ZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS8uY2xhc3NwYXRoIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyMTY1ZWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYy8iLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzODQ5ZGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLWJpbgotYnVpbGQueG1sCi10ZW1wLmZvbGRlcgotd3NjLWF4aXMuamFyCi1AZG90Ci1zcmMuemlwCi1qYXZhQ29tcGlsZXIuLi5hcmdzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvLnByb2plY3QgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0NTQ4NTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGZkMTA0OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotI01vbiBKYW4gMzAgMTA6Mjk6MTQgRVNUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3NzA0MDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jTW9uIEphbiAzMCAxMDo0MTozOSBFU1QgMjAwNgotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQ1MzAzYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlUExVR0lOX05BTUUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmU7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4yMDQucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnBsdWdpbi5XZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uQ29yZVBsdWdpbgotQnVuZGxlLVZlbmRvcjogJVBMVUdJTl9QUk9WSURFUgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbWFuZDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb250ZXh0O3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5wbHVnaW47eC1pbnRlcm5hbDo9dHJ1ZQotUmVxdWlyZS1CdW5kbGU6IG9yZy5hcGFjaGUuYW50O2J1bmRsZS12ZXJzaW9uPSJbMS42LjUsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcztidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDMuNC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZHQuY29yZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC53cztidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuYXBhY2hlLmF4aXM7YnVuZGxlLXZlcnNpb249IlsxLjQuMCwxLjUuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24ubW9kdWxlY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50O2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudjtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAyLDEuMS4wKSIKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL2Fib3V0Lmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkYjM2ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL2J1aWxkLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQ1NTYxMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLXNvdXJjZS4uID0gc3JjLwotYmluLmluY2x1ZGVzID0gLixcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvcGx1Z2luLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiMjliMDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jCi0jIE1lc3NhZ2VzIGluIHBsdWdpbi54bWwuCi0jCi1QTFVHSU5fTkFNRT1XZWIgc2VydmljZSBBeGlzIENvbnN1bXB0aW9uIENvcmUKLVBMVUdJTl9QUk9WSURFUj1FY2xpcHNlLm9yZwotCi14cFdTRERDb250ZW50VHlwZSA9IEF4aXMgV2ViIFNlcnZpY2UgRGVwbG95bWVudCBEZXNjcmlwdG9yCi0KLVhfV0VCX1NFUlZJQ0VfTE9DQVRPUl9BWElTPUFwYWNoZSBBeGlzIFdlYiBTZXJ2aWNlIExvY2F0b3IKLVhfV0VCX1NFUlZJQ0VfTE9DQVRPUl9DQVRFR09SWV9BWElTPUFwYWNoZSBBeGlzIENvbXBvbmVudHMKLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3BsdWdpbi54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTk5Y2QxOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci0KLTxwbHVnaW4+Ci0KLSAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi53c2ZpbmRlciI+Ci0gICAgICA8d3NmaW5kZXIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLndzZmluZGVyLldTRmluZGVyQXhpcyIKLSAgICAgICAgICAgIG5hbWU9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUud3NmaW5kZXIuV1NGaW5kZXJBeGlzIgotICAgICAgICAgICAgZGVzY3JpcHRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUud3NmaW5kZXIuV1NGaW5kZXJBeGlzIgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUud3NmaW5kZXIuV1NGaW5kZXJBeGlzIj4KLSAgICAgIDwvd3NmaW5kZXI+Ci0gICA8L2V4dGVuc2lvbj4KLQotICAgPCEtLSBFeHRlbnNpb24gcHJvdmlkaW5nIHdvcmtzcGFjZSBXU0RMIGRpc2NvdmVyeSAtLT4gICAKLSAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC53cy5sb2NhdG9yIj4KLQotICAgICAgPHdlYlNlcnZpY2VMb2NhdG9yQ2F0ZWdvcnkKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmxvY2F0b3IuY2F0ZWdvcnkuYXhpcyIKLSAgICAgICAgICAgIGxhYmVsPSIlWF9XRUJfU0VSVklDRV9MT0NBVE9SX0NBVEVHT1JZX0FYSVMiLz4KLQotICAgICAgPHdlYlNlcnZpY2VMb2NhdG9yCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5sb2NhdG9yLkF4aXNXZWJTZXJ2aWNlTG9jYXRvciIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmxvY2F0b3IuYXhpcyIKLSAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmxvY2F0b3IuY2F0ZWdvcnkuYXhpcyIKLSAgICAgICAgICAgIGxhYmVsPSIlWF9XRUJfU0VSVklDRV9MT0NBVE9SX0FYSVMiPgotICAgICAgPC93ZWJTZXJ2aWNlTG9jYXRvcj4KLQotICAgPC9leHRlbnNpb24+Ci0KLQotICAgPCEtLSBkZWZpbmUgYSB3c2RkIGZpbGUgdHlwZSBmb3IgQXhpcyBXZWIgU2VydmljZSBEZXBsb3ltZW50IERlc2NyaXB0b3JzIC0tPgotICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudGVhbS5jb3JlLmZpbGVUeXBlcyI+Ci0gICAgICA8ZmlsZVR5cGVzCi0gICAgICAgICAgICB0eXBlPSJ0ZXh0IgotICAgICAgICAgICAgZXh0ZW5zaW9uPSJ3c2RkIj4KLSAgICAgIDwvZmlsZVR5cGVzPgotICAgPC9leHRlbnNpb24+Ci0gICAKLSAgIDwhLS0gZGVmaW5lIGEgd3NkZCBjb250ZW50IHR5cGUgZm9yIEF4aXMgV2ViIFNlcnZpY2UgRGVwbG95bWVudCBEZXNjcmlwdG9ycyAtLT4KLSAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5jb250ZW50VHlwZXMiPgotICAgICAgPGNvbnRlbnQtdHlwZQotICAgICAgICAgICAgcHJpb3JpdHk9ImhpZ2giCi0gICAgICAgICAgICBuYW1lPSIleHBXU0REQ29udGVudFR5cGUiCi0gICAgICAgICAgICBpZD0id3NkZHNvdXJjZSIKLSAgICAgICAgICAgIGJhc2UtdHlwZT0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnhtbCIKLSAgICAgICAgICAgIGRlZmF1bHQtY2hhcnNldD0iVVRGLTgiCi0gICAgICAgICAgICBmaWxlLWV4dGVuc2lvbnM9IndzZGQiIC8+Ci0gICA8L2V4dGVuc2lvbj4KLQotPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi9jb3JlL0F4aXNDb25zdW1wdGlvbkNvcmUucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9BeGlzQ29uc3VtcHRpb25Db3JlLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5ODNmZGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi9jb3JlL0F4aXNDb25zdW1wdGlvbkNvcmUucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotIyAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyAyMDA3MDQxMiAgIDE3NzAwNSBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgTWVzc2FnZXMgZm9yIEF4aXNEZXBsb3lDb21tYW5kCi0jCi1NU0dfRVJST1JfUFJPSkVDVF9VUkxfUEFSQU1fTk9UX1NFVD1JV0FCMDA1NEUgV2ViIHByb2plY3QgVVJMIGZvciBkZXBsb3ltZW50IG9mIFdlYiBzZXJ2aWNlIGlzIG5vdCBzZXQgaW4gQXhpc0RlcGxveUNvbW1hbmQKLU1TR19FUlJPUl9ERVBMT1lfRklMRV9QQVJBTV9OT1RfU0VUPUlXQUIwNDg4RSBMb2NhdGlvbiBvZiBBeGlzIGRlcGxveW1lbnQgZmlsZSBpcyBub3Qgc2V0IGluIEF4aXNEZXBsb3lDb21tYW5kCi1NU0dfRVJST1JfQVhJU19ERVBMT1k9SVdBQjA0ODlFIEVycm9yIHdoZW4gZGVwbG95aW5nIFdlYiBzZXJ2aWNlIHRvIEF4aXMgcnVudGltZQotTVNHX0FYSVNfREVQTE9ZPURlcGxveWluZyBXZWIgc2VydmljZSB0byBBeGlzIHJ1bi10aW1lIGVudmlyb25tZW50Ci0KLSMKLSMgTWVzc2FnZXMgZm9yIEphdmEyV1NETENvbW1hbmQKLSMKLU1TR19HRU5FUkFURV9XU0RMPUdlbmVyYXRpbmcgV1NETCBmaWxlOiB7MH0KLU1TR19FUlJPUl9KQVZBX1dTRExfR0VORVJBVEU9SVdBQjAzOThFIEVycm9yIGluIGdlbmVyYXRpbmcgV1NETCBmcm9tIEphdmE6IAotCi0jCi0jIE1lc3NhZ2VzIGZvciBXU0RMMkphdmFDb21tYW5kCi0jCi1NU0dfUEFSU0lOR19XU0RMPVBhcnNpbmcgV1NETCBmaWxlOiB7MH0KLU1TR19FUlJPUl9XU0RMX0pBVkFfR0VORVJBVEU9SVdBQjAzOTlFIEVycm9yIGluIGdlbmVyYXRpbmcgSmF2YSBmcm9tIFdTREw6IAotTVNHX0VSUk9SX01PVkVfUkVTT1VSQ0U9SVdBQjA1MjNFIEVycm9yIG1vdmluZyByZXNvdXJjZTogezB9Ci1NU0dfRVJST1JfQ1JFQVRFX1RFTVBfRElSPUVycm9yIGNyZWF0aW5nIHRlbXBvcmFyeSBkaXJlY3RvcnkKLQotIwotIyBNZXNzYWdlcyBjb21tb24gZm9yIGFsbAotIwotTVNHX0VSUk9SX0pBVkFfV1NETF9QQVJBTV9OT1RfU0VUPUlXQUIwMzk3RSBKYXZhV1NETFBhcmFtIG5vdCBzZXQKLU1TR19FUlJPUl9GT0xERVJfTk9UX0ZPVU5EPU91dHB1dCBmb2xkZXI6IHswfSB3YXMgbm90IGZvdW5kLgotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiZGE4OTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi9jb3JlL0F4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNDEyICAgMTc3MDA1IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLQotcHVibGljIGZpbmFsIGNsYXNzIEF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcyBleHRlbmRzIE5MUyB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSAib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5BeGlzQ29uc3VtcHRpb25Db3JlIjsvLyROT04tTkxTLTEkCi0KLQlwcml2YXRlIEF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcygpIHsKLQkJLy8gRG8gbm90IGluc3RhbnRpYXRlCi0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1BST0pFQ1RfVVJMX1BBUkFNX05PVF9TRVQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0RFUExPWV9GSUxFX1BBUkFNX05PVF9TRVQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0FYSVNfREVQTE9ZOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19BWElTX0RFUExPWTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfR0VORVJBVEVfV1NETDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfSkFWQV9XU0RMX0dFTkVSQVRFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19QQVJTSU5HX1dTREw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1dTRExfSkFWQV9HRU5FUkFURTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfSkFWQV9XU0RMX1BBUkFNX05PVF9TRVQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX01PVkVfUkVTT1VSQ0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0NSRUFURV9URU1QX0RJUjsKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0ZPTERFUl9OT1RfRk9VTkQ7Ci0gIAotCXN0YXRpYyB7Ci0JCU5MUy5pbml0aWFsaXplTWVzc2FnZXMoQlVORExFX05BTUUsIEF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5jbGFzcyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi9jb3JlL2NvbW1hbmQvQXhpc0RlcGxveUNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9jb21tYW5kL0F4aXNEZXBsb3lDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4NzQ4YmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi9jb3JlL2NvbW1hbmQvQXhpc0RlcGxveUNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tYW5kOwotCi0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLmF4aXMudG9vbHMuYW50LmF4aXMuQWRtaW5DbGllbnRUYXNrOwotaW1wb3J0IG9yZy5hcGFjaGUudG9vbHMuYW50LkJ1aWxkRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUudG9vbHMuYW50LlByb2plY3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQuVGFyZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5BeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlByb2dyZXNzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0vKioKLSAqIENvbW1hbmRzIGFyZSBleGVjdXRhYmxlLCB1bmRvYWJsZSwgcmVkb2FibGUgb2JqZWN0cy4gRXZlcnkgQ29tbWFuZCBoYXMgYSBuYW1lIGFuZCBhIGRlc2NyaXB0aW9uLgotICovCi0KLXB1YmxpYyBjbGFzcyBBeGlzRGVwbG95Q29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFNFUlZJQ0VfRVhUID0gIi9zZXJ2aWNlcy9BZG1pblNlcnZpY2UiOyAvLyROT04tTkxTLTEkCi0KLSAgcHJpdmF0ZSBKYXZhV1NETFBhcmFtZXRlciBqYXZhV1NETFBhcmFtOwotICAKLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBBeGlzRGVwbG95Q29tbWFuZC4KLSAgICogQHBhcmFtIFN0cmluZyBkZXNjcmlwdGlvbgotICAgKiBAcGFyYW0gU3RyaW5nIG5hbWUKLSAgICogCi0gICAqLwotICBwdWJsaWMgQXhpc0RlcGxveUNvbW1hbmQoKQotICB7Ci0gIH0KLQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgewotICAgIElFbnZpcm9ubWVudCBlbnZpcm9ubWVudCA9IGdldEVudmlyb25tZW50KCk7Ci0gICAgaWYgKGphdmFXU0RMUGFyYW0gPT0gbnVsbCkKLSAgICB7ICAgICAKLSAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhBeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMuTVNHX0VSUk9SX0pBVkFfV1NETF9QQVJBTV9OT1RfU0VUKTsKLSAgICB9Ci0KLSAgICBpZiAoamF2YVdTRExQYXJhbS5nZXRQcm9qZWN0VVJMKCkgPT0gbnVsbCB8fCBqYXZhV1NETFBhcmFtLmdldFByb2plY3RVUkwoKS5lcXVhbHMoIiIpKQotICAgIHsgLy8kTk9OLU5MUy0xJAotICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKEF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5NU0dfRVJST1JfUFJPSkVDVF9VUkxfUEFSQU1fTk9UX1NFVCk7Ci0gICAgfQotCi0gICAgaWYgKGphdmFXU0RMUGFyYW0uZ2V0RGVwbG95bWVudEZpbGVzKCkgPT0gbnVsbCB8fCBqYXZhV1NETFBhcmFtLmdldERlcGxveW1lbnRGaWxlcygpLmxlbmd0aCA9PSAwKQotICAgIHsKLSAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhBeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMuTVNHX0VSUk9SX0RFUExPWV9GSUxFX1BBUkFNX05PVF9TRVQpOwotICAgIH0KLQotICAgIFByb2dyZXNzVXRpbHMucmVwb3J0KG1vbml0b3IsIEF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5NU0dfQVhJU19ERVBMT1kpOwotCi0gICAgSVN0YXR1cyBzdGF0dXMgPSBleGVjdXRlQW50VGFzaygpOwotICAgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpCi0gICAgewotICAgIAllbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHN0YXR1czsKLSAgfQotCi0gIHByb3RlY3RlZCBJU3RhdHVzIGV4ZWN1dGVBbnRUYXNrKCkKLSAgewotICAgIGZpbmFsIGNsYXNzIERlcGxveVRhc2sgZXh0ZW5kcyBBZG1pbkNsaWVudFRhc2sKLSAgICB7Ci0gICAgICBwdWJsaWMgRGVwbG95VGFzaygpCi0gICAgICB7Ci0JCXN1cGVyLnNldFByb2plY3QobmV3IFByb2plY3QoKSk7Ci0JCXN1cGVyLmdldFByb2plY3QoKS5pbml0KCk7Ci0JCXN1cGVyLnNldFRhc2tUeXBlKCJheGlzIik7IC8vJE5PTi1OTFMtMSQKLQkJc3VwZXIuc2V0VGFza05hbWUoImF4aXMtYWRtaW4iKTsgLy8kTk9OLU5MUy0xJAotCQlzdXBlci5zZXRPd25pbmdUYXJnZXQobmV3IFRhcmdldCgpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBEZXBsb3lUYXNrIGFkbWluQ2xpZW50ID0gbmV3IERlcGxveVRhc2soKTsKLSAgICBTdHJpbmcgdXJsID0gamF2YVdTRExQYXJhbS5nZXRQcm9qZWN0VVJMKCkgKyBTRVJWSUNFX0VYVDsKLSAgICBhZG1pbkNsaWVudC5zZXRVcmwodXJsKTsKLSAgICBhZG1pbkNsaWVudC5zZXRYbWxGaWxlKG5ldyBGaWxlKGphdmFXU0RMUGFyYW0uZ2V0RGVwbG95bWVudEZpbGVzKClbMF0pKTsKLQotICAgIC8vIFNpbmNlIHRoZSBhZG1pbiBzZXJ2ZXIgbWF5IG5vdCBiZSBhdmFpbGFibGUgcmlnaHQgYXdheSB3ZSB3aWxsIHRyeQotICAgIC8vIHNldmVyYWwgdGltZXMgdG8gZXhlY3V0ZSBpdC4KLSAgICB0cnkKLSAgICB7Ci0gICAgICBCdWlsZEV4Y2VwdGlvbiBsYXN0RXhjZXB0aW9uID0gbnVsbDsKLSAgICAgIAotICAgICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IDIwOyBpbmRleCsrICkKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBsYXN0RXhjZXB0aW9uID0gbnVsbDsKLSAgICAgICAgICBhZG1pbkNsaWVudC5leGVjdXRlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2goIEJ1aWxkRXhjZXB0aW9uIGV4YyApCi0gICAgICAgIHsKLSAgICAgICAgICBsYXN0RXhjZXB0aW9uID0gZXhjOwotICAgICAgICAgIAotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFRocmVhZC5zbGVlcCggMjAwICk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoKCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB0aHJlYWRFeGNlcHRpb24gICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBJZiBubyBleGNlcHRpb24gb2NjdXJlZCB0aGVuIHdlIHNob3VsZCBicmVhayBvdXQgb2YgdGhlIGxvb3AuCi0gICAgICAgIGlmKCBsYXN0RXhjZXB0aW9uID09IG51bGwgKSBicmVhazsKLSAgICAgIH0KLSAgICAgIAotICAgICAgLy8gSWYgYWZ0ZXIgbWFueSB0cmllcyB3ZSBzdGlsbCBnZXQgYW4gZXhjZXB0aW9uLCB0aGVuIHdlIHdpbGwgcmUgdGhyb3cgaXQuCi0gICAgICBpZiggbGFzdEV4Y2VwdGlvbiAhPSBudWxsICkgdGhyb3cgbGFzdEV4Y2VwdGlvbjsKLSAgICB9Ci0gICAgY2F0Y2ggKEJ1aWxkRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIFN0cmluZyBtZXNzYWdlID0gZS5nZXRNZXNzYWdlKCk7Ci0gICAgICBpZiAoZS5nZXRDYXVzZSgpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIG1lc3NhZ2UgPSBlLmdldENhdXNlKCkudG9TdHJpbmcoKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgSVN0YXR1c1tdIGNoaWxkU3RhdHVzID0gbmV3IFN0YXR1c1sxXTsKLSAgICAgIGNoaWxkU3RhdHVzWzBdID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIG1lc3NhZ2UpOwotICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLm11bHRpU3RhdHVzKEF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5NU0dfRVJST1JfQVhJU19ERVBMT1ksIGNoaWxkU3RhdHVzKTsKLSAgICB9Ci0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7IAotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBqYXZhV1NETFBhcmFtIFRoZSBqYXZhV1NETFBhcmFtIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEphdmFXU0RMUGFyYW0oSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbSkKLSAgewotICAgIHRoaXMuamF2YVdTRExQYXJhbSA9IGphdmFXU0RMUGFyYW07Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi9jb3JlL2NvbW1hbmQvR2Vyb25pbW9BeGlzRGVwbG95Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi9jb3JlL2NvbW1hbmQvR2Vyb25pbW9BeGlzRGVwbG95Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDU1YTM3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9jb21tYW5kL0dlcm9uaW1vQXhpc0RlcGxveUNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tYW5kOwotCi0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci0KLWltcG9ydCBvcmcuYXBhY2hlLmF4aXMuQXhpc0VuZ2luZTsKLWltcG9ydCBvcmcuYXBhY2hlLmF4aXMuc2VydmVyLkF4aXNTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS5heGlzLnRvb2xzLmFudC5heGlzLkFkbWluQ2xpZW50VGFzazsKLWltcG9ydCBvcmcuYXBhY2hlLmF4aXMudXRpbHMuQ2xhc3NVdGlsczsKLWltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFudC5CdWlsZEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFudC5Qcm9qZWN0OwotaW1wb3J0IG9yZy5hcGFjaGUudG9vbHMuYW50LlRhcmdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLkF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbi5KYXZhV1NETFBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlByb2dyZXNzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5yZXNvdXJjZXMuSVZpcnR1YWxDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotLyoqCi0gKiBDb21tYW5kcyBhcmUgZXhlY3V0YWJsZSwgdW5kb2FibGUsIHJlZG9hYmxlIG9iamVjdHMuIEV2ZXJ5IENvbW1hbmQgaGFzIGEgbmFtZSBhbmQgYSBkZXNjcmlwdGlvbi4KLSAqLwotCi1wdWJsaWMgY2xhc3MgR2Vyb25pbW9BeGlzRGVwbG95Q29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0KLSAgcHJpdmF0ZSBKYXZhV1NETFBhcmFtZXRlciBqYXZhV1NETFBhcmFtOwotCi0gIHByaXZhdGUgU3RyaW5nIHByb2plY3ROYW1lXzsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFYSVNfU0VSVkVSX0NPTkZJR19GSUxFID0gImF4aXMuU2VydmVyQ29uZmlnRmlsZSI7Ci0gIAotICBJRm9sZGVyIG91dHB1dFJvb3Q7Ci0gIAotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIEdlcm9uaW1vQXhpc0RlcGxveUNvbW1hbmQuCi0gKiBAcGFyYW0gU3RyaW5nIHByb2plY3ROYW1lCi0gICAqIAotICAgKi8KLSAgcHVibGljIEdlcm9uaW1vQXhpc0RlcGxveUNvbW1hbmQoU3RyaW5nIHByb2plY3ROYW1lKQotICB7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0JSUVudmlyb25tZW50IGVudmlyb25tZW50ID0gZ2V0RW52aXJvbm1lbnQoKTsKLSAgICBpZiAoamF2YVdTRExQYXJhbSA9PSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhBeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMuTVNHX0VSUk9SX0pBVkFfV1NETF9QQVJBTV9OT1RfU0VUKTsKLSAgICB9Ci0KLSAgICBpZiAoamF2YVdTRExQYXJhbS5nZXRQcm9qZWN0VVJMKCkgPT0gbnVsbCB8fCBqYXZhV1NETFBhcmFtLmdldFByb2plY3RVUkwoKS5lcXVhbHMoIiIpKQotICAgIHsgLy8kTk9OLU5MUy0xJAotICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKEF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5NU0dfRVJST1JfUFJPSkVDVF9VUkxfUEFSQU1fTk9UX1NFVCk7Ci0gICAgfQotCi0gICAgaWYgKGphdmFXU0RMUGFyYW0uZ2V0RGVwbG95bWVudEZpbGVzKCkgPT0gbnVsbCB8fCBqYXZhV1NETFBhcmFtLmdldERlcGxveW1lbnRGaWxlcygpLmxlbmd0aCA9PSAwKQotICAgIHsKLSAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cygKLSAgICAgIEF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5NU0dfRVJST1JfREVQTE9ZX0ZJTEVfUEFSQU1fTk9UX1NFVCk7Ci0gICAgfQotCi0gICAgUHJvZ3Jlc3NVdGlscy5yZXBvcnQobW9uaXRvciwgQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzLk1TR19BWElTX0RFUExPWSk7Ci0KLSAgICBJU3RhdHVzIHN0YXR1cyA9IGV4ZWN1dGVBZG1pblRhc2soKTsKLSAgICBpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKQotICAgIHsKLSAgICAgICAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgfSAgICAKLSAgICAKLSAgICBzdGF0dXMgPSBleGVjdXRlQW50VGFzaygpOwotICAgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpCi0gICAgewotICAgICAgICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLSAgICB9ICAgIAotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBJU3RhdHVzIGV4ZWN1dGVBbnRUYXNrKCkKLSAgewotICAgIGZpbmFsIGNsYXNzIERlcGxveVRhc2sgZXh0ZW5kcyBBZG1pbkNsaWVudFRhc2sKLSAgICB7Ci0gICAgICBwdWJsaWMgRGVwbG95VGFzaygpCi0gICAgICB7Ci0gICAgICAgIHN1cGVyLnNldFByb2plY3QobmV3IFByb2plY3QoKSk7Ci0JCXN1cGVyLmdldFByb2plY3QoKS5pbml0KCk7Ci0JCXN1cGVyLnNldFRhc2tUeXBlKCJheGlzIik7IC8vJE5PTi1OTFMtMSQKLQkJc3VwZXIuc2V0VGFza05hbWUoImF4aXMtYWRtaW4iKTsgLy8kTk9OLU5MUy0xJAotCQlzdXBlci5zZXRPd25pbmdUYXJnZXQobmV3IFRhcmdldCgpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBEZXBsb3lUYXNrIGFkbWluQ2xpZW50ID0gbmV3IERlcGxveVRhc2soKTsKLSAgICBTdHJpbmcgdXJsID0gamF2YVdTRExQYXJhbS5nZXRQcm9qZWN0VVJMKCkgKyBBeGlzRGVwbG95Q29tbWFuZC5TRVJWSUNFX0VYVDsKLSAgICBhZG1pbkNsaWVudC5zZXRVcmwodXJsKTsKLSAgICBhZG1pbkNsaWVudC5zZXRYbWxGaWxlKG5ldyBGaWxlKGphdmFXU0RMUGFyYW0uZ2V0RGVwbG95bWVudEZpbGVzKClbMF0pKTsKLQotICAgIC8vIFNpbmNlIHRoZSBhZG1pbiBzZXJ2ZXIgbWF5IG5vdCBiZSBhdmFpbGFibGUgcmlnaHQgYXdheSB3ZSB3aWxsIHRyeQotICAgIC8vIHNldmVyYWwgdGltZXMgdG8gZXhlY3V0ZSBpdC4KLSAgICB0cnkKLSAgICB7Ci0gICAgICBCdWlsZEV4Y2VwdGlvbiBsYXN0RXhjZXB0aW9uID0gbnVsbDsKLSAgICAgIAotICAgICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IDIwOyBpbmRleCsrICkKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBsYXN0RXhjZXB0aW9uID0gbnVsbDsKLSAgICAgICAgICBhZG1pbkNsaWVudC5leGVjdXRlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2goIEJ1aWxkRXhjZXB0aW9uIGV4YyApCi0gICAgICAgIHsKLSAgICAgICAgICBsYXN0RXhjZXB0aW9uID0gZXhjOwotICAgICAgICAgIAotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFRocmVhZC5zbGVlcCggMjAwICk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoKCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB0aHJlYWRFeGNlcHRpb24gICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBJZiBubyBleGNlcHRpb24gb2NjdXJlZCB0aGVuIHdlIHNob3VsZCBicmVhayBvdXQgb2YgdGhlIGxvb3AuCi0gICAgICAgIGlmKCBsYXN0RXhjZXB0aW9uID09IG51bGwgKSBicmVhazsKLSAgICAgIH0KLSAgICAgIAotICAgICAgLy8gSWYgYWZ0ZXIgbWFueSB0cmllcyB3ZSBzdGlsbCBnZXQgYW4gZXhjZXB0aW9uLCB0aGVuIHdlIHdpbGwgcmUgdGhyb3cgaXQuCi0gICAgICBpZiggbGFzdEV4Y2VwdGlvbiAhPSBudWxsICkgdGhyb3cgbGFzdEV4Y2VwdGlvbjsKLSAgICB9Ci0gICAgY2F0Y2ggKEJ1aWxkRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIFN0cmluZyBtZXNzYWdlID0gZS5nZXRNZXNzYWdlKCk7Ci0gICAgICBpZiAoZS5nZXRDYXVzZSgpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIG1lc3NhZ2UgPSBlLmdldENhdXNlKCkudG9TdHJpbmcoKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgSVN0YXR1c1tdIGNoaWxkU3RhdHVzID0gbmV3IFN0YXR1c1sxXTsKLSAgICAgIGNoaWxkU3RhdHVzWzBdID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIG1lc3NhZ2UpOwotICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLm11bHRpU3RhdHVzKEF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5NU0dfRVJST1JfQVhJU19ERVBMT1ksIGNoaWxkU3RhdHVzKTsKLSAgICB9Ci0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7IAotCi0gIH0KLSAgCi0gIHByb3RlY3RlZCBJU3RhdHVzIGV4ZWN1dGVBZG1pblRhc2soKXsKLSAgICAKLSAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgLy8gY2hlY2sgaWYgc2VydmVyLWNvbmZpZy53c2RkIGV4aXN0cwotICAgIElWaXJ0dWFsQ29tcG9uZW50IGNvbXBvbmVudCA9IEoyRUVVdGlscy5nZXRWaXJ0dWFsQ29tcG9uZW50KCBwcm9qZWN0TmFtZV8gKTsKLSAgICBvdXRwdXRSb290ID0gSjJFRVV0aWxzLmdldE91dHB1dENvbnRhaW5lclJvb3QoIGNvbXBvbmVudCApOwotICAgIElQYXRoIHBhdGggPSBuZXcgUGF0aCggIldFQi1JTkYiICkuYXBwZW5kKCAic2VydmVyLWNvbmZpZy53c2RkIiApOyAgICAKLSAgICBJRmlsZSBkZXNjcmlwdG9yRmlsZSA9IG91dHB1dFJvb3QuZ2V0RmlsZSggcGF0aCApOwotICAgIAotICAgIGlmICghZGVzY3JpcHRvckZpbGUuZXhpc3RzKCkpewotICAgICAgc3RhdHVzID0gY3JlYXRlU2VydmVyQ29uZmlnRmlsZSgpOwotICAgICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpPT1TdGF0dXMuRVJST1IpCi0gICAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQotICAgIAotICAgIC8vIGNoZWNrIGlmIGRlcGxveS53c2RkIGV4aXN0cwotICAgIFN0cmluZyBkZXBsb3lXU0REID0gamF2YVdTRExQYXJhbS5nZXREZXBsb3ltZW50RmlsZXMoKVswXTsKLSAgICBGaWxlIGRlcGxveUZpbGUgPSBuZXcgRmlsZShkZXBsb3lXU0REKTsKLSAgICBpZiAoZGVwbG95RmlsZT09bnVsbCB8fCAhZGVwbG95RmlsZS5leGlzdHMoKSl7Ci0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0KLSAgICAKLSAgICB0cnkgewotICAgICAgLy8gZ2V0IENsYXNzcGF0aAotICAgICAgU3RyaW5nIGphcnNDUCA9IG5ldyBTdHJpbmcoKTsKLSAgICAgIC8vIGNsYXNzZXMgZGlyCi0gICAgICBJUGF0aCBjbGFzc2VzUGF0aCA9IG5ldyBQYXRoKCJXRUItSU5GIikuYXBwZW5kKCJjbGFzc2VzIik7Ci0gICAgICBJRmlsZSBjbGFzc2VzRGlyID0gb3V0cHV0Um9vdC5nZXRGaWxlKGNsYXNzZXNQYXRoKTsKLSAgICAgIGphcnNDUCA9ICJcIiIrY2xhc3Nlc0Rpci5nZXRSYXdMb2NhdGlvbigpLnRvT1NTdHJpbmcoKSsiXCIiOwotICAgICAgCi0gICAgICAvLyBsaWIgSkFScwotICAgICAgSVBhdGggbGliUGF0aCA9IG5ldyBQYXRoKCJXRUItSU5GIikuYXBwZW5kKCJsaWIiKTsKLSAgICAgIElGaWxlIGxpYkVudHJ5ID0gb3V0cHV0Um9vdC5nZXRGaWxlKGxpYlBhdGgpOwotICAgICAgSUZvbGRlciBsaWJGb2xkZXIgPSAoSUZvbGRlcilSZXNvdXJjZVV0aWxzLmZpbmRSZXNvdXJjZShsaWJFbnRyeS5nZXRGdWxsUGF0aCgpKTsKLSAgICAgIElSZXNvdXJjZVtdIEpBUmZpbGVzID0gbGliRm9sZGVyLm1lbWJlcnMoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPEpBUmZpbGVzLmxlbmd0aDtpKyspewotICAgICAgICBJUmVzb3VyY2UgcmVzID0gSkFSZmlsZXNbaV07Ci0gICAgICAgIGlmIChyZXMuZ2V0RmlsZUV4dGVuc2lvbigpLmVxdWFscygiamFyIikpewotICAgICAgICAgIGphcnNDUCA9IGphcnNDUCArICI7XCIiKyByZXMuZ2V0UmF3TG9jYXRpb24oKS50b09TU3RyaW5nKCkrIlwiIjsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICAvLyBmb3JtIGFuZCBydW4gdXRpbHMuQWRtaW4gY29tbWFuZAotICAgICAgU3RyaW5nIGFkbWluQ29tbWFuZCA9IG5ldyBTdHJpbmcoImphdmEgLURheGlzLlNlcnZlckNvbmZpZ0ZpbGU9IisgZGVzY3JpcHRvckZpbGUuZ2V0UmF3TG9jYXRpb24oKS50b09TU3RyaW5nKCkgCi0gICAgICAgICAgKyIgLWNwICIramFyc0NQKyIgb3JnLmFwYWNoZS5heGlzLnV0aWxzLkFkbWluIHNlcnZlciAiK2RlcGxveUZpbGUuZ2V0Q2Fub25pY2FsUGF0aCgpKTsKLSAgICAgIFJ1bnRpbWUuZ2V0UnVudGltZSgpLmV4ZWMoYWRtaW5Db21tYW5kKTsKLQotICAgIH0KLSAgICBjYXRjaChFeGNlcHRpb24gZSl7Ci0gICAgICBTeXN0ZW0uc2V0UHJvcGVydHkoQVhJU19TRVJWRVJfQ09ORklHX0ZJTEUsInNlcnZlci1jb25pZmcud3NkZCIpOyAgICAgIAotICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIFN0cmluZyBtZXNzYWdlID0gZS5nZXRNZXNzYWdlKCk7Ci0gICAgICBpZiAoZS5nZXRDYXVzZSgpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIG1lc3NhZ2UgPSBlLmdldENhdXNlKCkudG9TdHJpbmcoKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgSVN0YXR1c1tdIGNoaWxkU3RhdHVzID0gbmV3IFN0YXR1c1sxXTsKLSAgICAgIGNoaWxkU3RhdHVzWzBdID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIG1lc3NhZ2UpOwotICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLm11bHRpU3RhdHVzKEF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5NU0dfRVJST1JfQVhJU19ERVBMT1ksIGNoaWxkU3RhdHVzKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHN0YXR1czsKLSAgfQotICAKLSAgLyoqdAotICAgKiBDcmVhdGVzIHRoZSBpbml0aWFsIHNlcnZlci1jb25maWcud3NkZCBmaWxlIGZyb20gYSB0ZW1wbGF0ZSBpbiBBeGlzCi0gICAqIEByZXR1cm4KLSAgICovCi0gIHByaXZhdGUgSVN0YXR1cyBjcmVhdGVTZXJ2ZXJDb25maWdGaWxlKCl7Ci0gICAgdHJ5ewotCi0gICAgICAvLyBzZXJ2ZXItY29uZmlnLndzZGQgZmlsZQotICAgICAgSVBhdGggICAgICAgICAgICAgcGF0aCAgICAgICAgICAgPSBuZXcgUGF0aCggIldFQi1JTkYiICkuYXBwZW5kKCAic2VydmVyLWNvbmZpZy53c2RkIiApOyAgICAKLSAgICAgIElGaWxlICAgICAgICAgICAgIGRlc2NyaXB0b3JGaWxlID0gb3V0cHV0Um9vdC5nZXRGaWxlKCBwYXRoICk7ICAgICAgCi0KLSAgICAgIC8vIGNyZWF0ZSB0aGUgaW5pdGlhbCBzZXJ2ZXItY29uZmlnLndzZGQgZmlsZQotICAgICAgQXhpc0VuZ2luZSBwcmVFbmdpbmUgPSBuZXcgQXhpc1NlcnZlcigpOwotICAgICAgSW5wdXRTdHJlYW0gaXMgPSBDbGFzc1V0aWxzLmdldFJlc291cmNlQXNTdHJlYW0ocHJlRW5naW5lLmdldENsYXNzKCksICJzZXJ2ZXItY29uZmlnLndzZGQiKTsKLSAgICAgIEZpbGVPdXRwdXRTdHJlYW0gZm9zID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oZGVzY3JpcHRvckZpbGUuZ2V0UmF3TG9jYXRpb24oKS50b09TU3RyaW5nKCkpOwotICAgICAgUmVzb3VyY2VVdGlscy5jb3B5U3RyZWFtKGlzLCBmb3MpOwotICAgICAgZm9zLmNsb3NlKCk7Ci0gICAgICAKLSAgICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICAgIH0KLSAgICBjYXRjaChFeGNlcHRpb24gZSl7Ci0gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgU3RyaW5nIG1lc3NhZ2UgPSBlLmdldE1lc3NhZ2UoKTsKLSAgICAgIGlmIChlLmdldENhdXNlKCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgbWVzc2FnZSA9IGUuZ2V0Q2F1c2UoKS50b1N0cmluZygpOwotICAgICAgfQotCi0gICAgICBJU3RhdHVzW10gY2hpbGRTdGF0dXMgPSBuZXcgU3RhdHVzWzFdOwotICAgICAgY2hpbGRTdGF0dXNbMF0gPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggbWVzc2FnZSk7Ci0gICAgICByZXR1cm4gU3RhdHVzVXRpbHMubXVsdGlTdGF0dXMoQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzLk1TR19FUlJPUl9BWElTX0RFUExPWSwgY2hpbGRTdGF0dXMpOwotCi0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBqYXZhV1NETFBhcmFtIFRoZSBqYXZhV1NETFBhcmFtIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEphdmFXU0RMUGFyYW0oSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbSkKLSAgewotICAgIHRoaXMuamF2YVdTRExQYXJhbSA9IGphdmFXU0RMUGFyYW07Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi9jb3JlL2NvbW1hbmQvSmF2YTJXU0RMQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi9jb3JlL2NvbW1hbmQvSmF2YTJXU0RMQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjFhYmUzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9jb21tYW5kL0phdmEyV1NETENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAxMDYgICAxMjExOTkgamVzcGVyQHNlbHNrYWJldC5vcmcgLSBKZXNwZXIgTfhsbGVyCi0gKiAyMDA2MDMyOSAgIDEyNzAxNiBhbmR5emhhaUBjYS5pYm0uY29tIC0gQW5keSBaaGFpCi0gKiAyMDA2MDUxNSAgIDExNTIyNSBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDcwODEzICAgMTg4OTk5IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1hbmQ7Ci0KLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLmF4aXMudG9vbHMuYW50LndzZGwuSmF2YTJXc2RsQW50VGFzazsKLWltcG9ydCBvcmcuYXBhY2hlLmF4aXMudG9vbHMuYW50LndzZGwuTmFtZXNwYWNlTWFwcGluZzsKLWltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFudC5CdWlsZEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFudC5Qcm9qZWN0OwotaW1wb3J0IG9yZy5hcGFjaGUudG9vbHMuYW50LlRhcmdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLkF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbi5KYXZhV1NETFBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbnRleHQuQXhpc0VtaXR0ZXJDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29udGV4dC5BeGlzRW1pdHRlckRlZmF1bHRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUucGx1Z2luLldlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25Db3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5wbHVnaW4uV2ViU2VydmljZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb21tb24uRmlsZVJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlByb2dyZXNzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkJhc2VFY2xpcHNlRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JTG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSVN0YXR1c0hhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotLyoqCi0gKiBDb21tYW5kcyBhcmUgZXhlY3V0YWJsZSwgdW5kb2FibGUsIHJlZG9hYmxlIG9iamVjdHMuCi0gKiBFdmVyeSBDb21tYW5kIGhhcyBhIG5hbWUgYW5kIGEgZGVzY3JpcHRpb24uCi0gKi8KLQotcHVibGljIGNsYXNzIEphdmEyV1NETENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotCi0JcHJpdmF0ZSBKYXZhV1NETFBhcmFtZXRlciBqYXZhV1NETFBhcmFtXzsKLQlwcml2YXRlIEZpbGUgdGVtcE91dHB1dFdzZGxGaWxlOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIFRFTVAgPSAidGVtcCI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBXU0RMX0VYVCA9ICIud3NkbCI7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBKYXZhMldTRExDb21tYW5kKCkgewotCX0JCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEphdmEyV1NETENvbW1hbmQuCi0JICovCi0JcHVibGljIEphdmEyV1NETENvbW1hbmQoSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbSkgewotCQlzdXBlcigpOwotCQl0aGlzLmphdmFXU0RMUGFyYW1fID0gamF2YVdTRExQYXJhbTsKLQl9Ci0KLQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkgCi0JewotCQlJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQgPSBnZXRFbnZpcm9ubWVudCgpOwotCQlJU3RhdHVzIHN0YXR1czsKLQkJaWYgKGphdmFXU0RMUGFyYW1fID09IG51bGwpIHsKLQkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKEF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5NU0dfRVJST1JfSkFWQV9XU0RMX1BBUkFNX05PVF9TRVQpOwotCQkJZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0JCQlyZXR1cm4gc3RhdHVzOwotCQl9Ci0KLQkJaWYgKGphdmFXU0RMUGFyYW1fLmdldEJlYW5OYW1lKCkgPT0gbnVsbCkgewotCQkJc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzLk1TR19FUlJPUl9KQVZBX1dTRExfUEFSQU1fTk9UX1NFVCk7Ci0JCQllbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJCXJldHVybiBzdGF0dXM7Ci0JCX0KLQotCQlQcm9ncmVzc1V0aWxzLnJlcG9ydChtb25pdG9yLCBOTFMuYmluZChBeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMuTVNHX0dFTkVSQVRFX1dTREwsIGphdmFXU0RMUGFyYW1fLmdldEJlYW5OYW1lKCkgKSk7Ci0KLQkJcmV0dXJuIGV4ZWN1dGVBbnRUYXNrKGVudmlyb25tZW50LCBtb25pdG9yKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgSVN0YXR1cyBleGVjdXRlQW50VGFzayhJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgewotCi0JCWZpbmFsIGNsYXNzIEVtaXR0ZXIgZXh0ZW5kcyBKYXZhMldzZGxBbnRUYXNrIHsKLQkJCXB1YmxpYyBFbWl0dGVyKCkgewotCQkJCXN1cGVyLnNldFByb2plY3QobmV3IFByb2plY3QoKSk7Ci0JCQkJc3VwZXIuZ2V0UHJvamVjdCgpLmluaXQoKTsKLQkJCQlzdXBlci5zZXRUYXNrVHlwZSgiYXhpcyIpOyAvLyROT04tTkxTLTEkCi0JCQkJc3VwZXIuc2V0VGFza05hbWUoImF4aXMtamF2YTJ3c2RsIik7IC8vJE5PTi1OTFMtMSQKLQkJCQlzdXBlci5zZXRPd25pbmdUYXJnZXQobmV3IFRhcmdldCgpKTsKLQkJCX0KLQkJfQotCi0JCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLQkJSUxvZyBlbnZMb2cgPSBlbnZpcm9ubWVudC5nZXRMb2coKTsKLQkJRW1pdHRlciBlbWl0dGVyID0gbmV3IEVtaXR0ZXIoKTsKLQkJZW1pdHRlci5jcmVhdGVDbGFzc3BhdGgoKS5zZXRQYXRoKGphdmFXU0RMUGFyYW1fLmdldENsYXNzcGF0aCgpKTsKLQkJZW52TG9nLmxvZyhJTG9nLklORk8sIDUwMDgsIHRoaXMsICJleGVjdXRlQW50VGFzayIsICJDbGFzcyBQYXRoID0gIisgamF2YVdTRExQYXJhbV8uZ2V0Q2xhc3NwYXRoKCkpOwotCQkKLQkJZW1pdHRlci5zZXRQb3J0VHlwZU5hbWUoamF2YVdTRExQYXJhbV8uZ2V0UG9ydFR5cGVOYW1lKCkpOwotCQllbnZMb2cubG9nKElMb2cuSU5GTywgNTAwOSwgdGhpcywgImV4ZWN1dGVBbnRUYXNrIiwgIlBvcnQgVHlwZSBOYW1lID0gIisgamF2YVdTRExQYXJhbV8uZ2V0UG9ydFR5cGVOYW1lKCkpOwotCQkKLQkJZW1pdHRlci5zZXRTZXJ2aWNlRWxlbWVudE5hbWUoamF2YVdTRExQYXJhbV8uZ2V0U2VydmljZU5hbWUoKSk7Ci0JCWVudkxvZy5sb2coSUxvZy5JTkZPLCA1MDEwLCB0aGlzLCAiZXhlY3V0ZUFudFRhc2siLCAiU2VydmljZSBOYW1lID0gIisgamF2YVdTRExQYXJhbV8uZ2V0U2VydmljZU5hbWUoKSk7Ci0JCQotCQllbWl0dGVyLnNldExvY2F0aW9uKGphdmFXU0RMUGFyYW1fLmdldFVybExvY2F0aW9uKCkpOwotCQllbnZMb2cubG9nKElMb2cuSU5GTywgNTAxMSwgdGhpcywgImV4ZWN1dGVBbnRUYXNrIiwgIlVSTCBMb2NhdGlvbiA9ICIrIGphdmFXU0RMUGFyYW1fLmdldFVybExvY2F0aW9uKCkpOwotCQkKLQkJZW1pdHRlci5zZXRNZXRob2RzKGphdmFXU0RMUGFyYW1fLmdldE1ldGhvZFN0cmluZygpKTsKLQkJZW52TG9nLmxvZyhJTG9nLklORk8sIDUwMTIsIHRoaXMsICJleGVjdXRlQW50VGFzayIsICJNZXRob2RzID0gIisgamF2YVdTRExQYXJhbV8uZ2V0TWV0aG9kU3RyaW5nKCkpOwotCQkKLQkJZW1pdHRlci5zZXRTdHlsZShqYXZhV1NETFBhcmFtXy5nZXRTdHlsZSgpKTsKLQkJZW52TG9nLmxvZyhJTG9nLklORk8sIDUwMTMsIHRoaXMsICJleGVjdXRlQW50VGFzayIsICJTdHlsZSA9ICIrIGphdmFXU0RMUGFyYW1fLmdldFN0eWxlKCkpOwotCQkKLQkJZW1pdHRlci5zZXRVc2UoamF2YVdTRExQYXJhbV8uZ2V0VXNlKCkpOwotCQllbnZMb2cubG9nKElMb2cuSU5GTywgNTAxNCwgdGhpcywgImV4ZWN1dGVBbnRUYXNrIiwgIlVzZSA9ICIrIGphdmFXU0RMUGFyYW1fLmdldFVzZSgpKTsKLQkJCQkKLQkJLy8gY3JlYXRlIHRlbXBvcmFyeSBkaXJlY3RvcnkgdG8gdXNlIGFzIG91dHB1dCBkaXJlY3RvcnkgZm9yIGphdmEyd3NkbAotCQlJUGF0aCBwbHVnaW5TdGF0ZUxvYyA9IFdlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25Db3JlUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0U3RhdGVMb2NhdGlvbigpOwotCQlGaWxlIHRlbXBEaXIgPSBuZXcgRmlsZShwbHVnaW5TdGF0ZUxvYy50b1N0cmluZygpKTsKLQkJRmlsZSBuZXdUZW1wRmlsZSA9IG51bGw7Ci0JCXRyeSB7Ci0JCQluZXdUZW1wRmlsZSA9IEZpbGUuY3JlYXRlVGVtcEZpbGUoVEVNUCwgV1NETF9FWFQsIHRlbXBEaXIpOwotCQkJdGVtcE91dHB1dFdzZGxGaWxlID0gbmV3VGVtcEZpbGU7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQl0ZW1wT3V0cHV0V3NkbEZpbGUgPSBuZXcgRmlsZSAocGx1Z2luU3RhdGVMb2MuYXBwZW5kKFRFTVArV1NETF9FWFQpLnRvU3RyaW5nKCkpOwotCQl9Ci0KLQkJZW1pdHRlci5zZXRPdXRwdXQodGVtcE91dHB1dFdzZGxGaWxlKTsKLQkJCi0JCWVudkxvZy5sb2coSUxvZy5JTkZPLCA1MDE1LCB0aGlzLCAiZXhlY3V0ZUFudFRhc2siLCAiV1NETCBMb2NhdGlvbiA9ICIrIGphdmFXU0RMUGFyYW1fLmdldE91dHB1dFdzZGxMb2NhdGlvbigpKTsKLQkJCi0JCWVtaXR0ZXIuc2V0TmFtZXNwYWNlKGphdmFXU0RMUGFyYW1fLmdldE5hbWVzcGFjZSgpKTsKLQkJZW52TG9nLmxvZyhJTG9nLklORk8sIDUwMTYsIHRoaXMsICJleGVjdXRlQW50VGFzayIsICJOYW1lIFNwYWNlID0gIisgamF2YVdTRExQYXJhbV8uZ2V0TmFtZXNwYWNlKCkpOwotCQkKLQkJZW1pdHRlci5zZXRDbGFzc05hbWUoamF2YVdTRExQYXJhbV8uZ2V0QmVhbk5hbWUoKSk7Ci0JCWVudkxvZy5sb2coSUxvZy5JTkZPLCA1MDE3LCB0aGlzLCAiZXhlY3V0ZUFudFRhc2siLCAiQmVhbiBuYW1lID0gIisgamF2YVdTRExQYXJhbV8uZ2V0QmVhbk5hbWUoKSk7Ci0JCQotCQllbWl0dGVyLnNldEltcGxDbGFzcyhqYXZhV1NETFBhcmFtXy5nZXRCZWFuTmFtZSgpKTsKLQkJCi0JICAgIEF4aXNFbWl0dGVyQ29udGV4dCBjb250ZXh0ID0gV2ViU2VydmljZUF4aXNDb25zdW1wdGlvbkNvcmVQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRBeGlzRW1pdHRlckNvbnRleHQoKTsKLQkgICAgCi0JICAgIGlmIChjb250ZXh0LmlzVXNlSW5oZXJpdGVkTWV0aG9kc0VuYWJsZWQoKSAhPSBBeGlzRW1pdHRlckRlZmF1bHRzLmdldFVzZUluaGVyaXRlZE1ldGhvZHNEZWZhdWx0KCkpCi0JICAgIHsKLQkgICAgCWVtaXR0ZXIuc2V0VXNlSW5oZXJpdGVkTWV0aG9kcyhjb250ZXh0LmlzVXNlSW5oZXJpdGVkTWV0aG9kc0VuYWJsZWQoKSk7Ci0JCQllbnZMb2cubG9nKElMb2cuSU5GTywgNTA5OSwgdGhpcywgImV4ZWN1dGVBbnRUYXNrIiwgIiBzZXQgVXNlSW5oZXJpdGVkTWV0aG9kcyA6ICIgKyBjb250ZXh0LmlzVXNlSW5oZXJpdGVkTWV0aG9kc0VuYWJsZWQoKSApOwotCSAgICB9Ci0JCQotCQlIYXNoTWFwIG1hcHBpbmdzID0gamF2YVdTRExQYXJhbV8uZ2V0TWFwcGluZ3MoKTsKLQkJaWYobWFwcGluZ3MgIT0gbnVsbCl7Ci0JCQlJdGVyYXRvciBrZXlzID0gbWFwcGluZ3Mua2V5U2V0KCkuaXRlcmF0b3IoKTsKLQkJCXdoaWxlKGtleXMuaGFzTmV4dCgpKXsKLQkJCQlTdHJpbmcgcGFrYWdlID0gKFN0cmluZylrZXlzLm5leHQoKTsKLQkJCQlTdHJpbmcgbmFtZXNwYWNlID0gKFN0cmluZyltYXBwaW5ncy5nZXQocGFrYWdlKTsKLQkJCQlOYW1lc3BhY2VNYXBwaW5nIG1hcCA9IG5ldyBOYW1lc3BhY2VNYXBwaW5nKCk7Ci0JCQkJbWFwLnNldFBhY2thZ2UocGFrYWdlKTsKLQkJCQltYXAuc2V0TmFtZXNwYWNlKG5hbWVzcGFjZSk7Ci0JCQkJZW1pdHRlci5hZGRNYXBwaW5nKG1hcCk7CQkKLQkJCX0KLQkJfQotCQkKLQkKLQkJdHJ5IHsKLQkJCWVtaXR0ZXIuZXhlY3V0ZSgpOwotCQkJc3RhdHVzID0gbW92ZUdlbmVyYXRlZFdTREwoZW52aXJvbm1lbnQsIG1vbml0b3IpOwotCQl9IGNhdGNoIChCdWlsZEV4Y2VwdGlvbiBlKSB7Ci0JCQllbnZMb2cubG9nKElMb2cuRVJST1IsIDUwMTgsIHRoaXMsICJleGVjdXRlQW50VGFzayIsIGUpOwotCQkJc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoCi0JCQlBeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMuTVNHX0VSUk9SX0pBVkFfV1NETF9HRU5FUkFURSArICIgIiAvLyROT04tTkxTLTEkCi0JCQkrZS5nZXRDYXVzZSgpLnRvU3RyaW5nKCksIGUuZ2V0Q2F1c2UoKSk7Ci0JCQllbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJCXJldHVybiBzdGF0dXM7Ci0JfSBmaW5hbGx5IHsKLQkJaWYgKHRlbXBPdXRwdXRXc2RsRmlsZS5leGlzdHMoKSkgewotCQkJdGVtcE91dHB1dFdzZGxGaWxlLmRlbGV0ZSgpOwotCQl9Ci0JfQotCQlyZXR1cm4gc3RhdHVzOwotCi0JfQotCQotCXB1YmxpYyBJU3RhdHVzIG1vdmVHZW5lcmF0ZWRXU0RMKElFbnZpcm9ubWVudCBlbnZpcm9ubWVudCwKLQkJCUlQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgewotCQlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0JCUZpbGVJbnB1dFN0cmVhbSBmaW5TdHJlYW0gPSBudWxsOwotCQkKLSAgICBSZXNvdXJjZUNvbnRleHQgY29udGV4dCAgICAgICA9ICgoQmFzZUVjbGlwc2VFbnZpcm9ubWVudCllbnZpcm9ubWVudCkuZ2V0UmVzb3VyY2VDb250ZXh0KCk7ICAgICAgICAKLQkJSVN0YXR1c0hhbmRsZXIgIHN0YXR1c0hhbmRsZXIgPSBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCk7Ci0JCQotCQlTdHJpbmcgb3V0cHV0V3NkbExvY2F0aW9uID0gamF2YVdTRExQYXJhbV8uZ2V0T3V0cHV0V3NkbExvY2F0aW9uKCk7Ci0JCUlQYXRoIHRhcmdldFBhdGggPSBuZXcgUGF0aChvdXRwdXRXc2RsTG9jYXRpb24pOwotCQl0cnkgewotCQkJZmluU3RyZWFtID0gbmV3IEZpbGVJbnB1dFN0cmVhbSh0ZW1wT3V0cHV0V3NkbEZpbGUpOwotCQkJaWYgKGZpblN0cmVhbSAhPSBudWxsKSB7Ci0JCQkJRmlsZVJlc291cmNlVXRpbHMuY3JlYXRlRmlsZUF0TG9jYXRpb24oY29udGV4dCwgdGFyZ2V0UGF0aC5tYWtlQWJzb2x1dGUoKSwgZmluU3RyZWFtLAotCQkJCQkJbW9uaXRvciwgc3RhdHVzSGFuZGxlcik7Ci0JCQkJZmluU3RyZWFtLmNsb3NlKCk7Ci0JCQl9Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQlzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZChBeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMuTVNHX0VSUk9SX01PVkVfUkVTT1VSQ0UsbmV3IFN0cmluZ1tde2UuZ2V0TG9jYWxpemVkTWVzc2FnZSgpfSksIGUpOwotCQkJZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0JCX0gZmluYWxseSB7Ci0JCQl0cnkgewotCQkJCWlmIChmaW5TdHJlYW0gIT0gbnVsbCkgewotCQkJCQlmaW5TdHJlYW0uY2xvc2UoKTsKLQkJCQl9Ci0JCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIHN0YXR1czsKLQl9Ci0JCi0JcHVibGljIFN0YXR1cyB1bmRvKElFbnZpcm9ubWVudCBlbnZpcm9ubWVudCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgU3RhdHVzIHJlZG8oSUVudmlyb25tZW50IGVudmlyb25tZW50KSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGphdmFXU0RMUGFyYW0uCi0JICogQHJldHVybiBKYXZhV1NETFBhcmFtZXRlcgotCSAqLwotCXB1YmxpYyBKYXZhV1NETFBhcmFtZXRlciBnZXRKYXZhV1NETFBhcmFtKCkgewotCQlyZXR1cm4gamF2YVdTRExQYXJhbV87Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0SmF2YVdTRExQYXJhbShKYXZhV1NETFBhcmFtZXRlciBqYXZhV1NETFBhcm0pIHsKLQkJdGhpcy5qYXZhV1NETFBhcmFtXyA9IGphdmFXU0RMUGFybTsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRXc2RsVVJJKCkKLQl7Ci0JICBGaWxlIGZpbGUgPSBuZXcgRmlsZShnZXRKYXZhV1NETFBhcmFtKCkuZ2V0T3V0cHV0V3NkbExvY2F0aW9uKCkpOyAKLQkgICAgU3RyaW5nIHVybCA9ICIiOwotCQkgIHRyeSB7Ci0JICAgIAl1cmwgPSBmaWxlLnRvVVJMKCkudG9TdHJpbmcoKTsKLQkgICAgfQotCQkgIGNhdGNoKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBtdWUpe30KLQkJcmV0dXJuIHVybDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvY29tbWFuZC9XU0RMMkphdmFDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvY29tbWFuZC9XU0RMMkphdmFDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmODQ3MDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi9jb3JlL2NvbW1hbmQvV1NETDJKYXZhQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiB5eXl5bW1kZCAgIGJ1ZyAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIDIwMDYwMzI5ICAgMTI3MDE2IGFuZHl6aGFpQGNhLmlibS5jb20gLSBBbmR5IFpoYWkKLSAqIDIwMDYwNDA0ICAgMTM0NzkxIGFuZHl6aGFpQGNhLmlibS5jb20gLSBBbmR5IFpoYWkKLSAqIDIwMDYwNTE1ICAgMTE1MjI1IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwNzA4MTMgICAxODg5OTkgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbWFuZDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmFwYWNoZS5heGlzLmNvbnN0YW50cy5TY29wZTsKLWltcG9ydCBvcmcuYXBhY2hlLmF4aXMud3NkbC50b0phdmEuRW1pdHRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLmF4aXMud3NkbC50b0phdmEuR2VuZXJhdGVkRmlsZUluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5BeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb250ZXh0LkF4aXNFbWl0dGVyQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbnRleHQuQXhpc0VtaXR0ZXJEZWZhdWx0czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnBsdWdpbi5XZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uQ29yZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnBsdWdpbi5XZWJTZXJ2aWNlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbW1vbi5GaWxlUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uUHJvZ3Jlc3NVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuQmFzZUVjbGlwc2VFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklMb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JU3RhdHVzSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi0KLXB1YmxpYyBjbGFzcyBXU0RMMkphdmFDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gewotCi0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgREVQTE9ZX1RZUEUgPSAiZGVwbG95IjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgZmluYWwgU3RyaW5nIFVOREVQTE9ZX1RZUEUgPSAidW5kZXBsb3kiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgVEVNUCA9ICJ0ZW1wIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbTsKLQlwcml2YXRlIFN0cmluZyB3c2RsVVJJOwotCXByaXZhdGUgU3RyaW5nIGh0dHBCYXNpY0F1dGhVc2VybmFtZTsKLQlwcml2YXRlIFN0cmluZyBodHRwQmFzaWNBdXRoUGFzc3dvcmQ7Ci0JcHJpdmF0ZSBMaXN0IGRlcGxveUZpbGVzOwotCXByaXZhdGUgTGlzdCBqYXZhRmlsZXM7Ci0JcHJpdmF0ZSBGaWxlIHRlbXBPdXRwdXRGaWxlOwotCi0JcHVibGljIFdTREwySmF2YUNvbW1hbmQoKSB7Ci0JfQotCi0JcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0JewotCQlJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQgPSBnZXRFbnZpcm9ubWVudCgpOwotCQlJTG9nIGVudkxvZyA9IGVudmlyb25tZW50LmdldExvZygpOwotCQlJU3RhdHVzIHN0YXR1czsKLQkJaWYgKGphdmFXU0RMUGFyYW0gPT0gbnVsbCkgewotCQkJc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoCi0JCQkJCUF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5NU0dfRVJST1JfSkFWQV9XU0RMX1BBUkFNX05PVF9TRVQpOwotCQkJZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0JCQlyZXR1cm4gc3RhdHVzOwotCQl9Ci0JCQotCQlpZiAod3NkbFVSSSAhPSBudWxsKSAvL2JvdHRvbSB1cCBjYXNlIGhhcyBhbHJlYWR5IGhhcyB0aGUgY29ycmVjdCBXU0RMIG9uIGphdmFXU0RMUGFyYW0KLQkJewotCQkJamF2YVdTRExQYXJhbS5zZXRJbnB1dFdzZGxMb2NhdGlvbih3c2RsVVJJKTsKLQkJfQotCQlqYXZhV1NETFBhcmFtLnNldEhUVFBVc2VybmFtZShodHRwQmFzaWNBdXRoVXNlcm5hbWUpOwotCQlqYXZhV1NETFBhcmFtLnNldEhUVFBQYXNzd29yZChodHRwQmFzaWNBdXRoUGFzc3dvcmQpOwotCQkKLQkJRW1pdHRlciB3c2RsMkphdmEgPSBuZXcgRW1pdHRlcigpOwotCQlpZiAoZW52TG9nLmlzRW5hYmxlZCgiZW1pdHRlciIpKSB7Ci0JCQl3c2RsMkphdmEuc2V0VmVyYm9zZSh0cnVlKTsKLQkJfSBlbHNlIHsKLQkJCXdzZGwySmF2YS5zZXRWZXJib3NlKGZhbHNlKTsKLQkJfQotCQlib29sZWFuIHNlcnZlclNpZGUgPSBqYXZhV1NETFBhcmFtLmdldFNlcnZlclNpZGUoKSA9PSBKYXZhV1NETFBhcmFtZXRlci5TRVJWRVJfU0lERV9CRUFOOwotCQl3c2RsMkphdmEuc2V0U2VydmVyU2lkZShzZXJ2ZXJTaWRlKTsKLQkJaWYgKHNlcnZlclNpZGUpIHsKLQkJCXdzZGwySmF2YS5zZXRTa2VsZXRvbldhbnRlZChqYXZhV1NETFBhcmFtLmlzU2tlbGV0b25EZXBsb3koKSk7Ci0JCX0KLQkJCi0JCS8vIGNyZWF0ZSB0ZW1wb3JhcnkgZGlyZWN0b3J5IHRvIHVzZSBhcyBvdXRwdXQgZGlyZWN0b3J5IGZvciB3c2RsMmphdmEKLQkJdGVtcE91dHB1dEZpbGUgPSBjcmVhdGVUZW1wRGlyKCk7Ci0JCXdzZGwySmF2YS5zZXRPdXRwdXREaXIodGVtcE91dHB1dEZpbGUudG9TdHJpbmcoKSk7Ci0JCQotCQl0cnkgewotCQkJaWYgKGphdmFXU0RMUGFyYW0uaXNNZXRhSW5mT25seSgpKSB7Ci0JCQkJLy8gZm9yIHRoZSBjYXNlIEphdmEyV1NETC1XU0RMMkphdmEKLQkJCQlIYXNoTWFwIHBjazJuc01hcCA9IGphdmFXU0RMUGFyYW0uZ2V0TWFwcGluZ3MoKTsKLQkJCQlpZiAocGNrMm5zTWFwICE9IG51bGwpIHsKLQkJCQkJSGFzaE1hcCBuczJwY2tNYXAgPSBuZXcgSGFzaE1hcCgpOwotCQkJCQlJdGVyYXRvciBrZXlzID0gcGNrMm5zTWFwLmtleVNldCgpLml0ZXJhdG9yKCk7Ci0JCQkJCXdoaWxlIChrZXlzLmhhc05leHQoKSkgewotCQkJCQkJU3RyaW5nIHBha2FnZSA9IChTdHJpbmcpIGtleXMubmV4dCgpOwotCQkJCQkJU3RyaW5nIG5hbWVzcGFjZSA9IChTdHJpbmcpIHBjazJuc01hcC5nZXQocGFrYWdlKTsKLQkJCQkJCW5zMnBja01hcC5wdXQobmFtZXNwYWNlLCBwYWthZ2UpOwotCQkJCQl9Ci0JCQkJCXdzZGwySmF2YS5zZXROYW1lc3BhY2VNYXAobnMycGNrTWFwKTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCS8vICBmb3IgdGhlIGNhc2UgV1NETDJKYXZhCQkJCi0JCQkJaWYgKGphdmFXU0RMUGFyYW0uZ2V0TWFwcGluZ3MoKSAhPSBudWxsKSB7Ci0JCQkJCXdzZGwySmF2YS5zZXROYW1lc3BhY2VNYXAoamF2YVdTRExQYXJhbS5nZXRNYXBwaW5ncygpKTsKLQkJCQl9Ci0JCQl9Ci0JCQllbnZMb2cubG9nKElMb2cuSU5GTywgNTAxOSwgdGhpcywgImV4ZWN1dGUiLCAiSmF2YSBvdXRwdXQgPSAiICsgamF2YVdTRExQYXJhbS5nZXRKYXZhT3V0cHV0KCkpOwotCQkJaWYgKGphdmFXU0RMUGFyYW0uZ2V0SFRUUFBhc3N3b3JkKCkgIT0gbnVsbCkgewotCQkJCXdzZGwySmF2YS5zZXRQYXNzd29yZChqYXZhV1NETFBhcmFtLmdldEhUVFBQYXNzd29yZCgpKTsKLQkJCQllbnZMb2cubG9nKElMb2cuSU5GTywgNTA4MSwgdGhpcywgImV4ZWN1dGUiLCAicGFzc3dvcmQ6ICIgKyBqYXZhV1NETFBhcmFtLmdldEhUVFBQYXNzd29yZCgpKTsKLQkJCX0KLQkJCWlmIChqYXZhV1NETFBhcmFtLmdldEhUVFBVc2VybmFtZSgpICE9IG51bGwpIHsKLQkJCQl3c2RsMkphdmEuc2V0VXNlcm5hbWUoamF2YVdTRExQYXJhbS5nZXRIVFRQVXNlcm5hbWUoKSk7Ci0JCQkJZW52TG9nLmxvZyhJTG9nLklORk8sIDUwODIsIHRoaXMsICJleGVjdXRlIiwgInVzZXJuYW1lOiAiICsgamF2YVdTRExQYXJhbS5nZXRIVFRQVXNlcm5hbWUoKSk7Ci0JCQl9Ci0JCQllbnZMb2cubG9nKElMb2cuSU5GTywgNTAyMCwgdGhpcywgImV4ZWN1dGUiLCAiV1NETCBMb2NhdGlvbiA9ICIgKyBqYXZhV1NETFBhcmFtLmdldElucHV0V3NkbExvY2F0aW9uKCkpOwotCQkJCi0JCQkvLyBJZiB0aW1lb3V0IGlzIG5vdCBzZXQsIHRoZSBkZWZhdWx0IHRpbWVvdXQgZm9yIHdzZGwyamF2YSBpcyA0NSBzZWNvbmRzLiAgCi0JCQkvLyBUaGUgdXNlciBjYW4gY2hhbmdlIHRoZSB0aW1lb3V0IHZhbHVlIGJ5IHNldHRpbmcgCi0JCQkvLyAiLURBeGlzV3NkbDJKYXZhVGltZW91dD08dGltZW91dF92YWx1ZV9pbl9taWxsaXNlY29uZHM+IiBhcyBWTSBhcmd1bWVudAotCQkJLy8gd2hlbiBzdGFydGluZyB0aGUgRWNsaXBzZSB3b3JrYmVuY2guCi0JCQkvLwotCQkJLy8gRm9yIGV4YW1wbGUsIGVudGVyIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB0byBzdGFydCB0aGUgRWNsaXBzZSB3b3JrYmVuY2ggCi0JCQkvLyBpbiBvcmRlciB0byBzZXQgdGhlIEF4aXMgV1NETCB0byBKYXZhIGVtaXR0ZXIgdGltZW91dCB0byA2MCBzZWNvbmRzOgotCQkJLy8KLQkJCS8vIAkJZWNsaXBzZSAtdm1hcmdzICItREF4aXNXc2RsMkphdmFUaW1lb3V0PTYwMDAwIgotCQkJLy8KLQkJCS8vIFdoZW4gQXhpc1dzZGwySmF2YVRpbWVvdXQgaXMgc2V0LCB0aGUgQXhpcyBlbWl0dGVyIHByZWZlcmVuY2UgcGFnZSB0aW1lb3V0IHNldHRpbmcgaXMgaWdub3JlZAotCQkgICAgQXhpc0VtaXR0ZXJDb250ZXh0IGNvbnRleHQgPSBXZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uQ29yZVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEF4aXNFbWl0dGVyQ29udGV4dCgpOwotCQkJU3RyaW5nIHdzZGwySmF2YVRpbWVvdXRQcm9wZXJ0eSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgiQXhpc1dzZGwySmF2YVRpbWVvdXQiKTsKLQkJCWxvbmcgdGltZW91dDsKLQkJCWlmICh3c2RsMkphdmFUaW1lb3V0UHJvcGVydHkgIT0gbnVsbCkgewotCQkJCXRpbWVvdXQgPSBuZXcgSW50ZWdlcih3c2RsMkphdmFUaW1lb3V0UHJvcGVydHkpLmxvbmdWYWx1ZSgpOwotCQkJCXdzZGwySmF2YS5zZXRUaW1lb3V0KHRpbWVvdXQpOwotCQkJCWVudkxvZy5sb2coSUxvZy5JTkZPLCA1MDkxLCB0aGlzLCAiZXhlY3V0ZSIsICJBeGlzV3NkbDJKYXZhVGltZW91dCA9ICIgKyB0aW1lb3V0KTsJCQkJCi0JCQl9Ci0JCQllbHNlIGlmKGNvbnRleHQuZ2V0VGltZU91dCgpICE9IEF4aXNFbWl0dGVyRGVmYXVsdHMuZ2V0VGltZU91dERlZmF1bHQoKSkKLQkJCXsKLQkJCQl0aW1lb3V0ID0gY29udGV4dC5nZXRUaW1lT3V0KCkgPT0gLTEgPyAtMSA6IGNvbnRleHQuZ2V0VGltZU91dCgpKiAxMDAwOyAKLQkJCQl3c2RsMkphdmEuc2V0VGltZW91dCh0aW1lb3V0KTsKLQkJCQllbnZMb2cubG9nKElMb2cuSU5GTywgNTEwMCwgdGhpcywgImV4ZWN1dGUiLCAiVGltZW91dCA9ICIgKyB0aW1lb3V0KTsKLQkJCX0KLQkJICAgIGlmIChjb250ZXh0LmdldERlcGxveVNjb3BlVHlwZSgpICE9IEF4aXNFbWl0dGVyRGVmYXVsdHMuZ2V0RGVwbG95U2NvcGVEZWZhdWx0KCkpCi0JCSAgICB7Ci0JCSAgICAJc3dpdGNoIChjb250ZXh0LmdldERlcGxveVNjb3BlVHlwZSgpKQotCQkgICAgCXsKLQkJICAgIAkJY2FzZSBBeGlzRW1pdHRlckNvbnRleHQuREVQTE9ZX1NDT1BFX1RZUEVfQVBQTElDQVRJT046Ci0JCSAgICAJCQl3c2RsMkphdmEuc2V0U2NvcGUoU2NvcGUuQVBQTElDQVRJT04pOwotCQkJCQkJZW52TG9nLmxvZyhJTG9nLklORk8sIDUxMDEsIHRoaXMsICJleGVjdXRlIiwgIiBEZXBsb3kgU2NvcGU6IEFwcGxpY2F0aW9uIiApOwotCQkgICAgCQkJYnJlYWs7Ci0JCSAgICAJCWNhc2UgQXhpc0VtaXR0ZXJDb250ZXh0LkRFUExPWV9TQ09QRV9UWVBFX1JFUVVFU1Q6Ci0JCSAgICAJCQl3c2RsMkphdmEuc2V0U2NvcGUoU2NvcGUuUkVRVUVTVCk7Ci0JCQkJCQllbnZMb2cubG9nKElMb2cuSU5GTywgNTEwMiwgdGhpcywgImV4ZWN1dGUiLCAiIERlcGxveSBTY29wZTogUmVxdWVzdCIgKTsKLQkJICAgIAkJCWJyZWFrOwotCQkgICAgCQljYXNlIEF4aXNFbWl0dGVyQ29udGV4dC5ERVBMT1lfU0NPUEVfVFlQRV9TRVNTVElPTjoKLQkJICAgIAkJCXdzZGwySmF2YS5zZXRTY29wZShTY29wZS5TRVNTSU9OKTsKLQkJCQkJCWVudkxvZy5sb2coSUxvZy5JTkZPLCA1MTAzLCB0aGlzLCAiZXhlY3V0ZSIsICIgRGVwbG95IFNjb3BlOiBTZXNzaW9uIiApOwotCQkgICAgCQkJYnJlYWs7Ci0JCSAgICAJCWRlZmF1bHQ6Ci0JCSAgICAJfQotCQkgICAgfQotCQkgICAgCi0JCSAgICBpZiAoY29udGV4dC5pc0FsbFdhbnRlZEVuYWJsZWQoKSAhPSBBeGlzRW1pdHRlckRlZmF1bHRzLmdldEFsbFdhbnRlZERlZmF1bHQoKSkKLQkJICAgIHsKLQkJICAgIAl3c2RsMkphdmEuc2V0QWxsV2FudGVkKGNvbnRleHQuaXNBbGxXYW50ZWRFbmFibGVkKCkpOwotCQkJCWVudkxvZy5sb2coSUxvZy5JTkZPLCA1MTA0LCB0aGlzLCAiZXhlY3V0ZSIsICIgc2V0IEFsbFdhbnRlZCA6ICIgKyBjb250ZXh0LmlzQWxsV2FudGVkRW5hYmxlZCgpICk7Ci0JCSAgICB9Ci0KLQkJICAgIGlmIChjb250ZXh0LmlzSGVscGVyV2FudGVkRW5hYmxlZCgpICE9IEF4aXNFbWl0dGVyRGVmYXVsdHMuZ2V0SGVscGVyV2FudGVkRGVmYXVsdCgpKQotCQkgICAgewotCQkgICAgCXdzZGwySmF2YS5zZXRIZWxwZXJXYW50ZWQoY29udGV4dC5pc0hlbHBlcldhbnRlZEVuYWJsZWQoKSk7Ci0JCQkJZW52TG9nLmxvZyhJTG9nLklORk8sIDUxMDUsIHRoaXMsICJleGVjdXRlIiwgIiBzZXQgSGVscGVyV2FudGVkIDogIiArIGNvbnRleHQuaXNIZWxwZXJXYW50ZWRFbmFibGVkKCkgKTsKLQkJCX0KLQkJICAgIGlmIChjb250ZXh0LmlzV3JhcEFycmF5c0VuYWJsZWQoKSAhPSBBeGlzRW1pdHRlckRlZmF1bHRzLmdldFdyYXBBcnJheXNEZWZhdWx0KCkpCi0JCSAgICB7Ci0JCSAgICAJd3NkbDJKYXZhLnNldFdyYXBBcnJheXMoY29udGV4dC5pc1dyYXBBcnJheXNFbmFibGVkKCkpOwotCQkJCWVudkxvZy5sb2coSUxvZy5JTkZPLCA1MTA2LCB0aGlzLCAiZXhlY3V0ZSIsICIgc2V0IFdyYXBBcnJheXMgOiAiICsgY29udGV4dC5pc1dyYXBBcnJheXNFbmFibGVkKCkgKTsKLQkJICAgIH0KLQkJCQotCQkJUHJvZ3Jlc3NVdGlscy5yZXBvcnQobW9uaXRvciwgTkxTLmJpbmQoQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzLk1TR19QQVJTSU5HX1dTREwsIGphdmFXU0RMUGFyYW0uZ2V0SW5wdXRXc2RsTG9jYXRpb24oKSApICk7Ci0JCQkKLQkJCXdzZGwySmF2YS5ydW4oamF2YVdTRExQYXJhbS5nZXRJbnB1dFdzZGxMb2NhdGlvbigpKTsKLQkJCQotCQkJamF2YUZpbGVzID0gd3NkbDJKYXZhLmdldEdlbmVyYXRlZEZpbGVOYW1lcygpOwotCQkJCi0JCQlkZXBsb3lGaWxlcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCWlmIChzZXJ2ZXJTaWRlKSB7Ci0JCQkJLy8gc2V0IGRlcGxveW1lbnQgZmlsZXMKLQkJCQlMaXN0IGRlcGxveW1lbnRGaWxlczEgPSB3c2RsMkphdmEuZ2V0R2VuZXJhdGVkRmlsZUluZm8oKS5maW5kVHlwZShERVBMT1lfVFlQRSk7Ci0JCQkJTGlzdCBkZXBsb3ltZW50RmlsZXMyID0gd3NkbDJKYXZhLmdldEdlbmVyYXRlZEZpbGVJbmZvKCkuZmluZFR5cGUoVU5ERVBMT1lfVFlQRSk7Ci0JCQkJaWYgKGRlcGxveW1lbnRGaWxlczEgIT0gbnVsbCAmJiBkZXBsb3ltZW50RmlsZXMyICE9IG51bGwpIHsKLQkJCQkJZGVwbG95bWVudEZpbGVzMS5hZGRBbGwoZGVwbG95bWVudEZpbGVzMik7Ci0JCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgZGVwbG95bWVudEZpbGVzMS5zaXplKCk7IGkrKykgewotCQkJCQkJR2VuZXJhdGVkRmlsZUluZm8uRW50cnkgZW50cnkgPSAoR2VuZXJhdGVkRmlsZUluZm8uRW50cnkpIGRlcGxveW1lbnRGaWxlczEuZ2V0KGkpOwotCQkJCQkJZGVwbG95RmlsZXMuYWRkKGVudHJ5LmZpbGVOYW1lKTsKLQkJCQkJfQotCQkJCX0JCi0JCQkJamF2YUZpbGVzLnJlbW92ZUFsbChkZXBsb3lGaWxlcyk7Ci0JCQl9Ci0JCQkKLQkJCXN0YXR1cyA9IG1vdmVHZW5lcmF0ZWRGaWxlcyhlbnZpcm9ubWVudCwgbW9uaXRvcik7Ci0JCQkKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCWVudkxvZy5sb2coSUxvZy5FUlJPUiwgNTAyMSwgdGhpcywgImV4ZWN1dGUiLCBlKTsKLQkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKAotCQkJCQlBeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMuTVNHX0VSUk9SX1dTRExfSkFWQV9HRU5FUkFURSArICIgIiAvLyROT04tTkxTLTEkCi0JCQkJCSsgZS50b1N0cmluZygpLCBlKTsKLQkJCWVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQl9IGZpbmFsbHkgewotCQkJZGVsZXRlRGlyKHRlbXBPdXRwdXRGaWxlKTsgCQkJCi0JCX0KLQkJcmV0dXJuIHN0YXR1czsJCi0JfQotCSAgCi0JcHVibGljIElTdGF0dXMgbW92ZUdlbmVyYXRlZEZpbGVzKCBJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApIAotCXsKLQkJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCQlJU3RhdHVzSGFuZGxlciBzdGF0dXNIYW5kbGVyID0gZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpOwkJCi0JCUZpbGVJbnB1dFN0cmVhbSBmaW5TdHJlYW0gPSBudWxsOwotCQkKLQkJdHJ5IHsKLQkJCVN0cmluZyBvdXRwdXREaXIsIGphdmFPdXRwdXQ7Ci0JCQlvdXRwdXREaXIgPSByZW1vdmVGaWxlUHJvdG9jb2woamF2YVdTRExQYXJhbS5nZXRPdXRwdXQoKSk7Ci0JCQlqYXZhT3V0cHV0ID0gcmVtb3ZlRmlsZVByb3RvY29sKGphdmFXU0RMUGFyYW0uZ2V0SmF2YU91dHB1dCgpKTsKLQkJCQotCQkJUmVzb3VyY2VDb250ZXh0IGNvbnRleHQgICAgPSAoKEJhc2VFY2xpcHNlRW52aXJvbm1lbnQpZW52aXJvbm1lbnQpLmdldFJlc291cmNlQ29udGV4dCgpOwkJCQkKLQkJCUlQYXRoICAgICAgICAgICBvdXRwdXRQYXRoID0gbmV3IFBhdGggKG91dHB1dERpcik7Ci0JCQkKLQkJCVN0cmluZyBmaWxlTmFtZTsKLQkJCUlQYXRoIHRhcmdldFBhdGg9bnVsbDsKLQotCQkJU3RyaW5nIGRlcGxveUZpbGU7Ci0JCQlJdGVyYXRvciBpdGVyYXRvcjsKLQkJCQotCQkJU3RyaW5nIHRlbXBPdXRwdXREaXIgPSB0ZW1wT3V0cHV0RmlsZS50b1N0cmluZygpOwotCQkJU3RyaW5nIFtdIG1vdmVkRGVwbG95RmlsZXMgPSBuZXcgU3RyaW5nIFtkZXBsb3lGaWxlcy5zaXplKCldOwotCQkJaXRlcmF0b3IgPSBkZXBsb3lGaWxlcy5pdGVyYXRvcigpOwotCQkJaW50IGkgPSAwOwotCQkJd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkgewotCQkJCWRlcGxveUZpbGUgPSAoU3RyaW5nKSBpdGVyYXRvci5uZXh0KCk7Ci0JCQkJRmlsZSBzb3VyY2UgPSBuZXcgRmlsZShkZXBsb3lGaWxlKTsKLQkJCQlmaW5TdHJlYW0gPSBuZXcgRmlsZUlucHV0U3RyZWFtKHNvdXJjZSk7Ci0JCQkJaWYgKGZpblN0cmVhbSAhPSBudWxsKSB7Ci0JCQkJCWlmIChkZXBsb3lGaWxlLnN0YXJ0c1dpdGgodGVtcE91dHB1dERpcikpIHsKLQkJCQkJCWZpbGVOYW1lID0gZGVwbG95RmlsZS5zdWJzdHJpbmcodGVtcE91dHB1dERpci5sZW5ndGgoKSk7Ci0JCQkJCQl0YXJnZXRQYXRoID0gb3V0cHV0UGF0aC5hcHBlbmQoZmlsZU5hbWUpLm1ha2VBYnNvbHV0ZSgpOyAgCi0JCQkJCQlGaWxlUmVzb3VyY2VVdGlscy5jcmVhdGVGaWxlQXRMb2NhdGlvbihjb250ZXh0LCAgCi0JCQkJCQkJCXRhcmdldFBhdGgsCi0JCQkJCQkJCWZpblN0cmVhbSwKLQkJCQkJCQkJbW9uaXRvciwKLQkJCQkJCQkJc3RhdHVzSGFuZGxlcik7Ci0JCQkJCQltb3ZlZERlcGxveUZpbGVzW2krK109IFJlc291cmNlVXRpbHMuZ2V0V29ya3NwYWNlUm9vdCgpLmdldEZpbGVGb3JMb2NhdGlvbih0YXJnZXRQYXRoKS5nZXRMb2NhdGlvbigpLnRvU3RyaW5nKCk7Ci0JCQkJCX0KLQkJCQkJZmluU3RyZWFtLmNsb3NlKCk7Ci0JCQkJfQotCQkJfQotCQkJCi0JCQlqYXZhV1NETFBhcmFtLnNldERlcGxveW1lbnRGaWxlcyhtb3ZlZERlcGxveUZpbGVzKTsKLQkJCQotCQkJSVBhdGggamF2YU91dHB1dFBhdGggPSBuZXcgUGF0aCAoamF2YU91dHB1dCk7Ci0JCQkKLQkJCVN0cmluZyBqYXZhRmlsZTsKLQkJCVN0cmluZyBmdWxsQ2xhc3NOYW1lID0gbnVsbDsKLQkJCVN0cmluZyBbXSBtb3ZlZEphdmFGaWxlcyA9ICBuZXcgU3RyaW5nIFtqYXZhRmlsZXMuc2l6ZSgpXTsKLQkJCWl0ZXJhdG9yID0gamF2YUZpbGVzLml0ZXJhdG9yKCk7Ci0JCQlpID0gMDsKLQkJCXdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpIHsKLQkJCQlqYXZhRmlsZSA9IChTdHJpbmcpIGl0ZXJhdG9yLm5leHQoKTsKLQkJCQlGaWxlIHNvdXJjZSA9IG5ldyBGaWxlKGphdmFGaWxlKTsKLQkJCQlmaW5TdHJlYW0gPSBuZXcgRmlsZUlucHV0U3RyZWFtKHNvdXJjZSk7Ci0JCQkJaWYgKGZpblN0cmVhbSAhPSBudWxsKSB7Ci0JCQkJCS8vIGZvciB0aGUgY2FzZSBKYXZhMldTREwtV1NETDJKYXZhLCBubyBuZWVkIHRvIG1vdmUgSmF2YSBmaWxlcywganVzdCBkZWxldGUgdGhlbQotCQkJCQlpZiAoIWphdmFXU0RMUGFyYW0uaXNNZXRhSW5mT25seSgpKSB7Ci0JCQkJCQkvLyBmb3IgdGhlIGNhc2UgV1NETDJKYXZhLCBtb3ZlIEphdmEgZmlsZXMgdG8gSmF2YSBvdXRwdXQgZGlyZWN0b3J5Ci0JCQkJCQlpZiAoamF2YUZpbGUuc3RhcnRzV2l0aCh0ZW1wT3V0cHV0RGlyKSkgewotCQkJCQkJCWZ1bGxDbGFzc05hbWUgPSBqYXZhRmlsZS5zdWJzdHJpbmcodGVtcE91dHB1dERpci5sZW5ndGgoKSk7Ci0JCQkJCQkJdGFyZ2V0UGF0aCA9IGphdmFPdXRwdXRQYXRoLmFwcGVuZChmdWxsQ2xhc3NOYW1lKS5tYWtlQWJzb2x1dGUoKTsgCi0JCQkJCQkJRmlsZVJlc291cmNlVXRpbHMuY3JlYXRlRmlsZUF0TG9jYXRpb24oY29udGV4dCwgIAotCQkJCQkJCQkJdGFyZ2V0UGF0aCwKLQkJCQkJCQkJCWZpblN0cmVhbSwKLQkJCQkJCQkJCW1vbml0b3IsCi0JCQkJCQkJCQlzdGF0dXNIYW5kbGVyKTsKLQkJCQkJCQltb3ZlZEphdmFGaWxlc1tpKytdPSBSZXNvdXJjZVV0aWxzLmdldFdvcmtzcGFjZVJvb3QoKS5nZXRGaWxlRm9yTG9jYXRpb24odGFyZ2V0UGF0aCkuZ2V0TG9jYXRpb24oKS50b1N0cmluZygpOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCQotCQkJCQlmaW5TdHJlYW0uY2xvc2UoKTsKLQkJCQl9Ci0JCQl9Ci0JCQlqYXZhV1NETFBhcmFtLnNldEphdmFGaWxlcyhtb3ZlZEphdmFGaWxlcyk7Ci0JCQkKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKEF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5NU0dfRVJST1JfTU9WRV9SRVNPVVJDRSxuZXcgU3RyaW5nW117ZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCl9KSwgZSk7Ci0JCQlzdGF0dXNIYW5kbGVyLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0JCQkKLQkJfSBmaW5hbGx5IHsKLQkJCWlmIChmaW5TdHJlYW0gIT0gbnVsbCkgewotCQkJCXRyeSB7Ci0JCQkJCWZpblN0cmVhbS5jbG9zZSgpOwotCQkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCQl9Ci0JCQl9CQkJCi0JCX0KLQkJCi0JCXJldHVybiBzdGF0dXM7Ci0JfQotCi0JLyoqCi0JICogRGVsZXRlcyBhbGwgZmlsZXMgYW5kIHN1YmRpcmVjdG9yaWVzIHVuZGVyIGRpci4gCi0JICogSnVzdCBpZ25vcmUgYW5kIGtlZXAgZ29pbmcgaWYgZGVsZXRlIGlzIG5vdCBzdWNjZXNzZnVsCi0JICogCi0JICogQHBhcmFtIGRpciBkaXJlY3RvcnkgdG8gZGVsZXRlCi0JICovCi0JcHVibGljIHZvaWQgZGVsZXRlRGlyKEZpbGUgZGlyKSB7Ci0JCWlmIChkaXIuaXNEaXJlY3RvcnkoKSkgewotCQkJU3RyaW5nW10gY2hpbGRyZW4gPSBkaXIubGlzdCgpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykgewotCQkJCWRlbGV0ZURpcihuZXcgRmlsZShkaXIsIGNoaWxkcmVuW2ldKSk7Ci0JCQl9Ci0JCX0KLQkJLy8gVGhlIGRpcmVjdG9yeSBpcyBub3cgZW1wdHkgc28gZGVsZXRlIGl0Ci0JCWRpci5kZWxldGUoKTsKLQl9Ci0JCi0JLyoqCi0JICogQ3JlYXRlcyBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgdW5kZXIgdGhlIHBsdWdpbidzIHN0YXRlIGxvY2F0aW9uIChpLmUuCi0JICogLm1ldGFkYXRhLy5wbHVnaW4gZGlyZWN0b3J5KQotCSAqIAotCSAqIEByZXR1cm4gRmlsZQotCSAqLwotCXByaXZhdGUgRmlsZSBjcmVhdGVUZW1wRGlyKCkgewotCQlTdHJpbmcgcGx1Z2luVGVtcERpciA9IFdlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25Db3JlUGx1Z2luCi0JCS5nZXRJbnN0YW5jZSgpLmdldFN0YXRlTG9jYXRpb24oKS50b1N0cmluZygpOwotCQlGaWxlIHRlbXBEaXIgPSBuZXcgRmlsZShwbHVnaW5UZW1wRGlyKTsKLQkJRmlsZSBuZXdUZW1wRGlyID0gbnVsbDsKLQkJdHJ5IHsKLQkJCW5ld1RlbXBEaXIgPSBGaWxlLmNyZWF0ZVRlbXBGaWxlKFRFTVAsICIiLCB0ZW1wRGlyKTsKLQkJCS8vIGRlbGV0ZSB0aGUgdGVtcCBmaWxlIGFuZCBjcmVhdGUgYSB0ZW1wIGRpcmVjdG9yeSBpbnN0ZWFkCi0JCQlpZiAobmV3VGVtcERpci5kZWxldGUoKSkgewotCQkJCWlmIChuZXdUZW1wRGlyLm1rZGlyKCkpIHsKLQkJCQkJdGVtcERpciA9IG5ld1RlbXBEaXI7Ci0JCQkJfQotCQkJfQotCQkJcmV0dXJuIHRlbXBEaXI7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQlyZXR1cm4gdGVtcERpcjsKLQkJfQotCX0KLQkJCi0JLyoKLQkgKiBIYWNrOiBBeGlzIGRvZXNuJ3QgbGlrZSBmaWxlIFVSTHMKLQkgKi8KLQlwcml2YXRlIFN0cmluZyByZW1vdmVGaWxlUHJvdG9jb2woU3RyaW5nIHMpIHsKLQkJaWYgKHMuc3RhcnRzV2l0aCgiZmlsZToiKSkgewotCQkJU3RyaW5nIG5ld1MgPSBzLnN1YnN0cmluZyg1LCBzLmxlbmd0aCgpKTsKLQkJCWludCBpID0gbmV3Uy5pbmRleE9mKCc6Jyk7Ci0JCQlpZiAoaSAhPSAtMSkgewotCQkJCVN0cmluZyBwcm90b2NvbCA9IG5ld1Muc3Vic3RyaW5nKDAsIGkpOwotCQkJCWludCBqID0gcHJvdG9jb2wuaW5kZXhPZignLycpOwotCQkJCWludCBrID0gcHJvdG9jb2wuaW5kZXhPZignXFwnKTsKLQkJCQlpbnQgbWF4ID0gTWF0aC5tYXgoaiwgayk7Ci0JCQkJaWYgKG1heCAhPSAtMSkKLQkJCQkJbmV3UyA9IG5ld1Muc3Vic3RyaW5nKG1heCArIDEsIG5ld1MubGVuZ3RoKCkpOwotCQkJfQotCQkJcmV0dXJuIG5ld1M7Ci0JCX0KLQkJcmV0dXJuIHM7Ci0JfQotCi0JcHVibGljIFN0YXR1cyB1bmRvKElFbnZpcm9ubWVudCBlbnZpcm9ubWVudCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgU3RhdHVzIHJlZG8oSUVudmlyb25tZW50IGVudmlyb25tZW50KSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldEphdmFXU0RMUGFyYW0oSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbSkgewotCQl0aGlzLmphdmFXU0RMUGFyYW0gPSBqYXZhV1NETFBhcmFtOwotCX0KLQotCXB1YmxpYyBKYXZhV1NETFBhcmFtZXRlciBnZXRKYXZhV1NETFBhcmFtKCkgewotCQlyZXR1cm4gamF2YVdTRExQYXJhbTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gaHR0cEJhc2ljQXV0aFBhc3N3b3JkCi0JICogICAgICAgICAgICBUaGUgaHR0cEJhc2ljQXV0aFBhc3N3b3JkIHRvIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRIdHRwQmFzaWNBdXRoUGFzc3dvcmQoU3RyaW5nIGh0dHBCYXNpY0F1dGhQYXNzd29yZCkgewotCQl0aGlzLmh0dHBCYXNpY0F1dGhQYXNzd29yZCA9IGh0dHBCYXNpY0F1dGhQYXNzd29yZDsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gaHR0cEJhc2ljQXV0aFVzZXJuYW1lCi0JICogICAgICAgICAgICBUaGUgaHR0cEJhc2ljQXV0aFVzZXJuYW1lIHRvIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRIdHRwQmFzaWNBdXRoVXNlcm5hbWUoU3RyaW5nIGh0dHBCYXNpY0F1dGhVc2VybmFtZSkgewotCQl0aGlzLmh0dHBCYXNpY0F1dGhVc2VybmFtZSA9IGh0dHBCYXNpY0F1dGhVc2VybmFtZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRXc2RsVVJJKFN0cmluZyB3c2RsVVJJKSB7Ci0JCXRoaXMud3NkbFVSSSA9IHdzZGxVUkk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvY29tbW9uL0phdmFXU0RMUGFyYW1Nb2RpZmllci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi9jb3JlL2NvbW1vbi9KYXZhV1NETFBhcmFtTW9kaWZpZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGFmYzQzOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvY29tbW9uL0phdmFXU0RMUGFyYW1Nb2RpZmllci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDQxMiAgIDE3NzAwNSBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7Ci1pbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuQmVhbk1vZGlmaWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uaW50ZXJuYWwuZW52aXJvbm1lbnQuZWNsaXBzZS5GaWxlUmVzb3VyY2VVdGlsczsKLQotcHVibGljIGNsYXNzIEphdmFXU0RMUGFyYW1Nb2RpZmllciBpbXBsZW1lbnRzIEJlYW5Nb2RpZmllciB7Ci0KLQlwdWJsaWMgdm9pZCBtb2RpZnkoT2JqZWN0IGJlYW4sIE9iamVjdCBwcm9wZXJ0eUhvbGRlcikKLQl7Ci0JCUphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW07Ci0JCWlmIChiZWFuICE9IG51bGwpCi0JCXsKLQkJCWphdmFXU0RMUGFyYW0gPSAoSmF2YVdTRExQYXJhbWV0ZXIpYmVhbjsJCi0JCX0KLQkJZWxzZQotCQl7Ci0JCQlqYXZhV1NETFBhcmFtID0gbmV3IEphdmFXU0RMUGFyYW1ldGVyKCk7Ci0JCX0KLQkJIAotCQkvL2xvb2sgZm9yIGVhY2gga25vd24ga2V5IGluIHRoZSBtYXAgJiBpZiB0aGVyZSwgY29udmVydCB0aGUgcHJvcGVydGllcyBhbmQgc2V0IG9uIGphdmFXU0RMUGFyYW0KLQkJaWYgKHByb3BlcnR5SG9sZGVyIGluc3RhbmNlb2YgTWFwKQotCQl7CQotCQkJTWFwIHByb3BlcnR5TWFwID0gKE1hcClwcm9wZXJ0eUhvbGRlcjsKLQkJCQotCQkJaWYgKHByb3BlcnR5TWFwLmNvbnRhaW5zS2V5KCJVc2UiKSkKLQkJCXsJCQkJCi0JCQkgICBqYXZhV1NETFBhcmFtLnNldFVzZSgoU3RyaW5nKXByb3BlcnR5TWFwLmdldCgiVXNlIikpOwkKLQkJCX0KLQkJCWlmIChwcm9wZXJ0eU1hcC5jb250YWluc0tleSgiU3R5bGUiKSkKLQkJCXsKLQkJCQlqYXZhV1NETFBhcmFtLnNldFN0eWxlKChTdHJpbmcpcHJvcGVydHlNYXAuZ2V0KCJTdHlsZSIpKTsKLQkJCX0KLQkJCWlmIChwcm9wZXJ0eU1hcC5jb250YWluc0tleSgiSmF2YU91dHB1dCIpKQotCQkJewkJCQkgCi0gICAgICAgIFN0cmluZyBvdXRwdXRMb2NhdGlvbiA9IChTdHJpbmcpcHJvcGVydHlNYXAuZ2V0KCJKYXZhT3V0cHV0Iik7Ci0gICAgICAgIGludCAgICBpbmRleCAgICAgICAgICA9IG91dHB1dExvY2F0aW9uLmluZGV4T2YoICc6JyApOwotICAgICAgICAKLSAgICAgICAgaWYoIGluZGV4ID09IC0xICkKLSAgICAgICAgewotICAgICAgICAgIC8vIEEgY29sb24gd2FzIG5vdCBmb3VuZCBpbiB0aGUgc3RyaW5nIHNvIHdlIHdpbGwgYXNzdW1lIHRoYXQKLSAgICAgICAgICAvLyBpdCBpcyBhIHdvcmtzcGFjZSByZWxhdGl2ZSB1cmkgZm9yIG5vdy4KLSAgICAgICAgICBJUmVzb3VyY2UgcmVzb3VyY2UgPSBGaWxlUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2UoIG5ldyBQYXRoKCBvdXRwdXRMb2NhdGlvbiApICk7Ci0gICAgICAgICAgCi0gICAgICAgICAgaWYoIHJlc291cmNlID09IG51bGwgfHwgcmVzb3VyY2UuZ2V0TG9jYXRpb24oKSA9PSBudWxsICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCBBeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMuYmluZCggQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzLk1TR19FUlJPUl9GT0xERVJfTk9UX0ZPVU5ELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dExvY2F0aW9uICkgKTsgCi0gICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICAgIG91dHB1dExvY2F0aW9uID0gcmVzb3VyY2UuZ2V0TG9jYXRpb24oKS50b1N0cmluZygpOwotICAgICAgICB9Ci0gICAgICAgIAotCQkJCWphdmFXU0RMUGFyYW0uc2V0SmF2YU91dHB1dCggb3V0cHV0TG9jYXRpb24gKTsKLQkJCX0KLQkJCWlmIChwcm9wZXJ0eU1hcC5jb250YWluc0tleSgiTWV0aG9kcyIpKQotCQkJewotCQkJCS8vZ2V0IE1ldGhvZCBsaXN0IGZyb20gdGhlIG1hcAotCQkJCVN0cmluZyBtZXRob2RMaXN0ID0gKFN0cmluZylwcm9wZXJ0eU1hcC5nZXQoIk1ldGhvZHMiKTsKLQkJCQkKLQkJCQkvL3Rva2VuaXplIHRoZSBtZXRob2QgbGlzdAotCQkJCVN0cmluZ1Rva2VuaXplciB0b2sgPSBuZXcgU3RyaW5nVG9rZW5pemVyKG1ldGhvZExpc3QsICIgIik7Ci0JCQkJSGFzaHRhYmxlIG1ldGhvZHMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0JCQkJd2hpbGUgKHRvay5oYXNNb3JlVG9rZW5zKCkpCi0JCQkJewotICAgICAgICAgIFN0cmluZyBtZXRob2QgPSAoU3RyaW5nKXRvay5uZXh0VG9rZW4oKTsKLSAgICAgICAgICAKLSAgICAgICAgICBpZiggbWV0aG9kLmluZGV4T2YoICcoJyApID09IC0xICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBtZXRob2QgPSBtZXRob2QgKyAiKCkiOwotICAgICAgICAgIH0KLSAgICAgICAgICAKLQkJCQkJbWV0aG9kcy5wdXQoIG1ldGhvZCwgbmV3IEJvb2xlYW4odHJ1ZSkpOwotCQkJCX0JCQkJCi0JCQkJamF2YVdTRExQYXJhbS5zZXRNZXRob2RzKG1ldGhvZHMpOwotCQkJfQotCQkJaWYgKHByb3BlcnR5TWFwLmNvbnRhaW5zS2V5KCJNYXBwaW5ncyIpKQotCQkJewotCQkJCS8vZ2V0IG5hbWUgb2YgdGhlIGZpbGUgdGhhdCBoYXMgdGhlIG1hcHBpbmdzIGluIGl0IGZyb20gdGhlIG1hcAotCQkJCVN0cmluZyBmaWxlbmFtZSA9IChTdHJpbmcpcHJvcGVydHlNYXAuZ2V0KCJNYXBwaW5ncyIpOwotICAgICAgICAKLQkJCQkvL2dldCB0aGUgbGlzdCBvZiBtYXBwaW5nIGZyb20gdGhlIGZpbGUKLQkJCQlIYXNoTWFwIG1hcHBpbmdzID0gcmVhZE1hcHBpbmdzRnJvbUZpbGUoZmlsZW5hbWUpOwotICAgICAgICAKLQkJCQlqYXZhV1NETFBhcmFtLnNldE1hcHBpbmdzKG1hcHBpbmdzKTsKLSAgICAgICAgCi0gICAgICAgIFN0cmluZyBiZWFuTmFtZSA9IGphdmFXU0RMUGFyYW0uZ2V0QmVhbk5hbWUoKTsKLSAgICAgICAgCi0gICAgICAgIGlmKCBiZWFuTmFtZSAhPSBudWxsICYmICFiZWFuTmFtZS5lcXVhbHMoIiIpICkKLSAgICAgICAgewotICAgICAgICAgIGludCAgICBsYXN0RG90ICAgICA9IGJlYW5OYW1lLmxhc3RJbmRleE9mKCAnLicgKTsKLSAgICAgICAgICBTdHJpbmcgcGFja2FnZU5hbWUgPSBsYXN0RG90ID09IC0xID8gbnVsbCA6IGJlYW5OYW1lLnN1YnN0cmluZyggMCwgbGFzdERvdCApOwotICAgICAgICAgIAotICAgICAgICAgIGlmKCBtYXBwaW5ncyAhPSBudWxsICYmIHBhY2thZ2VOYW1lICE9IG51bGwgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyB0bnMgPSAoU3RyaW5nKW1hcHBpbmdzLmdldCggcGFja2FnZU5hbWUgKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYoIHRucyAhPSBudWxsICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgamF2YVdTRExQYXJhbS5zZXROYW1lc3BhY2UodG5zKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9ICAgCi0gICAgICAgIH0KLQkJCX0KLQkJfQotCX0KLQkKLQlwcml2YXRlIEhhc2hNYXAgcmVhZE1hcHBpbmdzRnJvbUZpbGUoU3RyaW5nIGZpbGVuYW1lKQotCSAgewotCQlIYXNoTWFwIGhhc2htYXAgPSBuZXcgSGFzaE1hcCgpOwotCQlJRmlsZSByZXNvdXJjZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aChmaWxlbmFtZSkpOwotCQkKLQkJaWYgKHJlc291cmNlICE9IG51bGwgKQotCQl7Ci0JCSAgdHJ5Ci0JCSAgewotCQkJUHJvcGVydGllcyBwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7Ci0JCQlwcm9wcy5sb2FkKHJlc291cmNlLmdldENvbnRlbnRzKCkpOwkJCQotCQkJaGFzaG1hcC5wdXRBbGwocHJvcHMpOwkJCQkJCQotCQkgIH0KLQkJICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0JCSAgewotCQkgICAgLy8gVE9ETyBSZXBvcnQgc29tZSBlcnJvciBoZXJlLgotCQkgIH0KLQkJfQkKLQkJcmV0dXJuIGhhc2htYXA7Ci0JICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvY29tbW9uL0phdmFXU0RMUGFyYW1ldGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvY29tbW9uL0phdmFXU0RMUGFyYW1ldGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzZmExZjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi9jb3JlL2NvbW1vbi9KYXZhV1NETFBhcmFtZXRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDcyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMzMCAgIDEyNDY2NyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci0KLQotcHVibGljIGNsYXNzIEphdmFXU0RMUGFyYW1ldGVyIHsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgYnl0ZSBTRVJWRVJfU0lERV9OT05FID0gMDsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgU0VSVkVSX1NJREVfQkVBTiA9IDE7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBieXRlIFNFUlZFUl9TSURFX0VKQiA9IDI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTVFlMRV9SUEMgPSAiUlBDIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNUWUxFX0RPQ1VNRU5UID0gIkRPQ1VNRU5UIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNUWUxFX1dSQVBQRUQgPSAiV1JBUFBFRCI7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFVTRV9MSVRFUkFMID0gIkxJVEVSQUwiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVNFX0VOQ09ERUQgPSAiRU5DT0RFRCI7IC8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgU3RyaW5nIGJlYW5OYW1lID0gbnVsbDsgLy8gVGhlIG5hbWUgb2YgdGhlIEphdmEgYmVhbgotCXByaXZhdGUgU3RyaW5nIGNsYXNzcGF0aCA9IG51bGw7Ci0JLy8gVGhlIGNsYXNzIHBhdGggZm9yIGxvYWRpbmcgdGhlIGJlYW4gYW5kIGNvbW1hbmQgZXhlY3V0aW9uCi0JcHJpdmF0ZSBTdHJpbmcgYmVhblBhY2thZ2UgPSBudWxsOyAvLyBUaGUgcGFja2FnZSBsb2NhdGlvbiBvZiB0aGUgYmVhbgotCXByaXZhdGUgU3RyaW5nIHBvcnRUeXBlTmFtZSA9IG51bGw7IC8vIFRoZSBuYW1lIG9mIHRoZSBwb3J0IHR5cGUgZWxlbWVudAotCXByaXZhdGUgU3RyaW5nIHNlcnZpY2VOYW1lID0gbnVsbDsgLy8gVGhlIG5hbWUgb2YgdGhlIHNlcnZpY2UgZWxlbWVudAotCXByaXZhdGUgU3RyaW5nIG91dHB1dFdzZGxMb2NhdGlvbiA9IG51bGw7Ci0JLy8gVGhlIG91dHB1dCBsb2NhdGlvbiBvZiB0aGUgV1NETCBmaWxlCi0JcHJpdmF0ZSBTdHJpbmcgaW5wdXRXc2RsTG9jYXRpb24gPSBudWxsOwotCS8vIFRoZSBpbnB1dCBsb2NhdGlvbiBvZiB0aGUgV1NETCBmaWxlCi0JcHJpdmF0ZSBTdHJpbmcgdXJsTG9jYXRpb24gPSBudWxsOyAvLyBUaGUgVVJMIGxvY2F0aW9uIG9mIHRoZSB3ZWIgc2VydmljZQotCXByaXZhdGUgSGFzaHRhYmxlIG1ldGhvZHMgPSBudWxsOyAvLyBUaGUgYXJyYXkgb2YgbWV0aG9kIG5hbWVzCi0JcHJpdmF0ZSBTdHJpbmcgbWV0aG9kU3RyaW5nXyA9ICIiOyAvLyROT04tTkxTLTEkCi0JIC8vVGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWV0aG9kIGFycmF5Ci0JcHJpdmF0ZSBTdHJpbmcgc3R5bGUgPSBudWxsOwotCS8vIFRoZSBzdHlsZSAoUlBDIHwgRE9DVU1FTlQgfCBXUkFQUEVEKSBhdHRyaWJ1dGUgZm9yIHRoZSBnZW5lcmF0ZWQgV1NETAotCXByaXZhdGUgU3RyaW5nIHVzZSA9IG51bGw7Ci0JLy8gVGhlIHVzZSAoTElURVJBTCB8IEVOQ09ERUQpIGF0dHJpYnR1ZSBmb3IgdGhlIGdlbmVyYXRlZCBXU0RMCi0JcHJpdmF0ZSBTdHJpbmcgb3V0cHV0ID0gbnVsbDsKLQkvLyBUaGUgb3V0cHV0IGxvY2F0aW9uIGZvciBkZXBsb3ltZW50IGRlc2NyaXB0b3JzICYgSmF2YSBjb2RlIChvdXRwdXQgZnJvbSBXU0RMMkphdmEgY29tbWFuZCkKLQlwcml2YXRlIFN0cmluZyBqYXZhT3V0cHV0ID0gbnVsbDsKLQkvLyBUaGUgb3V0cHV0IGxvY2F0aW9uIGZvciBKYXZhIGNvZGUgKG91dHB1dCBmcm9tIFdTREwySmF2YSBjb21tYW5kKQotCXByaXZhdGUgYm9vbGVhbiBtZXRhSW5mT25seSA9IGZhbHNlOyAvLyBNRVRBLUlORi1PTkxZIGZsYWcKLQlwcml2YXRlIGJ5dGUgc2VydmVyU2lkZSA9IFNFUlZFUl9TSURFX05PTkU7Ci0JLy8gc2VydmVyLXNpZGUgZmxhZyAoU0VSVkVSX1NJREVfTk9ORSB8IFNFUlZFUl9TSURFX0JFQU4gfCBTRVJWRVJfU0lERV9FSkIpCi0JcHJpdmF0ZSBTdHJpbmcgbmFtZXNwYWNlID0gbnVsbDsKLQlwcml2YXRlIGJvb2xlYW4gc2tlbGV0b25EZXBsb3kgPSB0cnVlOwotCXByaXZhdGUgU3RyaW5nIGNvbnRhaW5lciA9IG51bGw7Ci0JcHJpdmF0ZSBTdHJpbmdbXSBkZXBsb3ltZW50RmlsZXMgPSBudWxsOwotCXByaXZhdGUgU3RyaW5nW10gamF2YUZpbGVzID0gbnVsbDsKLQlwcml2YXRlIFN0cmluZyBwcm9qZWN0VVJMID0gbnVsbDsKLQlwcml2YXRlIGJvb2xlYW4gZ3Vlc3NQcm9qZWN0VVJMID0gZmFsc2U7Ci0JcHJpdmF0ZSBIYXNoTWFwIG1hcHBpbmdQYWlyczsKLQlwcml2YXRlIFN0cmluZyBodHRwVXNlcm5hbWVfID0gbnVsbDsKLQlwcml2YXRlIFN0cmluZyBodHRwUGFzc3dvcmRfID0gbnVsbDsKLQotCXB1YmxpYyB2b2lkIHNldENvbnRhaW5lcihTdHJpbmcgY29udGFpbmVyKSB7Ci0JCXRoaXMuY29udGFpbmVyID0gY29udGFpbmVyOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0Q29udGFpbmVyKCkgewotCQlyZXR1cm4gY29udGFpbmVyOwotCX0KLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBKYXZhV1NETFBhcmFtZXRlci4KLQkgKi8KLQlwdWJsaWMgSmF2YVdTRExQYXJhbWV0ZXIoKSB7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgYmVhbk5hbWUuCi0JICogQHJldHVybiBTdHJpbmcKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldEJlYW5OYW1lKCkgewotCQlyZXR1cm4gYmVhbk5hbWU7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRCZWFuUGFja2FnZSgpIHsKLQkJcmV0dXJuIGJlYW5QYWNrYWdlOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBvcnRUeXBlTmFtZS4KLQkgKiBAcmV0dXJuIFN0cmluZwotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0UG9ydFR5cGVOYW1lKCkgewotCQlyZXR1cm4gcG9ydFR5cGVOYW1lOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNlcnZpY2VOYW1lLgotCSAqIEByZXR1cm4gU3RyaW5nCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlTmFtZSgpIHsKLQkJcmV0dXJuIHNlcnZpY2VOYW1lOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG91dHB1dC4KLQkgKiBAcmV0dXJuIFN0cmluZwotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0T3V0cHV0KCkgewotCQlyZXR1cm4gb3V0cHV0OwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGhvZHMuCi0JICogQHJldHVybiBTdHJpbmdbXQotCSAqLwotCXB1YmxpYyBIYXNodGFibGUgZ2V0TWV0aG9kcygpIHsKLQkJcmV0dXJuIG1ldGhvZHM7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgY29tbWEgc2VwZXJhdGVkIHN0cmluZyByZXByZXNldGF0aW9uIG9mIHRoZSBtZXRob2RzLgotCSAqIEByZXR1cm4gU3RyaW5nCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRNZXRob2RTdHJpbmcoKSB7Ci0JCWlmIChtZXRob2RTdHJpbmdfLmVxdWFscygiIikpCi0JCXsJCQotCQkJRW51bWVyYXRpb24gZSA9IG1ldGhvZHMua2V5cygpOwotCSAJCWZvciAoaW50IGk9MDsgZS5oYXNNb3JlRWxlbWVudHMoKTsgaSsrKQotCSAgICAJewotCQotCQkJCVN0cmluZyBzaWduYXR1cmUgPSAoU3RyaW5nKSBlLm5leHRFbGVtZW50KCk7Ci0JCQkJaWYgKCgoQm9vbGVhbikgbWV0aG9kcy5nZXQoc2lnbmF0dXJlKSkuYm9vbGVhblZhbHVlKCkpewotCQkJCQkJCQlpbnQgaW5kZXggPSBzaWduYXR1cmUuaW5kZXhPZignKCcpOwotCQkJCQkJCQlTdHJpbmcgbmFtZSA9IHNpZ25hdHVyZS5zdWJzdHJpbmcoMCwgaW5kZXgpOwotCQkJCQkJCQltZXRob2RTdHJpbmdfICs9IG5hbWU7Ci0JCQkJfQotCQkgICAgCWlmIChpICE9IG1ldGhvZHMuc2l6ZSgpIC0xKSAvLyB0aGlzIGlzIG5vdCB0aGUgbGFzdCBhcnJheSBpdGVtCQotCQkJCXsKLQkJCQkJbWV0aG9kU3RyaW5nXyArPSAiLCI7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBtZXRob2RTdHJpbmdfOwotCX0KLQkKLQkvKioKLQkgKiBTZXRzIGEgY29tbWEgc2VwYXJhdGVkIHN0cmluZyBvZiBtZXRob2RzCSAqCi0JICovCi0JcHVibGljIHZvaWQgc2V0TWV0aG9kU3RyaW5nKFN0cmluZyBtZXRob2RzKQotCXsKLQkJbWV0aG9kU3RyaW5nXyA9IG1ldGhvZHM7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc3R5bGUgYXR0cmlidXRlLgotCSAqIEByZXR1cm4gU3RyaW5nCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRTdHlsZSgpIHsKLQkJcmV0dXJuIHN0eWxlOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHVybExvY2F0aW9uLgotCSAqIEByZXR1cm4gU3RyaW5nCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRVcmxMb2NhdGlvbigpIHsKLQkJcmV0dXJuIHVybExvY2F0aW9uOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHVzZSBhdHRyaWJ1dGUuCi0JICogQHJldHVybiBTdHJpbmcKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFVzZSgpIHsKLQkJcmV0dXJuIHVzZTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBvdXRwdXRXc2RsTG9jYXRpb24uCi0JICogQHJldHVybiBTdHJpbmcKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldE91dHB1dFdzZGxMb2NhdGlvbigpIHsKLQkJcmV0dXJuIG91dHB1dFdzZGxMb2NhdGlvbjsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBiZWFuTmFtZS4KLQkgKiBAcGFyYW0gYmVhbk5hbWUgVGhlIGJlYW5OYW1lIHRvIHNldAotCSAqLwotCXB1YmxpYyB2b2lkIHNldEJlYW5OYW1lKFN0cmluZyBiZWFuTmFtZSkgewotCQl0aGlzLmJlYW5OYW1lID0gYmVhbk5hbWU7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0QmVhblBhY2thZ2UoU3RyaW5nIGJlYW5QYWNrYWdlKSB7Ci0JCXRoaXMuYmVhblBhY2thZ2UgPSBiZWFuUGFja2FnZTsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBwb3J0VHlwZU5hbWUuCi0JICogQHBhcmFtIHBvcnRUeXBlTmFtZSBUaGUgcG9ydFR5cGVOYW1lIHRvIHNldAotCSAqLwotCXB1YmxpYyB2b2lkIHNldFBvcnRUeXBlTmFtZShTdHJpbmcgcG9ydFR5cGVOYW1lKSB7Ci0JCXRoaXMucG9ydFR5cGVOYW1lID0gcG9ydFR5cGVOYW1lOwotCX0KLQotCS8qKgotCSAqIFNldHMgdGhlIHNlcnZpY2VOYW1lLgotCSAqIEBwYXJhbSBzZXJ2aWNlTmFtZSBUaGUgc2VydmljZU5hbWUgdG8gc2V0Ci0JICovCi0JcHVibGljIHZvaWQgc2V0U2VydmljZU5hbWUoU3RyaW5nIHNlcnZpY2VOYW1lKSB7Ci0JCXRoaXMuc2VydmljZU5hbWUgPSBzZXJ2aWNlTmFtZTsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBvdXRwdXQuCi0JICogQHBhcmFtIG91dHB1dCBUaGUgb3V0cHV0IHRvIHNldAotCSAqLwotCXB1YmxpYyB2b2lkIHNldE91dHB1dChTdHJpbmcgb3V0cHV0KSB7Ci0JCXRoaXMub3V0cHV0ID0gb3V0cHV0OwotCX0KLQotCS8qKgotCSAqIFNldHMgdGhlIG1ldGhvZHMuCi0JICogQHBhcmFtIG1ldGhvZHMgVGhlIG1ldGhvZHMgdG8gc2V0Ci0JICovCi0JcHVibGljIHZvaWQgc2V0TWV0aG9kcyhIYXNodGFibGUgbWV0aG9kcykgewotCQl0aGlzLm1ldGhvZHMgPSBtZXRob2RzOwotCX0KLQotCS8qKgotCSAqIFNldHMgdGhlIHN0eWxlLgotCSAqIEBwYXJhbSBzdHlsZSBUaGUgc3R5bGUgdG8gc2V0Ci0JICovCi0JcHVibGljIHZvaWQgc2V0U3R5bGUoU3RyaW5nIHN0eWxlKSB7Ci0JCXRoaXMuc3R5bGUgPSBzdHlsZTsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB1cmxMb2NhdGlvbi4KLQkgKiBAcGFyYW0gdXJsTG9jYXRpb24gVGhlIHVybExvY2F0aW9uIHRvIHNldAotCSAqLwotCXB1YmxpYyB2b2lkIHNldFVybExvY2F0aW9uKFN0cmluZyB1cmxMb2NhdGlvbikgewotCQl0aGlzLnVybExvY2F0aW9uID0gdXJsTG9jYXRpb247Ci0JfQotCi0JLyoqCi0JICogU2V0cyB0aGUgdXNlLgotCSAqIEBwYXJhbSB1c2UgVGhlIHVzZSB0byBzZXQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRVc2UoU3RyaW5nIHVzZSkgewotCQl0aGlzLnVzZSA9IHVzZTsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBvdXRwdXRXc2RsTG9jYXRpb24uCi0JICogQHBhcmFtIG91dHB1dFdzZGxMb2NhdGlvbiBUaGUgb3V0cHV0V3NkbExvY2F0aW9uIHRvIHNldAotCSAqLwotCXB1YmxpYyB2b2lkIHNldE91dHB1dFdzZGxMb2NhdGlvbihTdHJpbmcgd3NkbExvY2F0aW9uKSB7Ci0JCXRoaXMub3V0cHV0V3NkbExvY2F0aW9uID0gd3NkbExvY2F0aW9uOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGFJbmZPbmx5LgotCSAqIEByZXR1cm4gYm9vbGVhbgotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzTWV0YUluZk9ubHkoKSB7Ci0JCXJldHVybiBtZXRhSW5mT25seTsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBtZXRhSW5mT25seS4KLQkgKiBAcGFyYW0gbWV0YUluZk9ubHkgVGhlIG1ldGFJbmZPbmx5IHRvIHNldAotCSAqLwotCXB1YmxpYyB2b2lkIHNldE1ldGFJbmZPbmx5KGJvb2xlYW4gbWV0YUluZk9ubHkpIHsKLQkJdGhpcy5tZXRhSW5mT25seSA9IG1ldGFJbmZPbmx5OwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNlcnZlclNpZGUuCi0JICogQHJldHVybiBieXRlCi0JICovCi0JcHVibGljIGJ5dGUgZ2V0U2VydmVyU2lkZSgpIHsKLQkJcmV0dXJuIHNlcnZlclNpZGU7Ci0JfQotCi0JLyoqCi0JICogU2V0cyB0aGUgc2VydmVyU2lkZS4KLQkgKiBAcGFyYW0gc2VydmVyU2lkZSBUaGUgc2VydmVyU2lkZSB0byBzZXQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJTaWRlKGJ5dGUgc2VydmVyU2lkZSkgewotCQl0aGlzLnNlcnZlclNpZGUgPSBzZXJ2ZXJTaWRlOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGlucHV0V3NkbExvY2F0aW9uLgotCSAqIEByZXR1cm4gU3RyaW5nCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRJbnB1dFdzZGxMb2NhdGlvbigpIHsKLQkJcmV0dXJuIGlucHV0V3NkbExvY2F0aW9uOwotCX0KLQotCS8qKgotCSAqIFNldHMgdGhlIGlucHV0V3NkbExvY2F0aW9uLgotCSAqIEBwYXJhbSBpbnB1dFdzZGxMb2NhdGlvbiBUaGUgaW5wdXRXc2RsTG9jYXRpb24gdG8gc2V0Ci0JICovCi0JcHVibGljIHZvaWQgc2V0SW5wdXRXc2RsTG9jYXRpb24oU3RyaW5nIGlucHV0V3NkbExvY2F0aW9uKSB7Ci0JCXRoaXMuaW5wdXRXc2RsTG9jYXRpb24gPSBpbnB1dFdzZGxMb2NhdGlvbjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBuYW1lc3BhY2UuCi0JICogQHJldHVybiBTdHJpbmcKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWVzcGFjZSgpIHsKLQkJcmV0dXJuIG5hbWVzcGFjZTsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBuYW1lc3BhY2UuCi0JICogQHBhcmFtIG5hbWVzcGFjZSBUaGUgbmFtZXNwYWNlIHRvIHNldAotCSAqLwotCXB1YmxpYyB2b2lkIHNldE5hbWVzcGFjZShTdHJpbmcgbmFtZXNwYWNlKSB7Ci0JCXRoaXMubmFtZXNwYWNlID0gbmFtZXNwYWNlOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIEphdmEgb3V0cHV0LgotCSAqIEByZXR1cm4gU3RyaW5nCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRKYXZhT3V0cHV0KCkgewotCQlyZXR1cm4gamF2YU91dHB1dDsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBqYXZhT3V0cHV0LgotCSAqIEBwYXJhbSBqYXZhT3V0cHV0IFRoZSBKYXZhIG91dHB1dCB0byBzZXQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRKYXZhT3V0cHV0KFN0cmluZyBqYXZhT3V0cHV0KSB7Ci0JCXRoaXMuamF2YU91dHB1dCA9IGphdmFPdXRwdXQ7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0Q2xhc3NwYXRoKCkgewotCQlyZXR1cm4gY2xhc3NwYXRoOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBzdHJpbmcKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRDbGFzc3BhdGgoU3RyaW5nIHN0cmluZykgewotCQljbGFzc3BhdGggPSBzdHJpbmc7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzU2tlbGV0b25EZXBsb3koKSB7Ci0JCXJldHVybiBza2VsZXRvbkRlcGxveTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gYgotCSAqLwotCXB1YmxpYyB2b2lkIHNldFNrZWxldG9uRGVwbG95KGJvb2xlYW4gYikgewotCQlza2VsZXRvbkRlcGxveSA9IGI7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBTdHJpbmdbXSBnZXREZXBsb3ltZW50RmlsZXMoKSB7Ci0JCXJldHVybiBkZXBsb3ltZW50RmlsZXM7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHN0cmluZ3MKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXREZXBsb3ltZW50RmlsZXMoU3RyaW5nW10gc3RyaW5ncykgewotCQlkZXBsb3ltZW50RmlsZXMgPSBzdHJpbmdzOwotCX0KLQotCS8qKgotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nW10gZ2V0SmF2YUZpbGVzKCkgewotCQlyZXR1cm4gamF2YUZpbGVzOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBzdHJpbmdzCi0JICovCi0JcHVibGljIHZvaWQgc2V0SmF2YUZpbGVzKFN0cmluZ1tdIHN0cmluZ3MpIHsKLQkJamF2YUZpbGVzID0gc3RyaW5nczsKLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRQcm9qZWN0VVJMKCkgewotCQlyZXR1cm4gcHJvamVjdFVSTDsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gc3RyaW5nCi0JICovCi0JcHVibGljIHZvaWQgc2V0UHJvamVjdFVSTChTdHJpbmcgc3RyaW5nKSB7Ci0JCXByb2plY3RVUkwgPSBzdHJpbmc7Ci0JfQotCQotCXB1YmxpYyBIYXNoTWFwIGdldE1hcHBpbmdzKCkKLQl7Ci0JCQlyZXR1cm4gbWFwcGluZ1BhaXJzOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldE1hcHBpbmdzKEhhc2hNYXAgbWFwKQotCXsKLQkJCW1hcHBpbmdQYWlycyA9IG1hcDsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdXNlciBuYW1lIGZvciBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uCi0JICogQHJldHVybiBTdHJpbmcKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldEhUVFBVc2VybmFtZSgpCi0JewotCSAgcmV0dXJuIGh0dHBVc2VybmFtZV87Ci0JfQotCi0JLyoqCi0JICogU2V0cyB0aGUgdXNlciBuYW1lIGZvciBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uCi0JICogQHBhcmFtIFN0cmluZwotCSAqLwotCXB1YmxpYyB2b2lkIHNldEhUVFBVc2VybmFtZShTdHJpbmcgaHR0cFVzZXJuYW1lKQotCXsKLQkgIGh0dHBVc2VybmFtZV8gPSBodHRwVXNlcm5hbWU7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcGFzc3dvcmQgZm9yIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb24KLQkgKiBAcmV0dXJuIFN0cmluZwotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0SFRUUFBhc3N3b3JkKCkKLQl7Ci0JICByZXR1cm4gaHR0cFBhc3N3b3JkXzsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gc3RyaW5nCi0JICovCi0JcHVibGljIHZvaWQgc2V0SFRUUFBhc3N3b3JkKFN0cmluZyBodHRwUGFzc3dvcmQpIHsKLQkJaHR0cFBhc3N3b3JkXyA9IGh0dHBQYXNzd29yZDsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc0d1ZXNzUHJvamVjdFVSTCgpIHsKLQkJcmV0dXJuIGd1ZXNzUHJvamVjdFVSTDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRHdWVzc1Byb2plY3RVUkwoYm9vbGVhbiBndWVzc1Byb2plY3RVUkwpIHsKLQkJdGhpcy5ndWVzc1Byb2plY3RVUkwgPSBndWVzc1Byb2plY3RVUkw7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvY29tbW9uL05hbWVNYXBwaW5nVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9jb21tb24vTmFtZU1hcHBpbmdVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjFmZGFjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9jb21tb24vTmFtZU1hcHBpbmdVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgb3JnLmFwYWNoZS5heGlzLnV0aWxzLkphdmFVdGlsczsKLWltcG9ydCBvcmcuYXBhY2hlLmF4aXMud3NkbC50b0phdmEuVXRpbHM7Ci0KLXB1YmxpYyBjbGFzcyBOYW1lTWFwcGluZ1V0aWxzIHsKLQotICBwcml2YXRlIE5hbWVNYXBwaW5nVXRpbHMoKSB7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQYWNrYWdlTmFtZShTdHJpbmcgbmFtZXNwYWNlLCBNYXAgbnMycGtnTWFwKQotICB7Ci0gICAgaWYgKG5hbWVzcGFjZSAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChuczJwa2dNYXAgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgT2JqZWN0IHBrZyA9IG5zMnBrZ01hcC5nZXQobmFtZXNwYWNlKTsKLSAgICAgICAgaWYgKHBrZyAhPSBudWxsKQotICAgICAgICAgIHJldHVybiAoU3RyaW5nKXBrZzsKLSAgICAgIH0KLSAgICAgIHJldHVybiBuYW1lc3BhY2VVUkkyUGFja2FnZU5hbWUobmFtZXNwYWNlKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuICIiOwotICB9Ci0KLSAgLyoqCi0gICAqIG5hbWVzcGFjZVVSSTJQYWNrYWdlTmFtZQotICAgKiBAcGFyYW0gbmFtZXNwYWNlVVJJCi0gICAqIEByZXR1cm4gcGFja2FnZSBuYW1lIGJhc2VkIG9uIG5hbWVzcGFjZQotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgbmFtZXNwYWNlVVJJMlBhY2thZ2VOYW1lKFN0cmluZyBuYW1lc3BhY2VVUkkpCi0gIHsKLSAgCXJldHVybiBVdGlscy5tYWtlUGFja2FnZU5hbWUobmFtZXNwYWNlVVJJKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIHhtbE5hbWVUb0phdmFDbGFzcwotICAgKiBAcGFyYW0geG1sbmFtZQotICAgKiBAcmV0dXJuIEphdmEgY2xhc3MgbmFtZQotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgeG1sTmFtZVRvSmF2YUNsYXNzKFN0cmluZyB4bWxuYW1lKQotICB7Ci0gIAlyZXR1cm4gVXRpbHMueG1sTmFtZVRvSmF2YUNsYXNzKHhtbG5hbWUpOwotICB9Ci0gIAotICAvKioKLSAgICogZ2V0UG9ydE5hbWUKLSAgICogQHBhcmFtIHBhcnROYW1lCi0gICAqIEByZXR1cm4gcG9ydCBuYW1lIHVzZWQgYnkgdGhlIEF4aXMgZW1pdHRlcgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UG9ydE5hbWUoU3RyaW5nIHBvcnROYW1lKSAKLSAgewotICAJaWYgKCFKYXZhVXRpbHMuaXNKYXZhSWQocG9ydE5hbWUpKSAKLSAgICAgICAgcG9ydE5hbWUgPSB4bWxOYW1lVG9KYXZhQ2xhc3MocG9ydE5hbWUpOwotICAJcmV0dXJuIHBvcnROYW1lOwotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi9jb3JlL2NvbnRleHQvQXhpc0VtaXR0ZXJDb250ZXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvY29udGV4dC9BeGlzRW1pdHRlckNvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTVhMjgxZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvY29udGV4dC9BeGlzRW1pdHRlckNvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgICBidWcgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAzMjkgICAxMjcwMTYgYW5keXpoYWlAY2EuaWJtLmNvbSAtIEFuZHkgWmhhaQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29udGV4dDsKLQotcHVibGljIGludGVyZmFjZSBBeGlzRW1pdHRlckNvbnRleHQgewotCS8qKgotCSAqIFRoaXMgY29uc3RhbnQgc3RyaW5nIGlzIHVzZWQgdG8gbG9va3VwIHRoZSBhbGxfd2FudGVkIGdlbmVyYWwgcHJlZmVyZW5jZQotCSAqIGZyb20gdGhlIHBsdWdpbnMgbG9jYWwgcHJlZmVyZW5jZXMgc3RvcmUuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJFRkVSRU5DRV9BTExfV0FOVEVEID0gImFsbFdhbnRlZCI7Ci0KLQkvKioKLQkgKiBUaGlzIGNvbnN0YW50IHN0cmluZyBpcyB1c2VkIHRvIGxvb2t1cCB0aGUgaGVscGVyX3dhbnRlZCBnZW5lcmFsCi0JICogcHJlZmVyZW5jZSBmcm9tIHRoZSBwbHVnaW5zIGxvY2FsIHByZWZlcmVuY2VzIHN0b3JlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBSRUZFUkVOQ0VfSEVMUEVSX1dBTlRFRCA9ICJoZWxwZXJXYW50ZWQiOwotCi0JLyoqCi0JICogVGhpcyBjb25zdGFudCBzdHJpbmcgaXMgdXNlZCB0byBsb29rdXAgdGhlIHdyYXBfYXJyYXlzIGdlbmVyYWwgcHJlZmVyZW5jZQotCSAqIGZyb20gdGhlIHBsdWdpbnMgbG9jYWwgcHJlZmVyZW5jZXMgc3RvcmUuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJFRkVSRU5DRV9XUkFQX0FSUkFZUyA9ICJ3cmFwQXJyYXlzIjsKLQotCS8qKgotCSAqIFRoaXMgY29uc3RhbnQgc3RyaW5nIGlzIHVzZWQgdG8gbG9va3VwIHRoZSBkZXBsb3lfc2NvcGUgZ2VuZXJhbAotCSAqIHByZWZlcmVuY2UgZnJvbSB0aGUgcGx1Z2lucyBsb2NhbCBwcmVmZXJlbmNlcyBzdG9yZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUkVGRVJFTkNFX0RFUExPWV9TQ09QRSA9ICJkZXBsb3lTY29wZSI7Ci0KLQkvKioKLQkgKiBUaGlzIGNvbnN0YW50IHN0cmluZyBpcyB1c2VkIHRvIGxvb2t1cCB0aGUgdGltZV9vdXQgZ2VuZXJhbCBwcmVmZXJlbmNlCi0JICogZnJvbSB0aGUgcGx1Z2lucyBsb2NhbCBwcmVmZXJlbmNlcyBzdG9yZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUkVGRVJFTkNFX1RJTUVfT1VUID0gInRpbWVPdXQiOwotCi0JLyoKLQkgKiBFbnN1cmUgdGhlIG9yZGVyIGlzIHRoZSBzYW1lIGFzIGl0IGluIGRlcGxveVNjb3BlVHlwZXMuc2V0SXRlbXMoLi4uKSBmb3IKLQkgKiBjbGFzcwotCSAqIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnByZWZlcmVuY2VzLkF4aXNFbWl0dGVyUHJlZmVyZW5jZVBhZ2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVQTE9ZX1NDT1BFX1RZUEVfQVBQTElDQVRJT04gPSAwOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVQTE9ZX1NDT1BFX1RZUEVfUkVRVUVTVCA9IDE7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERVBMT1lfU0NPUEVfVFlQRV9TRVNTVElPTiA9IDI7Ci0KLQkvKioKLQkgKiBUaGlzIGNvbnN0YW50IHN0cmluZyBpcyB1c2VkIHRvIGxvb2t1cCB0aGUgdXNlX2luaGVyaXRlZF9tZXRob2RzIGdlbmVyYWwKLQkgKiBwcmVmZXJlbmNlIGZyb20gdGhlIHBsdWdpbnMgbG9jYWwgcHJlZmVyZW5jZXMgc3RvcmUuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJFRkVSRU5DRV9VU0VfSU5IRVJJVEVEX01FVEhPRFMgPSAidXNlSW5oZXJpdGVkTWV0aG9kcyI7Ci0JCi0JLyoqCi0JICogVGhpcyBjb25zdGFudCBzdHJpbmcgaXMgdXNlZCB0byBsb29rdXAgdGhlICJ2YWxpZGF0ZSBhZ2FpbnN0IEpBWFJQQyIKLQkgKiBwcmVmZXJlbmNlIGZyb20gdGhlIHBsdWdpbnMgbG9jYWwgcHJlZmVyZW5jZXMgc3RvcmUuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJFRkVSRU5DRV9WQUxJREFURV9BR0FJTlNUX0pBWFJQQyA9ICJ2YWxpZGF0ZUFnYWluc3RKQVhSUEMiOwotCi0JLyoqCi0JICogCi0JICogQHBhcmFtIGVuYWJsZQotCSAqICAgICAgICAgICAgc2V0IHdoZXRoZXIgZ2VuZXJhdGluZyBjb2RlIGZvciBhbGwgZWxlbWVudHMgaXMgZW5hYmxlZC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRBbGxXYW50ZWRFbmFibGVkKGJvb2xlYW4gZW5hYmxlKTsKLQotCS8qKgotCSAqIAotCSAqIEByZXR1cm4gcmV0dXJucyB3aGV0aGVyIGdlbmVyYXRpbmcgY29kZSBmb3IgYWxsIGVsZW1lbnRzIGlzIGVuYWJsZWQuCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNBbGxXYW50ZWRFbmFibGVkKCk7Ci0KLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gZW5hYmxlCi0JICogICAgICAgICAgICBzZXQgd2hldGhlciBlbWl0dGluZyBzZXBhcmF0ZSBIZWxwZXIgY2xhc3NlcyBmb3IgbWV0YSBkYXRhIGlzCi0JICogICAgICAgICAgICBlbmFibGVkLgotCSAqLwotCXB1YmxpYyB2b2lkIHNldEhlbHBlcldhbnRlZEVuYWJsZWQoYm9vbGVhbiBlbmFibGUpOwotCi0JLyoqCi0JICogCi0JICogQHBhcmFtIHJldHVybnMKLQkgKiAgICAgICAgICAgIHdoZXRoZXIgZW1pdHRpbmcgc2VwYXJhdGUgSGVscGVyIGNsYXNzZXMgZm9yIG1ldGEgZGF0YSBpcwotCSAqICAgICAgICAgICAgZW5hYmxlZC4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc0hlbHBlcldhbnRlZEVuYWJsZWQoKTsKLQotCS8qKgotCSAqIAotCSAqIEBwYXJhbSBlbmFibGUKLQkgKiAgICAgICAgICAgIHNldCB3aGV0aGVyIHdyYXBwaW5nIGFycmF5cyBpcyBlbmFibGVkLgotCSAqLwotCi0JcHVibGljIHZvaWQgc2V0V3JhcEFycmF5c0VuYWJsZWQoYm9vbGVhbiBlbmFibGUpOwotCi0JLyoqCi0JICogCi0JICogQHBhcmFtIHJldHVybnMKLQkgKiAgICAgICAgICAgIHdoZXRoZXIgd3JhcHBpbmcgYXJyYXlzIGlzIGVuYWJsZWQuCi0JICovCi0KLQlwdWJsaWMgYm9vbGVhbiBpc1dyYXBBcnJheXNFbmFibGVkKCk7Ci0KLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gZW5hYmxlCi0JICogICAgICAgICAgICBzZXQgd2hldGhlciB1c2luZyBpbmhlcml0ZWQgbWV0aG9kcyBpcyBlbmFibGVkLgotCSAqLwotCXB1YmxpYyB2b2lkIHNldFVzZUluaGVyaXRlZE1ldGhvZHNFbmFibGVkKGJvb2xlYW4gZW5hYmxlKTsKLQotCS8qKgotCSAqIAotCSAqIEBwYXJhbSByZXR1cm5zCi0JICogICAgICAgICAgICB3aGV0aGVyIHVzaW5nIGluaGVyaXRlZCBtZXRob2RzIGlzIGVuYWJsZWQuCi0JICovCi0KLQlwdWJsaWMgYm9vbGVhbiBpc1VzZUluaGVyaXRlZE1ldGhvZHNFbmFibGVkKCk7Ci0KLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gZW5hYmxlCi0JICogICAgICAgICAgICBzZXQgd2hldGhlciBKQVgtUlBDIGFuYWx5c2lzIG9mIHRoZSBzZXJ2aWNlIGNsYXNzIGlzIGVuYWJsZWQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0VmFsaWRhdGVBZ2FpbnN0SkFYUlBDRW5hYmxlZChib29sZWFuIGVuYWJsZSk7Ci0KLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gcmV0dXJucwotCSAqICAgICAgICAgICAgd2hldGhlciBKQVgtUlBDIGFuYWx5c2lzIG9mIHRoZSBzZXJ2aWNlIGNsYXNzIGlzIGVuYWJsZWQuCi0JICovCi0KLQlwdWJsaWMgYm9vbGVhbiBpc1ZhbGlkYXRlQWdhaW5zdEpBWFJQQ0VuYWJsZWQoKTsKLQotCS8qKgotCSAqIAotCSAqIEBwYXJhbSBzZWxlY3Rpb24KLQkgKiAgICAgICAgICAgIHNldCB0aGUgZGVwbG95IHNjb3BlIHR5cGUuCi0JICovCi0KLQlwdWJsaWMgdm9pZCBzZWxlY3REZXBsb3lTY29wZVR5cGUoaW50IHNlbGVjdGlvbik7Ci0KLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gcmV0dXJucwotCSAqICAgICAgICAgICAgdGhlIGRlcGxveSBzY29wZSB0eXBlLgotCSAqLwotCi0JcHVibGljIGludCBnZXREZXBsb3lTY29wZVR5cGUoKTsKLQotCS8qKgotCSAqIAotCSAqIEBwYXJhbSBzZWNvbmRzCi0JICogICAgICAgICAgICBzZXQgdGhlIHRpbWUgb3V0LgotCSAqLwotCi0JcHVibGljIHZvaWQgc2V0VGltZU91dChpbnQgc2Vjb25kcyk7Ci0KLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gcmV0dXJucwotCSAqICAgICAgICAgICAgdGhlIHRpbWUgb3V0LgotCSAqLwotCi0JcHVibGljIGludCBnZXRUaW1lT3V0KCk7Ci0KLQkvKioKLQkgKiAKLQkgKiBAcmV0dXJuIHJldHVybnMgYSBjb3B5IG9mIHRoaXMgQXhpc0VtaXR0ZXJDb250ZXh0LgotCSAqLwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi9jb3JlL2NvbnRleHQvQXhpc0VtaXR0ZXJEZWZhdWx0cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi9jb3JlL2NvbnRleHQvQXhpc0VtaXR0ZXJEZWZhdWx0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWFkYzZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9jb250ZXh0L0F4aXNFbWl0dGVyRGVmYXVsdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCAgIGJ1ZyAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMyOSAgIDEyNzAxNiBhbmR5emhhaUBjYS5pYm0uY29tIC0gQW5keSBaaGFpCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb250ZXh0OwotCi1wdWJsaWMgY2xhc3MgQXhpc0VtaXR0ZXJEZWZhdWx0cwotewotIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gUFJFRkVSRU5DRV9BTExfV0FOVEVEX0RFRkFVTFQgPSBmYWxzZTsKLSBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIFBSRUZFUkVOQ0VfSEVMUEVSX1dBTlRFRF9ERUZBVUxUID0gZmFsc2U7Ci0gcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBQUkVGRVJFTkNFX1dSQVBfQVJSQVlTX0RFRkFVTFQgPSBmYWxzZTsKLSBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIFBSRUZFUkVOQ0VfVVNFX0lOSEVSSVRFRF9NRVRIT0RTX0RFRkFVTFQgPSBmYWxzZTsKLSBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIFBSRUZFUkVOQ0VfVkFMSURBVEVfQUdBSU5TVF9KQVhSUEMgPSB0cnVlOwotIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBERVBMT1lfU0NPUEVfREVGQVVMVCA9IEF4aXNFbWl0dGVyQ29udGV4dC5ERVBMT1lfU0NPUEVfVFlQRV9SRVFVRVNUOwotIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBUSU1FX09VVF9ERUZBVUxUID0gNDU7Ci0gCi0gLyoqCi0gICogCi0gICogQHJldHVybiByZXR1cm5zIHRoZSBkZWZhdWx0IHNldHRpbmcgZm9yIGdlbmVyYXRpbmcgY29kZSBmb3IgYWxsIGVsZW1lbnRzLgotICAqLwotIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBnZXRBbGxXYW50ZWREZWZhdWx0ICgpCi0gewotIAlyZXR1cm4gUFJFRkVSRU5DRV9BTExfV0FOVEVEX0RFRkFVTFQ7Ci0gfQotIAotIC8qKgotICAqIAotICAqIEByZXR1cm4gcmV0dXJucyB0aGUgZGVmYXVsdCBzZXR0aW5nIGZvciBlbWl0dGluZyBzZXBlcmF0ZSBoZWxwc2VyIGNsYXNzIGZvciBtZXRhZGF0YS4KLSAgKi8KLSBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZ2V0SGVscGVyV2FudGVkRGVmYXVsdCAoKQotIHsgCi0JcmV0dXJuIFBSRUZFUkVOQ0VfSEVMUEVSX1dBTlRFRF9ERUZBVUxUOwotIH0KLQotIC8qKgotICAqIAotICAqIEByZXR1cm4gcmV0dXJucyB0aGUgZGVmYXVsdCBzZXRpbmcgZm9yIHdyYXBwaW5nIGFycmF5cy4KLSAgKi8KLSBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZ2V0V3JhcEFycmF5c0RlZmF1bHQoKQotIHsKLQlyZXR1cm4gUFJFRkVSRU5DRV9XUkFQX0FSUkFZU19ERUZBVUxUOwotIH0KLSAKLSAvKioKLSAgKiAKLSAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGRlZmF1bHQgc2V0dGluZyBmb3IgdXNpbmcgaW5oZXJpdGVkIG1ldGhvZHMuCi0gICovCi0gcHVibGljIHN0YXRpYyBib29sZWFuIGdldFVzZUluaGVyaXRlZE1ldGhvZHNEZWZhdWx0KCkKLSB7Ci0JcmV0dXJuIFBSRUZFUkVOQ0VfVVNFX0lOSEVSSVRFRF9NRVRIT0RTX0RFRkFVTFQ7Ci0gfQotIAotIC8qKgotICAqIAotICAqIEByZXR1cm4gcmV0dXJucyB0aGUgZGVmYXVsdCBzZXR0aW5nIGZvciBKQVgtUlBDIHZhbGlkYXRpb24gb2YgdGhlIHNlcnZpY2UgY2xhc3MuCi0gICogTm90ZTogVGhpcyBpcyBub3QgYSB0cnVlIEF4aXMgZW1pdHRlciBwcmVmZXJlbmNlLiBUaGlzIHByZWZlcmVuY2UgY29udHJvbHMgd2hldGhlcgotICAqIHRoZSBBeGlzIFdlYiBzZXJ2aWNlIGJvdHRvbS11cCBzY2VuYXJpbyBhbmFseXplcyB0aGUgc2VydmljZSBjbGFzcyBmb3IgY29tcGxpYW5jZQotICAqIHRvIEpBWC1SUEMgc29tZSB0aW1lIGJlZm9yZSBjYWxsaW5nIHRoZSBlbWl0dGVycy4gCi0gICovCi0gcHVibGljIHN0YXRpYyBib29sZWFuIGdldFZhbGlkYXRlQWdhaW5zdEpBWFJQQygpCi0gewotCXJldHVybiBQUkVGRVJFTkNFX1ZBTElEQVRFX0FHQUlOU1RfSkFYUlBDOwotIH0KLSAKLSAvKioKLSAgKiAKLSAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGRlZmF1bHQgc2V0dGluZyBmb3IgZGVwbG95IHNjb3BlIHR5cGUuCi0gICovCi0gcHVibGljIHN0YXRpYyBpbnQgZ2V0RGVwbG95U2NvcGVEZWZhdWx0KCkKLSB7Ci0JIHJldHVybiBERVBMT1lfU0NPUEVfREVGQVVMVDsKLSB9Ci0gCi0gLyoqCi0gICogCi0gICogQHJldHVybiByZXR1cm5zIHRoZSBkZWZhdWx0IHNldHRpbmcgZm9yIHRpbWUgb3V0LgotICAqLwotIHB1YmxpYyBzdGF0aWMgaW50IGdldFRpbWVPdXREZWZhdWx0KCkKLSB7Ci0JIHJldHVybiBUSU1FX09VVF9ERUZBVUxUOwotIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9jb250ZXh0L1BlcnNpc3RlbnRBeGlzRW1pdHRlckNvbnRleHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9jb250ZXh0L1BlcnNpc3RlbnRBeGlzRW1pdHRlckNvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTg1NDNlMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvY29udGV4dC9QZXJzaXN0ZW50QXhpc0VtaXR0ZXJDb250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkICAgYnVnICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMzI5ICAgMTI3MDE2IGFuZHl6aGFpQGNhLmlibS5jb20gLSBBbmR5IFpoYWkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbnRleHQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnBsdWdpbi5XZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uQ29yZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29udGV4dC5QZXJzaXN0ZW50Q29udGV4dDsKLQotcHVibGljIGNsYXNzIFBlcnNpc3RlbnRBeGlzRW1pdHRlckNvbnRleHQgZXh0ZW5kcyBQZXJzaXN0ZW50Q29udGV4dCBpbXBsZW1lbnRzCUF4aXNFbWl0dGVyQ29udGV4dAotewotCXByaXZhdGUgc3RhdGljIFBlcnNpc3RlbnRBeGlzRW1pdHRlckNvbnRleHQgY29udGV4dF8gPSBudWxsOwotCi0JcHVibGljIHN0YXRpYyBQZXJzaXN0ZW50QXhpc0VtaXR0ZXJDb250ZXh0IGdldEluc3RhbmNlKCkgCi0JewotCQlpZiAoY29udGV4dF8gPT0gbnVsbCkgewotCQkJY29udGV4dF8gPSBuZXcgUGVyc2lzdGVudEF4aXNFbWl0dGVyQ29udGV4dCgpOwotCQkJY29udGV4dF8ubG9hZCgpOwotCQl9Ci0KLQkJcmV0dXJuIGNvbnRleHRfOwotCX0KLQotCXByaXZhdGUgUGVyc2lzdGVudEF4aXNFbWl0dGVyQ29udGV4dCgpIAotCXsKLQkJc3VwZXIoV2ViU2VydmljZUF4aXNDb25zdW1wdGlvbkNvcmVQbHVnaW4uZ2V0SW5zdGFuY2UoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgbG9hZCgpIAotCXsKLQkJc2V0RGVmYXVsdChQUkVGRVJFTkNFX0FMTF9XQU5URUQsIEF4aXNFbWl0dGVyRGVmYXVsdHMuZ2V0QWxsV2FudGVkRGVmYXVsdCgpKTsKLQkJc2V0RGVmYXVsdChQUkVGRVJFTkNFX0hFTFBFUl9XQU5URUQsIEF4aXNFbWl0dGVyRGVmYXVsdHMuZ2V0SGVscGVyV2FudGVkRGVmYXVsdCgpKTsKLQkJc2V0RGVmYXVsdChQUkVGRVJFTkNFX1dSQVBfQVJSQVlTLCBBeGlzRW1pdHRlckRlZmF1bHRzLmdldFdyYXBBcnJheXNEZWZhdWx0KCkpOwotCQlzZXREZWZhdWx0KFBSRUZFUkVOQ0VfVVNFX0lOSEVSSVRFRF9NRVRIT0RTLCBBeGlzRW1pdHRlckRlZmF1bHRzLmdldFVzZUluaGVyaXRlZE1ldGhvZHNEZWZhdWx0KCkpOwotCQlzZXREZWZhdWx0KFBSRUZFUkVOQ0VfVkFMSURBVEVfQUdBSU5TVF9KQVhSUEMsIEF4aXNFbWl0dGVyRGVmYXVsdHMuZ2V0VmFsaWRhdGVBZ2FpbnN0SkFYUlBDKCkpOwotCQlzZXREZWZhdWx0KFBSRUZFUkVOQ0VfREVQTE9ZX1NDT1BFLCBBeGlzRW1pdHRlckRlZmF1bHRzLmdldERlcGxveVNjb3BlRGVmYXVsdCgpKTsKLQkJc2V0RGVmYXVsdChQUkVGRVJFTkNFX1RJTUVfT1VULCBBeGlzRW1pdHRlckRlZmF1bHRzLmdldFRpbWVPdXREZWZhdWx0KCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldEFsbFdhbnRlZEVuYWJsZWQoYm9vbGVhbiBlbmFibGUpIAotCXsKLQkJc2V0VmFsdWUoUFJFRkVSRU5DRV9BTExfV0FOVEVELCBlbmFibGUpOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzQWxsV2FudGVkRW5hYmxlZCgpIAotCXsKLQkJcmV0dXJuIGdldFZhbHVlQXNCb29sZWFuKFBSRUZFUkVOQ0VfQUxMX1dBTlRFRCk7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0SGVscGVyV2FudGVkRW5hYmxlZChib29sZWFuIGVuYWJsZSkgCi0JewotCQlzZXRWYWx1ZShQUkVGRVJFTkNFX0hFTFBFUl9XQU5URUQsIGVuYWJsZSk7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNIZWxwZXJXYW50ZWRFbmFibGVkKCkgCi0JewotCQlyZXR1cm4gZ2V0VmFsdWVBc0Jvb2xlYW4oUFJFRkVSRU5DRV9IRUxQRVJfV0FOVEVEKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRXcmFwQXJyYXlzRW5hYmxlZChib29sZWFuIGVuYWJsZSkgCi0JewotCQlzZXRWYWx1ZShQUkVGRVJFTkNFX1dSQVBfQVJSQVlTLCBlbmFibGUpOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzV3JhcEFycmF5c0VuYWJsZWQoKSAKLQl7Ci0JCXJldHVybiBnZXRWYWx1ZUFzQm9vbGVhbihQUkVGRVJFTkNFX1dSQVBfQVJSQVlTKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRVc2VJbmhlcml0ZWRNZXRob2RzRW5hYmxlZChib29sZWFuIGVuYWJsZSkgCi0JewotCQlzZXRWYWx1ZShQUkVGRVJFTkNFX1VTRV9JTkhFUklURURfTUVUSE9EUywgZW5hYmxlKTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc1VzZUluaGVyaXRlZE1ldGhvZHNFbmFibGVkKCkgCi0JewotCQlyZXR1cm4gZ2V0VmFsdWVBc0Jvb2xlYW4oUFJFRkVSRU5DRV9VU0VfSU5IRVJJVEVEX01FVEhPRFMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFZhbGlkYXRlQWdhaW5zdEpBWFJQQ0VuYWJsZWQoYm9vbGVhbiBlbmFibGUpCi0JewotCQlzZXRWYWx1ZShQUkVGRVJFTkNFX1ZBTElEQVRFX0FHQUlOU1RfSkFYUlBDLCBlbmFibGUpOwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBpc1ZhbGlkYXRlQWdhaW5zdEpBWFJQQ0VuYWJsZWQoKQotCXsKLQkJcmV0dXJuIGdldFZhbHVlQXNCb29sZWFuKFBSRUZFUkVOQ0VfVkFMSURBVEVfQUdBSU5TVF9KQVhSUEMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHNlbGVjdERlcGxveVNjb3BlVHlwZShpbnQgc2VsZWN0aW9uKSB7Ci0JCXNldFZhbHVlKFBSRUZFUkVOQ0VfREVQTE9ZX1NDT1BFLCBzZWxlY3Rpb24pOwotCX0KLQotCXB1YmxpYyBpbnQgZ2V0RGVwbG95U2NvcGVUeXBlKCkgewotCQlyZXR1cm4gZ2V0VmFsdWVBc0ludChQUkVGRVJFTkNFX0RFUExPWV9TQ09QRSk7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0VGltZU91dChpbnQgc2Vjb25kcykgewotCQlzZXRWYWx1ZShQUkVGRVJFTkNFX1RJTUVfT1VULCBzZWNvbmRzKTsKLQl9Ci0KLQlwdWJsaWMgaW50IGdldFRpbWVPdXQoKSB7Ci0JCXJldHVybiBnZXRWYWx1ZUFzSW50KFBSRUZFUkVOQ0VfVElNRV9PVVQpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9sb2NhdG9yL0F4aXNTZXJ2aWNlc1NheEhhbmRsZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9sb2NhdG9yL0F4aXNTZXJ2aWNlc1NheEhhbmRsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Y2NTIxNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvbG9jYXRvci9BeGlzU2VydmljZXNTYXhIYW5kbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTE3ICAgMTQwODMyIGFuZHl6aGFpQGNhLmlibS5jb20gLSBBbmR5IFpoYWkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUubG9jYXRvcjsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLnhtbC5zYXguQXR0cmlidXRlczsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlcjsKLQotcHVibGljIGNsYXNzIEF4aXNTZXJ2aWNlc1NheEhhbmRsZXIgZXh0ZW5kcyBEZWZhdWx0SGFuZGxlcgotewotCXByaXZhdGUgVmVjdG9yIHdlYlNlcnZpY2VzTmFtZXMgPSBuZXcgVmVjdG9yKCk7Ci0JCi0JcHVibGljIHZvaWQgc3RhcnRFbGVtZW50KFN0cmluZyBuYW1lc3BhY2VVUkksIFN0cmluZyBsb2NhbE5hbWUsIFN0cmluZyBxTmFtZSwgQXR0cmlidXRlcyBhdHRzKSB0aHJvd3MgU0FYRXhjZXB0aW9uCi0JewotCQlpZiAobG9jYWxOYW1lLnRyaW0oKS50b0xvd2VyQ2FzZSgpLmVxdWFscygic2VydmljZSIpKQotCQl7CQotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRzLmdldExlbmd0aCgpOyBpKyspCi0JCQl7Ci0JCQkJaWYgKGF0dHMuZ2V0TG9jYWxOYW1lKGkpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLmVxdWFscygibmFtZSIpKQotCQkJCXsKLQkJCQkJU3RyaW5nIHNlcnZpY2VOYW1lID0gYXR0cy5nZXRWYWx1ZShpKTsKLQkJICAgICAgICAgICAgd2ViU2VydmljZXNOYW1lcy5hZGQoc2VydmljZU5hbWUpOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQkKLQlwdWJsaWMgTGlzdCBnZXRXZWJTZXJ2aWNlc05hbWVzKCkKLQl7Ci0JCXJldHVybiB0aGlzLndlYlNlcnZpY2VzTmFtZXM7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi9jb3JlL2xvY2F0b3IvQXhpc1NlcnZsZXRTYXhIYW5kbGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvbG9jYXRvci9BeGlzU2VydmxldFNheEhhbmRsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDk4YmNjOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvbG9jYXRvci9BeGlzU2VydmxldFNheEhhbmRsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA1MTcgICAxNDA4MzIgYW5keXpoYWlAY2EuaWJtLmNvbSAtIEFuZHkgWmhhaQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5sb2NhdG9yOwotCi1pbXBvcnQgb3JnLnhtbC5zYXguQXR0cmlidXRlczsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlcjsKLQotcHVibGljIGNsYXNzIEF4aXNTZXJ2bGV0U2F4SGFuZGxlciBleHRlbmRzIERlZmF1bHRIYW5kbGVyCi17Ci0JcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIEFYSVNfU0VSVkxFVF9DTEFTU19OQU1FID0gIm9yZy5hcGFjaGUuYXhpcy50cmFuc3BvcnQuaHR0cC5BeGlzU2VydmxldCI7Ci0JCi0JcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIFNFUlZMRVRfQ0xBU1NfTkFNRSA9ICJzZXJ2bGV0LWNsYXNzIjsKLQkKLQlwcml2YXRlIGJvb2xlYW4gaXNUaGVyZUF4aXNTZXJ2bGV0ID0gZmFsc2U7Ci0JCi0JcHJpdmF0ZSBTdHJpbmcgY3VycmVudEVsZW1lbnQgPSBudWxsOwotCQotCXB1YmxpYyB2b2lkIHN0YXJ0RWxlbWVudChTdHJpbmcgbmFtZXNwYWNlVVJJLCBTdHJpbmcgbG9jYWxOYW1lLCBTdHJpbmcgcU5hbWUsIEF0dHJpYnV0ZXMgYXR0cykgdGhyb3dzIFNBWEV4Y2VwdGlvbgotCXsKLQkJY3VycmVudEVsZW1lbnQgPSBsb2NhbE5hbWU7Ci0JfQotCQotCXB1YmxpYyB2b2lkIGNoYXJhY3RlcnMoY2hhcltdIGNoLCBpbnQgc3RhcnQsIGludCBsZW5ndGgpIHRocm93cyBTQVhFeGNlcHRpb24KLQl7Ci0JCWlmICggIWlzVGhlcmVBeGlzU2VydmxldCAmJiBTRVJWTEVUX0NMQVNTX05BTUUuZXF1YWxzKGN1cnJlbnRFbGVtZW50LnRyaW0oKSkgJiYgU3RyaW5nLnZhbHVlT2YoY2gpLmluZGV4T2YoQVhJU19TRVJWTEVUX0NMQVNTX05BTUUpID4gLTEpCi0JCXsKLQkJCWlzVGhlcmVBeGlzU2VydmxldCA9IHRydWU7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gaXNUaGVyZUF4aXNTZXJ2bGV0KCkKLQl7Ci0JCXJldHVybiB0aGlzLmlzVGhlcmVBeGlzU2VydmxldDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvbG9jYXRvci9BeGlzV2ViU2VydmljZUxvY2F0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9sb2NhdG9yL0F4aXNXZWJTZXJ2aWNlTG9jYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzVhZjYwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9sb2NhdG9yL0F4aXNXZWJTZXJ2aWNlTG9jYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzk0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMxNyAgIDEyNzQ1NiBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICogMjAwNjA1MTcgICAxNDA4MzIgYW5keXpoYWlAY2EuaWJtLmNvbSAtIEFuZHkgWmhhaQotICogMjAwNjA2MjAgICAxNDc4NjIgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkKLSAqIDIwMDYwNjIwICAgMTQ3ODY0IGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5Ci0gKiAyMDA2MTIxNCAgIDE2NTcxNiBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV2ViIFNlcnZpY2UgZmluZGVyIGRvZXMgbm90IGxvY2F0ZSBBeGlzIFdlYiBzZXJ2aWNlIGRlcGxveWVkIG9uIGNlcnRhaW4gc2VydmVycwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5sb2NhdG9yOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlNBWFBhcnNlcjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5TQVhQYXJzZXJGYWN0b3J5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JSmF2YVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSVR5cGVIaWVyYXJjaHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZUphdmFDbGllbnRJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJQb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c2ZpbmRlci5BYnN0cmFjdFdlYlNlcnZpY2VMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VDbGllbnRJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VJbmZvOwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKLQotLyoqCi0gKiBAYXV0aG9yIGNicmVhbGV5Ci0gKiBUaGUgQXhpcyBXZWIgc2VydmljZSBsb2NhdG9yIHBsdWdzIGl0c2VsZiBpbnRvIHRoZQotICogV2ViIFNlcnZpY2VzIEZpbmRlciBmcmFtZXdvcmsgYW5kIGRvZXMgdGhlIGpvYiBvZgotICogbG9jYXRpbmcgQXhpcyBjbGllbnRzIGFuZCBzZXJ2aWNlcy4KLSAqLwotcHVibGljIGNsYXNzIEF4aXNXZWJTZXJ2aWNlTG9jYXRvciBleHRlbmRzIEFic3RyYWN0V2ViU2VydmljZUxvY2F0b3IKLXsKLQlwcml2YXRlIFN0cmluZyBBWElTX1NUVUIgPSAib3JnLmFwYWNoZS5heGlzLmNsaWVudC5TdHViIjsKLQkKLQkvKioKLQkgKiBTZWFyY2hlcyB0aGUgd29ya3NwYWNlIGZvciBBeGlzIGNsaWVudHMgYXMKLQkgKiBpZGVudGlmaWVkIGJ5IG5vbi1zdHViIGNsYXNzZXMgdGhhdCBpbXBsZW1lbnQKLQkgKiBTRUlzIHRoYXQgYXJlIGltcGxlbWVudGVkIGJ5IHN0dWJzIHRoYXQgaW1wbGVtZW50Ci0JICogb3JnLmFwYWNoZS5heGlzLmNsaWVudC5TdHViLgotCSAqIEBwYXJhbSBtb25pdG9yIEEgcHJvZ3Jlc3MgbW9uaXRvciwgcG9zc2libHkgbnVsbC4KLQkgKiBAcmV0dXJuIEEgcG9zc2libHkgZW1wdHkgbGlzdCBvZiBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBvYmplY3RzLgotCSAqLwotCXB1YmxpYyBMaXN0IGdldFdlYlNlcnZpY2VDbGllbnRzIChJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpCi0JewotCQlMaXN0IGxpc3QgPSBuZXcgTGlua2VkTGlzdCgpOwotCQlJV29ya3NwYWNlUm9vdCByb290ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLQkJSUphdmFNb2RlbCBqYXZhTW9kZWwgPSBKYXZhQ29yZS5jcmVhdGUocm9vdCk7Ci0JCXRyeQotCQl7Ci0JCQlqYXZhTW9kZWwub3Blbihtb25pdG9yKTsKLQkJCUlKYXZhUHJvamVjdFtdIGphdmFQcm9qZWN0cyA9IGphdmFNb2RlbC5nZXRKYXZhUHJvamVjdHMoKTsKLQkJCWZvciAoaW50IGk9MDsgaTxqYXZhUHJvamVjdHMubGVuZ3RoOyBpKyspCi0JCQl7Ci0JCQkJLy8gV2UncmUgb25seSBpbnRlcmVzdGVkIGluIEphdmEgcHJvamVjdHMgd2l0aGluIHdoaWNoCi0JCQkJLy8gdGhlIEF4aXMgcnVudGltZSdzIGNsaWVudCAiU3R1YiIgY2xhc3MgaXMgbG9hZGFibGU6Ci0JCQkJSVR5cGUgYXhpc1N0dWIgPSBqYXZhUHJvamVjdHNbaV0uZmluZFR5cGUoQVhJU19TVFVCKTsKLQkJCQlpZiAoYXhpc1N0dWIgIT0gbnVsbCkKLQkJCQl7Ci0JCQkJCS8vIEZpbmQgIlByb3h5IiBjbGFzc2VzIGluIHRoZSBwcm9qZWN0IGFuZCBhZGQgdG8gdGhlIGxpc3QuCi0JCQkJCWFkZEF4aXNQcm94aWVzKGphdmFQcm9qZWN0c1tpXSxheGlzU3R1YixsaXN0LG1vbml0b3IpOwotCQkJCX0KLQkJCX0KLQkJCWphdmFNb2RlbC5jbG9zZSgpOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkKLQkJewotCQkJLy8gRmFsbCB0aHJ1IGFuZCByZXR1cm4gYW4gZW1wdHkgbGlzdC4KLQkJfQotCQlyZXR1cm4gbGlzdDsKLQl9Ci0JCi0JLyoqCi0JICogU2VhcmNoZXMgdGhlIHdvcmtzcGFjZSBmb3IgQXhpcyBjbGllbnRzIGFzCi0JICogaWRlbnRpZmllZCBieSBub24tc3R1YiBjbGFzc2VzIHRoYXQgaW1wbGVtZW50Ci0JICogU0VJcyB0aGF0IGFyZSBpbXBsZW1lbnRlZCBieSBzdHVicyB0aGF0IGltcGxlbWVudAotCSAqIG9yZy5hcGFjaGUuYXhpcy5jbGllbnQuU3R1Yi4KLQkgKiBAcGFyYW0gcHJvamVjdHMgVGhlIHByb2plY3RzIHRvIGNvbmZpbmUgdGhlIHNlYXJjaCB0by4KLQkgKiBAcGFyYW0gbW9uaXRvciBBIHByb2dyZXNzIG1vbml0b3IsIHBvc3NpYmx5IG51bGwuCi0JICogQHJldHVybiBBIHBvc3NpYmx5IGVtcHR5IGxpc3Qgb2YgV2ViU2VydmljZUNsaWVudEluZm8gb2JqZWN0cy4KLQkgKi8KLQlwdWJsaWMgTGlzdCBnZXRXZWJTZXJ2aWNlQ2xpZW50cyAoSVByb2plY3RbXSBwcm9qZWN0cywgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKQotCXsKLQkJaWYgKHByb2plY3RzID09IG51bGwpCi0JCXsKLQkJCXJldHVybiBnZXRXZWJTZXJ2aWNlQ2xpZW50cyhtb25pdG9yKTsKLQkJfQotCQlMaXN0IGxpc3QgPSBuZXcgTGlua2VkTGlzdCgpOwotCQlJV29ya3NwYWNlUm9vdCByb290ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLQkJSUphdmFNb2RlbCBqYXZhTW9kZWwgPSBKYXZhQ29yZS5jcmVhdGUocm9vdCk7Ci0JCXRyeQotCQl7Ci0JCQlqYXZhTW9kZWwub3Blbihtb25pdG9yKTsKLQkJCWZvciAoaW50IGk9MDsgaTxwcm9qZWN0cy5sZW5ndGg7IGkrKykKLQkJCXsKLQkJCQlJSmF2YVByb2plY3QgamF2YVByb2plY3QgPSBqYXZhTW9kZWwuZ2V0SmF2YVByb2plY3QocHJvamVjdHNbaV0uZ2V0TmFtZSgpKTsKLQkJCQkvLyBXZSdyZSBvbmx5IGludGVyZXN0ZWQgaW4gSmF2YSBwcm9qZWN0cyB3aXRoaW4gd2hpY2gKLQkJCQkvLyB0aGUgQXhpcyBydW50aW1lJ3MgY2xpZW50ICJTdHViIiBjbGFzcyBpcyBsb2FkYWJsZToKLQkJCQlJVHlwZSBheGlzU3R1YiA9IGphdmFQcm9qZWN0LmZpbmRUeXBlKEFYSVNfU1RVQik7Ci0JCQkJaWYgKGF4aXNTdHViICE9IG51bGwpCi0JCQkJewotCQkJCQkvLyBGaW5kICJQcm94eSIgY2xhc3NlcyBpbiB0aGUgcHJvamVjdCBhbmQgYWRkIHRvIHRoZSBsaXN0LgotCQkJCQlhZGRBeGlzUHJveGllcyhqYXZhUHJvamVjdCxheGlzU3R1YixsaXN0LG1vbml0b3IpOwotCQkJCX0KLQkJCX0KLQkJCWphdmFNb2RlbC5jbG9zZSgpOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkKLQkJewotCQkJLy8gRmFsbCB0aHJ1IGFuZCByZXR1cm4gYW4gZW1wdHkgbGlzdC4KLQkJfQotCQlyZXR1cm4gbGlzdDsKLQl9Ci0JCi0JLyoqCi0JICogVHJpZXMgdG8gZmluZCBBeGlzICJQcm94eSIgY2xhc3NlcyByZWxhdGVkIHRoZSBnaXZlbiBTdHViLgotCSAqIEBwYXJhbSBheGlzU3R1YiBUaGUgQXhpcyBjbGllbnQgIlN0dWIiIGZyb20gd2hpY2ggdG8gc2VhcmNoLgotCSAqIEBwYXJhbSBsaXN0IEEgbGlzdCB0byB3aGljaCB3ZSdsbCBhZGQgYW5kIFdlYlNlcnZpY2VDbGllbnRJbmZvCi0JICogb2JqZWN0cyBmb3IgIlByb3h5IiBjbGFzc2VzIHdlIGZpbmQgaW4gdGhlIHNlYXJjaC4gCi0JICovCi0JcHJpdmF0ZSB2b2lkIGFkZEF4aXNQcm94aWVzIChJSmF2YVByb2plY3QgamF2YVByb2plY3QsIElUeXBlIGF4aXNTdHViLCBMaXN0IGxpc3QsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikKLQl7Ci0JCXRyeQotCQl7Ci0JCQkvLyBDb21wdXRlIGEgaGllcmFyY2h5IHRvIGhlbHAgdXMgZmluZCBhbGwgdGhlCi0JCQkvLyBnZW5lcmF0ZWQgU3R1YiBzdWJjbGFzc2VzIG9mIHRoZSBBeGlzICJTdHViIgotCQkJLy8gY2xhc3MgYWNyb3NzIHRoZSBlbnRpcmUgd29ya3NwYWNlOgotCQkJSVR5cGVIaWVyYXJjaHkgYXhpc1N0dWJIaWVyYXJjaHkgPSBheGlzU3R1Yi5uZXdUeXBlSGllcmFyY2h5KGphdmFQcm9qZWN0LG1vbml0b3IpOwotCQkJSVR5cGVbXSBzdHVicyA9IGF4aXNTdHViSGllcmFyY2h5LmdldFN1YnR5cGVzKGF4aXNTdHViKTsKLQkJCWZvciAoaW50IHM9MDsgczxzdHVicy5sZW5ndGg7IHMrKykKLQkJCXsKLQkJCQkvLyBGb3IgZWFjaCBzdHViLCBmaW5kIGFsbCBpdHMgc3VwZXItaW50ZXJmYWNlcyBvZiB3aGljaAotCQkJCS8vIHRoZXJlIHNob3VsZCBiZSBvbmUsIG5hbWVseSB0aGUgZ2VuZXJhdGVkIFNFSToKLQkJCQlJVHlwZSBzZWlzW10gPSBheGlzU3R1YkhpZXJhcmNoeS5nZXRTdXBlckludGVyZmFjZXMoc3R1YnNbc10pOwotCQkJCWZvciAoaW50IGk9MDsgaTxzZWlzLmxlbmd0aDsgaSsrKQotCQkJCXsKLQkJCQkJdHJ5Ci0JCQkJCXsKLQkJCQkJCS8vIENvbXB1dGUgYSBoaWVyYXJjaHkgdG8gaGVscCB1cyBmaW5kIGFsbCB0aGUKLQkJCQkJCS8vIGdlbmVyYXRlZCBjbGFzc2VzIHRoYXQgaW1wbGVtZW50IHRoZSBTRUkKLQkJCQkJCS8vIGNvbmZpbmVkIHRvIHRoZSBjdXJyZW50IHByb2plY3Q6Ci0JCQkJCQlJVHlwZUhpZXJhcmNoeSBzZWlIaWVyYXJjaHkgPSBzZWlzW2ldLm5ld1R5cGVIaWVyYXJjaHkoamF2YVByb2plY3QsbW9uaXRvcik7Ci0JCQkJCQlJVHlwZVtdIHByb3hpZXMgPSBzZWlIaWVyYXJjaHkuZ2V0U3VidHlwZXMoc2Vpc1tpXSk7Ci0JCQkJCQlmb3IgKGludCBwPTA7IHA8cHJveGllcy5sZW5ndGg7IHArKykKLQkJCQkJCXsKLQkJCQkJCQkvLyBVbmRlciBub3JtYWwgY2lyY3Vtc3RhbmNlcyB3ZSBzaG91bGQgZmluZCB0d28gc3ViY2xhc3NlczoKLQkJCQkJCQkvLyAxLiBUaGUgZ2VuZXJhdGVkIHN0dWIgdGhhdCBnb3QgdXMgaGVyZSAodHdvIGxvb3BzIGFib3ZlKS4KLQkJCQkJCQkvLyAyLiBUaGUgZ2VuZXJhdGVkICJQcm94eSIgdGhhdCB3ZSdyZSBsb29raW5nIGZvci4KLQkJCQkJCQkvLyBTa2lwICMxIGFuZCBjYXB0dXJlICMyOgotCQkJCQkJCWlmICghcHJveGllc1twXS5nZXRGdWxseVF1YWxpZmllZE5hbWUoKS5lcXVhbHMoc3R1YnNbc10uZ2V0RnVsbHlRdWFsaWZpZWROYW1lKCkpKQotCQkJCQkJCXsKLQkJCQkJCQkJV2ViU2VydmljZUNsaWVudEluZm8gd3NjSW5mbyA9IG5ld1dlYlNlcnZpY2VDbGllbnRJbmZvKHByb3hpZXNbcF0pOwotCQkJCQkJCQlpZiAod3NjSW5mbyAhPSBudWxsKQotCQkJCQkJCQl7Ci0JCQkJCQkJCQlsaXN0LmFkZCh3c2NJbmZvKTsKLQkJCQkJCQkJfQotCQkJCQkJCX0KLQkJCQkJCX0KLQkJCQkJfQotCQkJCQljYXRjaCAoRXhjZXB0aW9uIGUpCi0JCQkJCXsKLQkJCQkJCS8vIFdlJ2xsIGxhbmQgaGVyZSBpZiB0aGUgSkRUIHdhcyB1bmFibGUgdG8gY29tcHV0ZQotCQkJCQkJLy8gYSB0eXBlIGhpZXJhcmNoeSBmb3IgdGhlIGN1cnJlbnQgU0VJLgotCQkJCQkJLy8gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLCBidXQgaWYgaXQgZG9lcywKLQkJCQkJCS8vIHRoZXJlJ3Mgbm90IG11Y2ggd2UgY2FuIGRvIGV4Y2VwdCBieXBhc3MgdGhlIFNFSQotCQkJCQkJLy8gYW5kIGxvb3Agb24gdG8gdGhlIG5leHQgb25lLgotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkKLQkJewotCQkJLy8gV2UnbGwgbGFuZCBoZXJlIGlmIEpEVCB3YXMgdW5hYmxlIHRvIGNvbXB1dGUKLQkJCS8vIGEgdHlwZSBoaWVyYXJjaHkgZm9yIHRoZSBBeGlzIGNsaWVudCAiU3R1YiIgY2xhc3MuCi0JCQkvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4sIGJ1dCBpZiBpdCBkb2VzLAotCQkJLy8gdGhlcmUncyBub3QgbXVjaCB3ZSBjYW4gZG8gZXhjZXB0IGJhaWwgb3V0LCBoYXZpbmcKLQkJCS8vIGFkZGVkIG5vdGhpbmcgdG8gdGhlIGxpc3QuCi0JCX0KLQl9Ci0JCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBvYmplY3QgZm9yIGEKLQkgKiBKRFQgSVR5cGUgb2JqZWN0IHJlcHJlc2VudGluZyBhIGdlbmVyYXRlZCBQcm94eS4KLQkgKiBAcGFyYW0gYXhpc1Byb3h5IFRoZSBJVHlwZSBvZiB0aGUgZ2VuZXJhdGVkIFByb3h5LgotCSAqIEByZXR1cm4gQSBuZXcgV2ViU2VydmljZUNsaWVudEluZm8gb2JqZWN0IGRlc2NyaWJpbmcgdGhlIFByb3h5LAotCSAqIG9yIG51bGwgaWYgdGhlIElUeXBlIGRvZXMgbm90IGFwcGVhciB0byBkZXNjcmliZSBhIG5vcm1hbCBQcm94eS4gCi0JICovCi0JcHJpdmF0ZSBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBuZXdXZWJTZXJ2aWNlQ2xpZW50SW5mbyAoSVR5cGUgYXhpc1Byb3h5KQotCXsKLQkJV2ViU2VydmljZUphdmFDbGllbnRJbmZvIHdzY0luZm8gPSBudWxsOwotCQl0cnkKLQkJewotCQkJSVJlc291cmNlIHJlc291cmNlID0gYXhpc1Byb3h5LmdldFVuZGVybHlpbmdSZXNvdXJjZSgpOwotCQkJaWYgKHJlc291cmNlICE9IG51bGwpCi0JCQl7Ci0JCQkJSVBhdGggcHJveHlQYXRoID0gcmVzb3VyY2UuZ2V0TG9jYXRpb24oKTsKLQkJCQlpZiAocHJveHlQYXRoICE9IG51bGwpCi0JCQkJewotCQkJCQlTdHJpbmcgcHJveHlVUkwgPSBwcm94eVBhdGgudG9GaWxlKCkudG9VUkwoKS50b1N0cmluZygpOwotCQkJCQl3c2NJbmZvID0gbmV3IFdlYlNlcnZpY2VKYXZhQ2xpZW50SW5mbygpOwotCQkJCQl3c2NJbmZvLnNldFR5cGUoYXhpc1Byb3h5KTsKLQkJCQkJd3NjSW5mby5zZXRJbXBsVVJMKHByb3h5VVJMKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKQotCQl7Ci0JCQkvLyBXZSdsbCBsYW5kIGhlcmUgaWYgd2UgY291bGQgbm90IGNvbnZlcnQgdGhlIElUeXBlCi0JCQkvLyBpbnRvIGFuIElSZXNvdXJjZSwgb3IgaWYgd2UgY291bGQgbm90IGNvbXB1dGUgYSBVUkwKLQkJCS8vIGZyb20gdGhhdCByZXNvdXJjZS4gRWl0aGVyIHdheSwgaXQgZGVmaW5pdGVseSBpc24ndAotCQkJLy8gYSBub3JtYWwgZ2VuZXJhdGVkIFByb3h5LCBzbyBnZXQgb3V0IGFuZCByZXR1cm4gbnVsbC4KLQkJfQotCQlyZXR1cm4gd3NjSW5mbzsJCQotCX0KLQotCS8qKgotCSAqIFNlYXJjaGVzIHRoZSB3b3Jrc3BhY2UgZm9yIEF4aXMgc2VydmljZXMgYXMKLQkgKiBpZGVudGlmaWVkIGJ5IHNlcnZlci1jb25maWcud3NkZCA8c2VydmljZT4gZWxlbWVudHMKLQkgKiBpbiBwcm9qZWN0cyB3aXRoIGFuIEF4aXMgc2VydmxldCByZWdpc3RlcmVkCi0JICogaW4gdGhlIHdlYi54bWwgZGVzY3JpcHRvci4KLQkgKiBAcGFyYW0gbW9uaXRvciBBIHByb2dyZXNzIG1vbml0b3IsIHBvc3NpYmx5IG51bGwuCi0JICogQHJldHVybiBBIHBvc3NpYmx5IGVtcHR5IGxpc3Qgb2YgV2ViU2VydmljZUluZm8gb2JqZWN0cy4KLQkgKi8KLQlwdWJsaWMgTGlzdCBnZXRXZWJTZXJ2aWNlcyAoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKQotCXsKLQkJcmV0dXJuIGdldFdlYlNlcnZpY2VzKG51bGwsbW9uaXRvcik7Ci0JfQotCQotCS8qKgotCSAqIFNlYXJjaGVzIHRoZSB3b3Jrc3BhY2UgZm9yIEF4aXMgc2VydmljZXMgYXMKLQkgKiBpZGVudGlmaWVkIGJ5IHNlcnZlci1jb25maWcud3NkZCA8c2VydmljZT4gZWxlbWVudHMKLQkgKiBpbiBwcm9qZWN0cyB3aXRoIGFuIEF4aXMgc2VydmxldCByZWdpc3RlcmVkCi0JICogaW4gdGhlIHdlYi54bWwgZGVzY3JpcHRvci4KLQkgKiBAcGFyYW0gcHJvamVjdHMgVGhlIHByb2plY3RzIHRvIGNvbmZpbmUgdGhlIHNlYXJjaCB0by4KLQkgKiBAcGFyYW0gbW9uaXRvciBBIHByb2dyZXNzIG1vbml0b3IsIHBvc3NpYmx5IG51bGwuCi0JICogQHJldHVybiBBIHBvc3NpYmx5IGVtcHR5IGxpc3Qgb2YgV2ViU2VydmljZUluZm8gb2JqZWN0cy4KLQkgKi8KLQlwdWJsaWMgTGlzdCBnZXRXZWJTZXJ2aWNlcyAoSVByb2plY3RbXSBwcm9qZWN0cywgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKQotCXsKLQkJVmVjdG9yIHdlYlNlcnZpY2VzID0gbmV3IFZlY3RvcigpOwotCQlpZiAocHJvamVjdHMgPT0gbnVsbCkKLQkJewotCQkJcHJvamVjdHMgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3RzKCk7Ci0JCX0KLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9qZWN0cy5sZW5ndGg7IGkrKykKLQkJewotCQkJLy8gd2UgYXJlIG9ubHkgaW50ZXJzdGVkIGluIGR5bmFtaWMgd2ViIHByb2plY3QKLQkJCWlmIChKMkVFVXRpbHMuaXNXZWJDb21wb25lbnQocHJvamVjdHNbaV0pKQotCQkJewotCQkJCXRyeSAKLQkJCQl7Ci0JCQkJCXdlYlNlcnZpY2VzLmFkZEFsbChnZXRXZWJTZXJ2aWNlc0Zyb21Qcm9qZWN0KHByb2plY3RzW2ldLCBtb25pdG9yKSk7Ci0JCQkJfSAKLQkJCQljYXRjaCAoRXhjZXB0aW9uIGUpIAotCQkJCXsKLQkJCQkJLy8gRmFsbCB0aHJ1IGFuZCByZXR1cm4gYW4gZW1wdHkgbGlzdC4KLQkJCQl9IAotCQkJfQotCQl9Ci0JCXJldHVybiB3ZWJTZXJ2aWNlczsKLQl9Ci0JCi0JLyoqCi0JICogU2VhcmNoZXMgZm9yIGEgcGFydGljdWxhciB3ZWIgcHJvamVjdCBmb3IgQXhpcyBzZXJ2aWNlcyBhcwotCSAqIGlkZW50aWZpZWQgYnkgc2VydmVyLWNvbmZpZy53c2RkIDxzZXJ2aWNlPiBlbGVtZW50cwotCSAqIHdpdGggYW4gQXhpcyBzZXJ2bGV0IHJlZ2lzdGVyZWQKLQkgKiBpbiB0aGUgd2ViLnhtbCBkZXNjcmlwdG9yLgotCSAqIEBwYXJhbSBtb25pdG9yIEEgcHJvZ3Jlc3MgbW9uaXRvciwgcG9zc2libHkgbnVsbC4KLQkgKiBAcmV0dXJuIEEgcG9zc2libHkgZW1wdHkgbGlzdCBvZiBXZWJTZXJ2aWNlSW5mbyBvYmplY3RzLgotCSAqLwotCXByaXZhdGUgTGlzdCBnZXRXZWJTZXJ2aWNlc0Zyb21Qcm9qZWN0KElQcm9qZWN0IHByb2plY3QsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24sIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24sIFNBWEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24KLQl7CQotCQkvLyBTZWFyY2ggdGhlIHdlYi54bWwgaW4gZml4ZWQgbG9jYXRpb24KLQkJSVBhdGggd2ViRGVzY3JpcHRvclBhdGggPSBKMkVFVXRpbHMuZ2V0V2ViSW5mUGF0aChwcm9qZWN0KS5hcHBlbmQoIi93ZWIueG1sIik7Ci0JCUlGaWxlIHdlYlhtbEZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUod2ViRGVzY3JpcHRvclBhdGgpOwotCQkKLQkJaWYgKHdlYlhtbEZpbGUgIT0gbnVsbCAmJiBpc0F4aXNTZXJ2bGV0RXhpc3RlZCh3ZWJYbWxGaWxlLCBtb25pdG9yKSkKLQkJewotCQkJLy8gU2VhcmNoIGZvciBhbGwgc2VydmVyLWNvbmZpZy53c2RkIGluc2lkZSB0aGlzIHByb2plY3QKLQkJCVNlcnZlckNvbmZpZ1dTRERWaXNpdG9yIHZpc2l0b3IgPSBuZXcgU2VydmVyQ29uZmlnV1NERFZpc2l0b3IoKTsKLQkJCXByb2plY3QuYWNjZXB0KHZpc2l0b3IpOwkJCi0JCQl2aXNpdG9yLnZpc2l0KHByb2plY3QpOwotCQkJVmVjdG9yIHdzZGRGaWxlcyA9IHZpc2l0b3IuZ2V0V3NkZEZpbGVzKCk7Ci0JCQlWZWN0b3Igc2VydmljZXNOYW1lcyA9IG5ldyBWZWN0b3IoKTsgCi0JCQlmb3IgKGludCBpID0gMDsgaSA8IHdzZGRGaWxlcy5zaXplKCk7IGkrKykKLQkJCXsKLQkJCQlzZXJ2aWNlc05hbWVzLmFkZEFsbChnZXRXZWJTZXJ2aWNlc05hbWVzRnJvbUF4aXNDb25maWcoKElGaWxlKXdzZGRGaWxlcy5nZXQoaSksIG1vbml0b3IpKTsKLQkJCX0KLQkJCXJldHVybiBnZXRXZWJTZXJ2aWNlcyhwcm9qZWN0LCBzZXJ2aWNlc05hbWVzLCBtb25pdG9yKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCXJldHVybiBuZXcgVmVjdG9yKCk7Ci0JCX0KLQl9Ci0JCi0JLyoKLQkgKiBEZXRlcm1pbmUgd2hldGhlciB3ZWIueG1sIGNvbnRhaW5zIGF4aXMgc2VydmxldAotCSAqLwotCXByaXZhdGUgYm9vbGVhbiBpc0F4aXNTZXJ2bGV0RXhpc3RlZChJRmlsZSBmaWxlLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uLCBTQVhFeGNlcHRpb24sIElPRXhjZXB0aW9uCi0JewotCQlJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IGZpbGUuZ2V0Q29udGVudHMoKTsKLQkJU0FYUGFyc2VyRmFjdG9yeSBmYWN0b3J5ID0gU0FYUGFyc2VyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotCQlmYWN0b3J5LnNldE5hbWVzcGFjZUF3YXJlKHRydWUpOwotCQlTQVhQYXJzZXIgcGFyc2VyID0gZmFjdG9yeS5uZXdTQVhQYXJzZXIoKTsKLQkJQXhpc1NlcnZsZXRTYXhIYW5kbGVyIGhhbmRsZXIgPSBuZXcgQXhpc1NlcnZsZXRTYXhIYW5kbGVyKCk7Ci0JCXBhcnNlci5wYXJzZShpbnB1dFN0cmVhbSwgaGFuZGxlcik7Ci0JCWlucHV0U3RyZWFtLmNsb3NlKCk7Ci0JCXJldHVybiBoYW5kbGVyLmlzVGhlcmVBeGlzU2VydmxldCgpOwotCX0KLQkKLQkvKgotCSAqIEdpdmVuIGEgbGlzdCBvZiBzZXJ2aWNlcywgZmluZCB0aGUgc2VydmVycyB0aGlzIHByb2plY3QgaXMgYXNzb2NpYXRlZCwKLQkgKiBDb21iaW5lIHRoZW0gYW5kIGZvcm0gdmFyaW91cyBlbmQgcG9pbnQKLQkgKi8KLQlwcml2YXRlIExpc3QgZ2V0V2ViU2VydmljZXMoSVByb2plY3QgcHJvamVjdCwgTGlzdCBzZXJ2aWNlc05hbWVzLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpCi0JewotCQlWZWN0b3Igd2ViU2VydmljZXMgPSBuZXcgVmVjdG9yKCk7Ci0JCUlTZXJ2ZXJbXSBzZXJ2ZXJzID0gU2VydmVyVXRpbC5nZXRTZXJ2ZXJzQnlNb2R1bGUoU2VydmVyVXRpbC5nZXRNb2R1bGUocHJvamVjdCksbW9uaXRvcik7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgc2VydmVycy5sZW5ndGg7IGkrKykKLQkJewotCQkJU3RyaW5nIGhvc3QgPSBzZXJ2ZXJzW2ldLmdldEhvc3QoKTsKLQkJCVNlcnZlclBvcnQgaHR0cFBvcnQgPSBnZXRIdHRwUG9ydChzZXJ2ZXJzW2ldLmdldFNlcnZlclBvcnRzKG1vbml0b3IpKTsKLQkJCWlmIChodHRwUG9ydCAhPSBudWxsKQotCQkJewotCQkJCWZvciAoaW50IGogPSAwOyBqIDwgc2VydmljZXNOYW1lcy5zaXplKCk7IGorKykKLQkJCQl7Ci0JCQkJCVdlYlNlcnZpY2VJbmZvIHdzSW5mbyA9IG5ldyBXZWJTZXJ2aWNlSW5mbygpOwotCQkJCQlTdHJpbmcgZW5kUG9pbnRVUkwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgaHR0cFBvcnQuZ2V0UG9ydCgpICsgIi8iICsgSjJFRVV0aWxzLmdldEZpcnN0V2ViTW9kdWxlTmFtZShwcm9qZWN0KSArICIvc2VydmljZXMvIiArIChTdHJpbmcpc2VydmljZXNOYW1lcy5nZXQoaik7Ci0JCQkJCXdzSW5mby5zZXRFbmRQb2ludFVSTChlbmRQb2ludFVSTCk7Ci0JCQkJCXdzSW5mby5zZXRXc2RsVVJMKGVuZFBvaW50VVJMKyI/d3NkbCIpOwotCQkgICAgICAgICAgICB3ZWJTZXJ2aWNlcy5hZGQod3NJbmZvKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIHdlYlNlcnZpY2VzOwotCX0KLQkKLQkvKgotCSAqIFBhcnNlIHRoZSBzZXJ2ZXItY29uZmlnLndzZGQgZmlsZSwgcmV0dXJuIGEgbGlzdCBvZiBuYW1lcyBvZiB3ZWIgc2VydmljZXMgCi0JICovCi0JcHJpdmF0ZSBMaXN0IGdldFdlYlNlcnZpY2VzTmFtZXNGcm9tQXhpc0NvbmZpZyhJRmlsZSBmaWxlLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uLCBTQVhFeGNlcHRpb24sIElPRXhjZXB0aW9uCi0JewotCQlJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IGZpbGUuZ2V0Q29udGVudHMoKTsKLQkJU0FYUGFyc2VyRmFjdG9yeSBmYWN0b3J5ID0gU0FYUGFyc2VyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotCQlmYWN0b3J5LnNldE5hbWVzcGFjZUF3YXJlKHRydWUpOwotCQlTQVhQYXJzZXIgcGFyc2VyID0gZmFjdG9yeS5uZXdTQVhQYXJzZXIoKTsKLQkJQXhpc1NlcnZpY2VzU2F4SGFuZGxlciBoYW5kbGVyID0gbmV3IEF4aXNTZXJ2aWNlc1NheEhhbmRsZXIoKTsKLQkJcGFyc2VyLnBhcnNlKGlucHV0U3RyZWFtLCBoYW5kbGVyKTsKLQkJaW5wdXRTdHJlYW0uY2xvc2UoKTsKLQkJcmV0dXJuIGhhbmRsZXIuZ2V0V2ViU2VydmljZXNOYW1lcygpOwkKLQl9Ci0JCi0JLyoKLQkgKiBmaW5kIHRoZSByaWdodCBwb3J0IChodHRwKSBmcm9tIGEgbGlzdCBvciBwb3J0cwotCSAqLwotCXByaXZhdGUgU2VydmVyUG9ydCBnZXRIdHRwUG9ydChTZXJ2ZXJQb3J0W10gcG9ydHMpCi0JewotCQlmb3IgKGludCBpID0gMDsgaSA8IHBvcnRzLmxlbmd0aDsgaSsrKQotCQl7Ci0JCQlTdHJpbmcgcHJvdG9jb2wgPSBwb3J0c1tpXS5nZXRQcm90b2NvbCgpOyAKLQkJCWlmICggcHJvdG9jb2wgIT0gbnVsbCAmJiBwcm90b2NvbC50cmltKCkudG9Mb3dlckNhc2UoKS5lcXVhbHMoImh0dHAiKSkgcmV0dXJuIHBvcnRzW2ldOwotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9sb2NhdG9yL1NlcnZlckNvbmZpZ1dTRERWaXNpdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvbG9jYXRvci9TZXJ2ZXJDb25maWdXU0REVmlzaXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMTRkMTNmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9sb2NhdG9yL1NlcnZlckNvbmZpZ1dTRERWaXNpdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTE3ICAgMTQwODMyIGFuZHl6aGFpQGNhLmlibS5jb20gLSBBbmR5IFpoYWkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUubG9jYXRvcjsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZVZpc2l0b3I7Ci0KLXB1YmxpYyBjbGFzcyBTZXJ2ZXJDb25maWdXU0REVmlzaXRvciBpbXBsZW1lbnRzIElSZXNvdXJjZVZpc2l0b3IKLXsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVhJU19TRVJWRVJfQ09ORklHX0ZJTEVfTkFNRSA9ICJTZXJ2ZXItY29uZmlnLndzZGQiOwotCVZlY3RvciB3c2RkRmlsZXMgPSBuZXcgVmVjdG9yKCk7Ci0JCi0JcHVibGljIGJvb2xlYW4gdmlzaXQoSVJlc291cmNlIHJlc291cmNlKQotICAgIHsKLQkJaWYgKHJlc291cmNlLmdldFR5cGUoKSA9PSBJUmVzb3VyY2UuRklMRSkKLQkJeyAgICAgCi0JCQlpZiAocmVzb3VyY2UuZ2V0TmFtZSgpLmVxdWFsc0lnbm9yZUNhc2UoQVhJU19TRVJWRVJfQ09ORklHX0ZJTEVfTkFNRSkpCi0JCQl7Ci0JCQkJd3NkZEZpbGVzLmFkZCgoSUZpbGUpcmVzb3VyY2UpOwotCQkJfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotCXB1YmxpYyBWZWN0b3IgZ2V0V3NkZEZpbGVzKCkKLQl7Ci0JCXJldHVybiB3c2RkRmlsZXM7IAotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9wbHVnaW4vV2ViU2VydmljZUF4aXNDb25zdW1wdGlvbkNvcmVQbHVnaW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vY29yZS9wbHVnaW4vV2ViU2VydmljZUF4aXNDb25zdW1wdGlvbkNvcmVQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZjZjdjNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL2NvcmUvcGx1Z2luL1dlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25Db3JlUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgICBidWcgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAzMjkgICAxMjcwMTYgYW5keXpoYWlAY2EuaWJtLmNvbSAtIEFuZHkgWmhhaQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5wbHVnaW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29udGV4dC5BeGlzRW1pdHRlckNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb250ZXh0LlBlcnNpc3RlbnRBeGlzRW1pdHRlckNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5FbnZpcm9ubWVudFNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JTG9nOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OwotCi0KLS8qKgotKiBUaGlzIGlzIHRoZSBwbHVnaW4gY2xhc3MgZm9yIHRoZSBXZWIgU2VydmljZXMgcGx1Z2luLgotKiA8cD4KLSogVGhpcyBwbHVnaW4gY29udGFpbnMgdGhlIGdyYXBoaWMgdXNlciBpbnRlcmZhY2UgdG8gdGhlCi0qIFdlYiBTZXJ2aWNlcyBydW50aW1lIGZvdW5kIGluIG9yZy5lY2xpcHNlLmpzdC53cy4KLSovCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZUF4aXNDb25zdW1wdGlvbkNvcmVQbHVnaW4gZXh0ZW5kcyBQbHVnaW4KLXsKLQotCS8qKgotCSogVGhlIGlkZW50aWZpZXIgb2YgdGhlIGRlc2NyaXB0b3Igb2YgdGhpcyBwbHVnaW4gaW4gcGx1Z2luLnhtbC4KLQkqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEID0KLQkJIm9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUiOwotCi0JLyoqCi0JKiBUaGUgcmVmZXJlbmNlIHRvIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBwbHVnaW4uCi0JKi8KLQlwcml2YXRlIHN0YXRpYyBXZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uQ29yZVBsdWdpbiBpbnN0YW5jZV87Ci0JcHJpdmF0ZSBJTG9nIGxvZ187Ci0KLQlwcml2YXRlIFBlcnNpc3RlbnRBeGlzRW1pdHRlckNvbnRleHQgYXhpc0VtaXR0ZXJDb250ZXh0XzsKLQkvKioKLQkqIENvbnN0cnVjdHMgYSBydW50aW1lIHBsdWdpbiBvYmplY3QgZm9yIHRoaXMgcGx1Z2luLgotCSogVGhlICJwbHVnaW4iIGVsZW1lbnQgaW4gcGx1Z2luLnhtbCBzaG91bGQgaW5jbHVkZSB0aGUgYXR0cmlidXRlCi0JKiBjbGFzcyA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlIi4KLQkqIEBwYXJhbSBkZXNjcmlwdG9yIFRoZSBkZXNjcmlwdG9yIG9mIHRoaXMgcGx1Z2luLgotCSovCi0JcHVibGljIFdlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25Db3JlUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlpZiAoaW5zdGFuY2VfID09IG51bGwpIHsKLQkJCWluc3RhbmNlXyA9IHRoaXM7Ci0JCX0KLQkJbG9nXyA9IEVudmlyb25tZW50U2VydmljZS5nZXRFY2xpcHNlTG9nKCk7Ci0KLQl9Ci0KLSAgLy8gVGhpcyBtZXRob2QgaXMgbmVlZGVkIHRvIGtlZXAgdGhlIGxvZ2dpbmcgZnJvbSBibG93aW5nIHVwLgotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIHJldHVybiBJRDsgIAotICB9Ci0gIAotCS8qKgotCSogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgcGx1Z2luLiBFcXVpdmFsZW50IHRvIGNhbGxpbmcKLQkqIChXZWJTZXJ2aWNlV2FzQ29uc3VtcHRpb25QbHVnaW4pUGxhdGZvcm0uZ2V0UGx1Z2luKCJvcmcuZWNsaXBzZS5qc3Qud3Mud2FzLnY1LnRwIik7Ci0JKiBAcmV0dXJuIFRoZSBXZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uQ29yZVBsdWdpbiBzaW5nbGV0b24uCi0JKi8KLQlzdGF0aWMgcHVibGljIFdlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25Db3JlUGx1Z2luIGdldEluc3RhbmNlKCkgewotCQlyZXR1cm4gaW5zdGFuY2VfOwotCX0KLQkKLQlwdWJsaWMgQXhpc0VtaXR0ZXJDb250ZXh0IGdldEF4aXNFbWl0dGVyQ29udGV4dCgpCi0JewotCQlpZiAoYXhpc0VtaXR0ZXJDb250ZXh0XyA9PSBudWxsKSAKLQkgIAkJYXhpc0VtaXR0ZXJDb250ZXh0XyA9IFBlcnNpc3RlbnRBeGlzRW1pdHRlckNvbnRleHQuZ2V0SW5zdGFuY2UoKTsKLQkJcmV0dXJuIGF4aXNFbWl0dGVyQ29udGV4dF87Ci0JfQotCi0JLyoqCi0JKiBDYWxsZWQgb25jZSBieSB0aGUgcGxhdGZvcm0gd2hlbiB0aGlzIHBsdWdpbiBpcyBmaXJzdCBsb2FkZWQuCi0JKiBAdGhyb3dzIENvcmVFeGNlcHRpb24gSWYgdGhpcyBwbHVnaW4gZmFpbHMgdG8gc3RhcnQuCi0JKi8KLQlwdWJsaWMgdm9pZCBzdGFydCggQnVuZGxlQ29udGV4dCBidW5kbGUgKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCWxvZ18ubG9nKElMb2cuSU5GTywgNTA4NywgdGhpcywgInN0YXJ0IiwgIlN0YXJ0aW5nIHBsdWdpbiBvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlIik7Ci0gICAgCi0gICAgdHJ5Ci0gICAgewotCQkgIHN1cGVyLnN0YXJ0KCBidW5kbGUgKTsKLSAgICB9Ci0gICAgY2F0Y2goIEV4Y2VwdGlvbiBleGMgKQotICAgIHsKLSAgICAgIGxvZ18ubG9nKCBJTG9nLkVSUk9SLCA1MDg4LCB0aGlzLCAic3RhcnQiLCBleGMgKTsKLSAgICB9Ci0JfQotCi0JLyoqCi0JKiBDYWxsZWQgb25jZSBieSB0aGUgcGxhdGZvcm0gd2hlbiB0aGlzIHBsdWdpbiBpcyB1bmxvYWRlZC4KLQkqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbiBJZiB0aGlzIHBsdWdpbiBmYWlscyB0byBzaHV0ZG93bi4KLQkqLwotCXB1YmxpYyB2b2lkIHN0b3AoIEJ1bmRsZUNvbnRleHQgY29udGV4dCApIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJbG9nXy5sb2coSUxvZy5JTkZPLCA1MDg5LCB0aGlzLCAic2h1dGRvd24iLCAiU2h1dHRpbmcgcGx1Z2luIG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUiKTsKLSAgICAKLSAgICB0cnkKLSAgICB7Ci0JCSAgc3VwZXIuc3RvcCggY29udGV4dCApOwotICAgIH0KLSAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgewotICAgICAgbG9nXy5sb2coIElMb2cuRVJST1IsIDUwOTAsIHRoaXMsICJzdG9wIiwgZXhjICk7ICAgICAgCi0gICAgfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvLmNsYXNzcGF0aCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTk2ZDQ5YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYy8iLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQ5YTAzYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLWJpbgotYnVpbGQueG1sCi10ZW1wLmZvbGRlcgotd3NjLWF4aXMtdWkuamFyCi1AZG90Ci1zcmMuemlwCi1qYXZhQ29tcGlsZXIuLi5hcmdzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpLy5wcm9qZWN0IGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJkYWM4NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWk8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjliNzNlZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLSNUaHUgTWF5IDMxIDEzOjEwOjE4IEVEVCAyMDA3Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTJiYjU1OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jTW9uIEphbiAzMCAxMDo0MTozNCBFU1QgMjAwNgotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzY0NGVmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlUExVR0lOX05BTUUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMzAzLnF1YWxpZmllcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkucGx1Z2luLldlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25VSVBsdWdpbgotQnVuZGxlLVZlbmRvcjogJVBMVUdJTl9QUk9WSURFUgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWk7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS5jb21tYW5kO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkucGx1Z2luO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudGFzazt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnV0aWw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS53aWRnZXRzO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLndzcnQ7eC1pbnRlcm5hbDo9dHJ1ZQotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLnVpO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS51aS5pZGU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsMy40LjApIiwKLSBvcmcuZWNsaXBzZS5lbWYuY29tbW9uO2J1bmRsZS12ZXJzaW9uPSJbMi4yLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS5lbWYuZWNvcmU7YnVuZGxlLXZlcnNpb249IlsyLjIuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLmpkdC5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZW07YnVuZGxlLXZlcnNpb249IlsyLjAuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLmplbS51dGlsO2J1bmRsZS12ZXJzaW9uPSJbMi4wLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZW0ud29ya2JlbmNoO2J1bmRsZS12ZXJzaW9uPSJbMi4wLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS5qc3Qud3M7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS5qc3Qud3MudWk7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAwLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52O2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAyLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGw7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC5qMmVlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS5qZW0ud29ya2JlbmNoO2J1bmRsZS12ZXJzaW9uPSJbMi4wLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3M7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAwLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5tb2R1bGVjb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBqYXZheC53c2RsO2J1bmRsZS12ZXJzaW9uPSJbMS40LjAsMS41LjApIiwKLSBvcmcuYXBhY2hlLmF4aXM7YnVuZGxlLXZlcnNpb249IlsxLjQuMCwxLjUuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3JrcztidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudDtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDAsMS4xLjApIiwKLSBjb20uaWJtLmljdTtidW5kbGUtdmVyc2lvbj0iWzMuNC40LDQuMC4wKSIKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvYWJvdXQuaHRtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkYjM2ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lIDA2LCAyMDA3PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvYnVpbGQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzc3MmI2NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLXNvdXJjZS4uID0gc3JjLwotYmluLmluY2x1ZGVzID0gLixcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3BsdWdpbi5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2E0OTI3ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jCi0jIE1lc3NhZ2VzIGluIHBsdWdpbi54bWwuCi0jCi1QTFVHSU5fTkFNRT1XZWJzZXJ2aWNlIEF4aXMgQ29uc3VtcHRpb24gVUkKLVBMVUdJTl9QUk9WSURFUj1FY2xpcHNlLm9yZwotCi1XRUJTRVJWSUNFQ0xJRU5UVFlQRV9OQU1FX0pBVkFfQVhJUz1KYXZhIHByb3h5Ci1MQUJFTF9SVU5USU1FX0FYSVNfMTE9QXBhY2hlIEF4aXMKLURFU0NfUlVOVElNRV9BWElTXzExPUFwYWNoZSBBeGlzCi0jCi0jCVdlYiBTZXJ2aWNlcyBQcmVmZXJhbmNlIFBhZ2VzCi0jCi0jIENhdGVnb3JpZXMKLVBSRUZFUkVOQ0VfQ0FURUdPUllfQVhJU19FTUlUVEVSPUF4aXMgRW1pdHRlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9wbHVnaW4ueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzUwYzE3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci0KLTxwbHVnaW4+Ci0gICAKLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0UmVnaXN0cnkiPgotICAgICAgIDx3aWRnZXRGYWN0b3J5ICAgCi0gICAgICAgICAgICAgaWQ9IkF4aXNDbGllbnRDb25maWciCi0gICAgICAgICAgICAgaW5zZXJ0QmVmb3JlQ29tbWFuZElkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS50YXNrLkRlZmF1bHRzRm9ySFRUUEJhc2ljQXV0aENvbW1hbmQiCi0gICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLndzcnQuQXhpc0NsaWVudENvbmZpZ1dpZGdldEZhY3RvcnkiLz4KLSAgICA8L2V4dGVuc2lvbj4gCi0gICAgICAgICAgPGV4dGVuc2lvbgotICAgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmFudERhdGFNYXBwaW5nIj4KLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IkNsaWVudFByb2plY3ROYW1lIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQuQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iQ2xpZW50UHJvamVjdCIKLSAgICAgICAgICAgICAgdHJhbnNmb3JtPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlN0cmluZ1RvSVByb2plY3RUcmFuc2Zvcm1lciIvPgotICAgICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iQ3VzdG9taXplQ2xpZW50TWFwcGluZ3MiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkuY29tbWFuZC5BeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQiCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJDdXN0b21pemVDbGllbnRNYXBwaW5ncyIvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotIAkJPG1hcAotICAgICAgICAgICAgICBrZXk9Ik1hcHBpbmdzIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnRhc2suQ2xpZW50Q29kZUdlbk9wZXJhdGlvbiIKLSAgICAgICAgICAgICAgcHJvcGVydHk9IkphdmFXU0RMUGFyYW0iCi0gICAgICAgICAgICAgIHRyYW5zZm9ybT0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbU1vZGlmaWVyIi8+Ci0gIDwvZXh0ZW5zaW9uPiAKLSAgICAgPGV4dGVuc2lvbgotICAgICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnByZWZlcmVuY2VQYWdlcyI+ICAgICAKLSAgICAgIDxwYWdlCi0gICAgICAgICAgICBuYW1lPSIlUFJFRkVSRU5DRV9DQVRFR09SWV9BWElTX0VNSVRURVIiCi0gICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLnByZWZlcmVuY2VzLm5hbWUiCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkucHJlZmVyZW5jZXMuQXhpc0VtaXR0ZXJQcmVmZXJlbmNlUGFnZSIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS5wcmVmZXJlbmNlcy5BeGlzRW1pdHRlclByZWZlcmVuY2VQYWdlIj4KLSAgICAgIDwvcGFnZT4KLQotICAgPC9leHRlbnNpb24+Ci08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS9BeGlzQ29uc3VtcHRpb25VSS5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvQXhpc0NvbnN1bXB0aW9uVUkucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTZmYzhiMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS9BeGlzQ29uc3VtcHRpb25VSS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotIyAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyAyMDA2MDIxNiAgIDEyNjk4OSBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0jIDIwMDYwMzI5ICAgMTI3MDE2IGFuZHl6aGFpQGNhLmlibS5jb20gLSBBbmR5IFpoYWkKLSMgMjAwNjA0MjQgICAxMjAxMzcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIwotIyBNZXNzYWdlcyBpbiBwbHVnaW4ueG1sLgotIwotCi1NU0dfRVJST1JfREVGQVVMVF9CRUFOPUlXQUIwNDkxRSBFcnJvciBlbmNvdW50ZXJlZCB3aGlsZSBzZXR0aW5nIHVwIGRlZmF1bHQgdmFsdWVzIGZvciBKYXZhIGJlYW4KLU1TR19FUlJPUl9XU0RMX05PX0RFRklOSVRJT049SVdBQjA0OTVFIFdTREwgZmlsZSBhdCB7MH0gaGFzIG5vIGRlZmluaXRpb24gZWxlbWVudAotTVNHX0VSUk9SX1dTRExfTk9fUE9SVD1JV0FCMDQ5NkUgV1NETCBmaWxlIGF0IHswfSBoYXMgbm8gcG9ydCBlbGVtZW50Ci1NU0dfRVJST1JfV1JJVEVfV1NETD1JV0FCMDQ5N0UgRXJyb3IgaW4gd3JpdGluZyBXU0RMIGZpbGUgezB9Ci0KLSMKLSMgTWVzc2FnZXMgZm9yIENvcHlDbGllbnRXU0RMVGFzawotIwotTVNHX0VSUk9SX0lNUE9SVF9XU0RMPUlXQUIwNTMxRSBFcnJvciBpbiByZXNvbHZpbmcgV1NETCBmaWxlIHswfSwgaW1wb3J0IFdTREwgZmlsZSBtdXN0IGhhdmUgYWJzb2x1dGUgVVJMIG9yIHJlbGF0aXZlIFVSTCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkKLQotCi0jCi0jRGVmYXVsdHNGb3JDbGllbnRKYXZhV1NETENvbW1hbmQKLSMKLU1TR19FUlJPUl9XU0RMX0xPQ0FUSU9OX05PVF9TRVQ9SVdBQjA1MDFFIFdTREwgbG9jYXRpb24gbm90IHNldC4KLQotIwotI0FkZEphcnNUb1Byb2plY3RCdWlsZFBhdGhUYXNrCi0jCi1NU0dfV0FSTl9OT19KQVZBX05BVFVSRT1JV0FCMDUwMlcgVGhlIHByb2plY3QgaXMgbm90IGEgSmF2YSBwcm9qZWN0LgotTVNHX0VSUk9SX0JBRF9CVUlMRFBBVEg9SVdBQjA1MDNFIFVuYWJsZSB0byB1cGRhdGUgSmF2YSBidWlsZCBwYXRoLiBQbGVhc2UgY2hlY2sgeW91ciBzeXN0ZW0gZW52aXJvbm1lbnQuCi0KLSMKLSNDb3B5QXhpc0phckNvbW1hbmQKLSMKLVBST0dSRVNTX0lORk9fQ09QWV9BWElTX0NGRz1JV0FCMDUwNUkgQ29weWluZyBBeGlzIGphciBmaWxlcyB0byB3ZWIgcHJvamVjdC4KLU1TR19FUlJPUl9GSUxFQ09QWT1JV0FCMDUwNkUgRXJyb3Igd2hlbiBjb3B5aW5nIEF4aXMgamFyIGZpbGVzIHRvIHdlYiBwcm9qZWN0Ci0KLSMKLSNSZWZyZXNoUHJvamVjdFRhc2sKLSMKLU1TR19FUlJPUl9SRUZSRVNIX1BST0pFQ1Q9SVdBQjA1MDhFIFVuYWJsZSB0byByZWZyZXNoIHByb2plY3QuCi0KLSMKLSNXZWJTZXJ2aWNlQXhpc1Byb3h5UGFnZQotIwotVE9PTFRJUF9QV0pCX1BBR0U9UGFnZQotVE9PTFRJUF9QV0pCX1RFWFRfRk9MREVSPUZvbGRlciBmb3IgcHJveHkgdG8gYmUgZ2VuZXJhdGVkIGZvciB0aGUgc2VsZWN0ZWQgYmluZGluZy4KLVRPT0xUSVBfUFdKQl9DSEVDS0JPWF9HRU5QUk9YWT1DaGVjayB0byBlbmFibGUvZGlzYWJsZSB0aGUgZ2VuZXJhdGlvbiBvZiBhIHByb3h5LgotCi1QQUdFX1RJVExFX1dTX0FYSVNfUFJPWFk9V2ViIFNlcnZpY2UgUHJveHkgUGFnZQotUEFHRV9ERVNDX1dTX0FYSVNfUFJPWFk9U2VsZWN0IGdlbmVyYXRlIHByb3h5IGlmIHlvdSB3YW50IHRvIGdlbmVyYXRlIHByb3h5IGZvciB5b3VyIHNlcnZpY2UuCi1DSEVDS0JPWF9HRU5QUk9YWT1HZW5lcmF0ZSBwcm94eQotTEFCRUxfRk9MREVSX05BTUU9T3V0cHV0IGZvbGRlcgotCi0jCi0jIE1lc3NhZ2VzIGZvciBXZWJTZXJpdmNlQXhpc01hcHBpbmdzUGFnZQotIwotUEFHRV9USVRMRV9XU19CRUFOMlhNTD1XZWIgU2VydmljZSBQYWNrYWdlIHRvIE5hbWVzcGFjZSBNYXBwaW5nCi1QQUdFX1RJVExFX1dTX1hNTDJQUk9YWT1XZWIgU2VydmljZSBDbGllbnQgTmFtZXNwYWNlIHRvIFBhY2thZ2UgTWFwcGluZwotUEFHRV9ERVNDX1AyTl9NQVBQSU5HUz1EZWZpbmUgY3VzdG9tIG1hcHBpbmcgZm9yIHBhY2thZ2UgdG8gbmFtZXNwYWNlLgotCi0KLUxBQkVMX01BUFBJTkdfUEFJUlM9TWFwcGluZyBwYWlycwotVEFCTEVfQ09MVU1OX0xBQkVMX1BBQ0tBR0U9cGFja2FnZQotVEFCTEVfQ09MVU1OX0xBQkVMX05BTUVTUEFDRT1uYW1lc3BhY2UKLUxBQkVMX0VYUExPUkVfTUFQUElOR1NfWE1MMkJFQU49RGVmaW5lIGN1c3RvbSBtYXBwaW5nIGZvciBuYW1lc3BhY2UgdG8gcGFja2FnZS4KLVRPT0xUSVBfTjJQX1NIT1dfTUFQUElOR1M9RGVmaW5lIG5hbWVzcGFjZSB0byBwYWNrYWdlIG1hcHBpbmcgZm9yIGN1c3RvbWl6YXRpb24uCi0KLSMgTWVzc2FnZXMgZm9yIEF4aXMgRW1pdHRlciBQcmVmZXJlbmNlIFBhZ2UKLVRPT0xUSVBfUFBBRV9QQUdFPVNldCBwcmVmZXJlbmNlcyB0aGF0IGNvbnRyb2wgQXhpcyBFbWl0dGVyLgotVE9PTFRJUF9QUEFFX0NIRUNLQk9YX0FMTF9XQU5URUQ9QnkgZGVmYXVsdCwgY29kZSBpcyBnZW5lcmF0ZWQgb25seSBmb3IgcmVmZXJlbmNlZCBlbGVtZW50cy4gXG5DYWxsIGJHZW5lcmF0ZUFsbCh0cnVlKSBhbmQgV1NETDJKYXZhIHdpbGwgZ2VuZXJhdGUgY29kZSBcbmZvciBhbGwgZWxlbWVudHMgaW4gdGhlIHNjb3BlIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGV5IGFyZSByZWZlcmVuY2VkLiBcblNjb3BlIG1lYW5zOiBieSBkZWZhdWx0LCBhbGwgV1NETCBmaWxlczsgaWYgZ2VuZXJhdGVJbXBvcnRzKGZhbHNlKSxcbnRoZW4gb25seSB0aGUgaW1tZWRpYXRlIFdTREwgZmlsZS4KLVRPT0xUSVBfUFBBRV9DSEVDS0JPWF9IRUxQRVJfV0FOVEVEPUVtaXRzIHNlcGFyYXRlIEhlbHBlciBjbGFzc2VzIGZvciBtZXRhIGRhdGEuCi1UT09MVElQX1BQQUVfQ0hFQ0tCT1hfV1JBUF9BUlJBWVM9UHJlZmVycyBidWlsZGluZyBiZWFucyB0byBzdHJhaWdodCBhcnJheXMgZm9yIHdyYXBwZWQgWE1MIGFycmF5IHR5cGVzLgotVE9PTFRJUF9QUEFFX0NIRUNLQk9YX1VTRV9JTkhFUklURURfTUVUSE9EUz1JZiB0aGlzIG9wdGlvbiBpcyBzZWxlY3RlZCwgdGhlIEphdmEyV1NETCBwYXJzZXIgd2lsbCBsb29rIGludG8gZXh0ZW5kZWQgY2xhc3NlcyB0byBkZXRlcm1pbmUgdGhlIGxpc3Qgb2YgbWV0aG9kcyB0byBleHBvcnQgaW50byB0aGUgV1NETCBmaWxlLgotVE9PTFRJUF9QUEFFX0NIRUNLQk9YX1ZBTElEQVRFX0FHQUlOU1RfSkFYUlBDPUlmIHNlbGVjdGVkLCB0aGUgdG9vbHMgd2lsbCBleGFtaW5lIHRoZSBKYXZhIHNlcnZpY2UgY2xhc3MgYW5kIGl0cyB2YWx1ZSB0eXBlcyB0byBkZXRlcm1pbmUgaWYgaXQgc2F0aXNmaWVzIGltcG9ydGFudCByZXF1aXJlbWVudHMgb2YgdGhlIEpBWC1SUEMgc3BlY2lmaWNhdGlvbi4gICAgCi1UT09MVElQX1BQQUVfQ09NQk9fREVQTE9ZX1NDT1BFPUFkZCBzY29wZSB0byBkZXBsb3kud3NkZC4KLVRPT0xUSVBfUFBBRV9GSUVMRF9USU1FX09VVD1UaW1lb3V0IGluIHNlY29uZHMgKGRlZmF1bHQgaXMgNDUsIHNwZWNpZnkgLTEgdG8gZGlzYWJsZSkuCi1UT09MVElQX1BQQUVfR1JPVVBfV1NETDJKQVZBPVNldCBwcmVmZXJlbmNlcyBmb3Igd3NkbDJqYXZhLgotVE9PTFRJUF9QUEFFX0dST1VQX0pBVkEyV1NETD1TZXQgcHJlZmVyZW5jZXMgZm9yIGphdmEyd3NkbC4KLUJVVFRPTl9BTExfV0FOVEVEPSZHZW5lcmF0ZSBjb2RlIGZvciBhbGwgZWxlbWVudHMsIGV2ZW4gdW5yZWZlcmVuY2VkIG9uZXMuCi1CVVRUT05fSEVMUEVSX1dBTlRFRD1FbWl0cyBzZXBhcmF0ZSAmSGVscGVyIGNsYXNzZXMgZm9yIG1ldGEgZGF0YS4KLUJVVFRPTl9XUkFQX0FSUkFZUz1QcmVmZXJzIGJ1aWxkaW5nIGJlYW5zIHRvIHN0cmFpZ2h0IGFycmF5cyBmb3IgJndyYXBwZWQgWE1MIGFycmF5IHR5cGVzLgotQlVUVE9OX1VTRV9JTkhFUklURURfTUVUSE9EUz1Mb29rIGZvciBhbGxvd2VkICZtZXRob2RzIGluIGluaGVyaXRlZCBjbGFzcwotQlVUVE9OX1ZBTElEQVRFX0FHQUlOU1RfSkFYUlBDPUFuYWx5emUgdGhlIHNlcnZpY2UgY2xhc3MgZm9yIGNvbXBsaWFuY2UgdG8gSkFYLVJQQyBiZWZvcmUgZ2VuZXJhdGluZyBjb2RlCi1MQUJFTF9ERVBMT1lfU0NPUEU9QWRkICZzY29wZSB0byBkZXBsb3kud3NkZDoKLUxBQkVMX1RJTUVfT1VUPSZUaW1lb3V0IGluIHNlY29uZHM6Ci1HUk9VUF9XU0RMMkpBVkFfTkFNRT1Xc2RsMkphdmEKLUdST1VQX0pBVkEyV1NETF9OQU1FPUphdmEyV3NkbAotREVQTE9ZX1NDT1BFX0FQUExJQ0FUSU9OPUFwcGxpY2F0aW9uCi1ERVBMT1lfU0NPUEVfUkVRVUVTVD1SZXF1ZXN0Ci1ERVBMT1lfU0NPUEVfU0VTU0lPTj1TZXNzaW9uCi1NU0dfRVJST1JfSU5WQUxJRF9USU1FX09VVD1JbnZhbGlkIHRpbWVvdXQhIFRpbWVvdXQgc2hvdWxkIGJlIHBvc2l0aXZlIGludGVnZXIgb3IgLTEgdG8gZGlzYWJsZS4KLU1TR19VU0VfSlZNX0FSR1VNRU5UX0ZPUl9USU1FX09VVD1Zb3UgYXJlIHVzaW5nIHRoZSB2YWx1ZSBvZiB0aW1lb3V0IGZyb20gSlZNIGFyZ3VtZW50cyBBeGlzV3NkbDJKYXZhVGltZW91dCB3aGljaCBzcGVjaWZpZXMgdGltZW91dCBpbiBtaWxsaXNlY29uZHMuCi0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjQwMzhlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL0F4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiB5eXl5bW1kZCAgIGJ1ZyAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIDIwMDYwMzI5ICAgMTI3MDE2IGFuZHl6aGFpQGNhLmlibS5jb20gLSBBbmR5IFpoYWkKLSAqIDIwMDYwNDI0ICAgMTIwMTM3IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotCi1wdWJsaWMgZmluYWwgY2xhc3MgQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcyBleHRlbmRzIE5MUyB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSAib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkuQXhpc0NvbnN1bXB0aW9uVUkiOy8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcygpIHsKLQkJLy8gRG8gbm90IGluc3RhbnRpYXRlCi0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0RFRkFVTFRfQkVBTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfV1NETF9OT19ERUZJTklUSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9XU0RMX05PX1BPUlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1dSSVRFX1dTREw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0lNUE9SVF9XU0RMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9XU0RMX0xPQ0FUSU9OX05PVF9TRVQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX1dBUk5fTk9fSkFWQV9OQVRVUkU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0JBRF9CVUlMRFBBVEg7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUFJPR1JFU1NfSU5GT19DT1BZX0FYSVNfQ0ZHOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9GSUxFQ09QWTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfUkVGUkVTSF9QUk9KRUNUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdKQl9QQUdFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdKQl9URVhUX0ZPTERFUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXSkJfQ0hFQ0tCT1hfR0VOUFJPWFk7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9USVRMRV9XU19BWElTX1BST1hZOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfREVTQ19XU19BWElTX1BST1hZOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIENIRUNLQk9YX0dFTlBST1hZOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX0ZPTERFUl9OQU1FOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfVElUTEVfV1NfQkVBTjJYTUw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9USVRMRV9XU19YTUwyUFJPWFk7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9ERVNDX1AyTl9NQVBQSU5HUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9NQVBQSU5HX1BBSVJTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRBQkxFX0NPTFVNTl9MQUJFTF9QQUNLQUdFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRBQkxFX0NPTFVNTl9MQUJFTF9OQU1FU1BBQ0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfRVhQTE9SRV9NQVBQSU5HU19YTUwyQkVBTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX04yUF9TSE9XX01BUFBJTkdTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFBBRV9QQUdFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFBBRV9DSEVDS0JPWF9BTExfV0FOVEVEOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFBBRV9DSEVDS0JPWF9IRUxQRVJfV0FOVEVEOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFBBRV9DSEVDS0JPWF9XUkFQX0FSUkFZUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BQQUVfQ0hFQ0tCT1hfVVNFX0lOSEVSSVRFRF9NRVRIT0RTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFBBRV9DSEVDS0JPWF9WQUxJREFURV9BR0FJTlNUX0pBWFJQQzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BQQUVfQ09NQk9fREVQTE9ZX1NDT1BFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFBBRV9GSUVMRF9USU1FX09VVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BQQUVfR1JPVVBfV1NETDJKQVZBOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFBBRV9HUk9VUF9KQVZBMldTREw7CQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJVVFRPTl9BTExfV0FOVEVEOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJVVFRPTl9IRUxQRVJfV0FOVEVEOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJVVFRPTl9XUkFQX0FSUkFZUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBCVVRUT05fVVNFX0lOSEVSSVRFRF9NRVRIT0RTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJVVFRPTl9WQUxJREFURV9BR0FJTlNUX0pBWFJQQzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9ERVBMT1lfU0NPUEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfVElNRV9PVVQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgR1JPVVBfV1NETDJKQVZBX05BTUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgR1JPVVBfSkFWQTJXU0RMX05BTUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgREVQTE9ZX1NDT1BFX0FQUExJQ0FUSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIERFUExPWV9TQ09QRV9SRVFVRVNUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIERFUExPWV9TQ09QRV9TRVNTSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9JTlZBTElEX1RJTUVfT1VUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19VU0VfSlZNX0FSR1VNRU5UX0ZPUl9USU1FX09VVDsKLQlzdGF0aWMgewotCQlOTFMuaW5pdGlhbGl6ZU1lc3NhZ2VzKEJVTkRMRV9OQU1FLCBBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLmNsYXNzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS9jb21tYW5kL0F4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvY29tbWFuZC9BeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQyMWI4My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS9jb21tYW5kL0F4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS5jb21tYW5kOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbi5KYXZhV1NETFBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbi5XU0RMUGFyc2VyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlc1BhcnNlcjsKLQotLyoqCi0gKiAKLSAqIEF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZAotICogIAotICovCi1wdWJsaWMgY2xhc3MgQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gCi17Ci0gICAgcHJpdmF0ZSBib29sZWFuIGlzQ2xpZW50U2NlbmFyaW9fICA9IHRydWU7Ci0JcHJpdmF0ZSBib29sZWFuIGN1c3RvbWl6ZU1hcHBpbmdzXyA9IGZhbHNlOwotCXByaXZhdGUgYm9vbGVhbiBnZW5lcmF0ZVByb3h5XyA9IHRydWU7Ci0JcHJpdmF0ZSBTdHJpbmcgY2xpZW50UnVudGltZUlkXzsKLQlwcml2YXRlIEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW1fOwotCXByaXZhdGUgSVByb2plY3QgcHJveHlQcm9qZWN0XyA9IG51bGw7Ci0JcHJpdmF0ZSBJUHJvamVjdCBjbGllbnRQcm9qZWN0RUFSXyA9IG51bGw7Ci0JcHJpdmF0ZSBTdHJpbmcgd3NkbFVSTF87Ci0JcHJpdmF0ZSBib29sZWFuIHRlc3RQcm94eVNlbGVjdGVkXzsKLQlwcml2YXRlIElTZXJ2ZXIgY2xpZW50RXhpc3RpbmdTZXJ2ZXJfOwotCXByaXZhdGUgU3RyaW5nIGNsaWVudFNlcnZlcl87Ci0JcHJpdmF0ZSBib29sZWFuIGNsaWVudElzRXhpc3RpbmdTZXJ2ZXJfOwotCXByaXZhdGUgU3RyaW5nIHByb3h5UHJvamVjdEZvbGRlcl87Ci0JcHJpdmF0ZSBXZWJTZXJ2aWNlc1BhcnNlciB3ZWJTZXJ2aWNlc1BhcnNlcl87Ci0JcHVibGljIEF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZCggKSAKLQl7Ci0JfQotCi0JcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApIAotCXsKLQkJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCQkKLQkJY2xpZW50RXhpc3RpbmdTZXJ2ZXJfID0gZ2V0U2VydmVyRnJvbVNlcnZlckxhYmVsKCk7Ci0vLwkJaWYgKGNsaWVudEV4aXN0aW5nU2VydmVyXyAhPSBudWxsKSB7Ci0vLwkJCS8vVE9ETyBUaGUgZm9sbG93aW5nIGxpbmUgc2hvdWxkIG5vIGxvbmdlciBiZSBuZWNlc3NhcnkuCi0vLwkJCWNsaWVudEV4aXN0aW5nU2VydmVyXy5nZXRTZXJ2ZXJUeXBlKCkuZ2V0SWQoKTsKLS8vCQl9IGVsc2UgewotLy8JCQkvL1RPRE8gZ2V0IHRoZSBmYWN0b3J5IGlkIGZvciB0aGUgdHlwZS4KLS8vCQl9Ci0JCS8vamF2YVdTRExQYXJhbQotCQlqYXZhV1NETFBhcmFtXyA9IG5ldyBKYXZhV1NETFBhcmFtZXRlcigpOwotCQkKLQkJLy8gcHJveHlQcm9qZWN0Rm9sYmVyXwotCQkKLQkJd2ViU2VydmljZXNQYXJzZXJfID0gV1NETFBhcnNlckZhY3RvcnkuZ2V0V1NETFBhcnNlcigpOwotCQlyZXR1cm4gc3RhdHVzOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldENsaWVudFJ1bnRpbWVJRChTdHJpbmcgY2xpZW50UnVudGltZUlkKSB7Ci0JCWNsaWVudFJ1bnRpbWVJZF8gPSBjbGllbnRSdW50aW1lSWQ7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRDbGllbnRSdW50aW1lSUQoKSB7Ci0JCXJldHVybiB0aGlzLmNsaWVudFJ1bnRpbWVJZF87Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiBSZXR1cm5zIHRoZSBqYXZhV1NETFBhcmFtLgotCSAqLwotCXB1YmxpYyBKYXZhV1NETFBhcmFtZXRlciBnZXRKYXZhV1NETFBhcmFtKCkgewotCQlyZXR1cm4gamF2YVdTRExQYXJhbV87Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiBSZXR1cm5zIHRoZSBjbGllbnRQcm9qZWN0LgotCSAqLwotCXB1YmxpYyBJUHJvamVjdCBnZXRDbGllbnRQcm9qZWN0KCkgewotCQlyZXR1cm4gcHJveHlQcm9qZWN0XzsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gY2xpZW50UHJvamVjdAotCSAqICAgICAgICAgICAgVGhlIGNsaWVudFByb2plY3QgdG8gc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHNldENsaWVudFByb2plY3QoSVByb2plY3QgY2xpZW50UHJvamVjdCkgewotCQl0aGlzLnByb3h5UHJvamVjdF8gPSBjbGllbnRQcm9qZWN0OwotCX0KLQotCS8qKgotCSAqIEByZXR1cm4gUmV0dXJucyB0aGUgY2xpZW50UHJvamVjdEVBUi4KLQkgKi8KLQlwdWJsaWMgSVByb2plY3QgZ2V0Q2xpZW50UHJvamVjdEVBUigpIHsKLQkJcmV0dXJuIGNsaWVudFByb2plY3RFQVJfOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBjbGllbnRQcm9qZWN0RUFSCi0JICogICAgICAgICAgICBUaGUgY2xpZW50UHJvamVjdEVBUiB0byBzZXQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0Q2xpZW50UHJvamVjdEVBUihJUHJvamVjdCBjbGllbnRQcm9qZWN0RUFSKSB7Ci0JCXRoaXMuY2xpZW50UHJvamVjdEVBUl8gPSBjbGllbnRQcm9qZWN0RUFSOwotCX0KLQotCS8qKgotCSAqIEByZXR1cm4gUmV0dXJucyB0aGUgdGVzdFByb3h5U2VsZWN0ZWQuCi0JICovCi0JcHVibGljIGJvb2xlYW4gZ2V0VGVzdFByb3h5U2VsZWN0ZWQoKSB7Ci0JCXJldHVybiB0ZXN0UHJveHlTZWxlY3RlZF87Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHRlc3RQcm94eVNlbGVjdGVkCi0JICogICAgICAgICAgICBUaGUgdGVzdFByb3h5U2VsZWN0ZWQgdG8gc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHNldFRlc3RQcm94eVNlbGVjdGVkKGJvb2xlYW4gdGVzdFByb3h5U2VsZWN0ZWQpIHsKLQkJdGhpcy50ZXN0UHJveHlTZWxlY3RlZF8gPSB0ZXN0UHJveHlTZWxlY3RlZDsKLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIFJldHVybnMgdGhlIHdzZGxVUkwuCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRXc2RsVVJMKCkgewotCSAgcmV0dXJuIHdzZGxVUkxfOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSB3c2RsVVJMCi0JICogICAgICAgICAgICBUaGUgd3NkbFVSTCB0byBzZXQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0V3NkbFVSTChTdHJpbmcgd3NkbFVSTCkgewotCQl0aGlzLndzZGxVUkxfID0gd3NkbFVSTDsKLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIFJldHVybnMgdGhlIGNsaWVudFNlcnZlci4KLQkgKi8KLQlwdWJsaWMgSVNlcnZlciBnZXRDbGllbnRFeGlzdGluZ1NlcnZlcigpIHsKLQkJcmV0dXJuIGNsaWVudEV4aXN0aW5nU2VydmVyXzsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gY2xpZW50U2VydmVyCi0JICogICAgICAgICAgICBUaGUgY2xpZW50U2VydmVyIHRvIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRDbGllbnRTZXJ2ZXIoU3RyaW5nIGNsaWVudFNlcnZlcikgewotCQl0aGlzLmNsaWVudFNlcnZlcl8gPSBjbGllbnRTZXJ2ZXI7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiBSZXR1cm5zIHRoZSBjbGllbnRJc0V4aXN0aW5nU2VydmVyLgotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzQ2xpZW50SXNFeGlzdGluZ1NlcnZlcigpIHsKLQkJcmV0dXJuIGNsaWVudElzRXhpc3RpbmdTZXJ2ZXJfOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBjbGllbnRJc0V4aXN0aW5nU2VydmVyCi0JICogICAgICAgICAgICBUaGUgY2xpZW50SXNFeGlzdGluZ1NlcnZlciB0byBzZXQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0Q2xpZW50SXNFeGlzdGluZ1NlcnZlcihib29sZWFuIGNsaWVudElzRXhpc3RpbmdTZXJ2ZXIpIHsKLQkJdGhpcy5jbGllbnRJc0V4aXN0aW5nU2VydmVyXyA9IGNsaWVudElzRXhpc3RpbmdTZXJ2ZXI7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gZ2V0Q3VzdG9taXplQ2xpZW50TWFwcGluZ3MoKSB7Ci0JCXJldHVybiBjdXN0b21pemVNYXBwaW5nc187Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0Q3VzdG9taXplQ2xpZW50TWFwcGluZ3MoYm9vbGVhbiB2YWx1ZSkgewotCQljdXN0b21pemVNYXBwaW5nc18gPSB2YWx1ZTsKLQl9Ci0KLQlwcml2YXRlIElTZXJ2ZXIgZ2V0U2VydmVyRnJvbVNlcnZlckxhYmVsKCkgewotCQlpZiAodHJ1ZSkKLQkJLy8gcnNrIHJldmlzaXQgaWYgKGNsaWVudElzRXhpc3RpbmdTZXJ2ZXJfKQotCQl7Ci0JCQkvLyBNYXliZSB0aGlzIHNob3VsZCBiZSBpbiBXZWJTZXJ2aWNlU2VydmVyUnVudGltZVR5cGVSZWdpc3RyeQotCQkJewotCQkJCUlTZXJ2ZXJbXSBzZXJ2ZXJzID0gU2VydmVyQ29yZS5nZXRTZXJ2ZXJzKCk7Ci0JCQkJaWYgKHNlcnZlcnMgIT0gbnVsbCAmJiBzZXJ2ZXJzLmxlbmd0aCE9MCkgewotCQkJCQlmb3IgKGludCBpID0gMDsgaSA8IHNlcnZlcnMubGVuZ3RoOyBpKyspIHsKLQkJCQkJCUlTZXJ2ZXIgc2VydmVyID0gKElTZXJ2ZXIpIHNlcnZlcnNbaV07Ci0JCQkJCQlpZiAoKHNlcnZlci5nZXROYW1lKCkpLmVxdWFscyhjbGllbnRTZXJ2ZXJfKSkKLQkJCQkJCQlyZXR1cm4gc2VydmVyOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJLy8KLQkJfSBlbHNlIHsKLQkJCS8vVE9ETyBjcmVhdGUgdGhlIHNlcnZlcgotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQkvKioKLQkgKiBAcmV0dXJuIFJldHVybnMgdGhlIHByb3h5UHJvamVjdEZvbGRlci4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFByb3h5UHJvamVjdEZvbGRlcigpIHsKLQkJaWYgKHByb3h5UHJvamVjdF8hPW51bGwpIHsKLQkJCXByb3h5UHJvamVjdEZvbGRlcl8gPSBSZXNvdXJjZVV0aWxzLmdldEphdmFTb3VyY2VMb2NhdGlvbihwcm94eVByb2plY3RfICkudG9TdHJpbmcoKTsKLQkJfQkJCi0JCXJldHVybiBwcm94eVByb2plY3RGb2xkZXJfOyAgCi0JfQotCi0JLyoqCi0JICogQHJldHVybiBSZXR1cm5zIHRoZSB3ZWJTZXJ2aWNlc1BhcnNlci4KLQkgKi8KLQlwdWJsaWMgV2ViU2VydmljZXNQYXJzZXIgZ2V0V2ViU2VydmljZXNQYXJzZXIoKSB7Ci0JCXJldHVybiB3ZWJTZXJ2aWNlc1BhcnNlcl87Ci0JfQotCS8qKgotCSAqIEBwYXJhbSB3ZWJTZXJ2aWNlc1BhcnNlciBUaGUgd2ViU2VydmljZXNQYXJzZXIgdG8gc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VzUGFyc2VyKFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyKSB7Ci0JCXRoaXMud2ViU2VydmljZXNQYXJzZXJfID0gd2ViU2VydmljZXNQYXJzZXI7Ci0JfQotCS8qKgotCSAqIEByZXR1cm4gUmV0dXJucyB0aGUgZ2VuZXJhdGVQcm94eS4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBnZXRHZW5lcmF0ZVByb3h5KCkgewotCQlyZXR1cm4gZ2VuZXJhdGVQcm94eV87Ci0JfQotCS8qKgotCSAqIEBwYXJhbSBnZW5lcmF0ZVByb3h5IFRoZSBnZW5lcmF0ZVByb3h5IHRvIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRHZW5lcmF0ZVByb3h5KGJvb2xlYW4gZ2VuZXJhdGVQcm94eSkgewotCQl0aGlzLmdlbmVyYXRlUHJveHlfID0gZ2VuZXJhdGVQcm94eTsKLQl9Ci0JCi0gICAgLyoqCi0gICAgICogQHJldHVybiBSZXR1cm5zIHRoZSBpc0NsaWVudFNjZW5hcmlvXy4KLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBnZXRJc0NsaWVudFNjZW5hcmlvKCkKLSAgICB7Ci0gICAgICByZXR1cm4gaXNDbGllbnRTY2VuYXJpb187Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIEBwYXJhbSBpc0NsaWVudFNjZW5hcmlvXyBUaGUgaXNDbGllbnRTY2VuYXJpb18gdG8gc2V0LgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldElzQ2xpZW50U2NlbmFyaW8oYm9vbGVhbiBpc0NsaWVudFNjZW5hcmlvKQotICAgIHsKLSAgICAgIGlzQ2xpZW50U2NlbmFyaW9fID0gaXNDbGllbnRTY2VuYXJpbzsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHNldEVuZHBvaW50TWV0aG9kIFRoZSBzZXRFbmRwb2ludE1ldGhvZCB0byBzZXQuCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZyBnZXRTZXRFbmRwb2ludE1ldGhvZCgpCi0gICAgewotICAgICAgcmV0dXJuICJzZXRFbmRwb2ludCI7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvY29tbWFuZC9BeGlzQ2xpZW50SW5wdXRDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS9jb21tYW5kL0F4aXNDbGllbnRJbnB1dENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2M5ZWRmMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS9jb21tYW5kL0F4aXNDbGllbnRJbnB1dENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkuY29tbWFuZDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlc1BhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JV2ViU2VydmljZUNsaWVudDsKLQotCi1wdWJsaWMgY2xhc3MgQXhpc0NsaWVudElucHV0Q29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIHsKLQkKLQlwcml2YXRlIElXZWJTZXJ2aWNlQ2xpZW50IHdzY187Ci0KLQkJcHJpdmF0ZSBTdHJpbmcgY2xpZW50UHJvamVjdF8gPSBudWxsOwotCQlwcml2YXRlIFN0cmluZyB3c2RsVVJMXzsKLQkJcHJpdmF0ZSBTdHJpbmcgY2xpZW50U2VydmVyXzsKLQkJcHJpdmF0ZSBXZWJTZXJ2aWNlc1BhcnNlciB3ZWJTZXJ2aWNlc1BhcnNlcl87Ci0JICAKLQkJLyoqCi0JCSogRGVmYXVsdCBDVE9SCi0JCSovCi0JCXB1YmxpYyBBeGlzQ2xpZW50SW5wdXRDb21tYW5kKCkgewotCQl9Ci0JCQotCQlwdWJsaWMgQXhpc0NsaWVudElucHV0Q29tbWFuZChJV2ViU2VydmljZUNsaWVudCB3c2MsIElDb250ZXh0IGNvbnRleHQsIFN0cmluZyBwcm9qZWN0KSB7Ci0JCQl3c2NfID0gd3NjOwotCQkJY2xpZW50UHJvamVjdF8gPSBwcm9qZWN0OyAKLQkJfQotCQkKLQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkgCi0JewkgICAgCi0JCXdzZGxVUkxfID0gd3NjXy5nZXRXZWJTZXJ2aWNlQ2xpZW50SW5mbygpLmdldFdzZGxVUkwoKTsKLQkJY2xpZW50U2VydmVyXyA9IHdzY18uZ2V0V2ViU2VydmljZUNsaWVudEluZm8oKS5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCk7Ci0JCQotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQkgIH0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0Q2xpZW50U2VydmVyKCkgewotCQlyZXR1cm4gY2xpZW50U2VydmVyXzsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldENsaWVudFByb2plY3QoKSB7Ci0JCXJldHVybiBjbGllbnRQcm9qZWN0XzsKLQl9Ci0KLQlwdWJsaWMgV2ViU2VydmljZXNQYXJzZXIgZ2V0V2ViU2VydmljZXNQYXJzZXIoKSB7Ci0JCXJldHVybiB3ZWJTZXJ2aWNlc1BhcnNlcl87Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRXc2RsVVJMKCkgewotCQlyZXR1cm4gd3NkbFVSTF87Ci0JfQotCSAgCi0JCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvY29tbWFuZC9BeGlzQ2xpZW50T3V0cHV0Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvY29tbWFuZC9BeGlzQ2xpZW50T3V0cHV0Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjcyOWZjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvQXhpc0NsaWVudE91dHB1dENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDcyOCAgIDE0NTQyNiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQ7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JV2ViU2VydmljZUNsaWVudDsKLQotCi1wdWJsaWMgY2xhc3MgQXhpc0NsaWVudE91dHB1dENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiB7Ci0JCi0JcHJpdmF0ZSBJV2ViU2VydmljZUNsaWVudCB3c2NfOwotCXByaXZhdGUgU3RyaW5nIHByb3h5QmVhbl87Ci0JcHJpdmF0ZSBTdHJpbmcgcHJveHlFbmRwb2ludF87Ci0JICAKLQkJLyoqCi0JCSogRGVmYXVsdCBDVE9SCi0JCSovCi0JCXB1YmxpYyBBeGlzQ2xpZW50T3V0cHV0Q29tbWFuZCgpIHsKLQkJfQotCQkKLQkJcHVibGljIEF4aXNDbGllbnRPdXRwdXRDb21tYW5kKElXZWJTZXJ2aWNlQ2xpZW50IHdzYywgSUNvbnRleHQgY29udGV4dCkgewotCQkJd3NjXyA9IHdzYzsKLQkJfQotCQkKLQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkgCi0JewkKLQkJd3NjXy5nZXRXZWJTZXJ2aWNlQ2xpZW50SW5mbygpLnNldEltcGxVUkwocHJveHlCZWFuXyk7Ci0JCXdzY18uZ2V0V2ViU2VydmljZUNsaWVudEluZm8oKS5zZXRQcm94eUVuZHBvaW50KHByb3h5RW5kcG9pbnRfKTsKLQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JICB9Ci0KLQlwdWJsaWMgdm9pZCBzZXRQcm94eUJlYW4oU3RyaW5nIHByb3h5QmVhbikgewotCQl0aGlzLnByb3h5QmVhbl8gPSBwcm94eUJlYW47Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0UHJveHlFbmRwb2ludChTdHJpbmcgcHJveHlFbmRwb2ludCkgewotCQl0aGlzLnByb3h5RW5kcG9pbnRfID0gcHJveHlFbmRwb2ludDsKLQl9Ci0JICAKLQkJCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS9jb21tYW5kL0NvcHlDbGllbnRXU0RMQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvY29tbWFuZC9Db3B5Q2xpZW50V1NETENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2E5Mjc3Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS9jb21tYW5kL0NvcHlDbGllbnRXU0RMQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDgxNSAgIDE4ODk5OSBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkuY29tbWFuZDsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuSW1wb3J0OwotaW1wb3J0IGphdmF4LndzZGwueG1sLldTRExXcml0ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlUm9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS5BeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5wbHVnaW4uV2ViU2VydmljZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb21tb24uRmlsZVJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkJhc2VFY2xpcHNlRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci0KLQotLyoqCi0gKgotICovCi1wdWJsaWMgY2xhc3MgQ29weUNsaWVudFdTRExDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLSAgCi0gIHByaXZhdGUgU3RyaW5nIHdzZGxVUkxfOwotICBwcml2YXRlIFN0cmluZyBjbGllbnRXU0RMUGF0aE5hbWVfOwotICBwcml2YXRlIFdlYlNlcnZpY2VzUGFyc2VyIHdzUGFyc2VyXzsKLSAgCi0gIHB1YmxpYyBDb3B5Q2xpZW50V1NETENvbW1hbmQoKQotICB7Ci0gICAKLSAgfQotICAKLQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkgCi0JewotCQlJRW52aXJvbm1lbnQgZW52ID0gZ2V0RW52aXJvbm1lbnQoKTsKLSAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgRGVmaW5pdGlvbiBkZWYgPSB3c1BhcnNlcl8uZ2V0V1NETERlZmluaXRpb24od3NkbFVSTF8pOwotICAgIGlmKGRlZj09bnVsbCkKLSAgICB7Ci0gICAgICBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggTkxTLmJpbmQoQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfV1NETF9OT19ERUZJTklUSU9OLCBuZXcgU3RyaW5nW117d3NkbFVSTF99KSk7Ci0gICAgICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0KLSAgICBJUGF0aCBjbGllbnRXU0RMUGF0aCA9IG5ldyBQYXRoKGNsaWVudFdTRExQYXRoTmFtZV8pOwotICAgIElXb3Jrc3BhY2VSb290IHdvcmtzcGFjZVJvb3QgPSBGaWxlUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2VSb290KCk7Ci0gICAgc3RhdHVzID0gcmVzb2x2ZVdTREwod29ya3NwYWNlUm9vdCwgZGVmLCBjbGllbnRXU0RMUGF0aCwgZW52LCBtb25pdG9yKTsKLSAgICByZXR1cm4gc3RhdHVzOwotICB9Ci0KLQlwcml2YXRlIElTdGF0dXMgcmVzb2x2ZVdTREwoCi0JCUlXb3Jrc3BhY2VSb290IHdvcmtzcGFjZSwKLQkJRGVmaW5pdGlvbiB3c2RsRGVmLAotCQlJUGF0aCB3c2RsUGF0aCwKLQkJSUVudmlyb25tZW50IGVudiwgCi0JCUlQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgewotCQl0cnkgewotCQkJd3JpdGVXU0RMRmlsZSh3b3Jrc3BhY2UsIHdzZGxEZWYsIHdzZGxQYXRoLCBlbnYsIG1vbml0b3IpOwotCQkJTWFwIGltcG9ydERlZnMgPSB3c2RsRGVmLmdldEltcG9ydHMoKTsKLQkJCVNldCBrZXlzU2V0ID0gaW1wb3J0RGVmcy5rZXlTZXQoKTsKLQkJCWZvciAoSXRlcmF0b3IgZSA9IGtleXNTZXQuaXRlcmF0b3IoKTsgZS5oYXNOZXh0KCk7KSB7Ci0JCQkJT2JqZWN0IGtleU5hbWUgPSBlLm5leHQoKTsKLQkJCQlWZWN0b3IgdmVjdG9yID0gKFZlY3RvcikgaW1wb3J0RGVmcy5nZXQoa2V5TmFtZSk7Ci0JCQkJZm9yIChpbnQgaSA9IDA7IGkgPCB2ZWN0b3Iuc2l6ZSgpOyBpKyspIHsKLQkJCQkJSW1wb3J0IGltcG9ydERlZiA9IChJbXBvcnQpIHZlY3Rvci5nZXQoaSk7Ci0JCQkJCURlZmluaXRpb24gZGVmID0gaW1wb3J0RGVmLmdldERlZmluaXRpb24oKTsKLQkJCQkJU3RyaW5nIG5ld1BhdGhTdHJpbmcgPQotCQkJCQkJd3NkbFBhdGgudG9TdHJpbmcoKS5zdWJzdHJpbmcoCi0JCQkJCQkJMCwKLQkJCQkJCQl3c2RsUGF0aC50b1N0cmluZygpLmxhc3RJbmRleE9mKCIvIikgKyAxKTsJIC8vJE5PTi1OTFMtMSQKLQkJCQkJaWYgKGlzSW52YWxpZEltcG9ydFdTREwoaW1wb3J0RGVmLmdldExvY2F0aW9uVVJJKCkpKSB7Ci0JCQkJCSAgICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIE5MUy5iaW5kKEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX0lNUE9SVF9XU0RMLG5ldyBTdHJpbmdbXXtpbXBvcnREZWYuZ2V0TG9jYXRpb25VUkkoKX0pKTsKLQkJCQkJfQotCQkJCQlJUGF0aCBuZXdQYXRoID0KLQkJCQkJCW5ldyBQYXRoKG5ld1BhdGhTdHJpbmcgKyBpbXBvcnREZWYuZ2V0TG9jYXRpb25VUkkoKSk7Ci0JCQkJCUlTdGF0dXMgc3RhdHVzID0gcmVzb2x2ZVdTREwod29ya3NwYWNlLCBkZWYsIG5ld1BhdGgsIGVudiwgbW9uaXRvcik7Ci0JCQkJCWlmIChzdGF0dXMgIT0gbnVsbAotCQkJCQkJJiYgc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKSB7Ci0JCQkJCQlyZXR1cm4gc3RhdHVzOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkgICAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBOTFMuYmluZChBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9XUklURV9XU0RMLG5ldyBTdHJpbmdbXSB7IHdzZGxQYXRoLnRvU3RyaW5nKCkgfSksIGUpOwotCQl9Ci0JCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBpc0ludmFsaWRJbXBvcnRXU0RMKFN0cmluZyB3c2RsUGF0aCkgewotCi0JCS8vIHJlbGF0aXZlIHVybAotCQlpZiAoIXdzZGxQYXRoLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgiaHR0cDovLyIpKSB7IC8vJE5PTi1OTFMtMSQKLQotCQkJaWYgKHdzZGxQYXRoLmluZGV4T2YoIi8iKSAhPSAtMSkgeyAvLyROT04tTkxTLTEkCi0JCQkJaWYgKCF3c2RsUGF0aC5zdGFydHNXaXRoKCIuLyIpKSB7IC8vJE5PTi1OTFMtMSQKLQkJCQkJcmV0dXJuIHRydWU7Ci0JCQkJfQotCQkJfQotCi0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXByaXZhdGUgdm9pZCB3cml0ZVdTRExGaWxlKAotCQlJV29ya3NwYWNlUm9vdCB3b3Jrc3BhY2UsCi0JCURlZmluaXRpb24gd3NkbERlZiwKLQkJSVBhdGggd3NkbFBhdGgsCi0JCUlFbnZpcm9ubWVudCBlbnYsIAotCQlJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpCi0JCXRocm93cyBFeGNlcHRpb24gewotCi0JCUJ5dGVBcnJheU91dHB1dFN0cmVhbSBiYW9zID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwotCQkvL1dTRExGYWN0b3J5IHdzZGxGYWN0b3J5ID0gV1NETEZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLQkJLy9XU0RMV3JpdGVyIHdzZGxXcml0ZXIgPSB3c2RsRmFjdG9yeS5uZXdXU0RMV3JpdGVyKCk7Ci0JCVdTRExXcml0ZXIgd3NkbFdyaXRlciA9IChuZXcgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC53c2RsNGouV1NETEZhY3RvcnlJbXBsKCkpLm5ld1dTRExXcml0ZXIoKTsKLQkJd3NkbFdyaXRlci53cml0ZVdTREwod3NkbERlZiwgYmFvcyk7Ci0JCWJ5dGVbXSBiID0gYmFvcy50b0J5dGVBcnJheSgpOwotCQlCeXRlQXJyYXlJbnB1dFN0cmVhbSBiYWlzID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGIpOwotCi0gICAgUmVzb3VyY2VDb250ZXh0IGNvbnRleHQgPSAoKEJhc2VFY2xpcHNlRW52aXJvbm1lbnQpZW52KS5nZXRSZXNvdXJjZUNvbnRleHQoKTsgICAgCi0gICAgCi0JCUZpbGVSZXNvdXJjZVV0aWxzLmNyZWF0ZUZpbGUoCi0JCQljb250ZXh0LAotCQkJd3NkbFBhdGgubWFrZUFic29sdXRlKCksCi0JCQliYWlzLAotCQkJbW9uaXRvciwKLQkJCWVudi5nZXRTdGF0dXNIYW5kbGVyKCkpOwotCi0JCWJhb3MuY2xvc2UoKTsKLQkJYmFpcy5jbG9zZSgpOwotCi0JfSAgCi0gIAotICAvKioKLSAgICogQHBhcmFtIGNsaWVudFdTRExQYXRoTmFtZV8gVGhlIGNsaWVudFdTRExQYXRoTmFtZV8gdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50V1NETFBhdGhOYW1lKFN0cmluZyBjbGllbnRXU0RMUGF0aE5hbWUpCi0gIHsKLSAgICB0aGlzLmNsaWVudFdTRExQYXRoTmFtZV8gPSBjbGllbnRXU0RMUGF0aE5hbWU7Ci0gIH0KLSAgLyoqCi0gICAqIEBwYXJhbSB3c2RsVVJMXyBUaGUgd3NkbFVSTF8gdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0V3NkbFVSTChTdHJpbmcgd3NkbFVSTCkKLSAgewotICAgIHRoaXMud3NkbFVSTF8gPSB3c2RsVVJMOwotICB9Ci0gIC8qKgotICAgKiBAcGFyYW0gd3NQYXJzZXJfIFRoZSB3c1BhcnNlcl8gdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0V3NQYXJzZXIoV2ViU2VydmljZXNQYXJzZXIgd3NQYXJzZXIpCi0gIHsKLSAgICB0aGlzLndzUGFyc2VyXyA9IHdzUGFyc2VyOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS9jb21tYW5kL0RlZmF1bHRzRm9yQ2xpZW50SmF2YVdTRExDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS9jb21tYW5kL0RlZmF1bHRzRm9yQ2xpZW50SmF2YVdTRExDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxYzVlYzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvY29tbWFuZC9EZWZhdWx0c0ZvckNsaWVudEphdmFXU0RMQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTgzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIxNiAgIDExNTE0NCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA2MDUwMyAgIDEyNjgxOSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS5jb21tYW5kOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5BeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkuQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS51dGlsLlBsYXRmb3JtVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUuTW9kdWxlQ29yZU5hdHVyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi1wdWJsaWMgY2xhc3MgRGVmYXVsdHNGb3JDbGllbnRKYXZhV1NETENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotCXByaXZhdGUgSmF2YVdTRExQYXJhbWV0ZXIJamF2YVdTRExQYXJhbV87Ci0JcHJpdmF0ZSBJUHJvamVjdAkJCQkJcHJveHlQcm9qZWN0XzsKLQlwcml2YXRlIFN0cmluZwkJCQkJCVdTRExTZXJ2aWNlVVJMXzsKLQlwcml2YXRlIFN0cmluZwkJCQkJCVdTRExTZXJ2aWNlUGF0aG5hbWVfOwotCXByaXZhdGUgU3RyaW5nCQkJCQkJb3V0cHV0Rm9sZGVyXzsKLQotCXB1YmxpYyBEZWZhdWx0c0ZvckNsaWVudEphdmFXU0RMQ29tbWFuZCgpCi0JewotCX0KLQotCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSkKLQl7Ci0JCUlFbnZpcm9ubWVudCBlbnZpcm9ubWVudCA9IGdldEVudmlyb25tZW50KCk7Ci0JCUlTdGF0dXMgc3RhdHVzOwotCQkKLQkJaWYoIG91dHB1dEZvbGRlcl8gPT0gbnVsbCApCi0JCXsKLQkJCUlQYXRoW10gcGF0aHMgPSBSZXNvdXJjZVV0aWxzLmdldEFsbEphdmFTb3VyY2VMb2NhdGlvbnMocHJveHlQcm9qZWN0Xyk7Ci0JCQlvdXRwdXRGb2xkZXJfID0gcGF0aHNbMF0udG9TdHJpbmcoKTsKLQkJfQotCQkKLQkJaWYgKGphdmFXU0RMUGFyYW1fID09IG51bGwpCi0JCXsKLQkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzCi0JCQkJCS5lcnJvclN0YXR1cyhBeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMuTVNHX0VSUk9SX0pBVkFfV1NETF9QQVJBTV9OT1RfU0VUKTsKLQkJCWVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkJcmV0dXJuIHN0YXR1czsKLQkJfQotCQlqYXZhV1NETFBhcmFtXy5zZXRNZXRhSW5mT25seShmYWxzZSk7Ci0JCWphdmFXU0RMUGFyYW1fLnNldFNlcnZlclNpZGUoSmF2YVdTRExQYXJhbWV0ZXIuU0VSVkVSX1NJREVfTk9ORSk7Ci0JCU1vZHVsZUNvcmVOYXR1cmUgbW4gPSBNb2R1bGVDb3JlTmF0dXJlLmdldE1vZHVsZUNvcmVOYXR1cmUocHJveHlQcm9qZWN0Xyk7Ci0JCWlmIChtbiAhPSBudWxsKQotCQl7Ci0JCQlJUGF0aCB3ZWJNb2R1bGVTZXJ2ZXJSb290ID0gUmVzb3VyY2VVdGlscy5nZXRKYXZhU291cmNlTG9jYXRpb24ocHJveHlQcm9qZWN0Xyk7Ci0JCQkvLyBTdHJpbmcgb3V0cHV0ID0gUGxhdGZvcm1VdGlscy5nZXRQbGF0Zm9ybVVSTCh3ZWJNb2R1bGVTZXJ2ZXJSb290KTsKLQkJCVN0cmluZyBvdXRwdXQgPSBSZXNvdXJjZVV0aWxzLmZpbmRSZXNvdXJjZSh3ZWJNb2R1bGVTZXJ2ZXJSb290KS5nZXRMb2NhdGlvbigpLnRvU3RyaW5nKCk7Ci0JCQkvLyBTdHJpbmcgb3V0cHV0ID0KLQkJCS8vIFJlc291cmNlVXRpbHMuZ2V0V29ya3NwYWNlUm9vdCgpLmdldEZvbGRlcih3ZWJNb2R1bGVTZXJ2ZXJSb290KS5nZXRMb2NhdGlvbigpLnRvU3RyaW5nKCk7Ci0JCQlJUGF0aCBqYXZhT3V0cHV0ID0gUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2UoIG5ldyBQYXRoKCBvdXRwdXRGb2xkZXJfICkpLmdldExvY2F0aW9uKCk7Ci0JCQlqYXZhV1NETFBhcmFtXy5zZXRKYXZhT3V0cHV0KGphdmFPdXRwdXQudG9TdHJpbmcoKSk7Ci0JCQkKLQkJCUlGb2xkZXIgd2ViTW9kdWxlQ29udGFpbmVyID0gUmVzb3VyY2VVdGlscy5nZXRXZWJDb21wb25lbnRTZXJ2ZXJSb290KHByb3h5UHJvamVjdF8pOwotCQkJaWYgKHdlYk1vZHVsZUNvbnRhaW5lciAhPSBudWxsKQotCQkJewotCQkJCUlQYXRoIHdlYk1vZHVsZVBhdGggPSB3ZWJNb2R1bGVDb250YWluZXIuZ2V0RnVsbFBhdGgoKTsKLQkJCQkvLyBvdXRwdXQgPSBQbGF0Zm9ybVV0aWxzLmdldFBsYXRmb3JtVVJMKHdlYk1vZHVsZVBhdGgpOwotCQkJCUlSZXNvdXJjZSByZXMgPSBSZXNvdXJjZVV0aWxzLmZpbmRSZXNvdXJjZSh3ZWJNb2R1bGVQYXRoKTsKLQkJCQlpZiAocmVzICE9IG51bGwpCi0JCQkJewotCQkJCQlvdXRwdXQgPSByZXMuZ2V0TG9jYXRpb24oKS50b1N0cmluZygpOwotCQkJCX0KLQkJCQlqYXZhV1NETFBhcmFtXy5zZXRPdXRwdXQob3V0cHV0KTsKLQkJCX0KLQkJfQotCQllbHNlCi0JCXsKLQkJCS8vIENoZWNrIGlmIGl0J3MgYSBwbGFpbiBvbGQgSmF2YSBwcm9qZWN0Ci0JCQlpZiAoUmVzb3VyY2VVdGlscy5pc0phdmFQcm9qZWN0KHByb3h5UHJvamVjdF8pKQotCQkJewotCQkJCUlQYXRoIG91dHB1dCA9IFJlc291cmNlVXRpbHMuZmluZFJlc291cmNlKCBuZXcgUGF0aCggb3V0cHV0Rm9sZGVyXyApKS5nZXRMb2NhdGlvbigpOwotCQkJCWphdmFXU0RMUGFyYW1fLnNldEphdmFPdXRwdXQob3V0cHV0LnRvU3RyaW5nKCkpOwotCQkJCWphdmFXU0RMUGFyYW1fLnNldE91dHB1dChvdXRwdXQudG9TdHJpbmcoKSk7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJLy8gTm90IGZhbWlsaWFyIHdpdGggdGhpcyBraW5kIG9mIHByb2plY3QKLQkJCQlzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19XQVJOX05PX0pBVkFfTkFUVVJFKTsKLQkJCQllbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJCQlyZXR1cm4gc3RhdHVzOwotCQkJfQotCQl9Ci0JCWlmIChXU0RMU2VydmljZVBhdGhuYW1lXyA9PSBudWxsKQotCQl7Ci0JCQlpZiAoV1NETFNlcnZpY2VVUkxfID09IG51bGwpCi0JCQl7Ci0JCQkJc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfV1NETF9MT0NBVElPTl9OT1RfU0VUKTsKLQkJCQllbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJCQlyZXR1cm4gc3RhdHVzOwotCQkJfQotCQl9Ci0JCWVsc2UKLQkJewotCQkJV1NETFNlcnZpY2VVUkxfID0gUGxhdGZvcm1VdGlscy5nZXRGaWxlRnJvbVBsYXRmb3JtKFdTRExTZXJ2aWNlUGF0aG5hbWVfKTsKLQkJfQotCQlqYXZhV1NETFBhcmFtXy5zZXRJbnB1dFdzZGxMb2NhdGlvbihXU0RMU2VydmljZVVSTF8pOwotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBqYXZhV1NETFBhcmFtLgotCSAqIAotCSAqIEByZXR1cm4gSmF2YVdTRExQYXJhbWV0ZXIKLQkgKi8KLQlwdWJsaWMgSmF2YVdTRExQYXJhbWV0ZXIgZ2V0SmF2YVdTRExQYXJhbSgpCi0JewotCQlyZXR1cm4gamF2YVdTRExQYXJhbV87Ci0JfQotCi0JLyoqCi0JICogU2V0cyB0aGUgamF2YVdTRExQYXJhbS4KLQkgKiAKLQkgKiBAcGFyYW0gamF2YVdTRExQYXJhbQotCSAqICAgICAgICAgIFRoZSBqYXZhV1NETFBhcmFtIHRvIHNldAotCSAqLwotCXB1YmxpYyB2b2lkIHNldEphdmFXU0RMUGFyYW0oSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbSkKLQl7Ci0JCXRoaXMuamF2YVdTRExQYXJhbV8gPSBqYXZhV1NETFBhcmFtOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBwcm94eVByb2plY3RfCi0JICogICAgICAgICAgVGhlIHByb3h5UHJvamVjdF8gdG8gc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHNldFByb3h5UHJvamVjdChJUHJvamVjdCBwcm94eVByb2plY3QpCi0JewotCQl0aGlzLnByb3h5UHJvamVjdF8gPSBwcm94eVByb2plY3Q7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHNlcnZpY2VVUkxfCi0JICogICAgICAgICAgVGhlIHdTRExTZXJ2aWNlVVJMXyB0byBzZXQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0V1NETFNlcnZpY2VVUkwoU3RyaW5nIHNlcnZpY2VVUkwpCi0JewotCQlXU0RMU2VydmljZVVSTF8gPSBzZXJ2aWNlVVJMOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBzZXJ2aWNlUGF0aG5hbWVfCi0JICogICAgICAgICAgVGhlIHdTRExTZXJ2aWNlUGF0aG5hbWVfIHRvIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRXU0RMU2VydmljZVBhdGhuYW1lKFN0cmluZyBzZXJ2aWNlUGF0aG5hbWUpCi0JewotCQlXU0RMU2VydmljZVBhdGhuYW1lXyA9IHNlcnZpY2VQYXRobmFtZTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE91dHB1dEZvbGRlcigpCi0JewotCSAgcmV0dXJuIG91dHB1dEZvbGRlcl87CQotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRPdXRwdXRGb2xkZXIoU3RyaW5nIG91dHB1dEZvbGRlcikKLQl7Ci0JCW91dHB1dEZvbGRlcl8gPSBvdXRwdXRGb2xkZXI7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvcGx1Z2luL1dlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25VSVBsdWdpbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvcGx1Z2luL1dlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25VSVBsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzMwYmRkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3BsdWdpbi9XZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uVUlQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS5wbHVnaW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuRW52aXJvbm1lbnRTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUxvZzsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotCi0vKioKLSogVGhpcyBpcyB0aGUgcGx1Z2luIGNsYXNzIGZvciB0aGUgV2ViIFNlcnZpY2VzIHBsdWdpbi4KLSogPHA+Ci0qIFRoaXMgcGx1Z2luIGNvbnRhaW5zIHRoZSBncmFwaGljIHVzZXIgaW50ZXJmYWNlIHRvIHRoZQotKiBXZWIgU2VydmljZXMgcnVudGltZSBmb3VuZCBpbiBvcmcuZWNsaXBzZS5qc3Qud3MuCi0qLwotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25VSVBsdWdpbiBleHRlbmRzIFBsdWdpbgotewotCi0JLyoqCi0JKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgZGVzY3JpcHRvciBvZiB0aGlzIHBsdWdpbiBpbiBwbHVnaW4ueG1sLgotCSovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSUQgPQotCQkib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkiOwotCi0JLyoqCi0JKiBUaGUgcmVmZXJlbmNlIHRvIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBwbHVnaW4uCi0JKi8KLQlwcml2YXRlIHN0YXRpYyBXZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uVUlQbHVnaW4gaW5zdGFuY2VfOwotCXByaXZhdGUgSUxvZyBsb2dfOwotCi0JLyoqCi0JKiBDb25zdHJ1Y3RzIGEgcnVudGltZSBwbHVnaW4gb2JqZWN0IGZvciB0aGlzIHBsdWdpbi4KLQkqIFRoZSAicGx1Z2luIiBlbGVtZW50IGluIHBsdWdpbi54bWwgc2hvdWxkIGluY2x1ZGUgdGhlIGF0dHJpYnV0ZQotCSogY2xhc3MgPSAib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLnBsdWdpbi5XZWJTZXJ2aWNlUGx1Z2luIi4KLQkqIEBwYXJhbSBkZXNjcmlwdG9yIFRoZSBkZXNjcmlwdG9yIG9mIHRoaXMgcGx1Z2luLgotCSovCi0JcHVibGljIFdlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25VSVBsdWdpbigpIHsKLQkJc3VwZXIoKTsKLQkJaWYgKGluc3RhbmNlXyA9PSBudWxsKSB7Ci0JCQlpbnN0YW5jZV8gPSB0aGlzOwotCQl9Ci0JCWxvZ18gPSBFbnZpcm9ubWVudFNlcnZpY2UuZ2V0RWNsaXBzZUxvZygpOwotCi0JfQotCi0gIC8vIFRoaXMgbWV0aG9kIGlzIG5lZWRlZCB0byBrZWVwIHRoZSBsb2dnaW5nIGZyb20gYmxvd2luZyB1cC4KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICByZXR1cm4gSUQ7ICAKLSAgfQotICAKLQkvKioKLQkqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGlzIHBsdWdpbi4gRXF1aXZhbGVudCB0byBjYWxsaW5nCi0JKiAoV2ViU2VydmljZVdhc0NvbnN1bXB0aW9uUGx1Z2luKVBsYXRmb3JtLmdldFBsdWdpbigib3JnLmVjbGlwc2UuanN0LndzLndhcy52NS50cCIpOwotCSogQHJldHVybiBUaGUgV2ViU2VydmljZVdhc0NvbnN1bXB0aW9uUGx1Z2luIHNpbmdsZXRvbi4KLQkqLwotCXN0YXRpYyBwdWJsaWMgV2ViU2VydmljZUF4aXNDb25zdW1wdGlvblVJUGx1Z2luIGdldEluc3RhbmNlKCkgewotCQlyZXR1cm4gaW5zdGFuY2VfOwotCX0KLQotCS8qKgotCSogQ2FsbGVkIG9uY2UgYnkgdGhlIHBsYXRmb3JtIHdoZW4gdGhpcyBwbHVnaW4gaXMgZmlyc3QgbG9hZGVkLgotCSogQHRocm93cyBDb3JlRXhjZXB0aW9uIElmIHRoaXMgcGx1Z2luIGZhaWxzIHRvIHN0YXJ0LgotCSovCi0JcHVibGljIHZvaWQgc3RhcnQoIEJ1bmRsZUNvbnRleHQgYnVuZGxlICkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlsb2dfLmxvZyhJTG9nLklORk8sIDUwNjYsIHRoaXMsICJzdGFydCIsICJTdGFydGluZyBwbHVnaW4gb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkiKTsKLSAgICAKLSAgICB0cnkKLSAgICB7Ci0JCSAgc3VwZXIuc3RhcnQoIGJ1bmRsZSApOwotICAgIH0KLSAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgewotICAgICAgbG9nXy5sb2coIElMb2cuRVJST1IsIDUwNjYsIHRoaXMsICJzdGFydCIsIGV4YyApOwotICAgIH0KLQl9Ci0KLQkvKioKLQkqIENhbGxlZCBvbmNlIGJ5IHRoZSBwbGF0Zm9ybSB3aGVuIHRoaXMgcGx1Z2luIGlzIHVubG9hZGVkLgotCSogQHRocm93cyBDb3JlRXhjZXB0aW9uIElmIHRoaXMgcGx1Z2luIGZhaWxzIHRvIHNodXRkb3duLgotCSovCi0JcHVibGljIHZvaWQgc3RvcCggQnVuZGxlQ29udGV4dCBjb250ZXh0ICkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlsb2dfLmxvZyhJTG9nLklORk8sIDUwNjcsIHRoaXMsICJzaHV0ZG93biIsICJTaHV0dGluZyBwbHVnaW4gb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkiKTsKLSAgICAKLSAgICB0cnkKLSAgICB7Ci0JCSAgc3VwZXIuc3RvcCggY29udGV4dCApOwotICAgIH0KLSAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgewotICAgICAgbG9nXy5sb2coIElMb2cuRVJST1IsIDUwNjYsIHRoaXMsICJzdG9wIiwgZXhjICk7ICAgICAgCi0gICAgfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3ByZWZlcmVuY2VzL0F4aXNFbWl0dGVyUHJlZmVyZW5jZVBhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3ByZWZlcmVuY2VzL0F4aXNFbWl0dGVyUHJlZmVyZW5jZVBhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJjNGUxNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS9wcmVmZXJlbmNlcy9BeGlzRW1pdHRlclByZWZlcmVuY2VQYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkICAgYnVnICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMzI5ICAgMTI3MDE2IGFuZHl6aGFpQGNhLmlibS5jb20gLSBBbmR5IFpoYWkgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkucHJlZmVyZW5jZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklNZXNzYWdlUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5QcmVmZXJlbmNlUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbnRleHQuQXhpc0VtaXR0ZXJDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29udGV4dC5BeGlzRW1pdHRlckRlZmF1bHRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUucGx1Z2luLldlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25Db3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLkF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkucGx1Z2luLldlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25VSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuY29tbW9uLlVJVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkdyb3VwOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5oZWxwLklXb3JrYmVuY2hIZWxwU3lzdGVtOwotCi0KLQotcHVibGljIGNsYXNzIEF4aXNFbWl0dGVyUHJlZmVyZW5jZVBhZ2UgZXh0ZW5kcyBQcmVmZXJlbmNlUGFnZSBpbXBsZW1lbnRzIElXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZQotewotICAvKkNPTlRFWFRfSUQgUFBBRTAwMDEgZm9yIHRoZSBBeGlzIEVtaXR0ZXIgUHJlZmVyZW5jZSBQYWdlKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QUEFFX1BBR0UgPSBXZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uVUlQbHVnaW4uSUQgKyAiLlBQQUUwMDAxIjsKLSAgLy8KLSAgcHJpdmF0ZSBCdXR0b24gYWxsV2FudGVkOwotICAvKkNPTlRFWFRfSUQgUFBBRTAwMDIgZm9yIHRoZSBhbGwgd2FudGVkIGNoZWNrIGJveCBvbiB0aGUgQXhpcyBFbWl0dGVyIFByZWZlcmVuY2UgUGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFBBRV9DSEVDS0JPWF9BTExfV0FOVEVEID0gV2ViU2VydmljZUF4aXNDb25zdW1wdGlvblVJUGx1Z2luLklEICsgIi5QUEFFMDAwMiI7Ci0gIC8vCi0gIHByaXZhdGUgQnV0dG9uIGhlbHBlcldhbnRlZDsKLSAgLypDT05URVhUX0lEIFBQQUUwMDAzIGZvciBoZWxwZXIgd2FudGVkIGNoZWNrIGJveCBvbiB0aGUgQXhpcyBFbWl0dGVyIFByZWZlcmVuY2UgUGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFBBRV9DSEVDS0JPWF9IRUxQRVJfV0FOVEVEID0gV2ViU2VydmljZUF4aXNDb25zdW1wdGlvblVJUGx1Z2luLklEICsgIi5QUEFFMDAwMyI7Ci0gIC8vCi0gIHByaXZhdGUgQnV0dG9uIHdyYXBBcnJheXM7Ci0gIC8qQ09OVEVYVF9JRCBQUEFFMDAwNCBmb3IgdGhlIHdyYXAgYXJyYXlzIGNoZWNrIGJveCBvbiB0aGUgQXhpcyBFbWl0dGVyIFByZWZlcmVuY2UgUGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFBBRV9DSEVDS0JPWF9XUkFQX0FSUkFZUyA9IFdlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25VSVBsdWdpbi5JRCArICIuUFBBRTAwMDQiOwotCi0gIHByaXZhdGUgQ29tYm8gZGVwbG95U2NvcGVUeXBlczsKLSAgLy8qQ09OVEVYVF9JRCBQUEFFMDAwNSBmb3IgdGhlIGRlcGxveSBzY29wZSB0eXBlIGNvbWJvIGJveCBvbiB0aGUgQXhpcyBFbWl0dGVyIHBhZ2UqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BQQUVfQ09NQk9fREVQTE9ZX1NDT1BFID0gV2ViU2VydmljZUF4aXNDb25zdW1wdGlvblVJUGx1Z2luLklEICsgIi5QUEFFMDAwNSI7Ci0gIAotICBwcml2YXRlIFRleHQgdGltZU91dEZpZWxkOwotICBpbnQgdGltZU91dDsKLSAgU3RyaW5nIHdzZGwySmF2YVRpbWVvdXRQcm9wZXJ0eSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgiQXhpc1dzZGwySmF2YVRpbWVvdXQiKTsKLSAgCi0gIHByaXZhdGUgTGFiZWwgdGltZU91dFByb3BlcnR5TGFiZWw7Ci0gIC8qQ09OVEVYVF9JRCBQUEFFMDAwNiBmb3IgdGhlIHRpbWUgb3V0IGZpZWxkIG9uIHRoZSBBeGlzIEVtaXR0ZXIgUHJlZmVyZW5jZSBwYWdlKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QUEFFX0ZJRUxEX1RJTUVfT1VUID0gV2ViU2VydmljZUF4aXNDb25zdW1wdGlvblVJUGx1Z2luLklEICsgIi5QUEFFMDAwNiI7Ci0KLSAgcHJpdmF0ZSBCdXR0b24gdXNlSW5oZXJpdGVkTWV0aG9kczsKLSAgLypDT05URVhUX0lEIFBQQUUwMDA3IGZvciB0aGUgdXNlIGluaGVyaXRlZCBtZXRob2RzIGNoZWNrIGJveCBvbiB0aGUgQXhpcyBFbWl0dGVyIFByZWZlcmVuY2UgcGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFBBRV9DSEVDS0JPWF9VU0VfSU5IRVJJVEVEX01FVEhPRFMgPSBXZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uVUlQbHVnaW4uSUQgKyAiLlBQQUUwMDA3IjsKLQotICBwcml2YXRlIEJ1dHRvbiB2YWxpZGF0ZUFnYWluc3RKQVhSUEM7Ci0gIC8qQ09OVEVYVF9JRCBQUEFFMDAxMCBmb3IgdGhlICJ2YWxpZGF0ZSBhZ2FpbnN0IEpBWFJQQy4uLiIgY2hlY2sgYm94IG9uIHRoZSBBeGlzIEVtaXR0ZXIgUHJlZmVyZW5jZSBwYWdlKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QUEFFX0NIRUNLQk9YX1ZBTElEQVRFX0FHQUlOU1RfSkFYUlBDID0gV2ViU2VydmljZUF4aXNDb25zdW1wdGlvblVJUGx1Z2luLklEICsgIi5QUEFFMDAxMCI7Ci0gIAotICAvKkNPTlRFWFRfSUQgUFBBRTAwMDggZm9yIHRoZSB3c2RsMmphdmEgZ3JvdXAgb24gdGhlIEF4aXMgRW1pdHRlciBQcmVmZXJlbmNlIHBhZ2UqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BQQUVfR1JPVVBfV1NETDJKQVZBID0gV2ViU2VydmljZUF4aXNDb25zdW1wdGlvblVJUGx1Z2luLklEICsgIi5QUEFFMDAwOCI7Ci0gIC8qQ09OVEVYVF9JRCBQUEFFMDAwOSBmb3IgdGhlIGphdmEyd3NkbCBncm91cCBvbiB0aGUgQXhpcyBFbWl0dGVyIFByZWZlcmVuY2UgcGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFBBRV9HUk9VUF9KQVZBMldTREwgPSBXZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uVUlQbHVnaW4uSUQgKyAiLlBQQUUwMDA5IjsKLSAgCi0KLSAvKioKLSAgICogQ3JlYXRlcyBwcmVmZXJlbmNlIHBhZ2UgY29udHJvbHMgb24gZGVtYW5kLgotICAgKiAgIEBwYXJhbSBwYXJlbnQgIHRoZSBwYXJlbnQgZm9yIHRoZSBwcmVmZXJlbmNlIHBhZ2UKLSAgICovCi0gIHByb3RlY3RlZCBDb250cm9sIGNyZWF0ZUNvbnRlbnRzKENvbXBvc2l0ZSBzdXBlcnBhcmVudCkKLSAgewotCVVJVXRpbHMgdXRpbHMgPSBuZXcgVUlVdGlscyggV2ViU2VydmljZUF4aXNDb25zdW1wdGlvblVJUGx1Z2luLklEICk7Ci0gIAlJV29ya2JlbmNoSGVscFN5c3RlbSBoZWxwU3lzdGVtID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCk7Ci0gIAkKLSAgICBDb21wb3NpdGUgICBwYXJlbnQgPSBuZXcgQ29tcG9zaXRlKCBzdXBlcnBhcmVudCwgU1dULk5PTkUgKTsJCi0gICAgR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGxheW91dC5udW1Db2x1bW5zID0gMTsKLSAgICBwYXJlbnQuc2V0TGF5b3V0KCBsYXlvdXQgKTsKLSAgICBwYXJlbnQuc2V0VG9vbFRpcFRleHQoQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BQQUVfUEFHRSk7Ci0gICAgaGVscFN5c3RlbS5zZXRIZWxwKHBhcmVudCwgSU5GT1BPUF9QUEFFX1BBR0UpOwotICAgIEdyb3VwIHdzZGwySmF2YUdyb3VwID0gdXRpbHMuY3JlYXRlR3JvdXAocGFyZW50LCBBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkdST1VQX1dTREwySkFWQV9OQU1FLCBBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFBBRV9HUk9VUF9XU0RMMkpBVkEsIElORk9QT1BfUFBBRV9HUk9VUF9XU0RMMkpBVkEsIDIsIDEwLDEwKTsKLSAgICBhbGxXYW50ZWQgPSBjcmVhdGVDaGVja0JveCh3c2RsMkphdmFHcm91cCwgQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5CVVRUT05fQUxMX1dBTlRFRCxBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFBBRV9DSEVDS0JPWF9BTExfV0FOVEVELElORk9QT1BfUFBBRV9DSEVDS0JPWF9BTExfV0FOVEVEKTsKLQotICAgIGhlbHBlcldhbnRlZCAgPSBjcmVhdGVDaGVja0JveCh3c2RsMkphdmFHcm91cCwgQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5CVVRUT05fSEVMUEVSX1dBTlRFRCxBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFBBRV9DSEVDS0JPWF9IRUxQRVJfV0FOVEVELElORk9QT1BfUFBBRV9DSEVDS0JPWF9IRUxQRVJfV0FOVEVEKTsKLQotICAgIHdyYXBBcnJheXMgPSBjcmVhdGVDaGVja0JveCh3c2RsMkphdmFHcm91cCwgQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5CVVRUT05fV1JBUF9BUlJBWVMsQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BQQUVfQ0hFQ0tCT1hfV1JBUF9BUlJBWVMsSU5GT1BPUF9QUEFFX0NIRUNLQk9YX1dSQVBfQVJSQVlTKTsgICAgCi0gICAgCi0gICAgZGVwbG95U2NvcGVUeXBlcyA9IHV0aWxzLmNyZWF0ZUNvbWJvKHdzZGwySmF2YUdyb3VwLCBBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX0RFUExPWV9TQ09QRSwgQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BQQUVfQ09NQk9fREVQTE9ZX1NDT1BFLCBJTkZPUE9QX1BQQUVfQ09NQk9fREVQTE9ZX1NDT1BFLCBTV1QuU0lOR0xFIHwgU1dULkJPUkRFUiB8IFNXVC5SRUFEX09OTFkpOwotICAgIC8qIAotICAgICAqIEVuc3VyZSB0aGUgb3JkZXIgaXMgdGhlIHNhbWUgYXMgaXQgaW4gdGhlIGZpZWxkcyBmb3IgY2xhc3MKLSAgICAgKiBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbnRleHQuQXhpc0VtaXR0ZXJDb250ZXh0Ci0gICAgICovCi0gICAgZGVwbG95U2NvcGVUeXBlcy5zZXRJdGVtcyhuZXcgU3RyaW5nIFtde0F4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuREVQTE9ZX1NDT1BFX0FQUExJQ0FUSU9OLCBBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkRFUExPWV9TQ09QRV9SRVFVRVNULEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuREVQTE9ZX1NDT1BFX1NFU1NJT059KTsKLSAgCi0gICAgdGltZU91dEZpZWxkID0gY3JlYXRlVGV4dEZpZWxkKHdzZGwySmF2YUdyb3VwLEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfVElNRV9PVVQsQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BQQUVfRklFTERfVElNRV9PVVQsSU5GT1BPUF9QUEFFX0ZJRUxEX1RJTUVfT1VUKTsKLSAgICB0aW1lT3V0UHJvcGVydHlMYWJlbCA9IG5ldyBMYWJlbCh3c2RsMkphdmFHcm91cCwgU1dULk5PTkUpOwotICAgIAotICAgIEdyb3VwIGphdmEyV3NkbEdyb3VwID0gdXRpbHMuY3JlYXRlR3JvdXAocGFyZW50LCBBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkdST1VQX0pBVkEyV1NETF9OQU1FLCBBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFBBRV9HUk9VUF9KQVZBMldTREwsIElORk9QT1BfUFBBRV9HUk9VUF9KQVZBMldTREwsIDIsIDEwLDEwKTsKLSAgICB1c2VJbmhlcml0ZWRNZXRob2RzID0gY3JlYXRlQ2hlY2tCb3goamF2YTJXc2RsR3JvdXAsIEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuQlVUVE9OX1VTRV9JTkhFUklURURfTUVUSE9EUyxBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFBBRV9DSEVDS0JPWF9VU0VfSU5IRVJJVEVEX01FVEhPRFMsSU5GT1BPUF9QUEFFX0NIRUNLQk9YX1VTRV9JTkhFUklURURfTUVUSE9EUyk7Ci0gICAgdmFsaWRhdGVBZ2FpbnN0SkFYUlBDID0gY3JlYXRlQ2hlY2tCb3goamF2YTJXc2RsR3JvdXAsIEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuQlVUVE9OX1ZBTElEQVRFX0FHQUlOU1RfSkFYUlBDLEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QUEFFX0NIRUNLQk9YX1ZBTElEQVRFX0FHQUlOU1RfSkFYUlBDLElORk9QT1BfUFBBRV9DSEVDS0JPWF9WQUxJREFURV9BR0FJTlNUX0pBWFJQQyk7Ci0KLSAgICBpbml0aWFsaXplVmFsdWVzKCk7Ci0gICAgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5EaWFsb2cuYXBwbHlEaWFsb2dGb250KHN1cGVycGFyZW50KTsgICAgCi0KLSAgICByZXR1cm4gcGFyZW50OwotICB9Ci0gIAotICAvKioKLSAgICogQ3JlYXRlcyBjaGVja2JveCB3aXRoIGhvcml6b250YWxTcGFuID0gMiBpbiBpdHMgZ3JpZCBkYXRhIGluIG9yZGVyIHRvCi0gICAqIG1hdGNoIHRoZSBncmlkIGxheW91dCBmb3IgY29tYm8gCi0gICAqLwotICBwcml2YXRlIEJ1dHRvbiBjcmVhdGVDaGVja0JveCggQ29tcG9zaXRlIHBhcmVudCwgU3RyaW5nIGxhYmVsTmFtZSwgU3RyaW5nIHRvb2x0aXAsIFN0cmluZyBpbmZvcG9wICkKLSAgewotICAgIEJ1dHRvbiBidXR0b24gPSBuZXcgQnV0dG9uKCBwYXJlbnQsIFNXVC5DSEVDSyApOwotICAgIGJ1dHRvbi5zZXRUZXh0KGxhYmVsTmFtZSk7Ci0gICAgYnV0dG9uLnNldFRvb2xUaXBUZXh0KCB0b29sdGlwICk7Ci0gICAgaWYoIGluZm9wb3AgIT0gbnVsbCApIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoIGJ1dHRvbiwgV2ViU2VydmljZUF4aXNDb25zdW1wdGlvblVJUGx1Z2luLklEICsgIi4iICsgaW5mb3BvcCApOwotCUdyaWREYXRhIGdkPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9CRUdJTk5JTkcpOwotCWdkLmhvcml6b250YWxTcGFuPSAyOwotCWJ1dHRvbi5zZXRMYXlvdXREYXRhKGdkKTsJCi0gICAgcmV0dXJuIGJ1dHRvbjsKLSAgfQotICAgICAKLSAgcHJpdmF0ZSBUZXh0IGNyZWF0ZVRleHRGaWVsZChDb21wb3NpdGUgcGFyZW50LFN0cmluZyBsYWJlbE5hbWUsIFN0cmluZyB0b29sdGlwLCBTdHJpbmcgaW5mb3BvcCkgCi0gIHsgdG9vbHRpcCA9IHRvb2x0aXAgPT0gbnVsbCA/IGxhYmVsTmFtZSA6IHRvb2x0aXA7Ci0JaWYoIGxhYmVsTmFtZSAhPSBudWxsICkKLSAgICB7Ci0gICAgICBMYWJlbCBsYWJlbCA9IG5ldyBMYWJlbCggcGFyZW50LCBTV1QuV1JBUCk7Ci0gICAgICBsYWJlbC5zZXRUZXh0KCBsYWJlbE5hbWUgKTsKLSAgICAgIGxhYmVsLnNldFRvb2xUaXBUZXh0KCB0b29sdGlwICk7Ci0gICAgfQotICAgICBUZXh0IHRleHQgPSBuZXcgVGV4dChwYXJlbnQsIFNXVC5TSU5HTEUgfCBTV1QuQk9SREVSKTsKLSAgICAgR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgICBkYXRhLnZlcnRpY2FsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICAgZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICAgZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKLSAgICAgdGV4dC5zZXRMYXlvdXREYXRhKGRhdGEpOwotICAgICB0ZXh0LnNldFRvb2xUaXBUZXh0KHRvb2x0aXApOwotICAgICBpZiggaW5mb3BvcCAhPSBudWxsICkgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscCggdGV4dCwgV2ViU2VydmljZUF4aXNDb25zdW1wdGlvblVJUGx1Z2luLklEICsgIi4iICsgaW5mb3BvcCApOwotICAgICAKLSAgICAgdGV4dC5hZGRNb2RpZnlMaXN0ZW5lciggbmV3IE1vZGlmeUxpc3RlbmVyKCkgewotCQlwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpIHsKLQkJCW51bWJlckZpZWxkQ2hhbmdlZCgoVGV4dCkgZS53aWRnZXQpOwotCQl9Ci0JIH0KLSAgICAgKTsKLSAgICAgcmV0dXJuIHRleHQ7Ci0gIH0KLQotICAvKioKLSAgICogRG9lcyBhbnl0aGluZyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgZGVmYXVsdCBidXR0b24gaGFzIGJlZW4gcHJlc3NlZC4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHBlcmZvcm1EZWZhdWx0cygpCi0gIHsKLSAgICBzdXBlci5wZXJmb3JtRGVmYXVsdHMoKTsKLSAgICBpbml0aWFsaXplRGVmYXVsdHMoKTsKLSAgfQotCi0gIC8qKgotICAgKiBEbyBhbnl0aGluZyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgT0sgYnV0dG9uIGhhcyBiZWVuIHByZXNzZWQuCi0gICAqICBAcmV0dXJuIHdoZXRoZXIgaXQgaXMgb2theSB0byBjbG9zZSB0aGUgcHJlZmVyZW5jZSBwYWdlCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwZXJmb3JtT2soKQotICB7Ci0gICAgaWYodmFsaWRhdGVOdW1iZXIodGltZU91dEZpZWxkLmdldFRleHQoKSkuaXNPSygpKQotICAgIAlzdG9yZVZhbHVlcygpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgcGVyZm9ybUFwcGx5KCkKLSAgewotICAgIHBlcmZvcm1PaygpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlCi0gICAqLwotICBwdWJsaWMgdm9pZCBpbml0KElXb3JrYmVuY2ggd29ya2JlbmNoKSAgeyB9Ci0KLSAgLyoqCi0gICAqIEluaXRpYWxpemVzIHN0YXRlcyBvZiB0aGUgY29udHJvbHMgdXNpbmcgZGVmYXVsdCB2YWx1ZXMKLSAgICogaW4gdGhlIHByZWZlcmVuY2Ugc3RvcmUuCi0gICAqLwotICBwcml2YXRlIHZvaWQgaW5pdGlhbGl6ZURlZmF1bHRzKCkKLSAgewotICAgIGFsbFdhbnRlZC5zZXRTZWxlY3Rpb24oIEF4aXNFbWl0dGVyRGVmYXVsdHMuZ2V0QWxsV2FudGVkRGVmYXVsdCgpKTsKLSAgICBoZWxwZXJXYW50ZWQuc2V0U2VsZWN0aW9uKCBBeGlzRW1pdHRlckRlZmF1bHRzLmdldEhlbHBlcldhbnRlZERlZmF1bHQoKSk7Ci0gICAgd3JhcEFycmF5cy5zZXRTZWxlY3Rpb24oIEF4aXNFbWl0dGVyRGVmYXVsdHMuZ2V0V3JhcEFycmF5c0RlZmF1bHQoKSk7Ci0gICAgZGVwbG95U2NvcGVUeXBlcy5zZWxlY3QoQXhpc0VtaXR0ZXJEZWZhdWx0cy5nZXREZXBsb3lTY29wZURlZmF1bHQoKSk7Ci0gICAgaWYgKHdzZGwySmF2YVRpbWVvdXRQcm9wZXJ0eSAhPSBudWxsKSB0aW1lT3V0RmllbGQuc2V0VGV4dCgiIisgZ2V0VGltZU91dFZhbHVlV2l0aFByb3BlcnR5KCkpOwotICAgIGVsc2UgdGltZU91dEZpZWxkLnNldFRleHQoIiIgKyBBeGlzRW1pdHRlckRlZmF1bHRzLmdldFRpbWVPdXREZWZhdWx0KCkpOwkKLSAgICB1c2VJbmhlcml0ZWRNZXRob2RzLnNldFNlbGVjdGlvbihBeGlzRW1pdHRlckRlZmF1bHRzLmdldFVzZUluaGVyaXRlZE1ldGhvZHNEZWZhdWx0KCkpOwotICAgIHZhbGlkYXRlQWdhaW5zdEpBWFJQQy5zZXRTZWxlY3Rpb24oQXhpc0VtaXR0ZXJEZWZhdWx0cy5nZXRWYWxpZGF0ZUFnYWluc3RKQVhSUEMoKSk7Ci0gIH0KLQotICAvKioKLSAgICogSW5pdGlhbGl6ZXMgc3RhdGVzIG9mIHRoZSBjb250cm9scyBmcm9tIHRoZSBwcmVmZXJlbmNlIHN0b3JlLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGluaXRpYWxpemVWYWx1ZXMoKQotICB7Ci0gICAgLy8gZ2V0IHRoZSBwZXJzaXN0ZW50IGNvbnRleHQgZnJvbSB0aGUgcGx1Z2luCi0gICAgQXhpc0VtaXR0ZXJDb250ZXh0IGNvbnRleHQgPSBXZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uQ29yZVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEF4aXNFbWl0dGVyQ29udGV4dCgpOwotICAgIGFsbFdhbnRlZC5zZXRTZWxlY3Rpb24oIGNvbnRleHQuaXNBbGxXYW50ZWRFbmFibGVkKCkpOwotICAgIGhlbHBlcldhbnRlZC5zZXRTZWxlY3Rpb24oIGNvbnRleHQuaXNIZWxwZXJXYW50ZWRFbmFibGVkKCkpOwotICAgIHdyYXBBcnJheXMuc2V0U2VsZWN0aW9uKCBjb250ZXh0LmlzV3JhcEFycmF5c0VuYWJsZWQoKSk7Ci0gICAgZGVwbG95U2NvcGVUeXBlcy5zZWxlY3QoY29udGV4dC5nZXREZXBsb3lTY29wZVR5cGUoKSk7Ci0gICAgdXNlSW5oZXJpdGVkTWV0aG9kcy5zZXRTZWxlY3Rpb24oIGNvbnRleHQuaXNVc2VJbmhlcml0ZWRNZXRob2RzRW5hYmxlZCgpKTsKLSAgICB2YWxpZGF0ZUFnYWluc3RKQVhSUEMuc2V0U2VsZWN0aW9uKCBjb250ZXh0LmlzVmFsaWRhdGVBZ2FpbnN0SkFYUlBDRW5hYmxlZCgpICk7Ci0gICAgaWYgKHdzZGwySmF2YVRpbWVvdXRQcm9wZXJ0eSAhPSBudWxsKSAKLSAgICB7CXRpbWVPdXQ9Z2V0VGltZU91dFZhbHVlV2l0aFByb3BlcnR5KCk7Ci0gICAgCXRpbWVPdXRGaWVsZC5zZXRFbmFibGVkKGZhbHNlKTsKLSAgICAgICAgdGltZU91dFByb3BlcnR5TGFiZWwuc2V0VGV4dChBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19VU0VfSlZNX0FSR1VNRU5UX0ZPUl9USU1FX09VVCk7CQkKLSAgICB9Ci0JZWxzZQotCXsKLQkgICAgdGltZU91dCA9IGNvbnRleHQuZ2V0VGltZU91dCgpOwotCX0KLSAgICB0aW1lT3V0RmllbGQuc2V0VGV4dCgiIisgdGltZU91dCk7Ci0gICB9Ci0KLSAgLyoqCi0gICAqIFN0b3JlcyB0aGUgdmFsdWVzIG9mIHRoZSBjb250cm9scyBiYWNrIHRvIHRoZSBwcmVmZXJlbmNlIHN0b3JlLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHN0b3JlVmFsdWVzKCkKLSAgewotICAgIC8vIGdldCB0aGUgcGVyc2lzdGVudCBjb250ZXh0IGZyb20gdGhlIHBsdWdpbgotICAgIEF4aXNFbWl0dGVyQ29udGV4dCBjb250ZXh0ID0gV2ViU2VydmljZUF4aXNDb25zdW1wdGlvbkNvcmVQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRBeGlzRW1pdHRlckNvbnRleHQoKTsKLSAgICBjb250ZXh0LnNldEFsbFdhbnRlZEVuYWJsZWQoIGFsbFdhbnRlZC5nZXRTZWxlY3Rpb24oKSApOwotICAgIGNvbnRleHQuc2V0SGVscGVyV2FudGVkRW5hYmxlZCggaGVscGVyV2FudGVkLmdldFNlbGVjdGlvbigpICk7Ci0gICAgY29udGV4dC5zZXRXcmFwQXJyYXlzRW5hYmxlZCggd3JhcEFycmF5cy5nZXRTZWxlY3Rpb24oKSApOwotICAgIGNvbnRleHQuc2VsZWN0RGVwbG95U2NvcGVUeXBlKGRlcGxveVNjb3BlVHlwZXMuZ2V0U2VsZWN0aW9uSW5kZXgoKSk7Ci0gICAgdGltZU91dCA9IEludGVnZXIucGFyc2VJbnQodGltZU91dEZpZWxkLmdldFRleHQoKS50cmltKCkpOwotICAgIGNvbnRleHQuc2V0VGltZU91dCh0aW1lT3V0KTsKLSAgICBjb250ZXh0LnNldFVzZUluaGVyaXRlZE1ldGhvZHNFbmFibGVkKCB1c2VJbmhlcml0ZWRNZXRob2RzLmdldFNlbGVjdGlvbigpICk7Ci0gICAgY29udGV4dC5zZXRWYWxpZGF0ZUFnYWluc3RKQVhSUENFbmFibGVkKCB2YWxpZGF0ZUFnYWluc3RKQVhSUEMuZ2V0U2VsZWN0aW9uKCkgKTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIG51bWJlckZpZWxkQ2hhbmdlZChUZXh0IHRleHRDb250cm9sKSB7Ci0JCUlTdGF0dXMgc3RhdHVzID0gdmFsaWRhdGVOdW1iZXIodGV4dENvbnRyb2wuZ2V0VGV4dCgpKTsKLQkJc2V0VmFsaWQoIXN0YXR1cy5tYXRjaGVzKElTdGF0dXMuRVJST1IpKTsKLQkJYXBwbHlUb1N0YXR1c0xpbmUodGhpcyxzdGF0dXMpOwkKLSB9Ci0gIAotICBwcml2YXRlIGludCBnZXRUaW1lT3V0VmFsdWVXaXRoUHJvcGVydHkoKSAKLSAgewotCSAgaWYgKHdzZGwySmF2YVRpbWVvdXRQcm9wZXJ0eSAhPSBudWxsKQotCSAgewlsb25nIHRpbWVPdXRQcm9wZXJ0eSA9IG5ldyBJbnRlZ2VyKHdzZGwySmF2YVRpbWVvdXRQcm9wZXJ0eSkubG9uZ1ZhbHVlKCk7Ci0JCWlmICh0aW1lT3V0UHJvcGVydHkgPCAwKSByZXR1cm4gLTE7IC8vIHRpbWVvdXQgPSAtMSBlcXVhbHMgbmV2ZXIgdGltZSBvdXQ7IHRyZWF0aW5nIGFsbCBuZWdhdGl2ZSBudW1iZXIgYXMgLTEKLQkJZWxzZSByZXR1cm4gKGludClNYXRoLmNlaWwodGltZU91dFByb3BlcnR5LzEwMDAuMCk7Ci0JICB9Ci0JICBlbHNlIHJldHVybiBBeGlzRW1pdHRlckRlZmF1bHRzLmdldFRpbWVPdXREZWZhdWx0KCk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgSVN0YXR1cyB2YWxpZGF0ZU51bWJlcihTdHJpbmcgbnVtYmVyU3RyaW5nKQotICB7Ci0JICAgIElTdGF0dXMgc3RhdHVzOwotCQl0cnkgCi0JCXsKLQkJCWludCBudW1iZXIgPSBJbnRlZ2VyLnBhcnNlSW50KG51bWJlclN0cmluZyk7Ci0JCQlpZiAobnVtYmVyIDw9IDAgJiYgbnVtYmVyICE9IC0xKQotCQkJewotCQkJCXN0YXR1cyA9IG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgV2ViU2VydmljZUF4aXNDb25zdW1wdGlvblVJUGx1Z2luLklELCBJU3RhdHVzLkVSUk9SLAotCQkJCQkJQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfSU5WQUxJRF9USU1FX09VVCwgbnVsbCk7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7CXRpbWVPdXQgPSBudW1iZXI7Ci0JCQkJc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLQkJCQkvL3dlIHNldCBwYXJhbTptZXNzYWdlPSIiIGhlcmUsIExhdGVyIGluIAotCQkJCS8vYXBwbHlUb1N0YXR1c0xpbmUoKSwgd2UgZG8gcGFnZS5zZXRNZXNzYWdlKG51bGwsdHlwZSkgCi0JCQkJc3RhdHVzID0gbmV3IFN0YXR1cyhJU3RhdHVzLk9LLCBXZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uVUlQbHVnaW4uSUQsIElTdGF0dXMuT0ssICIiLG51bGwpOwotCQkJfQotCQl9IAotCQljYXRjaCAKLQkJKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSAKLQkJewotCQkJc3RhdHVzID0gbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBXZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uVUlQbHVnaW4uSUQsIElTdGF0dXMuRVJST1IsCi0JCQkJCUF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX0lOVkFMSURfVElNRV9PVVQsIG51bGwpOwotCQl9Ci0JCXJldHVybiBzdGF0dXM7IAotICAJfQotICAKLQlwcml2YXRlIHZvaWQgYXBwbHlUb1N0YXR1c0xpbmUoRGlhbG9nUGFnZSBwYWdlLCBJU3RhdHVzIHN0YXR1cykgewotCQlTdHJpbmcgbWVzc2FnZT0gc3RhdHVzLmdldE1lc3NhZ2UoKTsKLQkJc3dpdGNoIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSkgewotCQkJY2FzZSBJU3RhdHVzLk9LOgotCQkJCXBhZ2Uuc2V0TWVzc2FnZShudWxsLCBJTWVzc2FnZVByb3ZpZGVyLk5PTkUpOwotCQkJCXBhZ2Uuc2V0RXJyb3JNZXNzYWdlKG51bGwpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBJU3RhdHVzLldBUk5JTkc6Ci0JCQkJcGFnZS5zZXRNZXNzYWdlKG1lc3NhZ2UsIElNZXNzYWdlUHJvdmlkZXIuV0FSTklORyk7Ci0JCQkJcGFnZS5zZXRFcnJvck1lc3NhZ2UobnVsbCk7Ci0JCQkJYnJlYWs7CQkJCQotCQkJY2FzZSBJU3RhdHVzLklORk86Ci0JCQkJcGFnZS5zZXRNZXNzYWdlKG1lc3NhZ2UsIElNZXNzYWdlUHJvdmlkZXIuSU5GT1JNQVRJT04pOwotCQkJCXBhZ2Uuc2V0RXJyb3JNZXNzYWdlKG51bGwpOwotCQkJCWJyZWFrOwkJCQotCQkJZGVmYXVsdDoKLQkJCQlpZiAobWVzc2FnZS5sZW5ndGgoKSA9PSAwKSB7Ci0JCQkJCW1lc3NhZ2U9IG51bGw7Ci0JCQkJfQotCQkJCXBhZ2Uuc2V0TWVzc2FnZShudWxsKTsKLQkJCQlwYWdlLnNldEVycm9yTWVzc2FnZShtZXNzYWdlKTsKLQkJCQlicmVhazsJCQotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvdGFzay9DbGllbnRDb2RlR2VuT3BlcmF0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS90YXNrL0NsaWVudENvZGVHZW5PcGVyYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzNlY2JlMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS90YXNrL0NsaWVudENvZGVHZW5PcGVyYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA1MDkgICAxMjUwOTQgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA2MDUxNSAgIDExNTIyNSBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDYwNzI4ICAgMTQ1NDI2IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudGFzazsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tYW5kLldTREwySmF2YUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5Xb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci0KLXB1YmxpYyBjbGFzcyBDbGllbnRDb2RlR2VuT3BlcmF0aW9uIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gewotCi0JcHJpdmF0ZSBDb3B5QXhpc0phckNvbW1hbmQgY29weUF4aXNKYXJDb21tYW5kID0gbnVsbDsKLQkKLQlwcml2YXRlIFdTREwySmF2YUNvbW1hbmQgd3NkbDJKYXZhQ29tbWFuZCA9IG51bGw7Ci0JcHJpdmF0ZSBKYXZhV1NETFBhcmFtZXRlciBqYXZhV1NETFBhcmFtOwotCXByaXZhdGUgU3RyaW5nIHdzZGxVUkk7Ci0JCi0JcHJpdmF0ZSBJUHJvamVjdCBwcm9qZWN0OwotCQotCXByaXZhdGUgU3R1YjJCZWFuQ29tbWFuZCBzdHViMkJlYW5Db21tYW5kID0gbnVsbDsKLQlwcml2YXRlIFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyOwotCXByaXZhdGUgU3RyaW5nIG91dHB1dEZvbGRlcjsKLQlwcml2YXRlIFN0cmluZyBwcm94eUJlYW47Ci0JcHJpdmF0ZSBTdHJpbmcgcHJveHlFbmRwb2ludDsKLQkKLQlwcml2YXRlIFJlZnJlc2hQcm9qZWN0Q29tbWFuZCByZWZyZXNoUHJvamVjdENvbW1hbmQgPSBudWxsOwotCi0JcHVibGljIENsaWVudENvZGVHZW5PcGVyYXRpb24oKXsKLQkJY29weUF4aXNKYXJDb21tYW5kID0gbmV3IENvcHlBeGlzSmFyQ29tbWFuZCgpOwotCQl3c2RsMkphdmFDb21tYW5kID0gbmV3IFdTREwySmF2YUNvbW1hbmQoKTsKLQkJc3R1YjJCZWFuQ29tbWFuZCA9IG5ldyBTdHViMkJlYW5Db21tYW5kKCk7Ci0JCXJlZnJlc2hQcm9qZWN0Q29tbWFuZCA9IG5ldyBSZWZyZXNoUHJvamVjdENvbW1hbmQoKTsKLQl9Ci0JCi0JcHVibGljIElTdGF0dXMgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgaW5mbykgewotCi0JCUlFbnZpcm9ubWVudCBlbnYgPSBnZXRFbnZpcm9ubWVudCgpOwotCQlDbGllbnRXU01vZGlmeU9wZXJhdGlvbiBidU9wZXJhdGlvbiA9IG5ldyBDbGllbnRXU01vZGlmeU9wZXJhdGlvbihpbmZvLCBlbnYpOwotCQl0cnkgewotCQkJYnVPcGVyYXRpb24uZXhlY3V0ZShtb25pdG9yKTsKLQkJfQotCQljYXRjaChDb3JlRXhjZXB0aW9uIGNlKXsKLQkJCUlTdGF0dXMgc3RhdHVzID0gY2UuZ2V0U3RhdHVzKCk7Ci0JCQlyZXR1cm4gc3RhdHVzOwotCQl9Ci0JCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCi0JfQotCi0JCi0JcHJpdmF0ZSBjbGFzcyBDbGllbnRXU01vZGlmeU9wZXJhdGlvbiBleHRlbmRzIFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiB7Ci0JCQotCQkgIHByaXZhdGUgSUFkYXB0YWJsZSBpbmZvID0gbnVsbDsKLQkJICBwcml2YXRlIElFbnZpcm9ubWVudCBlbnYgPSBudWxsOwotCi0JCSAgCi0JCSAgcHJvdGVjdGVkIENsaWVudFdTTW9kaWZ5T3BlcmF0aW9uKElBZGFwdGFibGUgYWRhcHRhYmxlLCBJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQpewotCQkJICBpbmZvID0gYWRhcHRhYmxlOwotCQkJICBlbnYgPSBlbnZpcm9ubWVudDsKLQkJICB9Ci0JCSAgCi0JCSAgcHJvdGVjdGVkIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uewotCQkgIAotCQkJICAgIElTdGF0dXMgc3RhdHVzID0gbnVsbDsKLQotCQkJICAgIC8vIENvcHlBeGlzSmFyQ29tbWFuZAotCQkJICAgIGNvcHlBeGlzSmFyQ29tbWFuZC5zZXRFbnZpcm9ubWVudChlbnYpOwotCQkJICAgIGNvcHlBeGlzSmFyQ29tbWFuZC5zZXRQcm9qZWN0KHByb2plY3QpOwotCQkJICAgIHN0YXR1cyA9IGNvcHlBeGlzSmFyQ29tbWFuZC5leGVjdXRlKG1vbml0b3IsIGluZm8pOwotCQkJICAgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpewotCQkJICAgIAl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihzdGF0dXMpOwotCQkJICAgIH0KLQkJCQkKLQkJCQkvLyBXU0RMMkphdmFDb21tYW5kCi0JCQkJd3NkbDJKYXZhQ29tbWFuZC5zZXRFbnZpcm9ubWVudChlbnYpOwotCQkJCXdzZGwySmF2YUNvbW1hbmQuc2V0SmF2YVdTRExQYXJhbShqYXZhV1NETFBhcmFtKTsKLQkJCQl3c2RsMkphdmFDb21tYW5kLnNldFdzZGxVUkkod3NkbFVSSSk7Ci0JCQkJc3RhdHVzID0gd3NkbDJKYXZhQ29tbWFuZC5leGVjdXRlKG1vbml0b3IsIGluZm8pOwotCQkJCWlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpIHsKLQkJCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24oc3RhdHVzKTsKLQkJCQl9Ci0JCQkJCi0JCQkJLy8gU3R1YjJCZWFuQ29tbWFuZAotCQkJCXN0dWIyQmVhbkNvbW1hbmQuc2V0RW52aXJvbm1lbnQoZW52KTsKLQkJCQlzdHViMkJlYW5Db21tYW5kLnNldFdlYlNlcnZpY2VzUGFyc2VyKHdlYlNlcnZpY2VzUGFyc2VyKTsKLQkJCQlzdHViMkJlYW5Db21tYW5kLnNldE91dHB1dEZvbGRlcihvdXRwdXRGb2xkZXIpOwotCQkJCXN0dWIyQmVhbkNvbW1hbmQuc2V0SmF2YVdTRExQYXJhbShqYXZhV1NETFBhcmFtKTsKLQkJCQlzdHViMkJlYW5Db21tYW5kLnNldENsaWVudFByb2plY3QocHJvamVjdCk7Ci0JCQkJc3RhdHVzID0gc3R1YjJCZWFuQ29tbWFuZC5leGVjdXRlKG1vbml0b3IsIGluZm8pOwotCQkJCWlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpIHsKLQkJCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24oc3RhdHVzKTsKLQkJCQl9Ci0JCQkJcHJveHlCZWFuID0gc3R1YjJCZWFuQ29tbWFuZC5nZXRQcm94eUJlYW4oKTsKLQkJCQlwcm94eUVuZHBvaW50ID0gc3R1YjJCZWFuQ29tbWFuZC5nZXRQcm94eUVuZHBvaW50KCk7Ci0JCQkgIAotCQkJCS8vIFJlZnJlc2hQcm9qZWN0Q29tbWFuZAotCQkJCXJlZnJlc2hQcm9qZWN0Q29tbWFuZC5zZXRFbnZpcm9ubWVudChlbnYpOwotCQkJCXJlZnJlc2hQcm9qZWN0Q29tbWFuZC5zZXRQcm9qZWN0KHByb2plY3QpOwotCQkJCXN0YXR1cyA9IHJlZnJlc2hQcm9qZWN0Q29tbWFuZC5leGVjdXRlKG1vbml0b3IsIGluZm8pOwotCQkJCWlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpIHsKLQkJCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24oc3RhdHVzKTsKLQkJCQl9Ci0JCQkJCi0JCSAgfQotCQkKLQl9Ci0KLQotCXB1YmxpYyB2b2lkIHNldEphdmFXU0RMUGFyYW0oSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbSkgewotCQl0aGlzLmphdmFXU0RMUGFyYW0gPSBqYXZhV1NETFBhcmFtOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldE91dHB1dEZvbGRlcihTdHJpbmcgb3V0cHV0Rm9sZGVyKSB7Ci0JCXRoaXMub3V0cHV0Rm9sZGVyID0gb3V0cHV0Rm9sZGVyOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFByb2plY3QoSVByb2plY3QgcHJvamVjdCkgewotCQl0aGlzLnByb2plY3QgPSBwcm9qZWN0OwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VzUGFyc2VyKFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyKSB7Ci0JCXRoaXMud2ViU2VydmljZXNQYXJzZXIgPSB3ZWJTZXJ2aWNlc1BhcnNlcjsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRXc2RsVVJJKFN0cmluZyB3c2RsVVJJKSB7Ci0JCXRoaXMud3NkbFVSSSA9IHdzZGxVUkk7Ci0JfQotCQkKLQlwdWJsaWMgU3RyaW5nIGdldFByb3h5QmVhbigpIHsKLQkJcmV0dXJuIHByb3h5QmVhbjsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRQcm94eUVuZHBvaW50KCkgewotCQlyZXR1cm4gcHJveHlFbmRwb2ludDsKLQl9Ci0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS90YXNrL0NvcHlBeGlzSmFyQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvdGFzay9Db3B5QXhpc0phckNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWU3YzE4Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS90YXNrL0NvcHlBeGlzSmFyQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDUwOSAgIDEyNTA5NCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUsIFVzZSBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24KLSAqIDIwMDYwNTE1ICAgMTE1MjI1IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwNjA1MTcgICAxNDIzNDIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwODI4CSAgMTU1NDM5IG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbgotICogMjAwNzA1MDEgICAxODQ1MDUga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDcwNTAyICAgMTg0NTA1IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuLCBVcGRhdGUgSkFSIHNpemVzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudGFzazsKLQotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUNsYXNzcGF0aEVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklKYXZhUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhTW9kZWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkuQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLkNvbnN1bXB0aW9uTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbW1vbi5GaWxlUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uUHJvZ3Jlc3NVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5UcmFuc2llbnRSZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuY29tbW9uLkJ1bmRsZVV0aWxzOwotCi0KLXB1YmxpYyBjbGFzcyBDb3B5QXhpc0phckNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiB7Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBBWElTX0pBUiA9ICJheGlzLmphciI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBBWElTX1JVTlRJTUVfUExVR0lOX0lEID0gIm9yZy5hcGFjaGUuYXhpcyI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBDT01NT05fRElTQ09WRVJZX1BMVUdJTl9JRCA9ICJvcmcuYXBhY2hlLmNvbW1vbnMuZGlzY292ZXJ5IjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIENPTU1PTl9ESVNDT1ZFUllfSkFSID0gImNvbW1vbnMtZGlzY292ZXJ5LTAuMi5qYXIiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgSkFWQVhfWE1MX1JQQ19QTFVHSU5fSUQgPSAiamF2YXgueG1sLnJwYyI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBKQVZBWF9YTUxfUlBDX0pBUiA9ICJqYXhycGMuamFyIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEpBVkFYX1hNTF9TT0FQX1BMVUdJTl9JRCA9ICJqYXZheC54bWwuc29hcCI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBKQVZBWF9YTUxfU09BUF9KQVIgPSAic2Fhai5qYXIiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgSkFWQVhfV1NETF9QTFVHSU5fSUQgPSAiamF2YXgud3NkbDE1IjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEpBVkFYX1dTRExfSkFSID0gIndzZGw0ai0xLjUuMS5qYXIiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgQ09NTU9OX0xPR0dJTkdfUExVR0lOX0lEID0gIm9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIENPTU1PTl9MT0dHSU5HX0pBUiA9ICJjb21tb25zLWxvZ2dpbmcuamFyIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGxvbmcgQVhJU19KQVJfU0laRSA9IDE1ODY5NDNMOwotCXByaXZhdGUgc3RhdGljIGxvbmcgQ09NTU9OX0RJU0NPVkVSWV9KQVJfU0laRSA9IDcxMTA1TDsKLQlwcml2YXRlIHN0YXRpYyBsb25nIEpBVkFYX1hNTF9SUENfSkFSX1NJWkUgPSAzMjE0MUw7Ci0JcHJpdmF0ZSBzdGF0aWMgbG9uZyBKQVZBWF9YTUxfU09BUF9KQVJfU0laRSA9IDE5NTA2TDsKLQlwcml2YXRlIHN0YXRpYyBsb25nIEpBVkFYX1dTRExfSkFSX1NJWkUgPSAxMjY3NzVMOwotCXByaXZhdGUgc3RhdGljIGxvbmcgQ09NTU9OX0xPR0dJTkdfSkFSX1NJWkUgPSAzODg5NUw7Ci0KLS8vIFdlYiBTZXJ2aWNlcyBKYXJzIFVzZWQgaW4gcHJldmlvdXMgVmVyc2lvbnMgb2YgV1RQIGJ1dCBub3cgb2Jzb2xldGUKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmdbXSBPQlNPTEVURV9KQVJTID0gbmV3IFN0cmluZ1tdeyJjb21tb25zLWRpc2NvdmVyeS5qYXIiLCAiY29tbW9ucy1sb2dnaW5nLTEuMC40LmphciIsICJsb2c0ai0xLjIuNC5qYXIiLCAibG9nNGotMS4yLjguamFyIiwgIndzZGw0ai5qYXIiLCAiYXhpcy1hbnQuamFyIn07Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQVRIX1RPX0pBUlNfSU5fUExVR0lOID0gImxpYi8iOwotCi0JcHJpdmF0ZSBJUHJvamVjdCBwcm9qZWN0OwotCXByaXZhdGUgQm9vbGVhbiBwcm9qZWN0UmVzdGFydFJlcXVpcmVkXyA9IEJvb2xlYW4uRkFMU0U7Ci0JcHJpdmF0ZSBJQ2xhc3NwYXRoRW50cnlbXSBvbGRDbGFzc3BhdGg7Ci0JcHJpdmF0ZSBBcnJheUxpc3QgbmV3SmFyTmFtZXNMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCi0JLyoqCi0JICogRGVmYXVsdCBDVE9SOwotCSAqLwotCXB1YmxpYyBDb3B5QXhpc0phckNvbW1hbmQoKSB7Ci0JfQotCi0JLyoqCi0JICogRXhlY3V0ZSB0aGUgY29tbWFuZAotCSAqLwotCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSkgewotCi0JCUlFbnZpcm9ubWVudCBlbnYgPSBnZXRFbnZpcm9ubWVudCgpOwotCQlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0JCVByb2dyZXNzVXRpbHMucmVwb3J0KG1vbml0b3IsIEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuUFJPR1JFU1NfSU5GT19DT1BZX0FYSVNfQ0ZHKTsKLQotCQlpZiAoSjJFRVV0aWxzLmlzV2ViQ29tcG9uZW50KHByb2plY3QpKSB7Ci0JCQljb3B5QXhpc0phcnNUb1Byb2plY3QocHJvamVjdCwgc3RhdHVzLCBlbnYsIG1vbml0b3IpOwotCQl9Ci0JCWVsc2UgewotCQkJLy8gQ2hlY2sgaWYgaXQncyBhIHBsYWluIG9sZCBKYXZhIHByb2plY3QKLQkJCWlmIChKMkVFVXRpbHMuaXNKYXZhQ29tcG9uZW50KHByb2plY3QpKSB7Ci0JCQkJc3RhdHVzID0gYWRkQXhpc0phcnNUb0J1aWxkUGF0aChwcm9qZWN0LCBlbnYsIG1vbml0b3IpOwotCQkJCWlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpIHsKLQkJCQkJZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkJCQlyZXR1cm4gc3RhdHVzOwotCQkJCX0KLQkJCX0KLQkJCWVsc2UgewotCQkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX1dBUk5fTk9fSkFWQV9OQVRVUkUpOwotCQkJCWVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJCQlyZXR1cm4gc3RhdHVzOwotCQkJfQotCi0JCX0KLQotCQlyZXR1cm4gc3RhdHVzOwotCi0JfQotCi0JcHJpdmF0ZSB2b2lkIGNvcHlBeGlzSmFyc1RvUHJvamVjdChJUHJvamVjdCBwcm9qZWN0LCBJU3RhdHVzIHN0YXR1cywgSUVudmlyb25tZW50IGVudiwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7Ci0KLQkJSVBhdGggd2ViTW9kdWxlUGF0aCA9IEoyRUVVdGlscy5nZXRXZWJDb250ZW50UGF0aChwcm9qZWN0KTsKLQkJaWYgKHdlYk1vZHVsZVBhdGggPT0gbnVsbCkgewotCQkJc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfUFJPSkVDVF9OT1RfRk9VTkQpOwotCQkJZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJZGVsZXRlT2Jzb2xldGVKYXJzKHdlYk1vZHVsZVBhdGgpOwotCi0KLQkJY29weUlGaWxlKEFYSVNfUlVOVElNRV9QTFVHSU5fSUQsICJsaWIvIiArIEFYSVNfSkFSLCB3ZWJNb2R1bGVQYXRoLCAiV0VCLUlORi9saWIvIiArIEFYSVNfSkFSLCBzdGF0dXMsIGVudiwgbW9uaXRvcik7Ci0JCWlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpIHsKLQkJCXJldHVybjsKLQkJfQotCQljb3B5SUZpbGUoQ09NTU9OX0RJU0NPVkVSWV9QTFVHSU5fSUQsICJsaWIvIiArIENPTU1PTl9ESVNDT1ZFUllfSkFSLCB3ZWJNb2R1bGVQYXRoLCAiV0VCLUlORi9saWIvIiArIENPTU1PTl9ESVNDT1ZFUllfSkFSLCBzdGF0dXMsIGVudiwgbW9uaXRvcik7Ci0JCWlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpIHsKLQkJCXJldHVybjsKLQkJfQotCQljb3B5SUZpbGUoSkFWQVhfWE1MX1JQQ19QTFVHSU5fSUQsICJsaWIvIiArIEpBVkFYX1hNTF9SUENfSkFSLCB3ZWJNb2R1bGVQYXRoLCAiV0VCLUlORi9saWIvIiArIEpBVkFYX1hNTF9SUENfSkFSLCBzdGF0dXMsIGVudiwgbW9uaXRvcik7Ci0JCWlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpIHsKLQkJCXJldHVybjsKLQkJfQotCQljb3B5SUZpbGUoSkFWQVhfWE1MX1NPQVBfUExVR0lOX0lELCAibGliLyIgKyBKQVZBWF9YTUxfU09BUF9KQVIsIHdlYk1vZHVsZVBhdGgsICJXRUItSU5GL2xpYi8iICsgSkFWQVhfWE1MX1NPQVBfSkFSLCBzdGF0dXMsIGVudiwgbW9uaXRvcik7Ci0JCWlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpIHsKLQkJCXJldHVybjsKLQkJfQotCQljb3B5SUZpbGUoSkFWQVhfV1NETF9QTFVHSU5fSUQsICJsaWIvIiArIEpBVkFYX1dTRExfSkFSLCB3ZWJNb2R1bGVQYXRoLCAiV0VCLUlORi9saWIvIiArIEpBVkFYX1dTRExfSkFSLCBzdGF0dXMsIGVudiwgbW9uaXRvcik7Ci0JCWlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpIHsKLQkJCXJldHVybjsKLQkJfQotCi0JCWNvcHlQbHVnaW5KYXIoQ09NTU9OX0xPR0dJTkdfUExVR0lOX0lELCB3ZWJNb2R1bGVQYXRoLCAiV0VCLUlORi9saWIvIiArIENPTU1PTl9MT0dHSU5HX0pBUiwgc3RhdHVzLCBlbnYsIG1vbml0b3IpOwotCQlpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJcmV0dXJuOwotCX0KLQotCS8qKgotCSAqIAotCSAqLwotCXByaXZhdGUgdm9pZCBjb3B5SUZpbGUoU3RyaW5nIHBsdWdpbklkLCBTdHJpbmcgc291cmNlLCBJUGF0aCB0YXJnZXRQYXRoLCBTdHJpbmcgdGFyZ2V0RmlsZSwgSVN0YXR1cyBzdGF0dXMsIElFbnZpcm9ubWVudCBlbnYsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgewotCQlJUGF0aCB0YXJnZXQgPSB0YXJnZXRQYXRoLmFwcGVuZChuZXcgUGF0aCh0YXJnZXRGaWxlKSk7Ci0JCVByb2dyZXNzVXRpbHMucmVwb3J0KG1vbml0b3IsIENvbnN1bXB0aW9uTWVzc2FnZXMuUFJPR1JFU1NfSU5GT19DT1BZSU5HX0ZJTEUpOwotCi0JCXRyeSB7Ci0JCQlSZXNvdXJjZUNvbnRleHQgY29udGV4dCA9IG5ldyBUcmFuc2llbnRSZXNvdXJjZUNvbnRleHQoKTsKLQkJCWNvbnRleHQuc2V0T3ZlcndyaXRlRmlsZXNFbmFibGVkKHRydWUpOwotCQkJY29udGV4dC5zZXRDcmVhdGVGb2xkZXJzRW5hYmxlZCh0cnVlKTsKLQkJCWNvbnRleHQuc2V0Q2hlY2tvdXRGaWxlc0VuYWJsZWQodHJ1ZSk7Ci0JCQlVUkwgc291cmNlVVJMID0gQnVuZGxlVXRpbHMuZ2V0VVJMRnJvbUJ1bmRsZShwbHVnaW5JZCwgc291cmNlKTsKLQkJCUlGaWxlIHJlc291cmNlID0gUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2VSb290KCkuZ2V0RmlsZSh0YXJnZXQpOwotCQkJaWYgKCFyZXNvdXJjZS5leGlzdHMoKSkgewotCQkJCUlGaWxlIGZpbGUgPSBGaWxlUmVzb3VyY2VVdGlscy5jcmVhdGVGaWxlKGNvbnRleHQsIHRhcmdldCwgc291cmNlVVJMLm9wZW5TdHJlYW0oKSwgbW9uaXRvciwgZW52LmdldFN0YXR1c0hhbmRsZXIoKSk7Ci0JCQkJaWYgKChwcm9qZWN0UmVzdGFydFJlcXVpcmVkXy5ib29sZWFuVmFsdWUoKSA9PSBmYWxzZSkgJiYgZmlsZS5leGlzdHMoKSkgewotCQkJCQlwcm9qZWN0UmVzdGFydFJlcXVpcmVkXyA9IEJvb2xlYW4uVFJVRTsKLQkJCQl9Ci0KLQkJCX0KLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX0ZJTEVDT1BZLCBlKTsKLQkJCWVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQotCQl9Ci0JfQotCi0JLyoqCi0JICogQ29weSBwbHVnaW5zIHRoYXQgaGFzIGJlZW4gSkFSZWQKLQkgKi8KLQlwcml2YXRlIHZvaWQgY29weVBsdWdpbkphcihTdHJpbmcgcGx1Z2luSWQsIElQYXRoIHRhcmdldFBhdGgsIFN0cmluZyB0YXJnZXRGaWxlLCBJU3RhdHVzIHN0YXR1cywgSUVudmlyb25tZW50IGVudiwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7Ci0JCUlQYXRoIHRhcmdldCA9IHRhcmdldFBhdGguYXBwZW5kKG5ldyBQYXRoKHRhcmdldEZpbGUpKTsKLQkJUHJvZ3Jlc3NVdGlscy5yZXBvcnQobW9uaXRvciwgQ29uc3VtcHRpb25NZXNzYWdlcy5QUk9HUkVTU19JTkZPX0NPUFlJTkdfRklMRSk7Ci0KLQkJdHJ5IHsKLQkJCVJlc291cmNlQ29udGV4dCBjb250ZXh0ID0gbmV3IFRyYW5zaWVudFJlc291cmNlQ29udGV4dCgpOwotCQkJY29udGV4dC5zZXRPdmVyd3JpdGVGaWxlc0VuYWJsZWQodHJ1ZSk7Ci0JCQljb250ZXh0LnNldENyZWF0ZUZvbGRlcnNFbmFibGVkKHRydWUpOwotCQkJY29udGV4dC5zZXRDaGVja291dEZpbGVzRW5hYmxlZCh0cnVlKTsKLQotCQkJSVBhdGggamFyUGF0aCA9IEJ1bmRsZVV0aWxzLmdldEphcnJlZFBsdWdpblBhdGgocGx1Z2luSWQpOwotCQkJaWYgKGphclBhdGggIT0gbnVsbCkgewotCQkJCUlGaWxlIHJlc291cmNlID0gUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2VSb290KCkuZ2V0RmlsZSh0YXJnZXQpOwotCi0JCQkJaWYgKCFyZXNvdXJjZS5leGlzdHMoKSkgewotCQkJCQlJbnB1dFN0cmVhbSBpcyA9IG5ldyBGaWxlSW5wdXRTdHJlYW0obmV3IEZpbGUoamFyUGF0aC50b1N0cmluZygpKSk7Ci0JCQkJCUlGaWxlIGZpbGUgPSBGaWxlUmVzb3VyY2VVdGlscy5jcmVhdGVGaWxlKGNvbnRleHQsIHRhcmdldCwgaXMsIG1vbml0b3IsIGVudi5nZXRTdGF0dXNIYW5kbGVyKCkpOwotCQkJCQlpZiAoKHByb2plY3RSZXN0YXJ0UmVxdWlyZWRfLmJvb2xlYW5WYWx1ZSgpID09IGZhbHNlKSAmJiBmaWxlLmV4aXN0cygpKSB7Ci0JCQkJCQlwcm9qZWN0UmVzdGFydFJlcXVpcmVkXyA9IEJvb2xlYW4uVFJVRTsKLQkJCQkJfQotCi0JCQkJfQotCQkJfQotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfRklMRUNPUFksIGUpOwotCQkJZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCi0JCX0KLQl9Ci0KLQkvKgotCSAqIENoZWNrIGZvciBhbnkgb2Jzb2xldGUgSmFycyBpbiBXRUItSU5GL2xpYiBmb2xkZXIgT2Jzb2xldGUgamFycyB3b3VsZAotCSAqIGJlIGZvdW5kIGluIHByb2plY3RzIG1pZ3JhdGVkIGZyb20gb2xkZXIgdmVyc2lvbnMgb2YgV1RQCi0JICovCi0JcHJpdmF0ZSB2b2lkIGRlbGV0ZU9ic29sZXRlSmFycyhJUGF0aCB3ZWJNb2R1bGVQYXRoKSB7Ci0JCS8vIEZpcnN0IGNoZWNrIGZvciBBbnkgamFycyB0aGF0IGhhdmUgbmFtZXMgdGhhdCBhcmUga25vd24gdG8gYmUKLQkJLy8gb2Jzb2xldGUKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBPQlNPTEVURV9KQVJTLmxlbmd0aDsgaSsrKSB7Ci0JCQlJUGF0aCBwYXRoID0gd2ViTW9kdWxlUGF0aC5hcHBlbmQoIldFQi1JTkYvbGliLyIgKyBPQlNPTEVURV9KQVJTW2ldKTsKLQotCQkJSUZpbGUgcmVzb3VyY2UgPSBSZXNvdXJjZVV0aWxzLmdldFdvcmtzcGFjZVJvb3QoKS5nZXRGaWxlKHBhdGgpOwotCQkJaWYgKHJlc291cmNlLmV4aXN0cygpKSB7Ci0JCQkJZGVsZXRlUmVzb3VyY2UocmVzb3VyY2UpOwotCQkJfQotCQl9Ci0KLQkJLy8gZGVsZXRlIG9sZGVyIEpBUnMgb2YgdGhlIHNhbWUgbmFtZQotCQlkZWxldGVPbGRKYXIod2ViTW9kdWxlUGF0aC5hcHBlbmQoIldFQi1JTkYvbGliLyIgKyBBWElTX0pBUiksIEFYSVNfSkFSX1NJWkUpOwotCQlkZWxldGVPbGRKYXIod2ViTW9kdWxlUGF0aC5hcHBlbmQoIldFQi1JTkYvbGliLyIgKyBDT01NT05fRElTQ09WRVJZX0pBUiksIENPTU1PTl9ESVNDT1ZFUllfSkFSX1NJWkUpOwotCQlkZWxldGVPbGRKYXIod2ViTW9kdWxlUGF0aC5hcHBlbmQoIldFQi1JTkYvbGliLyIgKyBKQVZBWF9YTUxfUlBDX0pBUiksIEpBVkFYX1hNTF9SUENfSkFSX1NJWkUpOwotCQlkZWxldGVPbGRKYXIod2ViTW9kdWxlUGF0aC5hcHBlbmQoIldFQi1JTkYvbGliLyIgKyBKQVZBWF9YTUxfU09BUF9KQVIpLCBKQVZBWF9YTUxfU09BUF9KQVJfU0laRSk7Ci0JCWRlbGV0ZU9sZEphcih3ZWJNb2R1bGVQYXRoLmFwcGVuZCgiV0VCLUlORi9saWIvIiArIEpBVkFYX1dTRExfSkFSKSwgSkFWQVhfV1NETF9KQVJfU0laRSk7Ci0JCWRlbGV0ZU9sZEphcih3ZWJNb2R1bGVQYXRoLmFwcGVuZCgiV0VCLUlORi9saWIvIiArIENPTU1PTl9MT0dHSU5HX0pBUiksIENPTU1PTl9MT0dHSU5HX0pBUl9TSVpFKTsKLQotCX0KLQotCXByaXZhdGUgdm9pZCBkZWxldGVPbGRKYXIoSVBhdGggamFyUGF0aCwgbG9uZyBqYXJTaXplKSB7Ci0JCUlGaWxlIHJlc291cmNlID0gUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2VSb290KCkuZ2V0RmlsZShqYXJQYXRoKTsKLQkJaWYgKHJlc291cmNlLmV4aXN0cygpKSB7Ci0JCQkvLyBjYWxjdWxhdGUgdGhlIHNpemUgb2YgdGhlIHJlc291cmNlIGJ5IGdldHRpbmcgdGhlIGphdmEuaW8uRmlsZQotCQkJbG9uZyBmaWxlU2l6ZSA9IHJlc291cmNlLmdldExvY2F0aW9uKCkudG9GaWxlKCkubGVuZ3RoKCk7Ci0JCQlpZiAoZmlsZVNpemUgIT0gamFyU2l6ZSkgewotCQkJCWRlbGV0ZVJlc291cmNlKHJlc291cmNlKTsKLQkJCX0KLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBkZWxldGVSZXNvdXJjZShJRmlsZSByZXNvdXJjZSkgeyAvLyBkZWxldGUgdGhlIHJlc291cmNlCi0JCXRyeSB7Ci0JCQkvLyBTeXN0ZW0ub3V0LnByaW50bG4oIk9ic29sZXRlIEphciEhICIgKyByZXNvdXJjZS5nZXROYW1lKCkpOwotCQkJcmVzb3VyY2UuZGVsZXRlKHRydWUsIG51bGwpOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkgeyAvLyBlLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotCi0KLQkvKioKLQkgKiBBZGRlcyBBeGlzIEpBUnMgdG8gdGhlIGJ1aWxkIHBhdGggb2YgSmF2YSBwcm9qZWN0Ci0JICogCi0JICogQHBhcmFtIGVudgotCSAqIEBwYXJhbSBtb25pdG9yCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBJU3RhdHVzIGFkZEF4aXNKYXJzVG9CdWlsZFBhdGgoSVByb2plY3QgcHJvamVjdCwgSUVudmlyb25tZW50IGVudiwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7Ci0KLQkJSVN0YXR1cyBzdGF0dXM7Ci0KLQkJdHJ5IHsKLQkJCWdldEphdmFQcm9qZWN0Q2xhc3NwYXRoKGVudiwgbW9uaXRvcik7Ci0KLQkJCWFkZE5ld0phckVudHJ5KFBBVEhfVE9fSkFSU19JTl9QTFVHSU4gKyBBWElTX0pBUiwgZ2V0VGhlSmFyUGF0aChBWElTX1JVTlRJTUVfUExVR0lOX0lELCBQQVRIX1RPX0pBUlNfSU5fUExVR0lOICsgQVhJU19KQVIpKTsKLQkJCWFkZE5ld0phckVudHJ5KFBBVEhfVE9fSkFSU19JTl9QTFVHSU4gKyBDT01NT05fRElTQ09WRVJZX0pBUiwgZ2V0VGhlSmFyUGF0aChDT01NT05fRElTQ09WRVJZX1BMVUdJTl9JRCwgUEFUSF9UT19KQVJTX0lOX1BMVUdJTiArIENPTU1PTl9ESVNDT1ZFUllfSkFSKSk7Ci0JCQlhZGROZXdKYXJFbnRyeShQQVRIX1RPX0pBUlNfSU5fUExVR0lOICsgSkFWQVhfWE1MX1JQQ19KQVIsIGdldFRoZUphclBhdGgoSkFWQVhfWE1MX1JQQ19QTFVHSU5fSUQsIFBBVEhfVE9fSkFSU19JTl9QTFVHSU4gKyBKQVZBWF9YTUxfUlBDX0pBUikpOwotCQkJYWRkTmV3SmFyRW50cnkoUEFUSF9UT19KQVJTX0lOX1BMVUdJTiArIEpBVkFYX1hNTF9TT0FQX0pBUiwgZ2V0VGhlSmFyUGF0aChKQVZBWF9YTUxfU09BUF9QTFVHSU5fSUQsIFBBVEhfVE9fSkFSU19JTl9QTFVHSU4gKyBKQVZBWF9YTUxfU09BUF9KQVIpKTsKLQkJCWFkZE5ld0phckVudHJ5KFBBVEhfVE9fSkFSU19JTl9QTFVHSU4gKyBKQVZBWF9XU0RMX0pBUiwgZ2V0VGhlSmFyUGF0aChKQVZBWF9XU0RMX1BMVUdJTl9JRCwgUEFUSF9UT19KQVJTX0lOX1BMVUdJTiArIEpBVkFYX1dTRExfSkFSKSk7Ci0KLQkJCUlQYXRoIGNvbW1vbkxvZ2dpbmdKYXJQYXRoID0gQnVuZGxlVXRpbHMuZ2V0SmFycmVkUGx1Z2luUGF0aChDT01NT05fTE9HR0lOR19QTFVHSU5fSUQpOwotCQkJaWYgKGNvbW1vbkxvZ2dpbmdKYXJQYXRoICE9IG51bGwpIHsKLQkJCQlhZGROZXdKYXJFbnRyeShjb21tb25Mb2dnaW5nSmFyUGF0aC50b1N0cmluZygpLCBjb21tb25Mb2dnaW5nSmFyUGF0aCk7Ci0JCQl9Ci0JCQl1cGRhdGVDbGFzc3BhdGgobW9uaXRvcik7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQlzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9CQURfQlVJTERQQVRILCBlKTsKLQkJCXJldHVybiBzdGF0dXM7Ci0JCX0KLQotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gZW52Ci0JICogQHBhcmFtIG1vbml0b3IKLQkgKiBAcmV0dXJuIFRoZSBKYXZhIHByb2plY3QgY2xhc3NwYXRoCi0JICogQHRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24KLQkgKi8KLQlwcml2YXRlIElTdGF0dXMgZ2V0SmF2YVByb2plY3RDbGFzc3BhdGgoSUVudmlyb25tZW50IGVudiwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uIHsKLQotCQlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0KLQkJSUphdmFQcm9qZWN0IGphdmFQcm9qZWN0XyA9IG51bGw7Ci0JCW9sZENsYXNzcGF0aCA9IG51bGw7Ci0JCWphdmFQcm9qZWN0XyA9IEphdmFDb3JlLmNyZWF0ZShwcm9qZWN0KTsKLQotCQlvbGRDbGFzc3BhdGggPSBqYXZhUHJvamVjdF8uZ2V0UmF3Q2xhc3NwYXRoKCk7Ci0KLQkJcmV0dXJuIHN0YXR1czsKLQl9Ci0KLQkvKioKLQkgKiBTdG9yZSBuZXcgSkFSIG5hbWUgaW4gbmV3SmFyTmFtZXNMaXN0IGlmIGl0J3Mgbm90IGFscmVhZHkgb24gYnVpbGQgcGF0aAotCSAqIAotCSAqIEBwYXJhbSBqYXJOYW1lCi0JICogICAgICAgICAgICBuYW1lIG9mIHRoZSBKQVIKLQkgKiBAcGFyYW0gamFyUGF0aAotCSAqICAgICAgICAgICAgQWJzb2x1dGUgcGF0aCB0byB0aGUgSkFSCi0JICovCi0JcHJpdmF0ZSB2b2lkIGFkZE5ld0phckVudHJ5KFN0cmluZyBqYXJOYW1lLCBJUGF0aCBqYXJQYXRoKSB7Ci0KLQkJYm9vbGVhbiBmb3VuZCA9IGZhbHNlOwotCQlmb3IgKGludCBpID0gMDsgaSA8IG9sZENsYXNzcGF0aC5sZW5ndGg7IGkrKykgewotCQkJZm91bmQgPSBvbGRDbGFzc3BhdGhbaV0uZ2V0UGF0aCgpLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChqYXJOYW1lLnRvTG93ZXJDYXNlKCkpOwotCQkJaWYgKGZvdW5kKSB7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoIWZvdW5kKSB7Ci0JCQluZXdKYXJOYW1lc0xpc3QuYWRkKG5ldyBKYXJFbnRyeShqYXJOYW1lLCBqYXJQYXRoKSk7Ci0JCX0KLQotCX0KLQotCS8qKgotCSAqIFVwZGF0ZSB0aGUgSmF2YSBwcm9qZWN0IGNsYXNzcGF0aCBhZGRpbmcgY2xhc3NwYXRoIGZyb20gbmV3SmFyTmFtZXNMaXN0Ci0JICogdG8gb2xkQ2xhc3NwYXRoCi0JICogCi0JICogQHBhcmFtIG1vbml0b3IKLQkgKiBAcmV0dXJuCi0JICogQHRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24KLQkgKi8KLQlwcml2YXRlIElTdGF0dXMgdXBkYXRlQ2xhc3NwYXRoKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbiB7Ci0KLQkJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCi0JCWlmIChuZXdKYXJOYW1lc0xpc3Quc2l6ZSgpID4gMCkgewotCQkJSmFyRW50cnlbXSBuZXdKYXJFbnRyaWVzID0gKEphckVudHJ5W10pIG5ld0phck5hbWVzTGlzdC50b0FycmF5KG5ldyBKYXJFbnRyeVtde30pOwotCi0JCQlJQ2xhc3NwYXRoRW50cnlbXSBuZXdDbGFzc3BhdGggPSBuZXcgSUNsYXNzcGF0aEVudHJ5W29sZENsYXNzcGF0aC5sZW5ndGggKyBuZXdKYXJFbnRyaWVzLmxlbmd0aF07Ci0JCQlpbnQgaSA9IDA7Ci0JCQkvLyBBZGQgb2xkQ2xhc3NwYXRoIGVudHJpZXMKLQkJCXdoaWxlIChpIDwgb2xkQ2xhc3NwYXRoLmxlbmd0aCkgewotCQkJCW5ld0NsYXNzcGF0aFtpXSA9IG9sZENsYXNzcGF0aFtpXTsKLQkJCQlpKys7Ci0JCQl9Ci0KLQkJCWludCBtID0gMDsKLQkJCXdoaWxlIChpIDwgbmV3Q2xhc3NwYXRoLmxlbmd0aCkgewotCQkJCW5ld0NsYXNzcGF0aFtpXSA9IEphdmFDb3JlLm5ld0xpYnJhcnlFbnRyeShuZXdKYXJFbnRyaWVzW21dLmdldEphclBhdGgoKSwgbnVsbCwgbnVsbCk7Ci0JCQkJbSsrOwotCQkJCWkrKzsKLQkJCX0KLQotCQkJLy8KLQkJCS8vIFRoZW4gdXBkYXRlIHRoZSBwcm9qZWN0IGNsYXNzcGF0aC4KLQkJCS8vCi0KLQkJCUlKYXZhUHJvamVjdCBqYXZhUHJvamVjdCA9IEphdmFDb3JlLmNyZWF0ZShwcm9qZWN0KTsKLQkJCWphdmFQcm9qZWN0LnNldFJhd0NsYXNzcGF0aChuZXdDbGFzc3BhdGgsIG1vbml0b3IpOwotCi0JCX0KLQotCQlyZXR1cm4gc3RhdHVzOwotCi0JfQotCi0JLy8KLQkvLyBSZXR1cm5zIHRoZSBsb2NhbCBuYXRpdmUgcGF0aG5hbWUgb2YgdGhlIGphci4KLQkvLwotCXByaXZhdGUgSVBhdGggZ2V0VGhlSmFyUGF0aChTdHJpbmcgcGx1Z2luSWQsIFN0cmluZyB0aGVKYXIpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJaWYgKHBsdWdpbklkICE9IG51bGwpIHsKLQkJCVVSTCBsb2NhbFVSTCA9IFBsYXRmb3JtLmFzTG9jYWxVUkwoQnVuZGxlVXRpbHMuZ2V0VVJMRnJvbUJ1bmRsZShwbHVnaW5JZCwgdGhlSmFyKSk7Ci0JCQlyZXR1cm4gbmV3IFBhdGgobG9jYWxVUkwuZ2V0RmlsZSgpKTsKLQkJfQotCQllbHNlIHsKLQkJCXJldHVybiBuZXcgUGF0aCh0aGVKYXIpOwotCQl9Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRQcm9qZWN0KElQcm9qZWN0IHByb2plY3QpIHsKLQkJdGhpcy5wcm9qZWN0ID0gcHJvamVjdDsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBnZXRQcm9qZWN0UmVzdGFydFJlcXVpcmVkKCkgewotCQlyZXR1cm4gcHJvamVjdFJlc3RhcnRSZXF1aXJlZF8uYm9vbGVhblZhbHVlKCk7Ci0JfQotCi0JcHVibGljIGNsYXNzIEphckVudHJ5IHsKLQkJcHJpdmF0ZSBTdHJpbmcgamFyTmFtZTsKLQkJcHJpdmF0ZSBJUGF0aCBqYXJQYXRoOwotCi0JCXB1YmxpYyBKYXJFbnRyeShTdHJpbmcgbmFtZSwgSVBhdGggcGF0aCkgewotCQkJamFyTmFtZSA9IG5hbWU7Ci0JCQlqYXJQYXRoID0gcGF0aDsKLQkJfQotCi0JCXB1YmxpYyBTdHJpbmcgZ2V0SmFyTmFtZSgpIHsKLQkJCXJldHVybiBqYXJOYW1lOwotCQl9Ci0KLQkJcHVibGljIElQYXRoIGdldEphclBhdGgoKSB7Ci0JCQlyZXR1cm4gamFyUGF0aDsKLQkJfQotCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvdGFzay9EZWZhdWx0c0ZvckhUVFBCYXNpY0F1dGhDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS90YXNrL0RlZmF1bHRzRm9ySFRUUEJhc2ljQXV0aENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZkNzg5NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS90YXNrL0RlZmF1bHRzRm9ySFRUUEJhc2ljQXV0aENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudGFzazsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzaWwuRGlhbG9nV1dXQXV0aGVudGljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZGlzY292ZXJ5LldlYlNlcnZpY2VzUGFyc2VyRXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZUVudGl0eTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci0KLQotCi1wdWJsaWMgY2xhc3MgRGVmYXVsdHNGb3JIVFRQQmFzaWNBdXRoQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIHByaXZhdGUgV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXI7Ci0gIHByaXZhdGUgU3RyaW5nIHdzZGxTZXJ2aWNlVVJMOwotICBwcml2YXRlIEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW07Ci0KLSAgcHVibGljIERlZmF1bHRzRm9ySFRUUEJhc2ljQXV0aENvbW1hbmQoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotICAKLQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkgCi0JeyAgIAotICAgIGlmICh3c2RsU2VydmljZVVSTCAhPSBudWxsICYmIHdzZGxTZXJ2aWNlVVJMLmxlbmd0aCgpID4gMCkKLSAgICB7Ci0gICAgICBpZiAod2ViU2VydmljZXNQYXJzZXIgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgd2ViU2VydmljZXNQYXJzZXIgPSBuZXcgV2ViU2VydmljZXNQYXJzZXJFeHQoKTsKLSAgICAgICAgLy93c2Uuc2V0V1NQYXJzZXIod2ViU2VydmljZXNQYXJzZXIpOwotICAgICAgfQotICAgICAgV2ViU2VydmljZUVudGl0eSB3c0VudGl0eSA9IHdlYlNlcnZpY2VzUGFyc2VyLmdldFdlYlNlcnZpY2VFbnRpdHlCeVVSSSh3c2RsU2VydmljZVVSTCk7Ci0gICAgICBpZiAod3NFbnRpdHkgPT0gbnVsbCB8fCAhd3NFbnRpdHkuaXNFbnRpdHlSZXNvbHZlZCgpKQotICAgICAgewotICAgICAgICB3ZWJTZXJ2aWNlc1BhcnNlci5zZXRVUkkod3NkbFNlcnZpY2VVUkwpOwotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIHdlYlNlcnZpY2VzUGFyc2VyLnBhcnNlKFdlYlNlcnZpY2VzUGFyc2VyLlBBUlNFX05PTkUpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChXV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbiB3d3dhZSkKLSAgICAgICAgewotICAgICAgICAgIERpYWxvZ1dXV0F1dGhlbnRpY2F0aW9uIGRpYWxvZyA9IG5ldyBEaWFsb2dXV1dBdXRoZW50aWNhdGlvbihQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldFNoZWxsKCkpOwotICAgICAgICAgIGRpYWxvZy5oYW5kbGVXV1dBdXRoZW50aWNhdGlvbih3d3dhZSk7Ci0gICAgICAgICAgU3RyaW5nIHVzZXJuYW1lID0gZGlhbG9nLmdldFVzZXJuYW1lKCk7Ci0gICAgICAgICAgU3RyaW5nIHBhc3N3b3JkID0gZGlhbG9nLmdldFBhc3N3b3JkKCk7Ci0gICAgICAgICAgaWYgKHVzZXJuYW1lICE9IG51bGwgJiYgcGFzc3dvcmQgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB3ZWJTZXJ2aWNlc1BhcnNlci5zZXRIVFRQQmFzaWNBdXRoVXNlcm5hbWUodXNlcm5hbWUpOwotICAgICAgICAgICAgd2ViU2VydmljZXNQYXJzZXIuc2V0SFRUUEJhc2ljQXV0aFBhc3N3b3JkKHBhc3N3b3JkKTsKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICB3ZWJTZXJ2aWNlc1BhcnNlci5wYXJzZShXZWJTZXJ2aWNlc1BhcnNlci5QQVJTRV9OT05FKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHdlYlNlcnZpY2VzUGFyc2VyLnNldEhUVFBCYXNpY0F1dGhVc2VybmFtZShudWxsKTsKLSAgICAgICAgICAgIHdlYlNlcnZpY2VzUGFyc2VyLnNldEhUVFBCYXNpY0F1dGhQYXNzd29yZChudWxsKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgd3NFbnRpdHkgPSB3ZWJTZXJ2aWNlc1BhcnNlci5nZXRXZWJTZXJ2aWNlRW50aXR5QnlVUkkod3NkbFNlcnZpY2VVUkwpOwotICAgICAgfQotICAgICAgaWYgKHdzRW50aXR5ICE9IG51bGwgJiYgd3NFbnRpdHkuZ2V0VHlwZSgpID09IFdlYlNlcnZpY2VFbnRpdHkuVFlQRV9XU0RMKQotICAgICAgewotICAgICAgICBTdHJpbmcgaHR0cFVzZXJuYW1lID0gd3NFbnRpdHkuZ2V0SFRUUFVzZXJuYW1lKCk7Ci0gICAgICAgIFN0cmluZyBodHRwUGFzc3dvcmQgPSB3c0VudGl0eS5nZXRIVFRQUGFzc3dvcmQoKTsKLSAgICAgICAgaWYgKGh0dHBVc2VybmFtZSAhPSBudWxsICYmIGh0dHBQYXNzd29yZCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgamF2YVdTRExQYXJhbS5zZXRIVFRQVXNlcm5hbWUoaHR0cFVzZXJuYW1lKTsKLSAgICAgICAgICBqYXZhV1NETFBhcmFtLnNldEhUVFBQYXNzd29yZChodHRwUGFzc3dvcmQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0gIC8qKgotICAgKiBAcGFyYW0gamF2YVdTRExQYXJhbSBUaGUgamF2YVdTRExQYXJhbSB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRKYXZhV1NETFBhcmFtKEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW0pIHsKLSAgICB0aGlzLmphdmFXU0RMUGFyYW0gPSBqYXZhV1NETFBhcmFtOwotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSB3c2RsU2VydmljZVVSTCBUaGUgd3NkbFNlcnZpY2VVUkwgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0V3NkbFNlcnZpY2VVUkwoU3RyaW5nIHdzZGxTZXJ2aWNlVVJMKSB7Ci0gICAgdGhpcy53c2RsU2VydmljZVVSTCA9IHdzZGxTZXJ2aWNlVVJMOwotICB9Ci0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgamF2YVdTRExQYXJhbS4KLSAgICovCi0gIHB1YmxpYyBKYXZhV1NETFBhcmFtZXRlciBnZXRKYXZhV1NETFBhcmFtKCkgewotICAgIHJldHVybiBqYXZhV1NETFBhcmFtOwotICB9Ci0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgd2ViU2VydmljZXNQYXJzZXIuCi0gICAqLwotICBwdWJsaWMgV2ViU2VydmljZXNQYXJzZXIgZ2V0V2ViU2VydmljZXNQYXJzZXIoKSB7Ci0gICAgcmV0dXJuIHdlYlNlcnZpY2VzUGFyc2VyOwotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSB3ZWJTZXJ2aWNlc1BhcnNlciBUaGUgd2ViU2VydmljZXNQYXJzZXIgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZXNQYXJzZXIoV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXIpIHsKLSAgICB0aGlzLndlYlNlcnZpY2VzUGFyc2VyID0gd2ViU2VydmljZXNQYXJzZXI7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvdGFzay9SZWZyZXNoUHJvamVjdENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3Rhc2svUmVmcmVzaFByb2plY3RDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1MGI1MjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvdGFzay9SZWZyZXNoUHJvamVjdENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS50YXNrOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLkF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLQotCi1wdWJsaWMgY2xhc3MgUmVmcmVzaFByb2plY3RDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLQlwcml2YXRlIElQcm9qZWN0IHByb2plY3Q7Ci0KLQlwdWJsaWMgUmVmcmVzaFByb2plY3RDb21tYW5kKCkKLQl7Ci0JfQotCi0JLyoqCi0JKiBFeGVjdXRlIFJlZnJlc2hQcm9qZWN0VGFzawotCSovCi0JcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApIAotCXsKLQkJSUVudmlyb25tZW50IGVudiA9IGdldEVudmlyb25tZW50KCk7Ci0JCXRyeQotCQl7Ci0JCQlpZiAocHJvamVjdCE9bnVsbCkKLQkJCXByb2plY3QucmVmcmVzaExvY2FsKElQcm9qZWN0LkRFUFRIX0lORklOSVRFLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKQotCQl7Ci0JCSAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfUkVGUkVTSF9QUk9KRUNULCBlKTsKLQkJICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0JCSAgcmV0dXJuIHN0YXR1czsKLQkJfQotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQl9Ci0KLQlwdWJsaWMgSVByb2plY3QgZ2V0UHJvamVjdCgpIHsKLQkJcmV0dXJuIHByb2plY3Q7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0UHJvamVjdChJUHJvamVjdCBwcm9qZWN0KSB7Ci0JCXRoaXMucHJvamVjdCA9IHByb2plY3Q7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvdGFzay9TdHViMkJlYW5Db21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS90YXNrL1N0dWIyQmVhbkNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJjZWU2Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS90YXNrL1N0dWIyQmVhbkNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMTYgICAxMTUxNDQgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNjA1MDMgICAxMjY4MTkgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDUxNSAgIDExODMxNSBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24KLSAqIDIwMDYwNzI4ICAgMTQ1NDI2IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS50YXNrOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgamF2YXgud3NkbC5TZXJ2aWNlOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBBZGRyZXNzOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLk5hbWVNYXBwaW5nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkuQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5Nb2R1bGVDb3JlTmF0dXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VzUGFyc2VyOwotCi0KLXB1YmxpYyBjbGFzcyBTdHViMkJlYW5Db21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLSAgcHJpdmF0ZSBXZWJTZXJ2aWNlc1BhcnNlciB3ZWJTZXJ2aWNlc1BhcnNlcjsKLSAgcHJpdmF0ZSBKYXZhV1NETFBhcmFtZXRlciBqYXZhV1NETFBhcmFtXzsKLSAgcHJpdmF0ZSBTdHJpbmcgZGlzY292ZXJlZFdzZGxQb3J0RWxlbWVudE5hbWU7Ci0gIHByaXZhdGUgVmVjdG9yIHBvcnRUeXBlc187Ci0gIHByaXZhdGUgU3RyaW5nIHByb3h5QmVhbl87Ci0gIHByaXZhdGUgU3RyaW5nIG91dHB1dEZvbGRlcl87Ci0gIHByaXZhdGUgU3RyaW5nIHByb3h5RW5kcG9pbnRfOwotICAKLSAgcHJpdmF0ZSBJUHJvamVjdCBjbGllbnRQcm9qZWN0XzsKLSAgCi0gIHB1YmxpYyBTdHViMkJlYW5Db21tYW5kKCl7Ci0JICBzdXBlcigpOwotCSAgcG9ydFR5cGVzXyA9IG5ldyBWZWN0b3IoKTsJICAKLSAgfQotCi0gIC8qKgotICAqIEV4ZWN1dGUKLSAgKi8KLQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkgCi0JewotCQlJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQgPSBnZXRFbnZpcm9ubWVudCgpOyAgICAgICAKLSAgICBTdHJpbmcgaW5wdXRXc2RsTG9jYXRpb24gPSBqYXZhV1NETFBhcmFtXy5nZXRJbnB1dFdzZGxMb2NhdGlvbigpOwotICAgIERlZmluaXRpb24gZGVmID0gd2ViU2VydmljZXNQYXJzZXIuZ2V0V1NETERlZmluaXRpb24oaW5wdXRXc2RsTG9jYXRpb24pOwotICAgIC8qCi0gICAgKiBIYWNrOiBBeGlzIGlzIG5vdCB1c2luZyBhIHByb3BlciBqYXZhLm5ldC5VUkwgYXMgaXRzIGlucHV0V3NkbExvY2F0aW9uLgotICAgICogV2UgbmVlZCB0byBjb252ZXJ0IGl0IHRvIGEgcHJvcGVyIGZpbGUgVVJMLgotICAgICovCi0gICAgaWYgKGRlZiA9PSBudWxsKQotICAgIHsKLSAgICAgIEZpbGUgZmlsZSA9IG5ldyBGaWxlKGlucHV0V3NkbExvY2F0aW9uKTsKLSAgICAgIGlmIChmaWxlLmV4aXN0cygpKQotICAgICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIGRlZiA9IHdlYlNlcnZpY2VzUGFyc2VyLmdldFdTRExEZWZpbml0aW9uKGZpbGUudG9VUkwoKS50b1N0cmluZygpKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIG11cmxlKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy9FbnN1cmUgdGhlIGNsaWVudCBwcm9qZWN0IGlzIGVpdGhlciBhIGZsZXhpYmxlIHByb2plY3Qgb3IgYSBKYXZhIHByb2plY3QKLSAgICBNb2R1bGVDb3JlTmF0dXJlIG1uID0gTW9kdWxlQ29yZU5hdHVyZS5nZXRNb2R1bGVDb3JlTmF0dXJlKGNsaWVudFByb2plY3RfKTsKLSAgICBpZiAobW49PW51bGwpCi0gICAgewotICAgICAgICAvLyBDaGVjayBpZiBpdCdzIGEgcGxhaW4gb2xkIEphdmEgcHJvamVjdCAgICAKLQkJaWYgKCFSZXNvdXJjZVV0aWxzLmlzSmF2YVByb2plY3QoY2xpZW50UHJvamVjdF8pKQotCQl7Ci0JIAkJICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfV0FSTl9OT19KQVZBX05BVFVSRSk7CQotCSAJCSAgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCSAJCSAgIHJldHVybiBzdGF0dXM7Ci0JCX0gICAgCQotICAgIH0KLSAgICAKLSAgICBNYXAgcGtnMm5zTWFwcGluZyA9IGphdmFXU0RMUGFyYW1fLmdldE1hcHBpbmdzKCk7Ci0gICAgTWFwIHNlcnZpY2VzID0gZGVmLmdldFNlcnZpY2VzKCk7Ci0gICAgZm9yIChJdGVyYXRvciBpdCA9IHNlcnZpY2VzLnZhbHVlcygpLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgewotICAgICAgU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2UpaXQubmV4dCgpOwotICAgICAgU3RyaW5nIHNlcnZpY2VQa2dOYW1lID0gTmFtZU1hcHBpbmdVdGlscy5nZXRQYWNrYWdlTmFtZShzZXJ2aWNlLmdldFFOYW1lKCkuZ2V0TmFtZXNwYWNlVVJJKCksIHBrZzJuc01hcHBpbmcpOwotICAgICAgU3RyaW5nIHNlcnZpY2VDbGFzc05hbWUgPSBjb21wdXRlQ2xhc3NOYW1lKHNlcnZpY2UuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSk7Ci0gICAgICBTdHJpbmcgam5kaU5hbWUgPSBzZXJ2aWNlQ2xhc3NOYW1lOwotICAgICAgTWFwIHBvcnRzID0gc2VydmljZS5nZXRQb3J0cygpOwotICAgICAgZm9yIChJdGVyYXRvciBpdDIgPSBwb3J0cy52YWx1ZXMoKS5pdGVyYXRvcigpOyBpdDIuaGFzTmV4dCgpOykKLSAgICAgIHsKLSAgICAgICAgaWYgKHNlcnZpY2VDbGFzc05hbWUuZXF1YWxzKGNvbXB1dGVDbGFzc05hbWUoKChQb3J0KWl0Mi5uZXh0KCkpLmdldEJpbmRpbmcoKS5nZXRQb3J0VHlwZSgpLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkpKSkKLSAgICAgICAgewotICAgICAgICAgIHNlcnZpY2VDbGFzc05hbWUgPSBzZXJ2aWNlQ2xhc3NOYW1lICsgIl9TZXJ2aWNlIjsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZm9yIChJdGVyYXRvciBpdDIgPSBwb3J0cy52YWx1ZXMoKS5pdGVyYXRvcigpOyBpdDIuaGFzTmV4dCgpOykKLSAgICAgIHsKLSAgICAgICAgUG9ydCBwb3J0ID0gKFBvcnQpaXQyLm5leHQoKTsKLSAgICAgICAgaWYgKGRpc2NvdmVyZWRXc2RsUG9ydEVsZW1lbnROYW1lICE9IG51bGwgJiYgIWRpc2NvdmVyZWRXc2RsUG9ydEVsZW1lbnROYW1lLmVxdWFscyhwb3J0LmdldE5hbWUoKSkpCi0gICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFNPQVBBZGRyZXNzIHNvYXBBZGRyZXNzID0gbnVsbDsKLSAgICAgICAgTGlzdCBleHRlbnNpYmlsaXR5RWxlbWVudHMgPSBwb3J0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgICBpZiAoZXh0ZW5zaWJpbGl0eUVsZW1lbnRzICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0MyA9IGV4dGVuc2liaWxpdHlFbGVtZW50cy5pdGVyYXRvcigpOyBpdDMuaGFzTmV4dCgpOykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBPYmplY3Qgb2JqZWN0ID0gaXQzLm5leHQoKTsKLSAgICAgICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBTT0FQQWRkcmVzcykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgc29hcEFkZHJlc3MgPSAoU09BUEFkZHJlc3Mpb2JqZWN0OwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHNvYXBBZGRyZXNzICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBwcm94eUVuZHBvaW50XyA9IHNvYXBBZGRyZXNzLmdldExvY2F0aW9uVVJJKCk7Ci0gICAgICAgICAgUG9ydFR5cGUgcG9ydFR5cGUgPSBwb3J0LmdldEJpbmRpbmcoKS5nZXRQb3J0VHlwZSgpOwotICAgICAgICAgIFFOYW1lIHBvcnRUeXBlUU5hbWUgPSBwb3J0VHlwZS5nZXRRTmFtZSgpOwotICAgICAgICAgIFN0cmluZ0J1ZmZlciBwb3J0VHlwZUlEID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICAgIHBvcnRUeXBlSUQuYXBwZW5kKHBvcnRUeXBlUU5hbWUuZ2V0TmFtZXNwYWNlVVJJKCkpOwotICAgICAgICAgIHBvcnRUeXBlSUQuYXBwZW5kKCIjIik7Ci0gICAgICAgICAgcG9ydFR5cGVJRC5hcHBlbmQocG9ydFR5cGVRTmFtZS5nZXRMb2NhbFBhcnQoKSk7Ci0gICAgICAgICAgaWYgKCFwb3J0VHlwZXNfLmNvbnRhaW5zKHBvcnRUeXBlSUQudG9TdHJpbmcoKSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgcG9ydFR5cGVzXy5hZGQocG9ydFR5cGVJRC50b1N0cmluZygpKTsKLSAgICAgICAgICAgIFN0dWIyQmVhbkluZm8gc3R1YjJCZWFuSW5mbyA9IG5ldyBTdHViMkJlYW5JbmZvKCk7Ci0gICAgICAgICAgICBzdHViMkJlYW5JbmZvLnNldENsaWVudFByb2plY3QoY2xpZW50UHJvamVjdF8pOwotICAgICAgICAgICAgc3R1YjJCZWFuSW5mby5zZXRPdXRwdXRGb2xkZXIoIG91dHB1dEZvbGRlcl8gKTsKLSAgICAgICAgICAgIFN0cmluZyBwb3J0VHlwZVBrZ05hbWUgPSBOYW1lTWFwcGluZ1V0aWxzLmdldFBhY2thZ2VOYW1lKHBvcnRUeXBlLmdldFFOYW1lKCkuZ2V0TmFtZXNwYWNlVVJJKCksIHBrZzJuc01hcHBpbmcpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogSWYgdGhlIHBhY2thZ2UgbmFtZSBhbmQgbWV0aG9kIG5hbWUgYXJlIHRoZSBzYW1lIHRoZSBBeGlzCi0gICAgICAgICAgICAgKiB3c2RsMkphdmEgRW1pdHRlciBhZGRzIGEgIl9wa2ciIHN1ZmZpeCB0byB0aGUgcGFja2FnZSBuYW1lCi0gICAgICAgICAgICAgKiBvZiBnZW5lcmF0ZWQgY29kZS4KLSAgICAgICAgICAgICAqIAotICAgICAgICAgICAgICogV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHByb3h5IGdldCdzIHB1dCBpbiB0aGlzIHNhbWUgcGFja2FnZQotICAgICAgICAgICAgICogaWYgYW4gb3BlcmF0aW9uIG5hbWUgaXMgdGhlIHNhbWUgYXMgdGhlIHBhY2thZ2UgbmFtZS4KLSAgICAgICAgICAgICAqIChNYXJrIEh1dGNoaW5zb24gLSBCdWcgMTE4MzE1KQotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBMaXN0IG9wZXJhdGlvbnMgPSBwb3J0VHlwZS5nZXRPcGVyYXRpb25zKCk7Ci0gICAgICAgICAgICBJdGVyYXRvciBvcGVySXRlciA9IG9wZXJhdGlvbnMuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgIGJvb2xlYW4gYWRkU3VmZml4ID0gZmFsc2U7Ci0gICAgICAgICAgICB3aGlsZSAob3Blckl0ZXIuaGFzTmV4dCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgCU9wZXJhdGlvbiBvcGVyYXRpb24gPSAoT3BlcmF0aW9uKW9wZXJJdGVyLm5leHQoKTsKLSAgICAgICAgICAgIAlpZiAob3BlcmF0aW9uLmdldE5hbWUoKS5lcXVhbHMocG9ydFR5cGVQa2dOYW1lKSkKLSAgICAgICAgICAgIAl7Ci0gICAgICAgICAgICAJCWFkZFN1ZmZpeCA9IHRydWU7ICAgICAgICAgICAgCQotICAgICAgICAgICAgCX0KLSAgICAgICAgICAgIH0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChhZGRTdWZmaXgpIHsKLSAgICAgICAgICAgIAlwb3J0VHlwZVBrZ05hbWUgPSBwb3J0VHlwZVBrZ05hbWUgKyAiX3BrZyI7Ci0gICAgICAgICAgICAJc2VydmljZVBrZ05hbWUgPSBzZXJ2aWNlUGtnTmFtZSArICJfcGtnIjsKLSAgICAgICAgICAgIH0gICAgICAgICAgICAKLSAgICAgICAgICAgIAotICAgICAgICAgICAgU3RyaW5nIHBvcnRUeXBlQ2xhc3NOYW1lID0gY29tcHV0ZUNsYXNzTmFtZShwb3J0VHlwZVFOYW1lLmdldExvY2FsUGFydCgpKTsKLSAgICAgICAgICAgIHN0dWIyQmVhbkluZm8uc2V0UGFja2FnZShwb3J0VHlwZVBrZ05hbWUpOwotICAgICAgICAgICAgc3R1YjJCZWFuSW5mby5zZXRDbGFzcyhwb3J0VHlwZUNsYXNzTmFtZSArICJQcm94eSIpOwotICAgICAgICAgICAgcHJveHlCZWFuXyA9IHBvcnRUeXBlUGtnTmFtZSsiLiIrcG9ydFR5cGVDbGFzc05hbWUrIlByb3h5IjsKLSAgICAgICAgICAgIGlmIChqbmRpTmFtZS5lcXVhbHMocG9ydFR5cGVDbGFzc05hbWUpKQotICAgICAgICAgICAgICBwb3J0VHlwZUNsYXNzTmFtZSA9IHBvcnRUeXBlQ2xhc3NOYW1lICsgIl9Qb3J0VHlwZSI7Ci0gICAgICAgICAgICBzdHViMkJlYW5JbmZvLmFkZFNFSShwb3J0VHlwZVBrZ05hbWUsIHBvcnRUeXBlQ2xhc3NOYW1lLCBzZXJ2aWNlUGtnTmFtZSwgc2VydmljZUNsYXNzTmFtZSwgam5kaU5hbWUsIE5hbWVNYXBwaW5nVXRpbHMuZ2V0UG9ydE5hbWUocG9ydC5nZXROYW1lKCkpKTsKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgeyAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgIHN0dWIyQmVhbkluZm8ud3JpdGUoIG1vbml0b3IsIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKSApOwotICAgICAgICAgICAgICBpZiAoZGlzY292ZXJlZFdzZGxQb3J0RWxlbWVudE5hbWUgIT0gbnVsbCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIFRoZSBkaXNjb3ZlcmVkIHBvcnQgd2FzIHByb2Nlc3NlZC4gSWdub3JlIGFsbCBvdGhlciBwb3J0cyBhbmQgc2VydmljZXMuCi0gICAgICAgICAgICAgICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLQotICBwcml2YXRlIFN0cmluZyBjb21wdXRlQ2xhc3NOYW1lKFN0cmluZyBjbGFzc05hbWUpCi0gIHsKLQkgIHJldHVybiBOYW1lTWFwcGluZ1V0aWxzLnhtbE5hbWVUb0phdmFDbGFzcyhjbGFzc05hbWUpOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgamF2YVdTRExQYXJhbS4KLSAgKiBAcmV0dXJuIEphdmFXU0RMUGFyYW1ldGVyCi0gICovCi0gIHB1YmxpYyBKYXZhV1NETFBhcmFtZXRlciBnZXRKYXZhV1NETFBhcmFtKCkKLSAgewotICAgIHJldHVybiBqYXZhV1NETFBhcmFtXzsKLSAgfQotCi0gIC8qKgotICAqIFNldHMgdGhlIGphdmFXU0RMUGFyYW0uCi0gICogQHBhcmFtIGphdmFXU0RMUGFyYW0gVGhlIGphdmFXU0RMUGFyYW0gdG8gc2V0Ci0gICovCi0gIHB1YmxpYyB2b2lkIHNldEphdmFXU0RMUGFyYW0oSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbSkKLSAgewotICAgIGphdmFXU0RMUGFyYW1fID0gamF2YVdTRExQYXJhbTsKLSAgfQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSB3ZWJTZXJ2aWNlc1BhcnNlci4KLSAgICovCi0gIHB1YmxpYyBXZWJTZXJ2aWNlc1BhcnNlciBnZXRXZWJTZXJ2aWNlc1BhcnNlcigpIHsKLSAgICByZXR1cm4gd2ViU2VydmljZXNQYXJzZXI7Ci0gIH0KLQotICAvKioKLSAgICogQHBhcmFtIHdlYlNlcnZpY2VzUGFyc2VyIFRoZSB3ZWJTZXJ2aWNlc1BhcnNlciB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlc1BhcnNlcihXZWJTZXJ2aWNlc1BhcnNlciB3ZWJTZXJ2aWNlc1BhcnNlcikgewotICAgIHRoaXMud2ViU2VydmljZXNQYXJzZXIgPSB3ZWJTZXJ2aWNlc1BhcnNlcjsKLSAgfQotCi0KLSAgLyoqCi0gICAqIEBwYXJhbSBkaXNjb3ZlcmVkV3NkbFBvcnRFbGVtZW50TmFtZSBUaGUgZGlzY292ZXJlZFdzZGxQb3J0RWxlbWVudE5hbWUgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RGlzY292ZXJlZFdzZGxQb3J0RWxlbWVudE5hbWUoU3RyaW5nIGRpc2NvdmVyZWRXc2RsUG9ydEVsZW1lbnROYW1lKSB7Ci0gICAgdGhpcy5kaXNjb3ZlcmVkV3NkbFBvcnRFbGVtZW50TmFtZSA9IGRpc2NvdmVyZWRXc2RsUG9ydEVsZW1lbnROYW1lOwotICB9Ci0KLSAgLyoqCi0JKiBAcGFyYW0gY2xpZW50UHJvamVjdCBUaGUgY2xpZW50UHJvamVjdCB0byBzZXQuCi0JKi8KLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50UHJvamVjdChJUHJvamVjdCBjbGllbnRQcm9qZWN0KSB7Ci0JCXRoaXMuY2xpZW50UHJvamVjdF8gPSBjbGllbnRQcm9qZWN0OwotICB9Ci0JCi0JLyoqCi0JICogQHJldHVybiBSZXR1cm5zIHRoZSBwcm94eUJlYW4uCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRQcm94eUJlYW4oKSB7Ci0JCXJldHVybiBwcm94eUJlYW5fOwotCX0JCi0JCi0JcHVibGljIHZvaWQgc2V0T3V0cHV0Rm9sZGVyKCBTdHJpbmcgb3V0cHV0Rm9sZGVyICkKLQl7Ci0JCW91dHB1dEZvbGRlcl8gPSBvdXRwdXRGb2xkZXI7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRQcm94eUVuZHBvaW50KCkgewotCQlyZXR1cm4gcHJveHlFbmRwb2ludF87Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvdGFzay9TdHViMkJlYW5JbmZvLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS90YXNrL1N0dWIyQmVhbkluZm8uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTg4MDViNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS90YXNrL1N0dWIyQmVhbkluZm8uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYyMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMTYgICAxMTUxNDQgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNjAyMTYgICAxMjcxMzggcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNjA1MTcgICAxNDE0ODEgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNzAzMTMgICAxNzY1ODAgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIEdlbmVyYXRlIGEgQ2xpZW50IFdTIFByb3h5IGFjY2VwdGluZyBVUkwKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnRhc2s7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5Xcml0ZXI7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkphdmFDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhSGVscGVyczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkphdmFWaXNpYmlsaXR5S2luZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5NZXRob2Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KYXZhTU9GVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5wbHVnaW4uV2ViU2VydmljZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29tbW9uLkZpbGVSZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSVN0YXR1c0hhbmRsZXI7Ci1pbXBvcnQgY29tLmlibS5pY3UudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci0KLXB1YmxpYyBjbGFzcyBTdHViMkJlYW5JbmZvCi17Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIE5FV19MSU5FID0gU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpOwotCi0gIHByaXZhdGUgaW50IGluZGVudENvdW50OwotCi0gIHByaXZhdGUgU3RyaW5nIHBhY2thZ2VfOwotICBwcml2YXRlIFN0cmluZ0J1ZmZlciBpbXBvcnRzXzsKLSAgcHJpdmF0ZSBTdHJpbmdCdWZmZXIgc2Vpc187Ci0gIHByaXZhdGUgU3RyaW5nQnVmZmVyIHNlcnZpY2VzXzsKLSAgcHJpdmF0ZSBTdHJpbmdCdWZmZXIgam5kaU5hbWVzXzsKLSAgcHJpdmF0ZSBTdHJpbmdCdWZmZXIgcG9ydHNfOwotICBwcml2YXRlIFN0cmluZyBjbGFzc187Ci0gIHByaXZhdGUgVmVjdG9yIHVzZWROYW1lczsKLSAgCi0gIHByaXZhdGUgSVByb2plY3QgY2xpZW50UHJvamVjdF87Ci0gIHByaXZhdGUgU3RyaW5nICAgb3V0cHV0Rm9sZGVyXzsKLSAgCi0gIHB1YmxpYyBTdHViMkJlYW5JbmZvKCkKLSAgewotICAgIGluZGVudENvdW50ID0gMDsKLSAgICBwYWNrYWdlXyA9IG51bGw7Ci0gICAgaW1wb3J0c18gPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgc2Vpc18gPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgc2VydmljZXNfID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIGpuZGlOYW1lc18gPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgcG9ydHNfID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIGNsYXNzXyA9ICJTRUlCZWFuIjsKLSAgICB1c2VkTmFtZXMgPSBuZXcgVmVjdG9yKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRQcm9qZWN0KElQcm9qZWN0IGNsaWVudFByb2plY3QpIHsKLSAgCXRoaXMuY2xpZW50UHJvamVjdF8gPSAgY2xpZW50UHJvamVjdDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0T3V0cHV0Rm9sZGVyKCBTdHJpbmcgb3V0cHV0Rm9sZGVyICkKLSAgewotICAJb3V0cHV0Rm9sZGVyXyA9IG91dHB1dEZvbGRlcjsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0UGFja2FnZShTdHJpbmcgcGtnTmFtZSkKLSAgewotCSAgcGFja2FnZV8gPSBwa2dOYW1lOwotICB9Ci0KLSAgcHVibGljIHZvaWQgYWRkSW1wb3J0cyhTdHJpbmcgcGtnTmFtZSwgU3RyaW5nIGNsYXNzTmFtZSkKLSAgewotICAgIGltcG9ydHNfLmFwcGVuZCh0b0Z1bGx5UXVhbGlmaWVkQ2xhc3NOYW1lKHBrZ05hbWUsIGNsYXNzTmFtZSkpOwotICAgIGltcG9ydHNfLmFwcGVuZCgiOyIpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgYWRkU0VJKFN0cmluZyBzZWlQa2dOYW1lLCBTdHJpbmcgc2VpQ2xhc3NOYW1lLCBTdHJpbmcgc2VydmljZVBrZ05hbWUsIFN0cmluZyBzZXJ2aWNlQ2xhc3NOYW1lLCBTdHJpbmcgcG9ydE5hbWUpCi0gIHsKLSAgICBhZGRTRUkoc2VpUGtnTmFtZSwgc2VpQ2xhc3NOYW1lLCBzZXJ2aWNlUGtnTmFtZSwgc2VydmljZUNsYXNzTmFtZSwgc2VydmljZUNsYXNzTmFtZSwgcG9ydE5hbWUpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgYWRkU0VJKFN0cmluZyBzZWlQa2dOYW1lLCBTdHJpbmcgc2VpQ2xhc3NOYW1lLCBTdHJpbmcgc2VydmljZVBrZ05hbWUsIFN0cmluZyBzZXJ2aWNlQ2xhc3NOYW1lLCBTdHJpbmcgam5kaU5hbWUsIFN0cmluZyBwb3J0TmFtZSkKLSAgewotICAgIHNlaXNfLmFwcGVuZCh0b0Z1bGx5UXVhbGlmaWVkQ2xhc3NOYW1lKHNlaVBrZ05hbWUsIHNlaUNsYXNzTmFtZSkpOwotICAgIHNlaXNfLmFwcGVuZCgiOyIpOwotICAgIHNlcnZpY2VzXy5hcHBlbmQodG9GdWxseVF1YWxpZmllZENsYXNzTmFtZShzZXJ2aWNlUGtnTmFtZSwgc2VydmljZUNsYXNzTmFtZSkpOwotICAgIHNlcnZpY2VzXy5hcHBlbmQoIjsiKTsKLSAgICBqbmRpTmFtZXNfLmFwcGVuZChqbmRpTmFtZSk7Ci0gICAgam5kaU5hbWVzXy5hcHBlbmQoIjsiKTsKLSAgICBwb3J0c18uYXBwZW5kKHBvcnROYW1lKTsKLSAgICBwb3J0c18uYXBwZW5kKCI7Iik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRDbGFzcyhTdHJpbmcgY2xhc3NOYW1lKQotICB7Ci0JICBjbGFzc18gPSBjbGFzc05hbWU7Ci0gIH0KLQotICBwcml2YXRlIFN0cmluZyB0b0Z1bGx5UXVhbGlmaWVkQ2xhc3NOYW1lKFN0cmluZyBwa2dOYW1lLCBTdHJpbmcgY2xhc3NOYW1lKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIHNiLmFwcGVuZChwa2dOYW1lKTsKLSAgICBzYi5hcHBlbmQoIi4iKTsKLSAgICBzYi5hcHBlbmQoY2xhc3NOYW1lKTsKLSAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIGdldFBhY2thZ2VOYW1lKFN0cmluZyBxbmFtZSkKLSAgewotICAgIGludCBpbmRleCA9IHFuYW1lLmxhc3RJbmRleE9mKCIuIik7Ci0gICAgaWYgKGluZGV4ICE9IC0xKQotICAgICAgcmV0dXJuIHFuYW1lLnN1YnN0cmluZygwLCBpbmRleCk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIHFuYW1lOwotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0Q2xhc3NOYW1lKFN0cmluZyBxbmFtZSkKLSAgewotICAgIGludCBpbmRleCA9IHFuYW1lLmxhc3RJbmRleE9mKCIuIik7Ci0gICAgaWYgKGluZGV4ICE9IC0xKQotICAgICAgcmV0dXJuIHFuYW1lLnN1YnN0cmluZyhpbmRleCsxLCBxbmFtZS5sZW5ndGgoKSk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIHFuYW1lOwotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgZmlyc3RDaGFyVG9Mb3dlckNhc2UoU3RyaW5nIHMpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgc2IuYXBwZW5kKHMuc3Vic3RyaW5nKDAsIDEpLnRvTG93ZXJDYXNlKCkpOwotICAgIHNiLmFwcGVuZChzLnN1YnN0cmluZygxLCBzLmxlbmd0aCgpKSk7Ci0gICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwcml2YXRlIFN0cmluZyBnZXRGdWxseVF1YWxpZmllZE5hbWUoSmF2YUhlbHBlcnMgamF2YUhlbHBlcnMpCi0gIHsKLSAgICBpZiAoamF2YUhlbHBlcnMuaXNQcmltaXRpdmUoKSkKLSAgICAgIHJldHVybiBqYXZhSGVscGVycy5nZXRKYXZhTmFtZSgpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBqYXZhSGVscGVycy5nZXRRdWFsaWZpZWROYW1lKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB3cml0ZShJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciwgSVN0YXR1c0hhbmRsZXIgc3RhdHVzTW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uCi0gIHsKLSAgICBJUGF0aCAgICAgICAgb3V0cHV0UGF0aCA9IG5ldyBQYXRoKCBvdXRwdXRGb2xkZXJfICk7Ci0gICAgSVByb2plY3QgICAgIHByb2plY3QgICAgPSBSZXNvdXJjZVV0aWxzLmdldFByb2plY3RPZiggb3V0cHV0UGF0aCApOwotICAgIFN0cmluZ1dyaXRlciBzdyAgICAgICAgID0gbmV3IFN0cmluZ1dyaXRlcigyMDQ4KTsKLSAgICAKLSAgICB3cml0ZVBhY2thZ2Uoc3cpOwotICAgIHdyaXRlSW1wb3J0cyhzdyk7Ci0gICAgd3JpdGVDbGFzcyhzdyk7Ci0gICAgc3cuY2xvc2UoKTsKLSAgICBieXRlW10gYnl0ZXMgPSBzdy5nZXRCdWZmZXIoKS50b1N0cmluZygpLmdldEJ5dGVzKCBwcm9qZWN0LmdldERlZmF1bHRDaGFyc2V0KCkgKTsKLSAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgaWYgKHBhY2thZ2VfICE9IG51bGwgJiYgcGFja2FnZV8ubGVuZ3RoKCkgPiAwKQotICAgIHsKLSAgICAgIHNiLmFwcGVuZChwYWNrYWdlXyk7Ci0gICAgICBzYi5hcHBlbmQoIi4iKTsKLSAgICB9Ci0gICAgc2IuYXBwZW5kKGNsYXNzXyk7Ci0gICAgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKHNiLnRvU3RyaW5nKCkucmVwbGFjZSgnLicsICcvJykpOwotICAgIHNiLmFwcGVuZCgiLmphdmEiKTsKLQotICAgIEJ5dGVBcnJheUlucHV0U3RyZWFtIGJhaXMgPSBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oYnl0ZXMpOwotICAgIAotICAgIElQYXRoIG5ld0ZpbGVQYXRoID0gbmV3IFBhdGgob3V0cHV0Rm9sZGVyXykuYXBwZW5kKCBzYi50b1N0cmluZygpICk7Ci0gICAgCi0gICAgRmlsZVJlc291cmNlVXRpbHMuY3JlYXRlRmlsZShXZWJTZXJ2aWNlUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UmVzb3VyY2VDb250ZXh0KCksIG5ld0ZpbGVQYXRoLCBiYWlzLCBwcm9ncmVzc01vbml0b3IsIHN0YXR1c01vbml0b3IpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHdyaXRlUGFja2FnZShXcml0ZXIgdykgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgICBpZiAocGFja2FnZV8gIT0gbnVsbCAmJiBwYWNrYWdlXy5sZW5ndGgoKSA+IDApCi0gICAgewotICAgICAgdy53cml0ZSgicGFja2FnZSAiKTsKLSAgICAgIHcud3JpdGUocGFja2FnZV8pOwotICAgICAgdy53cml0ZSgiOyIpOwotICAgICAgbmV3TGluZSh3KTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgd3JpdGVJbXBvcnRzKFdyaXRlciB3KSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoaW1wb3J0c18udG9TdHJpbmcoKSwgIjsiKTsKLSAgICB3aGlsZSAoc3QuaGFzTW9yZVRva2VucygpKQotICAgIHsKLSAgICAgIHcud3JpdGUoImltcG9ydCAiKTsKLSAgICAgIHcud3JpdGUoc3QubmV4dFRva2VuKCkpOwotICAgICAgdy53cml0ZSgiOyIpOwotICAgICAgbmV3TGluZSh3KTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgd3JpdGVDbGFzcyhXcml0ZXIgdykgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uCi0gIHsKLSAgICBuZXdMaW5lKHcpOwotICAgIHcud3JpdGUoInB1YmxpYyBjbGFzcyAiKTsKLSAgICB3LndyaXRlKGNsYXNzXyk7Ci0gICAgdy53cml0ZSgiICIpOwotICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoc2Vpc18udG9TdHJpbmcoKSwgIjsiKTsKLSAgICBpZiAoc3QuaGFzTW9yZVRva2VucygpKQotICAgICAgdy53cml0ZSgiaW1wbGVtZW50cyAiKTsKLSAgICB3aGlsZSAoc3QuaGFzTW9yZVRva2VucygpKQotICAgIHsKLSAgICAgIHcud3JpdGUoc3QubmV4dFRva2VuKCkpOwotICAgICAgaWYgKHN0Lmhhc01vcmVUb2tlbnMoKSkKLSAgICAgICAgdy53cml0ZSgiLCAiKTsKLSAgICB9Ci0gICAgdy53cml0ZSgiIHsiKTsKLSAgICBpbmNyZW1lbnRJbmRlbnQoKTsKLSAgICBuZXdMaW5lKHcpOwotICAgIHdyaXRlRmllbGRzRGVjbGFyYXRpb25zKHcpOwotICAgIHdyaXRlQ29uc3RydWN0b3Iodyk7Ci0gICAgd3JpdGVJbml0KHcpOwotICAgIC8qCi0gICAgKiBDYW5ub3QgdXNlIEpOREkgbG9va3VwIGZvciBBWElTCi0gICAgKgotICAgIHdyaXRlVXNlSk5ESSh3KTsKLSAgICAqLwotICAgIHdyaXRlR2V0U2V0RW5kcG9pbnQodyk7Ci0gICAgd3JpdGVTRUlHZXR0ZXJzKHcpOwotICAgIHdyaXRlU0VJTWV0aG9kcyh3KTsKLSAgICBkZWNyZW1lbnRJbmRlbnQoKTsKLSAgICBuZXdMaW5lKHcpOwotICAgIHcud3JpdGUoIn0iKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCB3cml0ZUZpZWxkc0RlY2xhcmF0aW9ucyhXcml0ZXIgdykgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgICAvKgotICAgICogQ2Fubm90IHVzZSBKTkRJIGxvb2t1cCBmb3IgQVhJUwotICAgICoKLSAgICB3LndyaXRlKCJwcml2YXRlIGJvb2xlYW4gX3VzZUpOREkgPSB0cnVlOyIpOwotICAgIG5ld0xpbmUodyk7Ci0gICAgKi8KLSAgICB3LndyaXRlKCJwcml2YXRlIFN0cmluZyBfZW5kcG9pbnQgPSBudWxsOyIpOwotICAgIHVzZWROYW1lcy5hZGQoIl9lbmRwb2ludCIpOwotICAgIG5ld0xpbmUodyk7Ci0gICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihzZWlzXy50b1N0cmluZygpLCAiOyIpOwotICAgIHdoaWxlIChzdC5oYXNNb3JlVG9rZW5zKCkpCi0gICAgewotICAgICAgdy53cml0ZSgicHJpdmF0ZSAiKTsKLSAgICAgIFN0cmluZyBzZWkgPSBzdC5uZXh0VG9rZW4oKTsKLSAgICAgIHcud3JpdGUoc2VpKTsKLSAgICAgIHcud3JpdGUoIiAiKTsKLSAgICAgIFN0cmluZyBzdHViTmFtZSA9IGZpcnN0Q2hhclRvTG93ZXJDYXNlKGdldENsYXNzTmFtZShzZWkpKTsKLSAgICAgIHcud3JpdGUoc3R1Yk5hbWUpOwotICAgICAgdXNlZE5hbWVzLmFkZChzdHViTmFtZSk7Ci0gICAgICB3LndyaXRlKCIgPSBudWxsOyIpOwotICAgICAgbmV3TGluZSh3KTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgd3JpdGVDb25zdHJ1Y3RvcihXcml0ZXIgdykgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgICBuZXdMaW5lKHcpOwotICAgIHcud3JpdGUoInB1YmxpYyAiKTsKLSAgICB3LndyaXRlKGNsYXNzXyk7Ci0gICAgdy53cml0ZSgiKCkgeyIpOwotICAgIGluY3JlbWVudEluZGVudCgpOwotICAgIG5ld0xpbmUodyk7Ci0gICAgdy53cml0ZSgiX2luaXQiKTsKLSAgICB3LndyaXRlKGNsYXNzXyk7Ci0gICAgdy53cml0ZSgiKCk7Iik7Ci0gICAgZGVjcmVtZW50SW5kZW50KCk7Ci0gICAgbmV3TGluZSh3KTsKLSAgICB3LndyaXRlKCJ9Iik7Ci0gICAgbmV3TGluZSh3KTsKLSAgICAKLSAgICBuZXdMaW5lKHcpOwotICAgIHcud3JpdGUoInB1YmxpYyAiKTsKLSAgICB3LndyaXRlKGNsYXNzXyk7Ci0gICAgdy53cml0ZSgiKFN0cmluZyBlbmRwb2ludCkgeyIpOwotICAgIGluY3JlbWVudEluZGVudCgpOwotICAgIG5ld0xpbmUodyk7Ci0gICAgdy53cml0ZSgiX2VuZHBvaW50ID0gZW5kcG9pbnQ7Iik7Ci0gICAgbmV3TGluZSh3KTsKLSAgICB3LndyaXRlKCJfaW5pdCIpOwotICAgIHcud3JpdGUoY2xhc3NfKTsKLSAgICB3LndyaXRlKCIoKTsiKTsKLSAgICBkZWNyZW1lbnRJbmRlbnQoKTsKLSAgICBuZXdMaW5lKHcpOwotICAgIHcud3JpdGUoIn0iKTsKLSAgICBuZXdMaW5lKHcpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHdyaXRlSW5pdChXcml0ZXIgdykgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgICBuZXdMaW5lKHcpOwotICAgIHcud3JpdGUoInByaXZhdGUgdm9pZCBfaW5pdCIpOwotICAgIHcud3JpdGUoY2xhc3NfKTsKLSAgICB3LndyaXRlKCIoKSB7Iik7Ci0gICAgaW5jcmVtZW50SW5kZW50KCk7Ci0gICAgbmV3TGluZSh3KTsKLSAgICB3LndyaXRlKCJ0cnkgeyIpOwotICAgIGluY3JlbWVudEluZGVudCgpOwotICAgIG5ld0xpbmUodyk7Ci0gICAgLyoKLSAgICAqIENhbm5vdCB1c2UgSk5ESSBsb29rdXAgZm9yIEFYSVMKLSAgICAqCi0gICAgdy53cml0ZSgiaWYgKF91c2VKTkRJKSB7Iik7Ci0gICAgaW5jcmVtZW50SW5kZW50KCk7Ci0gICAgbmV3TGluZSh3KTsKLSAgICAqLwotICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoc2Vpc18udG9TdHJpbmcoKSwgIjsiKTsKLSAgICBTdHJpbmdUb2tlbml6ZXIgc2VydmljZVRva2VucyA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoc2VydmljZXNfLnRvU3RyaW5nKCksICI7Iik7Ci0gICAgLy9TdHJpbmdUb2tlbml6ZXIgam5kaU5hbWVUb2tlbnMgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGpuZGlOYW1lc18udG9TdHJpbmcoKSwgIjsiKTsKLSAgICBTdHJpbmdUb2tlbml6ZXIgcG9ydFRva2VucyA9IG5ldyBTdHJpbmdUb2tlbml6ZXIocG9ydHNfLnRvU3RyaW5nKCksICI7Iik7Ci0gICAgLyoKLSAgICBpZiAoc3QuaGFzTW9yZVRva2VucygpKQotICAgIHsKLSAgICAgIHcud3JpdGUoImphdmF4Lm5hbWluZy5Jbml0aWFsQ29udGV4dCBjdHggPSBuZXcgamF2YXgubmFtaW5nLkluaXRpYWxDb250ZXh0KCk7Iik7Ci0gICAgICBuZXdMaW5lKHcpOwotICAgIH0KLSAgICB3aGlsZSAoc3QuaGFzTW9yZVRva2VucygpKQotICAgIHsKLSAgICAgIHcud3JpdGUoZmlyc3RDaGFyVG9Mb3dlckNhc2UoZ2V0Q2xhc3NOYW1lKHN0Lm5leHRUb2tlbigpKSkpOwotICAgICAgdy53cml0ZSgiID0gKCgiKTsKLSAgICAgIHcud3JpdGUoc2VydmljZVRva2Vucy5uZXh0VG9rZW4oKSk7Ci0gICAgICB3LndyaXRlKCIpY3R4Lmxvb2t1cChcImphdmE6Y29tcC9lbnYvc2VydmljZS8iKTsKLSAgICAgIHcud3JpdGUoam5kaU5hbWVUb2tlbnMubmV4dFRva2VuKCkpOwotICAgICAgdy53cml0ZSgiXCIpKS5nZXQiKTsKLSAgICAgIHcud3JpdGUobWFuZ2xlQ2xhc3NOYW1lKHBvcnRUb2tlbnMubmV4dFRva2VuKCkpKTsKLSAgICAgIHcud3JpdGUoIigpOyIpOwotICAgICAgbmV3TGluZSh3KTsKLSAgICB9Ci0gICAgZGVjcmVtZW50SW5kZW50KCk7Ci0gICAgbmV3TGluZSh3KTsKLSAgICB3LndyaXRlKCJ9Iik7Ci0gICAgbmV3TGluZSh3KTsKLSAgICB3LndyaXRlKCJlbHNlIHsiKTsKLSAgICBpbmNyZW1lbnRJbmRlbnQoKTsKLSAgICBuZXdMaW5lKHcpOwotICAgIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihzZWlzXy50b1N0cmluZygpLCAiOyIpOwotICAgIHNlcnZpY2VUb2tlbnMgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHNlcnZpY2VzXy50b1N0cmluZygpLCAiOyIpOwotICAgIHBvcnRUb2tlbnMgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHBvcnRzXy50b1N0cmluZygpLCAiOyIpOwotICAgICovCi0gICAgd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkKLSAgICB7Ci0gICAgICBTdHJpbmcgc2VpTmFtZSA9IGZpcnN0Q2hhclRvTG93ZXJDYXNlKGdldENsYXNzTmFtZShzdC5uZXh0VG9rZW4oKSkpOwotICAgICAgdy53cml0ZShzZWlOYW1lKTsKLSAgICAgIHcud3JpdGUoIiA9IChuZXcgIik7Ci0gICAgICB3LndyaXRlKHNlcnZpY2VUb2tlbnMubmV4dFRva2VuKCkpOwotICAgICAgdy53cml0ZSgiTG9jYXRvcigpKS5nZXQiKTsKLSAgICAgIHcud3JpdGUocG9ydFRva2Vucy5uZXh0VG9rZW4oKSk7Ci0gICAgICB3LndyaXRlKCIoKTsiKTsKLSAgICAgIG5ld0xpbmUodyk7Ci0gICAgICB3LndyaXRlKCJpZiAoIik7Ci0gICAgICB3LndyaXRlKHNlaU5hbWUpOwotICAgICAgdy53cml0ZSgiICE9IG51bGwpIHsiKTsKLSAgICAgIGluY3JlbWVudEluZGVudCgpOwotICAgICAgbmV3TGluZSh3KTsKLSAgICAgIHcud3JpdGUoImlmIChfZW5kcG9pbnQgIT0gbnVsbCkiKTsKLSAgICAgIGluY3JlbWVudEluZGVudCgpOwotICAgICAgbmV3TGluZSh3KTsKLSAgICAgIHcud3JpdGUoIigoamF2YXgueG1sLnJwYy5TdHViKSIpOwotICAgICAgdy53cml0ZShzZWlOYW1lKTsKLSAgICAgIHcud3JpdGUoIikuX3NldFByb3BlcnR5KFwiamF2YXgueG1sLnJwYy5zZXJ2aWNlLmVuZHBvaW50LmFkZHJlc3NcIiwgX2VuZHBvaW50KTsiKTsKLSAgICAgIGRlY3JlbWVudEluZGVudCgpOwotICAgICAgbmV3TGluZSh3KTsKLSAgICAgIHcud3JpdGUoImVsc2UiKTsKLSAgICAgIGluY3JlbWVudEluZGVudCgpOwotICAgICAgbmV3TGluZSh3KTsKLSAgICAgIHcud3JpdGUoIl9lbmRwb2ludCA9IChTdHJpbmcpKChqYXZheC54bWwucnBjLlN0dWIpIik7Ci0gICAgICB3LndyaXRlKHNlaU5hbWUpOwotICAgICAgdy53cml0ZSgiKS5fZ2V0UHJvcGVydHkoXCJqYXZheC54bWwucnBjLnNlcnZpY2UuZW5kcG9pbnQuYWRkcmVzc1wiKTsiKTsKLSAgICAgIGRlY3JlbWVudEluZGVudCgpOwotICAgICAgZGVjcmVtZW50SW5kZW50KCk7Ci0gICAgICBuZXdMaW5lKHcpOwotICAgICAgdy53cml0ZSgifSIpOwotICAgICAgbmV3TGluZSh3KTsKLSAgICB9Ci0gICAgLyoKLSAgICBkZWNyZW1lbnRJbmRlbnQoKTsKLSAgICBuZXdMaW5lKHcpOwotICAgIHcud3JpdGUoIn0iKTsKLSAgICAqLwotICAgIGRlY3JlbWVudEluZGVudCgpOwotICAgIG5ld0xpbmUodyk7Ci0gICAgdy53cml0ZSgifSIpOwotICAgIG5ld0xpbmUodyk7Ci0gICAgLyoKLSAgICB3LndyaXRlKCJjYXRjaCAoamF2YXgubmFtaW5nLk5hbWluZ0V4Y2VwdGlvbiBuYW1pbmdFeGNlcHRpb24pIHt9Iik7Ci0gICAgbmV3TGluZSh3KTsKLSAgICAqLwotICAgIHcud3JpdGUoImNhdGNoIChqYXZheC54bWwucnBjLlNlcnZpY2VFeGNlcHRpb24gc2VydmljZUV4Y2VwdGlvbikge30iKTsKLSAgICBkZWNyZW1lbnRJbmRlbnQoKTsKLSAgICBuZXdMaW5lKHcpOwotICAgIHcud3JpdGUoIn0iKTsKLSAgICBuZXdMaW5lKHcpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHdyaXRlU2V0UHJvcGVydHlFbmRwb2ludChXcml0ZXIgdykgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHNlaXNfLnRvU3RyaW5nKCksICI7Iik7Ci0gICAgd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkKLSAgICB7Ci0gICAgICBTdHJpbmcgc2VpTmFtZSA9IGZpcnN0Q2hhclRvTG93ZXJDYXNlKGdldENsYXNzTmFtZShzdC5uZXh0VG9rZW4oKSkpOwotICAgICAgdy53cml0ZSgiaWYgKCIpOwotICAgICAgdy53cml0ZShzZWlOYW1lKTsKLSAgICAgIHcud3JpdGUoIiAhPSBudWxsKSIpOwotICAgICAgaW5jcmVtZW50SW5kZW50KCk7Ci0gICAgICBuZXdMaW5lKHcpOwotICAgICAgdy53cml0ZSgiKChqYXZheC54bWwucnBjLlN0dWIpIik7Ci0gICAgICB3LndyaXRlKHNlaU5hbWUpOwotICAgICAgdy53cml0ZSgiKS5fc2V0UHJvcGVydHkoXCJqYXZheC54bWwucnBjLnNlcnZpY2UuZW5kcG9pbnQuYWRkcmVzc1wiLCBfZW5kcG9pbnQpOyIpOwotICAgICAgZGVjcmVtZW50SW5kZW50KCk7Ci0gICAgICBuZXdMaW5lKHcpOwotICAgIH0KLSAgfQotCi0gCi0gIHByaXZhdGUgdm9pZCB3cml0ZVNFSUdldHRlcnMoV3JpdGVyIHcpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihzZWlzXy50b1N0cmluZygpLCAiOyIpOwotICAgIHdoaWxlIChzdC5oYXNNb3JlVG9rZW5zKCkpCi0gICAgewotICAgICAgU3RyaW5nIHNlaSA9IHN0Lm5leHRUb2tlbigpOwotICAgICAgU3RyaW5nIHNlaUNsYXNzTmFtZSA9IGdldENsYXNzTmFtZShzZWkpOwotICAgICAgU3RyaW5nIHNlaUZpZWxkTmFtZSA9IGZpcnN0Q2hhclRvTG93ZXJDYXNlKHNlaUNsYXNzTmFtZSk7Ci0gICAgICBuZXdMaW5lKHcpOwotICAgICAgdy53cml0ZSgicHVibGljICIpOwotICAgICAgdy53cml0ZShzZWkpOwotICAgICAgdy53cml0ZSgiIGdldCIpOwotICAgICAgdy53cml0ZShzZWlDbGFzc05hbWUpOwotICAgICAgdy53cml0ZSgiKCkgeyIpOwotICAgICAgaW5jcmVtZW50SW5kZW50KCk7Ci0gICAgICBuZXdMaW5lKHcpOwotICAgICAgdy53cml0ZSgiaWYgKCIpOwotICAgICAgdy53cml0ZShzZWlGaWVsZE5hbWUpOwotICAgICAgdy53cml0ZSgiID09IG51bGwpIik7Ci0gICAgICBpbmNyZW1lbnRJbmRlbnQoKTsKLSAgICAgIG5ld0xpbmUodyk7Ci0gICAgICB3LndyaXRlKCJfaW5pdCIpOwotICAgICAgdy53cml0ZShjbGFzc18pOwotICAgICAgdy53cml0ZSgiKCk7Iik7Ci0gICAgICBkZWNyZW1lbnRJbmRlbnQoKTsKLSAgICAgIG5ld0xpbmUodyk7Ci0gICAgICB3LndyaXRlKCJyZXR1cm4gIik7Ci0gICAgICB3LndyaXRlKHNlaUZpZWxkTmFtZSk7Ci0gICAgICB3LndyaXRlKCI7Iik7Ci0gICAgICBkZWNyZW1lbnRJbmRlbnQoKTsKLSAgICAgIG5ld0xpbmUodyk7Ci0gICAgICB3LndyaXRlKCJ9Iik7Ci0gICAgICBuZXdMaW5lKHcpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCB3cml0ZVNFSU1ldGhvZHMoV3JpdGVyIHcpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbgotICB7Ci0gICAgbmV3TGluZSh3KTsKLSAgICAvL1dlYlNlcnZpY2VFbGVtZW50IHdzZSA9IFdlYlNlcnZpY2VFbGVtZW50LmdldFdlYlNlcnZpY2VFbGVtZW50KG1vZGVsXyk7Ci0gICAgaWYgKGNsaWVudFByb2plY3RfID09IG51bGwpIHJldHVybjsvL3dzZS5nZXRQcm94eVByb2plY3QoKTsKLSAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHNlaXNfLnRvU3RyaW5nKCksICI7Iik7Ci0gICAgd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkKLSAgICB7Ci0gICAgICBTdHJpbmcgc2VpID0gc3QubmV4dFRva2VuKCk7Ci0gICAgICBKYXZhQ2xhc3MgamF2YUNsYXNzID0gSmF2YU1PRlV0aWxzLmdldEphdmFDbGFzcyhnZXRQYWNrYWdlTmFtZShzZWkpLCBnZXRDbGFzc05hbWUoc2VpKSwgY2xpZW50UHJvamVjdF8pOwotICAgICAgaWYgKGphdmFDbGFzcyAhPSBudWxsKQotICAgICAgewotICAgICAgICBMaXN0IG1ldGhvZHMgPSBqYXZhQ2xhc3MuZ2V0TWV0aG9kcygpOwotICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gbWV0aG9kcy5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgICAgICB7Ci0gICAgICAgICAgTWV0aG9kIG1ldGhvZCA9IChNZXRob2QpaXQubmV4dCgpOwotICAgICAgICAgIGlmICghbWV0aG9kLmlzQ29uc3RydWN0b3IoKSAmJiAhbWV0aG9kLmlzTmF0aXZlKCkgJiYgbWV0aG9kLmdldEphdmFWaXNpYmlsaXR5KCkuZ2V0VmFsdWUoKSA9PSBKYXZhVmlzaWJpbGl0eUtpbmQuUFVCTElDKQotICAgICAgICAgICAgd3JpdGVTRUlNZXRob2RzKHcsIGphdmFDbGFzcywgbWV0aG9kKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCB3cml0ZVNFSU1ldGhvZHMoV3JpdGVyIHcsIEphdmFDbGFzcyBqYXZhQ2xhc3MsIE1ldGhvZCBtZXRob2QpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgdy53cml0ZSgicHVibGljICIpOwotICAgIC8vIGlzVm9pZAotICAgIGlmIChtZXRob2QuaXNWb2lkKCkpCi0gICAgICB3LndyaXRlKCJ2b2lkICIpOwotICAgIGVsc2UKLSAgICB7Ci0gICAgICB3LndyaXRlKGdldEZ1bGx5UXVhbGlmaWVkTmFtZShtZXRob2QuZ2V0UmV0dXJuVHlwZSgpKSk7Ci0gICAgICB3LndyaXRlKCIgIik7Ci0gICAgfQotICAgIC8vIG1ldGhvZCBuYW1lCi0gICAgdy53cml0ZShtZXRob2QuZ2V0TmFtZSgpKTsKLSAgICB3LndyaXRlKCIoIik7Ci0gICAgLy8gaW5wdXQgcGFyYW1ldGVycwotICAgIEphdmFQYXJhbWV0ZXJbXSBpbnB1dFBhcmFtcyA9IG1ldGhvZC5saXN0UGFyYW1ldGVyc1dpdGhvdXRSZXR1cm4oKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGlucHV0UGFyYW1zLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGlmIChpID4gMCkKLSAgICAgICAgdy53cml0ZSgiLCAiKTsKLSAgICAgIEphdmFIZWxwZXJzIGphdmFIZWxwZXJzID0gaW5wdXRQYXJhbXNbaV0uZ2V0SmF2YVR5cGUoKTsKLSAgICAgIHcud3JpdGUoZ2V0RnVsbHlRdWFsaWZpZWROYW1lKGphdmFIZWxwZXJzKSk7Ci0gICAgICB3LndyaXRlKCIgIik7Ci0gICAgICBTdHJpbmcgcGFyYW1OYW1lID0gZ2V0Q2xhc3NOYW1lKGlucHV0UGFyYW1zW2ldLmdldFF1YWxpZmllZE5hbWUoKSk7Ci0gICAgICB3LndyaXRlKGdldFVudXNlZE5hbWUocGFyYW1OYW1lKSk7Ci0gICAgfQotICAgIHcud3JpdGUoIikiKTsKLSAgICAvLyBleGNlcHRpb25zCi0gICAgTGlzdCBleGNlcHRpb25zID0gbWV0aG9kLmdldEphdmFFeGNlcHRpb25zKCk7Ci0gICAgaWYgKCFleGNlcHRpb25zLmlzRW1wdHkoKSkKLSAgICAgIHcud3JpdGUoIiB0aHJvd3MgIik7Ci0gICAgZm9yIChJdGVyYXRvciBpdCA9IGV4Y2VwdGlvbnMuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBKYXZhQ2xhc3MgZXhjZXB0aW9uID0gKEphdmFDbGFzcylpdC5uZXh0KCk7Ci0gICAgICB3LndyaXRlKGV4Y2VwdGlvbi5nZXRRdWFsaWZpZWROYW1lRm9yUmVmbGVjdGlvbigpKTsKLSAgICAgIGlmIChpdC5oYXNOZXh0KCkpCi0gICAgICAgIHcud3JpdGUoIiwgIik7Ci0gICAgfQotICAgIC8vIG1ldGhvZCBib2R5Ci0gICAgdy53cml0ZSgieyIpOwotICAgIGluY3JlbWVudEluZGVudCgpOwotICAgIG5ld0xpbmUodyk7Ci0gICAgU3RyaW5nIHN0dWJOYW1lID0gZmlyc3RDaGFyVG9Mb3dlckNhc2UoamF2YUNsYXNzLmdldE5hbWUoKSk7Ci0gICAgdy53cml0ZSgiaWYgKCIpOwotICAgIHcud3JpdGUoc3R1Yk5hbWUpOwotICAgIHcud3JpdGUoIiA9PSBudWxsKSIpOwotICAgIGluY3JlbWVudEluZGVudCgpOwotICAgIG5ld0xpbmUodyk7Ci0gICAgdy53cml0ZSgiX2luaXQiKTsKLSAgICB3LndyaXRlKGNsYXNzXyk7Ci0gICAgdy53cml0ZSgiKCk7Iik7Ci0gICAgZGVjcmVtZW50SW5kZW50KCk7Ci0gICAgbmV3TGluZSh3KTsKLSAgICBpZiAoIW1ldGhvZC5pc1ZvaWQoKSkKLSAgICAgIHcud3JpdGUoInJldHVybiAiKTsKLSAgICB3LndyaXRlKHN0dWJOYW1lKTsKLSAgICB3LndyaXRlKCIuIik7Ci0gICAgdy53cml0ZShtZXRob2QuZ2V0TmFtZSgpKTsKLSAgICB3LndyaXRlKCIoIik7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnB1dFBhcmFtcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpZiAoaSA+IDApCi0gICAgICAgIHcud3JpdGUoIiwgIik7Ci0gICAgICBTdHJpbmcgcGFyYW1OYW1lID0gZ2V0Q2xhc3NOYW1lKGlucHV0UGFyYW1zW2ldLmdldFF1YWxpZmllZE5hbWUoKSk7Ci0gICAgICB3LndyaXRlKGdldFVudXNlZE5hbWUocGFyYW1OYW1lKSk7Ci0gICAgfQotICAgIHcud3JpdGUoIik7Iik7Ci0gICAgZGVjcmVtZW50SW5kZW50KCk7Ci0gICAgbmV3TGluZSh3KTsKLSAgICB3LndyaXRlKCJ9Iik7Ci0gICAgbmV3TGluZSh3KTsKLSAgICBuZXdMaW5lKHcpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHdyaXRlR2V0U2V0RW5kcG9pbnQoV3JpdGVyIHcpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgbmV3TGluZSh3KTsKLSAgICB3LndyaXRlKCJwdWJsaWMgU3RyaW5nIGdldEVuZHBvaW50KCkgeyIpOwotICAgIGluY3JlbWVudEluZGVudCgpOwotICAgIG5ld0xpbmUodyk7Ci0gICAgdy53cml0ZSgicmV0dXJuIF9lbmRwb2ludDsiKTsKLSAgICBkZWNyZW1lbnRJbmRlbnQoKTsKLSAgICBuZXdMaW5lKHcpOwotICAgIHcud3JpdGUoIn0iKTsKLSAgICBuZXdMaW5lKHcpOwotICAgIG5ld0xpbmUodyk7Ci0gICAgdy53cml0ZSgicHVibGljIHZvaWQgc2V0RW5kcG9pbnQoU3RyaW5nIGVuZHBvaW50KSB7Iik7Ci0gICAgaW5jcmVtZW50SW5kZW50KCk7Ci0gICAgbmV3TGluZSh3KTsKLSAgICB3LndyaXRlKCJfZW5kcG9pbnQgPSBlbmRwb2ludDsiKTsKLSAgICBuZXdMaW5lKHcpOwotICAgIHdyaXRlU2V0UHJvcGVydHlFbmRwb2ludCh3KTsKLSAgICBkZWNyZW1lbnRJbmRlbnQoKTsKLSAgICBuZXdMaW5lKHcpOwotICAgIHcud3JpdGUoIn0iKTsKLSAgICBuZXdMaW5lKHcpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGluY3JlbWVudEluZGVudCgpCi0gIHsKLSAgICBpbmRlbnRDb3VudCsrOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGRlY3JlbWVudEluZGVudCgpCi0gIHsKLSAgICBpbmRlbnRDb3VudC0tOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGluZGVudChXcml0ZXIgdykgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGluZGVudENvdW50OyBpKyspCi0gICAgICB3LndyaXRlKCIgICIpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIG5ld0xpbmUoV3JpdGVyIHcpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgdy53cml0ZShORVdfTElORSk7Ci0gICAgaW5kZW50KHcpOwotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBnZXRVbnVzZWROYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gICAgaWYgKHVzZWROYW1lcy5jb250YWlucyhuYW1lKSkKLSAgICB7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwMDsgaSsrKQotICAgICAgewotICAgICAgICBTdHJpbmcgbmV3TmFtZSA9IChuZXcgU3RyaW5nQnVmZmVyKG5hbWUpKS5hcHBlbmQoU3RyaW5nLnZhbHVlT2YoaSkpLnRvU3RyaW5nKCk7Ci0gICAgICAgIGlmICghdXNlZE5hbWVzLmNvbnRhaW5zKG5ld05hbWUpKQotICAgICAgICAgIHJldHVybiBuZXdOYW1lOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbmFtZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvdGFzay9WYWxpZGF0ZVdTRExDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS90YXNrL1ZhbGlkYXRlV1NETENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDFjYjk5OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS90YXNrL1ZhbGlkYXRlV1NETENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnRhc2s7Ci0KLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci0KLQotCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGVXU0RMQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIHByaXZhdGUgV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXI7Ci0gIHByaXZhdGUgU3RyaW5nIHdzZGxVUkk7Ci0KLSAgcHVibGljIFZhbGlkYXRlV1NETENvbW1hbmQoKQotICB7Ci0gIH0KLQotCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKSAKLQl7Ci0JCUlFbnZpcm9ubWVudCBlbnZpcm9ubWVudCA9IGdldEVudmlyb25tZW50KCk7Ci0JCWlmICh3c2RsVVJJICE9IG51bGwgJiYgd3NkbFVSSS5sZW5ndGgoKSA+IDApCi0JCXsKLQkJCURlZmluaXRpb24gZGVmaW5pdGlvbiA9IHdlYlNlcnZpY2VzUGFyc2VyLmdldFdTRExEZWZpbml0aW9uKHdzZGxVUkkpOwotCQkJaWYgKGRlZmluaXRpb24gIT0gbnVsbCkKLQkJCXsKLQkJCQlpbnQgbnVtU2VydmljZXMgPSBkZWZpbml0aW9uLmdldFNlcnZpY2VzKCkuc2l6ZSgpOwotCQkJCWlmIChudW1TZXJ2aWNlcyA8IDEpCi0JCQkJewotCQkJCQlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX1dTRExfSEFTX05PX1NFUlZJQ0VfRUxFTUVOVCwgbmV3IE9iamVjdFtdIHt3c2RsVVJJfSksIG51bGwpOwotCQkJCQllbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJCQkJcmV0dXJuIHN0YXR1czsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLQotICAvKioKLSAgICogQHBhcmFtIHdzZGxVUkkgVGhlIHdzZGxVUkkgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0V3NkbFVSSShTdHJpbmcgd3NkbFVSSSkKLSAgewotICAgIHRoaXMud3NkbFVSSSA9IHdzZGxVUkk7Ci0gIH0KLQotICAvKioKLSAgICogQHBhcmFtIHdlYlNlcnZpY2VzUGFyc2VyIFRoZSB3ZWJTZXJ2aWNlc1BhcnNlciB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlc1BhcnNlcihXZWJTZXJ2aWNlc1BhcnNlciB3ZWJTZXJ2aWNlc1BhcnNlcikKLSAgewotICAgIHRoaXMud2ViU2VydmljZXNQYXJzZXIgPSB3ZWJTZXJ2aWNlc1BhcnNlcjsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS91dGlsL0NsYXNzcGF0aFV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS91dGlsL0NsYXNzcGF0aFV0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3OTRjNzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvdXRpbC9DbGFzc3BhdGhVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjk3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIwMyAgIDEyNjQxOCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnV0aWw7Ci0KLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JQ2xhc3NwYXRoRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklQYWNrYWdlRnJhZ21lbnRSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFNb2RlbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5pbnRlcm5hbC5wcm9qZWN0LkoyRUVQcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uSjJFRVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUuQ29tcG9uZW50Q29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUucmVzb3VyY2VzLklWaXJ0dWFsQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5yZXNvdXJjZXMuSVZpcnR1YWxGb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLnJlc291cmNlcy5JVmlydHVhbFJlc291cmNlOwotCi1wdWJsaWMgY2xhc3MgQ2xhc3NwYXRoVXRpbHMgewotCi0JLy8JQ29weXJpZ2h0Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDMuIjsgLy8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBzdGF0aWMgQ2xhc3NwYXRoVXRpbHMgaW5zdGFuY2VfOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIERPVF9KQVIgPSAiLmphciI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgSkFSID0gImphciI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgV0VCSU5GX0xJQiA9ICIvV0VCLUlORi9saWIiOyAvLyROT04tTkxTLTEkCi0KLQlwcml2YXRlIENsYXNzcGF0aFV0aWxzKCkgewotCX0KLQotCXB1YmxpYyBzdGF0aWMgQ2xhc3NwYXRoVXRpbHMgZ2V0SW5zdGFuY2UoKSB7Ci0JCWlmIChpbnN0YW5jZV8gPT0gbnVsbCkKLQkJCWluc3RhbmNlXyA9IG5ldyBDbGFzc3BhdGhVdGlscygpOwotCQlyZXR1cm4gaW5zdGFuY2VfOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldENsYXNzcGF0aFN0cmluZyhJUHJvamVjdCBwcm9qZWN0KSB7Ci0JCVN0cmluZ0J1ZmZlciBjbGFzc3BhdGggPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCVN0cmluZ1tdIGNsYXNzcGF0aEVudHJpZXMgPSBnZXRDbGFzc3BhdGgocHJvamVjdCwgZmFsc2UpOwotCi0JCVZlY3RvciBjbGFzc3BhdGhWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY2xhc3NwYXRoRW50cmllcy5sZW5ndGg7IGkrKykgewotCQkJaWYgKCFjbGFzc3BhdGhWZWN0b3IuY29udGFpbnMoY2xhc3NwYXRoRW50cmllc1tpXSkpIHsKLQkJCQljbGFzc3BhdGhWZWN0b3IuYWRkKGNsYXNzcGF0aEVudHJpZXNbaV0pOwotCQkJCWNsYXNzcGF0aC5hcHBlbmQoY2xhc3NwYXRoRW50cmllc1tpXSk7Ci0JCQkJY2xhc3NwYXRoLmFwcGVuZCgiOyIpOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0JCX0KLQkJcmV0dXJuIGNsYXNzcGF0aC50b1N0cmluZygpOwotCX0KLQotCQkKLQlwcml2YXRlIFN0cmluZ1tdIGdldENsYXNzcGF0aChJUHJvamVjdCBwcm9qZWN0LCBib29sZWFuIGlzRGVwZW5kZW50KSB7Ci0JCVN0cmluZ1tdIG1vZHVsZUNsYXNzcGF0aCA9IG5ldyBTdHJpbmdbMF07Ci0JCUFycmF5TGlzdCBwcm9qZWN0Q2xhc3NwYXRoID0gbmV3IEFycmF5TGlzdCgpOwotCQlib29sZWFuIG5lZWRKYXZhQ2xhc3NwYXRoID0gZmFsc2U7Ci0JCQotCQlJVmlydHVhbENvbXBvbmVudCBjb21wID0gQ29tcG9uZW50Q29yZS5jcmVhdGVDb21wb25lbnQocHJvamVjdCk7Ci0JCWlmIChjb21wICE9IG51bGwpIHsKLQkJCS8vIGdldCB0aGUgbW9kdWxlJ3MgY2xhc3NwYXRoCi0JCQkKLQkJCWlmIChKMkVFVXRpbHMuaXNFQVJDb21wb25lbnQoY29tcCkpIHsKLQkJCQltb2R1bGVDbGFzc3BhdGggPSBnZXRDbGFzc3BhdGhGb3JFQVJQcm9qZWN0KHByb2plY3QsIGNvbXAuZ2V0TmFtZSgpKTsKLS8vCQkJCSBhZGQgbW9kdWxlIGNsYXNzcGF0aCB0byBwcm9qZWN0IGNsYXNzcGF0aAotCQkJCWZvciAoaW50IGogPSAwOyBqIDwgbW9kdWxlQ2xhc3NwYXRoLmxlbmd0aDsgaisrKSB7Ci0JCQkJCXByb2plY3RDbGFzc3BhdGguYWRkKG1vZHVsZUNsYXNzcGF0aFtqXSk7Ci0JCQkJfQotCQkJfSBlbHNlIGlmIChKMkVFVXRpbHMuaXNXZWJDb21wb25lbnQoY29tcCkgfHwgSjJFRVV0aWxzLmlzSmF2YUNvbXBvbmVudChjb21wKSkgewotCQkJCW5lZWRKYXZhQ2xhc3NwYXRoID0gdHJ1ZTsKLQkJCQkKLQkJCQlJQ29udGFpbmVyIG91dHB1dENvbnRhaW5lciA9IG51bGw7Ci0JCQkJSVJlc291cmNlIGZyYWdtZW50Um9vdCA9IG51bGw7Ci0JCQkJSVBhY2thZ2VGcmFnbWVudFJvb3RbXSBwa2dGcmFnbWVudFJvb3QgPSBSZXNvdXJjZVV0aWxzLmdldEphdmFQYWNrYWdlRnJhZ21lbnRSb290cyhwcm9qZWN0KTsKLQkJCQlBcnJheUxpc3Qgd2ViTW9kdWxlQ2xhc3NwYXRoID0gbmV3IEFycmF5TGlzdCgpOwotCQkJCXRyeSB7Ci0JCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgcGtnRnJhZ21lbnRSb290Lmxlbmd0aDsgaSsrKSB7Ci0JCQkJCQlmcmFnbWVudFJvb3QgPSBwa2dGcmFnbWVudFJvb3RbaV0uZ2V0Q29ycmVzcG9uZGluZ1Jlc291cmNlKCk7Ci0JCQkJCQlpZiAoZnJhZ21lbnRSb290ICE9IG51bGwKLQkJCQkJCQkJJiYgKGZyYWdtZW50Um9vdC5nZXRQcm9qZWN0KCkuZXF1YWxzKHByb2plY3QpKQotCQkJCQkJCQkmJiAoZnJhZ21lbnRSb290LmdldFR5cGUoKSAhPSBJUmVzb3VyY2UuRklMRSkpIHsJCQkJCQotCQkJCQkJCW91dHB1dENvbnRhaW5lciA9IEoyRUVQcm9qZWN0VXRpbGl0aWVzLmdldE91dHB1dENvbnRhaW5lcihwcm9qZWN0LCBwa2dGcmFnbWVudFJvb3RbaV0pOwotCQkJCQkJCWlmIChvdXRwdXRDb250YWluZXIgIT0gbnVsbCkgeyAKLQkJCQkJCQkJd2ViTW9kdWxlQ2xhc3NwYXRoLmFkZChvdXRwdXRDb250YWluZXIuZ2V0TG9jYXRpb24oKS50b09TU3RyaW5nKCkpOwotCQkJCQkJCX0KLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0gY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBlKSB7Ci0JCQkJfQotCQkJCQotCQkJCS8vIGFkZCBXZWIgbW9kdWxlIGNsYXNzcGF0aCB0byBwcm9qZWN0IGNsYXNzcGF0aAotCQkJCUl0ZXJhdG9yIGl0ZXIgPSB3ZWJNb2R1bGVDbGFzc3BhdGguaXRlcmF0b3IoKTsKLQkJCQl3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKLQkJCQkJcHJvamVjdENsYXNzcGF0aC5hZGQoKFN0cmluZykgaXRlci5uZXh0KCkpOwotCQkJCX0JCQotCQkJfQotCQkJCi0JCQlpZiAoIWlzRGVwZW5kZW50KSB7Ci0JCQkJaWYgKEoyRUVVdGlscy5pc1dlYkNvbXBvbmVudChjb21wKSkgewotCQkJCQluZWVkSmF2YUNsYXNzcGF0aCA9IHRydWU7Ci0JCQkJCW1vZHVsZUNsYXNzcGF0aCA9IGdldFdFQklORkxpYihwcm9qZWN0KTsKLQkJCQkJZm9yIChpbnQgaiA9IDA7IGogPCBtb2R1bGVDbGFzc3BhdGgubGVuZ3RoOyBqKyspIHsKLQkJCQkJCXByb2plY3RDbGFzc3BhdGguYWRkKG1vZHVsZUNsYXNzcGF0aFtqXSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQkKLQkJfSBlbHNlIHsKLQkJCW5lZWRKYXZhQ2xhc3NwYXRoID0gdHJ1ZTsKLQkJfQotCQkKLQkJLy8gSWYgdGhlcmUgYXJlIFdlYiBvciBKYXZhIG1vZHVsZSBpbiB0aGUgcHJvamVjdCwgZ2V0IHRoZSBwcm9qZWN0J3MgSmF2YSBjbGFzc3BhdGgKLQkJaWYgKG5lZWRKYXZhQ2xhc3NwYXRoKSB7Ci0JCQlTdHJpbmdbXSBqYXZhQ2xhc3NwYXRoOwotCQkJdHJ5IHsKLQkJCQlJSmF2YVByb2plY3QgamF2YVByb2ogPSAoSUphdmFQcm9qZWN0KSBwcm9qZWN0LmdldE5hdHVyZShKYXZhQ29yZS5OQVRVUkVfSUQpOwotCQkJCWlmIChqYXZhUHJvaiAhPSBudWxsKSB7Ci0JCQkJCWphdmFDbGFzc3BhdGggPSBnZXRDbGFzc3BhdGhGb3JKYXZhUHJvamVjdChqYXZhUHJvaik7Ci0JCQkJCWZvciAoaW50IGogPSAwOyBqIDwgamF2YUNsYXNzcGF0aC5sZW5ndGg7IGorKykgewotCQkJCQkJcHJvamVjdENsYXNzcGF0aC5hZGQoamF2YUNsYXNzcGF0aFtqXSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCQkvLyBub3QgYWJsZSB0byBnZXQgSmF2YSBjbGFzc3BhdGgsIGp1c3QgaWdub3JlCi0JCQl9CQotCQl9Ci0JCQotCQlyZXR1cm4gKFN0cmluZ1tdKSBwcm9qZWN0Q2xhc3NwYXRoLnRvQXJyYXkobmV3IFN0cmluZ1twcm9qZWN0Q2xhc3NwYXRoLnNpemUoKV0pOwotCX0KLQotCS8vIE5lZWQgdG8gZ2V0IGFsbCBtb2R1bGVzIGluIHRoZSBwcm9qZWN0LiBJZiB0aGVyZSdzIGEgRUFSIG1vZHVsZSwgZ2V0IHRoZSB1dGlsaXR5IEpBUnMgCi0JcHJpdmF0ZSBTdHJpbmdbXSBnZXRVdGlsaXR5SmFyQ2xhc3NwYXRoKElQcm9qZWN0IHByb2plY3QpIHsKLQkJU3RyaW5nW10gdXRpbGl0eUphclN0cmluZyA9IG5ldyBTdHJpbmdbMF07Ci0JCVN0cmluZ1tdIG1vZHVsZUNsYXNzcGF0aCA9IG5ldyBTdHJpbmdbMF07Ci0JCUFycmF5TGlzdCB1dGlsaXR5SmFyc0NsYXNzcGF0aCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCi0JCVN0cmluZyBtb2R1bGU7Ci0JCUlWaXJ0dWFsQ29tcG9uZW50IGNvbXAgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLQkJaWYgKGNvbXAgIT0gbnVsbCkgewotCQkJbW9kdWxlID0gY29tcC5nZXROYW1lKCk7Ci0JCQlpZiAoSjJFRVV0aWxzLmlzRUFSQ29tcG9uZW50KGNvbXApKSB7Ci0JCQkJbW9kdWxlQ2xhc3NwYXRoID0gZ2V0Q2xhc3NwYXRoRm9yRUFSUHJvamVjdChwcm9qZWN0LCBtb2R1bGUpOwotCQkJCWZvciAoaW50IGogPSAwOyBqIDwgbW9kdWxlQ2xhc3NwYXRoLmxlbmd0aDsgaisrKSB7Ci0JCQkJCXV0aWxpdHlKYXJzQ2xhc3NwYXRoLmFkZChtb2R1bGVDbGFzc3BhdGhbal0pOwotCQkJCX0KLQkJCQl1dGlsaXR5SmFyU3RyaW5nID0gKFN0cmluZ1tdKSB1dGlsaXR5SmFyc0NsYXNzcGF0aC50b0FycmF5KG5ldyBTdHJpbmdbdXRpbGl0eUphcnNDbGFzc3BhdGguc2l6ZSgpXSk7Ci0JCQl9Ci0JCX0gCi0KLQkJcmV0dXJuIHV0aWxpdHlKYXJTdHJpbmc7Ci0JfQotCQotCXByaXZhdGUgU3RyaW5nW10gZ2V0Q2xhc3NwYXRoRm9yRUFSUHJvamVjdChJUHJvamVjdCBwcm9qZWN0LCBTdHJpbmcgbW9kdWxlKSB7Ci0JCUlQYXRoIHByb2plY3RQYXRoID0KLQkJCXByb2plY3QuZ2V0UHJvamVjdCgpLmdldExvY2F0aW9uKCkuYWRkVHJhaWxpbmdTZXBhcmF0b3IoKS5hcHBlbmQobW9kdWxlKS5hZGRUcmFpbGluZ1NlcGFyYXRvcigpOwotCQlyZXR1cm4gZ2V0RGlyZWN0b3J5SmFyRmlsZXMocHJvamVjdFBhdGgpOwotCX0KLQotCXByaXZhdGUgU3RyaW5nW10gZ2V0RGlyZWN0b3J5SmFyRmlsZXMoSVBhdGggaVBhdGgpIHsKLQkJRmlsZSBkaXIgPSBpUGF0aC50b0ZpbGUoKTsKLQkJVmVjdG9yIGphcnNWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0JCWlmIChkaXIuZXhpc3RzKCkgJiYgZGlyLmlzRGlyZWN0b3J5KCkpIHsKLQkJCVN0cmluZ1tdIGZpbGVuYW1lcyA9IGRpci5saXN0KCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGZpbGVuYW1lcy5sZW5ndGg7IGkrKykgewotCQkJCWlmIChmaWxlbmFtZXNbaV0uZW5kc1dpdGgoRE9UX0pBUikpCi0JCQkJCWphcnNWZWN0b3IuYWRkKHBhdGgyU3RyaW5nKGlQYXRoKSArIGZpbGVuYW1lc1tpXSk7Ci0JCQl9Ci0JCX0KLQkJU3RyaW5nW10gamFycyA9IG5ldyBTdHJpbmdbamFyc1ZlY3Rvci5zaXplKCldOwotCQlqYXJzVmVjdG9yLmNvcHlJbnRvKGphcnMpOwotCQlyZXR1cm4gamFyczsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZ1tdIGdldFdFQklORkxpYihJUHJvamVjdCBwcm9qZWN0KSB7Ci0JCVN0cmluZ1tdIHdlYmluZkxpYkphcnMgPSBuZXcgU3RyaW5nWzBdOwotCQlBcnJheUxpc3QgYW5BcnJheUxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCXRyeSB7CQkJCi0JCQkJCUlWaXJ0dWFsQ29tcG9uZW50IGNvbXBvbmVudCA9IENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KHByb2plY3QpOwotCQkJCQlpZiAoY29tcG9uZW50ICE9IG51bGwpIHsKLQkJCQkJCQotCQkJCQkJSVZpcnR1YWxGb2xkZXIgd2ViSW5mTGliID0gY29tcG9uZW50LmdldFJvb3RGb2xkZXIoKS5nZXRGb2xkZXIobmV3IFBhdGgoCi0JCQkJCQkJCVdFQklORl9MSUIpKTsKLQkJCQkJCWlmICh3ZWJJbmZMaWIgIT0gbnVsbCkgewotCQkJCQkJCUlWaXJ0dWFsUmVzb3VyY2VbXSByZXNvdXJjZXMgPSB3ZWJJbmZMaWIubWVtYmVycygpOwotCQkJCQkJCUlSZXNvdXJjZSBhUmVzb3VyY2UgPSBudWxsOwotCQkJCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgcmVzb3VyY2VzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJCQkJCWFSZXNvdXJjZSA9IHJlc291cmNlc1tpXS5nZXRVbmRlcmx5aW5nUmVzb3VyY2UoKTsKLQkJCQkJCQkJaWYgKEpBUi5lcXVhbHNJZ25vcmVDYXNlKGFSZXNvdXJjZS5nZXRGaWxlRXh0ZW5zaW9uKCkpKQotCQkJCQkJCQkJYW5BcnJheUxpc3QuYWRkKCBhUmVzb3VyY2UuZ2V0TG9jYXRpb24oKS50b09TU3RyaW5nKCkpOwotCQkJCQkJCX0KLQkJCQkJCQlpZiAoYW5BcnJheUxpc3Quc2l6ZSgpICE9IDApCi0JCQkJCQkJCXdlYmluZkxpYkphcnMgPSAoU3RyaW5nW10pIGFuQXJyYXlMaXN0LnRvQXJyYXkobmV3IFN0cmluZ1thbkFycmF5TGlzdC5zaXplKCldKTsKLQkJCQkJCQl9Ci0JCQkJCX0KLQkJCQl9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCQl9Ci0JCXJldHVybiB3ZWJpbmZMaWJKYXJzOwotCX0KLQotCXByaXZhdGUgU3RyaW5nW10gZ2V0Q2xhc3NwYXRoRm9ySmF2YVByb2plY3QoSUphdmFQcm9qZWN0IGphdmFQcm9qZWN0KSB7Ci0JCUFycmF5TGlzdCBwcm9qZWN0Q2xhc3NwYXRoID0gbmV3IEFycmF5TGlzdCgpOwotCQl0cnkgewotCQkJSUNsYXNzcGF0aEVudHJ5W10gYnVpbGRQYXRoID0KLQkJCQlqYXZhUHJvamVjdC5nZXRSZXNvbHZlZENsYXNzcGF0aCh0cnVlKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgYnVpbGRQYXRoLmxlbmd0aDsgaSsrKSB7Ci0JCQkJU3RyaW5nW10gYnVpbGRQYXRoU3RyaW5nID0KLQkJCQkJY2xhc3NwYXRoRW50cnkyU3RyaW5nKAotCQkJCQkJYnVpbGRQYXRoW2ldLAotCQkJCQkJamF2YVByb2plY3QuZ2V0UHJvamVjdCgpKTsKLQkJCQlmb3IgKGludCBqID0gMDsgaiA8IGJ1aWxkUGF0aFN0cmluZy5sZW5ndGg7IGorKykgewotCQkJCQlwcm9qZWN0Q2xhc3NwYXRoLmFkZChidWlsZFBhdGhTdHJpbmdbal0pOwotCQkJCX0KLQkJCX0KLQkJfSBjYXRjaCAoSmF2YU1vZGVsRXhjZXB0aW9uIGptZSkgewotCQl9Ci0KLQkJU3RyaW5nW10gdXRpbGl0eUphcnNDbGFzc3BhdGg7Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBqYXZhUHJvamVjdC5nZXRQcm9qZWN0KCk7Ci0JCUlQcm9qZWN0W10gcmVmZXJlbmNpbmdQcm9qZWN0cyA9IHByb2plY3QuZ2V0UmVmZXJlbmNpbmdQcm9qZWN0cygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHJlZmVyZW5jaW5nUHJvamVjdHMubGVuZ3RoOyBpKyspIHsKLQkJCXV0aWxpdHlKYXJzQ2xhc3NwYXRoID0gZ2V0VXRpbGl0eUphckNsYXNzcGF0aChyZWZlcmVuY2luZ1Byb2plY3RzW2ldKTsKLQkJCWZvciAoaW50IGogPSAwOyBqIDwgdXRpbGl0eUphcnNDbGFzc3BhdGgubGVuZ3RoOyBqKyspIHsKLQkJCQlwcm9qZWN0Q2xhc3NwYXRoLmFkZCh1dGlsaXR5SmFyc0NsYXNzcGF0aFtqXSk7Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gKFN0cmluZ1tdKSBwcm9qZWN0Q2xhc3NwYXRoLnRvQXJyYXkobmV3IFN0cmluZ1twcm9qZWN0Q2xhc3NwYXRoLnNpemUoKV0pOwotCX0KLQotCXByaXZhdGUgU3RyaW5nW10gY2xhc3NwYXRoRW50cnkyU3RyaW5nKAotCQlJQ2xhc3NwYXRoRW50cnkgZW50cnksCi0JCUlQcm9qZWN0IHByb2plY3QpIAotCXsKLQkJc3dpdGNoIChlbnRyeS5nZXRFbnRyeUtpbmQoKSkgewotCQkJY2FzZSBJQ2xhc3NwYXRoRW50cnkuQ1BFX0xJQlJBUlkgOgotCQkJewotCQkJCXJldHVybiBuZXcgU3RyaW5nW10geyBwYXRoMlN0cmluZyhlbnRyeS5nZXRQYXRoKCkpfTsJCi0JCQl9Ci0JCQljYXNlIElDbGFzc3BhdGhFbnRyeS5DUEVfUFJPSkVDVCA6Ci0JCQl7CQkJCi0JCQkJcmV0dXJuIGdldENsYXNzcGF0aCgKLQkJCQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KAotCQkJCQkJZW50cnkuZ2V0UGF0aCgpLmxhc3RTZWdtZW50KCkpLCB0cnVlKTsKLQkJCX0KLQkJCWNhc2UgSUNsYXNzcGF0aEVudHJ5LkNQRV9TT1VSQ0UgOgotCQkJCXsKLQkJCQkJSVBhdGggcGF0aCA9IGVudHJ5LmdldFBhdGgoKTsKLQkJCQkJaWYgKHBhdGguc2VnbWVudCgwKS5lcXVhbHMocHJvamVjdC5nZXROYW1lKCkpKQotCQkJCQkJcGF0aCA9IHBhdGgucmVtb3ZlRmlyc3RTZWdtZW50cygxKTsKLQkJCQkJcmV0dXJuIG5ldyBTdHJpbmdbXSB7Ci0JCQkJCQlwYXRoMlN0cmluZygKLQkJCQkJCQlwcm9qZWN0Ci0JCQkJCQkJCS5nZXRMb2NhdGlvbigpCi0JCQkJCQkJCS5hZGRUcmFpbGluZ1NlcGFyYXRvcigpCi0JCQkJCQkJCS5hcHBlbmQoCi0JCQkJCQkJCXBhdGgpKX07Ci0JCQkJfQotCQkJY2FzZSBJQ2xhc3NwYXRoRW50cnkuQ1BFX1ZBUklBQkxFIDoKLQkJCXsKLQkJCQlyZXR1cm4gY2xhc3NwYXRoRW50cnkyU3RyaW5nKAotCQkJCQlKYXZhQ29yZS5nZXRSZXNvbHZlZENsYXNzcGF0aEVudHJ5KGVudHJ5KSwKLQkJCQkJcHJvamVjdCk7Ci0JCQl9Ci0JCQlkZWZhdWx0IDoKLQkJCXsKLQkJCQlyZXR1cm4gbmV3IFN0cmluZ1tdIHsgcGF0aDJTdHJpbmcoZW50cnkuZ2V0UGF0aCgpKX07Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBwYXRoMlN0cmluZyhJUGF0aCBwYXRoKSB7Ci0JCXJldHVybiBwYXRoLnRvT1NTdHJpbmcoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS91dGlsL0ZpbGVVdGlsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS91dGlsL0ZpbGVVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2ZGJiOGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvdXRpbC9GaWxlVXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS51dGlsOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklDb250YWluZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLQotcHVibGljIGNsYXNzIEZpbGVVdGlsCi17Ci0gIHB1YmxpYyBGaWxlVXRpbCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIGNvcHlGaWxlKFN0cmluZyBzcmMsIFN0cmluZyBkZXN0KQotICB7Ci0gICAgSW5wdXRTdHJlYW0gaXMgPSBudWxsOwotICAgIEZpbGVPdXRwdXRTdHJlYW0gZm9zID0gbnVsbDsKLSAgICAKLSAgICB0cnkKLSAgICB7Ci0gICAgICBpcyA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oc3JjKTsKLSAgICAgIGZvcyA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKGRlc3QpOwotICAgICAgaW50IGMgPSAwOwotICAgICAgYnl0ZVtdIGFycmF5ID0gbmV3IGJ5dGVbMTAyNF07Ci0gICAgICB3aGlsZSAoKGMgPSBpcy5yZWFkKGFycmF5KSkgPj0gMCkKLSAgICAgIHsKLSAgICAgICAgZm9zLndyaXRlKGFycmF5LCAwLCBjKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICB9Ci0gICAgZmluYWxseQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBmb3MuY2xvc2UoKTsKLSAgICAgICAgaXMuY2xvc2UoKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIEZpbGUgY3JlYXRlRmlsZUFuZFBhcmVudERpcmVjdG9yaWVzKFN0cmluZyBmaWxlTmFtZSkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgRmlsZSBmaWxlID0gbmV3IEZpbGUoZmlsZU5hbWUpOwotICAgIEZpbGUgcGFyZW50ID0gZmlsZS5nZXRQYXJlbnRGaWxlKCk7Ci0gICAgaWYgKCFwYXJlbnQuZXhpc3RzKCkpCi0gICAgewotICAgICAgcGFyZW50Lm1rZGlycygpOwotICAgIH0KLSAgICBmaWxlLmNyZWF0ZU5ld0ZpbGUoKTsKLSAgICByZXR1cm4gZmlsZTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBkZWxldGVEaXJlY3RvcmllcyhGaWxlIGRpcikgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgRmlsZVtdIGNoaWxkcmVuID0gZGlyLmxpc3RGaWxlcygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgaWYgKGNoaWxkcmVuW2ldLmxpc3QoKSAhPSBudWxsICYmIGNoaWxkcmVuW2ldLmxpc3QoKS5sZW5ndGggPiAwKQotICAgICAgewotICAgICAgICBkZWxldGVEaXJlY3RvcmllcyhjaGlsZHJlbltpXSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGNoaWxkcmVuW2ldLmRlbGV0ZSgpOwotICAgICAgfQotICAgIH0KLSAgICBkaXIuZGVsZXRlKCk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIGZvbGRlciBhbmQgYWxsIHBhcmVudCBmb2xkZXJzIGlmIG5vdCBleGlzdGluZyBQcm9qZWN0IG11c3QgZXhpc3QKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBjcmVhdGVGb2xkZXIoSUZvbGRlciBmb2xkZXIsIGJvb2xlYW4gZm9yY2UsIGJvb2xlYW4gbG9jYWwpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0gIHsKLSAgICBpZiAoIWZvbGRlci5leGlzdHMoKSkKLSAgICB7Ci0gICAgICBJQ29udGFpbmVyIHBhcmVudCA9IGZvbGRlci5nZXRQYXJlbnQoKTsKLSAgICAgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBJRm9sZGVyKQotICAgICAgewotICAgICAgICBjcmVhdGVGb2xkZXIoKElGb2xkZXIpcGFyZW50LCBmb3JjZSwgbG9jYWwpOwotICAgICAgfQotICAgICAgZm9sZGVyLmNyZWF0ZShmb3JjZSwgbG9jYWwsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBjcmVhdGVUYXJnZXRGaWxlKFN0cmluZyBzb3VyY2VGaWxlTmFtZSwgU3RyaW5nIHRhcmdldEZpbGVOYW1lKSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICBjcmVhdGVUYXJnZXRGaWxlKHNvdXJjZUZpbGVOYW1lLCB0YXJnZXRGaWxlTmFtZSwgZmFsc2UpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIGNyZWF0ZVRhcmdldEZpbGUoU3RyaW5nIHNvdXJjZUZpbGVOYW1lLCBTdHJpbmcgdGFyZ2V0RmlsZU5hbWUsIGJvb2xlYW4gb3ZlcndyaXRlKSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICBGaWxlIGlkZWFsUmVzdWx0RmlsZSA9IG5ldyBGaWxlKHRhcmdldEZpbGVOYW1lKTsKLSAgICBpZiAob3ZlcndyaXRlIHx8ICFpZGVhbFJlc3VsdEZpbGUuZXhpc3RzKCkpCi0gICAgewotICAgICAgRmlsZVV0aWwuY3JlYXRlRmlsZUFuZFBhcmVudERpcmVjdG9yaWVzKHRhcmdldEZpbGVOYW1lKTsKLSAgICAgIEZpbGVVdGlsLmNvcHlGaWxlKHNvdXJjZUZpbGVOYW1lLCB0YXJnZXRGaWxlTmFtZSk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS91dGlsL1BsYXRmb3JtVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3V0aWwvUGxhdGZvcm1VdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYWYwZTNiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3V0aWwvUGxhdGZvcm1VdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTc2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS51dGlsOwotCi0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKLQotcHVibGljIGNsYXNzIFBsYXRmb3JtVXRpbHMgewotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExBVEZPUk1fUk9PVCA9ICJwbGF0Zm9ybTovcmVzb3VyY2UiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFdJTl9GSUxFX1BST1RPQ09MID0gImZpbGU6LyI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE5YX0ZJTEVfUFJPVE9DT0wgPSAiZmlsZTovLyI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExBVEZPUk0gPSAicGxhdGZvcm0iOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFU09VUkNFID0gIi9yZXNvdXJjZSI7Ci0KLQlwcml2YXRlIFBsYXRmb3JtVXRpbHMoKSB7Ci0JfQotCi0JLyoqCi0JKiBSZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgcGxhdGZvcm0gVVJMIGdpdmVuIGFuIElQYXRoCi0JKiBAcGFyYW0gSVBhdGggcGF0aAotCSogQHJldHVybiBTdHJpbmcgcGxhdGZvcm1VUkwKLQkqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFBsYXRmb3JtVVJMKElQYXRoIHBhdGgpIHsKLQkJU3RyaW5nIHBsYXRmb3JtVVJMOwotCQlwbGF0Zm9ybVVSTCA9IFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKHBhdGgudG9TdHJpbmcoKSkudG9TdHJpbmcoKTsKLQkJLy8gb2xkIG1ldGhvZDogZmlsZSBzeXN0ZW0gcmVwcmVzZW50YXRpb24KLQkJLy8gCXBsYXRmb3JtVVJMID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKHBhdGgpLmdldExvY2F0aW9uKCkudG9TdHJpbmcoKTsKLQkJcmV0dXJuIHBsYXRmb3JtVVJMOwotCX0KLQotCS8qKgotCSogUmV0dXJucyB0aGUgVVJMIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBQbGF0Zm9ybSBVUkwgZ2l2ZW4gYW4gSVBhdGgKLQkqIFRoZSBQbGF0Zm9ybVJlc291cmNlTWFuYWdlciB1bmRlcmRzdGFuZHMgdGhpcyBmb3JtYXQgYW5kIHRoZXJlZm9yZQotCSogdGhpcyBpcyBzdWl0ZWQgZm9yIGNvbW1hbmQgVVJMJ3MKLQkqIEBwYXJhbSBJUGF0aCBwYXRoCi0JKiBAcmV0dXJuIFVSTCBQbGF0Zm9ybSBVUkwKLQkqLwotCXB1YmxpYyBzdGF0aWMgVVJMIGdldENvbW1hbmRQbGF0Zm9ybVVSTChJUGF0aCBwYXRoKSB7Ci0JCVVSTCB1cmwgPSBudWxsOwotCQl0cnkgewotCQkJdXJsID0gbmV3IFVSTChQTEFURk9STSwgbnVsbCwgUkVTT1VSQ0UgKyBwYXRoLnRvU3RyaW5nKCkpOwotCQl9IGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIHVybDsKLQkJfQotCQlyZXR1cm4gdXJsOwotCX0KLQotCS8qKgotCSogUmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHBhdGggZ2l2ZW4gcGxhdGZvcm0gVVJMIHN0cmluZwotCSogQHBhcmFtIFN0cmluZyBwbGF0Zm9ybSBVUkwgc3RyaW5nCi0JKiBAcmV0dXJuIFN0cmluZyBwYXRoIHN0cmluZwotCSovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UGF0aEZyb21QbGF0Zm9ybShTdHJpbmcgcGxhdGZvcm1TdHIpIHsKLQkJU3RyaW5nIHBhdGhTdHIgPSBwbGF0Zm9ybVN0cjsKLQotCQlTdHJpbmcgcm9vdExvY2F0aW9uOwotCQlyb290TG9jYXRpb24gPSBQTEFURk9STV9ST09UOwotCQkvLyBvbGQgbWV0aG9kOiBmaWxlIHN5c3RlbSByZXByZXNlbnRhdGlvbgotCQkvLwlyb290TG9jYXRpb24gPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldExvY2F0aW9uKCkudG9TdHJpbmcoKTsKLQkJaWYgKHBsYXRmb3JtU3RyLnN0YXJ0c1dpdGgocm9vdExvY2F0aW9uKSkKLQkJCXBhdGhTdHIgPSBwbGF0Zm9ybVN0ci5zdWJzdHJpbmcocm9vdExvY2F0aW9uLmxlbmd0aCgpKTsKLQkJcmV0dXJuIHBhdGhTdHI7Ci0JfQotCi0JLyoqCi0JKiBSZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgcGxhdGZvcm0gVVJMIGdpdmVuIHRoZSBwYXRoIHN0cmluZwotCSogQHBhcmFtIFN0cmluZyBwYXRoIHN0cmluZwotCSogQHJldHVybiBTdHJpbmcgcGxhdGZvcm0gVVJMIHN0cmluZwotCSovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UGxhdGZvcm1Gcm9tUGF0aChTdHJpbmcgcGF0aFN0cikgewotCQlTdHJpbmcgcGxhdGZvcm1TdHIgPSBwYXRoU3RyOwotCi0JCVN0cmluZyByb290TG9jYXRpb247Ci0JCXJvb3RMb2NhdGlvbiA9IFBMQVRGT1JNX1JPT1Q7Ci0JCS8vIG9sZCBtZXRob2Q6IGZpbGUgc3lzdGVtIHJlcHJlc2VudGF0aW9uCi0JCS8vCXJvb3RMb2NhdGlvbiA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0TG9jYXRpb24oKS50b1N0cmluZygpOwotCQlwbGF0Zm9ybVN0ciA9IHJvb3RMb2NhdGlvbiArIHBhdGhTdHI7Ci0JCXJldHVybiBwbGF0Zm9ybVN0cjsKLQl9Ci0KLQkvKioKLQkqIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbG9jYWwgZmlsZSBzeXN0ZW0gZmlsZSBnaXZlbiBwbGF0Zm9ybSBVUkwgc3RyaW5nCi0JKiBAcGFyYW0gU3RyaW5nIHBsYXRmb3JtIFVSTCBzdHJpbmcKLQkqIEByZXR1cm4gU3RyaW5nIGZpbGUgc3RyaW5nCi0JKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRGaWxlRnJvbVBsYXRmb3JtKFN0cmluZyBwbGF0Zm9ybVN0cikgewotCQlTdHJpbmcgZmlsZVN0ciA9IHBsYXRmb3JtU3RyOwotCQlTdHJpbmcgcGF0aFN0ciA9IGdldFBhdGhGcm9tUGxhdGZvcm0ocGxhdGZvcm1TdHIpOwotCi0JCWZpbGVTdHIgPQotCQkJUmVzb3VyY2VzUGx1Z2luCi0JCQkJLmdldFdvcmtzcGFjZSgpCi0JCQkJLmdldFJvb3QoKQotCQkJCS5nZXRGaWxlKG5ldyBQYXRoKHBhdGhTdHIpKQotCQkJCS5nZXRMb2NhdGlvbigpCi0JCQkJLnRvU3RyaW5nKCk7Ci0KLQkJLy8gb2xkIG1ldGhvZDogZmlsZSBzeXN0ZW0gcmVwcmVzZW50YXRpb24KLQkJLy8JRG8gbm90aGluZwotCi0JCXJldHVybiBmaWxlU3RyOwotCX0KLQotCS8qKgotCSogUmV0dXJucyB0aGUgZmlsZSBwcm90b2NvbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgbG9jYWwgZmlsZSBzeXN0ZW0gZmlsZSBnaXZlbiBwbGF0Zm9ybSBVUkwgc3RyaW5nCi0JKiBAcGFyYW0gU3RyaW5nIHBsYXRmb3JtIFVSTCBzdHJpbmcKLQkqIEByZXR1cm4gU3RyaW5nIHRoZSBmaWxlIHByb3RvY29sIHVyaQotCSovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RmlsZVVSTEZyb21QbGF0Zm9ybShTdHJpbmcgcGxhdGZvcm1TdHIpIHsKLQkJU3RyaW5nIGZpbGVTdHIgPSBwbGF0Zm9ybVN0cjsKLQkJU3RyaW5nIHBhdGhTdHIgPSBnZXRQYXRoRnJvbVBsYXRmb3JtKHBsYXRmb3JtU3RyKTsKLQkJdHJ5IHsKLQkJCWZpbGVTdHIgPQotCQkJCVJlc291cmNlc1BsdWdpbgotCQkJCQkuZ2V0V29ya3NwYWNlKCkKLQkJCQkJLmdldFJvb3QoKQotCQkJCQkuZ2V0RmlsZShuZXcgUGF0aChwYXRoU3RyKSkKLQkJCQkJLmdldExvY2F0aW9uKCkKLQkJCQkJLnRvRmlsZSgpCi0JCQkJCS50b1VSTCgpCi0JCQkJCS50b1N0cmluZygpOwotCQl9IGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gbXVybGUpIHsKLQkJCWZpbGVTdHIgPSBnZXRGaWxlVVJMRnJvbVBhdGgobmV3IFBhdGgocGF0aFN0cikpOwotCQl9Ci0JCXJldHVybiBmaWxlU3RyOwotCX0KLQotCS8qKgotCSogUmV0dXJucyB0aGUgZmlsZSBwcm90b2NvbCByZXByZXNlbnRhdGlvbiBvZiBhIGxvY2FsIGZpbGUKLQkqIEBwYXJhbSBJUGF0aCB0aGUgUGF0aCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBmaWxlCi0JKiBAcmV0dXJuIFN0cmluZyB0aGUgZmlsZSBwcm90b2NvbCB1cmkKLQkqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEZpbGVVUkxGcm9tUGF0aChJUGF0aCBwYXRoKSB7Ci0KLQkJU3RyaW5nIGZpbGUgPSBudWxsOwotCQlpZiAocGF0aCAhPSBudWxsKSB7Ci0JCQlpZiAoIXBhdGguaXNBYnNvbHV0ZSgpKSB7Ci0JCQkJZmlsZSA9Ci0JCQkJCVJlc291cmNlc1BsdWdpbgotCQkJCQkJLmdldFdvcmtzcGFjZSgpCi0JCQkJCQkuZ2V0Um9vdCgpCi0JCQkJCQkuZ2V0RmlsZShwYXRoKQotCQkJCQkJLmdldExvY2F0aW9uKCkKLQkJCQkJCS50b1N0cmluZygpOwotCQkJCWlmIChmaWxlLmNoYXJBdCgwKSA9PSBJUGF0aC5TRVBBUkFUT1IpIHsKLQkJCQkJZmlsZSA9IExOWF9GSUxFX1BST1RPQ09MICsgZmlsZTsKLQkJCQl9IGVsc2UgewotCQkJCQlmaWxlID0gV0lOX0ZJTEVfUFJPVE9DT0wgKyBmaWxlOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJZmlsZSA9IHBhdGgudG9TdHJpbmcoKTsKLQkJCX0KLQkJCWlmIChmaWxlICE9IG51bGwgJiYgZmlsZS5jaGFyQXQoMCkgPT0gSVBhdGguU0VQQVJBVE9SKSB7Ci0JCQkJZmlsZSA9IExOWF9GSUxFX1BST1RPQ09MICsgZmlsZTsKLQkJCX0gZWxzZSB7Ci0JCQkJZmlsZSA9IFdJTl9GSUxFX1BST1RPQ09MICsgZmlsZTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZmlsZSA9PSBudWxsID8gbnVsbCA6IGZpbGU7Ci0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS91dGlsL1dTRExVdGlscy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvdXRpbC9XU0RMVXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2NiMzY3MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS91dGlsL1dTRExVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTE0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIxNiAgIDEyNzEzOCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgamF2YXgud3NkbC5TZXJ2aWNlOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBBZGRyZXNzOwotaW1wb3J0IGphdmF4LndzZGwuZmFjdG9yeS5XU0RMRmFjdG9yeTsKLWltcG9ydCBqYXZheC53c2RsLnhtbC5XU0RMUmVhZGVyOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci1pbXBvcnQgb3JnLmFwYWNoZS5heGlzLndzZGwudG9KYXZhLlV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwud3NkbDRqLldTRExGYWN0b3J5SW1wbDsKLWltcG9ydCBjb20uaWJtLmljdS50ZXh0LkNvbGxhdG9yOwotaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuU3RyaW5nVG9rZW5pemVyOwotCi1wdWJsaWMgY2xhc3MgV1NETFV0aWxzIHsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRE9UID0gIi4iOwotCi0gIC8qKgotICAqIFRoZXNlIGFyZSBqYXZhIGtleXdvcmRzIGFzIHNwZWNpZmllZCBhdCB0aGUgZm9sbG93aW5nIFVSTCAoc29ydGVkIGFscGhhYmV0aWNhbGx5KS4KLSAgKiBodHRwOi8vamF2YS5zdW4uY29tL2RvY3MvYm9va3MvamxzL3NlY29uZF9lZGl0aW9uL2h0bWwvbGV4aWNhbC5kb2MuaHRtbCMyMjkzMDgKLSAgKiBOb3RlIHRoYXQgZmFsc2UsIHRydWUsIGFuZCBudWxsIGFyZSBub3Qgc3RyaWN0bHkga2V5d29yZHM7IHRoZXkgYXJlIGxpdGVyYWwgdmFsdWVzLAotICAqIGJ1dCBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgYXJyYXksIHRoZXkgY2FuIGJlIHRyZWF0ZWQgYXMgbGl0ZXJhbHMuCi0gICovCi0gIHN0YXRpYyBmaW5hbCBTdHJpbmcga2V5d29yZHNbXSA9Ci0gIHsKLSAgICAgICJhYnN0cmFjdCIsICAiYm9vbGVhbiIsICAgICAgImJyZWFrIiwgICAgICAiYnl0ZSIsICAgICAgImNhc2UiLAotICAgICAgImNhdGNoIiwgICAgICJjaGFyIiwgICAgICAgICAiY2xhc3MiLCAgICAgICJjb25zdCIsICAgICAiY29udGludWUiLAotICAgICAgImRlZmF1bHQiLCAgICJkbyIsICAgICAgICAgICAiZG91YmxlIiwgICAgICJlbHNlIiwgICAgICAiZXh0ZW5kcyIsCi0gICAgICAiZmFsc2UiLCAgICAgImZpbmFsIiwgICAgICAgICJmaW5hbGx5IiwgICAgImZsb2F0IiwgICAgICJmb3IiLAotICAgICAgImdvdG8iLCAgICAgICJpZiIsICAgICAgICAgICAiaW1wbGVtZW50cyIsICJpbXBvcnQiLCAgICAiaW5zdGFuY2VvZiIsCi0gICAgICAiaW50IiwgICAgICAgImludGVyZmFjZSIsICAgICJsb25nIiwgICAgICAgIm5hdGl2ZSIsICAgICJuZXciLAotICAgICAgIm51bGwiLCAgICAgICJwYWNrYWdlIiwgICAgICAicHJpdmF0ZSIsICAgICJwcm90ZWN0ZWQiLCAicHVibGljIiwKLSAgICAgICJyZXR1cm4iLCAgICAic2hvcnQiLCAgICAgICAgInN0YXRpYyIsICAgICAic3RyaWN0ZnAiLCAgInN1cGVyIiwKLSAgICAgICJzd2l0Y2giLCAgICAic3luY2hyb25pemVkIiwgInRoaXMiLCAgICAgICAidGhyb3ciLCAgICAgInRocm93cyIsCi0gICAgICAidHJhbnNpZW50IiwgInRydWUiLCAgICAgICAgICJ0cnkiLCAgICAgICAgInZvaWQiLCAgICAgICJ2b2xhdGlsZSIsCi0gICAgICAid2hpbGUiCi0gIH07Ci0KLSAgLyoqIENvbGxhdG9yIGZvciBjb21wYXJpbmcgdGhlIHN0cmluZ3MgKi8KLSAgc3RhdGljIGZpbmFsIENvbGxhdG9yIGVuZ2xpc2hDb2xsYXRvciA9IENvbGxhdG9yLmdldEluc3RhbmNlKExvY2FsZS5FTkdMSVNIKTsKLQotICAvKiogVXNlIHRoaXMgY2hhcmFjdGVyIGFzIHN1ZmZpeCAqLwotICBzdGF0aWMgZmluYWwgY2hhciBrZXl3b3JkUHJlZml4ID0gJ18nOwotCi0gIHByaXZhdGUgV1NETFV0aWxzKCkgewotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgZmlyc3Qgc2VydmljZSBlbGVtZW50IGluIHRoZSBXU0RMIGRlZmluaXRpb24uCi0gICogQHJldHVybiBTdHJpbmcgc2VydmljZSBlbGVtZW50IG5hbWUKLSAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U2VydmljZUVsZW1lbnROYW1lKERlZmluaXRpb24gZGVmaW5pdGlvbikgewotICAJU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2UpIGRlZmluaXRpb24uZ2V0U2VydmljZXMoKS52YWx1ZXMoKS5pdGVyYXRvcigpLm5leHQoKTsKLSAgCXJldHVybiBzZXJ2aWNlLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBwb3J0IHR5cGUgZWxlbWVudCBwb2ludHMgdG8gYnkgdGhlIGZpcnN0IHNlcnZpY2UgYW5kIHBvcnQgZWxlbWVudCBpbiB0aGUgV1NETCBkZWZpbml0aW9uLgotICAqIEByZXR1cm4gU3RyaW5nIHBvcnQgdHlwZSBlbGVtZW50IG5hbWUKLSAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UG9ydFR5cGVOYW1lKERlZmluaXRpb24gZGVmaW5pdGlvbikgewotICAJU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2UpIGRlZmluaXRpb24uZ2V0U2VydmljZXMoKS52YWx1ZXMoKS5pdGVyYXRvcigpLm5leHQoKTsKLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IHNlcnZpY2UuZ2V0UG9ydHMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOyAKLSAgICB3aGlsZShpdGVyYXRvci5oYXNOZXh0KCkpewotICAgICAgUG9ydCBwb3J0ID0gKFBvcnQpIGl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIGZvciAoaW50IGk9MDsgaTxwb3J0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLnNpemUoKTtpKyspIHsKLSAgICAgICAgaWYgKHBvcnQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuZ2V0KGkpIGluc3RhbmNlb2YgU09BUEFkZHJlc3MpIHsKLSAgICAgICAgICAgQmluZGluZyBiaW5kaW5nID0gcG9ydC5nZXRCaW5kaW5nKCk7Ci0gICAgICAgICAgIHJldHVybiBiaW5kaW5nLmdldFBvcnRUeXBlKCkuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gIiI7Ci0gIAotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgcG9ydCBlbGVtZW50IGluIHRoZSBXU0RMIGRlZmluaXRpb24uCi0gICogQHJldHVybiBTdHJpbmcgcG9ydCBuYW1lCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFBvcnROYW1lKERlZmluaXRpb24gZGVmaW5pdGlvbikgewotICAJU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2UpIGRlZmluaXRpb24uZ2V0U2VydmljZXMoKS52YWx1ZXMoKS5pdGVyYXRvcigpLm5leHQoKTsKLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IHNlcnZpY2UuZ2V0UG9ydHMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOyAKLSAgICB3aGlsZShpdGVyYXRvci5oYXNOZXh0KCkpewotICAgICAgUG9ydCBwb3J0ID0gKFBvcnQpIGl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIGZvciAoaW50IGk9MDsgaTxwb3J0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLnNpemUoKTtpKyspIHsKLSAgICAgICAgaWYgKHBvcnQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuZ2V0KGkpIGluc3RhbmNlb2YgU09BUEFkZHJlc3MpIAotICAgICAgICAgIHJldHVybiBwb3J0LmdldE5hbWUoKTsKLSAgICAgIH0gIAotICAgIH0KLSAgICAgcmV0dXJuICIiOwotICB9Ci0KLQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIG1ha2VOYW1lc3BhY2UgKFN0cmluZyBjbHNOYW1lKSB7Ci0JICByZXR1cm4gbWFrZU5hbWVzcGFjZShjbHNOYW1lLCAiaHR0cCIpOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ha2UgbmFtZXNwYWNlIGZyb20gYSBmdWxseSBxdWFsaWZpZWQgY2xhc3MgbmFtZQotICAgKiBhbmQgdGhlIGdpdmVuIHByb3RvY29sCi0gICAqCi0gICAqIEBwYXJhbSBjbHNOYW1lIGZ1bGx5IHF1YWxpZmllZCBjbGFzcyBuYW1lCi0gICAqIEBwYXJhbSBwcm90b2NvbCBwcm90b2NvbCBTdHJpbmcKLSAgICogQHJldHVybiBuYW1lc3BhY2UgbmFtZXNwYWNlIFN0cmluZwotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgbWFrZU5hbWVzcGFjZSAoU3RyaW5nIGNsc05hbWUsIFN0cmluZyBwcm90b2NvbCkgewotCSAgaWYgKGNsc05hbWUubGFzdEluZGV4T2YoJy4nKSA9PSAtMSkKLQkJICByZXR1cm4gcHJvdG9jb2wgKyAiOi8vIiArICJEZWZhdWx0TmFtZXNwYWNlIjsKLQkgIFN0cmluZyBwYWNrYWdlTmFtZSA9IGNsc05hbWUuc3Vic3RyaW5nKDAsIGNsc05hbWUubGFzdEluZGV4T2YoJy4nKSk7Ci0JICByZXR1cm4gbWFrZU5hbWVzcGFjZUZyb21QYWNrYWdlTmFtZShwYWNrYWdlTmFtZSwgcHJvdG9jb2wpOyAgICAgICAKLSAgfQotCi0gICAgCi0gIHByaXZhdGUgc3RhdGljIFN0cmluZyBtYWtlTmFtZXNwYWNlRnJvbVBhY2thZ2VOYW1lKFN0cmluZyBwYWNrYWdlTmFtZSwgU3RyaW5nIHByb3RvY29sKSB7Ci0JICBpZiAocGFja2FnZU5hbWUgPT0gbnVsbCB8fCBwYWNrYWdlTmFtZS5lcXVhbHMoIiIpKQotCQkgIHJldHVybiBwcm90b2NvbCArICI6Ly8iICsgIkRlZmF1bHROYW1lc3BhY2UiOwotCSAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplciggcGFja2FnZU5hbWUsICIuIiApOwotCSAgU3RyaW5nW10gd29yZHMgPSBuZXcgU3RyaW5nWyBzdC5jb3VudFRva2VucygpIF07Ci0JICBmb3IoaW50IGkgPSAwOyBpIDwgd29yZHMubGVuZ3RoOyArK2kpCi0JCSAgd29yZHNbaV0gPSBzdC5uZXh0VG9rZW4oKTsKLQotCSAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcig4MCk7Ci0JICBmb3IoaW50IGkgPSB3b3Jkcy5sZW5ndGgtMTsgaSA+PSAwOyAtLWkpIHsKLQkJICBTdHJpbmcgd29yZCA9IHdvcmRzW2ldOwotCQkgIC8vIHNlcGVyYXRlIHdpdGggZG90Ci0JCSAgaWYoIGkgIT0gd29yZHMubGVuZ3RoLTEgKQotCQkJICBzYi5hcHBlbmQoJy4nKTsKLQkJICBzYi5hcHBlbmQoIHdvcmQgKTsKLQkgIH0KLQkgIHJldHVybiBwcm90b2NvbCArICI6Ly8iICsgc2IudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybiBhIERlZmluaXRpb24gZm9yIHRoZSB3c2RsIHVybCBnaXZlbiAKLSAgKgotICAqLwotICBwdWJsaWMgc3RhdGljIERlZmluaXRpb24gZ2V0V1NETERlZmluaXRpb24oU3RyaW5nIHdzZGxVUkwpCi0gIHsKLSAgICBpZih3c2RsVVJMID09IG51bGwpIHJldHVybiBudWxsOwotCi0gICAgV1NETEZhY3Rvcnkgd3NkbEZhY3Rvcnk7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gbnVsbDsKLSAgICB0cnkgewotICAgICAgd3NkbEZhY3RvcnkgPSBuZXcgV1NETEZhY3RvcnlJbXBsKCk7Ci0gICAgICBXU0RMUmVhZGVyIHdzZGxSZWFkZXIgPSB3c2RsRmFjdG9yeS5uZXdXU0RMUmVhZGVyKCk7Ci0gICAgICBkZWZpbml0aW9uID0gd3NkbFJlYWRlci5yZWFkV1NETCh3c2RsVVJMKTsKLSAgICB9IAotICAgIGNhdGNoIChFeGNlcHRpb24gZSkgeyAvLyBjYW4gYmUgV1NETEV4Y2VwdGlvbiBvciBJT0V4Y2VwdGlvbgotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICAgIHJldHVybiBkZWZpbml0aW9uOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UGFja2FnZU5hbWUoRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICB7Ci0gICAgIGlmIChkZWZpbml0aW9uICE9IG51bGwpCi0gICAgIHsKLSAgICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgICAgIHJldHVybiBuYW1lc3BhY2VVUkkyUGFja2FnZU5hbWUobmFtZXNwYWNlKTsKLSAgICAgfQotICAgICByZXR1cm4gIiI7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQYWNrYWdlTmFtZUZvckJpbmRpbmdJbXBsKFBvcnQgcG9ydCwgTWFwIG5zMnBrZ01hcCkKLSAgewotICAgIGlmIChwb3J0ICE9IG51bGwgJiYgbnMycGtnTWFwICE9IG51bGwpCi0gICAgewotICAgICAgQmluZGluZyBiaW5kaW5nID0gcG9ydC5nZXRCaW5kaW5nKCk7Ci0gICAgICBRTmFtZSBibmRRTmFtZSA9IGJpbmRpbmcuZ2V0UU5hbWUoKTsKLSAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBibmRRTmFtZS5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICAgIE9iamVjdCBwa2cgPSBuczJwa2dNYXAuZ2V0KG5hbWVzcGFjZSk7Ci0gICAgICBpZiAocGtnICE9IG51bGwpCi0gICAgICAgIHJldHVybiAoU3RyaW5nKXBrZzsKLSAgICB9Ci0gICAgcmV0dXJuIGdldFBhY2thZ2VOYW1lRm9yQmluZGluZ0ltcGwocG9ydCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQYWNrYWdlTmFtZUZvckJpbmRpbmdJbXBsKERlZmluaXRpb24gZGVmaW5pdGlvbiwgTWFwIG5zMnBrZ01hcCkKLSAgewotICAgIGlmIChkZWZpbml0aW9uICE9IG51bGwgJiYgbnMycGtnTWFwICE9IG51bGwpCi0gICAgewotICAgICAgU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2UpIGRlZmluaXRpb24uZ2V0U2VydmljZXMoKS52YWx1ZXMoKS5pdGVyYXRvcigpLm5leHQoKTsKLSAgICAgIFBvcnQgcG9ydCA9IChQb3J0KSBzZXJ2aWNlLmdldFBvcnRzKCkudmFsdWVzKCkuaXRlcmF0b3IoKS5uZXh0KCk7Ci0gICAgICByZXR1cm4gZ2V0UGFja2FnZU5hbWVGb3JCaW5kaW5nSW1wbChwb3J0LCBuczJwa2dNYXApOwotICAgIH0KLSAgICByZXR1cm4gZ2V0UGFja2FnZU5hbWVGb3JCaW5kaW5nSW1wbChkZWZpbml0aW9uKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFBhY2thZ2VOYW1lRm9yQmluZGluZ0ltcGwoRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICB7Ci0gICAgUG9ydCBwb3J0ID0gbnVsbDsKLSAgICBpZiAoZGVmaW5pdGlvbiAhPSBudWxsKQotICAgIHsKLSAgICAgIFNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKWRlZmluaXRpb24uZ2V0U2VydmljZXMoKS52YWx1ZXMoKS5pdGVyYXRvcigpLm5leHQoKTsKLSAgICAgIHBvcnQgPSAoUG9ydClzZXJ2aWNlLmdldFBvcnRzKCkudmFsdWVzKCkuaXRlcmF0b3IoKS5uZXh0KCk7Ci0gICAgfQotICAgIHJldHVybiBnZXRQYWNrYWdlTmFtZUZvckJpbmRpbmdJbXBsKHBvcnQpOwotICB9Ci0KLS8vIFRoaXMgaXMgeWV0IGFub3RoZXIgbmFtaW5nIGFsZ29yaXRobSBiYXNlZCBvbiB3ZWJzZXJ2aWNlcy5qYXIKLS8vIFRoZXkgYWx3YXlzIHVzZSB0aGUgYmluZGluZyBuYW1lc3BhY2UgYXMgdGhlIHBhY2thZ2UgbmFtZQotLy8gb2YgdGhlIEJpbmRpbmdJbXBsIGNsYXNzLgotcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UGFja2FnZU5hbWVGb3JCaW5kaW5nSW1wbChQb3J0IHBvcnQpCi17Ci0gICBpZiAocG9ydCAhPSBudWxsKQotICAgewotCSAgQmluZGluZyBiaW5kaW5nID0gcG9ydC5nZXRCaW5kaW5nKCk7Ci0vLwkgIFBvcnRUeXBlIHBvcnRUeXBlID0gYmluZGluZy5nZXRQb3J0VHlwZSgpOwotCSAgUU5hbWUgYm5kUU5hbWUgPSBiaW5kaW5nLmdldFFOYW1lKCk7Ci0JICBTdHJpbmcgbmFtZXNwYWNlID0gYm5kUU5hbWUuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0JICByZXR1cm4gbmFtZXNwYWNlVVJJMlBhY2thZ2VOYW1lKG5hbWVzcGFjZSk7Ci0gICB9Ci0gICByZXR1cm4gIiI7Ci19Ci0KLS8qKgotKiBHZXQgdGhlIG5hbWVzcGFjZSBmb3IgdGhlIFBvcnQgVHlwZQotKiAKLSovCi1wdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQb3J0VHlwZU5hbWVzcGFjZShEZWZpbml0aW9uIGRlZmluaXRpb24pCi17Ci0gIFN0cmluZyBuYW1lc3BhY2UgPSAiIjsKLSAgaWYgKGRlZmluaXRpb24gIT0gbnVsbCkKLSAgewotCVNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKSBkZWZpbml0aW9uLmdldFNlcnZpY2VzKCkudmFsdWVzKCkuaXRlcmF0b3IoKS5uZXh0KCk7Ci0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBzZXJ2aWNlLmdldFBvcnRzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsgCi0Jd2hpbGUoaXRlcmF0b3IuaGFzTmV4dCgpKXsKLSAgICAgIFBvcnQgcG9ydCA9IChQb3J0KSBpdGVyYXRvci5uZXh0KCk7Ci0gICAgICBmb3IgKGludCBpPTA7IGk8cG9ydC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5zaXplKCk7aSsrKSB7Ci0gICAgICAgIGlmIChwb3J0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLmdldChpKSBpbnN0YW5jZW9mIFNPQVBBZGRyZXNzKXsgCi0JICAgICAgUG9ydFR5cGUgcG9ydFR5cGUgPSBwb3J0LmdldEJpbmRpbmcoKS5nZXRQb3J0VHlwZSgpOwotCSAgICAgIFFOYW1lIGJuZFFOYW1lID0gcG9ydFR5cGUuZ2V0UU5hbWUoKTsKLQkgICAgICBuYW1lc3BhY2UgPSBibmRRTmFtZS5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICAgIAl9ICAKLQkgIH0KLSAgCX0KLSAgfSAgCi0gIHJldHVybiBuYW1lc3BhY2U7Ci19Ci0KLS8vIFRoaXMgaXMgeWV0IGFub3RoZXIgbmFtaW5nIGFsZ29yaXRobSBiYXNlZCBvbiB3ZWJzZXJ2aWNlcy5qYXIKLS8vIFRoZXkgYWx3YXlzIHVzZSB0aGUgcG9ydHR5cGUgbmFtZXNwYWNlIGFzIHRoZSBwYWNrYWdlIG5hbWUKLS8vIG9mIHRoZSBKYXZhIGNsYXNzIChpbiBlamIpLgotcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UGFja2FnZU5hbWVGb3JQb3J0VHlwZShEZWZpbml0aW9uIGRlZmluaXRpb24pCi17Ci0gICBpZiAoZGVmaW5pdGlvbiAhPSBudWxsKQotICAgewotCSAgU3RyaW5nIG5hbWVzcGFjZSA9IGdldFBvcnRUeXBlTmFtZXNwYWNlKGRlZmluaXRpb24pOwotCSAgcmV0dXJuIG5hbWVzcGFjZVVSSTJQYWNrYWdlTmFtZShuYW1lc3BhY2UpOwotICAgIH0KLSAgICByZXR1cm4gIiI7Ci19Ci0KLSAgLyoqCi0gICogY2hlY2tzIGlmIHRoZSBpbnB1dCBzdHJpbmcgaXMgYSB2YWxpZCBqYXZhIGtleXdvcmQuCi0gICogQHJldHVybiBib29sZWFuIHRydWUvZmFsc2UKLSAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzSmF2YUtleXdvcmQoU3RyaW5nIGtleXdvcmQpIHsKLSAgICByZXR1cm4gKEFycmF5cy5iaW5hcnlTZWFyY2goa2V5d29yZHMsIGtleXdvcmQsIGVuZ2xpc2hDb2xsYXRvcikgPj0gMCk7Ci0gIH0KLQotICAvKioKLSAgKiBUdXJuIGEgamF2YSBrZXl3b3JkIHN0cmluZyBpbnRvIGEgbm9uLUphdmEga2V5d29yZCBzdHJpbmcuICAoUmlnaHQgbm93Ci0gICogdGhpcyBzaW1wbHkgbWVhbnMgYXBwZW5kaW5nIGFuIHVuZGVyc2NvcmUuKQotICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBtYWtlTm9uSmF2YUtleXdvcmQoU3RyaW5nIGtleXdvcmQpewotICAgIHJldHVybiAga2V5d29yZFByZWZpeCArIGtleXdvcmQ7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRGdWxseVF1YWxpZmllZFBvcnRUeXBlTmFtZShEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYmVhbk5hbWUgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgYmVhbk5hbWUuYXBwZW5kKGdldFBhY2thZ2VOYW1lRm9yUG9ydFR5cGUoZGVmaW5pdGlvbikpOyAKLSAgICBiZWFuTmFtZS5hcHBlbmQoRE9UKTsKLSAgICBiZWFuTmFtZS5hcHBlbmQoZ2V0UG9ydFR5cGVOYW1lKGRlZmluaXRpb24pKTsKLSAgICByZXR1cm4gYmVhbk5hbWUudG9TdHJpbmcoKTsKLQotICB9Ci0KLSAgLyoqCi0gICAqIGdldE5hbWUKLSAgICogQHBhcmFtIHVyaSBTdHJpbmcKLSAgICogQHJldHVybiBnZXQgdGhlIGZpbGUgbmFtZSBhZnRlciB0aGUgbGFzdCBcIGFuZCAvCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXROYW1lKFN0cmluZyB1cmkpIHsKLQotCS8vIEdldCBldmVyeXRoaW5nIGFmdGVyIGxhc3Qgc2xhc2ggb3IgYmFja3NsYXNoCi0JaW50IGJzbGFzaCA9IHVyaS5sYXN0SW5kZXhPZigiXFwiKTsKLQlpbnQgc2xhc2ggPSB1cmkubGFzdEluZGV4T2YoIi8iKTsKLQlpbnQgaSA9ICBic2xhc2ggPiBzbGFzaCA/IGJzbGFzaCA6IHNsYXNoOwotCVN0cmluZyBmaWxlTmFtZSA9IHVyaS5zdWJzdHJpbmcoaSsxKS5yZXBsYWNlKCc/JywgJy4nKTsKLQotCXJldHVybiBmaWxlTmFtZTsKLSAgfQotCi0KLS8qKgotICogZ2V0V1NETE5hbWUKLSAqIEBwYXJhbSB1cmkgU3RyaW5nCi0gKiBAcmV0dXJuIGdldCB0aGUgZmlsZSBuYW1lIGFmdGVyIHRoZSBsYXN0IFwgYW5kIC8sIHRyaW1tZWQsIGRlZmF1bHRlZCB0bwotICogICAgICAgICAiZGVmYXVsdC53c2RsIiBpZiB0aGVyZSBpcyBubyBuYW1lLCBhbmQgZW5kaW5nIHdpdGggIi53c2RsIi4KLSAqLwotIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFdTRExOYW1lKFN0cmluZyB1cmkpIHsKLQotCS8vIEdldCBldmVyeXRoaW5nIGFmdGVyIGxhc3Qgc2xhc2ggb3IgYmFja3NsYXNoIGZyb20gaW5wdXQgVVJJCi0JLy8gd2l0aCBubyB3aGl0ZXNwYWNlLgotCVN0cmluZyBXU0RMTmFtZSA9IGdldE5hbWUodXJpKS50cmltKCk7Ci0KLQkvLyBpZiBlbXB0eSwgcmV0dXJuIHRoZSBkZWZhdWx0ICJkZWZhdWx0LndzZGwiCi0JaWYgKCBXU0RMTmFtZS5lcXVhbHMoICIiICkgKSB7Ci0JCVdTRExOYW1lID0gImRlZmF1bHQud3NkbCI7Ci0JfQotCi0JLy8gbWFrZSBzdXJlIG5hbWUgZW5kcyB3aXRoICIud3NkbCIsIGxvd2VyIGNhc2UuCi0JZWxzZSB7Ci0JCWlmICggISBXU0RMTmFtZS5lbmRzV2l0aCggIi53c2RsIiApICkgewotCQkJaWYgKCBXU0RMTmFtZS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCAiLndzZGwiICkgKSB7Ci0JCQkJaW50IGxhc3REb3QgPSBXU0RMTmFtZS5sYXN0SW5kZXhPZigiLiIpOwotCQkJCVdTRExOYW1lID0gV1NETE5hbWUuc3Vic3RyaW5nKCAwLCBsYXN0RG90ICkgKyAiLndzZGwiOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJV1NETE5hbWUgPSBXU0RMTmFtZSArICIud3NkbCI7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gV1NETE5hbWU7Ci0gfQotCi0gLyoqCi0gICogZ2V0UG9ydFR5cGVOYW1lRnJvbUJlYW5OYW1lCi0gICogQHBhcmFtIGJlYW5uYW1lIFN0cmluZwotICAqIEByZXR1cm4gZ2V0IHRoZSBwb3J0IHR5cGUgbmFtZSBiYXNlZCBvbiB0aGUgYmVhbiBuYW1lCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFBvcnRUeXBlTmFtZUZyb21CZWFuTmFtZShTdHJpbmcgYmVhbk5hbWUpIHsKLSAgICByZXR1cm4gYmVhbk5hbWUuc3Vic3RyaW5nKGJlYW5OYW1lLmxhc3RJbmRleE9mKCcuJykgKyAxKTsJCi0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQYWNrYWdlTmFtZShTZXJ2aWNlIHNlcnZpY2UsIE1hcCBuczJwa2dNYXApCi0gIHsKLSAgICBpZiAoc2VydmljZSAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBzZXJ2aWNlLmdldFFOYW1lKCkuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICBpZiAobnMycGtnTWFwICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIE9iamVjdCBwa2cgPSBuczJwa2dNYXAuZ2V0KG5hbWVzcGFjZSk7Ci0gICAgICAgIGlmIChwa2cgIT0gbnVsbCkKLSAgICAgICAgICByZXR1cm4gKFN0cmluZylwa2c7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gbmFtZXNwYWNlVVJJMlBhY2thZ2VOYW1lKG5hbWVzcGFjZSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJldHVybiAiIjsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFBhY2thZ2VOYW1lKFBvcnQgcG9ydCwgTWFwIG5zMnBrZ01hcCkKLSAgewotICAgIGlmIChwb3J0ICE9IG51bGwpCi0gICAgICByZXR1cm4gZ2V0UGFja2FnZU5hbWUocG9ydC5nZXRCaW5kaW5nKCksIG5zMnBrZ01hcCk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuICIiOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UGFja2FnZU5hbWUoQmluZGluZyBiaW5kaW5nLCBNYXAgbnMycGtnTWFwKQotICB7Ci0gICAgaWYgKGJpbmRpbmcgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgbmFtZXNwYWNlID0gYmluZGluZy5nZXRRTmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgaWYgKG5zMnBrZ01hcCAhPSBudWxsKQotICAgICAgewotICAgICAgICBPYmplY3QgcGtnID0gbnMycGtnTWFwLmdldChuYW1lc3BhY2UpOwotICAgICAgICBpZiAocGtnICE9IG51bGwpCi0gICAgICAgICAgcmV0dXJuIChTdHJpbmcpcGtnOwotICAgICAgfQotICAgICAgcmV0dXJuIG5hbWVzcGFjZVVSSTJQYWNrYWdlTmFtZShuYW1lc3BhY2UpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gIiI7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQYWNrYWdlTmFtZShQb3J0VHlwZSBwb3J0VHlwZSwgTWFwIG5zMnBrZ01hcCkKLSAgewotICAgIGlmIChwb3J0VHlwZSAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBwb3J0VHlwZS5nZXRRTmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgaWYgKG5zMnBrZ01hcCAhPSBudWxsKQotICAgICAgewotICAgICAgICBPYmplY3QgcGtnID0gbnMycGtnTWFwLmdldChuYW1lc3BhY2UpOwotICAgICAgICBpZiAocGtnICE9IG51bGwpCi0gICAgICAgICAgcmV0dXJuIChTdHJpbmcpcGtnOwotICAgICAgfQotICAgICAgcmV0dXJuIG5hbWVzcGFjZVVSSTJQYWNrYWdlTmFtZShuYW1lc3BhY2UpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gIiI7Ci0gIH0KLQotCi0gIC8qKgotICAgKiBuYW1lc3BhY2VVUkkyUGFja2FnZU5hbWUKLSAgICogQHBhcmFtIG5hbWVzcGFjZVVSSQotICAgKiBAcmV0dXJuIHBhY2thZ2UgbmFtZSBiYXNlZCBvbiBuYW1lc3BhY2UKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIG5hbWVzcGFjZVVSSTJQYWNrYWdlTmFtZShTdHJpbmcgbmFtZXNwYWNlVVJJKQotICB7Ci0gIAkvKioKLSAgCSAqIFRPRE86ICBUaGUgbWFrZVBhY2thZ2VOYW1lIG1ldGhvZCBmcm9tIAotICAJICogb3JnLmFwYWNoZS5heGlzLndzZGwudG9KYXZhLlV0aWxzIGluIGF4aXMtMV8xIGlzIGNhbGxlZCB0byBtYXAgbmFtZXNwYWNlIHRvIHBhY2thZ2UgbmFtZS4gIAotICAJICogVGhpcyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggYW4gZXh0ZW5zaW9uIHBvaW50IHRvIHBsdWcgaW4gcnVudGltZSBlbWl0dGVyIHNwZWNpZmljIG5hbWVzcGFjZSB0byAKLSAgCSAqIHBhY2thZ2UgbWFwcGluZyBhbGdvcml0aG0gCi0gIAkgKi8KLSAgCXJldHVybiBVdGlscy5tYWtlUGFja2FnZU5hbWUobmFtZXNwYWNlVVJJKTsKLSAgCQotLy8gICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcig4MCk7Ci0vLyAgICBpZiAobmFtZXNwYWNlVVJJICE9IG51bGwgJiYgbmFtZXNwYWNlVVJJLmxlbmd0aCgpID4gMCkKLS8vICAgIHsKLS8vICAgICAgU3RyaW5nIGhvc3RuYW1lID0gbnVsbDsKLS8vICAgICAgdHJ5Ci0vLyAgICAgIHsKLS8vICAgICAgICBob3N0bmFtZSA9IG5ldyBVUkwobmFtZXNwYWNlVVJJKS5nZXRIb3N0KCk7Ci0vLyAgICAgIH0KLS8vICAgICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKQotLy8gICAgICB7Ci0vLyAgICAgICAgaW50IGluZGV4ID0gbmFtZXNwYWNlVVJJLmluZGV4T2YoIjoiKTsKLS8vICAgICAgICBpZiAoaW5kZXggPiAtMSkKLS8vICAgICAgICB7Ci0vLyAgICAgICAgICBob3N0bmFtZSA9IG5hbWVzcGFjZVVSSS5zdWJzdHJpbmcoaW5kZXgrMSk7Ci0vLyAgICAgICAgICBpbmRleCA9IGhvc3RuYW1lLmluZGV4T2YoIi8iKTsKLS8vICAgICAgICAgIGlmIChpbmRleCA+IC0xKQotLy8gICAgICAgICAgICBob3N0bmFtZSA9IGhvc3RuYW1lLnN1YnN0cmluZygwLCBpbmRleCk7Ci0vLyAgICAgICAgfQotLy8gICAgICAgIGVsc2UKLS8vICAgICAgICAgIGhvc3RuYW1lID0gbmFtZXNwYWNlVVJJOwotLy8gICAgICB9Ci0vLyAgICAgIAotLy8JICAvLyBpZiB3ZSBkaWRuJ3QgZmlsZSBhIGhvc3RuYW1lLCBiYWlsCi0vLwkgIGlmIChob3N0bmFtZSA9PSBudWxsKSB7Ci0vLwkJICByZXR1cm4gbnVsbDsKLS8vCSAgfQotLy8KLS8vICAgICAgLy9jb252ZXJ0IGlsbGVnYWwgamF2YSBpZGVudGlmaWVyCi0vLyAgICAgIGhvc3RuYW1lID0gaG9zdG5hbWUucmVwbGFjZSgnLScsICdfJyk7Ci0vLyAgICAgIC8vIHRva2VuaXplIHRoZSBob3N0bmFtZSBhbmQgcmV2ZXJzZSBpdAotLy8gICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGhvc3RuYW1lLCAiLiIpOwotLy8gICAgICBTdHJpbmdbXSB3b3JkcyA9IG5ldyBTdHJpbmdbc3QuY291bnRUb2tlbnMoKV07Ci0vLyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgd29yZHMubGVuZ3RoOyArK2kpCi0vLyAgICAgICAgd29yZHNbaV0gPSBzdC5uZXh0VG9rZW4oKTsKLS8vICAgICAgZm9yKGludCBpID0gd29yZHMubGVuZ3RoLTE7IGkgPj0gMDsgLS1pKQotLy8gICAgICB7Ci0vLyAgICAgICAgU3RyaW5nIHdvcmQgPSB3b3Jkc1tpXTsKLS8vICAgICAgICBpZiAoaXNKYXZhS2V5d29yZCh3b3JkKSkKLS8vICAgICAgICAgIHdvcmQgPSBtYWtlTm9uSmF2YUtleXdvcmQod29yZCk7Ci0vLyAgICAgICAgLy8gc2VwZXJhdGUgd2l0aCBkb3QKLS8vICAgICAgICBpZiAoaSAhPSB3b3Jkcy5sZW5ndGgtMSkKLS8vICAgICAgICAgIHNiLmFwcGVuZCgnLicpOwotLy8gICAgICAgIC8vIGNvbnZlcnQgZGlnaXRzIHRvIHVuZGVyc2NvcmVzCi0vLyAgICAgICAgaWYgKENoYXJhY3Rlci5pc0RpZ2l0KHdvcmQuY2hhckF0KDApKSkKLS8vICAgICAgICAgIHNiLmFwcGVuZCgnXycpOwotLy8gICAgICAgICAgc2IuYXBwZW5kKHdvcmQpOwotLy8gICAgICB9Ci0vLyAgICB9Ci0vLyAgICByZXR1cm4gbm9ybWFsaXplUGFja2FnZU5hbWUoc2IudG9TdHJpbmcoKSwgRE9ULmNoYXJBdCgwKSk7Ci0gIH0KLQotICAKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgcmVzb2x2ZURvdEluUG9ydE5hbWUoU3RyaW5nIG5hbWUpIHsKLQlpZihuYW1lLmluZGV4T2YoIi4iKTwwKQotCXsKLQkJcmV0dXJuIG5hbWU7Ci0JfQotICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBib29sZWFuIGFmdGVyRG90ID0gZmFsc2U7Ci0gICAgZm9yKGludCBpPTA7IGk8bmFtZS5sZW5ndGgoKTsgaSsrKQotICAgIHsKLSAgICAJaWYobmFtZS5jaGFyQXQoaSk9PScuJykKLSAgICAJewotICAgIAkJYWZ0ZXJEb3QgPSB0cnVlOwotICAgIAl9Ci0gICAgCWVsc2UgaWYoYWZ0ZXJEb3QpCi0gICAgCXsKLSAgICAJCXNiLmFwcGVuZChuYW1lLnN1YnN0cmluZyhpLGkrMSkudG9VcHBlckNhc2UoKSk7Ci0gICAgCQlhZnRlckRvdD1mYWxzZTsKLSAgICAJfQotICAgIAllbHNlCi0gICAgCXsKLSAgICAJCXNiLmFwcGVuZChuYW1lLmNoYXJBdChpKSk7Ci0gICAgCX0KLSAgICB9Ci0gICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvQXhpc01hcHBpbmdzRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvQXhpc01hcHBpbmdzRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzNkMzRjMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS93aWRnZXRzL0F4aXNNYXBwaW5nc0ZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkud2lkZ2V0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5Db25kaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQm9vbGVhbkZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNpbXBsZUZyYWdtZW50OwotCi0KLXB1YmxpYyBjbGFzcyBBeGlzTWFwcGluZ3NGcmFnbWVudCBleHRlbmRzIEJvb2xlYW5GcmFnbWVudAotewotICBwcml2YXRlIGJvb2xlYW4gc2hvd01hcHBpbmdzXzsKLQotICBwdWJsaWMgQXhpc01hcHBpbmdzRnJhZ21lbnQoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgICBzZXRUcnVlRnJhZ21lbnQoIG5ldyBTaW1wbGVGcmFnbWVudCggIkF4aXNNYXBwaW5nc1dpZGdldCIgKSk7Ci0gICAgc2V0Q29uZGl0aW9uKCBuZXcgQ29uZGl0aW9uKCkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gZXZhbHVhdGUoKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNob3dNYXBwaW5nc187Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIH0gKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U2hvd01hcHBpbmcoIGJvb2xlYW4gc2hvd01hcHBpbmdzICkKLSAgewotICAgIHNob3dNYXBwaW5nc18gPSBzaG93TWFwcGluZ3M7Ci0gIH0gICAgICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvQXhpc01hcHBpbmdzV2lkZ2V0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS93aWRnZXRzL0F4aXNNYXBwaW5nc1dpZGdldC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjUxNTk0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvQXhpc01hcHBpbmdzV2lkZ2V0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLndpZGdldHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkuQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5UYWJsZVZpZXdlcldpZGdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuU2ltcGxlV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldERhdGFFdmVudHM7Ci0KLQotcHVibGljIGNsYXNzIEF4aXNNYXBwaW5nc1dpZGdldCBleHRlbmRzIFNpbXBsZVdpZGdldERhdGFDb250cmlidXRvcgotewotICBwcml2YXRlIFN0cmluZyBwbHVnaW5JZF8gPSAib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkiOwotICAKLSAgcHJpdmF0ZSBUYWJsZVZpZXdlcldpZGdldCBtYXBwaW5nc187Ci0KLSAgcHJpdmF0ZSBieXRlIG1vZGVfOwotICBwcml2YXRlIEphdmFXU0RMUGFyYW1ldGVyIGphdmFQYXJhbWV0ZXJfOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgYnl0ZSBNT0RFX0JFQU4yWE1MID0gKGJ5dGUpMDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBieXRlIE1PREVfWE1MMkJFQU4gPSAoYnl0ZSkxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgTU9ERV9YTUwyUFJPWFkgPSAoYnl0ZSkyOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgTU9ERV9YTUwyRUpCID0gKGJ5dGUpMzsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBieXRlIE1PREVfRUpCMlhNTCA9IChieXRlKTQ7Ci0gIAotICBwcml2YXRlIGZpbmFsIFN0cmluZyBERUZBVUxUX1BBQ0tBR0UgPSAiZGVmYXVsdC5qYXZhcGFja2FnZSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIERFRkFVTFRfTkFNRVNQQUNFID0gImh0dHA6Ly9kZWZhdWx0Lm5hbWVzcGFjZSI7Ci0gIAotICAvKkNPTlRFWFRfSUQgUFdKTTAwMDEgZm9yIHRoZSBXU0RMIHRvIEphdmEgTWFwcGluZ3MgUGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFdKTV9QQUdFID0gIlBXSk0wMDAxIjsgLy8kTk9OLU5MUy0xJAotICAKLSAgcHVibGljIEF4aXNNYXBwaW5nc1dpZGdldCggYnl0ZSBtb2RlICkKLSAgewotICAgIG1vZGVfID0gbW9kZTsKLSAgfQotICAKLSAgcHVibGljIFdpZGdldERhdGFFdmVudHMgYWRkQ29udHJvbHMoIENvbXBvc2l0ZSBwYXJlbnQsIExpc3RlbmVyIHN0YXR1c0xpc3RlbmVyICkKLSAgewotICAgICAgICAKLSAgICAvLyBUT0RPIFRoZSBUT09MVElQX1BXSk1fUEFHRSBrZXkgZG9lc24ndCBzZWVtIHRvIGV4aXN0IGFueXdoZXJlPz8/Ci0JLy9wYXJlbnQuc2V0VG9vbFRpcFRleHQoIG1zZ1V0aWxzLmdldE1lc3NhZ2UoICJUT09MVElQX1BXSk1fUEFHRSIgKSApOwotICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoIHBhcmVudCwgcGx1Z2luSWRfICsgIi4iICsgSU5GT1BPUF9QV0pNX1BBR0UgKTsKLSAgICAKLSAgICBUZXh0IG1hcHBpbmdMYWJlbCA9IG5ldyBUZXh0KCBwYXJlbnQsIFNXVC5SRUFEX09OTFkgfCBTV1QuV1JBUCApOwotICAgIG1hcHBpbmdMYWJlbC5zZXRUZXh0KCBBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX01BUFBJTkdfUEFJUlMgKTsKLSAgICBtYXBwaW5nTGFiZWwuc2V0TGF5b3V0RGF0YSggbmV3IEdyaWREYXRhKCBHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwgKSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICBMaXN0IGluaXRWYWx1ZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgCi0gICAgaWYoIG1vZGVfID09IE1PREVfQkVBTjJYTUwgfHwgbW9kZV8gPT0gTU9ERV9FSkIyWE1MKSAKLSAgICB7Ci0JCVN0cmluZ1tdIGNvbHVtbnMgPSB7IEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuVEFCTEVfQ09MVU1OX0xBQkVMX1BBQ0tBR0UsCi0JCQkJCQkJQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5UQUJMRV9DT0xVTU5fTEFCRUxfTkFNRVNQQUNFfTsKLQkJbWFwcGluZ3NfID0gbmV3IFRhYmxlVmlld2VyV2lkZ2V0KCBjb2x1bW5zLCBpbml0VmFsdWVzLCBuZXcgU3RyaW5nW10ge0RFRkFVTFRfUEFDS0FHRSwgREVGQVVMVF9OQU1FU1BBQ0V9LCBUYWJsZVZpZXdlcldpZGdldC5NQVBfT05FX1RPX09ORSk7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0JZWxzZSAKLQl7Ci0gICAgICAJU3RyaW5nW10gY29sdW1ucyA9IHsgQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5UQUJMRV9DT0xVTU5fTEFCRUxfTkFNRVNQQUNFLAotICAgICAgCQkJCQkJQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5UQUJMRV9DT0xVTU5fTEFCRUxfUEFDS0FHRX07Ci0JCW1hcHBpbmdzXyA9IG5ldyBUYWJsZVZpZXdlcldpZGdldCggY29sdW1ucywgaW5pdFZhbHVlcywgbmV3IFN0cmluZ1tdIHtERUZBVUxUX05BTUVTUEFDRSwgREVGQVVMVF9QQUNLQUdFIH0sIFRhYmxlVmlld2VyV2lkZ2V0Lk1BUF9NQU5ZX1RPX09ORSk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0gICAgCi0JbWFwcGluZ3NfLmFkZENvbnRyb2xzKCBwYXJlbnQsIHN0YXR1c0xpc3RlbmVyICk7Ci0gICAKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAKLSAgcHVibGljIElTdGF0dXMgZ2V0U3RhdHVzKCkKLSAgewotICAgIHJldHVybiBtYXBwaW5nc18uZ2V0U3RhdHVzKCk7ICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0SmF2YVBhcmFtZXRlciggSmF2YVdTRExQYXJhbWV0ZXIgcGFyYW1ldGVyICkKLSAgewotICAgIGphdmFQYXJhbWV0ZXJfID0gcGFyYW1ldGVyOwotICB9Ci0gIAotICBwdWJsaWMgSmF2YVdTRExQYXJhbWV0ZXIgZ2V0SmF2YVBhcmFtZXRlcigpCi0gIHsKLSAgICBpZiggbW9kZV8gPT0gTU9ERV9CRUFOMlhNTCB8fCBtb2RlXyA9PSBNT0RFX0VKQjJYTUwgfHwgbW9kZV8gPT0gTU9ERV9YTUwyQkVBTiB8fCBtb2RlXyA9PSBNT0RFX1hNTDJQUk9YWSkKLSAgICB7Ci0gICAgICAvL1NldCB0aGUgbWFwcGluZ3Mgb24gamF2YVBhcmFtZXRlcgotICAgICAgVGFibGVJdGVtW10gcGFpcnMgPSBtYXBwaW5nc18uZ2V0SXRlbXMoKTsKLSAgCSAgSGFzaE1hcCBtYXAgPSBuZXcgSGFzaE1hcCgpOwotICAJICBmb3IgKGludCBpPTA7IGk8cGFpcnMubGVuZ3RoOyBpKyspCi0gIAkgIHsKLSAgCQltYXAucHV0KHBhaXJzW2ldLmdldFRleHQoMCkscGFpcnNbaV0uZ2V0VGV4dCgxKSk7Ci0gIAkgIH0KLSAgCSAgamF2YVBhcmFtZXRlcl8uc2V0TWFwcGluZ3MobWFwKTsKLSAgCSAgCi0gIAkgIC8vU2V0IHRoZSBuYW1lc3BhY2Ugb24gdGhlIGphdmFQYXJhbWV0ZXIKLSAgCSAgU3RyaW5nIGJlYW5OYW1lID0gamF2YVBhcmFtZXRlcl8uZ2V0QmVhbk5hbWUoKTsKLQkgIGlmKGJlYW5OYW1lICE9IG51bGwgJiYgIWJlYW5OYW1lLmVxdWFscygiIikpCi0JICB7Ci0JCVN0cmluZyBwYWNrYWdlTmFtZSA9IGJlYW5OYW1lLnN1YnN0cmluZygwLCBiZWFuTmFtZS5sYXN0SW5kZXhPZignLicpKTsKLQkJaWYobWFwLmNvbnRhaW5zS2V5KHBhY2thZ2VOYW1lKSkKLQkJewotCQkgIFN0cmluZyB0bnMgPSAoU3RyaW5nKW1hcC5nZXQocGFja2FnZU5hbWUpOwotCQkgIGphdmFQYXJhbWV0ZXJfLnNldE5hbWVzcGFjZSh0bnMpOwotCQl9CQkKLQkgIH0KLQotICAgIH0KLSAgICByZXR1cm4gamF2YVBhcmFtZXRlcl87Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvQXhpc1Byb3h5V2lkZ2V0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS93aWRnZXRzL0F4aXNQcm94eVdpZGdldC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzA4YmYxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvQXhpc1Byb3h5V2lkZ2V0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjE2ICAgMTE1MTQ0IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS53aWRnZXRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLkF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5jb21tb24uVUlVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5TaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0RGF0YUV2ZW50czsKLQotCi1wdWJsaWMgY2xhc3MgQXhpc1Byb3h5V2lkZ2V0IGV4dGVuZHMgU2ltcGxlV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yCi17Ci0gIHByaXZhdGUgU3RyaW5nIHBsdWdpbklkXyA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aSI7Ci0gIAotICAvKkNPTlRFWFRfSUQgUFdKQjAwMDEgZm9yIHRoZSBXU0RMIHRvIEphdmEgQmluZGluZ3MgUGFnZSovCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIElORk9QT1BfUFdKQl9QQUdFID0gIlBXSkIwMDAxIjsJLy8kTk9OLU5MUy0xJAotCQkKLSAgcHJpdmF0ZSBDb21ibyBvdXRwdXRGb2xkZXJDb21ib187Ci0gIC8qQ09OVEVYVF9JRCBQV0pCMDAwMyBmb3IgdGhlIEZvbGRlciBmaWVsZCBvZiB0aGUgV1NETCB0byBKYXZhIEJpbmRpbmdzIFBhZ2UqLwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBJTkZPUE9QX1BXSkJfVEVYVF9GT0xERVIgPSAiUFdKQjAwMDMiOwkvLyROT04tTkxTLTEkCi0KLSAgcHJpdmF0ZSBCdXR0b24gZ2VuUHJveHlDaGVja2JveF87Ci0gIC8qQ09OVEVYVF9JRCBQV0pCMDAwOSBJbmRpY2F0ZXMgd2hldGhlciB0byBnZW5lcmF0ZSBhIHByb3h5IG9yIG5vdC4gKi8KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9QV0pCX0NIRUNLQk9YX0dFTlBST1hZID0gIlBXSkIwMDA5IjsJLy8kTk9OLU5MUy0xJAotCQkKLSAgcHJpdmF0ZSBCdXR0b24gc2hvd01hcHBpbmdzQ2hlY2tib3hfOwotICAvKkNPTlRFWFRfSUQgUFdKQjAwMTYgZm9yIHRoZSBTaG93IE1hcHBpbmdzIGNoZWNrYm94IG9mIHRoZSBCZWFuIE1ldGhvZHMgUGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfTjJQX1NIT1dfTUFQUElOR1MgPSAiUFdKQjAwMTYiOyAvLyROT04tTkxTLTEkCi0gIAotICBwdWJsaWMgV2lkZ2V0RGF0YUV2ZW50cyBhZGRDb250cm9scyggQ29tcG9zaXRlIHBhcmVudCwgTGlzdGVuZXIgc3RhdHVzTGlzdGVuZXIgKQotICB7Ci0gICAgVUlVdGlscyAgICAgIHVpVXRpbHMgID0gbmV3IFVJVXRpbHMoIHBsdWdpbklkXyApOwotICAgIAotCXBhcmVudC5zZXRUb29sVGlwVGV4dCggQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BXSkJfUEFHRSApOwotCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoIHBhcmVudCwgcGx1Z2luSWRfICsgIi4iICsgIElORk9QT1BfUFdKQl9QQUdFKTsKLSAgICAKLSAgICBnZW5Qcm94eUNoZWNrYm94XyA9IHVpVXRpbHMuY3JlYXRlQ2hlY2tib3goIHBhcmVudCwgQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5DSEVDS0JPWF9HRU5QUk9YWSwKLSAgICAJCQkJCQkJCQkJCUF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QV0pCX0NIRUNLQk9YX0dFTlBST1hZLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5GT1BPUF9QV0pCX0NIRUNLQk9YX0dFTlBST1hZICk7Ci0gICAgZ2VuUHJveHlDaGVja2JveF8uYWRkTGlzdGVuZXIoIFNXVC5TZWxlY3Rpb24sIHN0YXR1c0xpc3RlbmVyICk7Ci0gICAgZ2VuUHJveHlDaGVja2JveF8uYWRkU2VsZWN0aW9uTGlzdGVuZXIoIG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKCBTZWxlY3Rpb25FdmVudCBldnQgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUdlblByb3h5KCk7ICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgIAotICAgIENvbXBvc2l0ZSB0ZXh0R3JvdXAgPSB1aVV0aWxzLmNyZWF0ZUNvbXBvc2l0ZSggcGFyZW50LCAyLCA1LCAwICk7Ci0gICAgCi0gICAgb3V0cHV0Rm9sZGVyQ29tYm9fID0gdWlVdGlscy5jcmVhdGVDb21ibyggdGV4dEdyb3VwLCBBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX0ZPTERFUl9OQU1FLAotICAgIAkJCQkJCQkJCUF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QV0pCX1RFWFRfRk9MREVSLAotICAgIAkJCQkJCQkJCUlORk9QT1BfUFdKQl9URVhUX0ZPTERFUiwKLSAgICAJCQkJCQkJCQlTV1QuU0lOR0xFIHwgU1dULkJPUkRFUiB8IFNXVC5SRUFEX09OTFkgKTsKLSAgICAKLSAgICBzaG93TWFwcGluZ3NDaGVja2JveF8gPSB1aVV0aWxzLmNyZWF0ZUNoZWNrYm94KCBwYXJlbnQsIEF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfRVhQTE9SRV9NQVBQSU5HU19YTUwyQkVBTiwKLSAgICAJCQkJCQkJCQlBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfTjJQX1NIT1dfTUFQUElOR1MsCi0gICAgCQkJCQkJCQkJSU5GT1BPUF9OMlBfU0hPV19NQVBQSU5HUyApOwotICAgIC8vIFNpbmNlIHRoaXMgd2lkZ2V0IGFmZmVjdHMgd2hldGhlciB0aGUgbmV4dCBwYWdlIGlzIHNob3duIG9yIG5vdCB3ZQotICAgIC8vIG5lZWQgdG8gYWRkIHRoZSBzdGF0dXNMaXN0ZW5lci4KLSAgICBzaG93TWFwcGluZ3NDaGVja2JveF8uYWRkTGlzdGVuZXIoIFNXVC5TZWxlY3Rpb24sIHN0YXR1c0xpc3RlbmVyICk7Ci0gICAgCi0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBoYW5kbGVHZW5Qcm94eSgpCi0gIHsKLSAgICBib29sZWFuIGVuYWJsZWQgPSBnZW5Qcm94eUNoZWNrYm94Xy5nZXRTZWxlY3Rpb24oKTsKLSAgICAKLSAgICBvdXRwdXRGb2xkZXJDb21ib18uc2V0RW5hYmxlZCggZW5hYmxlZCApOwotICAgIHNob3dNYXBwaW5nc0NoZWNrYm94Xy5zZXRFbmFibGVkKCBlbmFibGVkICk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudFByb2plY3QoSVByb2plY3QgY2xpZW50UHJvamVjdCkKLSAgeyAgCQotICAgIElQYXRoW10gcGF0aHMgPSBSZXNvdXJjZVV0aWxzLmdldEFsbEphdmFTb3VyY2VMb2NhdGlvbnMoY2xpZW50UHJvamVjdCk7Ci0gICAgCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXRocy5sZW5ndGggOyBpKyspCi0gICAgewotICAgICAgb3V0cHV0Rm9sZGVyQ29tYm9fLmFkZChwYXRoc1tpXS50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgCi0gICAgaWYoIHBhdGhzLmxlbmd0aCA+IDAgKQotICAgIHsKLSAgICAJb3V0cHV0Rm9sZGVyQ29tYm9fLnNlbGVjdCgwKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0T3V0cHV0Rm9sZGVyKCkKLSAgewotICAJcmV0dXJuIG91dHB1dEZvbGRlckNvbWJvXy5nZXRUZXh0KCk7Ci0gIH0KLSAgICAgICAgCi0gIHB1YmxpYyB2b2lkIHNldEdlbmVyYXRlUHJveHkoIEJvb2xlYW4gZ2VuUHJveHkgKQotICB7Ci0gICAgZ2VuUHJveHlDaGVja2JveF8uc2V0U2VsZWN0aW9uKCBnZW5Qcm94eS5ib29sZWFuVmFsdWUoKSApOwotICB9ICAgIAotICAKLSAgcHVibGljIEJvb2xlYW4gZ2V0R2VuZXJhdGVQcm94eSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IEJvb2xlYW4oIGdlblByb3h5Q2hlY2tib3hfLmdldFNlbGVjdGlvbigpICk7Ci0gIH0gICAKLSAgCi0gIHB1YmxpYyB2b2lkIHNldEN1c3RvbWl6ZUNsaWVudE1hcHBpbmdzKCBib29sZWFuIHNob3dNYXBwaW5ncyApCi0gIHsKLSAgICBzaG93TWFwcGluZ3NDaGVja2JveF8uc2V0U2VsZWN0aW9uKCBzaG93TWFwcGluZ3MgKTsKLSAgfSAgICAgICAgICAgIAotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0Q3VzdG9taXplQ2xpZW50TWFwcGluZ3MoKQotICB7Ci0gICAgcmV0dXJuIHNob3dNYXBwaW5nc0NoZWNrYm94Xy5nZXRTZWxlY3Rpb24oKSAmJiBnZW5Qcm94eUNoZWNrYm94Xy5nZXRTZWxlY3Rpb24oKTsKLSAgfSAgIAotICAKLSAgcHVibGljIHZvaWQgc2V0SXNDbGllbnRTY2VuYXJpbyggYm9vbGVhbiBpc0NsaWVudFNjZW5hcmlvICkKLSAgewotICAgIGdlblByb3h5Q2hlY2tib3hfLnNldEVuYWJsZWQoICFpc0NsaWVudFNjZW5hcmlvICk7IAotICB9ICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3dpemFyZC9jbGllbnQvV2ViU2VydmljZUNsaWVudEF4aXNUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS93aXphcmQvY2xpZW50L1dlYlNlcnZpY2VDbGllbnRBeGlzVHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDg1MWFkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NvbnN1bXB0aW9uL3VpL3dpemFyZC9jbGllbnQvV2ViU2VydmljZUNsaWVudEF4aXNUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjE2ICAgMTE1MTQ0IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDYwNTIzICAgMTQzMjg0IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS5BeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQuQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQuRGVmYXVsdHNGb3JDbGllbnRKYXZhV1NETENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudGFzay5DbGllbnRDb2RlR2VuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnRhc2suRGVmYXVsdHNGb3JIVFRQQmFzaWNBdXRoQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS50YXNrLlZhbGlkYXRlV1NETENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkud2lkZ2V0cy5BeGlzTWFwcGluZ3NXaWRnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkud2lkZ2V0cy5BeGlzUHJveHlXaWRnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9ucy5DbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TaW1wbGVGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5DYW5GaW5pc2hSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0UmVnaXN0cnk7Ci0KLQotLyoqCi0gICogRGV2ZWxvcGVycyB3aG8gYXJlIGFkZGluZyB3ZWIgc2VydmljZSBjbGllbnRzIGludG8gdGhlIHdpemFyZCBzaG91bGQgY3JlYXRlCi0gICogYSBjbGFzcyB0aGF0IGltcGxlbWVudHMgdGhpcyBpbnRlcmZhY2UuICAKLSoqLwotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VDbGllbnRBeGlzVHlwZSBpbXBsZW1lbnRzIENvbW1hbmRXaWRnZXRCaW5kaW5nIAotewotCi0JCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlckRhdGFNYXBwaW5ncyhvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyhEYXRhTWFwcGluZ1JlZ2lzdHJ5IGRhdGFSZWdpc3RyeSkgCi0gIHsKLSAgCS8vIEF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZCAgCQotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDdXN0b21pemVDbGllbnRNYXBwaW5ncyIsIEF4aXNQcm94eVdpZGdldC5jbGFzcyApOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJQcm94eVByb2plY3RGb2xkZXIiLCBBeGlzUHJveHlXaWRnZXQuY2xhc3MsICJQcm94eUZvbGRlciIsIG51bGwgKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiR2VuZXJhdGVQcm94eSIsIEF4aXNQcm94eVdpZGdldC5jbGFzcyk7ICAgIAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJJc0NsaWVudFNjZW5hcmlvIiwgQXhpc1Byb3h5V2lkZ2V0LmNsYXNzKTsgICAgCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIEF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3QiLCBBeGlzUHJveHlXaWRnZXQuY2xhc3MgKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSmF2YVdTRExQYXJhbSIsIEF4aXNNYXBwaW5nc1dpZGdldC5jbGFzcywgIkphdmFQYXJhbWV0ZXIiLCBudWxsKTsKLSAgICAKLSAgICAvLyBBeGlzUHJveHlXaWRnZXQKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQXhpc1Byb3h5V2lkZ2V0LmNsYXNzLCAiR2VuZXJhdGVQcm94eSIsIENsaWVudEV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MgKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQXhpc1Byb3h5V2lkZ2V0LmNsYXNzLCAiT3V0cHV0Rm9sZGVyIiwgRGVmYXVsdHNGb3JDbGllbnRKYXZhV1NETENvbW1hbmQuY2xhc3MgKTsKLSAgICAKLSAgICAvL0F4aXNNYXBwaW5nc1dpZGdldAotCWRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNNYXBwaW5nc1dpZGdldC5jbGFzcywgIkphdmFQYXJhbWV0ZXIiLCBEZWZhdWx0c0ZvckhUVFBCYXNpY0F1dGhDb21tYW5kLmNsYXNzLCAiSmF2YVdTRExQYXJhbSIsIG51bGwpOyAvL09LCi0JZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc01hcHBpbmdzV2lkZ2V0LmNsYXNzLCAiSmF2YVBhcmFtZXRlciIsIERlZmF1bHRzRm9yQ2xpZW50SmF2YVdTRExDb21tYW5kLmNsYXNzLCAiSmF2YVdTRExQYXJhbSIsIG51bGwpOyAvL09LCi0JZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc01hcHBpbmdzV2lkZ2V0LmNsYXNzLCAiSmF2YVBhcmFtZXRlciIsIFZhbGlkYXRlV1NETENvbW1hbmQuY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgbnVsbCk7IC8vT0sKLQlkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzTWFwcGluZ3NXaWRnZXQuY2xhc3MsICJKYXZhUGFyYW1ldGVyIiwgQ2xpZW50Q29kZUdlbk9wZXJhdGlvbi5jbGFzcywgIkphdmFXU0RMUGFyYW0iLCBudWxsKTsgLy9PSwotCi0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlcldpZGdldE1hcHBpbmdzKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLldpZGdldFJlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJXaWRnZXRNYXBwaW5ncyhXaWRnZXRSZWdpc3RyeSB3aWRnZXRSZWdpc3RyeSkgCi0gIHsKLSAgIAotICAgIHdpZGdldFJlZ2lzdHJ5LmFkZCggIkF4aXNDbGllbnRTdGFydCIsIAotICAgICAgICBBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfVElUTEVfV1NfQVhJU19QUk9YWSwKLSAgICAgICAgQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX0RFU0NfV1NfQVhJU19QUk9YWSwKLSAgICAgICAgbmV3IFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSgpCi0gICAgICAgIHsKLSAgICAgICAgICBwdWJsaWMgV2lkZ2V0Q29udHJpYnV0b3IgY3JlYXRlKCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEF4aXNQcm94eVdpZGdldCgpOwotICAgICAgICAgIH0KLSAgICAgICAgfSApOwotICAgIAotICAgIHdpZGdldFJlZ2lzdHJ5LmFkZCggIkF4aXNDbGllbnRCZWFuTWFwcGluZyIsIAotICAgICAgICBBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfVElUTEVfV1NfWE1MMlBST1hZLAotICAgICAgICBBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX0VYUExPUkVfTUFQUElOR1NfWE1MMkJFQU4sCi0gICAgICAgIG5ldyBXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKQotICAgICAgICB7Ci0gICAgICAgICAgcHVibGljIFdpZGdldENvbnRyaWJ1dG9yIGNyZWF0ZSgpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBBeGlzTWFwcGluZ3NXaWRnZXQoQXhpc01hcHBpbmdzV2lkZ2V0Lk1PREVfWE1MMlBST1hZICk7Ci0gICAgICAgICAgfQotICAgICAgICB9ICk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnRGYWN0b3J5RmFjdG9yeSNjcmVhdGUoKQotICAgKi8KLSAgcHVibGljIENvbW1hbmRGcmFnbWVudEZhY3RvcnkgY3JlYXRlKCkgCi0gIHsKLSAgICByZXR1cm4gbmV3IENvbW1hbmRGcmFnbWVudEZhY3RvcnkoKQotICAgICAgICAgICB7Ci0gICAgICAgICAgICAgcHVibGljIENvbW1hbmRGcmFnbWVudCBjcmVhdGUoKQotICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIC8vZGVhZCBjb2RlIC0gZG9lc24ndCBtYXR0ZXIgd2hhdCBnZXRzIHJldHVybmVkIGhlcmUuCi0gICAgICAgICAgICAgICByZXR1cm4gbmV3IFNpbXBsZUZyYWdtZW50KCk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICB9OwotICB9Ci0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlckNhbkZpbmlzaChvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5DYW5GaW5pc2hSZWdpc3RyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyQ2FuRmluaXNoKENhbkZpbmlzaFJlZ2lzdHJ5IGNhbkZpbmlzaFJlZ2lzdHJ5KSAKLSAgewotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS93c3J0L0F4aXNDbGllbnRDb25maWdXaWRnZXRGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS93c3J0L0F4aXNDbGllbnRDb25maWdXaWRnZXRGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkYjdlOWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvd3NydC9BeGlzQ2xpZW50Q29uZmlnV2lkZ2V0RmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLndzcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS53aWRnZXRzLkF4aXNQcm94eVdpZGdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS53aXphcmQuY2xpZW50LldlYlNlcnZpY2VDbGllbnRBeGlzVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldEJpbmRpbmdUb1dpZGdldEZhY3RvcnlBZGFwdGVyOwotCi1wdWJsaWMgY2xhc3MgQXhpc0NsaWVudENvbmZpZ1dpZGdldEZhY3RvcnkgaW1wbGVtZW50cyBJTmFtZWRXaWRnZXRDb250cmlidXRvckZhY3RvcnkgewotCi0JcHJpdmF0ZSBJTmFtZWRXaWRnZXRDb250cmlidXRvciAgICAgICAgICAgICBwcm94eUNvbmZpZ1dpZGdldF87Ci0JcHJpdmF0ZSBJTmFtZWRXaWRnZXRDb250cmlidXRvciAgICAgICAgICAgICBtYXBwaW5nc1dpZGdldF87Ci0JcHJpdmF0ZSBBeGlzUHJveHlXaWRnZXQgICAgICAgICAgICAgICAgICAgICBwcm94eVdpZGdldF87Ci0JcHJpdmF0ZSBXaWRnZXRCaW5kaW5nVG9XaWRnZXRGYWN0b3J5QWRhcHRlciBhZGFwdGVyXzsKLQkKLQlwdWJsaWMgQXhpc0NsaWVudENvbmZpZ1dpZGdldEZhY3RvcnkoKQotCXsKLQkgIGFkYXB0ZXJfID0gbmV3IFdpZGdldEJpbmRpbmdUb1dpZGdldEZhY3RvcnlBZGFwdGVyKCBuZXcgV2ViU2VydmljZUNsaWVudEF4aXNUeXBlKCkgKTsKLQkgIAotCSAgcHJveHlDb25maWdXaWRnZXRfID0gYWRhcHRlcl8uZ2V0V2lkZ2V0KCAiQXhpc0NsaWVudFN0YXJ0IiApOwotCSAgcHJveHlXaWRnZXRfICAgICAgID0gKEF4aXNQcm94eVdpZGdldClwcm94eUNvbmZpZ1dpZGdldF8uZ2V0V2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5KCkuY3JlYXRlKCk7Ci0JICBtYXBwaW5nc1dpZGdldF8gICA9IGFkYXB0ZXJfLmdldFdpZGdldCggIkF4aXNDbGllbnRCZWFuTWFwcGluZyIgKTsKLQl9Ci0JCi0JcHVibGljIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yIGdldEZpcnN0TmFtZWRXaWRnZXQoKSAKLQl7Ci0JICByZXR1cm4gcHJveHlDb25maWdXaWRnZXRfOwotCX0KLQotCXB1YmxpYyBJTmFtZWRXaWRnZXRDb250cmlidXRvciBnZXROZXh0TmFtZWRXaWRnZXQoIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yIHdpZGdldENvbnRyaWJ1dG9yKSAKLQl7Ci0JICByZXR1cm4gd2lkZ2V0Q29udHJpYnV0b3IgPT0gcHJveHlDb25maWdXaWRnZXRfICYmIHByb3h5V2lkZ2V0Xy5nZXRDdXN0b21pemVDbGllbnRNYXBwaW5ncygpID8gbWFwcGluZ3NXaWRnZXRfIDogbnVsbDsKLQl9Ci0JCi0JcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhUmVnaXN0cnkpIAotCXsKLQkgIGFkYXB0ZXJfLnJlZ2lzdGVyRGF0YU1hcHBpbmdzKCBkYXRhUmVnaXN0cnkgKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS93c3J0L0F4aXNXZWJTZXJ2aWNlQ2xpZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jb25zdW1wdGlvbi91aS93c3J0L0F4aXNXZWJTZXJ2aWNlQ2xpZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2NDUwOTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY29uc3VtcHRpb24vdWkvd3NydC9BeGlzV2ViU2VydmljZUNsaWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIxNiAgIDExNTE0NCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA2MDUwOSAgIDEyNTA5NCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUsIFVzZSBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24KLSAqIDIwMDYwNTE1ICAgMTE1MjI1IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwNjA3MjggICAxNDU0MjYga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLndzcnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkuY29tbWFuZC5BeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkuY29tbWFuZC5BeGlzQ2xpZW50SW5wdXRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQuQXhpc0NsaWVudE91dHB1dENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkuY29tbWFuZC5EZWZhdWx0c0ZvckNsaWVudEphdmFXU0RMQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS50YXNrLkNsaWVudENvZGVHZW5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudGFzay5EZWZhdWx0c0ZvckhUVFBCYXNpY0F1dGhDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnRhc2suVmFsaWRhdGVXU0RMQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlN0cmluZ1RvSVByb2plY3RUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb24uQnVpbGRQcm9qZWN0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5JQ29tbWFuZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuU2ltcGxlQ29tbWFuZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkVjbGlwc2VFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5BYnN0cmFjdFdlYlNlcnZpY2VDbGllbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlQ2xpZW50SW5mbzsKLQotcHVibGljIGNsYXNzIEF4aXNXZWJTZXJ2aWNlQ2xpZW50IGV4dGVuZHMgQWJzdHJhY3RXZWJTZXJ2aWNlQ2xpZW50Ci17CQkKLQotCXB1YmxpYyBBeGlzV2ViU2VydmljZUNsaWVudChXZWJTZXJ2aWNlQ2xpZW50SW5mbyBpbmZvKQotCXsKLQkJc3VwZXIoaW5mbyk7Ci0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY29uc3RydWN0b3Igc3R1YgotCX0KLQotCXB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgYXNzZW1ibGUoSUVudmlyb25tZW50IGVudiwgSUNvbnRleHQgY3R4LAotCQkJSVNlbGVjdGlvbiBzZWwsIFN0cmluZyBwcm9qZWN0LCBTdHJpbmcgZWFyUHJvamVjdCkKLQl7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgZGVwbG95KElFbnZpcm9ubWVudCBlbnYsIElDb250ZXh0IGN0eCwgSVNlbGVjdGlvbiBzZWwsCi0JCQlTdHJpbmcgcHJvamVjdCwgU3RyaW5nIGVhclByb2plY3QpCi0JewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IGRldmVsb3AoSUVudmlyb25tZW50IGVudiwgSUNvbnRleHQgY3R4LCBJU2VsZWN0aW9uIHNlbCwKLQkJCVN0cmluZyBwcm9qZWN0LCBTdHJpbmcgZWFyUHJvamVjdCkKLQl7Ci0gICAgRWNsaXBzZUVudmlyb25tZW50IGVudmlyb25tZW50ID0gKEVjbGlwc2VFbnZpcm9ubWVudCllbnY7Ci0JCXJlZ2lzdGVyRGF0YU1hcHBpbmdzKCBlbnZpcm9ubWVudC5nZXRDb21tYW5kTWFuYWdlcigpLmdldE1hcHBpbmdSZWdpc3RyeSgpKTsKLQkJCi0JCVZlY3RvciBjb21tYW5kcyA9IG5ldyBWZWN0b3IoKTsKLQkJY29tbWFuZHMuYWRkKG5ldyBBeGlzQ2xpZW50SW5wdXRDb21tYW5kKHRoaXMsIGN0eCwgcHJvamVjdCkpOwotCQljb21tYW5kcy5hZGQobmV3IEF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZCgpKTsKLS8vCQljb21tYW5kcy5hZGQobmV3IFNpbXBsZUZyYWdtZW50KCJBeGlzQ2xpZW50U3RhcnQiKSk7Ci0vLwkJY29tbWFuZHMuYWRkKG5ldyBTaW1wbGVGcmFnbWVudCgiQXhpc0NsaWVudEJlYW5NYXBwaW5nIikpOwotCQljb21tYW5kcy5hZGQobmV3IERlZmF1bHRzRm9ySFRUUEJhc2ljQXV0aENvbW1hbmQoKSk7Ci0vLwkJY29tbWFuZHMuYWRkKG5ldyBDb3B5QXhpc0phckNvbW1hbmQoKSk7Ci0JCWNvbW1hbmRzLmFkZChuZXcgRGVmYXVsdHNGb3JDbGllbnRKYXZhV1NETENvbW1hbmQoKSk7Ci0JCWNvbW1hbmRzLmFkZChuZXcgVmFsaWRhdGVXU0RMQ29tbWFuZCgpKTsKLQkJY29tbWFuZHMuYWRkKG5ldyBDbGllbnRDb2RlR2VuT3BlcmF0aW9uKCkpOwotCQljb21tYW5kcy5hZGQobmV3IEF4aXNDbGllbnRPdXRwdXRDb21tYW5kKHRoaXMsY3R4KSk7Ci0JCWNvbW1hbmRzLmFkZChuZXcgQnVpbGRQcm9qZWN0Q29tbWFuZCgpKTsKLQkJcmV0dXJuIG5ldyBTaW1wbGVDb21tYW5kRmFjdG9yeShjb21tYW5kcyk7Ci0JfQotCi0JcHVibGljIElDb21tYW5kRmFjdG9yeSBpbnN0YWxsKElFbnZpcm9ubWVudCBlbnYsIElDb250ZXh0IGN0eCwgSVNlbGVjdGlvbiBzZWwsCi0JCQlTdHJpbmcgcHJvamVjdCwgU3RyaW5nIGVhclByb2plY3QpCi0JewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IHJ1bihJRW52aXJvbm1lbnQgZW52LCBJQ29udGV4dCBjdHgsIElTZWxlY3Rpb24gc2VsLAotCQkJU3RyaW5nIHByb2plY3QsIFN0cmluZyBlYXJQcm9qZWN0KQotCXsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCQkKLQlwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyhEYXRhTWFwcGluZ1JlZ2lzdHJ5IHJlZ2lzdHJ5KSAKLQl7Ci0JCS8vIEF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZAotCQlyZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNDbGllbnRJbnB1dENvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0IiwgQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdCIsCi0JCQkJbmV3IFN0cmluZ1RvSVByb2plY3RUcmFuc2Zvcm1lcigpKTsKLS8vCQlyZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UnVudGltZSIsIEF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFJ1bnRpbWVJRCIsCi0vLwkJCQludWxsKTsKLS8vCQlyZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZXNQYXJzZXIiLCBBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotLy8JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0RUFSIiwgQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLAotLy8JCQkJIkNsaWVudFByb2plY3RFQVIiLCBuZXcgU3RyaW5nVG9JUHJvamVjdFRyYW5zZm9ybWVyKCkpOwotCQlyZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNDbGllbnRJbnB1dENvbW1hbmQuY2xhc3MsICJXc2RsVVJMIiwgQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsgLy8gVVJJCi0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkvLyB0bwotCQkvLyBVUkwKLQkJLy8gdHJhbnNmb3JtZXIKLQkJLy8gcmVxJ2Q/PwotLy8JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJUZXN0UHJveHlTZWxlY3RlZCIsIEF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywKLS8vCQkJCSJUZXN0UHJveHlTZWxlY3RlZCIsIG51bGwpOwotCQlyZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNDbGllbnRJbnB1dENvbW1hbmQuY2xhc3MsICJDbGllbnRTZXJ2ZXIiLCBBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotLy8JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJJc0NsaWVudFNjZW5hcmlvIiwgQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLQkJcmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzQ2xpZW50SW5wdXRDb21tYW5kLmNsYXNzLCAiR2VuZXJhdGVQcm94eSIsIEF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0JCS8vIERlZmF1bHRzRm9ySFRUUEJhc2ljQXV0aENvbW1hbmQoKQotCQlyZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkphdmFXU0RMUGFyYW0iLCBEZWZhdWx0c0ZvckhUVFBCYXNpY0F1dGhDb21tYW5kLmNsYXNzKTsgLy9PSwotCQlyZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIldzZGxVUkwiLCBEZWZhdWx0c0ZvckhUVFBCYXNpY0F1dGhDb21tYW5kLmNsYXNzLCAiV3NkbFNlcnZpY2VVUkwiLCBudWxsKTsgLy9PSwotCQlyZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2VzUGFyc2VyIiwgRGVmYXVsdHNGb3JIVFRQQmFzaWNBdXRoQ29tbWFuZC5jbGFzcyk7IC8vT0sgICAgCi0JCQotLy8JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdCIsIENvcHlBeGlzSmFyQ29tbWFuZC5jbGFzcywgIlByb2plY3QiLCBudWxsKTsKLQotCQkvLyBEZWZhdWx0c0ZvckNsaWVudEphdmFXU0RMQ29tbWFuZCgpIC8vIGphdmFQYXJhbV8sIG1vZGVsXwotCQlyZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkphdmFXU0RMUGFyYW0iLCBEZWZhdWx0c0ZvckNsaWVudEphdmFXU0RMQ29tbWFuZC5jbGFzcyk7Ci0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdCIsIERlZmF1bHRzRm9yQ2xpZW50SmF2YVdTRExDb21tYW5kLmNsYXNzLCAiUHJveHlQcm9qZWN0IiwKLQkJCQludWxsKTsKLQkJLy8JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiV3NkbFVSTCIsCi0JCS8vIERlZmF1bHRzRm9yQ2xpZW50SmF2YVdTRExDb21tYW5kLmNsYXNzLCJXU0RMU2VydmljZVBhdGhuYW1lIixudWxsKTsKLQkJLy8gLy8KLQkJLy8gVVJMIHRvIFVSTD8/Ci0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiV3NkbFVSTCIsIERlZmF1bHRzRm9yQ2xpZW50SmF2YVdTRExDb21tYW5kLmNsYXNzLCAiV1NETFNlcnZpY2VVUkwiLCBudWxsKTsgLy8gVVJJCi0JCS8vIHRvCi0JCS8vIFVSTD8/Ci0JCS8vIFZhbGlkYXRlV1NETENvbW1hbmQoKQotCQlyZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkphdmFXU0RMUGFyYW0iLCBWYWxpZGF0ZVdTRExDb21tYW5kLmNsYXNzKTsKLQkJcmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJXc2RsU2VydmljZVVSTCIsIFZhbGlkYXRlV1NETENvbW1hbmQuY2xhc3MpOwotCQlyZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2VzUGFyc2VyIiwgVmFsaWRhdGVXU0RMQ29tbWFuZC5jbGFzcyk7Ci0KLQkJLy8gV1NETDJKYXZhQ29tbWFuZCgpIC8vIGphdmFQYXJhbV8KLQkJcmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgQ2xpZW50Q29kZUdlbk9wZXJhdGlvbi5jbGFzcyk7Ci0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiV3NkbFVSTCIsIENsaWVudENvZGVHZW5PcGVyYXRpb24uY2xhc3MsICJXc2RsVVJJIiwgbnVsbCk7Ci0KLQkJLy8gUmVmcmVzaFByb2plY3RDb21tYW5kKCkKLQkJcmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0IiwgQ2xpZW50Q29kZUdlbk9wZXJhdGlvbi5jbGFzcywgIlByb2plY3QiLCBudWxsKTsJCQotCQkKLQkJLy8gU3R1YjJCZWFuQ29tbWFuZCgpCi0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc0NsaWVudERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZXNQYXJzZXIiLCBDbGllbnRDb2RlR2VuT3BlcmF0aW9uLmNsYXNzKTsKLQkJcmVnaXN0cnkuYWRkTWFwcGluZyhEZWZhdWx0c0ZvckNsaWVudEphdmFXU0RMQ29tbWFuZC5jbGFzcywgIk91dHB1dEZvbGRlciIsIENsaWVudENvZGVHZW5PcGVyYXRpb24uY2xhc3MgKTsKLQkJCi0JCS8vIEJ1aWxkUHJvamVjdENvbW1hbmQoKQotCQlyZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3QiLCBCdWlsZFByb2plY3RDb21tYW5kLmNsYXNzLCAiUHJvamVjdCIsIG51bGwpOwotCQlyZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkZvcmNlQnVpbGQiLCBCdWlsZFByb2plY3RDb21tYW5kLmNsYXNzKTsKLQkJcmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzQ2xpZW50RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJWYWxpZGF0aW9uTWFuYWdlciIsIEJ1aWxkUHJvamVjdENvbW1hbmQuY2xhc3MpOwotCQkKLQkJcmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRDb2RlR2VuT3BlcmF0aW9uLmNsYXNzLCAiUHJveHlCZWFuIiwgQXhpc0NsaWVudE91dHB1dENvbW1hbmQuY2xhc3MsICJQcm94eUJlYW4iLCBudWxsKTsKLQkJcmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRDb2RlR2VuT3BlcmF0aW9uLmNsYXNzLCAiUHJveHlFbmRwb2ludCIsIEF4aXNDbGllbnRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLS8vCQlyZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkdlbmVyYXRlUHJveHkiLCBDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzKTsKLS8vCQlyZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNDbGllbnREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNldEVuZHBvaW50TWV0aG9kIiwgQ2xpZW50RXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS8uY2xhc3NwYXRoIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTZkNDlhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjLyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzI2YzM1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotYmluCi1idWlsZC54bWwKLXRlbXAuZm9sZGVyCi13c3MtYXhpcy11aS5qYXIKLUBkb3QKLXNyYy56aXAKLWphdmFDb21waWxlci4uLmFyZ3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvLnByb2plY3QgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOWU5M2E5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzZkZDg1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jV2VkIFNlcCAyNiAwNjoyODoyNyBFRFQgMjAwNwotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWVuY29kaW5nLzxwcm9qZWN0Pj1JU08tODg1OS0xCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjM2MjJkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotI1RodSBNYXkgMzEgMTM6MTE6MTYgRURUIDIwMDcKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NGRiYmE3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSNNb24gSmFuIDMwIDEwOjQxOjMwIEVTVCAyMDA2Ci1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0xCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0xCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzOWZkZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVQTFVHSU5fTkFNRQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWk7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4zMDUucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5wbHVnaW4uV2ViU2VydmljZUF4aXNDcmVhdGlvblVJUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlUExVR0lOX1BST1ZJREVSCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQ7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5wbHVnaW47eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS50YXNrO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud2lkZ2V0cy5iZWFuO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud2lkZ2V0cy5za2VsZXRvbjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLndpemFyZC5iZWFuczt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLndpemFyZC53c2RsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud3NydDt4LWludGVybmFsOj10cnVlCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UudWk7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpLmlkZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXM7YnVuZGxlLXZlcnNpb249IlszLjIuMCwzLjQuMCkiLAotIG9yZy5lY2xpcHNlLmVtZi5lY29yZTtidW5kbGUtdmVyc2lvbj0iWzIuMi4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamVtO2J1bmRsZS12ZXJzaW9uPSJbMi4wLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZW0ud29ya2JlbmNoO2J1bmRsZS12ZXJzaW9uPSJbMi4wLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC53cztidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWk7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC53cy51aTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDAsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamVtLndvcmtiZW5jaDtidW5kbGUtdmVyc2lvbj0iWzIuMC4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52O2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAyLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC5qMmVlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS5qc3QuajJlZS5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWI7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIGphdmF4LndzZGw7YnVuZGxlLXZlcnNpb249IlsxLjQuMCwxLjUuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC5jb21tb24uZnJhbWV3b3JrcztidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2UuamVtLnV0aWw7YnVuZGxlLXZlcnNpb249IlsyLjAuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3JrcztidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudDtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDAsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZHQuY29yZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGw7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiCi1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL2Fib3V0Lmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGIzNmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL2J1aWxkLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5MWZlZTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1zb3VyY2UuLiA9IHNyYy8KLWJpbi5pbmNsdWRlcyA9IC4sXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgZGVwbG95LnhzbCxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL2RlcGxveS54c2wgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL2RlcGxveS54c2wKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmZGYxNjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9kZXBsb3kueHNsCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKLSAgICB2ZXJzaW9uPSIxLjAiCi0gICAgeG1sbnM6eGFsYW49Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94c2x0IgotICAgIHhtbG5zOm5zMT0iaHR0cDovL3htbC5hcGFjaGUub3JnL2F4aXMvd3NkZC8iCi0gICAgeG1sbnM6amF2YT0iaHR0cDovL3htbC5hcGFjaGUub3JnL2F4aXMvd3NkZC9wcm92aWRlcnMvamF2YSI+Ci0gICAgPHhzbDpvdXRwdXQgbWV0aG9kPSJ4bWwiIGVuY29kaW5nPSJVVEYtOCIvPgotICAKLSAgIDx4c2w6cGFyYW0gbmFtZT0ibmV3Q2xhc3NOYW1lIiBzZWxlY3Q9InNzIi8+Ci0gICAKLSAgICA8eHNsOnRlbXBsYXRlIG1hdGNoPSIvbnMxOmRlcGxveW1lbnQvbnMxOnNlcnZpY2UvbnMxOnBhcmFtZXRlcltAbmFtZT0nY2xhc3NOYW1lJ10iPgotICAgIDx4c2w6Y29weT4KLSAgICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIj5jbGFzc05hbWU8L3hzbDphdHRyaWJ1dGU+Ci0gICAgICAgCSA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+IAkKLSAgCQkJPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRuZXdDbGFzc05hbWUiLz4gIAkgCQotICAgICAgIAkgPC94c2w6YXR0cmlidXRlPgotICAgICAgIAk8eHNsOmFwcGx5LXRlbXBsYXRlcy8+Ci0gICAgICAgCTwveHNsOmNvcHk+Ci0gICAgPC94c2w6dGVtcGxhdGU+Ci0gICAgCi0gICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iQCp8bm9kZSgpIj4KLSAgICAJPHhzbDpjb3B5PgotICAgIAkJPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJAKnxub2RlKCkiLz4KLSAgICAJPC94c2w6Y29weT4KLSAgICA8L3hzbDp0ZW1wbGF0ZT4KLTwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3BsdWdpbi5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGNhYTBiZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jCi0jIE1lc3NhZ2VzIGluIHBsdWdpbi54bWwuCi0jCi1QTFVHSU5fTkFNRT1XZWJzZXJ2aWNlIEF4aXMgQ3JlYXRpb24gVUkKLVBMVUdJTl9QUk9WSURFUj1FY2xpcHNlLm9yZwotCi1MQUJFTF9SVU5USU1FX0FYSVNfMTE9QXBhY2hlIEF4aXMKLURFU0NfUlVOVElNRV9BWElTXzExPUFwYWNoZSBBeGlzCi0KLSMKLSNXU1dTRExBeGlzVHlwZQotIwotV1NfTkFNRV9XU0RMQVhJUz1Ta2VsZXRvbiBKYXZhIGJlYW4gQXhpcyBXZWIgc2VydmljZQotCi0jCi0jV1NCZWFuQXhpc1R5cGUKLSMKLVdTX05BTUVfQkVBTkFYSVM9SmF2YSBiZWFuIEF4aXMgV2ViIHNlcnZpY2UKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvcGx1Z2luLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTllNjA3OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNjAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLQotPHBsdWdpbj4KLSAgIAotICAgPCEtLSBTZXJ2ZXIgRGVmYXVsdGVycyAtLT4KLSAgIAotICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnNlcnZlckRlZmF1bHRlciI+Ci0gICAgICA8c2VydmVyRGVmYXVsdGVyCi0gICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZC5BeGlzU2VydmVyRGVmYXVsdGVyIj4KLSAgICAgIDwvc2VydmVyRGVmYXVsdGVyPgotICAgPC9leHRlbnNpb24+Ci0gICAKLSAgIDwhLS0KLSAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53ZWJTZXJ2aWNlUnVudGltZSI+Ci0gIAk8d2ViU2VydmljZVJ1bnRpbWUKLSAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24uYXhpc1dlYlNlcnZpY2VSVCIKLSAgICBsYWJlbD0iJUxBQkVMX1JVTlRJTUVfQVhJU18xMSIKLSAgICBzZXJ2aWNlVHlwZXM9Im9yZy5lY2xpcHNlLmpzdC53cy5zZXJ2aWNlVHlwZS5qYXZhIgotICAgIGNsaWVudFR5cGVzPSJvcmcuZWNsaXBzZS5qc3Qud3MuY2xpZW50VHlwZS5qYXZhLndlYk9ubHkiCi0gICAgc2VydmxldExldmVscz0iMjMgMjQiCi0gICAgajJlZUxldmVscz0iMTMgMTQiCi0gICAgc2VydmVycz0ib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNDAgb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNDEgb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNTAgb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNTUgb3JnLmVjbGlwc2UuanN0LnNlcnZlci5nZXJvbmltby4xMCIKLSAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud3NydC5BeGlzV2ViU2VydmljZVJ1bnRpbWUiPgotICAJPC93ZWJTZXJ2aWNlUnVudGltZT4KLQk8L2V4dGVuc2lvbj4gCi0gICAtLT4KLSAgIAotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRSZWdpc3RyeSI+Ci0gICAgICAgPHdpZGdldEZhY3RvcnkgICAKLSAgICAgICAgICAgICBpZD0iQXhpc0JlYW5Db25maWciCi0gICAgICAgICAgICAgaW5zZXJ0QmVmb3JlQ29tbWFuZElkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS50YXNrLkJVQ29uZmlnQ29tbWFuZCIKLSAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud3NydC5BeGlzQmVhbkNvbmZpZ1dpZGdldEZhY3RvcnkiLz4KLSAgICA8L2V4dGVuc2lvbj4gCi0gICAgCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldFJlZ2lzdHJ5Ij4KLSAgICAgICA8d2lkZ2V0RmFjdG9yeSAgIAotICAgICAgICAgICAgIGlkPSJBeGlzU2tlbGV0b25Db25maWciCi0gICAgICAgICAgICAgaW5zZXJ0QmVmb3JlQ29tbWFuZElkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS50YXNrLlREQ29uZmlnQ29tbWFuZCIKLSAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud3NydC5BeGlzU2tlbGV0b25Db25maWdXaWRnZXRGYWN0b3J5Ii8+Ci0gICAgPC9leHRlbnNpb24+IAotICAgIAotICAgIDwhLS0gTTkgZXh0ZW5zaW9ucyAtLT4KLSAgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkucnVudGltZXMiPgotICAgICAgPHJ1bnRpbWUKLSAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLmF4aXNXZWJTZXJ2aWNlUlQiCi0gICAgICAgIGxhYmVsPSIlTEFCRUxfUlVOVElNRV9BWElTXzExIgotICAgICAgICBzZXJ2ZXJSZXF1aXJlZD0iZmFsc2UiLz4KLSAgICA8L2V4dGVuc2lvbj4KLQotICAgIDwhLS0gZGVmaW5lIHN1cHBvcnQgZm9yIEF4aXMgSmF2YSBiZWFuIGJvdHRvbSB1cCBhbmQgdG9wLWRvd24gc3VwcG9ydCBpbiB3ZWIgcHJvamVjdHMgLS0+Ci0gICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLnNlcnZpY2VSdW50aW1lcyI+Ci0gICAgICA8c2VydmljZVJ1bnRpbWUKLSAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLmphdmEiCi0gICAgICAgIHNlcnZpY2VJbXBsZW1lbnRhdGlvblR5cGVJZD0ib3JnLmVjbGlwc2UuanN0LndzLndzSW1wbC5qYXZhIgotICAgICAgICBydW50aW1lSWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLmF4aXNXZWJTZXJ2aWNlUlQiCi0gICAgICAgIGJvdHRvbVVwPSJ0cnVlIgotICAgICAgICB0b3BEb3duPSJ0cnVlIgotICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud3NydC5BeGlzV2ViU2VydmljZVJ1bnRpbWUiPgotCi0gICAgICAgIDxyZXF1aXJlZC1mYWNldC12ZXJzaW9uIGZhY2V0PSJqc3Qud2ViIiB2ZXJzaW9uPSIyLjMiIGFsbG93LW5ld2VyPSJ0cnVlIi8+Ci0KLSAgICAgIDwvc2VydmljZVJ1bnRpbWU+Ci0gICAgPC9leHRlbnNpb24+ICAgCi0KLSAgICA8IS0tIGRlZmluZSBzdXBwb3J0IGZvciBBeGlzIEphdmEgY2xpZW50cyBpbiBKYXZhIHByb2plY3RzIC0tPgotICAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5jbGllbnRSdW50aW1lcyI+Ci0gICAgICA8Y2xpZW50UnVudGltZQotICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uamF2YSIKLSAgICAgICAgY2xpZW50SW1wbGVtZW50YXRpb25UeXBlSWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jbGllbnQudHlwZS5qYXZhIgotICAgICAgICBydW50aW1lSWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLmF4aXNXZWJTZXJ2aWNlUlQiCi0gICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53c3J0LkF4aXNXZWJTZXJ2aWNlUnVudGltZSI+Ci0KLSAgICAgICAgPHJlcXVpcmVkLWZhY2V0LXZlcnNpb24gZmFjZXQ9ImpzdC51dGlsaXR5IiB2ZXJzaW9uPSIxLjAiIGFsbG93LW5ld2VyPSJ0cnVlIi8+Ci0KLSAgICAgIDwvY2xpZW50UnVudGltZT4KLSAgICA8L2V4dGVuc2lvbj4gICAgCi0gICAgCi0gICAgPCEtLSBkZWZpbmUgc3VwcG9ydCBmb3IgQXhpcyBKYXZhIGNsaWVudHMgaW4gV2ViIHByb2plY3RzIC0tPgotICAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5jbGllbnRSdW50aW1lcyI+Ci0gICAgICA8Y2xpZW50UnVudGltZQotICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24ud2ViIgotICAgICAgICBjbGllbnRJbXBsZW1lbnRhdGlvblR5cGVJZD0ib3JnLmVjbGlwc2UuanN0LndzLmNsaWVudC50eXBlLmphdmEiCi0gICAgICAgIHJ1bnRpbWVJZD0ib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24uYXhpc1dlYlNlcnZpY2VSVCIKLSAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLndzcnQuQXhpc1dlYlNlcnZpY2VSdW50aW1lIj4KLQotICAgICAgICA8cmVxdWlyZWQtZmFjZXQtdmVyc2lvbiBmYWNldD0ianN0LndlYiIgdmVyc2lvbj0iMi4zIiBhbGxvdy1uZXdlcj0idHJ1ZSIvPgotCi0gICAgICA8L2NsaWVudFJ1bnRpbWU+Ci0gICAgPC9leHRlbnNpb24+ICAgICAgICAKLSAgICAKLSAgICA8IS0tIGV4dGVuZCBXZWJTZXJ2aWNlU2FtcGxlVGVzdCB0byBzdXBwb3J0IHRoZSBBeGlzIGNsaWVudCBydW50aW1lcyAtLT4KLSAgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkudGVzdGVyIj4KLSAgICAgIDx0ZXN0ZXIKLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0LldlYlNlcnZpY2VTYW1wbGVUZXN0IgotICAgICAgICAgc3VwcG9ydGVkQ2xpZW50UnVudGltZXM9Im9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLndlYiBvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5qYXZhIj4KLSAgICAgIDwvdGVzdGVyPgotICAgIDwvZXh0ZW5zaW9uPgotICAgIAotICAgICAgPGV4dGVuc2lvbgotICAgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmFudERhdGFNYXBwaW5nIj4KLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IkluaXRpYWxTZWxlY3Rpb24iCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkudGFzay5EZWZhdWx0c0ZvclNlcnZlckphdmFXU0RMQ29tbWFuZCIKLSAgICAgICAgICAgICAgcHJvcGVydHk9Ik9iamVjdFNlbGVjdGlvbiIKLSAgICAgICAgICAgICAgdHJhbnNmb3JtPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlN0cmluZzJTZWxlY3Rpb25UcmFuc2Zvcm1lciIvPgotICAgICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iSmF2YU91dHB1dCIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5jb21tYW5kLkJVQ29kZUdlbk9wZXJhdGlvbiIKLSAgICAgICAgICAgICAgcHJvcGVydHk9IkphdmFXU0RMUGFyYW0iCi0gICAgICAgICAgICAgIHRyYW5zZm9ybT0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbU1vZGlmaWVyIi8+Ci0gICAgICAgIDxtYXAKLSAgICAgICAgICAgICAga2V5PSJNYXBwaW5ncyIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5jb21tYW5kLkJVQ29kZUdlbk9wZXJhdGlvbiIKLSAgICAgICAgICAgICAgcHJvcGVydHk9IkphdmFXU0RMUGFyYW0iCi0gICAgICAgICAgICAgIHRyYW5zZm9ybT0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbU1vZGlmaWVyIi8+Ci0gICAgICAgIDxtYXAKLSAgICAgICAgICAgICAga2V5PSJNZXRob2RzIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQuQlVDb2RlR2VuT3BlcmF0aW9uIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iSmF2YVdTRExQYXJhbSIKLSAgICAgICAgICAgICAgdHJhbnNmb3JtPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbi5KYXZhV1NETFBhcmFtTW9kaWZpZXIiLz4KLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IlN0eWxlIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQuQlVDb2RlR2VuT3BlcmF0aW9uIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iSmF2YVdTRExQYXJhbSIKLSAgICAgICAgICAgICAgdHJhbnNmb3JtPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbi5KYXZhV1NETFBhcmFtTW9kaWZpZXIiLz4KLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IlVzZSIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5jb21tYW5kLkJVQ29kZUdlbk9wZXJhdGlvbiIKLSAgICAgICAgICAgICAgcHJvcGVydHk9IkphdmFXU0RMUGFyYW0iCi0gICAgICAgICAgICAgIHRyYW5zZm9ybT0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbU1vZGlmaWVyIi8+ICAgCi0gICAgICAgCi0gICAgICAgIDxtYXAKLSAgICAgICAgICAgICAga2V5PSJKYXZhT3V0cHV0IgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQuVERDb2RlR2VuT3BlcmF0aW9uIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iSmF2YVdTRExQYXJhbSIKLSAgICAgICAgICAgICAgdHJhbnNmb3JtPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbi5KYXZhV1NETFBhcmFtTW9kaWZpZXIiLz4KLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9Ik1hcHBpbmdzIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQuVERDb2RlR2VuT3BlcmF0aW9uIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iSmF2YVdTRExQYXJhbSIKLSAgICAgICAgICAgICAgdHJhbnNmb3JtPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbi5KYXZhV1NETFBhcmFtTW9kaWZpZXIiLz4gICAKLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9Ik1ldGhvZHMiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZC5URENvZGVHZW5PcGVyYXRpb24iCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJKYXZhV1NETFBhcmFtIgotICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1Nb2RpZmllciIvPiAgIAotCQk8bWFwCi0gICAgICAgICAgICAgIGtleT0iU3R5bGUiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZC5URENvZGVHZW5PcGVyYXRpb24iCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJKYXZhV1NETFBhcmFtIgotICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1Nb2RpZmllciIvPiAgIAotICAgICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iVXNlIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQuVERDb2RlR2VuT3BlcmF0aW9uIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iSmF2YVdTRExQYXJhbSIKLSAgICAgICAgICAgICAgdHJhbnNmb3JtPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbi5KYXZhV1NETFBhcmFtTW9kaWZpZXIiLz4gICAKLSAgPC9leHRlbnNpb24+IAotCi08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9BeGlzQ3JlYXRpb25VSS5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvQXhpc0NyZWF0aW9uVUkucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWRiMGY1MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9BeGlzQ3JlYXRpb25VSS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotIyAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyAyMDA2MDIxNiAgIDEyNjk4OSBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0jIDIwMDYwMzI5CSAxMjg4Mjcga2F0aHlAY2EuaWJtLmNvbSAgLSBLYXRoeSBDaGFuCi0jIDIwMDYwMzI5CSAxMjQ2Njcga2F0aHlAY2EuaWJtLmNvbSAgLSBLYXRoeSBDaGFuCi0jIDIwMDYwNjA3ICAgMTQ0OTc4IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0jIDIwMDcwNTA5ICAgMTgyMjc0IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgTWVzc2FnZXMgaW4gcGx1Z2luLnhtbC4KLSMKLQotIwotIyBFcnJvciBtZXNzYWdlcyB1c2VkIGluIHRoaXMgcGx1Z2luCi0jCi1NU0dfRVJST1JfUFJPSkVDVF9VUkw9SVdBQjA1MTRFIFVuYWJsZSB0byBnZXQgVVJMIGZvciBwcm9qZWN0IHswfQotTVNHX0VSUk9SX0NBTk5PVF9OT19KQVZBX0JFQU49SVdBQjAwMTVFIEEgSmF2YSBiZWFuIHdhcyBub3Qgc2VsZWN0ZWQKLU1TR19FUlJPUl9OT19QUk9KRUNUPUlXQUIwMDE2RSBBIHByb2plY3Qgd2FzIG5vdCBzZWxlY3RlZAotTVNHX0VSUk9SX0NBTk5PVF9MT0FEX0pBVkFfQkVBTj1JV0FCMDAxN0UgVGhlIEphdmEgYmVhbiwgezB9LCBjYW5ub3QgYmUgbG9hZGVkIGZyb20gezF9Ci1NU0dfRVJST1JfSkFWQV9NT0ZfUkVGTEVDVF9GQUlMRUQ9SVdBQjA1MjFFIEZhaWxlZCB0byBhbmFseXplIHRoZSBKYXZhIGJlYW46IHswfS4KLU1TR19FUlJPUl9SRUFEX0JFQU49SVdBQjA1MjJFIEVycm9yIGluIHJlYWRpbmcgbWV0aG9kcyBmcm9tIEphdmEgYmVhbi4KLU1TR19FUlJPUl9VUERBVEVfQVhJU19XU0REPUlXQUIwNTI0RSBFcnJvciB1cGRhdGluZyBBeGlzIGRlcGxveS53c2RkIGZpbGUKLQotIwotI0phdmFUb1dTRExNZXRob2RDb21tYW5kCi0jCi1NU0dfRVJST1JfSkFWQV9UT19NRVRIT0Q9SVdBQjAwMTlFIEVycm9yIGluIGdldHRpbmcgbWV0aG9kIGZyb20gSmF2YSBiZWFuLgotCi0jCi0jVXBkYXRlV0VCWE1MQ29tbWFuZAotIwotTVNHX0VSUk9SX1VQREFURV9XRUJfWE1MPUlXQUIwMDIwRSBFcnJvciBpbiBhZGRpbmcgc2VydmxldCBpbiB3ZWIueG1sLgotCi0jCi0jVXBkYXRlQXhpc1dTRERGaWxlVGFzawotIwotTVNHX1BMVUdJTl9GSUxFX1VSTD1Qcm9ibGVtIGxvY2F0aW5nIHBsdWdpbiBmaWxlCi0KLSMKLSNXZWJTZXJ2aWNlV1NETEF4aXNTZWxlY3Rpb25QYWdlCi0jCi1QQUdFX01TR19OT19GSUxFX1NQRUNJRklFRD1ObyBmaWxlIHNwZWNpZmllZC4KLVBBR0VfTVNHX05PX01FVEhPRF9TRUxFQ1RFRD1ObyBtZXRob2RzIHNlbGVjdGVkLgotCi0jCi0jV2ViU2VydmljZVNrZWxldG9uQXhpc0NvbmZpZ1BhZ2UKLSMKLVRPT0xUSVBfUEJTQ19QQUdFPQotVE9PTFRJUF9QQkNGX1RFWFRfVVJJPVRoZSBTT0FQIGJvZHkgbmFtZXNwYWNlIGFuZCB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgV2ViIHNlcnZpY2UuCi1UT09MVElQX1BCQ0ZfVEVYVF9XU0RMX0ZPTERFUj1UaGUgZm9sZGVyIG9mIHRoZSBXU0RMIGZpbGUuCi1UT09MVElQX1BCQ0ZfVEVYVF9XU0RMX0ZJTEU9VGhlIG5hbWUgb2YgdGhlIFdTREwgZmlsZS4KLUxBQkVMX1VSST1XZWIgc2VydmljZSBVUkk6Ci1MQUJFTF9PVVRQVVRfRk9MREVSX05BTUU9V1NETCBmb2xkZXI6Ci1MQUJFTF9PVVRQVVRfRklMRV9OQU1FPVdTREwgZmlsZToKLQotIwotI1dlYlNlcnZpY2VBeGlzQmVhbkNsYXNzUGFnZQotIwotUEFHRV9USVRMRV9XU0JFQU5fQ0xBU1M9V2ViIFNlcnZpY2UgSmF2YSBCZWFuIFNlbGVjdGlvbgotUEFHRV9ERVNDX1dTQkVBTl9DTEFTUz1TZWxlY3QgYSBKYXZhIGJlYW4KLUxBQkVMX0VYUExPUkVfTUFQUElOR1NfQkVBTjJYTUw9RGVmaW5lIGN1c3RvbSBtYXBwaW5nIGZvciBwYWNrYWdlIHRvIG5hbWVzcGFjZS4KLVRPT0xUSVBfUDJOX1NIT1dfTUFQUElOR1M9RGVmaW5lIHBhY2thZ2UgdG8gbmFtZXNwYWNlIG1hcHBpbmcgZm9yIGN1c3RvbWl6YXRpb24uCi0KLSMKLSNXZWJTZXJ2aWNlQXhpc0JlYW5Db25maWdQYWdlCi0jCi1UT09MVElQX1BCQ0ZfUEFHRT0KLVRPT0xUSVBfUEJNRV9UUkVFX01FVEhPRFM9SmF2YSBiZWFuIG1ldGhvZHMgdG8gaW5jbHVkZS4KLVBBR0VfVElUTEVfV1NCRUFOX0NPTkZJRz1XZWIgU2VydmljZSBKYXZhIEJlYW4gSWRlbnRpdHkKLVBBR0VfREVTQ19XU0JFQU5fQ09ORklHPUNvbmZpZ3VyZSB0aGUgSmF2YSBiZWFuIGFzIGEgV2ViIHNlcnZpY2UuCi1MQUJFTF9TVFlMRV9VU0U9U3R5bGUgYW5kIHVzZQotU1RZTEVfUlBDX0xJVEVSQUw9ZG9jdW1lbnQvbGl0ZXJhbAotU1RZTEVfRE9DX0xJVEVSQUw9ZG9jdW1lbnQvbGl0ZXJhbCAod3JhcHBlZCkKLVNUWUxFX1JQQ19FTkNPREVEPVJQQy9lbmNvZGVkCi0KLSMKLSMgQXhpc0NoZWNrQ29tcGlsZXJMZXZlbENvbW1hbmQKLSMKLU1TR19FUlJPUl9DT01QSUxFUl9MRVZFTF9OT1RfQ09NUEFUSUJMRT1UaGUgd29ya2JlbmNoIGlzIHJ1bm5pbmcgb24gSmF2YSBWTSB2ZXJzaW9uIHswfSwgaG93ZXZlciwgdGhlIGNvbXBpbGVyIGNvbXBsaWFuY2UgbGV2ZWwgb2YgXAotdGhlIHByb2plY3QgInsxfSIgaXMgc2V0IHRvIEphdmEgdmVyc2lvbiB7Mn0uICBcCi1HZW5lcmF0aW9uIG9mIGEgV2ViIHNlcnZpY2UgZnJvbSBKYXZhIGNhbm5vdCBwcm9jZWVkIGJlY2F1c2UgdGhlIHRvb2xzIHdpbGwgYmUgdW5hYmxlIHRvIHByb2Nlc3MgdGhlIGNsYXNzIGZpbGUgY29tcGlsZWQgd2l0aGluIHRoZSBwcm9qZWN0LiAgXAotVG8gY29ycmVjdCB0aGUgcHJvYmxlbSwgdGFrZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBhY3Rpb25zOiBcCi1cbjEuIE9wZW4gcHJvamVjdCBwcm9wZXJ0aWVzLCBzZWxlY3QgUHJvamVjdCBGYWNldHMsIGFuZCB1c2UgQWRkL1JlbW92ZSBQcm9qZWN0IEZhY2V0IHRvIGNoYW5nZSBKYXZhIHZlcnNpb24gdG8gezB9IG9yIGxvd2VyLlwKLVxuMi4gUmVzdGFydCB0aGUgd29ya2JlbmNoIG9uIGEgdmVyc2lvbiB7Mn0gSmF2YSBWTS4KLQotIwotIyBNb2RpZnlXU0RMRW5kcG9pbnRBZGRyZXNzQ29tbWFuZAotIwotTVNHX0VSUk9SX01PRElGWV9FTkRQT0lOVD1FcnJvciBpbiBtb2RpZnlpbmcgdGhlIHNvYXA6YWRkcmVzcyBsb2NhdGlvbiBVUkkgZm9yIFdTREwgZmlsZSB7MH0uCi0KLSMKLSMgTWVzc2FnZXMgZm9yIFZhbGlkYXRlV1NJQ29tcGxpYW5jZUNvbW1hbmQKLSMKLVdTSV9JTkNPTVBMSUFOQ0VfUlBDX0VOQ09ERUQ9UlBDIEVuY29kZWQgaXMgc2VsZWN0ZWQKLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDM3ZWFiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL0F4aXNDcmVhdGlvblVJTWVzc2FnZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMyOQkgMTI4ODI3IGthdGh5QGNhLmlibS5jb20gIC0gS2F0aHkgQ2hhbgotICogMjAwNjAzMjkJIDEyNDY2NyBrYXRoeUBjYS5pYm0uY29tICAtIEthdGh5IENoYW4KLSAqIDIwMDYwNjA3ICAxNDQ5Nzgga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDcwNTA5ICAgMTgyMjc0IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotCi1wdWJsaWMgZmluYWwgY2xhc3MgQXhpc0NyZWF0aW9uVUlNZXNzYWdlcyBleHRlbmRzIE5MUyB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSAib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuQXhpc0NyZWF0aW9uVUkiOy8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgQXhpc0NyZWF0aW9uVUlNZXNzYWdlcygpIHsKLQkJLy8gRG8gbm90IGluc3RhbnRpYXRlCi0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1BST0pFQ1RfVVJMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9DQU5OT1RfTk9fSkFWQV9CRUFOOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9OT19QUk9KRUNUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9DQU5OT1RfTE9BRF9KQVZBX0JFQU47Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0pBVkFfTU9GX1JFRkxFQ1RfRkFJTEVEOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9SRUFEX0JFQU47Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1VQREFURV9BWElTX1dTREQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0pBVkFfVE9fTUVUSE9EOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9VUERBVEVfV0VCX1hNTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfUExVR0lOX0ZJTEVfVVJMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfTVNHX05PX0ZJTEVfU1BFQ0lGSUVEOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfTVNHX05PX01FVEhPRF9TRUxFQ1RFRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BCU0NfUEFHRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BCQ0ZfVEVYVF9VUkk7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QQkNGX1RFWFRfV1NETF9GT0xERVI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QQkNGX1RFWFRfV1NETF9GSUxFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1VSSTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9PVVRQVVRfRk9MREVSX05BTUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfT1VUUFVUX0ZJTEVfTkFNRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX1RJVExFX1dTQkVBTl9DTEFTUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX0RFU0NfV1NCRUFOX0NMQVNTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX0VYUExPUkVfTUFQUElOR1NfQkVBTjJYTUw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QMk5fU0hPV19NQVBQSU5HUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BCQ0ZfUEFHRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BCTUVfVFJFRV9NRVRIT0RTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfVElUTEVfV1NCRUFOX0NPTkZJRzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX0RFU0NfV1NCRUFOX0NPTkZJRzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9TVFlMRV9VU0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgU1RZTEVfUlBDX0xJVEVSQUw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgU1RZTEVfRE9DX0xJVEVSQUw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgU1RZTEVfUlBDX0VOQ09ERUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0NPTVBJTEVSX0xFVkVMX05PVF9DT01QQVRJQkxFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9NT0RJRllfRU5EUE9JTlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NJX0lOQ09NUExJQU5DRV9SUENfRU5DT0RFRDsKLQotCXN0YXRpYyB7Ci0JCU5MUy5pbml0aWFsaXplTWVzc2FnZXMoQlVORExFX05BTUUsIEF4aXNDcmVhdGlvblVJTWVzc2FnZXMuY2xhc3MpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvQXhpc0NoZWNrQ29tcGlsZXJMZXZlbENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvQXhpc0NoZWNrQ29tcGlsZXJMZXZlbENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjgzNjNlZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9jb21tYW5kL0F4aXNDaGVja0NvbXBpbGVyTGV2ZWxDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklKYXZhUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuQXhpc0NyZWF0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi0vKioKLSAqIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBwcm9qZWN0IGNvbnRhaW5pbmcgdGhlIHNlcnZpY2UgYmVhbiBpcyBub3QgYXQgYSBjb21waWxlciBjb21wbGlhbmNlIHNldHRpbmcKLSAqIHRoYXQncyBoaWdoZXIgdGhhbiB0aGUgSmF2YSBWTSB0aGUgd29ya2JlbmNoIGlzIGxhdW5jaGVkIHdpdGguIAotICovCi1wdWJsaWMgY2xhc3MgQXhpc0NoZWNrQ29tcGlsZXJMZXZlbENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiB7Ci0KLQlwcml2YXRlIFN0cmluZyBzZXJ2ZXJQcm9qZWN0XzsKLQotCS8qKgotCSAqIERlZmF1bHQgQ1RPUgotCSAqLwotCXB1YmxpYyBBeGlzQ2hlY2tDb21waWxlckxldmVsQ29tbWFuZCgpIHsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLm9wZXJhdGlvbnMuSVVuZG9hYmxlT3BlcmF0aW9uI2V4ZWN1dGUob3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3IsIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlKQotCSAqLwotCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSkgewotCQkKLQkJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCQlTdHJpbmcgamF2YVNwZWNWZXJzaW9uID0gU3lzdGVtLmdldFByb3BlcnR5KCJqYXZhLnNwZWNpZmljYXRpb24udmVyc2lvbiIpOwotCQlpZiAoamF2YVNwZWNWZXJzaW9uICE9IG51bGwpCi0JCXsKLQkJCUlQcm9qZWN0IHByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3Qoc2VydmVyUHJvamVjdF8pOwotCQkJSUphdmFQcm9qZWN0IGphdmFQcm9qZWN0ID0gSmF2YUNvcmUuY3JlYXRlKHByb2plY3QpOyAgICAKLQkJCWlmIChqYXZhUHJvamVjdCAhPSBudWxsKQotCQkJewotCQkJCVN0cmluZyBwcm9qZWN0Q29tcGlsZXJMZXZlbCA9IGphdmFQcm9qZWN0LmdldE9wdGlvbigib3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZSIsIGZhbHNlKTsKLQkJCQlpZiAocHJvamVjdENvbXBpbGVyTGV2ZWwgPT0gbnVsbCkKLQkJCQl7Ci0JCQkJCXByb2plY3RDb21waWxlckxldmVsID0gKFN0cmluZylKYXZhQ29yZS5nZXREZWZhdWx0T3B0aW9ucygpLmdldCgib3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZSIpOwotCQkJCX0KLQkJCQlpZiAocHJvamVjdENvbXBpbGVyTGV2ZWwgIT0gbnVsbCkKLQkJCQl7Ci0JCQkJCWlmICghY29tcGlsZXJMZXZlbHNDb21wYXRpYmxlKGphdmFTcGVjVmVyc2lvbiwgcHJvamVjdENvbXBpbGVyTGV2ZWwpKSB7Ci0JCQkJCQlzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggTkxTLmJpbmQoQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfQ09NUElMRVJfTEVWRUxfTk9UX0NPTVBBVElCTEUsIG5ldyBTdHJpbmdbXSB7amF2YVNwZWNWZXJzaW9uLCBzZXJ2ZXJQcm9qZWN0XywgcHJvamVjdENvbXBpbGVyTGV2ZWx9KSk7Ci0JCQkJCQlnZXRFbnZpcm9ubWVudCgpLmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkJCQl9CQkJCi0JCQkJfSAJCi0JCQl9Ci0JCX0KLQkJcmV0dXJuIHN0YXR1czsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRydWUgaWYgYW5kIG9ubHkgaWYgdGhlIEphdmEgc3BlY2lmaWNhdGlvbiBsZXZlbAotCSAqIG9mIHRoZSBFY2xpcHNlIEpSRSAoPGNvZGU+amF2YVNwZWNWZXJzaW9uPC9jb2RlPiBpcyBub3QKLQkgKiBsb3dlciB0aGFuIHRoZSBKYXZhIHNwZWNpZmljYXRpb24gbGV2ZWwgb2YgdGhlIGNvbXBpbGVyCi0JICogKDxjb2RlPnByb2plY3RDb21waWxlckxldmVsPC9jb2RlPi4gCi0JICogQHBhcmFtIGphdmFTcGVjVmVyc2lvbiBUaGUgSmF2YSBTcGVjaWZpY2F0aW9uIFZlcnNpb24gb2YgdGhlIEpSRS4KLQkgKiBAcGFyYW0gcHJvamVjdENvbXBpbGVyTGV2ZWwgVGhlIEphdmEgcHJvamVjdCdzIGNvbXBpbGVyIGxldmVsLgotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgSmF2YSBzcGVjaWZpY2F0aW9uIGxldmVsIG9mIHRoZSBwcm9qZWN0J3MKLQkgKiBjb21waWxlciBkb2VzIG5vdCBleGNlZWQgdGhlIEphdmEgc3BlY2lmaWNhdGlvbiBsZXZlbCBvZiB0aGUKLQkgKiBKUkUgdGhhdCBFY2xpcHNlIGlzIHJ1bm5pbmcgb24sIGFuZCBmYWxzZSBvdGhlcndpc2UuCi0JICovCi0JcHJpdmF0ZSBib29sZWFuIGNvbXBpbGVyTGV2ZWxzQ29tcGF0aWJsZShTdHJpbmcgamF2YVNwZWNWZXJzaW9uLCBTdHJpbmcgcHJvamVjdENvbXBpbGVyTGV2ZWwpIHsKLQkJcmV0dXJuIChqYXZhU3BlY1ZlcnNpb24uY29tcGFyZVRvKHByb2plY3RDb21waWxlckxldmVsKSA+PSAwKTsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBwcm9qZWN0IHdob3NlIGNvbXBpbGVyIGxldmVsIHNob3VsZCBiZSBjaGVja2VkLgotCSAqIEBwYXJhbSBzZXJ2ZXJQcm9qZWN0IFRoZSBwcm9qZWN0IHdob3NlIGNvbXBpbGVyIGxldmVsIHNob3VsZCBiZSBjaGVja2VkLgotCSAqLwotCXB1YmxpYyB2b2lkIHNldFNlcnZlclByb2plY3QoU3RyaW5nIHNlcnZlclByb2plY3QpIHsKLQkJc2VydmVyUHJvamVjdF8gPSBzZXJ2ZXJQcm9qZWN0OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvQXhpc091dHB1dENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvQXhpc091dHB1dENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTU2ZGEzYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9jb21tYW5kL0F4aXNPdXRwdXRDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQ7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud3NydC5BeGlzV2ViU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53c3J0LkF4aXNXZWJTZXJ2aWNlSW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi0KLXB1YmxpYyBjbGFzcyBBeGlzT3V0cHV0Q29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIHsKLQotCXByaXZhdGUgQXhpc1dlYlNlcnZpY2Ugd3NfOwotCXByaXZhdGUgSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbV87Ci0KLQlwcml2YXRlIFN0cmluZyAgICAgICAgICAgIHdzZGxVUklfOwotCSAgCSAgCi0JCS8qKgotCQkqIERlZmF1bHQgQ1RPUgotCQkqLwotCQlwdWJsaWMgQXhpc091dHB1dENvbW1hbmQoKSB7Ci0JCX0KLQkJCi0JCXB1YmxpYyBBeGlzT3V0cHV0Q29tbWFuZChBeGlzV2ViU2VydmljZSB3cykgewotCQkJd3NfID0gd3M7Ci0JCX0KLQkJCi0JCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKSAKLQkJewotCQkgIAlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7ICAJCi0JCSAgCXdzXy5nZXRXZWJTZXJ2aWNlSW5mbygpLnNldFdzZGxVUkwod3NkbFVSSV8pOwotCQkJQXhpc1dlYlNlcnZpY2VJbmZvIGF4aXNXU0luZm8gPSBuZXcgQXhpc1dlYlNlcnZpY2VJbmZvKCk7Ci0JCQlheGlzV1NJbmZvLnNldEphdmFXU0RMUGFyYW1ldGVyKGphdmFXU0RMUGFyYW1fKTsKLQkJCXdzXy5zZXRBeGlzV2ViU2VydmljZUluZm8oYXhpc1dTSW5mbyk7CQkgICAgCi0JCSAgCQotCQkgIAlyZXR1cm4gc3RhdHVzOyAgICAgIAkKLQkJICB9Ci0KLQkJICAvKioKLQkJICAgKiBAcGFyYW0gd3NkbFVSSQotCQkgICAqICAgICAgICAgICAgVGhlIHdzZGxVUkkgdG8gc2V0LgotCQkgICAqLwotCQkgIHB1YmxpYyB2b2lkIHNldFdzZGxVUkkoU3RyaW5nIHdzZGxVUkkpCi0JCSAgewotCQkgICAgd3NkbFVSSV8gPSB3c2RsVVJJOwotCQkgIH0KLQotCQlwdWJsaWMgdm9pZCBzZXRKYXZhV1NETFBhcmFtIChKYXZhV1NETFBhcmFtZXRlciBqYXZhV1NETFBhcmFtXykgewotCQkJdGhpcy5qYXZhV1NETFBhcmFtXyA9IGphdmFXU0RMUGFyYW1fOwotCQl9Ci0JCSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9jb21tYW5kL0F4aXNSdW5JbnB1dENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvQXhpc1J1bklucHV0Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTY3NDgwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvQXhpc1J1bklucHV0Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMzMwICAgMTI0NjY3IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud3NydC5BeGlzV2ViU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi1wdWJsaWMgY2xhc3MgQXhpc1J1bklucHV0Q29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uewotCQotCXByaXZhdGUgQXhpc1dlYlNlcnZpY2Ugd3NfOwotCXByaXZhdGUgSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbV87Ci0JcHJpdmF0ZSBTdHJpbmcgc2VydmVyUHJvamVjdF87IAotCXByaXZhdGUgU3RyaW5nIHNlcnZlckluc3RhbmNlSWRfOyAKLQlwcml2YXRlIFN0cmluZyBzZXJ2ZXJGYWN0b3J5SWRfOwotCXByaXZhdGUgU3RyaW5nIHdzZGxVUklfOwotCQotCXB1YmxpYyBBeGlzUnVuSW5wdXRDb21tYW5kKCkgewotCX0KLQkKLQlwdWJsaWMgQXhpc1J1bklucHV0Q29tbWFuZChBeGlzV2ViU2VydmljZSB3cywgU3RyaW5nIHByb2plY3QpIHsKLQkJd3NfID0gd3M7Ci0JCXNlcnZlclByb2plY3RfID0gcHJvamVjdDsgCi0JfQotCQotCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKSAKLQl7Ci0JIAlqYXZhV1NETFBhcmFtXyA9IHdzXy5nZXRBeGlzV2ViU2VydmljZUluZm8oKS5nZXRKYXZhV1NETFBhcmFtZXRlcigpOwotCSAJc2VydmVySW5zdGFuY2VJZF8gPSB3c18uZ2V0V2ViU2VydmljZUluZm8oKS5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCk7Ci0JIAlzZXJ2ZXJGYWN0b3J5SWRfID0gd3NfLmdldFdlYlNlcnZpY2VJbmZvKCkuZ2V0U2VydmVyRmFjdG9yeUlkKCk7Ci0JIAl3c2RsVVJJXyA9IHdzXy5nZXRXZWJTZXJ2aWNlSW5mbygpLmdldFdzZGxVUkwoKTsKLQkJCi0JCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCSAgfQotCQotCSAvKioKLQkgICAqIEByZXR1cm4gUmV0dXJucyB0aGUgc2VydmVyUHJvamVjdC4KLQkgICAqLwotCSAgcHVibGljIFN0cmluZyBnZXRTZXJ2ZXJQcm9qZWN0KCkKLQkgIHsKLQkJICByZXR1cm4gc2VydmVyUHJvamVjdF87Ci0JICB9Ci0JICAKLQlwdWJsaWMgSmF2YVdTRExQYXJhbWV0ZXIgZ2V0SmF2YVdTRExQYXJhbSgpIHsKLQkJcmV0dXJuIGphdmFXU0RMUGFyYW1fOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0U2VydmVySW5zdGFuY2VJZCgpIHsKLQkJcmV0dXJuIHNlcnZlckluc3RhbmNlSWRfOwotCX0JCi0JCi0JcHVibGljIFN0cmluZyBnZXRTZXJ2ZXJGYWN0b3J5SWQoKSB7Ci0JCXJldHVybiBzZXJ2ZXJGYWN0b3J5SWRfOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0V3NkbFVSSSgpIHsKLQkJcmV0dXJuIHdzZGxVUklfOwotCX0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9jb21tYW5kL0F4aXNTZXJ2ZXJEZWZhdWx0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvQXhpc1NlcnZlckRlZmF1bHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzc4YjZiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvQXhpc1NlcnZlckRlZmF1bHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLklTZXJ2ZXJEZWZhdWx0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbi5TZXJ2ZXJJbmZvOwotCi0KLQotcHVibGljIGNsYXNzIEF4aXNTZXJ2ZXJEZWZhdWx0ZXIgaW1wbGVtZW50cyBJU2VydmVyRGVmYXVsdGVyCi17Ci0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLklTZXJ2ZXJEZWZhdWx0ZXIjcmVjb21tZW5kRGVmYXVsdFNlcnZlcihvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdCkKLSAgICovCi0gIHB1YmxpYyBTZXJ2ZXJJbmZvIHJlY29tbWVuZERlZmF1bHRTZXJ2ZXIoSVByb2plY3QgcHJvamVjdCkKLSAgeyAgICAKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvY29tbWFuZC9CVUF4aXNJbnB1dENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvQlVBeGlzSW5wdXRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxOTNlMmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvY29tbWFuZC9CVUF4aXNJbnB1dENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MTkgICAxMzI5MDUgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkgICAgICAgICAgCi0gKiAyMDA2MTAwNCAgIDE1OTM1NiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbiwgR2V0IGNvcnJlY3QgbW9kdWxlIHJvb3QgVVJMIGJhc2VkIG9uIHNlcnZlciBjaG9zZW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5jb21tYW5kOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbnRleHQuQXhpc0VtaXR0ZXJDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUucGx1Z2luLldlYlNlcnZpY2VBeGlzQ29uc3VtcHRpb25Db3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5KQVhSUENXZWJTZXJ2aWNlQW5hbHl6ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5TdGF0dXNFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuU2VydmVyQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JV2ViU2VydmljZTsKLQotCi1wdWJsaWMgY2xhc3MgQlVBeGlzSW5wdXRDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gewotCQotCXByaXZhdGUgSVdlYlNlcnZpY2Ugd3NfOwotCXByaXZhdGUgU3RyaW5nIHNlcnZlclByb2plY3RfOyAKLQlwcml2YXRlIFN0cmluZyBqYXZhQmVhbk5hbWVfOwotCi0JICBwcml2YXRlIFN0cmluZyBzZXJ2aWNlU2VydmVyVHlwZUlEXzsKLQkgIHByaXZhdGUgSVNlcnZlciBzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXJfID0gbnVsbDsKLQkgIAotCQkvKioKLQkJKiBEZWZhdWx0IENUT1IKLQkJKi8KLQkJcHVibGljIEJVQXhpc0lucHV0Q29tbWFuZCgpIHsKLQkJfQotCQkKLQkJcHVibGljIEJVQXhpc0lucHV0Q29tbWFuZChJV2ViU2VydmljZSB3cywgU3RyaW5nIHByb2plY3QpIHsKLQkJCXdzXyA9IHdzOwotCQkJc2VydmVyUHJvamVjdF8gPSBwcm9qZWN0OyAKLQkJfQotCQkKLQkJcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApIAotCQl7Ci0JICAgICAgIAotCQlTdHJpbmcgc2VydmVySW5zdGFuY2VJZCA9IHdzXy5nZXRXZWJTZXJ2aWNlSW5mbygpLmdldFNlcnZlckluc3RhbmNlSWQoKTsKLQkJU3RyaW5nIHNlcnZlckZhY3RvcnlJZCA9IHdzXy5nZXRXZWJTZXJ2aWNlSW5mbygpLmdldFNlcnZlckZhY3RvcnlJZCgpOwotCQlqYXZhQmVhbk5hbWVfID0gd3NfLmdldFdlYlNlcnZpY2VJbmZvKCkuZ2V0SW1wbFVSTCgpOwotCQkKLQkJLy8gVGhlIGZvbGxvd2luZyAiaWYiIGJsb2NrIGRyaXZlcyB2YWxpZGF0aW9uIG9mIHRoZSBnaXZlbgotCQkvLyBKYXZhIHNlcnZpY2UgY2xhc3MgKGphdmFCZWFuTmFtZV8pIGFnYWluc3QgSkFYLVJQQyBpZiB0aGUKLQkJLy8gSkFYLVJQQyB2YWxpZGF0aW9uIHByZWZlcmVuY2UgaXMgc3dpdGNoZWQgb24uCi0JCS8vIEZvciB0aGUgbW9zdCBwYXJ0LCB0aGUgSkFYLVJQQyBhbmFseXplciByZXR1cm5zIHdhcm5pbmdzCi0JCS8vIGZvciB2aW9sYXRpb25zIG9mIHRoZSBKQVgtUlBDIHNwZWMsIGFuZCBlcnJvcnMgb25seSBpZgotCQkvLyBhY3R1YWwgSkRUIG1vZGVsIG5hdmlnYXRpb24gZmFpbHMgZHVlIHRvIGJhZCBjbGFzc3BhdGhzLgotCQkvLyBUaGlzIGFsbG93cyB1c2VycyB0aGUgY2hvaWNlIG9mIGhlZWRpbmcgb3IgaWdub3JpbmcgdGhlCi0JCS8vIG1lc3NhZ2VzIHJldHVybmVkIGJ5IHRoZSBhbmFseXplci4KLQkJSUVudmlyb25tZW50IGVudmlyb25tZW50ID0gZ2V0RW52aXJvbm1lbnQoKTsKLQkJQXhpc0VtaXR0ZXJDb250ZXh0IGNvbnRleHQgPSBXZWJTZXJ2aWNlQXhpc0NvbnN1bXB0aW9uQ29yZVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEF4aXNFbWl0dGVyQ29udGV4dCgpOwotCQlpZiAoamF2YUJlYW5OYW1lXyAhPSBudWxsICYmIGNvbnRleHQuaXNWYWxpZGF0ZUFnYWluc3RKQVhSUENFbmFibGVkKCkpCi0JCXsKLQkJCUpBWFJQQ1dlYlNlcnZpY2VBbmFseXplciBhbmFseXplciA9IG5ldyBKQVhSUENXZWJTZXJ2aWNlQW5hbHl6ZXIoKTsKLQkJCUlQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3Qoc2VydmVyUHJvamVjdF8pOyAKLQkJCWlmIChwcm9qZWN0ICE9IG51bGwpCi0JCQl7Ci0JCQkJSVN0YXR1cyBzdGF0dXMgPSBhbmFseXplci5hbmFseXplKHByb2plY3QsamF2YUJlYW5OYW1lXyxtb25pdG9yKTsKLQkJCQlpZiAoIXN0YXR1cy5pc09LKCkpCi0JCQkJewotCQkJCQl0cnkKLQkJCQkJewotCQkJCQkJZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydChzdGF0dXMpOwotCQkJCQl9Ci0JCQkJCWNhdGNoIChTdGF0dXNFeGNlcHRpb24gZSkKLQkJCQkJewotCQkJCQkJcmV0dXJuIG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwib3JnLmVjbGlwc2UuanN0LndzIiwwLCIiLG51bGwpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCQotCQlpZiAoc2VydmVySW5zdGFuY2VJZCAhPSBudWxsKSB7IC8vIHNlcnZlciBleGlzdHMKLQkgICAgCXNlcnZpY2VFeGlzdGluZ1NlcnZlcl8gPSBTZXJ2ZXJDb3JlLmZpbmRTZXJ2ZXIoc2VydmVySW5zdGFuY2VJZCk7Ci0JCQlpZiAoc2VydmljZUV4aXN0aW5nU2VydmVyXyAhPSBudWxsKQotCQkgICAgewotCQkgICAgICBzZXJ2aWNlU2VydmVyVHlwZUlEXyA9IHNlcnZpY2VFeGlzdGluZ1NlcnZlcl8uZ2V0U2VydmVyVHlwZSgpLmdldElkKCk7Ci0JCSAgICB9Ci0JICAgIH0KLQkgICAgZWxzZQotCSAgICB7Ci0JICAgIAlzZXJ2aWNlU2VydmVyVHlwZUlEXyA9IHNlcnZlckZhY3RvcnlJZDsKLQkgICAgfQotCQkKLQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JICB9Ci0JICAKLQkJLyoqCi0JCSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBzZXJ2ZXJQcm9qZWN0LgotCQkgICAqLwotCQkgIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmVyUHJvamVjdCgpCi0JCSAgewotCQkJICByZXR1cm4gc2VydmVyUHJvamVjdF87Ci0JCSAgfQotCi0JCSAgcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlU2VydmVyVHlwZUlEKCkKLQkJICB7Ci0JCSAgICByZXR1cm4gc2VydmljZVNlcnZlclR5cGVJRF87Ci0JCSAgfQotCi0JCXB1YmxpYyBTdHJpbmcgZ2V0SmF2YUJlYW5OYW1lKCkgewotCQkJcmV0dXJuIGphdmFCZWFuTmFtZV87Ci0JCX0KLQkJCi0JCXB1YmxpYyBJU2VydmVyIGdldFNlcnZpY2VFeGlzdGluZ1NlcnZlcigpCi0JCSAgewotCQkgICAgcmV0dXJuIHNlcnZpY2VFeGlzdGluZ1NlcnZlcl87Ci0JCSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvY29tbWFuZC9CVUNvZGVHZW5PcGVyYXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvQlVDb2RlR2VuT3BlcmF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhZTIyNTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvY29tbWFuZC9CVUNvZGVHZW5PcGVyYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogICAgICAKLSAqIDIwMDYwNTA5ICAgMTI1MDk0IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdSwgVXNlIFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbgotICogMjAwNjA1MTUgICAxMTUyMjUgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA2MDUxNyAgIDE0MjMyNyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbWFuZC5KYXZhMldTRExDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbWFuZC5XU0RMMkphdmFDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnRhc2suQ29weUF4aXNKYXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnRhc2suUmVmcmVzaFByb2plY3RDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLnRhc2suVXBkYXRlQXhpc1dTRERGaWxlVGFzazsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLldvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi1wdWJsaWMgY2xhc3MgQlVDb2RlR2VuT3BlcmF0aW9uIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gewotCi0JLy8gQ29weUF4aXNKYXJDb21tYW5kCi0JcHJpdmF0ZSBDb3B5QXhpc0phckNvbW1hbmQgY29weUF4aXNKYXJDb21tYW5kID0gbnVsbDsKLQkKLQkvLyBKYXZhMldTRExDb21tYW5kCi0JcHJpdmF0ZSBKYXZhMldTRExDb21tYW5kIGphdmEyV1NETENvbW1hbmQgPSBudWxsOwotCXByaXZhdGUgSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbTsgIAotCXByaXZhdGUgU3RyaW5nIHdzZGxVUkk7IAotCQotCS8vIHdzZGwySmF2YUNvbW1hbmQKLQlwcml2YXRlIFdTREwySmF2YUNvbW1hbmQgd3NkbDJKYXZhQ29tbWFuZCA9IG51bGw7Ci0JCQotCS8vIFVwZGF0ZUF4aXNXU0RERmlsZVRhc2sKLQlwcml2YXRlIFVwZGF0ZUF4aXNXU0RERmlsZVRhc2sgdXBkYXRlQXhpc1dzZGRDb21tYW5kID0gbnVsbDsKLQlwcml2YXRlIElQcm9qZWN0IHNlcnZpY2VQcm9qZWN0OwotCQotCS8vIFVwZGF0ZVdFQlhNTENvbW1hbmQKLQlwcml2YXRlIFVwZGF0ZVdFQlhNTENvbW1hbmQgdXBkYXRlV2ViWE1MQ29tbWFuZCA9IG51bGw7Ci0JCi0JLy8gUmVmcmVzaFByb2plY3RDb21tYW5kCi0JcHJpdmF0ZSBSZWZyZXNoUHJvamVjdENvbW1hbmQgcmVmcmVzaFByb2plY3RDb21tYW5kID0gbnVsbDsKLQotCS8qKgotCSAqIFRoaXMgY29tbWFuZCBydW5zIHRoZSBjb21tYW5kcyBpbiB0aGUgY29uc3RydWN0b3IgaW4gYSBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24uCi0JICogVGhlIGNvbW1hbmRzIGFyZSBsaXN0ZWQgYWJvdmUsIGFsb25nIHdpdGggdGhlaXIgcmVsZXZhbnQgZGF0YSByZWdpc3RyeSBwYXJhbWV0ZXJzIAotCSAqIEBwYXJhbSBqYXZhMldTREwKLQkgKiBAcGFyYW0gd3NkbDJKYXZhCi0JICogQHBhcmFtIHVwZGF0ZUF4aXNXc2RkCi0JICogQHBhcmFtIHVwZGF0ZVdlYlhNTAotCSAqLwotCXB1YmxpYyBCVUNvZGVHZW5PcGVyYXRpb24oKXsKLQkJY29weUF4aXNKYXJDb21tYW5kID0gbmV3IENvcHlBeGlzSmFyQ29tbWFuZCgpOwotCQlqYXZhMldTRExDb21tYW5kID0gbmV3IEphdmEyV1NETENvbW1hbmQoKTsKLQkJd3NkbDJKYXZhQ29tbWFuZCA9IG5ldyBXU0RMMkphdmFDb21tYW5kKCk7Ci0JCXVwZGF0ZUF4aXNXc2RkQ29tbWFuZCA9IG5ldyBVcGRhdGVBeGlzV1NEREZpbGVUYXNrKCk7Ci0JCXVwZGF0ZVdlYlhNTENvbW1hbmQgPSBuZXcgVXBkYXRlV0VCWE1MQ29tbWFuZCgpOwotCQlyZWZyZXNoUHJvamVjdENvbW1hbmQgPSBuZXcgUmVmcmVzaFByb2plY3RDb21tYW5kKCk7Ci0JfQotCi0JcHVibGljIElTdGF0dXMgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgaW5mbykgewotCi0JCUlFbnZpcm9ubWVudCBlbnYgPSBnZXRFbnZpcm9ubWVudCgpOwotCQlCb3R0b21VcFdTTW9kaWZ5T3BlcmF0aW9uIGJ1T3BlcmF0aW9uID0gbmV3IEJvdHRvbVVwV1NNb2RpZnlPcGVyYXRpb24oaW5mbywgZW52KTsKLQkJdHJ5IHsKLQkJCWJ1T3BlcmF0aW9uLmV4ZWN1dGUobW9uaXRvcik7Ci0JCX0KLQkJY2F0Y2goQ29yZUV4Y2VwdGlvbiBjZSl7Ci0JCQlJU3RhdHVzIHN0YXR1cyA9IGNlLmdldFN0YXR1cygpOwotCQkJcmV0dXJuIHN0YXR1czsKLQkJfQotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQotCX0KLQotCXByaXZhdGUgY2xhc3MgQm90dG9tVXBXU01vZGlmeU9wZXJhdGlvbiBleHRlbmRzIFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiB7Ci0JCQotCQkgIHByaXZhdGUgSUFkYXB0YWJsZSBpbmZvID0gbnVsbDsKLQkJICBwcml2YXRlIElFbnZpcm9ubWVudCBlbnYgPSBudWxsOwotCi0JCSAgCi0JCSAgcHJvdGVjdGVkIEJvdHRvbVVwV1NNb2RpZnlPcGVyYXRpb24oSUFkYXB0YWJsZSBhZGFwdGFibGUsIElFbnZpcm9ubWVudCBlbnZpcm9ubWVudCl7Ci0JCQkgIGluZm8gPSBhZGFwdGFibGU7Ci0JCQkgIGVudiA9IGVudmlyb25tZW50OwotCQkgIH0KLQkJICAKLQkJICBwcm90ZWN0ZWQgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb257Ci0JCSAgCi0JCQkgICAgSVN0YXR1cyBzdGF0dXMgPSBudWxsOwotCQkJICAKLQkJCSAgICAvLyBDb3B5QXhpc0phckNvbW1hbmQKLQkJCSAgICBjb3B5QXhpc0phckNvbW1hbmQuc2V0RW52aXJvbm1lbnQoZW52KTsKLQkJCSAgICBjb3B5QXhpc0phckNvbW1hbmQuc2V0UHJvamVjdChzZXJ2aWNlUHJvamVjdCk7Ci0JCQkgICAgc3RhdHVzID0gY29weUF4aXNKYXJDb21tYW5kLmV4ZWN1dGUobW9uaXRvciwgaW5mbyk7Ci0JCQkgICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUil7Ci0JCQkgICAgCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKHN0YXR1cyk7Ci0JCQkgICAgfQotCQkJICAgIAotCQkJICAJLy8gSmF2YTJXU0RMQ29tbWFuZAotCQkJCWphdmEyV1NETENvbW1hbmQuc2V0RW52aXJvbm1lbnQoZW52KTsKLQkJCQlqYXZhMldTRExDb21tYW5kLnNldEphdmFXU0RMUGFyYW0oamF2YVdTRExQYXJhbSk7Ci0JCQkJc3RhdHVzID0gamF2YTJXU0RMQ29tbWFuZC5leGVjdXRlKG1vbml0b3IsIGluZm8pOwotCQkJCWlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpIHsKLQkJCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24oc3RhdHVzKTsKLQkJCQl9Ci0JCQkJd3NkbFVSSSA9IGphdmEyV1NETENvbW1hbmQuZ2V0V3NkbFVSSSgpOwotCQkJCQotCQkJCS8vIFdTREwySmF2YUNvbW1hbmQKLQkJCQl3c2RsMkphdmFDb21tYW5kLnNldEVudmlyb25tZW50KGVudik7Ci0JCQkJd3NkbDJKYXZhQ29tbWFuZC5zZXRKYXZhV1NETFBhcmFtKGphdmFXU0RMUGFyYW0pOwotCQkJCXN0YXR1cyA9IHdzZGwySmF2YUNvbW1hbmQuZXhlY3V0ZShtb25pdG9yLCBpbmZvKTsKLQkJCQlpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKSB7Ci0JCQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKHN0YXR1cyk7Ci0JCQkJfQotCQkJCWphdmFXU0RMUGFyYW0gPSB3c2RsMkphdmFDb21tYW5kLmdldEphdmFXU0RMUGFyYW0oKTsKLQkJCQkKLQkJCQkvLyBVcGRhdGVBeGlzV3NkZENvbW1hbmQKLQkJCQl1cGRhdGVBeGlzV3NkZENvbW1hbmQuc2V0RW52aXJvbm1lbnQoZW52KTsKLQkJCQl1cGRhdGVBeGlzV3NkZENvbW1hbmQuc2V0SmF2YVdTRExQYXJhbShqYXZhV1NETFBhcmFtKTsKLQkJCQl1cGRhdGVBeGlzV3NkZENvbW1hbmQuc2V0U2VydmljZVByb2plY3Qoc2VydmljZVByb2plY3QpOwotCQkJCXN0YXR1cyA9IHVwZGF0ZUF4aXNXc2RkQ29tbWFuZC5leGVjdXRlKG1vbml0b3IsIGluZm8pOwotCQkJCWlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpIHsKLQkJCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24oc3RhdHVzKTsKLQkJCQl9Ci0JCQkJamF2YVdTRExQYXJhbSA9IHVwZGF0ZUF4aXNXc2RkQ29tbWFuZC5nZXRKYXZhV1NETFBhcmFtKCk7Ci0JCQkJCi0JCQkJLy8gVXBkYXRlV2ViWE1MQ29tbWFuZAotCQkJCXVwZGF0ZVdlYlhNTENvbW1hbmQuc2V0RW52aXJvbm1lbnQoZW52KTsKLQkJCQl1cGRhdGVXZWJYTUxDb21tYW5kLnNldFNlcnZlclByb2plY3Qoc2VydmljZVByb2plY3QpOwotCQkJCXN0YXR1cyA9IHVwZGF0ZVdlYlhNTENvbW1hbmQuZXhlY3V0ZShtb25pdG9yLCBpbmZvKTsKLQkJCQlpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKSB7Ci0JCQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKHN0YXR1cyk7Ci0JCQkJfQotCQkJCQotCQkJCS8vIFJlZnJlc2hQcm9qZWN0Q29tbWFuZAotCQkJCXJlZnJlc2hQcm9qZWN0Q29tbWFuZC5zZXRFbnZpcm9ubWVudChlbnYpOwotCQkJCXJlZnJlc2hQcm9qZWN0Q29tbWFuZC5zZXRQcm9qZWN0KHNlcnZpY2VQcm9qZWN0KTsKLQkJCQlzdGF0dXMgPSByZWZyZXNoUHJvamVjdENvbW1hbmQuZXhlY3V0ZShtb25pdG9yLCBpbmZvKTsKLQkJCQlpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKSB7Ci0JCQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKHN0YXR1cyk7Ci0JCQkJfQotCi0JCQkgIAotCQkgIH0KLQkJCi0JfQotCi0JcHVibGljIFN0cmluZyBnZXRXc2RsVVJJKCkgewotCQlyZXR1cm4gd3NkbFVSSTsKLQl9Ci0JCi0JcHVibGljIEphdmFXU0RMUGFyYW1ldGVyIGdldEphdmFXU0RMUGFyYW0oKSB7Ci0JCXJldHVybiBqYXZhV1NETFBhcmFtOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldEphdmFXU0RMUGFyYW0oSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbSkgewotCQl0aGlzLmphdmFXU0RMUGFyYW0gPSBqYXZhV1NETFBhcmFtOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFNlcnZpY2VQcm9qZWN0KElQcm9qZWN0IHNlcnZpY2VQcm9qZWN0KSB7Ci0JCXRoaXMuc2VydmljZVByb2plY3QgPSBzZXJ2aWNlUHJvamVjdDsKLQl9Ci0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9jb21tYW5kL0NvcHlEZXBsb3ltZW50RmlsZUNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvQ29weURlcGxveW1lbnRGaWxlQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDQ3ZTE0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvQ29weURlcGxveW1lbnRGaWxlQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDUyNCAgIDEzMDc1NSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjEyMjEgICAxNjg3ODcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDcwODE1ICAgMTg4OTk5IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5jb21tYW5kOwotCi0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLkF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnBsdWdpbi5XZWJTZXJ2aWNlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbW1vbi5GaWxlUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuQmFzZUVjbGlwc2VFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUucmVzb3VyY2VzLklWaXJ0dWFsQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5yZXNvdXJjZXMuSVZpcnR1YWxGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5yZXNvdXJjZXMuSVZpcnR1YWxGb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JU3RhdHVzSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JTW9kdWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5pbnRlcm5hbC5JTW9kdWxlUHVibGlzaEhlbHBlcjsKLQotLyoqCi0gKiAKLSAqIFRoaXMgY29tbWFuZCBjb3BpZXMgdGhlIHNlcnZlci1jb25maWcud3NkZCBmaWxlIHRvIGl0J3MgcHJvcGVyIGxvY2F0aW9uIGluIHRoZSBtb2R1bGUuCi0gKiAKLSAqLwotCi1wdWJsaWMgY2xhc3MgQ29weURlcGxveW1lbnRGaWxlQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgV0VCX0lORiA9ICJXRUItSU5GIjsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBTRVJWRVJfQ09ORklHID0gInNlcnZlci1jb25maWcud3NkZCI7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgcHJvamVjdE5hbWVfOwotICAgIHByaXZhdGUgU3RyaW5nIEVBUlByb2plY3ROYW1lXzsKLQlwcml2YXRlIFN0cmluZyBzZXJ2ZXJJbnN0YW5jZUlkXzsKLSAgCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgQ29weURlcGxveW1lbnRGaWxlQ29tbWFuZC4KLSAqIEBwYXJhbSBTdHJpbmcgZGVzY3JpcHRpb24KLSAqIEBwYXJhbSBTdHJpbmcgbmFtZQotICAgKiAKLSAgICovCi0gIHB1YmxpYyBDb3B5RGVwbG95bWVudEZpbGVDb21tYW5kKCBTdHJpbmcgcHJvamVjdE5hbWUsIFN0cmluZyBlYXJQcm9qZWN0TmFtZSApCi0gIHsgCi0gICAgcHJvamVjdE5hbWVfICAgPSBwcm9qZWN0TmFtZTsKLSAgICBFQVJQcm9qZWN0TmFtZV8gICA9IGVhclByb2plY3ROYW1lOwotICB9Ci0KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApIAotICB7Ci0JICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0JICBJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQgPSBnZXRFbnZpcm9ubWVudCgpOwotCSAgCi0JICBGaWxlSW5wdXRTdHJlYW0gZmluU3RyZWFtID0gbnVsbDsKLQkgIHRyeQotCSAgewotCQkgIAotCQkgIElWaXJ0dWFsQ29tcG9uZW50IGNvbXBvbmVudCA9IEoyRUVVdGlscy5nZXRWaXJ0dWFsQ29tcG9uZW50KCBwcm9qZWN0TmFtZV8gKTsKLQkJICBJU2VydmVyIHNlcnZlciA9IFNlcnZlckNvcmUuZmluZFNlcnZlciggc2VydmVySW5zdGFuY2VJZF8gKTsKLQkJICBJUHJvamVjdCBwcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHByb2plY3ROYW1lXyk7Ci0JCSAgSU1vZHVsZSBwcm9qZWN0TW9kdWxlID0gU2VydmVyVXRpbC5nZXRNb2R1bGUocHJvamVjdCk7Ci0JCSAgCi0JCSAgaWYgKHNlcnZlciAhPSBudWxsICYmIGNvbXBvbmVudCAhPSBudWxsICYmIHByb2plY3RNb2R1bGUgIT0gbnVsbCkgewotCQkJICBJTW9kdWxlUHVibGlzaEhlbHBlciBwdWJsaXNoSGVscGVyID0gKElNb2R1bGVQdWJsaXNoSGVscGVyKSAKLQkJCSAgCXNlcnZlci5sb2FkQWRhcHRlcihJTW9kdWxlUHVibGlzaEhlbHBlci5jbGFzcywgbW9uaXRvcik7Ci0JCQkgIGlmIChwdWJsaXNoSGVscGVyICE9IG51bGwpIHsKLQkJCQkgIElNb2R1bGVbXSBzZXJ2ZXJNb2R1bGVzOwotCQkJCSAgaWYgKEVBUlByb2plY3ROYW1lXyA9PSBudWxsKSB7Ci0JCQkJCSAgc2VydmVyTW9kdWxlcyA9IG5ldyBJTW9kdWxlIFtdIHtwcm9qZWN0TW9kdWxlfTsKLQkJCQkgIH0gZWxzZSB7Ci0JCQkJCSAgSVByb2plY3QgRUFSUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChFQVJQcm9qZWN0TmFtZV8pOwotCQkJCQkgIElNb2R1bGUgRUFSUHJvamVjdE1vZHVsZSA9IFNlcnZlclV0aWwuZ2V0TW9kdWxlKEVBUlByb2plY3QpOwotCQkJCQkgIHNlcnZlck1vZHVsZXMgPSBuZXcgSU1vZHVsZSBbXSB7RUFSUHJvamVjdE1vZHVsZSwgcHJvamVjdE1vZHVsZX07Ci0JCQkJICB9Ci0JCQkJICBJUGF0aCBwdWJsaXNoRGlyUGF0aCA9IHB1Ymxpc2hIZWxwZXIuZ2V0UHVibGlzaERpcmVjdG9yeShzZXJ2ZXJNb2R1bGVzKTsKLQkJCQkgIAotCQkJCSAgaWYgKHB1Ymxpc2hEaXJQYXRoICE9IG51bGwpIHsKLQkJCQkJICBJVmlydHVhbEZvbGRlciByb290Rm9sZGVyID0gY29tcG9uZW50LmdldFJvb3RGb2xkZXIoKTsKLQkJCQkJICBJUGF0aCByb290Rm9sZGVyUGF0aCA9IFJlc291cmNlVXRpbHMuZ2V0V29ya3NwYWNlUm9vdCgpLmdldEZpbGUocm9vdEZvbGRlci5nZXRXb3Jrc3BhY2VSZWxhdGl2ZVBhdGgoKSkuZ2V0TG9jYXRpb24oKTsKLQkJCQkJICBpZiAocm9vdEZvbGRlclBhdGggIT0gbnVsbCkgewotCQkJCQkJICBGaWxlIHJvb3RGb2xkZXJGaWxlID0gcm9vdEZvbGRlclBhdGgudG9GaWxlKCk7Ci0JCQkJCQkgIEZpbGUgcHVibGlzaERpckZpbGUgPSBwdWJsaXNoRGlyUGF0aC50b0ZpbGUoKTsKLQkJCQkJCSAgaWYgKCFyb290Rm9sZGVyRmlsZS5lcXVhbHMocHVibGlzaERpckZpbGUpKSB7Ci0JCQkJCQkJICAvLyBjb3B5IHRoZSBzZXJ2ZXItY29uZmlnLndzZGQgaWYgdGhlIHB1Ymxpc2ggZGlyZWN0b3J5IGlzIG5vdCBpbiB0aGUgc2FtZSBhcyB0aGUgcHJvamVjdCByb290IGZvbGRlcgotCQkJCQkJCSAgSVBhdGggcGF0aCA9IG5ldyBQYXRoKCBXRUJfSU5GICkuYXBwZW5kKCBTRVJWRVJfQ09ORklHICk7Ci0JCQkJCQkJICBJUGF0aCBzZXJ2ZXJDb25maWdQYXRoID0gcHVibGlzaERpclBhdGguYXBwZW5kKHBhdGgpOwotCQkJCQkJCSAgaWYgKHNlcnZlckNvbmZpZ1BhdGggIT0gbnVsbCkgewkJCSAgCi0JCQkJCQkJCSAgSVZpcnR1YWxGaWxlIG5ld0xvY2F0aW9uID0gcm9vdEZvbGRlci5nZXRGaWxlKHBhdGgpOwotCQkJCQkJCQkgIElQYXRoIHRhcmdldFBhdGggPSBuZXdMb2NhdGlvbi5nZXRXb3Jrc3BhY2VSZWxhdGl2ZVBhdGgoKTsKLQkJCQkJCQkJICBpZiAodGFyZ2V0UGF0aCAhPSBudWxsKSB7Ci0JCQkJCQkJCQkgIGZpblN0cmVhbSA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oc2VydmVyQ29uZmlnUGF0aC50b1N0cmluZygpKTsKLQkJCQkJCQkJCSAgaWYgKGZpblN0cmVhbSAhPSBudWxsKSAKLQkJCQkJCQkJCSAgewotCQkJCQkJCQkJCSAgSVN0YXR1c0hhbmRsZXIgIHN0YXR1c0hhbmRsZXIgPSBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCk7Ci0JCQkJCQkJCQkgICAgUmVzb3VyY2VDb250ZXh0IGNvbnRleHQgICAgICAgPSAoKEJhc2VFY2xpcHNlRW52aXJvbm1lbnQpZW52aXJvbm1lbnQpLmdldFJlc291cmNlQ29udGV4dCgpOwotCQkJCQkJCQkJICAgIAotCQkJCQkJCQkJCSAgRmlsZVJlc291cmNlVXRpbHMuY3JlYXRlRmlsZShjb250ZXh0LCAgCi0JCQkJCQkJCQkJCQkgIHRhcmdldFBhdGgsCi0JCQkJCQkJCQkJCQkgIGZpblN0cmVhbSwKLQkJCQkJCQkJCQkJCSAgbW9uaXRvciwKLQkJCQkJCQkJCQkJCSAgc3RhdHVzSGFuZGxlcik7Ci0JCQkJCQkJCQkJICBmaW5TdHJlYW0uY2xvc2UoKTsKLQkJCQkJCQkJCSAgfQotCQkJCQkJCQkgIH0KLQkJCQkJCQkgIH0KLQkJCQkJCSAgfQotCQkJCQkgIH0KLQkJCQkgIH0gIAotCQkJICB9IAkgIAkJICAKLQkJICB9CSAgCi0JICB9Ci0JICBjYXRjaCggVGhyb3dhYmxlIGUgKQotCSAgewotCQkgIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKEF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5NU0dfRVJST1JfTU9WRV9SRVNPVVJDRSwgbmV3IFN0cmluZ1tde2UuZ2V0TG9jYWxpemVkTWVzc2FnZSgpfSksIGUpOwotCQkgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCSAgfSBmaW5hbGx5IHsKLQkJICBpZiAoZmluU3RyZWFtICE9IG51bGwpIHsKLQkJCSAgdHJ5IHsKLQkJCQkgIGZpblN0cmVhbS5jbG9zZSgpOwotCQkJICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkgIH0KLQkJICB9CQkJCi0JICB9Ci0JICAKLQkgIHJldHVybiBzdGF0dXM7Ci0JICAKLSAgfQotCi0JcHVibGljIHZvaWQgc2V0U2VydmVySW5zdGFuY2VJZChTdHJpbmcgc2VydmVySW5zdGFuY2VJZCkgewotCQl0aGlzLnNlcnZlckluc3RhbmNlSWRfID0gc2VydmVySW5zdGFuY2VJZDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9jb21tYW5kL0phdmFUb1dTRExNZXRob2RDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9jb21tYW5kL0phdmFUb1dTRExNZXRob2RDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjMzQxOGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvY29tbWFuZC9KYXZhVG9XU0RMTWV0aG9kQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjEzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5jb21tYW5kOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuSmF2YUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLk1ldGhvZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbi5KYXZhV1NETFBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5BeGlzQ3JlYXRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uSmF2YU1PRlV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi0KLXB1YmxpYyBjbGFzcyBKYXZhVG9XU0RMTWV0aG9kQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIHsKLQotCXByaXZhdGUgc3RhdGljIFN0cmluZyBKQVZBX0VYVEVOU0lPTiA9ICIuamF2YSI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgQ0xBU1NfRVhURU5TSU9OID0gIi5jbGFzcyI7IC8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgSGFzaHRhYmxlIGZNZXRob2ROYW1lczsKLQlwcml2YXRlIFN0cmluZyBmQ2xhc3NOYW1lOwotCXByaXZhdGUgU3RyaW5nIGZiZWFuQmFzZU5hbWU7Ci0JcHJpdmF0ZSBKYXZhV1NETFBhcmFtZXRlciBqYXZhV1NETFBhcmFtXzsKLQlwcml2YXRlIElQcm9qZWN0IHNlcnZpY2VQcm9qZWN0XzsKLQotCS8qKgotCSogRGVmYXVsdCBDVE9SCi0JKi8KLQlwdWJsaWMgSmF2YVRvV1NETE1ldGhvZENvbW1hbmQoKSB7Ci0JfQotCS8qKgotCSogRGVmYXVsdCBDVE9SCi0JKi8KLQlwdWJsaWMgSmF2YVRvV1NETE1ldGhvZENvbW1hbmQoCi0JCUphdmFXU0RMUGFyYW1ldGVyIGphdmFQYXJhbWV0ZXIsCi0JCUlQcm9qZWN0IHNlcnZpY2VQcm9qZWN0KSB7Ci0JCWphdmFXU0RMUGFyYW1fID0gamF2YVBhcmFtZXRlcjsKLQkJc2VydmljZVByb2plY3RfID0gc2VydmljZVByb2plY3Q7Ci0KLQl9Ci0KLQkvKioKLQkqIEphdmFUb1RvV1NETE1ldGhvZCBleGVjdXRlCi0JKi8KLQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkgCi0JewotCQlJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQgPSBnZXRFbnZpcm9ubWVudCgpOwotCi0JCWZiZWFuQmFzZU5hbWUgPSBqYXZhV1NETFBhcmFtXy5nZXRCZWFuTmFtZSgpOwotCQllbnZpcm9ubWVudC5nZXRMb2coKS5sb2coSUxvZy5JTkZPLCA1MDcwLCB0aGlzLCAiZXhlY3V0ZSIsICJiZWFuQmFzZU5hbWUgPSAiK2ZiZWFuQmFzZU5hbWUpOwotCQlJU3RhdHVzIHN0YXR1czsKLQkJdHJ5IHsKLQkJCS8vR2V0IHRoZSBxdWFsaWZpZWQgYmVhbiBuYW1lOyBteS5wYWNrYWdlLk15Q2xhc3MKLQkJCWZNZXRob2ROYW1lcyA9IG5ldyBIYXNodGFibGUoKTsKLQkJCUhhc2h0YWJsZSBvbGRNZXRob2RzTmFtZXMgPSBqYXZhV1NETFBhcmFtXy5nZXRNZXRob2RzKCk7Ci0JCQlTdHJpbmcgcU5hbWUgPSBmYmVhbkJhc2VOYW1lOwotCi0JCQlpZiAocU5hbWUudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChKQVZBX0VYVEVOU0lPTikKLQkJCQl8fCBxTmFtZS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKENMQVNTX0VYVEVOU0lPTikpIHsKLQkJCQlxTmFtZSA9IHFOYW1lLnN1YnN0cmluZygwLCBxTmFtZS5sYXN0SW5kZXhPZignLicpKTsKLQkJCX0KLQotCQkJSmF2YUNsYXNzIGphdmFDbGFzcyA9IEphdmFNT0ZVdGlscy5nZXRKYXZhQ2xhc3MocU5hbWUsIHNlcnZpY2VQcm9qZWN0Xyk7Ci0JCQkKLQkJCWlmICghamF2YUNsYXNzLmlzRXhpc3RpbmdUeXBlKCkpIHsKLQkJCQllbnZpcm9ubWVudC5nZXRMb2coKS5sb2coSUxvZy5FUlJPUiwgNTAyMiwgdGhpcywgImV4ZWN1dGUiLCAKLQkJCQkJCU5MUy5iaW5kKEF4aXNDcmVhdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX0pBVkFfTU9GX1JFRkxFQ1RfRkFJTEVELAotCQkJCQkJbmV3IFN0cmluZ1tdIHsgcU5hbWUgfSkpOwotCQkJCQotCQkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKAotCQkJCQkJTkxTLmJpbmQoQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfSkFWQV9NT0ZfUkVGTEVDVF9GQUlMRUQsCi0JCQkJCW5ldyBTdHJpbmdbXSB7IHFOYW1lIH0pKTsKLQkJCQllbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJCQlyZXR1cm4gc3RhdHVzOwotCQkJfQotCi0JCQkvLyBHZXQgdGhlIHF1YWxpZmllZCBuYW1lCi0JCQlmQ2xhc3NOYW1lID0gamF2YUNsYXNzLmdldFF1YWxpZmllZE5hbWUoKTsKLQkJCVN0cmluZyBiZWFuTmFtZTsKLQkJCWlmIChmQ2xhc3NOYW1lLmxhc3RJbmRleE9mKCcuJykgIT0gLTEpIHsKLQkJCQliZWFuTmFtZSA9Ci0JCQkJCWZDbGFzc05hbWUuc3Vic3RyaW5nKAotCQkJCQkJZkNsYXNzTmFtZS5sYXN0SW5kZXhPZignLicpICsgMSwKLQkJCQkJCWZDbGFzc05hbWUubGVuZ3RoKCkpOwotCQkJfSBlbHNlCi0JCQkJYmVhbk5hbWUgPSBmQ2xhc3NOYW1lOwotCi0JCQkvLyBXYWxrIHRoZSBqYXZhIGNsYXNzIGFuZCBnZXQgdGhlIG1ldGhvZCBuYW1lcwotCQkJZ2F0aGVyTWV0aG9kcyhqYXZhQ2xhc3MsIGJlYW5OYW1lLCBvbGRNZXRob2RzTmFtZXMpOwotCQkJLyoKLQkJCUl0ZXJhdG9yIG0gPSBqYXZhQ2xhc3MuZ2V0UHVibGljTWV0aG9kc0V4dGVuZGVkKCkuaXRlcmF0b3IoKTsKLQkJCXdoaWxlIChtLmhhc05leHQoKSkgewotCQkJCU1ldGhvZCBtZXRob2QgPSAoTWV0aG9kKSBtLm5leHQoKTsgIAotCQkJCWlmICggISBtZXRob2QuaXNDb25zdHJ1Y3RvcigpKXsgCi0JCQkJaWYgKCFiZWFuTmFtZS5lcXVhbHMobWV0aG9kLmdldE5hbWUoKSkKLQkJCQkJJiYgIShpc0R1cGxpY2F0ZU1ldGhvZE5hbWUobWV0aG9kCi0JCQkJCQkuZ2V0TWV0aG9kRWxlbWVudFNpZ25hdHVyZSgpKSkKLQkJCQkJJiYgIShtZXRob2QKLQkJCQkJCS5nZXRDb250YWluaW5nSmF2YUNsYXNzKCkKLQkJCQkJCS5nZXRKYXZhTmFtZSgpCi0JCQkJCQkuZXF1YWxzSWdub3JlQ2FzZSgiamF2YXguZWpiLkVKQk9iamVjdCIpKQkvLyROT04tTkxTLTEkCi0JCQkJCSYmICEobWV0aG9kCi0JCQkJCQkuZ2V0Q29udGFpbmluZ0phdmFDbGFzcygpCi0JCQkJCQkuZ2V0SmF2YU5hbWUoKQotCQkJCQkJLmVxdWFsc0lnbm9yZUNhc2UoImphdmF4LmVqYi5FSkJPYmplY3RbXSIpKQkvLyROT04tTkxTLTEkCi0JCQkJCSYmICEobWV0aG9kCi0JCQkJCQkuZ2V0Q29udGFpbmluZ0phdmFDbGFzcygpCi0JCQkJCQkuZ2V0SmF2YU5hbWUoKQotCQkJCQkJLmVxdWFsc0lnbm9yZUNhc2UoImphdmEubGFuZy5PYmplY3QiKSkJLy8kTk9OLU5MUy0xJAotCQkJCQkmJiAhKG1ldGhvZAotCQkJCQkJLmdldENvbnRhaW5pbmdKYXZhQ2xhc3MoKQotCQkJCQkJLmdldEphdmFOYW1lKCkKLQkJCQkJCS5lcXVhbHNJZ25vcmVDYXNlKCJqYXZhLmxhbmcuT2JqZWN0W10iKSkpIHsJLy8kTk9OLU5MUy0xJAotCQkJCQkvLyBhZGQgdGhlIG1ldGhvZCBuYW1lIHRvIG91ciBsaXN0IG9mIG1ldGhvZCBuYW1lcwotCQkJCQlTdHJpbmcgbWV0aG9kTmFtZSA9bWV0aG9kLmdldE1ldGhvZEVsZW1lbnRTaWduYXR1cmUoKTsKLQkJICAgICAgICAgIEJvb2xlYW4gaXNTZWxlY3RlZCA9IG5ldyBCb29sZWFuKHRydWUpOwotICAgICAgICAJCSAgaWYgKG9sZE1ldGhvZHNOYW1lcyAhPSBudWxsICYmIG9sZE1ldGhvZHNOYW1lcy5jb250YWluc0tleShtZXRob2ROYW1lKSkKLSAgICAgICAgICAJCQlpc1NlbGVjdGVkID0gKEJvb2xlYW4pb2xkTWV0aG9kc05hbWVzLmdldChtZXRob2ROYW1lKTsKLQkJICAgICAgICAgIGZNZXRob2ROYW1lcy5wdXQobWV0aG9kTmFtZSwgaXNTZWxlY3RlZCk7Ci0JCQkJfSAKLQkJCQl9Ci0JCQl9Ci0JCQkqLwotCQkJamF2YVdTRExQYXJhbV8uc2V0TWV0aG9kcyhmTWV0aG9kTmFtZXMpOwotCQkJCi0JCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJZW52aXJvbm1lbnQuZ2V0TG9nKCkubG9nKElMb2cuRVJST1IsIDUwMjMsIHRoaXMsICJleGVjdXRlIiwgQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfUkVBRF9CRUFOKTsKLQkJCi0JCQlzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9KQVZBX1RPX01FVEhPRCwgZSk7Ci0JCQllbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJCXJldHVybiBzdGF0dXM7Ci0JCX0KLQl9Ci0KLSAgcHJpdmF0ZSB2b2lkIGdhdGhlck1ldGhvZHMoSmF2YUNsYXNzIGphdmFDbGFzcywgU3RyaW5nIGJlYW5OYW1lLCBIYXNodGFibGUgb2xkTWV0aG9kc05hbWVzKQotICB7Ci0gICAgU3RyaW5nIGphdmFOYW1lID0gamF2YUNsYXNzLmdldEphdmFOYW1lKCk7Ci0gICAgaWYgKCFqYXZhQ2xhc3MuaXNJbnRlcmZhY2UoKQotICAgICAgICAmJiAhamF2YU5hbWUuZXF1YWxzSWdub3JlQ2FzZSgiamF2YXguZWpiLkVKQk9iamVjdFtdIikKLSAgICAgICAgJiYgIWphdmFOYW1lLmVxdWFsc0lnbm9yZUNhc2UoImphdmF4LmVqYi5FSkJPYmplY3QiKQotICAgICAgICAmJiAhamF2YU5hbWUuZXF1YWxzSWdub3JlQ2FzZSgiamF2YS5sYW5nLk9iamVjdFtdIikKLSAgICAgICAgJiYgIWphdmFOYW1lLmVxdWFsc0lnbm9yZUNhc2UoImphdmEubGFuZy5PYmplY3QiKSkKLSAgICB7Ci0gICAgICBMaXN0IHB1YmxpY01ldGhvZHMgPSBqYXZhQ2xhc3MuZ2V0UHVibGljTWV0aG9kcygpOwotICAgICAgZm9yIChJdGVyYXRvciBpdCA9IHB1YmxpY01ldGhvZHMuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICAgIHsKLSAgICAgICAgTWV0aG9kIG1ldGhvZCA9IChNZXRob2QpaXQubmV4dCgpOwotICAgICAgICBpZiAoIW1ldGhvZC5pc0NvbnN0cnVjdG9yKCkKLSAgICAgICAgICAgICYmICFiZWFuTmFtZS5lcXVhbHMobWV0aG9kLmdldE5hbWUoKSkKLSAgICAgICAgICAgICYmICEoaXNEdXBsaWNhdGVNZXRob2ROYW1lKG1ldGhvZC5nZXRNZXRob2RFbGVtZW50U2lnbmF0dXJlKCkpKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIGFkZCB0aGUgbWV0aG9kIG5hbWUgdG8gb3VyIGxpc3Qgb2YgbWV0aG9kIG5hbWVzCi0gICAgICAgICAgU3RyaW5nIG1ldGhvZE5hbWUgPSBtZXRob2QuZ2V0TWV0aG9kRWxlbWVudFNpZ25hdHVyZSgpOwotICAgICAgICAgIEJvb2xlYW4gaXNTZWxlY3RlZCA9IG5ldyBCb29sZWFuKHRydWUpOwotICAgICAgICAgIGlmIChvbGRNZXRob2RzTmFtZXMgIT0gbnVsbCAmJiBvbGRNZXRob2RzTmFtZXMuY29udGFpbnNLZXkobWV0aG9kTmFtZSkpCi0gICAgICAgICAgICBpc1NlbGVjdGVkID0gKEJvb2xlYW4pb2xkTWV0aG9kc05hbWVzLmdldChtZXRob2ROYW1lKTsKLSAgICAgICAgICBmTWV0aG9kTmFtZXMucHV0KG1ldGhvZE5hbWUsIGlzU2VsZWN0ZWQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBnYXRoZXJNZXRob2RzKGphdmFDbGFzcy5nZXRTdXBlcnR5cGUoKSwgYmVhbk5hbWUsIG9sZE1ldGhvZHNOYW1lcyk7Ci0gICAgfQotICB9Ci0JICAKLQkvL1JldHVybnMgdHJ1ZSBpZiB0aGUgcHJvdmlkZWQgbWV0aG9kIG5hbWUgYWxyZWFkeSBleGlzdHMgaW4gdGhlIAotCS8vZk1ldGhvZE5hbWVzIHZlY3Rvci4gVGhpcyBtZXRob2QgaXMgdXNlZCB0byBkZXRlY3Qgb3ZlcmxvYWRlZCAKLQkvL21ldGhvZHMgaW4gQmVhbnMgYW5kIEVKQnMsIHdoaWNoIGFyZSBjdXJyZW50bHkgdW5zdXBwb3J0ZWQuCi0JcHJpdmF0ZSBib29sZWFuIGlzRHVwbGljYXRlTWV0aG9kTmFtZShTdHJpbmcgbWV0aG9kTmFtZSkgewotCQlyZXR1cm4gKGZNZXRob2ROYW1lcyA9PSBudWxsID8gZmFsc2U6IGZNZXRob2ROYW1lcy5jb250YWluc0tleShtZXRob2ROYW1lKSk7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIGphdmFXU0RMUGFyYW0uCi0JICogQHJldHVybiBKYXZhV1NETFBhcmFtZXRlcgotCSAqLwotCXB1YmxpYyBKYXZhV1NETFBhcmFtZXRlciBnZXRKYXZhV1NETFBhcmFtKCkgewotCQlyZXR1cm4gamF2YVdTRExQYXJhbV87Ci0JfQotCi0JLyoqCi0JICogU2V0cyB0aGUgamF2YVdTRExQYXJhbS4KLQkgKiBAcGFyYW0gamF2YVdTRExQYXJhbSBUaGUgamF2YVdTRExQYXJhbSB0byBzZXQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRKYXZhV1NETFBhcmFtKEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW0pIHsKLQkJdGhpcy5qYXZhV1NETFBhcmFtXyA9IGphdmFXU0RMUGFyYW07Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldFNlcnZpY2VQcm9qZWN0KElQcm9qZWN0IHNlcnZpY2VQcm9qZWN0KQotCXsKLQkgIHNlcnZpY2VQcm9qZWN0XyA9IHNlcnZpY2VQcm9qZWN0OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvTW9kaWZ5V1NETEVuZHBvaW50QWRkcmVzc0NvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvTW9kaWZ5V1NETEVuZHBvaW50QWRkcmVzc0NvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI0ZjAyNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9jb21tYW5kL01vZGlmeVdTRExFbmRwb2ludEFkZHJlc3NDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTE1ICAgMTE1MjI1IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQ7Ci0KLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0OwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQWRkcmVzczsKLWltcG9ydCBqYXZheC53c2RsLmZhY3RvcnkuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgud3NkbC54bWwuV1NETFdyaXRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLkF4aXNDcmVhdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU2VydmVyVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuU2VydmVyQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmRpc2NvdmVyeS5XZWJTZXJ2aWNlc1BhcnNlckV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC53c2RsNGouV1NETEZhY3RvcnlJbXBsOwotCi1wdWJsaWMgY2xhc3MgTW9kaWZ5V1NETEVuZHBvaW50QWRkcmVzc0NvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiB7Ci0KLQlwcml2YXRlIFN0cmluZyBzZXJ2ZXJJbnN0YW5jZUlkOwotCXByaXZhdGUgU3RyaW5nIHNlcnZlckZhY3RvcnlJZDsKLQlwcml2YXRlIElQcm9qZWN0IHNlcnZpY2VQcm9qZWN0OwotCXByaXZhdGUgU3RyaW5nIHdzZGxVUkk7Ci0JcHJpdmF0ZSBXZWJTZXJ2aWNlc1BhcnNlciB3ZWJTZXJ2aWNlc1BhcnNlcjsKLQlwdWJsaWMgZmluYWwgU3RyaW5nIFNFUlZJQ0VfRVhUID0gIi9zZXJ2aWNlcy8iOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBKYXZhV1NETFBhcmFtZXRlciBqYXZhV1NETFBhcmFtOwotCi0JcHVibGljIElTdGF0dXMgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlKSAgewotCQlJU3RhdHVzIHN0YXR1czsKLQkJSUVudmlyb25tZW50IGVudmlyb25tZW50ID0gZ2V0RW52aXJvbm1lbnQoKTsKLQkJdHJ5IHsKLQkJCS8vIHRoZSBjb3JyZWN0IHByb2plY3QgVVJMIGhhcyBhbHJlYWR5IGJlZW4gb2J0YWluZWQsIG5vIG5lZWQgdG8gbW9kaWZ5IDxzb2FwOmFkZHJlc3M+IGxvY2F0aW9uIFVSSQotCQkJaWYgKCFqYXZhV1NETFBhcmFtLmlzR3Vlc3NQcm9qZWN0VVJMKCkpIHsgCi0JCQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JCQl9Ci0KLQkJCVN0cmluZyBwcm9qZWN0VVJMID0gbnVsbDsJCQotCi0JCQlJU2VydmVyIHNlcnZlciA9IG51bGw7Ci0JCQlpZihzZXJ2ZXJJbnN0YW5jZUlkIT1udWxsKSB7Ci0JCQkJc2VydmVyID0gU2VydmVyQ29yZS5maW5kU2VydmVyKHNlcnZlckluc3RhbmNlSWQpOwotCQkJfQotCi0JCQlpZihzZXJ2ZXIhPW51bGwpIHsKLQkJCQlwcm9qZWN0VVJMID0gU2VydmVyVXRpbHMuZ2V0RW5jb2RlZFdlYkNvbXBvbmVudFVSTChzZXJ2aWNlUHJvamVjdCwgc2VydmVyRmFjdG9yeUlkLCBzZXJ2ZXIpOwotCQkJfSBlbHNlIHsKLQkJCQlwcm9qZWN0VVJMID0gU2VydmVyVXRpbHMuZ2V0RW5jb2RlZFdlYkNvbXBvbmVudFVSTChzZXJ2aWNlUHJvamVjdCwgc2VydmVyRmFjdG9yeUlkKTsKLQkJCX0KLQotCQkJaWYocHJvamVjdFVSTD09bnVsbCB8fCBwcm9qZWN0VVJMLnRyaW0oKS5sZW5ndGgoKT09MCkgewotCQkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKEF4aXNDcmVhdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX1BST0pFQ1RfVVJMLCBuZXcgU3RyaW5nW10ge3NlcnZpY2VQcm9qZWN0LmdldE5hbWUoKX0pKTsKLQkJCQllbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJCQlyZXR1cm4gc3RhdHVzOwotCQkJfQotCi0JCQlpZiAoamF2YVdTRExQYXJhbS5nZXRQcm9qZWN0VVJMKCkgPT0gcHJvamVjdFVSTCkgewotCQkJCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCQkJfSAKLQotCQkJamF2YVdTRExQYXJhbS5zZXRQcm9qZWN0VVJMKHByb2plY3RVUkwpOyAgLy8gcHJvamVjdCBVUkwgbmVlZGVkIGZvciBBeGlzIGRlcGxveQotCi0JCQkvLyBtb2RpZnkgdGhlIDxzb2FwOmFkZHJlc3M+IGxvY2F0aW9uIFVSSSB0byByZWZsZWN0IHRoZSBjb3JyZWN0IHByb2plY3QgVVJMCi0JCQlpZih3c2RsVVJJIT1udWxsKSB7CQkJCQkJCQotCQkJCWJvb2xlYW4gbW9kaWZpZWQgPSBmYWxzZTsJCQkJCQkJCi0JCQkJaWYgKHdlYlNlcnZpY2VzUGFyc2VyID09IG51bGwpIHsKLQkJCQkJd2ViU2VydmljZXNQYXJzZXIgPSBuZXcgV2ViU2VydmljZXNQYXJzZXJFeHQoKTsKLQkJCQl9Ci0JCQkJRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gd2ViU2VydmljZXNQYXJzZXIuZ2V0V1NETERlZmluaXRpb24od3NkbFVSSSk7Ci0JCQkJTWFwIHNlcnZpY2VzID0gZGVmaW5pdGlvbi5nZXRTZXJ2aWNlcygpOwotCQkJCWZvciAoSXRlcmF0b3IgaXQgPSBzZXJ2aWNlcy52YWx1ZXMoKS5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KSB7Ci0JCQkJCVNlcnZpY2Ugc2VyID0gKFNlcnZpY2UpaXQubmV4dCgpOwotCQkJCQlNYXAgcG9ydHMgPSBzZXIuZ2V0UG9ydHMoKTsKLQkJCQkJZm9yIChJdGVyYXRvciBpdDIgPSBwb3J0cy52YWx1ZXMoKS5pdGVyYXRvcigpOyBpdDIuaGFzTmV4dCgpOykgewotCQkJCQkJUG9ydCBwID0gKFBvcnQpaXQyLm5leHQoKTsKLQkJCQkJCWZvciAoSXRlcmF0b3IgaXQzID0gcC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOyBpdDMuaGFzTmV4dCgpOykgewotCQkJCQkJCU9iamVjdCBvYmogPSBpdDMubmV4dCgpOwotCQkJCQkJCWlmIChvYmogaW5zdGFuY2VvZiBTT0FQQWRkcmVzcykgewotCQkJCQkJCQlTT0FQQWRkcmVzcyBzb2FwQWRkcmVzcyA9IChTT0FQQWRkcmVzcylvYmo7Ci0JCQkJCQkJCVN0cmluZyB3c2RsU29hcEFkZHJlc3MgPSBzb2FwQWRkcmVzcy5nZXRMb2NhdGlvblVSSSgpOwotCi0JCQkJCQkJCS8vIGNoZWNrIGlmIHRoZSBXU0RMIFNPQVAgYWRkcmVzcyBoYXMgdGhlIHJpZ2h0IHByb2plY3QgVVJMLCBpZiBub3QsIHVwZGF0ZSBpdAotCQkJCQkJCQlpZih3c2RsU29hcEFkZHJlc3MhPW51bGwpIHsKLQkJCQkJCQkJCWlmICghd3NkbFNvYXBBZGRyZXNzLnN0YXJ0c1dpdGgocHJvamVjdFVSTCkpIHsKLQkJCQkJCQkJCQkvLyBlLmcuICJodHRwOi8vdGVtcHVyaS5vcmcvc2VydmljZXMvU2VydmljZU5hbWUiIGJlY29tZXMgIi9zZXJ2aWNlcy9TZXJ2aWNlTmFtZSIgCi0JCQkJCQkJCQkJU3RyaW5nIHNlcnZpY2VzU3RyaW5nID0gd3NkbFNvYXBBZGRyZXNzLnN1YnN0cmluZyh3c2RsU29hcEFkZHJlc3MuaW5kZXhPZihTRVJWSUNFX0VYVCkpOwotCQkJCQkJCQkJCXNvYXBBZGRyZXNzLnNldExvY2F0aW9uVVJJKHByb2plY3RVUkwgKyBzZXJ2aWNlc1N0cmluZyk7Ci0JCQkJCQkJCQkJbW9kaWZpZWQgPSB0cnVlOwotCQkJCQkJCQkJfQotCi0JCQkJCQkJCX0KLQkJCQkJCQl9Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0KLQkJCQlpZiAobW9kaWZpZWQpIHsKLQkJCQkJLy8gdXBkYXRlIHRoZSBXU0RMIGZpbGUgYW5kIHJlZnJlc2ggaW4gd29ya3NwYWNlCi0JCQkJCVdTRExGYWN0b3J5IHdzZGxGYWN0b3J5ID0gbmV3IFdTRExGYWN0b3J5SW1wbCgpOwotCQkJCQlXU0RMV3JpdGVyIHdzZGxXcml0ZXIgPSB3c2RsRmFjdG9yeS5uZXdXU0RMV3JpdGVyKCk7Ci0JCQkJCU91dHB1dFN0cmVhbSBvcyA9IGVudmlyb25tZW50LmdldFVSSUZhY3RvcnkoKS5uZXdVUkkod3NkbFVSSS50b1N0cmluZygpKS5nZXRPdXRwdXRTdHJlYW0oKTsKLQkJCQkJd3NkbFdyaXRlci53cml0ZVdTREwoZGVmaW5pdGlvbiwgb3MpOwotCQkJCQlvcy5jbG9zZSgpOwotCi0JCQkJCVVSTCB3c2RsVVJMID0gbmV3IFVSTCAod3NkbFVSSSk7Ci0JCQkJCUlSZXNvdXJjZSB3c2RsRmlsZSA9IFJlc291cmNlVXRpbHMuZmluZFJlc291cmNlQXRMb2NhdGlvbih3c2RsVVJMLmdldFBhdGgoKSwgc2VydmljZVByb2plY3QpOwotCQkJCQlpZiAod3NkbEZpbGUgIT0gbnVsbCkgewotCQkJCQkJd3NkbEZpbGUucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9aRVJPLCBtb25pdG9yKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfTU9ESUZZX0VORFBPSU5ULCBuZXcgU3RyaW5nW10ge3dzZGxVUkl9KSk7Ci0JCQkJZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0JCQkJcmV0dXJuIHN0YXR1czsKLQkJCX0KLQotCQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JCQlzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZChBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9NT0RJRllfRU5EUE9JTlQsIG5ldyBTdHJpbmdbXSB7d3NkbFVSSX0pKTsKLQkJCWVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkJcmV0dXJuIHN0YXR1czsKLQkJfQotCi0JCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCX0KLQotCi0JcHVibGljIHZvaWQgc2V0U2VydmVySW5zdGFuY2VJZChTdHJpbmcgc2VydmVySWQpIHsKLQkJdGhpcy5zZXJ2ZXJJbnN0YW5jZUlkID0gc2VydmVySWQ7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0U2VydmVyRmFjdG9yeUlkKFN0cmluZyBzZXJ2ZXJGYWN0b3J5SWQpIHsKLQkJdGhpcy5zZXJ2ZXJGYWN0b3J5SWQgPSBzZXJ2ZXJGYWN0b3J5SWQ7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0U2VydmljZVByb2plY3QoSVByb2plY3Qgc2VydmljZVByb2plY3QpIHsKLQkJdGhpcy5zZXJ2aWNlUHJvamVjdCA9IHNlcnZpY2VQcm9qZWN0OwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFdzZGxVUkkoU3RyaW5nIHdzZGxVUkkpIHsKLQkJdGhpcy53c2RsVVJJID0gd3NkbFVSSTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlc1BhcnNlcihXZWJTZXJ2aWNlc1BhcnNlciBwYXJzZXIpIHsKLQkJd2ViU2VydmljZXNQYXJzZXIgPSBwYXJzZXI7Ci0JfQotCi0KLQlwdWJsaWMgdm9pZCBzZXRKYXZhV1NETFBhcmFtKEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW0pCi0JewotCQl0aGlzLmphdmFXU0RMUGFyYW0gPSBqYXZhV1NETFBhcmFtOwotCX0KLQotCXB1YmxpYyBKYXZhV1NETFBhcmFtZXRlciBnZXRKYXZhV1NETFBhcmFtKCkKLQl7Ci0JCXJldHVybiBqYXZhV1NETFBhcmFtOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvY29tbWFuZC9UREF4aXNJbnB1dENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL2NvbW1hbmQvVERBeGlzSW5wdXRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkZWQ2ODUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvY29tbWFuZC9UREF4aXNJbnB1dENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAzMzAgMTI4ODI3ICAga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYxMDA0ICAgMTU5MzU2IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuLCBHZXQgY29ycmVjdCBtb2R1bGUgcm9vdCBVUkwgYmFzZWQgb24gc2VydmVyIGNob3NlbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQ7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuU2VydmVyQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JV2ViU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlSW5mbzsKLQotCi1wdWJsaWMgY2xhc3MgVERBeGlzSW5wdXRDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gewotCQotCXByaXZhdGUgSVdlYlNlcnZpY2Ugd3NfOwotCXByaXZhdGUgU3RyaW5nIHNlcnZlclByb2plY3RfOyAKLQotCSAgcHJpdmF0ZSBTdHJpbmcgc2VydmVyU2VydmVyXzsKLSAgICAgIHByaXZhdGUgU3RyaW5nIHNlcnZpY2VTZXJ2ZXJUeXBlSURfOyAKLQkgIHByaXZhdGUgSVNlcnZlciBzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXJfID0gbnVsbDsKLQkgIHByaXZhdGUgU3RyaW5nIHdzZGxVUklfOwotCSAgcHJpdmF0ZSBXZWJTZXJ2aWNlSW5mbyB3ZWJTZXJ2aWNlSW5mb187Ci0JICAJICAKLQkJLyoqCi0JCSogRGVmYXVsdCBDVE9SCi0JCSovCi0JCXB1YmxpYyBUREF4aXNJbnB1dENvbW1hbmQoKSB7Ci0JCX0KLQkJCi0JCXB1YmxpYyBUREF4aXNJbnB1dENvbW1hbmQoSVdlYlNlcnZpY2Ugd3MsIFN0cmluZyBwcm9qZWN0KSB7Ci0JCQl3c18gPSB3czsKLQkJCXNlcnZlclByb2plY3RfID0gcHJvamVjdDsKLQkJfQotCQkKLQkJcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApIAotCQl7CSAgICAKLQkJc2VydmVyU2VydmVyXyA9IHdzXy5nZXRXZWJTZXJ2aWNlSW5mbygpLmdldFNlcnZlckluc3RhbmNlSWQoKTsKLQotCQlTdHJpbmcgc2VydmVySW5zdGFuY2VJZCA9IHdzXy5nZXRXZWJTZXJ2aWNlSW5mbygpLmdldFNlcnZlckluc3RhbmNlSWQoKTsKLQkJU3RyaW5nIHNlcnZlckZhY3RvcnlJZCA9IHdzXy5nZXRXZWJTZXJ2aWNlSW5mbygpLmdldFNlcnZlckZhY3RvcnlJZCgpOwotCQlpZiAoc2VydmVySW5zdGFuY2VJZCAhPSBudWxsKSB7IC8vIHNlcnZlciBleGlzdHMKLQkgICAgCXNlcnZpY2VFeGlzdGluZ1NlcnZlcl8gPSBTZXJ2ZXJDb3JlLmZpbmRTZXJ2ZXIoc2VydmVySW5zdGFuY2VJZCk7Ci0JCQlpZiAoc2VydmljZUV4aXN0aW5nU2VydmVyXyAhPSBudWxsKQotCQkgICAgewotCQkgICAgICBzZXJ2aWNlU2VydmVyVHlwZUlEXyA9IHNlcnZpY2VFeGlzdGluZ1NlcnZlcl8uZ2V0U2VydmVyVHlwZSgpLmdldElkKCk7Ci0JCSAgICB9Ci0JICAgIH0KLQkgICAgZWxzZQotCSAgICB7Ci0JICAgIAlzZXJ2aWNlU2VydmVyVHlwZUlEXyA9IHNlcnZlckZhY3RvcnlJZDsKLQkgICAgfQotCQkKLQkJd3NkbFVSSV8gPSB3c18uZ2V0V2ViU2VydmljZUluZm8oKS5nZXRXc2RsVVJMKCk7Ci0JCXdlYlNlcnZpY2VJbmZvXyA9IHdzXy5nZXRXZWJTZXJ2aWNlSW5mbygpOwotCQkKLQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JICB9Ci0JICAKLQkJLyoqCi0JCSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBzZXJ2ZXJQcm9qZWN0LgotCQkgICAqLwotCQkgIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmVyUHJvamVjdCgpCi0JCSAgewotCQkJICByZXR1cm4gc2VydmVyUHJvamVjdF87Ci0JCSAgfQotCi0JCSAgcHVibGljIFN0cmluZyBnZXRTZXJ2ZXJTZXJ2ZXIoKQotCQkgIHsKLQkJICAgIHJldHVybiBzZXJ2ZXJTZXJ2ZXJfOwotCQkgIH0KLSAgICAgICAgICAKLSAgICAgICAgICBwdWJsaWMgU3RyaW5nIGdldFNlcnZpY2VTZXJ2ZXJUeXBlSUQoKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBzZXJ2aWNlU2VydmVyVHlwZUlEXzsKLSAgICAgICAgICB9ICAgICAgICAgIAotCi0JCXB1YmxpYyBTdHJpbmcgZ2V0V3NkbFVSSSgpIHsKLQkJCXJldHVybiB3c2RsVVJJXzsKLQkJfQotCi0JCXB1YmxpYyBXZWJTZXJ2aWNlSW5mbyBnZXRXZWJTZXJ2aWNlSW5mbygpIHsKLQkJCXJldHVybiB3ZWJTZXJ2aWNlSW5mb187Ci0JCX0KLQkJCi0JCXB1YmxpYyBJU2VydmVyIGdldFNlcnZpY2VFeGlzdGluZ1NlcnZlcigpCi0JCSAgewotCQkgICAgcmV0dXJuIHNlcnZpY2VFeGlzdGluZ1NlcnZlcl87Ci0JCSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9jb21tYW5kL1REQ29kZUdlbk9wZXJhdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvY29tbWFuZC9URENvZGVHZW5PcGVyYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzRhYjkxYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9jb21tYW5kL1REQ29kZUdlbk9wZXJhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDUwOSAgIDEyNTA5NCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUsIFVzZSBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24KLSAqIDIwMDYwNTE1ICAgMTE1MjI1IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwNjA1MTcgICAxNDIzMjcgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA2MTAwNCAgIDE1OTM1NiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbiwgR2V0IGNvcnJlY3QgbW9kdWxlIHJvb3QgVVJMIGJhc2VkIG9uIHNlcnZlciBjaG9zZW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5jb21tYW5kOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1hbmQuV1NETDJKYXZhQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbi5KYXZhV1NETFBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS50YXNrLkNvcHlBeGlzSmFyQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS50YXNrLlJlZnJlc2hQcm9qZWN0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS50YXNrLkJhY2t1cFNrZWxJbXBsQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS50YXNrLlNrZWxldG9uMldTRExDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VzUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VJbmZvOwotCi1wdWJsaWMgY2xhc3MgVERDb2RlR2VuT3BlcmF0aW9uIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gewotCi0JLy8gQ29weUF4aXNKYXJDb21tYW5kCi0JcHJpdmF0ZSBDb3B5QXhpc0phckNvbW1hbmQgY29weUF4aXNKYXJDb21tYW5kID0gbnVsbDsKLQkKLQkvLyBCYWNrdXBTa2VsSW1wbENvbW1hbmQKLQlwcml2YXRlIEJhY2t1cFNrZWxJbXBsQ29tbWFuZCBiYWNrdXBTa2VsSW1wbENvbW1hbmQgPSBudWxsOwotCXByaXZhdGUgV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXI7Ci0JcHJpdmF0ZSBKYXZhV1NETFBhcmFtZXRlciBqYXZhV1NETFBhcmFtOwotCXByaXZhdGUgV2ViU2VydmljZUluZm8gd2ViU2VydmljZUluZm87Ci0JCi0JLy8gV1NETDJKYXZhQ29tbWFuZAotCXByaXZhdGUgV1NETDJKYXZhQ29tbWFuZCB3c2RsMkphdmFDb21tYW5kID0gbnVsbDsKLQlwcml2YXRlIFN0cmluZyB3c2RsVVJJOwotCXByaXZhdGUgU3RyaW5nIGh0dHBCYXNpY0F1dGhVc2VybmFtZTsKLQlwcml2YXRlIFN0cmluZyBodHRwQmFzaWNBdXRoUGFzc3dvcmQ7Ci0JCi0JLy8gU2tlbGV0b24yV1NETENvbW1hbmQKLQlwcml2YXRlIFNrZWxldG9uMldTRExDb21tYW5kIHNrZWxldG9uMldTRExDb21tYW5kID0gbnVsbDsKLQlwcml2YXRlIElQcm9qZWN0IHNlcnZlclByb2plY3Q7Ci0JcHJpdmF0ZSBTdHJpbmcgc2VydmljZVNlcnZlclR5cGVJRDsKLQlwcml2YXRlIElTZXJ2ZXIgc2VydmljZUV4aXN0aW5nU2VydmVyOwotCSAgCi0JLy8gVXBkYXRlV2ViWE1MQ29tbWFuZAotCXByaXZhdGUgVXBkYXRlV0VCWE1MQ29tbWFuZCB1cGRhdGVXZWJYTUxDb21tYW5kID0gbnVsbDsKLQotCS8vIFJlZnJlc2hQcm9qZWN0Q29tbWFuZAotCXByaXZhdGUgUmVmcmVzaFByb2plY3RDb21tYW5kIHJlZnJlc2hQcm9qZWN0Q29tbWFuZCA9IG51bGw7Ci0JCi0JLyoqCi0JICogVGhpcyBjb21tYW5kIHJ1bnMgdGhlIGNvbW1hbmRzIHBhc3NlZCBieSB0aGUgY29uc3RydWN0b3IgaW4gYSBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24uCi0JICogVGhlIGNvbW1hbmRzIGFyZSBsaXN0ZWQgYWJvdmUsIHdpdGggb25seSBzb21lIG9mIHRoZWlyIGRhdGEgcmVnaXN0cnkgcGFyYW1ldGVycyBzaW5jZSBzb21lIGFwcGVhciAKLQkgKiB0byBvdmVybGFwIHRoZSBjb21tYW5kcy4KLQkgKiBAcGFyYW0gYmFja3VwU2tlbEltcGwKLQkgKiBAcGFyYW0gd3NkbDJKYXZhCi0JICogQHBhcmFtIHNrZWxldG9uMldTREwKLQkgKiBAcGFyYW0gdXBkYXRlV2ViWE1MCi0JICovCi0JcHVibGljIFREQ29kZUdlbk9wZXJhdGlvbigpIHsgCi0JCWNvcHlBeGlzSmFyQ29tbWFuZCA9IG5ldyBDb3B5QXhpc0phckNvbW1hbmQoKTsKLQkJYmFja3VwU2tlbEltcGxDb21tYW5kID0gbmV3IEJhY2t1cFNrZWxJbXBsQ29tbWFuZCgpOwotCQl3c2RsMkphdmFDb21tYW5kID0gbmV3IFdTREwySmF2YUNvbW1hbmQoKTsKLQkJc2tlbGV0b24yV1NETENvbW1hbmQgPSBuZXcgU2tlbGV0b24yV1NETENvbW1hbmQoKTsKLQkJdXBkYXRlV2ViWE1MQ29tbWFuZCA9IG5ldyBVcGRhdGVXRUJYTUxDb21tYW5kKCk7Ci0JCXJlZnJlc2hQcm9qZWN0Q29tbWFuZCA9IG5ldyBSZWZyZXNoUHJvamVjdENvbW1hbmQoKTsKLQl9Ci0JCi0JcHVibGljIElTdGF0dXMgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgaW5mbykgewotCQlJRW52aXJvbm1lbnQgZW52ID0gZ2V0RW52aXJvbm1lbnQoKTsKLQkJVG9wRG93bldTTW9kaWZ5T3BlcmF0aW9uIHRkT3BlcmF0aW9uID0gbmV3IFRvcERvd25XU01vZGlmeU9wZXJhdGlvbihpbmZvLCBlbnYpOwotCQl0cnkgewotCQkJdGRPcGVyYXRpb24uZXhlY3V0ZShtb25pdG9yKTsKLQkJfQotCQljYXRjaChDb3JlRXhjZXB0aW9uIGNlKXsKLQkJCUlTdGF0dXMgc3RhdHVzID0gY2UuZ2V0U3RhdHVzKCk7Ci0JCQlyZXR1cm4gc3RhdHVzOwotCQl9Ci0JCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCX0KLQkKLQkKLQkKLQlwcml2YXRlIGNsYXNzIFRvcERvd25XU01vZGlmeU9wZXJhdGlvbiBleHRlbmRzIFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiB7Ci0KLQkJcHJpdmF0ZSBJQWRhcHRhYmxlIGluZm8gPSBudWxsOwotCQlwcml2YXRlIElFbnZpcm9ubWVudCBlbnYgPSBudWxsOwotCQkKLQkJcHJvdGVjdGVkIFRvcERvd25XU01vZGlmeU9wZXJhdGlvbihJQWRhcHRhYmxlIGFkYXB0YWJsZSwgSUVudmlyb25tZW50IGVudmlyb25tZW50KXsKLQkJCWluZm8gPSBhZGFwdGFibGU7Ci0JCQllbnYgPSBlbnZpcm9ubWVudDsKLQkJfQotCQkKLQkJcHJvdGVjdGVkIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQotCQkJSVN0YXR1cyBzdGF0dXMgPSBudWxsOwotCQkJCi0JCSAgICAvLyBDb3B5QXhpc0phckNvbW1hbmQKLQkJICAgIGNvcHlBeGlzSmFyQ29tbWFuZC5zZXRFbnZpcm9ubWVudChlbnYpOwotCQkgICAgY29weUF4aXNKYXJDb21tYW5kLnNldFByb2plY3Qoc2VydmVyUHJvamVjdCk7Ci0JCSAgICBzdGF0dXMgPSBjb3B5QXhpc0phckNvbW1hbmQuZXhlY3V0ZShtb25pdG9yLCBpbmZvKTsKLQkJICAgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpewotCQkgICAgCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKHN0YXR1cyk7Ci0JCSAgICB9Ci0JCQkKLQkJCS8vIGJhY2t1cFNrZWxJbXBsQ29tbWFuZAotCQkJYmFja3VwU2tlbEltcGxDb21tYW5kLnNldEVudmlyb25tZW50KGVudik7Ci0JCQliYWNrdXBTa2VsSW1wbENvbW1hbmQuc2V0V2ViU2VydmljZXNQYXJzZXIod2ViU2VydmljZXNQYXJzZXIpOwotCQkJYmFja3VwU2tlbEltcGxDb21tYW5kLnNldEphdmFXU0RMUGFyYW0oamF2YVdTRExQYXJhbSk7Ci0JCQliYWNrdXBTa2VsSW1wbENvbW1hbmQuc2V0V2ViU2VydmljZUluZm8od2ViU2VydmljZUluZm8pOwotCQkJc3RhdHVzID0gYmFja3VwU2tlbEltcGxDb21tYW5kLmV4ZWN1dGUobW9uaXRvciwgaW5mbyk7Ci0JCQlpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKSB7Ci0JCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24oc3RhdHVzKTsKLQkJCX0KLQotCQkJLy8gd3NkbDJKYXZhQ29tbWFuZAotCQkJd3NkbDJKYXZhQ29tbWFuZC5zZXRFbnZpcm9ubWVudChlbnYpOwotCQkJd3NkbDJKYXZhQ29tbWFuZC5zZXRXc2RsVVJJKHdzZGxVUkkpOwotCQkJd3NkbDJKYXZhQ29tbWFuZC5zZXRIdHRwQmFzaWNBdXRoVXNlcm5hbWUoaHR0cEJhc2ljQXV0aFVzZXJuYW1lKTsKLQkJCXdzZGwySmF2YUNvbW1hbmQuc2V0SHR0cEJhc2ljQXV0aFBhc3N3b3JkKGh0dHBCYXNpY0F1dGhQYXNzd29yZCk7Ci0JCQl3c2RsMkphdmFDb21tYW5kLnNldEphdmFXU0RMUGFyYW0oamF2YVdTRExQYXJhbSk7Ci0JCQlzdGF0dXMgPSB3c2RsMkphdmFDb21tYW5kLmV4ZWN1dGUobW9uaXRvciwgaW5mbyk7Ci0JCQlpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKSB7Ci0JCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24oc3RhdHVzKTsKLQkJCX0KLQkJCWphdmFXU0RMUGFyYW0gPSB3c2RsMkphdmFDb21tYW5kLmdldEphdmFXU0RMUGFyYW0oKTsKLQkJCQotCQkJLy8gU2tlbGV0b24yV1NETENvbW1hbmQKLQkJCXNrZWxldG9uMldTRExDb21tYW5kLnNldEVudmlyb25tZW50KGVudik7Ci0JCQlza2VsZXRvbjJXU0RMQ29tbWFuZC5zZXRXZWJTZXJ2aWNlc1BhcnNlcih3ZWJTZXJ2aWNlc1BhcnNlcik7Ci0JCQlza2VsZXRvbjJXU0RMQ29tbWFuZC5zZXRKYXZhV1NETFBhcmFtKGphdmFXU0RMUGFyYW0pOwotCQkJc2tlbGV0b24yV1NETENvbW1hbmQuc2V0U2VydmVyUHJvamVjdChzZXJ2ZXJQcm9qZWN0KTsKLQkJCXNrZWxldG9uMldTRExDb21tYW5kLnNldFNlcnZpY2VTZXJ2ZXJUeXBlSUQoc2VydmljZVNlcnZlclR5cGVJRCk7Ci0JCQlza2VsZXRvbjJXU0RMQ29tbWFuZC5zZXRTZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIoc2VydmljZUV4aXN0aW5nU2VydmVyKTsKLQkJCXN0YXR1cyA9IHNrZWxldG9uMldTRExDb21tYW5kLmV4ZWN1dGUobW9uaXRvciwgaW5mbyk7Ci0JCQlpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKSB7Ci0JCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24oc3RhdHVzKTsKLQkJCX0KLQkJCXdzZGxVUkkgPSBza2VsZXRvbjJXU0RMQ29tbWFuZC5nZXRXc2RsVVJJKCk7Ci0JCQotCQkJLy8gVXBkYXRlV2ViWE1MQ29tbWFuZAotCQkJdXBkYXRlV2ViWE1MQ29tbWFuZC5zZXRFbnZpcm9ubWVudChlbnYpOwotCQkJdXBkYXRlV2ViWE1MQ29tbWFuZC5zZXRTZXJ2ZXJQcm9qZWN0KHNlcnZlclByb2plY3QpOwotCQkJc3RhdHVzID0gdXBkYXRlV2ViWE1MQ29tbWFuZC5leGVjdXRlKG1vbml0b3IsIGluZm8pOwotCQkJaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikgewotCQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKHN0YXR1cyk7Ci0JCQl9Ci0JCQkKLQkJCS8vIFJlZnJlc2hQcm9qZWN0Q29tbWFuZAotCQkJcmVmcmVzaFByb2plY3RDb21tYW5kLnNldEVudmlyb25tZW50KGVudik7Ci0JCQlyZWZyZXNoUHJvamVjdENvbW1hbmQuc2V0UHJvamVjdChzZXJ2ZXJQcm9qZWN0KTsKLQkJCXN0YXR1cyA9IHJlZnJlc2hQcm9qZWN0Q29tbWFuZC5leGVjdXRlKG1vbml0b3IsIGluZm8pOwotCQkJaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikgewotCQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKHN0YXR1cyk7Ci0JCQl9Ci0JCQkKLQkJfQotCQotCX0KLQotCi0KLQlwdWJsaWMgSmF2YVdTRExQYXJhbWV0ZXIgZ2V0SmF2YVdTRExQYXJhbSgpIHsKLQkJcmV0dXJuIGphdmFXU0RMUGFyYW07Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0SmF2YVdTRExQYXJhbShKYXZhV1NETFBhcmFtZXRlciBqYXZhV1NETFBhcmFtKSB7Ci0JCXRoaXMuamF2YVdTRExQYXJhbSA9IGphdmFXU0RMUGFyYW07Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0V2ViU2VydmljZUluZm8oV2ViU2VydmljZUluZm8gd2ViU2VydmljZUluZm8pIHsKLQkJdGhpcy53ZWJTZXJ2aWNlSW5mbyA9IHdlYlNlcnZpY2VJbmZvOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VzUGFyc2VyKFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyKSB7Ci0JCXRoaXMud2ViU2VydmljZXNQYXJzZXIgPSB3ZWJTZXJ2aWNlc1BhcnNlcjsKLQl9Ci0JCi0JLyoqCi0JICogQHBhcmFtIGh0dHBCYXNpY0F1dGhQYXNzd29yZAotCSAqICAgICAgICAgICAgVGhlIGh0dHBCYXNpY0F1dGhQYXNzd29yZCB0byBzZXQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0SHR0cEJhc2ljQXV0aFBhc3N3b3JkKFN0cmluZyBodHRwQmFzaWNBdXRoUGFzc3dvcmQpIHsKLQkJdGhpcy5odHRwQmFzaWNBdXRoUGFzc3dvcmQgPSBodHRwQmFzaWNBdXRoUGFzc3dvcmQ7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGh0dHBCYXNpY0F1dGhVc2VybmFtZQotCSAqICAgICAgICAgICAgVGhlIGh0dHBCYXNpY0F1dGhVc2VybmFtZSB0byBzZXQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0SHR0cEJhc2ljQXV0aFVzZXJuYW1lKFN0cmluZyBodHRwQmFzaWNBdXRoVXNlcm5hbWUpIHsKLQkJdGhpcy5odHRwQmFzaWNBdXRoVXNlcm5hbWUgPSBodHRwQmFzaWNBdXRoVXNlcm5hbWU7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0V3NkbFVSSShTdHJpbmcgd3NkbFVSSSkgewotCQl0aGlzLndzZGxVUkkgPSB3c2RsVVJJOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0V3NkbFVSSSgpIHsKLQkJcmV0dXJuIHdzZGxVUkk7Ci0JfQotCQotCS8qKgotCSAqIEBwYXJhbSBzZXJ2ZXJQcm9qZWN0IFRoZSBzZXJ2ZXJQcm9qZWN0IHRvIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJQcm9qZWN0KElQcm9qZWN0IHNlcnZlclByb2plY3QpIHsKLQkgIHRoaXMuc2VydmVyUHJvamVjdCA9IHNlcnZlclByb2plY3Q7Ci0JfQotCQkgIAotCXB1YmxpYyB2b2lkIHNldFNlcnZpY2VTZXJ2ZXJUeXBlSUQoU3RyaW5nIGlkKSB7Ci0JICB0aGlzLnNlcnZpY2VTZXJ2ZXJUeXBlSUQgPSBpZDsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0U2VydmljZUV4aXN0aW5nU2VydmVyKElTZXJ2ZXIgc2VydmVyKSB7Ci0JCSAgdGhpcy5zZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIgPSBzZXJ2ZXI7Ci0JCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvY29tbWFuZC9VcGRhdGVXRUJYTUxDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9jb21tYW5kL1VwZGF0ZVdFQlhNTENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGVmZWE2Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9jb21tYW5kL1VwZGF0ZVdFQlhNTENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA1MTUgICAxMTUyMjUgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA3MDUyOCAgIDE4NjA1NiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQ7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLm1vZGVsLklNb2RlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLm1vZGVsLk1vZGVsUHJvdmlkZXJNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYmFwcGxpY2F0aW9uLlNlcnZsZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2ViYXBwbGljYXRpb24uU2VydmxldE1hcHBpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2ViYXBwbGljYXRpb24uU2VydmxldFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2ViYXBwbGljYXRpb24uV2ViQXBwOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYmFwcGxpY2F0aW9uLldlYmFwcGxpY2F0aW9uRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuamF2YWVlLmNvcmUuRGlzcGxheU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmphdmFlZS5jb3JlLkphdmFlZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmphdmFlZS5jb3JlLlVybFBhdHRlcm5UeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qYXZhZWUud2ViLldlYkZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuQXhpc0NyZWF0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotcHVibGljIGNsYXNzIFVwZGF0ZVdFQlhNTENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiB7Ci0KLQlwcml2YXRlIElQcm9qZWN0IHNlcnZlclByb2plY3Q7Ci0KLSAgcHVibGljIFVwZGF0ZVdFQlhNTENvbW1hbmQoICkKLSAgewotICB9Ci0KLQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkgCi0JewotCQlJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQgPSBnZXRFbnZpcm9ubWVudCgpOwotCQlpZiAoc2VydmVyUHJvamVjdCAhPSBudWxsKSB7Ci0JCQlJU3RhdHVzIHN0YXR1cyA9IG51bGw7Ci0JCQlzdGF0dXMgPSBhZGRTZXJ2bGV0KHNlcnZlclByb2plY3QsIGdldEF4aXNTZXJ2bGV0RGVzY3JpcHRvcigpKTsKLQkJCWlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpIHsKLQkJCQllbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJCQlyZXR1cm4gc3RhdHVzOwotCQkJfQotCQkJYWRkU2VydmxldChzZXJ2ZXJQcm9qZWN0LCBnZXRBZG1pbnRTZXJ2bGV0RGVzY3JpcHRvcigpKTsKLQkJCWlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpIHsKLQkJCQllbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJCQlyZXR1cm4gc3RhdHVzOwotCQkJfQotCQl9Ci0JCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCX0KLQotCXByaXZhdGUgU2VydmxldERlc2NyaXB0b3IgZ2V0QXhpc1NlcnZsZXREZXNjcmlwdG9yKCkgewotCi0JCVNlcnZsZXREZXNjcmlwdG9yIHNkID0gbmV3IFNlcnZsZXREZXNjcmlwdG9yKCk7Ci0JCXNkLl9uYW1lID0gIkF4aXNTZXJ2bGV0IjsgLy8kTk9OLU5MUy0xJAotCQlzZC5fZGlzcGxheU5hbWUgPSAiQXBhY2hlLUF4aXMgU2VydmxldCI7IC8vJE5PTi1OTFMtMSQKLQkJc2QuX2NsYXNzTmFtZSA9ICJvcmcuYXBhY2hlLmF4aXMudHJhbnNwb3J0Lmh0dHAuQXhpc1NlcnZsZXQiOyAvLyROT04tTkxTLTEkCi0JCXNkLl9tYXBwaW5ncyA9IG5ldyBTdHJpbmdbXSB7ICIvc2VydmxldC9BeGlzU2VydmxldCIsIC8vJE5PTi1OTFMtMSQKLQkJCQkJCQkJCQkiKi5qd3MiLCAvLyROT04tTkxTLTEkCi0JCQkJCQkJCQkJIi9zZXJ2aWNlcy8qIiB9OyAvLyROT04tTkxTLTEkCi0JCXJldHVybiBzZDsKLQl9Ci0KLQlwcml2YXRlIFNlcnZsZXREZXNjcmlwdG9yIGdldEFkbWludFNlcnZsZXREZXNjcmlwdG9yKCkgewotCQlTZXJ2bGV0RGVzY3JpcHRvciBzZCA9IG5ldyBTZXJ2bGV0RGVzY3JpcHRvcigpOwotCQlzZC5fbmFtZSA9ICJBZG1pblNlcnZsZXQiOyAvLyROT04tTkxTLTEkCi0JCXNkLl9kaXNwbGF5TmFtZSA9ICJBeGlzIEFkbWluIFNlcnZsZXQiOyAvLyROT04tTkxTLTEkCi0JCXNkLl9jbGFzc05hbWUgPSAib3JnLmFwYWNoZS5heGlzLnRyYW5zcG9ydC5odHRwLkFkbWluU2VydmxldCI7IC8vJE5PTi1OTFMtMSQKLQkJc2QuX21hcHBpbmdzID0gbmV3IFN0cmluZ1tdIHsgIi9zZXJ2bGV0L0FkbWluU2VydmxldCIgfTsgLy8kTk9OLU5MUy0xJAotCQlzZC5fbG9hZE9uU3RhcnR1cCA9IG5ldyBJbnRlZ2VyKDEwMCk7Ci0JCXJldHVybiBzZDsKLQl9Ci0JCi0JcHVibGljIElTdGF0dXMgYWRkU2VydmxldChmaW5hbCBJUHJvamVjdCB3ZWJQcm9qZWN0LCBmaW5hbCBTZXJ2bGV0RGVzY3JpcHRvciBzZXJ2bGV0RGVzY3JpcHRvcikgewotCQotCQl0cnkgewotCQkJCi0JCQlmaW5hbCBJTW9kZWxQcm92aWRlciBwcm92aWRlciA9IE1vZGVsUHJvdmlkZXJNYW5hZ2VyLmdldE1vZGVsUHJvdmlkZXIod2ViUHJvamVjdCk7Ci0JCQkKLQkJCXByb3ZpZGVyLm1vZGlmeShuZXcgUnVubmFibGUoKSB7Ci0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlPYmplY3Qgb2JqZWN0ID0gcHJvdmlkZXIuZ2V0TW9kZWxPYmplY3QoKTsKLQkJCQkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIG9yZy5lY2xpcHNlLmpzdC5qYXZhZWUud2ViLldlYkFwcCkgewotCQkJCQkJb3JnLmVjbGlwc2UuanN0LmphdmFlZS53ZWIuV2ViQXBwIGphdmFlZVdlYkFwcCA9IChvcmcuZWNsaXBzZS5qc3QuamF2YWVlLndlYi5XZWJBcHApIG9iamVjdDsKLQkJCQkJCWFkZEphdmFlZVNlcnZsZXQod2ViUHJvamVjdCwgc2VydmxldERlc2NyaXB0b3IsIGphdmFlZVdlYkFwcCk7Ci0JCQkJCX0gZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2Ygb3JnLmVjbGlwc2UuanN0LmoyZWUud2ViYXBwbGljYXRpb24uV2ViQXBwKSB7Ci0JCQkJCQlXZWJBcHAgd2ViQXBwID0gKFdlYkFwcCkgb2JqZWN0OwotCQkJCQkJYWRkU2VydmxldCh3ZWJQcm9qZWN0LCBzZXJ2bGV0RGVzY3JpcHRvciwgd2ViQXBwKTsKLQkJCQkJfQotCQkJCQkKLQkJCQl9Ci0JCQl9Ci0JCQkJLCBudWxsKTsKLQotCQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQotCQlyZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoCi0JCQkJQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfVVBEQVRFX1dFQl9YTUwsCi0JCQkJZSk7Ci0JfQotCX0KLQotCXByaXZhdGUgdm9pZCBhZGRTZXJ2bGV0KElQcm9qZWN0IHdlYlByb2plY3QsIFNlcnZsZXREZXNjcmlwdG9yIHNlcnZsZXREZXNjcmlwdG9yLCBXZWJBcHAgd2ViYXBwKSB7Ci0KLQkJTGlzdCB0aGVTZXJ2bGV0cyA9IHdlYmFwcC5nZXRTZXJ2bGV0cygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHRoZVNlcnZsZXRzLnNpemUoKTsgaSsrKSB7Ci0JCQlTZXJ2bGV0IGFTZXJ2bGV0ID0gKFNlcnZsZXQpIHRoZVNlcnZsZXRzLmdldChpKTsKLQkJCWlmIChhU2VydmxldC5nZXRTZXJ2bGV0TmFtZSgpLmVxdWFscyhzZXJ2bGV0RGVzY3JpcHRvci5fbmFtZSkpIHsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQotCQlXZWJhcHBsaWNhdGlvbkZhY3RvcnkgZmFjdG9yeSA9IFdlYmFwcGxpY2F0aW9uRmFjdG9yeS5lSU5TVEFOQ0U7Ci0KLQkJU2VydmxldCBzZXJ2bGV0ID0gZmFjdG9yeS5jcmVhdGVTZXJ2bGV0KCk7Ci0JCVNlcnZsZXRUeXBlIHNlcnZsZXRUeXBlID0gZmFjdG9yeS5jcmVhdGVTZXJ2bGV0VHlwZSgpOwotCQlzZXJ2bGV0LnNldFdlYlR5cGUoc2VydmxldFR5cGUpOwotCQlzZXJ2bGV0LnNldFNlcnZsZXROYW1lKHNlcnZsZXREZXNjcmlwdG9yLl9uYW1lKTsKLQkJc2VydmxldFR5cGUuc2V0Q2xhc3NOYW1lKHNlcnZsZXREZXNjcmlwdG9yLl9jbGFzc05hbWUpOwotCQlpZihzZXJ2bGV0RGVzY3JpcHRvci5fZGlzcGxheU5hbWUgIT0gbnVsbCl7Ci0JCQlzZXJ2bGV0LnNldERpc3BsYXlOYW1lKHNlcnZsZXREZXNjcmlwdG9yLl9kaXNwbGF5TmFtZSk7Ci0JCX0KLQkJaWYoc2VydmxldERlc2NyaXB0b3IuX2xvYWRPblN0YXJ0dXAgIT0gbnVsbCl7Ci0JCQlzZXJ2bGV0LnNldExvYWRPblN0YXJ0dXAoc2VydmxldERlc2NyaXB0b3IuX2xvYWRPblN0YXJ0dXApOwotCQl9Ci0JCWlmKHNlcnZsZXREZXNjcmlwdG9yLl9wYXJhbXMgIT0gbnVsbCl7Ci0JCQlQcm9wZXJ0aWVzIHByb3BlcnRpZXMgPSBzZXJ2bGV0LmdldFBhcmFtc0FzUHJvcGVydGllcygpOwotCQkJcHJvcGVydGllcy5wdXRBbGwoc2VydmxldERlc2NyaXB0b3IuX3BhcmFtcyk7Ci0JCX0KLQkJd2ViYXBwLmdldFNlcnZsZXRzKCkuYWRkKHNlcnZsZXQpOwotCi0JCWlmKHNlcnZsZXREZXNjcmlwdG9yLl9tYXBwaW5ncyAhPSBudWxsKXsKLQkJCWZvcihpbnQgaT0wOyBpPHNlcnZsZXREZXNjcmlwdG9yLl9tYXBwaW5ncy5sZW5ndGg7IGkrKyl7Ci0JCQkJU2VydmxldE1hcHBpbmcgc2VydmxldE1hcHBpbmcgPSBmYWN0b3J5LmNyZWF0ZVNlcnZsZXRNYXBwaW5nKCk7Ci0JCQkJc2VydmxldE1hcHBpbmcuc2V0U2VydmxldChzZXJ2bGV0KTsKLQkJCQlzZXJ2bGV0TWFwcGluZy5zZXRVcmxQYXR0ZXJuKHNlcnZsZXREZXNjcmlwdG9yLl9tYXBwaW5nc1tpXSk7Ci0JCQkJd2ViYXBwLmdldFNlcnZsZXRNYXBwaW5ncygpLmFkZChzZXJ2bGV0TWFwcGluZyk7CQkJCQkKLQkJCX0KLQkJfQotCX0KLQkKLQlwcml2YXRlIHZvaWQgYWRkSmF2YWVlU2VydmxldChJUHJvamVjdCB3ZWJQcm9qZWN0LCBTZXJ2bGV0RGVzY3JpcHRvciBzZXJ2bGV0RGVzY3JpcHRvciwgb3JnLmVjbGlwc2UuanN0LmphdmFlZS53ZWIuV2ViQXBwIHdlYmFwcCkgewotCi0JCUxpc3QgdGhlU2VydmxldHMgPSB3ZWJhcHAuZ2V0U2VydmxldHMoKTsKLQkgICBmb3IgKGludCBpID0gMDsgaSA8IHRoZVNlcnZsZXRzLnNpemUoKTsgaSsrKSB7Ci0JCW9yZy5lY2xpcHNlLmpzdC5qYXZhZWUud2ViLlNlcnZsZXQgYVNlcnZsZXQgPSAob3JnLmVjbGlwc2UuanN0LmphdmFlZS53ZWIuU2VydmxldCkgdGhlU2VydmxldHMuZ2V0KGkpOwotCQlpZiAoYVNlcnZsZXQuZ2V0U2VydmxldE5hbWUoKS5lcXVhbHMoc2VydmxldERlc2NyaXB0b3IuX25hbWUpKSB7Ci0JCQlyZXR1cm47Ci0JCSB9Ci0JICAgfQotCSAgIAotCSAgIFdlYkZhY3RvcnkgZmFjdG9yeSA9IFdlYkZhY3RvcnkuZUlOU1RBTkNFOwotCi0JICAgb3JnLmVjbGlwc2UuanN0LmphdmFlZS53ZWIuU2VydmxldCBzZXJ2bGV0ID0gZmFjdG9yeS5jcmVhdGVTZXJ2bGV0KCk7Ci0KLQkgICBzZXJ2bGV0LnNldFNlcnZsZXROYW1lKHNlcnZsZXREZXNjcmlwdG9yLl9uYW1lKTsKLQkgICBzZXJ2bGV0LnNldFNlcnZsZXRDbGFzcyhzZXJ2bGV0RGVzY3JpcHRvci5fY2xhc3NOYW1lKTsKLQkgICAKLQkgICBpZihzZXJ2bGV0RGVzY3JpcHRvci5fZGlzcGxheU5hbWUgIT0gbnVsbCl7Ci0JCSAgIERpc3BsYXlOYW1lIGRpc3BsYXlOYW1lT2JqID0gSmF2YWVlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRGlzcGxheU5hbWUoKTsKLQkJCWRpc3BsYXlOYW1lT2JqLnNldFZhbHVlKHNlcnZsZXREZXNjcmlwdG9yLl9kaXNwbGF5TmFtZSk7Ci0JCQlzZXJ2bGV0LmdldERpc3BsYXlOYW1lcygpLmFkZChkaXNwbGF5TmFtZU9iaik7ICAKLQkgICB9Ci0JICAgaWYoc2VydmxldERlc2NyaXB0b3IuX2xvYWRPblN0YXJ0dXAgIT0gbnVsbCl7Ci0JCSAgc2VydmxldC5zZXRMb2FkT25TdGFydHVwKHNlcnZsZXREZXNjcmlwdG9yLl9sb2FkT25TdGFydHVwKTsKLQkgICB9Ci0vLwkgICBpZihzZXJ2bGV0RGVzY3JpcHRvci5fcGFyYW1zICE9IG51bGwpewotLy8JCSAgUHJvcGVydGllcyBwcm9wZXJ0aWVzID0gc2VydmxldC5nZXRQYXJhbXNBc1Byb3BlcnRpZXMoKTsKLS8vCQkgIHByb3BlcnRpZXMucHV0QWxsKHNlcnZsZXREZXNjcmlwdG9yLl9wYXJhbXMpOwotLy8JICAgfQotCSAgIHdlYmFwcC5nZXRTZXJ2bGV0cygpLmFkZChzZXJ2bGV0KTsKLQkKLQkgICBpZihzZXJ2bGV0RGVzY3JpcHRvci5fbWFwcGluZ3MgIT0gbnVsbCl7Ci0JCSAgZm9yKGludCBpPTA7IGk8c2VydmxldERlc2NyaXB0b3IuX21hcHBpbmdzLmxlbmd0aDsgaSsrKXsKLQkJCW9yZy5lY2xpcHNlLmpzdC5qYXZhZWUud2ViLlNlcnZsZXRNYXBwaW5nIHNlcnZsZXRNYXBwaW5nID0gZmFjdG9yeS5jcmVhdGVTZXJ2bGV0TWFwcGluZygpOwkJCQotCQkJc2VydmxldE1hcHBpbmcuc2V0U2VydmxldE5hbWUoc2VydmxldC5nZXRTZXJ2bGV0TmFtZSgpKTsKLQkJCVVybFBhdHRlcm5UeXBlIHVybCA9IEphdmFlZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVVybFBhdHRlcm5UeXBlKCk7Ci0JCQl1cmwuc2V0VmFsdWUoc2VydmxldERlc2NyaXB0b3IuX21hcHBpbmdzW2ldKTsKLQkJCXNlcnZsZXRNYXBwaW5nLmdldFVybFBhdHRlcm5zKCkuYWRkKHVybCk7Ci0JCQl3ZWJhcHAuZ2V0U2VydmxldE1hcHBpbmdzKCkuYWRkKHNlcnZsZXRNYXBwaW5nKTsJCQkJCQotCQkgIH0KLQkgICB9Ci19Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJQcm9qZWN0KElQcm9qZWN0IHNlcnZlclByb2plY3QpCi0gIHsKLSAgICB0aGlzLnNlcnZlclByb2plY3QgPSBzZXJ2ZXJQcm9qZWN0OwotICB9Ci0KLQlwdWJsaWMgY2xhc3MgU2VydmxldERlc2NyaXB0b3IgewotCQlTdHJpbmcgX25hbWU7Ci0JCVN0cmluZyBfY2xhc3NOYW1lOwotCQlTdHJpbmcgX2Rpc3BsYXlOYW1lOwotCQlNYXAgX3BhcmFtczsKLQkJU3RyaW5nW10gX21hcHBpbmdzOwotCQlJbnRlZ2VyIF9sb2FkT25TdGFydHVwOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvY29tbWFuZC9WYWxpZGF0ZVdTSUNvbXBsaWFuY2VDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9jb21tYW5kL1ZhbGlkYXRlV1NJQ29tcGxpYW5jZUNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2U1NjM1Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9jb21tYW5kL1ZhbGlkYXRlV1NJQ29tcGxpYW5jZUNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDYwNyAgIDE0NDk3OCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZDsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLkF4aXNDcmVhdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzLlBlcnNpc3RlbnRXU0lDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5XU0lDb21wbGlhbmNlVXRpbHM7Ci0KLQotcHVibGljIGNsYXNzIFZhbGlkYXRlV1NJQ29tcGxpYW5jZUNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotICAgcHJpdmF0ZSBKYXZhV1NETFBhcmFtZXRlciBqYXZhV1NETFBhcmFtID0gbnVsbDsKLSAgIHByaXZhdGUgVmVjdG9yIHN0YXR1cyA9IG51bGw7Ci0gICBwcml2YXRlIElQcm9qZWN0IHNlcnZpY2VQcm9qZWN0XyA9IG51bGw7Ci0KLSAgIHB1YmxpYyBWYWxpZGF0ZVdTSUNvbXBsaWFuY2VDb21tYW5kKCkgewotICB9Ci0KLSAgIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUgKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUpCi0gIHsKLSAKLQkgICBJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQgPSBnZXRFbnZpcm9ubWVudCgpOwotCi0JICAgaWYgKGphdmFXU0RMUGFyYW0gPT0gbnVsbCkgewotCQkgICBJU3RhdHVzIHNpbXBsZVN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBBeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMuTVNHX0VSUk9SX0pBVkFfV1NETF9QQVJBTV9OT1RfU0VUKTsKLQkJICAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHNpbXBsZVN0YXR1cyk7Ci0JCSAgIHJldHVybiBzaW1wbGVTdGF0dXM7Ci0JICAgfQkJCi0JCi0gICAgc3RhdHVzID0gbmV3IFZlY3RvcigpOwotICAgIAotICAgIFBlcnNpc3RlbnRXU0lDb250ZXh0IHdzaUNvbnRleHQgPSBuZXcgUGVyc2lzdGVudFdTSUNvbnRleHQoKTsKLSAgICBpbnQgc2V2ZXJpdHkgPSBXU0lDb21wbGlhbmNlVXRpbHMuZ2V0V1NJU2V2ZXJpdHkoc2VydmljZVByb2plY3RfLCB3c2lDb250ZXh0KTsKLSAgICBjaGVja1JQQ0VuY29kZWQoc2V2ZXJpdHkpOwotICAgIFN0YXR1c1tdIHN0YXR1c2VzID0gKFN0YXR1c1tdKSBzdGF0dXMudG9BcnJheShuZXcgU3RhdHVzW3N0YXR1cy5zaXplKCldKTsKLQotICAgIGlmIChzdGF0dXNlcy5sZW5ndGggPT0gMCB8fAotICAgIAkJV1NJQ29tcGxpYW5jZVV0aWxzLmNoZWNrV1NJQ29tcGxpYW5jZSAoZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLCBzdGF0dXNlcywgc2VydmljZVByb2plY3RfLCB3c2lDb250ZXh0KSkKLSAgICAJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgZWxzZSB7Ci0gICAgCXJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cygiIik7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNoZWNrUlBDRW5jb2RlZChpbnQgc2V2ZXJpdHkpCi0gIHsKLSAgCQlpZiAoSmF2YVdTRExQYXJhbWV0ZXIuU1RZTEVfUlBDLmVxdWFscyhqYXZhV1NETFBhcmFtLmdldFN0eWxlKCkpICYmIAotICAJCSAgIEphdmFXU0RMUGFyYW1ldGVyLlVTRV9FTkNPREVELmVxdWFscyhqYXZhV1NETFBhcmFtLmdldFVzZSgpKSkKLSAgCQkgICBzdGF0dXMuYWRkIChuZXcgU3RhdHVzKHNldmVyaXR5LCAiVmFsaWRhdGVXU0lDb21wbGlhbmNlQ29tbWFuZCIsIDAsIAotICAJCQkJIEF4aXNDcmVhdGlvblVJTWVzc2FnZXMuV1NJX0lOQ09NUExJQU5DRV9SUENfRU5DT0RFRCwgbnVsbCkpOwotCi0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWVzc2FnZSBzdHJpbmcgaWRlbnRpZmllZCBieSB0aGUgZ2l2ZW4ga2V5IGZyb20KLSAgICogcGx1Z2luLnByb3BlcnRpZXMuCi0gICAqIEByZXR1cm4gVGhlIFN0cmluZyBtZXNzYWdlLgotICAgKi8KLQotLyoqCi0gKiBAcGFyYW0gamF2YVdTRExQYXJhbSBUaGUgamF2YVdTRExQYXJhbSB0byBzZXQuCi0gKiBAdG9kbyBHZW5lcmF0ZWQgY29tbWVudAotICovCi1wdWJsaWMgdm9pZCBzZXRKYXZhV1NETFBhcmFtKEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW0pIHsKLQl0aGlzLmphdmFXU0RMUGFyYW0gPSBqYXZhV1NETFBhcmFtOwotfQotCi0vKioKLSAqIEBwYXJhbSBzZXJ2aWNlUHJvamVjdF8gVGhlIHNlcnZpY2VQcm9qZWN0XyB0byBzZXQuCi0gKiBAdG9kbyBHZW5lcmF0ZWQgY29tbWVudAotICovCi1wdWJsaWMgdm9pZCBzZXRTZXJ2aWNlUHJvamVjdChJUHJvamVjdCBzZXJ2aWNlUHJvamVjdF8pIHsKLQl0aGlzLnNlcnZpY2VQcm9qZWN0XyA9IHNlcnZpY2VQcm9qZWN0XzsKLX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3BsdWdpbi9XZWJTZXJ2aWNlQXhpc0NyZWF0aW9uVUlQbHVnaW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3BsdWdpbi9XZWJTZXJ2aWNlQXhpc0NyZWF0aW9uVUlQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFkZGQyYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS9wbHVnaW4vV2ViU2VydmljZUF4aXNDcmVhdGlvblVJUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDI0ICAgMTE1NjkwIHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLnBsdWdpbjsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5JUHJlZmVyZW5jZVN0b3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuRW52aXJvbm1lbnRTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUxvZzsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0qIFRoaXMgaXMgdGhlIHBsdWdpbiBjbGFzcyBmb3IgdGhlIFdlYiBTZXJ2aWNlcyBwbHVnaW4uCi0qIDxwPgotKiBUaGlzIHBsdWdpbiBjb250YWlucyB0aGUgZ3JhcGhpYyB1c2VyIGludGVyZmFjZSB0byB0aGUKLSogV2ViIFNlcnZpY2VzIHJ1bnRpbWUgZm91bmQgaW4gb3JnLmVjbGlwc2UuanN0LndzLgotKi8KLXB1YmxpYyBjbGFzcyBXZWJTZXJ2aWNlQXhpc0NyZWF0aW9uVUlQbHVnaW4gZXh0ZW5kcyBBYnN0cmFjdFVJUGx1Z2luCi17Ci0KLSAgLyoqCi0gICogVGhlIGlkZW50aWZpZXIgb2YgdGhlIGRlc2NyaXB0b3Igb2YgdGhpcyBwbHVnaW4gaW4gcGx1Z2luLnhtbC4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSUQgPSAib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkiOwkvLyROT04tTkxTLTEkCi0KLSAgLyoqCi0gICogVGhlIHJlZmVyZW5jZSB0byB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgcGx1Z2luLgotICAqLwotICBwcml2YXRlIHN0YXRpYyBXZWJTZXJ2aWNlQXhpc0NyZWF0aW9uVUlQbHVnaW4gaW5zdGFuY2VfOwotICBwcml2YXRlIElMb2cgbG9nXzsKLQotICAvKioKLSAgKiBDb25zdHJ1Y3RzIGEgcnVudGltZSBwbHVnaW4gb2JqZWN0IGZvciB0aGlzIHBsdWdpbi4KLSAgKiBUaGUgInBsdWdpbiIgZWxlbWVudCBpbiBwbHVnaW4ueG1sIHNob3VsZCBpbmNsdWRlIHRoZSBhdHRyaWJ1dGUKLSAgKiBjbGFzcyA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkucGx1Z2luLldlYlNlcnZpY2VQbHVnaW4iLgotICAqIEBwYXJhbSBkZXNjcmlwdG9yIFRoZSBkZXNjcmlwdG9yIG9mIHRoaXMgcGx1Z2luLgotICAqLwotICBwdWJsaWMgV2ViU2VydmljZUF4aXNDcmVhdGlvblVJUGx1Z2luKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gICAgaWYgKGluc3RhbmNlXyA9PSBudWxsKQotICAgIHsKLSAgICAgIGluc3RhbmNlXyA9IHRoaXM7Ci0gICAgfQotICAgIGxvZ18gPSBFbnZpcm9ubWVudFNlcnZpY2UuZ2V0RWNsaXBzZUxvZygpOwotCi0gIH0KLQotICAvLyBUaGlzIG1ldGhvZCBpcyBuZWVkZWQgdG8ga2VlcCB0aGUgbG9nZ2luZyBmcm9tIGJsb3dpbmcgdXAuCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgcmV0dXJuIElEOyAgCi0gIH0KLSAgCi0gIC8qKgotICAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGlzIHBsdWdpbi4gRXF1aXZhbGVudCB0byBjYWxsaW5nCi0gICogKFdlYlNlcnZpY2VXYXNDcmVhdGlvblVJUGx1Z2luKVBsYXRmb3JtLmdldFBsdWdpbigib3JnLmVjbGlwc2UuanN0LndzLndhcy52NS50cC51aSIpOwotICAqIEByZXR1cm4gVGhlIFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luIHNpbmdsZXRvbi4KLSAgKi8KLSAgc3RhdGljIHB1YmxpYyBXZWJTZXJ2aWNlQXhpc0NyZWF0aW9uVUlQbHVnaW4gZ2V0SW5zdGFuY2UgKCkKLSAgewotICAgIHJldHVybiBpbnN0YW5jZV87Ci0gIH0KLQotICAvKioKLSAgKiBDYWxsZWQgb25jZSBieSB0aGUgcGxhdGZvcm0gd2hlbiB0aGlzIHBsdWdpbiBpcyBmaXJzdCBsb2FkZWQuCi0gICogQHRocm93cyBDb3JlRXhjZXB0aW9uIElmIHRoaXMgcGx1Z2luIGZhaWxzIHRvIHN0YXJ0LgotICAqLwotICBwdWJsaWMgdm9pZCBzdGFydCggQnVuZGxlQ29udGV4dCBjb250ZXh0ICkgdGhyb3dzIENvcmVFeGNlcHRpb24KLSAgewotICAJbG9nXy5sb2coSUxvZy5JTkZPLCA1MDY4LCB0aGlzLCAic3RhcnQiLCAiU3RhcnRpbmcgcGx1Z2luIG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpIik7Ci0gICAgCi0gICAgdHJ5Ci0gICAgewotICAgICAgc3VwZXIuc3RhcnQoIGNvbnRleHQgKTsKLSAgICB9Ci0gICAgY2F0Y2goIEV4Y2VwdGlvbiBleGMgKQotICAgIHsKLSAgICAgIGxvZ18ubG9nKCBJTG9nLkVSUk9SLCA1MDY4LCB0aGlzLCAic3RhcnQiLCBleGMgKTsgIAotICAgIH0KLSAgICAKLSAgICBzZXRQcmVmZXJlbmNlcygpOwotICB9Ci0KLSAgLyoqCi0gICogQ2FsbGVkIG9uY2UgYnkgdGhlIHBsYXRmb3JtIHdoZW4gdGhpcyBwbHVnaW4gaXMgdW5sb2FkZWQuCi0gICogQHRocm93cyBDb3JlRXhjZXB0aW9uIElmIHRoaXMgcGx1Z2luIGZhaWxzIHRvIHNodXRkb3duLgotICAqLwotICBwdWJsaWMgdm9pZCBzdG9wKCBCdW5kbGVDb250ZXh0IGNvbnRleHQgKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotICB7Ci0gIAlsb2dfLmxvZyhJTG9nLklORk8sIDUwNjksIHRoaXMsICJzdG9wIiwgIlNodXR0aW5nIHBsdWdpbiBvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aSIpOwotICAgIAotICAgIHRyeQotICAgIHsKLSAgICAgIHN1cGVyLnN0b3AoIGNvbnRleHQgKTsKLSAgICB9Ci0gICAgY2F0Y2goIEV4Y2VwdGlvbiBleGMgKQotICAgIHsKLSAgICAgIGxvZ18ubG9nKCBJTG9nLkVSUk9SLCA1MDY4LCB0aGlzLCAic3RhcnQiLCBleGMgKTsgICAgICAgIAotICAgIH0KLSAgfQotCi0KLSAgLyoqCi0gICAqIFNldHMgdGhlIGdlbmVyYWwgcHJlZmVyZW5jZXMgdG8gdGhlIHZhbHVlcyBpbiB0aGUgcHJlZmVyZW5jZXMgc3RvcmUuCi0gICoqLwotICBwdWJsaWMgdm9pZCBzZXRQcmVmZXJlbmNlcygpCi0gIHsKLSAgIC8vIHNldERpYWxvZ3NQcmVmZXJlbmNlcygpOwotICB9Ci0KLSAvKioKLSAgICogQHNlZSBBYnN0cmFjdFVJUGx1Z2luI2luaXRpYWxpemVEZWZhdWx0UHJlZmVyZW5jZXMKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVEZWZhdWx0UHJlZmVyZW5jZXMoSVByZWZlcmVuY2VTdG9yZSBwcmVmZXJlbmNlU3RvcmUpIHsKLQotCS8vIFNldCB0aGUgZGVmYXVsdHMgUHJlZmVyZW5jZQotLy8JQWN0aW9uRGlhbG9nc1ByZWZlcmVuY2VIZWxwZXIuaW5pdGlhbGl6ZURlZmF1bHRzKHByZWZlcmVuY2VTdG9yZSk7Ci0gIH0KLSAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3Rhc2svQlVDb25maWdDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS90YXNrL0JVQ29uZmlnQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDhlZjQwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3Rhc2svQlVDb25maWdDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MjQgICAxMjAxMzcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLnRhc2s7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLXB1YmxpYyBjbGFzcyBCVUNvbmZpZ0NvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiB7Ci0JcHVibGljIEJVQ29uZmlnQ29tbWFuZCgpIHsKLQl9Ci0KLQkvKgotCSAqIFRoZSBleGVjdXRlIG1ldGhvZCBvZiB0aGlzIGNvbW1hbmQgZG8gbm90aGluZy4gIEl0IGlzIG1lcmVseSBhbiBhbmNob3IgcG9pbnQgZm9yIFVJIHBhZ2UKLQkgKi8KLQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUpIHsKLQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS90YXNrL0JhY2t1cFNrZWxJbXBsQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvdGFzay9CYWNrdXBTa2VsSW1wbENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTlhNmM5MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS90YXNrL0JhY2t1cFNrZWxJbXBsQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjEwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMzMCAxMjg4MjcgICBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA0MDMgMTI4ODI3ICAga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNTI0IDEyNzM0MyAgIG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbgotICogMjAwNzAxMTYgMTY5MTM4ICAgbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uCQotICogMjAwNzA4MTUgICAxODg5OTkgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLnRhc2s7Ci0KLQotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuUG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlNlcnZpY2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLkF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbi5KYXZhV1NETFBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS5BeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnV0aWwuUGxhdGZvcm1VdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS51dGlsLldTRExVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwucGx1Z2luLldlYlNlcnZpY2VQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29tbW9uLkZpbGVSZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0LlJlc291cmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5CYXNlRWNsaXBzZUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSVN0YXR1c0hhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZUluZm87Ci0KLXB1YmxpYyBjbGFzcyBCYWNrdXBTa2VsSW1wbENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotICBwcml2YXRlIGZpbmFsIFN0cmluZyBJTVBMID0gIkltcGwiOwkvLyROT04tTkxTLTEkCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIERPVCA9ICIuIjsJLy8kTk9OLU5MUy0xJAotICBwcml2YXRlIGZpbmFsIFN0cmluZyBCQUtfRVhUID0gImJhayI7CS8vJE5PTi1OTFMtMSQKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSkFWQSA9ICJqYXZhIjsJLy8kTk9OLU5MUy0xJAotICBwcml2YXRlIFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyOwotICBwcml2YXRlIEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW07IAotICAKLSAgcHJpdmF0ZSBXZWJTZXJ2aWNlSW5mbyB3ZWJTZXJ2aWNlSW5mbzsKLQotICBwdWJsaWMgQmFja3VwU2tlbEltcGxDb21tYW5kKCApIHsKLSAgfQotICAKLSAgCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKSAKLSAgewotCSAgSUVudmlyb25tZW50IGVudmlyb25tZW50ID0gZ2V0RW52aXJvbm1lbnQoKTsKLQkgIGlmIChqYXZhV1NETFBhcmFtID09IG51bGwpCi0JICB7Ci0JCSAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhBeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMuTVNHX0VSUk9SX0pBVkFfV1NETF9QQVJBTV9OT1RfU0VUKTsKLQkJICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJICByZXR1cm4gc3RhdHVzOwotCSAgfQotCSAgCi0JICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0JICAvLyBSZWFkIFdTREwKLQkgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG51bGw7Ci0JICBTdHJpbmcgd3NkbFVSTCA9IGphdmFXU0RMUGFyYW0uZ2V0SW5wdXRXc2RsTG9jYXRpb24oKTsKLQkgIHRyeQotCSAgewotCQkgIFVSTCB1cmwgPSBuZXcgVVJMKHdzZGxVUkwpOwotCQkgIGRlZmluaXRpb24gPSB3ZWJTZXJ2aWNlc1BhcnNlci5nZXRXU0RMRGVmaW5pdGlvbih1cmwudG9TdHJpbmcoKSk7Ci0JICB9Ci0JICBjYXRjaChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLQkgIHsKLQkJICB3c2RsVVJMID0gUGxhdGZvcm1VdGlscy5nZXRGaWxlVVJMRnJvbVBhdGgobmV3IFBhdGgod3NkbFVSTCkpOwotCQkgIGRlZmluaXRpb24gPSB3ZWJTZXJ2aWNlc1BhcnNlci5nZXRXU0RMRGVmaW5pdGlvbih3c2RsVVJMKTsKLQkgIH0KLQkgIAotCSAgLy8gQ29tcHV0ZSB0aGUgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIEphdmEgYmVhbiBza2VsZXRvbgotCSAgU2VydmljZSBzZXJ2aWNlID0gbnVsbDsKLQkgIFBvcnQgcG9ydCA9IG51bGw7Ci0JICBBcnJheUxpc3QgaW1wbFVSTExpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JICBpZiAoZGVmaW5pdGlvbiAhPSBudWxsKSB7Ci0JCSAgU3RyaW5nQnVmZmVyIGJlYW5OYW1lID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQkgIAotCQkgIC8vZmlyc3QgY2hlY2sgaWYgdGhlcmUgaXMgYSBtYXBwaW5nIGZvciB0aGlzIG5hbWVzcGFjZSB0byBhIHBhY2thZ2UgbmFtZQotCQkgIC8vaWYgbm90IHRoZW4gY29tcHV0ZSBwYWNrYWdlIG5hbWUgZnJvbSBuYW1lc3BhY2UKLQkJICBTdHJpbmcgYmVhblBhY2thZ2VOYW1lID0gbnVsbDsKLQkJICBNYXAgbWFwcGluZ3MgPSBqYXZhV1NETFBhcmFtLmdldE1hcHBpbmdzKCk7Ci0JCSAgaWYgKG1hcHBpbmdzICE9IG51bGwpCi0JCSAgewotCQkJICBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlID0gZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLQkJCSAgYmVhblBhY2thZ2VOYW1lID0gKFN0cmluZyltYXBwaW5ncy5nZXQodGFyZ2V0TmFtZXNwYWNlKTsKLQkJICB9Ci0JCSAgaWYgKGJlYW5QYWNrYWdlTmFtZSA9PSBudWxsKQotCQkgIHsKLQkJCSAgYmVhblBhY2thZ2VOYW1lID0gV1NETFV0aWxzLmdldFBhY2thZ2VOYW1lKGRlZmluaXRpb24pOwotCQkgIH0JCSAgCi0JCSAgCi0JCSAgamF2YVdTRExQYXJhbS5zZXRCZWFuUGFja2FnZShiZWFuUGFja2FnZU5hbWUpOwkJICAKLQkJICBiZWFuTmFtZS5hcHBlbmQoYmVhblBhY2thZ2VOYW1lKTsKLQkJICBiZWFuTmFtZS5hcHBlbmQoRE9UKTsKLQkJICAKLQkJICBzZXJ2aWNlID0gKFNlcnZpY2UpIGRlZmluaXRpb24uZ2V0U2VydmljZXMoKS52YWx1ZXMoKS5pdGVyYXRvcigpLm5leHQoKTsKLQkJICBwb3J0ID0gKFBvcnQpIHNlcnZpY2UuZ2V0UG9ydHMoKS52YWx1ZXMoKS5pdGVyYXRvcigpLm5leHQoKTsKLQkJICBCaW5kaW5nIGJpbmRpbmcgPSBwb3J0LmdldEJpbmRpbmcoKTsKLQkJICAKLQkJICBTdHJpbmcgcU5hbWUgPSBiaW5kaW5nLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7CQkgIAotCQkgIGJlYW5OYW1lLmFwcGVuZChxTmFtZS5zdWJzdHJpbmcoMCwxKS50b1VwcGVyQ2FzZSgpKTsvL0ZpeCBmb3IgYnVnIDE2OTEzOCwgbmVlZCB0byBlbnN1cmUgZmlyc3QgY2hhciBpcyB1cHBlcmNhc2UKLQkJICBiZWFuTmFtZS5hcHBlbmQocU5hbWUuc3Vic3RyaW5nKDEpKTsKLQotCQkgIGJlYW5OYW1lLmFwcGVuZChJTVBMKTsKLQkJICBTdHJpbmcgYmVhbk5hbWVTdHJpbmcgPSBiZWFuTmFtZS50b1N0cmluZygpOwotCQkgIGphdmFXU0RMUGFyYW0uc2V0QmVhbk5hbWUoYmVhbk5hbWVTdHJpbmcpOwotCQkgIAotCQkgIC8vIENoZWNrIGlmIHRoZSBza2VsZXRvbiBpbXBsZW1lbnRhdGlvbiBiZWFuIGFscmVhZHkgZXhpc3Qgb3Igbm90LiAgCi0JCSAgLy8gSWYgaXQgZG9lcywgdGhlbiBiYWNrIGl0IHVwIGFzIHh4eC5qYXZhLmJhayBiZWZvcmUgcHJvY2VlZGluZyB0byBjYWxsIHRoZSBBeGlzIGVtaXR0ZXIKLQkJICAKLQkJICBGaWxlSW5wdXRTdHJlYW0gZmluU3RyZWFtID0gbnVsbDsKLQkJICAKLQkgICAgUmVzb3VyY2VDb250ZXh0IGNvbnRleHQgICAgICAgPSAoKEJhc2VFY2xpcHNlRW52aXJvbm1lbnQpZW52aXJvbm1lbnQpLmdldFJlc291cmNlQ29udGV4dCgpOyAgICAgICAgCi0JCSAgSVN0YXR1c0hhbmRsZXIgIHN0YXR1c0hhbmRsZXIgPSBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCk7Ci0JCSAgCi0JCSAgU3RyaW5nIGJlYW5OYW1lUGF0aFN0cmluZyA9IGJlYW5OYW1lU3RyaW5nLnJlcGxhY2UoJy4nLElQYXRoLlNFUEFSQVRPUik7Ci0JCSAgSVBhdGggc2tlbEltcGxQYXRoID0gbmV3IFBhdGggKGphdmFXU0RMUGFyYW0uZ2V0SmF2YU91dHB1dCgpKS5hcHBlbmQobmV3IFBhdGggKGJlYW5OYW1lUGF0aFN0cmluZykpLmFkZEZpbGVFeHRlbnNpb24oSkFWQSk7Ci0JCSAgCi0JCSAgLy8gc3RvcmUgdGhlIG5hbWUgb2YgdGhlIGltcGxVUkwKLQkJICBTdHJpbmcgaW1wbFVSTFN0cmluZzsKLQkJICB0cnkgewotCQkJICBpbXBsVVJMU3RyaW5nID0gc2tlbEltcGxQYXRoLnRvRmlsZSgpLnRvVVJMKCkudG9TdHJpbmcoKTsKLQkJICB9IGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZTEpIHsKLQkJCSAgaW1wbFVSTFN0cmluZyA9IFBsYXRmb3JtVXRpbHMuZ2V0RmlsZVVSTEZyb21QYXRoKHNrZWxJbXBsUGF0aCk7Ci0JCSAgfQotCQkgIGltcGxVUkxMaXN0LmFkZCggaW1wbFVSTFN0cmluZyApOwotCQkgIAotCQkgIGlmIChza2VsSW1wbFBhdGgudG9GaWxlKCkuZXhpc3RzKCkpICB7Ci0JCQkgIAotCQkJICBJUGF0aCB0YXJnZXRQYXRoID0gc2tlbEltcGxQYXRoLmFkZEZpbGVFeHRlbnNpb24oQkFLX0VYVCk7Ci0JCQkgIHRyeSB7Ci0JCQkJICBmaW5TdHJlYW0gPSBuZXcgRmlsZUlucHV0U3RyZWFtKHNrZWxJbXBsUGF0aC50b1N0cmluZygpKTsKLQkJCQkgIGlmIChmaW5TdHJlYW0gIT0gbnVsbCkgewotCQkJCQkgIEZpbGVSZXNvdXJjZVV0aWxzLmNyZWF0ZUZpbGVBdExvY2F0aW9uKGNvbnRleHQsIHRhcmdldFBhdGgubWFrZUFic29sdXRlKCksIGZpblN0cmVhbSwKLQkJCQkJCQkgIG1vbml0b3IsIHN0YXR1c0hhbmRsZXIpOwotCQkJCQkgIGZpblN0cmVhbS5jbG9zZSgpOwotCQkJCSAgfQotCQkJICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCSAgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzLk1TR19FUlJPUl9NT1ZFX1JFU09VUkNFLG5ldyBTdHJpbmdbXXtlLmdldExvY2FsaXplZE1lc3NhZ2UoKX0pLCBlKTsKLQkJCQkgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkJICB9IGZpbmFsbHkgewotCQkJCSAgdHJ5IHsKLQkJCQkJICBpZiAoZmluU3RyZWFtICE9IG51bGwpIHsKLQkJCQkJCSAgZmluU3RyZWFtLmNsb3NlKCk7Ci0JCQkJCSAgfQotCQkJCSAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJCSAgfQotCQkJICB9Ci0JCSAgfQotCQkgIAotCQkgIFN0cmluZ1tdIGltcGxVUkxBcnJheSA9IG5ldyBTdHJpbmdbaW1wbFVSTExpc3Quc2l6ZSgpXTsKLQkJICB3ZWJTZXJ2aWNlSW5mby5zZXRJbXBsVVJMcyggKFN0cmluZ1tdKSAoaW1wbFVSTExpc3QudG9BcnJheShpbXBsVVJMQXJyYXkpKSk7Ci0KLQkgIH0gCi0JICBlbHNlIHsKLQkJICBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggTkxTLmJpbmQoQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfV1NETF9OT19ERUZJTklUSU9OLCBuZXcgU3RyaW5nW10ge3dzZGxVUkx9KSk7Ci0JCSAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0JICB9ICAKLQkgIAotCSAgcmV0dXJuIHN0YXR1czsKLSAgfQotICAKLQotICAvKioKLSAgKiBTZXRzIHRoZSBqYXZhV1NETFBhcmFtLgotICAqIEBwYXJhbSBqYXZhV1NETFBhcmFtIFRoZSBqYXZhV1NETFBhcmFtIHRvIHNldAotICAqLwotICBwdWJsaWMgdm9pZCBzZXRKYXZhV1NETFBhcmFtKEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW0pIHsKLSAgICB0aGlzLmphdmFXU0RMUGFyYW0gPSBqYXZhV1NETFBhcmFtOwotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSB3ZWJTZXJ2aWNlc1BhcnNlciBUaGUgd2ViU2VydmljZXNQYXJzZXIgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZXNQYXJzZXIoV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXIpIHsKLSAgICB0aGlzLndlYlNlcnZpY2VzUGFyc2VyID0gd2ViU2VydmljZXNQYXJzZXI7Ci0gIH0KLQotCi1wdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlSW5mbyhXZWJTZXJ2aWNlSW5mbyB3ZWJTZXJ2aWNlSW5mbykgewotCXRoaXMud2ViU2VydmljZUluZm8gPSB3ZWJTZXJ2aWNlSW5mbzsKLX0KLSAgCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3Rhc2svRGVmYXVsdHNGb3JTZXJ2ZXJKYXZhV1NETENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3Rhc2svRGVmYXVsdHNGb3JTZXJ2ZXJKYXZhV1NETENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI1NjM2ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS90YXNrL0RlZmF1bHRzRm9yU2VydmVySmF2YVdTRExDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjIxICAgMTE5MTExIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjAzMzAgICAxMjQ2Njcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNTI0ICAgMTI4NjAxIGFuZHl6aGFpQGNhLmlibS5jb20gLSBBbmR5IFpoYWkKLSAqIDIwMDYxMDA0ICAgMTU5MzU2IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuLCBHZXQgY29ycmVjdCBtb2R1bGUgcm9vdCBVUkwgYmFzZWQgb24gc2VydmVyIGNob3NlbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLnRhc2s7Ci0KLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5BeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkuQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS51dGlsLkNsYXNzcGF0aFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnV0aWwuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudXRpbC5QbGF0Zm9ybVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnV0aWwuV1NETFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uSjJFRVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlNlcnZlclV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c2lsLlV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZGlzY292ZXJ5LldlYlNlcnZpY2VzUGFyc2VyRXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlc1BhcnNlcjsKLQotcHVibGljIGNsYXNzIERlZmF1bHRzRm9yU2VydmVySmF2YVdTRExDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gewotCi0JcHJpdmF0ZSBKYXZhV1NETFBhcmFtZXRlciBqYXZhV1NETFBhcmFtXyA9IG51bGw7Ci0JcHJpdmF0ZSBJUHJvamVjdCBzZXJ2aWNlUHJvamVjdF87Ci0JcHJpdmF0ZSBTdHJpbmcgamF2YUJlYW5OYW1lXzsgLy8gdGhpcyBuZWVkcyB0byBiZSBzZXQgYnkgdGhlIGV4dGVuc2lvbiB3aXRoIGluaXRpYWwgc2VsZWN0aW9uCi0JcHJpdmF0ZSBTdHJpbmcgV1NETFNlcnZpY2VVUkxfOwotCXByaXZhdGUgU3RyaW5nIFdTRExTZXJ2aWNlUGF0aG5hbWVfOwotCXByaXZhdGUgV2ViU2VydmljZXNQYXJzZXIgV1NQYXJzZXJfOwotICAgIHByaXZhdGUgU3RyaW5nIHNlcnZpY2VTZXJ2ZXJUeXBlSURfOwotCQotCXByaXZhdGUgZmluYWwgU3RyaW5nIFdTRExfRk9MREVSID0gIndzZGwiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIGZpbmFsIFN0cmluZyBTRVJWSUNFX0VYVCA9ICIvc2VydmljZXMvIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgZmluYWwgU3RyaW5nIFdTRExfRVhUID0gIndzZGwiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIGZpbmFsIGJ5dGUgTU9ERV9CRUFOID0gKGJ5dGUpIDA7Ci0JcHVibGljIGZpbmFsIFN0cmluZyBTRVJWSUNFX05BTUVfRVhUID0gIlNlcnZpY2UiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgVEVNUF9VUkkgPSAiaHR0cDovL3RlbXB1cmkub3JnLyI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIElTZXJ2ZXIgc2VydmljZUV4aXN0aW5nU2VydmVyOwotCi0JcHVibGljIERlZmF1bHRzRm9yU2VydmVySmF2YVdTRExDb21tYW5kKCApIAotCXsKLQl9Ci0JCi0KLQkvKioKLQkqIEV4ZWN1dGUgRGVmYXVsdHNGb3JKYXZhVG9XU0RMVGFzawotCSovCi0JcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApIAotCXsKLQkJSUVudmlyb25tZW50IGVudmlyb25tZW50ID0gZ2V0RW52aXJvbm1lbnQoKTsKLQotCQlJU3RhdHVzIHN0YXR1czsKLQkJaWYgKGphdmFXU0RMUGFyYW1fID09IG51bGwpIHsKLQkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBBeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMuTVNHX0VSUk9SX0pBVkFfV1NETF9QQVJBTV9OT1RfU0VUKTsKLQkJCWVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkJcmV0dXJuIHN0YXR1czsKLQkJfQotCQkKLQkJaWYgKGphdmFCZWFuTmFtZV8gPT0gbnVsbCkgeyAgLy8gZWl0aGVyIHNldCBieSBleHRlbnNpb24gcG9pbnQgb3IgYmVhbiBjbGFzcyBwYWdlCi0JCQlqYXZhQmVhbk5hbWVfID0gamF2YVdTRExQYXJhbV8uZ2V0QmVhbk5hbWUoKTsKLQkJCWlmIChqYXZhQmVhbk5hbWVfID09IG51bGwpIHsKLQkJCQkvL3JtIGphdmFCZWFuTmFtZV8gPSBpc2RFbGVtZW50LmdldEphdmFCZWFuTmFtZSgpOwotCQkJCWphdmFXU0RMUGFyYW1fLnNldEJlYW5OYW1lKGphdmFCZWFuTmFtZV8pOwotCQkJfQotCQl9Ci0JCS8vIHJtIFdTUGFyc2VyXyA9CShXZWJTZXJ2aWNlc1BhcnNlcikgd3NlXy5nZXRXU1BhcnNlcigpOwotCQkKLQkJamF2YVdTRExQYXJhbV8uc2V0U2VydmVyU2lkZShKYXZhV1NETFBhcmFtZXRlci5TRVJWRVJfU0lERV9CRUFOKTsKLQkJamF2YVdTRExQYXJhbV8uc2V0U2tlbGV0b25EZXBsb3koZmFsc2UpOwotCi0JCWphdmFXU0RMUGFyYW1fLnNldEJlYW5OYW1lKGphdmFCZWFuTmFtZV8pOwotCQlTdHJpbmcgY2xhc3NwYXRoID0gQ2xhc3NwYXRoVXRpbHMuZ2V0SW5zdGFuY2UoKS5nZXRDbGFzc3BhdGhTdHJpbmcoc2VydmljZVByb2plY3RfKTsKLQkJamF2YVdTRExQYXJhbV8uc2V0Q2xhc3NwYXRoKGNsYXNzcGF0aCk7Ci0KLQkJU3RyaW5nIHNpbXBsZUJlYW5OYW1lID0gamF2YUJlYW5OYW1lXzsKLQkJaWYgKGphdmFCZWFuTmFtZV8gIT0gbnVsbCkgewotCQkJaW50IGluZGV4ID0gamF2YUJlYW5OYW1lXy5sYXN0SW5kZXhPZignLicpOwotCQkJaWYgKGluZGV4ICE9IC0xKSB7Ci0JCQkJc2ltcGxlQmVhbk5hbWUgPSBqYXZhQmVhbk5hbWVfLnN1YnN0cmluZyhpbmRleCArIDEpOwotCQkJfQotCQl9Ci0JCVN0cmluZyBuYW1lc3BhY2UgPSBXU0RMVXRpbHMubWFrZU5hbWVzcGFjZShqYXZhV1NETFBhcmFtXy5nZXRCZWFuTmFtZSgpKTsKLQkJamF2YVdTRExQYXJhbV8uc2V0TmFtZXNwYWNlKG5hbWVzcGFjZSk7Ci0KLQkJamF2YVdTRExQYXJhbV8uc2V0UG9ydFR5cGVOYW1lKHNpbXBsZUJlYW5OYW1lKTsKLQkJamF2YVdTRExQYXJhbV8uc2V0U2VydmljZU5hbWUoc2ltcGxlQmVhbk5hbWUgKyBTRVJWSUNFX05BTUVfRVhUKTsKLQotCQlJUGF0aCBtb2R1bGVTZXJ2ZXJSb290ID0gbnVsbDsKLQotCQlJUGF0aCBtb2R1bGVQYXRoID0gc2VydmljZVByb2plY3RfLmdldEZ1bGxQYXRoKCk7Ci0JCUlQYXRoIHdlYmluZlBhdGggPSBzZXJ2aWNlUHJvamVjdF8uZ2V0RnVsbFBhdGgoKTsKLQkJdHJ5IHsKLQkJCWlmIChKMkVFVXRpbHMuaXNXZWJDb21wb25lbnQoc2VydmljZVByb2plY3RfKSl7Ci0JCQkJbW9kdWxlU2VydmVyUm9vdCA9IFJlc291cmNlVXRpbHMuZ2V0SmF2YVNvdXJjZUxvY2F0aW9uKHNlcnZpY2VQcm9qZWN0Xyk7Ci0JCQkJbW9kdWxlUGF0aCA9IEoyRUVVdGlscy5nZXRXZWJDb250ZW50UGF0aChzZXJ2aWNlUHJvamVjdF8pOwotCQkJCXdlYmluZlBhdGggPSBKMkVFVXRpbHMuZ2V0V2ViSW5mUGF0aCggc2VydmljZVByb2plY3RfICk7CQkJCQotCQkJfQotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJc3RhdHVzID0gIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9ERUZBVUxUX0JFQU4sIGUgKTsKLQkJCWVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkJcmV0dXJuIHN0YXR1czsKLQkJfQotCi0JCUlQYXRoIHdzZGxQYXRoID0KLQkJCW1vZHVsZVBhdGguYXBwZW5kKFdTRExfRk9MREVSKS5hcHBlbmQoc2ltcGxlQmVhbk5hbWUpLmFkZEZpbGVFeHRlbnNpb24oV1NETF9FWFQpOwotCi0JCXRyeXsKLQkJCUlGb2xkZXIgZm9sZGVyID0gUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2VSb290KCkuZ2V0Rm9sZGVyKG1vZHVsZVBhdGguYXBwZW5kKFdTRExfRk9MREVSKSk7Ci0JCQlGaWxlVXRpbC5jcmVhdGVGb2xkZXIoZm9sZGVyLCB0cnVlLCB0cnVlKTsKLQkJCi0JCX0KLQkJY2F0Y2goQ29yZUV4Y2VwdGlvbiBlKXsKLQkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9XUklURV9XU0RMLCBlICk7Ci0JCQllbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJCXJldHVybiBzdGF0dXM7Ci0JCX0KLQkJCi0JCVN0cmluZyB3c2RsTG9jYXRpb24gPSBSZXNvdXJjZVV0aWxzLmdldFdvcmtzcGFjZVJvb3QoKS5nZXRGaWxlKHdzZGxQYXRoKS5nZXRMb2NhdGlvbigpLnRvU3RyaW5nKCk7Ci0KLQkJamF2YVdTRExQYXJhbV8uc2V0T3V0cHV0V3NkbExvY2F0aW9uKHdzZGxMb2NhdGlvbik7Ci0JCWphdmFXU0RMUGFyYW1fLnNldElucHV0V3NkbExvY2F0aW9uKG5ldyBGaWxlKHdzZGxMb2NhdGlvbikudG9VUkkoKS50b1N0cmluZygpKTsKLQkJV1NETFNlcnZpY2VQYXRobmFtZV8gPSB3c2RsUGF0aC50b1N0cmluZygpOwotCi0JCWlmICh3c2RsUGF0aCAhPSBudWxsKSB7Ci0JCQlTdHJpbmcgd3NkbFVSTCA9IFBsYXRmb3JtVXRpbHMuZ2V0RmlsZVVSTEZyb21QYXRoKG5ldyBQYXRoKHdzZGxMb2NhdGlvbikpOwotCQkJV1NETFNlcnZpY2VVUkxfID0gd3NkbFVSTDsKLQkJCS8vIHNldCBwYXJzZXIgCi0JCQlpZiAod3NkbFVSTCA9PSBudWxsIHx8IHdzZGxVUkwubGVuZ3RoKCkgPD0gMCkgewotCQkJCUlSZXNvdXJjZSByZXMgPQotCQkJCQlSZXNvdXJjZVV0aWxzLmZpbmRSZXNvdXJjZShXU0RMU2VydmljZVBhdGhuYW1lXyk7Ci0JCQkJaWYgKHJlcyAhPSBudWxsKQotCQkJCQl3c2RsVVJMID0gKG5ldyBVdGlscygpKS50b0ZpbGVTeXN0ZW1VUkkocmVzKTsKLQkJCX0KLQkJCWlmICh3c2RsVVJMICE9IG51bGwgJiYgd3NkbFVSTC5sZW5ndGgoKSA+IDApIHsKLQkJCQlpZiAoV1NQYXJzZXJfID09IG51bGwpIHsKLQkJCQkJV1NQYXJzZXJfID0gbmV3IFdlYlNlcnZpY2VzUGFyc2VyRXh0KCk7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJamF2YVdTRExQYXJhbV8uc2V0U3R5bGUoSmF2YVdTRExQYXJhbWV0ZXIuU1RZTEVfV1JBUFBFRCk7Ci0JCWphdmFXU0RMUGFyYW1fLnNldFVzZShKYXZhV1NETFBhcmFtZXRlci5VU0VfTElURVJBTCk7Ci0KLSAgICAgICAgU3RyaW5nIHByb2plY3RVUkwgPSBudWxsOwotICAgICAgICBpZiAoc2VydmljZVNlcnZlclR5cGVJRF8gIT0gbnVsbCAmJiBzZXJ2aWNlU2VydmVyVHlwZUlEXy5sZW5ndGgoKT4wKQotICAgICAgICB7Ci0JCSAgcHJvamVjdFVSTCA9IFNlcnZlclV0aWxzLmdldEVuY29kZWRXZWJDb21wb25lbnRVUkwoc2VydmljZVByb2plY3RfLCBzZXJ2aWNlU2VydmVyVHlwZUlEXywgc2VydmljZUV4aXN0aW5nU2VydmVyKTsgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgaWYgKHByb2plY3RVUkwgPT0gbnVsbCkgLy8gZWl0aGVyIG5vIHNlcnZlciB0eXBlIGRlZmluZWQgb3Igc2VydmVyIG5vdCBhYmxlIHRvIGdldCBwcm9qZWN0IFVSTAotICAgICAgICB7IAotICAgICAgICAgIHByb2plY3RVUkwgPSBURU1QX1VSSSArIHNlcnZpY2VQcm9qZWN0Xy5nZXROYW1lKCk7IAotICAgICAgICAgIGphdmFXU0RMUGFyYW1fLnNldEd1ZXNzUHJvamVjdFVSTCh0cnVlKTsKLSAgICAgICAgfQotICAgICAgICBqYXZhV1NETFBhcmFtXy5zZXRQcm9qZWN0VVJMKHByb2plY3RVUkwpOwotCQlTdHJpbmcgc2VydmljZVVSTCA9IHByb2plY3RVUkwgKyBTRVJWSUNFX0VYVCArIHNpbXBsZUJlYW5OYW1lOwotCQlqYXZhV1NETFBhcmFtXy5zZXRVcmxMb2NhdGlvbihzZXJ2aWNlVVJMKTsKLQkJCi0JCWphdmFXU0RMUGFyYW1fLnNldE1ldGFJbmZPbmx5KHRydWUpOwotCi0JCVN0cmluZyBqYXZhT3V0cHV0ID0JUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2UobW9kdWxlU2VydmVyUm9vdCkuZ2V0TG9jYXRpb24oKS50b1N0cmluZygpOwotCQotCQlTdHJpbmcgc2VydmljZU5hbWUgPSBqYXZhV1NETFBhcmFtXy5nZXRTZXJ2aWNlTmFtZSgpOwotCQlJUGF0aCBvdXRwdXRQYXRoID0JUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2Uod2ViaW5mUGF0aCkuZ2V0TG9jYXRpb24oKTsKLQkJU3RyaW5nIG91dHB1dCA9IHNlcnZpY2VQcm9qZWN0Xy5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCk7Ci0JCWlmIChvdXRwdXRQYXRoIT1udWxsKQotCQkgb3V0cHV0ID0gb3V0cHV0UGF0aC5hcHBlbmQoc2VydmljZU5hbWUpLnRvU3RyaW5nKCk7Ci0KLQkJamF2YVdTRExQYXJhbV8uc2V0SmF2YU91dHB1dChqYXZhT3V0cHV0KTsKLQkJamF2YVdTRExQYXJhbV8uc2V0T3V0cHV0KG91dHB1dCk7Ci0JCQotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBqYXZhV1NETFBhcmFtLgotCSAqIEByZXR1cm4gSmF2YVdTRExQYXJhbWV0ZXIKLQkgKi8KLQlwdWJsaWMgSmF2YVdTRExQYXJhbWV0ZXIgZ2V0SmF2YVdTRExQYXJhbSgpIHsKLQkJcmV0dXJuIGphdmFXU0RMUGFyYW1fOwotCX0KLQotCS8qKgotCSAqIFNldHMgdGhlIGphdmFXU0RMUGFyYW0uCi0JICogQHBhcmFtIGphdmFXU0RMUGFyYW0gVGhlIGphdmFXU0RMUGFyYW0gdG8gc2V0Ci0JICovCi0JcHVibGljIHZvaWQgc2V0SmF2YVdTRExQYXJhbShKYXZhV1NETFBhcmFtZXRlciBqYXZhV1NETFBhcmFtKSB7Ci0JCXRoaXMuamF2YVdTRExQYXJhbV8gPSBqYXZhV1NETFBhcmFtOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFNlcnZpY2VQcm9qZWN0KElQcm9qZWN0IHNlcnZpY2VQcm9qZWN0KSB7Ci0JCXRoaXMuc2VydmljZVByb2plY3RfID0gc2VydmljZVByb2plY3Q7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldEphdmFCZWFuTmFtZShTdHJpbmcgamF2YUJlYW5OYW1lKSB7Ci0JCXRoaXMuamF2YUJlYW5OYW1lXyA9IGphdmFCZWFuTmFtZTsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRXU0RMU2VydmljZVVSTCgpIHsKLQkJcmV0dXJuIFdTRExTZXJ2aWNlVVJMXzsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRXU0RMU2VydmljZVBhdGhuYW1lKCkgewotCQlyZXR1cm4gV1NETFNlcnZpY2VQYXRobmFtZV87Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldFBhcnNlcihXZWJTZXJ2aWNlc1BhcnNlciB3c1BhcnNlcikgewotCQl0aGlzLldTUGFyc2VyXyA9IHdzUGFyc2VyOwotCX0KLQkKLQlwdWJsaWMgV2ViU2VydmljZXNQYXJzZXIgZ2V0UGFyc2VyKCkgewotCQlyZXR1cm4gV1NQYXJzZXJfOwotCX0KLQotICBwdWJsaWMgdm9pZCBzZXRPYmplY3RTZWxlY3Rpb24oSVN0cnVjdHVyZWRTZWxlY3Rpb24gb2JqZWN0U2VsZWN0aW9uKQotICB7Ci0gICAgaWYgKG9iamVjdFNlbGVjdGlvbiAhPSBudWxsICYmICFvYmplY3RTZWxlY3Rpb24uaXNFbXB0eSgpKQotICAgIHsKLSAgICAgIE9iamVjdCBvYmplY3QgPSBvYmplY3RTZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCk7Ci0gICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgU3RyaW5nKQotICAgICAgICBzZXRKYXZhQmVhbk5hbWUoKFN0cmluZylvYmplY3QpOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U2VydmljZVNlcnZlclR5cGVJRChTdHJpbmcgaWQpCi0gIHsKLSAgICBzZXJ2aWNlU2VydmVyVHlwZUlEXyA9IGlkOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIoSVNlcnZlciBleGlzdGluZ1NlcnZlcikgewotCQlzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIgPSBleGlzdGluZ1NlcnZlcjsKLQl9IAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvdGFzay9Ta2VsZXRvbjJXU0RMQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvdGFzay9Ta2VsZXRvbjJXU0RMQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOGY2YzQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3Rhc2svU2tlbGV0b24yV1NETENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMjEgICAxMTkxMTEgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDMzMCAgIDEyNDY2NyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjEwMDQgICAxNTkzNTYga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4sIEdldCBjb3JyZWN0IG1vZHVsZSByb290IFVSTCBiYXNlZCBvbiBzZXJ2ZXIgY2hvc2VuCi0gKiAyMDA3MDExMiAgIDE2NTcyMSBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NETCBpbXBvcnQgY2Fubm90IHVzZSByZWxhdGl2ZSBpbXBvcnQgd2l0aCB0byBwYXJlbnQgZGlyZWN0b3JpZXMKLSAqIDIwMDcwMTI1ICAgMTcxMDcxIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBDcmVhdGUgcHVibGljIHV0aWxpdHkgbWV0aG9kIGZvciBjb3B5aW5nIFdTREwgZmlsZXMKLSAqIDIwMDcwNDA5ICAgMTgxNjM1IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0RMQ29waWVyIHV0aWxpdHkgc2hvdWxkIGNyZWF0ZSB0YXJnZXQgZm9sZGVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkudGFzazsKLQotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0OwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQWRkcmVzczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJvb3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLkF4aXNDb25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudXRpbC5GaWxlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS51dGlsLlBsYXRmb3JtVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkudXRpbC5XU0RMVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU2VydmVyVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnV0aWwuV1NETENvcGllcjsKLQotcHVibGljIGNsYXNzIFNrZWxldG9uMldTRExDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VSVklDRV9FWFQgPSAiL3NlcnZpY2VzLyI7CS8vJE5PTi1OTFMtMSQKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFdTRExfRVhUID0gIndzZGwiOwkvLyROT04tTkxTLTEkCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFdTRExfRk9MREVSID0gIndzZGwiOyAvLyROT04tTkxTLTEkCi0gIHByaXZhdGUgV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXI7Ci0gIHByaXZhdGUgSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbTsKLSAgcHJpdmF0ZSBJUHJvamVjdCBzZXJ2ZXJQcm9qZWN0OwotICBwcml2YXRlIFN0cmluZyBzZXJ2aWNlU2VydmVyVHlwZUlEXzsgIAotICBwcml2YXRlIElTZXJ2ZXIgc2VydmljZUV4aXN0aW5nU2VydmVyOyAgCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFRFTVBfVVJJID0gImh0dHA6Ly90ZW1wdXJpLm9yZy8iOyAvLyROT04tTkxTLTEkCi0KLSAgcHVibGljIFNrZWxldG9uMldTRExDb21tYW5kKCApIHsKLSAgfQotCi0gIC8qKgotICAqIEV4ZWN1dGUgU2tlbGV0b24yV1NETENvbW1hbmQKLSAgKi8KLQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkgCi0JewotCQlJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQgPSBnZXRFbnZpcm9ubWVudCgpOwotCQlpZiAoamF2YVdTRExQYXJhbSA9PSBudWxsKQotCQl7Ci0JCQlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKEF4aXNDb25zdW1wdGlvbkNvcmVNZXNzYWdlcy5NU0dfRVJST1JfSkFWQV9XU0RMX1BBUkFNX05PVF9TRVQpOwotCQkJZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0JCQlyZXR1cm4gc3RhdHVzOwotCQl9Ci0KLSAgLy8gUmVhZCBXU0RMCi0gIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG51bGw7Ci0JU3RyaW5nIHdzZGxVUkwgPSBqYXZhV1NETFBhcmFtLmdldElucHV0V3NkbExvY2F0aW9uKCk7Ci0JdHJ5Ci0JewotCQlVUkwgdXJsID0gbmV3IFVSTCh3c2RsVVJMKTsKLQkJZGVmaW5pdGlvbiA9IHdlYlNlcnZpY2VzUGFyc2VyLmdldFdTRExEZWZpbml0aW9uKHVybC50b1N0cmluZygpKTsKLQl9Ci0JY2F0Y2goTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpCi0JewotCQl3c2RsVVJMID0gUGxhdGZvcm1VdGlscy5nZXRGaWxlVVJMRnJvbVBhdGgobmV3IFBhdGgod3NkbFVSTCkpOwotCQlkZWZpbml0aW9uID0gd2ViU2VydmljZXNQYXJzZXIuZ2V0V1NETERlZmluaXRpb24od3NkbFVSTCk7Ci0JfQotCi0gICAgLy8gQ29tcHV0ZSB0aGUgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIEphdmEgYmVhbiBza2VsZXRvbgotICAgIFNlcnZpY2Ugc2VydmljZSA9IG51bGw7Ci0gICAgUG9ydCBwb3J0ID0gbnVsbDsKLSAgICBpZiAoZGVmaW5pdGlvbiAhPSBudWxsKSB7Ci0gICAgCQotICAgIAkvLyBiZWFuTmFtZSBhbmQgYmVhblBhY2thZ2VOYW1lIGFyZSBub3cgc2V0IGluIEJhY2t1cFNrZWxJbXBsQ29tbWFuZAotICAgIAkKLSAgICAJc2VydmljZSA9IChTZXJ2aWNlKSBkZWZpbml0aW9uLmdldFNlcnZpY2VzKCkudmFsdWVzKCkuaXRlcmF0b3IoKS5uZXh0KCk7Ci0gICAgCXBvcnQgPSAoUG9ydCkgc2VydmljZS5nZXRQb3J0cygpLnZhbHVlcygpLml0ZXJhdG9yKCkubmV4dCgpOwotICAgIAkKLSAgICAJamF2YVdTRExQYXJhbS5zZXRQb3J0VHlwZU5hbWUoV1NETFV0aWxzLmdldFBvcnRUeXBlTmFtZShkZWZpbml0aW9uKSk7Ci0gICAgCWphdmFXU0RMUGFyYW0uc2V0U2VydmljZU5hbWUoV1NETFV0aWxzLmdldFNlcnZpY2VFbGVtZW50TmFtZShkZWZpbml0aW9uKSk7Ci0KLSAgICB9IAotICAgIGVsc2UgewotICAgICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggTkxTLmJpbmQoQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfV1NETF9OT19ERUZJTklUSU9OLCBuZXcgU3RyaW5nW10ge3dzZGxVUkx9KSk7Ci0gICAgICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQotCi0gICAgLy8gTW9kaWZ5IFdTREwgZW5kcG9pbnQKLSAgICBpZiAocG9ydCA9PSBudWxsKSB7Ci0gICAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBOTFMuYmluZChBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9XU0RMX05PX1BPUlQsIG5ldyBTdHJpbmdbXSB7d3NkbFVSTH0pKTsKLSAgICAgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICB9Ci0gICAgTWFwIHNlcnZpY2VzID0gZGVmaW5pdGlvbi5nZXRTZXJ2aWNlcygpOwotICAgIGZvciAoSXRlcmF0b3Igc2VydmljZXNJdCA9IHNlcnZpY2VzLnZhbHVlcygpLml0ZXJhdG9yKCk7IHNlcnZpY2VzSXQuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBTZXJ2aWNlIHMgPSAoU2VydmljZSlzZXJ2aWNlc0l0Lm5leHQoKTsKLSAgICAgIE1hcCBwb3J0cyA9IHMuZ2V0UG9ydHMoKTsKLSAgICAgIGZvciAoSXRlcmF0b3IgcG9ydHNJdCA9IHBvcnRzLnZhbHVlcygpLml0ZXJhdG9yKCk7IHBvcnRzSXQuaGFzTmV4dCgpOykKLSAgICAgIHsKLSAgICAgICAgUG9ydCBwID0gKFBvcnQpcG9ydHNJdC5uZXh0KCk7Ci0gICAgICAgIG1vZGlmeUVuZHBvaW50KHApOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIFNldCBXU0RMIGZpbGUgbmFtZTogamF2YVdTRExQYXJhbS5zZXRPdXRwdXRXc2RsTG9jYXRpb24oKTsKLSAgICBJV29ya3NwYWNlUm9vdCB3b3Jrc3BhY2UgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotCi0gICAgU3RyaW5nIHdzZGxMb2NhdGlvbiA9IGphdmFXU0RMUGFyYW0uZ2V0T3V0cHV0V3NkbExvY2F0aW9uKCk7Ci0gICAgSVBhdGggd3NkbFBhdGggPSBudWxsOwotICAgIElGaWxlIG91dHB1dEZpbGUgPSBudWxsOwotICAgIHRyeSB7Ci0gICAgIGlmKHdzZGxMb2NhdGlvbiAhPSBudWxsKXsKLQkJb3V0cHV0RmlsZSA9IHdvcmtzcGFjZS5nZXRGaWxlRm9yTG9jYXRpb24oIG5ldyBQYXRoKHdzZGxMb2NhdGlvbikpOwotICAgICB9Ci0gICAgIGVsc2V7Ci0vLwkJd3NkbFBhdGggPSBzZXJ2ZXJQcm9qZWN0LmdldEZ1bGxQYXRoKCk7Ci0vLwkJCi0vLwkJaWYgKHNlcnZlclByb2plY3QuaGFzTmF0dXJlKElXZWJOYXR1cmVDb25zdGFudHMuSjJFRV9OQVRVUkVfSUQpKSB7Ci0vLwkJCSAgIEoyRUVXZWJOYXR1cmVSdW50aW1lIHdlYlByb2plY3QgPQotLy8JCQkJIChKMkVFV2ViTmF0dXJlUnVudGltZSkgc2VydmVyUHJvamVjdC5nZXROYXR1cmUoCi0vLwkJCQkgICBJV2ViTmF0dXJlQ29uc3RhbnRzLkoyRUVfTkFUVVJFX0lEKTsKLS8vCQkJICAgd3NkbFBhdGggPSBKMkVFVXRpbHMuZ2V0V2ViQ29udGVudFBhdGgoIHNlcnZlclByb2plY3QsIG1vZHVsZU5hbWVfICk7Ci0vLwkJCSAgIC8vd3NkbFBhdGggPSB3c2RsUGF0aC5hcHBlbmQod2ViUHJvamVjdC5nZXRXRUJJTkZQYXRoKCkpOwotLy8JCQkgfQotLy8JCWVsc2UgaWYgKHNlcnZlclByb2plY3QuaGFzTmF0dXJlKElFSkJOYXR1cmVDb25zdGFudHMuTkFUVVJFX0lEKSkKLS8vCQl7Ci0vLwkJCUVKQk5hdHVyZVJ1bnRpbWUgZWpiUHJvamVjdCA9IEVKQk5hdHVyZVJ1bnRpbWUuZ2V0UnVudGltZShzZXJ2ZXJQcm9qZWN0KTsKLS8vCQkJd3NkbFBhdGggPSB3c2RsUGF0aC5hcHBlbmQoZWpiUHJvamVjdC5nZXRNZXRhRm9sZGVyKCkuZ2V0UHJvamVjdFJlbGF0aXZlUGF0aCgpLmFkZFRyYWlsaW5nU2VwYXJhdG9yKCkpOwotLy8JCX0JCQotLy8gVE9ETzogIGhhbmRsZSBFSkIgY2FzZQotCQkgICAgIHdzZGxQYXRoID0gSjJFRVV0aWxzLmdldFdlYkNvbnRlbnRQYXRoKCBzZXJ2ZXJQcm9qZWN0ICk7Ci0JCQkgSVBhdGggd3NkbEZpbGVQYXRoID0gd3NkbFBhdGguYXBwZW5kKFdTRExfRk9MREVSKS5hcHBlbmQocG9ydC5nZXROYW1lKCkpLmFkZEZpbGVFeHRlbnNpb24oV1NETF9FWFQpOwotCQkgICAgIElGb2xkZXIgZm9sZGVyID0gUmVzb3VyY2VVdGlscwotCQkJCQkJCQkuZ2V0V29ya3NwYWNlUm9vdCgpCi0JCQkJCQkJCS5nZXRGb2xkZXIod3NkbFBhdGguYXBwZW5kKFdTRExfRk9MREVSKSk7Ci0JCQkgRmlsZVV0aWwuY3JlYXRlRm9sZGVyKGZvbGRlciwgdHJ1ZSwgdHJ1ZSk7CQotCQkgICAgIG91dHB1dEZpbGUgPSB3b3Jrc3BhY2UuZ2V0RmlsZSh3c2RsRmlsZVBhdGgpOwotCQkJIHdzZGxMb2NhdGlvbiA9IG91dHB1dEZpbGUuZ2V0TG9jYXRpb24oKS50b1N0cmluZygpOwotCQkJIGphdmFXU0RMUGFyYW0uc2V0T3V0cHV0V3NkbExvY2F0aW9uKHdzZGxMb2NhdGlvbik7Ci0JCQkgCi0gICAgIH0KLQotICAgICBTdHJpbmcgZm9sZGVyICAgPSBvdXRwdXRGaWxlLmdldFBhcmVudCgpLmdldExvY2F0aW9uKCkudG9GaWxlKCkudG9VUkwoKS50b1N0cmluZygpOwotICAgICBTdHJpbmcgZmlsZW5hbWUgPSBvdXRwdXRGaWxlLmdldE5hbWUoKTsKLQkKLSAgICAgV1NETENvcGllciBjb3BpZXIgPSBuZXcgV1NETENvcGllcih3ZWJTZXJ2aWNlc1BhcnNlcik7Ci0gICAgIGNvcGllci5zZXRTb3VyY2VVUkkod3NkbFVSTCwgZGVmaW5pdGlvbik7Ci0gICAgIGNvcGllci5zZXRUYXJnZXRGb2xkZXJVUkkoZm9sZGVyKTsKLSAgICAgY29waWVyLnNldFRhcmdldEZpbGVuYW1lKGZpbGVuYW1lKTsKLQkKLSAgICAgUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2UoKS5ydW4oY29waWVyLCBtb25pdG9yKTsKLQkKLSAgICAgU3RyaW5nIG5ld1BhdGggPSBvdXRwdXRGaWxlLmdldFBhcmVudCgpLmdldExvY2F0aW9uKCkuYXBwZW5kKGNvcGllci5nZXRSZWxhdGl2ZVBhdGgoKSkudG9TdHJpbmcoKTsKLSAgICAgamF2YVdTRExQYXJhbS5zZXRPdXRwdXRXc2RsTG9jYXRpb24obmV3UGF0aCk7ICAgICAKLSAgICB9IAotICAgIGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggTkxTLmJpbmQoQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfV1JJVEVfV1NETCwgbmV3IFN0cmluZ1tdIHsgd3NkbExvY2F0aW9uIH0pLCBlKTsKLSAgICAgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICB9Ci0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLQotICBwcml2YXRlIElTdGF0dXMgbW9kaWZ5RW5kcG9pbnQoUG9ydCBwb3J0KQotICB7Ci0gICAgSXRlcmF0b3IgaXQgPSBwb3J0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgU09BUEFkZHJlc3Mgc29hcEFkZHJlc3MgPSBudWxsOwotICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgewotICAgICAgT2JqZWN0IG9iaiA9IGl0Lm5leHQoKTsKLSAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBTT0FQQWRkcmVzcykKLSAgICAgIHsKLSAgICAgICAgc29hcEFkZHJlc3MgPSAoU09BUEFkZHJlc3Mpb2JqOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHNvYXBBZGRyZXNzICE9IG51bGwpCi0gICAgewotICAgICAgCi0gICAgICBTdHJpbmcgcHJvamVjdFVSTCA9IG51bGw7Ci0gICAgICBpZiAoc2VydmljZVNlcnZlclR5cGVJRF8gIT0gbnVsbCAmJiBzZXJ2aWNlU2VydmVyVHlwZUlEXy5sZW5ndGgoKT4wKQotICAgICAgewotCSAgICBwcm9qZWN0VVJMID0gU2VydmVyVXRpbHMuZ2V0RW5jb2RlZFdlYkNvbXBvbmVudFVSTChzZXJ2ZXJQcm9qZWN0LCBzZXJ2aWNlU2VydmVyVHlwZUlEXywgc2VydmljZUV4aXN0aW5nU2VydmVyKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgaWYgKHByb2plY3RVUkwgPT0gbnVsbCkgLy8gZWl0aGVyIG5vIHNlcnZlciB0eXBlIGRlZmluZWQgb3Igc2VydmVyIG5vdCBhYmxlIHRvIGdldCBwcm9qZWN0IFVSTAotICAgICAgewotICAgICAgICBwcm9qZWN0VVJMID0gVEVNUF9VUkkgKyBzZXJ2ZXJQcm9qZWN0LmdldE5hbWUoKTsgCi0gICAgICAgIGphdmFXU0RMUGFyYW0uc2V0R3Vlc3NQcm9qZWN0VVJMKHRydWUpOwotICAgICAgfQotICAgICAgamF2YVdTRExQYXJhbS5zZXRQcm9qZWN0VVJMKHByb2plY3RVUkwpOwotICAgICAgU3RyaW5nQnVmZmVyIHNlcnZpY2VVUkwgPSBuZXcgU3RyaW5nQnVmZmVyKHByb2plY3RVUkwpOwotICAgICAgc2VydmljZVVSTC5hcHBlbmQoU0VSVklDRV9FWFQpLmFwcGVuZChwb3J0LmdldE5hbWUoKSk7Ci0gICAgICBqYXZhV1NETFBhcmFtLnNldFVybExvY2F0aW9uKHNlcnZpY2VVUkwudG9TdHJpbmcoKSk7Ci0gICAgICBzb2FwQWRkcmVzcy5zZXRMb2NhdGlvblVSSShzZXJ2aWNlVVJMLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotICAKLSAgLyoqCi0gICogUmV0dXJucyB0aGUgamF2YVdTRExQYXJhbS4KLSAgKiBAcmV0dXJuIEphdmFXU0RMUGFyYW1ldGVyCi0gICovCi0gIHB1YmxpYyBKYXZhV1NETFBhcmFtZXRlciBnZXRKYXZhV1NETFBhcmFtKCkgewotICAgIHJldHVybiBqYXZhV1NETFBhcmFtOwotICB9Ci0KLSAgLyoqCi0gICogU2V0cyB0aGUgamF2YVdTRExQYXJhbS4KLSAgKiBAcGFyYW0gamF2YVdTRExQYXJhbSBUaGUgamF2YVdTRExQYXJhbSB0byBzZXQKLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0SmF2YVdTRExQYXJhbShKYXZhV1NETFBhcmFtZXRlciBqYXZhV1NETFBhcmFtKSB7Ci0gICAgdGhpcy5qYXZhV1NETFBhcmFtID0gamF2YVdTRExQYXJhbTsKLSAgfQotCi0gIC8qKgotICAgKiBAcGFyYW0gc2VydmVyUHJvamVjdCBUaGUgc2VydmVyUHJvamVjdCB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJQcm9qZWN0KElQcm9qZWN0IHNlcnZlclByb2plY3QpIHsKLSAgICB0aGlzLnNlcnZlclByb2plY3QgPSBzZXJ2ZXJQcm9qZWN0OwotICB9Ci0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgd2ViU2VydmljZXNQYXJzZXIuCi0gICAqLwotICBwdWJsaWMgV2ViU2VydmljZXNQYXJzZXIgZ2V0V2ViU2VydmljZXNQYXJzZXIoKSB7Ci0gICAgcmV0dXJuIHdlYlNlcnZpY2VzUGFyc2VyOwotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSB3ZWJTZXJ2aWNlc1BhcnNlciBUaGUgd2ViU2VydmljZXNQYXJzZXIgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZXNQYXJzZXIoV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXIpIHsKLSAgICB0aGlzLndlYlNlcnZpY2VzUGFyc2VyID0gd2ViU2VydmljZXNQYXJzZXI7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3NkbFVSSSgpCi0gIHsKLSAgCUZpbGUgZmlsZSA9IG5ldyBGaWxlKGdldEphdmFXU0RMUGFyYW0oKS5nZXRPdXRwdXRXc2RsTG9jYXRpb24oKSk7IAotICAgIFN0cmluZyB1cmwgPSAiIjsKLQkgIHRyeSB7Ci0gICAgCXVybCA9IGZpbGUudG9VUkwoKS50b1N0cmluZygpOwotICAgIH0KLQkgIGNhdGNoKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBtdWUpe30KLQlyZXR1cm4gdXJsOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlU2VydmVyVHlwZUlEKFN0cmluZyBpZCkKLSAgewotICAgIHNlcnZpY2VTZXJ2ZXJUeXBlSURfID0gaWQ7Ci0gIH0KLQotcHVibGljIHZvaWQgc2V0U2VydmljZUV4aXN0aW5nU2VydmVyKElTZXJ2ZXIgZXhpc3RpbmdTZXJ2ZXIpIHsKLQlzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIgPSBleGlzdGluZ1NlcnZlcjsKLX0gIAotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS90YXNrL1REQ29uZmlnQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvdGFzay9URENvbmZpZ0NvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGM0MTJlZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS90YXNrL1REQ29uZmlnQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDI0ICAgMTIwMTM3IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS50YXNrOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi1wdWJsaWMgY2xhc3MgVERDb25maWdDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gCi17Ci0gIHB1YmxpYyBURENvbmZpZ0NvbW1hbmQoKSAKLSAgewotICB9Ci0gIAotICAvKgotICAgKiBUaGUgZXhlY3V0ZSBtZXRob2Qgb2YgdGhpcyBjb21tYW5kIGRvIG5vdGhpbmcuICBJdCBpcyBtZXJlbHkgYW4gYW5jaG9yIHBvaW50IGZvciBVSSBwYWdlCi0gICAqLwotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUpIHsKLQkgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS90YXNrL1VwZGF0ZUF4aXNXU0RERmlsZVRhc2suamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3Rhc2svVXBkYXRlQXhpc1dTRERGaWxlVGFzay5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YWY0NGZhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3Rhc2svVXBkYXRlQXhpc1dTRERGaWxlVGFzay5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIyMSAgIDExOTExMSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwMzMwICAgMTI0NjY3IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDUxNyAgIDEzNDEwNCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLnRhc2s7Ci0KLQotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uc3RyZWFtLlN0cmVhbVJlc3VsdDsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLnN0cmVhbS5TdHJlYW1Tb3VyY2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuQXhpc0NvbnN1bXB0aW9uQ29yZU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnV0aWwuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuQXhpc0NyZWF0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5wbHVnaW4uV2ViU2VydmljZUF4aXNDcmVhdGlvblVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uSjJFRVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5jb21tb24uQnVuZGxlVXRpbHM7Ci0KLXB1YmxpYyBjbGFzcyBVcGRhdGVBeGlzV1NEREZpbGVUYXNrIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gewotCQotCXByaXZhdGUgZmluYWwgU3RyaW5nIERFUExPWV9YU0wgPSAiZGVwbG95LnhzbCI7CS8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBERVBMT1lfQkFLID0gImRlcGxveS53c2RkLmJhayI7CQkvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgQ0xBU1NOQU1FX1BBUkFNID0gIm5ld0NsYXNzTmFtZSI7CQkvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBKYXZhV1NETFBhcmFtZXRlciBqYXZhV1NETFBhcmFtXzsKLQlwcml2YXRlIElQcm9qZWN0IHNlcnZpY2VQcm9qZWN0XzsKLSAgICAKLQlwdWJsaWMgVXBkYXRlQXhpc1dTRERGaWxlVGFzaygpIAotCXsKLQl9Ci0JCi0JLyoqCi0JKiBFeGVjdXRlIFVwZGF0ZUF4aXNXU0RERmlsZVRhc2sKLQkqLwotCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKSAKLQl7ICAgIAotCQlJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQgPSBnZXRFbnZpcm9ubWVudCgpOwotCSAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7CQkKLQkJaWYgKGphdmFXU0RMUGFyYW1fID09IG51bGwpIHsKLQkJICBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhBeGlzQ29uc3VtcHRpb25Db3JlTWVzc2FnZXMuTVNHX0VSUk9SX0pBVkFfV1NETF9QQVJBTV9OT1RfU0VUKTsKLQkJICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJICByZXR1cm4gc3RhdHVzOwkJICAKLQkJfQotCi0JCUlQcm9qZWN0IHByb2plY3QgPSBzZXJ2aWNlUHJvamVjdF87Ci0gICAgICAgIAotCQlTdHJpbmcgb3V0cHV0TG9jYXRpb24gPSBqYXZhV1NETFBhcmFtXy5nZXRKYXZhT3V0cHV0KCk7Ci0JCWlmIChvdXRwdXRMb2NhdGlvbiA9PSBudWxsKSB7Ci0JCQlyZXR1cm4gc3RhdHVzOwotCQl9Ci0KLQkJU3RyaW5nIHdlYkNvbnRlbnRQYXRoID0JSjJFRVV0aWxzLmdldFdlYkNvbnRlbnRDb250YWluZXIoIHByb2plY3QgKS5nZXRMb2NhdGlvbigpLnRvU3RyaW5nKCk7Ci0JCXRyeSB7Ci0KLQkJCWlmIChqYXZhV1NETFBhcmFtXy5nZXREZXBsb3ltZW50RmlsZXMoKSAhPSBudWxsCi0JCQkJJiYgamF2YVdTRExQYXJhbV8uZ2V0RGVwbG95bWVudEZpbGVzKCkubGVuZ3RoID4gMCkgewotCi0JCQkJU3RyaW5nIHdzZGRfZGVwbG95ID0gamF2YVdTRExQYXJhbV8uZ2V0RGVwbG95bWVudEZpbGVzKClbMF07Ci0JCQkJSVBhdGggZGVwbG95UGF0aCA9IG5ldyBQYXRoKHdzZGRfZGVwbG95KTsKLQkJCQlTdHJpbmcgZGVwbG95QmFja3VwID0KLQkJCQkJZGVwbG95UGF0aAotCQkJCQkJLnJlbW92ZUxhc3RTZWdtZW50cygxKQotCQkJCQkJLmFwcGVuZChERVBMT1lfQkFLKQotCQkJCQkJLnRvU3RyaW5nKCk7Ci0JCQkJRmlsZVV0aWwuY3JlYXRlVGFyZ2V0RmlsZSh3c2RkX2RlcGxveSwgZGVwbG95QmFja3VwLCB0cnVlKTsKLQkJCQlTdHJpbmcgZGVwbG95WFNMID0gZ2V0UGx1Z2luRmlsZVBhdGgoREVQTE9ZX1hTTCkudG9TdHJpbmcoKTsKLQotCQkJCVRyYW5zZm9ybWVyRmFjdG9yeSB0RmFjdG9yeSA9IFRyYW5zZm9ybWVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotCi0JCQkJLy8gVXNlIHRoZSBUcmFuc2Zvcm1lckZhY3RvcnkgdG8gaW5zdGFudGlhdGUgYSBUcmFuc2Zvcm1lciB0aGF0IHdpbGwgd29yayB3aXRoICAKLQkJCQkvLyB0aGUgc3R5bGVzaGVldCB5b3Ugc3BlY2lmeS4gVGhpcyBtZXRob2QgY2FsbCBhbHNvIHByb2Nlc3NlcyB0aGUgc3R5bGVzaGVldAotCQkJCS8vIGludG8gYSBjb21waWxlZCBUZW1wbGF0ZXMgb2JqZWN0LgotCQkJCVRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyID0KLQkJCQkJdEZhY3RvcnkubmV3VHJhbnNmb3JtZXIobmV3IFN0cmVhbVNvdXJjZShkZXBsb3lYU0wpKTsKLQkJCQl0cmFuc2Zvcm1lci5zZXRQYXJhbWV0ZXIoQ0xBU1NOQU1FX1BBUkFNLCBqYXZhV1NETFBhcmFtXy5nZXRCZWFuTmFtZSgpKTsKLQotCQkJCS8vIFVzZSB0aGUgVHJhbnNmb3JtZXIgdG8gYXBwbHkgdGhlIGFzc29jaWF0ZWQgVGVtcGxhdGVzIG9iamVjdCB0byBhbiBYTUwgZG9jdW1lbnQKLQkJCQkvLyAoZm9vLnhtbCkgYW5kIHdyaXRlIHRoZSBvdXRwdXQgdG8gYSBmaWxlIChmb28ub3V0KS4KLSAgICAgICAgRmlsZU91dHB1dFN0cmVhbSB3c2RkU3RyZWFtID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oIHdzZGRfZGVwbG95ICk7Ci0gICAgICAgIAotICAgICAgICB0cnkKLSAgICAgICAgewotCQkJCSAgdHJhbnNmb3JtZXIudHJhbnNmb3JtKCBuZXcgU3RyZWFtU291cmNlKGRlcGxveUJhY2t1cCksIG5ldyBTdHJlYW1SZXN1bHQod3NkZFN0cmVhbSkgKTsKLSAgICAgICAgfQotICAgICAgICBmaW5hbGx5Ci0gICAgICAgIHsKLSAgICAgICAgICB3c2RkU3RyZWFtLmNsb3NlKCk7Ci0gICAgICAgIH0KLQotCi0gICAgICAgIElSZXNvdXJjZSBkZXBsb3lGaWxlID0gUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2VBdExvY2F0aW9uKHdzZGRfZGVwbG95LCBwcm9qZWN0KTsKLSAgICAgICAgaWYoIGRlcGxveUZpbGUgIT0gbnVsbCApCi0gICAgICAgIHsKLSAgICAgICAgCWRlcGxveUZpbGUucmVmcmVzaExvY2FsKCBJUmVzb3VyY2UuREVQVEhfWkVSTywgbW9uaXRvciApOwotICAgICAgICB9Ci0KLQkJfQotCi0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCSAgICBTdHJpbmdbXSBlcnJvck1zZ1N0cmluZ3MgPSBuZXcgU3RyaW5nW117cHJvamVjdC50b1N0cmluZygpLCBvdXRwdXRMb2NhdGlvbi50b1N0cmluZygpLCB3ZWJDb250ZW50UGF0aC50b1N0cmluZygpfTsgCi0JCSAgICBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZChBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9VUERBVEVfQVhJU19XU0RELCBlcnJvck1zZ1N0cmluZ3MpLCBlKTsKLQkJICAgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkgICAgcmV0dXJuIHN0YXR1czsJCSAgCQkgIAotCQl9Ci0JCQotCQlyZXR1cm4gc3RhdHVzOwotCX0KLSAgCi0JcHJpdmF0ZSBJUGF0aCBnZXRQbHVnaW5GaWxlUGF0aChTdHJpbmcgcGx1Z2luZmlsZU5hbWUpCi0JCXRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJdHJ5IHsKLQotCQkJVVJMIGxvY2FsVVJMID0KLQkJCQlQbGF0Zm9ybS5hc0xvY2FsVVJMKAotCQkJCQlCdW5kbGVVdGlscy5nZXRVUkxGcm9tQnVuZGxlKCBXZWJTZXJ2aWNlQXhpc0NyZWF0aW9uVUlQbHVnaW4uSUQsIHBsdWdpbmZpbGVOYW1lKSk7Ci0JCQlyZXR1cm4gbmV3IFBhdGgobG9jYWxVUkwuZ2V0RmlsZSgpKTsKLQkJfSBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKAotCQkJCW5ldyBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzKAotCQkJCQlJU3RhdHVzLldBUk5JTkcsCi0JCQkJCVdlYlNlcnZpY2VBeGlzQ3JlYXRpb25VSVBsdWdpbi5JRCwKLQkJCQkJMCwKLQkJCQkJQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5NU0dfUExVR0lOX0ZJTEVfVVJMLAotCQkJCQllKSk7Ci0JCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKAotCQkJCW5ldyBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzKAotCQkJCQlJU3RhdHVzLldBUk5JTkcsCi0JCQkJCVdlYlNlcnZpY2VBeGlzQ3JlYXRpb25VSVBsdWdpbi5JRCwKLQkJCQkJMCwKLQkJCQkJQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5NU0dfUExVR0lOX0ZJTEVfVVJMLAotCQkJCQllKSk7Ci0JCX0KLQl9Ci0KLQotCS8qKgotCSogU2V0cyB0aGUgamF2YVdTRExQYXJhbS4KLQkqIEBwYXJhbSBqYXZhV1NETFBhcmFtIFRoZSBqYXZhV1NETFBhcmFtIHRvIHNldAotCSovCi0JcHVibGljIHZvaWQgc2V0SmF2YVdTRExQYXJhbShKYXZhV1NETFBhcmFtZXRlciBqYXZhV1NETFBhcmFtKSB7Ci0JCWphdmFXU0RMUGFyYW1fID0gamF2YVdTRExQYXJhbTsKLQl9Ci0JCi0JcHVibGljIEphdmFXU0RMUGFyYW1ldGVyIGdldEphdmFXU0RMUGFyYW0oKQotCXsKLQkJcmV0dXJuIGphdmFXU0RMUGFyYW1fOwotCX0JCi0KLQlwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlUHJvamVjdChJUHJvamVjdCBzZXJ2aWNlUHJvamVjdCkKLQl7Ci0JICBzZXJ2aWNlUHJvamVjdF8gPSBzZXJ2aWNlUHJvamVjdDsKLQl9Ci0JICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dpZGdldHMvYmVhbi9CVUF4aXNEZWZhdWx0aW5nQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd2lkZ2V0cy9iZWFuL0JVQXhpc0RlZmF1bHRpbmdDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiNzk1YTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd2lkZ2V0cy9iZWFuL0JVQXhpc0RlZmF1bHRpbmdDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLndpZGdldHMuYmVhbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuQXhpc0NyZWF0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLnZhbGlkYXRlLlZhbGlkYXRpb25NYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZGlzY292ZXJ5LldlYlNlcnZpY2VzUGFyc2VyRXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlc1BhcnNlcjsKLQotLyoqCi0gKiAKLSAqLwotcHVibGljIGNsYXNzIEJVQXhpc0RlZmF1bHRpbmdDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLSAgCi0gIC8vUHJvdmlkZQotICBwcml2YXRlIElTZXJ2ZXIgc2VydmljZUV4aXN0aW5nU2VydmVyXzsKLSAgcHJpdmF0ZSBKYXZhV1NETFBhcmFtZXRlciBqYXZhV1NETFBhcmFtXzsKLSAgcHJpdmF0ZSBTdHJpbmcgamF2YUJlYW5OYW1lXzsKLSAgcHJpdmF0ZSBXZWJTZXJ2aWNlc1BhcnNlciBwYXJzZXJfOwotICBwcml2YXRlIGJvb2xlYW4gZm9yY2VCdWlsZF8gPSB0cnVlOwotICBwcml2YXRlIEJvb2xlYW4gSXNXZWJQcm9qZWN0U3RhcnR1cFJlcXVlc3RlZCA9IEJvb2xlYW4uVFJVRTsgLy8gcnNrIHJldmlzaXQKLSAgcHJpdmF0ZSBWYWxpZGF0aW9uTWFuYWdlciB2YWxpZGF0aW9uTWFuYWdlcl87Ci0gIHByaXZhdGUgYm9vbGVhbiBjdXN0b21pemVTZXJ2aWNlTWFwcGluZ3NfID0gZmFsc2U7Ci0gIAotICAvL1RoaXMgaXMgcHJveHkgYW5kIGNsaWVudCByZWxhdGVkIGluZm9ybWF0aW9uCi0gIC8vd2hpY2ggY2FuIGJlIG51bGxlZCBmb3IgY29tbWFuZHMgZGVhbGluZwotICAvL3dpdGggc2VydmljZSBjcmVhdGlvbi4KLSAgLy9yc2sgcmV2aXNpdAotICBwcml2YXRlIEJvb2xlYW4gaXNQcm94eVByb2plY3RfID0gQm9vbGVhbi5GQUxTRTsKLSAgcHJpdmF0ZSBTdHJpbmcgY2xpZW50UnVudGltZUlEXyA9IG51bGw7Ci0gIHByaXZhdGUgSVByb2plY3QgcHJveHlQcm9qZWN0XyA9IG51bGw7Ci0gIHByaXZhdGUgSVByb2plY3Qgc2FtcGxlUHJvamVjdF8gPSBudWxsOwotICBwcml2YXRlIFN0cmluZyBzYW1wbGVTZXJ2ZXJUeXBlSURfID0gbnVsbDsKLSAgcHJpdmF0ZSBJU2VydmVyIHNhbXBsZUV4aXN0aW5nU2VydmVyXyA9IG51bGw7Ci0gIAotIAotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkgCi0gIHsKLQlJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQgPSBnZXRFbnZpcm9ubWVudCgpOwotICAgIAotCS8vamF2YVdTRExQYXJhbQotCWphdmFXU0RMUGFyYW1fID0gbmV3IEphdmFXU0RMUGFyYW1ldGVyKCk7Ci0gICAgCi0JaWYgKGphdmFCZWFuTmFtZV8gPT0gbnVsbCkgewotCQlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKAotCQkJCUF4aXNDcmVhdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX0NBTk5PVF9OT19KQVZBX0JFQU4pOwotCQllbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJcmV0dXJuIHN0YXR1czsKLQl9Ci0gICAgCi0gICAgLy9wYXJzZXIKLSAgICBwYXJzZXJfID0gbmV3IFdlYlNlcnZpY2VzUGFyc2VyRXh0KCk7Ci0gICAgCi0gICAgLy92YWxpZGF0aW9uTWFuYWdlcgotICAgIHZhbGlkYXRpb25NYW5hZ2VyXyA9IG5ldyBWYWxpZGF0aW9uTWFuYWdlcigpOwotICAgIAotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0gIAotCQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBjbGllbnRSdW50aW1lSURfLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRDbGllbnRSdW50aW1lSUQoKQotICB7Ci0gICAgcmV0dXJuIGNsaWVudFJ1bnRpbWVJRF87Ci0gIH0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgZm9yY2VCdWlsZF8uCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRGb3JjZUJ1aWxkKCkKLSAgewotICAgIHJldHVybiBmb3JjZUJ1aWxkXzsKLSAgfQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBpc1Byb3h5UHJvamVjdF8uCi0gICAqLwotICBwdWJsaWMgQm9vbGVhbiBnZXRJc1Byb3h5UHJvamVjdCgpCi0gIHsKLSAgICByZXR1cm4gaXNQcm94eVByb2plY3RfOwotICB9Ci0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIGphdmFCZWFuTmFtZV8uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEphdmFCZWFuTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gamF2YUJlYW5OYW1lXzsKLSAgfQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBqYXZhV1NETFBhcmFtXy4KLSAgICovCi0gIHB1YmxpYyBKYXZhV1NETFBhcmFtZXRlciBnZXRKYXZhV1NETFBhcmFtKCkKLSAgewotICAgIHJldHVybiBqYXZhV1NETFBhcmFtXzsKLSAgfQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBwYXJzZXJfLgotICAgKi8KLSAgcHVibGljIFdlYlNlcnZpY2VzUGFyc2VyIGdldFBhcnNlcigpCi0gIHsKLSAgICByZXR1cm4gcGFyc2VyXzsKLSAgfQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBwcm94eVByb2plY3RfLgotICAgKi8KLSAgcHVibGljIElQcm9qZWN0IGdldFByb3h5UHJvamVjdCgpCi0gIHsKLSAgICByZXR1cm4gcHJveHlQcm9qZWN0XzsKLSAgfQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBzYW1wbGVFeGlzdGluZ1NlcnZlcl8uCi0gICAqLwotICBwdWJsaWMgSVNlcnZlciBnZXRTYW1wbGVFeGlzdGluZ1NlcnZlcigpCi0gIHsKLSAgICByZXR1cm4gc2FtcGxlRXhpc3RpbmdTZXJ2ZXJfOwotICB9Ci0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHNhbXBsZVByb2plY3RfLgotICAgKi8KLSAgcHVibGljIElQcm9qZWN0IGdldFNhbXBsZVByb2plY3QoKQotICB7Ci0gICAgcmV0dXJuIHNhbXBsZVByb2plY3RfOwotICB9Ci0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHNhbXBsZVNlcnZlclR5cGVJRF8uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFNhbXBsZVNlcnZlclR5cGVJRCgpCi0gIHsKLSAgICByZXR1cm4gc2FtcGxlU2VydmVyVHlwZUlEXzsKLSAgfQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSB2YWxpZGF0aW9uTWFuYWdlcl8uCi0gICAqLwotICBwdWJsaWMgVmFsaWRhdGlvbk1hbmFnZXIgZ2V0VmFsaWRhdGlvbk1hbmFnZXIoKQotICB7Ci0gICAgcmV0dXJuIHZhbGlkYXRpb25NYW5hZ2VyXzsKLSAgfQotICAKLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgc2VydmljZUV4aXN0aW5nU2VydmVyXy4KLSAgICovCi0gIHB1YmxpYyBJU2VydmVyIGdldFNlcnZpY2VFeGlzdGluZ1NlcnZlcigpCi0gIHsKLSAgICByZXR1cm4gc2VydmljZUV4aXN0aW5nU2VydmVyXzsKLSAgfQotICAKLSAKLSAgcHVibGljIGJvb2xlYW4gZ2V0Q3VzdG9taXplU2VydmljZU1hcHBpbmdzKCkKLSAgewotICAgIHJldHVybiBjdXN0b21pemVTZXJ2aWNlTWFwcGluZ3NfOwotICB9Ci0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIGlzV2ViUHJvamVjdFN0YXJ0dXBSZXF1ZXN0ZWQuCi0gICAqLwotICBwdWJsaWMgQm9vbGVhbiBnZXRJc1dlYlByb2plY3RTdGFydHVwUmVxdWVzdGVkKCkKLSAgewotICAgIHJldHVybiBJc1dlYlByb2plY3RTdGFydHVwUmVxdWVzdGVkOwotICB9Ci0KLXB1YmxpYyB2b2lkIHNldEphdmFCZWFuTmFtZShTdHJpbmcgamF2YUJlYW5OYW1lKSB7Ci0JdGhpcy5qYXZhQmVhbk5hbWVfID0gamF2YUJlYW5OYW1lOwotfQotICAKLS8vICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoVHlwZVJ1bnRpbWVTZXJ2ZXIgaWRzKQotLy8gIHsKLS8vICAgIHNlcnZpY2VJZHNfID0gaWRzOwotLy8gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dpZGdldHMvYmVhbi9CZWFuQ29uZmlnV2lkZ2V0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS93aWRnZXRzL2JlYW4vQmVhbkNvbmZpZ1dpZGdldC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjhmNzJhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dpZGdldHMvYmVhbi9CZWFuQ29uZmlnV2lkZ2V0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMzIxICAgMTI4ODI3IGpvYW4gLSBKb2FuIEhhZ2dhcnR5LCByZW1vdmUgcmVkdW5kYW50IHdzZGwgVVJJLCBmb2xkZXIgYW5kIGZpbGUgY29udHJvbHMKLSAqIDIwMDYwNTI0ICAgMTI4NjAxIGFuZHl6aGFpQGNhLmlibS5jb20gLSBBbmR5IFpoYWkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53aWRnZXRzLmJlYW47Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tb24uSmF2YVdTRExQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuQXhpc0NyZWF0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5jb21tb24uVUlVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkdyb3VwOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5TaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0RGF0YUV2ZW50czsKLQotCi1wdWJsaWMgY2xhc3MgQmVhbkNvbmZpZ1dpZGdldCBleHRlbmRzIFNpbXBsZVdpZGdldERhdGFDb250cmlidXRvciAKLXsKLQotICBwcml2YXRlIEJ1dHRvbiAgIHJwY0VuY29kZWRCdXR0b25fOwotICBwcml2YXRlIEJ1dHRvbiAgIHJwY0xpdGVyYWxCdXR0b25fOwotICBwcml2YXRlIEJ1dHRvbiAgIGRvY0xpdGVyYWxCdXR0b25fOwotICAKLSAgcHJpdmF0ZSBMaXN0ZW5lciBzdGF0dXNMaXN0ZW5lcl87Ci0gIAotICBwcml2YXRlIEphdmFXU0RMUGFyYW1ldGVyIGphdmFQYXJhbWV0ZXJfOwotICAKLSAgLyogQ09OVEVYVF9JRCBQQkNGMDAwMSBmb3IgdGhlIEJlYW4gQ29uZmlnIFBhZ2UgKi8KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9QQkNGX1BBR0UgPSAiUEJDRjAwMDEiOyAvLyROT04tTkxTLTEkCi0JCi0gIHByaXZhdGUgU3RyaW5nIHdzZGxGb2xkZXJfOwotICAKLSAgcHJpdmF0ZSBUZXh0IHdzZGxGaWxlVGV4dF87Ci0gIC8qIENPTlRFWFRfSUQgUEJDRjAwMDcgZm9yIHRoZSBXU0RMIEZpbGUgZmllbGQgb2YgdGhlIEJlYW4gQ29uZmlnIFBhZ2UgKi8KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9QQkNGX1RFWFRfV1NETF9GSUxFID0gIlBCQ0YwMDA3IjsgLy8kTk9OLU5MUy0xJAotCQotICBwcml2YXRlIFRyZWUgbWV0aG9kc1RyZWVfOwotICAvKiBDT05URVhUX0lEIFBCTUUwMDAyIGZvciB0aGUgTWV0aG9kcyB0cmVlIG9mIHRoZSBCZWFuIE1ldGhvZHMgUGFnZSAqLwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBJTkZPUE9QX1BCTUVfVFJFRV9NRVRIT0RTID0gIlBCTUUwMDAyIjsgLy8kTk9OLU5MUy0xJAotCQotICBwcml2YXRlIEJ1dHRvbiBzZWxlY3RBbGxNZXRob2RzQnV0dG9uXzsKLSAgLyogQ09OVEVYVF9JRCBQQk1FMDAxMCBmb3IgdGhlIFNlbGVjdCBBbGwgYnV0dG9uIG9mIHRoZSBCZWFuIE1ldGhvZHMgUGFnZSAqLwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBJTkZPUE9QX1BCTUVfQlVUVE9OX1NFTEVDVF9BTEwgPSAiUEJNRTAwMTAiOyAvLyROT04tTkxTLTEkCi0JCi0gIHByaXZhdGUgQnV0dG9uIGRlc2VsZWN0QWxsTWV0aG9kc0J1dHRvbl87Ci0gIC8qIENPTlRFWFRfSUQgUEJNRTAwMTEgZm9yIHRoZSBEZXNlbGVjdCBBbGwgYnV0dG9uIG9mIHRoZSBCZWFuIE1ldGhvZHMgUGFnZSAqLwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBJTkZPUE9QX1BCTUVfQlVUVE9OX0RFU0VMRUNUX0FMTCA9ICJQQk1FMDAxMSI7IC8vJE5PTi1OTFMtMSQKLQkKLSAgcHJpdmF0ZSBCdXR0b24gc2hvd01hcHBpbmdzQ2hlY2tib3hfOwotICAvKiBDT05URVhUX0lEIFBCQ0YwMDE2IGZvciB0aGUgU2hvdyBNYXBwaW5ncyBjaGVja2JveCBvZiB0aGUgQmVhbiBNZXRob2RzIFBhZ2UgKi8gICAKLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QMk5fU0hPV19NQVBQSU5HUyA9ICJQQkNGMDAxNiI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgV2lkZ2V0RGF0YUV2ZW50cyBhZGRDb250cm9scyggQ29tcG9zaXRlIHBhcmVudCwgTGlzdGVuZXIgc3RhdHVzTGlzdGVuZXIgKQotICB7Ci0JU3RyaW5nIHBsdWdpbklkXyA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aSI7CSAgCi0KLSAgICBVSVV0aWxzICAgICAgdWlVdGlscyAgICAgICAgPSBuZXcgVUlVdGlscyggcGx1Z2luSWRfICk7Ci0gICAgVUlVdGlscyAgICAgIGJhc2VDb25VaVV0aWxzID0gbmV3IFVJVXRpbHMoIHBsdWdpbklkXyApOwotICAgIAotICAgIHN0YXR1c0xpc3RlbmVyXyA9IHN0YXR1c0xpc3RlbmVyOyAgICAKLQlwYXJlbnQuc2V0VG9vbFRpcFRleHQoIEF4aXNDcmVhdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QQkNGX1BBR0UgICk7Ci0JUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscCggcGFyZW50LCBwbHVnaW5JZF8gKyAiLiIgKyBJTkZPUE9QX1BCQ0ZfUEFHRSApOwotICAgIAotICAgIENvbXBvc2l0ZSBjb25maWdHcm91cCA9IHVpVXRpbHMuY3JlYXRlQ29tcG9zaXRlKCBwYXJlbnQsIDIgKTsgICAgCi0gICAgCi0gICAgd3NkbEZpbGVUZXh0XyA9IHVpVXRpbHMuY3JlYXRlVGV4dCggY29uZmlnR3JvdXAsIEF4aXNDcmVhdGlvblVJTWVzc2FnZXMuTEFCRUxfT1VUUFVUX0ZJTEVfTkFNRSwKLSAgICAJCUF4aXNDcmVhdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QQkNGX1RFWFRfV1NETF9GSUxFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElORk9QT1BfUEJDRl9URVhUX1dTRExfRklMRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTV1QuU0lOR0xFIHwgU1dULkJPUkRFUiAgKTsKLSAgICB3c2RsRmlsZVRleHRfLmFkZExpc3RlbmVyKCBTV1QuTW9kaWZ5LCBzdGF0dXNMaXN0ZW5lciApOwotICAgIAotICAgIC8vIFRPRE8gdGhpcyBncm91cCBoYXMgbm8gVE9PTFRJUCBvciBJTkZPUE9QLgotICAgIEdyb3VwICAgIG1ldGhvZHNHcm91cCA9IGJhc2VDb25VaVV0aWxzLmNyZWF0ZUdyb3VwKCBwYXJlbnQsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9NRVRIT0RTLCBudWxsLCBudWxsICk7Ci0JbWV0aG9kc0dyb3VwLnNldExheW91dERhdGEoIHVpVXRpbHMuY3JlYXRlRmlsbEFsbCgpICk7Ci0JCi0JR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotCWxheW91dC5tYXJnaW5IZWlnaHQgPSAwOwotCWxheW91dC5tYXJnaW5XaWR0aCA9IDA7Ci0JbWV0aG9kc0dyb3VwLnNldExheW91dCggbGF5b3V0ICk7Ci0JCi0JbWV0aG9kc1RyZWVfID0gdWlVdGlscy5jcmVhdGVUcmVlKCBtZXRob2RzR3JvdXAsIEF4aXNDcmVhdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QQk1FX1RSRUVfTUVUSE9EUywgCi0JCQkJCQkJCQkJSU5GT1BPUF9QQk1FX1RSRUVfTUVUSE9EUywKLQkgICAgICAgICAgICAgICAgICAgCQkJCSAgIFNXVC5NVUxUSSB8IFNXVC5CT1JERVIgfCBTV1QuVl9TQ1JPTEwgfCBTV1QuSF9TQ1JPTEwJfCBTV1QuQ0hFQ0sgKTsKLQltZXRob2RzVHJlZV8uYWRkTGlzdGVuZXIoIFNXVC5TZWxlY3Rpb24sIHN0YXR1c0xpc3RlbmVyICk7Ci0KLSAgICBDb21wb3NpdGUgc2VsZWN0QnV0dG9ucyA9IHVpVXRpbHMuY3JlYXRlQ29tcG9zaXRlKCBtZXRob2RzR3JvdXAsIDIgKTsKLSAgICAKLSAgICBzZWxlY3RBbGxNZXRob2RzQnV0dG9uXyAKLSAgICAgID0gYmFzZUNvblVpVXRpbHMuY3JlYXRlUHVzaEJ1dHRvbiggc2VsZWN0QnV0dG9ucywgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkJVVFRPTl9TRUxFQ1RfQUxMLCAKLSAgICAJCSAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUEJNRV9CVVRUT05fU0VMRUNUX0FMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkZPUE9QX1BCTUVfQlVUVE9OX1NFTEVDVF9BTEwgKTsKLSAgICBzZWxlY3RBbGxNZXRob2RzQnV0dG9uXy5hZGRTZWxlY3Rpb25MaXN0ZW5lciggbmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKCBTZWxlY3Rpb25FdmVudCBldnQgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVNlbGVjdEFsbCggdHJ1ZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgCi0gICAgZGVzZWxlY3RBbGxNZXRob2RzQnV0dG9uXyAKLSAgICAgID0gYmFzZUNvblVpVXRpbHMuY3JlYXRlUHVzaEJ1dHRvbiggc2VsZWN0QnV0dG9ucywgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkJVVFRPTl9ERVNFTEVDVF9BTEwsIAotICAgIAkJICBDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QQk1FX0JVVFRPTl9ERVNFTEVDVF9BTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5GT1BPUF9QQk1FX0JVVFRPTl9ERVNFTEVDVF9BTEwgKTsKLSAgICBkZXNlbGVjdEFsbE1ldGhvZHNCdXR0b25fLmFkZFNlbGVjdGlvbkxpc3RlbmVyKCBuZXcgU2VsZWN0aW9uQWRhcHRlcigpIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKCBTZWxlY3Rpb25FdmVudCBldnQgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVTZWxlY3RBbGwoIGZhbHNlICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgCi0gICAgLy8gVE9ETyB0aGlzIGdyb3VwIGhhcyBubyBUT09MVElQIG9yIElORk9QT1AuCi0gICAgR3JvdXAgc3R5bGVHcm91cCA9IHVpVXRpbHMuY3JlYXRlR3JvdXAoIHBhcmVudCwgQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5MQUJFTF9TVFlMRV9VU0UsIG51bGwsIG51bGwgKTsKLSAgICAKLSAgICAvLyBUT0RPIHJhZGlvIGJ1dHRvbnMgaGF2ZSBubyBUT09MVElQIG9yIElORk9QT1AuCi0gICAgZG9jTGl0ZXJhbEJ1dHRvbl8gPSB1aVV0aWxzLmNyZWF0ZVJhZGlvQnV0dG9uKCBzdHlsZUdyb3VwLCBBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLlNUWUxFX0RPQ19MSVRFUkFMLCBudWxsLCBudWxsICk7Ci0gICAgcnBjTGl0ZXJhbEJ1dHRvbl8gPSB1aVV0aWxzLmNyZWF0ZVJhZGlvQnV0dG9uKCBzdHlsZUdyb3VwLCBBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLlNUWUxFX1JQQ19MSVRFUkFMLCBudWxsLCBudWxsICk7Ci0gICAgcnBjRW5jb2RlZEJ1dHRvbl8gPSB1aVV0aWxzLmNyZWF0ZVJhZGlvQnV0dG9uKCBzdHlsZUdyb3VwLCBBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLlNUWUxFX1JQQ19FTkNPREVELCBudWxsLCBudWxsICk7Ci0gICAgCi0gICAgc2hvd01hcHBpbmdzQ2hlY2tib3hfID0gdWlVdGlscy5jcmVhdGVDaGVja2JveCggcGFyZW50LCBBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLkxBQkVMX0VYUExPUkVfTUFQUElOR1NfQkVBTjJYTUwsCi0gICAgCQlBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUDJOX1NIT1dfTUFQUElOR1MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5GT1BPUF9QMk5fU0hPV19NQVBQSU5HUyApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgaGFuZGxlU2VsZWN0QWxsKCBib29sZWFuIHZhbHVlICkKLSAgewotCVRyZWVJdGVtW10gaXRlbXMgPSBtZXRob2RzVHJlZV8uZ2V0SXRlbXMoKTsKLQkKLQlmb3IoIGludCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrICkgCi0JewotCSAgaXRlbXNbaV0uc2V0Q2hlY2tlZCh2YWx1ZSk7Ci0JfQotCQotCXN0YXR1c0xpc3RlbmVyXy5oYW5kbGVFdmVudCggbnVsbCApOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRDdXN0b21pemVTZXJ2aWNlTWFwcGluZ3MoIGJvb2xlYW4gdmFsdWUgKQotICB7Ci0gICAgc2hvd01hcHBpbmdzQ2hlY2tib3hfLnNldFNlbGVjdGlvbiggdmFsdWUgKTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0Q3VzdG9taXplU2VydmljZU1hcHBpbmdzKCkKLSAgewotICAgIHJldHVybiBzaG93TWFwcGluZ3NDaGVja2JveF8gPT0gbnVsbCA/IGZhbHNlIDogc2hvd01hcHBpbmdzQ2hlY2tib3hfLmdldFNlbGVjdGlvbigpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRKYXZhUGFyYW1ldGVyKCBKYXZhV1NETFBhcmFtZXRlciBqYXZhUGFyYW1ldGVyICkKLSAgewotICAgIGphdmFQYXJhbWV0ZXJfID0gamF2YVBhcmFtZXRlcjsKLSAgICAKLQlTdHJpbmcgd3NkbExvY2F0aW9uID0gamF2YVBhcmFtZXRlci5nZXRPdXRwdXRXc2RsTG9jYXRpb24oKTsKLQlJUGF0aCB3c2RsUGF0aCA9IG5ldyBQYXRoKCB3c2RsTG9jYXRpb24gKTsKLQkKLQl3c2RsRm9sZGVyXyA9IHdzZGxQYXRoLnJlbW92ZUxhc3RTZWdtZW50cygxKS50b1N0cmluZygpOyAgICAKLQl3c2RsRmlsZVRleHRfLnNldFRleHQod3NkbFBhdGgubGFzdFNlZ21lbnQoKSk7Ci0gICAgCi0JbWV0aG9kc1RyZWVfLnJlbW92ZUFsbCgpOwotCUhhc2h0YWJsZSBtZXRob2RzID0gamF2YVBhcmFtZXRlci5nZXRNZXRob2RzKCk7Ci0JRW51bWVyYXRpb24gZSA9IG1ldGhvZHMua2V5cygpOwotCQotCXdoaWxlKCBlLmhhc01vcmVFbGVtZW50cygpICkKLQl7Ci0JICBTdHJpbmcgICBuYW1lID0gKFN0cmluZykgZS5uZXh0RWxlbWVudCgpOwotICAgICAgVHJlZUl0ZW0gaXRlbSA9IG5ldyBUcmVlSXRlbShtZXRob2RzVHJlZV8sIFNXVC5OVUxMKTsKLSAgICAgIAotICAgCSAgaXRlbS5zZXREYXRhKG5hbWUpOwotICAgICAgaXRlbS5zZXRUZXh0KG5hbWUpOwotICAgICAgaXRlbS5zZXRDaGVja2VkKCgoKEJvb2xlYW4pIG1ldGhvZHMuZ2V0KG5hbWUpKS5ib29sZWFuVmFsdWUoKSkpOwotCX0KLQkKLQlUcmVlSXRlbVtdIGl0ZW1zID0gbWV0aG9kc1RyZWVfLmdldEl0ZW1zKCk7Ci0JCi0JaWYoIGl0ZW1zLmxlbmd0aCA+IDAgKSAKLQl7Ci0JICBtZXRob2RzVHJlZV8uc2V0U2VsZWN0aW9uKCBuZXcgVHJlZUl0ZW1bXXsgaXRlbXNbMF0gfSApOwotCX0KLQkKLQlTdHJpbmcgc3R5bGUgPSBqYXZhUGFyYW1ldGVyLmdldFN0eWxlKCk7Ci0JCi0JaWYoIHN0eWxlLmVxdWFscyggSmF2YVdTRExQYXJhbWV0ZXIuU1RZTEVfUlBDICkgKQotCXsKLQkgIHJwY0VuY29kZWRCdXR0b25fLnNldFNlbGVjdGlvbih0cnVlKTsKLQl9Ci0JZWxzZSBpZiggc3R5bGUuZXF1YWxzKCBKYXZhV1NETFBhcmFtZXRlci5TVFlMRV9ET0NVTUVOVCApICkKLQl7Ci0JICBycGNMaXRlcmFsQnV0dG9uXy5zZXRTZWxlY3Rpb24odHJ1ZSk7CSAgCi0JfQotCWVsc2UKLQl7Ci0JICBkb2NMaXRlcmFsQnV0dG9uXy5zZXRTZWxlY3Rpb24odHJ1ZSk7ICAKLQl9Ci0gIH0KLSAgCi0gIHB1YmxpYyBKYXZhV1NETFBhcmFtZXRlciBnZXRKYXZhUGFyYW1ldGVyKCkKLSAgewotICAgIAotICAgIElQYXRoIHdzZGxQYXRoIAotICAgID0gbmV3IFBhdGgoIHdzZGxGb2xkZXJfLnRyaW0oKSApLmFwcGVuZCggd3NkbEZpbGVUZXh0Xy5nZXRUZXh0KCkudHJpbSgpICk7Ci0gICAgCi0JLy8gVE9ETyBEbyB3ZSBuZWVkIHRvIGdvIHRvIHRoZSBlY2xpcHNlIGZpbGUgc3lzdGVtPz8KLQkvL1N0cmluZyB3c2RsTG9jYXRpb24gPSB3b3Jrc3BhY2UuZ2V0RmlsZSh3c2RsUGF0aCkuZ2V0TG9jYXRpb24oKS50b1N0cmluZygpOwotCVN0cmluZyB3c2RsTG9jYXRpb24gPSB3c2RsUGF0aC50b1N0cmluZygpOwotCQotCWphdmFQYXJhbWV0ZXJfLnNldE91dHB1dFdzZGxMb2NhdGlvbih3c2RsTG9jYXRpb24pOwotCWphdmFQYXJhbWV0ZXJfLnNldElucHV0V3NkbExvY2F0aW9uKG5ldyBGaWxlKHdzZGxMb2NhdGlvbikudG9VUkkoKS50b1N0cmluZygpKTsKLQkKLQlIYXNodGFibGUgbWV0aG9kcyA9IG5ldyBIYXNodGFibGUoKTsKLQotCVRyZWVJdGVtW10gaXRlbXMgPSBtZXRob2RzVHJlZV8uZ2V0SXRlbXMoKTsKLQkKLQlmb3IoIGludCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrICkgCi0JewotCSAgVHJlZUl0ZW0gaXRlbSA9IGl0ZW1zW2ldOwotCSAgbWV0aG9kcy5wdXQoKFN0cmluZylpdGVtLmdldERhdGEoKSwgbmV3IEJvb2xlYW4oaXRlbS5nZXRDaGVja2VkKCkpKTsKLQl9Ci0JCi0JamF2YVBhcmFtZXRlcl8uc2V0TWV0aG9kcyhtZXRob2RzKTsKLQkKLQlpZiggcnBjRW5jb2RlZEJ1dHRvbl8uZ2V0U2VsZWN0aW9uKCkpIAotCXsKLQkgIGphdmFQYXJhbWV0ZXJfLnNldFN0eWxlKEphdmFXU0RMUGFyYW1ldGVyLlNUWUxFX1JQQyk7Ci0JICBqYXZhUGFyYW1ldGVyXy5zZXRVc2UoSmF2YVdTRExQYXJhbWV0ZXIuVVNFX0VOQ09ERUQpOwotCX0gCi0JZWxzZSBpZiggcnBjTGl0ZXJhbEJ1dHRvbl8uZ2V0U2VsZWN0aW9uKCkpIAotCXsKLQkgIGphdmFQYXJhbWV0ZXJfLnNldFN0eWxlKEphdmFXU0RMUGFyYW1ldGVyLlNUWUxFX0RPQ1VNRU5UKTsKLQkgIGphdmFQYXJhbWV0ZXJfLnNldFVzZShKYXZhV1NETFBhcmFtZXRlci5VU0VfTElURVJBTCk7Ci0JfSAKLQllbHNlIAotCXsKLQkgIGphdmFQYXJhbWV0ZXJfLnNldFN0eWxlKEphdmFXU0RMUGFyYW1ldGVyLlNUWUxFX1dSQVBQRUQpOwotCSAgamF2YVBhcmFtZXRlcl8uc2V0VXNlKEphdmFXU0RMUGFyYW1ldGVyLlVTRV9MSVRFUkFMKTsKLQl9Ci0gICAgCi0JcmV0dXJuIGphdmFQYXJhbWV0ZXJfOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuV2lkZ2V0Q29udHJpYnV0b3IjZ2V0U3RhdHVzKCkKLSAgICovCi0gIHB1YmxpYyBJU3RhdHVzIGdldFN0YXR1cygpIAotICB7Ci0gICAgSVN0YXR1cyAgICAgICByZXN1bHQgICA9IG51bGw7Ci0gICAgCi0gICAgaWYoIHdzZGxGaWxlVGV4dF8uZ2V0VGV4dCgpLmVxdWFscyggIiIgKSApCi0gICAgewotICAgICAgcmVzdWx0ID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIEF4aXNDcmVhdGlvblVJTWVzc2FnZXMuUEFHRV9NU0dfTk9fRklMRV9TUEVDSUZJRUQgKTsgCi0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBUcmVlSXRlbVtdIGl0ZW1zICAgICAgICA9IG1ldGhvZHNUcmVlXy5nZXRJdGVtcygpOwotICAgICAgYm9vbGVhbiAgICBpdGVtU2VsZWN0ZWQgPSBmYWxzZTsKLSAgICAgIAotICAgICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IGl0ZW1zLmxlbmd0aDsgaW5kZXgrKyApCi0gICAgICB7Ci0gICAgICAgIGlmKCBpdGVtc1tpbmRleF0uZ2V0Q2hlY2tlZCgpICkKLSAgICAgICAgewotICAgICAgICAgIGl0ZW1TZWxlY3RlZCA9IHRydWU7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIAotICAgICAgaWYoICFpdGVtU2VsZWN0ZWQgKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5QQUdFX01TR19OT19NRVRIT0RfU0VMRUNURUQgKTsgCi0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dpZGdldHMvYmVhbi9WYWxpZGF0ZU9iamVjdFNlbGVjdGlvbkNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dpZGdldHMvYmVhbi9WYWxpZGF0ZU9iamVjdFNlbGVjdGlvbkNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGFjMDc0Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS93aWRnZXRzL2JlYW4vVmFsaWRhdGVPYmplY3RTZWxlY3Rpb25Db21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLndpZGdldHMuYmVhbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkphdmFDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5BeGlzQ3JlYXRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uSmF2YU1PRlV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLkphdmFSZXNvdXJjZUZpbHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi0KLXB1YmxpYyBjbGFzcyBWYWxpZGF0ZU9iamVjdFNlbGVjdGlvbkNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotICBwcml2YXRlIFN0cmluZyBKQVZBX0VYVEVOU0lPTiA9ICIuamF2YSI7IC8vJE5PTi1OTFMtMSQKLSAgcHJpdmF0ZSBTdHJpbmcgQ0xBU1NfRVhURU5TSU9OID0gIi5jbGFzcyI7IC8vJE5PTi1OTFMtMSQKLSAgcHJpdmF0ZSBJU3RydWN0dXJlZFNlbGVjdGlvbiBvYmplY3RTZWxlY3Rpb247Ci0gIHByaXZhdGUgU3RyaW5nIHNlcnZpY2VQcm9qZWN0TmFtZTsKLQotICAKLSAgLyoqCi0gICAqIFZhbGlkYXRlcyB0aGF0IHRoZSBzZWxlY3RlZCBKYXZhIGJlYW4gY2FuIGJlIGxvYWRlZCBmcm9tIHRoZSBzZXJ2aWNlIHByb2plY3QuIElmIGl0IGNhbid0LCBhbiBlcnJvciBpcyBkaXNwbGF5ZWQuCi0gICAqLwotICBwdWJsaWMgVmFsaWRhdGVPYmplY3RTZWxlY3Rpb25Db21tYW5kKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkgCi0JewotCQlJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQgPSBnZXRFbnZpcm9ubWVudCgpOwotICAgIC8vTWFrZSBzdXJlIGEgYmVhbiBpcyBzZWxlY3RlZAotICAgIFN0cmluZyBqYXZhQmVhbk5hbWUgPSBudWxsOwotICAgIGlmIChvYmplY3RTZWxlY3Rpb24gIT0gbnVsbCAmJiAhb2JqZWN0U2VsZWN0aW9uLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICBPYmplY3Qgb2JqZWN0ID0gb2JqZWN0U2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOwotICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFN0cmluZykKLSAgICAgIHsKLSAgICAgICAgamF2YUJlYW5OYW1lID0gKChTdHJpbmcpb2JqZWN0KTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgIAkvL1RoZSBPYmplY3RTZWxlY3Rpb25XaWRnZXQgbmV2ZXIgYXBwZWFyZWQgYW5kIHNvIHRoZSBJU3R1Y3R1cmVkU2VsZWN0aW9uIGZyb20gCi0gICAgICAJLy9PYmplY3RTZWxlY3Rpb25XaWRnZXRPdXRwdXRDb21tYW5kIGlzIHRoZSBpbml0aWFsIHNlbGVjdGlvbi4gCi0gICAgICAJLy9HZXQgdGhlIEphdmEgYmVhbiBuYW1lIGZyb20gdGhlIHNlbGVjdGlvbi4KLSAgICAgIAl0cnkKLQkJewotICAgICAgCSAgU3lzdGVtLm91dC5wcmludGxuKG9iamVjdC5nZXRDbGFzcygpLnRvU3RyaW5nKCkpOwotICAgICAgCSAgamF2YUJlYW5OYW1lID0gZ2V0SmF2YUJlYW5Gcm9tT2JqZWN0U2VsZWN0aW9uKG9iamVjdFNlbGVjdGlvbik7Ci0JCX0gY2F0Y2ggKENvcmVFeGNlcHRpb24gY2UpCi0JCXsKLQkJICBJU3RhdHVzIGVycm9yU3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfQ0FOTk9UX05PX0pBVkFfQkVBTik7Ci0JCSAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKGVycm9yU3RhdHVzKTsKLQkJICByZXR1cm4gZXJyb3JTdGF0dXM7CQkJCi0JCX0KLSAgICAgIH0KLSAgICB9ICAgIAotICAgIAotICAgIGlmIChqYXZhQmVhbk5hbWU9PW51bGwgfHwgamF2YUJlYW5OYW1lLmxlbmd0aCgpPT0wKQotICAgIHsKLSAgICAgIElTdGF0dXMgZXJyb3JTdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9DQU5OT1RfTk9fSkFWQV9CRUFOKTsKLSAgICAgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihlcnJvclN0YXR1cyk7Ci0gICAgICByZXR1cm4gZXJyb3JTdGF0dXM7Ci0gICAgfQotICAgIAotICAgIC8vTWFrZSBzdXJlIGEgcHJvamVjdCBpcyBzZWxlY3RlZAotICAgIElQcm9qZWN0IHNlcnZpY2VQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHNlcnZpY2VQcm9qZWN0TmFtZSk7Ci0gICAgaWYgKHNlcnZpY2VQcm9qZWN0PT1udWxsKQotICAgIHsKLSAgICAgIElTdGF0dXMgZXJyb3JTdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9OT19QUk9KRUNUKTsKLSAgICAgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihlcnJvclN0YXR1cyk7Ci0gICAgICByZXR1cm4gZXJyb3JTdGF0dXM7ICAgICAgCi0gICAgfQotICAgIAotICAgIC8vTWFrZSBzdXJlIHRoZSBzZWxlY3RlZCBiZWFuIGNhbiBiZSBsb2FkZWQgZnJvbSB0aGUgc2VsZWN0ZWQgcHJvamVjdAotCWlmIChqYXZhQmVhbk5hbWUudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChKQVZBX0VYVEVOU0lPTikKLQkJfHwgamF2YUJlYW5OYW1lLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoQ0xBU1NfRVhURU5TSU9OKSkgewotCQlqYXZhQmVhbk5hbWUgPSBqYXZhQmVhbk5hbWUuc3Vic3RyaW5nKDAsIGphdmFCZWFuTmFtZS5sYXN0SW5kZXhPZignLicpKTsKLQl9Ci0JCi0gICAgdHJ5Ci0gICAgewotCSAgSmF2YUNsYXNzIGphdmFDbGFzcyA9IEphdmFNT0ZVdGlscy5nZXRKYXZhQ2xhc3MoamF2YUJlYW5OYW1lLCBzZXJ2aWNlUHJvamVjdCk7IAotCSAgaWYgKCFqYXZhQ2xhc3MuaXNFeGlzdGluZ1R5cGUoKSkgCi0JICB7CQkKLQkJSVN0YXR1cyBlcnJvclN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBOTFMuYmluZChBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9DQU5OT1RfTE9BRF9KQVZBX0JFQU4sIG5ldyBTdHJpbmdbXSB7IGphdmFCZWFuTmFtZSwgc2VydmljZVByb2plY3ROYW1lIH0pKTsKLQkJZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKGVycm9yU3RhdHVzKTsKLQkJcmV0dXJuIGVycm9yU3RhdHVzOwotCSAgfQotICAgIH0gY2F0Y2ggKENvcmVFeGNlcHRpb24gY2UpCi0gICAgewotCSAgSVN0YXR1cyBlcnJvclN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBOTFMuYmluZChBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9DQU5OT1RfTE9BRF9KQVZBX0JFQU4sIG5ldyBTdHJpbmdbXSB7IGphdmFCZWFuTmFtZSwgc2VydmljZVByb2plY3ROYW1lIH0pKTsKLQkgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihlcnJvclN0YXR1cyk7Ci0gICAgICByZXR1cm4gZXJyb3JTdGF0dXM7ICAgICAgCi0gICAgfQotICAgIAotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0gIAotICAvKioKLSAgICogQHBhcmFtIHNlcnZpY2VQcm9qZWN0TmFtZSBUaGUgc2VydmljZVByb2plY3ROYW1lIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VQcm9qZWN0TmFtZShTdHJpbmcgc2VydmljZVByb2plY3ROYW1lKQotICB7Ci0gICAgdGhpcy5zZXJ2aWNlUHJvamVjdE5hbWUgPSBzZXJ2aWNlUHJvamVjdE5hbWU7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAcGFyYW0gb2JqZWN0U2VsZWN0aW9uIFRoZSBvYmplY3RTZWxlY3Rpb24gdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0T2JqZWN0U2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIG9iamVjdFNlbGVjdGlvbikKLSAgewotICAgIHRoaXMub2JqZWN0U2VsZWN0aW9uID0gb2JqZWN0U2VsZWN0aW9uOwotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0SmF2YUJlYW5Gcm9tT2JqZWN0U2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIG9iamVjdFNlbGVjdGlvbikgdGhyb3dzIENvcmVFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyBiZWFuQ2xhc3MgPSAiIjsKLSAgICBKYXZhUmVzb3VyY2VGaWx0ZXIgZmlsdGVyID0gbmV3IEphdmFSZXNvdXJjZUZpbHRlcigpOyAKLSAgICAvL0lTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGluaXRpYWxTZWxlY3Rpb25fOwotICAgIC8vCi0gICAgaWYgKG9iamVjdFNlbGVjdGlvbiAhPSBudWxsKQotICAgIHsKLSAgICAgIE9iamVjdCBvYmogPSBvYmplY3RTZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCk7Ci0gICAgICBpZiAob2JqICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIC8vIGdldCB0aGUgSVJlc291cmNlIHJlcHJlc2VudGVkIGJ5IHRoZSBzZWxlY3Rpb24KLSAgICAgICAgSVJlc291cmNlIHJlcyA9IG51bGw7Ci0gICAgICAgIAotICAgICAgICByZXMgPSBSZXNvdXJjZVV0aWxzLmdldFJlc291cmNlRnJvbVNlbGVjdGlvbihvYmopOwotICAgICAgICAKLSAgICAgICAgaWYgKGZpbHRlci5hY2NlcHRzKHJlcykpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBnZXQgdGhlIHBhY2thZ2UtcXVhbGlmaWVkIGNsYXNzIG5hbWUgd2l0aG91dCBmaWxlIGV4dGVuc2lvbnMKLSAgICAgICAgICBTdHJpbmcgYmVhblBhY2thZ2UgPSBSZXNvdXJjZVV0aWxzLmdldEphdmFSZXNvdXJjZVBhY2thZ2VOYW1lKHJlcy5nZXRGdWxsUGF0aCgpKTsKLSAgICAgICAgICBpZiAoYmVhblBhY2thZ2U9PW51bGwpCi0gICAgICAgICAgICBiZWFuUGFja2FnZSA9ICIiOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJlYW5QYWNrYWdlID0gYmVhblBhY2thZ2UgKyAiLiI7Ci0KLSAgICAgICAgICBiZWFuQ2xhc3MgPSBiZWFuUGFja2FnZSArIHJlcy5nZXROYW1lKCk7Ci0KLSAgICAgICAgICBpZiAoYmVhbkNsYXNzLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoIi5qYXZhIikgfHwgYmVhbkNsYXNzLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoIi5jbGFzcyIpKSB7Ci0gICAgICAgICAgICBiZWFuQ2xhc3MgPSBiZWFuQ2xhc3Muc3Vic3RyaW5nKDAsYmVhbkNsYXNzLmxhc3RJbmRleE9mKCcuJykpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLwotICAgIHJldHVybiBiZWFuQ2xhc3M7Ci0gIH0gICAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS93aWRnZXRzL3NrZWxldG9uL0F4aXNTa2VsZXRvbkRlZmF1bHRpbmdDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS93aWRnZXRzL3NrZWxldG9uL0F4aXNTa2VsZXRvbkRlZmF1bHRpbmdDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3Y2IxZTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd2lkZ2V0cy9za2VsZXRvbi9BeGlzU2tlbGV0b25EZWZhdWx0aW5nQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53aWRnZXRzLnNrZWxldG9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uV1NETFBhcnNlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci0KLQotcHVibGljIGNsYXNzIEF4aXNTa2VsZXRvbkRlZmF1bHRpbmdDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLSAgcHJpdmF0ZSBJU3RydWN0dXJlZFNlbGVjdGlvbiBpbml0aWFsU2VsZWN0aW9uOwotICBwcml2YXRlIFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyOwotICBwcml2YXRlIFN0cmluZyB3c2RsVVJJXzsKLSAgcHJpdmF0ZSBKYXZhV1NETFBhcmFtZXRlciBqYXZhV1NETFBhcmFtOwotICAKLQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkgCi0JewotICAgIGphdmFXU0RMUGFyYW0gPSBuZXcgSmF2YVdTRExQYXJhbWV0ZXIoKTsKLSAgICBqYXZhV1NETFBhcmFtLnNldFNlcnZlclNpZGUoSmF2YVdTRExQYXJhbWV0ZXIuU0VSVkVSX1NJREVfQkVBTik7Ci0gICAgamF2YVdTRExQYXJhbS5zZXRTa2VsZXRvbkRlcGxveSh0cnVlKTsKLSAgICBqYXZhV1NETFBhcmFtLnNldE1ldGFJbmZPbmx5KGZhbHNlKTsKLSAgICBqYXZhV1NETFBhcmFtLnNldElucHV0V3NkbExvY2F0aW9uKHdzZGxVUklfKTsKLSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0SW5pdGlhbFNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBpbml0aWFsU2VsZWN0aW9uKQotICB7Ci0gICAgdGhpcy5pbml0aWFsU2VsZWN0aW9uID0gaW5pdGlhbFNlbGVjdGlvbjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldE9iamVjdFNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBvYmplY3RTZWxlY3Rpb24pCi0gIHsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZXNQYXJzZXIoV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXIpCi0gIHsKLSAgICB0aGlzLndlYlNlcnZpY2VzUGFyc2VyID0gd2ViU2VydmljZXNQYXJzZXI7Ci0gIH0KLSAgCi0gIHB1YmxpYyBXZWJTZXJ2aWNlc1BhcnNlciBnZXRXZWJTZXJ2aWNlc1BhcnNlcigpCi0gIHsKLSAgICBpZiAod2ViU2VydmljZXNQYXJzZXIgPT0gbnVsbCkKLQkJd2ViU2VydmljZXNQYXJzZXIgPSBXU0RMUGFyc2VyRmFjdG9yeS5nZXRXU0RMUGFyc2VyKCk7Ci0gICAgcmV0dXJuIHdlYlNlcnZpY2VzUGFyc2VyOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXZWJTZXJ2aWNlVVJJKCkKLSAgewotICAgIGlmIChpbml0aWFsU2VsZWN0aW9uICE9IG51bGwgJiYgIWluaXRpYWxTZWxlY3Rpb24uaXNFbXB0eSgpKQotICAgIHsKLSAgICAgIE9iamVjdCBmaXJzdEVsZW1lbnQgPSBpbml0aWFsU2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOwotICAgICAgaWYgKGZpcnN0RWxlbWVudCBpbnN0YW5jZW9mIElGaWxlKQotICAgICAgewotICAgICAgICBJRmlsZSBpZmlsZSA9IChJRmlsZSlmaXJzdEVsZW1lbnQ7Ci0gICAgICAgIFN0cmluZyBmaWxlRXh0ZW5zaW9uID0gaWZpbGUuZ2V0RmlsZUV4dGVuc2lvbigpOwotICAgICAgICBpZiAoZmlsZUV4dGVuc2lvbi5lcXVhbHMoIndzZGwiKSB8fAotICAgICAgICAgICAgZmlsZUV4dGVuc2lvbi5lcXVhbHMoIndzaWwiKSB8fAotICAgICAgICAgICAgZmlsZUV4dGVuc2lvbi5lcXVhbHMoImh0bWwiKSkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBpZmlsZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCk7ICAKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gIiI7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3NkbFVSSSgpCi0gIHsKLQkgIHJldHVybiB3c2RsVVJJXzsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0V3NkbFVSSShTdHJpbmcgd3NkbFVSSSkKLSAgewotCSAgd3NkbFVSSV8gPSB3c2RsVVJJOwotCSAgCi0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldEdlbldTSUwoKQotICB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFdzaWxVUkkoKQotICB7Ci0gICAgU3RyaW5nIHdzVVJJID0gZ2V0V3NkbFVSSSgpOwotICAgIGludCBpbmRleCA9IHdzVVJJLmxhc3RJbmRleE9mKCcuJyk7Ci0gICAgaWYgKGluZGV4ICE9IC0xKQotICAgIHsKLSAgICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIod3NVUkkuc3Vic3RyaW5nKDAsIGluZGV4KSk7Ci0gICAgICBzYi5hcHBlbmQoIi53c2lsIik7Ci0gICAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKLSAgICB9Ci0gICAgcmV0dXJuICIiOwotICB9Ci0gIAotICBwdWJsaWMgSmF2YVdTRExQYXJhbWV0ZXIgZ2V0SmF2YVdTRExQYXJhbSgpCi0gIHsKLSAgICByZXR1cm4gamF2YVdTRExQYXJhbTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SHR0cEJhc2ljQXV0aFBhc3N3b3JkKCkKLSAgewotICAgIHJldHVybiBnZXRXZWJTZXJ2aWNlc1BhcnNlcigpLmdldEhUVFBCYXNpY0F1dGhQYXNzd29yZCgpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRIdHRwQmFzaWNBdXRoVXNlcm5hbWUoKQotICB7Ci0gICAgcmV0dXJuIGdldFdlYlNlcnZpY2VzUGFyc2VyKCkuZ2V0SFRUUEJhc2ljQXV0aFVzZXJuYW1lKCk7Ci0gIH0KLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS93aWRnZXRzL3NrZWxldG9uL1NrZWxldG9uQ29uZmlnV2lkZ2V0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS93aWRnZXRzL3NrZWxldG9uL1NrZWxldG9uQ29uZmlnV2lkZ2V0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5NjAzMDUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd2lkZ2V0cy9za2VsZXRvbi9Ta2VsZXRvbkNvbmZpZ1dpZGdldC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDEwNiAgIDEyMTE5OSBqZXNwZXJAc2Vsc2thYmV0Lm9yZyAtIEplc3BlciBN+GxsZXIKLSAqIDIwMDYwMzIxICAgMTI4ODI3IGpvYW4gLSBKb2FuIEhhZ2dhcnR5LCByZW1vdmUgcmVkdW5kYW50IHdzZGwgVVJJLCBmb2xkZXIgYW5kIGZpbGUgY29udHJvbHMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53aWRnZXRzLnNrZWxldG9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbi5KYXZhV1NETFBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS5BeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLkF4aXNDcmVhdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLmNvbW1vbi5VSVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLlNpbXBsZVdpZGdldERhdGFDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXREYXRhRXZlbnRzOwotCi0KLXB1YmxpYyBjbGFzcyBTa2VsZXRvbkNvbmZpZ1dpZGdldCBleHRlbmRzIFNpbXBsZVdpZGdldERhdGFDb250cmlidXRvcgotewotICBwcml2YXRlIEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW07Ci0KLSAgLyogQ09OVEVYVF9JRCBQQlNDMDAwMSBmb3IgdGhlIFNrZWxldG9uIENvbmZpZyBQYWdlICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJTkZPUE9QX1BCU0NfUEFHRSA9ICJQQlNDMDAwMSI7IC8vJE5PTi1OTFMtMSQKLSAgCi0gIC8vIHByaXZhdGUgVGV4dCB1cmlUZXh0XzsKLSAgLyogQ09OVEVYVF9JRCBQQkNGMDAwMiBmb3IgdGhlIFVSSSBmaWVsZCBvZiB0aGUgQmVhbiBDb25maWcgUGFnZSAqLwotICAvL3ByaXZhdGUgZmluYWwgU3RyaW5nIElORk9QT1BfUEJDRl9URVhUX1VSSSA9ICJQQkNGMDAwMiI7IC8vJE5PTi1OTFMtMSQKLSAgCi0gIHByaXZhdGUgQ29tYm8gc2tlbGV0b25Gb2xkZXJUZXh0XzsKLSAgLyogQ09OVEVYVF9JRCBQQlNDMDAwNCBmb3IgdGhlIFNrZWxldG9uIEZvbGRlciBmaWVsZCBvZiB0aGUgU2tlbGV0b24gQ29uZmlnIFBhZ2UgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIElORk9QT1BfUEJTQ19URVhUX1NLRUxFVE9OX0ZPTERFUiA9ICJQQlNDMDAwNCI7IC8vJE5PTi1OTFMtMSQKLQotCi0gIC8qIENPTlRFWFRfSUQgUEJTQzAwMDUgZm9yIHRoZSBTa2VsZXRvbiBGb2xkZXIgQnJvd3NlIGJ1dHRvbiBvZiB0aGUgU2tlbGV0b24gQ29uZmlnIFBhZ2UgKi8KLSAgLy8gcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIElORk9QT1BfUEJTQ19CVVRUT05fU0tFTEVUT05fRk9MREVSX0JST1dTRSA9ICJQQlNDMDAwNSI7IC8vJE5PTi1OTFMtMSQKLSAgLy8gcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRPT0xUSVBfUEJTQ19CVVRUT05fU0tFTEVUT05fRk9MREVSX0JST1dTRSA9ICJUT09MVElQX1BCU0NfQlVUVE9OX1NLRUxFVE9OX0ZPTERFUl9CUk9XU0UiOwotICAKLSAgcHJpdmF0ZSBCdXR0b24gc2hvd01hcHBpbmdzQ2hlY2tib3hfOwotICAvKiBDT05URVhUX0lEIFBCU0MwMDE2IGZvciB0aGUgU2hvdyBNYXBwaW5ncyBjaGVja2JveCBvZiB0aGUgQmVhbiBNZXRob2RzIFBhZ2UgICovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfTjJQX1NIT1dfTUFQUElOR1MgPSAiUEJTQzAwMTYiOyAvLyROT04tTkxTLTEkCi0gIAotICBwcml2YXRlIElQcm9qZWN0IHNlcnZlclByb2plY3RfOwotCQotICBwdWJsaWMgV2lkZ2V0RGF0YUV2ZW50cyBhZGRDb250cm9scyggQ29tcG9zaXRlIHBhcmVudCwgTGlzdGVuZXIgc3RhdHVzTGlzdGVuZXIpCi0gIHsKLSAgICBTdHJpbmcgICAgICAgcGx1Z2luSWQgICAgICAgID0gIm9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpIjsKLSAgICAKLSAgICBVSVV0aWxzICAgICAgdWlVdGlscyAgICAgICAgID0gbmV3IFVJVXRpbHMoIHBsdWdpbklkICk7Ci0gICAgVUlVdGlscyAgICAgIGNvblVpVXRpbHMgICAgICA9IG5ldyBVSVV0aWxzKCBwbHVnaW5JZCApOwotICAgIFVJVXRpbHMgICAgICBiYXNlQ29uVWlVdGlscyAgPSBuZXcgVUlVdGlscyggcGx1Z2luSWQgKTsKLQotICAJUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscCggcGFyZW50LCBwbHVnaW5JZCArICIuIiArICBJTkZPUE9QX1BCU0NfUEFHRSApOwotICAJcGFyZW50LnNldFRvb2xUaXBUZXh0KCBBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUEJTQ19QQUdFICk7Ci0gICAgCi0gICAgQ29tcG9zaXRlIHRleHRHcm91cCA9IHVpVXRpbHMuY3JlYXRlQ29tcG9zaXRlKCBwYXJlbnQsIDIsIDAsIDAgKTsKLQotICAgIC8qCi0gICAgdXJpVGV4dF8gPSB1aVV0aWxzLmNyZWF0ZVRleHQoIHRleHRHcm91cCwgIkxBQkVMX1VSSSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRPT0xUSVBfUEJDRl9URVhUX1VSSSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5GT1BPUF9QQkNGX1RFWFRfVVJJLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTV1QuU0lOR0xFIHwgU1dULkJPUkRFUiB8IFNXVC5SRUFEX09OTFkgKTsKLSAgICAqLwotICAgIAotICAgIHNrZWxldG9uRm9sZGVyVGV4dF8gPSBiYXNlQ29uVWlVdGlscy5jcmVhdGVDb21ibyggdGV4dEdyb3VwLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfU0tFTEVUT05fUk9PVF9OQU1FLAotICAgIAkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUEJTQ19URVhUX1NLRUxFVE9OX0ZPTERFUiwKLSAgICAgICAgSU5GT1BPUF9QQlNDX1RFWFRfU0tFTEVUT05fRk9MREVSLAotICAgICAgICBTV1QuU0lOR0xFIHwgU1dULkJPUkRFUiB8IFNXVC5SRUFEX09OTFkgKTsKLQotICAgIHNob3dNYXBwaW5nc0NoZWNrYm94XyA9IGNvblVpVXRpbHMuY3JlYXRlQ2hlY2tib3goIHBhcmVudCwgQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9FWFBMT1JFX01BUFBJTkdTX1hNTDJCRUFOLAotICAgIAkJCQkJCQkJCQkJCQlBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfTjJQX1NIT1dfTUFQUElOR1MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5GT1BPUF9OMlBfU0hPV19NQVBQSU5HUyApOwotICAgICAgICAKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0RW5kcG9pbnRVUkkoU3RyaW5nIGVuZHBvaW50VVJJKQotICB7Ci0gIAkvKgotICAgIGlmIChlbmRwb2ludFVSSSAhPSBudWxsKQotICAgICAgdXJpVGV4dF8uc2V0VGV4dChlbmRwb2ludFVSSSk7Ci0gICAgKi8KLSAgfSAgCi0gIAotICBwdWJsaWMgdm9pZCBzZXRPdXRwdXRKYXZhRm9sZGVyKFN0cmluZyBvdXRwdXRKYXZhRm9sZGVyKQotICB7Ci0gICAgaWYgKG91dHB1dEphdmFGb2xkZXIgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpbnQgaW5kZXggPSBza2VsZXRvbkZvbGRlclRleHRfLmluZGV4T2Yob3V0cHV0SmF2YUZvbGRlcik7Ci0gICAgICBpZiAoaW5kZXggIT0gLTEpCi0gICAgICAgIHNrZWxldG9uRm9sZGVyVGV4dF8uc2VsZWN0KGluZGV4KTsKLSAgICAgIGVsc2UgaWYgKHNrZWxldG9uRm9sZGVyVGV4dF8uZ2V0SXRlbUNvdW50KCkgPD0gMCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHJvb3QgPSBnZXRXb3Jrc3BhY2VSb290TG9jYXRpb24oKTsKLSAgICAgICAgaWYgKG91dHB1dEphdmFGb2xkZXIuc3RhcnRzV2l0aChyb290KSkKLSAgICAgICAgICBza2VsZXRvbkZvbGRlclRleHRfLnNldFRleHQob3V0cHV0SmF2YUZvbGRlci5zdWJzdHJpbmcocm9vdC5sZW5ndGgoKSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgc2tlbGV0b25Gb2xkZXJUZXh0Xy5zZXRUZXh0KG91dHB1dEphdmFGb2xkZXIpOwotICAgICAgfQotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U2hvd01hcHBpbmcoYm9vbGVhbiBzaG93TWFwcGluZykKLSAgewotICAgIHNob3dNYXBwaW5nc0NoZWNrYm94Xy5zZXRTZWxlY3Rpb24oc2hvd01hcHBpbmcpOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRTaG93TWFwcGluZygpCi0gIHsKLSAgICByZXR1cm4gc2hvd01hcHBpbmdzQ2hlY2tib3hfLmdldFNlbGVjdGlvbigpOwotICB9Ci0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgamF2YVdTRExQYXJhbS4KLSAgICovCi0gIHB1YmxpYyBKYXZhV1NETFBhcmFtZXRlciBnZXRKYXZhV1NETFBhcmFtKCkgewotCi0vLwkgIERvIG5vdCBiYXNlIEphdmEgb3V0cHV0IGRpcmVjdG9yeSBvbiB3b3Jrc3BhY2Ugcm9vdCBzaW5jZSB0aGUgcHJvamVjdCBjb3VsZCBiZSBub3QgCi0vLwkgIHBoeXNpY2FsbHkgbG9jYXRlZCBpbiB0aGUgd29ya3NwYWNlIHJvb3QsIGdldCB0aGUgcHJvamVjdCBzcGVjaWZpYyByb290IGluc3RlYWQKLQkgIAotCSAgU3RyaW5nIHByb2plY3RTcGVjaWZpY1Jvb3QgPSBzZXJ2ZXJQcm9qZWN0Xy5nZXRMb2NhdGlvbigpLnRvU3RyaW5nKCk7Ci0JICBTdHJpbmcgc2tlbGV0b25Gb2xkZXIgPSBza2VsZXRvbkZvbGRlclRleHRfLmdldFRleHQoKTsKLQkgIFN0cmluZyBwcm9qZWN0UGF0aFN0cmluZyA9IHNlcnZlclByb2plY3RfLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKTsKLQkgIGlmIChza2VsZXRvbkZvbGRlci5zdGFydHNXaXRoKHByb2plY3RQYXRoU3RyaW5nKSkgewotCQkgIHNrZWxldG9uRm9sZGVyID0gc2tlbGV0b25Gb2xkZXIuc3Vic3RyaW5nKHByb2plY3RQYXRoU3RyaW5nLmxlbmd0aCgpKTsKLQkgIH0KLQkgIGphdmFXU0RMUGFyYW0uc2V0SmF2YU91dHB1dChwcm9qZWN0U3BlY2lmaWNSb290ICsgc2tlbGV0b25Gb2xkZXIpOwotCSAgcmV0dXJuIGphdmFXU0RMUGFyYW07Ci0gIH0KLQotICAvKioKLSAgICogQHBhcmFtIGphdmFXU0RMUGFyYW0gVGhlIGphdmFXU0RMUGFyYW0gdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SmF2YVdTRExQYXJhbShKYXZhV1NETFBhcmFtZXRlciBqYXZhV1NETFBhcmFtKSB7Ci0JICB0aGlzLmphdmFXU0RMUGFyYW0gPSBqYXZhV1NETFBhcmFtOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJQcm9qZWN0KElQcm9qZWN0IHNlcnZpY2VQcm9qZWN0KQotICB7Ci0JICBzZXJ2ZXJQcm9qZWN0XyA9IHNlcnZpY2VQcm9qZWN0OwotICAgIFN0cmluZyBvcmlnaW5hbFNrZWxldG9uRm9sZGVyID0gc2tlbGV0b25Gb2xkZXJUZXh0Xy5nZXRUZXh0KCk7Ci0gICAgc2tlbGV0b25Gb2xkZXJUZXh0Xy5yZW1vdmVBbGwoKTsKLSAgICBJUGF0aFtdIHBhdGhzID0gUmVzb3VyY2VVdGlscy5nZXRBbGxKYXZhU291cmNlTG9jYXRpb25zKHNlcnZpY2VQcm9qZWN0KTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhdGhzLmxlbmd0aCA7IGkrKykKLSAgICAgIHNrZWxldG9uRm9sZGVyVGV4dF8uYWRkKHBhdGhzW2ldLnRvU3RyaW5nKCkpOwotICAgIGludCBpbmRleCA9IHNrZWxldG9uRm9sZGVyVGV4dF8uaW5kZXhPZihvcmlnaW5hbFNrZWxldG9uRm9sZGVyKTsKLSAgICBpZiAoaW5kZXggIT0gLTEpCi0gICAgICBza2VsZXRvbkZvbGRlclRleHRfLnNlbGVjdChpbmRleCk7Ci0gICAgZWxzZQotICAgICAgc2tlbGV0b25Gb2xkZXJUZXh0Xy5zZWxlY3QoMCk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGdldFdvcmtzcGFjZVJvb3RMb2NhdGlvbigpCi0gIHsKLSAgCXJldHVybiBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldExvY2F0aW9uKCkucmVtb3ZlVHJhaWxpbmdTZXBhcmF0b3IoKS50b1N0cmluZygpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS93aWRnZXRzL3NrZWxldG9uL1NrZWxldG9uQ29uZmlnV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dpZGdldHMvc2tlbGV0b24vU2tlbGV0b25Db25maWdXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwM2JlODhhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dpZGdldHMvc2tlbGV0b24vU2tlbGV0b25Db25maWdXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIyMSAgIDExOTExMSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwMzMwICAgMTI0NjY3IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud2lkZ2V0cy5za2VsZXRvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmNvbW1vbi5KYXZhV1NETFBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotcHVibGljIGNsYXNzIFNrZWxldG9uQ29uZmlnV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotICBwcml2YXRlIFN0cmluZyB3c2RsVVJJOwotICBwcml2YXRlIElQcm9qZWN0IHNlcnZlclByb2plY3Q7Ci0gIHByaXZhdGUgSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbTsKLSAgcHJpdmF0ZSBTdHJpbmcgc2VydmljZVNlcnZlclR5cGVJRF87Ci0KLSAgcHVibGljIFNrZWxldG9uQ29uZmlnV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQoICkKLSAgewotICB9Ci0gIAotCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKSAKLQl7Ci0JCQotCQlTdHJpbmcgb3V0cHV0RGlyID0JUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2UoSjJFRVV0aWxzLmdldFdlYkluZlBhdGgoIHNlcnZlclByb2plY3QgKSkuZ2V0TG9jYXRpb24oKS50b1N0cmluZygpOwotCQlqYXZhV1NETFBhcmFtLnNldE91dHB1dCggb3V0cHV0RGlyICk7Ci0vLwkJRG8gbm90IGJhc2UgSmF2YSBvdXRwdXQgZGlyZWN0b3J5IG9uIHdvcmtzcGFjZSByb290IHNpbmNlIHRoZSBwcm9qZWN0IGNvdWxkIGJlIG5vdCBwaHlzaWNhbGx5IGxvY2F0ZWQgaW4gdGhlIHdvcmtzcGFjZSByb290Ci0vLwkJamF2YVdTRExQYXJhbS5zZXRKYXZhT3V0cHV0KGdldFJvb3RVUkwoKSArIGdldE91dHB1dEphdmFGb2xkZXIoKSk7IAotCQlTdHJpbmcgamF2YU91dHB1dCA9CVJlc291cmNlVXRpbHMuZmluZFJlc291cmNlKGdldE91dHB1dEphdmFGb2xkZXIoKSkuZ2V0TG9jYXRpb24oKS50b1N0cmluZygpOwotCQlqYXZhV1NETFBhcmFtLnNldEphdmFPdXRwdXQoamF2YU91dHB1dCk7Ci0JCi0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFdzZGxVUkkoU3RyaW5nIHdzZGxVUkkpCi0gIHsKLSAgICB0aGlzLndzZGxVUkkgPSB3c2RsVVJJOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJQcm9qZWN0KFN0cmluZyBzZXJ2ZXJQcm9qZWN0KQotICB7Ci0gICAgdGhpcy5zZXJ2ZXJQcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHNlcnZlclByb2plY3QpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRFbmRwb2ludFVSSSgpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRPdXRwdXRXU0RMRm9sZGVyKCkKLSAgewotCSAgSVBhdGggd3NkbFBhdGggPSBKMkVFVXRpbHMuZ2V0V2ViQ29udGVudFBhdGgoc2VydmVyUHJvamVjdCApLmFwcGVuZCgid3NkbCIpOwotICAgICAgcmV0dXJuIHdzZGxQYXRoLnRvU3RyaW5nKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0T3V0cHV0V1NETEZpbGUoKQotICB7Ci0gICAgaW50IGluZGV4ID0gd3NkbFVSSS5sYXN0SW5kZXhPZignLycpOwotICAgIGlmIChpbmRleCA9PSAtMSkKLSAgICAgIGluZGV4ID0gd3NkbFVSSS5sYXN0SW5kZXhPZignXFwnKTsKLSAgICByZXR1cm4gd3NkbFVSSS5zdWJzdHJpbmcoaW5kZXgrMSwgd3NkbFVSSS5sZW5ndGgoKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0T3V0cHV0SmF2YUZvbGRlcigpCi0gIHsKLSAgICBpZiAoc2VydmVyUHJvamVjdCE9bnVsbCl7Ci0gICAgICByZXR1cm4gUmVzb3VyY2VVdGlscy5nZXRKYXZhU291cmNlTG9jYXRpb24oc2VydmVyUHJvamVjdCkudG9TdHJpbmcoKTsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBnZXRTaG93TWFwcGluZygpCi0gIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGlzU2hvd01hcHBpbmcoKQotICB7Ci0gICAgcmV0dXJuIGdldFNob3dNYXBwaW5nKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEphdmFXU0RMUGFyYW0oSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbSkKLSAgewotICAJdGhpcy5qYXZhV1NETFBhcmFtID0gamF2YVdTRExQYXJhbTsKLSAgfQotICAKLSAgcHVibGljIEphdmFXU0RMUGFyYW1ldGVyIGdldEphdmFXU0RMUGFyYW0oKQotICB7Ci0gICAgcmV0dXJuIGphdmFXU0RMUGFyYW07Ci0gIH0KLQotcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlU2VydmVyVHlwZUlEKCkgewotCXJldHVybiBzZXJ2aWNlU2VydmVyVHlwZUlEXzsKLX0KLQotcHVibGljIHZvaWQgc2V0U2VydmljZVNlcnZlclR5cGVJRChTdHJpbmcgc2VydmljZVNlcnZlclR5cGVJRCkgewotCXRoaXMuc2VydmljZVNlcnZlclR5cGVJRF8gPSBzZXJ2aWNlU2VydmVyVHlwZUlEOwotfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd2l6YXJkL2JlYW5zL1dTQmVhbkF4aXNUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS93aXphcmQvYmVhbnMvV1NCZWFuQXhpc1R5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQ0YmNlMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS93aXphcmQvYmVhbnMvV1NCZWFuQXhpc1R5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MjQgICAxMjAxMzcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNTIzICAgMTQzMjg0IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwNjA2MDUgICAxNDU0MDcgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA2MDYwNyAgIDE0NDk3OCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLndpemFyZC5iZWFuczsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkuQXhpc0NvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS53aWRnZXRzLkF4aXNNYXBwaW5nc1dpZGdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5BeGlzQ3JlYXRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQuQlVDb2RlR2VuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQuSmF2YVRvV1NETE1ldGhvZENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZC5WYWxpZGF0ZVdTSUNvbXBsaWFuY2VDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLnRhc2suRGVmYXVsdHNGb3JTZXJ2ZXJKYXZhV1NETENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud2lkZ2V0cy5iZWFuLkJlYW5Db25maWdXaWRnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0Lk9iamVjdFNlbGVjdGlvbldpZGdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2ltcGxlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuQ2FuRmluaXNoUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0Q29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldFJlZ2lzdHJ5OwotCi0KLS8qKgotKiBUaGlzIGlzIHRoZSBjbGFzcyBmb3IgdGhlCi0qIEF4aXMgYm90dG9tIHVwIEphdmEgQmVhbiBzY2VuYXJpbwotKiAKLSovCi1wdWJsaWMgY2xhc3MgV1NCZWFuQXhpc1R5cGUgaW1wbGVtZW50cyBDb21tYW5kV2lkZ2V0QmluZGluZwotewkKLSAgcHJpdmF0ZSBTdHJpbmcgc2VydmVyTmFtZV87Ci0gIHByaXZhdGUgU3RyaW5nIHJ1bnRpbWVOYW1lXzsKLSAgcHJpdmF0ZSBib29sZWFuIGlzV2ViTW9kdWxlUmVxdWlyZWRfOwotCi0KLSAgLyoqCi0gICogUmV0dXJucyBhIGxvY2FsZSBzcGVjaWZpYyBsYWJlbCBmb3IgdGhlIFNlcnZlciBzdXBwb3J0ZWQgYnkgdGhpcyBXZWIgU2VydmljZSB0eXBlCi0gICogQHJldHVybiBBIGxvY2FsZSBzcGVjaWZpYyBzZXJ2ZXIgbGFiZWwgZnJvbSBzZXJ2ZXIgcGx1Z2lucwotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFNlcnZlckxhYmVsKCkKLSAgewotICAgIHJldHVybiBzZXJ2ZXJOYW1lXzsKLSAgfQotCi0gIC8qKgotICAqIFNldHMgdGhlIHNlcnZlciBsYWJlbCB0byB0aGUgYXBwcm9wcmlhdGUgbmFtZSBmb3VuZCBpbiB0aGUgc2VydmVyIHBsdWdpbnMuCi0gICogQHBhcmFtIHNlcnZlciBuYW1lCi0gICovCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZlckxhYmVsKFN0cmluZyBzZXJ2ZXJMYWJlbCkKLSAgewotICAgIHNlcnZlck5hbWVfID0gc2VydmVyTGFiZWw7Ci0gIH0KLSAgCi0gIC8qKgotICAqIFJldHVybnMgYSBsb2NhbGUgc3BlY2lmaWMgbGFiZWwgZm9yIHRoZSBkZXBsb3ltZW50IHJ1bnRpbWUgb2YgdGhpcyBXZWIgU2VydmljZSB0eXBlCi0gICogQHJldHVybiBBIGxvY2FsZSBzcGVjaWZpYyBsYWJlbCBmb3IgdGhlIGRlcGxveW1lbnQgcnVudGltZQotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFJ1bnRpbWVMYWJlbCgpCi0gIHsKLSAgICByZXR1cm4gcnVudGltZU5hbWVfOwotICB9Ci0KLSAgLyoqCi0gICogU2V0cyB0aGUgcnVudGltZSBsYWJlbCBmb3IgdGhlIGFwcHJvcHJpYXRlIHJ1bnRpbWUKLSAgKiBAcGFyYW0gc2VydmVyIG5hbWUKLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0UnVudGltZUxhYmVsKFN0cmluZyBydW50aW1lTGFiZWwpCi0gIHsKLSAgICBydW50aW1lTmFtZV8gPSBydW50aW1lTGFiZWw7Ci0gIH0KLQotCi0gIC8qKgotICAqIFJldHVybnMgd2hldGhlciBvciBub3QgYSBXZWIgTW9kdWxlIGlzIHJlcXVpcmVkIGZvciB0aGlzIFdlYlNlcnZpY2VTZXJ2ZXJSdW50aW1lVHlwZQotICAqIEByZXR1cm4gdHJ1ZSBpZiByZXF1aXJlV2ViTW9kdWxlCi0gICovCi0gIHB1YmxpYyBib29sZWFuIGlzV2ViTW9kdWxlUmVxdWlyZWQoKQotICB7Ci0gICAgcmV0dXJuIGlzV2ViTW9kdWxlUmVxdWlyZWRfOwotICB9Ci0KLSAgLyoqCi0gICogU2V0cyB0aGUgYm9vbGVhbiB2YWx1ZSBhdCBydW50aW1lIGFjY29yZGluZyB0byByZXF1aXJlV2ViTW9kdWxlIGF0dHJpYnV0ZSBmcm9tIHRoZSBtYW5pZmVzdCBmaWxlCi0gICogQHBhcmFtIHJlcXVpcmVXZWJNb2R1bGUgCi0gICovCi0gIHB1YmxpYyB2b2lkIHNldFdlYk1vZHVsZVJlcXVpcmVkKGJvb2xlYW4gcmVxdWlyZVdlYk1vZHVsZSkKLSAgewotICAgIGlzV2ViTW9kdWxlUmVxdWlyZWRfID0gcmVxdWlyZVdlYk1vZHVsZTsKLSAgfQotCi0gIAotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuV2ViU2VydmljZVNlcnZlclJ1bnRpbWVUeXBlI2lzRUpCTW9kdWxlUmVxdWlyZWQoKQotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzRUpCTW9kdWxlUmVxdWlyZWQoKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLldlYlNlcnZpY2VTZXJ2ZXJSdW50aW1lVHlwZSNzZXRFSkJNb2R1bGVSZXF1aXJlZChib29sZWFuKQotCSAqLwotCXB1YmxpYyB2b2lkIHNldEVKQk1vZHVsZVJlcXVpcmVkKGJvb2xlYW4gYXJnMCkgewotCQlyZXR1cm47Ci0KLQl9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI3JlZ2lzdGVyQ2FuRmluaXNoKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNhbkZpbmlzaFJlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJDYW5GaW5pc2goQ2FuRmluaXNoUmVnaXN0cnkgY2FuRmluaXNoUmVnaXN0cnkpIAotICB7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlckRhdGFNYXBwaW5ncyhvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyhEYXRhTWFwcGluZ1JlZ2lzdHJ5IGRhdGFSZWdpc3RyeSkgCi0gIHsKLSAgICAvKgotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDdXJyZW50UGFnZUNvbW1hbmQuY2xhc3MsICJDdXJyZW50UGFnZSIsIEJlYW5DbGFzc1dpZGdldC5jbGFzcyApOwotICAgIC8vQmVhbkNsYXNzV2lkZ2V0IC0gYXMgdGFyZ2V0Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQlVBeGlzRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJKYXZhQmVhbk5hbWUiLCBCZWFuQ2xhc3NXaWRnZXQuY2xhc3MsICJCZWFuQ2xhc3NOYW1lIiwgbnVsbCk7Ci0gICAgLy9CZWFuQ2xhc3NXaWRnZXQgLSBhcyBzb3VyY2UKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhCZWFuQ2xhc3NXaWRnZXQuY2xhc3MsICJCZWFuQ2xhc3NOYW1lIiwgRGVmYXVsdHNGb3JTZXJ2ZXJKYXZhV1NETENvbW1hbmQuY2xhc3MsICJKYXZhQmVhbk5hbWUiLCBudWxsKTsgICAgLy9CZWFuQ29uZmlnV2lkZ2V0Ci0gICAgKi8KLSAgICAvLyBPYmplY3RTZWxlY3Rpb25XaWRnZXQKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhPYmplY3RTZWxlY3Rpb25XaWRnZXQuY2xhc3MsICJPYmplY3RTZWxlY3Rpb24iLCBEZWZhdWx0c0ZvclNlcnZlckphdmFXU0RMQ29tbWFuZC5jbGFzcyk7Ci0gICAgCi0gICAgLy9CZWFuQ29uZmlnV2lkZ2V0IC0gYXMgdGFyZ2V0Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoSmF2YVRvV1NETE1ldGhvZENvbW1hbmQuY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgQmVhbkNvbmZpZ1dpZGdldC5jbGFzcywgIkphdmFQYXJhbWV0ZXIiLCBudWxsICk7Ci0gICAgLy9CZWFuQ29uZmlnV2lkZ2V0IC0gYXMgc291cmNlCi0KLSAgICAvLyAgVmFsaWRhdGVXU0lDb21wbGlhbmNlQ29tbWFuZAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEJlYW5Db25maWdXaWRnZXQuY2xhc3MsICJKYXZhUGFyYW1ldGVyIixWYWxpZGF0ZVdTSUNvbXBsaWFuY2VDb21tYW5kLmNsYXNzLCAiSmF2YVdTRExQYXJhbSIsIG51bGwpOwotCi0gICAgLy9kYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhCZWFuQ29uZmlnV2lkZ2V0LmNsYXNzLCAiSmF2YVBhcmFtZXRlciIsIEphdmEyV1NETENvbW1hbmQuY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgbnVsbCk7ICAgICAgIAotICAgIC8vZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQmVhbkNvbmZpZ1dpZGdldC5jbGFzcywgIkphdmFQYXJhbWV0ZXIiLCBXU0RMMkphdmFDb21tYW5kLmNsYXNzLCAiSmF2YVdTRExQYXJhbSIsIG51bGwpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEJlYW5Db25maWdXaWRnZXQuY2xhc3MsICJKYXZhUGFyYW1ldGVyIixCVUNvZGVHZW5PcGVyYXRpb24uY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgbnVsbCk7Ci0gICAgLy9BeGlzTWFwcGluZ3NXaWRnZXQgLSBhcyB0YXJnZXQKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhCZWFuQ29uZmlnV2lkZ2V0LmNsYXNzLCAiSmF2YVBhcmFtZXRlciIsIEF4aXNNYXBwaW5nc1dpZGdldC5jbGFzcyk7Ci0gICAgCi0gICAgLy9BeGlzTWFwcGluZ3NXaWRnZXQgLSBhcyBzb3VyY2UKLQotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNNYXBwaW5nc1dpZGdldC5jbGFzcywgIkphdmFQYXJhbWV0ZXIiLCBCVUNvZGVHZW5PcGVyYXRpb24uY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgbnVsbCk7ICAgICAgIAotICAKLSAgICAKLSAgICAvL2RhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBEZWZhdWx0c0ZvckNvbmZpZy5jbGFzcywgIkphdmFQYXJhbWV0ZXIiLCBCZWFuQ29uZmlnV2lkZ2V0LmNsYXNzICk7Ci0gICAgLy9kYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggRGVmYXVsdHNGb3JDb25maWcuY2xhc3MsICJDdXN0b21pemVTZXJ2aWNlTWFwcGluZ3MiLCBCZWFuQ29uZmlnV2lkZ2V0LmNsYXNzICk7Ci0gIH0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI3JlZ2lzdGVyV2lkZ2V0TWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuV2lkZ2V0UmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlcldpZGdldE1hcHBpbmdzKFdpZGdldFJlZ2lzdHJ5IHdpZGdldFJlZ2lzdHJ5KSAKLSAgewotICAgCi0gICAgLyoKLSAgICB3aWRnZXRSZWdpc3RyeS5hZGQoICJCZWFuU2VsZWN0aW9uIiwgCi0gICAgICAgICAgICAgICAgICAgICAgICBBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLlBBR0VfVElUTEVfV1NCRUFOX0NMQVNTLAotICAgICAgICAgICAgICAgICAgICAgICAgQXhpc0NyZWF0aW9uVUlNZXNzYWdlcy5QQUdFX0RFU0NfV1NCRUFOX0NMQVNTLAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSgpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBXaWRnZXRDb250cmlidXRvciBjcmVhdGUoKQotICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCZWFuQ2xhc3NXaWRnZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSApOwotICAgICovCi0KLSAgICB3aWRnZXRSZWdpc3RyeS5hZGQoICJCZWFuQ29uZmlnIiwgCi0gICAgICAgICAgICAgICAgICAgICAgICBBeGlzQ3JlYXRpb25VSU1lc3NhZ2VzLlBBR0VfVElUTEVfV1NCRUFOX0NPTkZJRywKLSAgICAgICAgICAgICAgICAgICAgICAgIEF4aXNDcmVhdGlvblVJTWVzc2FnZXMuUEFHRV9ERVNDX1dTQkVBTl9DT05GSUcsCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5KCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFdpZGdldENvbnRyaWJ1dG9yIGNyZWF0ZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJlYW5Db25maWdXaWRnZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSApOwotCi0KLSAgICB3aWRnZXRSZWdpc3RyeS5hZGQoICJBeGlzU2VydmljZUJlYW5NYXBwaW5nIiwgCi0gICAgCQlBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfVElUTEVfV1NfQkVBTjJYTUwsCi0gICAgCQlBeGlzQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfREVTQ19QMk5fTUFQUElOR1MsCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5KCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFdpZGdldENvbnRyaWJ1dG9yIGNyZWF0ZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEF4aXNNYXBwaW5nc1dpZGdldChBeGlzTWFwcGluZ3NXaWRnZXQuTU9ERV9CRUFOMlhNTCApOwotICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9ICk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnRGYWN0b3J5RmFjdG9yeSNjcmVhdGUoKQotICAgKi8KLSAgcHVibGljIENvbW1hbmRGcmFnbWVudEZhY3RvcnkgY3JlYXRlKCkgCi0gIHsKLSAgICByZXR1cm4gbmV3IENvbW1hbmRGcmFnbWVudEZhY3RvcnkoKQotICAgIHsKLSAgICAgIHB1YmxpYyBDb21tYW5kRnJhZ21lbnQgY3JlYXRlKCkKLSAgICAgIHsKLSAgICAgICAgICAvL2RlYWQgY29kZSAtIGRvZXNuJ3QgbWF0dGVyIHdoYXQgZ2V0cyByZXR1cm5lZCBoZXJlLgotICAgIAkgIHJldHVybiBuZXcgU2ltcGxlRnJhZ21lbnQoKTsKLSAgICAgIH0KLSAgICB9OwotICB9Ci0gICAgCi19Ci0KLQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS93aXphcmQvd3NkbC9XU1dTRExBeGlzVHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd2l6YXJkL3dzZGwvV1NXU0RMQXhpc1R5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDEzZGI4Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS93aXphcmQvd3NkbC9XU1dTRExBeGlzVHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjE2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMyMSAgIDEyODgyNyBqb2FuIC0gSm9hbiBIYWdnYXJ0eSwgcmVtb3ZlIHJlZHVuZGFudCB3c2RsIFVSSSwgZm9sZGVyIGFuZCBmaWxlIGNvbnRyb2xzCi0gKiAyMDA2MDUyMyAgIDE0MzI4NCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDYwNjA1ICAgMTQ1NDA3IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLndpemFyZC53c2RsOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi51aS53aWRnZXRzLkF4aXNNYXBwaW5nc0ZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuQXhpc01hcHBpbmdzV2lkZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQuVERDb2RlR2VuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLndpZGdldHMuc2tlbGV0b24uQXhpc1NrZWxldG9uRGVmYXVsdGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud2lkZ2V0cy5za2VsZXRvbi5Ta2VsZXRvbkNvbmZpZ1dpZGdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53aWRnZXRzLnNrZWxldG9uLlNrZWxldG9uQ29uZmlnV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbWFuZC5kYXRhLlByb2plY3ROYW1lMklQcm9qZWN0VHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9ucy5TZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2ltcGxlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuQ2FuRmluaXNoUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0Q29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldFJlZ2lzdHJ5OwotCi0vKioKLSogVGhpcyBpcyB0aGUgY2xhc3MgZm9yIHRoZSBBeGlzIFdlYiBzZXJ2aWNlIHR5cGUuCi0qLwotcHVibGljIGNsYXNzIFdTV1NETEF4aXNUeXBlIGltcGxlbWVudHMgQ29tbWFuZFdpZGdldEJpbmRpbmcgCi17Ci0JcHJpdmF0ZSBTdHJpbmcgc2VydmVyTmFtZV87Ci0JcHJpdmF0ZSBTdHJpbmcgcnVudGltZU5hbWVfOwotCXByaXZhdGUgYm9vbGVhbiBpc1dlYk1vZHVsZVJlcXVpcmVkXzsKLQotCS8qKgotCSogUmV0dXJucyBhIGxvY2FsZSBzcGVjaWZpYyBsYWJlbCBmb3IgdGhlIFNlcnZlciBzdXBwb3J0ZWQgYnkgdGhpcyBXZWIgU2VydmljZSB0eXBlCi0JKiBAcmV0dXJuIEEgbG9jYWxlIHNwZWNpZmljIHNlcnZlciBsYWJlbCBmcm9tIHNlcnZlciBwbHVnaW5zCi0JKi8KLQlwdWJsaWMgU3RyaW5nIGdldFNlcnZlckxhYmVsKCkgewotCQlyZXR1cm4gc2VydmVyTmFtZV87Ci0JfQotCi0JLyoqCi0JKiBTZXRzIHRoZSBzZXJ2ZXIgbGFiZWwgdG8gdGhlIGFwcHJvcHJpYXRlIG5hbWUgZm91bmQgaW4gdGhlIHNlcnZlciBwbHVnaW5zLgotCSogQHBhcmFtIHNlcnZlciBuYW1lCi0JKi8KLQlwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJMYWJlbChTdHJpbmcgc2VydmVyTGFiZWwpIHsKLQkJc2VydmVyTmFtZV8gPSBzZXJ2ZXJMYWJlbDsKLQl9Ci0KLQkvKioKLQkqIFJldHVybnMgYSBsb2NhbGUgc3BlY2lmaWMgbGFiZWwgZm9yIHRoZSBkZXBsb3ltZW50IHJ1bnRpbWUgb2YgdGhpcyBXZWIgU2VydmljZSB0eXBlCi0JKiBAcmV0dXJuIEEgbG9jYWxlIHNwZWNpZmljIGxhYmVsIGZvciB0aGUgZGVwbG95bWVudCBydW50aW1lCi0JKi8KLQlwdWJsaWMgU3RyaW5nIGdldFJ1bnRpbWVMYWJlbCgpIHsKLQkJcmV0dXJuIHJ1bnRpbWVOYW1lXzsKLQl9Ci0KLQkvKioKLQkqIFNldHMgdGhlIHJ1bnRpbWUgbGFiZWwgZm9yIHRoZSBhcHByb3ByaWF0ZSBydW50aW1lCi0JKiBAcGFyYW0gc2VydmVyIG5hbWUKLQkqLwotCXB1YmxpYyB2b2lkIHNldFJ1bnRpbWVMYWJlbChTdHJpbmcgcnVudGltZUxhYmVsKSB7Ci0JCXJ1bnRpbWVOYW1lXyA9IHJ1bnRpbWVMYWJlbDsKLQl9Ci0KLQkvKioKLQkqIFJldHVybnMgd2hldGhlciBvciBub3QgYSBXZWIgTW9kdWxlIGlzIHJlcXVpcmVkIGZvciB0aGlzIFdlYlNlcnZpY2VTZXJ2ZXJSdW50aW1lVHlwZQotCSogQHJldHVybiB0cnVlIGlmIHJlcXVpcmVXZWJNb2R1bGUKLQkqLwotCXB1YmxpYyBib29sZWFuIGlzV2ViTW9kdWxlUmVxdWlyZWQoKSB7Ci0JCXJldHVybiBpc1dlYk1vZHVsZVJlcXVpcmVkXzsKLQl9Ci0KLQkvKioKLQkqIFNldHMgdGhlIGJvb2xlYW4gdmFsdWUgYXQgcnVudGltZSBhY2NvcmRpbmcgdG8gcmVxdWlyZVdlYk1vZHVsZSBhdHRyaWJ1dGUgZnJvbSB0aGUgbWFuaWZlc3QgZmlsZQotCSogQHBhcmFtIHJlcXVpcmVXZWJNb2R1bGUgCi0JKi8KLQlwdWJsaWMgdm9pZCBzZXRXZWJNb2R1bGVSZXF1aXJlZChib29sZWFuIHJlcXVpcmVXZWJNb2R1bGUpIHsKLQkJaXNXZWJNb2R1bGVSZXF1aXJlZF8gPSByZXF1aXJlV2ViTW9kdWxlOwotCX0KLQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5XZWJTZXJ2aWNlU2VydmVyUnVudGltZVR5cGUjaXNFSkJNb2R1bGVSZXF1aXJlZCgpCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNFSkJNb2R1bGVSZXF1aXJlZCgpIHsKLQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLldlYlNlcnZpY2VTZXJ2ZXJSdW50aW1lVHlwZSNzZXRFSkJNb2R1bGVSZXF1aXJlZChib29sZWFuKQotCSAqLwotCXB1YmxpYyB2b2lkIHNldEVKQk1vZHVsZVJlcXVpcmVkKGJvb2xlYW4gYXJnMCkgewotCQlyZXR1cm47Ci0KLQl9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI3JlZ2lzdGVyQ2FuRmluaXNoKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNhbkZpbmlzaFJlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJDYW5GaW5pc2goQ2FuRmluaXNoUmVnaXN0cnkgY2FuRmluaXNoUmVnaXN0cnkpIAotICB7Ci0gIH0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI3JlZ2lzdGVyRGF0YU1hcHBpbmdzKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKERhdGFNYXBwaW5nUmVnaXN0cnkgZGF0YVJlZ2lzdHJ5KSAKLSAgewotICAgIC8vIFNrZWxldG9uQ29uZmlnV2lkZ2V0Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2ZXJQcm9qZWN0IiwgU2tlbGV0b25Db25maWdXaWRnZXQuY2xhc3MsICJTZXJ2ZXJQcm9qZWN0IiwgbmV3IFByb2plY3ROYW1lMklQcm9qZWN0VHJhbnNmb3JtZXIoKSk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc1NrZWxldG9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgU2tlbGV0b25Db25maWdXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNrZWxldG9uQ29uZmlnV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJFbmRwb2ludFVSSSIsIFNrZWxldG9uQ29uZmlnV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTa2VsZXRvbkNvbmZpZ1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiT3V0cHV0SmF2YUZvbGRlciIsIFNrZWxldG9uQ29uZmlnV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTa2VsZXRvbkNvbmZpZ1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2hvd01hcHBpbmciLCBTa2VsZXRvbkNvbmZpZ1dpZGdldC5jbGFzcyk7Ci0KLSAgICAvLyAgQmFja3VwU2tlbEltcGxDb21tYW5kICAgICAKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTa2VsZXRvbkNvbmZpZ1dpZGdldC5jbGFzcywgIkphdmFXU0RMUGFyYW0iLCBURENvZGVHZW5PcGVyYXRpb24uY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgbnVsbCk7Ci0gICAgCi0gICAgLy8gQXhpc01hcHBpbmdzRnJhZ21lbnQKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTa2VsZXRvbkNvbmZpZ1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2hvd01hcHBpbmciLCBBeGlzTWFwcGluZ3NGcmFnbWVudC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2tlbGV0b25Db25maWdXaWRnZXQuY2xhc3MsICJTaG93TWFwcGluZyIsIEF4aXNNYXBwaW5nc0ZyYWdtZW50LmNsYXNzKTsKLQotICAgIC8vIEF4aXNNYXBwaW5nc1dpZGdldAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNrZWxldG9uQ29uZmlnV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgQXhpc01hcHBpbmdzV2lkZ2V0LmNsYXNzLCAiSmF2YVBhcmFtZXRlciIsIG51bGwpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNrZWxldG9uQ29uZmlnV2lkZ2V0LmNsYXNzLCAiSmF2YVdTRExQYXJhbSIsIEF4aXNNYXBwaW5nc1dpZGdldC5jbGFzcywgIkphdmFQYXJhbWV0ZXIiLCBudWxsKTsKLQotICAgIC8vIFdTREwySmF2YUNvbW1hbmQKLSAgICAvL2RhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNrZWxldG9uQ29uZmlnV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgV1NETDJKYXZhQ29tbWFuZC5jbGFzcyk7Ci0gICAgLy9kYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTa2VsZXRvbkNvbmZpZ1dpZGdldC5jbGFzcywgIkphdmFXU0RMUGFyYW0iLCBXU0RMMkphdmFDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTa2VsZXRvbkNvbmZpZ1dpZGdldC5jbGFzcywgIkphdmFXU0RMUGFyYW0iLCBURENvZGVHZW5PcGVyYXRpb24uY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgbnVsbCk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc01hcHBpbmdzV2lkZ2V0LmNsYXNzLCAiSmF2YVBhcmFtZXRlciIsIFREQ29kZUdlbk9wZXJhdGlvbi5jbGFzcywgIkphdmFXU0RMUGFyYW0iLCBudWxsKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI3JlZ2lzdGVyV2lkZ2V0TWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuV2lkZ2V0UmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlcldpZGdldE1hcHBpbmdzKFdpZGdldFJlZ2lzdHJ5IHdpZGdldFJlZ2lzdHJ5KSAKLSAgewotICAgCi0gICAgLyoKLSAgICB3aWRnZXRSZWdpc3RyeS5hZGQoICJXU0RMU2VsZWN0aW9uIiwgCi0gICAgICAgICAgICAgICAgICAgICAgICBDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9USVRMRV9XU19TRUxFQ1RJT04sCi0gICAgICAgICAgICAgICAgICAgICAgICBDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9ERVNDX1dTX1NFTEVDVElPTiwKLQkJICAgICAgICAgICAgICAgIG5ldyBXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKQotICAgICAgICAgICAgICAgICAgICAgICAgewotCQkgICAgICAgICAgICAgICAgICBwdWJsaWMgV2lkZ2V0Q29udHJpYnV0b3IgY3JlYXRlKCkKLQkJICAgICAgICAgICAgICAgICAgewotCQkgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgV1NETFNlbGVjdGlvbldpZGdldCgpOwotCQkgICAgICAgICAgICAgICAgICB9Ci0JCSAgICAgICAgICAgICAgICB9ICk7Ci0KLSAgICB3aWRnZXRSZWdpc3RyeS5hZGQoICJXU0RMU2VsZWN0aW9uVHJlZVdpZGdldCIsIAotICAgICAgICBDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9USVRMRV9XU0RMX1NFTEVDVElPTiwKLSAgICAgICAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfREVTQ19XU0RMX1NFTEVDVElPTiwKLSAgICAgICAgbmV3IFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSgpCi0gICAgICAgIHsKLSAgICAgICAgICBwdWJsaWMgV2lkZ2V0Q29udHJpYnV0b3IgY3JlYXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBXU0RMU2VsZWN0aW9uVHJlZVdpZGdldCgpOwotICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgICovCi0KLSAgICB3aWRnZXRSZWdpc3RyeS5hZGQoICJTa2VsZXRvbkNvbmZpZyIsIAotICAgICAgICAgICAgICAgICAgICAgICAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfVElUTEVfV1NTS0VMX0NPTkZJRywKLSAgICAgICAgICAgICAgICAgICAgICAgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX0RFU0NfV1NTS0VMX0NPTkZJRywKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgV2lkZ2V0Q29udHJpYnV0b3IgY3JlYXRlKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2tlbGV0b25Db25maWdXaWRnZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSApOwotCi0gICAgd2lkZ2V0UmVnaXN0cnkuYWRkKCAiQXhpc01hcHBpbmdzV2lkZ2V0IiwgCi0gICAgICAgICAgICAgICAgICAgICAgICBDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9USVRMRV9XU19YTUwyQkVBTiwKLSAgICAgICAgICAgICAgICAgICAgICAgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX0RFU0NfTjJQX01BUFBJTkdTLAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSgpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBXaWRnZXRDb250cmlidXRvciBjcmVhdGUoKQotICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBeGlzTWFwcGluZ3NXaWRnZXQoQXhpc01hcHBpbmdzV2lkZ2V0Lk1PREVfWE1MMkJFQU4pOwotICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9ICk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnRGYWN0b3J5RmFjdG9yeSNjcmVhdGUoKQotICAgKi8KLSAgcHVibGljIENvbW1hbmRGcmFnbWVudEZhY3RvcnkgY3JlYXRlKCkgCi0gIHsKLSAgICByZXR1cm4gbmV3IENvbW1hbmRGcmFnbWVudEZhY3RvcnkoKQotICAgIHsKLSAgICAgIHB1YmxpYyBDb21tYW5kRnJhZ21lbnQgY3JlYXRlKCkKLSAgICAgIHsKLSAgICAgICAgICAvL2RlYWQgY29kZSAtIGRvZXNuJ3QgbWF0dGVyIHdoYXQgZ2V0cyByZXR1cm5lZCBoZXJlLiAKLSAgICAJICByZXR1cm4gbmV3IFNpbXBsZUZyYWdtZW50KCk7Ci0gICAgICB9Ci0gICAgfTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd3NydC9BeGlzQmVhbkNvbmZpZ1dpZGdldEZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dzcnQvQXhpc0JlYW5Db25maWdXaWRnZXRGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3ZTZiNTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd3NydC9BeGlzQmVhbkNvbmZpZ1dpZGdldEZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53c3J0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud2lkZ2V0cy5iZWFuLkJlYW5Db25maWdXaWRnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud2l6YXJkLmJlYW5zLldTQmVhbkF4aXNUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5JTmFtZWRXaWRnZXRDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5JTmFtZWRXaWRnZXRDb250cmlidXRvckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0QmluZGluZ1RvV2lkZ2V0RmFjdG9yeUFkYXB0ZXI7Ci0KLXB1YmxpYyBjbGFzcyBBeGlzQmVhbkNvbmZpZ1dpZGdldEZhY3RvcnkgaW1wbGVtZW50cyBJTmFtZWRXaWRnZXRDb250cmlidXRvckZhY3RvcnkgewotCi0JcHJpdmF0ZSBJTmFtZWRXaWRnZXRDb250cmlidXRvciAgICAgICAgICAgICBiZWFuQ29uZmlnV2lkZ2V0XzsKLQlwcml2YXRlIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yICAgICAgICAgICAgIG1hcHBpbmdzV2lkZ2V0XzsKLQlwcml2YXRlIEJlYW5Db25maWdXaWRnZXQgICAgICAgICAgICAgICAgICAgIGJlYW5XaWRnZXRfOwotCXByaXZhdGUgV2lkZ2V0QmluZGluZ1RvV2lkZ2V0RmFjdG9yeUFkYXB0ZXIgYWRhcHRlcl87Ci0JCi0JcHVibGljIEF4aXNCZWFuQ29uZmlnV2lkZ2V0RmFjdG9yeSgpCi0JewotCSAgYWRhcHRlcl8gPSBuZXcgV2lkZ2V0QmluZGluZ1RvV2lkZ2V0RmFjdG9yeUFkYXB0ZXIoIG5ldyBXU0JlYW5BeGlzVHlwZSgpICk7Ci0JICAKLQkgIGJlYW5Db25maWdXaWRnZXRfID0gYWRhcHRlcl8uZ2V0V2lkZ2V0KCAiQmVhbkNvbmZpZyIgKTsKLQkgIGJlYW5XaWRnZXRfICAgICAgID0gKEJlYW5Db25maWdXaWRnZXQpYmVhbkNvbmZpZ1dpZGdldF8uZ2V0V2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5KCkuY3JlYXRlKCk7Ci0JICBtYXBwaW5nc1dpZGdldF8gICA9IGFkYXB0ZXJfLmdldFdpZGdldCggIkF4aXNTZXJ2aWNlQmVhbk1hcHBpbmciICk7Ci0JfQotCQotCXB1YmxpYyBJTmFtZWRXaWRnZXRDb250cmlidXRvciBnZXRGaXJzdE5hbWVkV2lkZ2V0KCkgCi0JewotCSAgcmV0dXJuIGJlYW5Db25maWdXaWRnZXRfOwotCX0KLQotCXB1YmxpYyBJTmFtZWRXaWRnZXRDb250cmlidXRvciBnZXROZXh0TmFtZWRXaWRnZXQoIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yIHdpZGdldENvbnRyaWJ1dG9yKSAKLQl7Ci0JICByZXR1cm4gd2lkZ2V0Q29udHJpYnV0b3IgPT0gYmVhbkNvbmZpZ1dpZGdldF8gJiYgYmVhbldpZGdldF8uZ2V0Q3VzdG9taXplU2VydmljZU1hcHBpbmdzKCkgPyBtYXBwaW5nc1dpZGdldF8gOiBudWxsOwotCX0KLQkKLQlwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyhEYXRhTWFwcGluZ1JlZ2lzdHJ5IGRhdGFSZWdpc3RyeSkgCi0JewotCSAgYWRhcHRlcl8ucmVnaXN0ZXJEYXRhTWFwcGluZ3MoIGRhdGFSZWdpc3RyeSApOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dzcnQvQXhpc1NrZWxldG9uQ29uZmlnV2lkZ2V0RmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd3NydC9BeGlzU2tlbGV0b25Db25maWdXaWRnZXRGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkOGI4ZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd3NydC9BeGlzU2tlbGV0b25Db25maWdXaWRnZXRGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud3NydDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLndpZGdldHMuc2tlbGV0b24uU2tlbGV0b25Db25maWdXaWRnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud2l6YXJkLndzZGwuV1NXU0RMQXhpc1R5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLklOYW1lZFdpZGdldENvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLklOYW1lZFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRCaW5kaW5nVG9XaWRnZXRGYWN0b3J5QWRhcHRlcjsKLQotcHVibGljIGNsYXNzIEF4aXNTa2VsZXRvbkNvbmZpZ1dpZGdldEZhY3RvcnkgaW1wbGVtZW50cyBJTmFtZWRXaWRnZXRDb250cmlidXRvckZhY3RvcnkgewotCi0JcHJpdmF0ZSBJTmFtZWRXaWRnZXRDb250cmlidXRvciAgICAgICAgICAgICBza2VsQ29uZmlnV2lkZ2V0XzsKLQlwcml2YXRlIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yICAgICAgICAgICAgIG1hcHBpbmdzV2lkZ2V0XzsKLQlwcml2YXRlIFNrZWxldG9uQ29uZmlnV2lkZ2V0ICAgICAgICAgICAgICAgIHNrZWxXaWRnZXRfOwotCXByaXZhdGUgV2lkZ2V0QmluZGluZ1RvV2lkZ2V0RmFjdG9yeUFkYXB0ZXIgYWRhcHRlcl87Ci0JCi0JcHVibGljIEF4aXNTa2VsZXRvbkNvbmZpZ1dpZGdldEZhY3RvcnkoKQotCXsKLQkgIGFkYXB0ZXJfID0gbmV3IFdpZGdldEJpbmRpbmdUb1dpZGdldEZhY3RvcnlBZGFwdGVyKCBuZXcgV1NXU0RMQXhpc1R5cGUoKSApOwotCSAgCi0JICBza2VsQ29uZmlnV2lkZ2V0XyA9IGFkYXB0ZXJfLmdldFdpZGdldCggIlNrZWxldG9uQ29uZmlnIiApOwotCSAgc2tlbFdpZGdldF8gICAgICAgPSAoU2tlbGV0b25Db25maWdXaWRnZXQpc2tlbENvbmZpZ1dpZGdldF8uZ2V0V2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5KCkuY3JlYXRlKCk7Ci0JICBtYXBwaW5nc1dpZGdldF8gICA9IGFkYXB0ZXJfLmdldFdpZGdldCggIkF4aXNNYXBwaW5nc1dpZGdldCIgKTsKLQl9Ci0JCi0JcHVibGljIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yIGdldEZpcnN0TmFtZWRXaWRnZXQoKSAKLQl7Ci0JICByZXR1cm4gc2tlbENvbmZpZ1dpZGdldF87Ci0JfQotCi0JcHVibGljIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yIGdldE5leHROYW1lZFdpZGdldCggSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3Igd2lkZ2V0Q29udHJpYnV0b3IpIAotCXsKLQkgIHJldHVybiB3aWRnZXRDb250cmlidXRvciA9PSBza2VsQ29uZmlnV2lkZ2V0XyAmJiBza2VsV2lkZ2V0Xy5nZXRTaG93TWFwcGluZygpID8gbWFwcGluZ3NXaWRnZXRfIDogbnVsbDsKLQl9Ci0JCi0JcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhUmVnaXN0cnkpIAotCXsKLQkgIGFkYXB0ZXJfLnJlZ2lzdGVyRGF0YU1hcHBpbmdzKCBkYXRhUmVnaXN0cnkgKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS93c3J0L0F4aXNXZWJTZXJ2aWNlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS93c3J0L0F4aXNXZWJTZXJ2aWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyOTMwMDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd3NydC9BeGlzV2ViU2VydmljZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMzMCAgIDEyNDY2NyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjAzMzAgICAxMjg4Mjcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNDI0ICAgMTIwMTM3IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDUwOSAgIDEyNTA5NCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUsIFVzZSBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24KLSAqIDIwMDYwNTE1ICAgMTE1MjI1IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwNjA1MTcgICAxNDIzMjcgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA2MDUyNCAgIDEzMDc1NSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA2MDcgICAxNDQ5Nzgga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwODEwICAgMTM1Mzk1IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBFbmFibGUgV1RQIFdlYiBzZXJ2aWNlIGZyYW1ld29yayBvcGVuaW5nIEphdmEgZWRpdG9yCi0gKiAyMDA2MTAwNCAgIDE1OTM1NiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbiwgR2V0IGNvcnJlY3QgbW9kdWxlIHJvb3QgVVJMIGJhc2VkIG9uIHNlcnZlciBjaG9zZW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLndzcnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24uY29yZS5jb21tYW5kLkF4aXNEZXBsb3lDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbWFuZC5HZXJvbmltb0F4aXNEZXBsb3lDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnRhc2suUmVmcmVzaFByb2plY3RDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLnVpLnRhc2suVmFsaWRhdGVXU0RMQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5jb21tYW5kLkF4aXNDaGVja0NvbXBpbGVyTGV2ZWxDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQuQXhpc091dHB1dENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZC5BeGlzUnVuSW5wdXRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQuQlVBeGlzSW5wdXRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQuQlVDb2RlR2VuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQuQ29weURlcGxveW1lbnRGaWxlQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS5jb21tYW5kLkphdmFUb1dTRExNZXRob2RDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLmNvbW1hbmQuTW9kaWZ5V1NETEVuZHBvaW50QWRkcmVzc0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZC5UREF4aXNJbnB1dENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZC5URENvZGVHZW5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkuY29tbWFuZC5WYWxpZGF0ZVdTSUNvbXBsaWFuY2VDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLnRhc2suQlVDb25maWdDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLnRhc2suRGVmYXVsdHNGb3JTZXJ2ZXJKYXZhV1NETENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkudGFzay5URENvbmZpZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud2lkZ2V0cy5iZWFuLkJVQXhpc0RlZmF1bHRpbmdDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNyZWF0aW9uLnVpLndpZGdldHMuc2tlbGV0b24uQXhpc1NrZWxldG9uRGVmYXVsdGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud2lkZ2V0cy5za2VsZXRvbi5Ta2VsZXRvbkNvbmZpZ1dpZGdldERlZmF1bHRpbmdDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nVG9JUHJvamVjdFRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5CdWlsZFByb2plY3RDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tYW5kLmRhdGEuUHJvamVjdE5hbWUySVByb2plY3RUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29tbW9uLldhaXRGb3JBdXRvQnVpbGRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLklDb21tYW5kRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5TaW1wbGVDb21tYW5kRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuRWNsaXBzZUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LkFic3RyYWN0V2ViU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VTY2VuYXJpbzsKLQotcHVibGljIGNsYXNzIEF4aXNXZWJTZXJ2aWNlIGV4dGVuZHMgQWJzdHJhY3RXZWJTZXJ2aWNlCi17Ci0JcHJpdmF0ZSBBeGlzV2ViU2VydmljZUluZm8gYXhpc1dlYlNlcnZpY2VJbmZvXzsKLQotCXB1YmxpYyBBeGlzV2ViU2VydmljZShXZWJTZXJ2aWNlSW5mbyBpbmZvKQotCXsKLQkJc3VwZXIoaW5mbyk7Ci0JfQotCi0JcHVibGljIElDb21tYW5kRmFjdG9yeSBhc3NlbWJsZShJRW52aXJvbm1lbnQgZW52LCBJQ29udGV4dCBjdHgsCi0JCQlJU2VsZWN0aW9uIHNlbCwgU3RyaW5nIHByb2plY3QsIFN0cmluZyBlYXJQcm9qZWN0KQotCXsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIElDb21tYW5kRmFjdG9yeSBkZXBsb3koSUVudmlyb25tZW50IGVudiwgSUNvbnRleHQgY3R4LCBJU2VsZWN0aW9uIHNlbCwKLQkJCVN0cmluZyBwcm9qZWN0LCBTdHJpbmcgZWFyUHJvamVjdCkKLQl7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgZGV2ZWxvcChJRW52aXJvbm1lbnQgZW52LCBJQ29udGV4dCBjdHgsIElTZWxlY3Rpb24gc2VsLAotCQkJU3RyaW5nIHByb2plY3QsIFN0cmluZyBlYXJQcm9qZWN0KQotCXsKLQkJCi0JCVZlY3RvciBjb21tYW5kcyA9IG5ldyBWZWN0b3IoKTsKLSAgICBFY2xpcHNlRW52aXJvbm1lbnQgZW52aXJvbm1lbnQgPSAoRWNsaXBzZUVudmlyb25tZW50KWVudjsKLQkJCi0JCWlmIChjdHguZ2V0U2NlbmFyaW8oKS5nZXRWYWx1ZSgpID09IFdlYlNlcnZpY2VTY2VuYXJpby5CT1RUT01VUCkgewotCQkJCi0JCQlyZWdpc3RlckJVRGF0YU1hcHBpbmdzKCBlbnZpcm9ubWVudC5nZXRDb21tYW5kTWFuYWdlcigpLmdldE1hcHBpbmdSZWdpc3RyeSgpKTsKLQkJCQotCQkJY29tbWFuZHMuYWRkKG5ldyBCVUF4aXNJbnB1dENvbW1hbmQodGhpcywgcHJvamVjdCkpOwotCQkJY29tbWFuZHMuYWRkKG5ldyBBeGlzQ2hlY2tDb21waWxlckxldmVsQ29tbWFuZCgpKTsKLS8vCQkJY29tbWFuZHMuYWRkKG5ldyBWYWxpZGF0ZU9iamVjdFNlbGVjdGlvbkNvbW1hbmQoKSk7Ci0JCQljb21tYW5kcy5hZGQobmV3IEJVQXhpc0RlZmF1bHRpbmdDb21tYW5kKCkpOwotCQkJY29tbWFuZHMuYWRkKG5ldyBEZWZhdWx0c0ZvclNlcnZlckphdmFXU0RMQ29tbWFuZCgpKTsKLQkJCWNvbW1hbmRzLmFkZChuZXcgSmF2YVRvV1NETE1ldGhvZENvbW1hbmQoKSk7Ci0JCQkvLyBjb21tYW5kcy5hZGQobmV3IFNpbXBsZUZyYWdtZW50KCAiQmVhbkNvbmZpZyIgKSk7Ci0JCQkvLyBjb21tYW5kcy5hZGQobmV3IFNpbXBsZUZyYWdtZW50KCAiQXhpc1NlcnZpY2VCZWFuTWFwcGluZyIgKSk7Ci0JCQljb21tYW5kcy5hZGQobmV3IEJVQ29uZmlnQ29tbWFuZCgpKTsKLQkJCWNvbW1hbmRzLmFkZChuZXcgVmFsaWRhdGVXU0lDb21wbGlhbmNlQ29tbWFuZCgpKTsKLQkJCWNvbW1hbmRzLmFkZChuZXcgV2FpdEZvckF1dG9CdWlsZENvbW1hbmQoKSk7Ci0JCQljb21tYW5kcy5hZGQobmV3IEJVQ29kZUdlbk9wZXJhdGlvbigpKTsKLS8vCQkJY29tbWFuZHMuYWRkKG5ldyBSZWZyZXNoUHJvamVjdENvbW1hbmQoKSk7Ci0JCQljb21tYW5kcy5hZGQobmV3IEJ1aWxkUHJvamVjdENvbW1hbmQoKSk7Ci0JCQljb21tYW5kcy5hZGQobmV3IEF4aXNPdXRwdXRDb21tYW5kKHRoaXMpKTsKLQkJCQotCQl9IGVsc2UgaWYgKGN0eC5nZXRTY2VuYXJpbygpLmdldFZhbHVlKCkgPT0gV2ViU2VydmljZVNjZW5hcmlvLlRPUERPV04pIHsKLQkJCQotCQkJcmVnaXN0ZXJURERhdGFNYXBwaW5ncyggZW52aXJvbm1lbnQuZ2V0Q29tbWFuZE1hbmFnZXIoKS5nZXRNYXBwaW5nUmVnaXN0cnkoKSk7Ci0JCQkKLQkJCWNvbW1hbmRzLmFkZChuZXcgVERBeGlzSW5wdXRDb21tYW5kKHRoaXMsIHByb2plY3QpKTsKLQkJCWNvbW1hbmRzLmFkZChuZXcgQXhpc1NrZWxldG9uRGVmYXVsdGluZ0NvbW1hbmQoKSk7Ci0JCSAgICBjb21tYW5kcy5hZGQobmV3IFZhbGlkYXRlV1NETENvbW1hbmQoKSk7Ci0JCSAgICBjb21tYW5kcy5hZGQobmV3IFNrZWxldG9uQ29uZmlnV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQoKSk7Ci0vLwkJCWNvbW1hbmRzLmFkZChuZXcgU2ltcGxlRnJhZ21lbnQoICJTa2VsZXRvbkNvbmZpZyIgKSk7Ci0vLwkJCWNvbW1hbmRzLmFkZChuZXcgU2ltcGxlRnJhZ21lbnQoICJBeGlzTWFwcGluZ3NXaWRnZXQiICkpOwotCQkgICAgY29tbWFuZHMuYWRkKG5ldyBURENvbmZpZ0NvbW1hbmQoKSk7Ci0JCQljb21tYW5kcy5hZGQobmV3IFREQ29kZUdlbk9wZXJhdGlvbigpKTsKLS8vCQkgICAgY29tbWFuZHMuYWRkKG5ldyBSZWZyZXNoUHJvamVjdENvbW1hbmQoKSk7Ci0JCSAgICBjb21tYW5kcy5hZGQobmV3IEJ1aWxkUHJvamVjdENvbW1hbmQoKSk7Ci0JCQljb21tYW5kcy5hZGQobmV3IEF4aXNPdXRwdXRDb21tYW5kKHRoaXMpKTsKLQkJCQotCQl9IGVsc2UgewotCQkJLy9UT0RPOiBSZW1vdmUgcHJpbnRsbiBhbmQgcmVhc3Nlc3MgdGhpcyAiZXJyb3IiLgotCQkJU3lzdGVtLm91dC5wcmludGxuKCJFcnJvciAtIFdlYlNlcnZpY2VTY2VuYXJpbyBzaG91bGQgbm90IGJlIENsaWVudCBmb3IgQXhpc1dlYlNlcnZpY2UiKTsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0JCQotCQkKLQkJcmV0dXJuIG5ldyBTaW1wbGVDb21tYW5kRmFjdG9yeShjb21tYW5kcyk7Ci0JfQotCi0JcHVibGljIElDb21tYW5kRmFjdG9yeSBpbnN0YWxsKElFbnZpcm9ubWVudCBlbnYsIElDb250ZXh0IGN0eCwgSVNlbGVjdGlvbiBzZWwsCi0JCQlTdHJpbmcgcHJvamVjdCwgU3RyaW5nIGVhclByb2plY3QpCi0JewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IHJ1bihJRW52aXJvbm1lbnQgZW52LCBJQ29udGV4dCBjdHgsIElTZWxlY3Rpb24gc2VsLAotCQkJU3RyaW5nIHByb2plY3QsIFN0cmluZyBlYXJQcm9qZWN0KQotCXsKLQkJVmVjdG9yIGNvbW1hbmRzID0gbmV3IFZlY3RvcigpOwotCi0JCWlmIChjdHguZ2V0U2NlbmFyaW8oKS5nZXRWYWx1ZSgpID09IFdlYlNlcnZpY2VTY2VuYXJpby5DTElFTlQpIHsKLQkJCS8vVE9ETzogUmVtb3ZlIHByaW50bG4gYW5kIHJlYXNzZXNzIHRoaXMgImVycm9yIi4KLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3IgLSBXZWJTZXJ2aWNlU2NlbmFyaW8gc2hvdWxkIG5vdCBiZSBDbGllbnQgZm9yIEF4aXNXZWJTZXJ2aWNlIik7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfSBlbHNlIHsvLyBGb3IgQk9UVE9NX1VQIGFuZCBUT1BfRE9XTgotCQkJY29tbWFuZHMuYWRkKG5ldyBBeGlzUnVuSW5wdXRDb21tYW5kKHRoaXMsIHByb2plY3QpKTsKLQkJCWNvbW1hbmRzLmFkZChuZXcgTW9kaWZ5V1NETEVuZHBvaW50QWRkcmVzc0NvbW1hbmQoKSk7Ci0JCQlpZiAoZ2V0V2ViU2VydmljZUluZm8oKS5nZXRTZXJ2ZXJGYWN0b3J5SWQoKS5lcXVhbHMoIm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuZ2Vyb25pbW8uMTAiKSkgewotCQkJCWNvbW1hbmRzLmFkZChuZXcgR2Vyb25pbW9BeGlzRGVwbG95Q29tbWFuZChwcm9qZWN0KSk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCSAgICBjb21tYW5kcy5hZGQobmV3IEF4aXNEZXBsb3lDb21tYW5kKCkpOwotCQkJfQotCQkJY29tbWFuZHMuYWRkKCBuZXcgQ29weURlcGxveW1lbnRGaWxlQ29tbWFuZCggcHJvamVjdCwgZWFyUHJvamVjdCApICk7Ci0JCQljb21tYW5kcy5hZGQobmV3IFJlZnJlc2hQcm9qZWN0Q29tbWFuZCgpKTsKLQotCQkJcmV0dXJuIG5ldyBTaW1wbGVDb21tYW5kRmFjdG9yeShjb21tYW5kcyk7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHZvaWQgcmVnaXN0ZXJCVURhdGFNYXBwaW5ncyhEYXRhTWFwcGluZ1JlZ2lzdHJ5IHJlZ2lzdHJ5KSAKLQkgIHsKLQkJLy9CVUF4aXNJbnB1dENvbW1hbmQKLS8vCQlyZWdpc3RyeS5hZGRNYXBwaW5nKEJVQXhpc0lucHV0Q29tbWFuZC5jbGFzcywgIlNlcnZpY2VTZXJ2ZXJUeXBlSUQiLCBTdGFydFByb2plY3RDb21tYW5kLmNsYXNzKTsKLQkJcmVnaXN0cnkuYWRkTWFwcGluZyhCVUF4aXNJbnB1dENvbW1hbmQuY2xhc3MsICJKYXZhQmVhbk5hbWUiLCBCVUF4aXNEZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyApOwotCQkKLQkgICAgLy9WYWxpZGF0ZU9iamVjdFNlbGVjdGlvbkNvbW1hbmQKLS8vCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKE9iamVjdFNlbGVjdGlvbk91dHB1dENvbW1hbmQuY2xhc3MsICJPYmplY3RTZWxlY3Rpb24iLCBWYWxpZGF0ZU9iamVjdFNlbGVjdGlvbkNvbW1hbmQuY2xhc3MpOwotLy8JICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoQlVBeGlzSW5wdXRDb21tYW5kLmNsYXNzLCAiU2VydmVyUHJvamVjdCIsIFZhbGlkYXRlT2JqZWN0U2VsZWN0aW9uQ29tbWFuZC5jbGFzcywiU2VydmljZVByb2plY3ROYW1lIiwgbnVsbCApOwotCSAgICAKLQkgICAgLy9CVUF4aXNEZWZhdWx0aW5nQ29tbWFuZAotLy8JICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VsZWN0aW9uQ29tbWFuZC5jbGFzcywgIkluaXRpYWxTZWxlY3Rpb24iLCBCVUF4aXNEZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyApOwotLy9LU0MgICByZWdpc3RyeS5hZGRNYXBwaW5nKEJVQXhpc0lucHV0Q29tbWFuZC5jbGFzcywgIlNlcnZpY2VUeXBlUnVudGltZVNlcnZlciIsIEJVQXhpc0RlZmF1bHRpbmdDb21tYW5kLmNsYXNzICk7Ci0JICAgIAkgICAgCi0JCS8vIEF4aXNDaGVja0NvbXBpbGVyTGV2ZWxDb21tYW5kCi0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoQlVBeGlzSW5wdXRDb21tYW5kLmNsYXNzLCAiU2VydmVyUHJvamVjdCIsIEF4aXNDaGVja0NvbXBpbGVyTGV2ZWxDb21tYW5kLmNsYXNzKTsKLQkJCi0JICAgIC8vQlVBeGlzQ29tbWFuZHMyIC0gdGhlc2UgcnVuIGFmdGVyIEJlYW5DbGFzc1dpZGdldAotCSAgICAvL0RlZmF1bHRzRm9yU2VydmVySmF2YVdTRExDb21tYW5kCi0JICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoQlVBeGlzRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgRGVmYXVsdHNGb3JTZXJ2ZXJKYXZhV1NETENvbW1hbmQuY2xhc3MpOwotCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKEJVQXhpc0lucHV0Q29tbWFuZC5jbGFzcywgIlNlcnZlclByb2plY3QiLCBEZWZhdWx0c0ZvclNlcnZlckphdmFXU0RMQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VQcm9qZWN0IiwgbmV3IFN0cmluZ1RvSVByb2plY3RUcmFuc2Zvcm1lcigpKTsKLSAgICAgICAgcmVnaXN0cnkuYWRkTWFwcGluZyhCVUF4aXNJbnB1dENvbW1hbmQuY2xhc3MsICJTZXJ2aWNlU2VydmVyVHlwZUlEIiwgRGVmYXVsdHNGb3JTZXJ2ZXJKYXZhV1NETENvbW1hbmQuY2xhc3MpOyAKLSAgICAgICAgcmVnaXN0cnkuYWRkTWFwcGluZyhCVUF4aXNJbnB1dENvbW1hbmQuY2xhc3MsICJTZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIiLCBEZWZhdWx0c0ZvclNlcnZlckphdmFXU0RMQ29tbWFuZC5jbGFzcyk7ICAgICAgICAKLQkgICAgcmVnaXN0cnkuYWRkTWFwcGluZyhCVUF4aXNEZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkphdmFCZWFuTmFtZSIsIERlZmF1bHRzRm9yU2VydmVySmF2YVdTRExDb21tYW5kLmNsYXNzKTsKLQkgICAgcmVnaXN0cnkuYWRkTWFwcGluZyhCVUF4aXNEZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlBhcnNlciIsIERlZmF1bHRzRm9yU2VydmVySmF2YVdTRExDb21tYW5kLmNsYXNzKTsKLQkgICAgCi0JICAgIC8vSmF2YVdTRExNZXRob2RDb21tYW5kCi0JICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoRGVmYXVsdHNGb3JTZXJ2ZXJKYXZhV1NETENvbW1hbmQuY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgSmF2YVRvV1NETE1ldGhvZENvbW1hbmQuY2xhc3MpOwotCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKEJVQXhpc0lucHV0Q29tbWFuZC5jbGFzcywgIlNlcnZlclByb2plY3QiLCBKYXZhVG9XU0RMTWV0aG9kQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VQcm9qZWN0IiwgbmV3IFN0cmluZ1RvSVByb2plY3RUcmFuc2Zvcm1lcigpKTsKLQotCSAgICAvLyBCVUF4aXNDb21tYW5kczMgLSB0aGVzZSBydW4gYWZ0ZXIgQmVhbkNvbmZpZ1dpZGdldAotICAgIAkgICAgCi0JICAgIC8vQ29weUF4aXNKYXJDb21tYW5kCi0JICAgIC8vcmVnaXN0cnkuYWRkTWFwcGluZyhCVUF4aXNJbnB1dENvbW1hbmQuY2xhc3MsICJTZXJ2ZXJQcm9qZWN0IiwgQ29weUF4aXNKYXJDb21tYW5kLmNsYXNzLCAiUHJvamVjdCIsIG5ldyBTdHJpbmdUb0lQcm9qZWN0VHJhbnNmb3JtZXIoKSk7Ci0JICAgIAkgICAgCi0JICAgIC8vIFZhbGlkYXRlV1NJQ29tcGxpYW5jZUNvbW1hbmQKLQkgICAgcmVnaXN0cnkuYWRkTWFwcGluZyhEZWZhdWx0c0ZvclNlcnZlckphdmFXU0RMQ29tbWFuZC5jbGFzcywgIkphdmFXU0RMUGFyYW0iLCBWYWxpZGF0ZVdTSUNvbXBsaWFuY2VDb21tYW5kLmNsYXNzKTsKLQkgICAgcmVnaXN0cnkuYWRkTWFwcGluZyhCVUF4aXNJbnB1dENvbW1hbmQuY2xhc3MsICJTZXJ2ZXJQcm9qZWN0IiwgVmFsaWRhdGVXU0lDb21wbGlhbmNlQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VQcm9qZWN0IiwgbmV3IFN0cmluZ1RvSVByb2plY3RUcmFuc2Zvcm1lcigpKTsKLQkgICAgCi0JICAgIC8vSmF2YTJXU0RMQ29tbWFuZAotCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKEphdmFUb1dTRExNZXRob2RDb21tYW5kLmNsYXNzLCAiSmF2YVdTRExQYXJhbSIsIEJVQ29kZUdlbk9wZXJhdGlvbi5jbGFzcyk7Ci0JICAgIAotCSAgICAvL1JlZnJlc2hQcm9qZWN0Q29tbWFuZAotCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKEJVQXhpc0lucHV0Q29tbWFuZC5jbGFzcywgIlNlcnZlclByb2plY3QiLCBSZWZyZXNoUHJvamVjdENvbW1hbmQuY2xhc3MsICJQcm9qZWN0IiwgbmV3IFN0cmluZ1RvSVByb2plY3RUcmFuc2Zvcm1lcigpKTsKLQkgICAgCi0JICAgIC8vVXBkYXRlV0VCWE1MQ29tbWFuZAotCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKEJVQXhpc0lucHV0Q29tbWFuZC5jbGFzcywgIlNlcnZlclByb2plY3QiLCBCVUNvZGVHZW5PcGVyYXRpb24uY2xhc3MsICJTZXJ2aWNlUHJvamVjdCIsIG5ldyBTdHJpbmdUb0lQcm9qZWN0VHJhbnNmb3JtZXIoKSk7Ci0JICAgIAotCSAgICAvL0J1aWxkUHJvamVjdENvbW1hbmQKLQkgICAgcmVnaXN0cnkuYWRkTWFwcGluZyhCVUF4aXNJbnB1dENvbW1hbmQuY2xhc3MsICJTZXJ2ZXJQcm9qZWN0IiwgQnVpbGRQcm9qZWN0Q29tbWFuZC5jbGFzcywgIlByb2plY3QiLCBuZXcgU3RyaW5nVG9JUHJvamVjdFRyYW5zZm9ybWVyKCkpOwotCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKEJVQXhpc0RlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiRm9yY2VCdWlsZCIsIEJ1aWxkUHJvamVjdENvbW1hbmQuY2xhc3MpOwotCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKEJVQXhpc0RlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiVmFsaWRhdGlvbk1hbmFnZXIiLCBCdWlsZFByb2plY3RDb21tYW5kLmNsYXNzKTsKLQkgICAgCi0JICAgIC8vU3RhcnRQcm9qZWN0Q29tbWFuZAotLy8JICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoQlVBeGlzSW5wdXRDb21tYW5kLmNsYXNzLCAiU2VydmVyUHJvamVjdCIsIFN0YXJ0UHJvamVjdENvbW1hbmQuY2xhc3MsICJTZXJ2aWNlUHJvamVjdCIsIG5ldyBTdHJpbmdUb0lQcm9qZWN0VHJhbnNmb3JtZXIoKSk7ICAgIAotLy8JICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoQlVBeGlzRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTYW1wbGVQcm9qZWN0IiwgU3RhcnRQcm9qZWN0Q29tbWFuZC5jbGFzcyk7Ci0vL0tTQyAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoQlVBeGlzRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlU2VydmVyVHlwZUlEIiwgU3RhcnRQcm9qZWN0Q29tbWFuZC5jbGFzcyk7Ci0vLwkgICAgcmVnaXN0cnkuYWRkTWFwcGluZyhCVUF4aXNEZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNhbXBsZVNlcnZlclR5cGVJRCIsIFN0YXJ0UHJvamVjdENvbW1hbmQuY2xhc3MpOwotLy8JICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoQlVBeGlzRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIiLCBTdGFydFByb2plY3RDb21tYW5kLmNsYXNzKTsKLS8vCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKEJVQXhpc0RlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2FtcGxlRXhpc3RpbmdTZXJ2ZXIiLCBTdGFydFByb2plY3RDb21tYW5kLmNsYXNzKTsKLS8vCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKEJVQXhpc0RlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSXNXZWJQcm9qZWN0U3RhcnR1cFJlcXVlc3RlZCIsU3RhcnRQcm9qZWN0Q29tbWFuZC5jbGFzcyk7Ci0JICAgICAgICAKLQkJLy8gQXhpc091dHB1dENvbW1hbmQKLQkgICAgcmVnaXN0cnkuYWRkTWFwcGluZyhCVUNvZGVHZW5PcGVyYXRpb24uY2xhc3MsICJXc2RsVVJJIiwgQXhpc091dHB1dENvbW1hbmQuY2xhc3MpOwotCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKEJVQ29kZUdlbk9wZXJhdGlvbi5jbGFzcywgIkphdmFXU0RMUGFyYW0iLCBBeGlzT3V0cHV0Q29tbWFuZC5jbGFzcyk7CSAgICAKLSAgIAotCQkKLQkJLy8gUnVuIGV4dGVuc2lvbgotCQkKLS8vCQlNb2RpZnlXU0RMRW5kcG9pbnRBZGRyZXNzQ29tbWFuZAotCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNSdW5JbnB1dENvbW1hbmQuY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgTW9kaWZ5V1NETEVuZHBvaW50QWRkcmVzc0NvbW1hbmQuY2xhc3MpOwotCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNSdW5JbnB1dENvbW1hbmQuY2xhc3MsICJTZXJ2ZXJJbnN0YW5jZUlkIiwgTW9kaWZ5V1NETEVuZHBvaW50QWRkcmVzc0NvbW1hbmQuY2xhc3MpOwotCSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNSdW5JbnB1dENvbW1hbmQuY2xhc3MsICJTZXJ2ZXJGYWN0b3J5SWQiLCBNb2RpZnlXU0RMRW5kcG9pbnRBZGRyZXNzQ29tbWFuZC5jbGFzcyk7Ci0JICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc1J1bklucHV0Q29tbWFuZC5jbGFzcywgIlNlcnZlclByb2plY3QiLCBNb2RpZnlXU0RMRW5kcG9pbnRBZGRyZXNzQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VQcm9qZWN0IiwgbmV3IFN0cmluZ1RvSVByb2plY3RUcmFuc2Zvcm1lcigpKTsKLQkgICAgcmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzUnVuSW5wdXRDb21tYW5kLmNsYXNzLCAiV3NkbFVSSSIsIE1vZGlmeVdTRExFbmRwb2ludEFkZHJlc3NDb21tYW5kLmNsYXNzKTsKLQkgICAgcmVnaXN0cnkuYWRkTWFwcGluZyhCVUF4aXNEZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlBhcnNlciIsIE1vZGlmeVdTRExFbmRwb2ludEFkZHJlc3NDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZXNQYXJzZXIiLCBudWxsKTsKLQotCQkvLyBHZXJvbmltb0F4aXNEZXBsb3lDb21tYW5kCi0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoTW9kaWZ5V1NETEVuZHBvaW50QWRkcmVzc0NvbW1hbmQuY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgR2Vyb25pbW9BeGlzRGVwbG95Q29tbWFuZC5jbGFzcyk7CQkKLQkgICAgCi0JCS8vQXhpc0RlcGxveUNvbW1hbmQKLQkgICAgcmVnaXN0cnkuYWRkTWFwcGluZyhNb2RpZnlXU0RMRW5kcG9pbnRBZGRyZXNzQ29tbWFuZC5jbGFzcywgIkphdmFXU0RMUGFyYW0iLCBBeGlzRGVwbG95Q29tbWFuZC5jbGFzcyk7Ci0JCQotCSAgICAvLyBDb3B5RGVwbG95bWVudEZpbGVDb21tYW5kCi0JICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc1J1bklucHV0Q29tbWFuZC5jbGFzcywgIlNlcnZlckluc3RhbmNlSWQiLCBDb3B5RGVwbG95bWVudEZpbGVDb21tYW5kLmNsYXNzKTsKLQkgICAgCi0JICAgIC8vUmVmcmVzaFByb2plY3RDb21tYW5kCi0JICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc1J1bklucHV0Q29tbWFuZC5jbGFzcywgIlNlcnZlclByb2plY3QiLCBSZWZyZXNoUHJvamVjdENvbW1hbmQuY2xhc3MsICJQcm9qZWN0IiwgbmV3IFN0cmluZ1RvSVByb2plY3RUcmFuc2Zvcm1lcigpKTsKLQkgICAgCi0JICB9Ci0KLQlwdWJsaWMgdm9pZCByZWdpc3RlclRERGF0YU1hcHBpbmdzKERhdGFNYXBwaW5nUmVnaXN0cnkgZGF0YVJlZ2lzdHJ5KQotCSAgewotCSAgICAvLyBUcmFuc2Zvcm1lcnMKLQkgICAgUHJvamVjdE5hbWUySVByb2plY3RUcmFuc2Zvcm1lciBwcm9qZWN0VHJhbnNmb3JtZXIgPSBuZXcgUHJvamVjdE5hbWUySVByb2plY3RUcmFuc2Zvcm1lcigpOwotCi0JCS8vIFRPRE86ICBtYXAgIkluaXRpYWxTZWxlY3Rpb24iIGFuZCAiT2JqZWN0U2VsZWN0aW9uIiBmcm9tIFREQXhpc0lucHV0Q29tbWFuZAotCQkKLS8vCSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZWxlY3Rpb25Db21tYW5kLmNsYXNzLCAiSW5pdGlhbFNlbGVjdGlvbiIsIEF4aXNTa2VsZXRvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLS8vCSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhPYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiT2JqZWN0U2VsZWN0aW9uIiwgQXhpc1NrZWxldG9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotLy8JICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFREQXhpc0lucHV0Q29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2VzUGFyc2VyIiwgQXhpc1NrZWxldG9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotCSAgICAKLQkgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc1NrZWxldG9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgU2tlbGV0b25Db25maWdXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0JCWRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFREQXhpc0lucHV0Q29tbWFuZC5jbGFzcywgIldzZGxVUkkiLCBBeGlzU2tlbGV0b25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0JICAgIC8vIFZhbGlkYXRlV1NETENvbW1hbmQKLQkgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc1NrZWxldG9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlc1BhcnNlciIsIFZhbGlkYXRlV1NETENvbW1hbmQuY2xhc3MpOwotCSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzU2tlbGV0b25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIldzZGxVUkkiLCBWYWxpZGF0ZVdTRExDb21tYW5kLmNsYXNzKTsKLQkgICAgCi0JICAgIC8vIFNrZWxldG9uQ29uZmlnV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQKLQkgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoVERBeGlzSW5wdXRDb21tYW5kLmNsYXNzLCAiU2VydmVyUHJvamVjdCIsIFNrZWxldG9uQ29uZmlnV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotCSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzU2tlbGV0b25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIldzZGxVUkkiLCBTa2VsZXRvbkNvbmZpZ1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLQkgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoVERBeGlzSW5wdXRDb21tYW5kLmNsYXNzLCAiU2VydmljZVNlcnZlclR5cGVJRCIsIFNrZWxldG9uQ29uZmlnV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotCSAgICAgICAKLQkgICAgLy8gQXhpc1NrZWxldG9uRGVmYXVsdGluZ0NvbW1hbmQKLQkgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc1NrZWxldG9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJXc2RsVVJJIiwgVERDb2RlR2VuT3BlcmF0aW9uLmNsYXNzKTsKLQkgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc1NrZWxldG9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJIdHRwQmFzaWNBdXRoVXNlcm5hbWUiLCBURENvZGVHZW5PcGVyYXRpb24uY2xhc3MpOwotCSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzU2tlbGV0b25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkh0dHBCYXNpY0F1dGhQYXNzd29yZCIsIFREQ29kZUdlbk9wZXJhdGlvbi5jbGFzcyk7Ci0JICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNTa2VsZXRvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSmF2YVdTRExQYXJhbSIsIFREQ29kZUdlbk9wZXJhdGlvbi5jbGFzcyk7Ci0JICAgIAotCSAgICAvLyBDb3B5QXhpc0phckNvbW1hbmQKLQkgICAgLy9kYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhUREF4aXNJbnB1dENvbW1hbmQuY2xhc3MsICJTZXJ2ZXJQcm9qZWN0IiwgQ29weUF4aXNKYXJDb21tYW5kLmNsYXNzLCAiUHJvamVjdCIsIHByb2plY3RUcmFuc2Zvcm1lcik7Ci0KLQkgICAgLy8gQmFja3VwU2tlbEltcGxDb21tYW5kCi0JICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNTa2VsZXRvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZXNQYXJzZXIiLCBURENvZGVHZW5PcGVyYXRpb24uY2xhc3MpOyAgICAgIAotCSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhUREF4aXNJbnB1dENvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlSW5mbyIsIFREQ29kZUdlbk9wZXJhdGlvbi5jbGFzcyk7Ci0JICAgIAotCSAgICAvLyBTa2VsZXRvbjJXU0RMQ29tbWFuZAotCSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhUREF4aXNJbnB1dENvbW1hbmQuY2xhc3MsICJTZXJ2ZXJQcm9qZWN0IiwgVERDb2RlR2VuT3BlcmF0aW9uLmNsYXNzLCAiU2VydmVyUHJvamVjdCIsIHByb2plY3RUcmFuc2Zvcm1lcik7Ci0JICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFREQXhpc0lucHV0Q29tbWFuZC5jbGFzcywgIlNlcnZpY2VTZXJ2ZXJUeXBlSUQiLCBURENvZGVHZW5PcGVyYXRpb24uY2xhc3MpOwotCSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhUREF4aXNJbnB1dENvbW1hbmQuY2xhc3MsICJTZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIiLCBURENvZGVHZW5PcGVyYXRpb24uY2xhc3MpOwkKLQotCSAgICAvLyBSZWZyZXNoUHJvamVjdENvbW1hbmQKLQkgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoVERBeGlzSW5wdXRDb21tYW5kLmNsYXNzLCAiU2VydmVyUHJvamVjdCIsIFJlZnJlc2hQcm9qZWN0Q29tbWFuZC5jbGFzcywgIlByb2plY3QiLCBwcm9qZWN0VHJhbnNmb3JtZXIpOwotCSAgICAKLQkgICAgLy8gQnVpbGRQcm9qZWN0Q29tbWFuZAotCSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhUREF4aXNJbnB1dENvbW1hbmQuY2xhc3MsICJTZXJ2ZXJQcm9qZWN0IiwgQnVpbGRQcm9qZWN0Q29tbWFuZC5jbGFzcywgIlByb2plY3QiLCBwcm9qZWN0VHJhbnNmb3JtZXIpOwotCi0JICAgIC8vCU1vZGlmeVdTRExFbmRwb2ludEFkZHJlc3NDb21tYW5kCi0JICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNSdW5JbnB1dENvbW1hbmQuY2xhc3MsICJKYXZhV1NETFBhcmFtIiwgTW9kaWZ5V1NETEVuZHBvaW50QWRkcmVzc0NvbW1hbmQuY2xhc3MpOwotCSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhBeGlzUnVuSW5wdXRDb21tYW5kLmNsYXNzLCAiU2VydmVySW5zdGFuY2VJZCIsIE1vZGlmeVdTRExFbmRwb2ludEFkZHJlc3NDb21tYW5kLmNsYXNzKTsKLQkgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc1J1bklucHV0Q29tbWFuZC5jbGFzcywgIlNlcnZlckZhY3RvcnlJZCIsIE1vZGlmeVdTRExFbmRwb2ludEFkZHJlc3NDb21tYW5kLmNsYXNzKTsKLQkgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc1J1bklucHV0Q29tbWFuZC5jbGFzcywgIlNlcnZlclByb2plY3QiLCBNb2RpZnlXU0RMRW5kcG9pbnRBZGRyZXNzQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VQcm9qZWN0IiwgbmV3IFN0cmluZ1RvSVByb2plY3RUcmFuc2Zvcm1lcigpKTsKLQkgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc1J1bklucHV0Q29tbWFuZC5jbGFzcywgIldzZGxVUkkiLCBNb2RpZnlXU0RMRW5kcG9pbnRBZGRyZXNzQ29tbWFuZC5jbGFzcyk7Ci0JICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEF4aXNTa2VsZXRvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZXNQYXJzZXIiLCBNb2RpZnlXU0RMRW5kcG9pbnRBZGRyZXNzQ29tbWFuZC5jbGFzcyk7Ci0KLQkgICAgLy8gR2Vyb25pbW9BeGlzRGVwbG95Q29tbWFuZAotCSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhNb2RpZnlXU0RMRW5kcG9pbnRBZGRyZXNzQ29tbWFuZC5jbGFzcywgIkphdmFXU0RMUGFyYW0iLCBHZXJvbmltb0F4aXNEZXBsb3lDb21tYW5kLmNsYXNzKTsKLQkgICAgCi0JICAgIC8vIEF4aXNEZXBsb3lDb21tYW5kCi0JICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKE1vZGlmeVdTRExFbmRwb2ludEFkZHJlc3NDb21tYW5kLmNsYXNzLCAiSmF2YVdTRExQYXJhbSIsIEF4aXNEZXBsb3lDb21tYW5kLmNsYXNzKTsKLQkgICAgCi0JICAgIC8vIENvcHlEZXBsb3ltZW50RmlsZUNvbW1hbmQKLQkgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQXhpc1J1bklucHV0Q29tbWFuZC5jbGFzcywgIlNlcnZlckluc3RhbmNlSWQiLCBDb3B5RGVwbG95bWVudEZpbGVDb21tYW5kLmNsYXNzKTsKLQkgICAgCi0JICAgIC8vIEF4aXNPdXRwdXRDb21tYW5kCi0JICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFREQ29kZUdlbk9wZXJhdGlvbi5jbGFzcywgIldzZGxVUkkiLCBBeGlzT3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0JICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFREQ29kZUdlbk9wZXJhdGlvbi5jbGFzcywgIkphdmFXU0RMUGFyYW0iLCBBeGlzT3V0cHV0Q29tbWFuZC5jbGFzcyk7IAotCSAgfQotCXB1YmxpYyBBeGlzV2ViU2VydmljZUluZm8gZ2V0QXhpc1dlYlNlcnZpY2VJbmZvKCkgewotCQlyZXR1cm4gYXhpc1dlYlNlcnZpY2VJbmZvXzsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRBeGlzV2ViU2VydmljZUluZm8oQXhpc1dlYlNlcnZpY2VJbmZvIGF4aXNXZWJTZXJ2aWNlSW5mbykgewotCQlheGlzV2ViU2VydmljZUluZm9fID0gYXhpc1dlYlNlcnZpY2VJbmZvOwotCX0KLX0JCi0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dzcnQvQXhpc1dlYlNlcnZpY2VJbmZvLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvYXhpcy9jcmVhdGlvbi91aS93c3J0L0F4aXNXZWJTZXJ2aWNlSW5mby5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTdmNzhiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dzcnQvQXhpc1dlYlNlcnZpY2VJbmZvLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY3JlYXRpb24udWkud3NydDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5heGlzLmNvbnN1bXB0aW9uLmNvcmUuY29tbW9uLkphdmFXU0RMUGFyYW1ldGVyOwotCi1wdWJsaWMgY2xhc3MgQXhpc1dlYlNlcnZpY2VJbmZvIHsKLQkKLQlwcml2YXRlIEphdmFXU0RMUGFyYW1ldGVyIGphdmFXU0RMUGFyYW1ldGVyOwotCi0JcHVibGljIEphdmFXU0RMUGFyYW1ldGVyIGdldEphdmFXU0RMUGFyYW1ldGVyKCkgewotCQlyZXR1cm4gamF2YVdTRExQYXJhbWV0ZXI7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0SmF2YVdTRExQYXJhbWV0ZXIoSmF2YVdTRExQYXJhbWV0ZXIgamF2YVdTRExQYXJhbWV0ZXIpIHsKLQkJdGhpcy5qYXZhV1NETFBhcmFtZXRlciA9IGphdmFXU0RMUGFyYW1ldGVyOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd3NydC9BeGlzV2ViU2VydmljZVJ1bnRpbWUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9heGlzL2NyZWF0aW9uL3VpL3dzcnQvQXhpc1dlYlNlcnZpY2VSdW50aW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiYmQxMGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2F4aXMvY3JlYXRpb24vdWkvd3NydC9BeGlzV2ViU2VydmljZVJ1bnRpbWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jcmVhdGlvbi51aS53c3J0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmF4aXMuY29uc3VtcHRpb24udWkud3NydC5BeGlzV2ViU2VydmljZUNsaWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5BYnN0cmFjdFdlYlNlcnZpY2VSdW50aW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlQ2xpZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VDbGllbnRJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VJbmZvOwotCi1wdWJsaWMgY2xhc3MgQXhpc1dlYlNlcnZpY2VSdW50aW1lIGV4dGVuZHMgQWJzdHJhY3RXZWJTZXJ2aWNlUnVudGltZQotewotCi0JcHVibGljIElXZWJTZXJ2aWNlIGdldFdlYlNlcnZpY2UoV2ViU2VydmljZUluZm8gaW5mbykKLQl7Ci0gICAgcmV0dXJuIG5ldyBBeGlzV2ViU2VydmljZShpbmZvKTsKLQl9Ci0KLQlwdWJsaWMgSVdlYlNlcnZpY2VDbGllbnQgZ2V0V2ViU2VydmljZUNsaWVudChXZWJTZXJ2aWNlQ2xpZW50SW5mbyBpbmZvKQotCXsKLQkJcmV0dXJuIG5ldyBBeGlzV2ViU2VydmljZUNsaWVudChpbmZvKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLy5jbGFzc3BhdGggYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjE2NWVjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYy8iLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNmY0NTQ3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLWJpbgotYnVpbGQueG1sCi10ZW1wLmZvbGRlcgotd3NjLXVpLmphcgotQGRvdAotc3JjLnppcAotamF2YUNvbXBpbGVyLi4uYXJncwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvLnByb2plY3QgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTEwMjYwNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2MGZkNzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotI01vbiBKYW4gMzAgMTA6MzY6MDIgRVNUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTNlZGRmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jTW9uIEphbiAzMCAxMDo0MToyMCBFU1QgMjAwNgotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxMGEzYzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlUExVR0lOX05BTUUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aTsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjMwNS5xdWFsaWZpZXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5wbHVnaW4uV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVQTFVHSU5fUFJPVklERVIKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5hY3Rpb247eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuYW50O3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQ7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbWFuZC5kYXRhO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1vbjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5leHRlbnNpb247eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucGx1Z2luO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnByZWZlcmVuY2VzO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnNlbGVjdGlvbjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5zZXJ2ZXI7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0czt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmJpbmRpbmc7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0O3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMucnVudGltZTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3Q7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0LmV4cGxvcmVyO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC53c3NhbXBsZTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQ7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLnVkZGk7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NpbDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0O3gtaW50ZXJuYWw6PXRydWUKLVJlcXVpcmUtQnVuZGxlOiBvcmcuYXBhY2hlLnhlcmNlcztidW5kbGUtdmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsIAotIG9yZy5lY2xpcHNlLndzdC53cy5wYXJzZXI7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAwLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52O2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS5qc3QuY29tbW9uLmZyYW1ld29ya3M7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53cy5leHBsb3JlcjtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS5qc3Qud3M7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LndzLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbjtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZW07YnVuZGxlLXZlcnNpb249IlsyLjAuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLmplbS53b3JrYmVuY2g7YnVuZGxlLXZlcnNpb249IlsyLjAuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLmVtZi5jb21tb247YnVuZGxlLXZlcnNpb249IlsyLjIuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLmVtZi5lY29yZTtidW5kbGUtdmVyc2lvbj0iWzIuMi4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamR0LmNvcmU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmpkdC51aTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UudWk7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXM7YnVuZGxlLXZlcnNpb249IlszLjIuMCwzLjQuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53cztidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDAsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZW0ud29ya2JlbmNoO2J1bmRsZS12ZXJzaW9uPSJbMi4wLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pO2J1bmRsZS12ZXJzaW9uPSJbMi4yLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAyLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDIsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbDtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LmoyZWU7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC5qMmVlLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC5qMmVlLmVqYjtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LmoyZWUud2ViO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVtZjtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbWZ3b3JrYmVuY2guaW50ZWdyYXRpb247YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3JrcztidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS51aTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5tb2R1bGVjb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3MudWk7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAwLDEuMS4wKSIsCi0gamF2YXgud3NkbDtidW5kbGUtdmVyc2lvbj0iWzEuNC4wLDEuNS4wKSIsCi0gb3JnLmVjbGlwc2UuamVtLnV0aWw7YnVuZGxlLXZlcnNpb249IlsyLjAuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb247YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy51aTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudDtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDAsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMiwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLmRlYnVnLmNvcmU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIGNvbS5pYm0uaWN1O2J1bmRsZS12ZXJzaW9uPSJbMy40LjQsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS51aS5mb3JtcztidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2Fib3V0Lmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2RiMzZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lIDA2LCAyMDA3PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2J1aWxkLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZmI4Y2IyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLXNvdXJjZS4uID0gc3JjLwotYmluLmluY2x1ZGVzID0gLixcCi0gICAgICAgICAgICAgICBpY29ucy8sXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbAotc3JjLmluY2x1ZGVzID0gc2NoZW1hLwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvY2xpZW50X2Fzc2VtYmxlLmpwZyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2NsaWVudF9hc3NlbWJsZS5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2NzY2NzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvY2xpZW50X2Fzc2VtYmxlLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2NsaWVudF9kZXBsb3kuanBnIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvY2xpZW50X2RlcGxveS5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjZmM4NjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvY2xpZW50X2RlcGxveS5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9jbGllbnRfZGV2ZWxvcC5qcGcgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9jbGllbnRfZGV2ZWxvcC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2NTllMjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvY2xpZW50X2RldmVsb3AuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvY2xpZW50X2luc3RhbGwuanBnIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvY2xpZW50X2luc3RhbGwuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODIyNTA4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2NsaWVudF9pbnN0YWxsLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2NsaWVudF9ub25lLmpwZyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2NsaWVudF9ub25lLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTFjOGZhOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9jbGllbnRfbm9uZS5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9jbGllbnRfcnVuLmpwZyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2NsaWVudF9ydW4uanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjNhYzcwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2NsaWVudF9ydW4uanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvY2xpZW50X3Rlc3QuanBnIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvY2xpZW50X3Rlc3QuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNmI5NDQ1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2NsaWVudF90ZXN0LmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2Z1bGwvY3Rvb2wxNi9jb25maWd1cmVfaGFuZGxlcnMuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvZnVsbC9jdG9vbDE2L2NvbmZpZ3VyZV9oYW5kbGVycy5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExMTNjODUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvZnVsbC9jdG9vbDE2L2NvbmZpZ3VyZV9oYW5kbGVycy5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9mdWxsL2N0b29sMTYvZ2VuZXJhdGVkX3NhbXBsZS5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9mdWxsL2N0b29sMTYvZ2VuZXJhdGVkX3NhbXBsZS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhYmE1MWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvZnVsbC9jdG9vbDE2L2dlbmVyYXRlZF9zYW1wbGUuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvZnVsbC9jdG9vbDE2L25ld2NsaWVudF93ZWJzZXJ2X3dpei5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9mdWxsL2N0b29sMTYvbmV3Y2xpZW50X3dlYnNlcnZfd2l6LmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWVlMDVmYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9mdWxsL2N0b29sMTYvbmV3Y2xpZW50X3dlYnNlcnZfd2l6LmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2Z1bGwvZHRvb2wvY29uZmlndXJlX2hhbmRsZXJzLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2Z1bGwvZHRvb2wvY29uZmlndXJlX2hhbmRsZXJzLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA2MGRkOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9mdWxsL2R0b29sL2NvbmZpZ3VyZV9oYW5kbGVycy5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9mdWxsL2R0b29sL2dlbmVyYXRlZF9zYW1wbGUuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvZnVsbC9kdG9vbC9nZW5lcmF0ZWRfc2FtcGxlLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTkwZDM5Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9mdWxsL2R0b29sL2dlbmVyYXRlZF9zYW1wbGUuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvZnVsbC93aXpiYW4vY29uZmlnX2hhbmRsZXJfd2l6LnBuZyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2Z1bGwvd2l6YmFuL2NvbmZpZ19oYW5kbGVyX3dpei5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiMTE4OWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvZnVsbC93aXpiYW4vY29uZmlnX2hhbmRsZXJfd2l6LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2Z1bGwvd2l6YmFuL2dlbl9zYW1wbGVfd2l6LnBuZyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2Z1bGwvd2l6YmFuL2dlbl9zYW1wbGVfd2l6LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGViYWZjOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9mdWxsL3dpemJhbi9nZW5fc2FtcGxlX3dpei5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9mdWxsL3dpemJhbi9pbXBvcnQtd3NpbF93aXoucG5nIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvZnVsbC93aXpiYW4vaW1wb3J0LXdzaWxfd2l6LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTY5YmRiMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9mdWxsL3dpemJhbi9pbXBvcnQtd3NpbF93aXoucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvZnVsbC93aXpiYW4vaW1wb3J0X3dzX3dpei5wbmcgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9mdWxsL3dpemJhbi9pbXBvcnRfd3Nfd2l6LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM3OGVlNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9mdWxsL3dpemJhbi9pbXBvcnRfd3Nfd2l6LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2Z1bGwvd2l6YmFuL3dlYnNlcnZpY2VzY2xpZW50X3dpei5wbmcgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9mdWxsL3dpemJhbi93ZWJzZXJ2aWNlc2NsaWVudF93aXoucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDIzMzViLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL2Z1bGwvd2l6YmFuL3dlYnNlcnZpY2VzY2xpZW50X3dpei5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9pbXBvcnRfd3MuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvaW1wb3J0X3dzLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQxZmU4NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9pbXBvcnRfd3MuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvcmVnaXN0cnkuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvcmVnaXN0cnkuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjQzY2FlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL3JlZ2lzdHJ5LmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL3NjYWxlMF9iZ3JvdW5kLmpwZyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL3NjYWxlMF9iZ3JvdW5kLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGRhNWNhMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9zY2FsZTBfYmdyb3VuZC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9zY2FsZTFfYmdyb3VuZC5qcGcgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9zY2FsZTFfYmdyb3VuZC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmMTIwN2QuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvc2NhbGUxX2Jncm91bmQuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvc2NhbGUyX2Jncm91bmQuanBnIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvc2NhbGUyX2Jncm91bmQuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NzQxZmRlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL3NjYWxlMl9iZ3JvdW5kLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL3NjYWxlM19iZ3JvdW5kLmpwZyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL3NjYWxlM19iZ3JvdW5kLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzVkNGUyMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9zY2FsZTNfYmdyb3VuZC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9zY2FsZTRfYmdyb3VuZC5qcGcgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9zY2FsZTRfYmdyb3VuZC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyYmJkNWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvc2NhbGU0X2Jncm91bmQuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvc2NhbGU1X2Jncm91bmQuanBnIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvc2NhbGU1X2Jncm91bmQuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDgwNmY3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL3NjYWxlNV9iZ3JvdW5kLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL3NjYWxlNl9iZ3JvdW5kLmpwZyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL3NjYWxlNl9iZ3JvdW5kLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE4YmNmZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9zY2FsZTZfYmdyb3VuZC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9zZXJ2ZXJzL2V4aXN0aW5nX3NlcnZlcl9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvc2VydmVycy9leGlzdGluZ19zZXJ2ZXJfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZiNmNiNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9zZXJ2ZXJzL2V4aXN0aW5nX3NlcnZlcl9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvc2VydmVycy9zZXJ2ZXJzX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9zZXJ2ZXJzL3NlcnZlcnNfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZiNmNiNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy9zZXJ2ZXJzL3NlcnZlcnNfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL3dzaWwvaHRtbC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy93c2lsL2h0bWwuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2U3ZGJkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL3dzaWwvaHRtbC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy93c2lsL2ltcG9ydF93c2lsLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL3dzaWwvaW1wb3J0X3dzaWwuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MThhOTQ2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL3dzaWwvaW1wb3J0X3dzaWwuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvd3NpbC93c2RsLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL3dzaWwvd3NkbC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmYjg0NGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvaWNvbnMvd3NpbC93c2RsLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL3dzaWwvd3NpbC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9pY29ucy93c2lsL3dzaWwuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzU5MTZmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL2ljb25zL3dzaWwvd3NpbC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9wbHVnaW4ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWZjZTYyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTM2ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotIyAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyAyMDA2MDUxNSAgIDE0MTUzNiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0jIDIwMDcwODIwICAgMTkxNTg1IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIwotIyBNZXNzYWdlcyBpbiBwbHVnaW4ueG1sLgotIwotUExVR0lOX05BTUU9V2ViIFNlcnZpY2VzIENvbnN1bXB0aW9uIEdyYXBoaWNhbCBVc2VyIEludGVyZmFjZQotUExVR0lOX1BST1ZJREVSPUVjbGlwc2Uub3JnCi0KLUZFQVRVUkVfREVTQ1JJUFRJT049V2ViIHNlcnZpY2VzCi1XRUJTRVJWSUNFU19DQVRFR09SWT1XZWIgc2VydmljZXMKLQotWFBfd3NJbXBsPVdlYiBzZXJ2aWNlIGltcGxlbWVudGF0aW9ucwotWFBfd3NDbGllbnRJbXBsPVdlYiBzZXJ2aWNlIGNsaWVudCBpbXBsZW1lbnRhdGlvbnMKLVhQX3J1bnRpbWVzPVdlYiBzZXJ2aWNlIHJ1bnRpbWVzCi1YUF9zZXJ2aWNlUnVudGltZXM9Q29tYmluYXRpb24gb2YgYSBXZWIgc2VydmljZSBydW5pbWUsIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gdHlwZSwgYW5kIHJlcXVpcmVkIGZhY2V0cwotWFBfY2xpZW50UnVudGltZXM9Q29tYmluYXRpb24gb2YgYSBXZWIgc2VydmljZSBydW5pbWUsIGNsaWVudCBpbXBsZW1lbnRhdGlvbiB0eXBlLCBhbmQgcmVxdWlyZWQgZmFjZXRzCi1YUF90ZXN0ZXI9V2ViIHNlcnZpY2UgdGVzdCBmYWNpbGl0aWVzCi0KLVhQX1BVQkxJQ19VRERJX1JFR0lTVFJZX1RZUEVTPVB1YmxpYyBVRERJIFJlZ2lzdHJ5IFR5cGVzCi1YUF9QUklWQVRFX1VERElfUkVHSVNUUllfVFlQRVM9UHJpdmF0ZSBVRERJIFJlZ2lzdHJ5IFR5cGVzCi1YUF9XRUJfU0VSVklDRV9DTElFTlRfVFlQRVM9V2ViIFNlcnZpY2UgQ2xpZW50IFR5cGVzCi1YUF9XRUJfU0VSVklDRV9URVNUPVdlYiBTZXJ2aWNlIFRlc3QKLVhQX1dFQl9TRVJWSUNFX1NFUlZFUl9SVU5USU1FX1RZUEVTPVdlYiBTZXJ2aWNlIFNlcnZlciBSdW50aW1lIFR5cGVzCi1YUF9XRUJfU0VSVklDRV9DTElFTlRfUFJPSkVDVF9UWVBFPWNsaWVudFByb2plY3RUeXBlCi1YUF9PQkpFQ1RfU0VMRUNUSU9OX1dJREdFVD1vYmplY3RTZWxlY3Rpb25XaWRnZXQKLQotIwotIyBXaXphcmRzLgotIwotV0laQVJEX1RJVExFX1dTQz1XZWIgU2VydmljZSBDbGllbnQKLQotUExVR0lOX05FV19XSVpBUkRfTkFNRV9XU19DTElFTlQ9V2ViIFNlcnZpY2UgQ2xpZW50Ci1QTFVHSU5fSU1QT1JUX1dJWkFSRF9OQU1FX1dTPVdlYiBTZXJ2aWNlCi1QTFVHSU5fTkVXX1dJWkFSRF9ERVNDX1dTX0NMSUVOVD1BY2Nlc3MgYW4gZXhpc3RpbmcgWE1MIHdlYiBzZXJ2aWNlCi1QTFVHSU5fSU1QT1JUX1dJWkFSRF9ERVNDX1dTPUEgd2l6YXJkIGZvciBpbXBvcnRpbmcgYSB3ZWIgc2VydmljZQotSU1QT1JUX1dJWkFSRF9ERVNDX1dTSUw9SW1wb3J0IFdTREwgcmVmZXJlbmNlcyB0byBhIFdTSUwgZG9jdW1lbnQKLQotIwotIyBXZWIgU2FtcGxlcyBJRHMKLSMKLVNBTVBMRV9UWVBFX1dFQlNFUlZJQ0VTX0lEPVdlYiBzZXJ2aWNlIHNhbXBsZSBKU1BzCi0KLSMKLSMgUG9wLXVwIGFjdGlvbnMKLSMKLUFDVElPTl9HRU5FUkFURV9KQVZBX1BST1hZPUdlbmVyYXRlIENsaWVudAotQUNUSU9OX0dFTl9TQU1QTEU9R2VuZXJhdGUgU2FtcGxlIEpTUHMKLQotIwotIyBEaWFsb2dzCi0jCi1DSEVDS0JPWF9TSE9XX0dFTkVSQVRFX0pBVkFfUFJPWFlfRElBTE9HPUhpZGUgJkdlbmVyYXRlIEphdmEgYmVhbiBQcm94eSBEaWFsb2cKLUNIRUNLQk9YX1NIT1dfUFJPWFkyU0FNUExFX0RJQUxPRz1IaWRlICZQcm94eSBUbyBTYW1wbGUgR2VuZXJhdGlvbiBEaWFsb2cKLVRPT0xUSVBfUFBBRF9DSEVDS0JPWF9XU0RMMlBST1hZPUhpZGUgdGhlIGRpYWxvZyBmb3IgZ2VuZXJhdGluZyB0aGUgSmF2YSBiZWFuIHByb3h5IGFjdGlvbi4KLVRPT0xUSVBfUFBBRF9DSEVDS0JPWF9QUk9YWTJTQU1QTEU9SGlkZSB0aGUgZGlhbG9nIGZvciBnZW5lcmF0aW5nIHRoZSBzYW1wbGUgYXBwbGljYXRpb24gYWN0aW9uLgotCi0jCi0jICAgICAgIFdlYiBTZXJ2aWNlcyBQcmVmZXJhbmNlIFBhZ2VzCi0jCi0jIENhdGVnb3JpZXMKLQotUFJFRkVSRU5DRV9DQVRFR09SWV9TRVJWRVJfUlVOVElNRT1TZXJ2ZXIgYW5kIFJ1bnRpbWUKLVBSRUZFUkVOQ0VfQ0FURUdPUllfUFJPSkVDVF9UT1BPTE9HWT1Qcm9qZWN0IFRvcG9sb2d5Ci1QUkVGRVJFTkNFX0NBVEVHT1JZX1RFU1RfRkFDSUxJVFk9VGVzdCBGYWNpbGl0eSBEZWZhdWx0cwotUFJFRkVSRU5DRV9DQVRFR09SWV9ESUFMT0dTPVBvcHVwIERpYWxvZyBTZWxlY3Rpb24KLQotCi0jIFRoaXMgcHJvcGVydHkgaGFzIGJlZW4gbW92ZWQgdG8gdGhlIGV4cGxvcmVyIHBsdWdpbiBhbmQgbWF5IGJlIG9ic29sZXRlIGhlcmUuCi0jCi0jIFBvcC11cCBhY3Rpb25zCi0jCi1NRU5VX1JVTj0mUnVuCi0KLSMKLSMgV2ViU2VydmljZVRlc3RQYWdlCi0jCi1XU0VYUExPUkVSX0lEPVdlYiBTZXJ2aWNlcyBFeHBsb3JlcgotCi0jIFRoZXNlIHByb3BlcnRpZXMgaGF2ZSBiZWVuIG1vdmVkIHRvIHRoZSBleHBsb3JlciBwbHVnaW4gYW5kIG1heSBiZSBvYnNvbGV0ZSBoZXJlLgotIwotIyBXZWJTZXJ2aWNlUHVibGlzaFBhZ2UKLSMKLVRPT0xUSVBfTEFVTkNIX1dTX0VYUExPUkVSPUxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyCi1DT01NQU5EX0xBVU5DSF9XU19FWFBMT1JFUj1MYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcgotCi0jCi0jIFB1YmxpY1VERElSZWdpc3RyeVR5cGUKLSMKLVBVQkxJQ1VERElSRUdJU1RSWVRZUEVfTkFNRV9TQVA9U0FQIFVEREkgUmVnaXN0cnkKLVBVQkxJQ1VERElSRUdJU1RSWVRZUEVfTkFNRV9TQVBfVEVTVD1TQVAgVURESSBUZXN0IFJlZ2lzdHJ5Ci1QVUJMSUNVRERJUkVHSVNUUllUWVBFX05BTUVfWE1FVEhPRFM9WE1ldGhvZHMgUmVnaXN0cnkKLVBVQkxJQ1VERElSRUdJU1RSWVRZUEVfTkFNRV9OVFRDT01NPU5UVCBDb21tdW5pY2F0aW9ucyBSZWdpc3RyeQotCi0jCi0jIFdTSUwgcHJveHkKLSMKLUlNUE9SVF9XSVpBUkRfTkFNRV9XU0lMPVdTSUwKLVBPUFVQX0dFTkVSQVRFX1dTSUw9R2VuZXJhdGUgV1NJTAotCi0jCi0jIFdlYiBTZXJ2aWNlIFNlcnZlciBSdW50aW1lIFR5cGUKLSMKLVdFQlNFUlZJQ0VUWVBFX05BTUVfV1NETD1Ta2VsZXRvbiBKYXZhIGJlYW4gV2ViIFNlcnZpY2UKLVdFQlNFUlZJQ0VUWVBFX05BTUVfSkFWQT1KYXZhIGJlYW4gV2ViIFNlcnZpY2UKLQotIwotIyBXZWIgc2VydmljZSBjbGllbnQgaW1wbGVtZW50YXRpb24gdHlwZQotIwotSkFWQV9QUk9YWT1KYXZhIFByb3h5Ci0jCi0jIENsaWVudCBwcm9qZWN0IHR5cGUKLSMKLUxBQkVMX0NMSUVOVF9UWVBFX1dFQj1XZWIKLUxBQkVMX0NMSUVOVF9UWVBFX0VKQj1FSkIKLUxBQkVMX0NMSUVOVF9UWVBFX0FQUF9DTElFTlQ9QXBwbGljYXRpb24gQ2xpZW50Ci1MQUJFTF9DTElFTlRfVFlQRV9DT05UQUlORVJMRVNTPUphdmEKLQotIwotIyBIYW5kbGVycyBDb25maWd1cmF0aW9uIHdpemFyZCBwYWdlCi0jCi1QT1BVUF9BRERfSEFORExFUlM9Q29uZmlndXJlIEhhbmRsZXJzCi1QT1BVUF9DT05GSUdfQ0xJRU5UX0hBTkRMRVJTPUNvbmZpZ3VyZSBDbGllbnQgSGFuZGxlcnMKLUxBQkVMX0hBTkRMRVJTX0NPTkZJRz1Db25maWd1cmUgSGFuZGxlcnMKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3BsdWdpbi54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOGYyMWE2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3NTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLQotPHBsdWdpbj4KLQotICAgPCEtLSBUaGUgZm9sbG93aW5nIGV4dGVuc2lvbiBwb2ludCBpcyBpbnRlcm5hbCBhbmQgbGlrZWx5IHRvIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgcmVsZWFzZS4gLS0+Ci0gICA8ZXh0ZW5zaW9uLXBvaW50Ci0gICAgICBpZD0icHVibGljVURESVJlZ2lzdHJ5VHlwZSIKLSAgICAgIG5hbWU9IiVYUF9QVUJMSUNfVURESV9SRUdJU1RSWV9UWVBFUyIvPgotCi0gICA8IS0tIFRoZSBmb2xsb3dpbmcgZXh0ZW5zaW9uIHBvaW50IGlzIGludGVybmFsIGFuZCBsaWtlbHkgdG8gYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSByZWxlYXNlLiAtLT4KLSAgIDxleHRlbnNpb24tcG9pbnQKLSAgICAgIGlkPSJwcml2YXRlVURESVJlZ2lzdHJ5VHlwZSIKLSAgICAgIG5hbWU9IiVYUF9QUklWQVRFX1VERElfUkVHSVNUUllfVFlQRVMiLz4KLQotICAgPCEtLSBUaGUgZm9sbG93aW5nIGV4dGVuc2lvbiBwb2ludCBpcyBpbnRlcm5hbCBhbmQgbGlrZWx5IHRvIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgcmVsZWFzZS4gLS0+Ci0gICA8ZXh0ZW5zaW9uLXBvaW50Ci0gICAgICBpZD0id2ViU2VydmljZVRlc3QiCi0gICAgICBuYW1lPSIlWFBfV0VCX1NFUlZJQ0VfVEVTVCIKLSAgICAgIHNjaGVtYT0ic2NoZW1hL3dlYlNlcnZpY2VUZXN0LmV4c2QiLz4KLQotICAgPCEtLSBUaGUgZm9sbG93aW5nIGV4dGVuc2lvbiBwb2ludCBpcyBpbnRlcm5hbCwgdGhvdWdoIGxpa2VseSB0byBiZSBtYWRlIHB1YmxpYyB3aXRoIGNoYW5nZXMgaW4gYSBmdXR1cmUgcmVsZWFzZS4gLS0+Ci0gICA8ZXh0ZW5zaW9uLXBvaW50Ci0gICAgICBpZD0ib2JqZWN0U2VsZWN0aW9uV2lkZ2V0IgotICAgICAgbmFtZT0iJVhQX09CSkVDVF9TRUxFQ1RJT05fV0lER0VUIgotICAgICAgc2NoZW1hPSJzY2hlbWEvb2JqZWN0U2VsZWN0aW9uV2lkZ2V0LmV4c2QiLz4KLQotICAgPCEtLSBVRERJIFJlZ2lzdHJ5IFR5cGVzIC0tPgotICAgCi0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLnB1YmxpY1VERElSZWdpc3RyeVR5cGUiPgotICAgICAgPHB1YmxpY1VERElSZWdpc3RyeVR5cGUKLSAgICAgICAgICAgIG5hbWU9IiVQVUJMSUNVRERJUkVHSVNUUllUWVBFX05BTUVfU0FQX1RFU1QiCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC51ZGRpLlB1YmxpY1VERElSZWdpc3RyeVNBUFRlc3QiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC51ZGRpLlB1YmxpY1VERElSZWdpc3RyeVNBUFRlc3QiPgotICAgICAgPC9wdWJsaWNVRERJUmVnaXN0cnlUeXBlPgotICAgPC9leHRlbnNpb24+Ci0KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkucHVibGljVURESVJlZ2lzdHJ5VHlwZSI+Ci0gICAgICA8cHVibGljVURESVJlZ2lzdHJ5VHlwZQotICAgICAgICAgICAgbmFtZT0iJVBVQkxJQ1VERElSRUdJU1RSWVRZUEVfTkFNRV9TQVAiCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC51ZGRpLlB1YmxpY1VERElSZWdpc3RyeVNBUCIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLnVkZGkuUHVibGljVURESVJlZ2lzdHJ5U0FQIj4KLSAgICAgIDwvcHVibGljVURESVJlZ2lzdHJ5VHlwZT4KLSAgIDwvZXh0ZW5zaW9uPgotCi0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLnB1YmxpY1VERElSZWdpc3RyeVR5cGUiPgotICAgICAgPHB1YmxpY1VERElSZWdpc3RyeVR5cGUKLSAgICAgICAgICAgIG5hbWU9IiVQVUJMSUNVRERJUkVHSVNUUllUWVBFX05BTUVfWE1FVEhPRFMiCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC51ZGRpLlB1YmxpY1VERElSZWdpc3RyeVhNZXRob2RzIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQudWRkaS5QdWJsaWNVRERJUmVnaXN0cnlYTWV0aG9kcyI+Ci0gICAgICA8L3B1YmxpY1VERElSZWdpc3RyeVR5cGU+Ci0gICA8L2V4dGVuc2lvbj4KLQotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5wdWJsaWNVRERJUmVnaXN0cnlUeXBlIj4KLSAgICAgIDxwdWJsaWNVRERJUmVnaXN0cnlUeXBlCi0gICAgICAgICAgICBuYW1lPSIlUFVCTElDVURESVJFR0lTVFJZVFlQRV9OQU1FX05UVENPTU0iCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC51ZGRpLlB1YmxpY1VERElSZWdpc3RyeU5UVENvbW0iCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC51ZGRpLlB1YmxpY1VERElSZWdpc3RyeU5UVENvbW0iPgotICAgICAgPC9wdWJsaWNVRERJUmVnaXN0cnlUeXBlPgotICAgPC9leHRlbnNpb24+Ci0KLSAgIDwhLS0gVGVzdCBGYWNpbGl0aWVzIC0tPgotICAgCi0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLndlYlNlcnZpY2VUZXN0Ij4KLQotICAgICAgPHdlYlNlcnZpY2VUZXN0Ci0gICAgICAgICAgICBtZXRob2RzbmVlZGVkPSJ0cnVlIgotICAgICAgICAgICAgbmFtZT0iJVNBTVBMRV9UWVBFX1dFQlNFUlZJQ0VTX0lEIgotICAgICAgICAgICAgamF2YT0idHJ1ZSIKLSAgICAgICAgICAgIGNvZGVnZW49InRydWUiCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC53c3NhbXBsZS5XZWJTZXJ2aWNlV1NTYW1wbGVFeGVjdXRhYmxlIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3QuV2ViU2VydmljZVNhbXBsZVRlc3QiPgotICAgICAgPC93ZWJTZXJ2aWNlVGVzdD4KLQotICAgICAgPHdlYlNlcnZpY2VUZXN0Ci0gICAgICAgICAgICBtZXRob2RzbmVlZGVkPSJmYWxzZSIKLSAgICAgICAgICAgIG5hbWU9IiVXU0VYUExPUkVSX0lEIgotICAgICAgICAgICAgamF2YT0iZmFsc2UiCi0gICAgICAgICAgICBjb2RlZ2VuPSJmYWxzZSIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0LmV4cGxvcmVyLldlYlNlcnZpY2VFeHBsb3JlckV4ZWN1dGFibGUiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5leHBsb3Jlci5XZWJTZXJ2aWNlRXhwbG9yZXJFeGVjdXRhYmxlIj4KLSAgICAgIDwvd2ViU2VydmljZVRlc3Q+Ci0KLSAgIDwvZXh0ZW5zaW9uPgotCi0gICA8IS0tIER5bmFtaWMgV2l6YXJkcyAtLT4KLQotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLm5ld1dpemFyZHMiPgotICAgICAgPHdpemFyZAotICAgICAgICAgICAgbmFtZT0iJVBMVUdJTl9ORVdfV0laQVJEX05BTUVfV1NfQ0xJRU5UIgotICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdG9vbDE2L25ld2NsaWVudF93ZWJzZXJ2X3dpei5naWYiCi0gICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2UuanN0LndzLnVpLm5ldyIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5EeW5hbWljV2l6YXJkIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuY2xpZW50LmNsaWVudHdpemFyZCI+Ci0gICAgICAgICA8ZGVzY3JpcHRpb24+Ci0gICAgICAgICAgICAgICAlUExVR0lOX05FV19XSVpBUkRfREVTQ19XU19DTElFTlQKLSAgICAgICAgIDwvZGVzY3JpcHRpb24+Ci0gICAgICAgICA8c2VsZWN0aW9uCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlIj4KLSAgICAgICAgIDwvc2VsZWN0aW9uPgotICAgICAgPC93aXphcmQ+Ci0gICA8L2V4dGVuc2lvbj4KLQotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5keW5hbWljV2l6YXJkIj4KLSAgICAgIDxkeW5hbWljV2l6YXJkCi0gICAgICAgICAgICBpY29uYmFubmVyPSJpY29ucy9mdWxsL3dpemJhbi93ZWJzZXJ2aWNlc2NsaWVudF93aXoucG5nIgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmJpbmRpbmcuQ2xpZW50V2lkZ2V0QmluZGluZyIKLSAgICAgICAgICAgIHRpdGxlPSIlV0laQVJEX1RJVExFX1dTQyIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5jbGllbnR3aXphcmQiPgotICAgICAgPC9keW5hbWljV2l6YXJkPgotICAgPC9leHRlbnNpb24+Ci0KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZHluYW1pY1dpemFyZCI+Ci0gICAgICA8ZHluYW1pY1dpemFyZAotICAgICAgICAgICAgaWNvbmJhbm5lcj0iaWNvbnMvZnVsbC93aXpiYW4vZ2VuX3NhbXBsZV93aXoucG5nIgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmJpbmRpbmcuR2VuU2FtcGxlV2lkZ2V0QmluZGluZyIKLSAgICAgICAgICAgIHRpdGxlPSIlV0laQVJEX1RJVExFX1dTQyIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5nZW5zYW1wbGV3aXphcmQiPgotICAgICAgPC9keW5hbWljV2l6YXJkPgotICAgPC9leHRlbnNpb24+Ci0KLSAgIDwhLS0gSGFuZGxlciBleHRlbnNpb25zIC0tPgotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5keW5hbWljV2l6YXJkIj4KLSAgICAgIDxkeW5hbWljV2l6YXJkCi0gICAgICAgICAgICBpY29uYmFubmVyPSJpY29ucy9mdWxsL3dpemJhbi9jb25maWdfaGFuZGxlcl93aXoucG5nIgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmJpbmRpbmcuQ29uZmlnU2VydmljZUhhbmRsZXJzV2lkZ2V0QmluZGluZyIKLSAgICAgICAgICAgIHRpdGxlPSIlTEFCRUxfSEFORExFUlNfQ09ORklHIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuaGFuZGxlcnMuc2VydmljZSI+Ci0gICAgICA8L2R5bmFtaWNXaXphcmQ+Ci0gICA8L2V4dGVuc2lvbj4KLQotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5keW5hbWljV2l6YXJkIj4KLSAgICAgIDxkeW5hbWljV2l6YXJkCi0gICAgICAgICAgICBpY29uYmFubmVyPSJpY29ucy9mdWxsL3dpemJhbi9jb25maWdfaGFuZGxlcl93aXoucG5nIgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmJpbmRpbmcuQ29uZmlnQ2xpZW50SGFuZGxlcnNXaWRnZXRCaW5kaW5nIgotICAgICAgICAgICAgdGl0bGU9IiVMQUJFTF9IQU5ETEVSU19DT05GSUciCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5oYW5kbGVycy5jbGllbnQiPgotICAgICAgPC9keW5hbWljV2l6YXJkPgotICAgPC9leHRlbnNpb24+Ci0KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZHluYW1pY1dpemFyZCI+Ci0gICAgICA8ZHluYW1pY1dpemFyZAotICAgICAgICAgICAgaWNvbmJhbm5lcj0iaWNvbnMvZnVsbC93aXpiYW4vY29uZmlnX2hhbmRsZXJfd2l6LnBuZyIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5iaW5kaW5nLkNvbmZpZ3VyZUhhbmRsZXJzV2lkZ2V0QmluZGluZyIKLSAgICAgICAgICAgIHRpdGxlPSIlTEFCRUxfSEFORExFUlNfQ09ORklHIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuaGFuZGxlcnMiPgotICAgICAgPC9keW5hbWljV2l6YXJkPgotICAgPC9leHRlbnNpb24+ICAKLSAgICAKLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5pbXBvcnRXaXphcmRzIj4KLSAgICAgIDxjYXRlZ29yeQotICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkud3NpbXBvcnQuY2F0ZWdvcnkiCi0gICAgICAgICAgICAgbmFtZT0iJVdFQlNFUlZJQ0VTX0NBVEVHT1JZIi8+Ci0gICA8L2V4dGVuc2lvbj4KLSAgICAgIAotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLmltcG9ydFdpemFyZHMiPgotICAgICAgPHdpemFyZAotICAgICAgICAgICAgbmFtZT0iJVBMVUdJTl9JTVBPUlRfV0laQVJEX05BTUVfV1MiCi0gICAgICAgICAgICBpY29uPSJpY29ucy9pbXBvcnRfd3MuZ2lmIgotICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53c2ltcG9ydC5jYXRlZ29yeSIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5EeW5hbWljV2l6YXJkIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53c2ltcG9ydCI+Ci0gICAgICAgICA8ZGVzY3JpcHRpb24+Ci0gICAgICAgICAgICAgICAlUExVR0lOX0lNUE9SVF9XSVpBUkRfREVTQ19XUwotICAgICAgICAgPC9kZXNjcmlwdGlvbj4KLSAgICAgIDwvd2l6YXJkPgotICAgPC9leHRlbnNpb24+Ci0KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZHluYW1pY1dpemFyZCI+Ci0gICAgICA8ZHluYW1pY1dpemFyZAotICAgICAgICAgICAgaWNvbmJhbm5lcj0iaWNvbnMvZnVsbC93aXpiYW4vaW1wb3J0X3dzX3dpei5wbmciCi0gICAgICAgICAgICBuYW1lPSIlUExVR0lOX0lNUE9SVF9XSVpBUkRfTkFNRV9XUyIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5iaW5kaW5nLkltcG9ydFdTV2lkZ2V0QmluZGluZyIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkud3NpbXBvcnQiPgotICAgICAgPC9keW5hbWljV2l6YXJkPgotICAgPC9leHRlbnNpb24+Ci0KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5pbXBvcnRXaXphcmRzIj4KLSAgICAgIDx3aXphcmQKLSAgICAgICAgICAgIG5hbWU9IiVJTVBPUlRfV0laQVJEX05BTUVfV1NJTCIKLSAgICAgICAgICAgIGljb249Imljb25zL3dzaWwvaW1wb3J0X3dzaWwuZ2lmIgotICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53c2ltcG9ydC5jYXRlZ29yeSIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5EeW5hbWljV2l6YXJkIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53c2lsaW1wb3J0Ij4KLSAgICAgICAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICAgICAgICAgICVJTVBPUlRfV0laQVJEX0RFU0NfV1NJTAotICAgICAgICAgPC9kZXNjcmlwdGlvbj4KLSAgICAgIDwvd2l6YXJkPgotICAgPC9leHRlbnNpb24+Ci0KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZHluYW1pY1dpemFyZCI+Ci0gICAgICA8ZHluYW1pY1dpemFyZAotICAgICAgICAgICAgaWNvbmJhbm5lcj0iaWNvbnMvZnVsbC93aXpiYW4vaW1wb3J0LXdzaWxfd2l6LnBuZyIKLSAgICAgICAgICAgIG5hbWU9IiVJTVBPUlRfV0laQVJEX05BTUVfV1NJTCIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5iaW5kaW5nLkltcG9ydFdTSUxXaWRnZXRCaW5kaW5nIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53c2lsaW1wb3J0Ij4KLSAgICAgIDwvZHluYW1pY1dpemFyZD4KLSAgIDwvZXh0ZW5zaW9uPgotCi0gICA8IS0tIFByZWZlcmVuY2UgUGFnZXMgLS0+Ci0KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wcmVmZXJlbmNlUGFnZXMiPgotCi0gICAgICA8cGFnZQotICAgICAgICAgICAgbmFtZT0iJVBSRUZFUkVOQ0VfQ0FURUdPUllfU0VSVkVSX1JVTlRJTUUiCi0gICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLnByZWZlcmVuY2VzLm5hbWUiCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnByZWZlcmVuY2VzLlNlcnZlclJ1bnRpbWVQcmVmZXJlbmNlUGFnZSIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucHJlZmVyZW5jZXMuU2VydmVyUnVudGltZVByZWZlcmVuY2VQYWdlIj4gICAgICAgICAgICAKLSAgICAgIDwvcGFnZT4KLSAgICAgIAotICAgICAgPHBhZ2UKLSAgICAgICAgICAgIG5hbWU9IiVQUkVGRVJFTkNFX0NBVEVHT1JZX0RJQUxPR1MiCi0gICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLnByZWZlcmVuY2VzLm5hbWUiCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLnByZWZlcmVuY2VzLkFjdGlvbkRpYWxvZ3NQcmVmZXJlbmNlUGFnZSIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3NzLnBvcHVwLmNhdGVnb3J5Ij4KLSAgICAgIDwvcGFnZT4KLQotICAgICAgPHBhZ2UKLSAgICAgICAgICAgIG5hbWU9IiVQUkVGRVJFTkNFX0NBVEVHT1JZX1RFU1RfRkFDSUxJVFkiCi0gICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLnByZWZlcmVuY2VzLm5hbWUiCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLnByZWZlcmVuY2VzLlRlc3RGYWNpbGl0eURlZmF1bHRzUHJlZmVyZW5jZVBhZ2UiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLnByZWZlcmVuY2VzLlRlc3RGYWNpbGl0eURlZmF1bHRzUHJlZmVyZW5jZVBhZ2UiPgotICAgICAgPC9wYWdlPgotCi0gICAgICA8cGFnZQotICAgICAgICAgICAgbmFtZT0iJVBSRUZFUkVOQ0VfQ0FURUdPUllfUFJPSkVDVF9UT1BPTE9HWSIKLSAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkucHJlZmVyZW5jZXMubmFtZSIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucHJlZmVyZW5jZXMuUHJvamVjdFRvcG9sb2d5UHJlZmVyZW5jZVBhZ2UiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnByZWZlcmVuY2VzLlByb2plY3RUb3BvbG9neVByZWZlcmVuY2VQYWdlIj4KLSAgICAgIDwvcGFnZT4KLSAgICAgIAotICAgPC9leHRlbnNpb24+Ci0KLQotICAgPCEtLSAiRG9uJ3QgU2hvdyBNZSIgRXh0ZW5zaW9ucyAtLT4KLQotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5hY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZSI+Ci0KLSAgICAgIDxhY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZQotICAgICAgICAgICAgc2hvd2NoZWNrYm94PSJ0cnVlIgotICAgICAgICAgICAgbmFtZT0iJUNIRUNLQk9YX1NIT1dfR0VORVJBVEVfSkFWQV9QUk9YWV9ESUFMT0ciCi0gICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2UuanN0Lndzcy5wb3B1cC5jYXRlZ29yeSIKLSAgICAgICAgICAgIHRvb2x0aXA9IiVUT09MVElQX1BQQURfQ0hFQ0tCT1hfV1NETDJQUk9YWSIKLSAgICAgICAgICAgIGluZm9wb3A9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5QUEFEMDAwNCIKLSAgICAgICAgICAgIGFsd2F5c2hpZGU9ImZhbHNlIgotICAgICAgICAgICAgb2JqZWN0aWRzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5jbGllbnR3aXphcmQud3NkbCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5jbGllbnR3aXphcmQud3NpbCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5jbGllbnR3aXphcmQuc2VydmljZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5jbGllbnR3aXphcmQud3NkbC5yZXNvdXJjZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5jbGllbnR3aXphcmQuc2VydmljZXJlZiIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5jbGllbnR3aXphcmQiPgotICAgICAgPC9hY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZT4KLQotICAgICAgPGFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlCi0gICAgICAgICAgICBuYW1lPSIlQ0hFQ0tCT1hfU0hPV19QUk9YWTJTQU1QTEVfRElBTE9HIgotICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLmpzdC53c3MucG9wdXAuY2F0ZWdvcnkiCi0gICAgICAgICAgICB0b29sdGlwPSIlVE9PTFRJUF9QUEFEX0NIRUNLQk9YX1BST1hZMlNBTVBMRSIKLSAgICAgICAgICAgIGluZm9wb3A9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5QUEFEMDAwNSIKLSAgICAgICAgICAgIG9iamVjdGlkcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuZ2Vuc2FtcGxld2l6YXJkLmZpbGUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuZ2Vuc2FtcGxld2l6YXJkLmphdmEiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuZ2Vuc2FtcGxld2l6YXJkIj4KLSAgICAgIDwvYWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGU+Ci0KLSAgICAgIDxhY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZQotICAgICAgICAgICAgc2hvd2NoZWNrYm94PSJmYWxzZSIKLSAgICAgICAgICAgIGFsd2F5c2hpZGU9ImZhbHNlIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuY2xpZW50LmdlbndzaWwiPgotICAgICAgPC9hY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZT4KLQotICAgICAgPCEtLSBhY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZQotICAgICAgICAgICAgc2hvd2NoZWNrYm94PSJmYWxzZSIKLSAgICAgICAgICAgIGFsd2F5c2hpZGU9ImZhbHNlIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuaGFuZGxlcnMuZWRpdG9yIj4KLSAgICAgIDwvYWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGUgLS0+Ci0KLSAgIDwvZXh0ZW5zaW9uPgotCi0gICA8IS0tIFBvcHVwcyAtLT4KLQotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnBvcHVwTWVudXMiPgotCi0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGUiCi0gICAgICAgICAgICBuYW1lRmlsdGVyPSIqLndzZGwiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuZ2Vud3NpbCI+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iJVBPUFVQX0dFTkVSQVRFX1dTSUwiCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMucG9wdXAuRHluYW1pY1BvcHVwV2l6YXJkIgotICAgICAgICAgICAgICAgbWVudWJhclBhdGg9Im9yZy5lY2xpcHNlLmpzdC53cy5hdGsudWkud2Vic2VydmljZS5jYXRlZ29yeS5wb3B1cE1lbnUvcG9wdXBBY3Rpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53c2lsaW1wb3J0Ij4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0KLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZSIKLSAgICAgICAgICAgIG5hbWVGaWx0ZXI9Iioud3NkbCIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5jbGllbnR3aXphcmQud3NkbCI+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iJUFDVElPTl9HRU5FUkFURV9KQVZBX1BST1hZIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLnBvcHVwLkR5bmFtaWNQb3B1cFdpemFyZCIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJvcmcuZWNsaXBzZS5qc3Qud3MuYXRrLnVpLndlYnNlcnZpY2UuY2F0ZWdvcnkucG9wdXBNZW51L3BvcHVwQWN0aW9ucyIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5jbGllbnR3aXphcmQiPgotICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4KLQotICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlIgotICAgICAgICAgICAgbmFtZUZpbHRlcj0iKi53c2lsIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuY2xpZW50LmNsaWVudHdpemFyZC53c2lsIj4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlQUNUSU9OX0dFTkVSQVRFX0pBVkFfUFJPWFkiCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMucG9wdXAuRHluYW1pY1BvcHVwV2l6YXJkIgotICAgICAgICAgICAgICAgbWVudWJhclBhdGg9Im9yZy5lY2xpcHNlLmpzdC53cy5hdGsudWkud2Vic2VydmljZS5jYXRlZ29yeS5wb3B1cE1lbnUvcG9wdXBBY3Rpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuY2xpZW50LmNsaWVudHdpemFyZCI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPgotCi0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGUiCi0gICAgICAgICAgICBuYW1lRmlsdGVyPSIqLmphdmEiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuZ2Vuc2FtcGxld2l6YXJkLmZpbGUiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVBQ1RJT05fR0VOX1NBTVBMRSIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5wb3B1cC5EeW5hbWljUG9wdXBXaXphcmQiCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0ib3JnLmVjbGlwc2UuanN0LndzLmF0ay51aS53ZWJzZXJ2aWNlLmNhdGVnb3J5LnBvcHVwTWVudS9wb3B1cEFjdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuZ2Vuc2FtcGxld2l6YXJkIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0KLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5Db21waWxhdGlvblVuaXQiCi0gICAgICAgICAgICBuYW1lRmlsdGVyPSIqLmphdmEiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuZ2Vuc2FtcGxld2l6YXJkLmphdmEiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVBQ1RJT05fR0VOX1NBTVBMRSIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5wb3B1cC5EeW5hbWljUG9wdXBXaXphcmQiCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0ib3JnLmVjbGlwc2UuanN0LndzLmF0ay51aS53ZWJzZXJ2aWNlLmNhdGVnb3J5LnBvcHVwTWVudS9wb3B1cEFjdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuZ2Vuc2FtcGxld2l6YXJkIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0KLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlIgotICAgICAgICAgICAgbmFtZUZpbHRlcj0iKiIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5jbGllbnR3aXphcmQuc2VydmljZSI+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iJUFDVElPTl9HRU5FUkFURV9KQVZBX1BST1hZIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLnBvcHVwLkR5bmFtaWNQb3B1cFdpemFyZCIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJhZGRpdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuY2xpZW50d2l6YXJkIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0KLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlIgotICAgICAgICAgICAgbmFtZUZpbHRlcj0iKiIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5nZW53c2lsLnNlcnZpY2UiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVQT1BVUF9HRU5FUkFURV9XU0lMIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLnBvcHVwLkR5bmFtaWNQb3B1cFdpemFyZCIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJhZGRpdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLndzaWxpbXBvcnQiPgotICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4KLQotICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlIgotICAgICAgICAgICAgbmFtZUZpbHRlcj0id2Vic2VydmljZXMueG1sIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuaGFuZGxlcnMuZWRpdG9yLmZpbGUiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVQT1BVUF9BRERfSEFORExFUlMiCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMucG9wdXAuRHluYW1pY1BvcHVwV2l6YXJkIgotICAgICAgICAgICAgICAgbWVudWJhclBhdGg9Im9yZy5lY2xpcHNlLmpzdC53cy5hdGsudWkud2Vic2VydmljZS5jYXRlZ29yeS5wb3B1cE1lbnUvcG9wdXBBY3Rpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuaGFuZGxlcnMuc2VydmljZSI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPgotCi0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZSIKLSAgICAgICAgICAgIG5hbWVGaWx0ZXI9IioiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5oYW5kbGVycy5lZGl0b3Iuc2VydmljZSI+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iJVBPUFVQX0FERF9IQU5ETEVSUyIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5wb3B1cC5EeW5hbWljUG9wdXBXaXphcmQiCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0iYWRkaXRpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuaGFuZGxlcnMuc2VydmljZSI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPiAgIAotCi0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2UuanN0LmoyZWUuaW50ZXJuYWwud2Vic2VydmljZS5XZWJTZXJ2aWNlTmF2aWdhdG9yR3JvdXBUeXBlIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuaGFuZGxlcnMuZWRpdG9yLm5hdkdyb3VwIj4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlUE9QVVBfQUREX0hBTkRMRVJTIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLnBvcHVwLkR5bmFtaWNQb3B1cFdpemFyZCIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJhZGRpdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5oYW5kbGVycyI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgICAgIDx2aXNpYmlsaXR5PgotCQkJPG9iamVjdFN0YXRlCi0gICAgICAgICAgICAgICAgICBuYW1lPSJ0eXBlIgotICAgICAgICAgICAgICAgICAgdmFsdWU9IkhhbmRsZXJzIj4KLSAgICAgICAgICAgIDwvb2JqZWN0U3RhdGU+Ci0gICAgICAgICA8L3Zpc2liaWxpdHk+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4gICAgIAotCi0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMUmVzb3VyY2VJbXBsIgotICAgICAgICAgICAgbmFtZUZpbHRlcj0iKiIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmhhbmRsZXJzLmVkaXRvci53c2RsUmVzIj4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlUE9QVVBfQUREX0hBTkRMRVJTIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLnBvcHVwLkR5bmFtaWNQb3B1cFdpemFyZCIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJhZGRpdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5oYW5kbGVycy5zZXJ2aWNlIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+ICAgICAgICAgICAgCi0KLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZSIKLSAgICAgICAgICAgIG5hbWVGaWx0ZXI9IndlYnNlcnZpY2VzY2xpZW50LnhtbCIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmhhbmRsZXJzLmVkaXRvci54bWxmaWxlIj4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlUE9QVVBfQ09ORklHX0NMSUVOVF9IQU5ETEVSUyIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5wb3B1cC5EeW5hbWljUG9wdXBXaXphcmQiCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0ib3JnLmVjbGlwc2UuanN0LndzLmF0ay51aS53ZWJzZXJ2aWNlLmNhdGVnb3J5LnBvcHVwTWVudS9wb3B1cEFjdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5oYW5kbGVycy5jbGllbnQiPgotICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4KLQotICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlIgotICAgICAgICAgICAgbmFtZUZpbHRlcj0iZWpiLWphci54bWwiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5oYW5kbGVycy5lZGl0b3IuZWpiZmlsZSI+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iJVBPUFVQX0NPTkZJR19DTElFTlRfSEFORExFUlMiCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMucG9wdXAuRHluYW1pY1BvcHVwV2l6YXJkIgotICAgICAgICAgICAgICAgbWVudWJhclBhdGg9Im9yZy5lY2xpcHNlLmpzdC53cy5hdGsudWkud2Vic2VydmljZS5jYXRlZ29yeS5wb3B1cE1lbnUvcG9wdXBBY3Rpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuaGFuZGxlcnMuY2xpZW50Ij4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+ICAgIAotCi0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGUiCi0gICAgICAgICAgICBuYW1lRmlsdGVyPSJ3ZWIueG1sIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuaGFuZGxlcnMuZWRpdG9yLndlYmZpbGUiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVQT1BVUF9DT05GSUdfQ0xJRU5UX0hBTkRMRVJTIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLnBvcHVwLkR5bmFtaWNQb3B1cFdpemFyZCIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJvcmcuZWNsaXBzZS5qc3Qud3MuYXRrLnVpLndlYnNlcnZpY2UuY2F0ZWdvcnkucG9wdXBNZW51L3BvcHVwQWN0aW9ucyIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmhhbmRsZXJzLmNsaWVudCI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPiAgCi0KLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZSIKLSAgICAgICAgICAgIG5hbWVGaWx0ZXI9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5oYW5kbGVycy5lZGl0b3IuYXBwZmlsZSI+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iJVBPUFVQX0NPTkZJR19DTElFTlRfSEFORExFUlMiCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMucG9wdXAuRHluYW1pY1BvcHVwV2l6YXJkIgotICAgICAgICAgICAgICAgbWVudWJhclBhdGg9Im9yZy5lY2xpcHNlLmpzdC53cy5hdGsudWkud2Vic2VydmljZS5jYXRlZ29yeS5wb3B1cE1lbnUvcG9wdXBBY3Rpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuaGFuZGxlcnMuY2xpZW50Ij4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+IAotCi0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2NsaWVudC5TZXJ2aWNlUmVmIgotICAgICAgICAgICAgbmFtZUZpbHRlcj0iKiIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmhhbmRsZXJzLmVkaXRvci5zZXJ2aWNlcmVmIj4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlUE9QVVBfQ09ORklHX0NMSUVOVF9IQU5ETEVSUyIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5wb3B1cC5EeW5hbWljUG9wdXBXaXphcmQiCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0iYWRkaXRpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuaGFuZGxlcnMuY2xpZW50Ij4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+ICAgICAgCi0gICAgICAKLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExSZXNvdXJjZUltcGwiCi0gICAgICAgICAgICBuYW1lRmlsdGVyPSIqIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuY2xpZW50LmNsaWVudHdpemFyZC53c2RsLnJlc291cmNlIj4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlQUNUSU9OX0dFTkVSQVRFX0pBVkFfUFJPWFkiCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMucG9wdXAuRHluYW1pY1BvcHVwV2l6YXJkIgotICAgICAgICAgICAgICAgbWVudWJhclBhdGg9ImFkZGl0aW9ucyIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5jbGllbnR3aXphcmQiPgotICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4KLQotICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NjbGllbnQuU2VydmljZVJlZiIKLSAgICAgICAgICAgIG5hbWVGaWx0ZXI9IioiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuY2xpZW50d2l6YXJkLnNlcnZpY2VyZWYiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVBQ1RJT05fR0VORVJBVEVfSkFWQV9QUk9YWSIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5wb3B1cC5EeW5hbWljUG9wdXBXaXphcmQiCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0iYWRkaXRpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuY2xpZW50LmNsaWVudHdpemFyZCI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPgotCi0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMUmVzb3VyY2VJbXBsIgotICAgICAgICAgICAgbmFtZUZpbHRlcj0iKiIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5nZW53c2lsLndzZGwucmVzb3VyY2UiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVQT1BVUF9HRU5FUkFURV9XU0lMIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLnBvcHVwLkR5bmFtaWNQb3B1cFdpemFyZCIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJhZGRpdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLndzaWxpbXBvcnQiPgotICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4KLQotICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NjbGllbnQuU2VydmljZVJlZiIKLSAgICAgICAgIG5hbWVGaWx0ZXI9IioiCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuZ2Vud3NpbC5zZXJ2aWNlcmVmIj4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgIGxhYmVsPSIlUE9QVVBfR0VORVJBVEVfV1NJTCIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5wb3B1cC5EeW5hbWljUG9wdXBXaXphcmQiCi0gICAgICAgICAgICBtZW51YmFyUGF0aD0iYWRkaXRpb25zIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53c2lsaW1wb3J0Ij4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0gICA8L2V4dGVuc2lvbj4KLQotICAgPCEtLSBPYmplY3QgU2VsZWN0aW9uIFdpZGdldHMgLS0+Ci0KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkub2JqZWN0U2VsZWN0aW9uV2lkZ2V0Ij4KLSAgICAgIDxvYmplY3RTZWxlY3Rpb25XaWRnZXQKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5KYXZhQmVhblNlbGVjdGlvbkxhdW5jaGFibGUiCi0gICAgICAgICAgICBleHRlcm5hbF9tb2RpZnk9InRydWUiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0LkphdmFCZWFuU2VsZWN0aW9uV2lkZ2V0IgotICAgICAgICAgICAgdHJhbnNmb3JtZXI9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5KYXZhQmVhblNlbGVjdGlvblRyYW5zZm9ybWVyIj4KLSAgICAgIDwvb2JqZWN0U2VsZWN0aW9uV2lkZ2V0PgotICAgPC9leHRlbnNpb24+Ci0KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkub2JqZWN0U2VsZWN0aW9uV2lkZ2V0Ij4KLSAgICAgIDxvYmplY3RTZWxlY3Rpb25XaWRnZXQKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuRUpCU2VsZWN0aW9uV2lkZ2V0IgotICAgICAgICAgICAgZXh0ZXJuYWxfbW9kaWZ5PSJmYWxzZSIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuRUpCU2VsZWN0aW9uV2lkZ2V0IgotICAgICAgICAgICAgdHJhbnNmb3JtZXI9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5FSkJTZWxlY3Rpb25UcmFuc2Zvcm1lciI+Ci0gICAgICA8L29iamVjdFNlbGVjdGlvbldpZGdldD4KLSAgIDwvZXh0ZW5zaW9uPgotCi0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLm9iamVjdFNlbGVjdGlvbldpZGdldCI+Ci0gICAgICA8b2JqZWN0U2VsZWN0aW9uV2lkZ2V0Ci0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0LldTRExTZWxlY3Rpb25XaWRnZXQiCi0gICAgICAgICAgICBleHRlcm5hbF9tb2RpZnk9InRydWUiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0LldTRExTZWxlY3Rpb25XaWRnZXQiCi0gICAgICAgICAgICB0cmFuc2Zvcm1lcj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0LldTRExTZWxlY3Rpb25UcmFuc2Zvcm1lciI+Ci0gICAgICA8L29iamVjdFNlbGVjdGlvbldpZGdldD4KLSAgIDwvZXh0ZW5zaW9uPgotICAgCi0gICA8IS0tIFRoZSBmb2xsb3dpbmcgZXh0ZW5zaW9uIHBvaW50IGlzIGludGVybmFsLCB0aG91Z2ggbGlrZWx5IHRvIGJlIG1hZGUgcHVibGljIHdpdGggY2hhbmdlcyBpbiBhIGZ1dHVyZSByZWxlYXNlLiAtLT4KLSAgIDxleHRlbnNpb24tcG9pbnQgaWQ9IndzSW1wbCIgbmFtZT0iJVhQX3dzSW1wbCIvPgotCi0gICA8IS0tIFRoZSBmb2xsb3dpbmcgZXh0ZW5zaW9uIHBvaW50IGlzIGludGVybmFsLCB0aG91Z2ggbGlrZWx5IHRvIGJlIG1hZGUgcHVibGljIHdpdGggY2hhbmdlcyBpbiBhIGZ1dHVyZSByZWxlYXNlLiAtLT4KLSAgIDxleHRlbnNpb24tcG9pbnQgaWQ9IndzQ2xpZW50SW1wbCIgbmFtZT0iJVhQX3dzQ2xpZW50SW1wbCIvPgotCi0gICA8IS0tIFRoZSBmb2xsb3dpbmcgZXh0ZW5zaW9uIHBvaW50IGlzIGludGVybmFsLCB0aG91Z2ggbGlrZWx5IHRvIGJlIG1hZGUgcHVibGljIHdpdGggY2hhbmdlcyBpbiBhIGZ1dHVyZSByZWxlYXNlLiAtLT4KLSAgIDxleHRlbnNpb24tcG9pbnQgaWQ9InJ1bnRpbWVzIiBuYW1lPSIlWFBfcnVudGltZXMiIC8+Ci0KLSAgIDwhLS0gVGhlIGZvbGxvd2luZyBleHRlbnNpb24gcG9pbnQgaXMgaW50ZXJuYWwsIHRob3VnaCBsaWtlbHkgdG8gYmUgbWFkZSBwdWJsaWMgd2l0aCBjaGFuZ2VzIGluIGEgZnV0dXJlIHJlbGVhc2UuIC0tPgotICAgPGV4dGVuc2lvbi1wb2ludCBpZD0ic2VydmljZVJ1bnRpbWVzIiBuYW1lPSIlWFBfc2VydmljZVJ1bnRpbWVzIiAvPgotCi0gICA8IS0tIFRoZSBmb2xsb3dpbmcgZXh0ZW5zaW9uIHBvaW50IGlzIGludGVybmFsLCB0aG91Z2ggbGlrZWx5IHRvIGJlIG1hZGUgcHVibGljIHdpdGggY2hhbmdlcyBpbiBhIGZ1dHVyZSByZWxlYXNlLiAtLT4KLSAgIDxleHRlbnNpb24tcG9pbnQgaWQ9ImNsaWVudFJ1bnRpbWVzIiBuYW1lPSIlWFBfY2xpZW50UnVudGltZXMiIC8+Ci0KLSAgIDwhLS0gVGhlIGZvbGxvd2luZyBleHRlbnNpb24gcG9pbnQgaXMgaW50ZXJuYWwsIHRob3VnaCBsaWtlbHkgdG8gYmUgbWFkZSBwdWJsaWMgd2l0aCBjaGFuZ2VzIGluIGEgZnV0dXJlIHJlbGVhc2UuIC0tPgotICAgPGV4dGVuc2lvbi1wb2ludCBpZD0idGVzdGVyIiBuYW1lPSIlWFBfdGVzdGVyIi8+Ci0KLTwhLS0gVGVzdCBFeHRlbnNpb25zIGJlZ2lubmluZyAgLS0+Ci0KLTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS50ZXN0ZXIiPgotICA8dGVzdGVyCi0gICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3QuV2ViU2VydmljZVNhbXBsZVRlc3QiCi0gICAgbGFiZWw9IiVTQU1QTEVfVFlQRV9XRUJTRVJWSUNFU19JRCIKLSAgICB0ZXN0V1NETD0ibm8iCi0gICAgd3NDbGllbnRJbXBsSWRzPSJvcmcuZWNsaXBzZS5qc3Qud3MuY2xpZW50LnR5cGUuamF2YSIKLSAgICBtb2R1bGV0eXBlcz0id2VibW9kdWxlIgotICAgIG1ldGhvZHNuZWVkZWQ9InRydWUiCi0gICAgY29kZUdlbmVyYXRlZD0idHJ1ZSIKLSAgICBzZXJ2ZXJSZXF1aXJlZD0idHJ1ZSIKLSAgICBhbGxvd0NsaWVudFJ1bnRpbWVzUmVzdHJpY3Rpb249InRydWUiCi0gICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3Qud3NzYW1wbGUuR1NUQ1dlYlNlcnZpY2VUZXN0ZXIiPgotICA8L3Rlc3Rlcj4KLTwvZXh0ZW5zaW9uPgotPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLnRlc3RlciI+Ci0gIDx0ZXN0ZXIKLSAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5leHBsb3Jlci5XZWJTZXJ2aWNlRXhwbG9yZXIiCi0gICAgbGFiZWw9IiVXU0VYUExPUkVSX0lEIgotICAgIHRlc3RXU0RMPSJ5ZXMiCi0gICAgd3NDbGllbnRJbXBsSWRzPSJvcmcuZWNsaXBzZS5qc3Qud3MuY2xpZW50LnR5cGUuamF2YSIKLSAgICBtb2R1bGV0eXBlcz0id2VibW9kdWxlIgotICAgIG1ldGhvZHNuZWVkZWQ9ImZhbHNlIgotICAgIGNvZGVHZW5lcmF0ZWQ9ImZhbHNlIgotICAgIHNlcnZlclJlcXVpcmVkPSJmYWxzZSIKLSAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5leHBsb3Jlci5XU0VXZWJTZXJ2aWNlVGVzdGVyIj4KLSAgPC90ZXN0ZXI+Ci08L2V4dGVuc2lvbj4KLQotPCEtLSBUZXN0IEV4dGVuc2lvbnMgZW5kICAtLT4KLQotPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLndzSW1wbCI+Ci0gIDx3ZWJTZXJ2aWNlSW1wbAotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy53c0ltcGwuamF2YSIKLSAgICAgICAgICAgIGxhYmVsPSIlV0VCU0VSVklDRVRZUEVfTkFNRV9KQVZBIgotICAgICAgICAgICAgcmVzb3VyY2VUeXBlTWV0YWRhdGE9IkZpbGUgSVJlc291cmNlIENvbXBpbGF0aW9uVW5pdCIKLSAgICAgICAgICAgIGV4dGVuc2lvbk1ldGFkYXRhPSIuamF2YSAuY2xhc3MiCi0gICAgICAgICAgICBvYmplY3RTZWxlY3Rpb25XaWRnZXQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5KYXZhQmVhblNlbGVjdGlvbldpZGdldCIKLSAgICAgICAgICAgIG1lcmdlckNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLkphdmFNZXJnZXIiPgotICA8L3dlYlNlcnZpY2VJbXBsPgotPC9leHRlbnNpb24+ICAgCi08ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkud3NDbGllbnRJbXBsIj4KLSAgPHdlYlNlcnZpY2VDbGllbnRJbXBsCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNsaWVudC50eXBlLmphdmEiCi0gICAgICAgICAgICBsYWJlbD0iJUpBVkFfUFJPWFkiPgotICA8L3dlYlNlcnZpY2VDbGllbnRJbXBsPgotPC9leHRlbnNpb24+ICAgCi0KLSAgIAk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0UmVnaXN0cnkiPgotICAgICAgIDx3aWRnZXRGYWN0b3J5ICAgCi0gICAgICAgICAgICAgaWQ9IlN0YXJ0Q2xpZW50U2VydmVyIgotICAgICAgICAgICAgIGluc2VydEJlZm9yZUNvbW1hbmRJZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmV4dGVuc2lvbi5QcmVDbGllbnRSdW5Db21tYW5kIgotICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuc2VydmVyLlN0YXJ0Q2xpZW50V2lkZ2V0RmFjdG9yeSIvPgotICAgIDwvZXh0ZW5zaW9uPgotICAgIAotICAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5hbnRTY2VuYXJpbyI+Ci0gICAgICAgIDxhbnRTY2VuYXJpbwotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5hbnQuQW50Q2xpZW50Um9vdENvbW1hbmRGcmFnbWVudCIKLSAgICAgICAgICAgIHNjZW5hcmlvVHlwZT0iY2xpZW50Ii8+Ci0gICAgIDwvZXh0ZW5zaW9uPgotICAgICAKLSAgICAgPGV4dGVuc2lvbgotICAgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmFudERhdGFNYXBwaW5nIj4KLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IkluaXRpYWxTZWxlY3Rpb24iCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMucnVudGltZS5DbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQiCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJJbml0aWFsSW5pdGlhbFNlbGVjdGlvbiIKLSAgICAgICAgICAgICAgcmVxdWlyZWQ9InRydWUiCi0gICAgICAgICAgICAgIHRyYW5zZm9ybT0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmcyU2VsZWN0aW9uVHJhbnNmb3JtZXIiLz4KLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IkluaXRpYWxTZWxlY3Rpb24iCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuV1NETFNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iSW5pdGlhbFNlbGVjdGlvbiIKLSAgICAgICAgICAgICAgcmVxdWlyZWQ9InRydWUiCi0gICAgICAgICAgICAgIHRyYW5zZm9ybT0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmcyU2VsZWN0aW9uVHJhbnNmb3JtZXIiLz4KLQotICAgICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iQ2xpZW50LlJ1bnRpbWVJZCIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5DbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iQ2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIiCi0gICAgICAgICAgICAgIHRyYW5zZm9ybT0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmcyVHlwZVJ1bnRpbWVTZXJ2ZXJNb2RpZmllciIvPgotCi0gICAgICAgIDxtYXAKLSAgICAgICAgICAgICAga2V5PSJDbGllbnQuU2VydmVySWQiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZCIKLSAgICAgICAgICAgICAgcHJvcGVydHk9IkNsaWVudFR5cGVSdW50aW1lU2VydmVyIgotICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nMlR5cGVSdW50aW1lU2VydmVyTW9kaWZpZXIiLz4KLQotICAgICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iQ2xpZW50LlR5cGVJZCIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5DbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iQ2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIiCi0gICAgICAgICAgICAgIHRyYW5zZm9ybT0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmcyVHlwZVJ1bnRpbWVTZXJ2ZXJNb2RpZmllciIvPgotICAgICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iVGVzdFNlcnZpY2UiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9ucy5DbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZCIKLSAgICAgICAgICAgICAgcHJvcGVydHk9IlRlc3RTZXJ2aWNlIi8+Ci0KLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9Ik1vbml0b3JTZXJ2aWNlIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnMuQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQiCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJNb25pdG9yU2VydmljZSIvPiAgICAgICAgICAgICAgCi0KLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IkNsaWVudC5SdW50aW1lSWQiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9ucy5DbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZCIKLSAgICAgICAgICAgICAgcHJvcGVydHk9IkNsaWVudFR5cGVSdW50aW1lU2VydmVyIgotICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nMlR5cGVSdW50aW1lU2VydmVyTW9kaWZpZXIiLz4KLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IkNsaWVudC5TZXJ2ZXJJZCIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zLkNsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iQ2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIiCi0gICAgICAgICAgICAgIHRyYW5zZm9ybT0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmcyVHlwZVJ1bnRpbWVTZXJ2ZXJNb2RpZmllciIvPiAgICAgCi0gICAgICAgIDxtYXAKLSAgICAgICAgICAgICAga2V5PSJDbGllbnQuVHlwZUlkIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnMuQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQiCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJDbGllbnRUeXBlUnVudGltZVNlcnZlciIKLSAgICAgICAgICAgICAgdHJhbnNmb3JtPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlN0cmluZzJUeXBlUnVudGltZVNlcnZlck1vZGlmaWVyIi8+ICAgICAgICAKLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IkNsaWVudFByb2plY3ROYW1lIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnMuQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQiCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJDbGllbnRQcm9qZWN0TmFtZSIvPiAgCi0gICAgICAgIDxtYXAKLSAgICAgICAgICAgICAga2V5PSJDbGllbnRQcm9qZWN0TmFtZSIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5ydW50aW1lLkNsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZCIKLSAgICAgICAgICAgICAgcHJvcGVydHk9IkNsaWVudFByb2plY3ROYW1lIi8+ICAgICAgICAgICAgICAKLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IkNsaWVudEVhclByb2plY3ROYW1lIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnMuQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQiCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJDbGllbnRFYXJQcm9qZWN0TmFtZSIvPiAgICAgICAgIAotICAgICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iQ2xpZW50Q29tcG9uZW50VHlwZSIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zLkNsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iQ2xpZW50Q29tcG9uZW50VHlwZSIvPgotICAgICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iQ2xpZW50LlJ1bnRpbWVJZCIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zLkNsaWVudEV4dGVuc2lvbkZyYWdtZW50IgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iQ2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIiCi0gICAgICAgICAgICAgIHRyYW5zZm9ybT0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmcyVHlwZVJ1bnRpbWVTZXJ2ZXJNb2RpZmllciIvPiAgICAgICAgICAgICAgICAKLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IkNsaWVudC5TZXJ2ZXJJZCIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zLkNsaWVudEV4dGVuc2lvbkZyYWdtZW50IgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iQ2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIiCi0gICAgICAgICAgICAgIHRyYW5zZm9ybT0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmcyVHlwZVJ1bnRpbWVTZXJ2ZXJNb2RpZmllciIvPiAgICAgICAgICAgICAgICAKLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IkNsaWVudC5UeXBlSWQiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9ucy5DbGllbnRFeHRlbnNpb25GcmFnbWVudCIKLSAgICAgICAgICAgICAgcHJvcGVydHk9IkNsaWVudFR5cGVSdW50aW1lU2VydmVyIgotICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nMlR5cGVSdW50aW1lU2VydmVyTW9kaWZpZXIiLz4gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgIAotICAgICAgICAgPCEtLSBtYXBwaW5ncyBmb3IgbGlzdGluZyBvcHRpb25zIC0tPgotICAgICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iTGlzdFJ1bnRpbWVzIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tYW5kLkxpc3RPcHRpb25zQ29tbWFuZCIKLSAgICAgICAgICAgICAgcHJvcGVydHk9Ikxpc3RSdW50aW1lcyIKLSAgICAgICAgICAgICAgdHJhbnNmb3JtPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuYW50LlN0cmluZzJCb29sZWFuVHJhbnNmb3JtZXIiCi0gICAgICAgICAgICAgIC8+IAotCi0gIAkJPG1hcAotICAgICAgICAgICAgICBrZXk9Ikxpc3RTZXJ2ZXJzIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tYW5kLkxpc3RPcHRpb25zQ29tbWFuZCIKLSAgICAgICAgICAgICAgcHJvcGVydHk9Ikxpc3RTZXJ2ZXJzIgotICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5hbnQuU3RyaW5nMkJvb2xlYW5UcmFuc2Zvcm1lciIKLSAgICAgICAgICAgICAgLz4gIAkKLSAgICAgIDwvZXh0ZW5zaW9uPiAKLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc2NoZW1hL2NsaWVudFByb2plY3RUeXBlLmV4c2QgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zY2hlbWEvY2xpZW50UHJvamVjdFR5cGUuZXhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWU0MGRiNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zY2hlbWEvY2xpZW50UHJvamVjdFR5cGUuZXhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEyNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgotPCEtLSBTY2hlbWEgZmlsZSB3cml0dGVuIGJ5IFBERSAtLT4KLTxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkiPgotPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNjaGVtYSBwbHVnaW49Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aSIgaWQ9ImNsaWVudFByb2plY3RUeXBlIiBuYW1lPSJDbGllbnQgUHJvamVjdCBUeXBlIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFRoaXMgZXh0ZW5zaW9uIHBvaW50IGRlZmluZXMgY2xpZW50IGNvbnRhaW5lciB0eXBlcy4KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iY2xpZW50UHJvamVjdFR5cGUiIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGEgZnVsbHkgcXVhbGlmaWVkIGlkZW50aWZpZXIgb2YgdGhlIHRhcmdldCBleHRlbnNpb24gcG9pbnQKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhbiBvcHRpb25hbCBpZGVudGlmaWVyIG9mIHRoZSBleHRlbnNpb24gaW5zdGFuY2UKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGFuIG9wdGlvbmFsIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiBpbnN0YW5jZQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJjbGllbnRQcm9qZWN0VHlwZSI+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImluY2x1ZGUiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyBhdHRyaWJ1dGUgY29udGFpbnMgYSBibGFuayBkZWxpbWl0ZWQgbGlzdCBvZiBQcm9qZWN0IE5hdHVyZSBJZHMuICBUaGUgbGlzdGVkIElEcyBpbmRpY2F0ZSB0aGF0IHRoaXMgdHlwZSBvbmx5IHdvcmtzIHdpdGggdGhlc2UgcGFydGljdWxhciBwcm9qZWN0IHR5cGVzLiAgRm9yIGV4YW1wbGUsIGlmIHRoaXMgdHlwZSBvbmx5IHdvcmtzIHdpdGggd2ViIHByb2plY3RzIGFuIElEIG9mIG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYi5XZWJOYXR1cmUgd291bGQgYmUgc3BlY2lmaWVkLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImV4Y2x1ZGUiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyBhdHRyaWJ1dGUgY29udGFpbnMgYSBibGFuayBkZWxpbWl0ZWQgbGlzdCBvZiBQcm9qZWN0IE5hdHVyZSBJZHMuICBUaGUgbGlzdGVkIElEcyBpbmRpY2F0ZSB0aGF0IHRoaXMgdHlwZSBET0VTIE5PVCB3b3JrIHdpdGggdGhlc2UgcGFydGljdWxhciBwcm9qZWN0IHR5cGVzLiAgRm9yIGV4YW1wbGUsIGlmIHRoaXMgdHlwZSBkb2VzIG5vdCB3b3JrIHdpdGggd2ViIHByb2plY3RzIGFuIElEIG9mIG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYi5XZWJOYXR1cmUgd291bGQgYmUgc3BlY2lmaWVkLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImxhYmVsIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgbGFiZWwgcmVwcmVzZW50cyB0aGlzIGNsaWVudCBwcm9qZWN0IHR5cGUuICBJdCBpcyBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIgc28gaXQgbXVzdCBiZSB0cmFuc2xhdGVkLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIEEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoaXMgY2xpZW50IHByb2plY3QgdHlwZS4gIFRoaXMgaWRlbnRpZmllciBpcyByZWZlcmVuY2VkIGluIHRoZSBjbGllbnRQcm9qZWN0VHlwZSBhdHRyaWJ1dGUgb2YgdGhlIHdlYlNlcnZpY2VDbGllbnRUeXBlIGVsZW1lbnQgb2YgYW4gb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLndlYlNlcnZpY2VDbGllbnRUeXBlIGV4dGVuc2lvbi4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0ic2luY2UiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgJmx0O2ImZ3Q7VGhpcyBleHRlbnNpb24gcG9pbnQgaXMgcGFydCBvZiBhbiBpbnRlcmltIEFQSSB0aGF0IGlzIHN0aWxsIHVuZGVyIGRldmVsb3BtZW50IGFuZCBleHBlY3RlZCB0byBjaGFuZ2Ugc2lnbmlmaWNhbnRseSBiZWZvcmUgcmVhY2hpbmcgc3RhYmlsaXR5LiBJdCBpcyBiZWluZyBtYWRlIGF2YWlsYWJsZSBhdCB0aGlzIGVhcmx5IHN0YWdlIHRvIHNvbGljaXQgZmVlZGJhY2sgZnJvbSBwaW9uZWVyaW5nIGFkb3B0ZXJzIG9uIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgYW55IGNvZGUgdGhhdCB1c2VzIHRoaXMgQVBJIHdpbGwgYWxtb3N0IGNlcnRhaW5seSBiZSBicm9rZW4gKHJlcGVhdGVkbHkpIGFzIHRoZSBBUEkgZXZvbHZlcy4mbHQ7L2ImZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImV4YW1wbGVzIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIAotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJhcGlJbmZvIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIAotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJpbXBsZW1lbnRhdGlvbiIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iY29weXJpZ2h0Ii8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4mbHQ7YnImZ3Q7Ci1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIAotYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIAotdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgJmx0O2EKLWhyZWY9JnF1b3Q7aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmcXVvdDsmZ3Q7aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmbHQ7L2EmZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc2NoZW1hL29iamVjdFNlbGVjdGlvbldpZGdldC5leHNkIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc2NoZW1hL29iamVjdFNlbGVjdGlvbldpZGdldC5leHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTJkNDI5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NjaGVtYS9vYmplY3RTZWxlY3Rpb25XaWRnZXQuZXhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEyOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgotPCEtLSBTY2hlbWEgZmlsZSB3cml0dGVuIGJ5IFBERSAtLT4KLTxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkiPgotPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNjaGVtYSBwbHVnaW49Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aSIgaWQ9Im9iamVjdFNlbGVjdGlvbldpZGdldCIgbmFtZT0iT2JqZWN0IFNlbGVjdGlvbiBXaWRnZXQiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxlbGVtZW50IG5hbWU9ImV4dGVuc2lvbiI+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9Im9iamVjdFNlbGVjdGlvbldpZGdldCIgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icG9pbnQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgYSBmdWxseSBxdWFsaWZpZWQgaWRlbnRpZmllciBvZiB0aGUgdGFyZ2V0IGV4dGVuc2lvbiBwb2ludAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGFuIG9wdGlvbmFsIGlkZW50aWZpZXIgb2YgdGhlIGV4dGVuc2lvbiBpbnN0YW5jZQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgYW4gb3B0aW9uYWwgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uIGluc3RhbmNlCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9Im9iamVjdFNlbGVjdGlvbldpZGdldCI+Ci0gICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgVGhpcyBleHRlbnNpb24gcG9pbnQgZW50cnkgYWxsb3dzIGFuIGV4dGVuZGVyIHRvIGFkZCBuZXcgd2F5cyBvZiBicm93c2luZy9maW5kaW5nIGFydGlmYWN0cyB0aGF0IGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBXZWIgc2VydmljZXMuCi0gICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICA8L2Fubm90YXRpb24+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImNsYXNzIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgY2xhc3MgZGVmaW5lcyBTZWxlY3Rpb24gV2lkZ2V0IHRvIGJlIGRpc3BsYXllZCBvbiB0aGUgT2JqZWN0IFNlbGVjdGlvbiBwYWdlIG9mIHRoZSBXZWIgc2VydmljZXMgd2l6YXJkcy4gIFRoaXMgY2xhc3MgbXVzdCBpbXBsZW1lbnQgdGhlIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5JT2JqZWN0U2VsZWN0aW9uV2lkZ2V0IGludGVyZmFjZS4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIGlkIHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBvYmplY3RTZWxlY3Rpb25XaWRnZXQgZWxlbWVudC4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJ0cmFuc2Zvcm1lciIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIGF0dHJpYnV0ZSBzcGVjaWZpZXMgYSBjbGFzcyB0aGF0IG11c3QgaW1wbGVtZW50IHRoZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLlRyYW5zZm9ybWVyIGludGVyZmFjZS4gIFRoaXMgaW50ZXJmYWNlIGNvbnRhaW5zIGEgdHJhbnNmb3JtIG1ldGhvZC4gIEV2ZW4gdGhvdWdoIHRoZSB0eXBlIG9mIHRoZSBpbnB1dCBwYXJhbWV0ZXIgYW5kIHRoZSByZXR1cm4gdmFsdWUgYXJlIG9mIHR5cGUgT2JqZWN0IGl0IGlzIGV4cGVjdGVkIHRoYXQgdGhleSB3aWxsIGJlIHVzZWQgd2l0aCB0aGUgdHlwZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uLiAgVGhpcyB0cmFuc2Zvcm1hdGlvbiBtZXRob2QgYWxsb3dzIHRoZSBleHRlbmRlciB0byBtb2RpZnkgdGhlIGluaXRpYWwgc2VsZWN0aW9uIHRvIGFuIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIG9iamVjdCB0aGF0IGlzIG1vcmUgcmVhZGlseSB1c2FibGUgYnkgdGhlIHJ1bnRpbWUgc2VydmVyIHR5cGUuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iZXh0ZXJuYWxfbW9kaWZ5IiB0eXBlPSJib29sZWFuIiB1c2U9ImRlZmF1bHQiIHZhbHVlPSJmYWxzZSI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyBhdHRyaWJ1dGUgc3BlY2lmaWVzIHdoZXRoZXIgdGhlIG9iamVjdCBzZWxlY3Rpb24gY2FuIGJlIHNwZWNpZmllZCBvdXRzaWRlIHRoZSBvYmplY3Qgc2VsZWN0aW9uIHdpZGdldC4gIEFuIGV4YW1wbGUsIG9mIHRoaXMgd291bGQgYmUgb24gcGFnZSBvbmUgb2YgdGhlIHdlYiBzZXJ2aWNlIHdpZGdldCBieSB0eXBpbmcgaW4gYSB0ZXh0IGZpZWxkLiAgSWYgc2V0IHRvIHRydWUsIHRoZSBleHRlbmRlciBvZiBPYmplY3RTZWxlY3Rpb25XaWRnZXQgbXVzdCBwcm92aWRlIGEgdmFsaWRhdGUoU3RyaW5nKSBpbXBsZW1lbnRhdGlvbiB0aGF0IGRvZXMgYW55IG5lY2Vzc2FyeSB2YWxpZGF0aW9uIGFuZCBzZXRzIHRoZSBvYmplY3Qgc2VsZWN0aW9uIG9uIHRoZSB3aWRnZXQuICBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGlzIGF0dHJpYnV0ZSBpcyBmYWxzZS4gIEFueSB0ZXh0IGZpZWxkcyB3aWxsIGJlIHNldCB0byBSRUFEX09OTFkgc3R5bGUgc28gdGhlIG9iamVjdCBzZWxlY3Rpb24gY2FuIG9ubHkgYmUgbW9kaWZpZWQgd2l0aCBvYmplY3Qgc2VsZWN0aW9uIHdpZGdldCBpbXBsZW1lbnRhdGlvbiBkaXJlY3RseS4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0ic2luY2UiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgJmx0O2ImZ3Q7VGhpcyBleHRlbnNpb24gcG9pbnQgaXMgcGFydCBvZiBhbiBpbnRlcmltIEFQSSB0aGF0IGlzIHN0aWxsIHVuZGVyIGRldmVsb3BtZW50IGFuZCBleHBlY3RlZCB0byBjaGFuZ2Ugc2lnbmlmaWNhbnRseSBiZWZvcmUgcmVhY2hpbmcgc3RhYmlsaXR5LiBJdCBpcyBiZWluZyBtYWRlIGF2YWlsYWJsZSBhdCB0aGlzIGVhcmx5IHN0YWdlIHRvIHNvbGljaXQgZmVlZGJhY2sgZnJvbSBwaW9uZWVyaW5nIGFkb3B0ZXJzIG9uIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgYW55IGNvZGUgdGhhdCB1c2VzIHRoaXMgQVBJIHdpbGwgYWxtb3N0IGNlcnRhaW5seSBiZSBicm9rZW4gKHJlcGVhdGVkbHkpIGFzIHRoZSBBUEkgZXZvbHZlcy4mbHQ7L2ImZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImV4YW1wbGVzIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIAotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJhcGlJbmZvIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIAotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJpbXBsZW1lbnRhdGlvbiIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iY29weXJpZ2h0Ii8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4mbHQ7YnImZ3Q7Ci1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIAotYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIAotdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgJmx0O2EKLWhyZWY9JnF1b3Q7aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmcXVvdDsmZ3Q7aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmbHQ7L2EmZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc2NoZW1hL3dlYlNlcnZpY2VDbGllbnRUeXBlLmV4c2QgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zY2hlbWEvd2ViU2VydmljZUNsaWVudFR5cGUuZXhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNiZGQzYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zY2hlbWEvd2ViU2VydmljZUNsaWVudFR5cGUuZXhzZAorKysgL2Rldi9udWxsCkBAIC0xLDI1NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgotPCEtLSBTY2hlbWEgZmlsZSB3cml0dGVuIGJ5IFBERSAtLT4KLTxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkiPgotPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNjaGVtYSBwbHVnaW49Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aSIgaWQ9IndlYlNlcnZpY2VDbGllbnRUeXBlIiBuYW1lPSJXZWIgU2VydmljZSBDbGllbnQgVHlwZXMiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhpcyBleHRlbnNpb24gcG9pbnQgZGVmaW5lcyBXZWIgU2VydmljZSBDbGllbnQgdHlwZXMuICBUaGlzIGlzIGRvbmUgYnkgZGVmaW5pbmcgd2ViU2VydmljZUNsaWVudFR5cGUgZWxlbWVudHMuICBUaGVzZSBlbGVtZW50cyByZWZlciB0byBhIHNlcnZlciBhbmQgYSBXZWIgU2VydmljZSBydW50aW1lLiAgVGhlc2UgYXJlIHJlc3BlY3RpdmVseSBkZWZpbmVkIGluIHRoZSB3ZWJTZXJ2aWNlU2VydmVyIGVsZW1lbnQgYW5kIHRoZSB3ZWJTZXJ2aWNlUnVudGltZSBlbGVtZW50LgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJ3ZWJTZXJ2aWNlU2VydmVyIiBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9IndlYlNlcnZpY2VSdW50aW1lIiBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9IndlYlNlcnZpY2VDbGllbnRUeXBlIiBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwb2ludCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhIGZ1bGx5IHF1YWxpZmllZCBpZGVudGlmaWVyIG9mIHRoZSB0YXJnZXQgZXh0ZW5zaW9uIHBvaW50Ci0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgYW4gb3B0aW9uYWwgaWRlbnRpZmllciBvZiB0aGUgZXh0ZW5zaW9uIGluc3RhbmNlCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhbiBvcHRpb25hbCBuYW1lIG9mIHRoZSBleHRlbnNpb24gaW5zdGFuY2UKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGVsZW1lbnQgbmFtZT0id2ViU2VydmljZVNlcnZlciI+Ci0gICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgVGhpcyBlbGVtZW50IHNwZWNpZmllcyBpbmZvcm1hdGlvbiBhYm91dCBhIHBhcnRpY3VsYXIgc2VydmVyIHR5cGUuCi0gICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICA8L2Fubm90YXRpb24+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImZhY3RvcnlJZCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIGlzIHRoZSBmYWN0b3J5IGlkIGZvciBhIHNlcnZlci4gIFRoaXMgaWQgaXMgZGVmaW5lZCBieQotdGhlIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5zZXJ2ZXJUeXBlcyBleHRlbnNpb24gcG9pbnQuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaXNEZWZhdWx0IiB0eXBlPSJib29sZWFuIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBpbmRpY2F0ZXMgaWYgdGhpcyBzZXJ2ZXIgc2hvdWxkIGJlIHVzZWQgYXMgdGhlIGRlZmF1bHQgc2VydmVyLiAgTm90ZTogIHRoaXMgZGVmYXVsdCBwYXJhbWV0ZXIgaXMgb25seSB1c2VkIGluIHRoZSBhYnNlbmNlIG9mIG90aGVyIGluZm9ybWF0aW9uLiAgSWYgdGhlIHVzZXIgaGFzIGRlZmluZWQgYSBwYXJ0aWN1bGFyIHNlcnZlciBhcyB0aGVpciBkZWZhdWx0IHRoZW4gdGhpcyBwYXJhbWV0ZXIgaXMgaWdub3JlZC4gIFNob3VsZCBjb250YWluIGEgdmFsdWUgb2YgZWl0aGVyICZxdW90O3RydWUmcXVvdDsgb3IgJnF1b3Q7ZmFsc2UmcXVvdDsuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyBpcyBhIGxvY2FsIElEIGZvciB0aGlzIHNlcnZlci4gIFRoZSBzZXJ2ZXIgYXR0cmlidXRlIG9mIHRoZSB3ZWJzZXJ2aWNlQ2xpZW50VHlwZSBlbGVtZW50IHJlZmVycyB0byB0aGlzIElELgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InJ1bnRpbWVUeXBlSWRzIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgYXR0cmlidXRlIGlzIGN1cnJlbnRseSBhIHBsYWNlIGhvbGRlciBmb3IgZnV0dXJlIGRldmVsb3BtZW50LiAgUGxlYXNlLCBkbyBub3QgdXNlLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJ3ZWJTZXJ2aWNlUnVudGltZSI+Ci0gICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgVGhpcyBlbGVtZW50IHNwZWNpZmllcyBpbmZvcm1hdGlvbiBhYm91dCBhIHBhcnRpY3VsYXIgV2ViIFNlcnZpY2VzIHJ1bnRpbWUuCi0gICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICA8L2Fubm90YXRpb24+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImxhYmVsIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgbGFiZWwgaXMgZGlzcGxheWVkIHRvIHRoZSB1c2VyIGZvciB0aGlzIHJ1bnRpbWUuICBUaGVyZWZvcmUsIGlzIG11c3QgYmUgdHJhbnNsYXRlZC4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJkZXNjcmlwdGlvbiIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBBIGRlc2NyaXB0aW9uIG9mIHRoaXMgV2ViIFNlcnZpY2VzIHJ1bnRpbWUuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaXNEZWZhdWx0IiB0eXBlPSJib29sZWFuIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBpbmRpY2F0ZXMgaWYgdGhpcyBydW50aW1lIHNob3VsZCBiZSB1c2VkIGFzIHRoZSBkZWZhdWx0IHJ1bnRpbWUuICBOb3RlOiAgdGhpcyBkZWZhdWx0IHBhcmFtZXRlciBpcyBvbmx5IHVzZWQgaW4gdGhlIGFic2VuY2Ugb2Ygb3RoZXIgaW5mb3JtYXRpb24uICBJZiB0aGUgdXNlciBoYXMgZGVmaW5lZCBhIHBhcnRpY3VsYXIgcnVudGltZSBhcyB0aGVpciBkZWZhdWx0IHRoZW4gdGhpcyBwYXJhbWV0ZXIgaXMgaWdub3JlZC4gIFNob3VsZCBjb250YWluIGEgdmFsdWUgb2YgZWl0aGVyICZxdW90O3RydWUmcXVvdDsgb3IgJnF1b3Q7ZmFsc2UmcXVvdDsuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iajJlZXZlcnNpb24iIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyBhdHRyaWJ1dGUgc3BlY2lmaWVzIHRoZSBKMkVFIHZlcnNpb25zIHN1cHBvcnRlZCBieSB0aGlzIHJ1bnRpbWUuICBUaGUgYWxsb3dhYmxlIHZhbHVlcyBhcmUgMTIsIDEzLCBhbmQgMTQuICBJZiBtb3JlIHRoYW4gb25lIEoyRUUgdmVyc2lvbiBpcyBzdXBwb3J0ZWQgZWFjaCBKMkVFIGxldmVsIHNob3VsZCBiZSBzcGVjaWZpZWQgd2l0aCBhIGJsYW5rIGRlbGltaXRlci4oZWcuIGlmIEoyRUUgdmVyc2lvbiAxLjIgYW5kIDEuMyBhcmUgc3VwcG9ydGVkIHRoZW4gdGhpcyBhdHRyaWJ1dGUgc3RyaW5nIHdvdWxkIGJlICZxdW90OzEyIDEzJnF1b3Q7LgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJ3ZWJTZXJ2aWNlQ2xpZW50VHlwZSI+Ci0gICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgVGhpcyBlbGVtZW50IHNwZWNpZmllcyBpbmZvcm1hdGlvbiBhYm91dCBhIHBhcnRpY3VsYXIgV2ViIFNlcnZpY2VzIGNsaWVudCB0eXBlLgotICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIGlzIHRoZSBJRCBmb3IgdGhpcyBXZWIgU2VydmljZSBDbGllbnQgdHlwZS4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgaXMgdGhlIG5hbWUgZm9yIHRoaXMgV2ViIFNlcnZpY2UgQ2xpZW50IHR5cGUuICBJdCBpcyBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIgc28gaXQgbXVzdCBiZSB0cmFuc2xhdGVkLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImNsaWVudFR5cGUiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyBpcyB0aGUga2luZCBvZiBXZWIgU2VydmljZSBDbGllbnQgdHlwZSBiZWluZyBkZWZpbmVkLiAoaWUuIHRoZSB2YWx1ZSBvZiB0aGUgSmF2YSBjbGllbnQgaXMgb3JnLmVjbGlwc2UuanN0LndzLmNsaWVudC50eXBlLmphdmEuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icnVudGltZSIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIGlzIHRoZSBydW50aW1lIElEIGZvciB0aGlzIFdlYiBTZXJ2aWNlIGNsaWVudCB0eXBlLiAgVGhlcmUgc2hvdWxkIGJlIGEgY29ycmVzcG9uZGluZyB3ZWJTZXJ2aWNlUnVudGltZSBlbGVtZW50IHdpdGggYW4gYXR0cmlidXRlIGNhbGxlZCBpZCB0aGF0IGhhcyB0aGlzIHZhbHVlLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InNlcnZlciIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIGF0dHJpYnV0ZSBzcGVjaWZpZXMgdGhlIHNlcnZlciBmb3IgdGhpcyBXZWIgU2VydmljZSBjbGllbnQgdHlwZS4gIFRoZXJlIHNob3VsZCBiZSBhIGNvcnJlc3BvbmRpbmcgd2ViU2VydmljZVNlcnZlciBlbGVtZW50IHdpdGggYW4gYXR0cmlidXRlIGNhbGxlZCBpZCB0aGF0IGhhcyB0aGlzIHZhbHVlLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImNsaWVudFByb2plY3RUeXBlIiB0eXBlPSJzdHJpbmciIHVzZT0iZGVmYXVsdCIgdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5jbGllbnRQcm9qZWN0VHlwZS5XZWIiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgYXR0cmlidXRlIGNvbnRhaW5zIGEgc3BhY2UgZGVsaW1pdGVkIGxpc3Qgb2YgY2xpZW50IHByb2plY3QgdHlwZSBpZHMgc3VwcG9ydGVkIGJ5IHRoaXMgYnkgdGhpcyB3ZWJTZXJ2aWNlQ2xpZW50VHlwZSBlbGVtZW50LiAgVGhlIGNsaWVudCBwcm9qZWN0IHR5cGUgaWRzIGFyZSBkZWZpbmVkIGJ5IHRoZSBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuY2xpZW50UHJvamVjdFR5cGUgZXh0ZW5zaW9uIHBvaW50LgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImRldmVsb3BCaW5kaW5nIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgYXR0cmlidXRlIHNwZWNpZmllcyBhIENvbW1hbmRXaWRnZXRCaW5kaW5nIGNsYXNzLiAgVGhpcyBjbGFzcyBzcGVjaWZpZXMgdGhlIENvbW1hbmRzIGFuZCBVSSBlbGVtZW50cyBhc3NvY2lhdGUgd2l0aCBKMkVFIGRldmVsb3BtZW50IHBoYXNlLiAgVGhlIENvbW1hbmQgYW5kIFVJIGVsZW1lbnRzIGluIHRoaXMgYmluZGluZyBhbHdheXMgY29tZSBmaXJzdCBpbiB0aGUgd2l6YXJkLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImFzc2VtYmx5QmluZGluZyIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIGF0dHJpYnV0ZSBzcGVjaWZpZXMgYSBDb21tYW5kV2lkZ2V0QmluZGluZyBjbGFzcy4gIFRoaXMgY2xhc3Mgc3BlY2lmaWVzIHRoZSBDb21tYW5kcyBhbmQgVUkgZWxlbWVudHMgYXNzb2NpYXRlIHdpdGggSjJFRSBhc3NlbWJseSBwaGFzZS4gIFRoZSBDb21tYW5kIGFuZCBVSSBlbGVtZW50cyBpbiB0aGlzIGJpbmRpbmcgYWx3YXlzIGNvbWUgYWZ0ZXIgdGhlIGRldmVsb3BtZW50IHBoYXNlIGJpbmRpbmcgaW4gdGhlIHdpemFyZC4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJkZXBsb3lCaW5kaW5nIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgYXR0cmlidXRlIHNwZWNpZmllcyBhIENvbW1hbmRXaWRnZXRCaW5kaW5nIGNsYXNzLiAgVGhpcyBjbGFzcyBzcGVjaWZpZXMgdGhlIENvbW1hbmRzIGFuZCBVSSBlbGVtZW50cyBhc3NvY2lhdGUgd2l0aCBKMkVFIGRlcGxveSBwaGFzZS4gIFRoZSBDb21tYW5kIGFuZCBVSSBlbGVtZW50cyBpbiB0aGlzIGJpbmRpbmcgYWx3YXlzIGNvbWUgYWZ0ZXIgdGhlIGFzc2VtYmx5IHBoYXNlIGJpbmRpbmcgaW4gdGhlIHdpemFyZC4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpbnN0YWxsQmluZGluZyIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIGF0dHJpYnV0ZSBzcGVjaWZpZXMgYSBDb21tYW5kV2lkZ2V0QmluZGluZyBjbGFzcy4gIFRoaXMgY2xhc3Mgc3BlY2lmaWVzIHRoZSBDb21tYW5kcyBhbmQgVUkgZWxlbWVudHMgYXNzb2NpYXRlIHdpdGggSjJFRSBpbnN0YWxsIHBoYXNlLiAgVGhlIENvbW1hbmQgYW5kIFVJIGVsZW1lbnRzIGluIHRoaXMgYmluZGluZyBhbHdheXMgY29tZSBhZnRlciB0aGUgZGVwbG95IHBoYXNlIGJpbmRpbmcgaW4gdGhlIHdpemFyZC4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0ic2luY2UiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgJmx0O2ImZ3Q7VGhpcyBleHRlbnNpb24gcG9pbnQgaXMgcGFydCBvZiBhbiBpbnRlcmltIEFQSSB0aGF0IGlzIHN0aWxsIHVuZGVyIGRldmVsb3BtZW50IGFuZCBleHBlY3RlZCB0byBjaGFuZ2Ugc2lnbmlmaWNhbnRseSBiZWZvcmUgcmVhY2hpbmcgc3RhYmlsaXR5LiBJdCBpcyBiZWluZyBtYWRlIGF2YWlsYWJsZSBhdCB0aGlzIGVhcmx5IHN0YWdlIHRvIHNvbGljaXQgZmVlZGJhY2sgZnJvbSBwaW9uZWVyaW5nIGFkb3B0ZXJzIG9uIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgYW55IGNvZGUgdGhhdCB1c2VzIHRoaXMgQVBJIHdpbGwgYWxtb3N0IGNlcnRhaW5seSBiZSBicm9rZW4gKHJlcGVhdGVkbHkpIGFzIHRoZSBBUEkgZXZvbHZlcy4mbHQ7L2ImZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImV4YW1wbGVzIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIAotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJhcGlJbmZvIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIAotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJpbXBsZW1lbnRhdGlvbiIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iY29weXJpZ2h0Ii8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4mbHQ7YnImZ3Q7Ci1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIAotYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIAotdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgJmx0O2EKLWhyZWY9JnF1b3Q7aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmcXVvdDsmZ3Q7aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmbHQ7L2EmZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc2NoZW1hL3dlYlNlcnZpY2VTZXJ2ZXJSdW50aW1lVHlwZS5leHNkIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc2NoZW1hL3dlYlNlcnZpY2VTZXJ2ZXJSdW50aW1lVHlwZS5leHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmRkNzExLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NjaGVtYS93ZWJTZXJ2aWNlU2VydmVyUnVudGltZVR5cGUuZXhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMyNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgotPCEtLSBTY2hlbWEgZmlsZSB3cml0dGVuIGJ5IFBERSAtLT4KLTxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkiPgotPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNjaGVtYSBwbHVnaW49Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aSIgaWQ9IndlYlNlcnZpY2VTZXJ2ZXJSdW50aW1lVHlwZSIgbmFtZT0iV2ViIFNlcnZpY2UgU2VydmVyIFJ1bnRpbWUgVHlwZXMiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhpcyBleHRlbnNpb24gcG9pbnQgZGVmaW5lcyBXZWIgU2VydmljZSBTZXJ2ZXIgdHlwZXMuICBUaGlzIGlzIGRvbmUgYnkgZGVmaW5pbmcgd2ViU2VydmljZVNlcnZlclJ1bnRpbWVUeXBlIGVsZW1lbnRzLiAgVGhlc2UgZWxlbWVudHMgcmVmZXIgdG8gYSBzZXJ2ZXIgYW5kIGEgV2ViIFNlcnZpY2UgcnVudGltZS4gIFRoZXNlIGFyZSByZXNwZWN0aXZlbHkgZGVmaW5lZCBpbiB0aGUgd2ViU2VydmljZVNlcnZlciBlbGVtZW50IGFuZCB0aGUgd2ViU2VydmljZVJ1bnRpbWUgZWxlbWVudC4KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0id2ViU2VydmljZVNlcnZlciIgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJ3ZWJTZXJ2aWNlUnVudGltZSIgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJ3ZWJTZXJ2aWNlU2VydmVyUnVudGltZVR5cGUiIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0id2ViU2VydmljZVR5cGUiIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGEgZnVsbHkgcXVhbGlmaWVkIGlkZW50aWZpZXIgb2YgdGhlIHRhcmdldCBleHRlbnNpb24gcG9pbnQKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhbiBvcHRpb25hbCBpZGVudGlmaWVyIG9mIHRoZSBleHRlbnNpb24gaW5zdGFuY2UKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGFuIG9wdGlvbmFsIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiBpbnN0YW5jZQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJ3ZWJTZXJ2aWNlU2VydmVyIj4KLSAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICBUaGlzIGVsZW1lbnQgc3BlY2lmaWVzIGluZm9ybWF0aW9uIGFib3V0IGEgcGFydGljdWxhciBzZXJ2ZXIgdHlwZS4KLSAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iZmFjdG9yeUlkIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgaXMgdGhlIGZhY3RvcnkgaWQgZm9yIGEgc2VydmVyLiAgVGhpcyBpZCBpcyBkZWZpbmVkIGJ5Ci10aGUgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnNlcnZlclR5cGVzIGV4dGVuc2lvbiBwb2ludC4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpc0RlZmF1bHQiIHR5cGU9ImJvb2xlYW4iIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGluZGljYXRlcyBpZiB0aGlzIHNlcnZlciBzaG91bGQgYmUgdXNlZCBhcyB0aGUgZGVmYXVsdCBzZXJ2ZXIuICBOb3RlOiAgdGhpcyBkZWZhdWx0IHBhcmFtZXRlciBpcyBvbmx5IHVzZWQgaW4gdGhlIGFic2VuY2Ugb2Ygb3RoZXIgaW5mb3JtYXRpb24uICBJZiB0aGUgdXNlciBoYXMgZGVmaW5lZCBhIHBhcnRpY3VsYXIgc2VydmVyIGFzIHRoZWlyIGRlZmF1bHQgdGhlbiB0aGlzIHBhcmFtZXRlciBpcyBpZ25vcmVkLiAgU2hvdWxkIGNvbnRhaW4gYSB2YWx1ZSBvZiBlaXRoZXIgJnF1b3Q7dHJ1ZSZxdW90OyBvciAmcXVvdDtmYWxzZSZxdW90Oy4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIGlzIGEgbG9jYWwgSUQgZm9yIHRoaXMgc2VydmVyLiAgVGhlIHNlcnZlciBhdHRyaWJ1dGUgb2YgdGhlIHdlYnNlcnZpY2VTZXJ2ZXJSdW50aW1lVHlwZSBlbGVtZW50IHJlZmVycyB0byB0aGlzIElELgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InJ1bnRpbWVUeXBlSWRzIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgYXR0cmlidXRlIGlzIGN1cnJlbnRseSBhIHBsYWNlIGhvbGRlciBmb3IgZnV0dXJlIGRldmVsb3BtZW50LiAgUGxlYXNlLCBkbyBub3QgdXNlLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJ3ZWJTZXJ2aWNlUnVudGltZSI+Ci0gICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgVGhpcyBlbGVtZW50IHNwZWNpZmllcyBpbmZvcm1hdGlvbiBhYm91dCBhIHBhcnRpY3VsYXIgV2ViIFNlcnZpY2VzIHJ1bnRpbWUuCi0gICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICA8L2Fubm90YXRpb24+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImxhYmVsIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgbGFiZWwgaXMgZGlzcGxheWVkIHRvIHRoZSB1c2VyIGZvciB0aGlzIHJ1bnRpbWUuICBUaGVyZWZvcmUsIGlzIG11c3QgYmUgdHJhbnNsYXRlZC4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJkZXNjcmlwdGlvbiIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBBIGRlc2NyaXB0aW9uIG9mIHRoaXMgV2ViIFNlcnZpY2VzIHJ1bnRpbWUuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaXNEZWZhdWx0IiB0eXBlPSJib29sZWFuIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBpbmRpY2F0ZXMgaWYgdGhpcyBydW50aW1lIHNob3VsZCBiZSB1c2VkIGFzIHRoZSBkZWZhdWx0IHJ1bnRpbWUuICBOb3RlOiAgdGhpcyBkZWZhdWx0IHBhcmFtZXRlciBpcyBvbmx5IHVzZWQgaW4gdGhlIGFic2VuY2Ugb2Ygb3RoZXIgaW5mb3JtYXRpb24uICBJZiB0aGUgdXNlciBoYXMgZGVmaW5lZCBhIHBhcnRpY3VsYXIgcnVudGltZSBhcyB0aGVpciBkZWZhdWx0IHRoZW4gdGhpcyBwYXJhbWV0ZXIgaXMgaWdub3JlZC4gIFNob3VsZCBjb250YWluIGEgdmFsdWUgb2YgZWl0aGVyICZxdW90O3RydWUmcXVvdDsgb3IgJnF1b3Q7ZmFsc2UmcXVvdDsuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iajJlZXZlcnNpb24iIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyBhdHRyaWJ1dGUgc3BlY2lmaWVzIHRoZSBKMkVFIHZlcnNpb25zIHN1cHBvcnRlZCBieSB0aGlzIHJ1bnRpbWUuICBUaGUgYWxsb3dhYmxlIHZhbHVlcyBhcmUgMTIsIDEzLCBhbmQgMTQuICBJZiBtb3JlIHRoYW4gb25lIEoyRUUgdmVyc2lvbiBpcyBzdXBwb3J0ZWQgZWFjaCBKMkVFIGxldmVsIHNob3VsZCBiZSBzcGVjaWZpZWQgd2l0aCBhIGJsYW5rIGRlbGltaXRlci4oZWcuIGlmIEoyRUUgdmVyc2lvbiAxLjIgYW5kIDEuMyBhcmUgc3VwcG9ydGVkIHRoZW4gdGhpcyBhdHRyaWJ1dGUgc3RyaW5nIHdvdWxkIGJlICZxdW90OzEyIDEzJnF1b3Q7LgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJ3ZWJTZXJ2aWNlU2VydmVyUnVudGltZVR5cGUiPgotICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIFRoaXMgZWxlbWVudCBzcGVjaWZpZXMgaW5mb3JtYXRpb24gYWJvdXQgYSBwYXJ0aWN1bGFyIFdlYiBTZXJ2aWNlcyBzZXJ2ZXIgcnVudGltZSB0eXBlLiAgQW4gZW50cnkgZm9yIHRoaXMgZWxlbWVudCBkZWZpbmVzIGEgdmFsaWQgY29tYmluYXRpb24gb2Ygc2VydmVyLCBydW50aW1lLCBhbmQgd2Vic2VydmljZSB0eXBlLgotICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIGlzIHRoZSBJRCBmb3IgdGhpcyBXZWIgU2VydmljZSBTZXJ2ZXIgUnVudGltZSB0eXBlLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyBpcyB0aGUgbmFtZSBmb3IgdGhpcyBXZWIgU2VydmljZSBTZXJ2ZXIgUnVudGltZSB0eXBlLiAgSXQgaXMgZGlzcGxheWVkIHRvIHRoZSB1c2VyIHNvIGl0IG11c3QgYmUgdHJhbnNsYXRlZC4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJydW50aW1lIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgaXMgdGhlIHJ1bnRpbWUgSUQgZm9yIHRoaXMgV2ViIFNlcnZpY2UgU2VydmVyIFJ1bnRpbWUgdHlwZS4gIFRoZXJlIHNob3VsZCBiZSBhIGNvcnJlc3BvbmRpbmcgd2ViU2VydmljZVJ1bnRpbWUgZWxlbWVudCB3aXRoIGFuIGF0dHJpYnV0ZSBjYWxsZWQgaWQgdGhhdCBoYXMgdGhpcyB2YWx1ZS4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJzZXJ2ZXIiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyBhdHRyaWJ1dGUgc3BlY2lmaWVzIHRoZSBzZXJ2ZXIgZm9yIHRoaXMgV2ViIFNlcnZpY2UgU2VydmVyIFJ1bnRpbWUgdHlwZS4gIFRoZXJlIHNob3VsZCBiZSBhIGNvcnJlc3BvbmRpbmcgd2ViU2VydmljZVNlcnZlciBlbGVtZW50IHdpdGggYW4gYXR0cmlidXRlIGNhbGxlZCBpZCB0aGF0IGhhcyB0aGlzIHZhbHVlLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InR5cGUiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyBpcyB0aGUga2luZCBvZiBXZWIgU2VydmljZSBSdW50aW1lIHR5cGUgYmVpbmcgZGVmaW5lZC4gKGVnLiB0aGUgdmFsdWUgb2YgYSBKYXZhIEJlYW4gV2Vic2VydmljZSBpcyBvcmcuZWNsaXBzZS5qc3Qud3MudHlwZS5qYXZhKQotVGhlcmUgc2hvdWxkIGJlIGEgY29ycmVzcG9uZGluZyB3ZWJTZXJ2aWNlVHlwZSBlbGVtZW50IHdpdGggYW4gYXR0cmlidXRlIGNhbGxlZCBpZCB0aGF0IGhhcyB0aGlzIHZhbHVlLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImRldmVsb3BCaW5kaW5nIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgYXR0cmlidXRlIHNwZWNpZmllcyBhIENvbW1hbmRXaWRnZXRCaW5kaW5nIGNsYXNzLiAgVGhpcyBjbGFzcyBzcGVjaWZpZXMgdGhlIENvbW1hbmRzIGFuZCBVSSBlbGVtZW50cyBhc3NvY2lhdGUgd2l0aCBKMkVFIGRldmVsb3BtZW50IHBoYXNlLiAgVGhlIENvbW1hbmQgYW5kIFVJIGVsZW1lbnRzIGluIHRoaXMgYmluZGluZyBhbHdheXMgY29tZSBmaXJzdCBpbiB0aGUgd2l6YXJkLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImFzc2VtYmx5QmluZGluZyIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIGF0dHJpYnV0ZSBzcGVjaWZpZXMgYSBDb21tYW5kV2lkZ2V0QmluZGluZyBjbGFzcy4gIFRoaXMgY2xhc3Mgc3BlY2lmaWVzIHRoZSBDb21tYW5kcyBhbmQgVUkgZWxlbWVudHMgYXNzb2NpYXRlIHdpdGggSjJFRSBhc3NlbWJseSBwaGFzZS4gIFRoZSBDb21tYW5kIGFuZCBVSSBlbGVtZW50cyBpbiB0aGlzIGJpbmRpbmcgYWx3YXlzIGNvbWUgYWZ0ZXIgdGhlIGRldmVsb3BtZW50IHBoYXNlIGJpbmRpbmcgaW4gdGhlIHdpemFyZC4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJkZXBsb3lCaW5kaW5nIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgYXR0cmlidXRlIHNwZWNpZmllcyBhIENvbW1hbmRXaWRnZXRCaW5kaW5nIGNsYXNzLiAgVGhpcyBjbGFzcyBzcGVjaWZpZXMgdGhlIENvbW1hbmRzIGFuZCBVSSBlbGVtZW50cyBhc3NvY2lhdGUgd2l0aCBKMkVFIGRlcGxveSBwaGFzZS4gIFRoZSBDb21tYW5kIGFuZCBVSSBlbGVtZW50cyBpbiB0aGlzIGJpbmRpbmcgYWx3YXlzIGNvbWUgYWZ0ZXIgdGhlIGFzc2VtYmx5IHBoYXNlIGJpbmRpbmcgaW4gdGhlIHdpemFyZC4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpbnN0YWxsQmluZGluZyIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIGF0dHJpYnV0ZSBzcGVjaWZpZXMgYSBDb21tYW5kV2lkZ2V0QmluZGluZyBjbGFzcy4gIFRoaXMgY2xhc3Mgc3BlY2lmaWVzIHRoZSBDb21tYW5kcyBhbmQgVUkgZWxlbWVudHMgYXNzb2NpYXRlIHdpdGggSjJFRSBpbnN0YWxsIHBoYXNlLiAgVGhlIENvbW1hbmQgYW5kIFVJIGVsZW1lbnRzIGluIHRoaXMgYmluZGluZyBhbHdheXMgY29tZSBhZnRlciB0aGUgZGVwbG95IHBoYXNlIGJpbmRpbmcgaW4gdGhlIHdpemFyZC4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJyZXF1aXJlRUpCTW9kdWxlIiB0eXBlPSJib29sZWFuIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBJZiB0aGUgV2Vic2VydmljZSBmb3IgdGhpcyBTZXJ2ZXIgUnVudGltZSBUeXBlIGlzIHJlcXVpcmVkIHRvIGJlIGluIGFuIEVKQiBtb2R1bGUgdGhlbiB0aGUgdmFsdWUgb2YgdGhpcyBhdHRyaWJ1dGUgc2hvdWxkIGJlIHRydWUuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icmVxdWlyZVdlYk1vZHVsZSIgdHlwZT0iYm9vbGVhbiIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgSWYgdGhlIFdlYnNlcnZpY2UgZm9yIHRoaXMgU2VydmVyIFJ1bnRpbWUgVHlwZSBpcyByZXF1aXJlZCB0byBiZSBpbiBhbiBXZWIgbW9kdWxlIHRoZW4gdGhlIHZhbHVlIG9mIHRoaXMgYXR0cmlidXRlIHNob3VsZCBiZSB0cnVlLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJ3ZWJTZXJ2aWNlVHlwZSI+Ci0gICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgVGhpcyBlbGVtZW50IGRlZmluZXMgYSBwYXJ0aWN1bGFyIFdlYiBzZXJ2aWNlIGtpbmQuICBTdWNoIGFzIGEgSmF2YSBCZWFuIHdlYiBzZXJ2aWNlLCBhIFNrZWxldG9uIFdlYiBzZXJ2aWNlLCBhbiBFSkIgIFdlYiBzZXJ2aWNlLCBldGMuCi0gICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICA8L2Fubm90YXRpb24+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgYSB1bmlxdWUgSUQgZm9yIHRoaXMgV2ViIHNlcnZpY2UgdHlwZS4gIEl0IGlzIHJlZmVyZW5jZWQgaW4gdGhlIHdlYlNlcnZpY2VTZXJ2ZXJSdW50aW1lVHlwZSBlbGVtZW50IHdpdGggdGhlIHR5cGUgYXR0cmlidXRlLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImxhYmVsIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgaXMgYSB0cmFuc2xhdGFibGUgbGFiZWwgZm9yIHRoaXMgd2ViIHNlcnZpY2UgdHlwZS4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJyZXNvdXJjZVR5cGVNZXRhZGF0YSIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIGF0dHJpYnV0ZSBjb250YWlucyBhIGJsYW5rIGRlbGltaXRlZCBsaXN0IGNsYXNzIE5hbWVzLiAoaWUuTm8gcGFja2FnZSBwcmVmaXgpICBUaGUgY2xhc3NlcyBsaXN0ZWQgZGVmaW5lIHRoZSBhbGxvd2FibGUgRWNsaXBzZSByZXNvdXJjZXMgdGhhdCB0aGlzIHdlYiBzZXJ2aWNlIHR5cGUgdW5kZXJzdGFuZHMgYW5kIHR1cm4gaW50byBhIFdlYiBzZXJ2aWNlLiAgRm9yIGV4YW1wbGUsIGlmIGEgdXNlciBzZWxlY3RzIGEgSmF2YSBzb3VyY2UgZmlsZSBpbiB0aGUgcGFja2FnZSBleHBsb3JlciB2aWV3IGFuZCB0aGVuIHN0YXJ0cyB0aGUgV2ViIHNlcnZpY2VzIHdpemFyZCBhIENvbXBpbGF0aW9uVW5pdCBvYmplY3Qgd2lsbCBiZSBwYXNzZWQgaW4gYXMgcGFydCBvZiBhbiBJU3RydWN0dXJlZFNlbGVjdGlvbi4gIEJ5IHB1dHRpbmcgJnF1b3Q7Q29tcGlsYXRpb25Vbml0JnF1b3Q7IGFzIG9uZSBvZiB0aGUgY2xhc3NlcyBpbiB0aGlzIGF0dHJpYnV0ZSBpdCBpbmRpY2F0ZXMgdGhhdCB0aGlzIHR5cGUgY2FuIGNyZWF0ZSBhIFdlYiBzZXJ2aWNlIGZyb20gdGhlIENvbXBpbGF0aW9uVW5pdC4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJleHRlbnNpb25NZXRhZGF0YSIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIGF0dHJpYnV0ZSBhbGxvd3MgdGhpcyBXZWIgc2VydmljZSB0eXBlIHRvIHJlc3RyaWN0IG5hbWVzIG9mIHRoZSBpbnB1dCBmaWxlcyB0aGF0IGl0IHVuZGVyc3RhbmRzLiAgRm9yIGV4YW1wbGUsIGlmIHRoZSB2YWx1ZSBpcyBzZXQgdG8gJnF1b3Q7LmphdmEgLmNsYXNzJnF1b3Q7IGl0IGluZGljYXRlcyB0aGF0IHRoaXMgV2ViIHNlcnZpY2UgdHlwZSBvbmx5IHVuZGVyc3RhbmRzIHJlc291cmNlIG5hbWVzIHRoYXQgZW5kIHdpdGggLmphdmEgb3IgZW5kIHdpdGggLmNsYXNzLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im9iamVjdFNlbGVjdGlvbldpZGdldCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBPbiBwYWdlIDIgb2YgdGhlIFdlYiBzZXJ2aWNlIHdpemFyZCB0aGVyZSBpcyBhbiBPYmplY3Qgc2VsZWN0aW9uIHBhZ2UuICBUaGlzIHNlbGVjdGlvbiBwYWdlIGNhbiBiZSBjdXN0b21pemVkIHVzaW5nIHRoaXMgYXR0cmlidXRlLCBzaW5jZSBkaWZmZXJlbnQgV2ViIHNlcnZpY2UgdHlwZXMgbWF5IG5lZWQgZGlmZmVyZW50IG1ldGhvZHMgb2Ygc2VsZWN0aW5nIHRoZW0uICBUaGUgdmFsdWUgb2YgdGhpcyBhdHRyaWJ1dGUgc2hvdWxkIGJlIHRoZSBpZCBvZiBhIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5vYmplY3RTZWxlY3Rpb25XaWRnZXQgZXh0ZW5zaW9uLiAgVGhlIHByZWRlZmluZWQgaWQgZm9yIGEgSmF2YSBzZWxlY3Rpb24gd2lkZ2V0IGlzIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5KYXZhQmVhblNlbGVjdGlvbldpZGdldC4gIFRoZSBwcmVkZWZpbmVkIGlkIGZvciBhIFdTREwgc2VsZWN0aW9uIHdpZGdldCBpcyBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuV1NETFNlbGVjdGlvbldpZGdldC4gIFRoZSBwcmVkZWZpbmVkIGlkIGZvciBhbiBFSkIgc2VsZWN0aW9uIHdpZGdldCBpcyBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuRUpCU2VsZWN0aW9uV2lkZ2V0LgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImluY2x1ZGVOYXR1cmVzIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgYXR0cmlidXRlIGNvbnRhaW5zIGEgYmxhbmsgZGVsaW1pdGVkIGxpc3Qgb2YgUHJvamVjdCBOYXR1cmUgSWRzLiAgVGhlIGxpc3RlZCBJRHMgaW5kaWNhdGUgdGhhdCB0aGlzIHR5cGUgb25seSB3b3JrcyB3aXRoIHRoZXNlIHBhcnRpY3VsYXIgcHJvamVjdCB0eXBlcy4gIEZvciBleGFtcGxlLCBpZiB0aGlzIHR5cGUgb25seSB3b3JrcyB3aXRoIHdlYiBwcm9qZWN0cyBhbiBJRCBvZiBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWIuV2ViTmF0dXJlIHdvdWxkIGJlIHNwZWNpZmllZC4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJleGNsdWRlTmF0dXJlcyIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIGF0dHJpYnV0ZSBjb250YWlucyBhIGJsYW5rIGRlbGltaXRlZCBsaXN0IG9mIFByb2plY3QgTmF0dXJlIElkcy4gIFRoZSBsaXN0ZWQgSURzIGluZGljYXRlIHRoYXQgdGhpcyB0eXBlIERPRVMgTk9UIHdvcmsgd2l0aCB0aGVzZSBwYXJ0aWN1bGFyIHByb2plY3QgdHlwZXMuICBGb3IgZXhhbXBsZSwgaWYgdGhpcyB0eXBlIGRvZXMgbm90IHdvcmsgd2l0aCB3ZWIgcHJvamVjdHMgYW4gSUQgb2Ygb3JnLmVjbGlwc2UuanN0LmoyZWUud2ViLldlYk5hdHVyZSB3b3VsZCBiZSBzcGVjaWZpZWQuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9InNpbmNlIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICZsdDtiJmd0O1RoaXMgZXh0ZW5zaW9uIHBvaW50IGlzIHBhcnQgb2YgYW4gaW50ZXJpbSBBUEkgdGhhdCBpcyBzdGlsbCB1bmRlciBkZXZlbG9wbWVudCBhbmQgZXhwZWN0ZWQgdG8gY2hhbmdlIHNpZ25pZmljYW50bHkgYmVmb3JlIHJlYWNoaW5nIHN0YWJpbGl0eS4gSXQgaXMgYmVpbmcgbWFkZSBhdmFpbGFibGUgYXQgdGhpcyBlYXJseSBzdGFnZSB0byBzb2xpY2l0IGZlZWRiYWNrIGZyb20gcGlvbmVlcmluZyBhZG9wdGVycyBvbiB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IGFueSBjb2RlIHRoYXQgdXNlcyB0aGlzIEFQSSB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgYmUgYnJva2VuIChyZXBlYXRlZGx5KSBhcyB0aGUgQVBJIGV2b2x2ZXMuJmx0Oy9iJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJleGFtcGxlcyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iYXBpSW5mbyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iaW1wbGVtZW50YXRpb24iLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImNvcHlyaWdodCIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuJmx0O2JyJmd0OwotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSAKLWF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyAKLXRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0ICZsdDthCi1ocmVmPSZxdW90O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJnF1b3Q7Jmd0O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJmx0Oy9hJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NjaGVtYS93ZWJTZXJ2aWNlVGVzdC5leHNkIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc2NoZW1hL3dlYlNlcnZpY2VUZXN0LmV4c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwYmY2MzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc2NoZW1hL3dlYlNlcnZpY2VUZXN0LmV4c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KLTwhLS0gU2NoZW1hIGZpbGUgd3JpdHRlbiBieSBQREUgLS0+Ci08c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpIj4KLTxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zY2hlbWEgcGx1Z2luPSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkiIGlkPSJ3ZWJTZXJ2aWNlVGVzdCIgbmFtZT0iV2ViIFNlcnZpY2UgVGVzdCIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBUaGlzIGV4dGVuc2lvbiBwb2ludCBkZWZpbmVzIFdlYiBzZXJ2aWNlIHRlc3QgZmFjaWxpdGllcyB0aGF0IGNhbiBiZSBwbHVnZ2VkIGludG8gdGhlIFdlYiBzZXJ2aWNlcyB3aXphcmRzLgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJ3ZWJTZXJ2aWNlVGVzdCIgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icG9pbnQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgYSBmdWxseSBxdWFsaWZpZWQgaWRlbnRpZmllciBvZiB0aGUgdGFyZ2V0IGV4dGVuc2lvbiBwb2ludAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGFuIG9wdGlvbmFsIGlkZW50aWZpZXIgb2YgdGhlIGV4dGVuc2lvbiBpbnN0YW5jZQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgYW4gb3B0aW9uYWwgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uIGluc3RhbmNlCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9IndlYlNlcnZpY2VUZXN0Ij4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibWV0aG9kc25lZWRlZCIgdHlwZT0iYm9vbGVhbiI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyBhdHRyaWJ1dGUgaW5kaWNhdGVzIGlmIHRoaXMgdGVzdCBmYWNpbGl0eSBuZWVkIHRvIG1ldGhvZHMgZnJvbSBhIHByb3h5IGJlYW4uCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgb2YgdGhpcyBhdHRyaWJ1dGUgaXMgZGlzcGxheWVkIHRvIHRoZSB1c2VyIGZvciB0aGlzIHRlc3QgZmFjaWxpdHkuICBJdCBtdXN0IGJlIHRyYW5zbGF0ZWQuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iamF2YSIgdHlwZT0iYm9vbGVhbiI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyBhdHRyaWJ1dGUgaW5kaWNhdGVzIHdoZXRoZXIgdGhpcyB0ZXN0IGZhY2lsaXR5IGlzIGludGVuZGVkIGZvciBjbGllbnRzIHRoYXQgZ2VuZXJhdGUgYSBKYXZhIGJlYW4gYXMgb3V0cHV0LgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImNvZGVnZW4iIHR5cGU9ImJvb2xlYW4iPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgYXR0cmlidXRlIGluZGljYXRlcyBpZiB0aGlzIHRlc3QgZmFjaWxpdHkgZ2VuZXJhdGVzIGNvZGUgb3Igbm90LCBzdWNoIGFzIEpTUCBmaWxlcy4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjbGFzcyIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIGF0dHJpYnV0ZSBjb250YWlucyBhIGNsYXNzIG5hbWUuICBUaGUgY2xhc3MgbXVzdCBpbXBsZW1lbnQgb3JnLmVjbGlwc2UuanN0LndzLmV4dC5XZWJTZXJ2aWNlRXhlY3V0YWJsZS4gIFRoaXMgY2xhc3MgYWxsb3dzIHRoZSBleHRlbmRlciB0byBwcm92aWRlIHRoZSBDb21tYW5kcyB0aGF0IHdpbGwgZXhlY3V0ZSBmb3IgdGhpcyB0ZXN0IGZhY2lsaXR5LgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoaXMgaXMgYSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhpcyB0ZXN0IGZhY2lsaXR5LgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJzaW5jZSIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAmbHQ7YiZndDtUaGlzIGV4dGVuc2lvbiBwb2ludCBpcyBwYXJ0IG9mIGFuIGludGVyaW0gQVBJIHRoYXQgaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnQgYW5kIGV4cGVjdGVkIHRvIGNoYW5nZSBzaWduaWZpY2FudGx5IGJlZm9yZSByZWFjaGluZyBzdGFiaWxpdHkuIEl0IGlzIGJlaW5nIG1hZGUgYXZhaWxhYmxlIGF0IHRoaXMgZWFybHkgc3RhZ2UgdG8gc29saWNpdCBmZWVkYmFjayBmcm9tIHBpb25lZXJpbmcgYWRvcHRlcnMgb24gdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBhbnkgY29kZSB0aGF0IHVzZXMgdGhpcyBBUEkgd2lsbCBhbG1vc3QgY2VydGFpbmx5IGJlIGJyb2tlbiAocmVwZWF0ZWRseSkgYXMgdGhlIEFQSSBldm9sdmVzLiZsdDsvYiZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iZXhhbXBsZXMiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImFwaUluZm8iLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImltcGxlbWVudGF0aW9uIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIAotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJjb3B5cmlnaHQiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiZsdDticiZndDsKLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgCi1hdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgCi10aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAmbHQ7YQotaHJlZj0mcXVvdDtodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCZxdW90OyZndDtodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCZsdDsvYSZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL0NvbnN1bXB0aW9uVUkucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvQ29uc3VtcHRpb25VSS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjU5YWY3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvQ29uc3VtcHRpb25VSS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNjM2ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotIyAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyAgMjAwNjAyMDQgMTI0MTQzICAgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0jICAyMDA2MDIwNCAxMjQ0MDggICByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIgICAgIAotIyAyMDA2MDIyMSAgIDExOTExMSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSMgMjAwNjAzMjEgICAxMjg4Mjcgam9hbiAtIEpvYW4gSGFnZ2FydHkKLSMgMjAwNjAzMjkgICAxMjgwNjkgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0jIDIwMDYwNDA3ICAgMTM1NDQzIGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSMgMjAwNjA0MTEgICAxMzYxMzQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSMgMjAwNjA0MTcgICAxMzYzOTAgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotIyAyMDA2MDQxMyAgIDEzNTU4MSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSMgMjAwNjA0MTggICAxMzYzMzUgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotIyAyMDA2MDQyMCAgIDEzNjE1OCByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSMgMjAwNjA0MjAgICAxMjA3MTQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSMgMjAwNjA0MjAgICAxMzU5MTIgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotIyAyMDA2MDUxMCAgIDE0MTExNSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSMgMjAwNjA1MDkgICAxMTkyOTYgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotIyAyMDA2MDYwMiAgIDE0NTA1NCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotIyAyMDA3MDQyNyAgIDE3NzM2MCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgTWVzc2FnZXMgaW4gcGx1Z2luLnhtbC4KLSMKLQotUExVR0lOX05FV19XSVpBUkRfTkFNRV9XU19DTElFTlQ9V2ViIFNlcnZpY2UgQ2xpZW50Ci0jCi0jIFdlYiBzZXJ2aWNlcyAiSW50ZXJuZXQiIHByZWZlcmVuY2VzIGV4dGVuc2lvbi4KLSMKLQotIwotIyBXZWIgU2FtcGxlcyBJRHMKLSMKLQotIwotIyBQb3AtdXAgYWN0aW9ucwotIwotQUNUSU9OX0dFTkVSQVRFX0pBVkFfUFJPWFk9R2VuZXJhdGUgQ2xpZW50Ci0KLSMKLSMgRGlhbG9ncwotIwotQ0hFQ0tCT1hfU0hPV19HRU5FUkFURV9KQVZBX1BST1hZX0RJQUxPRz1TaG93IEdlbmVyYXRlIEphdmEgYmVhbiBQcm94eSBEaWFsb2cKLVRPT0xUSVBfUFBBRF9DSEVDS0JPWF9XU0RMMlBST1hZPVNob3cgdGhlIGRpYWxvZyBmb3IgZ2VuZXJhdGluZyB0aGUgSmF2YSBiZWFuIHByb3h5IGFjdGlvbi4KLQotIwotIyAgICAgICBXZWIgU2VydmljZXMgUHJlZmVyYW5jZSBQYWdlcwotIwotIyBDYXRlZ29yaWVzCi0jCi0KLSMKLSMgUHJlZmVyZW5jZXMgVG9vbHRpcHMKLSMKLQotIwotI1NlcnZlciBSdW50aW1lIFByZWZlcmVuY2VzCi0jCi1UT09MVElQX1NSUEZfQ09NQk9fU0VSVkVSPVRoZSBwcmVmZXJyZWQgc2VydmVyIHR5cGUKLVRPT0xUSVBfU1JQRl9DT01CT19SVU5USU1FPVRoZSBwcmVmZXJyZWQgV2ViIHNlcnZpY2UgcnVudGltZQotVE9PTFRJUF9TUlBGX0NPTUJPX0oyRUU9VGhlIHByZWZlcnJlZCBKMkVFIHZlcnNpb24KLQotIwotIyBHZW5lcmFsIG1lc3NhZ2VzLgotIwotTVNHX0VSUk9SX1RBU0tfRVhDRVBURUQ9SVdBQjAyMzRFIEFuIGludGVybmFsIGVycm9yIG9jY3VycmVkLiBEZXRhaWxzOiB7MH0KLU1TR19FUlJPUl9OT19TRVJWRVJfUlVOVElNRT1ObyBzdWl0YWJsZSBzZXJ2ZXIgY2FuIGJlIGZvdW5kIGZvciB0aGUgezB9IFdlYiBzZXJ2aWNlIHJ1bnRpbWUuIEdvIHRvIFdpbmRvdyA+IFByZWZlcmVuY2VzLiBTZWxlY3QgU2VydmVyID4gSW5zdGFsbGVkIFJ1bnRpbWVzIGFuZCBjb25maWd1cmUgYSBzZXJ2ZXIgcnVudGltZS4KLQotCi0jCi0jIFdpemFyZCBwYWdlIHRhc2sgbGFiZWxzIGFuZCBkZXNjcmlwdGlvbnMKLSMgKHVzZWQgb25seSBmb3IgcHJvZ3Jlc3MgaW5kaWNhdGlvbikuCi0jCi0KLSMKLSMgQ29tbW9uIHdpemFyZCBzdHJpbmdzLgotIwotTEFCRUxfRk9MREVSX05BTUU9Rm9sZGVyOgotTEFCRUxfSlNQX0ZPTERFUl9OQU1FPUpTUCBmb2xkZXI6Ci1MQUJFTF9XRUJfUFJPSkVDVF9OQU1FPVdlYiBwcm9qZWN0OgotTEFCRUxfV0VCU0VSVklDRVRZUEU9JldlYiBzZXJ2aWNlIHR5cGU6Ci1MQUJFTF9XRUJTRVJWSUNFSU1QTD1TZXJ2aWNlIGltcGxlbWVudGF0aW9uOgotTEFCRUxfV0VCU0VSVklDRURFRj1TZXJ2aWNlIGRlZmluaXRpb246Ci1MQUJFTF9KMkVFX1ZFUlNJT049SjJFRSB2ZXJzaW9uOgotTEFCRUxfTkE9Ti9BCi0KLUJVVFRPTl9CUk9XU0U9QiZyb3dzZS4uLgotQlVUVE9OX0JST1dTRV9GSUxFUz1Ccm93c2UgZmlsZXMuLi4KLQotQk9UVE9NVVBfTEFCRUw9Qm90dG9tIHVwCi1UT1BET1dOX0xBQkVMPVRvcCBkb3duCi1DTElFTlRfTEFCRUw9Q2xpZW50Ci1DT01CSU5FRF9UWVBFX0FORF9SVU5USU1FX0xBQkVMPXswfSB7MX0KLQotIwotIyBXaXphcmRzLgotIwotV0laQVJEX1RJVExFX1dTQz1XZWIgU2VydmljZSBDbGllbnQKLQotIwotIyBXZWJTZXJ2aWNlUHJvamVjdFBhZ2UKLSMKLVBBR0VfVElUTEVfV1NfUFJPSkVDVD1XZWIgU2VydmljZXMKLVBBR0VfREVTQ19XU19QUk9KRUNUPVJldmlldyB5b3VyIFdlYiBzZXJ2aWNlIG9wdGlvbnMgYW5kIG1ha2UgYW55IG5lY2Vzc2FyeSBjaGFuZ2VzIGJlZm9yZSBwcm9jZWVkaW5nIHRvIHRoZSBuZXh0IHBhZ2UuCi1CVVRUT05fU1RBUlRfV0VCX1BST0pFQ1Q9JlN0YXJ0IFdlYiBzZXJ2aWNlIGluIFdlYiBwcm9qZWN0Ci0jQlVUVE9OX0RFUExPWV9XRUJfUFJPSkVDVD1EZXBsb3kgV2ViIHNlcnZpY2UgdG8gYSBzZXJ2ZXIgdHlwZQotQlVUVE9OX0lOU1RBTExfU0VSVklDRV9XRUJfUFJPSkVDVD0mSW5zdGFsbCBXZWIgc2VydmljZSBvbiBzZXJ2ZXIKLUJVVFRPTl9JTlNUQUxMX0NMSUVOVF9XRUJfUFJPSkVDVD1JbnN0YWxsIFdlYiBzZXJ2aWNlICZjbGllbnQgb24gc2VydmVyIChtYW5hZ2VkIGNsaWVudHMgb25seSkKLUdST1VQX1NDRU5BUklPX1NFUlZJQ0U9U2VydmljZQotR1JPVVBfU0NFTkFSSU9fQ0xJRU5UPUNsaWVudCBwcm94eQotTEFCRUxfV0VCU0VSVklDRUNMSUVOVFRZUEU9JkNsaWVudCB0eXBlOgotCi1UT09MVElQX1dTV1NDRU5fU0VSVklDRVBST0pFQ1RfTElOSz1DbGljayBvbiB0aGUgbGluayB0byBlZGl0IHNlcnZpY2UgcHJvamVjdCBhbmQgRUFSIHNldHRpbmdzLgotVE9PTFRJUF9XU1dTQ0VOX0NMSUVOVFBST0pFQ1RfTElOSz1DbGljayBvbiB0aGUgbGluayB0byBlZGl0IGNsaWVudCBwcm9qZWN0IGFuZCBFQVIgc2V0dGluZ3MuCi0KLURJQUxPR19USVRJTEVfU0VSVklDRV9JTVBMX1NFTEVDVElPTj1TZWxlY3QgU2VydmljZSBJbXBsZW1lbnRhdGlvbgotRElBTE9HX1RJVElMRV9TRVJWSUNFX0RFRl9TRUxFQ1RJT049U2VsZWN0IFNlcnZpY2UgRGVmaW5pdGlvbgotRElBTE9HX1RJVElMRV9TRVJWSUNFX1BST0pFQ1RfU0VUVElOR1M9U3BlY2lmeSBTZXJ2aWNlIFByb2plY3QgU2V0dGluZ3MKLURJQUxPR19USVRJTEVfQ0xJRU5UX1BST0pFQ1RfU0VUVElOR1M9U3BlY2lmeSBDbGllbnQgUHJvamVjdCBTZXR0aW5ncwotCi0jIEl0ZW1zIGNvbW1vbiB0byBXZWJTZXJ2aWNlUnVudGltZVNlbGVjdGlvblBhZ2UgYW5kIFdlYlNlcnZpY2VDbGllbnRSdW50aW1lU2VsZWN0aW9uUGFnZQotIyBXZWJTZXJ2aWNlUnVudGltZVNlbGVjdGlvblBhZ2UKLUxBQkVMX1NVTU1BUlk9Q29uZmlndXJhdGlvbjoKLUxBQkVMX1NVTU1BUllfTk9fQ0xJRU5UPUNvbmZpZ3VyYXRpb246IE5vIGNsaWVudCBnZW5lcmF0aW9uLgotUEFHRV9USVRMRV9XU19SVU5USU1FX1NFTEVDVElPTj1TZXJ2aWNlIERlcGxveW1lbnQgQ29uZmlndXJhdGlvbgotUEFHRV9ERVNDX1dTX1JVTlRJTUVfU0VMRUNUSU9OPUNob29zZSBmcm9tIHRoZSBsaXN0IG9mIHJ1bnRpbWVzIGFuZCBkZXBsb3ltZW50IHNlcnZlcnMsIG9yIHVzZSB0aGUgZGVmYXVsdCBzZXR0aW5ncy4KLUxBQkVMX1JVTlRJTUVTX0xJU1Q9V2ViIHNlcnZpY2UgcnVudGltZToKLUxBQkVMX1NFUlZFUlNfTElTVD1TZXJ2ZXI6Ci1MQUJFTF9FRElUX0JVVFRPTj1FZGl0Li4uCi1MQUJFTF9TRVJWSUNFX0VBUl9NT0RVTEU9U2VydmljZSBFQVIgbW9kdWxlOgotTEFCRUxfQ0xJRU5UX0VBUl9NT0RVTEU9Q2xpZW50IEVBUiBtb2R1bGU6Ci1MQUJFTF9DTElFTlRfTU9EVUxFPUNsaWVudCBtb2R1bGU6Ci1MQUJFTF9TRVJWSUNFX01PRFVMRT1TZXJ2aWNlIG1vZHVsZToKLUxBQkVMX0NMSUVOVF9QUk9KRUNUPUNsaWVudCBwcm9qZWN0OgotTEFCRUxfU0VSVklDRV9QUk9KRUNUPVNlcnZpY2UgcHJvamVjdDoKLUxBQkVMX0NMSUVOVF9FQVJfUFJPSkVDVD1DbGllbnQgRUFSIHByb2plY3Q6Ci1MQUJFTF9TRVJWSUNFX0VBUl9QUk9KRUNUPVNlcnZpY2UgRUFSIHByb2plY3Q6Ci0KLSMKLSMgQ2xpZW50IGNvbXBvbmVudCB0eXBlIGxhYmVscwotIwotTEFCRUxfQ0xJRU5UX0NPTVBfVFlQRV9XRUI9V2ViCi1MQUJFTF9DTElFTlRfQ09NUF9UWVBFX0VKQj1FSkIKLUxBQkVMX0NMSUVOVF9DT01QX1RZUEVfQVBQX0NMSUVOVD1BcHBsaWNhdGlvbiBDbGllbnQKLUxBQkVMX0NMSUVOVF9DT01QX1RZUEVfQ09OVEFJTkVSTEVTUz1KYXZhCi0KLQotVE9PTFRJUF9QV1JTX1RFWFRfUlVOVElNRT1DbGljayBvbiB0aGUgbGluayB0byBzcGVjaWZ5IHRoZSB3ZWIgc2VydmljZSBydW50aW1lLgotVE9PTFRJUF9QV1JTX1RFWFRfU0VSVkVSPUNsaWNrIG9uIHRoZSBsaW5rIHRvIHNwZWNpZnkgYSBzZXJ2ZXIuCi1UT09MVElQX1BXUlNfSjJFRV9WRVJTSU9OPUoyRUUgdmVyc2lvbiB0byBiZSB1c2VkLgotCi1MQUJFTF9TRUxFQ1RJT05fVklFV19USVRMRT1TZXJ2ZXItU2lkZSBEZXBsb3ltZW50IFNlbGVjdGlvbjoKLUxBQkVMX1NFTEVDVElPTl9WSUVXX1JVTlRJTUU9Q2hvb3NlIFdlYiBzZXJ2aWNlIHJ1bnRpbWUgZmlyc3QKLUxBQkVMX1NFTEVDVElPTl9WSUVXX1NFUlZFUj1DaG9vc2Ugc2VydmVyIGZpcnN0Ci1MQUJFTF9TRUxFQ1RJT05fVklFV19FWFBMT1JFPUV4cGxvcmUgb3B0aW9ucwotCi1MQUJFTF9UUkVFX0VYSVNUSU5HX1NFUlZFUlM9RXhpc3RpbmcgU2VydmVycwotTEFCRUxfVFJFRV9TRVJWRVJfVFlQRVM9U2VydmVyIFR5cGVzCi0KLU1TR19OT19PQkpFQ1RfU0VMRUNUSU9OPVNlbGVjdCBhIHNlcnZpY2UgaW1wbGVtZW50YXRpb24uCi1NU0dfTk9fU0VSVklDRV9TRUxFQ1RJT049U2VsZWN0IGEgc2VydmljZSBkZWZpbml0aW9uLgotTVNHX0lOVkFMSURfU0VSVklDRV9JTVBMPVRoZSBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIHNlbGVjdGVkIGlzIGludmFsaWQuCi1NU0dfSU5WQUxJRF9TRVJWSUNFX0RFRj1UaGUgc2VydmljZSBkZWZpbml0aW9uIHNlbGVjdGVkIGlzIGludmFsaWQuCi1NU0dfSU5WQUxJRF9TUlRfU0VMRUNUSU9OUz17MH0gZG9lcyBub3Qgc3VwcG9ydCB0aGUgezF9IFdlYiBzZXJ2aWNlIHJ1bnRpbWUuIENob29zZSBhIGRpZmZlcmVudCBzZXJ2ZXIgb3IgcnVudGltZSB0byBwcm9jZWVkIHRocm91Z2ggdGhlIFdlYiBzZXJ2aWNlcyB3aXphcmQuCi1NU0dfTk9fUlVOVElNRT1ObyBydW50aW1lIHNwZWNpZmllZCBmb3IgdGhlIHswfSBzY2VuYXJpby4KLU1TR19OT19TRVJWRVI9Tm8gc2VydmVyIHNwZWNpZmllZCBmb3IgdGhlIHswfSBzY2VuYXJpby4KLU1TR19FUlJPUl9TVFVCX09OTFk9ezB9IGhhcyBvbmx5IHN0dWIgcnVudGltZXMgYXNzb2NpYXRlZCB3aXRoIGl0LiBDaG9vc2UgYSBkaWZmZXJlbnQgc2VydmVyIG9yIGNvbmZpZ3VyZSBhIG5vbi1zdHViIHJ1bnRpbWUgaW4gdGhlIHNlcnZlciBwcmVmZXJlbmNlcy4gCi1NU0dfV0FSTl9TVFVCX09OTFk9ezB9IGhhcyBvbmx5IHN0dWIgcnVudGltZXMgYXNzb2NpYXRlZCB3aXRoIGl0IHNvIHRoZSBzZXJ2ZXIgd2lsbCBub3QgYmUgY3JlYXRlZCBvciBzdGFydGVkLgotTVNHX1dBUk5fTk9fU0VSVklDRV9TRVJWRVI9Tm8gc2VydmVyIGhhcyBiZWVuIHNlbGVjdGVkLiBUaGUgV2ViIHNlcnZpY2Ugd2lsbCBub3QgYmUgZGVwbG95ZWQsIGluc3RhbGxlZCwgb3IgcnVuLgotTVNHX1dBUk5fTk9fQ0xJRU5UX1NFUlZFUj1ObyBzZXJ2ZXIgaGFzIGJlZW4gc2VsZWN0ZWQuIFRoZSBXZWIgc2VydmljZSBjbGllbnQgd2lsbCBub3QgYmUgZGVwbG95ZWQsIGluc3RhbGxlZCwgb3IgcnVuLgotCi1NU0dfU0VSVkVSX1RBUkdFVF9NSVNNQVRDSD1UaGUgcHJvamVjdCwgezB9LCBoYXMgYSBzZXJ2ZXIgdGFyZ2V0IHdoaWNoIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIHNlbGVjdGVkIHNlcnZlciB0eXBlCi1NU0dfSjJFRV9NSVNNQVRDSD1UaGUgcHJvamVjdCwgezB9LCBoYXMgYSBkaWZmZXJlbnQgSjJFRSBsZXZlbCBmcm9tIHRoZSBzZWxlY3RlZCBKMkVFIGxldmVsCi1NU0dfU0VSVklDRV9QUk9KRUNUX0VNUFRZPVRoZSBzZXJ2aWNlIHByb2plY3QgezB9IGNhbm5vdCBiZSBlbXB0eS4gU2VsZWN0IGEgc2VydmljZSBwcm9qZWN0IHswfS4KLU1TR19TRVJWSUNFX1BST0pFQ1RfVFlQRV9FTVBUWT1TZWxlY3QgYSBzZXJ2aWNlIHByb2plY3QgdHlwZS4KLU1TR19TRVJWSUNFX0VBUl9FTVBUWT1UaGUgc2VydmljZSBFQVIgezB9IGNhbm5vdCBiZSBlbXB0eS4gU2VsZWN0IGEgc2VydmljZSBFQVIgezB9LgotTVNHX0NMSUVOVF9QUk9KRUNUX0VNUFRZPVRoZSBjbGllbnQgcHJvamVjdCB7MH0gY2Fubm90IGJlIGVtcHR5LiBTZWxlY3QgYSBjbGllbnQgcHJvamVjdCB7MH0uCi1NU0dfQ0xJRU5UX1BST0pFQ1RfVFlQRV9FTVBUWT1TZWxlY3QgYSBjbGllbnQgcHJvamVjdCB0eXBlLgotTVNHX0NMSUVOVF9FQVJfRU1QVFk9VGhlIGNsaWVudCBFQVIgezB9IGNhbm5vdCBiZSBlbXB0eS4gU2VsZWN0IGEgY2xpZW50IEVBUiB7MH0uCi0KLU1TR19JTlZBTElEX0VKQl9QUk9KRUNUPXswfSBpcyBub3QgYW4gRUpCIHByb2plY3QuIENob29zZSBhbiBFSkIgcHJvamVjdCwgb3IgZW50ZXIgYSBuZXcgRUpCIHByb2plY3QgbmFtZS4KLU1TR19JTlZBTElEX1dFQl9QUk9KRUNUPXswfSBpcyBub3QgYSBXZWIgcHJvamVjdC4gQ2hvb3NlIGEgV2ViIHByb2plY3QsIG9yIGVudGVyIGEgbmV3IFdlYiBwcm9qZWN0IG5hbWUuCi1NU0dfSU5WQUxJRF9QUk9KRUNUX1RZUEU9ezB9IGlzIG5vdCBhIHsxfSBwcm9qZWN0LiBDaG9vc2UgYSB7MX0gcHJvamVjdCwgb3IgZW50ZXIgYSBuZXcgcHJvamVjdCBuYW1lLgotTVNHX01PRFVMRT1tb2R1bGUKLU1TR19NT0RVTEVfTkFNRV9BTkRfUFJPSkVDVF9OQU1FX05PVF9USEVfU0FNRT1UaGUgZmxleGlibGUgcHJvamVjdCBwcmVmZXJlbmNlIGlzIG9mZi4gVGhlcmVmb3JlLCBwcm9qZWN0IG5hbWVzIGFuZCBtb2R1bGUgbmFtZXMgbXVzdCBiZSB0aGUgc2FtZSBmb3IgbmV3IG1vZHVsZXMuCi0KLU1TR19TRVJWSUNFX1JVTlRJTUVfRE9FU19OT1RfU1VQUE9SVF9QUk9KRUNUPVRoZSB7MH0gV2ViIHNlcnZpY2UgcnVudGltZSBkb2VzIG5vdCBzdXBwb3J0IHRoZSBzZXJ2aWNlIHByb2plY3QgezF9LgotTVNHX1NFUlZJQ0VfU0VSVkVSX0RPRVNfTk9UX1NVUFBPUlRfUFJPSkVDVD1UaGUgezB9IHNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBzZXJ2aWNlIHByb2plY3QgezF9LiAKLU1TR19TRVJWSUNFX1JVTlRJTUVfRE9FU19OT1RfU1VQUE9SVF9URU1QTEFURT1UaGUgezB9IFdlYiBzZXJ2aWNlIHJ1bnRpbWUgZG9lcyBub3Qgc3VwcG9ydCB0aGUgc2VydmljZSBwcm9qZWN0IHR5cGUgezF9LgotTVNHX1NFUlZJQ0VfU0VSVkVSX0RPRVNfTk9UX1NVUFBPUlRfVEVNUExBVEU9VGhlIHswfSBzZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgc2VydmljZSBwcm9qZWN0IHR5cGUgezF9LgotCi1NU0dfQ0xJRU5UX1JVTlRJTUVfRE9FU19OT1RfU1VQUE9SVF9QUk9KRUNUPVRoZSB7MH0gV2ViIHNlcnZpY2UgcnVudGltZSBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjbGllbnQgcHJvamVjdCB7MX0uCi1NU0dfQ0xJRU5UX1NFUlZFUl9ET0VTX05PVF9TVVBQT1JUX1BST0pFQ1Q9VGhlIHswfSBzZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgY2xpZW50IHByb2plY3QgezF9LgotTVNHX0NMSUVOVF9SVU5USU1FX0RPRVNfTk9UX1NVUFBPUlRfVEVNUExBVEU9VGhlIHswfSBXZWIgc2VydmljZSBydW50aW1lIGRvZXMgbm90IHN1cHBvcnQgdGhlIGNsaWVudCBwcm9qZWN0IHR5cGUgezF9LgotTVNHX0NMSUVOVF9TRVJWRVJfRE9FU19OT1RfU1VQUE9SVF9URU1QTEFURT1UaGUgezB9IHNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjbGllbnQgcHJvamVjdCB0eXBlIHsxfS4KLQotTVNHX1NBTUVfQ0xJRU5UX0FORF9TRVJWSUNFX0VBUlM9WW91ciBzZWxlY3RlZCBzZXJ2aWNlIGFuZCBjbGllbnQgezB9IG1vZHVsZXMgaGF2ZSB0aGUgc2FtZSBuYW1lLiAgUHJvY2VlZGluZyB3aXRoIHRoaXMgY29uZmlndXJhdGlvbiBtYXkgcmVzdWx0IGluIHJ1bnRpbWUgZXJyb3JzLgotTVNHX1NBTUVfQ0xJRU5UX0FORF9TRVJWSUNFX0NPTVBPTkVOVFM9WW91ciBzZWxlY3RlZCBzZXJ2aWNlIGFuZCBjbGllbnQgezB9IG1vZHVsZXMgaGF2ZSB0aGUgc2FtZSBuYW1lLiAgUHJvY2VlZGluZyB3aXRoIHRoaXMgY29uZmlndXJhdGlvbiB3aWxsIHJlc3VsdCBpbiBydW50aW1lIGVycm9ycy4KLU1TR19TQU1FX0NMSUVOVF9BTkRfU0VSVklDRV9QUk9KRUNUUz1Zb3VyIHNlbGVjdGVkIHNlcnZpY2UgYW5kIGNsaWVudCBwcm9qZWN0cyBhcmUgdGhlIHNhbWUuICBQcm9jZWVkaW5nIHdpdGggdGhpcyBjb25maWd1cmF0aW9uIHdpbGwgcmVzdWx0IGluIGVycm9ycy4KLU1TR19XUk9OR19DTElFTlRfUFJPSkVDVF9UWVBFPVRoZSBzZWxlY3RlZCBjbGllbnQgcHJvamVjdCwgezB9LCBpcyBub3QgYSB7MX0gcHJvamVjdC4gUGxlYXNlIHNlbGVjdCBhIHsxfSBwcm9qZWN0IG9yIGVudGVyIGEgbmV3IHByb2plY3QgbmFtZS4KLU1TR19DTElFTlRfU1VCPWNsaWVudAotTVNHX1NFUlZJQ0VfU1VCPXNlcnZpY2UKLU1TR19HRU5FUkFMX1BST0pFQ1RfQU5EX0VBUj1TZWxlY3QgdGhlIHswfSBwcm9qZWN0IGFuZCB0aGUgRUFSIHByb2plY3Qgd2l0aCB3aGljaCB5b3Ugd2FudCBpdCB0byBiZSBhc3NvY2lhdGVkLgotTVNHX0VBUl9QUk9KRUNUX1dJTExfQkVfQ1JFQVRFRD1JZiBhbiBFQVIgb3IgcHJvamVjdCBkb2VzIG5vdCBleGlzdCBvciBpcyBjdXJyZW50bHkgdW5hc3NvY2lhdGVkLCBpdCB3aWxsIGJlIGNyZWF0ZWQgYW5kIFxuYXNzb2NpYXRlZCBhcyByZXF1aXJlZCB3aGVuIHlvdSBjbGljayBOZXh0LgotCi1NU0dfRUFSX1dJTExfQkVfQVNTT0NJQVRFRD1UaGUgc2VsZWN0ZWQgezB9IHByb2plY3Qgd2lsbCBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIEVBUiBwcm9qZWN0LgotTVNHX1BST0pFQ1RfV0lMTF9CRV9DUkVBVEVEPVRoZSB7MH0gcHJvamVjdCB3aWxsIGJlIGNyZWF0ZWQgYW5kIGFzc29jaWF0ZWQgd2l0aCB0aGUgRUFSIHByb2plY3QuCi1NU0dfRUFSX1dJTExfQkVfQ1JFQVRFRD1UaGUgezB9IEVBUiBwcm9qZWN0IHdpbGwgYmUgY3JlYXRlZCBhbmQgYXNzb2NpYXRlZCB3aXRoIHRoZSBwcm9qZWN0LgotTVNHX1BST0pFQ1RfQU5EX0VBUl9DUkVBVEVEPVRoZSB7MH0gcHJvamVjdCBhbmQgRUFSIHByb2plY3Qgd2lsbCBiZSBjcmVhdGVkIGFuZCBhc3NvY2lhdGVkIHdpdGggb25lIGFub3RoZXIuCi0KLU1TR19DTElFTlRfQ0FOTk9UX0FTU09DSUFURT1UaGUgY2xpZW50IHByb2plY3QsIHswfSwgY2Fubm90IGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgRUFSLCB7MX0uIENob29zZSBhbiBFQVIgd2l0aCBhIEoyRUUgbGV2ZWwgb2YgezJ9IG9yIGhpZ2hlci4KLU1TR19TRVJWSUNFX0NBTk5PVF9BU1NPQ0lBVEU9VGhlIHNlcnZpY2UgcHJvamVjdCwgezB9LCBjYW5ub3QgYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBFQVIsIHsxfS4gQ2hvb3NlIGFuIEVBUiB3aXRoIGEgSjJFRSBsZXZlbCBvZiB7Mn0gb3IgaGlnaGVyLgotCi1NU0dfUFJPSkVDVF9NVVNUX0VYSVNUPU5vIHNlcnZlciBjYW4gYmUgZm91bmQgYW5kIHswfSBkb2VzIG5vdCBleGlzdC4gQ2hvb3NlIGFuIGV4aXN0aW5nIHByb2plY3Qgb3IgdXNlIHRoZSBwcmVmZXJlbmNlcyB0byBjb25maWd1cmUgYSBzZXJ2ZXIgcnVudGltZS4gIAotCi0KLSMgV2ViU2VydmljZUNsaWVudFJ1bnRpbWVTZWxlY3Rpb25QYWdlCi1QQUdFX1RJVExFX1dTX0NMSUVOVF9SVU5USU1FX1NFTEVDVElPTj1DbGllbnQgRW52aXJvbm1lbnQgQ29uZmlndXJhdGlvbgotUEFHRV9ERVNDX1dTX0NMSUVOVF9SVU5USU1FX1NFTEVDVElPTj1DaG9vc2UgZnJvbSB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgcnVudGltZXMgYW5kIHNlcnZlcnMgZm9yIHRoZSBjbGllbnQgZW52aXJvbm1lbnQsIG9yIHVzZSB0aGUgZGVmYXVsdCBzZXR0aW5ncy4KLQotTEFCRUxfQ0xJRU5UX1NFTEVDVElPTl9WSUVXX1RJVExFPUNsaWVudC1TaWRlIEVudmlyb25tZW50IFNlbGVjdGlvbjoKLUxBQkVMX0NMSUVOVF9UWVBFPUNsaWVudCBQcm9qZWN0IHR5cGU6Ci1MQUJFTF9TRVJWSUNFX1RZUEU9U2VydmljZSBQcm9qZWN0IHR5cGU6Ci1MQUJFTF9XRUI9V2ViCi1MQUJFTF9FSkI9RUpCCi1MQUJFTF9OT19MQUJFTD0KLQotIwotIyBJdGVtcyBjb21tb24gdG8gV2ViU2VydmljZU1hcHBpbmdzUGFnZSwgV2ViU2VydmljZU1hcHBpbmdzUGFnZSAoY2xpZW50KSwgYW5kIFdlYlNlcnZpY2VTT0FQQmluZGluZ1BhZ2UKLSMKLVBBR0VfTVNHX1ZBTElEQVRJT05fSU5URVJOQUxfRVJST1I9QW4gaW50ZXJuYWwgZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHBhZ2UgdmFsaWRhdGlvbi4gU2VlIGxvZ3MgZm9yIGRldGFpbHMuCi0KLSMKLSMgV2ViU2VydmljZU1hcHBpbmdzUGFnZQotIwotUEFHRV9USVRMRV9XU19YTUwyQkVBTj1XZWIgU2VydmljZSBTa2VsZXRvbiBYTUwgdG8gSmF2YSBNYXBwaW5ncwotUEFHRV9ERVNDX04yUF9NQVBQSU5HUz1EZWZpbmUgY3VzdG9tIG1hcHBpbmcgZm9yIG5hbWVzcGFjZSB0byBwYWNrYWdlLgotTVNHX01BUFBJTkdfRFVQTElDQVRFX0VOVFJJRVM9RHVwbGljYXRlIHswfSBtYXBwZWQgdG8gdGhlIHNhbWUgezF9LgotCi0KLSMKLSMgVGhlIHR3byBJVEVNXyogc3RyaW5ncyBhcmUgZW50cmllcyBpbiBhIGxpc3QgYm94IG9mIG1hcHBpbmdzLgotIyBUaGVyZSBhcmUgdHdvIGZvcm1zLCBvbmUgd2hlbiB0aGUgcGFnZSBpcyBpbiBKYXZhLXRvLVhNTCBtb2RlOgotIyAgIDxqYXZhLWJlYW4tbmFtZT4sIDxlbmNvZGluZy1zdHlsZT4KLSMgYW5kIG9uZSB3aGVuIHRoZSBwYWdlIGlzIGluIFhNTC10by1KYXZhIG1vZGU6Ci0jICAgPHhtbC1uYW1lc3BhY2UtdXJpPjo8eG1sLXNob3J0LW5hbWU+LCA8ZW5jb2Rpbmctc3R5bGU+Ci0jIHdoZXJlOgotIyAgIDxqYXZhLWJlYW4tbmFtZT4gaXMgYSBmdWxseS1xdWFsaWZpZWQgSmF2YSBjbGFzcyBuYW1lCi0jICAgPHhtbC1uYW1lc3BhY2UtdXJpPiBpcyB0aGUgbmFtZXNwYWNlIG9mIGFuIFhNTCB0eXBlCi0jICAgPHhtbC1zaG9ydC1uYW1lPiBpcyB0aGUgWE1MIHR5cGUgbmFtZSB3aXRoaW4gdGhlIG5hbWVzcGFjZQotIyAgIDxlbmNvZGluZy1zdHlsZT4gaXMgdGhlIGVuY29kaW5nIHN0eWxlIChTT0FQIG9yIExpdGVyYWwgWE1MKQotIwotCi0jCi0jIFdlYlNlcnZpY2VQcm94eVBhZ2UKLSMKLUJVVFRPTl9HRU5FUkFURV9QUk9YWT0mR2VuZXJhdGUgYSBwcm94eQotCi0jCi0jIFdlYlNlcnZpY2VTa2VsZXRvbkNvbmZpZ1BhZ2UKLSMKLVBBR0VfREVTQ19XU1NLRUxfQ09ORklHPURlZmluZSBhIHNrZWxldG9uIEphdmEgYmVhbiBhcyBhIFdlYiBzZXJ2aWNlLgotUEFHRV9USVRMRV9XU1NLRUxfQ09ORklHPVdlYiBTZXJ2aWNlIFNrZWxldG9uIEphdmEgQmVhbiBDb25maWd1cmF0aW9uCi1UT09MVElQX1BCU0NfVEVYVF9TS0VMRVRPTl9GT0xERVI9Rm9sZGVyIGZvciBnZW5lcmF0ZWQgSmF2YSBza2VsZXRvbi4KLVRPT0xUSVBfUEJTQ19CVVRUT05fU0tFTEVUT05fRk9MREVSX0JST1dTRT1Ccm93c2UgZm9sZGVycy4KLUxBQkVMX1NLRUxFVE9OX1JPT1RfTkFNRT1Ta2VsZXRvbiBmb2xkZXI6Ci0KLSMKLSMgV2ViU2VydmljZUJlYW5DbGFzc1BhZ2UKLSMKLUxBQkVMX0JFQU5fQ0xBU1NfTkFNRT1CZWFuOgotUEFHRV9NU0dfQkVBTl9DQU5OT1RfQkVfRU1QVFk9UGxlYXNlIHNlbGVjdCBhIEphdmEgYmVhbiBjbGFzcy4KLUJVVFRPTl9CUk9XU0VfQ0xBU1NFUz1Ccm93c2UgY2xhc3Nlcy4uLgotCi0KLSMKLSMgV2ViU2VydmljZVRlc3RQYWdlCi0jCi1QQUdFX1RJVExFX1dTVEVTVD1UZXN0IFdlYiBTZXJ2aWNlCi1QQUdFX0RFU0NfV1NURVNUPVNlbGVjdCBhIHRlc3QgZmFjaWxpdHkKLUNIRUNLQk9YX1RFU1RfV0VCU0VSVklDRT0mVGVzdCB0aGUgV2ViIHNlcnZpY2UKLUNIRUNLQk9YX01PTklUT1JfV0VCU0VSVklDRT0mTW9uaXRvciB0aGUgV2ViIHNlcnZpY2UKLUNIRUNLQk9YX09WRVJXUklURV9GSUxFUz0mT3ZlcndyaXRlIGZpbGVzIHdpdGhvdXQgd2FybmluZwotTVNHX0VSUk9SX1VOQUJMRV9UT19MQVVOQ0hfV1NETF9URVNUPUFuIGVycm9yIG9jY3VycmVkLiBVbmFibGUgdG8gbGF1bmNoIFdTREwgdGVzdCBmYWNpbGl0eS4KLQotIwotIyBXZWJTZXJ2aWNlRXhwbG9yZXJQYWdlCi0jCi1CVVRUT05fTEFVTkNIX1NFUlZJQ0VfVEVTVD1MYXVuY2gKLQotIwotIyBXZWJTZXJ2aWNlQ2xpZW50VGVzdFBhZ2UKLSMKLVBBR0VfVElUTEVfV1NfU0FNUExFPVdlYiBTZXJ2aWNlIENsaWVudCBUZXN0Ci1QQUdFX0RFU0NfV1NfU0FNUExFPURvIHlvdSB3YW50IHRvIHRlc3QgdGhlIGdlbmVyYXRlZCBwcm94eT8KLUJVVFRPTl9URVNUPVRlc3QgdGhlIGdlbmVyYXRlZCBwcm94eQotTEFCRUxfVEVTVF9UWVBFUz1UZXN0IGZhY2lsaXR5Ci1CVVRUT05fUlVOX1RFU1Q9UnVuIHRlc3Qgb24gc2VydmVyCi1MQUJFTF9NRVRIT0RTPU1ldGhvZHMKLUxBQkVMX0pTUF9QUk9KRUNUX05BTUU9SlNQIHByb2plY3Q6Ci1NU0dfRVJST1JfSlRTX1BST1hZX05PVF9DT01QSUxFRD1JV0FCMDM1N0UgVGhlIEdlbmVyYXRlZCBwcm94eSB3YXMgbm90IGZvdW5kLiBXZWJTZXJ2aWNlIHNhbXBsZSBqc3BzIGNhbm5vdCBiZSBnZW5lcmF0ZWQuCi1NU0dfRVJST1JfTUFMRk9STUVEX1VSTD1JV0FCMDM1OEUgVGVzdCBjbGllbnQgVVJMIGlzIG1hbGZvcm1lZC4KLU1TR19FUlJPUl9NT0RVTEVfREVQRU5ERU5DWT1VbmFibGUgdG8gZXN0YWJsaXNoIG1vZHVsZSBkZXBlbmRlbmN5IGZyb20gezB9IHRvIHsxfS4KLQotIwotIyBXZWJTZXJ2aWNlQmVhbk1ldGhvZHNQYWdlCi0jCi1CVVRUT05fU0VMRUNUX0FMTD1TZWxlY3QgQWxsCi1CVVRUT05fREVTRUxFQ1RfQUxMPURlc2VsZWN0IEFsbAotVE9PTFRJUF9QQk1FX0JVVFRPTl9TRUxFQ1RfQUxMPVNlbGVjdCBhbGwgbWV0aG9kcwotVE9PTFRJUF9QQk1FX0JVVFRPTl9ERVNFTEVDVF9BTEw9RGVzZWxlY3QgYWxsIG1ldGhvZHMKLQotIwotIyBXZWJTZXJ2aWNlV1NETFNlbGVjdGlvblBhZ2UKLSMKLVBBR0VfVElUTEVfV1NETF9TRUxFQ1RJT049V2ViIFNlcnZpY2UgV1NETCBGaWxlIFNlbGVjdGlvbgotUEFHRV9ERVNDX1dTRExfU0VMRUNUSU9OPVNlbGVjdCBhIFdTREwgZmlsZS4KLQotIwotIyBXZWJTZXJ2aWNlUHVibGlzaFBhZ2UKLSMKLVBBR0VfVElUTEVfV1NfUFVCTElTSD1XZWIgU2VydmljZSBQdWJsaWNhdGlvbgotUEFHRV9ERVNDX1dTX1BVQkxJU0g9RG8geW91IHdhbnQgdG8gcHVibGlzaCB5b3VyIFdlYiBzZXJ2aWNlPwotUEFHRV9USVRMRV9XU19GSU5EPUZpbmQgYSBXZWIgc2VydmljZQotUEFHRV9ERVNDX1dTX0ZJTkQ9RG8geW91IHdhbnQgdG8gZmluZCBhIFdlYiBzZXJ2aWNlPwotQlVUVE9OX1dTX1BVQkxJU0g9JkxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHRvIHB1Ymxpc2ggdGhpcyBXZWIgc2VydmljZSB0byBhIFVEREkgUmVnaXN0cnkKLUJVVFRPTl9XU19QVUJMSVNIX1BSSVZBVEVfVUREST1MYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciB0byBwdWJsaXNoIHRoaXMgV2ViIHNlcnZpY2UgdG8gdGhlIFVuaXQgVGVzdCBVRERJIFJlZ2lzdHJ5Ci1CVVRUT05fV1NfRklORD1MYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciB0byBmaW5kIGEgV2ViIHNlcnZpY2UgZnJvbSBhIFVEREkgUmVnaXN0cnkKLUJVVFRPTl9XU19GSU5EX1BSSVZBVEVfVUREST1MYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciB0byBmaW5kIGEgV2ViIHNlcnZpY2UgZnJvbSB0aGUgVW5pdCBUZXN0IFVEREkgUmVnaXN0cnkKLUxBQkVMX1BVQkxJQ19VRERJX1JFR0lTVFJJRVM9UHVibGljIFVEREkgUmVnaXN0cnkKLQotIwotIyBFSkIgVUkgc3RyaW5ncwotIwotTEFCRUxfRUpCX0JFQU5fTkFNRT1FSkIgYmVhbgotVEFCTEVfVElUTEVfRUpCX0JFQU5fTkFNRVM9U3RhdGVsZXNzIEVKQiBiZWFucwotVEFCTEVfVElUTEVfRUpCX1BST0pFQ1RfTkFNRT1FSkIgcHJvamVjdAotTEFCRUxfRUFSX1BST0pFQ1RTPUVBUiBwcm9qZWN0cwotVE9PTFRJUF9FQVJfUFJPSkVDVFM9RW50ZXJwcmlzZSBhcHBsaWNhdGlvbiBwcm9qZWN0cy4KLVRPT0xUSVBfVEFCTEVfQkVBTl9OQU1FUz1TZWxlY3QgYW4gRUpCLgotTEFCRUxfU0hPV19BTExfU1RBVEVMRVNTX1NFU1NJT05fRUpCUz08PFNob3cgYWxsIHN0YXRlbGVzcyBzZXNzaW9uIEVKQnM+PgotCi0jCi0jIFRvb2x0aXBzIGZvciBXZWJTZXJ2aWNlV1NETFNlbGVjdGlvblBhZ2UKLSMKLVRPT0xUSVBfUFdXU19QQUdFPQotCi0jCi0jIFRvb2x0aXBzIGZvciBXZWIgU2VydmljZSBXaXphcmQgU2NlbmFyaW8gUGFnZQotIwotQlVUVE9OX1dTV1NDRU5fUFVCTElTSD0mUHVibGlzaCB0aGUgV2ViIHNlcnZpY2UKLVRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9ERVZFTE9QPURldmVsb3AKLVRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9BU1NFTUJMRT1Bc3NlbWJsZQotVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX0RFUExPWT1EZXBsb3kKLVRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9JTlNUQUxMPUluc3RhbGwKLVRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9SVU49U3RhcnQKLVRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9URVNUPVRlc3QKLVRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9TRVJWSUNFPU1vdmUgdGhlIHNsaWRlciB0byBzZXQgdGhlIGxldmVsIG9mIHNlcnZpY2UgZ2VuZXJhdGlvbi4KLVRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9DTElFTlQ9TW92ZSB0aGUgc2xpZGVyIHRvIHNldCB0aGUgbGV2ZWwgb2YgY2xpZW50IGdlbmVyYXRpb24uIFNlcnZpY2UgbXVzdCBiZSBzdGFydGVkIHRvIGVuYWJsZSBjbGllbnQgZ2VuZXJhdGlvbi4KLVRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9DTElFTlRfT05MWT1Nb3ZlIHRoZSBzbGlkZXIgdG8gc2V0IHRoZSBsZXZlbCBvZiBjbGllbnQgZ2VuZXJhdGlvbi4gCi1UT09MVElQX1dTV1NDRU5fVEVYVF9JTVBMPUltcGxlbWVudGF0aW9uIGZvciB0aGUgd2ViIHNlcnZpY2UuCi1UT09MVElQX1dTV1NDRU5fQlVUVE9OX0JST1dTRV9JTVBMPUJyb3dzZSBpbXBsZW1lbnRhdGlvbiBmaWxlcyBmb3Igc3BlY2lmaWVkIHNlcnZpY2UgdHlwZS4KLVRPT0xUSVBfV1NXU0NFTl9CVVRUT05fT1ZFUldSSVRFX0ZJTEVTPUV4aXN0aW5nIGZpbGVzIHdpbGwgYmUgb3ZlcndyaXR0ZW4gd2l0aCBubyB3YXJuaW5nIGR1cmluZyBnZW5lcmF0aW9uLgotCi0jCi0jIFRvb2x0aXBzIGZvciBiZWFucy5XZWJTZXJ2aWNlQmVhbkNsYXNzUGFnZQotIwotVE9PTFRJUF9QQkNMX1BBR0U9Ci1UT09MVElQX1BCQ0xfVEVYVF9CRUFOX0NMQVNTPVNlbGVjdGVkIEphdmEgYmVhbi4KLVRPT0xUSVBfUEJDTF9CVVRUT05fQkVBTl9DTEFTU19CUk9XU0U9QnJvd3NlIGNsYXNzZXMuCi1UT09MVElQX1BCQ0xfQlVUVE9OX0JFQU5fUkVTT1VSQ0VfQlJPV1NFPUJyb3dzZSBKYXZhIGZpbGVzLgotCi0jCi0jIFRvb2x0aXBzIGZvciBiZWFucy5XZWJTZXJ2aWNlVGVzdFBhZ2UKLSMKLVRPT0xUSVBfUFNUUF9DT01CT0JPWF9URVNUPVRlc3QgZmFjaWxpdGllcyBhdmFpbGFibGUgdG8gdGVzdCB0aGUgc2VydmljZS4KLVRPT0xUSVBfUFNUUF9MQVVOQ0hfQlVUVE9OPUxhdW5jaCB0aGUgc2VsZWN0ZWQgdGVzdCBmYWNpbGl0eS4KLQotIwotIyBUb29sdGlwcyBmb3IgV2ViU2VydmljZVJ1bnRpbWVTZWxlY3Rpb25QYWdlCi0jCi1UT09MVElQX1BXUlNfUEFHRT0KLVRPT0xUSVBfUFdSU19MSVNUX1JVTlRJTUVTPVNlbGVjdCBmcm9tIHRoZSBmb2xsb3dpbmcgZGVwbG95bWVudCBydW50aW1lKHMpLgotVE9PTFRJUF9QV1JTX0xJU1RfU0VSVkVSUz1TZWxlY3QgZnJvbSBhcHBsaWNhdGlvbiBzZXJ2ZXIocykuCi1UT09MVElQX1BXUlNfUkFESU9fU0VSVkVSPVNlcnZlciBvcmllbnRlZCBzZWxlY3Rpb24uCi1UT09MVElQX1BXUlNfUkFESU9fUlVOVElNRT1SdW50aW1lIG9yaWVudGVkIHNlbGVjdGlvbi4KLVRPT0xUSVBfUFdSU19SQURJT19FWFBMT1JFPUV4cGxvcmUgY29tYmluYXRpb25zLgotCi0jCi0jIFRvb2x0aXBzIGZvciBXZWJTZXJ2aWNlQ2xpZW50UnVudGltZVNlbGVjdGlvblBhZ2UKLSMKLVRPT0xUSVBfUFdDUl9DT01CT19DTElFTlRfVFlQRT1DbGllbnQgcHJvamVjdCB0eXBlLgotVE9PTFRJUF9QV0NSX0NPTUJPX1NFUlZJQ0VfVFlQRT1TZXJ2aWNlIHByb2plY3QgdHlwZS4KLQotIwotIyBUb29sdGlwcyBmb3IgV2ViU2VydmljZVByb2plY3RQYWdlCi0jCi1UT09MVElQX1BXUFJfQ09NQk9fVFlQRT1XZWIgc2VydmljZSBpbXBsZW1lbnRhdGlvbiB0eXBlLgotVE9PTFRJUF9QV1BSX0dST1VQX1NDRU5BUklPX1NFUlZJQ0U9U2VydmljZSBkZWZhdWx0cyBmb3IgdGhpcyB3aXphcmQgc2NlbmFyaW8uCi1UT09MVElQX1BXUFJfQ0hFQ0tCT1hfR0VORVJBVEVfUFJPWFk9RW5hYmxlL2Rpc2FibGUgcHJveHkgZ2VuZXJhdGlvbiBmb3IgdGhpcyBzY2VuYXJpby4KLVRPT0xUSVBfUFdQUl9DSEVDS0JPWF9TVEFSVF9XRUJfUFJPSkVDVD1TdGFydCBXZWIgc2VydmljZSBpbiBXZWIgcHJvamVjdCBmb3IgdGhpcyBzY2VuYXJpby4KLVRPT0xUSVBfUFdQUl9DSEVDS0JPWF9JTlNUQUxMX1NFUlZJQ0VfV0VCX1BST0pFQ1Q9SW5zdGFsbCB0aGUgV2ViIHNlcnZpY2Ugb24gdGhlIHNlcnZlciBmb3IgdGhpcyBzY2VuYXJpby4KLVRPT0xUSVBfUFdQUl9DSEVDS0JPWF9JTlNUQUxMX0NMSUVOVF9XRUJfUFJPSkVDVD1JbnN0YWxsIHRoZSBXZWIgc2VydmljZSBjbGllbnQgb24gdGhlIHNlcnZlciBmb3IgdGhpcyBzY2VuYXJpbyAobWFuYWdlZCBjbGllbnQgb25seSkuIAotVE9PTFRJUF9QV1BSX0NIRUNLQk9YX0xBVU5DSF9XUz1MYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciB0byBwdWJsaXNoIHRoZSBXZWIgc2VydmljZSBpbiB0aGlzIHNjZW5hcmlvIHRvIGEgVURESSBSZWdpc3RyeS4KLVRPT0xUSVBfUFdQUl9DSEVDS0JPWF9URVNUX1NFUlZJQ0U9U2VsZWN0IHRoaXMgdG8gZXhwbG9yZSB0aGUgV2ViIHNlcnZpY2UgY3JlYXRlZC4KLVRPT0xUSVBfUFdQUl9DSEVDS0JPWF9NT05JVE9SX1NFUlZJQ0U9U2VsZWN0IHRoaXMgdG8gbW9uaXRvciB0aGUgU09BUCB0cmFmZmljIG9mIHRoaXMgV2ViIHNlcnZpY2UuCi1UT09MVElQX1BXUFJfR1JPVVBfU0NFTkFSSU9fQ0xJRU5UPUNsaWVudCBwcm94eSBkZWZhdWx0cyBmb3IgdGhpcyB3aXphcmQgc2NlbmFyaW8uCi1UT09MVElQX1BXUFJfQ09NQk9fQ0xJRU5UVFlQRT1DbGllbnQgcHJveHkgc2VsZWN0aW9uIHR5cGUuCi0KLSMKLSMgVG9vbHRpcHMgZm9yIFdlYlNlcnZpY2VQdWJsaXNoUGFnZQotIwotVE9PTFRJUF9QV1BCX1BBR0U9Ci1UT09MVElQX1BXUEJfQ0hFQ0tCT1hfV1NfTEFVTkNIPVB1Ymxpc2ggdGhlIFdlYiBzZXJ2aWNlLgotCi0jCi0jIFdTSUwgcHJveHkKLSMKLVBBR0VfV1NJTF9JTVBPUlQ9V1NJTCBJbXBvcnQgUGFnZQotVElUTEVfV1NJTF9JTVBPUlQ9V1NJTCBJbXBvcnQKLURFU0NfV1NJTF9JTVBPUlQ9SW1wb3J0IFdTREwgcmVmZXJlbmNlcyB0byBhIFdTSUwgZG9jdW1lbnQKLVBBR0VfVElUTEVfV1NfU0VMRUNUSU9OPVdlYiBTZXJ2aWNlIFNlbGVjdGlvbiBQYWdlCi1QQUdFX0RFU0NfV1NfU0VMRUNUSU9OPUVudGVyIGEgd2ViIHNlcnZpY2UgVVJJLgotCi1QQUdFX01TR19MT0FESU5HX1dFQl9TRVJWSUNFX1VSST1Mb2FkaW5nIFdlYiBzZXJ2aWNlIFVSSS4uLgotUEFHRV9NU0dfSU5WQUxJRF9XRUJfU0VSVklDRV9VUkk9SW52YWxpZCBXZWIgc2VydmljZSBVUkkuICBFbnRlciBhIFVSSSB0byBhIFdTREwsIFdTSUwgb3IgSFRNTCBkb2N1bWVudC4KLVBBR0VfTVNHX05PX1NVQ0hfRklMRT1GaWxlICJ7MH0iIGRvZXMgbm90IGV4aXN0LgotUEFHRV9NU0dfU0VMRUNUSU9OX01VU1RfQkVfV1NETD1TZWxlY3Rpb24gbXVzdCBiZSBXU0RMLgotUEFHRV9NU0dfSU5WQUxJRF9XU0lMX0ZJTEVfTkFNRT1JbnZhbGlkIFdTSUwgZmlsZSBuYW1lLiAgV1NJTCBmaWxlIG5hbWUgbXVzdCBlbmQgd2l0aCAud3NpbAotCi1NU0dfRVJST1JfVVJJX05PVF9SRVNPTFZBQkxFPUlXQUIwNDY5RSAiezB9IiBpcyBub3QgcmVzb2x2YWJsZS4KLU1TR19FUlJPUl9XU0RMX0hBU19OT19TRVJWSUNFX0VMRU1FTlQ9SVdBQjA1NTFFIFdTREwgZmlsZSBhdCB7MH0gaGFzIG5vIHNlcnZpY2UgZWxlbWVudC4KLQotTEFCRUxfV1NJTF9VUkk9V1NJTCBVUkk6Ci1MQUJFTF9CUk9XU0U9QnJvd3NlCi1MQUJFTF9XU0RMPVdTREw6Ci1MQUJFTF9XU0RMX1VSST1XU0RMIFVSSQotTEFCRUxfSU1QT1JUPUltcG9ydC4uLgotTEFCRUxfQUREPUFkZAotTEFCRUxfUkVNT1ZFPVJlbW92ZQotTEFCRUxfV1NfU0VMRUNUSU9OPUVudGVyIGEgVVJJIHRvIGEgV1NETCwgV1NJTCBvciBIVE1MIGRvY3VtZW50OgotTEFCRUxfU0VMRUNUX1dTREw9U2VsZWN0IGEgV1NETAotTEFCRUxfVkFMSURBVEVfTUVTU0FHRVM9V1NETCB2YWxpZGF0aW9uIG1lc3NhZ2VzOgotCi1UT09MVElQX1dTSUxfSU1QT1JUX1BBR0U9VGhpcyBwYWdlIGFsbG93cyB5b3UgdG8gYWRkIFdTREwgcmVmZXJlbmNlcyB0byBhIFdTSUwgZG9jdW1lbnQuCi1UT09MVElQX1dTSUxfVEVYVF9XU0lMPUVudGVyIHRoZSBsb2NhdGlvbiBvZiBhIG5ldyBvciBleGlzdGluZyBXU0lMIGRvY3VtZW50LgotVE9PTFRJUF9XU0lMX0JVVFRPTl9CUk9XU0VfV1NJTD1Ccm93c2UgZm9yIGEgV1NJTCBkb2N1bWVudC4KLVRPT0xUSVBfV1NJTF9UQUJMRV9XU0RMPUVudGVyIHRoZSBVUklzIG9mIHRoZSBXU0RMcyB0aGF0IGFyZSBnb2luZyB0byBiZSBhZGRlZCBhcyBzZXJ2aWNlIHJlZmVyZW5jZXMuCi1UT09MVElQX1BDT05fUEFHRT1TZWxlY3QgYSB3ZWIgc2VydmljZSBmb3IgY29uc3VtcHRpb24uCi1UT09MVElQX1BDT05fVEVYVF9XUz1FbnRlciBhIFVSSSB0byBhIFdTREwsIFdTSUwgb3IgSFRNTCBkb2N1bWVudC4KLVRPT0xUSVBfUENPTl9CVVRUT05fQlJPV1NFX1dTPUJyb3dzZSBmb3IgYSB3ZWIgc2VydmljZSByZXNvdXJjZS4KLVRPT0xUSVBfVkFMSURBVEVfVEVYVF9NRVNTQUdFPU1lc3NhZ2VzIGZyb20gV1NETCB2YWxpZGF0aW9uLgotVE9PTFRJUF9UQUJMRV9WQUxJREFURV9NRVNTQUdFPVVzZSB0aGUgV2ViIFNlcnZpY2UgUHJvZmlsZSBDb21wbGlhbmNlIGFuZCBWYWxpZGF0aW9uIHByZWZlcmVuY2UgdG8gZW5hYmxlIG9yIGRpc2FibGUgV1NETCB2YWxpZGF0aW9uLgotCi0jCi0jIFRhYmxlIGNvbHVtbiBoZWFkaW5nIGZvciBWYWxpZGF0aW9uTWVzc2FnZVZpZXdlcldpZGdldAotIwotVEFCTEVfQ09MVU1OX1ZBTElEQVRJT05fU0VWRVJJVFk9U2V2ZXJpdHkKLVRBQkxFX0NPTFVNTl9WQUxJREFUSU9OX0xJTkU9TGluZQotVEFCTEVfQ09MVU1OX1ZBTElEQVRJT05fQ09MVU1OPUNvbHVtbgotVEFCTEVfQ09MVU1OX1ZBTElEQVRJT05fTUVTU0FHRT1NZXNzYWdlCi0jCi0jIFRvb2x0aXBzIGZvciBjbGllbnQuV2ViU2VydmljZUNsaWVuVGVzdFBhZ2UKLSMKLVRPT0xUSVBfUFdTTV9QQUdFPQotVE9PTFRJUF9QV1NNX0NIRUNLQk9YX1RFU1Q9RW5hYmxlL2Rpc2FibGUgVGVzdC4KLVRPT0xUSVBfUFdTTV9DT01CT0JPWF9URVNUPVNlbGVjdCB0aGUgdGVzdCB0eXBlLgotVE9PTFRJUF9QV1NNX0NIRUNLQk9YX0xBVU5DSD1SdW4gdGVzdCBvbiBhIHNlcnZlci4KLVRPT0xUSVBfUFdTTV9URVhUX0pTUF9GT0xERVI9RGVzdGluYXRpb24gZm9sZGVyIG9mIGdlbmVyYXRlZCBzYW1wbGUgZmlsZXMuCi1UT09MVElQX1BXU01fQlVUVE9OX0pTUF9GT0xERVJfQlJPV1NFPUJyb3dzZSBmb2xkZXJzLgotVE9PTFRJUF9QV1NNX0JVVFRPTl9TRUxFQ1RfQUxMPVNlbGVjdCBhbGwgbWV0aG9kcy4KLVRPT0xUSVBfUFdTTV9CVVRUT05fREVTRUxFQ1RfQUxMPURlc2VsZWN0IGFsbCBtZXRob2RzLgotVE9PTFRJUF9QV1NNX0NPTUJPX1BST0pFQ1Q9V2ViIHByb2plY3QgZm9yIGdlbmVyYXRlZCBzYW1wbGUuCi1UT09MVElQX1BXU01fVEVYVF9TQU1QTEVfRk9MREVSPURlc3RpbmF0aW9uIGZvbGRlciBvZiBnZW5lcmF0ZWQgc2FtcGxlIGZpbGVzLgotVE9PTFRJUF9QV1NNX1RSRUVfTUVUSE9EUz1NZXRob2RzIHRvIGdlbmVyYXRlIGludG8gdGhlIHNhbXBsZS4KLVRPT0xUSVBfUFdTTV9FQVJfUFJPSkVDVD1FQVIgcHJvamVjdCBmb3IgdGhlIGdlbmVyYXRlZCBzYW1wbGUuCi0KLSMKLSMgSFRUUCBCYXNpYyBBdXRoCi0jCi1ESUFMT0dfVElUTEVfSFRUUF9CQVNJQ19BVVRIPUhUVFAgQmFzaWMgQXV0aGVudGljYXRpb24KLUxBQkVMX1VSTD1VUkw6Ci1MQUJFTF9IVFRQX0JBU0lDX0FVVEhfVVNFUk5BTUU9VXNlciBuYW1lOgotTEFCRUxfSFRUUF9CQVNJQ19BVVRIX1BBU1NXT1JEPVBhc3N3b3JkOgotCi1UT09MVElQX0hUVFBfQkFTSUNfQVVUSF9VU0VSTkFNRT1FbnRlciB5b3VyIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb24gdXNlciBuYW1lLgotVE9PTFRJUF9IVFRQX0JBU0lDX0FVVEhfUEFTU1dPUkQ9RW50ZXIgeW91ciBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uIHBhc3N3b3JkLgotCi0jCi0jIEdlbmVyYXRlIEhhbmRsZXIgU2tlbGV0b24KLSMKLU1TR19FUlJPUl9HRU5FUkFURV9IQU5ETEVSX1NLRUxFVE9OPUlXQUIwMzU5RSBFcnJvciBpbiBnZW5lcmF0aW5nIGhhbmRsZXIgc2tlbGV0b24uCi1NU0dfRVJST1JfV1JJVEVfRklMRT1JV0FCMDM2MEUgRXJyb3IgaW4gd3JpdGluZyBmaWxlIHswfS4KLQotIwotIyBIYW5kbGVycyBDb25maWd1cmF0aW9uIHdpemFyZCBwYWdlCi0jCi1MQUJFTF9IQU5ETEVSU19DT05GSUc9SGFuZGxlciBjb25maWd1cmF0aW9uCi1MQUJFTF9CVVRUT05fQUREPUFkZAotTEFCRUxfQlVUVE9OX1JFTU9WRT1SZW1vdmUKLUxBQkVMX0JVVFRPTl9NT1ZFX1VQPU1vdmUgdXAKLUxBQkVMX0JVVFRPTl9NT1ZFX0RPV049TW92ZSBkb3duCi1MQUJFTF9CVVRUT05fR0VOX1NLRUxFVE9OPUdlbmVyYXRlIHNrZWxldG9uIGNsYXNzZXMgZm9yIG5ldyBoYW5kbGVycwotTEFCRUxfQ09NQk9fU09VUkNFX0xPQz1PdXRwdXQgZm9sZGVyOgotTEFCRUxfQ09NQk9fV1NfQ0xJRU5UX1JFRj1DbGllbnQgU2VydmljZSBSZWZlcmVuY2VzOgotTEFCRUxfQ09NQk9fV1NfU0VSVklDRV9ERVNDPVNlcnZpY2UgRGVzY3JpcHRpb25zOgotTVNHX1RFWFRfTlVNX09GX1NFUlZJQ0VTPVlvdSBoYXZlIHNlbGVjdGVkIHswfSBzZXJ2aWNlcy4KLU1TR19URVhUX05VTV9PRl9DTElFTlRTPVlvdSBoYXZlIHNlbGVjdGVkIHswfSBjbGllbnQgc2VydmljZXMuCi0gCi1MQUJFTF9IQU5ETEVSX05BTUU9TmFtZQotTEFCTEVfSEFORExFUl9DTEFTUz1DbGFzcyBuYW1lCi1MQUJFTF9IQU5ETEVSX1BPUlQ9UG9ydCBuYW1lCi0gCi1ESUFMT0dfVElUTEVfV1NfQUREX0hBTkRMRVI9QWRkIE5ldyBIYW5kbGVyCi1MQUJFTF9URVhUX0hBTkRMRVJfTkFNRT1OYW1lOgotTEFCRUxfVEVYVF9IQU5ETEVSX0NMQVNTPUNsYXNzIG5hbWU6Ci1MQUJFTF9URVhUX0hBTkRMRVJfUE9SVD1Qb3J0IG5hbWU6Ci0gCi1QQUdFX1RJVExFX1NFUlZJQ0VfSERMUl9DT05GSUc9U2VydmljZSBIYW5kbGVycyBDb25maWd1cmF0aW9uCi1QQUdFX0RFU0NfU0VSVklDRV9IRExSX0NPTkZJRz1Db25maWd1cmUgc2VydmljZS1zaWRlIGhhbmRsZXJzCi1QQUdFX1RJVExFX0NMSUVOVF9IRExSX0NPTkZJRz1DbGllbnQgSGFuZGxlcnMgQ29uZmlndXJhdGlvbgotUEFHRV9ERVNDX0NMSUVOVF9IRExSX0NPTkZJRz1Db25maWd1cmUgY2xpZW50LXNpZGUgaGFuZGxlcnMKLVBBR0VfREVTQ19NVUxUSVBMRV9TRVJWSUNFU19DT05GSUc9QWRkIGhhbmRsZXJzIHRvIG11bHRpcGxlIFdlYiBzZXJ2aWNlcy4KLVBBR0VfREVTQ19NVUxUSVBMRV9DTElFTlRTX0NPTkZJRz1BZGQgaGFuZGxlcnMgdG8gbXVsdGlwbGUgV2ViIHNlcnZpY2UgY2xpZW50cy4KLSAKLVRPT0xUSVBfRURJVF9XU19IQU5ETEVSUz1Db25maWd1cmUgV2ViIFNlcnZpY2UgSGFuZGxlcnMKLVRPT0xUSVBfQlVUVE9OX0dFTl9TS0VMRVRPTj1TZWxlY3QgdG8gZ2VuZXJhdGUgc2tlbGV0b24gY2xhc3NlcyBmb3IgbmV3IGhhbmRsZXJzLgotVE9PTFRJUF9DT01CT19TT1VSQ0VfTE9DPVNlbGVjdCB0aGUgb3V0cHV0IGxvY2F0aW9uIGZvciBmaWxlIGdlbmVyYXRpb24uCi1UT09MVElQX1RFWFRfSEFORExFUl9OQU1FPUhhbmRsZXIgbmFtZQotVE9PTFRJUF9URVhUX0hBTkRMRVJfQ0xBU1M9SGFuZGxlciBjbGFzcyBuYW1lCi1UT09MVElQX1RFWFRfSEFORExFUl9QT1JUPUhhbmRsZXIgcG9ydCBjb21wb25lbnQgbmFtZQotVE9PTFRJUF9XU19DTElFTlRfUkVGPVNlbGVjdCBhIGNsaWVudCBzZXJ2aWNlLXJlZmVyZW5jZSB0byBzaG93IGl0cyBoYW5kbGVycy4KLVRPT0xUSVBfV1NfU0VSVklDRV9ERVNDPVNlbGVjdCBhIHNlcnZpY2UgZGVzY3JpcHRpb24gdG8gc2hvdyBpdHMgaGFuZGxlcnMuCi0gCi0jCi0jIENsaWVudEhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQKLSMKLU1TR19FUlJPUl9XRUJfU0VSVklDRV9DTElFTlRTX05PVF9GT1VORD1ObyBXZWIgc2VydmljZSBjbGllbnRzIHdlcmUgZm91bmQuIENyZWF0ZSBhIFdlYiBzZXJ2aWNlIGNsaWVudCBiZWZvcmUgY29uZmlndXJpbmcgV2ViIHNlcnZpY2UgY2xpZW50IGhhbmRsZXJzLgotIAotIwotIyBTZXJ2aWNlSGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZAotIwotTVNHX0VSUk9SX1dFQl9TRVJWSUNFU19OT1RfRk9VTkQ9Tm8gV2ViIHNlcnZpY2VzIHdlcmUgZm91bmQuICBDcmVhdGUgYSBXZWIgc2VydmljZSBiZWZvcmUgY29uZmlndXJpbmcgV2ViIHNlcnZpY2UgaGFuZGxlcnMuCi1NU0dfRVJST1JfV1NERF9OT1RfRk9VTkQ9VW5hYmxlIHRvIGxhdW5jaCBoYW5kbGVyIHdpemFyZC4gIE5vIGRlcGxveW1lbnQgZGVzY3JpcHRvciB3YXMgZm91bmQgZm9yIHRoaXMgV2ViIHNlcnZpY2UuCi1NU0dfRVJST1JfSU5WQUxJRF9NVUxUSVBMRV9TRVJWSUNFX1NFTEVDVD1JbnZhbGlkIG11bHRpcGxlIHNlbGVjdGlvbiBvZiBTZXJ2aWNlcy4gIEVuc3VyZSBhbGwgc2VsZWN0aW9ucyBhcmUgU2VydmljZXMuIwotCi0jIE9wZW5KYXZhRWRpdG9yQ29tbWFuZAotIwotTVNHX0VSUk9SX1VOQUJMRV9UT19PUEVOX0pBVkFfRURJVE9SPUlXQUIwMDI5RSBVbmFibGUgdG8gb3BlbiBjbGFzcyB7MH0gZnJvbSBwcm9qZWN0IHsxfSBpbiB0aGUgSmF2YSBlZGl0b3IuCi0KLSMKLSMgQ2hlY2tJZlNlcnZpY2VQcm9qZWN0Ci0jCi1NU0dfV0FSTl9JU19TRVJWSUNFX1BST0pFQ1Q9VGhlIHNlbGVjdGVkIGNsaWVudCBwcm9qZWN0LCB7MH0sIGNvbnRhaW5zIHRoZSBXZWIgc2VydmljZS4gUHJvY2VlZGluZyB3aXRoIHRoaXMgY29uZmlndXJhdGlvbiBtYXkgcmVzdWx0IGluIHJ1bnRpbWUgZXJyb3JzIHdoZW4gaW52b2tpbmcgdGhlIFdlYiBzZXJ2aWNlLiBXb3VsZCB5b3UgbGlrZSB0byBwcm9jZWVkPwotTVNHX1VTRVJfQUJPUlRFRD1Vc2VyIHByZXNzZWQgY2FuY2VsIGluIHdhcm5pbmcgZGlhbG9nIHdoaWNoIHdhcm5lZCBhYm91dCB0aGUgc2VsZWN0ZWQgY2xpZW50IHByb2plY3QgYmVpbmcgdGhlIHNlcnZpY2UgcHJvamVjdC4KLQotIwotIyBNaXNzaW5nIHRoaXJkIHBhcnR5IGZpbGUgZXJyb3IgbWVzc2FnZQotIwotTVNHX01JU1NJTkdfVEhJUkRfUEFSVFlfRklMRVM9TWlzc2luZyB0aGlyZCBwYXJ0eSBmaWxlcy4gIFJlZmVyIHRvIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvd3N0L2NvbXBvbmVudHMvd3MvZG93bmxvYWRfaW5zdHJ1Y3Rpb25zX2Zvcl9qYXJzLmh0bWwKLQotIwotIyBXU0RMU2VsZWN0aW9uT3V0cHV0Q29tbWFuZAotIwotTVNHX1dBUk5JTkdfTk9fU0VSVklDRV9FTEVNRU5UPVRoZSBXU0RMIGZpbGUgZG9lcyBub3QgY29udGFpbiBhIFNlcnZpY2UgZWxlbWVudC4gIFRoZXJlZm9yZSBhIHNlcnZpY2UgaW50ZXJmYWNlIGFuZCBKYXZhIHByb3h5IHdpbGwgbm90IGJlIGdlbmVyYXRlZCBhbmQgYXMgYSByZXN1bHQsIGEgSmF2YSB0ZXN0IGNsaWVudCB3aWxsIG5vdCBiZSBsYXVuY2hlZC4gIENsaWNrIE9LIHRvIHByb2NlZWQsIG9yIGNsaWNrIENhbmNlbCB0byBzZWxlY3QgYW5vdGhlciBXU0RMIGZpbGUuICBBbHRlcm5hdGVseSwgZXhpdCB0aGUgd2l6YXJkIGFuZCB1c2UgdGhlIFdTREwgZWRpdG9yIHRvIGNyZWF0ZSBhIFNlcnZpY2UgV1NETCBkb2N1bWVudC4KLQotIwotIyBDaGVja1dTRExWYWxpZGF0aW9uQ29tbWFuZAotIwotU1RJTExfVkFMSURBVElOR19XU0RMPVdpemFyZCBXU0RMIHZhbGlkYXRpb24gaW4gUHJvZ3Jlc3MuICBcbi0gQ2xpY2sgQ2FuY2VsIHRvIGNhbmNlbCB0aGUgY3VycmVudCBXU0RMIHZhbGlkYXRpb24gYW5kIGNvbnRpbnVlLiBcbi0gQ2xpY2sgQ2FuY2VsIGFuZCBVcGRhdGUgdG8gdXBkYXRlIHRoZSBwcmVmZXJlbmNlIHRvIGFsd2F5cyBjYW5jZWwgaW5jb21wbGV0ZSBXU0RMIHZhbGlkYXRpb24gd2hpbGUgdHJhdmVyc2luZyB0aGUgd2l6YXJkLiAgXG4tIENsaWNrIFdhaXQgdG8gd2FpdCBmb3IgV1NETCB2YWxpZGF0aW9uIHRvIGNvbXBsZXRlLgotQ0FOQ0VMX1ZBTElEQVRJT05fTEFCRUw9Q2FuY2VsCi1DQU5DRUxfVkFMSURBVElPTl9ERVNDUklQVElPTj1DYW5jZWwgdGhlIGN1cnJlbnQgV1NETCB2YWxpZGF0aW9uIGFuZCBjb250aW51ZQotQ0FOQ0VMX0FMTF9WQUxJREFUSU9OX0xBQkVMPUNhbmNlbCBhbmQgVXBkYXRlCi1DQU5DRUxfQUxMX1ZBTElEQVRJT05fREVTQ1JJUFRJT049VXBkYXRlIHRoZSBwcmVmZXJlbmNlIHRvIGFsd2F5cyBjYW5jZWwgaW5jb21wbGV0ZSBXU0RMIHZhbGlkYXRpb24gd2hpbGUgdHJhdmVyc2luZyB0aGUgd2l6YXJkLgotV0FJVF9WQUxJREFUSU9OX0xBQkVMPVdhaXQKLVdBSVRfVkFMSURBVElPTl9ERVNDUklQVElPTj1XYWl0IGZvciBXU0RMIHZhbGlkYXRpb24gdG8gY29tcGxldGUKLVRBU0tfTEFCRUxfQ0hFQ0tfV1NETF9WQUxJREFUSU9OPUNoZWNrIGZvciBXU0RMIHZhbGlkYXRpb24KLVRBU0tfREVTQ19DSEVDS19XU0RMX1ZBTElEQVRJT049Q2hlY2sgaWYgV1NETCB2YWxpZGF0aW9uIGhhcyBjb21wbGV0ZWQKLQotIwotIyBXU0RMVmFsaWRhdGlvbiBtZXNzYWdlcwotIwotTUVTU0FHRV9WQUxJREFURV9OT19XU0RMPVdpemFyZCBXU0RMIHZhbGlkYXRpb24gaXMgZGlzYWJsZWQuCi1NRVNTQUdFX1ZBTElEQVRFX1JFTU9URV9XU0RMPVdpemFyZCBXU0RMIHZhbGlkYXRpb24gaXMgb25seSBlbmFibGVkIGZvciByZW1vdGUgZmlsZXMuCi1NRVNTQUdFX1ZBTElEQVRFX0FMTF9XU0RMPVdpemFyZCBXU0RMIHZhbGlkYXRpb24gaXMgZW5hYmxlZC4KLU1FU1NBR0VfVkFMSURBVEVfSU5fUFJPR1JFU1M9V1NETCB2YWxpZGF0aW9uIGluIHByb2dyZXNzIC4uLgotRVJST1JfTUVTU0FHRVNfSU5fVkFMSURBVElPTj1UaGUgV1NETCBmaWxlIGNvbnRhaW5zIHZhbGlkYXRpb24gZXJyb3IocykuCi1XQVJOSU5HX01FU1NBR0VTX0lOX1ZBTElEQVRJT049VGhlIFdTREwgZmlsZSBjb250YWlucyB2YWxpZGF0aW9uIHdhcm5pbmcocykuCi1XQVJOSU5HX0lGX0NPTlRJTlVFPUNvbnRpbnVpbmcgd2l0aCB0aGUgd2l6YXJkIG1heSByZXN1bHQgaW4gZ2VuZXJhdGlvbiBvciBydW50aW1lIHByb2JsZW0uCi1WQUxJREFUSU9OX0NPTVBMRVRFRD1XU0RMIHZhbGlkYXRpb24gY29tcGxldGVzIHdpdGggbm8gd2FybmluZyBvciBlcnJvci4KLVRPT0xUSVBfVkFMSURBVEVfVEVYVF9NRVNTQUdFX1NVTU1BUlk9V1NETCB2YWxpZGF0aW9uIHByZWZlcmVuY2UgY2FuIGJlIGNoYW5nZWQgdXNpbmcgdGhlIFdlYiBTZXJ2aWNlcyBQcm9maWxlIENvbXBsaWFuY2UgYW5kIFZhbGlkYXRpb24gcHJlZmVyZW5jZS4KLQotTEFCRUxfQlVUVE9OX1NUT1BfV1NETF9WQUxJREFUSU9OPVN0b3AgVmFsaWRhdGlvbgotVE9PTFRJUF9TVE9QX1ZBTElEQVRJT05fQlVUVE9OPVN0b3BzIHRoZSBjdXJyZW50IFdTREwgdmFsaWRhdGlvbiBvcGVyYXRpb24uCi0KLQotIwotIyBTdGFydCBzZXJ2ZXIgcGFnZQotIwotUEFHRV9USVRMRV9XU19TVEFSVF9TRVJWRVI9U3RhcnQgU2VydmVyCi1QQUdFX0RFU0NfV1NfU1RBUlRfU0VSVkVSPVN0YXJ0IHRoZSBzZXJ2ZXIgZnJvbSB0aGlzIHBhZ2UuCi1MQUJFTF9TVEFSVF9TRVJWRVJfVEVYVDE9SW4gb3JkZXIgdG8gcHJvY2VlZCB0aGUgc2VydmVyICJ7MH0iIG11c3QgYmUgc3RhcnRlZC4KLUxBQkVMX1NUQVJUX1NFUlZFUl9URVhUMj1PbmNlIHRoZSBzZXJ2ZXIgaXMgc3RhcnRlZCB0aGUgIm5leHQiIGJ1dHRvbiB3aWxsIGJlIGVuYWJsZWQuCi1MQUJFTF9TVEFSVF9TRVJWRVJfVEVYVDM9VGhlICJiYWNrIiBidXR0b24gY2FuIGJlIHVzZWQgd2hpbGUgdGhlIHNlcnZlciBpcyBzdGFydGluZyB0bwotTEFCRUxfU1RBUlRfU0VSVkVSX1RFWFQ0PWNoYW5nZSBhbnkgcHJldmlvdXMgc2V0dGluZ3MgaW4gdGhpcyB3aXphcmQuCi1MQUJFTF9TVEFSVF9TRVJWRVJfQlVUVE9OPSZTdGFydCBzZXJ2ZXIKLVRPT0xUSVBfU1RBUlRfU0VSVkVSX0JVVFRPTj1TdGFydCB0aGUgc2VydmVyCi1URVhUX1NFUlZFUl9TVEFUVVM9Q3VycmVudGx5IHRoZSBzZXJ2ZXIgaXMgezB9LgotVEVYVF9TRVJWRVJfTVNHPVNlcnZlciB7MH0KLVRFWFRfU0VSVkVSX1NUQVJURUQ9c3RhcnRlZAotVEVYVF9TRVJWRVJfU1RBUlRJTkc9c3RhcnRpbmcKLVRFWFRfU0VSVkVSX1NUT1BQRUQ9c3RvcHBlZAotCi0jCi0jIEFudCB0YXNrIExpc3Qgb3B0aW9ucwotIwotCi0jIE5vdGUgdG8gdHJhbnNsYXRpb24gZG8gbm90IHRyYW5zbGF0ZSBrZXl3b3JkIFJ1bnRpbWVJZAotTVNHX0lORk9fQU5UX1JVTlRJTUVfSEVBRElORz1XZWIgU2VydmljZSBSdW50aW1lIElEcyAoUnVudGltZUlkKQotTVNHX0lORk9fQU5UX1NFUlZFUl9SVU5USU1FPVNlcnZlciBydW50aW1lOiB7MH0KLU1TR19JTkZPX0FOVF9DTElFTlRfUlVOVElNRT1DbGllbnQgcnVudGltZTogezB9IAotCi0jIE5vdGUgdG8gdHJhbnNsYXRpb24gZG8gbm90IHRyYW5zbGF0ZSBrZXl3b3JkIFNlcnZlcklkCi1NU0dfSU5GT19BTlRfU0VSVkVSX0hFQURJTkc9U2VydmVyIElEcyAoU2VydmVySWQpCi1NU0dfSU5GT19BTlRfU0VSVkVSPVNlcnZlcjogezB9Ci0KLU1TR19JTkZPX1dTRExfT1BFUkFUSU9OX1RJTUVEX09VVD1Db3VsZCBub3QgcmV0cmlldmUgdGhlIFdTREwgZmlsZSB7MH0uICBEbyB5b3Ugd2FudCB0byBjb250aW51ZSB0byB3YWl0IGZvciB0aGlzIGZpbGU/CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9Db25zdW1wdGlvblVJTWVzc2FnZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTU0NTYyYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzk1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIwNCAxMjQxNDMgICByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIgICAgICAgICAgCi0gKiAyMDA2MDIwNCAxMjQ0MDggICByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIgICAgIAotICogMjAwNjAyMjEgMTE5MTExICAgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDMyOSAxMjgwNjkgICByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNDA0IDEzNDkxMyAgIHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdSAKLSAqIDIwMDYwNDExICAgMTM2MTM0IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDQxNyAgIDEzNjM5MC8xMzYxNTkgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA0MTMgICAxMzU1ODEgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDQxOCAgIDEzNjMzNSBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDQyMCAgIDEzNjE1OCByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNDIwICAgMTIwNzE0IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDQyMCAgIDEzNTkxMiBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDQyNiAgIDEzODY0NyBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDUxMCAgIDE0MTExNSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNTA5ICAgMTE5Mjk2IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDYwNzE5ICAgMTM5OTc3IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLQotcHVibGljIGZpbmFsIGNsYXNzIENvbnN1bXB0aW9uVUlNZXNzYWdlcyBleHRlbmRzIE5MUyB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSAib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUkiOy8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgQ29uc3VtcHRpb25VSU1lc3NhZ2VzKCkgewotCQkvLyBEbyBub3QgaW5zdGFudGlhdGUKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQTFVHSU5fTkVXX1dJWkFSRF9OQU1FX1dTX0NMSUVOVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBBQ1RJT05fR0VORVJBVEVfSkFWQV9QUk9YWTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBDSEVDS0JPWF9TSE9XX0dFTkVSQVRFX0pBVkFfUFJPWFlfRElBTE9HOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFBBRF9DSEVDS0JPWF9XU0RMMlBST1hZOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfU1JQRl9DT01CT19TRVJWRVI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9TUlBGX0NPTUJPX1JVTlRJTUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9TUlBGX0NPTUJPX0oyRUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1RBU0tfRVhDRVBURUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX05PX1NFUlZFUl9SVU5USU1FOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX0ZPTERFUl9OQU1FOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX0pTUF9GT0xERVJfTkFNRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9XRUJfUFJPSkVDVF9OQU1FOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1dFQlNFUlZJQ0VUWVBFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1dFQlNFUlZJQ0VJTVBMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1dFQlNFUlZJQ0VERUY7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfSjJFRV9WRVJTSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX05BOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJVVFRPTl9CUk9XU0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQlVUVE9OX0JST1dTRV9GSUxFUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBCT1RUT01VUF9MQUJFTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT1BET1dOX0xBQkVMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIENMSUVOVF9MQUJFTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBDT01CSU5FRF9UWVBFX0FORF9SVU5USU1FX0xBQkVMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdJWkFSRF9USVRMRV9XU0M7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9USVRMRV9XU19QUk9KRUNUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfREVTQ19XU19QUk9KRUNUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJVVFRPTl9TVEFSVF9XRUJfUFJPSkVDVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBCVVRUT05fSU5TVEFMTF9TRVJWSUNFX1dFQl9QUk9KRUNUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJVVFRPTl9JTlNUQUxMX0NMSUVOVF9XRUJfUFJPSkVDVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBHUk9VUF9TQ0VOQVJJT19TRVJWSUNFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEdST1VQX1NDRU5BUklPX0NMSUVOVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9XRUJTRVJWSUNFQ0xJRU5UVFlQRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX1RJVExFX1dTX1JVTlRJTUVfU0VMRUNUSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfREVTQ19XU19SVU5USU1FX1NFTEVDVElPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9TVU1NQVJZOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1NVTU1BUllfTk9fQ0xJRU5UOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1JVTlRJTUVTX0xJU1Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfU0VSVkVSU19MSVNUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX0VESVRfQlVUVE9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1NFUlZJQ0VfRUFSX01PRFVMRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9DTElFTlRfRUFSX01PRFVMRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9DTElFTlRfTU9EVUxFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1NFUlZJQ0VfTU9EVUxFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX0NMSUVOVF9QUk9KRUNUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1NFUlZJQ0VfUFJPSkVDVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9DTElFTlRfRUFSX1BST0pFQ1Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfU0VSVklDRV9FQVJfUFJPSkVDVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9DTElFTlRfQ09NUF9UWVBFX1dFQjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9DTElFTlRfQ09NUF9UWVBFX0VKQjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9DTElFTlRfQ09NUF9UWVBFX0FQUF9DTElFTlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfQ0xJRU5UX0NPTVBfVFlQRV9DT05UQUlORVJMRVNTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdSU19URVhUX1JVTlRJTUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV1JTX1RFWFRfU0VSVkVSOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdSU19KMkVFX1ZFUlNJT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfU0VMRUNUSU9OX1ZJRVdfVElUTEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfU0VMRUNUSU9OX1ZJRVdfUlVOVElNRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9TRUxFQ1RJT05fVklFV19TRVJWRVI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfU0VMRUNUSU9OX1ZJRVdfRVhQTE9SRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9UUkVFX0VYSVNUSU5HX1NFUlZFUlM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfVFJFRV9TRVJWRVJfVFlQRVM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX05PX09CSkVDVF9TRUxFQ1RJT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX05PX1NFUlZJQ0VfU0VMRUNUSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19JTlZBTElEX1NFUlZJQ0VfREVGOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19JTlZBTElEX1NFUlZJQ0VfSU1QTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfSU5WQUxJRF9TUlRfU0VMRUNUSU9OUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfTk9fUlVOVElNRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfTk9fU0VSVkVSOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9TVFVCX09OTFk7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX1dBUk5fU1RVQl9PTkxZOwotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19XQVJOX05PX1NFUlZJQ0VfU0VSVkVSOwotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19XQVJOX05PX0NMSUVOVF9TRVJWRVI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX1NFUlZFUl9UQVJHRVRfTUlTTUFUQ0g7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0oyRUVfTUlTTUFUQ0g7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX1NFUlZJQ0VfUFJPSkVDVF9FTVBUWTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfU0VSVklDRV9QUk9KRUNUX1RZUEVfRU1QVFk7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX1NFUlZJQ0VfRUFSX0VNUFRZOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19DTElFTlRfUFJPSkVDVF9FTVBUWTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfQ0xJRU5UX1BST0pFQ1RfVFlQRV9FTVBUWTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfQ0xJRU5UX0VBUl9FTVBUWTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfSU5WQUxJRF9FSkJfUFJPSkVDVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfSU5WQUxJRF9XRUJfUFJPSkVDVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfSU5WQUxJRF9QUk9KRUNUX1RZUEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX01PRFVMRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfTU9EVUxFX05BTUVfQU5EX1BST0pFQ1RfTkFNRV9OT1RfVEhFX1NBTUU7Ci0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX1NFUlZJQ0VfUlVOVElNRV9ET0VTX05PVF9TVVBQT1JUX1BST0pFQ1Q7Ci0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX1NFUlZJQ0VfU0VSVkVSX0RPRVNfTk9UX1NVUFBPUlRfUFJPSkVDVDsKLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfU0VSVklDRV9SVU5USU1FX0RPRVNfTk9UX1NVUFBPUlRfVEVNUExBVEU7Ci0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX1NFUlZJQ0VfU0VSVkVSX0RPRVNfTk9UX1NVUFBPUlRfVEVNUExBVEU7Ci0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0NMSUVOVF9SVU5USU1FX0RPRVNfTk9UX1NVUFBPUlRfUFJPSkVDVDsKLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfQ0xJRU5UX1NFUlZFUl9ET0VTX05PVF9TVVBQT1JUX1BST0pFQ1Q7Ci0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0NMSUVOVF9SVU5USU1FX0RPRVNfTk9UX1NVUFBPUlRfVEVNUExBVEU7Ci0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0NMSUVOVF9TRVJWRVJfRE9FU19OT1RfU1VQUE9SVF9URU1QTEFURTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfU0FNRV9DTElFTlRfQU5EX1NFUlZJQ0VfRUFSUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfU0FNRV9DTElFTlRfQU5EX1NFUlZJQ0VfQ09NUE9ORU5UUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfU0FNRV9DTElFTlRfQU5EX1NFUlZJQ0VfUFJPSkVDVFM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX1dST05HX0NMSUVOVF9QUk9KRUNUX1RZUEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0NMSUVOVF9TVUI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX1NFUlZJQ0VfU1VCOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19HRU5FUkFMX1BST0pFQ1RfQU5EX0VBUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRUFSX1BST0pFQ1RfV0lMTF9CRV9DUkVBVEVEOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FQVJfV0lMTF9CRV9BU1NPQ0lBVEVEOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19QUk9KRUNUX1dJTExfQkVfQ1JFQVRFRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRUFSX1dJTExfQkVfQ1JFQVRFRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfUFJPSkVDVF9BTkRfRUFSX0NSRUFURUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9USVRMRV9XU19DTElFTlRfUlVOVElNRV9TRUxFQ1RJT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9ERVNDX1dTX0NMSUVOVF9SVU5USU1FX1NFTEVDVElPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9DTElFTlRfU0VMRUNUSU9OX1ZJRVdfVElUTEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfQ0xJRU5UX1RZUEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfU0VSVklDRV9UWVBFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1dFQjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9FSkI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfTk9fTEFCRUw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9NU0dfVkFMSURBVElPTl9JTlRFUk5BTF9FUlJPUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX1RJVExFX1dTX1hNTDJCRUFOOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfREVTQ19OMlBfTUFQUElOR1M7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX01BUFBJTkdfRFVQTElDQVRFX0VOVFJJRVM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQlVUVE9OX0dFTkVSQVRFX1BST1hZOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfREVTQ19XU1NLRUxfQ09ORklHOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfVElUTEVfV1NTS0VMX0NPTkZJRzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BCU0NfVEVYVF9TS0VMRVRPTl9GT0xERVI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QQlNDX0JVVFRPTl9TS0VMRVRPTl9GT0xERVJfQlJPV1NFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1NLRUxFVE9OX1JPT1RfTkFNRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9CRUFOX0NMQVNTX05BTUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9NU0dfQkVBTl9DQU5OT1RfQkVfRU1QVFk7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQlVUVE9OX0JST1dTRV9DTEFTU0VTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfVElUTEVfV1NURVNUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfREVTQ19XU1RFU1Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQ0hFQ0tCT1hfVEVTVF9XRUJTRVJWSUNFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIENIRUNLQk9YX01PTklUT1JfV0VCU0VSVklDRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfVU5BQkxFX1RPX0xBVU5DSF9XU0RMX1RFU1Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQlVUVE9OX0xBVU5DSF9TRVJWSUNFX1RFU1Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9USVRMRV9XU19TQU1QTEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9ERVNDX1dTX1NBTVBMRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBCVVRUT05fVEVTVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9URVNUX1RZUEVTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJVVFRPTl9SVU5fVEVTVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9NRVRIT0RTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX0pTUF9QUk9KRUNUX05BTUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0pUU19QUk9YWV9OT1RfQ09NUElMRUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX01BTEZPUk1FRF9VUkw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQlVUVE9OX1NFTEVDVF9BTEw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQlVUVE9OX0RFU0VMRUNUX0FMTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BCTUVfQlVUVE9OX1NFTEVDVF9BTEw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QQk1FX0JVVFRPTl9ERVNFTEVDVF9BTEw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9USVRMRV9XU0RMX1NFTEVDVElPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX0RFU0NfV1NETF9TRUxFQ1RJT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9USVRMRV9XU19QVUJMSVNIOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfREVTQ19XU19QVUJMSVNIOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfVElUTEVfV1NfRklORDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX0RFU0NfV1NfRklORDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBCVVRUT05fV1NfUFVCTElTSDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBCVVRUT05fV1NXU0NFTl9QVUJMSVNIOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJVVFRPTl9XU19QVUJMSVNIX1BSSVZBVEVfVURESTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBCVVRUT05fV1NfRklORDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBCVVRUT05fV1NfRklORF9QUklWQVRFX1VEREk7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfUFVCTElDX1VERElfUkVHSVNUUklFUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9FSkJfQkVBTl9OQU1FOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRBQkxFX1RJVExFX0VKQl9CRUFOX05BTUVTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRBQkxFX1RJVExFX0VKQl9QUk9KRUNUX05BTUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfRUFSX1BST0pFQ1RTOwotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1NIT1dfQUxMX1NUQVRFTEVTU19TRVNTSU9OX0VKQlM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQ0hFQ0tCT1hfT1ZFUldSSVRFX0ZJTEVTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIERJQUxPR19USVRJTEVfU0VSVklDRV9QUk9KRUNUX1NFVFRJTkdTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIERJQUxPR19USVRJTEVfQ0xJRU5UX1BST0pFQ1RfU0VUVElOR1M7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgRElBTE9HX1RJVElMRV9TRVJWSUNFX0lNUExfU0VMRUNUSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIERJQUxPR19USVRJTEVfU0VSVklDRV9ERUZfU0VMRUNUSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfV1NXU0NFTl9TRVJWSUNFUFJPSkVDVF9MSU5LOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfV1NXU0NFTl9DTElFTlRQUk9KRUNUX0xJTks7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX0RFVkVMT1A7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX0FTU0VNQkxFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9ERVBMT1k7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX0lOU1RBTEw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX1JVTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1dTV1NDRU5fU0NBTEVfVEVTVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1dTV1NDRU5fU0NBTEVfU0VSVklDRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1dTV1NDRU5fU0NBTEVfQ0xJRU5UOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9DTElFTlRfT05MWTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1dTV1NDRU5fVEVYVF9JTVBMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfV1NXU0NFTl9CVVRUT05fT1ZFUldSSVRFX0ZJTEVTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfV1NXU0NFTl9CVVRUT05fQlJPV1NFX0lNUEw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9FQVJfUFJPSkVDVFM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9UQUJMRV9CRUFOX05BTUVTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdXU19QQUdFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUEJDTF9QQUdFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUEJDTF9URVhUX0JFQU5fQ0xBU1M7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QQkNMX0JVVFRPTl9CRUFOX0NMQVNTX0JST1dTRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BCQ0xfQlVUVE9OX0JFQU5fUkVTT1VSQ0VfQlJPV1NFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFNUUF9DT01CT0JPWF9URVNUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFNUUF9MQVVOQ0hfQlVUVE9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdSU19QQUdFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdSU19MSVNUX1JVTlRJTUVTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdSU19MSVNUX1NFUlZFUlM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV1JTX1JBRElPX1NFUlZFUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXUlNfUkFESU9fUlVOVElNRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXUlNfUkFESU9fRVhQTE9SRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXQ1JfQ09NQk9fQ0xJRU5UX1RZUEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV0NSX0NPTUJPX1NFUlZJQ0VfVFlQRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXUFJfQ09NQk9fVFlQRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXUFJfR1JPVVBfU0NFTkFSSU9fU0VSVklDRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXUFJfQ0hFQ0tCT1hfR0VORVJBVEVfUFJPWFk7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV1BSX0NIRUNLQk9YX1NUQVJUX1dFQl9QUk9KRUNUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdQUl9DSEVDS0JPWF9JTlNUQUxMX1NFUlZJQ0VfV0VCX1BST0pFQ1Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV1BSX0NIRUNLQk9YX0lOU1RBTExfQ0xJRU5UX1dFQl9QUk9KRUNUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdQUl9DSEVDS0JPWF9MQVVOQ0hfV1M7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV1BSX0NIRUNLQk9YX1RFU1RfU0VSVklDRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXUFJfQ0hFQ0tCT1hfTU9OSVRPUl9TRVJWSUNFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdQUl9HUk9VUF9TQ0VOQVJJT19DTElFTlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV1BSX0NPTUJPX0NMSUVOVFRZUEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV1BCX1BBR0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV1BCX0NIRUNLQk9YX1dTX0xBVU5DSDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX1dTSUxfSU1QT1JUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRJVExFX1dTSUxfSU1QT1JUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIERFU0NfV1NJTF9JTVBPUlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9USVRMRV9XU19TRUxFQ1RJT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9ERVNDX1dTX1NFTEVDVElPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX01TR19MT0FESU5HX1dFQl9TRVJWSUNFX1VSSTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX01TR19JTlZBTElEX1dFQl9TRVJWSUNFX1VSSTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX01TR19OT19TVUNIX0ZJTEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9NU0dfU0VMRUNUSU9OX01VU1RfQkVfV1NETDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX01TR19JTlZBTElEX1dTSUxfRklMRV9OQU1FOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9VUklfTk9UX1JFU09MVkFCTEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1dTRExfSEFTX05PX1NFUlZJQ0VfRUxFTUVOVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9XU0lMX1VSSTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9CUk9XU0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfV1NETDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9XU0RMX1VSSTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9JTVBPUlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfQUREOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1JFTU9WRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9XU19TRUxFQ1RJT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfU0VMRUNUX1dTREw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfVkFMSURBVEVfTUVTU0FHRVM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9XU0lMX0lNUE9SVF9QQUdFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfV1NJTF9URVhUX1dTSUw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9XU0lMX0JVVFRPTl9CUk9XU0VfV1NJTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1dTSUxfVEFCTEVfV1NETDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BDT05fUEFHRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BDT05fVEVYVF9XUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BDT05fQlVUVE9OX0JST1dTRV9XUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1ZBTElEQVRFX1RFWFRfTUVTU0FHRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1RBQkxFX1ZBTElEQVRFX01FU1NBR0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVEFCTEVfQ09MVU1OX1ZBTElEQVRJT05fU0VWRVJJVFk7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVEFCTEVfQ09MVU1OX1ZBTElEQVRJT05fTElORTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUQUJMRV9DT0xVTU5fVkFMSURBVElPTl9DT0xVTU47Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVEFCTEVfQ09MVU1OX1ZBTElEQVRJT05fTUVTU0FHRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXU01fUEFHRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXU01fQ0hFQ0tCT1hfVEVTVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXU01fQ09NQk9CT1hfVEVTVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXU01fQ0hFQ0tCT1hfTEFVTkNIOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdTTV9URVhUX0pTUF9GT0xERVI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV1NNX0JVVFRPTl9KU1BfRk9MREVSX0JST1dTRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXU01fQlVUVE9OX1NFTEVDVF9BTEw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV1NNX0JVVFRPTl9ERVNFTEVDVF9BTEw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV1NNX0NPTUJPX1BST0pFQ1Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV1NNX1RFWFRfU0FNUExFX0ZPTERFUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXU01fVFJFRV9NRVRIT0RTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdTTV9FQVJfUFJPSkVDVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBESUFMT0dfVElUTEVfSFRUUF9CQVNJQ19BVVRIOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1VSTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9IVFRQX0JBU0lDX0FVVEhfVVNFUk5BTUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfSFRUUF9CQVNJQ19BVVRIX1BBU1NXT1JEOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfSFRUUF9CQVNJQ19BVVRIX1VTRVJOQU1FOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfSFRUUF9CQVNJQ19BVVRIX1BBU1NXT1JEOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9HRU5FUkFURV9IQU5ETEVSX1NLRUxFVE9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9XUklURV9GSUxFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX0hBTkRMRVJTX0NPTkZJRzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9CVVRUT05fQUREOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX0JVVFRPTl9SRU1PVkU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfQlVUVE9OX01PVkVfVVA7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfQlVUVE9OX01PVkVfRE9XTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9CVVRUT05fR0VOX1NLRUxFVE9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX0NPTUJPX1NPVVJDRV9MT0M7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfQ09NQk9fV1NfQ0xJRU5UX1JFRjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9DT01CT19XU19TRVJWSUNFX0RFU0M7Ci0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX1RFWFRfTlVNX09GX1NFUlZJQ0VTOwotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19URVhUX05VTV9PRl9DTElFTlRTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX0hBTkRMRVJfTkFNRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJMRV9IQU5ETEVSX0NMQVNTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX0hBTkRMRVJfUE9SVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBESUFMT0dfVElUTEVfV1NfQUREX0hBTkRMRVI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfVEVYVF9IQU5ETEVSX05BTUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfVEVYVF9IQU5ETEVSX0NMQVNTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1RFWFRfSEFORExFUl9QT1JUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfVElUTEVfU0VSVklDRV9IRExSX0NPTkZJRzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX0RFU0NfU0VSVklDRV9IRExSX0NPTkZJRzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX1RJVExFX0NMSUVOVF9IRExSX0NPTkZJRzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX0RFU0NfQ0xJRU5UX0hETFJfQ09ORklHOwotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfREVTQ19NVUxUSVBMRV9TRVJWSUNFU19DT05GSUc7Ci0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9ERVNDX01VTFRJUExFX0NMSUVOVFNfQ09ORklHOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfRURJVF9XU19IQU5ETEVSUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX0JVVFRPTl9HRU5fU0tFTEVUT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9DT01CT19TT1VSQ0VfTE9DOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfVEVYVF9IQU5ETEVSX05BTUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9URVhUX0hBTkRMRVJfQ0xBU1M7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9URVhUX0hBTkRMRVJfUE9SVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1dTX0NMSUVOVF9SRUY7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9XU19TRVJWSUNFX0RFU0M7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1VOQUJMRV9UT19PUEVOX0pBVkFfRURJVE9SOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19XQVJOX0lTX1NFUlZJQ0VfUFJPSkVDVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfVVNFUl9BQk9SVEVEOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19NSVNTSU5HX1RISVJEX1BBUlRZX0ZJTEVTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19XQVJOSU5HX05PX1NFUlZJQ0VfRUxFTUVOVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBTVElMTF9WQUxJREFUSU5HX1dTREw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQ0FOQ0VMX1ZBTElEQVRJT05fTEFCRUw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQ0FOQ0VMX1ZBTElEQVRJT05fREVTQ1JJUFRJT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQ0FOQ0VMX0FMTF9WQUxJREFUSU9OX0xBQkVMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIENBTkNFTF9BTExfVkFMSURBVElPTl9ERVNDUklQVElPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXQUlUX1ZBTElEQVRJT05fTEFCRUw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV0FJVF9WQUxJREFUSU9OX0RFU0NSSVBUSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRBU0tfTEFCRUxfQ0hFQ0tfV1NETF9WQUxJREFUSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRBU0tfREVTQ19DSEVDS19XU0RMX1ZBTElEQVRJT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTUVTU0FHRV9WQUxJREFURV9OT19XU0RMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1FU1NBR0VfVkFMSURBVEVfUkVNT1RFX1dTREw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTUVTU0FHRV9WQUxJREFURV9BTExfV1NETDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNRVNTQUdFX1ZBTElEQVRFX0lOX1BST0dSRVNTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEVSUk9SX01FU1NBR0VTX0lOX1ZBTElEQVRJT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV0FSTklOR19NRVNTQUdFU19JTl9WQUxJREFUSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdBUk5JTkdfSUZfQ09OVElOVUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVkFMSURBVElPTl9DT01QTEVURUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9WQUxJREFURV9URVhUX01FU1NBR0VfU1VNTUFSWTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9CVVRUT05fU1RPUF9XU0RMX1ZBTElEQVRJT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9TVE9QX1ZBTElEQVRJT05fQlVUVE9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfVElUTEVfV1NfU1RBUlRfU0VSVkVSOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfREVTQ19XU19TVEFSVF9TRVJWRVI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfU1RBUlRfU0VSVkVSX1RFWFQxOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1NUQVJUX1NFUlZFUl9URVhUMjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9TVEFSVF9TRVJWRVJfVEVYVDM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfU1RBUlRfU0VSVkVSX1RFWFQ0OwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1NUQVJUX1NFUlZFUl9CVVRUT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9TVEFSVF9TRVJWRVJfQlVUVE9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRFWFRfU0VSVkVSX1NUQVRVUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBURVhUX1NFUlZFUl9NU0c7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVEVYVF9TRVJWRVJfU1RBUlRFRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBURVhUX1NFUlZFUl9TVEFSVElORzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBURVhUX1NFUlZFUl9TVE9QUEVEOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19JTkZPX0FOVF9SVU5USU1FX0hFQURJTkc7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0lORk9fQU5UX1NFUlZFUl9SVU5USU1FOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19JTkZPX0FOVF9DTElFTlRfUlVOVElNRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfSU5GT19BTlRfU0VSVkVSX0hFQURJTkc7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0lORk9fQU5UX1NFUlZFUjsKLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfV0VCX1NFUlZJQ0VfQ0xJRU5UU19OT1RfRk9VTkQ7Ci0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1dFQl9TRVJWSUNFU19OT1RfRk9VTkQ7Ci0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1dTRERfTk9UX0ZPVU5EOwotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19DTElFTlRfQ0FOTk9UX0FTU09DSUFURTsKLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfU0VSVklDRV9DQU5OT1RfQVNTT0NJQVRFOwotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19QUk9KRUNUX01VU1RfRVhJU1Q7Ci0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0lOVkFMSURfTVVMVElQTEVfU0VSVklDRV9TRUxFQ1Q7Ci0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX01PRFVMRV9ERVBFTkRFTkNZOwotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19JTkZPX1dTRExfT1BFUkFUSU9OX1RJTUVEX09VVDsKLQotCi0Jc3RhdGljIHsKLQkJTkxTLmluaXRpYWxpemVNZXNzYWdlcyhCVU5ETEVfTkFNRSwgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLmNsYXNzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2FjdGlvbi9MYXVuY2hXU0VBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvYWN0aW9uL0xhdW5jaFdTRUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjI0Mzc5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvYWN0aW9uL0xhdW5jaFdTRUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5hY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93QWN0aW9uRGVsZWdhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5UcmFuc2llbnRSZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuRWNsaXBzZUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5lY2xpcHNlLkVjbGlwc2VTdGF0dXNIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5MYXVuY2hPcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLkxhdW5jaE9wdGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLldTRXhwbG9yZXJMYXVuY2hlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsdWdpbi5FeHBsb3JlclBsdWdpbjsKLQotCi1wdWJsaWMgY2xhc3MgTGF1bmNoV1NFQWN0aW9uIGltcGxlbWVudHMgSVdvcmtiZW5jaFdpbmRvd0FjdGlvbkRlbGVnYXRlCi17Ci0gIHB1YmxpYyB2b2lkIHJ1bihJQWN0aW9uIGFjdGlvbikKLSAgewotICAgIEVjbGlwc2VTdGF0dXNIYW5kbGVyICAgICAgICAgICAgIGhhbmRsZXIgICAgID0gbmV3IEVjbGlwc2VTdGF0dXNIYW5kbGVyKCk7Ci0gICAgVHJhbnNpZW50UmVzb3VyY2VDb250ZXh0ICAgICAgICAgY29udGV4dCAgICAgPSBuZXcgVHJhbnNpZW50UmVzb3VyY2VDb250ZXh0KCk7Ci0gICAgRWNsaXBzZUVudmlyb25tZW50ICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgPSBuZXcgRWNsaXBzZUVudmlyb25tZW50KCBudWxsLCBjb250ZXh0LCBoYW5kbGVyICk7IAotICAgIFdTRXhwbG9yZXJMYXVuY2hlckNvbW1hbmQgICAgICAgIGNtZCAgICAgICAgID0gbmV3IFdTRXhwbG9yZXJMYXVuY2hlckNvbW1hbmQoKTsKLSAgICAKLSAgICBTdHJpbmcgc3RhdGVMb2NhdGlvbiA9IEV4cGxvcmVyUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UGx1Z2luU3RhdGVMb2NhdGlvbigpOwotCVN0cmluZyBkZWZhdWx0RmF2b3JpdGVzTG9jYXRpb24gPSBFeHBsb3JlclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldERlZmF1bHRGYXZvcml0ZXNMb2NhdGlvbigpOwotCUxhdW5jaE9wdGlvbltdIGxhdW5jaE9wdGlvbnMgPSBuZXcgTGF1bmNoT3B0aW9uW10gewotCQluZXcgTGF1bmNoT3B0aW9uKExhdW5jaE9wdGlvbnMuU1RBVEVfTE9DQVRJT04sc3RhdGVMb2NhdGlvbiksCi0JCW5ldyBMYXVuY2hPcHRpb24oTGF1bmNoT3B0aW9ucy5ERUZBVUxUX0ZBVk9SSVRFU19MT0NBVElPTixkZWZhdWx0RmF2b3JpdGVzTG9jYXRpb24pCi0JfTsKLSAgICBjbWQuc2V0TGF1bmNoT3B0aW9ucyhsYXVuY2hPcHRpb25zKTsKLSAgICBjbWQuc2V0RW52aXJvbm1lbnQoIGVudmlyb25tZW50ICk7Ci0JICBjbWQuZXhlY3V0ZSggbnVsbCwgbnVsbCApOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvd0FjdGlvbkRlbGVnYXRlI2Rpc3Bvc2UoKQotICAgKi8KLSAgcHVibGljIHZvaWQgZGlzcG9zZSgpIHsgIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93QWN0aW9uRGVsZWdhdGUjaW5pdChvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93KQotICAgKi8KLSAgcHVibGljIHZvaWQgaW5pdChJV29ya2JlbmNoV2luZG93IHdpbmRvdykgeyAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklBY3Rpb25EZWxlZ2F0ZSNzZWxlY3Rpb25DaGFuZ2VkKG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uLCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb24pCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKElBY3Rpb24gYWN0aW9uLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgeyAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9hbnQvQW50Q2xpZW50Um9vdENvbW1hbmRGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9hbnQvQW50Q2xpZW50Um9vdENvbW1hbmRGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGUwZDM3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvYW50L0FudENsaWVudFJvb3RDb21tYW5kRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMjEgICAxMTkxMTEgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDUyOSAgIDE0MTQyMiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA1MzAgICAxNDQzNTgga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNTMwICAgMTQ0MzUwIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDgyNSAgIDE1NTExNCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA2MTAxMSAgIDE1OTI4MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgcHJvamVjdCBub3QgYXNzb2NpYXRlZCB0byBFQVIgd2hlbiB1c2luZyBhbnQgb24gY29tbWFuZC1saW5lCi0gKiAyMDA3MDUwMSAgIDE3ODEyOSBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgd29ya3NwYWNlIHJlcG9ydHMgImNyYXNoIGRldGVjdGVkIiBhZnRlciBydW5uaW5nIFdTIGFudCB0YXNrIChjbWRsaW5lKQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5hbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbWFuZC5BbnREZWZhdWx0aW5nT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tYW5kLkFudFJlc3RvcmluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQuQW50V29ya3NwYWNlU2F2ZUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQuQ2hlY2tGb3JTZXJ2aWNlUHJvamVjdENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQuTGlzdE9wdGlvbnNDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tYW5kLmRhdGEuRWNsaXBzZUlQYXRoMlVSTFN0cmluZ1RyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tb24uRmluaXNoRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1vbi5TY2VuYXJpb0NsZWFudXBDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5leHRlbnNpb24uQ2xpZW50Um9vdEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5leHRlbnNpb24uUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuQ2xpZW50V2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5XU0RMU2VsZWN0aW9uT3V0cHV0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5XU0RMU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9ucy5DbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zLkNsaWVudEV4dGVuc2lvbkZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnMuQ2xpZW50RXh0ZW5zaW9uT3V0cHV0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5ydW50aW1lLkNsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0LkNsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5DbGllbnRUZXN0RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5GaW5pc2hEZWZhdWx0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2VxdWVuY2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TaW1wbGVGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXh0ZW5zaW9ucy5Bc3NlbWJsZUNsaWVudEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHRlbnNpb25zLkRlcGxveUNsaWVudEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHRlbnNpb25zLkRldmVsb3BDbGllbnRGcmFnbWVudDsKLQotLyoqCi0gKiAKLSAqIENvbW1hbmQgZnJhZ21lbnQgZm9yIGdlbmVyYXRpbmcgYSB3ZWIgc2VydmljZSBjbGllbnQgdXNpbmcgQW50IHRhc2suCi0gKiBSdW4gaGVhZGxlc3MgRWNsaXBzZSBvciB3aXRoaW4gd29ya3NwYWNlIHVzaW5nIFJ1biBhcyBBbnQgQnVpbGQuICBUaGlzIGZyYWdtZW50IGVsaW1pbmF0ZXMgYW55IFVJIHNwZWNpZmljIAotICogY29tbWFuZHMgYW5kIGRhdGEgbWFwcGluZ3MgYmV0d2VlbiBjb21tYW5kcyBhbmQgd2lkZ2V0cy4gIFdpZGdldCB0byBjb21tYW5kIG1hcHBpbmdzIGFyZQotICogcmVwbGFjZWQgYnkgQW50IHByb3BlcnR5IGZpbGUgdG8gY29tbWFuZCBtYXBwaW5ncyB3aGljaCBhcmUgZW5hYmxlZCBieSBhIGFudERhdGFNYXBwaW5nIGV4dGVuc2lvbiAKLSAqIHBvaW50IGluIHRoZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYgcGx1Z2luLgotICogCi0gKiBAYXV0aG9yIGpvYW4KLSAqCi0gKi8KLQotcHVibGljIGNsYXNzIEFudENsaWVudFJvb3RDb21tYW5kRnJhZ21lbnQgZXh0ZW5kcyBTZXF1ZW5jZUZyYWdtZW50ewotCQotICBwdWJsaWMgQW50Q2xpZW50Um9vdENvbW1hbmRGcmFnbWVudCgpCi0gIHsJIAotCSAgICAKLSAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBTY2VuYXJpb0NsZWFudXBDb21tYW5kKCksICIiICkpOwotICAKLSAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQobmV3IExpc3RPcHRpb25zQ29tbWFuZCgpLCAiIikpOwotICBhZGQgKG5ldyBTaW1wbGVGcmFnbWVudChuZXcgQW50RGVmYXVsdGluZ09wZXJhdGlvbigpLCAiIikpOwotICAKLSAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBDbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZCh0cnVlKSwgIiIgKSApOwotICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQoKSwgIiIgKSk7Ci0gIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgV1NETFNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kKCksICIiKSk7Ci0gIAotICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IFdTRExTZWxlY3Rpb25PdXRwdXRDb21tYW5kKCksICIiKSk7Ci0gIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kKCksICIiKSk7Ci0gIAotICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kKCB0cnVlICksICIiKSk7Ci0gIGFkZCggbmV3IENsaWVudFJvb3RGcmFnbWVudCgpICk7Ci0gIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgQ2xpZW50RXh0ZW5zaW9uT3V0cHV0Q29tbWFuZCgpLCAiIiApICk7Ci0gCi0gIGFkZChuZXcgRmluaXNoRnJhZ21lbnQoKSk7Ci0gIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgQW50UmVzdG9yaW5nQ29tbWFuZCgpLCAiIiApKTsKLSAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBTY2VuYXJpb0NsZWFudXBDb21tYW5kKCksICIiICkpOwotICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IEFudFdvcmtzcGFjZVNhdmVDb21tYW5kKCksICIiKSk7Ci0gCi0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnQjcmVnaXN0ZXJEYXRhTWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwucHJvdmlzaW9uYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhUmVnaXN0cnkpCi0gIHsgICAgIAotICAgICAgLy8gTWFwIENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kIGNvbW1hbmQuCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFR5cGVSdW50aW1lU2VydmVyIiwgQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlRlc3RTZXJ2aWNlIiwgQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlJlc291cmNlQ29udGV4dCIsIENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkRldmVsb3BDbGllbnQiLCBDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQXNzZW1ibGVDbGllbnQiLCBDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiRGVwbG95Q2xpZW50IiwgQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlN0YXJ0Q2xpZW50IiwgQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlJlc291cmNlQ29udGV4dCIsIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0KLSAgICAgIAotICAgICAgLy8gTWFwIENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQgY29tbWFuZC4KLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJDbGllbnRUeXBlUnVudGltZVNlcnZlciIsIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiVGVzdFNlcnZpY2UiLCBXU0RMU2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXU0RMU2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIlRlc3RTZXJ2aWNlIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOyAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV1NETFNlbGVjdGlvbk91dHB1dENvbW1hbmQuY2xhc3MsICJUZXN0U2VydmljZSIsIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7ICAgICAgICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJSZXNvdXJjZUNvbnRleHQiLCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOyAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIlJlc291cmNlQ29udGV4dCIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIkluc3RhbGxDbGllbnQiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiU3RhcnRDbGllbnQiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiRGV2ZWxvcENsaWVudCIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJBc3NlbWJsZUNsaWVudCIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJEZXBsb3lDbGllbnQiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICAKLSAgICAgIAotICAgICAgLy8gTWFwIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZCBjb21tYW5kCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRUeXBlUnVudGltZVNlcnZlciIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFJ1bnRpbWVJZCIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlJ1bnRpbWUyQ2xpZW50VHlwZXMiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0TmFtZSIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEVhclByb2plY3ROYW1lIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50RWFyQ29tcG9uZW50TmFtZSIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudENvbXBvbmVudE5hbWUiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRDb21wb25lbnRUeXBlIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50SjJFRVZlcnNpb24iLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnROZWVkRUFSIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiUnVudGltZTJDbGllbnRUeXBlcyIsIENoZWNrRm9yU2VydmljZVByb2plY3RDb21tYW5kLmNsYXNzKTsKLSAgICAgIAotLy8gICAgTWFwIEFudERlZmF1bHRpbmdPcGVyYXRpb24gICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEFudERlZmF1bHRpbmdPcGVyYXRpb24uY2xhc3MsICJDbGllbnRJZHNGaXhlZCIsIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhBbnREZWZhdWx0aW5nT3BlcmF0aW9uLmNsYXNzLCAiU3RhcnRTZXJ2aWNlIiwgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQW50RGVmYXVsdGluZ09wZXJhdGlvbi5jbGFzcywgIkluc3RhbGxDbGllbnQiLCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcyk7ICAgICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEFudERlZmF1bHRpbmdPcGVyYXRpb24uY2xhc3MsICJEZXBsb3lDbGllbnQiLCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcyk7Ci0gICAgICAgICAgCi0gICAgICAvLyBNYXAgV1NETFNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kIGNvbW1hbmQuCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXU0RMU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJHZW5XU0lMIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV1NETFNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiV3NpbFVSSSIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdTRExTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2VVUkkiLCBXU0RMU2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIldzZGxVUkkiLCBuZXcgRWNsaXBzZUlQYXRoMlVSTFN0cmluZ1RyYW5zZm9ybWVyKCkpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV1NETFNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiUHJvamVjdCIsIFdTRExTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdTRExTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNvbXBvbmVudE5hbWUiLCBXU0RMU2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICAKLSAgICAgIC8vIFdTRExTZWxlY3Rpb25PdXRwdXRDb21tYW5kCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXU0RMU2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIldzZGxVUkkiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXU0RMU2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2VzUGFyc2VyIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV1NETFNlbGVjdGlvbk91dHB1dENvbW1hbmQuY2xhc3MsICJQcm9qZWN0IiwgQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50SW5pdGlhbFByb2plY3QiLCBudWxsKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdTRExTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiV3NkbFVSSSIsIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXU0RMU2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIkNvbXBvbmVudE5hbWUiLCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRJbml0aWFsQ29tcG9uZW50TmFtZSIsIG51bGwpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV1NETFNlbGVjdGlvbk91dHB1dENvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlc1BhcnNlciIsIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXU0RMU2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIldzZGxVUkkiLCBDaGVja0ZvclNlcnZpY2VQcm9qZWN0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXU0RMU2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2VzUGFyc2VyIiwgQ2hlY2tGb3JTZXJ2aWNlUHJvamVjdENvbW1hbmQuY2xhc3MpOyAgICAgIAotCSAgCi0gICAgICAvLyBTZXR1cCB0aGUgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFJ1bnRpbWVJZCIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzICk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIlRlc3RTZXJ2aWNlIiwgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MpOyAgICAgICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIlJlc291cmNlQ29udGV4dCIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFR5cGVSdW50aW1lU2VydmVyIiwgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEoyRUVWZXJzaW9uIiwgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdCIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiTW9kdWxlIiwgbnVsbCApOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdFR5cGUiLCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIk1vZHVsZVR5cGUiLCBudWxsKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3RFQVIiLCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVhciIsIG51bGwgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiUmVzb3VyY2VDb250ZXh0IiwgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MpOwotCSAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiV3NkbFVSSSIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzICk7Ci0JICAKLQkgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkRldmVsb3BDbGllbnQiLCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJBc3NlbWJsZUNsaWVudCIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkRlcGxveUNsaWVudCIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzICk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTdGFydENsaWVudCIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiU3RhcnRTZXJ2aWNlIiwgbnVsbCk7ICAgICAgCi0JICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2UiLCBDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZUNsaWVudCIsIG51bGwgKTsKLQkJCQotICAgICAgLy8gTWFwIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kIGNvbW1hbmQuCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFR5cGVSdW50aW1lU2VydmVyIiwgQ2xpZW50RXh0ZW5zaW9uRnJhZ21lbnQuY2xhc3MpOyAgICAgICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiR2VuZXJhdGVQcm94eSIsIENsaWVudFRlc3RGcmFnbWVudC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudE5lZWRFQVIiLCBDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLQkgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50RWFyUHJvamVjdE5hbWUiLCBDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLQkgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50RWFyQ29tcG9uZW50TmFtZSIsIENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotCSAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0IixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIiLCBDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsgICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiV3NkbFVSSSIsIENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgICAgCi0gICAgICAvLyBNYXAgQ2xpZW50RXh0ZW5zaW9uT3V0cHV0Q29tbWFuZCBjb21tYW5kLgotCSAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIlNlcnZlckluc3RhbmNlSWQiLCBGaW5pc2hEZWZhdWx0Q29tbWFuZC5jbGFzcyk7Ci0KLSAgICAgIC8vIE1BUCBwb3N0IHNlcnZlciBjb25maWcgY2FsbCAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0RUFSIiwgQ2xpZW50RXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIkVhclByb2plY3ROYW1lIiwgbnVsbCk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFNlcnZlckluc3RhbmNlIiwgQ2xpZW50RXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIkV4aXN0aW5nU2VydmVySWQiLCBudWxsKTsgICAgIAotICAgICAgICAgICAgCi0gICAgICAvL01hcHBpbmdzIHRvIGVuYWJsZSBwZWVrLWFoZWFkIGZvciBQYWdlIDMgb2YgdGhlIGNsaWVudCB3aXphcmQKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlIiwgRGV2ZWxvcENsaWVudEZyYWdtZW50LmNsYXNzICk7ICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJFbnZpcm9ubWVudCIsIERldmVsb3BDbGllbnRGcmFnbWVudC5jbGFzcyApOyAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ29udGV4dCIsIERldmVsb3BDbGllbnRGcmFnbWVudC5jbGFzcyApOyAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VsZWN0aW9uIiwgRGV2ZWxvcENsaWVudEZyYWdtZW50LmNsYXNzICk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdE5hbWUiLCBEZXZlbG9wQ2xpZW50RnJhZ21lbnQuY2xhc3MsICJQcm9qZWN0IiwgbnVsbCApOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudENvbXBvbmVudE5hbWUiLCBEZXZlbG9wQ2xpZW50RnJhZ21lbnQuY2xhc3MsICJNb2R1bGUiLCBudWxsICk7ICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRFYXJQcm9qZWN0TmFtZSIsIERldmVsb3BDbGllbnRGcmFnbWVudC5jbGFzcywgIkVhclByb2plY3QiLCBudWxsICk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50RWFyQ29tcG9uZW50TmFtZSIsIERldmVsb3BDbGllbnRGcmFnbWVudC5jbGFzcywgIkVhciIsIG51bGwgKTsKLSAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlIiwgQXNzZW1ibGVDbGllbnRGcmFnbWVudC5jbGFzcyApOyAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiRW52aXJvbm1lbnQiLCBBc3NlbWJsZUNsaWVudEZyYWdtZW50LmNsYXNzICk7ICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDb250ZXh0IiwgQXNzZW1ibGVDbGllbnRGcmFnbWVudC5jbGFzcyApOyAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VsZWN0aW9uIiwgQXNzZW1ibGVDbGllbnRGcmFnbWVudC5jbGFzcyApOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3ROYW1lIiwgQXNzZW1ibGVDbGllbnRGcmFnbWVudC5jbGFzcywgIlByb2plY3QiLCBudWxsICk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50Q29tcG9uZW50TmFtZSIsIEFzc2VtYmxlQ2xpZW50RnJhZ21lbnQuY2xhc3MsICJNb2R1bGUiLCBudWxsICk7ICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRFYXJQcm9qZWN0TmFtZSIsIEFzc2VtYmxlQ2xpZW50RnJhZ21lbnQuY2xhc3MsICJFYXJQcm9qZWN0IiwgbnVsbCApOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEVhckNvbXBvbmVudE5hbWUiLCBBc3NlbWJsZUNsaWVudEZyYWdtZW50LmNsYXNzLCAiRWFyIiwgbnVsbCApOwotICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2UiLCBEZXBsb3lDbGllbnRGcmFnbWVudC5jbGFzcyApOyAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiRW52aXJvbm1lbnQiLCBEZXBsb3lDbGllbnRGcmFnbWVudC5jbGFzcyApOyAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ29udGV4dCIsIERlcGxveUNsaWVudEZyYWdtZW50LmNsYXNzICk7ICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZWxlY3Rpb24iLCBEZXBsb3lDbGllbnRGcmFnbWVudC5jbGFzcyApOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3ROYW1lIiwgRGVwbG95Q2xpZW50RnJhZ21lbnQuY2xhc3MsICJQcm9qZWN0IiwgbnVsbCApOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudENvbXBvbmVudE5hbWUiLCBEZXBsb3lDbGllbnRGcmFnbWVudC5jbGFzcywgIk1vZHVsZSIsIG51bGwgKTsgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEVhclByb2plY3ROYW1lIiwgRGVwbG95Q2xpZW50RnJhZ21lbnQuY2xhc3MsICJFYXJQcm9qZWN0IiwgbnVsbCApOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEVhckNvbXBvbmVudE5hbWUiLCBEZXBsb3lDbGllbnRGcmFnbWVudC5jbGFzcywgIkVhciIsIG51bGwgKTsgIAotICAgICAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQW50RGVmYXVsdGluZ09wZXJhdGlvbi5jbGFzcywgIlJlbmRlcmVyVmFsaWRhdGlvbiIsIEFudFJlc3RvcmluZ0NvbW1hbmQuY2xhc3MpOyAgICAgICAgICAKLSAgIH0gICAgICAgIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tYW5kL0FudERlZmF1bHRpbmdPcGVyYXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbWFuZC9BbnREZWZhdWx0aW5nT3BlcmF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmYmY1N2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tYW5kL0FudERlZmF1bHRpbmdPcGVyYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIyMSAgIDExOTExMSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYxMDExICAgMTU5MjgzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBwcm9qZWN0IG5vdCBhc3NvY2lhdGVkIHRvIEVBUiB3aGVuIHVzaW5nIGFudCBvbiBjb21tYW5kLWxpbmUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbWFuZDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmludGVybmFsLmVtZi5yZXNvdXJjZS5SZW5kZXJlckZhY3Rvcnk7Ci0KLXB1YmxpYyBjbGFzcyBBbnREZWZhdWx0aW5nT3BlcmF0aW9uIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb257Ci0KLQlwcml2YXRlIGJvb2xlYW4gcmVuZGVyZXJWYWxpZGF0aW9uOwotCQotCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGluZm8pIHRocm93cyBFeGVjdXRpb25FeGNlcHRpb24gewotCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0KLQkJcmVuZGVyZXJWYWxpZGF0aW9uID0gUmVuZGVyZXJGYWN0b3J5LmdldERlZmF1bHRSZW5kZXJlckZhY3RvcnkoKS5pc1ZhbGlkYXRpbmcoKTsJCQotCQlSZW5kZXJlckZhY3RvcnkuZ2V0RGVmYXVsdFJlbmRlcmVyRmFjdG9yeSgpLnNldFZhbGlkYXRpbmcoZmFsc2UpOwotCQkKLQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JfQotCQotCXB1YmxpYyBJU3RhdHVzIHVuZG8oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGluZm8pIHRocm93cyBFeGVjdXRpb25FeGNlcHRpb24gewotCQkKLQkJUmVuZGVyZXJGYWN0b3J5LmdldERlZmF1bHRSZW5kZXJlckZhY3RvcnkoKS5zZXRWYWxpZGF0aW5nKHJlbmRlcmVyVmFsaWRhdGlvbik7Ci0JCQotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gZ2V0U2VydmljZUlkc0ZpeGVkKCkKLQl7Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGdldENsaWVudElkc0ZpeGVkKCkKLQl7Ci0JCXJldHVybiB0cnVlOwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBnZXRTdGFydFNlcnZpY2UoKQotCXsKLQkJcmV0dXJuIGZhbHNlOwkKLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gZ2V0SW5zdGFsbFNlcnZpY2UoKQotCXsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLSAgICAKLSAgICBwdWJsaWMgYm9vbGVhbiBnZXREZXBsb3lTZXJ2aWNlKCkKLSAgICB7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGJvb2xlYW4gZ2V0RGVwbG95Q2xpZW50KCkKLSAgICB7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGJvb2xlYW4gZ2V0UmVuZGVyZXJWYWxpZGF0aW9uKCkKLSAgICB7Ci0gICAgCXJldHVybiByZW5kZXJlclZhbGlkYXRpb247Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tYW5kL0FudFJlc3RvcmluZ0NvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbWFuZC9BbnRSZXN0b3JpbmdDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjNzM5MDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tYW5kL0FudFJlc3RvcmluZ0NvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MTAxMSAgIDE1OTI4MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgcHJvamVjdCBub3QgYXNzb2NpYXRlZCB0byBFQVIgd2hlbiB1c2luZyBhbnQgb24gY29tbWFuZC1saW5lCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5pbnRlcm5hbC5lbWYucmVzb3VyY2UuUmVuZGVyZXJGYWN0b3J5OwotCi1wdWJsaWMgY2xhc3MgQW50UmVzdG9yaW5nQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uewotCi0JcHJpdmF0ZSBib29sZWFuIHJlbmRlcmVyVmFsaWRhdGlvbjsKLQkKLQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBpbmZvKSB0aHJvd3MgRXhlY3V0aW9uRXhjZXB0aW9uIHsKLQotCQlSZW5kZXJlckZhY3RvcnkuZ2V0RGVmYXVsdFJlbmRlcmVyRmFjdG9yeSgpLnNldFZhbGlkYXRpbmcocmVuZGVyZXJWYWxpZGF0aW9uKTsKLQotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQl9Ci0JCi0gICAgcHVibGljIHZvaWQgc2V0UmVuZGVyZXJWYWxpZGF0aW9uKGJvb2xlYW4gcmVuZGVyZXJWYWxpZGF0aW9uKQotICAgIHsKLSAgICAJdGhpcy5yZW5kZXJlclZhbGlkYXRpb24gPSByZW5kZXJlclZhbGlkYXRpb247Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tYW5kL0FudFdvcmtzcGFjZVNhdmVDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvQW50V29ya3NwYWNlU2F2ZUNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmUwMDA5OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvQW50V29ya3NwYWNlU2F2ZUNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDUwMSAgIDE3ODEyOSBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgd29ya3NwYWNlIHJlcG9ydHMgImNyYXNoIGRldGVjdGVkIiBhZnRlciBydW5uaW5nIFdTIGFudCB0YXNrIChjbWRsaW5lKQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tYW5kOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotcHVibGljIGNsYXNzIEFudFdvcmtzcGFjZVNhdmVDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gewotCQotCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGluZm8pIHRocm93cyBFeGVjdXRpb25FeGNlcHRpb24gewotCQl0cnkgewotCQkJLy8gYXR0ZW1wdCB0byBzYXZlIHRoZSBzdGF0ZSBvZiB0aGUgd29ya3NwYWNlCi0JCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuc2F2ZSh0cnVlLCBtb25pdG9yKTsKLQkJCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IG5ldyBFeGVjdXRpb25FeGNlcHRpb24oZS5nZXRNZXNzYWdlKCksIGUpOwotCQl9Ci0JfQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbWFuZC9DaGVja0ZvclNlcnZpY2VQcm9qZWN0Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tYW5kL0NoZWNrRm9yU2VydmljZVByb2plY3RDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzNTY3NDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tYW5kL0NoZWNrRm9yU2VydmljZVByb2plY3RDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tb24uVmFsaWRhdGlvblV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuU3RhdHVzRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VzUGFyc2VyOwotCi0KLS8qKgotICogVGhpcyBjb21tYW5kIGNoZWNrcyB0byBzZWUgaWYgdGhlIHNlbGVjdGVkIGNsaWVudCBwcm9qZWN0IGlzIHRoZQotICogc2VydmljZSBwcm9qZWN0LiBJZiBzbywgdGhlIHVzZXIgaXMgd2FybmVkLgotICovCi1wdWJsaWMgY2xhc3MgQ2hlY2tGb3JTZXJ2aWNlUHJvamVjdENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotICAvL1NlbGVjdGlvbkxpc3RDaG9pY2VzIHJ1bnRpbWUyQ2xpZW50VHlwZXM7Ci0gIFN0cmluZyBjbGllbnRQcm9qZWN0TmFtZTsKLSAgU3RyaW5nIHdzZGxVUkk7Ci0gIFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyOwotICAgIAotICBwdWJsaWMgQ2hlY2tGb3JTZXJ2aWNlUHJvamVjdENvbW1hbmQoKQotICB7Ci0gIH0KLSAgCi0KLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50UHJvamVjdE5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBjbGllbnRQcm9qZWN0TmFtZSA9IG5hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFdzZGxVUkkoU3RyaW5nIHdzZGxVUkkpCi0gIHsKLSAgICB0aGlzLndzZGxVUkkgPSB3c2RsVVJJOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZXNQYXJzZXIoV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXIpCi0gIHsKLSAgICB0aGlzLndlYlNlcnZpY2VzUGFyc2VyID0gd2ViU2VydmljZXNQYXJzZXI7Ci0gIH0KLSAgCi0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUuQ29tbWFuZCNleGVjdXRlKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5FbnZpcm9ubWVudCkKLSAgICovCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0gICAgSUVudmlyb25tZW50IGVudmlyb25tZW50ID0gZ2V0RW52aXJvbm1lbnQoKTsKLSAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgaWYgKGNsaWVudFByb2plY3ROYW1lPT1udWxsIHx8IHdzZGxVUkk9PW51bGwgfHwgd3NkbFVSSS5sZW5ndGgoKT09MCB8fCB3ZWJTZXJ2aWNlc1BhcnNlcj09bnVsbCkKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgCi0gICAgaWYgKGNsaWVudFByb2plY3ROYW1lPT1udWxsIHx8IGNsaWVudFByb2plY3ROYW1lLmxlbmd0aCgpPT0wKQotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAKLSAgICBJUHJvamVjdCBjbGllbnRQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KGNsaWVudFByb2plY3ROYW1lKTsKLSAgICBWYWxpZGF0aW9uVXRpbHMgdnUgPSBuZXcgVmFsaWRhdGlvblV0aWxzKCk7Ci0gICAgYm9vbGVhbiBpc1NlcnZpY2VQcm9qZWN0ID0gdnUuaXNQcm9qZWN0U2VydmljZVByb2plY3QoY2xpZW50UHJvamVjdCwgd3NkbFVSSSwgd2ViU2VydmljZXNQYXJzZXIpOwotICAgIGlmIChpc1NlcnZpY2VQcm9qZWN0KQotICAgIHsKLSAgICAgIElTdGF0dXMgd1N0YXR1cyA9IFN0YXR1c1V0aWxzLndhcm5pbmdTdGF0dXMoIE5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfV0FSTl9JU19TRVJWSUNFX1BST0pFQ1QsIG5ldyBTdHJpbmdbXXtjbGllbnRQcm9qZWN0TmFtZX0pICk7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydCh3U3RhdHVzKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChTdGF0dXNFeGNlcHRpb24gc2UpCi0gICAgICB7Ci0gICAgICAgIC8vVXNlciBkZWNpZGVkIHRvIGFib3J0LiBSZXR1cm4gYW4gZXJyb3Igc3RhdHVzCi0gICAgICAgIElTdGF0dXMgZVN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX1VTRVJfQUJPUlRFRCApOwotICAgICAgICByZXR1cm4gZVN0YXR1czsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHN0YXR1czsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tYW5kL0dlbmVyYXRlSGFuZGxlclNrZWxldG9uQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tYW5kL0dlbmVyYXRlSGFuZGxlclNrZWxldG9uQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ODc4MjYxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbWFuZC9HZW5lcmF0ZUhhbmRsZXJTa2VsZXRvbkNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDA0ICAgMTM0OTEzIHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdSAgICAgIAotICogMjAwNjA1MTcgICAxNDIwMjcgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQ7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkV3JpdGVyOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW1Xcml0ZXI7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk11bHRpU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1vbi5IYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1vbi5IYW5kbGVyU2VydmljZVJlZkhvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuSGFuZGxlclRhYmxlSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb21tb24uRmlsZVJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5lY2xpcHNlLkVudmlyb25tZW50VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotCi0KLXB1YmxpYyBjbGFzcyBHZW5lcmF0ZUhhbmRsZXJTa2VsZXRvbkNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotICBwcml2YXRlIElQYXRoIG91dHB1dExvY2F0aW9uXzsKLSAgcHJpdmF0ZSBib29sZWFuIGdlblNrZWxldG9uXzsKLSAgcHJpdmF0ZSBTdHJpbmcgaGFuZGxlck5hbWVGb3JFZGl0XyA9IG51bGw7Ci0gIAotICBwcml2YXRlIEhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyW10gaGFuZGxlclNlcnZpY2VSZWZIb2xkZXJfOwotICBwcml2YXRlIEhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcltdaGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyXzsKLSAgCi0gIHB1YmxpYyBHZW5lcmF0ZUhhbmRsZXJTa2VsZXRvbkNvbW1hbmQoKQotICB7Ci0gIH0KLSAgCi0KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLSAgCi0gICAgSVN0YXR1cyAgICAgcmV0dXJuU3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgCQotICAJaWYgKCFnZW5Ta2VsZXRvbl8pCXJldHVybiByZXR1cm5TdGF0dXM7IAotICAJCi0gICAgICAvLyBmb3JtIHRoZSBtYXAgb2YgY2xhc3NuYW1lIHRvIGxvY2F0aW9ucwotICAgICAgaWYgKGhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcl8hPW51bGwpewotICAgICAgICBmb3IgKGludCBpPTA7aTxoYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJfLmxlbmd0aDtpKyspewotICAgICAgICAgIEhhc2h0YWJsZSBoYW5kbGVyVGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgICAgICAgSVBhdGggb3V0UGF0aCA9IGhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcl9baV0uZ2V0U291cmNlT3V0cHV0UGF0aCgpOwotICAgICAgICAgIExpc3QgaGFuZGxlcnMgPSBoYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJfW2ldLmdldEhhbmRsZXJMaXN0KCk7Ci0gICAgICAgICAgZm9yIChpbnQgaj0wO2o8aGFuZGxlcnMuc2l6ZSgpO2orKyl7Ci0gICAgICAgICAgICBIYW5kbGVyVGFibGVJdGVtIGh0aSA9IChIYW5kbGVyVGFibGVJdGVtKWhhbmRsZXJzLmdldChqKTsKLSAgICAgICAgICAgIFN0cmluZyBjbGFzc05hbWUgPSBodGkuZ2V0SGFuZGxlckNsYXNzTmFtZSgpOwotICAgICAgICAgICAgaWYgKGNsYXNzTmFtZSE9bnVsbCAmJiBvdXRQYXRoIT1udWxsKQotICAgICAgICAgICAgICBoYW5kbGVyVGFibGUucHV0KGNsYXNzTmFtZSwgb3V0UGF0aCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIHJldHVyblN0YXR1cyA9IGdlbkhhbmRsZXJzQ2xhc3NlcyhoYW5kbGVyVGFibGUsIG1vbml0b3IpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgIGZvciAoaW50IGk9MDtpPGhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyXy5sZW5ndGg7aSsrKXsKLSAgICAgICAgICBIYXNodGFibGUgaGFuZGxlclRhYmxlID0gbmV3IEhhc2h0YWJsZSgpOwotICAgICAgICAgIElQYXRoIG91dFBhdGggPSBoYW5kbGVyU2VydmljZVJlZkhvbGRlcl9baV0uZ2V0U291cmNlT3V0cHV0UGF0aCgpOwotICAgICAgICAgIExpc3QgaGFuZGxlcnMgPSBoYW5kbGVyU2VydmljZVJlZkhvbGRlcl9baV0uZ2V0SGFuZGxlckxpc3QoKTsKLSAgICAgICAgICBmb3IgKGludCBqPTA7ajxoYW5kbGVycy5zaXplKCk7aisrKXsKLSAgICAgICAgICAgIEhhbmRsZXJUYWJsZUl0ZW0gaHRpID0gKEhhbmRsZXJUYWJsZUl0ZW0paGFuZGxlcnMuZ2V0KGopOwotICAgICAgICAgICAgU3RyaW5nIGNsYXNzTmFtZSA9IGh0aS5nZXRIYW5kbGVyQ2xhc3NOYW1lKCk7Ci0gICAgICAgICAgICBpZiAoY2xhc3NOYW1lIT1udWxsICYmIG91dFBhdGghPW51bGwpCi0gICAgICAgICAgICAgIGhhbmRsZXJUYWJsZS5wdXQoY2xhc3NOYW1lLCBvdXRQYXRoKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuU3RhdHVzID0gZ2VuSGFuZGxlcnNDbGFzc2VzKGhhbmRsZXJUYWJsZSwgbW9uaXRvcik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAKLSAKLSAgICByZXR1cm4gcmV0dXJuU3RhdHVzOwotCi0gIH0KLSAgCi0gIHByaXZhdGUgSVN0YXR1cyBnZW5IYW5kbGVyc0NsYXNzZXMoSGFzaHRhYmxlIGhhbmRsZXJzRm9yR2VuLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpewotICAgIElFbnZpcm9ubWVudCBlbnYgICAgICAgICAgPSBnZXRFbnZpcm9ubWVudCgpOwotICAgIE11bHRpU3RhdHVzIHN0YXR1cyAgICAgICA9IG51bGw7Ci0gICAgSVN0YXR1cyAgICAgcmV0dXJuU3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICBib29sZWFuIGVycm9yID0gZmFsc2U7Ci0gICAgCi0gICAgSVN0YXR1cyB3cml0ZVN0YXR1czsgICAgCi0gICAgRW51bWVyYXRpb24ga2V5cyA9IGhhbmRsZXJzRm9yR2VuLmtleXMoKTsKLSAgICB3aGlsZSAoa2V5cy5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgICBTdHJpbmcgY2xhc3NOYW1lID0gKFN0cmluZylrZXlzLm5leHRFbGVtZW50KCk7Ci0gICAgICAgIHdyaXRlU3RhdHVzID0gd3JpdGVGaWxlKGVudiwgY2xhc3NOYW1lLCAoSVBhdGgpaGFuZGxlcnNGb3JHZW4uZ2V0KGNsYXNzTmFtZSksIG1vbml0b3IgKTsKLSAgICAgICAgLy8gaGFuZGxlIHN0YXR1cyByZXR1cm4KLSAgICAgICAgaWYgKHdyaXRlU3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKSB7ICAvLyB3cml0ZSBzdGF0dXMgaXMgT0sgb3IgRVJST1IKLSAgICAgICAgICAgIGVycm9yID0gdHJ1ZTsKLSAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHN0YXR1cyA9IFN0YXR1c1V0aWxzLm11bHRpU3RhdHVzKCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX0dFTkVSQVRFX0hBTkRMRVJfU0tFTEVUT04sIG5ldyBJU3RhdHVzWzBdICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdGF0dXMuYWRkKHdyaXRlU3RhdHVzKTsKLSAgICAgICAgfSAKLSAgICB9Ci0gICAgCi0gICAgaWYgKGVycm9yKSAKLSAgICB7Ci0gICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgICAgIHJldHVyblN0YXR1cyA9IHN0YXR1czsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJldHVyblN0YXR1czsKLSAgICAKLSAgfQotICAKLSAgCi0gIHByaXZhdGUgSVN0YXR1cyB3cml0ZUZpbGUgKElFbnZpcm9ubWVudCBlbnYsIFN0cmluZyBjbGFzc05hbWUsIElQYXRoIG91dHB1dExvY2F0aW9uLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKSAKLSAgewotICAJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAJaW50IGluZGV4OwotICAJCi0gIAlTdHJpbmcgc2ltcGxlQ2xhc3NOYW1lID0gY2xhc3NOYW1lOwotICAJU3RyaW5nIHBhY2thZ2VOYW1lID0gbnVsbDsKLSAgCUlQYXRoIGZpbGVQYXRoID0gb3V0cHV0TG9jYXRpb247Ci0gIAlpZiAoY2xhc3NOYW1lICE9IG51bGwpIHsKLSAgCQlpbmRleCA9IGNsYXNzTmFtZS5sYXN0SW5kZXhPZignLicpOwotICAJCWlmIChpbmRleCAhPSAtMSkgewotICAJCQlzaW1wbGVDbGFzc05hbWUgPSBjbGFzc05hbWUuc3Vic3RyaW5nKGluZGV4ICsgMSk7Ci0gIAkJCXBhY2thZ2VOYW1lID0gY2xhc3NOYW1lLnN1YnN0cmluZygwLCBpbmRleCk7Ci0gIAkJCQotICAJCSAgCVN0cmluZyBwYWNrYWdlU2VnbWVudCA9IHBhY2thZ2VOYW1lOwotICAJCSAgCWludCBqID0gMDsKLSAgCQkgIAlqID0gcGFja2FnZVNlZ21lbnQuaW5kZXhPZignLicpOwotICAJCSAgCXdoaWxlIChqICE9IC0xKSB7Ci0gIAkJICAJCWZpbGVQYXRoID0gZmlsZVBhdGguYXBwZW5kKHBhY2thZ2VTZWdtZW50LnN1YnN0cmluZygwLCBqKSk7Ci0gIAkJICAJCXBhY2thZ2VTZWdtZW50ID0gcGFja2FnZVNlZ21lbnQuc3Vic3RyaW5nKGogKyAxKTsKLSAgCQkgIAkJaiA9IHBhY2thZ2VTZWdtZW50LmluZGV4T2YoJy4nKTsKLSAgCQkgIAl9Ci0gIAkJICAgIGZpbGVQYXRoID0gZmlsZVBhdGguYXBwZW5kKHBhY2thZ2VTZWdtZW50KTsKLSAgCQl9Ci0gIAkJZWxzZSB7Ci0gIAkJICBwYWNrYWdlTmFtZSA9ICIiOwotICAJCX0KLSAgCX0KLSAgCQotICAJZmlsZVBhdGggPSBmaWxlUGF0aC5hcHBlbmQoc2ltcGxlQ2xhc3NOYW1lKTsKLSAgCQotICAJZmlsZVBhdGggPSBmaWxlUGF0aC5hZGRGaWxlRXh0ZW5zaW9uKCJqYXZhIik7Ci0KLSAgCS8vIGNoZWNrIGlmIEhhbmRsZXIgYWxyZWFkeSBleGlzdHM7IGRvIG5vdCBvdmVyd3JpdGUgZXhpc3RpbmcgSGFuZGxlcnMKLSAgCUlSZXNvdXJjZSB3b3Jrc3BhY2VSZXMgPSBSZXNvdXJjZVV0aWxzLmZpbmRSZXNvdXJjZShmaWxlUGF0aCk7Ci0gIAlpZiAod29ya3NwYWNlUmVzIT1udWxsICYmIHdvcmtzcGFjZVJlcy5leGlzdHMoKSkgewotICAJCXJldHVybiBzdGF0dXM7Ci0gIAl9Ci0gIAkKLSAgCWlmIChoYW5kbGVyTmFtZUZvckVkaXRfID09IG51bGwpewotICAJCWhhbmRsZXJOYW1lRm9yRWRpdF8gPSBjbGFzc05hbWU7Ci0gICAgICAgIG91dHB1dExvY2F0aW9uXyA9IG91dHB1dExvY2F0aW9uOwotICAJfQotICAJCi0gIAlPdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtID0gRmlsZVJlc291cmNlVXRpbHMubmV3RmlsZU91dHB1dFN0cmVhbSggRW52aXJvbm1lbnRVdGlscy5nZXRSZXNvdXJjZUNvbnRleHQoZW52KSwgZmlsZVBhdGgsIG1vbml0b3IsIGVudi5nZXRTdGF0dXNIYW5kbGVyKCkpOwotICAJLy8gY3JlYXRlIGJ1ZmZlcmVkIHdyaXRlciBmb3Igd3JpdGluZyBmaWxlCi0gIAlCdWZmZXJlZFdyaXRlciBidyA9IG5ldyBCdWZmZXJlZFdyaXRlcihuZXcgT3V0cHV0U3RyZWFtV3JpdGVyKG91dHB1dFN0cmVhbSkpOwotICAJdHJ5IHsKLSAgCQlpZiAocGFja2FnZU5hbWUubGVuZ3RoKCkgIT0gMCkgewotICAJCQlidy53cml0ZSgicGFja2FnZSAiICtwYWNrYWdlTmFtZSsiOyIpOwotICAJCQlidy5uZXdMaW5lKCk7Ci0gIAkJCWJ3Lm5ld0xpbmUoKTsKLSAgCQl9Ci0gIAkJYncud3JpdGUoImltcG9ydCBqYXZheC54bWwucnBjLmhhbmRsZXIuR2VuZXJpY0hhbmRsZXI7Iik7Ci0gIAkJYncubmV3TGluZSgpOwotICAJCWJ3LndyaXRlKCJpbXBvcnQgamF2YXgueG1sLnJwYy5oYW5kbGVyLk1lc3NhZ2VDb250ZXh0OyIpOwotICAJCWJ3Lm5ld0xpbmUoKTsKLSAgCQlidy53cml0ZSgiaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Iik7Ci0gIAkJYncubmV3TGluZSgpOwotICAJCWJ3Lm5ld0xpbmUoKTsKLSAgCQkKLSAgCQlidy53cml0ZSgicHVibGljIGNsYXNzICIrc2ltcGxlQ2xhc3NOYW1lKyIgZXh0ZW5kcyBHZW5lcmljSGFuZGxlciIpOwotICAJCWJ3Lm5ld0xpbmUoKTsKLSAgCQlidy53cml0ZSgieyIpOwotICAJCWJ3Lm5ld0xpbmUoKTsKLSAgCQlidy5uZXdMaW5lKCk7Ci0gIAkJCi0gIAkJYncud3JpdGUoIiAgIHB1YmxpYyBRTmFtZVtdIGdldEhlYWRlcnMgKCkiKTsKLSAgCQlidy5uZXdMaW5lKCk7Ci0gIAkJYncud3JpdGUoIiAgIHsiKTsKLSAgCQlidy5uZXdMaW5lKCk7Ci0gIAkJYncud3JpdGUoIiAgICAgIC8vIEZpbGwgaW4gbWV0aG9kIGJvZHkiKTsKLSAgCQlidy5uZXdMaW5lKCk7Ci0gIAkJYncud3JpdGUoIiAgICAgIHJldHVybiBudWxsOyIpOwotICAJCWJ3Lm5ld0xpbmUoKTsKLSAgCQlidy53cml0ZSgiICAgfSIpOwotICAJCWJ3Lm5ld0xpbmUoKTsKLSAgCQlidy5uZXdMaW5lKCk7Ci0gIAkJYncud3JpdGUoIiAgIHB1YmxpYyBib29sZWFuIGhhbmRsZVJlcXVlc3QoIE1lc3NhZ2VDb250ZXh0IGNvbnRleHQgKSIpOwotICAJCWJ3Lm5ld0xpbmUoKTsKLSAgCQlidy53cml0ZSgiICAgeyIpOwotICAJCWJ3Lm5ld0xpbmUoKTsKLSAgCQlidy53cml0ZSgiICAgICAgLy8gRmlsbCBpbiBtZXRob2QgYm9keSBvciBkZWxldGUgbWV0aG9kIHRvIHVzZSBHZW5lcmljSGFuZGxlciIpOwotICAJCWJ3Lm5ld0xpbmUoKTsKLSAgCQlidy53cml0ZSgiICAgICAgcmV0dXJuIHRydWU7Iik7Ci0gIAkJYncubmV3TGluZSgpOwotICAJCWJ3LndyaXRlKCIgICB9Iik7Ci0gIAkJYncubmV3TGluZSgpOwotICAJCWJ3Lm5ld0xpbmUoKTsKLSAgCQlidy53cml0ZSgiICAgcHVibGljIGJvb2xlYW4gaGFuZGxlUmVzcG9uc2UoIE1lc3NhZ2VDb250ZXh0IGNvbnRleHQgKSIpOwotICAJCWJ3Lm5ld0xpbmUoKTsKLSAgCQlidy53cml0ZSgiICAgeyIpOwotICAJCWJ3Lm5ld0xpbmUoKTsKLSAgCQlidy53cml0ZSgiICAgICAgLy8gRmlsbCBpbiBtZXRob2QgYm9keSBvciBkZWxldGUgbWV0aG9kIHRvIHVzZSBHZW5lcmljSGFuZGxlciAiKTsKLSAgCQlidy5uZXdMaW5lKCk7Ci0gIAkJYncud3JpdGUoIiAgICAgIHJldHVybiB0cnVlOyIpOwotICAJCWJ3Lm5ld0xpbmUoKTsKLSAgCQlidy53cml0ZSgiICAgfSIpOwotICAJCWJ3Lm5ld0xpbmUoKTsKLSAgCQlidy5uZXdMaW5lKCk7Ci0gIAkJYncud3JpdGUoIiAgIHB1YmxpYyBib29sZWFuIGhhbmRsZUZhdWx0KCBNZXNzYWdlQ29udGV4dCBjb250ZXh0ICkiKTsKLSAgCQlidy5uZXdMaW5lKCk7Ci0gIAkJYncud3JpdGUoIiAgIHsiKTsKLSAgCQlidy5uZXdMaW5lKCk7Ci0gIAkJYncud3JpdGUoIiAgICAgIC8vIEZpbGwgaW4gbWV0aG9kIGJvZHkgb3IgZGVsZXRlIG1ldGhvZCB0byB1c2UgR2VuZXJpY0hhbmRsZXIiKTsKLSAgCQlidy5uZXdMaW5lKCk7Ci0gIAkJYncud3JpdGUoIiAgICAgIHJldHVybiB0cnVlOyIpOwotICAJCWJ3Lm5ld0xpbmUoKTsKLSAgCQlidy53cml0ZSgiICAgfSIpOwotICAJCWJ3Lm5ld0xpbmUoKTsKLSAgCQkKLSAgCQlidy5uZXdMaW5lKCk7Ci0gIAkJYncud3JpdGUoIn0iKTsKLSAgCQlidy5jbG9zZSgpOwotICAJCXN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7CQotICAJfSAKLSAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkgCi0gICAgewotICAJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX1dSSVRFX0ZJTEUsIG5ldyBTdHJpbmdbXXsgY2xhc3NOYW1lIH0pLCBlICk7Ci0gIAkJaWYgKGJ3ICE9IG51bGwpIHsKLSAgCQkJdHJ5IHsKLSAgCQkJCWJ3LmNsb3NlKCk7Ci0gIAkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUxKSB7Ci0gIAkJCX0KLSAgCQl9Ci0gIAl9Ci0gIAlyZXR1cm4gc3RhdHVzOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRHZW5Ta2VsZXRvbkVuYWJsZWQoYm9vbGVhbiBnZW5Ta2VsZXRvbikKLSAgewotICAJdGhpcy5nZW5Ta2VsZXRvbl8gPSBnZW5Ta2VsZXRvbjsKLSAgfQotICAKLSAgcHVibGljIElQcm9qZWN0IGdldFByb2plY3QoKXsKLSAgCUlQcm9qZWN0IHByb2plY3QgPSBudWxsOwotICAJaWYgKG91dHB1dExvY2F0aW9uXyE9bnVsbCl7Ci0gIAkJcHJvamVjdCA9IFJlc291cmNlVXRpbHMuZ2V0UHJvamVjdE9mKG91dHB1dExvY2F0aW9uXyk7Ci0gIAl9Ci0gIAlyZXR1cm4gcHJvamVjdDsKLSAgfQotICAKLSAgcHVibGljIExpc3QgZ2V0Q2xhc3NOYW1lcygpewotICAJTGlzdCBjbGFzc2VzID0gbmV3IEFycmF5TGlzdCgpOwotICAJaWYgKGhhbmRsZXJOYW1lRm9yRWRpdF8hPW51bGwpewotICAJCWNsYXNzZXMuYWRkKGhhbmRsZXJOYW1lRm9yRWRpdF8pOwotICAJfQotICAJcmV0dXJuIGNsYXNzZXM7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBBbiBhcnJheSBvZiBIYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJzCi0gICAqIEByZXR1cm4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyKEhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyW10gaGFuZGxlckhvbGRlcnMpewotICAgIHRoaXMuaGFuZGxlclNlcnZpY2VSZWZIb2xkZXJfID0gaGFuZGxlckhvbGRlcnM7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBBbiBhcnJheSBvZiBIYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJzCi0gICAqIEByZXR1cm4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcnMoSGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyW10gaGFuZGxlckhvbGRlcnMpewotICAgIHRoaXMuaGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyXyA9IGhhbmRsZXJIb2xkZXJzOwotICB9Ci0gIAotIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tYW5kL0xpc3RPcHRpb25zQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tYW5kL0xpc3RPcHRpb25zQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTFhN2MyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbWFuZC9MaXN0T3B0aW9uc0NvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucGx1Z2luLldlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LldlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlclR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlckNvcmU7Ci0KLS8qKgotICogQ29tbWFuZCBsaXN0cyB2YWxpZCBwcm9wZXJ0eSB2YWx1ZXMgd2hlcmUgcmVxdWVzdGVkLgotICogUmVxdWVzdHMgbWFkZSB2aWEgYSBBbnQgcHJvcGVydHkgdmFsdWUgc2V0dGluZyB3aGljaCBpcyBtYXBwZWQgdG8gdGhpcyBjb21tYW5kIGluIHRoZSBwbHVnaW4ueG1sIAotICovCi0KLXB1YmxpYyBjbGFzcyBMaXN0T3B0aW9uc0NvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiB7Ci0KLQlwcml2YXRlIGJvb2xlYW4gcnVudGltZXNfID0gZmFsc2U7Ci0JcHJpdmF0ZSBib29sZWFuIHNlcnZlcnNfID0gZmFsc2U7Ci0JCi0JcHVibGljIElTdGF0dXMgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgaW5mbykKLQkJCXRocm93cyBFeGVjdXRpb25FeGNlcHRpb24gewotCQkJCSAgCQotCQlpZiAocnVudGltZXNfKQotCQl7CQkJCQotCQkJCVN0cmluZ1tdIHR5cGVJZHMgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTZXJ2aWNlVHlwZUxhYmVscygpLmdldElkc18oKTsKLQkJCSAgICBWZWN0b3IgcnVudGltZUlkcyA9IG5ldyBWZWN0b3IoKTsKLQkJCQkJZm9yIChpbnQgayA9IDA7IGsgPCB0eXBlSWRzLmxlbmd0aDsgaysrKSB7Ci0JCQkJCQkKLQkJCQkJCVN0cmluZyB0eXBlSWQgPSB0eXBlSWRzW2tdOwkJCQkJCQotCQkJCSAgICAJU3RyaW5nW10gcnVudGltZXMgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRSdW50aW1lc0J5U2VydmljZVR5cGUodHlwZUlkKTsJCQkJICAgIAkKLQkJCQkJCQkJICAgIAotCQkJCSAgICAJZm9yIChpbnQgaiA9IDA7IGogPCBydW50aW1lcy5sZW5ndGg7IGorKykgewotCQkJCSAgICAJCVN0cmluZyBydW50aW1lID0gcnVudGltZXNbal07Ci0JCQkJICAgIAkJaWYgKCFydW50aW1lSWRzLmNvbnRhaW5zKHJ1bnRpbWUpKQotCQkJCSAgICAJCXsKLQkJCQkgICAgCQkJcnVudGltZUlkcy5hZGQocnVudGltZSk7CQotCQkJCSAgICAJCX0KLQkJCQkJCX0KLQkJCQkJfQotCQkKLQkJCQkJU3RhdHVzIHN0YXR1c09iaiA9IG5ldyBTdGF0dXMoSVN0YXR1cy5JTkZPLCAKLQkJCQkJCQlXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5JRCwKLQkJCQkJCQlJU3RhdHVzLk9LLAotCQkJCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfSU5GT19BTlRfUlVOVElNRV9IRUFESU5HLCAKLQkJCQkJCQludWxsKTsJCQkJCQotCQkJCQlnZXRFbnZpcm9ubWVudCgpLmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRJbmZvKHN0YXR1c09iaik7Ci0JCQkJCQotCSAgICAgICAgCi0JCQlmb3IgKEl0ZXJhdG9yIGl0ZXJhdG9yID0gcnVudGltZUlkcy5pdGVyYXRvcigpOyBpdGVyYXRvcgotCQkJCQkuaGFzTmV4dCgpOykgewkJCQotCQkJCSAgZ2V0RW52aXJvbm1lbnQoKS5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0SW5mbyhuZXcgU3RhdHVzKElTdGF0dXMuSU5GTywgCi0JCQkJCQlXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5JRCwKLQkJCQkJCUlTdGF0dXMuT0ssIAotCQkJCQkJTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19JTkZPX0FOVF9TRVJWRVJfUlVOVElNRSwKLQkJCQkJCQkJaXRlcmF0b3IubmV4dCgpKSwgbnVsbCkpOwotCQkJfQotCQkJCQotCQkJCi0JCSAgICBTdHJpbmdbXSBjbGllbnRSdW50aW1lcyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldEFsbFJ1bnRpbWVzRm9yQ2xpZW50U2lkZSgpOwotCQkgICAgCi0JCQlmb3IgKGludCBpID0gMDsgaSA8IGNsaWVudFJ1bnRpbWVzLmxlbmd0aDsgaSsrKSB7CQkJCQotCQkJCQotCQkJCWdldEVudmlyb25tZW50KCkuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEluZm8obmV3IFN0YXR1cyhJU3RhdHVzLklORk8sIAotCQkJCQkJV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uSUQsCi0JCQkJCQlJU3RhdHVzLk9LLCAKLQkJCQkJCU5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfSU5GT19BTlRfQ0xJRU5UX1JVTlRJTUUsCi0JCQkJCQkJCWNsaWVudFJ1bnRpbWVzW2ldKSwgbnVsbCkpOwotCQkJfQotCQl9Ci0JCQotCQlpZiAoc2VydmVyc18pCi0JCXsJCQkKLQkJCWdldEVudmlyb25tZW50KCkuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEluZm8obmV3IFN0YXR1cyhJU3RhdHVzLklORk8sIAotCQkJCQlXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5JRCwKLQkJCQkJSVN0YXR1cy5PSywgCi0JCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfSU5GT19BTlRfU0VSVkVSX0hFQURJTkcsIG51bGwpKTsKLQkJCQotCQkJSVNlcnZlclR5cGVbXSBzZXJ2ZXJUeXBlcyA9IFNlcnZlckNvcmUuZ2V0U2VydmVyVHlwZXMoKTsKLQkJICAgICAgZm9yIChpbnQgaT0wOyBpPHNlcnZlclR5cGVzLmxlbmd0aDsgaSsrKQotCQkgICAgICB7CQkgICAgICAgIAotCQkJCWdldEVudmlyb25tZW50KCkuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEluZm8obmV3IFN0YXR1cyhJU3RhdHVzLklORk8sIAotCQkJCQkJV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uSUQsCi0JCQkJCQlJU3RhdHVzLk9LLCAKLQkJCQkJCU5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfSU5GT19BTlRfU0VSVkVSLAotCQkJCQkJCQlzZXJ2ZXJUeXBlc1tpXS5nZXRJZCgpKSwgbnVsbCkpOwotCi0JCSAgICAgIH0KLQkJfSAgCi0JCSAgCi0JCXJldHVybiBPS19TVEFUVVM7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldExpc3RSdW50aW1lcyhib29sZWFuIHZhbHVlKQotCXsJCQotCQlydW50aW1lc189dmFsdWU7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldExpc3RTZXJ2ZXJzKGJvb2xlYW4gdmFsdWUpCi0JewkJCi0JCXNlcnZlcnNfPXZhbHVlOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbWFuZC9PcGVuSmF2YUVkaXRvckNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbWFuZC9PcGVuSmF2YUVkaXRvckNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNiZWRkNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvT3BlbkphdmFFZGl0b3JDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQwNCAxMzQ5MTMgICBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUgICAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5qb2JzLkpvYjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JSmF2YVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LnVpLkphdmFVSTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5wbHVnaW4uV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wcm9ncmVzcy5VSUpvYjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi0KLXB1YmxpYyBjbGFzcyBPcGVuSmF2YUVkaXRvckNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotICBwcml2YXRlIExpc3QgY2xhc3NOYW1lczsKLSAgcHJpdmF0ZSBJUHJvamVjdCBwcm9qZWN0OwotICBwcml2YXRlIGJvb2xlYW4gaXNFbmFibGVkXyA9IHRydWU7ICAvLyBpcyB0cnVlIGJ5IGRlZmF1bHQKLQotICBwdWJsaWMgT3BlbkphdmFFZGl0b3JDb21tYW5kKCkKLSAgewotICB9Ci0KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLSAgICBpZiAoaXNFbmFibGVkXykgewotICAgICAgT3BlbkphdmFFZGl0b3JKb2Igam9iID0gbmV3IE9wZW5KYXZhRWRpdG9ySm9iKGNsYXNzTmFtZXMsIHByb2plY3QpOwotICAgICAgam9iLnNldFByaW9yaXR5KEpvYi5MT05HKTsKLSAgICAgIGpvYi5zY2hlZHVsZSgpOwotICAgIH0KLSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldENsYXNzTmFtZXMoTGlzdCBjbGFzc05hbWVzKQotICB7Ci0gICAgdGhpcy5jbGFzc05hbWVzID0gY2xhc3NOYW1lczsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFByb2plY3QoSVByb2plY3QgcHJvamVjdCkKLSAgewotICAgIHRoaXMucHJvamVjdCA9IHByb2plY3Q7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldElzRW5hYmxlZChib29sZWFuIGlzRW5hYmxlZCl7Ci0gICAgdGhpcy5pc0VuYWJsZWRfID0gaXNFbmFibGVkOwotICB9Ci0gIAotICBwcml2YXRlIGNsYXNzIE9wZW5KYXZhRWRpdG9ySm9iIGV4dGVuZHMgVUlKb2IKLSAgewotICAgIHByaXZhdGUgTGlzdCBjbGFzc05hbWVzOwotICAgIHByaXZhdGUgSVByb2plY3QgcHJvamVjdDsKLQotICAgIHB1YmxpYyBPcGVuSmF2YUVkaXRvckpvYihMaXN0IGNsYXNzTmFtZXMsIElQcm9qZWN0IHByb2plY3QpCi0gICAgewotICAgICAgc3VwZXIoIm9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tYW5kLk9wZW5KYXZhRWRpdG9ySm9iIik7Ci0gICAgICB0aGlzLmNsYXNzTmFtZXMgPSBjbGFzc05hbWVzOwotICAgICAgdGhpcy5wcm9qZWN0ID0gcHJvamVjdDsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIElTdGF0dXMgcnVuSW5VSVRocmVhZChJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpCi0gICAgewotICAgICAgaWYgKHByb2plY3QgIT0gbnVsbCAmJiBjbGFzc05hbWVzICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIElKYXZhUHJvamVjdCBqYXZhUHJvamVjdCA9IEphdmFDb3JlLmNyZWF0ZShwcm9qZWN0KTsKLSAgICAgICAgZm9yIChJdGVyYXRvciBpdCA9IGNsYXNzTmFtZXMuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBjbGFzc05hbWUgPSAoU3RyaW5nKWl0Lm5leHQoKTsKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBJVHlwZSB0eXBlID0gamF2YVByb2plY3QuZmluZFR5cGUoY2xhc3NOYW1lKTsKLSAgICAgICAgICAgIEphdmFVSS5vcGVuSW5FZGl0b3IodHlwZSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXMob3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1cy5FUlJPUiwgV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uSUQsIDAsIE5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfVU5BQkxFX1RPX09QRU5fSkFWQV9FRElUT1IsIG5ldyBTdHJpbmdbXXtjbGFzc05hbWUsIHByb2plY3QuZ2V0TmFtZSgpfSksIHQpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKHByb2plY3QhPW51bGwgfHwgY2xhc3NOYW1lcy5pc0VtcHR5KCkpewotICAgICAgICAvLyBkbyBub3RoaW5nIDsgbm90aGluZyB0byBvcGVuCi0gICAgICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gbmV3IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXMob3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1cy5FUlJPUiwgV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uSUQsIDAsIE5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfVU5BQkxFX1RPX09QRU5fSkFWQV9FRElUT1IsIG5ldyBTdHJpbmdbXXtjbGFzc05hbWVzICE9IG51bGwgPyBjbGFzc05hbWVzLnRvU3RyaW5nKCkgOiAiIiwgcHJvamVjdCAhPSBudWxsID8gcHJvamVjdC5nZXROYW1lKCkgOiAiIn0pLCBudWxsKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbWFuZC9TdGFydFNlcnZlckNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbWFuZC9TdGFydFNlcnZlckNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ZhMzAyZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvU3RhcnRTZXJ2ZXJDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNDI2ICAgMTYyMjg3IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBTZXJ2ZXIgcHVibGlzaCBjYW5jZWwgYnV0dG9uIHVuYXZhaWxhYmxlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbWFuZDsKLQotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25UYXJnZXRFeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuSUxhdW5jaE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5Qcm9ncmVzc01vbml0b3JEaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uub3BlcmF0aW9uLklSdW5uYWJsZVdpdGhQcm9ncmVzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uQ29uc3VtcHRpb25NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5FbnZpcm9ubWVudFNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JTG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlckNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLmludGVybmFsLlNlcnZlcjsKLQotLyoqCi0gKiAoUmUpU3RhcnRzIGFuZCBwdWJsaXNoZXMgdGhlIHNlcnZlciBzcGVjaWZlZCBieSB0aGUgc2VydmVySW5zdGFuY2VJZCBhdHRyaWJ1dGUuCi0gKiAKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBTdGFydFNlcnZlckNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotICBwcml2YXRlIElMb2cgbG9nOwotICBwcml2YXRlIGJvb2xlYW4gZG9Bc3luY1B1Ymxpc2hfOwotICAKLSAgcHJpdmF0ZSBTdHJpbmcgc2VydmVySW5zdGFuY2VJZDsKLQkKLSAgCi0gIHB1YmxpYyBTdGFydFNlcnZlckNvbW1hbmQoKQotICB7Ci0gICAgbG9nICAgICAgICAgICAgID0gRW52aXJvbm1lbnRTZXJ2aWNlLmdldEVjbGlwc2VMb2coKTsKLSAgICBkb0FzeW5jUHVibGlzaF8gPSB0cnVlOwotICB9Ci0JIAotICBwdWJsaWMgU3RhcnRTZXJ2ZXJDb21tYW5kKCBib29sZWFuIGRvQXN5bmNQdWJsaXNoICkKLSAgewotICAgIHRoaXMoKTsKLSAgICAKLSAgICBkb0FzeW5jUHVibGlzaF8gPSBkb0FzeW5jUHVibGlzaDsKLSAgfQotCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0gICAgSUVudmlyb25tZW50IGVudiA9IGdldEVudmlyb25tZW50KCk7Ci0gICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCi0gICAgSVNlcnZlciBzZXJ2ZXIgPSBTZXJ2ZXJDb3JlLmZpbmRTZXJ2ZXIoc2VydmVySW5zdGFuY2VJZCk7Ci0gICAgaWYgKHNlcnZlciA9PSBudWxsKQotICAgIHsKLSAgICAgIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX0lOU1RBTkNFX05PVF9GT1VORCk7Ci0gICAgICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0KLQotICAgIGludCBzZXJ2ZXJTdGF0ZSA9IHNlcnZlci5nZXRTZXJ2ZXJTdGF0ZSgpOwotCi0gICAgLy8gIFB1Ymxpc2ggaWYgcmVxdWlyZWQKLSAgICBpZiAoKChTZXJ2ZXIpc2VydmVyKS5zaG91bGRQdWJsaXNoKCkpIHsKLSAgICAJaWYgKHNlcnZlci5jYW5QdWJsaXNoKCkuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLk9LKQotICAgICAgICB7Ci0gICAgICAgICAgc3RhdHVzID0gcHVibGlzaChzZXJ2ZXIsIElTZXJ2ZXIuUFVCTElTSF9JTkNSRU1FTlRBTCwgbW9uaXRvciApOwotICAgICAgICAgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpCi0gICAgICAgICAgewotICAgICAgICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy8gIHN0YXJ0L3Jlc3RhcnQgc2VydmVyIGlmIHJlcXVpcmVkCi0gICAgCQotICAgIHN3aXRjaCAoc2VydmVyU3RhdGUpCi0gICAgewotICAgICAgY2FzZSBJU2VydmVyLlNUQVRFX1NUT1BQRUQ6Ci0gICAgICAgIGlmIChzZXJ2ZXIuY2FuU3RhcnQoSUxhdW5jaE1hbmFnZXIuUlVOX01PREUpLmdldFNldmVyaXR5KCk9PUlTdGF0dXMuT0spCi0gICAgICAgIHsKLSAgICAgICAgICBzdGF0dXMgPSBzdGFydChzZXJ2ZXIsIG1vbml0b3IgKTsKLSAgICAgICAgICBpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLSAgICAgICAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgICAgICAgfSAgICAgICAKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgSVNlcnZlci5TVEFURV9TVEFSVEVEOiAgICAJCi0gICAgCWJvb2xlYW4gc2hvdWxkUmVzdGFydCA9ICgoU2VydmVyKXNlcnZlcikuc2hvdWxkUmVzdGFydCgpOyAgICAJCi0gICAgCQotICAgIAlpZiAoc2hvdWxkUmVzdGFydCAmJiBzZXJ2ZXIuY2FuUmVzdGFydChJTGF1bmNoTWFuYWdlci5SVU5fTU9ERSkuZ2V0U2V2ZXJpdHkoKT09SVN0YXR1cy5PSykKLSAgICAgICAgewotICAgICAgICAgIHN0YXR1cyA9IHJlc3RhcnQoc2VydmVyLCBtb25pdG9yICk7Ci0gICAgICAgICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgICAgICAgIH0gICAgICAgCi0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHN0YXR1czsKLSAgfQotCi0gIHByaXZhdGUgSVN0YXR1cyBwdWJsaXNoKGZpbmFsIElTZXJ2ZXIgc2VydmVyLCBmaW5hbCBpbnQga2luZCwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkKLSAgewotICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICBmaW5hbCBJU3RhdHVzW10gaXN0YXR1cyA9IG5ldyBJU3RhdHVzWzFdOyAKLSAgICBtb25pdG9yLnN1YlRhc2soQ29uc3VtcHRpb25NZXNzYWdlcy5QUk9HUkVTU19JTkZPX1BVQkxJU0hJTkdfU0VSVkVSKTsKLSAgICBJUnVubmFibGVXaXRoUHJvZ3Jlc3MgcnVubmFibGUgPSBuZXcgSVJ1bm5hYmxlV2l0aFByb2dyZXNzKCkKLQl7Ci0gIAkJcHVibGljIHZvaWQgcnVuKElQcm9ncmVzc01vbml0b3Igc2hlbGxNb25pdG9yKSB0aHJvd3MgSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiwgSW50ZXJydXB0ZWRFeGNlcHRpb24KLQkJewotICAJCQlpc3RhdHVzWzBdID0gc2VydmVyLnB1Ymxpc2goa2luZCwgc2hlbGxNb25pdG9yKTsKLQkJfSAgCQkKLQl9OwotCQotCXRyeQotCXsKLQkJaWYoIGRvQXN5bmNQdWJsaXNoXyApCi0JCXsJCi0JCSAgUHJvZ3Jlc3NNb25pdG9yRGlhbG9nIGRpYWxvZyA9IG5ldyBQcm9ncmVzc01vbml0b3JEaWFsb2cobnVsbCk7Ci0JCSAgZGlhbG9nLnJ1bih0cnVlLCB0cnVlLCBydW5uYWJsZSk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCSAgcnVubmFibGUucnVuKCBtb25pdG9yICk7Ci0JCX0KLQkJCi0JfQotCWNhdGNoKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaXRlKQotCXsKLQkgIGlzdGF0dXNbMF0gPSBuZXcgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1cyggSVN0YXR1cy5FUlJPUiwgImlkIiwgMCwgaXRlLmdldE1lc3NhZ2UoKSwgaXRlICk7Ci0JICBpdGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQotCWNhdGNoKEludGVycnVwdGVkRXhjZXB0aW9uIGllKQotCXsKLQkgIGlzdGF0dXNbMF0gPSBuZXcgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1cyggSVN0YXR1cy5FUlJPUiwgImlkIiwgMCwgaWUuZ2V0TWVzc2FnZSgpLCBpZSApOwotCSAgaWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQotICAgIAotICAgIAotCWlmIChpc3RhdHVzWzBdLmdldFNldmVyaXR5KCkgIT0gSVN0YXR1cy5PSykKLSAgICB7Ci0gICAgICBzdGF0dXMgPSBpc3RhdHVzWzBdOwotICAgICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuQ0FOQ0VMKQotICAgIAkgIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCIiKTsKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQotICAgIAotICAgIGxvZy5sb2coSUxvZy5JTkZPLCA1MDUxLCB0aGlzLCAicHVibGlzaFByb2plY3QiLCAiSVNlcnZlcj0iICsgc2VydmVyICsgIiwgUHVibGlzaCBjb21tYW5kIGNvbXBsZXRlZCIpOwotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0KLQotICBwcml2YXRlIElTdGF0dXMgcmVzdGFydChJU2VydmVyIHNlcnZlciwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkKLSAgewotICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBtb25pdG9yLnN1YlRhc2soQ29uc3VtcHRpb25NZXNzYWdlcy5QUk9HUkVTU19JTkZPX1NUQVJUSU5HX1NFUlZFUik7Ci0gICAgICBzZXJ2ZXIuc3luY2hyb25vdXNSZXN0YXJ0KElMYXVuY2hNYW5hZ2VyLlJVTl9NT0RFLCBtb25pdG9yKTsKLSAgICAgIGxvZy5sb2coSUxvZy5JTkZPLCA1MDUyLCB0aGlzLCAiZXhlY3V0ZSIsICJJU2VydmVyPSIgKyBzZXJ2ZXIgKyAiLCBSZXN0YXJ0IGNvbW1hbmQgY29tcGxldGVkIik7Ci0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9TRVJWRVIsIGUpOwotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICB9Ci0KLSAgfQotCi0gIHByaXZhdGUgSVN0YXR1cyBzdGFydChJU2VydmVyIHNlcnZlciwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkKLSAgewotICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBtb25pdG9yLnN1YlRhc2soQ29uc3VtcHRpb25NZXNzYWdlcy5QUk9HUkVTU19JTkZPX1NUQVJUSU5HX1NFUlZFUik7Ci0gICAgICBzZXJ2ZXIuc3luY2hyb25vdXNTdGFydChJTGF1bmNoTWFuYWdlci5SVU5fTU9ERSwgbW9uaXRvcik7Ci0gICAgICBsb2cubG9nKElMb2cuSU5GTywgNTA1MywgdGhpcywgImV4ZWN1dGUiLCAiSVNlcnZlcj0iICsgc2VydmVyICsgIiwgU3RhcnQgY29tbWFuZCBjb21wbGV0ZWQiKTsKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX1NFUlZFUiwgZSk7Ci0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZlckluc3RhbmNlSWQoU3RyaW5nIHNlcnZlckluc3RhbmNlSWQpCi0gIHsKLSAgICB0aGlzLnNlcnZlckluc3RhbmNlSWQgPSBzZXJ2ZXJJbnN0YW5jZUlkOwotICB9CQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tYW5kL1dTSU5vbkNvbXBsaWFudFJ1bnRpbWVDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvV1NJTm9uQ29tcGxpYW50UnVudGltZUNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTA3Y2RhZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvV1NJTm9uQ29tcGxpYW50UnVudGltZUNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyMCAgIDEyMDcxNCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuV3N0V1NQbHVnaW5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V1NJQVBDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V1NJU1NCUENvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzLldTSUNvbXBsaWFuY2VVdGlsczsKLQotCi0KLXB1YmxpYyBjbGFzcyBXU0lOb25Db21wbGlhbnRSdW50aW1lQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0KLSAgcHJpdmF0ZSBJUHJvamVjdCBzZXJ2aWNlUHJvamVjdF87Ci0JCi0gIHB1YmxpYyBXU0lOb25Db21wbGlhbnRSdW50aW1lQ29tbWFuZCgpCi0gIHsKLSAgfSAKLSAgCi0KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLSAgICBJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQgPSBnZXRFbnZpcm9ubWVudCgpOwotICAgIAotICAJUGVyc2lzdGVudFdTSVNTQlBDb250ZXh0IHdzaVNTQlBDb250ZXh0ID0gV1NQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRXU0lTU0JQQ29udGV4dCgpOyAKLSAgCVBlcnNpc3RlbnRXU0lBUENvbnRleHQgd3NpQVBDb250ZXh0ID0gV1NQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRXU0lBUENvbnRleHQoKTsgCi0gICAgVmVjdG9yIHN0YXR1c1NTQlAgPSBuZXcgVmVjdG9yKCk7Ci0gICAgc3RhdHVzU1NCUC5hZGQoIG5ldyBTdGF0dXMoIFdTSUNvbXBsaWFuY2VVdGlscy5nZXRXU0lTZXZlcml0eShzZXJ2aWNlUHJvamVjdF8sIHdzaVNTQlBDb250ZXh0KSwgImlkIiwgMCwKLSAgICAgICAgV3N0V1NQbHVnaW5NZXNzYWdlcy5XU0lfU1NCUF9JTkNPTVBMSUFOVF9SVU5USU1FLCBudWxsICkgKTsKLSAgICBTdGF0dXNbXSBzdGF0dXNlc1NTQlAgPSAoU3RhdHVzW10pIHN0YXR1c1NTQlAudG9BcnJheShuZXcgU3RhdHVzW3N0YXR1c1NTQlAuc2l6ZSgpXSk7Ci0gICAgCi0gICAgVmVjdG9yIHN0YXR1c0FQID0gbmV3IFZlY3RvcigpOwotICAgIHN0YXR1c0FQLmFkZCggbmV3IFN0YXR1cyggV1NJQ29tcGxpYW5jZVV0aWxzLmdldFdTSVNldmVyaXR5KHNlcnZpY2VQcm9qZWN0Xywgd3NpQVBDb250ZXh0KSwgImlkIiwgMCwgCi0gICAgCQlXc3RXU1BsdWdpbk1lc3NhZ2VzLldTSV9BUF9JTkNPTVBMSUFOVF9SVU5USU1FLCBudWxsICkpOwotICAgIFN0YXR1c1tdIHN0YXR1c2VzQVAgPSAoU3RhdHVzW10pIHN0YXR1c0FQLnRvQXJyYXkobmV3IFN0YXR1c1tzdGF0dXNBUC5zaXplKCldKTsKLQotICAgIGlmIChXU0lDb21wbGlhbmNlVXRpbHMuY2hlY2tXU0lDb21wbGlhbmNlIChlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCksIHN0YXR1c2VzQVAsIHNlcnZpY2VQcm9qZWN0Xywgd3NpQVBDb250ZXh0KSkgCi0gICAgewotICAgIAlpZiAoV1NJQ29tcGxpYW5jZVV0aWxzLmNoZWNrV1NJQ29tcGxpYW5jZSAoZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLCBzdGF0dXNlc1NTQlAsIHNlcnZpY2VQcm9qZWN0Xywgd3NpU1NCUENvbnRleHQpKSAKLSAgICAgIHsKLSAgICAJCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICAgIAl9IAotICAgICAgZWxzZSAKLSAgICAgIHsKLSAgICAJICAvLyBTZXQgbWVzc2FnZSB0byBlbXB0eSBzdHJpbmcgc28gdGhhdCBhbiBlcnJvciBkaWFsb2cgZG9lcwotICAgIAkgIC8vIG5vdCBwb3AtdXAgdGVsbGluZyB0aGUgdXNlciB0aGF0IHRoZXkgY2Fubm90IGNvbnRpbnVlCi0gICAgCSAgLy8gYmVjYXVzZSB0aGV5IGNob29zZSBub3QgdG8gaWdub3JlIHRoZSBXUy1JIG5vbi1jb21wbGlhbmNlIHdhcm5pbmcuCi0gICAgCQlyZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoICIiICk7Ci0gICAgCX0KLSAgICB9IAotICAgIGVsc2UgCi0gICAgewotICAgIAkvLyBTZXQgbWVzc2FnZSB0byBlbXB0eSBzdHJpbmcgc28gdGhhdCBhbiBlcnJvciBkaWFsb2cgZG9lcwotICAJICAJLy8gbm90IHBvcC11cCB0ZWxsaW5nIHRoZSB1c2VyIHRoYXQgdGhleSBjYW5ub3QgY29udGludWUKLSAgCSAgCS8vIGJlY2F1c2UgdGhleSBjaG9vc2Ugbm90IHRvIGlnbm9yZSB0aGUgV1MtSSBub24tY29tcGxpYW5jZSB3YXJuaW5nLgotCQkgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggIiIgKTsKLQl9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VQcm9qZWN0KElQcm9qZWN0IHNlcnZpY2VQcm9qZWN0KSB7Ci0JdGhpcy5zZXJ2aWNlUHJvamVjdF8gPSBzZXJ2aWNlUHJvamVjdDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tYW5kL2RhdGEvRWNsaXBzZUlQYXRoMlVSTFN0cmluZ1RyYW5zZm9ybWVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvZGF0YS9FY2xpcHNlSVBhdGgyVVJMU3RyaW5nVHJhbnNmb3JtZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2EzNWUzOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvZGF0YS9FY2xpcHNlSVBhdGgyVVJMU3RyaW5nVHJhbnNmb3JtZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbWFuZC5kYXRhOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5UcmFuc2Zvcm1lcjsKLQotCi1wdWJsaWMgY2xhc3MgRWNsaXBzZUlQYXRoMlVSTFN0cmluZ1RyYW5zZm9ybWVyIGltcGxlbWVudHMgVHJhbnNmb3JtZXIKLXsKLSAgcHVibGljIE9iamVjdCB0cmFuc2Zvcm0oT2JqZWN0IHZhbHVlKQotICB7Ci0gICAgU3RyaW5nIHMgPSB2YWx1ZS50b1N0cmluZygpOwotICAgIGlmIChzLmluZGV4T2YoIjoiKSA8IDApCi0gICAgewotICAgICAgSVJlc291cmNlIHJlcyA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZmluZE1lbWJlcih2YWx1ZS50b1N0cmluZygpKTsKLSAgICAgIGlmIChyZXMuZXhpc3RzKCkpCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgcyA9IHJlcy5nZXRMb2NhdGlvbigpLnRvRmlsZSgpLnRvVVJMKCkudG9TdHJpbmcoKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIG11cmxlKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbWFuZC9kYXRhL1Byb2plY3ROYW1lMklQcm9qZWN0VHJhbnNmb3JtZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbWFuZC9kYXRhL1Byb2plY3ROYW1lMklQcm9qZWN0VHJhbnNmb3JtZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM2NWY0MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvZGF0YS9Qcm9qZWN0TmFtZTJJUHJvamVjdFRyYW5zZm9ybWVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMjEgICAxMjQzMDIgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQuZGF0YTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLlRyYW5zZm9ybWVyOwotCi1wdWJsaWMgY2xhc3MgUHJvamVjdE5hbWUySVByb2plY3RUcmFuc2Zvcm1lciBpbXBsZW1lbnRzIFRyYW5zZm9ybWVyCi17Ci0gIHB1YmxpYyBPYmplY3QgdHJhbnNmb3JtKE9iamVjdCB2YWx1ZSkKLSAgewotICAgIGlmICh2YWx1ZSAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyBwcm9qZWN0ID0gKFN0cmluZykgdmFsdWU7Ci0gICAgICBpbnQgc2xhc2hJbmRleCA9IHByb2plY3QuaW5kZXhPZignLycpOwotICAgICAgU3RyaW5nIHByb2plY3ROYW1lID0gcHJvamVjdDsKLQotICAgICAgaWYgKHNsYXNoSW5kZXggIT0gLTEpCi0gICAgICB7Ci0gICAgICAgIHByb2plY3ROYW1lID0gcHJvamVjdC5zdWJzdHJpbmcoMCwgc2xhc2hJbmRleCk7Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QocHJvamVjdE5hbWUpOwotICAgIH0gZWxzZQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tYW5kL2RhdGEvU2VydmVySW5zdFRvSVNlcnZlclRyYW5zZm9ybWVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvZGF0YS9TZXJ2ZXJJbnN0VG9JU2VydmVyVHJhbnNmb3JtZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmY4ODFjYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1hbmQvZGF0YS9TZXJ2ZXJJbnN0VG9JU2VydmVyVHJhbnNmb3JtZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoKLSAqIENyZWF0ZWQgb24gQXByIDIwLCAyMDA0Ci0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQuZGF0YTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlckNvcmU7Ci0KLS8qCi0gKiBUcmFuc2Zvcm1zIGEgc2VydmVyIGluc3RhbmNlIGlkIHRvIGFuIElTZXJ2ZXIKLSAqLwotcHVibGljIGNsYXNzIFNlcnZlckluc3RUb0lTZXJ2ZXJUcmFuc2Zvcm1lciBpbXBsZW1lbnRzIFRyYW5zZm9ybWVyIHsKLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5UcmFuc2Zvcm1lciN0cmFuc2Zvcm0oamF2YS5sYW5nLk9iamVjdCkKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgdHJhbnNmb3JtKE9iamVjdCB2YWx1ZSkgewotICAgIAotICAgIFN0cmluZyBleGlzdGluZ1NlcnZlckluc3RJZCA9IChTdHJpbmcpdmFsdWU7Ci0gICAgSVNlcnZlciBzZXJ2ZXJJbnN0ID0gbnVsbDsKLSAgICBpZiAoZXhpc3RpbmdTZXJ2ZXJJbnN0SWQgIT0gbnVsbCkgewotICAgIAlzZXJ2ZXJJbnN0ID0gU2VydmVyQ29yZS5maW5kU2VydmVyKGV4aXN0aW5nU2VydmVySW5zdElkKTsKLSAgICB9Ci0gICAgcmV0dXJuIHNlcnZlckluc3Q7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tYW5kL2RhdGEvU2VydmVyTmFtZTJJU2VydmVyVHJhbnNmb3JtZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbWFuZC9kYXRhL1NlcnZlck5hbWUySVNlcnZlclRyYW5zZm9ybWVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxNWQ3OTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tYW5kL2RhdGEvU2VydmVyTmFtZTJJU2VydmVyVHJhbnNmb3JtZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbWFuZC5kYXRhOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5UcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuU2VydmVyQ29yZTsKLQotcHVibGljIGNsYXNzIFNlcnZlck5hbWUySVNlcnZlclRyYW5zZm9ybWVyIGltcGxlbWVudHMgVHJhbnNmb3JtZXIKLXsKLSAgcHVibGljIE9iamVjdCB0cmFuc2Zvcm0oT2JqZWN0IHZhbHVlKQotICB7Ci0gICAgewotICAgICAgU3RyaW5nIHNlcnZlck5hbWUgPSB2YWx1ZS50b1N0cmluZygpOwotICAgICAgSVNlcnZlcltdIHNlcnZlcnMgPSBTZXJ2ZXJDb3JlLmdldFNlcnZlcnMoKTsKLSAgICAgIGlmIChzZXJ2ZXJzICE9IG51bGwgJiYgc2VydmVycy5sZW5ndGghPTApCi0gICAgICB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VydmVycy5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgIElTZXJ2ZXIgc2VydmVyID0gKElTZXJ2ZXIpc2VydmVyc1tpXTsKLSAgICAgICAgICBpZiAoKHNlcnZlci5nZXROYW1lKCkpLmVxdWFscyhzZXJ2ZXJOYW1lKSkKLSAgICAgICAgICAgIHJldHVybiBzZXJ2ZXI7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbW9uL0RlZmF1bHRpbmdVdGlscy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tb24vRGVmYXVsdGluZ1V0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiYTMyYWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tb24vRGVmYXVsdGluZ1V0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDI3ICAgMTM4MDU4IGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDcwNzIzICAgMTk0NDM0IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuLCBDaGVjayBmb3Igbm9uLWV4aXN0aW5nIEVBUiB3aXRoIGNvbnRlbnQgbm90IGRlbGV0ZWQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLnJlc291cmNlcy5JVmlydHVhbENvbXBvbmVudDsKLQotcHVibGljIGNsYXNzIERlZmF1bHRpbmdVdGlscyB7Ci0JCi0JcHVibGljIERlZmF1bHRpbmdVdGlscygpCi0JewotCQkJCi0JfQotCQotCS8qKgotCSAqIAotCSAqIFVzZXMgdGhlIGZvbGxvd2luZyBzdGVwcyB0byBkZXRlcm1pbmUgYSB2YWxpZCBkZWZhdWx0IEVBUiBwcm9qZWN0IG5hbWU6Ci0JICogIAotCSAqIDEuIElmIHByb2plY3QgZG9lcyBleGlzdDoKLQkgKiAJCWEgLSBsb29rIGZvciBhbiBleGlzdGluZywgcmVmZXJlbmNpbmcgRUFSIGNvbXBvbmVudCwgaWYgb25lIGV4aXN0cyByZXR1cm4gdGhhdCBFQVIgbmFtZQotCSAqIAkJYiAtIGxvb2sgZm9yIGFuIGV4aXN0aW5nIEVBUiBjb21wb25lbnQgd2l0aCB0aGUgc2FtZSBKMkVFIHZlcnNpb24gYXMgdGhlIHByb2plY3QKLQkgKiAyLiBJZiBjYW4ndCBmaW5kIGFuIGFwcHJvcHJpYXRlIGV4aXN0aW5nIEVBUiBjb21wb25lbnQgb3IgcHJvamVjdCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgCi0JICogICAgIHdvcmtzcGFjZSwgcmV0dXJuIGEgbmV3IEVBUiBuYW1lIG9mIGZvcm0gcHJvamVjdE5hbWVFQVIKLQkgKiAzLiBJZiBwcm9qZWN0IG5hbWUgaXMgbnVsbCBvciBhbiBlbXB0eSBzdHJpbmcgcmV0dXJuIHRoZSBkZWZhdWx0IEVBUiBuYW1lCi0JICogCi0JICogQHBhcmFtIHByb2plY3ROYW1lIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdCBmb3IgdGhlIHNlcnZpY2UKLQkgKiBAcmV0dXJuIGEgc3RyaW5nIHRvIGJlIHVzZWQgYXMgdGhlIGRlZmF1bHQgRUFSIHByb2plY3QgbmFtZSBmb3IgdGhlIHByb2plY3QgbmFtZSBwcm92aWRlZAotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldERlZmF1bHRFQVJQcm9qZWN0TmFtZShTdHJpbmcgcHJvamVjdE5hbWUpCi0JewotCi0JCWlmIChwcm9qZWN0TmFtZSAhPSBudWxsICYmIHByb2plY3ROYW1lLmxlbmd0aCgpID4gMCkgewotCQkJCi0JCQlJUHJvamVjdCBwcm9qID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLQotCQkJaWYgKHByb2ouZXhpc3RzKCkpIHsKLQkJCQkKLQkJCQkvL1N0ZXAgMWEgLSByZXR1cm4gYSByZWZlcmVuY2luZyBFQVIgcHJvamVjdAotCQkJCUlWaXJ0dWFsQ29tcG9uZW50W10gZWFycyA9IEoyRUVVdGlscy5nZXRSZWZlcmVuY2luZ0VBUkNvbXBvbmVudHMocHJvaik7Ci0JCQkJaWYgKGVhcnMgIT0gbnVsbCAmJiBlYXJzLmxlbmd0aCA+IDApIHsKLQkJCQkJcmV0dXJuIGVhcnNbMF0uZ2V0TmFtZSgpOwotCQkJCX0KLQkJCQkKLQkJCQkvL1N0ZXAgMWIgLSByZXR1cm4gYW4gYXBwcm9wcmlhdGUgZXhpc3RpbmcgRUFSIHByb2plY3QKLQkJCSAgICBJVmlydHVhbENvbXBvbmVudFtdIGFsbEVhckNvbXBzID0gSjJFRVV0aWxzLmdldEFsbEVBUkNvbXBvbmVudHMoKTsJCQkgICAgICAKLQotCQkJICAgIGlmIChhbGxFYXJDb21wcy5sZW5ndGggPiAwKQotCQkJICAgIHsJCQkgICAgICAKLQkJCSAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgYWxsRWFyQ29tcHMubGVuZ3RoOyBpKyspCi0JCQkgICAgICAgIHsKLQkJCSAgICAgICAgICBJUHJvamVjdCBlYXJQcm9qZWN0ID0gYWxsRWFyQ29tcHNbaV0uZ2V0UHJvamVjdCgpOwotCQkJICAgICAgICAgIElTdGF0dXMgYXNzb2NpYXRpb25TdGF0dXMgPSBKMkVFVXRpbHMuY2FuQXNzb2NpYXRlUHJvamVjdFRvRUFSKHByb2osIGVhclByb2plY3QpOwotCQkJICAgICAgICAgIGlmIChhc3NvY2lhdGlvblN0YXR1cy5nZXRTZXZlcml0eSgpPT1JU3RhdHVzLk9LKQotCQkJICAgICAgICAgIHsKLQkJCSAgICAgICAgICAgIHJldHVybiBhbGxFYXJDb21wc1tpXS5nZXROYW1lKCk7IAotCQkJICAgICAgICAgIH0KLQkJCSAgICAgICAgfQkJCSAgICAgIAkJCSAgICAgIAotCQkJICAgIH0KLQkJCX0KLQkJCQotCQkJCi0JCQlTdHJpbmcgYmFzZUVBUk5hbWUgPSBwcm9qZWN0TmFtZSArIFJlc291cmNlVXRpbHMuZ2V0RGVmYXVsdEVBUkV4dGVuc2lvbigpOwotCQkJU3RyaW5nIGVhck5hbWUgPSBiYXNlRUFSTmFtZTsKLQotCQkJYm9vbGVhbiBmb3VuZEVBUiA9IGZhbHNlOwotCQkJaW50IGkgPSAxOwotCQkJCi0JCQl3aGlsZSAoIWZvdW5kRUFSKSB7Ci0JCQkJLy8gMTk0NDM0IC0gQ2hlY2sgZm9yIG5vbi1leGlzdGluZyBFQVIgd2l0aCBjb250ZW50cyB0aGF0J3Mgbm90IGRlbGV0ZWQgcHJldmlvdXNseQotCQkJCUlTdGF0dXMgY2FuQ3JlYXRlRUFSU3RhdHVzID0gSjJFRVV0aWxzLmNhbkNyZWF0ZUVBUihQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoZWFyTmFtZSkpOwotCQkJCWlmIChjYW5DcmVhdGVFQVJTdGF0dXMuaXNPSygpKSB7Ci0JCQkJCWZvdW5kRUFSID0gdHJ1ZTsKLQkJCQl9IGVsc2UgewotCQkJCQllYXJOYW1lID0gYmFzZUVBUk5hbWUgKyBpOwotCQkJCQlpKys7Ci0JCQkJfQotCQkJfQotCQkJCi0JCQkKLQkJCS8vU3RlcCAyIC0gcmV0dXJuIHByb2plY3QgbmFtZSB3aXRoIEVBUiBvbiB0aGUgZW5kCi0JCQlyZXR1cm4gZWFyTmFtZTsJCQkKLQkJfQotCQkKLQkJLy9TdGVwIDMgLSByZXR1cm4gdGhlIGRlZmF1bHQgRUFSIHByb2plY3QgbmFtZQotCQlyZXR1cm4gUmVzb3VyY2VVdGlscy5nZXREZWZhdWx0U2VydmljZUVBUlByb2plY3ROYW1lKCk7CQkKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1vbi9GaW5pc2hGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tb24vRmluaXNoRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Q4ZTcwOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1vbi9GaW5pc2hGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKgotICogQ3JlYXRlZCBvbiBNYXkgNCwgMjAwNAotICoKLSAqIFRPRE8gVG8gY2hhbmdlIHRoZSB0ZW1wbGF0ZSBmb3IgdGhpcyBnZW5lcmF0ZWQgZmlsZSBnbyB0bwotICogV2luZG93IC0gUHJlZmVyZW5jZXMgLSBKYXZhIC0gQ29kZSBTdHlsZSAtIENvZGUgVGVtcGxhdGVzCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1vbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3QuRmluaXNoVGVzdEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNlcXVlbmNlRnJhZ21lbnQ7Ci0KLQotLyoqCi0gKiBAYXV0aG9yIGdpbGJlcnRhCi0gKgotICogVE9ETyBUbyBjaGFuZ2UgdGhlIHRlbXBsYXRlIGZvciB0aGlzIGdlbmVyYXRlZCB0eXBlIGNvbW1lbnQgZ28gdG8KLSAqIFdpbmRvdyAtIFByZWZlcmVuY2VzIC0gSmF2YSAtIENvZGUgU3R5bGUgLSBDb2RlIFRlbXBsYXRlcwotICovCi1wdWJsaWMgY2xhc3MgRmluaXNoRnJhZ21lbnQgZXh0ZW5kcyBTZXF1ZW5jZUZyYWdtZW50Ci17Ci0gIHB1YmxpYyBGaW5pc2hGcmFnbWVudCgpCi0gIHsJCi0JYWRkKG5ldyBGaW5pc2hUZXN0RnJhZ21lbnQoKSApOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1vbi9IYW5kbGVyRGVzY3JpcHRpb25IZWxwZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbW9uL0hhbmRsZXJEZXNjcmlwdGlvbkhlbHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTYzYmJiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbW9uL0hhbmRsZXJEZXNjcmlwdGlvbkhlbHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogMjAwNjA0MDQgMTM0OTEzICBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1vbjsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuSGFuZGxlclRhYmxlSXRlbTsKLQotCi0KLXB1YmxpYyBjbGFzcyBIYW5kbGVyRGVzY3JpcHRpb25IZWxwZXIgewotCi0gIC8qKgotICAgKiBIZWxwZXIgbWV0aG9kIGZvciBnZXR0aW5nIHRoZSBIYW5kbGVyRGVzY3JpcHRvckhvbGRlciBnaXZlbiB0aGUgbmFtZQotICAgKiBAcGFyYW0gaGRocwotICAgKiBAcGFyYW0gZGVzY05hbWUKLSAgICogQHJldHVybgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBIYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXIgZ2V0Rm9yRGVzY3JpcHRpb25OYW1lKEhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcltdIGhkaHMsIFN0cmluZyBkZXNjTmFtZSl7Ci0gICAgZm9yIChpbnQgaT0wO2k8aGRocy5sZW5ndGg7aSsrKXsKLSAgICAgIFN0cmluZyBuYW1lID0gaGRoc1tpXS5nZXREZXNjcmlwdGlvbk5hbWUoKTsKLSAgICAgIGlmIChuYW1lIT1udWxsICYmIG5hbWUuZXF1YWxzKGRlc2NOYW1lKSl7Ci0gICAgICAgIHJldHVybiBoZGhzW2ldOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gIG51bGw7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBIZWxwZXIgbWV0aG9kIGZvciBnZXR0aW5nIGFsbCBkZXNjcmlwdGlvbiBuYW1lcwotICAgKiBAcGFyYW0gaGRocwotICAgKiBAcmV0dXJuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZ1tdIGdldEFsbERlc2NyaXB0aW9uTmFtZXMoSGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyW10gaGRocyl7Ci0gICAgU3RyaW5nW10gbmFtZXMgPSBuZXcgU3RyaW5nW2hkaHMubGVuZ3RoXTsKLSAgICBmb3IoaW50IGk9MDtpPGhkaHMubGVuZ3RoO2krKyl7Ci0gICAgICBuYW1lc1tpXT1oZGhzW2ldLmdldERlc2NyaXB0aW9uTmFtZSgpOwotICAgIH0KLSAgICByZXR1cm4gbmFtZXM7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZ1tdIGdldEFsbEhhbmRsZXJDbGFzc05hbWVzKEhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcltdIGhkaHMpewotICAgIFZlY3RvciB2ID0gbmV3IFZlY3RvcigpOwotICAgIGZvciAoaW50IGk9MDtpPGhkaHMubGVuZ3RoO2krKyl7Ci0gICAgICBMaXN0IGxpc3QgPSBoZGhzW2ldLmdldEhhbmRsZXJMaXN0KCk7Ci0gICAgICBpZiAobGlzdCE9bnVsbCAmJiAhbGlzdC5pc0VtcHR5KCkpewotICAgICAgICBmb3IgKGludCBqPTA7ajxsaXN0LnNpemUoKTtqKyspewotICAgICAgICAgIEhhbmRsZXJUYWJsZUl0ZW0gaHRpID0gKEhhbmRsZXJUYWJsZUl0ZW0pbGlzdC5nZXQoaik7Ci0gICAgICAgICAgdi5hZGQoaHRpLmdldEhhbmRsZXJDbGFzc05hbWUoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIChTdHJpbmdbXSl2LnRvQXJyYXkobmV3IFN0cmluZ1swXSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbW9uL0hhbmRsZXJEZXNjcmlwdGlvbkhvbGRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tb24vSGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwY2JhZGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tb24vSGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDA0IDEzNDkxMyAgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA2MDUxOCAxNDI1NTQgc2VuZ3BsQGNhLmlibS5jb20gIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLkhhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLlBvcnRDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLldlYlNlcnZpY2VEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuV3NkZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLmludGVybmFsLmltcGwuV3NkZEZhY3RvcnlJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5IYW5kbGVyVGFibGVJdGVtOwotCi0KLXB1YmxpYyBjbGFzcyBIYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXIgewotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZGVzY3JpcHRpb25OYW1lOwotICBwcml2YXRlIExpc3QgaGFuZGxlckxpc3Q7Ci0gIHByaXZhdGUgV2ViU2VydmljZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uT2JqZWN0OwotICBwcml2YXRlIElQYXRoIHNvdXJjZU91dHB1dFBhdGg7Ci0gIAotICAgIAotICBwdWJsaWMgSVBhdGggZ2V0U291cmNlT3V0cHV0UGF0aCgpIHsKLSAgICByZXR1cm4gc291cmNlT3V0cHV0UGF0aDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U291cmNlT3V0cHV0UGF0aChJUGF0aCBzb3VyY2VPdXRwdXRQYXRoKSB7Ci0gICAgdGhpcy5zb3VyY2VPdXRwdXRQYXRoID0gc291cmNlT3V0cHV0UGF0aDsKLSAgfQotCi0gIHB1YmxpYyBJUHJvamVjdCBnZXRQcm9qZWN0KCl7Ci0gICAgaWYgKGRlc2NyaXB0aW9uT2JqZWN0IT1udWxsKQotICAgICAgcmV0dXJuIFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChkZXNjcmlwdGlvbk9iamVjdCk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIC8qCi0gICAqIGdldCB0aGUgV2ViU2VydmljZURlc2NyaXB0aW9uIG9iamVjdCAKLSAgICovCi0gIHB1YmxpYyBXZWJTZXJ2aWNlRGVzY3JpcHRpb24gZ2V0RGVzY3JpcHRpb25PYmplY3QoKSB7Ci0gICAgcmV0dXJuIGRlc2NyaXB0aW9uT2JqZWN0OwotICB9Ci0gIAotICAvKioKLSAgICogc2V0IFdlYlNlcnZpY2VEZXNjcmlwdGlvbiBvYmplY3QKLSAgICogQHBhcmFtIGRlc2NyaXB0aW9uT2JqZWN0Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXREZXNjcmlwdGlvbk9iamVjdChXZWJTZXJ2aWNlRGVzY3JpcHRpb24gZGVzY3JpcHRpb25PYmplY3QpIHsKLSAgICB0aGlzLmRlc2NyaXB0aW9uT2JqZWN0ID0gZGVzY3JpcHRpb25PYmplY3Q7Ci0gIH0KLQotICAvKioKLSAgICogZ2V0IERlc2NyaXB0aW9uIG5hbWUKLSAgICogQHJldHVybgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbk5hbWUoKSB7Ci0gICAgcmV0dXJuIGRlc2NyaXB0aW9uTmFtZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIHNldCBEZXNjcmlwdGlvbiBuYW1lCi0gICAqIEBwYXJhbSBkZXNjcmlwdGlvbk5hbWUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldERlc2NyaXB0aW9uTmFtZShTdHJpbmcgZGVzY3JpcHRpb25OYW1lKSB7Ci0gICAgdGhpcy5kZXNjcmlwdGlvbk5hbWUgPSBkZXNjcmlwdGlvbk5hbWU7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBnZXQgTGlzdCBvZiBIYW5kbGVyVGFibGVJdGVtIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNlcnZpY2UgZGVzY3JpcHRpb24KLSAgICogQHJldHVybgotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0SGFuZGxlckxpc3QoKSB7Ci0gICAgcmV0dXJuIGhhbmRsZXJMaXN0OwotICB9Ci0KLSAgLyoqCi0gICAqIHNldCBMaXN0IG9mIEhhbmRsZXJUYWJsZUl0ZW0gYXNzb2NpYXRlZCB3aXRoIHRoaXMgc2VydmljZSBkZXNjcmlwdGlvbgotICAgKiBAcGFyYW0gaGFuZGxlckxpc3QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEhhbmRsZXJMaXN0KExpc3QgaGFuZGxlckxpc3QpIHsKLSAgICB0aGlzLmhhbmRsZXJMaXN0ID0gaGFuZGxlckxpc3Q7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGFkZEhhbmRsZXJUb0FsbFBvcnRzKCl7Ci0gICAgCi0gICAgaWYgKGhhbmRsZXJMaXN0IT1udWxsICYmICFoYW5kbGVyTGlzdC5pc0VtcHR5KCkpewotICAgICAgCi0gICAgICBmb3IgKGludCB6PTA7ejxoYW5kbGVyTGlzdC5zaXplKCk7eisrKXsKLSAgICAgICAgSGFuZGxlclRhYmxlSXRlbSBodGkgPSAoSGFuZGxlclRhYmxlSXRlbSloYW5kbGVyTGlzdC5nZXQoeik7ICAKLSAgICAgICAgaWYgKGRlc2NyaXB0aW9uT2JqZWN0IT1udWxsKSB7Ci0gICAgICAgICAgTGlzdCBwb3J0Q29tcG9uZW50cyA9IGRlc2NyaXB0aW9uT2JqZWN0LmdldFBvcnRDb21wb25lbnRzKCk7Ci0gICAgICAgICAgZm9yIChpbnQgeD0wO3g8cG9ydENvbXBvbmVudHMuc2l6ZSgpO3grKyl7Ci0gICAgICAgICAgICBQb3J0Q29tcG9uZW50IHdzUG9ydCA9IChQb3J0Q29tcG9uZW50KSBwb3J0Q29tcG9uZW50cy5nZXQoeCk7Ci0gICAgICAgICAgICBMaXN0IHdzSGFuZGxlcnMgPSB3c1BvcnQuZ2V0SGFuZGxlcnMoKTsKLSAgICAgICAgICAgIGlmICh3c0hhbmRsZXJzIT1udWxsKXsKLSAgICAgICAgICAgICAgYm9vbGVhbiBhbHJlYWR5RXhpc3RzID0gZmFsc2U7Ci0gICAgICAgICAgICAgIGZvciAoaW50IHk9MDt5PHdzSGFuZGxlcnMuc2l6ZSgpO3krKyl7Ci0gICAgICAgICAgICAgICAgSGFuZGxlciBoYW5kbGVyID0gKEhhbmRsZXIpd3NIYW5kbGVycy5nZXQoeSk7Ci0gICAgICAgICAgICAgICAgaWYgKGhhbmRsZXIuZ2V0SGFuZGxlckNsYXNzKCkuZXF1YWxzKGh0aS5nZXRIYW5kbGVyQ2xhc3NOYW1lKCkpKXsKLSAgICAgICAgICAgICAgICAgIGFscmVhZHlFeGlzdHMgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICAgICAgICBpZiAoIWFscmVhZHlFeGlzdHMpIHsKLSAgICAgICAgICAgICAgICAvL2NyZWF0ZSBpdCBhbmQgYWRkIHRvIHRoZSBsaXN0Ci0gICAgICAgICAgICAgICAgV3NkZEZhY3Rvcnkgd3NkZEZhY3RvcnkgPSBuZXcgV3NkZEZhY3RvcnlJbXBsKCk7Ci0gICAgICAgICAgICAgICAgSGFuZGxlciBuZXdIYW5kbGVyID0gd3NkZEZhY3RvcnkuY3JlYXRlSGFuZGxlcigpOwotICAgICAgICAgICAgICAgIG5ld0hhbmRsZXIuc2V0SGFuZGxlck5hbWUoaHRpLmdldEhhbmRsZXJOYW1lKCkpOwotICAgICAgICAgICAgICAgIG5ld0hhbmRsZXIuc2V0SGFuZGxlckNsYXNzKGh0aS5nZXRIYW5kbGVyQ2xhc3NOYW1lKCkpOwotICAgICAgICAgICAgICAgIHdzSGFuZGxlcnMuYWRkKG5ld0hhbmRsZXIpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIAotICB9Ci0gIAotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbW9uL0hhbmRsZXJTZXJ2aWNlUmVmSGVscGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1vbi9IYW5kbGVyU2VydmljZVJlZkhlbHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZGFmZjNiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbW9uL0hhbmRsZXJTZXJ2aWNlUmVmSGVscGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAyMDA2MDQwNCAxMzQ5MTMgIHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdSAKLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1vbjsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuSGFuZGxlclRhYmxlSXRlbTsKLQotCi1wdWJsaWMgY2xhc3MgSGFuZGxlclNlcnZpY2VSZWZIZWxwZXIgewotCi0gIC8qKgotICAgKiBIZWxwZXIgbWV0aG9kIGZvciBnZXR0aW5nIHRoZSBIYW5kbGVyU2VydmljZVJlZkhvbGRlciBnaXZlbiB0aGUgbmFtZQotICAgKiBAcGFyYW0gaHNyaAotICAgKiBAcGFyYW0gZGVzY05hbWUKLSAgICogQHJldHVybgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBIYW5kbGVyU2VydmljZVJlZkhvbGRlciBnZXRGb3JTZXJ2aWNlUmVmTmFtZShIYW5kbGVyU2VydmljZVJlZkhvbGRlcltdIGhzcmgsIFN0cmluZyBkZXNjTmFtZSl7Ci0gICAgZm9yIChpbnQgaT0wO2k8aHNyaC5sZW5ndGg7aSsrKXsKLSAgICAgIFN0cmluZyBuYW1lID0gaHNyaFtpXS5nZXRTZXJ2aWNlUmVmTmFtZSgpOwotICAgICAgaWYgKG5hbWUhPW51bGwgJiYgbmFtZS5lcXVhbHMoZGVzY05hbWUpKXsKLSAgICAgICAgcmV0dXJuIGhzcmhbaV07Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiAgbnVsbDsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldHMgYWxsIHRoZSBoYW5kbGVyIENsYXNzIG5hbWVzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIHNlcnZpY2UgcmVmCi0gICAqIEBwYXJhbSBoc3JoCi0gICAqIEByZXR1cm4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nW10gZ2V0QWxsSGFuZGxlckNsYXNzTmFtZXMoSGFuZGxlclNlcnZpY2VSZWZIb2xkZXJbXSBoc3JoKXsKLSAgICBWZWN0b3IgdiA9IG5ldyBWZWN0b3IoKTsKLSAgICBmb3IgKGludCBpPTA7aTxoc3JoLmxlbmd0aDtpKyspewotICAgICAgTGlzdCBsaXN0ID0gaHNyaFtpXS5nZXRIYW5kbGVyTGlzdCgpOwotICAgICAgaWYgKGxpc3QhPW51bGwgJiYgIWxpc3QuaXNFbXB0eSgpKXsKLSAgICAgICAgZm9yIChpbnQgaj0wO2o8bGlzdC5zaXplKCk7aisrKXsKLSAgICAgICAgICBIYW5kbGVyVGFibGVJdGVtIGh0aSA9IChIYW5kbGVyVGFibGVJdGVtKWxpc3QuZ2V0KGopOwotICAgICAgICAgIHYuYWRkKGh0aS5nZXRIYW5kbGVyQ2xhc3NOYW1lKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiAoU3RyaW5nW10pdi50b0FycmF5KG5ldyBTdHJpbmdbMF0pOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IGFsbCB0aGUgc2VydmljZSBSZWYgbmFtZXMKLSAgICogQHBhcmFtIGhzcmgKLSAgICogQHJldHVybgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmdbXSBnZXRBbGxTZXJ2aWNlUmVmTmFtZXMoSGFuZGxlclNlcnZpY2VSZWZIb2xkZXJbXSBoc3JoKXsKLSAgICBTdHJpbmdbXSBuYW1lcyA9IG5ldyBTdHJpbmdbaHNyaC5sZW5ndGhdOwotICAgIGZvcihpbnQgaT0wO2k8aHNyaC5sZW5ndGg7aSsrKXsKLSAgICAgIG5hbWVzW2ldPWhzcmhbaV0uZ2V0U2VydmljZVJlZk5hbWUoKTsKLSAgICB9Ci0gICAgcmV0dXJuIG5hbWVzOwotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tb24vSGFuZGxlclNlcnZpY2VSZWZIb2xkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbW9uL0hhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxYjAwNGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tb24vSGFuZGxlclNlcnZpY2VSZWZIb2xkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MDQgICAxMzQ5MTNzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDYwNTE3ICAgMTQyMzM5IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NjbGllbnQuSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzY2xpZW50LlNlcnZpY2VSZWY7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2NsaWVudC5XZWJzZXJ2aWNlX2NsaWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2NsaWVudC5pbnRlcm5hbC5pbXBsLldlYnNlcnZpY2VfY2xpZW50RmFjdG9yeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KYXZhTU9GVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0LkhhbmRsZXJUYWJsZUl0ZW07Ci0KLQotcHVibGljIGNsYXNzIEhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyIHsKLQotICBwcml2YXRlIFN0cmluZyBzZXJ2aWNlUmVmTmFtZTsKLSAgcHJpdmF0ZSBMaXN0IGhhbmRsZXJMaXN0OwotICBwcml2YXRlIFNlcnZpY2VSZWYgc2VydmljZVJlZjsKLSAgcHJpdmF0ZSBJUGF0aCBzb3VyY2VPdXRwdXRQYXRoOwotICAKLSAgcHVibGljIElQYXRoIGdldFNvdXJjZU91dHB1dFBhdGgoKSB7Ci0gICAgcmV0dXJuIHNvdXJjZU91dHB1dFBhdGg7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNvdXJjZU91dHB1dFBhdGgoSVBhdGggc291cmNlT3V0cHV0UGF0aCkgewotICAgIHRoaXMuc291cmNlT3V0cHV0UGF0aCA9IHNvdXJjZU91dHB1dFBhdGg7Ci0gIH0gIAotICAKLSAgcHVibGljIElQcm9qZWN0IGdldFByb2plY3QoKSB7Ci0gICAgaWYgKHNlcnZpY2VSZWYhPW51bGwpCi0gICAgICByZXR1cm4gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHNlcnZpY2VSZWYpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIExpc3QgZ2V0SGFuZGxlckxpc3QoKSB7Ci0gICAgcmV0dXJuIGhhbmRsZXJMaXN0OwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRIYW5kbGVyTGlzdChMaXN0IGhhbmRsZXJMaXN0KSB7Ci0gICAgdGhpcy5oYW5kbGVyTGlzdCA9IGhhbmRsZXJMaXN0OwotICB9Ci0gIAotICBwdWJsaWMgU2VydmljZVJlZiBnZXRTZXJ2aWNlUmVmKCkgewotICAgIHJldHVybiBzZXJ2aWNlUmVmOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlUmVmKFNlcnZpY2VSZWYgc2VydmljZVJlZikgewotICAgIHRoaXMuc2VydmljZVJlZiA9IHNlcnZpY2VSZWY7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmljZVJlZk5hbWUoKSB7Ci0gICAgcmV0dXJuIHNlcnZpY2VSZWZOYW1lOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlUmVmTmFtZShTdHJpbmcgc2VydmljZVJlZk5hbWUpIHsKLSAgICB0aGlzLnNlcnZpY2VSZWZOYW1lID0gc2VydmljZVJlZk5hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGFkZEhhbmRsZXJUb1NlcnZpY2VSZWYoKXsKLSAgICBpZiAoaGFuZGxlckxpc3QhPW51bGwgJiYgIWhhbmRsZXJMaXN0LmlzRW1wdHkoKSl7Ci0gICAgICAKLSAgICAgIGZvciAoaW50IHg9MDt4PGhhbmRsZXJMaXN0LnNpemUoKTt4KyspewotICAgICAgICBIYW5kbGVyVGFibGVJdGVtIGh0aSA9IChIYW5kbGVyVGFibGVJdGVtKWhhbmRsZXJMaXN0LmdldCh4KTsKLSAgICAgICAgaWYgKHNlcnZpY2VSZWYhPW51bGwpewotICAgICAgICAgIExpc3QgZXhpc3RpbmdIYW5kbGVycyA9IHNlcnZpY2VSZWYuZ2V0SGFuZGxlcnMoKTsKLSAgICAgICAgICBib29sZWFuIGFscmVhZHlFeGlzdHMgPSBmYWxzZTsKLSAgICAgICAgICBmb3IgKGludCBpPTA7aTxleGlzdGluZ0hhbmRsZXJzLnNpemUoKTtpKyspewotICAgICAgICAgICAgSGFuZGxlciBoYW5kbGVyID0gKEhhbmRsZXIpZXhpc3RpbmdIYW5kbGVycy5nZXQoaSk7Ci0gICAgICAgICAgICBpZiAoaGFuZGxlci5nZXRIYW5kbGVyQ2xhc3MoKS5nZXRKYXZhTmFtZSgpLmVxdWFscyhodGkuZ2V0SGFuZGxlckNsYXNzTmFtZSgpKSl7Ci0gICAgICAgICAgICAgIGFscmVhZHlFeGlzdHMgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICAKLSAgICAgICAgICBpZiAoIWFscmVhZHlFeGlzdHMpIHsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgV2Vic2VydmljZV9jbGllbnRGYWN0b3J5IHdzQ2xpZW50RmFjdG9yeSA9IG5ldyBXZWJzZXJ2aWNlX2NsaWVudEZhY3RvcnlJbXBsKCk7Ci0gICAgICAgICAgICBIYW5kbGVyIG5ld0hhbmRsZXIgPSB3c0NsaWVudEZhY3RvcnkuY3JlYXRlSGFuZGxlcigpOwotICAgICAgICAgICAgbmV3SGFuZGxlci5zZXRIYW5kbGVyTmFtZShodGkuZ2V0SGFuZGxlck5hbWUoKSk7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICBJUHJvamVjdCBwcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHNlcnZpY2VSZWYpOwotICAgICAgICAgICAgICBpZiAocHJvamVjdCE9bnVsbCkgewotICAgICAgICAgICAgICAgIEphdmFDbGFzcyBqYXZhQ2xhc3MgPSBKYXZhTU9GVXRpbHMuZ2V0SmF2YUNsYXNzKGh0aS5nZXRIYW5kbGVyQ2xhc3NOYW1lKCksIHByb2plY3QpOwotICAgICAgICAgICAgICAgIGlmIChqYXZhQ2xhc3MgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgbmV3SGFuZGxlci5zZXRIYW5kbGVyQ2xhc3MoamF2YUNsYXNzKTsKLSAgICAgICAgICAgICAgICB9ICAgIAotICAgICAgICAgICAgICAgIGV4aXN0aW5nSGFuZGxlcnMuYWRkKG5ld0hhbmRsZXIpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaChFeGNlcHRpb24gZSl7Ci0gICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICAKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1vbi9TY2VuYXJpb0NsZWFudXBDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1vbi9TY2VuYXJpb0NsZWFudXBDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5YjQ0ZjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9jb21tb24vU2NlbmFyaW9DbGVhbnVwQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwODI1ICAgMTU1MTE0IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uV1NETFBhcnNlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0Lk9iamVjdFNlbGVjdGlvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLS8qKgotICogIFRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCB0byBjbGVhbiB1cCBkYXRhIGFmdGVyIGVpdGhlciB0aGUKLSAqICBjbGllbnQgb3Igc2VydmljZSB3aXphcmRzLiAgQ3VycmVudGx5IGlzIGp1c3QgcmVzZXRzIHRoZQotICogIHBhcnNlciBmYWN0b3J5LiAKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBTY2VuYXJpb0NsZWFudXBDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgewotCSAgV1NETFBhcnNlckZhY3Rvcnkua2lsbFBhcnNlcigpOwotICAgIE9iamVjdFNlbGVjdGlvblJlZ2lzdHJ5LmdldEluc3RhbmNlKCkuY2xlYW51cCgpOwotCQotCSAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLQotICAKLSAgcHVibGljIElTdGF0dXMgdW5kbyggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLQkgIC8vIEV2ZW4gaWYgdGhlIHVzZXIgY2FuY2VscyBvdXQgb2YgdGhlIHdpemFyZCB3ZSB3YW50IHRvCi0JICAvLyBraWxsIHRoZSBwYXJzZXIuCi0JICBXU0RMUGFyc2VyRmFjdG9yeS5raWxsUGFyc2VyKCk7Ci0gICAgT2JqZWN0U2VsZWN0aW9uUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKS5jbGVhbnVwKCk7Ci0gICAgCi0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbW9uL1NlcnZlclNlbGVjdGlvblV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1vbi9TZXJ2ZXJTZWxlY3Rpb25VdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYWRmYWIwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbW9uL1NlcnZlclNlbGVjdGlvblV0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMzI0ICAgMTE2NzUwIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNzAxMTkgICAxNTk0NTggbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uSVNlcnZlckRlZmF1bHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLlNlcnZlckluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklSdW50aW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JUnVudGltZVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlckNvcmU7Ci0KLQotcHVibGljIGNsYXNzIFNlcnZlclNlbGVjdGlvblV0aWxzCi17Ci0KLSAgcHVibGljIHN0YXRpYyBJUnVudGltZSBnZXRSdW50aW1lVGFyZ2V0KFN0cmluZyBwcm9qZWN0TmFtZSkKLSAgewotICAJaWYoIHByb2plY3ROYW1lICE9IG51bGwgJiYgcHJvamVjdE5hbWUubGVuZ3RoKCkgPiAwICl7IC8vJE5PTi1OTFMtMSQKLSAgCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLSAgCQlpZiggcHJvamVjdCAhPSBudWxsICYmIHByb2plY3QuZXhpc3RzKCkgKXsKLSAgCQkJcmV0dXJuIFNlcnZlckNvcmUuZ2V0UHJvamVjdFByb3BlcnRpZXMocHJvamVjdCkuZ2V0UnVudGltZVRhcmdldCgpOyAKLSAgCQl9Ci0gIAl9Ci0gIAlyZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBJU2VydmVyIGdldEZpcnN0RXhpc3RpbmdTZXJ2ZXJGcm9tRmFjdG9yeUlkKFN0cmluZyBmYWN0b3J5SWQpCi0gIHsKLSAgCUlTZXJ2ZXJbXSBzZXJ2ZXJzID0gU2VydmVyQ29yZS5nZXRTZXJ2ZXJzKCk7Ci0gIAlpZiAoc2VydmVycz09bnVsbCB8fCBzZXJ2ZXJzLmxlbmd0aCE9MCkKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gIAllbHNlCi0gIAl7Ci0gIAkgIGZvciAoaW50IGk9MDsgaTxzZXJ2ZXJzLmxlbmd0aDsgaSsrKQotICAJICB7Ci0gIAkgICAgSVNlcnZlciBzZXJ2ZXIgPSAoSVNlcnZlcilzZXJ2ZXJzW2ldOwotICAJICAgIGlmIChzZXJ2ZXIuZ2V0U2VydmVyVHlwZSgpLmdldElkKCkuZXF1YWxzKGZhY3RvcnlJZCkpCi0gIAkgICAgewotICAJICAgICAgcmV0dXJuIHNlcnZlcjsKLSAgCSAgICB9Ci0gIAkgIH0KLSAgCX0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBJU2VydmVyW10gZ2V0Q29tcGF0aWJsZUV4aXN0aW5nU2VydmVycyhJUnVudGltZSBydW50aW1lKQotICB7Ci0gICAgaWYgKHJ1bnRpbWUgPT0gbnVsbCkKLSAgICAgIHJldHVybiBudWxsOwotICAgIAotICAgIElTZXJ2ZXJbXSBzZXJ2ZXJzID0gU2VydmVyQ29yZS5nZXRTZXJ2ZXJzKCk7Ci0gICAgaWYgKHNlcnZlcnM9PW51bGwgfHwgc2VydmVycy5sZW5ndGg9PTApCi0gICAgICByZXR1cm4gbnVsbDsKLSAgICAKLSAgICBBcnJheUxpc3QgY29tcGF0aWJsZVNlcnZlcnNMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIElSdW50aW1lVHlwZSBydW50aW1lVHlwZSA9IHJ1bnRpbWUuZ2V0UnVudGltZVR5cGUoKTsKLSAgICBpZiAocnVudGltZVR5cGUgIT0gbnVsbCkKLSAgICB7Ci0gICAgCVN0cmluZyBydW50aW1lSWQgPSBydW50aW1lVHlwZS5nZXRJZCgpOwotCQlmb3IgKGludCBpPTA7IGk8c2VydmVycy5sZW5ndGg7IGkrKykKLQkJewotCQkgIElTZXJ2ZXIgc2VydmVyID0gKElTZXJ2ZXIpc2VydmVyc1tpXTsKLQkJICBJUnVudGltZVR5cGUgcnVudGltZVR5cGUyID0gc2VydmVyLmdldFJ1bnRpbWUoKS5nZXRSdW50aW1lVHlwZSgpOwotCQkgIGlmIChydW50aW1lVHlwZTIgIT0gbnVsbCkKLQkJICB7Ci0JCQkgIFN0cmluZyBzZXJ2ZXJSdW50aW1lSWQgPSBydW50aW1lVHlwZTIuZ2V0SWQoKTsKLQkJCSAgaWYgKHNlcnZlclJ1bnRpbWVJZC5lcXVhbHMocnVudGltZUlkKSkKLQkJCSAgICBjb21wYXRpYmxlU2VydmVyc0xpc3QuYWRkKHNlcnZlcik7Ci0JCSAgfQotCQkgIAotCQl9Ci0gICAgfQotICAgIGlmIChjb21wYXRpYmxlU2VydmVyc0xpc3Quc2l6ZSgpPDEpCi0gICAgICByZXR1cm4gbnVsbDsKLSAgICAKLSAgICAKLSAgICBPYmplY3RbXSBjb21wYXRpYmxlU2VydmVyc0FycmF5ID0gY29tcGF0aWJsZVNlcnZlcnNMaXN0LnRvQXJyYXkoKTsKLSAgICBJU2VydmVyW10gY29tcGF0aWJsZVNlcnZlcnMgPSBuZXcgSVNlcnZlcltjb21wYXRpYmxlU2VydmVyc0FycmF5Lmxlbmd0aF07Ci0gICAgZm9yIChpbnQgaj0wOyBqPGNvbXBhdGlibGVTZXJ2ZXJzQXJyYXkubGVuZ3RoOyBqKyspCi0gICAgewotICAgICAgY29tcGF0aWJsZVNlcnZlcnNbal0gPSAoSVNlcnZlciljb21wYXRpYmxlU2VydmVyc0FycmF5W2pdOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gY29tcGF0aWJsZVNlcnZlcnM7Ci0gIH0KLSAgICAKLSAgcHVibGljIHN0YXRpYyBTZXJ2ZXJJbmZvIGdldEV4dGVuZGVyUmVjb21tZW5kYXRpb24oSVByb2plY3QgcHJvamVjdCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICBJRXh0ZW5zaW9uUmVnaXN0cnkgcmVnID0gUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKTsKLSAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBlbGVtZW50cyA9IHJlZy5nZXRDb25maWd1cmF0aW9uRWxlbWVudHNGb3IoIm9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbiIsICJzZXJ2ZXJEZWZhdWx0ZXIiKTsKLSAgICBmb3IgKGludCBpPTA7IGk8ZWxlbWVudHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgT2JqZWN0IHNlcnZlckRlZmF1bHRlck9iamVjdCA9IGVsZW1lbnRzW2ldLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oImNsYXNzIik7Ci0gICAgICBpZiAoc2VydmVyRGVmYXVsdGVyT2JqZWN0IGluc3RhbmNlb2YgSVNlcnZlckRlZmF1bHRlcikKLSAgICAgIHsKLSAgICAgICAgSVNlcnZlckRlZmF1bHRlciBzZXJ2ZXJEZWZhdWx0ZXIgPSAoSVNlcnZlckRlZmF1bHRlcilzZXJ2ZXJEZWZhdWx0ZXJPYmplY3Q7Ci0gICAgICAgIFNlcnZlckluZm8gc2VydmVySW5mbyA9IHNlcnZlckRlZmF1bHRlci5yZWNvbW1lbmREZWZhdWx0U2VydmVyKHByb2plY3QpOwotICAgICAgICBpZiAoc2VydmVySW5mbyAhPSBudWxsKQotICAgICAgICAgIHJldHVybiBzZXJ2ZXJJbmZvOwotICAgICAgfQotICAgICAgCi0gICAgfQotICAgIH0gY2F0Y2ggKENvcmVFeGNlcHRpb24gY2UpCi0gICAgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBudWxsOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2NvbW1vbi9WYWxpZGF0aW9uVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbW9uL1ZhbGlkYXRpb25VdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTlhYjIyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvY29tbW9uL1ZhbGlkYXRpb25VdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMjIgICAxMTU4MzQgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDQxMyAgIDEzNTU4MSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNDIwICAgMTM2MTU4IHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA0MjAgICAxMzY3MDUgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDQyMSAgIDEzNjc2MSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNDI1ICAgMTM3ODMxIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA0MjcgICAxMjY3ODAgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDQyNyAgIDEzODA1OCBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDkwNSAgIDE1NjIzMCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbiwgSGFuZGxpbmcgcHJvamVjdHMgd2l0aCBubyB0YXJnZXQgcnVudGltZQotICogMjAwNzAxMTkgICAxNTk0NTggbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uCi0gKiAyMDA3MDcyMyAgIDE5NDQzNCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbiwgQ2hlY2sgZm9yIG5vbi1leGlzdGluZyBFQVIgd2l0aCBjb250ZW50IG5vdCBkZWxldGVkCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1vbjsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5TZXJ2aWNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLldvcmtiZW5jaFJlc291cmNlSGVscGVyQmFzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5pbnRlcm5hbC5wcm9qZWN0LkoyRUVQcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2UuaW50ZXJuYWwuV2ViU2VydmljZUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuUG9ydENvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuV1NETFBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLldlYlNlcnZpY2VEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuV2ViU2VydmljZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLldzZGRSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUuRmFjZXRVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uSjJFRVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlNlcnZlclV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uRmFjZXRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LlJ1bnRpbWVEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LldlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5zZWxlY3Rpb24uU2VsZWN0aW9uTGlzdENob2ljZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLkNvbXBvbmVudENvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLmludGVybmFsLnV0aWwuSU1vZHVsZUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUucmVzb3VyY2VzLklWaXJ0dWFsQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLklGYWNldGVkUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5JRmFjZXRlZFByb2plY3RUZW1wbGF0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5JUHJvamVjdEZhY2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLklQcm9qZWN0RmFjZXRWZXJzaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLlByb2plY3RGYWNldHNNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLlZlcnNpb25Gb3JtYXRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklSdW50aW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JUnVudGltZVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXJUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlc1BhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlU2NlbmFyaW87Ci0KLS8qKgotICoKLSAqLwotcHVibGljIGNsYXNzIFZhbGlkYXRpb25VdGlscwotewotCS8vQ29uc3RhbnRzIHRvIGhlbHAgZGVjaWRlIGhvdyBtdWNoIHZhbGlkYXRpb24gdG8gZG8uCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVkFMSURBVEVfTk9ORSA9IDA7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVkFMSURBVEVfQUxMID0gMTsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWQUxJREFURV9TRVJWRVJfUlVOVElNRV9DSEFOR0VTID0gMjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWQUxJREFURV9QUk9KRUNUX0NIQU5HRVMgPSAzOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFZBTElEQVRFX1NDQUxFX0NIQU5HRVMgPSA0OwotCi0gIC8qKgotICAgKiAKLSAgICovCi0gIHB1YmxpYyBWYWxpZGF0aW9uVXRpbHMoKQotICB7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgbmV3IHZhbGlkYXRpb24gc3RhdGUgYmFzZWQgb24gdGhlIGN1cnJlbnQgdmFsaWRhdGlvbiBzdGF0ZQotICAgKiBhbmQgdGhlIHJlcXVlc3RlZCB2YWxpZGF0aW9uIHN0YXRlLiBJZiB0aGUgcmVxdWVzdGVkIHZhbGlkYXRpb24gc3RhdGUKLSAgICogZG9lcyBub3QgY292ZXIgYWxsIHRoZSB2YWxpZGF0aW9uIGNvdmVyZWQgYnkgdGhlIGN1cnJlbnQgdmFsaWRhdGlvbgotICAgKiBzdGF0ZSwgVkFMSURBVEVfQUxMIGlzIHJldHVybmVkLiBPdGhlcndpc2UsIHRoZSByZXF1ZXN0ZWQgdmFsaWRhdGlvbgotICAgKiBzdGF0ZSBpcyByZXR1cm5lZC4KLSAgICogCi0gICAqIEBwYXJhbSBjdXJyZW50VmFsaWRhdGlvblN0YXRlIHRoZSB2YWxpZGF0b24gc3RhdGUgYXQgdGhlIHRpbWUgdGhlIGNhbGxlcidzIHJlcXVlc3RzIGEgY2hhbmdlCi0gICAqIEBwYXJhbSByZXF1ZXN0ZWRWYWxpZGF0aW9uU3RhdGUgdGhlIHZhbGlkYXRpb24gc3RhdGUgYmVpbmcgcmVxdWVzdGVkIGJ5IHRoZSBjYWxsZXIuCi0gICAqIEByZXR1cm4gUmV0dXJucyBWQUxJREFURV9BTEwgaWYgdGhlIHJlcXVlc3RlZCB2YWxpZGF0aW9uIHN0YXRlCi0gICAqIGRvZXMgbm90IGNvdmVyIGFsbCB0aGUgdmFsaWRhdGlvbiBjb3ZlcmVkIGJ5IHRoZSBjdXJyZW50IHZhbGlkYXRpb24KLSAgICogc3RhdGUuIFJldHVybmVkIHJlcXVlc3RlZFZhbGlkYXRpb25TdGF0ZSBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgaW50IGdldE5ld1ZhbGlkYXRpb25TdGF0ZShpbnQgY3VycmVudFZhbGlkYXRpb25TdGF0ZSwgaW50IHJlcXVlc3RlZFZhbGlkYXRpb25TdGF0ZSkgewotCQlpbnQgbmV3VmFsaWRhdGlvblN0YXRlOwotCQlpZiAoY3VycmVudFZhbGlkYXRpb25TdGF0ZSA9PSBWQUxJREFURV9OT05FCi0JCQkJfHwgY3VycmVudFZhbGlkYXRpb25TdGF0ZSA9PSByZXF1ZXN0ZWRWYWxpZGF0aW9uU3RhdGUpIHsKLQkJCW5ld1ZhbGlkYXRpb25TdGF0ZSA9IHJlcXVlc3RlZFZhbGlkYXRpb25TdGF0ZTsKLQkJfSBlbHNlIHsKLQkJCW5ld1ZhbGlkYXRpb25TdGF0ZSA9IFZBTElEQVRFX0FMTDsKLQkJfQotCi0JCXJldHVybiBuZXdWYWxpZGF0aW9uU3RhdGU7Ci0KLQl9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyBJU3RhdHVzIHJlc3VsdGluZyBmcm9tIGNoZWNraW5nIGZvciBlbXB0eSBmaWVsZHMuIFVzZWQgZm9yIHZhbGlkYXRpb24gb2YgcGFnZSAxIG9mIHRoZQotICAgKiBXZWIgc2VydmljZS9jbGllbnQgd2l6YXJkcy4KLSAgICogQHBhcmFtIHZhbGlkYXRpb25TdGF0ZSBvbmUgb2YgVkFMSURBVEVfTk9ORSwgVkFMSURBVEVfQUxMLCBWQUxJREFURV9TRVJWRVJfUlVOVElNRV9DSEFOR0VTLCBWQUxJREFURV9QUk9KRUNUX0NIQU5HRVMsIFZBTElEQVRFX1NDQUxFX0NIQU5HRVMKLSAgICogQHBhcmFtIHR5cGVJZCBXZWIgc2VydmljZSB0eXBlIGlkIChpc0NsaWVudD1mYWxzZSkgb3IgV2ViIHNlcnZpY2UgY2xpZW50IGltcGxlbWVudGF0aW9uIHR5cGUgaWQgKGlzQ2xpZW50PXRydWUpIAotICAgKiBAcGFyYW0gc2VydmljZUltcGwgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvYmplY3Qgc2VsZWN0aW9uIGZyb20gcGFnZSAxCi0gICAqIEBwYXJhbSBydW50aW1lSWQgV2ViIHNlcnZpY2UgcnVudGltZSBpZAotICAgKiBAcGFyYW0gc2VydmVySWQgc2VydmVyIHR5cGUgaWQKLSAgICogQHBhcmFtIHByb2plY3ROYW1lIG5hbWUgb2YgcHJvamVjdAotICAgKiBAcGFyYW0gbmVlZEVhciBib29sZWFuIDxjb2RlPnRydWU8L2NvZGU+IGlmIEVBUiBpcyByZXF1aXJlZCwgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdC4KLSAgICogQHBhcmFtIGVhclByb2plY3ROYW1lIG5hbWUgb2YgRUFSIHByb2plY3QKLSAgICogQHBhcmFtIHByb2plY3RUeXBlSWQgdGVtcGxhdGUgaWQKLSAgICogQHBhcmFtIGlzQ2xpZW50IGJvb2xlYW4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIG1ldGhvZCBpcyBiZWluZyBjYWxsZWQgZm9yIGNsaWVudCBzaWRlIHZhbGlkYXRpb24sIAotICAgKiA8Y29kZT5mYWxzZTwvY29kZT4gZm9yIHNlcnZpY2Ugc2lkZSB2YWxpZGF0aW9uLgotICAgKiBAcmV0dXJuIElTdGF0dXMgd2l0aCBzZXZlcml0eSBJU3RhdHVzLk9LIGlmIGFsbCBtYW5kYXRvcnkgZmllbGRzIGFyZSBub24tbnVsbCBhbmQgbm9uLWVtcHR5LiAKLSAgICogSVN0YXR1cyB3aXRoIHNldmVyaXR5IElTdGF0dXMuRVJST1Igb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIElTdGF0dXMgY2hlY2tNaXNzaW5nRmllbGRTdGF0dXMoaW50IHZhbGlkYXRpb25TdGF0ZSwgU3RyaW5nIHR5cGVJZCwgU3RyaW5nIHNlcnZpY2VJbXBsLCBTdHJpbmcgcnVudGltZUlkLCBTdHJpbmcgc2VydmVySWQsCi0JCQlTdHJpbmcgcHJvamVjdE5hbWUsIGJvb2xlYW4gbmVlZEVhciwgU3RyaW5nIGVhclByb2plY3ROYW1lLCBTdHJpbmcgcHJvamVjdFR5cGVJZCwKLQkJCWJvb2xlYW4gaXNDbGllbnQpCi0gIHsKLQkJLy8gT2JqZWN0IHNlbGVjdGlvbgkgIAotCSAgaWYgKHZhbGlkYXRpb25TdGF0ZT09VkFMSURBVEVfQUxMICYmICFpc0NsaWVudCkKLQkgIHsKLQkJaWYgKHNlcnZpY2VJbXBsLmxlbmd0aCgpID09IDApIHsKLQkJCWludCBzY2VuYXJpbyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNjZW5hcmlvRnJvbVR5cGVJZCh0eXBlSWQpOwotCQkJaWYgKHNjZW5hcmlvID09IFdlYlNlcnZpY2VTY2VuYXJpby5CT1RUT01VUCkKLQkJCXsKLQkJCSAgcmV0dXJuIFN0YXR1c1V0aWxzCi0JCQkJCS5lcnJvclN0YXR1cyhDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX05PX09CSkVDVF9TRUxFQ1RJT04pOwotCQkJfQotCQkJZWxzZQotCQkJewotCQkJICByZXR1cm4gU3RhdHVzVXRpbHMKLQkJCQkJLmVycm9yU3RhdHVzKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfTk9fU0VSVklDRV9TRUxFQ1RJT04pOwkJCQkKLQkJCX0KLQkJfQotCSAgfQotCi0JCS8vIFdlYiBzZXJ2aWNlIHJ1bnRpbWUKLQkgICAgaWYgKHZhbGlkYXRpb25TdGF0ZSA9PSBWQUxJREFURV9BTEwgfHwgdmFsaWRhdGlvblN0YXRlID09IFZBTElEQVRFX1NFUlZFUl9SVU5USU1FX0NIQU5HRVMpIHsKLQkJCWlmIChydW50aW1lSWQgPT0gbnVsbCB8fCBydW50aW1lSWQubGVuZ3RoKCkgPT0gMCkgewotCQkJCWlmIChpc0NsaWVudCkgewotCQkJCQlyZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19OT19SVU5USU1FLAotCQkJCQkJCW5ldyBTdHJpbmdbXSB7IENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfQ0xJRU5UX1NVQiB9KSk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfTk9fUlVOVElNRSwKLQkJCQkJCQluZXcgU3RyaW5nW10geyBDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX1NFUlZJQ0VfU1VCIH0pKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCSAgICBpZiAodmFsaWRhdGlvblN0YXRlID09IFZBTElEQVRFX0FMTCB8fCB2YWxpZGF0aW9uU3RhdGUgPT0gVkFMSURBVEVfUFJPSkVDVF9DSEFOR0VTKSB7Ci0JCQkvLyBQcm9qZWN0Ci0JCQlpZiAocHJvamVjdE5hbWUgPT0gbnVsbCB8fCBwcm9qZWN0TmFtZS5sZW5ndGgoKSA9PSAwKSB7Ci0JCQkJaWYgKGlzQ2xpZW50KSB7Ci0JCQkJCXJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZCgKLQkJCQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0NMSUVOVF9QUk9KRUNUX0VNUFRZLCBuZXcgU3RyaW5nW10geyAiIiB9KSk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKAotCQkJCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfU0VSVklDRV9QUk9KRUNUX0VNUFRZLCBuZXcgU3RyaW5nW10geyAiIiB9KSk7Ci0JCQkJfQotCQkJfQotCi0JCQkvLyBQcm9qZWN0IHR5cGUgKGlmIHByb2plY3QgZG9lcyBub3QgZXhpc3QpCi0JCQlJUHJvamVjdCBwcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLQkJCWlmICghcHJvamVjdC5leGlzdHMoKSkgewotCQkJCWlmIChwcm9qZWN0VHlwZUlkID09IG51bGwgfHwgcHJvamVjdFR5cGVJZC5sZW5ndGgoKSA9PSAwKSB7Ci0KLQkJCQkJaWYgKGlzQ2xpZW50KSB7Ci0JCQkJCQlyZXR1cm4gU3RhdHVzVXRpbHMKLQkJCQkJCQkJLmVycm9yU3RhdHVzKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfQ0xJRU5UX1BST0pFQ1RfVFlQRV9FTVBUWSk7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlyZXR1cm4gU3RhdHVzVXRpbHMKLQkJCQkJCQkJLmVycm9yU3RhdHVzKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfU0VSVklDRV9QUk9KRUNUX1RZUEVfRU1QVFkpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCi0JCQkvLyBFYXIgKGlmIG5lZWQgZWFyKQotCQkJaWYgKG5lZWRFYXIpIHsKLQkJCQlpZiAoZWFyUHJvamVjdE5hbWUgPT0gbnVsbCB8fCBlYXJQcm9qZWN0TmFtZS5sZW5ndGgoKSA9PSAwKSB7Ci0JCQkJCWlmIChpc0NsaWVudCkgewotCQkJCQkJcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKAotCQkJCQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0NMSUVOVF9FQVJfRU1QVFksIG5ldyBTdHJpbmdbXSB7ICIiIH0pKTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCXJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZCgKLQkJCQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19TRVJWSUNFX0VBUl9FTVBUWSwgbmV3IFN0cmluZ1tdIHsgIiIgfSkpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JICAgIAotCQkvLyBTZXJ2ZXIgKGlmIFdlYiBzZXJ2aWNlIHJ1bnRpbWUgcmVxdWlyZXMgYSBzZXJ2ZXIgb3IgcHJvamVjdCBkb2VzIG5vdAotCQkvLyBleGlzdCkKLQkgICAgaWYgKHZhbGlkYXRpb25TdGF0ZSA9PSBWQUxJREFURV9BTEwgfHwgdmFsaWRhdGlvblN0YXRlID09IFZBTElEQVRFX1NFUlZFUl9SVU5USU1FX0NIQU5HRVMKLQkJCQl8fCB2YWxpZGF0aW9uU3RhdGUgPT0gVkFMSURBVEVfUFJPSkVDVF9DSEFOR0VTKSB7Ci0JCQlpZiAoc2VydmVySWQgPT0gbnVsbCB8fCBzZXJ2ZXJJZC5sZW5ndGgoKSA9PSAwKSB7Ci0JCQkJUnVudGltZURlc2NyaXB0b3IgZGVzYyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFJ1bnRpbWVCeUlkKHJ1bnRpbWVJZCk7Ci0JCQkJaWYgKGRlc2MuZ2V0U2VydmVyUmVxdWlyZWQoKSkgewotCQkJCQlpZiAoaXNDbGllbnQpIHsKLQkJCQkJCVN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfTk9fU0VSVkVSLAotCQkJCQkJCQluZXcgU3RyaW5nW10geyBDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0NMSUVOVF9TVUIgfSkpOwotCQkJCQl9IGVsc2UgewotCQkJCQkJU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19OT19TRVJWRVIsCi0JCQkJCQkJCW5ldyBTdHJpbmdbXSB7IENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfU0VSVklDRV9TVUIgfSkpOwotCQkJCQl9Ci0JCQkJfSBlbHNlIHsKLQkJCQkJSVByb2plY3QgcHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSk7Ci0JCQkJCWlmICghcHJvamVjdC5leGlzdHMoKSkgewotCQkJCQkJcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKAotCQkJCQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX1BST0pFQ1RfTVVTVF9FWElTVCwKLQkJCQkJCQkJbmV3IFN0cmluZ1tdIHsgcHJvamVjdE5hbWUgfSkpOwotCi0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJCi0JCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyBJU3RhdHVzIHJlc3VsdGluZyBmcm9tIGNoZWNraW5nIGZvciBlcnJvcnMuIFVzZWQgZm9yIHZhbGlkYXRpb24gb2YgcGFnZSAxIG9mIHRoZQotICAgKiBXZWIgc2VydmljZS9jbGllbnQgd2l6YXJkcy4KLSAgICogQHBhcmFtIHZhbGlkYXRpb25TdGF0ZSBvbmUgb2YgVkFMSURBVEVfTk9ORSwgVkFMSURBVEVfQUxMLCBWQUxJREFURV9TRVJWRVJfUlVOVElNRV9DSEFOR0VTLCBWQUxJREFURV9QUk9KRUNUX0NIQU5HRVMsIFZBTElEQVRFX1NDQUxFX0NIQU5HRVMKLSAgICogQHBhcmFtIHR5cGVJZCBXZWIgc2VydmljZSB0eXBlIGlkIChpc0NsaWVudD1mYWxzZSkgb3IgV2ViIHNlcnZpY2UgY2xpZW50IGltcGxlbWVudGF0aW9uIHR5cGUgaWQgKGlzQ2xpZW50PXRydWUpCi0gICAqIEBwYXJhbSBydW50aW1lSWQgV2ViIHNlcnZpY2UgcnVudGltZSBpZAotICAgKiBAcGFyYW0gc2VydmVySWQgc2VydmVyIHR5cGUgaWQKLSAgICogQHBhcmFtIHByb2plY3ROYW1lIG5hbWUgb2YgcHJvamVjdAotICAgKiBAcGFyYW0gbmVlZEVhciBib29sZWFuIDxjb2RlPnRydWU8L2NvZGU+IGlmIEVBUiBpcyByZXF1aXJlZCwgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdC4KLSAgICogQHBhcmFtIGVhclByb2plY3ROYW1lIG5hbWUgb2YgRUFSIHByb2plY3QKLSAgICogQHBhcmFtIHByb2plY3RUeXBlSWQgdGVtcGxhdGUgaWQKLSAgICogQHBhcmFtIGlzQ2xpZW50IGJvb2xlYW4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIG1ldGhvZCBpcyBiZWluZyBjYWxsZWQgZm9yIGNsaWVudCBzaWRlIHZhbGlkYXRpb24sIAotICAgKiA8Y29kZT5mYWxzZTwvY29kZT4gZm9yIHNlcnZpY2Ugc2lkZSB2YWxpZGF0aW9uLgotICAgKiBAcmV0dXJuIElTdGF0dXMgd2l0aCBzZXZlcml0eSBJU3RhdHVzLk9LIGlmIG5vIGVycm9ycyBhcmUgcHJlc2VudCwKLSAgICogSVN0YXR1cyB3aXRoIHNldmVyaXR5IElTdGF0dXMuRVJST1Igb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIElTdGF0dXMgY2hlY2tFcnJvclN0YXR1cyhpbnQgdmFsaWRhdGlvblN0YXRlLCBTdHJpbmcgdHlwZUlkLCBTdHJpbmcgcnVudGltZUlkLCBTdHJpbmcgc2VydmVySWQsCi0JCQlTdHJpbmcgcHJvamVjdE5hbWUsIGJvb2xlYW4gbmVlZEVhciwgU3RyaW5nIGVhclByb2plY3ROYW1lLCBTdHJpbmcgcHJvamVjdFR5cGVJZCwKLQkJCWJvb2xlYW4gaXNDbGllbnQpIHsKLQkKLQkgIAkvLyBFbnN1cmUgc2VydmVyLCBXZWIgc2VydmljZSBydW50aW1lLCBhbmQgV2ViIHNlcnZpY2UgdHlwZSBhcmUKLQkJLy8gY29tcGF0aWJsZQotCi0JCS8vIExhYmVscwotCSAgICBTdHJpbmcgc2VydmVyTGFiZWwgPSAiIjsKLQkgICAgaWYgKHNlcnZlcklkICE9IG51bGwgJiYgc2VydmVySWQubGVuZ3RoKCk+MCkKLQkgICAgewotCSAgICAJc2VydmVyTGFiZWwgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTZXJ2ZXJMYWJlbEJ5SWQoc2VydmVySWQpOwotCSAgICB9Ci0JCVN0cmluZyBydW50aW1lTGFiZWwgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRSdW50aW1lTGFiZWxCeUlkKHJ1bnRpbWVJZCk7Ci0JCQotCSAgICBpZiAodmFsaWRhdGlvblN0YXRlID09IFZBTElEQVRFX0FMTCB8fCB2YWxpZGF0aW9uU3RhdGUgPT0gVkFMSURBVEVfU0VSVkVSX1JVTlRJTUVfQ0hBTkdFUykgewotCSAgICAJaWYgKHNlcnZlcklkICE9IG51bGwgJiYgc2VydmVySWQubGVuZ3RoKCkgPiAwKSB7Ci0JCQkJaWYgKGlzQ2xpZW50KSB7Ci0JCQkJCWlmICghV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIKLQkJCQkJCQkuaXNTZXJ2ZXJDbGllbnRSdW50aW1lVHlwZVN1cHBvcnRlZChzZXJ2ZXJJZCwKLQkJCQkJCQkJCXJ1bnRpbWVJZCwgdHlwZUlkKSkgewotCQkJCQkJcmV0dXJuIFN0YXR1c1V0aWxzCi0JCQkJCQkJCS5lcnJvclN0YXR1cyhOTFMKLQkJCQkJCQkJCQkuYmluZCgKLQkJCQkJCQkJCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfSU5WQUxJRF9TUlRfU0VMRUNUSU9OUywKLQkJCQkJCQkJCQkJCW5ldyBTdHJpbmdbXSB7IHNlcnZlckxhYmVsLAotCQkJCQkJCQkJCQkJCQlydW50aW1lTGFiZWwgfSkpOwotCQkJCQl9Ci0JCQkJfSBlbHNlIHsKLQkJCQkJaWYgKCFXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMgotCQkJCQkJCS5pc1NlcnZlclJ1bnRpbWVUeXBlU3VwcG9ydGVkKHNlcnZlcklkLCBydW50aW1lSWQsCi0JCQkJCQkJCQl0eXBlSWQpKSB7Ci0JCQkJCQlyZXR1cm4gU3RhdHVzVXRpbHMKLQkJCQkJCQkJLmVycm9yU3RhdHVzKE5MUwotCQkJCQkJCQkJCS5iaW5kKAotCQkJCQkJCQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19JTlZBTElEX1NSVF9TRUxFQ1RJT05TLAotCQkJCQkJCQkJCQkJbmV3IFN0cmluZ1tdIHsgc2VydmVyTGFiZWwsCi0JCQkJCQkJCQkJCQkJCXJ1bnRpbWVMYWJlbCB9KSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQkgICAgCi0JCS8vIElmIHRoZSBwcm9qZWN0IGV4aXN0cywgZW5zdXJlIGl0IHN1cHBvcnRzIHRoZSBXZWIgc2VydmljZSB0eXBlLCBXZWIKLQkJLy8gc2VydmljZSBydW50aW1lLCBhbmQgc2VydmVyLiBJZiB0aGUgRWFyIGFsc28gZXhpc3RzIGFuZCB0aGUgcHJvamVjdAotCQkvLyBhbmQgRWFyIGFyZSBub3QgYWxyZWFkeSBhc3NvY2lhdGVkLCBlbnN1cmUgdGhleSBjYW4gYmUuCi0JCS8vIElmIHRoZSBwcm9qZWN0IGRvZXMgbm90IGV4aXN0LCBlbnN1cmUgdGhlIHByb2plY3QgdHlwZSBzdXBwb3J0cyB0aGUKLQkJLy8gV2ViIHNlcnZpY2UgdHlwZSwgV2ViIHNlcnZpY2UgcnVudGltZSwgYW5kIHNlcnZlcgotCQlpZiAodmFsaWRhdGlvblN0YXRlID09IFZBTElEQVRFX0FMTCB8fCB2YWxpZGF0aW9uU3RhdGUgPT0gVkFMSURBVEVfU0VSVkVSX1JVTlRJTUVfQ0hBTkdFUwotCQkJCXx8IHZhbGlkYXRpb25TdGF0ZSA9PSBWQUxJREFURV9QUk9KRUNUX0NIQU5HRVMpIHsKLQkJCVZhbGlkYXRpb25VdGlscyB2YWxVdGlscyA9IG5ldyBWYWxpZGF0aW9uVXRpbHMoKTsKLQkJCUlQcm9qZWN0IHByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QocHJvamVjdE5hbWUpOwotCQkJaWYgKHByb2plY3QuZXhpc3RzKCkpIHsKLQotCQkJCWlmIChpc0NsaWVudCkgewotCQkJCQkvLyBDaGVjayBpZiB0aGUgcnVudGltZSBzdXBwb3J0cyBpdC4KLQkJCQkJaWYgKCFXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5kb2VzQ2xpZW50VHlwZUFuZFJ1bnRpbWVTdXBwb3J0UHJvamVjdCgKLQkJCQkJCQl0eXBlSWQsIHJ1bnRpbWVJZCwgcHJvamVjdE5hbWUpKSB7Ci0JCQkJCQlyZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoCi0JCQkJCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfQ0xJRU5UX1JVTlRJTUVfRE9FU19OT1RfU1VQUE9SVF9QUk9KRUNULAotCQkJCQkJCQluZXcgU3RyaW5nW10geyBydW50aW1lTGFiZWwsIHByb2plY3ROYW1lIH0pKTsKLQkJCQkJfQotCi0JCQkJCS8vIENoZWNrIGlmIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgaXQuCi0JCQkJCWlmIChzZXJ2ZXJJZCAhPSBudWxsICYmIHNlcnZlcklkLmxlbmd0aCgpID4gMCkgewotCQkJCQkJaWYgKCF2YWxVdGlscy5kb2VzU2VydmVyU3VwcG9ydFByb2plY3Qoc2VydmVySWQsIHByb2plY3ROYW1lKSkgewotCQkJCQkJCXJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZCgKLQkJCQkJCQkJCQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0NMSUVOVF9TRVJWRVJfRE9FU19OT1RfU1VQUE9SVF9QUk9KRUNULAotCQkJCQkJCQkJCQkJCW5ldyBTdHJpbmdbXSB7IHNlcnZlckxhYmVsLCBwcm9qZWN0TmFtZSB9KSk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9IGVsc2UgewotCQkJCQkvLyBDaGVjayBpZiB0aGUgcnVudGltZSBzdXBwb3J0cyBpdC4KLQkJCQkJaWYgKCFXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5kb2VzU2VydmljZVR5cGVBbmRSdW50aW1lU3VwcG9ydFByb2plY3QoCi0JCQkJCQkJdHlwZUlkLCBydW50aW1lSWQsIHByb2plY3ROYW1lKSkgewotCQkJCQkJcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKAotCQkJCQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX1NFUlZJQ0VfUlVOVElNRV9ET0VTX05PVF9TVVBQT1JUX1BST0pFQ1QsCi0JCQkJCQkJCW5ldyBTdHJpbmdbXSB7IHJ1bnRpbWVMYWJlbCwgcHJvamVjdE5hbWUgfSkpOwotCQkJCQl9Ci0KLQkJCQkJLy8gQ2hlY2sgaWYgdGhlIHNlcnZlciBzdXBwb3J0cyBpdC4KLQkJCQkJaWYgKHNlcnZlcklkICE9IG51bGwgJiYgc2VydmVySWQubGVuZ3RoKCkgPiAwKQotCQkJCQl7Ci0JCQkJCSAgaWYgKCF2YWxVdGlscy5kb2VzU2VydmVyU3VwcG9ydFByb2plY3Qoc2VydmVySWQsIHByb2plY3ROYW1lKSkgewotCQkJCQkJcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKAotCQkJCQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX1NFUlZJQ0VfU0VSVkVSX0RPRVNfTk9UX1NVUFBPUlRfUFJPSkVDVCwKLQkJCQkJCQkJbmV3IFN0cmluZ1tdIHsgc2VydmVyTGFiZWwsIHByb2plY3ROYW1lIH0pKTsKLQkJCQkJICB9Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCS8vIExvb2sgYXQgdGhlIHByb2plY3QgdHlwZSB0byBlbnN1cmUgdGhhdCBpdCBpcyBzdWl0YWJsZSBmb3IKLQkJCQkvLyB0aGUKLQkJCQkvLyBzZWxlY3RlZCBydW50aW1lIGFuZCBzZXJ2ZXIuCi0JCQkJU3RyaW5nIHRlbXBsYXRlSWQgPSBwcm9qZWN0VHlwZUlkOwotCQkJCVN0cmluZyB0ZW1wbGF0ZUxhYmVsID0gRmFjZXRVdGlscy5nZXRUZW1wbGF0ZUxhYmVsQnlJZCh0ZW1wbGF0ZUlkKTsKLQotCQkJCWlmIChpc0NsaWVudCkgewotCQkJCQkvLyBDaGVjayBpZiB0aGUgcnVudGltZSBzdXBwb3J0cyBpdC4KLQkJCQkJaWYgKCFXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5kb2VzQ2xpZW50VHlwZUFuZFJ1bnRpbWVTdXBwb3J0VGVtcGxhdGUoCi0JCQkJCQkJdHlwZUlkLCBydW50aW1lSWQsIHRlbXBsYXRlSWQpKSB7Ci0KLQkJCQkJCXJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZCgKLQkJCQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19DTElFTlRfUlVOVElNRV9ET0VTX05PVF9TVVBQT1JUX1RFTVBMQVRFLAotCQkJCQkJCQluZXcgU3RyaW5nW10geyBydW50aW1lTGFiZWwsIHRlbXBsYXRlTGFiZWwgfSkpOwotCQkJCQl9Ci0KLQkJCQkJLy8gQ2hlY2sgaWYgdGhlIHNlcnZlciBzdXBwb3J0cyBpdC4KLQkJCQkJaWYgKHNlcnZlcklkICE9IG51bGwgJiYgc2VydmVySWQubGVuZ3RoKCk+MCkKLQkJCQkJewotCQkJCQkgIGlmICghdmFsVXRpbHMuZG9lc1NlcnZlclN1cHBvcnRUZW1wbGF0ZShzZXJ2ZXJJZCwgdGVtcGxhdGVJZCkpIHsKLQkJCQkJCXJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZCgKLQkJCQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19DTElFTlRfU0VSVkVSX0RPRVNfTk9UX1NVUFBPUlRfVEVNUExBVEUsCi0JCQkJCQkJCW5ldyBTdHJpbmdbXSB7IHNlcnZlckxhYmVsLCB0ZW1wbGF0ZUxhYmVsIH0pKTsKLQkJCQkJICB9Ci0JCQkJCX0KLQotCQkJCX0gZWxzZSB7Ci0JCQkJCS8vIENoZWNrIGlmIHRoZSBydW50aW1lIHN1cHBvcnRzIGl0LgotCQkJCQlpZiAoIVdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmRvZXNTZXJ2aWNlVHlwZUFuZFJ1bnRpbWVTdXBwb3J0VGVtcGxhdGUoCi0JCQkJCQkJdHlwZUlkLCBydW50aW1lSWQsIHRlbXBsYXRlSWQpKSB7Ci0JCQkJCQlyZXR1cm4gU3RhdHVzVXRpbHMKLQkJCQkJCQkJLmVycm9yU3RhdHVzKE5MUwotCQkJCQkJCQkJCS5iaW5kKAotCQkJCQkJCQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19TRVJWSUNFX1JVTlRJTUVfRE9FU19OT1RfU1VQUE9SVF9URU1QTEFURSwKLQkJCQkJCQkJCQkJCW5ldyBTdHJpbmdbXSB7IHJ1bnRpbWVMYWJlbCwgdGVtcGxhdGVMYWJlbCB9KSk7Ci0JCQkJCX0KLQotCQkJCQkvLyBDaGVjayBpZiB0aGUgc2VydmVyIHN1cHBvcnRzIGl0LgotCQkJCQlpZiAoc2VydmVySWQgIT0gbnVsbCAmJiBzZXJ2ZXJJZC5sZW5ndGgoKT4wKQotCQkJCQl7Ci0JCQkJCSAgaWYgKCF2YWxVdGlscy5kb2VzU2VydmVyU3VwcG9ydFRlbXBsYXRlKHNlcnZlcklkLCB0ZW1wbGF0ZUlkKSkgewotCQkJCQkJcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKAotCQkJCQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX1NFUlZJQ0VfU0VSVkVSX0RPRVNfTk9UX1NVUFBPUlRfVEVNUExBVEUsCi0JCQkJCQkJCW5ldyBTdHJpbmdbXSB7IHNlcnZlckxhYmVsLCB0ZW1wbGF0ZUxhYmVsIH0pKTsKLQkJCQkJICB9Ci0JCQkJCX0KLQkJCQl9Ci0KLQkJCX0JCQkJCQkKLQkJCQotCQl9Ci0JCQotCSAgICBpZiAodmFsaWRhdGlvblN0YXRlID09IFZBTElEQVRFX0FMTCB8fCB2YWxpZGF0aW9uU3RhdGUgPT0gVkFMSURBVEVfUFJPSkVDVF9DSEFOR0VTKSB7Ci0JCQkvLyBDaGVjayBpZiBwcm9qZWN0L0VBUiBhc3NvY2lhdGlvbiBpcyBnb29kLgotCQkJaWYgKG5lZWRFYXIpIHsKLQkJCQlJUHJvamVjdCBwcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLQkJCQlJUHJvamVjdCBlcCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChlYXJQcm9qZWN0TmFtZSk7Ci0JCQkJCi0JCQkJLy8gMTk0NDM0IC0gQ2hlY2sgZm9yIG5vbi1leGlzdGluZyBFQVIgd2l0aCBjb250ZW50cyB0aGF0J3Mgbm90IGRlbGV0ZWQgcHJldmlvdXNseQotCQkJCUlTdGF0dXMgY2FuQ3JlYXRlRUFSU3RhdHVzID0gSjJFRVV0aWxzLmNhbkNyZWF0ZUVBUihlcCk7Ci0JCQkJaWYgKCFjYW5DcmVhdGVFQVJTdGF0dXMuaXNPSygpKSB7Ci0JCQkJCXJldHVybiBjYW5DcmVhdGVFQVJTdGF0dXM7Ci0JCQkJfQotCQkJCi0JCQkJaWYgKHByb2plY3QuZXhpc3RzKCkgJiYgZXAuZXhpc3RzKCkpIHsKLQkJCQkJaWYgKCFKMkVFVXRpbHMuaXNDb21wb25lbnRBc3NvY2lhdGVkKGVwLCBwcm9qZWN0KSkgewotCQkJCQkJSVN0YXR1cyBhc3NvY2lhdGVTdGF0dXMgPSBKMkVFVXRpbHMuY2FuQXNzb2NpYXRlUHJvamVjdFRvRUFSKHByb2plY3QsIGVwKTsKLQkJCQkJCWlmIChhc3NvY2lhdGVTdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLkVSUk9SKSB7Ci0JCQkJCQkJaWYgKGlzQ2xpZW50KSB7Ci0JCQkJCQkJCXJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZCgKLQkJCQkJCQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0NMSUVOVF9DQU5OT1RfQVNTT0NJQVRFLAotCQkJCQkJCQkJCW5ldyBTdHJpbmdbXSB7IHByb2plY3ROYW1lLCBlcC5nZXROYW1lKCksCi0JCQkJCQkJCQkJCQlhc3NvY2lhdGVTdGF0dXMuZ2V0TWVzc2FnZSgpIH0pKTsKLQkJCQkJCQl9IGVsc2UgewotCQkJCQkJCQlyZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoCi0JCQkJCQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19TRVJWSUNFX0NBTk5PVF9BU1NPQ0lBVEUsCi0JCQkJCQkJCQkJbmV3IFN0cmluZ1tdIHsgcHJvamVjdE5hbWUsIGVwLmdldE5hbWUoKSwKLQkJCQkJCQkJCQkJCWFzc29jaWF0ZVN0YXR1cy5nZXRNZXNzYWdlKCkgfSkpOwotCQkJCQkJCX0KLQotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9CQkKLQotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQotCX0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIElTdGF0dXMgcmVzdWx0aW5nIGZyb20gY2hlY2tpbmcgZm9yIHdhcm5pbmdzLiBVc2VkIGZvciB2YWxpZGF0aW9uIG9mIHBhZ2UgMSBvZiB0aGUKLSAgICogV2ViIHNlcnZpY2UvY2xpZW50IHdpemFyZHMuIAotICAgKiBAcGFyYW0gdmFsaWRhdGlvblN0YXRlIG9uZSBvZiBWQUxJREFURV9OT05FLCBWQUxJREFURV9BTEwsIFZBTElEQVRFX1NFUlZFUl9SVU5USU1FX0NIQU5HRVMsIFZBTElEQVRFX1BST0pFQ1RfQ0hBTkdFUywgVkFMSURBVEVfU0NBTEVfQ0hBTkdFUwotICAgKiBAcGFyYW0gc2NhbGVTZXR0aW5nIG9uZSBvZiA8QlIvPgotICAgKiBTY2VuYXJpb0NvbnRleHQuV1NfVEVTVDxCUi8+Ci0gICAqIFNjZW5hcmlvQ29udGV4dC5XU19TVEFSVDxCUi8+Ci0gICAqIFNjZW5hcmlvQ29udGV4dC5XU19JTlNUQUxMPEJSLz4KLSAgICogU2NlbmFyaW9Db250ZXh0LldTX0RFUExPWTxCUi8+Ci0gICAqIFNjZW5hcmlvQ29udGV4dC5XU19BU1NFTUJMRTxCUi8+Ci0gICAqIFNjZW5hcmlvQ29udGV4dC5XU19ERVZFTE9QPEJSLz4KLSAgICogU2NlbmFyaW9Db250ZXh0LldTX05PTkUKLSAgICogQHBhcmFtIHNlcnZlcklkIHNlcnZlciB0eXBlIGlkCi0gICAqIEBwYXJhbSBpc0NsaWVudCBib29sZWFuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBtZXRob2QgaXMgYmVpbmcgY2FsbGVkIGZvciBjbGllbnQgc2lkZSB2YWxpZGF0aW9uLCAKLSAgICogPGNvZGU+ZmFsc2U8L2NvZGU+IGZvciBzZXJ2aWNlIHNpZGUgdmFsaWRhdGlvbi4KLSAgICogQHJldHVybiBJU3RhdHVzIHdpdGggc2V2ZXJpdHkgSVN0YXR1cy5PSyBpZiBubyBlcnJvcnMgYXJlIHByZXNlbnQsCi0gICAqIElTdGF0dXMgd2l0aCBzZXZlcml0eSBJU3RhdHVzLldBUk5JTkcgb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIElTdGF0dXMgY2hlY2tXYXJuaW5nU3RhdHVzKGludCB2YWxpZGF0aW9uU3RhdGUsIGludCBzY2FsZVNldHRpbmcsIFN0cmluZyBzZXJ2ZXJJZCwKLQkJCWJvb2xlYW4gaXNDbGllbnQpIHsKLQkJLy8gUmV0dXJuIGEgd2FybmluZyBpZiB0aGVyZSBpcyBubyBzZXJ2ZXIgc2VsZWN0aW9uIGFuZCBzY2FsZSBzZXR0aW5nIGlzCi0JCS8vIGFueXRoaW5nIGJleW9uZCBhc3NlbWJsZS4KLQkJaWYgKHZhbGlkYXRpb25TdGF0ZSA9PSBWQUxJREFURV9BTEwgfHwgdmFsaWRhdGlvblN0YXRlID09IFZBTElEQVRFX1NDQUxFX0NIQU5HRVMKLQkJCQl8fCB2YWxpZGF0aW9uU3RhdGUgPT0gVkFMSURBVEVfU0VSVkVSX1JVTlRJTUVfQ0hBTkdFUykgewotCQkJaWYgKHNlcnZlcklkID09IG51bGwgfHwgc2VydmVySWQubGVuZ3RoKCkgPT0gMCkgewotCQkJCWlmIChzY2FsZVNldHRpbmcgPCBTY2VuYXJpb0NvbnRleHQuV1NfQVNTRU1CTEUpIHsKLQkJCQkJaWYgKGlzQ2xpZW50KSB7Ci0JCQkJCQlyZXR1cm4gU3RhdHVzVXRpbHMud2FybmluZ1N0YXR1cyhOTFMuYmluZCgKLQkJCQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19XQVJOX05PX0NMSUVOVF9TRVJWRVIsIG5ldyBTdHJpbmdbMF0pKTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCXJldHVybiBTdGF0dXNVdGlscy53YXJuaW5nU3RhdHVzKE5MUy5iaW5kKAotCQkJCQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX1dBUk5fTk9fU0VSVklDRV9TRVJWRVIsIG5ldyBTdHJpbmdbMF0pKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJLy8gUmV0dXJuIGEgd2FybmluZyBpZiB0aGUgc2VsZWN0ZWQgc2VydmVyIGhhcyBvbmx5IHN0dWIKLQkJCQkvLyBydW50aW1lcwotCQkJCS8vIGFuZCB0aGUgc2NhbGUgc2V0dGluZyBpcyBhbnl0aGluZyBiZXlvbmQgZGVwbG95LgotCQkJCUlTZXJ2ZXJUeXBlIHNlcnZlclR5cGUgPSBTZXJ2ZXJDb3JlLmZpbmRTZXJ2ZXJUeXBlKHNlcnZlcklkKTsKLQkJCQlpZiAoc2VydmVyVHlwZSAhPSBudWxsKSB7Ci0JCQkJCS8vIEZpbmQgYSBSdW50aW1lIHdoaWNoIGlzIG5vdCBhIHN0dWIKLQkJCQkJSVJ1bnRpbWUgbm9uU3R1YlJ1bnRpbWUgPSBTZXJ2ZXJVdGlscy5nZXROb25TdHViUnVudGltZShzZXJ2ZXJJZCk7Ci0JCQkJCWlmICgoc2NhbGVTZXR0aW5nIDwgU2NlbmFyaW9Db250ZXh0LldTX0RFUExPWSkgJiYgbm9uU3R1YlJ1bnRpbWUgPT0gbnVsbCkgewotCQkJCQkJU3RyaW5nIHNlcnZlcnR5cGVMYWJlbCA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyCi0JCQkJCQkJCS5nZXRTZXJ2ZXJMYWJlbEJ5SWQoc2VydmVySWQpOwotCQkJCQkJcmV0dXJuIFN0YXR1c1V0aWxzLndhcm5pbmdTdGF0dXMoTkxTLmJpbmQoCi0JCQkJCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfV0FSTl9TVFVCX09OTFksCi0JCQkJCQkJCW5ldyBTdHJpbmdbXSB7IHNlcnZlcnR5cGVMYWJlbCB9KSk7Ci0JCQkJCX0KLQkJCQl9Ci0KLQkJCX0KLQkJfQotCi0JCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCi0JfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHByb3ZpZGVkIHNlcnZlciB0eXBlIHN1cHBvcnRzIHRoZSBmYWNldCB2ZXJzaW9ucyBvbiB0aGUgcHJvdmlkZWQgcHJvamVjdAotICAgKiBAcGFyYW0gc2VydmVyRmFjdG9yeUlkIHNlcnZlciB0eXBlIGlkCi0gICAqIEBwYXJhbSBwcm9qZWN0TmFtZSBuYW1lIG9mIGEgcHJvamVjdCB0aGF0IG1heSBvciBtYXkgbm90IGV4aXN0LgotICAgKiBAcmV0dXJuIGJvb2xlYW4gPGNvZGU+dHJ1ZTwvY29kZT4KLSAgICogPHVsPiAKLSAgICogPGxpPmlmIHRoZSBzZXJ2ZXIgdHlwZSBzdXBwb3J0cyB0aGUgZmFjZXQgdmVyc2lvbnMgb24gdGhlIHByb2plY3Qgb3I8L2xpPgotICAgKiA8bGk+aWYgdGhlIHByb2plY3QgaXMgbm90IGEgZmFjZXRlZCBwcm9qZWN0IG9yPC9saT4KLSAgICogPGxpPmlmIHRoZSBwcm9qZWN0IGRvZXMgbm90IGV4aXN0LjwvbGk+Ci0gICAqIDwvdWw+Ci0gICAqIFJldHVybnMgPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGRvZXNTZXJ2ZXJTdXBwb3J0UHJvamVjdChTdHJpbmcgc2VydmVyRmFjdG9yeUlkLCBTdHJpbmcgcHJvamVjdE5hbWUpCi0gIHsKLSAgICBJUHJvamVjdCBwcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLSAgICBJRmFjZXRlZFByb2plY3QgZlByb2plY3QgPSBudWxsOwotICAgIGlmIChwcm9qZWN0LmV4aXN0cygpKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBmUHJvamVjdCA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmNyZWF0ZShwcm9qZWN0KTsKLSAgICAgIH0gY2F0Y2ggKENvcmVFeGNlcHRpb24gY2UpCi0gICAgICB7Ci0KLSAgICAgIH0KLSAgICAgIAotICAgICAgaWYgKGZQcm9qZWN0ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIFNldCBmYWNldHMgPSBmUHJvamVjdC5nZXRQcm9qZWN0RmFjZXRzKCk7Ci0gICAgICAgIHJldHVybiBkb2VzU2VydmVyU3VwcG9ydEZhY2V0cyhzZXJ2ZXJGYWN0b3J5SWQsIGZhY2V0cyk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vSWYgaXQncyBub3QgYSBmYWNldGVkIHByb2plY3QsIHdlIGhhdmUgbm90aGluZyB0byBjb21wYXJlIHRvIC0gYXNzdW1lIGl0J3MgZ29vZC4KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvL0lmIHRoZSBwcm9qZWN0IGRvZXNuJ3QgZXhpc3QsIHdlIGhhdmUgbm90aGluZyB0byBjb21wYXJlIHRvIC0gYXNzdW1lIGl0J3MgZ29vZC4KLSAgICAgIHJldHVybiB0cnVlOyAgICAgIAotICAgIH0KLSAgICAKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBwcm92aWRlZCBzZXJ2ZXIgdHlwZSBzdXBwb3J0cyB0aGUgZmFjZXQgdmVyc2lvbnMgaW4gdGhlIHByb3ZpZGVkIHNldC4KLSAgICogQHBhcmFtIHNlcnZlckZhY3RvcnlJZCBzZXJ2ZXIgdHlwZSBpZAotICAgKiBAcGFyYW0gZmFjZXRzIHNldCBjb250YWluaW5nIGVsZW1lbnRzIG9mIHR5cGUge0BsaW5rIElQcm9qZWN0RmFjZXRWZXJzaW9ufQotICAgKiBAcmV0dXJuIGJvb2xlYW4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIHNlcnZlciB0eXBlIHN1cHBvcnRzIHRoZSBmYWNldCB2ZXJzaW9ucyBpbiB0aGUgcHJvdmlkZWQgc2V0LAotICAgKiA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZG9lc1NlcnZlclN1cHBvcnRGYWNldHMoU3RyaW5nIHNlcnZlckZhY3RvcnlJZCwgU2V0IGZhY2V0cykKLSAgewotICAgIFNldCBydW50aW1lcyA9IEZhY2V0VXRpbHMuZ2V0UnVudGltZXMobmV3IFNldFtde2ZhY2V0c30pOwotICAgIEl0ZXJhdG9yIGl0ciA9IHJ1bnRpbWVzLml0ZXJhdG9yKCk7Ci0gICAgSVNlcnZlclR5cGUgc3QgPSBTZXJ2ZXJDb3JlLmZpbmRTZXJ2ZXJUeXBlKHNlcnZlckZhY3RvcnlJZCk7ICAgICAgICAKLSAgICBTdHJpbmcgcnVudGltZVR5cGVJZCA9IHN0LmdldFJ1bnRpbWVUeXBlKCkuZ2V0SWQoKTsKLSAgICB3aGlsZSAoaXRyLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5ydW50aW1lLklSdW50aW1lIGZSdW50aW1lID0gKG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnJ1bnRpbWUuSVJ1bnRpbWUpaXRyLm5leHQoKTsKLSAgICAgIElSdW50aW1lIHNSdW50aW1lID0gRmFjZXRVdGlsLmdldFJ1bnRpbWUoZlJ1bnRpbWUpOwotICAgICAgaWYgKHNSdW50aW1lICE9IG51bGwpCi0gICAgICB7Ci0JICAgICAgSVJ1bnRpbWVUeXBlIHJ1bnRpbWVUeXBlID0gc1J1bnRpbWUuZ2V0UnVudGltZVR5cGUoKTsKLQkgICAgICBpZiAocnVudGltZVR5cGUgIT0gbnVsbCAmJiBydW50aW1lVHlwZUlkLmVxdWFscyhydW50aW1lVHlwZS5nZXRJZCgpKSkKLQkgICAgICB7Ci0JICAgICAgICAvL2ZvdW5kIGEgbWF0Y2gKLQkgICAgICAgIHJldHVybiB0cnVlOwotCSAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOyAgICAKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHByb3ZpZGVkIHNlcnZlciB0eXBlIHN1cHBvcnRzIGF0IGxlYXN0IG9uZSB2ZXJzaW9uIG9mCi0gICAqIGVhY2ggb2YgdGhlIGZpeGVkIGZhY2V0cyBvbiB0aGUgcHJvdmlkZWQgdGVtcGxhdGUKLSAgICogQHBhcmFtIHNlcnZlckZhY3RvcnlJZCBzZXJ2ZXIgdHlwZSBpZAotICAgKiBAcGFyYW0gdGVtcGxhdGVJZCBpZCBvZiBhIHtAbGluayBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZX0KLSAgICogQHJldHVybiBib29sZWFuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBzZXJ2ZXIgdHlwZSBzdXBwb3J0cyBhdCBsZWFzdCBvbmUgdmVyc2lvbiBvZgotICAgKiBlYWNoIG9mIHRoZSBmaXhlZCBmYWNldHMgb24gdGhlIHByb3ZpZGVkIHRlbXBsYXRlLCA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZG9lc1NlcnZlclN1cHBvcnRUZW1wbGF0ZShTdHJpbmcgc2VydmVyRmFjdG9yeUlkLCBTdHJpbmcgdGVtcGxhdGVJZCkKLSAgewotICAgIElGYWNldGVkUHJvamVjdFRlbXBsYXRlIHRlbXBsYXRlID0gUHJvamVjdEZhY2V0c01hbmFnZXIuZ2V0VGVtcGxhdGUodGVtcGxhdGVJZCk7Ci0gICAgU2V0IHRlbXBsYXRlRmFjZXRzID0gdGVtcGxhdGUuZ2V0Rml4ZWRQcm9qZWN0RmFjZXRzKCk7Ci0gICAgSXRlcmF0b3IgdGVtcGxhdGVGYWNldHNJdHIgPSB0ZW1wbGF0ZUZhY2V0cy5pdGVyYXRvcigpOwotICAgIHdoaWxlICh0ZW1wbGF0ZUZhY2V0c0l0ci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgYm9vbGVhbiBzZXJ2ZXJTdXBwb3J0c1RoaXNPbmUgPSBmYWxzZTsKLSAgICAgIElQcm9qZWN0RmFjZXQgZml4ZWRGYWNldCA9IChJUHJvamVjdEZhY2V0KXRlbXBsYXRlRmFjZXRzSXRyLm5leHQoKTsgICAgICAKLSAgICAgIExpc3QgdmVyc2lvbnMgPSBudWxsOwotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIHZlcnNpb25zID0gZml4ZWRGYWNldC5nZXRTb3J0ZWRWZXJzaW9ucyh0cnVlKTsKLSAgICAgIH0gY2F0Y2ggKFZlcnNpb25Gb3JtYXRFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgU2V0IHZlcnNpb25TZXQgPSBmaXhlZEZhY2V0LmdldFZlcnNpb25zKCk7Ci0gICAgICAgIEl0ZXJhdG9yIGl0ciA9IHZlcnNpb25TZXQuaXRlcmF0b3IoKTsKLSAgICAgICAgdmVyc2lvbnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgIHdoaWxlIChpdHIuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICB2ZXJzaW9ucy5hZGQoaXRyLm5leHQoKSk7Ci0gICAgICAgIH0gICAgICAgICAgICAKLSAgICAgIH0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgU2V0IHZlcnNpb25TZXQgPSBmaXhlZEZhY2V0LmdldFZlcnNpb25zKCk7Ci0gICAgICAgIEl0ZXJhdG9yIGl0ciA9IHZlcnNpb25TZXQuaXRlcmF0b3IoKTsKLSAgICAgICAgdmVyc2lvbnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgIHdoaWxlIChpdHIuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICB2ZXJzaW9ucy5hZGQoaXRyLm5leHQoKSk7Ci0gICAgICAgIH0gICAgICAgICAgICAKLSAgICAgIH0gCi0gICAgICBJdGVyYXRvciB2ZXJzaW9uc0l0ciA9IHZlcnNpb25zLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSh2ZXJzaW9uc0l0ci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIElQcm9qZWN0RmFjZXRWZXJzaW9uIHBmdiA9IChJUHJvamVjdEZhY2V0VmVyc2lvbil2ZXJzaW9uc0l0ci5uZXh0KCk7Ci0gICAgICAgIFNldCBwZnZzID0gbmV3IEhhc2hTZXQoKTsKLSAgICAgICAgcGZ2cy5hZGQocGZ2KTsKLSAgICAgICAgaWYgKGRvZXNTZXJ2ZXJTdXBwb3J0RmFjZXRzKHNlcnZlckZhY3RvcnlJZCwgcGZ2cykpCi0gICAgICAgIHsKLSAgICAgICAgICBzZXJ2ZXJTdXBwb3J0c1RoaXNPbmUgPSB0cnVlOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9ICAgICAgICAKLSAgICAgIH0KLSAgICAgIAotICAgICAgaWYgKCFzZXJ2ZXJTdXBwb3J0c1RoaXNPbmUpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBwcm92aWRlZCBwcm9qZWN0IG9yIHByb2plY3QgdHlwZSAoaWYgdGhlIHByb2plY3QgaXMgbnVsbCBvciBkb2VzIG5vdCBleGlzdCkKLSAgICogcnVsZXMgb3V0IHRoZSBuZWVkIGZvciBhbiBFQVIuCi0gICAqIEBwYXJhbSBwcm9qZWN0TmFtZSBuYW1lIG9mIGEgcHJvamVjdAotICAgKiBAcGFyYW0gcHJvamVjdFR5cGVJZCBpZCBvZiBhIHtAbGluayBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZX0uIE11c3QgYmUgbm9uLWVtcHR5IGlmIHRoZSBwcm9qZWN0IGlzIG51bGwgb3IKLSAgICogZG9lcyBub3QgZXhpc3QuIAotICAgKiBAcmV0dXJuIGJvb2xlYW4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIG5lZWQgZm9yIGFuIEVBUiBpcyBub3QgcnVsZWQgb3V0LCA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgotICAgKi8KLQlwdWJsaWMgYm9vbGVhbiBwcm9qZWN0T3JQcm9qZWN0VHlwZU5lZWRzRWFyKFN0cmluZyBwcm9qZWN0TmFtZSwgU3RyaW5nIHByb2plY3RUeXBlSWQpCi0JewotCQkvLyBJZiB0aGUgcHJvamVjdCBpcyBhIHNpbXBsZSBKYXZhIHByb2plY3Qgb3IgdGhlIHByb2plY3QgdHlwZSBpcwotCQkvLyBKYXZhIHV0aWxpdHkgcmV0dXJuIGZhbHNlLgotCQlpZiAocHJvamVjdE5hbWUgIT0gbnVsbCAmJiBwcm9qZWN0TmFtZS5sZW5ndGgoKSA+IDApIHsKLQkJCUlQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZVV0aWxzLmdldFdvcmtzcGFjZVJvb3QoKS5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLQkJCWlmIChwcm9qZWN0LmV4aXN0cygpKSB7Ci0JCQkJaWYgKEZhY2V0VXRpbHMuaXNKYXZhUHJvamVjdChwcm9qZWN0KSkgewotCQkJCQlyZXR1cm4gZmFsc2U7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJLy8gUHJvamVjdCBkaWRuJ3QgcnVsZSBvdXQgdGhlIG5lZWQgZm9yIGFuIEVBUgotCQkvLyBzbyBjaGVjayB0aGUgcHJvZWN0IHR5cGUKLQkJU3RyaW5nIHRlbXBsYXRlSWQgPSBwcm9qZWN0VHlwZUlkOwotCQlpZiAodGVtcGxhdGVJZCAhPSBudWxsICYmIHRlbXBsYXRlSWQubGVuZ3RoKCkgPiAwKSB7Ci0JCQlpZiAoRmFjZXRVdGlscy5pc1V0aWxpdHlUZW1wbGF0ZSh0ZW1wbGF0ZUlkKSkgewotCQkJCXJldHVybiBmYWxzZTsKLQkJCX0KLQkJfQotCi0JCXJldHVybiB0cnVlOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IGFuIEoyRUUgMS4zIEVBUiBwcm9qZWN0IGNhbiBiZSBpbnN0YWxsZWQgb24gYSBzZXJ2ZXIgb2YKLQkgKiB0aGUgcHJvdmlkZWQgc2VydmVyIHR5cGUuCi0JICogQHBhcmFtIHNlcnZlclR5cGVJZCBzZXJ2ZXIgdHlwZSBpZAotCSAqIEByZXR1cm4gYm9vbGVhbiA8Y29kZT50cnVlPC9jb2RlPiBpZiBhIEoyRUUgMS4zIEVBUiBwcm9qZWN0IGNhbiBiZSBpbnN0YWxsZWQgb24gYSBzZXJ2ZXIgb2YKLQkgKiB0aGUgcHJvdmlkZWQgc2VydmVyIHR5cGUsIDxjb2RlPmZhbHNlPC9jb2RlPiBvdGhlcndpc2UuIAotCSAqLwotCXB1YmxpYyBib29sZWFuIHNlcnZlck5lZWRzRUFSKFN0cmluZyBzZXJ2ZXJUeXBlSWQpCi0JewotCQlpZiAoc2VydmVyVHlwZUlkID09IG51bGwpIHsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCSAgICBpZiAoc2VydmVyVHlwZUlkLmxlbmd0aCgpID4gMCkgewotCQkJU3RyaW5nIHRhcmdldElkID0gU2VydmVyVXRpbHMuZ2V0UnVudGltZVRhcmdldElkRnJvbUZhY3RvcnlJZChzZXJ2ZXJUeXBlSWQpOwotCQkJaWYgKHRhcmdldElkICE9IG51bGwgJiYgdGFyZ2V0SWQubGVuZ3RoKCkgPiAwKSB7Ci0JCQkJaWYgKCFTZXJ2ZXJVdGlscy5pc1RhcmdldFZhbGlkRm9yRUFSKHRhcmdldElkLCAiMTMiKSkgLy8gcm0gajJlZQotCQkJCXsKLQkJCQkJcmV0dXJuIGZhbHNlOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCXJldHVybiB0cnVlOwotCX0KLQkKLSAgcHVibGljIElTdGF0dXMgdmFsaWRhdGVQcm9qZWN0VGFyZ2V0QW5kSjJFRShTdHJpbmcgcHJvamVjdE5hbWUsIFN0cmluZyBjb21wTmFtZSwgU3RyaW5nIGVhck5hbWUsIFN0cmluZyBlYXJDb21wTmFtZSwgU3RyaW5nIHNlcnZlckZhY3RvcnlJZCwgU3RyaW5nIGoyZWVMZXZlbCkKLSAgewotICAgIElQcm9qZWN0IHAgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QocHJvamVjdE5hbWUpOwotICAgIElQcm9qZWN0IGVhclAgPSBudWxsOwotICAgIGlmIChlYXJOYW1lIT1udWxsICYmICFlYXJOYW1lLmVxdWFsc0lnbm9yZUNhc2UoIiIpKSB7Ci0gICAgCWVhclAgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoZWFyTmFtZSk7Ci0gICAgfQotICAgIElTdGF0dXMgdGFyZ2V0U3RhdHVzID0gZG9lc1Byb2plY3RUYXJnZXRNYXRjaFNlcnZlclR5cGUocCwgc2VydmVyRmFjdG9yeUlkKTsKLSAgICBpZiAoZWFyUCE9bnVsbCAmJiB0YXJnZXRTdGF0dXMuZ2V0U2V2ZXJpdHkoKT09U3RhdHVzLk9LKQotICAgIHsKLSAgICAgIC8vY2hlY2sgdGhlIEVBUiAgICAgIAotICAgICAgSVN0YXR1cyBlYXJUYXJnZXRTdGF0dXMgPSBkb2VzUHJvamVjdFRhcmdldE1hdGNoU2VydmVyVHlwZShlYXJQLCBzZXJ2ZXJGYWN0b3J5SWQpOwotICAgICAgaWYoZWFyVGFyZ2V0U3RhdHVzLmdldFNldmVyaXR5KCk9PVN0YXR1cy5FUlJPUikKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGVhclRhcmdldFN0YXR1czsKLSAgICAgIH0gICAgICAgICAgICAKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJldHVybiB0YXJnZXRTdGF0dXM7Ci0gICAgfQotICAgIAotCi0gICAgLy9WYWxpZGF0ZSBzZXJ2aWNlIHNpZGUgSjJFRSBsZXZlbCAgICAKLSAgICBJU3RhdHVzIGoyZWVTdGF0dXMgPSBkb2VzUHJvamVjdE1hdGNoSjJFRUxldmVsKHAsIGNvbXBOYW1lLCBqMmVlTGV2ZWwpOwotICAgIGlmKGVhclAhPW51bGwgJiYgajJlZVN0YXR1cy5nZXRTZXZlcml0eSgpPT1TdGF0dXMuT0spCi0gICAgewotICAgICAgSVN0YXR1cyBlYXJKMkVFU3RhdHVzID0gZG9lc1Byb2plY3RNYXRjaEoyRUVMZXZlbChlYXJQLCBlYXJDb21wTmFtZSwgajJlZUxldmVsKTsKLSAgICAgIGlmKGVhckoyRUVTdGF0dXMuZ2V0U2V2ZXJpdHkoKT09U3RhdHVzLkVSUk9SKQotICAgICAgewotICAgICAgICByZXR1cm4gZWFySjJFRVN0YXR1czsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJldHVybiBqMmVlU3RhdHVzOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotICAKLSAgLy9UT0RPOiBUaGlzIG1ldGhvZCBpcyBvYnNlbGV0ZSAtIHNob3VsZCBiZSByZW1vdmVkLgotICBwcml2YXRlIElTdGF0dXMgZG9lc1Byb2plY3RUYXJnZXRNYXRjaFNlcnZlclR5cGUoSVByb2plY3QgcCwgU3RyaW5nIHNlcnZlckZhY3RvcnlJZCkKLSAgewotICAgIGlmIChwIT1udWxsICYmIHAuZXhpc3RzKCkpCi0gICAgewotICAgICAgSVJ1bnRpbWUgcHJvamVjdFRhcmdldCA9IFNlcnZlclNlbGVjdGlvblV0aWxzLmdldFJ1bnRpbWVUYXJnZXQocC5nZXROYW1lKCkpOwotICAgICAgaWYgKHByb2plY3RUYXJnZXQhPW51bGwpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBwcm9qZWN0VGFyZ2V0SWQgPSBwcm9qZWN0VGFyZ2V0LmdldFJ1bnRpbWVUeXBlKCkuZ2V0SWQoKTsKLSAgICAgICAgU3RyaW5nIHNlcnZlclRhcmdldElkID0gU2VydmVyVXRpbHMuZ2V0UnVudGltZVRhcmdldElkRnJvbUZhY3RvcnlJZChzZXJ2ZXJGYWN0b3J5SWQpOwotICAgICAgICBpZiAoc2VydmVyVGFyZ2V0SWQhPW51bGwgJiYgc2VydmVyVGFyZ2V0SWQubGVuZ3RoKCk+MCkKLSAgICAgICAgewotICAgICAgICAgIGlmKCFwcm9qZWN0VGFyZ2V0SWQuZXF1YWxzKHNlcnZlclRhcmdldElkKSkKLSAgICAgICAgICB7IAotICAgICAgICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX1NFUlZFUl9UQVJHRVRfTUlTTUFUQ0gsbmV3IFN0cmluZ1tde3AuZ2V0TmFtZSgpfSkgKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7ICAgICAgICAKLSAgfQotCi0gIC8vVE9ETzogVGhpcyBtZXRob2QgaXMgb2JzZWxldGUgLSBzaG91bGQgYmUgcmVtb3ZlZC4KLSAgcHJpdmF0ZSBJU3RhdHVzIGRvZXNQcm9qZWN0TWF0Y2hKMkVFTGV2ZWwoSVByb2plY3QgcCwgU3RyaW5nIGNvbXBOYW1lLCBTdHJpbmcgajJlZUxldmVsKQotICB7Ci0KLSAgICB0cnkgewotCQlpZiAocCE9bnVsbCAmJiBwLmV4aXN0cygpKQotCQl7Ci0gIAkgIGludCBwcm9qZWN0SjJFRUxldmVsID0gSjJFRVV0aWxzLmdldEoyRUVWZXJzaW9uKHApOwotCQkgIGlmIChwcm9qZWN0SjJFRUxldmVsIT0tMSkKLQkJICB7Ci0JCSAgICBTdHJpbmcgcHJvamVjdEoyRUVMZXZlbFN0cmluZyA9IFN0cmluZy52YWx1ZU9mKHByb2plY3RKMkVFTGV2ZWwpOwotCQkgICAgaWYgKGoyZWVMZXZlbCE9bnVsbCAmJiBqMmVlTGV2ZWwubGVuZ3RoKCk+MCkKLQkJICAgIHsKLQkJICAgICAgaWYgKCFwcm9qZWN0SjJFRUxldmVsU3RyaW5nLmVxdWFscyhqMmVlTGV2ZWwpKQotCQkgICAgICB7Ci0JCSAgICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0oyRUVfTUlTTUFUQ0gsbmV3IFN0cmluZ1tde3AuZ2V0TmFtZSgpfSkgKTsKLQkJICAgICAgfQotCQkgICAgfQotCQkgIH0KLQkJfQotCX0gY2F0Y2goRXhjZXB0aW9uIGUpewotICAgIAotICB9Ci0gICAgCi0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7ICAgICAgICAKLSAgfQotICAKLSAgLy9UT0RPOiBUaGlzIG1ldGhvZCBpcyBvYnNlbGV0ZSAtIHNob3VsZCBiZSByZW1vdmVkLgotICBwdWJsaWMgSVN0YXR1cyB2YWxpZGF0ZVByb2plY3RUeXBlKFN0cmluZyBwcm9qZWN0TmFtZSwgU2VsZWN0aW9uTGlzdENob2ljZXMgcnVudGltZTJDbGllbnRUeXBlcykKLSAgewotICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICBJUHJvamVjdCBwID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLSAgICBpZiAocD09bnVsbCB8fCAhcC5leGlzdHMoKSkKLSAgICB7Ci0gICAgICAvL1Byb2plY3QgZG9lcyBub3QgZXhpc3Qgd2hpY2ggbWVhbnMgYSBuZXcgcHJvamVjdCBvZiB0aGUgY29ycmVjdCB0eXBlIHdpbGwgYmUgY3JlYXRlZAotICAgICAgLy9XZSdyZSBkb25lLiBBbGwgaXMgZ29vZC4KLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQotICAgICAgCi0gICAgLy9JZiB0aGUgcHJvamVjdCBleGlzdHMsIHdlIHNob3VsZCBzZWUgaXQgaW4gdGhlIHByb2plY3QgbGlzdCBmb3IgdGhlIHNlbGVjdGVkIGNsaWVudAotICAgIC8vcHJvamVjdCB0eXBlLgotICAgIFN0cmluZ1tdIHByb2plY3ROYW1lcyA9IHJ1bnRpbWUyQ2xpZW50VHlwZXMuZ2V0Q2hvaWNlKCkuZ2V0Q2hvaWNlKCkuZ2V0TGlzdCgpLmdldExpc3QoKTsKLSAgICBmb3IgKGludCBpPTA7IGk8cHJvamVjdE5hbWVzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGlmIChwcm9qZWN0TmFtZS5lcXVhbHMocHJvamVjdE5hbWVzW2ldKSkKLSAgICAgIHsKLSAgICAgICAgLy9Gb3VuZCB0aGUgcHJvamVjdC4gQWxsIGlzIGdvb2QuCi0gICAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIC8vRGlkbid0IGZpbmQgdGhlIHByb2plY3QuIFJldHVybiBhbiBlcnJvci4KLSAgICAvL0dldCB0aGUgbGFiZWwgZm9yIHRoZSBjbGllbnQgdHlwZSBpZAotICAgIFN0cmluZyBjbGllbnRUeXBlTGFiZWwgPSBnZXRDbGllbnRUeXBlTGFiZWwocnVudGltZTJDbGllbnRUeXBlcy5nZXRDaG9pY2UoKS5nZXRMaXN0KCkuZ2V0U2VsZWN0aW9uKCkpOwotICAgIFN0cmluZyBtZXNzYWdlID0gTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19XUk9OR19DTElFTlRfUFJPSkVDVF9UWVBFLG5ldyBTdHJpbmdbXXtwcm9qZWN0TmFtZSwgY2xpZW50VHlwZUxhYmVsfSk7Ci0gICAgSVN0YXR1cyBlU3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIG1lc3NhZ2UgKTsKLSAgICByZXR1cm4gZVN0YXR1czsKLSAgICAKLSAgfQotICAKLSAgLy9UT0RPOiBUaGlzIG1ldGhvZCBpcyBvYnNlbGV0ZSAtIHNob3VsZCBiZSByZW1vdmVkLgotICBwcml2YXRlIFN0cmluZyBnZXRDbGllbnRUeXBlTGFiZWwoIFN0cmluZyB0eXBlICkKLSAgewkgIAotCSAgaWYgKHR5cGUuZXF1YWxzKElNb2R1bGVDb25zdGFudHMuSlNUX1dFQl9NT0RVTEUpKQotCSAgewotCQkgIHJldHVybiBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfQ0xJRU5UX0NPTVBfVFlQRV9XRUI7Ci0JICB9Ci0JICBlbHNlIGlmICh0eXBlLmVxdWFscyhJTW9kdWxlQ29uc3RhbnRzLkpTVF9FSkJfTU9EVUxFKSkKLQkgIHsKLQkJICByZXR1cm4gQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX0NMSUVOVF9DT01QX1RZUEVfRUpCOwotCSAgfQotCSAgZWxzZSBpZiAodHlwZS5lcXVhbHMoSU1vZHVsZUNvbnN0YW50cy5KU1RfQVBQQ0xJRU5UX01PRFVMRSkpCi0JICB7Ci0JCSAgcmV0dXJuIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9DTElFTlRfQ09NUF9UWVBFX0FQUF9DTElFTlQ7Ci0JICB9Ci0JICBlbHNlIGlmICh0eXBlLmVxdWFscyhJTW9kdWxlQ29uc3RhbnRzLkpTVF9VVElMSVRZX01PRFVMRSkpCi0JICB7Ci0JCSAgcmV0dXJuIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9DTElFTlRfQ09NUF9UWVBFX0NPTlRBSU5FUkxFU1M7Ci0JICB9Ci0JICBlbHNlCi0JICB7Ci0JCSAgLy9ObyBrbm93biBsYWJlbCwgcmV0dXJuIHRoZSB0eXBlSWQgaXRzZWxmLiAKLQkJICByZXR1cm4gdHlwZTsKLQkgIH0JICAJICAKLSAgfSAgCi0gIAotICAvKioKLSAgICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGlzIHByb2plY3QgaXMgbGlrZWx5IGhvc3RpbmcgYW55IG9mIHRoZSBzZXJ2aWNlcwotICAgKiBpbiB0aGUgcHJvdmlkZWQgV1NETCBhcyBhIEoyRUUgV2ViIHNlcnZpY2UuCi0gICAqIEBwYXJhbSBwIElQcm9qZWN0IGluIHRoZSB3b3Jrc3BhY2UKLSAgICogQHBhcmFtIHdzZGxVUkwgVVJMIG9mIGEgV1NETCBkb2N1bWVudAotICAgKiBAcGFyYW0gcGFyc2VyCi0gICAqIEByZXR1cm4gYm9vbGVhbiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgcHJvamVjdCBjb250YWlucyBhIHdlYnNlcnZpY2VzLnhtbCAKLSAgICogZGVwbG95bWVudCBkZXNjcmlwdG9yIHRoYXQgcG9pbnRzIHRvIGF0IGxlYXN0IG9uZSBvZiB0aGUgcG9ydHMgaW4gdGhlIHByb3ZpZGVkIFdTREwuIAotICAgKiBSZXR1cm5zIDxjb2RlPmZhbHNlPC9jb2RlPiBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1Byb2plY3RTZXJ2aWNlUHJvamVjdChJUHJvamVjdCBwLCBTdHJpbmcgd3NkbFVSTCwgV2ViU2VydmljZXNQYXJzZXIgcGFyc2VyKQotICB7Ci0gICAgaWYgKHA9PW51bGwgfHwgd3NkbFVSTD09bnVsbCB8fCB3c2RsVVJMLmxlbmd0aCgpPT0wIHx8IHBhcnNlcj09bnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBJUmVzb3VyY2Ugd3NYTUwgPSBnZXRXZWJTZXJ2Y2VzWE1MKHApOwotICAgIGlmICh3c1hNTD09bnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICAKLSAgICAvL01ha2UgYSBsaXN0IG9mIGFsbCB0aGUgd3NkbC1wb3J0J3MgaW4gd2Vic2VydmljZXMueG1sCi0gICAgaWYgKCEod3NYTUwgaW5zdGFuY2VvZiBJRmlsZSkpCi0gICAgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAgCi0gICAgUmVzb3VyY2UgcmVzID0gV29ya2JlbmNoUmVzb3VyY2VIZWxwZXJCYXNlLmdldFJlc291cmNlKChJRmlsZSl3c1hNTCwgdHJ1ZSk7Ci0gICAgV3NkZFJlc291cmNlIHdzZGRSZXMgPSAoV3NkZFJlc291cmNlKXJlczsgICAgCi0gICAgV2ViU2VydmljZXMgd2ViU2VydmljZXMgPSB3c2RkUmVzLmdldFdlYlNlcnZpY2VzKCk7Ci0gICAgSXRlcmF0b3Igd3NEZXNjcyA9IHdlYlNlcnZpY2VzLmdldFdlYlNlcnZpY2VEZXNjcmlwdGlvbnMoKS5pdGVyYXRvcigpOwotICAgIEFycmF5TGlzdCB3c2RsUG9ydExpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgd2hpbGUod3NEZXNjcy5oYXNOZXh0KCkpCi0gICAgewotICAgICAgV2ViU2VydmljZURlc2NyaXB0aW9uIHdzRGVzYyA9IChXZWJTZXJ2aWNlRGVzY3JpcHRpb24pd3NEZXNjcy5uZXh0KCk7Ci0gICAgICBJdGVyYXRvciBwY3MgPSB3c0Rlc2MuZ2V0UG9ydENvbXBvbmVudHMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUocGNzLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgUG9ydENvbXBvbmVudCBwYyA9IChQb3J0Q29tcG9uZW50KXBjcy5uZXh0KCk7Ci0gICAgICAgIFdTRExQb3J0IHdzZGxQb3J0ID0gcGMuZ2V0V3NkbFBvcnQoKTsKLSAgICAgICAgd3NkbFBvcnRMaXN0LmFkZChuZXcgUXVhbGlmaWVkTmFtZSh3c2RsUG9ydC5nZXROYW1lc3BhY2VVUkkoKSwgd3NkbFBvcnQuZ2V0TG9jYWxQYXJ0KCkpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgQXJyYXlMaXN0IHBvcnRMaXN0ID0gZ2V0UG9ydE5hbWVzRnJvbVdzZGwod3NkbFVSTCwgcGFyc2VyKTsKLQotICAgIC8vSWYgYW55IG9mIHRoZSBRdWFsaWZpZWROYW1lcyBpbiBwb3J0TGlzdCBlcXVhbHMgYW55IG9mIHRoZSBRdWFsaWZpZWROYW1lcwotICAgIC8vaW4gd3NkbFBvcnRMaXN0LCB0aGlzIGlzIHRoZSBzZXJ2aWNlIHByb2plY3QuIFJldHVybiB0cnVlLgotICAgIE9iamVjdFtdIHBvcnRzID0gcG9ydExpc3QudG9BcnJheSgpOwotICAgIE9iamVjdFtdIHdzZGxQb3J0cyA9IHdzZGxQb3J0TGlzdC50b0FycmF5KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwb3J0cy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBRdWFsaWZpZWROYW1lIHBvcnROYW1lID0gKFF1YWxpZmllZE5hbWUpIHBvcnRzW2ldOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCB3c2RsUG9ydHMubGVuZ3RoOyBqKyspCi0gICAgICB7Ci0gICAgICAgIFF1YWxpZmllZE5hbWUgd3NkbFBvcnROYW1lID0gKFF1YWxpZmllZE5hbWUpIHdzZGxQb3J0c1tqXTsKLSAgICAgICAgaWYgKHBvcnROYW1lLmVxdWFscyh3c2RsUG9ydE5hbWUpKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBJUmVzb3VyY2UgY29ycmVzcG9uZGluZyB0byB0aGUgd2Vic2VydmljZXMueG1sIGluIHRoZSBwcm92aWRlZCBwcm9qZWN0LgotICAgKiBAcGFyYW0gcCBhbiBJUHJvamVjdCBpbiB0aGUgd29ya3NwYWNlLgotICAgKiBAcmV0dXJuIElSZXNvdXJjZSBjb3JyZXNwb25kaW5nIHRvIHRoZSB3ZWJzZXJ2aWNlcy54bWwgaW4gdGhlIHByb3ZpZGVkIHByb2plY3QsCi0gICAqIG51bGwgaWYgdGhlcmUgaXMgbm8gd2Vic2VydmljZXMueG1sIGluIHRoZSBwcm9qZWN0LgotICAgKi8KLSAgcHJpdmF0ZSBJUmVzb3VyY2UgZ2V0V2ViU2VydmNlc1hNTChJUHJvamVjdCBwKQotICB7Ci0gICAgLy9HZXQgdGhlIG1vZHVsZSByb290LiAgICAKLSAgICBJUmVzb3VyY2UgbW9kdWxlUm9vdCA9IGdldE1vZHVsZVJvb3QocCk7Ci0gICAgaWYgKCEobW9kdWxlUm9vdCBpbnN0YW5jZW9mIElDb250YWluZXIpKQotICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICBJUmVzb3VyY2Ugd2ViU2VydmljZXNYTUwgPSBudWxsOwotICAgIGlmIChKMkVFUHJvamVjdFV0aWxpdGllcy5pc0R5bmFtaWNXZWJQcm9qZWN0KHApKQotICAgIHsKLSAgICAgIFN0cmluZ0J1ZmZlciB3c1BhdGggPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICB3c1BhdGguYXBwZW5kKCJXRUItSU5GLyIpOwotICAgICAgd3NQYXRoLmFwcGVuZChXZWJTZXJ2aWNlQ29uc3RhbnRzLldFQlNFUlZJQ0VfRERfU0hPUlRfTkFNRSk7Ci0gICAgICB3ZWJTZXJ2aWNlc1hNTCA9ICgoSUNvbnRhaW5lcikgbW9kdWxlUm9vdCkuZmluZE1lbWJlcih3c1BhdGgudG9TdHJpbmcoKSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBTdHJpbmdCdWZmZXIgd3NQYXRoID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgd3NQYXRoLmFwcGVuZCgiTUVUQS1JTkYvIik7Ci0gICAgICB3c1BhdGguYXBwZW5kKFdlYlNlcnZpY2VDb25zdGFudHMuV0VCU0VSVklDRV9ERF9TSE9SVF9OQU1FKTsKLSAgICAgIHdlYlNlcnZpY2VzWE1MID0gKChJQ29udGFpbmVyKSBtb2R1bGVSb290KS5maW5kTWVtYmVyKHdzUGF0aC50b1N0cmluZygpKTsgICAgICAKLSAgICB9Ci0gICAgcmV0dXJuIHdlYlNlcnZpY2VzWE1MOwotICB9Ci0gIAotICBwcml2YXRlIElSZXNvdXJjZSBnZXRNb2R1bGVSb290KElQcm9qZWN0IHApCi0gIHsKLSAgICBJUGF0aCBtb2R1bGVQYXRoID0gbnVsbDsKLSAgICB0cnkgCi0gICAgewotICAgICAgSVZpcnR1YWxDb21wb25lbnQgdmMgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwKTsKLSAgICAgIGlmICh2YyAhPSBudWxsKSAKLSAgICAgIHsKLSAgICAgICAgbW9kdWxlUGF0aCA9IHZjLmdldFJvb3RGb2xkZXIoKS5nZXRXb3Jrc3BhY2VSZWxhdGl2ZVBhdGgoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goRXhjZXB0aW9uIGV4KQotICAgIHsKLSAgICAgIAotICAgIH0gCi0gICAgCi0gICAgSVJlc291cmNlIHJlcyA9IFJlc291cmNlVXRpbHMuZmluZFJlc291cmNlKG1vZHVsZVBhdGgpOwotICAgIHJldHVybiByZXM7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBXU0RMIHBvcnRzIGluIHRoZSBwcm92aWRlZCBXU0RMCi0gICAqIEBwYXJhbSB3c2RsVVJMIFVSTCBvZiBhIFdTREwgZG9jdW1lbnQKLSAgICogQHBhcmFtIHBhcnNlciAKLSAgICogQHJldHVybiBBcnJheUxpc3QgY29udGFpbmluZyBlbGVtZW50cyBvZiB0eXBlIHtAbGluayBRdWFsaWZpZWROYW1lfQotICAgKi8KLSAgcHJpdmF0ZSBBcnJheUxpc3QgZ2V0UG9ydE5hbWVzRnJvbVdzZGwoU3RyaW5nIHdzZGxVUkwsIFdlYlNlcnZpY2VzUGFyc2VyIHBhcnNlcikKLSAgewotICAJQXJyYXlMaXN0IHBvcnROYW1lTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgCURlZmluaXRpb24gZGVmID0gcGFyc2VyLmdldFdTRExEZWZpbml0aW9uKHdzZGxVUkwpOwotICAgIE1hcCBzZXJ2aWNlcyA9IGRlZi5nZXRTZXJ2aWNlcygpOwotICAgIFNlcnZpY2Ugc2VydmljZSA9IG51bGw7Ci0gICAgZm9yIChJdGVyYXRvciBpdCA9IHNlcnZpY2VzLnZhbHVlcygpLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgewotICAgICAgc2VydmljZSA9IChTZXJ2aWNlKWl0Lm5leHQoKTsKLSAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBzZXJ2aWNlLmdldFFOYW1lKCkuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICBNYXAgcG9ydHMgPSBzZXJ2aWNlLmdldFBvcnRzKCk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGl0MiA9IHBvcnRzLnZhbHVlcygpLml0ZXJhdG9yKCk7IGl0Mi5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgCVBvcnQgcG9ydCA9IChQb3J0KWl0Mi5uZXh0KCk7Ci0gICAgICAJcG9ydE5hbWVMaXN0LmFkZChuZXcgUXVhbGlmaWVkTmFtZShuYW1lc3BhY2UsIHBvcnQuZ2V0TmFtZSgpKSk7Ci0gICAgICB9Ci0gICAgfSAgICAgICAgCi0gIAkKLSAgCXJldHVybiBwb3J0TmFtZUxpc3Q7Ci0gIAkKLSAgfQotICAKLSAgcHJpdmF0ZSBjbGFzcyBRdWFsaWZpZWROYW1lCi0gIHsKLSAgICBTdHJpbmcgbmFtZXNwYWNlVVJJOwotCi0gICAgU3RyaW5nIGxvY2FsUGFydDsKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSBuYW1lc3BhY2VVUkkKLSAgICAgKiBAcGFyYW0gbG9jYWxQYXJ0Ci0gICAgICovCi0gICAgcHVibGljIFF1YWxpZmllZE5hbWUoU3RyaW5nIG5hbWVzcGFjZVVSSSwgU3RyaW5nIGxvY2FsUGFydCkKLSAgICB7Ci0gICAgICBzdXBlcigpOwotICAgICAgdGhpcy5uYW1lc3BhY2VVUkkgPSBuYW1lc3BhY2VVUkk7Ci0gICAgICB0aGlzLmxvY2FsUGFydCA9IGxvY2FsUGFydDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIGxvY2FsUGFydC4KLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGdldExvY2FsUGFydCgpCi0gICAgewotICAgICAgcmV0dXJuIGxvY2FsUGFydDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0gbG9jYWxQYXJ0Ci0gICAgICogICAgICAgICAgVGhlIGxvY2FsUGFydCB0byBzZXQuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0TG9jYWxQYXJ0KFN0cmluZyBsb2NhbFBhcnQpCi0gICAgewotICAgICAgdGhpcy5sb2NhbFBhcnQgPSBsb2NhbFBhcnQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQHJldHVybiBSZXR1cm5zIHRoZSBuYW1lc3BhY2VVUkkuCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZyBnZXROYW1lc3BhY2VVUkkoKQotICAgIHsKLSAgICAgIHJldHVybiBuYW1lc3BhY2VVUkk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIG5hbWVzcGFjZVVSSQotICAgICAqICAgICAgICAgIFRoZSBuYW1lc3BhY2VVUkkgdG8gc2V0LgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldE5hbWVzcGFjZVVSSShTdHJpbmcgbmFtZXNwYWNlVVJJKQotICAgIHsKLSAgICAgIHRoaXMubmFtZXNwYWNlVVJJID0gbmFtZXNwYWNlVVJJOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhRdWFsaWZpZWROYW1lIHFuKQotICAgIHsKLSAgICAgIHJldHVybiAocW4uZ2V0TmFtZXNwYWNlVVJJKCkuZXF1YWxzKG5hbWVzcGFjZVVSSSkgJiYgcW4uZ2V0TG9jYWxQYXJ0KCkKLSAgICAgICAgICAuZXF1YWxzKGxvY2FsUGFydCkpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9leHRlbnNpb24vQ2xpZW50Um9vdEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2V4dGVuc2lvbi9DbGllbnRSb290RnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2U0ZmVhYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2V4dGVuc2lvbi9DbGllbnRSb290RnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAxMzEgMTIxMDcxICAgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyICAgICAgICAgIAotICogMjAwNjAyMjEgICAxMTkxMTEgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDUyOSAgIDE0MTQyMiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmV4dGVuc2lvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TZXF1ZW5jZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNpbXBsZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLkRhdGFPYmplY3RDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHRlbnNpb25zLkFzc2VtYmxlQ2xpZW50RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4dGVuc2lvbnMuRGVwbG95Q2xpZW50RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4dGVuc2lvbnMuRGV2ZWxvcENsaWVudEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHRlbnNpb25zLkluc3RhbGxDbGllbnRGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXh0ZW5zaW9ucy5SdW5DbGllbnRGcmFnbWVudDsKLQotcHVibGljIGNsYXNzIENsaWVudFJvb3RGcmFnbWVudCBleHRlbmRzIFNlcXVlbmNlRnJhZ21lbnQgCi17Ci0gIHB1YmxpYyBDbGllbnRSb290RnJhZ21lbnQoKQotICB7Ci0gICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBQcmVDbGllbnREZXZlbG9wQ29tbWFuZCgpLCAiIiApICk7Ci0gICAgYWRkKCBuZXcgRGV2ZWxvcENsaWVudEZyYWdtZW50KCkgKTsKLSAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IFByZUNsaWVudEFzc2VtYmxlQ29tbWFuZCgpLCAiIiApICk7Ci0gICAgYWRkKCBuZXcgQXNzZW1ibGVDbGllbnRGcmFnbWVudCgpICk7Ci0gICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBQcmVDbGllbnREZXBsb3lDb21tYW5kKCksICIiICkgKTsKLSAgICBhZGQoIG5ldyBEZXBsb3lDbGllbnRGcmFnbWVudCgpICk7Ci0gICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBQcmVDbGllbnRJbnN0YWxsQ29tbWFuZCgpLCAiIiApICk7Ci0gICAgYWRkKCBuZXcgSW5zdGFsbENsaWVudEZyYWdtZW50KCkgKTsKLSAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IFByZUNsaWVudFJ1bkNvbW1hbmQoKSwgCi0gICAgCSAib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmV4dGVuc2lvbi5QcmVDbGllbnRSdW5Db21tYW5kIiApICk7Ci0gICAgYWRkKCBuZXcgUnVuQ2xpZW50RnJhZ21lbnQoKSApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoRGF0YU1hcHBpbmdSZWdpc3RyeSByZWdpc3RyeSkgCi0gIHsKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZSIsIERldmVsb3BDbGllbnRGcmFnbWVudC5jbGFzcyApOyAgCi0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVudmlyb25tZW50IiwgRGV2ZWxvcENsaWVudEZyYWdtZW50LmNsYXNzICk7ICAKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiQ29udGV4dCIsIERldmVsb3BDbGllbnRGcmFnbWVudC5jbGFzcyApOyAgCi0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIlNlbGVjdGlvbiIsIERldmVsb3BDbGllbnRGcmFnbWVudC5jbGFzcyApOwotICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiUHJvamVjdCIsIERldmVsb3BDbGllbnRGcmFnbWVudC5jbGFzcyApOwotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJNb2R1bGUiLCBEZXZlbG9wQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsgIAotICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiRWFyUHJvamVjdCIsIERldmVsb3BDbGllbnRGcmFnbWVudC5jbGFzcyApOwotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJFYXIiLCBEZXZlbG9wQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsKLSAgCQotCS8vIE1hcCB0aGUgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQgaW50byB0aGUgZGF0YU9iamVjdC4KLQlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIkRhdGFPYmplY3QiLCBEYXRhT2JqZWN0Q29tbWFuZC5jbGFzcyApOwotCQkKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZSIsIEFzc2VtYmxlQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsgIAotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJFbnZpcm9ubWVudCIsIEFzc2VtYmxlQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsgIAotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJDb250ZXh0IiwgQXNzZW1ibGVDbGllbnRGcmFnbWVudC5jbGFzcyApOyAgCi0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIlNlbGVjdGlvbiIsIEFzc2VtYmxlQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsKLSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIlByb2plY3QiLCBBc3NlbWJsZUNsaWVudEZyYWdtZW50LmNsYXNzICk7Ci0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIk1vZHVsZSIsIEFzc2VtYmxlQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsgIAotICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiRWFyUHJvamVjdCIsIEFzc2VtYmxlQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiRWFyIiwgQXNzZW1ibGVDbGllbnRGcmFnbWVudC5jbGFzcyApOwotCQotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlIiwgRGVwbG95Q2xpZW50RnJhZ21lbnQuY2xhc3MgKTsgIAotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJFbnZpcm9ubWVudCIsIERlcGxveUNsaWVudEZyYWdtZW50LmNsYXNzICk7ICAKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiQ29udGV4dCIsIERlcGxveUNsaWVudEZyYWdtZW50LmNsYXNzICk7ICAKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiU2VsZWN0aW9uIiwgRGVwbG95Q2xpZW50RnJhZ21lbnQuY2xhc3MgKTsKLSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIlByb2plY3QiLCBEZXBsb3lDbGllbnRGcmFnbWVudC5jbGFzcyApOwotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJNb2R1bGUiLCBEZXBsb3lDbGllbnRGcmFnbWVudC5jbGFzcyApOyAgCi0gICAgcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJFYXJQcm9qZWN0IiwgRGVwbG95Q2xpZW50RnJhZ21lbnQuY2xhc3MgKTsKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiRWFyIiwgRGVwbG95Q2xpZW50RnJhZ21lbnQuY2xhc3MgKTsKLQkKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZSIsIEluc3RhbGxDbGllbnRGcmFnbWVudC5jbGFzcyApOyAgCi0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVudmlyb25tZW50IiwgSW5zdGFsbENsaWVudEZyYWdtZW50LmNsYXNzICk7ICAKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiQ29udGV4dCIsIEluc3RhbGxDbGllbnRGcmFnbWVudC5jbGFzcyApOyAgCi0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIlNlbGVjdGlvbiIsIEluc3RhbGxDbGllbnRGcmFnbWVudC5jbGFzcyApOwotICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiUHJvamVjdCIsIEluc3RhbGxDbGllbnRGcmFnbWVudC5jbGFzcyApOwotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJNb2R1bGUiLCBJbnN0YWxsQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsgIAotICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiRWFyUHJvamVjdCIsIEluc3RhbGxDbGllbnRGcmFnbWVudC5jbGFzcyApOwotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJFYXIiLCBJbnN0YWxsQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsKLQkKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZSIsIFJ1bkNsaWVudEZyYWdtZW50LmNsYXNzICk7ICAKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiRW52aXJvbm1lbnQiLCBSdW5DbGllbnRGcmFnbWVudC5jbGFzcyApOyAgCi0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIkNvbnRleHQiLCBSdW5DbGllbnRGcmFnbWVudC5jbGFzcyApOyAgCi0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIlNlbGVjdGlvbiIsIFJ1bkNsaWVudEZyYWdtZW50LmNsYXNzICk7ICAKLSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIlByb2plY3QiLCBSdW5DbGllbnRGcmFnbWVudC5jbGFzcyApOwotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJNb2R1bGUiLCBSdW5DbGllbnRGcmFnbWVudC5jbGFzcyApOyAgCi0gICAgcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJFYXJQcm9qZWN0IiwgUnVuQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiRWFyIiwgUnVuQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsKLSAgICAKLSAgICAvL01hcHBpbmdzIGZyb20gZnJhbWV3b3JrIHRvIGZyYW1ld29yayBjb21tYW5kcwotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJDb250ZXh0IiwgUHJlQ2xpZW50QXNzZW1ibGVDb21tYW5kLmNsYXNzICk7Ci0gICAgcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJDb250ZXh0IiwgUHJlQ2xpZW50RGVwbG95Q29tbWFuZC5jbGFzcyApOwotICAgIAotICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZSIsIFByZUNsaWVudEFzc2VtYmxlQ29tbWFuZC5jbGFzcyApOwotICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiUHJvamVjdCIsIFByZUNsaWVudEFzc2VtYmxlQ29tbWFuZC5jbGFzcyApOwotICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiTW9kdWxlIiwgUHJlQ2xpZW50QXNzZW1ibGVDb21tYW5kLmNsYXNzICk7Ci0gICAgcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJFYXJQcm9qZWN0IiwgUHJlQ2xpZW50QXNzZW1ibGVDb21tYW5kLmNsYXNzICk7Ci0gICAgcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJFYXIiLCBQcmVDbGllbnRBc3NlbWJsZUNvbW1hbmQuY2xhc3MgKTsKLSAgICAKLSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2UiLCBQcmVDbGllbnRJbnN0YWxsQ29tbWFuZC5jbGFzcyApOwotICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiUHJvamVjdCIsIFByZUNsaWVudEluc3RhbGxDb21tYW5kLmNsYXNzICk7Ci0gICAgcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJDb250ZXh0IiwgUHJlQ2xpZW50SW5zdGFsbENvbW1hbmQuY2xhc3MgKTsKLSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIk1vZHVsZSIsIFByZUNsaWVudEluc3RhbGxDb21tYW5kLmNsYXNzICk7Ci0gICAgcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJFYXJQcm9qZWN0IiwgUHJlQ2xpZW50SW5zdGFsbENvbW1hbmQuY2xhc3MgKTsKLSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVhciIsIFByZUNsaWVudEluc3RhbGxDb21tYW5kLmNsYXNzICk7ICAgCi0KLSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2UiLCBQcmVDbGllbnRSdW5Db21tYW5kLmNsYXNzICk7ICAgIAotICAgIHJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiQ29udGV4dCIsIFByZUNsaWVudFJ1bkNvbW1hbmQuY2xhc3MgKTsKLQkKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9leHRlbnNpb24vUHJlQ2xpZW50QXNzZW1ibGVDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2V4dGVuc2lvbi9QcmVDbGllbnRBc3NlbWJsZUNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzU5NTFjZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2V4dGVuc2lvbi9QcmVDbGllbnRBc3NlbWJsZUNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAxMzEgMTIxMDcxICAgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyICAgICAgICAgIAotICogMjAwNjA1MjkgICAxNDE0MjIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5leHRlbnNpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmludGVybmFsLnBsdWdpbi5JSjJFRU1vZHVsZUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb24uQXNzb2NpYXRlTW9kdWxlV2l0aEVBUkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uLkNyZWF0ZUZhY2V0ZWRQcm9qZWN0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLlJlcXVpcmVkRmFjZXRWZXJzaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSVdlYlNlcnZpY2VDbGllbnQ7Ci0KLXB1YmxpYyBjbGFzcyBQcmVDbGllbnRBc3NlbWJsZUNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiAKLXsKLSAgcHJpdmF0ZSBJV2ViU2VydmljZUNsaWVudCAgICAgICB3ZWJTZXJ2aWNlQ2xpZW50XzsKLSAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICAgICAgICBwcm9qZWN0XzsKLSAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICAgICAgICBtb2R1bGVfOwotICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgICAgICAgIGVhclByb2plY3RfOwotICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgICAgICAgIGVhcl87Ci0gIHByaXZhdGUgSUNvbnRleHQgICAgICAgICAgCSAgY29udGV4dF87Ci0gIAotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgewotCSAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCi0JICBpZiAoY29udGV4dF8gIT0gbnVsbCAmJiBjb250ZXh0Xy5nZXRBc3NlbWJsZSgpKSB7Ci0JCSAgSUVudmlyb25tZW50IGVudmlyb25tZW50ID0gZ2V0RW52aXJvbm1lbnQoKTsKLQotCQkgIC8vIENoZWNrIGlmIEVBUiBtb2R1bGUgaXMgcmVxJ2QsIGllLiAhPW51bGwKLQkJICBpZiAoZWFyUHJvamVjdF89PW51bGwpCi0JCQkgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCi0JCSAgLy8gIENyZWF0ZSB0aGUgY2xpZW50IEVBUiBtb2R1bGUKLQkJICBDcmVhdGVGYWNldGVkUHJvamVjdENvbW1hbmQgY29tbWFuZCA9IG5ldyBDcmVhdGVGYWNldGVkUHJvamVjdENvbW1hbmQoKTsKLQkJICBjb21tYW5kLnNldFByb2plY3ROYW1lKGVhclByb2plY3RfKTsKLQkJICBjb21tYW5kLnNldFRlbXBsYXRlSWQoSUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX0VBUl9URU1QTEFURSk7Ci0KLQkJICAvLyBSZXF1aXJlZEZhY2V0VmVyc2lvbnMgaXMgc2V0IHRvIGFuIGVtcHR5IGFycmF5IGJlY2F1c2Ugd2UgZG9uJ3QgbmVlZCB0byBpbXBvc2UgYW55IGFkZGl0aW9uYWwgY29uc3RyYWludHMuCi0JCSAgLy8gV2UganVzdCB3YW50IHRvIGNyZWF0ZSB0aGUgaGlnaGVzdCBsZXZlbCBvZiBFQVIgcHJvamVjdCB0aGF0IHRoZSBzZWxlY3RlZCBzZXJ2ZXIgc3VwcG9ydHMuCi0JCSAgY29tbWFuZC5zZXRSZXF1aXJlZEZhY2V0VmVyc2lvbnMobmV3IFJlcXVpcmVkRmFjZXRWZXJzaW9uWzBdKTsgCi0KLQkJICBjb21tYW5kLnNldFNlcnZlckZhY3RvcnlJZCh3ZWJTZXJ2aWNlQ2xpZW50Xy5nZXRXZWJTZXJ2aWNlQ2xpZW50SW5mbygpLmdldFNlcnZlckZhY3RvcnlJZCgpKTsKLQkJICBjb21tYW5kLnNldFNlcnZlckluc3RhbmNlSWQod2ViU2VydmljZUNsaWVudF8uZ2V0V2ViU2VydmljZUNsaWVudEluZm8oKS5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCkpOwotCQkgIHN0YXR1cyA9IGNvbW1hbmQuZXhlY3V0ZSggbW9uaXRvciwgYWRhcHRhYmxlICk7Ci0JCSAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikKLQkJICB7Ci0JCQkgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvciggc3RhdHVzICk7Ci0JCQkgIHJldHVybiBzdGF0dXM7Ci0JCSAgfSAgICAgICAgCi0KLQotCQkgIC8vQXNzb2NpYXRlIHRoZSBjbGllbnQgbW9kdWxlIGFuZCBzZXJ2aWNlIEVBUgotCQkgIEFzc29jaWF0ZU1vZHVsZVdpdGhFQVJDb21tYW5kIGFzc29jaWF0ZUNvbW1hbmQgPSBuZXcgQXNzb2NpYXRlTW9kdWxlV2l0aEVBUkNvbW1hbmQoKTsKLQkJICBhc3NvY2lhdGVDb21tYW5kLnNldFByb2plY3QocHJvamVjdF8pOwotCQkgIGFzc29jaWF0ZUNvbW1hbmQuc2V0TW9kdWxlKG1vZHVsZV8pOwotCQkgIGFzc29jaWF0ZUNvbW1hbmQuc2V0RUFSUHJvamVjdChlYXJQcm9qZWN0Xyk7Ci0JCSAgYXNzb2NpYXRlQ29tbWFuZC5zZXRFYXIoZWFyXyk7Ci0JCSAgYXNzb2NpYXRlQ29tbWFuZC5zZXRFbnZpcm9ubWVudCggZW52aXJvbm1lbnQgKTsKLQkJICBzdGF0dXMgPSBhc3NvY2lhdGVDb21tYW5kLmV4ZWN1dGUoIG1vbml0b3IsIGFkYXB0YWJsZSApOwotCQkgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKT09U3RhdHVzLkVSUk9SKQotCQkgIHsKLQkJCSAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKCAgc3RhdHVzICk7ICAgICAKLQkJICB9ICAgICAKLQotCSAgfQotCSAgcmV0dXJuIHN0YXR1czsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0UHJvamVjdCggU3RyaW5nIHByb2plY3QgKQotICB7Ci0gICAgcHJvamVjdF8gPSBwcm9qZWN0OwotICB9Ci0gICAgCi0gIHB1YmxpYyB2b2lkIHNldE1vZHVsZSggU3RyaW5nIG1vZHVsZSApCi0gIHsKLSAgICBtb2R1bGVfID0gbW9kdWxlOwotICB9IAotICAKLSAgcHVibGljIHZvaWQgc2V0RWFyUHJvamVjdCggU3RyaW5nIGVhclByb2plY3QgKQotICB7Ci0gICAgZWFyUHJvamVjdF8gPSBlYXJQcm9qZWN0OwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRFYXIoIFN0cmluZyBlYXIgKQotICB7Ci0gICAgZWFyXyA9IGVhcjsgIAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlKCBJV2ViU2VydmljZUNsaWVudCB3ZWJTZXJ2aWNlQ2xpZW50ICkKLSAgewotICAgIHdlYlNlcnZpY2VDbGllbnRfID0gd2ViU2VydmljZUNsaWVudDsgIAotICB9ICAgCi0gIAotICBwdWJsaWMgdm9pZCBzZXRDb250ZXh0IChJQ29udGV4dCBjb250ZXh0KSB7Ci0JICBjb250ZXh0XyA9IGNvbnRleHQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvZXh0ZW5zaW9uL1ByZUNsaWVudERlcGxveUNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvZXh0ZW5zaW9uL1ByZUNsaWVudERlcGxveUNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2I1NzFkOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2V4dGVuc2lvbi9QcmVDbGllbnREZXBsb3lDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMjEgICAxMTkxMTEgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDUyOSAgIDE0MTQyMiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmV4dGVuc2lvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JQ29udGV4dDsKLQotcHVibGljIGNsYXNzIFByZUNsaWVudERlcGxveUNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiAKLXsKLSAgcHJpdmF0ZSBJQ29udGV4dCAgICBjb250ZXh0XzsKLSAgCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0gICAgaWYgKGNvbnRleHRfICE9IG51bGwgJiYgY29udGV4dF8uZ2V0RGVwbG95KCkpCi0gICAgewotICAgICAgLy9JZiBhbmQgd2hlbiB0aGVyZSBhcmUgZnJhbWV3b3JrIHNwZWNpZmljIGRlcGxveSB0aGluZ3MgdG8gYmUgZG9uZSwKLSAgICAgIC8vZG8gdGhlbSBoZXJlLgotICAgIH0KLSAgICAKLSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q29udGV4dChJQ29udGV4dCBjb250ZXh0KQotICB7Ci0gICAgICBjb250ZXh0Xz1jb250ZXh0OwotICB9ICAgIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9leHRlbnNpb24vUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvZXh0ZW5zaW9uL1ByZUNsaWVudERldmVsb3BDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2ZmI1NWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9leHRlbnNpb24vUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAxMzEgMTIxMDcxICAgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyICAgICAKLSAqIDIwMDYwMjIxICAgMTE5MTExIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA1MTYgICAxMjY5NjUga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNTI5ICAgMTQxNDIyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA3MDEyMyAgIDE2NzQ4NyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1hawotICogMjAwNzA0MDMgICAxNzM2NTQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5leHRlbnNpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb24uQ3JlYXRlRmFjZXRlZFByb2plY3RDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uRmFjZXRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLlJlcXVpcmVkRmFjZXRWZXJzaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LldlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5kYXRhLlR5cGVSdW50aW1lU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmNvbW1vbi5IVFRQVXRpbGl0eTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlQ2xpZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlUnVudGltZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5TaW1wbGVDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VDbGllbnRJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VTY2VuYXJpbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlU3RhdGU7Ci0KLXB1YmxpYyBjbGFzcyBQcmVDbGllbnREZXZlbG9wQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIAotewotICAKLSAgcHJpdmF0ZSBUeXBlUnVudGltZVNlcnZlciB0eXBlUnVudGltZVNlcnZlcl87Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgY2xpZW50UnVudGltZUlkXzsKLSAgcHJpdmF0ZSBJQ29udGV4dCAgICAgICAgICBjb250ZXh0XzsKLSAgcHJpdmF0ZSBJU2VsZWN0aW9uICAgICAgICBzZWxlY3Rpb25fOwotICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgIHByb2plY3RfOwotICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgIG1vZHVsZV87Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgbW9kdWxlVHlwZV87Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgZWFyUHJvamVjdF87Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgZWFyXzsKLSAgcHJpdmF0ZSBJV2ViU2VydmljZUNsaWVudCB3ZWJTZXJ2aWNlQ2xpZW50XzsKLSAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICBqMmVlTGV2ZWxfOwotICBwcml2YXRlIFJlc291cmNlQ29udGV4dCAgIHJlc291cmNlQ29udGV4dF87Ci0gIHByaXZhdGUgYm9vbGVhbiAgICAgICAgICAgZGV2ZWxvcF87Ci0gIHByaXZhdGUgYm9vbGVhbiAgICAgICAgICAgYXNzZW1ibGVfOwotICBwcml2YXRlIGJvb2xlYW4gICAgICAgICAgIGRlcGxveV87Ci0gIHByaXZhdGUgYm9vbGVhbgkJCXRlc3RfOwotICBwcml2YXRlIGJvb2xlYW4JCQlpbnN0YWxsXzsKLSAgcHJpdmF0ZSBib29sZWFuCQkJcnVuXzsKLSAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICB3c2RsVVJJXzsKLSAgcHJpdmF0ZSBPYmplY3QgICAgICAgICAgICBkYXRhT2JqZWN0XzsKLQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgewotCSAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCSAgCi0JICBpZiAoZGV2ZWxvcF8pIHsKLQkJICBJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQgPSBnZXRFbnZpcm9ubWVudCgpOwotCi0JCSAgLy8gU3BsaXQgdXAgdGhlIHByb2plY3QgYW5kIG1vZHVsZQotCQkgIGludCBpbmRleCA9IG1vZHVsZV8uaW5kZXhPZigiLyIpOwotCQkgIGlmIChpbmRleCE9LTEpewotCQkJICBwcm9qZWN0XyA9IG1vZHVsZV8uc3Vic3RyaW5nKDAsaW5kZXgpOwotCQkJICBtb2R1bGVfID0gbW9kdWxlXy5zdWJzdHJpbmcoaW5kZXgrMSk7Ci0JCSAgfQotCi0JCSAgaWYgKGVhcl8hPW51bGwgJiYgZWFyXy5sZW5ndGgoKT4wKQotCQkgIHsKLQkJCSAgaW50IGVhckluZGV4ID0gZWFyXy5pbmRleE9mKCIvIik7Ci0JCQkgIGlmIChlYXJJbmRleCE9LTEpIHsKLQkJCQkgIGVhclByb2plY3RfID0gZWFyXy5zdWJzdHJpbmcoMCxlYXJJbmRleCk7Ci0JCQkJICBlYXJfID0gZWFyXy5zdWJzdHJpbmcoZWFySW5kZXgrMSk7Ci0JCQkgIH0KLQkJICB9ICAgIAotCi0JCSAgSVdlYlNlcnZpY2VSdW50aW1lIHdzcnQgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMgotCQkgIC5nZXRDbGllbnRSdW50aW1lKGNsaWVudFJ1bnRpbWVJZF8pOwotCQkgIFdlYlNlcnZpY2VDbGllbnRJbmZvIHdzSW5mbyA9IG5ldyBXZWJTZXJ2aWNlQ2xpZW50SW5mbygpOwotCi0JCSAgd3NJbmZvLnNldFNlcnZlckZhY3RvcnlJZCh0eXBlUnVudGltZVNlcnZlcl8uZ2V0U2VydmVySWQoKSk7Ci0JCSAgd3NJbmZvLnNldFNlcnZlckluc3RhbmNlSWQodHlwZVJ1bnRpbWVTZXJ2ZXJfLmdldFNlcnZlckluc3RhbmNlSWQoKSk7Ci0JCSAgd3NJbmZvLnNldFN0YXRlKFdlYlNlcnZpY2VTdGF0ZS5VTktOT1dOX0xJVEVSQUwpOwotCQkgIHdzSW5mby5zZXRXZWJTZXJ2aWNlUnVudGltZUlkKHR5cGVSdW50aW1lU2VydmVyXy5nZXRSdW50aW1lSWQoKSk7Ci0JCSAgCi0JCSAgLy8gY2hlY2sgZm9yIHJlZGlyZWN0aW9uIGluIHRoZSB3c2RsCi0JCSAgSFRUUFV0aWxpdHkgaHR0cFV0aWwgPSBuZXcgSFRUUFV0aWxpdHkoKTsJCSAgCi0JCSAgd3NJbmZvLnNldFdzZGxVUkwoaHR0cFV0aWwuaGFuZGxlUmVkaXJlY3Qod3NkbFVSSV8pKTsKLQotCQkgIHdlYlNlcnZpY2VDbGllbnRfID0gd3NydC5nZXRXZWJTZXJ2aWNlQ2xpZW50KHdzSW5mbyk7Ci0JCSAgV2ViU2VydmljZVNjZW5hcmlvIHNjZW5hcmlvID0gV2ViU2VydmljZVNjZW5hcmlvLkNMSUVOVF9MSVRFUkFMOwotCQkgIGNvbnRleHRfID0gbmV3IFNpbXBsZUNvbnRleHQoZGV2ZWxvcF8sIGFzc2VtYmxlXywgZGVwbG95XywgaW5zdGFsbF8sIHJ1bl8sIHRydWUsIHRlc3RfLAotCQkJCSAgZmFsc2UsIHNjZW5hcmlvLCByZXNvdXJjZUNvbnRleHRfLmlzT3ZlcndyaXRlRmlsZXNFbmFibGVkKCksCi0JCQkJICByZXNvdXJjZUNvbnRleHRfLmlzQ3JlYXRlRm9sZGVyc0VuYWJsZWQoKSwgcmVzb3VyY2VDb250ZXh0XwotCQkJCSAgLmlzQ2hlY2tvdXRGaWxlc0VuYWJsZWQoKSk7Ci0KLQkJICAvLyBDcmVhdGUgdGhlIGNsaWVudCBtb2R1bGUgaWYgbmVlZGVkLgotCQkgIElQcm9qZWN0IHByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QocHJvamVjdF8pOwotCQkgIFJlcXVpcmVkRmFjZXRWZXJzaW9uW10gcmZ2ID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0Q2xpZW50UnVudGltZURlc2NyaXB0b3JCeUlkKGNsaWVudFJ1bnRpbWVJZF8pLmdldFJlcXVpcmVkRmFjZXRWZXJzaW9ucygpOwotCQkgIGlmICghcHJvamVjdC5leGlzdHMoKSkKLQkJICB7Ci0JCQkgIGJvb2xlYW4gbWF0Y2hlcyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmRvZXNDbGllbnRSdW50aW1lU3VwcG9ydFRlbXBsYXRlKGNsaWVudFJ1bnRpbWVJZF8sIG1vZHVsZVR5cGVfKTsKLQkJCSAgaWYgKG1hdGNoZXMpCi0JCQkgIHsgIAotCQkJCSAgQ3JlYXRlRmFjZXRlZFByb2plY3RDb21tYW5kIGNvbW1hbmQgPSBuZXcgQ3JlYXRlRmFjZXRlZFByb2plY3RDb21tYW5kKCk7Ci0JCQkJICBjb21tYW5kLnNldFByb2plY3ROYW1lKHByb2plY3RfKTsKLQkJCQkgIGNvbW1hbmQuc2V0VGVtcGxhdGVJZChtb2R1bGVUeXBlXyk7Ci0JCQkJICBjb21tYW5kLnNldFJlcXVpcmVkRmFjZXRWZXJzaW9ucyhyZnYpOwotCQkJCSAgY29tbWFuZC5zZXRTZXJ2ZXJGYWN0b3J5SWQodHlwZVJ1bnRpbWVTZXJ2ZXJfLmdldFNlcnZlcklkKCkpOwotCQkJCSAgY29tbWFuZC5zZXRTZXJ2ZXJJbnN0YW5jZUlkKHR5cGVSdW50aW1lU2VydmVyXy5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCkpOwotCQkJCSAgc3RhdHVzID0gY29tbWFuZC5leGVjdXRlKCBtb25pdG9yLCBhZGFwdGFibGUgKTsKLQkJCQkgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpCi0JCQkJICB7Ci0JCQkJCSAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKCBzdGF0dXMgKTsKLQkJCQkJICByZXR1cm4gc3RhdHVzOwotCQkJCSAgfSAgICAgICAgCi0JCQkgIH0gICAgICAgICAgICAKLQkJICB9IGVsc2UgewotCQkJCS8vIGFkZCBmYWNldHMgcmVxdWlyZWQgYnkgV2ViIHNlcnZpY2UgcnVudGltZQotCQkgICAgICAgIGlmIChyZnYubGVuZ3RoICE9IDApIHsKLQkJICAgICAgICAJc3RhdHVzID0gRmFjZXRVdGlscy5hZGRSZXF1aXJlZEZhY2V0c1RvUHJvamVjdChwcm9qZWN0LCByZnYsIG1vbml0b3IpOwotCQkgICAgICAgIAlpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKQotCQkgICAgICAgIAl7Ci0JCSAgICAgICAgCQllbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3IoIHN0YXR1cyApOwotCQkgICAgICAgIAkJcmV0dXJuIHN0YXR1czsKLQkJICAgICAgICAJfSAgICAgIAotCQkgICAgICAgIH0KLQkJICB9ICAgICAgICAKLQkgIH0KLSAgICByZXR1cm4gc3RhdHVzOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRUeXBlUnVudGltZVNlcnZlciggVHlwZVJ1bnRpbWVTZXJ2ZXIgdHlwZVJ1bnRpbWVTZXJ2ZXIgKQotICB7Ci0JdHlwZVJ1bnRpbWVTZXJ2ZXJfID0gdHlwZVJ1bnRpbWVTZXJ2ZXI7ICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50UnVudGltZUlkKCBTdHJpbmcgaWQpCi0gIHsKLSAgICBjbGllbnRSdW50aW1lSWRfID0gaWQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudEoyRUVWZXJzaW9uKCBTdHJpbmcgajJlZUxldmVsICkKLSAgewotCWoyZWVMZXZlbF8gPSBqMmVlTGV2ZWw7ICAKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRKMmVlTGV2ZWwoKQotICB7Ci0gICAgcmV0dXJuIGoyZWVMZXZlbF87ICAKLSAgfQotICAKLSAgcHVibGljIElXZWJTZXJ2aWNlQ2xpZW50IGdldFdlYlNlcnZpY2UoKQotICB7Ci0JcmV0dXJuIHdlYlNlcnZpY2VDbGllbnRfOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBJQ29udGV4dCBnZXRDb250ZXh0KCkKLSAgewotICAgIHJldHVybiBjb250ZXh0XzsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0UmVzb3VyY2VDb250ZXh0KCBSZXNvdXJjZUNvbnRleHQgcmVzb3VyY2VDb250ZXh0ICkKLSAgewotICAgIHJlc291cmNlQ29udGV4dF8gPSByZXNvdXJjZUNvbnRleHQ7CSAgCi0gIH0KLSAgCi0gIHB1YmxpYyBJU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpCi0gIHsKLSAgICByZXR1cm4gc2VsZWN0aW9uXzsJICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uKCBJU2VsZWN0aW9uIHNlbGVjdGlvbiApCi0gIHsKLQlzZWxlY3Rpb25fID0gc2VsZWN0aW9uOyAgCi0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFByb2plY3QoKQotICB7Ci0gICAgcmV0dXJuIHByb2plY3RfOyAgICAKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRNb2R1bGUoKQotICB7Ci0gICAgcmV0dXJuIG1vZHVsZV87CSAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldE1vZHVsZSggU3RyaW5nIG1vZHVsZSApCi0gIHsKLQltb2R1bGVfID0gbW9kdWxlOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRNb2R1bGVUeXBlKCBTdHJpbmcgbW9kdWxlVHlwZSkKLSAgewotICAgIG1vZHVsZVR5cGVfID0gbW9kdWxlVHlwZTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RWFyUHJvamVjdCgpCi0gIHsKLSAgICByZXR1cm4gZWFyUHJvamVjdF87ICAgCi0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RWFyKCkKLSAgewotCXJldHVybiBlYXJfOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEVhciggU3RyaW5nIGVhciApCi0gIHsKLQllYXJfID0gZWFyOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldERldmVsb3BDbGllbnQoYm9vbGVhbiBkZXZlbG9wQ2xpZW50KSB7Ci0JICBkZXZlbG9wXyA9IGRldmVsb3BDbGllbnQ7Ci0gIH0JCi0KLSAgcHVibGljIHZvaWQgc2V0QXNzZW1ibGVDbGllbnQoYm9vbGVhbiBhc3NlbWJsZUNsaWVudCkgewotCSAgYXNzZW1ibGVfID0gYXNzZW1ibGVDbGllbnQ7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXREZXBsb3lDbGllbnQoYm9vbGVhbiBkZXBsb3lDbGllbnQpCi0gIHsKLSAgICAgIGRlcGxveV8gPSBkZXBsb3lDbGllbnQ7Ci0gIH0KLQkKLSAgcHVibGljIHZvaWQgc2V0SW5zdGFsbENsaWVudChib29sZWFuIGluc3RhbGxDbGllbnQpCi0gIHsKLQlpbnN0YWxsXyA9IGluc3RhbGxDbGllbnQ7Ci0gIH0JCi0gIAotICBwdWJsaWMgdm9pZCBzZXRUZXN0U2VydmljZShib29sZWFuIHRlc3RTZXJ2aWNlKQotICB7Ci0JdGVzdF8gPSB0ZXN0U2VydmljZTsKLSAgfQkJCi0gIAotICBwdWJsaWMgdm9pZCBzZXRTdGFydFNlcnZpY2UoYm9vbGVhbiBzdGFydFNlcnZpY2UpCi0gIHsKLQkgIHJ1bl8gPSBzdGFydFNlcnZpY2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFdzZGxVUkkoU3RyaW5nIHVyaSkKLSAgewotICAgIHdzZGxVUklfID0gdXJpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXREYXRhT2JqZWN0KCBPYmplY3Qgb2JqZWN0ICkKLSAgewotICAgIGRhdGFPYmplY3RfID0gb2JqZWN0OwkgIAotICB9Ci0gIAotICBwdWJsaWMgT2JqZWN0IGdldERhdGFPYmplY3QoKQotICB7Ci0JT2JqZWN0IHJlc3VsdCA9IG51bGw7Ci0JCi0gICAgaWYoIGRhdGFPYmplY3RfICE9IG51bGwgJiYgZGF0YU9iamVjdF8gaW5zdGFuY2VvZiBJV2ViU2VydmljZSApCi0JewotCSAgLy8gVGhlIGRhdGEgb2JqZWN0IGhhcyBhbHJlYWR5IGJlZW4gc2V0IHdpdGggYW4gSVdlYlNlcnZpY2UKLQkgIC8vIHNvIHdlIHdpbGwga2VlcCB0aGlzIHZhbHVlLgotCSAgcmVzdWx0ID0gZGF0YU9iamVjdF87Ci0JfQotICAgIGVsc2UKLQl7Ci0JICByZXN1bHQgPSB3ZWJTZXJ2aWNlQ2xpZW50XzsJCi0JfQotCQotCXJldHVybiByZXN1bHQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvZXh0ZW5zaW9uL1ByZUNsaWVudEluc3RhbGxDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2V4dGVuc2lvbi9QcmVDbGllbnRJbnN0YWxsQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YmU2ZmRmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvZXh0ZW5zaW9uL1ByZUNsaWVudEluc3RhbGxDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTI5ICAgMTQxNDIyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA3MDgxNSAgIDE5OTYyNiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmV4dGVuc2lvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uLkFkZE1vZHVsZVRvU2VydmVyQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb24uQ3JlYXRlU2VydmVyQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlQ2xpZW50OwotCi1wdWJsaWMgY2xhc3MgUHJlQ2xpZW50SW5zdGFsbENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiAKLXsKLSAgcHJpdmF0ZSBJV2ViU2VydmljZUNsaWVudCB3ZWJTZXJ2aWNlQ2xpZW50XzsKLSAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICBwcm9qZWN0XzsKLSAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICBtb2R1bGVfOwotICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgIGVhclByb2plY3RfOwotICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgIGVhcl87Ci0gIHByaXZhdGUgSUNvbnRleHQJCQljb250ZXh0XzsKLSAgCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7CSAgCi0JICBpZiAoY29udGV4dF8gIT0gbnVsbCAmJiBjb250ZXh0Xy5nZXRJbnN0YWxsKCkpCi0JICB7ICAKLQkgICAgICBJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQgPSBnZXRFbnZpcm9ubWVudCgpOwotCSAgICAgIAotCSAgICAgIGlmICh3ZWJTZXJ2aWNlQ2xpZW50Xy5nZXRXZWJTZXJ2aWNlQ2xpZW50SW5mbygpLmdldFNlcnZlckluc3RhbmNlSWQoKT09bnVsbCkKLQkgICAgICB7Ci0JICAgICAgICBDcmVhdGVTZXJ2ZXJDb21tYW5kIGNyZWF0ZVNlcnZlckNvbW1hbmQgPSBuZXcgQ3JlYXRlU2VydmVyQ29tbWFuZCgpOwotCSAgICAgICAgY3JlYXRlU2VydmVyQ29tbWFuZC5zZXRTZXJ2ZXJGYWN0b3J5aWQod2ViU2VydmljZUNsaWVudF8uZ2V0V2ViU2VydmljZUNsaWVudEluZm8oKS5nZXRTZXJ2ZXJGYWN0b3J5SWQoKSk7Ci0JICAgICAgICBjcmVhdGVTZXJ2ZXJDb21tYW5kLnNldEVudmlyb25tZW50KCBlbnZpcm9ubWVudCApOwotCSAgICAgICAgSVN0YXR1cyBjcmVhdGVTZXJ2ZXJTdGF0dXMgPSBjcmVhdGVTZXJ2ZXJDb21tYW5kLmV4ZWN1dGUobnVsbCwgbnVsbCk7Ci0JICAgICAgICBpZiAoY3JlYXRlU2VydmVyU3RhdHVzLmdldFNldmVyaXR5KCk9PVN0YXR1cy5PSykKLQkgICAgICAgIHsKLQkgICAgICAgICAgd2ViU2VydmljZUNsaWVudF8uZ2V0V2ViU2VydmljZUNsaWVudEluZm8oKS5zZXRTZXJ2ZXJJbnN0YW5jZUlkKGNyZWF0ZVNlcnZlckNvbW1hbmQuZ2V0U2VydmVySW5zdGFuY2VJZCgpKTsKLQkgICAgICAgICAgd2ViU2VydmljZUNsaWVudF8uZ2V0V2ViU2VydmljZUNsaWVudEluZm8oKS5zZXRTZXJ2ZXJDcmVhdGVkKHRydWUpOwotCSAgICAgICAgfQotCSAgICAgICAgZWxzZQotCSAgICAgICAgewotCSAgICAgICAgICBpZiAoY3JlYXRlU2VydmVyU3RhdHVzLmdldFNldmVyaXR5KCk9PVN0YXR1cy5FUlJPUikKLQkgICAgICAgICAgewotCSAgICAgICAgICAgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvciggY3JlYXRlU2VydmVyU3RhdHVzICk7Ci0JICAgICAgICAgIH0gICAgICAgICAgICAgICAKLQkgICAgICAgICAgcmV0dXJuIGNyZWF0ZVNlcnZlclN0YXR1czsKLQkgICAgICAgIH0KLQkgICAgICB9Ci0JICAgICAgCi0JICAgICAgQWRkTW9kdWxlVG9TZXJ2ZXJDb21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkTW9kdWxlVG9TZXJ2ZXJDb21tYW5kKCk7Ci0JICAgICAgY29tbWFuZC5zZXRTZXJ2ZXJJbnN0YW5jZUlkKHdlYlNlcnZpY2VDbGllbnRfLmdldFdlYlNlcnZpY2VDbGllbnRJbmZvKCkuZ2V0U2VydmVySW5zdGFuY2VJZCgpKTsKLQkgICAgICBpZiAoZWFyUHJvamVjdF8gIT0gbnVsbCAmJiBlYXJQcm9qZWN0Xy5sZW5ndGgoKT4wICYmIGVhcl8hPSBudWxsICYmIGVhcl8ubGVuZ3RoKCk+MCkKLQkgICAgICB7Ci0JICAgICAgICBjb21tYW5kLnNldFByb2plY3QoZWFyUHJvamVjdF8pOwotCSAgICAgICAgY29tbWFuZC5zZXRNb2R1bGUoZWFyXyk7Ci0JICAgICAgfQotCSAgICAgIGVsc2UKLQkgICAgICB7Ci0JICAgICAgICBjb21tYW5kLnNldFByb2plY3QocHJvamVjdF8pOwotCSAgICAgICAgY29tbWFuZC5zZXRNb2R1bGUobW9kdWxlXyk7ICAgICAgIAotCSAgICAgIH0KLQkKLQkgICAgICBjb21tYW5kLnNldEVudmlyb25tZW50KCBlbnZpcm9ubWVudCApOwotCSAgICAgIElTdGF0dXMgc3RhdHVzID0gY29tbWFuZC5leGVjdXRlKCBudWxsLCBudWxsICk7Ci0JICAgICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpPT1TdGF0dXMuRVJST1IpCi0JICAgICAgewotCSAgICAgICAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKCBzdGF0dXMgKTsKLQkgICAgICB9ICAgICAKLQkgICAgICByZXR1cm4gc3RhdHVzOwotCSAgIH0KLQkgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQl9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRQcm9qZWN0KCBTdHJpbmcgcHJvamVjdCApCi0gICAgewotICAgICAgcHJvamVjdF8gPSBwcm9qZWN0OwotICAgIH0KLSAgICAgIAotICAgIHB1YmxpYyB2b2lkIHNldE1vZHVsZSggU3RyaW5nIG1vZHVsZSApCi0gICAgewotICAgICAgbW9kdWxlXyA9IG1vZHVsZTsKLSAgICB9IAotICAgIAotICAgIHB1YmxpYyB2b2lkIHNldEVhclByb2plY3QoIFN0cmluZyBlYXJQcm9qZWN0ICkKLSAgICB7Ci0gICAgICBlYXJQcm9qZWN0XyA9IGVhclByb2plY3Q7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIHNldEVhciggU3RyaW5nIGVhciApCi0gICAgewotICAgICAgZWFyXyA9IGVhcjsgIAotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlKCBJV2ViU2VydmljZUNsaWVudCB3ZWJTZXJ2aWNlQ2xpZW50ICkKLSAgICB7Ci0gICAgICB3ZWJTZXJ2aWNlQ2xpZW50XyA9IHdlYlNlcnZpY2VDbGllbnQ7ICAKLSAgICB9ICAgIAotICAgIAotICAgIHB1YmxpYyB2b2lkIHNldENvbnRleHQoSUNvbnRleHQgY29udGV4dCkKLSAgICB7Ci0gICAgCWNvbnRleHRfID0gY29udGV4dDsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2V4dGVuc2lvbi9QcmVDbGllbnRSdW5Db21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL2V4dGVuc2lvbi9QcmVDbGllbnRSdW5Db21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5MzE1YmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9leHRlbnNpb24vUHJlQ2xpZW50UnVuQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDUyOSAgIDE0MTQyMiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmV4dGVuc2lvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQuU3RhcnRTZXJ2ZXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSVdlYlNlcnZpY2VDbGllbnQ7Ci0KLXB1YmxpYyBjbGFzcyBQcmVDbGllbnRSdW5Db21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gCi17Ci0gIHByaXZhdGUgSVdlYlNlcnZpY2VDbGllbnQgd2ViU2VydmljZUNsaWVudF87Ci0gIHByaXZhdGUgSUNvbnRleHQgY29udGV4dF87Ci0KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLQkgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLQkgCi0JICBpZiAoY29udGV4dF8gIT0gbnVsbCAmJiBjb250ZXh0Xy5nZXRSdW4oKSkKLQkgIHsKLQkgICAgSUVudmlyb25tZW50IGVudmlyb25tZW50ID0gZ2V0RW52aXJvbm1lbnQoKTsgICAKLQkgICAgCi0JICAgIFN0YXJ0U2VydmVyQ29tbWFuZCBjb21tYW5kID0gbmV3IFN0YXJ0U2VydmVyQ29tbWFuZCgpOwotCSAgICBjb21tYW5kLnNldFNlcnZlckluc3RhbmNlSWQod2ViU2VydmljZUNsaWVudF8uZ2V0V2ViU2VydmljZUNsaWVudEluZm8oKS5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCkpOwotCSAgICBjb21tYW5kLnNldEVudmlyb25tZW50KCBlbnZpcm9ubWVudCApOwotCSAgICBzdGF0dXMgPSBjb21tYW5kLmV4ZWN1dGUoIG1vbml0b3IsIG51bGwgKTsKLQkgICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpPT1TdGF0dXMuRVJST1IpCi0JICAgIHsKLQkgICAgICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3IoIHN0YXR1cyApOyAgICAgICAKLQkgICAgfSAKLQkgIH0KLQkgIAotICAgIHJldHVybiBzdGF0dXM7CSAgCi0gIH0KLQkgIAotCi0gIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2UoIElXZWJTZXJ2aWNlQ2xpZW50IHdlYlNlcnZpY2VDbGllbnQgKQotICB7Ci0gICAgd2ViU2VydmljZUNsaWVudF8gPSB3ZWJTZXJ2aWNlQ2xpZW50OyAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENvbnRleHQoSUNvbnRleHQgY29udGV4dCkKLSAgewotCSAgY29udGV4dF89Y29udGV4dDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9wbHVnaW4vV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvcGx1Z2luL1dlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1OTkzNjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9wbHVnaW4vV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MjQgICAxMTU2OTAgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA2MDUwNCAgIDEzNjExOCBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucGx1Z2luOwotCi1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucHJlZmVyZW5jZXMuUGVyc2lzdGVudFByb2plY3RUb3BvbG9neUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnByZWZlcmVuY2VzLlBlcnNpc3RlbnRTZXJ2ZXJSdW50aW1lQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucHJlZmVyZW5jZXMuUHJvamVjdFRvcG9sb2d5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsKLQotCi0vKioKLSogVGhpcyBpcyB0aGUgcGx1Z2luIGNsYXNzIGZvciB0aGUgV2ViIFNlcnZpY2VzIHBsdWdpbi4KLSogPHA+Ci0qIFRoaXMgcGx1Z2luIGNvbnRhaW5zIHRoZSBncmFwaGljIHVzZXIgaW50ZXJmYWNlIHRvIHRoZQotKiBXZWIgU2VydmljZXMgcnVudGltZSBmb3VuZCBpbiBvcmcuZWNsaXBzZS5qc3Qud3MuCi0qLwotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luIGV4dGVuZHMgQWJzdHJhY3RVSVBsdWdpbgotewotCi0gIC8qKgotICAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBkZXNjcmlwdG9yIG9mIHRoaXMgcGx1Z2luIGluIHBsdWdpbi54bWwuCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEID0gIm9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aSI7Ci0KLSAgLyoqCi0gICogVGhlIHJlZmVyZW5jZSB0byB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgcGx1Z2luLgotICAqLwotICBwcml2YXRlIHN0YXRpYyBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbiBpbnN0YW5jZV87Ci0KLSAgcHJpdmF0ZSBQZXJzaXN0ZW50U2VydmVyUnVudGltZUNvbnRleHQgc2VydmVyUnVudGltZUNvbnRleHRfOwotICBwcml2YXRlIFBlcnNpc3RlbnRQcm9qZWN0VG9wb2xvZ3lDb250ZXh0IHByb2plY3RUb3BvbG9neUNvbnRleHRfOwotICAKLSAgLyoqCi0gICogQ29uc3RydWN0cyBhIHJ1bnRpbWUgcGx1Z2luIG9iamVjdCBmb3IgdGhpcyBwbHVnaW4uCi0gICovCi0gIHB1YmxpYyBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbiAoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgICBpbnN0YW5jZV8gPSB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgcGx1Z2luLiBFcXVpdmFsZW50IHRvIGNhbGxpbmcKLSAgKiAoV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4pUGxhdGZvcm0uZ2V0UGx1Z2luKCJvcmcuZWNsaXBzZS5qc3Qud3MudWkiKTsKLSAgKiBAcmV0dXJuIFRoZSBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbiBzaW5nbGV0b24uCi0gICovCi0gIHN0YXRpYyBwdWJsaWMgV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4gZ2V0SW5zdGFuY2UgKCkKLSAgewotICAgIHJldHVybiBpbnN0YW5jZV87Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyBhbiBpbWFnZSBkZXNjcmlwdG9yIGZvciB0aGUgbmFtZWQgcmVzb3VyY2UKLSAgICogYXMgcmVsYXRpdmUgdG8gdGhlIHBsdWdpbiBpbnN0YWxsIGxvY2F0aW9uLgotICAgKiBAcmV0dXJuIEFuIGltYWdlIGRlc2NyaXB0b3IsIHBvc3NpYmx5IG51bGwuCi0gICAqLwotICAgcHVibGljIHN0YXRpYyBJbWFnZURlc2NyaXB0b3IgZ2V0SW1hZ2VEZXNjcmlwdG9yICggU3RyaW5nIG5hbWUgKQotICAgewotIAl0cnkKLSAgICAgewkKLSAgICAgCVVSTCBpbWFnZVVSTCA9IEZpbGVMb2NhdG9yLmZpbmQoaW5zdGFuY2VfLmdldEJ1bmRsZSgpLCBuZXcgUGF0aCgiJG5sJC8iK25hbWUpLCBudWxsKTsKLSAgICAgCXJldHVybiBJbWFnZURlc2NyaXB0b3IuY3JlYXRlRnJvbVVSTChpbWFnZVVSTCk7Ci0gICAgIH0KLSAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICB7Ci0gICAgICAgcmV0dXJuIG51bGw7Ci0gICAgIH0KLSAgIH0KLQotICBwdWJsaWMgUHJvamVjdFRvcG9sb2d5Q29udGV4dCBnZXRQcm9qZWN0VG9wb2xvZ3lDb250ZXh0KCkKLSAgewotICAgIGlmIChwcm9qZWN0VG9wb2xvZ3lDb250ZXh0XyA9PSBudWxsKQotICAgIHsKLSAgICAgIHByb2plY3RUb3BvbG9neUNvbnRleHRfID0gbmV3IFBlcnNpc3RlbnRQcm9qZWN0VG9wb2xvZ3lDb250ZXh0KCk7Ci0gICAgICBwcm9qZWN0VG9wb2xvZ3lDb250ZXh0Xy5sb2FkKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBwcm9qZWN0VG9wb2xvZ3lDb250ZXh0XzsKLSAgfQotCi0gIHB1YmxpYyBQZXJzaXN0ZW50U2VydmVyUnVudGltZUNvbnRleHQgZ2V0U2VydmVyUnVudGltZUNvbnRleHQoKSAKLQl7Ci0JICBpZiAoc2VydmVyUnVudGltZUNvbnRleHRfID09IG51bGwpCi0JICAJewotCSAgCQlzZXJ2ZXJSdW50aW1lQ29udGV4dF8gPSBuZXcgUGVyc2lzdGVudFNlcnZlclJ1bnRpbWVDb250ZXh0KCk7Ci0JICAJCXNlcnZlclJ1bnRpbWVDb250ZXh0Xy5sb2FkKCk7Ci0JICAJfQotCSAgcmV0dXJuIHNlcnZlclJ1bnRpbWVDb250ZXh0XzsKLQl9ICAKLSAgfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9wcmVmZXJlbmNlcy9QZXJzaXN0ZW50UHJvamVjdFRvcG9sb2d5Q29udGV4dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9wcmVmZXJlbmNlcy9QZXJzaXN0ZW50UHJvamVjdFRvcG9sb2d5Q29udGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjYyZTk4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvcHJlZmVyZW5jZXMvUGVyc2lzdGVudFByb2plY3RUb3BvbG9neUNvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMDIgICAxMTk3ODAgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNjAyMTYgICAxMjcxMzggcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNjAyMjcgICAxMjQzOTIgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucHJlZmVyZW5jZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucGx1Z2luLldlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb250ZXh0LlBlcnNpc3RlbnRDb250ZXh0OwotaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuU3RyaW5nVG9rZW5pemVyOwotCi0KLXB1YmxpYyBjbGFzcyBQZXJzaXN0ZW50UHJvamVjdFRvcG9sb2d5Q29udGV4dCBleHRlbmRzIFBlcnNpc3RlbnRDb250ZXh0IGltcGxlbWVudHMgUHJvamVjdFRvcG9sb2d5Q29udGV4dAotewotCi0gIHB1YmxpYyBQZXJzaXN0ZW50UHJvamVjdFRvcG9sb2d5Q29udGV4dCAoKSAKLSAgewotCSAgc3VwZXIoIFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLmdldEluc3RhbmNlKCkpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBsb2FkKCkgCi0gIHsKLSAgICAvL0xvYWQgdGhlIHNlcnZpY2UgcHJvamVjdCB0eXBlcwotICAgIFN0cmluZ1tdIHNlcnZpY2VJZHMgPSBQcm9qZWN0VG9wb2xvZ3lEZWZhdWx0cy5nZXRTZXJ2aWNlVHlwZXMoKTsKLSAgICBTdHJpbmdCdWZmZXIgc2VydmljZVNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VydmljZUlkcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpZiAoaSAhPSAwKQotICAgICAgICBzZXJ2aWNlU2IuYXBwZW5kKCIgIik7Ci0gICAgICBzZXJ2aWNlU2IuYXBwZW5kKHNlcnZpY2VJZHNbaV0pOwotICAgIH0KLSAgICBzZXREZWZhdWx0U3RyaW5nSWZOb0RlZmF1bHQoUFJFRkVSRU5DRV9TRVJWSUNFX1RZUEVTLCBzZXJ2aWNlU2IudG9TdHJpbmcoKSk7Ci0gICAgCi0gICAgLy9Mb2FkIHRoZSBjbGllbnQgcHJvamVjdCB0eXBlcwotICAgIFN0cmluZ1tdIGlkcyA9IFByb2plY3RUb3BvbG9neURlZmF1bHRzLmdldENsaWVudFR5cGVzKCk7Ci0gICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGlmIChpICE9IDApCi0gICAgICAgIHNiLmFwcGVuZCgiICIpOwotICAgICAgc2IuYXBwZW5kKGlkc1tpXSk7Ci0gICAgfQotICAgIHNldERlZmF1bHRTdHJpbmdJZk5vRGVmYXVsdChQUkVGRVJFTkNFX0NMSUVOVF9UWVBFUywgc2IudG9TdHJpbmcoKSk7Ci0gICAgc2V0RGVmYXVsdChQUkVGRVJFTkNFX1VTRV9UV09fRUFSUywgUHJvamVjdFRvcG9sb2d5RGVmYXVsdHMuaXNVc2VUd29FQVJzKCkpOwotIH0KLQotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlVHlwZXMoU3RyaW5nW10gaWRzKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGlmIChpICE9IDApCi0gICAgICAgIHNiLmFwcGVuZCgiICIpOwotICAgICAgc2IuYXBwZW5kKGlkc1tpXSk7Ci0gICAgfQotICAgIHNldFZhbHVlKFBSRUZFUkVOQ0VfU0VSVklDRV9UWVBFUywgc2IudG9TdHJpbmcoKSk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nW10gZ2V0U2VydmljZVR5cGVzKCkKLSAgewotICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoZ2V0VmFsdWVBc1N0cmluZyhQUkVGRVJFTkNFX1NFUlZJQ0VfVFlQRVMpKTsKLSAgICBTdHJpbmdbXSBzID0gbmV3IFN0cmluZ1tzdC5jb3VudFRva2VucygpXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHMubGVuZ3RoOyBpKyspCi0gICAgICBzW2ldID0gc3QubmV4dFRva2VuKCk7Ci0gICAgcmV0dXJuIHM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXREZWZhdWx0U2VydmljZVR5cGVzKCkKLSAgewotICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoZ2V0RGVmYXVsdFN0cmluZyhQUkVGRVJFTkNFX1NFUlZJQ0VfVFlQRVMpKTsKLSAgICBTdHJpbmdbXSBzID0gbmV3IFN0cmluZ1tzdC5jb3VudFRva2VucygpXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHMubGVuZ3RoOyBpKyspCi0gICAgICBzW2ldID0gc3QubmV4dFRva2VuKCk7Ci0gICAgcmV0dXJuIHM7ICAgICAgICAKLSAgfQotICAgIAotIHB1YmxpYyB2b2lkIHNldENsaWVudFR5cGVzKFN0cmluZ1tdIGlkcykKLSB7Ci0gICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICBmb3IgKGludCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykKLSAgIHsKLSAgICAgaWYgKGkgIT0gMCkKLSAgICAgICBzYi5hcHBlbmQoIiAiKTsKLSAgICAgc2IuYXBwZW5kKGlkc1tpXSk7Ci0gICB9Ci0gICBzZXRWYWx1ZShQUkVGRVJFTkNFX0NMSUVOVF9UWVBFUywgc2IudG9TdHJpbmcoKSk7Ci0gfQotCi0gcHVibGljIFN0cmluZ1tdIGdldENsaWVudFR5cGVzKCkKLSB7Ci0gICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGdldFZhbHVlQXNTdHJpbmcoUFJFRkVSRU5DRV9DTElFTlRfVFlQRVMpKTsKLSAgIFN0cmluZ1tdIHMgPSBuZXcgU3RyaW5nW3N0LmNvdW50VG9rZW5zKCldOwotICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzLmxlbmd0aDsgaSsrKQotICAgICBzW2ldID0gc3QubmV4dFRva2VuKCk7Ci0gICByZXR1cm4gczsKLSB9Ci0gCi0gcHVibGljIFN0cmluZ1tdIGdldERlZmF1bHRDbGllbnRUeXBlcygpCi0gewotICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihnZXREZWZhdWx0U3RyaW5nKFBSRUZFUkVOQ0VfQ0xJRU5UX1RZUEVTKSk7Ci0gICBTdHJpbmdbXSBzID0gbmV3IFN0cmluZ1tzdC5jb3VudFRva2VucygpXTsKLSAgIGZvciAoaW50IGkgPSAwOyBpIDwgcy5sZW5ndGg7IGkrKykKLSAgICAgc1tpXSA9IHN0Lm5leHRUb2tlbigpOwotICAgcmV0dXJuIHM7ICAgICAgICAKLSB9IAotCi0gcHVibGljIHZvaWQgc2V0VXNlVHdvRUFScyhib29sZWFuIHVzZSkKLSB7Ci0gICBzZXRWYWx1ZShQUkVGRVJFTkNFX1VTRV9UV09fRUFSUywgdXNlKTsKLSB9Ci0gcHVibGljIGJvb2xlYW4gaXNVc2VUd29FQVJzKCkKLSB7Ci0gICByZXR1cm4gZ2V0VmFsdWVBc0Jvb2xlYW4oUFJFRkVSRU5DRV9VU0VfVFdPX0VBUlMpOwotIH0KLQotIHB1YmxpYyBQcm9qZWN0VG9wb2xvZ3lDb250ZXh0IGNvcHkoKSB7Ci0gCVRyYW5zaWVudFByb2plY3RUb3BvbG9neUNvbnRleHQgY29udGV4dCA9IG5ldyBUcmFuc2llbnRQcm9qZWN0VG9wb2xvZ3lDb250ZXh0KCk7Ci0gICAgY29udGV4dC5zZXRTZXJ2aWNlVHlwZXMoZ2V0U2VydmljZVR5cGVzKCkpOwotICAgIGNvbnRleHQuc2V0RGVmYXVsdFNlcnZpY2VUeXBlcyhnZXREZWZhdWx0U2VydmljZVR5cGVzKCkpOwotCWNvbnRleHQuc2V0Q2xpZW50VHlwZXMoZ2V0Q2xpZW50VHlwZXMoKSk7Ci0gICAgY29udGV4dC5zZXREZWZhdWx0Q2xpZW50VHlwZXMoZ2V0RGVmYXVsdENsaWVudFR5cGVzKCkpOwotCWNvbnRleHQuc2V0VXNlVHdvRUFScyhpc1VzZVR3b0VBUnMoKSk7Ci0JcmV0dXJuIGNvbnRleHQ7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvcHJlZmVyZW5jZXMvUGVyc2lzdGVudFNlcnZlclJ1bnRpbWVDb250ZXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3ByZWZlcmVuY2VzL1BlcnNpc3RlbnRTZXJ2ZXJSdW50aW1lQ29udGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MWE5ZTk4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvcHJlZmVyZW5jZXMvUGVyc2lzdGVudFNlcnZlclJ1bnRpbWVDb250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnByZWZlcmVuY2VzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnBsdWdpbi5XZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29udGV4dC5QZXJzaXN0ZW50Q29udGV4dDsKLQotCi0vKioKLSAqIAotICovCi1wdWJsaWMgY2xhc3MgUGVyc2lzdGVudFNlcnZlclJ1bnRpbWVDb250ZXh0IGV4dGVuZHMgUGVyc2lzdGVudENvbnRleHQgewotCQotCXByaXZhdGUgU3RyaW5nIFBSRUZFUkVOQ0VfU0VSVkVSID0gIlBSRUZFUkVOQ0VfU0VSVkVSIjsKLQlwcml2YXRlIFN0cmluZyBQUkVGRVJFTkNFX1JVTlRJTUUgPSAiUFJFRkVSRU5DRV9SVU5USU1FIjsKLQkvL3ByaXZhdGUgU3RyaW5nIFBSRUZFUkVOQ0VfSjJFRV9WRVJTSU9OID0gIlBSRUZFUkVOQ0VfSjJFRV9WRVJTSU9OIjsKLQkKLQlwcml2YXRlIFN0cmluZyBTRVJWRVJfRkFDVE9SWV9JRF9ERUZBVUxUID0gIm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjUwIjsKLQlwcml2YXRlIFN0cmluZyBSVU5USU1FX0lEX0RFRkFVTFQgPSAib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24uYXhpc1dlYlNlcnZpY2VSVCI7Ci0JCi0JcHVibGljIFBlcnNpc3RlbnRTZXJ2ZXJSdW50aW1lQ29udGV4dCgpCi0JewotCQlzdXBlcihXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5nZXRJbnN0YW5jZSgpKTsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuQ29udGV4dCNsb2FkKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBsb2FkKCkgewotCQkvL0RlZmF1bHRzIHdpbGwgYmUgc2V0IHZpYSB0aGUgLmluaSBjdXN0b21pemF0aW9uLiBUaGV5IGFyZSBoYXJkIGNvZGVkIHRvIGRlZmF1bHQgdmFsdWVzIGluIHRoZQotCQkvL2Fic2VuY2Ugb2YgYSAuaW5pIGZpbGUuCi0JCVN0cmluZyBzZXJ2ZXJEZWZhdWx0ID0gZ2V0RGVmYXVsdFN0cmluZyhQUkVGRVJFTkNFX1NFUlZFUik7Ci0JCWlmIChzZXJ2ZXJEZWZhdWx0PT1udWxsIHx8IHNlcnZlckRlZmF1bHQubGVuZ3RoKCk9PTApCi0JCXsKLQkJICBzZXREZWZhdWx0KFBSRUZFUkVOQ0VfU0VSVkVSLCBTRVJWRVJfRkFDVE9SWV9JRF9ERUZBVUxUKTsKLQkJfQotCi0JCVN0cmluZyBydW50aW1lRGVmYXVsdCA9IGdldERlZmF1bHRTdHJpbmcoUFJFRkVSRU5DRV9SVU5USU1FKTsKLQkJaWYgKHJ1bnRpbWVEZWZhdWx0PT1udWxsIHx8IHJ1bnRpbWVEZWZhdWx0Lmxlbmd0aCgpPT0wKQotCQl7Ci0JCSAgc2V0RGVmYXVsdChQUkVGRVJFTkNFX1JVTlRJTUUsIFJVTlRJTUVfSURfREVGQVVMVCk7Ci0JCX0KLQkJCQkKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXREZWZhdWx0U2VydmVyRmFjdG9yeUlkKCkKLQl7Ci0JCXJldHVybiBnZXREZWZhdWx0U3RyaW5nKFBSRUZFUkVOQ0VfU0VSVkVSKTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldERlZmF1bHRSdW50aW1lSWQoKQotCXsKLQkJcmV0dXJuIGdldERlZmF1bHRTdHJpbmcoUFJFRkVSRU5DRV9SVU5USU1FKTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFNlcnZlckZhY3RvcnlJZCgpCi0JewotCQlTdHJpbmcgdmFsdWUgPSBnZXRWYWx1ZUFzU3RyaW5nKFBSRUZFUkVOQ0VfU0VSVkVSKTsgCi0JCS8qCi0JCWlmICh2YWx1ZT09bnVsbCB8fCB2YWx1ZS5sZW5ndGgoKT09MCkKLQkJewotCQkJdmFsdWUgPSBTRVJWRVJfRkFDVE9SWV9JRF9ERUZBVUxUOyAKLQkJCXNldFNlcnZlckZhY3RvcnlJZCh2YWx1ZSk7Ci0JCX0KLQkJKi8KLQkJcmV0dXJuIHZhbHVlOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldFJ1bnRpbWVJZCgpCi0JewotCQlTdHJpbmcgdmFsdWUgPSBnZXRWYWx1ZUFzU3RyaW5nKFBSRUZFUkVOQ0VfUlVOVElNRSk7Ci0JCS8qCi0JCWlmICh2YWx1ZT09bnVsbCB8fCB2YWx1ZS5sZW5ndGgoKT09MCkKLQkJewotCQkJdmFsdWUgPSBSVU5USU1FX0lEX0RFRkFVTFQ7IAotCQkJc2V0UnVudGltZUlkKHZhbHVlKTsKLQkJfQotCQkqLwotCQlyZXR1cm4gdmFsdWU7CQkKLQl9Ci0JCi0JCi0JcHVibGljIHZvaWQgc2V0U2VydmVyRmFjdG9yeUlkKFN0cmluZyBpZCkKLQl7Ci0JCXNldFZhbHVlKFBSRUZFUkVOQ0VfU0VSVkVSLGlkKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0UnVudGltZUlkKFN0cmluZyBpZCkKLQl7Ci0JCXNldFZhbHVlKFBSRUZFUkVOQ0VfUlVOVElNRSwgaWQpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvcHJlZmVyZW5jZXMvUHJvamVjdFRvcG9sb2d5Q29udGV4dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9wcmVmZXJlbmNlcy9Qcm9qZWN0VG9wb2xvZ3lDb250ZXh0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjMjFjNGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9wcmVmZXJlbmNlcy9Qcm9qZWN0VG9wb2xvZ3lDb250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMjcgICAxMjQzOTIgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucHJlZmVyZW5jZXM7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgUHJvamVjdFRvcG9sb2d5Q29udGV4dCAKLXsKLSAgLyoqCi0gICAgKiBUaGlzIGNvbnN0YW50IFN0cmluZyBpcyB1c2VkIHRvIGxvb2t1cCB0aGUgcHJlZmVycmVkIG9yZGVyIG9mIHRoZSBkaWZmZXJlbnQgY2xpZW50IHR5cGVzCi0gICoqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUkVGRVJFTkNFX0NMSUVOVF9UWVBFUyA9ICJjbGllbnRUeXBlcyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBSRUZFUkVOQ0VfU0VSVklDRV9UWVBFUyA9ICJzZXJ2aWNlVHlwZXMiOwotICAKLSAgLyoqCi0gICAgKiBUaGlzIGNvbnN0YW50IFN0cmluZyBpcyB1c2VkIHRvIGxvb2t1cCB0aGUgdHdvIEVBUiBvcHRpb24KLSAgKiovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBSRUZFUkVOQ0VfVVNFX1RXT19FQVJTID0gInVzZVR3b0VBUnMiOwotICAKLSAgcHVibGljIHZvaWQgc2V0U2VydmljZVR5cGVzKFN0cmluZ1tdIGlkcyk7Ci0gIHB1YmxpYyBTdHJpbmdbXSBnZXRTZXJ2aWNlVHlwZXMoKTsKLSAgcHVibGljIFN0cmluZ1tdIGdldERlZmF1bHRTZXJ2aWNlVHlwZXMoKTsKLSAgCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudFR5cGVzKFN0cmluZ1tdIGlkcyk7Ci0gIHB1YmxpYyBTdHJpbmdbXSBnZXRDbGllbnRUeXBlcygpOwotICBwdWJsaWMgU3RyaW5nW10gZ2V0RGVmYXVsdENsaWVudFR5cGVzKCk7Ci0KLSAgcHVibGljIHZvaWQgc2V0VXNlVHdvRUFScyhib29sZWFuIHVzZSk7Ci0gIHB1YmxpYyBib29sZWFuIGlzVXNlVHdvRUFScygpOwotCi0gIHB1YmxpYyBQcm9qZWN0VG9wb2xvZ3lDb250ZXh0IGNvcHkoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvcHJlZmVyZW5jZXMvUHJvamVjdFRvcG9sb2d5RGVmYXVsdHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvcHJlZmVyZW5jZXMvUHJvamVjdFRvcG9sb2d5RGVmYXVsdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTE5ZTFmNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3ByZWZlcmVuY2VzL1Byb2plY3RUb3BvbG9neURlZmF1bHRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMjcgICAxMjQzOTIgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucHJlZmVyZW5jZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydC5XZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMjsKLQotcHVibGljIGNsYXNzIFByb2plY3RUb3BvbG9neURlZmF1bHRzCi17Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZ1tdIGdldFNlcnZpY2VUeXBlcygpCi0gIHsKLSAgICByZXR1cm4gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0QWxsU2VydmljZVByb2plY3RUeXBlcygpOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZ1tdIGdldENsaWVudFR5cGVzKCkKLSAgewotICAgIHJldHVybiBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRBbGxDbGllbnRQcm9qZWN0VHlwZXMoKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBpc1VzZVR3b0VBUnMoKQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvcHJlZmVyZW5jZXMvUHJvamVjdFRvcG9sb2d5UHJlZmVyZW5jZVBhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvcHJlZmVyZW5jZXMvUHJvamVjdFRvcG9sb2d5UHJlZmVyZW5jZVBhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDBjN2JjMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3ByZWZlcmVuY2VzL1Byb2plY3RUb3BvbG9neVByZWZlcmVuY2VQYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjI3ICAgMTI0MzkyIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA1MTUgICAxNDEzOTggY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5wcmVmZXJlbmNlczsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLlByZWZlcmVuY2VQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ29sdW1uV2VpZ2h0RGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGFibGVWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnBsdWdpbi5XZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuV1NVSVBsdWdpbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5wbHVnaW4uV2ViU2VydmljZVVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGVDb2x1bW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5JRmFjZXRlZFByb2plY3RUZW1wbGF0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5Qcm9qZWN0RmFjZXRzTWFuYWdlcjsKLQotCi0KLXB1YmxpYyBjbGFzcyBQcm9qZWN0VG9wb2xvZ3lQcmVmZXJlbmNlUGFnZSBleHRlbmRzIFByZWZlcmVuY2VQYWdlIGltcGxlbWVudHMgSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlLCBTZWxlY3Rpb25MaXN0ZW5lcgotewotICAvKkNPTlRFWFRfSUQgUFRQUDAwMDEgZm9yIHRoZSBQcm9qZWN0IFRvcG9sb2d5IFByZWZlcmVuY2UgUGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFRQUF9QQUdFID0gV2ViU2VydmljZVVJUGx1Z2luLklEICsgIi5QUFRQMDAwMSI7Ci0KLSAgcHJpdmF0ZSBUYWJsZVZpZXdlciBzZXJ2aWNlVHlwZVZpZXdlcl87Ci0gIHByaXZhdGUgQnV0dG9uIHNlcnZpY2VNb3ZlVXBfOwotICBwcml2YXRlIEJ1dHRvbiBzZXJ2aWNlTW92ZURvd25fOwotICBwcml2YXRlIFZlY3RvciBzZXJ2aWNlVHlwZXNfOwotICAKLSAgcHJpdmF0ZSBUYWJsZVZpZXdlciBjbGllbnRUeXBlVmlld2VyXzsKLSAgcHJpdmF0ZSBCdXR0b24gbW92ZVVwXzsKLSAgcHJpdmF0ZSBCdXR0b24gbW92ZURvd25fOwotICBwcml2YXRlIFZlY3RvciBjbGllbnRUeXBlc187Ci0KLSAgcHJpdmF0ZSBCdXR0b24gdHdvRUFSXzsKLQotIC8qKgotICAgKiBDcmVhdGVzIHByZWZlcmVuY2UgcGFnZSBjb250cm9scyBvbiBkZW1hbmQuCi0gICAqICAgQHBhcmFtIHBhcmVudCAgdGhlIHBhcmVudCBmb3IgdGhlIHByZWZlcmVuY2UgcGFnZQotICAgKi8KLSAgcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlQ29udGVudHMoQ29tcG9zaXRlIHN1cGVycGFyZW50KQotICB7Ci0gICAgQ29tcG9zaXRlICAgcGFyZW50ID0gbmV3IENvbXBvc2l0ZSggc3VwZXJwYXJlbnQsIFNXVC5OT05FICk7CQotICAgIEdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBsYXlvdXQubnVtQ29sdW1ucyA9IDE7Ci0gICAgcGFyZW50LnNldExheW91dCggbGF5b3V0ICk7Ci0gICAgcGFyZW50LnNldFRvb2xUaXBUZXh0KFdTVUlQbHVnaW5NZXNzYWdlcy5UT09MVElQX1BUUFBfUEFHRSk7Ci0gICAgcGFyZW50LnNldExheW91dERhdGEoIG5ldyBHcmlkRGF0YSggR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMICkgKTsKLSAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHBhcmVudCxJTkZPUE9QX1BUUFBfUEFHRSk7ICAKLQotICAgIEdyb3VwIHNlcnZpY2VUeXBlQ29tcG9zaXRlID0gbmV3IEdyb3VwKCBwYXJlbnQsIFNXVC5OT05FICk7Ci0gICAgR3JpZExheW91dCBzZXJ2aWNlZ2wgPSBuZXcgR3JpZExheW91dCgpOwotICAgIHNlcnZpY2VnbC5udW1Db2x1bW5zID0gMjsKLSAgICBzZXJ2aWNlZ2wubWFyZ2luSGVpZ2h0ID0gMDsKLSAgICBzZXJ2aWNlZ2wubWFyZ2luV2lkdGggPSAwOwotICAgIHNlcnZpY2VUeXBlQ29tcG9zaXRlLnNldExheW91dChzZXJ2aWNlZ2wpOwotICAgIHNlcnZpY2VUeXBlQ29tcG9zaXRlLnNldExheW91dERhdGEoIG5ldyBHcmlkRGF0YSggR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMICkpOwotICAgIHNlcnZpY2VUeXBlQ29tcG9zaXRlLnNldFRleHQoV1NVSVBsdWdpbk1lc3NhZ2VzLkxBQkVMX1NFUlZJQ0VfVFlQRV9OQU1FKTsKLSAgICAKLSAgICBUYWJsZSBzZXJ2aWNlVGFibGU9IG5ldyBUYWJsZShzZXJ2aWNlVHlwZUNvbXBvc2l0ZSwgU1dULkJPUkRFUiB8IFNXVC5TSU5HTEUgfCBTV1QuRlVMTF9TRUxFQ1RJT04gfCBTV1QuSF9TQ1JPTEwgfCBTV1QuVl9TQ1JPTEwpOwotICAgIEdyaWREYXRhIHNlcnZpY2VnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwgfCBHcmlkRGF0YS5GSUxMX1ZFUlRJQ0FMKTsKLSAgICBzZXJ2aWNlZ2Qud2lkdGhIaW50ID0gMjU2OwotICAgIHNlcnZpY2VUYWJsZS5zZXRMYXlvdXREYXRhKHNlcnZpY2VnZCk7Ci0gICAgc2VydmljZVRhYmxlLnNldFRvb2xUaXBUZXh0KFdTVUlQbHVnaW5NZXNzYWdlcy5UT09MVElQX1NFUlZJQ0VfVFlQRV9UQUJMRV9WSUVXRVIpOwotCi0gICAgc2VydmljZVR5cGVzXyA9IG5ldyBWZWN0b3IoKTsKLSAgICBzZXJ2aWNlVHlwZVZpZXdlcl8gPSBuZXcgVGFibGVWaWV3ZXIoc2VydmljZVRhYmxlKTsKLSAgICBzZXJ2aWNlVHlwZVZpZXdlcl8uc2V0Q29udGVudFByb3ZpZGVyKG5ldyBDbGllbnRUeXBlQ29udGVudFByb3ZpZGVyKCkpOwotICAgIHNlcnZpY2VUeXBlVmlld2VyXy5zZXRMYWJlbFByb3ZpZGVyKG5ldyBDbGllbnRUeXBlTGFiZWxQcm92aWRlcigpKTsKLSAgICBzZXJ2aWNlVHlwZVZpZXdlcl8uc2V0SW5wdXQoc2VydmljZVR5cGVzXyk7Ci0KLSAgICBUYWJsZUxheW91dCBzZXJ2aWNlVGFibGVMYXlvdXQgPSBuZXcgVGFibGVMYXlvdXQoKTsKLSAgICBUYWJsZUNvbHVtbiBzZXJ2aWNlVGFibGVDb2x1bW4gPSBuZXcgVGFibGVDb2x1bW4oc2VydmljZVRhYmxlLCBTV1QuTk9ORSk7Ci0gICAgc2VydmljZVRhYmxlQ29sdW1uLnNldFRleHQoV1NVSVBsdWdpbk1lc3NhZ2VzLkxBQkVMX1NFUlZJQ0VfVFlQRV9OQU1FKTsKLSAgICBDb2x1bW5XZWlnaHREYXRhIHNlcnZpY2VDb2x1bW5EYXRhID0gbmV3IENvbHVtbldlaWdodERhdGEoMjU2LCAyNTYsIGZhbHNlKTsKLSAgICBzZXJ2aWNlVGFibGVMYXlvdXQuYWRkQ29sdW1uRGF0YShzZXJ2aWNlQ29sdW1uRGF0YSk7Ci0gICAgc2VydmljZVRhYmxlLnNldExheW91dChzZXJ2aWNlVGFibGVMYXlvdXQpOwotCi0gICAgQ29tcG9zaXRlIHNlcnZpY2VjID0gbmV3IENvbXBvc2l0ZShzZXJ2aWNlVHlwZUNvbXBvc2l0ZSwgU1dULk5PTkUpOwotICAgIHNlcnZpY2VnbCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgc2VydmljZWdsLm51bUNvbHVtbnMgPSAxOwotICAgIHNlcnZpY2VnbC5tYXJnaW5IZWlnaHQgPSAxMDsKLSAgICBzZXJ2aWNlZ2wubWFyZ2luV2lkdGggPSAwOwotICAgIHNlcnZpY2VjLnNldExheW91dChzZXJ2aWNlZ2wpOwotCi0gICAgc2VydmljZU1vdmVVcF8gPSBuZXcgQnV0dG9uKHNlcnZpY2VjLCBTV1QuUFVTSCk7Ci0gICAgc2VydmljZU1vdmVVcF8uc2V0VGV4dChXU1VJUGx1Z2luTWVzc2FnZXMuTEFCRUxfTU9WRV9VUCk7Ci0gICAgc2VydmljZU1vdmVVcF8uc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMKSk7Ci0gICAgc2VydmljZU1vdmVVcF8uYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0gICAgc2VydmljZU1vdmVVcF8uc2V0VG9vbFRpcFRleHQoV1NVSVBsdWdpbk1lc3NhZ2VzLlRPT0xUSVBfTU9WRV9VUCk7Ci0KLSAgICBzZXJ2aWNlTW92ZURvd25fID0gbmV3IEJ1dHRvbihzZXJ2aWNlYywgU1dULlBVU0gpOwotICAgIHNlcnZpY2VNb3ZlRG93bl8uc2V0VGV4dChXU1VJUGx1Z2luTWVzc2FnZXMuTEFCRUxfTU9WRV9ET1dOKTsKLSAgICBzZXJ2aWNlTW92ZURvd25fLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCkpOwotICAgIHNlcnZpY2VNb3ZlRG93bl8uYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0gICAgc2VydmljZU1vdmVEb3duXy5zZXRUb29sVGlwVGV4dChXU1VJUGx1Z2luTWVzc2FnZXMuVE9PTFRJUF9NT1ZFX0RPV04pOwotICAgIAotCi0gICAgR3JvdXAgY2xpZW50VHlwZUNvbXBvc2l0ZSA9IG5ldyBHcm91cCggcGFyZW50LCBTV1QuTk9ORSApOwotICAgIEdyaWRMYXlvdXQgZ2wgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGdsLm51bUNvbHVtbnMgPSAyOwotICAgIGdsLm1hcmdpbkhlaWdodCA9IDA7Ci0gICAgZ2wubWFyZ2luV2lkdGggPSAwOwotICAgIGNsaWVudFR5cGVDb21wb3NpdGUuc2V0TGF5b3V0KGdsKTsKLSAgICBjbGllbnRUeXBlQ29tcG9zaXRlLnNldExheW91dERhdGEoIG5ldyBHcmlkRGF0YSggR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMICkpOwotICAgIGNsaWVudFR5cGVDb21wb3NpdGUuc2V0VGV4dChXU1VJUGx1Z2luTWVzc2FnZXMuTEFCRUxfQ0xJRU5UX1RZUEVfTkFNRSk7Ci0KLSAgICBUYWJsZSB0YWJsZT0gbmV3IFRhYmxlKGNsaWVudFR5cGVDb21wb3NpdGUsIFNXVC5CT1JERVIgfCBTV1QuU0lOR0xFIHwgU1dULkZVTExfU0VMRUNUSU9OIHwgU1dULkhfU0NST0xMIHwgU1dULlZfU0NST0xMKTsKLSAgICBHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwgfCBHcmlkRGF0YS5GSUxMX1ZFUlRJQ0FMKTsKLSAgICBnZC53aWR0aEhpbnQgPSAyNTY7Ci0gICAgdGFibGUuc2V0TGF5b3V0RGF0YShnZCk7Ci0gICAgdGFibGUuc2V0VG9vbFRpcFRleHQoV1NVSVBsdWdpbk1lc3NhZ2VzLlRPT0xUSVBfQ0xJRU5UX1RZUEVfVEFCTEVfVklFV0VSKTsKLQotICAgIGNsaWVudFR5cGVzXyA9IG5ldyBWZWN0b3IoKTsKLSAgICBjbGllbnRUeXBlVmlld2VyXyA9IG5ldyBUYWJsZVZpZXdlcih0YWJsZSk7Ci0gICAgY2xpZW50VHlwZVZpZXdlcl8uc2V0Q29udGVudFByb3ZpZGVyKG5ldyBDbGllbnRUeXBlQ29udGVudFByb3ZpZGVyKCkpOwotICAgIGNsaWVudFR5cGVWaWV3ZXJfLnNldExhYmVsUHJvdmlkZXIobmV3IENsaWVudFR5cGVMYWJlbFByb3ZpZGVyKCkpOwotICAgIGNsaWVudFR5cGVWaWV3ZXJfLnNldElucHV0KGNsaWVudFR5cGVzXyk7Ci0KLSAgICBUYWJsZUxheW91dCB0YWJsZUxheW91dCA9IG5ldyBUYWJsZUxheW91dCgpOwotICAgIFRhYmxlQ29sdW1uIHRhYmxlQ29sdW1uID0gbmV3IFRhYmxlQ29sdW1uKHRhYmxlLCBTV1QuTk9ORSk7Ci0gICAgdGFibGVDb2x1bW4uc2V0VGV4dChXU1VJUGx1Z2luTWVzc2FnZXMuTEFCRUxfQ0xJRU5UX1RZUEVfTkFNRSk7Ci0gICAgQ29sdW1uV2VpZ2h0RGF0YSBjb2x1bW5EYXRhID0gbmV3IENvbHVtbldlaWdodERhdGEoMjU2LCAyNTYsIGZhbHNlKTsKLSAgICB0YWJsZUxheW91dC5hZGRDb2x1bW5EYXRhKGNvbHVtbkRhdGEpOwotICAgIHRhYmxlLnNldExheW91dCh0YWJsZUxheW91dCk7Ci0KLSAgICBDb21wb3NpdGUgYyA9IG5ldyBDb21wb3NpdGUoY2xpZW50VHlwZUNvbXBvc2l0ZSwgU1dULk5PTkUpOwotICAgIGdsID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBnbC5udW1Db2x1bW5zID0gMTsKLSAgICBnbC5tYXJnaW5IZWlnaHQgPSAxMDsKLSAgICBnbC5tYXJnaW5XaWR0aCA9IDA7Ci0gICAgYy5zZXRMYXlvdXQoZ2wpOwotCi0gICAgbW92ZVVwXyA9IG5ldyBCdXR0b24oYywgU1dULlBVU0gpOwotICAgIG1vdmVVcF8uc2V0VGV4dChXU1VJUGx1Z2luTWVzc2FnZXMuTEFCRUxfTU9WRV9VUF8yKTsKLSAgICBtb3ZlVXBfLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCkpOwotICAgIG1vdmVVcF8uYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0gICAgbW92ZVVwXy5zZXRUb29sVGlwVGV4dChXU1VJUGx1Z2luTWVzc2FnZXMuVE9PTFRJUF9NT1ZFX1VQKTsKLQotICAgIG1vdmVEb3duXyA9IG5ldyBCdXR0b24oYywgU1dULlBVU0gpOwotICAgIG1vdmVEb3duXy5zZXRUZXh0KFdTVUlQbHVnaW5NZXNzYWdlcy5MQUJFTF9NT1ZFX0RPV05fMik7Ci0gICAgbW92ZURvd25fLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCkpOwotICAgIG1vdmVEb3duXy5hZGRTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKLSAgICBtb3ZlRG93bl8uc2V0VG9vbFRpcFRleHQoV1NVSVBsdWdpbk1lc3NhZ2VzLlRPT0xUSVBfTU9WRV9ET1dOKTsKLQotICAgIHR3b0VBUl8gPSBuZXcgQnV0dG9uKHBhcmVudCwgU1dULkNIRUNLIHwgU1dULldSQVAgKTsKLSAgICB0d29FQVJfLnNldFRleHQoV1NVSVBsdWdpbk1lc3NhZ2VzLkxBQkVMX0VOQUJMRV9UV09fRUFSUyk7Ci0gICAgdHdvRUFSXy5zZXRUb29sVGlwVGV4dChXU1VJUGx1Z2luTWVzc2FnZXMuVE9PTFRJUF9FTkFCTEVfVFdPX0VBUlMpOwotCi0gICAgaW5pdGlhbGl6ZVZhbHVlcygpOwotICAgIG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nLmFwcGx5RGlhbG9nRm9udChzdXBlcnBhcmVudCk7ICAgIAotCi0gICAgcmV0dXJuIHBhcmVudDsKLSAgfQotICAKLSAgLyoqCi0gICAqIERvZXMgYW55dGhpbmcgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIGRlZmF1bHQgYnV0dG9uIGhhcyBiZWVuIHByZXNzZWQuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBwZXJmb3JtRGVmYXVsdHMoKQotICB7Ci0gICAgc3VwZXIucGVyZm9ybURlZmF1bHRzKCk7Ci0gICAgaW5pdGlhbGl6ZURlZmF1bHRzKCk7Ci0gIH0KLQotICAvKioKLSAgICogRG8gYW55dGhpbmcgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIE9LIGJ1dHRvbiBoYXMgYmVlbiBwcmVzc2VkLgotICAgKiAgQHJldHVybiB3aGV0aGVyIGl0IGlzIG9rYXkgdG8gY2xvc2UgdGhlIHByZWZlcmVuY2UgcGFnZQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gcGVyZm9ybU9rKCkKLSAgewotICAgIHN0b3JlVmFsdWVzKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBwZXJmb3JtQXBwbHkoKQotICB7Ci0gICAgcGVyZm9ybU9rKCk7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBJV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2UKLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaCB3b3JrYmVuY2gpICB7IH0KLQotICAKLSAgLyoqCi0gICAqIEFkZHMgdGhlIFN0cmluZyBlbGVtZW50cyBvZiBhcnJheSBhIGludG8gVmVjdG9yIHYuIElmIFN0cmluZyBhcnJheSBiIGNvbnRhaW5zIGFueSBlbGVtZW50cwotICAgKiB0aGF0IGFyZSBub3QgYWxyZWFkeSBpbiBhcnJheSBhLCBhcHBlbmRzIHRoZXNlIGVsZW1lbnRzIGZyb20gYXJyYXkgYiB0byB0aGUgZW5kIG9mIFZlY3RvciB2LiAKLSAgICogQHBhcmFtIGEgYSBTdHJpbmcgYXJyYXkKLSAgICogQHBhcmFtIGIgYSBTdHJpbmcgYXJyYXkKLSAgICogQHBhcmFtIHYgYSBub24tbnVsbCBWZWN0b3IKLSAgICovCi0gIHByaXZhdGUgdm9pZCBzZXRWZWN0b3JDb250ZW50c0Zyb21Ud29BcnJheXMoU3RyaW5nW10gYSwgU3RyaW5nW10gYiwgVmVjdG9yIHYpCi0gIHsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgdi5hZGQoYVtpXSk7Ci0gICAgfQotICAgIAotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYi5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpZiAodi5pbmRleE9mKGJbaV0pID09IC0xKQotICAgICAgewotICAgICAgICB2LmFkZChiW2ldKTsKLSAgICAgIH0KLSAgICB9ICAgCi0gIH0KLSAgCi0gIC8qKgotICAgKiBJbml0aWFsaXplcyBzdGF0ZXMgb2YgdGhlIGNvbnRyb2xzIHRvIHRoZWlyIGJ1cm5lZC1pbiBkZWZhdWx0cy4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBpbml0aWFsaXplRGVmYXVsdHMoKQotICB7Ci0gICAgUHJvamVjdFRvcG9sb2d5Q29udGV4dCBjb250ZXh0ID0gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQcm9qZWN0VG9wb2xvZ3lDb250ZXh0KCk7Ci0gICAgc2VydmljZVR5cGVzXy5jbGVhcigpOwotICAgIFN0cmluZ1tdIGRlZmF1bHRTZXJ2aWNlVHlwZXMgPSBjb250ZXh0LmdldERlZmF1bHRTZXJ2aWNlVHlwZXMoKTsKLSAgICBTdHJpbmdbXSBhbGxTZXJ2aWNlVHlwZXMgPSBQcm9qZWN0VG9wb2xvZ3lEZWZhdWx0cy5nZXRTZXJ2aWNlVHlwZXMoKTsKLSAgICBzZXRWZWN0b3JDb250ZW50c0Zyb21Ud29BcnJheXMoZGVmYXVsdFNlcnZpY2VUeXBlcywgYWxsU2VydmljZVR5cGVzLCBzZXJ2aWNlVHlwZXNfKTsgICAgCi0gICAgc2VydmljZVR5cGVWaWV3ZXJfLnJlZnJlc2goKTsKLSAgICAKLSAgICBjbGllbnRUeXBlc18uY2xlYXIoKTsKLSAgICBTdHJpbmdbXSBkZWZhdWx0Q2xpZW50VHlwZXMgPSBjb250ZXh0LmdldERlZmF1bHRDbGllbnRUeXBlcygpOwotICAgIFN0cmluZ1tdIGFsbENsaWVudFR5cGVzID0gUHJvamVjdFRvcG9sb2d5RGVmYXVsdHMuZ2V0Q2xpZW50VHlwZXMoKTsKLSAgICBzZXRWZWN0b3JDb250ZW50c0Zyb21Ud29BcnJheXMoZGVmYXVsdENsaWVudFR5cGVzLCBhbGxDbGllbnRUeXBlcywgY2xpZW50VHlwZXNfKTsgICAgICAgICAKLSAgICBjbGllbnRUeXBlVmlld2VyXy5yZWZyZXNoKCk7Ci0gICAgCi0gICAgdHdvRUFSXy5zZXRTZWxlY3Rpb24odHJ1ZSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBJbml0aWFsaXplcyBzdGF0ZXMgb2YgdGhlIGNvbnRyb2xzIGZyb20gdGhlIHByZWZlcmVuY2UgaGVscGVyLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGluaXRpYWxpemVWYWx1ZXMoKQotICB7Ci0gICAgLy9Jbml0aWFsIHNlcnZpY2UgcHJvamVjdCB0eXBlcy4KLSAgICBQcm9qZWN0VG9wb2xvZ3lDb250ZXh0IGNvbnRleHQgPSBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFByb2plY3RUb3BvbG9neUNvbnRleHQoKTsKLSAgICBTdHJpbmdbXSBzZXJ2aWNlVHlwZXNGcm9tQ29udGV4dCA9IGNvbnRleHQuZ2V0U2VydmljZVR5cGVzKCk7Ci0gICAgU3RyaW5nW10gYWxsU2VydmljZVR5cGVzID0gUHJvamVjdFRvcG9sb2d5RGVmYXVsdHMuZ2V0U2VydmljZVR5cGVzKCk7Ci0gICAgc2V0VmVjdG9yQ29udGVudHNGcm9tVHdvQXJyYXlzKHNlcnZpY2VUeXBlc0Zyb21Db250ZXh0LCBhbGxTZXJ2aWNlVHlwZXMsIHNlcnZpY2VUeXBlc18pOwotICAgIGlmIChhbGxTZXJ2aWNlVHlwZXMubGVuZ3RoID4gc2VydmljZVR5cGVzRnJvbUNvbnRleHQubGVuZ3RoKQotICAgIHsKLSAgICAgIFN0cmluZ1tdIHNlcnZpY2VUeXBlc0FycmF5ID0gbmV3IFN0cmluZ1tzZXJ2aWNlVHlwZXNfLnNpemUoKV07Ci0gICAgICBzZXJ2aWNlVHlwZXNfLmNvcHlJbnRvKHNlcnZpY2VUeXBlc0FycmF5KTsKLSAgICAgIGNvbnRleHQuc2V0U2VydmljZVR5cGVzKHNlcnZpY2VUeXBlc0FycmF5KTsKLSAgICB9Ci0gICAgLy8gcmVmcmVzaCB2aWV3ZXIKLSAgICBzZXJ2aWNlVHlwZVZpZXdlcl8ucmVmcmVzaCgpOwotCi0gICAgCi0gICAgLy9Jbml0aWFsaXplIGNsaWVudCBwcm9qZWN0IHR5cGVzLgotICAgIFN0cmluZ1tdIGNsaWVudFR5cGVzRnJvbUNvbnRleHQgPSBjb250ZXh0LmdldENsaWVudFR5cGVzKCk7Ci0gICAgU3RyaW5nW10gYWxsQ2xpZW50VHlwZXMgPSBQcm9qZWN0VG9wb2xvZ3lEZWZhdWx0cy5nZXRDbGllbnRUeXBlcygpOwotICAgIHNldFZlY3RvckNvbnRlbnRzRnJvbVR3b0FycmF5cyhjbGllbnRUeXBlc0Zyb21Db250ZXh0LCBhbGxDbGllbnRUeXBlcywgY2xpZW50VHlwZXNfKTsKLSAgICBpZiAoYWxsQ2xpZW50VHlwZXMubGVuZ3RoID4gY2xpZW50VHlwZXNGcm9tQ29udGV4dC5sZW5ndGgpCi0gICAgewotICAgICAgU3RyaW5nW10gY2xpZW50VHlwZXNBcnJheSA9IG5ldyBTdHJpbmdbY2xpZW50VHlwZXNfLnNpemUoKV07Ci0gICAgICBjbGllbnRUeXBlc18uY29weUludG8oY2xpZW50VHlwZXNBcnJheSk7Ci0gICAgICBjb250ZXh0LnNldENsaWVudFR5cGVzKGNsaWVudFR5cGVzQXJyYXkpOwotICAgIH0KLSAgICAKLSAgICAvLyByZWZyZXNoIHZpZXdlcgotICAgIGNsaWVudFR5cGVWaWV3ZXJfLnJlZnJlc2goKTsKLSAgICAKLSAgICB0d29FQVJfLnNldFNlbGVjdGlvbihjb250ZXh0LmlzVXNlVHdvRUFScygpKTsKLSAgIH0KLQotICAvKioKLSAgICogU3RvcmVzIHRoZSB2YWx1ZXMgb2YgdGhlIGNvbnRyb2xzIGJhY2sgdG8gdGhlIHByZWZlcmVuY2UgaGVscGVyLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHN0b3JlVmFsdWVzKCkKLSAgewotICAgIFByb2plY3RUb3BvbG9neUNvbnRleHQgY29udGV4dCA9IFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UHJvamVjdFRvcG9sb2d5Q29udGV4dCgpOwotICAgIFN0cmluZ1tdIHNlcnZpY2VUeXBlc0FycmF5ID0gbmV3IFN0cmluZ1tzZXJ2aWNlVHlwZXNfLnNpemUoKV07Ci0gICAgc2VydmljZVR5cGVzXy5jb3B5SW50byhzZXJ2aWNlVHlwZXNBcnJheSk7Ci0gICAgY29udGV4dC5zZXRTZXJ2aWNlVHlwZXMoc2VydmljZVR5cGVzQXJyYXkpOyAgICAKLSAgICBTdHJpbmdbXSB0eXBlcyA9IG5ldyBTdHJpbmdbY2xpZW50VHlwZXNfLnNpemUoKV07Ci0gICAgY2xpZW50VHlwZXNfLmNvcHlJbnRvKHR5cGVzKTsKLSAgICBjb250ZXh0LnNldENsaWVudFR5cGVzKHR5cGVzKTsKLSAgICBjb250ZXh0LnNldFVzZVR3b0VBUnModHdvRUFSXy5nZXRTZWxlY3Rpb24oKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAgewotICB9Ci0KLSAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAgewotICAgIGlmIChlLndpZGdldCA9PSBzZXJ2aWNlTW92ZVVwXyB8fCBlLndpZGdldCA9PSBzZXJ2aWNlTW92ZURvd25fKQotICAgIHsKLSAgICAgIGludCBpbmRleCA9IHNlcnZpY2VUeXBlVmlld2VyXy5nZXRUYWJsZSgpLmdldFNlbGVjdGlvbkluZGV4KCk7Ci0gICAgICBpZiAoaW5kZXggIT0gLTEpCi0gICAgICB7Ci0gICAgICAgIGlmIChlLndpZGdldCA9PSBzZXJ2aWNlTW92ZVVwXyAmJiBpbmRleCA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICBPYmplY3Qgb2JqZWN0ID0gc2VydmljZVR5cGVzXy5yZW1vdmUoaW5kZXgpOwotICAgICAgICAgIHNlcnZpY2VUeXBlc18uaW5zZXJ0RWxlbWVudEF0KG9iamVjdCwgaW5kZXgtMSk7Ci0gICAgICAgICAgc2VydmljZVR5cGVWaWV3ZXJfLnJlZnJlc2goKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChlLndpZGdldCA9PSBzZXJ2aWNlTW92ZURvd25fICYmIGluZGV4IDwgc2VydmljZVR5cGVzXy5zaXplKCktMSkKLSAgICAgICAgewotICAgICAgICAgIE9iamVjdCBvYmplY3QgPSBzZXJ2aWNlVHlwZXNfLnJlbW92ZShpbmRleCk7Ci0gICAgICAgICAgc2VydmljZVR5cGVzXy5pbnNlcnRFbGVtZW50QXQob2JqZWN0LCBpbmRleCsxKTsKLSAgICAgICAgICBzZXJ2aWNlVHlwZVZpZXdlcl8ucmVmcmVzaCgpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKGUud2lkZ2V0ID09IG1vdmVVcF8gfHwgZS53aWRnZXQgPT0gbW92ZURvd25fKQotICAgIHsKLSAgICAgIGludCBpbmRleCA9IGNsaWVudFR5cGVWaWV3ZXJfLmdldFRhYmxlKCkuZ2V0U2VsZWN0aW9uSW5kZXgoKTsKLSAgICAgIGlmIChpbmRleCAhPSAtMSkKLSAgICAgIHsKLSAgICAgICAgaWYgKGUud2lkZ2V0ID09IG1vdmVVcF8gJiYgaW5kZXggPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgT2JqZWN0IG9iamVjdCA9IGNsaWVudFR5cGVzXy5yZW1vdmUoaW5kZXgpOwotICAgICAgICAgIGNsaWVudFR5cGVzXy5pbnNlcnRFbGVtZW50QXQob2JqZWN0LCBpbmRleCAtIDEpOwotICAgICAgICAgIGNsaWVudFR5cGVWaWV3ZXJfLnJlZnJlc2goKTsKLSAgICAgICAgfSBlbHNlIGlmIChlLndpZGdldCA9PSBtb3ZlRG93bl8gJiYgaW5kZXggPCBjbGllbnRUeXBlc18uc2l6ZSgpIC0gMSkKLSAgICAgICAgewotICAgICAgICAgIE9iamVjdCBvYmplY3QgPSBjbGllbnRUeXBlc18ucmVtb3ZlKGluZGV4KTsKLSAgICAgICAgICBjbGllbnRUeXBlc18uaW5zZXJ0RWxlbWVudEF0KG9iamVjdCwgaW5kZXggKyAxKTsKLSAgICAgICAgICBjbGllbnRUeXBlVmlld2VyXy5yZWZyZXNoKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGNsYXNzIENsaWVudFR5cGVDb250ZW50UHJvdmlkZXIgaW1wbGVtZW50cyBJU3RydWN0dXJlZENvbnRlbnRQcm92aWRlcgotICB7Ci0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyI2dldEVsZW1lbnRzKE9iamVjdCkKLSAgICAgKi8KLSAgICBwdWJsaWMgT2JqZWN0W10gZ2V0RWxlbWVudHMoT2JqZWN0IHZhbHVlKSAKLSAgICB7Ci0gICAgICByZXR1cm4gKChWZWN0b3IpdmFsdWUpLnRvQXJyYXkobmV3IFN0cmluZ1swXSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklDb250ZW50UHJvdmlkZXIjZGlzcG9zZSgpCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgZGlzcG9zZSgpIAotICAgIHsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUNvbnRlbnRQcm92aWRlciNpbnB1dENoYW5nZWQoVmlld2VyLCBPYmplY3QsIE9iamVjdCkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBpbnB1dENoYW5nZWQoVmlld2VyIGFyZzAsIE9iamVjdCBhcmcxLCBPYmplY3QgYXJnMikgCi0gICAgewotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgY2xhc3MgQ2xpZW50VHlwZUxhYmVsUHJvdmlkZXIgZXh0ZW5kcyBMYWJlbFByb3ZpZGVyCi0gIHsKLSAgICBwdWJsaWMgQ2xpZW50VHlwZUxhYmVsUHJvdmlkZXIoKQotICAgIHsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlciNnZXRJbWFnZShPYmplY3QpCi0gICAgKi8KLSAgICBwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoT2JqZWN0IGFyZzApIAotICAgIHsgCi0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXIjZ2V0VGV4dChPYmplY3QpCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCB2YWx1ZSkgCi0gICAgewotICAgICAgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGUgdGVtcGxhdGUgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5nZXRUZW1wbGF0ZSggKFN0cmluZyl2YWx1ZSApOwotICAgICAgCi0gICAgICByZXR1cm4gdGVtcGxhdGUuZ2V0TGFiZWwoKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvcHJlZmVyZW5jZXMvU2VydmVyUnVudGltZVByZWZlcmVuY2VQYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3ByZWZlcmVuY2VzL1NlcnZlclJ1bnRpbWVQcmVmZXJlbmNlUGFnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTlmNTM0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvcHJlZmVyZW5jZXMvU2VydmVyUnVudGltZVByZWZlcmVuY2VQYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNzI4CSAgMTUxNzIzIG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbgotICogMjAwNzAxMDkgICAxMzA5NjUga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5wcmVmZXJlbmNlczsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuUHJlZmVyZW5jZVBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucGx1Z2luLldlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LldlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5jb21tb24uVUlVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2g7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLnNlbGVjdGlvbi5TZWxlY3Rpb25MaXN0Q2hvaWNlczsKLQotCi0vKioKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBTZXJ2ZXJSdW50aW1lUHJlZmVyZW5jZVBhZ2UgZXh0ZW5kcyBQcmVmZXJlbmNlUGFnZSBpbXBsZW1lbnRzIElXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZSwgTGlzdGVuZXIgCi17Ci0JcHJpdmF0ZSBTdHJpbmcgcGx1Z2luSWRfPSAib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpIjsKLQkKLQkvKiBDT05URVhUX0lEIFNSUEYwMDAxIGZvciBzZXJ2ZXIgcHJlZmVyZW5jZSBvbiB0aGUgc2VydmVyIHJ1bnRpbWUgcHJlZmVyZW5jZSBwYWdlICovCi0JcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9TUlBGX1NFUlZFUl9QUkVGID0gcGx1Z2luSWRfICsgIi5TUlBGMDAwMSI7Ci0JcHJpdmF0ZSBDb21ibyBzZXJ2ZXJfOwotCi0JLyogQ09OVEVYVF9JRCBTUlBGMDAwMiBmb3IgcnVudGltZSBwcmVmZXJlbmNlIG9uIHRoZSBzZXJ2ZXIgcnVudGltZSBwcmVmZXJlbmNlIHBhZ2UgKi8KLQlwcml2YXRlIFN0cmluZyBJTkZPUE9QX1NSUEZfUlVOVElNRV9QUkVGID0gcGx1Z2luSWRfICsgIi5TUlBGMDAwMiI7Ci0JcHJpdmF0ZSBDb21ibyBydW50aW1lXzsJCi0KLQkvKiBDT05URVhUX0lEIFNSUEYwMDAzIGZvciBKMkVFIHZlcnNpb24gcHJlZmVyZW5jZSBvbiB0aGUgc2VydmVyIHJ1bnRpbWUgcHJlZmVyZW5jZSBwYWdlICovCi0gICAgLyoKLQlwcml2YXRlIFN0cmluZyBJTkZPUE9QX1NSUEZfSjJFRV9QUkVGID0gcGx1Z2luSWRfICsgIi5TUlBGMDAwMyI7Ci0JcHJpdmF0ZSBDb21ibyBqMmVlVmVyc2lvbl87Ci0gICAgKi8KLQkKLQlTZWxlY3Rpb25MaXN0Q2hvaWNlcyBzZXJ2ZXJUb1J1bnRpbWVUb0oyRUVfOwotCQotCXB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaCB3b3JrYmVuY2gpICAgeyB9CQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuUHJlZmVyZW5jZVBhZ2UjY3JlYXRlQ29udGVudHMob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlKQotCSAqLwotCXByb3RlY3RlZCBDb250cm9sIGNyZWF0ZUNvbnRlbnRzKENvbXBvc2l0ZSBwYXJlbnQpIAotCXsKLQkgIFVJVXRpbHMgdWlVdGlscyA9IG5ldyBVSVV0aWxzKHBsdWdpbklkXyk7Ci0JICAKLQkgIENvbXBvc2l0ZSBwYWdlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLQkgIEdyaWRMYXlvdXQgZ2wgPSBuZXcgR3JpZExheW91dCgpOwotCSAgZ2wubnVtQ29sdW1ucyA9IDI7Ci0JICBwYWdlLnNldExheW91dChnbCk7Ci0JICBHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5WRVJUSUNBTF9BTElHTl9GSUxMIHwgR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMKTsKLQkgIHBhZ2Uuc2V0TGF5b3V0RGF0YShnZCk7Ci0JICAKLQkgIHNlcnZlcl8gPSB1aVV0aWxzLmNyZWF0ZUNvbWJvKHBhZ2UsQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1NFUlZFUlNfTElTVCwKLQkJCSAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfU1JQRl9DT01CT19TRVJWRVIsCi0JCQkJCQkJCQlJTkZPUE9QX1NSUEZfU0VSVkVSX1BSRUYsCi0JCQkJCQkJCQlTV1QuU0lOR0xFfFNXVC5CT1JERVJ8U1dULlJFQURfT05MWSk7Ci0JICAKLQkgIHJ1bnRpbWVfID0gdWlVdGlscy5jcmVhdGVDb21ibyhwYWdlLENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9SVU5USU1FU19MSVNULAotCQkJICBDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9TUlBGX0NPTUJPX1JVTlRJTUUsCi0JCQkJCQkJCQkgSU5GT1BPUF9TUlBGX1JVTlRJTUVfUFJFRiwKLQkJCQkJCQkJCSBTV1QuU0lOR0xFfFNXVC5CT1JERVJ8U1dULlJFQURfT05MWSk7Ci0KLS8qCi0JICBqMmVlVmVyc2lvbl8gPSB1aVV0aWxzLmNyZWF0ZUNvbWJvKHBhZ2UsQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX0oyRUVfVkVSU0lPTiwKLQkJCSAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfU1JQRl9DT01CT19KMkVFLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkZPUE9QX1NSUEZfSjJFRV9QUkVGLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTV1QuU0lOR0xFfFNXVC5CT1JERVJ8U1dULlJFQURfT05MWSk7CSAgCi0qLwotCi0JICBpbml0aWFsaXplVmFsdWVzKCk7Ci0JICBzdGFydExpc3RlbmluZygpOwotCSAgYXBwbHlEaWFsb2dGb250KHBhZ2UpOwotCSAgcmV0dXJuIHBhZ2U7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGluaXRpYWxpemVWYWx1ZXMoKQotCXsKLQkJUGVyc2lzdGVudFNlcnZlclJ1bnRpbWVDb250ZXh0IGNvbnRleHQgPSBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFNlcnZlclJ1bnRpbWVDb250ZXh0KCk7Ci0gICAgICAgIHNlcnZlclRvUnVudGltZVRvSjJFRV8gPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTZXJ2ZXJUb1J1bnRpbWVUb0oyRUUoKTsKLQotCi0JCXNldFNlcnZlckl0ZW1zKHNlcnZlclRvUnVudGltZVRvSjJFRV8uZ2V0TGlzdCgpLmdldExpc3QoKSk7Ci0JCVN0cmluZyBkZWZhdWx0U2VydmVyVGV4dCA9IGNvbnRleHQuZ2V0U2VydmVyRmFjdG9yeUlkKCk7Ci0JCXNlcnZlclRvUnVudGltZVRvSjJFRV8uZ2V0TGlzdCgpLnNldFNlbGVjdGlvblZhbHVlKGRlZmF1bHRTZXJ2ZXJUZXh0KTsKLQkJc2V0U2VydmVyU2VsZWN0aW9uKGRlZmF1bHRTZXJ2ZXJUZXh0KTsKLQkJCi0JCXNldFJ1bnRpbWVJdGVtcyhzZXJ2ZXJUb1J1bnRpbWVUb0oyRUVfLmdldENob2ljZSgpLmdldExpc3QoKS5nZXRMaXN0KCkpOwotCQlTdHJpbmcgZGVmYXVsdFJ1bnRpbWVUZXh0ID0gY29udGV4dC5nZXRSdW50aW1lSWQoKTsKLQkJc2VydmVyVG9SdW50aW1lVG9KMkVFXy5nZXRDaG9pY2UoKS5nZXRMaXN0KCkuc2V0U2VsZWN0aW9uVmFsdWUoZGVmYXVsdFJ1bnRpbWVUZXh0KTsKLQkJc2V0UnVudGltZVNlbGVjdGlvbihkZWZhdWx0UnVudGltZVRleHQpOwkJCQotCX0KLQkKLQlwdWJsaWMgdm9pZCBoYW5kbGVFdmVudChFdmVudCBldmVudCkKLQl7Ci0JCWlmIChzZXJ2ZXJfID09IGV2ZW50LndpZGdldCkKLQkJewotCQkJaGFuZGxlU2VydmVyU2VsZWN0ZWQoKTsKLQkJfQotCQllbHNlIGlmIChydW50aW1lXyA9PSBldmVudC53aWRnZXQpCi0JCXsKLQkJCWhhbmRsZVJ1bnRpbWVTZWxlY3RlZCgpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGhhbmRsZVNlcnZlclNlbGVjdGVkKCkKLQl7Ci0JCXN0b3BMaXN0ZW5pbmcoKTsKLQkJCi0JCVN0cmluZyBzZWxlY3RlZFRleHQgPSBnZXRTZXJ2ZXJTZWxlY3Rpb24oKTsKLQkJc2VydmVyVG9SdW50aW1lVG9KMkVFXy5nZXRMaXN0KCkuc2V0U2VsZWN0aW9uVmFsdWUoc2VsZWN0ZWRUZXh0KTsKLQkJCi0JCS8vIFRPRE8gKHNlZSBidWcgMTE2MDI1KSAtIFNpbmNlIHRoZSBzZXJ2ZXIgYW5kIHJ1bnRpbWUgc2V0IGluIHNlcnZlclRvUnVudGltZVRvSjJFRSBpcyBqdXN0IHRoZSBsaXN0IG9mIAotCQkvLyBhbGwgc2VydmVycyBhbmQgYWxsIHJ1bnRpbWUgKGkuZS4gbm8gdmFsaWRhdGlvbiBjaGVja2luZyBpcyBiZWluZyBkb25lKSwgbm8gbmVlZCB0byB1cGRhdGUgdGhlIHJ1bnRpbWUsCi0JCS8vIGp1c3Qga2VlcCB0aGUgb3JpZ2luYWwgdmFsdWUuCi0JCS8vVXBkYXRlIHRoZSBydW50aW1lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCQlzZXRSdW50aW1lSXRlbXMoc2VydmVyVG9SdW50aW1lVG9KMkVFXy5nZXRDaG9pY2UoKS5nZXRMaXN0KCkuZ2V0TGlzdCgpKTsKLS8vCQlpZiAoc2VydmVyVG9SdW50aW1lVG9KMkVFXy5nZXRDaG9pY2UoKS5nZXRMaXN0KCkuZ2V0TGlzdCgpLmxlbmd0aCA+IDApCi0vLwkJICBzZXJ2ZXJUb1J1bnRpbWVUb0oyRUVfLmdldENob2ljZSgpLmdldExpc3QoKS5zZXRJbmRleCgwKTsKLS8vCQkKLS8vCQlTdHJpbmcgbmV3UnVudGltZVRleHQgPSBzZXJ2ZXJUb1J1bnRpbWVUb0oyRUVfLmdldENob2ljZSgpLmdldExpc3QoKS5nZXRTZWxlY3Rpb24oKTsKLS8vCQlpZiAobmV3UnVudGltZVRleHQhPW51bGwgJiYgbmV3UnVudGltZVRleHQubGVuZ3RoKCk+MCkKLS8vCQkJc2V0UnVudGltZVNlbGVjdGlvbihuZXdSdW50aW1lVGV4dCk7CQkKLQkJCi0JCXN0YXJ0TGlzdGVuaW5nKCk7Ci0JfQotCQotCXByaXZhdGUgdm9pZCBoYW5kbGVSdW50aW1lU2VsZWN0ZWQoKQotCXsKLQkJc3RvcExpc3RlbmluZygpOwotCQkKLQkJU3RyaW5nIHNlbGVjdGVkVGV4dCA9IGdldFJ1bnRpbWVTZWxlY3Rpb24oKTsKLQkJc2VydmVyVG9SdW50aW1lVG9KMkVFXy5nZXRDaG9pY2UoKS5nZXRMaXN0KCkuc2V0U2VsZWN0aW9uVmFsdWUoc2VsZWN0ZWRUZXh0KTsJCQkJCQkKLQkJc3RhcnRMaXN0ZW5pbmcoKTsJCQotCX0KLQkKLQotICAgIC8qKgotCSAqIERvZXMgYW55dGhpbmcgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIGRlZmF1bHQgYnV0dG9uIGhhcyBiZWVuIHByZXNzZWQuCi0JKi8KLQlwcm90ZWN0ZWQgdm9pZCBwZXJmb3JtRGVmYXVsdHMoKQotCXsKLQkgIHN1cGVyLnBlcmZvcm1EZWZhdWx0cygpOwotCSAgc2V0VG9EZWZhdWx0cygpOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgc2V0VG9EZWZhdWx0cygpCi0JewotCQlQZXJzaXN0ZW50U2VydmVyUnVudGltZUNvbnRleHQgY29udGV4dCA9IFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0U2VydmVyUnVudGltZUNvbnRleHQoKTsKLQotCQlTdHJpbmcgZGVmYXVsdFNlcnZlclRleHQgPSBjb250ZXh0LmdldERlZmF1bHRTZXJ2ZXJGYWN0b3J5SWQoKTsKLQkJc2VydmVyVG9SdW50aW1lVG9KMkVFXy5nZXRMaXN0KCkuc2V0U2VsZWN0aW9uVmFsdWUoZGVmYXVsdFNlcnZlclRleHQpOwotCQlzZXRTZXJ2ZXJTZWxlY3Rpb24oZGVmYXVsdFNlcnZlclRleHQpOwotCQkKLQkJc2V0UnVudGltZUl0ZW1zKHNlcnZlclRvUnVudGltZVRvSjJFRV8uZ2V0Q2hvaWNlKCkuZ2V0TGlzdCgpLmdldExpc3QoKSk7Ci0JCVN0cmluZyBkZWZhdWx0UnVudGltZVRleHQgPSBjb250ZXh0LmdldERlZmF1bHRSdW50aW1lSWQoKTsKLQkJc2VydmVyVG9SdW50aW1lVG9KMkVFXy5nZXRDaG9pY2UoKS5nZXRMaXN0KCkuc2V0U2VsZWN0aW9uVmFsdWUoZGVmYXVsdFJ1bnRpbWVUZXh0KTsKLQkJc2V0UnVudGltZVNlbGVjdGlvbihkZWZhdWx0UnVudGltZVRleHQpOwotCX0KLQotCS8qKgotCSAqIERvIGFueXRoaW5nIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBPSyBidXR0b24gaGFzIGJlZW4gcHJlc3NlZC4KLQkgKiAgQHJldHVybiB3aGV0aGVyIGl0IGlzIG9rYXkgdG8gY2xvc2UgdGhlIHByZWZlcmVuY2UgcGFnZQotCSAqLwotCXB1YmxpYyBib29sZWFuIHBlcmZvcm1PaygpCi0JewotCSAgc3RvcmVWYWx1ZXMoKTsKLQkgIHJldHVybiB0cnVlOwotCX0KLQotCXByaXZhdGUgdm9pZCBzdG9yZVZhbHVlcygpCi0JewotICAgICAgUGVyc2lzdGVudFNlcnZlclJ1bnRpbWVDb250ZXh0IGNvbnRleHQgPSBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFNlcnZlclJ1bnRpbWVDb250ZXh0KCk7Ci0gICAgICBjb250ZXh0LnNldFNlcnZlckZhY3RvcnlJZChnZXRTZXJ2ZXJTZWxlY3Rpb24oKSk7Ci0gICAgICBjb250ZXh0LnNldFJ1bnRpbWVJZChnZXRSdW50aW1lU2VsZWN0aW9uKCkpOyAgICAgIAotCX0KLQkKLQlwcm90ZWN0ZWQgdm9pZCBwZXJmb3JtQXBwbHkoKQotCXsKLQkgIHBlcmZvcm1PaygpOwotCX0KLQkKLSAgCQotCXByaXZhdGUgdm9pZCBzdGFydExpc3RlbmluZygpCi0JewotCSAgc2VydmVyXy5hZGRMaXN0ZW5lcihTV1QuU2VsZWN0aW9uLHRoaXMpOwotCSAgcnVudGltZV8uYWRkTGlzdGVuZXIoU1dULlNlbGVjdGlvbix0aGlzKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgc3RvcExpc3RlbmluZygpCi0JewotCSAgc2VydmVyXy5yZW1vdmVMaXN0ZW5lcihTV1QuU2VsZWN0aW9uLCB0aGlzKTsKLQkgIHJ1bnRpbWVfLnJlbW92ZUxpc3RlbmVyKFNXVC5TZWxlY3Rpb24sIHRoaXMpOwotCX0KLQotCXByaXZhdGUgdm9pZCBzZXRTZXJ2ZXJJdGVtcyhTdHJpbmdbXSBmYWN0b3J5SWRzKQotCXsKLQkgIAotCSAgaWYgKGZhY3RvcnlJZHMgIT0gbnVsbCkKLQkgIHsKLQkgICAgQXJyYXlMaXN0IHNlcnZlckxhYmVsc0xpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCSAgZm9yIChpbnQgaT0wO2k8ZmFjdG9yeUlkcy5sZW5ndGg7aSsrKQotCQkgIHsKLQkJCSAgLy9TdHJpbmcgdGhpc1NlcnZlckxhYmVsID0gV2ViU2VydmljZVNlcnZlclJ1bnRpbWVUeXBlUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKS5nZXRTZXJ2ZXJMYWJlbChmYWN0b3J5SWRzW2ldKTsKLSAgICAgICAgU3RyaW5nIHRoaXNTZXJ2ZXJMYWJlbCA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNlcnZlckxhYmVsQnlJZChmYWN0b3J5SWRzW2ldKTsKLQkJCSAgaWYgKHRoaXNTZXJ2ZXJMYWJlbCE9bnVsbCAmJiB0aGlzU2VydmVyTGFiZWwubGVuZ3RoKCk+MCkKLQkJCSAgewotCQkJICAgIHNlcnZlckxhYmVsc0xpc3QuYWRkKHRoaXNTZXJ2ZXJMYWJlbCk7Ci0JCQkgIH0KLQkJCQotCQkgIH0KLQkJICBTdHJpbmdbXSBzZXJ2ZXJMYWJlbHMgPSBjb252ZXJ0VG9TdHJpbmdBcnJheShzZXJ2ZXJMYWJlbHNMaXN0LnRvQXJyYXkoKSk7IAotCQkgIHNlcnZlcl8uc2V0SXRlbXMoc2VydmVyTGFiZWxzKTsKLQkgIH0KLQkJCi0JfQotCQotCXByaXZhdGUgdm9pZCBzZXRSdW50aW1lSXRlbXMoU3RyaW5nW10gaWRzKQotCXsKLQkgIGlmIChpZHMgIT0gbnVsbCkKLQkgIHsKLQkJU3RyaW5nW10gcnVudGltZUxhYmVscyA9IG5ldyBTdHJpbmdbaWRzLmxlbmd0aF07Ci0JCWZvciAoaW50IGk9MDtpPGlkcy5sZW5ndGg7aSsrKQotCQl7Ci0JCSAgLy9ydW50aW1lTGFiZWxzW2ldID0gV2ViU2VydmljZVNlcnZlclJ1bnRpbWVUeXBlUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKS5nZXRSdW50aW1lTGFiZWwoaWRzW2ldKTsKLSAgICAgIHJ1bnRpbWVMYWJlbHNbaV0gPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRSdW50aW1lTGFiZWxCeUlkKGlkc1tpXSk7Ci0JCX0KLQotCQkvL3NvcnQgdGhlIGxhYmVscyAoYnVnIDE1MTcyMykKLQkJQXJyYXlzLnNvcnQocnVudGltZUxhYmVscyk7Ci0JCXJ1bnRpbWVfLnNldEl0ZW1zKHJ1bnRpbWVMYWJlbHMpOwotCSAgfQotCQkKLQl9Ci0JCi0gICAgLyoKLSAgICBwcml2YXRlIHZvaWQgc2V0SjJFRUl0ZW1zKFN0cmluZ1tdIHZlcnNpb25zKQotICAgIHsKLSAgICAgIGlmICh2ZXJzaW9ucyAhPSBudWxsKQotICAgICAgewotICAgICAgICBTdHJpbmdbXSBqMmVlTGFiZWxzID0gbmV3IFN0cmluZ1t2ZXJzaW9ucy5sZW5ndGhdOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZlcnNpb25zLmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIGxhYmVsID0gSjJFRVV0aWxzLmdldExhYmVsRnJvbUoyRUVWZXJzaW9uKHZlcnNpb25zW2ldKTsKLSAgICAgICAgICBpZiAobGFiZWwgIT0gbnVsbCAmJiBsYWJlbC5sZW5ndGgoKT4wKQotICAgICAgICAgICAgajJlZUxhYmVsc1tpXSA9IGxhYmVsOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGoyZWVMYWJlbHNbaV0gPSBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfTkE7Ci0gICAgICAgIH0KLSAgICAgICAgajJlZVZlcnNpb25fLnNldEl0ZW1zKGoyZWVMYWJlbHMpOwotICAgICAgICAKLSAgICAgICAgLy9EaXNhYmxlIHRoZSBjb21ibyBpZiBpdCBoYXMgbm8gaXRlbXMuCi0gICAgICAgIGlmIChqMmVlTGFiZWxzLmxlbmd0aCA+IDApCi0gICAgICAgICAgajJlZVZlcnNpb25fLnNldEVuYWJsZWQodHJ1ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBqMmVlVmVyc2lvbl8uc2V0RW5hYmxlZChmYWxzZSk7Ci0gICAgICB9Ci0gICAgICAgIAotICAgIH0KLSAgICAqLwotCQotCXByaXZhdGUgU3RyaW5nIGdldFNlcnZlclNlbGVjdGlvbigpCi0JewotCSAgU3RyaW5nIHNlcnZlckxhYmVsID0gc2VydmVyXy5nZXRUZXh0KCk7Ci0JICAvL3JldHVybiBXZWJTZXJ2aWNlU2VydmVyUnVudGltZVR5cGVSZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmdldFNlcnZlckZhY3RvcnlJZChzZXJ2ZXJMYWJlbCk7Ci0gICAgcmV0dXJuIFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNlcnZlckZhY3RvcnlJZChzZXJ2ZXJMYWJlbCk7Ci0JfQotCQotCXByaXZhdGUgU3RyaW5nIGdldFJ1bnRpbWVTZWxlY3Rpb24oKQotCXsKLSAgICAgIFN0cmluZyBydW50aW1lTGFiZWwgPSBydW50aW1lXy5nZXRUZXh0KCk7Ci0JICAvL3JldHVybiBXZWJTZXJ2aWNlU2VydmVyUnVudGltZVR5cGVSZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmdldFJ1bnRpbWVJZChydW50aW1lTGFiZWwpOwotICAgICAgcmV0dXJuIFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFJ1bnRpbWVJZChydW50aW1lTGFiZWwpOwotCX0KLQkKLSAgICAvKgotCXByaXZhdGUgU3RyaW5nIGdldEoyRUVTZWxlY3Rpb24oKQotCXsKLQkgIFN0cmluZyBqMmVlTGFiZWwgPSBqMmVlVmVyc2lvbl8uZ2V0VGV4dCgpOwotCSAgcmV0dXJuIEoyRUVVdGlscy5nZXRKMkVFVmVyc2lvbkZyb21MYWJlbChqMmVlTGFiZWwpOwkJCi0JfQotICAgICovCi0JCi0JcHJpdmF0ZSB2b2lkIHNldFNlcnZlclNlbGVjdGlvbihTdHJpbmcgZmFjdG9yeUlkKQotCXsKLQkJLy9TdHJpbmcgbGFiZWwgPSBXZWJTZXJ2aWNlU2VydmVyUnVudGltZVR5cGVSZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmdldFNlcnZlckxhYmVsKGZhY3RvcnlJZCk7Ci0gICAgU3RyaW5nIGxhYmVsID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2VydmVyTGFiZWxCeUlkKGZhY3RvcnlJZCk7Ci0JCXNldFNlbGVjdGlvbihzZXJ2ZXJfLGxhYmVsKTsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIHNldFJ1bnRpbWVTZWxlY3Rpb24oU3RyaW5nIGlkKQotCXsKLQkJLy9TdHJpbmcgbGFiZWwgPSBXZWJTZXJ2aWNlU2VydmVyUnVudGltZVR5cGVSZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmdldFJ1bnRpbWVMYWJlbChpZCk7Ci0gICAgU3RyaW5nIGxhYmVsID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0UnVudGltZUxhYmVsQnlJZChpZCk7Ci0JCXNldFNlbGVjdGlvbihydW50aW1lXyxsYWJlbCk7CQkKLQl9Ci0JCi0gICAgLyoKLQlwcml2YXRlIHZvaWQgc2V0SjJFRVNlbGVjdGlvbihTdHJpbmcgdmVyc2lvbikKLQl7Ci0JICBTdHJpbmcgbGFiZWwgPSBKMkVFVXRpbHMuZ2V0TGFiZWxGcm9tSjJFRVZlcnNpb24odmVyc2lvbik7Ci0gICAgICBzZXRTZWxlY3Rpb24oajJlZVZlcnNpb25fLCBsYWJlbCk7Ci0JfQotICAgICovCi0JCi0JcHJpdmF0ZSB2b2lkIHNldFNlbGVjdGlvbihDb21ibyBjb21ibywgU3RyaW5nIHMpCi0JewotCQlTdHJpbmdbXSBpdGVtcyA9IGNvbWJvLmdldEl0ZW1zKCk7Ci0JCWZvciAoaW50IGk9MDsgaTxpdGVtcy5sZW5ndGg7IGkrKykKLQkJewotCQkJaWYgKGl0ZW1zW2ldLmVxdWFscyhzKSkKLQkJCXsKLQkJCQljb21iby5zZWxlY3QoaSk7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0JfQotCQotCXByaXZhdGUgU3RyaW5nW10gY29udmVydFRvU3RyaW5nQXJyYXkoT2JqZWN0W10gYSkKLQl7Ci0JICBpZiAoYT09bnVsbCkgcmV0dXJuIG5ldyBTdHJpbmdbMF07Ci0JICAJCi0JICBpbnQgbGVuZ3RoID0gYS5sZW5ndGg7Ci0JICBTdHJpbmdbXSBzYSA9IG5ldyBTdHJpbmdbbGVuZ3RoXTsKLQkgIGZvciAoaW50IGk9MDsgaTxsZW5ndGg7IGkrKykKLQkgIHsKLQkgIAlPYmplY3Qgb2JqID0gYVtpXTsKLQkgIAlpZiAob2JqIGluc3RhbmNlb2YgU3RyaW5nKQotCSAgCXsKLQkgICAgICBzYVtpXSA9IChTdHJpbmcpb2JqOwotCSAgCX0KLQkgIH0KLQkgIHJldHVybiBzYTsKLQl9CQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9wcmVmZXJlbmNlcy9UcmFuc2llbnRQcm9qZWN0VG9wb2xvZ3lDb250ZXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3ByZWZlcmVuY2VzL1RyYW5zaWVudFByb2plY3RUb3BvbG9neUNvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTEwMjczMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3ByZWZlcmVuY2VzL1RyYW5zaWVudFByb2plY3RUb3BvbG9neUNvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIyNyAgIDEyNDM5MiByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5wcmVmZXJlbmNlczsKLQotCi1wdWJsaWMgY2xhc3MgVHJhbnNpZW50UHJvamVjdFRvcG9sb2d5Q29udGV4dCBpbXBsZW1lbnRzIFByb2plY3RUb3BvbG9neUNvbnRleHQKLXsKLSBwcml2YXRlIFN0cmluZ1tdIHNlcnZpY2VUeXBlczsKLSBwcml2YXRlIFN0cmluZ1tdIGRlZmF1bHRTZXJ2aWNlVHlwZXM7Ci0gCi0gcHJpdmF0ZSBTdHJpbmdbXSBjbGllbnRUeXBlczsKLSBwcml2YXRlIFN0cmluZ1tdIGRlZmF1bHRDbGllbnRUeXBlczsKLSAKLSBwcml2YXRlIGJvb2xlYW4gdHdvRUFSczsKLSAKLSBwdWJsaWMgVHJhbnNpZW50UHJvamVjdFRvcG9sb2d5Q29udGV4dCAoKSB7fQotCi0gcHVibGljIHZvaWQgc2V0U2VydmljZVR5cGVzKFN0cmluZ1tdIHNlcnZpY2VUeXBlcykKLSB7Ci0gICB0aGlzLnNlcnZpY2VUeXBlcyA9IHNlcnZpY2VUeXBlczsKLSB9Ci0gcHVibGljIFN0cmluZ1tdIGdldFNlcnZpY2VUeXBlcygpCi0gewotICAgcmV0dXJuIHNlcnZpY2VUeXBlczsKLSB9Ci0gCi0gcHVibGljIHZvaWQgc2V0Q2xpZW50VHlwZXMoU3RyaW5nW10gY2xpZW50VHlwZXMpCi0gewotICAgdGhpcy5jbGllbnRUeXBlcyA9IGNsaWVudFR5cGVzOwotIH0KLSBwdWJsaWMgU3RyaW5nW10gZ2V0Q2xpZW50VHlwZXMoKQotIHsKLSAgIHJldHVybiBjbGllbnRUeXBlczsKLSB9Ci0KLSBwdWJsaWMgdm9pZCBzZXRVc2VUd29FQVJzKGJvb2xlYW4gdXNlKQotIHsKLSAgIHRoaXMudHdvRUFScyA9IHVzZTsKLSB9Ci0gcHVibGljIGJvb2xlYW4gaXNVc2VUd29FQVJzKCkKLSB7Ci0gICByZXR1cm4gdHdvRUFSczsKLSB9Ci0KLSBwdWJsaWMgUHJvamVjdFRvcG9sb2d5Q29udGV4dCBjb3B5KCkgewotIAlUcmFuc2llbnRQcm9qZWN0VG9wb2xvZ3lDb250ZXh0IGNvbnRleHQgPSBuZXcgVHJhbnNpZW50UHJvamVjdFRvcG9sb2d5Q29udGV4dCgpOwotICAgIGNvbnRleHQuc2V0U2VydmljZVR5cGVzKGdldFNlcnZpY2VUeXBlcygpKTsKLSAgICBjb250ZXh0LnNldERlZmF1bHRTZXJ2aWNlVHlwZXMoZ2V0RGVmYXVsdFNlcnZpY2VUeXBlcygpKTsKLQljb250ZXh0LnNldENsaWVudFR5cGVzKGdldENsaWVudFR5cGVzKCkpOwotICAgIGNvbnRleHQuc2V0RGVmYXVsdENsaWVudFR5cGVzKGdldERlZmF1bHRDbGllbnRUeXBlcygpKTsKLQljb250ZXh0LnNldFVzZVR3b0VBUnMoaXNVc2VUd29FQVJzKCkpOwotCXJldHVybiBjb250ZXh0OwotIH0KLQotIAotcHVibGljIHZvaWQgc2V0RGVmYXVsdFNlcnZpY2VUeXBlcyhTdHJpbmdbXSBkZWZhdWx0U2VydmljZVR5cGVzKQotewotICB0aGlzLmRlZmF1bHRTZXJ2aWNlVHlwZXMgPSBkZWZhdWx0U2VydmljZVR5cGVzOwotfQotCi1wdWJsaWMgU3RyaW5nW10gZ2V0RGVmYXVsdFNlcnZpY2VUeXBlcygpCi17Ci0gIHJldHVybiBkZWZhdWx0U2VydmljZVR5cGVzOwotCi19Ci0KLQotcHVibGljIHZvaWQgc2V0RGVmYXVsdENsaWVudFR5cGVzKFN0cmluZ1tdIGRlZmF1bHRDbGllbnRUeXBlcykKLXsKLSAgdGhpcy5kZWZhdWx0Q2xpZW50VHlwZXMgPSBkZWZhdWx0Q2xpZW50VHlwZXM7Ci19Ci0KLXB1YmxpYyBTdHJpbmdbXSBnZXREZWZhdWx0Q2xpZW50VHlwZXMoKQotewotICByZXR1cm4gZGVmYXVsdENsaWVudFR5cGVzOwotCi19Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3NlbGVjdGlvbi9TZWxlY3Rpb25UcmFuc2Zvcm1lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9zZWxlY3Rpb24vU2VsZWN0aW9uVHJhbnNmb3JtZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM5N2YyYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3NlbGVjdGlvbi9TZWxlY3Rpb25UcmFuc2Zvcm1lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnNlbGVjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuVHJhbnNmb3JtZXI7Ci0KLXB1YmxpYyBjbGFzcyBTZWxlY3Rpb25UcmFuc2Zvcm1lciBpbXBsZW1lbnRzIFRyYW5zZm9ybWVyIAotewotICBwdWJsaWMgT2JqZWN0IHRyYW5zZm9ybShPYmplY3QgdmFsdWUpIAotICB7Ci0JSVN0cnVjdHVyZWRTZWxlY3Rpb24gaW5TZWxlY3Rpb24gID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXZhbHVlOwotCVNlbGVjdGlvbiAgICAgICAgICAgIG91dFNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb24oKTsKLQkKLQlpZiAoaW5TZWxlY3Rpb24gIT0gbnVsbCkKLQl7Ci0JCW91dFNlbGVjdGlvbi5zZXRTZWxlY3Rpb24oIGluU2VsZWN0aW9uLnRvQXJyYXkoKSApOwkKLQl9Ci0JCi0JcmV0dXJuIG91dFNlbGVjdGlvbjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9zZXJ2ZXIvU3RhcnRDbGllbnRXaWRnZXRDb250cmlidXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9zZXJ2ZXIvU3RhcnRDbGllbnRXaWRnZXRDb250cmlidXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTVhNzZkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvc2VydmVyL1N0YXJ0Q2xpZW50V2lkZ2V0Q29udHJpYnV0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuc2VydmVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5JTmFtZWRXaWRnZXRDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci0KLXB1YmxpYyBjbGFzcyBTdGFydENsaWVudFdpZGdldENvbnRyaWJ1dG9yIGltcGxlbWVudHMgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3IgCi17Ci0gIHByaXZhdGUgSVNlcnZlciAgICAgIHNlcnZlcl87Ci0JICAKLSAgcHVibGljIFN0YXJ0Q2xpZW50V2lkZ2V0Q29udHJpYnV0b3IoIElTZXJ2ZXIgc2VydmVyICkKLSAgewotCXNlcnZlcl8gPSBzZXJ2ZXI7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSAKLSAgewotCXJldHVybiBDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9ERVNDX1dTX1NUQVJUX1NFUlZFUjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIAotICB7Ci0JcmV0dXJuICIiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRUaXRsZSgpIAotICB7Ci0JcmV0dXJuIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX1RJVExFX1dTX1NUQVJUX1NFUlZFUjsKLSAgfQotCi0gIHB1YmxpYyBXaWRnZXRDb250cmlidXRvckZhY3RvcnkgZ2V0V2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5KCkgCi0gIHsKLQlyZXR1cm4gbmV3IFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSgpCi0JICAgICAgIHsKLQkJCSBwdWJsaWMgV2lkZ2V0Q29udHJpYnV0b3IgY3JlYXRlKCkgCi0JCQkgewotCQkJCXJldHVybiBuZXcgU3RhcnRTZXJ2ZXJXaWRnZXQoIHNlcnZlcl8gKTsKLSAJCQkgfQotCSAgICAgICB9OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3NlcnZlci9TdGFydENsaWVudFdpZGdldEZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvc2VydmVyL1N0YXJ0Q2xpZW50V2lkZ2V0RmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2U1OTcyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvc2VydmVyL1N0YXJ0Q2xpZW50V2lkZ2V0RmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTI5ICAgMTQxNDIyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuc2VydmVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmV4dGVuc2lvbi5QcmVDbGllbnREZXZlbG9wQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlQ2xpZW50OwotCi1wdWJsaWMgY2xhc3MgU3RhcnRDbGllbnRXaWRnZXRGYWN0b3J5IGltcGxlbWVudHMgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5IAotewotICBwcml2YXRlIElXZWJTZXJ2aWNlQ2xpZW50IHdlYnNlcnZpY2VDbGllbnRfOwotICBwcml2YXRlIElDb250ZXh0IGNvbnRleHRfOwotICAKLSAgcHVibGljIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yIGdldEZpcnN0TmFtZWRXaWRnZXQoKSAKLSAgewotICAgIElTZXJ2ZXIgc2VydmVyID0gbnVsbDsKLSAgICAKLSAgICBpZiggd2Vic2VydmljZUNsaWVudF8gIT0gbnVsbCAgJiYgY29udGV4dF8uZ2V0UnVuKCkpCi0gICAgewotICAgICAgc2VydmVyID0gU2VydmVyQ29yZS5maW5kU2VydmVyKHdlYnNlcnZpY2VDbGllbnRfLmdldFdlYlNlcnZpY2VDbGllbnRJbmZvKCkuZ2V0U2VydmVySW5zdGFuY2VJZCgpICk7Ci0gICAgfQotICAgIAotICAgIGlmKCBzZXJ2ZXIgIT0gbnVsbCAmJiBzZXJ2ZXIuZ2V0U2VydmVyU3RhdGUoKSAhPSBJU2VydmVyLlNUQVRFX1NUQVJURUQgKQotICAgIHsKLSAgICAgIHJldHVybiBuZXcgU3RhcnRDbGllbnRXaWRnZXRDb250cmlidXRvciggc2VydmVyICk7Ci0gICAgfQotICAgIAotCXJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yIGdldE5leHROYW1lZFdpZGdldCggSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3Igd2lkZ2V0Q29udHJpYnV0b3IpIAotICB7Ci0JcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyhEYXRhTWFwcGluZ1JlZ2lzdHJ5IGRhdGFSZWdpc3RyeSkgCi0gIHsKLQlkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlIiwgU3RhcnRDbGllbnRXaWRnZXRGYWN0b3J5LmNsYXNzICk7Ci0JZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiQ29udGV4dCIsIFN0YXJ0Q2xpZW50V2lkZ2V0RmFjdG9yeS5jbGFzcyApOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlKCBJV2ViU2VydmljZUNsaWVudCB3ZWJzZXJ2aWNlQ2xpZW50ICkKLSAgewotICAgIHdlYnNlcnZpY2VDbGllbnRfID0gd2Vic2VydmljZUNsaWVudDsgIAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRDb250ZXh0ICggSUNvbnRleHQgY29udGV4dCApCi0gIHsKLSAgICBjb250ZXh0XyA9IGNvbnRleHQ7ICAKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9zZXJ2ZXIvU3RhcnRTZXJ2ZXJXaWRnZXQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvc2VydmVyL1N0YXJ0U2VydmVyV2lkZ2V0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlNjJmZWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS9zZXJ2ZXIvU3RhcnRTZXJ2ZXJXaWRnZXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzAzMTQgICAxNzY4ODYgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnNlcnZlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5qb2JzLklKb2JDaGFuZ2VFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuam9icy5JSm9iTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuam9icy5Kb2I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmpvYnMuSm9iQ2hhbmdlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuUHJvZ3Jlc3NNb25pdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tYW5kLlN0YXJ0U2VydmVyQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuY29tbW9uLlVJVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuVHJhbnNpZW50UmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkJhc2VTdGF0dXNIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkVjbGlwc2VFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuZWNsaXBzZS5FY2xpcHNlU3RhdHVzSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5TaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0RGF0YUV2ZW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjsKLQotcHVibGljIGNsYXNzIFN0YXJ0U2VydmVyV2lkZ2V0IGV4dGVuZHMgU2ltcGxlV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yIAotewotICBwcml2YXRlIElTZXJ2ZXIgICAgICAgICAgICAgc2VydmVyXzsKLSAgcHJpdmF0ZSBJU3RhdHVzICAgICAgICAgICAgICBzdGF0dXNfOwotICBwcml2YXRlIExpc3RlbmVyICAgICAgICAgICAgc3RhdHVzTGlzdGVuZXJfOwotICBwcml2YXRlIEJ1dHRvbiAgICAgICAgICAgICAgYnV0dG9uXzsKLSAgcHJpdmF0ZSBKb2JDaGFuZ2VBZGFwdGVyICAgIGpvYkNoYW5nZUFkYXB0ZXJfOwotICBwcml2YXRlIFRleHQgICAgICAgICAgICAgICAgc2VydmVyU3RhdGVUZXh0XzsKLSAgcHJpdmF0ZSBQcm9ncmVzc01vbml0b3JQYXJ0IHByb2dyZXNzTW9uaXRvcl87Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgICBwbHVnaW5JZF87Ci0gIHByaXZhdGUgQ29tcG9zaXRlICAgICAgICAgICBidXR0b25Hcm91cF87Ci0gICAgCi0gIC8qQ09OVEVYVF9JRCBTU1dQMDAwMSBTdGFydCB0aGUgc2VydmVyIGJ1dHRvbi4gKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9TU1dQX1NFUlZFUl9CVVRUT04gPSAiU1NXUDAwMDEiOwotICAKLSAgcHVibGljIFN0YXJ0U2VydmVyV2lkZ2V0KCBJU2VydmVyIHNlcnZlciApCi0gIHsKLQlwbHVnaW5JZF8gPSAib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpIjsKLQkJCi0gICAgc2VydmVyXyA9IHNlcnZlcjsKLSAgICAKLSAgICBqb2JDaGFuZ2VBZGFwdGVyXyA9IG5ldyBKb2JDaGFuZ2VBZGFwdGVyKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgZG9uZShmaW5hbCBJSm9iQ2hhbmdlRXZlbnQgZXZlbnQpIAotICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAJRGlzcGxheS5nZXREZWZhdWx0KCkuYXN5bmNFeGVjKCBuZXcgUnVubmFibGUoKQotICAgICAgICAgICAgICAgICAgICAgICAgCQkJICAgICAgICAgICAgICAgICAgICAgICAgewotCSAgICAgICAgCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSAKLQkJCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotCSAgICAgICAgCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCAhcHJvZ3Jlc3NNb25pdG9yXy5pc0Rpc3Bvc2VkKCkgKQotCSAgICAgICAgCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLQkJCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFNlcnZlclN0YXRlKCk7CQotCQkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3NNb25pdG9yXy5kb25lKCk7Ci0JCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnRFcnJvcklmUmVxdWlyZWQoIChTdGFydFNlcnZlckpvYilldmVudC5nZXRKb2IoKSApOwotCSAgICAgICAgCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQkJCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgCQkJICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH07Ci0gIH0KLSAgCi0gIHB1YmxpYyBXaWRnZXREYXRhRXZlbnRzIGFkZENvbnRyb2xzKENvbXBvc2l0ZSBwYXJlbnQsIExpc3RlbmVyIHN0YXR1c0xpc3RlbmVyKSAKLSAgewotCXN0YXR1c0xpc3RlbmVyXyA9IHN0YXR1c0xpc3RlbmVyOwotCQotCVVJVXRpbHMgICAgICB1aVV0aWxzICAgICA9IG5ldyBVSVV0aWxzKCBwbHVnaW5JZF8gKTsKLQlDb21wb3NpdGUgICAgZ3JvdXAgICAgICAgPSB1aVV0aWxzLmNyZWF0ZUNvbXBvc2l0ZSggcGFyZW50LCAxICk7Ci0JCi0JVGV4dCAgICAgICAgIHRleHQxICAgICAgICA9IHVpVXRpbHMuY3JlYXRlVGV4dCggZ3JvdXAsIG51bGwsIG51bGwsIG51bGwsIFNXVC5SRUFEX09OTFkgKTsKLQl0ZXh0MS5zZXRUZXh0KCBOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfU1RBUlRfU0VSVkVSX1RFWFQxLCBuZXcgU3RyaW5nW117IHNlcnZlcl8uZ2V0TmFtZSgpIH0gKSk7Ci0JCi0JVGV4dCAgICAgICAgIHRleHQyICAgICAgICA9IHVpVXRpbHMuY3JlYXRlVGV4dCggZ3JvdXAsIG51bGwsIG51bGwsIG51bGwsIFNXVC5SRUFEX09OTFkgKTsKLQl0ZXh0Mi5zZXRUZXh0KCBOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfU1RBUlRfU0VSVkVSX1RFWFQyLCBuZXcgU3RyaW5nW117IHNlcnZlcl8uZ2V0TmFtZSgpIH0gKSk7Ci0JCi0JVGV4dCAgICAgICAgIHRleHQzICAgICAgICA9IHVpVXRpbHMuY3JlYXRlVGV4dCggZ3JvdXAsIG51bGwsIG51bGwsIG51bGwsIFNXVC5SRUFEX09OTFkgKTsKLQl0ZXh0My5zZXRUZXh0KCBOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfU1RBUlRfU0VSVkVSX1RFWFQzLCBuZXcgU3RyaW5nW117IHNlcnZlcl8uZ2V0TmFtZSgpIH0gKSk7Ci0JCi0JVGV4dCAgICAgICAgIHRleHQ0ICAgICAgICA9IHVpVXRpbHMuY3JlYXRlVGV4dCggZ3JvdXAsIG51bGwsIG51bGwsIG51bGwsIFNXVC5SRUFEX09OTFkgKTsKLQl0ZXh0NC5zZXRUZXh0KCBOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfU1RBUlRfU0VSVkVSX1RFWFQ0LCBuZXcgU3RyaW5nW117IHNlcnZlcl8uZ2V0TmFtZSgpIH0gKSk7IAotCQotCWJ1dHRvbkdyb3VwXyA9IHVpVXRpbHMuY3JlYXRlQ29tcG9zaXRlKCBncm91cCwgMiwtMSwgMCApOwotCXNlcnZlclN0YXRlVGV4dF8gPSB1aVV0aWxzLmNyZWF0ZVRleHQoIGJ1dHRvbkdyb3VwXywgbnVsbCwgbnVsbCwgbnVsbCwgU1dULlJFQURfT05MWSApOwotCXNlcnZlclN0YXRlVGV4dF8uc2V0TGF5b3V0RGF0YSggbmV3IEdyaWREYXRhKCkgKTsKLQkJCi0JYnV0dG9uXyA9IHVpVXRpbHMuY3JlYXRlUHVzaEJ1dHRvbiggYnV0dG9uR3JvdXBfLCAKLQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9TVEFSVF9TRVJWRVJfQlVUVE9OLAotCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfU1RBUlRfU0VSVkVSX0JVVFRPTiwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkZPUE9QX1NTV1BfU0VSVkVSX0JVVFRPTiApOwotCQotCWJ1dHRvbl8uYWRkU2VsZWN0aW9uTGlzdGVuZXIoIG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkKLQkJCSAgICAgICAgICAgICAgICAgICAgICB7Ci0JCQkJCQkJCQkgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoIFNlbGVjdGlvbkV2ZW50IGV2dCApCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotCQkJICAgICAgICAgICAgICAgICAgICAgICAJICAgc2VydmVyU3RhdGVUZXh0Xy5zZXRUZXh0KCBnZXRTdGF0ZU1lc3NhZ2UoIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5URVhUX1NFUlZFUl9TVEFUVVMsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5URVhUX1NFUlZFUl9TVEFSVElORyApICk7Ci0JCQkgICAgICAgICAgICAgICAgICAgIAkgICBwcm9ncmVzc01vbml0b3JfLmJlZ2luVGFzayggZ2V0U3RhdGVNZXNzYWdlKCBDb25zdW1wdGlvblVJTWVzc2FnZXMuVEVYVF9TRVJWRVJfTVNHLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuVEVYVF9TRVJWRVJfU1RBUlRJTkcgKSwgSVByb2dyZXNzTW9uaXRvci5VTktOT1dOICk7Ci0JCQkgICAgICAgICAgICAgICAgICAgIAkgICBidXR0b25fLnNldEVuYWJsZWQoIGZhbHNlICk7Ci0JCQkgICAgICAgICAgICAgICAgICAgIAkgICBidXR0b25Hcm91cF8ucGFjaygpOwotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRTZXJ2ZXJKb2IoKTsKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CSAgICAgICAgICAgICAgICAgICAgICAgICAgCi0JCQkgICAgICAgICAgICAgICAgICAgICAgfSApOwkKLQkKLQlwcm9ncmVzc01vbml0b3JfID0gbmV3IFByb2dyZXNzTW9uaXRvclBhcnQoIGdyb3VwLCBuZXcgR3JpZExheW91dCgpICk7Ci0JcHJvZ3Jlc3NNb25pdG9yXy5zZXRMYXlvdXREYXRhKCBuZXcgR3JpZERhdGEoIEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCApKTsKLQkKLQlzZXRTZXJ2ZXJTdGF0ZSgpOwotCXJldHVybiB0aGlzOwotICB9Ci0KLSAgcHVibGljIElTdGF0dXMgZ2V0U3RhdHVzKCkgCi0gIHsKLQlyZXR1cm4gc3RhdHVzXzsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIHNldFNlcnZlclN0YXRlKCkKLSAgewotCWludCBzdGF0ZSA9IHNlcnZlcl8uZ2V0U2VydmVyU3RhdGUoKTsKLQkKLQlzd2l0Y2goIHN0YXRlICkKLQl7Ci0JICBjYXNlIElTZXJ2ZXIuU1RBVEVfU1RBUlRFRDoKLQkgIHsKLQkJc3RhdHVzXyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0JCWJ1dHRvbl8uc2V0RW5hYmxlZCggZmFsc2UgKTsKLQkJc2VydmVyU3RhdGVUZXh0Xy5zZXRUZXh0KCBnZXRTdGF0ZU1lc3NhZ2UoIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5URVhUX1NFUlZFUl9TVEFUVVMsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5URVhUX1NFUlZFUl9TVEFSVEVEICkgKTsKLQkJCi0JICAgIGJyZWFrOwkgIAotCSAgfQotCSAgCi0JICBjYXNlIElTZXJ2ZXIuU1RBVEVfU1RBUlRJTkc6Ci0JICB7Ci0JCXN0YXR1c18gPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggIiIgKTsKLQkJYnV0dG9uXy5zZXRFbmFibGVkKCBmYWxzZSApOyAgCi0JCXNlcnZlclN0YXRlVGV4dF8uc2V0VGV4dCggZ2V0U3RhdGVNZXNzYWdlKCBDb25zdW1wdGlvblVJTWVzc2FnZXMuVEVYVF9TRVJWRVJfU1RBVFVTLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuVEVYVF9TRVJWRVJfU1RBUlRJTkcgKSApOwotCQlwcm9ncmVzc01vbml0b3JfLmJlZ2luVGFzayggZ2V0U3RhdGVNZXNzYWdlKCBDb25zdW1wdGlvblVJTWVzc2FnZXMuVEVYVF9TRVJWRVJfTVNHLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuVEVYVF9TRVJWRVJfU1RBUlRJTkcgKSwgSVByb2dyZXNzTW9uaXRvci5VTktOT1dOICk7Ci0JCQotCQkvLyBUaGUgc2VydmVyIGlzIHN0aWxsIHN0YXJ0aW5nIHNvIHdlIG5lZWQgdG8gcmVjb25uZWN0IHRvIHRoZSBqb2IKLQkJLy8gdGhhdCBpcyBzdGFydGluZyBpdC4KLQkJc3RhcnRTZXJ2ZXJKb2IoKTsKLQkgICAgYnJlYWs7CSAgCi0JICB9Ci0JICAKLQkgIGRlZmF1bHQ6Ci0JICB7Ci0JCXN0YXR1c18gPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggIiIgKTsKLSAgICAgICAgYnV0dG9uXy5zZXRFbmFibGVkKCB0cnVlICk7Ci0JCXNlcnZlclN0YXRlVGV4dF8uc2V0VGV4dCggZ2V0U3RhdGVNZXNzYWdlKCBDb25zdW1wdGlvblVJTWVzc2FnZXMuVEVYVF9TRVJWRVJfU1RBVFVTLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuVEVYVF9TRVJWRVJfU1RPUFBFRCApICk7Ci0JCWJyZWFrOyAgCi0JICB9Ci0JfTsKLQkKLQlzdGF0dXNMaXN0ZW5lcl8uaGFuZGxlRXZlbnQoIG51bGwgKTsKLQlidXR0b25Hcm91cF8ucGFjaygpOwotICB9ICAKLSAgCi0gIHByaXZhdGUgU3RyaW5nIGdldFN0YXRlTWVzc2FnZSggU3RyaW5nIG1haW5LZXksIFN0cmluZyBzdWJLZXkgKQotICB7Ci0JcmV0dXJuIE5MUy5iaW5kKCBtYWluS2V5LCBuZXcgU3RyaW5nW117IHN1YktleSB9ICk7Ci0gIH0KLSAgCi0gIC8vIENvbm5lY3QgdG8gYW4gZXhpc3Rpbmcgc2VydmVyIHRocmVhZCBvdGhlcndpc2Ugc3RhcnQgYSBuZXcgb25lLgotICBwcml2YXRlIHZvaWQgc3RhcnRTZXJ2ZXJKb2IoKQotICB7Ci0JSUpvYk1hbmFnZXIgICAgam9iTWFuYWdlciAgICAgPSBQbGF0Zm9ybS5nZXRKb2JNYW5hZ2VyKCk7Ci0JSm9iW10gICAgICAgICAgam9icyAgICAgICAgICAgPSBqb2JNYW5hZ2VyLmZpbmQoIFN0YXJ0U2VydmVyRmFtaWx5ICk7Ci0JU3RhcnRTZXJ2ZXJKb2Igc3RhcnRTZXJ2ZXJKb2IgPSBudWxsOwotCQotCS8vIFRoZXJlIG1heSBiZSBtb3JlIHRoYW4gb25lIGpvYiBzdGFydGluZyBmb3IgZGlmZmVyZW50IHNlcnZlcnMuCi0JLy8gVGhlcmVmb3JlLCB3ZSBuZWVkIHRvIGZpbmQgdGhlIG9uZSBmb3Igb3VyIHNlcnZlciBpZiBpdCBpcyBhdmFpbGFibGUuCi0JZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IGpvYnMubGVuZ3RoOyBpbmRleCsrICkKLQl7Ci0JICBTdGFydFNlcnZlckpvYiBqb2JGb3VuZCA9IChTdGFydFNlcnZlckpvYilqb2JzW2luZGV4XTsKLQkgIAotCSAgaWYoIGpvYkZvdW5kLmdldFNlcnZlcigpID09IHNlcnZlcl8gKQotCSAgewotCSAgICBzdGFydFNlcnZlckpvYiA9IGpvYkZvdW5kOwotCSAgICBicmVhazsKLQkgIH0KLQl9Ci0JCi0JaWYoIHN0YXJ0U2VydmVySm9iICE9IG51bGwgKQotCXsKLQkgIHN5bmNocm9uaXplZCggU3RhcnRTZXJ2ZXJGYW1pbHkgKSAKLQkgIHsKLSAgICAgICAgSVN0YXR1cyBzdGF0dXMgPSBzdGFydFNlcnZlckpvYi5nZXRTdGF0dXMoKTsKLSAgICAgICAgCi0gICAgICAgIC8vIFdlIGFyZSB1c2luZyBzdGF0dXMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBqb2IgaGFzIGNvbXBsZXRlZCBvciBub3QuCi0gICAgICAgIC8vIE5vcm1hbGx5LCB3ZSB3b3VsZCBub3QgZ2V0IGhlcmUgaWYgdGhlIGpvYiBoYWQgYWxyZWFkeSBjb21wbGV0ZWQsCi0gICAgICAgIC8vIGJ1dCB0aGVyZSBpcyBhIHNsaW0gd2luZG93IHdoZXJlIHRoZSBqb2IgbWFuYWdlciBnaXZlcyB1cyB0aGUgam9iCi0gICAgICAgIC8vIGFuZCB0aGVuIGl0IGltbWVkaWF0ZWx5IGNvbXBsZXRlcy4KLSAgICAgICAgaWYoIHN0YXR1cyA9PSBudWxsICkKLSAgICAgICAgeyAgICAgICAgCi0gICAgICAgICAgLy8gVGhlIGpvYiBoYWQgbm90IGNvbXBsZXRlZCB5ZXQgc28gd2Ugd2lsbCBhZGQgYSBqb2IgY2hhbmdlIGxpc3RlbmVyLgotICAgICAgICAgIC8vIFdlIGFyZSBhZGRpbmcgdGhlIGpvYiBsaXN0ZW5lciBoZXJlIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBhc3N1bWUKLSAgICAgICAgICAvLyB0aGF0IHRoaXMgaW5zdGFuY2Ugb2YgdGhpcyB3aWRnZXQgaXMgdGhlIHNhbWUgYXMgdGhlIHByZXZpb3VzIGluc3RhbmNlLgotICAgICAgICAgIC8vIElmIHN0YXJ0U2VydmVySm9iIGFscmVhZHkgaGFzICJqb2JDaGFuZ2VBZGFwdGVyXyIgYWRkZWQgdG8gaXQgdGhpcwotICAgICAgICAgIC8vIG1ldGhvZCBjYWxsIHdpbGwgbm90IGhhdmUgYW4gZWZmZWN0LihXaGljaCBpcyB3aGF0IHdlIHdhbnQuKQotICAgICAgICAgIHN0YXJ0U2VydmVySm9iLmFkZEpvYkNoYW5nZUxpc3RlbmVyKCBqb2JDaGFuZ2VBZGFwdGVyXyApOyAKLSAgICAgICAgICAKLSAgICAgICAgICAvLyBOb3RlOiB0aGlzIGpvYiB3YXMgcmVwb3J0aW5nIHByb2dyZXNzIHRvIGRpZmZlcmVudCBwcm9ncmVzc01vbml0b3JfCi0gICAgICAgICAgLy8gICAgICAgY29udHJvbC4gIFdlIG5lZWQgdG8gdGVsbCB0aGUgam9iIHRoYXQgaXQgc2hvdWxkIHJlcG9ydCBwcm9ncmVzcwotICAgICAgICAgIC8vICAgICAgIHRvIG91ciBuZXcgcHJvZ3Jlc3NNb25pdG9yXyBjb250cm9sIG9uIHRoaXMgd2l6YXJkIHBhZ2UuCi0gICAgICAgICAgUHJvZ3Jlc3NNb25pdG9yV3JhcHBlciBtb25pdG9yID0gKFByb2dyZXNzTW9uaXRvcldyYXBwZXIpc3RhcnRTZXJ2ZXJKb2IuZ2V0TW9uaXRvcigpOwotICAgICAgICAgIG1vbml0b3Iuc2V0TW9uaXRvciggcHJvZ3Jlc3NNb25pdG9yXyApOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIC8vIFRoZSBqb2IgY29tcGxldGVkIGJlZm9yZSB3ZSBoYWQgYSBjaGFuY2UgdG8gYWRkIHRoZSBqb2IgY2hhbmdlIGxpc3RlbmVyCi0gICAgICAgICAgLy8gVGhlcmVmb3JlLCB3ZSB3aWxsIGp1c3QgY2FsbCBqb2JDaGFuZ2VBZGFwdGVyXyBkaXJlY3RseSB0byBub3RpZnkKLSAgICAgICAgICAvLyB0aGUgVUkgdGhhdCB0aGUgam9iIGhhcyBjb21wbGV0ZWQuCi0gICAgICAgICAgam9iQ2hhbmdlQWRhcHRlcl8uZG9uZSggbnVsbCApOwotICAgICAgICB9Ci0JICB9Ci0JfQotCWVsc2UKLQl7Ci0JICBzdGFydFNlcnZlckpvYiA9IG5ldyBTdGFydFNlcnZlckpvYigpOwkKLQkgIHN0YXJ0U2VydmVySm9iLmFkZEpvYkNoYW5nZUxpc3RlbmVyKCBqb2JDaGFuZ2VBZGFwdGVyXyApOwotCSAgc3RhcnRTZXJ2ZXJKb2Iuc2NoZWR1bGUoKTsKLQl9Ci0gIH0KLSAgICAgCi0gIHByaXZhdGUgdm9pZCByZXBvcnRFcnJvcklmUmVxdWlyZWQoIFN0YXJ0U2VydmVySm9iIHNlcnZlckpvYiApCi0gIHsKLQkgIElTdGF0dXMgc3RhdHVzID0gc2VydmVySm9iLmdldFN0YXR1cygpOwotCQotCSAgaWYoIHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUiApCi0JICB7Ci0JICAgIFNoZWxsICAgICAgICAgICAgICAgIHNoZWxsICAgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldFNoZWxsKCk7Ci0gICAgICBFY2xpcHNlU3RhdHVzSGFuZGxlciBoYW5kbGVyID0gbmV3IEVjbGlwc2VTdGF0dXNIYW5kbGVyKCBzaGVsbCApOwotICAgICAgCi0gICAgICBoYW5kbGVyLnJlcG9ydEVycm9yKCBzdGF0dXMgKTsKLQkgIH0KLSAgfQotICAKLSAgZmluYWwgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nICBTdGFydFNlcnZlckZhbWlseSA9ICJTdGFydFNlcnZlckZhbWlseSI7Ci0gIAotICAvLyBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gc3RhcnQgdXAgdGhlIHNlcnZlciBpbiBhbiBFY2xpcHNlIGpvYi4KLSAgcHJpdmF0ZSBjbGFzcyBTdGFydFNlcnZlckpvYiBleHRlbmRzIEpvYgotICB7Ci0JICBwcml2YXRlIElTdGF0dXMgICAgICAgICAgICAgICAgc3RhdHVzXyA9IG51bGw7Ci0JICBwcml2YXRlIFByb2dyZXNzTW9uaXRvcldyYXBwZXIgZW52TW9uaXRvcl87Ci0JCi0JICBwdWJsaWMgU3RhcnRTZXJ2ZXJKb2IoKQotCSAgewotCSAgICBzdXBlciggIlN0YXJ0U2VydmVySm9iIiApOwotCSAgCi0JICAgIGVudk1vbml0b3JfID0gbmV3IFByb2dyZXNzTW9uaXRvcldyYXBwZXIoIHByb2dyZXNzTW9uaXRvcl8gKTsKLQkgIH0KLQkKLQkgIHB1YmxpYyBJU2VydmVyIGdldFNlcnZlcigpCi0JICB7Ci0JICAgIHJldHVybiBzZXJ2ZXJfOwkKLQkgIH0KLQkKLQkgIHB1YmxpYyBQcm9ncmVzc01vbml0b3JXcmFwcGVyIGdldE1vbml0b3IoKQotCSAgewotCSAgICByZXR1cm4gZW52TW9uaXRvcl87CQotCSAgfQotCQotCSAgcHVibGljIGJvb2xlYW4gYmVsb25nc1RvKE9iamVjdCBmYW1pbHkpIAotCSAgewotCSAgICByZXR1cm4gZmFtaWx5ID09IFN0YXJ0U2VydmVyRmFtaWx5OwotCSAgfQotCi0JICBwcm90ZWN0ZWQgSVN0YXR1cyBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSAKLQkgIHsKLQkgICAgQmFzZVN0YXR1c0hhbmRsZXIgICAgICAgIGhhbmRsZXIgICAgICAgICA9IG5ldyBCYXNlU3RhdHVzSGFuZGxlcigpOwotCSAgICBUcmFuc2llbnRSZXNvdXJjZUNvbnRleHQgcmVzb3VyY2VDb250ZXh0ID0gbmV3IFRyYW5zaWVudFJlc291cmNlQ29udGV4dCgpOwotCSAgICBFY2xpcHNlRW52aXJvbm1lbnQgICAgICAgZW52aXJvbm1lbnQgICAgID0gbmV3IEVjbGlwc2VFbnZpcm9ubWVudCggbnVsbCxyZXNvdXJjZUNvbnRleHQsIGhhbmRsZXIgKTsKLQkgICAgU3RhcnRTZXJ2ZXJDb21tYW5kICAgICAgIHNlcnZlckNvbW1hbmQgICA9IG5ldyBTdGFydFNlcnZlckNvbW1hbmQoIGZhbHNlICk7Ci0JICAgIAotCSAgICBzZXJ2ZXJDb21tYW5kLnNldFNlcnZlckluc3RhbmNlSWQoIHNlcnZlcl8uZ2V0SWQoKSApOwotICAgICAgc2VydmVyQ29tbWFuZC5zZXRFbnZpcm9ubWVudCggZW52aXJvbm1lbnQgKTsKLQkgICAgCi0JICAgIHRyeQotCSAgICB7Ci0JICAgICAgc2V0U3RhdHVzKCBzZXJ2ZXJDb21tYW5kLmV4ZWN1dGUoIGVudk1vbml0b3JfLCBudWxsICkgKTsJCQotCSAgICB9Ci0JICAgIGNhdGNoKCBUaHJvd2FibGUgZXhjICkKLQkgICAgewotCQkgICAgZXhjLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICAgIHNldFN0YXR1cyggU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIGV4YyApICk7Ci0JICAgIH0KLQkgIAkKLQkgICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JICB9Ci0JCi0JICAvLyBDYWxscyB0byB0aGlzIG1ldGhvZCBuZWVkIHRvIGZpcnN0IHN5bmNocm9uaXplIG9uIHRoZQotCSAgLy8gU3RhcnRTZXJ2ZXJGYW1pbHkgb2JqZWN0LgotCSAgcHVibGljIElTdGF0dXMgZ2V0U3RhdHVzKCkKLQkgIHsKLQkgICAgcmV0dXJuIHN0YXR1c187Ci0JICB9Ci0JCi0JICBwcml2YXRlIHZvaWQgc2V0U3RhdHVzKCBJU3RhdHVzIHN0YXR1cyApCi0JICB7Ci0JICAgIHN5bmNocm9uaXplZCggU3RhcnRTZXJ2ZXJGYW1pbHkgKSAKLQkgICAgewotICAgICAgICBzdGF0dXNfID0gc3RhdHVzOwotCSAgICB9Ci0JICB9Ci0gIH0KLSAgICAKLSAgcHJpdmF0ZSBjbGFzcyBQcm9ncmVzc01vbml0b3JXcmFwcGVyIGltcGxlbWVudHMgSVByb2dyZXNzTW9uaXRvcgotICB7Ci0gICAgcHJpdmF0ZSBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3JfID0gbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKTsKLSAgCSAgCQotICAgIHB1YmxpYyBQcm9ncmVzc01vbml0b3JXcmFwcGVyKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKQotICAgIHsKLSAgICAgIG1vbml0b3JfID0gbW9uaXRvcjsgIAotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBzZXRNb25pdG9yKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKQotICAgIHsKLSAgICAgIG1vbml0b3JfID0gbW9uaXRvcjsJCi0gICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIGJlZ2luVGFzayhmaW5hbCBTdHJpbmcgbmFtZSwgZmluYWwgaW50IHRvdGFsV29yaykgCi0gICAgewotICAgICAgRGlzcGxheS5nZXREZWZhdWx0KCkuYXN5bmNFeGVjKCBuZXcgUnVubmFibGUoKQotICAgICAgCQkgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCAhcHJvZ3Jlc3NNb25pdG9yXy5pc0Rpc3Bvc2VkKCkgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJICAgIG1vbml0b3JfLmJlZ2luVGFzayggbmFtZSwgdG90YWxXb3JrICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgCQkgICAgICAgICAgICAgICAgICAgICAgICAgIH0gKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBkb25lKCkgCi0gICAgewotICAgICAgRGlzcGxheS5nZXREZWZhdWx0KCkuYXN5bmNFeGVjKCBuZXcgUnVubmFibGUoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiggIXByb2dyZXNzTW9uaXRvcl8uaXNEaXNwb3NlZCgpICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb25pdG9yXy5kb25lKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgaW50ZXJuYWxXb3JrZWQoZmluYWwgZG91YmxlIHdvcmspIAotICAgIHsKLSAgICAgIERpc3BsYXkuZ2V0RGVmYXVsdCgpLmFzeW5jRXhlYyggbmV3IFJ1bm5hYmxlKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoICFwcm9ncmVzc01vbml0b3JfLmlzRGlzcG9zZWQoKSApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9uaXRvcl8uaW50ZXJuYWxXb3JrZWQoIHdvcmsgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc0NhbmNlbGVkKCkgCi0gICAgewotICAgICAgcmV0dXJuIHByb2dyZXNzTW9uaXRvcl8uaXNEaXNwb3NlZCgpID8gZmFsc2UgOiBtb25pdG9yXy5pc0NhbmNlbGVkKCk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0Q2FuY2VsZWQoYm9vbGVhbiB2YWx1ZSkgCi0gICAgewotICAgICAgaWYoICFwcm9ncmVzc01vbml0b3JfLmlzRGlzcG9zZWQoKSApCi0gICAgICB7Ci0gIAkgICAgbW9uaXRvcl8uc2V0Q2FuY2VsZWQoIHZhbHVlICk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0VGFza05hbWUoZmluYWwgU3RyaW5nIG5hbWUpIAotICAgIHsKLSAgCSAgRGlzcGxheS5nZXREZWZhdWx0KCkuYXN5bmNFeGVjKCBuZXcgUnVubmFibGUoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiggIXByb2dyZXNzTW9uaXRvcl8uaXNEaXNwb3NlZCgpICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIAkgICAgICAgICAgICAgICAgICAgICAgICBtb25pdG9yXy5zZXRUYXNrTmFtZSggbmFtZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSApOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHN1YlRhc2soIGZpbmFsIFN0cmluZyBuYW1lKSAKLSAgICB7Ci0gIAkgIERpc3BsYXkuZ2V0RGVmYXVsdCgpLmFzeW5jRXhlYyggbmV3IFJ1bm5hYmxlKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoICFwcm9ncmVzc01vbml0b3JfLmlzRGlzcG9zZWQoKSApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAJICAgICAgICAgICAgICAgICAgICAgICAgbW9uaXRvcl8uc3ViVGFzayggbmFtZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSApOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHdvcmtlZChmaW5hbCBpbnQgd29yaykgCi0gICAgewotICAgICAgRGlzcGxheS5nZXREZWZhdWx0KCkuYXN5bmNFeGVjKCBuZXcgUnVubmFibGUoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiggIXByb2dyZXNzTW9uaXRvcl8uaXNEaXNwb3NlZCgpICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb25pdG9yXy53b3JrZWQoIHdvcmsgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9BYnN0cmFjdEhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NtZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL0Fic3RyYWN0SGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ21kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5MmY2YWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL0Fic3RyYWN0SGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ21kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQwNCAxMzQ5MTMgICBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUgICAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotCi0vKioKLSAqIEFic3RyYWN0SGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ21kCi0gKgotICogSW5pdGlhbGl6ZSBhbmQgbG9hZCB0aGUgaGFuZGxlcnMgZGF0YQotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDbWQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiAKLXsKLSAgCi0gIHByaXZhdGUgSVN0cnVjdHVyZWRTZWxlY3Rpb24gaW5pdGlhbFNlbGVjdGlvbl87IAotICAKLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLSAgICBJRW52aXJvbm1lbnQgZW52ID0gZ2V0RW52aXJvbm1lbnQoKTsKLSAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgCi0gICAgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uID0gaW5pdGlhbFNlbGVjdGlvbl87Ci0gICAgaWYgKHNlbGVjdGlvbiA9PSBudWxsKSB7Ci0gICAgICBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9UQVNLX0VYQ0VQVEVEICk7Ci0gICAgICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgICByZXR1cm4gc3RhdHVzOyAgICAgICAgIAotICAgIH0KLSAgICAKLSAgICAKLSAgICByZXR1cm4gc3RhdHVzOwotICAgIAotICB9Ci0gIAotCi0gIHB1YmxpYyBMaXN0IGdldENsaWVudEhhbmRsZXJzKCl7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRJbml0aWFsU2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGluaXRTZWxlY3Rpb24pewotICAgIHRoaXMuaW5pdGlhbFNlbGVjdGlvbl8gPSBpbml0U2VsZWN0aW9uOwotICB9Ci0gIAotICBwdWJsaWMgSVN0cnVjdHVyZWRTZWxlY3Rpb24gZ2V0SW5pdGlhbFNlbGVjdGlvbigpewotICAgIHJldHVybiB0aGlzLmluaXRpYWxTZWxlY3Rpb25fOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgSVJlc291cmNlIGdldFJlc291cmNlRnJvbUluaXRpYWxTZWxlY3Rpb24oKQotICB7Ci0gICAgaWYgKGluaXRpYWxTZWxlY3Rpb25fICE9IG51bGwgJiYgaW5pdGlhbFNlbGVjdGlvbl8uc2l6ZSgpID09IDEpCi0gICAgewotICAgICAgT2JqZWN0IG9iaiA9IGluaXRpYWxTZWxlY3Rpb25fLmdldEZpcnN0RWxlbWVudCgpOwotICAgICAgaWYgKG9iaiAhPSBudWxsKSAKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsgCi0gICAgICAgICAgSVJlc291cmNlIHJlc291cmNlID0gUmVzb3VyY2VVdGlscy5nZXRSZXNvdXJjZUZyb21TZWxlY3Rpb24ob2JqKTsKLSAgICAgICAgICByZXR1cm4gcmVzb3VyY2U7Ci0gICAgICAgIH0gY2F0Y2goQ29yZUV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0gICAgICAgIAotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfSAgIAotIAotICBwdWJsaWMgSVByb2plY3QgZ2V0UHJvamVjdCgpewotICAgIAotICAgIElSZXNvdXJjZSByZXNvdXJjZSA9IGdldFJlc291cmNlRnJvbUluaXRpYWxTZWxlY3Rpb24oKTsKLQlpZiAocmVzb3VyY2UgIT0gbnVsbCkKLQl7Ci0JICByZXR1cm4gUmVzb3VyY2VVdGlscy5nZXRQcm9qZWN0T2YoIHJlc291cmNlLmdldEZ1bGxQYXRoKCkgKTsKLQl9Ci0JIAotCXJldHVybiBudWxsOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldENvbXBvbmVudE5hbWUoKXsKLSAgICBJUmVzb3VyY2UgcmVzb3VyY2UgPSBnZXRSZXNvdXJjZUZyb21Jbml0aWFsU2VsZWN0aW9uKCk7Ci0gICAgaWYgKHJlc291cmNlIT1udWxsKSB7Ci0gICAgICBJUGF0aCBhYnNvbHV0ZVBhdGggPSByZXNvdXJjZS5nZXRGdWxsUGF0aCgpOwotICAgICAgaWYgKGFic29sdXRlUGF0aC5pc0Fic29sdXRlKCkpIHsKLSAgICAgICAgcmV0dXJuIGFic29sdXRlUGF0aC5zZWdtZW50KDEpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLS8vICBwdWJsaWMgV2ViU2VydmljZUVkaXRNb2RlbCBnZXRXZWJTZXJ2aWNlRWRpdE1vZGVsKCkgewotLy8gICAgV2ViU2VydmljZXNNYW5hZ2VyIHdzbSA9IG5ldyBXZWJTZXJ2aWNlc01hbmFnZXIoKTsKLS8vICAgIElQcm9qZWN0IHByb2plY3QgPSBnZXRQcm9qZWN0KCk7Ci0vLyAgICByZXR1cm4gd3NtLmdldFdTRWRpdE1vZGVsKHByb2plY3QpOyAgICAKLS8vICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL0Fic3RyYWN0T2JqZWN0U2VsZWN0aW9uTGF1bmNoYWJsZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL0Fic3RyYWN0T2JqZWN0U2VsZWN0aW9uTGF1bmNoYWJsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzAwY2NhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9BYnN0cmFjdE9iamVjdFNlbGVjdGlvbkxhdW5jaGFibGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyMCAgIDEzNTkxMiBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RPYmplY3RTZWxlY3Rpb25MYXVuY2hhYmxlIGltcGxlbWVudHMgSU9iamVjdFNlbGVjdGlvbkxhdW5jaGFibGUgewotCi0JcHVibGljIGludCBsYXVuY2goU2hlbGwgc2hlbGwpIHsJCQotCQlyZXR1cm4gLTE7Ci0JfQotCQotCXB1YmxpYyBJU3RhdHVzIHZhbGlkYXRlU2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIG9iamVjdFNlbGVjdGlvbikgewotCQkgLy8gIHN1YmNsYXNzIHNob3VsZCBvdmVycmlkZSB0aGlzIG1ldGhvZAotCQkgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JfQotCQotCXB1YmxpYyBJU3RydWN0dXJlZFNlbGVjdGlvbiBnZXRPYmplY3RTZWxlY3Rpb24oKSB7Ci0JCSAvLyAgc3ViY2xhc3Mgc2hvdWxkIG92ZXJyaWRlIHRoaXMgbWV0aG9kCi0JCXJldHVybiBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbigpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRJbml0aWFsU2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGluaXRpYWxTZWxlY3Rpb24pIHsKLQkJIC8vICBzdWJjbGFzcyBzaG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRob2QKLQl9CQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0T2JqZWN0U2VsZWN0aW9uRGlzcGxheWFibGVTdHJpbmcoKQotCXsKLQkJIC8vICBzdWJjbGFzcyBzaG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRob2QKLQkJcmV0dXJuICIiOwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZShTdHJpbmcgcykgewotCQkvLyBzdWJjbGFzcyBzaG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRob2QKLQkJcmV0dXJuIHRydWU7Ci0JfSAgCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9BZGRIYW5kbGVyRGlhbG9nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvQWRkSGFuZGxlckRpYWxvZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDVhYTM2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9BZGRIYW5kbGVyRGlhbG9nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDA0IDEzNDkxMyAgIHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdSAgICAgICAKLSAqIDIwMDYwNTI5ICAgMTQzNTE4IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuUHJvZ3Jlc3NNb25pdG9yRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLmNvbW1vbi5VSVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5kaWFsb2cuRGlhbG9nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLQotCi0KLXB1YmxpYyBjbGFzcyBBZGRIYW5kbGVyRGlhbG9nIGV4dGVuZHMgRGlhbG9nIGltcGxlbWVudHMgTGlzdGVuZXIgewotCi0gIHByaXZhdGUgU3RyaW5nIHBsdWdpbklkXyA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkiOwotCi0gIHByaXZhdGUgYm9vbGVhbiB2YWxpZGF0ZU9uXzsKLSAgcHJpdmF0ZSBib29sZWFuIGlzQ2xpZW50XzsKLSAgcHJpdmF0ZSBib29sZWFuIGlzTXVsdGlwbGVTZXJ2aWNlc187Ci0gIHByaXZhdGUgU3RyaW5nIGNsYXNzTmFtZTsKLSAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKLSAgcHJpdmF0ZSBTdHJpbmcgc2VsZWN0ZWRQb3J0TmFtZTsKLSAgCi0gIHByaXZhdGUgVGV4dCBjbGFzc05hbWVUZXh0OwotICBwcml2YXRlIFRleHQgbmFtZVRleHQ7Ci0gIHByaXZhdGUgQ29tYm8gcG9ydE5hbWVDb21ibzsKLSAgCi0gIC8vIC0tLS1UT09MVElQUyBTZWN0aW9uLS0tLQotICAvKiBDT05URVhUX0lEIEFIREwwMDAxIGZvciB0aGUgSGFuZGxlciBDb25maWcgUGFnZSAqLwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBJTkZPUE9QX1RFWFRfSEFORExFUl9OQU1FICA9ICJBSERMMDAwMSI7IC8vJE5PTi1OTFMtMSQKLSAgCi0gIC8qIENPTlRFWFRfSUQgQUhETDAwMDIgZm9yIHRoZSBIYW5kbGVyIENvbmZpZyBQYWdlICovCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIElORk9QT1BfVEVYVF9IQU5ETEVSX0NMQVNTICA9ICJBSERMMDAwMiI7IC8vJE5PTi1OTFMtMSQKLSAgCi0gIC8qIENPTlRFWFRfSUQgQUhETDAwMDEgZm9yIHRoZSBIYW5kbGVyIENvbmZpZyBQYWdlICovCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIElORk9QT1BfVEVYVF9IQU5ETEVSX1BPUlQgID0gIkFIREwwMDAzIjsgLy8kTk9OLU5MUy0xJAotICAgIAotICBwcml2YXRlIEJ1dHRvbiBiZWFuQ2xhc3NCcm93c2VCdXR0b25fOwotICAvKkNPTlRFWFRfSUQgUEJDTDAwMDMgZm9yIHRoZSBCZWFuIENsYXNzIEJyb3dzZSBidXR0b24gb2YgdGhlIEJlYW4gU2VsZWN0aW9uIFBhZ2UqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BCQ0xfQlVUVE9OX0JFQU5fQ0xBU1NfQlJPV1NFID0gIlBCQ0wwMDAzIjsKLSAgCi0gIHB1YmxpYyBBZGRIYW5kbGVyRGlhbG9nKCBTaGVsbCBzaGVsbCwgYm9vbGVhbiBpc0NsaWVudEhhbmRsZXIpCi0gIHsKLSAgICBzdXBlcihzaGVsbCk7Ci0gICAgc2V0U2hlbGxTdHlsZShnZXRTaGVsbFN0eWxlKCkgfCBTV1QuUkVTSVpFKTsKLSAgICBpc0NsaWVudF8gPSBpc0NsaWVudEhhbmRsZXI7Ci0gIH0KLQotICBwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVDb250ZW50cyhDb21wb3NpdGUgcGFyZW50KSB7Ci0gICAgQ29tcG9zaXRlIGNvbXAgPSAoQ29tcG9zaXRlKSBzdXBlci5jcmVhdGVDb250ZW50cyhwYXJlbnQpOwotICAgIHBhcmVudC5nZXRTaGVsbCgpLnBhY2soKTsKLSAgICByZXR1cm4gY29tcDsKLSAgfQotCi0gIHByb3RlY3RlZCBDb250cm9sIGNyZWF0ZURpYWxvZ0FyZWEoQ29tcG9zaXRlIHBhcmVudCkgewotICAgIHZhbGlkYXRlT25fID0gZmFsc2U7Ci0gICAgVUlVdGlscyB1aVV0aWxzID0gbmV3IFVJVXRpbHMocGx1Z2luSWRfKTsKLSAgICAKLSAgICBTaGVsbCB0aGlzU2hlbGwgPSBwYXJlbnQuZ2V0U2hlbGwoKTsKLSAgICBpZiAodGhpc1NoZWxsID09IG51bGwpIHsKLSAgICAgIHRoaXNTaGVsbCA9IGNyZWF0ZVNoZWxsKCk7Ci0gICAgfQotICAgIHRoaXNTaGVsbC5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5ESUFMT0dfVElUTEVfV1NfQUREX0hBTkRMRVIpOwotICAgIAotICAgIENvbXBvc2l0ZSBjb21wb3NpdGUgPSAoQ29tcG9zaXRlKSBzdXBlci5jcmVhdGVEaWFsb2dBcmVhKHBhcmVudCk7ICAgIAotICAgIAotICAgIENvbXBvc2l0ZSBzb3VyY2VMb2NhdGlvbkNvbXAgPSB1aVV0aWxzLmNyZWF0ZUNvbXBvc2l0ZShjb21wb3NpdGUsIDMpOwotICAgIAotICAgIGNsYXNzTmFtZVRleHQgPSB1aVV0aWxzLmNyZWF0ZVRleHQoc291cmNlTG9jYXRpb25Db21wLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfVEVYVF9IQU5ETEVSX0NMQVNTLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9URVhUX0hBTkRMRVJfQ0xBU1MsIElORk9QT1BfVEVYVF9IQU5ETEVSX0NMQVNTLCBTV1QuU0lOR0xFIHwgU1dULkJPUkRFUik7Ci0gICAgY2xhc3NOYW1lVGV4dC5hZGRMaXN0ZW5lcihTV1QuTW9kaWZ5LHRoaXMpOwotICAgIAotICAgIGJlYW5DbGFzc0Jyb3dzZUJ1dHRvbl8gPSB1aVV0aWxzLmNyZWF0ZVB1c2hCdXR0b24oIHNvdXJjZUxvY2F0aW9uQ29tcCwgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkJVVFRPTl9CUk9XU0VfQ0xBU1NFUywKLSAgICAJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BCQ0xfQlVUVE9OX0JFQU5fQ0xBU1NfQlJPV1NFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElORk9QT1BfUEJDTF9CVVRUT05fQkVBTl9DTEFTU19CUk9XU0UgKTsKLSAgICBiZWFuQ2xhc3NCcm93c2VCdXR0b25fLmFkZFNlbGVjdGlvbkxpc3RlbmVyKCBuZXcgU2VsZWN0aW9uQWRhcHRlcigpCi0gICAgICAgIHsKLSAgICAgICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZCggU2VsZWN0aW9uRXZlbnQgZXZ0ICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBoYW5kbGVCcm93c2VDbGFzc2VzKCk7ICAKLSAgICAgICAgICB9Ci0gICAgICAgIH0gKTsKLSAgICAKLSAgICBuYW1lVGV4dCA9IHVpVXRpbHMuY3JlYXRlVGV4dChzb3VyY2VMb2NhdGlvbkNvbXAsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9URVhUX0hBTkRMRVJfTkFNRSwgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfVEVYVF9IQU5ETEVSX05BTUUsIElORk9QT1BfVEVYVF9IQU5ETEVSX05BTUUsIFNXVC5TSU5HTEUgfCBTV1QuQk9SREVSICk7Ci0gICAgbmFtZVRleHQuYWRkTGlzdGVuZXIoU1dULk1vZGlmeSwgdGhpcyk7Ci0gICAgCi0gICAgLy8gZHVtbXkgbGFiZWwgZm9yIGNvbHVtbiAzLgotICAgIG5ldyBMYWJlbCggc291cmNlTG9jYXRpb25Db21wLCBTV1QuTk9ORSApOwotICAgIAotICAgIGlmICghaXNDbGllbnRfICYmICFpc011bHRpcGxlU2VydmljZXNfKXsKLSAgICAgIHBvcnROYW1lQ29tYm8gPSB1aVV0aWxzLmNyZWF0ZUNvbWJvKHNvdXJjZUxvY2F0aW9uQ29tcCwgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1RFWFRfSEFORExFUl9QT1JULCBDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9URVhUX0hBTkRMRVJfUE9SVCwgSU5GT1BPUF9URVhUX0hBTkRMRVJfUE9SVCwgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIgKTsKLSAgICAgIHBvcnROYW1lQ29tYm8uYWRkTGlzdGVuZXIoU1dULk1vZGlmeSwgdGhpcyk7Ci0gICAgICAKLSAgICAgIC8vIGR1bW15IGxhYmVsIGZvciBjb2x1bW4gMy4KLSAgICAgIG5ldyBMYWJlbCggc291cmNlTG9jYXRpb25Db21wLCBTV1QuTk9ORSApOwotICAgIH0KLSAgICB2YWxpZGF0ZU9uXyA9IHRydWU7Ci0gICByZXR1cm4gY29tcG9zaXRlOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgaGFuZGxlQnJvd3NlQ2xhc3NlcygpCi0gIHsKLSAgICBTaGVsbCBzaGVsbCA9IGdldFNoZWxsKCk7Ci0gICAgSVR5cGUgaXR5cGUgPSBEaWFsb2dVdGlscy5icm93c2VDbGFzc2VzQXNJVHlwZShzaGVsbCwgUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0cygpLCBuZXcgUHJvZ3Jlc3NNb25pdG9yRGlhbG9nKHNoZWxsKSk7Ci0gICAgCi0gICAgaWYoIGl0eXBlICE9IG51bGwgKQotICAgIHsKLSAgICAgIGNsYXNzTmFtZVRleHQuc2V0VGV4dChpdHlwZS5nZXRGdWxseVF1YWxpZmllZE5hbWUoKSk7ICAgICAgCi0gICAgfQotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXIjaGFuZGxlRXZlbnQob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBoYW5kbGVFdmVudChFdmVudCBldmVudCkgewotICAgIGlmICghdmFsaWRhdGVPbl8pCi0gICAgICByZXR1cm47Ci0gICAgaWYgKGNsYXNzTmFtZVRleHQgPT0gZXZlbnQud2lkZ2V0KSB7Ci0gICAgICBoYW5kbGVDbGFzc05hbWVUZXh0RXZlbnQoKTsKLSAgICAgIHZhbGlkYXRlVGV4dEZpZWxkRW50cmllcygpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAobmFtZVRleHQgPT0gZXZlbnQud2lkZ2V0KSB7Ci0gICAgICBoYW5kbGVOYW1lVGV4dEV2ZW50KCk7Ci0gICAgICB2YWxpZGF0ZVRleHRGaWVsZEVudHJpZXMoKTsgICAgICAKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHBvcnROYW1lQ29tYm8gPT0gZXZlbnQud2lkZ2V0KSB7Ci0gICAgICBoYW5kbGVQb3J0TmFtZVRleHRFdmVudCgpOwotICAgICAgdmFsaWRhdGVUZXh0RmllbGRFbnRyaWVzKCk7ICAgICAgCi0gICAgICByZXR1cm47Ci0gICAgfSAgICAKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBoYW5kbGVDbGFzc05hbWVUZXh0RXZlbnQoKXsKLSAgICBjbGFzc05hbWUgPSBjbGFzc05hbWVUZXh0LmdldFRleHQoKTsKLSAgICBpZiAoY2xhc3NOYW1lLmxhc3RJbmRleE9mKCIuamF2YSIpICE9IC0xKXsKLSAgICAgIG5hbWVUZXh0LnNldFRleHQoY2xhc3NOYW1lLnN1YnN0cmluZygwLCBjbGFzc05hbWUubGFzdEluZGV4T2YoIi5qYXZhIikpKTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICBuYW1lVGV4dC5zZXRUZXh0KGNsYXNzTmFtZSk7Ci0gICAgfQotICAgIAotICAgIGlmIChjbGFzc05hbWUubGFzdEluZGV4T2YoIi4iKSAhPSAtMSl7Ci0gICAgICBuYW1lVGV4dC5zZXRUZXh0KGNsYXNzTmFtZS5zdWJzdHJpbmcoY2xhc3NOYW1lLmxhc3RJbmRleE9mKCIuIikrMSwgY2xhc3NOYW1lLmxlbmd0aCgpKSk7Ci0gICAgfQotICAgIG5hbWUgPSBuYW1lVGV4dC5nZXRUZXh0KCk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBoYW5kbGVOYW1lVGV4dEV2ZW50KCkgewotICAgbmFtZSA9IG5hbWVUZXh0LmdldFRleHQoKTsgCi0KLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGhhbmRsZVBvcnROYW1lVGV4dEV2ZW50KCl7Ci0gICAgc2VsZWN0ZWRQb3J0TmFtZSA9IHBvcnROYW1lQ29tYm8uZ2V0VGV4dCgpOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgZGlzYWJsZU9LQnV0dG9uKCkgewotICAgIGlmIChnZXRCdXR0b24oMCkgIT0gbnVsbCkKLSAgICAgIGdldEJ1dHRvbigwKS5zZXRFbmFibGVkKGZhbHNlKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBlbmFibGVPS0J1dHRvbigpIHsKLSAgICBpZiAoZ2V0QnV0dG9uKDApICE9IG51bGwpCi0gICAgICBnZXRCdXR0b24oMCkuc2V0RW5hYmxlZCh0cnVlKTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIHZhbGlkYXRlVGV4dEZpZWxkRW50cmllcygpewotICAJaWYgKGNsYXNzTmFtZVRleHQuZ2V0VGV4dCgpLmVxdWFscygiIikpewotICAJCWRpc2FibGVPS0J1dHRvbigpOwotICAJCXJldHVybjsKLSAgCX0KLSAgCWlmIChuYW1lVGV4dC5nZXRUZXh0KCkuZXF1YWxzKCIiKSl7Ci0gIAkJZGlzYWJsZU9LQnV0dG9uKCk7Ci0gIAkJcmV0dXJuOwotICAJfQotICAJaWYgKCFpc0NsaWVudF8gJiYgIWlzTXVsdGlwbGVTZXJ2aWNlc18pewotICAJCWlmIChwb3J0TmFtZUNvbWJvLmdldFRleHQoKSE9bnVsbCAmJiBwb3J0TmFtZUNvbWJvLmdldFRleHQoKS5lcXVhbHMoIiIpKXsKLSAgCQkJZGlzYWJsZU9LQnV0dG9uKCk7Ci0gIAkJCXJldHVybjsKLSAgCQl9Ci0gIAkJZWxzZSBpZiAocG9ydE5hbWVDb21iby5nZXRUZXh0KCk9PW51bGwpIHsKLSAgCQkJZGlzYWJsZU9LQnV0dG9uKCk7Ci0gIAkJCXJldHVybjsKLSAgCQl9Ci0gIAl9Ci0gIAkKLSAgCWVuYWJsZU9LQnV0dG9uKCk7Ci0gIAkKLQkKLSAgfQotICAKLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgY2xhc3NOYW1lLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRDbGFzc05hbWUoKSB7Ci0gICAgaWYgKGNsYXNzTmFtZS5sYXN0SW5kZXhPZigiLmphdmEiKSAhPSAtMSl7Ci0gICAgICByZXR1cm4gY2xhc3NOYW1lLnN1YnN0cmluZygwLCBjbGFzc05hbWUubGFzdEluZGV4T2YoIi5qYXZhIikpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgIHJldHVybiBjbGFzc05hbWU7Ci0gICAgfQotICB9Ci0gIC8qKgotICAgKiBAcGFyYW0gY2xhc3NOYW1lIFRoZSBjbGFzc05hbWUgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q2xhc3NOYW1lKFN0cmluZyBjbGFzc05hbWUpIHsKLSAgICB0aGlzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsKLSAgfQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBuYW1lLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotICAgIHJldHVybiBuYW1lOwotICB9Ci0gIC8qKgotICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKSB7Ci0gICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgfQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBwb3J0TmFtZS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UG9ydE5hbWUoKSB7Ci0gICAgcmV0dXJuIHNlbGVjdGVkUG9ydE5hbWU7Ci0gIH0KLSAgLyoqCi0gICAqIEBwYXJhbSBwb3J0TmFtZSBUaGUgcG9ydE5hbWUgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UG9ydE5hbWVzKFN0cmluZ1tdIHBvcnROYW1lcykgewotICAgIHBvcnROYW1lQ29tYm8uc2V0SXRlbXMocG9ydE5hbWVzKTsKLSAgICBwb3J0TmFtZUNvbWJvLnNlbGVjdCgwKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0SXNNdWx0aXBsZVNlcnZpY2VzKGJvb2xlYW4gaXNNdWx0aXBsZVNlcnZpY2VzKXsKLSAgICB0aGlzLmlzTXVsdGlwbGVTZXJ2aWNlc18gPSBpc011bHRpcGxlU2VydmljZXM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9DaGVja1dTRExWYWxpZGF0aW9uQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL0NoZWNrV1NETFZhbGlkYXRpb25Db21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5NjJkODIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL0NoZWNrV1NETFZhbGlkYXRpb25Db21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDIwICAgMTIwNzE0IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuam9icy5JSm9iTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuam9icy5Kb2I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuVmFsaWRhdGVXU0RMSm9iOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LkNob2ljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW4uV1NQbHVnaW47Ci0KLQotcHVibGljIGNsYXNzIENoZWNrV1NETFZhbGlkYXRpb25Db21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsJICAKLQkKLQlwdWJsaWMgQ2hlY2tXU0RMVmFsaWRhdGlvbkNvbW1hbmQgKCkgewotCX0KLSAgCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0gICAgSUVudmlyb25tZW50IGVudiA9IGdldEVudmlyb25tZW50KCk7Ci0gICAgCi0gICAgSUpvYk1hbmFnZXIgICAgam9iTWFuYWdlciAgICAgPSBQbGF0Zm9ybS5nZXRKb2JNYW5hZ2VyKCk7Ci0JICBKb2JbXSAgICAgICAgICBqb2JzICAgICAgICAgICA9IGpvYk1hbmFnZXIuZmluZCggVmFsaWRhdGVXU0RMSm9iLlZBTElEQVRFX1dTRExfSk9CX0ZBTUlMWSApOwotCSAgVmFsaWRhdGVXU0RMSm9iIGV4aXN0aW5nVmFsaWRhdGVXU0RMSm9iID0gbnVsbDsKLQkgIAotCSAgaWYoIGpvYnMubGVuZ3RoID4gMCApCi0JICB7Ci0JCSAgZm9yIChpbnQgaT0wOyBpPGpvYnMubGVuZ3RoOyBpKyspIHsKLQkJCSAgZXhpc3RpbmdWYWxpZGF0ZVdTRExKb2IgPSAoVmFsaWRhdGVXU0RMSm9iKWpvYnNbaV07Ci0JCQkgIAotCQkJICBpZiAoZXhpc3RpbmdWYWxpZGF0ZVdTRExKb2IuZ2V0U3RhdGUoKSAhPSBKb2IuTk9ORSkgeyAKLQkJCQkgIGlmIChpZ25vcmVXU0RMVmFsaWRhdGlvbihlbnYpKSB7Ci0JCQkJCSAgLy8gaWYgZG9uJ3Qgd2FudCB0byB3YWl0IGZvciB2YWxpZGF0aW9uLCBjYW5jZWwgZXhpc3RpbmcgdmFsaWRhdGlvbiBqb2IKLQkJCQkJICBleGlzdGluZ1ZhbGlkYXRlV1NETEpvYi5jYW5jZWwoKTsKLQkJCQkJICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQkJCQkgIH0gZWxzZSB7Ci0JCQkJCSAgLy8gU2V0dGluZyB0aGUgZXJyb3Igc3RyaW5nIHRvIGFuIGVtcHR5IHN0cmluZyBzbyB0aGF0IHRoZSBjb21tYW5kIGVuZ2luZSB3b3VsZCBub3QKLQkJCQkJICAvLyBwb3AtdXAgYW5vdGhlciBlcnJvciBtZXNzYWdlIHdoZW4gdGhlIHVzZXIgZGVjaWRlZCB0byB3YWl0IGZvciBXU0RMIHZhbGlkYXRpb24uCi0JCQkJCSAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCAiIiApOwotCQkJCSAgfQotCQkJICB9Ci0JCSAgfQotCSAgfQotCSAgCi0gICAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQkgIAotICB9Ci0gIAotICBwcml2YXRlIGJvb2xlYW4gaWdub3JlV1NETFZhbGlkYXRpb24oSUVudmlyb25tZW50IGVudikgewotCSAgaWYgKCFXU1BsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFdhaXRGb3JXU0RMVmFsaWRhdGlvbkNvbnRleHQoKS5nZXRQZXJzaXN0ZW50V2FpdEZvcldTRExWYWxpZGF0aW9uKCkpIAotCQkgIHJldHVybiB0cnVlOyAvLyBkbyBub3Qgd2FudCB0byB3YWl0IGZvciBXU0RMIHZhbGlkYXRpb24sIGkuZS4gSWdub3JlIGFsbAotCQkgIAotCQkvLyBnaXZlIGEgd2FybmluZyBtZXNzYWdlIHdpdGggdGhlIG9wdGlvbnMgdG8gc3RvcCwgaWdub3JlIHRoaXMgb25lLCBvcgotCQkvLyBpZ25vcmUgYWxsIGNvbWluZyBtZXNzYWdlcwotCQlJU3RhdHVzIHN0YXR1c18gPSBTdGF0dXNVdGlscy53YXJuaW5nU3RhdHVzKCBDb25zdW1wdGlvblVJTWVzc2FnZXMuU1RJTExfVkFMSURBVElOR19XU0RMICk7Ci0JCS8vIGFkZGluZyBhbGwgbWVzc2FnZXMgZnJvbSBXU0kgSW5jb21wbGlhbmNlcwotCi0JCUNob2ljZSBpZ25vcmVDaG9pY2UgPSBuZXcgQ2hvaWNlKCdDJywgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkNBTkNFTF9WQUxJREFUSU9OX0xBQkVMLCAKLQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuQ0FOQ0VMX1ZBTElEQVRJT05fREVTQ1JJUFRJT04pOwotCQlDaG9pY2UgaWdub3JlQWxsQ2hvaWNlID0gbmV3IENob2ljZSgnQScsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5DQU5DRUxfQUxMX1ZBTElEQVRJT05fTEFCRUwsIAotCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5DQU5DRUxfQUxMX1ZBTElEQVRJT05fREVTQ1JJUFRJT04pOwotCQlDaG9pY2UgY2FuY2VsQ2hvaWNlID0gbmV3IENob2ljZSgnVycsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5XQUlUX1ZBTElEQVRJT05fTEFCRUwsIAotCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5XQUlUX1ZBTElEQVRJT05fREVTQ1JJUFRJT04pOwotCi0JCUNob2ljZSByZXN1bHQgPSBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydChzdGF0dXNfLAotCQkJCW5ldyBDaG9pY2VbXSB7IGlnbm9yZUNob2ljZSwgaWdub3JlQWxsQ2hvaWNlLCBjYW5jZWxDaG9pY2UgfSk7Ci0KLQkJLy8gaWYgdGhlIHVzZXIgY2xvc2VzIHRoZSBtZXNzYWdlIGJveCBvciBzZWxlY3RzIGlnbm9yZSBjb250aW51ZQotCQlpZiAocmVzdWx0ID09IG51bGwKLQkJCQl8fCAocmVzdWx0LmdldExhYmVsKCkuZXF1YWxzKGlnbm9yZUNob2ljZS5nZXRMYWJlbCgpKSkpIHsKLQkJCXJldHVybiB0cnVlOwotCQkvLyBpZiB0aGUgdXNlciBzZWxlY3RzIGlnbm9yZSBhbGwsIGNoYW5nZSB0aGUgcHJlZmVyZW5jZQotCQl9IGVsc2UgaWYgKHJlc3VsdC5nZXRMYWJlbCgpLmVxdWFscyhpZ25vcmVBbGxDaG9pY2UuZ2V0TGFiZWwoKSkpIHsKLQkJCS8vIHVwZGF0ZSBpZ25vcmUgV1NETCB2YWxpZGF0aW9uIHByZWZlcmVuY2UKLQkJCVdTUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0V2FpdEZvcldTRExWYWxpZGF0aW9uQ29udGV4dCgpLnNldFdhaXRGb3JXU0RMVmFsaWRhdGlvbihmYWxzZSk7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQkvLyBpZiB0aGUgdXNlciBzZWxlY3RzIHRvIGNhbmNlbCAsIGRvIG5vdCBjb250aW51ZSB3aXRoIHRoZSBjb21tYW5kCi0JCWVsc2UgaWYgKHJlc3VsdC5nZXRMYWJlbCgpLmVxdWFscyhjYW5jZWxDaG9pY2UuZ2V0TGFiZWwoKSkpIHsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0gIAotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvQ2xpZW50SGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL0NsaWVudEhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjlmYjkyNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvQ2xpZW50SGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MDQgMTM0OTEzICAgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1ICAgICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Xb3JrYmVuY2hSZXNvdXJjZUhlbHBlckJhc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5hcHBsaWNhdGlvbmNsaWVudC5jb21wb25lbnRjb3JlLnV0aWwuQXBwQ2xpZW50QXJ0aWZhY3RFZGl0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmNsaWVudC5BcHBsaWNhdGlvbkNsaWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5jbGllbnQuQXBwbGljYXRpb25DbGllbnRSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5lamIuRUpCSmFyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmVqYi5FSkJSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5lamIuaW50ZXJuYWwubW9kdWxlY29yZS51dGlsLkVKQkFydGlmYWN0RWRpdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5pbnRlcm5hbC53ZWJzZXJ2aWNlLldlYlNlcnZpY2VOYXZpZ2F0b3JHcm91cFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuaW50ZXJuYWwud2Vic2VydmljZS5oZWxwZXIuV2ViU2VydmljZXNNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYi5jb21wb25lbnRjb3JlLnV0aWwuV2ViQXJ0aWZhY3RFZGl0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYmFwcGxpY2F0aW9uLldlYkFwcDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJhcHBsaWNhdGlvbi5XZWJBcHBSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzY2xpZW50LkhhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2NsaWVudC5TZXJ2aWNlUmVmOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NjbGllbnQuV2ViU2VydmljZXNSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tb24uSGFuZGxlclNlcnZpY2VSZWZIb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0LkhhbmRsZXJUYWJsZUl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5Db21wb25lbnRDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5yZXNvdXJjZXMuSVZpcnR1YWxDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci0KLS8qKgotICogQ2xpZW50SGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZAotICoKLSAqIEluaXRpYWxpemUgYW5kIGxvYWQgdGhlIGhhbmRsZXJzIGRhdGEKLSAqLwotcHVibGljIGNsYXNzIENsaWVudEhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdEhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NtZCB7Ci0KLSAgcHJpdmF0ZSBXZWJTZXJ2aWNlc01hbmFnZXIgd2ViU2VydmljZXNNYW5hZ2VyXzsKLQotICBwcml2YXRlIElQcm9qZWN0IHByb2plY3RfOwotICAKLSAgcHJpdmF0ZSBTdHJpbmcgc2VydmljZVJlZk5hbWVfID0gbnVsbDsKLSAgCi0gIHByaXZhdGUgTGlzdCB3c1NlcnZpY2VSZWZzXzsKLSAgCi0gIHByaXZhdGUgSGFuZGxlclNlcnZpY2VSZWZIb2xkZXJbXSBoYW5kbGVyU2VydmljZVJlZkhvbGRlcl87Ci0gIHByaXZhdGUgU3RyaW5nIGVycm9yU3RhdHVzTXNnXyA9IG51bGw7Ci0gIHByaXZhdGUgYm9vbGVhbiBpc011bHRpcGxlU2VsZWN0aW9uXzsKLSAgCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7ICAgIAotICAgIElFbnZpcm9ubWVudCBlbnYgPSBnZXRFbnZpcm9ubWVudCgpOwotICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLQotICAgIHdlYlNlcnZpY2VzTWFuYWdlcl8gPSBXZWJTZXJ2aWNlc01hbmFnZXIuZ2V0SW5zdGFuY2UoKTsKLQotICAgIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGdldEluaXRpYWxTZWxlY3Rpb24oKTsKLSAgICBpZiAoc2VsZWN0aW9uID09IG51bGwpIHsKLSAgICAgIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX1RBU0tfRVhDRVBURUQgKTsKLSAgICAgIGVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQotICAgIGVsc2UgaWYgKHNlbGVjdGlvbi5zaXplKCk+MSl7Ci0gICAgICBzdGF0dXMgPSBwcm9jZXNzTXVsdGlwbGVIYW5kbGVycygpOwotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICB9Ci0KLSAgICBzdGF0dXMgPSBwcm9jZXNzSGFuZGxlcnMoKTsKLSAgICByZXR1cm4gc3RhdHVzOwotCi0gIH0KLQotICAvKioKLSAgICogRm9yIHByb2Nlc3NpbmcgaGFuZGxlcnMKLSAgICogQHJldHVybgotICAgKi8KLSAgcHVibGljIElTdGF0dXMgcHJvY2Vzc0hhbmRsZXJzKCkgewotICAgIHRyeSB7Ci0KLSAgICAgIENvbGxlY3Rpb24gc2VsZWN0ZWRTZXJ2aWNlUmVmcyA9IGdldFdTU2VydmljZVJlZnNGcm9tU2VsZWN0aW9uKCk7IC8vIGdldCBpbml0aWFsIHNlbGVjdGlvbiB2YWx1ZXMKLSAgICAgIGlmIChzZWxlY3RlZFNlcnZpY2VSZWZzPT1udWxsIHx8IHNlbGVjdGVkU2VydmljZVJlZnMuaXNFbXB0eSgpKXsKLSAgICAgICAgLy9yZXBvcnQgbm8gV2ViIHNlcnZpY2UgY2xpZW50IGlzIGF2YWlsYWJsZQotICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfV0VCX1NFUlZJQ0VfQ0xJRU5UU19OT1RfRk9VTkQpOwotICAgICAgfQotICAgICAgd3NTZXJ2aWNlUmVmc18gPSB3ZWJTZXJ2aWNlc01hbmFnZXJfLmdldEFsbFdvcmtzcGFjZVNlcnZpY2VSZWZzKCk7IAotCi0gICAgICBpZiAod3NTZXJ2aWNlUmVmc18gIT0gbnVsbCkgewotICAgICAgICBpbnQgbnVtYmVyT2ZTZXJ2aWNlUmVmcyA9IHdzU2VydmljZVJlZnNfLnNpemUoKTsKLSAgICAgICAgaGFuZGxlclNlcnZpY2VSZWZIb2xkZXJfID0gbmV3IEhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyW251bWJlck9mU2VydmljZVJlZnNdOwotICAgICAgICAKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1iZXJPZlNlcnZpY2VSZWZzOyBpKyspIHsKLSAgICAgICAgICBTZXJ2aWNlUmVmIHdzU2VydmljZVJlZiA9IChTZXJ2aWNlUmVmKSB3c1NlcnZpY2VSZWZzXy5nZXQoaSk7Ci0gICAgICAgICAgVmVjdG9yIGhhbmRsZXJzID0gbmV3IFZlY3RvcigpOwotICAgICAgICAgIExpc3Qgd3NIYW5kbGVycyA9IHdzU2VydmljZVJlZi5nZXRIYW5kbGVycygpOwotICAgICAgCi0gICAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCB3c0hhbmRsZXJzLnNpemUoKTsgaysrKSB7Ci0KLSAgICAgICAgICAgIEhhbmRsZXIgd3NIYW5kbGVyID0gKEhhbmRsZXIpIHdzSGFuZGxlcnMuZ2V0KGspOwotCi0gICAgICAgICAgICBIYW5kbGVyVGFibGVJdGVtIGhhbmRsZXJJdGVtID0gbmV3IEhhbmRsZXJUYWJsZUl0ZW0oKTsKLSAgICAgICAgICAgIGhhbmRsZXJJdGVtLnNldEhhbmRsZXIod3NIYW5kbGVyKTsKLSAgICAgICAgICAgIGhhbmRsZXJJdGVtLnNldEhhbmRsZXJOYW1lKHdzSGFuZGxlci5nZXRIYW5kbGVyTmFtZSgpKTsKLSAgICAgICAgICAgIGhhbmRsZXJJdGVtLnNldEhhbmRsZXJDbGFzc05hbWUod3NIYW5kbGVyLmdldEhhbmRsZXJDbGFzcygpLmdldFF1YWxpZmllZE5hbWUoKSk7Ci0gICAgICAgICAgICBoYW5kbGVySXRlbS5zZXRXc0Rlc2NSZWYod3NTZXJ2aWNlUmVmKTsKLQotICAgICAgICAgICAgaGFuZGxlcnMuYWRkKGhhbmRsZXJJdGVtKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgU3RyaW5nIHdzU2VydmljZVJlZk5hbWUgPSB3c1NlcnZpY2VSZWYuZ2V0U2VydmljZVJlZk5hbWUoKTsKLSAgICAgICAgICBoYW5kbGVyU2VydmljZVJlZkhvbGRlcl9baV0gPSBuZXcgSGFuZGxlclNlcnZpY2VSZWZIb2xkZXIoKTsKLSAgICAgICAgICBoYW5kbGVyU2VydmljZVJlZkhvbGRlcl9baV0uc2V0SGFuZGxlckxpc3QoaGFuZGxlcnMpOwotICAgICAgICAgIGhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyX1tpXS5zZXRTZXJ2aWNlUmVmKHdzU2VydmljZVJlZik7Ci0gICAgICAgICAgaGFuZGxlclNlcnZpY2VSZWZIb2xkZXJfW2ldLnNldFNlcnZpY2VSZWZOYW1lKHdzU2VydmljZVJlZk5hbWUpOwotICAgICAgICAgIAotICAgICAgICB9Ci0KLSAgICAgIH0KLSAgICAgIAotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9UQVNLX0VYQ0VQVEVELCBlKTsKLSAgICB9Ci0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLQotICBwdWJsaWMgSVN0YXR1cyBwcm9jZXNzTXVsdGlwbGVIYW5kbGVycygpewotICAgICAgU2VydmljZVJlZltdIHNlcnZpY2VSZWZzID0gZ2V0U2VydmljZVJlZnMoKTsKLSAgICAgIGlmIChlcnJvclN0YXR1c01zZ18gIT0gbnVsbCl7Ci0gICAgICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKGVycm9yU3RhdHVzTXNnXyk7Ci0gICAgICB9Ci0gICAgICBpc011bHRpcGxlU2VsZWN0aW9uXyA9IHRydWU7Ci0gICAgICAKLSAgICAgIGhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyXyA9IG5ldyBIYW5kbGVyU2VydmljZVJlZkhvbGRlcltzZXJ2aWNlUmVmcy5sZW5ndGhdOwotICAgICAgVmVjdG9yIGhhbmRsZXJzID0gbmV3IFZlY3RvcigpOwotICAgICAgZm9yIChpbnQgaT0wO2k8c2VydmljZVJlZnMubGVuZ3RoO2krKyl7Ci0gICAgICAgIAotICAgICAgICBTdHJpbmcgcmVmTmFtZSA9IHNlcnZpY2VSZWZzW2ldLmdldFNlcnZpY2VSZWZOYW1lKCk7Ci0gICAgICAgIGhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyX1tpXSA9IG5ldyBIYW5kbGVyU2VydmljZVJlZkhvbGRlcigpOwotICAgICAgICBoYW5kbGVyU2VydmljZVJlZkhvbGRlcl9baV0uc2V0SGFuZGxlckxpc3QoaGFuZGxlcnMpOwotICAgICAgICBoYW5kbGVyU2VydmljZVJlZkhvbGRlcl9baV0uc2V0U2VydmljZVJlZk5hbWUocmVmTmFtZSk7Ci0gICAgICAgIGhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyX1tpXS5zZXRTZXJ2aWNlUmVmKHNlcnZpY2VSZWZzW2ldKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOyAgICAgIAotICB9Ci0gIAotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBpc0dlblNrZWxldG9uRW5hYmxlZF8uCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRHZW5Ta2VsZXRvbkVuYWJsZWQoKSB7Ci0gICAgaWYgKGlzTXVsdGlwbGVTZWxlY3Rpb25fKQotICAgICAgcmV0dXJuIGZhbHNlOyAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0KLSAgcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlUmVmTmFtZSgpIHsKLSAgICByZXR1cm4gdGhpcy5zZXJ2aWNlUmVmTmFtZV87Ci0gIH0KLQotICBwdWJsaWMgSVByb2plY3QgZ2V0Q2xpZW50UHJvamVjdCgpIHsKLSAgICByZXR1cm4gcHJvamVjdF87Ci0gIH0KLSAgCi0gIHByaXZhdGUgU2VydmljZVJlZltdIGdldFNlcnZpY2VSZWZzKCl7Ci0gICAgICBJU3RydWN0dXJlZFNlbGVjdGlvbiBpbml0U2VsID0gZ2V0SW5pdGlhbFNlbGVjdGlvbigpOwotICAgICAgU2VydmljZVJlZltdIHNlcnZpY2VSZWZzID0gbmV3IFNlcnZpY2VSZWZbaW5pdFNlbC5zaXplKCldOwotICAgICAgSXRlcmF0b3IgaXRlciA9IGluaXRTZWwuaXRlcmF0b3IoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPGluaXRTZWwuc2l6ZSgpO2krKykgewotICAgICAgICAgIE9iamVjdCBvYmogPSBpdGVyLm5leHQoKTsKLSAgICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgU2VydmljZVJlZil7Ci0gICAgICAgICAgICAgIHNlcnZpY2VSZWZzW2ldID0gKFNlcnZpY2VSZWYpb2JqOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlewotICAgICAgICAgICAgICBlcnJvclN0YXR1c01zZ18gPSBDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX0lOVkFMSURfTVVMVElQTEVfU0VSVklDRV9TRUxFQ1Q7Ci0gICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiBzZXJ2aWNlUmVmczsKLX0KLQotICBwcml2YXRlIENvbGxlY3Rpb24gZ2V0V1NTZXJ2aWNlUmVmc0Zyb21TZWxlY3Rpb24oKSB7Ci0KLSAgICBJU3RydWN0dXJlZFNlbGVjdGlvbiBpbml0U2VsID0gZ2V0SW5pdGlhbFNlbGVjdGlvbigpOwotICAgIGlmIChpbml0U2VsICE9IG51bGwgJiYgaW5pdFNlbC5zaXplKCkgPT0gMSkgewotICAgICAgT2JqZWN0IG9iaiA9IGluaXRTZWwuZ2V0Rmlyc3RFbGVtZW50KCk7Ci0gICAgICBTZXJ2aWNlUmVmIHNlcnZpY2VSZWYgPSBudWxsOwotICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIFNlcnZpY2VSZWYpIHsKLSAgICAgICAgLy8gQ2xpZW50IFNlcnZpY2VSZWYKLSAgICAgICAgc2VydmljZVJlZiA9IChTZXJ2aWNlUmVmKSBvYmo7Ci0gICAgICAgIHNlcnZpY2VSZWZOYW1lXyA9IHNlcnZpY2VSZWYuZ2V0U2VydmljZVJlZk5hbWUoKTsKLSAgICAgICAgcHJvamVjdF8gPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3Qoc2VydmljZVJlZik7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBXZWJTZXJ2aWNlTmF2aWdhdG9yR3JvdXBUeXBlKSB7Ci0gICAgICAgIFdlYlNlcnZpY2VOYXZpZ2F0b3JHcm91cFR5cGUgd3NuZ3QgPSAoV2ViU2VydmljZU5hdmlnYXRvckdyb3VwVHlwZSkgb2JqOwotICAgICAgICBzZXJ2aWNlUmVmID0gd3NuZ3QuZ2V0U2VydmljZVJlZigpOwotICAgICAgICBzZXJ2aWNlUmVmTmFtZV8gPSBzZXJ2aWNlUmVmLmdldFNlcnZpY2VSZWZOYW1lKCk7Ci0gICAgICAgIHByb2plY3RfID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHNlcnZpY2VSZWYpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgSUZpbGUpewotICAgICAgICAgIFJlc291cmNlIHJlcyA9IFdvcmtiZW5jaFJlc291cmNlSGVscGVyQmFzZS5nZXRSZXNvdXJjZSgoSUZpbGUpb2JqLCB0cnVlKTsKLSAgICAgICAgICBDb2xsZWN0aW9uIHNlcnZpY2VSZWZzID0gbnVsbDsKLSAgICAgICAgICBpZiAocmVzIGluc3RhbmNlb2YgV2ViU2VydmljZXNSZXNvdXJjZSkgewotICAgICAgICAgICAgICAvLyB3ZWJzZXJ2aWNlc2NsaWVudC54bWwgZm9yIEoyRUUgMS4zCi0gICAgICAgICAgICAgIFdlYlNlcnZpY2VzUmVzb3VyY2Ugd3NSZXMgPSAoV2ViU2VydmljZXNSZXNvdXJjZSlyZXM7Ci0gICAgICAgICAgICAgIHNlcnZpY2VSZWZzID0gd3NSZXMuZ2V0V2ViU2VydmljZXNDbGllbnQoKS5nZXRTZXJ2aWNlUmVmcygpOwotICAgICAgICAgICAgICBpZiAoIXNlcnZpY2VSZWZzLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIFNlcnZpY2VSZWYgcmVmID0gKFNlcnZpY2VSZWYpKChMaXN0KXNlcnZpY2VSZWZzKS5nZXQoMCk7Ci0gICAgICAgICAgICAgICAgc2VydmljZVJlZk5hbWVfID0gcmVmLmdldFNlcnZpY2VSZWZOYW1lKCk7Ci0gICAgICAgICAgICAgICAgcHJvamVjdF8gPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QocmVmKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gc2VydmljZVJlZnM7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICBpZihyZXMgaW5zdGFuY2VvZiBXZWJBcHBSZXNvdXJjZSl7Ci0gICAgICAgICAgICAgICAgICAvLyB3ZWIueG1sIGZvciBKMkVFIDEuNAotICAgICAgICAgICAgICAgICAgV2ViQXBwUmVzb3VyY2Ugd2ViQXBwUmVzID0gKFdlYkFwcFJlc291cmNlKXJlczsKLSAgICAgICAgICAgICAgICAgIHNlcnZpY2VSZWZzID0gd2ViQXBwUmVzLmdldFdlYkFwcCgpLmdldFNlcnZpY2VSZWZzKCk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZWxzZSBpZiAocmVzIGluc3RhbmNlb2YgRUpCUmVzb3VyY2UpewotICAgICAgICAgICAgICAgICAgRUpCUmVzb3VyY2UgZWpiUmVzID0gKEVKQlJlc291cmNlKXJlczsKLSAgICAgICAgICAgICAgICAgIHNlcnZpY2VSZWZzID0gd2ViU2VydmljZXNNYW5hZ2VyXy5nZXRTZXJ2aWNlUmVmcyhlamJSZXMuZ2V0RUpCSmFyKCkpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGVsc2UgaWYgKHJlcyBpbnN0YW5jZW9mIEFwcGxpY2F0aW9uQ2xpZW50UmVzb3VyY2UpewotICAgICAgICAgICAgICAgICAgQXBwbGljYXRpb25DbGllbnRSZXNvdXJjZSBhcHBDbGllbnRSZXMgPSAoQXBwbGljYXRpb25DbGllbnRSZXNvdXJjZSlyZXM7Ci0gICAgICAgICAgICAgICAgICBzZXJ2aWNlUmVmcyA9IHdlYlNlcnZpY2VzTWFuYWdlcl8uZ2V0U2VydmljZVJlZnMoYXBwQ2xpZW50UmVzLmdldEFwcGxpY2F0aW9uQ2xpZW50KCkpOy8vYXBwQ2xpZW50UmVzLmdldEFwcGxpY2F0aW9uQ2xpZW50KCkuZ2V0U2VydmljZVJlZnMoKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBpZiAoc2VydmljZVJlZnMhPW51bGwgJiYgc2VydmljZVJlZnMuc2l6ZSgpPjApIHsKLSAgICAgICAgICAgICAgICAgIFNlcnZpY2VSZWYgcmVmID0gKFNlcnZpY2VSZWYpKChMaXN0KXNlcnZpY2VSZWZzKS5nZXQoMCk7Ci0gICAgICAgICAgICAgICAgICBzZXJ2aWNlUmVmTmFtZV8gPSByZWYuZ2V0U2VydmljZVJlZk5hbWUoKTsKLSAgICAgICAgICAgICAgICAgIHByb2plY3RfID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHJlZik7IAotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIHJldHVybiBzZXJ2aWNlUmVmczsgICAgICAgICAgICAgIAotICAgICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8gVGhpcyBzZWN0aW9uIGlzIGZvciBvYnRhaW5pbmcgYWxsIHRoZSBzZXJ2aWNlUmVmcyBmcm9tIHRoZSBwcm9qZWN0LCBnaXZlbiB0aGF0IHRoZSBpbml0aWFsIHNlbGVjdGlvbgotICAgICAgLy8gd2FzIGZyb20gdGhlIEoyRUUgdmlldyAoU2VydmljZVJlZiBvciBXZWJTZXJ2aWNlTmF2aWdhdG9yR3JvdXBUeXBlKSwgaXQgd2lsbCBzZWxlY3QgdGhlIHJpZ2h0IHNlcnZpY2VSZWYKLSAgICAgIGlmIChwcm9qZWN0Xz09bnVsbCl7Ci0gICAgICAgIHByb2plY3RfID0gZ2V0UHJvamVjdCgpOwotICAgICAgfQotICAgICAgaWYgKHByb2plY3RfPT1udWxsKXsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9ICAgICAKLSAgICAgICAKLSAgICAgIGlmIChKMkVFVXRpbHMuaXNXZWJDb21wb25lbnQocHJvamVjdF8pKSB7Ci0gICAgICAgIFdlYkFydGlmYWN0RWRpdCB3ZWJFZGl0ID0gbnVsbDsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICBJVmlydHVhbENvbXBvbmVudCB2YyA9IENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KHByb2plY3RfKTsgICAgICAgICAgCi0gICAgICAgICAgd2ViRWRpdCA9IFdlYkFydGlmYWN0RWRpdC5nZXRXZWJBcnRpZmFjdEVkaXRGb3JSZWFkKHZjKTsKLSAgICAgICAgICBpZiAod2ViRWRpdCAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFdlYkFwcCB3ZWJBcHAgPSAoV2ViQXBwKSB3ZWJFZGl0LmdldERlcGxveW1lbnREZXNjcmlwdG9yUm9vdCgpOwotICAgICAgICAgICAgaWYgKHdlYkFwcCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgIHJldHVybiB3ZWJTZXJ2aWNlc01hbmFnZXJfLmdldFNlcnZpY2VSZWZzKHdlYkFwcCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGZpbmFsbHl7Ci0gICAgICAgICAgaWYod2ViRWRpdCE9bnVsbCkKLSAgICAgICAgICAgIHdlYkVkaXQuZGlzcG9zZSgpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChKMkVFVXRpbHMuaXNFSkJDb21wb25lbnQocHJvamVjdF8pKXsKLQotICAgIAlJVmlydHVhbENvbXBvbmVudCB2YyA9IENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KHByb2plY3RfKTsKLSAgICAJRUpCSmFyIGVqYkphciA9IEVKQkFydGlmYWN0RWRpdFV0aWxpdGllcy5nZXRFSkJKYXIodmMpOwotICAgICAgICBpZiAoZWpiSmFyIT1udWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gd2ViU2VydmljZXNNYW5hZ2VyXy5nZXRTZXJ2aWNlUmVmcyhlamJKYXIpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChKMkVFVXRpbHMuaXNBcHBDbGllbnRDb21wb25lbnQocHJvamVjdF8pKXsKLSAgICAJICBJVmlydHVhbENvbXBvbmVudCB2YyA9IENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KHByb2plY3RfKTsKLSAgICAJICBBcHBDbGllbnRBcnRpZmFjdEVkaXQgYXBwRWRpdCA9IG51bGw7Ci0gICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgYXBwRWRpdCA9IEFwcENsaWVudEFydGlmYWN0RWRpdC5nZXRBcHBDbGllbnRBcnRpZmFjdEVkaXRGb3JSZWFkKHZjKTsKLSAgICAgICAgICBpZiAoYXBwRWRpdCE9bnVsbCl7Ci0gICAgICAgICAgICAgIEFwcGxpY2F0aW9uQ2xpZW50IGFwcENsaWVudCA9IGFwcEVkaXQuZ2V0QXBwbGljYXRpb25DbGllbnQoKTsKLSAgICAgICAgICAgICAgaWYgKGFwcENsaWVudCAhPW51bGwpewotICAgICAgICAgICAgICAgICAgcmV0dXJuIHdlYlNlcnZpY2VzTWFuYWdlcl8uZ2V0U2VydmljZVJlZnMoYXBwQ2xpZW50KTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgZmluYWxseXsKLSAgICAgICAgICAgICAgaWYoYXBwRWRpdCE9bnVsbCl7Ci0gICAgICAgICAgICAgICAgICBhcHBFZGl0LmRpc3Bvc2UoKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgIH0KLQotICAgIAotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBDb2xsZWN0aW9uIGdldFdzU2VydmljZVJlZnMoKXsKLSAgICByZXR1cm4gdGhpcy53c1NlcnZpY2VSZWZzXzsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGdldElzTXVsdGlwbGVTZWxlY3Rpb24oKXsKLSAgICAgIHJldHVybiB0aGlzLmlzTXVsdGlwbGVTZWxlY3Rpb25fOwotICB9Ci0gIAotICBwdWJsaWMgSGFuZGxlclNlcnZpY2VSZWZIb2xkZXJbXSBnZXRIYW5kbGVyU2VydmljZVJlZkhvbGRlcigpewotICAgIHJldHVybiB0aGlzLmhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyXzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL0NsaWVudEhhbmRsZXJzV2lkZ2V0T3V0cHV0Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL0NsaWVudEhhbmRsZXJzV2lkZ2V0T3V0cHV0Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Y2VlMThhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9DbGllbnRIYW5kbGVyc1dpZGdldE91dHB1dENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MDQgMTM0OTEzICAgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1ICAKLSAqIDIwMDYwNTE3ICAgMTQyMzM5IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuSmF2YUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmFwcGxpY2F0aW9uY2xpZW50LmNvbXBvbmVudGNvcmUudXRpbC5BcHBDbGllbnRBcnRpZmFjdEVkaXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuZWpiLmNvbXBvbmVudGNvcmUudXRpbC5FSkJBcnRpZmFjdEVkaXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2ViLmNvbXBvbmVudGNvcmUudXRpbC5XZWJBcnRpZmFjdEVkaXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2NsaWVudC5IYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NjbGllbnQuU2VydmljZVJlZjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzY2xpZW50LldlYnNlcnZpY2VfY2xpZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzY2xpZW50LmludGVybmFsLmltcGwuV2Vic2VydmljZV9jbGllbnRGYWN0b3J5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkphdmFNT0ZVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tb24uSGFuZGxlclNlcnZpY2VSZWZIb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0LkhhbmRsZXJUYWJsZUl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5BcnRpZmFjdEVkaXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmludGVybmFsLmVtZi51dGlsaXRpZXMuRXRvb2xzQ29weVV0aWxpdHk7Ci0KLS8qCi0gKiBQcm92aWRlIGEgd2F5IHRvIGV4dGVybmFsaXplIHRoZSBlZGl0ZWQgZmllbGRzIGFuZCBjcmVhdGUgbmV3IGhhbmRsZXJzCi0gKiAgCi0gKi8KLXB1YmxpYyBjbGFzcyBDbGllbnRIYW5kbGVyc1dpZGdldE91dHB1dENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiAKLXsKLQotICBwcml2YXRlIEhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyW10gaGFuZGxlclNlcnZpY2VSZWZIb2xkZXJfOwotICBwcml2YXRlIEhhc2h0YWJsZSBvbGRXU1NlcnZpY2VSZWZzVG9IYW5kbGVyc1RhYmxlXzsKLSAgcHJpdmF0ZSBIYXNodGFibGUgbmV3V1NTZXJ2aWNlUmVmc1RvSGFuZGxlcnNUYWJsZV87Ci0gIHByaXZhdGUgSVByb2plY3QgcHJvamVjdF87Ci0gIHByaXZhdGUgYm9vbGVhbiBpc011bHRpcGxlU2VsZWN0aW9uXzsKLQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgewotICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLQotICAgIHRyeSB7Ci0gICAgICAKLSAgICAgIGlmIChpc011bHRpcGxlU2VsZWN0aW9uXykgewotICAgICAgICBpZiAoaGFuZGxlclNlcnZpY2VSZWZIb2xkZXJfICE9IG51bGwpIHsKLSAgICAgICAgICAvLyBhZGQgbmV3IGhhbmRsZXIgdG8gaW50ZXJuYWwgbW9kZWwgaWYgaXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0Ci0gICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBoYW5kbGVyU2VydmljZVJlZkhvbGRlcl8ubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIGhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyX1tpXS5hZGRIYW5kbGVyVG9TZXJ2aWNlUmVmKCk7Ci0gICAgICAgICAgICBzYXZlRWRpdE1vZGVsKGhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyX1tpXS5nZXRQcm9qZWN0KCkpOwotICAgICAgICAgIH0KLSAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICBvbGRXU1NlcnZpY2VSZWZzVG9IYW5kbGVyc1RhYmxlXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICAgICAgbmV3V1NTZXJ2aWNlUmVmc1RvSGFuZGxlcnNUYWJsZV8gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoaGFuZGxlclNlcnZpY2VSZWZIb2xkZXJfICE9IG51bGwpIHsKLSAgCi0gICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBoYW5kbGVyU2VydmljZVJlZkhvbGRlcl8ubGVuZ3RoOyBpKyspIHsKLSAgCi0gICAgICAgICAgICBTZXJ2aWNlUmVmIHdzU2VydmljZVJlZiA9aGFuZGxlclNlcnZpY2VSZWZIb2xkZXJfW2ldLmdldFNlcnZpY2VSZWYoKTsgCi0gICAgICAgIAotICAgICAgICAgICAgTGlzdCB3c0hhbmRsZXJzID0gd3NTZXJ2aWNlUmVmLmdldEhhbmRsZXJzKCk7Ci0gICAgICAgICAgICBvbGRXU1NlcnZpY2VSZWZzVG9IYW5kbGVyc1RhYmxlXy5wdXQod3NTZXJ2aWNlUmVmLCB3c0hhbmRsZXJzKTsKLSAgICAgICAgICAgIG5ld1dTU2VydmljZVJlZnNUb0hhbmRsZXJzVGFibGVfLnB1dCh3c1NlcnZpY2VSZWYsIG5ldyBBcnJheUxpc3QoKSk7Ci0gICAgICAgICAgfQotICAKLSAgICAgICAgICAvL0VudW1lcmF0aW9uIGUgPSBoYW5kbGVyc1RhYmxlXy5rZXlzKCk7Ci0gICAgICAgICAgZm9yIChpbnQgaj0wO2o8aGFuZGxlclNlcnZpY2VSZWZIb2xkZXJfLmxlbmd0aDtqKyspIHsKLQotICAgICAgICAgICAgTGlzdCBoYW5kbGVyVGFibGVJdGVtc18gPSAgaGFuZGxlclNlcnZpY2VSZWZIb2xkZXJfW2pdLmdldEhhbmRsZXJMaXN0KCk7Ci0gICAgICAgICAgICBpZiAoaGFuZGxlclRhYmxlSXRlbXNfICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgLy8gZm9ybSBIYW5kbGVyIHRhYmxlcwotICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGhhbmRsZXJUYWJsZUl0ZW1zXy5zaXplKCk7IGkrKykgewotICAKLSAgICAgICAgICAgICAgICBIYW5kbGVyVGFibGVJdGVtIGh0aSA9IChIYW5kbGVyVGFibGVJdGVtKSBoYW5kbGVyVGFibGVJdGVtc18uZ2V0KGkpOwotICAgICAgICAgICAgICAgIE9iamVjdCB3c01vZGVsUmVmID0gaHRpLmdldFdzRGVzY1JlZigpOwotICAgICAgICAgICAgICAgIGlmICh3c01vZGVsUmVmICE9IG51bGwgJiYgd3NNb2RlbFJlZiBpbnN0YW5jZW9mIFNlcnZpY2VSZWYpIHsKLSAgICAgICAgICAgICAgICAgIFNlcnZpY2VSZWYgd3NSZWYgPSAoU2VydmljZVJlZikgd3NNb2RlbFJlZjsKLSAgCi0gICAgICAgICAgICAgICAgICBPYmplY3QgaGFuZGxlciA9IGh0aS5nZXRIYW5kbGVyKCk7Ci0gICAgICAgICAgICAgICAgICBpZiAoaGFuZGxlciAhPSBudWxsICYmIGhhbmRsZXIgaW5zdGFuY2VvZiBIYW5kbGVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGNsb25lIGl0Ci0gICAgICAgICAgICAgICAgICAgIEhhbmRsZXIgY2xvbmVkSGFuZGxlciA9IChIYW5kbGVyKSBFdG9vbHNDb3B5VXRpbGl0eS5jcmVhdGVDb3B5KChIYW5kbGVyKSBoYW5kbGVyKTsKLSAgICAgICAgICAgICAgICAgICAgKChMaXN0KSBuZXdXU1NlcnZpY2VSZWZzVG9IYW5kbGVyc1RhYmxlXy5nZXQod3NSZWYpKS5hZGQoY2xvbmVkSGFuZGxlcik7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gY3JlYXRlIGl0Ci0gICAgICAgICAgICAgICAgICAgIFdlYnNlcnZpY2VfY2xpZW50RmFjdG9yeSB3c0NsaWVudEZhY3RvcnkgPSBuZXcgV2Vic2VydmljZV9jbGllbnRGYWN0b3J5SW1wbCgpOwotICAgICAgICAgICAgICAgICAgICBIYW5kbGVyIG5ld0hhbmRsZXIgPSB3c0NsaWVudEZhY3RvcnkuY3JlYXRlSGFuZGxlcigpOwotICAgICAgICAgICAgICAgICAgICBuZXdIYW5kbGVyLnNldEhhbmRsZXJOYW1lKGh0aS5nZXRIYW5kbGVyTmFtZSgpKTsKLSAgCi0gICAgICAgICAgICAgICAgICAgIEphdmFDbGFzcyBqYXZhQ2xhc3MgPSBKYXZhTU9GVXRpbHMuZ2V0SmF2YUNsYXNzKGh0aS5nZXRIYW5kbGVyQ2xhc3NOYW1lKCksIHByb2plY3RfKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGphdmFDbGFzcyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgbmV3SGFuZGxlci5zZXRIYW5kbGVyQ2xhc3MoamF2YUNsYXNzKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAKLSAgICAgICAgICAgICAgICAgICAgKChMaXN0KSBuZXdXU1NlcnZpY2VSZWZzVG9IYW5kbGVyc1RhYmxlXy5nZXQod3NSZWYpKS5hZGQobmV3SGFuZGxlcik7Ci0gICAgICAgICAgICAgICAgICB9Ci0gIAotICAgICAgICAgICAgICAgIH0KLSAgCi0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gCi0gICAgICAgICAgLy8gYWRkIGhhbmRsZXJzIHRvIHBvcnRzCi0gICAgICAgICAgYWRkSGFuZGxlcnNUb1NlcnZpY2VSZWZzKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIHNhdmUgdGhlIGFydGlmYWN0IGVkaXQgbW9kZWwKLSAgICAgICAgc2F2ZUVkaXRNb2RlbCgpOwotICAgICAgfQotICAgICAgCi0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkgCi0gICAgewotICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfVEFTS19FWENFUFRFRCwgZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN0YXR1czsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBzYXZlRWRpdE1vZGVsKCkgewotICAgICAgQXJ0aWZhY3RFZGl0IGFydGlmYWN0RWRpdCA9IG51bGw7Ci0gICAgICB0cnkgewotICAgICAgICAgIGlmIChKMkVFVXRpbHMuaXNXZWJDb21wb25lbnQocHJvamVjdF8pKSB7Ci0gICAgICAgICAgICAgICAgYXJ0aWZhY3RFZGl0ID0gV2ViQXJ0aWZhY3RFZGl0LmdldFdlYkFydGlmYWN0RWRpdEZvcldyaXRlKHByb2plY3RfKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZiAoSjJFRVV0aWxzLmlzRUpCQ29tcG9uZW50KHByb2plY3RfKSl7Ci0gICAgICAgICAgICAgICAgYXJ0aWZhY3RFZGl0ID0gRUpCQXJ0aWZhY3RFZGl0LmdldEVKQkFydGlmYWN0RWRpdEZvcldyaXRlKHByb2plY3RfKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIGlmIChKMkVFVXRpbHMuaXNBcHBDbGllbnRDb21wb25lbnQocHJvamVjdF8pKXsKLSAgICAgICAgICAgICAgICBhcnRpZmFjdEVkaXQgPSBBcHBDbGllbnRBcnRpZmFjdEVkaXQuZ2V0QXBwQ2xpZW50QXJ0aWZhY3RFZGl0Rm9yV3JpdGUocHJvamVjdF8pOwotICAgICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGZpbmFsbHkgewotICAgICAgICAgIGlmIChhcnRpZmFjdEVkaXQhPW51bGwpIHsKLSAgICAgICAgICAgICAgYXJ0aWZhY3RFZGl0LnNhdmUobnVsbCk7Ci0gICAgICAgICAgICAgIGFydGlmYWN0RWRpdC5kaXNwb3NlKCk7Ci0gICAgICAgICAgfQotICAgICAgfQotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgc2F2ZUVkaXRNb2RlbChJUHJvamVjdCBwcm9qZWN0KXsKLQkgIHByb2plY3RfID0gcHJvamVjdDsKLQkgIHNhdmVFZGl0TW9kZWwoKTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGFkZEhhbmRsZXJzVG9TZXJ2aWNlUmVmcygpIHsKLSAgICB0cnkgewotICAgICAgRW51bWVyYXRpb24gcmVmc1RvSGFuZGxlcnMgPSBuZXdXU1NlcnZpY2VSZWZzVG9IYW5kbGVyc1RhYmxlXy5rZXlzKCk7Ci0gICAgICB3aGlsZSAocmVmc1RvSGFuZGxlcnMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgICAgU2VydmljZVJlZiBzZXJ2aWNlUmVmID0gKFNlcnZpY2VSZWYpIHJlZnNUb0hhbmRsZXJzLm5leHRFbGVtZW50KCk7Ci0gICAgICAgIGlmIChzZXJ2aWNlUmVmICE9IG51bGwpIHsKLSAgICAgICAgICBMaXN0IGhhbmRsZXJzID0gKExpc3QpIG5ld1dTU2VydmljZVJlZnNUb0hhbmRsZXJzVGFibGVfLmdldChzZXJ2aWNlUmVmKTsKLSAgICAgICAgICBMaXN0IG1vZGVsSGFuZGxlcnMgPSAoTGlzdCkgb2xkV1NTZXJ2aWNlUmVmc1RvSGFuZGxlcnNUYWJsZV8uZ2V0KHNlcnZpY2VSZWYpOwotICAgICAgICAgIG1vZGVsSGFuZGxlcnMuY2xlYXIoKTsKLSAgICAgICAgICBtb2RlbEhhbmRsZXJzLmFkZEFsbChoYW5kbGVycyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLSAgfQotCi0KLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50UHJvamVjdChJUHJvamVjdCBwcm9qZWN0KSB7Ci0gICAgdGhpcy5wcm9qZWN0XyA9IHByb2plY3Q7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBBbiBhcnJheSBvZiBIYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJzCi0gICAqIEByZXR1cm4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyKEhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyW10gaGFuZGxlckhvbGRlcnMpewotICAgIHRoaXMuaGFuZGxlclNlcnZpY2VSZWZIb2xkZXJfID0gaGFuZGxlckhvbGRlcnM7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldElzTXVsdGlwbGVTZWxlY3Rpb24oYm9vbGVhbiBpc011bGl0cGxlU2VsZWN0aW9uKSB7Ci0gICAgdGhpcy5pc011bHRpcGxlU2VsZWN0aW9uXyA9IGlzTXVsaXRwbGVTZWxlY3Rpb247Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL0NsaWVudFdpemFyZFdpZGdldC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL0NsaWVudFdpemFyZFdpZGdldC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTk3Mjk3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9DbGllbnRXaXphcmRXaWRnZXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUyNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MDcgICAxMzU0MTUgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDQxNyAgIDEzNjM5MC8xMzYxNTkgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA0MTMgICAxMzU1ODEgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDQyMCAgIDEzNTkxMiBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDQyNCAgIDEzODA1MiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA0MjUgICAxMzc4MzEgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDUwOSAgIDExOTI5NiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA2MDUyOSAgIDE0MTQyMiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA2MTIgICAxNDUwODEgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNjA3MjUgICAxNDkzNTEgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIERlbGV0ZWQgc2VydmljZSBkZWZpbml0aW9uIGtlZXBzIHJlYXBwZWFyaW5nCi0gKiAyMDA2MDgwMyAgIDE1MjQ4NiBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgVHlwaW5nIFdTREwgaW4gU2VydmljZSBkZWZpbml0aW9uIGZpZWxkIGlzIHZlcnkgc2xvdwotICogMjAwNjA4MTcgICAxNDAwMTcgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIGxvbmdlciBwcm9qZWN0IG9yIHNlcnZlci9ydW50aW1lIHN0cmluZ3MgZG8gbm90IHJlc2l6ZSB3aXphcmQKLSAqIDIwMDYwODI1ICAgMTM1NTcwIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBTZXJ2aWNlIGltcGxlbWVudGF0aW9uIFVSTCBub3QgZGlzcGxheWVkIHByb3Blcmx5IG9uIGZpcnN0IHBhZ2UKLSAqIDIwMDYwODI5ICAgMTU1NDQxIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCB3ZWIgc2VydmljZSB3aXphcmQgaGFuZ3MgZHVyaW5nIHJlc2l6ZQotICogMjAwNjA5MDcgICAxNTYyMTEgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFNlbGVjdGluZyBzZXJ2aWNlIGRlZmluaXRpb24gaW52YWxpZGF0ZWQgcHJvamVjdCBjb25maWcgd2hlbiBjcmVhdGluZyB3ZWIgc2VydmljZSBqYXZhIGNsaWVudAotICogMjAwNjEyMTIgICAxNTk5MTEgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIGNoYW5naW5nIHNlcnZpY2UgZGVmaW5pdGlvbiByZXNldHMgc29tZSBjb25maWd1cmF0aW9uIGZpZWxkcwotICogMjAwNjAxMjUgICAxNTk5MTEga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4sIFJlbW92ZSB1bnVzZWQgbWV0aG9kIGFuZCBpbXBvcnRzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uV1NETFBhcnNlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbWFuZC5kYXRhLkVjbGlwc2VJUGF0aDJVUkxTdHJpbmdUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbW9uLlZhbGlkYXRpb25VdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuVGltZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmRhdGEuVHlwZVJ1bnRpbWVTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnBsdWdpbi5XZWJTZXJ2aWNlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5jb21tb24uVUlVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLlBhZ2VJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLlNpbXBsZVdpZGdldERhdGFDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0RGF0YUV2ZW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci0KLQotcHVibGljIGNsYXNzIENsaWVudFdpemFyZFdpZGdldCBleHRlbmRzIFNpbXBsZVdpZGdldERhdGFDb250cmlidXRvciBpbXBsZW1lbnRzIFJ1bm5hYmxlCi17ICAKLSAgcHJpdmF0ZSBXZWJTZXJ2aWNlQ2xpZW50VHlwZVdpZGdldCBjbGllbnRXaWRnZXRfOwotICBwcml2YXRlIEJ1dHRvbiBvdmVyd3JpdGVCdXR0b25fOwotICBwcml2YXRlIEJ1dHRvbiBtb25pdG9yU2VydmljZV87Ci0KLSAgcHJpdmF0ZSBUZXh0IHNlcnZpY2VJbXBsXzsKLSAgcHJpdmF0ZSBCdXR0b24gYnJvd3NlQnV0dG9uXzsKLSAgcHJpdmF0ZSBXU0RMU2VsZWN0aW9uRGlhbG9nIHdzZGxEaWFsb2dfOwotICBwcml2YXRlIFN0cmluZyBjb21wb25lbnROYW1lXzsKLSAgcHJpdmF0ZSBJUHJvamVjdCBwcm9qZWN0XzsKLSAgcHJpdmF0ZSBTdHJpbmcgd2ViU2VydmljZVVSSV87Ci0gIHByaXZhdGUgV2ViU2VydmljZXNQYXJzZXIgcGFyc2VyXzsKLSAgcHJpdmF0ZSBSZXNvdXJjZUNvbnRleHQgcmVzb3VyY2VDb250ZXh0XzsKLSAgCi0gIHByaXZhdGUgTGlzdGVuZXIgc3RhdHVzTGlzdGVuZXJfOwotICBwcml2YXRlIE1vZGlmeUxpc3RlbmVyIG9iamVjdE1vZGlmeUxpc3RlbmVyXyA7Ci0gIHByaXZhdGUgaW50IHZhbGlkYXRpb25TdGF0ZV87Ci0gIHByaXZhdGUgYm9vbGVhbiB2YWxpZE9iamVjdFNlbGVjdGlvbl8gPSB0cnVlOwotICBwcml2YXRlIFdTRExTZWxlY3Rpb25XaWRnZXRXcmFwcGVyIHdzZGxWYWxpZGF0b3JXaWRnZXRfOwotCi0gIHByaXZhdGUgVGltZXIgdGltZXJfID0gbnVsbDsKLSAgCi0gIC8qIENPTlRFWFRfSUQgV1NXU0NFTjAwMjAgZm9yIHRoZSBTZXJ2aWNlIEltcGxlbWVuYXRpb24gdGV4dCBmaWVsZCBvZiB0aGUgU2NlbmFyaW8gUGFnZSAqLwotCSBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1dTV1NDRU5fVEVYVF9TRVJWSUNFX0lNUEwgPSAiV1NXU0NFTjAwMjAiOwotCi0gIAotICAvKiBDT05URVhUX0lEIFdTV1NDRU4wMDE0IGZvciB0aGUgbW9uaXRvciBzZXJ2aWNlIGNoZWNrYm94IG9mIHRoZSBTY2VuYXJpbyBwYWdlICovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfV1NXU0NFTl9DSEVDS0JPWF9NT05JVE9SX1NFUlZJQ0UgPSAiV1NXU0NFTjAwMTQiOwkKLSAgLyogQ09OVEVYVF9JRCBXU1dTQ0VOMDAzMCBmb3IgdGhlIE92ZXJ3cml0ZSBGaWxlcyBjaGVja2JveCBvZiB0aGUgU2NlbmFyaW8gUGFnZSAqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1dTV1NDRU5fQ0hFQ0tCT1hfT1ZFUldSSVRFID0gIldTV1NDRU4wMDMwIjsJCi0gIC8qIENPTlRFWFRfSUQgV1NXU0NFTjAwMDEgZm9yIHRoZSBTY2VuYXJpbyBQYWdlICovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfV1NXU0NFTl9QQUdFID0gIldTV1NDRU4wMDAxIjsKLSAgCi0gIC8qKgotICAgKiBSdW4gdGhpcyBDbGllbnRXaXphcmRXaWRnZXQsIHdoaWNoIHZhbGlkYXRlcyB0aGUgZW50cnkgZmllbGQgdmFsdWVzLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJ1bigpIHsKLQkgIHZhbGlkYXRpb25TdGF0ZV8gPSBWYWxpZGF0aW9uVXRpbHMuVkFMSURBVEVfQUxMOwotCSAgc3RhdHVzTGlzdGVuZXJfLmhhbmRsZUV2ZW50KG51bGwpOwotCSAgaWYgKHZhbGlkT2JqZWN0U2VsZWN0aW9uXykKLQkJICBjYWxsT2JqZWN0VHJhbnNmb3JtYXRpb24ocHJvamVjdF8sIAotCQkJCSAgd3NkbFZhbGlkYXRvcldpZGdldF8uZ2V0Q29tcG9uZW50TmFtZSgpLCAKLQkJCQkgIHdzZGxWYWxpZGF0b3JXaWRnZXRfLmdldFdzZGxVUkkoKSk7CSAgCi0gIH0KLSAgCi0gIHB1YmxpYyBXaWRnZXREYXRhRXZlbnRzIGFkZENvbnRyb2xzKCBDb21wb3NpdGUgcGFyZW50LCBMaXN0ZW5lciBzdGF0dXNMaXN0ZW5lcikKLSAgewotICAgIFN0cmluZyAgICAgICBwbHVnaW5JZCA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkiOwotICAgIFVJVXRpbHMgICAgICB1dGlscyAgICA9IG5ldyBVSVV0aWxzKCBwbHVnaW5JZCApOwotICAgIHV0aWxzLmNyZWF0ZUluZm9Qb3AocGFyZW50LCBJTkZPUE9QX1dTV1NDRU5fUEFHRSk7Ci0KLSAgICBzdGF0dXNMaXN0ZW5lcl8gPSBzdGF0dXNMaXN0ZW5lcjsKLQl2YWxpZGF0aW9uU3RhdGVfID0gVmFsaWRhdGlvblV0aWxzLlZBTElEQVRFX0FMTDsKLSAgCS8vIENyZWF0ZSB0ZXh0IGZpZWxkIGFuZCBicm93c2UgZm9yIHNlcnZpY2Ugc2VsZWN0aW9uCi0gIAlDb21wb3NpdGUgdHlwZUNvbXBvc2l0ZSA9IHV0aWxzLmNyZWF0ZUNvbXBvc2l0ZShwYXJlbnQsIDMpOwotCXNlcnZpY2VJbXBsXyA9IHV0aWxzLmNyZWF0ZVRleHQodHlwZUNvbXBvc2l0ZSwgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1dFQlNFUlZJQ0VERUYsIAotCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9URVhUX0lNUEwsCi0JCQlJTkZPUE9QX1dTV1NDRU5fVEVYVF9TRVJWSUNFX0lNUEwsIFNXVC5MRUZUIHwgU1dULkJPUkRFUiApOwotCQotCW9iamVjdE1vZGlmeUxpc3RlbmVyXyA9IG5ldyBNb2RpZnlMaXN0ZW5lcigpewotCQlwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpIHsKLQkJCWlmIChzZXJ2aWNlSW1wbF8uZ2V0VGV4dCgpLmluZGV4T2YoJzonKSA+IDApIHsKLQkJICAgICAgICB0aW1lcl8gPSBUaW1lci5uZXdJbnN0YW5jZSh0aW1lcl8sIERpc3BsYXkuZ2V0Q3VycmVudCgpLCBDbGllbnRXaXphcmRXaWRnZXQudGhpcyk7Ci0JCSAgICAgICAgdGltZXJfLnN0YXJ0VGltZXIoKTsKLQkJCX0KLQkJICAgIGVsc2UKLQkJICAgICAgICBydW4oKTsKLQkJfQotCX07Ci0JCi0Jc2VydmljZUltcGxfLmFkZE1vZGlmeUxpc3RlbmVyKG9iamVjdE1vZGlmeUxpc3RlbmVyXyk7Ci0JCi0JYnJvd3NlQnV0dG9uXyA9IHV0aWxzLmNyZWF0ZVB1c2hCdXR0b24odHlwZUNvbXBvc2l0ZSwKLQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5CVVRUT05fQlJPV1NFLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX0JVVFRPTl9CUk9XU0VfSU1QTCwgbnVsbCk7Ci0JCi0JSVdvcmtiZW5jaCB3b3JrYmVuY2ggPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpOwotICAgIHdzZGxEaWFsb2dfID0gbmV3IFdTRExTZWxlY3Rpb25EaWFsb2cod29ya2JlbmNoLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldFNoZWxsKCksIAotCQkgIAkJCQkJCW5ldyBQYWdlSW5mbyhDb25zdW1wdGlvblVJTWVzc2FnZXMuRElBTE9HX1RJVElMRV9TRVJWSUNFX0lNUExfU0VMRUNUSU9OLCAiIiwgCi0JCSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKQotCQkgIAkJCQkJCXsJCi0JCSAgCQkJCQkJCXB1YmxpYyBXaWRnZXRDb250cmlidXRvciBjcmVhdGUoKQotCQkgIAkJCQkJCQl7CSAgCQkJCQkJIAotCQkgIAkJCQkJCQkgICByZXR1cm4gbmV3IFdTRExTZWxlY3Rpb25XaWRnZXRXcmFwcGVyKCk7Ci0JCSAgCQkJCQkJCX0KLQkJICAJCQkJCQl9KSk7CQkKLQlicm93c2VCdXR0b25fLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBXU0RMQnJvd3NlTGlzdGVuZXIoKSk7Ci0JCi0JdXRpbHMuY3JlYXRlSG9yaXpvbnRhbFNlcGFyYXRvcihwYXJlbnQsIDEpOwotCQotCUNvbXBvc2l0ZSBjbGllbnRDb21wb3NpdGUgPSB1dGlscy5jcmVhdGVDb21wb3NpdGUoIHBhcmVudCwgMSwgMCwgMCApOwotCQotICAgIGNsaWVudFdpZGdldF8gPSBuZXcgV2ViU2VydmljZUNsaWVudFR5cGVXaWRnZXQodHJ1ZSk7Ci0gICAgY2xpZW50V2lkZ2V0Xy5hZGRDb250cm9scyhjbGllbnRDb21wb3NpdGUgLCBzdGF0dXNMaXN0ZW5lciApOwotICAgCi0gICAgLy8gIENyZWF0ZSB0ZXN0IHNlcnZpY2UgY2hlY2sgYm94LgotICAgIENvbXBvc2l0ZSBidXR0b25Hcm91cCA9IHV0aWxzLmNyZWF0ZUNvbXBvc2l0ZShjbGllbnRDb21wb3NpdGUsMSk7Ci0gICAgCi0gICAgLy8gQ3JlYXRlIG1vbml0b3Igc2VydmljZSBjaGVjayBib3guCi0gICAgbW9uaXRvclNlcnZpY2VfID0gdXRpbHMuY3JlYXRlQ2hlY2tib3goYnV0dG9uR3JvdXAgLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuQ0hFQ0tCT1hfTU9OSVRPUl9XRUJTRVJWSUNFLAotICAgIAkJCQkJCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BXUFJfQ0hFQ0tCT1hfTU9OSVRPUl9TRVJWSUNFLAotICAgIAkJCQkJCQkJCUlORk9QT1BfV1NXU0NFTl9DSEVDS0JPWF9NT05JVE9SX1NFUlZJQ0UpOwotCi0gICAgLy9zaG93IG92ZXJ3cml0ZSBpZiBpdCBpcyBlbmFibGVkIGluIHRoZSBwcmVmZXJlbmNlcwotICAgIGlmIChnZXRSZXNvdXJjZUNvbnRleHQoKS5pc092ZXJ3cml0ZUZpbGVzRW5hYmxlZCgpKSB7Ci0JCUxhYmVsIHByZWZTZXBhcmF0b3IgPSB1dGlscy5jcmVhdGVIb3Jpem9udGFsU2VwYXJhdG9yKHBhcmVudCwgMSk7Ci0JCXByZWZTZXBhcmF0b3Iuc2V0VGV4dCgiRmlsZSBPcHRpb25zIik7Ci0JCUNvbXBvc2l0ZSBwcmVmQnV0dG9uUGFuZWwgPSB1dGlscy5jcmVhdGVDb21wb3NpdGUocGFyZW50LCAxKTsKLQkJb3ZlcndyaXRlQnV0dG9uXyA9IHV0aWxzLmNyZWF0ZUNoZWNrYm94KHByZWZCdXR0b25QYW5lbCwKLQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuQ0hFQ0tCT1hfT1ZFUldSSVRFX0ZJTEVTLCAKLQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX0JVVFRPTl9PVkVSV1JJVEVfRklMRVMsIAotCQkJCUlORk9QT1BfV1NXU0NFTl9DSEVDS0JPWF9PVkVSV1JJVEUpOwotCQlvdmVyd3JpdGVCdXR0b25fLnNldFNlbGVjdGlvbihnZXRSZXNvdXJjZUNvbnRleHQoKQotCQkJCS5pc092ZXJ3cml0ZUZpbGVzRW5hYmxlZCgpKTsKLQl9Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFJlc291cmNlQ29udGV4dCggUmVzb3VyY2VDb250ZXh0IGNvbnRleHQgKQotICB7ICAgIAotCSAgcmVzb3VyY2VDb250ZXh0XyA9IGNvbnRleHQ7Ci0gIH0KLSAgIAotICBwdWJsaWMgUmVzb3VyY2VDb250ZXh0IGdldFJlc291cmNlQ29udGV4dCgpCi0gIHsgICAKLSAgICBpZiAocmVzb3VyY2VDb250ZXh0XyA9PSBudWxsKSB7Ci0JCXJlc291cmNlQ29udGV4dF8gPSBXZWJTZXJ2aWNlUGx1Z2luLmdldEluc3RhbmNlKCkKLQkJCQkuZ2V0UmVzb3VyY2VDb250ZXh0KCk7Ci0JfQotCXJldHVybiByZXNvdXJjZUNvbnRleHRfOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRUeXBlUnVudGltZVNlcnZlciggVHlwZVJ1bnRpbWVTZXJ2ZXIgaWRzICkKLSAgewkgIAotICAgIGNsaWVudFdpZGdldF8uc2V0VHlwZVJ1bnRpbWVTZXJ2ZXIoIGlkcyApOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRQcm9qZWN0TmFtZShTdHJpbmcgbmFtZSkKLSAgewotCSAgY2xpZW50V2lkZ2V0Xy5zZXRDbGllbnRQcm9qZWN0TmFtZShuYW1lKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50RWFyUHJvamVjdE5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLQkgIGNsaWVudFdpZGdldF8uc2V0Q2xpZW50RWFyUHJvamVjdE5hbWUobmFtZSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudENvbXBvbmVudFR5cGUoU3RyaW5nIG5hbWUpCi0gIHsKLQkgIGNsaWVudFdpZGdldF8uc2V0Q2xpZW50Q29tcG9uZW50VHlwZShuYW1lKTsJICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50TmVlZEVBUihib29sZWFuIGIpCi0gIHsKLQkgIGNsaWVudFdpZGdldF8uc2V0Q2xpZW50TmVlZEVBUihiKTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRDbGllbnRSdW50aW1lSWQoKQotICB7Ci0JICByZXR1cm4gY2xpZW50V2lkZ2V0Xy5nZXRDbGllbnRSdW50aW1lSWQoKTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRDbGllbnRFYXJQcm9qZWN0TmFtZSgpCi0gIHsKLQkgIHJldHVybiBjbGllbnRXaWRnZXRfLmdldENsaWVudEVhclByb2plY3ROYW1lKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q2xpZW50UHJvamVjdE5hbWUoKQotICB7Ci0JICByZXR1cm4gY2xpZW50V2lkZ2V0Xy5nZXRDbGllbnRQcm9qZWN0TmFtZSgpOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldENsaWVudENvbXBvbmVudFR5cGUoKQotICB7Ci0JICByZXR1cm4gY2xpZW50V2lkZ2V0Xy5nZXRDbGllbnRDb21wb25lbnRUeXBlKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldENsaWVudE5lZWRFQVIoKQotICB7Ci0JICByZXR1cm4gY2xpZW50V2lkZ2V0Xy5nZXRDbGllbnROZWVkRUFSKCk7Ci0gIH0KLSAgCi0gcHVibGljIHZvaWQgc2V0V2ViU2VydmljZVVSSShTdHJpbmcgdXJpKQotIHsKLSAgICAgd2ViU2VydmljZVVSSV8gPSB1cmk7ICAgIAotIH0KLSAKLXB1YmxpYyB2b2lkIGludGVybmFsaXplKCkgewkJCi0KLQlpZiAod2ViU2VydmljZVVSSV8gPT0gbnVsbCB8fCB3ZWJTZXJ2aWNlVVJJXy5sZW5ndGgoKSA9PSAwKQotCQlyZXR1cm47Ci0KLQlzZXJ2aWNlSW1wbF8ucmVtb3ZlTW9kaWZ5TGlzdGVuZXIob2JqZWN0TW9kaWZ5TGlzdGVuZXJfKTsKLQlzZXJ2aWNlSW1wbF8uc2V0VGV4dCh3ZWJTZXJ2aWNlVVJJXyk7ICAgIAkgCi0Jc2VydmljZUltcGxfLmFkZE1vZGlmeUxpc3RlbmVyKG9iamVjdE1vZGlmeUxpc3RlbmVyXyk7Ci0JCQotCUVjbGlwc2VJUGF0aDJVUkxTdHJpbmdUcmFuc2Zvcm1lciB0cmFuc2Zvcm1lciA9IG5ldyBFY2xpcHNlSVBhdGgyVVJMU3RyaW5nVHJhbnNmb3JtZXIoKTsKLQl3ZWJTZXJ2aWNlVVJJXyA9IChTdHJpbmcpIHRyYW5zZm9ybWVyLnRyYW5zZm9ybSh3ZWJTZXJ2aWNlVVJJXyk7ICAgIAotfQotIAotIHB1YmxpYyB2b2lkIHNldFByb2plY3QoSVByb2plY3QgcHJvamVjdCkKLSB7Ci0gICAgIHByb2plY3RfID0gcHJvamVjdDsKLSB9Ci0gIHB1YmxpYyB2b2lkIHNldENvbXBvbmVudE5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICAgIGNvbXBvbmVudE5hbWVfID0gbmFtZTsgICAgICAKLSAgfSAKLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V2ViU2VydmljZVVSSSgpCi0gIHsKLSAgICAgIHJldHVybiB3ZWJTZXJ2aWNlVVJJXyA7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3NkbFVSSSgpCi0gIHsKLQkgIHJldHVybiBnZXRXZWJTZXJ2aWNlVVJJKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJUHJvamVjdCBnZXRQcm9qZWN0KCkKLSAgewotICAgICAgcmV0dXJuIHByb2plY3RfOwotICB9Ci0gIAotICAgcHVibGljIFN0cmluZyBnZXRDb21wb25lbnROYW1lKCkKLSAgIHsKLSAgICAgICByZXR1cm4gY29tcG9uZW50TmFtZV8gOwotICAgfQotICAKLSAgIHB1YmxpYyBXZWJTZXJ2aWNlc1BhcnNlciBnZXRXZWJTZXJ2aWNlc1BhcnNlcigpCi0JewotCQlyZXR1cm4gV1NETFBhcnNlckZhY3RvcnkuZ2V0V1NETFBhcnNlcigpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlc1BhcnNlcihXZWJTZXJ2aWNlc1BhcnNlciBwYXJzZXIpCi0JewotCQlwYXJzZXJfID0gZ2V0V2ViU2VydmljZXNQYXJzZXIoKTsKLQkJY2xpZW50V2lkZ2V0Xy5zZXRXZWJTZXJ2aWNlc1BhcnNlcihwYXJzZXJfKTsKLQl9Ci0gICAKLSAgcHVibGljIFR5cGVSdW50aW1lU2VydmVyIGdldENsaWVudFR5cGVSdW50aW1lU2VydmVyKCkKLSAgewotICAgIHJldHVybiBjbGllbnRXaWRnZXRfLmdldFR5cGVSdW50aW1lU2VydmVyKCk7ICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0SW5zdGFsbENsaWVudCggQm9vbGVhbiBpbnN0YWxsKQotICB7Ci0gICAgY2xpZW50V2lkZ2V0Xy5zZXRJbnN0YWxsQ2xpZW50KCBpbnN0YWxsICk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBCb29sZWFuIGdldEluc3RhbGxDbGllbnQoKQotICB7Ci0JICByZXR1cm4gY2xpZW50V2lkZ2V0Xy5nZXRJbnN0YWxsQ2xpZW50KCk7ICAgCi0gIH0KLSAgCi0gIHB1YmxpYyBCb29sZWFuIGdldFRlc3RTZXJ2aWNlKCkKLSAgewotCSAgcmV0dXJuIGNsaWVudFdpZGdldF8uZ2V0VGVzdENsaWVudCgpOyAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0VGVzdFNlcnZpY2UoIEJvb2xlYW4gdmFsdWUgKQotICB7Ci0gICAgICBjbGllbnRXaWRnZXRfLnNldFRlc3RDbGllbnQodmFsdWUpOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBpbnQgZ2V0Q2xpZW50R2VuZXJhdGlvbigpCi0gIHsKLQkgIHJldHVybiBjbGllbnRXaWRnZXRfLmdldENsaWVudEdlbmVyYXRpb24oKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50R2VuZXJhdGlvbihpbnQgdmFsdWUpCi0gIHsKLQkgIGNsaWVudFdpZGdldF8uc2V0Q2xpZW50R2VuZXJhdGlvbih2YWx1ZSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldERldmVsb3BDbGllbnQoYm9vbGVhbiBkZXZlbG9wKSB7Ci0JCWNsaWVudFdpZGdldF8uc2V0RGV2ZWxvcENsaWVudCggZGV2ZWxvcCApOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGdldERldmVsb3BDbGllbnQoKSB7CQkKLQkJcmV0dXJuIGNsaWVudFdpZGdldF8uZ2V0RGV2ZWxvcENsaWVudCgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRBc3NlbWJsZUNsaWVudChib29sZWFuIGFzc2VtYmxlKSB7Ci0JCWNsaWVudFdpZGdldF8uc2V0QXNzZW1ibGVDbGllbnQoIGFzc2VtYmxlICk7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gZ2V0QXNzZW1ibGVDbGllbnQoKSB7CQkKLQkJcmV0dXJuIGNsaWVudFdpZGdldF8uZ2V0QXNzZW1ibGVDbGllbnQoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0RGVwbG95Q2xpZW50KGJvb2xlYW4gZGVwbG95KSB7Ci0JCWNsaWVudFdpZGdldF8uc2V0RGVwbG95Q2xpZW50KCBkZXBsb3kgKTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBnZXREZXBsb3lDbGllbnQoKSB7CQkKLQkJcmV0dXJuIGNsaWVudFdpZGdldF8uZ2V0RGVwbG95Q2xpZW50KCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldFN0YXJ0Q2xpZW50KEJvb2xlYW4gc3RhcnQpIHsKLQkJY2xpZW50V2lkZ2V0Xy5zZXRTdGFydENsaWVudCggc3RhcnQgKTsKLQl9Ci0KLQlwdWJsaWMgQm9vbGVhbiBnZXRTdGFydENsaWVudCgpIHsJCi0JCXJldHVybiBjbGllbnRXaWRnZXRfLmdldFN0YXJ0Q2xpZW50KCk7Ci0JfQotICAKLSAgcHVibGljIEJvb2xlYW4gZ2V0TW9uaXRvclNlcnZpY2UoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBCb29sZWFuKG1vbml0b3JTZXJ2aWNlXy5nZXRTZWxlY3Rpb24oKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldE1vbml0b3JTZXJ2aWNlKEJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICBtb25pdG9yU2VydmljZV8uc2V0U2VsZWN0aW9uKHZhbHVlLmJvb2xlYW5WYWx1ZSgpKTsKLSAgfQotCi0gIHB1YmxpYyBJU3RhdHVzIGdldFN0YXR1cygpIHsKLQkJCQkKLQkJdmFsaWRPYmplY3RTZWxlY3Rpb25fID0gZmFsc2U7CS8vIGFzc3VtZSBmYWxzZSBhdCBmaXJzdAotCi0JCUlTdGF0dXMgbWlzc2luZ0ZpZWxkU3RhdHVzID0gY2hlY2tNaXNzaW5nRmllbGRTdGF0dXMoKTsKLQkJaWYgKG1pc3NpbmdGaWVsZFN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuRVJST1IpIHsKLQkJCXJldHVybiBtaXNzaW5nRmllbGRTdGF0dXM7Ci0JCX0KLQotCQlJU3RhdHVzIGludmFsaWRTZXJ2aWNlSW1wbFN0YXR1cyA9IGNoZWNrU2VydmljZUltcGxUZXh0U3RhdHVzKCk7Ci0JCWlmIChpbnZhbGlkU2VydmljZUltcGxTdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLkVSUk9SKSB7Ci0JCQlyZXR1cm4gaW52YWxpZFNlcnZpY2VJbXBsU3RhdHVzOwotCQl9Ci0KLQkJSVN0YXR1cyBwb3NzaWJsZUVycm9yU3RhdHVzID0gY2hlY2tFcnJvclN0YXR1cygpOwotCQlpZiAocG9zc2libGVFcnJvclN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuRVJST1IpIHsKLQkJCXJldHVybiBwb3NzaWJsZUVycm9yU3RhdHVzOwotCQl9Ci0KLQkJSVN0YXR1cyBwb3NzaWJsZVdhcm5pbmdTdGF0dXMgPSBjaGVja1dhcm5pbmdTdGF0dXMoKTsKLQkJaWYgKHBvc3NpYmxlV2FybmluZ1N0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuV0FSTklORykgewotCQkJcmV0dXJuIHBvc3NpYmxlV2FybmluZ1N0YXR1czsKLQkJfQotCi0JCS8vIGlmIG5vIGVycm9ycyBvciB3YXJuaW5ncyB3ZXJlIGZvdW5kLCBjbGVhciB0aGUgdmFsaWRhdGlvbiBzdGF0ZS4KLQkJdmFsaWRhdGlvblN0YXRlXyA9IFZhbGlkYXRpb25VdGlscy5WQUxJREFURV9OT05FOwotCQljbGllbnRXaWRnZXRfLnNldFZhbGlkYXRpb25TdGF0ZShWYWxpZGF0aW9uVXRpbHMuVkFMSURBVEVfTk9ORSk7Ci0KLQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JfQotCQotCXByaXZhdGUgSVN0YXR1cyBjaGVja01pc3NpbmdGaWVsZFN0YXR1cygpIHsKLQotCQlpZiAodmFsaWRhdGlvblN0YXRlXyA9PSBWYWxpZGF0aW9uVXRpbHMuVkFMSURBVEVfQUxMKSB7Ci0JCQlpZiAoc2VydmljZUltcGxfLmdldFRleHQoKS50cmltKCkubGVuZ3RoKCkgPT0gMCkgewotCQkJCXJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX05PX1NFUlZJQ0VfU0VMRUNUSU9OLCBuZXcgU3RyaW5nW117Q29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1dFQlNFUlZJQ0VJTVBMfSkpOwotCQkJfQotCQl9Ci0JCQotCQlJU3RhdHVzIGNsaWVudE1pc3NpbmdGaWVsZHNTdGF0dXMgPSBjbGllbnRXaWRnZXRfLmNoZWNrTWlzc2luZ0ZpZWxkU3RhdHVzKCk7Ci0JCWlmIChjbGllbnRNaXNzaW5nRmllbGRzU3RhdHVzLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5FUlJPUikgewotCQkJcmV0dXJuIGNsaWVudE1pc3NpbmdGaWVsZHNTdGF0dXM7Ci0JCX0KLQkJCi0JCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCi0JfQotCi0JcHJpdmF0ZSBJU3RhdHVzIGNoZWNrRXJyb3JTdGF0dXMoKSB7Ci0JCUlTdGF0dXMgY2xpZW50U2lkZUVycm9yU3RhdHVzID0gY2xpZW50V2lkZ2V0Xy5jaGVja0Vycm9yU3RhdHVzKCk7Ci0JCWlmIChjbGllbnRTaWRlRXJyb3JTdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLkVSUk9SKSB7Ci0JCQlyZXR1cm4gY2xpZW50U2lkZUVycm9yU3RhdHVzOwotCQl9Ci0JCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCX0KLQotCXByaXZhdGUgSVN0YXR1cyBjaGVja1dhcm5pbmdTdGF0dXMoKSB7Ci0JCUlTdGF0dXMgY2xpZW50V2FybmluZ1N0YXR1cyA9IGNsaWVudFdpZGdldF8uY2hlY2tXYXJuaW5nU3RhdHVzKCk7Ci0JCWlmIChjbGllbnRXYXJuaW5nU3RhdHVzLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5XQVJOSU5HKSB7Ci0JCQlyZXR1cm4gY2xpZW50V2FybmluZ1N0YXR1czsKLQkJfQotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQl9CQotCQotCS8qY2FsbCB2YWxpZGF0aW9uIGNvZGUgaW4gdGhlIG9iamVjdCBzZWxlY3Rpb24gd2lkZ2V0IHRvIGVuc3VyZQotCSBhbnkgbW9kaWZpY2F0aW9ucyB0byB0aGUgc2VydmljZUltcGxfIGZpZWxkIGFyZSB2YWxpZCovCi0JcHJpdmF0ZSBJU3RhdHVzIGNoZWNrU2VydmljZUltcGxUZXh0U3RhdHVzKCkgewotCQkKLQkJU3RyaW5nIGZpZWxkVGV4dCA9IHNlcnZpY2VJbXBsXy5nZXRUZXh0KCkudHJpbSgpOwotCi0JCWlmICh3c2RsVmFsaWRhdG9yV2lkZ2V0XyA9PSBudWxsKQotCQkJd3NkbFZhbGlkYXRvcldpZGdldF8gPSBuZXcgV1NETFNlbGVjdGlvbldpZGdldFdyYXBwZXIoKTsKLQkJCi0JCXZhbGlkT2JqZWN0U2VsZWN0aW9uXyA9IHdzZGxWYWxpZGF0b3JXaWRnZXRfLnZhbGlkYXRlKGZpZWxkVGV4dCk7Ci0JCQkJCi0JCWlmICghdmFsaWRPYmplY3RTZWxlY3Rpb25fKQotCQl7Ci0JCQlyZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19JTlZBTElEX1NFUlZJQ0VfREVGKTsJCQkKLQkJfQkJCi0JCQotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIGNhbGxPYmplY3RUcmFuc2Zvcm1hdGlvbihJUHJvamVjdCBwcm9qZWN0LCBTdHJpbmcgY29tcG9uZW50TmFtZSwKLQkJCVN0cmluZyB3c2RsVVJJKQotCXsKLQkJICAgV1NETFNlbGVjdGlvbk91dHB1dENvbW1hbmQgd3NkbE91dHB1dENvbW1hbmQgPSBuZXcgV1NETFNlbGVjdGlvbk91dHB1dENvbW1hbmQoKTsKLQkJICAgd3NkbE91dHB1dENvbW1hbmQuc2V0Q29tcG9uZW50TmFtZShjb21wb25lbnROYW1lKTsKLQkJICAgd3NkbE91dHB1dENvbW1hbmQuc2V0UHJvamVjdChwcm9qZWN0KTsKLQkJICAgd3NkbE91dHB1dENvbW1hbmQuc2V0V3NkbFVSSSh3c2RsVVJJKTsKLQkJICAgd3NkbE91dHB1dENvbW1hbmQuc2V0VGVzdFNlcnZpY2UoZ2V0VGVzdFNlcnZpY2UoKS5ib29sZWFuVmFsdWUoKSk7Ci0JCSAgIHdzZGxPdXRwdXRDb21tYW5kLnNldFdlYlNlcnZpY2VzUGFyc2VyKGdldFdlYlNlcnZpY2VzUGFyc2VyKCkpOwotCQkKLSAgICAgICAgICAgd3NkbE91dHB1dENvbW1hbmQuZXhlY3V0ZShudWxsLCBudWxsKTsKLSAgICAgIAotICAgICAgICAgICBzZXRDb21wb25lbnROYW1lKHdzZGxPdXRwdXRDb21tYW5kLmdldENvbXBvbmVudE5hbWUoKSk7Ci0gICAgICAgICAgIHNldFByb2plY3Qod3NkbE91dHB1dENvbW1hbmQuZ2V0UHJvamVjdCgpKTsKLSAgICAgICAgICAgc2V0V2ViU2VydmljZXNQYXJzZXIod3NkbE91dHB1dENvbW1hbmQuZ2V0V2ViU2VydmljZXNQYXJzZXIoKSk7Ci0gICAgICAgICAgIHNldFdlYlNlcnZpY2VVUkkod3NkbE91dHB1dENvbW1hbmQuZ2V0V3NkbFVSSSgpKTsKLSAgICAgICAgICAgCi0gICAgICAgICAgIC8vIGJ1ZyAxNTk5MTE6IG91ciBzdGFydGluZyBwb2ludCBpcyBhIHdzZGwsIHdlIHNob3VsZCBub3QgbmVlZCB0bwotICAgICAgICAgICAvLyByZWZyZXNoIHRoZSBydW50aW1lIGV2ZXJ5dGltZSB0aGUgdXNlciBzcGVjaWZ5IGEgbmV3IHdzZGwgcGF0aAotICAgICAgICAgICAvLyByZWZyZXNoQ2xpZW50UnVudGltZVNlbGVjdGlvbigpOwotICAgICB9Ci0JCi0gIHByaXZhdGUgY2xhc3MgV1NETEJyb3dzZUxpc3RlbmVyIGltcGxlbWVudHMgU2VsZWN0aW9uTGlzdGVuZXIKLSAgewotCSAgcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCQkKLQl9Ci0JICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JCSAgCi0JCSAgIHdzZGxEaWFsb2dfLnNldENvbXBvbmVudE5hbWUoZ2V0Q29tcG9uZW50TmFtZSgpKTsKLQkJICAgd3NkbERpYWxvZ18uc2V0UHJvamVjdChnZXRQcm9qZWN0KCkpOwotCQkgICB3c2RsRGlhbG9nXy5zZXRXZWJTZXJ2aWNlVVJJKCBzZXJ2aWNlSW1wbF8uZ2V0VGV4dCgpICk7CQkKLQkJICAgCi0JCSAgIGludCByZXN1bHQgPSB3c2RsRGlhbG9nXy5vcGVuKCk7Ci0JCSAgIAotCQkgICBpZiAocmVzdWx0ID09IERpYWxvZy5PSykKLQkJICAgewotCQkJICAgc2VydmljZUltcGxfLnJlbW92ZU1vZGlmeUxpc3RlbmVyKG9iamVjdE1vZGlmeUxpc3RlbmVyXyk7Ci0JCQkgICBzZXJ2aWNlSW1wbF8uc2V0VGV4dCh3c2RsRGlhbG9nXy5nZXREaXNwbGF5YWJsZVNlbGVjdGlvblN0cmluZygpKTsKLQkJCSAgIHNlcnZpY2VJbXBsXy5hZGRNb2RpZnlMaXN0ZW5lcihvYmplY3RNb2RpZnlMaXN0ZW5lcl8pOwotCQkJICAgCi0JCQkgICAvLyBjYWxsIFdTRExTZWxlY3Rpb25PdXRwdXRDb21tYW5kIHRvIGNhcnJ5IG91dCBhbnkgdHJhbnNmb3JtYXRpb24gb24gdGhlIG9iamVjdFNlbGVjdGlvbgotCSAgICAgICAgICAgY2FsbE9iamVjdFRyYW5zZm9ybWF0aW9uKHByb2plY3RfLAotCSAgICAgICAgCQkJd3NkbERpYWxvZ18uZ2V0Q29tcG9uZW50TmFtZSgpLCB3c2RsRGlhbG9nXy5nZXRXZWJTZXJ2aWNlVVJJKCkpOwotCSAgICAgICAgICAgCi0JCSAgICAgICB2YWxpZGF0aW9uU3RhdGVfID0gVmFsaWRhdGlvblV0aWxzLlZBTElEQVRFX0FMTDsKLQkJICAgICAgIGNsaWVudFdpZGdldF8uc2V0VmFsaWRhdGlvblN0YXRlKFZhbGlkYXRpb25VdGlscy5WQUxJREFURV9BTEwpOwotCQkgICAgICAgc3RhdHVzTGlzdGVuZXJfLmhhbmRsZUV2ZW50KG51bGwpOyAvL3ZhbGlkYXRlIHRoZSBwYWdlCi0JCSAgIH0KLQkgIH0KLQl9Ci19Ci0KLQotCi0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9DbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL0NsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkOGFlZjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL0NsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjIxICAgMTE5MTExIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA1MjQgICAxNDI2MzUgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICogMjAwNjA1MjkgICAxNDE0MjIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNzI4ICAgMTUwNTYwIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDcyOCAgIDE1MTA3OCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydC5XZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmRhdGEuVHlwZVJ1bnRpbWVTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnBsdWdpbi5XZWJTZXJ2aWNlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLQotcHVibGljIGNsYXNzIENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsgICAgCi0JcHJpdmF0ZSBpbnQgY2xpZW50R2VuZXJhdGlvbl87Ci0JcHJpdmF0ZSBib29sZWFuIGRldmVsb3BDbGllbnRfOwotCXByaXZhdGUgYm9vbGVhbiBhc3NlbWJsZUNsaWVudF87Ci0JcHJpdmF0ZSBib29sZWFuIGRlcGxveUNsaWVudF87Ci0JcHJpdmF0ZSBib29sZWFuIGluc3RhbGxDbGllbnRfOwotCXByaXZhdGUgYm9vbGVhbiBzdGFydENsaWVudF87Ci0JcHJpdmF0ZSBib29sZWFuIHRlc3RDbGllbnRfOwotCXByaXZhdGUgYm9vbGVhbiBjbGllbnRPbmx5XyA9IGZhbHNlOwotCSAgCi0JcHVibGljIENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kKCkgewotCX0KLQkKLQkKLQkvKioKLQkgKiBAcGFyYW0gY2xpZW50T25seSAgU2V0IHRvIHRydWUgZm9yIGlmIGNhbGxlZCBmcm9tIENsaWVudFdpZGdldFdpemFyZAotCSAqLwotCXB1YmxpYyBDbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZChib29sZWFuIGNsaWVudE9ubHkpIHsKLQkJY2xpZW50T25seV8gPSBjbGllbnRPbmx5OwotCX0KLQkKLSAgcHVibGljIEJvb2xlYW4gZ2V0VGVzdFNlcnZpY2UoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBCb29sZWFuKCBnZXRTY2VuYXJpb0NvbnRleHQoKS5nZXRUZXN0V2ViU2VydmljZSgpICk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBCb29sZWFuIGdldE1vbml0b3JTZXJ2aWNlKCkKLSAgewotICAgIHJldHVybiBuZXcgQm9vbGVhbiggZ2V0U2NlbmFyaW9Db250ZXh0KCkuZ2V0TW9uaXRvcldlYlNlcnZpY2UoKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldEluc3RhbGxDbGllbnQoKQotICB7Ci0gICAgcmV0dXJuIGluc3RhbGxDbGllbnRfOyAKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0UnVuVGVzdENsaWVudCgpCi0gIHsKLSAgICByZXR1cm4gZ2V0U2NlbmFyaW9Db250ZXh0KCkuaXNMYXVuY2hTYW1wbGVFbmFibGVkKCkgOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBpbnQgZ2V0Q2xpZW50R2VuZXJhdGlvbigpCi0gIHsKLQkgIHJldHVybiBjbGllbnRHZW5lcmF0aW9uXzsKLSAgfQotCi0gIHB1YmxpYyBSZXNvdXJjZUNvbnRleHQgZ2V0UmVzb3VyY2VDb250ZXh0KCkKLSAgeyAKLSAgICByZXR1cm4gV2ViU2VydmljZVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFJlc291cmNlQ29udGV4dCgpOwotICB9Ci0gIAotICAvLyBDdXJyZW50IFNjZW5hcmlvQ29udGV4dCBpcyB1c2VkIHRvIGRlZmF1bHQgdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIHdpemFyZC4gIFRoZSAKLSAgLy8gcHJvcGVydGllcyBpbiBTY2VuYXJpb0NvbnRleHQgYXJlIG1hcHBlZCBpbmRpdmlkdWFsLiAgVGhlcmVmb3JlLCBTY2VuYXJpb0NvbnRleHQKLSAgLy8gc2hvdWxkIG5vdCBhbHNvIGJlIG1hcHBlZC4KLSAgcHJvdGVjdGVkIFNjZW5hcmlvQ29udGV4dCBnZXRTY2VuYXJpb0NvbnRleHQoKQotICB7Ci0gICAgcmV0dXJuIFdlYlNlcnZpY2VQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRTY2VuYXJpb0NvbnRleHQoKTsKLSAgfQotICAKLSAgLy8gVE9ETyBTZXQgY2xpZW50IG5hbWUgZGVmYXVsdHMgaGVyZS4gIAotICBwdWJsaWMgVHlwZVJ1bnRpbWVTZXJ2ZXIgZ2V0Q2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIoKQotICB7Ci0gICAgLy8gcnNrcmVnCi0JCS8vV2ViU2VydmljZUNsaWVudFR5cGVSZWdpc3RyeSByZWdpc3RyeSA9IFdlYlNlcnZpY2VDbGllbnRUeXBlUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKTsKLSAgICBTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgICAgID0gZ2V0U2NlbmFyaW9Db250ZXh0KCkuZ2V0Q2xpZW50V2ViU2VydmljZVR5cGUoKTsKLSAgICAvL1N0cmluZyAgICAgICAgICAgICAgICAgICAgICAgcnVudGltZSAgPSByZWdpc3RyeS5nZXRBbGxDbGllbnRSdW50aW1lcygpWzBdOwotCQlTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgIHJ1bnRpbWUgID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0QWxsUnVudGltZXNGb3JDbGllbnRTaWRlKClbMF07Ci0gICAgLy9TdHJpbmcgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlciAgID0gcmVnaXN0cnkuZ2V0QWxsQ2xpZW50U2VydmVyRmFjdG9yeUlkcygpWzBdOwotICAgICAgICBTdHJpbmdbXSBzZXJ2ZXJzID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0QWxsQ2xpZW50U2VydmVyRmFjdG9yeUlkcygpOwotICAgICAgICBTdHJpbmcgc2VydmVyID0gbnVsbDsKLSAgICAgICAgaWYgKHNlcnZlcnMgIT0gbnVsbCAmJiBzZXJ2ZXJzLmxlbmd0aD4wKQotICAgICAgICB7Ci0JCSAgc2VydmVyICAgPSBzZXJ2ZXJzWzBdOwotICAgICAgICB9Ci0gICAgVHlwZVJ1bnRpbWVTZXJ2ZXIgICAgICAgICAgICByZXN1bHQgICA9IG5ldyBUeXBlUnVudGltZVNlcnZlcigpOwotCQkvLyByc2tyZWcKLSAgICAKLSAgICByZXN1bHQuc2V0VHlwZUlkKCB0eXBlICk7Ci0gICAgcmVzdWx0LnNldFJ1bnRpbWVJZCggcnVudGltZSApOwotICAgIHJlc3VsdC5zZXRTZXJ2ZXJJZCggc2VydmVyICk7IAotICAgIAotICAgIHJldHVybiByZXN1bHQ7ICAKLSAgfQotCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGluZm8pIHRocm93cyBFeGVjdXRpb25FeGNlcHRpb24KLSAgewotCSAgZGVmYXVsdENsaWVudFNjYWxlKCk7Ci0JICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgZGVmYXVsdENsaWVudFNjYWxlKCkgewotCSAgY2xpZW50R2VuZXJhdGlvbl8gPSBnZXRTY2VuYXJpb0NvbnRleHQoKS5nZXRHZW5lcmF0ZUNsaWVudCgpOwotCSAgCi0JICBpZiAoY2xpZW50T25seV8gJiYgY2xpZW50R2VuZXJhdGlvbl8gPT0gU2NlbmFyaW9Db250ZXh0LldTX05PTkUpIHsKLQkJICBkZXZlbG9wQ2xpZW50XyA9IHRydWU7Ci0JCSAgYXNzZW1ibGVDbGllbnRfID0gdHJ1ZTsKLQkJICBkZXBsb3lDbGllbnRfID0gdHJ1ZTsKLQkJICBjbGllbnRHZW5lcmF0aW9uXyA9IFNjZW5hcmlvQ29udGV4dC5XU19ERVBMT1k7Ci0JICB9IGVsc2UgewotCQkgIGRldmVsb3BDbGllbnRfID0gY2xpZW50R2VuZXJhdGlvbl8gPD0gU2NlbmFyaW9Db250ZXh0LldTX0RFVkVMT1A7Ci0JCSAgYXNzZW1ibGVDbGllbnRfID0gY2xpZW50R2VuZXJhdGlvbl8gPD0gU2NlbmFyaW9Db250ZXh0LldTX0FTU0VNQkxFOwotCQkgIGRlcGxveUNsaWVudF8gPSBjbGllbnRHZW5lcmF0aW9uXyA8PSBTY2VuYXJpb0NvbnRleHQuV1NfREVQTE9ZOwotCSAgfQotCSAgaW5zdGFsbENsaWVudF8gPSBjbGllbnRHZW5lcmF0aW9uXyA8PSBTY2VuYXJpb0NvbnRleHQuV1NfSU5TVEFMTDsKLQkgIHN0YXJ0Q2xpZW50XyA9IGNsaWVudEdlbmVyYXRpb25fIDw9IFNjZW5hcmlvQ29udGV4dC5XU19TVEFSVDsKLQkgIHRlc3RDbGllbnRfID0gY2xpZW50R2VuZXJhdGlvbl8gPD0gU2NlbmFyaW9Db250ZXh0LldTX1RFU1Q7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldERldmVsb3BDbGllbnQoKSB7Ci0JICByZXR1cm4gZGV2ZWxvcENsaWVudF87Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldEFzc2VtYmxlQ2xpZW50KCkgewotCSAgcmV0dXJuIGFzc2VtYmxlQ2xpZW50XzsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0RGVwbG95Q2xpZW50KCkgewotCSAgcmV0dXJuIGRlcGxveUNsaWVudF87Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldFN0YXJ0Q2xpZW50KCkgewotCSAgcmV0dXJuIHN0YXJ0Q2xpZW50XzsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0VGVzdENsaWVudCgpIHsKLQkgIHJldHVybiB0ZXN0Q2xpZW50XzsKLSAgfQotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9DbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTUxMWUxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9DbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTI0ICAgMTQyNjM1IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqIDIwMDYwNTI5ICAgMTQxNDIyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5kYXRhLlR5cGVSdW50aW1lU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLQotcHVibGljIGNsYXNzIENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgoteyAgICAKLSAgcHJpdmF0ZSBib29sZWFuIHRlc3RTZXJ2aWNlXzsKLSAgcHJpdmF0ZSBib29sZWFuIG1vbml0b3JTZXJ2aWNlOwotICBwcml2YXRlIFJlc291cmNlQ29udGV4dCAgIHJlc291cmNlQ29udGV4dF87Ci0gIHByaXZhdGUgVHlwZVJ1bnRpbWVTZXJ2ZXIgY2xpZW50SWRzXzsKLSAgcHJpdmF0ZSBib29sZWFuIGluc3RhbGxDbGllbnRfOwotICAKLSAgcHJpdmF0ZSBTdHJpbmcgd2ViU2VydmljZVVSSV87Ci0gIHByaXZhdGUgSVByb2plY3QgcHJvamVjdF87Ci0gIHByaXZhdGUgU3RyaW5nIGNvbXBvbmVudE5hbWVfOwotICBwcml2YXRlIGJvb2xlYW4gcnVuVGVzdENsaWVudF87Ci0gIHByaXZhdGUgYm9vbGVhbiBkZXZlbG9wQ2xpZW50XzsKLSAgcHJpdmF0ZSBib29sZWFuIGFzc2VtYmxlQ2xpZW50XzsKLSAgcHJpdmF0ZSBib29sZWFuIGRlcGxveUNsaWVudF87Ci0gIHByaXZhdGUgYm9vbGVhbiBzdGFydENsaWVudF87Ci0gIHByaXZhdGUgYm9vbGVhbiB0ZXN0Q2xpZW50XzsgCi0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRUZXN0U2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gdGVzdFNlcnZpY2VfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0VGVzdFNlcnZpY2UoIGJvb2xlYW4gdGVzdFNlcnZpY2UgKQotICB7Ci0gICAgdGVzdFNlcnZpY2VfID0gdGVzdFNlcnZpY2U7ICAKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0UnVuVGVzdENsaWVudCgpCi0gIHsKLSAgICByZXR1cm4gcnVuVGVzdENsaWVudF87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRSdW5UZXN0Q2xpZW50KCBib29sZWFuIHJ1blRlc3RDbGllbnQgKQotICB7Ci0gICAgcnVuVGVzdENsaWVudF8gPSBydW5UZXN0Q2xpZW50OyAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEluc3RhbGxDbGllbnQoIGJvb2xlYW4gaW5zdGFsbENsaWVudCkKLSAgewotICAgIGluc3RhbGxDbGllbnRfID0gaW5zdGFsbENsaWVudDsgIAotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRJbnN0YWxsQ2xpZW50KCkKLSAgewotCXJldHVybiBpbnN0YWxsQ2xpZW50XzsgIAotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXREZXZlbG9wQ2xpZW50KCkgewotCQlyZXR1cm4gZGV2ZWxvcENsaWVudF87Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0RGV2ZWxvcENsaWVudChib29sZWFuIGRldmVsb3BDbGllbnQpIHsKLQkJdGhpcy5kZXZlbG9wQ2xpZW50XyA9IGRldmVsb3BDbGllbnQ7Ci0JfQkKLQkKLQlwdWJsaWMgYm9vbGVhbiBnZXRBc3NlbWJsZUNsaWVudCgpIHsKLQkJcmV0dXJuIGFzc2VtYmxlQ2xpZW50XzsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRBc3NlbWJsZUNsaWVudChib29sZWFuIGFzc2VtYmxlQ2xpZW50KSB7Ci0JCXRoaXMuYXNzZW1ibGVDbGllbnRfID0gYXNzZW1ibGVDbGllbnQ7Ci0JfQotCQotCXB1YmxpYyBib29sZWFuIGdldERlcGxveUNsaWVudCgpIHsKLQkJcmV0dXJuIGRlcGxveUNsaWVudF87Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0RGVwbG95Q2xpZW50KGJvb2xlYW4gZGVwbG95Q2xpZW50KSB7Ci0JCXRoaXMuZGVwbG95Q2xpZW50XyA9IGRlcGxveUNsaWVudDsKLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gZ2V0U3RhcnRDbGllbnQoKSB7Ci0JCXJldHVybiBzdGFydENsaWVudF87Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0U3RhcnRDbGllbnQoYm9vbGVhbiBzdGFydENsaWVudCkgewotCQl0aGlzLnN0YXJ0Q2xpZW50XyA9IHN0YXJ0Q2xpZW50OwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBnZXRUZXN0Q2xpZW50KCkgewotCQlyZXR1cm4gdGVzdENsaWVudF87Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0VGVzdENsaWVudChib29sZWFuIHRlc3RDbGllbnQpIHsKLQkJdGhpcy50ZXN0Q2xpZW50XyA9IHRlc3RDbGllbnQ7Ci0JfQotICBwdWJsaWMgYm9vbGVhbiBnZXRNb25pdG9yU2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gbW9uaXRvclNlcnZpY2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldE1vbml0b3JTZXJ2aWNlKGJvb2xlYW4gbW9uaXRvclNlcnZpY2UpCi0gIHsKLSAgICB0aGlzLm1vbml0b3JTZXJ2aWNlID0gbW9uaXRvclNlcnZpY2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyBSZXNvdXJjZUNvbnRleHQgZ2V0UmVzb3VyY2VDb250ZXh0KCkKLSAgewotICAgIAotICAgIHJldHVybiByZXNvdXJjZUNvbnRleHRfOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRSZXNvdXJjZUNvbnRleHQoIFJlc291cmNlQ29udGV4dCBjb250ZXh0ICkKLSAgewotICAgIHJlc291cmNlQ29udGV4dF8gPSBjb250ZXh0OyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBUeXBlUnVudGltZVNlcnZlciBnZXRDbGllbnRUeXBlUnVudGltZVNlcnZlcigpCi0gIHsgICAgCi0gICAgcmV0dXJuIGNsaWVudElkc187ICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIoIFR5cGVSdW50aW1lU2VydmVyIGNsaWVudElkcyApCi0gIHsKLSAgICBjbGllbnRJZHNfID0gY2xpZW50SWRzOwotICB9Ci0KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgaW5mbykgdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbgotICB7Ci0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3NkbFVSSSgpCi0gIHsKLSAgICAgIHJldHVybiB3ZWJTZXJ2aWNlVVJJXyA7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFdzZGxVUkkoU3RyaW5nIHVyaSkKLSAgewotICAgICAgd2ViU2VydmljZVVSSV8gPSB1cmk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFByb2plY3QoSVByb2plY3QgcHJvamVjdCkKLSAgewotICAgICAgcHJvamVjdF8gPSBwcm9qZWN0OwotICB9Ci0gIAotICBwdWJsaWMgSVByb2plY3QgZ2V0UHJvamVjdCgpCi0gIHsKLSAgICAgIHJldHVybiBwcm9qZWN0XzsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q29tcG9uZW50TmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgICAgY29tcG9uZW50TmFtZV8gPSBuYW1lOwotICB9IAotICAKLSAgcHVibGljIFN0cmluZyBnZXRDb21wb25lbnROYW1lKCkKLSAgewotICAgICAgcmV0dXJuIGNvbXBvbmVudE5hbWVfIDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL0NvbmZpZ0NsaWVudEhhbmRsZXJzVGFibGVXaWRnZXQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9Db25maWdDbGllbnRIYW5kbGVyc1RhYmxlV2lkZ2V0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2MTVjY2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL0NvbmZpZ0NsaWVudEhhbmRsZXJzVGFibGVXaWRnZXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MDQgMTM0OTEzICAgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1ICAgICAgIAotICogMjAwNjA0MjYgICAxMzU2MTQgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUYWJsZUxhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5MYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGFibGVWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzY2xpZW50LlNlcnZpY2VSZWY7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1vbi5IYW5kbGVyU2VydmljZVJlZkhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbW9uLkhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5IYW5kbGVyVGFibGVJdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5jb21tb24uVUlVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlJlY3RhbmdsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGVDb2x1bW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuU2ltcGxlV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldERhdGFFdmVudHM7Ci0KLS8qKgotICogQ29uZmlnQ2xpZW50SGFuZGxlcnNUcmVlV2lkZ2V0Ci0gKiAgCi0gKi8KLXB1YmxpYyBjbGFzcyBDb25maWdDbGllbnRIYW5kbGVyc1RhYmxlV2lkZ2V0IGV4dGVuZHMgU2ltcGxlV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yIHsKLQotICBwcml2YXRlIFN0cmluZyBwbHVnaW5JZF8gPSAib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpIjsKLQotICBwcml2YXRlIENvbXBvc2l0ZSBwYXJlbnRfOwotICBwcml2YXRlIFN0cmluZyBvdXRwdXRMb2NhdGlvbl87Ci0gIHByaXZhdGUgQ29tcG9zaXRlIHdlYlNlcnZpY2VSZWZDb21wXzsKLSAgcHJpdmF0ZSBDb21ibyB3ZWJTZXJ2aWNlUmVmQ29tYm9fOwotICBwcml2YXRlIFRleHQgd2ViU2VydmljZURlc2NUZXh0XyA9IG51bGw7Ci0gIHByaXZhdGUgVGFibGUgaGFuZGxlcnNUYWJsZV87Ci0gIHByaXZhdGUgVGFibGVWaWV3ZXIgdGFibGVWaWV3ZXJfOwotICBwcml2YXRlIEJ1dHRvbiBhZGRCdXR0b25fOwotICBwcml2YXRlIEJ1dHRvbiByZW1vdmVCdXR0b25fOwotICBwcml2YXRlIEJ1dHRvbiBnZW5Ta2VsZXRvblJhZGlvQnV0dG9uXzsKLSAgcHJpdmF0ZSBDb21wb3NpdGUgc291cmNlTG9jYXRpb25Db21wXzsKLSAgcHJpdmF0ZSBDb21ibyBzb3VyY2VMb2NhdGlvbkNvbWJvXzsKLQotICBwcml2YXRlIEhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyW10gaGFuZGxlclNlcnZpY2VSZWZIb2xkZXJfOwotICBwcml2YXRlIEhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyIGN1cnJlbnRIU1JIXzsKLSAgcHJpdmF0ZSBIYXNodGFibGUgcGF0aHNUYWJsZV8gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gIHByaXZhdGUgYm9vbGVhbiBpc011bHRpcGxlU2VsZWN0aW9uXyA9IGZhbHNlOwotICBwcml2YXRlIGJvb2xlYW4gaXNHZW5Ta2VsZXRvbkVuYWJsZWRfOwotICBwcml2YXRlIFN0cmluZyBzZXJ2aWNlUmVmTmFtZV87Ci0gIHByaXZhdGUgaW50IERFRkFVTFRfQ09MVU1OX1dJRFRIID0gMTUwOwotCi0gIC8vIC0tLS1UT09MVElQUyBTZWN0aW9uLS0tLQotICAvKiBDT05URVhUX0lEIEhETFIwMDAxIGZvciB0aGUgSGFuZGxlciBDb25maWcgUGFnZSAqLwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBJTkZPUE9QX0hETFJfV1NfSEFORExFUlMgPSAiSERMUjAwMDEiOyAvLyROT04tTkxTLTEkCi0KLSAgLyogQ09OVEVYVF9JRCBIRExSMDAwMiBmb3IgdGhlIEhhbmRsZXIgQ29uZmlnIFBhZ2UgKi8KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9IRExSX0dFTl9TS0VMRVRPTiA9ICJIRExSMDAwMiI7IC8vJE5PTi1OTFMtMSQKLQotICAvKiBDT05URVhUX0lEIEhETFIwMDAzIGZvciB0aGUgSGFuZGxlciBDb25maWcgUGFnZSAqLwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBJTkZPUE9QX0NPTUJPX1NPVVJDRV9MT0MgPSAiSERMUjAwMDMiOyAvLyROT04tTkxTLTEkCi0KLSAgLyogQ09OVEVYVF9JRCBIRExSMDAwNCBmb3IgdGhlIEhhbmRsZXIgQ29uZmlnIFBhZ2UgKi8KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9XU19DTElFTlRfUkVGID0gIkhETFIwMDA0IjsgLy8kTk9OLU5MUy0xJAotCi0gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIHB1YmxpYyBDb25maWdDbGllbnRIYW5kbGVyc1RhYmxlV2lkZ2V0KCkgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICBwdWJsaWMgV2lkZ2V0RGF0YUV2ZW50cyBhZGRDb250cm9scyhDb21wb3NpdGUgcGFyZW50LCBMaXN0ZW5lciBzdGF0dXNMaXN0ZW5lcikgewotCi0gICAgVUlVdGlscyB1aVV0aWxzID0gbmV3IFVJVXRpbHMocGx1Z2luSWRfKTsKLQotICAgIHBhcmVudF8gPSBwYXJlbnQ7Ci0KLSAgICAvLyBXZWIgc2VydmljZSByZWZlcmVuY2UgY29tYm8KLSAgICB3ZWJTZXJ2aWNlUmVmQ29tcF8gPSB1aVV0aWxzLmNyZWF0ZUNvbXBvc2l0ZShwYXJlbnRfLCAyKTsKLQotICAgIENvbXBvc2l0ZSBkaXNwbGF5Q29tcCA9IG5ldyBDb21wb3NpdGUocGFyZW50XywgU1dULk5PTkUpOwotICAgIEdyaWRMYXlvdXQgZ3JpZGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KDIsIGZhbHNlKTsKLSAgICBkaXNwbGF5Q29tcC5zZXRMYXlvdXQoZ3JpZGxheW91dCk7Ci0gICAgZGlzcGxheUNvbXAuc2V0TGF5b3V0RGF0YSh1aVV0aWxzLmNyZWF0ZUZpbGxBbGwoKSk7Ci0KLSAgICBmaW5hbCBDb21wb3NpdGUgaGFuZGxlcnNDb21wID0gdWlVdGlscy5jcmVhdGVDb21wb3NpdGUoZGlzcGxheUNvbXAsIDEpOwotICAgIEdyaWREYXRhIGdyaWRkYXRhID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCB8R3JpZERhdGEuR1JBQl9IT1JJWk9OVEFMIHwgR3JpZERhdGEuVkVSVElDQUxfQUxJR05fQkVHSU5OSU5HIAotICAgICAgICAgICAgfCBHcmlkRGF0YS5WRVJUSUNBTF9BTElHTl9GSUxMIHwgR3JpZERhdGEuR1JBQl9WRVJUSUNBTCB8IEdyaWREYXRhLkZJTExfVkVSVElDQUwpOwotICAgIGhhbmRsZXJzQ29tcC5zZXRMYXlvdXREYXRhKGdyaWRkYXRhKTsKLSAgICBoYW5kbGVyc0NvbXAuc2V0U2l6ZSgxMzAsIDYwMCk7Ci0gICAgCi0gICAgQ29tcG9zaXRlIGJ1dHRvbnNDb21wID0gdWlVdGlscy5jcmVhdGVDb21wb3NpdGUoZGlzcGxheUNvbXAsIDEpOwotICAgIGdyaWRkYXRhID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCB8IEdyaWREYXRhLkdSQUJfSE9SSVpPTlRBTCB8IEdyaWREYXRhLlZFUlRJQ0FMX0FMSUdOX0JFR0lOTklORyk7Ci0gICAgYnV0dG9uc0NvbXAuc2V0TGF5b3V0RGF0YShncmlkZGF0YSk7Ci0KLSAgICBUZXh0IGhhbmRsZXJzVGV4dCA9IG5ldyBUZXh0KGhhbmRsZXJzQ29tcCwgU1dULlJFQURfT05MWSk7Ci0gICAgaGFuZGxlcnNUZXh0LnNldFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX0hBTkRMRVJTX0NPTkZJRyk7Ci0gICAgR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMKTsKLSAgICBnZC5ob3Jpem9udGFsU3BhbiA9IDI7Ci0gICAgaGFuZGxlcnNUZXh0LnNldExheW91dERhdGEoZ2QpOwotCi0gICAgaGFuZGxlcnNUYWJsZV8gPSB1aVV0aWxzLmNyZWF0ZVRhYmxlKGhhbmRsZXJzQ29tcCwgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfRURJVF9XU19IQU5ETEVSUywgSU5GT1BPUF9IRExSX1dTX0hBTkRMRVJTLCBTV1QuTVVMVEkgfCBTV1QuRlVMTF9TRUxFQ1RJT04gfCBTV1QuQk9SREVSKTsKLSAgICBoYW5kbGVyc1RhYmxlXy5zZXRIZWFkZXJWaXNpYmxlKHRydWUpOwotICAgIGhhbmRsZXJzVGFibGVfLnNldExpbmVzVmlzaWJsZSh0cnVlKTsKLQotICAgIC8vIGVtcHR5IHNwYWNlCi0gICAgTGFiZWwgd3NMYWJlbCA9IG5ldyBMYWJlbChidXR0b25zQ29tcCwgU1dULk5PTkUpOwotICAgIGdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCk7Ci0gICAgZ2QuaG9yaXpvbnRhbFNwYW4gPSAyOwotICAgIHdzTGFiZWwuc2V0TGF5b3V0RGF0YShnZCk7Ci0KLSAgICBCdXR0b24gbW92ZVVwQnV0dG9uID0gdWlVdGlscy5jcmVhdGVQdXNoQnV0dG9uKGJ1dHRvbnNDb21wLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfQlVUVE9OX01PVkVfVVAsIG51bGwsIG51bGwpOwotICAgIEdyaWREYXRhIG11R3JpZGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICBQb2ludCBtdXNpemUgPSBtb3ZlVXBCdXR0b24uY29tcHV0ZVNpemUoU1dULkRFRkFVTFQsIFNXVC5ERUZBVUxUKTsKLSAgICBtb3ZlVXBCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkxpc3RlbmVyKCkgewotCi0gICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkgewotICAgICAgICBoYW5kbGVNb3ZlVXBCdXR0b25TZWxlY3RlZChldmVudCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkgewotICAgICAgfQotICAgIH0pOwotCi0gICAgQnV0dG9uIG1vdmVEb3duQnV0dG9uID0gdWlVdGlscy5jcmVhdGVQdXNoQnV0dG9uKGJ1dHRvbnNDb21wLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfQlVUVE9OX01PVkVfRE9XTiwgbnVsbCwgbnVsbCk7Ci0gICAgR3JpZERhdGEgbWRHcmlkZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgIFBvaW50IG1kc2l6ZSA9IG1vdmVEb3duQnV0dG9uLmNvbXB1dGVTaXplKFNXVC5ERUZBVUxULCBTV1QuREVGQVVMVCk7Ci0gICAgbW92ZURvd25CdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkxpc3RlbmVyKCkgewotCi0gICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkgewotICAgICAgICBoYW5kbGVNb3ZlRG93bkJ1dHRvblNlbGVjdGVkKGV2ZW50KTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KSB7Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICAvLyBlbXB0eSBzcGFjZQotICAgIHdzTGFiZWwgPSBuZXcgTGFiZWwoYnV0dG9uc0NvbXAsIFNXVC5OT05FKTsKLSAgICBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwpOwotICAgIGdkLmhvcml6b250YWxTcGFuID0gMjsKLSAgICB3c0xhYmVsLnNldExheW91dERhdGEoZ2QpOwotCi0gICAgYWRkQnV0dG9uXyA9IHVpVXRpbHMuY3JlYXRlUHVzaEJ1dHRvbihidXR0b25zQ29tcCwgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX0JVVFRPTl9BREQsIG51bGwsIG51bGwpOwotICAgIEdyaWREYXRhIGFkZEdyaWRkYXRhID0gbmV3IEdyaWREYXRhKCk7IAotICAgIFBvaW50IGFkZFNpemUgPSBhZGRCdXR0b25fLmNvbXB1dGVTaXplKFNXVC5ERUZBVUxULCBTV1QuREVGQVVMVCk7Ci0gICAgYWRkQnV0dG9uXy5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKSB7Ci0KLSAgICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KSB7Ci0gICAgICAgIGhhbmRsZUFkZEJ1dHRvblNlbGVjdGVkKGV2ZW50KTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KSB7Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICByZW1vdmVCdXR0b25fID0gdWlVdGlscy5jcmVhdGVQdXNoQnV0dG9uKGJ1dHRvbnNDb21wLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfQlVUVE9OX1JFTU9WRSwgbnVsbCwgbnVsbCk7Ci0gICAgR3JpZERhdGEgcmVtR3JpZGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICBQb2ludCByZW1TaXplID0gcmVtb3ZlQnV0dG9uXy5jb21wdXRlU2l6ZShTV1QuREVGQVVMVCwgU1dULkRFRkFVTFQpOwotICAgIHJlbW92ZUJ1dHRvbl8uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkxpc3RlbmVyKCkgewotCi0gICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkgewotICAgICAgICBoYW5kbGVSZW1vdmVCdXR0b25TZWxlY3RlZChldmVudCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkgewotICAgICAgfQotICAgIH0pOwotICAgIGVuYWJsZVJlbW92ZShmYWxzZSk7Ci0KLSAgICAvLyBzZXQgdGhlIHdpZHRoIHRvIHRoZSBtYXggb2YgdGhlIGJ1dHRvbiBsYWJlbHMKLSAgICBpbnQgd2lkdGhIaW50ID0gMDsKLSAgICBpbnRbXSBzaXplcyA9IG5ldyBpbnRbXXttdXNpemUueCwgbWRzaXplLngsIGFkZFNpemUueCwgcmVtU2l6ZS54LCAxMDB9OwotICAgIGZvcihpbnQgaiA9IDA7IGogPCBzaXplcy5sZW5ndGg7IGorKykgewotICAgIAlpZiAoc2l6ZXNbal0gPiB3aWR0aEhpbnQpCi0gICAgCXdpZHRoSGludCA9IHNpemVzW2pdOwotICAgIH0KLSAgICBtdUdyaWRkYXRhLndpZHRoSGludCA9IHdpZHRoSGludDsKLSAgICBtZEdyaWRkYXRhLndpZHRoSGludCA9IHdpZHRoSGludDsKLSAgICBhZGRHcmlkZGF0YS53aWR0aEhpbnQgPSB3aWR0aEhpbnQ7Ci0gICAgcmVtR3JpZGRhdGEud2lkdGhIaW50ID0gd2lkdGhIaW50OwotICAgIAotICAgIG1vdmVVcEJ1dHRvbi5zZXRMYXlvdXREYXRhKG11R3JpZGRhdGEpOwotICAgIG1vdmVEb3duQnV0dG9uLnNldExheW91dERhdGEobWRHcmlkZGF0YSk7Ci0gICAgYWRkQnV0dG9uXy5zZXRMYXlvdXREYXRhKGFkZEdyaWRkYXRhKTsKLSAgICByZW1vdmVCdXR0b25fLnNldExheW91dERhdGEocmVtR3JpZGRhdGEpOwotICAgIAotICAgIC8vIHRhYmxlIHN0dWZmCi0gICAgU3RyaW5nW10gY29sdW1uc18gPSBuZXcgU3RyaW5nW10geyBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfSEFORExFUl9OQU1FLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCTEVfSEFORExFUl9DTEFTU307Ci0KLSAgICBmaW5hbCBUYWJsZUNvbHVtbltdIHRhYmxlQ29scyA9IG5ldyBUYWJsZUNvbHVtbltjb2x1bW5zXy5sZW5ndGhdOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29sdW1uc18ubGVuZ3RoOyBpKyspIHsKLSAgICAgIFRhYmxlQ29sdW1uIHRhYmxlQ29sdW1uID0gbmV3IFRhYmxlQ29sdW1uKGhhbmRsZXJzVGFibGVfLCBpKTsKLSAgICAgIHRhYmxlQ29sdW1uLnNldFRleHQoY29sdW1uc19baV0pOwotICAgICAgdGFibGVDb2x1bW4uc2V0QWxpZ25tZW50KFNXVC5MRUZUKTsKLSAgICAgIHRhYmxlQ29sdW1uLnNldFdpZHRoKERFRkFVTFRfQ09MVU1OX1dJRFRIKTsKLSAgICAgIHRhYmxlQ29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsKLSAgICAgIHRhYmxlQ29sc1tpXSA9IHRhYmxlQ29sdW1uOwotICAgIH0KLQotICAgIGhhbmRsZXJzQ29tcC5hZGRDb250cm9sTGlzdGVuZXIobmV3IENvbnRyb2xBZGFwdGVyKCkgewotICAgICAgICBwdWJsaWMgdm9pZCBjb250cm9sUmVzaXplZChDb250cm9sRXZlbnQgZSkgewotICAgICAgICAgIFJlY3RhbmdsZSBhcmVhID0gaGFuZGxlcnNDb21wLmdldENsaWVudEFyZWEoKTsKLSAgICAgICAgICBQb2ludCBwcmVmZXJyZWRTaXplID0gaGFuZGxlcnNUYWJsZV8uY29tcHV0ZVNpemUoU1dULkRFRkFVTFQsIFNXVC5ERUZBVUxUKTsKLSAgICAgICAgICBpbnQgd2lkdGggPSBhcmVhLndpZHRoIC0gMipoYW5kbGVyc1RhYmxlXy5nZXRCb3JkZXJXaWR0aCgpLTEwOwotICAgICAgICAgIGlmIChwcmVmZXJyZWRTaXplLnkgPiBhcmVhLmhlaWdodCArIGhhbmRsZXJzVGFibGVfLmdldEhlYWRlckhlaWdodCgpKSB7Ci0gICAgICAgICAgICAvLyBTdWJ0cmFjdCB0aGUgc2Nyb2xsYmFyIHdpZHRoIGZyb20gdGhlIHRvdGFsIGNvbHVtbiB3aWR0aAotICAgICAgICAgICAgLy8gaWYgYSB2ZXJ0aWNhbCBzY3JvbGxiYXIgd2lsbCBiZSByZXF1aXJlZAotICAgICAgICAgICAgUG9pbnQgdkJhclNpemUgPSBoYW5kbGVyc1RhYmxlXy5nZXRWZXJ0aWNhbEJhcigpLmdldFNpemUoKTsKLSAgICAgICAgICAgIHdpZHRoIC09IHZCYXJTaXplLng7Ci0gICAgICAgICAgfQotICAgICAgICAgIFBvaW50IG9sZFNpemUgPSBoYW5kbGVyc1RhYmxlXy5nZXRTaXplKCk7Ci0gICAgICAgICAgaWYgKG9sZFNpemUueCA+IGFyZWEud2lkdGgpIHsKLSAgICAgICAgICAgIC8vIHRhYmxlIGlzIGdldHRpbmcgc21hbGxlciBzbyBtYWtlIHRoZSBjb2x1bW5zIAotICAgICAgICAgICAgLy8gc21hbGxlciBmaXJzdCBhbmQgdGhlbiByZXNpemUgdGhlIHRhYmxlIHRvCi0gICAgICAgICAgICAvLyBtYXRjaCB0aGUgY2xpZW50IGFyZWEgd2lkdGgKLSAgICAgICAgICAgIHRhYmxlQ29sc1swXS5zZXRXaWR0aCh3aWR0aC8yKTsKLSAgICAgICAgICAgIHRhYmxlQ29sc1sxXS5zZXRXaWR0aCh3aWR0aCAtIHRhYmxlQ29sc1swXS5nZXRXaWR0aCgpKTsKLSAgICAgICAgICAgIGhhbmRsZXJzVGFibGVfLnNldFNpemUoYXJlYS53aWR0aCwgYXJlYS5oZWlnaHQpOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyB0YWJsZSBpcyBnZXR0aW5nIGJpZ2dlciBzbyBtYWtlIHRoZSB0YWJsZSAKLSAgICAgICAgICAgIC8vIGJpZ2dlciBmaXJzdCBhbmQgdGhlbiBtYWtlIHRoZSBjb2x1bW5zIHdpZGVyCi0gICAgICAgICAgICAvLyB0byBtYXRjaCB0aGUgY2xpZW50IGFyZWEgd2lkdGgKLSAgICAgICAgICAgICAgaGFuZGxlcnNUYWJsZV8uc2V0U2l6ZShhcmVhLndpZHRoLCBhcmVhLmhlaWdodCk7Ci0gICAgICAgICAgICAgIHRhYmxlQ29sc1swXS5zZXRXaWR0aCh3aWR0aC8yKTsKLSAgICAgICAgICAgICAgdGFibGVDb2xzWzFdLnNldFdpZHRoKHdpZHRoIC0gdGFibGVDb2xzWzBdLmdldFdpZHRoKCkpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfSk7ICAgIAotICAgIAotICAgIHRhYmxlVmlld2VyXyA9IG5ldyBUYWJsZVZpZXdlcihoYW5kbGVyc1RhYmxlXyk7Ci0gICAgQ29udHJvbCBjb250cm9sID0gdGFibGVWaWV3ZXJfLmdldENvbnRyb2woKTsKLQotICAgIEdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICBkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIGRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7Ci0gICAgZGF0YS52ZXJ0aWNhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgZGF0YS5ncmFiRXhjZXNzVmVydGljYWxTcGFjZSA9IHRydWU7Ci0gICAgY29udHJvbC5zZXRMYXlvdXREYXRhKGRhdGEpOwotCi0gICAgdGFibGVWaWV3ZXJfLnNldENvbHVtblByb3BlcnRpZXMoY29sdW1uc18pOwotICAgIHRhYmxlVmlld2VyXy5zZXRDb250ZW50UHJvdmlkZXIobmV3IExpc3RDb250ZW50UHJvdmlkZXIoKSk7Ci0gICAgdGFibGVWaWV3ZXJfLnNldExhYmVsUHJvdmlkZXIobmV3IExpc3RMYWJlbFByb3ZpZGVyKCkpOwotICAgIHRhYmxlVmlld2VyXy5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIobmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7Ci0KLSAgICAgIHB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7Ci0gICAgICAgIGVuYWJsZVJlbW92ZSh0cnVlKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgIAotICAgIC8vIGdlbiBza2VsZXRvbiBjaGVjayBib3gKLSAgICBnZW5Ta2VsZXRvblJhZGlvQnV0dG9uXyA9IHVpVXRpbHMuY3JlYXRlQ2hlY2tib3gocGFyZW50XywgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX0JVVFRPTl9HRU5fU0tFTEVUT04sIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX0JVVFRPTl9HRU5fU0tFTEVUT04sIElORk9QT1BfSERMUl9HRU5fU0tFTEVUT04pOwotICAgIGdlblNrZWxldG9uUmFkaW9CdXR0b25fLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgewotCi0gICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldnQpIHsKLSAgICAgICAgaGFuZGxlR2VuU2tlbGV0b25SYWRpb0J1dHRvbigpOwotICAgICAgfQotICAgIH0pOwotCi0gICAgLy8gc291cmNlIGxvY2F0aW9uIGNvbWJvCi0gICAgc291cmNlTG9jYXRpb25Db21wXyA9IHVpVXRpbHMuY3JlYXRlQ29tcG9zaXRlKHBhcmVudF8sIDIpOwotICAgIHNvdXJjZUxvY2F0aW9uQ29tYm9fID0gdWlVdGlscy5jcmVhdGVDb21ibyhzb3VyY2VMb2NhdGlvbkNvbXBfLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfQ09NQk9fU09VUkNFX0xPQywgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfQ09NQk9fU09VUkNFX0xPQywgSU5GT1BPUF9DT01CT19TT1VSQ0VfTE9DLAotICAgICAgICBTV1QuUkVBRF9PTkxZKTsKLSAgICBzb3VyY2VMb2NhdGlvbkNvbWJvXy5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKLQotICAgICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZ0KSB7Ci0gICAgICAgIGhhbmRsZVNvdXJjZUxvY2F0aW9uQ29tYm8oZXZ0KTsKLSAgICAgIH0KLSAgICB9KTsKLQotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLy8gQ2FsbGVkIGF0IHN0YXJ0Ci0gIHByaXZhdGUgdm9pZCBwb3B1bGF0ZUhhbmRsZXJzVGFibGUoKSB7Ci0gICAgdHJ5IHsKLSAgICAgIFVJVXRpbHMgdWlVdGlscyA9IG5ldyBVSVV0aWxzKHBsdWdpbklkXyk7Ci0KLSAgICAgIC8vIHByb2Nlc3MgZm9yIG11bHRpcGxlIHNlcnZpY2Ugc2VsZWN0aW9uCi0gICAgICBpZiAoaXNNdWx0aXBsZVNlbGVjdGlvbl8pIHsKLSAgICAgICAgd2ViU2VydmljZURlc2NUZXh0XyA9IHVpVXRpbHMuY3JlYXRlVGV4dCh3ZWJTZXJ2aWNlUmVmQ29tcF8sIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9DT01CT19XU19DTElFTlRfUkVGLCAKLSAgICAgICAgICAgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTX0NMSUVOVF9SRUYsIElORk9QT1BfV1NfQ0xJRU5UX1JFRiwgU1dULlJFQURfT05MWSk7Ci0gICAgICAgIGlmIChoYW5kbGVyU2VydmljZVJlZkhvbGRlcl8hPW51bGwpewotICAgICAgICAgIGN1cnJlbnRIU1JIXyA9IGhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyX1swXTsKLSAgICAgICAgICBTdHJpbmcgdGV4dCA9IE5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfVEVYVF9OVU1fT0ZfQ0xJRU5UUywgSW50ZWdlci50b1N0cmluZyhoYW5kbGVyU2VydmljZVJlZkhvbGRlcl8ubGVuZ3RoKSk7ICAgICAgICAgIAotICAgICAgICAgIHdlYlNlcnZpY2VEZXNjVGV4dF8uc2V0VGV4dCh0ZXh0KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZ2VuU2tlbGV0b25SYWRpb0J1dHRvbl8uc2V0U2VsZWN0aW9uKGZhbHNlKTsKLSAgICAgICAgZ2VuU2tlbGV0b25SYWRpb0J1dHRvbl8uc2V0RW5hYmxlZChmYWxzZSk7Ci0gICAgICAgIGdlblNrZWxldG9uUmFkaW9CdXR0b25fLnNldFZpc2libGUoZmFsc2UpOwotICAgICAgICAKLSAgICAgICAgc291cmNlTG9jYXRpb25Db21wXy5zZXRWaXNpYmxlKGZhbHNlKTsKLSAgICAgICAgc291cmNlTG9jYXRpb25Db21ib18uc2V0RW5hYmxlZChmYWxzZSk7Ci0gICAgICAgIHNvdXJjZUxvY2F0aW9uQ29tYm9fLnNldFZpc2libGUoZmFsc2UpOwotICAgICAgICAKLSAgICAgICAgcmVmcmVzaCgpOwotCi0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgCi0gICAgICAgIHdlYlNlcnZpY2VSZWZDb21ib18gPSB1aVV0aWxzLmNyZWF0ZUNvbWJvKHdlYlNlcnZpY2VSZWZDb21wXywgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX0NPTUJPX1dTX0NMSUVOVF9SRUYsIAotICAgICAgICAgICAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NfQ0xJRU5UX1JFRiwgSU5GT1BPUF9XU19DTElFTlRfUkVGLCBTV1QuUkVBRF9PTkxZKTsKLSAgICAgICAgd2ViU2VydmljZVJlZkNvbWJvXy5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKLSAgICAgICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldnQpIHsKLSAgICAgICAgICAgIGhhbmRsZVdlYlNlcnZpY2VSZWZDb21ibyhldnQpOwotICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAgU3RyaW5nW10gd3NSZWZOYW1lcyA9IEhhbmRsZXJTZXJ2aWNlUmVmSGVscGVyLmdldEFsbFNlcnZpY2VSZWZOYW1lcyhoYW5kbGVyU2VydmljZVJlZkhvbGRlcl8pOyAKLSAgICAgICAgd2ViU2VydmljZVJlZkNvbWJvXy5zZXRJdGVtcyh3c1JlZk5hbWVzKTsKLSAgCi0gICAgICAgIGlmIChoYW5kbGVyU2VydmljZVJlZkhvbGRlcl8ubGVuZ3RoIDwgMSkgewotICAgICAgICAgIHdlYlNlcnZpY2VSZWZDb21ib18uc2VsZWN0KDApOwotICAgICAgICAgIHdlYlNlcnZpY2VSZWZDb21ib18uc2V0RW5hYmxlZChmYWxzZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgaWYgKHNlcnZpY2VSZWZOYW1lXyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBpbnQgaW5kZXggPSB3ZWJTZXJ2aWNlUmVmQ29tYm9fLmluZGV4T2Yoc2VydmljZVJlZk5hbWVfKTsKLSAgICAgICAgICAgIGlmIChpbmRleCAhPSAtMSkgd2ViU2VydmljZVJlZkNvbWJvXy5zZWxlY3QoaW5kZXgpOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB3ZWJTZXJ2aWNlUmVmQ29tYm9fLnNlbGVjdCgwKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gc2V0IGhhbmRsZXIgdGFibGUKLSAgICAgICAgSGFuZGxlclNlcnZpY2VSZWZIb2xkZXIgaHNyaCA9IEhhbmRsZXJTZXJ2aWNlUmVmSGVscGVyLmdldEZvclNlcnZpY2VSZWZOYW1lKGhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyXywgd2ViU2VydmljZVJlZkNvbWJvXy5nZXRUZXh0KCkpOwotICAgICAgICBpZiAoaHNyaCAhPSBudWxsKSB7Ci0gICAgICAgICAgY3VycmVudEhTUkhfID0gaHNyaDsKLSAgICAgICAgICBMaXN0IGhhbmRsZXJzID0gaHNyaC5nZXRIYW5kbGVyTGlzdCgpOwotICAgICAgICAgIHRhYmxlVmlld2VyXy5zZXRJbnB1dChoYW5kbGVycyk7Ci0gICAgICAgICAgdGFibGVWaWV3ZXJfLnJlZnJlc2goKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gc2V0IG91dHB1dCBmb2xkZXIKLSAgICAgICAgc2V0U291cmNlT3V0cHV0TG9jYXRpb24oKTsKLSAgICAgIH0KLSAgICAgIHBhcmVudF8uZ2V0U2hlbGwoKS5zZXRTaXplKDUzMCwgNjUwKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLSAgICAKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuV2lkZ2V0Q29udHJpYnV0b3IjZ2V0U3RhdHVzKCkKLSAgICovCi0gIHB1YmxpYyBJU3RhdHVzIGdldFN0YXR1cygpIHsKLSAgICBJU3RhdHVzIGZpbmFsU3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICBpZiAoaXNNdWx0aXBsZVNlbGVjdGlvbl8pCi0gICAgICByZXR1cm4gU3RhdHVzVXRpbHMuaW5mb1N0YXR1cyhDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9ERVNDX01VTFRJUExFX0NMSUVOVFNfQ09ORklHKTsKLSAgICByZXR1cm4gZmluYWxTdGF0dXM7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVBZGRCdXR0b25TZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkgewotCi0gICAgQWRkSGFuZGxlckRpYWxvZyBkaWFsb2cgPSBuZXcgQWRkSGFuZGxlckRpYWxvZyhwYXJlbnRfLmdldFNoZWxsKCksIHRydWUpOwotICAgIGRpYWxvZy5jcmVhdGUoKTsKLSAgICBkaWFsb2cuZ2V0U2hlbGwoKS5zZXRTaXplKCA1MDAsIDIwMCApOwotICAgIAotICAgIGludCByZXN1bHQgPSBkaWFsb2cub3BlbigpOwotCi0gICAgaWYgKHJlc3VsdCA9PSBXaW5kb3cuT0spIHsKLSAgICAgIFN0cmluZyBuYW1lID0gZGlhbG9nLmdldE5hbWUoKTsKLSAgICAgIFN0cmluZyBjbGFzc05hbWUgPSBkaWFsb2cuZ2V0Q2xhc3NOYW1lKCk7Ci0KLSAgICAgIEhhbmRsZXJUYWJsZUl0ZW0gaGkgPSBuZXcgSGFuZGxlclRhYmxlSXRlbSgpOwotICAgICAgaGkuc2V0SGFuZGxlck5hbWUobmFtZSk7Ci0gICAgICBoaS5zZXRIYW5kbGVyQ2xhc3NOYW1lKGNsYXNzTmFtZSk7Ci0gICAgICAKLSAgICAgIFNlcnZpY2VSZWYgc2VydmljZVJlZiA9IGN1cnJlbnRIU1JIXy5nZXRTZXJ2aWNlUmVmKCk7Ci0gICAgICBoaS5zZXRXc0Rlc2NSZWYoc2VydmljZVJlZik7Ci0gICAgICBjdXJyZW50SFNSSF8uZ2V0SGFuZGxlckxpc3QoKS5hZGQoaGkpOwotICAgIH0KLQotICAgIHJlZnJlc2goKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGhhbmRsZVJlbW92ZUJ1dHRvblNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KSB7Ci0gICAgaGFuZGxlRGVsZXRlS2V5UHJlc3NlZCgpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlTW92ZVVwQnV0dG9uU2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZlbnQpIHsKLQotICAgIGludCBpbmRleCA9IHRhYmxlVmlld2VyXy5nZXRUYWJsZSgpLmdldFNlbGVjdGlvbkluZGV4KCk7Ci0gICAgaWYgKGluZGV4ICE9IC0xKSB7Ci0gICAgICBpZiAoaW5kZXggPiAwKSB7Ci0gICAgICAgIGlmIChjdXJyZW50SFNSSF8hPW51bGwpIHsKLSAgICAgICAgICBMaXN0IGhhbmRsZXJzID0gY3VycmVudEhTUkhfLmdldEhhbmRsZXJMaXN0KCk7Ci0gICAgICAgICAgT2JqZWN0IG9iamVjdCA9IGhhbmRsZXJzLnJlbW92ZShpbmRleCk7Ci0gICAgICAgICAgaGFuZGxlcnMuYWRkKCBpbmRleCAtIDEsIG9iamVjdCk7Ci0gICAgICAgICAgdGFibGVWaWV3ZXJfLnJlZnJlc2goKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlTW92ZURvd25CdXR0b25TZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkgewotCi0gICAgaW50IGluZGV4ID0gdGFibGVWaWV3ZXJfLmdldFRhYmxlKCkuZ2V0U2VsZWN0aW9uSW5kZXgoKTsKLSAgICBpZiAoaW5kZXggIT0gLTEpIHsKLSAgICAgIGlmIChjdXJyZW50SFNSSF8hPW51bGwpewotICAgICAgICBMaXN0IGhhbmRsZXJzID0gY3VycmVudEhTUkhfLmdldEhhbmRsZXJMaXN0KCk7Ci0gICAgICAgIGlmIChpbmRleCA8IGhhbmRsZXJzLnNpemUoKSAtIDEpIHsKLSAgICAgICAgICBPYmplY3Qgb2JqZWN0ID0gaGFuZGxlcnMucmVtb3ZlKGluZGV4KTsKLSAgICAgICAgICBoYW5kbGVycy5hZGQoaW5kZXggKyAxLCBvYmplY3QpOwotICAgICAgICAgIHRhYmxlVmlld2VyXy5yZWZyZXNoKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGhhbmRsZVNvdXJjZUxvY2F0aW9uQ29tYm8oU2VsZWN0aW9uRXZlbnQgZXZlbnQpIHsKLSAgICBvdXRwdXRMb2NhdGlvbl8gPSBzb3VyY2VMb2NhdGlvbkNvbWJvXy5nZXRUZXh0KCk7Ci0gICAgSVBhdGggb3V0cHV0UGF0aCA9IChJUGF0aCkgcGF0aHNUYWJsZV8uZ2V0KG91dHB1dExvY2F0aW9uXyk7Ci0gICAgY3VycmVudEhTUkhfLnNldFNvdXJjZU91dHB1dFBhdGgob3V0cHV0UGF0aCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVHZW5Ta2VsZXRvblJhZGlvQnV0dG9uKCkgewotICAgIGlmIChnZW5Ta2VsZXRvblJhZGlvQnV0dG9uXy5pc0VuYWJsZWQoKSkgewotICAgICAgaWYgKGdlblNrZWxldG9uUmFkaW9CdXR0b25fLmdldFNlbGVjdGlvbigpKSB7Ci0gICAgICAgIHRoaXMuaXNHZW5Ta2VsZXRvbkVuYWJsZWRfID0gdHJ1ZTsKLSAgICAgICAgc291cmNlTG9jYXRpb25Db21ib18uc2V0RW5hYmxlZCh0cnVlKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICB0aGlzLmlzR2VuU2tlbGV0b25FbmFibGVkXyA9IGZhbHNlOwotICAgICAgICBzb3VyY2VMb2NhdGlvbkNvbWJvXy5zZXRFbmFibGVkKGZhbHNlKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVXZWJTZXJ2aWNlUmVmQ29tYm8oU2VsZWN0aW9uRXZlbnQgZXZlbnQpIHsKLQotICAgIGlmICh3ZWJTZXJ2aWNlUmVmQ29tYm9fIT1udWxsICYmIHdlYlNlcnZpY2VSZWZDb21ib18uaXNFbmFibGVkKCkpIHsKLSAgICAgIEhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyIGhzcmggPSBIYW5kbGVyU2VydmljZVJlZkhlbHBlci5nZXRGb3JTZXJ2aWNlUmVmTmFtZShoYW5kbGVyU2VydmljZVJlZkhvbGRlcl8sIHdlYlNlcnZpY2VSZWZDb21ib18uZ2V0VGV4dCgpKTsKLSAgICAgIGN1cnJlbnRIU1JIXyA9IGhzcmg7ICAgICAgCi0gICAgICByZWZyZXNoKCk7Ci0gICAgfQotICAgIAotICAgIGlmIChpc0dlblNrZWxldG9uRW5hYmxlZF8pewotICAgICAgc2V0U291cmNlT3V0cHV0TG9jYXRpb24oKTsKLSAgICB9Ci0gICAgCi0gIH0KLQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBpc0dlblNrZWxldG9uRW5hYmxlZF8uCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0dlblNrZWxldG9uRW5hYmxlZF8oKSB7Ci0gICAgcmV0dXJuIGlzR2VuU2tlbGV0b25FbmFibGVkXzsKLSAgfQotCi0gIHByb3RlY3RlZCBjbGFzcyBMaXN0TGFiZWxQcm92aWRlciBleHRlbmRzIExhYmVsUHJvdmlkZXIgaW1wbGVtZW50cyBJVGFibGVMYWJlbFByb3ZpZGVyIHsKLQotICAgIHB1YmxpYyBJbWFnZSBnZXRDb2x1bW5JbWFnZShPYmplY3QgZWxlbWVudCwgaW50IGNvbHVtbkluZGV4KSB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldENvbHVtblRleHQoT2JqZWN0IG9iamVjdCwgaW50IGNvbHVtbkluZGV4KSB7Ci0KLSAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBIYW5kbGVyVGFibGVJdGVtKSB7Ci0gICAgICAgIEhhbmRsZXJUYWJsZUl0ZW0gaHRpID0gKEhhbmRsZXJUYWJsZUl0ZW0pIG9iamVjdDsKLSAgICAgICAgaWYgKGNvbHVtbkluZGV4ID09IDApIHsKLQotICAgICAgICAgIHJldHVybiBodGkuZ2V0SGFuZGxlck5hbWUoKSAhPSBudWxsID8gaHRpLmdldEhhbmRsZXJOYW1lKCkgOiAiIjsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChjb2x1bW5JbmRleCA9PSAxKSB7IHJldHVybiBodGkuZ2V0SGFuZGxlckNsYXNzTmFtZSgpICE9IG51bGwgPyBodGkuZ2V0SGFuZGxlckNsYXNzTmFtZSgpIDogIiI7IH0KLSAgICAgIH0KLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGVuYWJsZVJlbW92ZShib29sZWFuIGVuYWJsZWQpIHsKLSAgICByZW1vdmVCdXR0b25fLnNldEVuYWJsZWQoZW5hYmxlZCAmJiAhdGFibGVWaWV3ZXJfLmdldFNlbGVjdGlvbigpLmlzRW1wdHkoKSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgY2xhc3MgTGlzdENvbnRlbnRQcm92aWRlciBpbXBsZW1lbnRzIElTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyIHsKLQotICAgIHB1YmxpYyBPYmplY3RbXSBnZXRFbGVtZW50cyhPYmplY3QgZWxlbWVudCkgewotICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBWZWN0b3IpIHsgcmV0dXJuICgoVmVjdG9yKSBlbGVtZW50KS50b0FycmF5KCk7IH0KLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgaW5wdXRDaGFuZ2VkKFZpZXdlciB2aWV3ZXIsIE9iamVjdCBvbGQsIE9iamVjdCBuZXdvYmopIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc0RlbGV0ZWQoT2JqZWN0IG9iamVjdCkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGhhbmRsZURlbGV0ZUtleVByZXNzZWQoKSB7Ci0gICAgSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSB0YWJsZVZpZXdlcl8uZ2V0U2VsZWN0aW9uKCk7Ci0gICAgaWYgKHNlbGVjdGlvbiAhPSBudWxsICYmICFzZWxlY3Rpb24uaXNFbXB0eSgpICYmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikpIHsKLSAgICAgIGludCBzZWxlY3Rpb25JbmRleCA9IGhhbmRsZXJzVGFibGVfLmdldFNlbGVjdGlvbkluZGV4KCk7Ci0gICAgICBpZiAoY3VycmVudEhTUkhfIT1udWxsKXsKLSAgICAgICAgY3VycmVudEhTUkhfLmdldEhhbmRsZXJMaXN0KCkucmVtb3ZlKHNlbGVjdGlvbkluZGV4KTsKLSAgICAgIH0KLSAgICAgIHJlZnJlc2goKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZWZyZXNoKCkgewotICAgIAotICAgIHRyeSB7Ci0gICAgICB0YWJsZVZpZXdlcl8uc2V0SW5wdXQobnVsbCk7Ci0gICAgICBpZiAoY3VycmVudEhTUkhfIT1udWxsKXsKLSAgICAgICAgTGlzdCBoYW5kbGVycyA9IGN1cnJlbnRIU1JIXy5nZXRIYW5kbGVyTGlzdCgpOwotICAgICAgICB0YWJsZVZpZXdlcl8uc2V0SW5wdXQoaGFuZGxlcnMpOwotICAgICAgICB0YWJsZVZpZXdlcl8ucmVmcmVzaCgpOyAgICAgICAgCi0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9Ci0gICAgCi0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRHZW5Ta2VsZXRvbkVuYWJsZWQoYm9vbGVhbiBpc0dlblNrZWxldG9uRW5hYmxlZCkgewotICAgIHRoaXMuaXNHZW5Ta2VsZXRvbkVuYWJsZWRfID0gaXNHZW5Ta2VsZXRvbkVuYWJsZWQ7Ci0gICAgZ2VuU2tlbGV0b25SYWRpb0J1dHRvbl8uc2V0U2VsZWN0aW9uKGlzR2VuU2tlbGV0b25FbmFibGVkKTsKLQotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZ2V0R2VuU2tlbGV0b25FbmFibGVkKCkgewotICAgIHJldHVybiB0aGlzLmlzR2VuU2tlbGV0b25FbmFibGVkXzsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBzZXRTb3VyY2VPdXRwdXRMb2NhdGlvbigpewotICAgIGlmIChjdXJyZW50SFNSSF8hPW51bGwpeyAgICAKLSAgICAgIElQcm9qZWN0IHByb2plY3QgPSBjdXJyZW50SFNSSF8uZ2V0UHJvamVjdCgpOwotICAgICAgaWYgKHByb2plY3QhPW51bGwpewotICAgICAgICBJUGF0aFtdbG9jYXRpb25zID0gUmVzb3VyY2VVdGlscy5nZXRBbGxKYXZhU291cmNlTG9jYXRpb25zKHByb2plY3QpOwotICAgICAgICBTdHJpbmdbXSBwYXRocyA9IG5ldyBTdHJpbmdbbG9jYXRpb25zLmxlbmd0aF07Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbG9jYXRpb25zLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgcGF0aHNbaV0gPSBsb2NhdGlvbnNbaV0udG9TdHJpbmcoKTsKLSAgICAgICAgICBwYXRoc1RhYmxlXy5wdXQocGF0aHNbaV0sIGxvY2F0aW9uc1tpXSk7Ci0gICAgICAgIH0KLSAgICAgICAgc291cmNlTG9jYXRpb25Db21ib18uc2V0SXRlbXMocGF0aHMpOwotICAgICAgICBzb3VyY2VMb2NhdGlvbkNvbWJvXy5zZWxlY3QoMCk7ICAgICAgICAKLSAgICAgIH0KLSAgICAgIAotICAgICAgLy8gc2V0IGluIG1vZGVsCi0gICAgICBvdXRwdXRMb2NhdGlvbl8gPSBzb3VyY2VMb2NhdGlvbkNvbWJvXy5nZXRUZXh0KCk7Ci0gICAgICBJUGF0aCBvdXRwdXRQYXRoID0gKElQYXRoKSBwYXRoc1RhYmxlXy5nZXQob3V0cHV0TG9jYXRpb25fKTsKLSAgICAgIGN1cnJlbnRIU1JIXy5zZXRTb3VyY2VPdXRwdXRQYXRoKG91dHB1dFBhdGgpOyAgICAgIAotICAgIH0KLSAgfQotICAKLSAgLyoqCi0gICAqIENhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIAotICAgKi8KLSAgcHVibGljIHZvaWQgaW50ZXJuYWxpemUoKXsKLSAgICBwb3B1bGF0ZUhhbmRsZXJzVGFibGUoKTsKLSAgfSAKLSAgCi0gIC8qKgotICAgKiBJbml0aWFsIHNlbGVjdGlvbgotICAgKiBAcGFyYW0gd3NSZWZOYW1lCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlUmVmTmFtZShTdHJpbmcgd3NSZWZOYW1lKSB7Ci0gICAgc2VydmljZVJlZk5hbWVfID0gd3NSZWZOYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIHRydWUgaWYgbXVsdGlwbGUgY2xpZW50cyBhcmUgc2VsZWN0ZWQKLSAgICogQHBhcmFtIGlzTXVsaXRwbGVTZWxlY3Rpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldElzTXVsdGlwbGVTZWxlY3Rpb24oYm9vbGVhbiBpc011bGl0cGxlU2VsZWN0aW9uKSB7Ci0gICAgdGhpcy5pc011bHRpcGxlU2VsZWN0aW9uXyA9IGlzTXVsaXRwbGVTZWxlY3Rpb247Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBBbiBhcnJheSBvZiBIYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJzCi0gICAqIEByZXR1cm4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyKEhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyW10gaGFuZGxlckhvbGRlcnMpewotICAgIHRoaXMuaGFuZGxlclNlcnZpY2VSZWZIb2xkZXJfID0gaGFuZGxlckhvbGRlcnM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBIYW5kbGVyU2VydmljZVJlZkhvbGRlcltdIGdldEhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyKCl7Ci0gICAgcmV0dXJuIHRoaXMuaGFuZGxlclNlcnZpY2VSZWZIb2xkZXJfOwotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL0NvbmZpZ1NlcnZpY2VIYW5kbGVyc1RhYmxlV2lkZ2V0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvQ29uZmlnU2VydmljZUhhbmRsZXJzVGFibGVXaWRnZXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzdiMTVlYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvQ29uZmlnU2VydmljZUhhbmRsZXJzVGFibGVXaWRnZXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY4NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MDQgMTM0OTEzICAgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1ICAgICAgIAotICogMjAwNjA0MjYgICAxMzU2MTQgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA2MDUyOSAgIDE0MzUxOCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0czsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZENvbnRlbnRQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRhYmxlTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkxhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UYWJsZVZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5Qb3J0Q29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5XZWJTZXJ2aWNlRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1vbi5IYW5kbGVyRGVzY3JpcHRpb25IZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1vbi5IYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0LkhhbmRsZXJUYWJsZUl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLmNvbW1vbi5VSVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUmVjdGFuZ2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZUNvbHVtbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5TaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0RGF0YUV2ZW50czsKLQotLyoqCi0gKiBDb25maWdTZXJ2aWNlSGFuZGxlcnNUcmVlV2lkZ2V0Ci0gKiAKLSAqLwotcHVibGljIGNsYXNzIENvbmZpZ1NlcnZpY2VIYW5kbGVyc1RhYmxlV2lkZ2V0IGV4dGVuZHMgU2ltcGxlV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yIHsKLQotICBwcml2YXRlIFN0cmluZyBwbHVnaW5JZF8gPSAib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpIjsKLSAgCi0gIHByaXZhdGUgQ29tcG9zaXRlIHBhcmVudF87Ci0gIHByaXZhdGUgVGFibGUgaGFuZGxlcnNUYWJsZV87Ci0gIHByaXZhdGUgVGFibGVWaWV3ZXIgdGFibGVWaWV3ZXJfOwotICBwcml2YXRlIENvbXBvc2l0ZSB3ZWJTZXJ2aWNlRGVzY0NvbXBfOwotICBwcml2YXRlIENvbWJvIHdlYlNlcnZpY2VEZXNjQ29tYm9fID0gbnVsbDsKLSAgcHJpdmF0ZSBUZXh0IHdlYlNlcnZpY2VEZXNjVGV4dF8gPSBudWxsOwotICBwcml2YXRlIEJ1dHRvbiBhZGRCdXR0b25fOwotICBwcml2YXRlIEJ1dHRvbiByZW1vdmVCdXR0b25fOwotICBwcml2YXRlIEJ1dHRvbiBnZW5Ta2VsZXRvblJhZGlvQnV0dG9uXzsKLSAgcHJpdmF0ZSBDb21wb3NpdGUgc291cmNlTG9jYXRpb25Db21wXzsKLSAgcHJpdmF0ZSBDb21ibyBzb3VyY2VMb2NhdGlvbkNvbWJvXzsKLSAgCi0gIHByaXZhdGUgSGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyW10gaGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyXzsKLSAgcHJpdmF0ZSBIYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXIgY3VycmVudEhESF87Ci0gIHByaXZhdGUgSGFzaHRhYmxlIHBhdGhzVGFibGVfID0gbmV3IEhhc2h0YWJsZSgpOyAgLy8gYXZhaWxhYmxlIHBhdGhzIGZvciBjb21ibyAgCi0gIHByaXZhdGUgU3RyaW5nIG91dHB1dExvY2F0aW9uXzsgICAgICAgICAgICAgICAgICAgLy8gc2VsZWN0ZWQgcGF0aCBmcm9tIGNvbWJvCi0gIHByaXZhdGUgU3RyaW5nIGRlc2NyaXB0aW9uTmFtZV8gPSBudWxsOwotICBwcml2YXRlIGJvb2xlYW4gaXNNdWx0aXBsZVNlbGVjdGlvbl8gPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIGlzR2VuU2tlbGV0b25FbmFibGVkXzsKLQotICBwcml2YXRlIGludCBERUZBVUxUX0NPTFVNTl9XSURUSCA9IDEwMDsKLQotICAvLyAtLS0tVE9PTFRJUFMgU2VjdGlvbi0tLS0KLSAgLyogQ09OVEVYVF9JRCBTSExEMDAwMSBmb3IgdGhlIEhhbmRsZXIgQ29uZmlnIFBhZ2UgKi8KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9IRExSX1dTX0hBTkRMRVJTID0gIlNIREwwMDAxIjsgLy8kTk9OLU5MUy0xJAotCi0gIC8qIENPTlRFWFRfSUQgU0hETDAwMDIgZm9yIHRoZSBIYW5kbGVyIENvbmZpZyBQYWdlICovCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIElORk9QT1BfSERMUl9HRU5fU0tFTEVUT04gPSAiU0hETDAwMDIiOyAvLyROT04tTkxTLTEkCi0KLSAgLyogQ09OVEVYVF9JRCBTSERMMDAwMyBmb3IgdGhlIEhhbmRsZXIgQ29uZmlnIFBhZ2UgKi8KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9DT01CT19TT1VSQ0VfTE9DID0gIlNIREwwMDAzIjsgLy8kTk9OLU5MUy0xJAotCi0gIC8qIENPTlRFWFRfSUQgU0hETDAwMDQgZm9yIHRoZSBIYW5kbGVyIENvbmZpZyBQYWdlICovCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIElORk9QT1BfV1NfU0VSVklDRV9ERVNDID0gIlNIREwwMDA0IjsgLy8kTk9OLU5MUy0xJAotCi0gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIHB1YmxpYyBDb25maWdTZXJ2aWNlSGFuZGxlcnNUYWJsZVdpZGdldCgpIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgcHVibGljIFdpZGdldERhdGFFdmVudHMgYWRkQ29udHJvbHMoQ29tcG9zaXRlIHBhcmVudCwgTGlzdGVuZXIgc3RhdHVzTGlzdGVuZXIpIHsKLSAgICBVSVV0aWxzIHVpVXRpbHMgPSBuZXcgVUlVdGlscyhwbHVnaW5JZF8pOwotCi0gICAgcGFyZW50XyA9IHBhcmVudDsKLQotICAgIC8vIFdlYiBzZXJ2aWNlIGRlc2NyaXB0aW9uIGNvbXBvc2l0ZSAoY29tYm8vdGV4dCB0byBiZSBjcmVhdGVkIGxhdGVyKQotICAgIHdlYlNlcnZpY2VEZXNjQ29tcF8gPSB1aVV0aWxzLmNyZWF0ZUNvbXBvc2l0ZShwYXJlbnRfLCAyKTsKLSAgICAKLSAgICBDb21wb3NpdGUgZGlzcGxheUNvbXAgPSBuZXcgQ29tcG9zaXRlKHBhcmVudF8sIFNXVC5OT05FKTsKLQotICAgIEdyaWRMYXlvdXQgZ3JpZGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KDIsIGZhbHNlKTsKLSAgICBkaXNwbGF5Q29tcC5zZXRMYXlvdXQoZ3JpZGxheW91dCk7Ci0gICAgZGlzcGxheUNvbXAuc2V0TGF5b3V0RGF0YSh1aVV0aWxzLmNyZWF0ZUZpbGxBbGwoKSk7Ci0KLSAgICBmaW5hbCBDb21wb3NpdGUgaGFuZGxlcnNDb21wID0gdWlVdGlscy5jcmVhdGVDb21wb3NpdGUoZGlzcGxheUNvbXAsIDEpOwotICAgIEdyaWREYXRhIGdyaWRkYXRhID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCB8IEdyaWREYXRhLkdSQUJfSE9SSVpPTlRBTCB8IEdyaWREYXRhLlZFUlRJQ0FMX0FMSUdOX0JFR0lOTklORwotICAgICAgICB8IEdyaWREYXRhLlZFUlRJQ0FMX0FMSUdOX0ZJTEwgfCBHcmlkRGF0YS5HUkFCX1ZFUlRJQ0FMIHwgR3JpZERhdGEuRklMTF9WRVJUSUNBTCk7Ci0gICAgaGFuZGxlcnNDb21wLnNldExheW91dERhdGEoZ3JpZGRhdGEpOwotICAgIGhhbmRsZXJzQ29tcC5zZXRTaXplKDEzMCwgNjAwKTsKLSAgICAKLSAgICBDb21wb3NpdGUgYnV0dG9uc0NvbXAgPSB1aVV0aWxzLmNyZWF0ZUNvbXBvc2l0ZShkaXNwbGF5Q29tcCwgMSk7Ci0gICAgZ3JpZGRhdGEgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMIHwgR3JpZERhdGEuR1JBQl9IT1JJWk9OVEFMIHwgR3JpZERhdGEuVkVSVElDQUxfQUxJR05fQkVHSU5OSU5HKTsKLSAgICBidXR0b25zQ29tcC5zZXRMYXlvdXREYXRhKGdyaWRkYXRhKTsKLQotICAgIFRleHQgaGFuZGxlcnNUZXh0ID0gbmV3IFRleHQoaGFuZGxlcnNDb21wLCBTV1QuUkVBRF9PTkxZKTsKLSAgICBoYW5kbGVyc1RleHQuc2V0VGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfSEFORExFUlNfQ09ORklHKTsKLSAgICBHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwpOwotICAgIGdkLmhvcml6b250YWxTcGFuID0gMjsKLSAgICBoYW5kbGVyc1RleHQuc2V0TGF5b3V0RGF0YShnZCk7Ci0gICAgCi0gICAgaGFuZGxlcnNUYWJsZV8gPSB1aVV0aWxzLmNyZWF0ZVRhYmxlKGhhbmRsZXJzQ29tcCwgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfRURJVF9XU19IQU5ETEVSUywgSU5GT1BPUF9IRExSX1dTX0hBTkRMRVJTLCBTV1QuTVVMVEkKLSAgICAgICAgfCBTV1QuRlVMTF9TRUxFQ1RJT04gfCBTV1QuQk9SREVSKTsKLSAgICBoYW5kbGVyc1RhYmxlXy5zZXRIZWFkZXJWaXNpYmxlKHRydWUpOwotICAgIGhhbmRsZXJzVGFibGVfLnNldExpbmVzVmlzaWJsZSh0cnVlKTsKLQotICAgIC8vIGVtcHR5IHNwYWNlCi0gICAgTGFiZWwgd3NMYWJlbCA9IG5ldyBMYWJlbChidXR0b25zQ29tcCwgU1dULk5PTkUpOwotICAgIGdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCk7Ci0gICAgZ2QuaG9yaXpvbnRhbFNwYW4gPSAyOwotICAgIHdzTGFiZWwuc2V0TGF5b3V0RGF0YShnZCk7Ci0KLSAgICBCdXR0b24gbW92ZVVwQnV0dG9uID0gdWlVdGlscy5jcmVhdGVQdXNoQnV0dG9uKGJ1dHRvbnNDb21wLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfQlVUVE9OX01PVkVfVVAsIG51bGwsIG51bGwpOwotICAgIEdyaWREYXRhIG11R3JpZGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICBQb2ludCBtdXNpemUgPSBtb3ZlVXBCdXR0b24uY29tcHV0ZVNpemUoU1dULkRFRkFVTFQsIFNXVC5ERUZBVUxUKTsKLSAgICBtb3ZlVXBCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkxpc3RlbmVyKCkgewotCi0gICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkgewotICAgICAgICBoYW5kbGVNb3ZlVXBCdXR0b25TZWxlY3RlZChldmVudCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkgewotICAgICAgfQotICAgIH0pOwotCi0gICAgQnV0dG9uIG1vdmVEb3duQnV0dG9uID0gdWlVdGlscy5jcmVhdGVQdXNoQnV0dG9uKGJ1dHRvbnNDb21wLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfQlVUVE9OX01PVkVfRE9XTiwgbnVsbCwgbnVsbCk7Ci0gICAgR3JpZERhdGEgbWRHcmlkZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgIFBvaW50IG1kc2l6ZSA9IG1vdmVEb3duQnV0dG9uLmNvbXB1dGVTaXplKFNXVC5ERUZBVUxULCBTV1QuREVGQVVMVCk7Ci0gICAgbW92ZURvd25CdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkxpc3RlbmVyKCkgewotCi0gICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkgewotICAgICAgICBoYW5kbGVNb3ZlRG93bkJ1dHRvblNlbGVjdGVkKGV2ZW50KTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KSB7Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICAvLyBlbXB0eSBzcGFjZQotICAgIHdzTGFiZWwgPSBuZXcgTGFiZWwoYnV0dG9uc0NvbXAsIFNXVC5OT05FKTsKLSAgICBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwpOwotICAgIGdkLmhvcml6b250YWxTcGFuID0gMjsKLSAgICB3c0xhYmVsLnNldExheW91dERhdGEoZ2QpOwotCi0gICAgYWRkQnV0dG9uXyA9IHVpVXRpbHMuY3JlYXRlUHVzaEJ1dHRvbihidXR0b25zQ29tcCwgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX0JVVFRPTl9BREQsIG51bGwsIG51bGwpOwotICAgIEdyaWREYXRhIGFkZEdyaWRkYXRhID0gbmV3IEdyaWREYXRhKCk7IAotICAgIFBvaW50IGFkZFNpemUgPSBhZGRCdXR0b25fLmNvbXB1dGVTaXplKFNXVC5ERUZBVUxULCBTV1QuREVGQVVMVCk7Ci0gICAgYWRkQnV0dG9uXy5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKSB7Ci0KLSAgICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KSB7Ci0gICAgICAgIGhhbmRsZUFkZEJ1dHRvblNlbGVjdGVkKGV2ZW50KTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KSB7Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICByZW1vdmVCdXR0b25fID0gdWlVdGlscy5jcmVhdGVQdXNoQnV0dG9uKGJ1dHRvbnNDb21wLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfQlVUVE9OX1JFTU9WRSwgbnVsbCwgbnVsbCk7Ci0gICAgR3JpZERhdGEgcmVtR3JpZGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICBQb2ludCByZW1TaXplID0gcmVtb3ZlQnV0dG9uXy5jb21wdXRlU2l6ZShTV1QuREVGQVVMVCwgU1dULkRFRkFVTFQpOwotICAgIHJlbW92ZUJ1dHRvbl8uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkxpc3RlbmVyKCkgewotCi0gICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkgewotICAgICAgICBoYW5kbGVSZW1vdmVCdXR0b25TZWxlY3RlZChldmVudCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkgewotICAgICAgfQotICAgIH0pOwotICAgIGVuYWJsZVJlbW92ZShmYWxzZSk7Ci0KLSAgICBpbnQgd2lkdGhIaW50ID0gMDsKLSAgICBpbnRbXSBzaXplcyA9IG5ldyBpbnRbXXttdXNpemUueCwgbWRzaXplLngsIGFkZFNpemUueCwgcmVtU2l6ZS54LCAxMDB9OwotICAgIGZvcihpbnQgaiA9IDA7IGogPCBzaXplcy5sZW5ndGg7IGorKykgewotICAgIAlpZiAoc2l6ZXNbal0gPiB3aWR0aEhpbnQpCi0gICAgCXdpZHRoSGludCA9IHNpemVzW2pdOwotICAgIH0KLSAgICBtdUdyaWRkYXRhLndpZHRoSGludCA9IHdpZHRoSGludDsKLSAgICBtZEdyaWRkYXRhLndpZHRoSGludCA9IHdpZHRoSGludDsKLSAgICBhZGRHcmlkZGF0YS53aWR0aEhpbnQgPSB3aWR0aEhpbnQ7Ci0gICAgcmVtR3JpZGRhdGEud2lkdGhIaW50ID0gd2lkdGhIaW50OwotICAgIAotICAgIG1vdmVVcEJ1dHRvbi5zZXRMYXlvdXREYXRhKG11R3JpZGRhdGEpOwotICAgIG1vdmVEb3duQnV0dG9uLnNldExheW91dERhdGEobWRHcmlkZGF0YSk7Ci0gICAgYWRkQnV0dG9uXy5zZXRMYXlvdXREYXRhKGFkZEdyaWRkYXRhKTsKLSAgICByZW1vdmVCdXR0b25fLnNldExheW91dERhdGEocmVtR3JpZGRhdGEpOwotICAgIAotICAgIC8vIHRhYmxlIHN0dWZmIGhlcmUKLSAgICBTdHJpbmdbXSBjb2x1bW5zXyA9IG5ldyBTdHJpbmdbXSB7IENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9IQU5ETEVSX05BTUUsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJMRV9IQU5ETEVSX0NMQVNTLAotICAgICAgICBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfSEFORExFUl9QT1JUfTsKLQotICAgIGZpbmFsIFRhYmxlQ29sdW1uW10gdGFibGVDb2xzID0gbmV3IFRhYmxlQ29sdW1uW2NvbHVtbnNfLmxlbmd0aF07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb2x1bW5zXy5sZW5ndGg7IGkrKykgewotICAgICAgVGFibGVDb2x1bW4gdGFibGVDb2x1bW4gPSBuZXcgVGFibGVDb2x1bW4oaGFuZGxlcnNUYWJsZV8sIFNXVC5MRUZUKTsKLSAgICAgIHRhYmxlQ29sdW1uLnNldFRleHQoY29sdW1uc19baV0pOwotICAgICAgdGFibGVDb2x1bW4uc2V0QWxpZ25tZW50KFNXVC5MRUZUKTsKLSAgICAgIHRhYmxlQ29sdW1uLnNldFdpZHRoKERFRkFVTFRfQ09MVU1OX1dJRFRIKTsKLSAgICAgIHRhYmxlQ29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsKLSAgICAgIHRhYmxlQ29sc1tpXSA9IHRhYmxlQ29sdW1uOwotICAgIH0KLSAgICBoYW5kbGVyc0NvbXAuYWRkQ29udHJvbExpc3RlbmVyKG5ldyBDb250cm9sQWRhcHRlcigpIHsKLQotICAgICAgcHVibGljIHZvaWQgY29udHJvbFJlc2l6ZWQoQ29udHJvbEV2ZW50IGUpIHsKLSAgICAgICAgUmVjdGFuZ2xlIGFyZWEgPSBoYW5kbGVyc0NvbXAuZ2V0Q2xpZW50QXJlYSgpOwotICAgICAgICBQb2ludCBwcmVmZXJyZWRTaXplID0gaGFuZGxlcnNUYWJsZV8uY29tcHV0ZVNpemUoU1dULkRFRkFVTFQsIFNXVC5ERUZBVUxUKTsKLSAgICAgICAgaW50IHdpZHRoID0gYXJlYS53aWR0aCAtIDIgKiBoYW5kbGVyc1RhYmxlXy5nZXRCb3JkZXJXaWR0aCgpIC0gMTA7Ci0gICAgICAgIGlmIChwcmVmZXJyZWRTaXplLnkgPiBhcmVhLmhlaWdodCArIGhhbmRsZXJzVGFibGVfLmdldEhlYWRlckhlaWdodCgpKSB7Ci0gICAgICAgICAgLy8gU3VidHJhY3QgdGhlIHNjcm9sbGJhciB3aWR0aCBmcm9tIHRoZSB0b3RhbCBjb2x1bW4gd2lkdGgKLSAgICAgICAgICAvLyBpZiBhIHZlcnRpY2FsIHNjcm9sbGJhciB3aWxsIGJlIHJlcXVpcmVkCi0gICAgICAgICAgUG9pbnQgdkJhclNpemUgPSBoYW5kbGVyc1RhYmxlXy5nZXRWZXJ0aWNhbEJhcigpLmdldFNpemUoKTsKLSAgICAgICAgICB3aWR0aCAtPSB2QmFyU2l6ZS54OwotICAgICAgICB9Ci0gICAgICAgIFBvaW50IG9sZFNpemUgPSBoYW5kbGVyc1RhYmxlXy5nZXRTaXplKCk7Ci0gICAgICAgIGlmIChvbGRTaXplLnggPiBhcmVhLndpZHRoKSB7Ci0gICAgICAgICAgLy8gdGFibGUgaXMgZ2V0dGluZyBzbWFsbGVyIHNvIG1ha2UgdGhlIGNvbHVtbnMKLSAgICAgICAgICAvLyBzbWFsbGVyIGZpcnN0IGFuZCB0aGVuIHJlc2l6ZSB0aGUgdGFibGUgdG8KLSAgICAgICAgICAvLyBtYXRjaCB0aGUgY2xpZW50IGFyZWEgd2lkdGgKLSAgICAgICAgICB0YWJsZUNvbHNbMF0uc2V0V2lkdGgod2lkdGggLyAzKTsKLSAgICAgICAgICB0YWJsZUNvbHNbMV0uc2V0V2lkdGgod2lkdGggLyAzKTsKLSAgICAgICAgICB0YWJsZUNvbHNbMl0uc2V0V2lkdGgod2lkdGggLSAodGFibGVDb2xzWzBdLmdldFdpZHRoKCkgKyB0YWJsZUNvbHNbMV0uZ2V0V2lkdGgoKSkpOwotICAgICAgICAgIGhhbmRsZXJzVGFibGVfLnNldFNpemUoYXJlYS53aWR0aCwgYXJlYS5oZWlnaHQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgIC8vIHRhYmxlIGlzIGdldHRpbmcgYmlnZ2VyIHNvIG1ha2UgdGhlIHRhYmxlCi0gICAgICAgICAgLy8gYmlnZ2VyIGZpcnN0IGFuZCB0aGVuIG1ha2UgdGhlIGNvbHVtbnMgd2lkZXIKLSAgICAgICAgICAvLyB0byBtYXRjaCB0aGUgY2xpZW50IGFyZWEgd2lkdGgKLSAgICAgICAgICBoYW5kbGVyc1RhYmxlXy5zZXRTaXplKGFyZWEud2lkdGgsIGFyZWEuaGVpZ2h0KTsKLSAgICAgICAgICB0YWJsZUNvbHNbMF0uc2V0V2lkdGgod2lkdGggLyAzKTsKLSAgICAgICAgICB0YWJsZUNvbHNbMV0uc2V0V2lkdGgod2lkdGggLyAzKTsKLSAgICAgICAgICB0YWJsZUNvbHNbMl0uc2V0V2lkdGgod2lkdGggLSAodGFibGVDb2xzWzBdLmdldFdpZHRoKCkgKyB0YWJsZUNvbHNbMV0uZ2V0V2lkdGgoKSkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICB0YWJsZVZpZXdlcl8gPSBuZXcgVGFibGVWaWV3ZXIoaGFuZGxlcnNUYWJsZV8pOwotICAgIENvbnRyb2wgY29udHJvbCA9IHRhYmxlVmlld2VyXy5nZXRDb250cm9sKCk7Ci0KLSAgICBHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICBkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOwotICAgIGRhdGEudmVydGljYWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIGRhdGEuZ3JhYkV4Y2Vzc1ZlcnRpY2FsU3BhY2UgPSB0cnVlOwotICAgIGNvbnRyb2wuc2V0TGF5b3V0RGF0YShkYXRhKTsKLQotICAgIHRhYmxlVmlld2VyXy5zZXRDb2x1bW5Qcm9wZXJ0aWVzKGNvbHVtbnNfKTsKLSAgICB0YWJsZVZpZXdlcl8uc2V0Q29udGVudFByb3ZpZGVyKG5ldyBMaXN0Q29udGVudFByb3ZpZGVyKCkpOwotICAgIHRhYmxlVmlld2VyXy5zZXRMYWJlbFByb3ZpZGVyKG5ldyBMaXN0TGFiZWxQcm92aWRlcigpKTsKLSAgICB0YWJsZVZpZXdlcl8uYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKG5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgewotCi0gICAgICBwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgewotICAgICAgICBlbmFibGVSZW1vdmUodHJ1ZSk7Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICBnZW5Ta2VsZXRvblJhZGlvQnV0dG9uXyA9IHVpVXRpbHMuY3JlYXRlQ2hlY2tib3gocGFyZW50XywgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX0JVVFRPTl9HRU5fU0tFTEVUT04sCi0gICAgICAgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX0JVVFRPTl9HRU5fU0tFTEVUT04sIElORk9QT1BfSERMUl9HRU5fU0tFTEVUT04pOwotICAgIGdyaWRkYXRhID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLlZFUlRJQ0FMX0FMSUdOX0JFR0lOTklORyB8IEdyaWREYXRhLkdSQUJfSE9SSVpPTlRBTCB8IEdyaWREYXRhLlZFUlRJQ0FMX0FMSUdOX0ZJTEwpOwotICAgIGdlblNrZWxldG9uUmFkaW9CdXR0b25fLnNldExheW91dERhdGEoZ3JpZGRhdGEpOwotICAgIGdlblNrZWxldG9uUmFkaW9CdXR0b25fLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgewotCi0gICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldnQpIHsKLSAgICAgICAgaGFuZGxlR2VuU2tlbGV0b25SYWRpb0J1dHRvbigpOwotICAgICAgfQotICAgIH0pOwotCi0gICAgc291cmNlTG9jYXRpb25Db21wXyA9IHVpVXRpbHMuY3JlYXRlQ29tcG9zaXRlKHBhcmVudF8sIDIpOwotICAgIHNvdXJjZUxvY2F0aW9uQ29tYm9fID0gdWlVdGlscy5jcmVhdGVDb21ibyhzb3VyY2VMb2NhdGlvbkNvbXBfLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfQ09NQk9fU09VUkNFX0xPQywKLSAgICAgICAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfQ09NQk9fU09VUkNFX0xPQywgSU5GT1BPUF9DT01CT19TT1VSQ0VfTE9DLCBTV1QuUkVBRF9PTkxZKTsKLSAgICBzb3VyY2VMb2NhdGlvbkNvbWJvXy5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKLQotICAgICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZ0KSB7Ci0gICAgICAgIGhhbmRsZVNvdXJjZUxvY2F0aW9uQ29tYm8oZXZ0KTsKLSAgICAgIH0KLSAgICB9KTsKLSAgICAKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8vIENhbGxlZCBhdCBzdGFydCBhbmQgb25seSBmb3Igc2luZ2xlIHNlcnZpY2Ugc2VsZWN0aW9uIAotICBwcml2YXRlIHZvaWQgcG9wdWxhdGVIYW5kbGVyc1RhYmxlKCkgewotICAgIHRyeSB7Ci0gICAgICBVSVV0aWxzIHVpVXRpbHMgPSBuZXcgVUlVdGlscyhwbHVnaW5JZF8pOwotICAgICAKLSAgICAgIC8vIHByb2Nlc3MgZm9yIG11bHRpcGxlIHNlcnZpY2Ugc2VsZWN0aW9uCi0gICAgICBpZiAoaXNNdWx0aXBsZVNlbGVjdGlvbl8pIHsKLSAgICAgICAgcGFyZW50Xy5nZXRTaGVsbCgpLnNldFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfREVTQ19NVUxUSVBMRV9TRVJWSUNFU19DT05GSUcpOwotICAgICAgICAKLSAgICAgICAgd2ViU2VydmljZURlc2NUZXh0XyA9IHVpVXRpbHMuY3JlYXRlVGV4dCh3ZWJTZXJ2aWNlRGVzY0NvbXBfLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfQ09NQk9fV1NfU0VSVklDRV9ERVNDLCAKLSAgICAgICAgICAgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTX1NFUlZJQ0VfREVTQywgSU5GT1BPUF9XU19TRVJWSUNFX0RFU0MsIFNXVC5SRUFEX09OTFkpOwotICAgICAgICBpZiAoaGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyXyE9bnVsbCl7Ci0gICAgICAgICAgY3VycmVudEhESF8gPSBoYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJfWzBdOwotICAgICAgICAgIFN0cmluZyB0ZXh0ID0gTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19URVhUX05VTV9PRl9TRVJWSUNFUywgSW50ZWdlci50b1N0cmluZyhoYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJfLmxlbmd0aCkpOwotICAgICAgICAgIHdlYlNlcnZpY2VEZXNjVGV4dF8uc2V0VGV4dCh0ZXh0KTsKLSAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICBnZW5Ta2VsZXRvblJhZGlvQnV0dG9uXy5zZXRTZWxlY3Rpb24oZmFsc2UpOwotICAgICAgICBnZW5Ta2VsZXRvblJhZGlvQnV0dG9uXy5zZXRFbmFibGVkKGZhbHNlKTsKLSAgICAgICAgZ2VuU2tlbGV0b25SYWRpb0J1dHRvbl8uc2V0VmlzaWJsZShmYWxzZSk7Ci0gICAgICAgIAotICAgICAgICBzb3VyY2VMb2NhdGlvbkNvbXBfLnNldFZpc2libGUoZmFsc2UpOwotICAgICAgICBzb3VyY2VMb2NhdGlvbkNvbWJvXy5zZXRFbmFibGVkKGZhbHNlKTsKLSAgICAgICAgc291cmNlTG9jYXRpb25Db21ib18uc2V0VmlzaWJsZShmYWxzZSk7Ci0gICAgICAgIAotICAgICAgICByZWZyZXNoKCk7Ci0KLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICAvLyBwb3B1bGF0ZSB0aGUgdGFibGUgZm9yIGEgc2luZ2xlIHNlcnZpY2Ugc2VsZWN0aW9uCi0gICAgICAgIAotICAgICAgICB3ZWJTZXJ2aWNlRGVzY0NvbWJvXyA9IHVpVXRpbHMuY3JlYXRlQ29tYm8od2ViU2VydmljZURlc2NDb21wXywgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX0NPTUJPX1dTX1NFUlZJQ0VfREVTQywKLSAgICAgICAgICAgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTX1NFUlZJQ0VfREVTQywgSU5GT1BPUF9XU19TRVJWSUNFX0RFU0MsIFNXVC5SRUFEX09OTFkpOwotICAgICAgICB3ZWJTZXJ2aWNlRGVzY0NvbWJvXy5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKLSAgICAKLSAgICAgICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldnQpIHsKLSAgICAgICAgICAgIGhhbmRsZVdlYlNlcnZpY2VEZXNjQ29tYm8oZXZ0KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgICAgICAKLSAgICAgICAgU3RyaW5nW10gd3NEZXNjTmFtZXMgPSBIYW5kbGVyRGVzY3JpcHRpb25IZWxwZXIuZ2V0QWxsRGVzY3JpcHRpb25OYW1lcyhoYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJfKTsKLSAgICAgICAgd2ViU2VydmljZURlc2NDb21ib18uc2V0SXRlbXMod3NEZXNjTmFtZXMpOwotCi0gICAgICAgIGlmIChoYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJfLmxlbmd0aCA8IDEpIHsKLSAgICAgICAgICB3ZWJTZXJ2aWNlRGVzY0NvbWJvXy5zZWxlY3QoMCk7Ci0gICAgICAgICAgd2ViU2VydmljZURlc2NDb21ib18uc2V0RW5hYmxlZChmYWxzZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgaWYgKGRlc2NyaXB0aW9uTmFtZV8gIT0gbnVsbCkgewotICAgICAgICAgICAgaW50IGluZGV4ID0gd2ViU2VydmljZURlc2NDb21ib18uaW5kZXhPZihkZXNjcmlwdGlvbk5hbWVfKTsKLSAgICAgICAgICAgIGlmIChpbmRleCAhPSAtMSkgd2ViU2VydmljZURlc2NDb21ib18uc2VsZWN0KGluZGV4KTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgd2ViU2VydmljZURlc2NDb21ib18uc2VsZWN0KDApOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBzZXQgRGVzY3JpcHRpb25zCi0gICAgICAgIEhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlciBoZGggPSBIYW5kbGVyRGVzY3JpcHRpb25IZWxwZXIuZ2V0Rm9yRGVzY3JpcHRpb25OYW1lKGhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcl8sIHdlYlNlcnZpY2VEZXNjQ29tYm9fLmdldFRleHQoKSk7Ci0gICAgICAgIGlmIChoZGghPW51bGwpewotICAgICAgICAgIGN1cnJlbnRIREhfID0gaGRoOwotICAgICAgICAgIExpc3QgaGFuZGxlcnMgPSBoZGguZ2V0SGFuZGxlckxpc3QoKTsKLSAgICAgICAgICB0YWJsZVZpZXdlcl8uc2V0SW5wdXQoaGFuZGxlcnMpOwotICAgICAgICAgIHRhYmxlVmlld2VyXy5yZWZyZXNoKCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gc2V0IG91dHB1dCBmb2xkZXIKLSAgICAgICAgc2V0U291cmNlT3V0cHV0TG9jYXRpb24oKTsgIAotICAgICAgfQotICAgICAgcGFyZW50Xy5nZXRTaGVsbCgpLnNldFNpemUoNTMwLCA2NTApOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfQotCi0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yI2dldFN0YXR1cygpCi0gICAqLwotICBwdWJsaWMgSVN0YXR1cyBnZXRTdGF0dXMoKSB7Ci0gICAgSVN0YXR1cyBmaW5hbFN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgaWYgKGlzTXVsdGlwbGVTZWxlY3Rpb25fKQotICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLmluZm9TdGF0dXMoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfREVTQ19NVUxUSVBMRV9TRVJWSUNFU19DT05GSUcpOwotICAgIHJldHVybiBmaW5hbFN0YXR1czsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGhhbmRsZUFkZEJ1dHRvblNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KSB7Ci0gICAgQWRkSGFuZGxlckRpYWxvZyBkaWFsb2cgPSBuZXcgQWRkSGFuZGxlckRpYWxvZyhwYXJlbnRfLmdldFNoZWxsKCksIGZhbHNlKTsKLSAgICBkaWFsb2cuc2V0SXNNdWx0aXBsZVNlcnZpY2VzKGlzTXVsdGlwbGVTZWxlY3Rpb25fKTsKLSAgICBkaWFsb2cuY3JlYXRlKCk7Ci0gICAgCi0gICAgV2ViU2VydmljZURlc2NyaXB0aW9uIHNlcnZpY2VEZXNjID0gbnVsbDsKLSAgICBpZiAoIWlzTXVsdGlwbGVTZWxlY3Rpb25fICl7Ci0gICAgICBpZiAoY3VycmVudEhESF8hPW51bGwpIHsKLSAgICAgICAgc2VydmljZURlc2MgPSAgY3VycmVudEhESF8uZ2V0RGVzY3JpcHRpb25PYmplY3QoKTsKLSAgICAgICAgU3RyaW5nW10gcG9ydE5hbWVzID0gZ2V0UG9ydENvbXBvbmVudE5hbWVzKHNlcnZpY2VEZXNjKTsKLSAgICAgICAgZGlhbG9nLnNldFBvcnROYW1lcyhwb3J0TmFtZXMpOwotICAgICAgfQotICAgIH0KLQotICAgIGRpYWxvZy5nZXRTaGVsbCgpLnNldFNpemUoNTAwLCAyMzApOwotICAgIAotICAgIGludCByZXN1bHQgPSBkaWFsb2cub3BlbigpOwotCi0gICAgaWYgKHJlc3VsdCA9PSBXaW5kb3cuT0spIHsKLSAgICAgIFN0cmluZyBuYW1lID0gZGlhbG9nLmdldE5hbWUoKTsKLSAgICAgIFN0cmluZyBjbGFzc05hbWUgPSBkaWFsb2cuZ2V0Q2xhc3NOYW1lKCk7Ci0gICAgICBTdHJpbmcgcG9ydCA9IGRpYWxvZy5nZXRQb3J0TmFtZSgpOwotICAgICAgaWYgKHBvcnQgPT0gbnVsbCkKLSAgICAgICAgcG9ydCA9ICIqIjsKLQotICAgICAgSGFuZGxlclRhYmxlSXRlbSBoaSA9IG5ldyBIYW5kbGVyVGFibGVJdGVtKCk7Ci0gICAgICBoaS5zZXRIYW5kbGVyTmFtZShuYW1lKTsKLSAgICAgIGhpLnNldEhhbmRsZXJDbGFzc05hbWUoY2xhc3NOYW1lKTsKLSAgICAgIGhpLnNldFBvcnROYW1lKHBvcnQpOwotCi0gICAgICBpZiAoc2VydmljZURlc2MhPW51bGwpewotICAgICAgICBoaS5zZXRXc0Rlc2NSZWYoc2VydmljZURlc2MpOwotICAgICAgfQotICAgICAgCi0gICAgICBpZiAoY3VycmVudEhESF8hPW51bGwpewotICAgICAgICBMaXN0IGhhbmRsZXJzID0gY3VycmVudEhESF8uZ2V0SGFuZGxlckxpc3QoKTsKLSAgICAgICAgaGFuZGxlcnMuYWRkKGhpKTsKLSAgICAgIH0KLQotICAgIH0KLQotICAgIHJlZnJlc2goKTsKLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nW10gZ2V0UG9ydENvbXBvbmVudE5hbWVzKFdlYlNlcnZpY2VEZXNjcmlwdGlvbiB3ZWJTZXJ2aWNlRGVzYykgewotCi0gICAgTGlzdCBwb3J0cyA9IHdlYlNlcnZpY2VEZXNjLmdldFBvcnRDb21wb25lbnRzKCk7Ci0gICAgaWYgKHBvcnRzICE9IG51bGwpIHsKLSAgICAgIFN0cmluZ1tdIHBvcnROYW1lcyA9IG5ldyBTdHJpbmdbcG9ydHMuc2l6ZSgpXTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcG9ydHMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgUG9ydENvbXBvbmVudCBwYyA9IChQb3J0Q29tcG9uZW50KSBwb3J0cy5nZXQoaSk7Ci0gICAgICAgIFN0cmluZyBwY05hbWUgPSBwYy5nZXRQb3J0Q29tcG9uZW50TmFtZSgpOwotICAgICAgICBwb3J0TmFtZXNbaV0gPSBwY05hbWU7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gcG9ydE5hbWVzOwotICAgIH0KLSAgICByZXR1cm4gbmV3IFN0cmluZ1swXTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGhhbmRsZVJlbW92ZUJ1dHRvblNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KSB7Ci0gICAgaGFuZGxlRGVsZXRlS2V5UHJlc3NlZCgpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlTW92ZVVwQnV0dG9uU2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZlbnQpIHsKLQotICAgIGludCBpbmRleCA9IHRhYmxlVmlld2VyXy5nZXRUYWJsZSgpLmdldFNlbGVjdGlvbkluZGV4KCk7Ci0gICAgaWYgKGluZGV4ICE9IC0xKSB7Ci0gICAgICBpZiAoaW5kZXggPiAwKSB7Ci0gICAgICAgIGlmIChjdXJyZW50SERIXyE9bnVsbCl7Ci0gICAgICAgICAgICBMaXN0IGhhbmRsZXJzID0gY3VycmVudEhESF8uZ2V0SGFuZGxlckxpc3QoKTsKLSAgICAgICAgICAgIE9iamVjdCBvYmplY3QgPSBoYW5kbGVycy5yZW1vdmUoaW5kZXgpOwotICAgICAgICAgICAgaGFuZGxlcnMuYWRkKGluZGV4IC0gMSwgb2JqZWN0KTsKLSAgICAgICAgICB9Ci0gICAgICAgIHRhYmxlVmlld2VyXy5yZWZyZXNoKCk7Ci0gICAgICB9Ci0gICAgfQotCi0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVNb3ZlRG93bkJ1dHRvblNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KSB7Ci0KLSAgICBpbnQgaW5kZXggPSB0YWJsZVZpZXdlcl8uZ2V0VGFibGUoKS5nZXRTZWxlY3Rpb25JbmRleCgpOwotICAgIGlmIChpbmRleCAhPSAtMSkgewotICAgICAgaWYgKGN1cnJlbnRIREhfIT1udWxsKXsKLSAgICAgICAgTGlzdCBoYW5kbGVycyA9IGN1cnJlbnRIREhfLmdldEhhbmRsZXJMaXN0KCk7Ci0gICAgICAgIGlmIChpbmRleCA8IGhhbmRsZXJzLnNpemUoKSAtIDEpIHsKLSAgICAgICAgICBPYmplY3Qgb2JqZWN0ID0gaGFuZGxlcnMucmVtb3ZlKGluZGV4KTsKLSAgICAgICAgICBoYW5kbGVycy5hZGQoaW5kZXgrMSwgb2JqZWN0KTsKLSAgICAgICAgfQotICAgICAgICB0YWJsZVZpZXdlcl8ucmVmcmVzaCgpOwotICAgICAgfQotICAgIH0KLQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlU291cmNlTG9jYXRpb25Db21ibyhTZWxlY3Rpb25FdmVudCBldmVudCkgewotICAgIG91dHB1dExvY2F0aW9uXyA9IHNvdXJjZUxvY2F0aW9uQ29tYm9fLmdldFRleHQoKTsKLSAgICBJUGF0aCBvdXRwdXRQYXRoID0gKElQYXRoKSBwYXRoc1RhYmxlXy5nZXQob3V0cHV0TG9jYXRpb25fKTsKLSAgICBjdXJyZW50SERIXy5zZXRTb3VyY2VPdXRwdXRQYXRoKG91dHB1dFBhdGgpOyAgICAKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGhhbmRsZUdlblNrZWxldG9uUmFkaW9CdXR0b24oKSB7Ci0gICAgaWYgKGdlblNrZWxldG9uUmFkaW9CdXR0b25fLmlzRW5hYmxlZCgpKSB7Ci0gICAgICBpZiAoZ2VuU2tlbGV0b25SYWRpb0J1dHRvbl8uZ2V0U2VsZWN0aW9uKCkpIHsKLSAgICAgICAgdGhpcy5pc0dlblNrZWxldG9uRW5hYmxlZF8gPSB0cnVlOwotICAgICAgICBzb3VyY2VMb2NhdGlvbkNvbWJvXy5zZXRFbmFibGVkKHRydWUpOwotICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgIHRoaXMuaXNHZW5Ta2VsZXRvbkVuYWJsZWRfID0gZmFsc2U7Ci0gICAgICAgIHNvdXJjZUxvY2F0aW9uQ29tYm9fLnNldEVuYWJsZWQoZmFsc2UpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGhhbmRsZVdlYlNlcnZpY2VEZXNjQ29tYm8oU2VsZWN0aW9uRXZlbnQgZXZlbnQpIHsKLQotICAgIGlmICh3ZWJTZXJ2aWNlRGVzY0NvbWJvXyE9bnVsbCAmJiB3ZWJTZXJ2aWNlRGVzY0NvbWJvXy5pc0VuYWJsZWQoKSkgewotICAgICAgSGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyIGhkaCA9IEhhbmRsZXJEZXNjcmlwdGlvbkhlbHBlci5nZXRGb3JEZXNjcmlwdGlvbk5hbWUoaGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyXywgd2ViU2VydmljZURlc2NDb21ib18uZ2V0VGV4dCgpKTsKLSAgICAgIGN1cnJlbnRIREhfID0gaGRoOyAgICAgIAotICAgICAgcmVmcmVzaCgpOwotICAgIH0KLSAgICAKLSAgICBpZiAoaXNHZW5Ta2VsZXRvbkVuYWJsZWRfKXsKLSAgICAgIHNldFNvdXJjZU91dHB1dExvY2F0aW9uKCk7Ci0gICAgfQotICAgIAotICB9Ci0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgaXNHZW5Ta2VsZXRvbkVuYWJsZWRfLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNHZW5Ta2VsZXRvbkVuYWJsZWRfKCkgewotICAgIHJldHVybiBpc0dlblNrZWxldG9uRW5hYmxlZF87Ci0gIH0KLQotICBwcm90ZWN0ZWQgY2xhc3MgTGlzdExhYmVsUHJvdmlkZXIgZXh0ZW5kcyBMYWJlbFByb3ZpZGVyIGltcGxlbWVudHMgSVRhYmxlTGFiZWxQcm92aWRlciB7Ci0KLSAgICBwdWJsaWMgSW1hZ2UgZ2V0Q29sdW1uSW1hZ2UoT2JqZWN0IGVsZW1lbnQsIGludCBjb2x1bW5JbmRleCkgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRDb2x1bW5UZXh0KE9iamVjdCBvYmplY3QsIGludCBjb2x1bW5JbmRleCkgewotCi0gICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgSGFuZGxlclRhYmxlSXRlbSkgewotICAgICAgICBIYW5kbGVyVGFibGVJdGVtIGh0aSA9IChIYW5kbGVyVGFibGVJdGVtKSBvYmplY3Q7Ci0gICAgICAgIGlmIChjb2x1bW5JbmRleCA9PSAwKSB7Ci0gICAgICAgICAgcmV0dXJuIGh0aS5nZXRIYW5kbGVyTmFtZSgpICE9IG51bGwgPyBodGkuZ2V0SGFuZGxlck5hbWUoKSA6ICIiOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGNvbHVtbkluZGV4ID09IDEpIHsKLSAgICAgICAgICByZXR1cm4gaHRpLmdldEhhbmRsZXJDbGFzc05hbWUoKSAhPSBudWxsID8gaHRpLmdldEhhbmRsZXJDbGFzc05hbWUoKSA6ICIiOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgIHJldHVybiBodGkuZ2V0UG9ydE5hbWUoKSAhPSBudWxsID8gaHRpLmdldFBvcnROYW1lKCkgOiAiIjsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gIH0KLQotICBwcml2YXRlIHZvaWQgZW5hYmxlUmVtb3ZlKGJvb2xlYW4gZW5hYmxlZCkgewotICAgIHJlbW92ZUJ1dHRvbl8uc2V0RW5hYmxlZChlbmFibGVkICYmICF0YWJsZVZpZXdlcl8uZ2V0U2VsZWN0aW9uKCkuaXNFbXB0eSgpKTsKLSAgfQotCi0gIHByb3RlY3RlZCBjbGFzcyBMaXN0Q29udGVudFByb3ZpZGVyIGltcGxlbWVudHMgSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXIgewotCi0gICAgcHVibGljIE9iamVjdFtdIGdldEVsZW1lbnRzKE9iamVjdCBlbGVtZW50KSB7Ci0gICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFZlY3RvcikgeyByZXR1cm4gKChWZWN0b3IpIGVsZW1lbnQpLnRvQXJyYXkoKTsgfQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBpbnB1dENoYW5nZWQoVmlld2VyIHZpZXdlciwgT2JqZWN0IG9sZCwgT2JqZWN0IG5ld29iaikgewotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGlzRGVsZXRlZChPYmplY3Qgb2JqZWN0KSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlRGVsZXRlS2V5UHJlc3NlZCgpIHsKLSAgICAvLyBpbnRlcm5hbERpc3Bvc2UoKTsKLSAgICBJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IHRhYmxlVmlld2VyXy5nZXRTZWxlY3Rpb24oKTsKLSAgICBpZiAoc2VsZWN0aW9uICE9IG51bGwgJiYgIXNlbGVjdGlvbi5pc0VtcHR5KCkgJiYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSkgewotICAgICAgaW50IHNlbGVjdGlvbkluZGV4ID0gaGFuZGxlcnNUYWJsZV8uZ2V0U2VsZWN0aW9uSW5kZXgoKTsKLSAgICAgIGlmIChjdXJyZW50SERIXyE9bnVsbCl7Ci0gICAgICAgIGN1cnJlbnRIREhfLmdldEhhbmRsZXJMaXN0KCkucmVtb3ZlKHNlbGVjdGlvbkluZGV4KTsKLSAgICAgIH0KLSAgICAgIHJlZnJlc2goKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZWZyZXNoKCkgewotICAgIHRyeSB7Ci0gICAgICB0YWJsZVZpZXdlcl8uc2V0SW5wdXQobnVsbCk7Ci0gICAgICBpZiAoY3VycmVudEhESF8hPW51bGwpewotICAgICAgICBMaXN0IGhhbmRsZXJzID0gY3VycmVudEhESF8uZ2V0SGFuZGxlckxpc3QoKTsKLSAgICAgICAgdGFibGVWaWV3ZXJfLnNldElucHV0KGhhbmRsZXJzKTsKLSAgICAgICAgdGFibGVWaWV3ZXJfLnJlZnJlc2goKTsgICAgICAgIAotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0R2VuU2tlbGV0b25FbmFibGVkKGJvb2xlYW4gaXNHZW5Ta2VsZXRvbkVuYWJsZWQpIHsKLSAgICB0aGlzLmlzR2VuU2tlbGV0b25FbmFibGVkXyA9IGlzR2VuU2tlbGV0b25FbmFibGVkOwotICAgIGdlblNrZWxldG9uUmFkaW9CdXR0b25fLnNldFNlbGVjdGlvbihpc0dlblNrZWxldG9uRW5hYmxlZCk7Ci0KLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGdldEdlblNrZWxldG9uRW5hYmxlZCgpIHsKLSAgICByZXR1cm4gdGhpcy5pc0dlblNrZWxldG9uRW5hYmxlZF87Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc2V0U291cmNlT3V0cHV0TG9jYXRpb24oKXsKLSAgICBJUHJvamVjdCBwcm9qZWN0ID0gY3VycmVudEhESF8uZ2V0UHJvamVjdCgpOwotICAgIGlmIChwcm9qZWN0IT1udWxsKXsKLSAgICAgIElQYXRoW10gbG9jYXRpb25zID0gUmVzb3VyY2VVdGlscy5nZXRBbGxKYXZhU291cmNlTG9jYXRpb25zKHByb2plY3QpOwotICAgICAgCi0gICAgICBTdHJpbmdbXSBwYXRocyA9IG5ldyBTdHJpbmdbbG9jYXRpb25zLmxlbmd0aF07Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxvY2F0aW9ucy5sZW5ndGg7IGkrKykgewotICAgICAgICBwYXRoc1tpXSA9IGxvY2F0aW9uc1tpXS50b1N0cmluZygpOwotICAgICAgICBwYXRoc1RhYmxlXy5wdXQocGF0aHNbaV0sIGxvY2F0aW9uc1tpXSk7Ci0gICAgICB9Ci0gICAgICBzb3VyY2VMb2NhdGlvbkNvbWJvXy5zZXRJdGVtcyhwYXRocyk7Ci0gICAgICBzb3VyY2VMb2NhdGlvbkNvbWJvXy5zZWxlY3QoMCk7Ci0gICAgfQotICAgIAotICAgIC8vIHNldCBpbiBtb2RlbAotICAgIG91dHB1dExvY2F0aW9uXyA9IHNvdXJjZUxvY2F0aW9uQ29tYm9fLmdldFRleHQoKTsKLSAgICBJUGF0aCBvdXRwdXRQYXRoID0gKElQYXRoKSBwYXRoc1RhYmxlXy5nZXQob3V0cHV0TG9jYXRpb25fKTsKLSAgICBjdXJyZW50SERIXy5zZXRTb3VyY2VPdXRwdXRQYXRoKG91dHB1dFBhdGgpOyAgCi0gICAgCi0gIH0KLSAgCi0gIC8qKgotICAgKiBBbiBhcnJheSBvZiBIYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJzCi0gICAqIEByZXR1cm4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcnMoSGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyW10gaGFuZGxlckhvbGRlcnMpewotICAgIHRoaXMuaGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyXyA9IGhhbmRsZXJIb2xkZXJzOwotICB9Ci0gIAotICBwdWJsaWMgSGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyW10gZ2V0SGFuZGxlckRlc2NyaXB0aW9uSG9sZGVycygpewotICAgIHJldHVybiB0aGlzLmhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcl87Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBGb3IgZ2V0dGluZyB0aGUgaGFuZGxlcnMgdG8gYXBwbHkgZm9yIG11bHRpcGxlIHNlcnZpY2VzCi0gICAqIEByZXR1cm4KLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldEhhbmRsZXJzTGlzdCgpewotICAgIGlmIChoYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJfWzBdIT1udWxsKQotICAgICAgcmV0dXJuIGhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcl9bMF0uZ2V0SGFuZGxlckxpc3QoKTsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0RGVzY3JpcHRpb25OYW1lKFN0cmluZyB3c0Rlc2NOYW1lKSB7Ci0gICAgZGVzY3JpcHRpb25OYW1lXyA9IHdzRGVzY05hbWU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRJc011bHRpcGxlU2VsZWN0aW9uKGJvb2xlYW4gaXNNdWxpdHBsZVNlbGVjdGlvbikgewotICAgIHRoaXMuaXNNdWx0aXBsZVNlbGVjdGlvbl8gPSBpc011bGl0cGxlU2VsZWN0aW9uOwotICB9Ci0KLSAgcHVibGljIHZvaWQgaW50ZXJuYWxpemUoKXsKLSAgICBwb3B1bGF0ZUhhbmRsZXJzVGFibGUoKTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvSGFuZGxlcnNEZWZhdWx0aW5nQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL0hhbmRsZXJzRGVmYXVsdGluZ0NvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDRhMjEyOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvSGFuZGxlcnNEZWZhdWx0aW5nQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmludGVybmFsLndlYnNlcnZpY2UuV2ViU2VydmljZU5hdmlnYXRvckdyb3VwVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLQotCi0vKioKLSAqIEhhbmRsZXJzRGVmYXVsdGluZ0NvbW1hbmQKLSAqIAotICogRGV0ZXJtaW5lIGlmIEhhbmRsZXJzIGJlbG9uZ3MgdG8gc2VydmljZSBvciBjbGllbnQgc2lkZQotICovCi1wdWJsaWMgY2xhc3MgSGFuZGxlcnNEZWZhdWx0aW5nQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0SGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ21kIAotewotICBwcml2YXRlIGJvb2xlYW4gaXNDbGllbnRIYW5kbGVyXyA9IGZhbHNlOwotICBwcml2YXRlIGJvb2xlYW4gaXNTZXJ2aWNlSGFuZGxlcl8gPSBmYWxzZTsKLQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgeyAgICAKLSAgICBJRW52aXJvbm1lbnQgZW52ID0gZ2V0RW52aXJvbm1lbnQoKTsKLSAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0KLSAgICBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24gPSBnZXRJbml0aWFsU2VsZWN0aW9uKCk7Ci0gICAgaWYgKHNlbGVjdGlvbiAhPSBudWxsICYmIHNlbGVjdGlvbi5zaXplKCkgPT0gMSkgewotICAgICAgICBPYmplY3Qgb2JqID0gc2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOwotCi0gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBXZWJTZXJ2aWNlTmF2aWdhdG9yR3JvdXBUeXBlKSB7Ci0gICAgICAgICAgV2ViU2VydmljZU5hdmlnYXRvckdyb3VwVHlwZSB3c25ndCA9IChXZWJTZXJ2aWNlTmF2aWdhdG9yR3JvdXBUeXBlKSBvYmo7Ci0gICAgICAgICAgaWYgKHdzbmd0LmdldFdzZGxTZXJ2aWNlKCkhPW51bGwpewotICAgICAgICAgIAlpc1NlcnZpY2VIYW5kbGVyXyA9IHRydWU7Ci0gICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICAgIGlmICh3c25ndC5nZXRTZXJ2aWNlUmVmKCkhPW51bGwpewotICAgICAgICAgIAlpc0NsaWVudEhhbmRsZXJfID0gdHJ1ZTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgfQotICAgICAgfQotICAgIGVsc2UgewotICAgICAgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfVEFTS19FWENFUFRFRCApOwotICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3RhdHVzOwotCi0gIH0KLQotICAKLS8qKgotICogQHJldHVybiBSZXR1cm5zIHRoZSBpc0NsaWVudEhhbmRsZXJfLgotICovCi1wdWJsaWMgYm9vbGVhbiBnZXRJc0NsaWVudEhhbmRsZXIoKSB7Ci0JcmV0dXJuIGlzQ2xpZW50SGFuZGxlcl87Ci19Ci0vKioKLSAqIEByZXR1cm4gUmV0dXJucyB0aGUgaXNTZXJ2aWNlSGFuZGxlcl8uCi0gKi8KLXB1YmxpYyBib29sZWFuIGdldElzU2VydmljZUhhbmRsZXIoKSB7Ci0JcmV0dXJuIGlzU2VydmljZUhhbmRsZXJfOwotfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL0lPYmplY3RTZWxlY3Rpb25MYXVuY2hhYmxlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvSU9iamVjdFNlbGVjdGlvbkxhdW5jaGFibGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU5YWQ2ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvSU9iamVjdFNlbGVjdGlvbkxhdW5jaGFibGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyMCAgIDEzNTkxMiBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotCi1wdWJsaWMgaW50ZXJmYWNlIElPYmplY3RTZWxlY3Rpb25MYXVuY2hhYmxlIHsKLQkgIC8qKgotCSAgICogVGhlIGZyYW1ld29yayB3aWxsIGNhbGwgdGhpcyBtZXRob2QgdG8gc2V0IHRoZSBpbml0aWFsIHNlbGVjdGlvbgotCSAgICogdmFsdWUgdGhhdCB0aGUgdXNlciBoYXMgc3BlY2lmaWVkLgotCSAgICogCi0JICAgKiBAcGFyYW0gaW5pdGlhbFNlbGVjdGlvbiB0aGUgaW5pdGlhbCBzZWxlY3Rpb24gdGhlIHVzZXIgc3BlY2lmaWVkLgotCSAgICovCi0JICBwdWJsaWMgdm9pZCBzZXRJbml0aWFsU2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGluaXRpYWxTZWxlY3Rpb24pOwotCSAgCi0JICAvKioKLQkgICAqIFRoZSBpbnRlbnQgb2YgdGhlIE9iamVjdCBTZWxlY3Rpb24gV2lkZ2V0IGlzIHRoYXQgdGhlIHVzZXIgaGFzCi0JICAgKiB0aGUgb3Bwb3J0dW5pdHkgY2hhbmdlL2ZpbmQgdGhlIG9iamVjdCB0aGF0IHRoZXkgd2FudCB0byB0dXJuIGludG8KLQkgICAqIGEgV2ViIHNlcnZpY2UuCi0JICAgKiAKLQkgICAqIEByZXR1cm4gcmV0dXJucyB0aGUgYW4gSVN0cnVjdHVyZWRTZWxlY3Rpb24gb2JqZWN0IHRoYXQgdGhlIHVzZXIKLQkgICAqIHdhbnQgdG8gdHVybiBpbnRvIGEgV2ViIHNlcnZpY2UuICBUaGlzIG9iamVjdCBtYXkgYmUgZGlmZmVyZW50IHRoYW4KLQkgICAqIHRoZSBpbml0aWFsU2VsZWN0aW9uIHBhc3NlZCBpbiBieSB0aGUgc2V0SW5pdGlhbFNlbGVjdGlvbiBtZXRob2QuCi0JICAgKi8KLQkgIHB1YmxpYyBJU3RydWN0dXJlZFNlbGVjdGlvbiBnZXRPYmplY3RTZWxlY3Rpb24oKTsKLQkgIAotCSAgLyoqCi0JICAgKiBWYWxpZGF0ZXMgd2hldGhlciB0aGUgb2JqZWN0U2VsZWN0aW9uIHBhcmFtZXRlciBpcyB2YWxpZCBmb3IKLQkgICAqIHRoaXMgT2JqZWN0IHNlbGVjdGlvbiB3aWRnZXQuICBBbiBlcnJvciBzdGF0dXMgc2hvdWxkIGJlIHJldHVybmVkCi0JICAgKiBpZiB0aGlzIG9iamVjdCBpcyBub3QgdmFsdWUuICBPdGhlcndpc2UsIGFuZCBvayBzdGF0dXMgc2hvdWxkIGJlCi0JICAgKiByZXR1cm5lZAotCSAgICogCi0JICAgKiBAcGFyYW0gb2JqZWN0U2VsZWN0aW9uIHRoZSBvYmplY3QgdG8gYmUgdmFsaWRhdGVkLgotCSAgICogQHJldHVybiB0aGUgc3RhdHVzIG9mIHRoZSB2YWxpZGF0aW9uLgotCSAgICovCi0JICBwdWJsaWMgSVN0YXR1cyB2YWxpZGF0ZVNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBvYmplY3RTZWxlY3Rpb24pOwotCSAKLQkgIC8qKgotCSAgICogCi0JICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIElQcm9qZWN0IHRoYXQgY29udGFpbnMgdGhlIHNlbGVjdGlvbgotCSAgICogb2JqZWN0IHRoYXQgdGhlIHVzZXIgaGFzIGNob3NlbiB3aXRoIHRoaXMgd2lkZ2V0LiAgVGhlIHZhbHVlIGNhbiBiZSAKLQkgICAqIG51bGwgaWYgdGhlcmUgaXMgbm8gSVByb2plY3QgZm9yIHRoaXMgb2JqZWN0LgotCSAgICovCi0JICBwdWJsaWMgSVByb2plY3QgZ2V0UHJvamVjdCgpOwotCSAgCi0JICAvKioKLQkgICAqIAotCSAgICogQHJldHVybiByZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBJVmlydHVhbENvbXBvbmVudCB0aGF0IGNvbnRhaW5zIHRoZSBzZWxlY3Rpb24KLQkgICAqIG9iamVjdCB0aGF0IHRoZSB1c2VyIGhhcyBjaG9zZW4gd2l0aCB0aGlzIHdpZGdldC4gIFRoZSB2YWx1ZSBjYW4gYmUgCi0JICAgKiBudWxsIGlmIHRoZXJlIGlzIG5vIElWaXJ0dWFsQ29tcG9uZW50IGZvciB0aGlzIG9iamVjdAotCSAgICovCi0JICBwdWJsaWMgU3RyaW5nIGdldENvbXBvbmVudE5hbWUoKTsKLQkgIAotCSAgLyoqCi0JICAgKiBDYWxsZWQgdG8gbGF1bmNoIGEgZGlhbG9nIHdoaWNoIGFsbG93cyB0aGUgdXNlciB0byBtYWtlIGFuIG9iamVjdCBzZWxlY3Rpb24uCi0JICAgKiBUaGlzIGlzIGFuIGFsdGVybmF0aXZlIHRvIGltcGxlbWVudGluZyBJT2JqZWN0U2VsZWN0aW9uV2lkZ2V0IHdoaWNoIGNhbiBiZSB1c2VkIGJ5IHRoZSBkaWFsb2cgZnJhbWV3b3JrLgotCSAgICogVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbWV0aG9kIHNob3VsZCBjYWxsIHRoZSBuZWNlc3NhcnkgZ2V0dGVycyBvbiB0aGUgZGlhbG9nIHRvIHVwZGF0ZSB0aGUgCi0JICAgKiBvYmplY3Qgc2VsZWN0aW9uLiAKLQkgICAqIAotCSAgICogQHJldHVybiB0aGUgc3RhdHVzIG9mIGNvbXBsZXRpbmcgdGhlIGRpYWxvZyBsYXVuY2gKLQkgICAqLwotCSAgcHVibGljIGludCBsYXVuY2goU2hlbGwgc2hlbGwpOwotCSAgCi0JICAvKioKLQkgICAqIAotCSAgICogQHJldHVybiByZXR1cm5zIHRoZSBzdHJpbmcgdG8gZGlzcGxheWVkIGluIHRoZSBVSSBmb3IgdGhlIHNlbGVjdGVkIG9iamVjdAotCSAgICovCi0JICBwdWJsaWMgIFN0cmluZyBnZXRPYmplY3RTZWxlY3Rpb25EaXNwbGF5YWJsZVN0cmluZygpOwotCSAgCi0JICAvKioKLQkgICAqIAotCSAgICogQHBhcmFtIHMgQSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9iamVjdCBzZWxlY3Rpb24KLQkgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgc3RyaW5nIHJlcHJlc2VudHMgYSB2YWxpZCBvYmplY3Qgc2VsZWN0aW9uLgotICAgICAgICogIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIG1ldGhvZCBzaG91bGQgc2V0IHRoZSB3aWRnZXQgb2JqZWN0IHNlbGVjdGlvbgotCSAgICogIGFjY29yZGluZyB0byB0aGUgaW5wdXQgc3RyaW5nIHNvIHRoYXQgYSBzdWJzZXF1ZW50IGNhbGwgdG8gZ2V0T2JqZWN0U2VsZWN0aW9uCi0JICAgKiAgd2lsbCByZXRyaWV2ZSB0aGUgY29ycmVjdCBvYmplY3QuCi0JICAgKi8gIAotCSAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGUoU3RyaW5nIHMpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL0lQYWNrYWJsZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL0lQYWNrYWJsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjAwYmQ5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9JUGFja2FibGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDgyOSAgIDE1NTQ0MSBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgd2ViIHNlcnZpY2Ugd2l6YXJkIGhhbmdzIGR1cmluZyByZXNpemUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0czsKLQotLyoqCi0gKiBBbiBpbnRlcmZhY2UgdGhhdCBtYXJrcyBhbiBVSSBlbGVtZW50IGFzIGhhdmluZyBzb21lIGN1c3RvbSBwYWNraW5nIGNvZGUuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSVBhY2thYmxlIHsKLQkKLQkvKioKLQkgKiBDYWxsaW5nIHRoaXMgbWV0aG9kIHNob3VsZCBjYXVzZSB0aGUgVUkgZWxlbWVudCB0byBwYWNrIGl0c2VsZi4gIE5vdGUgdGhhdAotCSAqIHRoaXMgZG9lcyBub3QgbmVjZXNzYXJpbHkgaGF2ZSB0aGUgc2FtZSBiZWhhdmlvciBhcyB0aGUgcGFjaygpIG1ldGhvZCBpbiBTV1QuCi0JICovCi0Jdm9pZCBwYWNrSXQoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9JbXBvcnRXU0lMV2lkZ2V0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvSW1wb3J0V1NJTFdpZGdldC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzVlZjdhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9JbXBvcnRXU0lMV2lkZ2V0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NjbGllbnQuU2VydmljZVJlZjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVBY3Rpb25BZGFwdGVyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucGx1Z2luLldlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c2lsLkFyZ3VtZW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NpbC5UYWJsZVZpZXdlckVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuY29tbW9uLkRpYWxvZ1Jlc291cmNlQnJvd3NlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuY29tbW9uLkZpbGVFeHRlbnNpb25GaWx0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaGVscC5JV29ya2JlbmNoSGVscFN5c3RlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuU2ltcGxlV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldERhdGFFdmVudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzaWwuQWRkV1NETFRvV1NJTENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5TZXJ2aWNlSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExSZXNvdXJjZUltcGw7Ci0KLS8qKgotKiBQYWdlIGZvciBpbXBvcnRpbmcgV1NETCByZWZlcmVuY2VzIGludG8gYSBXU0lMIGluIHRoZSB3b3JrYmVuY2guCi0qLwotcHVibGljIGNsYXNzIEltcG9ydFdTSUxXaWRnZXQgZXh0ZW5kcyBTaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3IKLXsKLSAgLypDT05URVhUX0lEIFdTSUwwMDAxIGZvciB0aGUgV1NJTCBJbXBvcnQgUGFnZSovCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIElORk9QT1BfV1NJTF9JTVBPUlRfUEFHRSA9IFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLklEICsgIi5XU0lMMDAwMSI7Ci0KLSAgLypDT05URVhUX0lEIFdTSUwwMDAyIGZvciB0aGUgV1NJTCB0ZXh0IGZpZWxkKi8KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9XU0lMX1RFWFRfV1NJTCA9IFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLklEICsgIi5XU0lMMDAwMiI7Ci0KLSAgLypDT05URVhUX0lEIFdTSUwwMDAzIGZvciB0aGUgV1NJTCBicm93c2UgYnV0dG9uKi8KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9XU0lMX0JVVFRPTl9CUk9XU0VfV1NJTCA9IFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLklEICsgIi5XU0lMMDAwMyI7Ci0KLSAgLypDT05URVhUX0lEIFdTSUwwMDA0IGZvciB0aGUgV1NETCB0YWJsZSovCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIElORk9QT1BfV1NJTF9UQUJMRV9XU0RMID0gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uSUQgKyAiLldTSUwwMDA0IjsKLQotICBwcml2YXRlIGZpbmFsIFN0cmluZyBJTlNQRUNUSU9OX1dTSUwgPSAiaW5zcGVjdGlvbi53c2lsIjsKLQotICBwcml2YXRlIFRleHQgd3NpbF87Ci0gIHByaXZhdGUgQnV0dG9uIGJyb3dzZV87Ci0gIHByaXZhdGUgVGFibGVWaWV3ZXJFZGl0b3Igd3NkbHNfOwotICAKLSAgLyoqCi0gICogQ29uc3RydWN0cyBhIG5ldyBwYWdlLgotICAqLwotICBwdWJsaWMgSW1wb3J0V1NJTFdpZGdldCgpCi0gIHsKLSAgfQotCi0gIHB1YmxpYyBXaWRnZXREYXRhRXZlbnRzIGFkZENvbnRyb2xzKENvbXBvc2l0ZSBwYXJlbnQsIExpc3RlbmVyIHN0YXR1c0xpc3RlbmVyKQotICB7Ci0gIAlJV29ya2JlbmNoSGVscFN5c3RlbSBoZWxwU3lzdGVtID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCk7Ci0gIAkKLSAgICBwYXJlbnQuc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NJTF9JTVBPUlRfUEFHRSk7Ci0gICAgaGVscFN5c3RlbS5zZXRIZWxwKHBhcmVudCwgSU5GT1BPUF9XU0lMX0lNUE9SVF9QQUdFKTsKLQotICAgIENvbXBvc2l0ZSBjb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotICAgIEdyaWRMYXlvdXQgZ2wgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGdsLm51bUNvbHVtbnMgPSAzOwotICAgIGNvbXBvc2l0ZS5zZXRMYXlvdXQoZ2wpOwotICAgIEdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkdSQUJfVkVSVElDQUwgfCBHcmlkRGF0YS5WRVJUSUNBTF9BTElHTl9CRUdJTk5JTkcgfCBHcmlkRGF0YS5HUkFCX0hPUklaT05UQUwgfCBHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwpOwotICAgIGdkLmdyYWJFeGNlc3NWZXJ0aWNhbFNwYWNlID0gdHJ1ZTsKLSAgICBnZC5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKLSAgICBjb21wb3NpdGUuc2V0TGF5b3V0RGF0YShnZCk7Ci0KLSAgICBMYWJlbCBsYWJlbCA9IG5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5XUkFQKTsKLSAgICBsYWJlbC5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9XU0lMX1VSSSk7Ci0gICAgbGFiZWwuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMKSk7Ci0KLSAgICB3c2lsXyA9IG5ldyBUZXh0KGNvbXBvc2l0ZSwgU1dULldSQVAgfCBTV1QuU0lOR0xFIHwgU1dULkJPUkRFUik7Ci0gICAgZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMIHwgR3JpZERhdGEuR1JBQl9IT1JJWk9OVEFMKTsKLSAgICBnZC53aWR0aEhpbnQgPSAyNTY7Ci0gICAgd3NpbF8uc2V0TGF5b3V0RGF0YShnZCk7Ci0gICAgd3NpbF8uYWRkTGlzdGVuZXIoU1dULk1vZGlmeSwgc3RhdHVzTGlzdGVuZXIpOwotICAgIHdzaWxfLnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTSUxfVEVYVF9XU0lMKTsKLSAgICBoZWxwU3lzdGVtLnNldEhlbHAod3NpbF8sIElORk9QT1BfV1NJTF9URVhUX1dTSUwpOwotCi0gICAgYnJvd3NlXyA9IG5ldyBCdXR0b24oY29tcG9zaXRlLCBTV1QuUFVTSCk7Ci0gICAgYnJvd3NlXy5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9CUk9XU0UpOwotICAgIGJyb3dzZV8uc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMKSk7Ci0gICAgYnJvd3NlXy5hZGRMaXN0ZW5lcihTV1QuU2VsZWN0aW9uLAotICAgICAgbmV3IExpc3RlbmVyKCkKLSAgICAgIHsKLSAgICAgICAgcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQgZXZlbnQpCi0gICAgICAgIHsKLSAgICAgICAgICBoYW5kbGVCcm93c2VFdmVudChldmVudCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICApOwotICAgIGJyb3dzZV8uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NJTF9CVVRUT05fQlJPV1NFX1dTSUwpOwotICAgIGhlbHBTeXN0ZW0uc2V0SGVscChicm93c2VfLCBJTkZPUE9QX1dTSUxfQlVUVE9OX0JST1dTRV9XU0lMKTsKLQotICAgIENvbXBvc2l0ZSB3c2RsQ29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShjb21wb3NpdGUsIFNXVC5OT05FKTsKLSAgICB3c2RsQ29tcG9zaXRlLnNldExheW91dChuZXcgR3JpZExheW91dCgpKTsKLSAgICBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpOwotICAgIGdkLmhvcml6b250YWxTcGFuID0gMzsKLSAgICB3c2RsQ29tcG9zaXRlLnNldExheW91dERhdGEoZ2QpOwotICAgIGxhYmVsID0gbmV3IExhYmVsKHdzZGxDb21wb3NpdGUsIFNXVC5XUkFQKTsKLSAgICBsYWJlbC5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9XU0RMKTsKLSAgICBsYWJlbC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwpKTsKLSAgICBTdHJpbmdbXSBjb2x1bW5zID0ge0NvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9XU0RMX1VSSX07Ci0gICAgd3NkbHNfID0gbmV3IFRhYmxlVmlld2VyRWRpdG9yKHdzZGxDb21wb3NpdGUsIGNvbHVtbnMsIG5ldyBBcnJheUxpc3QoKSwgImh0dHA6Ly8iKTsKLSAgICB3c2Rsc18uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NJTF9UQUJMRV9XU0RMKTsKLSAgICB3c2Rsc18uc2V0SW5mb3BvcChJTkZPUE9QX1dTSUxfVEFCTEVfV1NETCk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBoYW5kbGVCcm93c2VFdmVudChFdmVudCBldmVudCkKLSAgewotICAgIERpYWxvZ1Jlc291cmNlQnJvd3NlciBkaWFsb2cgPSBuZXcgRGlhbG9nUmVzb3VyY2VCcm93c2VyKGJyb3dzZV8uZ2V0U2hlbGwoKSwgbnVsbCwgbmV3IEZpbGVFeHRlbnNpb25GaWx0ZXIobmV3IFN0cmluZ1tdIHsid3NpbCJ9KSk7Ci0gICAgZGlhbG9nLm9wZW4oKTsKLSAgICBJUmVzb3VyY2UgcmVzID0gZGlhbG9nLmdldEZpcnN0U2VsZWN0aW9uKCk7Ci0gICAgaWYgKHJlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChyZXMgaW5zdGFuY2VvZiBJRmlsZSkKLSAgICAgICAgd3NpbF8uc2V0VGV4dChyZXMuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpKTsKLSAgICAgIGVsc2UKLSAgICAgICAgd3NpbF8uc2V0VGV4dChyZXMuZ2V0RnVsbFBhdGgoKS5hZGRUcmFpbGluZ1NlcGFyYXRvcigpLmFwcGVuZChJTlNQRUNUSU9OX1dTSUwpLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBJU3RhdHVzIGdldFN0YXR1cygpCi0gIHsKLSAgICBpZiAoIXdzaWxfLmdldFRleHQoKS5lbmRzV2l0aCgiLndzaWwiKSkKLSAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfTVNHX0lOVkFMSURfV1NJTF9GSUxFX05BTUUgKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0SW5pdGlhbFNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pCi0gIHsKLSAgICBBcnJheUxpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBpZiAoc2VsZWN0aW9uICE9IG51bGwgJiYgIXNlbGVjdGlvbi5pc0VtcHR5KCkpCi0gICAgewotICAgICAgZm9yIChJdGVyYXRvciBpdCA9IHNlbGVjdGlvbi5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBPYmplY3Qgb2JqZWN0ID0gaXQubmV4dCgpOwotICAgICAgICBpZiAoKG9iamVjdCBpbnN0YW5jZW9mIElGaWxlKSAmJiAoKElGaWxlKW9iamVjdCkuZ2V0RmlsZUV4dGVuc2lvbigpICE9IG51bGwgJiYgKChJRmlsZSlvYmplY3QpLmdldEZpbGVFeHRlbnNpb24oKS5lcXVhbHMoIndzZGwiKSkKLSAgICAgICAgICBsaXN0LmFkZCgoKElGaWxlKW9iamVjdCkuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpKTsKLSAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFNlcnZpY2VJbXBsKQotICAgICAgICAgIGxpc3QuYWRkKEoyRUVBY3Rpb25BZGFwdGVyRmFjdG9yeS5nZXRXU0lMUGF0aCgoKFNlcnZpY2VJbXBsKShvYmplY3QpKSkpOwkKLSAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFNlcnZpY2VSZWYpCi0gICAgICAgICAgbGlzdC5hZGQoSjJFRUFjdGlvbkFkYXB0ZXJGYWN0b3J5LmdldFdTSUxQYXRoKCgoU2VydmljZVJlZikob2JqZWN0KSkpKTsJCQotICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgV1NETFJlc291cmNlSW1wbCkKLSAgICAgICAgICBsaXN0LmFkZChKMkVFQWN0aW9uQWRhcHRlckZhY3RvcnkuZ2V0V1NJTFBhdGgoKChXU0RMUmVzb3VyY2VJbXBsKShvYmplY3QpKSkpOwkKLSAgICAgIH0KLSAgICB9Ci0gICAgd3NkbHNfLnNldElucHV0KGxpc3QpOwotICAgIHdzZGxzXy5yZWZyZXNoKCk7Ci0gICAgaWYgKGxpc3Quc2l6ZSgpID4gMCkKLSAgICB7Ci0gICAgICBTdHJpbmdCdWZmZXIgcGF0aCA9IG5ldyBTdHJpbmdCdWZmZXIobGlzdC5nZXQoMCkudG9TdHJpbmcoKSk7Ci0gICAgICAvLyBjaGFuZ2UgZXh0ZW5zaW9uIGZyb20gLndzZGwgdG8gLndzaWwKLSAgICAgIGludCBsZW5ndGggPSBwYXRoLmxlbmd0aCgpOwotICAgICAgcGF0aCA9IHBhdGgucmVwbGFjZShsZW5ndGgtNCwgbGVuZ3RoLCAid3NpbCIpOwotICAgICAgd3NpbF8uc2V0VGV4dChwYXRoLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIEFyZ3VtZW50cyBnZXRHZW5XU0lMQXJndW1lbnRzKCkKLSAgewotICAgIEFyZ3VtZW50cyBhcmdzID0gbmV3IEFyZ3VtZW50cygpOwotICAgIFN0cmluZyB3c2lsUGF0aCA9IHdzaWxfLmdldFRleHQoKTsKLSAgICBpZiAod3NpbFBhdGguaW5kZXhPZignOicpIDwgMCkKLSAgICAgIGFyZ3MuYWRkKEFkZFdTRExUb1dTSUxDb21tYW5kLkFSR19XU0lMLCBVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSSh3c2lsXy5nZXRUZXh0KCkpLnRvU3RyaW5nKCkpOwotICAgIGVsc2UKLSAgICAgIGFyZ3MuYWRkKEFkZFdTRExUb1dTSUxDb21tYW5kLkFSR19XU0lMLCB3c2lsUGF0aCk7Ci0gICAgVGFibGVJdGVtW10gaXRlbXMgPSB3c2Rsc18uZ2V0SXRlbXMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIFN0cmluZyB1cmkgPSBpdGVtc1tpXS5nZXRUZXh0KDApOwotICAgICAgaWYgKHVyaS5pbmRleE9mKCc6JykgPCAwKQotICAgICAgewotICAgICAgICBJUmVzb3VyY2UgcmVzID0gUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2UodXJpKTsKLSAgICAgICAgaWYgKHJlcyAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgdXJpID0gcmVzLmdldExvY2F0aW9uKCkudG9GaWxlKCkudG9VUkwoKS50b1N0cmluZygpOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIG11cmxlKQotICAgICAgICAgIHsKLSAgICAgICAgICAJbXVybGUuZ2V0TWVzc2FnZSgpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgYXJncy5hZGQoQWRkV1NETFRvV1NJTENvbW1hbmQuQVJHX1dTREwsIHVyaSk7Ci0gICAgfQotICAgIGFyZ3MuYWRkKEFkZFdTRExUb1dTSUxDb21tYW5kLkFSR19SRVNPTFZFX1dTREwsIG51bGwpOwotICAgIHJldHVybiBhcmdzOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvSmF2YUJlYW5TZWxlY3Rpb25MYXVuY2hhYmxlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvSmF2YUJlYW5TZWxlY3Rpb25MYXVuY2hhYmxlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyMGQzNDUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL0phdmFCZWFuU2VsZWN0aW9uTGF1bmNoYWJsZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyMCAgIDEzNTkxMiBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDcxOSAgIDE0OTM1MiBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24KLSAqIDIwMDYwODI2ICAgMTM1NTcwIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBTZXJ2aWNlIGltcGxlbWVudGF0aW9uIFVSTCBub3QgZGlzcGxheWVkIHByb3Blcmx5IG9uIGZpcnN0IHBhZ2UKLSAqIDIwMDcwMzEzICAgMTcwMTI2IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBCVUphdmEgc2NlbmFyaW8gZG9lc24ndCBjYXRjaCBpbXByb3BlciBzZXJ2aWNlIGRlZmluaXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUNvbXBpbGF0aW9uVW5pdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29udmVudGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YU1vZGVsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuUHJvZ3Jlc3NNb25pdG9yRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5CZWFuTGluazsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuaW50ZXJuYWwuaW1wbC5Qb3J0Q29tcG9uZW50SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuaW50ZXJuYWwuaW1wbC5TZXJ2aWNlSW1wbEJlYW5JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5kaWFsb2cuRGlhbG9nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5yZXNvdXJjZXMuSVZpcnR1YWxDb21wb25lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBKYXZhQmVhblNlbGVjdGlvbkxhdW5jaGFibGUgZXh0ZW5kcyBBYnN0cmFjdE9iamVjdFNlbGVjdGlvbkxhdW5jaGFibGUgewotCi0JICBwcml2YXRlIElQcm9qZWN0ICAgICAgICAgICBzZXJ2ZXJQcm9qZWN0XyA9IG51bGw7Ci0JICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgICBzZXJ2ZXJDb21wb25lbnROYW1lXyA9IG51bGw7CSAgCi0JICBwcml2YXRlIFN0cmluZyBiZWFuQ2xhc3NTdHJpbmdfPSIiOwotCQkgICAKLQkgIHB1YmxpYyB2b2lkIHNldEluaXRpYWxTZWxlY3Rpb24oSVN0cnVjdHVyZWRTZWxlY3Rpb24gaW5pdGlhbFNlbGVjdGlvbikKLQkgIHsKLQkgICAgaWYgKGluaXRpYWxTZWxlY3Rpb24gIT0gbnVsbCAmJiAhaW5pdGlhbFNlbGVjdGlvbi5pc0VtcHR5KCkpCi0JICAgIHsKLQkgICAgICBPYmplY3Qgb2JqZWN0ID0gaW5pdGlhbFNlbGVjdGlvbi5nZXRGaXJzdEVsZW1lbnQoKTsKLQkgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgSUZpbGUpCi0JICAgICAgewotCSAgICAgIAlJRmlsZSBpRmlsZSA9IChJRmlsZSlvYmplY3Q7Ci0JICAgICAgCVN0cmluZyBmaWxlRXh0ID0gaUZpbGUuZ2V0RmlsZUV4dGVuc2lvbigpLnRvTG93ZXJDYXNlKCk7Ci0JICAgICAgCWlmIChmaWxlRXh0LmVxdWFscygiamF2YSIpIHx8IGZpbGVFeHQuZXF1YWxzKCJjbGFzcyIpKQotCSAgICAgICAgICBzZXRCZWFuQ2xhc3MoaUZpbGUpOwotCSAgICAgIH0KLQkgICAgICBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBJQ29tcGlsYXRpb25Vbml0KQotCSAgICAgIAlzZXRCZWFuQ2xhc3MoKChJQ29tcGlsYXRpb25Vbml0KW9iamVjdCkuZ2V0UmVzb3VyY2UoKSk7Ci0JICAgICAgZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgU2VydmljZUltcGxCZWFuSW1wbCkKLQkgICAgICAJc2V0QmVhbkNsYXNzKChTZXJ2aWNlSW1wbEJlYW5JbXBsKW9iamVjdCk7Ci0JICAgICAgZWxzZSBpZihvYmplY3QgaW5zdGFuY2VvZiBCZWFuTGluaykKLQkgICAgICAJc2V0QmVhbkNsYXNzKChCZWFuTGluaylvYmplY3QpOwotCSAgICAgIGVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFN0cmluZykKLQkgICAgCWJlYW5DbGFzc1N0cmluZ18gPSAoU3RyaW5nKSBvYmplY3Q7IC8vIHVzZSBmb3IgZGlzcGxheWFibGUgc3RyaW5nCi0JICAgIH0KLQkgIH0KLQotCSBwdWJsaWMgSVN0cnVjdHVyZWRTZWxlY3Rpb24gZ2V0T2JqZWN0U2VsZWN0aW9uKCkKLQkgIHsJCSAKLQkgICAgcmV0dXJuIG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGJlYW5DbGFzc1N0cmluZ18pOwotCSAgfQotCSAgCi0JICBwdWJsaWMgSVByb2plY3QgZ2V0UHJvamVjdCgpCi0JICB7Ci0JICAgIHJldHVybiBzZXJ2ZXJQcm9qZWN0XzsKLQkgIH0KLQotCSAgcHVibGljIFN0cmluZyBnZXRDb21wb25lbnROYW1lKCkKLQkgIHsKLQkgICAgcmV0dXJuIHNlcnZlckNvbXBvbmVudE5hbWVfOwotCSAgfQotCi0JcHVibGljIGludCBsYXVuY2goU2hlbGwgc2hlbGwpIHsJCQotCQkgICAKLQkJICAgIElUeXBlIGl0eXBlID0gRGlhbG9nVXRpbHMuYnJvd3NlQ2xhc3Nlc0FzSVR5cGUoc2hlbGwsIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdHMoKSwgbmV3IFByb2dyZXNzTW9uaXRvckRpYWxvZyhzaGVsbCkpOwotCQkgICAgaWYgKGl0eXBlICE9IG51bGwpCi0JCSAgICB7Ci0JCSAgICAgICBiZWFuQ2xhc3NTdHJpbmdfID0gaXR5cGUuZ2V0RnVsbHlRdWFsaWZpZWROYW1lKCk7Ci0JCSAgICAgIHRyeQotCQkgICAgICB7Ci0JCSAgICAgICAgSVJlc291cmNlIHJlcyA9IGl0eXBlLmdldFVuZGVybHlpbmdSZXNvdXJjZSgpOwotCQkgICAgICAgIGlmIChyZXMgIT0gbnVsbCkKLQkJICAgICAgICB7Ci0JCSAgICAgICAgICBzZXJ2ZXJQcm9qZWN0XyA9IHJlcy5nZXRQcm9qZWN0KCk7Ci0JCSAgICAgICAgICBJVmlydHVhbENvbXBvbmVudCBjb21wID0gUmVzb3VyY2VVdGlscy5nZXRDb21wb25lbnRPZihyZXMpOwotCQkgICAgICAgICAgaWYgKGNvbXAhPW51bGwpCi0JCSAgICAgICAgICB7Ci0JCSAgICAgICAgICAgIHNlcnZlckNvbXBvbmVudE5hbWVfID0gY29tcC5nZXROYW1lKCk7Ci0JCSAgICAgICAgICB9Ci0JCSAgICAgICAgfQotCQkgICAgICAgIGVsc2UKLQkJICAgICAgICB7Ci0JCSAgICAgICAgICBzZXJ2ZXJQcm9qZWN0XyA9IG51bGw7Ci0JCSAgICAgICAgICBzZXJ2ZXJDb21wb25lbnROYW1lXyA9IG51bGw7Ci0JCSAgICAgICAgfQotCQkgICAgICAgIHJldHVybiBTdGF0dXMuT0s7Ci0JCSAgICAgIH0KLQkJICAgICAgY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBqbWUpCi0JCSAgICAgIHsKLQkJICAgICAgICBzZXJ2ZXJQcm9qZWN0XyA9IG51bGw7Ci0JCSAgICAgICAgc2VydmVyQ29tcG9uZW50TmFtZV8gPSBudWxsOwotCQkgICAgICAgIHJldHVybiBTdGF0dXMuRVJST1I7Ci0JCSAgICAgIH0KLQkJICAgIH0JCQkgICAgCi0JCXJldHVybiBTdGF0dXMuQ0FOQ0VMOwotCX0JCi0gIAkKLQkgIHByaXZhdGUgdm9pZCBzZXRCZWFuQ2xhc3MoSVJlc291cmNlIHJlc291cmNlKQotCSAgewotCSAgICBpZiggcmVzb3VyY2UgIT0gbnVsbCAmJiByZXNvdXJjZSBpbnN0YW5jZW9mIElGaWxlICkKLQkgICAgewotCSAgICAgIElQYXRoICBwYXRoICAgICA9IHJlc291cmNlLmdldEZ1bGxQYXRoKCk7Ci0JICAgICAgU3RyaW5nIGJhc2VuYW1lID0gcGF0aC5sYXN0U2VnbWVudCgpOwotCSAgICAgIAotCSAgICAgIGlmKCBiYXNlbmFtZSAhPSBudWxsICYmIGJhc2VuYW1lLmxlbmd0aCgpID4gMCApCi0JICAgICAgewotCSAgICAgICAgU3RyaW5nIGJlYW5QYWNrYWdlID0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzLmdldEphdmFSZXNvdXJjZVBhY2thZ2VOYW1lKHBhdGgpOwotCSAgICAgICAgU3RyaW5nIGJlYW5DbGFzcyA9IChiZWFuUGFja2FnZSA9PSBudWxsIHx8IGJlYW5QYWNrYWdlLmxlbmd0aCgpID09IDAgPyBiYXNlbmFtZSA6IChiZWFuUGFja2FnZSArICIuIiArIGJhc2VuYW1lKSk7Ci0JICAgICAgICAKLQkgICAgICAgIGlmKCBiZWFuQ2xhc3MudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgiLmphdmEiKSB8fCBiZWFuQ2xhc3MudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgiLmNsYXNzIiApICkKLQkgICAgICAgIHsKLQkgICAgICAgICAgYmVhbkNsYXNzID0gYmVhbkNsYXNzLnN1YnN0cmluZyggMCwgYmVhbkNsYXNzLmxhc3RJbmRleE9mKCcuJykgKTsKLQkgICAgICAgIH0KLQkgICAgICAgIAotCSAgICAgICAgYmVhbkNsYXNzU3RyaW5nXyA9IGJlYW5DbGFzczsKLQkgICAgICAgIHNlcnZlclByb2plY3RfID0gIFJlc291cmNlVXRpbHMuZ2V0UHJvamVjdE9mKHBhdGgpOwotCSAgICAgICAgSVZpcnR1YWxDb21wb25lbnQgY29tcCA9IFJlc291cmNlVXRpbHMuZ2V0Q29tcG9uZW50T2YocmVzb3VyY2UpOwotCSAgICAgICAgCi0JICAgICAgICBpZiAoY29tcCE9bnVsbCkKLQkgICAgICAgIHsJCi0JICAgICAgICAgIHNlcnZlckNvbXBvbmVudE5hbWVfID0gY29tcC5nZXROYW1lKCk7Ci0JICAgICAgICB9ICAgICAgICAKLQkgICAgICAgIAotCSAgICAgIH0KLQkgICAgfQotCSAgfQotCi0JICBwcml2YXRlIHZvaWQgc2V0QmVhbkNsYXNzKFNlcnZpY2VJbXBsQmVhbkltcGwgc2VydmljZUltcGwpCi0JICB7Ci0JICAgIGlmKCBzZXJ2aWNlSW1wbCAhPSBudWxsICkKLQkgICAgewotCSAgICAgIEVPYmplY3QgZU9iamVjdCA9IHNlcnZpY2VJbXBsLmVDb250YWluZXIoKTsKLQkgICAgICBpZihlT2JqZWN0IGluc3RhbmNlb2YgUG9ydENvbXBvbmVudEltcGwpewotCSAgICAgIAlQb3J0Q29tcG9uZW50SW1wbCBwY2kgPSAoUG9ydENvbXBvbmVudEltcGwpZU9iamVjdDsKLQkgICAgICAJYmVhbkNsYXNzU3RyaW5nXyA9IHBjaS5nZXRTZXJ2aWNlRW5kcG9pbnRJbnRlcmZhY2UoKTsJICAgICAgCQotCSAgICAgIH0KLQkgICAgfQotCSAgfQotCSAgCi0JICBwcml2YXRlIHZvaWQgc2V0QmVhbkNsYXNzKEJlYW5MaW5rIHNlcnZpY2VJbXBsKQotCSAgewotCSAgICBpZiggc2VydmljZUltcGwgIT0gbnVsbCApCi0JICAgIHsKLQkgICAgICBFT2JqZWN0IGVPYmplY3QgPSBzZXJ2aWNlSW1wbC5lQ29udGFpbmVyKCk7Ci0JICAgICAgaWYoZU9iamVjdCBpbnN0YW5jZW9mIFNlcnZpY2VJbXBsQmVhbkltcGwpewotCSAgICAgIAlzZXRCZWFuQ2xhc3MoKFNlcnZpY2VJbXBsQmVhbkltcGwpZU9iamVjdCk7Ci0JICAgICAgfQotCSAgICB9Ci0JICB9Ci0JICAKLQkgIHB1YmxpYyBJU3RhdHVzIGdldFN0YXR1cygpCi0JICB7Ci0JCWlmIChiZWFuQ2xhc3NTdHJpbmdfLmxlbmd0aCgpIDw9IDApCi0JICAgIHsKLQkgICAgICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfTVNHX0JFQU5fQ0FOTk9UX0JFX0VNUFRZKTsKLQkgICAgfQotCSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQkgIH0KLQkgIAotCSAgcHVibGljIElTdGF0dXMgdmFsaWRhdGVTZWxlY3Rpb24oSVN0cnVjdHVyZWRTZWxlY3Rpb24gb2JqZWN0U2VsZWN0aW9uKQotCSAgewotCSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQkgIH0KLQkgIAotCSAgcHVibGljIFN0cmluZyBnZXRPYmplY3RTZWxlY3Rpb25EaXNwbGF5YWJsZVN0cmluZygpIHsJCSAgCi0JCQkgIHJldHVybiBiZWFuQ2xhc3NTdHJpbmdfOwotCSAgfQotCSAgCi0JICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZShTdHJpbmcgcykgewotCQkgIGJlYW5DbGFzc1N0cmluZ18gPSBzOwotCQkgIFN0cmluZyBzb3VyY2VMZXZlbCA9IEphdmFDb3JlLmdldE9wdGlvbihKYXZhQ29yZS5DT01QSUxFUl9TT1VSQ0UpOwotCQkgIFN0cmluZyBjb21wbGlhbmNlTGV2ZWwgPSBKYXZhQ29yZS5nZXRPcHRpb24oSmF2YUNvcmUuQ09NUElMRVJfQ09NUExJQU5DRSk7Ci0JCSAgcmV0dXJuIEphdmFDb252ZW50aW9ucy52YWxpZGF0ZUphdmFUeXBlTmFtZShzLCBzb3VyY2VMZXZlbCwgY29tcGxpYW5jZUxldmVsKS5pc09LKCk7Ci0JICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9QcmVmZXJlbmNlc1NlbGVjdGlvbldpZGdldC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL1ByZWZlcmVuY2VzU2VsZWN0aW9uV2lkZ2V0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyYzQ2NDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL1ByZWZlcmVuY2VzU2VsZWN0aW9uV2lkZ2V0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuV1NVSVBsdWdpbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5jb21tb24uVUlVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLlNpbXBsZVdpZGdldERhdGFDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXREYXRhRXZlbnRzOwotCi0KLXB1YmxpYyBjbGFzcyBQcmVmZXJlbmNlc1NlbGVjdGlvbldpZGdldCBleHRlbmRzIFNpbXBsZVdpZGdldERhdGFDb250cmlidXRvcgoteyAgICAKLSAgcHJpdmF0ZSBSZXNvdXJjZUNvbnRleHQgY29udGV4dF87Ci0gIAotICAvKkNPTlRFWFRfSUQgUFdQUjAwMDMgZm9yIHRoZSBPdmVyd3JpdGUgRmlsZXMgY2hlY2sgYm94IG9mIHRoZSBQcm9qZWN0IFBhZ2UqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BXUFJfQ0hFQ0tCT1hfT1ZFUldSSVRFX0ZJTEVTID0gIlBXUFIwMDAzIjsKLSAgcHJpdmF0ZSBCdXR0b24gb3ZlcndyaXRlRmlsZXNDaGVja2JveF87Ci0gIAotICAvKkNPTlRFWFRfSUQgUFdQUjAwMDQgZm9yIHRoZSBDcmVhdGUgRm9sZGVycyBjaGVjayBib3ggb2YgdGhlIFByb2plY3QgUGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFdQUl9DSEVDS0JPWF9DUkVBVEVfRk9MREVSUyA9ICJQV1BSMDAwNCI7Ci0gIHByaXZhdGUgQnV0dG9uIGNyZWF0ZUZvbGRlcnNDaGVja2JveF87Ci0gIAotICAvKkNPTlRFWFRfSUQgUFdQUjAwMTUgZm9yIHRoZSBDaGVjayBPdXQgRmlsZXMgY2hlY2sgYm94IG9mIHRoZSBQcm9qZWN0IFBhZ2UqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BXUFJfQ0hFQ0tCT1hfQ0hFQ0tPVVRfRklMRVMgPSAiUFdQUjAwMTUiOyAgCi0gIHByaXZhdGUgQnV0dG9uIGNoZWNrb3V0RmlsZXNDaGVja2JveF87Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuV2lkZ2V0Q29udHJpYnV0b3IjYWRkQ29udHJvbHMob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcikKLSAgICovCi0gIHB1YmxpYyBXaWRnZXREYXRhRXZlbnRzIGFkZENvbnRyb2xzKCBDb21wb3NpdGUgcGFyZW50LCBMaXN0ZW5lciBzdGF0dXNMaXN0ZW5lcikKLSAgewotICAgIFN0cmluZyAgICAgICBjb25QbHVnaW5JZCA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkiOwotICAJVUlVdGlscyAgICAgIHV0aWxzICAgICAgID0gbmV3IFVJVXRpbHMoIGNvblBsdWdpbklkICk7Ci0gIAkKLSAgICBDb21wb3NpdGUgcmVzb3VyY2VzR3JvdXAgPSB1dGlscy5jcmVhdGVDb21wb3NpdGUoIHBhcmVudCwgMSApOwotICAgIAotICAgIG92ZXJ3cml0ZUZpbGVzQ2hlY2tib3hfID0gdXRpbHMuY3JlYXRlQ2hlY2tib3goIHJlc291cmNlc0dyb3VwLCBXU1VJUGx1Z2luTWVzc2FnZXMuQlVUVE9OX09WRVJXUklURV9GSUxFUywKLSAgICAJCVdTVUlQbHVnaW5NZXNzYWdlcy5UT09MVElQX1BQUk1fQ0hFQ0tCT1hfT1ZFUldSSVRFX0ZJTEVTLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkZPUE9QX1BXUFJfQ0hFQ0tCT1hfT1ZFUldSSVRFX0ZJTEVTICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgY3JlYXRlRm9sZGVyc0NoZWNrYm94XyA9IHV0aWxzLmNyZWF0ZUNoZWNrYm94KCByZXNvdXJjZXNHcm91cCwgV1NVSVBsdWdpbk1lc3NhZ2VzLkJVVFRPTl9DUkVBVEVfRk9MREVSUywKLSAgICAJCVdTVUlQbHVnaW5NZXNzYWdlcy5UT09MVElQX1BQUk1fQ0hFQ0tCT1hfQ1JFQVRFX0ZPTERFUlMgLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElORk9QT1BfUFdQUl9DSEVDS0JPWF9DUkVBVEVfRk9MREVSUyApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgY2hlY2tvdXRGaWxlc0NoZWNrYm94XyA9IHV0aWxzLmNyZWF0ZUNoZWNrYm94KCByZXNvdXJjZXNHcm91cCwgV1NVSVBsdWdpbk1lc3NhZ2VzLkJVVFRPTl9DSEVDS09VVF9GSUxFUywKLSAgICAJCVdTVUlQbHVnaW5NZXNzYWdlcy5UT09MVElQX1BQUk1fQ0hFQ0tCT1hfQ0hFQ0tfT1VULCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElORk9QT1BfUFdQUl9DSEVDS0JPWF9DSEVDS09VVF9GSUxFUyApOwotICAgIAotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0UmVzb3VyY2VDb250ZXh0KCBSZXNvdXJjZUNvbnRleHQgY29udGV4dCApCi0gIHsgCi0gICAgb3ZlcndyaXRlRmlsZXNDaGVja2JveF8uc2V0U2VsZWN0aW9uKCBjb250ZXh0LmlzT3ZlcndyaXRlRmlsZXNFbmFibGVkKCkgKTsKLSAgICBjcmVhdGVGb2xkZXJzQ2hlY2tib3hfLnNldFNlbGVjdGlvbiggY29udGV4dC5pc0NyZWF0ZUZvbGRlcnNFbmFibGVkKCkgKTsKLSAgICBjaGVja291dEZpbGVzQ2hlY2tib3hfLnNldFNlbGVjdGlvbiggY29udGV4dC5pc0NoZWNrb3V0RmlsZXNFbmFibGVkKCkgKTsgCi0gICAgCi0gICAgY29udGV4dF8gPSBjb250ZXh0OwotICB9Ci0gIAotICBwdWJsaWMgUmVzb3VyY2VDb250ZXh0IGdldFJlc291cmNlQ29udGV4dCgpIAotICB7ICAgIAotICAgIGNvbnRleHRfLnNldE92ZXJ3cml0ZUZpbGVzRW5hYmxlZCggb3ZlcndyaXRlRmlsZXNDaGVja2JveF8uZ2V0U2VsZWN0aW9uKCkgKTsKLSAgICBjb250ZXh0Xy5zZXRDcmVhdGVGb2xkZXJzRW5hYmxlZCggY3JlYXRlRm9sZGVyc0NoZWNrYm94Xy5nZXRTZWxlY3Rpb24oKSApOwotICAgIGNvbnRleHRfLnNldENoZWNrb3V0RmlsZXNFbmFibGVkKCBjaGVja291dEZpbGVzQ2hlY2tib3hfLmdldFNlbGVjdGlvbigpICk7Ci0gICAgCi0gICAgcmV0dXJuIGNvbnRleHRfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvUHJvamVjdFNlbGVjdGlvbkRpYWxvZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL1Byb2plY3RTZWxlY3Rpb25EaWFsb2cuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQ5MTZmMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvUHJvamVjdFNlbGVjdGlvbkRpYWxvZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQxMyAgIDEzNTU4MSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwODAyICAgMTQ4NzMxIG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMucnVudGltZS5Qcm9qZWN0U2VsZWN0aW9uV2lkZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5kYXRhLlR5cGVSdW50aW1lU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLlBhZ2VJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLlNpbXBsZURpYWxvZzsKLQotcHVibGljIGNsYXNzIFByb2plY3RTZWxlY3Rpb25EaWFsb2cgZXh0ZW5kcyBTaW1wbGVEaWFsb2cgewotCi0JU3RyaW5nIHRpdGxlVGV4dF89IiI7Ci0JU3RyaW5nIHByb2plY3ROYW1lXz0iIjsKLQlTdHJpbmcgZWFyUHJvamVjdE5hbWVfPSIiOwotCVN0cmluZyBjb21wb25lbnRUeXBlXz0iIjsKLQlUeXBlUnVudGltZVNlcnZlciB0cnNfOwotCWJvb2xlYW4gbmVlZEVBUl87Ci0JCi0JcHVibGljIFByb2plY3RTZWxlY3Rpb25EaWFsb2coU2hlbGwgc2hlbGwsIFBhZ2VJbmZvIHBhZ2VJbmZvKQotCXsKLQkJc3VwZXIoc2hlbGwsIHBhZ2VJbmZvKTsKLQkJdGl0bGVUZXh0XyA9IHBhZ2VJbmZvLmdldFBhZ2VOYW1lKCk7Ci0JfQkKLQkKLQlwcm90ZWN0ZWQgdm9pZCBjYWxsU2V0dGVycygpIHsKLQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCQlQcm9qZWN0U2VsZWN0aW9uV2lkZ2V0IHByb2pXaWRnZXQgPSAoUHJvamVjdFNlbGVjdGlvbldpZGdldClnZXRXaWRnZXQoKTsJCQotCQlwcm9qV2lkZ2V0LnNldEVhclByb2plY3ROYW1lKGVhclByb2plY3ROYW1lXyk7Ci0JCXByb2pXaWRnZXQuc2V0UHJvamVjdE5hbWUocHJvamVjdE5hbWVfKTsKLQkJcHJvaldpZGdldC5zZXRDb21wb25lbnRUeXBlKGNvbXBvbmVudFR5cGVfKTsKLQkJcHJvaldpZGdldC5zZXROZWVkRUFSKG5lZWRFQVJfKTsKLQkJcHJvaldpZGdldC5zZXRUeXBlUnVudGltZVNlcnZlcih0cnNfKTsKLQkJCi0JCXByb2pXaWRnZXQucmVmcmVzaFByb2plY3RJdGVtcygpOwotCX0KLQkKLQkgIHByb3RlY3RlZCBQb2ludCBnZXRJbml0aWFsU2l6ZSgpCi0JICB7Ci0JICAgIHJldHVybiB0aGlzLmdldFNoZWxsKCkuY29tcHV0ZVNpemUoMjUwLCBTV1QuREVGQVVMVCwgdHJ1ZSk7IAotCSAgfQotCi0KLQkgIHByb3RlY3RlZCB2b2lkIHNldFNoZWxsU3R5bGUoaW50IG5ld1NoZWxsU3R5bGUpCi0JICB7Ci0JICAgIHN1cGVyLnNldFNoZWxsU3R5bGUoIG5ld1NoZWxsU3R5bGUgfCBTV1QuUkVTSVpFICk7ICAKLQkgIH0KLQotCSAgcHJvdGVjdGVkIHZvaWQgY29uZmlndXJlU2hlbGwoU2hlbGwgbmV3U2hlbGwpCi0JICB7Ci0JICAgIG5ld1NoZWxsLnNldFRleHQodGl0bGVUZXh0Xyk7ICAgCi0JICAgIHN1cGVyLmNvbmZpZ3VyZVNoZWxsKG5ld1NoZWxsKTsKLQkgIH0JCi0JCQotCQlwdWJsaWMgdm9pZCBzZXRQcm9qZWN0TmFtZShTdHJpbmcgbmFtZSkKLQkJICB7Ci0JCQkJcHJvamVjdE5hbWVfID0gbmFtZTsKLQkJICB9Ci0JCQotCQlwdWJsaWMgU3RyaW5nIGdldFByb2plY3ROYW1lKCkKLQkJICB7Ci0JCQkJcmV0dXJuIHByb2plY3ROYW1lXzsKLQkJICB9Ci0JCQotCQkgcHVibGljIHZvaWQgc2V0RWFyUHJvamVjdE5hbWUoU3RyaW5nIG5hbWUpCi0JCSAgewkJCQotCQkJCWVhclByb2plY3ROYW1lXyA9IG5hbWU7Ci0JCSAgfSAKLQkJIAotCQkgcHVibGljIFN0cmluZyBnZXRFYXJQcm9qZWN0TmFtZSgpCi0JCSB7Ci0JCQkgcmV0dXJuIGVhclByb2plY3ROYW1lXzsKLQkJIH0KLQkJIAotCQkgcHVibGljIHZvaWQgc2V0UHJvamVjdENvbXBvbmVudFR5cGUoIFN0cmluZyB0eXBlICkKLQkJICB7Ci0JCQkgICAgY29tcG9uZW50VHlwZV8gPSB0eXBlOwotCQkgIH0KLQotCQkgcHVibGljIFN0cmluZyBnZXRQcm9qZWN0Q29tcG9uZW50VHlwZSgpCi0JCSAgewotCQkJIHJldHVybiBjb21wb25lbnRUeXBlXzsKLQkJICB9Ci0JCSAKLQkJIHB1YmxpYyB2b2lkIHNldE5lZWRFQVIoYm9vbGVhbiBiKQotCQkgIHsKLQkJCSAgICBuZWVkRUFSXyA9IGI7CQkJICAgIAotCQkgIH0KLQkJIAotCQkgcHVibGljIGJvb2xlYW4gZ2V0TmVlZEVBUigpCi0JCSAgewotCQkJICAgIHJldHVybiBuZWVkRUFSXzsJCQkJCi0JCSAgfQotCQkgCi0JCSBwdWJsaWMgdm9pZCBzZXRUeXBlUnVudGltZVNlcnZlcihUeXBlUnVudGltZVNlcnZlciB0cnMpCi0JCSB7Ci0JCQkgICAgdHJzXyA9IHRyczsgCi0JCSB9Ci0JCSAKLQkJIHB1YmxpYyBib29sZWFuIGNsb3NlKCkgewotCi0JCQlwcm9qZWN0TmFtZV8gPSAoKFByb2plY3RTZWxlY3Rpb25XaWRnZXQpZ2V0V2lkZ2V0KCkpLmdldFByb2plY3ROYW1lKCk7Ci0JCQllYXJQcm9qZWN0TmFtZV8gPSAoKFByb2plY3RTZWxlY3Rpb25XaWRnZXQpZ2V0V2lkZ2V0KCkpLmdldEVhclByb2plY3ROYW1lKCk7IAotCQkJbmVlZEVBUl8gPSAoKFByb2plY3RTZWxlY3Rpb25XaWRnZXQpZ2V0V2lkZ2V0KCkpLmdldE5lZWRFQVIoKTsKLQkJCWNvbXBvbmVudFR5cGVfID0gKChQcm9qZWN0U2VsZWN0aW9uV2lkZ2V0KWdldFdpZGdldCgpKS5nZXRDb21wb25lbnRUeXBlKCk7Ci0JCQlyZXR1cm4gc3VwZXIuY2xvc2UoKTsKLQkJfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL1B1Ymxpc2hUb1ByaXZhdGVVRERJQ29tbWFuZEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvUHVibGlzaFRvUHJpdmF0ZVVERElDb21tYW5kRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjgxMTM4ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvUHVibGlzaFRvUHJpdmF0ZVVERElDb21tYW5kRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLlByaXZhdGVVRERJUmVnaXN0cnlUeXBlUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkFic3RyYWN0Q29tbWFuZEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5DYW5GaW5pc2hSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRSZWdpc3RyeTsKLQotCi1wdWJsaWMgY2xhc3MgUHVibGlzaFRvUHJpdmF0ZVVERElDb21tYW5kRnJhZ21lbnQgZXh0ZW5kcyBBYnN0cmFjdENvbW1hbmRGcmFnbWVudAotewotICBwcml2YXRlIERhdGFNYXBwaW5nUmVnaXN0cnkgZGF0YU1hcHBpbmdSZWdpc3RyeTsKLSAgcHJpdmF0ZSBDYW5GaW5pc2hSZWdpc3RyeSBjYW5GaW5pc2hSZWdpc3RyeTsKLSAgcHJpdmF0ZSBXaWRnZXRSZWdpc3RyeSB3aWRnZXRSZWdpc3RyeTsKLSAgcHJpdmF0ZSBib29sZWFuIHB1Ymxpc2hUb1ByaXZhdGVVRERJOwotICBwcml2YXRlIENvbW1hbmRXaWRnZXRCaW5kaW5nIHByaXZhdGVVRERJQmluZGluZzsKLSAgCi0gIHB1YmxpYyBQdWJsaXNoVG9Qcml2YXRlVURESUNvbW1hbmRGcmFnbWVudCgpCi0gIHsKLSAgICBzdXBlcihudWxsLCAiIik7Ci0gICAgcHJpdmF0ZVVERElCaW5kaW5nID0gUHJpdmF0ZVVERElSZWdpc3RyeVR5cGVSZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmdldFByaXZhdGVVRERJUmVnaXN0cnlUeXBlKCkuZ2V0QmluZGluZygpOwotICB9Ci0KLSAgLyoqIAotICAgKiBHZXRzIHRoZSBmaXJzdCBjaGlsZCBmcmFnbWVudCBmb3IgdGhpcyBmcmFnbWVudC4KLSAgICoKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBmaXJzdCBjaGlsZCBmcmFnbWVudCBmb3IgdGhpcyBmcmFnbWVudC4gIFJldHVybnMKLSAgICogbnVsbCB3aGVuIHRoZXJlIGlzIG5vIGZpcnN0IGNoaWxkLgotICAqKi8KLSAgcHVibGljIENvbW1hbmRGcmFnbWVudCBnZXRGaXJzdFN1YkZyYWdtZW50KCkKLSAgewotICAgIGlmIChwcml2YXRlVURESUJpbmRpbmcgIT0gbnVsbCAmJiBwdWJsaXNoVG9Qcml2YXRlVURESSAmJiAhUHJpdmF0ZVVERElSZWdpc3RyeVR5cGVSZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmdldFByaXZhdGVVRERJUmVnaXN0cnlUeXBlKCkuaXNQcml2YXRlVURESVJlZ2lzdHJ5SW5zdGFsbGVkKCkpCi0gICAgewotICAgICAgcHJpdmF0ZVVERElCaW5kaW5nLnJlZ2lzdGVyQ2FuRmluaXNoKGNhbkZpbmlzaFJlZ2lzdHJ5KTsKLSAgICAgIHByaXZhdGVVRERJQmluZGluZy5yZWdpc3RlckRhdGFNYXBwaW5ncyhkYXRhTWFwcGluZ1JlZ2lzdHJ5KTsKLSAgICAgIHByaXZhdGVVRERJQmluZGluZy5yZWdpc3RlcldpZGdldE1hcHBpbmdzKHdpZGdldFJlZ2lzdHJ5KTsKLSAgICAgIHJldHVybiBwcml2YXRlVURESUJpbmRpbmcuY3JlYXRlKCkuY3JlYXRlKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAgKiBHZXRzIHRoZSBuZXh0IGNoaWxkIGZyYWdtZW50IGZvciB0aGlzIGZyYWdtZW50LgotICAgICoKLSAgICAqIEByZXR1cm4gcmV0dXJucyB0aGUgbmV4dCBjaGlsZCBmcmFnbWVudCBmb3IgdGhpcyBmcmFnbWVudC4gIFJldHVybnMgbnVsbAotICAgICogd2hlbiB0aGVyZSBpcyBubyBuZXh0IGNoaWxkLgotICAqKi8KLSAgcHVibGljIENvbW1hbmRGcmFnbWVudCBnZXROZXh0U3ViRnJhZ21lbnQoQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50KQotICB7Ci0gIAlyZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgLyoKLSAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIHJldHJpZXZlIHRoZSBkYXRhIG1hcHBpbmdzIGZvciB0aGlzIGNvbW1hbmQgZnJhZ21lbnQuCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyhEYXRhTWFwcGluZ1JlZ2lzdHJ5IHJlZ2lzdHJ5KQotICB7Ci0gIAlkYXRhTWFwcGluZ1JlZ2lzdHJ5ID0gcmVnaXN0cnk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZWdpc3RlckNhbkZpbmlzaChDYW5GaW5pc2hSZWdpc3RyeSBjYW5GaW5pc2hSZWdpc3RyeSkKLSAgewotICAgIHRoaXMuY2FuRmluaXNoUmVnaXN0cnkgPSBjYW5GaW5pc2hSZWdpc3RyeTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyV2lkZ2V0TWFwcGluZ3MoV2lkZ2V0UmVnaXN0cnkgd2lkZ2V0UmVnaXN0cnkpCi0gIHsKLSAgICB0aGlzLndpZGdldFJlZ2lzdHJ5ID0gd2lkZ2V0UmVnaXN0cnk7Ci0gIH0KLQotICAvKioKLSAgICAqIEFsbCB3aXphcmQgZnJhZ21lbnRzIG5lZWQgdG8gYmUgY2xvbmVhYmxlLgotICAqKi8KLSAgcHVibGljIE9iamVjdCBjbG9uZSgpCi0gIHsKLSAgICBQdWJsaXNoVG9Qcml2YXRlVURESUNvbW1hbmRGcmFnbWVudCBmcmFnbWVudCA9IG5ldyBQdWJsaXNoVG9Qcml2YXRlVURESUNvbW1hbmRGcmFnbWVudCgpOwotICAJZnJhZ21lbnQucmVnaXN0ZXJEYXRhTWFwcGluZ3MoZGF0YU1hcHBpbmdSZWdpc3RyeSk7Ci0gIAlmcmFnbWVudC5yZWdpc3RlckNhbkZpbmlzaChjYW5GaW5pc2hSZWdpc3RyeSk7Ci0gIAlmcmFnbWVudC5yZWdpc3RlcldpZGdldE1hcHBpbmdzKHdpZGdldFJlZ2lzdHJ5KTsKLSAgCWZyYWdtZW50LnNldFB1Ymxpc2hUb1ByaXZhdGVVRERJKHB1Ymxpc2hUb1ByaXZhdGVVRERJKTsKLSAgCXJldHVybiBmcmFnbWVudDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFB1Ymxpc2hUb1ByaXZhdGVVRERJKGJvb2xlYW4gcHVibGlzaCkKLSAgewotICAgIHB1Ymxpc2hUb1ByaXZhdGVVRERJID0gcHVibGlzaDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL1B1Ymxpc2hXU1dpZGdldC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL1B1Ymxpc2hXU1dpZGdldC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTM2ODNmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9QdWJsaXNoV1NXaWRnZXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucGx1Z2luLldlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuUHJpdmF0ZVVERElSZWdpc3RyeVR5cGVSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLlB1YmxpY1VERElSZWdpc3RyeVR5cGVSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLnVkZGkuUHVibGljVURESVJlZ2lzdHJ5VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkudWRkaS5Qcml2YXRlVURESVJlZ2lzdHJ5VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5oZWxwLklXb3JrYmVuY2hIZWxwU3lzdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLlNpbXBsZVdpZGdldERhdGFDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXREYXRhRXZlbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5MYXVuY2hPcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLkxhdW5jaE9wdGlvbnM7Ci0KLQotcHVibGljIGNsYXNzIFB1Ymxpc2hXU1dpZGdldCBleHRlbmRzIFNpbXBsZVdpZGdldERhdGFDb250cmlidXRvcgotewotICAvKiBDT05URVhUX0lEIFBXUEIwMDAxIGZvciB0aGUgVURESSBQdWJsaXNoIFBhZ2UgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QV1BCX1BBR0UgPSBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5JRCArICIuUFdQQjAwMDEiOwotICAvKiBDT05URVhUX0lEIFBXUEIwMDAyIGZvciB0aGUgVURESSBMYXVuY2ggY2hlY2sgYm94IG9mIHRoZSBVRERJIFB1Ymxpc2ggUGFnZSAqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BXUEJfQ0hFQ0tCT1hfV1NfTEFVTkNIID0gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uSUQgKyAiLlBXUEIwMDAyIjsKLSAgcHJpdmF0ZSBCdXR0b24gbGF1bmNoVURESUNoZWNrYm94XzsKLSAgcHJpdmF0ZSBCdXR0b24gbGF1bmNoUHJpdmF0ZVVERElDaGVja2JveF87Ci0gIHByaXZhdGUgTGFiZWwgcHViaWxjVURESVJlZ0NvbWJvTGFiZWxfOwotICBwcml2YXRlIENvbWJvIHB1YmxpY1VERElSZWdDb21ib187Ci0gIHByaXZhdGUgTGlzdGVuZXIgc3RhdHVzTGlzdGVuZXI7Ci0gIHByaXZhdGUgQm9vbGVhbiBwdWJsaXNoOwotCi0gIHB1YmxpYyBQdWJsaXNoV1NXaWRnZXQoYm9vbGVhbiBwdWJsaXNoKQotICB7Ci0JICB0aGlzLnB1Ymxpc2ggPSBuZXcgQm9vbGVhbihwdWJsaXNoKTsKLSAgfQotCi0gIHB1YmxpYyBXaWRnZXREYXRhRXZlbnRzIGFkZENvbnRyb2xzKENvbXBvc2l0ZSBwYXJlbnQsIExpc3RlbmVyIHN0YXR1c0xpc3RlbmVyKQotICB7Ci0gICAgdGhpcy5zdGF0dXNMaXN0ZW5lciA9IHN0YXR1c0xpc3RlbmVyOwotICAgIExpc3RlbmVyIHNlbExpc3RlbmVyID0gbmV3IExpc3RlbmVyKCkKLSAgICB7Ci0gICAgICBwdWJsaWMgdm9pZCBoYW5kbGVFdmVudChFdmVudCBldmVudCkKLSAgICAgIHsKLSAgICAgICAgaGFuZGxlU2VsZWN0aW9uRXZlbnQoZXZlbnQpOwotICAgICAgfQotICAgIH07Ci0gICAgcGFyZW50LnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BXUEJfUEFHRSk7Ci0gICAgSVdvcmtiZW5jaEhlbHBTeXN0ZW0gaGVscFN5c3RlbSA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpOwotICAgIGhlbHBTeXN0ZW0uc2V0SGVscChwYXJlbnQsIElORk9QT1BfUFdQQl9QQUdFKTsKLSAgICBsYXVuY2hQcml2YXRlVURESUNoZWNrYm94XyA9IG5ldyBCdXR0b24ocGFyZW50LCBTV1QuQ0hFQ0spOwotICAgIGlmIChwdWJsaXNoLmJvb2xlYW5WYWx1ZSgpKQotICAgICAgbGF1bmNoUHJpdmF0ZVVERElDaGVja2JveF8uc2V0VGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuQlVUVE9OX1dTX1BVQkxJU0hfUFJJVkFURV9VRERJKTsKLSAgICBlbHNlCi0gICAgICBsYXVuY2hQcml2YXRlVURESUNoZWNrYm94Xy5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5CVVRUT05fV1NfRklORF9QUklWQVRFX1VEREkpOwotICAgIGxhdW5jaFByaXZhdGVVRERJQ2hlY2tib3hfLnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BXUEJfQ0hFQ0tCT1hfV1NfTEFVTkNIKTsKLSAgICBsYXVuY2hQcml2YXRlVURESUNoZWNrYm94Xy5hZGRMaXN0ZW5lcihTV1QuU2VsZWN0aW9uLCBzZWxMaXN0ZW5lcik7Ci0gICAgaGVscFN5c3RlbS5zZXRIZWxwKGxhdW5jaFByaXZhdGVVRERJQ2hlY2tib3hfLCBJTkZPUE9QX1BXUEJfQ0hFQ0tCT1hfV1NfTEFVTkNIKTsKLSAgICBsYXVuY2hVRERJQ2hlY2tib3hfID0gbmV3IEJ1dHRvbihwYXJlbnQsIFNXVC5DSEVDSyk7Ci0gICAgaWYgKHB1Ymxpc2guYm9vbGVhblZhbHVlKCkpCi0gICAgICBsYXVuY2hVRERJQ2hlY2tib3hfLnNldFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkJVVFRPTl9XU19QVUJMSVNIKTsKLSAgICBlbHNlCi0gICAgICBsYXVuY2hVRERJQ2hlY2tib3hfLnNldFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkJVVFRPTl9XU19GSU5EKTsKLSAgICBsYXVuY2hVRERJQ2hlY2tib3hfLnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BXUEJfQ0hFQ0tCT1hfV1NfTEFVTkNIKTsKLSAgICBsYXVuY2hVRERJQ2hlY2tib3hfLmFkZExpc3RlbmVyKFNXVC5TZWxlY3Rpb24sIHNlbExpc3RlbmVyKTsKLSAgICBoZWxwU3lzdGVtLnNldEhlbHAobGF1bmNoVURESUNoZWNrYm94XywgSU5GT1BPUF9QV1BCX0NIRUNLQk9YX1dTX0xBVU5DSCk7Ci0gICAgQ29tcG9zaXRlIGMgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotICAgIEdyaWRMYXlvdXQgZ2wgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGdsLm51bUNvbHVtbnMgPSAzOwotICAgIGdsLm1hcmdpbkhlaWdodCA9IDA7Ci0gICAgZ2wubWFyZ2luV2lkdGggPSAwOwotICAgIGMuc2V0TGF5b3V0KGdsKTsKLSAgICBHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwgfCBHcmlkRGF0YS5HUkFCX0hPUklaT05UQUwpOwotICAgIGMuc2V0TGF5b3V0RGF0YShnZCk7Ci0gICAgbmV3IExhYmVsKGMsIFNXVC5XUkFQKTsKLSAgICBwdWJpbGNVRERJUmVnQ29tYm9MYWJlbF8gPSBuZXcgTGFiZWwoYywgU1dULldSQVApOwotICAgIHB1YmlsY1VERElSZWdDb21ib0xhYmVsXy5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9QVUJMSUNfVURESV9SRUdJU1RSSUVTKTsKLSAgICBwdWJsaWNVRERJUmVnQ29tYm9fID0gbmV3IENvbWJvKGMsIFNXVC5EUk9QX0RPV04gfCBTV1QuUkVBRF9PTkxZKTsKLSAgICBwdWJsaWNVRERJUmVnQ29tYm9fLnNldEVuYWJsZWQoZmFsc2UpOwotICAgIGluaXRQdWJsaWNVRERJKCk7Ci0gICAgaW5pdFByaXZhdGVVRERJKCk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgaW5pdFB1YmxpY1VEREkoKQotICB7Ci0gICAgUHVibGljVURESVJlZ2lzdHJ5VHlwZVJlZ2lzdHJ5IHJlZyA9IFB1YmxpY1VERElSZWdpc3RyeVR5cGVSZWdpc3RyeS5nZXRJbnN0YW5jZSgpOwotICAgIFB1YmxpY1VERElSZWdpc3RyeVR5cGVbXSB0eXBlcyA9IHJlZy5nZXRBbGxQdWJsaWNVRERJUmVnaXN0cnlUeXBlcygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgaWYgKHB1Ymxpc2guYm9vbGVhblZhbHVlKCkpCi0gICAgICB7Ci0gICAgICAgIC8vIElnbm9yZSByZWFkLW9ubHkgcmVnaXN0cmllcy4KLSAgICAgICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSB0eXBlc1tpXS5nZXRQdWJsaXNoVVJMKCk7Ci0gICAgICAgIGlmIChwdWJsaXNoVVJMID09IG51bGwgfHwgcHVibGlzaFVSTC5pbmRleE9mKCI6Ly8iKSA9PSAtMSkKLSAgICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAgIHB1YmxpY1VERElSZWdDb21ib18uYWRkKHR5cGVzW2ldLmdldE5hbWUoKSk7Ci0gICAgfQotICAgIGlmICh0eXBlcy5sZW5ndGggPiAwKQotICAgICAgcHVibGljVURESVJlZ0NvbWJvXy5zZXRUZXh0KHB1YmxpY1VERElSZWdDb21ib18uZ2V0SXRlbSgwKSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgaW5pdFByaXZhdGVVRERJKCkKLSAgewotICAgIGlmICghcHVibGlzaC5ib29sZWFuVmFsdWUoKSAmJiAhUHJpdmF0ZVVERElSZWdpc3RyeVR5cGVSZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmdldFByaXZhdGVVRERJUmVnaXN0cnlUeXBlKCkuaXNQcml2YXRlVURESVJlZ2lzdHJ5SW5zdGFsbGVkKCkpCi0gICAgICBsYXVuY2hQcml2YXRlVURESUNoZWNrYm94Xy5zZXRFbmFibGVkKGZhbHNlKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBoYW5kbGVTZWxlY3Rpb25FdmVudChFdmVudCBldmVudCkKLSAgewotICAgIGlmIChsYXVuY2hVRERJQ2hlY2tib3hfID09IGV2ZW50LndpZGdldCkKLSAgICAgIHB1YmxpY1VERElSZWdDb21ib18uc2V0RW5hYmxlZChsYXVuY2hVRERJQ2hlY2tib3hfLmdldFNlbGVjdGlvbigpKTsKLSAgICBzdGF0dXNMaXN0ZW5lci5oYW5kbGVFdmVudChldmVudCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRQdWJsaXNoVG9QdWJsaWNVRERJKGJvb2xlYW4gcHVibGlzaCkKLSAgewotICAgIGxhdW5jaFVERElDaGVja2JveF8uc2V0U2VsZWN0aW9uKHB1Ymxpc2gpOwotICAgIHB1YmxpY1VERElSZWdDb21ib18uc2V0RW5hYmxlZChwdWJsaXNoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFB1Ymxpc2hUb1B1YmxpY1VEREkoQm9vbGVhbiBwdWJsaXNoKQotICB7Ci0gICAgc2V0UHVibGlzaFRvUHVibGljVURESShwdWJsaXNoLmJvb2xlYW5WYWx1ZSgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFB1Ymxpc2hUb1ByaXZhdGVVRERJKGJvb2xlYW4gcHVibGlzaCkKLSAgewotICAgIGxhdW5jaFByaXZhdGVVRERJQ2hlY2tib3hfLnNldFNlbGVjdGlvbihwdWJsaXNoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFB1Ymxpc2hUb1ByaXZhdGVVRERJKEJvb2xlYW4gcHVibGlzaCkKLSAgewotICAgIHNldFB1Ymxpc2hUb1ByaXZhdGVVRERJKHB1Ymxpc2guYm9vbGVhblZhbHVlKCkpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZ2V0UHVibGlzaFRvUHVibGljVURESSgpCi0gIHsKLSAgICByZXR1cm4gbGF1bmNoVURESUNoZWNrYm94Xy5nZXRTZWxlY3Rpb24oKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGdldFB1Ymxpc2hUb1ByaXZhdGVVRERJKCkKLSAgewotICAgIHJldHVybiBsYXVuY2hQcml2YXRlVURESUNoZWNrYm94Xy5nZXRTZWxlY3Rpb24oKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGdldEZvcmNlTGF1bmNoT3V0c2lkZUlERSgpCi0gIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgTGF1bmNoT3B0aW9uW10gZ2V0TGF1bmNoT3B0aW9ucygpCi0gIHsKLSAgICBWZWN0b3IgbGF1bmNoT3B0aW9uVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgIGlmIChsYXVuY2hVRERJQ2hlY2tib3hfLmdldFNlbGVjdGlvbigpKQotICAgIHsKLSAgICAgIFB1YmxpY1VERElSZWdpc3RyeVR5cGVSZWdpc3RyeSByZWcgPSBQdWJsaWNVRERJUmVnaXN0cnlUeXBlUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKTsKLSAgICAgIGludCBVRERJUmVnU2VsZWN0aW9uSW5kZXggPSBwdWJsaWNVRERJUmVnQ29tYm9fLmdldFNlbGVjdGlvbkluZGV4KCk7Ci0gICAgICBpZiAoVURESVJlZ1NlbGVjdGlvbkluZGV4ICE9IC0xKQotICAgICAgewotICAgICAgICBTdHJpbmcgbmFtZSA9IHB1YmxpY1VERElSZWdDb21ib18uZ2V0SXRlbShVRERJUmVnU2VsZWN0aW9uSW5kZXgpOwotICAgICAgICBTdHJpbmcgaWQgPSByZWcuZ2V0UHVibGljVURESVJlZ2lzdHJ5VHlwZUlEQnlOYW1lKG5hbWUpOwotICAgICAgICBQdWJsaWNVRERJUmVnaXN0cnlUeXBlIHR5cGUgPSByZWcuZ2V0UHVibGljVURESVJlZ2lzdHJ5VHlwZUJ5SUQoaWQpOwotICAgICAgICBsYXVuY2hPcHRpb25WZWN0b3IuYWRkKG5ldyBMYXVuY2hPcHRpb24oTGF1bmNoT3B0aW9ucy5JTlFVSVJZX1VSTCwgdHlwZS5nZXRJbnF1aXJ5VVJMKCkpKTsKLSAgICAgICAgbGF1bmNoT3B0aW9uVmVjdG9yLmFkZChuZXcgTGF1bmNoT3B0aW9uKExhdW5jaE9wdGlvbnMuUFVCTElTSF9VUkwsIHR5cGUuZ2V0UHVibGlzaFVSTCgpKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGlmIChsYXVuY2hQcml2YXRlVURESUNoZWNrYm94Xy5nZXRTZWxlY3Rpb24oKSkKLSAgICB7Ci0gICAgICBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZVJlZ2lzdHJ5IHByaXZhdGVSZWcgPSBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZVJlZ2lzdHJ5LmdldEluc3RhbmNlKCk7Ci0gICAgICBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZSBwcml2YXRlVHlwZSA9IHByaXZhdGVSZWcuZ2V0UHJpdmF0ZVVERElSZWdpc3RyeVR5cGUoKTsKLSAgICAgIFN0cmluZ1tdIHByaXZhdGVJbnF1aXJ5VVJMID0gcHJpdmF0ZVR5cGUuZ2V0UHJpdmF0ZVVERElSZWdpc3RyeUlucXVpcnlBUEkoKTsKLSAgICAgIFN0cmluZ1tdIHByaXZhdGVQdWJsaXNoVVJMID0gcHJpdmF0ZVR5cGUuZ2V0UHJpdmF0ZVVERElSZWdpc3RyeVB1Ymxpc2hBUEkoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJpdmF0ZUlucXVpcnlVUkwubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIGxhdW5jaE9wdGlvblZlY3Rvci5hZGQobmV3IExhdW5jaE9wdGlvbihMYXVuY2hPcHRpb25zLklOUVVJUllfVVJMLCBwcml2YXRlSW5xdWlyeVVSTFtpXSkpOwotICAgICAgICBsYXVuY2hPcHRpb25WZWN0b3IuYWRkKG5ldyBMYXVuY2hPcHRpb24oTGF1bmNoT3B0aW9ucy5QVUJMSVNIX1VSTCwgcHJpdmF0ZVB1Ymxpc2hVUkxbaV0pKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIChMYXVuY2hPcHRpb25bXSkgbGF1bmNoT3B0aW9uVmVjdG9yLnRvQXJyYXkobmV3IExhdW5jaE9wdGlvblswXSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9TZXJ2aWNlSGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL1NlcnZpY2VIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlZWFiMmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL1NlcnZpY2VIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDA0ICAgMTM0OTEzIHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdSAgIAotICogMjAwNjA1MTcgICAxNDIwMjcgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA2MDUxOCAgIDE0MjU1NCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0czsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLldvcmtiZW5jaFJlc291cmNlSGVscGVyQmFzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmludGVybmFsLndlYnNlcnZpY2UuV2ViU2VydmljZU5hdmlnYXRvckdyb3VwVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5pbnRlcm5hbC53ZWJzZXJ2aWNlLmhlbHBlci5XZWJTZXJ2aWNlc01hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLkhhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLlBvcnRDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLldlYlNlcnZpY2VEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuV2ViU2VydmljZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLldzZGRSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbW9uLkhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuSGFuZGxlclRhYmxlSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlNlcnZpY2VJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETFJlc291cmNlSW1wbDsKLQotLyoqCi0gKiBTZXJ2aWNlSGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZAotICogCi0gKiBJbml0aWFsaXplIGFuZCBsb2FkIHRoZSBoYW5kbGVycyBkYXRhCi0gKi8KLXB1YmxpYyBjbGFzcyBTZXJ2aWNlSGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0SGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ21kIHsKLQotICBwcml2YXRlIFdzZGRSZXNvdXJjZVtdIHdzZGRSZXNvdXJjZV8gPSBudWxsOwotICBwcml2YXRlIElQcm9qZWN0IHByb2plY3RfOwotICBwcml2YXRlIFN0cmluZyBkZXNjcmlwdGlvbk5hbWVfID0gbnVsbDsKLSAgcHJpdmF0ZSBTdHJpbmcgZXJyb3JTdGF0dXNNc2dfID0gbnVsbDsKLSAgcHJpdmF0ZSBib29sZWFuIGlzTXVsdGlwbGVTZWxlY3Rpb25fOwotICBwcml2YXRlIEhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcltdIGhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcl87Ci0KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsgICAgCi0gICAgSUVudmlyb25tZW50IGVudiA9IGdldEVudmlyb25tZW50KCk7Ci0gICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAgIAotICAgIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGdldEluaXRpYWxTZWxlY3Rpb24oKTsKLSAgICBpZiAoc2VsZWN0aW9uID09IG51bGwpIHsKLSAgICAgIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX1RBU0tfRVhDRVBURUQgKTsKLSAgICAgIGVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQotICAgIGVsc2UgaWYgKHNlbGVjdGlvbi5zaXplKCk+MSl7Ci0gICAgCXN0YXR1cyA9IHByb2Nlc3NNdWx0aXBsZUhhbmRsZXJzKGVudik7Ci0gICAgCXJldHVybiBzdGF0dXM7Ci0gICAgfQotCi0gICAgc3RhdHVzID0gcHJvY2Vzc0hhbmRsZXJzKGVudik7Ci0gICAgcmV0dXJuIHN0YXR1czsKLQotICB9Ci0KLSAgcHVibGljIElTdGF0dXMgcHJvY2Vzc0hhbmRsZXJzKElFbnZpcm9ubWVudCBlbnYpIHsKLSAgICB0cnkgewotICAgICAgV2ViU2VydmljZXNNYW5hZ2VyIHdlYlNlcnZpY2VzTWFuYWdlciA9IG5ldyBXZWJTZXJ2aWNlc01hbmFnZXIoKTsKLSAgICAgIExpc3QgYWxsV1NETFNlcnZpY2VzID0gd2ViU2VydmljZXNNYW5hZ2VyLmdldEFsbFdTRExTZXJ2aWNlcygpOwotICAgICAgaW50IHNlcnZpY2VzU2l6ZSA9IGFsbFdTRExTZXJ2aWNlcy5zaXplKCk7Ci0KLSAgICAgIHdzZGRSZXNvdXJjZV89IG5ldyBXc2RkUmVzb3VyY2Vbc2VydmljZXNTaXplXTsKLSAgICAgIHdzZGRSZXNvdXJjZV9bMF0gPSBnZXRXc2RkUmVzb3VyY2VGcm9tU2VsZWN0aW9uKCk7Ci0gICAgICBpZiAod3NkZFJlc291cmNlX1swXSA9PSBudWxsKSB7Ci0gICAgICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfV1NERF9OT1RfRk9VTkQpOwotICAgICAgfQotICAgICAKLSAgICAgIC8vIGNoZWNrIGZvciBhbm90aGVyIHdzZGRSZXNvdXJjZSBvZiBhbm90aGVyIEoyRUUgbGV2ZWwKLSAgICAgIGludCB4ID0gMDsKLSAgICAgIHdoaWxlICh4PHNlcnZpY2VzU2l6ZSkgewotICAgICAgICBTZXJ2aWNlIHNlcnZpY2UgPSAoU2VydmljZSApYWxsV1NETFNlcnZpY2VzLmdldCh4KTsKLSAgICAgICAgV3NkZFJlc291cmNlIHdzZGRSZXMgPSB3ZWJTZXJ2aWNlc01hbmFnZXIuZ2V0V3NkZFJlc291cmNlKHNlcnZpY2UpOwotICAgICAgICBib29sZWFuIGlzVW5pcXVlV3NkZCA9IHRydWU7Ci0gICAgICAgIGZvciAoaW50IHc9MDt3PHdzZGRSZXNvdXJjZV8ubGVuZ3RoO3crKyl7Ci0gICAgICAgIAlpZiAod3NkZFJlcy5lcXVhbHMod3NkZFJlc291cmNlX1t3XSkpewotICAgICAgICAJCWlzVW5pcXVlV3NkZCA9IGZhbHNlOwotICAgICAgICAJCWJyZWFrOwotICAgICAgICAJfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoaXNVbmlxdWVXc2RkKSB7Ci0gICAgICAgICAgd3NkZFJlc291cmNlX1t4XSA9IHdzZGRSZXM7Ci0gICAgICAgIH0KLSAgICAgICAgeCsrOwotICAgICAgfQotCi0gICAgICAvLyBkZXRlcm1pbmUgdG90YWwgIyBmb3IgZGVzY3JpcHRpb25zCi0gICAgICBoYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJfID0gbmV3IEhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcltnZXROdW1iZXJvZlNlcnZpY2VzKHdzZGRSZXNvdXJjZV8pXTsKLSAgICAgIAotICAgICAgaW50IGRlc2NDb3VudGVyID0gMDsKLSAgICAgIGZvciAoaW50IHk9MDt5PHdzZGRSZXNvdXJjZV8ubGVuZ3RoO3krKykgewotICAgICAgICBpZiAod3NkZFJlc291cmNlX1t5XSAhPW51bGwpIHsKLQkgICAgICAgIFdlYlNlcnZpY2VzIHdlYlNlcnZpY2VzID0gd3NkZFJlc291cmNlX1t5XS5nZXRXZWJTZXJ2aWNlcygpOwotCSAgICAgICAgaWYgKHdlYlNlcnZpY2VzICE9IG51bGwpIHsKLQkgICAgICAgICAgTGlzdCB3c0Rlc2NyaXB0aW9ucyA9IHdlYlNlcnZpY2VzLmdldFdlYlNlcnZpY2VEZXNjcmlwdGlvbnMoKTsKLQkgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3c0Rlc2NyaXB0aW9ucy5zaXplKCkgOyBpKyspIHsKLQkgCi0JICAgICAgICAgICAgV2ViU2VydmljZURlc2NyaXB0aW9uIHdzRGVzY3JpcHRpb24gPSAoV2ViU2VydmljZURlc2NyaXB0aW9uKSB3c0Rlc2NyaXB0aW9ucy5nZXQoaSk7Ci0JICAgICAgICAgICAgVmVjdG9yIGhhbmRsZXJzID0gbmV3IFZlY3RvcigpOyAgCi0JICAgICAgICAgICAgTGlzdCB3c1BvcnRDb21wb25lbnRzID0gd3NEZXNjcmlwdGlvbi5nZXRQb3J0Q29tcG9uZW50cygpOwotCSAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgd3NQb3J0Q29tcG9uZW50cy5zaXplKCk7IGorKykgewotCSAgICAgICAgICAgICAgUG9ydENvbXBvbmVudCB3c1BvcnQgPSAoUG9ydENvbXBvbmVudCkgd3NQb3J0Q29tcG9uZW50cy5nZXQoaik7Ci0JICAgICAgICAgICAgICBTdHJpbmcgcG9ydE5hbWUgPSB3c1BvcnQuZ2V0UG9ydENvbXBvbmVudE5hbWUoKTsKLQkgICAgICAgICAgICAgIExpc3Qgd3NIYW5kbGVycyA9IHdzUG9ydC5nZXRIYW5kbGVycygpOwotCSAgICAgCi0JICAgICAgICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IHdzSGFuZGxlcnMuc2l6ZSgpOyBrKyspIHsKLQkgIAotCSAgICAgICAgICAgICAgICBIYW5kbGVyIHdzSGFuZGxlciA9IChIYW5kbGVyKSB3c0hhbmRsZXJzLmdldChrKTsKLQkgIAotCSAgICAgICAgICAgICAgICBIYW5kbGVyVGFibGVJdGVtIGhhbmRsZXJJdGVtID0gbmV3IEhhbmRsZXJUYWJsZUl0ZW0oKTsKLQkgICAgICAgICAgICAgICAgaGFuZGxlckl0ZW0uc2V0SGFuZGxlcih3c0hhbmRsZXIpOwotCSAgICAgICAgICAgICAgICBoYW5kbGVySXRlbS5zZXRIYW5kbGVyTmFtZSh3c0hhbmRsZXIuZ2V0SGFuZGxlck5hbWUoKSk7Ci0JICAgICAgICAgICAgICAgIGhhbmRsZXJJdGVtLnNldEhhbmRsZXJDbGFzc05hbWUod3NIYW5kbGVyLmdldEhhbmRsZXJDbGFzcygpKTsKLQkgICAgICAgICAgICAgICAgaGFuZGxlckl0ZW0uc2V0UG9ydCh3c1BvcnQpOwotCSAgICAgICAgICAgICAgICBoYW5kbGVySXRlbS5zZXRQb3J0TmFtZShwb3J0TmFtZSk7Ci0JICAgICAgICAgICAgICAgIGhhbmRsZXJJdGVtLnNldFdzRGVzY1JlZih3c0Rlc2NyaXB0aW9uKTsKLQkgICAgICAgICAgICAgICAgCi0JICAgICAgICAgICAgICAgIGhhbmRsZXJzLmFkZChoYW5kbGVySXRlbSk7Ci0JICAgICAgICAgICAgICB9Ci0JICAgICAgICAgICAgfQotCSAgICAgICAgICAgIFN0cmluZyB3c0Rlc2NOYW1lID0gd3NEZXNjcmlwdGlvbi5nZXRXZWJTZXJ2aWNlRGVzY3JpcHRpb25OYW1lKCk7Ci0JICAgICAgICAgICAgaGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyX1tkZXNjQ291bnRlcl0gPSBuZXcgSGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyKCk7Ci0JICAgICAgICAgICAgaGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyX1tkZXNjQ291bnRlcl0uc2V0SGFuZGxlckxpc3QoaGFuZGxlcnMpOwotCSAgICAgICAgICAgIGhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcl9bZGVzY0NvdW50ZXJdLnNldERlc2NyaXB0aW9uT2JqZWN0KHdzRGVzY3JpcHRpb24pOwotCSAgICAgICAgICAgIGhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcl9bZGVzY0NvdW50ZXJdLnNldERlc2NyaXB0aW9uTmFtZSh3c0Rlc2NOYW1lKTsKLQkgICAgICAgICAgICBkZXNjQ291bnRlcisrOwotCSAgICAgICAgICB9Ci0JICAgICAgICB9Ci0JICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAoaGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyXyA9PSBudWxsKXsKLSAgICAgICAgICAvL3JlcG9ydCBubyBXZWIgc2VydmljZSBpcyBhdmFpbGFibGUKLSAgICAgICAgICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9XRUJfU0VSVklDRVNfTk9UX0ZPVU5EKTsgICAgICAgIAotICAgICAgfSAgICAgIAotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfVEFTS19FWENFUFRFRCwgZSk7Ci0gICAgfQotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0KLSAgLyoqCi0gICAqIEZvciBwcm9jZXNzaW5nIG11bHRpcGxlIHNlcnZpY2Ugc2VsZWN0aW9uOyBvbmx5IHByZXBhcmUgdGFibGUgb2Ygc2VydmljZSBkZXNjcmlwdGlvbiBuYW1lcwotICAgKiBkZXNjcmlwdGlvbiBvYmplY3RzIHdpbGwgYmUgcHJvY2Vzc2VkIGxhdGVyIGJ5IHRoZSBvdXRwdXQgY29tbWFuZCAKLSAgICogQHBhcmFtIGVudgotICAgKiBAcmV0dXJuCi0gICAqLwotICBwcml2YXRlIElTdGF0dXMgcHJvY2Vzc011bHRpcGxlSGFuZGxlcnMoSUVudmlyb25tZW50IGVudil7Ci0KLQkgIFNlcnZpY2VbXSBzZXJ2aWNlcyA9IGdldFNlbGVjdGVkU2VydmljZXMoKTsKLSAgICAgIGlmIChlcnJvclN0YXR1c01zZ18gIT0gbnVsbCl7Ci0gICAgCSAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKGVycm9yU3RhdHVzTXNnXyk7Ci0gICAgICB9Ci0gICAgICBpc011bHRpcGxlU2VsZWN0aW9uXyA9IHRydWU7Ci0KLSAgICAgIGhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcl8gPSBuZXcgSGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyW3NlcnZpY2VzLmxlbmd0aF07Ci0gICAgICBWZWN0b3IgaGFuZGxlcnMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxzZXJ2aWNlcy5sZW5ndGg7aSsrKXsKLSAgICAgICAgCi0gICAgICAgIFN0cmluZyBkZXNjTmFtZSA9IHNlcnZpY2VzW2ldLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgICAgIFdlYlNlcnZpY2VEZXNjcmlwdGlvbiB3c0Rlc2NyaXB0aW9uID0gZ2V0U2VydmljZURlc2NyaXB0aW9uKHNlcnZpY2VzW2ldLCBkZXNjTmFtZSk7Ci0gICAgICAgIGhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcl9baV0gPSBuZXcgSGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyKCk7Ci0gICAgICAgIGhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcl9baV0uc2V0SGFuZGxlckxpc3QoaGFuZGxlcnMpOwotICAgICAgICBoYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJfW2ldLnNldERlc2NyaXB0aW9uTmFtZShkZXNjTmFtZSk7Ci0gICAgICAgIGhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcl9baV0uc2V0RGVzY3JpcHRpb25PYmplY3Qod3NEZXNjcmlwdGlvbik7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotICAKLSAgLyoqCi0gICAqIE1hdGNoZXMgdGhlIHNlcnZpY2VOYW1lIHdpdGggdGhlIFNlcnZpY2VEZXNjcmlwdGlvbk5hbWUgdG8gZ2V0IHRoZSBXZWJTZXJ2aWNlRGVzY3JpcHRpb24KLSAgICogQHBhcmFtIHNlcnZpY2UKLSAgICogQHBhcmFtIHNlcnZpY2VOYW1lCi0gICAqIEByZXR1cm4KLSAgICovCi0gIHByaXZhdGUgV2ViU2VydmljZURlc2NyaXB0aW9uIGdldFNlcnZpY2VEZXNjcmlwdGlvbihTZXJ2aWNlIHNlcnZpY2UsIFN0cmluZyBzZXJ2aWNlTmFtZSl7Ci0gICAgV2ViU2VydmljZXNNYW5hZ2VyIHdlYlNlcnZpY2VzTWFuYWdlciA9IG5ldyBXZWJTZXJ2aWNlc01hbmFnZXIoKTsKLSAgICBXc2RkUmVzb3VyY2Ugd3NkZFJlc291cmNlID0gd2ViU2VydmljZXNNYW5hZ2VyLmdldFdzZGRSZXNvdXJjZShzZXJ2aWNlKTsKLSAgICBpZiAod3NkZFJlc291cmNlIT1udWxsKSB7Ci0gICAgICBXZWJTZXJ2aWNlcyBzZXJ2aWNlcyA9IHdzZGRSZXNvdXJjZS5nZXRXZWJTZXJ2aWNlcygpOwotICAgICAgaWYgKHNlcnZpY2VzIT1udWxsKSB7Ci0gICAgICAgIExpc3QgZGVzY3JpcHRpb25zICA9IHNlcnZpY2VzLmdldFdlYlNlcnZpY2VEZXNjcmlwdGlvbnMoKTsKLSAgICAgICAgZm9yIChpbnQgaT0wO2k8ZGVzY3JpcHRpb25zLnNpemUoKTtpKyspewotICAgICAgICAgIFdlYlNlcnZpY2VEZXNjcmlwdGlvbiB3c2QgPSAoV2ViU2VydmljZURlc2NyaXB0aW9uKWRlc2NyaXB0aW9ucy5nZXQoaSk7Ci0gICAgICAgICAgaWYgKHdzZCE9bnVsbCAmJiB3c2QuZ2V0V2ViU2VydmljZURlc2NyaXB0aW9uTmFtZSgpLmVxdWFscyhzZXJ2aWNlTmFtZSkpewotICAgICAgICAgICAgcmV0dXJuIHdzZDsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldElzTXVsdGlwbGVTZWxlY3Rpb24oKXsKLQkgIHJldHVybiB0aGlzLmlzTXVsdGlwbGVTZWxlY3Rpb25fOwotICB9Ci0gIAotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBpc0dlblNrZWxldG9uRW5hYmxlZF8uCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRHZW5Ta2VsZXRvbkVuYWJsZWQoKSB7Ci0gICAgaWYgKGlzTXVsdGlwbGVTZWxlY3Rpb25fKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgc291cmNlT3V0cHV0TG9jYXRpb25fLgotICAgKi8KLSAgcHVibGljIElQYXRoW10gZ2V0U291cmNlT3V0cHV0TG9jYXRpb24oKSB7Ci0gICAgSVBhdGhbXSBsb2NhdGlvbnMgPSBudWxsOwotICAgIElQcm9qZWN0IHByb2plY3QgPSBnZXRQcm9qZWN0KCk7Ci0KLSAgICBpZiAocHJvamVjdCAhPSBudWxsKSB7Ci0gICAgICBsb2NhdGlvbnMgPSBSZXNvdXJjZVV0aWxzLmdldEFsbEphdmFTb3VyY2VMb2NhdGlvbnMocHJvamVjdCk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgcHJvamVjdCA9IHByb2plY3RfOwotICAgICAgaWYgKHByb2plY3QgIT0gbnVsbCkgewotICAgICAgICBsb2NhdGlvbnMgPSBSZXNvdXJjZVV0aWxzLmdldEFsbEphdmFTb3VyY2VMb2NhdGlvbnMocHJvamVjdCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBsb2NhdGlvbnM7Ci0gIH0KLQotICAvKioKLSAgICogR2V0cyB0aGUgV3NkZFJlc291cmNlCi0gICAqIEByZXR1cm4KLSAgICovCi0gIHB1YmxpYyBXc2RkUmVzb3VyY2VbXSBnZXRXc2RkUmVzb3VyY2UoKSB7Ci0gICAgcmV0dXJuIHdzZGRSZXNvdXJjZV87Ci0gIH0KLQotICBwcml2YXRlIFdzZGRSZXNvdXJjZSBnZXRXc2RkUmVzb3VyY2VGcm9tU2VsZWN0aW9uKCkgewotICAgIFdlYlNlcnZpY2VzTWFuYWdlciB3ZWJTZXJ2aWNlc01hbmFnZXIgPSBuZXcgV2ViU2VydmljZXNNYW5hZ2VyKCk7Ci0KLSAgICBJU3RydWN0dXJlZFNlbGVjdGlvbiBpbml0U2VsID0gZ2V0SW5pdGlhbFNlbGVjdGlvbigpOwotICAgIGlmIChpbml0U2VsICE9IG51bGwgJiYgaW5pdFNlbC5zaXplKCkgPT0gMSkgewotICAgICAgT2JqZWN0IG9iaiA9IGluaXRTZWwuZ2V0Rmlyc3RFbGVtZW50KCk7Ci0gICAgICBpZiAob2JqIGluc3RhbmNlb2YgU2VydmljZUltcGwpIHsKLSAgICAgICAgLy8gU2VydmljZSBvYmplY3QKLSAgICAgICAgU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2UpIG9iajsKLSAgICAgICAgZGVzY3JpcHRpb25OYW1lXyA9IHNlcnZpY2UuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLSAgICAgICAgcHJvamVjdF8gPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3Qoc2VydmljZSk7Ci0gICAgICAgIHJldHVybiB3ZWJTZXJ2aWNlc01hbmFnZXIuZ2V0V3NkZFJlc291cmNlKHNlcnZpY2UpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgV1NETFJlc291cmNlSW1wbCkgewotICAgICAgICAvLyBXU0RMIHJlc291cmNlCi0gICAgICAgIFdTRExSZXNvdXJjZUltcGwgcmVzID0gKFdTRExSZXNvdXJjZUltcGwpIG9iajsKLSAgICAgICAgcHJvamVjdF8gPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QocmVzKTsKLSAgICAgICAgTGlzdCB3c2RsUmVzb3VyY2VzID0gd2ViU2VydmljZXNNYW5hZ2VyLmdldFdTRExTZXJ2aWNlcyhyZXMpOwotICAgICAgICByZXR1cm4gd2ViU2VydmljZXNNYW5hZ2VyLmdldFdzZGRSZXNvdXJjZSgoU2VydmljZSkgd3NkbFJlc291cmNlcy5nZXQoMCkpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgV2ViU2VydmljZU5hdmlnYXRvckdyb3VwVHlwZSkgewotICAgICAgICBXZWJTZXJ2aWNlTmF2aWdhdG9yR3JvdXBUeXBlIHdzbmd0ID0gKFdlYlNlcnZpY2VOYXZpZ2F0b3JHcm91cFR5cGUpIG9iajsKLSAgICAgICAgU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2Upd3NuZ3QuZ2V0V3NkbFNlcnZpY2UoKTsKLSAgICAgICAgZGVzY3JpcHRpb25OYW1lXyA9IHNlcnZpY2UuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsgICAgICAgIAotICAgICAgICBwcm9qZWN0XyA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChzZXJ2aWNlKTsKLSAgICAgICAgcmV0dXJuIHdlYlNlcnZpY2VzTWFuYWdlci5nZXRXc2RkUmVzb3VyY2Uoc2VydmljZSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBJRmlsZSl7Ci0gICAgCSAgLy8gd2Vic2VydmljZXMueG1sIGZpbGUKLSAgICAJICBSZXNvdXJjZSByZXMgPSBXb3JrYmVuY2hSZXNvdXJjZUhlbHBlckJhc2UuZ2V0UmVzb3VyY2UoKElGaWxlKW9iaiwgdHJ1ZSk7Ci0gICAgCSAgV3NkZFJlc291cmNlIHdzZGRSZXMgPSAoV3NkZFJlc291cmNlKXJlczsKLSAgICAgICAgICBXZWJTZXJ2aWNlcyB3ZWJTZXJ2aWNlcyA9IHdzZGRSZXMuZ2V0V2ViU2VydmljZXMoKTsKLSAgICAgICAgICBpZiAod2ViU2VydmljZXMgIT0gbnVsbCkgewotICAgICAgICAgICAgTGlzdCB3c0Rlc2NyaXB0aW9ucyA9IHdlYlNlcnZpY2VzLmdldFdlYlNlcnZpY2VEZXNjcmlwdGlvbnMoKTsKLSAgICAgICAgICAgIGlmICh3c0Rlc2NyaXB0aW9ucyE9bnVsbCkgewotICAgICAgICAgICAgICBXZWJTZXJ2aWNlRGVzY3JpcHRpb24gd3NkID0gKFdlYlNlcnZpY2VEZXNjcmlwdGlvbil3c0Rlc2NyaXB0aW9ucy5nZXQoMCk7Ci0gICAgICAgICAgICAgIGRlc2NyaXB0aW9uTmFtZV8gPSB3c2QuZ2V0V2ViU2VydmljZURlc2NyaXB0aW9uTmFtZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAJICBwcm9qZWN0XyA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChyZXMpOwotICAgIAkgIHJldHVybiB3c2RkUmVzOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbnVsbDsKLQotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRvdGFsIG51bWJlciBvZiBTZXJ2aWNlRGVzY3JpcHRpb25zIGdpdmVuIDE0IGFuZCAxMyBzZXJ2aWNlcwotICAgKiBAcGFyYW0gd3NkZFJlcwotICAgKiBAcmV0dXJuCi0gICAqLwotICBwcml2YXRlIGludCBnZXROdW1iZXJvZlNlcnZpY2VzKFdzZGRSZXNvdXJjZVtdIHdzZGRSZXMpewotICAgIGludCBudW09IDA7Ci0gICAgZm9yIChpbnQgaT0wO2k8d3NkZFJlcy5sZW5ndGg7aSsrKXsKLSAgICAJaWYgKHdzZGRSZXNbaV0hPW51bGwpIHsKLSAgICAJCVdlYlNlcnZpY2VzIHdzID0gd3NkZFJlc1tpXS5nZXRXZWJTZXJ2aWNlcygpOwotICAgIAkJaWYgKHdzIT1udWxsKXsKLSAgICAJCQludW0gKz0gd3MuZ2V0V2ViU2VydmljZURlc2NyaXB0aW9ucygpLnNpemUoKTsKLSAgICAJCX0KLSAgICAJfQotICAgIH0KLSAgICByZXR1cm4gbnVtOwotICAgIAotICB9Ci0KLSAgLyoqCi0gICAqIEZvciBtdWx0aXBsZSBzZWxlY3Rpb24gb2YgU2VydmljZXMKLSAgICogQHJldHVybgotICAgKi8KLSAgcHJpdmF0ZSBTZXJ2aWNlW10gZ2V0U2VsZWN0ZWRTZXJ2aWNlcygpewotCSAgV2ViU2VydmljZXNNYW5hZ2VyIHdzTWFuYWdlciA9IG5ldyBXZWJTZXJ2aWNlc01hbmFnZXIoKTsKLQkgIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGluaXRTZWwgPSBnZXRJbml0aWFsU2VsZWN0aW9uKCk7Ci0gIAkgIFNlcnZpY2VbXSBzZXJ2aWNlcyA9IG5ldyBTZXJ2aWNlW2luaXRTZWwuc2l6ZSgpXTsKLSAgCSAgd3NkZFJlc291cmNlXyA9IG5ldyBXc2RkUmVzb3VyY2VbaW5pdFNlbC5zaXplKCldOwotICAJICBJdGVyYXRvciBpdGVyID0gaW5pdFNlbC5pdGVyYXRvcigpOwotICAJICBmb3IgKGludCBpPTA7aTxpbml0U2VsLnNpemUoKTtpKyspIHsKLSAgCQkgIE9iamVjdCBvYmogPSBpdGVyLm5leHQoKTsKLSAgCQkgIGlmIChvYmogaW5zdGFuY2VvZiBTZXJ2aWNlKXsKLSAgCQkJICBzZXJ2aWNlc1tpXSA9IChTZXJ2aWNlKW9iajsKLSAgCQkJICB3c2RkUmVzb3VyY2VfW2ldID0gd3NNYW5hZ2VyLmdldFdzZGRSZXNvdXJjZShzZXJ2aWNlc1tpXSk7Ci0gIAkJICB9Ci0gIAkJICBlbHNlewotICAJCQkgIGVycm9yU3RhdHVzTXNnXyA9IENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfSU5WQUxJRF9NVUxUSVBMRV9TRVJWSUNFX1NFTEVDVDsKLSAgCQkJICByZXR1cm4gbnVsbDsKLSAgCQkgIH0KLSAgCSAgfQotICAJICByZXR1cm4gc2VydmljZXM7Ci0gIH0KLSAgCi0KLSAgCi0gIC8qKgotICAgKiBHZXQgRGVzY3JpcHRpb24gTmFtZSBmb3Igc2luZ2xlIFdlYiBzZXJ2aWNlcyBzZWxlY3RlZAotICAgKiBudWxsIGlmIG11bGl0cGxlIHNlcnZpY2VzIGFyZSBzZWxlY3RlZAotICAgKiBAcmV0dXJuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uTmFtZSgpewotICAgIHJldHVybiBkZXNjcmlwdGlvbk5hbWVfOwotICB9Ci0gIAotICAvKioKLSAgICogQW4gYXJyYXkgb2YgSGFuZGxlckRlc2NyaXB0aW9uSG9sZGVycwotICAgKiBAcmV0dXJuCi0gICAqLwotICBwdWJsaWMgSGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyW10gZ2V0SGFuZGxlckRlc2NyaXB0aW9uSG9sZGVycygpewotICAgIHJldHVybiBoYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJfOwotICB9Ci0gIAotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9TZXJ2aWNlSGFuZGxlcnNXaWRnZXRPdXRwdXRDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvU2VydmljZUhhbmRsZXJzV2lkZ2V0T3V0cHV0Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWY4YzYwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9TZXJ2aWNlSGFuZGxlcnNXaWRnZXRPdXRwdXRDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQwNCAgIDEzNDkxMyBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUgICAKLSAqIDIwMDYwNTE3ICAgMTQyMDI3IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdSAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0czsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5IYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5Qb3J0Q29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5XZWJTZXJ2aWNlRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLldzZGRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5Xc2RkUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLmludGVybmFsLmltcGwuV3NkZEZhY3RvcnlJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tb24uSGFuZGxlckRlc2NyaXB0aW9uSGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tb24uSGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5IYW5kbGVyVGFibGVJdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5pbnRlcm5hbC5lbWYudXRpbGl0aWVzLkV0b29sc0NvcHlVdGlsaXR5OwotCi0vKgotICogUHJvdmlkZSBhIHdheSB0byBleHRlcm5hbGl6ZSB0aGUgZWRpdGVkIGZpZWxkcyBhbmQgY3JlYXRlIG5ldyBoYW5kbGVycwotICogIAotICovCi1wdWJsaWMgY2xhc3MgU2VydmljZUhhbmRsZXJzV2lkZ2V0T3V0cHV0Q29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0KLSAgcHJpdmF0ZSBXc2RkUmVzb3VyY2VbXSB3c2RkUmVzb3VyY2VfOwotICBwcml2YXRlIGJvb2xlYW4gaXNNdWx0aXBsZVNlbGVjdGlvbl87Ci0gIHByaXZhdGUgSGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyW10gaGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyXzsKLQotICAvKioKLSAgICogRm9yIGVhY2ggSGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyLCB0aGUgdXNlciBzZWxlY3RlZCBIYW5kbGVycyBhcmUKLSAgICogc3luYydkIHVwIHdpdGggdGhlIGludGVybmFsIG1vZGVsCi0gICAqIEZvciBtdWx0aXBsZSBzZXJ2aWNlcywgaGFuZGxlcnMgYXJlIGFkZGVkIChub3QgcmVtb3ZlZCkgdG8gZWFjaCBwb3J0LgotICAgKiAKLSAgICovCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0gICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAgIHRyeSB7Ci0gICAgICBpZiAoaXNNdWx0aXBsZVNlbGVjdGlvbl8pewotICAgICAgICBmb3IgKGludCBpPTA7IGk8aGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyXy5sZW5ndGg7aSsrKXsKLSAgICAgICAgICAgCi0gICAgICAgICAgaGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyX1tpXS5hZGRIYW5kbGVyVG9BbGxQb3J0cygpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgLy8gYWRkIGhhbmRsZXIocykgZm9yIHNpbmdsZSBzZXJ2aWNlIHNlbGVjdGVkCi0gICAgICAgIGZvciAoaW50IGg9MDtoPGhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcl8ubGVuZ3RoO2grKyl7Ci0gIAotICAgICAgICAgIEhhc2h0YWJsZSB3c1BvcnRzVGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgICAgICAgSGFzaHRhYmxlIHdzUG9ydFRvSGFuZGxlclRhYmxlID0gbmV3IEhhc2h0YWJsZSgpOwotICAKLSAgICAgICAgICBTdHJpbmcgc2VydmljZURlc2NOYW1lID0gaGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyX1toXS5nZXREZXNjcmlwdGlvbk5hbWUoKTsKLSAgICAgICAgICAvLyBsb2FkIFBvcnROYW1lIC0+IFBvcnRDb21wb25lbnQgdGFibGUKLSAgICAgICAgICBIYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXIgaGRoID0gSGFuZGxlckRlc2NyaXB0aW9uSGVscGVyLmdldEZvckRlc2NyaXB0aW9uTmFtZShoYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJfLCBzZXJ2aWNlRGVzY05hbWUpOwotICAgICAgICAgIGlmIChoZGghPW51bGwpIHsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgV2ViU2VydmljZURlc2NyaXB0aW9uIHdzRGVzY3JpcHRpb25fID0gIGhkaC5nZXREZXNjcmlwdGlvbk9iamVjdCgpOyAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh3c0Rlc2NyaXB0aW9uXyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgIExpc3Qgd3NQb3J0cyA9IHdzRGVzY3JpcHRpb25fLmdldFBvcnRDb21wb25lbnRzKCk7Ci0gICAgICAgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgd3NQb3J0cy5zaXplKCk7IGsrKykgewotICAgICAgICAgICAgICAgIFBvcnRDb21wb25lbnQgcG9ydCA9IChQb3J0Q29tcG9uZW50KSB3c1BvcnRzLmdldChrKTsKLSAgICAgICAgICAgICAgICB3c1BvcnRzVGFibGUucHV0KHBvcnQuZ2V0UG9ydENvbXBvbmVudE5hbWUoKSwgcG9ydCk7Ci0gICAgICAgICAgICAgICAgd3NQb3J0VG9IYW5kbGVyVGFibGUucHV0KHBvcnQuZ2V0UG9ydENvbXBvbmVudE5hbWUoKSwgbmV3IEFycmF5TGlzdCgpKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBMaXN0IGhhbmRsZXJUYWJsZUl0ZW1zID0gaGRoLmdldEhhbmRsZXJMaXN0KCk7ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGhhbmRsZXJUYWJsZUl0ZW1zICE9IG51bGwpIHsKLSAgCi0gICAgICAgICAgICAgIFdzZGRGYWN0b3J5IHdzZGRGYWN0b3J5ID0gbmV3IFdzZGRGYWN0b3J5SW1wbCgpOwotICAKLSAgICAgICAgICAgICAgLy9mb3JtIHBvcnQgY29tcG9uZW50cyB0YWJsZXMgZmlyc3QKLSAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBoYW5kbGVyVGFibGVJdGVtcy5zaXplKCk7IGkrKykgewotICAKLSAgICAgICAgICAgICAgICBIYW5kbGVyVGFibGVJdGVtIGh0aSA9IChIYW5kbGVyVGFibGVJdGVtKSBoYW5kbGVyVGFibGVJdGVtcy5nZXQoaSk7Ci0gICAgICAgICAgICAgICAgUG9ydENvbXBvbmVudCB3c1BvcnQgPSAoUG9ydENvbXBvbmVudCkgaHRpLmdldFBvcnQoKTsKLSAgICAgICAgICAgICAgICBpZiAod3NQb3J0ID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAvL2ZpbmQgaXQKLSAgICAgICAgICAgICAgICAgIGlmICh3c1BvcnRzVGFibGUuZ2V0KGh0aS5nZXRQb3J0TmFtZSgpKSAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICB3c1BvcnQgPSAoUG9ydENvbXBvbmVudCkgd3NQb3J0c1RhYmxlLmdldChodGkuZ2V0UG9ydE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gY3JlYXRlIGl0OyBzaG91bGQgbm90IGdldCBpbnRvIGhlcmUKLSAgICAgICAgICAgICAgICAgICAgd3NQb3J0ID0gd3NkZEZhY3RvcnkuY3JlYXRlUG9ydENvbXBvbmVudCgpOwotICAgICAgICAgICAgICAgICAgICB3c1BvcnQuc2V0UG9ydENvbXBvbmVudE5hbWUoaHRpLmdldFBvcnROYW1lKCkpOwotICAgICAgICAgICAgICAgICAgICB3c1BvcnRzVGFibGUucHV0KHdzUG9ydC5nZXRQb3J0Q29tcG9uZW50TmFtZSgpLCB3c1BvcnQpOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB3c1BvcnRUb0hhbmRsZXJUYWJsZS5wdXQod3NQb3J0LmdldFBvcnRDb21wb25lbnROYW1lKCksIG5ldyBBcnJheUxpc3QoKSk7Ci0gICAgICAgICAgICAgIH0KLSAgCi0gICAgICAgICAgICAgIC8vIGZvcm0gSGFuZGxlciBhbmQgcG9ydHMgdGFibGUKLSAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBoYW5kbGVyVGFibGVJdGVtcy5zaXplKCk7IGkrKykgewotICAgIAotICAgICAgICAgICAgICAgIEhhbmRsZXJUYWJsZUl0ZW0gaHRpID0gKEhhbmRsZXJUYWJsZUl0ZW0pIGhhbmRsZXJUYWJsZUl0ZW1zLmdldChpKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgcG9ydE5hbWUgPSBodGkuZ2V0UG9ydE5hbWUoKTsKLSAgICAKLSAgICAgICAgICAgICAgICBQb3J0Q29tcG9uZW50IHBvcnQgPSAoUG9ydENvbXBvbmVudCkgd3NQb3J0c1RhYmxlLmdldChwb3J0TmFtZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHBvcnQgPT0gbnVsbCkgcmV0dXJuIHN0YXR1czsKLSAgICAKLSAgICAgICAgICAgICAgICBMaXN0IGV4aXN0aW5nSGFuZGxlcnMgPSBwb3J0LmdldEhhbmRsZXJzKCk7Ci0gICAgCi0gICAgICAgICAgICAgICAgT2JqZWN0IGhhbmRsZXIgPSBodGkuZ2V0SGFuZGxlcigpOwotICAgICAgICAgICAgICAgIGlmICghZXhpc3RpbmdIYW5kbGVycy5jb250YWlucyhoYW5kbGVyKSkgewotICAgICAgICAgICAgICAgICAgLy8gY3JlYXRlIGl0Ci0gICAgICAgICAgICAgICAgICBIYW5kbGVyIG5ld0hhbmRsZXIgPSB3c2RkRmFjdG9yeS5jcmVhdGVIYW5kbGVyKCk7Ci0gICAgICAgICAgICAgICAgICBuZXdIYW5kbGVyLnNldEhhbmRsZXJOYW1lKGh0aS5nZXRIYW5kbGVyTmFtZSgpKTsKLSAgICAgICAgICAgICAgICAgIG5ld0hhbmRsZXIuc2V0SGFuZGxlckNsYXNzKGh0aS5nZXRIYW5kbGVyQ2xhc3NOYW1lKCkpOwotICAgICAgICAgICAgICAgICAgKChMaXN0KSB3c1BvcnRUb0hhbmRsZXJUYWJsZS5nZXQocG9ydE5hbWUpKS5hZGQobmV3SGFuZGxlcik7Ci0gICAgCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGhhbmRsZXIgaW5zdGFuY2VvZiBIYW5kbGVyKSB7Ci0gICAgICAgICAgICAgICAgICAvLyBjbG9uZSBpdAotICAgICAgICAgICAgICAgICAgRXRvb2xzQ29weVV0aWxpdHkgY29weVV0aWwgPSBuZXcgRXRvb2xzQ29weVV0aWxpdHkoKTsKLSAgICAgICAgICAgICAgICAgIGNvcHlVdGlsLnNldENvcHlBZGFwdGVycyh0cnVlKTsKLSAgICAgICAgICAgICAgICAgIEhhbmRsZXIgY2xvbmVkSGFuZGxlciA9IChIYW5kbGVyKSBjb3B5VXRpbC5jb3B5KChIYW5kbGVyKSBoYW5kbGVyKTsKLSAgICAgICAgICAgICAgICAgICgoTGlzdCkgd3NQb3J0VG9IYW5kbGVyVGFibGUuZ2V0KHBvcnROYW1lKSkuYWRkKGNsb25lZEhhbmRsZXIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotIAotICAgICAgICAgICAgLy8gcmVtb3ZlIGV4aXN0aW5nIGhhbmRsZXJzIGZyb20gcG9ydHMKLSAgICAgICAgICAgIHJlbW92ZUV4aXN0aW5nSGFuZGxlcnMod3NQb3J0c1RhYmxlLCB3c1BvcnRUb0hhbmRsZXJUYWJsZSk7Ci0gICAgCi0gICAgICAgICAgICAvLyBhZGQgcG9ydHMgdG8gd3NEZXNjcmlwdGlvbgotICAgICAgICAgICAgYWRkUG9ydHNUb0Rlc2NyaXB0aW9ucyh3c1BvcnRzVGFibGUsIHdzRGVzY3JpcHRpb25fKTsKLSAgICAKLSAgICAgICAgICAgIC8vIGFkZCBoYW5kbGVycyB0byBwb3J0cwotICAgICAgICAgICAgYWRkSGFuZGxlcnNUb1BvcnRzKHdzUG9ydHNUYWJsZSwgd3NQb3J0VG9IYW5kbGVyVGFibGUpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgCi0gICAgICAvLyBzYXZlCi0gICAgICBpZiAod3NkZFJlc291cmNlXyAhPSBudWxsKSB7Ci0gICAgICAgIGZvciAoaW50IGk9MDtpPHdzZGRSZXNvdXJjZV8ubGVuZ3RoO2krKykgewotICAgICAgICAJaWYgKHdzZGRSZXNvdXJjZV9baV0hPW51bGwpCi0gICAgICAgIAkJd3NkZFJlc291cmNlX1tpXS5zYXZlKG5ldyBIYXNoTWFwKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gIAotICAgICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHN0YXR1czsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCByZW1vdmVFeGlzdGluZ0hhbmRsZXJzKEhhc2h0YWJsZSBwb3J0c1RhYmxlLCBIYXNodGFibGUgcG9ydHNUb0hhbmRsZXJzVGFibGUpIHsKLSAgICB0cnkgewotICAgICAgRW51bWVyYXRpb24gcG9ydHMgPSBwb3J0c1RvSGFuZGxlcnNUYWJsZS5rZXlzKCk7Ci0gICAgICB3aGlsZSAocG9ydHMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgICAgU3RyaW5nIHBvcnROYW1lID0gKFN0cmluZykgcG9ydHMubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgT2JqZWN0IHBvcnQgPSBwb3J0c1RhYmxlLmdldChwb3J0TmFtZSk7Ci0gICAgICAgIGlmIChwb3J0ICE9IG51bGwgJiYgcG9ydCBpbnN0YW5jZW9mIFBvcnRDb21wb25lbnQpIHsKLSAgICAgICAgICBMaXN0IGhhbmRsZXJzID0gKChQb3J0Q29tcG9uZW50KSBwb3J0KS5nZXRIYW5kbGVycygpOwotICAgICAgICAgIGhhbmRsZXJzLmNsZWFyKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBhZGRQb3J0c1RvRGVzY3JpcHRpb25zKEhhc2h0YWJsZSBwb3J0c1RhYmxlLCBXZWJTZXJ2aWNlRGVzY3JpcHRpb24gd3NEZXNjcmlwdGlvbl8pIHsKLSAgICB0cnkgewotICAgICAgRW51bWVyYXRpb24gcG9ydHMgPSBwb3J0c1RhYmxlLmtleXMoKTsKLSAgICAgIHdoaWxlIChwb3J0cy5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgICBTdHJpbmcgcG9ydE5hbWUgPSAoU3RyaW5nKSBwb3J0cy5uZXh0RWxlbWVudCgpOwotICAgICAgICAvLyBuZXdseSBlZGl0ZWQgcG9ydAotICAgICAgICBPYmplY3QgcG9ydCA9IHBvcnRzVGFibGUuZ2V0KHBvcnROYW1lKTsKLSAgICAgICAgCi0gICAgICAgIC8vIGV4aXN0aW5nIHBvcnQKLSAgICAgICAgTGlzdCBlbWZQb3J0cyA9IHdzRGVzY3JpcHRpb25fLmdldFBvcnRDb21wb25lbnRzKCk7Ci0gICAgICAgIGlmICghZW1mUG9ydHMuY29udGFpbnMocG9ydCkgJiYgcG9ydCAhPSBudWxsICYmIHBvcnQgaW5zdGFuY2VvZiBQb3J0Q29tcG9uZW50KSB7Ci0gICAgICAgICAgZW1mUG9ydHMuYWRkKChQb3J0Q29tcG9uZW50KSBwb3J0KTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgYWRkSGFuZGxlcnNUb1BvcnRzKEhhc2h0YWJsZSBwb3J0c1RhYmxlLCBIYXNodGFibGUgcG9ydHNUb0hhbmRsZXJzVGFibGUpIHsKLSAgICB0cnkgewotICAgICAgRW51bWVyYXRpb24gcG9ydHMgPSBwb3J0c1RvSGFuZGxlcnNUYWJsZS5rZXlzKCk7Ci0gICAgICB3aGlsZSAocG9ydHMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgICAgU3RyaW5nIHBvcnROYW1lID0gKFN0cmluZykgcG9ydHMubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgT2JqZWN0IHBvcnQgPSBwb3J0c1RhYmxlLmdldChwb3J0TmFtZSk7Ci0gICAgICAgIGlmIChwb3J0ICE9IG51bGwgJiYgcG9ydCBpbnN0YW5jZW9mIFBvcnRDb21wb25lbnQpIHsKLSAgICAgICAgICBMaXN0IGhhbmRsZXJzID0gKExpc3QpIHBvcnRzVG9IYW5kbGVyc1RhYmxlLmdldChwb3J0TmFtZSk7Ci0KLSAgICAgICAgICBMaXN0IG1vZGVsSGFuZGxlcnMgPSAoKFBvcnRDb21wb25lbnQpIHBvcnQpLmdldEhhbmRsZXJzKCk7Ci0gICAgICAgICAgbW9kZWxIYW5kbGVycy5hZGRBbGwoaGFuZGxlcnMpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogSGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyCi0gICAqIEBwYXJhbSBoZGhzCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRIYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJzKEhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcltdIGhkaHMpewotICAgIHRoaXMuaGFuZGxlckRlc2NyaXB0aW9uSG9sZGVyXyA9IGhkaHM7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldElzTXVsdGlwbGVTZWxlY3Rpb24oYm9vbGVhbiBpc011bGl0cGxlU2VsZWN0aW9uKSB7Ci0gICAgdGhpcy5pc011bHRpcGxlU2VsZWN0aW9uXyA9IGlzTXVsaXRwbGVTZWxlY3Rpb247Ci0gIH0KLQotCi0gIHB1YmxpYyB2b2lkIHNldFdzZGRSZXNvdXJjZShXc2RkUmVzb3VyY2VbXSB3c2RkUmVzKSB7Ci0gICAgdGhpcy53c2RkUmVzb3VyY2VfID0gd3NkZFJlczsKLSAgfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL1RhYmxlVmlld2VyV2lkZ2V0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvVGFibGVWaWV3ZXJXaWRnZXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWJjMjUyMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvVGFibGVWaWV3ZXJXaWRnZXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA1MDUgICAxMzk5MTggcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5Db2x1bW5XZWlnaHREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXJMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUYWJsZUxhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGFibGVMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UYWJsZVZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbi5Qcm9wZXJ0aWVzUmVzb3VyY2VGaWx0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuZGlhbG9nLkRpYWxvZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLlRhYmxlRWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuRm9jdXNBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuRm9jdXNFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLktleUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuS2V5TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb3VzZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW91c2VMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5UcmF2ZXJzZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuVHJhdmVyc2VMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlJlY3RhbmdsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlQ29sdW1uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5TaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0RGF0YUV2ZW50czsKLQotCi1wdWJsaWMgY2xhc3MgVGFibGVWaWV3ZXJXaWRnZXQgZXh0ZW5kcyBTaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3IKLXsKLSAgcHJpdmF0ZSBpbnQgREVGQVVMVF9UQUJMRV9IRUlHSFRfSElOVCA9IDEwMDsKLSAgcHJpdmF0ZSBpbnQgREVGQVVMVF9DT0xVTU5fV0lEVEggPSA4MDsKLQotICBwdWJsaWMgc3RhdGljIGJ5dGUgTUFQX09ORV9UT19PTkUgPSAzOwotICBwdWJsaWMgc3RhdGljIGJ5dGUgTUFQX01BTllfVE9fT05FID0gMTsKLSAgcHVibGljIHN0YXRpYyBieXRlIE1BUF9NQU5ZX1RPX01BTlkgPSAwOwotCi0gIHByaXZhdGUgU3RyaW5nW10gY29sdW1uc187Ci0gIHByaXZhdGUgVGFibGVWaWV3ZXIgdGFibGVWaWV3ZXJfOwotICBwcml2YXRlIFRhYmxlIHRhYmxlXzsKLSAgcHJpdmF0ZSBUYWJsZUVkaXRvciBlZGl0b3JfOwotICBwcml2YXRlIFRhYmxlRWRpdG9yTGlzdGVuZXIgdGFibGVFZGl0b3JMaXN0ZW5lcl87Ci0gIHByaXZhdGUgVGV4dCB0ZXh0XzsKLSAgcHJpdmF0ZSBCdXR0b24gaW1wb3J0XzsKLSAgcHJpdmF0ZSBCdXR0b24gYWRkXzsKLSAgcHJpdmF0ZSBCdXR0b24gcmVtb3ZlXzsKLSAgCi0gIHByaXZhdGUgQ29tcG9zaXRlIHBhcmVudF87Ci0gIHByaXZhdGUgTGlzdGVuZXIgIHN0YXR1c0xpc3RlbmVyXzsKLQotICBwcml2YXRlIFN0cmluZyBtZXNzYWdlID0gbnVsbDsKLSAgcHJpdmF0ZSBieXRlIHJlc2NyaWN0aW9uID0gTUFQX01BTllfVE9fTUFOWTsKLQotICBwcml2YXRlIExpc3QgdmFsdWVzXzsKLSAgcHJpdmF0ZSBPYmplY3QgZGVmYXVsdFZhbHVlXzsKLQotICBwcml2YXRlIFByb3BlcnRpZXNSZXNvdXJjZUZpbHRlciBmaWx0ZXJfID0gbmV3IFByb3BlcnRpZXNSZXNvdXJjZUZpbHRlcigpOwotCi0gIHB1YmxpYyBUYWJsZVZpZXdlcldpZGdldChTdHJpbmdbXSBjb2x1bW5zLCBMaXN0IGluaXRWYWx1ZXMsIE9iamVjdCBkZWZhdWx0VmFsdWUsIGJ5dGUgcmVzY3JpY3Rpb24pCi0gIHsKLQljb2x1bW5zXyA9IGNvbHVtbnM7Ci0JdmFsdWVzXyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpZiAoaW5pdFZhbHVlcyAhPSBudWxsICYmIGluaXRWYWx1ZXMuc2l6ZSgpID4gMCkKLQkgIHZhbHVlc18uYWRkQWxsKGluaXRWYWx1ZXMpOwotCWRlZmF1bHRWYWx1ZV8gPSAoZGVmYXVsdFZhbHVlICE9IG51bGwpID8gZGVmYXVsdFZhbHVlIDogbmV3IFN0cmluZygiIik7Ci0JdGhpcy5yZXNjcmljdGlvbiA9IHJlc2NyaWN0aW9uOwotICB9Ci0KLSAgcHVibGljIFdpZGdldERhdGFFdmVudHMgYWRkQ29udHJvbHMoIENvbXBvc2l0ZSBwYXJlbnQsIExpc3RlbmVyIHN0YXR1c0xpc3RlbmVyICkKLSAgeyAKLSAgICBwYXJlbnRfICAgICAgICAgPSBwYXJlbnQ7Ci0gICAgc3RhdHVzTGlzdGVuZXJfID0gc3RhdHVzTGlzdGVuZXI7Ci0gICAgCi0JQ29tcG9zaXRlICBjb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotCUdyaWRMYXlvdXQgZ2wgICAgICAgID0gbmV3IEdyaWRMYXlvdXQoKTsKLQkKLQlnbC5tYXJnaW5IZWlnaHQgPSAwOwotCWdsLm1hcmdpbldpZHRoID0gMDsKLQljb21wb3NpdGUuc2V0TGF5b3V0KGdsKTsKLQljb21wb3NpdGUuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMKSk7Ci0KLQl0YWJsZV8gPSBuZXcgVGFibGUoY29tcG9zaXRlLCBTV1QuU0lOR0xFIHwgU1dULkZVTExfU0VMRUNUSU9OIHwgU1dULkJPUkRFUik7Ci0JR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKTsKLQlnZC5oZWlnaHRIaW50ID0gREVGQVVMVF9UQUJMRV9IRUlHSFRfSElOVDsKLQl0YWJsZV8uc2V0TGF5b3V0RGF0YShnZCk7Ci0JdGFibGVfLnNldEhlYWRlclZpc2libGUodHJ1ZSk7Ci0JdGFibGVfLnNldExpbmVzVmlzaWJsZSh0cnVlKTsKLQlUYWJsZUxheW91dCB0YWJsZUxheW91dCA9IG5ldyBUYWJsZUxheW91dCgpOwotCWludCBtYXhXaWR0aCA9IERFRkFVTFRfQ09MVU1OX1dJRFRIOwotCWZvciAoaW50IGkgPSAwOyBpIDwgY29sdW1uc18ubGVuZ3RoOyBpKyspCi0JewotCSAgVGFibGVDb2x1bW4gdGFibGVDb2x1bW4gPSBuZXcgVGFibGVDb2x1bW4odGFibGVfLCBTV1QuTk9ORSk7Ci0JICB0YWJsZUNvbHVtbi5zZXRUZXh0KGNvbHVtbnNfW2ldKTsKLQkgIHRhYmxlQ29sdW1uLnBhY2soKTsKLQkgIGludCB0YWJsZUNvbHVtbldpZHRoID0gTWF0aC5tYXgoREVGQVVMVF9DT0xVTU5fV0lEVEgsIHRhYmxlQ29sdW1uLmdldFdpZHRoKCkpOwotCSAgbWF4V2lkdGggPSBNYXRoLm1heChtYXhXaWR0aCwgdGFibGVDb2x1bW5XaWR0aCk7Ci0JICBDb2x1bW5XZWlnaHREYXRhIGNvbHVtbkRhdGEgPSBuZXcgQ29sdW1uV2VpZ2h0RGF0YSh0YWJsZUNvbHVtbldpZHRoLCB0YWJsZUNvbHVtbldpZHRoLCB0cnVlKTsKLQkgIHRhYmxlTGF5b3V0LmFkZENvbHVtbkRhdGEoY29sdW1uRGF0YSk7Ci0JfQotCXRhYmxlXy5zZXRMYXlvdXQodGFibGVMYXlvdXQpOwotCS8vIGluaXRpYWxpemUgdGhlIHRhYmxlIGVkaXRvcgotCWVkaXRvcl8gPSBuZXcgVGFibGVFZGl0b3IodGFibGVfKTsKLQkvLyBUaGUgZWRpdG9yIG11c3QgaGF2ZSB0aGUgc2FtZSBzaXplIGFzIHRoZSBjZWxsIGFuZCBtdXN0Ci0JLy8gbm90IGJlIGFueSBzbWFsbGVyIHRoYW4gNTAgcGl4ZWxzLgotCWVkaXRvcl8uaG9yaXpvbnRhbEFsaWdubWVudCA9IFNXVC5MRUZUOwotCWVkaXRvcl8uZ3JhYkhvcml6b250YWwgPSB0cnVlOwotCWVkaXRvcl8ubWluaW11bVdpZHRoID0gbWF4V2lkdGg7Ci0JdGFibGVFZGl0b3JMaXN0ZW5lcl8gPSBuZXcgVGFibGVFZGl0b3JMaXN0ZW5lcigpOwotCXRhYmxlXy5hZGRNb3VzZUxpc3RlbmVyKHRhYmxlRWRpdG9yTGlzdGVuZXJfKTsKLQl0YWJsZVZpZXdlcl8gPSBuZXcgVGFibGVWaWV3ZXIodGFibGVfKTsKLQl0YWJsZVZpZXdlcl8uZ2V0Q29udHJvbCgpLmFkZEtleUxpc3RlbmVyKAotCSAgbmV3IEtleUxpc3RlbmVyKCkKLQkgIHsKLQkJcHVibGljIHZvaWQga2V5UHJlc3NlZChLZXlFdmVudCBlKQotCQl7Ci0JCSAgaW50IGFzY2lpRGVsID0gKGludCllLmNoYXJhY3RlcjsKLQkJICAvLyBEZWwKLQkJICBpZiAoYXNjaWlEZWwgPT0gMTI3KSAKLQkJCWhhbmRsZURlbGV0ZUtleVByZXNzZWQoKTsKLSAgICAgICAgICAgICAgICAvLyBFbnRlciBvciBzcGFjZQotICAgICAgICAgICAgICAgIGlmICgoKGludCllLmNoYXJhY3RlcikgPT0gMTMgfHwgKChpbnQpZS5jaGFyYWN0ZXIpID09IDMyKQotICAgICAgICAgICAgICAgICAgdGFibGVFZGl0b3JMaXN0ZW5lcl8uZWRpdFNlbGVjdGlvbigpOwotCQl9Ci0JCXB1YmxpYyB2b2lkIGtleVJlbGVhc2VkKEtleUV2ZW50IGUpCi0JCXsKLQkJfQotCSAgfQotCSk7Ci0JdGFibGVWaWV3ZXJfLnNldENvbnRlbnRQcm92aWRlcihuZXcgTGlzdENvbnRlbnRQcm92aWRlcigpKTsKLQl0YWJsZVZpZXdlcl8uc2V0TGFiZWxQcm92aWRlcihuZXcgTGlzdExhYmVsUHJvdmlkZXIoKSk7Ci0JdGFibGVWaWV3ZXJfLnNldElucHV0KHZhbHVlc18pOwotCXRhYmxlVmlld2VyXy5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoCi0JICBuZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpCi0JICB7Ci0JCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KQotCQl7Ci0JCSAgZW5hYmxlUmVtb3ZlKHRydWUpOwotCQl9Ci0JICB9Ci0JKTsKLQotCUNvbXBvc2l0ZSBidXR0b25Db21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKGNvbXBvc2l0ZSwgU1dULk5PTkUpOwotCWdsID0gbmV3IEdyaWRMYXlvdXQoKTsKLQlnbC5udW1Db2x1bW5zID0gMzsKLQlnbC5tYWtlQ29sdW1uc0VxdWFsV2lkdGggPSB0cnVlOwotCWJ1dHRvbkNvbXBvc2l0ZS5zZXRMYXlvdXQoZ2wpOwotCWJ1dHRvbkNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5HUkFCX0hPUklaT05UQUwgfCBHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0JFR0lOTklORykpOwotCi0JaW1wb3J0XyA9IG5ldyBCdXR0b24oYnV0dG9uQ29tcG9zaXRlLCBTV1QuUFVTSCk7Ci0JaW1wb3J0Xy5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9JTVBPUlQpOwotCWltcG9ydF8uc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMKSk7Ci0JaW1wb3J0Xy5hZGRTZWxlY3Rpb25MaXN0ZW5lcigKLQkgIG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpCi0JICB7Ci0JCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KQotCQl7Ci0JCSAgaGFuZGxlSW1wb3J0QnV0dG9uU2VsZWN0ZWQoZXZlbnQpOwotCQl9Ci0JCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkKLQkJewotCQl9Ci0JICB9Ci0JKTsKLQkKLQlhZGRfID0gbmV3IEJ1dHRvbihidXR0b25Db21wb3NpdGUsIFNXVC5QVVNIKTsKLQlhZGRfLnNldFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX0FERCk7Ci0JYWRkXy5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwpKTsKLQlhZGRfLmFkZFNlbGVjdGlvbkxpc3RlbmVyKAotCSAgbmV3IFNlbGVjdGlvbkxpc3RlbmVyKCkKLQkgIHsKLQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZlbnQpCi0JCXsKLQkJICBoYW5kbGVBZGRCdXR0b25TZWxlY3RlZChldmVudCk7Ci0JCX0KLQkJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KQotCQl7Ci0JCX0KLQkgIH0KLQkpOwotCi0JCi0JcmVtb3ZlXyA9IG5ldyBCdXR0b24oYnV0dG9uQ29tcG9zaXRlLCBTV1QuUFVTSCk7Ci0JcmVtb3ZlXy5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9SRU1PVkUpOwotCXJlbW92ZV8uc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMKSk7Ci0JcmVtb3ZlXy5hZGRTZWxlY3Rpb25MaXN0ZW5lcigKLQkgIG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpCi0JICB7Ci0JCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KQotCQl7Ci0JCSAgaGFuZGxlUmVtb3ZlQnV0dG9uU2VsZWN0ZWQoZXZlbnQpOwotCQl9Ci0JCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkKLQkJewotCQl9Ci0JICB9Ci0JKTsKLQllbmFibGVSZW1vdmUoZmFsc2UpOwotCQotCXJldHVybiB0aGlzOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGVuYWJsZVJlbW92ZShib29sZWFuIGVuYWJsZWQpCi0gIHsKLQlyZW1vdmVfLnNldEVuYWJsZWQoZW5hYmxlZCAmJiAhdGFibGVWaWV3ZXJfLmdldFNlbGVjdGlvbigpLmlzRW1wdHkoKSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgaGFuZGxlSW1wb3J0QnV0dG9uU2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZlbnQpCi0gIHsKLQlJUmVzb3VyY2UgcmVzb3VyY2UgPSBEaWFsb2dVdGlscy5icm93c2VSZXNvdXJjZXMoCi0JICBwYXJlbnRfLmdldFNoZWxsKCksCi0JICBSZXNvdXJjZVV0aWxzLmdldFdvcmtzcGFjZVJvb3QoKSwKLQkgIG51bGwsCi0JICBmaWx0ZXJfCi0JKTsKLQlpZiAocmVzb3VyY2UgIT0gbnVsbCAmJiByZXNvdXJjZSBpbnN0YW5jZW9mIElGaWxlKQotCXsKLQkgIHRyeQotCSAgewotCQlQcm9wZXJ0aWVzIHByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKLQkJcHJvcHMubG9hZCgoKElGaWxlKXJlc291cmNlKS5nZXRDb250ZW50cygpKTsKLQkJU2V0IHNldCA9IHByb3BzLmVudHJ5U2V0KCk7Ci0JCWphdmEudXRpbC5MaXN0IGxpc3QgPSBuZXcgTGlua2VkTGlzdCgpOwotCQlJdGVyYXRvciBpID0gc2V0Lml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChpLmhhc05leHQoKSkKLQkJewotCQkgIE1hcC5FbnRyeSBtZSA9IChNYXAuRW50cnkpaS5uZXh0KCk7Ci0JCSAgU3RyaW5nIGtleSA9IChTdHJpbmcpbWUuZ2V0S2V5KCk7Ci0JCSAgU3RyaW5nIHZhbCA9IChTdHJpbmcpbWUuZ2V0VmFsdWUoKTsKLQkJICBsaXN0LmFkZChuZXcgU3RyaW5nW10ge2tleSx2YWx9KTsKLQkJfQotCQl2YWx1ZXNfLmFkZEFsbChsaXN0KTsKLQkgIH0KLQkgIGNhdGNoIChFeGNlcHRpb24gZSkKLQkgIHsKLQkgICAgLy8gVE9ETyBSZXBvcnQgc29tZSBlcnJvciBoZXJlLgotCSAgfQotCX0KLQlyZWZyZXNoKCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgaGFuZGxlQWRkQnV0dG9uU2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZlbnQpCi0gIHsKLQl2YWx1ZXNfLmFkZChkZWZhdWx0VmFsdWVfKTsKLQlyZWZyZXNoKCk7Ci0Jc2V0U2VsZWN0aW9uQXNPYmplY3QodmFsdWVzXy5nZXQodGFibGVfLmdldEl0ZW1Db3VudCgpLTEpKTsKLQl0YWJsZUVkaXRvckxpc3RlbmVyXy5lZGl0U2VsZWN0aW9uKCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgaGFuZGxlUmVtb3ZlQnV0dG9uU2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZlbnQpCi0gIHsKLQloYW5kbGVEZWxldGVLZXlQcmVzc2VkKCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgaGFuZGxlRGVsZXRlS2V5UHJlc3NlZCgpCi0gIHsKLQlpbnRlcm5hbERpc3Bvc2UoKTsKLQlJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IHRhYmxlVmlld2VyXy5nZXRTZWxlY3Rpb24oKTsKLQlpZiAoc2VsZWN0aW9uICE9IG51bGwgJiYgIXNlbGVjdGlvbi5pc0VtcHR5KCkgJiYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSkKLQl7Ci0JICBpbnQgc2VsZWN0aW9uSW5kZXggPSB0YWJsZV8uZ2V0U2VsZWN0aW9uSW5kZXgoKTsKLQkgIGludCBzZWxlY3Rpb25Db3VudCA9IHRhYmxlXy5nZXRJdGVtQ291bnQoKTsKLQkgIHZhbHVlc18ucmVtb3ZlKHNlbGVjdGlvbkluZGV4KTsKLQkgIGlmIChzZWxlY3Rpb25JbmRleCA8IHNlbGVjdGlvbkNvdW50LTEpCi0JCXNldFNlbGVjdGlvbkFzT2JqZWN0KHZhbHVlc18uZ2V0KHNlbGVjdGlvbkluZGV4KSk7Ci0JICBlbHNlIGlmIChzZWxlY3Rpb25Db3VudCAtMiA+PSAwKQotCQlzZXRTZWxlY3Rpb25Bc09iamVjdCh2YWx1ZXNfLmdldChzZWxlY3Rpb25Db3VudC0yKSk7Ci0JICByZWZyZXNoKCk7Ci0JfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGludGVybmFsUmVmcmVzaCgpCi0gIHsKLQkvLyBzeW5jaHJvbml6ZSB0ZXh0IGZpZWxkLCBwcmV2aW91c2x5IHNlbGVjdGVkIHRhYmxlIGNlbGwgYW5kIG1vZGVsIChpbnB1dE9iamVjdCkKLQlpZiAodGV4dF8gIT0gbnVsbCkKLQl7Ci0JICBUYWJsZUl0ZW0gb2xkVGFibGVJdGVtID0gZWRpdG9yXy5nZXRJdGVtKCk7Ci0JICBpbnQgb2xkQ29sdW1uSW5kZXggPSBlZGl0b3JfLmdldENvbHVtbigpOwotCSAgaWYgKG9sZFRhYmxlSXRlbSAhPSBudWxsICYmIG9sZENvbHVtbkluZGV4ID49IDAgJiYgb2xkQ29sdW1uSW5kZXggPCBjb2x1bW5zXy5sZW5ndGgpCi0JICB7Ci0JCVN0cmluZyBvbGRUZXh0ID0gdGV4dF8uZ2V0VGV4dCgpOwotCQlvbGRUYWJsZUl0ZW0uc2V0VGV4dChvbGRDb2x1bW5JbmRleCwgb2xkVGV4dCk7Ci0JCWludCBvbGRSb3dJbmRleCA9IHRhYmxlXy5pbmRleE9mKG9sZFRhYmxlSXRlbSk7Ci0JCXZhbHVlc18uc2V0KG9sZFJvd0luZGV4LCBuZXcgU3RyaW5nW10ge29sZFRhYmxlSXRlbS5nZXRUZXh0KDApLCBvbGRUYWJsZUl0ZW0uZ2V0VGV4dCgxKX0pOwotCSAgfQotCX0KLQljaGVja01hcHBpbmdDb25zdHJhaW50cygpOwotCXN0YXR1c0xpc3RlbmVyXy5oYW5kbGVFdmVudCggbnVsbCApOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNoZWNrTWFwcGluZ0NvbnN0cmFpbnRzKCkgewotCi0JSGFzaE1hcCBtYXAgPSBuZXcgSGFzaE1hcCgpOwotICAgCi0JZm9yKGludCBjbnQ9MDsgY250PHZhbHVlc18uc2l6ZSgpOyBjbnQrKyl7Ci0JCVN0cmluZ1tdIHZhbHVlID0gKFN0cmluZ1tdKXZhbHVlc18uZ2V0KGNudCk7Ci0JCWlmKG1hcC5jb250YWluc0tleSh2YWx1ZVswXSkgJiYgKChyZXNjcmljdGlvbiAmIDEpIT0wKSl7Ci0JCQltZXNzYWdlID1OTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX01BUFBJTkdfRFVQTElDQVRFX0VOVFJJRVMsIG5ldyBTdHJpbmdbXXtjb2x1bW5zX1swXSxjb2x1bW5zX1sxXX0pOwotCQkJcmV0dXJuOwotCQl9Ci0JCWlmKG1hcC5jb250YWluc1ZhbHVlKHZhbHVlWzFdKSAmJiAoKHJlc2NyaWN0aW9uICYgMikhPTApKXsKLQkJCW1lc3NhZ2UgPU5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfTUFQUElOR19EVVBMSUNBVEVfRU5UUklFUywgbmV3IFN0cmluZ1tde2NvbHVtbnNfWzFdLGNvbHVtbnNfWzBdfSk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJbWFwLnB1dCh2YWx1ZVswXSx2YWx1ZVsxXSk7Ci0KLQl9Ci0JbWVzc2FnZSA9IG51bGw7Ci0KLSAgfQotCi0gIHB1YmxpYyBJU3RhdHVzIGdldFN0YXR1cygpCi0gIHsKLSAgICByZXR1cm4gbWVzc2FnZSA9PSBudWxsID8gU3RhdHVzLk9LX1NUQVRVUyA6IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggbWVzc2FnZSApOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHNldFNlbGVjdGlvbkFzT2JqZWN0KE9iamVjdCBvYmplY3QpCi0gIHsKLQl0YWJsZVZpZXdlcl8uc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKG9iamVjdCksIHRydWUpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVmcmVzaCgpCi0gIHsKLQlpbnRlcm5hbFJlZnJlc2goKTsKLQl0YWJsZVZpZXdlcl8ucmVmcmVzaCgpOwotICB9Ci0KLSAgcHVibGljIFRhYmxlSXRlbVtdIGdldEl0ZW1zKCkKLSAgewotCS8vaW50ZXJuYWxSZWZyZXNoKCk7Ci0JcmV0dXJuIHRhYmxlXy5nZXRJdGVtcygpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RW5hYmxlZChib29sZWFuIGVuYWJsZWQpCi0gIHsKLQlhZGRfLnNldEVuYWJsZWQoZW5hYmxlZCk7Ci0JZW5hYmxlUmVtb3ZlKGVuYWJsZWQpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgZGlzcG9zZSgpCi0gIHsKLQlpbnRlcm5hbERpc3Bvc2UoKTsKLQlpZiAoZWRpdG9yXyAhPSBudWxsKQotCSAgZWRpdG9yXy5kaXNwb3NlKCk7Ci0JaWYgKHRhYmxlXyAhPSBudWxsKQotCSAgdGFibGVfLmRpc3Bvc2UoKTsKLQlpZiAoYWRkXyAhPSBudWxsKQotCSAgYWRkXy5kaXNwb3NlKCk7Ci0JaWYgKHJlbW92ZV8gIT0gbnVsbCkKLQkgIHJlbW92ZV8uZGlzcG9zZSgpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGludGVybmFsRGlzcG9zZSgpCi0gIHsKLQlpZiAodGV4dF8gIT0gbnVsbCkKLQkgIHRleHRfLmRpc3Bvc2UoKTsKLQl0ZXh0XyA9IG51bGw7Ci0gIH0KLQotICBwcm90ZWN0ZWQgY2xhc3MgVGFibGVFZGl0b3JMaXN0ZW5lciBpbXBsZW1lbnRzIE1vdXNlTGlzdGVuZXIKLSAgewotCXByaXZhdGUgaW50IGN1cnJTZWxlY3Rpb25JbmRleF87Ci0gICAgcHJpdmF0ZSBpbnQgZWRpdFJvd187Ci0gICAgcHJpdmF0ZSBpbnQgZWRpdENvbHVtbl87Ci0KLQlwdWJsaWMgVGFibGVFZGl0b3JMaXN0ZW5lcigpCi0JewotCSAgc3VwZXIoKTsKLQkgIGN1cnJTZWxlY3Rpb25JbmRleF8gPSAtMTsKLSAgICAgICAgIGVkaXRSb3dfID0gLTE7Ci0gICAgICAgICBlZGl0Q29sdW1uXyA9IC0xOwotCX0KLQotCXB1YmxpYyB2b2lkIG1vdXNlRG91YmxlQ2xpY2soTW91c2VFdmVudCBlKQotCXsKLQkgIG1vdXNlRG93bihlKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBtb3VzZURvd24oTW91c2VFdmVudCBlKQotCXsKLQkgIC8vIHJlZnJlc2ggdGFibGUKLQkgIGludGVybmFsUmVmcmVzaCgpOwotCSAgLy8gQ2xlYW4gdXAgcHJldmlvdXMgdGV4dCBlZGl0b3IgY29udHJvbAotCSAgaW50ZXJuYWxEaXNwb3NlKCk7Ci0JICAvLyB1cGRhdGUgdGFibGUKLQkgIGlmICh0YWJsZV8uaXNGb2N1c0NvbnRyb2woKSkKLQkgIHsKLQkJaW50IHNlbGVjdGVkUm93SW5kZXggPSBnZXRTZWxlY3RlZFJvdyh0YWJsZV8sIGUueSk7Ci0JCWlmIChjdXJyU2VsZWN0aW9uSW5kZXhfICE9IC0xICYmIHNlbGVjdGVkUm93SW5kZXggIT0gLTEgJiYgY3VyclNlbGVjdGlvbkluZGV4XyA9PSBzZWxlY3RlZFJvd0luZGV4KQotCQl7Ci0JCSAgVGFibGVJdGVtIHRhYmxlSXRlbSA9IHRhYmxlXy5nZXRJdGVtKHNlbGVjdGVkUm93SW5kZXgpOwotCQkgIGludCBzZWxlY3RlZENvbHVtbkluZGV4ID0gZ2V0U2VsZWN0ZWRDb2x1bW4odGFibGVJdGVtLCBlLngsIGUueSk7Ci0JCSAgaWYgKHNlbGVjdGVkQ29sdW1uSW5kZXggIT0gLTEgJiYgKHRleHRfID09IG51bGwgfHwgdGV4dF8uaXNEaXNwb3NlZCgpIHx8IHNlbGVjdGVkQ29sdW1uSW5kZXggIT0gZWRpdG9yXy5nZXRDb2x1bW4oKSkpCi0JCQllZGl0U2VsZWN0aW9uKHNlbGVjdGVkUm93SW5kZXgsIHNlbGVjdGVkQ29sdW1uSW5kZXgpOwotCQl9Ci0JCWN1cnJTZWxlY3Rpb25JbmRleF8gPSBzZWxlY3RlZFJvd0luZGV4OwotCSAgfQotCX0KLQotCXB1YmxpYyB2b2lkIG1vdXNlVXAoTW91c2VFdmVudCBlKQotCXsKLQl9Ci0KLQlwcml2YXRlIGludCBnZXRTZWxlY3RlZFJvdyhUYWJsZSB0YWJsZSwgaW50IHkpCi0JewotCSAgVGFibGVJdGVtW10gdGFibGVJdGVtcyA9IHRhYmxlLmdldEl0ZW1zKCk7Ci0JICBmb3IgKGludCBpID0gMDsgaSA8IHRhYmxlSXRlbXMubGVuZ3RoOyBpKyspCi0JICB7Ci0JCVJlY3RhbmdsZSByZWN0YW5nbGUgPSB0YWJsZUl0ZW1zW2ldLmdldEJvdW5kcygwKTsKLQkJaWYgKHJlY3RhbmdsZSAhPSBudWxsICYmIHkgPj0gcmVjdGFuZ2xlLnkgJiYgeSA8IChyZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQpKQotCQkgIHJldHVybiBpOwotCSAgfQotCSAgcmV0dXJuIC0xOwotCX0KLQotCXByaXZhdGUgaW50IGdldFNlbGVjdGVkQ29sdW1uKFRhYmxlSXRlbSB0YWJsZUl0ZW0sIGludCB4LCBpbnQgeSkKLQl7Ci0JICBmb3IgKGludCBpID0gMDsgaSA8IGNvbHVtbnNfLmxlbmd0aDsgaSsrKQotCSAgewotCQlpZiAodGFibGVJdGVtLmdldEJvdW5kcyhpKS5jb250YWlucyh4LCB5KSkKLQkJICByZXR1cm4gaTsKLQkgIH0KLQkgIHJldHVybiAtMTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgZWRpdFNlbGVjdGlvbihpbnQgcm93LCBpbnQgY29sdW1uKQotCXsKLSAgICAgICAgIGVkaXRSb3dfID0gcm93OwotICAgICAgICAgZWRpdENvbHVtbl8gPSBjb2x1bW47Ci0JICBUYWJsZUl0ZW0gdGFibGVJdGVtID0gdGFibGVfLmdldEl0ZW0ocm93KTsKLQkgIC8vIFNldHVwIGFkYXB0ZXIgZm9yIHRoZSBuZXcgc2VsZWN0aW9uCi0JICB0ZXh0XyA9IG5ldyBUZXh0KHRhYmxlXywgU1dULk5PTkUpOwotCSAgU3RyaW5nIHRleHQgPSB0YWJsZUl0ZW0uZ2V0VGV4dChjb2x1bW4pOwotCSAgdGV4dF8uc2V0VGV4dCgodGV4dCAhPSBudWxsKSA/IHRleHQgOiAiIik7Ci0gICAgICAgICB0ZXh0Xy5hZGRLZXlMaXN0ZW5lcihuZXcgS2V5TGlzdGVuZXIoKQotICAgICAgICAgICB7Ci0gICAgICAgICAgICAgcHVibGljIHZvaWQga2V5UHJlc3NlZChLZXlFdmVudCBlKQotICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIC8vIEVzYwotICAgICAgICAgICAgICAgaWYgKCgoaW50KWUuY2hhcmFjdGVyKSA9PSAyNykKLSAgICAgICAgICAgICAgICAgY2FuY2VsU2VsZWN0aW9uKCk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICAgIHB1YmxpYyB2b2lkIGtleVJlbGVhc2VkKEtleUV2ZW50IGUpCi0gICAgICAgICAgICAgewotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgfQotICAgICAgICAgKTsKLSAgICAgICAgIHRleHRfLmFkZFRyYXZlcnNlTGlzdGVuZXIobmV3IFRyYXZlcnNlTGlzdGVuZXIoKQotICAgICAgICAgICB7Ci0gICAgICAgICAgICAgcHVibGljIHZvaWQga2V5VHJhdmVyc2VkKFRyYXZlcnNlRXZlbnQgZSkKLSAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICBpZiAoZS5kZXRhaWwgPT0gU1dULlRSQVZFUlNFX1RBQl9ORVhUKQotICAgICAgICAgICAgICAgICB0cmF2ZXJzZVRhYk5leHQoKTsKLSAgICAgICAgICAgICAgIGVsc2UgaWYgKGUuZGV0YWlsID09IFNXVC5UUkFWRVJTRV9UQUJfUFJFVklPVVMpCi0gICAgICAgICAgICAgICAgIHRyYXZlcnNlVGFiUHJldmlvdXMoKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIH0KLSAgICAgICAgICk7Ci0gICAgICAgICAKLSAgICB0ZXh0Xy5hZGRGb2N1c0xpc3RlbmVyKCBuZXcgRm9jdXNBZGFwdGVyKCkgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgZm9jdXNMb3N0KEZvY3VzRXZlbnQgZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxSZWZyZXNoKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSApOwotICAgIAotCSAgZWRpdG9yXy5zZXRFZGl0b3IodGV4dF8sIHRhYmxlSXRlbSwgY29sdW1uKTsKLQkgIHRleHRfLnNldEZvY3VzKCk7Ci0JICB0ZXh0Xy5zZWxlY3RBbGwoKTsKLQl9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCB0cmF2ZXJzZVRhYk5leHQoKQotICAgIHsKLSAgICAgIGludGVybmFsUmVmcmVzaCgpOwotICAgICAgaW50ZXJuYWxEaXNwb3NlKCk7Ci0gICAgICBpZiAoIShlZGl0Um93XyA9PSB0YWJsZV8uZ2V0SXRlbXMoKS5sZW5ndGgtMSAmJiBlZGl0Q29sdW1uXyA9PSBjb2x1bW5zXy5sZW5ndGgtMSkpCi0gICAgICB7Ci0gICAgICAgIGlmIChlZGl0Q29sdW1uXyA8IGNvbHVtbnNfLmxlbmd0aC0xKQotICAgICAgICAgIGVkaXRDb2x1bW5fKys7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIGVkaXRDb2x1bW5fID0gMDsKLSAgICAgICAgICBlZGl0Um93XysrOwotICAgICAgICAgIHRhYmxlXy5zZWxlY3QoZWRpdFJvd18pOwotICAgICAgICB9Ci0gICAgICAgIGVkaXRTZWxlY3Rpb24oZWRpdFJvd18sIGVkaXRDb2x1bW5fKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCB0cmF2ZXJzZVRhYlByZXZpb3VzKCkKLSAgICB7Ci0gICAgICBpbnRlcm5hbFJlZnJlc2goKTsKLSAgICAgIGludGVybmFsRGlzcG9zZSgpOwotICAgICAgaWYgKCEoZWRpdFJvd18gPT0gMCAmJiBlZGl0Q29sdW1uXyA9PSAwKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKGVkaXRDb2x1bW5fID4gMCkKLSAgICAgICAgICBlZGl0Q29sdW1uXy0tOwotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBlZGl0Q29sdW1uXyA9IGNvbHVtbnNfLmxlbmd0aC0xOwotICAgICAgICAgIGVkaXRSb3dfLS07Ci0gICAgICAgICAgdGFibGVfLnNlbGVjdChlZGl0Um93Xyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWRpdFNlbGVjdGlvbihlZGl0Um93XywgZWRpdENvbHVtbl8pOwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGNhbmNlbFNlbGVjdGlvbigpCi0gICAgewotICAgICAgaW50ZXJuYWxEaXNwb3NlKCk7Ci0gICAgICBpbnRlcm5hbFJlZnJlc2goKTsKLSAgICB9Ci0KLQlwdWJsaWMgdm9pZCBlZGl0U2VsZWN0aW9uKCkKLQl7Ci0JICBpbnQgc2VsZWN0ZWRSb3dJbmRleCA9IHRhYmxlXy5nZXRTZWxlY3Rpb25JbmRleCgpOwotCSAgaWYgKHNlbGVjdGVkUm93SW5kZXggIT0gLTEgJiYgY29sdW1uc18ubGVuZ3RoID4gMCkKLQkgIHsKLQkJLy8gcmVmcmVzaCB0YWJsZQotCQlpbnRlcm5hbFJlZnJlc2goKTsKLQkJLy8gQ2xlYW4gdXAgYW55IHByZXZpb3VzIGVkaXRvciBjb250cm9sCi0JCWludGVybmFsRGlzcG9zZSgpOwotCQllZGl0U2VsZWN0aW9uKHNlbGVjdGVkUm93SW5kZXgsIDApOwotCSAgfQotCSAgY3VyclNlbGVjdGlvbkluZGV4XyA9IHNlbGVjdGVkUm93SW5kZXg7Ci0JfQotICB9Ci0KLSAgcHJvdGVjdGVkIGNsYXNzIExpc3RDb250ZW50UHJvdmlkZXIgaW1wbGVtZW50cyBJU3RydWN0dXJlZENvbnRlbnRQcm92aWRlcgotICB7Ci0JcHVibGljIHZvaWQgZGlzcG9zZSgpCi0JewotCX0KLQotCXB1YmxpYyB2b2lkIGlucHV0Q2hhbmdlZChWaWV3ZXIgdmlld2VyLCBPYmplY3Qgb2xkSW5wdXQsIE9iamVjdCBuZXdJbnB1dCkKLQl7Ci0JICB0YWJsZVZpZXdlcl8uYWRkKGdldEVsZW1lbnRzKG5ld0lucHV0KSk7Ci0JfQotCi0JcHVibGljIE9iamVjdFtdIGdldEVsZW1lbnRzKE9iamVjdCBpbnB1dEVsZW1lbnQpCi0JewotCSAgaWYgKGlucHV0RWxlbWVudCBpbnN0YW5jZW9mIExpc3QpCi0JICB7Ci0JCUxpc3QgbGlzdCA9IChMaXN0KWlucHV0RWxlbWVudDsKLQkJT2JqZWN0W10gb2JqZWN0cyA9IG5ldyBPYmplY3RbbGlzdC5zaXplKCldOwotCQlmb3IgKGludCBpID0gMDsgaSA8IG9iamVjdHMubGVuZ3RoOyBpKyspCi0JCSAgb2JqZWN0c1tpXSA9IGxpc3QuZ2V0KGkpOwotCQlyZXR1cm4gb2JqZWN0czsKLQkgIH0KLQkgIGVsc2UKLQkJcmV0dXJuIG5ldyBPYmplY3RbMF07Ci0JfQotICB9Ci0KLSAgcHJvdGVjdGVkIGNsYXNzIExpc3RMYWJlbFByb3ZpZGVyIGltcGxlbWVudHMgSVRhYmxlTGFiZWxQcm92aWRlcgotICB7Ci0JcHVibGljIEltYWdlIGdldENvbHVtbkltYWdlKE9iamVjdCBlbGVtZW50LCBpbnQgY29sdW1uSW5kZXgpCi0JewotCSAgcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRDb2x1bW5UZXh0KE9iamVjdCBlbGVtZW50LCBpbnQgY29sdW1uSW5kZXgpCi0JewotCQlyZXR1cm4gKChTdHJpbmdbXSllbGVtZW50KVtjb2x1bW5JbmRleF07CSAgCQotCX0KLQotCXB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKElMYWJlbFByb3ZpZGVyTGlzdGVuZXIgbGlzdGVuZXIpCi0JewotCX0KLQotCXB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKElMYWJlbFByb3ZpZGVyTGlzdGVuZXIgbGlzdGVuZXIpCi0JewotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzTGFiZWxQcm9wZXJ0eShPYmplY3QgZWxlbWVudCwgU3RyaW5nIHByb3BlcnR5KQotCXsKLQkgIHJldHVybiB0cnVlOwotCX0KLQotCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKQotCXsKLQl9Ci0gIH0KLSB9CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvVGltZWRXU0RMU2VsZWN0aW9uQ29uZGl0aW9uQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL1RpbWVkV1NETFNlbGVjdGlvbkNvbmRpdGlvbkNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjU2YjZlMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvVGltZWRXU0RMU2VsZWN0aW9uQ29uZGl0aW9uQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTA0ICAgMTE5Mjk2IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuSVByZWZlcmVuY2VTdG9yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5wbHVnaW4uV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLkNvbmRpdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuY29tbW9uLlRpbWVkT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VzUGFyc2VyOwotCi0KLXB1YmxpYyBjbGFzcyBUaW1lZFdTRExTZWxlY3Rpb25Db25kaXRpb25Db21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gaW1wbGVtZW50cyBDb25kaXRpb24KLXsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgICAgICAgICAgICAgICAgICBUSU1FT1VUX1BSRUZFUkVOQ0UgPSAid3NkbFRpbWVPdXQiOwotICBwcml2YXRlIFdTRExTZWxlY3Rpb25Db25kaXRpb25Db21tYW5kIHNlbGVjdGlvbkNvbW1hbmQ7Ci0gIHByaXZhdGUgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZU91dFZhbHVlOwotICAKLSAgcHVibGljIFRpbWVkV1NETFNlbGVjdGlvbkNvbmRpdGlvbkNvbW1hbmQoKQotICB7Ci0gICAgc2VsZWN0aW9uQ29tbWFuZCA9IG5ldyBXU0RMU2VsZWN0aW9uQ29uZGl0aW9uQ29tbWFuZCgpOwotICAgIAotICAgIElQcmVmZXJlbmNlU3RvcmUgcHJlZlN0b3JlID0gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKTsKLSAgICAKLSAgICB0aW1lT3V0VmFsdWUgPSBwcmVmU3RvcmUuZ2V0RGVmYXVsdFN0cmluZyhUSU1FT1VUX1BSRUZFUkVOQ0UpLmVxdWFscygiIikgPyAxMDAwMCA6IHByZWZTdG9yZS5nZXRJbnQoIFRJTUVPVVRfUFJFRkVSRU5DRSApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZXNQYXJzZXIoV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXIpCi0gIHsKLSAgICBzZWxlY3Rpb25Db21tYW5kLnNldFdlYlNlcnZpY2VzUGFyc2VyKCB3ZWJTZXJ2aWNlc1BhcnNlciApOwotICB9Ci0KLSAgcHVibGljIFdlYlNlcnZpY2VzUGFyc2VyIGdldFdlYlNlcnZpY2VzUGFyc2VyKCkKLSAgewotICAgIHJldHVybiBzZWxlY3Rpb25Db21tYW5kLmdldFdlYlNlcnZpY2VzUGFyc2VyKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0gICAgU3RyaW5nICAgICAgICAgdGltZU91dE1lc3NhZ2UgPSBDb25zdW1wdGlvblVJTWVzc2FnZXMuYmluZCggQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19JTkZPX1dTRExfT1BFUkFUSU9OX1RJTUVEX09VVCwgZ2V0V2ViU2VydmljZVVSSSgpICk7Ci0gICAgCi0gICAgVGltZWRPcGVyYXRpb24gdGltZWRPcGVyYXRpb24gPSBuZXcgVGltZWRPcGVyYXRpb24oIHNlbGVjdGlvbkNvbW1hbmQsIHRpbWVPdXRWYWx1ZSwgdGltZU91dE1lc3NhZ2UgKTsKLSAgICAKLSAgICByZXR1cm4gdGltZWRPcGVyYXRpb24uZXhlY3V0ZShtb25pdG9yLCBhZGFwdGFibGUpOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBldmFsdWF0ZSgpCi0gIHsKLSAgICByZXR1cm4gc2VsZWN0aW9uQ29tbWFuZC5ldmFsdWF0ZSgpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXZWJTZXJ2aWNlVVJJKCkKLSAgewotICAgIHJldHVybiBzZWxlY3Rpb25Db21tYW5kLmdldFdlYlNlcnZpY2VVUkkoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VVUkkoU3RyaW5nIHdlYlNlcnZpY2VVUkkpCi0gIHsKLSAgICBzZWxlY3Rpb25Db21tYW5kLnNldFdlYlNlcnZpY2VVUkkod2ViU2VydmljZVVSSSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3NkbFVSSSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0V2ViU2VydmljZVVSSSgpOwotICB9Ci0vKioKLSAqIEByZXR1cm4gUmV0dXJucyB0aGUgaHR0cEJhc2ljQXV0aFBhc3N3b3JkLgotICovCi1wdWJsaWMgU3RyaW5nIGdldEh0dHBCYXNpY0F1dGhQYXNzd29yZCgpIHsKLQlyZXR1cm4gc2VsZWN0aW9uQ29tbWFuZC5nZXRIdHRwQmFzaWNBdXRoUGFzc3dvcmQoKTsKLX0KLS8qKgotICogQHJldHVybiBSZXR1cm5zIHRoZSBodHRwQmFzaWNBdXRoVXNlcm5hbWUuCi0gKi8KLXB1YmxpYyBTdHJpbmcgZ2V0SHR0cEJhc2ljQXV0aFVzZXJuYW1lKCkgewotCXJldHVybiBzZWxlY3Rpb25Db21tYW5kLmdldEh0dHBCYXNpY0F1dGhVc2VybmFtZSgpOwotfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL1dTRExTZWxlY3Rpb25Db25kaXRpb25Db21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvV1NETFNlbGVjdGlvbkNvbmRpdGlvbkNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmI2MDQ5YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvV1NETFNlbGVjdGlvbkNvbmRpdGlvbkNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzaWwuRGlhbG9nV1dXQXV0aGVudGljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5Db25kaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5kaXNjb3ZlcnkuV2ViU2VydmljZXNQYXJzZXJFeHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldXV0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlRW50aXR5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlc1BhcnNlcjsKLQotCi1wdWJsaWMgY2xhc3MgV1NETFNlbGVjdGlvbkNvbmRpdGlvbkNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiBpbXBsZW1lbnRzIENvbmRpdGlvbgotewotICBwcml2YXRlIFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyOwotICBwcml2YXRlIFN0cmluZyB3ZWJTZXJ2aWNlVVJJOwotICBwcml2YXRlIFN0cmluZyBodHRwQmFzaWNBdXRoVXNlcm5hbWU7Ci0gIHByaXZhdGUgU3RyaW5nIGh0dHBCYXNpY0F1dGhQYXNzd29yZDsKLSAgcHJpdmF0ZSBib29sZWFuIG5lZWRXU0RMU2VsZWN0aW9uVHJlZVdpZGdldDsKLSAgCi0gIHB1YmxpYyBXU0RMU2VsZWN0aW9uQ29uZGl0aW9uQ29tbWFuZCgpCi0gIHsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VzUGFyc2VyKFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyKQotICB7Ci0gICAgdGhpcy53ZWJTZXJ2aWNlc1BhcnNlciA9IHdlYlNlcnZpY2VzUGFyc2VyOwotICB9Ci0KLSAgcHVibGljIFdlYlNlcnZpY2VzUGFyc2VyIGdldFdlYlNlcnZpY2VzUGFyc2VyKCkKLSAgewotICAJaWYgKHdlYlNlcnZpY2VzUGFyc2VyID09IG51bGwpCi0gIAkgIHdlYlNlcnZpY2VzUGFyc2VyID0gbmV3IFdlYlNlcnZpY2VzUGFyc2VyRXh0KCk7Ci0gIAlyZXR1cm4gd2ViU2VydmljZXNQYXJzZXI7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0gIAluZWVkV1NETFNlbGVjdGlvblRyZWVXaWRnZXQgPSBmYWxzZTsKLSAgCVdlYlNlcnZpY2VzUGFyc2VyIHBhcnNlciA9IGdldFdlYlNlcnZpY2VzUGFyc2VyKCk7Ci0gIAlwYXJzZXIuc2V0VVJJKHdlYlNlcnZpY2VVUkkpOwotICAgIHRyeQotICAgIHsKLSAgICAgIHBhcnNlci5wYXJzZShXZWJTZXJ2aWNlc1BhcnNlci5QQVJTRV9XU0lMIHwgV2ViU2VydmljZXNQYXJzZXIuUEFSU0VfRElTQ08gfCBXZWJTZXJ2aWNlc1BhcnNlci5QQVJTRV9MSU5LUyk7Ci0gICAgfQotICAgIGNhdGNoIChXV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbiB3d3dhZSkKLSAgICB7Ci0gICAgICBEaWFsb2dXV1dBdXRoZW50aWNhdGlvbiBkaWFsb2cgPSBuZXcgRGlhbG9nV1dXQXV0aGVudGljYXRpb24oUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRTaGVsbCgpKTsKLSAgICAgIGRpYWxvZy5oYW5kbGVXV1dBdXRoZW50aWNhdGlvbih3d3dhZSk7Ci0gICAgICBTdHJpbmcgdXNlcm5hbWUgPSBkaWFsb2cuZ2V0VXNlcm5hbWUoKTsKLSAgICAgIFN0cmluZyBwYXNzd29yZCA9IGRpYWxvZy5nZXRQYXNzd29yZCgpOwotICAgICAgaHR0cEJhc2ljQXV0aFVzZXJuYW1lID0gdXNlcm5hbWU7Ci0gICAgICBodHRwQmFzaWNBdXRoUGFzc3dvcmQgPSBwYXNzd29yZDsKLSAgICAgIGlmICh1c2VybmFtZSAhPSBudWxsICYmIHBhc3N3b3JkICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHBhcnNlci5zZXRIVFRQQmFzaWNBdXRoVXNlcm5hbWUodXNlcm5hbWUpOwotICAgICAgICBwYXJzZXIuc2V0SFRUUEJhc2ljQXV0aFBhc3N3b3JkKHBhc3N3b3JkKTsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBwYXJzZXIucGFyc2UoV2ViU2VydmljZXNQYXJzZXIuUEFSU0VfV1NJTCB8IFdlYlNlcnZpY2VzUGFyc2VyLlBBUlNFX0RJU0NPIHwgV2ViU2VydmljZXNQYXJzZXIuUEFSU0VfTElOS1MpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9VUklfTk9UX1JFU09MVkFCTEUsIG5ldyBPYmplY3RbXSB7d2ViU2VydmljZVVSSX0pLCB0KTsKLSAgICAgICAgfQotICAgICAgICBmaW5hbGx5Ci0gICAgICAgIHsKLSAgICAgICAgICBwYXJzZXIuc2V0SFRUUEJhc2ljQXV0aFVzZXJuYW1lKG51bGwpOwotICAgICAgICAgIHBhcnNlci5zZXRIVFRQQmFzaWNBdXRoUGFzc3dvcmQobnVsbCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgIHsKLSAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9VUklfTk9UX1JFU09MVkFCTEUsIG5ldyBPYmplY3RbXSB7d2ViU2VydmljZVVSSX0pLCB0KTsKLSAgICB9Ci0gICAgV2ViU2VydmljZUVudGl0eSB3c0VudGl0eSA9IHBhcnNlci5nZXRXZWJTZXJ2aWNlRW50aXR5QnlVUkkod2ViU2VydmljZVVSSSk7Ci0gICAgaWYgKHdzRW50aXR5ICE9IG51bGwpCi0gICAgewotICAgICAgaW50IHR5cGUgPSB3c0VudGl0eS5nZXRUeXBlKCk7Ci0gICAgICBpZiAodHlwZSAhPSBXZWJTZXJ2aWNlRW50aXR5LlRZUEVfV1NETCkKLSAgICAgIAluZWVkV1NETFNlbGVjdGlvblRyZWVXaWRnZXQgPSB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZXZhbHVhdGUoKQotICB7Ci0gICAgcmV0dXJuIG5lZWRXU0RMU2VsZWN0aW9uVHJlZVdpZGdldDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V2ViU2VydmljZVVSSSgpCi0gIHsKLSAgICByZXR1cm4gd2ViU2VydmljZVVSSTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VVUkkoU3RyaW5nIHdlYlNlcnZpY2VVUkkpCi0gIHsKLSAgICB0aGlzLndlYlNlcnZpY2VVUkkgPSB3ZWJTZXJ2aWNlVVJJOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFdzZGxVUkkoKQotICB7Ci0gICAgcmV0dXJuIGdldFdlYlNlcnZpY2VVUkkoKTsKLSAgfQotLyoqCi0gKiBAcmV0dXJuIFJldHVybnMgdGhlIGh0dHBCYXNpY0F1dGhQYXNzd29yZC4KLSAqLwotcHVibGljIFN0cmluZyBnZXRIdHRwQmFzaWNBdXRoUGFzc3dvcmQoKSB7Ci0JcmV0dXJuIGh0dHBCYXNpY0F1dGhQYXNzd29yZDsKLX0KLS8qKgotICogQHJldHVybiBSZXR1cm5zIHRoZSBodHRwQmFzaWNBdXRoVXNlcm5hbWUuCi0gKi8KLXB1YmxpYyBTdHJpbmcgZ2V0SHR0cEJhc2ljQXV0aFVzZXJuYW1lKCkgewotCXJldHVybiBodHRwQmFzaWNBdXRoVXNlcm5hbWU7Ci19Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvV1NETFNlbGVjdGlvbkRpYWxvZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL1dTRExTZWxlY3Rpb25EaWFsb2cuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTI0Mjc2ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvV1NETFNlbGVjdGlvbkRpYWxvZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTI1ICAgMTQyMjgxIGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5BYnN0cmFjdFNlbGVjdGlvbkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5QYWdlSW5mbzsKLQotcHVibGljIGNsYXNzIFdTRExTZWxlY3Rpb25EaWFsb2cgZXh0ZW5kcyBBYnN0cmFjdFNlbGVjdGlvbkRpYWxvZyB7Ci0JCi0JcHJpdmF0ZSBTdHJpbmcgdGl0bGVUZXh0XzsKLQlwcml2YXRlIFN0cmluZyB3c1VyaV87Ci0JcHJpdmF0ZSBTdHJpbmcgY29tcG9uZW50TmFtZV87Ci0JcHJpdmF0ZSBJUHJvamVjdCBwcm9qZWN0XzsKLQkKLQlwdWJsaWMgV1NETFNlbGVjdGlvbkRpYWxvZyhTaGVsbCBwYXJlbnQsIFBhZ2VJbmZvIHBhZ2VJbmZvKSB7Ci0JCXN1cGVyKHBhcmVudCwgcGFnZUluZm8pOwotCQl0aXRsZVRleHRfID0gcGFnZUluZm8uZ2V0UGFnZU5hbWUoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBjYWxsU2V0dGVycygpCi0JewkJCi0JCSgoV1NETFNlbGVjdGlvbldpZGdldFdyYXBwZXIpZ2V0V2lkZ2V0KCkpLnNldENvbXBvbmVudE5hbWUoY29tcG9uZW50TmFtZV8pOwotCQkoKFdTRExTZWxlY3Rpb25XaWRnZXRXcmFwcGVyKWdldFdpZGdldCgpKS5zZXRQcm9qZWN0KHByb2plY3RfKTsKLQkJKChXU0RMU2VsZWN0aW9uV2lkZ2V0V3JhcHBlcilnZXRXaWRnZXQoKSkuc2V0V2ViU2VydmljZVVSSSh3c1VyaV8pOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRDb21wb25lbnROYW1lKFN0cmluZyBjb21wb25lbnROYW1lKQotCXsKLSAgICAgICAgIGNvbXBvbmVudE5hbWVfID0gY29tcG9uZW50TmFtZTsgICAgICAJICAgCi0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0Q29tcG9uZW50TmFtZSgpCi0JewotICAgICAgICAgcmV0dXJuIGNvbXBvbmVudE5hbWVfIDsgICAgICAJICAgCi0JfQotCQotCXB1YmxpYyB2b2lkIHNldFByb2plY3QoSVByb2plY3QgcHJvamVjdCkKLQl7Ci0JCXByb2plY3RfID0gcHJvamVjdDsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0V2ViU2VydmljZVVSSShTdHJpbmcgd3NVcmkpCi0JewotCQl3c1VyaV8gPSB3c1VyaTsKLQl9CQotCSAKLQkgIHByb3RlY3RlZCB2b2lkIHNldFNoZWxsU3R5bGUoaW50IG5ld1NoZWxsU3R5bGUpCi0JICB7Ci0JICAgIHN1cGVyLnNldFNoZWxsU3R5bGUoIG5ld1NoZWxsU3R5bGUgfCBTV1QuUkVTSVpFICk7ICAKLQkgIH0KLQotCSAgcHJvdGVjdGVkIHZvaWQgY29uZmlndXJlU2hlbGwoU2hlbGwgbmV3U2hlbGwpCi0JICB7Ci0JICAgIG5ld1NoZWxsLnNldFRleHQodGl0bGVUZXh0Xyk7ICAgCi0JICAgIHN1cGVyLmNvbmZpZ3VyZVNoZWxsKG5ld1NoZWxsKTsKLQkgIH0KLQotCSAgcHVibGljIFN0cmluZyBnZXREaXNwbGF5YWJsZVNlbGVjdGlvblN0cmluZygpIHsKLQkJICAKLQkJIHJldHVybiAoKFdTRExTZWxlY3Rpb25XaWRnZXRXcmFwcGVyKWdldFdpZGdldCgpKS5nZXRPYmplY3RTZWxlY3Rpb25EaXNwbGF5YWJsZVN0cmluZygpOwotCX0KLQkgIAotCSAgcHVibGljIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGdldE9iamVjdFNlbGVjdGlvbigpIHsKLQkJICByZXR1cm4gKChXU0RMU2VsZWN0aW9uV2lkZ2V0V3JhcHBlcilnZXRXaWRnZXQoKSkuZ2V0T2JqZWN0U2VsZWN0aW9uKCk7Ci0JfQotCSAKLQkgIHB1YmxpYyBTdHJpbmcgZ2V0V2ViU2VydmljZVVSSSgpCi0JICB7Ci0JCSAgcmV0dXJuIHdzVXJpXzsKLQkgIH0KLQkgIAotCSAgcHVibGljIElQcm9qZWN0IGdldFByb2plY3QoKXsKLQkJICByZXR1cm4gcHJvamVjdF87Ci0JICB9Ci0KLSAgICAgIHB1YmxpYyBib29sZWFuIGNsb3NlKCkgewotICAgICAgICBzZXRDb21wb25lbnROYW1lKCgoV1NETFNlbGVjdGlvbldpZGdldFdyYXBwZXIpZ2V0V2lkZ2V0KCkpLmdldENvbXBvbmVudE5hbWUoKSk7Ci0gICAgICAgIHNldFByb2plY3QoKChXU0RMU2VsZWN0aW9uV2lkZ2V0V3JhcHBlcilnZXRXaWRnZXQoKSkuZ2V0UHJvamVjdCgpKTsKLSAgICAgICAgc2V0V2ViU2VydmljZVVSSSgoKFdTRExTZWxlY3Rpb25XaWRnZXRXcmFwcGVyKWdldFdpZGdldCgpKS5nZXRXZWJTZXJ2aWNlVVJJKCkpOwotICAgIAlyZXR1cm4gc3VwZXIuY2xvc2UoKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvV1NETFNlbGVjdGlvbk91dHB1dENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9XU0RMU2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NjEzMTFlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9XU0RMU2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQxMyAgIDEzNTU4MSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0czsKLQotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5kaXNjb3ZlcnkuV2ViU2VydmljZXNQYXJzZXJFeHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VzUGFyc2VyOwotCi0KLXB1YmxpYyBjbGFzcyBXU0RMU2VsZWN0aW9uT3V0cHV0Q29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIHByaXZhdGUgV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXI7Ci0gIHByaXZhdGUgU3RyaW5nIHdzZGxVUkk7Ci0gIHByaXZhdGUgSVByb2plY3QgcHJvamVjdDsKLSAgcHJpdmF0ZSBTdHJpbmcgY29tcG9uZW50TmFtZTsKLSAgCi0gIHByaXZhdGUgYm9vbGVhbiB0ZXN0U2VydmljZTsKLSAgCi0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRUZXN0U2VydmljZSgpIHsKLSAgICByZXR1cm4gdGVzdFNlcnZpY2U7Ci0gIH0KLQotICAKLSAgcHVibGljIHZvaWQgc2V0VGVzdFNlcnZpY2UoYm9vbGVhbiB0ZXN0U2VydmljZSkgewotICAgIHRoaXMudGVzdFNlcnZpY2UgPSB0ZXN0U2VydmljZTsKLSAgfQotCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHByb2plY3QuCi0gICAqLwotICBwdWJsaWMgSVByb2plY3QgZ2V0UHJvamVjdCgpCi0gIHsKLSAgICByZXR1cm4gcHJvamVjdDsKLSAgfQotCi0gIC8qKgotICAgKiBAcGFyYW0gcHJvamVjdAotICAgKiAgICAgICAgICBUaGUgcHJvamVjdCB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRQcm9qZWN0KElQcm9qZWN0IHByb2plY3QpCi0gIHsKLSAgICB0aGlzLnByb2plY3QgPSBwcm9qZWN0OwotICB9Ci0gIAotICAKLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q29tcG9uZW50TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gY29tcG9uZW50TmFtZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldENvbXBvbmVudE5hbWUoU3RyaW5nIGNvbXBvbmVudE5hbWUpCi0gIHsKLSAgICB0aGlzLmNvbXBvbmVudE5hbWUgPSBjb21wb25lbnROYW1lOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXc2RsVVJJKCkKLSAgewotICAgIHJldHVybiB3c2RsVVJJOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0V3NkbFVSSShTdHJpbmcgd3NkbFVSSSkKLSAgewotICAgIHRoaXMud3NkbFVSSSA9IHdzZGxVUkk7Ci0gIH0KLQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSB3ZWJTZXJ2aWNlc1BhcnNlci4KLSAgICovCi0gIHB1YmxpYyBXZWJTZXJ2aWNlc1BhcnNlciBnZXRXZWJTZXJ2aWNlc1BhcnNlcigpCi0gIHsKLSAgICBpZiAod2ViU2VydmljZXNQYXJzZXIgIT0gbnVsbCkKLSAgICAgIHJldHVybiB3ZWJTZXJ2aWNlc1BhcnNlcjsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gbmV3IFdlYlNlcnZpY2VzUGFyc2VyRXh0KCk7Ci0gIH0KLQotICAvKioKLSAgICogQHBhcmFtIHdlYlNlcnZpY2VzUGFyc2VyIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VzUGFyc2VyKFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyKQotICB7Ci0gICAgdGhpcy53ZWJTZXJ2aWNlc1BhcnNlciA9IHdlYlNlcnZpY2VzUGFyc2VyOwotICB9Ci0KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLSAgICBJRW52aXJvbm1lbnQgZW52ID0gZ2V0RW52aXJvbm1lbnQoKTsKLSAgICAgICAKLSAgICBpZiAod3NkbFVSSSAhPSBudWxsICYmIGdldFdlYlNlcnZpY2VzUGFyc2VyKCkuZ2V0V1NETERlZmluaXRpb24od3NkbFVSSSkgIT0gbnVsbCkgewotICAgICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOyAgICAgCi0gICAgICBNYXAgc2VydmljZXMgPSBnZXRXZWJTZXJ2aWNlc1BhcnNlcigpLmdldFdTRExEZWZpbml0aW9uKHdzZGxVUkkpLmdldFNlcnZpY2VzKCk7Ci0gICAgICBpZiAoc2VydmljZXMuaXNFbXB0eSgpKXsKLSAgICAgICAgaWYgKHRlc3RTZXJ2aWNlPT10cnVlKXsKLSAgICAgICAgICAgIHRlc3RTZXJ2aWNlID0gZmFsc2U7Ci0gICAgICAgICAgICBzdGF0dXMgPSBTdGF0dXNVdGlscy53YXJuaW5nU3RhdHVzKCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX1dBUk5JTkdfTk9fU0VSVklDRV9FTEVNRU5UICk7Ci0gICAgICAgICAgICB0cnl7Ci0gICAgICAgICAgICAgIGVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0KHN0YXR1cyk7Ci0gICAgICAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpewotICAgICAgICAgICAgICBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19XQVJOSU5HX05PX1NFUlZJQ0VfRUxFTUVOVCApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9ICAgIAotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfTVNHX1NFTEVDVElPTl9NVVNUX0JFX1dTREwgKTsKLSAgICAgIGlmIChlbnYgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgICAgfQotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9XU0RMU2VsZWN0aW9uVHJlZVdpZGdldC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL1dTRExTZWxlY3Rpb25UcmVlV2lkZ2V0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4Y2MxNjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL1dTRExTZWxlY3Rpb25UcmVlV2lkZ2V0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDE4ICAgMTM2NzEyIGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDcwMTMxICAgMTY4Nzg2IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCB3c2RsIHVybCBvbiB3ZWIgc2VydmljZSB3aXphcmQgcGFnZSAxIGlzIG5vdCByZWZsZWN0ZWQgaW4gYnJvd3NlIGRpYWxvZwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlckxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUcmVlQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVHJlZVZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5wbHVnaW4uV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLlNpbXBsZVdpZGdldERhdGFDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXREYXRhRXZlbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlRW50aXR5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlc1BhcnNlcjsKLQotCi0vKioKLSogVGhpcyB3aXphcmQgcGFnZSBhbGxvd3MgdGhlIHVzZXIgdG8gc2VsZWN0IHRoZSBXU0RMIFVSSSBmb3IgY29uc3VtcHRpb24KLSovCi1wdWJsaWMgY2xhc3MgV1NETFNlbGVjdGlvblRyZWVXaWRnZXQgZXh0ZW5kcyBTaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3IKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgcGx1Z2luSWRfID0gIm9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aSI7Ci0KLSAgLypDT05URVhUX0lEIFBXV1MwMDAxIGZvciB0aGUgV1NETCBTZWxlY3Rpb24gUGFnZSovCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIElORk9QT1BfUFdXU19QQUdFID0gIi5QV1dTMDAwMSI7Ci0KLSAgcHJpdmF0ZSBXZWJTZXJ2aWNlc1BhcnNlciB3ZWJTZXJ2aWNlc1BhcnNlcjsKLSAgcHJpdmF0ZSBTdHJpbmcgd2ViU2VydmljZVVSSTsKLSAgCi0gIHByaXZhdGUgTGlzdGVuZXIgc3RhdHVzTGlzdGVuZXI7Ci0gIHByaXZhdGUgVHJlZVZpZXdlciB0cmVlVmlld2VyXzsKLSAgcHJpdmF0ZSBUcmVlQ29udGVudFByb3ZpZGVyIHRyZWVDb250ZW50UHJvdmlkZXI7Ci0gIHByaXZhdGUgVHJlZSB0cmVlXzsKLSAgcHJpdmF0ZSBpbnQgcGFnZVdpZHRoXzsKLSAgcHJpdmF0ZSBXZWJTZXJ2aWNlRW50aXR5IGVudGl0eV87Ci0KLSAgLyoqCi0gICogRGVmYXVsdCBjb25zdHJ1Y3Rvci4KLSAgKi8KLSAgcHVibGljIFdTRExTZWxlY3Rpb25UcmVlV2lkZ2V0KCkKLSAgewotICB9Ci0KLSAgcHVibGljIFdpZGdldERhdGFFdmVudHMgYWRkQ29udHJvbHMoIENvbXBvc2l0ZSBwYXJlbnQsIExpc3RlbmVyIHN0YXR1c0xpc3RlbmVyICkKLSAgewotICAJdGhpcy5zdGF0dXNMaXN0ZW5lciA9IHN0YXR1c0xpc3RlbmVyOwotICAgIHBhcmVudC5zZXRUb29sVGlwVGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QV1dTX1BBR0UpOwotICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAocGFyZW50LCBwbHVnaW5JZF8gKyBJTkZPUE9QX1BXV1NfUEFHRSk7Ci0KLSAgICBMYWJlbCB3c2RsTGFiZWwgPSBuZXcgTGFiZWwocGFyZW50LCBTV1QuV1JBUCk7Ci0gICAgd3NkbExhYmVsLnNldFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1NFTEVDVF9XU0RMKTsKLSAgICB3c2RsTGFiZWwuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMKSk7Ci0KLSAgICB0cmVlXyA9IG5ldyBUcmVlKHBhcmVudCwgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIgfCBTV1QuSF9TQ1JPTEwgfCBTV1QuVl9TQ1JPTEwpOwotICAgIEdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCk7Ci0gICAgZ2QuaGVpZ2h0SGludCA9IDIwMDsKLSAgICB0cmVlXy5zZXRMYXlvdXREYXRhKGdkKTsKLSAgICBwYWdlV2lkdGhfID0gdHJlZV8uZ2V0U2hlbGwoKS5nZXRTaXplKCkueDsKLSAgICB0cmVlVmlld2VyXyA9IG5ldyBUcmVlVmlld2VyKHRyZWVfKTsKLSAgICB0cmVlQ29udGVudFByb3ZpZGVyID0gbmV3IFRyZWVDb250ZW50UHJvdmlkZXIoKTsKLSAgICB0cmVlVmlld2VyXy5zZXRDb250ZW50UHJvdmlkZXIodHJlZUNvbnRlbnRQcm92aWRlcik7Ci0gICAgdHJlZVZpZXdlcl8uc2V0TGFiZWxQcm92aWRlcihuZXcgVHJlZUxhYmVsUHJvdmlkZXIoKSk7Ci0gICAgdHJlZVZpZXdlcl8uYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKAotICAgICAgbmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKQotICAgICAgewotICAgICAgICBwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkKLSAgICAgICAgewotICAgICAgICAJaGFuZGxlVHJlZVNlbGVjdGlvbkNoYW5nZWRFdmVudChldmVudCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICApOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgaGFuZGxlVHJlZVNlbGVjdGlvbkNoYW5nZWRFdmVudChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpCi0gIHsKLSAgCXN0YXR1c0xpc3RlbmVyLmhhbmRsZUV2ZW50KG5ldyBFdmVudCgpKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgd2ViU2VydmljZXNQYXJzZXIuCi0gICAqLwotICBwdWJsaWMgV2ViU2VydmljZXNQYXJzZXIgZ2V0V2ViU2VydmljZXNQYXJzZXIoKQotICB7Ci0gIAlyZXR1cm4gd2ViU2VydmljZXNQYXJzZXI7Ci0gIH0KLSAgLyoqCi0gICAqIEBwYXJhbSB3ZWJTZXJ2aWNlc1BhcnNlciBUaGUgd2ViU2VydmljZXNQYXJzZXIgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZXNQYXJzZXIoV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXIpCi0gIHsKLSAgCXRoaXMud2ViU2VydmljZXNQYXJzZXIgPSB3ZWJTZXJ2aWNlc1BhcnNlcjsKLSAgCXRyZWVWaWV3ZXJfLnNldElucHV0KHRoaXMud2ViU2VydmljZXNQYXJzZXIpOwotICAJcmVmcmVzaFRyZWVWaWV3ZXIoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VVUkkoU3RyaW5nIHdzVVJJKQotICB7Ci0gIAl3ZWJTZXJ2aWNlVVJJID0gd3NVUkk7Ci0gIAlpZiAoIXRyZWVfLmlzRGlzcG9zZWQoKSkgewotICAJCXRyZWVDb250ZW50UHJvdmlkZXIuc2V0V2ViU2VydmljZVVSSSh3ZWJTZXJ2aWNlVVJJKTsKLSAgCQlyZWZyZXNoVHJlZVZpZXdlcigpOwotICAJfQotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVmcmVzaFRyZWVWaWV3ZXIoKQotICB7Ci0gIAlpZiAod2ViU2VydmljZXNQYXJzZXIgIT0gbnVsbCAmJiB3ZWJTZXJ2aWNlVVJJICE9IG51bGwpCi0gIAl7Ci0gIAkgIHRyZWVWaWV3ZXJfLnJlZnJlc2goKTsKLSAgCSAgQ29udHJvbCBzaGVsbCA9IHRyZWVfLmdldFNoZWxsKCk7Ci0gIAkgIGlmICh0cmVlXy5nZXRTaXplKCkueCA+IHBhZ2VXaWR0aF8gfHwgc2hlbGwuZ2V0U2l6ZSgpLnggPiBwYWdlV2lkdGhfKQotICAJICB7Ci0gIAkgICAgdHJlZV8uc2V0U2l6ZShwYWdlV2lkdGhfLCB0cmVlXy5nZXRTaXplKCkueSk7Ci0gIAkgICAgc2hlbGwuc2V0U2l6ZShwYWdlV2lkdGhfLCBzaGVsbC5nZXRTaXplKCkueSk7Ci0gIAkgICAgc2hlbGwuY29tcHV0ZVNpemUoU1dULkRFRkFVTFQsIFNXVC5ERUZBVUxUKTsKLSAgCSAgICBzaGVsbC5yZWRyYXcoKTsKLSAgCSAgfQotICAJfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRFbmFibGVkKGJvb2xlYW4gZW5hYmxlZCkKLSAgewotICAgIHRyZWVfLnNldEVuYWJsZWQoZW5hYmxlZCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGlzRW5hYmxlZCgpCi0gIHsKLSAgICByZXR1cm4gdHJlZV8uaXNFbmFibGVkKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3NkbFVSSSgpCi0gIHsJICAKLQkgIAlpZiAoZW50aXR5XyAhPSBudWxsKQotCSAgCSAgcmV0dXJuIGVudGl0eV8uZ2V0VVJJKCk7Ci0JICAJZWxzZQotCSAgCSAgcmV0dXJuIHdlYlNlcnZpY2VVUkk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgV2ViU2VydmljZUVudGl0eSBnZXRTZWxlY3Rpb25Bc1dlYlNlcnZpY2VFbnRpdHkoKQotICB7Ci0gIAlpZiAodHJlZVZpZXdlcl8gIT0gbnVsbCkKLSAgCXsKLSAgICAgIElTZWxlY3Rpb24gc2VsID0gdHJlZVZpZXdlcl8uZ2V0U2VsZWN0aW9uKCk7Ci0gICAgICBpZiAoIXNlbC5pc0VtcHR5KCkgJiYgKHNlbCBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSkKLSAgICAgIHsKLSAgICAgICAgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc3NlbCA9IChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWw7Ci0gICAgICAgIE9iamVjdCBvYmplY3QgPSBzc2VsLmdldEZpcnN0RWxlbWVudCgpOwotICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgV2ViU2VydmljZUVudGl0eSkKLSAgICAgICAgICByZXR1cm4gKFdlYlNlcnZpY2VFbnRpdHkpb2JqZWN0OwotICAgICAgfQotICAJfQotICAgIHJldHVybiBudWxsOyAgCQotICB9Ci0gICAgCi0gIHB1YmxpYyBJU3RhdHVzIGdldFN0YXR1cygpCi0gIHsgICAgCi0JZW50aXR5XyA9IGdldFNlbGVjdGlvbkFzV2ViU2VydmljZUVudGl0eSgpOwotICAgIGlmIChlbnRpdHlfID09IG51bGwgfHwgZW50aXR5Xy5nZXRUeXBlKCkgIT0gV2ViU2VydmljZUVudGl0eS5UWVBFX1dTREwpCi0gICAgICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX01TR19TRUxFQ1RJT05fTVVTVF9CRV9XU0RMICk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLQotICBwcml2YXRlIGNsYXNzIFRyZWVDb250ZW50UHJvdmlkZXIgaW1wbGVtZW50cyBJVHJlZUNvbnRlbnRQcm92aWRlcgotICB7Ci0gIAlwcml2YXRlIFN0cmluZyB3ZWJTZXJ2aWNlVVJJOwotCi0gICAgcHVibGljIHZvaWQgZGlzcG9zZSgpCi0gICAgewotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGlucHV0Q2hhbmdlZChWaWV3ZXIgdmlld2VyLCBPYmplY3Qgb2xkSW5wdXQsIE9iamVjdCBuZXdJbnB1dCkKLSAgICB7Ci0gICAgfQotCi0gICAgcHVibGljIE9iamVjdFtdIGdldEVsZW1lbnRzKE9iamVjdCBpbnB1dEVsZW1lbnQpCi0gICAgewotICAgICAgaWYgKGlucHV0RWxlbWVudCBpbnN0YW5jZW9mIFdlYlNlcnZpY2VzUGFyc2VyKQotICAgICAgewotICAgICAgCVdlYlNlcnZpY2VzUGFyc2VyIHBhcnNlciA9IChXZWJTZXJ2aWNlc1BhcnNlcilpbnB1dEVsZW1lbnQ7Ci0gICAgICAgIE9iamVjdCB3c0VudGl0eSA9IHBhcnNlci5nZXRXZWJTZXJ2aWNlRW50aXR5QnlVUkkod2ViU2VydmljZVVSSSk7Ci0gICAgICAgIGlmICh3c0VudGl0eSAhPSBudWxsKQotICAgICAgICAgIHJldHVybiBuZXcgT2JqZWN0W10ge3dzRW50aXR5fTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBuZXcgT2JqZWN0WzBdOwotICAgIH0KLQotICAgIHB1YmxpYyBPYmplY3RbXSBnZXRDaGlsZHJlbihPYmplY3QgcGFyZW50RWxlbWVudCkKLSAgICB7Ci0gICAgICBpZiAocGFyZW50RWxlbWVudCBpbnN0YW5jZW9mIFdlYlNlcnZpY2VFbnRpdHkpCi0gICAgICB7Ci0gICAgICAgIExpc3QgbGlzdCA9ICgoV2ViU2VydmljZUVudGl0eSlwYXJlbnRFbGVtZW50KS5nZXRDaGlsZHJlbigpOwotICAgICAgICBPYmplY3RbXSBvYmplY3RzID0gbmV3IE9iamVjdFtsaXN0LnNpemUoKV07Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb2JqZWN0cy5sZW5ndGg7IGkrKykKLSAgICAgICAgICBvYmplY3RzW2ldID0gbGlzdC5nZXQoaSk7Ci0gICAgICAgIHJldHVybiBvYmplY3RzOwotICAgICAgfQotICAgICAgcmV0dXJuIG5ldyBPYmplY3RbMF07Ci0gICAgfQotCi0gICAgcHVibGljIE9iamVjdCBnZXRQYXJlbnQoT2JqZWN0IGVsZW1lbnQpCi0gICAgewotICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBXZWJTZXJ2aWNlRW50aXR5KQotICAgICAgICByZXR1cm4gKChXZWJTZXJ2aWNlRW50aXR5KWVsZW1lbnQpLmdldFBhcmVudCgpOwotICAgICAgcmV0dXJuIG5ldyBPYmplY3RbMF07Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oT2JqZWN0IGVsZW1lbnQpCi0gICAgewotICAgICAgcmV0dXJuIChnZXRDaGlsZHJlbihlbGVtZW50KS5sZW5ndGggPiAwKTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZVVSSShTdHJpbmcgd3NVUkkpCi0gICAgewotICAgICAgd2ViU2VydmljZVVSSSA9IHdzVVJJOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgY2xhc3MgVHJlZUxhYmVsUHJvdmlkZXIgaW1wbGVtZW50cyBJTGFiZWxQcm92aWRlcgotICB7Ci0gICAgcHVibGljIEltYWdlIGdldEltYWdlKE9iamVjdCBlbGVtZW50KQotICAgIHsKLSAgICAgIHN3aXRjaCAoKChXZWJTZXJ2aWNlRW50aXR5KWVsZW1lbnQpLmdldFR5cGUoKSkKLSAgICAgIHsKLSAgICAgICAgY2FzZSBXZWJTZXJ2aWNlRW50aXR5LlRZUEVfSFRNTDoKLSAgICAgICAgICByZXR1cm4gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yKCJpY29ucy93c2lsL2h0bWwuZ2lmIikuY3JlYXRlSW1hZ2UoKTsKLSAgICAgICAgY2FzZSBXZWJTZXJ2aWNlRW50aXR5LlRZUEVfV1NJTDoKLSAgICAgICAgICByZXR1cm4gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yKCJpY29ucy93c2lsL3dzaWwuZ2lmIikuY3JlYXRlSW1hZ2UoKTsKLSAgICAgICAgY2FzZSBXZWJTZXJ2aWNlRW50aXR5LlRZUEVfV1NETDoKLSAgICAgICAgICByZXR1cm4gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yKCJpY29ucy93c2lsL3dzZGwuZ2lmIikuY3JlYXRlSW1hZ2UoKTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IGVsZW1lbnQpCi0gICAgewotICAgICAgcmV0dXJuICgoV2ViU2VydmljZUVudGl0eSllbGVtZW50KS5nZXRVUkkoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcihJTGFiZWxQcm92aWRlckxpc3RlbmVyIGxpc3RlbmVyKQotICAgIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCByZW1vdmVMaXN0ZW5lcihJTGFiZWxQcm92aWRlckxpc3RlbmVyIGxpc3RlbmVyKQotICAgIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc0xhYmVsUHJvcGVydHkoT2JqZWN0IGVsZW1lbnQsIFN0cmluZyBwcm9wZXJ0eSkKLSAgICB7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkKLSAgICB7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvV1NETFNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvV1NETFNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczYTdhYmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL1dTRExTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDExNiAgIDE1OTYxOCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgUHJvamVjdCBhbmQgRUFSIG5vdCBkZWZhdWx0ZWQgcHJvcGVybHkgd2hlbiB3aXphcmQgbGF1bmNoZWQgZnJvbSBKU1ItMTA5IFdlYiBzZXJ2aWNlcyBicmFuY2ggaW4gSjJFRSBQcm9qZWN0IEV4cGxvcmVyCi0gKiAyMDA3MDMyNyAgIDE3MjMzOSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzAxMjUgICAxNzEwNzEgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIENyZWF0ZSBwdWJsaWMgdXRpbGl0eSBtZXRob2QgZm9yIGNvcHlpbmcgV1NETCBmaWxlcwotICogMjAwNzA0MTAgICAxODE4Mjcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2NsaWVudC5TZXJ2aWNlUmVmOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uSjJFRUFjdGlvbkFkYXB0ZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUucmVzb3VyY2VzLklWaXJ0dWFsQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLnV0aWxzLkFkYXB0ZXJVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudXRpbC5Vbml2ZXJzYWxQYXRoVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5TZXJ2aWNlSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExSZXNvdXJjZUltcGw7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotICBwcml2YXRlIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbl87Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFdlYlNlcnZpY2VVUkkoKQotICB7Ci0gICAgU3RyaW5nIHVyaSA9ICIiOwotICAgIAotICAJaWYgKHNlbGVjdGlvbl8gIT0gbnVsbCAmJiAhc2VsZWN0aW9uXy5pc0VtcHR5KCkpCi0gIAl7Ci0gIAkgIE9iamVjdCBmaXJzdFNlbCA9IHNlbGVjdGlvbl8uZ2V0Rmlyc3RFbGVtZW50KCk7Ci0gIAkgIGlmIChmaXJzdFNlbCBpbnN0YW5jZW9mIElGaWxlKQotICAJICB7Ci0gIAkgICAgSUZpbGUgaWZpbGUgPSAoSUZpbGUpZmlyc3RTZWw7Ci0gIAkgICAgU3RyaW5nIGV4dCA9IGlmaWxlLmdldEZpbGVFeHRlbnNpb24oKTsKLSAgCSAgICBpZiAoZXh0ICE9IG51bGwgJiYgKGV4dC5lcXVhbHMoIndzZGwiKSB8fCBleHQuZXF1YWxzKCJ3c2lsIikgfHwgZXh0LmVxdWFscygiaHRtbCIpKSkKLSAgCSAgICB7Ci0gIAkgICAgICB1cmkgPSBpZmlsZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCk7Ci0gIAkgICAgfQotICAJICB9IGVsc2UgaWYgKGZpcnN0U2VsIGluc3RhbmNlb2YgU2VydmljZUltcGwpCi0gICAgICB7Ci0gICAgICAgIFNlcnZpY2VJbXBsIHNlcnZpY2VJbXBsID0gKFNlcnZpY2VJbXBsKWZpcnN0U2VsOwotICAgICAgICB1cmkgPSBKMkVFQWN0aW9uQWRhcHRlckZhY3RvcnkuZ2V0V1NETFVSSShzZXJ2aWNlSW1wbCk7Ci0gICAgICB9IGVsc2UgaWYgKGZpcnN0U2VsIGluc3RhbmNlb2YgU2VydmljZVJlZikKLSAgICAgIHsKLSAgCSAgICBTZXJ2aWNlUmVmIHNlcnZpY2VSZWYgPSAoU2VydmljZVJlZilmaXJzdFNlbDsKLSAgICAgICAgdXJpID0gSjJFRUFjdGlvbkFkYXB0ZXJGYWN0b3J5LmdldFdTRExVUkkoc2VydmljZVJlZik7Ci0gICAgICB9IGVsc2UgaWYgKGZpcnN0U2VsIGluc3RhbmNlb2YgV1NETFJlc291cmNlSW1wbCkKLSAgCSAgewotICAJICAgIFdTRExSZXNvdXJjZUltcGwgd3NkbFJJID0gKFdTRExSZXNvdXJjZUltcGwpZmlyc3RTZWw7Ci0gIAkgICAgdXJpID0gSjJFRUFjdGlvbkFkYXB0ZXJGYWN0b3J5LmdldFdTRExVUkkod3NkbFJJKTsKLSAgCSAgfSBlbHNlIGlmIChmaXJzdFNlbCBpbnN0YW5jZW9mIFN0cmluZykKLSAgCSAgewotICAJICAgIHVyaSA9IChTdHJpbmcpZmlyc3RTZWw7Ci0gIAkgIH0gZWxzZSB7Ci0gIAkJU3RyaW5nIGFkYXB0ZWRVcmkgPSBBZGFwdGVyVXRpbHMuZ2V0QWRhcHRlZFdTREwoZmlyc3RTZWwpOwotICAJCWlmIChhZGFwdGVkVXJpICE9IG51bGwpIHsKLSAgCQkJdXJpID0gYWRhcHRlZFVyaTsKLSAgCQl9Ci0gIAkgIH0KLSAgCSAgCi0gIAkgIHVyaSA9IFVuaXZlcnNhbFBhdGhUcmFuc2Zvcm1lci50b1BhdGgodXJpKTsKLSAgCX0KLSAgICByZXR1cm4gdXJpOwotICB9Ci0gCi0gIHB1YmxpYyB2b2lkIHNldEluaXRpYWxTZWxlY3Rpb24oIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbiApCi0gIHsKLSAgICBzZWxlY3Rpb25fID0gc2VsZWN0aW9uOyAgIAotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRHZW5XU0lMKCkKLSAgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRXc2lsVVJJKCkKLSAgewotICAJU3RyaW5nIHdzVVJJID0gZ2V0V2ViU2VydmljZVVSSSgpOwotICAJaWYgKHdzVVJJICE9IG51bGwgJiYgd3NVUkkubGVuZ3RoKCkgPiAwICYmIHdzVVJJLmVuZHNXaXRoKCJ3c2RsIikpCi0gIAl7Ci0gICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKHdzVVJJLnN1YnN0cmluZygwLCB3c1VSSS5sZW5ndGgoKS00KSk7Ci0gICAgICBzYi5hcHBlbmQoIndzaWwiKTsKLSAgICAgIHJldHVybiBzYi50b1N0cmluZygpOwotICAJfQotICAgIHJldHVybiAiIjsKLSAgfQotICAKLSAgcHVibGljIElQcm9qZWN0IGdldFByb2plY3QoKQotICB7Ci0gIAlJUHJvamVjdCBwID0gZ2V0UHJvamVjdEZyb21Jbml0aWFsU2VsZWN0aW9uKHNlbGVjdGlvbl8pOwotICAJcmV0dXJuIHA7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q29tcG9uZW50TmFtZSgpCi0gIHsKLSAgICBTdHJpbmcgY25hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbUluaXRpYWxTZWxlY3Rpb24oc2VsZWN0aW9uXyk7Ci0gICAgcmV0dXJuIGNuYW1lOwotICB9Ci0gIAotICBwcml2YXRlIGJvb2xlYW4gaGFzUHJvdG9jb2woU3RyaW5nIHVybCkgewkgIAotICAgIHJldHVybiB1cmwuaW5kZXhPZigiOiIpICE9IC0xOwkgIAotICB9Ci0gIAotICBwcml2YXRlIElQcm9qZWN0IGdldFByb2plY3RGcm9tSW5pdGlhbFNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pCi0gIHsKLSAgICBpZiAoc2VsZWN0aW9uICE9IG51bGwgJiYgc2VsZWN0aW9uLnNpemUoKSA9PSAxKQotICAgIHsKLSAgICAgIE9iamVjdCBvYmogPSBzZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCk7Ci0gICAgICBpZiAob2JqICE9IG51bGwpIAotICAgICAgewotICAgICAgICB0cnkKLSAgICAgICAgeyAKLSAgICAgICAgICBJUmVzb3VyY2UgcmVzb3VyY2UgPSBSZXNvdXJjZVV0aWxzLmdldFJlc291cmNlRnJvbVNlbGVjdGlvbihvYmopOwotICAgICAgICAgIGlmIChyZXNvdXJjZT09bnVsbCkgewotICAgICAgICAgICAgU3RyaW5nIHVyaSA9IGdldFdlYlNlcnZpY2VVUkkoKTsKLSAgICAgICAgICAgIGlmIChoYXNQcm90b2NvbCh1cmkpKSByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgIHJldHVybiBSZXNvdXJjZVV0aWxzLmdldFByb2plY3RPZihuZXcgUGF0aCh1cmkpKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIFJlc291cmNlVXRpbHMuZ2V0UHJvamVjdE9mKHJlc291cmNlLmdldEZ1bGxQYXRoKCkpOwotICAgICAgICB9IGNhdGNoKENvcmVFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9ICAgICAgICAKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGdldENvbXBvbmVudE5hbWVGcm9tSW5pdGlhbFNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pCi0gIHsKLSAgICBpZiAoc2VsZWN0aW9uICE9IG51bGwgJiYgc2VsZWN0aW9uLnNpemUoKSA9PSAxKQotICAgIHsKLSAgICAgIE9iamVjdCBvYmogPSBzZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCk7Ci0gICAgICBpZiAob2JqICE9IG51bGwpIAotICAgICAgewotICAgICAgICB0cnkKLSAgICAgICAgeyAKLSAgICAgICAgICBJUmVzb3VyY2UgcmVzb3VyY2UgPSBSZXNvdXJjZVV0aWxzLmdldFJlc291cmNlRnJvbVNlbGVjdGlvbihvYmopOwotICAgICAgICAgIElWaXJ0dWFsQ29tcG9uZW50IGNvbXA7Ci0gICAgICAgICAgaWYgKHJlc291cmNlPT1udWxsKSB7Ci0gICAgICAgICAgICBTdHJpbmcgdXJpID0gZ2V0V2ViU2VydmljZVVSSSgpOwotICAgICAgICAgICAgaWYgKGhhc1Byb3RvY29sKHVyaSkpIHJldHVybiBudWxsOyAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjb21wID0gUmVzb3VyY2VVdGlscy5nZXRDb21wb25lbnRPZihuZXcgUGF0aCh1cmkpKSA7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UgCi0gICAgICAgICAgICBjb21wID0gUmVzb3VyY2VVdGlscy5nZXRDb21wb25lbnRPZihyZXNvdXJjZSk7Ci0gICAgICAgICAgaWYgKGNvbXAhPW51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGNvbXAuZ2V0TmFtZSgpOwotICAgICAgICAgIH0KLSAgICAgICAgfSBjYXRjaChDb3JlRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfSAgICAgICAgCi0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgaW5mbykgdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbgotICB7Ci0JICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfSAgICAKLSAgICAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvV1NETFNlbGVjdGlvbldpZGdldFdyYXBwZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9XU0RMU2VsZWN0aW9uV2lkZ2V0V3JhcHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmE5YTZhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9XU0RMU2VsZWN0aW9uV2lkZ2V0V3JhcHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyMCAgIDEzNTkxMiBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuV1NETFNlbGVjdGlvbldpZGdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuV1NETFNlbGVjdGlvbldyYXBwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLlNpbXBsZVdpZGdldERhdGFDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXREYXRhRXZlbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlc1BhcnNlcjsKLQotcHVibGljIGNsYXNzIFdTRExTZWxlY3Rpb25XaWRnZXRXcmFwcGVyIGV4dGVuZHMgU2ltcGxlV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yCi17Ci0gIHByaXZhdGUgV1NETFNlbGVjdGlvbldpZGdldCB3c2RsU2VsZWN0aW9uV2lkZ2V0OwotICBwcml2YXRlIElQcm9qZWN0IHByb2plY3Q7Ci0gIHByaXZhdGUgU3RyaW5nIGNvbXBvbmVudE5hbWU7Ci0gIAotICBwdWJsaWMgV1NETFNlbGVjdGlvbldpZGdldFdyYXBwZXIoKQotICB7Ci0JICB3c2RsU2VsZWN0aW9uV2lkZ2V0ID0gbmV3IFdTRExTZWxlY3Rpb25XaWRnZXQoKTsKLSAgfQotICAKLSAgcHVibGljIFdpZGdldERhdGFFdmVudHMgYWRkQ29udHJvbHMoQ29tcG9zaXRlIHBhcmVudCwgTGlzdGVuZXIgc3RhdHVzTGlzdGVuZXIpCi0gIHsgICAgCi0gICAgd3NkbFNlbGVjdGlvbldpZGdldC5hZGRDb250cm9scyhwYXJlbnQsIHN0YXR1c0xpc3RlbmVyKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAKLSAgcHVibGljIElTdGF0dXMgZ2V0U3RhdHVzKCkKLSAgewotICAgIHJldHVybiB3c2RsU2VsZWN0aW9uV2lkZ2V0LmdldFN0YXR1cygpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlVVJJKFN0cmluZyB3c1VyaSkKLSAgewotICAgIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbDsKLSAgICBpZiAod3NVcmkgIT0gbnVsbCkKLSAgICAgIHNlbCA9IG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHdzVXJpKTsKLSAgICBlbHNlCi0gICAgICBzZWwgPSBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbigpOwotICAgIHdzZGxTZWxlY3Rpb25XaWRnZXQuc2V0SW5pdGlhbFNlbGVjdGlvbihzZWwpOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFdlYlNlcnZpY2VVUkkoKQotICB7Ci0gICAgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsICAgID0gd3NkbFNlbGVjdGlvbldpZGdldC5nZXRPYmplY3RTZWxlY3Rpb24oKTsKLSAgICBPYmplY3QgICAgICAgICAgICAgICBvYmplY3QgPSBzZWwuZ2V0Rmlyc3RFbGVtZW50KCk7Ci0gICAgU3RyaW5nICAgICAgICAgICAgICAgcmVzdWx0ID0gbnVsbDsKLSAgICAKLSAgICBpZiAob2JqZWN0ICE9IG51bGwgKQotICAgIHsKLSAgICAgIGlmKCBvYmplY3QgaW5zdGFuY2VvZiBXU0RMU2VsZWN0aW9uV3JhcHBlciApCi0gICAgICB7ICAgIAotICAgICAgICAvLyBHZXQgYXQgdGhlIGlubmVyIHN0cnVjdHVyZWQgc2VsZWN0aW9uIG9iamVjdC4KLSAgICAgICAgV1NETFNlbGVjdGlvbldyYXBwZXIgd3JhcHBlciAgICAgICAgPSAoV1NETFNlbGVjdGlvbldyYXBwZXIpb2JqZWN0OwotICAgICAgICBJU3RydWN0dXJlZFNlbGVjdGlvbiBpbm5lclNlbGVjdGlvbiA9IHdyYXBwZXIud3NkbFNlbGVjdGlvbjsKLSAgICAgICAgT2JqZWN0ICAgICAgICAgICAgICAgaW5uZXJPYmplY3QgICAgPSBpbm5lclNlbGVjdGlvbi5nZXRGaXJzdEVsZW1lbnQoKTsKLSAgICAgICAgCi0gICAgICAgIHJlc3VsdCA9IGlubmVyT2JqZWN0ID09IG51bGwgPyBudWxsIDogaW5uZXJPYmplY3QudG9TdHJpbmcoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gb2JqZWN0LnRvU3RyaW5nKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3NkbFVSSSgpCi0gIHsKLSAgCXJldHVybiBnZXRXZWJTZXJ2aWNlVVJJKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBXZWJTZXJ2aWNlc1BhcnNlciBnZXRXZWJTZXJ2aWNlc1BhcnNlcigpCi0gIHsKLSAgICByZXR1cm4gd3NkbFNlbGVjdGlvbldpZGdldC5nZXRXZWJTZXJ2aWNlc1BhcnNlcigpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRQcm9qZWN0KElQcm9qZWN0IHByb2plY3QpCi0gIHsKLSAgCXRoaXMucHJvamVjdCA9IHByb2plY3Q7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJUHJvamVjdCBnZXRQcm9qZWN0KCkKLSAgewotICAJSVByb2plY3QgcCA9IHdzZGxTZWxlY3Rpb25XaWRnZXQuZ2V0UHJvamVjdCgpOwotICAJaWYgKHA9PW51bGwpCi0gIAl7Ci0gIAkgIHJldHVybiBwcm9qZWN0OwotICAJfQotICAJZWxzZQotICAJICByZXR1cm4gcDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q29tcG9uZW50TmFtZSgpCi0gIHsKLSAgICBTdHJpbmcgY25hbWUgPSB3c2RsU2VsZWN0aW9uV2lkZ2V0LmdldENvbXBvbmVudE5hbWUoKTsKLSAgICBpZiAoY25hbWU9PW51bGwpCi0gICAgewotICAgICAgcmV0dXJuIGNvbXBvbmVudE5hbWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJldHVybiBjbmFtZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldENvbXBvbmVudE5hbWUoU3RyaW5nIGNvbXBvbmVudE5hbWUpCi0gIHsKLSAgICB0aGlzLmNvbXBvbmVudE5hbWUgPSBjb21wb25lbnROYW1lOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldE9iamVjdFNlbGVjdGlvbkRpc3BsYXlhYmxlU3RyaW5nKCkgewotCSAgaWYgKHdzZGxTZWxlY3Rpb25XaWRnZXQgIT0gbnVsbCkKLQkgIHsKLQkJICByZXR1cm4gd3NkbFNlbGVjdGlvbldpZGdldC5nZXRPYmplY3RTZWxlY3Rpb25EaXNwbGF5YWJsZVN0cmluZygpOyAgCi0JICB9Ci0JICBlbHNlIHJldHVybiAiIjsgCi0gIH0KLSAgCi0gIHB1YmxpYyBJU3RydWN0dXJlZFNlbGVjdGlvbiBnZXRPYmplY3RTZWxlY3Rpb24oKSB7Ci0JICByZXR1cm4gd3NkbFNlbGVjdGlvbldpZGdldC5nZXRPYmplY3RTZWxlY3Rpb24oKTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGUoU3RyaW5nIHMpCi0gIHsKLQkgIHJldHVybiB3c2RsU2VsZWN0aW9uV2lkZ2V0LnZhbGlkYXRlKHMpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvV2ViU2VydmljZUNsaWVudFR5cGVXaWRnZXQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9XZWJTZXJ2aWNlQ2xpZW50VHlwZVdpZGdldC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjU2MWIyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9XZWJTZXJ2aWNlQ2xpZW50VHlwZVdpZGdldC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA1MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MDcgICAxMzU0NDMgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA0MTAgICAxMzU0NDEgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA0MTAgICAxMzYwMzAga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNDExICAgMTM2MTY3IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDQxNyAgIDEzNjM5MCBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDQxMyAgIDEzNTU4MSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNDIwICAgMTM2MTU4IHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA0MjAgICAxMzY3MDUgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDQyMSAgIDEzNjc2MSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNDI0ICAgMTM4MDUyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDQyNSAgIDEzNzgzMSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNDI2ICAgMTM3NjIyIGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwNDI3ICAgMTM4MDU4IGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwNTA0ICAgMTM4MDM1IGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwNTI5ICAgMTQxNDIyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDYwNyAgIDE0NDgyNiBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDYwNyAgIDE0NDA0OSBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDYxNCAgIDE0NjI3MCBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDcxNyAgIDE1MDU3NyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1hawotICogMjAwNjA3MjYgICAxNTA4NjUgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA2MDgxNyAgIDE0MDAxNyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgbG9uZ2VyIHByb2plY3Qgb3Igc2VydmVyL3J1bnRpbWUgc3RyaW5ncyBkbyBub3QgcmVzaXplIHdpemFyZAotICogMjAwNjA4MjkgICAxNTU0NDEgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIHdlYiBzZXJ2aWNlIHdpemFyZCBoYW5ncyBkdXJpbmcgcmVzaXplCi0gKiAyMDA3MDEyNiAgIDEzODQ4NCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZVJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tb24uRGVmYXVsdGluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tb24uVmFsaWRhdGlvblV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5wbHVnaW4uV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMucnVudGltZS5DbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMucnVudGltZS5Qcm9qZWN0U2VsZWN0aW9uV2lkZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuUnVudGltZVNlcnZlclNlbGVjdGlvbkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydC5XZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmRhdGEuTGFiZWxzQW5kSWRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5kYXRhLlR5cGVSdW50aW1lU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5jb21tb24uVUlVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2libGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJsZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJsZUNvbnRyb2xBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2libGVDb250cm9sRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJsZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUmVjdGFuZ2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNjYWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2g7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5mb3Jtcy5IeXBlcmxpbmtHcm91cDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5mb3Jtcy5IeXBlcmxpbmtTZXR0aW5nczsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5mb3Jtcy5ldmVudHMuSHlwZXJsaW5rRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZm9ybXMuZXZlbnRzLklIeXBlcmxpbmtMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5mb3Jtcy53aWRnZXRzLkh5cGVybGluazsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5QYWdlSW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5TaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0Q29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldERhdGFFdmVudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VzUGFyc2VyOwotCi0KLXB1YmxpYyBjbGFzcyBXZWJTZXJ2aWNlQ2xpZW50VHlwZVdpZGdldCBleHRlbmRzIFNpbXBsZVdpZGdldERhdGFDb250cmlidXRvciBpbXBsZW1lbnRzIElQYWNrYWJsZQoteyAgICAKLQkgLy8gSU5GT1BPUFMJIAotCSAvKiBDT05URVhUX0lEIFdTV1NDRU4wMDIyIGZvciB0aGUgU2VydmVyIGh5cGVybGluayBvZiB0aGUgU2NlbmFyaW8gUGFnZSAqLwotCSBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1dTV1NDRU5fSFlQRVJMSU5LX1NFUlZFUiA9ICJXU1dTQ0VOMDAyMiI7Ci0JIC8qIENPTlRFWFRfSUQgV1NXU0NFTjAwMjMgZm9yIHRoZSBSdW50aW1lIGh5cGVybGluayBvZiB0aGUgU2NlbmFyaW8gUGFnZSAqLwotCSBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1dTV1NDRU5fSFlQRVJMSU5LX1JVTlRJTUUgPSAiV1NXU0NFTjAwMjMiOwotCSAvKiBDT05URVhUX0lEIFdTV1NDRU4wMDI0IGZvciB0aGVQcm9qZWN0cyBoeXBlcmxpbmsgb2YgdGhlIFNjZW5hcmlvIFBhZ2UgKi8KLSAgICAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9XU1dTQ0VOX0hZUEVSTElOS19QUk9KRUNUUyAgPSAiV1NXU0NFTjAwMjQiOwotCSAvKiBDT05URVhUX0lEIFdTV1NDRU4wMDI1IGZvciB0aGVDbGllbnQgVHlwZSBjb21ibyBib3ggb2YgdGhlIFNjZW5hcmlvIFBhZ2UgKi8KLQkgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9XU1dTQ0VOX0NPTUJPX0NMSUVOVFRZUEUgPSAiV1NXU0NFTjAwMjUiOwotCSAvKiBDT05URVhUX0lEIFdTV1NDRU4wMDI2IGZvciB0aGVDbGllbnQgU2xpZGVyIG9mIHRoZSBTY2VuYXJpbyBQYWdlICovCi0JIHByaXZhdGUgU3RyaW5nIElORk9QT1BfV1NXU0NFTl9TQ0FMRV9DTElFTlQgPSAiV1NXU0NFTjAwMjYiOwotCQotICBwcml2YXRlIFN0cmluZyBHUkFQSElDX0NMSUVOVF8wPSJpY29ucy9jbGllbnRfdGVzdC5qcGciOyAgLy8kTk9OLU5MUy1OJAotICBwcml2YXRlIFN0cmluZyBHUkFQSElDX0NMSUVOVF8xPSJpY29ucy9jbGllbnRfcnVuLmpwZyI7ICAgLy8kTk9OLU5MUy1OJAotICBwcml2YXRlIFN0cmluZyBHUkFQSElDX0NMSUVOVF8yPSJpY29ucy9jbGllbnRfaW5zdGFsbC5qcGciOyAvLyROT04tTkxTLU4kCi0gIHByaXZhdGUgU3RyaW5nIEdSQVBISUNfQ0xJRU5UXzM9Imljb25zL2NsaWVudF9kZXBsb3kuanBnIjsgLy8kTk9OLU5MUy1OJAotICBwcml2YXRlIFN0cmluZyBHUkFQSElDX0NMSUVOVF80PSJpY29ucy9jbGllbnRfYXNzZW1ibGUuanBnIjsgLy8kTk9OLU5MUy1OJAotICBwcml2YXRlIFN0cmluZyBHUkFQSElDX0NMSUVOVF81PSJpY29ucy9jbGllbnRfZGV2ZWxvcC5qcGciOyAgLy8kTk9OLU5MUy1OJAotICBwcml2YXRlIFN0cmluZyBHUkFQSElDX0NMSUVOVF82PSJpY29ucy9jbGllbnRfbm9uZS5qcGciOyAgLy8kTk9OLU5MUy1OJAotICAKLSAgcHJpdmF0ZSBTdHJpbmcgSUNPTl9TQ0FMRV9CR18wPSJpY29ucy9zY2FsZTBfYmdyb3VuZC5qcGciOyAgLy8kTk9OLU5MUy1OJAotICBwcml2YXRlIFN0cmluZyBJQ09OX1NDQUxFX0JHXzE9Imljb25zL3NjYWxlMV9iZ3JvdW5kLmpwZyI7ICAvLyROT04tTkxTLU4kCi0gIHByaXZhdGUgU3RyaW5nIElDT05fU0NBTEVfQkdfMj0iaWNvbnMvc2NhbGUyX2Jncm91bmQuanBnIjsgIC8vJE5PTi1OTFMtTiQKLSAgcHJpdmF0ZSBTdHJpbmcgSUNPTl9TQ0FMRV9CR18zPSJpY29ucy9zY2FsZTNfYmdyb3VuZC5qcGciOyAgLy8kTk9OLU5MUy1OJAotICBwcml2YXRlIFN0cmluZyBJQ09OX1NDQUxFX0JHXzQ9Imljb25zL3NjYWxlNF9iZ3JvdW5kLmpwZyI7ICAvLyROT04tTkxTLU4kCi0gIHByaXZhdGUgU3RyaW5nIElDT05fU0NBTEVfQkdfNT0iaWNvbnMvc2NhbGU1X2Jncm91bmQuanBnIjsgIC8vJE5PTi1OTFMtTiQKLSAgcHJpdmF0ZSBTdHJpbmcgSUNPTl9TQ0FMRV9CR182PSJpY29ucy9zY2FsZTZfYmdyb3VuZC5qcGciOyAgLy8kTk9OLU5MUy1OJAotICAKLSAgcHJpdmF0ZSBDb21wb3NpdGUgY2xpZW50Q29tcG9zaXRlXzsKLSAgcHJpdmF0ZSBDb21wb3NpdGUgaENvbXBDbGllbnRfOwotICBwcml2YXRlIFNoZWxsIHNoZWxsXzsKLSAgcHJpdmF0ZSBDb21ibyAgY2xpZW50VHlwZUNvbWJvXzsgIAotICBwcml2YXRlIFNjYWxlIGNsaWVudFNjYWxlXzsgIAotICBwcml2YXRlIExhYmVsIHRvcG9sb2d5U3BvdF87Ci0gIHByaXZhdGUgTGFiZWwgY2xpZW50RGV0YWlsc0xhYmVsXzsgIAotICBwcml2YXRlIEh5cGVybGluayBoTGlua0NsaWVudFJ1bnRpbWVfOwotICBwcml2YXRlIEh5cGVybGluayBoTGlua0NsaWVudFNlcnZlcl87Ci0gIHByaXZhdGUgSHlwZXJsaW5rIGhMaW5rQ2xpZW50UHJvamVjdF87Ci0gIHByaXZhdGUgSHlwZXJsaW5rIGhMaW5rQ2xpZW50RUFSXzsKLSAgcHJpdmF0ZSBQcm9qZWN0U2VsZWN0aW9uRGlhbG9nIHByb2plY3REaWFsb2dfOwotICAKLSAgcHJpdmF0ZSBib29sZWFuIGRldmVsb3BDbGllbnRfOwotICBwcml2YXRlIGJvb2xlYW4gYXNzZW1ibGVDbGllbnRfOwotICBwcml2YXRlIGJvb2xlYW4gZGVwbG95Q2xpZW50XzsKLQkKLSAgcHJpdmF0ZSBCb29sZWFuIHRlc3RDbGllbnRfOwotICBwcml2YXRlIEJvb2xlYW4gaW5zdGFsbENsaWVudF87Ci0gIHByaXZhdGUgQm9vbGVhbiBzdGFydENsaWVudF87ICAgIAotICAgIAotICBwcml2YXRlIFR5cGVSdW50aW1lU2VydmVyIGlkc187Ci0gIHByaXZhdGUgSVN0cnVjdHVyZWRTZWxlY3Rpb24gb2JqZWN0U2VsZWN0aW9uXzsKLSAgcHJpdmF0ZSBib29sZWFuIGVuYWJsZVByb3h5XzsgIC8vc2VydmljZSBzY2FsZSBpcyBzZXQgdG8gYSBsZXZlbCB0aGF0IHRoZSBjbGllbnQgc2NhbGUgY2FuIGJlIGVuYWJsZWQKLSAgcHJpdmF0ZSBib29sZWFuIGNsaWVudE9ubHlfPWZhbHNlOwotICBwcml2YXRlIGludCBjbGllbnRTY2FsZVNldHRpbmdfOwotICBwcml2YXRlIEltYWdlUmVnaXN0cnkgaW1hZ2VSZWdfOwotICBwcml2YXRlIElQcm9qZWN0IHByb2plY3RfOwotICBwcml2YXRlIFdlYlNlcnZpY2VzUGFyc2VyIHBhcnNlcl87Ci0gIHByaXZhdGUgU3RyaW5nIGVhclByb2plY3ROYW1lXzsKLSAgcHJpdmF0ZSBTdHJpbmcgcHJvamVjdE5hbWVfOwotICBwcml2YXRlIGJvb2xlYW4gbmVlZEVhcl87Ci0gIHByaXZhdGUgU3RyaW5nIGNsaWVudENvbXBvbmVudFR5cGVfOwotICAKLSAgcHJpdmF0ZSBMaXN0ZW5lciBzdGF0dXNMaXN0ZW5lcl87Ci0gIHByaXZhdGUgaW50IHZhbGlkYXRpb25TdGF0ZV87Ci0gIAotICBwcml2YXRlIFNjYWxlU2VsZWN0aW9uTGlzdGVuZXIgc2NhbGVTZWxlY3Rpb25MaXN0ZW5lciA9IG5ldyBTY2FsZVNlbGVjdGlvbkxpc3RlbmVyKCk7Ci0gIAotICBwcml2YXRlIFN0cmluZyBDTElFTlRfUlVOVElNRV9QUkVGSVggPSBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfUlVOVElNRVNfTElTVCA7IAotICBwcml2YXRlIFN0cmluZyBDTElFTlRfU0VSVkVSX1BSRUZJWCA9ICBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfU0VSVkVSU19MSVNUOwotICBwcml2YXRlIFN0cmluZyBDTElFTlRfUFJPSkVDVF9QUkVGSVggPSBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfQ0xJRU5UX1BST0pFQ1Q7Ci0gIHByaXZhdGUgU3RyaW5nIENMSUVOVF9FQVJfUFJFRklYID0gQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX0NMSUVOVF9FQVJfUFJPSkVDVDsKLSAgCi0gIHByaXZhdGUgQ29tcG9zaXRlIGNsaWVudEdyb3VwQ29tcG9zaXRlXyA7Ci0JCi0gIHByaXZhdGUgVUlVdGlscyB1dGlsc18gPSBuZXcgVUlVdGlscygib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpIik7Ci0gIHByaXZhdGUgSVBhY2thYmxlIHBhY2thYmxlXyA9IG51bGw7ICAKLSAgcHJpdmF0ZSBMYWJlbHNBbmRJZHMgbGFiZWxJZHNfOwotICAKLSAgcHVibGljIFdlYlNlcnZpY2VDbGllbnRUeXBlV2lkZ2V0KGJvb2xlYW4gY2xpZW50T25seSkgewotCSAgICBjbGllbnRPbmx5XyA9IGNsaWVudE9ubHk7Ci0JCWluaXRJbWFnZVJlZ2lzdHJ5KCk7Ci0JCXZhbGlkYXRpb25TdGF0ZV8gPSBWYWxpZGF0aW9uVXRpbHMuVkFMSURBVEVfQUxMOwotCX0KLSAgIAotICAgIC8qKgotICAgICAqIEdpdmUgdGhpcyB3aWRnZXQgYSBoYW5kbGUgdG8gYW4gSVBhY2thYmxlIGluc3RhbmNlLCB3aGljaCB3aWxsIGFsc28gYmUKLSAgICAgKiBwYWNrZWQgd2hlbiB0aGlzIHdpZGdldCdzIHBhY2tJdCgpIGlzIGNhbGxlZC4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gcGFja2FibGUgVGhlIElQYWNrYWJsZSBpbnN0YW5jZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRQYWNrYWJsZShJUGFja2FibGUgcGFja2FibGUpIHsKLSAgICAJcGFja2FibGVfID0gcGFja2FibGU7Ci0gICAgfQotICAKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5JUGFja2FibGUjcGFja0l0KCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBwYWNrSXQoKSB7Ci0JCWNsaWVudEdyb3VwQ29tcG9zaXRlXy5wYWNrKHRydWUpOwkJCi0JCXV0aWxzXy5ob3Jpem9udGFsUmVzaXplKGNsaWVudEdyb3VwQ29tcG9zaXRlXy5nZXRTaGVsbCgpLCBjbGllbnRHcm91cENvbXBvc2l0ZV8sIFVJVXRpbHMuREVGQVVMVF9QQURESU5HKTsKLQkJaWYgKCFjbGllbnRPbmx5XyAmJiBwYWNrYWJsZV8gIT0gbnVsbCkKLQkJCXBhY2thYmxlXy5wYWNrSXQoKTsKLQl9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuV2lkZ2V0Q29udHJpYnV0b3IjYWRkQ29udHJvbHMob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcikKLSAgICovCi0gIHB1YmxpYyBXaWRnZXREYXRhRXZlbnRzIGFkZENvbnRyb2xzKCBDb21wb3NpdGUgcGFyZW50LCBMaXN0ZW5lciBzdGF0dXNMaXN0ZW5lcikKLSAgewotICAgIHN0YXR1c0xpc3RlbmVyXyA9IHN0YXR1c0xpc3RlbmVyOwotICAgIENvbXBvc2l0ZSBjbGllbnRUeXBlQ29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLQlHcmlkTGF5b3V0IGNjbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLQljY2xheW91dC5udW1Db2x1bW5zID0gMjsKLQljY2xheW91dC5tYXJnaW5Ub3A9MzsKLQljbGllbnRUeXBlQ29tcG9zaXRlLnNldExheW91dCggY2NsYXlvdXQgKTsKLSAgICBHcmlkRGF0YSBjY0dyaWREYXRhID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCB8IEdyaWREYXRhLkdSQUJfSE9SSVpPTlRBTCk7IAotICAgIGNsaWVudFR5cGVDb21wb3NpdGUuc2V0TGF5b3V0RGF0YShjY0dyaWREYXRhKTsKLSAgICAKLSAgICBpbnQgY29tYm9TdHlsZSA9IFNXVC5TSU5HTEUgfCBTV1QuQk9SREVSIHwgU1dULlJFQURfT05MWTsKLSAgICBjbGllbnRUeXBlQ29tYm9fID0gdXRpbHNfLmNyZWF0ZUNvbWJvKCBjbGllbnRUeXBlQ29tcG9zaXRlLCAKLSAgICAJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9XRUJTRVJWSUNFQ0xJRU5UVFlQRSwKLSAgICAJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BXUFJfQ09NQk9fQ0xJRU5UVFlQRSwgCi0gICAgCQlJTkZPUE9QX1dTV1NDRU5fQ09NQk9fQ0xJRU5UVFlQRSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21ib1N0eWxlICk7Ci0gICAgR3JpZERhdGEgY29tYm9HcmlkRGF0YSA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwgfCBHcmlkRGF0YS5HUkFCX0hPUklaT05UQUwpOwotICAgIGNsaWVudFR5cGVDb21ib18uc2V0TGF5b3V0RGF0YShjb21ib0dyaWREYXRhKTsKLQljbGllbnRUeXBlQ29tYm9fLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpIHsKLQkJCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JCQl9Ci0KLQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLQkJCQlTdHJpbmcgb2xkVHlwZUlkID0gaWRzXy5nZXRUeXBlSWQoKTsKLQkJCQlpbnQgY3VycmVudFNlbGVjdGlvbklkeCA9IGNsaWVudFR5cGVDb21ib18uZ2V0U2VsZWN0aW9uSW5kZXgoKTsKLQkJCQlTdHJpbmcgY3VycmVudFR5cGVJZCA9IGxhYmVsSWRzXy5nZXRJZHNfKClbY3VycmVudFNlbGVjdGlvbklkeF07Ci0JCQkJaWYgKCFvbGRUeXBlSWQuZXF1YWxzKGN1cnJlbnRUeXBlSWQpKSB7CQkKLQkJCQkJLy8gaGFuZGxlIGNoYW5naW5nIGNsaWVudCB0eXBlCi0JCQkJCWlkc18uc2V0VHlwZUlkKGN1cnJlbnRUeXBlSWQpOwotCQkJCQlyZWZyZXNoU2VydmVyUnVudGltZVNlbGVjdGlvbigpOwotCQkJCX0KLQkJCQl2YWxpZGF0aW9uU3RhdGVfID0gVmFsaWRhdGlvblV0aWxzLlZBTElEQVRFX0FMTDsKLQkJCQlzdGF0dXNMaXN0ZW5lcl8uaGFuZGxlRXZlbnQobnVsbCk7Ci0JCQl9Ci0KLQkJfSk7ICAgIAotICAgIAotICAgIGNsaWVudEdyb3VwQ29tcG9zaXRlXyA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7ICAgIAotCUdyaWRMYXlvdXQgZ2NsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotCWdjbGF5b3V0Lm51bUNvbHVtbnMgPSAyOwotCWdjbGF5b3V0Lmhvcml6b250YWxTcGFjaW5nPTA7CQkKLQlnY2xheW91dC5tYXJnaW5IZWlnaHQ9MDsJCQotCWdjbGF5b3V0Lm1hcmdpbkJvdHRvbT01OwotCWNsaWVudEdyb3VwQ29tcG9zaXRlXy5zZXRMYXlvdXQoIGdjbGF5b3V0ICk7Ci0gICAgR3JpZERhdGEgZ2NHcmlkRGF0YSA9IG5ldyBHcmlkRGF0YShTV1QuQkVHSU5OSU5HLCBTV1QuQkVHSU5OSU5HLCB0cnVlLCB0cnVlKTsgCi0gICAgY2xpZW50R3JvdXBDb21wb3NpdGVfLnNldExheW91dERhdGEoZ2NHcmlkRGF0YSk7Ci0gICAgCi0gICAgY2xpZW50R3JvdXBDb21wb3NpdGVfLmFkZENvbnRyb2xMaXN0ZW5lcihuZXcgQ29udHJvbExpc3RlbmVyKCkKLQl7Ci0JCXB1YmxpYyB2b2lkIGNvbnRyb2xNb3ZlZChDb250cm9sRXZlbnQgZSkgewotCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCQkJCi0JCX0KLQkJcHVibGljIHZvaWQgY29udHJvbFJlc2l6ZWQoQ29udHJvbEV2ZW50IGUpIHsKLQkJCWNsaWVudEdyb3VwQ29tcG9zaXRlXy5wYWNrKHRydWUpOwotCQl9Ci0JfSk7Ci0gICAgCi0gICAgICAgCi0JY2xpZW50Q29tcG9zaXRlXyA9ICBuZXcgQ29tcG9zaXRlKGNsaWVudEdyb3VwQ29tcG9zaXRlXywgU1dULk5PTkUpOwotCUdyaWRMYXlvdXQgZ3JpZGxheW91dCAgID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBncmlkbGF5b3V0Lm51bUNvbHVtbnMgICA9IDI7Ci0gICAgZ3JpZGxheW91dC5ob3Jpem9udGFsU3BhY2luZz0wOwotICAgIGdyaWRsYXlvdXQubWFyZ2luSGVpZ2h0PTA7Ci0gICAgY2xpZW50Q29tcG9zaXRlXy5zZXRMYXlvdXQoIGdyaWRsYXlvdXQgKTsKLSAgICBHcmlkRGF0YSBzY0dyaWREYXRhID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCk7Ci0gICAgY2xpZW50Q29tcG9zaXRlXy5zZXRMYXlvdXREYXRhKHNjR3JpZERhdGEpOwotICAgIAotICAgIGNsaWVudFNjYWxlXyA9IG5ldyBTY2FsZShjbGllbnRDb21wb3NpdGVfICwgU1dULlZFUlRJQ0FMIHwgU1dULkJPUkRFUik7CQkKLQl1dGlsc18uY3JlYXRlSW5mb1BvcChjbGllbnRTY2FsZV8sIElORk9QT1BfV1NXU0NFTl9TQ0FMRV9DTElFTlQpOwkKLQljbGllbnRTY2FsZV8uc2V0TWluaW11bSgwKTsKLQljbGllbnRTY2FsZV8uc2V0TWF4aW11bSg2KTsKLQljbGllbnRTY2FsZV8uc2V0SW5jcmVtZW50KDEpOwotCWNsaWVudFNjYWxlXy5hZGRTZWxlY3Rpb25MaXN0ZW5lcihzY2FsZVNlbGVjdGlvbkxpc3RlbmVyKTsJCQotCXNldENsaWVudFNjYWxlKGdldENsaWVudEdlbmVyYXRpb24oKSk7Ci0JY2xpZW50U2NhbGVfLnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fU0NBTEVfQ0xJRU5UKTsKLQkKLQlBY2Nlc3NpYmxlIGFjY2Vzc2libGVTY2FsZSA9IGNsaWVudFNjYWxlXy5nZXRBY2Nlc3NpYmxlKCk7Ci0JYWNjZXNzaWJsZVNjYWxlLmFkZEFjY2Vzc2libGVMaXN0ZW5lcihuZXcgQWNjZXNzaWJsZUFkYXB0ZXIoKXsKLQkJLy8gcmV0dXJuIGEgc3RyaW5nIHRoYXQgZGVzY3JpYmVzIHdoYXQgdG8gZG8gd2l0aCB0aGUgc2xpZGVyCi0JCS8vICB0aGlzIGlzIHJlYWQgYnkgdGhlIHNjcmVlbiByZWFkZXIgd2hlbiB0aGUgc2xpZGVyIGZpcnN0IGdldHMgZm9jdXMKLQkJcHVibGljIHZvaWQgZ2V0TmFtZShBY2Nlc3NpYmxlRXZlbnQgZSkgewotCQkJZS5yZXN1bHQgPSBDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX0NMSUVOVDsJCQkKLQkJfQkJCQotCX0pOwotCWFjY2Vzc2libGVTY2FsZS5hZGRBY2Nlc3NpYmxlQ29udHJvbExpc3RlbmVyKG5ldyBBY2Nlc3NpYmxlQ29udHJvbEFkYXB0ZXIoKXsKLQkJLy8gcmV0dXJuIGEgbWVhbmluZ2Z1bCBzdHJpbmcgd2hlbiB0aGUgc2NyZWVuIHJlYWRlcgotCQkvLyBhdHRlbXB0cyB0byBnZXQgdGhlIHZhbHVlIGZyb20gdGhlIHNlcnZpY2Ugc2NhbGUKLQkJcHVibGljIHZvaWQgZ2V0VmFsdWUoQWNjZXNzaWJsZUNvbnRyb2xFdmVudCBlKSB7Ci0JCQlpbnQgc2VsZWN0aW9uID0gY2xpZW50U2NhbGVfLmdldFNlbGVjdGlvbigpOwotCQkJc3dpdGNoIChzZWxlY3Rpb24pIHsKLQkJCWNhc2UgMDoKLQkJCQllLnJlc3VsdCA9IENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fU0NBTEVfVEVTVDsKLQkJCQlicmVhazsKLQkJCWNhc2UgMToKLQkJCQllLnJlc3VsdCA9IENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fU0NBTEVfUlVOOwotCQkJCWJyZWFrOwotCQkJY2FzZSAyOgotCQkJCWUucmVzdWx0ID0gQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9JTlNUQUxMOwotCQkJCWJyZWFrOwotCQkJY2FzZSAzOgotCQkJCWUucmVzdWx0ID0gQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9ERVBMT1k7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDQ6Ci0JCQkJZS5yZXN1bHQgPSBDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX0FTU0VNQkxFOwotCQkJCWJyZWFrOwotCQkJY2FzZSA1OgotCQkJCWUucmVzdWx0ID0gQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9ERVZFTE9QOwotCQkJCWJyZWFrOwotCQkJY2FzZSA2OgkJCQkKLQkJCQlpZiAoY2xpZW50T25seV8pCi0JCQkJCWUucmVzdWx0ID0gQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9DTElFTlRfT05MWTsKLQkJCQllbHNlCi0JCQkJCWUucmVzdWx0ID0gQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9DTElFTlQ7CQkJCQotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlicmVhazsKLQkJCX0JCQkJCQkJCQotCQl9Ci0JfSk7Ci0JCi0JR3JpZERhdGEgbGF5b3V0RGF0YTEgPSBuZXcgR3JpZERhdGEoKTsKLQlsYXlvdXREYXRhMS5ob3Jpem9udGFsQWxpZ25tZW50PVNXVC5DRU5URVI7Ci0JbGF5b3V0RGF0YTEudmVydGljYWxBbGlnbm1lbnQgPSBTV1QuQkVHSU5OSU5HOwotCVJlY3RhbmdsZSBzY2FsZVIgPSAoaW1hZ2VSZWdfLmdldChJQ09OX1NDQUxFX0JHXzApKS5nZXRCb3VuZHMoKTsJCi0JbGF5b3V0RGF0YTEuaGVpZ2h0SGludD1zY2FsZVIuaGVpZ2h0OwotCWxheW91dERhdGExLndpZHRoSGludD1zY2FsZVIud2lkdGgrMTsKLQljbGllbnRTY2FsZV8uc2V0TGF5b3V0RGF0YShsYXlvdXREYXRhMSk7Ci0JCQotCXRvcG9sb2d5U3BvdF8gPSBuZXcgTGFiZWwoY2xpZW50Q29tcG9zaXRlXyAsIFNXVC5DRU5URVIgfCBTV1QuQk9SREVSICk7Ci0JdG9wb2xvZ3lTcG90Xy5zZXRCYWNrZ3JvdW5kKERpc3BsYXkuZ2V0Q3VycmVudCgpLmdldFN5c3RlbUNvbG9yKFNXVC5DT0xPUl9XSElURSkpOwotCWlmIChjbGllbnRPbmx5XykKLQkJdG9wb2xvZ3lTcG90Xy5zZXRUb29sVGlwVGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX0NMSUVOVF9PTkxZKTsKLQllbHNlCi0JdG9wb2xvZ3lTcG90Xy5zZXRUb29sVGlwVGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX0NMSUVOVCk7Ci0JCi0JR3JpZERhdGEgbGF5b3V0RGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotCWxheW91dERhdGEudmVydGljYWxBbGlnbm1lbnQ9U1dULkJFR0lOTklORzsKLQlsYXlvdXREYXRhLmhvcml6b250YWxBbGlnbm1lbnQ9U1dULkJFR0lOTklORzsKLQlSZWN0YW5nbGUgdG9wUiA9IChpbWFnZVJlZ18uZ2V0KEdSQVBISUNfQ0xJRU5UXzYpKS5nZXRCb3VuZHMoKTsKLQlsYXlvdXREYXRhLndpZHRoSGludD10b3BSLndpZHRoOwotCWxheW91dERhdGEuaGVpZ2h0SGludD10b3BSLmhlaWdodDsKLQl0b3BvbG9neVNwb3RfLnNldExheW91dERhdGEobGF5b3V0RGF0YSk7CQkKLQkKLQlzZXRHcmFwaGljcyhnZXRDbGllbnRHZW5lcmF0aW9uKCkpOwotCQkKLQloQ29tcENsaWVudF8gPSB1dGlsc18uY3JlYXRlQ29tcG9zaXRlKGNsaWVudEdyb3VwQ29tcG9zaXRlXywgMSk7Ci0JCi0JY2xpZW50RGV0YWlsc0xhYmVsXyA9IG5ldyBMYWJlbChoQ29tcENsaWVudF8sIFNXVC5OT05FKTsKLQljbGllbnREZXRhaWxzTGFiZWxfLnNldFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1NVTU1BUlkpOwotCQotCWhMaW5rQ2xpZW50U2VydmVyXz0gbmV3IEh5cGVybGluayhoQ29tcENsaWVudF8sIFNXVC5OVUxMKTsKLQl1dGlsc18uY3JlYXRlSW5mb1BvcChoTGlua0NsaWVudFNlcnZlcl8sIElORk9QT1BfV1NXU0NFTl9IWVBFUkxJTktfU0VSVkVSKTsKLQloTGlua0NsaWVudFNlcnZlcl8uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFdSU19URVhUX1NFUlZFUik7Ci0JaExpbmtDbGllbnRTZXJ2ZXJfLmFkZEh5cGVybGlua0xpc3RlbmVyKG5ldyBJSHlwZXJsaW5rTGlzdGVuZXIoKXsKLQkJcHVibGljIHZvaWQgbGlua0FjdGl2YXRlZChIeXBlcmxpbmtFdmVudCBlKXsJCQkKLQkJCWxhdW5jaFJ1bnRpbWVTZWxlY3Rpb25EaWFsb2codHJ1ZSwgdHJ1ZSk7CQkJCQotCQl9Ci0JCXB1YmxpYyB2b2lkIGxpbmtFbnRlcmVkKEh5cGVybGlua0V2ZW50IGUpe30KLQkJcHVibGljIHZvaWQgbGlua0V4aXRlZChIeXBlcmxpbmtFdmVudCBlKXt9CQkJCi0JfSk7Ci0JCi0JaExpbmtDbGllbnRSdW50aW1lXyA9IG5ldyBIeXBlcmxpbmsoaENvbXBDbGllbnRfLCBTV1QuTlVMTCk7Ci0JdXRpbHNfLmNyZWF0ZUluZm9Qb3AoaExpbmtDbGllbnRSdW50aW1lXywgSU5GT1BPUF9XU1dTQ0VOX0hZUEVSTElOS19SVU5USU1FKTsKLQloTGlua0NsaWVudFJ1bnRpbWVfLnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BXUlNfVEVYVF9SVU5USU1FKTsKLQloTGlua0NsaWVudFJ1bnRpbWVfLmFkZEh5cGVybGlua0xpc3RlbmVyKG5ldyBJSHlwZXJsaW5rTGlzdGVuZXIoKXsKLQkJcHVibGljIHZvaWQgbGlua0FjdGl2YXRlZChIeXBlcmxpbmtFdmVudCBlKXsJCQkKLQkJCWxhdW5jaFJ1bnRpbWVTZWxlY3Rpb25EaWFsb2codHJ1ZSk7Ci0JCX0KLQkJcHVibGljIHZvaWQgbGlua0VudGVyZWQoSHlwZXJsaW5rRXZlbnQgZSl7fQotCQlwdWJsaWMgdm9pZCBsaW5rRXhpdGVkKEh5cGVybGlua0V2ZW50IGUpe30JCQkKLQl9KTsKLQkKLQlJV29ya2JlbmNoIHdvcmtiZW5jaCA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCk7Ci0JcHJvamVjdERpYWxvZ18gPSBuZXcgUHJvamVjdFNlbGVjdGlvbkRpYWxvZyh3b3JrYmVuY2guZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0U2hlbGwoKSwgCi0JCQluZXcgUGFnZUluZm8oQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkRJQUxPR19USVRJTEVfQ0xJRU5UX1BST0pFQ1RfU0VUVElOR1MsICIiLCAKLSAgICAgICAgICAgICAgICAgICAgbmV3IFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSgpCi0JCQkJCQl7CQotCQkJCQkJCXB1YmxpYyBXaWRnZXRDb250cmlidXRvciBjcmVhdGUoKQotCQkJCQkJCXsJICAJCQkJCQkgCi0JCQkJCQkJICAgcmV0dXJuIG5ldyBQcm9qZWN0U2VsZWN0aW9uV2lkZ2V0KHRydWUpOwotCQkJCQkJCX0KLQkJCQkJCX0pKTsKLQkKLQloTGlua0NsaWVudFByb2plY3RfID0gbmV3IEh5cGVybGluayhoQ29tcENsaWVudF8sIFNXVC5OVUxMKTsKLQl1dGlsc18uY3JlYXRlSW5mb1BvcChoTGlua0NsaWVudFJ1bnRpbWVfLCBJTkZPUE9QX1dTV1NDRU5fSFlQRVJMSU5LX1BST0pFQ1RTKTsKLQloTGlua0NsaWVudFByb2plY3RfLnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fQ0xJRU5UUFJPSkVDVF9MSU5LKTsKLQloTGlua0NsaWVudFByb2plY3RfLmFkZEh5cGVybGlua0xpc3RlbmVyKG5ldyBJSHlwZXJsaW5rTGlzdGVuZXIoKXsKLQkJcHVibGljIHZvaWQgbGlua0FjdGl2YXRlZChIeXBlcmxpbmtFdmVudCBlKXsJCQkKLQkJCWxhdW5jaFByb2plY3REaWFsb2coKTsKLQkJfQotCQlwdWJsaWMgdm9pZCBsaW5rRW50ZXJlZChIeXBlcmxpbmtFdmVudCBlKXt9Ci0JCXB1YmxpYyB2b2lkIGxpbmtFeGl0ZWQoSHlwZXJsaW5rRXZlbnQgZSl7fQkJCQotCX0pOwotCQotCWhMaW5rQ2xpZW50RUFSXyA9IG5ldyBIeXBlcmxpbmsoaENvbXBDbGllbnRfLCBTV1QuTlVMTCk7CQotCXV0aWxzXy5jcmVhdGVJbmZvUG9wKGhMaW5rQ2xpZW50UnVudGltZV8sIElORk9QT1BfV1NXU0NFTl9IWVBFUkxJTktfUFJPSkVDVFMpOwotCWhMaW5rQ2xpZW50RUFSXy5zZXRUb29sVGlwVGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX0NMSUVOVFBST0pFQ1RfTElOSyk7Ci0JaExpbmtDbGllbnRFQVJfLmFkZEh5cGVybGlua0xpc3RlbmVyKG5ldyBJSHlwZXJsaW5rTGlzdGVuZXIoKXsKLQkJcHVibGljIHZvaWQgbGlua0FjdGl2YXRlZChIeXBlcmxpbmtFdmVudCBlKXsJCQkKLQkJCWxhdW5jaFByb2plY3REaWFsb2coKTsKLQkJfQotCQlwdWJsaWMgdm9pZCBsaW5rRW50ZXJlZChIeXBlcmxpbmtFdmVudCBlKXt9Ci0JCXB1YmxpYyB2b2lkIGxpbmtFeGl0ZWQoSHlwZXJsaW5rRXZlbnQgZSl7fQkJCQotCX0pOwotCQotCWhMaW5rQ2xpZW50U2VydmVyXy5zZXRUZXh0KENMSUVOVF9TRVJWRVJfUFJFRklYKTsgCi0JaExpbmtDbGllbnRSdW50aW1lXy5zZXRUZXh0KENMSUVOVF9SVU5USU1FX1BSRUZJWCk7Ci0JaExpbmtDbGllbnRQcm9qZWN0Xy5zZXRUZXh0KENMSUVOVF9QUk9KRUNUX1BSRUZJWCk7Ci0JaExpbmtDbGllbnRFQVJfLnNldFRleHQoQ0xJRU5UX0VBUl9QUkVGSVgpOwkKLQkKLQlIeXBlcmxpbmtHcm91cCBzZXJ2ZXJSdW50aW1lR3JvdXAgPSBuZXcgSHlwZXJsaW5rR3JvdXAoRGlzcGxheS5nZXRDdXJyZW50KCkpOwotCXNlcnZlclJ1bnRpbWVHcm91cC5hZGQoaExpbmtDbGllbnRTZXJ2ZXJfKTsKLQlzZXJ2ZXJSdW50aW1lR3JvdXAuYWRkKGhMaW5rQ2xpZW50UnVudGltZV8pOwotCXNlcnZlclJ1bnRpbWVHcm91cC5hZGQoaExpbmtDbGllbnRQcm9qZWN0Xyk7Ci0Jc2VydmVyUnVudGltZUdyb3VwLmFkZChoTGlua0NsaWVudEVBUl8pOwotCXNlcnZlclJ1bnRpbWVHcm91cC5zZXRIeXBlcmxpbmtVbmRlcmxpbmVNb2RlKEh5cGVybGlua1NldHRpbmdzLlVOREVSTElORV9BTFdBWVMpOwotICAgIAotCWVuYWJsZUNsaWVudFNsaWRlcihnZXRHZW5lcmF0ZVByb3h5KCkpOwotCQotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBlbmFibGVDbGllbnRTbGlkZXIoIGJvb2xlYW4gZW5hYmxlICkKLSAgewotCWVuYWJsZVByb3h5XyA9IGVuYWJsZTsKLQljbGllbnRTY2FsZV8uc2V0RW5hYmxlZChlbmFibGUpOwotCWludCBzZWxlY3Rpb24gPSBnZXRDbGllbnRHZW5lcmF0aW9uKCk7Ci0JaWYgKGVuYWJsZSkKLQl7CQkJCQotCQlzZXRHcmFwaGljcyhzZWxlY3Rpb24pOwotCX0KLQllbHNlCi0JewotCQlzZXRDbGllbnRTY2FsZShTY2VuYXJpb0NvbnRleHQuV1NfTk9ORSk7Ci0JCXNldEdyYXBoaWNzKFNjZW5hcmlvQ29udGV4dC5XU19OT05FKTsKLQkJY2xpZW50U2NhbGVfLnNldEJhY2tncm91bmRJbWFnZShudWxsKTsgIC8vb3ZlcnJpZGUgYmFja2dyb3VuZCBmb3IgZGlzYWJsZSB0byBncmV5CQkKLQl9CQotCXNob3dTdW1tYXJ5KGVuYWJsZSAmJiAoc2VsZWN0aW9uIDw9IFNjZW5hcmlvQ29udGV4dC5XU19ERVZFTE9QKSk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBzaG93U3VtbWFyeShib29sZWFuIHNob3cpCi0gIHsKLQkgIGlmIChjbGllbnRPbmx5XykKLQkJICBzaG93ID0gdHJ1ZTsgIC8vc2hvcnQgY2lyY3VpdCB0byBlbGltaW5hdGUgZmxpY2tlci4uLgkgIAotCSAgCi0JICBoTGlua0NsaWVudEVBUl8uc2V0VmlzaWJsZShzaG93ICYmIG5lZWRFYXJfKTsKLQkgIGhMaW5rQ2xpZW50UHJvamVjdF8uc2V0VmlzaWJsZShzaG93KTsKLQkgIGhMaW5rQ2xpZW50UnVudGltZV8uc2V0VmlzaWJsZShzaG93KTsKLQkgIGhMaW5rQ2xpZW50U2VydmVyXy5zZXRWaXNpYmxlKHNob3cpOwotCSAgCi0JICBpZiAoc2hvdykKLQkgIHsKLQkJICBjbGllbnREZXRhaWxzTGFiZWxfLnNldFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1NVTU1BUlkpOwotCSAgfQotCSAgZWxzZQotCSAgewotCQkgIGlmIChjbGllbnRPbmx5XykKLQkJCSAgaENvbXBDbGllbnRfLnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fU0NBTEVfQ0xJRU5UX09OTFkpOwotCQkJZWxzZQotCQkgIGhDb21wQ2xpZW50Xy5zZXRUb29sVGlwVGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX0NMSUVOVCk7Ci0JCSAgY2xpZW50RGV0YWlsc0xhYmVsXy5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9TVU1NQVJZX05PX0NMSUVOVCk7CQkgIAotCSAgfQkgIAotCSAgY2xpZW50RGV0YWlsc0xhYmVsXy5wYWNrKHRydWUpOwotCSAgaExpbmtDbGllbnRQcm9qZWN0Xy5wYWNrKHRydWUpOwotCSAgaExpbmtDbGllbnRFQVJfLnBhY2sodHJ1ZSk7Ci0JICBwYWNrSXQoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFR5cGVSdW50aW1lU2VydmVyKCBUeXBlUnVudGltZVNlcnZlciBpZHMgKQotICB7Ci0JTGFiZWxzQW5kSWRzICAgICAgICAgICAgICAgICBsYWJlbElkcyAgID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0Q2xpZW50VHlwZUxhYmVscygpOwotICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uICA9IDA7Ci0gICAgU3RyaW5nW10gICAgICAgICAgICAgICAgICAgICBjbGllbnRJZHMgID0gbGFiZWxJZHMuZ2V0SWRzXygpOwotICAgIFN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRJZCA9IGlkcy5nZXRUeXBlSWQoKTsKLSAgICAKLSAgICBsYWJlbElkc18gPSBsYWJlbElkczsKLQkvLyByc2tyZWcKLSAgICBjbGllbnRUeXBlQ29tYm9fLnNldEl0ZW1zKCBsYWJlbElkcy5nZXRMYWJlbHNfKCkgKTsKLSAgICAKLSAgICAvLyBOb3cgZmluZCB0aGUgc2VsZWN0ZWQgb25lLgotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBjbGllbnRJZHMubGVuZ3RoOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBpZiggc2VsZWN0ZWRJZC5lcXVhbHMoIGNsaWVudElkc1tpbmRleCBdKSApCi0gICAgICB7Ci0gICAgICAgIHNlbGVjdGlvbiA9IGluZGV4OwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgY2xpZW50VHlwZUNvbWJvXy5zZWxlY3QoIHNlbGVjdGlvbiApOyAgICAKLQlpZHNfID0gaWRzOwotCQotCWlmIChpZHNfICE9IG51bGwpCi0JewotCQlTdHJpbmcgY2xpZW50U2VydmVyVGV4dCA9ICIiOwotCQlTdHJpbmcgc2VydmVySWQgPSBpZHNfLmdldFNlcnZlcklkKCk7Ci0JCWlmIChzZXJ2ZXJJZCAhPSBudWxsICYmIHNlcnZlcklkLmxlbmd0aCgpPjApCi0JCXsKLQkJCWNsaWVudFNlcnZlclRleHQgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTZXJ2ZXJMYWJlbEJ5SWQoc2VydmVySWQpOwotCQl9IAotCQlTdHJpbmcgY2xpZW50UnVudGltZVRleHQgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRSdW50aW1lTGFiZWxCeUlkKGlkc18uZ2V0UnVudGltZUlkKCkpOwotCQkKLQkJU3RyaW5nIGN1cnJlbnRTZXJ2ZXJUZXh0ID0gaExpbmtDbGllbnRTZXJ2ZXJfLmdldFRleHQoKTsKLQkJU3RyaW5nIGN1cnJlbnRSdW50aW1lVGV4dCA9IGhMaW5rQ2xpZW50UnVudGltZV8uZ2V0VGV4dCgpOwotCQlTdHJpbmcgbmV3U2VydmVyVGV4dCA9IENMSUVOVF9TRVJWRVJfUFJFRklYICsgIiAiICsgY2xpZW50U2VydmVyVGV4dDsKLQkJU3RyaW5nIG5ld1J1bnRpbWVUZXh0ID0gQ0xJRU5UX1JVTlRJTUVfUFJFRklYICsgIiAiICsgY2xpZW50UnVudGltZVRleHQ7Ci0JCWhMaW5rQ2xpZW50U2VydmVyXy5zZXRUZXh0KG5ld1NlcnZlclRleHQpOwotCQloTGlua0NsaWVudFJ1bnRpbWVfLnNldFRleHQobmV3UnVudGltZVRleHQpOwotCQkKLQkJLypjaGVjayB0byBzZWUgaWYgdGV4dCBoYXMgY2hhbmdlZCBmb3Igc2VydmVyIG9yIHJ1bnRpbWUKLQkJaWYgc28sIHJlcGFpbnQgbGlua3MgKi8KLQkJaWYgKCFuZXdTZXJ2ZXJUZXh0LmVxdWFscyhjdXJyZW50U2VydmVyVGV4dCkpCi0JCXsKLQkJCWhMaW5rQ2xpZW50U2VydmVyXy5wYWNrKHRydWUpOwotCQkJcGFja0l0KCk7Ci0JCX0JCQkKLQkJCi0JCWlmICghbmV3UnVudGltZVRleHQuZXF1YWxzKGN1cnJlbnRSdW50aW1lVGV4dCkpCi0JCXsKLQkJCWhMaW5rQ2xpZW50UnVudGltZV8ucGFjayh0cnVlKTsKLQkJCXBhY2tJdCgpOwotCQl9IAkKLQl9Ci0JCi0gICAgaWYgKHByb2plY3REaWFsb2dfICE9IG51bGwpCi0gICAgCXByb2plY3REaWFsb2dfLnNldFR5cGVSdW50aW1lU2VydmVyKGlkc18pOwotICAgIAotCS8vV2hlbiB0aGUgc2VydmVyIGNoYW5nZXMsIHRoZSBzdGF0ZSBvZiBuZWVkRWFyIGNvdWxkIGNoYW5nZS4KLQkvL0lmIHRoZSB0aGUgc2VydmVyIGNoYW5nZSByZXN1bHRzIGluIGEgY2hhbmdlIGluIHRoZSBzdGF0ZSBvZiBuZWVkRWFyLAotCS8vdXBkYXRlIG5lZWRFYXIgYW5kIGNsaWVudEVhclByb2plY3ROYW1lLiAgICAKLSAgICAKLQlWYWxpZGF0aW9uVXRpbHMgdnUgPSBuZXcgVmFsaWRhdGlvblV0aWxzKCk7Ci0JYm9vbGVhbiBvbGROZWVkRWFyID0gZ2V0Q2xpZW50TmVlZEVBUigpOwotCWJvb2xlYW4gY2xpZW50UHJvamVjdE9yUHJvamVjdFR5cGVOZWVkc0VhcjsKLQotCWlmICghb2xkTmVlZEVhcikgewotCQkJLy8gSWYgYW4gRUFSIHdhcyBub3QgbmVlZGVkIHByZXZpb3VzbHkgaXQgY291bGQgaGF2ZSBiZWVuIGJlY2F1c2Ugb2YKLQkJCS8vIHRoZSBwcm9qZWN0L3Byb2plY3QgdHlwZSBvciB0aGUgc2VydmVyLgotCQkJLy8gSWYgaXQgd2FzIGJlY2F1c2Ugb2YgdGhlIHByb2plY3QvcHJvamVjdCB0eXBlLCBjaGFuZ2luZyB0aGUKLQkJCS8vIHNlcnZlciBzaG91bGQgaGF2ZSBubyBpbXBhY3QKLQkJCS8vIG9uIHRoZSBzdGF0ZSBvZiBuZWVkRWFyLgotCQkJY2xpZW50UHJvamVjdE9yUHJvamVjdFR5cGVOZWVkc0VhciA9IHZ1LnByb2plY3RPclByb2plY3RUeXBlTmVlZHNFYXIoZ2V0Q2xpZW50UHJvamVjdE5hbWUoKSwKLQkJCQkJZ2V0Q2xpZW50Q29tcG9uZW50VHlwZSgpKTsKLQkJfSBlbHNlIHsKLQkJCWNsaWVudFByb2plY3RPclByb2plY3RUeXBlTmVlZHNFYXIgPSB0cnVlOwotCQl9Ci0KLQkJLy8gYm9vbGVhbiBjbGllbnRQcm9qZWN0T3JQcm9qZWN0VHlwZU5lZWRzRWFyID0KLQkJLy8gdnUucHJvamVjdE9yUHJvamVjdFR5cGVOZWVkc0VhcihnZXRDbGllbnRQcm9qZWN0TmFtZSgpLAotCQkvLyBnZXRDbGllbnRDb21wb25lbnRUeXBlKCkpOwotCQlpZiAoY2xpZW50UHJvamVjdE9yUHJvamVjdFR5cGVOZWVkc0VhcikgewotCQkJLy8gQ291bGQgbm90IHJ1bGUgb3V0IG5lZWQgZm9yIGFuIEVhciBmcm9tIHRoZSBwcm9qZWN0L3Byb2plY3QgdHlwZQotCQkJLy8gc28gY2hhbmdpbmcgdGhlIHNlcnZlcgotCQkJLy8gbWF5IGltcGFjdCB0aGUgbmVlZCBmb3IgYW4gRWFyLgotCQkJYm9vbGVhbiBjdXJyZW50U2VydmVyTmVlZHNFYXIgPSB2dS5zZXJ2ZXJOZWVkc0VBUihnZXRUeXBlUnVudGltZVNlcnZlcigpLmdldFNlcnZlcklkKCkpOwotCQkJaWYgKG9sZE5lZWRFYXIgIT0gY3VycmVudFNlcnZlck5lZWRzRWFyKSB7Ci0JCQkJLy8gVXBkYXRlIG5lZWRFYXIgYW5kIHNlcnZpY2VFYXJQcm9qZWN0TmFtZS4KLQkJCQlpZiAoY3VycmVudFNlcnZlck5lZWRzRWFyKSB7Ci0JCQkJCS8vIENhbGN1bGF0ZSBhIHJlYXNvbmFibGUgZGVmYXVsdCBmb3IgdGhlIEVhciBwcm9qZWN0IG5hbWUKLQkJCQkJU3RyaW5nIGVhclByb2plY3ROYW1lID0gRGVmYXVsdGluZ1V0aWxzLmdldERlZmF1bHRFQVJQcm9qZWN0TmFtZShnZXRDbGllbnRQcm9qZWN0TmFtZSgpKTsKLQkJCQkJc2V0Q2xpZW50TmVlZEVBUihjdXJyZW50U2VydmVyTmVlZHNFYXIpOwotCQkJCQlzZXRDbGllbnRFYXJQcm9qZWN0TmFtZShlYXJQcm9qZWN0TmFtZSk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJc2V0Q2xpZW50TmVlZEVBUihjdXJyZW50U2VydmVyTmVlZHNFYXIpOwotCQkJCQlzZXRDbGllbnRFYXJQcm9qZWN0TmFtZSgiIik7Ci0JCQkJfQotCi0JCQl9Ci0JCX0JCSAgICAKLSAgfQotICAKLSAgcHVibGljIFR5cGVSdW50aW1lU2VydmVyIGdldFR5cGVSdW50aW1lU2VydmVyKCkKLSAgewotICAgIHJldHVybiBpZHNfOyAgCi0gIH0KLSAgICAgIAotICBwdWJsaWMgYm9vbGVhbiBnZXRHZW5lcmF0ZVByb3h5KCkKLSAgewotCSAgcmV0dXJuIGdldENsaWVudEdlbmVyYXRpb24oKSA8PSBTY2VuYXJpb0NvbnRleHQuV1NfREVWRUxPUDsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0RGV2ZWxvcENsaWVudCgpIHsKLQkgIHJldHVybiBkZXZlbG9wQ2xpZW50XzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldERldmVsb3BDbGllbnQoYm9vbGVhbiBkZXZlbG9wQ2xpZW50KSB7Ci0JICB0aGlzLmRldmVsb3BDbGllbnRfID0gZGV2ZWxvcENsaWVudDsKLSAgfQkKLQotICBwdWJsaWMgYm9vbGVhbiBnZXRBc3NlbWJsZUNsaWVudCgpIHsKLQkgIHJldHVybiBhc3NlbWJsZUNsaWVudF87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRBc3NlbWJsZUNsaWVudChib29sZWFuIGFzc2VtYmxlQ2xpZW50KSB7Ci0JICB0aGlzLmFzc2VtYmxlQ2xpZW50XyA9IGFzc2VtYmxlQ2xpZW50OwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZ2V0RGVwbG95Q2xpZW50KCkgewotCSAgcmV0dXJuIGRlcGxveUNsaWVudF87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXREZXBsb3lDbGllbnQoYm9vbGVhbiBkZXBsb3lDbGllbnQpIHsKLQkgIHRoaXMuZGVwbG95Q2xpZW50XyA9IGRlcGxveUNsaWVudDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0VGVzdENsaWVudChCb29sZWFuIHZhbHVlKQotICB7Ci0JICB0ZXN0Q2xpZW50XyA9IHZhbHVlOwotICB9Ci0gIAotICBwdWJsaWMgQm9vbGVhbiBnZXRUZXN0Q2xpZW50KCkKLSAgewotCSAgcmV0dXJuIHRlc3RDbGllbnRfOwotICB9Ci0gIAotICBwdWJsaWMgQm9vbGVhbiBnZXRJbnN0YWxsQ2xpZW50KCkKLSAgewotCSAgcmV0dXJuIGluc3RhbGxDbGllbnRfOwotICB9Ci0gIAotICBwdWJsaWMgQm9vbGVhbiBnZXRTdGFydENsaWVudCgpCi0gIHsKLQkgIHJldHVybiBzdGFydENsaWVudF87Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEluc3RhbGxDbGllbnQoIEJvb2xlYW4gdmFsdWUgKQotICB7Ci0gICAgICBpbnN0YWxsQ2xpZW50XyA9IHZhbHVlOyAgICAKLSAgfQotICAgIAotICBwdWJsaWMgdm9pZCBzZXRTdGFydENsaWVudCggQm9vbGVhbiB2YWx1ZSApCi0gIHsKLSAgICAgIHN0YXJ0Q2xpZW50XyA9IHZhbHVlOyAgICAKLSAgfQotCi0gIAotCXByaXZhdGUgdm9pZCBsYXVuY2hQcm9qZWN0RGlhbG9nKCkKLQl7Ci0JCVN0cmluZyBjdXJyZW50UHJvamVjdE5hbWUgPSBnZXRDbGllbnRQcm9qZWN0TmFtZSgpOwotCQlTdHJpbmcgY3VycmVudEVhclByb2plY3ROYW1lID0gZ2V0Q2xpZW50RWFyUHJvamVjdE5hbWUoKTsKLQkJU3RyaW5nIGN1cnJlbnRQcm9qZWN0VHlwZSA9IGdldENsaWVudENvbXBvbmVudFR5cGUoKTsKLQkJYm9vbGVhbiBjdXJyZW50TmVlZEVhciA9IGdldENsaWVudE5lZWRFQVIoKTsKLQkJCi0JCXByb2plY3REaWFsb2dfLnNldFByb2plY3ROYW1lKGN1cnJlbnRQcm9qZWN0TmFtZSk7Ci0JCXByb2plY3REaWFsb2dfLnNldEVhclByb2plY3ROYW1lKGN1cnJlbnRFYXJQcm9qZWN0TmFtZSk7Ci0JCXByb2plY3REaWFsb2dfLnNldE5lZWRFQVIoY3VycmVudE5lZWRFYXIpOwkKLQkJcHJvamVjdERpYWxvZ18uc2V0UHJvamVjdENvbXBvbmVudFR5cGUoY3VycmVudFByb2plY3RUeXBlKTsKLQkJCi0JCWludCBzdGF0dXMgPSBwcm9qZWN0RGlhbG9nXy5vcGVuKCk7Ci0JCQotCQlpZiAoc3RhdHVzID09IFdpbmRvdy5PSykKLQkJewotCQkJU3RyaW5nIG5ld1Byb2plY3ROYW1lID0gcHJvamVjdERpYWxvZ18uZ2V0UHJvamVjdE5hbWUoKTsKLQkJCVN0cmluZyBuZXdFYXJQcm9qZWN0TmFtZSA9IHByb2plY3REaWFsb2dfLmdldEVhclByb2plY3ROYW1lKCk7Ci0JCQlTdHJpbmcgbmV3UHJvamVjdFR5cGUgPSBwcm9qZWN0RGlhbG9nXy5nZXRQcm9qZWN0Q29tcG9uZW50VHlwZSgpOwotCQkJYm9vbGVhbiBuZXdOZWVkRWFyID0gcHJvamVjdERpYWxvZ18uZ2V0TmVlZEVBUigpOwkKLQkJCQotCQkJLy9VcGRhdGUgcHJvamVjdCBzZXR0aW5ncyBhbmQgdmFsaWRhdGUgcGFnZSBpZiBzZWxlY3Rpb25zIGNoYW5nZWQuCi0JCQlpZiAoIW5ld1Byb2plY3ROYW1lLmVxdWFscyhjdXJyZW50UHJvamVjdE5hbWUpCi0JCQkJCXx8ICFuZXdFYXJQcm9qZWN0TmFtZS5lcXVhbHMoY3VycmVudEVhclByb2plY3ROYW1lKQotCQkJCQl8fCAhbmV3UHJvamVjdFR5cGUuZXF1YWxzKGN1cnJlbnRQcm9qZWN0VHlwZSkKLQkJCQkJfHwgbmV3TmVlZEVhciAhPSBjdXJyZW50TmVlZEVhcikgewotCQkJCXNldENsaWVudFByb2plY3ROYW1lKG5ld1Byb2plY3ROYW1lKTsKLQkJCQlzZXRDbGllbnRFYXJQcm9qZWN0TmFtZShuZXdFYXJQcm9qZWN0TmFtZSk7Ci0JCQkJc2V0Q2xpZW50TmVlZEVBUihuZXdOZWVkRWFyKTsKLQkJCQlzZXRDbGllbnRDb21wb25lbnRUeXBlKG5ld1Byb2plY3RUeXBlKTsJCQkJCi0JCQkJdmFsaWRhdGlvblN0YXRlXyA9IChuZXcgVmFsaWRhdGlvblV0aWxzKCkpLmdldE5ld1ZhbGlkYXRpb25TdGF0ZSh2YWxpZGF0aW9uU3RhdGVfLCBWYWxpZGF0aW9uVXRpbHMuVkFMSURBVEVfUFJPSkVDVF9DSEFOR0VTKTsKLQkJCQlzdGF0dXNMaXN0ZW5lcl8uaGFuZGxlRXZlbnQobnVsbCk7Ci0JCQl9Ci0JCQkKLQkJCS8qY2hlY2sgdG8gc2VlIGlmIHRleHQgaGFzIGNoYW5nZWQgZm9yIHByb2plY3Qgb3IgRUFSCi0JCQlpZiBzbywgcmVwYWludCBsaW5rcyAqLwotCQkJaWYgKCFuZXdQcm9qZWN0TmFtZS5lcXVhbHMoY3VycmVudFByb2plY3ROYW1lKSkKLQkJCXsKLQkJCQloTGlua0NsaWVudFByb2plY3RfLnBhY2sodHJ1ZSk7Ci0JCQkJcGFja0l0KCk7Ci0JCQl9Ci0JCQlpZiAoIW5ld0VhclByb2plY3ROYW1lLmVxdWFscyhjdXJyZW50RWFyUHJvamVjdE5hbWUpKQotCQkJewotCQkJCWhMaW5rQ2xpZW50RUFSXy5wYWNrKHRydWUpOwotCQkJCXBhY2tJdCgpOwotCQkJfQotCQl9CQkKLQl9Ci0gIAotICBwcml2YXRlIHZvaWQgbGF1bmNoUnVudGltZVNlbGVjdGlvbkRpYWxvZyhib29sZWFuIGNsaWVudENvbnRleHQpIHsKLQkgIGxhdW5jaFJ1bnRpbWVTZWxlY3Rpb25EaWFsb2coY2xpZW50Q29udGV4dCwgZmFsc2UpOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgbGF1bmNoUnVudGltZVNlbGVjdGlvbkRpYWxvZyhib29sZWFuIGNsaWVudENvbnRleHQsIGJvb2xlYW4gc2VsZWN0U2VydmVyRmlyc3QpCi0JewotCSAgICBUeXBlUnVudGltZVNlcnZlciBjdXJyZW50Q2xpZW50VFJTID0gZ2V0VHlwZVJ1bnRpbWVTZXJ2ZXIoKTsKLQkgICAgUnVudGltZVNlcnZlclNlbGVjdGlvbkRpYWxvZyByc3NkID0gbmV3IFJ1bnRpbWVTZXJ2ZXJTZWxlY3Rpb25EaWFsb2coc2hlbGxfLCAoYnl0ZSkxLCBnZXRUeXBlUnVudGltZVNlcnZlcigpLCAiMTQiKTsKLQkgICAgcnNzZC5zZXRTZWxlY3RTZXJ2ZXJGaXJzdChzZWxlY3RTZXJ2ZXJGaXJzdCk7Ci0JICAgIGludCBzdGF0dXMgPSByc3NkLm9wZW4oKTsKLQkJaWYgKHN0YXR1cyA9PSBXaW5kb3cuT0spCi0JCXsKLQkJCVR5cGVSdW50aW1lU2VydmVyIG5ld0NsaWVudFRSUyA9IHJzc2QuZ2V0VHlwZVJ1bnRpbWVTZXJ2ZXIoKTsJCQkKLQkJCWlmICghY3VycmVudENsaWVudFRSUy5lcXVhbHMobmV3Q2xpZW50VFJTKSkKLQkJCXsKLQkJCQlzZXRUeXBlUnVudGltZVNlcnZlcihyc3NkLmdldFR5cGVSdW50aW1lU2VydmVyKCkpOwotCQkJCXZhbGlkYXRpb25TdGF0ZV8gPSAobmV3IFZhbGlkYXRpb25VdGlscygpKS5nZXROZXdWYWxpZGF0aW9uU3RhdGUodmFsaWRhdGlvblN0YXRlXywgVmFsaWRhdGlvblV0aWxzLlZBTElEQVRFX1NFUlZFUl9SVU5USU1FX0NIQU5HRVMpOwotCQkJCXN0YXR1c0xpc3RlbmVyXy5oYW5kbGVFdmVudChudWxsKTsgLy92YWxpZGF0ZSB0aGUgcGFnZQotCQkJfQotCQl9CQkKLQl9Ci0gIAotICAvL1ByaXZhdGUgbWV0aG9kIHNob3VsZCBiZSB1c2VkIHdoZW5ldmVyIGNsaWVudFNjYWxlXyBzZXR0aW5nIGlzIGNoYW5nZWQKLSAgLy9pbnN0ZWFkIG9mIGNhbGxpbmcgY2xpZW50U2NhbGVfLnNldFNlbGVjdGlvbiBkaXJlY3RseS4KLSAgcHJpdmF0ZSB2b2lkIHNldENsaWVudFNjYWxlKGludCBzZXR0aW5nKQotICB7Ci0JICBjbGllbnRTY2FsZV8uc2V0U2VsZWN0aW9uKHNldHRpbmcpOwotCSAgY2xpZW50U2NhbGVTZXR0aW5nXyA9IHNldHRpbmc7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCB2b2lkIGluaXRJbWFnZVJlZ2lzdHJ5KCkKLQl7Ci0JCWltYWdlUmVnXyA9IG5ldyBJbWFnZVJlZ2lzdHJ5KERpc3BsYXkuZ2V0Q3VycmVudCgpKTsKLQkJCi0JCWltYWdlUmVnXy5wdXQoSUNPTl9TQ0FMRV9CR18wLCBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbgotCQkJCS5nZXRJbWFnZURlc2NyaXB0b3IoSUNPTl9TQ0FMRV9CR18wKSk7Ci0JCWltYWdlUmVnXy5wdXQoSUNPTl9TQ0FMRV9CR18xLCBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbgotCQkJCS5nZXRJbWFnZURlc2NyaXB0b3IoSUNPTl9TQ0FMRV9CR18xKSk7Ci0JCWltYWdlUmVnXy5wdXQoSUNPTl9TQ0FMRV9CR18yLCBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbgotCQkJCS5nZXRJbWFnZURlc2NyaXB0b3IoSUNPTl9TQ0FMRV9CR18yKSk7Ci0JCWltYWdlUmVnXy5wdXQoSUNPTl9TQ0FMRV9CR18zLCBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbgotCQkJCS5nZXRJbWFnZURlc2NyaXB0b3IoSUNPTl9TQ0FMRV9CR18zKSk7Ci0JCWltYWdlUmVnXy5wdXQoSUNPTl9TQ0FMRV9CR180LCBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbgotCQkJCS5nZXRJbWFnZURlc2NyaXB0b3IoSUNPTl9TQ0FMRV9CR180KSk7Ci0JCWltYWdlUmVnXy5wdXQoSUNPTl9TQ0FMRV9CR181LCBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbgotCQkJCS5nZXRJbWFnZURlc2NyaXB0b3IoSUNPTl9TQ0FMRV9CR181KSk7Ci0JCWltYWdlUmVnXy5wdXQoSUNPTl9TQ0FMRV9CR182LCBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbgotCQkJCS5nZXRJbWFnZURlc2NyaXB0b3IoSUNPTl9TQ0FMRV9CR182KSk7Ci0JCQotCQlpbWFnZVJlZ18ucHV0KEdSQVBISUNfQ0xJRU5UXzAsIFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luCi0JCQkJLmdldEltYWdlRGVzY3JpcHRvcihHUkFQSElDX0NMSUVOVF8wKSk7Ci0JCWltYWdlUmVnXy5wdXQoR1JBUEhJQ19DTElFTlRfMSwgV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4KLQkJCQkuZ2V0SW1hZ2VEZXNjcmlwdG9yKEdSQVBISUNfQ0xJRU5UXzEpKTsKLQkJaW1hZ2VSZWdfLnB1dChHUkFQSElDX0NMSUVOVF8yLCBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbgotCQkJCS5nZXRJbWFnZURlc2NyaXB0b3IoR1JBUEhJQ19DTElFTlRfMikpOwotCQlpbWFnZVJlZ18ucHV0KEdSQVBISUNfQ0xJRU5UXzMsIFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luCi0JCQkJLmdldEltYWdlRGVzY3JpcHRvcihHUkFQSElDX0NMSUVOVF8zKSk7Ci0JCWltYWdlUmVnXy5wdXQoR1JBUEhJQ19DTElFTlRfNCwgV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4KLQkJCQkuZ2V0SW1hZ2VEZXNjcmlwdG9yKEdSQVBISUNfQ0xJRU5UXzQpKTsKLQkJaW1hZ2VSZWdfLnB1dChHUkFQSElDX0NMSUVOVF81LCBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbgotCQkJCS5nZXRJbWFnZURlc2NyaXB0b3IoR1JBUEhJQ19DTElFTlRfNSkpOwkJCi0JCWltYWdlUmVnXy5wdXQoR1JBUEhJQ19DTElFTlRfNiwgV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4KLQkJCQkuZ2V0SW1hZ2VEZXNjcmlwdG9yKEdSQVBISUNfQ0xJRU5UXzYpKTsKLQl9Ci0gIAotICBwcml2YXRlIHZvaWQgc2V0R3JhcGhpY3MoaW50IHNlbGVjdGlvbikKLSAgewotICAgICBTdHJpbmcgaWNvbkltYWdlID0gIiI7Ci0gICAgIFN0cmluZyB0b3BvbG9neUltYWdlID0gIiI7Ci0gICAgIAotCSAgLy9UT0RPOiBjaGFuZ2UgdGhlIGhhcmQgY29kZWQgaW50ZWdlcnMgaGVyZSB0byB0aGUgdGhlIFNjZW5hcmlvQ29udGV4dC5XU194eHggd2hlbiBpbiBsZXNzIGNyaXRpY2FsIHBoYXNlCi0JICBzd2l0Y2ggKHNlbGVjdGlvbikgewotCQljYXNlIDA6Ci0JCQlpY29uSW1hZ2U9SUNPTl9TQ0FMRV9CR18wOwotCQkJdG9wb2xvZ3lJbWFnZT1HUkFQSElDX0NMSUVOVF8wOwotCQkJY2xpZW50U2NhbGVfLnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fU0NBTEVfVEVTVCk7Ci0JCQlicmVhazsKLQkJY2FzZSAxOgotCQkJaWNvbkltYWdlPUlDT05fU0NBTEVfQkdfMTsKLQkJCXRvcG9sb2d5SW1hZ2U9R1JBUEhJQ19DTElFTlRfMTsKLQkJCWNsaWVudFNjYWxlXy5zZXRUb29sVGlwVGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX1JVTik7Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQkJaWNvbkltYWdlPUlDT05fU0NBTEVfQkdfMjsKLQkJCXRvcG9sb2d5SW1hZ2U9R1JBUEhJQ19DTElFTlRfMjsKLQkJCWNsaWVudFNjYWxlXy5zZXRUb29sVGlwVGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX0lOU1RBTEwpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMzoKLQkJCWljb25JbWFnZT1JQ09OX1NDQUxFX0JHXzM7Ci0JCQl0b3BvbG9neUltYWdlPUdSQVBISUNfQ0xJRU5UXzM7Ci0JCQljbGllbnRTY2FsZV8uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9ERVBMT1kpOwotCQkJYnJlYWs7Ci0JCWNhc2UgNDoKLQkJCWljb25JbWFnZT1JQ09OX1NDQUxFX0JHXzQ7Ci0JCQl0b3BvbG9neUltYWdlPUdSQVBISUNfQ0xJRU5UXzQ7Ci0JCQljbGllbnRTY2FsZV8uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9BU1NFTUJMRSk7Ci0JCQlicmVhazsKLQkJY2FzZSA1OgotCQkJaWNvbkltYWdlPUlDT05fU0NBTEVfQkdfNTsKLQkJCXRvcG9sb2d5SW1hZ2U9R1JBUEhJQ19DTElFTlRfNTsKLQkJCWNsaWVudFNjYWxlXy5zZXRUb29sVGlwVGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX0RFVkVMT1ApOwotCQkJYnJlYWs7Ci0JCWNhc2UgNjoJCQkKLQkJCWlmICghY2xpZW50T25seV8pCi0JCQl7Ci0JCQkJaWYgKGVuYWJsZVByb3h5XykgIC8vaWYgc2VydmljZSBpcyBpbnN0YWxsIHJ1biBvciB0ZXN0Li4uCi0JCQkJCWljb25JbWFnZT1JQ09OX1NDQUxFX0JHXzY7ICAKLQkJCQllbHNlCi0JCQkJCWljb25JbWFnZT1udWxsOwotCQkJCXRvcG9sb2d5SW1hZ2U9R1JBUEhJQ19DTElFTlRfNjsKLQkJCQljbGllbnRTY2FsZV8uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9DTElFTlQpOwotCQkJfQotCQkJZWxzZQotCQkJewotCQkJCXNldENsaWVudFNjYWxlKFNjZW5hcmlvQ29udGV4dC5XU19ERVZFTE9QKTsgLy8ibm8gc2VsZWN0aW9uIiBpcyBub3QgYWxsb3dlZC4uLm11c3QgZGV2ZWxvcCBjbGllbnQgQCBtaW5pbXVtCi0JCQkJaWNvbkltYWdlPUlDT05fU0NBTEVfQkdfNTsKLQkJCQl0b3BvbG9neUltYWdlPUdSQVBISUNfQ0xJRU5UXzU7CQkJCQotCQkJCWNsaWVudFNjYWxlXy5zZXRUb29sVGlwVGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX0RFVkVMT1ApOwkJCQotCQkJfQotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCQljbGllbnRTY2FsZV8uc2V0QmFja2dyb3VuZEltYWdlKGltYWdlUmVnXy5nZXQoaWNvbkltYWdlKSk7Ci0JCXRvcG9sb2d5U3BvdF8uc2V0SW1hZ2UoaW1hZ2VSZWdfLmdldCh0b3BvbG9neUltYWdlKSk7CQotICB9Ci0gIAotCXB1YmxpYyBJU3RydWN0dXJlZFNlbGVjdGlvbiBnZXRPYmplY3RTZWxlY3Rpb24oKQotCXsKLQkJcmV0dXJuIG9iamVjdFNlbGVjdGlvbl87CQkKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0T2JqZWN0U2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikKLQl7Ci0gICAgICAgIG9iamVjdFNlbGVjdGlvbl8gPSBzZWxlY3Rpb247Ci0JfQotCQotICBwdWJsaWMgaW50IGdldENsaWVudEdlbmVyYXRpb24oKQotICB7Ci0JICByZXR1cm4gY2xpZW50U2NhbGVTZXR0aW5nXzsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50R2VuZXJhdGlvbihpbnQgdmFsdWUpCi0gIHsKLQkgIGlmIChjbGllbnRPbmx5XyAmJiB2YWx1ZSA9PSBTY2VuYXJpb0NvbnRleHQuV1NfTk9ORSkgewotCQkgIHZhbHVlID0gU2NlbmFyaW9Db250ZXh0LldTX0RFVkVMT1A7Ci0JCSAgc2V0RGV2ZWxvcENsaWVudCh0cnVlKTsKLQkgIH0KLQkKLQkgIGNsaWVudFNjYWxlU2V0dGluZ18gPSB2YWx1ZTsKLQkgIHNldENsaWVudFNjYWxlKHZhbHVlKTsKLQkgIAkgIAotCSAgc2V0R3JhcGhpY3ModmFsdWUpOwotCSAgc2hvd1N1bW1hcnkodmFsdWUgPCBTY2VuYXJpb0NvbnRleHQuV1NfTk9ORSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFByb2plY3QoSVByb2plY3QgcHJvamVjdCkKLSAgewotCSAgcHJvamVjdF8gPSBwcm9qZWN0OwotICB9Ci0gIAotICBwdWJsaWMgSVByb2plY3QgZ2V0UHJvamVjdCgpCi0gIHsKLQkgIHJldHVybiBwcm9qZWN0XzsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRDbGllbnRSdW50aW1lSWQoKQotICB7Ci0JICAvLyBjYWxjdWxhdGUgdGhlIG1vc3QgYXBwcm9wcmlhdGUgY2xpZW50UnVudGltZUlkIGJhc2VkIG9uIGN1cnJlbnQgc2V0dGluZ3MuCi0JICByZXR1cm4gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0Q2xpZW50UnVudGltZUlkKGdldFR5cGVSdW50aW1lU2VydmVyKCksIGdldENsaWVudFByb2plY3ROYW1lKCksIGdldENsaWVudENvbXBvbmVudFR5cGUoKSk7ICAgCi0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50Q29tcG9uZW50VHlwZShTdHJpbmcgdHlwZSkKLSAgewotCSAgY2xpZW50Q29tcG9uZW50VHlwZV89IHR5cGU7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldENsaWVudENvbXBvbmVudFR5cGUoKQotICB7Ci0JICByZXR1cm4gY2xpZW50Q29tcG9uZW50VHlwZV87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRQcm9qZWN0TmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgIHByb2plY3ROYW1lXyA9IG5hbWU7ICAgICAgCi0JaExpbmtDbGllbnRQcm9qZWN0Xy5zZXRUZXh0KENMSUVOVF9QUk9KRUNUX1BSRUZJWCArICIgIiArIHByb2plY3ROYW1lXyk7CQotCWhMaW5rQ2xpZW50UHJvamVjdF8ucGFjayh0cnVlKTsgICAKLQlwYWNrSXQoKTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRDbGllbnRQcm9qZWN0TmFtZSgpCi0gIHsgIAotCSAgaWYgKHByb2plY3ROYW1lXyA9PSBudWxsKQotCQkgIHJldHVybiAiIjsKLQkgIHJldHVybiBwcm9qZWN0TmFtZV87Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudEVhclByb2plY3ROYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gICAgZWFyUHJvamVjdE5hbWVfID0gbmFtZTsgIAotICAgIHJlZnJlc2hFQVJMaW5rKCk7Ci0gICAJCSAgIAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCByZWZyZXNoRUFSTGluaygpCi0gIHsKLQkgIGhMaW5rQ2xpZW50RUFSXy5zZXRWaXNpYmxlKG5lZWRFYXJfICYmIGdldEdlbmVyYXRlUHJveHkoKSk7Ci0JICBpZiAobmVlZEVhcl8pCi0JICB7ICAgIAkKLQkJICBoTGlua0NsaWVudEVBUl8uc2V0VGV4dChDTElFTlRfRUFSX1BSRUZJWCArICIgIiArIGVhclByb2plY3ROYW1lXyk7Ci0JCSAgaExpbmtDbGllbnRFQVJfLnBhY2sodHJ1ZSk7IAotCQkgIHBhY2tJdCgpOwotCSAgfSAgCi0gIH0KLQkgICAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q2xpZW50RWFyUHJvamVjdE5hbWUoKQotICB7Ci0JICBpZiAoZWFyUHJvamVjdE5hbWVfID09IG51bGwpCi0JCSAgcmV0dXJuICIiOwotICAgICByZXR1cm4gZWFyUHJvamVjdE5hbWVfOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudE5lZWRFQVIoYm9vbGVhbiBiKQotICB7Ci0gICAgIG5lZWRFYXJfID0gYjsKLSAgICAgcmVmcmVzaEVBUkxpbmsoKTsKLSAgfSAKLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldENsaWVudE5lZWRFQVIoKQotICB7Ci0gICAgIHJldHVybiBuZWVkRWFyXzsKLSAgfSAKLSAgCi0gIHB1YmxpYyBXZWJTZXJ2aWNlc1BhcnNlciBnZXRXZWJTZXJ2aWNlc1BhcnNlcigpCi0JewotCQlyZXR1cm4gcGFyc2VyXzsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0V2ViU2VydmljZXNQYXJzZXIoV2ViU2VydmljZXNQYXJzZXIgcGFyc2VyKQotCXsKLQkJcGFyc2VyXyA9IHBhcnNlcjsJCQotCX0KLSAgCi0gICAgLy9mb3IgdGhlIHB1cnBvc2VzIG9mIGRpc2FibGluZyB0aGUgc2VydmljZSBpbXBsZW1lbnRhdGlvbiBjb250cm9scyBmcm9tIHRoZSBwcmVmZXJlbmNlcyBkaWFsb2cKLQlwdWJsaWMgdm9pZCBkaXNhYmxlTm9uUHJlZmVyZW5jZVdpZGdldHMoKQotCXsKLQkJaWYgKGhDb21wQ2xpZW50XyAhPSBudWxsKQotCQl7Ci0JCQloQ29tcENsaWVudF8uc2V0VmlzaWJsZShmYWxzZSk7CQkJCi0JCX0KLQl9Ci0JCi0JcHVibGljIGludCBnZXRWYWxpZGF0aW9uU3RhdGUoKQotCXsKLQkJcmV0dXJuIHZhbGlkYXRpb25TdGF0ZV87Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldFZhbGlkYXRpb25TdGF0ZShpbnQgc3RhdGUpCi0JewotCQl2YWxpZGF0aW9uU3RhdGVfID0gc3RhdGU7Ci0JfQotCQkKLQlwdWJsaWMgSVN0YXR1cyBjaGVja01pc3NpbmdGaWVsZFN0YXR1cygpIHsKLQotCQlWYWxpZGF0aW9uVXRpbHMgdmFsVXRpbHMgPSBuZXcgVmFsaWRhdGlvblV0aWxzKCk7Ci0JCVN0cmluZyBydW50aW1lSWQgPSBnZXRUeXBlUnVudGltZVNlcnZlcigpLmdldFJ1bnRpbWVJZCgpOwotCQlTdHJpbmcgc2VydmVySWQgPSBnZXRUeXBlUnVudGltZVNlcnZlcigpLmdldFNlcnZlcklkKCk7Ci0JCVN0cmluZyBwcm9qZWN0TmFtZSA9IGdldENsaWVudFByb2plY3ROYW1lKCk7Ci0JCWJvb2xlYW4gbmVlZEVhciA9IGdldENsaWVudE5lZWRFQVIoKTsKLQkJU3RyaW5nIGVhclByb2plY3ROYW1lID0gZ2V0Q2xpZW50RWFyUHJvamVjdE5hbWUoKTsKLQkJU3RyaW5nIHByb2plY3RUeXBlSWQgPSBnZXRDbGllbnRDb21wb25lbnRUeXBlKCk7Ci0JCUlTdGF0dXMgbWlzc2luZ0ZpZWxkU3RhdHVzID0gdmFsVXRpbHMuY2hlY2tNaXNzaW5nRmllbGRTdGF0dXModmFsaWRhdGlvblN0YXRlXywgbnVsbCwgbnVsbCwgcnVudGltZUlkLCBzZXJ2ZXJJZCwKLQkJCQlwcm9qZWN0TmFtZSwgbmVlZEVhciwgZWFyUHJvamVjdE5hbWUsIHByb2plY3RUeXBlSWQsIHRydWUpOwotCQlyZXR1cm4gbWlzc2luZ0ZpZWxkU3RhdHVzOwotCX0KLQotCXB1YmxpYyBJU3RhdHVzIGNoZWNrRXJyb3JTdGF0dXMoKSB7Ci0KLQkJVmFsaWRhdGlvblV0aWxzIHZhbFV0aWxzID0gbmV3IFZhbGlkYXRpb25VdGlscygpOwotCQlTdHJpbmcgcnVudGltZUlkID0gZ2V0VHlwZVJ1bnRpbWVTZXJ2ZXIoKS5nZXRSdW50aW1lSWQoKTsKLQkJU3RyaW5nIHNlcnZlcklkID0gZ2V0VHlwZVJ1bnRpbWVTZXJ2ZXIoKS5nZXRTZXJ2ZXJJZCgpOwotCQlTdHJpbmcgdHlwZUlkID0gZ2V0VHlwZVJ1bnRpbWVTZXJ2ZXIoKS5nZXRUeXBlSWQoKTsKLQkJU3RyaW5nIHByb2plY3ROYW1lID0gZ2V0Q2xpZW50UHJvamVjdE5hbWUoKTsKLQkJYm9vbGVhbiBuZWVkRWFyID0gZ2V0Q2xpZW50TmVlZEVBUigpOwotCQlTdHJpbmcgZWFyUHJvamVjdE5hbWUgPSBnZXRDbGllbnRFYXJQcm9qZWN0TmFtZSgpOwotCQlTdHJpbmcgcHJvamVjdFR5cGVJZCA9IGdldENsaWVudENvbXBvbmVudFR5cGUoKTsKLQkJSVN0YXR1cyBwb3NzaWJsZUVycm9yU3RhdHVzID0gdmFsVXRpbHMuY2hlY2tFcnJvclN0YXR1cyh2YWxpZGF0aW9uU3RhdGVfLCB0eXBlSWQsIHJ1bnRpbWVJZCwgc2VydmVySWQsCi0JCQkJcHJvamVjdE5hbWUsIG5lZWRFYXIsIGVhclByb2plY3ROYW1lLCBwcm9qZWN0VHlwZUlkLCB0cnVlKTsKLQkJcmV0dXJuIHBvc3NpYmxlRXJyb3JTdGF0dXM7Ci0JfQotCi0JcHVibGljIElTdGF0dXMgY2hlY2tXYXJuaW5nU3RhdHVzKCkgewotCQlWYWxpZGF0aW9uVXRpbHMgdmFsVXRpbHMgPSBuZXcgVmFsaWRhdGlvblV0aWxzKCk7Ci0KLQkJaW50IHNjYWxlU2V0dGluZyA9IGdldENsaWVudEdlbmVyYXRpb24oKTsKLQkJU3RyaW5nIHNlcnZlcklkID0gZ2V0VHlwZVJ1bnRpbWVTZXJ2ZXIoKS5nZXRTZXJ2ZXJJZCgpOwotCQlJU3RhdHVzIHdhcm5pbmdTdGF0dXMgPSB2YWxVdGlscy5jaGVja1dhcm5pbmdTdGF0dXModmFsaWRhdGlvblN0YXRlXywgc2NhbGVTZXR0aW5nLCBzZXJ2ZXJJZCwgdHJ1ZSk7Ci0JCXJldHVybiB3YXJuaW5nU3RhdHVzOwotCX0JCi0JCi0JCi0gIHByaXZhdGUgY2xhc3MgU2NhbGVTZWxlY3Rpb25MaXN0ZW5lciBpbXBsZW1lbnRzIFNlbGVjdGlvbkxpc3RlbmVyCi0JewotCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JCQkgICAgaW50IG9sZENsaWVudFNjYWxlU2V0dGluZyA9IGNsaWVudFNjYWxlU2V0dGluZ187Ci0JCQkgICAgCi0JCQkJc2V0R3JhcGhpY3MoKChTY2FsZSllLndpZGdldCkuZ2V0U2VsZWN0aW9uKCkpOwotCQkJCQotCQkJCWludCBzZWxlY3Rpb24gPSBjbGllbnRTY2FsZV8uZ2V0U2VsZWN0aW9uKCk7Ci0JCQkJc2V0Q2xpZW50R2VuZXJhdGlvbihzZWxlY3Rpb24pOwotCQkJICAgIAotCQkJICAgIHNldERldmVsb3BDbGllbnQoc2VsZWN0aW9uIDw9IFNjZW5hcmlvQ29udGV4dC5XU19ERVZFTE9QKTsKLQkJCQlzZXRBc3NlbWJsZUNsaWVudChzZWxlY3Rpb24gPD0gU2NlbmFyaW9Db250ZXh0LldTX0FTU0VNQkxFKTsKLQkJCQlzZXREZXBsb3lDbGllbnQoc2VsZWN0aW9uIDw9IFNjZW5hcmlvQ29udGV4dC5XU19ERVBMT1kpOwotCQkJICAgIHNldFRlc3RDbGllbnQobmV3IEJvb2xlYW4oc2VsZWN0aW9uIDw9IFNjZW5hcmlvQ29udGV4dC5XU19URVNUKSk7Ci0JCQkJc2V0SW5zdGFsbENsaWVudChuZXcgQm9vbGVhbihzZWxlY3Rpb24gPD0gU2NlbmFyaW9Db250ZXh0LldTX0lOU1RBTEwpKTsKLQkJCQlzZXRTdGFydENsaWVudChuZXcgQm9vbGVhbihzZWxlY3Rpb24gPD0gU2NlbmFyaW9Db250ZXh0LldTX1NUQVJUKSk7Ci0JCQkJCi0JCQkJLy9kaXNhYmxlIHRoZSBjbGllbnQgc2V0dGluZ3MgaWYgdGhlIGNsaWVudCBzY2VuYXJpbyBzZXR0aW5nIGlzbid0IGF0IGxlYXN0ICJERVZFTE9QIgotCQkJCWJvb2xlYW4gZ2VuZXJhdGUgPSBzZWxlY3Rpb248PVNjZW5hcmlvQ29udGV4dC5XU19ERVZFTE9QOwotCQkJCXNob3dTdW1tYXJ5KGdlbmVyYXRlKTsKLQkJCQkKLQkJCQkKLQkJCQkvL1doZW4gY2xpZW50IHNsaWRlciBtb3ZlcyBvdXQgb2YgdGhlICJXU19OT05FIiBzdGF0ZSwgVkFMSURBVEVfQUxMIHNob3VsZCBiZSBkb25lLiAKLQkJCQkvL090aGVyd2lzZSwgVkFMSURBVEVfU0NBTEVfQ0hBTkdFUyBpcyBzdWZmaWNpZW50LgotCQkJCWlmIChvbGRDbGllbnRTY2FsZVNldHRpbmc9PVNjZW5hcmlvQ29udGV4dC5XU19OT05FICYmIGNsaWVudFNjYWxlU2V0dGluZ18hPVNjZW5hcmlvQ29udGV4dC5XU19OT05FKQotCQkJCXsKLQkJCQkJdmFsaWRhdGlvblN0YXRlXyA9IFZhbGlkYXRpb25VdGlscy5WQUxJREFURV9BTEw7Ci0JCQkJfQotCQkJCWVsc2UKLQkJCQl7Ci0JCQkJCXZhbGlkYXRpb25TdGF0ZV8gPSAobmV3IFZhbGlkYXRpb25VdGlscygpKS5nZXROZXdWYWxpZGF0aW9uU3RhdGUodmFsaWRhdGlvblN0YXRlXywgVmFsaWRhdGlvblV0aWxzLlZBTElEQVRFX1NDQUxFX0NIQU5HRVMpOwkKLQkJCQl9CQkJCQotCQkJCXN0YXR1c0xpc3RlbmVyXy5oYW5kbGVFdmVudChudWxsKTsgLy92YWxpZGF0ZSB0aGUgcGFnZQotCQkJfQotCQkKLQotCQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgewotCQkJd2lkZ2V0U2VsZWN0ZWQoZSk7Ci0JCX0KLQl9IAotICAKLSAgcHJpdmF0ZSB2b2lkIHJlZnJlc2hTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uKCkKLQl7CQkKLQkJLy9uZXcgdXAgU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kCi0JCUNsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZCBjbGllbnRSVERlZmF1bHRDbWQgPSBuZXcgQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kKCk7Ci0JCQotCQkgIC8vY2FsbCBzZXR0ZXJzIG9mIG5ldyBkZWZhdWx0aW5nIGNvbW1hbmQ6Ci0JCSAgY2xpZW50UlREZWZhdWx0Q21kLnNldENsaWVudEluaXRpYWxTZWxlY3Rpb24oZ2V0T2JqZWN0U2VsZWN0aW9uKCkpOwotCQkgIGNsaWVudFJURGVmYXVsdENtZC5zZXRDbGllbnRJbml0aWFsUHJvamVjdChnZXRQcm9qZWN0KCkpOwkgICAgICAKLQkgICAgICBjbGllbnRSVERlZmF1bHRDbWQuc2V0Q2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIoZ2V0VHlwZVJ1bnRpbWVTZXJ2ZXIoKSk7Ci0JCSAgY2xpZW50UlREZWZhdWx0Q21kLnNldFdlYlNlcnZpY2VzUGFyc2VyKGdldFdlYlNlcnZpY2VzUGFyc2VyKCkpOyAgICAgCi0JICAgICAgY2xpZW50UlREZWZhdWx0Q21kLnNldENsaWVudEVhclByb2plY3ROYW1lKGdldENsaWVudEVhclByb2plY3ROYW1lKCkpOwotCQkgIAkJICAKLQkJICBjbGllbnRSVERlZmF1bHRDbWQuZXhlY3V0ZShudWxsLCBudWxsKTsKLQkJICAKLQkJICAvL3BlcmZvcm0gbWFwcGluZ3MgZnJvbSB0aGUgZGVmYXVsdGluZyBjb21tYW5kIHRvIHRoZSBwcm9qZWN0IHNldHRpbmdzLi4uCQotCQkgIHNldENsaWVudFByb2plY3ROYW1lKGNsaWVudFJURGVmYXVsdENtZC5nZXRDbGllbnRQcm9qZWN0TmFtZSgpKTsKLQkJICBzZXRDbGllbnRFYXJQcm9qZWN0TmFtZShjbGllbnRSVERlZmF1bHRDbWQuZ2V0Q2xpZW50RWFyUHJvamVjdE5hbWUoKSk7Ci0JCSAgc2V0Q2xpZW50Q29tcG9uZW50VHlwZShjbGllbnRSVERlZmF1bHRDbWQuZ2V0Q2xpZW50Q29tcG9uZW50VHlwZSgpKTsKLQkJICBzZXRUeXBlUnVudGltZVNlcnZlcihjbGllbnRSVERlZmF1bHRDbWQuZ2V0Q2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIoKSk7Ci0gICAgICAgICAgc2V0Q2xpZW50TmVlZEVBUihjbGllbnRSVERlZmF1bHRDbWQuZ2V0Q2xpZW50TmVlZEVBUigpKTsKLQl9Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9iaW5kaW5nL0NsaWVudFdpZGdldEJpbmRpbmcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9iaW5kaW5nL0NsaWVudFdpZGdldEJpbmRpbmcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNmN2NhZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvYmluZGluZy9DbGllbnRXaWRnZXRCaW5kaW5nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjA0IDEyNDQwOCAgICByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIgICAgICAgICAgCi0gKiAyMDA2MDIwNCAxMjE2MDUgICAgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDIyMSAxMTkxMTEgICAgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDIyMyAxMjkwMjAgICAgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDQwNiAxMzUzNTAgICAga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNDA3IDEzNTQxNSAgICByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNDI1IDEzODA1MiAgICBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA1MTcgMTQxODgwICAgIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDYwNTI0ICAgMTQyNjM1IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqIDIwMDYwNTI5ICAgMTQxNDIyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDUzMCAgIDE0NDM1OCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA1MzAgICAxNDE0MjIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNzE3ICAgMTQ2MzMyIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrCi0gKiAyMDA2MDcyOCAgIDE0NTQyNiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA4MjEgICAxNTM4MzMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIEFsbG93IHRoZSBXZWIgU2VydmljZSBUZXN0IGV4dGVuc2lvbiBwb2ludCB0byBzcGVjaWZ5IHRoZSBzdXBwb3J0ZWQgY2xpZW50IHJ1bnRpbWUKLSAqIDIwMDYwODI1ICAgMTU1MTE0IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDcwNTAyICAgMTgwMzA0IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5iaW5kaW5nOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uLkdldE1vbml0b3JDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQuQ2hlY2tGb3JTZXJ2aWNlUHJvamVjdENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQuZGF0YS5FY2xpcHNlSVBhdGgyVVJMU3RyaW5nVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1vbi5GaW5pc2hGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbW9uLlNjZW5hcmlvQ2xlYW51cENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmV4dGVuc2lvbi5DbGllbnRSb290RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmV4dGVuc2lvbi5QcmVDbGllbnREZXZlbG9wQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5DbGllbnRXaXphcmRXaWRnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuQ2xpZW50V2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5XU0RMU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9ucy5DbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zLkNsaWVudEV4dGVuc2lvbkZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnMuQ2xpZW50RXh0ZW5zaW9uT3V0cHV0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5ydW50aW1lLkNsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0LkNsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5DbGllbnRUZXN0RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5DbGllbnRUZXN0V2lkZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3QuRmluaXNoRGVmYXVsdENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5GaW5pc2hUZXN0RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5UZXN0RGVmYXVsdGluZ0ZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3QuV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2VxdWVuY2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TaW1wbGVGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5DYW5GaW5pc2hSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5TZWxlY3Rpb25Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXh0ZW5zaW9ucy5Bc3NlbWJsZUNsaWVudEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHRlbnNpb25zLkRlcGxveUNsaWVudEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHRlbnNpb25zLkRldmVsb3BDbGllbnRGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXh0ZW5zaW9ucy5JbnN0YWxsQ2xpZW50RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4dGVuc2lvbnMuUnVuQ2xpZW50RnJhZ21lbnQ7Ci0KLQotcHVibGljIGNsYXNzIENsaWVudFdpZGdldEJpbmRpbmcgaW1wbGVtZW50cyBDb21tYW5kV2lkZ2V0QmluZGluZwoteyAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNjcmVhdGUoKQotICAgKi8KLSAgcHVibGljIENvbW1hbmRGcmFnbWVudEZhY3RvcnkgY3JlYXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgQ29tbWFuZEZyYWdtZW50RmFjdG9yeSgpCi0gICAgICAgICAgIHsKLSAgICAgICAgICAgICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50IGNyZWF0ZSgpCi0gICAgICAgICAgICAgewotICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDbGllbnRSb290Q29tbWFuZEZyYWdtZW50KCk7ICAKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIH07Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJDYW5GaW5pc2gob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ2FuRmluaXNoUmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlckNhbkZpbmlzaChDYW5GaW5pc2hSZWdpc3RyeSBjYW5GaW5pc2hSZWdpc3RyeSkKLSAgewotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI3JlZ2lzdGVyRGF0YU1hcHBpbmdzKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKERhdGFNYXBwaW5nUmVnaXN0cnkgZGF0YVJlZ2lzdHJ5KQotICB7IAotCSAgLy9qdmggbWFwcGluZyBmb3IgaW5pdGlhbHNlbGVjdGlvbj8/Pz8KLQkgIAotICAgIC8vIEJlZm9yZSBDbGllbnRXaXphcmRXaWRnZXQKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFR5cGVSdW50aW1lU2VydmVyIiwgQ2xpZW50V2l6YXJkV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkluc3RhbGxDbGllbnQiLCBDbGllbnRXaXphcmRXaWRnZXQuY2xhc3MgKTsgICAgCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJUZXN0U2VydmljZSIsIENsaWVudFdpemFyZFdpZGdldC5jbGFzcyApOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiTW9uaXRvclNlcnZpY2UiLCBDbGllbnRXaXphcmRXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50R2VuZXJhdGlvbiIsIENsaWVudFdpemFyZFdpZGdldC5jbGFzcyApOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiUmVzb3VyY2VDb250ZXh0IiwgQ2xpZW50V2l6YXJkV2lkZ2V0LmNsYXNzICk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJEZXZlbG9wQ2xpZW50IiwgQ2xpZW50V2l6YXJkV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkFzc2VtYmxlQ2xpZW50IiwgQ2xpZW50V2l6YXJkV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkRlcGxveUNsaWVudCIsIENsaWVudFdpemFyZFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTdGFydENsaWVudCIsIENsaWVudFdpemFyZFdpZGdldC5jbGFzcyk7Ci0gICAgCi0gICAgLy8gQWZ0ZXIgQ2xpZW50V2l6YXJkV2lkZ2V0Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0LmNsYXNzLCAiQ2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIiLCBDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXQuY2xhc3MsICJJbnN0YWxsQ2xpZW50IiwgQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0LmNsYXNzLCAiVGVzdFNlcnZpY2UiLCBDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXQuY2xhc3MsICJNb25pdG9yU2VydmljZSIsIENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldC5jbGFzcywgIlJlc291cmNlQ29udGV4dCIsIENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldC5jbGFzcywgIkNsaWVudFByb2plY3ROYW1lIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldC5jbGFzcywgIkRldmVsb3BDbGllbnQiLCBDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXQuY2xhc3MsICJBc3NlbWJsZUNsaWVudCIsIENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldC5jbGFzcywgIkRlcGxveUNsaWVudCIsIENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldC5jbGFzcywgIlN0YXJ0Q2xpZW50IiwgQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0KLSAgICAvL2p2aCBhZGRlZC4uCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0LmNsYXNzLCAiUHJvamVjdCIsIENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldC5jbGFzcywgIldlYlNlcnZpY2VzUGFyc2VyIiwgQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0LmNsYXNzLCAiV3NkbFVSSSIsIENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgICAgICAgICAgCi0gICAgLy9qdmggLSByZXJvdXRlZCB0aGUgZGVmYXVsdGluZyBjb21tYW5kIHRvIHRoZSBDbGllbnRXaXphcmRXaWRnZXQgCi0gICAgLy8gQmVmb3JlIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXQKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRUeXBlUnVudGltZVNlcnZlciIsIENsaWVudFdpemFyZFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdE5hbWUiLCBDbGllbnRXaXphcmRXaWRnZXQuY2xhc3MpOyAgICAKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRFYXJQcm9qZWN0TmFtZSIsIENsaWVudFdpemFyZFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50Q29tcG9uZW50VHlwZSIsIENsaWVudFdpemFyZFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50TmVlZEVBUiIsIENsaWVudFdpemFyZFdpZGdldC5jbGFzcyk7ICAgIAotICAgIAotICAgIC8vanZoIC0gcmVyb3V0ZWQgZnJvbSBDbGllbnRXaXphcmRXaWRnZXQgaW5zdGVhZCBvZiBydW50aW1lc2VydmVyd2lkZ2V0LSBhZGQgZ2V0dGVycyB0byBDbGllbnRXaXphcmRXaWRnZXQgZm9yIHRoZW0KLSAgICAvLyBBZnRlciBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0LmNsYXNzLCAiQ2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0LmNsYXNzLCAiQ2xpZW50UnVudGltZUlkIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldC5jbGFzcywgIkNsaWVudFByb2plY3ROYW1lIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldC5jbGFzcywgIkNsaWVudEVhclByb2plY3ROYW1lIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOyAKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXQuY2xhc3MsICJDbGllbnRDb21wb25lbnRUeXBlIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldC5jbGFzcywgIkNsaWVudE5lZWRFQVIiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICAgIAotICAgIC8vIEJlZm9yZSBXU0RMU2VsZWN0aW9uV2lkZ2V0V3JhcHBlcgotICAgIC8vIGp2aCAtIHJlcm91dGVkIHRoZXNlIHRvIENsaWVudFdpemFyZFdpZGdldCAgCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV1NETFNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZVVSSSIsIENsaWVudFdpemFyZFdpZGdldC5jbGFzcyApOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdTRExTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlByb2plY3QiLCBDbGllbnRXaXphcmRXaWRnZXQuY2xhc3MgKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXU0RMU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDb21wb25lbnROYW1lIiwgQ2xpZW50V2l6YXJkV2lkZ2V0LmNsYXNzICk7Ci0gICAgCi0vKiAgICAvLyBBZnRlciBXU0RMU2VsZWN0aW9uV2lkZ2V0V3JhcHBlcgotICAgIC8vanZoIC0gcmVyb3V0ZSB0aGVzZSBmcm9tIHRoZSBkaWFsb2cgdG8gQ2xpZW50V2l6YXJkV2lkZ2V0IC0gY2FsbCBzZXR0ZXJzIG9uIHRoZSBvdGhlciBkaWFsb2dzLi4uCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV1NETFNlbGVjdGlvbldpZGdldFdyYXBwZXIuY2xhc3MsICJXc2RsVVJJIiwgV1NETFNlbGVjdGlvbk91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdTRExTZWxlY3Rpb25XaWRnZXRXcmFwcGVyLmNsYXNzLCAiV2ViU2VydmljZXNQYXJzZXIiLCBXU0RMU2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV1NETFNlbGVjdGlvbldpZGdldFdyYXBwZXIuY2xhc3MsICJQcm9qZWN0IiwgV1NETFNlbGVjdGlvbk91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdTRExTZWxlY3Rpb25XaWRnZXRXcmFwcGVyLmNsYXNzLCAiQ29tcG9uZW50TmFtZSIsIFdTRExTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmNsYXNzKTsKLSovICAgIAotCWRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiR2VuZXJhdGVQcm94eSIsVGVzdERlZmF1bHRpbmdGcmFnbWVudC5jbGFzcyk7Ci0JZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRSdW50aW1lSWQiLFRlc3REZWZhdWx0aW5nRnJhZ21lbnQuY2xhc3MpOwotCQotICAgIC8vIEJlZm9yZSBDbGllbnQgVGVzdCB3aWRnZXQuCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJUZXN0U2VydmljZSIsRmluaXNoVGVzdEZyYWdtZW50LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlRlc3RTZXJ2aWNlIiwgQ2xpZW50VGVzdFdpZGdldC5jbGFzcyApOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiUnVuVGVzdENsaWVudCIsIEZpbmlzaFRlc3RGcmFnbWVudC5jbGFzcyApOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiUnVuVGVzdENsaWVudCIsIENsaWVudFRlc3RXaWRnZXQuY2xhc3MgKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZWxlY3Rpb25Db21tYW5kLmNsYXNzLCAiSW5pdGlhbFNlbGVjdGlvbiIsIENsaWVudFRlc3RXaWRnZXQuY2xhc3MgKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kLmNsYXNzLCAiU2FtcGxlUHJvamVjdCIsIENsaWVudFRlc3RXaWRnZXQuY2xhc3MgKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kLmNsYXNzLCAiU2FtcGxlUHJvamVjdEVBUiIsIENsaWVudFRlc3RXaWRnZXQuY2xhc3MgKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhUZXN0RGVmYXVsdGluZ0ZyYWdtZW50LmNsYXNzLCAiVGVzdEZhY2lsaXR5IixDbGllbnRUZXN0V2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kLmNsYXNzLCAiRm9sZGVyIixDbGllbnRUZXN0V2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kLmNsYXNzLCAiSnNwRm9sZGVyIixDbGllbnRUZXN0V2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kLmNsYXNzLCAiUnVuVGVzdENsaWVudCIsQ2xpZW50VGVzdFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcywgIk1ldGhvZHMiLENsaWVudFRlc3RXaWRnZXQuY2xhc3MpOwotCi0gICAgLy8gQWZ0ZXIgdGhlIGNsaWVudCB0ZXN0IHdpZGdldCAgIAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFRlc3RXaWRnZXQuY2xhc3MsICJTYW1wbGVQcm9qZWN0RUFSIixGaW5pc2hEZWZhdWx0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50VGVzdFdpZGdldC5jbGFzcywgIlNhbXBsZVByb2plY3QiLEZpbmlzaERlZmF1bHRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRUZXN0V2lkZ2V0LmNsYXNzLCAiVGVzdEZhY2lsaXR5IixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRUZXN0V2lkZ2V0LmNsYXNzLCAiRm9sZGVyIixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRUZXN0V2lkZ2V0LmNsYXNzLCAiSnNwRm9sZGVyIixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRUZXN0V2lkZ2V0LmNsYXNzLCAiUnVuVGVzdENsaWVudCIsQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50VGVzdFdpZGdldC5jbGFzcywgIk1ldGhvZHMiLENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOyAgICAKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRUZXN0V2lkZ2V0LmNsYXNzLCAiVGVzdFNlcnZpY2UiLEZpbmlzaFRlc3RGcmFnbWVudC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50VGVzdFdpZGdldC5jbGFzcywgIlRlc3RJRCIsRmluaXNoVGVzdEZyYWdtZW50LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRUZXN0V2lkZ2V0LmNsYXNzLCAiSXNUZXN0V2lkZ2V0IixGaW5pc2hUZXN0RnJhZ21lbnQuY2xhc3MpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI3JlZ2lzdGVyV2lkZ2V0TWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuV2lkZ2V0UmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlcldpZGdldE1hcHBpbmdzKFdpZGdldFJlZ2lzdHJ5IHdpZGdldFJlZ2lzdHJ5KQotICB7Ci0gICAgICAgCi0gICAgd2lkZ2V0UmVnaXN0cnkuYWRkKCAiQ2xpZW50V2l6YXJkV2lkZ2V0IiwgCi0gICAgCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9USVRMRV9XU19QUk9KRUNULAotICAgICAgICAgICAgICAgICAgICAgICAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfREVTQ19XU19QUk9KRUNULAotCQkJCSAgICAgICAgbmV3IFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSgpCi0JCQkJICAgICAgICB7Ci0JCQkJICAgICAgICAgIHB1YmxpYyBXaWRnZXRDb250cmlidXRvciBjcmVhdGUoKQotCQkJCSAgICAgICAgICB7Ci0JCQkJICAgICAgICAgICAgcmV0dXJuIG5ldyBDbGllbnRXaXphcmRXaWRnZXQoKTsKLQkJCQkgICAgICAgICAgfQotCQkJCSAgICAgICAgfSApOwotICAgIAotICAgIC8vanZoCi0gICAgLyp3aWRnZXRSZWdpc3RyeS5hZGQoICJDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0IiwgCi0gICAgICAgICAgICAgICAgICAgICAgICBDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9USVRMRV9XU19DTElFTlRfUlVOVElNRV9TRUxFQ1RJT04sCi0gICAgICAgICAgICAgICAgICAgICAgICBDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9ERVNDX1dTX0NMSUVOVF9SVU5USU1FX1NFTEVDVElPTiwKLQkJCQkJCW5ldyBXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKQotICAgICAgICAgICAgICAgICAgICAgICAgewotCQkJCQkJICBwdWJsaWMgV2lkZ2V0Q29udHJpYnV0b3IgY3JlYXRlKCkKLQkJCQkJCSAgewotCQkJCQkJICAgIHJldHVybiBuZXcgQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldCgpOwotCQkJCQkJICB9Ci0JCQkJCQl9ICk7Ki8KLSAgICAKLSAgICAvL2p2aAotICAgIC8qd2lkZ2V0UmVnaXN0cnkuYWRkKCAiV1NETFNlbGVjdGlvbldpZGdldFdyYXBwZXIiLCAKLSAgICAgICAgICAgICAgICAgICAgICAgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX1RJVExFX1dTX1NFTEVDVElPTiwKLSAgICAgICAgICAgICAgICAgICAgICAgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX0RFU0NfV1NfU0VMRUNUSU9OLAotCQkgICAgICAgICAgICAgICAgbmV3IFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSgpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0JCSAgICAgICAgICAgICAgICAgIHB1YmxpYyBXaWRnZXRDb250cmlidXRvciBjcmVhdGUoKQotCQkgICAgICAgICAgICAgICAgICB7Ci0JCSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBXU0RMU2VsZWN0aW9uV2lkZ2V0V3JhcHBlcigpOwotCQkgICAgICAgICAgICAgICAgICB9Ci0JCSAgICAgICAgICAgICAgICB9ICk7Ki8KLSAgICAKLSAgICB3aWRnZXRSZWdpc3RyeS5hZGQoICJDbGllbnRUZXN0V2lkZ2V0IiwgCi0gICAgICAgICAgICAgICAgICAgICAgICBDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9USVRMRV9XU19TQU1QTEUsCi0gICAgICAgICAgICAgICAgICAgICAgICBDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9ERVNDX1dTX1NBTVBMRSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgV2lkZ2V0Q29udHJpYnV0b3IgY3JlYXRlKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ2xpZW50VGVzdFdpZGdldCgpOyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgY2xhc3MgQ2xpZW50Um9vdENvbW1hbmRGcmFnbWVudCBleHRlbmRzIFNlcXVlbmNlRnJhZ21lbnQKLSAgewotICAgIHB1YmxpYyBDbGllbnRSb290Q29tbWFuZEZyYWdtZW50KCkKLSAgICB7Ci0gICAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IFNjZW5hcmlvQ2xlYW51cENvbW1hbmQoKSwgIiIgKSk7Ci0gICAgICAKLSAgICAgIC8vYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBDaGVja0Zvck1pc3NpbmdGaWxlcygpLCAiIiApICk7Ci0gICAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kKHRydWUpLCAiIiApICk7Ci0gICAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IFdTRExTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZCgpLCAiIikpOyAvL2p2aCBtb3ZlZCB0aGlzIHVwCi0gICAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZCgpLCAiIikpOyAgLy9qdmggbW92ZWQgdGhpcyB1cCAgICAgIAotICAgICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoICJDbGllbnRXaXphcmRXaWRnZXQiICkgKTsKLQkgIC8vYWRkKCBuZXcgVGVzdENvbW1hbmRGYWN0b3J5RnJhZ21lbnQoKSApOwotICAgICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kKCksICIiICkpOwotICAgICAgCi0gICAgICAvL2FkZCggbmV3IFRlc3RDb21tYW5kRmFjdG9yeUZyYWdtZW50MigpICk7Ci0gICAgICAvL2FkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgQ2hlY2tGb3JTZXJ2aWNlUHJvamVjdENvbW1hbmQoKSwgIiIpKTsKLSAgICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQoIHRydWUgKSwgIiIpKTsKLSAgICAgIC8vYWRkKG5ldyBTaW1wbGVGcmFnbWVudChuZXcgQ2xpZW50U2VydmVyRGVwbG95YWJsZUNvbmZpZ0NvbW1hbmQoZmFsc2UpLCAiIikpOyAvL05vdGU6IGFkZGVkIGhlcmUgZm9yIGNsaWVudCAgICAgIAotICAgICAgLy9hZGQoIG5ldyBDbGllbnRFeHRlbnNpb25GcmFnbWVudCgpICk7Ci0JICBhZGQoIG5ldyBDbGllbnRSb290RnJhZ21lbnQoKSApOwotICAgICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kKCksICIiICkgKTsKLSAgICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KG5ldyBHZXRNb25pdG9yQ29tbWFuZCgpLCAiIikpOwotICAgICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQobmV3IFRlc3REZWZhdWx0aW5nRnJhZ21lbnQoKSwiIikpOwotICAgICAgYWRkKCBuZXcgQ2xpZW50VGVzdEZyYWdtZW50KCAiQ2xpZW50VGVzdFdpZGdldCIpICk7IAotICAgICAgYWRkKG5ldyBGaW5pc2hGcmFnbWVudCgpKTsKLSAgICAgIAotICAgICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBTY2VuYXJpb0NsZWFudXBDb21tYW5kKCksICIiICkpOwotICAgIH0KLSAgICAKLSAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnQjcmVnaXN0ZXJEYXRhTWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5KQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKERhdGFNYXBwaW5nUmVnaXN0cnkgZGF0YVJlZ2lzdHJ5KQotICAgIHsKLSAgICAgIC8vTWFwIFNlbGVjdGlvbkNvbW1hbmQKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlbGVjdGlvbkNvbW1hbmQuY2xhc3MsICJJbml0aWFsU2VsZWN0aW9uIiwgQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSW5pdGlhbEluaXRpYWxTZWxlY3Rpb24iLCBudWxsKTsKLSAgICAgIAotICAgICAgLy8gTWFwIENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kIGNvbW1hbmQuCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFR5cGVSdW50aW1lU2VydmVyIiwgQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkluc3RhbGxDbGllbnQiLCBDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiVGVzdFNlcnZpY2UiLCBDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiUnVuVGVzdENsaWVudCIsIENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJNb25pdG9yU2VydmljZSIsIENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJSZXNvdXJjZUNvbnRleHQiLCBDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiRGV2ZWxvcENsaWVudCIsIENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJBc3NlbWJsZUNsaWVudCIsIENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJEZXBsb3lDbGllbnQiLCBDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU3RhcnRDbGllbnQiLCBDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLQotICAgICAgCi0gICAgICAvLyBNYXAgQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZCBjb21tYW5kLgotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJSZXNvdXJjZUNvbnRleHQiLCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRUeXBlUnVudGltZVNlcnZlciIsIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiSW5zdGFsbENsaWVudCIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJSdW5UZXN0Q2xpZW50IiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIlRlc3RTZXJ2aWNlIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOyAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIlRlc3RTZXJ2aWNlIiwgQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJTdGFydENsaWVudCIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJEZXZlbG9wQ2xpZW50IiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIkFzc2VtYmxlQ2xpZW50IiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIkRlcGxveUNsaWVudCIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLQotICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiUmVzb3VyY2VDb250ZXh0IiwgQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsgICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJSZXNvdXJjZUNvbnRleHQiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiTW9uaXRvclNlcnZpY2UiLCBHZXRNb25pdG9yQ29tbWFuZC5jbGFzcyk7Ci0gICAgICAKLSAgICAgIC8vIE1hcCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQgY29tbWFuZCAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7IAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UnVudGltZUlkIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgLy9kYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJSdW50aW1lMkNsaWVudFR5cGVzIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdE5hbWUiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRFYXJQcm9qZWN0TmFtZSIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIC8vZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50RWFyQ29tcG9uZW50TmFtZSIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIC8vZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50Q29tcG9uZW50TmFtZSIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudENvbXBvbmVudFR5cGUiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICAvL2RhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEoyRUVWZXJzaW9uIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50TmVlZEVBUiIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3ROYW1lIiwgQ2hlY2tGb3JTZXJ2aWNlUHJvamVjdENvbW1hbmQuY2xhc3MpOwotICAgICAgCi0gICAgICAvLyBNYXAgV1NETFNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kIGNvbW1hbmQuCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZWxlY3Rpb25Db21tYW5kLmNsYXNzLCAiSW5pdGlhbFNlbGVjdGlvbiIsIFdTRExTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyApOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV1NETFNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiUHJvamVjdCIsIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEluaXRpYWxQcm9qZWN0IiwgbnVsbCk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXU0RMU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlVVJJIiwgQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiV3NkbFVSSSIsIG5ldyBFY2xpcHNlSVBhdGgyVVJMU3RyaW5nVHJhbnNmb3JtZXIoKSk7Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdTRExTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkdlbldTSUwiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXU0RMU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJXc2lsVVJJIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgLy9qdmggLSByZXJvdXRlZCB0aGVzZSB0byB0aGUgQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZCAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdTRExTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2VVUkkiLCBDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiV3NkbFVSSSIsIG5ldyBFY2xpcHNlSVBhdGgyVVJMU3RyaW5nVHJhbnNmb3JtZXIoKSk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXU0RMU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJQcm9qZWN0IiwgQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXU0RMU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDb21wb25lbnROYW1lIiwgQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICAKLSAgICAgIC8vIFdTRExTZWxlY3Rpb25PdXRwdXRDb21tYW5kCi0gICAgICAvL2p2aCAtIHJlcm91dGVkIHRoZXNlIGZyb20gQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZCAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJXc2RsVVJJIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2VzUGFyc2VyIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIldzZGxVUkkiLCBHZXRNb25pdG9yQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZXNQYXJzZXIiLCBHZXRNb25pdG9yQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiV3NkbFVSSSIsIENoZWNrRm9yU2VydmljZVByb2plY3RDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlc1BhcnNlciIsIENoZWNrRm9yU2VydmljZVByb2plY3RDb21tYW5kLmNsYXNzKTsKLQotICAgICAgCi0gICAgICAvL2p2aCAtIGFkZCBjb2RlIHRvIHdpZGdldCBzbyB0aGF0IHRoZSBhcHByb3ByaWF0ZSBzZXRzIGhhcHBlbiBhbmQgZGVmYXVsdGluZyBvY2N1cnMgYWdhaW4gYWZ0ZXIgb2JqZWN0IHNlbGVjdGlvbgotICAgICAgLypkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXU0RMU2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIlByb2plY3QiLCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRJbml0aWFsUHJvamVjdCIsIG51bGwpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV1NETFNlbGVjdGlvbk91dHB1dENvbW1hbmQuY2xhc3MsICJXc2RsVVJJIiwgQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdTRExTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZXNQYXJzZXIiLCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOyovCi0gICAgICAKLQkgIC8vIFNldHVwIHRoZSBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC4KLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkRlcGxveUNsaWVudCIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkluc3RhbGxDbGllbnQiLCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcyk7Ci0gICAgICAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiRGV2ZWxvcENsaWVudCIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkFzc2VtYmxlQ2xpZW50IiwgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU3RhcnRDbGllbnQiLCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIlN0YXJ0U2VydmljZSIsIG51bGwpOyAgICAgIAotCi0gICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlRlc3RTZXJ2aWNlIiwgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MpOyAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJSZXNvdXJjZUNvbnRleHQiLCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcyk7CQkJCQkJCi0JICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRUeXBlUnVudGltZVNlcnZlciIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzICk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRKMkVFVmVyc2lvbiIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3QiLCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIk1vZHVsZSIsIG51bGwgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3RUeXBlIiwgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJNb2R1bGVUeXBlIiwgbnVsbCk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0RUFSIiwgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJFYXIiLCBudWxsICk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIlJlc291cmNlQ29udGV4dCIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzKTsKLQkgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiV3NkbFVSSSIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzICk7Ci0gICAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFJ1bnRpbWVJZCIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzICk7Ci0gICAgICAKLQkJCWRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2UiLCBDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZUNsaWVudCIsIG51bGwgKTsKLQkJCQotICAgICAgLy8gTWFwIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kIGNvbW1hbmQuCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFR5cGVSdW50aW1lU2VydmVyIiwgQ2xpZW50RXh0ZW5zaW9uRnJhZ21lbnQuY2xhc3MpOwotICAgICAgICAgICAKLQkgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdEVBUiIsIFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MpOwotCSAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0IiwgV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcyk7Ci0gICAgICAgICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiR2VuZXJhdGVQcm94eSIsIENsaWVudFRlc3RGcmFnbWVudC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlRlc3RTZXJ2aWNlIiwgQ2xpZW50VGVzdEZyYWdtZW50LmNsYXNzICk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlByb3h5QmVhbiIsIENsaWVudFRlc3RGcmFnbWVudC5jbGFzcyApOwotICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudE5lZWRFQVIiLCBDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLQkgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50RWFyUHJvamVjdE5hbWUiLCBDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLQkgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50RWFyUHJvamVjdE5hbWUiLCBDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzLCJDbGllbnRFYXJDb21wb25lbnROYW1lIiwgbnVsbCk7Ci0JICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3QiLENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotCSAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJSdW5UZXN0Q2xpZW50IixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsgCi0JICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFR5cGVSdW50aW1lU2VydmVyIiwgQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFNlcnZlciIsIENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJXc2RsVVJJIiwgQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgICAKLSAgICAgIC8vIE1hcCBDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kIGNvbW1hbmQuCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiUHJveHlCZWFuIiwgV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcyk7ICAgICAgCi0JICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiUHJveHlCZWFuIiwgQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7IAotCSAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIlByb3h5RW5kcG9pbnQiLCBHZXRNb25pdG9yQ29tbWFuZC5jbGFzcyk7Ci0JICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiQ2FuR2VuZXJhdGVQcm94eSIsIENsaWVudFRlc3RGcmFnbWVudC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiQ2FuR2VuZXJhdGVQcm94eSIsIEZpbmlzaFRlc3RGcmFnbWVudC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiU2V0RW5kcG9pbnRNZXRob2QiLCBDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLQkgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MsICJTZXJ2ZXJJbnN0YW5jZUlkIiwgRmluaXNoRGVmYXVsdENvbW1hbmQuY2xhc3MpOwotCi0JICAKLSAgICAgIC8vIEdldE1vbml0b3JDb21tYW5kCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhHZXRNb25pdG9yQ29tbWFuZC5jbGFzcywgIkVuZHBvaW50cyIsIENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotCi0gICAgICAvLyBNQVAgcG9zdCBzZXJ2ZXIgY29uZmlnIGNhbGwgICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdEVBUiIsIENsaWVudEV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MsICJFYXJQcm9qZWN0TmFtZSIsIG51bGwpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRTZXJ2ZXJJbnN0YW5jZSIsIENsaWVudEV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MsICJFeGlzdGluZ1NlcnZlcklkIiwgbnVsbCk7Ci0gICAgICAKLSAgICAgIC8vIE1hcCBXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kIGNvbW1hbmQuCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhUZXN0RGVmYXVsdGluZ0ZyYWdtZW50LmNsYXNzLCAiVGVzdEZhY2lsaXR5IixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MsICJUZXN0RmFjaWxpdHkiLENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcywgIkZvbGRlciIsQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kLmNsYXNzLCAiSnNwRm9sZGVyIixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MsICJSdW5DbGllbnRUZXN0IixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MsICJNZXRob2RzIixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MsICJTYW1wbGVQcm9qZWN0IixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MsICJTYW1wbGVQcm9qZWN0RUFSIixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICAgIAotICAgICAgICAgICAgCi0gICAgICAvL01hcHBpbmdzIHRvIGVuYWJsZSBwZWVrLWFoZWFkIGZvciBQYWdlIDMgb2YgdGhlIGNsaWVudCB3aXphcmQKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlIiwgRGV2ZWxvcENsaWVudEZyYWdtZW50LmNsYXNzICk7ICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJFbnZpcm9ubWVudCIsIERldmVsb3BDbGllbnRGcmFnbWVudC5jbGFzcyApOyAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ29udGV4dCIsIERldmVsb3BDbGllbnRGcmFnbWVudC5jbGFzcyApOyAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VsZWN0aW9uIiwgRGV2ZWxvcENsaWVudEZyYWdtZW50LmNsYXNzICk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdE5hbWUiLCBEZXZlbG9wQ2xpZW50RnJhZ21lbnQuY2xhc3MsICJQcm9qZWN0IiwgbnVsbCApOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3ROYW1lIiwgRGV2ZWxvcENsaWVudEZyYWdtZW50LmNsYXNzLCAiTW9kdWxlIiwgbnVsbCApOyAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50RWFyUHJvamVjdE5hbWUiLCBEZXZlbG9wQ2xpZW50RnJhZ21lbnQuY2xhc3MsICJFYXJQcm9qZWN0IiwgbnVsbCApOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEVhclByb2plY3ROYW1lIiwgRGV2ZWxvcENsaWVudEZyYWdtZW50LmNsYXNzLCAiRWFyIiwgbnVsbCApOwotICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2UiLCBBc3NlbWJsZUNsaWVudEZyYWdtZW50LmNsYXNzICk7ICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJFbnZpcm9ubWVudCIsIEFzc2VtYmxlQ2xpZW50RnJhZ21lbnQuY2xhc3MgKTsgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNvbnRleHQiLCBBc3NlbWJsZUNsaWVudEZyYWdtZW50LmNsYXNzICk7ICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZWxlY3Rpb24iLCBBc3NlbWJsZUNsaWVudEZyYWdtZW50LmNsYXNzICk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdE5hbWUiLCBBc3NlbWJsZUNsaWVudEZyYWdtZW50LmNsYXNzLCAiUHJvamVjdCIsIG51bGwgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0TmFtZSIsIEFzc2VtYmxlQ2xpZW50RnJhZ21lbnQuY2xhc3MsICJNb2R1bGUiLCBudWxsICk7ICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRFYXJQcm9qZWN0TmFtZSIsIEFzc2VtYmxlQ2xpZW50RnJhZ21lbnQuY2xhc3MsICJFYXJQcm9qZWN0IiwgbnVsbCApOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEVhclByb2plY3ROYW1lIiwgQXNzZW1ibGVDbGllbnRGcmFnbWVudC5jbGFzcywgIkVhciIsIG51bGwgKTsKLSAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlIiwgRGVwbG95Q2xpZW50RnJhZ21lbnQuY2xhc3MgKTsgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkVudmlyb25tZW50IiwgRGVwbG95Q2xpZW50RnJhZ21lbnQuY2xhc3MgKTsgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNvbnRleHQiLCBEZXBsb3lDbGllbnRGcmFnbWVudC5jbGFzcyApOyAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VsZWN0aW9uIiwgRGVwbG95Q2xpZW50RnJhZ21lbnQuY2xhc3MgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0TmFtZSIsIERlcGxveUNsaWVudEZyYWdtZW50LmNsYXNzLCAiUHJvamVjdCIsIG51bGwgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0TmFtZSIsIERlcGxveUNsaWVudEZyYWdtZW50LmNsYXNzLCAiTW9kdWxlIiwgbnVsbCApOyAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50RWFyUHJvamVjdE5hbWUiLCBEZXBsb3lDbGllbnRGcmFnbWVudC5jbGFzcywgIkVhclByb2plY3QiLCBudWxsICk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50RWFyUHJvamVjdE5hbWUiLCBEZXBsb3lDbGllbnRGcmFnbWVudC5jbGFzcywgIkVhciIsIG51bGwgKTsKLSAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlIiwgSW5zdGFsbENsaWVudEZyYWdtZW50LmNsYXNzICk7ICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJFbnZpcm9ubWVudCIsIEluc3RhbGxDbGllbnRGcmFnbWVudC5jbGFzcyApOyAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ29udGV4dCIsIEluc3RhbGxDbGllbnRGcmFnbWVudC5jbGFzcyApOyAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VsZWN0aW9uIiwgSW5zdGFsbENsaWVudEZyYWdtZW50LmNsYXNzICk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdE5hbWUiLCBJbnN0YWxsQ2xpZW50RnJhZ21lbnQuY2xhc3MsICJQcm9qZWN0IiwgbnVsbCApOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3ROYW1lIiwgSW5zdGFsbENsaWVudEZyYWdtZW50LmNsYXNzLCAiTW9kdWxlIiwgbnVsbCApOyAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50RWFyUHJvamVjdE5hbWUiLCBJbnN0YWxsQ2xpZW50RnJhZ21lbnQuY2xhc3MsICJFYXJQcm9qZWN0IiwgbnVsbCApOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEVhclByb2plY3ROYW1lIiwgSW5zdGFsbENsaWVudEZyYWdtZW50LmNsYXNzLCAiRWFyIiwgbnVsbCApOwotICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2UiLCBSdW5DbGllbnRGcmFnbWVudC5jbGFzcyApOyAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiRW52aXJvbm1lbnQiLCBSdW5DbGllbnRGcmFnbWVudC5jbGFzcyApOyAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ29udGV4dCIsIFJ1bkNsaWVudEZyYWdtZW50LmNsYXNzICk7ICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZWxlY3Rpb24iLCBSdW5DbGllbnRGcmFnbWVudC5jbGFzcyApOyAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdE5hbWUiLCBSdW5DbGllbnRGcmFnbWVudC5jbGFzcywgIlByb2plY3QiLCBudWxsICk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdE5hbWUiLCBSdW5DbGllbnRGcmFnbWVudC5jbGFzcywgIk1vZHVsZSIsIG51bGwgKTsgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEVhclByb2plY3ROYW1lIiwgUnVuQ2xpZW50RnJhZ21lbnQuY2xhc3MsICJFYXJQcm9qZWN0IiwgbnVsbCApOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEVhclByb2plY3ROYW1lIiwgUnVuQ2xpZW50RnJhZ21lbnQuY2xhc3MsICJFYXIiLCBudWxsICk7ICAgICAgCi0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvYmluZGluZy9Db25maWdDbGllbnRIYW5kbGVyc1dpZGdldEJpbmRpbmcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9iaW5kaW5nL0NvbmZpZ0NsaWVudEhhbmRsZXJzV2lkZ2V0QmluZGluZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNmIzZmE4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9iaW5kaW5nL0NvbmZpZ0NsaWVudEhhbmRsZXJzV2lkZ2V0QmluZGluZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQwNCAgIDEzNDkxMyBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUgICAgICAgCi0gKiAyMDA2MDUxNyAgIDE0MjMzOSBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5iaW5kaW5nOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbWFuZC5HZW5lcmF0ZUhhbmRsZXJTa2VsZXRvbkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQuT3BlbkphdmFFZGl0b3JDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLkNsaWVudEhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuQ2xpZW50SGFuZGxlcnNXaWRnZXRPdXRwdXRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLkNvbmZpZ0NsaWVudEhhbmRsZXJzVGFibGVXaWRnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNlcXVlbmNlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2ltcGxlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuQ2FuRmluaXNoUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuU2VsZWN0aW9uQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0UmVnaXN0cnk7Ci0KLQotLyoqCi0gKiAKLSAqIEhhbmRsZXIgQ29uZmlndXJhdGlvbiBXaW5kb3cgLSBQcmVmZXJlbmNlcyAtIEphdmEgLSBDb2RlIEdlbmVyYXRpb24gLSBDb2RlCi0gKiBhbmQgQ29tbWVudHMKLSAqLwotcHVibGljIGNsYXNzIENvbmZpZ0NsaWVudEhhbmRsZXJzV2lkZ2V0QmluZGluZyBpbXBsZW1lbnRzIENvbW1hbmRXaWRnZXRCaW5kaW5nIAotewotICAKLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiAKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlcldpZGdldE1hcHBpbmdzKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLldpZGdldFJlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJXaWRnZXRNYXBwaW5ncyhXaWRnZXRSZWdpc3RyeSB3aWRnZXRSZWdpc3RyeSkgewotCi0gICAgd2lkZ2V0UmVnaXN0cnkuYWRkKCJDb25maWdDbGllbnRIYW5kbGVyc1RhYmxlV2lkZ2V0IiwgCi0gICAgICAgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX1RJVExFX0NMSUVOVF9IRExSX0NPTkZJRywgCi0gICAgICAgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX0RFU0NfQ0xJRU5UX0hETFJfQ09ORklHLCAKLSAgICAgICAgbmV3IFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSgpIHsKLQotICAgICAgCXB1YmxpYyBXaWRnZXRDb250cmlidXRvciBjcmVhdGUoKSB7Ci0gICAgICAJICByZXR1cm4gbmV3IENvbmZpZ0NsaWVudEhhbmRsZXJzVGFibGVXaWRnZXQoKTsKLSAgICAgIAl9Ci0gICAgfSk7Ci0KLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJEYXRhTWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhUmVnaXN0cnkpIHsKLSAgICAKLSAgICAvLyB3aWRnZXQKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCJIYW5kbGVyU2VydmljZVJlZkhvbGRlciIsIENvbmZpZ0NsaWVudEhhbmRsZXJzVGFibGVXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsIklzTXVsdGlwbGVTZWxlY3Rpb24iLCBDb25maWdDbGllbnRIYW5kbGVyc1RhYmxlV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCJHZW5Ta2VsZXRvbkVuYWJsZWQiLCBDb25maWdDbGllbnRIYW5kbGVyc1RhYmxlV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCJTZXJ2aWNlUmVmTmFtZSIsIENvbmZpZ0NsaWVudEhhbmRsZXJzVGFibGVXaWRnZXQuY2xhc3MpOwotICAgIAotICAgIC8vIG91dHB1dAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsIklzTXVsdGlwbGVTZWxlY3Rpb24iLCBDbGllbnRIYW5kbGVyc1dpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsIkNsaWVudFByb2plY3QiLCBDbGllbnRIYW5kbGVyc1dpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENvbmZpZ0NsaWVudEhhbmRsZXJzVGFibGVXaWRnZXQuY2xhc3MsIkhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyIiwgQ2xpZW50SGFuZGxlcnNXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAKLSAgICAvLyBnZW4gc2tlbGV0b24KLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDb25maWdDbGllbnRIYW5kbGVyc1RhYmxlV2lkZ2V0LmNsYXNzLCJIYW5kbGVyU2VydmljZVJlZkhvbGRlciIsIEdlbmVyYXRlSGFuZGxlclNrZWxldG9uQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ29uZmlnQ2xpZW50SGFuZGxlcnNUYWJsZVdpZGdldC5jbGFzcywiR2VuU2tlbGV0b25FbmFibGVkIiwgR2VuZXJhdGVIYW5kbGVyU2tlbGV0b25Db21tYW5kLmNsYXNzKTsKLQotICAgIC8vIG9wZW4gaW4gZWRpdG9yCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoR2VuZXJhdGVIYW5kbGVyU2tlbGV0b25Db21tYW5kLmNsYXNzLCJQcm9qZWN0IiwgT3BlbkphdmFFZGl0b3JDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhHZW5lcmF0ZUhhbmRsZXJTa2VsZXRvbkNvbW1hbmQuY2xhc3MsIkNsYXNzTmFtZXMiLCBPcGVuSmF2YUVkaXRvckNvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENvbmZpZ0NsaWVudEhhbmRsZXJzVGFibGVXaWRnZXQuY2xhc3MsIkdlblNrZWxldG9uRW5hYmxlZCIsIE9wZW5KYXZhRWRpdG9yQ29tbWFuZC5jbGFzcywiSXNFbmFibGVkIiwgbnVsbCk7Ci0gICAgCi0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI3JlZ2lzdGVyQ2FuRmluaXNoKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNhbkZpbmlzaFJlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJDYW5GaW5pc2goQ2FuRmluaXNoUmVnaXN0cnkgY2FuRmluaXNoUmVnaXN0cnkpIHsKLQotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiAKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnRGYWN0b3J5RmFjdG9yeSNjcmVhdGUoKQotICAgKi8KLSAgcHVibGljIENvbW1hbmRGcmFnbWVudEZhY3RvcnkgY3JlYXRlKCkgewotICAgIHJldHVybiBuZXcgQ29tbWFuZEZyYWdtZW50RmFjdG9yeSgpIHsKLQotICAgICAgcHVibGljIENvbW1hbmRGcmFnbWVudCBjcmVhdGUoKSB7Ci0KLSAgICAgICAgcmV0dXJuIG5ldyBDbGllbnRIYW5kbGVyc0NvbmZpZ0NvbW1hbmRGcmFnbWVudCgpOwotICAgICAgfQotICAgIH07Ci0gIH0KLQotICBwcml2YXRlIGNsYXNzIENsaWVudEhhbmRsZXJzQ29uZmlnQ29tbWFuZEZyYWdtZW50IGV4dGVuZHMgU2VxdWVuY2VGcmFnbWVudHsKLSAgIAotICAgIHB1YmxpYyBDbGllbnRIYW5kbGVyc0NvbmZpZ0NvbW1hbmRGcmFnbWVudCgpCi0gICAgewotICAgICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBDbGllbnRIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDb21tYW5kKCksICIiICkpOwotICAgICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoICJDb25maWdDbGllbnRIYW5kbGVyc1RhYmxlV2lkZ2V0IiApICk7Ci0gICAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IENsaWVudEhhbmRsZXJzV2lkZ2V0T3V0cHV0Q29tbWFuZCgpLCAiIiApKTsKLSAgICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgR2VuZXJhdGVIYW5kbGVyU2tlbGV0b25Db21tYW5kKCksICIiKSk7Ci0gICAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IE9wZW5KYXZhRWRpdG9yQ29tbWFuZCgpLCAiIikpOwotICAgIH0KLSAgICAKLSAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnQjcmVnaXN0ZXJEYXRhTWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5KQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKERhdGFNYXBwaW5nUmVnaXN0cnkgZGF0YVJlZ2lzdHJ5KQotICAgIHsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlbGVjdGlvbkNvbW1hbmQuY2xhc3MsICJJbml0aWFsU2VsZWN0aW9uIiwgQ2xpZW50SGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsIldzU2VydmljZVJlZnMiLCBDbGllbnRIYW5kbGVyc1dpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOyAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50SGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywiQ2xpZW50UHJvamVjdCIsIENsaWVudEhhbmRsZXJzV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgfQotIAotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL2JpbmRpbmcvQ29uZmlnU2VydmljZUhhbmRsZXJzV2lkZ2V0QmluZGluZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL2JpbmRpbmcvQ29uZmlnU2VydmljZUhhbmRsZXJzV2lkZ2V0QmluZGluZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjN2I3YzdhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9iaW5kaW5nL0NvbmZpZ1NlcnZpY2VIYW5kbGVyc1dpZGdldEJpbmRpbmcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDA0IDEzNDkxMyAgIHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdSAgICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5iaW5kaW5nOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbWFuZC5HZW5lcmF0ZUhhbmRsZXJTa2VsZXRvbkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQuT3BlbkphdmFFZGl0b3JDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLkNvbmZpZ1NlcnZpY2VIYW5kbGVyc1RhYmxlV2lkZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLlNlcnZpY2VIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLlNlcnZpY2VIYW5kbGVyc1dpZGdldE91dHB1dENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNlcXVlbmNlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2ltcGxlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuQ2FuRmluaXNoUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuU2VsZWN0aW9uQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0UmVnaXN0cnk7Ci0KLQotLyoqCi0gKiAKLSAqIEhhbmRsZXIgQ29uZmlndXJhdGlvbiBXaW5kb3cgLSBQcmVmZXJlbmNlcyAtIEphdmEgLSBDb2RlIEdlbmVyYXRpb24gLSBDb2RlCi0gKiBhbmQgQ29tbWVudHMKLSAqLwotcHVibGljIGNsYXNzIENvbmZpZ1NlcnZpY2VIYW5kbGVyc1dpZGdldEJpbmRpbmcgaW1wbGVtZW50cyBDb21tYW5kV2lkZ2V0QmluZGluZyB7Ci0gIAotICAvKgotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI3JlZ2lzdGVyV2lkZ2V0TWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuV2lkZ2V0UmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlcldpZGdldE1hcHBpbmdzKFdpZGdldFJlZ2lzdHJ5IHdpZGdldFJlZ2lzdHJ5KSB7Ci0KLSAgICB3aWRnZXRSZWdpc3RyeS5hZGQoIkNvbmZpZ1NlcnZpY2VIYW5kbGVyc1RhYmxlV2lkZ2V0IiwgCi0gICAJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX1RJVExFX1NFUlZJQ0VfSERMUl9DT05GSUcsIAotICAgCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9ERVNDX1NFUlZJQ0VfSERMUl9DT05GSUcsIAotICAgICAgICBuZXcgV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5KCkgewotCi0gICAgICAJcHVibGljIFdpZGdldENvbnRyaWJ1dG9yIGNyZWF0ZSgpIHsKLSAgICAgIAkgIHJldHVybiBuZXcgQ29uZmlnU2VydmljZUhhbmRsZXJzVGFibGVXaWRnZXQoKTsKLSAgICAgIAl9Ci0gICAgfSk7Ci0KLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJEYXRhTWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhUmVnaXN0cnkpIHsKLSAgICAKLQkvLyB3aWRnZXQKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2aWNlSGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywiSGFuZGxlckRlc2NyaXB0aW9uSG9sZGVycyIsIENvbmZpZ1NlcnZpY2VIYW5kbGVyc1RhYmxlV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2aWNlSGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIklzTXVsdGlwbGVTZWxlY3Rpb24iLCBDb25maWdTZXJ2aWNlSGFuZGxlcnNUYWJsZVdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmljZUhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsIkdlblNrZWxldG9uRW5hYmxlZCIsIENvbmZpZ1NlcnZpY2VIYW5kbGVyc1RhYmxlV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2aWNlSGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywiRGVzY3JpcHRpb25OYW1lIiwgQ29uZmlnU2VydmljZUhhbmRsZXJzVGFibGVXaWRnZXQuY2xhc3MpOwotICAgIAotICAgIC8vIG91dHB1dCBjb21tYW5kIChhZGRzL3JlbW92ZXMgZnJvbSBtb2RlbCkKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDb25maWdTZXJ2aWNlSGFuZGxlcnNUYWJsZVdpZGdldC5jbGFzcywiSGFuZGxlckRlc2NyaXB0aW9uSG9sZGVycyIsIFNlcnZpY2VIYW5kbGVyc1dpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZpY2VIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSXNNdWx0aXBsZVNlbGVjdGlvbiIsIFNlcnZpY2VIYW5kbGVyc1dpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZpY2VIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCJXc2RkUmVzb3VyY2UiLCBTZXJ2aWNlSGFuZGxlcnNXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsgICAgCi0KLSAgICAvLyBnZW4gc2tlbGV0b24gY29tbWFuZAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENvbmZpZ1NlcnZpY2VIYW5kbGVyc1RhYmxlV2lkZ2V0LmNsYXNzLCJIYW5kbGVyRGVzY3JpcHRpb25Ib2xkZXJzIiwgR2VuZXJhdGVIYW5kbGVyU2tlbGV0b25Db21tYW5kLmNsYXNzKTsgICAgCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ29uZmlnU2VydmljZUhhbmRsZXJzVGFibGVXaWRnZXQuY2xhc3MsIkdlblNrZWxldG9uRW5hYmxlZCIsIEdlbmVyYXRlSGFuZGxlclNrZWxldG9uQ29tbWFuZC5jbGFzcyk7Ci0gCi0gICAgLy8gb3BlbiBKYXZhIGVkaXRvciAgCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoR2VuZXJhdGVIYW5kbGVyU2tlbGV0b25Db21tYW5kLmNsYXNzLCJQcm9qZWN0IiwgT3BlbkphdmFFZGl0b3JDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhHZW5lcmF0ZUhhbmRsZXJTa2VsZXRvbkNvbW1hbmQuY2xhc3MsIkNsYXNzTmFtZXMiLCBPcGVuSmF2YUVkaXRvckNvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENvbmZpZ1NlcnZpY2VIYW5kbGVyc1RhYmxlV2lkZ2V0LmNsYXNzLCJHZW5Ta2VsZXRvbkVuYWJsZWQiLCBPcGVuSmF2YUVkaXRvckNvbW1hbmQuY2xhc3MsIklzRW5hYmxlZCIsIG51bGwpOwotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiAKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlckNhbkZpbmlzaChvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5DYW5GaW5pc2hSZWdpc3RyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyQ2FuRmluaXNoKENhbkZpbmlzaFJlZ2lzdHJ5IGNhbkZpbmlzaFJlZ2lzdHJ5KSB7Ci0KLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50RmFjdG9yeUZhY3RvcnkjY3JlYXRlKCkKLSAgICovCi0gIHB1YmxpYyBDb21tYW5kRnJhZ21lbnRGYWN0b3J5IGNyZWF0ZSgpIHsKLSAgICByZXR1cm4gbmV3IENvbW1hbmRGcmFnbWVudEZhY3RvcnkoKSB7Ci0KLSAgICAgIHB1YmxpYyBDb21tYW5kRnJhZ21lbnQgY3JlYXRlKCkgewotCi0gICAgICAgIHJldHVybiBuZXcgU2VydmljZUhhbmRsZXJzQ29uZmlnQ29tbWFuZEZyYWdtZW50KCk7Ci0gICAgICB9Ci0gICAgfTsKLSAgfQotCi0gIHByaXZhdGUgY2xhc3MgU2VydmljZUhhbmRsZXJzQ29uZmlnQ29tbWFuZEZyYWdtZW50IGV4dGVuZHMgU2VxdWVuY2VGcmFnbWVudHsKLSAgIAotICAgIHB1YmxpYyBTZXJ2aWNlSGFuZGxlcnNDb25maWdDb21tYW5kRnJhZ21lbnQoKQotICAgIHsKLSAgICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgU2VydmljZUhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQoKSwgIiIgKSk7Ci0gICAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggIkNvbmZpZ1NlcnZpY2VIYW5kbGVyc1RhYmxlV2lkZ2V0IiApICk7Ci0gICAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IFNlcnZpY2VIYW5kbGVyc1dpZGdldE91dHB1dENvbW1hbmQoKSwgIiIgKSk7Ci0gICAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IEdlbmVyYXRlSGFuZGxlclNrZWxldG9uQ29tbWFuZCgpLCAiIikpOwotICAgICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBPcGVuSmF2YUVkaXRvckNvbW1hbmQoKSwgIiIpKTsKLQotICAgIH0KLSAgICAKLSAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnQjcmVnaXN0ZXJEYXRhTWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5KQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKERhdGFNYXBwaW5nUmVnaXN0cnkgZGF0YVJlZ2lzdHJ5KQotICAgIHsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlbGVjdGlvbkNvbW1hbmQuY2xhc3MsICJJbml0aWFsU2VsZWN0aW9uIiwgU2VydmljZUhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2aWNlSGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIldzZGRSZXNvdXJjZSIsIFNlcnZpY2VIYW5kbGVyc1dpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgICAgCi0gICAgICAKLSAgICB9Ci0gCi0gIH0KLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvYmluZGluZy9Db25maWd1cmVIYW5kbGVyc1dpZGdldEJpbmRpbmcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9iaW5kaW5nL0NvbmZpZ3VyZUhhbmRsZXJzV2lkZ2V0QmluZGluZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Mzk2OWI0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9iaW5kaW5nL0NvbmZpZ3VyZUhhbmRsZXJzV2lkZ2V0QmluZGluZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MDQgMTM0OTEzICAgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1ICAgICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmJpbmRpbmc7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tYW5kLkdlbmVyYXRlSGFuZGxlclNrZWxldG9uQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbWFuZC5PcGVuSmF2YUVkaXRvckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuQ2xpZW50SGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5DbGllbnRIYW5kbGVyc1dpZGdldE91dHB1dENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuQ29uZmlnQ2xpZW50SGFuZGxlcnNUYWJsZVdpZGdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5Db25maWdTZXJ2aWNlSGFuZGxlcnNUYWJsZVdpZGdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5IYW5kbGVyc0RlZmF1bHRpbmdDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLlNlcnZpY2VIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLlNlcnZpY2VIYW5kbGVyc1dpZGdldE91dHB1dENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLkNvbmRpdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQm9vbGVhbkZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNlcXVlbmNlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2ltcGxlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuQ2FuRmluaXNoUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuU2VsZWN0aW9uQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0UmVnaXN0cnk7Ci0KLQotcHVibGljIGNsYXNzIENvbmZpZ3VyZUhhbmRsZXJzV2lkZ2V0QmluZGluZyBpbXBsZW1lbnRzIENvbW1hbmRXaWRnZXRCaW5kaW5nIHsKLQotCi0gIHB1YmxpYyBDb25maWd1cmVIYW5kbGVyc1dpZGdldEJpbmRpbmcoKSB7Ci0KLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjY3JlYXRlKCkKLSAgICovCi0gIHB1YmxpYyBDb21tYW5kRnJhZ21lbnRGYWN0b3J5IGNyZWF0ZSgpIHsKLSAgICByZXR1cm4gbmV3IENvbW1hbmRGcmFnbWVudEZhY3RvcnkoKSB7Ci0KLSAgICAgIHB1YmxpYyBDb21tYW5kRnJhZ21lbnQgY3JlYXRlKCkgewotICAgICAgICByZXR1cm4gbmV3IEhhbmRsZXJzQ29tbWFuZEZyYWdtZW50KCk7Ci0gICAgICB9Ci0gICAgfTsKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJDYW5GaW5pc2gob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ2FuRmluaXNoUmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlckNhbkZpbmlzaChDYW5GaW5pc2hSZWdpc3RyeSBjYW5GaW5pc2hSZWdpc3RyeSkgewotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKSwKLSAgICogCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJEYXRhTWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhUmVnaXN0cnkpIHsKLQotICAgIC8vIE1hcCBjbGllbnQtc2lkZSB3aWRnZXRzIHRvIGNvbW1hbmRzCi0gICAgLy8gd2lkZ2V0Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50SGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywiSGFuZGxlclNlcnZpY2VSZWZIb2xkZXIiLCBDb25maWdDbGllbnRIYW5kbGVyc1RhYmxlV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCJJc011bHRpcGxlU2VsZWN0aW9uIiwgQ29uZmlnQ2xpZW50SGFuZGxlcnNUYWJsZVdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50SGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywiR2VuU2tlbGV0b25FbmFibGVkIiwgQ29uZmlnQ2xpZW50SGFuZGxlcnNUYWJsZVdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50SGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywiU2VydmljZVJlZk5hbWUiLCBDb25maWdDbGllbnRIYW5kbGVyc1RhYmxlV2lkZ2V0LmNsYXNzKTsKLSAgICAKLSAgICAvLyBvdXRwdXQKLQotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENvbmZpZ0NsaWVudEhhbmRsZXJzVGFibGVXaWRnZXQuY2xhc3MsIkhhbmRsZXJTZXJ2aWNlUmVmSG9sZGVyIiwgQ2xpZW50SGFuZGxlcnNXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAKLSAgICAvLyBnZW4gc2tlbGV0b24KLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDb25maWdDbGllbnRIYW5kbGVyc1RhYmxlV2lkZ2V0LmNsYXNzLCJIYW5kbGVyU2VydmljZVJlZkhvbGRlciIsIEdlbmVyYXRlSGFuZGxlclNrZWxldG9uQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ29uZmlnQ2xpZW50SGFuZGxlcnNUYWJsZVdpZGdldC5jbGFzcywiR2VuU2tlbGV0b25FbmFibGVkIiwgR2VuZXJhdGVIYW5kbGVyU2tlbGV0b25Db21tYW5kLmNsYXNzKTsKLQotICAgIC8vIG9wZW4gaW4gZWRpdG9yCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ29uZmlnQ2xpZW50SGFuZGxlcnNUYWJsZVdpZGdldC5jbGFzcywiR2VuU2tlbGV0b25FbmFibGVkIiwgT3BlbkphdmFFZGl0b3JDb21tYW5kLmNsYXNzLCJJc0VuYWJsZWQiLCBudWxsKTsKLSAgCi0gCi0gICAgLy8gTWFwIHNlcnZpY2Utc2lkZSB3aWRnZXRzIHRvIGNvbW1hbmRzCi0gICAgLy8gd2lkZ2V0Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmljZUhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsIkhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcnMiLCBDb25maWdTZXJ2aWNlSGFuZGxlcnNUYWJsZVdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmljZUhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJJc011bHRpcGxlU2VsZWN0aW9uIiwgQ29uZmlnU2VydmljZUhhbmRsZXJzVGFibGVXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZpY2VIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCJHZW5Ta2VsZXRvbkVuYWJsZWQiLCBDb25maWdTZXJ2aWNlSGFuZGxlcnNUYWJsZVdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmljZUhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsIkRlc2NyaXB0aW9uTmFtZSIsIENvbmZpZ1NlcnZpY2VIYW5kbGVyc1RhYmxlV2lkZ2V0LmNsYXNzKTsKLSAgICAKLSAgICAvLyBvdXRwdXQgY29tbWFuZCAoYWRkcy9yZW1vdmVzIGZyb20gbW9kZWwpCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ29uZmlnU2VydmljZUhhbmRsZXJzVGFibGVXaWRnZXQuY2xhc3MsIkhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcnMiLCBTZXJ2aWNlSGFuZGxlcnNXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAKLQotICAgIC8vIGdlbiBza2VsZXRvbiBjb21tYW5kCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ29uZmlnU2VydmljZUhhbmRsZXJzVGFibGVXaWRnZXQuY2xhc3MsIkhhbmRsZXJEZXNjcmlwdGlvbkhvbGRlcnMiLCBHZW5lcmF0ZUhhbmRsZXJTa2VsZXRvbkNvbW1hbmQuY2xhc3MpOyAgICAKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDb25maWdTZXJ2aWNlSGFuZGxlcnNUYWJsZVdpZGdldC5jbGFzcywiR2VuU2tlbGV0b25FbmFibGVkIiwgR2VuZXJhdGVIYW5kbGVyU2tlbGV0b25Db21tYW5kLmNsYXNzKTsKLSAKLSAgICAvLyBvcGVuIEphdmEgZWRpdG9yICAKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDb25maWdTZXJ2aWNlSGFuZGxlcnNUYWJsZVdpZGdldC5jbGFzcywiR2VuU2tlbGV0b25FbmFibGVkIiwgT3BlbkphdmFFZGl0b3JDb21tYW5kLmNsYXNzLCJJc0VuYWJsZWQiLCBudWxsKTsKLQotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiAKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlcldpZGdldE1hcHBpbmdzKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLldpZGdldFJlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJXaWRnZXRNYXBwaW5ncyhXaWRnZXRSZWdpc3RyeSB3aWRnZXRSZWdpc3RyeSkgewotCi0gICAgd2lkZ2V0UmVnaXN0cnkuYWRkKCJDb25maWdTZXJ2aWNlSGFuZGxlcnNUYWJsZVdpZGdldCIsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX1RJVExFX1NFUlZJQ0VfSERMUl9DT05GSUcsIAotICAgIAkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfREVTQ19TRVJWSUNFX0hETFJfQ09ORklHLCBuZXcgV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5KCkgewotCi0gICAgICBwdWJsaWMgV2lkZ2V0Q29udHJpYnV0b3IgY3JlYXRlKCkgewotICAgICAgICByZXR1cm4gbmV3IENvbmZpZ1NlcnZpY2VIYW5kbGVyc1RhYmxlV2lkZ2V0KCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICB3aWRnZXRSZWdpc3RyeS5hZGQoIkNvbmZpZ0NsaWVudEhhbmRsZXJzVGFibGVXaWRnZXQiLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9USVRMRV9DTElFTlRfSERMUl9DT05GSUcsIAotICAgIAkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfREVTQ19DTElFTlRfSERMUl9DT05GSUcsIG5ldyBXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKSB7Ci0KLSAgICAgIHB1YmxpYyBXaWRnZXRDb250cmlidXRvciBjcmVhdGUoKSB7Ci0gICAgICAgIHJldHVybiBuZXcgQ29uZmlnQ2xpZW50SGFuZGxlcnNUYWJsZVdpZGdldCgpOwotICAgICAgfQotICAgIH0pOwotCi0gIH0KLQotICBwcml2YXRlIGNsYXNzIEhhbmRsZXJzQ29tbWFuZEZyYWdtZW50IGV4dGVuZHMgU2VxdWVuY2VGcmFnbWVudCB7Ci0KLSAgICBwdWJsaWMgSGFuZGxlcnNDb21tYW5kRnJhZ21lbnQoKSB7Ci0KLSAgICAgIGFkZChuZXcgU2ltcGxlRnJhZ21lbnQobmV3IEhhbmRsZXJzRGVmYXVsdGluZ0NvbW1hbmQoKSwgIiIpKTsKLQotICAgICAgYWRkKG5ldyBTZXJ2aWNlSGFuZGxlcnNGcmFnbWVudCgpKTsKLSAgICAgIGFkZChuZXcgQ2xpZW50SGFuZGxlcnNGcmFnbWVudCgpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyhEYXRhTWFwcGluZ1JlZ2lzdHJ5IGRhdGFSZWdpc3RyeSkgewotCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZWxlY3Rpb25Db21tYW5kLmNsYXNzLCAiSW5pdGlhbFNlbGVjdGlvbiIsIEhhbmRsZXJzRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhIYW5kbGVyc0RlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSXNDbGllbnRIYW5kbGVyIiwgQ2xpZW50SGFuZGxlcnNGcmFnbWVudC5jbGFzcywgIkNsaWVudEhhbmRsZXJzRW5hYmxlZCIsIG51bGwpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoSGFuZGxlcnNEZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIklzU2VydmljZUhhbmRsZXIiLCBTZXJ2aWNlSGFuZGxlcnNGcmFnbWVudC5jbGFzcywgIlNlcnZpY2VIYW5kbGVyc0VuYWJsZWQiLCBudWxsKTsKLQotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50SGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywiSXNNdWx0aXBsZVNlbGVjdGlvbiIsIENsaWVudEhhbmRsZXJzV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhHZW5lcmF0ZUhhbmRsZXJTa2VsZXRvbkNvbW1hbmQuY2xhc3MsIlByb2plY3QiLCBPcGVuSmF2YUVkaXRvckNvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoR2VuZXJhdGVIYW5kbGVyU2tlbGV0b25Db21tYW5kLmNsYXNzLCJDbGFzc05hbWVzIiwgT3BlbkphdmFFZGl0b3JDb21tYW5kLmNsYXNzKTsKLSAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmljZUhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJJc011bHRpcGxlU2VsZWN0aW9uIiwgU2VydmljZUhhbmRsZXJzV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2aWNlSGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywiV3NkZFJlc291cmNlIiwgU2VydmljZUhhbmRsZXJzV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhHZW5lcmF0ZUhhbmRsZXJTa2VsZXRvbkNvbW1hbmQuY2xhc3MsIlByb2plY3QiLCBPcGVuSmF2YUVkaXRvckNvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoR2VuZXJhdGVIYW5kbGVyU2tlbGV0b25Db21tYW5kLmNsYXNzLCJDbGFzc05hbWVzIiwgT3BlbkphdmFFZGl0b3JDb21tYW5kLmNsYXNzKTsgICAgICAKLQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHJlZ2lzdGVyQ2FuRmluaXNoKENhbkZpbmlzaFJlZ2lzdHJ5IGNhbkZpbmlzaFJlZ2lzdHJ5KSB7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBjbGFzcyBDbGllbnRIYW5kbGVyc0ZyYWdtZW50IGV4dGVuZHMgQm9vbGVhbkZyYWdtZW50IHsKLQotICAgIGJvb2xlYW4gaXNDbGllbnRfID0gZmFsc2U7Ci0KLSAgICBwdWJsaWMgQ2xpZW50SGFuZGxlcnNGcmFnbWVudCgpIHsKLSAgICAgIHNldENvbmRpdGlvbihuZXcgQ29uZGl0aW9uKCkgewotCi0gICAgICAgIHB1YmxpYyBib29sZWFuIGV2YWx1YXRlKCkgewotICAgICAgICAgIHJldHVybiBpc0NsaWVudF87Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgICBTZXF1ZW5jZUZyYWdtZW50IGNsaWVudEhhbmRsZXJzUm9vdEZyYWdtZW50ID0gbmV3IFNlcXVlbmNlRnJhZ21lbnQoKTsKLQotICAgICAgY2xpZW50SGFuZGxlcnNSb290RnJhZ21lbnQuYWRkKG5ldyBTaW1wbGVGcmFnbWVudChuZXcgQ2xpZW50SGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZCgpLCAiIikpOwotCi0gICAgICBjbGllbnRIYW5kbGVyc1Jvb3RGcmFnbWVudC5hZGQobmV3IFNpbXBsZUZyYWdtZW50KCJDb25maWdDbGllbnRIYW5kbGVyc1RhYmxlV2lkZ2V0IikpOwotICAgICAgY2xpZW50SGFuZGxlcnNSb290RnJhZ21lbnQuYWRkKG5ldyBTaW1wbGVGcmFnbWVudChuZXcgQ2xpZW50SGFuZGxlcnNXaWRnZXRPdXRwdXRDb21tYW5kKCksICIiKSk7Ci0gICAgICBjbGllbnRIYW5kbGVyc1Jvb3RGcmFnbWVudC5hZGQobmV3IFNpbXBsZUZyYWdtZW50KG5ldyBHZW5lcmF0ZUhhbmRsZXJTa2VsZXRvbkNvbW1hbmQoKSwgIiIpKTsKLQotICAgICAgc2V0VHJ1ZUZyYWdtZW50KGNsaWVudEhhbmRsZXJzUm9vdEZyYWdtZW50KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRDbGllbnRIYW5kbGVyc0VuYWJsZWQoYm9vbGVhbiBpc0NsaWVudCkgewotICAgICAgaXNDbGllbnRfID0gaXNDbGllbnQ7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiAobm9uLUphdmFkb2MpCi0gICAgICogCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnQjcmVnaXN0ZXJEYXRhTWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5KQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKERhdGFNYXBwaW5nUmVnaXN0cnkgZGF0YVJlZ2lzdHJ5KSB7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZWxlY3Rpb25Db21tYW5kLmNsYXNzLCAiSW5pdGlhbFNlbGVjdGlvbiIsIENsaWVudEhhbmRsZXJzV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdCIsIENsaWVudEhhbmRsZXJzV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0KLSAgICB9Ci0KLSAgfQotCi0gIHByaXZhdGUgY2xhc3MgU2VydmljZUhhbmRsZXJzRnJhZ21lbnQgZXh0ZW5kcyBCb29sZWFuRnJhZ21lbnQgewotCi0gICAgYm9vbGVhbiBpc1NlcnZpY2VfID0gZmFsc2U7Ci0KLSAgICBwdWJsaWMgU2VydmljZUhhbmRsZXJzRnJhZ21lbnQoKSB7Ci0gICAgICBzZXRDb25kaXRpb24obmV3IENvbmRpdGlvbigpIHsKLQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBldmFsdWF0ZSgpIHsKLSAgICAgICAgICByZXR1cm4gaXNTZXJ2aWNlXzsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICAgIFNlcXVlbmNlRnJhZ21lbnQgc2VydmljZUhhbmRsZXJzUm9vdEZyYWdtZW50ID0gbmV3IFNlcXVlbmNlRnJhZ21lbnQoKTsKLSAgICAgIHNlcnZpY2VIYW5kbGVyc1Jvb3RGcmFnbWVudC5hZGQobmV3IFNpbXBsZUZyYWdtZW50KG5ldyBTZXJ2aWNlSGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZCgpLCAiIikpOwotCi0gICAgICBTZXF1ZW5jZUZyYWdtZW50IHNlcnZpY2VIYW5kbGVyc0ZyYWdtZW50ID0gbmV3IFNlcXVlbmNlRnJhZ21lbnQoKTsKLSAgICAgIHNlcnZpY2VIYW5kbGVyc0ZyYWdtZW50LmFkZChuZXcgU2ltcGxlRnJhZ21lbnQoIkNvbmZpZ1NlcnZpY2VIYW5kbGVyc1RhYmxlV2lkZ2V0IikpOwotICAgICAgc2VydmljZUhhbmRsZXJzRnJhZ21lbnQuYWRkKG5ldyBTaW1wbGVGcmFnbWVudChuZXcgU2VydmljZUhhbmRsZXJzV2lkZ2V0T3V0cHV0Q29tbWFuZCgpLCAiIikpOwotICAgICAgc2VydmljZUhhbmRsZXJzRnJhZ21lbnQuYWRkKG5ldyBTaW1wbGVGcmFnbWVudChuZXcgR2VuZXJhdGVIYW5kbGVyU2tlbGV0b25Db21tYW5kKCksICIiKSk7Ci0KLSAgICAgIHNlcnZpY2VIYW5kbGVyc1Jvb3RGcmFnbWVudC5hZGQoc2VydmljZUhhbmRsZXJzRnJhZ21lbnQpOwotCi0gICAgICBzZXRUcnVlRnJhZ21lbnQoc2VydmljZUhhbmRsZXJzUm9vdEZyYWdtZW50KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlSGFuZGxlcnNFbmFibGVkKGJvb2xlYW4gaXNTZXJ2aWNlKSB7Ci0gICAgICBpc1NlcnZpY2VfID0gaXNTZXJ2aWNlOwotICAgIH0KLQotICAgIC8qCi0gICAgICogKG5vbi1KYXZhZG9jKQotICAgICAqIAotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50I3JlZ2lzdGVyRGF0YU1hcHBpbmdzKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeSkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyhEYXRhTWFwcGluZ1JlZ2lzdHJ5IGRhdGFSZWdpc3RyeSkgewotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VsZWN0aW9uQ29tbWFuZC5jbGFzcywgIkluaXRpYWxTZWxlY3Rpb24iLCBTZXJ2aWNlSGFuZGxlcnNXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0KLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZpY2VIYW5kbGVyc1dpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiV3NkZFJlc291cmNlIiwgU2VydmljZUhhbmRsZXJzV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0KLSAgICB9Ci0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9iaW5kaW5nL0dlblNhbXBsZVdpZGdldEJpbmRpbmcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9iaW5kaW5nL0dlblNhbXBsZVdpZGdldEJpbmRpbmcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmY2ZGFiMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvYmluZGluZy9HZW5TYW1wbGVXaWRnZXRCaW5kaW5nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTI0ICAgMTQyNjM1IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqIDIwMDYwNTI5ICAgMTQxNDIyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDYwOCAgIDE0NTUyOSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA3MTcgICAxNDYzMzIgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWsKLSAqIDIwMDcwNTE2ICAgMTg2MjMzIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqIDIwMDcwODE1ICAgMTk5NjI2IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuYmluZGluZzsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nVG9JUHJvamVjdFRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5BZGRNb2R1bGVUb1NlcnZlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uLkNyZWF0ZVNlcnZlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbWFuZC5kYXRhLkVjbGlwc2VJUGF0aDJVUkxTdHJpbmdUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbW9uLkZpbmlzaEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLkNsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLkNsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuV1NETFNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnMuQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9ucy5DbGllbnRFeHRlbnNpb25GcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zLkNsaWVudEV4dGVuc2lvbk91dHB1dENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMucnVudGltZS5DbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5DbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3QuQ2xpZW50VGVzdEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3QuQ2xpZW50VGVzdFdpZGdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0LkZpbmlzaERlZmF1bHRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3QuRmluaXNoVGVzdEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3QuVGVzdERlZmF1bHRpbmdGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0LlRlc3RXZWJTZXJ2aWNlQ2xpZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3QuV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZGF0YS5UeXBlUnVudGltZVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0LlJlc291cmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5UcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TZXF1ZW5jZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNpbXBsZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLkNhbkZpbmlzaFJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLlNlbGVjdGlvbkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0Q29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldFJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSVdlYlNlcnZpY2VDbGllbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZUNsaWVudEluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZVN0YXRlOwotCi0KLXB1YmxpYyBjbGFzcyBHZW5TYW1wbGVXaWRnZXRCaW5kaW5nIGltcGxlbWVudHMgQ29tbWFuZFdpZGdldEJpbmRpbmcKLXsgIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjY3JlYXRlKCkKLSAgICovCi0gIHB1YmxpYyBDb21tYW5kRnJhZ21lbnRGYWN0b3J5IGNyZWF0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IENvbW1hbmRGcmFnbWVudEZhY3RvcnkoKQotICAgICAgICAgICB7Ci0gICAgICAgICAgICAgcHVibGljIENvbW1hbmRGcmFnbWVudCBjcmVhdGUoKQotICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIHJldHVybiBuZXcgR2VuU2FtcGxlUm9vdENvbW1hbmRGcmFnbWVudCgpOyAgCi0gICAgICAgICAgICAgfQotICAgICAgICAgICB9OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI3JlZ2lzdGVyQ2FuRmluaXNoKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNhbkZpbmlzaFJlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJDYW5GaW5pc2goQ2FuRmluaXNoUmVnaXN0cnkgY2FuRmluaXNoUmVnaXN0cnkpCi0gIHsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlckRhdGFNYXBwaW5ncyhvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyhEYXRhTWFwcGluZ1JlZ2lzdHJ5IGRhdGFSZWdpc3RyeSkKLSAgeyAgICAgICAgICAgICAgICAgICAgCi0gICAgLy8gQmVmb3JlIENsaWVudCBUZXN0IHdpZGdldC4KLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlRlc3RTZXJ2aWNlIixGaW5pc2hUZXN0RnJhZ21lbnQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiVGVzdFNlcnZpY2UiLCBDbGllbnRUZXN0V2lkZ2V0LmNsYXNzICk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJSdW5UZXN0Q2xpZW50IiwgQ2xpZW50VGVzdFdpZGdldC5jbGFzcyApOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlbGVjdGlvbkNvbW1hbmQuY2xhc3MsICJJbml0aWFsU2VsZWN0aW9uIiwgQ2xpZW50VGVzdFdpZGdldC5jbGFzcyApOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MsICJTYW1wbGVQcm9qZWN0IiwgQ2xpZW50VGVzdFdpZGdldC5jbGFzcyApOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MsICJTYW1wbGVQcm9qZWN0RUFSIiwgQ2xpZW50VGVzdFdpZGdldC5jbGFzcyApOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFRlc3REZWZhdWx0aW5nRnJhZ21lbnQuY2xhc3MsICJUZXN0RmFjaWxpdHkiLENsaWVudFRlc3RXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MsICJGb2xkZXIiLENsaWVudFRlc3RXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MsICJKc3BGb2xkZXIiLENsaWVudFRlc3RXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MsICJSdW5UZXN0Q2xpZW50IixDbGllbnRUZXN0V2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kLmNsYXNzLCAiTWV0aG9kcyIsQ2xpZW50VGVzdFdpZGdldC5jbGFzcyk7Ci0KLSAgICAvLyBBZnRlciB0aGUgY2xpZW50IHRlc3Qgd2lkZ2V0ICAgCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50VGVzdFdpZGdldC5jbGFzcywgIlNhbXBsZVByb2plY3RFQVIiLENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFRlc3RXaWRnZXQuY2xhc3MsICJTYW1wbGVQcm9qZWN0IixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRUZXN0V2lkZ2V0LmNsYXNzLCAiVGVzdEZhY2lsaXR5IixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRUZXN0V2lkZ2V0LmNsYXNzLCAiRm9sZGVyIixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRUZXN0V2lkZ2V0LmNsYXNzLCAiSnNwRm9sZGVyIixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRUZXN0V2lkZ2V0LmNsYXNzLCAiUnVuVGVzdENsaWVudCIsQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50VGVzdFdpZGdldC5jbGFzcywgIk1ldGhvZHMiLENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOyAgICAKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRUZXN0V2lkZ2V0LmNsYXNzLCAiVGVzdFNlcnZpY2UiLEZpbmlzaFRlc3RGcmFnbWVudC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50VGVzdFdpZGdldC5jbGFzcywgIlRlc3RJRCIsRmluaXNoVGVzdEZyYWdtZW50LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRUZXN0V2lkZ2V0LmNsYXNzLCAiSXNUZXN0V2lkZ2V0IixGaW5pc2hUZXN0RnJhZ21lbnQuY2xhc3MpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI3JlZ2lzdGVyV2lkZ2V0TWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuV2lkZ2V0UmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlcldpZGdldE1hcHBpbmdzKFdpZGdldFJlZ2lzdHJ5IHdpZGdldFJlZ2lzdHJ5KQotICB7Ci0gICAgICAgICAgIAotICAgIHdpZGdldFJlZ2lzdHJ5LmFkZCggIkNsaWVudFRlc3RXaWRnZXQiLCAKLSAgICAgICAgICAgICAgICAgICAgICAgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX1RJVExFX1dTX1NBTVBMRSwKLSAgICAgICAgICAgICAgICAgICAgICAgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX0RFU0NfV1NfU0FNUExFLAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSgpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBXaWRnZXRDb250cmlidXRvciBjcmVhdGUoKQotICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDbGllbnRUZXN0V2lkZ2V0KCk7IAotICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgfQotICAKLSAgcHJpdmF0ZSBjbGFzcyBJbml0aWFsaXplUHJveHlDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLSAgewotICAgIHByaXZhdGUgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uXzsKLQlwcml2YXRlIFR5cGVSdW50aW1lU2VydmVyIHR5cGVSdW50aW1lU2VydmVyXzsKLQlwcml2YXRlIFN0cmluZyAgICAgICAgICAgIHByb2plY3RfOwotCXByaXZhdGUgU3RyaW5nICAgICAgICAgICAgbW9kdWxlXzsKLQlwcml2YXRlIFN0cmluZyAgICAgICAgICAgIGVhclByb2plY3RfOwotCXByaXZhdGUgU3RyaW5nICAgICAgICAgICAgZWFyXzsKLQlwcml2YXRlIElXZWJTZXJ2aWNlQ2xpZW50IHdlYlNlcnZpY2VDbGllbnRfOwotCXByaXZhdGUgU3RyaW5nICAgICAgICAgICAgd3NkbFVSSV87Ci0gICAgCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7ICAgIAotICAgICAgSUVudmlyb25tZW50IGVudiA9IGdldEVudmlyb25tZW50KCk7Ci0JICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsJCi0JICAKLSAgICAgIC8vIFNwbGl0IHVwIHRoZSBwcm9qZWN0IGFuZCBtb2R1bGUKLSAgICAgIGludCBpbmRleCA9IG1vZHVsZV8uaW5kZXhPZigiLyIpOwotICAgICAgaWYgKGluZGV4IT0tMSl7Ci0gICAgICAgIHByb2plY3RfID0gbW9kdWxlXy5zdWJzdHJpbmcoMCxpbmRleCk7Ci0gICAgICAgIG1vZHVsZV8gPSBtb2R1bGVfLnN1YnN0cmluZyhpbmRleCsxKTsKLSAgICAgIH0KLQotICAgICAgaWYgKGVhcl8hPW51bGwgJiYgZWFyXy5sZW5ndGgoKT4wKQotICAgICAgewotICAgICAgICBpbnQgZWFySW5kZXggPSBlYXJfLmluZGV4T2YoIi8iKTsKLSAgICAgICAgaWYgKGVhckluZGV4IT0tMSkgewotICAgICAgICAgIGVhclByb2plY3RfID0gZWFyXy5zdWJzdHJpbmcoMCxlYXJJbmRleCk7Ci0gICAgICAgICAgZWFyXyA9IGVhcl8uc3Vic3RyaW5nKGVhckluZGV4KzEpOwotICAgICAgICB9Ci0gICAgICB9ICAgIAotCSAgCi0JICBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBjbGllbnRJbmZvID0gbmV3IFdlYlNlcnZpY2VDbGllbnRJbmZvKCk7Ci0JICBjbGllbnRJbmZvLnNldEltcGxVUkwoZ2V0UHJveHlCZWFuKCkpOwotCSAgLy9jbGllbnRJbmZvLnNldEoyZWVMZXZlbChqMmVlTGV2ZWxfKTsKLQkgIGNsaWVudEluZm8uc2V0U2VydmVyRmFjdG9yeUlkKHR5cGVSdW50aW1lU2VydmVyXy5nZXRTZXJ2ZXJJZCgpKTsKLQkgIGNsaWVudEluZm8uc2V0U2VydmVySW5zdGFuY2VJZCh0eXBlUnVudGltZVNlcnZlcl8uZ2V0U2VydmVySW5zdGFuY2VJZCgpKTsKLQkgIGNsaWVudEluZm8uc2V0U3RhdGUoV2ViU2VydmljZVN0YXRlLlVOS05PV05fTElURVJBTCk7Ci0JICBjbGllbnRJbmZvLnNldFdlYlNlcnZpY2VSdW50aW1lSWQodHlwZVJ1bnRpbWVTZXJ2ZXJfLmdldFJ1bnRpbWVJZCgpKTsKLQkgIGNsaWVudEluZm8uc2V0V3NkbFVSTCh3c2RsVVJJXyk7Ci0JICBpZiAoY2xpZW50SW5mby5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCk9PW51bGwpCi0JICB7Ci0JICAgIENyZWF0ZVNlcnZlckNvbW1hbmQgY3JlYXRlU2VydmVyQ29tbWFuZCA9IG5ldyBDcmVhdGVTZXJ2ZXJDb21tYW5kKCk7Ci0JICAgIGNyZWF0ZVNlcnZlckNvbW1hbmQuc2V0U2VydmVyRmFjdG9yeWlkKGNsaWVudEluZm8uZ2V0U2VydmVyRmFjdG9yeUlkKCkpOwotICAgICAgY3JlYXRlU2VydmVyQ29tbWFuZC5zZXRFbnZpcm9ubWVudCggZW52ICk7Ci0JICAgIElTdGF0dXMgY3JlYXRlU2VydmVyU3RhdHVzID0gY3JlYXRlU2VydmVyQ29tbWFuZC5leGVjdXRlKCBudWxsLCBudWxsICk7Ci0JICAgIGlmIChjcmVhdGVTZXJ2ZXJTdGF0dXMuZ2V0U2V2ZXJpdHkoKT09U3RhdHVzLk9LKXsKLQkgICAgICBjbGllbnRJbmZvLnNldFNlcnZlckluc3RhbmNlSWQoY3JlYXRlU2VydmVyQ29tbWFuZC5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCkpOwotCSAgICAgIGNsaWVudEluZm8uc2V0U2VydmVyQ3JlYXRlZCh0cnVlKTsKLQkgICAgfQotCSAgICBlbHNlIGlmIChjcmVhdGVTZXJ2ZXJTdGF0dXMuZ2V0U2V2ZXJpdHkoKT09U3RhdHVzLkVSUk9SKXsKLQkgICAgICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKCAgY3JlYXRlU2VydmVyU3RhdHVzICk7Ci0JICAgIH0gICAgICAgICAgICAgICAKLQkgICAgCi0JICB9Ci0JICAKLQkgIEFkZE1vZHVsZVRvU2VydmVyQ29tbWFuZCBjb21tYW5kID0gbmV3IEFkZE1vZHVsZVRvU2VydmVyQ29tbWFuZCgpOwotICAgICAgY29tbWFuZC5zZXRTZXJ2ZXJJbnN0YW5jZUlkKGNsaWVudEluZm8uZ2V0U2VydmVySW5zdGFuY2VJZCgpKTsKLSAgICAgIGlmIChlYXJQcm9qZWN0XyAhPSBudWxsICYmIGVhclByb2plY3RfLmxlbmd0aCgpPjAgJiYgZWFyXyE9IG51bGwgJiYgZWFyXy5sZW5ndGgoKT4wKQotICAgICAgewotICAgICAgICBjb21tYW5kLnNldFByb2plY3QoZWFyUHJvamVjdF8pOwotICAgICAgICBjb21tYW5kLnNldE1vZHVsZShlYXJfKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgY29tbWFuZC5zZXRQcm9qZWN0KHByb2plY3RfKTsKLSAgICAgICAgY29tbWFuZC5zZXRNb2R1bGUobW9kdWxlXyk7ICAgICAgIAotICAgICAgfQotCi0gICAgICBjb21tYW5kLnNldEVudmlyb25tZW50KCBlbnYgKTsKLSAgICAgIHN0YXR1cyA9IGNvbW1hbmQuZXhlY3V0ZSggbW9uaXRvciwgbnVsbCApOwotICAgICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpPT1TdGF0dXMuRVJST1IpCi0gICAgICB7Ci0gICAgICAgIGVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLSAgICAgIH0gICAgIAotCi0JICB3ZWJTZXJ2aWNlQ2xpZW50XyA9IG5ldyBUZXN0V2ViU2VydmljZUNsaWVudChjbGllbnRJbmZvKTsKLQkgIHJldHVybiBzdGF0dXM7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0UHJveHlCZWFuKCkKLSAgICB7Ci0gICAgICBTdHJpbmcgcHJveHlCZWFuID0gIiI7Ci0gICAgICAKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBJUmVzb3VyY2UgcmVzb3VyY2UgICAgPSBSZXNvdXJjZVV0aWxzLmdldFJlc291cmNlRnJvbVNlbGVjdGlvbiggc2VsZWN0aW9uXy5nZXRGaXJzdEVsZW1lbnQoKSApOwotICAgICAgICBTdHJpbmcgICAgYmVhblBhY2thZ2UgPSBSZXNvdXJjZVV0aWxzLmdldEphdmFSZXNvdXJjZVBhY2thZ2VOYW1lKCByZXNvdXJjZS5nZXRGdWxsUGF0aCgpICk7Ci0gICAgICAgIAotICAgICAgICBpZiggYmVhblBhY2thZ2U9PW51bGwgKQotICAgICAgICAgIGJlYW5QYWNrYWdlID0gIiI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBiZWFuUGFja2FnZSA9IGJlYW5QYWNrYWdlICsgIi4iOwotCi0gICAgICAgIHByb3h5QmVhbiA9IGJlYW5QYWNrYWdlICsgcmVzb3VyY2UuZ2V0TmFtZSgpOwotCi0gICAgICAgIGlmKCBwcm94eUJlYW4udG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgiLmphdmEiKSB8fCBwcm94eUJlYW4udG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgiLmNsYXNzIikpIAotICAgICAgICB7Ci0gICAgICAgICAgcHJveHlCZWFuID0gcHJveHlCZWFuLnN1YnN0cmluZygwLHByb3h5QmVhbi5sYXN0SW5kZXhPZignLicpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2F0Y2goIENvcmVFeGNlcHRpb24gZXhjICkKLSAgICAgIHsgICAgICAgIAotICAgICAgfQotICAgICAgCi0gICAgICByZXR1cm4gcHJveHlCZWFuOwotICAgIH0KLSAgICAKLQlwdWJsaWMgSVdlYlNlcnZpY2VDbGllbnQgZ2V0V2ViU2VydmljZUNsaWVudCgpCi0JewotCSAgcmV0dXJuIHdlYlNlcnZpY2VDbGllbnRfOwotCX0KLQkKLSAgICBwdWJsaWMgYm9vbGVhbiBnZXRHZW5lcmF0ZVByb3h5KCkKLSAgICB7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGJvb2xlYW4gZ2V0Q2FuR2VuZXJhdGVQcm94eSgpCi0gICAgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotCXB1YmxpYyB2b2lkIHNldENsaWVudFR5cGVSdW50aW1lU2VydmVyKCBUeXBlUnVudGltZVNlcnZlciB0eXBlUnVudGltZVNlcnZlciApCi0JewotICAgICAgdHlwZVJ1bnRpbWVTZXJ2ZXJfID0gdHlwZVJ1bnRpbWVTZXJ2ZXI7ICAKLQl9Ci0JICAKLQlwdWJsaWMgdm9pZCBzZXRNb2R1bGUoIFN0cmluZyBtb2R1bGUgKQotCXsKLQkgIG1vZHVsZV8gPSBtb2R1bGU7Ci0JfQotCSAgCi0JcHVibGljIHZvaWQgc2V0TW9kdWxlVHlwZSggU3RyaW5nIG1vZHVsZVR5cGUpCi0JewotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRSZXNvdXJjZUNvbnRleHQoIFJlc291cmNlQ29udGV4dCByZXNvdXJjZUNvbnRleHQgKQotCXsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0SW5pdGlhbFNlbGVjdGlvbiggSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uICkKLSAgICB7Ci0gICAgICBzZWxlY3Rpb25fID0gc2VsZWN0aW9uOyAgCi0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIGNsYXNzIEdlblNhbXBsZVJvb3RDb21tYW5kRnJhZ21lbnQgZXh0ZW5kcyBTZXF1ZW5jZUZyYWdtZW50Ci0gIHsKLSAgICBwdWJsaWMgR2VuU2FtcGxlUm9vdENvbW1hbmRGcmFnbWVudCgpCi0gICAgewotICAgICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBDbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZCh0cnVlKSwgIiIgKSApOwotICAgICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kKCksICIiICkpOwotICAgICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBXU0RMU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQoKSwgIiIpKTsKLSAgICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kKCksICIiKSk7Ci0gICAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kKCB0cnVlICksICIiKSk7Ci0gICAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IEluaXRpYWxpemVQcm94eUNvbW1hbmQoKSwgIiIgKSk7Ci0gICAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IENsaWVudEV4dGVuc2lvbk91dHB1dENvbW1hbmQoKSwgIiIgKSApOwotICAgICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBUZXN0RGVmYXVsdGluZ0ZyYWdtZW50KCksIiIpKTsKLSAgICAgIGFkZCggbmV3IENsaWVudFRlc3RGcmFnbWVudCggIkNsaWVudFRlc3RXaWRnZXQiKSApOyAKLSAgICAgIGFkZCggbmV3IEZpbmlzaEZyYWdtZW50KCkgKTsKLSAgICB9Ci0gICAgCi0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50I3JlZ2lzdGVyRGF0YU1hcHBpbmdzKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeSkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyhEYXRhTWFwcGluZ1JlZ2lzdHJ5IGRhdGFSZWdpc3RyeSkKLSAgICB7Ci0gICAgICAvL01hcCBTZWxlY3Rpb25Db21tYW5kCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZWxlY3Rpb25Db21tYW5kLmNsYXNzLCAiSW5pdGlhbFNlbGVjdGlvbiIsIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEluaXRpYWxTZWxlY3Rpb24iLCBudWxsKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlbGVjdGlvbkNvbW1hbmQuY2xhc3MsICJJbml0aWFsU2VsZWN0aW9uIiwgSW5pdGlhbGl6ZVByb3h5Q29tbWFuZC5jbGFzcyApOwotICAgICAgCi0gICAgICAvLyBNYXAgQ2xpZW50V2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQgY29tbWFuZC4KLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIiLCBDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiVGVzdFNlcnZpY2UiLCBDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiVGVzdFNlcnZpY2UiLCBuZXcgRm9yY2VUcnVlKCkgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiUmVzb3VyY2VDb250ZXh0IiwgQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlJ1blRlc3RDbGllbnQiLCBDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIAotICAgICAgLy8gTWFwIENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQgY29tbWFuZC4KLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJDbGllbnRUeXBlUnVudGltZVNlcnZlciIsIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiVGVzdFNlcnZpY2UiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiUnVuVGVzdENsaWVudCIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJSZXNvdXJjZUNvbnRleHQiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICAKLSAgICAgIC8vIE1hcCBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQgY29tbWFuZAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7IAotICAgICAgLy9kYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJSdW50aW1lMkNsaWVudFR5cGVzIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdE5hbWUiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRFYXJQcm9qZWN0TmFtZSIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIC8vZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50RWFyQ29tcG9uZW50TmFtZSIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIC8vZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50Q29tcG9uZW50TmFtZSIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudENvbXBvbmVudFR5cGUiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICAvL2RhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEoyRUVWZXJzaW9uIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgCi0gICAgICAvLyBNYXAgV1NETFNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kIGNvbW1hbmQuCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZWxlY3Rpb25Db21tYW5kLmNsYXNzLCAiSW5pdGlhbFNlbGVjdGlvbiIsIFdTRExTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyApOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV1NETFNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiR2VuV1NJTCIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdTRExTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIldzaWxVUkkiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXU0RMU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlVVJJIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJXc2RsVVJJIiwgbmV3IEVjbGlwc2VJUGF0aDJVUkxTdHJpbmdUcmFuc2Zvcm1lcigpKTsKLSAgICAgICAgICAgICAKLSAgICAgIC8vIE1hcCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZCBjb21tYW5kLgotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRUeXBlUnVudGltZVNlcnZlciIsIENsaWVudEV4dGVuc2lvbkZyYWdtZW50LmNsYXNzKTsKLSAgICAgICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3QiLCBXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdEVBUiIsIFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MpOwotICAgICAgCi0gICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiR2VuZXJhdGVQcm94eSIsIENsaWVudFRlc3RGcmFnbWVudC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlRlc3RTZXJ2aWNlIiwgQ2xpZW50VGVzdEZyYWdtZW50LmNsYXNzICk7ICAgICAKLQotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnROZWVkRUFSIiwgQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0JICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEVhclByb2plY3ROYW1lIiwgQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0JICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEVhclByb2plY3ROYW1lIiwgQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcywiQ2xpZW50RWFyQ29tcG9uZW50TmFtZSIsbnVsbCk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3QiLENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRUeXBlUnVudGltZVNlcnZlciIsIENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlU2VydmVySW5zdGFuY2VJZCIsIEZpbmlzaERlZmF1bHRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50U2VydmVyIiwgQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIldzZGxVUkkiLCBDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiUnVuVGVzdENsaWVudCIsIENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgICAgCi0JICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRUeXBlUnVudGltZVNlcnZlciIsIEluaXRpYWxpemVQcm94eUNvbW1hbmQuY2xhc3MgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEoyRUVWZXJzaW9uIiwgSW5pdGlhbGl6ZVByb3h5Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0IiwgSW5pdGlhbGl6ZVByb3h5Q29tbWFuZC5jbGFzcywgIk1vZHVsZSIsIG51bGwgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3RUeXBlIiwgSW5pdGlhbGl6ZVByb3h5Q29tbWFuZC5jbGFzcywgIk1vZHVsZVR5cGUiLCBudWxsKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3RFQVIiLCBJbml0aWFsaXplUHJveHlDb21tYW5kLmNsYXNzLCAiRWFyIiwgbnVsbCApOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudFdpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJSZXNvdXJjZUNvbnRleHQiLCBJbml0aWFsaXplUHJveHlDb21tYW5kLmNsYXNzKTsKLQkgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIldzZGxVUkkiLCBJbml0aWFsaXplUHJveHlDb21tYW5kLmNsYXNzICk7Ci0JICAKLQkgIAotCSAgCi0JICAKLSAgICAgIC8vIE1hcCBJbml0aWFsaXplUHJveHlDb21tYW5kIGNvbW1hbmQuCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhJbml0aWFsaXplUHJveHlDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZUNsaWVudCIsIENsaWVudEV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MpOyAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoSW5pdGlhbGl6ZVByb3h5Q29tbWFuZC5jbGFzcywgIkdlbmVyYXRlUHJveHkiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICAKLSAgICAgIC8vIE1hcCBDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kIGNvbW1hbmQuCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiUHJveHlCZWFuIiwgV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcyk7ICAgICAgCi0JICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiUHJveHlCZWFuIiwgQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7ICAgICAgCi0JICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkdlbmVyYXRlUHJveHkiLCBUZXN0RGVmYXVsdGluZ0ZyYWdtZW50LmNsYXNzKTsKLQkgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEluaXRpYWxpemVQcm94eUNvbW1hbmQuY2xhc3MsICJDYW5HZW5lcmF0ZVByb3h5IiwgQ2xpZW50VGVzdEZyYWdtZW50LmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiR2VuZXJhdGVQcm94eSIsIEZpbmlzaFRlc3RGcmFnbWVudC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkdlbmVyYXRlUHJveHkiLCBDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MsICJSdW5UZXN0Q2xpZW50IiwgQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0JICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiU2VydmVySW5zdGFuY2VJZCIsIEZpbmlzaERlZmF1bHRDb21tYW5kLmNsYXNzKTsKLQkgIAotICAgICAgLy8gTUFQIHBvc3Qgc2VydmVyIGNvbmZpZyBjYWxsICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3RFQVIiLCBDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiRUFSUHJvamVjdE5hbWUiLCBuZXcgU3RyaW5nVG9JUHJvamVjdFRyYW5zZm9ybWVyKCkpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRTZXJ2ZXJJbnN0YW5jZSIsIENsaWVudEV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MsICJFeGlzdGluZ1NlcnZlcklkIiwgbnVsbCk7Ci0gICAgICAgICAgICAKLSAgICAgIAotICAgICAgLy8gTWFwIFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQgY29tbWFuZC4KLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFRlc3REZWZhdWx0aW5nRnJhZ21lbnQuY2xhc3MsICJUZXN0RmFjaWxpdHkiLENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcywgIlRlc3RGYWNpbGl0eSIsQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kLmNsYXNzLCAiRm9sZGVyIixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MsICJKc3BGb2xkZXIiLENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcywgIlJ1bkNsaWVudFRlc3QiLENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcywgIk1ldGhvZHMiLENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcywgIlNhbXBsZVByb2plY3QiLENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcywgIlNhbXBsZVByb2plY3RFQVIiLENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgICAgCi0gICAgICAKLSAgICB9Ci0gIH0KLSAgCi0gIHByaXZhdGUgY2xhc3MgRm9yY2VUcnVlIGltcGxlbWVudHMgVHJhbnNmb3JtZXIKLSAgewotICAgIHB1YmxpYyBPYmplY3QgdHJhbnNmb3JtKE9iamVjdCB2YWx1ZSkgCi0gICAgewotICAgICAgcmV0dXJuIG5ldyBCb29sZWFuKHRydWUpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL2JpbmRpbmcvSW1wb3J0V1NJTFdpZGdldEJpbmRpbmcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9iaW5kaW5nL0ltcG9ydFdTSUxXaWRnZXRCaW5kaW5nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkN2VmMzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL2JpbmRpbmcvSW1wb3J0V1NJTFdpZGdldEJpbmRpbmcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5iaW5kaW5nOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5JbXBvcnRXU0lMV2lkZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c2lsLkFkZFdTRExUb1dTSUxXcmFwcGVyQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2VxdWVuY2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TaW1wbGVGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5DYW5GaW5pc2hSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5TZWxlY3Rpb25Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRSZWdpc3RyeTsKLQotCi1wdWJsaWMgY2xhc3MgSW1wb3J0V1NJTFdpZGdldEJpbmRpbmcgaW1wbGVtZW50cyBDb21tYW5kV2lkZ2V0QmluZGluZwotewotICBwdWJsaWMgSW1wb3J0V1NJTFdpZGdldEJpbmRpbmcoKQotICB7Ci0gIH0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI2NyZWF0ZSgpCi0gICAqLwotICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50RmFjdG9yeSBjcmVhdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBDb21tYW5kRnJhZ21lbnRGYWN0b3J5KCkKLSAgICAgICAgICAgewotICAgICAgICAgICAgIHB1YmxpYyBDb21tYW5kRnJhZ21lbnQgY3JlYXRlKCkKLSAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICBTZXF1ZW5jZUZyYWdtZW50IHJvb3QgPSBuZXcgU2VxdWVuY2VGcmFnbWVudCgpOwotICAgICAgICAgICAgICAgcm9vdC5hZGQobmV3IFNpbXBsZUZyYWdtZW50KCJJbXBvcnRXU0lMV2lkZ2V0IikpOwotICAgICAgICAgICAgICAgcm9vdC5hZGQobmV3IFNpbXBsZUZyYWdtZW50KG5ldyBBZGRXU0RMVG9XU0lMV3JhcHBlckNvbW1hbmQoKSwgIiIpKTsKLSAgICAgICAgICAgICAgIHJldHVybiByb290OyAgCi0gICAgICAgICAgICAgfQotICAgICAgICAgICB9OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI3JlZ2lzdGVyQ2FuRmluaXNoKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNhbkZpbmlzaFJlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJDYW5GaW5pc2goQ2FuRmluaXNoUmVnaXN0cnkgY2FuRmluaXNoUmVnaXN0cnkpCi0gIHsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlckRhdGFNYXBwaW5ncyhvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyhEYXRhTWFwcGluZ1JlZ2lzdHJ5IGRhdGFSZWdpc3RyeSkKLSAgeyAgICAKLSAgICAvLyBJbXBvcnRXU0lMV2lkZ2V0Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VsZWN0aW9uQ29tbWFuZC5jbGFzcywgIkluaXRpYWxTZWxlY3Rpb24iLCBJbXBvcnRXU0lMV2lkZ2V0LmNsYXNzKTsKLSAgICAKLSAgICAvLyBBZGRXU0RMVG9XU0lMV3JhcHBlckNvbW1hbmQKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhJbXBvcnRXU0lMV2lkZ2V0LmNsYXNzLCAiR2VuV1NJTEFyZ3VtZW50cyIsIEFkZFdTRExUb1dTSUxXcmFwcGVyQ29tbWFuZC5jbGFzcywgIkFyZ3MiLCBudWxsKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlcldpZGdldE1hcHBpbmdzKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLldpZGdldFJlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJXaWRnZXRNYXBwaW5ncyhXaWRnZXRSZWdpc3RyeSB3aWRnZXRSZWdpc3RyeSkKLSAgewotCi0gICAgd2lkZ2V0UmVnaXN0cnkuYWRkKCJJbXBvcnRXU0lMV2lkZ2V0IiwgCi0gICAgICBDb25zdW1wdGlvblVJTWVzc2FnZXMuVElUTEVfV1NJTF9JTVBPUlQsCi0gICAgICBDb25zdW1wdGlvblVJTWVzc2FnZXMuREVTQ19XU0lMX0lNUE9SVCwKLSAgICAgIG5ldyBXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKQotICAgICAgewotICAgICAgICBwdWJsaWMgV2lkZ2V0Q29udHJpYnV0b3IgY3JlYXRlKCkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBuZXcgSW1wb3J0V1NJTFdpZGdldCgpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL2JpbmRpbmcvSW1wb3J0V1NXaWRnZXRCaW5kaW5nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvYmluZGluZy9JbXBvcnRXU1dpZGdldEJpbmRpbmcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTk1Y2Q0MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvYmluZGluZy9JbXBvcnRXU1dpZGdldEJpbmRpbmcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuYmluZGluZzsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuUHVibGlzaFRvUHJpdmF0ZVVERElDb21tYW5kRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuUHVibGlzaFdTV2lkZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TZXF1ZW5jZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNpbXBsZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLkNhbkZpbmlzaFJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIuV1NFeHBsb3JlckxhdW5jaGVyQ29tbWFuZDsKLQotCi1wdWJsaWMgY2xhc3MgSW1wb3J0V1NXaWRnZXRCaW5kaW5nIGltcGxlbWVudHMgQ29tbWFuZFdpZGdldEJpbmRpbmcKLXsKLSAgcHJpdmF0ZSBDYW5GaW5pc2hSZWdpc3RyeSAgIGNhbkZpbmlzaFJlZ2lzdHJ5OwotICBwcml2YXRlIFdpZGdldFJlZ2lzdHJ5ICAgICAgd2lkZ2V0UmVnaXN0cnk7Ci0gIHByaXZhdGUgRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhTWFwcGluZ1JlZ2lzdHJ5OwotICBwcml2YXRlIFB1Ymxpc2hUb1ByaXZhdGVVRERJQ29tbWFuZEZyYWdtZW50IHB1Ymxpc2hUb1ByaXZhdGVVRERJQ21kRnJhZzsKLQotICBwdWJsaWMgSW1wb3J0V1NXaWRnZXRCaW5kaW5nKCkKLSAgewotICAgIHB1Ymxpc2hUb1ByaXZhdGVVRERJQ21kRnJhZyA9IG5ldyBQdWJsaXNoVG9Qcml2YXRlVURESUNvbW1hbmRGcmFnbWVudCgpOwotICB9Ci0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNjcmVhdGUoKQotICAgKi8KLSAgcHVibGljIENvbW1hbmRGcmFnbWVudEZhY3RvcnkgY3JlYXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgQ29tbWFuZEZyYWdtZW50RmFjdG9yeSgpCi0gICAgICAgICAgIHsKLSAgICAgICAgICAgICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50IGNyZWF0ZSgpCi0gICAgICAgICAgICAgewotICAgICAgICAgICAgICAgU2VxdWVuY2VGcmFnbWVudCByb290ID0gbmV3IFNlcXVlbmNlRnJhZ21lbnQoKTsKLSAgICAgICAgICAgICAgIHJvb3QuYWRkKG5ldyBTaW1wbGVGcmFnbWVudCgiV1NJbXBvcnQiKSk7Ci0gICAgICAgICAgICAgICByb290LmFkZChwdWJsaXNoVG9Qcml2YXRlVURESUNtZEZyYWcpOwotICAgICAgICAgICAgICAgcm9vdC5hZGQobmV3IFNpbXBsZUZyYWdtZW50KG5ldyBXU0V4cGxvcmVyTGF1bmNoZXJDb21tYW5kKCksICIiKSk7Ci0gICAgICAgICAgICAgICByZXR1cm4gcm9vdDsgIAotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgfTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlckNhbkZpbmlzaChvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5DYW5GaW5pc2hSZWdpc3RyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyQ2FuRmluaXNoKENhbkZpbmlzaFJlZ2lzdHJ5IGNhbkZpbmlzaFJlZ2lzdHJ5KQotICB7Ci0gICAgdGhpcy5jYW5GaW5pc2hSZWdpc3RyeSA9IGNhbkZpbmlzaFJlZ2lzdHJ5OwotICAgIHB1Ymxpc2hUb1ByaXZhdGVVRERJQ21kRnJhZy5yZWdpc3RlckNhbkZpbmlzaCh0aGlzLmNhbkZpbmlzaFJlZ2lzdHJ5KTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlckRhdGFNYXBwaW5ncyhvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyhEYXRhTWFwcGluZ1JlZ2lzdHJ5IGRhdGFSZWdpc3RyeSkKLSAgewotICAgIHRoaXMuZGF0YU1hcHBpbmdSZWdpc3RyeSA9IGRhdGFSZWdpc3RyeTsKLSAgICBwdWJsaXNoVG9Qcml2YXRlVURESUNtZEZyYWcucmVnaXN0ZXJEYXRhTWFwcGluZ3ModGhpcy5kYXRhTWFwcGluZ1JlZ2lzdHJ5KTsKLSAgICAKLSAgICAvLyBQdWJsaXNoVG9Qcml2YXRlVURESUNvbW1hbmRGcmFnbWVudAotICAgIGRhdGFNYXBwaW5nUmVnaXN0cnkuYWRkTWFwcGluZyhQdWJsaXNoV1NXaWRnZXQuY2xhc3MsICJQdWJsaXNoVG9Qcml2YXRlVURESSIsIFB1Ymxpc2hUb1ByaXZhdGVVRERJQ29tbWFuZEZyYWdtZW50LmNsYXNzKTsKLSAgICAKLSAgICAvLyBMYXVuY2hXZWJTZXJ2aWNlc0V4cGxvcmVyQ29tbWFuZAotICAgIGRhdGFNYXBwaW5nUmVnaXN0cnkuYWRkTWFwcGluZyhQdWJsaXNoV1NXaWRnZXQuY2xhc3MsICJGb3JjZUxhdW5jaE91dHNpZGVJREUiLCBXU0V4cGxvcmVyTGF1bmNoZXJDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhTWFwcGluZ1JlZ2lzdHJ5LmFkZE1hcHBpbmcoUHVibGlzaFdTV2lkZ2V0LmNsYXNzLCAiTGF1bmNoT3B0aW9ucyIsIFdTRXhwbG9yZXJMYXVuY2hlckNvbW1hbmQuY2xhc3MpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI3JlZ2lzdGVyV2lkZ2V0TWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuV2lkZ2V0UmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlcldpZGdldE1hcHBpbmdzKFdpZGdldFJlZ2lzdHJ5IHdpZGdldFJlZ2lzdHJ5KQotICB7Ci0gICAgdGhpcy53aWRnZXRSZWdpc3RyeSA9IHdpZGdldFJlZ2lzdHJ5OwotICAgIHB1Ymxpc2hUb1ByaXZhdGVVRERJQ21kRnJhZy5yZWdpc3RlcldpZGdldE1hcHBpbmdzKHRoaXMud2lkZ2V0UmVnaXN0cnkpOwotCi0gICAgd2lkZ2V0UmVnaXN0cnkuYWRkKCJXU0ltcG9ydCIsIAotICAgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX1RJVExFX1dTX0ZJTkQsCi0gICAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfREVTQ19XU19GSU5ELAotICAgICAgbmV3IFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSgpCi0gICAgICB7Ci0gICAgICAgIHB1YmxpYyBXaWRnZXRDb250cmlidXRvciBjcmVhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIG5ldyBQdWJsaXNoV1NXaWRnZXQoZmFsc2UpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL2V4dGVuc2lvbnMvQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9leHRlbnNpb25zL0NsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1OTAyOTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL2V4dGVuc2lvbnMvQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMDQgMTI0NDA4ICAgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyICAgICAgICAgIAotICogMjAwNjAyMjEgICAxMTkxMTEgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDUyNCAgIDE0MjYzNSBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKiAyMDA2MDUyOSAgIDE0MTQyMiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA4MTggICAxNTQ0MDIgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNjA4MzAgICAxNTEwOTEga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4sIENsaWVudCBzaWRlIHN0aWxsIGVuYWJsZWQgd2hlbiB0aGVyZSdzIG9ubHkgc3R1YiBzZXJ2ZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TZXJ2ZXJVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LlJ1bnRpbWVEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LldlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5kYXRhLlR5cGVSdW50aW1lU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklSdW50aW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZGlzY292ZXJ5LldlYlNlcnZpY2VzUGFyc2VyRXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlc1BhcnNlcjsKLQotCi1wdWJsaWMgY2xhc3MgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotICAvLyBDbGllbnRXaXphcmRXaWRnZXQKLQkKLQlwcml2YXRlIGJvb2xlYW4gICAgICAgICAgIGRldmVsb3BDbGllbnRfOwotCXByaXZhdGUgYm9vbGVhbiAgICAgICAgICAgYXNzZW1ibGVDbGllbnRfOwotCXByaXZhdGUgYm9vbGVhbiAgICAgICAgICAgZGVwbG95Q2xpZW50XzsKLQkKLSAgcHJpdmF0ZSBUeXBlUnVudGltZVNlcnZlciAgICBjbGllbnRJZHNfOwotICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgICAgIGNsaWVudFJ1bnRpbWVJZF87Ci0gIHByaXZhdGUgQm9vbGVhbiAgICAgICAgICAgICAgdGVzdFNlcnZpY2U7Ci0gIHByaXZhdGUgQm9vbGVhbiAgICAgICAgICAgICAgaW5zdGFsbENsaWVudDsKLSAgcHJpdmF0ZSBib29sZWFuICAgICAgICAgICAgICBzdGFydENsaWVudDsKLSAgcHJpdmF0ZSBib29sZWFuICAgICAgICAgICAgICBydW5UZXN0Q2xpZW50OwotICBwcml2YXRlIFJlc291cmNlQ29udGV4dCAgICAgIHJlc291cmNlQ29udGV4dDsKLSAgCi0gIC8vIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXQKLSAgLy9wcml2YXRlIFNlbGVjdGlvbkxpc3RDaG9pY2VzIGNsaWVudENob2ljZXNfOwotICBwcml2YXRlIFN0cmluZyBjbGllbnRQcm9qZWN0TmFtZV87Ci0gIHByaXZhdGUgU3RyaW5nIGNsaWVudEVhclByb2plY3ROYW1lXzsKLSAgLy9wcml2YXRlIFN0cmluZyBjbGllbnRDb21wb25lbnROYW1lXzsKLSAgLy9wcml2YXRlIFN0cmluZyBjbGllbnRFYXJDb21wb25lbnROYW1lXzsKLSAgcHJpdmF0ZSBTdHJpbmcgY2xpZW50Q29tcG9uZW50VHlwZV87Ci0gIC8vcHJpdmF0ZSBTdHJpbmcgajJlZVZlcnNpb247Ci0gIHByaXZhdGUgYm9vbGVhbiBjbGllbnROZWVkRUFSXzsKLSAgCi0gIHByaXZhdGUgU3RyaW5nIHNlcnZpY2VTZXJ2ZXJGYWN0b3J5SWRfOwotICBwcml2YXRlIFN0cmluZyBzZXJ2aWNlU2VydmVySW5zdGFuY2VJZF87Ci0gIAotICAvLyBXU0RMU2VsZWN0aW9uV2lkZ2V0Ci0gIHByaXZhdGUgYm9vbGVhbiAgICAgICAgICAgZ2VuV1NJTDsKLSAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICB3c2lsVVJJOwotICAKLSAgLy8gV1NETFNlbGVjdGlvbkNvbmRpdGlvbkNvbW1hbmQKLSAgcHJpdmF0ZSBXZWJTZXJ2aWNlc1BhcnNlciB3ZWJTZXJ2aWNlc1BhcnNlcjsKLSAgCi0gIC8vIFdTRExTZWxlY3Rpb25UcmVlV2lkZ2V0Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgd3NkbFVSSTsKLSAgCi0gIHByaXZhdGUgYm9vbGVhbiAgICAgICAgICAgaXNDbGllbnRTY2VuYXJpb187Ci0gIHByaXZhdGUgYm9vbGVhbiAgICAgICAgICAgZ2VuUHJveHlfID0gdHJ1ZTsKLSAgcHJpdmF0ZSBTdHJpbmcgbGF1bmNoZWRTZXJ2aWNlVGVzdE5hbWU7Ci0gIAotICAvL1NlcnZlckRlcGxveWFibGVDb25maWd1cmF0aW9uQ29tbWFuZAotICBwcml2YXRlIFN0cmluZyBzZXJ2ZXJJbnN0SWRfOwotICAKLSAgcHVibGljIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kKCBib29sZWFuIGlzQ2xpZW50U2NlbmFyaW8gKQotICB7Ci0gICAgaXNDbGllbnRTY2VuYXJpb18gPSBpc0NsaWVudFNjZW5hcmlvOwotICB9Ci0KLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdHJ1ZSBpZiB0aGlzIGNvbW1hbmQgaXMgcnVubmluZyBpbiB0aGUgY2xpZW50IHdpemFyZCBhbmQKLSAgICogZmFsc2UgaWYgdGhpcyBjb21tYW5kIGlzIHJ1bm5pbmcgaW4gdGhlIGNyZWF0ZSB3ZWIgc2VydmljZSB3aXphcmQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRJc0NsaWVudFNjZW5hcmlvKCkKLSAgewotICAgIHJldHVybiBpc0NsaWVudFNjZW5hcmlvXzsgCi0gIH0KLSAgCi0gIC8qCi0gIHB1YmxpYyB2b2lkIHNldFJ1bnRpbWUyQ2xpZW50VHlwZXMoIFNlbGVjdGlvbkxpc3RDaG9pY2VzIGNob2ljZXMgKQotICB7Ci0gICAgY2xpZW50Q2hvaWNlc18gPSBjaG9pY2VzOyAgCi0gIH0KLSAgCi0gIAotICBwdWJsaWMgU2VsZWN0aW9uTGlzdENob2ljZXMgZ2V0UnVudGltZTJDbGllbnRUeXBlcygpCi0gIHsKLSAgICByZXR1cm4gY2xpZW50Q2hvaWNlc187ICAKLSAgfQotICAqLwotICAKLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIoVHlwZVJ1bnRpbWVTZXJ2ZXIgaWRzKQotICB7Ci0gICAgY2xpZW50SWRzXyA9IGlkczsKLSAgfQotICAKLSAgcHVibGljIFR5cGVSdW50aW1lU2VydmVyIGdldENsaWVudFR5cGVSdW50aW1lU2VydmVyKCkKLSAgewotCWlmIChjbGllbnRJZHNfLmdldFNlcnZlckluc3RhbmNlSWQoKT09bnVsbCB8fCBjbGllbnRJZHNfLmdldFNlcnZlckluc3RhbmNlSWQoKS5sZW5ndGgoKT09MCkKLQl7Ci0JCS8vU2V0IHRoZSBpbnN0YW5jZSBpZCBmcm9tIHRoZSBzZXJ2aWNlIHNpZGUgaWYgdGhlIGZhY3RvcnkgaWRzIG1hdGNoCi0JCWlmIChzZXJ2aWNlU2VydmVySW5zdGFuY2VJZF8hPW51bGwgJiYgc2VydmljZVNlcnZlckluc3RhbmNlSWRfLmxlbmd0aCgpPjApCi0JCXsKLQkJCWlmIChzZXJ2aWNlU2VydmVyRmFjdG9yeUlkXyE9bnVsbCAmJiBzZXJ2aWNlU2VydmVyRmFjdG9yeUlkXy5sZW5ndGgoKT4wKQotCQkJewotCQkJCWlmIChzZXJ2aWNlU2VydmVyRmFjdG9yeUlkXy5lcXVhbHMoY2xpZW50SWRzXy5nZXRTZXJ2ZXJJZCgpKSkKLQkJCQl7Ci0JCQkJCWNsaWVudElkc18uc2V0U2VydmVySW5zdGFuY2VJZChzZXJ2aWNlU2VydmVySW5zdGFuY2VJZF8pOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLSAgICByZXR1cm4gY2xpZW50SWRzXzsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50UnVudGltZUlkKFN0cmluZyBpZCkKLSAgewotICAgIGNsaWVudFJ1bnRpbWVJZF8gPSBpZDsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRDbGllbnRSdW50aW1lSWQoKQotICB7Ci0gICAgcmV0dXJuIGNsaWVudFJ1bnRpbWVJZF87Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VFeGlzdGluZ1NlcnZlckluc3RJZChTdHJpbmcgc2VydmVySW5zdElkKSB7Ci0gIAl0aGlzLnNlcnZlckluc3RJZF8gPSBzZXJ2ZXJJbnN0SWQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmljZUV4aXN0aW5nU2VydmVySW5zdElkKCl7Ci0gIAlyZXR1cm4gdGhpcy5zZXJ2ZXJJbnN0SWRfOwotICB9Ci0gIAotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBjbGllbnRJc0V4aXN0aW5nU2VydmVyLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNDbGllbnRJc0V4aXN0aW5nU2VydmVyKCkKLSAgewotICAgIHJldHVybiBjbGllbnRJZHNfLmdldFNlcnZlckluc3RhbmNlSWQoKSAhPSBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgY2xpZW50UHJvamVjdC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q2xpZW50UHJvamVjdCgpCi0gIHsKLQkgIC8vcmV0dXJuIGNsaWVudFByb2plY3ROYW1lXyArICIvIiArIGNsaWVudENvbXBvbmVudE5hbWVfOwotICAgICAgcmV0dXJuIGNsaWVudFByb2plY3ROYW1lXyArICIvIiArIGNsaWVudFByb2plY3ROYW1lXzsKLSAgfQotCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIGNsaWVudFByb2plY3RFQVIuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldENsaWVudFByb2plY3RFQVIoKQotICB7Ci0gICAgaWYgKGNsaWVudEVhclByb2plY3ROYW1lXyE9bnVsbCAmJiBjbGllbnRFYXJQcm9qZWN0TmFtZV8ubGVuZ3RoKCk+MCkKLSAgICB7Ci0JICAgIC8vcmV0dXJuIGNsaWVudEVhclByb2plY3ROYW1lXyArICIvIiArIGNsaWVudEVhckNvbXBvbmVudE5hbWVfOwotICAgICAgcmV0dXJuIGNsaWVudEVhclByb2plY3ROYW1lXyArICIvIiArIGNsaWVudEVhclByb2plY3ROYW1lXzsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJldHVybiAiIjsKLSAgICB9Ci0gIH0KLSAgCi0gIC8qCi0gIHByaXZhdGUgU3RyaW5nIGdldE1vZHVsZVByb2plY3ROYW1lKCBTdHJpbmcgcHJvamVjdE5hbWUgKQotICB7Ci0JU3RyaW5nIHJlc3VsdCA9ICIiOwotCQotCWlmKCBwcm9qZWN0TmFtZSAhPSBudWxsICYmICFwcm9qZWN0TmFtZS5lcXVhbHMoIiIpICkKLQl7Ci0JICBJUGF0aCAgICBwcm9qZWN0UGF0aCA9IG5ldyBQYXRoKCBwcm9qZWN0TmFtZSApOwotCSAgSVByb2plY3QgcHJvamVjdCAgICAgPSAoSVByb2plY3QpUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2UoIHByb2plY3RQYXRoICk7Ci0JICBTdHJpbmcgICBtb2R1bGVOYW1lICA9IEoyRUVVdGlscy5nZXRGaXJzdFdlYk1vZHVsZU5hbWUoIHByb2plY3QgKTsKLQkgIAotCSAgcmVzdWx0ID0gcHJvamVjdE5hbWUgKyAiLyIgKyBtb2R1bGVOYW1lOwotCX0KLQkKLQlyZXR1cm4gcmVzdWx0OwotICB9Ci0gICovCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIGNsaWVudFByb2plY3RUeXBlLgotICAgKi8KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q2xpZW50UHJvamVjdFR5cGUoKQotICB7Ci0gICAgLy9yZXR1cm4gY2xpZW50Q2hvaWNlc18uZ2V0Q2hvaWNlKCkuZ2V0TGlzdCgpLmdldFNlbGVjdGlvbigpOwotICAgIHJldHVybiBjbGllbnRDb21wb25lbnRUeXBlXzsKLSAgfQotICAKLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgY2xpZW50UnVudGltZS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q2xpZW50UnVudGltZSgpCi0gIHsKLSAgICByZXR1cm4gY2xpZW50SWRzXy5nZXRSdW50aW1lSWQoKTsKLSAgfQotCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIGNsaWVudFNlcnZlci4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q2xpZW50U2VydmVyKCkKLSAgewotICAgIHJldHVybiBjbGllbnRJZHNfLmdldFNlcnZlcklkKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q2xpZW50U2VydmVySW5zdGFuY2UoKQotICB7Ci0gICAgcmV0dXJuIGNsaWVudElkc18uZ2V0U2VydmVySW5zdGFuY2VJZCgpOyAgICAKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudEV4aXN0aW5nU2VydmVySW5zdGFuY2VJZChTdHJpbmcgc2VydmVySW5zdElkKXsKLSAgICAKLSAgICBpZiAoY2xpZW50SWRzXy5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCk9PW51bGwpCi0gICAgICBjbGllbnRJZHNfLnNldFNlcnZlckluc3RhbmNlSWQoc2VydmVySW5zdElkKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgZ2VuV1NJTC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzR2VuV1NJTCgpCi0gIHsKLSAgICByZXR1cm4gZ2VuV1NJTDsKLSAgfQotCi0gIC8qKgotICAgKiBAcGFyYW0gZ2VuV1NJTAotICAgKiAgICAgICAgICAgIFRoZSBnZW5XU0lMIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEdlbldTSUwoYm9vbGVhbiBnZW5XU0lMKQotICB7Ci0gICAgdGhpcy5nZW5XU0lMID0gZ2VuV1NJTDsKLSAgfQotCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHJlc291cmNlQ29udGV4dC4KLSAgICovCi0gIHB1YmxpYyBSZXNvdXJjZUNvbnRleHQgZ2V0UmVzb3VyY2VDb250ZXh0KCkKLSAgewotICAgIHJldHVybiByZXNvdXJjZUNvbnRleHQ7Ci0gIH0KLQotICAvKioKLSAgICogQHBhcmFtIHJlc291cmNlQ29udGV4dAotICAgKiAgICAgICAgICAgIFRoZSByZXNvdXJjZUNvbnRleHQgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UmVzb3VyY2VDb250ZXh0KFJlc291cmNlQ29udGV4dCByZXNvdXJjZUNvbnRleHQpCi0gIHsKLSAgICB0aGlzLnJlc291cmNlQ29udGV4dCA9IHJlc291cmNlQ29udGV4dDsKLSAgfQotCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHRlc3RQcm94eVNlbGVjdGVkLgotICAgKi8KLSAgcHVibGljIEJvb2xlYW4gZ2V0VGVzdFNlcnZpY2UoKQotICB7Ci0gICAgcmV0dXJuIHRlc3RTZXJ2aWNlOwotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSB0ZXN0UHJveHlTZWxlY3RlZAotICAgKiAgICAgICAgICAgIFRoZSB0ZXN0UHJveHlTZWxlY3RlZCB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUZXN0U2VydmljZShCb29sZWFuIHRlc3RTZXJ2aWNlKQotICB7Ci0gICAgdGhpcy50ZXN0U2VydmljZSA9IHRlc3RTZXJ2aWNlOwotICB9Ci0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgdGVzdFByb3h5U2VsZWN0ZWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRSdW5UZXN0Q2xpZW50KCkKLSAgewotICAgIHJldHVybiBydW5UZXN0Q2xpZW50OwotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSB0ZXN0UHJveHlTZWxlY3RlZAotICAgKiAgICAgICAgICAgIFRoZSB0ZXN0UHJveHlTZWxlY3RlZCB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSdW5UZXN0Q2xpZW50KGJvb2xlYW4gcnVuVGVzdENsaWVudCkKLSAgewotICAgIHRoaXMucnVuVGVzdENsaWVudCA9IHJ1blRlc3RDbGllbnQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldERldmVsb3BDbGllbnQoKSB7Ci0JICByZXR1cm4gZGV2ZWxvcENsaWVudF87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXREZXZlbG9wQ2xpZW50KGJvb2xlYW4gZGV2ZWxvcENsaWVudCkgewotCSAgdGhpcy5kZXZlbG9wQ2xpZW50XyA9IGRldmVsb3BDbGllbnQ7Ci0gIH0JCi0KLSAgcHVibGljIGJvb2xlYW4gZ2V0QXNzZW1ibGVDbGllbnQoKSB7Ci0JICByZXR1cm4gYXNzZW1ibGVDbGllbnRfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0QXNzZW1ibGVDbGllbnQoYm9vbGVhbiBhc3NlbWJsZUNsaWVudCkgewotCSAgdGhpcy5hc3NlbWJsZUNsaWVudF8gPSBhc3NlbWJsZUNsaWVudDsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGdldERlcGxveUNsaWVudCgpIHsKLQkgIHJldHVybiBkZXBsb3lDbGllbnRfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RGVwbG95Q2xpZW50KGJvb2xlYW4gZGVwbG95Q2xpZW50KSB7Ci0JICB0aGlzLmRlcGxveUNsaWVudF8gPSBkZXBsb3lDbGllbnQ7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIGluc3RhbGxDbGllbnQuCi0gICAqLwotICBwdWJsaWMgQm9vbGVhbiBnZXRJbnN0YWxsQ2xpZW50KCkKLSAgewotICAgIHJldHVybiBpbnN0YWxsQ2xpZW50OwotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBpbnN0YWxsQ2xpZW50Ci0gICAqICAgICAgICAgICAgVGhlIGluc3RhbGxDbGllbnQgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SW5zdGFsbENsaWVudChCb29sZWFuIGluc3RhbGxDbGllbnQpCi0gIHsKLSAgICB0aGlzLmluc3RhbGxDbGllbnQgPSBpbnN0YWxsQ2xpZW50OwotICB9Ci0gIAotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBzdGFydENsaWVudC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldFN0YXJ0Q2xpZW50KCkKLSAgewotICAgIHJldHVybiBzdGFydENsaWVudDsKLSAgfQotCi0gIC8qKgotICAgKiBAcGFyYW0gc3RhcnRDbGllbnQKLSAgICogICAgICAgICAgICBUaGUgc3RhcnRDbGllbnQgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U3RhcnRDbGllbnQoYm9vbGVhbiBzdGFydENsaWVudCkKLSAgewotICAgIHRoaXMuc3RhcnRDbGllbnQgPSBzdGFydENsaWVudDsKLSAgfQotICAKLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgd3NkbFVSSS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3NkbFVSSSgpCi0gIHsKLSAgICByZXR1cm4gd3NkbFVSSTsKLSAgfQotCi0gIC8qKgotICAgKiBAcGFyYW0gd3NkbFVSSQotICAgKiAgICAgICAgICAgIFRoZSB3c2RsVVJJIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdzZGxVUkkoU3RyaW5nIHdzZGxVUkkpCi0gIHsKLSAgICB0aGlzLndzZGxVUkkgPSB3c2RsVVJJOwotICB9Ci0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgd3NpbFVSSS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3NpbFVSSSgpCi0gIHsKLSAgICByZXR1cm4gd3NpbFVSSTsKLSAgfQotCi0gIC8qKgotICAgKiBAcGFyYW0gd3NpbFVSSQotICAgKiAgICAgICAgICAgIFRoZSB3c2lsVVJJIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdzaWxVUkkoU3RyaW5nIHdzaWxVUkkpCi0gIHsKLSAgICB0aGlzLndzaWxVUkkgPSB3c2lsVVJJOwotICB9Ci0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgd2ViU2VydmljZXNQYXJzZXIuCi0gICAqLwotICBwdWJsaWMgV2ViU2VydmljZXNQYXJzZXIgZ2V0V2ViU2VydmljZXNQYXJzZXIoKQotICB7Ci0gICAgaWYgKHdlYlNlcnZpY2VzUGFyc2VyICE9IG51bGwpCi0gICAgICByZXR1cm4gd2ViU2VydmljZXNQYXJzZXI7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIG5ldyBXZWJTZXJ2aWNlc1BhcnNlckV4dCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSB3ZWJTZXJ2aWNlc1BhcnNlcgotICAgKiAgICAgICAgICAgIFRoZSB3ZWJTZXJ2aWNlc1BhcnNlciB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlc1BhcnNlcihXZWJTZXJ2aWNlc1BhcnNlciB3ZWJTZXJ2aWNlc1BhcnNlcikKLSAgewotICAgIHRoaXMud2ViU2VydmljZXNQYXJzZXIgPSB3ZWJTZXJ2aWNlc1BhcnNlcjsKLSAgfQotCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIGoyZWVWZXJzaW9uLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRDbGllbnRKMkVFVmVyc2lvbigpCi0gIHsKLQkgIHJldHVybiAiMTQiOyAvL3JtIGoyZWUKLSAgfQotCi0gIC8qKgotICAgKiBAcGFyYW0gdmVyc2lvbiBUaGUgajJlZVZlcnNpb24gdG8gc2V0LgotICAgKi8KLSAgLyoKLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50SjJFRVZlcnNpb24oU3RyaW5nIHZlcnNpb24pCi0gIHsKLQkgIGoyZWVWZXJzaW9uID0gdmVyc2lvbjsKLSAgfQotICAqLwotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB0cnVlIGlmIGEgcHJveHkgc2hvdWxkIGJlIGdlbmVyYXRlZCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0R2VuZXJhdGVQcm94eSgpCi0gIHsKLSAgICByZXR1cm4gZ2VuUHJveHlfOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRHZW5lcmF0ZVByb3h5KCBib29sZWFuIGdlblByb3h5ICkKLSAgewotICAgIGdlblByb3h5XyA9IGdlblByb3h5OwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0TGF1bmNoZWRTZXJ2aWNlVGVzdE5hbWUoU3RyaW5nIGxhdW5jaGVkU2VydmljZVRlc3ROYW1lKQotICB7Ci0gIAl0aGlzLmxhdW5jaGVkU2VydmljZVRlc3ROYW1lID0gbGF1bmNoZWRTZXJ2aWNlVGVzdE5hbWU7Ci0gIH0KLQotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgdGVzdCBmYWNpbGl0eSB0byBsYXVuY2guCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldExhdW5jaGVkU2VydmljZVRlc3ROYW1lKCkKLSAgewotICAJcmV0dXJuIGxhdW5jaGVkU2VydmljZVRlc3ROYW1lOwotICB9Ci0gIAotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB0cnVlIGlmIHRoZSBjbGllbnQgcHJvamVjdCBuZWVkcyBhbiBFQVIgcHJvamVjdC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldENsaWVudE5lZWRFQVIoKQotICB7Ci0gICAgcmV0dXJuIGNsaWVudE5lZWRFQVJfOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRDbGllbnROZWVkRUFSKGJvb2xlYW4gY2xpZW50TmVlZEVBUikKLSAgewotICAgIGNsaWVudE5lZWRFQVJfID0gY2xpZW50TmVlZEVBUjsKLSAgfQotCi0gIAotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRDb21wb25lbnRUeXBlKFN0cmluZyBjbGllbnRDb21wb25lbnRUeXBlKQotICB7Ci0gICAgdGhpcy5jbGllbnRDb21wb25lbnRUeXBlXyA9IGNsaWVudENvbXBvbmVudFR5cGU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRQcm9qZWN0TmFtZShTdHJpbmcgY2xpZW50UHJvamVjdE5hbWUpCi0gIHsKLSAgICB0aGlzLmNsaWVudFByb2plY3ROYW1lXyA9IGNsaWVudFByb2plY3ROYW1lOwotICB9Ci0KLSAgLyoKLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50Q29tcG9uZW50TmFtZShTdHJpbmcgY2xpZW50Q29tcG9uZW50TmFtZSkKLSAgewotICAgIHRoaXMuY2xpZW50Q29tcG9uZW50TmFtZV8gPSBjbGllbnRDb21wb25lbnROYW1lOwotICB9Ci0gICovCi0gIAotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRFYXJQcm9qZWN0TmFtZShTdHJpbmcgY2xpZW50RWFyUHJvamVjdE5hbWUpCi0gIHsKLSAgICB0aGlzLmNsaWVudEVhclByb2plY3ROYW1lXyA9IGNsaWVudEVhclByb2plY3ROYW1lOwotICB9Ci0gIAotICAvKgotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRFYXJDb21wb25lbnROYW1lKFN0cmluZyBjbGllbnRFYXJDb21wb25lbnROYW1lKQotICB7Ci0gICAgdGhpcy5jbGllbnRFYXJDb21wb25lbnROYW1lXyA9IGNsaWVudEVhckNvbXBvbmVudE5hbWU7Ci0gIH0KLSAgKi8KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q2xpZW50RWFyUHJvamVjdE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIGNsaWVudEVhclByb2plY3ROYW1lXzsKLSAgfQotICAKLSAgLyoKLSAgcHVibGljIFN0cmluZyBnZXRDbGllbnRFYXJDb21wb25lbnROYW1lKCkKLSAgewotICAgIHJldHVybiBjbGllbnRFYXJDb21wb25lbnROYW1lXzsKLSAgfQotICAqLwotICAKLSAgcHVibGljIHZvaWQgc2V0U2VydmljZVNlcnZlckZhY3RvcnlJZChTdHJpbmcgaWQpCi0gIHsKLSAgCXNlcnZpY2VTZXJ2ZXJGYWN0b3J5SWRfID0gaWQ7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlU2VydmVySW5zdGFuY2VJZChTdHJpbmcgaWQpCi0gIHsKLSAgCXNlcnZpY2VTZXJ2ZXJJbnN0YW5jZUlkXyA9IGlkOwotICB9Ci0KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgaW5mbykgdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbgotICB7Ci0gICAgSUVudmlyb25tZW50IGVudiA9IGdldEVudmlyb25tZW50KCk7Ci0gICAgLy9EbyBzb21lIGJhc2ljIHZhbGlkYXRpb24gdG8gZW5zdXJlIHRoZSBzZXJ2ZXIvcnVudGltZS90eXBlIGNvbWJpbmF0aW9uIGlzIHN1cHBvcnRlZC4KLSAgICAvL1RoaXMgaXMgbmVlZGVkIHRvIGNhdGNoIHByb2JsZW1zIGluIHRoZSBkZWZhdWx0aW5nCi0gICAgLy93aGVuIHRoZSB1c2VyIGNsaWNrcyBGaW5pc2ggcHJpb3IgdG8gcGFnZSAzIG9mIHRoZSB3aXphcmQuCi0gICAgCi0gICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAgICAgICAKLSAgICBTdHJpbmcgc2NlbmFyaW8gPSBDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0NMSUVOVF9TVUI7Ci0KLSAgICAvL0Vuc3VyZSBzZXJ2ZXIgYW5kIHJ1bnRpbWUgYXJlIG5vbi1udWxsCi0gICAgU3RyaW5nIHJ1bnRpbWVJZCA9IGNsaWVudElkc18uZ2V0UnVudGltZUlkKCk7Ci0gICAgU3RyaW5nIHNlcnZlcklkID0gY2xpZW50SWRzXy5nZXRTZXJ2ZXJJZCgpOwotICAgIFN0cmluZyB0eXBlSWQgPSBjbGllbnRJZHNfLmdldFR5cGVJZCgpOwotICAgIAotICAgIGlmKCBydW50aW1lSWQgPT0gbnVsbCB8fCBydW50aW1lSWQubGVuZ3RoKCk9PTApCi0gICAgewotICAgICAgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19OT19SVU5USU1FLCBuZXcgU3RyaW5nW117IHNjZW5hcmlvIH0gKSApOwotICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgIH0KLSAgICAKLSAgICBpZiggc2VydmVySWQgPT0gbnVsbCB8fCBzZXJ2ZXJJZC5sZW5ndGgoKT09MCkKLSAgICB7Ci0gICAgICAvL1BvcHVwIGFuZCBlcnJvciBpZiB0aGUgc2VsZWN0ZWQgY2xpZW50IHByb2plY3QgZG9lcyBub3QgZXhpc3QuCi0gICAgICBJUHJvamVjdCBjbGllbnRQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KGNsaWVudFByb2plY3ROYW1lXyk7Ci0gICAgICBpZiAoIWNsaWVudFByb2plY3QuZXhpc3RzKCkpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBydW50aW1lTGFiZWwgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRSdW50aW1lTGFiZWxCeUlkKHJ1bnRpbWVJZCk7Ci0gICAgICAgIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfTk9fU0VSVkVSX1JVTlRJTUUsIG5ldyBTdHJpbmdbXXtydW50aW1lTGFiZWwgfSApICk7Ci0gICAgICAgIGVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgUnVudGltZURlc2NyaXB0b3IgZGVzYyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFJ1bnRpbWVCeUlkKHJ1bnRpbWVJZCk7Ci0KLSAgICAgICAgaWYgKGRlc2MuZ2V0U2VydmVyUmVxdWlyZWQoKSkKLSAgICAgICAgewotICAgICAgICAgIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfTk9fU0VSVkVSLCBuZXcgU3RyaW5nW10geyBzY2VuYXJpbyB9KSk7Ci0gICAgICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgICAgICB9IAotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBObyBzZXJ2ZXIgaGFzIGJlZW4gc2VsZWN0ZWQgYW5kIHRoZSBzZWxlY3RlZCBXZWIgc2VydmljZSBydW50aW1lCi0gICAgICAgICAgLy8gZG9lcyBub3QKLSAgICAgICAgICAvLyByZXF1aXJlIGEgc2VydmVyLiBTZXQgZGVwbG95LCBpbnN0YWxsLCBydW4sIGFuZCB0ZXN0IHRvIGZhbHNlLgotICAgICAgICAgIGRlcGxveUNsaWVudF8gPSBmYWxzZTsKLSAgICAgICAgICBpbnN0YWxsQ2xpZW50ID0gQm9vbGVhbi5GQUxTRTsKLSAgICAgICAgICB0ZXN0U2VydmljZSA9IEJvb2xlYW4uRkFMU0U7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy9JZiB0aGUgc2VydmVyIGlzIG5vbi1udWxsLCBlbnN1cmUgdGhlIHNlcnZlciwgcnVudGltZSwgYW5kIHR5cGUgYXJlIGNvbXBhdGlibGUKLSAgICBpZiAoc2VydmVySWQgIT0gbnVsbCAmJiBzZXJ2ZXJJZC5sZW5ndGgoKSA+IDApCi0gICAgewotICAgICAgaWYgKCFXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5pc1NlcnZlckNsaWVudFJ1bnRpbWVUeXBlU3VwcG9ydGVkKHNlcnZlcklkLCBydW50aW1lSWQsIHR5cGVJZCkpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBzZXJ2ZXJMYWJlbCA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNlcnZlckxhYmVsQnlJZChzZXJ2ZXJJZCk7Ci0gICAgICAgIFN0cmluZyBydW50aW1lTGFiZWwgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRSdW50aW1lTGFiZWxCeUlkKHJ1bnRpbWVJZCk7Ci0gICAgICAgIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfSU5WQUxJRF9TUlRfU0VMRUNUSU9OUywgbmV3IFN0cmluZ1tdIHsgc2VydmVyTGFiZWwsCi0gICAgICAgICAgICBydW50aW1lTGFiZWwgfSkpOwotICAgICAgICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIERldGVybWluZSBpZiB0aGUgc2VsZWN0ZWQgc2VydmVyIHR5cGUgaGFzIG9ubHkgc3R1YiBydW50aW1lcyBhc3NvY2lhdGVkCi0gICAgICAvLyB3aXRoIGl0LgotICAgICAgLy8gSWYgc28sIHNldCBpbnN0YWxsIGFuZCB0ZXN0IHRvIGZhbHNlIGluIHRoZSBjb250ZXh0LgotICAgICAgSVJ1bnRpbWUgbm9uU3R1YlJ1bnRpbWUgPSBTZXJ2ZXJVdGlscy5nZXROb25TdHViUnVudGltZShzZXJ2ZXJJZCk7Ci0gICAgICBpZiAobm9uU3R1YlJ1bnRpbWUgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgaW5zdGFsbENsaWVudCA9IEJvb2xlYW4uRkFMU0U7Ci0gICAgICAgIHN0YXJ0Q2xpZW50ID0gZmFsc2U7Ci0gICAgICAgIHRlc3RTZXJ2aWNlID0gQm9vbGVhbi5GQUxTRTsKLSAgICAgIH0KLSAgICB9Ci0KLQkgIC8vIGNhbGN1bGF0ZSB0aGUgbW9zdCBhcHByb3ByaWF0ZSBjbGllbnRSdW50aW1lSWQgYmFzZWQgb24gY3VycmVudCBzZXR0aW5ncy4KLQkgIGNsaWVudFJ1bnRpbWVJZF8gPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRDbGllbnRSdW50aW1lSWQoY2xpZW50SWRzXywgY2xpZW50UHJvamVjdE5hbWVfLCBjbGllbnRDb21wb25lbnRUeXBlXyk7ICAgCi0KLSAgICByZXR1cm4gc3RhdHVzOwotICB9IAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL2V4dGVuc2lvbnMvQ2xpZW50RXh0ZW5zaW9uRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9leHRlbnNpb25zL0NsaWVudEV4dGVuc2lvbkZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhMDVkMDUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL2V4dGVuc2lvbnMvQ2xpZW50RXh0ZW5zaW9uRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmRhdGEuVHlwZVJ1bnRpbWVTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuRXh0ZW5zaW9uRnJhZ21lbnQ7Ci0KLQotcHVibGljIGNsYXNzIENsaWVudEV4dGVuc2lvbkZyYWdtZW50IGV4dGVuZHMgRXh0ZW5zaW9uRnJhZ21lbnQKLXsgIAotICBwdWJsaWMgQ2xpZW50RXh0ZW5zaW9uRnJhZ21lbnQoKQotICB7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBDbGllbnRFeHRlbnNpb25GcmFnbWVudCggQ2xpZW50RXh0ZW5zaW9uRnJhZ21lbnQgZnJhZ21lbnQgKQotICB7Ci0gICAgc3VwZXIoIGZyYWdtZW50ICk7ICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIoIFR5cGVSdW50aW1lU2VydmVyIGlkcyApCi0gIHsKLSAgICBzZXRFeHRlbnNpb25JZHMoIG5ldyBTdHJpbmdbXXsgaWRzLmdldFR5cGVJZCgpLCBpZHMuZ2V0UnVudGltZUlkKCksIGlkcy5nZXRTZXJ2ZXJJZCgpIH0gKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGphdmEubGFuZy5PYmplY3QjY2xvbmUoKQotICAgKi8KLSAgcHVibGljIE9iamVjdCBjbG9uZSgpIAotICB7Ci0gICAgcmV0dXJuIG5ldyBDbGllbnRFeHRlbnNpb25GcmFnbWVudCggdGhpcyApOwotICB9ICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9leHRlbnNpb25zL0NsaWVudEV4dGVuc2lvbk91dHB1dENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9leHRlbnNpb25zL0NsaWVudEV4dGVuc2lvbk91dHB1dENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTA2MzFkNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvZXh0ZW5zaW9ucy9DbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA3MjggICAxNDU0MjYga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDcwNTAyICAgMTgwMzA0IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JV2ViU2VydmljZUNsaWVudDsKLQotcHVibGljIGNsYXNzIENsaWVudEV4dGVuc2lvbk91dHB1dENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotICBwcml2YXRlIElXZWJTZXJ2aWNlQ2xpZW50IHdlYlNlcnZpY2VDbGllbnRfOwotICAKLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgcHJveHlCZWFuLgotICAgKi8KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UHJveHlCZWFuKCkKLSAgewotICAgIHJldHVybiB3ZWJTZXJ2aWNlQ2xpZW50Xy5nZXRXZWJTZXJ2aWNlQ2xpZW50SW5mbygpLmdldEltcGxVUkwoKTsKLSAgfQotICAgIAotICBwdWJsaWMgYm9vbGVhbiBnZXRDYW5HZW5lcmF0ZVByb3h5KCkKLSAgewotCXJldHVybiAhKHdlYlNlcnZpY2VDbGllbnRfLmdldFdlYlNlcnZpY2VDbGllbnRJbmZvKCkuZ2V0SW1wbFVSTCgpID09IG51bGwpOwotICB9Ci0gIAotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBzZXRFbmRwb2ludE1ldGhvZC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2V0RW5kcG9pbnRNZXRob2QoKQotICB7Ci0JcmV0dXJuICJzZXRFbmRwb2ludCI7Ci0gIH0KLSAgCQotICBwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlQ2xpZW50KElXZWJTZXJ2aWNlQ2xpZW50IHdzYykKLSAgewotCXdlYlNlcnZpY2VDbGllbnRfID0gd3NjOwotICB9Ci0JCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmVySW5zdGFuY2VJZCgpCi0gIHsKLQlyZXR1cm4gd2ViU2VydmljZUNsaWVudF8uZ2V0V2ViU2VydmljZUNsaWVudEluZm8oKS5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCk7Ci0gIH0KLQkKLSAgcHVibGljIFN0cmluZyBnZXRTZXJ2ZXJGYWN0b3J5SWQoKQotICB7Ci0JcmV0dXJuIHdlYlNlcnZpY2VDbGllbnRfLmdldFdlYlNlcnZpY2VDbGllbnRJbmZvKCkuZ2V0U2VydmVyRmFjdG9yeUlkKCk7Ci0gIH0KLQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBwcm94eUVuZHBvaW50LgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRQcm94eUVuZHBvaW50KCkgewotICAJcmV0dXJuIHdlYlNlcnZpY2VDbGllbnRfLmdldFdlYlNlcnZpY2VDbGllbnRJbmZvKCkuZ2V0UHJveHlFbmRwb2ludCgpOwotICB9Ci0gIAotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBpbmZvKSB0aHJvd3MgRXhlY3V0aW9uRXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL2V4dGVuc2lvbnMvU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9leHRlbnNpb25zL1NlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxNjliMTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL2V4dGVuc2lvbnMvU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQwNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMDQgMTI0NDA4ICAgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyICAgICAgICAgIAotICogMjAwNjAyMjEgICAxMTkxMTEgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDUyOSAgIDE0MTQyMiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA4MjMgICAxNTQ5MzggcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlNlcnZlclV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuUnVudGltZURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmRhdGEuVHlwZVJ1bnRpbWVTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVJ1bnRpbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5kaXNjb3ZlcnkuV2ViU2VydmljZXNQYXJzZXJFeHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VzUGFyc2VyOwotCi0KLXB1YmxpYyBjbGFzcyBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0JcHJpdmF0ZSBib29sZWFuICAgICAgICAgICBkZXZlbG9wU2VydmljZV87Ci0JcHJpdmF0ZSBib29sZWFuICAgICAgICAgICBhc3NlbWJsZVNlcnZpY2VfOwotCXByaXZhdGUgYm9vbGVhbiAgICAgICAgICAgZGVwbG95U2VydmljZV87Ci0KLSAgcHJpdmF0ZSBCb29sZWFuICAgICAgICAgICAgICBpbnN0YWxsU2VydmljZTsKLSAgcHJpdmF0ZSBCb29sZWFuICAgICAgICAgICAgICBzdGFydFNlcnZpY2U7Ci0gIHByaXZhdGUgQm9vbGVhbiAgICAgICAgICAgICAgdGVzdFNlcnZpY2U7Ci0gIHByaXZhdGUgQm9vbGVhbiAgICAgICAgICAgICAgcHVibGlzaFNlcnZpY2U7Ci0gIHByaXZhdGUgVHlwZVJ1bnRpbWVTZXJ2ZXIgICAgc2VydmljZUlkc187Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgICAgc2VydmljZVJ1bnRpbWVJZF87Ci0gIC8vcHJpdmF0ZSBTZWxlY3Rpb25MaXN0Q2hvaWNlcyBzZXJ2aWNlQ2hvaWNlc187Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgICAgc2VydmljZVByb2plY3ROYW1lXzsKLSAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICAgICBzZXJ2aWNlRWFyUHJvamVjdE5hbWVfOwotICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgICAgIHNlcnZpY2VDb21wb25lbnRUeXBlXzsKLSAgLy9wcml2YXRlIFN0cmluZyAgICAgICAgICAgICAgIHNlcnZpY2VDb21wb25lbnROYW1lXzsKLSAgLy9wcml2YXRlIFN0cmluZyAgICAgICAgICAgICAgIHNlcnZpY2VFYXJDb21wb25lbnROYW1lXzsKLSAgLy9wcml2YXRlIFN0cmluZyBqMmVlVmVyc2lvbjsKLSAgcHJpdmF0ZSBib29sZWFuIHNlcnZpY2VOZWVkRUFSXzsKLSAgcHJpdmF0ZSBXZWJTZXJ2aWNlc1BhcnNlciB3c2RsUGFyc2VyXzsKLSAgCi0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcihUeXBlUnVudGltZVNlcnZlciBpZHMpCi0gIHsKLSAgICBzZXJ2aWNlSWRzXyA9IGlkczsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VFeGlzdGluZ1NlcnZlckluc3RhbmNlSWQoU3RyaW5nIHNlcnZlckluc3RJZCl7Ci0gICAgCi0gICAgaWYgKHNlcnZpY2VJZHNfLmdldFNlcnZlckluc3RhbmNlSWQoKT09bnVsbCkKLSAgICAgIHNlcnZpY2VJZHNfLnNldFNlcnZlckluc3RhbmNlSWQoc2VydmVySW5zdElkKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIFR5cGVSdW50aW1lU2VydmljZSBvYmplY3QgdGhhdCB0aGUgdXNlciBoYXMgc2VsZWN0ZWQgb24KLSAgICogcGFnZSAzIG9mIHRoZSB3aXphcmQuCi0gICAqLwotICBwdWJsaWMgVHlwZVJ1bnRpbWVTZXJ2ZXIgZ2V0U2VydmljZVR5cGVSdW50aW1lU2VydmVyKCkKLSAgewotICAgIHJldHVybiBzZXJ2aWNlSWRzXzsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U2VydmljZVJ1bnRpbWVJZChTdHJpbmcgaWQpCi0gIHsKLSAgICBzZXJ2aWNlUnVudGltZUlkXyA9IGlkOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFNlcnZpY2VSdW50aW1lSWQoKQotICB7Ci0gICAgcmV0dXJuIHNlcnZpY2VSdW50aW1lSWRfOwotICB9Ci0KLSAgLyoKLSAgcHVibGljIHZvaWQgc2V0U2VydmljZVByb2plY3QyRUFSUHJvamVjdChTZWxlY3Rpb25MaXN0Q2hvaWNlcyBjaG9pY2VzKQotICB7Ci0gICAgc2VydmljZUNob2ljZXNfID0gY2hvaWNlczsKLSAgfQotICAqLwotCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHB1Ymxpc2hTZXJ2aWNlLgotICAgKi8KLSAgcHVibGljIEJvb2xlYW4gZ2V0UHVibGlzaFNlcnZpY2UoKQotICB7Ci0gICAgcmV0dXJuIHB1Ymxpc2hTZXJ2aWNlOwotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBwdWJsaXNoU2VydmljZQotICAgKiAgICAgICAgICAgIFRoZSBwdWJsaXNoU2VydmljZSB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRQdWJsaXNoU2VydmljZShCb29sZWFuIHB1Ymxpc2hTZXJ2aWNlKQotICB7Ci0gICAgdGhpcy5wdWJsaXNoU2VydmljZSA9IHB1Ymxpc2hTZXJ2aWNlOwotICB9Ci0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgc2VydmVySXNFeGlzdGluZ1NlcnZlci4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldFNlcnZlcklzRXhpc3RpbmdTZXJ2ZXIoKQotICB7Ci0gICAgcmV0dXJuIHNlcnZpY2VJZHNfLmdldFNlcnZlckluc3RhbmNlSWQoKSAhPSBudWxsOwotICB9Ci0KLSAgLyoqCi0KLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBzZXJ2ZXJJbnN0YW5jZUlkCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFNlcnZpY2VTZXJ2ZXJJbnN0YW5jZUlkKCkKLSAgewotICAgIHJldHVybiBzZXJ2aWNlSWRzXy5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHNlcnZlclByb2plY3QuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFNlcnZlclByb2plY3QoKQotICB7Ci0gICAgcmV0dXJuIHNlcnZpY2VQcm9qZWN0TmFtZV8gKyAiLyIgKyBzZXJ2aWNlUHJvamVjdE5hbWVfOyAKLSAgfQotICAKLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgc2VydmVyUHJvamVjdEVBUi4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmVyUHJvamVjdEVBUigpCi0gIHsKLSAgICBpZiAoc2VydmljZUVhclByb2plY3ROYW1lXyE9bnVsbCAmJiBzZXJ2aWNlRWFyUHJvamVjdE5hbWVfLmxlbmd0aCgpPjApCi0gICAgewotICAgICAgcmV0dXJuIHNlcnZpY2VFYXJQcm9qZWN0TmFtZV8gKyAiLyIgKyBzZXJ2aWNlRWFyUHJvamVjdE5hbWVfOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmV0dXJuICIiOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHNlcnZlclJ1bnRpbWUuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFNlcnZlclJ1bnRpbWUoKQotICB7Ci0gICAgcmV0dXJuIHNlcnZpY2VJZHNfLmdldFJ1bnRpbWVJZCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgc2VydmVyU2VydmVyLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTZXJ2ZXJTZXJ2ZXIoKQotICB7Ci0gICAgcmV0dXJuIHNlcnZpY2VJZHNfLmdldFNlcnZlcklkKCk7Ci0gIH0KLQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBzZXJ2aWNlU2NlbmFyaW9JZC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmljZVNjZW5hcmlvSWQoKQotICB7Ci0gICAgcmV0dXJuIHNlcnZpY2VJZHNfLmdldFR5cGVJZCgpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZ2V0RGV2ZWxvcFNlcnZpY2UoKSB7Ci0JICByZXR1cm4gZGV2ZWxvcFNlcnZpY2VfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RGV2ZWxvcFNlcnZpY2UoYm9vbGVhbiBkZXZlbG9wU2VydmljZSkgewotCSAgdGhpcy5kZXZlbG9wU2VydmljZV8gPSBkZXZlbG9wU2VydmljZTsKLSAgfQkKLQotICBwdWJsaWMgYm9vbGVhbiBnZXRBc3NlbWJsZVNlcnZpY2UoKSB7Ci0JICByZXR1cm4gYXNzZW1ibGVTZXJ2aWNlXzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEFzc2VtYmxlU2VydmljZShib29sZWFuIGFzc2VtYmxlU2VydmljZSkgewotCSAgdGhpcy5hc3NlbWJsZVNlcnZpY2VfID0gYXNzZW1ibGVTZXJ2aWNlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZ2V0RGVwbG95U2VydmljZSgpIHsKLQkgIHJldHVybiBkZXBsb3lTZXJ2aWNlXzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldERlcGxveVNlcnZpY2UoYm9vbGVhbiBkZXBsb3lTZXJ2aWNlKSB7Ci0JICB0aGlzLmRlcGxveVNlcnZpY2VfID0gZGVwbG95U2VydmljZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgaW5zdGFsbFNlcnZpY2UuCi0gICAqLwotICBwdWJsaWMgQm9vbGVhbiBnZXRJbnN0YWxsU2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gaW5zdGFsbFNlcnZpY2U7Ci0gIH0KLSAgLyoqCi0gICAqIEBwYXJhbSBpbnN0YWxsU2VydmljZQotICAgKiAgICAgICAgICAgIFNwZWNpZmllcyBpZiBzZXJ2aWNlIHNob3VsZCBiZSBpbnN0YWxsZWQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRJbnN0YWxsU2VydmljZShCb29sZWFuIGluc3RhbGxTZXJ2aWNlKQotICB7Ci0gICAgdGhpcy5pbnN0YWxsU2VydmljZSA9IGluc3RhbGxTZXJ2aWNlOwotICB9Ci0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgc3RhcnRTZXJ2aWNlLgotICAgKi8KLSAgcHVibGljIEJvb2xlYW4gZ2V0U3RhcnRTZXJ2aWNlKCkKLSAgewotICAgIHJldHVybiBzdGFydFNlcnZpY2U7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAcGFyYW0gc3RhcnRTZXJ2aWNlCi0gICAqICAgICAgICAgICAgVGhlIHN0YXJ0U2VydmljZSB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTdGFydFNlcnZpY2UoQm9vbGVhbiBzdGFydFNlcnZpY2UpCi0gIHsKLSAgICB0aGlzLnN0YXJ0U2VydmljZSA9IHN0YXJ0U2VydmljZTsKLSAgfQotCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHRlc3RTZXJ2aWNlLgotICAgKi8KLSAgcHVibGljIEJvb2xlYW4gZ2V0VGVzdFNlcnZpY2UoKQotICB7Ci0gICAgcmV0dXJuIHRlc3RTZXJ2aWNlOwotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSB0ZXN0U2VydmljZQotICAgKiAgICAgICAgICAgIFRoZSB0ZXN0U2VydmljZSB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUZXN0U2VydmljZShCb29sZWFuIHRlc3RTZXJ2aWNlKQotICB7Ci0gICAgdGhpcy50ZXN0U2VydmljZSA9IHRlc3RTZXJ2aWNlOwotICB9Ci0KLSAgcHVibGljIEJvb2xlYW4gZ2V0UHVibGlzaCgpCi0gIHsKLSAgICByZXR1cm4gbmV3IEJvb2xlYW4odHJ1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBqMmVlVmVyc2lvbi4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmljZUoyRUVWZXJzaW9uKCkKLSAgewotICAJcmV0dXJuICIxNCI7IC8vcm0gajJlZQotICB9Ci0gIAotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB0cnVlIGlmIHRoZSB3ZWIgc2VydmljZSBwcm9qZWN0IG5lZWRzIHRvIGJlIGluIGFuIEVBUiBwcm9qZWN0LgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0U2VydmljZU5lZWRFQVIoKQotICB7Ci0gICAgcmV0dXJuIHNlcnZpY2VOZWVkRUFSXzsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U2VydmljZU5lZWRFQVIoYm9vbGVhbiBzZXJ2aWNlTmVlZEVBUikKLSAgewotICAgIHNlcnZpY2VOZWVkRUFSXyA9IHNlcnZpY2VOZWVkRUFSOwotICB9ICAgIAotICAKLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgd3NkbFBhcnNlcl8uCi0gICAqLwotICBwdWJsaWMgV2ViU2VydmljZXNQYXJzZXIgZ2V0V2ViU2VydmljZXNQYXJzZXIoKQotICB7Ci0gICAgaWYoIHdzZGxQYXJzZXJfID09IG51bGwgKQotICAgIHsKLSAgICAgIHdzZGxQYXJzZXJfID0gbmV3IFdlYlNlcnZpY2VzUGFyc2VyRXh0KCk7ICAKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHdzZGxQYXJzZXJfOwotICB9Ci0gIC8qKgotICAgKiBAcGFyYW0gd3NkbFBhcnNlcl8gVGhlIHdzZGxQYXJzZXJfIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VzUGFyc2VyKFdlYlNlcnZpY2VzUGFyc2VyIHdzZGxQYXJzZXIgKQotICB7Ci0gICAgd3NkbFBhcnNlcl8gPSB3c2RsUGFyc2VyOwotICB9Ci0gIAotICAKLSAgcHVibGljIHZvaWQgc2V0U2VydmljZVByb2plY3ROYW1lKFN0cmluZyBzZXJ2aWNlUHJvamVjdE5hbWUpCi0gIHsKLSAgICB0aGlzLnNlcnZpY2VQcm9qZWN0TmFtZV8gPSBzZXJ2aWNlUHJvamVjdE5hbWU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlRWFyUHJvamVjdE5hbWUoU3RyaW5nIHNlcnZpY2VFYXJQcm9qZWN0TmFtZSkKLSAgewotICAgIHRoaXMuc2VydmljZUVhclByb2plY3ROYW1lXyA9IHNlcnZpY2VFYXJQcm9qZWN0TmFtZTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U2VydmljZUNvbXBvbmVudFR5cGUoU3RyaW5nIHR5cGUpCi0gIHsKLSAgICB0aGlzLnNlcnZpY2VDb21wb25lbnRUeXBlXyA9IHR5cGU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmljZUNvbXBvbmVudFR5cGUoKQotICB7Ci0gICAgcmV0dXJuIHNlcnZpY2VDb21wb25lbnRUeXBlXzsKLSAgfQotCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGluZm8pIHRocm93cyBFeGVjdXRpb25FeGNlcHRpb24KLSAgewotICAgIElFbnZpcm9ubWVudCBlbnYgPSBnZXRFbnZpcm9ubWVudCgpOwotICAgIC8vRG8gc29tZSBiYXNpYyB2YWxpZGF0aW9uIHRvIGVuc3VyZSB0aGUgc2VydmVyL3J1bnRpbWUvdHlwZSBjb21iaW5hdGlvbiBpcyBzdXBwb3J0ZWQuCi0gICAgLy9UaGlzIGlzIG5lZWRlZCB0byBjYXRjaCBwcm9ibGVtcyBpbiB0aGUgZGVmYXVsdGluZwotICAgIC8vd2hlbiB0aGUgdXNlciBjbGlja3MgRmluaXNoIHByaW9yIHRvIHBhZ2UgMyBvZiB0aGUgd2l6YXJkLgotICAgIAotICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICAgICAKLSAgICBTdHJpbmcgc2NlbmFyaW8gPSBDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX1NFUlZJQ0VfU1VCOwotCi0gICAgLy9FbnN1cmUgc2VydmVyIGFuZCBydW50aW1lIGFyZSBub24tbnVsbAotICAgIFN0cmluZyBydW50aW1lSWQgPSBzZXJ2aWNlSWRzXy5nZXRSdW50aW1lSWQoKTsKLSAgICBTdHJpbmcgc2VydmVySWQgPSBzZXJ2aWNlSWRzXy5nZXRTZXJ2ZXJJZCgpOwotICAgIFN0cmluZyB0eXBlSWQgPSBzZXJ2aWNlSWRzXy5nZXRUeXBlSWQoKTsKLSAgICAKLSAgICBpZiggcnVudGltZUlkID09IG51bGwgfHwgcnVudGltZUlkLmxlbmd0aCgpPT0wKQotICAgIHsKLSAgICAgIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfTk9fUlVOVElNRSwgbmV3IFN0cmluZ1tdeyBzY2VuYXJpbyB9ICkgKTsKLSAgICAgIGVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLSAgICB9Ci0gICAgCi0gICAgaWYoIHNlcnZlcklkID09IG51bGwgfHwgc2VydmVySWQubGVuZ3RoKCk9PTApCi0gICAgewotICAgICAgLy9Qb3B1cCBhbmQgZXJyb3IgaWYgdGhlIHNlbGVjdGVkIHNlcnZpY2UgcHJvamVjdCBkb2VzIG5vdCBleGlzdC4KLSAgICAgIElQcm9qZWN0IHNlcnZpY2VQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHNlcnZpY2VQcm9qZWN0TmFtZV8pOwotICAgICAgaWYgKCFzZXJ2aWNlUHJvamVjdC5leGlzdHMoKSkgICAgICAgIAotICAgICAgewotICAgICAgICBTdHJpbmcgcnVudGltZUxhYmVsID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0UnVudGltZUxhYmVsQnlJZChydW50aW1lSWQpOwotICAgICAgICBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX05PX1NFUlZFUl9SVU5USU1FLCBuZXcgU3RyaW5nW117IHJ1bnRpbWVMYWJlbCB9ICkgKTsKLSAgICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotCi0gICAgICAgIFJ1bnRpbWVEZXNjcmlwdG9yIGRlc2MgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRSdW50aW1lQnlJZChydW50aW1lSWQpOwotICAgICAgICBpZiAoZGVzYy5nZXRTZXJ2ZXJSZXF1aXJlZCgpKQotICAgICAgICB7Ci0gICAgICAgICAgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19OT19TRVJWRVIsIG5ldyBTdHJpbmdbXSB7IHNjZW5hcmlvIH0pKTsKLSAgICAgICAgICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgICAgIH0gCi0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIC8vIE5vIHNlcnZlciBoYXMgYmVlbiBzZWxlY3RlZCBhbmQgdGhlIHNlbGVjdGVkIFdlYiBzZXJ2aWNlIHJ1bnRpbWUKLSAgICAgICAgICAvLyBkb2VzIG5vdCByZXF1aXJlIGEgc2VydmVyLiBTZXQgZGVwbG95LCBpbnN0YWxsLCBydW4sIGFuZCB0ZXN0IHRvIGZhbHNlLgotICAgICAgICAgIGRlcGxveVNlcnZpY2VfID0gZmFsc2U7Ci0gICAgICAgICAgaW5zdGFsbFNlcnZpY2UgPSBCb29sZWFuLkZBTFNFOwotICAgICAgICAgIHN0YXJ0U2VydmljZSA9IEJvb2xlYW4uRkFMU0U7Ci0gICAgICAgICAgdGVzdFNlcnZpY2UgPSBCb29sZWFuLkZBTFNFOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIC8vSWYgdGhlIHNlcnZlciBpcyBub24tbnVsbCwgZW5zdXJlIHRoZSBzZXJ2ZXIsIHJ1bnRpbWUsIGFuZCB0eXBlIGFyZSBjb21wYXRpYmxlCi0gICAgaWYgKHNlcnZlcklkICE9IG51bGwgJiYgc2VydmVySWQubGVuZ3RoKCkgPiAwKQotICAgIHsKLSAgICAgIGlmICghV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuaXNTZXJ2ZXJSdW50aW1lVHlwZVN1cHBvcnRlZChzZXJ2ZXJJZCwgcnVudGltZUlkLCB0eXBlSWQpKQotICAgICAgewotICAgICAgICBTdHJpbmcgc2VydmVyTGFiZWwgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTZXJ2ZXJMYWJlbEJ5SWQoc2VydmVySWQpOwotICAgICAgICBTdHJpbmcgcnVudGltZUxhYmVsID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0UnVudGltZUxhYmVsQnlJZChydW50aW1lSWQpOwotICAgICAgICBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0lOVkFMSURfU1JUX1NFTEVDVElPTlMsIG5ldyBTdHJpbmdbXSB7IHNlcnZlckxhYmVsLAotICAgICAgICAgICAgcnVudGltZUxhYmVsIH0pKTsKLSAgICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgICAgfQotCi0gICAgICAvLyBEZXRlcm1pbmUgaWYgdGhlIHNlbGVjdGVkIHNlcnZlciB0eXBlIGhhcyBvbmx5IHN0dWIgcnVudGltZXMgYXNzb2NpYXRlZAotICAgICAgLy8gd2l0aCBpdC4KLSAgICAgIC8vIElmIHNvLCBzZXQgaW5zdGFsbCwgcnVuLCBhbmQgdGVzdCB0byBmYWxzZSBpbiB0aGUgY29udGV4dC4KLSAgICAgIElSdW50aW1lIG5vblN0dWJSdW50aW1lID0gU2VydmVyVXRpbHMuZ2V0Tm9uU3R1YlJ1bnRpbWUoc2VydmVySWQpOwotICAgICAgaWYgKG5vblN0dWJSdW50aW1lID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGluc3RhbGxTZXJ2aWNlID0gQm9vbGVhbi5GQUxTRTsKLSAgICAgICAgc3RhcnRTZXJ2aWNlID0gQm9vbGVhbi5GQUxTRTsKLSAgICAgICAgdGVzdFNlcnZpY2UgPSBCb29sZWFuLkZBTFNFOwotICAgICAgfQotICAgIH0KLQotCS8vIGNhbGN1bGF0ZSB0aGUgbW9zdCBhcHByb3ByaWF0ZSBjbGllbnRSdW50aW1lSWQgYmFzZWQgb24gY3VycmVudCBzZXR0aW5ncy4KLQlzZXJ2aWNlUnVudGltZUlkXyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNlcnZpY2VSdW50aW1lSWQoIHNlcnZpY2VJZHNfLCBzZXJ2aWNlUHJvamVjdE5hbWVfLCBzZXJ2aWNlQ29tcG9uZW50VHlwZV8pOyAgIAotICAgIAotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9leHRlbnNpb25zL1NlcnZlckV4dGVuc2lvbkZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvZXh0ZW5zaW9ucy9TZXJ2ZXJFeHRlbnNpb25GcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDBhNDk1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9leHRlbnNpb25zL1NlcnZlckV4dGVuc2lvbkZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5kYXRhLlR5cGVSdW50aW1lU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkV4dGVuc2lvbkZyYWdtZW50OwotCi0KLXB1YmxpYyBjbGFzcyBTZXJ2ZXJFeHRlbnNpb25GcmFnbWVudCBleHRlbmRzIEV4dGVuc2lvbkZyYWdtZW50Ci17ICAKLSAgcHVibGljIFNlcnZlckV4dGVuc2lvbkZyYWdtZW50KCkKLSAgewotCi0gIH0KLSAgCi0gIHByb3RlY3RlZCBTZXJ2ZXJFeHRlbnNpb25GcmFnbWVudCggU2VydmVyRXh0ZW5zaW9uRnJhZ21lbnQgZnJhZ21lbnQgKQotICB7Ci0gICAgc3VwZXIoIGZyYWdtZW50ICk7ICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U2VydmljZVR5cGVSdW50aW1lU2VydmVyKCBUeXBlUnVudGltZVNlcnZlciBpZHMgKQotICB7Ci0gICAgc2V0RXh0ZW5zaW9uSWRzKCBuZXcgU3RyaW5nW117IGlkcy5nZXRUeXBlSWQoKSwgaWRzLmdldFJ1bnRpbWVJZCgpLCBpZHMuZ2V0U2VydmVySWQoKSB9ICk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBqYXZhLmxhbmcuT2JqZWN0I2Nsb25lKCkKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgY2xvbmUoKSAKLSAgewotICAgIHJldHVybiBuZXcgU2VydmVyRXh0ZW5zaW9uRnJhZ21lbnQoIHRoaXMgKTsKLSAgfSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvZXh0ZW5zaW9ucy9TZXJ2ZXJFeHRlbnNpb25PdXRwdXRDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvZXh0ZW5zaW9ucy9TZXJ2ZXJFeHRlbnNpb25PdXRwdXRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxODNjZDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL2V4dGVuc2lvbnMvU2VydmVyRXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmRpc2NvdmVyeS5XZWJTZXJ2aWNlc1BhcnNlckV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSVdlYlNlcnZpY2U7Ci0KLXB1YmxpYyBjbGFzcyBTZXJ2ZXJFeHRlbnNpb25PdXRwdXRDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLSAgLy9wcml2YXRlIFN0cmluZyAgICAgICAgICAgIHdzZGxVUklfOwotICBwcml2YXRlIFdlYlNlcnZpY2VzUGFyc2VyIHdzZGxQYXJzZXJfOwotCXByaXZhdGUgSVdlYlNlcnZpY2UgCQkJd2ViU2VydmljZV87Ci0gIAotICBwcml2YXRlIGJvb2xlYW4gaXNXZWJQcm9qZWN0U3RhcnR1cFJlcXVlc3RlZF8gPSBmYWxzZTsKLSAgICAKLSAgCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHdzZGxVUkkuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFdzZGxVUkkoKQotICB7Ci0gICAgcmV0dXJuIHdlYlNlcnZpY2VfLmdldFdlYlNlcnZpY2VJbmZvKCkuZ2V0V3NkbFVSTCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSB3c2RsVVJJCi0gICAqICAgICAgICAgICAgVGhlIHdzZGxVUkkgdG8gc2V0LgotICAgKi8KLQkvKgotICBwdWJsaWMgdm9pZCBzZXRXc2RsVVJJKFN0cmluZyB3c2RsVVJJKQotICB7Ci0gICAgd3NkbFVSSV8gPSB3c2RsVVJJOwotICB9Ci0gICovCi0JCi0JcHVibGljIHZvaWQgc2V0V2ViU2VydmljZShJV2ViU2VydmljZSB3cykKLQl7Ci0JCXdlYlNlcnZpY2VfID0gd3M7Ci0JfQotCQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSB3c2RsUGFyc2VyXy4KLSAgICovCi0gIHB1YmxpYyBXZWJTZXJ2aWNlc1BhcnNlciBnZXRXZWJTZXJ2aWNlc1BhcnNlcigpCi0gIHsKLSAgICBpZiggd3NkbFBhcnNlcl8gPT0gbnVsbCApCi0gICAgewotICAgICAgd3NkbFBhcnNlcl8gPSBuZXcgV2ViU2VydmljZXNQYXJzZXJFeHQoKTsgIAotICAgIH0KLSAgICAKLSAgICByZXR1cm4gd3NkbFBhcnNlcl87Ci0gIH0KLSAgLyoqCi0gICAqIEBwYXJhbSB3c2RsUGFyc2VyXyBUaGUgd3NkbFBhcnNlcl8gdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZXNQYXJzZXIoV2ViU2VydmljZXNQYXJzZXIgd3NkbFBhcnNlcl8pCi0gIHsKLSAgICB0aGlzLndzZGxQYXJzZXJfID0gd3NkbFBhcnNlcl87Ci0gIH0KLS8qKgotICogQHBhcmFtIGVhclByb2plY3ROYW1lIFRoZSBlYXJQcm9qZWN0TmFtZSB0byBzZXQuCi0gKi8KLXB1YmxpYyB2b2lkIHNldEVhclByb2plY3ROYW1lKFN0cmluZyBlYXJQcm9qZWN0TmFtZSkgewotfQotLyoqCi0gKiBAcGFyYW0gZXhpc3RpbmdTZXJ2ZXJJZCBUaGUgZXhpc3RpbmdTZXJ2ZXJJZCB0byBzZXQuCi0gKi8KLXB1YmxpYyB2b2lkIHNldEV4aXN0aW5nU2VydmVySWQoU3RyaW5nIGV4aXN0aW5nU2VydmVySWQpIHsKLX0KLQotLyoqCi0gKiBAcmV0dXJuIFJldHVybnMgdGhlIGlzUmVzdGFydFByb2plY3ROZWVkZWQuCi0gKi8KLXB1YmxpYyBib29sZWFuIGdldElzV2ViUHJvamVjdFN0YXJ0dXBSZXF1ZXN0ZWQoKSB7Ci0JcmV0dXJuIGlzV2ViUHJvamVjdFN0YXJ0dXBSZXF1ZXN0ZWRfOwotfQotLyoqCi0gKiBAcGFyYW0gaXNSZXN0YXJ0UHJvamVjdE5lZWRlZCBUaGUgaXNSZXN0YXJ0UHJvamVjdE5lZWRlZCB0byBzZXQuCi0gKi8KLXB1YmxpYyB2b2lkIHNldElzV2ViUHJvamVjdFN0YXJ0dXBSZXF1ZXN0ZWQoYm9vbGVhbiBpc1Jlc3RhcnRQcm9qZWN0TmVlZGVkKSB7Ci0JdGhpcy5pc1dlYlByb2plY3RTdGFydHVwUmVxdWVzdGVkXyA9IGlzUmVzdGFydFByb2plY3ROZWVkZWQ7Ci19Ci0KLXB1YmxpYyBTdHJpbmcgZ2V0U2VydmljZVNlcnZlckZhY3RvcnlJZCgpCi17Ci0JcmV0dXJuIHdlYlNlcnZpY2VfLmdldFdlYlNlcnZpY2VJbmZvKCkuZ2V0U2VydmVyRmFjdG9yeUlkKCk7Ci19Ci0KLXB1YmxpYyBTdHJpbmcgZ2V0U2VydmljZVNlcnZlckluc3RhbmNlSWQoKQotewotCXJldHVybiB3ZWJTZXJ2aWNlXy5nZXRXZWJTZXJ2aWNlSW5mbygpLmdldFNlcnZlckluc3RhbmNlSWQoKTsKLX0KLQotcHVibGljIElTdGF0dXMgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgaW5mbykgdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbgotewotICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvQWJzdHJhY3RPYmplY3RTZWxlY3Rpb25XaWRnZXQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvQWJzdHJhY3RPYmplY3RTZWxlY3Rpb25XaWRnZXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODA1Yzk3MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L0Fic3RyYWN0T2JqZWN0U2VsZWN0aW9uV2lkZ2V0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MTAgICAxMzU0NDEgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA0MjAgICAxMzU5MTIgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLlNpbXBsZVdpZGdldERhdGFDb250cmlidXRvcjsKLQotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RPYmplY3RTZWxlY3Rpb25XaWRnZXQgZXh0ZW5kcyBTaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3IgaW1wbGVtZW50cyBJT2JqZWN0U2VsZWN0aW9uV2lkZ2V0Ci17Ci0gIHB1YmxpYyB2b2lkIHNldEluaXRpYWxTZWxlY3Rpb24oSVN0cnVjdHVyZWRTZWxlY3Rpb24gaW5pdGlhbFNlbGVjdGlvbikKLSAgewotICAgIC8vIHN1YmNsYXNzIHNob3VsZCBvdmVycmlkZSB0aGlzIG1ldGhvZAotICB9Ci0KLSAgcHVibGljIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGdldE9iamVjdFNlbGVjdGlvbigpCi0gIHsKLSAgICAvLyBzdWJjbGFzcyBzaG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRob2QKLSAgICByZXR1cm4gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oKTsKLSAgfQotCi0gIHB1YmxpYyBJU3RhdHVzIHZhbGlkYXRlU2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIG9iamVjdFNlbGVjdGlvbikKLSAgewotICAgIC8vICBzdWJjbGFzcyBzaG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRob2QKLSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotCi0gIHB1YmxpYyBJUHJvamVjdCBnZXRQcm9qZWN0KCkKLSAgewotICAgIC8vICBzdWJjbGFzcyBzaG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRob2QKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgIHB1YmxpYyAgU3RyaW5nIGdldE9iamVjdFNlbGVjdGlvbkRpc3BsYXlhYmxlU3RyaW5nKCkKLSAgIHsKLQkgICAgLy8gIHN1YmNsYXNzIHNob3VsZCBvdmVycmlkZSB0aGlzIG1ldGhvZAotCSAgcmV0dXJuICIiOwotICAgfQotICAgCi0gICBwdWJsaWMgUG9pbnQgZ2V0V2lkZ2V0U2l6ZSgpCi0gICB7Ci0gICAgICAvLyBzdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSB3aXRoIGFuIGFwcHJvcHJpYXRlIGRlZmF1bHQgZGlhbG9nIHNpemUgZm9yIHRoaXMgd2lkZ2V0CSAgCi0gCSAgcmV0dXJuIG51bGw7ICAKLSAgIH0KLSAgIAotICAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGUoU3RyaW5nIHMpIHsKLSAgICAvLyBzdWJjbGFzcyBzaG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRob2QKLQlyZXR1cm4gdHJ1ZTsKLSAgICB9ICAKLSAgfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9FSkJTZWxlY3Rpb25UcmFuc2Zvcm1lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9FSkJTZWxlY3Rpb25UcmFuc2Zvcm1lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzA2ZmJiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvRUpCU2VsZWN0aW9uVHJhbnNmb3JtZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzAxMTYgICAxNTk2MTggbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFByb2plY3QgYW5kIEVBUiBub3QgZGVmYXVsdGVkIHByb3Blcmx5IHdoZW4gd2l6YXJkIGxhdW5jaGVkIGZyb20gSlNSLTEwOSBXZWIgc2VydmljZXMgYnJhbmNoIGluIEoyRUUgUHJvamVjdCBFeHBsb3JlcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuZWpiLkVudGVycHJpc2VCZWFuOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5FSkJMaW5rOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5Qb3J0Q29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5TZXJ2aWNlSW1wbEJlYW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5UcmFuc2Zvcm1lcjsKLQotcHVibGljIGNsYXNzIEVKQlNlbGVjdGlvblRyYW5zZm9ybWVyIGltcGxlbWVudHMgVHJhbnNmb3JtZXIKLXsKLQotICBwdWJsaWMgT2JqZWN0IHRyYW5zZm9ybShPYmplY3QgdmFsdWUpCi0gIHsKLSAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikKLSAgICB7Ci0gICAgICBPYmplY3Qgc2VsID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbil2YWx1ZSkuZ2V0Rmlyc3RFbGVtZW50KCk7Ci0gICAgICBpZiAoc2VsIGluc3RhbmNlb2YgRW50ZXJwcmlzZUJlYW4pCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbigoKEVudGVycHJpc2VCZWFuKXNlbCkuZ2V0TmFtZSgpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKHNlbCBpbnN0YW5jZW9mIFNlcnZpY2VJbXBsQmVhbikKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGdldEJlYW5OYW1lKChTZXJ2aWNlSW1wbEJlYW4pIHNlbCkpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoc2VsIGluc3RhbmNlb2YgRUpCTGluaykKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGdldEJlYW5OYW1lKChFSkJMaW5rKSBzZWwpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHZhbHVlOwotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBnZXRCZWFuTmFtZShTZXJ2aWNlSW1wbEJlYW4gYmVhbikgewotCSAgRU9iamVjdCBlT2JqZWN0ID0gYmVhbi5lQ29udGFpbmVyKCk7Ci0JICBpZiAoZU9iamVjdCBpbnN0YW5jZW9mIFBvcnRDb21wb25lbnQpIHsKLQkJICBQb3J0Q29tcG9uZW50IHBjID0gKFBvcnRDb21wb25lbnQpIGVPYmplY3Q7Ci0JCSAgcmV0dXJuIHBjLmdldFBvcnRDb21wb25lbnROYW1lKCk7CSAgICAgIAkKLQkgIH0KLQkgIHJldHVybiAiIjsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0QmVhbk5hbWUoRUpCTGluayBsaW5rKSB7Ci0JICBFT2JqZWN0IGVPYmplY3QgPSBsaW5rLmVDb250YWluZXIoKTsKLQkgIGlmIChlT2JqZWN0IGluc3RhbmNlb2YgU2VydmljZUltcGxCZWFuKQotCQkgIHJldHVybiBnZXRCZWFuTmFtZSgoU2VydmljZUltcGxCZWFuKSBlT2JqZWN0KTsKLQkgIHJldHVybiAiIjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9FSkJTZWxlY3Rpb25XaWRnZXQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvRUpCU2VsZWN0aW9uV2lkZ2V0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhN2IyZDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9FSkJTZWxlY3Rpb25XaWRnZXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAzMjkgICAxMjgwNjkgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDQxOCAgIDEzNjE4MCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA1MjQgICAxNDExOTQgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA4MjUgICAxMzU1NzAgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFNlcnZpY2UgaW1wbGVtZW50YXRpb24gVVJMIG5vdCBkaXNwbGF5ZWQgcHJvcGVybHkgb24gZmlyc3QgcGFnZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdDsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuZWpiLkVKQkphcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5lamIuRUpCUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuZWpiLlNlc3Npb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuZWpiLmNvbXBvbmVudGNvcmUudXRpbC5FSkJBcnRpZmFjdEVkaXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuY29tbW9uLlVJVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0RGF0YUV2ZW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUuaW50ZXJuYWwudXRpbC5Db21wb25lbnRVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLnJlc291cmNlcy5JVmlydHVhbENvbXBvbmVudDsKLQotcHVibGljIGNsYXNzIEVKQlNlbGVjdGlvbldpZGdldCBleHRlbmRzIEFic3RyYWN0T2JqZWN0U2VsZWN0aW9uV2lkZ2V0IGltcGxlbWVudHMgSU9iamVjdFNlbGVjdGlvbldpZGdldAotewotCi0gIHByaXZhdGUgQ29tYm8gZWFyTGlzdDsKLSAgcHJpdmF0ZSBFSkJUYWJsZVZpZXdlciBiZWFuTGlzdDsKLSAgcHJpdmF0ZSBJVmlydHVhbENvbXBvbmVudFtdIGVhckNvbXBvbmVudHM7Ci0gIHByaXZhdGUgSW50ZWdlciBzZWxlY3RlZEJlYW5JbmRleCA9IG51bGw7Ci0gIHByaXZhdGUgVmVjdG9yIGVqYkJlYW5OYW1lczsKLSAgcHJpdmF0ZSBWZWN0b3IgZWpiQ29tcG9uZW50TmFtZXM7Ci0gIHByaXZhdGUgVmVjdG9yIGVqYkNvbXBvbmVudFByb2plY3ROYW1lczsKLSAgcHJpdmF0ZSBIYXNodGFibGUgZWpiVmFsdWVzQnlFQVJTZWxlY3Rpb25DYWNoZTsKLSAgcHJpdmF0ZSBMaXN0ZW5lciAgc3RhdHVzTGlzdGVuZXJfOwotICBwcml2YXRlIFN0cmluZyBkaXNwbGF5U3RyaW5nXyA9ICIiOwotICAvKiBDT05URVhUX0lEIFBFQkQwMDAxIGZvciB0aGUgRUFSIFByb2plY3RzIGRyb3AtZG93biBib3ggKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QRUJEX0VBUl9QUk9KRUNUUyA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuUEVCRDAwMDEiOwotICAvKiBDT05URVhUX0lEIFBFQkQwMDAyIGZvciB0aGUgdGFibGUgY29udGFpbmluZyBhbGwgb2YgdGhlIGJlYW4gbmFtZXMgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QRUJEX1RBQkxFX0JFQU5fTkFNRVMgPSAib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLlBFQkQwMDAyIjsKLQotICBwdWJsaWMgRUpCU2VsZWN0aW9uV2lkZ2V0KCkKLSAgewotCWVhckNvbXBvbmVudHMgPSBKMkVFVXRpbHMuZ2V0QWxsRUFSQ29tcG9uZW50cygpOwotICAgIGVqYlZhbHVlc0J5RUFSU2VsZWN0aW9uQ2FjaGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdGVkQmVhbigpCi0gIHsKLSAgICBpZiAoc2VsZWN0ZWRCZWFuSW5kZXggIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gKFN0cmluZykgKGVqYkJlYW5OYW1lcy5lbGVtZW50QXQoc2VsZWN0ZWRCZWFuSW5kZXguaW50VmFsdWUoKSkpOwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0ZWRQcm9qZWN0KCkKLSAgewotICAgIGlmIChzZWxlY3RlZEJlYW5JbmRleCAhPSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiAoU3RyaW5nKSAoZWpiQ29tcG9uZW50UHJvamVjdE5hbWVzLmVsZW1lbnRBdChzZWxlY3RlZEJlYW5JbmRleC5pbnRWYWx1ZSgpKSk7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIFdpZGdldERhdGFFdmVudHMgYWRkQ29udHJvbHMoQ29tcG9zaXRlIHBhcmVudCwgTGlzdGVuZXIgc3RhdHVzTGlzdGVuZXIpCi0gIHsKLSAgICBzdGF0dXNMaXN0ZW5lcl8gID0gc3RhdHVzTGlzdGVuZXI7Ci0gICAgVUlVdGlscyB1dGlscyA9IG5ldyBVSVV0aWxzKElORk9QT1BfUEVCRF9FQVJfUFJPSkVDVFMpOwotICAgIAotICAgIENvbXBvc2l0ZSBjb21wb3NpdGUgPSB1dGlscy5jcmVhdGVDb21wb3NpdGUocGFyZW50LCAxLCAwLCAwKTsKLSAgICAKLSAgICBDb21wb3NpdGUgcHJvamVjdENvbXBvc2l0ZSA9IHV0aWxzLmNyZWF0ZUNvbXBvc2l0ZShjb21wb3NpdGUsIDIpOwotICAgIG5ldyBMYWJlbChwcm9qZWN0Q29tcG9zaXRlLCBTV1QuTlVMTCkuc2V0VGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfRUFSX1BST0pFQ1RTKTsKLSAgICBlYXJMaXN0ID0gbmV3IENvbWJvKHByb2plY3RDb21wb3NpdGUsIFNXVC5EUk9QX0RPV04gfCBTV1QuUkVBRF9PTkxZKTsKLSAgICBlYXJMaXN0LnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCkpOwotICAgIGVhckxpc3QuYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKQotICAgIHsKLSAgICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2dCkKLSAgICAgIHsKLSAgICAgICAgQ29tYm8gd2lkZ2V0ID0gKENvbWJvKSAoZXZ0LndpZGdldCk7Ci0gICAgICAgIGludCBlYXJMaXN0U2VsZWN0aW9uSW5kZXggPSB3aWRnZXQuZ2V0U2VsZWN0aW9uSW5kZXgoKTsKLSAgICAgICAgaWYgKGVhckxpc3RTZWxlY3Rpb25JbmRleCA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICBzZXRCZWFuTGlzdChlYXJDb21wb25lbnRzW2Vhckxpc3RTZWxlY3Rpb25JbmRleC0xXSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgc2V0QmVhbkxpc3QobnVsbCk7Ci0gICAgICAgIH0KLSAgICAgICAgc2VsZWN0ZWRCZWFuSW5kZXggPSBudWxsOwotICAgICAgICBzdGF0dXNMaXN0ZW5lcl8uaGFuZGxlRXZlbnQobnVsbCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gICAgYWRkRUFSTmFtZXNUb0xpc3QoKTsKLSAgICBlYXJMaXN0LnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX0VBUl9QUk9KRUNUUyk7Ci0gICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChlYXJMaXN0LCBJTkZPUE9QX1BFQkRfRUFSX1BST0pFQ1RTKTsKLSAgICAKLSAgICBHcm91cCBiZWFuQ29tcG9zaXRlID0gdXRpbHMuY3JlYXRlR3JvdXAoY29tcG9zaXRlLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfRUpCX0JFQU5fTkFNRSwgIiIsICIiKTsKLSAgICBiZWFuTGlzdCA9IG5ldyBFSkJUYWJsZVZpZXdlcihiZWFuQ29tcG9zaXRlKTsgICAgCi0gICAgVGFibGUgYmVhblRhYmxlID0gYmVhbkxpc3QuZ2V0VGFibGUoKTsKLSAgICBHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwgfCBHcmlkRGF0YS5GSUxMX1ZFUlRJQ0FMKTsKLSAgICBnZC5oZWlnaHRIaW50ID0gMTAwOwotICAgIGJlYW5UYWJsZS5zZXRMYXlvdXREYXRhKGdkKTsKLSAgICBiZWFuVGFibGUuYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKQotICAgIHsKLSAgICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2dCkKLSAgICAgIHsKLSAgICAgICAgVGFibGUgdGFibGUgPSAoVGFibGUpIChldnQud2lkZ2V0KTsKLSAgICAgICAgc2VsZWN0ZWRCZWFuSW5kZXggPSBuZXcgSW50ZWdlcih0YWJsZS5nZXRTZWxlY3Rpb25JbmRleCgpKTsKLSAgICAgICAgc3RhdHVzTGlzdGVuZXJfLmhhbmRsZUV2ZW50KG51bGwpOwotICAgICAgfQotICAgIH0pOwotICAgIGJlYW5UYWJsZS5zZXRUb29sVGlwVGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9UQUJMRV9CRUFOX05BTUVTKTsKLSAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKGJlYW5UYWJsZSwgSU5GT1BPUF9QRUJEX1RBQkxFX0JFQU5fTkFNRVMpOwotICAgIAotICAgIGlmIChlYXJDb21wb25lbnRzICE9IG51bGwgJiYgZWFyQ29tcG9uZW50cy5sZW5ndGggPiAwKQotICAgIHsKLSAgICAgIHNldEJlYW5MaXN0KGVhckNvbXBvbmVudHNbMF0pOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgc2V0QmVhbkxpc3QobnVsbCk7Ci0gICAgfQotICAgIAotICAgIC8vIFRoaXMgaXMgYSBkdW1teSBsYWJlbCB0aGF0IGZvcmNlcyB0aGUgc3RhdHVzIGxhYmVsIGludG8gdGhlIHNlY29uZAotICAgIC8vIGNvbHVtbi4KLSAgICBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuTlVMTCkuc2V0VGV4dCgiIik7Ci0gICAKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIAotICAKLSAgcHJpdmF0ZSB2b2lkIGFkZEVBUk5hbWVzVG9MaXN0KCkKLSAgewotICAgIGVhckxpc3QuYWRkKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9TSE9XX0FMTF9TVEFURUxFU1NfU0VTU0lPTl9FSkJTKTsKLSAgICBpZiAoZWFyQ29tcG9uZW50cyAhPSBudWxsICYmIGVhckNvbXBvbmVudHMubGVuZ3RoID4gMCkKLSAgICB7Ci0gICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZWFyQ29tcG9uZW50cy5sZW5ndGg7IGluZGV4KyspCi0gICAgICB7Ci0gICAgICAgIGVhckxpc3QuYWRkKGVhckNvbXBvbmVudHNbaW5kZXhdLmdldE5hbWUoKSk7Ci0gICAgICB9Ci0gICAgICBlYXJMaXN0LnNldFRleHQoZWFyTGlzdC5nZXRJdGVtKDEpKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc2V0QmVhbkxpc3QoSVZpcnR1YWxDb21wb25lbnQgZWFyQ29tcG9uZW50KQotICB7ICAgIAotICAgIFN0cmluZyBjYWNoZUtleSA9IChlYXJDb21wb25lbnQgPT0gbnVsbCk/IGVhckxpc3QuZ2V0SXRlbSgwKTogZWFyQ29tcG9uZW50LmdldE5hbWUoKTsKLSAgICAKLSAgICAvL0NoZWNrIGlmIHdlJ3ZlIGFscmVhZHkgY2FjaGVkIHJlc3VsdHMgZm9yIHRoaXMgY2FzZS4gSWYgc28sIHVzZSB0aGUKLSAgICAvL2NhY2hlZCB2YWx1ZXMgYW5kIHJldHVybi4gSWYgbm90LCBjb250aW51ZS4KLSAgICBFSkJUYWJsZVZhbHVlcyBjYWNoZWRWYWx1ZXMgPSAoRUpCVGFibGVWYWx1ZXMpZWpiVmFsdWVzQnlFQVJTZWxlY3Rpb25DYWNoZS5nZXQoY2FjaGVLZXkpOwotICAgIGlmIChjYWNoZWRWYWx1ZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBlamJCZWFuTmFtZXMgPSBjYWNoZWRWYWx1ZXMuY2FjaGVkRWpiQmVhbk5hbWVzOwotICAgICAgZWpiQ29tcG9uZW50TmFtZXMgPSBjYWNoZWRWYWx1ZXMuY2FjaGVkRWpiQ29tcG9uZW50TmFtZXM7Ci0gICAgICBlamJDb21wb25lbnRQcm9qZWN0TmFtZXMgPSBjYWNoZWRWYWx1ZXMuY2FjaGRlZEVqYkNvbXBvbmVudFByb2plY3ROYW1lczsKLSAgICAgIGJlYW5MaXN0LnNldERhdGEoZWpiQmVhbk5hbWVzLCBlamJDb21wb25lbnROYW1lcyk7Ci0gICAgICBiZWFuTGlzdC5zZXRJbnB1dChlamJCZWFuTmFtZXMpOyAgICAKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgSVZpcnR1YWxDb21wb25lbnRbXSBlamJDb21wb25lbnRzQXJyYXkgPSBudWxsOwotICAgIGlmIChlYXJDb21wb25lbnQgPT0gbnVsbCkKLSAgICB7ICAKLSAgICAgIGVqYkNvbXBvbmVudHNBcnJheSA9IEoyRUVVdGlscy5nZXRBbGxFSkJDb21wb25lbnRzKCk7ICAgICAgCi0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBlamJDb21wb25lbnRzQXJyYXkgPSBKMkVFVXRpbHMuZ2V0UmVmZXJlbmNpbmdFSkJDb21wb25lbnRzRnJvbUVBUihlYXJDb21wb25lbnQuZ2V0UHJvamVjdCgpKTsKLSAgICB9Ci0gICAgCi0gICAgVGFibGUgYmVhblRhYmxlID0gYmVhbkxpc3QuZ2V0VGFibGUoKTsKLSAgICBiZWFuVGFibGUucmVtb3ZlQWxsKCk7Ci0gICAgZWpiQmVhbk5hbWVzID0gbmV3IFZlY3RvcigpOwotICAgIGVqYkNvbXBvbmVudE5hbWVzID0gbmV3IFZlY3RvcigpOwotICAgIGVqYkNvbXBvbmVudFByb2plY3ROYW1lcyA9IG5ldyBWZWN0b3IoKTsKLSAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZWpiQ29tcG9uZW50c0FycmF5Lmxlbmd0aDsgaW5kZXgrKykKLSAgICB7Ci0gICAgICBFSkJBcnRpZmFjdEVkaXQgIGVqYkVkaXQgPSBudWxsOwotICAgICAgdHJ5IHsKLSAgICAgICAgZWpiRWRpdCA9IEVKQkFydGlmYWN0RWRpdC5nZXRFSkJBcnRpZmFjdEVkaXRGb3JSZWFkKGVqYkNvbXBvbmVudHNBcnJheVtpbmRleF0pOwotICAgICAgICBFSkJSZXNvdXJjZSBlamJSZXMgPSBlamJFZGl0LmdldEVKQkphclhtaVJlc291cmNlKCk7Ci0gICAgICAgIEVKQkphciBqYXIgPSBlamJSZXMuZ2V0RUpCSmFyKCk7Ci0gICAgICAgIFZlY3RvciBiZWFucyA9IEoyRUVVdGlscy5nZXRCZWFuTmFtZXMoamFyKTsKLSAgICAgICAgU3RyaW5nIGNvbXBvbmVudE5hbWUgPSBlamJDb21wb25lbnRzQXJyYXlbaW5kZXhdLmdldE5hbWUoKTsKLSAgICAgICAgU3RyaW5nIHByb2plY3ROYW1lID0gZWpiQ29tcG9uZW50c0FycmF5W2luZGV4XS5nZXRQcm9qZWN0KCkuZ2V0TmFtZSgpOwotICAgICAgICBlamJCZWFuTmFtZXMuYWRkQWxsKGJlYW5zKTsKLSAgICAgICAgZWpiQ29tcG9uZW50TmFtZXMuYWRkQWxsKENvbGxlY3Rpb25zLm5Db3BpZXMoYmVhbnMuc2l6ZSgpLCBjb21wb25lbnROYW1lKSk7Ci0gICAgICAgIGVqYkNvbXBvbmVudFByb2plY3ROYW1lcy5hZGRBbGwoQ29sbGVjdGlvbnMubkNvcGllcyhiZWFucy5zaXplKCksIHByb2plY3ROYW1lKSk7ICAgICAgICAgICAgICAgIAotICAgICAgfQotICAgICAgZmluYWxseSB7Ci0gICAgICAgIGlmIChlamJFZGl0IT1udWxsKQotICAgICAgICAgIGVqYkVkaXQuZGlzcG9zZSgpOwotICAgICAgfSAgICAgIAotICAgIH0KLSAgICBiZWFuTGlzdC5zZXREYXRhKGVqYkJlYW5OYW1lcywgZWpiQ29tcG9uZW50TmFtZXMpOwotICAgIGJlYW5MaXN0LnNldElucHV0KGVqYkJlYW5OYW1lcyk7Ci0gICAgCi0gICAgLy9DYWNoZSB0aGUgcmVzdWx0cyBmb3IgbmV4dCB0aW1lCi0gICAgRUpCVGFibGVWYWx1ZXMgZWpiVGFibGVWYWx1ZXMgPSBuZXcgRUpCVGFibGVWYWx1ZXMoKTsKLSAgICBlamJUYWJsZVZhbHVlcy5jYWNoZWRFamJCZWFuTmFtZXMgPSBlamJCZWFuTmFtZXM7Ci0gICAgZWpiVGFibGVWYWx1ZXMuY2FjaGVkRWpiQ29tcG9uZW50TmFtZXMgPSBlamJDb21wb25lbnROYW1lczsKLSAgICBlamJUYWJsZVZhbHVlcy5jYWNoZGVkRWpiQ29tcG9uZW50UHJvamVjdE5hbWVzID0gZWpiQ29tcG9uZW50UHJvamVjdE5hbWVzOwotICAgIGVqYlZhbHVlc0J5RUFSU2VsZWN0aW9uQ2FjaGUucHV0KGNhY2hlS2V5LCBlamJUYWJsZVZhbHVlcyk7ICAgICAgICAKLSAgfQotICAgIAotICBwdWJsaWMgdm9pZCBzZXRJbml0aWFsU2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGluaXRpYWxTZWxlY3Rpb24pCi0gIHsKLSAgICBpZiAoaW5pdGlhbFNlbGVjdGlvbiAhPSBudWxsICYmICFpbml0aWFsU2VsZWN0aW9uLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICBPYmplY3Qgb2JqZWN0ID0gaW5pdGlhbFNlbGVjdGlvbi5nZXRGaXJzdEVsZW1lbnQoKTsKLSAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBTZXNzaW9uKQotICAgICAgewotICAgICAgICBTZXNzaW9uIHNlc3Npb24gPSAoU2Vzc2lvbikgb2JqZWN0OwotICAgICAgICBFSkJKYXIgamFyID0gc2Vzc2lvbi5nZXRFamJKYXIoKTsKLSAgICAgICAgaWYgKGphciAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlYXJDb21wb25lbnRzLmxlbmd0aDsgaSsrKQotICAgICAgICAgIHsKLQkJCSAgICAgIElWaXJ0dWFsQ29tcG9uZW50W10gZWpiQ29tcG9uZW50cyA9IEoyRUVVdGlscy5nZXRSZWZlcmVuY2luZ0VKQkNvbXBvbmVudHNGcm9tRUFSKGVhckNvbXBvbmVudHNbaV0uZ2V0UHJvamVjdCgpKTsKLQkJCSAgICAgIGZvciAoaW50IGo9MDsgaiA8ZWpiQ29tcG9uZW50cy5sZW5ndGg7IGorKykKLQkJCSAgICAgIHsKLSAgICAgICAgICAgICAgRUpCQXJ0aWZhY3RFZGl0ICBlamJFZGl0ID0gbnVsbDsKLSAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBlamJFZGl0ID0gRUpCQXJ0aWZhY3RFZGl0LmdldEVKQkFydGlmYWN0RWRpdEZvclJlYWQoZWpiQ29tcG9uZW50c1tqXSk7Ci0gICAgICAgICAgICAgICAgRUpCUmVzb3VyY2UgZWpiUmVzID0gZWpiRWRpdC5nZXRFSkJKYXJYbWlSZXNvdXJjZSgpOwotICAgICAgICAgICAgICAgIGlmIChlamJSZXMuZ2V0RUpCSmFyKCkgPT0gamFyKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGVhckxpc3Quc2V0VGV4dChlYXJDb21wb25lbnRzW2ldLmdldE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgICBzZXRCZWFuTGlzdChlYXJDb21wb25lbnRzW2ldKTsKLSAgICAgICAgICAgICAgICAgIGJlYW5MaXN0LnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihuZXcgSW50ZWdlcltde25ldyBJbnRlZ2VyKGVqYkJlYW5OYW1lcy5pbmRleE9mKHNlc3Npb24uZ2V0TmFtZSgpKSl9KSk7Ci0gICAgICAgICAgICAgICAgICBzZWxlY3RlZEJlYW5JbmRleCA9IG5ldyBJbnRlZ2VyKGVqYkJlYW5OYW1lcy5pbmRleE9mKHNlc3Npb24uZ2V0TmFtZSgpKSk7Ci0gICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAKLQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGZpbmFsbHkgewotICAgICAgICAgICAgICAgIGlmIChlamJFZGl0IT1udWxsKQotICAgICAgICAgICAgICAgICAgZWpiRWRpdC5kaXNwb3NlKCk7Ci0gICAgICAgICAgICAgIH0KLQkJCQkKLQkJCSAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgCi0gICAgICAgICAgLy9IYXZlbid0IHJldHVybmVkIHlldCBzbyB3ZSBkaWQgbm90IGZpbmQgYW4gRUFSIHRoYXQgY29udGFpbnMgdGhpcyBFSkIuIEluaXRpYWxpemUgdGhlIHBhZ2UgYWNjb3JkaW5nbHkuCi0gICAgICAgICAgZWFyTGlzdC5zZXRUZXh0KGVhckxpc3QuZ2V0SXRlbSgwKSk7Ci0gICAgICAgICAgc2V0QmVhbkxpc3QobnVsbCk7Ci0gICAgICAgICAgYmVhbkxpc3Quc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKG5ldyBJbnRlZ2VyW117bmV3IEludGVnZXIoZWpiQmVhbk5hbWVzLmluZGV4T2Yoc2Vzc2lvbi5nZXROYW1lKCkpKX0pKTsKLSAgICAgICAgICBzZWxlY3RlZEJlYW5JbmRleCA9IG5ldyBJbnRlZ2VyKGVqYkJlYW5OYW1lcy5pbmRleE9mKHNlc3Npb24uZ2V0TmFtZSgpKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFN0cmluZykKLSAgICAJICBkaXNwbGF5U3RyaW5nXyA9IChTdHJpbmcpIG9iamVjdDsgLy8gc2F2ZSBmb3IgZGlzcGxheSB1c2UKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgSVN0cnVjdHVyZWRTZWxlY3Rpb24gZ2V0T2JqZWN0U2VsZWN0aW9uKCkKLSAgewotCSAgU3RyaW5nIHNlbEVKQk5hbWUgPSAoU3RyaW5nKSBlamJCZWFuTmFtZXMuZ2V0KHNlbGVjdGVkQmVhbkluZGV4LmludFZhbHVlKCkpOwotCSAgaWYgKHNlbEVKQk5hbWUgIT0gbnVsbCkKLQkgIHsKLQkJICAvL0dldCB0aGUgcHJvamVjdCBjb250YWluaW5nIHRoZSBiZWFuIHRvIGdldCB0aGUgY29ycmVzcG9uZGluZyBTZXNzaW9uIG9iamVjdC4KLQkJICAvL1RoZW4gcmV0dXJuIHRoZSBTZXNzaW9uIG9iamVjdCBpbiBhbiBJU3RydWN0dXJlZFNlbGVjdGlvbi4KLQkJICBTdHJpbmcgZWpiQ29tcG9uZW50TmFtZSA9IChTdHJpbmcpIGVqYkNvbXBvbmVudE5hbWVzLmdldChzZWxlY3RlZEJlYW5JbmRleC5pbnRWYWx1ZSgpKTsKLQkJICBJVmlydHVhbENvbXBvbmVudCBlamJDb21wb25lbnQgPSBDb21wb25lbnRVdGlsaXRpZXMuZ2V0Q29tcG9uZW50KGVqYkNvbXBvbmVudE5hbWUpOwotCQkgIEVKQkFydGlmYWN0RWRpdCAgZWpiRWRpdCA9IG51bGw7Ci0JCSAgdHJ5IAotCQkgIHsKLQkJCSAgZWpiRWRpdCA9IEVKQkFydGlmYWN0RWRpdC5nZXRFSkJBcnRpZmFjdEVkaXRGb3JSZWFkKGVqYkNvbXBvbmVudCk7Ci0JCQkgIEVKQlJlc291cmNlIGVqYlJlcyA9IGVqYkVkaXQuZ2V0RUpCSmFyWG1pUmVzb3VyY2UoKTsKLQkJCSAgRUpCSmFyIGphciA9IGVqYlJlcy5nZXRFSkJKYXIoKTsKLQkJCSAgamF2YS51dGlsLkxpc3Qgc2Vzc2lvbnMgPSBqYXIuZ2V0U2Vzc2lvbkJlYW5zKCk7Ci0JCQkgIGZvciAoSXRlcmF0b3IgaXQyID0gc2Vzc2lvbnMuaXRlcmF0b3IoKTsgaXQyLmhhc05leHQoKTspCi0JCQkgIHsKLQkJCQkgIFNlc3Npb24gc2Vzc2lvbiA9IChTZXNzaW9uKSBpdDIubmV4dCgpOwotCQkJCSAgaWYgKHNlbEVKQk5hbWUuZXF1YWxzKHNlc3Npb24uZ2V0TmFtZSgpKSkKLQkJCQkgIHsKLQkJCQkJICByZXR1cm4gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24obmV3IFNlc3Npb25bXXtzZXNzaW9ufSk7Ci0JCQkJICB9Ci0JCQkgIH0KLQkJICB9Ci0JCSAgZmluYWxseSB7Ci0JCQkgIGlmIChlamJFZGl0IT1udWxsKQotCQkJCSAgZWpiRWRpdC5kaXNwb3NlKCk7Ci0JCSAgfQotCSAgfQotCSAgcmV0dXJuIG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKG5ldyBPYmplY3RbMF0pOwotICB9Ci0gIAotICBwdWJsaWMgSVByb2plY3QgZ2V0UHJvamVjdCgpCi0gIHsKLSAgICBTdHJpbmcgcHJvamVjdE5hbWUgPSBnZXRTZWxlY3RlZFByb2plY3QoKTsKLSAgICBpZiAocHJvamVjdE5hbWUgIT0gbnVsbCAmJiBwcm9qZWN0TmFtZS5sZW5ndGgoKSA+IDApCi0gICAgICByZXR1cm4gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRDb21wb25lbnROYW1lKCkKLSAgewotICAgIGlmIChzZWxlY3RlZEJlYW5JbmRleCAhPSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiAoU3RyaW5nKSAoZWpiQ29tcG9uZW50TmFtZXMuZWxlbWVudEF0KHNlbGVjdGVkQmVhbkluZGV4LmludFZhbHVlKCkpKTsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0gICAgCi0gIAotICBwdWJsaWMgU3RyaW5nIGdldE9iamVjdFNlbGVjdGlvbkRpc3BsYXlhYmxlU3RyaW5nKCkgewotCSAgCi0JICBpZiAoZWpiQmVhbk5hbWVzID09IG51bGwpCi0JCSAgcmV0dXJuIGRpc3BsYXlTdHJpbmdfOwotCSAgCi0JICBpbnQgaW5kZXggPSBzZWxlY3RlZEJlYW5JbmRleCA9PSBudWxsID8gMCA6IHNlbGVjdGVkQmVhbkluZGV4LmludFZhbHVlKCk7Ci0JICBTdHJpbmcgYmVhbiA9IChTdHJpbmcpIGVqYkJlYW5OYW1lcy5nZXQoaW5kZXgpOwotCSAgcmV0dXJuIGJlYW4gPT0gbnVsbCA/IGRpc3BsYXlTdHJpbmdfIDogYmVhbjsKLSAgfQotICAKLSAgcHVibGljIElTdGF0dXMgdmFsaWRhdGVTZWxlY3Rpb24oSVN0cnVjdHVyZWRTZWxlY3Rpb24gb2JqZWN0U2VsZWN0aW9uKQotICB7Ci0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJU3RhdHVzIGdldFN0YXR1cygpCi0gIHsgIAkKLSAgICBpZiAoc2VsZWN0ZWRCZWFuSW5kZXggPT0gbnVsbCkKLSAgICB7Ci0gICAgCXJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggIiIgKTsKLSAgICB9Ci0gICAgCi0gIAlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotICAKLSAgcHVibGljIFBvaW50IGdldFdpZGdldFNpemUoKSB7Ci0JcmV0dXJuIG5ldyBQb2ludCg0NTAsIDM1MCk7Ci0gIH0gCi0gICAgCi0gIHByaXZhdGUgY2xhc3MgRUpCVGFibGVWYWx1ZXMKLSAgewotICAgIFZlY3RvciBjYWNoZWRFamJCZWFuTmFtZXM7Ci0gICAgVmVjdG9yIGNhY2hlZEVqYkNvbXBvbmVudE5hbWVzOwotICAgIFZlY3RvciBjYWNoZGVkRWpiQ29tcG9uZW50UHJvamVjdE5hbWVzOyAKLSAgfQotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvRUpCVGFibGVWaWV3ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvRUpCVGFibGVWaWV3ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTU1YjRmMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L0VKQlRhYmxlVmlld2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTI0ICAgMTQxMTk0IGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5Db2x1bW5XZWlnaHREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JVGFibGVMYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGFibGVWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGVDb2x1bW47Ci0KLXB1YmxpYyBjbGFzcyBFSkJUYWJsZVZpZXdlciBleHRlbmRzIFRhYmxlVmlld2VyCi17Ci0gIHByaXZhdGUgVmVjdG9yIGJlYW5OYW1lczsKLSAgcHJpdmF0ZSBWZWN0b3IgcHJvamVjdE5hbWVzOwotCi0gIHB1YmxpYyBFSkJUYWJsZVZpZXdlcihDb21wb3NpdGUgcGFyZW50KQotICB7Ci0gICAgc3VwZXIocGFyZW50LCBTV1QuU0lOR0xFIHwgU1dULkJPUkRFUiB8IFNXVC5IX1NDUk9MTCB8IFNXVC5WX1NDUk9MTCB8IFNXVC5GVUxMX1NFTEVDVElPTik7Ci0gICAgCi0gICAgU3RyaW5nIGNvbHVtblByb3BlcnRpZXNbXSA9IHtDb25zdW1wdGlvblVJTWVzc2FnZXMuVEFCTEVfVElUTEVfRUpCX0JFQU5fTkFNRVMsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UQUJMRV9USVRMRV9FSkJfUFJPSkVDVF9OQU1FfTsKLSAgICBpbnQgY29sdW1uc1dpZHRoW10gPSB7NjAsIDIwfTsKLSAgICBpbnQgY29sdW1uTWluc1tdID0gezE3NSwgMTI1fTsKLSAgICAKLSAgICBUYWJsZSB0YWJsZSA9IGdldFRhYmxlKCk7Ci0gICAgdGFibGUuc2V0SGVhZGVyVmlzaWJsZSh0cnVlKTsKLSAgICB0YWJsZS5zZXRMaW5lc1Zpc2libGUodHJ1ZSk7Ci0gICAgVGFibGVMYXlvdXQgbGF5b3V0ID0gbmV3IFRhYmxlTGF5b3V0KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb2x1bW5Qcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIFRhYmxlQ29sdW1uIGNvbHVtbiA9IG5ldyBUYWJsZUNvbHVtbih0YWJsZSwgU1dULk5PTkUsIGkpOwotICAgICAgY29sdW1uLnNldFRleHQoY29sdW1uUHJvcGVydGllc1tpXSk7Ci0gICAgICBjb2x1bW4ucGFjaygpOwotICAgICAgbGF5b3V0LmFkZENvbHVtbkRhdGEobmV3IENvbHVtbldlaWdodERhdGEoY29sdW1uc1dpZHRoW2ldLCBjb2x1bW5NaW5zW2ldLCB0cnVlKSk7ICAgICAgCi0gICAgfQotICAgIHRhYmxlLnNldExheW91dChsYXlvdXQpOwotICAgIHNldENvbHVtblByb3BlcnRpZXMoY29sdW1uUHJvcGVydGllcyk7Ci0gICAgc2V0Q29udGVudFByb3ZpZGVyKG5ldyBFSkJDb250ZW50UHJvdmlkZXIoKSk7Ci0gICAgc2V0TGFiZWxQcm92aWRlcihuZXcgRUpCTGFiZWxQcm92aWRlcigpKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0RGF0YShWZWN0b3IgYmVhbk5hbWVzLCBWZWN0b3IgcHJvamVjdE5hbWVzKQotICB7Ci0gICAgdGhpcy5iZWFuTmFtZXMgPSBiZWFuTmFtZXM7Ci0gICAgdGhpcy5wcm9qZWN0TmFtZXMgPSBwcm9qZWN0TmFtZXM7Ci0gIH0KLSAgcHJpdmF0ZSBjbGFzcyBFSkJMYWJlbFByb3ZpZGVyIGV4dGVuZHMgTGFiZWxQcm92aWRlciBpbXBsZW1lbnRzIElUYWJsZUxhYmVsUHJvdmlkZXIKLSAgewotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q29sdW1uVGV4dChPYmplY3Qgb2JqZWN0LCBpbnQgY29sdW1uSW5kZXgpCi0gICAgewotICAgICAgU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0gICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgSW50ZWdlcikKLSAgICAgIHsKLSAgICAgICAgaW50IGluZGV4ID0gKChJbnRlZ2VyKSBvYmplY3QpLmludFZhbHVlKCk7Ci0gICAgICAgIGlmIChjb2x1bW5JbmRleCA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIChTdHJpbmcpIChiZWFuTmFtZXMuZWxlbWVudEF0KGluZGV4KSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoY29sdW1uSW5kZXggPT0gMSkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiAoU3RyaW5nKSAocHJvamVjdE5hbWVzLmVsZW1lbnRBdChpbmRleCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHB1YmxpYyBJbWFnZSBnZXRDb2x1bW5JbWFnZShPYmplY3Qgb2JqZWN0LCBpbnQgY29sdW1uSW5kZXgpCi0gICAgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICB9Ci0gIHB1YmxpYyBjbGFzcyBFSkJDb250ZW50UHJvdmlkZXIgaW1wbGVtZW50cyBJU3RydWN0dXJlZENvbnRlbnRQcm92aWRlcgotICB7Ci0gICAgcHVibGljIE9iamVjdFtdIGdldEVsZW1lbnRzKE9iamVjdCBlbGVtZW50KQotICAgIHsKLSAgICAgIGlmIChiZWFuTmFtZXMgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgaW50IHNpemUgPSBiZWFuTmFtZXMuc2l6ZSgpOwotICAgICAgICBPYmplY3RbXSByZXN1bHQgPSBuZXcgT2JqZWN0W3NpemVdOwotICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgc2l6ZTsgaW5kZXgrKykKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdFtpbmRleF0gPSBuZXcgSW50ZWdlcihpbmRleCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKQotICAgIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBpbnB1dENoYW5nZWQoVmlld2VyIHZpZXdlciwgT2JqZWN0IG9sZCwgT2JqZWN0IG5ld29iaikKLSAgICB7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaXNEZWxldGVkKE9iamVjdCBvYmplY3QpCi0gICAgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9IYW5kbGVyVGFibGVJdGVtLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L0hhbmRsZXJUYWJsZUl0ZW0uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTdiZTZmNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L0hhbmRsZXJUYWJsZUl0ZW0uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLlBvcnRDb21wb25lbnQ7Ci0KLQotCi1wdWJsaWMgY2xhc3MgSGFuZGxlclRhYmxlSXRlbSB7Ci0gIAotICBwcml2YXRlIFN0cmluZyBoYW5kbGVyQ2xhc3NOYW1lOwotICBwcml2YXRlIFN0cmluZyBoYW5kbGVyTmFtZTsKLSAgcHJpdmF0ZSBTdHJpbmcgcG9ydE5hbWU7Ci0gIHByaXZhdGUgaW50IGluZGV4OwotICAKLSAgcHJpdmF0ZSBQb3J0Q29tcG9uZW50IHBvcnQ7Ci0gIHByaXZhdGUgT2JqZWN0IGhhbmRsZXI7Ci0gIHByaXZhdGUgT2JqZWN0IHdzRGVzY1JlZjsKLQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBoYW5kbGVyQ2xhc3NOYW1lLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRIYW5kbGVyQ2xhc3NOYW1lKCkgewotICAgIHJldHVybiBoYW5kbGVyQ2xhc3NOYW1lOwotICB9Ci0gIC8qKgotICAgKiBAcGFyYW0gaGFuZGxlckNsYXNzTmFtZSBUaGUgaGFuZGxlckNsYXNzTmFtZSB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRIYW5kbGVyQ2xhc3NOYW1lKFN0cmluZyBoYW5kbGVyQ2xhc3NOYW1lKSB7Ci0gICAgdGhpcy5oYW5kbGVyQ2xhc3NOYW1lID0gaGFuZGxlckNsYXNzTmFtZTsKLSAgfQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBoYW5kbGVyTmFtZS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SGFuZGxlck5hbWUoKSB7Ci0gICAgcmV0dXJuIGhhbmRsZXJOYW1lOwotICB9Ci0gIC8qKgotICAgKiBAcGFyYW0gaGFuZGxlck5hbWUgVGhlIGhhbmRsZXJOYW1lIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEhhbmRsZXJOYW1lKFN0cmluZyBoYW5kbGVyTmFtZSkgewotICAgIHRoaXMuaGFuZGxlck5hbWUgPSBoYW5kbGVyTmFtZTsKLSAgfQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBwb3J0LgotICAgKi8KLSAgcHVibGljIFBvcnRDb21wb25lbnQgZ2V0UG9ydCgpIHsKLSAgICByZXR1cm4gcG9ydDsKLSAgfQotICAvKioKLSAgICogQHBhcmFtIHBvcnQgVGhlIHBvcnQgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UG9ydChQb3J0Q29tcG9uZW50IHBvcnQpIHsKLSAgICB0aGlzLnBvcnQgPSBwb3J0OwotICB9Ci0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIGhhbmRsZXIuCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGdldEhhbmRsZXIoKSB7Ci0gICAgcmV0dXJuIGhhbmRsZXI7Ci0gIH0KLSAgLyoqCi0gICAqIEBwYXJhbSBoYW5kbGVyIFRoZSBoYW5kbGVyIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEhhbmRsZXIoT2JqZWN0IGhhbmRsZXIpIHsKLSAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVyOwotICB9Ci0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHBvcnROYW1lLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRQb3J0TmFtZSgpIHsKLSAgICByZXR1cm4gcG9ydE5hbWU7Ci0gIH0KLSAgLyoqCi0gICAqIEBwYXJhbSBwb3J0TmFtZSBUaGUgcG9ydE5hbWUgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UG9ydE5hbWUoU3RyaW5nIHBvcnROYW1lKSB7Ci0gICAgdGhpcy5wb3J0TmFtZSA9IHBvcnROYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgaW5kZXguCi0gICAqLwotICBwdWJsaWMgaW50IGdldEluZGV4KCkgewotICAgIHJldHVybiBpbmRleDsKLSAgfQotICAvKioKLSAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRJbmRleChpbnQgaW5kZXgpIHsKLSAgICB0aGlzLmluZGV4ID0gaW5kZXg7Ci0gIH0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgd3NEZXNjUmVmLgotICAgKi8KLSAgcHVibGljIE9iamVjdCBnZXRXc0Rlc2NSZWYoKSB7Ci0gICAgcmV0dXJuIHdzRGVzY1JlZjsKLSAgfQotICAvKioKLSAgICogQHBhcmFtIHdzRGVzY1JlZiBUaGUgd3NEZXNjUmVmIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdzRGVzY1JlZihPYmplY3Qgd3NEZXNjUmVmKSB7Ci0gICAgdGhpcy53c0Rlc2NSZWYgPSB3c0Rlc2NSZWY7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvSU9iamVjdFNlbGVjdGlvbldpZGdldC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9JT2JqZWN0U2VsZWN0aW9uV2lkZ2V0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiODBjMzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9JT2JqZWN0U2VsZWN0aW9uV2lkZ2V0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MTAgICAxMzU0NDEgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA0MjAgICAxMzU5MTIgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldERhdGFDb250cmlidXRvcjsKLQotLyoqCi0gKiBUaGlzIGludGVyZmFjZSBkZWZpbmVzIGV4dHJhIG1ldGhvZHMgdGhhdCBPYmplY3QgU2VsZWN0aW9uIFdpZGdldHMKLSAqIG5lZWQgdG8gaW1wbGVtZW50LiAgT2JqZWN0IFNlbGVjdGlvbiBXaWRnZXRzIGFyZSBkaXNwbGF5ZWQgb24gcGFnZSAyCi0gKiBvZiB0aGUgV2ViIHNlcnZpY2VzIHdpemFyZC4KLSAqLwotcHVibGljIGludGVyZmFjZSBJT2JqZWN0U2VsZWN0aW9uV2lkZ2V0IGV4dGVuZHMgV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yCi17Ci0gIC8qKgotICAgKiBUaGUgZnJhbWV3b3JrIHdpbGwgY2FsbCB0aGlzIG1ldGhvZCB0byBzZXQgdGhlIGluaXRpYWwgc2VsZWN0aW9uCi0gICAqIHZhbHVlIHRoYXQgdGhlIHVzZXIgaGFzIHNwZWNpZmllZC4KLSAgICogCi0gICAqIEBwYXJhbSBpbml0aWFsU2VsZWN0aW9uIHRoZSBpbml0aWFsIHNlbGVjdGlvbiB0aGUgdXNlciBzcGVjaWZpZWQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRJbml0aWFsU2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGluaXRpYWxTZWxlY3Rpb24pOwotICAKLSAgLyoqCi0gICAqIFRoZSBpbnRlbnQgb2YgdGhlIE9iamVjdCBTZWxlY3Rpb24gV2lkZ2V0IGlzIHRoYXQgdGhlIHVzZXIgaGFzCi0gICAqIHRoZSBvcHBvcnR1bml0eSBjaGFuZ2UvZmluZCB0aGUgb2JqZWN0IHRoYXQgdGhleSB3YW50IHRvIHR1cm4gaW50bwotICAgKiBhIFdlYiBzZXJ2aWNlLgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBhbiBJU3RydWN0dXJlZFNlbGVjdGlvbiBvYmplY3QgdGhhdCB0aGUgdXNlcgotICAgKiB3YW50IHRvIHR1cm4gaW50byBhIFdlYiBzZXJ2aWNlLiAgVGhpcyBvYmplY3QgbWF5IGJlIGRpZmZlcmVudCB0aGFuCi0gICAqIHRoZSBpbml0aWFsU2VsZWN0aW9uIHBhc3NlZCBpbiBieSB0aGUgc2V0SW5pdGlhbFNlbGVjdGlvbiBtZXRob2QuCi0gICAqLwotICBwdWJsaWMgSVN0cnVjdHVyZWRTZWxlY3Rpb24gZ2V0T2JqZWN0U2VsZWN0aW9uKCk7Ci0gIAotICAvKioKLSAgICogVmFsaWRhdGVzIHdoZXRoZXIgdGhlIG9iamVjdFNlbGVjdGlvbiBwYXJhbWV0ZXIgaXMgdmFsaWQgZm9yCi0gICAqIHRoaXMgT2JqZWN0IHNlbGVjdGlvbiB3aWRnZXQuICBBbiBlcnJvciBzdGF0dXMgc2hvdWxkIGJlIHJldHVybmVkCi0gICAqIGlmIHRoaXMgb2JqZWN0IGlzIG5vdCB2YWx1ZS4gIE90aGVyd2lzZSwgYW5kIG9rIHN0YXR1cyBzaG91bGQgYmUKLSAgICogcmV0dXJuZWQKLSAgICogCi0gICAqIEBwYXJhbSBvYmplY3RTZWxlY3Rpb24gdGhlIG9iamVjdCB0byBiZSB2YWxpZGF0ZWQuCi0gICAqIEByZXR1cm4gdGhlIHN0YXR1cyBvZiB0aGUgdmFsaWRhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBJU3RhdHVzIHZhbGlkYXRlU2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIG9iamVjdFNlbGVjdGlvbik7Ci0gIAotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgSVByb2plY3QgdGhhdCBjb250YWlucyB0aGUgc2VsZWN0aW9uCi0gICAqIG9iamVjdCB0aGF0IHRoZSB1c2VyIGhhcyBjaG9zZW4gd2l0aCB0aGlzIHdpZGdldC4gIFRoZSB2YWx1ZSBjYW4gYmUgCi0gICAqIG51bGwgaWYgdGhlcmUgaXMgbm8gSVByb2plY3QgZm9yIHRoaXMgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIElQcm9qZWN0IGdldFByb2plY3QoKTsKLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBJVmlydHVhbENvbXBvbmVudCB0aGF0IGNvbnRhaW5zIHRoZSBzZWxlY3Rpb24KLSAgICogb2JqZWN0IHRoYXQgdGhlIHVzZXIgaGFzIGNob3NlbiB3aXRoIHRoaXMgd2lkZ2V0LiAgVGhlIHZhbHVlIGNhbiBiZSAKLSAgICogbnVsbCBpZiB0aGVyZSBpcyBubyBJVmlydHVhbENvbXBvbmVudCBmb3IgdGhpcyBvYmplY3QKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q29tcG9uZW50TmFtZSgpOwotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIHN0cmluZyB0byBkaXNwbGF5ZWQgaW4gdGhlIFVJIGZvciB0aGUgc2VsZWN0ZWQgb2JqZWN0Ci0gICAqLwotICBwdWJsaWMgIFN0cmluZyBnZXRPYmplY3RTZWxlY3Rpb25EaXNwbGF5YWJsZVN0cmluZygpOwotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGRlZmF1bHQgaW5pdGlhbCBzaXplIGZvciB0aGUgd2lkZ2V0IHRvIGJlIGNhbGxlZCBmcm9tIGdldEluaXRpYWxTaXplIGZyb20gYW55IHBhcmVudCBkaWFsb2cKLSAgICovCi0gIHB1YmxpYyBQb2ludCBnZXRXaWRnZXRTaXplKCk7Ci0gIAotICAvKioKLSAgICogCi0gICAqIEBwYXJhbSBzIEEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvYmplY3Qgc2VsZWN0aW9uCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgc3RyaW5nIHJlcHJlc2VudHMgYSB2YWxpZCBvYmplY3Qgc2VsZWN0aW9uCi0gICAqLyAgCi0gIHB1YmxpYyBib29sZWFuIHZhbGlkYXRlKFN0cmluZyBzKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvSmF2YUJlYW5TZWxlY3Rpb25UcmFuc2Zvcm1lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9KYXZhQmVhblNlbGVjdGlvblRyYW5zZm9ybWVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlNzZiODguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9KYXZhQmVhblNlbGVjdGlvblRyYW5zZm9ybWVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMTE2ICAgMTU5NjE4IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBQcm9qZWN0IGFuZCBFQVIgbm90IGRlZmF1bHRlZCBwcm9wZXJseSB3aGVuIHdpemFyZCBsYXVuY2hlZCBmcm9tIEpTUi0xMDkgV2ViIHNlcnZpY2VzIGJyYW5jaCBpbiBKMkVFIFByb2plY3QgRXhwbG9yZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklDb21waWxhdGlvblVuaXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLlNlcnZpY2VJbXBsQmVhbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuU2VydmxldExpbms7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLmludGVybmFsLmltcGwuUG9ydENvbXBvbmVudEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5UcmFuc2Zvcm1lcjsKLQotcHVibGljIGNsYXNzIEphdmFCZWFuU2VsZWN0aW9uVHJhbnNmb3JtZXIgaW1wbGVtZW50cyBUcmFuc2Zvcm1lcgotewotICBwdWJsaWMgT2JqZWN0IHRyYW5zZm9ybShPYmplY3QgdmFsdWUpCi0gIHsKLSAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikKLSAgICB7Ci0gICAgICBPYmplY3Qgc2VsID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbil2YWx1ZSkuZ2V0Rmlyc3RFbGVtZW50KCk7Ci0gICAgICBpZiAoc2VsIGluc3RhbmNlb2YgSUZpbGUpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihjb21wdXRlRnVsbHlRdWFsaWZpZWRKYXZhTmFtZSgoSUZpbGUpc2VsKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChzZWwgaW5zdGFuY2VvZiBJQ29tcGlsYXRpb25Vbml0KQotICAgICAgewotICAgICAgICBJUmVzb3VyY2UgcmVzID0gKChJQ29tcGlsYXRpb25Vbml0KXNlbCkuZ2V0UmVzb3VyY2UoKTsKLSAgICAgICAgaWYgKHJlcyBpbnN0YW5jZW9mIElGaWxlKQotICAgICAgICAgIHJldHVybiBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihjb21wdXRlRnVsbHlRdWFsaWZpZWRKYXZhTmFtZSgoSUZpbGUpcmVzKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChzZWwgaW5zdGFuY2VvZiBTZXJ2aWNlSW1wbEJlYW4pCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihnZXRCZWFuTmFtZSgoU2VydmljZUltcGxCZWFuKSBzZWwpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYoc2VsIGluc3RhbmNlb2YgU2VydmxldExpbmspCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihnZXRCZWFuTmFtZSgoU2VydmxldExpbmspIHNlbCkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdmFsdWU7Ci0gIH0KLQotICBwcml2YXRlIFN0cmluZyBjb21wdXRlRnVsbHlRdWFsaWZpZWRKYXZhTmFtZShJRmlsZSByZXNvdXJjZSkKLSAgewotICAgIElQYXRoIHBhdGggPSByZXNvdXJjZS5nZXRGdWxsUGF0aCgpOwotICAgIFN0cmluZyBiYXNlbmFtZSA9IHBhdGgubGFzdFNlZ21lbnQoKTsKLSAgICBTdHJpbmcgYmVhbkNsYXNzID0gIiI7Ci0gICAgaWYgKGJhc2VuYW1lICE9IG51bGwgJiYgYmFzZW5hbWUubGVuZ3RoKCkgPiAwKQotICAgIHsKLSAgICAgIFN0cmluZyBiZWFuUGFja2FnZSA9IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlscy5nZXRKYXZhUmVzb3VyY2VQYWNrYWdlTmFtZShwYXRoKTsKLSAgICAgIGJlYW5DbGFzcyA9IChiZWFuUGFja2FnZSA9PSBudWxsIHx8IGJlYW5QYWNrYWdlLmxlbmd0aCgpID09IDAgPyBiYXNlbmFtZSA6IChiZWFuUGFja2FnZSArICIuIiArIGJhc2VuYW1lKSk7Ci0gICAgICBpZiAoYmVhbkNsYXNzLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoIi5qYXZhIikgfHwgYmVhbkNsYXNzLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoIi5jbGFzcyIpKQotICAgICAgICBiZWFuQ2xhc3MgPSBiZWFuQ2xhc3Muc3Vic3RyaW5nKDAsIGJlYW5DbGFzcy5sYXN0SW5kZXhPZignLicpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGJlYW5DbGFzczsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0QmVhbk5hbWUoU2VydmljZUltcGxCZWFuIGJlYW4pIHsKLSAgICBFT2JqZWN0IGVPYmplY3QgPSBiZWFuLmVDb250YWluZXIoKTsKLSAgICBpZiAoZU9iamVjdCBpbnN0YW5jZW9mIFBvcnRDb21wb25lbnRJbXBsKSB7Ci0gICAgICBQb3J0Q29tcG9uZW50SW1wbCBwY2kgPSAoUG9ydENvbXBvbmVudEltcGwpIGVPYmplY3Q7Ci0gICAgICByZXR1cm4gcGNpLmdldFNlcnZpY2VFbmRwb2ludEludGVyZmFjZSgpOwkgICAgICAJCi0gICAgfQotICAgIHJldHVybiAiIjsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0QmVhbk5hbWUoU2VydmxldExpbmsgbGluaykgeyAgICAKLSAgICBFT2JqZWN0IGVPYmplY3QgPSBsaW5rLmVDb250YWluZXIoKTsKLSAgICBpZiAoZU9iamVjdCBpbnN0YW5jZW9mIFNlcnZpY2VJbXBsQmVhbikKLSAgICAgIHJldHVybiBnZXRCZWFuTmFtZSgoU2VydmljZUltcGxCZWFuKSBlT2JqZWN0KTsKLSAgICByZXR1cm4gIiI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvSmF2YUJlYW5TZWxlY3Rpb25XaWRnZXQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvSmF2YUJlYW5TZWxlY3Rpb25XaWRnZXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjhkNDAxYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L0phdmFCZWFuU2VsZWN0aW9uV2lkZ2V0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUNvbXBpbGF0aW9uVW5pdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhTW9kZWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5Qcm9ncmVzc01vbml0b3JEaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLkJlYW5MaW5rOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5pbnRlcm5hbC5pbXBsLlBvcnRDb21wb25lbnRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5pbnRlcm5hbC5pbXBsLlNlcnZpY2VJbXBsQmVhbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uSmF2YVJlc291cmNlRmlsdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLmNvbW1vbi5VSVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5kaWFsb2cuRGlhbG9nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldERhdGFFdmVudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLnJlc291cmNlcy5JVmlydHVhbENvbXBvbmVudDsKLQotcHVibGljIGNsYXNzIEphdmFCZWFuU2VsZWN0aW9uV2lkZ2V0IGV4dGVuZHMgQWJzdHJhY3RPYmplY3RTZWxlY3Rpb25XaWRnZXQgaW1wbGVtZW50cyBJT2JqZWN0U2VsZWN0aW9uV2lkZ2V0Ci17Ci0gIHByaXZhdGUgSVByb2plY3QgICAgICAgICAgIHNlcnZlclByb2plY3RfID0gbnVsbDsKLSAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICAgc2VydmVyQ29tcG9uZW50TmFtZV8gPSBudWxsOwotICBwcml2YXRlIENvbXBvc2l0ZSAgICAgICAgICBwYXJlbnRfID0gbnVsbDsKLSAgcHJpdmF0ZSBKYXZhUmVzb3VyY2VGaWx0ZXIgZmlsdGVyXyA9IG5ldyBKYXZhUmVzb3VyY2VGaWx0ZXIoKTsKLSAgcHJpdmF0ZSBJUmVzb3VyY2UgICAgICAgICAgaW5pdGlhbFJlc291cmNlXyA9IG51bGw7Ci0gIHByaXZhdGUgTGlzdGVuZXIgc3RhdHVzTGlzdGVuZXI7Ci0gIAotICAvKkNPTlRFWFRfSUQgUEJDTDAwMDEgZm9yIHRoZSBCZWFuIFNlbGVjdGlvbiBQYWdlKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QQkNMX1BBR0UgPSAiUEJDTDAwMDEiOwotICAKLSAgcHJpdmF0ZSBUZXh0IGJlYW5DbGFzc1RleHRfOwotICAvKkNPTlRFWFRfSUQgUEJDTDAwMDIgZm9yIHRoZSBCZWFuIFNlbGVjdGlvbiBmaWVsZCBvZiB0aGUgQmVhbiBTZWxlY3Rpb24gUGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUEJDTF9URVhUX0JFQU5fQ0xBU1MgPSAiUEJDTDAwMDIiOwotCi0gIHByaXZhdGUgQnV0dG9uIGJlYW5DbGFzc0Jyb3dzZUJ1dHRvbl87Ci0gIC8qQ09OVEVYVF9JRCBQQkNMMDAwMyBmb3IgdGhlIEJlYW4gQ2xhc3MgQnJvd3NlIGJ1dHRvbiBvZiB0aGUgQmVhbiBTZWxlY3Rpb24gUGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUEJDTF9CVVRUT05fQkVBTl9DTEFTU19CUk9XU0UgPSAiUEJDTDAwMDMiOwotCi0gIHByaXZhdGUgQnV0dG9uIGJlYW5SZXNvdXJjZUJyb3dzZUJ1dHRvbl87Ci0gIC8qQ09OVEVYVF9JRCBQQkNMMDAwNCBmb3IgdGhlIEJlYW4gUmVzb3VyY2UgQnJvd3NlIGJ1dHRvbiBvZiB0aGUgQmVhbiBTZWxlY3Rpb24gUGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUEJDTF9CVVRUT05fQkVBTl9SRVNPVVJDRV9CUk9XU0UgPSAiUEJDTDAwMDQiOwotICAgCi0gIHB1YmxpYyBXaWRnZXREYXRhRXZlbnRzIGFkZENvbnRyb2xzKCBDb21wb3NpdGUgcGFyZW50LCBMaXN0ZW5lciBzdGF0dXNMaXN0ZW5lciApCi0gIHsKLQlTdHJpbmcgICAgICAgcGx1Z2luSWRfID0gIm9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aSI7CSAgCi0gICAgdGhpcy5zdGF0dXNMaXN0ZW5lciA9IHN0YXR1c0xpc3RlbmVyOwotICAgIFVJVXRpbHMgICAgICB1aVV0aWxzICA9IG5ldyBVSVV0aWxzKCBwbHVnaW5JZF8gKTsgCi0gICAgCi0gICAgcGFyZW50XyA9IHBhcmVudDsKLSAgICAKLSAgICBDb21wb3NpdGUgZ3JvdXAgPSB1aVV0aWxzLmNyZWF0ZUNvbXBvc2l0ZSggcGFyZW50LCA0ICk7Ci0gICAgCi0gICAgZ3JvdXAuc2V0VG9vbFRpcFRleHQoIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BCQ0xfUEFHRSApOwotICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoIGdyb3VwLCBwbHVnaW5JZF8gKyAiLiIgKyBJTkZPUE9QX1BCQ0xfUEFHRSApOwotICAgIAotICAgIGJlYW5DbGFzc1RleHRfID0gdWlVdGlscy5jcmVhdGVUZXh0KCBncm91cCwgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX0JFQU5fQ0xBU1NfTkFNRSwKLSAgICAJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BCQ0xfVEVYVF9CRUFOX0NMQVNTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkZPUE9QX1BCQ0xfVEVYVF9CRUFOX0NMQVNTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTV1QuU0lOR0xFIHwgU1dULkJPUkRFUik7Ci0gICAgYmVhbkNsYXNzVGV4dF8uYWRkTW9kaWZ5TGlzdGVuZXIoCi0gICAgICBuZXcgTW9kaWZ5TGlzdGVuZXIoKQotICAgICAgewotICAgICAgICBwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpCi0gICAgICAgIHsKLSAgICAgICAgICBoYW5kbGVNb2RpZnlCZWFuQ2xhc3NUZXh0KCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICApOwotICAgIAotICAgIGJlYW5DbGFzc0Jyb3dzZUJ1dHRvbl8gPSB1aVV0aWxzLmNyZWF0ZVB1c2hCdXR0b24oIGdyb3VwLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuQlVUVE9OX0JST1dTRV9DTEFTU0VTLAotICAgIAkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUEJDTF9CVVRUT05fQkVBTl9DTEFTU19CUk9XU0UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5GT1BPUF9QQkNMX0JVVFRPTl9CRUFOX0NMQVNTX0JST1dTRSApOwotICAgIGJlYW5DbGFzc0Jyb3dzZUJ1dHRvbl8uYWRkU2VsZWN0aW9uTGlzdGVuZXIoIG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZCggU2VsZWN0aW9uRXZlbnQgZXZ0ICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlQnJvd3NlQ2xhc3NlcygpOyAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSApOwotICAgIAotICAgIGJlYW5SZXNvdXJjZUJyb3dzZUJ1dHRvbl8gPSB1aVV0aWxzLmNyZWF0ZVB1c2hCdXR0b24oIGdyb3VwLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuQlVUVE9OX0JST1dTRV9GSUxFUywKLSAgICAJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BCQ0xfQlVUVE9OX0JFQU5fUkVTT1VSQ0VfQlJPV1NFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElORk9QT1BfUEJDTF9CVVRUT05fQkVBTl9SRVNPVVJDRV9CUk9XU0UgKTsKLSAgICBiZWFuUmVzb3VyY2VCcm93c2VCdXR0b25fLmFkZFNlbGVjdGlvbkxpc3RlbmVyKCBuZXcgU2VsZWN0aW9uQWRhcHRlcigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoIFNlbGVjdGlvbkV2ZW50IGV2dCApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUJyb3dzZUZpbGVzKCk7ICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBoYW5kbGVNb2RpZnlCZWFuQ2xhc3NUZXh0KCkKLSAgewotICAgIHN0YXR1c0xpc3RlbmVyLmhhbmRsZUV2ZW50KG51bGwpOwotICAgIHNlcnZlclByb2plY3RfID0gbnVsbDsKLSAgICBzZXJ2ZXJDb21wb25lbnROYW1lXyA9IG51bGw7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgaGFuZGxlQnJvd3NlQ2xhc3NlcygpCi0gIHsKLSAgICBTaGVsbCBzaGVsbCA9IHBhcmVudF8uZ2V0U2hlbGwoKTsKLSAgICBJVHlwZSBpdHlwZSA9IERpYWxvZ1V0aWxzLmJyb3dzZUNsYXNzZXNBc0lUeXBlKHNoZWxsLCBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3RzKCksIG5ldyBQcm9ncmVzc01vbml0b3JEaWFsb2coc2hlbGwpKTsKLSAgICBpZiAoaXR5cGUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBiZWFuQ2xhc3NUZXh0Xy5zZXRUZXh0KGl0eXBlLmdldEZ1bGx5UXVhbGlmaWVkTmFtZSgpKTsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBJUmVzb3VyY2UgcmVzID0gaXR5cGUuZ2V0Q29ycmVzcG9uZGluZ1Jlc291cmNlKCk7Ci0gICAgICAgIGlmIChyZXMgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHNlcnZlclByb2plY3RfID0gcmVzLmdldFByb2plY3QoKTsKLSAgICAgICAgICBJVmlydHVhbENvbXBvbmVudCBjb21wID0gUmVzb3VyY2VVdGlscy5nZXRDb21wb25lbnRPZihyZXMpOwotICAgICAgICAgIGlmIChjb21wIT1udWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHNlcnZlckNvbXBvbmVudE5hbWVfID0gY29tcC5nZXROYW1lKCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHNlcnZlclByb2plY3RfID0gbnVsbDsKLSAgICAgICAgICBzZXJ2ZXJDb21wb25lbnROYW1lXyA9IG51bGw7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChKYXZhTW9kZWxFeGNlcHRpb24gam1lKQotICAgICAgewotICAgICAgICBzZXJ2ZXJQcm9qZWN0XyA9IG51bGw7Ci0gICAgICAgIHNlcnZlckNvbXBvbmVudE5hbWVfID0gbnVsbDsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBoYW5kbGVCcm93c2VGaWxlcygpCi0gIHsKLSAgICBJUmVzb3VyY2UgdG9wUmVzb3VyY2UgPSBSZXNvdXJjZVV0aWxzLmdldFdvcmtzcGFjZVJvb3QoKTsKLSAgICBJUmVzb3VyY2UgcmVzb3VyY2UgPSBEaWFsb2dVdGlscy5icm93c2VSZXNvdXJjZXMoIHBhcmVudF8uZ2V0U2hlbGwoKSwgdG9wUmVzb3VyY2UsIGluaXRpYWxSZXNvdXJjZV8sIGZpbHRlcl8gKTsKLSAgICBzZXRCZWFuQ2xhc3MocmVzb3VyY2UpOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgc2V0QmVhbkNsYXNzKElSZXNvdXJjZSByZXNvdXJjZSkKLSAgewotICAgIGlmKCByZXNvdXJjZSAhPSBudWxsICYmIHJlc291cmNlIGluc3RhbmNlb2YgSUZpbGUgKQotICAgIHsKLSAgICAgIElQYXRoICBwYXRoICAgICA9IHJlc291cmNlLmdldEZ1bGxQYXRoKCk7Ci0gICAgICBTdHJpbmcgYmFzZW5hbWUgPSBwYXRoLmxhc3RTZWdtZW50KCk7Ci0gICAgICAKLSAgICAgIGlmKCBiYXNlbmFtZSAhPSBudWxsICYmIGJhc2VuYW1lLmxlbmd0aCgpID4gMCApCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBiZWFuUGFja2FnZSA9IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlscy5nZXRKYXZhUmVzb3VyY2VQYWNrYWdlTmFtZShwYXRoKTsKLSAgICAgICAgU3RyaW5nIGJlYW5DbGFzcyA9IChiZWFuUGFja2FnZSA9PSBudWxsIHx8IGJlYW5QYWNrYWdlLmxlbmd0aCgpID09IDAgPyBiYXNlbmFtZSA6IChiZWFuUGFja2FnZSArICIuIiArIGJhc2VuYW1lKSk7Ci0gICAgICAgIAotICAgICAgICBpZiggYmVhbkNsYXNzLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoIi5qYXZhIikgfHwgYmVhbkNsYXNzLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoIi5jbGFzcyIgKSApCi0gICAgICAgIHsKLSAgICAgICAgICBiZWFuQ2xhc3MgPSBiZWFuQ2xhc3Muc3Vic3RyaW5nKCAwLCBiZWFuQ2xhc3MubGFzdEluZGV4T2YoJy4nKSApOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBiZWFuQ2xhc3NUZXh0Xy5zZXRUZXh0KGJlYW5DbGFzcyk7Ci0gICAgICAgIHNlcnZlclByb2plY3RfID0gIFJlc291cmNlVXRpbHMuZ2V0UHJvamVjdE9mKHBhdGgpOwotICAgICAgICBJVmlydHVhbENvbXBvbmVudCBjb21wID0gUmVzb3VyY2VVdGlscy5nZXRDb21wb25lbnRPZihyZXNvdXJjZSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoY29tcCE9bnVsbCkKLSAgICAgICAgewkKLSAgICAgICAgICBzZXJ2ZXJDb21wb25lbnROYW1lXyA9IGNvbXAuZ2V0TmFtZSgpOwotICAgICAgICB9ICAgICAgICAKLSAgICAgICAgCi0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHNldEJlYW5DbGFzcyhTZXJ2aWNlSW1wbEJlYW5JbXBsIHNlcnZpY2VJbXBsKQotICB7Ci0gICAgaWYoIHNlcnZpY2VJbXBsICE9IG51bGwgKQotICAgIHsKLSAgICAgIEVPYmplY3QgZU9iamVjdCA9IHNlcnZpY2VJbXBsLmVDb250YWluZXIoKTsKLSAgICAgIGlmKGVPYmplY3QgaW5zdGFuY2VvZiBQb3J0Q29tcG9uZW50SW1wbCl7Ci0gICAgICAJUG9ydENvbXBvbmVudEltcGwgcGNpID0gKFBvcnRDb21wb25lbnRJbXBsKWVPYmplY3Q7Ci0gICAgICAJU3RyaW5nIGJlYW5DbGFzcyA9IHBjaS5nZXRTZXJ2aWNlRW5kcG9pbnRJbnRlcmZhY2UoKTsKLSAgICAgIAliZWFuQ2xhc3NUZXh0Xy5zZXRUZXh0KGJlYW5DbGFzcyk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgc2V0QmVhbkNsYXNzKEJlYW5MaW5rIHNlcnZpY2VJbXBsKQotICB7Ci0gICAgaWYoIHNlcnZpY2VJbXBsICE9IG51bGwgKQotICAgIHsKLSAgICAgIEVPYmplY3QgZU9iamVjdCA9IHNlcnZpY2VJbXBsLmVDb250YWluZXIoKTsKLSAgICAgIGlmKGVPYmplY3QgaW5zdGFuY2VvZiBTZXJ2aWNlSW1wbEJlYW5JbXBsKXsKLSAgICAgIAlzZXRCZWFuQ2xhc3MoKFNlcnZpY2VJbXBsQmVhbkltcGwpZU9iamVjdCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRJbml0aWFsU2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGluaXRpYWxTZWxlY3Rpb24pCi0gIHsKLSAgICBpZiAoaW5pdGlhbFNlbGVjdGlvbiAhPSBudWxsICYmICFpbml0aWFsU2VsZWN0aW9uLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICBPYmplY3Qgb2JqZWN0ID0gaW5pdGlhbFNlbGVjdGlvbi5nZXRGaXJzdEVsZW1lbnQoKTsKLSAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBJRmlsZSkKLSAgICAgIHsKLSAgICAgIAlJRmlsZSBpRmlsZSA9IChJRmlsZSlvYmplY3Q7Ci0gICAgICAJU3RyaW5nIGZpbGVFeHQgPSBpRmlsZS5nZXRGaWxlRXh0ZW5zaW9uKCkudG9Mb3dlckNhc2UoKTsKLSAgICAgIAlpZiAoZmlsZUV4dC5lcXVhbHMoImphdmEiKSB8fCBmaWxlRXh0LmVxdWFscygiY2xhc3MiKSkKLSAgICAgICAgICBzZXRCZWFuQ2xhc3MoaUZpbGUpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgSUNvbXBpbGF0aW9uVW5pdCkKLSAgICAgIAlzZXRCZWFuQ2xhc3MoKChJQ29tcGlsYXRpb25Vbml0KW9iamVjdCkuZ2V0UmVzb3VyY2UoKSk7Ci0gICAgICBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBTZXJ2aWNlSW1wbEJlYW5JbXBsKQotICAgICAgCXNldEJlYW5DbGFzcygoU2VydmljZUltcGxCZWFuSW1wbClvYmplY3QpOwotICAgICAgZWxzZSBpZihvYmplY3QgaW5zdGFuY2VvZiBCZWFuTGluaykKLSAgICAgIAlzZXRCZWFuQ2xhc3MoKEJlYW5MaW5rKW9iamVjdCk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgSVN0cnVjdHVyZWRTZWxlY3Rpb24gZ2V0T2JqZWN0U2VsZWN0aW9uKCkKLSAgewotICAgIHJldHVybiBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihiZWFuQ2xhc3NUZXh0Xy5nZXRUZXh0KCkpOwotICB9Ci0gIAotICBwdWJsaWMgSVByb2plY3QgZ2V0UHJvamVjdCgpCi0gIHsKLSAgICByZXR1cm4gc2VydmVyUHJvamVjdF87Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldENvbXBvbmVudE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIHNlcnZlckNvbXBvbmVudE5hbWVfOwotICB9Ci0gIAotICBwdWJsaWMgSVN0YXR1cyBnZXRTdGF0dXMoKQotICB7Ci0gICAgU3RyaW5nIGJlYW5DbGFzc05hbWUgPSBiZWFuQ2xhc3NUZXh0Xy5nZXRUZXh0KCkudHJpbSgpOwotICAgIGlmIChiZWFuQ2xhc3NOYW1lID09IG51bGwgfHwgYmVhbkNsYXNzTmFtZS5sZW5ndGgoKSA8PSAwKQotICAgIHsKLSAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9NU0dfQkVBTl9DQU5OT1RfQkVfRU1QVFkpOwotICAgIH0KLSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotICAKLSAgcHVibGljIElTdGF0dXMgdmFsaWRhdGVTZWxlY3Rpb24oSVN0cnVjdHVyZWRTZWxlY3Rpb24gb2JqZWN0U2VsZWN0aW9uKQotICB7Ci0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0T2JqZWN0U2VsZWN0aW9uRGlzcGxheWFibGVTdHJpbmcoKSB7Ci0JLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgIHJldHVybiAiSmF2YSBiZWFuIHN0cmluZyAiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L09iamVjdFNlbGVjdGlvbkZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L09iamVjdFNlbGVjdGlvbkZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjNzdkYzcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9PYmplY3RTZWxlY3Rpb25GcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LldlYlNlcnZpY2VJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LldlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5kYXRhLlR5cGVSdW50aW1lU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5Db25kaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkJvb2xlYW5GcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TZXF1ZW5jZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNpbXBsZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLlNlbGVjdGlvbkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZVNjZW5hcmlvOwotCi0KLXB1YmxpYyBjbGFzcyBPYmplY3RTZWxlY3Rpb25GcmFnbWVudCBleHRlbmRzIFNlcXVlbmNlRnJhZ21lbnQgaW1wbGVtZW50cyBDb25kaXRpb24KLXsKLSAgcHJpdmF0ZSBUeXBlUnVudGltZVNlcnZlciB0eXBlUnVudGltZVNlcnZlcjsKLSAgcHJpdmF0ZSBib29sZWFuIGhhc09iamVjdFNlbGVjdGlvbldpZGdldDsKLQotICBwdWJsaWMgT2JqZWN0U2VsZWN0aW9uRnJhZ21lbnQoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgICBCb29sZWFuRnJhZ21lbnQgYm9vbEZyYWdtZW50ID0gbmV3IEJvb2xlYW5GcmFnbWVudChuZXcgU2ltcGxlRnJhZ21lbnQoIk9iamVjdFNlbGVjdGlvbldpZGdldCIpLCBuZXcgU2ltcGxlRnJhZ21lbnQoIiIpLCB0aGlzKTsKLSAgICBhZGQoYm9vbEZyYWdtZW50KTsKLSAgICBhZGQobmV3IFNpbXBsZUZyYWdtZW50KG5ldyBPYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kKCksICIiKSk7Ci0gICAgaGFzT2JqZWN0U2VsZWN0aW9uV2lkZ2V0ID0gZmFsc2U7Ci0gIH0KLQotICAvKioKLSAgICogIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCByZXRyaWV2ZSB0aGUgZGF0YSBtYXBwaW5ncyBmb3IgdGhpcyBjb21tYW5kIGZyYWdtZW50LgotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhUmVnaXN0cnkpCi0gIHsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZWxlY3Rpb25Db21tYW5kLmNsYXNzLCAiSW5pdGlhbFNlbGVjdGlvbiIsIE9iamVjdFNlbGVjdGlvbldpZGdldC5jbGFzcyApOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlbGVjdGlvbkNvbW1hbmQuY2xhc3MsICJJbml0aWFsU2VsZWN0aW9uIiwgT2JqZWN0U2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIk9iamVjdFNlbGVjdGlvbiIsIG51bGwpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKE9iamVjdFNlbGVjdGlvbkZyYWdtZW50LmNsYXNzLCAiVHlwZVJ1bnRpbWVTZXJ2ZXIiLCBPYmplY3RTZWxlY3Rpb25XaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKE9iamVjdFNlbGVjdGlvbkZyYWdtZW50LmNsYXNzLCAiVHlwZVJ1bnRpbWVTZXJ2ZXIiLCBPYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhPYmplY3RTZWxlY3Rpb25XaWRnZXQuY2xhc3MsICJPYmplY3RTZWxlY3Rpb24iLCBPYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhPYmplY3RTZWxlY3Rpb25XaWRnZXQuY2xhc3MsICJQcm9qZWN0IiwgT2JqZWN0U2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoT2JqZWN0U2VsZWN0aW9uV2lkZ2V0LmNsYXNzLCAiQ29tcG9uZW50TmFtZSIsIE9iamVjdFNlbGVjdGlvbk91dHB1dENvbW1hbmQuY2xhc3MpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZXZhbHVhdGUoKQotICB7Ci0gICAgcmV0dXJuIGhhc09iamVjdFNlbGVjdGlvbldpZGdldDsKLSAgfQotCi0gIHB1YmxpYyBUeXBlUnVudGltZVNlcnZlciBnZXRUeXBlUnVudGltZVNlcnZlcigpCi0gIHsKLSAgICByZXR1cm4gdHlwZVJ1bnRpbWVTZXJ2ZXI7Ci0gIH0KLQotICAvKioKLSAgICogQHBhcmFtIHR5cGVSdW50aW1lU2VydmVyIFRoZSB0eXBlUnVudGltZVNlcnZlciB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUeXBlUnVudGltZVNlcnZlcihUeXBlUnVudGltZVNlcnZlciB0eXBlUnVudGltZVNlcnZlcikKLSAgewotICAgIHRoaXMudHlwZVJ1bnRpbWVTZXJ2ZXIgPSB0eXBlUnVudGltZVNlcnZlcjsKLSAgICBpZiAodHlwZVJ1bnRpbWVTZXJ2ZXIgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgd3N0ID0gdHlwZVJ1bnRpbWVTZXJ2ZXIuZ2V0VHlwZUlkKCk7Ci0KLSAgICAgIGludCBzY2VuYXJpbyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNjZW5hcmlvRnJvbVR5cGVJZCh3c3QpOwotICAgICAgU3RyaW5nIGltcGxJZCA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFdlYlNlcnZpY2VJbXBsSWRGcm9tVHlwZUlkKHdzdCk7Ci0gICAgICBpZiAoc2NlbmFyaW8gPT0gV2ViU2VydmljZVNjZW5hcmlvLlRPUERPV04pCi0gICAgICB7Ci0gICAgICAgIC8vTXVzdCBoYXZlIFdTREwgb2JqZWN0IHNlbGVjdGlvbi4gTm8gY2hvaWNlLgotICAgICAgICBoYXNPYmplY3RTZWxlY3Rpb25XaWRnZXQ9dHJ1ZTsgICAgICAgIAotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBXZWJTZXJ2aWNlSW1wbCB3c2ltcGwgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRXZWJTZXJ2aWNlSW1wbEJ5SWQoaW1wbElkKTsKLSAgICAgICAgaWYgKHdzaW1wbCE9bnVsbCkKLSAgICAgICAgeyAgCi0gICAgICAgICAgU3RyaW5nIG9iamVjdFNlbGVjdGlvbldpZGdldElkID0gd3NpbXBsLmdldE9iamVjdFNlbGVjdGlvbldpZGdldCgpOyAKLSAgICAgICAgICBoYXNPYmplY3RTZWxlY3Rpb25XaWRnZXQgPSBvYmplY3RTZWxlY3Rpb25XaWRnZXRJZCAhPSBudWxsICYmIG9iamVjdFNlbGVjdGlvbldpZGdldElkLmxlbmd0aCgpID4gMDsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9PYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L09iamVjdFNlbGVjdGlvbk91dHB1dENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTM3OGUxMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L09iamVjdFNlbGVjdGlvbk91dHB1dENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA4MzAgICAxNTUxMTQgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgVXBkYXRlZCBwYXRjaCBmb3IgdGhpcyBkZWZlY3QuCi0gKiAyMDA3MDExNiAgIDE1OTYxOCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgUHJvamVjdCBhbmQgRUFSIG5vdCBkZWZhdWx0ZWQgcHJvcGVybHkgd2hlbiB3aXphcmQgbGF1bmNoZWQgZnJvbSBKU1ItMTA5IFdlYiBzZXJ2aWNlcyBicmFuY2ggaW4gSjJFRSBQcm9qZWN0IEV4cGxvcmVyCi0gKiAyMDA3MDMyNiAgIDE3MTA3MSBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgQ3JlYXRlIHB1YmxpYyB1dGlsaXR5IG1ldGhvZCBmb3IgY29weWluZyBXU0RMIGZpbGVzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LldlYlNlcnZpY2VJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LldlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5kYXRhLlR5cGVSdW50aW1lU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLnJlc291cmNlcy5JVmlydHVhbENvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LlN0YXR1c0V4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlc1BhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudXRpbC5Vbml2ZXJzYWxQYXRoVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZVNjZW5hcmlvOwotCi0KLXB1YmxpYyBjbGFzcyBPYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLSAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICAgICAgIG9iamVjdFNlbGVjdGlvbldpZGdldElkXzsKLSAgcHJpdmF0ZSBJU3RydWN0dXJlZFNlbGVjdGlvbiAgIG9iamVjdFNlbGVjdGlvbl87Ci0gIHByaXZhdGUgSU9iamVjdFNlbGVjdGlvbldpZGdldCBvYmplY3RTZWxlY3Rpb25XaWRnZXRfOwotICBwcml2YXRlIElQcm9qZWN0ICAgICAgICAgICAgICAgcHJvamVjdF87Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgICAgICBjb21wb25lbnROYW1lXzsKLSAgcHJpdmF0ZSBXZWJTZXJ2aWNlc1BhcnNlciAgICAgIHBhcnNlcl87Ci0gIAotICBwcml2YXRlIGJvb2xlYW4gICAgICAgICAgICAgICAgdG9wRG93bl8gPSBmYWxzZTsKLQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgewotICAgIElFbnZpcm9ubWVudCBlbnYgPSBnZXRFbnZpcm9ubWVudCgpOwotICAgIAotICAgIC8vIFRyYW5zZm9ybWF0aW9uCi0gICAgaWYgKG9iamVjdFNlbGVjdGlvbldpZGdldElkXyAhPSBudWxsICYmIG9iamVjdFNlbGVjdGlvbldpZGdldElkXy5sZW5ndGgoKSA+IDApCi0gICAgewotICAgICAgVHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIgICAgICAgICAgPSBPYmplY3RTZWxlY3Rpb25SZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmdldFRyYW5zZm9ybWVyKG9iamVjdFNlbGVjdGlvbldpZGdldElkXyk7Ci0gICAgICBPYmplY3QgICAgICB0cmFuc2Zvcm1lZFNlbGVjdGlvbiA9IHRyYW5zZm9ybWVyID09IG51bGwgPyBudWxsIDogdHJhbnNmb3JtZXIudHJhbnNmb3JtKG9iamVjdFNlbGVjdGlvbl8pOwotICAgICAgCi0gICAgICBpZiAodHJhbnNmb3JtZWRTZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikKLSAgICAgIHsKLSAgICAgICAgb2JqZWN0U2VsZWN0aW9uXyA9IChJU3RydWN0dXJlZFNlbGVjdGlvbil0cmFuc2Zvcm1lZFNlbGVjdGlvbjsKLSAgICAgIH0KLSAgICB9Ci0JCi0gICAgLy8gVmFsaWRhdGlvbgotICAgIElTdGF0dXMgc3RhdHVzID0gKG9iamVjdFNlbGVjdGlvbldpZGdldF8gIT0gbnVsbCkgPyBvYmplY3RTZWxlY3Rpb25XaWRnZXRfLnZhbGlkYXRlU2VsZWN0aW9uKGdldE9iamVjdFNlbGVjdGlvbigpKSA6IFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpICE9IFN0YXR1cy5PSyAmJiBlbnYgIT0gbnVsbCkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnQoc3RhdHVzKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChTdGF0dXNFeGNlcHRpb24gc2UpCi0gICAgICB7Ci0gICAgICB9Ci0gICAgfQotCQotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0KLQotICAvKioKLSAgICogQHBhcmFtIHR5cGVSdW50aW1lU2VydmVyIFRoZSB0eXBlUnVudGltZVNlcnZlciB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUeXBlUnVudGltZVNlcnZlcihUeXBlUnVudGltZVNlcnZlciB0eXBlUnVudGltZVNlcnZlcikKLSAgewotICAgIGlmICh0eXBlUnVudGltZVNlcnZlciAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyB3c3QgPSB0eXBlUnVudGltZVNlcnZlci5nZXRUeXBlSWQoKTsKLQotICAgICAgaW50IHNjZW5hcmlvID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2NlbmFyaW9Gcm9tVHlwZUlkKHdzdCk7Ci0gICAgICBTdHJpbmcgaW1wbElkID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0V2ViU2VydmljZUltcGxJZEZyb21UeXBlSWQod3N0KTsKLQotICAgICAgV2ViU2VydmljZUltcGwgd3NpbXBsID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0V2ViU2VydmljZUltcGxCeUlkKGltcGxJZCk7Ci0JICAgIC8vSVdlYlNlcnZpY2VUeXBlIHdzdCA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFdlYlNlcnZpY2VUeXBlQnlJZCh0eXBlUnVudGltZVNlcnZlci5nZXRUeXBlSWQoKSk7Ci0KLSAgICAgIGlmICh3c2ltcGwgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIG9iamVjdFNlbGVjdGlvbldpZGdldElkID0gbnVsbDsKLSAgICAgICAgaWYgKHNjZW5hcmlvID09IFdlYlNlcnZpY2VTY2VuYXJpby5UT1BET1dOKQotICAgICAgICB7Ci0gICAgICAgICAgb2JqZWN0U2VsZWN0aW9uV2lkZ2V0SWQgPSAib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0LldTRExTZWxlY3Rpb25XaWRnZXQiOwotICAgICAgICAgIHRvcERvd25fID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBvYmplY3RTZWxlY3Rpb25XaWRnZXRJZCA9IHdzaW1wbC5nZXRPYmplY3RTZWxlY3Rpb25XaWRnZXQoKTsKLSAgICAgICAgfSAgICAgICAgCi0gICAgICAgIAotCQkgICAgb2JqZWN0U2VsZWN0aW9uV2lkZ2V0SWRfID0gb2JqZWN0U2VsZWN0aW9uV2lkZ2V0SWQ7Ci0gICAgICAgIAotCQkgICAgT2JqZWN0IG9iamVjdCA9IE9iamVjdFNlbGVjdGlvblJlZ2lzdHJ5LmdldEluc3RhbmNlKCkuZ2V0U2VsZWN0aW9uV2lkZ2V0KG9iamVjdFNlbGVjdGlvbldpZGdldElkXyk7Ci0gICAgICAgIAotICAgICAgICBpZiggb2JqZWN0IGluc3RhbmNlb2YgSU9iamVjdFNlbGVjdGlvbldpZGdldCApCi0gICAgICAgIHsKLSAgICAgICAgICBvYmplY3RTZWxlY3Rpb25XaWRnZXRfID0gKElPYmplY3RTZWxlY3Rpb25XaWRnZXQpb2JqZWN0OwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgc2VsZWN0aW9uLgotICAgKi8KLSAgcHVibGljIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGdldE9iamVjdFNlbGVjdGlvbigpCi0gIHsKLSAgICByZXR1cm4gb2JqZWN0U2VsZWN0aW9uXzsKLSAgfQotICAvKioKLSAgICogQHBhcmFtIHNlbGVjdGlvbiBUaGUgc2VsZWN0aW9uIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE9iamVjdFNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBvYmplY3RTZWxlY3Rpb24pCi0gIHsKLSAgICBvYmplY3RTZWxlY3Rpb25fID0gb2JqZWN0U2VsZWN0aW9uOwotICAgIAotICAgIC8vU2V0IHRoZSBwcm9qZWN0IGlmIHlvdSBjYW4KLSAgICBpZiAocHJvamVjdF89PW51bGwpCi0gICAgewotICAgICAgcHJvamVjdF8gPSBnZXRQcm9qZWN0RnJvbU9iamVjdFNlbGVjdGlvbihvYmplY3RTZWxlY3Rpb24pOwotICAgIH0KLSAgICAKLSAgICAvL1NldCB0aGUgY29tcG9uZW50TmFtZSBpZiB5b3UgY2FuCi0gICAgaWYgKGNvbXBvbmVudE5hbWVfID09IG51bGwpCi0gICAgewotICAgICAgY29tcG9uZW50TmFtZV8gPSBnZXRDb21wb25lbnROYW1lRnJvbU9iamVjdFNlbGVjdGlvbihvYmplY3RTZWxlY3Rpb24pOwotICAgIH0KLSAgICAKLSAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgV1NETCBzZWxlY3Rpb24gb2JqZWN0LiAgSWYgaXQgaXMgd2UgbmVlZAotICAgIC8vIHRvIHVud3JhcCBpdC4KLSAgICBpZiggb2JqZWN0U2VsZWN0aW9uICE9IG51bGwgJiYgIW9iamVjdFNlbGVjdGlvbi5pc0VtcHR5KCkgKQotICAgIHsKLSAgICAgIE9iamVjdCBvYmplY3QgPSBvYmplY3RTZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCk7Ci0gICAgICAKLSAgICAgIGlmKCBvYmplY3QgaW5zdGFuY2VvZiBXU0RMU2VsZWN0aW9uV3JhcHBlciApCi0gICAgICB7Ci0gICAgICAgIFdTRExTZWxlY3Rpb25XcmFwcGVyIHdzZGxXcmFwcGVyID0gKFdTRExTZWxlY3Rpb25XcmFwcGVyKW9iamVjdDsKLSAgICAgICAgCi0gICAgICAgIG9iamVjdFNlbGVjdGlvbl8gPSB3c2RsV3JhcHBlci53c2RsU2VsZWN0aW9uOwotICAgICAgICBwYXJzZXJfICAgICAgICAgID0gd3NkbFdyYXBwZXIucGFyc2VyOwotICAgICAgfQotICAgIH0KLSAgfQotICAKLSAgcHVibGljIElQcm9qZWN0IGdldFByb2plY3QoKQotICB7Ci0gICAgaWYgKHByb2plY3RfID09IG51bGwgJiYgdG9wRG93bl8pCi0gICAgICBwcm9qZWN0XyA9IGdldFByb2plY3RGcm9tVHJhbnNmb3JtZWRTZWxlY3Rpb24oKTsKLSAgICByZXR1cm4gcHJvamVjdF87Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFByb2plY3QoSVByb2plY3QgcHJvamVjdCkKLSAgewotICAgIHRoaXMucHJvamVjdF8gPSBwcm9qZWN0OwotICB9ICAKLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q29tcG9uZW50TmFtZSgpCi0gIHsKLSAgICBpZiAoY29tcG9uZW50TmFtZV8gPT0gbnVsbCAmJiB0b3BEb3duXykKLSAgICAgIGNvbXBvbmVudE5hbWVfID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UcmFuc2Zvcm1lZFNlbGVjdGlvbigpOwotICAgIHJldHVybiBjb21wb25lbnROYW1lXzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldENvbXBvbmVudE5hbWUoU3RyaW5nIGNvbXBvbmVudE5hbWUpCi0gIHsKLSAgICB0aGlzLmNvbXBvbmVudE5hbWVfID0gY29tcG9uZW50TmFtZTsKLSAgfQotCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHBhcnNlcl8uCi0gICAqLwotICBwdWJsaWMgV2ViU2VydmljZXNQYXJzZXIgZ2V0V2ViU2VydmljZXNQYXJzZXIoKQotICB7Ci0gICAgcmV0dXJuIHBhcnNlcl87Ci0gIH0KLSAgCi0gIHByaXZhdGUgYm9vbGVhbiBoYXNQcm90b2NvbChTdHJpbmcgdXJsKSB7IAotICAgIHJldHVybiB1cmwuaW5kZXhPZigiOiIpICE9IC0xOyAgCi0gIH0KLSAgCi0gIHByaXZhdGUgSVJlc291cmNlIGZpbmRSZXNvdXJjZUZyb21TZWxlY3Rpb24oT2JqZWN0IHNlbGVjdGlvbikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCSAgCi0gICAgICBJUmVzb3VyY2UgcmVzb3VyY2UgPSBSZXNvdXJjZVV0aWxzLmdldFJlc291cmNlRnJvbVNlbGVjdGlvbihzZWxlY3Rpb24pOyAKLQkgIAotICAgICAgLy8gdHJ5IGZpbmRpbmcgYXQgbGVhc3QgdGhlIHByb2plY3QgdXNpbmcgdGhlIEVNRiB3YXkKLSAgICAgIGlmIChyZXNvdXJjZSA9PSBudWxsICYmIHNlbGVjdGlvbiBpbnN0YW5jZW9mIEVPYmplY3QpCi0gICAgICAgICAgcmVzb3VyY2UgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3Qoc2VsZWN0aW9uKTsKLQkgIAotICAgICAgcmV0dXJuIHJlc291cmNlOwotICB9Ci0gIAotICBwcml2YXRlIElQcm9qZWN0IGdldFByb2plY3RGcm9tVHJhbnNmb3JtZWRTZWxlY3Rpb24oKSB7Ci0gICAgaWYgKG9iamVjdFNlbGVjdGlvbl8gIT0gbnVsbCAmJiBvYmplY3RTZWxlY3Rpb25fLnNpemUoKSA9PSAxKQotICAgIHsKLSAgICAgIE9iamVjdCBvYmogPSBvYmplY3RTZWxlY3Rpb25fLmdldEZpcnN0RWxlbWVudCgpOwotICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIFN0cmluZykgewotICAgICAgICBTdHJpbmcgc3RyID0gVW5pdmVyc2FsUGF0aFRyYW5zZm9ybWVyLnRvUGF0aCgoU3RyaW5nKSBvYmopOwotICAgICAgICBpZiAoaGFzUHJvdG9jb2woc3RyKSkgcmV0dXJuIG51bGw7Ci0gICAgICAgIHJldHVybiBSZXNvdXJjZVV0aWxzLmdldFByb2plY3RPZihuZXcgUGF0aChzdHIpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7CSAgCi0gIH0KLSAgCi0gIHByaXZhdGUgSVByb2plY3QgZ2V0UHJvamVjdEZyb21PYmplY3RTZWxlY3Rpb24oSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uKQotICB7Ci0gICAgaWYgKHNlbGVjdGlvbiAhPSBudWxsICYmIHNlbGVjdGlvbi5zaXplKCkgPT0gMSkKLSAgICB7Ci0gICAgICBPYmplY3Qgb2JqID0gc2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOwotICAgICAgaWYgKG9iaiAhPSBudWxsKSAKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsgCi0gICAgICAgICAgSVJlc291cmNlIHJlc291cmNlID0gZmluZFJlc291cmNlRnJvbVNlbGVjdGlvbihvYmopOwotICAgICAgICAgIGlmIChyZXNvdXJjZT09bnVsbCkgCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICBpZiAocmVzb3VyY2UgaW5zdGFuY2VvZiBJUHJvamVjdCkKLSAgICAgICAgCXJldHVybiAoSVByb2plY3QpIHJlc291cmNlOwotICAgICAgICAgIElQcm9qZWN0IHAgPSBSZXNvdXJjZVV0aWxzLmdldFByb2plY3RPZihyZXNvdXJjZS5nZXRGdWxsUGF0aCgpKTsKLSAgICAgICAgICByZXR1cm4gcDsKLSAgICAgICAgfSBjYXRjaChDb3JlRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0gICAgICAgIAotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0Q29tcG9uZW50TmFtZUZyb21UcmFuc2Zvcm1lZFNlbGVjdGlvbigpIHsKLSAgICBpZiAob2JqZWN0U2VsZWN0aW9uXyAhPSBudWxsICYmIG9iamVjdFNlbGVjdGlvbl8uc2l6ZSgpID09IDEpCi0gICAgewotICAgICAgT2JqZWN0IG9iaiA9IG9iamVjdFNlbGVjdGlvbl8uZ2V0Rmlyc3RFbGVtZW50KCk7Ci0gICAgICBpZiAob2JqIGluc3RhbmNlb2YgU3RyaW5nKSB7IAotICAgICAgICBTdHJpbmcgc3RyID0gVW5pdmVyc2FsUGF0aFRyYW5zZm9ybWVyLnRvUGF0aCgoU3RyaW5nKSBvYmopOwotICAgICAgICBpZiAoaGFzUHJvdG9jb2woc3RyKSkgcmV0dXJuIG51bGw7Ci0gICAgICAgIElWaXJ0dWFsQ29tcG9uZW50IGNvbXAgPSBSZXNvdXJjZVV0aWxzLmdldENvbXBvbmVudE9mKG5ldyBQYXRoKHN0cikpOwotICAgICAgICByZXR1cm4gY29tcCA9PSBudWxsID8gbnVsbCA6IGNvbXAuZ2V0TmFtZSgpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsJICAKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0Q29tcG9uZW50TmFtZUZyb21PYmplY3RTZWxlY3Rpb24oSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uKQotICB7Ci0gICAgaWYgKHNlbGVjdGlvbiAhPSBudWxsICYmIHNlbGVjdGlvbi5zaXplKCkgPT0gMSkKLSAgICB7Ci0gICAgICBPYmplY3Qgb2JqID0gc2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOwotICAgICAgaWYgKG9iaiAhPSBudWxsKSAKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsgCi0gICAgICAgICAgSVJlc291cmNlIHJlc291cmNlID0gZmluZFJlc291cmNlRnJvbVNlbGVjdGlvbihvYmopOwotICAgICAgICAgIGlmIChyZXNvdXJjZT09bnVsbCkgCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgCi0gICAgICAgICAgSVZpcnR1YWxDb21wb25lbnQgY29tcCA9IFJlc291cmNlVXRpbHMuZ2V0Q29tcG9uZW50T2YocmVzb3VyY2UpOwotICAgICAKLSAgICAgICAgICBpZiAoY29tcCE9bnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gY29tcC5nZXROYW1lKCk7Ci0gICAgICAgICAgfQotICAgICAgICB9IGNhdGNoKENvcmVFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfSAgICAgICAgCi0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9ICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvT2JqZWN0U2VsZWN0aW9uUmVnaXN0cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvT2JqZWN0U2VsZWN0aW9uUmVnaXN0cnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTZiMjkxOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L09iamVjdFNlbGVjdGlvblJlZ2lzdHJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwODI1ICAgMTU1MTE0IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDYwODMwICAgMTU1MTE0IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2ssIFVwZGF0ZWQgcGF0Y2ggZm9yIHRoaXMgZGVmZWN0LgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuSU9iamVjdFNlbGVjdGlvbkxhdW5jaGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5UcmFuc2Zvcm1lcjsKLQotcHVibGljIGNsYXNzIE9iamVjdFNlbGVjdGlvblJlZ2lzdHJ5Ci17Ci0gIHByaXZhdGUgc3RhdGljIE9iamVjdFNlbGVjdGlvblJlZ2lzdHJ5IGluc3RhbmNlOwotICBwcml2YXRlIElDb25maWd1cmF0aW9uRWxlbWVudFtdICAgICAgICBlbGVtZW50czsKLSAgcHJpdmF0ZSBIYXNodGFibGUgICAgICAgICAgICAgICAgICAgICAgY2FjaGVkU2VsZWN0aW9uV2lkZ2V0czsKLSAgCi0gIHByaXZhdGUgT2JqZWN0U2VsZWN0aW9uUmVnaXN0cnkoKQotICB7Ci0gICAgZWxlbWVudHMgPSBQbGF0Zm9ybS5nZXRFeHRlbnNpb25SZWdpc3RyeSgpLmdldENvbmZpZ3VyYXRpb25FbGVtZW50c0Zvcigib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpIiwgIm9iamVjdFNlbGVjdGlvbldpZGdldCIpOwotICAgIGNhY2hlZFNlbGVjdGlvbldpZGdldHMgPSBuZXcgSGFzaHRhYmxlKCk7ICAgIAotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIE9iamVjdFNlbGVjdGlvblJlZ2lzdHJ5IGdldEluc3RhbmNlKCkKLSAgewotICAgIGlmIChpbnN0YW5jZSA9PSBudWxsKQotICAgIHsKLSAgICAgIGluc3RhbmNlID0gbmV3IE9iamVjdFNlbGVjdGlvblJlZ2lzdHJ5KCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBpbnN0YW5jZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcGFyYW0gaWQgaWYgdGhlIHNlbGVjdGlvbiB3aWRnZXQgb2JqZWN0LgotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIHRyYW5zZm9ybWVyIGNsYXNzIGlmIGhhcyBiZWVuIHNwZWNpZmllZC4gIE90aGVyd2lzZQotICAgKiBudWxsIGlzIHJldHVybmVkLgotICAgKi8KLSAgcHVibGljIFRyYW5zZm9ybWVyIGdldFRyYW5zZm9ybWVyKCBTdHJpbmcgaWQgKQotICB7Ci0gICAgVGFibGVFbnRyeSAgZW50cnkgID0gZ2V0VGFibGVFbnRyeSggaWQgKTsKLSAgICBUcmFuc2Zvcm1lciByZXN1bHQgPSBudWxsOwotICAgIAotICAgIGlmKCBlbnRyeSAhPSBudWxsICkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgT2JqZWN0IG9iamVjdCA9IGVudHJ5LmVsZW1lbnQuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbigidHJhbnNmb3JtZXIiKTsKLSAgICAgICAgCi0gICAgICAgIGlmKCBvYmplY3QgaW5zdGFuY2VvZiBUcmFuc2Zvcm1lciApCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQgPSAoVHJhbnNmb3JtZXIpb2JqZWN0OwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBjYXRjaCggQ29yZUV4Y2VwdGlvbiBleGMgKXt9ICAgICAKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcGFyYW0gaWQgaWYgdGhlIHNlbGVjdGlvbiB3aWRnZXQgb2JqZWN0LgotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBleHRlcm5hbCBtb2RpZnkgYXR0cmlidXRlIGlmCi0gICAqIGl0IGhhcyBiZWVuIHNwZWNpZmllZC4gIE90aGVyd2lzZSBmYWxzZSBpcyByZXR1cm5lZC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldEV4dGVybmFsTW9kaWZ5KCBTdHJpbmcgaWQgKQotICB7Ci0gICAgVGFibGVFbnRyeSBlbnRyeSAgPSBnZXRUYWJsZUVudHJ5KCBpZCApOwotICAgIGJvb2xlYW4gICAgcmVzdWx0ID0gZmFsc2U7Ci0gICAgCi0gICAgaWYoIGVudHJ5ICE9IG51bGwgKQotICAgIHsKLSAgICAgIFN0cmluZyBtb2RpZnlTdHJpbmcgPSBlbnRyeS5lbGVtZW50LmdldEF0dHJpYnV0ZSgiZXh0ZXJuYWxfbW9kaWZ5Iik7IAotICAgICAgCi0gICAgICByZXN1bHQgPSBuZXcgQm9vbGVhbiggbW9kaWZ5U3RyaW5nICkuYm9vbGVhblZhbHVlKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXRzIHRoZSBJT2JqZWN0U2VsZWN0aW9uV2lkZ2V0IGJhc2VkIG9uIHRoZSBzZWxlY3Rpb25JZC4gIElmIG9uZSBpcwotICAgKiBub3QgZm91bmQgbnVsbCBpcyByZXR1cm5lZC4KLSAgICogCi0gICAqIEBwYXJhbSBzZWxlY3Rpb25JZCB0aGUgSUQgb2YgdGhlIHNlbGVjdGlvbiB3aWRnZXQuCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBJT2JqZWN0U2VsZWN0aW9uV2lkZ2V0IG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZ2V0U2VsZWN0aW9uV2lkZ2V0KCBTdHJpbmcgc2VsZWN0aW9uSWQgKQotICB7Ci0gICAgVGFibGVFbnRyeSBlbnRyeSA9IGdldFRhYmxlRW50cnkoIHNlbGVjdGlvbklkICk7Ci0gICAgCi0gICAgcmV0dXJuIGVudHJ5ID09IG51bGwgPyBudWxsIDogZW50cnkub2JqZWN0U2VsZWN0aW9uOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBjbGVhbnVwKCkKLSAgewotICAgIGluc3RhbmNlID0gbnVsbDsKLSAgICBlbGVtZW50cyA9IG51bGw7Ci0gICAgY2FjaGVkU2VsZWN0aW9uV2lkZ2V0cyA9IG51bGw7Ci0gIH0KLSAgCi0gIHByaXZhdGUgVGFibGVFbnRyeSBnZXRUYWJsZUVudHJ5KCBTdHJpbmcgaWQgKQotICB7Ci0gICAgaWYoIGlkID09IG51bGwgKSByZXR1cm4gbnVsbDsKLSAgICAKLSAgICBUYWJsZUVudHJ5IGVudHJ5ID0gKFRhYmxlRW50cnkpY2FjaGVkU2VsZWN0aW9uV2lkZ2V0cy5nZXQoIGlkICk7Ci0gICAgCi0gICAgaWYoIGVudHJ5ID09IG51bGwgKQotICAgIHsKLSAgICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBlbGVtZW50cy5sZW5ndGg7IGluZGV4KysgKQotICAgICAgewotICAgICAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCA9IGVsZW1lbnRzW2luZGV4XTsKLSAgICAgICAgU3RyaW5nICAgICAgICAgICAgICAgIGVsZW1JZCAgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSggImlkIiApOwotICAgICAgCi0gICAgICAgIGlmKCBpZC5lcXVhbHMoIGVsZW1JZCApICkKLSAgICAgICAgewotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIE9iamVjdCBvYmplY3QgPSBlbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oImNsYXNzIik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmKCBvYmplY3QgaW5zdGFuY2VvZiBJT2JqZWN0U2VsZWN0aW9uV2lkZ2V0IHx8IG9iamVjdCBpbnN0YW5jZW9mIElPYmplY3RTZWxlY3Rpb25MYXVuY2hhYmxlICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgZW50cnkgPSBuZXcgVGFibGVFbnRyeSgpOwotICAgICAgICAgICAgICBlbnRyeS5lbGVtZW50ID0gZWxlbWVudDsKLSAgICAgICAgICAgICAgZW50cnkub2JqZWN0U2VsZWN0aW9uID0gb2JqZWN0OwotICAgICAgICAgICAgICBjYWNoZWRTZWxlY3Rpb25XaWRnZXRzLnB1dCggaWQsIGVudHJ5ICk7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCggQ29yZUV4Y2VwdGlvbiBleGMgKXt9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGVudHJ5OwotICB9Ci0gIAotICBwcml2YXRlIGNsYXNzIFRhYmxlRW50cnkKLSAgewotICAgIHB1YmxpYyBJQ29uZmlndXJhdGlvbkVsZW1lbnQgIGVsZW1lbnQ7Ci0gICAgcHVibGljIE9iamVjdCAgICAgICAgICAgICAgICAgb2JqZWN0U2VsZWN0aW9uOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L09iamVjdFNlbGVjdGlvbldpZGdldC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9PYmplY3RTZWxlY3Rpb25XaWRnZXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWExYTU5Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L09iamVjdFNlbGVjdGlvbldpZGdldC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjU4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIyNCAgIDEyOTM4NyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA2MDQxMCAgIDEzNTQ0MSBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDgyNSAgIDE1NTExNCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA2MTIyMCAgIDE2MTIzMiBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgQWJzdHJhY3RPYmplY3RTZWxlY3Rpb25XaWRnZXQuc2V0SW5pdGlhbFNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBpbml0aWFsU2VsZWN0aW9uKSBjYWxsZWQgdHdpY2UgZWFjaCB0aW1lIEJyb3dzZSBwcmVzc2VkCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuV2ViU2VydmljZUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmRhdGEuVHlwZVJ1bnRpbWVTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0RGF0YUV2ZW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUucmVzb3VyY2VzLklWaXJ0dWFsQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VTY2VuYXJpbzsKLQotCi1wdWJsaWMgY2xhc3MgT2JqZWN0U2VsZWN0aW9uV2lkZ2V0IGV4dGVuZHMgQWJzdHJhY3RPYmplY3RTZWxlY3Rpb25XaWRnZXQgaW1wbGVtZW50cyBJT2JqZWN0U2VsZWN0aW9uV2lkZ2V0Ci17Ci0gIHByaXZhdGUgQ29tcG9zaXRlIHBhcmVudDsKLSAgcHJpdmF0ZSBMaXN0ZW5lciBzdGF0dXNMaXN0ZW5lcjsKLSAgcHJpdmF0ZSBDb21wb3NpdGUgY29tcG9zaXRlOwotICBwcml2YXRlIElQcm9qZWN0IHByb2plY3Q7Ci0gIHByaXZhdGUgU3RyaW5nIGNvbXBvbmVudE5hbWU7Ci0gIHByaXZhdGUgSU9iamVjdFNlbGVjdGlvbldpZGdldCBjaGlsZDsKLSAgcHJpdmF0ZSBQb2ludCB3aWRnZXRTaXplXzsKLSAgCi0gIHB1YmxpYyBXaWRnZXREYXRhRXZlbnRzIGFkZENvbnRyb2xzKENvbXBvc2l0ZSBwYXJlbnRDb21wb3NpdGUsIExpc3RlbmVyIHN0YXRMaXN0ZW5lcikKLSAgewotICAgIHRoaXMucGFyZW50ID0gcGFyZW50Q29tcG9zaXRlOwotICAgIHRoaXMuc3RhdHVzTGlzdGVuZXIgPSBzdGF0TGlzdGVuZXI7Ci0gICAgY29tcG9zaXRlID0gbnVsbDsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAKLSAgcHVibGljIENvbnRyb2wgZ2V0Q29udHJvbCgpewotCSAgcmV0dXJuIGNvbXBvc2l0ZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEBwYXJhbSB0eXBlUnVudGltZVNlcnZlciBUaGUgdHlwZVJ1bnRpbWVTZXJ2ZXIgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VHlwZVJ1bnRpbWVTZXJ2ZXIoVHlwZVJ1bnRpbWVTZXJ2ZXIgdHlwZVJ1bnRpbWVTZXJ2ZXIpCi0gIHsKLSAgICBpZiAoY29tcG9zaXRlICE9IG51bGwpCi0gICAgewotICAgICAgY29tcG9zaXRlLmRpc3Bvc2UoKTsKLSAgICAgIGNoaWxkID0gbnVsbDsKLSAgICB9Ci0gICAgaWYgKHR5cGVSdW50aW1lU2VydmVyICE9IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nIHdzdCA9IHR5cGVSdW50aW1lU2VydmVyLmdldFR5cGVJZCgpOwotICAgICAgaW50IHNjZW5hcmlvID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2NlbmFyaW9Gcm9tVHlwZUlkKHdzdCk7Ci0gICAgICBTdHJpbmcgaW1wbElkID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0V2ViU2VydmljZUltcGxJZEZyb21UeXBlSWQod3N0KTsKLSAgICAgIFdlYlNlcnZpY2VJbXBsIHdzaW1wbCA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFdlYlNlcnZpY2VJbXBsQnlJZChpbXBsSWQpOwotICAgICAgCi0JICAgIC8vSVdlYlNlcnZpY2VUeXBlIHdzdCA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMuZ2V0V2ViU2VydmljZVR5cGVCeUlkKHR5cGVSdW50aW1lU2VydmVyLmdldFR5cGVJZCgpKTsKLSAgICAgIGlmICh3c2ltcGwgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIG9iamVjdFNlbGVjdGlvbldpZGdldElkID0gbnVsbDsKLSAgICAgICAgaWYgKHNjZW5hcmlvID09IFdlYlNlcnZpY2VTY2VuYXJpby5UT1BET1dOKQotICAgICAgICB7Ci0gICAgICAgICAgb2JqZWN0U2VsZWN0aW9uV2lkZ2V0SWQgPSAib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0LldTRExTZWxlY3Rpb25XaWRnZXQiOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIG9iamVjdFNlbGVjdGlvbldpZGdldElkID0gd3NpbXBsLmdldE9iamVjdFNlbGVjdGlvbldpZGdldCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgT2JqZWN0IG9iamVjdCA9IE9iamVjdFNlbGVjdGlvblJlZ2lzdHJ5LmdldEluc3RhbmNlKCkuZ2V0U2VsZWN0aW9uV2lkZ2V0KCBvYmplY3RTZWxlY3Rpb25XaWRnZXRJZCApOwotICAgICAgICAKLSAgICAgICAgaWYoIG9iamVjdCBpbnN0YW5jZW9mIElPYmplY3RTZWxlY3Rpb25XaWRnZXQgKQotICAgICAgICB7Ci0gICAgICAgICAgY2hpbGQgPSAoSU9iamVjdFNlbGVjdGlvbldpZGdldClvYmplY3Q7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmKCBjaGlsZCAhPSBudWxsICkKLSAgICAgICAgewotICAgICAgICAgIENvbnRyb2wgc2hlbGwgPSBwYXJlbnQuZ2V0U2hlbGwoKTsKLSAgICAgICAgICBjb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotICAgICAgICAgIEdyaWRMYXlvdXQgZ2wgPSBuZXcgR3JpZExheW91dCgpOwotICAgICAgICAgIGdsLm1hcmdpbkhlaWdodCA9IDA7Ci0gICAgICAgICAgZ2wubWFyZ2luV2lkdGggPSAwOwotICAgICAgICAgIEdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCk7Ci0gICAgICAgICAgY29tcG9zaXRlLnNldExheW91dChnbCk7Ci0gICAgICAgICAgY29tcG9zaXRlLnNldExheW91dERhdGEoZ2QpOwotICAgICAgICAgIGNoaWxkLmFkZENvbnRyb2xzKGNvbXBvc2l0ZSwgc3RhdHVzTGlzdGVuZXIpOwotCi0gICAgICAgICAgUG9pbnQgb3JpZ1NpemUgPSBzaGVsbC5nZXRTaXplKCk7Ci0gICAgICAgICAgUG9pbnQgY29tcFNpemUgPSBjb21wb3NpdGUuY29tcHV0ZVNpemUoU1dULkRFRkFVTFQsIFNXVC5ERUZBVUxUKTsKLSAgICAgICAgICBpbnQgICBuZXdYICAgICA9IG9yaWdTaXplLng7Ci0gICAgICAgICAgaW50ICAgbmV3WSAgICAgPSBvcmlnU2l6ZS55OwotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgLy8gTm90ZTogd2UgYXJlIHRyeWluZyB0byBkZXRlcm1pbmUgaGVyZSBpZiB0aGUgd2l6YXJkIHBhZ2Ugc2hvdWxkCi0gICAgICAgICAgLy8gICAgICAgYmUgcmVzaXplZCBiYXNlZCBvbiB0aGUgc2l6ZSBvZiB0aGUgY29udHJvbCB0aGF0IGlzCi0gICAgICAgICAgLy8gICAgICAgZ2l2ZW4gdG8gdXMgYnkgdGhlIGV4dGVuc2lvbi4gIFRoZSBoYXJkIGNvZGVkIGNvbnN0YW50cwotICAgICAgICAgIC8vICAgICAgIGJlbG93IHJlcHJlc2VudCB0aGUgdmVydGljYWwgYW5kIGhvcml6b250YWwgcGl4ZWxzIHRoYXQgbmVlZAotICAgICAgICAgIC8vICAgICAgIHRvIGdvIGFyb3VuZCBvYmplY3Qgc2VsZWN0aW9uIGNvbnRyb2wuICBIb3BlZnVsbHksIGEgbW9yZQotICAgICAgICAgIC8vICAgICAgIHByb2dyYW1hdGljIG1ldGhvZCBvZiBkb2luZyB0aGlzIGNhbiBiZSBmb3VuZCBpbiB0aGUgZnV0dXJlLgotICAgICAgICAgIGlmKCBjb21wU2l6ZS54ICsgMjAgPiBvcmlnU2l6ZS54ICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBuZXdYID0gY29tcFNpemUueCArIDIwOwotICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgIGlmKCBjb21wU2l6ZS55ICsgMjA1ID4gb3JpZ1NpemUueSApCi0gICAgICAgICAgewotICAgICAgICAgICAgbmV3WSA9IGNvbXBTaXplLnkgKyAyMDU7Ci0gICAgICAgICAgfQotICAgCi0gICAgICAgICAgd2lkZ2V0U2l6ZV8gPSBuZXcgUG9pbnQobmV3WCwgbmV3WSk7ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBJU3RhdHVzIGdldFN0YXR1cygpCi0gIHsKLSAgICByZXR1cm4gKGNoaWxkICE9IG51bGwpID8gY2hpbGQuZ2V0U3RhdHVzKCkgOiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0SW5pdGlhbFNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBpbml0aWFsU2VsZWN0aW9uKQotICB7Ci0gICAgcHJvamVjdCA9IGdldFByb2plY3RGcm9tSW5pdGlhbFNlbGVjdGlvbihpbml0aWFsU2VsZWN0aW9uKTsKLSAgICBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21Jbml0aWFsU2VsZWN0aW9uKGluaXRpYWxTZWxlY3Rpb24pOwotICAgIGlmIChjaGlsZCAhPSBudWxsKQotICAgICAgY2hpbGQuc2V0SW5pdGlhbFNlbGVjdGlvbihpbml0aWFsU2VsZWN0aW9uKTsKLSAgfQotICAgIAotICBwdWJsaWMgSVN0cnVjdHVyZWRTZWxlY3Rpb24gZ2V0T2JqZWN0U2VsZWN0aW9uKCkKLSAgewotICAgIHJldHVybiAoY2hpbGQgIT0gbnVsbCkgPyBjaGlsZC5nZXRPYmplY3RTZWxlY3Rpb24oKSA6IG51bGw7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJU3RhdHVzIHZhbGlkYXRlU2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIG9iamVjdFNlbGVjdGlvbikKLSAgewotICAgIHJldHVybiAoY2hpbGQgIT0gbnVsbCkgPyBjaGlsZC52YWxpZGF0ZVNlbGVjdGlvbihvYmplY3RTZWxlY3Rpb24pIDogU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotICAKLSAgcHVibGljIElQcm9qZWN0IGdldFByb2plY3QoKQotICB7Ci0gICAgaWYgKGNoaWxkICE9IG51bGwpCi0gICAgewotICAgICAgSVByb2plY3QgcCA9IGNoaWxkLmdldFByb2plY3QoKTsKLSAgICAgIGlmIChwICE9IG51bGwpCi0gICAgICAgIHJldHVybiBwOwotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gcHJvamVjdDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRDb21wb25lbnROYW1lKCkKLSAgewotICAgIGlmIChjaGlsZCAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyBjbmFtZSA9IGNoaWxkLmdldENvbXBvbmVudE5hbWUoKTsKLSAgICAgIGlmIChjbmFtZSAhPSBudWxsICYmIGNuYW1lLmxlbmd0aCgpPjApCi0gICAgICAgIHJldHVybiBjbmFtZTsKLSAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIGNvbXBvbmVudE5hbWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9ICAgIAotCSAKLSAgfQotICAKLSAgcHJpdmF0ZSBJUHJvamVjdCBnZXRQcm9qZWN0RnJvbUluaXRpYWxTZWxlY3Rpb24oSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uKQotICB7Ci0gICAgaWYgKHNlbGVjdGlvbiAhPSBudWxsICYmIHNlbGVjdGlvbi5zaXplKCkgPT0gMSkKLSAgICB7Ci0gICAgICBPYmplY3Qgb2JqID0gc2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOwotICAgICAgaWYgKG9iaiAhPSBudWxsKSAKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsgCi0gICAgICAgICAgSVJlc291cmNlIHJlc291cmNlID0gUmVzb3VyY2VVdGlscy5nZXRSZXNvdXJjZUZyb21TZWxlY3Rpb24ob2JqKTsKLSAgICAgICAgICBpZiAocmVzb3VyY2U9PW51bGwpIAotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgSVByb2plY3QgcCA9IFJlc291cmNlVXRpbHMuZ2V0UHJvamVjdE9mKHJlc291cmNlLmdldEZ1bGxQYXRoKCkpOwotICAgICAgICAgIHJldHVybiBwOwotICAgICAgICB9IGNhdGNoKENvcmVFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9ICAgICAgICAKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGdldENvbXBvbmVudE5hbWVGcm9tSW5pdGlhbFNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pCi0gIHsKLSAgICBpZiAoc2VsZWN0aW9uICE9IG51bGwgJiYgc2VsZWN0aW9uLnNpemUoKSA9PSAxKQotICAgIHsKLSAgICAgIE9iamVjdCBvYmogPSBzZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCk7Ci0gICAgICBpZiAob2JqICE9IG51bGwpIAotICAgICAgewotICAgICAgICB0cnkKLSAgICAgICAgeyAKLSAgICAgICAgICBJUmVzb3VyY2UgcmVzb3VyY2UgPSBSZXNvdXJjZVV0aWxzLmdldFJlc291cmNlRnJvbVNlbGVjdGlvbihvYmopOwotICAgICAgICAgIGlmIChyZXNvdXJjZT09bnVsbCkgCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAKLSAgICAgICAgICBJVmlydHVhbENvbXBvbmVudCBjb21wID0gUmVzb3VyY2VVdGlscy5nZXRDb21wb25lbnRPZihyZXNvdXJjZSk7Ci0gICAgICAgICAgaWYgKGNvbXAgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gY29tcC5nZXROYW1lKCk7ICAKLSAgICAgICAgICB9ICAgICAgICAgIAotICAgICAgICB9IGNhdGNoKENvcmVFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9ICAgICAgICAKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7ICAgIAotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldE9iamVjdFNlbGVjdGlvbkRpc3BsYXlhYmxlU3RyaW5nKCkgewotCXJldHVybiBjaGlsZC5nZXRPYmplY3RTZWxlY3Rpb25EaXNwbGF5YWJsZVN0cmluZygpOyAgICAKLSAgfQotICAKLSAgcHVibGljIFBvaW50IGdldFdpZGdldFNpemUoKQotICB7Ci0JICBQb2ludCBjaGlsZFdpZGdldFNpemUgPSBjaGlsZC5nZXRXaWRnZXRTaXplKCk7Ci0JICBpZiAoY2hpbGRXaWRnZXRTaXplID09IG51bGwpCi0JCSAgCSAgcmV0dXJuIHdpZGdldFNpemVfOwotCSAgcmV0dXJuIGNoaWxkV2lkZ2V0U2l6ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9UaW1lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9UaW1lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjUwNjdkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvVGltZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDgwMyAgIDE1MjQ4NiBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgVHlwaW5nIFdTREwgaW4gU2VydmljZSBkZWZpbml0aW9uIGZpZWxkIGlzIHZlcnkgc2xvdwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdDsKLQotaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotCi1wdWJsaWMgY2xhc3MgVGltZXIgZXh0ZW5kcyBUaHJlYWQKLXsKLSAgcHJpdmF0ZSBmaW5hbCBsb25nIE9ORV9TRUNPTkQgPSAxMDAwOwotICBwcml2YXRlIGxvbmcgcmVmcmVzaFRpbWU7Ci0gIHByaXZhdGUgYm9vbGVhbiBpc1J1bm5pbmcgPSB0cnVlOwotICBwcml2YXRlIERpc3BsYXkgZGlzcGxheTsKLSAgcHJpdmF0ZSBSdW5uYWJsZSBydW5uYWJsZTsKLQotICBwcml2YXRlIFRpbWVyKERpc3BsYXkgZGlzcGxheSwgUnVubmFibGUgcnVubmFibGUpCi0gIHsKLSAgICB0aGlzLmRpc3BsYXkgPSBkaXNwbGF5OwotICAgIHRoaXMucnVubmFibGUgPSBydW5uYWJsZTsKLSAgfQotCi0gIHB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIFRpbWVyIG5ld0luc3RhbmNlKFRpbWVyIHRpbWVyLCBEaXNwbGF5IGRpc3BsYXksIFJ1bm5hYmxlIHJ1bm5hYmxlKQotICB7Ci0gICAgaWYgKCFUaW1lci5pc1J1bm5pbmcodGltZXIpKQotICAgICAgcmV0dXJuIG5ldyBUaW1lcihkaXNwbGF5LCBydW5uYWJsZSk7Ci0gICAgCi0gICAgcmV0dXJuIHRpbWVyOwotICB9Ci0gIAotICBwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBib29sZWFuIGlzUnVubmluZyhUaW1lciB0aW1lcikKLSAgewotICAgIHJldHVybiB0aW1lciAhPSBudWxsICYmIHRpbWVyLmlzUnVubmluZzsKLSAgfQotCi0gIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBzdGFydFRpbWVyKCkKLSAgewotICAgIHJlZnJlc2hUaW1lID0gZ2V0Q3VycmVudFRpbWUoKSArIE9ORV9TRUNPTkQ7Ci0gICAgaWYgKCFpc0FsaXZlKCkpCi0gICAgICB0aGlzLnN0YXJ0KCk7Ci0gIH0KLQotICBwcml2YXRlIGxvbmcgZ2V0Q3VycmVudFRpbWUoKQotICB7Ci0gICAgcmV0dXJuIENhbGVuZGFyLmdldEluc3RhbmNlKCkuZ2V0VGltZSgpLmdldFRpbWUoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJ1bigpCi0gIHsKLSAgICBsb25nIGN1cnJUaW1lID0gZ2V0Q3VycmVudFRpbWUoKTsKLSAgICB3aGlsZSAoY3VyclRpbWUgPCByZWZyZXNoVGltZSkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgc2xlZXAocmVmcmVzaFRpbWUgLSBjdXJyVGltZSk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gaWUpCi0gICAgICB7Ci0gICAgICB9Ci0gICAgICBjdXJyVGltZSA9IGdldEN1cnJlbnRUaW1lKCk7Ci0gICAgfQotICAgIGlzUnVubmluZyA9IGZhbHNlOwotICAgIGRpc3BsYXkuc3luY0V4ZWMocnVubmFibGUpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L1ZhbGlkYXRlV1NETEpvYi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9WYWxpZGF0ZVdTRExKb2IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTI3ZWUwOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L1ZhbGlkYXRlV1NETEpvYi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmpvYnMuSm9iOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25SZXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5lY2xpcHNlLldTRExWYWxpZGF0b3I7Ci0KLQotCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGVXU0RMSm9iIGV4dGVuZHMgSm9iIHsKLQkKLQlmaW5hbCBwdWJsaWMgc3RhdGljIFN0cmluZyBWQUxJREFURV9XU0RMX0pPQl9GQU1JTFkgPSAiVmFsaWRhdGVXU0RMSm9iSmFtaWx5IjsKLQkKLQlwcml2YXRlIFN0cmluZyB3c2RsVVJJXyA9IG51bGw7Ci0JcHJpdmF0ZSBJVmFsaWRhdGlvbk1lc3NhZ2VbXSB2YWxpZGF0aW9uTWVzc2FnZXNfID0gbnVsbDsKLQlwcml2YXRlIGludCB2YWxpZGF0aW9uTWVzc2FnZVNldmVyaXR5XyA9IC0xOyAvLyBkZWZhdWx0IHZhbHVlCi0KLQlwdWJsaWMgVmFsaWRhdGVXU0RMSm9iKFN0cmluZyB3c2RsVVJJKSB7Ci0JCXN1cGVyKCJWYWxpZGF0ZVdTRExKb2IiKTsKLQkJd3NkbFVSSV8gPSB3c2RsVVJJOwotCX0KLQotCXByb3RlY3RlZCBJU3RhdHVzIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKLQkJV1NETFZhbGlkYXRvciB3c2RsVmFsaWRhdG9yID0gV1NETFZhbGlkYXRvci5nZXRJbnN0YW5jZSgpOwotCSAgICBJVmFsaWRhdGlvblJlcG9ydCB2YWxSZXBvcnQgPSB3c2RsVmFsaWRhdG9yLnZhbGlkYXRlKHdzZGxVUklfKTsKLQkgICAgdmFsaWRhdGlvbk1lc3NhZ2VzXyA9IHZhbFJlcG9ydC5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKTsKLQkgICAgcmVwb3J0U3VtbWFyeSgpOwotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQl9Ci0JCi0JLy8gY2FsY3VsYXRlIHRoZSBoaWdoZXIgc2V2ZXJpdHkgZm9yIGFsbCB0aGUgdmFsaWRhdGlvbiBtZXNzYWdlcwotCXByaXZhdGUgdm9pZCByZXBvcnRTdW1tYXJ5KCkgewotCQlpbnQgaTsKLQkJaW50IHNldmVyaXR5OwotCQlpbnQgZXJyb3JDb3VudCA9IDA7Ci0JCWludCB3YXJuaW5nQ291bnQgPSAwOwotCQlmb3IgKGk9MDsgaTx2YWxpZGF0aW9uTWVzc2FnZXNfLmxlbmd0aCAmJiBlcnJvckNvdW50ID09IDA7IGkrKykgewotCQkJc2V2ZXJpdHkgPSB2YWxpZGF0aW9uTWVzc2FnZXNfW2ldLmdldFNldmVyaXR5KCk7Ci0JCQlzd2l0Y2ggKHNldmVyaXR5KSB7Ci0JCQljYXNlIElWYWxpZGF0aW9uTWVzc2FnZS5TRVZfRVJST1I6Ci0JCQkJZXJyb3JDb3VudCsrOwotCQkJCWJyZWFrOwotCQkJY2FzZSBJVmFsaWRhdGlvbk1lc3NhZ2UuU0VWX1dBUk5JTkc6Ci0JCQkJd2FybmluZ0NvdW50Kys7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCWlmIChlcnJvckNvdW50ID4gMCkgewotCQkJdmFsaWRhdGlvbk1lc3NhZ2VTZXZlcml0eV8gPSBJVmFsaWRhdGlvbk1lc3NhZ2UuU0VWX0VSUk9SOwotCQl9IGVsc2UgaWYgKHdhcm5pbmdDb3VudCA+IDApIHsKLQkJCXZhbGlkYXRpb25NZXNzYWdlU2V2ZXJpdHlfID0gSVZhbGlkYXRpb25NZXNzYWdlLlNFVl9XQVJOSU5HOwotCQl9Ci0JCQotCX0KLQotCXB1YmxpYyBib29sZWFuIGJlbG9uZ3NUbyhPYmplY3QgZmFtaWx5KQotCXsKLQkJcmV0dXJuIGZhbWlseSA9PSBWQUxJREFURV9XU0RMX0pPQl9GQU1JTFk7Ci0JfQotCQotCXB1YmxpYyBJVmFsaWRhdGlvbk1lc3NhZ2VbXSBnZXRWYWxpZGF0aW9uTWVzc2FnZXMoKSB7Ci0JCXJldHVybiB2YWxpZGF0aW9uTWVzc2FnZXNfOwotCX0KLQkKLQlwdWJsaWMgaW50IGdldFZhbGlkYXRpb25NZXNzYWdlU2V2ZXJpdHkoKSB7Ci0JCXJldHVybiB2YWxpZGF0aW9uTWVzc2FnZVNldmVyaXR5XzsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFdzZGxVUkkoKSB7Ci0JCXJldHVybiB3c2RsVVJJXzsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L1ZhbGlkYXRpb25NZXNzYWdlVmlld2VyV2lkZ2V0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L1ZhbGlkYXRpb25NZXNzYWdlVmlld2VyV2lkZ2V0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3N2Y1ZGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9WYWxpZGF0aW9uTWVzc2FnZVZpZXdlcldpZGdldC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMxMCAgIDEzMTM1MiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA2MDQxMSAgIDEzNjEzNCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA0MjAgICAxMzYyMjEga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ29sdW1uV2VpZ2h0RGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklDb250ZW50UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlckxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JVGFibGVMYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGFibGVMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UYWJsZVZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZUNvbHVtbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZUl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JU2hhcmVkSW1hZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLlNpbXBsZVdpZGdldERhdGFDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXREYXRhRXZlbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25NZXNzYWdlOwotCi0KLXB1YmxpYyBjbGFzcyBWYWxpZGF0aW9uTWVzc2FnZVZpZXdlcldpZGdldCBleHRlbmRzIFNpbXBsZVdpZGdldERhdGFDb250cmlidXRvcgotewotICBwcml2YXRlIGludCBERUZBVUxUX1RBQkxFX0hFSUdIVF9ISU5UID0gMTAwOwotICBwcml2YXRlIFRhYmxlVmlld2VyIHRhYmxlVmlld2VyXzsKLSAgcHJpdmF0ZSBUYWJsZSB0YWJsZV87Ci0gIHByaXZhdGUgU3RyaW5nIG1lc3NhZ2UgPSBudWxsOwotICBzdGF0aWMgZmluYWwgU3RyaW5nIGNvbHVtbnNfW10gPSB7Q29uc3VtcHRpb25VSU1lc3NhZ2VzLlRBQkxFX0NPTFVNTl9WQUxJREFUSU9OX1NFVkVSSVRZLAotCSAgCQkJCQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuVEFCTEVfQ09MVU1OX1ZBTElEQVRJT05fTElORSwKLQkgIAkJCQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRBQkxFX0NPTFVNTl9WQUxJREFUSU9OX0NPTFVNTiwKLQkgIAkJCQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRBQkxFX0NPTFVNTl9WQUxJREFUSU9OX01FU1NBR0V9OwotICBzdGF0aWMgZmluYWwgaW50IGNvbHVtbnNXaWR0aF9bXSA9IHsxMiwgMTAsIDEwLCA2MH07Ci0gIHN0YXRpYyBmaW5hbCBpbnQgY29sdW1uTWluc19bXSA9IHs2MCwgNTAsIDUwLCAzMDB9OwotCi0gIAotCi0gIHB1YmxpYyBWYWxpZGF0aW9uTWVzc2FnZVZpZXdlcldpZGdldCgpCi0gIHsKLSAgfQotCi0gIHB1YmxpYyBXaWRnZXREYXRhRXZlbnRzIGFkZENvbnRyb2xzKCBDb21wb3NpdGUgcGFyZW50LCBMaXN0ZW5lciBzdGF0dXNMaXN0ZW5lciApCi0gIHsgCi0gICAKLQlDb21wb3NpdGUgIGNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7Ci0JR3JpZExheW91dCBnbCAgICAgICAgPSBuZXcgR3JpZExheW91dCgpOwotCQotCWdsLm1hcmdpbkhlaWdodCA9IDA7Ci0JZ2wubWFyZ2luV2lkdGggPSAwOwotCWNvbXBvc2l0ZS5zZXRMYXlvdXQoZ2wpOwotCWNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpKTsKLQkKLSAgICBUZXh0IG1lc3NhZ2VMYWJlbCA9IG5ldyBUZXh0KCBjb21wb3NpdGUsIFNXVC5SRUFEX09OTFkpOwotICAgIG1lc3NhZ2VMYWJlbC5zZXRUZXh0KCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfVkFMSURBVEVfTUVTU0FHRVMpOwotICAgIEdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCk7Ci0gICAgbWVzc2FnZUxhYmVsLnNldExheW91dERhdGEoZ2QpOwotICAgIG1lc3NhZ2VMYWJlbC5zZXRUb29sVGlwVGV4dCggQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfVkFMSURBVEVfVEVYVF9NRVNTQUdFICk7Ci0KLQl0YWJsZV8gPSBuZXcgVGFibGUoY29tcG9zaXRlLCBTV1QuU0lOR0xFIHwgU1dULkZVTExfU0VMRUNUSU9OIHwgU1dULkJPUkRFUik7Ci0JZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKTsKLQlnZC5oZWlnaHRIaW50ID0gREVGQVVMVF9UQUJMRV9IRUlHSFRfSElOVDsKLQl0YWJsZV8uc2V0TGF5b3V0RGF0YShnZCk7Ci0JdGFibGVfLnNldEhlYWRlclZpc2libGUodHJ1ZSk7Ci0JdGFibGVfLnNldExpbmVzVmlzaWJsZSh0cnVlKTsKLQl0YWJsZV8uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfVEFCTEVfVkFMSURBVEVfTUVTU0FHRSApOwotCVRhYmxlTGF5b3V0IHRhYmxlTGF5b3V0ID0gbmV3IFRhYmxlTGF5b3V0KCk7Ci0JZm9yIChpbnQgaSA9IDA7IGkgPCBjb2x1bW5zXy5sZW5ndGg7IGkrKykKLQl7Ci0JICBUYWJsZUNvbHVtbiB0YWJsZUNvbHVtbiA9IG5ldyBUYWJsZUNvbHVtbih0YWJsZV8sIFNXVC5OT05FKTsKLQkgIHRhYmxlQ29sdW1uLnNldFRleHQoY29sdW1uc19baV0pOwotCSAgdGFibGVDb2x1bW4ucGFjaygpOwotCSAgQ29sdW1uV2VpZ2h0RGF0YSBjb2x1bW5EYXRhID0gbmV3IENvbHVtbldlaWdodERhdGEoY29sdW1uc1dpZHRoX1tpXSwgY29sdW1uTWluc19baV0sIHRydWUpOwotCSAgdGFibGVMYXlvdXQuYWRkQ29sdW1uRGF0YShjb2x1bW5EYXRhKTsKLQl9Ci0JdGFibGVfLnNldExheW91dCh0YWJsZUxheW91dCk7Ci0KLQl0YWJsZVZpZXdlcl8gPSBuZXcgVGFibGVWaWV3ZXIodGFibGVfKTsKLQotCXRhYmxlVmlld2VyXy5zZXRDb250ZW50UHJvdmlkZXIobmV3IExpc3RDb250ZW50UHJvdmlkZXIoKSk7Ci0JdGFibGVWaWV3ZXJfLnNldExhYmVsUHJvdmlkZXIobmV3IExpc3RMYWJlbFByb3ZpZGVyKCkpOwotCi0JcmV0dXJuIHRoaXM7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRJbnB1dChJVmFsaWRhdGlvbk1lc3NhZ2VbXSBtZXNzYWdlcykKLSAgewotICAJdGFibGVWaWV3ZXJfLnNldElucHV0KG1lc3NhZ2VzKTsKLSAgCXRhYmxlVmlld2VyXy5yZWZyZXNoKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGNsZWFySW5wdXQoKQotICB7Ci0JICBJVmFsaWRhdGlvbk1lc3NhZ2UgZW1wdHlNZXNzYWdlc1tdID0ge307Ci0JICB0aGlzLnNldElucHV0KGVtcHR5TWVzc2FnZXMpOwotICB9Ci0gIAotICBwdWJsaWMgSUNvbnRlbnRQcm92aWRlciBnZXRDb250ZW50UHJvdmlkZXIoKQotICB7Ci0JICByZXR1cm4gdGFibGVWaWV3ZXJfLmdldENvbnRlbnRQcm92aWRlcigpOwotICB9Ci0KLSAgcHVibGljIElTdGF0dXMgZ2V0U3RhdHVzKCkKLSAgewotICAgIHJldHVybiBtZXNzYWdlID09IG51bGwgPyBTdGF0dXMuT0tfU1RBVFVTIDogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKG1lc3NhZ2UgKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlZnJlc2goKQotICB7Ci0JdGFibGVWaWV3ZXJfLnJlZnJlc2goKTsKLSAgfQotCi0gIHB1YmxpYyBUYWJsZUl0ZW1bXSBnZXRJdGVtcygpCi0gIHsKLQkvL2ludGVybmFsUmVmcmVzaCgpOwotCXJldHVybiB0YWJsZV8uZ2V0SXRlbXMoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEVuYWJsZWQoYm9vbGVhbiBlbmFibGVkKQotICB7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkKLSAgewkKLQlpZiAodGFibGVfICE9IG51bGwpCi0JICB0YWJsZV8uZGlzcG9zZSgpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGNsYXNzIExpc3RDb250ZW50UHJvdmlkZXIgaW1wbGVtZW50cyBJU3RydWN0dXJlZENvbnRlbnRQcm92aWRlcgotICB7Ci0JcHVibGljIHZvaWQgZGlzcG9zZSgpCi0JewotCX0KLQotCXB1YmxpYyB2b2lkIGlucHV0Q2hhbmdlZChWaWV3ZXIgdmlld2VyLCBPYmplY3Qgb2xkSW5wdXQsIE9iamVjdCBuZXdJbnB1dCkKLQl7Ci0JICB0YWJsZVZpZXdlcl8uYWRkKGdldEVsZW1lbnRzKG5ld0lucHV0KSk7Ci0JfQotCi0JcHVibGljIE9iamVjdFtdIGdldEVsZW1lbnRzKE9iamVjdCBpbnB1dEVsZW1lbnQpCi0JewotCQlpZiAoaW5wdXRFbGVtZW50IGluc3RhbmNlb2YgSVZhbGlkYXRpb25NZXNzYWdlW10pCi0JICB7Ci0JCQlJVmFsaWRhdGlvbk1lc3NhZ2VbXSB2YWxNZXNzYWdlcyA9IChJVmFsaWRhdGlvbk1lc3NhZ2VbXSkgaW5wdXRFbGVtZW50OwotCQkgIHJldHVybiB2YWxNZXNzYWdlczsKLQkgIH0KLQkgIGVsc2UKLQkJcmV0dXJuIG5ldyBPYmplY3RbMF07Ci0JfQotICB9Ci0KLSAgcHJvdGVjdGVkIGNsYXNzIExpc3RMYWJlbFByb3ZpZGVyIGltcGxlbWVudHMgSVRhYmxlTGFiZWxQcm92aWRlcgotICB7Ci0JcHVibGljIEltYWdlIGdldENvbHVtbkltYWdlKE9iamVjdCBlbGVtZW50LCBpbnQgY29sdW1uSW5kZXgpCi0JewotCQlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIElWYWxpZGF0aW9uTWVzc2FnZSkKLQkJewotCQkJSVZhbGlkYXRpb25NZXNzYWdlIG1zZyA9IChJVmFsaWRhdGlvbk1lc3NhZ2UpIGVsZW1lbnQ7Ci0JCQkKLQkJCWlmIChjb2x1bW5JbmRleCA9PSAwKQotCQkJewkKLQkJCQlpbnQgc2V2ZXJpdHkgPSBtc2cuZ2V0U2V2ZXJpdHkoKTsKLQkJCQlpZiAoc2V2ZXJpdHkgPT0gMCkgewotCQkJCQlyZXR1cm4gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRTaGFyZWRJbWFnZXMoKS5nZXRJbWFnZShJU2hhcmVkSW1hZ2VzLklNR19PQkpTX0VSUk9SX1RTSyk7Ci0JCQkJfSBlbHNlIGlmIChzZXZlcml0eSA9PSAxKSB7Ci0JCQkJCXJldHVybiBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldFNoYXJlZEltYWdlcygpLmdldEltYWdlKElTaGFyZWRJbWFnZXMuSU1HX09CSlNfV0FSTl9UU0spOwotCQkJCX0gZWxzZSBpZiAoc2V2ZXJpdHkgPT0gMikgewotCQkJCQlyZXR1cm4gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRTaGFyZWRJbWFnZXMoKS5nZXRJbWFnZShJU2hhcmVkSW1hZ2VzLklNR19PQkpTX0lORk9fVFNLKTsKLQkJCQl9Ci0JCQl9Ci0JCX0JCi0JICByZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldENvbHVtblRleHQoT2JqZWN0IGVsZW1lbnQsIGludCBjb2x1bW5JbmRleCkKLQl7Ci0JCVN0cmluZyB0ZXh0ID0gIiI7Ci0JCWlmIChlbGVtZW50IGluc3RhbmNlb2YgSVZhbGlkYXRpb25NZXNzYWdlKQotCQl7Ci0JCQlJVmFsaWRhdGlvbk1lc3NhZ2UgbXNnID0gKElWYWxpZGF0aW9uTWVzc2FnZSkgZWxlbWVudDsKLQkJCQotCQkJc3dpdGNoIChjb2x1bW5JbmRleCkgewotCQkJY2FzZSAwOgkJCi0JCQkJLy8gbm8gdGV4dCB0byBkaXNwbGF5LCBvbmx5IGRpc3BsYXkgc2V2ZXJpdHkgYXMgaW1hZ2UKLQkJCQlicmVhazsKLQkJCWNhc2UgMToKLQkJCQl0ZXh0ID0gKG5ldyBJbnRlZ2VyKG1zZy5nZXRMaW5lKCkpKS50b1N0cmluZygpOwotCQkJCWJyZWFrOwotCQkJY2FzZSAyOgotCQkJCXRleHQgPSAobmV3IEludGVnZXIobXNnLmdldENvbHVtbigpKSkudG9TdHJpbmcoKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgMzoKLQkJCQl0ZXh0ID0gbXNnLmdldE1lc3NhZ2UoKTsKLQkJCQlicmVhazsJCQotCQkJCQotCQkJZGVmYXVsdDoKLQkJCQlicmVhazsKLQkJCX0gCi0JCX0KLQkJcmV0dXJuIHRleHQ7Ci0JfQotCi0JcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoSUxhYmVsUHJvdmlkZXJMaXN0ZW5lciBsaXN0ZW5lcikKLQl7Ci0JfQotCi0JcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoSUxhYmVsUHJvdmlkZXJMaXN0ZW5lciBsaXN0ZW5lcikKLQl7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNMYWJlbFByb3BlcnR5KE9iamVjdCBlbGVtZW50LCBTdHJpbmcgcHJvcGVydHkpCi0JewotCSAgcmV0dXJuIHRydWU7Ci0JfQotCi0JcHVibGljIHZvaWQgZGlzcG9zZSgpCi0JewotCX0KLSAgfQotIH0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvV1NETFNlbGVjdGlvblRyYW5zZm9ybWVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L1dTRExTZWxlY3Rpb25UcmFuc2Zvcm1lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZmYxNjE3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvV1NETFNlbGVjdGlvblRyYW5zZm9ybWVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMTE2ICAgMTU5NjE4IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBQcm9qZWN0IGFuZCBFQVIgbm90IGRlZmF1bHRlZCBwcm9wZXJseSB3aGVuIHdpemFyZCBsYXVuY2hlZCBmcm9tIEpTUi0xMDkgV2ViIHNlcnZpY2VzIGJyYW5jaCBpbiBKMkVFIFByb2plY3QgRXhwbG9yZXIKLSAqIDIwMDcwMzI3ICAgMTcyMzM5IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA3MDcxMyAgIDE5MTM1NyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdDsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NjbGllbnQuaW50ZXJuYWwuaW1wbC5TZXJ2aWNlUmVmSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuQmVhbkxpbms7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLlNlcnZpY2VJbXBsQmVhbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuV2ViU2VydmljZURlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uSjJFRUFjdGlvbkFkYXB0ZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uSjJFRVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLnV0aWxzLkFkYXB0ZXJVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlNlcnZpY2VJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETFJlc291cmNlSW1wbDsKLQotcHVibGljIGNsYXNzIFdTRExTZWxlY3Rpb25UcmFuc2Zvcm1lciBpbXBsZW1lbnRzIFRyYW5zZm9ybWVyCi17Ci0gIHB1YmxpYyBPYmplY3QgdHJhbnNmb3JtKE9iamVjdCB2YWx1ZSkKLSAgewotICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKQotICAgIHsKLSAgICAgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXZhbHVlOwotICAgICBpZiAoc2VsZWN0aW9uICE9IG51bGwgJiYgIXNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKLSAgICAgCi0gICAgICBPYmplY3Qgc2VsID0gc2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOwotICAgICAgaWYgKHNlbCBpbnN0YW5jZW9mIElSZXNvdXJjZSkKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oKChJUmVzb3VyY2Upc2VsKS5nZXRMb2NhdGlvbigpLnRvRmlsZSgpLnRvVVJMKCkudG9TdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBtdXJsZSkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChzZWwgaW5zdGFuY2VvZiBTZXJ2aWNlSW1wbCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKEoyRUVBY3Rpb25BZGFwdGVyRmFjdG9yeS5nZXRXU0RMVVJJKChTZXJ2aWNlSW1wbClzZWwpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKHNlbCBpbnN0YW5jZW9mIFNlcnZpY2VSZWZJbXBsKQotICAgICAgewotICAgICAgICByZXR1cm4gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oSjJFRUFjdGlvbkFkYXB0ZXJGYWN0b3J5LmdldFdTRExVUkkoKFNlcnZpY2VSZWZJbXBsKXNlbCkpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoc2VsIGluc3RhbmNlb2YgV1NETFJlc291cmNlSW1wbCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKEoyRUVBY3Rpb25BZGFwdGVyRmFjdG9yeS5nZXRXU0RMVVJJKChXU0RMUmVzb3VyY2VJbXBsKXNlbCkpOwotICAgICAgfQotICAgICAgLyoKLSAgICAgICAqIFRPRE8gLSBSZW1vdmUgdGhlIGNhc2VzIGJlbG93IGFmdGVyIGJ1ZyAxNzA4MzQgaXMgZml4ZWQKLSAgICAgICAqIAotICAgICAgICogV1NETFNlbGVjdGlvblRyYW5zZm9ybWVyIHNob3VsZCBub3QgbmVlZCB0byBoYW5kbGUgU2VydmljZUltcGxCZWFuIGFuZCBCZWFuTGluayB3aGljaAotICAgICAgICogcmVwcmVzZW50IHNlcnZpY2UgY2xhc3Nlcy4gIFRoZXNlIGNhdGNoZXMgYXJlIGhlcmUgZm9yIG5vdyBzaW5jZSB3ZSBpbmNvcnJlY3RseSBhbGxvdwotICAgICAgICogdGhlIHdpemFyZCB0byBkZWZhdWx0IHRvIHRvcC1kb3duIHNjZWFucmlvIHdoZW4gbGF1bmNoIGZyb20gdGhlc2Ugb2JqZWN0cyBpbiB0aGUgSlNSLTEwOQotICAgICAgICogYnJhbmNoLiAKLSAgICAgICAqLwotICAgICAgZWxzZSBpZiAoc2VsIGluc3RhbmNlb2YgU2VydmljZUltcGxCZWFuKQotICAgICAgewotICAgICAgICByZXR1cm4gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZ2V0V1NETFVSSSgoU2VydmljZUltcGxCZWFuKSBzZWwpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKHNlbCBpbnN0YW5jZW9mIEJlYW5MaW5rKQotICAgICAgewotICAgICAgICByZXR1cm4gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZ2V0V1NETFVSSSgoQmVhbkxpbmspIHNlbCkpOwotICAgICAgfSBlbHNlIHsKLSAgICAJICBTdHJpbmcgd3NkbFVSSSA9IEFkYXB0ZXJVdGlscy5nZXRBZGFwdGVkV1NETChzZWwpOwotICAgIAkgIGlmICh3c2RsVVJJICE9IG51bGwpIHsKLSAgICAJCSAgcmV0dXJuIG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHdzZGxVUkkpOwotICAgIAkgIH0KLSAgICAgIH0KLSAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdmFsdWU7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGdldFdTRExVUkkoU2VydmljZUltcGxCZWFuIGJlYW4pIHsKLQkgIEVPYmplY3QgZU9iamVjdCA9IGJlYW4uZUNvbnRhaW5lcigpOwotCSAgaWYgKGVPYmplY3QgPT0gbnVsbCkKLQkJICByZXR1cm4gIiI7Ci0gICAgICAgICAgCi0JICBlT2JqZWN0ID0gZU9iamVjdC5lQ29udGFpbmVyKCk7Ci0gICAgICAKLQkgIGlmIChlT2JqZWN0IGluc3RhbmNlb2YgV2ViU2VydmljZURlc2NyaXB0aW9uKSB7Ci0JCSAgV2ViU2VydmljZURlc2NyaXB0aW9uIHdzZCA9IChXZWJTZXJ2aWNlRGVzY3JpcHRpb24pIGVPYmplY3Q7Ci0JCSAgSVByb2plY3QgcHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdCh3c2QpOyAgICAJICAKLSAgICAJICAKLQkJICAvLyBnZXRXZWJDb250ZW50UGF0aCByZXR1cm5zIHRoZSAiV2ViQ29udGVudCIgZm9sZGVyIHBhdGggZm9yIFdlYiBwcm9qZWN0cwotCQkgIC8vIGZvciBFSkIgcHJvamVjdHMsIGl0IHJldHVybnMgdGhlICJlYmpNb2R1bGUiIGZvbGRlciBwYXRoCi0JCSAgSVBhdGggcGF0aCA9IEoyRUVVdGlscy5nZXRXZWJDb250ZW50UGF0aChwcm9qZWN0KTsgICAgCSAKLQkJICBwYXRoID0gcGF0aC5hcHBlbmQod3NkLmdldFdzZGxGaWxlKCkpOyAKLSAgICAJICAKLQkJICByZXR1cm4gcGF0aC50b1N0cmluZygpOyAgICAJICAgIAotCSAgfQotCSAgcmV0dXJuICIiOwotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBnZXRXU0RMVVJJKEJlYW5MaW5rIGxpbmspIHsKLQkgIEVPYmplY3QgZU9iamVjdCA9IGxpbmsuZUNvbnRhaW5lcigpOwotCSAgaWYgKGVPYmplY3QgaW5zdGFuY2VvZiBTZXJ2aWNlSW1wbEJlYW4pCi0JCSAgcmV0dXJuIGdldFdTRExVUkkoKFNlcnZpY2VJbXBsQmVhbikgZU9iamVjdCk7Ci0JICByZXR1cm4gIiI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvV1NETFNlbGVjdGlvbldpZGdldC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9XU0RMU2VsZWN0aW9uV2lkZ2V0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhZGUwNDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL29iamVjdC9XU0RMU2VsZWN0aW9uV2lkZ2V0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDEwICAgMTM1NDQxIGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwNDEwICAgMTM2MDExIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDQyMCAgIDEzNTkxMiBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDUwNCAgIDExOTI5NiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA2MDUyNSAgIDE0MjI4MSBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDYwNyAgIDE0NDkzMiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA2MTIgICAxNDUwODEgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNjA3MTkgICAxMzk5Nzcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwODAzICAgMTUyNzAxIGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5Ci0gKiAyMDA2MDgwMyAgIDE1MjQ4NiBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgVHlwaW5nIFdTREwgaW4gU2VydmljZSBkZWZpbml0aW9uIGZpZWxkIGlzIHZlcnkgc2xvdwotICogMjAwNjA4MjUgICAxMzU1NzAgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFNlcnZpY2UgaW1wbGVtZW50YXRpb24gVVJMIG5vdCBkaXNwbGF5ZWQgcHJvcGVybHkgb24gZmlyc3QgcGFnZQotICogMjAwNjA4MzEgICAxNTU4ODMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIHNlcnZpY2UgaW1wbCBmaWVsZCBkb2Vzbid0IHdvcmsgYWZ0ZXIgc3dpdGNoaW5nIGZyb20gQlUgdG8gVEQKLSAqIDIwMDYxMTA2ICAgMTQyNTAwIGRhdmlkLnNjaG5laWRlckB1bmlzeXMuY29tIC0gRGF2aWQgU2NobmVpZGVyLCBXVFAgcHJvcGVydGllcyBwYWdlcyBmb250cyBkb24ndCBmb2xsb3cgRWNsaXBzZSBwcmVmZXJlbmNlcwotICogMjAwNjEyMTEgICAxNjE1ODkgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIE5QRSBpbiBzZXJ2aWNlIGdlbmVyYXRpb24gYWZ0ZXIgb3BlbmluZyBhbmQgY2FuY2VsbGluZyBmcm9tIGJyb3dzZSBkaWFsb2cKLSAqIDIwMDcwMTMxICAgMTY4Nzg2IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCB3c2RsIHVybCBvbiB3ZWIgc2VydmljZSB3aXphcmQgcGFnZSAxIGlzIG5vdCByZWZsZWN0ZWQgaW4gYnJvd3NlIGRpYWxvZwotICogMjAwNzAzMjYgICAxNzEwNzEgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIENyZWF0ZSBwdWJsaWMgdXRpbGl0eSBtZXRob2QgZm9yIGNvcHlpbmcgV1NETCBmaWxlcwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuam9icy5JSm9iQ2hhbmdlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmpvYnMuSUpvYk1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmpvYnMuSm9iOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5qb2JzLkpvYkNoYW5nZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5EaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2NsaWVudC5TZXJ2aWNlUmVmOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uSjJFRUFjdGlvbkFkYXB0ZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLldTRExQYXJzZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuVGltZWRXU0RMU2VsZWN0aW9uQ29uZGl0aW9uQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5XU0RMU2VsZWN0aW9uVHJlZVdpZGdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuY29tbW9uLkRpYWxvZ1Jlc291cmNlQnJvd3NlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuY29tbW9uLkZpbGVFeHRlbnNpb25GaWx0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLmNvbW1vbi5VSVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldERhdGFFdmVudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLnJlc291cmNlcy5JVmlydHVhbENvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZUVudGl0eTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbi5XU1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXMuUGVyc2lzdGVudFdTRExWYWxpZGF0aW9uQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudXRpbC5Vbml2ZXJzYWxQYXRoVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5TZXJ2aWNlSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExSZXNvdXJjZUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5JVmFsaWRhdGlvbk1lc3NhZ2U7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMU2VsZWN0aW9uV2lkZ2V0IGV4dGVuZHMgQWJzdHJhY3RPYmplY3RTZWxlY3Rpb25XaWRnZXQgaW1wbGVtZW50cyBJT2JqZWN0U2VsZWN0aW9uV2lkZ2V0LCBSdW5uYWJsZQotewotICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgICAgcGx1Z2luSWRfOwotICBwcml2YXRlIEZpbGVFeHRlbnNpb25GaWx0ZXIgd3NGaWx0ZXJfOwotICBwcml2YXRlIFdlYlNlcnZpY2VzUGFyc2VyIHdlYlNlcnZpY2VzUGFyc2VyOwotICBwcml2YXRlIFN0cmluZyB3c2RsVVJJXzsKLSAgCi0gIHByaXZhdGUgQ29tcG9zaXRlIHBhcmVudF87Ci0gIHByaXZhdGUgTGlzdGVuZXIgIHN0YXR1c0xpc3RlbmVyXzsKLSAgcHJpdmF0ZSBNb2RpZnlMaXN0ZW5lciBtb2RpZnlMaXN0ZW5lcl87Ci0gIHByaXZhdGUgV1NETFNlbGVjdGlvblRyZWVXaWRnZXQgdHJlZTsKLSAgCi0gIHByaXZhdGUgVGltZXIgdGltZXJfID0gbnVsbDsKLSAgCi0gIC8qQ09OVEVYVF9JRCBQQ09OMDAwMSBmb3IgdGhlIFdTREwgU2VsZWN0aW9uIFBhZ2UqLwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBJTkZPUE9QX1BDT05fUEFHRSA9ICJQQ09OMDAwMSI7Ci0KLSAgLypDT05URVhUX0lEIFBDT04wMDAyIGZvciB0aGUgV1NETCBEb2N1bWVudCB0ZXh0IGZpZWxkIG9mIHRoZSBXU0RMIFNlbGVjdGlvbiBQYWdlKi8KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9QQ09OX1RFWFRfV1NETCA9ICJQQ09OMDAwMiI7Ci0gIHByaXZhdGUgVGV4dCB3ZWJTZXJ2aWNlVVJJOwotCi0gIC8qQ09OVEVYVF9JRCBQQ09OMDAwMyBmb3IgdGhlIFdTREwgUmVzb3VyY2UgQnJvd3NlIGJ1dHRvbiBvZiB0aGUgV1NETCBTZWxlY3Rpb24gUGFnZSovCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIElORk9QT1BfUENPTl9CVVRUT05fQlJPV1NFX1dTREwgPSAiUENPTjAwMDMiOwotICBwcml2YXRlIEJ1dHRvbiB3c0Jyb3dzZUJ1dHRvbl87Ci0gIAotICAvKkNPTlRFWFRfSUQgUENPTjAwMDQgZm9yIHRoZSBXaXphcmQgV1NETCBWYWxpZGF0aW9uIHRhYmxlIG9mIHRoZSBXU0RMIFNlbGVjdGlvbiBQYWdlKi8KLSAgcHJpdmF0ZSBWYWxpZGF0aW9uTWVzc2FnZVZpZXdlcldpZGdldCBtc2dWaWV3ZXJfOwotICBwcml2YXRlIFZhbGlkYXRlV1NETEpvYiB2YWxpZGF0ZVdTRExKb2JfOwotICBwcml2YXRlIEpvYkNoYW5nZUFkYXB0ZXIgICAgam9iQ2hhbmdlQWRhcHRlcl87Ci0gIAotICAvKkNPTlRFWFRfSUQgUENPTjAwMDUgZm9yIHRoZSBXaXphcmQgV1NETCBWYWxpZGF0aW9uIHN1bW1hcnkgbWVzc2FnZSBvZiB0aGUgV1NETCBTZWxlY3Rpb24gUGFnZSovCi0gIHByaXZhdGUgVGV4dCB2YWxpZGF0aW9uU3VtbWFyeVRleHRfOwotICBwcml2YXRlIFRleHQgdmFsaWRhdGlvblN1bW1hcnlUZXh0Ml87Ci0gIAotICAvKkNPTlRFWFRfSUQgUENPTjAwMDYgZm9yIHRoZSBTdG9wIFdpemFyZCBXU0RMIFZhbGlkYXRpb24gYnV0dG9uIG9mIHRoZSBXU0RMIFNlbGVjdGlvbiBQYWdlKi8KLSAgcHJpdmF0ZSBCdXR0b24gc3RvcFZhbGlkYXRpb25CdXR0b25fOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBJTkZPUE9QX1BDT05fQlVUVE9OX1NUT1BfVkFMSURBVElPTiA9ICJQQ09OMDAwNiI7Ci0gIAotICBwdWJsaWMgV1NETFNlbGVjdGlvbldpZGdldCgpCi0gIHsKLSAgICBwbHVnaW5JZF8gPSAib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpIjsKLSAgICB3c0ZpbHRlcl8gPSBuZXcgRmlsZUV4dGVuc2lvbkZpbHRlcihuZXcgU3RyaW5nW10geyJ3c2RsIiwgIndzaWwiLCAiaHRtbCJ9KTsKLSAgICB3ZWJTZXJ2aWNlc1BhcnNlciA9IFdTRExQYXJzZXJGYWN0b3J5LmdldFdTRExQYXJzZXIoKTsKLSAgICAKLSAgICBmaW5hbCBSdW5uYWJsZSBoYW5kbGVWYWxpZGF0aW9uTWVzc2FnZXMgPSBuZXcgUnVubmFibGUoKQotICAgIHsKLQkgIHB1YmxpYyB2b2lkIHJ1bigpIAotICAgICAgewotCQkgIG1zZ1ZpZXdlcl8uc2V0SW5wdXQodmFsaWRhdGVXU0RMSm9iXy5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKSk7Ci0JCSAgdXBkYXRlVmFsaWRhdGlvblN1bW1hcnkodmFsaWRhdGVXU0RMSm9iXy5nZXRWYWxpZGF0aW9uTWVzc2FnZVNldmVyaXR5KCkpOwotCQkgIHNldFZhbGlkYXRpb25JblByb2dyZXNzKGZhbHNlKTsKLSAgICAgIH0KLSAgICB9OwotICAgIAotICAgIGpvYkNoYW5nZUFkYXB0ZXJfID0gbmV3IEpvYkNoYW5nZUFkYXB0ZXIoKQotICAgIHsKLSAgICAgIHB1YmxpYyB2b2lkIGRvbmUoSUpvYkNoYW5nZUV2ZW50IGV2ZW50KSAKLSAgICAgIHsgICAJCi0gICAgCSAgaWYgKG1zZ1ZpZXdlcl8hPSBudWxsICYmIG1zZ1ZpZXdlcl8uZ2V0Q29udGVudFByb3ZpZGVyKCkgIT0gbnVsbCkgewotICAgIAkJICBEaXNwbGF5LmdldERlZmF1bHQoKS5hc3luY0V4ZWMoIGhhbmRsZVZhbGlkYXRpb25NZXNzYWdlcyApOwotCQkgIH0KLSAgICAgIH0KLSAgICB9OwotICB9Ci0gIAotICBwdWJsaWMgV2lkZ2V0RGF0YUV2ZW50cyBhZGRDb250cm9scyggQ29tcG9zaXRlIHBhcmVudCwgTGlzdGVuZXIgc3RhdHVzTGlzdGVuZXIgKQotICB7Ci0gICAgVUlVdGlscyB1aVV0aWxzICA9IG5ldyBVSVV0aWxzKCBwbHVnaW5JZF8gKTsKLSAgICBwYXJlbnRfICAgICAgICAgID0gcGFyZW50OwotICAgIHN0YXR1c0xpc3RlbmVyXyAgPSBzdGF0dXNMaXN0ZW5lcjsKLQotCSAgcGFyZW50LnNldFRvb2xUaXBUZXh0KCBDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QQ09OX1BBR0UgKTsKLQkgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoIHBhcmVudCwgcGx1Z2luSWRfICsgIi4iICsgSU5GT1BPUF9QQ09OX1BBR0UgKTsKLSAgICAKLSAgICBDb21wb3NpdGUgd3NkbEdyb3VwID0gdWlVdGlscy5jcmVhdGVDb21wb3NpdGUoIHBhcmVudCwgMiwgNSwgMCApOwotICAgIAotICAgIExhYmVsIHdzTGFiZWwgPSBuZXcgTGFiZWwoIHdzZGxHcm91cCwgU1dULldSQVApOwotICAgIHdzTGFiZWwuc2V0VGV4dCggQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1dTX1NFTEVDVElPTik7Ci0gICAgR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMKTsKLSAgICBnZC5ob3Jpem9udGFsU3BhbiA9IDI7Ci0gICAgd3NMYWJlbC5zZXRMYXlvdXREYXRhKGdkKTsKLSAgICB3c0xhYmVsLnNldFRvb2xUaXBUZXh0KCBDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QQ09OX1RFWFRfV1MgKTsKLSAgICAKLSAgICB3ZWJTZXJ2aWNlVVJJID0gdWlVdGlscy5jcmVhdGVUZXh0KCB3c2RsR3JvdXAsIG51bGwsIAotICAgIAkJCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BDT05fVEVYVF9XUywgCi0gICAgCQkJCQkJSU5GT1BPUF9QQ09OX1RFWFRfV1NETCwgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIgKTsKLSAgICBtb2RpZnlMaXN0ZW5lcl8gPQotICAgICAgbmV3IE1vZGlmeUxpc3RlbmVyKCkKLSAgICAgIHsKLSAgICAgICAgcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBldmVudCkKLSAgICAgICAgewotICAgICAgICAgIGhhbmRsZVdlYlNlcnZpY2VVUklNb2RpZnlFdmVudCgpOwotICAgICAgICB9Ci0gICAgICB9OwotICAgIAotICAgIHdlYlNlcnZpY2VVUkkuYWRkTW9kaWZ5TGlzdGVuZXIobW9kaWZ5TGlzdGVuZXJfKTsKLSAgICAKLS8vICAgIHdlYlNlcnZpY2VVUkkuYWRkTGlzdGVuZXIoIFNXVC5Nb2RpZnksIHN0YXR1c0xpc3RlbmVyICk7Ci0KLSAgICB3c0Jyb3dzZUJ1dHRvbl8gPSB1aVV0aWxzLmNyZWF0ZVB1c2hCdXR0b24oIHdzZGxHcm91cCwgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkJVVFRPTl9CUk9XU0UsIAotICAgIAkJCQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUENPTl9CVVRUT05fQlJPV1NFX1dTLCAKLSAgICAJCQkJCQkJCUlORk9QT1BfUENPTl9CVVRUT05fQlJPV1NFX1dTREwgKTsKLSAgICB3c0Jyb3dzZUJ1dHRvbl8uYWRkU2VsZWN0aW9uTGlzdGVuZXIoCi0gICAgICBuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKQotICAgICAgewotICAgICAgICBwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZlbnQpCi0gICAgICAgIHsKLSAgICAgICAgICBoYW5kbGVXU0RMQnV0dG9uKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KQotICAgICAgICB7Ci0gICAgICAgICAgaGFuZGxlV1NETEJ1dHRvbigpOwotICAgICAgICB9IAotICAgICAgfSk7Ci0KLSAgICB0cmVlID0gbmV3IFdTRExTZWxlY3Rpb25UcmVlV2lkZ2V0KCk7Ci0gICAgdHJlZS5hZGRDb250cm9scyhwYXJlbnQsIHN0YXR1c0xpc3RlbmVyKTsKLSAgICB0cmVlLnNldFdlYlNlcnZpY2VzUGFyc2VyKHdlYlNlcnZpY2VzUGFyc2VyKTsgICAgCi0gICAgCi0gICAgbXNnVmlld2VyXyA9IG5ldyBWYWxpZGF0aW9uTWVzc2FnZVZpZXdlcldpZGdldCgpOwotICAgIG1zZ1ZpZXdlcl8uYWRkQ29udHJvbHMocGFyZW50LCBzdGF0dXNMaXN0ZW5lcik7Ci0gICAgCi0gICAgdmFsaWRhdGlvblN1bW1hcnlUZXh0XyA9IG5ldyBUZXh0KCBwYXJlbnQsIFNXVC5XUkFQKTsKLSAgICB2YWxpZGF0aW9uU3VtbWFyeVRleHRfLnNldEVkaXRhYmxlKGZhbHNlKTsKLSAgICBHcmlkRGF0YSBnZDEgPSBuZXcgR3JpZERhdGEoU1dULkZJTEwsIFNXVC5GSUxMLCBmYWxzZSwgZmFsc2UpOwotICAgIHZhbGlkYXRpb25TdW1tYXJ5VGV4dF8uc2V0TGF5b3V0RGF0YShnZDEpOwotICAgIHZhbGlkYXRpb25TdW1tYXJ5VGV4dF8uc2V0VG9vbFRpcFRleHQoIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1ZBTElEQVRFX1RFWFRfTUVTU0FHRV9TVU1NQVJZICk7Ci0gICAgCi0gICAgdmFsaWRhdGlvblN1bW1hcnlUZXh0Ml8gPSBuZXcgVGV4dCggcGFyZW50LCBTV1QuV1JBUCk7Ci0gICAgdmFsaWRhdGlvblN1bW1hcnlUZXh0Ml8uc2V0RWRpdGFibGUoZmFsc2UpOwotICAgIHZhbGlkYXRpb25TdW1tYXJ5VGV4dDJfLnNldExheW91dERhdGEoZ2QxKTsKLSAgICAKLSAgICBzdG9wVmFsaWRhdGlvbkJ1dHRvbl8gPSB1aVV0aWxzLmNyZWF0ZVB1c2hCdXR0b24ocGFyZW50LCAKLSAgICAJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfQlVUVE9OX1NUT1BfV1NETF9WQUxJREFUSU9OLCAKLSAgICAJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9TVE9QX1ZBTElEQVRJT05fQlVUVE9OLCAKLSAgICAJCQlJTkZPUE9QX1BDT05fQlVUVE9OX1NUT1BfVkFMSURBVElPTik7Ci0gICAgc2V0VmFsaWRhdGlvbkluUHJvZ3Jlc3MoZmFsc2UpOwotICAgIAotICAgIHN0b3BWYWxpZGF0aW9uQnV0dG9uXy5hZGRTZWxlY3Rpb25MaXN0ZW5lcigKLSAgICAJCW5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpCi0gICAgCQl7Ci0gICAgCQkJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KQotICAgIAkJCXsKLSAgICAJCQkJaGFuZGxlU3RvcFZhbGlkYXRpb25CdXR0b24oKTsKLSAgICAJCQl9Ci0KLSAgICAJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkKLSAgICAJCQl7Ci0gICAgCQkJCWhhbmRsZVN0b3BWYWxpZGF0aW9uQnV0dG9uKCk7Ci0gICAgCQkJfSAKLSAgICAJCX0pOwotICAgIAotICAgIHNldE1lc3NhZ2VTdW1tYXJ5KCk7Ci0gICAgRGlhbG9nLmFwcGx5RGlhbG9nRm9udChwYXJlbnQpOyAgICAKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIHNldE1lc3NhZ2VTdW1tYXJ5KCkgewotCSAgU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlU3VtbWFyeSA9IENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NRVNTQUdFX1ZBTElEQVRFX05PX1dTREw7Ci0JICBQZXJzaXN0ZW50V1NETFZhbGlkYXRpb25Db250ZXh0IHdzZGxWYWxpZGF0aW9uQ29udGV4dCA9IFdTUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0V1NETFZhbGlkYXRpb25Db250ZXh0KCk7Ci0JICBTdHJpbmcgdmFsaWRhdGlvblNlbGVjdGlvbiA9IHdzZGxWYWxpZGF0aW9uQ29udGV4dC5nZXRQZXJzaXN0ZW50V1NETFZhbGlkYXRpb24oKTsKLQkgIGlmIChQZXJzaXN0ZW50V1NETFZhbGlkYXRpb25Db250ZXh0LlZBTElEQVRFX1JFTU9URV9XU0RMLmVxdWFscyh2YWxpZGF0aW9uU2VsZWN0aW9uKSkgewotCQkgIHZhbGlkYXRpb25NZXNzYWdlU3VtbWFyeSA9IENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NRVNTQUdFX1ZBTElEQVRFX1JFTU9URV9XU0RMOwotCSAgfSBlbHNlIGlmIChQZXJzaXN0ZW50V1NETFZhbGlkYXRpb25Db250ZXh0LlZBTElEQVRFX0FMTF9XU0RMLmVxdWFscyh2YWxpZGF0aW9uU2VsZWN0aW9uKSkgewotCQkgIHZhbGlkYXRpb25NZXNzYWdlU3VtbWFyeSA9IENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NRVNTQUdFX1ZBTElEQVRFX0FMTF9XU0RMOwotCSAgfQotCSAgdmFsaWRhdGlvblN1bW1hcnlUZXh0Xy5zZXRUZXh0KCB2YWxpZGF0aW9uTWVzc2FnZVN1bW1hcnkgKTsKLQkgIHZhbGlkYXRpb25TdW1tYXJ5VGV4dDJfLnNldFRleHQoIiAiKTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGhhbmRsZVdlYlNlcnZpY2VVUklNb2RpZnlFdmVudCgpCi0gIHsKLSAgICBpZiAod2ViU2VydmljZVVSSS5nZXRUZXh0KCkuaW5kZXhPZignOicpID4gMCkgewotICAgICAgdGltZXJfID0gVGltZXIubmV3SW5zdGFuY2UodGltZXJfLCBEaXNwbGF5LmdldEN1cnJlbnQoKSwgdGhpcyk7Ci0gICAgICB0aW1lcl8uc3RhcnRUaW1lcigpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICBoYW5kbGVXZWJTZXJ2aWNlVVJJKCk7Ci0gICAgc3RhdHVzTGlzdGVuZXJfLmhhbmRsZUV2ZW50KG51bGwpOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgaGFuZGxlV2ViU2VydmljZVVSSSgpIHsKLQkgIGhhbmRsZVdlYlNlcnZpY2VVUkkod2ViU2VydmljZVVSSS5nZXRUZXh0KCkpOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgaGFuZGxlV2ViU2VydmljZVVSSShTdHJpbmcgd3NVUkkpCi0gIHsgICAgCi0gICAgaWYgKHdzVVJJLmluZGV4T2YoJzonKSA8IDApCi0gICAgewotICAgICAgSUZpbGUgZmlsZSA9IHVyaTJJRmlsZSh3c1VSSSk7Ci0gICAgICBpZiAoZmlsZSAhPSBudWxsKQotICAgICAgICB3c1VSSSA9IGlGaWxlMlVSSShmaWxlKTsKLSAgICB9Ci0gICAgaWYgKHdzVVJJICE9IG51bGwgJiYgd3NVUkkuaW5kZXhPZignOicpID49IDAgJiYgd2ViU2VydmljZXNQYXJzZXIuZ2V0V2ViU2VydmljZUVudGl0eUJ5VVJJKHdzVVJJKSA9PSBudWxsKQotICAgIHsKLSAgICAgIFRpbWVkV1NETFNlbGVjdGlvbkNvbmRpdGlvbkNvbW1hbmQgY21kID0gbmV3IFRpbWVkV1NETFNlbGVjdGlvbkNvbmRpdGlvbkNvbW1hbmQoKTsKLSAgICAgIGNtZC5zZXRXZWJTZXJ2aWNlc1BhcnNlcih3ZWJTZXJ2aWNlc1BhcnNlcik7Ci0gICAgICBjbWQuc2V0V2ViU2VydmljZVVSSSh3c1VSSSk7Ci0gICAgICBjbWQuZXhlY3V0ZShudWxsLCBudWxsKTsKLSAgICB9Ci0gICAgV2ViU2VydmljZUVudGl0eSBlbnRpdHkgPSB3ZWJTZXJ2aWNlc1BhcnNlci5nZXRXZWJTZXJ2aWNlRW50aXR5QnlVUkkod3NVUkkpOwotICAgIGlmIChlbnRpdHkgIT0gbnVsbCAmJiBlbnRpdHkuZ2V0VHlwZSgpID09IFdlYlNlcnZpY2VFbnRpdHkuVFlQRV9XU0RMKQotICAgICAgdHJlZS5zZXRFbmFibGVkKGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICB0cmVlLnNldEVuYWJsZWQodHJ1ZSk7Ci0gICAgdHJlZS5zZXRXZWJTZXJ2aWNlVVJJKHdzVVJJKTsKLSAgICB0cmVlLnJlZnJlc2hUcmVlVmlld2VyKCk7ICAKLSAgICB3c2RsVVJJXyA9IHdzVVJJOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBydW4oKQotICB7Ci0gICAgaGFuZGxlV2ViU2VydmljZVVSSSgpOwotICAgIHN0YXR1c0xpc3RlbmVyXy5oYW5kbGVFdmVudChudWxsKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBoYW5kbGVXU0RMQnV0dG9uKCkKLSAgewotICAgIERpYWxvZ1Jlc291cmNlQnJvd3NlciBkaWFsb2cgPSBuZXcgRGlhbG9nUmVzb3VyY2VCcm93c2VyKCBwYXJlbnRfLmdldFNoZWxsKCksIG51bGwsIHdzRmlsdGVyXyk7Ci0gICAgZGlhbG9nLm9wZW4oKTsKLSAgICBJUmVzb3VyY2UgcmVzID0gZGlhbG9nLmdldEZpcnN0U2VsZWN0aW9uKCk7Ci0gICAgaWYoIHJlcyAhPSBudWxsICkKLSAgICB7Ci0gICAgCXdzZGxVUklfID0gcmVzLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKTsKLSAgICAJd2ViU2VydmljZVVSSS5zZXRUZXh0KCB3c2RsVVJJXyApOyAgICAJCi0gICAgfQotICAgIAkKLSAgICBzdGF0dXNMaXN0ZW5lcl8uaGFuZGxlRXZlbnQobnVsbCk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBzZXRWYWxpZGF0aW9uSW5Qcm9ncmVzcyhib29sZWFuIHZhbGlkYXRpbmcpIHsKLQkgIHN0b3BWYWxpZGF0aW9uQnV0dG9uXy5zZXRFbmFibGVkKHZhbGlkYXRpbmcpOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgaGFuZGxlU3RvcFZhbGlkYXRpb25CdXR0b24oKQotICB7Ci0JICBJSm9iTWFuYWdlciAgICBqb2JNYW5hZ2VyICAgICA9IFBsYXRmb3JtLmdldEpvYk1hbmFnZXIoKTsKLQkgIEpvYltdICAgICAgICAgIGpvYnMgICAgICAgICAgID0gam9iTWFuYWdlci5maW5kKCBWYWxpZGF0ZVdTRExKb2IuVkFMSURBVEVfV1NETF9KT0JfRkFNSUxZICk7Ci0JICBWYWxpZGF0ZVdTRExKb2IgZXhpc3RpbmdWYWxpZGF0ZVdTRExKb2IgPSBudWxsOwotCSAgCi0JICBpZiggam9icy5sZW5ndGggPiAwICkKLQkgIHsKLQkJICBmb3IgKGludCBpPTA7IGk8am9icy5sZW5ndGg7IGkrKykgewotCQkJICBleGlzdGluZ1ZhbGlkYXRlV1NETEpvYiA9IChWYWxpZGF0ZVdTRExKb2Ipam9ic1tpXTsKLQotCQkJICBpZiAoZXhpc3RpbmdWYWxpZGF0ZVdTRExKb2IuZ2V0U3RhdGUoKSAhPSBKb2IuTk9ORSkgeyAKLQkJCQkgIGV4aXN0aW5nVmFsaWRhdGVXU0RMSm9iLmNhbmNlbCgpOwotCQkJICB9Ci0JCSAgfQotCSAgfQotCSAgY2xlYXJWYWxpZGF0aW9uTWVzc2FnZXMoKTsKLQkgIHNldFZhbGlkYXRpb25JblByb2dyZXNzKGZhbHNlKTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGNsZWFyVmFsaWRhdGlvbk1lc3NhZ2VzKCkgewotCSAgbXNnVmlld2VyXy5jbGVhcklucHV0KCk7Ci0JICB2YWxpZGF0aW9uU3VtbWFyeVRleHRfLnNldFRleHQoIiAiICk7Ci0JICB2YWxpZGF0aW9uU3VtbWFyeVRleHQyXy5zZXRUZXh0KCIgIik7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJU3RhdHVzIGdldFN0YXR1cygpCi0gIHsKLSAgICAvLyBUaW1lciB2YWxpZGF0aW9uCi0gICAgLyoKLSAgICAgKiBDb21tZW50aW5nIG91dCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gYmxvY2sgZmFzdCB0eXBlcnMgZnJvbSBoaXR0aW5nIE5leHQvRmluaXNoIAotICAgIGlmIChUaW1lci5pc1J1bm5pbmcoKSkKLSAgICAgIHJldHVybiBuZXcgU2ltcGxlU3RhdHVzKCIiLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9NU0dfTE9BRElOR19XRUJfU0VSVklDRV9VUkksIFN0YXR1cy5FUlJPUik7Ci0gICAgKi8KLQkKLSAgICAvLyBWYWxpZGF0ZSB0aGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBXZWIgc2VydmljZSBVUkkKLSAgICAvLyBGb3IgZXhhbXBsZSwgaXMgaXQgcG9pbnRpbmcgdG8gYW4gZXhpc3RpbmcgcmVzb3VyY2UgaW4gdGhlIHdvcmtzcGFjZT8KLSAgICBTdHJpbmcgd3NQYXRoICA9IHdlYlNlcnZpY2VVUkkuZ2V0VGV4dCgpOwotICAgIGlmKCB3c1BhdGggPT0gbnVsbCB8fCB3c1BhdGgubGVuZ3RoKCkgPD0gMCApIHsKLSAgICAJY2xlYXJWYWxpZGF0aW9uTWVzc2FnZXMoKTsKLSAgICAJcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9NU0dfSU5WQUxJRF9XRUJfU0VSVklDRV9VUkkgKTsKLSAgICB9Ci0gICAgZWxzZSBpZiggd3NQYXRoLmluZGV4T2YoJzonKSA8IDAgKQotICAgIHsKLSAgICAJSVJlc291cmNlIHJlcyA9IFJlc291cmNlVXRpbHMuZmluZFJlc291cmNlKHdzUGF0aCk7Ci0gICAgCWlmKCByZXMgPT0gbnVsbCApIHsKLSAgICAJCWNsZWFyVmFsaWRhdGlvbk1lc3NhZ2VzKCk7Ci0gICAgCQlyZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIE5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX01TR19OT19TVUNIX0ZJTEUsIG5ldyBPYmplY3RbXSB7d3NQYXRofSkgKTsKLSAgICAJfQotICAgIAllbHNlIGlmKCByZXMuZ2V0VHlwZSgpICE9IElSZXNvdXJjZS5GSUxFICkgewotICAgIAkJY2xlYXJWYWxpZGF0aW9uTWVzc2FnZXMoKTsKLSAgICAJCXJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfTVNHX0lOVkFMSURfV0VCX1NFUlZJQ0VfVVJJICk7Ci0gICAgCX0KLSAgICB9Ci0KLSAgICAKLSAgICAvLyBWYWxpZGF0ZSB0aGUgY29udGVudCBvZiB0aGUgV2ViIHNlcnZpY2UgVVJJCi0gICAgLy8gRm9yIGV4YW1wbGUsIGlzIHNlbGVjdGlvbiBhIFdTREwgVVJJPwotICAgIGlmICghVGltZXIuaXNSdW5uaW5nKHRpbWVyXykgJiYgdHJlZS5pc0VuYWJsZWQoKSkKLSAgICB7Ci0gICAgICBJU3RhdHVzIHN0YXR1cyA9IHRyZWUuZ2V0U3RhdHVzKCk7Ci0gICAgICBpZiAoc3RhdHVzICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGludCBzZXZlcml0eSA9IHN0YXR1cy5nZXRTZXZlcml0eSgpOwotICAgICAgICBpZiAoc2V2ZXJpdHkgPT0gU3RhdHVzLkVSUk9SIHx8IHNldmVyaXR5ID09IFN0YXR1cy5XQVJOSU5HKSB7Ci0gICAgICAgIAljbGVhclZhbGlkYXRpb25NZXNzYWdlcygpOwotICAgICAgICAJcmV0dXJuIHN0YXR1czsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgIAlpZiggd3NQYXRoLmluZGV4T2YoJzonKSA8IDAgKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIHdzZGxVUkkgPSBpRmlsZTJVUkkoKElGaWxlKVJlc291cmNlVXRpbHMuZmluZFJlc291cmNlKHdzUGF0aCkpOwotICAgICAgICAgIGlmICh3ZWJTZXJ2aWNlc1BhcnNlci5nZXRXU0RMRGVmaW5pdGlvbih3c2RsVVJJKSA9PSBudWxsKSB7Ci0gICAgICAgIAkgIGNsZWFyVmFsaWRhdGlvbk1lc3NhZ2VzKCk7Ci0gICAgICAgIAkgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9NU0dfU0VMRUNUSU9OX01VU1RfQkVfV1NETCApOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAKLSAgICBpZiAoIVRpbWVyLmlzUnVubmluZyh0aW1lcl8pKSB7Ci0gICAgCVN0cmluZyB3c2RsVVJJMSA9IHdzUGF0aDsKLSAgICAJIGJvb2xlYW4gaXNSZW1vdGUgPSB0cnVlOwotICAgIAlpZiAodHJlZS5pc0VuYWJsZWQoKSkgeyAvLyBpcyB3c2lsCi0gICAgCQl3c2RsVVJJMSA9IHRyZWUuZ2V0V3NkbFVSSSgpOwotICAgIAkJaWYgKHdzZGxVUkkxLnN0YXJ0c1dpdGgoImZpbGU6IikgfHwgd3NkbFVSSTEuc3RhcnRzV2l0aCgicGxhdGZvcm06IikpCi0gICAgCQl7Ci0gICAgCQkJaXNSZW1vdGUgPSBmYWxzZTsKLSAgICAJCX0KLSAgICAJfSBlbHNlIHsKLSAgICAJCWlmICh3c1BhdGguaW5kZXhPZignOicpIDwgMCkKLSAgICAJCXsKLSAgICAJCQlpc1JlbW90ZSA9IGZhbHNlOwotICAgIAkJCXdzZGxVUkkxID0gaUZpbGUyVVJJKChJRmlsZSlSZXNvdXJjZVV0aWxzLmZpbmRSZXNvdXJjZSh3c1BhdGgpKTsKLSAgICAJCX0KLSAgICAJCWVsc2UgaWYgKHdzUGF0aC5zdGFydHNXaXRoKCJmaWxlOiIpIHx8IHdzUGF0aC5zdGFydHNXaXRoKCJwbGF0Zm9ybToiKSkKLSAgICAJCXsKLSAgICAJCQlpc1JlbW90ZSA9IGZhbHNlOwotICAgIAkJfQotICAgIAl9Ci0gIAkgIAotICAgICAgc2V0TWVzc2FnZVN1bW1hcnkoKTsKLQkgIG1zZ1ZpZXdlcl8uY2xlYXJJbnB1dCgpOwotICAJICB2YWxpZGF0ZVdTREwod3NkbFVSSTEsIGlzUmVtb3RlKTsKLSAgICB9Ci0gICAgCi0KLSAgICAvLyBPSyBzdGF0dXMKLSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIHZhbGlkYXRlV1NETCAoU3RyaW5nIHdzZGxVUkksIGJvb2xlYW4gaXNSZW1vdGUpIHsKLQotCSAgU3RyaW5nIHZhbGlkYXRpb25TZWxlY3Rpb24gPSBXU1BsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFdTRExWYWxpZGF0aW9uQ29udGV4dCgpLmdldFBlcnNpc3RlbnRXU0RMVmFsaWRhdGlvbigpOzsKLQkgIGlmICgoUGVyc2lzdGVudFdTRExWYWxpZGF0aW9uQ29udGV4dC5WQUxJREFURV9BTExfV1NETC5lcXVhbHModmFsaWRhdGlvblNlbGVjdGlvbikpIHx8Ci0JCQkgIChQZXJzaXN0ZW50V1NETFZhbGlkYXRpb25Db250ZXh0LlZBTElEQVRFX1JFTU9URV9XU0RMLmVxdWFscyh2YWxpZGF0aW9uU2VsZWN0aW9uKSAmJiBpc1JlbW90ZSkpIHsKLQotCQkgIElKb2JNYW5hZ2VyICAgIGpvYk1hbmFnZXIgICAgID0gUGxhdGZvcm0uZ2V0Sm9iTWFuYWdlcigpOwotCQkgIEpvYltdICAgICAgICAgIGpvYnMgICAgICAgICAgID0gam9iTWFuYWdlci5maW5kKCBWYWxpZGF0ZVdTRExKb2IuVkFMSURBVEVfV1NETF9KT0JfRkFNSUxZICk7Ci0JCSAgVmFsaWRhdGVXU0RMSm9iIGV4aXN0aW5nVmFsaWRhdGVXU0RMSm9iID0gbnVsbDsKLQkJICAKLQkJICBib29sZWFuIHN0YXJ0V1NETFZhbGlkYXRpb24gPSB0cnVlOwotCQkgIHZhbGlkYXRpb25TdW1tYXJ5VGV4dF8uc2V0VGV4dCggQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1FU1NBR0VfVkFMSURBVEVfSU5fUFJPR1JFU1MgKTsKLQkJICB2YWxpZGF0aW9uU3VtbWFyeVRleHQyXy5zZXRUZXh0KCIgIik7Ci0JCSAgaWYoIGpvYnMubGVuZ3RoID4gMCApCi0JCSAgewotCQkJICBmb3IgKGludCBpPTA7IGk8am9icy5sZW5ndGg7IGkrKykgewotCQkJCSAgZXhpc3RpbmdWYWxpZGF0ZVdTRExKb2IgPSAoVmFsaWRhdGVXU0RMSm9iKWpvYnNbaV07Ci0JCQkJICAKLQkJCQkgIGlmIChleGlzdGluZ1ZhbGlkYXRlV1NETEpvYi5nZXRTdGF0ZSgpICE9IEpvYi5OT05FKSB7IAotCQkJCQkgIC8vIEpvYiBydW5uaW5nIG9yIHRvIGJlIHJ1bgotCQkJCQkgIC8vIElmIHRoZSBqb2IgaXMgdmFsaWRhdGluZyB0aGUgc2FtZSB3c2RsVVJJLCBsZXQgaXQgZmluaXNoIHJ1bm5pbmcgYW5kIGlnbm9yZSB0aGlzIG9uZS4KLQkJCQkJICAvLyBJdCBpcyBub3QgZm9yIHRoZSBzYW1lIHdzZGxVUkksIGNhbmNlbCB0aGUgam9iIGFuZCBzY2hlZHVsZSB0aGlzIG9uZS4KLQotCQkJCQkgIGlmICghd3NkbFVSSS5lcXVhbHMoZXhpc3RpbmdWYWxpZGF0ZVdTRExKb2IuZ2V0V3NkbFVSSSgpKSkgewotCQkJCQkJICBleGlzdGluZ1ZhbGlkYXRlV1NETEpvYi5jYW5jZWwoKTsKLQkJCQkJCSAgc2V0VmFsaWRhdGlvbkluUHJvZ3Jlc3MoZmFsc2UpOwotCQkJCQkgIH0gZWxzZSB7CQkJCQkJICAKLQkJCQkJCSAgc3RhcnRXU0RMVmFsaWRhdGlvbiA9IGZhbHNlOwotCQkJCQkgIH0KLQkJCQkgIH0gCi0JCQkgIH0KLQkJICB9IAotCQkgIAotCQkgIGlmIChzdGFydFdTRExWYWxpZGF0aW9uKSB7Ci0JCQkgIHN0YXJ0V1NETFZhbGlkYXRpb25Kb2Iod3NkbFVSSSk7Ci0JCSAgfQotCSAgfQotCSAgcmV0dXJuOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgc3RhcnRXU0RMVmFsaWRhdGlvbkpvYiAoU3RyaW5nIHdzZGxVUkkpIHsKLQkgIHZhbGlkYXRlV1NETEpvYl8gPSBuZXcgVmFsaWRhdGVXU0RMSm9iKHdzZGxVUkkpOwotCSAgdmFsaWRhdGVXU0RMSm9iXy5hZGRKb2JDaGFuZ2VMaXN0ZW5lciggam9iQ2hhbmdlQWRhcHRlcl8gKTsKLQkgIHZhbGlkYXRlV1NETEpvYl8uc2NoZWR1bGUoKTsKLQkgIHNldFZhbGlkYXRpb25JblByb2dyZXNzKHRydWUpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB1cGRhdGVWYWxpZGF0aW9uU3VtbWFyeShpbnQgbWVzc2FnZVNldmVyaXR5KQotICB7Ci0gIAkKLSAgCXN3aXRjaCAobWVzc2FnZVNldmVyaXR5KSB7Ci0gIAljYXNlIElWYWxpZGF0aW9uTWVzc2FnZS5TRVZfRVJST1I6Ci0JCXZhbGlkYXRpb25TdW1tYXJ5VGV4dF8uc2V0VGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuRVJST1JfTUVTU0FHRVNfSU5fVkFMSURBVElPTik7Ci0JCXZhbGlkYXRpb25TdW1tYXJ5VGV4dDJfLnNldFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLldBUk5JTkdfSUZfQ09OVElOVUUpOwotCQlicmVhazsKLQljYXNlIElWYWxpZGF0aW9uTWVzc2FnZS5TRVZfV0FSTklORzoKLQkJdmFsaWRhdGlvblN1bW1hcnlUZXh0Xy5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5XQVJOSU5HX01FU1NBR0VTX0lOX1ZBTElEQVRJT04pOwotCQl2YWxpZGF0aW9uU3VtbWFyeVRleHQyXy5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5XQVJOSU5HX0lGX0NPTlRJTlVFKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJdmFsaWRhdGlvblN1bW1hcnlUZXh0Xy5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5WQUxJREFUSU9OX0NPTVBMRVRFRCk7Ci0JCXZhbGlkYXRpb25TdW1tYXJ5VGV4dDJfLnNldFRleHQoIiAiKTsKLQkJYnJlYWs7Ci0JfQotICB9Ci0gIAotICBwcml2YXRlIElGaWxlIHVyaTJJRmlsZShTdHJpbmcgdXJpKQotICB7Ci0gICAgSVJlc291cmNlIHJlcyA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZmluZE1lbWJlcih1cmkpOwotICAgIAotICAgIGlmIChyZXMgaW5zdGFuY2VvZiBJRmlsZSkKLSAgICAgIHJldHVybiAoSUZpbGUpcmVzOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBpRmlsZTJVUkkoSUZpbGUgZmlsZSkKLSAgewotICAJRmlsZSBmID0gZmlsZS5nZXRMb2NhdGlvbigpLnRvRmlsZSgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIHJldHVybiBmLnRvVVJMKCkudG9TdHJpbmcoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBtdXJsZSkKLSAgICB7Ci0gICAgfQotICAgIHJldHVybiBmLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRJbml0aWFsU2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGluaXRpYWxTZWxlY3Rpb24pCi0gIHsKLSAgICBpZiAoaW5pdGlhbFNlbGVjdGlvbiAhPSBudWxsICYmICFpbml0aWFsU2VsZWN0aW9uLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICBPYmplY3Qgb2JqZWN0ID0gaW5pdGlhbFNlbGVjdGlvbi5nZXRGaXJzdEVsZW1lbnQoKTsKLSAgICAgIFN0cmluZyB3c2RsVVJJID0gdG9Xc2RsVVJJKG9iamVjdCk7ICAKLSAgICAgIHdzZGxVUklfID0gd3NkbFVSSTsKLSAgICAgIAotICAgICAgaWYgKHdzZGxVUkkgIT0gbnVsbCAmJiB3ZWJTZXJ2aWNlVVJJICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGhhbmRsZVdlYlNlcnZpY2VVUkkod3NkbFVSSSk7Ci0gICAgCQotICAgICAgICB3ZWJTZXJ2aWNlVVJJLnJlbW92ZU1vZGlmeUxpc3RlbmVyKG1vZGlmeUxpc3RlbmVyXyk7Ci0gICAgICAgIHdlYlNlcnZpY2VVUkkuc2V0VGV4dChnZXRPYmplY3RTZWxlY3Rpb25EaXNwbGF5YWJsZVN0cmluZygpKTsgICAgICAgCi0gICAgICAgIHdlYlNlcnZpY2VVUkkuYWRkTW9kaWZ5TGlzdGVuZXIobW9kaWZ5TGlzdGVuZXJfKTsKLSAgICAgIH0KLSAgICB9ICAKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgdG9Xc2RsVVJJKE9iamVjdCBvYmplY3QpCi0gIHsKLSAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgU2VydmljZUltcGwpCi0gICAgICByZXR1cm4gSjJFRUFjdGlvbkFkYXB0ZXJGYWN0b3J5LmdldFdTRExVUkkoKFNlcnZpY2VJbXBsKW9iamVjdCk7Ci0gICAgZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgV1NETFJlc291cmNlSW1wbCkKLSAgICAgIHJldHVybiBKMkVFQWN0aW9uQWRhcHRlckZhY3RvcnkuZ2V0V1NETFVSSSgoV1NETFJlc291cmNlSW1wbClvYmplY3QpOwotICAgIGVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFNlcnZpY2VSZWYpCi0gICAgICByZXR1cm4gSjJFRUFjdGlvbkFkYXB0ZXJGYWN0b3J5LmdldFdTRExVUkkoKFNlcnZpY2VSZWYpb2JqZWN0KTsKLSAgICBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBJRmlsZSkKLSAgICAgIHJldHVybiAoKElGaWxlKW9iamVjdCkuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpOwotICAgIGVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFN0cmluZykKLSAgICAgIHJldHVybiAoU3RyaW5nKW9iamVjdDsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgcHVibGljIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGdldE9iamVjdFNlbGVjdGlvbigpCi0gIHsKLQkgIFN0cnVjdHVyZWRTZWxlY3Rpb24gc3M7IAotCSAgaWYgKHRyZWUgIT0gbnVsbCAmJiB0cmVlLmdldFdzZGxVUkkoKSAhPSBudWxsKQotCQkgIHNzID0gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24odHJlZS5nZXRXc2RsVVJJKCkpOwotCSAgZWxzZQotCQkgIHNzID0gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24od3NkbFVSSV8pOwotCXJldHVybiBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbiggCi0gICAgICAgICAgICAgICBuZXcgV1NETFNlbGVjdGlvbldyYXBwZXIoIHdlYlNlcnZpY2VzUGFyc2VyLCBzcykpOwotICB9Ci0gIAotICBwdWJsaWMgV2ViU2VydmljZXNQYXJzZXIgZ2V0V2ViU2VydmljZXNQYXJzZXIoKQotICB7Ci0gICAgcmV0dXJuIHdlYlNlcnZpY2VzUGFyc2VyOwotICB9Ci0gIAotICBwdWJsaWMgSVN0YXR1cyB2YWxpZGF0ZVNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBvYmplY3RTZWxlY3Rpb24pCi0gIHsKLSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotICAKLSAgcHVibGljIElQcm9qZWN0IGdldFByb2plY3QoKQotICB7Ci0JU3RyaW5nIHdzZGxVUkk7Ci0KLQlpZiAodHJlZSAhPSBudWxsKQotICAgICAgIHdzZGxVUkkgPSB0cmVlLmdldFdzZGxVUkkoKTsKLQllbHNlCi0JCXdzZGxVUkkgPSB3c2RsVVJJXzsKLQkKLSAgICBpZiAod3NkbFVSSSAhPSBudWxsKQotICAgIHsKLSAgICAgIElQcm9qZWN0IHAgPSBnZXRQcm9qZWN0RnJvbVVSSSh3c2RsVVJJKTsKLSAgICAgIGlmIChwIT1udWxsICYmIHAuZXhpc3RzKCkpCi0gICAgICAgIHJldHVybiBwOwotICAgICAgCi0gICAgICBTdHJpbmcgd3NSZWxQYXRoID0gd3NkbFVSSV87Ci0gICAgICBJUmVzb3VyY2Ugd3NSZXMgPSBSZXNvdXJjZVV0aWxzLmZpbmRSZXNvdXJjZSh3c1JlbFBhdGgpOwotICAgICAgaWYgKHdzUmVzIT1udWxsICYmIHdzUmVzIGluc3RhbmNlb2YgSUZpbGUpCi0gICAgICB7Ci0gICAgICAgIElQcm9qZWN0IHAyID0gKChJRmlsZSl3c1JlcykuZ2V0UHJvamVjdCgpOwotICAgICAgICByZXR1cm4gcDI7Ci0gICAgICB9Ci0gICAgICAKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q29tcG9uZW50TmFtZSgpCi0gIHsKLQkgCi0gICAgU3RyaW5nIHdzZGxVUkk7Ci0gICAgaWYgKHRyZWUgIT0gbnVsbCkKLSAgICAJd3NkbFVSSSA9IHRyZWUuZ2V0V3NkbFVSSSgpOwotICAgIGVsc2UgCi0gICAgCXdzZGxVUkkgPSB3c2RsVVJJXzsKLSAgICAKLSAgICBpZiAod3NkbFVSSSAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyBjbmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVVJJKHdzZGxVUkkpOwotICAgICAgaWYgKGNuYW1lIT1udWxsICYmIGNuYW1lLmxlbmd0aCgpPjApCi0gICAgICAgIHJldHVybiBjbmFtZTsKLSAgICAgIAotICAgICAgU3RyaW5nIHdzUmVsUGF0aCA9IHdzZGxVUklfOwotICAgICAgSVJlc291cmNlIHdzUmVzID0gUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2Uod3NSZWxQYXRoKTsKLSAgICAgIGlmICh3c1JlcyE9bnVsbCAmJiB3c1JlcyBpbnN0YW5jZW9mIElGaWxlKQotICAgICAgewotICAgICAgICBJVmlydHVhbENvbXBvbmVudCBjb21wID0gUmVzb3VyY2VVdGlscy5nZXRDb21wb25lbnRPZih3c1Jlcyk7Ci0gICAgICAgIGlmIChjb21wIT1udWxsKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIGNvbXAuZ2V0TmFtZSgpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHByaXZhdGUgSVByb2plY3QgZ2V0UHJvamVjdEZyb21VUkkoU3RyaW5nIHVyaSkKLSAgewotICAgIElXb3Jrc3BhY2VSb290IHJvb3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotICAgIFN0cmluZyB3a3NwY1Jvb3RMb2MgPSByb290LmdldExvY2F0aW9uKCkudG9TdHJpbmcoKTsKLSAgICBpbnQgaWR4ID0gdXJpLmluZGV4T2Yod2tzcGNSb290TG9jKTsKLSAgICBpZiAoaWR4ICE9IC0xKSAKLSAgICB7Ci0gICAgICBTdHJpbmcgcmVsUGF0aCA9IHVyaS5zdWJzdHJpbmcod2tzcGNSb290TG9jLmxlbmd0aCgpK2lkeCk7Ci0gICAgICBJUmVzb3VyY2UgcmVzID0gcm9vdC5maW5kTWVtYmVyKG5ldyBQYXRoKHJlbFBhdGgpKTsKLSAgICAgIGlmIChyZXMgaW5zdGFuY2VvZiBJRmlsZSkKLSAgICAgIHsKLSAgICAgICAgSVByb2plY3QgcCA9ICgoSUZpbGUpcmVzKS5nZXRQcm9qZWN0KCk7Ci0gICAgICAgIHJldHVybiBwOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0Q29tcG9uZW50TmFtZUZyb21VUkkoU3RyaW5nIHVyaSkKLSAgewotICAgIElXb3Jrc3BhY2VSb290IHJvb3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotICAgIFN0cmluZyB3a3NwY1Jvb3RMb2MgPSByb290LmdldExvY2F0aW9uKCkudG9TdHJpbmcoKTsKLSAgICBpbnQgaWR4ID0gdXJpLmluZGV4T2Yod2tzcGNSb290TG9jKTsKLSAgICBpZiAoaWR4ICE9IC0xKSAKLSAgICB7Ci0gICAgICBTdHJpbmcgcmVsUGF0aCA9IHVyaS5zdWJzdHJpbmcod2tzcGNSb290TG9jLmxlbmd0aCgpK2lkeCk7Ci0gICAgICBJUmVzb3VyY2UgcmVzID0gcm9vdC5maW5kTWVtYmVyKG5ldyBQYXRoKHJlbFBhdGgpKTsKLSAgICAgIGlmIChyZXMgaW5zdGFuY2VvZiBJRmlsZSkKLSAgICAgIHsKLSAgICAgICAgSVZpcnR1YWxDb21wb25lbnQgY29tcCA9IFJlc291cmNlVXRpbHMuZ2V0Q29tcG9uZW50T2YocmVzKTsKLSAgICAgICAgaWYgKGNvbXAhPW51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gY29tcC5nZXROYW1lKCk7Ci0gICAgICAgIH0gICAgICAgIAotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsgICAgCi0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0T2JqZWN0U2VsZWN0aW9uRGlzcGxheWFibGVTdHJpbmcoKSAKLSAgewkKLSAgICBpZiAodHJlZSAhPSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiBVbml2ZXJzYWxQYXRoVHJhbnNmb3JtZXIudG9QYXRoKHRyZWUuZ2V0V3NkbFVSSSgpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLQkgICAgcmV0dXJuIFVuaXZlcnNhbFBhdGhUcmFuc2Zvcm1lci50b1BhdGgod3NkbFVSSV8pOwotICAgIH0KLQl9Ci0gIAotICBwdWJsaWMgUG9pbnQgZ2V0V2lkZ2V0U2l6ZSgpIHsJCi0JICByZXR1cm4gbmV3IFBvaW50KCA1ODAsIDU4MCk7ICAKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGUoU3RyaW5nIHMpIHsKLQkgIFN0cmluZyB3c1VSSSA9IHM7Ci0JICAgIAotCSAgICBpZiAod3NVUkkuaW5kZXhPZignOicpIDwgMCkKLQkgICAgewotCSAgICAgIElGaWxlIGZpbGUgPSB1cmkySUZpbGUod3NVUkkpOwotCSAgICAgIGlmIChmaWxlICE9IG51bGwpCi0JICAgICAgICB3c1VSSSA9IGlGaWxlMlVSSShmaWxlKTsKLQkgICAgfQotCSAgICBpZiAod3NVUkkgIT0gbnVsbCAmJiB3c1VSSS5pbmRleE9mKCc6JykgPj0gMCAmJiB3ZWJTZXJ2aWNlc1BhcnNlci5nZXRXZWJTZXJ2aWNlRW50aXR5QnlVUkkod3NVUkkpID09IG51bGwpCi0JICAgIHsKLQkgICAgICBUaW1lZFdTRExTZWxlY3Rpb25Db25kaXRpb25Db21tYW5kIGNtZCA9IG5ldyBUaW1lZFdTRExTZWxlY3Rpb25Db25kaXRpb25Db21tYW5kKCk7Ci0JICAgICAgY21kLnNldFdlYlNlcnZpY2VzUGFyc2VyKHdlYlNlcnZpY2VzUGFyc2VyKTsKLQkgICAgICBjbWQuc2V0V2ViU2VydmljZVVSSSh3c1VSSSk7Ci0JICAgICAgY21kLmV4ZWN1dGUobnVsbCwgbnVsbCk7Ci0JICAgIH0KLQkJCi0JICAgIC8vIHByaW1lIHdpZGdldCBiYXNlZCBvbiB0aGUgc3RyaW5nCi0JICAgIHdzZGxVUklfID0gd3NVUkk7Ci0JICAgIGlmICh0cmVlICE9IG51bGwpCi0JICAgIAl0cmVlLnNldFdlYlNlcnZpY2VVUkkod3NVUkkpOwotCSAgICAKLQkgICAgV2ViU2VydmljZUVudGl0eSBlbnRpdHkgPSB3ZWJTZXJ2aWNlc1BhcnNlci5nZXRXZWJTZXJ2aWNlRW50aXR5QnlVUkkod3NVUkkpOwotCSAgICBpZiAoZW50aXR5ICE9IG51bGwgJiYgZW50aXR5LmdldFR5cGUoKSA9PSBXZWJTZXJ2aWNlRW50aXR5LlRZUEVfV1NETCkKLSAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQkgICAgZWxzZQotCSAgICAJcmV0dXJuIGZhbHNlOwotCSAgICAKLSAgfSAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvV1NETFNlbGVjdGlvbldyYXBwZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9vYmplY3QvV1NETFNlbGVjdGlvbldyYXBwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBhNmMxOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvb2JqZWN0L1dTRExTZWxlY3Rpb25XcmFwcGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBpcyBhIHZlcnkgc2ltcGxlIHdyYXBwZXIgdGhhdCBiaW5kcyBhIFdTREwgcGFyc2VyIHdpdGgKLSAqIGEgd3NkbFNlbGVjdGlvbiBvYmplY3QuCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMU2VsZWN0aW9uV3JhcHBlciAKLXsKLSAgcHVibGljIFdlYlNlcnZpY2VzUGFyc2VyICAgIHBhcnNlcjsKLSAgcHVibGljIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHdzZGxTZWxlY3Rpb247Ci0gIAotICBwdWJsaWMgV1NETFNlbGVjdGlvbldyYXBwZXIoIFdlYlNlcnZpY2VzUGFyc2VyICAgIHBhcnNlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24gKQotICB7Ci0gICAgdGhpcy5wYXJzZXIgICAgICAgID0gcGFyc2VyOwotICAgIHRoaXMud3NkbFNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3J1bnRpbWUvQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvcnVudGltZS9DbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmYxNjk2Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvcnVudGltZS9DbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1ODkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbi4gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA1MjMgICAxNTgyMzAga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5ydW50aW1lOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS5GYWNldFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU2VydmVyVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbi5GYWNldE1hdGNoZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbi5GYWNldFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uUmVxdWlyZWRGYWNldFZlcnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbW9uLkRlZmF1bHRpbmdVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbW9uLlZhbGlkYXRpb25VdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucGx1Z2luLldlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50U2VydmVyUnVudGltZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnByZWZlcmVuY2VzLlByb2plY3RUb3BvbG9neUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuQ2xpZW50UnVudGltZURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuRmFjZXRNYXRjaENhY2hlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LlJ1bnRpbWVEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LlNlcnZpY2VSdW50aW1lRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydC5XZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZGF0YS5UeXBlUnVudGltZVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0LlJlc291cmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5zZWxlY3Rpb24uU2VsZWN0aW9uTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5zZWxlY3Rpb24uU2VsZWN0aW9uTGlzdENob2ljZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5JRmFjZXRlZFByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuUHJvamVjdEZhY2V0c01hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklSdW50aW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JUnVudGltZVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXJUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlc1BhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlQ2xpZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlUnVudGltZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5TaW1wbGVDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VDbGllbnRJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VTY2VuYXJpbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlU3RhdGU7Ci0KLXB1YmxpYyBjbGFzcyBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgoteyAgIAotICBwcml2YXRlIFN0cmluZyBERUZBVUxUX0NMSUVOVF9FQVJfUFJPSkVDVF9FWFQgPSAiRUFSIjsKLSAgcHJpdmF0ZSBUeXBlUnVudGltZVNlcnZlciAgICBjbGllbnRJZHNfOwotICBwcml2YXRlIGJvb2xlYW4gY2xpZW50SWRzRml4ZWRfID0gZmFsc2U7Ci0gIHByaXZhdGUgU3RyaW5nIGNsaWVudFJ1bnRpbWVJZF87Ci0gIHByaXZhdGUgU3RyaW5nIGNsaWVudFByb2plY3ROYW1lXzsKLSAgcHJpdmF0ZSBTdHJpbmcgY2xpZW50RWFyUHJvamVjdE5hbWVfOwotICBwcm90ZWN0ZWQgYm9vbGVhbiBjbGllbnROZWVkRUFSXyA9IHRydWU7Ci0gIHByaXZhdGUgU3RyaW5nIGNsaWVudENvbXBvbmVudFR5cGVfOwotICBwcml2YXRlIEZhY2V0TWF0Y2hlciBjbGllbnRGYWNldE1hdGNoZXJfOwotICAKLSAgcHJpdmF0ZSBJQ29udGV4dCAgICAgICAgICBjb250ZXh0XzsKLSAgcHJpdmF0ZSBJU2VsZWN0aW9uICAgICAgICBzZWxlY3Rpb25fOwotICBwcml2YXRlIElXZWJTZXJ2aWNlQ2xpZW50IHdlYlNlcnZpY2VDbGllbnRfOwotICBwcml2YXRlIFJlc291cmNlQ29udGV4dCAgIHJlc291cmNlQ29udGV4dF87Ci0gIHByaXZhdGUgYm9vbGVhbiAgICAgICAgICAgdGVzdF87Ci0gIAotICAvL0Egbm90ZSBvbiBpbml0aWFsIHByb2plY3RzIC4uLgotICAvL1RoZSBkaWZmZXJlbmNlIGJldHdlZW4gY2xpZW50SW5pdGlhbFByb2plY3RfIGFuZCBpbml0aWFsUHJvamVjdF8gaXMgdGhhdAotICAvL2NsaWVudEluaXRpYWxQcm9qZWN0XyBjb21lcyBmcm9tIHRoZSBPYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kIHdoaWxlIGluaXRpYWxQcm9qZWN0XwotICAvL2NvbWVzIGZyb20gU2VsZWN0aW9uQ29tbWFuZCAoaS5lLiBpdCBpcyB0aGUgcHJvamVjdCBjb250YWluaW5nIHRoZSB0aGluZyB0aGF0IHdhcyBzZWxlY3RlZCBiZWZvcmUgCi0gIC8vdGhlIHdpemFyZCB3YXMgbGF1bmNoZWQpLiBJbiB0aGUgZGVmYXVsdGluZyBhbGdvcml0aG0sIGNsaWVudEluaXRpYWxQcm9qZWN0XyB3aWxsIAotICAvL2JlIGdpdmVuIGZpcnN0IHByaW9yaXR5LiBJZiwgaG93ZXZlciwgaXQgaXMgZGVlbWVkIHRoYXQgY2xpZW50SW5pdGlhbFByb2plY3RfIGlzIG5vdCBhIHZhbGlkIHByb2plY3QgCi0gIC8vYmVjYXVzZSBpdCBjb250YWlucyB0aGUgSjJFRSBXZWIgc2VydmljZSBmb3Igd2hpY2ggd2UgYXJlIHRyeWluZyB0byBjcmVhdGUgYSBjbGllbnQsIGluaXRpYWxQcm9qZWN0XwotICAvL3dpbGwgYmUgZ2l2ZW4gc2Vjb25kIHByaW9yaXR5LgotICBwcml2YXRlIElQcm9qZWN0IGluaXRpYWxQcm9qZWN0XzsgLy9UaGlzIGlzIHRoZSBwcm9qZWN0IGNvbnRhaW5pbmcgdGhlIHNlbGVjdGlvbiBwcmlvciB0byB0aGUgd2l6YXJkIGJlaW5nIGxhdW5jaGVkLgotICBwcml2YXRlIElQcm9qZWN0IGNsaWVudEluaXRpYWxQcm9qZWN0XzsgLy9UaGlzIGlzIHRoZSBwcm9qZWN0IGNvbnRhaW5pbmcgdGhlIG9iamVjdCBzZWxlY3Rpb24gZnJvbSBwYWdlIDIuCi0gIHByaXZhdGUgU3RyaW5nIHdzZGxVUklfOwotICBwcml2YXRlIFdlYlNlcnZpY2VzUGFyc2VyIHBhcnNlcl87ICAKLQotICBwdWJsaWMgQ2xpZW50UnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudFR5cGVSdW50aW1lU2VydmVyKCBUeXBlUnVudGltZVNlcnZlciBpZHMgKQotICB7Ci0gICAgY2xpZW50SWRzXyA9IGlkczsKLSAgfQotICAKLSAgcHVibGljIFR5cGVSdW50aW1lU2VydmVyIGdldENsaWVudFR5cGVSdW50aW1lU2VydmVyKCkKLSAgewotICAgIHJldHVybiBjbGllbnRJZHNfOyAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50SWRzRml4ZWQoYm9vbGVhbiBiKQotICB7Ci0gICAgY2xpZW50SWRzRml4ZWRfID0gYjsgIAotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldENsaWVudFJ1bnRpbWVJZCgpCi0gIHsKLSAgICByZXR1cm4gY2xpZW50UnVudGltZUlkXzsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRDbGllbnRQcm9qZWN0TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gY2xpZW50UHJvamVjdE5hbWVfOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldENsaWVudEVhclByb2plY3ROYW1lKCkKLSAgewotICAgIHJldHVybiBjbGllbnRFYXJQcm9qZWN0TmFtZV87Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudEVhclByb2plY3ROYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gICAgY2xpZW50RWFyUHJvamVjdE5hbWVfID0gbmFtZTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRDbGllbnRDb21wb25lbnRUeXBlKCkKLSAgewotICAgIHJldHVybiAgY2xpZW50Q29tcG9uZW50VHlwZV87Ci0gIH0KLSAgCi0gIHB1YmxpYyBJV2ViU2VydmljZUNsaWVudCBnZXRXZWJTZXJ2aWNlKCkKLSAgewotICAgIHJldHVybiB3ZWJTZXJ2aWNlQ2xpZW50XzsgIAotICB9Ci0gICAgCi0gIHB1YmxpYyBJQ29udGV4dCBnZXRDb250ZXh0KCkKLSAgewotICAgIHJldHVybiBjb250ZXh0XzsKLSAgfSAgCi0gIAotICBwdWJsaWMgSVNlbGVjdGlvbiBnZXRTZWxlY3Rpb24oKQotICB7Ci0gICAgcmV0dXJuIHNlbGVjdGlvbl87ICAgIAotICB9Ci0gIAotICAvKioKLSAgICogRGVmYXVsdHMgdGhlIGZvbGxvd2luZyBiaXRzIG9mIGluZm9ybWF0aW9uIGluIHRoZSBmb2xsb3dpbmcgb3JkZXI6Ci0gICAqIGNsaWVudFJ1bnRpbWVJZF8gOiB0aGUgY2xpZW50UnVudGltZUlkLiBNdXN0IGJlIGRlZmF1bHRlZCB0byBub24tZW1wdHkgU3RyaW5nLgotICAgKiBjbGllbnRJZHNfLnJ1bnRpbWVJZF86IHRoZSBXZWIgc2VydmljZSBydW50aW1lIGlkLiBNdXN0IGJlIGRlZmF1bHRlZCB0byBub24tZW1wdHkgU3RyaW5nLgotICAgKiBjbGllbnRQcm9qZWN0TmFtZV8gOiB0aGUgbmFtZSBvZiB0aGUgY2xpZW50IHByb2plY3QuIE11c3QgYmUgbm9uLWVtcHR5LiBNYXkgb3IgbWF5IG5vdCBleGlzdC4KLSAgICogY2xpZW50Q29tcG9uZW50VHlwZV86IHRoZSBpZCBvZiB0aGUgY2xpZW50IHByb2plY3QgdGVtcGxhdGUuIE11c3QgYmUgZW1wdHkgaWYgdGhlIGNsaWVudAotICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3QgZXhpc3RzLiBNdXN0IGJlIG5vbi1lbXB0eSBvZiB0aGUgY2xpZW50IHByb2plY3QgZG9lcyBub3QgZXhpc3QuCi0gICAqIGNsaWVudElkc18uc2VydmVySWRfOiB0aGUgc2VydmVyIHR5cGUgaWQuIE1heSBiZSBhbiBlbXB0eSBTdHJpbmcgaWYgdGhlIGRlZmF1bHRlZCBXZWIgc2VydmljZSBydW50aW1lCi0gICAqICAgICAgICAgICAgICAgICAgICAgICAgZG9lcyBub3QgcmVxdWlyZSBhIHNlcnZlci4KLSAgICogY2xpZW50SWRzXy5zZXJ2ZXJJbnN0YW5jZUlkXzogdGhlIHNlcnZlciBpZC4gTWF5IGJlIG51bGwgb3IgYW4gZW1wdHkgU3RyaW5nLgotICAgKiBjbGllbnROZWVkRUFSXzogdHJ1ZSBpZiBhbiBFQVIgaXMgbmVlZGVkLiBGYWxzZSBvdGhlcndpc2UuCi0gICAqIGNsaWVudEVhclByb2plY3ROYW1lXzogdGhlIGNsaWVudCBFQVIgcHJvamVjdC4gTXVzdCBiZSBlbXB0eSBpZiB0aGUgY2xpZW50TmVlZEVBUl8gaXMgZmFsc2UuCi0gICAqICAgICAgICAgICAgICAgICAgICAgICAgIE11c3QgYmUgbm9uLWVtcHR5IGlmIHRoZSBjbGllbnROZWVkRUFSXyBpcyB0cnVlLgotICAgKiB3ZWJTZXJ2aWNlQ2xpZW50XyA6IHRoZSBJV2ViU2VydmljZUNsaWVudCBiYXNlZCBvbiB0aGUgY2FsY3VsYXRlZCBkZWZhdWx0cy4gTXVzdCBiZSBub24tbnVsbCBmb3IgIk5leHQiCi0gICAqICAgICAgICAgICAgICAgICAgICAgYnV0dG9uIHRvIGJlIGVuYWJsZWQgb24gdGhlIHBhZ2UgZm9sbG93aW5nIHRoaXMgY29tbWFuZC4KLSAgICogY29udGV4dF8gOiBhbiBJQ29udGV4dC4gTXVzdCBiZSBub24tbnVsbCBmb3IgIk5leHQiIGJ1dHRvbiB0byBiZSBlbmFibGVkIG9uIHRoZSBwYWdlIGZvbGxvd2luZyB0aGlzIGNvbW1hbmQuICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgKi8gIAotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUpCi0gIHsKLQotICAgIElFbnZpcm9ubWVudCBlbnYgPSBnZXRFbnZpcm9ubWVudCgpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgCi0gICAgICAvLyoqU3RlcCAxKiogRGVmYXVsdCB0aGUgV2ViIHNlcnZpY2UgcnVudGltZS4KLSAgICAJCi0gICAgICAvL2NsaWVudElkc0ZpeGVkXyBpcyBzZXQgdG8gdHJ1ZSBmb3IgdGhlIEFudCBzY2VuYXJpby4gSXQncyBhbHdheXMgZmFsc2UgZm9yIHRoZSB3aXphcmQKLSAgICAgIC8vc2NlbmFyaW9zLgotICAgICAgaWYgKGNsaWVudElkc0ZpeGVkXyAmJiAoY2xpZW50UHJvamVjdE5hbWVfID09IG51bGwpKQotICAgICAgewotICAgICAgICAvLyBTZXQgdGhlIGNsaWVudFJ1bnRpbWUgYmFzZWQgb24gdGhlIHJ1bnRpbWUsIHNlcnZlciwgYW5kIGluaXRpYWwKLSAgICAgICAgLy8gc2VsZWN0aW9uLgotICAgICAgICBEZWZhdWx0UnVudGltZVRyaXBsZXQgZHJ0ID0gZ2V0RGVmYXVsdENsaWVudFJ1bnRpbWVGb3JGaXhlZFJ1bnRpbWVBbmRTZXJ2ZXIoY2xpZW50SW5pdGlhbFByb2plY3RfKTsKLSAgICAgICAgY2xpZW50RmFjZXRNYXRjaGVyXyA9IGRydC5nZXRGYWNldE1hdGNoZXIoKTsKLSAgICAgICAgY2xpZW50UHJvamVjdE5hbWVfID0gZHJ0LmdldFByb2plY3ROYW1lKCk7Ci0gICAgICAgIGNsaWVudFJ1bnRpbWVJZF8gPSBkcnQuZ2V0UnVudGltZUlkKCk7ICAgICAgICAKLSAgICAgIH0gCi0gICAgICBlbHNlICAgICAgCi0gICAgICB7CQotICAgICAgICBWYWxpZGF0aW9uVXRpbHMgdnUgPSBuZXcgVmFsaWRhdGlvblV0aWxzKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBTZXQgdGhlIHJ1bnRpbWUgYmFzZWQgb24gdGhlIHByb2plY3QgY29udGFpbmluZyB0aGUgb2JqZWN0IHNlbGVjdGlvbi9pbml0aWFsIHNlbGVjdGlvbi4KLSAgICAgICAgRGVmYXVsdFJ1bnRpbWVUcmlwbGV0IGRydCA9IG51bGw7Ci0gICAgICAgIAotICAgICAgICBpZiAoIXZ1LmlzUHJvamVjdFNlcnZpY2VQcm9qZWN0KGNsaWVudEluaXRpYWxQcm9qZWN0Xywgd3NkbFVSSV8sIHBhcnNlcl8pICYmICFjbGllbnRJZHNGaXhlZF8pCi0gICAgICAgIHsKLSAgICAgICAgICAvL0lmIGNsaWVudEludGlhbFByb2plY3RfIGRvZXMgbm90IGNvbnRhaW4gdGhlIEoyRUUgV2ViIHNlcnZpY2UsIGNob29zZSBhIGNsaWVudFJ1bnRpbWUgYmFzZWQgb24gaXQuCi0gICAgICAgICAgZHJ0ID0gZ2V0RGVmYXVsdFJ1bnRpbWUoY2xpZW50SW5pdGlhbFByb2plY3RfLCBjbGllbnRJZHNfLmdldFR5cGVJZCgpLCB0cnVlKTsKLSAgICAgICAgICBjbGllbnRGYWNldE1hdGNoZXJfID0gZHJ0LmdldEZhY2V0TWF0Y2hlcigpOwotICAgICAgICAgIGNsaWVudFByb2plY3ROYW1lXyA9IGRydC5nZXRQcm9qZWN0TmFtZSgpOyAKLSAgICAgICAgICBjbGllbnRSdW50aW1lSWRfID0gZHJ0LmdldFJ1bnRpbWVJZCgpOyAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAvL2NsaWVudEluaXRpYWxQcm9qZWN0XyBjb250YWlucyB0aGUgSjJFRSBXZWIgc2VydmljZSBzbyBkb24ndCB1c2UgaXQuCi0gICAgICAgICAgLy9UcnkgdXNpbmcgdGhlIGluaXRhbFByb2plY3RfIGluc3RlYWQuCi0gICAgICAgICAgaWYgKCF2dS5pc1Byb2plY3RTZXJ2aWNlUHJvamVjdChpbml0aWFsUHJvamVjdF8sIHdzZGxVUklfLCBwYXJzZXJfKSAmJiAhY2xpZW50SWRzRml4ZWRfKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vSWYgaW50aWFsUHJvamVjdF8gZG9lcyBub3QgY29udGFpbiB0aGUgSjJFRSBXZWIgc2VydmljZSwgY2hvb3NlIGEgY2xpZW50UnVudGltZSBiYXNlZCBvbiBpdC4KLSAgICAgICAgICAgIGRydCA9IGdldERlZmF1bHRSdW50aW1lKGluaXRpYWxQcm9qZWN0XywgY2xpZW50SWRzXy5nZXRUeXBlSWQoKSwgdHJ1ZSk7Ci0gICAgICAgICAgICBjbGllbnRGYWNldE1hdGNoZXJfID0gZHJ0LmdldEZhY2V0TWF0Y2hlcigpOwotICAgICAgICAgICAgY2xpZW50UHJvamVjdE5hbWVfID0gZHJ0LmdldFByb2plY3ROYW1lKCk7Ci0gICAgICAgICAgICBjbGllbnRSdW50aW1lSWRfID0gZHJ0LmdldFJ1bnRpbWVJZCgpOyAgICAgICAgICAgIAotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgLy9Cb3RoIGNsaWVudEludGlhbFByb2plY3RfIGFuZCBpbml0aWFsUHJvamVjdF8gY29udGFpbiB0aGUgSjJFRSBXZWIgc2VydmljZQotICAgICAgICAgICAgLy9hbmQgY2Fubm90IGJlIHVzZWQgdG8gaW5mbHVlbmNlIGNsaWVudFJ1bnRpbWUgZGVmYXVsdGluZy4KLSAgICAgICAgICAgIC8vQ2hvb3NlIGEgY2xpZW50UnVudGltZSBidXQgZG9uJ3QgY2hvb3NlIGNsaWVudEluaXRpYWxQcm9qZWN0XwotICAgICAgICAgICAgLy9hcyB0aGUgY2xpZW50UHJvamVjdC4KLSAgICAgICAgICAgIGRydCA9IGdldERlZmF1bHRSdW50aW1lKG51bGwsIGNsaWVudElkc18uZ2V0VHlwZUlkKCksIHRydWUpOwotICAgICAgICAgICAgY2xpZW50UnVudGltZUlkXyA9IGRydC5nZXRSdW50aW1lSWQoKTsgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy9TZXQgdGhlIFdlYiBzZXJ2aWNlIHJ1bnRpbWUgaWQgZnJvbSB0aGUgY2xpZW50UnVudGltZQotICAgICAgICBjbGllbnRJZHNfLnNldFJ1bnRpbWVJZChXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRDbGllbnRSdW50aW1lRGVzY3JpcHRvckJ5SWQoY2xpZW50UnVudGltZUlkXykuZ2V0UnVudGltZSgpCi0gICAgICAgICAgICAuZ2V0SWQoKSk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIC8vKipTdGVwIDIqKiBEZWZhdWx0IHRoZSBjbGllbnQgcHJvamVjdCBpZiBpdCB3YXMgbm90IGFscmVhZHkgZGVmYXVsdGVkIAotICAgICAgLy9hcyBwYXJ0IG9mIGRlZmF1bHRpbmcgdGhlIFdlYiBzZXJ2aWNlIHJ1bnRpbWUuCi0gICAgICBpZiAoY2xpZW50UHJvamVjdE5hbWVfID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIC8vIFByb2plY3QgbmFtZSBkaWQgbm90IGdldCBzZXQgd2hlbiB0aGUgcnVudGltZSB3YXMgc2V0LCBzbyBzZXQgaXQgbm93Ci0gICAgICAgIGNsaWVudFByb2plY3ROYW1lXyA9IGdldERlZmF1bHRDbGllbnRQcm9qZWN0TmFtZSgpOwotICAgICAgfQotCi0gICAgICAvLyoqU3RlcCAzKiogRGVmYXVsdCB0aGUgY2xpZW50IHByb2plY3QgdHlwZS4gICAgICAKLSAgICAgIElQcm9qZWN0IGNsaWVudFByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoY2xpZW50UHJvamVjdE5hbWVfKTsKLSAgICAgIGlmICghY2xpZW50UHJvamVjdC5leGlzdHMoKSkKLSAgICAgIHsKLSAgICAgICAgLy8gU2V0IHRoZSBwcm9qZWN0IHRlbXBsYXRlCi0gICAgICAgIGNsaWVudENvbXBvbmVudFR5cGVfID0gZ2V0RGVmYXVsdENsaWVudFByb2plY3RUZW1wbGF0ZSgpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvL1NldCBpdCB0byBhbiBlbXB0eSBTdHJpbmcKLSAgICAgICAgY2xpZW50Q29tcG9uZW50VHlwZV8gPSAiIjsKLSAgICAgIH0KLQotCi0gICAgICAvLyoqU3RlcCA0KiogRGVmYXVsdCB0aGUgY2xpZW50IHNlcnZlciBpZiB0aGlzIGlzIG5vdCBhbiBBbnQgc2NlbmFyaW8uCi0gICAgICBpZiAoIWNsaWVudElkc0ZpeGVkXykKLSAgICAgIHsKLSAgICAgICAgSVN0YXR1cyBzZXJ2ZXJTdGF0dXMgPSBzZXRDbGllbnREZWZhdWx0U2VydmVyKCk7Ci0gICAgICAgIGlmIChzZXJ2ZXJTdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpCi0gICAgICAgIHsKLSAgICAgICAgICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHNlcnZlclN0YXR1cyk7Ci0gICAgICAgICAgcmV0dXJuIHNlcnZlclN0YXR1czsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgCi0gICAgICAvLyoqU3RlcCA1KiogRGVmYXVsdCBjbGllbnROZWVkRUFSIGFuZCBjbGllbnQgRUFSIGlmIGFuIEVBUiBpcyBuZWVkZWQKLSAgICAgIHNldERlZmF1bHRDbGllbnRFYXJQcm9qZWN0KCk7ICAgICAgCi0gICAgICAKLSAgICAgIAotICAgICAgLy8qKlN0ZXAgNioqIENhbGN1bGF0ZSBkZWZhdWx0IElXZWJTZXJ2aWNlQ2xpZW50LiBUaGlzIGlzIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQKLSAgICAgIC8vIE5leHQgaXMgZW5hYmxlZCBvbiB0aGUgcGFnZSBmb2xsb3dpbmcgdGhpcyBjb21tYW5kLgotICAgICAgc2V0RGVmYXVsdHNGb3JFeHRlbnNpb24oZW52KTsKLQotICAgICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgICAKLSAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBDYXRjaCBhbGwgRXhjZXB0aW9ucyBpbiBvcmRlciB0byBnaXZlIHNvbWUgZmVlZGJhY2sgdG8gdGhlIHVzZXIKLSAgICAgIElTdGF0dXMgZXJyb3JTdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX1RBU0tfRVhDRVBURUQsCi0gICAgICAgICAgbmV3IFN0cmluZ1tdIHsgZS5nZXRNZXNzYWdlKCkgfSksIGUpOwotICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihlcnJvclN0YXR1cyk7Ci0gICAgICByZXR1cm4gZXJyb3JTdGF0dXM7Ci0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgc2V0RGVmYXVsdENsaWVudEVhclByb2plY3QoKQotICB7ICAgIAotICAgIC8vRG9uJ3QgbmVlZCBhbiBlYXIgaWYgdGhpcyBpcyBhIEphdmEgcHJvamVjdCwgb3IgaWYgdGhlIHNlbGVjdGVkIHRlbXBsYXRlIGlzIGpzdC51dGlsaXR5Ci0gICAgSVByb2plY3QgY2xpZW50UHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChjbGllbnRQcm9qZWN0TmFtZV8pOwotICAgIGlmIChjbGllbnRQcm9qZWN0LmV4aXN0cygpKQotICAgIHsKLSAgICAgIGNsaWVudE5lZWRFQVJfID0gIShGYWNldFV0aWxzLmlzSmF2YVByb2plY3QoY2xpZW50UHJvamVjdCkpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgY2xpZW50TmVlZEVBUl8gPSAhKEZhY2V0VXRpbHMuaXNVdGlsaXR5VGVtcGxhdGUoY2xpZW50Q29tcG9uZW50VHlwZV8pKTsgIAotICAgIH0KLSAgICAKLSAgICAvL0lmIGNsaWVudE5lZWRFQVJfIGlzIHN0aWxsIHRydWUsIGl0IG1lYW5zIHRoYXQgd2UncmUgbm90IGRlYWxpbmcgd2l0aCBhIEphdmEgcHJvamVjdAotICAgIC8vb3IgSmF2YSBwcm9qZWN0IHR5cGUuIENoZWNrIHRoZSBzZXJ2ZXIuCi0gICAgaWYgKGNsaWVudE5lZWRFQVJfKQotICAgIHsKLSAgICAgIC8vIERldGVybWluZSBpZiBhbiBlYXIgc2VsZWN0aW9uIGlzIG5lZWRlZCBiYXNlZCBvbiB0aGUgc2VydmVyIHR5cGUuCi0KLSAgICAgIFN0cmluZyBzZXJ2ZXJJZCA9IGNsaWVudElkc18uZ2V0U2VydmVySWQoKTsKLSAgICAgIGlmIChzZXJ2ZXJJZCAhPSBudWxsKQotICAgICAgewotICAgICAgICAvLyBVc2UgdGhlIHNlcnZlciB0eXBlCi0gICAgICAgIFN0cmluZyBzZXJ2ZXJUYXJnZXRJZCA9IFNlcnZlclV0aWxzLmdldFJ1bnRpbWVUYXJnZXRJZEZyb21GYWN0b3J5SWQoc2VydmVySWQpOwotICAgICAgICBpZiAoc2VydmVyVGFyZ2V0SWQgIT0gbnVsbCAmJiBzZXJ2ZXJUYXJnZXRJZC5sZW5ndGgoKSA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIVNlcnZlclV0aWxzLmlzVGFyZ2V0VmFsaWRGb3JFQVIoc2VydmVyVGFyZ2V0SWQsICIxMyIpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIERlZmF1bHQgdGhlIEVBUiBzZWxlY3Rpb24gdG8gYmUgZW1wdHkKLSAgICAgICAgICAgIGNsaWVudE5lZWRFQVJfID0gZmFsc2U7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9IGVsc2UgeyAgLy8gc2VydmVySWQgPT0gbnVsbCwgYXNzdW1lIHRoYXQgaXQgZG9lcyBub3QgbmVlZCBFQVIKLSAgICAJICBjbGllbnROZWVkRUFSXyA9IGZhbHNlOwotICAgIAkgIAotICAgICAgfQotICAgIH0KLSAgICAKLSAgICBpZiAoY2xpZW50TmVlZEVBUl8pCi0gICAgewotICAgIAljbGllbnRFYXJQcm9qZWN0TmFtZV8gPSBEZWZhdWx0aW5nVXRpbHMuZ2V0RGVmYXVsdEVBUlByb2plY3ROYW1lKGNsaWVudFByb2plY3ROYW1lXyk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBjbGllbnRFYXJQcm9qZWN0TmFtZV8gPSAiIjsKLSAgICB9ICAgCi0gIH0KLSAgCi0gIHByaXZhdGUgSVN0YXR1cyBzZXRDbGllbnREZWZhdWx0U2VydmVyKCkKLSAgewotICAgIC8vQ2hvb3NlIGFuIGV4aXN0aW5nIHNlcnZlciB0aGUgbW9kdWxlIGlzIGFscmVhZHkgYXNzb2NpYXRlZCB3aXRoIGlmIHBvc3NpYmxlCi0gICAgSVByb2plY3QgY2xpZW50UHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChjbGllbnRQcm9qZWN0TmFtZV8pOwotICAgIElTZXJ2ZXJbXSBjb25maWd1cmVkU2VydmVycyA9IFNlcnZlclV0aWwuZ2V0U2VydmVyc0J5TW9kdWxlKFNlcnZlclV0aWxzLmdldE1vZHVsZShjbGllbnRQcm9qZWN0KSwgbnVsbCk7Ci0gICAgCi0gICAgaWYgKGNvbmZpZ3VyZWRTZXJ2ZXJzIT1udWxsICYmIGNvbmZpZ3VyZWRTZXJ2ZXJzLmxlbmd0aD4wICYmIGNvbmZpZ3VyZWRTZXJ2ZXJzWzBdLmdldFNlcnZlclR5cGUoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIGNsaWVudElkc18uc2V0U2VydmVySWQoY29uZmlndXJlZFNlcnZlcnNbMF0uZ2V0U2VydmVyVHlwZSgpLmdldElkKCkpOwotICAgICAgY2xpZW50SWRzXy5zZXRTZXJ2ZXJJbnN0YW5jZUlkKGNvbmZpZ3VyZWRTZXJ2ZXJzWzBdLmdldElkKCkpOwotICAgICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7ICAgICAgICAgICAgCQotICAgIH0KLSAgICAKLSAgICAvL0lmIHRoZSBwcm9qZWN0IGV4aXN0cywgY2hvb3NlIGEgc3VpdGFibGUgc2VydmVyIG9yIHNlcnZlciB0eXBlIGJhc2VkIG9uIHRoZSBleGlzdGluZyBwcm9qZWN0J3MgcnVudGltZSBvciBmYWNldHMKLSAgICBpZiAoY2xpZW50UHJvamVjdC5leGlzdHMoKSkKLSAgICB7Ci0gICAgICBJU2VydmVyIHNlcnZlciA9IGdldFNlcnZlckZyb21Qcm9qZWN0KGNsaWVudFByb2plY3ROYW1lXywgY2xpZW50RmFjZXRNYXRjaGVyXyk7Ci0gICAgICBpZiAoc2VydmVyICE9IG51bGwgJiYgc2VydmVyLmdldFNlcnZlclR5cGUoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBjbGllbnRJZHNfLnNldFNlcnZlcklkKHNlcnZlci5nZXRTZXJ2ZXJUeXBlKCkuZ2V0SWQoKSk7Ci0gICAgICAgIGNsaWVudElkc18uc2V0U2VydmVySW5zdGFuY2VJZChzZXJ2ZXIuZ2V0SWQoKSk7Ci0gICAgICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBJU2VydmVyVHlwZSBzZXJ2ZXJUeXBlID0gZ2V0U2VydmVyVHlwZUZyb21Qcm9qZWN0KGNsaWVudFByb2plY3ROYW1lXywgY2xpZW50RmFjZXRNYXRjaGVyXyk7Ci0gICAgICAgIGlmIChzZXJ2ZXJUeXBlICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBjbGllbnRJZHNfLnNldFNlcnZlcklkKHNlcnZlclR5cGUuZ2V0SWQoKSk7Ci0gICAgICAgICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvL0hhdmVuJ3QgcGlja2VkIGEgc2VydmVyL3NlcnZlciB0eXBlIG9uIHRoZSBiYXNpcyBvZiB0aGUgcHJvamVjdC4gUGljayBhIHNlcnZlci9zZXJ2ZXIgdHlwZQotICAgIC8vdGhhdCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIGNsaWVudFJ1bnRpbWVJZC4KLSAgICBJU2VydmVyIHNlcnZlciA9IGdldFNlcnZlckZyb21DbGllbnRSdW50aW1lSWQoKTsKLSAgICBpZiAoc2VydmVyIT1udWxsICYmIHNlcnZlci5nZXRTZXJ2ZXJUeXBlKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBjbGllbnRJZHNfLnNldFNlcnZlcklkKHNlcnZlci5nZXRTZXJ2ZXJUeXBlKCkuZ2V0SWQoKSk7Ci0gICAgICBjbGllbnRJZHNfLnNldFNlcnZlckluc3RhbmNlSWQoc2VydmVyLmdldElkKCkpOwotICAgICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgfQotICAgIAotICAgIElTZXJ2ZXJUeXBlIHNlcnZlclR5cGUgPSBnZXRTZXJ2ZXJUeXBlRnJvbUNsaWVudFJ1bnRpbWVJZCgpOwotICAgIGlmIChzZXJ2ZXJUeXBlICE9IG51bGwpCi0gICAgewotICAgICAgY2xpZW50SWRzXy5zZXRTZXJ2ZXJJZChzZXJ2ZXJUeXBlLmdldElkKCkpOwotICAgICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgfSAgICAKLSAgICAKLSAgICAvLyBObyBzdWl0YWJsZSBzZXJ2ZXIgd2FzIGZvdW5kLiBQb3B1cCBhbiBlcnJvciBpZiB0aGUgZGVmYXVsdCBXZWIgc2VydmljZQotICAgIC8vIHJ1bnRpbWUgcmVxdWlyZXMgYSBzZXJ2ZXIuCi0gICAgUnVudGltZURlc2NyaXB0b3IgcnVudGltZURlc2NyaXB0b3IgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRSdW50aW1lQnlJZChjbGllbnRJZHNfLmdldFJ1bnRpbWVJZCgpKTsKLSAgICBpZiAocnVudGltZURlc2NyaXB0b3IuZ2V0U2VydmVyUmVxdWlyZWQoKSkKLSAgICB7Ci0gICAgICBTdHJpbmcgcnVudGltZUxhYmVsID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0UnVudGltZUxhYmVsQnlJZChjbGllbnRJZHNfLmdldFJ1bnRpbWVJZCgpKTsKLSAgICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19FUlJPUl9OT19TRVJWRVJfUlVOVElNRSwgbmV3IFN0cmluZ1tdIHsKLSAgICAgICAgICBydW50aW1lTGFiZWx9KSk7Ci0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotICAKLSAgcHJpdmF0ZSBJU2VydmVyIGdldFNlcnZlckZyb21DbGllbnRSdW50aW1lSWQoKQotICB7Ci0gICAgSVNlcnZlcltdIHNlcnZlcnMgPSBTZXJ2ZXJDb3JlLmdldFNlcnZlcnMoKTsKLSAgICBpZiAoc2VydmVycyAhPSBudWxsICYmIHNlcnZlcnMubGVuZ3RoID4gMCkgewotICAgIAkKLSAgICAgICAgUGVyc2lzdGVudFNlcnZlclJ1bnRpbWVDb250ZXh0IGNvbnRleHQgPSBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFNlcnZlclJ1bnRpbWVDb250ZXh0KCk7Ci0gICAgICAgIFN0cmluZyBwcmVmZXJyZWRTZXJ2ZXJGYWN0b3J5SWQgPSBjb250ZXh0LmdldFNlcnZlckZhY3RvcnlJZCgpOwotICAgICAgICAKLSAgICAgICAgLy9JZiBhIHNlcnZlciBvZiB0aGUgcHJlZmVycmVkIHNlcnZlciB0eXBlIGlzIHByZXNlbnQsIGNoZWNrIHRoYXQgb25lIGZpcnN0Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgc2VydmVycy5sZW5ndGg7IGorKykKLSAgICAgICAgewotICAgICAgICAgIGlmIChzZXJ2ZXJzW2pdICE9IG51bGwgJiYgc2VydmVyc1tqXS5nZXRTZXJ2ZXJUeXBlKCkgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0JICAgICAgICAgIFN0cmluZyBzZXJ2ZXJGYWN0b3J5SWQgPSBzZXJ2ZXJzW2pdLmdldFNlcnZlclR5cGUoKS5nZXRJZCgpOwotCSAgICAgICAgICBpZiAoc2VydmVyRmFjdG9yeUlkID09IHByZWZlcnJlZFNlcnZlckZhY3RvcnlJZCkKLQkgICAgICAgICAgewotCSAgICAgICAgICAgIGlmIChXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5kb2VzQ2xpZW50UnVudGltZVN1cHBvcnRTZXJ2ZXIoY2xpZW50UnVudGltZUlkXywgc2VydmVyRmFjdG9yeUlkKSkKLQkgICAgICAgICAgICB7Ci0JICAgICAgICAgICAgICByZXR1cm4gc2VydmVyc1tqXTsKLQkgICAgICAgICAgICB9Ci0JICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vQSBzZXJ2ZXIgb2YgdGhlIHByZWZlcnJlZCBzZXJ2ZXIgdHlwZSBjb3VsZCBub3QgYmUgZm91bmQgb3IgZGlkIG5vdCBtYXRjaC4gQ2hlY2sgYWxsIHRoZSBleGlzdGluZyBzZXJ2ZXJzLiAgICAKLSAgICAJCi0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNlcnZlcnMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgCWlmIChzZXJ2ZXJzW2ldICE9IG51bGwgJiYgc2VydmVyc1tpXS5nZXRTZXJ2ZXJUeXBlKCkgIT0gbnVsbCkKLSAgICAJewotCSAgICAgICAgU3RyaW5nIHNlcnZlckZhY3RvcnlJZCA9IHNlcnZlcnNbaV0uZ2V0U2VydmVyVHlwZSgpLmdldElkKCk7Ci0JICAgICAgICBpZiAoV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZG9lc0NsaWVudFJ1bnRpbWVTdXBwb3J0U2VydmVyKGNsaWVudFJ1bnRpbWVJZF8sIHNlcnZlckZhY3RvcnlJZCkpCi0JICAgICAgICB7Ci0JICAgICAgICAgIHJldHVybiBzZXJ2ZXJzW2ldOwotCSAgICAgICAgfQotCSAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7ICAgIAotICB9Ci0gIAotICBwcml2YXRlIElTZXJ2ZXJUeXBlIGdldFNlcnZlclR5cGVGcm9tQ2xpZW50UnVudGltZUlkKCkKLSAgewotICAgIFN0cmluZ1tdIHNlcnZlclR5cGVzID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2VydmVyRmFjdG9yeUlkc0J5Q2xpZW50UnVudGltZShjbGllbnRSdW50aW1lSWRfKTsKLSAgICBpZiAoc2VydmVyVHlwZXMhPW51bGwgJiYgc2VydmVyVHlwZXMubGVuZ3RoPjApCi0gICAgewotICAgICAgLy9SZXR1cm4gdGhlIHByZWZlcnJlZCBvbmUgaWYgaXQgaXMgaW4gdGhlIGxpc3QKLSAgICAgIFBlcnNpc3RlbnRTZXJ2ZXJSdW50aW1lQ29udGV4dCBjb250ZXh0ID0gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRTZXJ2ZXJSdW50aW1lQ29udGV4dCgpOwotICAgICAgU3RyaW5nIHByZWZlcnJlZFNlcnZlckZhY3RvcnlJZCA9IGNvbnRleHQuZ2V0U2VydmVyRmFjdG9yeUlkKCk7Ci0gICAgICBmb3IgKGludCBpPTA7IGk8c2VydmVyVHlwZXMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIGlmIChzZXJ2ZXJUeXBlc1tpXS5lcXVhbHMocHJlZmVycmVkU2VydmVyRmFjdG9yeUlkKSkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBTZXJ2ZXJDb3JlLmZpbmRTZXJ2ZXJUeXBlKHNlcnZlclR5cGVzW2ldKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgCi0gICAgICByZXR1cm4gU2VydmVyQ29yZS5maW5kU2VydmVyVHlwZShzZXJ2ZXJUeXBlc1swXSk7Ci0gICAgfSAgICAKLSAgICAKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgcHJvdGVjdGVkIElTZXJ2ZXIgZ2V0U2VydmVyRnJvbVByb2plY3QoU3RyaW5nIHByb2plY3ROYW1lLCBGYWNldE1hdGNoZXIgZmFjZXRNYXRjaGVyKQotICB7Ci0gICAgSVNlcnZlciBzZXJ2ZXIgPSBudWxsOwotICAgIAotICAgIElQcm9qZWN0IHByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QocHJvamVjdE5hbWUpOwotICAgIElTZXJ2ZXJbXSBzZXJ2ZXJzID0gU2VydmVyQ29yZS5nZXRTZXJ2ZXJzKCk7Ci0gICAgCi0gICAgaWYgKHNlcnZlcnMubGVuZ3RoID4gMCkKLSAgICB7Ci0gICAgICBQZXJzaXN0ZW50U2VydmVyUnVudGltZUNvbnRleHQgY29udGV4dCA9IFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0U2VydmVyUnVudGltZUNvbnRleHQoKTsKLSAgICAgIFN0cmluZyBwcmVmZXJyZWRTZXJ2ZXJGYWN0b3J5SWQgPSBjb250ZXh0LmdldFNlcnZlckZhY3RvcnlJZCgpOwotICAgICAgICAKLSAgICAgIC8vIEdldCB0aGUgcnVudGltZS4KLSAgICAgIG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnJ1bnRpbWUuSVJ1bnRpbWUgZlJ1bnRpbWUgPSBudWxsOwotICAgICAgSUZhY2V0ZWRQcm9qZWN0IGZQcm9qZWN0ID0gbnVsbDsKLQotICAgICAgaWYgKHByb2plY3QgIT0gbnVsbCAmJiBwcm9qZWN0LmV4aXN0cygpKQotICAgICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIGZQcm9qZWN0ID0gUHJvamVjdEZhY2V0c01hbmFnZXIuY3JlYXRlKHByb2plY3QpOwotICAgICAgICAgIGlmIChmUHJvamVjdCAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgCSAgZlJ1bnRpbWUgPSBmUHJvamVjdC5nZXRQcmltYXJ5UnVudGltZSgpOwotICAgICAgICAgIH0KLSAgICAgICAgfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkKLSAgICAgICAgewotCi0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgaWYgKGZSdW50aW1lICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIC8vIEdldCBhbiBleGlzdGluZyBzZXJ2ZXIgdGhhdCBoYXMgdGhlIHNhbWUgcnVudGltZS4KLSAgICAgICAgSVNlcnZlciBmaXJzdE1hdGNoaW5nU2VydmVyID0gbnVsbDsgICAgCSAgCi0gICAgICAgIElSdW50aW1lIHNSdW50aW1lID0gRmFjZXRVdGlsLmdldFJ1bnRpbWUoZlJ1bnRpbWUpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNlcnZlcnMubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBJU2VydmVyIHRoaXNTZXJ2ZXIgPSBzZXJ2ZXJzW2ldOwotICAgICAgICAgIElSdW50aW1lIHRoaXNTZXJ2ZXJSdW50aW1lID0gdGhpc1NlcnZlci5nZXRSdW50aW1lKCk7Ci0gICAgICAgICAgaWYgKCB0aGlzU2VydmVyUnVudGltZSAhPSBudWxsICYmIHNSdW50aW1lICE9IG51bGwgJiYgdGhpc1NlcnZlclJ1bnRpbWUuZ2V0SWQoKS5lcXVhbHMoc1J1bnRpbWUuZ2V0SWQoKSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKGZpcnN0TWF0Y2hpbmdTZXJ2ZXI9PW51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGZpcnN0TWF0Y2hpbmdTZXJ2ZXIgPSB0aGlzU2VydmVyOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh0aGlzU2VydmVyICE9IG51bGwgJiYgdGhpc1NlcnZlci5nZXRTZXJ2ZXJUeXBlKCkgIT0gbnVsbCAmJiB0aGlzU2VydmVyLmdldFNlcnZlclR5cGUoKS5nZXRJZCgpLmVxdWFscyhwcmVmZXJyZWRTZXJ2ZXJGYWN0b3J5SWQpKQotICAgICAgICAgICAgewotICAgICAgICAJICAKLSAgICAgICAgICAgICAgc2VydmVyID0gdGhpc1NlcnZlcjsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgIC8vSWYgYSBzZXJ2ZXIgb2YgdGhlIHByZWZlcnJlZCBzZXJ2ZXIgdHlwZSB3YXMgbm90IGZvdW5kIGJ1dAotICAgICAgICAvL3RoZXJlIHdhcyBhIHNlcnZlciB0aGF0IG1hdGNoZWQsIHJldHVybiB0aGF0IG9uZS4KLSAgICAgICAgaWYgKHNlcnZlciA9PSBudWxsICYmIGZpcnN0TWF0Y2hpbmdTZXJ2ZXIgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHNlcnZlciA9IGZpcnN0TWF0Y2hpbmdTZXJ2ZXI7Ci0gICAgICAgIH0gICAgICAgIAotICAgICAgfQotCi0gICAgICAvLyBJZiBhbiBleGlzdGluZyBzZXJ2ZXIgY291bGQgbm90IGJlIGNob3NlbiBvbiB0aGUgYmFzaXMgb2YgdGhlIHByb2plY3QncwotICAgICAgLy8gcnVudGltZSwKLSAgICAgIC8vIHRyeSB0byBmaW5kIGFuIGV4aXN0aW5nIHNlcnZlciB1c2luZyB0aGUgcHJvamVjdCdzIGZhY2V0cyBhbmQgdGhlCi0gICAgICAvLyBmYWNldHNUb0FkZC4KLSAgICAgIGlmIChzZXJ2ZXIgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgaWYgKHByb2plY3QhPW51bGwgJiYgcHJvamVjdC5leGlzdHMoKSkKLSAgICAgICAgewotICAgICAgICAgIFNldCBmYWNldHMgPSBGYWNldFV0aWxzLmdldEZhY2V0c0ZvclByb2plY3QocHJvamVjdC5nZXROYW1lKCkpOwotICAgICAgICAgIGlmIChmYWNldHMgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBTZXQgZmFjZXRzQ2xvbmUgPSBuZXcgSGFzaFNldCgpOwotICAgICAgICAgICAgZmFjZXRzQ2xvbmUuYWRkQWxsKGZhY2V0cyk7ICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoZmFjZXRNYXRjaGVyLmdldEZhY2V0c1RvQWRkKCkgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSXRlcmF0b3IgaXRyID0gZmFjZXRNYXRjaGVyLmdldEZhY2V0c1RvQWRkKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgICAgd2hpbGUgKGl0ci5oYXNOZXh0KCkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmYWNldHNDbG9uZS5hZGQoaXRyLm5leHQoKSk7ICAKLSAgICAgICAgICAgICAgfSAgICAgICAgICAgIAotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2VydmVyID0gZ2V0U2VydmVyRnJvbUZhY2V0cyhmYWNldHNDbG9uZSk7ICAgICAgICAgICAgCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBzZXJ2ZXI7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBJU2VydmVyIGdldFNlcnZlckZyb21GYWNldHMoU2V0IGZhY2V0cykKLSAgewotCSAgICBJU2VydmVyIHNlcnZlciA9IG51bGw7Ci0JICAgIFNldCBydW50aW1lcyA9IEZhY2V0VXRpbHMuZ2V0UnVudGltZXMobmV3IFNldFtde2ZhY2V0c30pOwotCSAgICBJdGVyYXRvciBpdHIgPSBydW50aW1lcy5pdGVyYXRvcigpOwotCSAgICBJU2VydmVyW10gc2VydmVycyA9IFNlcnZlckNvcmUuZ2V0U2VydmVycygpOwotCSAgICBQZXJzaXN0ZW50U2VydmVyUnVudGltZUNvbnRleHQgY29udGV4dCA9IFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0U2VydmVyUnVudGltZUNvbnRleHQoKTsKLQkgICAgU3RyaW5nIHByZWZlcnJlZFNlcnZlckZhY3RvcnlJZCA9IGNvbnRleHQuZ2V0U2VydmVyRmFjdG9yeUlkKCk7Ci0JICAgIAotCSAgICAvL0lmIG9uZSBvZiB0aGUgc2VydmVycyBpcyBvZiB0aGUgcHJlZmVycmVkIHR5cGUsIGFuZCBpdHMgcnVudGltZQotCSAgICAvL2lzIGluIHRoZSBzZXQgb2YgbWF0Y2hpbmcgcnVudGltZXMsIHJldHVybiB0aGF0IHNlcnZlci4KLQkgICAgZm9yIChpbnQgaj0wOyBqPHNlcnZlcnMubGVuZ3RoOyBqKyspICAgICAgCi0JICAgIHsKLQkgICAgICBJU2VydmVyIHRoaXNTZXJ2ZXIgPSBzZXJ2ZXJzW2pdOwotCSAgICAgIGlmICh0aGlzU2VydmVyICE9IG51bGwgJiYgdGhpc1NlcnZlci5nZXRTZXJ2ZXJUeXBlKCkgIT0gbnVsbCAmJiB0aGlzU2VydmVyLmdldFJ1bnRpbWUoKSAhPSBudWxsICYmIHRoaXNTZXJ2ZXIuZ2V0U2VydmVyVHlwZSgpLmdldElkKCkuZXF1YWxzKHByZWZlcnJlZFNlcnZlckZhY3RvcnlJZCkpCi0JICAgICAgewotCSAgICAJSVJ1bnRpbWUgdGhpc1NlcnZlclJ1bnRpbWUgPSB0aGlzU2VydmVyLmdldFJ1bnRpbWUoKTsKLQkgICAgICAgIC8vQ2hlY2sgdG8gc2VlIGlmIGl0IG1hdGNoZXMgYW55IG9mIHRoZSBydW50aW1lcy4KLQkgICAgICAgIEl0ZXJhdG9yIHJ1bnRpbWVzSXRyID0gcnVudGltZXMuaXRlcmF0b3IoKTsKLQkgICAgICAgIHdoaWxlKHJ1bnRpbWVzSXRyLmhhc05leHQoKSkKLQkgICAgICAgIHsKLQkgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUucnVudGltZS5JUnVudGltZSBmUnVudGltZSA9IChvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5ydW50aW1lLklSdW50aW1lKXJ1bnRpbWVzSXRyLm5leHQoKTsKLQkgICAgICAgICAgSVJ1bnRpbWUgc1J1bnRpbWUgPSBGYWNldFV0aWwuZ2V0UnVudGltZShmUnVudGltZSk7Ci0JICAgICAgICAgIGlmIChzUnVudGltZSAhPSBudWxsICYmIHRoaXNTZXJ2ZXJSdW50aW1lLmdldElkKCkuZXF1YWxzKHNSdW50aW1lLmdldElkKCkpKQotCSAgICAgICAgICB7Ci0JICAgICAgICAgICAgc2VydmVyID0gdGhpc1NlcnZlcjsKLQkgICAgICAgICAgfSAgICAgICAgICAKLQkgICAgICAgIH0KLQkgICAgICB9ICAgICAgICAgICAgCi0JICAgIH0KLQkgICAgCi0JICAgIGlmIChzZXJ2ZXIgPT0gbnVsbCkKLQkgICAgewotCSAgICAgIG91dGVyOiB3aGlsZSAoaXRyLmhhc05leHQoKSkKLQkgICAgICB7Ci0JICAgICAgICBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5ydW50aW1lLklSdW50aW1lIGZSdW50aW1lID0gKG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnJ1bnRpbWUuSVJ1bnRpbWUpIGl0cgotCSAgICAgICAgICAgIC5uZXh0KCk7Ci0JICAgICAgICBJUnVudGltZSBzUnVudGltZSA9IEZhY2V0VXRpbC5nZXRSdW50aW1lKGZSdW50aW1lKTsKLQkgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VydmVycy5sZW5ndGg7IGkrKykKLQkgICAgICAgIHsKLQkgICAgICAgICAgSVNlcnZlciB0aGlzU2VydmVyID0gc2VydmVyc1tpXTsKLQkgICAgICAgICAgSVJ1bnRpbWUgdGhpc1NlcnZlclJ1bnRpbWUgPSB0aGlzU2VydmVyLmdldFJ1bnRpbWUoKTsKLQkgICAgICAgICAgaWYgKHRoaXNTZXJ2ZXJSdW50aW1lICE9IG51bGwgJiYgc1J1bnRpbWUgIT0gbnVsbCAmJiB0aGlzU2VydmVyUnVudGltZS5nZXRJZCgpLmVxdWFscyhzUnVudGltZS5nZXRJZCgpKSkKLQkgICAgICAgICAgewotCSAgICAgICAgICAgIHNlcnZlciA9IHRoaXNTZXJ2ZXI7Ci0JICAgICAgICAgICAgYnJlYWsgb3V0ZXI7Ci0JICAgICAgICAgIH0KLQkgICAgICAgIH0KLQkgICAgICB9Ci0JICAgIH0KLQotCSAgICByZXR1cm4gc2VydmVyOwotCi0gIH0KLSAgCi0gIHByb3RlY3RlZCBJU2VydmVyVHlwZSBnZXRTZXJ2ZXJUeXBlRnJvbVByb2plY3QoU3RyaW5nIHByb2plY3ROYW1lLCBGYWNldE1hdGNoZXIgZmFjZXRNYXRjaGVyKQotICB7Ci0JICAgIElTZXJ2ZXJUeXBlIHNlcnZlclR5cGUgPSBudWxsOwotCSAgICBQZXJzaXN0ZW50U2VydmVyUnVudGltZUNvbnRleHQgY29udGV4dCA9IFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0U2VydmVyUnVudGltZUNvbnRleHQoKTsKLQkgICAgU3RyaW5nIHByZWZlcnJlZFNlcnZlckZhY3RvcnlJZCA9IGNvbnRleHQuZ2V0U2VydmVyRmFjdG9yeUlkKCk7Ci0JICAgIAotCSAgICBJUHJvamVjdCBwcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLQkgICAgSVNlcnZlclR5cGVbXSBzZXJ2ZXJUeXBlcyA9IFNlcnZlckNvcmUuZ2V0U2VydmVyVHlwZXMoKTsKLQkgICAgCi0JICAgIC8vR2V0IHRoZSBydW50aW1lLgotCSAgICBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5ydW50aW1lLklSdW50aW1lIGZSdW50aW1lID0gbnVsbDsKLQkgICAgSUZhY2V0ZWRQcm9qZWN0IGZQcm9qZWN0ID0gbnVsbDsKLQkgICAgCi0JICAgIGlmIChwcm9qZWN0ICE9IG51bGwgJiYgcHJvamVjdC5leGlzdHMoKSkKLQkgICAgewotCSAgICAgIHRyeQotCSAgICAgIHsKLQkgICAgICAgIGZQcm9qZWN0ID0gUHJvamVjdEZhY2V0c01hbmFnZXIuY3JlYXRlKHByb2plY3QpOwotCSAgICAgICAgaWYgKGZQcm9qZWN0ICE9IG51bGwpCi0JICAgICAgICB7Ci0JICAgICAgICAJZlJ1bnRpbWUgPSBmUHJvamVjdC5nZXRQcmltYXJ5UnVudGltZSgpOwotCSAgICAgICAgfQotCSAgICAgIH0gY2F0Y2ggKENvcmVFeGNlcHRpb24gY2UpCi0JICAgICAgewotCSAgICAgICAgCi0JICAgICAgfQotCSAgICB9Ci0JICAgIAotCSAgICBpZiAoZlJ1bnRpbWUgIT0gbnVsbCkKLQkgICAgewotCSAgICAgIC8vR2V0IGEgc2VydmVyIHR5cGUgdGhhdCBoYXMgdGhlIHNhbWUgcnVudGltZSB0eXBlLgotCSAgICAgIElSdW50aW1lIHNSdW50aW1lID0gRmFjZXRVdGlsLmdldFJ1bnRpbWUoZlJ1bnRpbWUpOyAKLQkgICAgICBpZiAoc1J1bnRpbWUgIT0gbnVsbCkKLQkgICAgICB7Ci0JCSAgICAgIElSdW50aW1lVHlwZSBzUnVudGltZVR5cGUgPSBzUnVudGltZS5nZXRSdW50aW1lVHlwZSgpOwotCQkgICAgICBJU2VydmVyVHlwZSBmaXJzdE1hdGNoaW5nU2VydmVyVHlwZSA9IG51bGw7Ci0JCSAgICAgIGZvciAoaW50IGk9MDsgaTxzZXJ2ZXJUeXBlcy5sZW5ndGg7IGkrKykKLQkJICAgICAgewotCQkgICAgICAgIElTZXJ2ZXJUeXBlIHRoaXNTZXJ2ZXJUeXBlID0gc2VydmVyVHlwZXNbaV07Ci0JCSAgICAgICAgSVJ1bnRpbWVUeXBlIHRoaXNTZXJ2ZXJSdW50aW1lVHlwZSA9IHRoaXNTZXJ2ZXJUeXBlLmdldFJ1bnRpbWVUeXBlKCk7Ci0JCSAgICAgICAgaWYgKHNSdW50aW1lVHlwZSAhPSBudWxsICYmIHRoaXNTZXJ2ZXJSdW50aW1lVHlwZSAhPSBudWxsICYmIHRoaXNTZXJ2ZXJSdW50aW1lVHlwZS5nZXRJZCgpLmVxdWFscyhzUnVudGltZVR5cGUuZ2V0SWQoKSkpCi0JCSAgICAgICAgewotCQkgICAgICAgICAgaWYgKGZpcnN0TWF0Y2hpbmdTZXJ2ZXJUeXBlID09IG51bGwpCi0JCSAgICAgICAgICB7Ci0JCSAgICAgICAgICAgIGZpcnN0TWF0Y2hpbmdTZXJ2ZXJUeXBlID0gdGhpc1NlcnZlclR5cGU7Ci0JCSAgICAgICAgICB9Ci0JCSAgICAgICAgICBpZiAodGhpc1NlcnZlclR5cGUuZ2V0SWQoKS5lcXVhbHMocHJlZmVycmVkU2VydmVyRmFjdG9yeUlkKSkKLQkJICAgICAgICAgIHsKLQkJICAgICAgICAgICAgc2VydmVyVHlwZSA9IHRoaXNTZXJ2ZXJUeXBlOwotCQkgICAgICAgICAgICBicmVhazsKLQkJICAgICAgICAgIH0KLQkJICAgICAgICB9ICAgICAKLQkJICAgICAgfQotCQkgICAgICAKLQkJICAgICAgLy9JZiB0aGUgcHJlZmVycmVkIHNlcnZlciB0eXBlIHdhcyBub3QgZm91bmQgYnV0Ci0JCSAgICAgIC8vdGhlcmUgd2FzIGEgc2VydmVyIHR5cGUgdGhhdCBtYXRjaGVkLCByZXR1cm4gdGhhdCBvbmUuICAgICAgICAKLQkJICAgICAgaWYgKHNlcnZlclR5cGUgPT0gbnVsbCAmJiBmaXJzdE1hdGNoaW5nU2VydmVyVHlwZSAhPSBudWxsKQotCQkgICAgICB7ICAgICAgICAKLQkJICAgICAgICBzZXJ2ZXJUeXBlID0gZmlyc3RNYXRjaGluZ1NlcnZlclR5cGU7Ci0JCSAgICAgIH0KLQkgICAgICB9Ci0JICAgIH0KLQotCSAgICAvL0lmIGEgc2VydmVyIHR5cGUgY291bGQgbm90IGJlIGNob3NlbiBvbiB0aGUgYmFzaXMgb2YgdGhlIHByb2plY3QncyBydW50aW1lLAotCSAgICAvL3RyeSB0byBmaW5kIGEgc2VydmVyIHR5cGUgdXNpbmcgdGhlIHByb2plY3QncyBmYWNldHMgYW5kIHRoZSBmYWNldHNUb0FkZC4KLQkgICAgaWYgKHNlcnZlclR5cGUgPT0gbnVsbCkKLQkgICAgewotCSAgICAgIGlmIChwcm9qZWN0ICE9IG51bGwgJiYgcHJvamVjdC5leGlzdHMoKSkKLQkgICAgICB7Ci0JICAgICAgICBTZXQgZmFjZXRzID0gRmFjZXRVdGlscy5nZXRGYWNldHNGb3JQcm9qZWN0KHByb2plY3QuZ2V0TmFtZSgpKTsKLQkgICAgICAgIGlmIChmYWNldHMgIT0gbnVsbCkKLQkgICAgICAgIHsKLQkgICAgICAgICAgU2V0IGZhY2V0c0Nsb25lID0gbmV3IEhhc2hTZXQoKTsKLQkgICAgICAgICAgZmFjZXRzQ2xvbmUuYWRkQWxsKGZhY2V0cyk7ICAgICAgICAgIAotCSAgICAgICAgICBpZiAoZmFjZXRNYXRjaGVyICE9IG51bGwgJiYgZmFjZXRNYXRjaGVyLmdldEZhY2V0c1RvQWRkKCkgIT0gbnVsbCkKLQkgICAgICAgICAgewotCSAgICAgICAgICAgIEl0ZXJhdG9yIGl0ciA9IGZhY2V0TWF0Y2hlci5nZXRGYWNldHNUb0FkZCgpLml0ZXJhdG9yKCk7Ci0JICAgICAgICAgICAgd2hpbGUgKGl0ci5oYXNOZXh0KCkpCi0JICAgICAgICAgICAgewotCSAgICAgICAgICAgICAgZmFjZXRzQ2xvbmUuYWRkKGl0ci5uZXh0KCkpOyAgCi0JICAgICAgICAgICAgfSAgICAgICAgICAgIAotCSAgICAgICAgICB9Ci0JICAgICAgICAgIHNlcnZlclR5cGUgPSBnZXRTZXJ2ZXJUeXBlRnJvbUZhY2V0cyhmYWNldHNDbG9uZSk7ICAgICAgICAgIAotCSAgICAgICAgfQotCSAgICAgIH0KLQkgICAgfQotCSAgICAKLQkgICAgcmV0dXJuIHNlcnZlclR5cGU7Ci0KLSAgfQotICAKLSAgcHJvdGVjdGVkIElTZXJ2ZXJUeXBlIGdldFNlcnZlclR5cGVGcm9tRmFjZXRzKFNldCBmYWNldHMpCi0gIHsKLQkgICAgSVNlcnZlclR5cGUgc2VydmVyVHlwZSA9IG51bGw7Ci0JICAgIFNldCBydW50aW1lcyA9IEZhY2V0VXRpbHMuZ2V0UnVudGltZXMobmV3IFNldFtde2ZhY2V0c30pOwotCSAgICBJdGVyYXRvciBpdHIgPSBydW50aW1lcy5pdGVyYXRvcigpOwotCSAgICBJU2VydmVyVHlwZVtdIHNlcnZlclR5cGVzID0gU2VydmVyQ29yZS5nZXRTZXJ2ZXJUeXBlcygpOwotCSAgICBQZXJzaXN0ZW50U2VydmVyUnVudGltZUNvbnRleHQgY29udGV4dCA9IFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0U2VydmVyUnVudGltZUNvbnRleHQoKTsKLQkgICAgU3RyaW5nIHByZWZlcnJlZFNlcnZlckZhY3RvcnlJZCA9IGNvbnRleHQuZ2V0U2VydmVyRmFjdG9yeUlkKCk7ICAgIAotCi0JICAgIC8vSWYgb25lIG9mIHRoZSBzZXJ2ZXIgdHlwZXMgaXMgb2YgdGhlIHByZWZlcnJlZCB0eXBlLCBhbmQgaXRzIHJ1bnRpbWUKLQkgICAgLy9pcyBpbiB0aGUgc2V0IG9mIG1hdGNoaW5nIHJ1bnRpbWVzLCByZXR1cm4gdGhhdCBzZXJ2ZXIgdHlwZS4KLQkgICAgZm9yIChpbnQgaj0wOyBqPHNlcnZlclR5cGVzLmxlbmd0aDsgaisrKSAgICAgIAotCSAgICB7Ci0JICAgICAgSVNlcnZlclR5cGUgdGhpc1NlcnZlclR5cGUgPSBzZXJ2ZXJUeXBlc1tqXTsKLQkgICAgICBJUnVudGltZVR5cGUgdGhpc1NlcnZlclR5cGVSdW50aW1lVHlwZSA9IHRoaXNTZXJ2ZXJUeXBlLmdldFJ1bnRpbWVUeXBlKCk7Ci0JICAgICAgaWYgKHRoaXNTZXJ2ZXJUeXBlUnVudGltZVR5cGUgIT0gbnVsbCAmJiB0aGlzU2VydmVyVHlwZS5nZXRJZCgpLmVxdWFscyhwcmVmZXJyZWRTZXJ2ZXJGYWN0b3J5SWQpKQotCSAgICAgIHsKLQkgICAgICAgIC8vQ2hlY2sgdG8gc2VlIGlmIGl0IG1hdGNoZXMgYW55IG9mIHRoZSBydW50aW1lcy4KLQkgICAgICAgIEl0ZXJhdG9yIHJ1bnRpbWVzSXRyID0gcnVudGltZXMuaXRlcmF0b3IoKTsKLQkgICAgICAgIHdoaWxlKHJ1bnRpbWVzSXRyLmhhc05leHQoKSkKLQkgICAgICAgIHsKLQkgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUucnVudGltZS5JUnVudGltZSBmUnVudGltZSA9IChvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5ydW50aW1lLklSdW50aW1lKXJ1bnRpbWVzSXRyLm5leHQoKTsKLQkgICAgICAgICAgSVJ1bnRpbWUgc1J1bnRpbWUgPSBGYWNldFV0aWwuZ2V0UnVudGltZShmUnVudGltZSk7Ci0JICAgICAgICAgIGlmIChzUnVudGltZSAhPSBudWxsKQotCSAgICAgICAgICB7Ci0JICAgICAgICAJICBJUnVudGltZVR5cGUgc1J1bnRpbWVUeXBlID0gc1J1bnRpbWUuZ2V0UnVudGltZVR5cGUoKTsKLQkJICAgICAgICAgIGlmIChzUnVudGltZVR5cGUgIT0gbnVsbCAmJiB0aGlzU2VydmVyVHlwZVJ1bnRpbWVUeXBlLmdldElkKCkuZXF1YWxzKHNSdW50aW1lVHlwZS5nZXRJZCgpKSkKLQkJICAgICAgICAgIHsKLQkJICAgICAgICAgICAgc2VydmVyVHlwZSA9IHRoaXNTZXJ2ZXJUeXBlOwotCQkgICAgICAgICAgfSAgICAgICAgICAKLQkgICAgICAgICAgfQotCSAgICAgICAgfQotCSAgICAgIH0gICAgICAgICAgICAKLQkgICAgfQotCSAgICAKLQkgICAgCi0JICAgIGlmIChzZXJ2ZXJUeXBlID09IG51bGwpCi0JICAgIHsKLQkgICAgICBvdXRlcjogd2hpbGUgKGl0ci5oYXNOZXh0KCkpCi0JICAgICAgewotCSAgICAgICAgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUucnVudGltZS5JUnVudGltZSBmUnVudGltZSA9IChvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5ydW50aW1lLklSdW50aW1lKSBpdHIKLQkgICAgICAgICAgICAubmV4dCgpOwotCSAgICAgICAgSVJ1bnRpbWUgc1J1bnRpbWUgPSBGYWNldFV0aWwuZ2V0UnVudGltZShmUnVudGltZSk7Ci0JICAgICAgICBpZiAoc1J1bnRpbWUgIT0gbnVsbCkKLQkgICAgICAgIHsKLQkJICAgICAgICBJUnVudGltZVR5cGUgc1J1bnRpbWVUeXBlID0gc1J1bnRpbWUuZ2V0UnVudGltZVR5cGUoKTsKLQkJICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNlcnZlclR5cGVzLmxlbmd0aDsgaSsrKQotCQkgICAgICAgIHsKLQkJICAgICAgICAgIElTZXJ2ZXJUeXBlIHRoaXNTZXJ2ZXJUeXBlID0gc2VydmVyVHlwZXNbaV07Ci0JCSAgICAgICAgICBpZiAodGhpc1NlcnZlclR5cGUgIT0gbnVsbCkKLQkJICAgICAgICAgIHsKLQkJCSAgICAgICAgICBJUnVudGltZVR5cGUgdGhpc1NlcnZlclR5cGVSdW50aW1lVHlwZSA9IHRoaXNTZXJ2ZXJUeXBlLmdldFJ1bnRpbWVUeXBlKCk7Ci0JCQkgICAgICAgICAgaWYgKHNSdW50aW1lVHlwZSAhPSBudWxsICYmIHRoaXNTZXJ2ZXJUeXBlUnVudGltZVR5cGUgIT0gbnVsbCAmJiB0aGlzU2VydmVyVHlwZVJ1bnRpbWVUeXBlLmdldElkKCkuZXF1YWxzKHNSdW50aW1lVHlwZS5nZXRJZCgpKSkKLQkJCSAgICAgICAgICB7Ci0JCQkgICAgICAgICAgICBzZXJ2ZXJUeXBlID0gdGhpc1NlcnZlclR5cGU7Ci0JCQkgICAgICAgICAgICBicmVhayBvdXRlcjsKLQkJCSAgICAgICAgICB9Ci0JCSAgICAgICAgICB9Ci0JCSAgICAgICAgfQotCSAgICAgICAgfQotCSAgICAgIH0KLQkgICAgfQotCi0JICAgIHJldHVybiBzZXJ2ZXJUeXBlOwotCi0gIH0gIAotICAKLSAgcHJvdGVjdGVkIElTZXJ2ZXIgZ2V0U2VydmVyRnJvbVByb2plY3RUeXBlKFN0cmluZyB0ZW1wbGF0ZUlkLCBGYWNldE1hdGNoZXIgZmFjZXRNYXRjaGVyKQotICB7Ci0gICAgSVNlcnZlciBzZXJ2ZXIgPSBudWxsOwotICAgIFNldCBmYWNldHMgPSBGYWNldFV0aWxzLmdldEluaXRpYWxGYWNldFZlcnNpb25zRnJvbVRlbXBsYXRlKHRlbXBsYXRlSWQpOwotICAgIGlmIChmYWNldE1hdGNoZXIuZ2V0RmFjZXRzVG9BZGQoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ciA9IGZhY2V0TWF0Y2hlci5nZXRGYWNldHNUb0FkZCgpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXRyLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgZmFjZXRzLmFkZChpdHIubmV4dCgpKTsgIAotICAgICAgfSAgICAgICAgICAgIAotICAgIH0KLSAgICBzZXJ2ZXIgPSBnZXRTZXJ2ZXJGcm9tRmFjZXRzKGZhY2V0cyk7Ci0gICAgcmV0dXJuIHNlcnZlcjsKLSAgfQotICAKLSAgcHJvdGVjdGVkIElTZXJ2ZXJUeXBlIGdldFNlcnZlclR5cGVGcm9tUHJvamVjdFR5cGUoU3RyaW5nIHRlbXBsYXRlSWQsIEZhY2V0TWF0Y2hlciBmYWNldE1hdGNoZXIpCi0gIHsKLSAgICBJU2VydmVyVHlwZSBzZXJ2ZXJUeXBlID0gbnVsbDsKLSAgICBTZXQgZmFjZXRzID0gRmFjZXRVdGlscy5nZXRJbml0aWFsRmFjZXRWZXJzaW9uc0Zyb21UZW1wbGF0ZSh0ZW1wbGF0ZUlkKTsKLSAgICBpZiAoZmFjZXRNYXRjaGVyLmdldEZhY2V0c1RvQWRkKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpdHIgPSBmYWNldE1hdGNoZXIuZ2V0RmFjZXRzVG9BZGQoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0ci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIGZhY2V0cy5hZGQoaXRyLm5leHQoKSk7ICAKLSAgICAgIH0gICAgICAgICAgICAKLSAgICB9Ci0gICAgLy9UT0RPIEluc3RlYWQgb2YgcGFzc2luZyBpbiBhIHNpbmdsZSBzZXQgb2YgZmFjZXRzLCBwYXNzIGluIG11bHRpcGxlIHNldHMsIGlmIHRoZQotICAgIC8vanN0LmphdmEgZmFjZXQgaXMgb25lIG9mIHRoZW0gYW5kIHRoZSBjbGllbnRSdW50aW1lSWQgYWxsb3dzIG5ld2VyLgotICAgIHNlcnZlclR5cGUgPSBnZXRTZXJ2ZXJUeXBlRnJvbUZhY2V0cyhmYWNldHMpOwotICAgIHJldHVybiBzZXJ2ZXJUeXBlOyAgICAKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0RGVmYXVsdENsaWVudFByb2plY3RUZW1wbGF0ZSgpCi0gIHsKLSAgICBTdHJpbmdbXSB0ZW1wbGF0ZXMgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRDbGllbnRQcm9qZWN0VGVtcGxhdGVzKGNsaWVudElkc18uZ2V0VHlwZUlkKCksIGNsaWVudElkc18uZ2V0UnVudGltZUlkKCkpOwotICAgIAotICAgIC8vV2FsayB0aGUgbGlzdCBvZiBjbGllbnQgcHJvamVjdCB0eXBlcyBpbiB0aGUgcHJvamVjdCB0b3BvbG9neSBwcmVmZXJlbmNlCi0gICAgUHJvamVjdFRvcG9sb2d5Q29udGV4dCBwdGM9IFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UHJvamVjdFRvcG9sb2d5Q29udGV4dCgpOwotICAgIFN0cmluZ1tdIHByZWZlcnJlZFRlbXBsYXRlSWRzID0gcHRjLmdldENsaWVudFR5cGVzKCk7Ci0gICAgZm9yIChpbnQgaj0wOyBqPHByZWZlcnJlZFRlbXBsYXRlSWRzLmxlbmd0aDsgaisrKQotICAgIHsKLSAgICAgIGZvciAoaW50IGk9MDsgaTx0ZW1wbGF0ZXMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyB0ZW1wbGF0ZUlkID0gdGVtcGxhdGVzW2ldOwotICAgICAgICBpZiAodGVtcGxhdGVJZC5lcXVhbHMocHJlZmVycmVkVGVtcGxhdGVJZHNbal0pKQotICAgICAgICB7Ci0gICAgICAgICAgCi0gICAgICAgICAgYm9vbGVhbiBtYXRjaGVzID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZG9lc0NsaWVudFJ1bnRpbWVTdXBwb3J0VGVtcGxhdGUoY2xpZW50UnVudGltZUlkXywgdGVtcGxhdGVJZCk7Ci0gICAgICAgICAgaWYgKG1hdGNoZXMpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHRlbXBsYXRlc1tpXTsgICAgICAgICAgICAKLSAgICAgICAgICB9Ci0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgIH0gICAgICAKLSAgICB9Ci0KLSAgICAvL1NpbmNlIHRoZSBwcmVmZXJyZWRUZW1wbGF0ZUlkcyBjb250YWlucyB0aGUgdW5pb24gb2YgYWxsIHByb2plY3QgdHlwZXMgZm9yIGFsbCBjbGllbnQgcnVudGltZXMsIHdlIGFyZQotICAgIC8vZ3VhcmFudGVlZCB0byBoYXZlIHJldHVybmVkIGJ5IG5vdywgc28gdGhlIGNvZGUgYmVsb3cgd2lsbCBuZXZlciBiZSBleGVjdXRlZCB1bmRlciBub3JtYWwKLSAgICAvL2NpcmN1bXN0YW5jZXMuIEp1c3QgcmV0dXJuIHNvbWV0aGluZyB0byBzYXRpc2Z5IHRoZSBjb21waWxlci4gICAgCi0gICAgaWYgKHRlbXBsYXRlcy5sZW5ndGggPiAwKQotICAgICAgcmV0dXJuIHRlbXBsYXRlc1swXTsKLSAgICAKLSAgICByZXR1cm4gIiI7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGdldERlZmF1bHRDbGllbnRQcm9qZWN0TmFtZSgpCi0gIHsKLSAgICBWYWxpZGF0aW9uVXRpbHMgdnUgPSBuZXcgVmFsaWRhdGlvblV0aWxzKCk7Ci0gICAgSVByb2plY3RbXSBwcm9qZWN0cyA9IEZhY2V0VXRpbHMuZ2V0QWxsUHJvamVjdHMoKTsKLSAgICBDbGllbnRSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0Q2xpZW50UnVudGltZURlc2NyaXB0b3JCeUlkKGNsaWVudFJ1bnRpbWVJZF8pOwotICAgIFJlcXVpcmVkRmFjZXRWZXJzaW9uW10gcmZ2cyA9IGRlc2MuZ2V0UmVxdWlyZWRGYWNldFZlcnNpb25zKCk7Ci0gICAgCi0gICAgLy9DaGVjayBlYWNoIHByb2plY3QgYW5kIGl0cyBmYWNldFJ1bnRpbWUgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgY2xpZW50UnVudGltZQotICAgIGZvciAoaW50IGk9MDsgaTxwcm9qZWN0cy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpZiAoIXZ1LmlzUHJvamVjdFNlcnZpY2VQcm9qZWN0KHByb2plY3RzW2ldLCB3c2RsVVJJXywgcGFyc2VyXykpCi0gICAgICB7Ci0gICAgICAgIFNldCBmYWNldFZlcnNpb25zID0gRmFjZXRVdGlscy5nZXRGYWNldHNGb3JQcm9qZWN0KHByb2plY3RzW2ldLmdldE5hbWUoKSk7Ci0gICAgICAgIG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnJ1bnRpbWUuSVJ1bnRpbWUgZlJ1bnRpbWUgPSBudWxsOwotICAgICAgICBTdHJpbmcgZlJ1bnRpbWVOYW1lID0gbnVsbDsKLSAgICAgICAgZlJ1bnRpbWUgPSBGYWNldFV0aWxzLmdldEZhY2V0UnVudGltZUZvclByb2plY3QocHJvamVjdHNbaV0uZ2V0TmFtZSgpKTsKLSAgICAgICAgaWYgKGZSdW50aW1lICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBmUnVudGltZU5hbWUgPSBmUnVudGltZS5nZXROYW1lKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZmFjZXRWZXJzaW9ucyAhPSBudWxsKQotICAgICAgICB7Ci0KLSAgICAgICAgICAvLyBGYWNldE1hdGNoZXIgZm0gPSBGYWNldFV0aWxzLm1hdGNoKHJmdnMsIGZhY2V0VmVyc2lvbnMpOwotICAgICAgICAgIEZhY2V0TWF0Y2hlciBmbSA9IEZhY2V0TWF0Y2hDYWNoZS5nZXRJbnN0YW5jZSgpLmdldE1hdGNoRm9yUHJvamVjdCh0cnVlLCBjbGllbnRSdW50aW1lSWRfLCBwcm9qZWN0c1tpXS5nZXROYW1lKCkpOwotICAgICAgICAgIGJvb2xlYW4gZmFjZXRSdW50aW1lTWF0Y2hlcyA9IHRydWU7Ci0gICAgICAgICAgaWYgKGZSdW50aW1lTmFtZSAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGZhY2V0UnVudGltZU1hdGNoZXMgPSBGYWNldFV0aWxzLmlzRmFjZXRSdW50aW1lU3VwcG9ydGVkKHJmdnMsIGZSdW50aW1lTmFtZSk7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgaWYgKGZtLmlzTWF0Y2goKSAmJiBmYWNldFJ1bnRpbWVNYXRjaGVzKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGNsaWVudEZhY2V0TWF0Y2hlcl8gPSBmbTsKLSAgICAgICAgICAgIHJldHVybiBwcm9qZWN0c1tpXS5nZXROYW1lKCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIC8vTm8gcHJvamVjdCB3YXMgc3VpdGFibGUsIHJldHVybiBhIG5ldyBwcm9qZWN0IG5hbWUKLSAgICByZXR1cm4gUmVzb3VyY2VVdGlscy5nZXREZWZhdWx0V2ViUHJvamVjdE5hbWUoKTsKLSAgICAKLSAgfQotICAKLSAgcHJpdmF0ZSBEZWZhdWx0UnVudGltZVRyaXBsZXQgZ2V0RGVmYXVsdENsaWVudFJ1bnRpbWVGb3JGaXhlZFJ1bnRpbWVBbmRTZXJ2ZXIoSVByb2plY3QgcHJvamVjdCkKLSAgewotICAgIFN0cmluZ1tdIGNsaWVudFJ1bnRpbWVzID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0Q2xpZW50UnVudGltZXNCeVR5cGUoY2xpZW50SWRzXy5nZXRUeXBlSWQoKSk7Ci0gICAgQXJyYXlMaXN0IHZhbGlkQ2xpZW50UnVudGltZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yIChpbnQgaT0wOyBpPGNsaWVudFJ1bnRpbWVzLmxlbmd0aDsgaSsrICkKLSAgICB7Ci0gICAgICBDbGllbnRSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0Q2xpZW50UnVudGltZURlc2NyaXB0b3JCeUlkKGNsaWVudFJ1bnRpbWVzW2ldKTsKLSAgICAgIGlmIChkZXNjLmdldFJ1bnRpbWUoKS5nZXRJZCgpLmVxdWFscyhjbGllbnRJZHNfLmdldFJ1bnRpbWVJZCgpKSkKLSAgICAgIHsKLSAgICAgICAgLy9DaGVjayBpZiB0aGlzIGNsaWVudCBydW50aW1lIHN1cHBvcnRzIHRoZSBzZXJ2ZXIKLSAgICAgICAgaWYgKFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmRvZXNDbGllbnRSdW50aW1lU3VwcG9ydFNlcnZlcihkZXNjLmdldElkKCksIGNsaWVudElkc18uZ2V0U2VydmVySWQoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICB2YWxpZENsaWVudFJ1bnRpbWVzLmFkZChkZXNjLmdldElkKCkpOwotICAgICAgICAgIGlmIChwcm9qZWN0ICE9IG51bGwgJiYgcHJvamVjdC5leGlzdHMoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvL1JlcXVpcmVkRmFjZXRWZXJzaW9uW10gcmZ2ID0gZGVzYy5nZXRSZXF1aXJlZEZhY2V0VmVyc2lvbnMoKTsKLSAgICAgICAgICAgIFNldCBmYWNldFZlcnNpb25zID0gRmFjZXRVdGlscy5nZXRGYWNldHNGb3JQcm9qZWN0KHByb2plY3QuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgIGlmIChmYWNldFZlcnNpb25zICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIC8vRmFjZXRNYXRjaGVyIGZtID0gRmFjZXRVdGlscy5tYXRjaChyZnYsIGZhY2V0VmVyc2lvbnMpOwotICAgICAgICAgICAgICBGYWNldE1hdGNoZXIgZm0gPSBGYWNldE1hdGNoQ2FjaGUuZ2V0SW5zdGFuY2UoKS5nZXRNYXRjaEZvclByb2plY3QodHJ1ZSwgY2xpZW50UnVudGltZXNbaV0sIHByb2plY3QuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgICAgaWYgKGZtLmlzTWF0Y2goKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIERlZmF1bHRSdW50aW1lVHJpcGxldCBkcnQgPSBuZXcgRGVmYXVsdFJ1bnRpbWVUcmlwbGV0KCk7Ci0gICAgICAgICAgICAgICAgZHJ0LnNldEZhY2V0TWF0Y2hlcihmbSk7Ci0gICAgICAgICAgICAgICAgZHJ0LnNldFByb2plY3ROYW1lKHByb2plY3QuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgICAgICBkcnQuc2V0UnVudGltZUlkKGRlc2MuZ2V0SWQoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGRydDsgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICB9Ci0gICAgCi0gICAgaWYgKHZhbGlkQ2xpZW50UnVudGltZXMuc2l6ZSgpID4gMCkKLSAgICB7Ci0gICAgICAvL1dlIGNvdWxkbid0IG1hdGNoIHRvIHRoZSBpbml0aWFsbHkgc2VsZWN0ZWQgcHJvamVjdCBzbyByZXR1cm4gdGhlIGZpcnN0IHZhbGlkIHJ1bnRpbWUuCi0gICAgICBEZWZhdWx0UnVudGltZVRyaXBsZXQgZHJ0ID0gbmV3IERlZmF1bHRSdW50aW1lVHJpcGxldCgpOwotICAgICAgZHJ0LnNldEZhY2V0TWF0Y2hlcihudWxsKTsKLSAgICAgIGRydC5zZXRQcm9qZWN0TmFtZShudWxsKTsKLSAgICAgIGRydC5zZXRSdW50aW1lSWQoKChTdHJpbmdbXSl2YWxpZENsaWVudFJ1bnRpbWVzLnRvQXJyYXkobmV3IFN0cmluZ1swXSkpWzBdKTsKLSAgICAgIHJldHVybiBkcnQ7ICAgICAgICAgICAgCi0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvL1RoZXJlIGFyZSBubyBjbGllbnQgcnVudGltZXMgdGhhdCBtYXRjaCB0aGUgZml4ZWQgcnVudGltZSBhbmQgc2VydmVyLiBGYWxsIGJhY2sgdG8gb3JpZ2luYWwgYWxnb3JpdGhtCi0gICAgICBjbGllbnRJZHNGaXhlZF8gPSBmYWxzZTsKLSAgICAgIHJldHVybiBnZXREZWZhdWx0UnVudGltZShwcm9qZWN0LCBjbGllbnRJZHNfLmdldFR5cGVJZCgpLCB0cnVlKTsKLSAgICB9Ci0gIH0gIAotICAgIAotICBwcm90ZWN0ZWQgRGVmYXVsdFJ1bnRpbWVUcmlwbGV0IGdldERlZmF1bHRSdW50aW1lKElQcm9qZWN0IHByb2plY3QsIFN0cmluZyB0eXBlSWQsIGJvb2xlYW4gaXNDbGllbnQpCi0gIHsKLSAgICBTdHJpbmdbXSBydW50aW1lcyA9IG51bGw7Ci0gICAgaWYgKGlzQ2xpZW50KQotICAgIHsKLSAgICAgIHJ1bnRpbWVzID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0Q2xpZW50UnVudGltZXNCeVR5cGUodHlwZUlkKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJ1bnRpbWVzID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2VydmljZVJ1bnRpbWVzQnlTZXJ2aWNlVHlwZSh0eXBlSWQpOwotICAgIH0KLSAgICAgICAgCi0gICAgLy9TcGxpdCB0aGUgYXJyYXkgb2Ygc2VydmljZS9jbGllbnQgcnVudGltZXMgaW50byBvbmUgY29udGFpbmluZyB0aGUgcHJlZmVycmVkIHNldCBhbmQgb25lIGNvbnRhaW5pbmcgdGhlIHJlc3QuCi0gICAgUGVyc2lzdGVudFNlcnZlclJ1bnRpbWVDb250ZXh0IGNvbnRleHQgPSBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFNlcnZlclJ1bnRpbWVDb250ZXh0KCk7Ci0gICAgU3RyaW5nIHByZWZlcnJlZFJ1bnRpbWVJZCA9IGNvbnRleHQuZ2V0UnVudGltZUlkKCk7Ci0gICAgQXJyYXlMaXN0IHByZWZlcnJlZFJ1bnRpbWVJZHNMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIEFycmF5TGlzdCBvdGhlclJ1bnRpbWVJZHNMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGZvciAoaW50IGs9MDsgazxydW50aW1lcy5sZW5ndGg7IGsrKyApCi0gICAgewotICAgICAgU3RyaW5nIGRlc2NSdW50aW1lSWQgPSBudWxsOwotICAgICAgaWYgKGlzQ2xpZW50KQotICAgICAgewotICAgICAgICBDbGllbnRSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0Q2xpZW50UnVudGltZURlc2NyaXB0b3JCeUlkKHJ1bnRpbWVzW2tdKTsKLSAgICAgICAgZGVzY1J1bnRpbWVJZCA9IGRlc2MuZ2V0UnVudGltZSgpLmdldElkKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yQnlJZChydW50aW1lc1trXSk7Ci0gICAgICAgIGRlc2NSdW50aW1lSWQgPSBkZXNjLmdldFJ1bnRpbWUoKS5nZXRJZCgpOwotICAgICAgfQotICAgICAgCi0gICAgICBpZiAoZGVzY1J1bnRpbWVJZC5lcXVhbHMocHJlZmVycmVkUnVudGltZUlkKSkKLSAgICAgIHsKLSAgICAgICAgcHJlZmVycmVkUnVudGltZUlkc0xpc3QuYWRkKHJ1bnRpbWVzW2tdKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgb3RoZXJSdW50aW1lSWRzTGlzdC5hZGQocnVudGltZXNba10pOwotICAgICAgfQotICAgIH0KLSAgICBTdHJpbmdbXSBwcmVmZXJyZWRSdW50aW1lSWRzID0gKFN0cmluZ1tdKXByZWZlcnJlZFJ1bnRpbWVJZHNMaXN0LnRvQXJyYXkobmV3IFN0cmluZ1swXSk7Ci0gICAgU3RyaW5nW10gb3RoZXJSdW50aW1lSWRzID0gKFN0cmluZ1tdKW90aGVyUnVudGltZUlkc0xpc3QudG9BcnJheShuZXcgU3RyaW5nWzBdKTsKLSAgICAKLSAgICBTZXQgZmFjZXRWZXJzaW9ucyA9IG51bGw7Ci0gICAgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUucnVudGltZS5JUnVudGltZSBmUnVudGltZSA9IG51bGw7Ci0gICAgU3RyaW5nIGZSdW50aW1lTmFtZSA9IG51bGw7Ci0gICAgCi0gICAgLy9JZiB0aGUgaW5pdGlhbGx5IHNlbGVjdGVkIHByb2plY3QgZXhpc3RzIGFuZCBmYWNldHMgY2FuIGJlIGluZmVycmVkIGZyb20gaXQsIGxvb2sgZm9yCi0gICAgLy9hIHNlcnZpY2UvY2xpZW50IHJ1bnRpbWUgdGhhdCBtYXRjaGVzIHRoZSBwcm9qZWN0J3MgZmFjZXRzIGFuZCBhbHNvLCBpZiBwb3NzaWJsZSwgaXRzIGZhY2V0IHJ1bnRpbWUuCi0gICAgLy9QcmVmZXJlbmNlIHNob3VsZCBiZSBnaXZlbiB0byB0aGUgcHJlZmVycmVkIHNlcnZpY2UvY2xpZW50IHJ1bnRpbWVzLiAKLSAgICBpZiAocHJvamVjdCAhPSBudWxsICYmIHByb2plY3QuZXhpc3RzKCkpCi0gICAgewotICAgICAgZmFjZXRWZXJzaW9ucyA9IEZhY2V0VXRpbHMuZ2V0RmFjZXRzRm9yUHJvamVjdChwcm9qZWN0LmdldE5hbWUoKSk7Ci0gICAgICBmUnVudGltZSA9IEZhY2V0VXRpbHMuZ2V0RmFjZXRSdW50aW1lRm9yUHJvamVjdChwcm9qZWN0LmdldE5hbWUoKSk7Ci0gICAgICBmUnVudGltZU5hbWUgPSBudWxsOwotICAgICAgaWYgKGZSdW50aW1lICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGZSdW50aW1lTmFtZSA9IGZSdW50aW1lLmdldE5hbWUoKTsgICAgICAgIAotICAgICAgfQotICAgICAgCi0gICAgICBpZiAoZmFjZXRWZXJzaW9ucyAhPSBudWxsKQotICAgICAgewotICAgICAgICAvLzEuIEZpcnN0IGNoZWNrIHRvIHNlZSBpZiBvbmUgb2YgdGhlIHByZWZlcnJlZCBzZXJ2aWNlL2NsaWVudCBydW50aW1lcyBtYXRjaGVzIHRoZSBleGlzdGluZwotICAgICAgICAvL3Byb2plY3QncyBmYWNldHMgYW5kIHJ1bnRpbWUuCi0gICAgICAgIGZvciAoaW50IHAgPSAwOyBwIDwgcHJlZmVycmVkUnVudGltZUlkcy5sZW5ndGg7IHArKykKLSAgICAgICAgewotICAgICAgICAgIFJlcXVpcmVkRmFjZXRWZXJzaW9uW10gcHJmdiA9IG51bGw7Ci0gICAgICAgICAgaWYgKGlzQ2xpZW50KQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHByZnYgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRDbGllbnRSdW50aW1lRGVzY3JpcHRvckJ5SWQocHJlZmVycmVkUnVudGltZUlkc1twXSkuZ2V0UmVxdWlyZWRGYWNldFZlcnNpb25zKCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBwcmZ2ID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yQnlJZChwcmVmZXJyZWRSdW50aW1lSWRzW3BdKS5nZXRSZXF1aXJlZEZhY2V0VmVyc2lvbnMoKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgCi0gICAgICAgICAgLy9GYWNldE1hdGNoZXIgZm0gPSBGYWNldFV0aWxzLm1hdGNoKHByZnYsIGZhY2V0VmVyc2lvbnMpOwotICAgICAgICAgIEZhY2V0TWF0Y2hlciBmbSA9IEZhY2V0TWF0Y2hDYWNoZS5nZXRJbnN0YW5jZSgpLmdldE1hdGNoRm9yUHJvamVjdChpc0NsaWVudCwgcHJlZmVycmVkUnVudGltZUlkc1twXSwgcHJvamVjdC5nZXROYW1lKCkpOwotICAgICAgICAgIGJvb2xlYW4gZmFjZXRSdW50aW1lTWF0Y2hlcyA9IHRydWU7Ci0gICAgICAgICAgaWYgKGZSdW50aW1lTmFtZSAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGZhY2V0UnVudGltZU1hdGNoZXMgPSBGYWNldFV0aWxzLmlzRmFjZXRSdW50aW1lU3VwcG9ydGVkKHByZnYsIGZSdW50aW1lTmFtZSk7ICAKLSAgICAgICAgICB9ICAgICAgICAgIAotICAgICAgICAgIAotICAgICAgICAgIGlmIChmbS5pc01hdGNoKCkgJiYgZmFjZXRSdW50aW1lTWF0Y2hlcykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBEZWZhdWx0UnVudGltZVRyaXBsZXQgZHJ0ID0gbmV3IERlZmF1bHRSdW50aW1lVHJpcGxldCgpOwotICAgICAgICAgICAgZHJ0LnNldEZhY2V0TWF0Y2hlcihmbSk7Ci0gICAgICAgICAgICBkcnQuc2V0UHJvamVjdE5hbWUocHJvamVjdC5nZXROYW1lKCkpOwotICAgICAgICAgICAgZHJ0LnNldFJ1bnRpbWVJZChwcmVmZXJyZWRSdW50aW1lSWRzW3BdKTsKLSAgICAgICAgICAgIHJldHVybiBkcnQ7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLzIuIFNlY29uZCwgY2hlY2sgdG8gc2VlIGlmIG9uZSBvZiB0aGUgb3RoZXIgY2xpZW50UnVudGltZXMgbWF0Y2hlcyB0aGUgZXhpc3RpbmcKLSAgICAgICAgLy9wcm9qZWN0J3MgZmFjZXRzIGFuZCBydW50aW1lLiAgICAgICAgCi0gICAgICAgIGZvciAoaW50IGk9MDsgaTxvdGhlclJ1bnRpbWVJZHMubGVuZ3RoOyBpKyspCi0gICAgICAgIHsgICAgICAgIAotICAgICAgICAgIFJlcXVpcmVkRmFjZXRWZXJzaW9uW10gcmZ2ID0gbnVsbDsKLSAgICAgICAgICBpZiAoaXNDbGllbnQpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmZ2ID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0Q2xpZW50UnVudGltZURlc2NyaXB0b3JCeUlkKG90aGVyUnVudGltZUlkc1tpXSkuZ2V0UmVxdWlyZWRGYWNldFZlcnNpb25zKCk7ICAKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJmdiA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvckJ5SWQob3RoZXJSdW50aW1lSWRzW2ldKS5nZXRSZXF1aXJlZEZhY2V0VmVyc2lvbnMoKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgCi0gICAgICAgICAgRmFjZXRNYXRjaGVyIGZtID0gRmFjZXRNYXRjaENhY2hlLmdldEluc3RhbmNlKCkuZ2V0TWF0Y2hGb3JQcm9qZWN0KGlzQ2xpZW50LCBvdGhlclJ1bnRpbWVJZHNbaV0sIHByb2plY3QuZ2V0TmFtZSgpKTsKLSAgICAgICAgICBib29sZWFuIGZhY2V0UnVudGltZU1hdGNoZXMgPSB0cnVlOwotICAgICAgICAgIGlmIChmUnVudGltZU5hbWUgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBmYWNldFJ1bnRpbWVNYXRjaGVzID0gRmFjZXRVdGlscy5pc0ZhY2V0UnVudGltZVN1cHBvcnRlZChyZnYsIGZSdW50aW1lTmFtZSk7ICAKLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgIGlmIChmbS5pc01hdGNoKCkgJiYgZmFjZXRSdW50aW1lTWF0Y2hlcykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBEZWZhdWx0UnVudGltZVRyaXBsZXQgZHJ0ID0gbmV3IERlZmF1bHRSdW50aW1lVHJpcGxldCgpOwotICAgICAgICAgICAgZHJ0LnNldEZhY2V0TWF0Y2hlcihmbSk7Ci0gICAgICAgICAgICBkcnQuc2V0UHJvamVjdE5hbWUocHJvamVjdC5nZXROYW1lKCkpOwotICAgICAgICAgICAgZHJ0LnNldFJ1bnRpbWVJZChvdGhlclJ1bnRpbWVJZHNbaV0pOwotICAgICAgICAgICAgcmV0dXJuIGRydDsKLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vMy4gVGhpcmQsIGNoZWNrIHRvIHNlZSBpZiBvbmUgb2YgdGhlIHByZWZlcnJlZCBjbGllbnRSdW50aW1lcyBtYXRjaGVzIHRoZSBleGlzdGluZwotICAgICAgICAvL3Byb2plY3QncyBmYWNldHMuCi0gICAgICAgIGZvciAoaW50IHAgPSAwOyBwIDwgcHJlZmVycmVkUnVudGltZUlkcy5sZW5ndGg7IHArKykKLSAgICAgICAgewotICAgICAgICAgICAgRmFjZXRNYXRjaGVyIGZtID0gRmFjZXRNYXRjaENhY2hlLmdldEluc3RhbmNlKCkuZ2V0TWF0Y2hGb3JQcm9qZWN0KGlzQ2xpZW50LCBwcmVmZXJyZWRSdW50aW1lSWRzW3BdLCBwcm9qZWN0LmdldE5hbWUoKSk7IAotICAgICAgICAgICAgaWYgKGZtLmlzTWF0Y2goKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRGVmYXVsdFJ1bnRpbWVUcmlwbGV0IGRydCA9IG5ldyBEZWZhdWx0UnVudGltZVRyaXBsZXQoKTsKLSAgICAgICAgICAgICAgZHJ0LnNldEZhY2V0TWF0Y2hlcihmbSk7Ci0gICAgICAgICAgICAgIGRydC5zZXRQcm9qZWN0TmFtZShwcm9qZWN0LmdldE5hbWUoKSk7Ci0gICAgICAgICAgICAgIGRydC5zZXRSdW50aW1lSWQocHJlZmVycmVkUnVudGltZUlkc1twXSk7Ci0gICAgICAgICAgICAgIHJldHVybiBkcnQ7Ci0gICAgICAgICAgICB9ICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vNC4gRm91cnRoLCBjaGVjayB0byBzZWUgaWYgdGhlIG9uZSB0aGUgb3RoZXIgY2xpZW50UnVudGltZXMgbWF0Y2hlcyB0aGUgZXhpc3RpbmcKLSAgICAgICAgLy9wcm9qZWN0J3MgZmFjZXRzLiAgICAgICAgCi0gICAgICAgIGZvciAoaW50IGk9MDsgaTxvdGhlclJ1bnRpbWVJZHMubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIEZhY2V0TWF0Y2hlciBmbSA9IEZhY2V0TWF0Y2hDYWNoZS5nZXRJbnN0YW5jZSgpLmdldE1hdGNoRm9yUHJvamVjdChpc0NsaWVudCwgb3RoZXJSdW50aW1lSWRzW2ldLCBwcm9qZWN0LmdldE5hbWUoKSk7IAotICAgICAgICAgICAgaWYgKGZtLmlzTWF0Y2goKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRGVmYXVsdFJ1bnRpbWVUcmlwbGV0IGRydCA9IG5ldyBEZWZhdWx0UnVudGltZVRyaXBsZXQoKTsKLSAgICAgICAgICAgICAgZHJ0LnNldEZhY2V0TWF0Y2hlcihmbSk7Ci0gICAgICAgICAgICAgIGRydC5zZXRQcm9qZWN0TmFtZShwcm9qZWN0LmdldE5hbWUoKSk7Ci0gICAgICAgICAgICAgIGRydC5zZXRSdW50aW1lSWQob3RoZXJSdW50aW1lSWRzW2ldKTsKLSAgICAgICAgICAgICAgcmV0dXJuIGRydDsKLSAgICAgICAgICAgIH0gICAgICAgIAotICAgICAgICB9ICAgICAgICAKLSAgICAgIH0gICAgICAgICAgICAKLSAgICB9Ci0gICAgCi0gICAgLy9IYXZlbid0IHJldHVybmVkIHlldCBzbyB0aGlzIG1lYW5zIHRoYXQgdGhlIGludGl0aWFsbHkgc2VsZWN0ZWQgcHJvamVjdCBjYW5ub3QgYmUgdXNlZAotICAgIC8vdG8gaW5mbHVlbmNlIHRoZSBzZWxlY3Rpb24gb2YgdGhlIHNlcnZpY2UvY2xpZW50IHJ1bnRpbWUuIAotICAgIAotICAgICAgLy9Vc2UgdGhlIHByZWZlcnJlZCBwcm9qZWN0IHR5cGVzIHRvIGluZmx1ZW5jZSB0aGUgc2VsZWN0aW9uIG9mIGEgcnVudGltZS4KLSAgICAgIFByb2plY3RUb3BvbG9neUNvbnRleHQgcHRjID0gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQcm9qZWN0VG9wb2xvZ3lDb250ZXh0KCk7Ci0gICAgICBTdHJpbmdbXSBwcmVmZXJyZWRUZW1wbGF0ZUlkcyA9IG51bGw7Ci0gICAgICBpZiAoaXNDbGllbnQpCi0gICAgICB7Ci0gICAgICAgIHByZWZlcnJlZFRlbXBsYXRlSWRzID0gcHRjLmdldENsaWVudFR5cGVzKCk7ICAKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcHJlZmVycmVkVGVtcGxhdGVJZHMgPSBwdGMuZ2V0U2VydmljZVR5cGVzKCk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAKLSAgICAgIGZvciAoaW50IG49MDsgbjxwcmVmZXJyZWRUZW1wbGF0ZUlkcy5sZW5ndGg7IG4rKykKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHByZWZlcnJlZFRlbXBsYXRlSWQgPSBwcmVmZXJyZWRUZW1wbGF0ZUlkc1tuXTsKLQotICAgICAgICBmb3IgKGludCBtPTA7IG08cHJlZmVycmVkUnVudGltZUlkcy5sZW5ndGg7IG0rKykKLSAgICAgICAgewotICAgICAgICAgIC8vSWYgdGhpcyBjbGllbnQgb3Igc2VydmljZSBydW50aW1lIHN1cHBvcnRzIHRoaXMgdGVtcGxhdGUsIGNob29zZSBpdCBhbmQgZXhpdC4gICAgICAgIAotICAgICAgICAgIGJvb2xlYW4gbWF0Y2hlcyA9IGZhbHNlOwotICAgICAgICAgIGlmIChpc0NsaWVudCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBtYXRjaGVzID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZG9lc0NsaWVudFJ1bnRpbWVTdXBwb3J0VGVtcGxhdGUocHJlZmVycmVkUnVudGltZUlkc1ttXSwgcHJlZmVycmVkVGVtcGxhdGVJZCk7ICAgICAgICAgICAgCi0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBtYXRjaGVzID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZG9lc1NlcnZpY2VSdW50aW1lU3VwcG9ydFRlbXBsYXRlKHByZWZlcnJlZFJ1bnRpbWVJZHNbbV0sIHByZWZlcnJlZFRlbXBsYXRlSWQpOwotICAgICAgICAgIH0KLSAgICAgICAgICAKLSAgICAgICAgICBpZiAobWF0Y2hlcykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBEZWZhdWx0UnVudGltZVRyaXBsZXQgZHJ0ID0gbmV3IERlZmF1bHRSdW50aW1lVHJpcGxldCgpOwotICAgICAgICAgICAgZHJ0LnNldEZhY2V0TWF0Y2hlcihudWxsKTsKLSAgICAgICAgICAgIC8vSWYgdGhlIHByb2plY3QgZG9lc24ndCBleGlzdCwgdXNlIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IHRoYXQgd2FzIHBhc3NlZCBpbi4KLSAgICAgICAgICAgIC8vSWYgdGhlIHByb2plY3QgZXhpc3RzLCBpdCBtZWFucyB0aGF0IHByZXZpb3VzIGNvZGUgaW4gdGhpcyBtZXRob2QKLSAgICAgICAgICAgIC8vZGV0ZXJtaW5lZCBpdCB0byBub3QgYmUgYSBzdWl0YWJsZSBwcm9qZWN0LiBDbGVhciB0aGUgcHJvamVjdCBuYW1lLgotICAgICAgICAgICAgaWYgKHByb2plY3Q9PW51bGwgfHwgcHJvamVjdC5leGlzdHMoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgZHJ0LnNldFByb2plY3ROYW1lKG51bGwpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBkcnQuc2V0UHJvamVjdE5hbWUocHJvamVjdC5nZXROYW1lKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZHJ0LnNldFJ1bnRpbWVJZChwcmVmZXJyZWRSdW50aW1lSWRzW21dKTsKLSAgICAgICAgICAgIHJldHVybiBkcnQ7ICAgICAgICAgICAgCi0gICAgICAgICAgfSAgICAgICAgCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICAKLSAgICAKLSAgICAvL1N0aWxsIGhhdmVuJ3QgcmV0dXJuZWQuIFJldHVybiB0aGUgZmlyc3QgcHJlZmVycmVkIHNlcnZpY2UvY2xpZW50IHJ1bnRpbWUgaWQuCi0gICAgaWYgKHByZWZlcnJlZFJ1bnRpbWVJZHMubGVuZ3RoID4gMCkKLSAgICB7Ci0gICAgICBEZWZhdWx0UnVudGltZVRyaXBsZXQgZHJ0ID0gbmV3IERlZmF1bHRSdW50aW1lVHJpcGxldCgpOwotICAgICAgZHJ0LnNldEZhY2V0TWF0Y2hlcihudWxsKTsKLSAgICAgIC8vSWYgdGhlIHByb2plY3QgZG9lc24ndCBleGlzdCwgdXNlIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IHRoYXQgd2FzIHBhc3NlZCBpbi4KLSAgICAgIC8vSWYgdGhlIHByb2plY3QgZXhpc3RzLCBpdCBtZWFucyB0aGF0IHByZXZpb3VzIGNvZGUgaW4gdGhpcyBtZXRob2QKLSAgICAgIC8vZGV0ZXJtaW5lZCBpdCB0byBub3QgYmUgYSBzdWl0YWJsZSBwcm9qZWN0LiBDbGVhciB0aGUgcHJvamVjdCBuYW1lLiAgICAgIAotICAgICAgaWYgKHByb2plY3Q9PW51bGwgfHwgcHJvamVjdC5leGlzdHMoKSkKLSAgICAgIHsKLSAgICAgICAgZHJ0LnNldFByb2plY3ROYW1lKG51bGwpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBkcnQuc2V0UHJvamVjdE5hbWUocHJvamVjdC5nZXROYW1lKCkpOwotICAgICAgfQotICAgICAgZHJ0LnNldFJ1bnRpbWVJZChwcmVmZXJyZWRSdW50aW1lSWRzWzBdKTsKLSAgICAgIHJldHVybiBkcnQ7ICAgICAgCi0gICAgfQotICAgICAgCi0gICAgaWYgKHJ1bnRpbWVzLmxlbmd0aCA+IDApCi0gICAgewotICAgICAgRGVmYXVsdFJ1bnRpbWVUcmlwbGV0IGRydCA9IG5ldyBEZWZhdWx0UnVudGltZVRyaXBsZXQoKTsKLSAgICAgIGRydC5zZXRGYWNldE1hdGNoZXIobnVsbCk7Ci0gICAgICAvL0lmIHRoZSBwcm9qZWN0IGRvZXNuJ3QgZXhpc3QsIHVzZSB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdCB0aGF0IHdhcyBwYXNzZWQgaW4uCi0gICAgICAvL0lmIHRoZSBwcm9qZWN0IGV4aXN0cywgaXQgbWVhbnMgdGhhdCBwcmV2aW91cyBjb2RlIGluIHRoaXMgbWV0aG9kCi0gICAgICAvL2RldGVybWluZWQgaXQgdG8gbm90IGJlIGEgc3VpdGFibGUgcHJvamVjdC4gQ2xlYXIgdGhlIHByb2plY3QgbmFtZS4KLSAgICAgIGlmIChwcm9qZWN0PT1udWxsIHx8IHByb2plY3QuZXhpc3RzKCkpCi0gICAgICB7Ci0gICAgICAgIGRydC5zZXRQcm9qZWN0TmFtZShudWxsKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgZHJ0LnNldFByb2plY3ROYW1lKHByb2plY3QuZ2V0TmFtZSgpKTsKLSAgICAgIH0KLSAgICAgIGRydC5zZXRSdW50aW1lSWQocnVudGltZXNbMF0pOwotICAgICAgcmV0dXJuIGRydDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIERlZmF1bHRSdW50aW1lVHJpcGxldCBkcnQgPSBuZXcgRGVmYXVsdFJ1bnRpbWVUcmlwbGV0KCk7Ci0gICAgICBkcnQuc2V0RmFjZXRNYXRjaGVyKG51bGwpOwotICAgICAgLy9JZiB0aGUgcHJvamVjdCBkb2Vzbid0IGV4aXN0LCB1c2UgdGhlIG5hbWUgb2YgdGhlIHByb2plY3QgdGhhdCB3YXMgcGFzc2VkIGluLgotICAgICAgLy9JZiB0aGUgcHJvamVjdCBleGlzdHMsIGl0IG1lYW5zIHRoYXQgcHJldmlvdXMgY29kZSBpbiB0aGlzIG1ldGhvZAotICAgICAgLy9kZXRlcm1pbmVkIGl0IHRvIG5vdCBiZSBhIHN1aXRhYmxlIHByb2plY3QuIENsZWFyIHRoZSBwcm9qZWN0IG5hbWUuCi0gICAgICBpZiAocHJvamVjdD09bnVsbCB8fCBwcm9qZWN0LmV4aXN0cygpKQotICAgICAgewotICAgICAgICBkcnQuc2V0UHJvamVjdE5hbWUobnVsbCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGRydC5zZXRQcm9qZWN0TmFtZShwcm9qZWN0LmdldE5hbWUoKSk7Ci0gICAgICB9Ci0gICAgICBkcnQuc2V0UnVudGltZUlkKG51bGwpOwotICAgICAgcmV0dXJuIGRydDsKLSAgICB9ICAgIAotICB9Ci0gIC8qKgotICogCi0gKiBAcGFyYW0gcHJvamVjdAotICogQHJldHVybgotICovCi0gIHByb3RlY3RlZCBTZWxlY3Rpb25MaXN0Q2hvaWNlcyBnZXRQcm9qZWN0RUFSQ2hvaWNlKElQcm9qZWN0IHByb2plY3QpCi0gIHsKLSAgICBTdHJpbmdbXSBmbGV4UHJvamVjdHMgPSBnZXRBbGxGbGV4aWJsZVByb2plY3RzKCk7Ci0gICAgU2VsZWN0aW9uTGlzdCBsaXN0ID0gbmV3IFNlbGVjdGlvbkxpc3QoZmxleFByb2plY3RzLCAwKTsKLSAgICByZXR1cm4gbmV3IFNlbGVjdGlvbkxpc3RDaG9pY2VzKGxpc3QsIG51bGwpOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgU2VsZWN0aW9uTGlzdCBnZXRFQVJQcm9qZWN0cygpCi0gIHsKLSAgICBTdHJpbmdbXSBmbGV4UHJvamVjdHMgPSBnZXRBbGxGbGV4aWJsZVByb2plY3RzKCk7Ci0gICAgcmV0dXJuIG5ldyBTZWxlY3Rpb25MaXN0KGZsZXhQcm9qZWN0cywgMCk7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBJUmVzb3VyY2UgZ2V0UmVzb3VyY2VGcm9tSW5pdGlhbFNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pCi0gIHsKLSAgICBpZiAoc2VsZWN0aW9uICE9IG51bGwgJiYgc2VsZWN0aW9uLnNpemUoKSA9PSAxKQotICAgIHsKLSAgICAgIE9iamVjdCBvYmogPSBzZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCk7Ci0gICAgICBpZiAob2JqICE9IG51bGwpIAotICAgICAgewotICAgICAgICB0cnkKLSAgICAgICAgeyAKLSAgICAgICAgICBJUmVzb3VyY2UgcmVzb3VyY2UgPSBSZXNvdXJjZVV0aWxzLmdldFJlc291cmNlRnJvbVNlbGVjdGlvbihvYmopOwotICAgICAgICAgIHJldHVybiByZXNvdXJjZTsKLSAgICAgICAgfSBjYXRjaChDb3JlRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfSAgICAgICAgCi0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotICAKLSAgICAgIAotICAvKgotICAgKiBTZXQgZGVmYXVsdHMgZm9yIHRoZSBjbGllbnQtc2lkZSBmcm9tIHRoZSBzZXJ2aWNlLXNpZGUgaWYgcG9zc2libGUuCi0gICAqIFNldHMgY2xpZW50UHJvamVjdE5hbWVfIHRvIGEgdmFsdWUgYmFzZWQgb24gdGhlIHNlcnZpY2UgcHJvamVjdCBuYW1lLgotICAgKiAKLSAgICogUmV0dXJucyBhbiBJU3RhdHVzLk9LIGlmIHRoZSBzZXJ2aWNlIHNpZGUgdmFsdWVzIGZvciBzZXJ2ZXIgYW5kIFdlYiAKLSAgICogc2VydmljZSBydW50aW1lIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgdmFsdWVzIGZvciBjbGllbnRSdW50aW1lSWRfLAotICAgKiBjbGllbnRDb21wb25lbnRUeXBlXywgYWxsIHRoZSB2YWx1ZXMgaW4gY2xpZW50SWRzXywgYW5kIGNsaWVudEVhclByb2plY3ROYW1lXy4KLSAgICogCi0gICAqIFJldHVybnMgYW4gSVN0YXR1cy5FUlJPUiBvdGhlcndpc2UsIGxlYXZpbmcgb25seSB0aGUgY2xpZW50UHJvamVjdE5hbWVfIHNldC4gCi0gICAqLwotICBwcm90ZWN0ZWQgSVN0YXR1cyBkZWZhdWx0Q2xpZW50U2lkZUZyb21TZXJ2aWNlU2lkZShTdHJpbmcgc2VydmljZVByb2plY3ROYW1lLCBUeXBlUnVudGltZVNlcnZlciBzZXJ2aWNlSWRzLCBib29sZWFuIHNlcnZpY2VOZWVkRUFSLCBTdHJpbmcgc2VydmljZUVhclByb2plY3ROYW1lKQotICB7Ci0gICAgLy8xLiBTdGFydCB3aXRoIHNldHRpbmcgdGhlIGRlZmF1bHQgY2xpZW50IHByb2plY3QgbmFtZSBiYXNlZCBvbiB0aGUgc2VydmljZSBwcm9qZWN0IG5hbWUuCi0gICAgYm9vbGVhbiBpc0VKQiA9IGZhbHNlOwotICAgIFN0cmluZyBpbXBsSWQgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRXZWJTZXJ2aWNlSW1wbElkRnJvbVR5cGVJZChzZXJ2aWNlSWRzLmdldFR5cGVJZCgpKTsKLSAgICBpc0VKQiA9IChpbXBsSWQuZXF1YWxzKCJvcmcuZWNsaXBzZS5qc3Qud3Mud3NJbXBsLmVqYiIpKTsKLSAgICBTdHJpbmdbXSB1cGRhdGVkTmFtZXMgPSBSZXNvdXJjZVV0aWxzLmdldENsaWVudFByb2plY3RDb21wb25lbnROYW1lKHNlcnZpY2VQcm9qZWN0TmFtZSwgc2VydmljZVByb2plY3ROYW1lLCBpc0VKQik7Ci0gICAgY2xpZW50UHJvamVjdE5hbWVfID0gdXBkYXRlZE5hbWVzWzBdOwotICAgIAotICAgIC8vMi4gSWRlYWxseSwgdGhlIHNlcnZlciBhbmQgcnVudGltZSBvbiB0aGUgY2xpZW50LXNpZGUgd2lsbCBiZSBkZWZhdWx0ZWQKLSAgICAvLyAgIHRvIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGUgc2VydmljZSBzaWRlLiBJZiBhIGNsaWVudCBydW50aW1lIGlkIHRoYXQgCi0gICAgLy8gICBzdXBwb3J0cyBjbGllbnRQcm9qZWN0TmFtZV8gYW5kIHRoZSBzZXJ2aWNlLXNpZGUgc2VydmVyIGFuZCBydW50aW1lIGRlZmF1bHRzCi0gICAgLy8gICBjYW4gYmUgZm91bmQsIGNob29zZSBpdC4KLSAgICBJUHJvamVjdCBjbGllbnRQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KGNsaWVudFByb2plY3ROYW1lXyk7Ci0gICAgVHlwZVJ1bnRpbWVTZXJ2ZXIgdGVzdElkcyA9IG5ldyBUeXBlUnVudGltZVNlcnZlcigpOwotICAgIHRlc3RJZHMuc2V0VHlwZUlkKGNsaWVudElkc18uZ2V0VHlwZUlkKCkpOwotICAgIHRlc3RJZHMuc2V0UnVudGltZUlkKHNlcnZpY2VJZHMuZ2V0UnVudGltZUlkKCkpOwotICAgIHRlc3RJZHMuc2V0U2VydmVySWQoc2VydmljZUlkcy5nZXRTZXJ2ZXJJZCgpKTsKLSAgICB0ZXN0SWRzLnNldFNlcnZlckluc3RhbmNlSWQoc2VydmljZUlkcy5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCkpOwotICAgIAotICAgIGlmIChjbGllbnRQcm9qZWN0LmV4aXN0cygpKQotICAgIHsKLSAgICAgIGNsaWVudENvbXBvbmVudFR5cGVfID0gIiI7Ci0gICAgICBjbGllbnRSdW50aW1lSWRfID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0Q2xpZW50UnVudGltZUlkKHRlc3RJZHMsIHNlcnZpY2VQcm9qZWN0TmFtZSwgY2xpZW50Q29tcG9uZW50VHlwZV8pOwotICAgICAgaWYgKGNsaWVudFJ1bnRpbWVJZF8gIT0gbnVsbCAmJiBjbGllbnRSdW50aW1lSWRfLmxlbmd0aCgpPjApCi0gICAgICB7Ci0gICAgICAgIGNsaWVudElkc18uc2V0UnVudGltZUlkKHNlcnZpY2VJZHMuZ2V0UnVudGltZUlkKCkpOwotICAgICAgICBjbGllbnRJZHNfLnNldFNlcnZlcklkKHNlcnZpY2VJZHMuZ2V0U2VydmVySWQoKSk7Ci0gICAgICAgIGNsaWVudElkc18uc2V0U2VydmVySW5zdGFuY2VJZChzZXJ2aWNlSWRzLmdldFNlcnZlckluc3RhbmNlSWQoKSk7Ci0gICAgICB9ICAgICAgCi0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvL1NlZSBpZiB0aGVyZSBpcyBhIGNsaWVudCBwcm9qZWN0IHR5cGUgdGhhdCBzdXBwb3J0cyB0aGUgc2VydmljZS1zaWRlCi0gICAgICAvL3NlcnZlciBhbmQgcnVudGltZSBkZWZhdWx0cy4gUGljayBhIGNsaWVudCBwcm9qZWN0IHR5cGUgYmFzZWQgb24gcHJvamVjdCB0b3BvbG9neSBwcmVmZXJlbmNlcy4KLSAgICAgIC8vQ2hvb3NlIHRoZSBjbGllbnRSdW50aW1lSWRfIGFjY29yZGluZ2x5LgotICAgICAgU3RyaW5nW10gdGVtcGxhdGVJZHMgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRDbGllbnRQcm9qZWN0VGVtcGxhdGVzKGNsaWVudElkc18uZ2V0VHlwZUlkKCksIHRlc3RJZHMuZ2V0UnVudGltZUlkKCkpOwotICAgICAgaWYgKHRlbXBsYXRlSWRzICE9IG51bGwgJiYgdGVtcGxhdGVJZHMubGVuZ3RoID4gMCkKLSAgICAgIHsKLSAgICAgICAgUHJvamVjdFRvcG9sb2d5Q29udGV4dCBwdGMgPSBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFByb2plY3RUb3BvbG9neUNvbnRleHQoKTsKLSAgICAgICAgU3RyaW5nW10gcHJlZmVycmVkVGVtcGxhdGVJZHMgPSBwdGMuZ2V0Q2xpZW50VHlwZXMoKTsKLSAgICAgICAgb3V0ZXI6IGZvciAoaW50IGogPSAwOyBqIDwgcHJlZmVycmVkVGVtcGxhdGVJZHMubGVuZ3RoOyBqKyspCi0gICAgICAgIHsKLSAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRlbXBsYXRlSWRzLmxlbmd0aDsgaSsrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyB0ZW1wbGF0ZUlkID0gdGVtcGxhdGVJZHNbaV07Ci0gICAgICAgICAgICBpZiAodGVtcGxhdGVJZC5lcXVhbHMocHJlZmVycmVkVGVtcGxhdGVJZHNbal0pKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvLyBHZXQgYSBjbGllbnRSdW50aW1lSWQgZm9yIHRoaXMgdGVtcGxhdGUKLSAgICAgICAgICAgICAgU3RyaW5nIG5ld0NsaWVudFJ1bnRpbWVJZCA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldENsaWVudFJ1bnRpbWVJZCh0ZXN0SWRzLCBjbGllbnRQcm9qZWN0TmFtZV8sCi0gICAgICAgICAgICAgICAgICB0ZW1wbGF0ZUlkKTsKLSAgICAgICAgICAgICAgaWYgKG5ld0NsaWVudFJ1bnRpbWVJZC5sZW5ndGgoKSA+IDApCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjbGllbnRSdW50aW1lSWRfID0gbmV3Q2xpZW50UnVudGltZUlkOwotICAgICAgICAgICAgICAgIGNsaWVudENvbXBvbmVudFR5cGVfID0gdGVtcGxhdGVJZDsKLSAgICAgICAgICAgICAgICBjbGllbnRJZHNfLnNldFJ1bnRpbWVJZChzZXJ2aWNlSWRzLmdldFJ1bnRpbWVJZCgpKTsKLSAgICAgICAgICAgICAgICBjbGllbnRJZHNfLnNldFNlcnZlcklkKHNlcnZpY2VJZHMuZ2V0U2VydmVySWQoKSk7Ci0gICAgICAgICAgICAgICAgY2xpZW50SWRzXy5zZXRTZXJ2ZXJJbnN0YW5jZUlkKHNlcnZpY2VJZHMuZ2V0U2VydmVySW5zdGFuY2VJZCgpKTsgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgYnJlYWsgb3V0ZXI7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9IAotICAgIAotICAgIC8vMy4gSWYgc3RlcCAyIHdhcyBzdWNjZXNzZnVsLCBjbGllbnRSdW50aW1lSWRfIHNob3VsZCBub3cgYmUgc2V0LCBhbG9uZyB3aXRoIGNsaWVudFByb2plY3ROYW1lXywKLSAgICAvLyAgIGNsaWVudENvbXBvbmVudFR5cGVfLCBhbmQgYWxsIHRoZSB2YWx1ZXMgaW4gY2xpZW50SWRzXy4gQWxsIHRoYXQgcmVtYWlucyBpcyBzZXR0aW5nIHRoZSBFQVIuCi0gICAgaWYgKGNsaWVudFJ1bnRpbWVJZF8gIT0gbnVsbCAmJiBjbGllbnRSdW50aW1lSWRfLmxlbmd0aCgpPjApCi0gICAgewotICAgICAgc2V0RGVmYXVsdENsaWVudEVhclByb2plY3QoKTsKLSAgICAgIC8vVXBkYXRlIHRoZSBjbGllbnQgc2lkZSBFQVIgZnJvbSB0aGUgc2VydmljZSBzaWRlIEVBUiBpZiBuZWNlc3NhcnkuCi0gICAgICBpZiAoc2VydmljZU5lZWRFQVIpCi0gICAgICB7Ci0gICAgICAgIGRlZmF1bHRDbGllbnRFYXJGcm9tU2VydmljZUVhcihzZXJ2aWNlUHJvamVjdE5hbWUsIHNlcnZpY2VFYXJQcm9qZWN0TmFtZSk7IAotICAgICAgfQotICAgICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvL1N0ZXAgMiB3YXMgbm90IHN1Y2Nlc3NmdWwuIENsaWVudCBzaWRlIGRlZmF1bHRpbmcgY2Fubm90IGJlIGRvbmUgdXNpbmcgdGhlIHNlcnZpY2Ugc2lkZSBzZXJ2ZXIKLSAgICAgIC8vYW5kIHdlYiBzZXJ2aWNlIHJ1bnRpbWUgZGVmYXVsdHMuIFJldHVybiBhbiBlcnJvciBzdGF0dXMuCi0gICAgICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIiIpOwotICAgIH0KLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgZGVmYXVsdENsaWVudEVhckZyb21TZXJ2aWNlRWFyKFN0cmluZyBzZXJ2aWNlUHJvamVjdE5hbWUsIFN0cmluZyBzZXJ2aWNlRWFyUHJvamVjdE5hbWUpCi0gIHsKLSAgICAvL0NsaWVudCBzaWRlCi0gICAgaWYgKGNsaWVudE5lZWRFQVJfKQotICAgIHsKLSAgICAgIElQcm9qZWN0IGNsaWVudFByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoY2xpZW50UHJvamVjdE5hbWVfKTsKLSAgICAgIGlmKGNsaWVudFByb2plY3Q9PW51bGwgfHwgIWNsaWVudFByb2plY3QuZXhpc3RzKCkgCi0gICAgICAgIHx8ICEoY2xpZW50RWFyUHJvamVjdE5hbWVfLmVxdWFsc0lnbm9yZUNhc2Uoc2VydmljZUVhclByb2plY3ROYW1lKSkpCi0gICAgICB7Ci0gICAgICAgIFByb2plY3RUb3BvbG9neUNvbnRleHQgcHRjPSBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFByb2plY3RUb3BvbG9neUNvbnRleHQoKTsgICAgICAgICAKLSAgICAgICAgaWYgKCFwdGMuaXNVc2VUd29FQVJzKCkpIAotICAgICAgICB7Ci0gICAgICAgICAgY2xpZW50RWFyUHJvamVjdE5hbWVfID0gc2VydmljZUVhclByb2plY3ROYW1lOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgCi0gICAgICAgIHsKLSAgICAgICAgICBJUHJvamVjdCBwcm94eUVBUlByb2plY3QgPSBnZXRVbmlxdWVDbGllbnRFQVIoY2xpZW50RWFyUHJvamVjdE5hbWVfLCBzZXJ2aWNlRWFyUHJvamVjdE5hbWUsIGNsaWVudFByb2plY3ROYW1lXywgc2VydmljZVByb2plY3ROYW1lKTsKLSAgICAgICAgICBjbGllbnRFYXJQcm9qZWN0TmFtZV8gPSBwcm94eUVBUlByb2plY3QuZ2V0TmFtZSgpOwotICAgICAgICB9ICAgICAKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gIH0KLSAgCi0gIHByaXZhdGUgSVByb2plY3QgZ2V0VW5pcXVlQ2xpZW50RUFSKFN0cmluZyBlYXJQcm9qZWN0TmFtZSwgU3RyaW5nIHNlcnZpY2VFQVJQcm9qZWN0LCBTdHJpbmcgY2xpZW50UHJvamVjdE5hbWUsIFN0cmluZyBzZXJ2aWNlUHJvamVjdE5hbWUpIHsKLQotICAgIFN0cmluZyBwcm9qZWN0TmFtZSA9IG5ldyBTdHJpbmcoKTsKLSAgICAvL0lmIHRoZSBjbGllbnQgcHJvamVjdCBkb2Vzbid0IGV4aXN0IGFuZCB0aGUgc2VydmljZSBwcm9qZWN0IGRvZXMsIGVuc3VyZSB0aGUKLSAgICAvL3RoZSBjbGllbnQgc2lkZSBFQVIncyBKMkVFIGxldmVsIGlzIHN1Y2ggdGhhdCB0aGUgc2VydmljZSBwcm9qZWN0IGNvdWxkIGJlIGFkZGVkIHRvIGl0LgotICAgIC8vVGhpcyB3aWxsIGVuc3VyZSB3ZSBkb24ndCBkZWZhdWx0IHRoZSBwYWdlIHdpdGggYSBjbGllbnQgcHJvamVjdCBFQVIgYXQgYSBsb3dlcgotICAgIC8vSjJFRSBsZXZlbCB0aGFuIHRoZSBzZXJ2aWNlIHNpZGUuCi0gICAgYm9vbGVhbiBnb29kSjJFRUxldmVsID0gdHJ1ZTsKLSAgICBpZiAoIWVhclByb2plY3ROYW1lLmVxdWFsc0lnbm9yZUNhc2Uoc2VydmljZUVBUlByb2plY3QpKQotICAgIHsKLSAgICAgIElQcm9qZWN0IGNsaWVudFByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoY2xpZW50UHJvamVjdE5hbWUpOwotICAgICAgSVByb2plY3Qgc2VydmljZVByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3Qoc2VydmljZVByb2plY3ROYW1lKTsKLSAgICAgIElQcm9qZWN0IGVhclByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoZWFyUHJvamVjdE5hbWUpOwotICAgICAgaWYgKCFjbGllbnRQcm9qZWN0LmV4aXN0cygpICYmIHNlcnZpY2VQcm9qZWN0LmV4aXN0cygpKQotICAgICAgewotICAgICAgICBJU3RhdHVzIGFzc29jaWF0aW9uU3RhdHVzID0gSjJFRVV0aWxzLmNhbkFzc29jaWF0ZVByb2plY3RUb0VBUihzZXJ2aWNlUHJvamVjdCwgZWFyUHJvamVjdCk7Ci0gICAgICAgIGdvb2RKMkVFTGV2ZWwgPSAoYXNzb2NpYXRpb25TdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLk9LKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYgKCFlYXJQcm9qZWN0TmFtZS5lcXVhbHNJZ25vcmVDYXNlKHNlcnZpY2VFQVJQcm9qZWN0KSAmJiBnb29kSjJFRUxldmVsKSB7Ci0gICAgICBwcm9qZWN0TmFtZSA9IGVhclByb2plY3ROYW1lOwotICAgIH0gICAgCi0gICAgZWxzZSB7Ci0gICAgICBwcm9qZWN0TmFtZSA9IGNsaWVudFByb2plY3ROYW1lK0RFRkFVTFRfQ0xJRU5UX0VBUl9QUk9KRUNUX0VYVDsKLSAgICAgIGludCBpPTE7ICAgICAgCi0gICAgICB3aGlsZSAocHJvamVjdE5hbWUuZXF1YWxzSWdub3JlQ2FzZShzZXJ2aWNlRUFSUHJvamVjdCkpIHsKLSAgICAgICAgcHJvamVjdE5hbWUgPSBwcm9qZWN0TmFtZStpOwotICAgICAgICBpKys7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBwcm9qZWN0TmFtZS5lcXVhbHMoIiIpID8gbnVsbCA6IFJlc291cmNlVXRpbHMuZ2V0V29ya3NwYWNlUm9vdCgpLmdldFByb2plY3QocHJvamVjdE5hbWUpOwotICAgIAotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgc2V0RGVmYXVsdHNGb3JFeHRlbnNpb24oSUVudmlyb25tZW50IGVudikKLSAgewotICAgIElXZWJTZXJ2aWNlUnVudGltZSB3c3J0ID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0Q2xpZW50UnVudGltZShjbGllbnRSdW50aW1lSWRfKTsKLSAgICBpZiAod3NydCAhPSBudWxsKQotICAgIHsKLSAgICAgIFdlYlNlcnZpY2VDbGllbnRJbmZvIHdzSW5mbyA9IG5ldyBXZWJTZXJ2aWNlQ2xpZW50SW5mbygpOyAgICAgIAotICAgICAgd3NJbmZvLnNldFNlcnZlckZhY3RvcnlJZChjbGllbnRJZHNfLmdldFNlcnZlcklkKCkpOwotICAgICAgd3NJbmZvLnNldFNlcnZlckluc3RhbmNlSWQoY2xpZW50SWRzXy5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCkpOwotICAgICAgd3NJbmZvLnNldFN0YXRlKFdlYlNlcnZpY2VTdGF0ZS5VTktOT1dOX0xJVEVSQUwpOwotICAgICAgd3NJbmZvLnNldFdlYlNlcnZpY2VSdW50aW1lSWQoY2xpZW50SWRzXy5nZXRSdW50aW1lSWQoKSk7Ci0gICAgICB3c0luZm8uc2V0V3NkbFVSTCh3c2RsVVJJXyk7Ci0KLSAgICAgIHdlYlNlcnZpY2VDbGllbnRfID0gd3NydC5nZXRXZWJTZXJ2aWNlQ2xpZW50KHdzSW5mbyk7Ci0gICAgICBXZWJTZXJ2aWNlU2NlbmFyaW8gc2NlbmFyaW8gPSBXZWJTZXJ2aWNlU2NlbmFyaW8uQ0xJRU5UX0xJVEVSQUw7Ci0gICAgICBpZiAocmVzb3VyY2VDb250ZXh0XyAhPSBudWxsKQotICAgICAgewotICAgICAgICBjb250ZXh0XyA9IG5ldyBTaW1wbGVDb250ZXh0KHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRlc3RfLCBmYWxzZSwgc2NlbmFyaW8sIHJlc291cmNlQ29udGV4dF8uaXNPdmVyd3JpdGVGaWxlc0VuYWJsZWQoKSwgcmVzb3VyY2VDb250ZXh0XwotICAgICAgICAgICAgLmlzQ3JlYXRlRm9sZGVyc0VuYWJsZWQoKSwgcmVzb3VyY2VDb250ZXh0Xy5pc0NoZWNrb3V0RmlsZXNFbmFibGVkKCkpOwotICAgICAgfQotICAgIH0KLSAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudEluaXRpYWxTZWxlY3Rpb24oSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uKQotICB7Ci0gICAgaWYgKGNsaWVudEluaXRpYWxQcm9qZWN0XyA9PSBudWxsKQotICAgIHsKLSAgICAgIGNsaWVudEluaXRpYWxQcm9qZWN0XyA9IGdldFByb2plY3RGcm9tSW5pdGlhbFNlbGVjdGlvbihzZWxlY3Rpb24pOwotICAgIH0KLSAgfQotICAKLSAgLy8gVGhpcyBpcyBmb3IgdGhlIEFudCBzY2VuYXJpbyB3aGVyZSB0aGUgY2xpZW50IHByb2plY3QgbmFtZSBjYW4gYmUgc2V0IGluIHRoZSBwcm9wZXJ0eSBmaWxlLgotICAvLyBJZiB0aGUgdXNlciBoYXMgc2V0IHRoZSBDbGllbnRQcm9qZWN0TmFtZSB1c2UgaXQgZm9yIGRlZmF1bHRpbmcgcHVycG9zZXMKLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50UHJvamVjdE5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLQkgIGNsaWVudFByb2plY3ROYW1lXyA9IG5hbWU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRJbml0aWFsUHJvamVjdChJUHJvamVjdCBjbGllbnRJbml0aWFsUHJvamVjdCkKLSAgewotICAgIGNsaWVudEluaXRpYWxQcm9qZWN0XyA9IGNsaWVudEluaXRpYWxQcm9qZWN0OwotICB9Ci0gIAotICAvKioKLSAgICogQHBhcmFtIGluaXRpYWxJbml0aWFsU2VsZWN0aW9uXyBUaGUgaW5pdGlhbEluaXRpYWxTZWxlY3Rpb25fIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEluaXRpYWxJbml0aWFsU2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGluaXRpYWxJbml0aWFsU2VsZWN0aW9uKQotICB7Ci0gICAgaW5pdGlhbFByb2plY3RfID0gZ2V0UHJvamVjdEZyb21Jbml0aWFsU2VsZWN0aW9uKGluaXRpYWxJbml0aWFsU2VsZWN0aW9uKTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0Q2xpZW50TmVlZEVBUigpCi0gIHsKLSAgICByZXR1cm4gY2xpZW50TmVlZEVBUl87Ci0gIH0KLQotICAvKioKLSAgICogQHBhcmFtIHBhcnNlcl8gVGhlIHBhcnNlcl8gdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZXNQYXJzZXIoV2ViU2VydmljZXNQYXJzZXIgcGFyc2VyKSB7Ci0gICAgcGFyc2VyXyA9IHBhcnNlcjsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0V3NkbFVSSShTdHJpbmcgd3NkbFVSSSkKLSAgewotICAgIHdzZGxVUklfID0gd3NkbFVSSTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0VGVzdFNlcnZpY2UoYm9vbGVhbiB0ZXN0U2VydmljZSkKLSAgewotICAgIHRlc3RfID0gdGVzdFNlcnZpY2U7Ci0gIH0gICAKLSAgCi0gIHB1YmxpYyB2b2lkIHNldFJlc291cmNlQ29udGV4dCggUmVzb3VyY2VDb250ZXh0IHJlc291cmNlQ29udGV4dCApCi0gIHsKLSAgICByZXNvdXJjZUNvbnRleHRfID0gcmVzb3VyY2VDb250ZXh0OyAgIAotICB9ICAKLSAgCi0gIHByaXZhdGUgSVByb2plY3QgZ2V0UHJvamVjdEZyb21Jbml0aWFsU2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikKLSAgewotICAgIGlmIChzZWxlY3Rpb24gIT0gbnVsbCAmJiBzZWxlY3Rpb24uc2l6ZSgpID09IDEpCi0gICAgewotICAgICAgT2JqZWN0IG9iaiA9IHNlbGVjdGlvbi5nZXRGaXJzdEVsZW1lbnQoKTsKLSAgICAgIGlmIChvYmogIT0gbnVsbCkgCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7IAotICAgICAgICAgIElSZXNvdXJjZSByZXNvdXJjZSA9IFJlc291cmNlVXRpbHMuZ2V0UmVzb3VyY2VGcm9tU2VsZWN0aW9uKG9iaik7Ci0gICAgICAgICAgaWYgKHJlc291cmNlPT1udWxsKSAKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgIElQcm9qZWN0IHAgPSBSZXNvdXJjZVV0aWxzLmdldFByb2plY3RPZihyZXNvdXJjZS5nZXRGdWxsUGF0aCgpKTsKLSAgICAgICAgICByZXR1cm4gcDsKLSAgICAgICAgfSBjYXRjaChDb3JlRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfSAgICAgICAgCi0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgU3RyaW5nW10gZ2V0QWxsRmxleGlibGVQcm9qZWN0cygpCi0gIHsKLSAgICBWZWN0b3IgdiA9IG5ldyBWZWN0b3IoKTsKLSAgICBJUHJvamVjdFtdIHByb2plY3RzID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0cygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJvamVjdHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgaWYgKCFwcm9qZWN0c1tpXS5nZXROYW1lKCkuZXF1YWxzKCJTZXJ2ZXJzIikgJiYgIXByb2plY3RzW2ldLmdldE5hbWUoKS5zdGFydHNXaXRoKCIuIikpCi0gICAgICB7Ci0gICAgICAgIHYuYWRkKHByb2plY3RzW2ldLmdldE5hbWUoKSk7Ci0gICAgICB9Ci0gICAgfSAgICAKLSAgICAKLSAgICByZXR1cm4gKFN0cmluZ1tdKXYudG9BcnJheShuZXcgU3RyaW5nWzBdKTsKLSAgICAKLSAgfQotICAKLSAgcHJvdGVjdGVkIGNsYXNzIEZhY2V0UnVudGltZU1hdGNoZXIKLSAgewotICAgIEZhY2V0TWF0Y2hlciBmYWNldE1hdGNoZXI7Ci0gICAgYm9vbGVhbiBydW50aW1lTWF0Y2hlczsKLSAgICAKLSAgICBwdWJsaWMgRmFjZXRNYXRjaGVyIGdldEZhY2V0TWF0Y2hlcigpCi0gICAgewotICAgICAgcmV0dXJuIGZhY2V0TWF0Y2hlcjsKLSAgICB9Ci0gICAgcHVibGljIHZvaWQgc2V0RmFjZXRNYXRjaGVyKEZhY2V0TWF0Y2hlciBmYWNldE1hdGNoZXIpCi0gICAgewotICAgICAgdGhpcy5mYWNldE1hdGNoZXIgPSBmYWNldE1hdGNoZXI7Ci0gICAgfQotICAgIHB1YmxpYyBib29sZWFuIGlzUnVudGltZU1hdGNoZXMoKQotICAgIHsKLSAgICAgIHJldHVybiBydW50aW1lTWF0Y2hlczsKLSAgICB9Ci0gICAgcHVibGljIHZvaWQgc2V0UnVudGltZU1hdGNoZXMoYm9vbGVhbiBydW50aW1lTWF0Y2hlcykKLSAgICB7Ci0gICAgICB0aGlzLnJ1bnRpbWVNYXRjaGVzID0gcnVudGltZU1hdGNoZXM7Ci0gICAgfSAgIAotICB9Ci0gIAotICBwcm90ZWN0ZWQgY2xhc3MgRGVmYXVsdFJ1bnRpbWVUcmlwbGV0Ci0gIHsKLSAgICBGYWNldE1hdGNoZXIgZmFjZXRNYXRjaGVyXzsKLSAgICBTdHJpbmcgcHJvamVjdE5hbWVfOwotICAgIFN0cmluZyBydW50aW1lSWRfOwotICAgIAotICAgIAotICAgIHB1YmxpYyBEZWZhdWx0UnVudGltZVRyaXBsZXQoKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIEZhY2V0TWF0Y2hlciBnZXRGYWNldE1hdGNoZXIoKQotICAgIHsKLSAgICAgIHJldHVybiBmYWNldE1hdGNoZXJfOwotICAgIH0KLSAgICBwdWJsaWMgdm9pZCBzZXRGYWNldE1hdGNoZXIoRmFjZXRNYXRjaGVyIGZhY2V0TWF0Y2hlcl8pCi0gICAgewotICAgICAgdGhpcy5mYWNldE1hdGNoZXJfID0gZmFjZXRNYXRjaGVyXzsKLSAgICB9Ci0gICAgcHVibGljIFN0cmluZyBnZXRQcm9qZWN0TmFtZSgpCi0gICAgewotICAgICAgcmV0dXJuIHByb2plY3ROYW1lXzsKLSAgICB9Ci0gICAgcHVibGljIHZvaWQgc2V0UHJvamVjdE5hbWUoU3RyaW5nIHByb2plY3ROYW1lXykKLSAgICB7Ci0gICAgICB0aGlzLnByb2plY3ROYW1lXyA9IHByb2plY3ROYW1lXzsKLSAgICB9Ci0gICAgcHVibGljIFN0cmluZyBnZXRSdW50aW1lSWQoKQotICAgIHsKLSAgICAgIHJldHVybiBydW50aW1lSWRfOwotICAgIH0KLSAgICBwdWJsaWMgdm9pZCBzZXRSdW50aW1lSWQoU3RyaW5nIHJ1bnRpbWVJZF8pCi0gICAgewotICAgICAgdGhpcy5ydW50aW1lSWRfID0gcnVudGltZUlkXzsKLSAgICB9ICAgICAgICAKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3J1bnRpbWUvUHJvamVjdFNlbGVjdGlvbldpZGdldC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3J1bnRpbWUvUHJvamVjdFNlbGVjdGlvbldpZGdldC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYWM0NTJhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy9ydW50aW1lL1Byb2plY3RTZWxlY3Rpb25XaWRnZXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMDQgMTI0MTQzICAgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyICAgICAgICAgIAotICogMjAwNjAyMjEgICAxMjI2NjEgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDIyMyAgIDEyOTAyMCByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwMjI3ICAgMTI0MzkyIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA0MTMgICAxMzU1ODEgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDQyNyAgIDEzODA1OCBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDUxMCAgIDE0MDg2OCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDYwNTI0ICAgMTQxMDI0IGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwODI5ICAgMTQ1NDQ5IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXZWIgc2VydmljZSBjbGllbnQgcHJvamVjdCB0eXBlIGRyb3Bkb3duIGRpc2FibGVkIGFmdGVyIHNlbGVjdGluZyBjbGllbnQgcHJvamVjdAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnJ1bnRpbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TZXJ2ZXJVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLkZhY2V0VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbW9uLkRlZmF1bHRpbmdVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucGx1Z2luLldlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5wcmVmZXJlbmNlcy5Qcm9qZWN0VG9wb2xvZ3lDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LldlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5kYXRhLlR5cGVSdW50aW1lU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5jb21tb24uVUlVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5TaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0RGF0YUV2ZW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUucmVzb3VyY2VzLklWaXJ0dWFsQ29tcG9uZW50OwotCi1wdWJsaWMgY2xhc3MgUHJvamVjdFNlbGVjdGlvbldpZGdldCBleHRlbmRzIFNpbXBsZVdpZGdldERhdGFDb250cmlidXRvciB7Ci0KLQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgcGx1Z2luSWRfID0gIm9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aSI7Ci0gIAotICAvL3ByaXZhdGUgU2VsZWN0aW9uTGlzdENob2ljZXMgcHJvamVjdHNfOwotICAKLSAgcHJpdmF0ZSBib29sZWFuIG5lZWRFQVJfOwotICAKLSAgcHJpdmF0ZSBUeXBlUnVudGltZVNlcnZlciB0cnNJZHNfOwotCi0gIHByaXZhdGUgTGlzdGVuZXIgc3RhdHVzTGlzdGVuZXJfOwotCi0gIHByaXZhdGUgVGV4dCBtZXNzYWdlVGV4dF87Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGlzQ2xpZW50XyA9IGZhbHNlOwotCi0gIHByaXZhdGUgYnl0ZSBDUkVBVEVfUFJPSkVDVCA9IChieXRlKSAxOwotCi0gIHByaXZhdGUgYnl0ZSBDUkVBVEVfRUFSID0gKGJ5dGUpIDI7Ci0KLSAgcHJpdmF0ZSBieXRlIEFERF9FQVJfQVNTT0NJQVRJT04gPSAoYnl0ZSkgNDsKLSAgCi0gIHByaXZhdGUgQ29tcG9zaXRlIHBhcmVudF87Ci0gIHByaXZhdGUgQ29tYm8gbW9kdWxlUHJvamVjdF87Ci0gIHByaXZhdGUgQ29tYm8gZWFyUHJvamVjdF87Ci0gIHByaXZhdGUgQ29tYm8gcHJvamVjdFR5cGVfOwotICAKLSAgcHJpdmF0ZSBTdHJpbmdbXSB0ZW1wbGF0ZXNfOwotCi0gIC8vcHJpdmF0ZSBTdHJpbmcgICBjb21wb25lbnRUeXBlXzsKLSAgCi0gIHByaXZhdGUgTW9kaWZ5TGlzdGVuZXIgcHJvamVjdFR5cGVMaXN0ZW5lcl87Ci0gIHByaXZhdGUgTW9kaWZ5TGlzdGVuZXIgbW9kdWxlUHJvamVjdExpc3RlbmVyXzsKLSAgcHJpdmF0ZSBNb2RpZnlMaXN0ZW5lciBlYXJQcm9qZWN0TGlzdGVuZXJfOwotCi0gIC8qCi0gICAqIENPTlRFWFRfSUQgUFdSUzAwMDYgZm9yIHRoZSBzZXJ2aWNlLXNpZGUgV2ViIHByb2plY3QgY29tYm8gYm94IG9mIHRoZQotICAgKiBydW50aW1lIHNlbGVjdGlvbiBQYWdlCi0gICAqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BXUlNfQ09NQk9fUFJPSkVDVCA9IHBsdWdpbklkXyArICIuUFdSUzAwMDYiOwotCi0gIC8vcHJpdmF0ZSBDb21ibyBtb2R1bGVfOwotCi0gIC8qIENPTlRFWFRfSUQgUFdSUzAwMTggZm9yIHRoZSBjbGllbnQgcHJvamVjdCB0eXBlIGNvbWJvIGJveCBvZiB0aGUgcnVudGltZSBzZWxlY3Rpb24gUGFnZSAqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BXUlNfQ09NQk9fQ0xJRU5UX1BST0pFQ1RfVFlQRSA9IHBsdWdpbklkXyArICIuUFdSUzAwMTgiOwotICAKLSAgLyogQ09OVEVYVF9JRCBQV1JTMDAyNCBmb3IgdGhlIHNlcnZpY2UgcHJvamVjdCB0eXBlIGNvbWJvIGJveCBvZiB0aGUgcnVudGltZSBzZWxlY3Rpb24gUGFnZSAqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BXUlNfQ09NQk9fU0VSVklDRV9QUk9KRUNUX1RZUEUgPSBwbHVnaW5JZF8gKyAiLlBXUlMwMDE4IjsgICAgCi0KLSAgLy9wcml2YXRlIENvbWJvIGVhck1vZHVsZV87Ci0KLSAgLyoKLSAgICogRGVmYXVsdCBDb25zdHJ1Y3RvcgotICAgKi8KLSAgcHVibGljIFByb2plY3RTZWxlY3Rpb25XaWRnZXQoKSB7Ci0gIH0KLQotICAvKgotICAgKiBQcm9qZWN0U2VsZWN0aW9uV2lkZ2V0IEBwYXJhbSBpc0NsaWVudAotICAgKi8KLSAgcHVibGljIFByb2plY3RTZWxlY3Rpb25XaWRnZXQoYm9vbGVhbiBpc0NsaWVudCkgewotICAgIHRoaXMuaXNDbGllbnRfID0gaXNDbGllbnQ7Ci0gIH0KLSAgICAKLSAgcHVibGljIFdpZGdldERhdGFFdmVudHMgYWRkQ29udHJvbHMoQ29tcG9zaXRlIHBhcmVudCwgTGlzdGVuZXIgc3RhdHVzTGlzdGVuZXIpIHsKLQkgIAotICAgIHBhcmVudF8gPSBwYXJlbnQ7Ci0gICAgVUlVdGlscyB1aVV0aWxzID0gbmV3IFVJVXRpbHMocGx1Z2luSWRfKTsKLQotICAgIHN0YXR1c0xpc3RlbmVyXyA9IHN0YXR1c0xpc3RlbmVyOwotCQkKLSAgICBpZiAoaXNDbGllbnRfKQotCXsKLQkgIG1vZHVsZVByb2plY3RfID0gdWlVdGlscy5jcmVhdGVDb21ibyhwYXJlbnQsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9DTElFTlRfUFJPSkVDVCwgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX0NMSUVOVF9QUk9KRUNULCBJTkZPUE9QX1BXUlNfQ09NQk9fUFJPSkVDVCwgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIgKTsKLSAgICAgIHByb2plY3RUeXBlXyA9IHVpVXRpbHMuY3JlYXRlQ29tYm8ocGFyZW50LCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfQ0xJRU5UX1RZUEUsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BXQ1JfQ09NQk9fQ0xJRU5UX1RZUEUsIElORk9QT1BfUFdSU19DT01CT19DTElFTlRfUFJPSkVDVF9UWVBFLCBTV1QuU0lOR0xFIHwgU1dULkJPUkRFUiB8U1dULlJFQURfT05MWSk7ICAgICAgCi0JICBlYXJQcm9qZWN0XyA9IHVpVXRpbHMuY3JlYXRlQ29tYm8ocGFyZW50LCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfQ0xJRU5UX0VBUl9QUk9KRUNULCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfQ0xJRU5UX0VBUl9QUk9KRUNULCBJTkZPUE9QX1BXUlNfQ09NQk9fUFJPSkVDVCwgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIgKTsKLSAgICB9Ci0gICAgZWxzZSAKLQl7ICAgICAgCi0JICBtb2R1bGVQcm9qZWN0XyA9IHVpVXRpbHMuY3JlYXRlQ29tYm8ocGFyZW50LCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfU0VSVklDRV9QUk9KRUNULCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfU0VSVklDRV9QUk9KRUNULCBJTkZPUE9QX1BXUlNfQ09NQk9fUFJPSkVDVCwgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIgKTsKLSAgICAgIHByb2plY3RUeXBlXyA9IHVpVXRpbHMuY3JlYXRlQ29tYm8ocGFyZW50LCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfU0VSVklDRV9UWVBFLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QV0NSX0NPTUJPX1NFUlZJQ0VfVFlQRSwgSU5GT1BPUF9QV1JTX0NPTUJPX1NFUlZJQ0VfUFJPSkVDVF9UWVBFLCBTV1QuU0lOR0xFIHwgU1dULkJPUkRFUiB8IFNXVC5SRUFEX09OTFkpOyAgICAgIAotCSAgZWFyUHJvamVjdF8gPSB1aVV0aWxzLmNyZWF0ZUNvbWJvKHBhcmVudCwgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1NFUlZJQ0VfRUFSX1BST0pFQ1QsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9TRVJWSUNFX0VBUl9QUk9KRUNULCBJTkZPUE9QX1BXUlNfQ09NQk9fUFJPSkVDVCwgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIgKTsKLSAgICB9Ci0gICAgCi0gICAgLy9UZW1wb3JhcmlseSByZW1vdmUgdGhlIGxpc3RlbmVycwotICAgIAotICAgIHByb2plY3RUeXBlTGlzdGVuZXJfID0gbmV3IE1vZGlmeUxpc3RlbmVyKCkKLSAgICB7Ci0gICAgICBwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGV2dCkgCi0gICAgICB7Ci0gICAgICAgIGhhbmRsZVByb2plY3RUeXBlQ2hhbmdlZCgpOwotICAgICAgICBzdGF0dXNMaXN0ZW5lcl8uaGFuZGxlRXZlbnQoIG51bGwgKTsKLSAgICAgIH0KLSAgICB9OyAgICAKLSAgICAKLQltb2R1bGVQcm9qZWN0TGlzdGVuZXJfID0gbmV3IE1vZGlmeUxpc3RlbmVyKCkKLQkgICAgICAgICAgICAgICAgICAgICAgICAgewotCSAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZXZ0KSAKLQkJCQkJICAgICAgICAgICB7Ci0JCQkJCSAgICAgICAgICAgICBoYW5kbGVQcm9qZWN0Q2hhbmdlZCgpOwotCQkJCQkgICAgICAgICAgICAgc3RhdHVzTGlzdGVuZXJfLmhhbmRsZUV2ZW50KCBudWxsICk7Ci0JCSAgICAgICAgICAgICAgICAgICAgICAgfQotCSAgICAgICAgICAgICAgICAgICAgICAgICB9OwotICAgIAotCWVhclByb2plY3RMaXN0ZW5lcl8gPSBuZXcgTW9kaWZ5TGlzdGVuZXIoKQotICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBldnQpIAotCQkJCSAgICAgICAgICAgIHsKLQkJCQkgICAgICAgICAgICAgIHN0YXR1c0xpc3RlbmVyXy5oYW5kbGVFdmVudCggbnVsbCApOwotCSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKLSAgCQkJCQkgIAotICAgIC8vIG1lc3NhZ2UgYXJlYQotICAgIG1lc3NhZ2VUZXh0XyA9IHVpVXRpbHMuY3JlYXRlVGV4dChwYXJlbnQsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9OT19MQUJFTCwgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX05PX0xBQkVMLCBudWxsLCBTV1QuV1JBUCB8IFNXVC5NVUxUSSB8IFNXVC5SRUFEX09OTFkpOwotICAgIHNldEVhclByb2plY3RJdGVtcygpOwotICAKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGxpc3RlbmVyc09uKCkKLSAgewotCXByb2plY3RUeXBlXy5hZGRNb2RpZnlMaXN0ZW5lcihwcm9qZWN0VHlwZUxpc3RlbmVyXyk7Ci0JbW9kdWxlUHJvamVjdF8uYWRkTW9kaWZ5TGlzdGVuZXIoIG1vZHVsZVByb2plY3RMaXN0ZW5lcl8gKTsKLQllYXJQcm9qZWN0Xy5hZGRNb2RpZnlMaXN0ZW5lciggZWFyUHJvamVjdExpc3RlbmVyXyApOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgbGlzdGVuZXJzT2ZmKCkKLSAgewotICAgIHByb2plY3RUeXBlXy5yZW1vdmVNb2RpZnlMaXN0ZW5lcihwcm9qZWN0VHlwZUxpc3RlbmVyXyk7Ci0gICAgbW9kdWxlUHJvamVjdF8ucmVtb3ZlTW9kaWZ5TGlzdGVuZXIoIG1vZHVsZVByb2plY3RMaXN0ZW5lcl8gKTsKLSAgICBlYXJQcm9qZWN0Xy5yZW1vdmVNb2RpZnlMaXN0ZW5lciggZWFyUHJvamVjdExpc3RlbmVyXyApOyAgCi0gIH0KLSAgICAKLSAgcHVibGljIFN0cmluZyBnZXRQcm9qZWN0TmFtZSgpCi0gIHsKLQlyZXR1cm4gbW9kdWxlUHJvamVjdF8uZ2V0VGV4dCgpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRQcm9qZWN0TmFtZSggU3RyaW5nIG5hbWUgKQotICB7Ci0JbGlzdGVuZXJzT2ZmKCk7Ci0gICAgbW9kdWxlUHJvamVjdF8uc2V0VGV4dCggbmFtZSApOwotICAgIGhhbmRsZVByb2plY3RDaGFuZ2VkKCk7Ci0gICAgdXBkYXRlRUFSU3RhdGUoKTsKLQlsaXN0ZW5lcnNPbigpOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldEVhclByb2plY3ROYW1lKCkKLSAgewotICAgIHJldHVybiBlYXJQcm9qZWN0Xy5nZXRUZXh0KCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEVhclByb2plY3ROYW1lKCBTdHJpbmcgbmFtZSApCi0gIHsgCi0JbGlzdGVuZXJzT2ZmKCk7Ci0JZWFyUHJvamVjdF8uc2V0VGV4dCggbmFtZSApOwotCWxpc3RlbmVyc09uKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENvbXBvbmVudFR5cGUoIFN0cmluZyB0eXBlICkKLSAgewotICAgIGxpc3RlbmVyc09mZigpOwotICAgIGlmICh0eXBlICE9IG51bGwgJiYgdHlwZS5sZW5ndGgoKT4wKQotICAgIHsKLSAgICAgIFN0cmluZyBsYWJlbCA9IEZhY2V0VXRpbHMuZ2V0VGVtcGxhdGVMYWJlbEJ5SWQodHlwZSk7Ci0JICBwcm9qZWN0VHlwZV8uc2V0VGV4dChsYWJlbCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHByb2plY3RUeXBlXy5zZXRUZXh0KCIiKTsKLSAgICAKLSAgICBoYW5kbGVQcm9qZWN0VHlwZUNoYW5nZWQoKTsKLSAgICBsaXN0ZW5lcnNPbigpOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldENvbXBvbmVudFR5cGUoKQotICB7Ci0gICAgaW50IGlkeCA9IHByb2plY3RUeXBlXy5nZXRTZWxlY3Rpb25JbmRleCgpOwotICAgIGlmICh0ZW1wbGF0ZXNfICE9IG51bGwgJiYgaWR4ID4gLTEpCi0gICAgewotICAgICAgcmV0dXJuIHRlbXBsYXRlc19baWR4XTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIFN0cmluZyB0ZW1wbGF0ZUxhYmVsID0gcHJvamVjdFR5cGVfLmdldFRleHQoKTsKLSAgICAgIFN0cmluZyB0ZW1wbGF0ZUlkID0gRmFjZXRVdGlscy5nZXRUZW1wbGF0ZUlkQnlMYWJlbCh0ZW1wbGF0ZUxhYmVsKTsKLSAgICAgIHJldHVybiB0ZW1wbGF0ZUlkOwotICAgIH0KLQotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXROZWVkRUFSKCkKLSAgewotICAgIHJldHVybiBuZWVkRUFSXzsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0TmVlZEVBUihib29sZWFuIGIpCi0gIHsKLSAgICBsaXN0ZW5lcnNPZmYoKTsKLSAgICBuZWVkRUFSXyA9IGI7Ci0gICAgaWYgKG5lZWRFQVJfKQotICAgIHsKLSAgICAgZWFyUHJvamVjdF8uc2V0RW5hYmxlZCh0cnVlKTsKLSAgICAgcG9wdWxhdGVFQVJDb21ib3MoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGVhclByb2plY3RfLnNldEVuYWJsZWQoZmFsc2UpOwotICAgICAgZWFyUHJvamVjdF8uc2V0VGV4dCgiIik7Ci0gICAgfQotICAgIGxpc3RlbmVyc09uKCk7Ci0gIH0gICAgCi0KLSAgcHVibGljIHZvaWQgc2V0VHlwZVJ1bnRpbWVTZXJ2ZXIoVHlwZVJ1bnRpbWVTZXJ2ZXIgdHJzKQotICB7Ci0gICAgdHJzSWRzXyA9IHRyczsKLSAgICBpZiAoZWFyUHJvamVjdF8gIT0gbnVsbCkKLSAgICB7Ci0gICAgCWxpc3RlbmVyc09mZigpOwotICAgICAgICB1cGRhdGVFQVJTdGF0ZSgpOwotICAgICAgICBsaXN0ZW5lcnNPbigpOwkKLSAgICB9CQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCByZWZyZXNoUHJvamVjdEl0ZW1zKCkKLSAgewotICAgIGxpc3RlbmVyc09mZigpOwotICAgIFN0cmluZyBzZWxlY3RlZE1vZHVsZVByb2plY3QgPSBtb2R1bGVQcm9qZWN0Xy5nZXRUZXh0KCk7ICAgIAotICAgIFN0cmluZyBydW50aW1lSWQgPSB0cnNJZHNfLmdldFJ1bnRpbWVJZCgpOwotICAgIFN0cmluZyB0eXBlSWQgPSB0cnNJZHNfLmdldFR5cGVJZCgpOwotICAgIAotICAgIC8vR2V0IGFsbCB0aGUgcHJvamVjdHMgdGhhdCBhcmUgY29tcGF0aWJsZSB3aXRoIHRoZSB0eXBlIGFuZCBydW50aW1lCi0gICAgU3RyaW5nW10gcHJvamVjdE5hbWVzID0gbnVsbDsKLSAgICBpZiAoaXNDbGllbnRfKQotICAgIHsKLSAgICAgIHByb2plY3ROYW1lcyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFByb2plY3RzRm9yQ2xpZW50VHlwZUFuZFJ1bnRpbWUodHlwZUlkLCBydW50aW1lSWQpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcHJvamVjdE5hbWVzID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0UHJvamVjdHNGb3JTZXJ2aWNlVHlwZUFuZFJ1bnRpbWUodHlwZUlkLCBydW50aW1lSWQpOwotICAgIH0KLSAgICAKLSAgICBtb2R1bGVQcm9qZWN0Xy5zZXRJdGVtcyhwcm9qZWN0TmFtZXMpOwotICAgIG1vZHVsZVByb2plY3RfLnNldFRleHQoc2VsZWN0ZWRNb2R1bGVQcm9qZWN0KTsKLSAgICBoYW5kbGVQcm9qZWN0Q2hhbmdlZCgpOwotICAgIHVwZGF0ZUVBUlN0YXRlKCk7Ci0gICAgbGlzdGVuZXJzT24oKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0RWFyUHJvamVjdEl0ZW1zKCkKLSAgewotICAgIElWaXJ0dWFsQ29tcG9uZW50W10gZWFycyA9IEoyRUVVdGlscy5nZXRBbGxFQVJDb21wb25lbnRzKCk7Ci0gICAgU3RyaW5nW10gZWFyUHJvamVjdE5hbWVzID0gbmV3IFN0cmluZ1tlYXJzLmxlbmd0aF07Ci0gICAgZm9yIChpbnQgaT0wOyBpPGVhclByb2plY3ROYW1lcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBlYXJQcm9qZWN0TmFtZXNbaV09ZWFyc1tpXS5nZXRQcm9qZWN0KCkuZ2V0TmFtZSgpOwotICAgIH0KLSAgICBlYXJQcm9qZWN0Xy5zZXRJdGVtcyhlYXJQcm9qZWN0TmFtZXMpOwotICAgIAotICAgIGlmIChlYXJQcm9qZWN0TmFtZXMubGVuZ3RoID4gMCkKLSAgICAgIGVhclByb2plY3RfLnNlbGVjdCgwKTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGhhbmRsZVByb2plY3RUeXBlQ2hhbmdlZCgpCi0gIHsKLSAgICB1cGRhdGVFQVJTdGF0ZSgpOyAgICAKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGhhbmRsZVByb2plY3RDaGFuZ2VkKCkKLSAgeyAKLSAgICB1cGRhdGVUZW1wbGF0ZXMoKTsgCi0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCB1cGRhdGVUZW1wbGF0ZXMoKQotICB7Ci0gICAgU3RyaW5nIHByb2plY3ROYW1lID0gbW9kdWxlUHJvamVjdF8uZ2V0VGV4dCgpOwotICAgIGlmIChwcm9qZWN0TmFtZSAhPSBudWxsICYmIHByb2plY3ROYW1lLmxlbmd0aCgpPjApCi0gICAgewotICAgICAgSVByb2plY3QgcHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSk7Ci0gICAgICBpZiAocHJvamVjdC5leGlzdHMoKSkKLSAgICAgIHsKLSAgICAgICAgcHJvamVjdFR5cGVfLnNldEVuYWJsZWQoZmFsc2UpOwotICAgICAgICBwcm9qZWN0VHlwZV8uZGVzZWxlY3RBbGwoKTsgICAgICAgIAotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBwb3B1bGF0ZVByb2plY3RUeXBlQ29tYm8oKTsKLSAgICAgICAgcHJvamVjdFR5cGVfLnNldEVuYWJsZWQodHJ1ZSk7Ci0gICAgICB9ICAgICAgCi0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgcG9wdWxhdGVQcm9qZWN0VHlwZUNvbWJvKCkKLSAgewotICAgIC8vR2V0IHRoZSBvbGQgdmFsdWUgaWYgdGhlcmUgd2FzIG9uZS4KLSAgICBTdHJpbmcgb2xkVGVtcGxhdGVJZCA9IGdldENvbXBvbmVudFR5cGUoKTsKLSAgICAKLSAgICBTdHJpbmdbXSB0ZW1wbGF0ZXMgPSBudWxsOwotICAgIGlmICh0cnNJZHNfICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKGlzQ2xpZW50XykKLSAgICAgIHsKLSAgICAgICAgdGVtcGxhdGVzID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0Q2xpZW50UHJvamVjdFRlbXBsYXRlcyh0cnNJZHNfLmdldFR5cGVJZCgpLCB0cnNJZHNfLmdldFJ1bnRpbWVJZCgpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgdGVtcGxhdGVzID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2VydmljZVByb2plY3RUZW1wbGF0ZXModHJzSWRzXy5nZXRUeXBlSWQoKSwgdHJzSWRzXy5nZXRSdW50aW1lSWQoKSk7ICAgICAgCi0gICAgICB9Ci0gICAgCi0gICAgICBTdHJpbmdbXSB0ZW1wbGF0ZUxhYmVscyA9IEZhY2V0VXRpbHMuZ2V0VGVtcGxhdGVMYWJlbHModGVtcGxhdGVzKTsKLSAgICAgIHByb2plY3RUeXBlXy5zZXRJdGVtcyh0ZW1wbGF0ZUxhYmVscyk7Ci0gICAgICB0ZW1wbGF0ZXNfID0gdGVtcGxhdGVzOwotICAgICAgCi0gICAgICBpZiAodGVtcGxhdGVzLmxlbmd0aCA+IDApCi0gICAgICB7Ci0gICAgICAKLSAgICAgICAgLy9TZWxlY3QgdGhlIHByZXZpb3VzIHRlbXBsYXRlIHNlbGVjdGlvbiBpZiB0aGF0IG9uZSBpcyBpbiB0aGUgbGlzdC4KLSAgICAgICAgaW50IGlkeCA9IGdldEluZGV4T2ZUZW1wbGF0ZUlkKHRlbXBsYXRlcywgb2xkVGVtcGxhdGVJZCk7Ci0gICAgICAgIGlmIChpZHggPiAtMSkgICAgICAgIAotICAgICAgICB7Ci0gICAgICAgICAgcHJvamVjdFR5cGVfLnNlbGVjdChpZHgpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIC8vIFNlbGVjdCB0aGUgcHJlZmVycmVkIGNsaWVudCBwcm9qZWN0IHR5cGUuCi0gICAgICAgICAgUHJvamVjdFRvcG9sb2d5Q29udGV4dCBwdGMgPSBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFByb2plY3RUb3BvbG9neUNvbnRleHQoKTsKLSAgICAgICAgICBTdHJpbmdbXSBwcmVmZXJyZWRUZW1wbGF0ZUlkcyA9IG51bGw7Ci0gICAgICAgICAgaWYgKGlzQ2xpZW50XykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBwcmVmZXJyZWRUZW1wbGF0ZUlkcyA9IHB0Yy5nZXRDbGllbnRUeXBlcygpOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgcHJlZmVycmVkVGVtcGxhdGVJZHMgPSBwdGMuZ2V0U2VydmljZVR5cGVzKCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICAgIGJvb2xlYW4gc2VsZWN0ZWQgPSBmYWxzZTsKLSAgICAgICAgICBvdXRlcjogZm9yIChpbnQgaiA9IDA7IGogPCBwcmVmZXJyZWRUZW1wbGF0ZUlkcy5sZW5ndGg7IGorKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRlbXBsYXRlcy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIHRlbXBsYXRlSWQgPSB0ZW1wbGF0ZXNbaV07Ci0gICAgICAgICAgICAgIGlmICh0ZW1wbGF0ZUlkLmVxdWFscyhwcmVmZXJyZWRUZW1wbGF0ZUlkc1tqXSkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwcm9qZWN0VHlwZV8uc2VsZWN0KGkpOwotICAgICAgICAgICAgICAgIHNlbGVjdGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhayBvdXRlcjsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLQotICAgICAgICAgIGlmICghc2VsZWN0ZWQpCi0gICAgICAgICAgewotICAgICAgICAgICAgcHJvamVjdFR5cGVfLnNlbGVjdCgwKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0KLSAgcHJpdmF0ZSBpbnQgZ2V0SW5kZXhPZlRlbXBsYXRlSWQoU3RyaW5nW10gdGVtcGxhdGVJZHMsIFN0cmluZyB0ZW1wbGF0ZUlkKQotICB7Ci0gICAgZm9yIChpbnQgaT0wOyBpPHRlbXBsYXRlSWRzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGlmICh0ZW1wbGF0ZUlkc1tpXS5lcXVhbHModGVtcGxhdGVJZCkpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBpOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gLTE7ICAgIAotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgdXBkYXRlRUFSU3RhdGUoKQotICB7Ci0gICAgICBpZighcHJvamVjdE5lZWRzRUFSKG1vZHVsZVByb2plY3RfLmdldFRleHQoKSkpCi0gICAgICB7Ci0JICAgIGVhclByb2plY3RfLnNldEVuYWJsZWQoZmFsc2UpOyAgIAotICAgICAgICBlYXJQcm9qZWN0Xy5zZXRUZXh0KCIiKTsKLSAgICAgICAgbmVlZEVBUl8gPSBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgbmVlZEVBUl8gPSB0cnVlOwotICAgICAgICBlYXJQcm9qZWN0Xy5zZXRFbmFibGVkKHRydWUpOwotICAgICAgICBwb3B1bGF0ZUVBUkNvbWJvcygpOwotICAgICAgfQotICAgIAotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHBvcHVsYXRlRUFSQ29tYm9zKCkKLSAgewotICAgIGVhclByb2plY3RfLnJlbW92ZUFsbCgpOyAgICAKLSAgICBzZXRFYXJQcm9qZWN0SXRlbXMoKTsgCi0gICAgCi0gICAgU3RyaW5nIGVhck5hbWUgPSBEZWZhdWx0aW5nVXRpbHMuZ2V0RGVmYXVsdEVBUlByb2plY3ROYW1lKG1vZHVsZVByb2plY3RfLmdldFRleHQoKSk7Ci0gICAgZWFyUHJvamVjdF8uc2V0VGV4dChlYXJOYW1lKTsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBwcm9qZWN0TmVlZHNFQVIoU3RyaW5nIHByb2plY3ROYW1lKQotICB7Ci0gICAgLy9JZiB0aGUgcHJvamVjdCBpcyBhIHNpbXBsZSBKYXZhIHByb2plY3Qgb3IgdGhlIHByb2plY3QgdHlwZSBpcyAKLSAgICAvL0phdmEgdXRpbGl0eSByZXR1cm4gZmFsc2UuCi0gICAgaWYgKHByb2plY3ROYW1lICE9IG51bGwgJiYgcHJvamVjdE5hbWUubGVuZ3RoKCk+MCkKLSAgICB7Ci0gICAgICBJUHJvamVjdCBwcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLSAgICAgIGlmIChwcm9qZWN0LmV4aXN0cygpKQotICAgICAgewotICAgICAgICBpZiAoRmFjZXRVdGlscy5pc0phdmFQcm9qZWN0KHByb2plY3QpKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy9Qcm9qZWN0IGRpZG4ndCBydWxlIG91dCB0aGUgbmVlZCBmb3IgYW4gRUFSCi0gICAgLy9zbyBjaGVjayB0aGUgcHJvZWN0IHR5cGUKLSAgICBTdHJpbmcgdGVtcGxhdGVJZCA9IGdldENvbXBvbmVudFR5cGUoKTsKLSAgICBpZiAodGVtcGxhdGVJZCAhPSBudWxsICYmIHRlbXBsYXRlSWQubGVuZ3RoKCk+MCkKLSAgICB7Ci0gICAgICBpZiAoRmFjZXRVdGlscy5pc1V0aWxpdHlUZW1wbGF0ZSh0ZW1wbGF0ZUlkKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICAgICAgCi0JLy9Qcm9qZWN0IG9yIHByb2plY3QgdHlwZSBkaWRuJ3QgcnVsZSBvdXQgdGhlIG5lZWQgZm9yIGFuIEVBUgotICAgIC8vc28gY2hlY2sgdGhlIHNlcnZlciB0eXBlLgotICAgIGlmICh0cnNJZHNfICE9IG51bGwgJiYgdHJzSWRzXy5nZXRTZXJ2ZXJJZCgpICE9IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nIHRhcmdldElkID0gU2VydmVyVXRpbHMuZ2V0UnVudGltZVRhcmdldElkRnJvbUZhY3RvcnlJZCh0cnNJZHNfLmdldFNlcnZlcklkKCkpOwotICAJICBpZiAodGFyZ2V0SWQhPW51bGwgJiYgdGFyZ2V0SWQubGVuZ3RoKCk+MCkKLSAgCSAgewotICAJICAgIGlmICghU2VydmVyVXRpbHMuaXNUYXJnZXRWYWxpZEZvckVBUih0YXJnZXRJZCwiMTMiKSkgLy9ybSBqMmVlCi0gIAkgICAgewotICAJICAgICAgcmV0dXJuIGZhbHNlOwotICAJICAgIH0KLSAgCSAgfQotICAgIH0KLSAgCSAKLSAgCXJldHVybiB0cnVlOyAgICAKLSAgfQotICAKLSAgCi0gIHByaXZhdGUgSVN0YXR1cyBoYW5kbGVTZXRNZXNzYWdlVGV4dCgpIHsKLSAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgdHJ5IHsKLSAgICAgIGJ5dGUgcmVzdWx0ID0gKGJ5dGUpIDA7Ci0gICAgICBpZiAobW9kdWxlUHJvamVjdF8uZ2V0VGV4dCgpLmxlbmd0aCgpICE9IDAgJiYgZWFyUHJvamVjdF8uZ2V0VGV4dCgpLmxlbmd0aCgpICE9IDApIHsKLSAgICAgICAgU3RyaW5nIHByb2plY3RUZXh0ID0gbW9kdWxlUHJvamVjdF8uZ2V0VGV4dCgpOwotICAgICAgICBTdHJpbmcgZWFyVGV4dCA9IGVhclByb2plY3RfLmdldFRleHQoKTsKLSAgICAgICAgSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlVXRpbHMuZ2V0V29ya3NwYWNlUm9vdCgpLmdldFByb2plY3QocHJvamVjdFRleHQpOwotICAgICAgICBJUHJvamVjdCBlYXIgPSBSZXNvdXJjZVV0aWxzLmdldFdvcmtzcGFjZVJvb3QoKS5nZXRQcm9qZWN0KGVhclRleHQpOwotICAgICAgICBpZiAocHJvamVjdCAhPSBudWxsKSB7Ci0gICAgICAgICAgaWYgKCFwcm9qZWN0LmV4aXN0cygpKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSAoYnl0ZSkgKHJlc3VsdCB8IENSRUFURV9QUk9KRUNUKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKCFlYXIuZXhpc3RzKCkpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IChieXRlKSAocmVzdWx0IHwgQ1JFQVRFX0VBUik7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgaWYgKHByb2plY3QuZXhpc3RzKCkgJiYgSjJFRVV0aWxzLmV4aXN0cyhwcm9qZWN0KSAmJiBlYXIuZXhpc3RzKCkgJiYgSjJFRVV0aWxzLmV4aXN0cyhlYXIpKSB7Ci0gICAgICAgICAgICBpZiAoIUoyRUVVdGlscy5pc0NvbXBvbmVudEFzc29jaWF0ZWQoZWFyLCBwcm9qZWN0KSkgcmVzdWx0ID0gKGJ5dGUpIChyZXN1bHQgfCBBRERfRUFSX0FTU09DSUFUSU9OKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmIChpc0NsaWVudF8pIHsKLSAgICAgICAgbWVzc2FnZVRleHRfLnNldFRleHQoZ2V0VmFsaWRhdGlvbk1lc3NhZ2UocmVzdWx0LCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0NMSUVOVF9TVUIpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICBtZXNzYWdlVGV4dF8uc2V0VGV4dChnZXRWYWxpZGF0aW9uTWVzc2FnZShyZXN1bHQsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfU0VSVklDRV9TVUIpKTsKLSAgICAgIH0KLSAgICAgIHBhcmVudF8ubGF5b3V0KCk7ICAvL2ZvcmNlIG1lc3NhZ2UgYXJlYSByZXNpemUvd3JhcAotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfTVNHX1ZBTElEQVRJT05fSU5URVJOQUxfRVJST1IsIGUgKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN0YXR1czsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0VmFsaWRhdGlvbk1lc3NhZ2UoYnl0ZSByZXN1bHQsIFN0cmluZyBzZXJ2aWNlT3JDbGllbnQpIHsKLSAgICBTdHJpbmcgbXNnID0gbnVsbDsKLSAgICBzd2l0Y2ggKHJlc3VsdCkgewotICAgIGNhc2UgMDoKLSAgICAgIHJldHVybiAiIjsKLSAgICBjYXNlIDE6Ci0gICAgY2FzZSA1OgotICAgICAgbXNnID0gQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19QUk9KRUNUX1dJTExfQkVfQ1JFQVRFRDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgMjoKLSAgICBjYXNlIDY6Ci0gICAgICBtc2cgPSBDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VBUl9XSUxMX0JFX0NSRUFURUQ7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDM6Ci0gICAgY2FzZSA3OgotICAgICAgbXNnID0gQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19QUk9KRUNUX0FORF9FQVJfQ1JFQVRFRDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgNDoKLSAgICAgIG1zZyA9IENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRUFSX1dJTExfQkVfQVNTT0NJQVRFRDsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gbXNnICE9IG51bGwgPyBOTFMuYmluZChtc2csIG5ldyBPYmplY3RbXSB7IHNlcnZpY2VPckNsaWVudH0pIDogIiI7Ci0gIH0KLQotICBwdWJsaWMgSVN0YXR1cyBnZXRTdGF0dXMoKSAKLSAgewotICAgIElTdGF0dXMgZmluYWxTdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAgIGhhbmRsZVNldE1lc3NhZ2VUZXh0KCk7Ci0gICAgU3RyaW5nIHByb2plY3RUZXh0ID0gbW9kdWxlUHJvamVjdF8uZ2V0VGV4dCgpOwotICAgIFN0cmluZyBlYXJUZXh0ID0gZWFyUHJvamVjdF8uZ2V0VGV4dCgpOwotICAgIAotICAgIGlmIChwcm9qZWN0VGV4dD09bnVsbCB8fCBwcm9qZWN0VGV4dC5sZW5ndGgoKT09MCkKLSAgICB7Ci0gICAgICBpZiAoaXNDbGllbnRfKQotICAgICAgICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIE5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfQ0xJRU5UX1BST0pFQ1RfRU1QVFksIG5ldyBTdHJpbmdbXXsiIn0gKSApOwotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIE5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfU0VSVklDRV9QUk9KRUNUX0VNUFRZLCBuZXcgU3RyaW5nW117IiJ9ICkgKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG5lZWRFQVJfICYmIChlYXJUZXh0PT1udWxsIHx8IGVhclRleHQubGVuZ3RoKCk9PTApKQotICAgIHsKLSAgICAgIGlmIChpc0NsaWVudF8pCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19DTElFTlRfRUFSX0VNUFRZLCBuZXcgU3RyaW5nW117IiJ9ICkgKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX1NFUlZJQ0VfRUFSX0VNUFRZLCBuZXcgU3RyaW5nW117IiJ9ICkgKTsKLSAgICAgIH0gICAgICAKLSAgICB9Ci0gICAgCi0gICAgLy9JZiB0aGUgcHJvamVjdCBhbmQgRUFSIGJvdGggZXhpc3QgYW5kIHRoZSBwcm9qZWN0IGlzIG5vdCBhbHJlYWR5IGFzc29jaWF0ZWQgd2l0aCB0aGUgRUFSLCBlbnN1cmUKLSAgICAvL3RoZXkgY2FuIGJlIGFzc29jaWF0ZWQuCi0gICAgaWYgKG5lZWRFQVJfKQotICAgIHsKLSAgICAgIElQcm9qZWN0IHAgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QocHJvamVjdFRleHQudHJpbSgpKTsKLSAgICAgIElQcm9qZWN0IGVwID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KGVhclRleHQudHJpbSgpKTsKLSAgICAgIGlmIChwLmV4aXN0cygpICYmIGVwLmV4aXN0cygpKQotICAgICAgewotICAgICAgICBpZiAoIUoyRUVVdGlscy5pc0NvbXBvbmVudEFzc29jaWF0ZWQoZXAscCkpCi0gICAgICAgIHsKLSAgICAgICAgICBJU3RhdHVzIGFzc29jaWF0ZVN0YXR1cyA9IEoyRUVVdGlscy5jYW5Bc3NvY2lhdGVQcm9qZWN0VG9FQVIocCwgZXApOwotICAgICAgICAgIGlmIChhc3NvY2lhdGVTdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLkVSUk9SKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpc0NsaWVudF8pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19DTElFTlRfQ0FOTk9UX0FTU09DSUFURSwgbmV3IFN0cmluZ1tde3AuZ2V0TmFtZSgpLCBlcC5nZXROYW1lKCksIGFzc29jaWF0ZVN0YXR1cy5nZXRNZXNzYWdlKCl9ICkgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX1NFUlZJQ0VfQ0FOTk9UX0FTU09DSUFURSwgbmV3IFN0cmluZ1tde3AuZ2V0TmFtZSgpLCBlcC5nZXROYW1lKCksIGFzc29jaWF0ZVN0YXR1cy5nZXRNZXNzYWdlKCl9ICkgKTsKLSAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZpbmFsU3RhdHVzOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC9DbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC9DbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3MTk4MjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzU1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDUyNCAgIDE0MjYzNSBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKiAyMDA2MDYwOCAgIDE0NTUyOSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmRhdGEuVHlwZVJ1bnRpbWVTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmV4dC50ZXN0LldlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQudGVzdC5XZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLklDb21tYW5kRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuc2VsZWN0aW9uLkJvb2xlYW5TZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuc2VsZWN0aW9uLlNlbGVjdGlvbkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JU3RhdHVzSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlVGVzdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LlRlc3RJbmZvOwotCi0KLS8qCi0qIFRoZSBKU1BHZW5lcmF0aW9uIHRhc2sgcnVucyB0aGUganNwIGdlbmVyYXRpb24gZW5naW5lIGZvdW5kIGluIHRoZSAKLSogSkJXaXphcmQgUGx1Z2luCi0qCi0qCi0qLwotcHVibGljIGNsYXNzIENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotICBwcml2YXRlIFdlYlNlcnZpY2VUZXN0UmVnaXN0cnkgdGVzdFJlZ2lzdHJ5OwotICBwcml2YXRlIFNlbGVjdGlvbkxpc3QgdGVzdEZhY2lsaXRpZXM7Ci0gIHByaXZhdGUgU3RyaW5nIGpzcEZvbGRlcjsKLSAgcHJpdmF0ZSBCb29sZWFuU2VsZWN0aW9uW10gbWV0aG9kczsKLSAgcHJpdmF0ZSBTdHJpbmcgc2FtcGxlU2VydmVyVHlwZUlEOwotICBwcml2YXRlIElTZXJ2ZXIgc2FtcGxlRXhpc3RpbmdTZXJ2ZXI7Ci0gIHByaXZhdGUgU3RyaW5nIHByb3h5QmVhbjsKLSAgcHJpdmF0ZSBib29sZWFuIHJ1blRlc3RDbGllbnQ7Ci0gIHByaXZhdGUgU3RyaW5nIHNhbXBsZVByb2plY3Q7Ci0gIHByaXZhdGUgU3RyaW5nIHNhbXBsZVA7Ci0gIHByaXZhdGUgU3RyaW5nIGNsaWVudFByb2plY3Q7Ci0gIHByaXZhdGUgU3RyaW5nIGNsaWVudFA7Ci0gIHByaXZhdGUgU3RyaW5nIGNsaWVudEM7Ci0gIHByaXZhdGUgYm9vbGVhbiBjbGllbnROZWVkRUFSOwotICBwcml2YXRlIFN0cmluZyBjbGllbnRFYXJQcm9qZWN0TmFtZTsKLSAgcHJpdmF0ZSBTdHJpbmcgY2xpZW50RWFyQ29tcG9uZW50TmFtZTsKLSAgcHJpdmF0ZSBUeXBlUnVudGltZVNlcnZlciBzZXJ2ZXJJZHM7Ci0gIHByaXZhdGUgU3RyaW5nIHNlcnZpY2VQcm9qZWN0OwotICBwcml2YXRlIFN0cmluZyBzZXJ2aWNlUDsKLSAgcHJpdmF0ZSBTdHJpbmcgd3NkbFNlcnZpY2VVUkw7Ci0gIHByaXZhdGUgYm9vbGVhbiBpc1Rlc3RXaWRnZXQgPSBmYWxzZTsKLSAgcHJpdmF0ZSBTdHJpbmcgc2V0RW5kcG9pbnRNZXRob2Q7Ci0gIHByaXZhdGUgTGlzdCBlbmRwb2ludHM7Ci0KLSAgcHVibGljIENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQgKCkKLSAgewotICAgIHRlc3RSZWdpc3RyeSA9IFdlYlNlcnZpY2VUZXN0UmVnaXN0cnkuZ2V0SW5zdGFuY2UoKTsKLSAgfQotCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7ICAgIAotICAgIElFbnZpcm9ubWVudCBlbnYgPSBnZXRFbnZpcm9ubWVudCgpOwotICAJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAJU3RyaW5nIGNsaWVudFRlc3RJRCA9IHRlc3RGYWNpbGl0aWVzLmdldFNlbGVjdGlvbigpOwotICAJCi0JLy9HZXQgdGhlIHdlYnNlcnZpY2UgZXh0ZW5zaW9uCi0JCi0JV2ViU2VydmljZVRlc3RFeHRlbnNpb24gd3NjdGUgPSAoV2ViU2VydmljZVRlc3RFeHRlbnNpb24pdGVzdFJlZ2lzdHJ5LmdldFdlYlNlcnZpY2VFeHRlbnNpb25zQnlOYW1lKGNsaWVudFRlc3RJRCk7Ci0gICAgSVdlYlNlcnZpY2VUZXN0ZXIgaXdzdCA9IChJV2ViU2VydmljZVRlc3Rlcil3c2N0ZS5nZXRXZWJTZXJ2aWNlRXhlY3V0YWJsZUV4dGVuc2lvbigpOwotCVRlc3RJbmZvIHRlc3RJbmZvID0gZ2V0VGVzdEluZm8oKTsKLQkKLQlzdGF0dXMgPSBjb21tYW5kRmFjdG9yeUV4ZWN1dGlvbihpd3N0LmdlbmVyYXRlKHRlc3RJbmZvKSxlbnYsIG1vbml0b3IgKTsKLQlpZihzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpewotCSAgcmV0dXJuIHN0YXR1czsJCi0JfQotCQotCXRlc3RJbmZvLnNldFJ1blRlc3RDbGllbnQocnVuVGVzdENsaWVudCk7Ci0JCi0Jc3RhdHVzID0gY29tbWFuZEZhY3RvcnlFeGVjdXRpb24oaXdzdC5sYXVuY2godGVzdEluZm8pLGVudiwgbW9uaXRvciApOwotCWlmKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUil7Ci0JCXJldHVybiBzdGF0dXM7CQotCX0KLSAgICByZXR1cm4gc3RhdHVzOwotICB9Ci0gIAotICBwcml2YXRlIElTdGF0dXMgY29tbWFuZEZhY3RvcnlFeGVjdXRpb24oSUNvbW1hbmRGYWN0b3J5IGNvbW1hbmRGYWN0b3J5LElFbnZpcm9ubWVudCBlbnYsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApCi0gIHsKLSAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7ICAJCi0JCi0Jd2hpbGUoY29tbWFuZEZhY3RvcnkuaGFzTmV4dCgpKQotICB7Ci0gICAgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gb3BlcmF0aW9uID0gY29tbWFuZEZhY3RvcnkuZ2V0TmV4dENvbW1hbmQoKTsKLSAgICBvcGVyYXRpb24uc2V0RW52aXJvbm1lbnQoIGVudiApOwotICAgIAotICAgIHRyeQotICAgIHsKLSAgICAgIHN0YXR1cyA9IG9wZXJhdGlvbi5leGVjdXRlKCBtb25pdG9yLCBudWxsICk7Ci0gICAgfQotICAgIGNhdGNoKCBFeGNlcHRpb24gZXhjICkKLSAgICB7Ci0gICAgICBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggZXhjICk7ICAKLSAgICB9Ci0gICAgCi0JICBpZihzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpewotCSAgICBJU3RhdHVzSGFuZGxlciBzSGFuZGxlciA9IGVudi5nZXRTdGF0dXNIYW5kbGVyKCk7Ci0JCXNIYW5kbGVyLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0JCXJldHVybiBzdGF0dXM7Ci0JICB9Ci0gICAgfQotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0KLSAgCi0gIAotICAvL0hlbHBlciBtZXRob2Qgd2hpY2ggc2V0cyB1cCB0aGUgVGVzdEluZm8gZGF0YSBzdHJ1Y3R1cmUKLSAgcHJpdmF0ZSBUZXN0SW5mbyBnZXRUZXN0SW5mbygpCi0gIHsKLQlJU2VydmVyIHNlcnZpY2VFeGlzdGluZ1NlcnZlciA9IG51bGw7Ci0JU3RyaW5nIHNlcnZpY2VTZXJ2ZXJUeXBlSUQgPSBudWxsOwotCQkKLQkvL3NlcnZpY2Ugc2VydmVyIGluZm8KLQlpZihzZXJ2ZXJJZHMgIT0gbnVsbCl7Ci0JICBpZiAoc2VydmVySWRzLmdldFNlcnZlckluc3RhbmNlSWQoKSAhPSBudWxsKSAKLQkgICAgc2VydmljZUV4aXN0aW5nU2VydmVyID0gU2VydmVyQ29yZS5maW5kU2VydmVyKHNlcnZlcklkcy5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCkpOwotCX0JCi0JaWYgKHNlcnZpY2VFeGlzdGluZ1NlcnZlciAhPSBudWxsKQotICAgICAgc2VydmljZVNlcnZlclR5cGVJRCA9IHNlcnZpY2VFeGlzdGluZ1NlcnZlci5nZXRTZXJ2ZXJUeXBlKCkuZ2V0SWQoKTsKLSAgICAKLQkKLQlpZihjbGllbnRQcm9qZWN0ICE9IG51bGwpewotICAJICBpbnQgaW5kZXggPSBjbGllbnRQcm9qZWN0LmluZGV4T2YoIi8iKTsKLSAgICAgIGlmIChpbmRleCE9LTEpewotICAgICAgICBjbGllbnRQID0gY2xpZW50UHJvamVjdC5zdWJzdHJpbmcoMCxpbmRleCk7Ci0gICAgICAgIGNsaWVudEMgPSBjbGllbnRQcm9qZWN0LnN1YnN0cmluZyhpbmRleCArIDEpOwotICAgICAgfQotICAJfQotCi0gIAotCWlmKHNhbXBsZVByb2plY3QgIT0gbnVsbCl7Ci0JICBpbnQgaW5kZXggPSBzYW1wbGVQcm9qZWN0LmluZGV4T2YoIi8iKTsKLSAgICAgIGlmIChpbmRleCE9LTEpewotICAgICAgICBzYW1wbGVQID0gc2FtcGxlUHJvamVjdC5zdWJzdHJpbmcoMCxpbmRleCk7Ci0gICAgICB9Ci0JfQotCQotCVRlc3RJbmZvIHRlc3RJbmZvID0gbmV3IFRlc3RJbmZvKCk7ICAKLQl0ZXN0SW5mby5zZXRDbGllbnRFeGlzdGluZ1NlcnZlcihzYW1wbGVFeGlzdGluZ1NlcnZlcik7Ci0JdGVzdEluZm8uc2V0Q2xpZW50U2VydmVyVHlwZUlEKHNhbXBsZVNlcnZlclR5cGVJRCk7Ci0JdGVzdEluZm8uc2V0SnNwRm9sZGVyKGpzcEZvbGRlcik7Ci0JdGVzdEluZm8uc2V0RXh0ZXJuYWxCcm93c2VyKGZhbHNlKTsKLQl0ZXN0SW5mby5zZXRFbmRwb2ludChlbmRwb2ludHMpOwotCXRlc3RJbmZvLnNldEdlbmVyYXRpb25Qcm9qZWN0KHNhbXBsZVApOwotCXRlc3RJbmZvLnNldFByb3h5QmVhbihwcm94eUJlYW4pOwotCXRlc3RJbmZvLnNldFNldEVuZHBvaW50TWV0aG9kKHNldEVuZHBvaW50TWV0aG9kKTsKLQl0ZXN0SW5mby5zZXRDbGllbnRQcm9qZWN0KGNsaWVudFApOwotCXRlc3RJbmZvLnNldENsaWVudE1vZHVsZShjbGllbnRDKTsKLQl0ZXN0SW5mby5zZXRDbGllbnROZWVkRUFSKGNsaWVudE5lZWRFQVIpOwotCXRlc3RJbmZvLnNldENsaWVudEVBUlByb2plY3QoY2xpZW50RWFyUHJvamVjdE5hbWUpOwotCXRlc3RJbmZvLnNldENsaWVudEVBUk1vZHVsZShjbGllbnRFYXJDb21wb25lbnROYW1lKTsKLQl0ZXN0SW5mby5zZXRNZXRob2RzKG1ldGhvZHMpOwotCQotCS8vaWYgdGhpcyBpcyBhIGNsaWVudCBzY2VuYXJpbyB0aGUgc2VydmljZSBzdHVmZiBpcyBlbXB0eQotCWlmKHNlcnZpY2VTZXJ2ZXJUeXBlSUQgPT0gbnVsbCl7Ci0JICBzZXJ2aWNlU2VydmVyVHlwZUlEID0gc2FtcGxlU2VydmVyVHlwZUlEOwotCSAgc2VydmljZUV4aXN0aW5nU2VydmVyID0gc2FtcGxlRXhpc3RpbmdTZXJ2ZXI7Ci0JfQotCQotCQotCXRlc3RJbmZvLnNldFNlcnZpY2VTZXJ2ZXJUeXBlSUQoc2VydmljZVNlcnZlclR5cGVJRCk7Ci0JdGVzdEluZm8uc2V0U2VydmljZUV4aXN0aW5nU2VydmVyKHNlcnZpY2VFeGlzdGluZ1NlcnZlcik7Ci0JLy93c2RsIHN0dWZmCi0JdGVzdEluZm8uc2V0U2VydmljZVByb2plY3QoZ2V0V1NETFByb2plY3QoKSk7Ci0JdGVzdEluZm8uc2V0V3NkbFNlcnZpY2VVUkwod3NkbFNlcnZpY2VVUkwpOwotCXJldHVybiB0ZXN0SW5mbzsKLSAgfQotICAgCi0KLSAgCi0gIC8vVGhlIHRlc3QgZmFjaWxpdGllcyByZXRyaWV2ZWQgZnJvbSB0aGUgZXh0ZW5zaW9uCi0gIC8vcGx1cyB0aGUgZGVmYXVsdAotICBwdWJsaWMgdm9pZCBzZXRUZXN0RmFjaWxpdHkoU2VsZWN0aW9uTGlzdCBzZWxlY3Rpb24pCi0gIHsKLSAgICB0ZXN0RmFjaWxpdGllcyA9IHNlbGVjdGlvbjsKLSAgfSAKLSAgCi0gIHB1YmxpYyB2b2lkIHNldEZvbGRlcihTdHJpbmcgZm9sZGVyKQotICB7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEpzcEZvbGRlcihTdHJpbmcganNwRm9sZGVyKQotICB7Ci0gIAl0aGlzLmpzcEZvbGRlciA9IGpzcEZvbGRlcjsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0TWV0aG9kcyhCb29sZWFuU2VsZWN0aW9uW10gbWV0aG9kcykKLSAgewotICAgIHRoaXMubWV0aG9kcyA9IG1ldGhvZHM7ICAKLSAgfQotIAotICBwdWJsaWMgdm9pZCBzZXRSdW5UZXN0Q2xpZW50KGJvb2xlYW4gcnVuVGVzdENsaWVudCkKLSAgewotICAgIHRoaXMucnVuVGVzdENsaWVudCA9IHJ1blRlc3RDbGllbnQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFByb3h5QmVhbihTdHJpbmcgcHJveHlCZWFuKQotICB7Ci0gIAl0aGlzLnByb3h5QmVhbiA9IHByb3h5QmVhbjsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U2FtcGxlUHJvamVjdChTdHJpbmcgc2FtcGxlUHJvamVjdCkKLSAgewotICAJdGhpcy5zYW1wbGVQcm9qZWN0ID0gc2FtcGxlUHJvamVjdDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50UHJvamVjdChTdHJpbmcgY2xpZW50UHJvamVjdCkKLSAgewotICAJdGhpcy5jbGllbnRQcm9qZWN0ID0gY2xpZW50UHJvamVjdDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U2NlbmFyaW9Db250ZXh0KFNjZW5hcmlvQ29udGV4dCBzY2VuYXJpb0NvbnRleHQpCi0gIHsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50VGVzdFJlZ2lzdHJ5KFdlYlNlcnZpY2VUZXN0UmVnaXN0cnkgdGVzdFJlZ2lzdHJ5KQotICB7Ci0gIAl0aGlzLnRlc3RSZWdpc3RyeSA9IHRlc3RSZWdpc3RyeTsKLSAgfQotICAgCi0gIHB1YmxpYyB2b2lkIHNldFNhbXBsZVNlcnZlclR5cGVJRChTdHJpbmcgc2FtcGxlU2VydmVyVHlwZUlEKQotICB7Ci0gIAl0aGlzLnNhbXBsZVNlcnZlclR5cGVJRCA9IHNhbXBsZVNlcnZlclR5cGVJRDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U2FtcGxlRXhpc3RpbmdTZXJ2ZXIoSVNlcnZlciBzYW1wbGVFeGlzdGluZ1NlcnZlcikKLSAgewotICAJdGhpcy5zYW1wbGVFeGlzdGluZ1NlcnZlciA9IHNhbXBsZUV4aXN0aW5nU2VydmVyOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIoVHlwZVJ1bnRpbWVTZXJ2ZXIgaWRzKQotICB7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcihUeXBlUnVudGltZVNlcnZlciBpZHMpCi0gIHsKLSAgICBzZXJ2ZXJJZHMgPSBpZHM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2FtcGxlU2VydmVyVHlwZUlEKCkKLSAgewotICAJcmV0dXJuIHNhbXBsZVNlcnZlclR5cGVJRDsKLSAgfQotICAKLSAgcHVibGljIElTZXJ2ZXIgZ2V0U2FtcGxlRXhpc3RpbmdTZXJ2ZXIoKQotICB7Ci0gIAlyZXR1cm4gc2FtcGxlRXhpc3RpbmdTZXJ2ZXI7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRTZXJ2ZXIoU3RyaW5nIGNsaWVudFNlcnZlcikKLSAgewotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJQcm9qZWN0KFN0cmluZyBzZXJ2aWNlUHJvamVjdCkKLSAgewotICAJdGhpcy5zZXJ2aWNlUHJvamVjdCA9IHNlcnZpY2VQcm9qZWN0OwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFdTRExQcm9qZWN0KCkKLSAgewotICAJIGlmKHNlcnZpY2VQcm9qZWN0ICE9IG51bGwpewotCSAgICAgaW50IGluZGV4ID0gc2VydmljZVByb2plY3QuaW5kZXhPZigiLyIpOwotICAgICAgIGlmIChpbmRleCE9LTEpIHsKLQkJICAgICBzZXJ2aWNlUCA9IHNlcnZpY2VQcm9qZWN0LnN1YnN0cmluZygwLGluZGV4KTsKLQkgICAgICAgcmV0dXJuIHNlcnZpY2VQOwotICAgICAgIH0KLSAgCX0JCi0JCi0gIAlyZXR1cm4gY2xpZW50UDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0V3NkbFVSSShTdHJpbmcgd3NkbFNlcnZpY2VVUkwpCi0gIHsKLSAgICB0aGlzLndzZGxTZXJ2aWNlVVJMID0gd3NkbFNlcnZpY2VVUkw7Ci0gIH0KLSAKLSAgcHVibGljIHZvaWQgc2V0R2VuZXJhdGVQcm94eShib29sZWFuIGdlbmVyYXRlUHJveHkpCi0gIHsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0SXNUZXN0V2lkZ2V0KCkKLSAgewotICAJcmV0dXJuIGlzVGVzdFdpZGdldDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudEVhclByb2plY3ROYW1lKFN0cmluZyBjbGllbnRFYXJQcm9qZWN0TmFtZSkKLSAgewotICAgICB0aGlzLmNsaWVudEVhclByb2plY3ROYW1lID0gY2xpZW50RWFyUHJvamVjdE5hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudEVhckNvbXBvbmVudE5hbWUoU3RyaW5nIGNsaWVudEVhckNvbXBvbmVudE5hbWUpCi0gIHsKLQl0aGlzLmNsaWVudEVhckNvbXBvbmVudE5hbWUgPSBjbGllbnRFYXJDb21wb25lbnROYW1lOwotICB9Ci0gIAotICAKLSAgCi0gIC8qKgotICAgKiBAcGFyYW0gc2V0RW5kcG9pbnRNZXRob2QgVGhlIHNldEVuZHBvaW50TWV0aG9kIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNldEVuZHBvaW50TWV0aG9kKFN0cmluZyBzZXRFbmRwb2ludE1ldGhvZCkKLSAgewotICAgIHRoaXMuc2V0RW5kcG9pbnRNZXRob2QgPSBzZXRFbmRwb2ludE1ldGhvZDsKLSAgfQotICAvKioKLSAgICogQHBhcmFtIGVuZHBvaW50IFRoZSBlbmRwb2ludCB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFbmRwb2ludChTdHJpbmcgZW5kcG9pbnQpCi0gIHsKLSAgICBpZiAoZW5kcG9pbnQgIT0gbnVsbCAmJiBlbmRwb2ludC5sZW5ndGgoKSA+IDApCi0gICAgewotICAgICAgVmVjdG9yIHYgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICB2LmFkZChlbmRwb2ludCk7Ci0gICAgICBzZXRFbmRwb2ludHModik7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRFbmRwb2ludHMoTGlzdCBlbmRwb2ludHMpCi0gIHsKLSAgICB0aGlzLmVuZHBvaW50cyA9IGVuZHBvaW50czsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0Q2xpZW50TmVlZEVBUigpIHsKLQkJcmV0dXJuIGNsaWVudE5lZWRFQVI7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0Q2xpZW50TmVlZEVBUihib29sZWFuIGNsaWVudE5lZWRFQVIpIHsKLQkJdGhpcy5jbGllbnROZWVkRUFSID0gY2xpZW50TmVlZEVBUjsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC9DbGllbnRUZXN0RnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L0NsaWVudFRlc3RGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODYzOGFmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L0NsaWVudFRlc3RGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNzI3ICAgMTQ0MzU0IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA3MDUwMiAgIDE4MDMwNCBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKgotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uQ29uZGl0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkJvb2xlYW5GcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TZXF1ZW5jZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNpbXBsZUZyYWdtZW50OwotCi0KLXB1YmxpYyBjbGFzcyBDbGllbnRUZXN0RnJhZ21lbnQgZXh0ZW5kcyBCb29sZWFuRnJhZ21lbnQKLXsKLSAgcHJpdmF0ZSBib29sZWFuIHRlc3RTZXJ2aWNlOwotICBwcml2YXRlIGJvb2xlYW4gZ2VuUHJveHk7ICAvLyBUaGlzIGFjdHVhbGx5IHJlcHJlc2VudCB3aGV0aGVyIGNsaWVudCB0ZXN0IGlzIHJlcXVlc3RlZAotICBwcml2YXRlIGJvb2xlYW4gbGF1bmNoZWRUZXN0ID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiBjYW5HZW5Qcm94eTsKLSAgCi0gIHB1YmxpYyBDbGllbnRUZXN0RnJhZ21lbnQoIFN0cmluZyBpZCApCi0gIHsKLSAgICBTZXF1ZW5jZUZyYWdtZW50IGNsaWVudFRlc3RSb290ID0gbmV3IFNlcXVlbmNlRnJhZ21lbnQoKTsKLSAgICBDb25kaXRpb24gICAgICAgIGNvbmRpdGlvbiAgICAgID0gbmV3IENvbmRpdGlvbigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBldmFsdWF0ZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRlc3RTZXJ2aWNlICYmIGdlblByb3h5OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKLSAgICBzZXRDb25kaXRpb24oIGNvbmRpdGlvbiApOwotICAgIAotICAgIAotICAgIENvbmRpdGlvbiBqc3BDb25kaXRpb24gICAgICA9IG5ldyBDb25kaXRpb24oKQotICAgIHsKLSAgICAgIHB1YmxpYyBib29sZWFuIGV2YWx1YXRlKCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGNhbkdlblByb3h5OwotICAgICAgfQotICAgIH07Ci0KLSAgICBTaW1wbGVGcmFnbWVudCBzaW1wbGVKU1BGcmFnbWVudCA9IG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQoKSwgIiIgKTsKLSAgICBCb29sZWFuRnJhZ21lbnQgY2hvaWNlSlNQRnJhZ21lbnQgPSBuZXcgQm9vbGVhbkZyYWdtZW50KCk7Ci0gICAgY2hvaWNlSlNQRnJhZ21lbnQuc2V0VHJ1ZUZyYWdtZW50KHNpbXBsZUpTUEZyYWdtZW50KTsKLSAgICBjaG9pY2VKU1BGcmFnbWVudC5zZXRDb25kaXRpb24oanNwQ29uZGl0aW9uKTsKLSAgICBjbGllbnRUZXN0Um9vdC5hZGQoY2hvaWNlSlNQRnJhZ21lbnQpOwotICAgIAotICAgIGNsaWVudFRlc3RSb290LmFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBpZCApICk7Ci0gICAgc2V0VHJ1ZUZyYWdtZW50KCBjbGllbnRUZXN0Um9vdCApOwotICAgIAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRHZW5lcmF0ZVByb3h5KCBib29sZWFuIGdlblByb3h5ICkKLSAgewotICAgIHRoaXMuZ2VuUHJveHkgPSBnZW5Qcm94eTsgIAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRDYW5HZW5lcmF0ZVByb3h5KCBib29sZWFuIGNhbkdlblByb3h5ICkKLSAgewotICAgIHRoaXMuY2FuR2VuUHJveHkgPSBjYW5HZW5Qcm94eTsgIAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRUZXN0U2VydmljZSggQm9vbGVhbiB0ZXN0U2VydmljZSApCi0gIHsKLSAgICB0aGlzLnRlc3RTZXJ2aWNlID0gdGVzdFNlcnZpY2UuYm9vbGVhblZhbHVlKCk7ICAKLSAgfSAKLQotIAotICAgIAotICBwdWJsaWMgYm9vbGVhbiBnZXRMYXVuY2hlZFRlc3QoKQotICB7Ci0gIAlyZXR1cm4gbGF1bmNoZWRUZXN0OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC9DbGllbnRUZXN0V2lkZ2V0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC9DbGllbnRUZXN0V2lkZ2V0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiNTc5ZDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvQ2xpZW50VGVzdFdpZGdldC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDgwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDUyNCAgIDE0MjYzNSBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKiAyMDA2MDgxNSAgIDEwNDg3MCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgZW5hYmxlL2Rpc2FibGUgdGVzdCBwYWdlIGNvbnRyb2xzIGJhc2Ugb24gc2V0dGluZ3MgaW4gdGVzdCBmYWNpbGl0eSBleHRlbnNpb24KLSAqIDIwMDYwODE1ICAgMTUzOTAzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBCcm93c2UgZG9lcyBub3Qgd29yayBpbiBnZW5lcmF0ZSBjbGllbnQgdGVzdCBwYWdlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbi5Gb2xkZXJSZXNvdXJjZUZpbHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQudGVzdC5XZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZXh0LnRlc3QuV2ViU2VydmljZVRlc3RSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuY29tbW9uLlVJVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLmRpYWxvZy5EaWFsb2dVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Hcm91cDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRyZWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZUl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5zZWxlY3Rpb24uQm9vbGVhblNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5zZWxlY3Rpb24uU2VsZWN0aW9uTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5TaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0RGF0YUV2ZW50czsKLQotCi1wdWJsaWMgY2xhc3MgQ2xpZW50VGVzdFdpZGdldCBleHRlbmRzIFNpbXBsZVdpZGdldERhdGFDb250cmlidXRvcgotewotICBwcml2YXRlIFN0cmluZyBwbHVnaW5JZF8gPSAib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpIjsKLQotICAvKkNPTlRFWFRfSUQgUFdTTTAwMDEgZm9yIHRoZSBTYW1wbGUgUGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFdTTV9QQUdFID0gICJQV1NNMDAwMSI7Ci0gIC8vCi0gIHByaXZhdGUgQnV0dG9uIHRlc3RDaGVja2JveF87Ci0gIC8qQ09OVEVYVF9JRCBQV1NNMDAwMiBmb3IgdGhlIFRlc3QgY2hlY2sgYm94IG9mIHRoZSBTYW1wbGUgUGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFdTTV9DSEVDS0JPWF9URVNUID0gIlBXU00wMDAyIjsKLQotICBwcml2YXRlIENvbWJvIHRlc3RUeXBlQ29tYm9fOwotICAgLypDT05URVhUX0lEIFBXU00wMDAzIGZvciB0aGUgVGVzdCBUeXBlIENvbWJvIGJveCBvZiB0aGUgU2FtcGxlIFBhZ2UqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BXU01fQ09NQk9CT1hfVEVTVCA9ICJQV1NNMDAwMyI7Ci0KLSAgcHJpdmF0ZSBUZXh0ICBqc3BGb2xkZXJUZXh0XzsKLSAgLypDT05URVhUX0lEIFBXU00wMDA4IGZvciB0aGUgSlNQIEZvbGRlciBmaWVsZCBvZiB0aGUgU2FtcGxlIFBhZ2UqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BXU01fVEVYVF9KU1BfRk9MREVSID0gIlBXU00wMDA4IjsKLQotICBwcml2YXRlIEJ1dHRvbiBzYW1wbGVGb2xkZXJCcm93c2VCdXR0b25fOwotICAvKkNPTlRFWFRfSUQgUFdTTTAwMDkgZm9yIHRoZSBKU1AgRm9sZGVyIEJyb3dzZSBidXR0b24gb2YgdGhlIFNhbXBsZSBQYWdlKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QV1NNX0JVVFRPTl9KU1BfRk9MREVSX0JST1dTRSA9ICJQV1NNMDAwOSI7Ci0KLSAgcHJpdmF0ZSBDb21ibyBwcm9qZWN0Q29tYm9fOwotICAvKkNPTlRFWFRfSUQgUFdTTTAwMTAgZm9yIHRoZSBQcm9qZWN0IGNvbWJvIGJveCBvZiB0aGUgU2FtcGxlIFBhZ2UqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BXU01fQ09NQk9fUFJPSkVDVCA9ICJQV1NNMDAxMCI7Ci0KLSAgcHJpdmF0ZSBUcmVlIG1ldGhvZHNUcmVlXzsKLQotICBwcml2YXRlIEJ1dHRvbiBzZWxlY3RBbGxNZXRob2RzQnV0dG9uXzsKLSAgLypDT05URVhUX0lEIFBXU00wMDA2IGZvciB0aGUgU2VsZWN0IEFsbCBidXR0b24gb2YgdGhlIFNhbXBsZSBQYWdlKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QV1NNX0JVVFRPTl9TRUxFQ1RfQUxMID0gIlBXU00wMDA2IjsKLQotICBwcml2YXRlIEJ1dHRvbiBkZXNlbGVjdEFsbE1ldGhvZHNCdXR0b25fOwotICAvKkNPTlRFWFRfSUQgUFdTTTAwMDcgZm9yIHRoZSBEZXNlbGVjdCBBbGwgYnV0dG9uIG9mIHRoZSBTYW1wbGUgUGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFdTTV9CVVRUT05fREVTRUxFQ1RfQUxMID0gIlBXU00wMDA3IjsKLQotICBwcml2YXRlIFRleHQgc2FtcGxlRm9sZGVyVGV4dF87Ci0gIC8qQ09OVEVYVF9JRCBQV1NNMDAxNCBmb3IgdGhlIEZvbGRlciBmaWVsZCBvZiB0aGUgU2FtcGxlIFBhZ2UqLyAgIAotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BXU01fVEVYVF9TQU1QTEVfRk9MREVSID0gIlBXU00wMDE0IjsKLSAgLy8KLSAgcHJpdmF0ZSBCdXR0b24gcnVuVGVzdENoZWNrYm94XzsgIAotICAvKkNPTlRFWFRfSUQgUFdTTTAwMTUgZm9yIHRoZSBydW4gdGVzdCBjaGVjayBib3ggb2YgdGhlIFNhbXBsZSBQYWdlKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QV1NNX0NIRUNLQk9YX0xBVU5DSCA9ICJQV1NNMDAxNSI7Ci0gIC8vCi0gIHByaXZhdGUgQ29tYm8gZWFyQ29tYm9fOwotICAvKkNPTlRFWFRfSUQgUFdTTTAwMTYgZm9yIHRoZSBFQVIgY29tYm8gYm94IG9mIHRoZSBTYW1wbGUgUGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFdTTV9FQVJfQ09NQk8gPSAiUFdTTTAwMTYiOwotICAKLSAgcHJpdmF0ZSBDb21wb3NpdGUgICAgICAgICAgICBjb21ib0dyb3VwXzsgCi0gIHByaXZhdGUgU2VsZWN0aW9uTGlzdCAgICAgICAgdGVzdEZhY2lsaXRpZXNfOwotICBwcml2YXRlIEZvbGRlclJlc291cmNlRmlsdGVyIGZvbGRlckZpbHRlcl8gPSBuZXcgRm9sZGVyUmVzb3VyY2VGaWx0ZXIoKTsKLSAgcHJpdmF0ZSBJU3RydWN0dXJlZFNlbGVjdGlvbiBpbml0aWFsU2VsZWN0aW9uXzsKLSAgcHJpdmF0ZSBib29sZWFuIGlzVGVzdFdpZGdldCA9IGZhbHNlOwotICAKLSAgcHJpdmF0ZSBJUGF0aCB3ZWJDb250ZW50UGF0aF87Ci0gIHByaXZhdGUgSVJlc291cmNlIHdlYkNvbnRlbnRfOwotICAgIAotICBwdWJsaWMgV2lkZ2V0RGF0YUV2ZW50cyBhZGRDb250cm9scyggQ29tcG9zaXRlIHBhcmVudCwgTGlzdGVuZXIgc3RhdHVzTGlzdGVuZXIgKQotICB7Ci0gICAgaXNUZXN0V2lkZ2V0ID0gdHJ1ZTsKLSAgICBVSVV0aWxzICAgICAgdWlVdGlscyAgPSBuZXcgVUlVdGlscyggcGx1Z2luSWRfICk7Ci0gICAgICAgIAotCXBhcmVudC5zZXRUb29sVGlwVGV4dCggQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFdTTV9QQUdFICk7Ci0JUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscCggcGFyZW50LCBwbHVnaW5JZF8gKyAiLiIgKyBJTkZPUE9QX1BXU01fUEFHRSApOwotICAgIAotICAgIHRlc3RDaGVja2JveF8gPSB1aVV0aWxzLmNyZWF0ZUNoZWNrYm94KCBwYXJlbnQsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5CVVRUT05fVEVTVCwKLSAgICAJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BXU01fQ0hFQ0tCT1hfVEVTVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5GT1BPUF9QV1NNX0NIRUNLQk9YX1RFU1QgKTsKLSAgICB0ZXN0Q2hlY2tib3hfLmFkZFNlbGVjdGlvbkxpc3RlbmVyKCBuZXcgU2VsZWN0aW9uQWRhcHRlcigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoIFNlbGVjdGlvbkV2ZW50IGV2dCApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVRlc3RCdXR0b24oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAKLSAgICBjb21ib0dyb3VwXyA9IHVpVXRpbHMuY3JlYXRlQ29tcG9zaXRlKCBwYXJlbnQsIDMsIDUsIDAgKTsKLSAgICAKLSAgICB0ZXN0VHlwZUNvbWJvXyA9IHVpVXRpbHMuY3JlYXRlQ29tYm8oIGNvbWJvR3JvdXBfLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfVEVTVF9UWVBFUywKLSAgICAJCQkJCQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QV1NNX0NPTUJPQk9YX1RFU1QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkZPUE9QX1BXU01fQ09NQk9CT1hfVEVTVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNXVC5TSU5HTEUgfCBTV1QuQk9SREVSIHwgU1dULlJFQURfT05MWSApOwotICAgIHRlc3RUeXBlQ29tYm9fLmFkZFNlbGVjdGlvbkxpc3RlbmVyKAotICAgIAkJbmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7Ci0gICAgCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgewotICAgIAkJCQloYW5kbGVUZXN0RmFjaWxpdHlTZWxlY3Rpb24oKTsKLSAgICAJCQl9Ci0gICAgCQl9Ci0gICAgKTsgICAgCi0gICAgCi0gICAgbmV3IExhYmVsKCBjb21ib0dyb3VwXywgU1dULk5PTkUgKTsKLSAgICAKLSAgICBwcm9qZWN0Q29tYm9fID0gdWlVdGlscy5jcmVhdGVDb21ibyggY29tYm9Hcm91cF8sIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9KU1BfUFJPSkVDVF9OQU1FLAotICAgIAkJCQkJCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BXU01fQ09NQk9fUFJPSkVDVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElORk9QT1BfUFdTTV9DT01CT19QUk9KRUNULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIgfCBTV1QuUkVBRF9PTkxZICk7Ci0gICAgcHJvamVjdENvbWJvXy5zZXRFbmFibGVkKCBmYWxzZSApOwotICAgIG5ldyBMYWJlbCggY29tYm9Hcm91cF8sIFNXVC5OT05FICk7Ci0gICAgCi0gICAgCi0gICAgZWFyQ29tYm9fID0gdWlVdGlscy5jcmVhdGVDb21ibyggY29tYm9Hcm91cF8sIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9FQVJfUFJPSkVDVFMsCi0gICAgCQkJCQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QV1NNX0VBUl9QUk9KRUNULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElORk9QT1BfUFdTTV9FQVJfQ09NQk8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIgfCBTV1QuUkVBRF9PTkxZICk7Ci0gICAgZWFyQ29tYm9fLnNldEVuYWJsZWQoIGZhbHNlICk7Ci0gICAgbmV3IExhYmVsKCBjb21ib0dyb3VwXywgU1dULk5PTkUgKTsKLSAgICAKLSAgICAKLSAgICAKLSAgICBzYW1wbGVGb2xkZXJUZXh0XyA9IHVpVXRpbHMuY3JlYXRlVGV4dCggY29tYm9Hcm91cF8sIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9GT0xERVJfTkFNRSwKLSAgICAJCQkJCQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFdTTV9URVhUX1NBTVBMRV9GT0xERVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElORk9QT1BfUFdTTV9URVhUX1NBTVBMRV9GT0xERVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNXVC5TSU5HTEUgfCBTV1QuQk9SREVSICk7Ci0gICAgCi0gICAgc2FtcGxlRm9sZGVyVGV4dF8uYWRkTW9kaWZ5TGlzdGVuZXIoIG5ldyBNb2RpZnlMaXN0ZW5lcigpCi0gICAgICAgIHsKLSAgICAgICAgcHVibGljIHZvaWQgbW9kaWZ5VGV4dCggTW9kaWZ5RXZlbnQgZXZ0ICkKLSAgICAgICAgewotICAgICAgICAgIGhhbmRsZUZvbGRlclRleHQoKTsgCi0gICAgICAgIH0KLSAgICAgIH0pOwotICAgIAotICAgICAgIAotICAgIHNhbXBsZUZvbGRlckJyb3dzZUJ1dHRvbl8gPSB1aVV0aWxzLmNyZWF0ZVB1c2hCdXR0b24oIGNvbWJvR3JvdXBfLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuQlVUVE9OX0JST1dTRSwgCi0gICAgCQkJCQkJCQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QV1NNX0JVVFRPTl9KU1BfRk9MREVSX0JST1dTRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkZPUE9QX1BXU01fQlVUVE9OX0pTUF9GT0xERVJfQlJPV1NFICk7Ci0gICAgc2FtcGxlRm9sZGVyQnJvd3NlQnV0dG9uXy5hZGRTZWxlY3Rpb25MaXN0ZW5lciggbmV3IFNlbGVjdGlvbkFkYXB0ZXIoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKCBTZWxlY3Rpb25FdmVudCBldnQgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVTYW1wbGVCcm93c2UoKTsgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgCi0gICAganNwRm9sZGVyVGV4dF8gPSB1aVV0aWxzLmNyZWF0ZVRleHQoIGNvbWJvR3JvdXBfLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfSlNQX0ZPTERFUl9OQU1FLAotICAgIAkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFdTTV9URVhUX0pTUF9GT0xERVIsCi0gICAgICAgICAgICBJTkZPUE9QX1BXU01fVEVYVF9KU1BfRk9MREVSLAotICAgICAgICAgICAgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIgfCBTV1QuUkVBRF9PTkxZICk7Ci0gICAganNwRm9sZGVyVGV4dF8uc2V0RW5hYmxlZCggZmFsc2UgKTsKLSAgICAKLSAgICBHcm91cCBtZXRob2RzR3JvdXAgPSB1aVV0aWxzLmNyZWF0ZUdyb3VwKCBwYXJlbnQsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9NRVRIT0RTLCAgCi0gICAgCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BXU01fVFJFRV9NRVRIT0RTLCBudWxsICk7Ci0gICAgCi0JbWV0aG9kc0dyb3VwLnNldExheW91dERhdGEoIHVpVXRpbHMuY3JlYXRlRmlsbEFsbCgpICk7Ci0JCi0JR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotCWxheW91dC5tYXJnaW5IZWlnaHQgPSAwOwotCWxheW91dC5tYXJnaW5XaWR0aCA9IDA7Ci0JbWV0aG9kc0dyb3VwLnNldExheW91dCggbGF5b3V0ICk7Ci0JCi0JLy8gVE9ETyBObyBpbmZvcG9wIGZvciB0aGlzIHRyZWUuCi0JbWV0aG9kc1RyZWVfID0gdWlVdGlscy5jcmVhdGVUcmVlKCBtZXRob2RzR3JvdXAsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BXU01fVFJFRV9NRVRIT0RTLCAKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCi0JICAgICAgICAgICAgICAgICAgIAkJCQkgICBTV1QuTVVMVEkgfCBTV1QuQk9SREVSIHwgU1dULlZfU0NST0xMIHwgU1dULkhfU0NST0xMCXwgU1dULkNIRUNLICk7Ci0KLSAgICBDb21wb3NpdGUgc2VsZWN0QnV0dG9ucyA9IHVpVXRpbHMuY3JlYXRlQ29tcG9zaXRlKCBtZXRob2RzR3JvdXAsIDIgKTsKLSAgICAKLSAgICBzZWxlY3RBbGxNZXRob2RzQnV0dG9uXyAKLSAgICAgID0gdWlVdGlscy5jcmVhdGVQdXNoQnV0dG9uKCBzZWxlY3RCdXR0b25zLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuQlVUVE9OX1NFTEVDVF9BTEwsIAotICAgIAkJICBDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QV1NNX0JVVFRPTl9TRUxFQ1RfQUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElORk9QT1BfUFdTTV9CVVRUT05fU0VMRUNUX0FMTCApOwotICAgIHNlbGVjdEFsbE1ldGhvZHNCdXR0b25fLmFkZFNlbGVjdGlvbkxpc3RlbmVyKCBuZXcgU2VsZWN0aW9uQWRhcHRlcigpIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoIFNlbGVjdGlvbkV2ZW50IGV2dCApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlU2VsZWN0QWxsKCB0cnVlICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAKLSAgICBkZXNlbGVjdEFsbE1ldGhvZHNCdXR0b25fIAotICAgICAgPSB1aVV0aWxzLmNyZWF0ZVB1c2hCdXR0b24oIHNlbGVjdEJ1dHRvbnMsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5CVVRUT05fREVTRUxFQ1RfQUxMLCAKLSAgICAJCSAgCQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QV1NNX0JVVFRPTl9ERVNFTEVDVF9BTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5GT1BPUF9QV1NNX0JVVFRPTl9ERVNFTEVDVF9BTEwgKTsKLSAgICBkZXNlbGVjdEFsbE1ldGhvZHNCdXR0b25fLmFkZFNlbGVjdGlvbkxpc3RlbmVyKCBuZXcgU2VsZWN0aW9uQWRhcHRlcigpIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKCBTZWxlY3Rpb25FdmVudCBldnQgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVTZWxlY3RBbGwoIGZhbHNlICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgCi0gICAgcnVuVGVzdENoZWNrYm94XyA9IHVpVXRpbHMuY3JlYXRlQ2hlY2tib3goIHBhcmVudCwgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkJVVFRPTl9SVU5fVEVTVCwKLSAgICAJCQkJCQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFdTTV9DSEVDS0JPWF9MQVVOQ0gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElORk9QT1BfUFdTTV9DSEVDS0JPWF9MQVVOQ0ggKTsKLSAgICAKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGhhbmRsZUZvbGRlclRleHQoKQotICB7Ci0JLy8gd2ViQ29udGVudFBhdGhfIGlzIHNldCB3aGVuIGpzcEZvbGRlclRleHRfIGlzIHNldCBmb3IgdGhlIGZpcnN0IHRpbWUuICBUaGVyZWZvcmUsCi0JLy8gaWYgd2ViQ29udGVudFBhdGhfIGlzIHN0aWxsIG51bGwsIHRoZXJlIGlzIG5vIG5lZWQgdG8gdG91Y2gganNwRm9sZGVyVGV4dF8geWV0LgotCSAgCi0JaWYgKHdlYkNvbnRlbnRQYXRoXyA9PSBudWxsKQotCQlyZXR1cm47Ci0JICAKLSAgCVN0cmluZyBmb2xkZXIgPSBzYW1wbGVGb2xkZXJUZXh0Xy5nZXRUZXh0KCk7CQotICAgIGpzcEZvbGRlclRleHRfLnNldFRleHQod2ViQ29udGVudFBhdGhfLnRvU3RyaW5nKCkgKyBJUGF0aC5TRVBBUkFUT1IgKyBmb2xkZXIpOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgaGFuZGxlU2FtcGxlQnJvd3NlKCkKLSAgewotICAgIElQYXRoICAgICAgc2VsZWN0ZWRQYXRoICAgICAgID0gbnVsbDsKLSAgICBJUmVzb3VyY2UgIGluaXRpYWxSZXNvdXJjZSAgICA9IG51bGw7Ci0gICAgCi0gICAgdHJ5Ci0gICAgewotICAgICAgaW5pdGlhbFJlc291cmNlID0gUmVzb3VyY2VVdGlscy5nZXRSZXNvdXJjZUZyb21TZWxlY3Rpb24oIGluaXRpYWxTZWxlY3Rpb25fICk7Ci0gICAgfQotICAgIGNhdGNoKCBDb3JlRXhjZXB0aW9uIGV4YyApCi0gICAgeyAgCi0gICAgfQotICAgIAotICAgIGlmKCBpbml0aWFsUmVzb3VyY2UgPT0gbnVsbCApaW5pdGlhbFJlc291cmNlID0gd2ViQ29udGVudF87Ci0gICAgCi0gICAgSVJlc291cmNlIHJlc291cmNlID0gRGlhbG9nVXRpbHMuYnJvd3NlUmVzb3VyY2VzKCBjb21ib0dyb3VwXy5nZXRTaGVsbCgpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlYkNvbnRlbnRfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFJlc291cmNlLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGRlckZpbHRlcl8gKTsKLSAgICAKLSAgICBpZiggcmVzb3VyY2UgIT0gbnVsbCApCi0gICAgewotICAgICAgc2VsZWN0ZWRQYXRoID0gcmVzb3VyY2UuZ2V0RnVsbFBhdGgoKTsgICAKLSAgICAKLSAgICAgIGludCB3ZWJNb2R1bGVTZWdtZW50cyA9IHNlbGVjdGVkUGF0aC5tYXRjaGluZ0ZpcnN0U2VnbWVudHMod2ViQ29udGVudFBhdGhfKTsKLSAgICAgIAotICAgICAgaWYgKCB3ZWJNb2R1bGVTZWdtZW50cyA8IHdlYkNvbnRlbnRQYXRoXy5zZWdtZW50Q291bnQoKSApCi0gICAgICB7Ci0gICAgICAgIHNhbXBsZUZvbGRlclRleHRfLnNldFRleHQoIiIpOwotICAgICAgICBoYW5kbGVGb2xkZXJUZXh0KCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHNhbXBsZUZvbGRlclRleHRfLnNldFRleHQoc2VsZWN0ZWRQYXRoLnJlbW92ZUZpcnN0U2VnbWVudHMod2ViTW9kdWxlU2VnbWVudHMpLnRvU3RyaW5nKCkpOwotICAgICAgICBoYW5kbGVGb2xkZXJUZXh0KCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgaGFuZGxlVGVzdEJ1dHRvbigpCi0gIHsKLSAgICBib29sZWFuIGVuYWJsZWQgPSB0ZXN0Q2hlY2tib3hfLmdldFNlbGVjdGlvbigpOwotICAgIAotICAgIHRlc3RUeXBlQ29tYm9fLnNldEVuYWJsZWQoIGVuYWJsZWQgKTsKLSAgICAKLSAgICBpZiAoZW5hYmxlZCAmJiB0ZXN0RmFjaWxpdGllc18gIT0gbnVsbCkgewotICAgIAloYW5kbGVUZXN0RmFjaWxpdHlTZWxlY3Rpb24oKTsKLSAgICAJcmV0dXJuOwotICAgIH0gICAgCi0KLSAgICBzYW1wbGVGb2xkZXJUZXh0Xy5zZXRFbmFibGVkKCBlbmFibGVkICk7Ci0gICAgbWV0aG9kc1RyZWVfLnNldEVuYWJsZWQoIGVuYWJsZWQgKTsKLSAgICBydW5UZXN0Q2hlY2tib3hfLnNldEVuYWJsZWQoIGVuYWJsZWQgKTsKLSAgICBzZWxlY3RBbGxNZXRob2RzQnV0dG9uXy5zZXRFbmFibGVkKCBlbmFibGVkICk7Ci0gICAgZGVzZWxlY3RBbGxNZXRob2RzQnV0dG9uXy5zZXRFbmFibGVkKCBlbmFibGVkICk7Ci0gICAgc2FtcGxlRm9sZGVyQnJvd3NlQnV0dG9uXy5zZXRFbmFibGVkKCBlbmFibGVkICk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBoYW5kbGVUZXN0RmFjaWxpdHlTZWxlY3Rpb24oKSB7Ci0JICAKLQkgIFN0cmluZyBjbGllbnRUZXN0SUQgPSBnZXRUZXN0RmFjaWxpdHkoKS5nZXRTZWxlY3Rpb24oKTsKLQkgIAkKLQkgIFdlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uIHRlc3RFeHRlbnNpb24gPSAKLQkJICAoV2ViU2VydmljZVRlc3RFeHRlbnNpb24pIFdlYlNlcnZpY2VUZXN0UmVnaXN0cnkuZ2V0SW5zdGFuY2UoKQotCQkgIC5nZXRXZWJTZXJ2aWNlRXh0ZW5zaW9uc0J5TmFtZShjbGllbnRUZXN0SUQpOwotCSAgICAKLSAgICAgIGJvb2xlYW4gaGFzQ29kZUdlbiA9IHRlc3RFeHRlbnNpb24uaXNDb2RlR2VuTmVlZGVkKCk7Ci0gICAgICAKLSAgICAgIC8vIGZvbGRlciBzZWxlY3Rpb24gaXMgb25seSBhcHBsaWNhYmxlIGZvciB0ZXN0IGZhY2lsaXRpZXMgd2l0aCBjb2RlZ2VuCi0gICAgICBzYW1wbGVGb2xkZXJUZXh0Xy5zZXRFbmFibGVkKCBoYXNDb2RlR2VuICk7Ci0gICAgICBzYW1wbGVGb2xkZXJCcm93c2VCdXR0b25fLnNldEVuYWJsZWQoIGhhc0NvZGVHZW4gJiYgd2ViQ29udGVudF8gIT0gbnVsbCApOwotICAgICAgCi0gICAgICBib29sZWFuIGhhc01ldGhvZHMgPSB0ZXN0RXh0ZW5zaW9uLmFyZU1ldGhvZHNOZWVkZWQoKTsKLSAgICAgIAotICAgICAgLy8gbWV0aG9kIHNlbGVjdGlvbiBpcyBvbmx5IGFwcGxpY2FibGUgZm9yIHRlc3QgZmFjaWxpdGllcyB3aXRoIG1ldGhvZHMKLSAgICAgIG1ldGhvZHNUcmVlXy5zZXRFbmFibGVkKCBoYXNNZXRob2RzICk7ICAgICAgCi0gICAgICBzZWxlY3RBbGxNZXRob2RzQnV0dG9uXy5zZXRFbmFibGVkKCBoYXNNZXRob2RzICk7Ci0gICAgICBkZXNlbGVjdEFsbE1ldGhvZHNCdXR0b25fLnNldEVuYWJsZWQoIGhhc01ldGhvZHMgKTsKLSAgICAgIAotICAgICAgLy8gcnVuIG9uIHNlcnZlciBvbmx5IGFwcGxpY2FibGUgZm9yIHRlc3QgZmFjaWxpdGllcyB0aGF0IG5lZWRzIGxhdW5jaGluZwotICAgICAgcnVuVGVzdENoZWNrYm94Xy5zZXRFbmFibGVkKCB0ZXN0RXh0ZW5zaW9uLmlzU2VydmVyTmVlZGVkKCkgKTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGhhbmRsZVNlbGVjdEFsbCggYm9vbGVhbiB2YWx1ZSApCi0gIHsKLQlUcmVlSXRlbVtdIGl0ZW1zID0gbWV0aG9kc1RyZWVfLmdldEl0ZW1zKCk7Ci0JCi0JZm9yKCBpbnQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKyApIAotCXsKLQkgIGl0ZW1zW2ldLnNldENoZWNrZWQodmFsdWUpOwotCX0KLSAgfSAKLSAgCi0gIC8vIEhlcmUgYXJlIHRoZSBnZXR0ZXJzIGFuZCBzZXR0ZXJzIGZvciB0aGlzIHdpZGdldC4KLSAgcHVibGljIHZvaWQgc2V0VGVzdFNlcnZpY2UoIEJvb2xlYW4gdGVzdFNlcnZpY2UgKQotICB7Ci0gICAgdGVzdENoZWNrYm94Xy5zZXRTZWxlY3Rpb24oIHRlc3RTZXJ2aWNlLmJvb2xlYW5WYWx1ZSgpICk7Ci0gICAgaGFuZGxlVGVzdEJ1dHRvbigpOwotICB9Ci0gIAotICBwdWJsaWMgQm9vbGVhbiBnZXRUZXN0U2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IEJvb2xlYW4oIHRlc3RDaGVja2JveF8uZ2V0U2VsZWN0aW9uKCkgKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0VGVzdEZhY2lsaXR5KCBTZWxlY3Rpb25MaXN0IHRlc3RGYWNpbGl0aWVzICkKLSAgewotICAgIHRlc3RGYWNpbGl0aWVzXyA9IHRlc3RGYWNpbGl0aWVzOwotICAgIHRlc3RUeXBlQ29tYm9fLnNldEl0ZW1zKCB0ZXN0RmFjaWxpdGllcy5nZXRMaXN0KCkgKTsKLSAgICB0ZXN0VHlwZUNvbWJvXy5zZWxlY3QoIHRlc3RGYWNpbGl0aWVzLmdldEluZGV4KCkgKTsKLSAgICBoYW5kbGVUZXN0RmFjaWxpdHlTZWxlY3Rpb24oKTsKLSAgfQotICAKLSAgcHVibGljIFNlbGVjdGlvbkxpc3QgZ2V0VGVzdEZhY2lsaXR5KCkKLSAgewotICAgIHRlc3RGYWNpbGl0aWVzXy5zZXRJbmRleCggdGVzdFR5cGVDb21ib18uZ2V0U2VsZWN0aW9uSW5kZXgoKSApOwotICAgIHJldHVybiB0ZXN0RmFjaWxpdGllc187Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VGVzdElEKCkKLSAgewotICAgIHJldHVybiB0ZXN0VHlwZUNvbWJvXy5nZXRUZXh0KCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHaXZlbiBhIHByb2plY3QgbmFtZSB3aGljaCBtYXkgYmUgb2YgdGhlIChvYnNvbGV0ZSkgZm9ybWF0ICJwcm9qZWN0L21vZHVsZSIsCi0gICAqIHJldHVybiBvbmx5IHRoZSBwcm9qZWN0IHBhcnQgb2YgdGhlIG5hbWUKLSAgICogCi0gICAqIEBwYXJhbSBwcm9qZWN0IFRoZSBwcm9qZWN0IG5hbWUuCi0gICAqIEByZXR1cm4gSWYgdGhlIG5hbWUgaGFzIHRoZSBmb3JtYXQgInByb2plY3QvbW9kdWxlIiwgcmV0dXJucyBvbmx5ICJwcm9qZWN0IiwgCi0gICAqIG90aGVyd2lzZSByZXR1cm5zIHRoZSBuYW1lIGFzIGlzLgotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZXh0cmFjdFByb2plY3ROYW1lKFN0cmluZyBwcm9qZWN0KSB7Ci0JICAKLQkgIGludCBpbmRleCA9IHByb2plY3QuaW5kZXhPZigiLyIpOwotCSAgCi0JICBpZiAoaW5kZXggIT0gLTEpCi0JCSAgcHJvamVjdCA9IHByb2plY3Quc3Vic3RyaW5nKDAsIGluZGV4KTsKLQkgIAotCSAgcmV0dXJuIHByb2plY3Q7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNhbXBsZVByb2plY3QoU3RyaW5nIGNsaWVudFByb2plY3QpIAotICB7Ci0JcHJvamVjdENvbWJvXy5zZXRJdGVtcyggbmV3IFN0cmluZ1tdeyBleHRyYWN0UHJvamVjdE5hbWUoY2xpZW50UHJvamVjdCkgfSApOwotCXByb2plY3RDb21ib18uc2VsZWN0KDApOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRTYW1wbGVQcm9qZWN0RUFSKFN0cmluZyBjbGllbnRQcm9qZWN0RUFSKSAKLSAgewotICAgIGVhckNvbWJvXy5zZXRJdGVtcyggbmV3IFN0cmluZ1tdeyBleHRyYWN0UHJvamVjdE5hbWUoY2xpZW50UHJvamVjdEVBUikgfSApOwotICAgIGVhckNvbWJvXy5zZWxlY3QoMCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Rm9sZGVyKCkKLSAgewotICAgIHJldHVybiBzYW1wbGVGb2xkZXJUZXh0Xy5nZXRUZXh0KCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEZvbGRlciggU3RyaW5nIGZvbGRlciApCi0gIHsKLSAgICBzYW1wbGVGb2xkZXJUZXh0Xy5zZXRUZXh0KCBmb2xkZXIgKTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0SXNUZXN0V2lkZ2V0KCkKLSAgewotICAJcmV0dXJuIGlzVGVzdFdpZGdldDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0SnNwRm9sZGVyKCBTdHJpbmcgZm9sZGVyICkKLSAgewotCXdlYkNvbnRlbnRQYXRoXyA9IChuZXcgUGF0aChmb2xkZXIpKS5yZW1vdmVMYXN0U2VnbWVudHMoMSk7Ci0Jd2ViQ29udGVudF8gPSBSZXNvdXJjZVV0aWxzLmZpbmRSZXNvdXJjZSh3ZWJDb250ZW50UGF0aF8pOwkKLQlzYW1wbGVGb2xkZXJCcm93c2VCdXR0b25fLnNldEVuYWJsZWQod2ViQ29udGVudF8gIT0gbnVsbCk7Ci0JICAKLSAgICBqc3BGb2xkZXJUZXh0Xy5zZXRUZXh0KCBmb2xkZXIgKTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRKc3BGb2xkZXIoKQotICB7Ci0gICAgcmV0dXJuIGpzcEZvbGRlclRleHRfLmdldFRleHQoKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0TGF1bmNoZWRTZXJ2aWNlVGVzdE5hbWUgKFN0cmluZyBsYXVuY2hlZFNlcnZpY2VUZXN0TmFtZSkKLSAgewotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRSdW5UZXN0Q2xpZW50KCkKLSAgewotICAgIHJldHVybiBydW5UZXN0Q2hlY2tib3hfLmdldFNlbGVjdGlvbigpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRSdW5UZXN0Q2xpZW50KCBib29sZWFuIHZhbHVlICkKLSAgewotICAgIHJ1blRlc3RDaGVja2JveF8uc2V0U2VsZWN0aW9uKCB2YWx1ZSApOwotICB9Ci0gIAotICBwdWJsaWMgQm9vbGVhblNlbGVjdGlvbltdIGdldE1ldGhvZHMoKQotICB7Ci0gICAgVHJlZUl0ZW1bXSAgICAgICAgIGl0ZW1zICAgPSBtZXRob2RzVHJlZV8uZ2V0SXRlbXMoKTsKLSAgICBCb29sZWFuU2VsZWN0aW9uW10gbWV0aG9kcyA9IG5ldyBCb29sZWFuU2VsZWN0aW9uW2l0ZW1zLmxlbmd0aF07Ci0gICAgCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IGl0ZW1zLmxlbmd0aDsgaW5kZXgrKyApCi0gICAgewotICAgICAgbWV0aG9kc1tpbmRleF0gPSBuZXcgQm9vbGVhblNlbGVjdGlvbiggaXRlbXNbaW5kZXhdLmdldFRleHQoKSwgaXRlbXNbaW5kZXhdLmdldENoZWNrZWQoKSApOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbWV0aG9kczsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0TWV0aG9kcyggQm9vbGVhblNlbGVjdGlvbltdIG1ldGhvZHMgKQotICB7Ci0gICAgbWV0aG9kc1RyZWVfLnJlbW92ZUFsbCgpOwotICAgIAotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBtZXRob2RzLmxlbmd0aDsgaW5kZXgrKyApCi0gICAgewotICAgICAgaWYobWV0aG9kc1tpbmRleF0gPT0gbnVsbCljb250aW51ZTsKLSAgICAgIFRyZWVJdGVtIGl0ZW0gPSBuZXcgVHJlZUl0ZW0oIG1ldGhvZHNUcmVlXywgU1dULk5VTEwgKTsKLSAgICAgIGl0ZW0uc2V0VGV4dCggbWV0aG9kc1tpbmRleF0uZ2V0VmFsdWUoKSApOwotICAgICAgaXRlbS5zZXRDaGVja2VkKCBtZXRob2RzW2luZGV4XS5pc1NlbGVjdGVkKCkgKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEluaXRpYWxTZWxlY3Rpb24oIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbiApCi0gIHsKLSAgICBpbml0aWFsU2VsZWN0aW9uXyA9IHNlbGVjdGlvbjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvQ29weVdlYlNlcnZpY2VVdGlsc0phckNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L0NvcHlXZWJTZXJ2aWNlVXRpbHNKYXJDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4N2QyNzIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvQ29weVdlYlNlcnZpY2VVdGlsc0phckNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwOTEyICAgMTU3MDM5IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBuZXcgd2Vic2VydmljZXV0aWxzLmphciBub3QgY29waWVkIGluIGNsaWVudCBnZW5lcmF0aW9uCi0gKiAyMDA2MTAyNSAgIDE2MTI1MCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgSW5zdGFsbGF0aW9ucyBvciB3b3Jrc3BhY2UgcGF0aHMgd2l0aCBzcGFjZXMgYnJlYWsgU2FtcGxlIEdlbiBhbmQgSmF2YSBFZGl0b3IgTGF1bmNoCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0OwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLkNvbnN1bXB0aW9uTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnBsdWdpbi5XZWJTZXJ2aWNlQ29uc3VtcHRpb25QbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbW1vbi5GaWxlUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uUHJvZ3Jlc3NVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5UcmFuc2llbnRSZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JU3RhdHVzSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5jb21tb24uQnVuZGxlVXRpbHM7Ci0KLQotcHVibGljIGNsYXNzIENvcHlXZWJTZXJ2aWNlVXRpbHNKYXJDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gCi17Ci0gIHByaXZhdGUgU3RyaW5nIHNhbXBsZVByb2plY3Q7Ci0JCi0vKioKLSAqIERlZmF1bHQgQ1RPUjsKLSAqLwotCi0KLXB1YmxpYyBDb3B5V2ViU2VydmljZVV0aWxzSmFyQ29tbWFuZCgpCi17Ci0KLX0KLQotLyoqCi0gKiBFeGVjdXRlIHRoZSBjb21tYW5kCi0gKi8KLXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotewotICBJRW52aXJvbm1lbnQgZW52ID0gZ2V0RW52aXJvbm1lbnQoKTsKLSAgCi0gIHRyeQotICB7Ci0gICAgUHJvZ3Jlc3NVdGlscy5yZXBvcnQoIG1vbml0b3IsIENvbnN1bXB0aW9uTWVzc2FnZXMuUFJPR1JFU1NfSU5GT19DT1BZX1dFQlNFUlZJQ0VfVVRJTFMgKTsKLSAgICBJUHJvamVjdCBzYW1wbGVJUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChzYW1wbGVQcm9qZWN0KTsgICAgCi0gICAgSVBhdGggd2ViTW9kdWxlUGF0aCA9IEoyRUVVdGlscy5nZXRXZWJDb250ZW50UGF0aChzYW1wbGVJUHJvamVjdCk7CQotICAgIGlmICh3ZWJNb2R1bGVQYXRoID09IG51bGwpCi0gICAgICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX1BST0pFQ1RfTk9UX0ZPVU5EICk7Ci0gICAgICAKLSAgICBJU3RhdHVzIHN0YXR1cyA9IGNvcHlJRmlsZSgid2Vic2VydmljZXV0aWxzLmphciIsd2ViTW9kdWxlUGF0aCwiV0VCLUlORi9saWIvd2Vic2VydmljZXV0aWxzLmphciIsIFdlYlNlcnZpY2VDb25zdW1wdGlvblBsdWdpbi5nZXRJbnN0YW5jZSgpLGVudiwgbW9uaXRvcik7Ci0gICAgaWYoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKXsKLSAgICAgIElTdGF0dXNIYW5kbGVyIHNIYW5kbGVyID0gZW52LmdldFN0YXR1c0hhbmRsZXIoKTsKLSAgICAgIElTdGF0dXMgZXJyb3JTdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfRklMRUNPUFlfV0VCU0VSVklDRV9VVElMUyApOwotICAgICAgc0hhbmRsZXIucmVwb3J0RXJyb3IoZXJyb3JTdGF0dXMpOwkKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgIH0KLSAgICAgIAotICAgICAgCi0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgSVN0YXR1c0hhbmRsZXIgc0hhbmRsZXIgPSBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpOwotICAgICAgSVN0YXR1cyBlcnJvclN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9GSUxFQ09QWV9XRUJTRVJWSUNFX1VUSUxTICk7Ci0gICAgICBzSGFuZGxlci5yZXBvcnRFcnJvcihlcnJvclN0YXR1cyk7CQotICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9GSUxFQ09QWV9XRUJTRVJWSUNFX1VUSUxTLCBlKTsKLSAgICB9Ci0gIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotfQotCi0vKioKLSAqCi0gKi8KLXByaXZhdGUgSVN0YXR1cyBjb3B5SUZpbGUoU3RyaW5nIHNvdXJjZSwgSVBhdGggdGFyZ2V0UGF0aCwgU3RyaW5nIHRhcmdldEZpbGUsIFBsdWdpbiBwbHVnaW4sSUVudmlyb25tZW50IGVudiwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkKLXsKLSAgICAKLSAgaWYgKHBsdWdpbiAhPSBudWxsKQotICB7Ci0gICAgSVBhdGggdGFyZ2V0ID0gdGFyZ2V0UGF0aC5hcHBlbmQobmV3IFBhdGgodGFyZ2V0RmlsZSkpOwotICAgIAotICAgIFByb2dyZXNzVXRpbHMucmVwb3J0KCBtb25pdG9yLCBDb25zdW1wdGlvbk1lc3NhZ2VzLlBST0dSRVNTX0lORk9fQ09QWUlOR19GSUxFICk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgIFJlc291cmNlQ29udGV4dCBjb250ZXh0ID0gbmV3IFRyYW5zaWVudFJlc291cmNlQ29udGV4dCgpOwotICAgICAgIGNvbnRleHQuc2V0T3ZlcndyaXRlRmlsZXNFbmFibGVkKHRydWUpOwotICAgICAgIGNvbnRleHQuc2V0Q3JlYXRlRm9sZGVyc0VuYWJsZWQodHJ1ZSk7Ci0gICAgICAgY29udGV4dC5zZXRDaGVja291dEZpbGVzRW5hYmxlZCh0cnVlKTsKLSAgICAgICBJUmVzb3VyY2UgcmVzb3VyY2UgPSBGaWxlUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2UodGFyZ2V0KTsKLSAgICAgICBVUkwgc291cmNlVVJMID0gQnVuZGxlVXRpbHMuZ2V0VVJMRnJvbUJ1bmRsZSggV2ViU2VydmljZUNvbnN1bXB0aW9uUGx1Z2luLklELCBzb3VyY2UgKTsgICAgICAgCi0gICAgICAgaWYocmVzb3VyY2UgIT0gbnVsbCkgeyAgICAJICAgICAgCSAgIAotICAgIAkgICBGaWxlIHNvdXJjZUZpbGUgPSBuZXcgRmlsZShGaWxlTG9jYXRvci50b0ZpbGVVUkwoc291cmNlVVJMKS5nZXRQYXRoKCkpOyAgIAotICAgIAkgICBpZiAocmVzb3VyY2UuZ2V0TG9jYXRpb24oKS50b0ZpbGUoKS5sZW5ndGgoKSA9PSBzb3VyY2VGaWxlLmxlbmd0aCgpKQotICAgIAkJICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgICAgfQotICAgICAgIEZpbGVSZXNvdXJjZVV0aWxzLmNyZWF0ZUZpbGUoY29udGV4dCwgCi0gICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCXRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVVSTC5vcGVuU3RyZWFtKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb25pdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKSk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9GSUxFQ09QWV9XRUJTRVJWSUNFX1VUSUxTICxlKTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci19Ci0KLXB1YmxpYyB2b2lkIHNldFNhbXBsZVByb2plY3QoU3RyaW5nIHNhbXBsZVByb2plY3QpCi17Ci0gIHRoaXMuc2FtcGxlUHJvamVjdCA9IHNhbXBsZVByb2plY3Q7ICAKLX0KLQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC9GaW5pc2hEZWZhdWx0Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvRmluaXNoRGVmYXVsdENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmE3Mzk5NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC9GaW5pc2hEZWZhdWx0Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuU2VydmVyQ29yZTsKLQotCi0vKgotKiBUaGUgSlNQR2VuZXJhdGlvbiB0YXNrIHJ1bnMgdGhlIGpzcCBnZW5lcmF0aW9uIGVuZ2luZSBmb3VuZCBpbiB0aGUgCi0qIEpCV2l6YXJkIFBsdWdpbgotKgotKgotKi8KLXB1YmxpYyBjbGFzcyBGaW5pc2hEZWZhdWx0Q29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIHByaXZhdGUgU3RyaW5nIHNhbXBsZVNlcnZlclR5cGVJRDsKLSAgcHJpdmF0ZSBJU2VydmVyIHNhbXBsZUV4aXN0aW5nU2VydmVyOwotICBwcml2YXRlIFN0cmluZyBzYW1wbGVTZXJ2ZXJJbnN0YW5jZUlkOwotCi0gIAotICBwdWJsaWMgRmluaXNoRGVmYXVsdENvbW1hbmQgKCkKLSAgewotICB9Ci0KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLSAgCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgCWlmKHNhbXBsZVNlcnZlckluc3RhbmNlSWQgIT0gbnVsbCl7Ci0gIAkgIHNhbXBsZUV4aXN0aW5nU2VydmVyID0gU2VydmVyQ29yZS5maW5kU2VydmVyKHNhbXBsZVNlcnZlckluc3RhbmNlSWQpOwotICAJaWYgKHNhbXBsZUV4aXN0aW5nU2VydmVyICE9IG51bGwpCi0gICAgICBzYW1wbGVTZXJ2ZXJUeXBlSUQgPSBzYW1wbGVFeGlzdGluZ1NlcnZlci5nZXRTZXJ2ZXJUeXBlKCkuZ2V0SWQoKTsKLSAgICAgIAotICAJfQotICAgIHJldHVybiBzdGF0dXM7Ci0gIAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJJbnN0YW5jZUlkKFN0cmluZyBzZXJ2ZXJJbnN0YW5jZUlkKQotICB7Ci0JdGhpcy5zYW1wbGVTZXJ2ZXJJbnN0YW5jZUlkID0gc2VydmVySW5zdGFuY2VJZDsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRTYW1wbGVTZXJ2ZXJUeXBlSUQoKQotICB7Ci0gIAlyZXR1cm4gc2FtcGxlU2VydmVyVHlwZUlEOwotCQotICB9Ci0gIAotICBwdWJsaWMgSVNlcnZlciBnZXRTYW1wbGVFeGlzdGluZ1NlcnZlcigpCi0gIHsKLSAgCXJldHVybiBzYW1wbGVFeGlzdGluZ1NlcnZlcjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEV4aXN0aW5nU2VydmVySWQoU3RyaW5nIGV4aXN0aW5nU2VydmVySWQpCi0gIHsKLSAgfSAgCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L0ZpbmlzaEphdmFUZXN0RnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L0ZpbmlzaEphdmFUZXN0RnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTRjYTM0Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC9GaW5pc2hKYXZhVGVzdEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qCi0gKiBDcmVhdGVkIG9uIE1heSA0LCAyMDA0Ci0gKgotICogVE9ETyBUbyBjaGFuZ2UgdGhlIHRlbXBsYXRlIGZvciB0aGlzIGdlbmVyYXRlZCBmaWxlIGdvIHRvCi0gKiBXaW5kb3cgLSBQcmVmZXJlbmNlcyAtIEphdmEgLSBDb2RlIFN0eWxlIC0gQ29kZSBUZW1wbGF0ZXMKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uLkJ1aWxkUHJvamVjdENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLkNvbmRpdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Cb29sZWFuRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2VxdWVuY2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TaW1wbGVGcmFnbWVudDsKLQotCi0vKioKLSAqIEBhdXRob3IgZ2lsYmVydGEKLSAqCi0gKiBUT0RPIFRvIGNoYW5nZSB0aGUgdGVtcGxhdGUgZm9yIHRoaXMgZ2VuZXJhdGVkIHR5cGUgY29tbWVudCBnbyB0bwotICogV2luZG93IC0gUHJlZmVyZW5jZXMgLSBKYXZhIC0gQ29kZSBTdHlsZSAtIENvZGUgVGVtcGxhdGVzCi0gKi8KLXB1YmxpYyBjbGFzcyBGaW5pc2hKYXZhVGVzdEZyYWdtZW50IGV4dGVuZHMgQm9vbGVhbkZyYWdtZW50IAotewotICBwcml2YXRlIGJvb2xlYW4gZ2VuZXJhdGVQcm94eTsKLQkKLSAgcHVibGljIEZpbmlzaEphdmFUZXN0RnJhZ21lbnQoKQotICB7Ci0gIAlTZXF1ZW5jZUZyYWdtZW50IGphdmFUZXN0Um9vdCA9IG5ldyBTZXF1ZW5jZUZyYWdtZW50KCk7Ci0gIAlDb25kaXRpb24gY29uZGl0aW9uID0gbmV3IENvbmRpdGlvbigpCi0JewotCSAgcHVibGljIGJvb2xlYW4gZXZhbHVhdGUoKQotCSAgewotCSAgICByZXR1cm4gZ2VuZXJhdGVQcm94eTsgCi0JICB9Ci0JfTsKLSAgICBzZXRDb25kaXRpb24oY29uZGl0aW9uKTsKLSAgICBqYXZhVGVzdFJvb3QuYWRkKG5ldyBTaW1wbGVGcmFnbWVudChuZXcgVGVzdENsaWVudERlcGFydHVyZUluaXRDb21tYW5kKCksICIiKSk7Ci0gICAgamF2YVRlc3RSb290LmFkZChuZXcgU2ltcGxlRnJhZ21lbnQobmV3IEJ1aWxkUHJvamVjdENvbW1hbmQoKSwgIiIpKTsKLSAgICBzZXRUcnVlRnJhZ21lbnQoamF2YVRlc3RSb290KTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEdlbmVyYXRlUHJveHkoYm9vbGVhbiBnZW5lcmF0ZVByb3h5KQotICB7Ci0gIAl0aGlzLmdlbmVyYXRlUHJveHkgPSBnZW5lcmF0ZVByb3h5OwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRJc0pTUEdlbihib29sZWFuIGpzcEdlbikKLSAgewotICAJCi0gIH0KLSAgCi0gIAotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L0ZpbmlzaFRlc3RGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvRmluaXNoVGVzdEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5ZWIxNmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvRmluaXNoVGVzdEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNzI3ICAgMTQ0MzU0IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA3MDUwMiAgIDE4MDMwNCBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qCi0gKiBDcmVhdGVkIG9uIE1heSA0LCAyMDA0Ci0gKgotICogVE9ETyBUbyBjaGFuZ2UgdGhlIHRlbXBsYXRlIGZvciB0aGlzIGdlbmVyYXRlZCBmaWxlIGdvIHRvCi0gKiBXaW5kb3cgLSBQcmVmZXJlbmNlcyAtIEphdmEgLSBDb2RlIFN0eWxlIC0gQ29kZSBUZW1wbGF0ZXMKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQudGVzdC5XZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZXh0LnRlc3QuV2ViU2VydmljZVRlc3RSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwucGx1Z2luLldlYlNlcnZpY2VQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLkNvbmRpdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Cb29sZWFuRnJhZ21lbnQ7Ci0KLQotLyoqCi0gKiBAYXV0aG9yIGdpbGJlcnRhCi0gKgotICogVE9ETyBUbyBjaGFuZ2UgdGhlIHRlbXBsYXRlIGZvciB0aGlzIGdlbmVyYXRlZCB0eXBlIGNvbW1lbnQgZ28gdG8KLSAqIFdpbmRvdyAtIFByZWZlcmVuY2VzIC0gSmF2YSAtIENvZGUgU3R5bGUgLSBDb2RlIFRlbXBsYXRlcwotICovCi1wdWJsaWMgY2xhc3MgRmluaXNoVGVzdEZyYWdtZW50IGV4dGVuZHMgQm9vbGVhbkZyYWdtZW50ewotCi0gIHByaXZhdGUgYm9vbGVhbiBpc1Rlc3RXaWRnZXQ7CQotICBwcml2YXRlIGJvb2xlYW4gZ2VuZXJhdGVQcm94eTsgIC8vIFRoaXMgYWN0dWFsbHkgcmVwcmVzZW50IHdoZXRoZXIgY2xpZW50IHRlc3QgaXMgcmVxdWVzdGVkCi0gIHByaXZhdGUgU3RyaW5nIGxhdW5jaGVkU2VydmljZVRlc3ROYW1lOwotICBwcml2YXRlIGJvb2xlYW4gdGVzdFNlcnZpY2U7Ci0gIHByaXZhdGUgU3RyaW5nIHRlc3RJRDsKLSAgcHVibGljIEZpbmlzaFRlc3RGcmFnbWVudCgpCi0gIHsKLSAgICBDb25kaXRpb24gY29uZGl0aW9uID0gbmV3IENvbmRpdGlvbigpCi0JewotCSAgcHVibGljIGJvb2xlYW4gZXZhbHVhdGUoKQotCSAgewotCSAgICBpZighdGVzdFNlcnZpY2UpIHJldHVybiBmYWxzZTsKLQkgIAlpZihsYXVuY2hlZFNlcnZpY2VUZXN0TmFtZSA9PSBudWxsKSByZXR1cm4gdHJ1ZTsKLQkgICAgaWYobGF1bmNoZWRTZXJ2aWNlVGVzdE5hbWUgIT0gbnVsbCkKLQkgICAgICBpZigoIWxhdW5jaGVkU2VydmljZVRlc3ROYW1lLmVxdWFscygiIikgJiYgICghaXNQcmVmZXJlZEFXU0RMVGVzdCgpIHx8IChpc1Rlc3RXaWRnZXQgJiYgaXNDbGllbnRUZXN0SmF2YSgpKSkgJiYgZ2VuZXJhdGVQcm94eSkgfHwgbGF1bmNoZWRTZXJ2aWNlVGVzdE5hbWUuZXF1YWxzKCIiKSkgcmV0dXJuIHRydWU7CQotCSAgICAKLQkgIAlyZXR1cm4gZmFsc2U7IAotCSAgfQotCX07Ci0JICAgCi0Jc2V0VHJ1ZUZyYWdtZW50KG5ldyBXZWJTZXJ2aWNlVGVzdENsaWVudERlcGFydHVyZUZyYWdtZW50KCkpOwotICAgIHNldENvbmRpdGlvbihjb25kaXRpb24pOwotICB9Ci0JICAgIAotICBwdWJsaWMgdm9pZCBzZXRMYXVuY2hlZFNlcnZpY2VUZXN0TmFtZShTdHJpbmcgbGF1bmNoZWRTZXJ2aWNlVGVzdE5hbWUpCi0gIHsKLQl0aGlzLmxhdW5jaGVkU2VydmljZVRlc3ROYW1lID0gbGF1bmNoZWRTZXJ2aWNlVGVzdE5hbWU7Ci0gIH0KLQkgIAotICBwdWJsaWMgYm9vbGVhbiBpc1ByZWZlcmVkQVdTRExUZXN0KCkKLSAgewotICAgIFNjZW5hcmlvQ29udGV4dCBzY2VuYXJpb0NvbnRleHQgPSBXZWJTZXJ2aWNlUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0U2NlbmFyaW9Db250ZXh0KCkuY29weSgpOwotCVN0cmluZ1tdIHRlc3RUeXBlcyA9IHNjZW5hcmlvQ29udGV4dC5nZXRXZWJTZXJ2aWNlVGVzdFR5cGVzKCk7Ci0JV2ViU2VydmljZVRlc3RSZWdpc3RyeSB3c3R0UmVnaXN0cnkgPSBXZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5LmdldEluc3RhbmNlKCk7Ci0JV2ViU2VydmljZVRlc3RFeHRlbnNpb24gd3NjdGUgPSAoV2ViU2VydmljZVRlc3RFeHRlbnNpb24pd3N0dFJlZ2lzdHJ5LmdldFdlYlNlcnZpY2VFeHRlbnNpb25zQnlOYW1lKHRlc3RUeXBlc1swXSk7ICAJCi0JaWYod3NjdGUudGVzdFdTREwoKSkJCi0JICByZXR1cm4gdHJ1ZTsKLQlyZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc0NsaWVudFRlc3RKYXZhKCkKLSAgewotICAJaWYodGVzdElEID09IG51bGwpIHJldHVybiBmYWxzZTsKLSAgCVdlYlNlcnZpY2VUZXN0UmVnaXN0cnkgd3N0dFJlZ2lzdHJ5ID0gV2ViU2VydmljZVRlc3RSZWdpc3RyeS5nZXRJbnN0YW5jZSgpOwotCVdlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uIHdzY3RlID0gKFdlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uKXdzdHRSZWdpc3RyeS5nZXRXZWJTZXJ2aWNlRXh0ZW5zaW9uc0J5TmFtZSh0ZXN0SUQpOyAgCQotCWlmKCF3c2N0ZS50ZXN0V1NETCgpKQkKLSAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsgICAJCi0gIH0KLSAgCi0gIAotICBwdWJsaWMgdm9pZCBzZXRUZXN0U2VydmljZShib29sZWFuIHRlc3RTZXJ2aWNlKQotICB7Ci0gICAgdGhpcy50ZXN0U2VydmljZSA9IHRlc3RTZXJ2aWNlOwkgCi0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRDYW5HZW5lcmF0ZVByb3h5KGJvb2xlYW4gZ2VuZXJhdGVQcm94eSkKLSAgewotICAgIHRoaXMuZ2VuZXJhdGVQcm94eSA9IGdlbmVyYXRlUHJveHk7CSAKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFRlc3RJRChTdHJpbmcgdGVzdElEKQotICB7Ci0gICAgdGhpcy50ZXN0SUQgPSB0ZXN0SUQ7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRJc1Rlc3RXaWRnZXQoYm9vbGVhbiBpc1Rlc3RXaWRnZXQpCi0gIHsKLSAgCXRoaXMuaXNUZXN0V2lkZ2V0ID0gaXNUZXN0V2lkZ2V0OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC9UZXN0Q2xpZW50RGVwYXJ0dXJlSW5pdENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L1Rlc3RDbGllbnREZXBhcnR1cmVJbml0Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMWYyZjc0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L1Rlc3RDbGllbnREZXBhcnR1cmVJbml0Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKgotICogQ3JlYXRlZCBvbiBNYXIgMjUsIDIwMDQKLSAqCi0gKiBUbyBjaGFuZ2UgdGhlIHRlbXBsYXRlIGZvciB0aGlzIGdlbmVyYXRlZCBmaWxlIGdvIHRvCi0gKiBXaW5kb3cgLSBQcmVmZXJlbmNlcyAtIEphdmEgLSBDb2RlIEdlbmVyYXRpb24gLSBDb2RlIGFuZCBDb21tZW50cwotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLS8qKgotICogQGF1dGhvciBnaWxiZXJ0YQotICoKLSAqIFRvIGNoYW5nZSB0aGUgdGVtcGxhdGUgZm9yIHRoaXMgZ2VuZXJhdGVkIHR5cGUgY29tbWVudCBnbyB0bwotICogV2luZG93IC0gUHJlZmVyZW5jZXMgLSBKYXZhIC0gQ29kZSBHZW5lcmF0aW9uIC0gQ29kZSBhbmQgQ29tbWVudHMKLSAqLwotcHVibGljIGNsYXNzIFRlc3RDbGllbnREZXBhcnR1cmVJbml0Q29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIAotewotICAKLSAgcHJpdmF0ZSBib29sZWFuIGZvcmNlQnVpbGQ7CQotCQotICBwdWJsaWMgVGVzdENsaWVudERlcGFydHVyZUluaXRDb21tYW5kKCkKLSAgewotICAJZm9yY2VCdWlsZCA9IHRydWU7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBnZXRGb3JjZUJ1aWxkKCkKLSAgewotICAJcmV0dXJuIGZvcmNlQnVpbGQ7Ci0gIH0KLQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBpbmZvKSB0aHJvd3MgRXhlY3V0aW9uRXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L1Rlc3REZWZhdWx0aW5nRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L1Rlc3REZWZhdWx0aW5nRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTI0NmU3Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC9UZXN0RGVmYXVsdGluZ0ZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNzI3ICAgMTQ0MzU0IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDgyMSAgIDE1MzgzMyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgQWxsb3cgdGhlIFdlYiBTZXJ2aWNlIFRlc3QgZXh0ZW5zaW9uIHBvaW50IHRvIHNwZWNpZnkgdGhlIHN1cHBvcnRlZCBjbGllbnQgcnVudGltZQotICogMjAwNjA5MDcgICAxNTY2MDYgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIG5vIHNhbXBsZSBKU1AgaW4gdGhlIHBvcC11cCBhY3Rpb24gb2YgR2VuZXJhdGUgU2FtcGxlIEpTUHMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoKLSAqIENyZWF0ZWQgb24gTWF5IDQsIDIwMDQKLSAqCi0gKiBUT0RPIFRvIGNoYW5nZSB0aGUgdGVtcGxhdGUgZm9yIHRoaXMgZ2VuZXJhdGVkIGZpbGUgZ28gdG8KLSAqIFdpbmRvdyAtIFByZWZlcmVuY2VzIC0gSmF2YSAtIENvZGUgU3R5bGUgLSBDb2RlIFRlbXBsYXRlcwotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmV4dC50ZXN0LldlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQudGVzdC5XZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5wbHVnaW4uV2ViU2VydmljZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5zZWxlY3Rpb24uU2VsZWN0aW9uTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi0KLS8qKgotICogQGF1dGhvciBnaWxiZXJ0YQotICoKLSAqIFRPRE8gVG8gY2hhbmdlIHRoZSB0ZW1wbGF0ZSBmb3IgdGhpcyBnZW5lcmF0ZWQgdHlwZSBjb21tZW50IGdvIHRvCi0gKiBXaW5kb3cgLSBQcmVmZXJlbmNlcyAtIEphdmEgLSBDb2RlIFN0eWxlIC0gQ29kZSBUZW1wbGF0ZXMKLSAqLwotcHVibGljIGNsYXNzIFRlc3REZWZhdWx0aW5nRnJhZ21lbnQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotICAKLSAgcHJpdmF0ZSBTZWxlY3Rpb25MaXN0IHRlc3RGYWNpbGl0aWVzOwotICBwcml2YXRlIFN0cmluZyBsYXVuY2hlZFNlcnZpY2VUZXN0TmFtZTsKLSAgcHJpdmF0ZSBTY2VuYXJpb0NvbnRleHQgc2NlbmFyaW9Db250ZXh0OwkKLSAgcHJpdmF0ZSBib29sZWFuIGdlbmVyYXRlUHJveHk7ICAvLyBUaGlzIGFjdHVhbGx5IHJlcHJlc2VudCB3aGV0aGVyIGNsaWVudCB0ZXN0IGlzIHJlcXVlc3RlZAotICAKLSAgcHJpdmF0ZSBTdHJpbmcgY2xpZW50UnVudGltZUlkXzsKLSAgCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0gIAlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gIAkKLSAgCXNjZW5hcmlvQ29udGV4dCA9IFdlYlNlcnZpY2VQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRTY2VuYXJpb0NvbnRleHQoKS5jb3B5KCk7Ci0gIAkvLyAgdGVzdCBmYWNpbGl0aWVzCi0gICAgc2VsZWN0VGVzdEZhY2lsaXR5KCk7Ci0gICAgcmV0dXJuIHN0YXR1czsKLSAgfQotCQotICAvLyBUaGUgdGVzdCBmYWNpbGl0aWVzIHJldHJpZXZlZCBmcm9tIHRoZSBleHRlbnNpb24KLSAgLy8gcGx1cyB0aGUgZGVmYXVsdAotICBwdWJsaWMgU2VsZWN0aW9uTGlzdCBnZXRUZXN0RmFjaWxpdHkoKQotICB7Ci0gICAgcmV0dXJuIHRlc3RGYWNpbGl0aWVzOwotICB9IAotCSAgCi0gIAotICAKLSAgLy8JKioqKioqKioqKioqKioqKioqKioqKiogCi0gIC8vIFRoaXMgbWV0aG9kIHVzZXMgdGhlIHByZWZlcmVuY2UgdG8gCi0gIC8vIHNlbGVjdCB0aGUgY29ycmVjdCB0ZXN0IGZhY2lsaXR5IAotICAvLyAKLSAgLy8qKioqKioqKioqKioqKioqKioqKioqKgotICBwcml2YXRlIHZvaWQgc2VsZWN0VGVzdEZhY2lsaXR5KCkKLSAgewotICAgIC8vaWYgd2UgZmluZCBzb21ldGhpbmcgd2UgbGF1bmNoZWQgZWFybGllciAKLSAgICAvL3B1dCBpdCBvbiB0aGUgYm90dG9tCi0gICAgU3RyaW5nW10gdGVzdFR5cGVzID0gc2NlbmFyaW9Db250ZXh0LmdldFdlYlNlcnZpY2VUZXN0VHlwZXMoKTsJICAKLSAgICBMaXN0IG5ld1Rlc3RUeXBlcyA9IG5ldyBBcnJheUxpc3QoKTsKLQlTdHJpbmdbXSB3c2RsQ2FzZXMgPSBzY2VuYXJpb0NvbnRleHQuZ2V0Tm9uSmF2YVRlc3RTZXJ2aWNlKCk7Ci0JYm9vbGVhbiBsYXVuY2hlZCA9IGZhbHNlOwotCQotICAgIGZvcihpbnQgaSA9IDA7aTx0ZXN0VHlwZXMubGVuZ3RoO2krKyl7Ci0gICAgCQotICAgICAgV2ViU2VydmljZVRlc3RFeHRlbnNpb24gZXh0ZW5zaW9uID0KLSAgICAJICAoV2ViU2VydmljZVRlc3RFeHRlbnNpb24pIFdlYlNlcnZpY2VUZXN0UmVnaXN0cnkuZ2V0SW5zdGFuY2UoKQotICAgIAkgIC5nZXRXZWJTZXJ2aWNlRXh0ZW5zaW9uc0J5TmFtZSh0ZXN0VHlwZXNbaV0pOwotCQkgIAotICAgICAgaWYgKGNsaWVudFJ1bnRpbWVJZF8gIT0gbnVsbCAmJiAhZXh0ZW5zaW9uLnN1cHBvcnRzUnVudGltZShjbGllbnRSdW50aW1lSWRfKSkKLSAgICAJICBjb250aW51ZTsKLSAgICAJCi0JICBpZih0ZXN0VHlwZXNbaV0uZXF1YWxzKGxhdW5jaGVkU2VydmljZVRlc3ROYW1lKSkKLQkgICAgbGF1bmNoZWQgPSB0cnVlOwotCSAgZWxzZXsKLQkgICAgIG5ld1Rlc3RUeXBlcy5hZGQodGVzdFR5cGVzW2ldKTsgCi0JICB9Ci0JfQotCSAgIAkKLSAgICBpZihsYXVuY2hlZCkKLQkgIG5ld1Rlc3RUeXBlcy5hZGQobGF1bmNoZWRTZXJ2aWNlVGVzdE5hbWUpOwotICAgIAotCQotCWlmKCFnZW5lcmF0ZVByb3h5KQotICAgICAgdGVzdEZhY2lsaXRpZXMgPSBuZXcgU2VsZWN0aW9uTGlzdCh3c2RsQ2FzZXMsMCk7CQotCWVsc2UgewotCSAgU3RyaW5nW10gdGVtcEFycmF5ID0gbmV3IFN0cmluZ1tuZXdUZXN0VHlwZXMuc2l6ZSgpXTsKLQkgIHRlc3RGYWNpbGl0aWVzID0gbmV3IFNlbGVjdGlvbkxpc3QoKFN0cmluZ1tdKSBuZXdUZXN0VHlwZXMudG9BcnJheSh0ZW1wQXJyYXkpLCAwKTsKLQl9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRMYXVuY2hlZFNlcnZpY2VUZXN0TmFtZShTdHJpbmcgbGF1bmNoZWRTZXJ2aWNlVGVzdE5hbWUpCi0gIHsKLSAgCXRoaXMubGF1bmNoZWRTZXJ2aWNlVGVzdE5hbWUgPSBsYXVuY2hlZFNlcnZpY2VUZXN0TmFtZTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0R2VuZXJhdGVQcm94eShib29sZWFuIGdlbmVyYXRlUHJveHkpCi0gIHsKLSAgCXRoaXMuZ2VuZXJhdGVQcm94eSA9IGdlbmVyYXRlUHJveHk7Ci0gIH0KLSAgICAKLSAgLyoqCi0gICAqIFNldHMgdGhlIGNsaWVudCBydW50aW1lIElELgotICAgKiAKLSAgICogQHBhcmFtIGNsaWVudFJ1bnRpbWVJZCBUaGUgY2xpZW50IHJ1bnRpbWUgSUQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRSdW50aW1lSWQoU3RyaW5nIGNsaWVudFJ1bnRpbWVJZCkgewotCSAgY2xpZW50UnVudGltZUlkXyA9IGNsaWVudFJ1bnRpbWVJZDsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC9UZXN0V2ViU2VydmljZUNsaWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvVGVzdFdlYlNlcnZpY2VDbGllbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTRlZmFhYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC9UZXN0V2ViU2VydmljZUNsaWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5JQ29tbWFuZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuQWJzdHJhY3RXZWJTZXJ2aWNlQ2xpZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZUNsaWVudEluZm87Ci0KLXB1YmxpYyBjbGFzcyBUZXN0V2ViU2VydmljZUNsaWVudCBleHRlbmRzIEFic3RyYWN0V2ViU2VydmljZUNsaWVudCB7Ci0gIAotICBwdWJsaWMgVGVzdFdlYlNlcnZpY2VDbGllbnQoV2ViU2VydmljZUNsaWVudEluZm8gY2xpZW50SW5mbyl7Ci0Jc3VwZXIoY2xpZW50SW5mbyk7ICAKLSAgfQotICAKLSAgcHVibGljIElDb21tYW5kRmFjdG9yeSBhc3NlbWJsZShJRW52aXJvbm1lbnQgZW52LCBJQ29udGV4dCBjdHgsIElTZWxlY3Rpb24gc2VsLAotICAgICAgU3RyaW5nIHByb2plY3QsIFN0cmluZyBlYXJQcm9qZWN0KXsKLSAgICByZXR1cm4gbnVsbDsJICAKLSAgfQotCQkJCi0gIHB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgZGVwbG95KElFbnZpcm9ubWVudCBlbnYsIElDb250ZXh0IGN0eCwgSVNlbGVjdGlvbiBzZWwsCi0gICAgICBTdHJpbmcgcHJvamVjdCwgU3RyaW5nIGVhclByb2plY3QpewotICAgIHJldHVybiBudWxsOwkgIAotICB9Ci0JCQkKLQotICBwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IGRldmVsb3AoSUVudmlyb25tZW50IGVudiwgSUNvbnRleHQgY3R4LCBJU2VsZWN0aW9uIHNlbCwKLQkJICAgICAgU3RyaW5nIHByb2plY3QsIFN0cmluZyBlYXJQcm9qZWN0KXsKLSAgICByZXR1cm4gbnVsbDsJICAKLSAgfQotCQkJCQotICBwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IGluc3RhbGwoSUVudmlyb25tZW50IGVudiwgSUNvbnRleHQgY3R4LCBJU2VsZWN0aW9uIHNlbCwKLQkJICAgICAgU3RyaW5nIHByb2plY3QsIFN0cmluZyBlYXJQcm9qZWN0KXsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCQkJCi0KLSAgcHVibGljIElDb21tYW5kRmFjdG9yeSBydW4oSUVudmlyb25tZW50IGVudiwgSUNvbnRleHQgY3R4LCBJU2VsZWN0aW9uIHNlbCwKLQkJICAgICAgU3RyaW5nIHByb2plY3QsIFN0cmluZyBlYXJQcm9qZWN0KXsKLSAgICByZXR1cm4gbnVsbDsJICAKLSAgfQotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L1dTRExGaW5pc2hGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvV1NETEZpbmlzaEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0NTUzZTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvV1NETEZpbmlzaEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qCi0gKiBDcmVhdGVkIG9uIE1heSA0LCAyMDA0Ci0gKgotICogVE9ETyBUbyBjaGFuZ2UgdGhlIHRlbXBsYXRlIGZvciB0aGlzIGdlbmVyYXRlZCBmaWxlIGdvIHRvCi0gKiBXaW5kb3cgLSBQcmVmZXJlbmNlcyAtIEphdmEgLSBDb2RlIFN0eWxlIC0gQ29kZSBUZW1wbGF0ZXMKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQm9vbGVhbkZyYWdtZW50OwotCi0vKioKLSAqIEBhdXRob3IgZ2lsYmVydGEKLSAqCi0gKiBUT0RPIFRvIGNoYW5nZSB0aGUgdGVtcGxhdGUgZm9yIHRoaXMgZ2VuZXJhdGVkIHR5cGUgY29tbWVudCBnbyB0bwotICogV2luZG93IC0gUHJlZmVyZW5jZXMgLSBKYXZhIC0gQ29kZSBTdHlsZSAtIENvZGUgVGVtcGxhdGVzCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMRmluaXNoRnJhZ21lbnQgZXh0ZW5kcyBCb29sZWFuRnJhZ21lbnR7Ci0gIAotIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3QvV1NETFRlc3RMYXVuY2hDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC9XU0RMVGVzdExhdW5jaENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQ2YTcyYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC9XU0RMVGVzdExhdW5jaENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qCi0gKiBDcmVhdGVkIG9uIE1heSA0LCAyMDA0Ci0gKgotICogV2luZG93IC0gUHJlZmVyZW5jZXMgLSBKYXZhIC0gQ29kZSBTdHlsZSAtIENvZGUgVGVtcGxhdGVzCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5kYXRhLlR5cGVSdW50aW1lU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQudGVzdC5XZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZXh0LnRlc3QuV2ViU2VydmljZVRlc3RSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5JQ29tbWFuZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSVN0YXR1c0hhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuU2VydmVyQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JV2ViU2VydmljZVRlc3RlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5UZXN0SW5mbzsKLQotLyoqCi0gKiBAYXV0aG9yIGdpbGJlcnRhCi0gKgotICogV2luZG93IC0gUHJlZmVyZW5jZXMgLSBKYXZhIC0gQ29kZSBTdHlsZSAtIENvZGUgVGVtcGxhdGVzCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMVGVzdExhdW5jaENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotICBwcml2YXRlIFN0cmluZyB0ZXN0SUQ7IAotICBwcml2YXRlIFN0cmluZyBsYXVuY2hlZFNlcnZpY2VUZXN0TmFtZTsKLSAgcHJpdmF0ZSBUeXBlUnVudGltZVNlcnZlciBzZXJ2aWNlaWRzOwotICBwcml2YXRlIFN0cmluZyBzZXJ2ZXJQcm9qZWN0OwotICBwcml2YXRlIFN0cmluZyBzZXJ2ZXJNb2R1bGU7Ci0gIHByaXZhdGUgU3RyaW5nIHdzZGxVUkk7Ci0gIHByaXZhdGUgYm9vbGVhbiBleHRlcm5hbEJyb3dzZXI7Ci0gIHByaXZhdGUgTGlzdCBlbmRwb2ludHM7Ci0gIHByaXZhdGUgSVNlcnZlciBzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIgPSBudWxsOwotICBwcml2YXRlIFN0cmluZyBzZXJ2aWNlU2VydmVyVHlwZUlEID0gbnVsbDsKLSAgcHJpdmF0ZSBTdHJpbmcgc2VydmljZVNlcnZlckluc3RhbmNlSWQgPSBudWxsOwotCQotICBwdWJsaWMgV1NETFRlc3RMYXVuY2hDb21tYW5kKCkKLSAgewotICB9Ci0gIAotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgeyAgICAKLSAgICBJRW52aXJvbm1lbnQgZW52ID0gZ2V0RW52aXJvbm1lbnQoKTsKLSAgCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgCQotICAJV2ViU2VydmljZVRlc3RSZWdpc3RyeSB0ZXN0UmVnaXN0cnkgPSBXZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5LmdldEluc3RhbmNlKCk7Ci0gIAlXZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbiB3c2N0ZSA9IChXZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbil0ZXN0UmVnaXN0cnkuZ2V0V2ViU2VydmljZUV4dGVuc2lvbnNCeU5hbWUodGVzdElEKTsKLQlJV2ViU2VydmljZVRlc3RlciBpd3N0ID0gKElXZWJTZXJ2aWNlVGVzdGVyKXdzY3RlLmdldFdlYlNlcnZpY2VFeGVjdXRhYmxlRXh0ZW5zaW9uKCk7Ci0JVGVzdEluZm8gdGVzdEluZm8gPSBnZXRUZXN0SW5mbygpOwotCQotCQotCXN0YXR1cyA9IGNvbW1hbmRGYWN0b3J5RXhlY3V0aW9uKGl3c3QubGF1bmNoKHRlc3RJbmZvKSxlbnYsIG1vbml0b3IpOwotCQotICAgIC8vRG9udCBuZWVkIHRvIHNodXQgZXZlcnl0aGluZyBkb3duIGJlY2F1c2UgdGhlIHdzZGwgdGVzdCBkb2VzbnQgd29yawotICAgIGlmKHN0YXR1cy5nZXRTZXZlcml0eSgpICE9IFN0YXR1cy5PSyl7Ci0gICAgICBJU3RhdHVzSGFuZGxlciBzSGFuZGxlciA9IGVudi5nZXRTdGF0dXNIYW5kbGVyKCk7Ci0gICAgICBJU3RhdHVzIGluZm9TdGF0dXMgPSBTdGF0dXNVdGlscy5pbmZvU3RhdHVzKCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX1VOQUJMRV9UT19MQVVOQ0hfV1NETF9URVNUICk7Ci0gICAgICBzSGFuZGxlci5yZXBvcnRJbmZvKGluZm9TdGF0dXMpOwotICAgICAgcmV0dXJuIGluZm9TdGF0dXM7CQotICAgIH0KLSAgIHJldHVybiBzdGF0dXM7Ci0gIAkKLSAgfQotCi0gIHByaXZhdGUgSVN0YXR1cyBjb21tYW5kRmFjdG9yeUV4ZWN1dGlvbihJQ29tbWFuZEZhY3RvcnkgY29tbWFuZEZhY3RvcnksSUVudmlyb25tZW50IGVudiwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKQotICB7Ci0JSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOyAgCQotCXdoaWxlKGNvbW1hbmRGYWN0b3J5Lmhhc05leHQoKSkKLSAgeyAKLQkgIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIG9wZXJhdGlvbiA9IGNvbW1hbmRGYWN0b3J5LmdldE5leHRDb21tYW5kKCk7Ci0gICAgCi0JICBpZiAob3BlcmF0aW9uICE9IG51bGwpCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIG9wZXJhdGlvbi5zZXRFbnZpcm9ubWVudCggZW52ICk7Ci0JICAgICAgc3RhdHVzID0gb3BlcmF0aW9uLmV4ZWN1dGUoIG1vbml0b3IsIG51bGwgKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoKCBFeGNlcHRpb24gZXhjICkKLSAgICAgIHsKLSAgICAgICAgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIGV4YyApOwotICAgICAgfQotICAgIH0KLSAgICAKLQkgIGlmKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUil7Ci0JICAgIElTdGF0dXNIYW5kbGVyIHNIYW5kbGVyID0gZW52LmdldFN0YXR1c0hhbmRsZXIoKTsKLQkJc0hhbmRsZXIucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJcmV0dXJuIHN0YXR1czsKLQkgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHN0YXR1czsKLSAgfQotICAKLSAgCi0gIHByaXZhdGUgVGVzdEluZm8gZ2V0VGVzdEluZm8oKQotICB7Ci0gICAgLy8JZ2V0IHRoZSBzZXJ2ZXIgc3R1ZmYKLSAgICBpZiAoc2VydmljZWlkcy5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCkgIT0gbnVsbCkgCi0JICBzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIgPSBTZXJ2ZXJDb3JlLmZpbmRTZXJ2ZXIoc2VydmljZWlkcy5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCkpOwotICAgIGVsc2UgaWYgKHNlcnZpY2VTZXJ2ZXJJbnN0YW5jZUlkIT1udWxsKQotCQlzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIgPSBTZXJ2ZXJDb3JlLmZpbmRTZXJ2ZXIoc2VydmljZVNlcnZlckluc3RhbmNlSWQpOwotCQotCWlmIChzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIgIT0gbnVsbCkKLQkgIHNlcnZpY2VTZXJ2ZXJUeXBlSUQgPSBzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIuZ2V0U2VydmVyVHlwZSgpLmdldElkKCk7Ci0JZWxzZQotCSAgc2VydmljZVNlcnZlclR5cGVJRCA9IHNlcnZpY2VpZHMuZ2V0U2VydmVySWQoKTsKLQkvLyBzZXJ2ZXIgd2lsbCBiZSBjcmVhdGVkIGluIFNlcnZlckRlcGxveWFibGVDb25maWd1cmF0aW9uQ29tbWFuZAotICAKLSAgICBUZXN0SW5mbyB0ZXN0SW5mbyA9IG5ldyBUZXN0SW5mbygpOwotCWlmIChzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIhPW51bGwpCi0JCXRlc3RJbmZvLnNldFNlcnZpY2VFeGlzdGluZ1NlcnZlcihzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIpOwotICAgIHRlc3RJbmZvLnNldFNlcnZpY2VTZXJ2ZXJUeXBlSUQoc2VydmljZVNlcnZlclR5cGVJRCk7Ci0JdGVzdEluZm8uc2V0U2VydmljZVByb2plY3Qoc2VydmVyUHJvamVjdCk7Ci0JdGVzdEluZm8uc2V0V3NkbFNlcnZpY2VVUkwod3NkbFVSSSk7Ci0JdGVzdEluZm8uc2V0RXh0ZXJuYWxCcm93c2VyKGV4dGVybmFsQnJvd3Nlcik7Ci0JdGVzdEluZm8uc2V0RW5kcG9pbnQoZW5kcG9pbnRzKTsKLQlyZXR1cm4gdGVzdEluZm87Ci0JCi0gIH0KLSAgCi0gIAotICBwdWJsaWMgdm9pZCBzZXRUZXN0SUQoU3RyaW5nIHRlc3RJRCkKLSAgewotICAJdGhpcy50ZXN0SUQgPSB0ZXN0SUQ7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldExhdW5jaGVkU2VydmljZVRlc3ROYW1lKCkKLSAgewotICAgIHJldHVybiBsYXVuY2hlZFNlcnZpY2VUZXN0TmFtZTsJCi0gIH0KLSAgcHVibGljIHZvaWQgc2V0V3NkbFVSSShTdHJpbmcgd3NkbFVSSSkKLSAgewotICAJdGhpcy53c2RsVVJJID0gd3NkbFVSSTsKLSAgfQotICAgIAotICBwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJQcm9qZWN0KFN0cmluZyBzZXJ2ZXJQcm9qZWN0KQotICB7Ci0gICAgdGhpcy5zZXJ2ZXJQcm9qZWN0ID0gc2VydmVyUHJvamVjdDsKLSAgfQotCi0gIAotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoVHlwZVJ1bnRpbWVTZXJ2ZXIgc2VydmljZWlkcykKLSAgewotICAgIHRoaXMuc2VydmljZWlkcyA9IHNlcnZpY2VpZHM7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRFeHRlcm5hbEJyb3dzZXIoYm9vbGVhbiBleHRlcm5hbEJyb3dzZXIpCi0gIHsKLQkgIHRoaXMuZXh0ZXJuYWxCcm93c2VyID0gZXh0ZXJuYWxCcm93c2VyOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRFbmRwb2ludChMaXN0IGVuZHBvaW50cykKLSAgewotICAgIHRoaXMuZW5kcG9pbnRzID0gZW5kcG9pbnRzOwotICB9Ci0KLXB1YmxpYyBTdHJpbmcgZ2V0U2VydmVyTW9kdWxlKCkgewotCXJldHVybiBzZXJ2ZXJNb2R1bGU7Ci19Ci0KLXB1YmxpYyB2b2lkIHNldFNlcnZlck1vZHVsZShTdHJpbmcgc2VydmVyTW9kdWxlKSB7Ci0JdGhpcy5zZXJ2ZXJNb2R1bGUgPSBzZXJ2ZXJNb2R1bGU7Ci19Ci0KLXB1YmxpYyB2b2lkIHNldFNlcnZpY2VTZXJ2ZXJJbnN0YW5jZUlkKFN0cmluZyBzc0luc3RhbmNlSWQpewotCXRoaXMuc2VydmljZVNlcnZlckluc3RhbmNlSWQgPSBzc0luc3RhbmNlSWQ7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L1dlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L1dlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWNkNjU1OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC9XZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNjA4ICAgMTQ0NTAwIG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbgotICogMjAwNjA4MTggICAxNTM5MDMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIEJyb3dzZSBkb2VzIG5vdCB3b3JrIGluIGdlbmVyYXRlIGNsaWVudCB0ZXN0IHBhZ2UKLSAqIDIwMDYwOTA2ICAgMTU0NTQ4IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MsIFRoaXMgZml4ZXMgbmFtZSBjb2xsaXNpb25zIHdoZW4gY3JlYXRpbmcgYSBzYW1wbGUgcHJvamVjdAotICogMjAwNjA5MjIgICAxNTgxNzcgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIE5QRSB3aGVuIGNyZWF0aW5nIHdlYiBzZXJ2aWNlIGNsaWVudCBpbnRvIGV4aXN0aW5nIEphdmEgcHJvamVjdCB3aXRoIHRlc3QKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0OwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3RJdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkphdmFDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhSGVscGVyczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5NZXRob2Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmludGVybmFsLnByb2plY3QuSjJFRVByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uLkphdmFNb2ZSZWZsZWN0aW9uQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5zZWxlY3Rpb24uQm9vbGVhblNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklTdGF0dXNIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLQotLyoqCi0qIFRoaXMgdGFzayBzZXRzIHVwIGFsbCB0aGUgZGVmYXVsdHMgZm9yIHRoZSB3ZWJzZXJ2aWNlIHRlc3QKLSogY2xpZW50IHBhZ2UKLSoKLSovCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfV0VCX01PRFVMRV9ST09UID0gIldlYkNvbnRlbnQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX1NBTVBMRV9XRUJfUFJPSkVDVF9FWFQgPSAiU2FtcGxlIjsKLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBTQU1QTEVfRElSID0gInNhbXBsZSI7Ci0gIAotICBwcml2YXRlIFN0cmluZyBjbGllbnRQcm9qZWN0OwotICBwcml2YXRlIFN0cmluZyBjbGllbnRQcm9qZWN0RUFSOwotICBwcml2YXRlIFN0cmluZyBjbGllbnRQOwotICBwcml2YXRlIFN0cmluZyBjbGllbnRDOwotICBwcml2YXRlIElQcm9qZWN0IGNsaWVudElQcm9qZWN0OwotICBwcml2YXRlIFN0cmluZyBmb2xkZXI7Ci0gIHByaXZhdGUgU3RyaW5nIGpzcEZvbGRlcjsKLSAgcHJpdmF0ZSBCb29sZWFuU2VsZWN0aW9uW10gbWV0aG9kczsKLSAgcHJpdmF0ZSBTdHJpbmcgcHJveHlCZWFuOwotICBwcml2YXRlIFN0cmluZyBzYW1wbGVQcm9qZWN0OwotICBwcml2YXRlIFN0cmluZyBzYW1wbGVQOwotICBwcml2YXRlIFN0cmluZyBzYW1wbGVDOwotICBwcml2YXRlIFN0cmluZyBzYW1wbGVQcm9qZWN0RUFSOwotCi0gIAotICAKLSAgLyoqCi0gICogQ29uc3RydWN0cyBhIG5ldyBXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxUYXNrIG9iamVjdCB3aXRoIHRoZSBnaXZlbiBsYWJlbCBhbmQgZGVzY3JpcHRpb24uCi0gICovCi0gIHB1YmxpYyBXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kICgpCi0gIHsKLQotICB9Ci0KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLSAgICBJRW52aXJvbm1lbnQgZW52ID0gZ2V0RW52aXJvbm1lbnQoKTsKLSAgCQotCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgCQotCXNhbXBsZVByb2plY3RBbmRFYXJTZXR1cChlbnYpOwotCUlQYXRoIHdlYmNvbnRlbnRQYXRoID0gbnVsbDsKLQotCS8vICpuZWVkKiB0byBkb3VibGUtY2hlY2sgdGhhdCBjbGllbnRJUHJvamVjdCBpcyBhIHdlYiBwcm9qZWN0Ci0JaWYgKEoyRUVVdGlscy5pc1dlYkNvbXBvbmVudChjbGllbnRJUHJvamVjdCkpCi0JCXdlYmNvbnRlbnRQYXRoID0gSjJFRVV0aWxzLmdldFdlYkNvbnRlbnRQYXRoKGNsaWVudElQcm9qZWN0KTsKLQkKLSAgICAvL0dldCB0aGUgc2FtcGxlIEZvbGRlciByZWFkeQotICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAKLSAgICBpZiAod2ViY29udGVudFBhdGggIT0gbnVsbCkKLSAgICB7CQotICAgIAlTdHJpbmcgcGF0aCA9IHdlYmNvbnRlbnRQYXRoLnRvU3RyaW5nKCk7Ci0gICAgCXNiLmFwcGVuZChwYXRoKS5hcHBlbmQoIi8iKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsJLy90aGVuIGp1c3QgdXNlIHRoZSBkZWZhdWx0Ci0gICAgCXNiLmFwcGVuZCgiLyIpLmFwcGVuZChzYW1wbGVDKS5hcHBlbmQoIi8iKS5hcHBlbmQoREVGQVVMVF9XRUJfTU9EVUxFX1JPT1QpLmFwcGVuZCgiLyIpOwotICAgIH0KLSAgICBmb2xkZXIgPSBTQU1QTEVfRElSICsgZ2V0QmVhbigpOyAKLSAgICAgICAgCi0gICAgc2IuYXBwZW5kKGZvbGRlcik7Ci0gICAganNwRm9sZGVyID0gc2IudG9TdHJpbmcoKTsKLSAgICAKLSAgICAvL2dldCB0aGUgbWV0aG9kIG5hbWVzIHJlYWR5Ci0gICAgLy9maW5kIHRoZSBmdWxsIHBhdGggb2YgdGhlIGZpbGUgaW4gdGhlIHByb2plY3QKLSAgICAvKgotICAgICogR2V0dGluZyB0aGUgbWV0aG9kIG5hbWVzIHVzaW5nIGphdmFtb2YgaW50cm9zcGVjdGlvbgotICAgICovCi0gICAgaWYocHJveHlCZWFuID09IG51bGwpewotICAgICAgSVN0YXR1c0hhbmRsZXIgc0hhbmRsZXIgPSBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpOwotICAgICAgSVN0YXR1cyBlcnJvclN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX0pUU19QUk9YWV9OT1RfQ09NUElMRUQgKTsKLSAgICAgIHNIYW5kbGVyLnJlcG9ydEVycm9yKGVycm9yU3RhdHVzKTsKLSAgICAgIHJldHVybiBlcnJvclN0YXR1czsKLSAgICAgIAotICAgIH0gCQotICAgIAotICAgIAotICAgIEphdmFNb2ZSZWZsZWN0aW9uQ29tbWFuZCBqYXZhbW9mY29tbWFuZCA9IG5ldyBKYXZhTW9mUmVmbGVjdGlvbkNvbW1hbmQoKTsgCi0gICAgamF2YW1vZmNvbW1hbmQuc2V0UHJveHlCZWFuKHByb3h5QmVhbik7Ci0gICAgamF2YW1vZmNvbW1hbmQuc2V0Q2xpZW50UHJvamVjdChjbGllbnRQKTsKLSAgICBqYXZhbW9mY29tbWFuZC5zZXRFbnZpcm9ubWVudCggZW52ICk7Ci0gICAgCi0gICAgCi0gICAgCi0gICAgdHJ5eyAKLSAgICAgIElTdGF0dXMgbW9mU3RhdHVzID0gamF2YW1vZmNvbW1hbmQuZXhlY3V0ZSggbW9uaXRvciwgbnVsbCk7Ci0gICAgICBpZihtb2ZTdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpCi0gICAgICAJcmV0dXJuIG1vZlN0YXR1czsKLSAgICB9Y2F0Y2goRXhjZXB0aW9uIGV4Yyl7Ci0gICAgCUlTdGF0dXNIYW5kbGVyIHNIYW5kbGVyID0gZW52LmdldFN0YXR1c0hhbmRsZXIoKTsKLSAgICAgICAgSVN0YXR1cyBlcnJvclN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX0pUU19QUk9YWV9OT1RfQ09NUElMRUQgKTsKLSAgICAgICAgc0hhbmRsZXIucmVwb3J0RXJyb3IoZXJyb3JTdGF0dXMpOwotICAgICAgICByZXR1cm4gZXJyb3JTdGF0dXM7Ci0gICAgfSAgCi0gICAgSmF2YUhlbHBlcnMgamF2YUhlbHBlcnMgPSBqYXZhbW9mY29tbWFuZC5nZXRKYXZhQ2xhc3MoKTsKLSAgICBpZiAoamF2YUhlbHBlcnMgPT0gbnVsbCkgcmV0dXJuIHN0YXR1czsKLSAgICAgIAotICAgIEphdmFDbGFzcyBqYXZhQ2xhc3MgPSBudWxsOyAKLSAgICBpZihqYXZhSGVscGVycyBpbnN0YW5jZW9mIEphdmFDbGFzcykgCi0gICAgIGphdmFDbGFzcyA9IChKYXZhQ2xhc3MpamF2YUhlbHBlcnM7IAotICAgIGVsc2UgcmV0dXJuIHN0YXR1czsgCi0gICAgTGlzdCBtZXRob2RMaXN0ID0gamF2YUNsYXNzLmdldFB1YmxpY01ldGhvZHMoKTsKLSAJQm9vbGVhblNlbGVjdGlvbltdIHRlbXBNZXRob2RzID0gbmV3IEJvb2xlYW5TZWxlY3Rpb25bbWV0aG9kTGlzdC5zaXplKCldOwotICAgIExpc3RJdGVyYXRvciBsaXN0SXRlcmF0b3IgPSBtZXRob2RMaXN0Lmxpc3RJdGVyYXRvcigpOwotICAgIAotICAgIGludCBqID0gMDsKLSAJd2hpbGUgKGxpc3RJdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgTWV0aG9kIG1ldGhvZCA9IChNZXRob2QpbGlzdEl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIGlmKG1ldGhvZC5pc0NvbnN0cnVjdG9yKCkpIGNvbnRpbnVlOwotICAgICAgCi0gICAgICB0ZW1wTWV0aG9kc1tqXSA9IG5ldyBCb29sZWFuU2VsZWN0aW9uKCBtZXRob2QuZ2V0TWV0aG9kRWxlbWVudFNpZ25hdHVyZSgpLCB0cnVlKTsgICAgICAKLSAgICAgIGorKzsKLSAgICB9IAotICAgIG1ldGhvZHMgPSB0ZW1wTWV0aG9kczsKLSAgICByZXR1cm4gc3RhdHVzOwotICB9Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfU0FNUExFX0VBUl9QUk9KRUNUX0VYVCA9ICJFQVIiOwotICAKLSAgcHJpdmF0ZSB2b2lkIHNhbXBsZVByb2plY3RBbmRFYXJTZXR1cChJRW52aXJvbm1lbnQgZW52KQotICB7Ci0JaWYoY2xpZW50UHJvamVjdCA9PSBudWxsKSByZXR1cm47Ci0gIAllbHNlewotCSAgaW50IGluZGV4ID0gY2xpZW50UHJvamVjdC5pbmRleE9mKCIvIik7Ci0JICBjbGllbnRQID0gY2xpZW50UHJvamVjdC5zdWJzdHJpbmcoMCxpbmRleCk7Ci0JICBjbGllbnRDID0gY2xpZW50UHJvamVjdC5zdWJzdHJpbmcoaW5kZXggKyAxKTsKLSAgCX0KLQkgIAotCWNsaWVudElQcm9qZWN0ID0gKElQcm9qZWN0KVByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChjbGllbnRQKTsKLSAgCQotICAJaWYoSjJFRVV0aWxzLmlzV2ViQ29tcG9uZW50KGNsaWVudElQcm9qZWN0KSl7Ci0gICAgICBzYW1wbGVQcm9qZWN0ID0gY2xpZW50UHJvamVjdDsKLQkgIHNhbXBsZVAgPSBjbGllbnRQOwotCSAgc2FtcGxlQyA9IGNsaWVudEM7Ci0gCX0gIAkKLSAgCWVsc2V7IAotICAJICBzYW1wbGVQID0gY2xpZW50UCArIERFRkFVTFRfU0FNUExFX1dFQl9QUk9KRUNUX0VYVDsKLQkgIHNhbXBsZUMgPSBjbGllbnRDICsgREVGQVVMVF9TQU1QTEVfV0VCX1BST0pFQ1RfRVhUOwotCSAgc2FtcGxlUHJvamVjdCA9IHNhbXBsZVAgKyAiLyIgKyBzYW1wbGVDOwotCSAgCi0JICBTdHJpbmcgc2FtcGxlVGVtcCA9IHNhbXBsZVA7Ci0JICAKLQkgIGJvb2xlYW4gbmFtZUZvdW5kID0gZmFsc2U7Ci0JICBpbnQgaSA9IDE7Ci0JICB3aGlsZSghbmFtZUZvdW5kKXsKLQkJICBJUHJvamVjdCBzYW1wbGVJUHJvamVjdCA9IChJUHJvamVjdClQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3Qoc2FtcGxlVGVtcCk7Ci0JCSAgaWYoc2FtcGxlSVByb2plY3QuZXhpc3RzKCkgJiYgIUoyRUVQcm9qZWN0VXRpbGl0aWVzLmlzRHluYW1pY1dlYlByb2plY3Qoc2FtcGxlSVByb2plY3QpKXsKLQkJCSAgc2FtcGxlVGVtcCA9IHNhbXBsZVAgKyBJbnRlZ2VyLnRvU3RyaW5nKGkpOwotCQkJICBzYW1wbGVQcm9qZWN0ID0gc2FtcGxlVGVtcCArICIvIiArIHNhbXBsZUM7Ci0JCSAgICAgIAotCQkgIH0KLQkJICBlbHNlCi0JCQkgIG5hbWVGb3VuZCA9IHRydWU7IAotCQkgIAotCQkgIGkrKzsKLQkgIH0KLQkgIHNhbXBsZVAgPSBzYW1wbGVUZW1wOwotICAgIAotICAJfSAgCi0JCi0gIAkKLSAgCQotICAJCi0gIAlzYW1wbGVQcm9qZWN0RUFSID0gY2xpZW50UHJvamVjdEVBUjsKLQlpZiAoc2FtcGxlUHJvamVjdEVBUiA9PSBudWxsIHx8IHNhbXBsZVByb2plY3RFQVIubGVuZ3RoKCk9PTApewotCSAgc2FtcGxlUHJvamVjdEVBUiA9IHNhbXBsZVAgKyBERUZBVUxUX1NBTVBMRV9FQVJfUFJPSkVDVF9FWFQgKyAiLyIgKyBzYW1wbGVDICsgREVGQVVMVF9TQU1QTEVfRUFSX1BST0pFQ1RfRVhUOwkKLQl9Ci0JCi0gIH0KLSAgICAKLSAgLy9nZXR0ZXJzIGFuZCBzZXR0ZXJzCi0gIAotICBwcml2YXRlIFN0cmluZyBnZXRCZWFuKCkKLSAgewotICAJaW50IGluZGV4ID0gcHJveHlCZWFuLmxhc3RJbmRleE9mKCIuIik7Ci0gIAlTdHJpbmcgZW5kID0gIiI7Ci0gIAlpZihpbmRleCAhPSAtMSl7Ci0gIAkgIGVuZCA9IHByb3h5QmVhbi5zdWJzdHJpbmcoaW5kZXggKyAxKTsgIAkKLSAgCX0KLSAgCVN0cmluZyBiZWFuID0gZW5kLnN1YnN0cmluZygwLGVuZC5sZW5ndGgoKSk7Ci0gICAgCi0gIAlyZXR1cm4gYmVhbjsKLSAgfQotICAKLSAgCi0gCi0gIAotICBwdWJsaWMgU3RyaW5nIGdldEZvbGRlcigpCi0gIHsKLSAgCXJldHVybiBmb2xkZXI7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SnNwRm9sZGVyKCkKLSAgewotICAJcmV0dXJuIGpzcEZvbGRlcjsKLSAgfQotICAKLSAgcHVibGljIEJvb2xlYW5TZWxlY3Rpb25bXSBnZXRNZXRob2RzKCkKLSAgewotICAgIHJldHVybiBtZXRob2RzOyAgCi0gIH0KLSAgICAKLSAgcHVibGljIFN0cmluZyBnZXRTYW1wbGVQcm9qZWN0KCkKLSAgewotICAJcmV0dXJuIHNhbXBsZVByb2plY3Q7Ci0gIH0KLSAgICAgICAKLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50UHJvamVjdChTdHJpbmcgY2xpZW50UHJvamVjdCkKLSAgewotICAgIHRoaXMuY2xpZW50UHJvamVjdCA9IGNsaWVudFByb2plY3Q7Ci0gIH0KLSAgCi0gICAgCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudFByb2plY3RFQVIoU3RyaW5nIGNsaWVudFByb2plY3RFQVIpCi0gIHsKLSAgICB0aGlzLmNsaWVudFByb2plY3RFQVIgPSBjbGllbnRQcm9qZWN0RUFSOwotICB9Ci0gIAotICAKLSAgcHVibGljIHZvaWQgc2V0UHJveHlCZWFuKFN0cmluZyBwcm94eUJlYW4pCi0gIHsKLSAgCXRoaXMucHJveHlCZWFuID0gcHJveHlCZWFuOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFNhbXBsZVByb2plY3RFQVIoKQotICB7Ci0gICAgcmV0dXJuIHNhbXBsZVByb2plY3RFQVI7Ci0gIH0KLSAgCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L1dlYlNlcnZpY2VUZXN0Q2xpZW50RGVwYXJ0dXJlRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L1dlYlNlcnZpY2VUZXN0Q2xpZW50RGVwYXJ0dXJlRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQ5NDVhNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC9XZWJTZXJ2aWNlVGVzdENsaWVudERlcGFydHVyZUZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qCi0gKiBDcmVhdGVkIG9uIE1hciAyNSwgMjAwNAotICoKLSAqIFRvIGNoYW5nZSB0aGUgdGVtcGxhdGUgZm9yIHRoaXMgZ2VuZXJhdGVkIGZpbGUgZ28gdG8KLSAqIFdpbmRvdyAtIFByZWZlcmVuY2VzIC0gSmF2YSAtIENvZGUgR2VuZXJhdGlvbiAtIENvZGUgYW5kIENvbW1lbnRzCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5CdWlsZFByb2plY3RDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3Qud3NzYW1wbGUuQWRkTW9kdWxlRGVwZW5kZW5jaWVzQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2VxdWVuY2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TaW1wbGVGcmFnbWVudDsKLQotCi0vKioKLSAqIEBhdXRob3IgZ2lsYmVydGEKLSAqCi0gKiBUbyBjaGFuZ2UgdGhlIHRlbXBsYXRlIGZvciB0aGlzIGdlbmVyYXRlZCB0eXBlIGNvbW1lbnQgZ28gdG8KLSAqIFdpbmRvdyAtIFByZWZlcmVuY2VzIC0gSmF2YSAtIENvZGUgR2VuZXJhdGlvbiAtIENvZGUgYW5kIENvbW1lbnRzCi0gKi8KLXB1YmxpYyBjbGFzcyBXZWJTZXJ2aWNlVGVzdENsaWVudERlcGFydHVyZUZyYWdtZW50IGV4dGVuZHMgU2VxdWVuY2VGcmFnbWVudCAKLXsKLSAgcHVibGljIFdlYlNlcnZpY2VUZXN0Q2xpZW50RGVwYXJ0dXJlRnJhZ21lbnQoKQotICB7Ci0gIAlhZGQobmV3IFNpbXBsZUZyYWdtZW50KG5ldyBGaW5pc2hEZWZhdWx0Q29tbWFuZCgpLCIiKSk7Ci0gICAJYWRkKG5ldyBTaW1wbGVGcmFnbWVudChuZXcgQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZCgpLCIiKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyhEYXRhTWFwcGluZ1JlZ2lzdHJ5IGRhdGFSZWdpc3RyeSkKLSAgewotICAJZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoVGVzdENsaWVudERlcGFydHVyZUluaXRDb21tYW5kLmNsYXNzLCAiRm9yY2VCdWlsZCIsQnVpbGRQcm9qZWN0Q29tbWFuZC5jbGFzcyk7Ci0gIAlkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhGaW5pc2hEZWZhdWx0Q29tbWFuZC5jbGFzcywgIlNhbXBsZVNlcnZlclR5cGVJRCIsQWRkTW9kdWxlRGVwZW5kZW5jaWVzQ29tbWFuZC5jbGFzcyk7Ci0gIAlkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhGaW5pc2hEZWZhdWx0Q29tbWFuZC5jbGFzcywgIlNhbXBsZUV4aXN0aW5nU2VydmVyIixBZGRNb2R1bGVEZXBlbmRlbmNpZXNDb21tYW5kLmNsYXNzKTsKLSAgCWRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEZpbmlzaERlZmF1bHRDb21tYW5kLmNsYXNzLCAiU2FtcGxlU2VydmVyVHlwZUlEIixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgCWRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEZpbmlzaERlZmF1bHRDb21tYW5kLmNsYXNzLCAiU2FtcGxlRXhpc3RpbmdTZXJ2ZXIiLENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAJICAgIAotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L2V4cGxvcmVyL0V4cGxvcmVyU2VydmljZVRlc3RDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC9leHBsb3Jlci9FeHBsb3JlclNlcnZpY2VUZXN0Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZWU3YjYzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L2V4cGxvcmVyL0V4cGxvcmVyU2VydmljZVRlc3RDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0LmV4cGxvcmVyOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQudGVzdC5XU0RMVGVzdEZpbmlzaENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIuTGF1bmNoT3B0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5MYXVuY2hPcHRpb25zOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5XU0V4cGxvcmVyTGF1bmNoZXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbHVnaW4uRXhwbG9yZXJQbHVnaW47Ci0KLXB1YmxpYyBjbGFzcyBFeHBsb3JlclNlcnZpY2VUZXN0Q29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIGltcGxlbWVudHMgV1NETFRlc3RGaW5pc2hDb21tYW5kCi17Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGV4dGVybmFsQnJvd3NlciA9IHRydWU7Ci0gIHByaXZhdGUgU3RyaW5nIHdzZGxTZXJ2aWNlVVJMOwotICBwcml2YXRlIExpc3QgZW5kcG9pbnRzOwotICAKLSAgLyoqCi0gICogQ29uc3RydWN0cyBhIG5ldyBXZWJTZXJ2aWNlRXhwbG9yZXJMYXVuY2ggb2JqZWN0IHdpdGggdGhlIGdpdmVuIGxhYmVsIGFuZCBkZXNjcmlwdGlvbi4KLSAgKi8KLSAgcHVibGljIEV4cGxvcmVyU2VydmljZVRlc3RDb21tYW5kICgpCi0gIHsKLSAgfQotCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0gICAgSUVudmlyb25tZW50IGVudiA9IGdldEVudmlyb25tZW50KCk7Ci0gICAgCi0gIAlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgCi0gICAgV1NFeHBsb3JlckxhdW5jaGVyQ29tbWFuZCBsYXVuY2hDb21tYW5kID0gbmV3IFdTRXhwbG9yZXJMYXVuY2hlckNvbW1hbmQoKTsKLSAgICBsYXVuY2hDb21tYW5kLnNldEZvcmNlTGF1bmNoT3V0c2lkZUlERShleHRlcm5hbEJyb3dzZXIpOwotICAgIFZlY3RvciBsYXVuY2hPcHRpb25WZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0JU3RyaW5nIHN0YXRlTG9jYXRpb24gPSBFeHBsb3JlclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFBsdWdpblN0YXRlTG9jYXRpb24oKTsKLQlTdHJpbmcgZGVmYXVsdEZhdm9yaXRlc0xvY2F0aW9uID0gRXhwbG9yZXJQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXREZWZhdWx0RmF2b3JpdGVzTG9jYXRpb24oKTsKLQlsYXVuY2hPcHRpb25WZWN0b3IuYWRkKG5ldyBMYXVuY2hPcHRpb24oTGF1bmNoT3B0aW9ucy5TVEFURV9MT0NBVElPTixzdGF0ZUxvY2F0aW9uKSk7Ci0JbGF1bmNoT3B0aW9uVmVjdG9yLmFkZChuZXcgTGF1bmNoT3B0aW9uKExhdW5jaE9wdGlvbnMuREVGQVVMVF9GQVZPUklURVNfTE9DQVRJT04sZGVmYXVsdEZhdm9yaXRlc0xvY2F0aW9uKSk7Ci0gICAgbGF1bmNoT3B0aW9uVmVjdG9yLmFkZChuZXcgTGF1bmNoT3B0aW9uKExhdW5jaE9wdGlvbnMuV1NETF9VUkwsd3NkbFNlcnZpY2VVUkwpKTsKLSAgICBpZiAoZW5kcG9pbnRzICE9IG51bGwpCi0gICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gZW5kcG9pbnRzLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgICAgIGxhdW5jaE9wdGlvblZlY3Rvci5hZGQobmV3IExhdW5jaE9wdGlvbihMYXVuY2hPcHRpb25zLldFQl9TRVJWSUNFX0VORFBPSU5ULCBpdC5uZXh0KCkudG9TdHJpbmcoKSkpOwotICAgIGxhdW5jaENvbW1hbmQuc2V0TGF1bmNoT3B0aW9ucygoTGF1bmNoT3B0aW9uW10pbGF1bmNoT3B0aW9uVmVjdG9yLnRvQXJyYXkobmV3IExhdW5jaE9wdGlvblswXSkpOwotICAgIGxhdW5jaENvbW1hbmQuc2V0RW52aXJvbm1lbnQoIGVudiApOwotICAgIHN0YXR1cyA9IGxhdW5jaENvbW1hbmQuZXhlY3V0ZSggbW9uaXRvciwgbnVsbCApOwotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRFeHRlcm5hbEJyb3dzZXIoYm9vbGVhbiBleHRlcm5hbEJyb3dzZXIpCi0gIHsKLSAgCXRoaXMuZXh0ZXJuYWxCcm93c2VyID0gZXh0ZXJuYWxCcm93c2VyOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRXc2RsU2VydmljZVVSTChTdHJpbmcgd3NkbFNlcnZpY2VVUkwpCi0gIHsKLSAgCXRoaXMud3NkbFNlcnZpY2VVUkwgPSB3c2RsU2VydmljZVVSTDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U2VydmVyVHlwZUlEKFN0cmluZyBzZXJ2aWNlU2VydmVyVHlwZUlEKQotICB7Ci0gICAgLy9UT0RPOiBUeXBlIG1hcHBpbmdzIHRvIHRoaXMgcHJvcGVydHkgc2hvdWxkIGJlIHJlbW92ZWQuCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEV4aXN0aW5nU2VydmVyKElTZXJ2ZXIgc2VydmljZUV4aXN0aW5nU2VydmVyKQotICB7Ci0gICAgLy9UT0RPOiBUeXBlIG1hcHBpbmdzIHRvIHRoaXMgcHJvcGVydHkgc2hvdWxkIGJlIHJlbW92ZWQuCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VQcm9qZWN0KFN0cmluZyBzZXJ2aWNlUHJvamVjdCkKLSAgewotICAgIC8vVE9ETzogVHlwZSBtYXBwaW5ncyB0byB0aGlzIHByb3BlcnR5IHNob3VsZCBiZSByZW1vdmVkLgotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRFbmRwb2ludChMaXN0IGVuZHBvaW50cykKLSAgewotICAgIHRoaXMuZW5kcG9pbnRzID0gZW5kcG9pbnRzOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC9leHBsb3Jlci9XU0VHZW5lcmF0ZUNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L2V4cGxvcmVyL1dTRUdlbmVyYXRlQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YWQ2ZWViLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L2V4cGxvcmVyL1dTRUdlbmVyYXRlQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3QuZXhwbG9yZXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIuTGF1bmNoT3B0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5MYXVuY2hPcHRpb25zOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5XU0V4cGxvcmVyTGF1bmNoZXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbHVnaW4uRXhwbG9yZXJQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuVGVzdEluZm87Ci0KLXB1YmxpYyBjbGFzcyBXU0VHZW5lcmF0ZUNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiAKLXsKLQotICBwcml2YXRlIFRlc3RJbmZvIHRlc3RJbmZvOwotCSAgCi0gIHB1YmxpYyBXU0VHZW5lcmF0ZUNvbW1hbmQoVGVzdEluZm8gdGVzdEluZm8pewotICAgIHRoaXMudGVzdEluZm8gPSB0ZXN0SW5mbzsKLSAgfQotCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0gICAgSUVudmlyb25tZW50IGVudiA9IGdldEVudmlyb25tZW50KCk7Ci0gICAgCi0gIAlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgCi0gICAgV1NFeHBsb3JlckxhdW5jaGVyQ29tbWFuZCBsYXVuY2hDb21tYW5kID0gbmV3IFdTRXhwbG9yZXJMYXVuY2hlckNvbW1hbmQoKTsKLSAgICBsYXVuY2hDb21tYW5kLnNldEZvcmNlTGF1bmNoT3V0c2lkZUlERSh0ZXN0SW5mby5nZXRFeHRlcm5hbEJyb3dzZXIoKSk7Ci0gICAgVmVjdG9yIGxhdW5jaE9wdGlvblZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLQlTdHJpbmcgc3RhdGVMb2NhdGlvbiA9IEV4cGxvcmVyUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UGx1Z2luU3RhdGVMb2NhdGlvbigpOwotCVN0cmluZyBkZWZhdWx0RmF2b3JpdGVzTG9jYXRpb24gPSBFeHBsb3JlclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldERlZmF1bHRGYXZvcml0ZXNMb2NhdGlvbigpOwotCWxhdW5jaE9wdGlvblZlY3Rvci5hZGQobmV3IExhdW5jaE9wdGlvbihMYXVuY2hPcHRpb25zLlNUQVRFX0xPQ0FUSU9OLHN0YXRlTG9jYXRpb24pKTsKLQlsYXVuY2hPcHRpb25WZWN0b3IuYWRkKG5ldyBMYXVuY2hPcHRpb24oTGF1bmNoT3B0aW9ucy5ERUZBVUxUX0ZBVk9SSVRFU19MT0NBVElPTixkZWZhdWx0RmF2b3JpdGVzTG9jYXRpb24pKTsKLSAgICBsYXVuY2hPcHRpb25WZWN0b3IuYWRkKG5ldyBMYXVuY2hPcHRpb24oTGF1bmNoT3B0aW9ucy5XU0RMX1VSTCx0ZXN0SW5mby5nZXRXc2RsU2VydmljZVVSTCgpKSk7Ci0gICAgaWYgKHRlc3RJbmZvLmdldEVuZHBvaW50KCkgIT0gbnVsbCkKLSAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSB0ZXN0SW5mby5nZXRFbmRwb2ludCgpLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgICAgIGxhdW5jaE9wdGlvblZlY3Rvci5hZGQobmV3IExhdW5jaE9wdGlvbihMYXVuY2hPcHRpb25zLldFQl9TRVJWSUNFX0VORFBPSU5ULCBpdC5uZXh0KCkudG9TdHJpbmcoKSkpOwotICAgIGxhdW5jaENvbW1hbmQuc2V0TGF1bmNoT3B0aW9ucygoTGF1bmNoT3B0aW9uW10pbGF1bmNoT3B0aW9uVmVjdG9yLnRvQXJyYXkobmV3IExhdW5jaE9wdGlvblswXSkpOwotICAgIGxhdW5jaENvbW1hbmQuc2V0RW52aXJvbm1lbnQoIGVudiApOwotICAgIHN0YXR1cyA9IGxhdW5jaENvbW1hbmQuZXhlY3V0ZSggbW9uaXRvciwgbnVsbCApOwotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L2V4cGxvcmVyL1dTRVdlYlNlcnZpY2VUZXN0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L2V4cGxvcmVyL1dTRVdlYlNlcnZpY2VUZXN0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZhMTE2ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC9leHBsb3Jlci9XU0VXZWJTZXJ2aWNlVGVzdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5leHBsb3JlcjsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5JQ29tbWFuZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuU2ltcGxlQ29tbWFuZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSVdlYlNlcnZpY2VUZXN0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuVGVzdEluZm87Ci0KLXB1YmxpYyBjbGFzcyBXU0VXZWJTZXJ2aWNlVGVzdGVyIGltcGxlbWVudHMgSVdlYlNlcnZpY2VUZXN0ZXIgIHsKLQotICBwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IGdlbmVyYXRlKFRlc3RJbmZvIHRlc3RJbmZvKXsKLSAgICBWZWN0b3IgY29tbWFuZHMgPSBuZXcgVmVjdG9yKCk7Ci0JcmV0dXJuIG5ldyBTaW1wbGVDb21tYW5kRmFjdG9yeShjb21tYW5kcyk7Ci0gIH0KLQkgIAotICBwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IGxhdW5jaChUZXN0SW5mbyB0ZXN0SW5mbyl7Ci0gICAgVmVjdG9yIGNvbW1hbmRzID0gbmV3IFZlY3RvcigpOwotCWNvbW1hbmRzLmFkZChuZXcgV1NFR2VuZXJhdGVDb21tYW5kKHRlc3RJbmZvKSk7Ci0JcmV0dXJuIG5ldyBTaW1wbGVDb21tYW5kRmFjdG9yeShjb21tYW5kcyk7CQotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L2V4cGxvcmVyL1dlYlNlcnZpY2VFeHBsb3JlckV4ZWN1dGFibGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L2V4cGxvcmVyL1dlYlNlcnZpY2VFeHBsb3JlckV4ZWN1dGFibGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGJmYzlhZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC9leHBsb3Jlci9XZWJTZXJ2aWNlRXhwbG9yZXJFeGVjdXRhYmxlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0LmV4cGxvcmVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmV4dC5XZWJTZXJ2aWNlRXhlY3V0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi0vKioKLSogVGhpcyBpcyB0aGUgaW50ZXJmYWNlIGZvciBvYmplY3RzIHRoYXQgcmVwcmVzZW50IGEga2luZCBvZgotKiBXZWIgU2VydmljZS1TZXJ2ZXItUnVudGltZSBhcnRpZmFjdC4gVGhlIHByaW1hcnkgcHVycG9zZSBvZiBhIFdlYlNlcnZpY2VTZXJ2ZXJSdW50aW1lVHlwZQotKiBvYmplY3QgaXMgdG8gbWFudWZhY3R1cmUgdGhlIHdpemFyZCBwYWdlcyB0aGF0IHN1cHBvcnQgdGhlIHR5cGUsIHNlcnZlciwgYW5kIHJ1bnRpbWUgY29uZmlndXJhdGlvbi4KLSovCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZUV4cGxvcmVyRXhlY3V0YWJsZSBpbXBsZW1lbnRzIFdlYlNlcnZpY2VFeGVjdXRhYmxlCi17Ci0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotICAgCi0gIAotICBwdWJsaWMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gZ2V0RmluaXNoQ29tbWFuZCgpCi0gIHsKLSAgICByZXR1cm4gbmV3IEV4cGxvcmVyU2VydmljZVRlc3RDb21tYW5kKCk7Ci0gIH0KLSAgCi19Ci0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3Qvd3NzYW1wbGUvQWRkTW9kdWxlRGVwZW5kZW5jaWVzQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3Qvd3NzYW1wbGUvQWRkTW9kdWxlRGVwZW5kZW5jaWVzQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzY2MzhmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L3dzc2FtcGxlL0FkZE1vZHVsZURlcGVuZGVuY2llc0NvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAzMjQgICAxMjI3OTkgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDUwMyAgIDEzODQ3OCByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNTEwICAgMTQxMTE1IHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3Qud3NzYW1wbGU7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JQ2xhc3NwYXRoRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFNb2RlbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuY29tbW9uYXJjaGl2ZWNvcmUuaW50ZXJuYWwuaGVscGVycy5BcmNoaXZlTWFuaWZlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuaW50ZXJuYWwucGx1Z2luLklKMkVFTW9kdWxlQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmludGVybmFsLnByb2plY3QuSjJFRVByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUucHJvamVjdC5mYWNldC5JSmF2YVByb2plY3RNaWdyYXRpb25EYXRhTW9kZWxQcm9wZXJ0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLnByb2plY3QuZmFjZXQuSmF2YVByb2plY3RNaWdyYXRpb25EYXRhTW9kZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb24uQWRkTW9kdWxlVG9TZXJ2ZXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5Bc3NvY2lhdGVNb2R1bGVXaXRoRUFSQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb24uQ3JlYXRlRmFjZXRlZFByb2plY3RDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uUmVxdWlyZWRGYWNldFZlcnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbWFuZC5TdGFydFNlcnZlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1vbi5WYWxpZGF0aW9uVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLkNvbXBvbmVudENvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLmRhdGFtb2RlbC5wcm9wZXJ0aWVzLklDcmVhdGVSZWZlcmVuY2VDb21wb25lbnRzRGF0YU1vZGVsUHJvcGVydGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUuaW50ZXJuYWwub3BlcmF0aW9uLkNyZWF0ZVJlZmVyZW5jZUNvbXBvbmVudHNEYXRhTW9kZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUuaW50ZXJuYWwudXRpbC5Db21wb25lbnRVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLnJlc291cmNlcy5JVmlydHVhbENvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuRGF0YU1vZGVsRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLklEYXRhTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuVGVzdEluZm87Ci0KLXB1YmxpYyBjbGFzcyBBZGRNb2R1bGVEZXBlbmRlbmNpZXNDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLSAgCi0gIHByaXZhdGUgVGVzdEluZm8gdGVzdEluZm87CQotCQotICBwcml2YXRlIElQcm9qZWN0IHNhbXBsZUlQcm9qZWN0OwotICBwcml2YXRlIElQcm9qZWN0IGNsaWVudElQcm9qZWN0OwotICBwcml2YXRlIElQcm9qZWN0IHNhbXBsZUVBUklQcm9qZWN0OwotICBwcml2YXRlIFN0cmluZyBzYW1wbGVFQVJQcm9qZWN0OwotICAKLSAgcHVibGljIEFkZE1vZHVsZURlcGVuZGVuY2llc0NvbW1hbmQoVGVzdEluZm8gdGVzdEluZm8pCi0gIHsKLSAgICB0aGlzLnRlc3RJbmZvID0gdGVzdEluZm87Ci0gIH0KLQotICAvKioKLSAgICogRXhlY3V0ZSBXZWJTZXJ2ZXJEZWZhdWx0aW5nVGFzayBTZXQgdGhlIGRlZmF1bHQgc2VydmVyIG5hbWUgYW5kIGlkIGdpdmVuIGEKLSAgICogZGVwbG95YWJsZS4KLSAgICovCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0JICBJRW52aXJvbm1lbnQgZW52ID0gZ2V0RW52aXJvbm1lbnQoKTsKLQkgIC8vMS4gQ3JlYXRlIGEgV2ViIHByb2plY3QgZm9yIHRoZSBzYW1wbGUgaWYgb25lIGRvZXMgbm90IGFscmVhZHkgZXhpc3QuCi0JICBzYW1wbGVJUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdCh0ZXN0SW5mby5nZXRHZW5lcmF0aW9uUHJvamVjdCgpKTsKLQkgIGJvb2xlYW4gY3JlYXRlZFNhbXBsZVByb2plY3QgPSBmYWxzZTsKLSAgICAgIGlmICghc2FtcGxlSVByb2plY3QuZXhpc3RzKCkpCi0gICAgICB7ICAgIAkKLSAgICAgICAgICBDcmVhdGVGYWNldGVkUHJvamVjdENvbW1hbmQgY29tbWFuZCA9IG5ldyBDcmVhdGVGYWNldGVkUHJvamVjdENvbW1hbmQoKTsKLSAgICAgICAgICBjb21tYW5kLnNldFByb2plY3ROYW1lKHRlc3RJbmZvLmdldEdlbmVyYXRpb25Qcm9qZWN0KCkpOwotICAgICAgICAgIGNvbW1hbmQuc2V0VGVtcGxhdGVJZChJSjJFRU1vZHVsZUNvbnN0YW50cy5KU1RfV0VCX1RFTVBMQVRFKTsgICAgICAgICAgCi0gICAgICAgICAgLy8gUmVxdWlyZWRGYWNldFZlcnNpb25zIGlzIHNldCB0byBhbiBlbXB0eSBhcnJheSBiZWNhdXNlIHdlIGRvbid0IG5lZWQgdG8gaW1wb3NlIGFueSBhZGRpdGlvbmFsIGNvbnN0cmFpbnRzLgotICAgICAgICAgIC8vIFdlIGp1c3Qgd2FudCB0byBjcmVhdGUgdGhlIGhpZ2hlc3QgbGV2ZWwgb2YgV2ViIHByb2plY3QgdGhhdCB0aGUgc2VsZWN0ZWQgc2VydmVyIHN1cHBvcnRzLgotICAgICAgICAgIGNvbW1hbmQuc2V0UmVxdWlyZWRGYWNldFZlcnNpb25zKG5ldyBSZXF1aXJlZEZhY2V0VmVyc2lvblswXSk7ICAgICAgICAgICAKLSAgICAgICAgICBjb21tYW5kLnNldFNlcnZlckZhY3RvcnlJZCh0ZXN0SW5mby5nZXRDbGllbnRTZXJ2ZXJUeXBlSUQoKSk7Ci0gICAgICAgICAgY29tbWFuZC5zZXRTZXJ2ZXJJbnN0YW5jZUlkKHRlc3RJbmZvLmdldENsaWVudEV4aXN0aW5nU2VydmVyKCkuZ2V0SWQoKSk7Ci0gICAgICAgICAgSVN0YXR1cyBzdGF0dXMgPSBjb21tYW5kLmV4ZWN1dGUoIG1vbml0b3IsIGFkYXB0YWJsZSApOwotICAgICAgICAgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpCi0gICAgICAgICAgewotICAgICAgICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvciggc3RhdHVzICk7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgIAkgIAotICAgICAgICAgIGNyZWF0ZWRTYW1wbGVQcm9qZWN0ID0gdHJ1ZTsKLSAgICAgIH0KLQkgIAotCSAgLy8yLiBJZiB0aGUgc2VsZWN0ZWQgc2VydmVyIHJlcXVpcmVzIGFuIEVBUiBhbmQgbm8gRUFSIG5hbWUKLQkgIC8vaGFzIGJlZW4gcHJvdmlkZWQsIGNob29zZSBhbiBFQVIgbmFtZSBhbmQgY3JlYXRlIGl0IGlmIGl0IGRvZXNuJ3QgZXhpc3QuCi0gICAgICBWYWxpZGF0aW9uVXRpbHMgdnUgPSBuZXcgVmFsaWRhdGlvblV0aWxzKCk7Ci0gICAgICBib29sZWFuIHNlcnZlck5lZWRzRUFSID0gdnUuc2VydmVyTmVlZHNFQVIodGVzdEluZm8uZ2V0Q2xpZW50U2VydmVyVHlwZUlEKCkpOwotICAgICAgaWYgKHNlcnZlck5lZWRzRUFSKSB7Ci0JCQlpZiAodGVzdEluZm8uZ2V0Q2xpZW50RUFSUHJvamVjdCgpID09IG51bGwKLQkJCQkJfHwgdGVzdEluZm8uZ2V0Q2xpZW50RUFSUHJvamVjdCgpLmxlbmd0aCgpID09IDApIHsKLQkJCQlzYW1wbGVFQVJQcm9qZWN0ID0gdGVzdEluZm8uZ2V0R2VuZXJhdGlvblByb2plY3QoKSArIERFRkFVTFRfU0FNUExFX0VBUl9QUk9KRUNUX0VYVDsKLQkJCX0gZWxzZSB7Ci0JCQkJc2FtcGxlRUFSUHJvamVjdCA9IHRlc3RJbmZvLmdldENsaWVudEVBUlByb2plY3QoKTsKLQkJCX0KLQkJCXNhbXBsZUVBUklQcm9qZWN0ICA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChzYW1wbGVFQVJQcm9qZWN0KTsKLQkJCWlmIChzYW1wbGVFQVJJUHJvamVjdCA9PSBudWxsIHx8ICFzYW1wbGVFQVJJUHJvamVjdC5leGlzdHMoKSkKLQkJCXsKLQkJICAgICAgICAgIENyZWF0ZUZhY2V0ZWRQcm9qZWN0Q29tbWFuZCBjb21tYW5kID0gbmV3IENyZWF0ZUZhY2V0ZWRQcm9qZWN0Q29tbWFuZCgpOwotCQkgICAgICAgICAgY29tbWFuZC5zZXRQcm9qZWN0TmFtZShzYW1wbGVFQVJQcm9qZWN0KTsKLQkJICAgICAgICAgIGNvbW1hbmQuc2V0VGVtcGxhdGVJZChJSjJFRU1vZHVsZUNvbnN0YW50cy5KU1RfRUFSX1RFTVBMQVRFKTsgICAgICAgICAgCi0JCSAgICAgICAgICAvLyBSZXF1aXJlZEZhY2V0VmVyc2lvbnMgaXMgc2V0IHRvIGFuIGVtcHR5IGFycmF5IGJlY2F1c2Ugd2UgZG9uJ3QgbmVlZCB0byBpbXBvc2UgYW55IGFkZGl0aW9uYWwgY29uc3RyYWludHMuCi0JCSAgICAgICAgICAvLyBXZSBqdXN0IHdhbnQgdG8gY3JlYXRlIHRoZSBoaWdoZXN0IGxldmVsIG9mIFdlYiBwcm9qZWN0IHRoYXQgdGhlIHNlbGVjdGVkIHNlcnZlciBzdXBwb3J0cy4KLQkJICAgICAgICAgIGNvbW1hbmQuc2V0UmVxdWlyZWRGYWNldFZlcnNpb25zKG5ldyBSZXF1aXJlZEZhY2V0VmVyc2lvblswXSk7ICAgICAgICAgICAKLQkJICAgICAgICAgIGNvbW1hbmQuc2V0U2VydmVyRmFjdG9yeUlkKHRlc3RJbmZvLmdldENsaWVudFNlcnZlclR5cGVJRCgpKTsKLQkJICAgICAgICAgIGNvbW1hbmQuc2V0U2VydmVySW5zdGFuY2VJZCh0ZXN0SW5mby5nZXRDbGllbnRFeGlzdGluZ1NlcnZlcigpLmdldElkKCkpOwotCQkgICAgICAgICAgSVN0YXR1cyBzdGF0dXMgPSBjb21tYW5kLmV4ZWN1dGUoIG1vbml0b3IsIGFkYXB0YWJsZSApOwotCQkgICAgICAgICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikKLQkJICAgICAgICAgIHsKLQkJICAgICAgICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvciggc3RhdHVzICk7Ci0JCSAgICAgICAgICAgIHJldHVybiBzdGF0dXM7Ci0JCSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAJICAJCQkJCi0JCQl9Ci0JCQkKLQkgIH0KLSAKLQkgIC8vIDMuIElmIHRoZSBzZWxlY3RlZCBzZXJ2ZXIgcmVxdWlyZXMgYW4gRUFSLCBhbmQgdGhlIHNhbXBsZSBwcm9qZWN0IGhhcwotCQkvLyBub3QgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIHRoZSBFQVIsIGFkZCBpdC4KLSAgICAgIGlmIChzZXJ2ZXJOZWVkc0VBUikKLSAgICAgIHsKLSAgCSAgICBBc3NvY2lhdGVNb2R1bGVXaXRoRUFSQ29tbWFuZCBhc3NvY2lhdGVDb21tYW5kID0gbmV3IEFzc29jaWF0ZU1vZHVsZVdpdGhFQVJDb21tYW5kKCk7Ci0JICAgIGFzc29jaWF0ZUNvbW1hbmQuc2V0UHJvamVjdCh0ZXN0SW5mby5nZXRHZW5lcmF0aW9uUHJvamVjdCgpKTsKLQkgICAgYXNzb2NpYXRlQ29tbWFuZC5zZXRFQVJQcm9qZWN0KHNhbXBsZUVBUlByb2plY3QpOwotCSAgICBhc3NvY2lhdGVDb21tYW5kLnNldEVhcihzYW1wbGVFQVJQcm9qZWN0KTsKLQkJYXNzb2NpYXRlQ29tbWFuZC5zZXRFbnZpcm9ubWVudCggZW52ICk7Ci0JICAgIElTdGF0dXMgc3RhdHVzID0gYXNzb2NpYXRlQ29tbWFuZC5leGVjdXRlKCBtb25pdG9yLCBudWxsICk7Ci0JICAgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKT09U3RhdHVzLkVSUk9SKQotCSAgICB7Ci0JICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOyAgICAgCi0JICAgIH0gICAgICAJICAKLSAgICAgIH0KLQkgIAotCi0gICAgICAKLQkgIAotCSAgLy8gNC4gSWYgc2VydmVyIHJlcXVpcmVzIGFuIEVBUiwgYW5kIHRoZSBzYW1wbGUgRUFSIGhhcyBub3QgYWxyZWFkeSBiZWVuCi0JCS8vIGFkZGVkIHRvIHRoZSBzZXJ2ZXIsIGFkZCBpdC4KLQkgIC8vICAgSWYgbm8gRUFSIGlzIHJlcXVpcmVkLCBhbmQgc2FtcGxlIHByb2plY3QgaGFzIG5vdCBiZWVuIGFkZGVkIHRvIHRoZSBzZXJ2ZXIgYWRkIGl0LgotICAgICAgaWYgKHNlcnZlck5lZWRzRUFSKQotICAgICAgewotICAgIAkvL0FkZCBzYW1wbGVFQVJJUHJvamVjdCB0byB0aGUgc2VydmVyIGlmIG5lZWRlZC4KLSAgCQlBZGRNb2R1bGVUb1NlcnZlckNvbW1hbmQgbW9kVG9TZXJ2ZXIgPSBuZXcgQWRkTW9kdWxlVG9TZXJ2ZXJDb21tYW5kKCk7Ci0JCW1vZFRvU2VydmVyLnNldE1vZHVsZShzYW1wbGVFQVJQcm9qZWN0KTsKLQkJbW9kVG9TZXJ2ZXIuc2V0UHJvamVjdChzYW1wbGVFQVJQcm9qZWN0KTsKLQkJbW9kVG9TZXJ2ZXIuc2V0U2VydmVySW5zdGFuY2VJZCh0ZXN0SW5mby5nZXRDbGllbnRFeGlzdGluZ1NlcnZlcigpLmdldElkKCkpOwotCQltb2RUb1NlcnZlci5zZXRFbnZpcm9ubWVudCggZW52ICk7Ci0JCUlTdGF0dXMgc3RhdHVzID0gbW9kVG9TZXJ2ZXIuZXhlY3V0ZSggbW9uaXRvciwgbnVsbCApOwotCQlpZiAoc3RhdHVzLmdldFNldmVyaXR5KCk9PVN0YXR1cy5FUlJPUikKLQkgICAgewotCSAgICAgIGVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsgICAgIAotCSAgICB9ICAgICAgICAgCSAgCi0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgCSAgLy9hZGQgc2FtcGxlSVByb2plY3QgZGlyZWN0bHkgdG8gdGhlIHNlcnZlciBpZiBuZWVkZWQuCi0gICAgICAgICAgQWRkTW9kdWxlVG9TZXJ2ZXJDb21tYW5kIGFkZFRvU2VydmVyID0gbmV3IEFkZE1vZHVsZVRvU2VydmVyQ29tbWFuZCgpOwotICAgICAgICAgIGFkZFRvU2VydmVyLnNldE1vZHVsZSh0ZXN0SW5mby5nZXRHZW5lcmF0aW9uUHJvamVjdCgpKTsKLSAgICAgICAgICBhZGRUb1NlcnZlci5zZXRQcm9qZWN0KHRlc3RJbmZvLmdldEdlbmVyYXRpb25Qcm9qZWN0KCkpOwotICAgICAgICAgIGFkZFRvU2VydmVyLnNldFNlcnZlckluc3RhbmNlSWQodGVzdEluZm8uZ2V0Q2xpZW50RXhpc3RpbmdTZXJ2ZXIoKS5nZXRJZCgpKTsKLSAgICAgICAgICBhZGRUb1NlcnZlci5zZXRFbnZpcm9ubWVudCggZW52ICk7Ci0gICAgICAgICAgSVN0YXR1cyBzdGF0dXMgPSBhZGRUb1NlcnZlci5leGVjdXRlKCBtb25pdG9yLCBudWxsICk7Ci0gICAgICAgICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpPT1TdGF0dXMuRVJST1IpCi0gICAgICAgICAgewotICAgICAgICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOyAgICAgCi0gICAgICAgICAgfSAgICAgICAgICAgICAgICAgIAkgICAgICAJICAKLSAgICAgIH0KLQkgIAotCSAgLy81LiBDYWxsIFN0YXJ0U2VydmVyQ29tbWFuZCBpZiB0aGlzIGNvbW1hbmQgaGFkIHRvIGNyZWF0ZSB0aGUgc2FtcGxlIHByb2plY3QuCi0gICAgICBpZiAoY3JlYXRlZFNhbXBsZVByb2plY3QpCi0gICAgICB7Ci0JCVN0YXJ0U2VydmVyQ29tbWFuZCBzdGFydFNlcnZlciA9IG5ldyBTdGFydFNlcnZlckNvbW1hbmQodHJ1ZSk7Ci0JCXN0YXJ0U2VydmVyLnNldFNlcnZlckluc3RhbmNlSWQodGVzdEluZm8uZ2V0Q2xpZW50RXhpc3RpbmdTZXJ2ZXIoKS5nZXRJZCgpKTsKLQkJc3RhcnRTZXJ2ZXIuc2V0RW52aXJvbm1lbnQoIGVudiApOwotCQlJU3RhdHVzIHN0YXR1cyA9IHN0YXJ0U2VydmVyLmV4ZWN1dGUoIG1vbml0b3IsIG51bGwgKTsKLQkgICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpPT1TdGF0dXMuRVJST1IpCi0JICAgIHsKLQkgICAgICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7ICAgICAKLQkgICAgfQotICAgICAgfQotICAgICAgCi0gICAgICAKLQkgIC8vNi4gRXN0YWJsaXNoIGFsbCBuZWNlc3NhcnkgZGVwZW5kZW5jaWVzIGJldHdlZW4gY2xpZW50IHByb2plY3QsIHNhbXBsZSBwcm9qZWN0LCBhbmQgRUFSCi0gICAgICAKLQkgIGNsaWVudElQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHRlc3RJbmZvLmdldENsaWVudFByb2plY3QoKSk7Ci0KLQkJaWYgKGNsaWVudElQcm9qZWN0ICE9IG51bGwgJiYgIUoyRUVVdGlscy5pc1dlYkNvbXBvbmVudChjbGllbnRJUHJvamVjdCkpIHsKLQkJCWlmIChKMkVFVXRpbHMuaXNKYXZhQ29tcG9uZW50KGNsaWVudElQcm9qZWN0KSkgewkJCQkKLQkJCQlhZGRKYXZhUHJvamVjdEFzVXRpbGl0eUphcihjbGllbnRJUHJvamVjdCwgc2FtcGxlRUFSSVByb2plY3QsIG1vbml0b3IpOwotCQkJCWFkZEphdmFQcm9qZWN0QXNVdGlsaXR5SmFyKGNsaWVudElQcm9qZWN0LCBzYW1wbGVJUHJvamVjdCxtb25pdG9yKTsKLQkJCX0KLQotCQkJCXRyeQotCQkJCXsKLQkJCQkgIFN0cmluZyB1cmkgPSBjbGllbnRJUHJvamVjdC5nZXROYW1lKCkgKyAiLmphciI7Ci0JCQkJICBhZGRKQVJPck1vZHVsZURlcGVuZGVuY3koc2FtcGxlSVByb2plY3QsIHVyaSk7Ci0JCQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkKLQkJCQl7Ci0JCQkJCVN0cmluZyBlcnJvck1lc3NhZ2UgPSBOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX01PRFVMRV9ERVBFTkRFTkNZLCBuZXcgU3RyaW5nW117c2FtcGxlSVByb2plY3QuZ2V0TmFtZSgpLCBjbGllbnRJUHJvamVjdC5nZXROYW1lKCl9KTsKLQkJCQkJSVN0YXR1cyBlcnJvclN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKGVycm9yTWVzc2FnZSk7Ci0JCQkJCWVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3IoZXJyb3JTdGF0dXMpOwotCQkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkKLQkJCQl7Ci0JCQkJCVN0cmluZyBlcnJvck1lc3NhZ2UgPSBOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX01PRFVMRV9ERVBFTkRFTkNZLCBuZXcgU3RyaW5nW117c2FtcGxlSVByb2plY3QuZ2V0TmFtZSgpLCBjbGllbnRJUHJvamVjdC5nZXROYW1lKCl9KTsKLQkJCQkJSVN0YXR1cyBlcnJvclN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKGVycm9yTWVzc2FnZSk7Ci0JCQkJCWVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3IoZXJyb3JTdGF0dXMpOwkJCQkJCi0JCQkJfQkJCQkJCQkKLQkJCQotCQkJdHJ5IHsJCQotCQkJCWFkZEJ1aWxkUGF0aChzYW1wbGVJUHJvamVjdCwgY2xpZW50SVByb2plY3QpOwotCQkJfSBjYXRjaCAoSmF2YU1vZGVsRXhjZXB0aW9uIGptZSkgewotCQkJCS8vIERvIG5vdGhpbmcgaW4gdGhpcyBjYXRjaCBibG9jay4gVGhlIHdvcnN0IHRoYXQKLQkJCQkvLyB3aWxsIGhhcHBlbiBpcyB0aGF0IHRoZSBzYW1wbGUgV2ViIHByb2plY3QKLQkJCQkvLyB3aWxsIHNob3cgc29tZSBjb21waWxlIGVycm9ycy4gVGhlIHNhbXBsZSB3aWxsCi0JCQkJLy8gbGlrZWx5IHN0aWxsIGxhdW5jaCBzdWNjZXNzZnVsbHkgb24gdGhlIHNlcnZlcgotCQkJCS8vIGFuZCB0aGUgdXNlciB3aWxsIGJlIGFibGUgdG8gdXNlIGl0LgotCQkJfQotCQl9ICAgICAgCSAgCi0gICAgCi0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBhZGRKQVJPck1vZHVsZURlcGVuZGVuY3koSVByb2plY3QgcHJvamVjdCwgU3RyaW5nIHVyaSkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uCi0gIHsKLSAgICBpZiAoSjJFRVV0aWxzLmlzV2ViQ29tcG9uZW50KHByb2plY3QpKQotICAgIHsKLSAgICAgIEFyY2hpdmVNYW5pZmVzdCBtYW5pZmVzdCA9IEoyRUVQcm9qZWN0VXRpbGl0aWVzLnJlYWRNYW5pZmVzdChwcm9qZWN0KTsKLSAgICAgIG1hbmlmZXN0Lm1lcmdlQ2xhc3NQYXRoKG5ldyBTdHJpbmdbXXt1cml9KTsKLSAgICAgIEoyRUVQcm9qZWN0VXRpbGl0aWVzLndyaXRlTWFuaWZlc3QocHJvamVjdCwgbWFuaWZlc3QpOwotICAgIH0KLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGFkZEphdmFQcm9qZWN0QXNVdGlsaXR5SmFyKElQcm9qZWN0IGphdmFQcm9qZWN0LCBJUHJvamVjdCBlYXJQcm9qZWN0LElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikKLSAgewotCSAgdHJ5IHsKLQkJICBJRGF0YU1vZGVsIG1pZ3JhdGlvbmRtID0gRGF0YU1vZGVsRmFjdG9yeS5jcmVhdGVEYXRhTW9kZWwobmV3IEphdmFQcm9qZWN0TWlncmF0aW9uRGF0YU1vZGVsUHJvdmlkZXIoKSk7Ci0JCSAgbWlncmF0aW9uZG0uc2V0UHJvcGVydHkoSUphdmFQcm9qZWN0TWlncmF0aW9uRGF0YU1vZGVsUHJvcGVydGllcy5QUk9KRUNUX05BTUUsIGphdmFQcm9qZWN0LmdldE5hbWUoKSk7Ci0JCSAgbWlncmF0aW9uZG0uZ2V0RGVmYXVsdE9wZXJhdGlvbigpLmV4ZWN1dGUobW9uaXRvciwgbnVsbCk7Ci0gCi0gCi0JCSAgSURhdGFNb2RlbCByZWZkbSA9IERhdGFNb2RlbEZhY3RvcnkuY3JlYXRlRGF0YU1vZGVsKG5ldyBDcmVhdGVSZWZlcmVuY2VDb21wb25lbnRzRGF0YU1vZGVsUHJvdmlkZXIoKSk7Ci0JCSAgTGlzdCB0YXJnZXRDb21wTGlzdCA9IChMaXN0KSByZWZkbS5nZXRQcm9wZXJ0eShJQ3JlYXRlUmVmZXJlbmNlQ29tcG9uZW50c0RhdGFNb2RlbFByb3BlcnRpZXMuVEFSR0VUX0NPTVBPTkVOVF9MSVNUKTsKLSAKLQkJICBJVmlydHVhbENvbXBvbmVudCB0YXJnZXRjb21wb25lbnQgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChqYXZhUHJvamVjdCk7Ci0JCSAgSVZpcnR1YWxDb21wb25lbnQgc291cmNlY29tcG9uZW50ID0gQ29tcG9uZW50VXRpbGl0aWVzLmdldENvbXBvbmVudChlYXJQcm9qZWN0LmdldE5hbWUoKSk7Ci0JCSAgdGFyZ2V0Q29tcExpc3QuYWRkKHRhcmdldGNvbXBvbmVudCk7Ci0gCi0JCSAgcmVmZG0uc2V0UHJvcGVydHkoSUNyZWF0ZVJlZmVyZW5jZUNvbXBvbmVudHNEYXRhTW9kZWxQcm9wZXJ0aWVzLlNPVVJDRV9DT01QT05FTlQsc291cmNlY29tcG9uZW50ICk7Ci0JCSAgcmVmZG0uc2V0UHJvcGVydHkoSUNyZWF0ZVJlZmVyZW5jZUNvbXBvbmVudHNEYXRhTW9kZWxQcm9wZXJ0aWVzLlRBUkdFVF9DT01QT05FTlRfTElTVCwgdGFyZ2V0Q29tcExpc3QpOwotCQkgIHJlZmRtLnNldFByb3BlcnR5KElDcmVhdGVSZWZlcmVuY2VDb21wb25lbnRzRGF0YU1vZGVsUHJvcGVydGllcy5UQVJHRVRfQ09NUE9ORU5UU19ERVBMT1lfUEFUSCwgICIvV0VCLUlORi9saWIiKTsKLQkJICByZWZkbS5nZXREZWZhdWx0T3BlcmF0aW9uKCkuZXhlY3V0ZShtb25pdG9yLCBudWxsKTsKLQkgIH1jYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJICAKLQkgIH0KLSAgfQotCi0gIAotICBwcml2YXRlIHZvaWQgYWRkQnVpbGRQYXRoKElQcm9qZWN0IHJlZmVyZW5jaW5nUHJvamVjdCwgSVByb2plY3QgcmVmZXJlbmNlZFByb2plY3QpIHRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24KLSAgewotICAgIElKYXZhUHJvamVjdCBqYXZhUHJvamVjdCA9IEphdmFDb3JlLmNyZWF0ZShyZWZlcmVuY2luZ1Byb2plY3QpOwotICAgIGlmIChqYXZhUHJvamVjdCAhPSBudWxsKQotICAgIHsKLSAgICAgIElDbGFzc3BhdGhFbnRyeVtdIG9sZENwID0gamF2YVByb2plY3QuZ2V0UmF3Q2xhc3NwYXRoKCk7Ci0JICBJQ2xhc3NwYXRoRW50cnlbXSBuZXdDcCA9IG5ldyBJQ2xhc3NwYXRoRW50cnlbb2xkQ3AubGVuZ3RoICsgMV07Ci0JICBmb3IgKGludCBpID0gMDsgaSA8IG9sZENwLmxlbmd0aDsgaSsrKQotICAgICAgICBuZXdDcFtpXSA9IG9sZENwW2ldOwotCSAgbmV3Q3BbbmV3Q3AubGVuZ3RoIC0gMV0gPSBKYXZhQ29yZS5uZXdQcm9qZWN0RW50cnkocmVmZXJlbmNlZFByb2plY3QuZ2V0RnVsbFBhdGgoKSk7Ci0JICBqYXZhUHJvamVjdC5zZXRSYXdDbGFzc3BhdGgobmV3Q3AsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotICAgIH0KLSAgfQotIAotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfU0FNUExFX0VBUl9QUk9KRUNUX0VYVCA9ICJFQVIiOwotIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3Qvd3NzYW1wbGUvR1NUQ0dlbmVyYXRlQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3Qvd3NzYW1wbGUvR1NUQ0dlbmVyYXRlQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlN2Q5MWQ5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L3dzc2FtcGxlL0dTVENHZW5lcmF0ZUNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC53c3NhbXBsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnNhbXBsZWFwcC5jb2RlZ2VuLklucHV0RmlsZUdlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uc2FtcGxlYXBwLmNvZGVnZW4uTWV0aG9kRmlsZUdlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uc2FtcGxlYXBwLmNvZGVnZW4uUmVzdWx0RmlsZUdlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uc2FtcGxlYXBwLmNvZGVnZW4uVGVzdENsaWVudEZpbGVHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnNhbXBsZWFwcC5jb21tYW5kLkdlbmVyYXRlUGFnZUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnNhbXBsZWFwcC5jb21tYW5kLkphdmFUb01vZGVsQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0LkNvcHlXZWJTZXJ2aWNlVXRpbHNKYXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5lY2xpcHNlLkVudmlyb25tZW50VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LlRlc3RJbmZvOwotCi1wdWJsaWMgY2xhc3MgR1NUQ0dlbmVyYXRlQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIAotewotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIElOUFVUICAgICAgID0gIklucHV0LmpzcCI7Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFRFU1RfQ0xJRU5UID0gIlRlc3RDbGllbnQuanNwIjsKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgUkVTVUxUICAgICAgPSAiUmVzdWx0LmpzcCI7Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE1FVEhPRCAgICAgID0gIk1ldGhvZC5qc3AiOwotCQotICBwcml2YXRlIFRlc3RJbmZvIHRlc3RJbmZvOwotICBwcml2YXRlIE1vZGVsIHByb3h5TW9kZWw7Ci0gIHByaXZhdGUgU3RyaW5nIGpzcGZvbGRlcjsKLSAgCi0gIHB1YmxpYyBHU1RDR2VuZXJhdGVDb21tYW5kKFRlc3RJbmZvIHRlc3RJbmZvKXsKLSAgCXRoaXMudGVzdEluZm8gPSB0ZXN0SW5mbzsKLSAgfQotCQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgewotICAgIElFbnZpcm9ubWVudCBlbnYgPSBnZXRFbnZpcm9ubWVudCgpOwotICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLQlDb3B5V2ViU2VydmljZVV0aWxzSmFyQ29tbWFuZCBjb3B5ID0gbmV3IENvcHlXZWJTZXJ2aWNlVXRpbHNKYXJDb21tYW5kKCk7ICAgIAotCWNvcHkuc2V0U2FtcGxlUHJvamVjdCh0ZXN0SW5mby5nZXRHZW5lcmF0aW9uUHJvamVjdCgpKTsKLSAgICBjb3B5LnNldEVudmlyb25tZW50KCBlbnYgKTsKLQlzdGF0dXMgPSBjb3B5LmV4ZWN1dGUoIG1vbml0b3IsIG51bGwpOwotCWlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpIHJldHVybiBzdGF0dXM7Ci0Jc2V0SlNQRm9sZGVyKCk7Ci0Jc3RhdHVzID0gY3JlYXRlTW9kZWwoZW52LCBtb25pdG9yKTsKLQlpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKSByZXR1cm4gc3RhdHVzOwotCXN0YXR1cyA9IGdlbmVyYXRlUGFnZXMoZW52KTsKLQlpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKSByZXR1cm4gc3RhdHVzOwotCXJldHVybiBzdGF0dXM7ICAgCi0gIH0KLQotICBwcml2YXRlIHZvaWQgc2V0SlNQRm9sZGVyKCl7Ci0gICAgLy9pZiB0aGUgY2xpZW50IGlzIG5vdCBhIHdlYmNvbXBvbmVudCB0aGVuIHRoZSAKLQkvL3NhbXBsZSBtdXN0IGhhdmUgYmVlbiBjcmVhdGVkLCB3ZSBtdXN0IG5vdyBmYWN0b3IgaW4gCi0JLy9mbGV4aWJsZSBwcm9qZWN0cyAgCi0JICAKLQlJUHJvamVjdCBjbGllbnRJUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdCh0ZXN0SW5mby5nZXRDbGllbnRQcm9qZWN0KCkpOwotICAgIGlmIChjbGllbnRJUHJvamVjdCAhPSBudWxsICYmICFKMkVFVXRpbHMuaXNXZWJDb21wb25lbnQoY2xpZW50SVByb2plY3QpKXsgICAKLQkgIElQcm9qZWN0IHByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QodGVzdEluZm8uZ2V0R2VuZXJhdGlvblByb2plY3QoKSk7Ci0JICBJUGF0aCBwYXRoID0gSjJFRVV0aWxzLmdldFdlYkNvbnRlbnRQYXRoKHByb2plY3QpOwotCSAgaW50IGluZGV4ID0gdGVzdEluZm8uZ2V0SnNwRm9sZGVyKCkubGFzdEluZGV4T2YoIi8iKTsKLQkgIFN0cmluZyBqc3AgPSB0ZXN0SW5mby5nZXRKc3BGb2xkZXIoKS5zdWJzdHJpbmcoaW5kZXggKyAxKTsKLQkgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsJCi0JICBzYi5hcHBlbmQoIi8iKS5hcHBlbmQocGF0aC50b1N0cmluZygpKS5hcHBlbmQoIi8iKS5hcHBlbmQoanNwKTsJICAKLQkgIGpzcGZvbGRlciA9IHNiLnRvU3RyaW5nKCk7Ci0JfSAKLSAgICBlbHNlCi0JICBqc3Bmb2xkZXIgPSB0ZXN0SW5mby5nZXRKc3BGb2xkZXIoKTsJCi0gIAotICAKLSAgfQotICAKLSAgLy9jcmVhdGUgdGhlIG1vZGVsIGZyb20gdGhlIHJlc291cmNlCi0gIHByaXZhdGUgSVN0YXR1cyBjcmVhdGVNb2RlbChJRW52aXJvbm1lbnQgZW52LCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKSB7Ci0gICAgSmF2YVRvTW9kZWxDb21tYW5kIGp0bWMgPSBuZXcgSmF2YVRvTW9kZWxDb21tYW5kKCk7Ci0JanRtYy5zZXRNZXRob2RzKHRlc3RJbmZvLmdldE1ldGhvZHMoKSk7Ci0JanRtYy5zZXRDbGllbnRQcm9qZWN0KHRlc3RJbmZvLmdldENsaWVudFByb2plY3QoKSk7Ci0JanRtYy5zZXRQcm94eUJlYW4odGVzdEluZm8uZ2V0UHJveHlCZWFuKCkpOwotCWp0bWMuc2V0RW52aXJvbm1lbnQoIGVudiApOwotCUlTdGF0dXMgc3RhdHVzID0ganRtYy5leGVjdXRlKCBtb25pdG9yLCBudWxsKTsKLQlpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKSByZXR1cm4gc3RhdHVzOwotICAgIHByb3h5TW9kZWwgPSBqdG1jLmdldEphdmFEYXRhTW9kZWwoKTsKLQlyZXR1cm4gc3RhdHVzOwotICB9IAotICAKLSAgIC8qKgotICAgKiBHZW5lcmF0ZSB0aGUgZm91ciBqc3BzIHRoYXQgbWFrZSB1cCB0aGlzCi0gICAqIHNhbXBsZSBhcHAuCi0gICAqLwotICAgcHJpdmF0ZSBJU3RhdHVzIGdlbmVyYXRlUGFnZXMoSUVudmlyb25tZW50IGVudikKLSAgIHsKLSAgIAlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0JSVBhdGggZkRlc3RpbmF0aW9uRm9sZGVyUGF0aCA9IG5ldyBQYXRoKGpzcGZvbGRlcik7Ci0gICAgZkRlc3RpbmF0aW9uRm9sZGVyUGF0aCA9IGZEZXN0aW5hdGlvbkZvbGRlclBhdGgubWFrZUFic29sdXRlKCk7ICAgIAotICAgIElXb3Jrc3BhY2VSb290IGZXb3Jrc3BhY2UgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotCi0gICAgIElQYXRoIHBhdGhUZXN0ID0gZkRlc3RpbmF0aW9uRm9sZGVyUGF0aC5hcHBlbmQoVEVTVF9DTElFTlQpOwotICAgICBJRmlsZSBmaWxlVGVzdCA9IGZXb3Jrc3BhY2UuZ2V0RmlsZShwYXRoVGVzdCk7Ci0gICAgIEdlbmVyYXRlUGFnZUNvbW1hbmQgZ3BjVGVzdCA9IG5ldyBHZW5lcmF0ZVBhZ2VDb21tYW5kKEVudmlyb25tZW50VXRpbHMuZ2V0UmVzb3VyY2VDb250ZXh0KGVudiksIHByb3h5TW9kZWwsCi0gICAgICAgbmV3IFRlc3RDbGllbnRGaWxlR2VuZXJhdG9yKElOUFVULE1FVEhPRCxSRVNVTFQpLGZpbGVUZXN0KTsKLSAgICAgLy9ncGNUZXN0LnNldFN0YXR1c01vbml0b3IoZ2V0U3RhdHVzTW9uaXRvcigpKTsKLSAgICAgZ3BjVGVzdC5zZXRFbnZpcm9ubWVudCggZW52ICk7Ci0gICAgIHN0YXR1cyA9IGdwY1Rlc3QuZXhlY3V0ZSggbnVsbCwgbnVsbCApOwotICAgICBpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SICkKLSAgICAgCXJldHVybiBzdGF0dXM7Ci0gICAgIAotCi0gICAgIC8vaW5wdXQgY29kZWdlbgotICAgICBJUGF0aCBwYXRoSW5wdXQgPSBmRGVzdGluYXRpb25Gb2xkZXJQYXRoLmFwcGVuZChJTlBVVCk7Ci0gICAgIElGaWxlIGZpbGVJbnB1dCA9IGZXb3Jrc3BhY2UuZ2V0RmlsZShwYXRoSW5wdXQpOwotICAgICBJbnB1dEZpbGVHZW5lcmF0b3IgaW5wdXRHZW5lcmF0b3IgPSBuZXcgSW5wdXRGaWxlR2VuZXJhdG9yKFJFU1VMVCk7Ci0gICAgIEdlbmVyYXRlUGFnZUNvbW1hbmQgZ3BjSW5wdXQgPSBuZXcgR2VuZXJhdGVQYWdlQ29tbWFuZChFbnZpcm9ubWVudFV0aWxzLmdldFJlc291cmNlQ29udGV4dChlbnYpLCBwcm94eU1vZGVsLAotICAgICAgIGlucHV0R2VuZXJhdG9yLGZpbGVJbnB1dCk7Ci0gICAgIC8vZ3BjSW5wdXQuc2V0U3RhdHVzTW9uaXRvcihnZXRTdGF0dXNNb25pdG9yKCkpOwotICAgICBncGNJbnB1dC5zZXRFbnZpcm9ubWVudCggZW52ICk7Ci0gICAgIHN0YXR1cyA9IGdwY0lucHV0LmV4ZWN1dGUoIG51bGwsIG51bGwgKTsKLSAgICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUiApCi0gICAgIAlyZXR1cm4gc3RhdHVzOwotCi0gICAgIC8vbWV0aG9kIGNvZGVnZW4KLSAgICAgSVBhdGggcGF0aE1ldGhvZCA9IGZEZXN0aW5hdGlvbkZvbGRlclBhdGguYXBwZW5kKE1FVEhPRCk7Ci0gICAgIElGaWxlIGZpbGVNZXRob2QgPSBmV29ya3NwYWNlLmdldEZpbGUocGF0aE1ldGhvZCk7Ci0gICAgIE1ldGhvZEZpbGVHZW5lcmF0b3IgbWV0aG9kR2VuZXJhdG9yID0gbmV3IE1ldGhvZEZpbGVHZW5lcmF0b3IoSU5QVVQpOwotICAgICBtZXRob2RHZW5lcmF0b3Iuc2V0Q2xpZW50Rm9sZGVyUGF0aChqc3Bmb2xkZXIpOwotICAgICBHZW5lcmF0ZVBhZ2VDb21tYW5kIGdwY01ldGhvZCA9IG5ldyBHZW5lcmF0ZVBhZ2VDb21tYW5kKEVudmlyb25tZW50VXRpbHMuZ2V0UmVzb3VyY2VDb250ZXh0KGVudiksIHByb3h5TW9kZWwsCi0gICAgICAgbWV0aG9kR2VuZXJhdG9yLGZpbGVNZXRob2QpOwotICAgICAvL2dwY01ldGhvZC5zZXRTdGF0dXNNb25pdG9yKGdldFN0YXR1c01vbml0b3IoKSk7Ci0gICAgIGdwY01ldGhvZC5zZXRFbnZpcm9ubWVudCggZW52ICk7Ci0gICAgIHN0YXR1cyA9IGdwY01ldGhvZC5leGVjdXRlKCBudWxsLCBudWxsICk7Ci0gICAgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IgKQotICAgICAJcmV0dXJuIHN0YXR1czsgICAgCi0KLQotICAgICAvL3Jlc3VsdCBjb2RlZ2VuCi0gICAgIElQYXRoIHBhdGhSZXN1bHQgPSBmRGVzdGluYXRpb25Gb2xkZXJQYXRoLmFwcGVuZChSRVNVTFQpOwotICAgICBJRmlsZSBmaWxlUmVzdWx0ID0gZldvcmtzcGFjZS5nZXRGaWxlKHBhdGhSZXN1bHQpOwotICAgICBSZXN1bHRGaWxlR2VuZXJhdG9yIHJmZyA9IG5ldyBSZXN1bHRGaWxlR2VuZXJhdG9yKCk7Ci0gICAgIHJmZy5zZXRDbGllbnRGb2xkZXJQYXRoKGpzcGZvbGRlcik7Ci0gICAgIHJmZy5zZXRTZXRFbmRwb2ludE1ldGhvZCh0ZXN0SW5mby5nZXRTZXRFbmRwb2ludE1ldGhvZCgpKTsKLSAgICAgR2VuZXJhdGVQYWdlQ29tbWFuZCBncGNSZXN1bHQgPSBuZXcgR2VuZXJhdGVQYWdlQ29tbWFuZChFbnZpcm9ubWVudFV0aWxzLmdldFJlc291cmNlQ29udGV4dChlbnYpLCBwcm94eU1vZGVsLAotICAgICAgIHJmZyxmaWxlUmVzdWx0KTsKLSAgICAgZ3BjUmVzdWx0LnNldEVudmlyb25tZW50KCBlbnYgKTsKLSAgICAgc3RhdHVzID0gZ3BjUmVzdWx0LmV4ZWN1dGUoIG51bGwsIG51bGwgKTsKLSAgICAgCi0gICAgIHJldHVybiBzdGF0dXM7Ci0gICB9Ci0KLSAgIAotCi0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3Qvd3NzYW1wbGUvR1NUQ0xhdW5jaENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L3dzc2FtcGxlL0dTVENMYXVuY2hDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1YmZjOGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3Qvd3NzYW1wbGUvR1NUQ0xhdW5jaENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MTggICAxMzQzMjIgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDQyNCAgIDEyNDM2OCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC53c3NhbXBsZTsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TZXJ2ZXJVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tYW5kLlN0YXJ0U2VydmVyQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucGx1Z2luLldlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmJyb3dzZXIuSVdlYkJyb3dzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuYnJvd3Nlci5JV29ya2JlbmNoQnJvd3NlclN1cHBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LlN0YXR1c0V4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LlRlc3RJbmZvOwotCi1wdWJsaWMgY2xhc3MgR1NUQ0xhdW5jaENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIElOUFVUICAgICAgID0gIklucHV0LmpzcCI7Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFRFU1RfQ0xJRU5UID0gIlRlc3RDbGllbnQuanNwIjsKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgUkVTVUxUICAgICAgPSAiUmVzdWx0LmpzcCI7Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE1FVEhPRCAgICAgID0gIk1ldGhvZC5qc3AiOwotCQkKLSAgcHJpdmF0ZSBUZXN0SW5mbyB0ZXN0SW5mbzsKLSAgcHJpdmF0ZSBTdHJpbmcganNwZm9sZGVyOwotICAKLSAgcHVibGljIEdTVENMYXVuY2hDb21tYW5kKFRlc3RJbmZvIHRlc3RJbmZvKXsKLSAgICB0aGlzLnRlc3RJbmZvID0gdGVzdEluZm87Ci0gIH0KLQkJCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7ICAgIAotICAgIElFbnZpcm9ubWVudCBlbnYgPSBnZXRFbnZpcm9ubWVudCgpOwotICAgIAotICAgIHNldEpTUEZvbGRlcigpOwotICAgIAotCSAgcmV0dXJuIGxhdW5jaFNhbXBsZShlbnYsIG1vbml0b3IpOwotICB9Ci0gIHByaXZhdGUgdm9pZCBzZXRKU1BGb2xkZXIoKXsKLQkgICAgLy9pZiB0aGUgY2xpZW50IGlzIG5vdCBhIHdlYmNvbXBvbmVudCB0aGVuIHRoZSAKLQkJLy9zYW1wbGUgbXVzdCBoYXZlIGJlZW4gY3JlYXRlZCwgd2UgbXVzdCBub3cgZmFjdG9yIGluIAotCQkvL2ZsZXhpYmxlIHByb2plY3RzICAKLQkJICAKLQkJSVByb2plY3QgY2xpZW50SVByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QodGVzdEluZm8uZ2V0Q2xpZW50UHJvamVjdCgpKTsKLQkgICAgaWYgKGNsaWVudElQcm9qZWN0ICE9IG51bGwgJiYgIUoyRUVVdGlscy5pc1dlYkNvbXBvbmVudChjbGllbnRJUHJvamVjdCkpeyAgIAotCQkgIElQcm9qZWN0IHByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QodGVzdEluZm8uZ2V0R2VuZXJhdGlvblByb2plY3QoKSk7Ci0JCSAgSVBhdGggcGF0aCA9IEoyRUVVdGlscy5nZXRXZWJDb250ZW50UGF0aChwcm9qZWN0KTsKLQkJICBpbnQgaW5kZXggPSB0ZXN0SW5mby5nZXRKc3BGb2xkZXIoKS5sYXN0SW5kZXhPZigiLyIpOwotCQkgIFN0cmluZyBqc3AgPSB0ZXN0SW5mby5nZXRKc3BGb2xkZXIoKS5zdWJzdHJpbmcoaW5kZXggKyAxKTsKLQkJICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CQotCQkgIHNiLmFwcGVuZCgiLyIpLmFwcGVuZChwYXRoLnRvU3RyaW5nKCkpLmFwcGVuZCgiLyIpLmFwcGVuZChqc3ApOwkgIAotCQkgIGpzcGZvbGRlciA9IHNiLnRvU3RyaW5nKCk7Ci0JCX0gCi0JICAgIGVsc2UKLQkJICBqc3Bmb2xkZXIgPSB0ZXN0SW5mby5nZXRKc3BGb2xkZXIoKTsJCi0JICAKLQkgIAotCSAgfQotICAKLSAgcHJpdmF0ZSBJU3RhdHVzIGxhdW5jaFNhbXBsZSAoSUVudmlyb25tZW50IGVudiwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkgewotICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLQlJUGF0aCBmRGVzdGluYXRpb25Gb2xkZXJQYXRoID0gbmV3IFBhdGgoanNwZm9sZGVyKTsKLQlmRGVzdGluYXRpb25Gb2xkZXJQYXRoID0gZkRlc3RpbmF0aW9uRm9sZGVyUGF0aC5tYWtlQWJzb2x1dGUoKTsgICAgCi0JIHRyeSAKLQkgewotCSAgIFBsYXRmb3JtLmdldEpvYk1hbmFnZXIoKS5qb2luKFJlc291cmNlc1BsdWdpbi5GQU1JTFlfQVVUT19CVUlMRCwgbnVsbCk7Ci0JIH0gCi0JIGNhdGNoKCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBleGMgKSAKLQkgewotCSAgIC8vIFVJU3luY2hyb25pemVyLnN5bmNFeGVjIHNlZW1zIHRvIGludGVycnVwdCB0aGUgVUkgdHJlYWQgd2hlbiB0aGUgYXV0b2J1aWxkZXIgaXMgZG9uZS4gIE5vdCBzdXJlLCB3aHkuCi0JICAgLy8gSSdtIGFzc3VtaW5nIGhlcmUgdGhhdCB0aGUgYXV0b2J1aWxkZXIgaGFzIGFjdHVhbGx5IGNvbXBsZXRlZCBpdHMgc3R1ZmYuIAotCSB9Ci0KLQlTdGFydFNlcnZlckNvbW1hbmQgc2VydmVyQ29tbWFuZCA9IG5ldyBTdGFydFNlcnZlckNvbW1hbmQoIHRydWUgKTsKLQlzZXJ2ZXJDb21tYW5kLnNldFNlcnZlckluc3RhbmNlSWQoIHRlc3RJbmZvLmdldENsaWVudEV4aXN0aW5nU2VydmVyKCkuZ2V0SWQoKSApOwotCXNlcnZlckNvbW1hbmQuc2V0RW52aXJvbm1lbnQoIGVudiApOwotCQotCXN0YXR1cyA9IHNlcnZlckNvbW1hbmQuZXhlY3V0ZShtb25pdG9yLCBudWxsKTsKLQlpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKSByZXR1cm4gc3RhdHVzOwotCQotCUlQcm9qZWN0IHNhbXBsZVByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QodGVzdEluZm8uZ2V0R2VuZXJhdGlvblByb2plY3QoKSk7Ci0JU3RyaW5nICAgbmV3UGF0aCA9IFNlcnZlclV0aWxzLmdldFdlYkNvbXBvbmVudFVSTChzYW1wbGVQcm9qZWN0LCB0ZXN0SW5mby5nZXRDbGllbnRTZXJ2ZXJUeXBlSUQoKSx0ZXN0SW5mby5nZXRDbGllbnRFeGlzdGluZ1NlcnZlcigpKTsKLQlpbnQgY291bnQgPSBKMkVFVXRpbHMuZ2V0V2ViQ29udGVudFBhdGgoc2FtcGxlUHJvamVjdCkuc2VnbWVudENvdW50KCk7Ci0JCi0JbmV3UGF0aCA9IG5ld1BhdGggKyAiLyIgKyBmRGVzdGluYXRpb25Gb2xkZXJQYXRoLnJlbW92ZUZpcnN0U2VnbWVudHMoY291bnQpOwotCVN0cmluZ0J1ZmZlciB1cmxTdHJpbmcgPSBuZXcgU3RyaW5nQnVmZmVyKCBuZXdQYXRoICsgIi8iICsgVEVTVF9DTElFTlQgKTsKLQlpZiAodGVzdEluZm8uZ2V0RW5kcG9pbnQoKSAhPSBudWxsICYmICF0ZXN0SW5mby5nZXRFbmRwb2ludCgpLmlzRW1wdHkoKSkKLQl7Ci0JICB1cmxTdHJpbmcuYXBwZW5kKCI/ZW5kcG9pbnQ9Iik7Ci0JICB1cmxTdHJpbmcuYXBwZW5kKHRlc3RJbmZvLmdldEVuZHBvaW50KCkuZ2V0KDApLnRvU3RyaW5nKCkpOwotCX0KLQkgICAgCi0JdHJ5ewotCSAgICAgIFVSTCB1cmw7Ci0JICAgICAgdXJsID0gbmV3IFVSTCh1cmxTdHJpbmcudG9TdHJpbmcoKSk7Ci0gICAgICAgIAotICAgICAgICBJbnB1dFN0cmVhbSByZXN1bHRTdHJlYW0gPSBudWxsOwotICAgICAgICBJbnB1dFN0cmVhbSBtZXRob2RTdHJlYW0gPSBudWxsOwotICAgICAgICBJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSAgPSBudWxsOwotICAgICAgICBJbnB1dFN0cmVhbSBjbGllbnRTdHJlYW0gPSBudWxsOwotCi0JICAgICAgZm9yKCBpbnQgcmV0cmllcyA9IDA7IHJldHJpZXMgPCAxMDsgcmV0cmllcysrICkKLQkgICAgICB7Ci0JICAgICAgICB0cnkKLQkgICAgICAgIHsKLQkgICAgICAgICAgLy8gVGVzdCB0aGUgVVJMcwotICAgICAgICAgICAgCi0JICAgICAgICAgIHJlc3VsdFN0cmVhbSA9IG5ldyBVUkwobmV3UGF0aCArICIvIiArIFJFU1VMVCkub3BlblN0cmVhbSgpOwotCSAgICAgICAgICBtZXRob2RTdHJlYW0gPSBuZXcgVVJMKG5ld1BhdGggKyAiLyIgKyBNRVRIT0QpLm9wZW5TdHJlYW0oKTsKLQkgICAgICAgICAgaW5wdXRTdHJlYW0gID0gbmV3IFVSTChuZXdQYXRoICsgIi8iICsgSU5QVVQpLm9wZW5TdHJlYW0oKTsKLQkgICAgICAgICAgY2xpZW50U3RyZWFtID0gbmV3IFVSTChuZXdQYXRoICsgIi8iICsgVEVTVF9DTElFTlQpLm9wZW5TdHJlYW0oKTsKLSAgICAgICAgICAgIAotCSAgICAgICAgICAvLyBMb29rcyBnb29kLCBleGl0IGxvb3AKLQkgICAgICAgICAgYnJlYWs7Ci0JICAgICAgICB9Ci0JICAgICAgICBjYXRjaCggSU9FeGNlcHRpb24gaW9lICkKLQkgICAgICAgIHsKLQkgICAgICAgICAgdHJ5Ci0JICAgICAgICAgIHsKLQkgICAgICAgICAgICBUaHJlYWQuc2xlZXAoMTAwMCk7Ci0JICAgICAgICAgIH0KLQkgICAgICAgICAgY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGllKSB7fSAJICAJICAgICAgICAgIAotCSAgICAgICAgfQotICAgICAgICAgIGZpbmFsbHkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgaWYoIHJlc3VsdFN0cmVhbSAhPSBudWxsICkgcmVzdWx0U3RyZWFtLmNsb3NlKCk7Ci0gICAgICAgICAgICAgIGlmKCBtZXRob2RTdHJlYW0gIT0gbnVsbCApIG1ldGhvZFN0cmVhbS5jbG9zZSgpOwotICAgICAgICAgICAgICBpZiggaW5wdXRTdHJlYW0gIT0gbnVsbCApIGlucHV0U3RyZWFtLmNsb3NlKCk7Ci0gICAgICAgICAgICAgIGlmKCBjbGllbnRTdHJlYW0gIT0gbnVsbCApIGNsaWVudFN0cmVhbS5jbG9zZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2goIElPRXhjZXB0aW9uIGV4YyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotCSAgICAgIH0KLQotCQkJSVdvcmtiZW5jaEJyb3dzZXJTdXBwb3J0IGJyb3dzZXJTdXBwb3J0ID0gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRXb3JrYmVuY2goKS5nZXRCcm93c2VyU3VwcG9ydCgpOwotCQkJSVdlYkJyb3dzZXIgYnJvd3NlciA9IGJyb3dzZXJTdXBwb3J0LmNyZWF0ZUJyb3dzZXIoSVdvcmtiZW5jaEJyb3dzZXJTdXBwb3J0LkxPQ0FUSU9OX0JBUiwgbnVsbCwgbnVsbCwgbnVsbCk7Ci0JCQlicm93c2VyLm9wZW5VUkwodXJsKTsKLQkgICAgICByZXR1cm4gc3RhdHVzOwotCQkgfWNhdGNoKFBhcnRJbml0RXhjZXB0aW9uIGV4Yyl7Ci0JCQllbnYuZ2V0TG9nKCkubG9nKElMb2cuRVJST1IsIDUwNDgsIHRoaXMsICJsYXVuY2hTYW1wbGUiLCBleGMpOwotCQkJc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoZXhjLmdldE1lc3NhZ2UoKSwgZXhjKTsKLQkJCWVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkgICAgCXJldHVybiBzdGF0dXM7Ci0JICAgIH1jYXRjaChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZXhjKXsKLQkgICAgCWVudi5nZXRMb2coKS5sb2coSUxvZy5XQVJOSU5HLCA1MDQ4LCB0aGlzLCAibGF1bmNoU2FtcGxlIiwgZXhjKTsKLQkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLndhcm5pbmdTdGF0dXMoIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfTUFMRk9STUVEX1VSTCwgZXhjICk7Ci0JCQl0cnkgewotCQkJCWVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0KHN0YXR1cyk7Ci0JCQl9IGNhdGNoIChTdGF0dXNFeGNlcHRpb24gZSkgewotCQkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX01BTEZPUk1FRF9VUkwsIGUgKTsKLQkJCX0KLQkgICAgCXJldHVybiBzdGF0dXM7Ci0JICAgIH0KLSAgICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3Qvd3NzYW1wbGUvR1NUQ1dlYlNlcnZpY2VUZXN0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L3dzc2FtcGxlL0dTVENXZWJTZXJ2aWNlVGVzdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhMDY4NTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3Qvd3NzYW1wbGUvR1NUQ1dlYlNlcnZpY2VUZXN0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDYwOCAgIDE0NTUyOSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC53c3NhbXBsZTsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5JQ29tbWFuZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuU2ltcGxlQ29tbWFuZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSVdlYlNlcnZpY2VUZXN0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuVGVzdEluZm87Ci0KLXB1YmxpYyBjbGFzcyBHU1RDV2ViU2VydmljZVRlc3RlciBpbXBsZW1lbnRzIElXZWJTZXJ2aWNlVGVzdGVyICB7Ci0KLSAgcHVibGljIElDb21tYW5kRmFjdG9yeSBnZW5lcmF0ZShUZXN0SW5mbyB0ZXN0SW5mbyl7Ci0gICAgVmVjdG9yIGNvbW1hbmRzID0gbmV3IFZlY3RvcigpOwotCWNvbW1hbmRzLmFkZChuZXcgQWRkTW9kdWxlRGVwZW5kZW5jaWVzQ29tbWFuZCh0ZXN0SW5mbykpOwotCWNvbW1hbmRzLmFkZChuZXcgR1NUQ0dlbmVyYXRlQ29tbWFuZCh0ZXN0SW5mbykpOwotCXJldHVybiBuZXcgU2ltcGxlQ29tbWFuZEZhY3RvcnkoY29tbWFuZHMpOwotICB9Ci0gIAotICBwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IGxhdW5jaChUZXN0SW5mbyB0ZXN0SW5mbyl7Ci0JVmVjdG9yIGNvbW1hbmRzID0gbmV3IFZlY3RvcigpOwotCWlmICh0ZXN0SW5mby5nZXRSdW5UZXN0Q2xpZW50KCkpIHsKLQkJY29tbWFuZHMuYWRkKG5ldyBHU1RDTGF1bmNoQ29tbWFuZCh0ZXN0SW5mbykpOwotCX0KLSAgICByZXR1cm4gbmV3IFNpbXBsZUNvbW1hbmRGYWN0b3J5KGNvbW1hbmRzKTsJCi0gIH0KLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L3dzc2FtcGxlL1dTU2FtcGxlRmluaXNoQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3Qvd3NzYW1wbGUvV1NTYW1wbGVGaW5pc2hDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhN2JjN2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aWRnZXRzL3Rlc3Qvd3NzYW1wbGUvV1NTYW1wbGVGaW5pc2hDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDI0ICAgMTI0MzY4IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0Lndzc2FtcGxlOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJvb3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb24uU3RhcnRQcm9qZWN0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uc2FtcGxlYXBwLmNvZGVnZW4uSW5wdXRGaWxlR2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5zYW1wbGVhcHAuY29kZWdlbi5NZXRob2RGaWxlR2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5zYW1wbGVhcHAuY29kZWdlbi5SZXN1bHRGaWxlR2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5zYW1wbGVhcHAuY29kZWdlbi5UZXN0Q2xpZW50RmlsZUdlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uc2FtcGxlYXBwLmNvbW1hbmQuR2VuZXJhdGVQYWdlQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uc2FtcGxlYXBwLmNvbW1hbmQuSmF2YVRvTW9kZWxDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnBsdWdpbi5XZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0LkNvcHlXZWJTZXJ2aWNlVXRpbHNKYXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQudGVzdC5KYXZhUHJveHlUZXN0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5icm93c2VyLklXZWJCcm93c2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmJyb3dzZXIuSVdvcmtiZW5jaEJyb3dzZXJTdXBwb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5zZWxlY3Rpb24uQm9vbGVhblNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuZWNsaXBzZS5FbnZpcm9ubWVudFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LlN0YXR1c0V4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci0KLXB1YmxpYyBjbGFzcyBXU1NhbXBsZUZpbmlzaENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiBpbXBsZW1lbnRzIEphdmFQcm94eVRlc3RDb21tYW5kCi17Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgSU5QVVQgICAgICAgPSAiSW5wdXQuanNwIjsKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgVEVTVF9DTElFTlQgPSAiVGVzdENsaWVudC5qc3AiOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBSRVNVTFQgICAgICA9ICJSZXN1bHQuanNwIjsKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgTUVUSE9EICAgICAgPSAiTWV0aG9kLmpzcCI7Ci0gIAotICBwcml2YXRlIE1vZGVsIHByb3h5TW9kZWw7Ci0gIHByaXZhdGUgU3RyaW5nIHNhbXBsZVNlcnZlclR5cGVJRDsKLSAgcHJpdmF0ZSBJU2VydmVyIHNhbXBsZUV4aXN0aW5nU2VydmVyOwotICAKLSAgCi0gIHByaXZhdGUgU3RyaW5nIGNsaWVudFByb2plY3Q7Ci0gIHByaXZhdGUgU3RyaW5nIGpzcEZvbGRlcjsKLSAgcHJpdmF0ZSBib29sZWFuIHJ1bkNsaWVudFRlc3Q7Ci0gIHByaXZhdGUgU3RyaW5nIHNhbXBsZVByb2plY3Q7Ci0gIHByaXZhdGUgQm9vbGVhblNlbGVjdGlvbltdIG1ldGhvZHM7Ci0gIHByaXZhdGUgU3RyaW5nIHByb3h5QmVhbjsKLSAgcHJpdmF0ZSBTdHJpbmcgc2V0RW5kcG9pbnRNZXRob2Q7Ci0gIHByaXZhdGUgTGlzdCBlbmRwb2ludHM7Ci0gIAotICAvKioKLSAgKiBDb25zdHJ1Y3RzIGEgbmV3IEphdmFCZWFuVG9TYW1wbGVBY3RpdmVUYXNrIG9iamVjdCB3aXRoIHRoZSBnaXZlbiBsYWJlbCBhbmQgZGVzY3JpcHRpb24uCi0gICovCi0gIHB1YmxpYyBXU1NhbXBsZUZpbmlzaENvbW1hbmQgKCkKLSAgewotICB9Ci0KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLSAgICBJRW52aXJvbm1lbnQgZW52ID0gZ2V0RW52aXJvbm1lbnQoKTsKLSAgICAKLSAgCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICAvL3NldHRlcnMgYW5kIGdldHRlcnMgdG8gYmUgcmVtb3ZlZAotICAJQ29weVdlYlNlcnZpY2VVdGlsc0phckNvbW1hbmQgY29weSA9IG5ldyBDb3B5V2ViU2VydmljZVV0aWxzSmFyQ29tbWFuZCgpOyAgICAKLSAgCWNvcHkuc2V0U2FtcGxlUHJvamVjdChzYW1wbGVQcm9qZWN0KTsKLSAgICBjb3B5LnNldEVudmlyb25tZW50KCBlbnYgKTsKLSAgCXN0YXR1cyA9IGNvcHkuZXhlY3V0ZSggbW9uaXRvciwgbnVsbCApOwotICAgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpIHJldHVybiBzdGF0dXM7Ci0gICAgc3RhdHVzID0gY3JlYXRlTW9kZWwoZW52LCBtb25pdG9yICk7Ci0gICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikgcmV0dXJuIHN0YXR1czsKLSAgICBzdGF0dXMgPSBnZW5lcmF0ZVBhZ2VzKGVudiwgbW9uaXRvciApOwotICAgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpIHJldHVybiBzdGF0dXM7Ci0gICAgLy9pZiAoIWlzU3VjY2Vzc2Z1bCgpKSByZXR1cm47Ci0gICAgc3RhdHVzID0gbGF1bmNoU2FtcGxlKGVudiwgbW9uaXRvcik7Ci0gICAgcmV0dXJuIHN0YXR1czsgICAKLSAgfQotCi0gICAKLSAgLyoqCi0gICogR2VuZXJhdGUgdGhlIGZvdXIganNwcyB0aGF0IG1ha2UgdXAgdGhpcwotICAqIHNhbXBsZSBhcHAuCi0gICovCi0gIHByb3RlY3RlZCBJU3RhdHVzIGdlbmVyYXRlUGFnZXMoSUVudmlyb25tZW50IGVudiwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkKLSAgewotICAJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAgIElQYXRoIGZEZXN0aW5hdGlvbkZvbGRlclBhdGggPSBuZXcgUGF0aChqc3BGb2xkZXIpOwotICAgIGZEZXN0aW5hdGlvbkZvbGRlclBhdGggPSBmRGVzdGluYXRpb25Gb2xkZXJQYXRoLm1ha2VBYnNvbHV0ZSgpOyAgICAKLSAgICBJV29ya3NwYWNlUm9vdCBmV29ya3NwYWNlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLQotICAgIElQYXRoIHBhdGhUZXN0ID0gZkRlc3RpbmF0aW9uRm9sZGVyUGF0aC5hcHBlbmQoVEVTVF9DTElFTlQpOwotICAgIElGaWxlIGZpbGVUZXN0ID0gZldvcmtzcGFjZS5nZXRGaWxlKHBhdGhUZXN0KTsKLSAgICBHZW5lcmF0ZVBhZ2VDb21tYW5kIGdwY1Rlc3QgPSBuZXcgR2VuZXJhdGVQYWdlQ29tbWFuZChFbnZpcm9ubWVudFV0aWxzLmdldFJlc291cmNlQ29udGV4dChlbnYpLCBwcm94eU1vZGVsLAotICAgICAgbmV3IFRlc3RDbGllbnRGaWxlR2VuZXJhdG9yKElOUFVULE1FVEhPRCxSRVNVTFQpLGZpbGVUZXN0KTsKLSAgICAvL2dwY1Rlc3Quc2V0U3RhdHVzTW9uaXRvcihnZXRTdGF0dXNNb25pdG9yKCkpOwotICAgIGdwY1Rlc3Quc2V0RW52aXJvbm1lbnQoIGVudiApOwotICAgIHN0YXR1cyA9IGdwY1Rlc3QuZXhlY3V0ZSggbW9uaXRvciwgbnVsbCApOwotICAgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IgKQotICAgIAlyZXR1cm4gc3RhdHVzOwotICAgIAotCi0gICAgLy9pbnB1dCBjb2RlZ2VuCi0gICAgSVBhdGggcGF0aElucHV0ID0gZkRlc3RpbmF0aW9uRm9sZGVyUGF0aC5hcHBlbmQoSU5QVVQpOwotICAgIElGaWxlIGZpbGVJbnB1dCA9IGZXb3Jrc3BhY2UuZ2V0RmlsZShwYXRoSW5wdXQpOwotICAgIElucHV0RmlsZUdlbmVyYXRvciBpbnB1dEdlbmVyYXRvciA9IG5ldyBJbnB1dEZpbGVHZW5lcmF0b3IoUkVTVUxUKTsKLSAgICBHZW5lcmF0ZVBhZ2VDb21tYW5kIGdwY0lucHV0ID0gbmV3IEdlbmVyYXRlUGFnZUNvbW1hbmQoRW52aXJvbm1lbnRVdGlscy5nZXRSZXNvdXJjZUNvbnRleHQoZW52KSwgcHJveHlNb2RlbCwKLSAgICAgIGlucHV0R2VuZXJhdG9yLGZpbGVJbnB1dCk7Ci0gICAgLy9ncGNJbnB1dC5zZXRTdGF0dXNNb25pdG9yKGdldFN0YXR1c01vbml0b3IoKSk7Ci0gICAgZ3BjSW5wdXQuc2V0RW52aXJvbm1lbnQoIGVudiApOwotICAgIHN0YXR1cyA9IGdwY0lucHV0LmV4ZWN1dGUoIG1vbml0b3IsIG51bGwgKTsKLSAgICBpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SICkKLSAgICAJcmV0dXJuIHN0YXR1czsKLQotICAgIC8vbWV0aG9kIGNvZGVnZW4KLSAgICBJUGF0aCBwYXRoTWV0aG9kID0gZkRlc3RpbmF0aW9uRm9sZGVyUGF0aC5hcHBlbmQoTUVUSE9EKTsKLSAgICBJRmlsZSBmaWxlTWV0aG9kID0gZldvcmtzcGFjZS5nZXRGaWxlKHBhdGhNZXRob2QpOwotICAgIE1ldGhvZEZpbGVHZW5lcmF0b3IgbWV0aG9kR2VuZXJhdG9yID0gbmV3IE1ldGhvZEZpbGVHZW5lcmF0b3IoSU5QVVQpOwotICAgIG1ldGhvZEdlbmVyYXRvci5zZXRDbGllbnRGb2xkZXJQYXRoKGpzcEZvbGRlcik7Ci0gICAgR2VuZXJhdGVQYWdlQ29tbWFuZCBncGNNZXRob2QgPSBuZXcgR2VuZXJhdGVQYWdlQ29tbWFuZChFbnZpcm9ubWVudFV0aWxzLmdldFJlc291cmNlQ29udGV4dChlbnYpLCBwcm94eU1vZGVsLAotICAgICAgbWV0aG9kR2VuZXJhdG9yLGZpbGVNZXRob2QpOwotICAgIC8vZ3BjTWV0aG9kLnNldFN0YXR1c01vbml0b3IoZ2V0U3RhdHVzTW9uaXRvcigpKTsKLSAgICBncGNNZXRob2Quc2V0RW52aXJvbm1lbnQoIGVudiApOwotICAgIHN0YXR1cyA9IGdwY01ldGhvZC5leGVjdXRlKCBtb25pdG9yLCBudWxsICk7Ci0gICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUiApCi0gICAgCXJldHVybiBzdGF0dXM7ICAgIAotCi0KLSAgICAvL3Jlc3VsdCBjb2RlZ2VuCi0gICAgSVBhdGggcGF0aFJlc3VsdCA9IGZEZXN0aW5hdGlvbkZvbGRlclBhdGguYXBwZW5kKFJFU1VMVCk7Ci0gICAgSUZpbGUgZmlsZVJlc3VsdCA9IGZXb3Jrc3BhY2UuZ2V0RmlsZShwYXRoUmVzdWx0KTsKLSAgICBSZXN1bHRGaWxlR2VuZXJhdG9yIHJmZyA9IG5ldyBSZXN1bHRGaWxlR2VuZXJhdG9yKCk7Ci0gICAgcmZnLnNldENsaWVudEZvbGRlclBhdGgoanNwRm9sZGVyKTsKLSAgICByZmcuc2V0U2V0RW5kcG9pbnRNZXRob2Qoc2V0RW5kcG9pbnRNZXRob2QpOwotICAgIEdlbmVyYXRlUGFnZUNvbW1hbmQgZ3BjUmVzdWx0ID0gbmV3IEdlbmVyYXRlUGFnZUNvbW1hbmQoRW52aXJvbm1lbnRVdGlscy5nZXRSZXNvdXJjZUNvbnRleHQoZW52KSwgcHJveHlNb2RlbCwKLSAgICAgIHJmZyxmaWxlUmVzdWx0KTsKLSAgICAvL2dwY1Jlc3VsdC5zZXRTdGF0dXNNb25pdG9yKGdldFN0YXR1c01vbml0b3IoKSk7Ci0gICAgZ3BjUmVzdWx0LnNldEVudmlyb25tZW50KCBlbnYgKTsKLSAgICBzdGF0dXMgPSBncGNSZXN1bHQuZXhlY3V0ZSggbW9uaXRvciwgbnVsbCApOwotICAgIAotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0KLQotCi0gIHByb3RlY3RlZCBJU3RhdHVzIGxhdW5jaFNhbXBsZSAoSUVudmlyb25tZW50IGVudiwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkgewotCi0gIAlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgaWYgKCFydW5DbGllbnRUZXN0KSByZXR1cm4gc3RhdHVzOwotICAgIAotCi0gICAgSVBhdGggZkRlc3RpbmF0aW9uRm9sZGVyUGF0aCA9IG5ldyBQYXRoKGpzcEZvbGRlcik7Ci0gICAgZkRlc3RpbmF0aW9uRm9sZGVyUGF0aCA9IGZEZXN0aW5hdGlvbkZvbGRlclBhdGgubWFrZUFic29sdXRlKCk7ICAgIAotCi0gICAgU3RhcnRQcm9qZWN0Q29tbWFuZCBzcGMgPSBuZXcgU3RhcnRQcm9qZWN0Q29tbWFuZChmYWxzZSApOwotICAgIHNwYy5zZXRTZXJ2aWNlU2VydmVyVHlwZUlEKHNhbXBsZVNlcnZlclR5cGVJRCk7Ci0gICAgc3BjLnNldFNhbXBsZUV4aXN0aW5nU2VydmVyKHNhbXBsZUV4aXN0aW5nU2VydmVyKTsKLSAgICBJUHJvamVjdCBwcm9qZWN0ID0gKElQcm9qZWN0KSBSZXNvdXJjZVV0aWxzLmZpbmRSZXNvdXJjZShzYW1wbGVQcm9qZWN0KTsKLSAgICBzcGMuc2V0U2FtcGxlUHJvamVjdChwcm9qZWN0KTsKLSAgICBzcGMuc2V0SXNXZWJQcm9qZWN0U3RhcnR1cFJlcXVlc3RlZCh0cnVlKTsKLSAgICBzcGMuc2V0RW52aXJvbm1lbnQoIGVudiApOwotICAgIAotICAgIHN0YXR1cyA9IHNwYy5leGVjdXRlKCBtb25pdG9yLCBudWxsICk7Ci0gICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikgcmV0dXJuIHN0YXR1czsKLSAgICAKLSAgICBJUGF0aCBuZXdQYXRoID0gbmV3IFBhdGgoUmVzb3VyY2VVdGlscy5nZXRXZWJQcm9qZWN0VVJMKFJlc291cmNlVXRpbHMuZ2V0UHJvamVjdE9mKGZEZXN0aW5hdGlvbkZvbGRlclBhdGgpLHNhbXBsZVNlcnZlclR5cGVJRCxzYW1wbGVFeGlzdGluZ1NlcnZlcikpOwotICAgIG5ld1BhdGggPSBuZXdQYXRoLmFwcGVuZChmRGVzdGluYXRpb25Gb2xkZXJQYXRoLnJlbW92ZUZpcnN0U2VnbWVudHMoMikubWFrZUFic29sdXRlKCkpOwotICAgIFN0cmluZ0J1ZmZlciB1cmxTdHJpbmcgPSBuZXcgU3RyaW5nQnVmZmVyKG5ld1BhdGguYXBwZW5kKFRFU1RfQ0xJRU5UKS50b1N0cmluZygpKTsKLSAgICBpZiAoZW5kcG9pbnRzICE9IG51bGwgJiYgIWVuZHBvaW50cy5pc0VtcHR5KCkpCi0gICAgewotICAgICAgdXJsU3RyaW5nLmFwcGVuZCgiP2VuZHBvaW50PSIpOwotICAgICAgdXJsU3RyaW5nLmFwcGVuZChlbmRwb2ludHMuZ2V0KDApLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgICAKLSAgICB0cnl7Ci0gICAgICBVUkwgdXJsOwotICAgICAgdXJsID0gbmV3IFVSTCh1cmxTdHJpbmcudG9TdHJpbmcoKSk7Ci0KLSAgICAgIGZvciggaW50IHJldHJpZXMgPSAwOyByZXRyaWVzIDwgMTA7IHJldHJpZXMrKyApCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgLy8gVGVzdCB0aGUgVVJMcwotICAgICAgICAgIChuZXcgVVJMKG5ld1BhdGguYXBwZW5kKFJFU1VMVCkudG9TdHJpbmcoKSkpLm9wZW5TdHJlYW0oKTsKLSAgICAgICAgICAobmV3IFVSTChuZXdQYXRoLmFwcGVuZChNRVRIT0QpLnRvU3RyaW5nKCkpKS5vcGVuU3RyZWFtKCk7Ci0gICAgICAgICAgKG5ldyBVUkwobmV3UGF0aC5hcHBlbmQoSU5QVVQpLnRvU3RyaW5nKCkpKS5vcGVuU3RyZWFtKCk7Ci0gICAgICAgICAgKG5ldyBVUkwobmV3UGF0aC5hcHBlbmQoVEVTVF9DTElFTlQpLnRvU3RyaW5nKCkpKS5vcGVuU3RyZWFtKCk7Ci0gICAgICAgICAgLy8gTG9va3MgZ29vZCwgZXhpdCBsb29wCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2goIElPRXhjZXB0aW9uIGlvZSApCi0gICAgICAgIHsKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBUaHJlYWQuc2xlZXAoMTAwMCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBpZSkge30gCSAgCSAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgfQotCi0JCUlXb3JrYmVuY2hCcm93c2VyU3VwcG9ydCBicm93c2VyU3VwcG9ydCA9IFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0V29ya2JlbmNoKCkuZ2V0QnJvd3NlclN1cHBvcnQoKTsKLQkJSVdlYkJyb3dzZXIgYnJvd3NlciA9IGJyb3dzZXJTdXBwb3J0LmNyZWF0ZUJyb3dzZXIoSVdvcmtiZW5jaEJyb3dzZXJTdXBwb3J0LkxPQ0FUSU9OX0JBUiB8IElXb3JrYmVuY2hCcm93c2VyU3VwcG9ydC5OQVZJR0FUSU9OX0JBUiwgbnVsbCwgbnVsbCwgbnVsbCk7Ci0JCWJyb3dzZXIub3BlblVSTCh1cmwpOwotICAgICAgcmV0dXJuIHN0YXR1czsKLQkgfWNhdGNoKFBhcnRJbml0RXhjZXB0aW9uIGV4Yyl7Ci0JCS8vVE9ETzogY2hhbmdlIGVycm9yIG1lc3NhZ2UKLQkJZW52LmdldExvZygpLmxvZyhJTG9nLldBUk5JTkcsIDUwNDgsIHRoaXMsICJsYXVuY2hTYW1wbGUiLCBleGMpOwotCQlzdGF0dXMgPSBTdGF0dXNVdGlscy53YXJuaW5nU3RhdHVzKCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX01BTEZPUk1FRF9VUkwsIGV4YyApOwotCQl0cnkgewotCQkJZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnQoc3RhdHVzKTsKLQkJfSBjYXRjaCAoU3RhdHVzRXhjZXB0aW9uIGUpIHsKLQkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX01BTEZPUk1FRF9VUkwsIGUgKTsKLQkJfQotICAgIAlyZXR1cm4gc3RhdHVzOwotICAgIH1jYXRjaChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZXhjKXsKLSAgICAJZW52LmdldExvZygpLmxvZyhJTG9nLldBUk5JTkcsIDUwNDgsIHRoaXMsICJsYXVuY2hTYW1wbGUiLCBleGMpOwotCQlzdGF0dXMgPSBTdGF0dXNVdGlscy53YXJuaW5nU3RhdHVzKCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX01BTEZPUk1FRF9VUkwsIGV4YyApOwotCQl0cnkgewotCQkJZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnQoc3RhdHVzKTsKLQkJfSBjYXRjaCAoU3RhdHVzRXhjZXB0aW9uIGUpIHsKLQkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0VSUk9SX01BTEZPUk1FRF9VUkwsIGUgKTsKLQkJfQotICAgIAlyZXR1cm4gc3RhdHVzOwotICAgIH0KLSAgfQotCi0gIAotCi0gIHByb3RlY3RlZCBJU3RhdHVzIGNyZWF0ZU1vZGVsKElFbnZpcm9ubWVudCBlbnYsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApIHsKLQotICAJLy9jcmVhdGUgdGhlIG1vZGVsIGZyb20gdGhlIHJlc291cmNlCi0gICAgSmF2YVRvTW9kZWxDb21tYW5kIGp0bWMgPSBuZXcgSmF2YVRvTW9kZWxDb21tYW5kKCk7Ci0gICAganRtYy5zZXRNZXRob2RzKG1ldGhvZHMpOwotICAgIGp0bWMuc2V0Q2xpZW50UHJvamVjdChjbGllbnRQcm9qZWN0KTsKLSAgICBqdG1jLnNldFByb3h5QmVhbihwcm94eUJlYW4pOwotICAgIGp0bWMuc2V0RW52aXJvbm1lbnQoIGVudiApOwotICAgIC8vanRtYy5zZXRTdGF0dXNNb25pdG9yKGdldFN0YXR1c01vbml0b3IoKSk7Ci0gICAgSVN0YXR1cyBzdGF0dXMgPSBqdG1jLmV4ZWN1dGUoIG1vbml0b3IsIG51bGwpOwotICAgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpIHJldHVybiBzdGF0dXM7Ci0KLSAgICBwcm94eU1vZGVsID0ganRtYy5nZXRKYXZhRGF0YU1vZGVsKCk7Ci0gICAgcmV0dXJuIHN0YXR1czsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZlclR5cGVJRChTdHJpbmcgc2FtcGxlU2VydmVyVHlwZUlEKQotICB7Ci0gIAl0aGlzLnNhbXBsZVNlcnZlclR5cGVJRCA9IHNhbXBsZVNlcnZlclR5cGVJRDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0RXhpc3RpbmdTZXJ2ZXIoSVNlcnZlciBzYW1wbGVFeGlzdGluZ1NlcnZlcikKLSAgewotICAJdGhpcy5zYW1wbGVFeGlzdGluZ1NlcnZlciA9IHNhbXBsZUV4aXN0aW5nU2VydmVyOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRKc3BGb2xkZXIoU3RyaW5nIGpzcEZvbGRlcikKLSAgewotICAgIHRoaXMuanNwRm9sZGVyID0ganNwRm9sZGVyOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRSdW5DbGllbnRUZXN0KGJvb2xlYW4gcnVuQ2xpZW50VGVzdCkKLSAgewotICAJdGhpcy5ydW5DbGllbnRUZXN0ID0gcnVuQ2xpZW50VGVzdDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U2FtcGxlUHJvamVjdChTdHJpbmcgc2FtcGxlUHJvamVjdCkKLSAgewotICAJdGhpcy5zYW1wbGVQcm9qZWN0ID0gc2FtcGxlUHJvamVjdDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudFByb2plY3QoU3RyaW5nIGNsaWVudFByb2plY3QpCi0gIHsKLSAgCXRoaXMuY2xpZW50UHJvamVjdCA9IGNsaWVudFByb2plY3Q7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldE1ldGhvZHMoQm9vbGVhblNlbGVjdGlvbltdIG1ldGhvZHMpCi0gIHsKLSAgCXRoaXMubWV0aG9kcyA9IG1ldGhvZHM7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRQcm94eUJlYW4oU3RyaW5nIHByb3h5QmVhbikKLSAgewotICAJdGhpcy5wcm94eUJlYW4gPSBwcm94eUJlYW47Ci0gIH0KLQotICAvKioKLSAgICogQHBhcmFtIHNldEVuZHBvaW50TWV0aG9kIFRoZSBzZXRFbmRwb2ludE1ldGhvZCB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTZXRFbmRwb2ludE1ldGhvZChTdHJpbmcgc2V0RW5kcG9pbnRNZXRob2QpCi0gIHsKLSAgICB0aGlzLnNldEVuZHBvaW50TWV0aG9kID0gc2V0RW5kcG9pbnRNZXRob2Q7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEVuZHBvaW50KExpc3QgZW5kcG9pbnRzKQotICB7Ci0gICAgdGhpcy5lbmRwb2ludHMgPSBlbmRwb2ludHM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L3dzc2FtcGxlL1dlYlNlcnZpY2VXU1NhbXBsZUV4ZWN1dGFibGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2lkZ2V0cy90ZXN0L3dzc2FtcGxlL1dlYlNlcnZpY2VXU1NhbXBsZUV4ZWN1dGFibGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjE0ZGQ4ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpZGdldHMvdGVzdC93c3NhbXBsZS9XZWJTZXJ2aWNlV1NTYW1wbGVFeGVjdXRhYmxlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0Lndzc2FtcGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmV4dC5XZWJTZXJ2aWNlRXhlY3V0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi0vKioKLSogVGhpcyBpcyB0aGUgaW50ZXJmYWNlIGZvciBvYmplY3RzIHRoYXQgcmVwcmVzZW50IGEga2luZCBvZgotKiBXZWIgU2VydmljZS1TZXJ2ZXItUnVudGltZSBhcnRpZmFjdC4gVGhlIHByaW1hcnkgcHVycG9zZSBvZiBhIFdlYlNlcnZpY2VTZXJ2ZXJSdW50aW1lVHlwZQotKiBvYmplY3QgaXMgdG8gbWFudWZhY3R1cmUgdGhlIHdpemFyZCBwYWdlcyB0aGF0IHN1cHBvcnQgdGhlIHR5cGUsIHNlcnZlciwgYW5kIHJ1bnRpbWUgY29uZmlndXJhdGlvbi4KLSovCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZVdTU2FtcGxlRXhlY3V0YWJsZSBpbXBsZW1lbnRzIFdlYlNlcnZpY2VFeGVjdXRhYmxlCi17Ci0gICAKLSAgCi0gIHB1YmxpYyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiBnZXRGaW5pc2hDb21tYW5kKCkKLSAgewotICAJcmV0dXJuIG5ldyBXU1NhbXBsZUZpbmlzaENvbW1hbmQoKTsKLSAgfQotICAgIAotfQotCi0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2l6YXJkL1ByaXZhdGVVRERJUmVnaXN0cnlUeXBlUmVnaXN0cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2l6YXJkL1ByaXZhdGVVRERJUmVnaXN0cnlUeXBlUmVnaXN0cnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGYwMGRjMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpemFyZC9Qcml2YXRlVURESVJlZ2lzdHJ5VHlwZVJlZ2lzdHJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkudWRkaS5Qcml2YXRlVURESVJlZ2lzdHJ5VHlwZTsKLQotCi1wdWJsaWMgY2xhc3MgUHJpdmF0ZVVERElSZWdpc3RyeVR5cGVSZWdpc3RyeQotewotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLSAgcHJpdmF0ZSBzdGF0aWMgUHJpdmF0ZVVERElSZWdpc3RyeVR5cGVSZWdpc3RyeSBpbnN0YW5jZV87Ci0KLSAgcHJpdmF0ZSBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZVJlZ2lzdHJ5KCkgewotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyBhIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLgotICAqIEByZXR1cm4gQSBzaW5nbGV0b24gV2ViU2VydmljZUNsaWVudFR5cGVSZWdpc3RyeSBvYmplY3QuCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgUHJpdmF0ZVVERElSZWdpc3RyeVR5cGVSZWdpc3RyeSBnZXRJbnN0YW5jZSgpIHsKLSAgICBpZiAoaW5zdGFuY2VfID09IG51bGwpIHsKLSAgICAgIGluc3RhbmNlXyA9IG5ldyBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZVJlZ2lzdHJ5KCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBpbnN0YW5jZV87Ci0gIH0KLQotICBwdWJsaWMgUHJpdmF0ZVVERElSZWdpc3RyeVR5cGUgZ2V0UHJpdmF0ZVVERElSZWdpc3RyeVR5cGUoKSB7Ci0gICAgSUV4dGVuc2lvblJlZ2lzdHJ5IHJlZyA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0gICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gY29uZmlnID0gcmVnLmdldENvbmZpZ3VyYXRpb25FbGVtZW50c0ZvcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJpdmF0ZVVERElSZWdpc3RyeVR5cGUiKTsKLQotICAgIHRyeSB7Ci0gICAgICBPYmplY3QgY29uZmlnRWxlbWVudCA9ICgoY29uZmlnLmxlbmd0aCA+IDApID8gY29uZmlnWzBdLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oImNsYXNzIikgOiBudWxsKTsKLSAgICAgIGlmKGNvbmZpZ0VsZW1lbnQgIT0gbnVsbCAmJiBjb25maWdFbGVtZW50IGluc3RhbmNlb2YgUHJpdmF0ZVVERElSZWdpc3RyeVR5cGUpIAotICAgICAgICByZXR1cm4gKFByaXZhdGVVRERJUmVnaXN0cnlUeXBlKWNvbmZpZ0VsZW1lbnQ7IAotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gICAgY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpemFyZC9QdWJsaWNVRERJUmVnaXN0cnlUeXBlUmVnaXN0cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2l6YXJkL1B1YmxpY1VERElSZWdpc3RyeVR5cGVSZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlM2Y5NDI2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2l6YXJkL1B1YmxpY1VERElSZWdpc3RyeVR5cGVSZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZDsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLnVkZGkuUHVibGljVURESVJlZ2lzdHJ5VHlwZTsKLQotCi1wdWJsaWMgY2xhc3MgUHVibGljVURESVJlZ2lzdHJ5VHlwZVJlZ2lzdHJ5Ci17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAyLiI7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgUHVibGljVURESVJlZ2lzdHJ5VHlwZVJlZ2lzdHJ5IGluc3RhbmNlXzsKLSAgcHJpdmF0ZSBWZWN0b3IgdHlwZXNfOwotICBwcml2YXRlIFZlY3RvciBjb25maWdFbGVtZW50c187Ci0KLSAgcHJpdmF0ZSBQdWJsaWNVRERJUmVnaXN0cnlUeXBlUmVnaXN0cnkoKSB7Ci0gICAgdHlwZXNfID0gbmV3IFZlY3RvcigpOwotICAgIGNvbmZpZ0VsZW1lbnRzXyA9IG5ldyBWZWN0b3IoKTsKLQotICAgIGluaXQoKTsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgYSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcy4KLSAgKiBAcmV0dXJuIEEgc2luZ2xldG9uIFdlYlNlcnZpY2VDbGllbnRUeXBlUmVnaXN0cnkgb2JqZWN0LgotICAqLwotICBwdWJsaWMgc3RhdGljIFB1YmxpY1VERElSZWdpc3RyeVR5cGVSZWdpc3RyeSBnZXRJbnN0YW5jZSgpIHsKLSAgICBpZiAoaW5zdGFuY2VfID09IG51bGwpIHsKLSAgICAgIGluc3RhbmNlXyA9IG5ldyBQdWJsaWNVRERJUmVnaXN0cnlUeXBlUmVnaXN0cnkoKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGluc3RhbmNlXzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGluaXQoKSB7Ci0gICAgSUV4dGVuc2lvblJlZ2lzdHJ5IHJlZyA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0gICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gY29uZmlnID0gcmVnLmdldENvbmZpZ3VyYXRpb25FbGVtZW50c0ZvcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVibGljVURESVJlZ2lzdHJ5VHlwZSIpOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb25maWcubGVuZ3RoOyBpKyspIHsKLSAgICAgIHRyeSB7Ci0gICAgICAgIE9iamVjdCBjb25maWdFbGVtZW50ID0gY29uZmlnW2ldLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oImNsYXNzIik7Ci0KLSAgICAgICAgaWYoIGNvbmZpZ0VsZW1lbnQgaW5zdGFuY2VvZiBQdWJsaWNVRERJUmVnaXN0cnlUeXBlKSAgewotICAgICAgICAgIHR5cGVzXy5hZGQoY29uZmlnRWxlbWVudCk7Ci0gICAgICAgICAgY29uZmlnRWxlbWVudHNfLmFkZChjb25maWdbaV0pOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7fQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBQdWJsaWNVRERJUmVnaXN0cnlUeXBlW10gZ2V0QWxsUHVibGljVURESVJlZ2lzdHJ5VHlwZXMoKSB7Ci0gICAgUHVibGljVURESVJlZ2lzdHJ5VHlwZVtdIHR5cGVzID0gbmV3IFB1YmxpY1VERElSZWdpc3RyeVR5cGVbdHlwZXNfLnNpemUoKV07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlc18uc2l6ZSgpOyBpKyspIHsKLSAgICAgIHR5cGVzW2ldID0gKFB1YmxpY1VERElSZWdpc3RyeVR5cGUpdHlwZXNfLmVsZW1lbnRBdChpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHR5cGVzOwotICB9Ci0KLSAgcHVibGljIFB1YmxpY1VERElSZWdpc3RyeVR5cGUgZ2V0UHVibGljVURESVJlZ2lzdHJ5VHlwZUJ5SUQoU3RyaW5nIGlkKSB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb25maWdFbGVtZW50c18uc2l6ZSgpOyBpKyspIHsKLSAgICAgIElDb25maWd1cmF0aW9uRWxlbWVudCBjID0gKElDb25maWd1cmF0aW9uRWxlbWVudCljb25maWdFbGVtZW50c18uZWxlbWVudEF0KGkpOwotICAgICAgaWYgKGMuZ2V0QXR0cmlidXRlKCJpZCIpLmVxdWFscyhpZCkpCi0gICAgICAgIHJldHVybiAoUHVibGljVURESVJlZ2lzdHJ5VHlwZSl0eXBlc18uZWxlbWVudEF0KGkpOwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UHVibGljVURESVJlZ2lzdHJ5VHlwZUlEQnlOYW1lKFN0cmluZyBuYW1lKSB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlc18uc2l6ZSgpOyBpKyspIHsKLSAgICAgIFB1YmxpY1VERElSZWdpc3RyeVR5cGUgdHlwZSA9IChQdWJsaWNVRERJUmVnaXN0cnlUeXBlKXR5cGVzXy5lbGVtZW50QXQoaSk7Ci0gICAgICBpZiAodHlwZS5nZXROYW1lKCkuZXF1YWxzKG5hbWUpKQotICAgICAgICByZXR1cm4gKChJQ29uZmlndXJhdGlvbkVsZW1lbnQpY29uZmlnRWxlbWVudHNfLmVsZW1lbnRBdChpKSkuZ2V0QXR0cmlidXRlKCJpZCIpOwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpemFyZC9SdW50aW1lU2VydmVyU2VsZWN0aW9uRGlhbG9nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpemFyZC9SdW50aW1lU2VydmVyU2VsZWN0aW9uRGlhbG9nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwNmY1OTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aXphcmQvUnVudGltZVNlcnZlclNlbGVjdGlvbkRpYWxvZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIyMSAgIDExOTExMSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwMzI3ICAgMTMxNjA1IHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA3MTcgICAxNTA1NzcgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWsKLSAqIDIwMDYwNzI2ICAgMTUwODY1IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwNjA3MjYgICAxNTA4Njcgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA2MDcyOAkgIDE1MTcyMyBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24KLSAqIDIwMDYwODAyICAgMTQ4NzMxIG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5Db21wYXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU2VydmVyVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucGx1Z2luLldlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LlJ1bnRpbWVEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LldlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5kYXRhLlR5cGVSdW50aW1lU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkdyb3VwOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhlbHAuSVdvcmtiZW5jaEhlbHBTeXN0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklSdW50aW1lVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlclR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlckNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS5TZXJ2ZXJVSUNvcmU7Ci0KLXB1YmxpYyBjbGFzcyBSdW50aW1lU2VydmVyU2VsZWN0aW9uRGlhbG9nIGV4dGVuZHMgRGlhbG9nIGltcGxlbWVudHMgTGlzdGVuZXIgewotCi0gIHByaXZhdGUgU2hlbGwgdGhpc1NoZWxsOwotICBwcml2YXRlIEdyb3VwIHZpZXdTZWxlY3Rpb25Hcm91cF87Ci0gIHByaXZhdGUgVGV4dCBtZXNzYWdlQmFubmVyXzsKLSAgcHJpdmF0ZSBDb21wb3NpdGUgcHJpbWFyeUdyb3VwXzsKLSAgcHJpdmF0ZSBHcm91cCBydW50aW1lc0dyb3VwXzsKLSAgcHJpdmF0ZSBHcm91cCBzZXJ2ZXJzR3JvdXBfOwotICBwcml2YXRlIFRyZWUgcnVudGltZXNMaXN0XzsKLSAgcHJpdmF0ZSBUcmVlIHNlcnZlckxpc3RfOwotICBwcml2YXRlIEJ1dHRvbiB2aWV3U2VsZWN0aW9uQnlSdW50aW1lQnV0dG9uXzsKLSAgcHJpdmF0ZSBCdXR0b24gdmlld1NlbGVjdGlvbkJ5U2VydmVyQnV0dG9uXzsKLSAgcHJpdmF0ZSBCdXR0b24gdmlld1NlbGVjdGlvbkJ5RXhwbG9yZUJ1dHRvbl87Ci0gIHByaXZhdGUgSUxhYmVsUHJvdmlkZXIgbGFiZWxQcm92aWRlcl87Ci0gIHByaXZhdGUgSW1hZ2Ugc2VydmVyVHlwZXNJY29uOwotICBwcml2YXRlIEltYWdlIGV4aXN0aW5nU2VydmVyc0ljb247Ci0KLSAgLyoKLSAgICogQ09OVEVYVF9JRCBQV1JTMDAwMSBmb3IgdGhlIHNlbGVjdGlvbiBvZiBydW50aW1lLCBzZXJ2ZXIgYW5kIHByb2plY3QgY29tYmluYXRpb24KLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFdSU19ESUFMT0cgPSBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5JRCArICIuUFdSUzAwMDEiOwotICAvKiBDT05URVhUX0lEIFBXUlMwMDAyIGZvciB0aGUgcnVudGltZSBzZWxlY3Rpb24gb24gaW4gdGhlIGRhaWxvZyAqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BXUlNfTElTVF9SVU5USU1FUyA9IFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLklEICsgIi5QV1JTMDAwMiI7Ci0gIC8qIENPTlRFWFRfSUQgUFdSUzAwMDMgZm9yIHRoZSBzZXJ2ZXIgc2VsZWN0aW9uIGluIHRoZSBkaWFsb2cgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QV1JTX0xJU1RfU0VSVkVSUyA9IFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLklEICsgIi5QV1JTMDAwMyI7Ci0gIC8qCi0gICAqIENPTlRFWFRfSUQgUFdSUzAwMDQgZm9yIHRoZSBFSkIgUHJvamVjdCBjb21ibyBib3ggb2YgdGhlIHJ1bnRpbWUgc2VsZWN0aW9uIGRpYWxvZwotICAgKi8KLSAgLy8gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFdSU19FSkJfUFJPSkVDVCA9IFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLklECi0gIC8vICsgIi5QV1JTMDAwNCI7Ci0gIC8qCi0gICAqIENPTlRFWFRfSUQgUFdSUzAwMDUgZm9yIHRoZSBydW50aW1lIHZpZXcgcmFkaW8gYnV0dG9uIG9mIHRoZSBydW50aW1lIHNlbGVjdGlvbiBkaWFsb2cKLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFdSU19SQURJT19SVU5USU1FID0gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uSUQgKyAiLlBXUlMwMDA1IjsKLSAgLyoKLSAgICogQ09OVEVYVF9JRCBQV1JTMDAwNiBmb3IgdGhlIHNlcnZlciB2aWV3IHJhZGlvIGJ1dHRvbiBvZiB0aGUgcnVudGltZSBzZWxlY3Rpb24gZGlhbG9nCi0gICAqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BXUlNfUkFESU9fU0VSVkVSID0gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uSUQgKyAiLlBXUlMwMDA2IjsKLSAgLyoKLSAgICogQ09OVEVYVF9JRCBQV1JTMDAwNyBmb3IgdGhlIGV4cGxvcmUgdmlldyByYWRpbyBidXR0b24gb2YgdGhlIHJ1bnRpbWUgc2VsZWN0aW9uIGRpYWxvZwotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QV1JTX1JBRElPX0VYUExPUkUgPSBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5JRCArICIuUFdSUzAwMDciOwotICBwcml2YXRlIEhhc2h0YWJsZSBzZXJ2ZXJMYWJlbHNfOwotICBwcml2YXRlIEhhc2h0YWJsZSBleGlzdGluZ1NlcnZlcnNUYWJsZV87Ci0gIHByaXZhdGUgU3RyaW5nIGRlZmF1bHRTZXJ2ZXJfOwotICBwcml2YXRlIFN0cmluZyBkZWZhdWx0UnVudGltZV87Ci0gIHByaXZhdGUgU3RyaW5nIHR5cGVJZF87Ci0KLSAgcHJpdmF0ZSBSdW50aW1lRGVzY3JpcHRvciBzZWxlY3RlZFJ1bnRpbWVfOwotCi0gIHByaXZhdGUgSVNlcnZlciBzZWxlY3RlZFNlcnZlcl87Ci0gIHByaXZhdGUgU3RyaW5nIHNlbGVjdGVkU2VydmVyTGFiZWxfOwotICBwcml2YXRlIFN0cmluZyBzZWxlY3RlZFNlcnZlckZhY3RvcnlJRF87Ci0gIHByaXZhdGUgYm9vbGVhbiBpc0V4aXN0aW5nU2VydmVyXzsKLSAgcHJpdmF0ZSBib29sZWFuIHZhbGlkYXRlT25fID0gZmFsc2U7Ci0gIHByaXZhdGUgYnl0ZSBzZWxlY3Rpb25Nb2RlXzsKLSAgcHJpdmF0ZSBmaW5hbCBieXRlIE1PREVfU0VSVklDRSA9IChieXRlKSAwOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBTRVJWRVJfVFlQRVNfSUNPTiA9ICJpY29ucy9zZXJ2ZXJzL3NlcnZlcnNfb2JqLmdpZiI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEVYSVNUSU5HX1NFUlZFUlNfSUNPTiA9ICJpY29ucy9zZXJ2ZXJzL2V4aXN0aW5nX3NlcnZlcl9vYmouZ2lmIjsKLSAgcHJpdmF0ZSBTdHJpbmcgc2VydmVySW5zdGFuY2VJRF87Ci0KLSAgcHJpdmF0ZSBib29sZWFuIHNlbGVjdFNlcnZlckZpcnN0XyA9IGZhbHNlOwotICAKLSAgcHVibGljIFJ1bnRpbWVTZXJ2ZXJTZWxlY3Rpb25EaWFsb2coU2hlbGwgc2hlbGwsIGJ5dGUgbW9kZSwgVHlwZVJ1bnRpbWVTZXJ2ZXIgaWRzLCBTdHJpbmcgajJlZVZlcnNpb24pIHsKLSAgICBzdXBlcihzaGVsbCk7Ci0gICAgc2VsZWN0aW9uTW9kZV8gPSBtb2RlOwotICAgIHR5cGVJZF8gPSBpZHMuZ2V0VHlwZUlkKCk7Ci0gICAgZGVmYXVsdFJ1bnRpbWVfID0gaWRzLmdldFJ1bnRpbWVJZCgpOwotICAgIGRlZmF1bHRTZXJ2ZXJfID0gaWRzLmdldFNlcnZlcklkKCk7Ci0gICAgc2VydmVySW5zdGFuY2VJRF8gPSBpZHMuZ2V0U2VydmVySW5zdGFuY2VJZCgpOwotICAgIHNldElzRXhpc3RpbmdTZXJ2ZXIoaWRzLmdldFNlcnZlckluc3RhbmNlSWQoKSAhPSBudWxsKTsKLSAgICBzZXJ2ZXJMYWJlbHNfID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIGV4aXN0aW5nU2VydmVyc1RhYmxlXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBsYWJlbFByb3ZpZGVyXyA9IFNlcnZlclVJQ29yZS5nZXRMYWJlbFByb3ZpZGVyKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNlbGVjdFNlcnZlckZpcnN0KGJvb2xlYW4gc2VsZWN0U2VydmVyRmlyc3QpIHsKLQkgIHNlbGVjdFNlcnZlckZpcnN0XyA9IHNlbGVjdFNlcnZlckZpcnN0OwotICB9Ci0gIAotICBwcm90ZWN0ZWQgUG9pbnQgZ2V0SW5pdGlhbFNpemUoKQotICB7Ci0JICByZXR1cm4gdGhpcy5nZXRTaGVsbCgpLmNvbXB1dGVTaXplKDU1MCwgU1dULkRFRkFVTFQsIHRydWUpOwotICB9Ci0KLSAgcHVibGljIFR5cGVSdW50aW1lU2VydmVyIGdldFR5cGVSdW50aW1lU2VydmVyKCkgewotICAgIFR5cGVSdW50aW1lU2VydmVyIGlkcyA9IG5ldyBUeXBlUnVudGltZVNlcnZlcigpOwotCi0gICAgaWRzLnNldFR5cGVJZCh0eXBlSWRfKTsKLSAgICBpZiAoc2VsZWN0ZWRSdW50aW1lXyAhPSBudWxsKQotICAgICAgaWRzLnNldFJ1bnRpbWVJZChzZWxlY3RlZFJ1bnRpbWVfLmdldElkKCkpOwotICAgIAotICAgIGlmKCBzZWxlY3RlZFNlcnZlckZhY3RvcnlJRF8gPT0gbnVsbCApCi0gICAgewotICAgICAgaWRzLnNldFNlcnZlcklkKCBkZWZhdWx0U2VydmVyXyApOwotICAgICAgaWRzLnNldFNlcnZlckluc3RhbmNlSWQoIHNlcnZlckluc3RhbmNlSURfICk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBpZHMuc2V0U2VydmVySWQoc2VsZWN0ZWRTZXJ2ZXJGYWN0b3J5SURfKTsKLQotICAgICAgaWYgKGlzRXhpc3RpbmdTZXJ2ZXJfICYmIHNlbGVjdGVkU2VydmVyXyAhPSBudWxsKSAKLSAgICAgIHsKLSAgICAgICAgaWRzLnNldFNlcnZlckluc3RhbmNlSWQoc2VsZWN0ZWRTZXJ2ZXJfLmdldElkKCkpOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gaWRzOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGdldElzRXhpc3RpbmdTZXJ2ZXIoKSB7Ci0gICAgcmV0dXJuIGlzRXhpc3RpbmdTZXJ2ZXJfOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHNldElzRXhpc3RpbmdTZXJ2ZXIoYm9vbGVhbiBpc0V4aXN0aW5nKSB7Ci0gICAgaXNFeGlzdGluZ1NlcnZlcl8gPSBpc0V4aXN0aW5nOwotICB9Ci0KLSAgcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlQ29udGVudHMoQ29tcG9zaXRlIHBhcmVudCkgewotICAgIENvbXBvc2l0ZSBjb21wID0gKENvbXBvc2l0ZSkgc3VwZXIuY3JlYXRlQ29udGVudHMocGFyZW50KTsgIAotICAgIGNvbXAucGFjaygpOyAKLSAgICAKLSAgICBpZiAoc2VsZWN0U2VydmVyRmlyc3RfKSB7Ci0gICAgCXZpZXdTZWxlY3Rpb25CeVNlcnZlckJ1dHRvbl8uc2V0U2VsZWN0aW9uKHRydWUpOyAgCi0gICAgCWhhbmRsZVNlcnZlclZpZXdTZWxlY3Rpb25FdmVudCgpOwotICAgIH0KLSAgICBlbHNlCi0gICAgCXZpZXdTZWxlY3Rpb25CeVJ1bnRpbWVCdXR0b25fLnNldFNlbGVjdGlvbih0cnVlKTsKLSAgICAgICAgCi0gICAgcmV0dXJuIGNvbXA7Ci0gIH0gCi0KLSAgcHJvdGVjdGVkIHZvaWQgc2V0U2hlbGxTdHlsZShpbnQgbmV3U2hlbGxTdHlsZSkKLSAgewotICAgIHN1cGVyLnNldFNoZWxsU3R5bGUoIG5ld1NoZWxsU3R5bGUgfCBTV1QuUkVTSVpFICk7ICAKLSAgfQotCi0gIHByb3RlY3RlZCBDb250cm9sIGNyZWF0ZURpYWxvZ0FyZWEoQ29tcG9zaXRlIHBhcmVudCkgewotICAgIHZhbGlkYXRlT25fID0gZmFsc2U7Ci0gICAgdGhpc1NoZWxsID0gcGFyZW50LmdldFNoZWxsKCk7Ci0gICAgaWYgKHRoaXNTaGVsbCA9PSBudWxsKSB7Ci0gICAgICB0aGlzU2hlbGwgPSBjcmVhdGVTaGVsbCgpOwotICAgIH0KLSAgICBDb21wb3NpdGUgY29tcG9zaXRlID0gKENvbXBvc2l0ZSkgc3VwZXIuY3JlYXRlRGlhbG9nQXJlYShwYXJlbnQpOwotICAgIEdyaWRMYXlvdXQgZ2w7Ci0gICAgR3JpZERhdGEgZ2Q7Ci0gICAgLy8gV2luZG93IHRpdGxlCi0gICAgaWYgKHNlbGVjdGlvbk1vZGVfID09IE1PREVfU0VSVklDRSkKLSAgICAgIHRoaXNTaGVsbC5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX1RJVExFX1dTX1JVTlRJTUVfU0VMRUNUSU9OKTsKLSAgICBlbHNlCi0gICAgICB0aGlzU2hlbGwuc2V0VGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9USVRMRV9XU19DTElFTlRfUlVOVElNRV9TRUxFQ1RJT04pOwotICAgIAotICAgIElXb3JrYmVuY2hIZWxwU3lzdGVtIGhlbHBTeXN0ZW0gPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKTsKLSAgICAKLSAgICBoZWxwU3lzdGVtLnNldEhlbHAodGhpc1NoZWxsLCBJTkZPUE9QX1BXUlNfRElBTE9HKTsKLSAgICAvLyBEaWFsb2cgZGVzY3JpcHRpb24gYmFubmVyCi0gICAgbWVzc2FnZUJhbm5lcl8gPSBuZXcgVGV4dChjb21wb3NpdGUsIFNXVC5SRUFEX09OTFkgfCBTV1QuV1JBUCk7Ci0gICAgbWVzc2FnZUJhbm5lcl8uc2V0VGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9ERVNDX1dTX1JVTlRJTUVfU0VMRUNUSU9OICsgIlxuIiArICIgICAgICAiKTsgLy8gcmVzZXJ2ZXMgYSBzZWNvbmQgbGluZSBmb3IgbWVzc2FnZSBkaXNwbGF5Ci0gICAgbWVzc2FnZUJhbm5lcl8uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfREVTQ19XU19SVU5USU1FX1NFTEVDVElPTik7Ci0gICAgZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMKTsKLSAgICBtZXNzYWdlQmFubmVyXy5zZXRMYXlvdXREYXRhKGdkKTsKLSAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vLwotICAgIG5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5IT1JJWk9OVEFMKTsKLSAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vLwotICAgIC8vIFNlbGVjdGlvbgotICAgIHRoaXNTaGVsbC5zZXRUb29sVGlwVGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QV1JTX1BBR0UpOwotICAgIHZpZXdTZWxlY3Rpb25Hcm91cF8gPSBuZXcgR3JvdXAoY29tcG9zaXRlLCBTV1QuTk9ORSk7Ci0gICAgZ2wgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGdsLm1hcmdpbkhlaWdodCA9IDA7Ci0gICAgZ2wubWFyZ2luV2lkdGggPSAwOwotICAgIHZpZXdTZWxlY3Rpb25Hcm91cF8uc2V0TGF5b3V0KGdsKTsKLSAgICBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwpOwotICAgIHZpZXdTZWxlY3Rpb25Hcm91cF8uc2V0TGF5b3V0RGF0YShnZCk7Ci0gICAgaWYgKHNlbGVjdGlvbk1vZGVfID09IE1PREVfU0VSVklDRSkKLSAgICAgIHZpZXdTZWxlY3Rpb25Hcm91cF8uc2V0VGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfU0VMRUNUSU9OX1ZJRVdfVElUTEUpOwotICAgIGVsc2UKLSAgICAgIHZpZXdTZWxlY3Rpb25Hcm91cF8uc2V0VGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfQ0xJRU5UX1NFTEVDVElPTl9WSUVXX1RJVExFKTsKLSAgICB2aWV3U2VsZWN0aW9uQnlTZXJ2ZXJCdXR0b25fID0gbmV3IEJ1dHRvbih2aWV3U2VsZWN0aW9uR3JvdXBfLCBTV1QuUkFESU8pOwotICAgIHZpZXdTZWxlY3Rpb25CeVNlcnZlckJ1dHRvbl8uc2V0VGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfU0VMRUNUSU9OX1ZJRVdfU0VSVkVSKTsKLSAgICB2aWV3U2VsZWN0aW9uQnlTZXJ2ZXJCdXR0b25fLmFkZExpc3RlbmVyKFNXVC5TZWxlY3Rpb24sIHRoaXMpOwotICAgIHZpZXdTZWxlY3Rpb25CeVNlcnZlckJ1dHRvbl8uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFdSU19SQURJT19TRVJWRVIpOwotICAgIGhlbHBTeXN0ZW0uc2V0SGVscCh2aWV3U2VsZWN0aW9uQnlTZXJ2ZXJCdXR0b25fLCBJTkZPUE9QX1BXUlNfUkFESU9fU0VSVkVSKTsKLSAgICB2aWV3U2VsZWN0aW9uQnlSdW50aW1lQnV0dG9uXyA9IG5ldyBCdXR0b24odmlld1NlbGVjdGlvbkdyb3VwXywgU1dULlJBRElPKTsKLSAgICB2aWV3U2VsZWN0aW9uQnlSdW50aW1lQnV0dG9uXy5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9TRUxFQ1RJT05fVklFV19SVU5USU1FKTsKLSAgICB2aWV3U2VsZWN0aW9uQnlSdW50aW1lQnV0dG9uXy5hZGRMaXN0ZW5lcihTV1QuU2VsZWN0aW9uLCB0aGlzKTsKLSAgICB2aWV3U2VsZWN0aW9uQnlSdW50aW1lQnV0dG9uXy5zZXRUb29sVGlwVGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QV1JTX1JBRElPX1JVTlRJTUUpOwotICAgIGhlbHBTeXN0ZW0uc2V0SGVscCh2aWV3U2VsZWN0aW9uQnlSdW50aW1lQnV0dG9uXywgSU5GT1BPUF9QV1JTX1JBRElPX1JVTlRJTUUpOwotICAgIHZpZXdTZWxlY3Rpb25CeUV4cGxvcmVCdXR0b25fID0gbmV3IEJ1dHRvbih2aWV3U2VsZWN0aW9uR3JvdXBfLCBTV1QuUkFESU8pOwotICAgIHZpZXdTZWxlY3Rpb25CeUV4cGxvcmVCdXR0b25fLnNldFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1NFTEVDVElPTl9WSUVXX0VYUExPUkUpOwotICAgIHZpZXdTZWxlY3Rpb25CeUV4cGxvcmVCdXR0b25fLmFkZExpc3RlbmVyKFNXVC5TZWxlY3Rpb24sIHRoaXMpOwotICAgIHZpZXdTZWxlY3Rpb25CeUV4cGxvcmVCdXR0b25fLnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BXUlNfUkFESU9fRVhQTE9SRSk7Ci0gICAgaGVscFN5c3RlbS5zZXRIZWxwKHZpZXdTZWxlY3Rpb25CeUV4cGxvcmVCdXR0b25fLCBJTkZPUE9QX1BXUlNfUkFESU9fRVhQTE9SRSk7Ci0gICAgcHJpbWFyeUdyb3VwXyA9IG5ldyBDb21wb3NpdGUoY29tcG9zaXRlLCBTV1QuTk9ORSk7Ci0gICAgZ2wgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGdsLm51bUNvbHVtbnMgPSAxOwotICAgIGdsLm1ha2VDb2x1bW5zRXF1YWxXaWR0aCA9IHRydWU7Ci0gICAgZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKTsKLSAgICBwcmltYXJ5R3JvdXBfLnNldExheW91dChnbCk7Ci0gICAgcHJpbWFyeUdyb3VwXy5zZXRMYXlvdXREYXRhKGdkKTsKLSAgICBydW50aW1lc0dyb3VwXyA9IG5ldyBHcm91cChwcmltYXJ5R3JvdXBfLCBTV1QuTk9ORSk7Ci0gICAgZ2wgPSBuZXcgR3JpZExheW91dCgpOwotICAgIHJ1bnRpbWVzR3JvdXBfLnNldExheW91dChnbCk7Ci0gICAgZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKTsKLSAgICBydW50aW1lc0dyb3VwXy5zZXRMYXlvdXREYXRhKGdkKTsKLSAgICBydW50aW1lc0dyb3VwXy5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9SVU5USU1FU19MSVNUKTsKLSAgICBydW50aW1lc0xpc3RfID0gbmV3IFRyZWUocnVudGltZXNHcm91cF8sIFNXVC5TSU5HTEUgfCBTV1QuQk9SREVSIHwgU1dULlZfU0NST0xMIHwgU1dULkhfU0NST0xMKTsKLSAgICBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpOwotICAgIHJ1bnRpbWVzTGlzdF8uc2V0TGF5b3V0RGF0YShnZCk7Ci0gICAgcnVudGltZXNMaXN0Xy5hZGRMaXN0ZW5lcihTV1QuU2VsZWN0aW9uLCB0aGlzKTsKLSAgICBydW50aW1lc0xpc3RfLnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BXUlNfTElTVF9SVU5USU1FUyk7Ci0gICAgaGVscFN5c3RlbS5zZXRIZWxwKHJ1bnRpbWVzTGlzdF8sIElORk9QT1BfUFdSU19MSVNUX1JVTlRJTUVTKTsKLSAgICAvLyAgU2VydmVyIGxhYmVscyBjb250cm9sCi0gICAgc2VydmVyc0dyb3VwXyA9IG5ldyBHcm91cChwcmltYXJ5R3JvdXBfLCBTV1QuTk9ORSk7Ci0gICAgZ2wgPSBuZXcgR3JpZExheW91dCgpOwotICAgIHNlcnZlcnNHcm91cF8uc2V0TGF5b3V0KGdsKTsKLSAgICBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpOwotICAgIHNlcnZlcnNHcm91cF8uc2V0TGF5b3V0RGF0YShnZCk7Ci0gICAgc2VydmVyc0dyb3VwXy5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9TRVJWRVJTX0xJU1QpOwotICAgIHNlcnZlckxpc3RfID0gbmV3IFRyZWUoc2VydmVyc0dyb3VwXywgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIgfCBTV1QuVl9TQ1JPTEwgfCBTV1QuSF9TQ1JPTEwpOwotICAgIHNlcnZlckxpc3RfLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCB8IEdyaWREYXRhLkZJTExfVkVSVElDQUwpKTsKLSAgICBzZXJ2ZXJMaXN0Xy5hZGRMaXN0ZW5lcihTV1QuU2VsZWN0aW9uLCB0aGlzKTsKLSAgICBzZXJ2ZXJMaXN0Xy5zZXRUb29sVGlwVGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QV1JTX0xJU1RfU0VSVkVSUyk7Ci0gICAgU2VydmVyc0xpc3Qgc2VydmVyTGlzdCA9IG5ldyBTZXJ2ZXJzTGlzdCgpOwotICAgIHNlcnZlckxpc3Quc2V0U2VydmVyVHJlZUl0ZW1zKHNlcnZlckxpc3RfKTsKLSAgICBoZWxwU3lzdGVtLnNldEhlbHAoc2VydmVyTGlzdF8sIElORk9QT1BfUFdSU19MSVNUX1NFUlZFUlMpOwotICAgIHNldFJ1bnRpbWVzR3JvdXAoKTsKLSAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vLwotICAgIG5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5IT1JJWk9OVEFMKTsKLSAgICB2YWxpZGF0ZU9uXyA9IHRydWU7Ci0gICAgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5EaWFsb2cuYXBwbHlEaWFsb2dGb250KHBhcmVudCk7Ci0gICAgcmV0dXJuIGNvbXBvc2l0ZTsKLSAgfQotCi0KLSAgcHJpdmF0ZSB2b2lkIHZhbGlkYXRlU2VydmVyUnVudGltZVNlbGVjdGlvbigpIHsKLQotICAgIGlmIChzZWxlY3Rpb25Nb2RlXyA9PSBNT0RFX1NFUlZJQ0UpIHsKLSAgICAgIGlmIChzZWxlY3RlZFNlcnZlckZhY3RvcnlJRF8gIT0gbnVsbCAmJiBzZWxlY3RlZFJ1bnRpbWVfICE9IG51bGwpIAotICAgICAgewotCi0gICAgICAgIGlmIChXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5pc1NlcnZlclJ1bnRpbWVUeXBlU3VwcG9ydGVkKHNlbGVjdGVkU2VydmVyRmFjdG9yeUlEXywgc2VsZWN0ZWRSdW50aW1lXy5nZXRJZCgpLAotICAgICAgICAgICAgdHlwZUlkXykpCi0gICAgICAgIHsKLSAgICAgICAgICBzZXRPS1N0YXR1c01lc3NhZ2UoKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgc2VydmVyTGFiZWwgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTZXJ2ZXJMYWJlbEJ5SWQoc2VsZWN0ZWRTZXJ2ZXJGYWN0b3J5SURfKTsKLSAgICAgICAgICBTdHJpbmcgcnVudGltZUxhYmVsID0gc2VsZWN0ZWRSdW50aW1lXy5nZXRMYWJlbCgpOwotICAgICAgICAgIHNldEVSUk9SU3RhdHVzTWVzc2FnZShOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX0lOVkFMSURfU1JUX1NFTEVDVElPTlMsIG5ldyBTdHJpbmdbXSB7IHNlcnZlckxhYmVsLAotICAgICAgICAgICAgICBydW50aW1lTGFiZWwgfSkpOwotICAgICAgICAgIC8vIEZvdW5kIGFuIGVycm9yIC0gc28gcmV0dXJuLgotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBlbHNlIHsKLQotICAgICAgaWYgKHNlbGVjdGVkU2VydmVyRmFjdG9yeUlEXyAhPSBudWxsICYmIHNlbGVjdGVkUnVudGltZV8gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIGNsaWVudElkID0gdHlwZUlkXzsKLSAgICAgICAgaWYgKFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmlzU2VydmVyQ2xpZW50UnVudGltZVR5cGVTdXBwb3J0ZWQoc2VsZWN0ZWRTZXJ2ZXJGYWN0b3J5SURfLCBzZWxlY3RlZFJ1bnRpbWVfCi0gICAgICAgICAgICAuZ2V0SWQoKSwgY2xpZW50SWQpKQotICAgICAgICB7Ci0gICAgICAgICAgc2V0T0tTdGF0dXNNZXNzYWdlKCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIHNlcnZlckxhYmVsID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2VydmVyTGFiZWxCeUlkKHNlbGVjdGVkU2VydmVyRmFjdG9yeUlEXyk7Ci0gICAgICAgICAgU3RyaW5nIHJ1bnRpbWVMYWJlbCA9IHNlbGVjdGVkUnVudGltZV8uZ2V0TGFiZWwoKTsKLSAgICAgICAgICBzZXRFUlJPUlN0YXR1c01lc3NhZ2UoTkxTLmJpbmQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19JTlZBTElEX1NSVF9TRUxFQ1RJT05TLCBuZXcgU3RyaW5nW10geyBzZXJ2ZXJMYWJlbCwKLSAgICAgICAgICAgICAgcnVudGltZUxhYmVsIH0pKTsKLSAgICAgICAgICAKLSAgICAgICAgICAvLyBGb3VuZCBhbiBlcnJvciAtIHNvIHJldHVybi4KLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gRGlzYWJsZSBPSyBidXR0b24gaWYgdGhlIHJ1bnRpbWUgc2VsZWN0aW9uIGlzIGludmFsaWQKLSAgICBUcmVlSXRlbVtdIHJ1bnRpbWVTZWwgPSBydW50aW1lc0xpc3RfLmdldFNlbGVjdGlvbigpOwotICAgIGlmIChydW50aW1lU2VsID09IG51bGwgfHwgcnVudGltZVNlbC5sZW5ndGggPD0gMCB8fCBydW50aW1lU2VsWzBdLmdldFRleHQoKS5sZW5ndGgoKSA9PSAwKSB7Ci0gICAgICBkaXNhYmxlT0tCdXR0b24oKTsKLSAgICB9Ci0gICAgLy8gRGlzYWJsZSBPSyBidXR0b24gaWYgc2VydmVyIHNlbGVjdGlvbiBpcyBpbnZhbGlkCi0gICAgVHJlZUl0ZW1bXSBzZXJ2ZXJTZWwgPSBzZXJ2ZXJMaXN0Xy5nZXRTZWxlY3Rpb24oKTsKLSAgICBTdHJpbmcgY3VycmVudFNlbGVjdGlvbiA9IChzZXJ2ZXJTZWwgIT0gbnVsbCAmJiBzZXJ2ZXJTZWwubGVuZ3RoID4gMCkgPyBzZXJ2ZXJTZWxbMF0uZ2V0VGV4dCgpIDogIiI7Ci0gICAgaWYgKHNlcnZlclNlbCA9PSBudWxsIHx8IGN1cnJlbnRTZWxlY3Rpb24ubGVuZ3RoKCkgPT0gMCkgewotICAgICAgZGlzYWJsZU9LQnV0dG9uKCk7Ci0gICAgfQotICAgIGlmICghc2VydmVyTGFiZWxzXy5jb250YWluc0tleShjdXJyZW50U2VsZWN0aW9uKSB8fCAhZXhpc3RpbmdTZXJ2ZXJzVGFibGVfLmNvbnRhaW5zS2V5KGN1cnJlbnRTZWxlY3Rpb24pKSB7Ci0gICAgICBkaXNhYmxlT0tCdXR0b24oKTsKLSAgICAgIHNldE9LU3RhdHVzTWVzc2FnZSgpOwotICAgIH0KLSAgICAvLyBEaXNhYmxlIE9LIGJ1dHRvbiBpZiBjYXRlZ29yeSBpcyBzZWxlY3RlZCByYXRoZXIgdGhhbiBhIHNlcnZlcgotICAgIGlmIChzZXJ2ZXJTZWwubGVuZ3RoID4gMCAmJiBzZXJ2ZXJTZWxbMF0uZ2V0SXRlbUNvdW50KCkhPTApIHsKLSAgICAJZGlzYWJsZU9LQnV0dG9uKCk7Ci0gICAgfQotICAgIGVsc2UgewotICAgIAllbmFibGVPS0J1dHRvbigpOwotICAgIH0KLSAgICAKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBzZXRPS1N0YXR1c01lc3NhZ2UoKSB7Ci0gICAgbWVzc2FnZUJhbm5lcl8uc2V0VGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9ERVNDX1dTX1JVTlRJTUVfU0VMRUNUSU9OKTsKLSAgICBtZXNzYWdlQmFubmVyXy5zZXRGb3JlZ3JvdW5kKERpc3BsYXkuZ2V0Q3VycmVudCgpLmdldFN5c3RlbUNvbG9yKFNXVC5DT0xPUl9CTEFDSykpOwotICAgIGVuYWJsZU9LQnV0dG9uKCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc2V0RVJST1JTdGF0dXNNZXNzYWdlKFN0cmluZyBtZXNzYWdlKSB7Ci0gICAgbWVzc2FnZUJhbm5lcl8uc2V0VGV4dChtZXNzYWdlKTsKLSAgICBtZXNzYWdlQmFubmVyXy5zZXRGb3JlZ3JvdW5kKERpc3BsYXkuZ2V0Q3VycmVudCgpLmdldFN5c3RlbUNvbG9yKFNXVC5DT0xPUl9SRUQpKTsKLSAgICBkaXNhYmxlT0tCdXR0b24oKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBkaXNhYmxlT0tCdXR0b24oKSB7Ci0gICAgaWYgKGdldEJ1dHRvbigwKSAhPSBudWxsKQotICAgICAgZ2V0QnV0dG9uKDApLnNldEVuYWJsZWQoZmFsc2UpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGVuYWJsZU9LQnV0dG9uKCkgewotICAgIGlmIChnZXRCdXR0b24oMCkgIT0gbnVsbCkKLSAgICAgIGdldEJ1dHRvbigwKS5zZXRFbmFibGVkKHRydWUpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgb2tQcmVzc2VkKCkgewotCWlmIChsYWJlbFByb3ZpZGVyXyE9bnVsbCkKLQkgICAgbGFiZWxQcm92aWRlcl8uZGlzcG9zZSgpOwotCWlmIChleGlzdGluZ1NlcnZlcnNJY29uIT1udWxsKQotCQlleGlzdGluZ1NlcnZlcnNJY29uLmRpc3Bvc2UoKTsKLQlpZiAoc2VydmVyVHlwZXNJY29uIT1udWxsKQotCQlzZXJ2ZXJUeXBlc0ljb24uZGlzcG9zZSgpOwotCXNldFJldHVybkNvZGUoT0spOwotICAgIGNsb3NlKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBjYW5jZWxQcmVzc2VkKCkgewotCWlmIChsYWJlbFByb3ZpZGVyXyE9bnVsbCkKLQkJbGFiZWxQcm92aWRlcl8uZGlzcG9zZSgpOwotCWlmIChleGlzdGluZ1NlcnZlcnNJY29uIT1udWxsKQotCQlleGlzdGluZ1NlcnZlcnNJY29uLmRpc3Bvc2UoKTsKLQlpZiAoc2VydmVyVHlwZXNJY29uIT1udWxsKQotCQlzZXJ2ZXJUeXBlc0ljb24uZGlzcG9zZSgpOwkKLQlzZXRSZXR1cm5Db2RlKENBTkNFTCk7Ci0JY2xvc2UoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIENhbGxlZCB3aGVuIGFuIGV2ZW50IG9jY3VycyBvbiB0aGUgcGFnZS4gSGFuZGxlcyB0aGUgZXZlbnQgYW5kIHJldmFsaWRhdGVzIHRoZSBwYWdlLgotICAgKiAKLSAgICogQHBhcmFtIGV2ZW50Ci0gICAqICAgICAgICAgIFRoZSBldmVudCB0aGF0IG9jY3VyZWQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBoYW5kbGVFdmVudChFdmVudCBldmVudCkgewotICAgIGlmICghdmFsaWRhdGVPbl8pCi0gICAgICByZXR1cm47Ci0gICAgZW5hYmxlT0tCdXR0b24oKTsKLSAgICBpZiAodmlld1NlbGVjdGlvbkJ5UnVudGltZUJ1dHRvbl8gPT0gZXZlbnQud2lkZ2V0KSB7Ci0gICAgICBoYW5kbGVSdW50aW1lVmlld1NlbGVjdGlvbkV2ZW50KCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGVsc2UgaWYgKHZpZXdTZWxlY3Rpb25CeVNlcnZlckJ1dHRvbl8gPT0gZXZlbnQud2lkZ2V0KSB7Ci0gICAgICBoYW5kbGVTZXJ2ZXJWaWV3U2VsZWN0aW9uRXZlbnQoKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZWxzZSBpZiAodmlld1NlbGVjdGlvbkJ5RXhwbG9yZUJ1dHRvbl8gPT0gZXZlbnQud2lkZ2V0KSB7Ci0gICAgICBoYW5kbGVFeHBsb3JlVmlld1NlbGVjdGlvbkV2ZW50KCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGVsc2UgaWYgKHJ1bnRpbWVzTGlzdF8gPT0gZXZlbnQud2lkZ2V0KSB7Ci0gICAgICBUcmVlSXRlbVtdIHJ1bnRpbWVTZWwgPSBydW50aW1lc0xpc3RfLmdldFNlbGVjdGlvbigpOwotICAgICAgcHJvY2Vzc1J1bnRpbWVMaXN0U2VsZWN0aW9uKHJ1bnRpbWVTZWxbMF0uZ2V0VGV4dCgpKTsKLSAgICAgIHZhbGlkYXRlU2VydmVyUnVudGltZVNlbGVjdGlvbigpOwotICAgIH0KLSAgICBlbHNlIGlmIChzZXJ2ZXJMaXN0XyA9PSBldmVudC53aWRnZXQpIHsKLSAgICAgIHByb2Nlc3NTZXJ2ZXJMaXN0U2VsZWN0aW9uKCk7Ci0gICAgICB2YWxpZGF0ZVNlcnZlclJ1bnRpbWVTZWxlY3Rpb24oKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgaGFuZGxlUnVudGltZVZpZXdTZWxlY3Rpb25FdmVudCgpIHsKLSAgICBHcmlkTGF5b3V0IGdsID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBnbC5udW1Db2x1bW5zID0gMTsKLSAgICBnbC5tYWtlQ29sdW1uc0VxdWFsV2lkdGggPSB0cnVlOwotICAgIEdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCk7Ci0gICAgcHJpbWFyeUdyb3VwXy5zZXRMYXlvdXQoZ2wpOwotICAgIHByaW1hcnlHcm91cF8uc2V0TGF5b3V0RGF0YShnZCk7Ci0gICAgcnVudGltZXNHcm91cF8ubW92ZUFib3ZlKHNlcnZlcnNHcm91cF8pOwotICAgIHByaW1hcnlHcm91cF8ubGF5b3V0KCk7Ci0KLSAgICAvLyBUT0RPOiBTaG93IGFsbCBydW50aW1lcywgYW5kIG9ubHkgc2VydmVycyBzdXBwb3J0ZWQgYnkgY3VycmVudCB0eXBlIGlkCi0gIH0KLQotICAvLyAKLSAgLy8gQ2FsbGVkIGJ5IGhhbmRsZUV2ZW50KCkgd2hlbiB0aGUgdXNlciBzZWxlY3RzIHRoZSBsYXlvdXQgdG8gdmlldwotICAvLwotICBwdWJsaWMgdm9pZCBoYW5kbGVTZXJ2ZXJWaWV3U2VsZWN0aW9uRXZlbnQoKSB7Ci0gICAgR3JpZExheW91dCBnbCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgZ2wubnVtQ29sdW1ucyA9IDE7Ci0gICAgZ2wubWFrZUNvbHVtbnNFcXVhbFdpZHRoID0gdHJ1ZTsKLSAgICBHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpOwotICAgIHByaW1hcnlHcm91cF8uc2V0TGF5b3V0KGdsKTsKLSAgICBwcmltYXJ5R3JvdXBfLnNldExheW91dERhdGEoZ2QpOwotICAgIHNlcnZlcnNHcm91cF8ubW92ZUFib3ZlKHJ1bnRpbWVzR3JvdXBfKTsKLSAgICBwcmltYXJ5R3JvdXBfLmxheW91dCgpOwotICAgIAotICAgIC8vIFRPRE86IFNob3cgYWxsIHNlcnZlcnMsIGFuZCBvbmx5IHJ1bnRpbWVzIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCB0eXBlIGlkCi0gIH0KLQotICAvLyAKLSAgLy8gQ2FsbGVkIGJ5IGhhbmRsZUV2ZW50KCkgd2hlbiB0aGUgdXNlciBzZWxlY3RzIHRoZSBsYXlvdXQgdG8gdmlldwotICAvLwotICBwcml2YXRlIHZvaWQgaGFuZGxlRXhwbG9yZVZpZXdTZWxlY3Rpb25FdmVudCgpIHsKLSAgICBHcmlkTGF5b3V0IGdsOwotICAgIGdsID0gKEdyaWRMYXlvdXQpIHByaW1hcnlHcm91cF8uZ2V0TGF5b3V0KCk7Ci0gICAgZ2wubnVtQ29sdW1ucyA9IDI7Ci0gICAgZ2wubWFrZUNvbHVtbnNFcXVhbFdpZHRoID0gdHJ1ZTsKLSAgICBHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpOwotICAgIHByaW1hcnlHcm91cF8uc2V0TGF5b3V0KGdsKTsKLSAgICBwcmltYXJ5R3JvdXBfLnNldExheW91dERhdGEoZ2QpOwotICAgIHJ1bnRpbWVzR3JvdXBfLm1vdmVBYm92ZShzZXJ2ZXJzR3JvdXBfKTsKLSAgICBwcmltYXJ5R3JvdXBfLmxheW91dCgpOwotCi0gICAgLy8gVE9ETzogU2hvdyBhbGwgc2VydmVycyBhbmQgcnVudGltZXMgZnJvbSB0aGUgdHlwZSBpZAotCi0gIH0KLQotICBwcml2YXRlIHZvaWQgcHJvY2Vzc1J1bnRpbWVMaXN0U2VsZWN0aW9uKFN0cmluZyBydW50aW1lTmFtZSkgewotCi0gICAgaWYgKHNlbGVjdGlvbk1vZGVfID09IE1PREVfU0VSVklDRSkgewotCQlzZWxlY3RlZFJ1bnRpbWVfID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0UnVudGltZUJ5TGFiZWwocnVudGltZU5hbWUpOwotICAgIH0KLSAgICBlbHNlIHsKLQkJc2VsZWN0ZWRSdW50aW1lXyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFJ1bnRpbWVCeUxhYmVsKHJ1bnRpbWVOYW1lKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgcHJvY2Vzc1NlcnZlckxpc3RTZWxlY3Rpb24oKSB7Ci0gICAgU3RyaW5nIGN1cnJlbnRTZWxlY3Rpb247Ci0gICAgVHJlZUl0ZW1bXSBzZXJ2ZXJTZWwgPSBzZXJ2ZXJMaXN0Xy5nZXRTZWxlY3Rpb24oKTsKLSAgICBpZiAoc2VydmVyU2VsICE9IG51bGwgJiYgc2VydmVyU2VsLmxlbmd0aCA+IDApIHsKLSAgICAgIGN1cnJlbnRTZWxlY3Rpb24gPSBzZXJ2ZXJTZWxbMF0uZ2V0VGV4dCgpOwotICAgICAgaWYgKHNlcnZlckxhYmVsc18uY29udGFpbnNLZXkoY3VycmVudFNlbGVjdGlvbikgfHwgZXhpc3RpbmdTZXJ2ZXJzVGFibGVfLmNvbnRhaW5zS2V5KGN1cnJlbnRTZWxlY3Rpb24pKSB7Ci0gICAgICAgIGlmIChleGlzdGluZ1NlcnZlcnNUYWJsZV8uY29udGFpbnNLZXkoY3VycmVudFNlbGVjdGlvbikpIHsKLSAgICAgICAgICBzZWxlY3RlZFNlcnZlcl8gPSAoSVNlcnZlcikgZXhpc3RpbmdTZXJ2ZXJzVGFibGVfLmdldChjdXJyZW50U2VsZWN0aW9uKTsKLSAgICAgICAgICBzZWxlY3RlZFNlcnZlckxhYmVsXyA9IGN1cnJlbnRTZWxlY3Rpb247Ci0gICAgICAgICAgc2VsZWN0ZWRTZXJ2ZXJGYWN0b3J5SURfID0gc2VsZWN0ZWRTZXJ2ZXJfLmdldFNlcnZlclR5cGUoKS5nZXRJZCgpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHNlcnZlckxhYmVsc18uY29udGFpbnNLZXkoY3VycmVudFNlbGVjdGlvbikpIHsKLSAgICAgICAgICBUcmVlSXRlbSBwYXJlbnRJdGVtID0gc2VydmVyU2VsWzBdLmdldFBhcmVudEl0ZW0oKTsKLSAgICAgICAgICBpZiAocGFyZW50SXRlbSAhPSBudWxsICYmICFwYXJlbnRJdGVtLmdldFRleHQoKS5lcXVhbHNJZ25vcmVDYXNlKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9UUkVFX0VYSVNUSU5HX1NFUlZFUlMpKSB7Ci0gICAgICAgICAgICBzZWxlY3RlZFNlcnZlckxhYmVsXyA9IGN1cnJlbnRTZWxlY3Rpb247Ci0gICAgICAgICAgICBzZWxlY3RlZFNlcnZlcl8gPSBudWxsOwotICAgICAgICAgICAgc2VsZWN0ZWRTZXJ2ZXJGYWN0b3J5SURfID0gKFN0cmluZykgc2VydmVyTGFiZWxzXy5nZXQoY3VycmVudFNlbGVjdGlvbik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gY2hlY2sgaWYgaXNFeGlzdGluZ1NlcnZlciBvciBuZXcgU2VydmVyVHlwZQotICAgICAgICBUcmVlSXRlbSBwYXJlbnRJdGVtID0gc2VydmVyU2VsWzBdLmdldFBhcmVudEl0ZW0oKTsKLSAgICAgICAgaWYgKHBhcmVudEl0ZW0gIT0gbnVsbCAmJiBwYXJlbnRJdGVtLmdldFRleHQoKS5lcXVhbHNJZ25vcmVDYXNlKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9UUkVFX0VYSVNUSU5HX1NFUlZFUlMpKSB7Ci0gICAgICAgICAgc2V0SXNFeGlzdGluZ1NlcnZlcih0cnVlKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICBzZXRJc0V4aXN0aW5nU2VydmVyKGZhbHNlKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgIHNlbGVjdGVkU2VydmVyXyA9IG51bGw7Ci0gICAgICAgIHNlbGVjdGVkU2VydmVyTGFiZWxfID0gbnVsbDsKLSAgICAgICAgc2VsZWN0ZWRTZXJ2ZXJGYWN0b3J5SURfID0gbnVsbDsKLSAgICAgICAgc2V0SXNFeGlzdGluZ1NlcnZlcihmYWxzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0gICAgICAKLSAgICB9Ci0gIH0KLQotLy8gIHByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRNZXNzYWdlKFN0cmluZyBrZXkpIHsKLS8vICAgIHJldHVybiBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5nZXRNZXNzYWdlKGtleSk7Ci0vLyAgfQotCi0gIHByaXZhdGUgdm9pZCBzZXRSdW50aW1lc0dyb3VwKCkgewotICAgIHJ1bnRpbWVzTGlzdF8ucmVtb3ZlQWxsKCk7Ci0gICAgU3RyaW5nW10gcnVudGltZXMgPSBudWxsOwotCi0gICAgaWYgKHNlbGVjdGlvbk1vZGVfID09IE1PREVfU0VSVklDRSkgewotCQlydW50aW1lcyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFJ1bnRpbWVzQnlTZXJ2aWNlVHlwZSh0eXBlSWRfKTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0JICBydW50aW1lcyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFJ1bnRpbWVzQnlDbGllbnRUeXBlKHR5cGVJZF8pOwotICAgIH0KLQotICAgIC8vc29ydCB0aGUgcnVudGltZXMgYmFzZWQgb24gdGhlIHJ1bnRpbWUgbmFtZSAoYnVnIDE1MTcyMykKLSAgICBDb21wYXJhdG9yIGNvbXBhcmF0b3IgPSBuZXcgUnVudGltZU5hbWVDb21wYXJhdG9yKCk7Ci0gICAgQXJyYXlzLnNvcnQocnVudGltZXMsIGNvbXBhcmF0b3IpOwotICAgIAotICAgIFRyZWVJdGVtW10gcnVudGltZU5hbWUgPSBuZXcgVHJlZUl0ZW1bcnVudGltZXMubGVuZ3RoXTsKLQotICAgIGlmIChydW50aW1lcyAhPSBudWxsKSB7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJ1bnRpbWVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIFN0cmluZyBydW50aW1lTGFiZWwgPSBnZXRSdW50aW1lTGFiZWwocnVudGltZXNbaV0pOwotICAgICAgICBydW50aW1lTmFtZVtpXSA9IG5ldyBUcmVlSXRlbShydW50aW1lc0xpc3RfLCBTV1QuTk9ORSk7Ci0gICAgICAgIHJ1bnRpbWVOYW1lW2ldLnNldFRleHQocnVudGltZUxhYmVsKTsKLQotICAgICAgICBpZiAocnVudGltZXNbaV0uZXF1YWxzSWdub3JlQ2FzZShkZWZhdWx0UnVudGltZV8pKSB7Ci0gICAgICAgICAgcnVudGltZXNMaXN0Xy5zZXRTZWxlY3Rpb24obmV3IFRyZWVJdGVtW10geyBydW50aW1lTmFtZVtpXX0pOwotICAgICAgICAgIHNlbGVjdGVkUnVudGltZV8gPSBnZXRSdW50aW1lKHJ1bnRpbWVzW2ldKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfSAgCi0KLSAgcHJpdmF0ZSBjbGFzcyBSdW50aW1lTmFtZUNvbXBhcmF0b3IgaW1wbGVtZW50cyBDb21wYXJhdG9yCi0gIHsKLQlwdWJsaWMgUnVudGltZU5hbWVDb21wYXJhdG9yKCkKLQl7CQkKLQl9Ci0JLy9Db21wYXJlIHRvIHJ1bnRpbWUgSUQgc3RyaW5ncyBieSB0aGVpciBsYWJlbHMuICBVc2VkIGZvciBzb3J0aW5nLgotCXB1YmxpYyBpbnQgY29tcGFyZShPYmplY3QgaXRlbTEsIE9iamVjdCBpdGVtMikgewotCQl0cnkgewotCQkJU3RyaW5nIHJ1bnRpbWUxID0gKFN0cmluZylpdGVtMTsKLQkJCVN0cmluZyBydW50aW1lMiA9IChTdHJpbmcpaXRlbTI7CQkKLQkJCQotCQkJcmV0dXJuIGdldFJ1bnRpbWVMYWJlbChydW50aW1lMSkuY29tcGFyZVRvSWdub3JlQ2FzZShnZXRSdW50aW1lTGFiZWwocnVudGltZTIpKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpCi0JCXsgLy9KdXN0IGluIGNhc2Ugb2YgY2xhc3MgY2FzdCBleGNlcHRpb24gb3IgTlBFLiAgc2hvdWxkIG5ldmVyIGhhcHBlbgotCQl9CQkKLQkJcmV0dXJuIDA7Ci0JfQotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBnZXRSdW50aW1lTGFiZWwoU3RyaW5nIHR5cGUpIHsKLSAgICByZXR1cm4gZ2V0UnVudGltZSh0eXBlKS5nZXRMYWJlbCgpOwotICB9Ci0KLSAgcHJpdmF0ZSBSdW50aW1lRGVzY3JpcHRvciBnZXRSdW50aW1lKFN0cmluZyB0eXBlKSB7Ci0gICAgaWYgKHNlbGVjdGlvbk1vZGVfID09IE1PREVfU0VSVklDRSkgewotCSAgcmV0dXJuIFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFJ1bnRpbWVCeUlkKHR5cGUpOwotICAgIH0KLSAgICBlbHNlIHsKLQkgIHJldHVybiBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRSdW50aW1lQnlJZCh0eXBlKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogCi0gICAqIFNlcnZlcnNMaXN0IGNsYXNzCi0gICAqIAotICAgKiBDbGFzcyB3aGljaCBlYXNpbHkgY3JlYXRlcyB0aGUgVHJlZSBzdHJ1Y3R1cmUgYW5kIGVudHJpZXMgZm9yIGV4aXN0aW5nIHNlcnZlcnMgYW5kIHNlcnZlciB0eXBlcwotICAgKi8KLSAgcHVibGljIGNsYXNzIFNlcnZlcnNMaXN0IHsKLQotICAgIHByaXZhdGUgVHJlZUl0ZW1bXSBleGlzdGluZ1NlcnZlcnNUcmVlOwotICAgIGJvb2xlYW4gZXhpc3RpbmdTZXJ2ZXIgPSBmYWxzZTsKLQotICAgIHB1YmxpYyB2b2lkIHNldFNlcnZlclRyZWVJdGVtcyhUcmVlIHNlcnZlcnNMaXN0KSB7Ci0gICAgICB0aGlzLnNldEV4aXN0aW5nU2VydmVyc1RyZWUoc2VydmVyc0xpc3QpOwotICAgICAgdGhpcy5zZXRTZXJ2ZXJUeXBlc1RyZWUoc2VydmVyc0xpc3QpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEV4aXN0aW5nU2VydmVyc1RyZWUoVHJlZSBzZXJ2ZXJMaXN0KSB7Ci0gICAgICBTdHJpbmdbXSBzZXJ2ZXJJZHMgPSB0aGlzLmdldEFsbEV4aXN0aW5nU2VydmVycygpOwotICAgICAgZXhpc3RpbmdTZXJ2ZXJzVHJlZSA9IG5ldyBUcmVlSXRlbVsxXTsKLSAgICAgIFRyZWVJdGVtW10gZXhpc3RpbmdTZXJ2ZXJJdGVtcyA9IG5ldyBUcmVlSXRlbVtzZXJ2ZXJJZHMubGVuZ3RoXTsKLSAgICAgIGV4aXN0aW5nU2VydmVyc1RyZWVbMF0gPSBuZXcgVHJlZUl0ZW0oc2VydmVyTGlzdCwgU1dULk5PTkUpOwotICAgICAgZXhpc3RpbmdTZXJ2ZXJzVHJlZVswXS5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9UUkVFX0VYSVNUSU5HX1NFUlZFUlMpOwotICAgICAgSW1hZ2VEZXNjcmlwdG9yIGlkID0gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yKEVYSVNUSU5HX1NFUlZFUlNfSUNPTik7Ci0gICAgICBpZiAoaWQgIT0gbnVsbCkgewotICAgIAlleGlzdGluZ1NlcnZlcnNJY29uID0gaWQuY3JlYXRlSW1hZ2UoKTsKLSAgICAgICAgZXhpc3RpbmdTZXJ2ZXJzVHJlZVswXS5zZXRJbWFnZShleGlzdGluZ1NlcnZlcnNJY29uKTsKLSAgICAgIH0KLSAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgc2VydmVySWRzLmxlbmd0aDsgaysrKSB7Ci0gICAgICAgIElTZXJ2ZXJUeXBlIHNlcnZlclR5cGUgPSBTZXJ2ZXJDb3JlLmZpbmRTZXJ2ZXJUeXBlKCgoSVNlcnZlcikgZXhpc3RpbmdTZXJ2ZXJzVGFibGVfLmdldChzZXJ2ZXJJZHNba10pKS5nZXRTZXJ2ZXJUeXBlKCkuZ2V0SWQoKSk7Ci0gICAgICAgIGlmIChzZXJ2ZXJUeXBlICE9IG51bGwpIHsKLSAgICAgICAgICBleGlzdGluZ1NlcnZlckl0ZW1zW2tdID0gbmV3IFRyZWVJdGVtKGV4aXN0aW5nU2VydmVyc1RyZWVbMF0sIFNXVC5OT05FKTsKLSAgICAgICAgICBleGlzdGluZ1NlcnZlckl0ZW1zW2tdLnNldFRleHQoc2VydmVySWRzW2tdKTsKLSAgICAgICAgICBpZiAoc2VydmVySWRzW2tdLmVxdWFsc0lnbm9yZUNhc2UoZGVmYXVsdFNlcnZlcl8pICYmIGdldElzRXhpc3RpbmdTZXJ2ZXIoKSkgewotICAgICAgICAgICAgZXhpc3RpbmdTZXJ2ZXJzVHJlZVswXS5zZXRFeHBhbmRlZCh0cnVlKTsKLSAgICAgICAgICAgIHNlcnZlckxpc3Quc2V0U2VsZWN0aW9uKG5ldyBUcmVlSXRlbVtdIHsgZXhpc3RpbmdTZXJ2ZXJJdGVtc1trXX0pOwotICAgICAgICAgICAgZXhpc3RpbmdTZXJ2ZXIgPSB0cnVlOwotICAgICAgICAgICAgUnVudGltZVNlcnZlclNlbGVjdGlvbkRpYWxvZy50aGlzLnNldElzRXhpc3RpbmdTZXJ2ZXIodHJ1ZSk7Ci0gICAgICAgICAgICBzZWxlY3RlZFNlcnZlcl8gPSAoSVNlcnZlcikgZXhpc3RpbmdTZXJ2ZXJzVGFibGVfLmdldChkZWZhdWx0U2VydmVyXyk7Ci0gICAgICAgICAgICBzZWxlY3RlZFNlcnZlckxhYmVsXyA9IHNlcnZlcklkc1trXTsKLSAgICAgICAgICAgIHNlbGVjdGVkU2VydmVyRmFjdG9yeUlEXyA9IHNlbGVjdGVkU2VydmVyXy5nZXRTZXJ2ZXJUeXBlKCkuZ2V0SWQoKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZXhpc3RpbmdTZXJ2ZXJJdGVtc1trXS5zZXRJbWFnZShsYWJlbFByb3ZpZGVyXy5nZXRJbWFnZShzZXJ2ZXJUeXBlKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJUeXBlc1RyZWUoVHJlZSBzZXJ2ZXJMaXN0KSB7Ci0KLSAgICAgIFRyZWVJdGVtW10gc2VydmVyVHlwZXNUcmVlID0gbmV3IFRyZWVJdGVtWzFdOwotICAgICAgc2VydmVyVHlwZXNUcmVlWzBdID0gbmV3IFRyZWVJdGVtKHNlcnZlckxpc3QsIFNXVC5OT05FKTsKLSAgICAgIHNlcnZlclR5cGVzVHJlZVswXS5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9UUkVFX1NFUlZFUl9UWVBFUyk7Ci0gICAgICBJbWFnZURlc2NyaXB0b3IgaWQgPSBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3IoU0VSVkVSX1RZUEVTX0lDT04pOwotICAgICAgaWYgKGlkICE9IG51bGwpIHsKLSAgICAJc2VydmVyVHlwZXNJY29uID0gaWQuY3JlYXRlSW1hZ2UoKTsKLSAgICAgICAgc2VydmVyVHlwZXNUcmVlWzBdLnNldEltYWdlKHNlcnZlclR5cGVzSWNvbik7Ci0gICAgICB9Ci0gICAgICBIYXNodGFibGUgY2F0ZWdvcmllc18gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgICBIYXNodGFibGUgY2F0ZWdvcnlUcmVlSXRlbSA9IG5ldyBIYXNodGFibGUoKTsKLSAgICAgIFN0cmluZ1tdIHNlcnZlcklkcyA9IG51bGw7Ci0gICAgICAvLyBybSBTdHJpbmcgd3N0ID0gd3NlLmdldFdlYlNlcnZpY2VUeXBlKCk7Ci0gICAgICBpZiAoc2VsZWN0aW9uTW9kZV8gPT0gTU9ERV9TRVJWSUNFKSB7Ci0JCXNlcnZlcklkcyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNlcnZlckZhY3RvcnlJZHNCeVNlcnZpY2VUeXBlKHR5cGVJZF8pOwotICAgICAgfQotICAgICAgZWxzZSB7Ci0JCXNlcnZlcklkcyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldEFsbENsaWVudFNlcnZlckZhY3RvcnlJZHMoKTsKLSAgICAgIH0KLSAgICAgIC8vIHJtIHNlcnZlcklkID0KLSAgICAgIC8vIHdzc3J0UmVnaXN0cnkuZ2V0U2VydmVyRmFjdG9yeUlkc0J5VHlwZSh3c2UuZ2V0V2ViU2VydmljZVR5cGUoKSk7Ci0gICAgICBpZiAoc2VydmVySWRzID09IG51bGwpIHsKLSAgICAgICAgc2VydmVySWRzID0gZ2V0QWxsU2VydmVyVHlwZXMoKTsKLSAgICAgIH0KLSAgICAgIFRyZWVJdGVtW10gcGFyZW50ID0gbmV3IFRyZWVJdGVtW3NlcnZlcklkcy5sZW5ndGhdOwotICAgICAgVHJlZUl0ZW1bXSBpdGVtID0gbmV3IFRyZWVJdGVtW3NlcnZlcklkcy5sZW5ndGhdOwotICAgICAgaWYgKHNlcnZlcklkcyAhPSBudWxsKSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VydmVySWRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgU3RyaW5nIHNlcnZlciA9IFNlcnZlclV0aWxzLmdldEluc3RhbmNlKCkuZ2V0U2VydmVyTGFiZWxGb3JJZChzZXJ2ZXJJZHNbaV0pOwotICAgICAgICAgIGlmIChzZXJ2ZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgUnVudGltZVNlcnZlclNlbGVjdGlvbkRpYWxvZy50aGlzLnNlcnZlckxhYmVsc18ucHV0KHNlcnZlciwgc2VydmVySWRzW2ldKTsKLSAgICAgICAgICAgIElTZXJ2ZXJUeXBlIHNlcnZlclR5cGUgPSBTZXJ2ZXJDb3JlLmZpbmRTZXJ2ZXJUeXBlKHNlcnZlcklkc1tpXSk7Ci0gICAgICAgICAgICBJUnVudGltZVR5cGUgcnVudGltZVR5cGUgPSBzZXJ2ZXJUeXBlLmdldFJ1bnRpbWVUeXBlKCk7Ci0gICAgICAgICAgICBpZiAoIWNhdGVnb3JpZXNfLmNvbnRhaW5zS2V5KHNlcnZlclR5cGUpICYmIHJ1bnRpbWVUeXBlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgY2F0ZWdvcmllc18ucHV0KHNlcnZlclR5cGUsIHJ1bnRpbWVUeXBlKTsKLSAgICAgICAgICAgICAgaWYgKGNhdGVnb3J5VHJlZUl0ZW0uZ2V0KHJ1bnRpbWVUeXBlKSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGNhdGVnb3J5VGV4dCA9IHJ1bnRpbWVUeXBlLmdldE5hbWUoKTsKLSAgICAgICAgICAgICAgICBJbWFnZSBjYXRlZ29yeUltYWdlID0gbGFiZWxQcm92aWRlcl8uZ2V0SW1hZ2UocnVudGltZVR5cGUpOwotICAgICAgICAgICAgICAgIHBhcmVudFtpXSA9IG5ldyBUcmVlSXRlbShzZXJ2ZXJUeXBlc1RyZWVbMF0sIFNXVC5OT05FKTsKLSAgICAgICAgICAgICAgICBwYXJlbnRbaV0uc2V0VGV4dChjYXRlZ29yeVRleHQpOwotICAgICAgICAgICAgICAgIHBhcmVudFtpXS5zZXRJbWFnZShjYXRlZ29yeUltYWdlKTsKLSAgICAgICAgICAgICAgICBjYXRlZ29yeVRyZWVJdGVtLnB1dChydW50aW1lVHlwZSwgcGFyZW50W2ldKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBwYXJlbnRbaV0gPSAoVHJlZUl0ZW0pIGNhdGVnb3J5VHJlZUl0ZW0uZ2V0KHJ1bnRpbWVUeXBlKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBTdHJpbmcgZmFjdG9yeVRleHQgPSBzZXJ2ZXJUeXBlLmdldE5hbWUoKTsKLSAgICAgICAgICAgICAgSW1hZ2UgZmFjdG9yeUltYWdlID0gbGFiZWxQcm92aWRlcl8uZ2V0SW1hZ2Uoc2VydmVyVHlwZSk7Ci0gICAgICAgICAgICAgIGl0ZW1baV0gPSBuZXcgVHJlZUl0ZW0ocGFyZW50W2ldLCBTV1QuTk9ORSk7Ci0gICAgICAgICAgICAgIGl0ZW1baV0uc2V0VGV4dChmYWN0b3J5VGV4dCk7Ci0gICAgICAgICAgICAgIGl0ZW1baV0uc2V0SW1hZ2UoZmFjdG9yeUltYWdlKTsKLSAgICAgICAgICAgICAgaXRlbVtpXS5zZXREYXRhKHNlcnZlclR5cGUpOwotICAgICAgICAgICAgICBpZiAoZmFjdG9yeVRleHQuZXF1YWxzSWdub3JlQ2FzZShkZWZhdWx0U2VydmVyXykgJiYgIWV4aXN0aW5nU2VydmVyKSB7Ci0gICAgICAgICAgICAgICAgc2VydmVyTGlzdC5zZXRTZWxlY3Rpb24obmV3IFRyZWVJdGVtW10geyBpdGVtW2ldfSk7Ci0gICAgICAgICAgICAgICAgc2VsZWN0ZWRTZXJ2ZXJfID0gbnVsbDsKLSAgICAgICAgICAgICAgICBzZWxlY3RlZFNlcnZlckxhYmVsXyA9IGZhY3RvcnlUZXh0OwotICAgICAgICAgICAgICAgIHNlbGVjdGVkU2VydmVyRmFjdG9yeUlEXyA9IChTdHJpbmcpIHNlcnZlckxhYmVsc18uZ2V0KHNlbGVjdGVkU2VydmVyTGFiZWxfKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0IGFsbCBzZXJ2ZXJzIGluIHRoZSB3b3Jrc3BhY2UKLSAgICAgKiAKLSAgICAgKiBAcmV0dXJuIFN0cmluZ1tdIG9mIGV4aXN0aW5nIHNlcnZlciBuYW1lcwotICAgICAqLwotICAgIHByaXZhdGUgU3RyaW5nW10gZ2V0QWxsRXhpc3RpbmdTZXJ2ZXJzKCkgewotICAgICAgVmVjdG9yIHNlcnZlcklkcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIHsKLSAgICAgICAgSVNlcnZlcltdIHNlcnZlcnMgPSBTZXJ2ZXJDb3JlLmdldFNlcnZlcnMoKTsKLSAgICAgICAgaWYgKHNlcnZlcnMgIT0gbnVsbCAmJiBzZXJ2ZXJzLmxlbmd0aCE9MCkgewotICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VydmVycy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgSVNlcnZlciBzZXJ2ZXIgPSAoSVNlcnZlcikgc2VydmVyc1tpXTsKLSAgICAgICAgICAgIHNlcnZlcklkcy5hZGQoc2VydmVyLmdldE5hbWUoKSk7Ci0gICAgICAgICAgICBleGlzdGluZ1NlcnZlcnNUYWJsZV8ucHV0KHNlcnZlci5nZXROYW1lKCksIHNlcnZlcik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gKFN0cmluZ1tdKSBzZXJ2ZXJJZHMudG9BcnJheShuZXcgU3RyaW5nW3NlcnZlcklkcy5zaXplKCldKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXQgYWxsIHNlcnZlciB0eXBlcyBhdmFpbGFibGUgZm9yIGNyZWF0aW9uCi0gICAgICogCi0gICAgICogQHJldHVybiBTdHJpbmdbXSBvZiBzZXJ2ZXIgbmFtZXMKLSAgICAgKi8KLSAgICBwcml2YXRlIFN0cmluZ1tdIGdldEFsbFNlcnZlclR5cGVzKCkgewotICAgICAgVmVjdG9yIHNlcnZlclR5cGVzXyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIElTZXJ2ZXJUeXBlW10gZGVmYXVsdFNlcnZlcnNMaXN0ID0gU2VydmVyQ29yZS5nZXRTZXJ2ZXJUeXBlcygpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZWZhdWx0U2VydmVyc0xpc3QubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgSVNlcnZlclR5cGUgc2VydmVyVHlwZSA9IChJU2VydmVyVHlwZSkgZGVmYXVsdFNlcnZlcnNMaXN0W2ldOwotICAgICAgICBzZXJ2ZXJUeXBlc18uYWRkKHNlcnZlclR5cGUuZ2V0SWQoKSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gKFN0cmluZ1tdKSBzZXJ2ZXJUeXBlc18udG9BcnJheShuZXcgU3RyaW5nW3NlcnZlclR5cGVzXy5zaXplKCldKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2l6YXJkL1R5cGVTZWxlY3Rpb25GaWx0ZXIyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpemFyZC9UeXBlU2VsZWN0aW9uRmlsdGVyMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTkwMDdkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2l6YXJkL1R5cGVTZWxlY3Rpb25GaWx0ZXIyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNjA2ICAgMTA1MDQ1IG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbiAgICAgICAgICAKLSAqIDIwMDcwMzI4ICAgMTcyMzM5IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JQ29udGFpbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5CZWFuTGluazsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuU2VydmljZUltcGxCZWFuOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydC5XZWJTZXJ2aWNlSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydC5XZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlU2NlbmFyaW87Ci0KLQotcHVibGljIGNsYXNzIFR5cGVTZWxlY3Rpb25GaWx0ZXIyCi17Ci0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRXZWJTZXJ2aWNlVHlwZUJ5SW5pdGlhbFNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBpbml0aWFsU2VsZWN0aW9uLCBBcnJheUxpc3Qgd2ViU2VydmljZVR5cGVMaXN0KQotICB7Ci0gICAgICAgIAotICAgIEFycmF5TGlzdCBzdXBwb3J0ZWRUeXBlcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBpZiAoaW5pdGlhbFNlbGVjdGlvbiAhPSBudWxsICYmIGluaXRpYWxTZWxlY3Rpb24uc2l6ZSgpID09IDEpCi0gICAgewotICAgICAgCi0gICAgICAvLyBDaGVjayBmb3IgbnVsbCBpbml0aWFsIHNlbGVjdGlvbgotICAgICAgT2JqZWN0IGluaXRpYWxPYmplY3QgPSBpbml0aWFsU2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOwotICAgICAgaWYgKGluaXRpYWxPYmplY3QgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0gICAgICAvLyBNYXRjaCB1cCByZXNvdXJjZSB0eXBlIG1ldGFkYXRhIHdpdGggaW5pdGlhbCBzZWxlY3Rpb24KLSAgICAgIEl0ZXJhdG9yIGl0ZXIgPSB3ZWJTZXJ2aWNlVHlwZUxpc3QuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHdzdCA9IChTdHJpbmcpaXRlci5uZXh0KCk7Ci0gICAgICAgIFN0cmluZyBzY2VuYXJpbyA9IHdzdC5zdWJzdHJpbmcoMCx3c3QuaW5kZXhPZigiLyIpKTsKLSAgICAgICAgU3RyaW5nIGltcGxJZCA9IHdzdC5zdWJzdHJpbmcod3N0LmluZGV4T2YoIi8iKSsxKTsgICAgICAgIAotICAgICAgICAvL0lXZWJTZXJ2aWNlVHlwZSB3c3QgPSAoSVdlYlNlcnZpY2VUeXBlKWl0ZXIubmV4dCgpOwotICAgICAgICAvL1N0cmluZyB0eXBlSWQgPSAoU3RyaW5nKXdzdC5nZXRJZCgpOwotICAgICAgICBpZiAoc2NlbmFyaW8uZXF1YWxzKFN0cmluZy52YWx1ZU9mKFdlYlNlcnZpY2VTY2VuYXJpby5CT1RUT01VUCkpICYmICFzdXBwb3J0ZWRUeXBlcy5jb250YWlucyh3c3QpKQotICAgICAgICB7Ci0KLSAgICAgICAgICAKLSAgICAgICAgICBXZWJTZXJ2aWNlSW1wbCB3c2ltcGwgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRXZWJTZXJ2aWNlSW1wbEJ5SWQoaW1wbElkKTsKLSAgICAgICAgICBTdHJpbmdbXSByZXNvdXJjZVR5cGVzID0gd3NpbXBsLmdldFJlc291cmNlVHlwZU1ldGFkYXRhKCk7Ci0gICAgICAgICAgZm9yIChpbnQgaT0wOyBpPHJlc291cmNlVHlwZXMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKHJlc291cmNlVHlwZXNbaV0hPW51bGwpCi0gICAgICAgICAgICB7ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgaWYgKChpbml0aWFsT2JqZWN0LmdldENsYXNzKCkuZ2V0TmFtZSgpKS5lbmRzV2l0aChyZXNvdXJjZVR5cGVzW2ldKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gbnVsbDsKLSAgICAgICAgICAgICAgICBJUmVzb3VyY2UgcmVzb3VyY2UgPSBudWxsOwotCi0gICAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgICAgeyAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgcmVzb3VyY2UgPSBSZXNvdXJjZVV0aWxzLmdldFJlc291cmNlRnJvbVNlbGVjdGlvbihpbml0aWFsT2JqZWN0KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2F0Y2goIENvcmVFeGNlcHRpb24gZXhjICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICByZXNvdXJjZSA9IG51bGw7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHJlc291cmNlIGluc3RhbmNlb2YgSUNvbnRhaW5lcikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBuYW1lID0gaW5pdGlhbE9iamVjdC5nZXRDbGFzcygpLmdldE5hbWUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiggcmVzb3VyY2UgIT0gbnVsbCApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgbmFtZSA9IHJlc291cmNlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIG5hbWUgPSBpbml0aWFsT2JqZWN0LmdldENsYXNzKCkuZ2V0TmFtZSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBTdHJpbmdbXSBleHRlbnNpb25zID0gd3NpbXBsLmdldEV4dGVuc2lvbk1ldGFkYXRhKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGFjY2VwdHNOYW1lKG5hbWUsIGV4dGVuc2lvbnMpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIHN1cHBvcnRlZFR5cGVzLmFkZCh3c3QpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgCi0gICAgICAgICAgLy9UT0RPOiBCdWcgMTc5NzUxIC0gTmVlZCB0byBtYWtlIGNoZWNraW5nIGZvciB0eXBlcyByZWNvZ25pemVkIGFzIGJvdHRvbS11cCB0byBiZSBtb3JlIGV4dGVuc2libGUgICAgICAgICAKLSAgICAgICAgICAKLSAgICAgICAgICBpZiAoc3VwcG9ydGVkVHlwZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIAkgIGlmIChpbml0aWFsT2JqZWN0IGluc3RhbmNlb2YgQmVhbkxpbmsgfHwgaW5pdGlhbE9iamVjdCBpbnN0YW5jZW9mIFNlcnZpY2VJbXBsQmVhbikgewotICAgICAgICAJCSAgc3VwcG9ydGVkVHlwZXMuYWRkKHdzdCk7Ci0gICAgICAgIAkgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIAotICAgICAgLy9JZiBubyB3c0ltcGxzIGhhdmUgYWNjZXB0ZWQgdGhpcyBzZWxlY3Rpb24sIGNoZWNrIGlmIHRoaXMgaXMgV1NETC4gSWYgaXQgaXMsCi0gICAgICAvL2FkZCB0aGUgdG9wLWRvd24gSmF2YSBzZXJ2aWNlIHR5cGUgdG8gdGhlIGxpc3QuCi0gICAgICBpZiAoc3VwcG9ydGVkVHlwZXMuaXNFbXB0eSgpKQotICAgICAgewotICAgICAgICBTdHJpbmdbXSByZXNvdXJjZVR5cGVzID0geyJGaWxlIiwgIklSZXNvdXJjZSIsICJTdHJpbmciLCAiU2VydmljZUltcGwiLCAiU2VydmljZVJlZkltcGwiLCAiV1NETFJlc291cmNlSW1wbCJ9OwotICAgICAgICBmb3IgKGludCBpPTA7IGk8cmVzb3VyY2VUeXBlcy5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgIGlmIChyZXNvdXJjZVR5cGVzW2ldIT1udWxsKQotICAgICAgICAgIHsgICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKChpbml0aWFsT2JqZWN0LmdldENsYXNzKCkuZ2V0TmFtZSgpKS5lbmRzV2l0aChyZXNvdXJjZVR5cGVzW2ldKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSBudWxsOwotICAgICAgICAgICAgICBJUmVzb3VyY2UgcmVzb3VyY2UgPSBudWxsOwotCi0gICAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgcmVzb3VyY2UgPSBSZXNvdXJjZVV0aWxzLmdldFJlc291cmNlRnJvbVNlbGVjdGlvbihpbml0aWFsT2JqZWN0KTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBjYXRjaCggQ29yZUV4Y2VwdGlvbiBleGMgKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmVzb3VyY2UgPSBudWxsOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgaWYgKHJlc291cmNlIGluc3RhbmNlb2YgSUNvbnRhaW5lcikKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG5hbWUgPSBpbml0aWFsT2JqZWN0LmdldENsYXNzKCkuZ2V0TmFtZSgpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGVsc2UgaWYoIHJlc291cmNlICE9IG51bGwgKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbmFtZSA9IHJlc291cmNlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBlbHNlIGlmIChpbml0aWFsT2JqZWN0IGluc3RhbmNlb2YgU3RyaW5nKQotICAgICAgICAgICAgICB7IC8vdGhlIGluaXRpYWxPYmplY3QgY291bGQgYmUgYSBwYXRoIG5hbWUgdGhhdCBpcyBhIHN0cmluZwotICAgICAgICAgICAgICAgIC8vYnVnIDEwNTA0NQotICAgICAgICAgICAgCW5hbWUgPSAoU3RyaW5nKWluaXRpYWxPYmplY3Q7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbmFtZSA9IGluaXRpYWxPYmplY3QuZ2V0Q2xhc3MoKS5nZXROYW1lKCk7Ci0gICAgICAgICAgICAgIH0gICAgCi0gICAgICAgICAgICAgIAotICAgICAgICAgICAgICBTdHJpbmdbXSBleHRlbnNpb25zID0geyIud3NkbCIsICIud3NpbCIsICIuaHRtbCIsICIuU2VydmljZUltcGwiLCAiLlNlcnZpY2VSZWZJbXBsIiwgIi5XU0RMUmVzb3VyY2VJbXBsIn07Ci0gICAgICAgICAgICAgIGlmIChhY2NlcHRzTmFtZShuYW1lLCBleHRlbnNpb25zKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN0cmluZ0J1ZmZlciBlbnRyeWJ1ZmYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgZW50cnlidWZmLmFwcGVuZChTdHJpbmcudmFsdWVPZihXZWJTZXJ2aWNlU2NlbmFyaW8uVE9QRE9XTikpOwotICAgICAgICAgICAgICAgIGVudHJ5YnVmZi5hcHBlbmQoIi8iKTsKLSAgICAgICAgICAgICAgICBlbnRyeWJ1ZmYuYXBwZW5kKCJvcmcuZWNsaXBzZS5qc3Qud3Mud3NJbXBsLmphdmEiKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgZW50cnkgPSBlbnRyeWJ1ZmYudG9TdHJpbmcoKTsgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3VwcG9ydGVkVHlwZXMuYWRkKGVudHJ5KTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgfQotICAgICAgICB9ICAgICAgCi0gICAgICB9Ci0gICAgICAKLSAgICB9ICAgIAotICAKLQotICAgIAotICAgIGlmIChzdXBwb3J0ZWRUeXBlcy5pc0VtcHR5KCkpCi0gICAgewotICAgICAgLy9JdCdzIG5vdCBhIHJlZ2lzdGVyZWQgaW1wbGVtZW50YXRpb24gYW5kIGl0cyBub3QgV1NETCBzbyByZXR1cm4gbnVsbDsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmV0dXJuIChTdHJpbmdbXSlzdXBwb3J0ZWRUeXBlcy50b0FycmF5KG5ldyBTdHJpbmdbMF0pOwotICAgIH0KLSAgfQotICAvLwotICAvLyBDaGVja3MgaWYgdGhlIGdpdmVuIG5hbWUgaXMgYWNjZXB0YWJsZSBiYXNlZCB1cG9uIGl0cyBleHRlbnNpb24KLSAgLy8KLSAgcHJpdmF0ZSBib29sZWFuIGFjY2VwdHNOYW1lICggU3RyaW5nIG5hbWUsIFN0cmluZ1tdIGV4dGVuc2lvbnMpCi0gIHsKLSAgICAvL1JldHVybiB0cnVlIGlmICJhbGwiIGV4dGVuc2lvbnMgYXJlIHN1cHBvcnRlZC4KLQotICAgIGlmIChleHRlbnNpb25zWzBdIT1udWxsKQotICAgIHsKLSAgICAgIGlmIChleHRlbnNpb25zWzBdLmVxdWFscygiYWxsIikpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgIH0KLQotICAgIGZvciAoaW50IGk9MDsgaTxleHRlbnNpb25zLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGlmIChleHRlbnNpb25zW2ldIT1udWxsKQotICAgICAgewotICAgICAgICBpZiAobmFtZS5lbmRzV2l0aChleHRlbnNpb25zW2ldKSkKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aXphcmQvVHlwZVNlbGVjdGlvbk1ldGFkYXRhLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpemFyZC9UeXBlU2VsZWN0aW9uTWV0YWRhdGEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODI3NWFjYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpemFyZC9UeXBlU2VsZWN0aW9uTWV0YWRhdGEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIxNiAgIDEyNzEzOCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkOwotCi1pbXBvcnQgY29tLmlibS5pY3UudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci0KLQotICAvLwotICAvLyBUaGlzIGNsYXNzIGhvbGRzIHRoZSBzZXQgb2YgZGlzdGluZ3Vpc2hpbmcgZmFjdG9ycyBpbiBkZXRlcm1pbmluZyAKLSAgLy8gdGhlIGRlZmF1bHQgV2ViIHNlcnZpY2UgdHlwZS4gIFRoZSBkZWZhdWx0IFdlYiBTZXJ2aWNlIHR5cGUgd2lsbCBiZSBkZXRlcm1pbmVkCi0gIC8vIGJ5IHBhdHRlcm4gbWF0Y2hpbmcgdGhlIGluaXRpYWwgc2VsZWN0aW9uIHdpdGggdGhlIHN1cHBvcnRlZCBleHRlbnNpb24gCi0gIC8vIGFuZCB0aGUgcmVzb3VyY2UgdHlwZSBtZXRhZGF0YSBzcGVjaWZpZWQgaW4gdGhlIG1hbmlmZXN0IGZpbGUuCi0gIC8vCi0gIHB1YmxpYyBjbGFzcyBUeXBlU2VsZWN0aW9uTWV0YWRhdGEKLSAgewotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAgIHB1YmxpYyBTdHJpbmdbXSBleHRlbnNpb25NZXRhOwotICAgIHB1YmxpYyBTdHJpbmdbXSByZXNvdXJjZVR5cGVNZXRhOwotCi0gICAgcHVibGljIFR5cGVTZWxlY3Rpb25NZXRhZGF0YShTdHJpbmcgZXh0ZW5zaW9uTUQsIFN0cmluZyByZXNvdXJjZVR5cGVNRCkKLSAgICB7Ci0gICAgICBzZXRFeHRlbnNpb25NZXRhZGF0YShleHRlbnNpb25NRCk7Ci0gICAgICBzZXRSZXNvdXJjZVR5cGVNZXRhZGF0YShyZXNvdXJjZVR5cGVNRCk7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIHNldEV4dGVuc2lvbk1ldGFkYXRhKFN0cmluZyBleHRlbnNpb25NZXRhZGF0YSkKLSAgICB7Ci0gICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGV4dGVuc2lvbk1ldGFkYXRhKTsKLSAgICAgIGV4dGVuc2lvbk1ldGEgPSBuZXcgU3RyaW5nW3N0LmNvdW50VG9rZW5zKCldOwotICAgICAgaW50IGk9MDsKLSAgICAgIHdoaWxlIChzdC5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIGV4dGVuID0gKFN0cmluZylzdC5uZXh0VG9rZW4oKTsKLSAgICAgICAgaWYgKGV4dGVuIT1udWxsKQotICAgICAgICB7Ci0gICAgICAgICAgZXh0ZW5zaW9uTWV0YVtpXT1leHRlbjsKLSAgICAgICAgfQotICAgICAgICBpKys7Ci0gICAgICB9Ci0KLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nW10gZ2V0RXh0ZW5zaW9uTWV0YWRhdGEoKQotICAgIHsKLSAgICAgIHJldHVybiBleHRlbnNpb25NZXRhOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBzZXRSZXNvdXJjZVR5cGVNZXRhZGF0YShTdHJpbmcgcmVzb3VyY2VUeXBlTWV0YWRhdGEpCi0gICAgewotICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihyZXNvdXJjZVR5cGVNZXRhZGF0YSk7Ci0gICAgICByZXNvdXJjZVR5cGVNZXRhID0gbmV3IFN0cmluZ1tzdC5jb3VudFRva2VucygpXTsKLSAgICAgIGludCBpPTA7Ci0gICAgICB3aGlsZSAoc3QuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyByZXNvdXJjZVR5cGUgPSAoU3RyaW5nKXN0Lm5leHRUb2tlbigpOwotICAgICAgICBpZiAocmVzb3VyY2VUeXBlIT1udWxsKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzb3VyY2VUeXBlTWV0YVtpXT1yZXNvdXJjZVR5cGU7Ci0gICAgICAgIH0KLSAgICAgICAgaSsrOwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRSZXNvdXJjZVR5cGVNZXRhZGF0YSgpCi0gICAgewotICAgICAgcmV0dXJuIHJlc291cmNlVHlwZU1ldGE7Ci0gICAgfQotCi0gIH0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aXphcmQvV2ViU2VydmljZUluZm8uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2l6YXJkL1dlYlNlcnZpY2VJbmZvLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0YmM1NTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aXphcmQvV2ViU2VydmljZUluZm8uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkOwotCi0KLS8qKgotKiBUaGlzIHR5cGUgaXMgdXNlZCB0byBob2xkIHVzZXIgb3IgY2FsY3VsYXRlZCAKLSogZGF0YSB0byBiZSB1c2UgYnkgZmluc2loIHRhc2tzCi0qLwotcHVibGljIGludGVyZmFjZSBXZWJTZXJ2aWNlSW5mbwotewotCi19Ci0KLQotCi0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2l6YXJkL3VkZGkvUHVibGljVURESVJlZ2lzdHJ5TlRUQ29tbS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aXphcmQvdWRkaS9QdWJsaWNVRERJUmVnaXN0cnlOVFRDb21tLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5M2VmYmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aXphcmQvdWRkaS9QdWJsaWNVRERJUmVnaXN0cnlOVFRDb21tLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLnVkZGk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyLlBsdWdpbk1lc3NhZ2VzOwotCi1wdWJsaWMgY2xhc3MgUHVibGljVURESVJlZ2lzdHJ5TlRUQ29tbSBpbXBsZW1lbnRzIFB1YmxpY1VERElSZWdpc3RyeVR5cGUKLXsKLQotICAgIC8vIENvcHlyaWdodAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAyLiI7Ci0KLSAgICBwdWJsaWMgUHVibGljVURESVJlZ2lzdHJ5TlRUQ29tbSgpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0gICAgICAgIHJldHVybiBQbHVnaW5NZXNzYWdlcy5QVUJMSUNVRERJUkVHSVNUUllUWVBFX05BTUVfTlRUQ09NTTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldElucXVpcnlVUkwoKSB7Ci0gICAgICAgIHJldHVybiAiaHR0cDovL3d3dy51ZGRpLm5lLmpwL3Vici9pbnF1aXJ5YXBpIjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFB1Ymxpc2hVUkwoKSB7Ci0gICAgICAgIHJldHVybiAiaHR0cHM6Ly93d3cudWRkaS5uZS5qcC91YnIvcHVibGlzaGFwaSI7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRSZWdpc3RyYXRpb25VUkwoKSB7Ci0gICAgICAgIHJldHVybiAiaHR0cDovL3d3dy5udHQuY29tL3VkZGkvIjsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2l6YXJkL3VkZGkvUHVibGljVURESVJlZ2lzdHJ5U0FQLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpemFyZC91ZGRpL1B1YmxpY1VERElSZWdpc3RyeVNBUC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzJmNGZhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2l6YXJkL3VkZGkvUHVibGljVURESVJlZ2lzdHJ5U0FQLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLnVkZGk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyLlBsdWdpbk1lc3NhZ2VzOwotCi1wdWJsaWMgY2xhc3MgUHVibGljVURESVJlZ2lzdHJ5U0FQIGltcGxlbWVudHMgUHVibGljVURESVJlZ2lzdHJ5VHlwZQotewotCi0gICAgLy8gQ29weXJpZ2h0Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDIuIjsKLQotICAgIHB1YmxpYyBQdWJsaWNVRERJUmVnaXN0cnlTQVAoKSB7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotICAgICAgICByZXR1cm4gUGx1Z2luTWVzc2FnZXMuUFVCTElDVURESVJFR0lTVFJZVFlQRV9OQU1FX1NBUDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldElucXVpcnlVUkwoKSB7Ci0gICAgICAgIHJldHVybiAiaHR0cDovL3VkZGkuc2FwLmNvbS9VRERJL2FwaS9pbnF1aXJ5LyI7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRQdWJsaXNoVVJMKCkgewotICAgICAgICByZXR1cm4gImh0dHBzOi8vdWRkaS5zYXAuY29tL1VEREkvYXBpL3B1Ymxpc2gvIjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFJlZ2lzdHJhdGlvblVSTCgpIHsKLSAgICAgICAgcmV0dXJuICJodHRwOi8vdWRkaS5zYXAuY29tLyI7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpemFyZC91ZGRpL1B1YmxpY1VERElSZWdpc3RyeVNBUFRlc3QuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2l6YXJkL3VkZGkvUHVibGljVURESVJlZ2lzdHJ5U0FQVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NjI2N2Q2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2l6YXJkL3VkZGkvUHVibGljVURESVJlZ2lzdHJ5U0FQVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC51ZGRpOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci5QbHVnaW5NZXNzYWdlczsKLQotcHVibGljIGNsYXNzIFB1YmxpY1VERElSZWdpc3RyeVNBUFRlc3QgaW1wbGVtZW50cyBQdWJsaWNVRERJUmVnaXN0cnlUeXBlCi17Ci0KLSAgICAvLyBDb3B5cmlnaHQKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMi4iOwotCi0gICAgcHVibGljIFB1YmxpY1VERElSZWdpc3RyeVNBUFRlc3QoKSB7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotICAgICAgICByZXR1cm4gUGx1Z2luTWVzc2FnZXMuUFVCTElDVURESVJFR0lTVFJZVFlQRV9OQU1FX1NBUF9URVNUOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0SW5xdWlyeVVSTCgpIHsKLSAgICAgICAgcmV0dXJuICJodHRwOi8vdWRkaXRlc3Quc2FwLmNvbS9VRERJL2FwaS9pbnF1aXJ5LyI7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRQdWJsaXNoVVJMKCkgewotICAgICAgICByZXR1cm4gImh0dHBzOi8vdWRkaXRlc3Quc2FwLmNvbS9VRERJL2FwaS9wdWJsaXNoLyI7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRSZWdpc3RyYXRpb25VUkwoKSB7Ci0gICAgICAgIHJldHVybiAiaHR0cDovL3VkZGl0ZXN0LnNhcC5jb20vIjsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd2l6YXJkL3VkZGkvUHVibGljVURESVJlZ2lzdHJ5VHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aXphcmQvdWRkaS9QdWJsaWNVRERJUmVnaXN0cnlUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0ZDllNjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aXphcmQvdWRkaS9QdWJsaWNVRERJUmVnaXN0cnlUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC51ZGRpOwotCi1wdWJsaWMgaW50ZXJmYWNlIFB1YmxpY1VERElSZWdpc3RyeVR5cGUKLXsKLQotICAgIC8vIENvcHlyaWdodAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAyLiI7Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKTsKLSAgICBwdWJsaWMgU3RyaW5nIGdldElucXVpcnlVUkwoKTsKLSAgICBwdWJsaWMgU3RyaW5nIGdldFB1Ymxpc2hVUkwoKTsKLSAgICBwdWJsaWMgU3RyaW5nIGdldFJlZ2lzdHJhdGlvblVSTCgpOwotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpemFyZC91ZGRpL1B1YmxpY1VERElSZWdpc3RyeVhNZXRob2RzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dpemFyZC91ZGRpL1B1YmxpY1VERElSZWdpc3RyeVhNZXRob2RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzYmFjZjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93aXphcmQvdWRkaS9QdWJsaWNVRERJUmVnaXN0cnlYTWV0aG9kcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC51ZGRpOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci5QbHVnaW5NZXNzYWdlczsKLQotcHVibGljIGNsYXNzIFB1YmxpY1VERElSZWdpc3RyeVhNZXRob2RzIGltcGxlbWVudHMgUHVibGljVURESVJlZ2lzdHJ5VHlwZQotewotCi0gICAgLy8gQ29weXJpZ2h0Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDIuIjsKLQotICAgIHB1YmxpYyBQdWJsaWNVRERJUmVnaXN0cnlYTWV0aG9kcygpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0gICAgICAgIHJldHVybiBQbHVnaW5NZXNzYWdlcy5QVUJMSUNVRERJUkVHSVNUUllUWVBFX05BTUVfWE1FVEhPRFM7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRJbnF1aXJ5VVJMKCkgewotICAgICAgICAvL3JldHVybiAiaHR0cDovL3VkZGkueG1ldGhvZHMubmV0L2lucXVpcmUiOwotICAgICAgICByZXR1cm4gImh0dHA6Ly91ZGRpLnhtZXRob2RzLm5ldC9pbnF1aXJlMiI7Ci0gICAgfQotCi0gICAgLy8gUmVhZC1vbmx5IHJlZ2lzdHJ5LiBUaGUgcHVibGlzaCBhbmQgcmVnaXN0cmF0aW9uIFVSTHMgZG9uJ3QgZXhpc3QuCi0gICAgcHVibGljIFN0cmluZyBnZXRQdWJsaXNoVVJMKCkgewotICAgICAgICByZXR1cm4gImh0dHBzOi8vdWRkaS54bWV0aG9kcy5uZXQvcHVibGlzaDIiOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0UmVnaXN0cmF0aW9uVVJMKCkgewotICAgICAgICByZXR1cm4gImh0dHA6Ly93d3cueG1ldGhvZHMubmV0L3ZlMi9SZWdpc3Rlci5wbz9ldmVudD1yZWdpc3Rlck9yZyI7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dzaWwvQWRkV1NETFRvV1NJTFdyYXBwZXJDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dzaWwvQWRkV1NETFRvV1NJTFdyYXBwZXJDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhNTc4NzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c2lsL0FkZFdTRExUb1dTSUxXcmFwcGVyQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzaWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NpbC5BZGRXU0RMVG9XU0lMQ29tbWFuZDsKLQotCi0KLXB1YmxpYyBjbGFzcyBBZGRXU0RMVG9XU0lMV3JhcHBlckNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotICBwcml2YXRlIEFkZFdTRExUb1dTSUxDb21tYW5kIGNvbW1hbmQ7Ci0gIHByaXZhdGUgQXJndW1lbnRzIGFyZ3M7Ci0KLSAgcHVibGljIEFkZFdTRExUb1dTSUxXcmFwcGVyQ29tbWFuZCgpCi0gIHsKLSAgfQotCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0gICAgSUVudmlyb25tZW50IGVudiA9IGdldEVudmlyb25tZW50KCk7Ci0gICAgCi0gICAgaWYgKGNvbW1hbmQgPT0gbnVsbCkKLSAgICAgIGNvbW1hbmQgPSBuZXcgQWRkV1NETFRvV1NJTENvbW1hbmQoKTsKLSAgICBpZiAoIWFyZ3MuaXNFbXB0eSgpKQotICAgIHsKLSAgICAgIGNvbW1hbmQuc2V0QXJndW1lbnRzKGFyZ3MuZ2V0U3RyaW5nQXJndW1lbnRzKCkpOwotICAgICAgY29tbWFuZC5zZXRXV1dBdXRoZW50aWNhdGlvbkhhbmRsZXIobmV3IERpYWxvZ1dXV0F1dGhlbnRpY2F0aW9uKFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0U2hlbGwoKSkpOwotICAgICAgY29tbWFuZC5zZXRFbnZpcm9ubWVudCggZW52ICk7Ci0gICAgICByZXR1cm4gY29tbWFuZC5leGVjdXRlKCBudWxsLCBudWxsKTsKLSAgICB9Ci0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLSAgLyoqCi0gICAqIEBwYXJhbSBhcmdzIFRoZSBhcmdzIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEFyZ3MoQXJndW1lbnRzIGFyZ3MpCi0gIHsKLSAgICB0aGlzLmFyZ3MgPSBhcmdzOwotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBjb21tYW5kIFRoZSBjb21tYW5kIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldENvbW1hbmQoQWRkV1NETFRvV1NJTENvbW1hbmQgY29tbWFuZCkKLSAgewotICAgIHRoaXMuY29tbWFuZCA9IGNvbW1hbmQ7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c2lsL0FyZ3VtZW50cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c2lsL0FyZ3VtZW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTE3N2M1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NpbC9Bcmd1bWVudHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NpbDsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLXB1YmxpYyBjbGFzcyBBcmd1bWVudHMKLXsKLSAgcHJpdmF0ZSBWZWN0b3IgYXJnc187Ci0KLSAgcHVibGljIEFyZ3VtZW50cygpCi0gIHsKLSAgICBhcmdzXyA9IG5ldyBWZWN0b3IoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZChTdHJpbmcga2V5LCBPYmplY3QgdmFsdWUpCi0gIHsKLSAgICBhcmdzXy5hZGQoa2V5KTsKLSAgICBpZiAodmFsdWUgIT0gbnVsbCkKLSAgICAgIGFyZ3NfLmFkZCh2YWx1ZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZW1vdmUoU3RyaW5nIGtleSkKLSAgewotICAgIGludCBpbmRleCA9IGFyZ3NfLmluZGV4T2Yoa2V5KTsKLSAgICBpZiAoaW5kZXggPj0gMCkKLSAgICB7Ci0gICAgICBhcmdzXy5yZW1vdmUoaW5kZXgpOwotICAgICAgYXJnc18ucmVtb3ZlKGluZGV4KzEpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBPYmplY3QgZ2V0KFN0cmluZyBrZXkpCi0gIHsKLSAgICBpbnQgaW5kZXggPSBhcmdzXy5pbmRleE9mKGtleSk7Ci0gICAgaWYgKGluZGV4ID49IDApCi0gICAgICByZXR1cm4gYXJnc18uZ2V0KGluZGV4KzEpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIHZvaWQgY2xlYXIoKQotICB7Ci0gICAgYXJnc18uY2xlYXIoKTsKLSAgfQotCi0gIHB1YmxpYyBPYmplY3RbXSBnZXRBcmd1bWVudHMoKQotICB7Ci0gICAgT2JqZWN0W10gYXJncyA9IG5ldyBPYmplY3RbYXJnc18uc2l6ZSgpXTsKLSAgICBhcmdzXy5jb3B5SW50byhhcmdzKTsKLSAgICByZXR1cm4gYXJnczsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRTdHJpbmdBcmd1bWVudHMoKQotICB7Ci0gICAgU3RyaW5nW10gYXJncyA9IG5ldyBTdHJpbmdbYXJnc18uc2l6ZSgpXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspCi0gICAgICBhcmdzW2ldID0gYXJnc18uZ2V0KGkpLnRvU3RyaW5nKCk7Ci0gICAgcmV0dXJuIGFyZ3M7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc0VtcHR5KCkKLSAgewotICAgIHJldHVybiBhcmdzXy5pc0VtcHR5KCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NpbC9EaWFsb2dXV1dBdXRoZW50aWNhdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c2lsL0RpYWxvZ1dXV0F1dGhlbnRpY2F0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwMDc1MGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c2lsL0RpYWxvZ1dXV0F1dGhlbnRpY2F0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzaWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5wbHVnaW4uV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldXV0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XV1dBdXRoZW50aWNhdGlvbkhhbmRsZXI7Ci0KLQotcHVibGljIGNsYXNzIERpYWxvZ1dXV0F1dGhlbnRpY2F0aW9uIGV4dGVuZHMgRGlhbG9nIGltcGxlbWVudHMgV1dXQXV0aGVudGljYXRpb25IYW5kbGVyCi17Ci0KLSAgLypDT05URVhUX0lEIERCQVMwMDAxIGZvciB0aGUgSFRUUCBiYXNpYyBhdXRoZW50aWNhdGlvbiB1c2VyIG5hbWUqLwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBJTkZPUE9QX0RCQVNfVVNFUk5BTUUgPSBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5JRCArICIuREJBUzAwMDEiOwotCi0gIC8qQ09OVEVYVF9JRCBEQkFTMDAwMiBmb3IgdGhlIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb24gcGFzc3dvcmQqLwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBJTkZPUE9QX0RCQVNfUEFTU1dPUkQgPSBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5JRCArICIuREJBUzAwMDIiOwotCi0gIHByaXZhdGUgU3RyaW5nIHVzZXJuYW1lU3RyaW5nXzsKLSAgcHJpdmF0ZSBTdHJpbmcgcGFzc3dvcmRTdHJpbmdfOwotCi0gIHByaXZhdGUgVGV4dCB1c2VybmFtZV87Ci0gIHByaXZhdGUgVGV4dCBwYXNzd29yZF87Ci0KLSAgcHJpdmF0ZSBXV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbiB3d3dhZV87Ci0KLSAgcHVibGljIERpYWxvZ1dXV0F1dGhlbnRpY2F0aW9uKFNoZWxsIHNoZWxsKQotICB7Ci0gICAgc3VwZXIoc2hlbGwpOwotICAgIHVzZXJuYW1lU3RyaW5nXyA9IG51bGw7Ci0gICAgcGFzc3dvcmRTdHJpbmdfID0gbnVsbDsKLSAgICB3d3dhZV8gPSBudWxsOwotICB9Ci0KLSAgLyoqCi0gICogQ2FsbGVkIHdoZW4gdGhlIENhbmNlbCBidXR0b24gaXMgcHJlc3NlZC4KLSAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgY2FuY2VsUHJlc3NlZCgpCi0gIHsKLSAgICB1c2VybmFtZVN0cmluZ18gPSBudWxsOwotICAgIHBhc3N3b3JkU3RyaW5nXyA9IG51bGw7Ci0gICAgc3VwZXIuY2FuY2VsUHJlc3NlZCgpOwotICB9Ci0KLSAgLyoqCi0gICogQ2FsbGVkIHdoZW4gdGhlIE9LIGJ1dHRvbiBpcyBwcmVzc2VkLgotICAqLwotICBwcm90ZWN0ZWQgdm9pZCBva1ByZXNzZWQoKQotICB7Ci0gICAgU3RyaW5nIHVzZXJuYW1lU3RyaW5nID0gdXNlcm5hbWVfLmdldFRleHQoKTsKLSAgICB1c2VybmFtZVN0cmluZ18gPSAodXNlcm5hbWVTdHJpbmcubGVuZ3RoKCkgPiAwKSA/IHVzZXJuYW1lU3RyaW5nIDogbnVsbDsKLSAgICBTdHJpbmcgcGFzc3dvcmRTdHJpbmcgPSBwYXNzd29yZF8uZ2V0VGV4dCgpOwotICAgIHBhc3N3b3JkU3RyaW5nXyA9IChwYXNzd29yZFN0cmluZy5sZW5ndGgoKSA+IDApID8gcGFzc3dvcmRTdHJpbmcgOiBudWxsOwotICAgIHNldFJldHVybkNvZGUoRGlhbG9nLk9LKTsKLSAgICBzdXBlci5va1ByZXNzZWQoKTsKLSAgfQotCi0gIC8qKgotICAqIFNlZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdyNjb25maWd1cmVTaGVsbH0uCi0gICogQHBhcmFtIHNoZWxsIFRoZSBzaGVsbC4KLSAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgY29uZmlndXJlU2hlbGwoU2hlbGwgc2hlbGwpCi0gIHsKLSAgICBzdXBlci5jb25maWd1cmVTaGVsbChzaGVsbCk7Ci0gICAgc2hlbGwuc2V0VGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuRElBTE9HX1RJVExFX0hUVFBfQkFTSUNfQVVUSCk7Ci0gIH0KLQotICAvKiogCi0gICogQ3JlYXRlcyB0aGUgZGlhbG9nIGFyZWEuCi0gICogQHBhcmFtIHBhcmVudCBUaGUgcGFyZW50IGNvbXBvc2l0ZS4KLSAgKiBAcmV0dXJuIFRoZSBjb250cm9sIGFyZWEuCi0gICovCi0gIHByb3RlY3RlZCBDb250cm9sIGNyZWF0ZURpYWxvZ0FyZWEoQ29tcG9zaXRlIHBhcmVudCkKLSAgewotICAgIENvbXBvc2l0ZSBjb21wb3NpdGUgPSAoQ29tcG9zaXRlKXN1cGVyLmNyZWF0ZURpYWxvZ0FyZWEocGFyZW50KTsKLSAgICBHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwgfCBHcmlkRGF0YS5HUkFCX0hPUklaT05UQUwgfCBHcmlkRGF0YS5WRVJUSUNBTF9BTElHTl9GSUxMIHwgR3JpZERhdGEuR1JBQl9WRVJUSUNBTCk7Ci0gICAgZ2Qud2lkdGhIaW50ID0gNDAwOwotICAgIGdkLmdyYWJFeGNlc3NWZXJ0aWNhbFNwYWNlID0gdHJ1ZTsKLSAgICBnZC5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKLSAgICBjb21wb3NpdGUuc2V0TGF5b3V0RGF0YShnZCk7Ci0gICAgR3JpZExheW91dCBnbCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgZ2wubnVtQ29sdW1ucyA9IDI7Ci0gICAgZ2wudmVydGljYWxTcGFjaW5nID0gMTU7Ci0gICAgY29tcG9zaXRlLnNldExheW91dChnbCk7Ci0KLSAgICBMYWJlbCBsYWJlbCA9IG5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5XUkFQKTsKLSAgICBsYWJlbC5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9VUkwpOwotICAgIGxhYmVsLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCkpOwotCi0gICAgbGFiZWwgPSBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuV1JBUCk7Ci0gICAgbGFiZWwuc2V0VGV4dCh3d3dhZV8uZ2V0VVJMKCkpOwotICAgIGxhYmVsLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCkpOwotCi0gICAgbGFiZWwgPSBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuV1JBUCk7Ci0gICAgbGFiZWwuc2V0VGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfSFRUUF9CQVNJQ19BVVRIX1VTRVJOQU1FKTsKLSAgICBsYWJlbC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwpKTsKLQotICAgIHVzZXJuYW1lXyA9IG5ldyBUZXh0KGNvbXBvc2l0ZSwgU1dULkJPUkRFUik7Ci0gICAgdXNlcm5hbWVfLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCkpOwotICAgIHVzZXJuYW1lXy5zZXRUb29sVGlwVGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9IVFRQX0JBU0lDX0FVVEhfVVNFUk5BTUUpOwotICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAodXNlcm5hbWVfLCBJTkZPUE9QX0RCQVNfVVNFUk5BTUUpOwotCi0gICAgbGFiZWwgPSBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuV1JBUCk7Ci0gICAgbGFiZWwuc2V0VGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfSFRUUF9CQVNJQ19BVVRIX1BBU1NXT1JEKTsKLSAgICBsYWJlbC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwpKTsKLQotICAgIHBhc3N3b3JkXyA9IG5ldyBUZXh0KGNvbXBvc2l0ZSwgU1dULkJPUkRFUik7Ci0gICAgcGFzc3dvcmRfLnNldEVjaG9DaGFyKCcqJyk7Ci0gICAgcGFzc3dvcmRfLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCkpOwotICAgIHBhc3N3b3JkXy5zZXRUb29sVGlwVGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9IVFRQX0JBU0lDX0FVVEhfUEFTU1dPUkQpOwotICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAodXNlcm5hbWVfLCBJTkZPUE9QX0RCQVNfUEFTU1dPUkQpOwotCi0gICAgcmV0dXJuIGNvbXBvc2l0ZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGhhbmRsZVdXV0F1dGhlbnRpY2F0aW9uKFdXV0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uIHd3d2FlKQotICB7Ci0gICAgdXNlcm5hbWVTdHJpbmdfID0gbnVsbDsKLSAgICBwYXNzd29yZFN0cmluZ18gPSBudWxsOwotICAgIHd3d2FlXyA9IHd3d2FlOwotICAgIG9wZW4oKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VXNlcm5hbWUoKQotICB7Ci0gICAgcmV0dXJuIHVzZXJuYW1lU3RyaW5nXzsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UGFzc3dvcmQoKQotICB7Ci0gICAgcmV0dXJuIHBhc3N3b3JkU3RyaW5nXzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c2lsL1RhYmxlVmlld2VyRWRpdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dzaWwvVGFibGVWaWV3ZXJFZGl0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzhhNDVmYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dzaWwvVGFibGVWaWV3ZXJFZGl0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUyNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NpbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkNvbHVtbldlaWdodERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlckxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZENvbnRlbnRQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRhYmxlTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UYWJsZUxheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLlRhYmxlRWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuS2V5RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5LZXlMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vdXNlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb3VzZUxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlRyYXZlcnNlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5UcmF2ZXJzZUxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUmVjdGFuZ2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGVDb2x1bW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGVJdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLQotCi1wdWJsaWMgY2xhc3MgVGFibGVWaWV3ZXJFZGl0b3IgZXh0ZW5kcyBDb21wb3NpdGUKLXsKLSAgcHJpdmF0ZSBpbnQgREVGQVVMVF9UQUJMRV9IRUlHSFRfSElOVCA9IDEwMDsKLSAgcHJpdmF0ZSBpbnQgREVGQVVMVF9DT0xVTU5fV0lEVEggPSA4MDsKLQotICBwcml2YXRlIFN0cmluZ1tdIGNvbHVtbnNfOwotICBwcml2YXRlIFRhYmxlVmlld2VyIHRhYmxlVmlld2VyXzsKLSAgcHJpdmF0ZSBUYWJsZSB0YWJsZV87Ci0gIHByaXZhdGUgVGFibGVFZGl0b3IgZWRpdG9yXzsKLSAgcHJpdmF0ZSBUYWJsZUVkaXRvckxpc3RlbmVyIHRhYmxlRWRpdG9yTGlzdGVuZXJfOwotICBwcml2YXRlIFRleHQgdGV4dF87Ci0gIHByaXZhdGUgQnV0dG9uIGFkZF87Ci0gIHByaXZhdGUgQnV0dG9uIHJlbW92ZV87Ci0KLSAgcHJpdmF0ZSBMaXN0IHZhbHVlc187Ci0gIHByaXZhdGUgT2JqZWN0IGRlZmF1bHRWYWx1ZV87Ci0KLSAgcHVibGljIFRhYmxlVmlld2VyRWRpdG9yKENvbXBvc2l0ZSBwYXJlbnQsIFN0cmluZ1tdIGNvbHVtbnMsIExpc3QgaW5pdFZhbHVlcywgT2JqZWN0IGRlZmF1bHRWYWx1ZSkKLSAgewotICAgIHN1cGVyKHBhcmVudCwgU1dULk5PTkUpOwotICAgIGNvbHVtbnNfID0gY29sdW1uczsKLSAgICB2YWx1ZXNfID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGlmIChpbml0VmFsdWVzICE9IG51bGwgJiYgaW5pdFZhbHVlcy5zaXplKCkgPiAwKQotICAgICAgdmFsdWVzXy5hZGRBbGwoaW5pdFZhbHVlcyk7Ci0gICAgZGVmYXVsdFZhbHVlXyA9IChkZWZhdWx0VmFsdWUgIT0gbnVsbCkgPyBkZWZhdWx0VmFsdWUgOiBuZXcgU3RyaW5nKCIiKTsKLSAgICBjcmVhdGVQYXJ0Q29udHJvbCh0aGlzKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBjcmVhdGVQYXJ0Q29udHJvbChDb21wb3NpdGUgcGFyZW50KQotICB7Ci0gICAgR3JpZExheW91dCBnbCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgZ2wubWFyZ2luSGVpZ2h0ID0gMDsKLSAgICBnbC5tYXJnaW5XaWR0aCA9IDA7Ci0gICAgc2V0TGF5b3V0KGdsKTsKLSAgICBzZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwpKTsKLQotICAgIENvbXBvc2l0ZSBjb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotICAgIGdsID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBnbC5tYXJnaW5IZWlnaHQgPSAwOwotICAgIGdsLm1hcmdpbldpZHRoID0gMDsKLSAgICBjb21wb3NpdGUuc2V0TGF5b3V0KGdsKTsKLSAgICBjb21wb3NpdGUuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMKSk7Ci0KLSAgICB0YWJsZV8gPSBuZXcgVGFibGUoY29tcG9zaXRlLCBTV1QuU0lOR0xFIHwgU1dULkZVTExfU0VMRUNUSU9OIHwgU1dULkJPUkRFUik7Ci0gICAgR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKTsKLSAgICBnZC5oZWlnaHRIaW50ID0gREVGQVVMVF9UQUJMRV9IRUlHSFRfSElOVDsKLSAgICB0YWJsZV8uc2V0TGF5b3V0RGF0YShnZCk7Ci0gICAgdGFibGVfLnNldEhlYWRlclZpc2libGUodHJ1ZSk7Ci0gICAgdGFibGVfLnNldExpbmVzVmlzaWJsZSh0cnVlKTsKLSAgICBUYWJsZUxheW91dCB0YWJsZUxheW91dCA9IG5ldyBUYWJsZUxheW91dCgpOwotICAgIGludCBtYXhXaWR0aCA9IERFRkFVTFRfQ09MVU1OX1dJRFRIOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29sdW1uc18ubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgVGFibGVDb2x1bW4gdGFibGVDb2x1bW4gPSBuZXcgVGFibGVDb2x1bW4odGFibGVfLCBTV1QuTk9ORSk7Ci0gICAgICB0YWJsZUNvbHVtbi5zZXRUZXh0KGNvbHVtbnNfW2ldKTsKLSAgICAgIHRhYmxlQ29sdW1uLnBhY2soKTsKLSAgICAgIGludCB0YWJsZUNvbHVtbldpZHRoID0gTWF0aC5tYXgoREVGQVVMVF9DT0xVTU5fV0lEVEgsIHRhYmxlQ29sdW1uLmdldFdpZHRoKCkpOwotICAgICAgbWF4V2lkdGggPSBNYXRoLm1heChtYXhXaWR0aCwgdGFibGVDb2x1bW5XaWR0aCk7Ci0gICAgICBDb2x1bW5XZWlnaHREYXRhIGNvbHVtbkRhdGEgPSBuZXcgQ29sdW1uV2VpZ2h0RGF0YSh0YWJsZUNvbHVtbldpZHRoLCB0YWJsZUNvbHVtbldpZHRoLCB0cnVlKTsKLSAgICAgIHRhYmxlTGF5b3V0LmFkZENvbHVtbkRhdGEoY29sdW1uRGF0YSk7Ci0gICAgfQotICAgIHRhYmxlXy5zZXRMYXlvdXQodGFibGVMYXlvdXQpOwotICAgIC8vIGluaXRpYWxpemUgdGhlIHRhYmxlIGVkaXRvcgotICAgIGVkaXRvcl8gPSBuZXcgVGFibGVFZGl0b3IodGFibGVfKTsKLSAgICAvLyBUaGUgZWRpdG9yIG11c3QgaGF2ZSB0aGUgc2FtZSBzaXplIGFzIHRoZSBjZWxsIGFuZCBtdXN0Ci0gICAgLy8gbm90IGJlIGFueSBzbWFsbGVyIHRoYW4gNTAgcGl4ZWxzLgotICAgIGVkaXRvcl8uaG9yaXpvbnRhbEFsaWdubWVudCA9IFNXVC5MRUZUOwotICAgIGVkaXRvcl8uZ3JhYkhvcml6b250YWwgPSB0cnVlOwotICAgIGVkaXRvcl8ubWluaW11bVdpZHRoID0gbWF4V2lkdGg7Ci0gICAgdGFibGVFZGl0b3JMaXN0ZW5lcl8gPSBuZXcgVGFibGVFZGl0b3JMaXN0ZW5lcigpOwotICAgIHRhYmxlXy5hZGRNb3VzZUxpc3RlbmVyKHRhYmxlRWRpdG9yTGlzdGVuZXJfKTsKLSAgICB0YWJsZVZpZXdlcl8gPSBuZXcgVGFibGVWaWV3ZXIodGFibGVfKTsKLSAgICB0YWJsZVZpZXdlcl8uZ2V0Q29udHJvbCgpLmFkZEtleUxpc3RlbmVyKAotICAgICAgbmV3IEtleUxpc3RlbmVyKCkKLSAgICAgIHsKLSAgICAgICAgcHVibGljIHZvaWQga2V5UHJlc3NlZChLZXlFdmVudCBlKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gRGVsCi0gICAgICAgICAgaWYgKCgoaW50KWUuY2hhcmFjdGVyKSA9PSAxMjcpIAotICAgICAgICAgICAgaGFuZGxlRGVsZXRlS2V5UHJlc3NlZCgpOwotICAgICAgICAgIC8vIEVudGVyIG9yIHNwYWNlCi0gICAgICAgICAgaWYgKCgoaW50KWUuY2hhcmFjdGVyKSA9PSAxMyB8fCAoKGludCllLmNoYXJhY3RlcikgPT0gMzIpCi0gICAgICAgICAgICB0YWJsZUVkaXRvckxpc3RlbmVyXy5lZGl0U2VsZWN0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcHVibGljIHZvaWQga2V5UmVsZWFzZWQoS2V5RXZlbnQgZSkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICB9Ci0gICAgKTsKLSAgICB0YWJsZVZpZXdlcl8uc2V0Q29udGVudFByb3ZpZGVyKG5ldyBMaXN0Q29udGVudFByb3ZpZGVyKCkpOwotICAgIHRhYmxlVmlld2VyXy5zZXRMYWJlbFByb3ZpZGVyKG5ldyBMaXN0TGFiZWxQcm92aWRlcigpKTsKLSAgICB0YWJsZVZpZXdlcl8uc2V0SW5wdXQodmFsdWVzXyk7Ci0gICAgdGFibGVWaWV3ZXJfLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigKLSAgICAgIG5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkKLSAgICAgIHsKLSAgICAgICAgcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpCi0gICAgICAgIHsKLSAgICAgICAgICBlbmFibGVSZW1vdmUodHJ1ZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICApOwotCi0gICAgQ29tcG9zaXRlIGJ1dHRvbkNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUoY29tcG9zaXRlLCBTV1QuTk9ORSk7Ci0gICAgZ2wgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGdsLm51bUNvbHVtbnMgPSAyOwotICAgIGdsLm1ha2VDb2x1bW5zRXF1YWxXaWR0aCA9IHRydWU7Ci0gICAgYnV0dG9uQ29tcG9zaXRlLnNldExheW91dChnbCk7Ci0gICAgYnV0dG9uQ29tcG9zaXRlLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkdSQUJfSE9SSVpPTlRBTCB8IEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fQkVHSU5OSU5HKSk7Ci0KLSAgICBhZGRfID0gbmV3IEJ1dHRvbihidXR0b25Db21wb3NpdGUsIFNXVC5QVVNIKTsKLSAgICBhZGRfLnNldFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX0FERCk7Ci0gICAgYWRkXy5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwpKTsKLSAgICBhZGRfLmFkZFNlbGVjdGlvbkxpc3RlbmVyKAotICAgICAgbmV3IFNlbGVjdGlvbkxpc3RlbmVyKCkKLSAgICAgIHsKLSAgICAgICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZlbnQpCi0gICAgICAgIHsKLSAgICAgICAgICBoYW5kbGVBZGRCdXR0b25TZWxlY3RlZChldmVudCk7Ci0gICAgICAgIH0KLSAgICAgICAgcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICApOwotCi0gICAgcmVtb3ZlXyA9IG5ldyBCdXR0b24oYnV0dG9uQ29tcG9zaXRlLCBTV1QuUFVTSCk7Ci0gICAgcmVtb3ZlXy5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9SRU1PVkUpOwotICAgIHJlbW92ZV8uc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMKSk7Ci0gICAgcmVtb3ZlXy5hZGRTZWxlY3Rpb25MaXN0ZW5lcigKLSAgICAgIG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpCi0gICAgICB7Ci0gICAgICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KQotICAgICAgICB7Ci0gICAgICAgICAgaGFuZGxlUmVtb3ZlQnV0dG9uU2VsZWN0ZWQoZXZlbnQpOwotICAgICAgICB9Ci0gICAgICAgIHB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICB9Ci0gICAgKTsKLSAgICBlbmFibGVSZW1vdmUoZmFsc2UpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGVuYWJsZVJlbW92ZShib29sZWFuIGVuYWJsZWQpCi0gIHsKLSAgICByZW1vdmVfLnNldEVuYWJsZWQoZW5hYmxlZCAmJiAhdGFibGVWaWV3ZXJfLmdldFNlbGVjdGlvbigpLmlzRW1wdHkoKSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgaGFuZGxlQWRkQnV0dG9uU2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZlbnQpCi0gIHsKLSAgICB2YWx1ZXNfLmFkZChkZWZhdWx0VmFsdWVfKTsKLSAgICByZWZyZXNoKCk7Ci0gICAgc2V0U2VsZWN0aW9uQXNPYmplY3QodmFsdWVzXy5nZXQodGFibGVfLmdldEl0ZW1Db3VudCgpLTEpKTsKLSAgICB0YWJsZUVkaXRvckxpc3RlbmVyXy5lZGl0U2VsZWN0aW9uKCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgaGFuZGxlUmVtb3ZlQnV0dG9uU2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZlbnQpCi0gIHsKLSAgICBoYW5kbGVEZWxldGVLZXlQcmVzc2VkKCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgaGFuZGxlRGVsZXRlS2V5UHJlc3NlZCgpCi0gIHsKLSAgICBpbnRlcm5hbERpc3Bvc2UoKTsKLSAgICBJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IHRhYmxlVmlld2VyXy5nZXRTZWxlY3Rpb24oKTsKLSAgICBpZiAoc2VsZWN0aW9uICE9IG51bGwgJiYgIXNlbGVjdGlvbi5pc0VtcHR5KCkgJiYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSkKLSAgICB7Ci0gICAgICBpbnQgc2VsZWN0aW9uSW5kZXggPSB0YWJsZV8uZ2V0U2VsZWN0aW9uSW5kZXgoKTsKLSAgICAgIGludCBzZWxlY3Rpb25Db3VudCA9IHRhYmxlXy5nZXRJdGVtQ291bnQoKTsKLSAgICAgIHZhbHVlc18ucmVtb3ZlKHNlbGVjdGlvbkluZGV4KTsKLSAgICAgIGlmIChzZWxlY3Rpb25JbmRleCA8IHNlbGVjdGlvbkNvdW50LTEpCi0gICAgICAgIHNldFNlbGVjdGlvbkFzT2JqZWN0KHZhbHVlc18uZ2V0KHNlbGVjdGlvbkluZGV4KSk7Ci0gICAgICBlbHNlIGlmIChzZWxlY3Rpb25Db3VudCAtMiA+PSAwKQotICAgICAgICBzZXRTZWxlY3Rpb25Bc09iamVjdCh2YWx1ZXNfLmdldChzZWxlY3Rpb25Db3VudC0yKSk7Ci0gICAgICByZWZyZXNoKCk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGludGVybmFsUmVmcmVzaCgpCi0gIHsKLSAgICAvLyBzeW5jaHJvbml6ZSB0ZXh0IGZpZWxkLCBwcmV2aW91c2x5IHNlbGVjdGVkIHRhYmxlIGNlbGwgYW5kIG1vZGVsIChpbnB1dE9iamVjdCkKLSAgICBpZiAodGV4dF8gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBUYWJsZUl0ZW0gb2xkVGFibGVJdGVtID0gZWRpdG9yXy5nZXRJdGVtKCk7Ci0gICAgICBpbnQgb2xkQ29sdW1uSW5kZXggPSBlZGl0b3JfLmdldENvbHVtbigpOwotICAgICAgaWYgKG9sZFRhYmxlSXRlbSAhPSBudWxsICYmIG9sZENvbHVtbkluZGV4ID49IDAgJiYgb2xkQ29sdW1uSW5kZXggPCBjb2x1bW5zXy5sZW5ndGgpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBvbGRUZXh0ID0gdGV4dF8uZ2V0VGV4dCgpOwotICAgICAgICBvbGRUYWJsZUl0ZW0uc2V0VGV4dChvbGRDb2x1bW5JbmRleCwgb2xkVGV4dCk7Ci0gICAgICAgIGludCBvbGRSb3dJbmRleCA9IHRhYmxlXy5pbmRleE9mKG9sZFRhYmxlSXRlbSk7Ci0gICAgICAgIHZhbHVlc18uc2V0KG9sZFJvd0luZGV4LCBvbGRUZXh0KTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc2V0U2VsZWN0aW9uQXNPYmplY3QoT2JqZWN0IG9iamVjdCkKLSAgewotICAgIHRhYmxlVmlld2VyXy5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24ob2JqZWN0KSwgdHJ1ZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRUb29sVGlwVGV4dChTdHJpbmcgc3RyaW5nKQotICB7Ci0gICAgdGFibGVfLnNldFRvb2xUaXBUZXh0KHN0cmluZyk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRJbmZvcG9wKFN0cmluZyBzdHJpbmcpCi0gIHsKLSAgCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAodGFibGVfLCBzdHJpbmcpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRJbnB1dChMaXN0IGxpc3QpCi0gIHsKLSAgICB2YWx1ZXNfLmNsZWFyKCk7Ci0gICAgdmFsdWVzXy5hZGRBbGwobGlzdCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZWZyZXNoKCkKLSAgewotICAgIGludGVybmFsUmVmcmVzaCgpOwotICAgIHRhYmxlVmlld2VyXy5yZWZyZXNoKCk7Ci0gIH0KLQotICBwdWJsaWMgVGFibGVJdGVtW10gZ2V0SXRlbXMoKQotICB7Ci0gICAgaW50ZXJuYWxSZWZyZXNoKCk7Ci0gICAgcmV0dXJuIHRhYmxlXy5nZXRJdGVtcygpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RW5hYmxlZChib29sZWFuIGVuYWJsZWQpCi0gIHsKLSAgICBzdXBlci5zZXRFbmFibGVkKGVuYWJsZWQpOwotICAgIGFkZF8uc2V0RW5hYmxlZChlbmFibGVkKTsKLSAgICBlbmFibGVSZW1vdmUoZW5hYmxlZCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkKLSAgewotICAgIHN1cGVyLmRpc3Bvc2UoKTsKLSAgICBpbnRlcm5hbERpc3Bvc2UoKTsKLSAgICBpZiAoZWRpdG9yXyAhPSBudWxsKQotICAgICAgZWRpdG9yXy5kaXNwb3NlKCk7Ci0gICAgaWYgKHRhYmxlXyAhPSBudWxsKQotICAgICAgdGFibGVfLmRpc3Bvc2UoKTsKLSAgICBpZiAoYWRkXyAhPSBudWxsKQotICAgICAgYWRkXy5kaXNwb3NlKCk7Ci0gICAgaWYgKHJlbW92ZV8gIT0gbnVsbCkKLSAgICAgIHJlbW92ZV8uZGlzcG9zZSgpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGludGVybmFsRGlzcG9zZSgpCi0gIHsKLSAgICBpZiAodGV4dF8gIT0gbnVsbCkKLSAgICAgIHRleHRfLmRpc3Bvc2UoKTsKLSAgICB0ZXh0XyA9IG51bGw7Ci0gIH0KLQotICBwcm90ZWN0ZWQgY2xhc3MgVGFibGVFZGl0b3JMaXN0ZW5lciBpbXBsZW1lbnRzIE1vdXNlTGlzdGVuZXIKLSAgewotICAgIHByaXZhdGUgaW50IGN1cnJTZWxlY3Rpb25JbmRleF87Ci0gICAgcHJpdmF0ZSBpbnQgZWRpdFJvd187Ci0gICAgcHJpdmF0ZSBpbnQgZWRpdENvbHVtbl87Ci0KLSAgICBwdWJsaWMgVGFibGVFZGl0b3JMaXN0ZW5lcigpCi0gICAgewotICAgICAgc3VwZXIoKTsKLSAgICAgIGN1cnJTZWxlY3Rpb25JbmRleF8gPSAtMTsKLSAgICAgIGVkaXRSb3dfID0gLTE7Ci0gICAgICBlZGl0Q29sdW1uXyA9IC0xOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIG1vdXNlRG91YmxlQ2xpY2soTW91c2VFdmVudCBlKQotICAgIHsKLSAgICAgIG1vdXNlRG93bihlKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBtb3VzZURvd24oTW91c2VFdmVudCBlKQotICAgIHsKLSAgICAgIC8vIHJlZnJlc2ggdGFibGUKLSAgICAgIGludGVybmFsUmVmcmVzaCgpOwotICAgICAgLy8gQ2xlYW4gdXAgcHJldmlvdXMgdGV4dCBlZGl0b3IgY29udHJvbAotICAgICAgaW50ZXJuYWxEaXNwb3NlKCk7Ci0gICAgICAvLyB1cGRhdGUgdGFibGUKLSAgICAgIGlmICh0YWJsZV8uaXNGb2N1c0NvbnRyb2woKSkKLSAgICAgIHsKLSAgICAgICAgaW50IHNlbGVjdGVkUm93SW5kZXggPSBnZXRTZWxlY3RlZFJvdyh0YWJsZV8sIGUueSk7Ci0gICAgICAgIGlmIChjdXJyU2VsZWN0aW9uSW5kZXhfICE9IC0xICYmIHNlbGVjdGVkUm93SW5kZXggIT0gLTEgJiYgY3VyclNlbGVjdGlvbkluZGV4XyA9PSBzZWxlY3RlZFJvd0luZGV4KQotICAgICAgICB7Ci0gICAgICAgICAgVGFibGVJdGVtIHRhYmxlSXRlbSA9IHRhYmxlXy5nZXRJdGVtKHNlbGVjdGVkUm93SW5kZXgpOwotICAgICAgICAgIGludCBzZWxlY3RlZENvbHVtbkluZGV4ID0gZ2V0U2VsZWN0ZWRDb2x1bW4odGFibGVJdGVtLCBlLngsIGUueSk7Ci0gICAgICAgICAgaWYgKHNlbGVjdGVkQ29sdW1uSW5kZXggIT0gLTEgJiYgKHRleHRfID09IG51bGwgfHwgdGV4dF8uaXNEaXNwb3NlZCgpIHx8IHNlbGVjdGVkQ29sdW1uSW5kZXggIT0gZWRpdG9yXy5nZXRDb2x1bW4oKSkpCi0gICAgICAgICAgICBlZGl0U2VsZWN0aW9uKHNlbGVjdGVkUm93SW5kZXgsIHNlbGVjdGVkQ29sdW1uSW5kZXgpOwotICAgICAgICB9Ci0gICAgICAgIGN1cnJTZWxlY3Rpb25JbmRleF8gPSBzZWxlY3RlZFJvd0luZGV4OwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIG1vdXNlVXAoTW91c2VFdmVudCBlKQotICAgIHsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGludCBnZXRTZWxlY3RlZFJvdyhUYWJsZSB0YWJsZSwgaW50IHkpCi0gICAgewotICAgICAgVGFibGVJdGVtW10gdGFibGVJdGVtcyA9IHRhYmxlLmdldEl0ZW1zKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRhYmxlSXRlbXMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIFJlY3RhbmdsZSByZWN0YW5nbGUgPSB0YWJsZUl0ZW1zW2ldLmdldEJvdW5kcygwKTsKLSAgICAgICAgaWYgKHJlY3RhbmdsZSAhPSBudWxsICYmIHkgPj0gcmVjdGFuZ2xlLnkgJiYgeSA8IChyZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQpKQotICAgICAgICAgIHJldHVybiBpOwotICAgICAgfQotICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIHByaXZhdGUgaW50IGdldFNlbGVjdGVkQ29sdW1uKFRhYmxlSXRlbSB0YWJsZUl0ZW0sIGludCB4LCBpbnQgeSkKLSAgICB7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbHVtbnNfLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICBpZiAodGFibGVJdGVtLmdldEJvdW5kcyhpKS5jb250YWlucyh4LCB5KSkKLSAgICAgICAgICByZXR1cm4gaTsKLSAgICAgIH0KLSAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgZWRpdFNlbGVjdGlvbihpbnQgcm93LCBpbnQgY29sdW1uKQotICAgIHsKLSAgICAgIGVkaXRSb3dfID0gcm93OwotICAgICAgZWRpdENvbHVtbl8gPSBjb2x1bW47Ci0gICAgICBUYWJsZUl0ZW0gdGFibGVJdGVtID0gdGFibGVfLmdldEl0ZW0ocm93KTsKLSAgICAgIC8vIFNldHVwIGFkYXB0ZXIgZm9yIHRoZSBuZXcgc2VsZWN0aW9uCi0gICAgICB0ZXh0XyA9IG5ldyBUZXh0KHRhYmxlXywgU1dULk5PTkUpOwotICAgICAgU3RyaW5nIHRleHQgPSB0YWJsZUl0ZW0uZ2V0VGV4dChjb2x1bW4pOwotICAgICAgdGV4dF8uc2V0VGV4dCgodGV4dCAhPSBudWxsKSA/IHRleHQgOiAiIik7Ci0gICAgICB0ZXh0Xy5hZGRLZXlMaXN0ZW5lcihuZXcgS2V5TGlzdGVuZXIoKQotICAgICAgICB7Ci0gICAgICAgICAgcHVibGljIHZvaWQga2V5UHJlc3NlZChLZXlFdmVudCBlKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIEVzYwotICAgICAgICAgICAgaWYgKCgoaW50KWUuY2hhcmFjdGVyKSA9PSAyNykKLSAgICAgICAgICAgICAgY2FuY2VsU2VsZWN0aW9uKCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIHB1YmxpYyB2b2lkIGtleVJlbGVhc2VkKEtleUV2ZW50IGUpCi0gICAgICAgICAgewotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgKTsKLSAgICAgIHRleHRfLmFkZFRyYXZlcnNlTGlzdGVuZXIobmV3IFRyYXZlcnNlTGlzdGVuZXIoKQotICAgICAgICB7Ci0gICAgICAgICAgcHVibGljIHZvaWQga2V5VHJhdmVyc2VkKFRyYXZlcnNlRXZlbnQgZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoZS5kZXRhaWwgPT0gU1dULlRSQVZFUlNFX1RBQl9ORVhUKQotICAgICAgICAgICAgICB0cmF2ZXJzZVRhYk5leHQoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGUuZGV0YWlsID09IFNXVC5UUkFWRVJTRV9UQUJfUFJFVklPVVMpCi0gICAgICAgICAgICAgIHRyYXZlcnNlVGFiUHJldmlvdXMoKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICk7Ci0gICAgICBlZGl0b3JfLnNldEVkaXRvcih0ZXh0XywgdGFibGVJdGVtLCBjb2x1bW4pOwotICAgICAgdGV4dF8uc2V0Rm9jdXMoKTsKLSAgICAgIHRleHRfLnNlbGVjdEFsbCgpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIHRyYXZlcnNlVGFiTmV4dCgpCi0gICAgewotICAgICAgaW50ZXJuYWxSZWZyZXNoKCk7Ci0gICAgICBpbnRlcm5hbERpc3Bvc2UoKTsKLSAgICAgIGlmICghKGVkaXRSb3dfID09IHRhYmxlXy5nZXRJdGVtcygpLmxlbmd0aC0xICYmIGVkaXRDb2x1bW5fID09IGNvbHVtbnNfLmxlbmd0aC0xKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKGVkaXRDb2x1bW5fIDwgY29sdW1uc18ubGVuZ3RoLTEpCi0gICAgICAgICAgZWRpdENvbHVtbl8rKzsKLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgZWRpdENvbHVtbl8gPSAwOwotICAgICAgICAgIGVkaXRSb3dfKys7Ci0gICAgICAgICAgdGFibGVfLnNlbGVjdChlZGl0Um93Xyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWRpdFNlbGVjdGlvbihlZGl0Um93XywgZWRpdENvbHVtbl8pOwotICAgICAgfQotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIHRyYXZlcnNlVGFiUHJldmlvdXMoKQotICAgIHsKLSAgICAgIGludGVybmFsUmVmcmVzaCgpOwotICAgICAgaW50ZXJuYWxEaXNwb3NlKCk7Ci0gICAgICBpZiAoIShlZGl0Um93XyA9PSAwICYmIGVkaXRDb2x1bW5fID09IDApKQotICAgICAgewotICAgICAgICBpZiAoZWRpdENvbHVtbl8gPiAwKQotICAgICAgICAgIGVkaXRDb2x1bW5fLS07Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIGVkaXRDb2x1bW5fID0gY29sdW1uc18ubGVuZ3RoLTE7Ci0gICAgICAgICAgZWRpdFJvd18tLTsKLSAgICAgICAgICB0YWJsZV8uc2VsZWN0KGVkaXRSb3dfKTsKLSAgICAgICAgfQotICAgICAgICBlZGl0U2VsZWN0aW9uKGVkaXRSb3dfLCBlZGl0Q29sdW1uXyk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgY2FuY2VsU2VsZWN0aW9uKCkKLSAgICB7Ci0gICAgICBpbnRlcm5hbERpc3Bvc2UoKTsKLSAgICAgIGludGVybmFsUmVmcmVzaCgpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGVkaXRTZWxlY3Rpb24oKQotICAgIHsKLSAgICAgIGludCBzZWxlY3RlZFJvd0luZGV4ID0gdGFibGVfLmdldFNlbGVjdGlvbkluZGV4KCk7Ci0gICAgICBpZiAoc2VsZWN0ZWRSb3dJbmRleCAhPSAtMSAmJiBjb2x1bW5zXy5sZW5ndGggPiAwKQotICAgICAgewotICAgICAgICAvLyByZWZyZXNoIHRhYmxlCi0gICAgICAgIGludGVybmFsUmVmcmVzaCgpOwotICAgICAgICAvLyBDbGVhbiB1cCBhbnkgcHJldmlvdXMgZWRpdG9yIGNvbnRyb2wKLSAgICAgICAgaW50ZXJuYWxEaXNwb3NlKCk7Ci0gICAgICAgIGVkaXRTZWxlY3Rpb24oc2VsZWN0ZWRSb3dJbmRleCwgMCk7Ci0gICAgICB9Ci0gICAgICBjdXJyU2VsZWN0aW9uSW5kZXhfID0gc2VsZWN0ZWRSb3dJbmRleDsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgY2xhc3MgTGlzdENvbnRlbnRQcm92aWRlciBpbXBsZW1lbnRzIElTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyCi0gIHsKLSAgICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkKLSAgICB7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgaW5wdXRDaGFuZ2VkKFZpZXdlciB2aWV3ZXIsIE9iamVjdCBvbGRJbnB1dCwgT2JqZWN0IG5ld0lucHV0KQotICAgIHsKLSAgICAgIHRhYmxlVmlld2VyXy5hZGQoZ2V0RWxlbWVudHMobmV3SW5wdXQpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgT2JqZWN0W10gZ2V0RWxlbWVudHMoT2JqZWN0IGlucHV0RWxlbWVudCkKLSAgICB7Ci0gICAgICBpZiAoaW5wdXRFbGVtZW50IGluc3RhbmNlb2YgTGlzdCkKLSAgICAgIHsKLSAgICAgICAgTGlzdCBsaXN0ID0gKExpc3QpaW5wdXRFbGVtZW50OwotICAgICAgICBPYmplY3RbXSBvYmplY3RzID0gbmV3IE9iamVjdFtsaXN0LnNpemUoKV07Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb2JqZWN0cy5sZW5ndGg7IGkrKykKLSAgICAgICAgICBvYmplY3RzW2ldID0gbGlzdC5nZXQoaSk7Ci0gICAgICAgIHJldHVybiBvYmplY3RzOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gbmV3IE9iamVjdFswXTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgY2xhc3MgTGlzdExhYmVsUHJvdmlkZXIgaW1wbGVtZW50cyBJVGFibGVMYWJlbFByb3ZpZGVyCi0gIHsKLSAgICBwdWJsaWMgSW1hZ2UgZ2V0Q29sdW1uSW1hZ2UoT2JqZWN0IGVsZW1lbnQsIGludCBjb2x1bW5JbmRleCkKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldENvbHVtblRleHQoT2JqZWN0IGVsZW1lbnQsIGludCBjb2x1bW5JbmRleCkKLSAgICB7Ci0gICAgICByZXR1cm4gZWxlbWVudC50b1N0cmluZygpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKElMYWJlbFByb3ZpZGVyTGlzdGVuZXIgbGlzdGVuZXIpCi0gICAgewotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKElMYWJlbFByb3ZpZGVyTGlzdGVuZXIgbGlzdGVuZXIpCi0gICAgewotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGlzTGFiZWxQcm9wZXJ0eShPYmplY3QgZWxlbWVudCwgU3RyaW5nIHByb3BlcnR5KQotICAgIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKQotICAgIHsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NpbC9VdGlscy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c2lsL1V0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyYjQ5ZWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c2lsL1V0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NpbDsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLQotCi1wdWJsaWMgY2xhc3MgVXRpbHMKLXsKLSAgcHVibGljIFV0aWxzKCkKLSAgewotICB9Ci0KLSAgcHVibGljIFN0cmluZyB0b0ZpbGVTeXN0ZW1VUkkoU3RyaW5nIHJlbGF0aXZlUGxhdGZvcm1VUkkpCi0gIHsKLSAgICBpZiAocmVsYXRpdmVQbGF0Zm9ybVVSSSAhPSBudWxsKQotICAgICAgcmV0dXJuIHRvRmlsZVN5c3RlbVVSSShSZXNvdXJjZVV0aWxzLmZpbmRSZXNvdXJjZShyZWxhdGl2ZVBsYXRmb3JtVVJJKSk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIHRvRmlsZVN5c3RlbVVSSShJUmVzb3VyY2UgcmVzKQotICB7Ci0gICAgaWYgKHJlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIElQYXRoIHBhdGggPSByZXMuZ2V0TG9jYXRpb24oKTsKLSAgICAgIGlmIChwYXRoICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHBhdGgudG9GaWxlKCkudG9VUkwoKS50b1N0cmluZygpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gbXVybGUpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c3J0L0NsaWVudFJ1bnRpbWVEZXNjcmlwdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dzcnQvQ2xpZW50UnVudGltZURlc2NyaXB0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjViZWRmNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dzcnQvQ2xpZW50UnVudGltZURlc2NyaXB0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbi5SZXF1aXJlZEZhY2V0VmVyc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5JUHJvamVjdEZhY2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLklQcm9qZWN0RmFjZXRWZXJzaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLlByb2plY3RGYWNldHNNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlUnVudGltZTsKLQotcHVibGljIGNsYXNzIENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yCi17Ci0gIHByaXZhdGUgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW07Ci0gIHByaXZhdGUgSGFzaHRhYmxlIGFsbFdlYlNlcnZpY2VDbGllbnRJbXBsczsKLSAgcHJpdmF0ZSBIYXNodGFibGUgYWxsUnVudGltZXM7Ci0gIHByaXZhdGUgU3RyaW5nIGlkOwotICBwcml2YXRlIFdlYlNlcnZpY2VDbGllbnRJbXBsIGNsaWVudEltcGxlbWVudGF0aW9uVHlwZTsKLSAgcHJpdmF0ZSBSdW50aW1lRGVzY3JpcHRvciBydW50aW1lOwotICBwcml2YXRlIFN0cmluZyBjbGllbnRSdW50aW1lQ2xhc3NOYW1lOwotICBwcml2YXRlIElXZWJTZXJ2aWNlUnVudGltZSB3ZWJTZXJ2aWNlUnVudGltZTsKLSAgcHJpdmF0ZSBSZXF1aXJlZEZhY2V0VmVyc2lvbltdIHJlcXVpcmVkRmFjZXRWZXJzaW9uczsKLSAgcHJpdmF0ZSBTZXQgcHJvamVjdEZhY2V0VmVyc2lvbnM7Ci0gIAotICBwdWJsaWMgQ2xpZW50UnVudGltZURlc2NyaXB0b3IoSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW0sIEhhc2h0YWJsZSBhbGxXZWJTZXJ2aWNlQ2xpZW50SW1wbHMsIEhhc2h0YWJsZSBhbGxSdW50aW1lcykKLSAgewotICAgIHRoaXMuZWxlbSA9IGVsZW07Ci0gICAgdGhpcy5hbGxXZWJTZXJ2aWNlQ2xpZW50SW1wbHMgPSBhbGxXZWJTZXJ2aWNlQ2xpZW50SW1wbHM7Ci0gICAgdGhpcy5hbGxSdW50aW1lcyA9IGFsbFJ1bnRpbWVzOwotICB9Ci0gIAotICBwdWJsaWMgV2ViU2VydmljZUNsaWVudEltcGwgZ2V0Q2xpZW50SW1wbGVtZW50YXRpb25UeXBlKCkKLSAgewotICAgIGlmIChjbGllbnRJbXBsZW1lbnRhdGlvblR5cGUgPT0gbnVsbCkKLSAgICB7Ci0gICAgIFN0cmluZyBjbGllbnRJbXBsZW1lbnRhdGlvblR5cGVJZCA9IGVsZW0uZ2V0QXR0cmlidXRlKCJjbGllbnRJbXBsZW1lbnRhdGlvblR5cGVJZCIpOwotICAgICBjbGllbnRJbXBsZW1lbnRhdGlvblR5cGUgPSAoV2ViU2VydmljZUNsaWVudEltcGwpYWxsV2ViU2VydmljZUNsaWVudEltcGxzLmdldChjbGllbnRJbXBsZW1lbnRhdGlvblR5cGVJZCk7Ci0gICAgfQotICAgIHJldHVybiBjbGllbnRJbXBsZW1lbnRhdGlvblR5cGU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q2xpZW50UnVudGltZUNsYXNzTmFtZSgpCi0gIHsKLSAgICBpZiAoY2xpZW50UnVudGltZUNsYXNzTmFtZSA9PSBudWxsKQotICAgIHsKLSAgICAgIGNsaWVudFJ1bnRpbWVDbGFzc05hbWUgPSBlbGVtLmdldEF0dHJpYnV0ZSgiY2xhc3MiKTsKLSAgICB9Ci0gICAgcmV0dXJuIGNsaWVudFJ1bnRpbWVDbGFzc05hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SWQoKQotICB7Ci0gICAgaWYgKGlkID09IG51bGwpCi0gICAgewotICAgICAgaWQgPSBlbGVtLmdldEF0dHJpYnV0ZSgiaWQiKTsKLSAgICB9ICAgIAotICAgIHJldHVybiBpZDsKLSAgfQotICAKLSAgcHVibGljIFJlcXVpcmVkRmFjZXRWZXJzaW9uW10gZ2V0UmVxdWlyZWRGYWNldFZlcnNpb25zKCkKLSAgewotICAgIGlmIChyZXF1aXJlZEZhY2V0VmVyc2lvbnMgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBBcnJheUxpc3QgcmVxdWlyZWRGYWNldFZlcnNpb25MaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gZmFjZXRFbGVtcyA9IGVsZW0uZ2V0Q2hpbGRyZW4oInJlcXVpcmVkLWZhY2V0LXZlcnNpb24iKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmFjZXRFbGVtcy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgUmVxdWlyZWRGYWNldFZlcnNpb24gcmZ2ID0gbmV3IFJlcXVpcmVkRmFjZXRWZXJzaW9uKCk7Ci0gICAgICAgIElQcm9qZWN0RmFjZXQgcHJvamVjdEZhY2V0ID0gUHJvamVjdEZhY2V0c01hbmFnZXIuZ2V0UHJvamVjdEZhY2V0KGZhY2V0RWxlbXNbaV0uZ2V0QXR0cmlidXRlKCJmYWNldCIpKTsgICAgICAgIAotICAgICAgICBJUHJvamVjdEZhY2V0VmVyc2lvbiBwcm9qZWN0RmFjZXRWZXJzaW9uID0gcHJvamVjdEZhY2V0LmdldFZlcnNpb24oZmFjZXRFbGVtc1tpXS5nZXRBdHRyaWJ1dGUoInZlcnNpb24iKSk7Ci0gICAgICAgIHJmdi5zZXRQcm9qZWN0RmFjZXRWZXJzaW9uKHByb2plY3RGYWNldFZlcnNpb24pOwotICAgICAgICBTdHJpbmcgYWxsb3dOZXdlclZhbHVlID0gZmFjZXRFbGVtc1tpXS5nZXRBdHRyaWJ1dGUoImFsbG93LW5ld2VyIik7Ci0gICAgICAgIGlmIChhbGxvd05ld2VyVmFsdWUgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHJmdi5zZXRBbGxvd05ld2VyKGZhbHNlKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICByZnYuc2V0QWxsb3dOZXdlcihCb29sZWFuLnZhbHVlT2YoYWxsb3dOZXdlclZhbHVlKS5ib29sZWFuVmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJlcXVpcmVkRmFjZXRWZXJzaW9uTGlzdC5hZGQocmZ2KTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgcmVxdWlyZWRGYWNldFZlcnNpb25zID0gKFJlcXVpcmVkRmFjZXRWZXJzaW9uW10pcmVxdWlyZWRGYWNldFZlcnNpb25MaXN0LnRvQXJyYXkobmV3IFJlcXVpcmVkRmFjZXRWZXJzaW9uW117fSk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiByZXF1aXJlZEZhY2V0VmVyc2lvbnM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTZXQgZ2V0UHJvamVjdEZhY2V0VmVyc2lvbnMoKQotICB7Ci0gICAgaWYgKHByb2plY3RGYWNldFZlcnNpb25zID09IG51bGwpCi0gICAgewotICAgICBwcm9qZWN0RmFjZXRWZXJzaW9ucyA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgIFJlcXVpcmVkRmFjZXRWZXJzaW9uW10gcmZ2ID0gZ2V0UmVxdWlyZWRGYWNldFZlcnNpb25zKCk7Ci0gICAgIGZvciAoaW50IGk9MDsgaTxyZnYubGVuZ3RoOyBpKyspCi0gICAgIHsKLSAgICAgICBwcm9qZWN0RmFjZXRWZXJzaW9ucy5hZGQocmZ2W2ldLmdldFByb2plY3RGYWNldFZlcnNpb24oKSk7Ci0gICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHByb2plY3RGYWNldFZlcnNpb25zOyAgICAKLSAgfSAgCi0gIAotICBwdWJsaWMgUnVudGltZURlc2NyaXB0b3IgZ2V0UnVudGltZSgpCi0gIHsKLSAgICBpZiAocnVudGltZSA9PSBudWxsKQotICAgIHsKLSAgICAgU3RyaW5nIHJ1bnRpbWVJZCA9IGVsZW0uZ2V0QXR0cmlidXRlKCJydW50aW1lSWQiKTsKLSAgICAgcnVudGltZSA9IChSdW50aW1lRGVzY3JpcHRvcilhbGxSdW50aW1lcy5nZXQocnVudGltZUlkKTsKLSAgICB9ICAgIAotICAgIHJldHVybiBydW50aW1lOwotICB9Ci0gIAotICBwdWJsaWMgSVdlYlNlcnZpY2VSdW50aW1lIGdldFdlYlNlcnZpY2VSdW50aW1lKCkKLSAgewotICAgIGlmICh3ZWJTZXJ2aWNlUnVudGltZSA9PSBudWxsKQotICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHdlYlNlcnZpY2VSdW50aW1lID0gKElXZWJTZXJ2aWNlUnVudGltZSllbGVtLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oImNsYXNzIik7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2goQ29yZUV4Y2VwdGlvbiBjZSkKLSAgICAgICAgewotICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHdlYlNlcnZpY2VSdW50aW1lOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dzcnQvQ2xpZW50VHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c3J0L0NsaWVudFR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTNjNGI1MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dzcnQvQ2xpZW50VHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIxNiAgIDEyNzEzOCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgY29tLmlibS5pY3UudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci0KLXB1YmxpYyBjbGFzcyBDbGllbnRUeXBlIHsKLQotICBwcml2YXRlIElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtXzsKLSAgcHJpdmF0ZSBIYXNodGFibGUgd2ViU2VydmljZUNsaWVudEltcGxzXzsKLSAgICAKLQlwcml2YXRlIFN0cmluZyBpZDsKLQlwcml2YXRlIFdlYlNlcnZpY2VDbGllbnRJbXBsIHdlYlNlcnZpY2VDbGllbnRJbXBsOwotCXByaXZhdGUgU3RyaW5nW10gbW9kdWxlVHlwZXNJbmNsdWRlOwotICBwcml2YXRlIFN0cmluZ1tdIG1vZHVsZVR5cGVzRXhjbHVkZTsKLQkKLSAgCi0gIAotCXB1YmxpYyBDbGllbnRUeXBlKElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtXywgSGFzaHRhYmxlIHdlYlNlcnZpY2VDbGllbnRJbXBsc18pCi0gIHsKLSAgICBzdXBlcigpOwotICAgIHRoaXMuZWxlbV8gPSBlbGVtXzsKLSAgICB0aGlzLndlYlNlcnZpY2VDbGllbnRJbXBsc18gPSB3ZWJTZXJ2aWNlQ2xpZW50SW1wbHNfOwotICB9Ci0KLQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SWQoKQotICB7Ci0gICAgaWYgKGlkPT1udWxsKQotICAgIHsKLSAgICAgIGlkID0gZWxlbV8uZ2V0QXR0cmlidXRlKCJpZCIpOwotICAgIH0KLSAgICByZXR1cm4gaWQ7Ci0gIH0KLSAgCi0KLQotCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRNb2R1bGVUeXBlc0V4Y2x1ZGUoKQotICB7Ci0gICAgaWYgKG1vZHVsZVR5cGVzRXhjbHVkZT09bnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgYXR0ciA9IGVsZW1fLmdldEF0dHJpYnV0ZSgibW9kdWxlVHlwZXNFeGNsdWRlIik7Ci0gICAgICBpZiAoYXR0ciAhPSBudWxsICYmIGF0dHIubGVuZ3RoKCk+MCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihhdHRyLCAiICIpOwotICAgICAgICBpbnQgc2l6ZSA9IHN0LmNvdW50VG9rZW5zKCk7Ci0gICAgICAgIG1vZHVsZVR5cGVzRXhjbHVkZSA9IG5ldyBTdHJpbmdbc2l6ZV07Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbW9kdWxlVHlwZXNFeGNsdWRlLmxlbmd0aDsgaSsrKQotICAgICAgICAgIG1vZHVsZVR5cGVzRXhjbHVkZVtpXSA9IHN0Lm5leHRUb2tlbigpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbW9kdWxlVHlwZXNFeGNsdWRlOwotICB9Ci0gIAotCi0KLQotICBwdWJsaWMgU3RyaW5nW10gZ2V0TW9kdWxlVHlwZXNJbmNsdWRlKCkKLSAgewotICAgIGlmIChtb2R1bGVUeXBlc0luY2x1ZGU9PW51bGwpCi0gICAgewotICAgICAgU3RyaW5nIGF0dHIgPSBlbGVtXy5nZXRBdHRyaWJ1dGUoIm1vZHVsZVR5cGVzSW5jbHVkZSIpOwotICAgICAgaWYgKGF0dHIgIT0gbnVsbCAmJiBhdHRyLmxlbmd0aCgpPjApCi0gICAgICB7Ci0gICAgICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoYXR0ciwgIiAiKTsKLSAgICAgICAgaW50IHNpemUgPSBzdC5jb3VudFRva2VucygpOwotICAgICAgICBtb2R1bGVUeXBlc0luY2x1ZGUgPSBuZXcgU3RyaW5nW3NpemVdOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1vZHVsZVR5cGVzSW5jbHVkZS5sZW5ndGg7IGkrKykKLSAgICAgICAgICBtb2R1bGVUeXBlc0luY2x1ZGVbaV0gPSBzdC5uZXh0VG9rZW4oKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG1vZHVsZVR5cGVzSW5jbHVkZTsKLSAgfQotICAKLQotCi0KLSAgcHVibGljIFdlYlNlcnZpY2VDbGllbnRJbXBsIGdldFdlYlNlcnZpY2VDbGllbnRJbXBsKCkKLSAgewotICAgIGlmICh3ZWJTZXJ2aWNlQ2xpZW50SW1wbD09bnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgd3NjaW1wbElkID0gZWxlbV8uZ2V0QXR0cmlidXRlKCJpbXBsSWQiKTsKLSAgICAgIHdlYlNlcnZpY2VDbGllbnRJbXBsID0gKFdlYlNlcnZpY2VDbGllbnRJbXBsKXdlYlNlcnZpY2VDbGllbnRJbXBsc18uZ2V0KHdzY2ltcGxJZCk7Ci0gICAgfQotICAgIHJldHVybiB3ZWJTZXJ2aWNlQ2xpZW50SW1wbDsKLSAgfQotICAKLQotCi0gIC8qCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V2ViU2VydmljZUNsaWVudFR5cGVJZCgpCi0gIHsKLSAgICBpZiAod2ViU2VydmljZUNsaWVudFR5cGVJZD09bnVsbCkKLSAgICB7Ci0gICAgICB3ZWJTZXJ2aWNlQ2xpZW50VHlwZUlkID0gZWxlbV8uZ2V0QXR0cmlidXRlKCJ3ZWJTZXJ2aWNlQ2xpZW50VHlwZUlkIik7Ci0gICAgfQotICAgIHJldHVybiB3ZWJTZXJ2aWNlQ2xpZW50VHlwZUlkOwotICB9Ci0gICovCi0KLQotCQotCQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c3J0L0NvbnRleHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NydC9Db250ZXh0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzNGE2ZTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c3J0L0NvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZVNjZW5hcmlvOwotCi0vKioKLSAqIEBhdXRob3IgcnNpbmhhCi0gKgotICogVE9ETyBUbyBjaGFuZ2UgdGhlIHRlbXBsYXRlIGZvciB0aGlzIGdlbmVyYXRlZCB0eXBlIGNvbW1lbnQgZ28gdG8KLSAqIFdpbmRvdyAtIFByZWZlcmVuY2VzIC0gSmF2YSAtIENvZGUgU3R5bGUgLSBDb2RlIFRlbXBsYXRlcwotICovCi1wdWJsaWMgY2xhc3MgQ29udGV4dCBpbXBsZW1lbnRzIElDb250ZXh0IHsJCi0JcHJpdmF0ZSBXZWJTZXJ2aWNlU2NlbmFyaW8gc2NlbmFyaW87Ci0JcHJpdmF0ZSBib29sZWFuIGRldmVsb3A7Ci0JcHJpdmF0ZSBib29sZWFuIGFzc2VtYmxlOwotCXByaXZhdGUgYm9vbGVhbiBkZXBsb3k7Ci0JcHJpdmF0ZSBib29sZWFuIGluc3RhbGw7Ci0JcHJpdmF0ZSBib29sZWFuIHJ1bjsKLQlwcml2YXRlIGJvb2xlYW4gY2xpZW50OwotCXByaXZhdGUgYm9vbGVhbiB0ZXN0OwotCXByaXZhdGUgYm9vbGVhbiBwdWJsaXNoOwotCXByaXZhdGUgYm9vbGVhbiBvdmVyV3JpdGVGaWxlczsKLQlwcml2YXRlIGJvb2xlYW4gY3JlYXRlRm9sZGVyczsKLQlwcml2YXRlIGJvb2xlYW4gY2hlY2tPdXRGaWxlczsKLQkKLQlwdWJsaWMgYm9vbGVhbiBnZXRBc3NlbWJsZSgpIHsKLQkJcmV0dXJuIGFzc2VtYmxlOwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBnZXRDaGVja091dEZpbGVzKCkgewotCQlyZXR1cm4gY2hlY2tPdXRGaWxlczsKLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gZ2V0Q2xpZW50KCkgewotCQlyZXR1cm4gY2xpZW50OwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBnZXRDcmVhdGVGb2xkZXJzKCkgewotCQlyZXR1cm4gY3JlYXRlRm9sZGVyczsKLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gZ2V0RGVwbG95KCkgewotCQlyZXR1cm4gZGVwbG95OwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBnZXREZXZlbG9wKCkgewotCQlyZXR1cm4gZGV2ZWxvcDsKLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gZ2V0SW5zdGFsbCgpIHsKLQkJcmV0dXJuIGluc3RhbGw7Ci0JfQotCQotCXB1YmxpYyBib29sZWFuIGdldE92ZXJXcml0ZUZpbGVzKCkgewotCQlyZXR1cm4gb3ZlcldyaXRlRmlsZXM7Ci0JfQotCQotCXB1YmxpYyBib29sZWFuIGdldFB1Ymxpc2goKSB7Ci0JCXJldHVybiBwdWJsaXNoOwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBnZXRSdW4oKSB7Ci0JCXJldHVybiBydW47Ci0JfQotCQotCXB1YmxpYyBXZWJTZXJ2aWNlU2NlbmFyaW8gZ2V0U2NlbmFyaW8oKSB7Ci0JCXJldHVybiBzY2VuYXJpbzsKLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gZ2V0VGVzdCgpIHsKLQkJcmV0dXJuIHRlc3Q7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0QXNzZW1ibGUoYm9vbGVhbiBhc3NlbWJsZSkgewotCQl0aGlzLmFzc2VtYmxlID0gYXNzZW1ibGU7Ci0JfQotCQotCi0JcHVibGljIHZvaWQgc2V0Q2hlY2tPdXRGaWxlcyhib29sZWFuIGNoZWNrT3V0RmlsZXMpIHsKLQkJdGhpcy5jaGVja091dEZpbGVzID0gY2hlY2tPdXRGaWxlczsKLQl9Ci0JCi0KLQlwdWJsaWMgdm9pZCBzZXRDbGllbnQoYm9vbGVhbiBjbGllbnQpIHsKLQkJdGhpcy5jbGllbnQgPSBjbGllbnQ7Ci0JfQotCQotCi0JcHVibGljIHZvaWQgc2V0Q3JlYXRlRm9sZGVycyhib29sZWFuIGNyZWF0ZUZvbGRlcnMpIHsKLQkJdGhpcy5jcmVhdGVGb2xkZXJzID0gY3JlYXRlRm9sZGVyczsKLQl9Ci0JCi0KLQlwdWJsaWMgdm9pZCBzZXREZXBsb3koYm9vbGVhbiBkZXBsb3kpIHsKLQkJdGhpcy5kZXBsb3kgPSBkZXBsb3k7Ci0JfQotCQotCi0JcHVibGljIHZvaWQgc2V0RGV2ZWxvcChib29sZWFuIGRldmVsb3ApIHsKLQkJdGhpcy5kZXZlbG9wID0gZGV2ZWxvcDsKLQl9Ci0JCi0KLQlwdWJsaWMgdm9pZCBzZXRJbnN0YWxsKGJvb2xlYW4gaW5zdGFsbCkgewotCQl0aGlzLmluc3RhbGwgPSBpbnN0YWxsOwotCX0KLQkKLQotCXB1YmxpYyB2b2lkIHNldE92ZXJXcml0ZUZpbGVzKGJvb2xlYW4gb3ZlcldyaXRlRmlsZXMpIHsKLQkJdGhpcy5vdmVyV3JpdGVGaWxlcyA9IG92ZXJXcml0ZUZpbGVzOwotCX0KLQkKLQotCXB1YmxpYyB2b2lkIHNldFB1Ymxpc2goYm9vbGVhbiBwdWJsaXNoKSB7Ci0JCXRoaXMucHVibGlzaCA9IHB1Ymxpc2g7Ci0JfQotCQotCi0JcHVibGljIHZvaWQgc2V0UnVuKGJvb2xlYW4gcnVuKSB7Ci0JCXRoaXMucnVuID0gcnVuOwotCX0KLQkKLQotCXB1YmxpYyB2b2lkIHNldFNjZW5hcmlvKFdlYlNlcnZpY2VTY2VuYXJpbyBzY2VuYXJpbykgewotCQl0aGlzLnNjZW5hcmlvID0gc2NlbmFyaW87Ci0JfQotCQotCi0JcHVibGljIHZvaWQgc2V0VGVzdChib29sZWFuIHRlc3QpIHsKLQkJdGhpcy50ZXN0ID0gdGVzdDsKLQl9CQkKLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NydC9GYWNldE1hdGNoQ2FjaGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NydC9GYWNldE1hdGNoQ2FjaGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjkzZDlmNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dzcnQvRmFjZXRNYXRjaENhY2hlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMTMxIDEyMTA3MSAgIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lciAoaW5pdGlhbCBjcmVhdGlvbikKLSAqIDIwMDYwNDI2ICAgMTM4MDUxIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDQyNyAgIDEyNjc4MCByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VDaGFuZ2VFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uRmFjZXRNYXRjaGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uRmFjZXRTZXRzQnlUZW1wbGF0ZUNhY2hlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uRmFjZXRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLlJlcXVpcmVkRmFjZXRWZXJzaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLklGYWNldGVkUHJvamVjdFRlbXBsYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLlByb2plY3RGYWNldHNNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnJ1bnRpbWUuSVJ1bnRpbWU7Ci0KLS8qKgotICogRmFjZXRNYXRjaENhY2hlIGNhY2hlcyByZXN1bHRzIG9mIGNhbGN1bGF0aW9ucyBtYWRlIHJlc3BlY3RpbmcKLSAqIHRoZSBzdWl0YWJpbGl0eSBvZiBwcm9qZWN0cyBhbmQgcHJvamVjdCB0eXBlcyBmb3Igc2VydmljZVJ1bnRpbWVzCi0gKiBhbmQgY2xpZW50UnVudGltZXMuCi0gKiAKLSAqIDxici8+PGJyLz4KLSAqIFRlbWlub2xvZ3kgdXNlZCBpbiB0aGUgamF2YWRvYyBpbiB0aGlzIGNsYXNzOgotICogPHVsPgotICogPGxpPjxiPnNlcnZpY2VSdW50aW1lPC9iPjogZXh0ZW5zaW9uIHRvIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5zZXJ2aWNlUnVudGltZXMuCi0gKiBUaGUgSmF2YSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIGlzIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LlNlcnZpY2VSdW50aW1lRGVzY3JpcHRvcjwvbGk+Ci0gKiA8bGk+PGI+Y2xpZW50UnVudGltZTwvYj46IGV4dGVuc2lvbiB0byBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuY2xpZW50UnVudGltZXMuCi0gKiBUaGUgSmF2YSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIGlzIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LkNsaWVudFJ1bnRpbWVEZXNjcmlwdG9yPC9saT4KLSAqIDwvdWw+Ci0gKgotICovCi1wdWJsaWMgY2xhc3MgRmFjZXRNYXRjaENhY2hlIGltcGxlbWVudHMgSVJlc291cmNlQ2hhbmdlTGlzdGVuZXIKLXsKLSAgLy9zaW5nbGUgaW5zdGFuY2UgcGVyIHdvcmtiZW5jaAotICBwcml2YXRlIHN0YXRpYyBGYWNldE1hdGNoQ2FjaGUgaW5zdGFuY2VfOwotICAKLSAgCi0gIC8vVGFibGVzIHJlbGF0ZWQgdG8gZXhpc3RpbmcgcHJvamVjdHMgaW4gdGhlIHdvcmtzcGFjZQotICAKLSAgLy9zZXJ2aWNlRmFjZXRNYXRjaFRhYmxlXzogCi0gIC8va2V5OiBPYmplY3Qgb2YgdHlwZSBTdHJpbmcuCi0gIC8vICAgICBGb3J3YXJkIHNsYXNoIHNlcGFyYXRlZCBjb25jYXRlbmF0aW9uIG9mIGEgc2VydmljZVJ1bnRpbWVJZCBhbmQgYSBwcm9qZWN0TmFtZSAKLSAgLy8gICAgIChlLmcuIG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLmphdmEvd3ApLgotICAvL3ZhbHVlOiBPYmplY3Qgb2YgdHlwZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLkZhY2V0TWF0Y2hlci4KLSAgLy8gICAgICAgVGhlIEZhY2V0TWF0Y2hlciBjb250YWlucyB0aGUgbWF0Y2hpbmcgY2hhcmFjdGVyaXN0aWNzIGNhbGN1bGF0ZWQgZm9yIHRoZSAKLSAgLy8gICAgICAgc2VydmljZVJ1bnRpbWUgYW5kIHByb2plY3QgaW4gdGhlIGtleS4KLSAgcHJpdmF0ZSBIYXNodGFibGUgc2VydmljZUZhY2V0TWF0Y2hUYWJsZV87Ci0gIAotICAvL3NlcnZpY2VUYWJsZUtleXNCeVByb2plY3ROYW1lXzogCi0gIC8va2V5OiBPYmplY3Qgb2YgdHlwZSBTdHJpbmcuCi0gIC8vICAgICBwcm9qZWN0IG5hbWUgKGUuZy4gd3ApCi0gIC8vdmFsdWU6IFNldCBvZiBlbGVtZW50cyBvZiB0eXBlIFN0cmluZy4gVGhlIFN0cmluZ3MgaW4gdGhlIFNldCBhcmUga2V5cyBmcm9tIHRoZSBzZXJ2aWNlRmFjZXRNYXRjaFRhYmxlXyAKLSAgLy8gICAgICAgdGhhdCBjb250YWluIHRoZSBwcm9qZWN0IG5hbWUgKGUuZy4gb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY3JlYXRpb24uamF2YS93cCkuIFVzZWQgdG8gcmFwaWRseQotICAvLyAgICAgICBkZWxldGUgZW50cmllcyBmcm9tIHNlcnZpY2VGYWNldE1hdGNoVGFibGVfIGFmdGVyIGEgcHJvamVjdCBpcyBkZWxldGVkIGZyb20gdGhlIHdvcmtzcGFjZS4KLSAgcHJpdmF0ZSBIYXNodGFibGUgc2VydmljZVRhYmxlS2V5c0J5UHJvamVjdE5hbWVfOwotICAKLSAgLy9jbGllbnRGYWNldE1hdGNoVGFibGVfOwotICAvL2tleTogT2JqZWN0IG9mIHR5cGUgU3RyaW5nLgotICAvLyAgICAgZm9yd2FyZCBzbGFzaCBzZXBhcmF0ZWQgY29uY2F0ZW5hdGlvbiBvZiBhIGNsaWVudFJ1bnRpbWVJZCBhbmQgYSBwcm9qZWN0TmFtZSAKLSAgLy8gICAgIChlLmcuIG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmphdmEvd3ApCi0gIC8vdmFsdWU6IE9iamVjdCBvZiB0eXBlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uRmFjZXRNYXRjaGVyCi0gIC8vICAgICAgIFRoZSBGYWNldE1hdGNoZXIgY29udGFpbnMgdGhlIG1hdGNoaW5nIGNoYXJhY3RlcmlzdGljcyBjYWxjdWxhdGVkIGZvciB0aGUgCi0gIC8vICAgICAgIGNsaWVudFJ1bnRpbWUgYW5kIHByb2plY3QgaW4gdGhlIGtleS4KLSAgcHJpdmF0ZSBIYXNodGFibGUgY2xpZW50RmFjZXRNYXRjaFRhYmxlXzsKLSAgCi0gIC8vY2xpZW50VGFibGVLZXlzQnlQcm9qZWN0TmFtZV8KLSAgLy9rZXk6IE9iamVjdCBvZiB0eXBlIFN0cmluZy4KLSAgLy8gICAgIHByb2plY3QgbmFtZSAoZS5nLiB3cCkKLSAgLy92YWx1ZTogU2V0IG9mIGVsZW1lbnRzIG9mIHR5cGUgU3RyaW5nLiBUaGUgU3RyaW5ncyBpbiB0aGUgU2V0IGFyZSBrZXlzIGZyb20gdGhlIGNsaWVudEZhY2V0TWF0Y2hUYWJsZV8gCi0gIC8vICAgICAgIHRoYXQgY29udGFpbiB0aGUgcHJvamVjdCBuYW1lIChlLmcuIG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmphdmEvd3ApLiBVc2VkIHRvIHJhcGlkbHkKLSAgLy8gICAgICAgZGVsZXRlIGVudHJpZXMgZnJvbSBjbGllbnRGYWNldE1hdGNoVGFibGVfIGFmdGVyIGEgcHJvamVjdCBpcyBkZWxldGVkIGZyb20gdGhlIHdvcmtzcGFjZS4KLSAgcHJpdmF0ZSBIYXNodGFibGUgY2xpZW50VGFibGVLZXlzQnlQcm9qZWN0TmFtZV87Ci0gIAotICAvL3Byb2plY3RFbnRyaWVzVG9EZWxldGVfOiBlbGVtZW50cyBvZiB0eXBlIFN0cmluZyBjb250YWluaW5nIHRoZSBuYW1lcyBvZiBwcm9qZWN0cyB0aGF0IGhhdmUKLSAgLy9iZWVuIGRlbGV0ZWQgZnJvbSB0aGUgd29ya3NwYWNlIGJ1dCB0aGVpciBjb3JyZXNwb25kaW5nIGVudHJpZXMgZnJvbSBzZXJ2aWNlRmFjZXRNYXRjaFRhYmxlXyAKLSAgLy9hbmQgY2xpZW50RmFjZXRNYXRjaFRhYmxlXyBoYXZlIHlldCB0byBiZSBkZWxldGVkLgotICBwcml2YXRlIExpc3QgcHJvamVjdEVudHJpZXNUb0RlbGV0ZV87Ci0gICAgCi0gIAotICAKLSAgLy9UYWJsZXMgcmVsYXRlZCB0byB0ZW1wbGF0ZXMgIAotICAKLSAgLy90ZW1wbGF0ZXNCeVNlcnZpY2VSdW50aW1lSWRfOgotICAvL2tleTogT2JqZWN0IG9mIHR5cGUgU3RyaW5nLgotICAvLyAgICAgc2VydmljZVJ1bnRpbWUgaWQKLSAgLy92YWx1ZTogU2V0IG9mIGVsZW1lbnRzIG9mIHR5cGUgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGUgICAKLSAgLy8gICAgICAgVGhpcyB0aGUgc2V0IG9mIHRlbXBsYXRlcyB0aGF0IHN1cHBvcnQgdGhlIHNlcnZpY2VSdW50aW1lIGlkZW50aWZpZWQgYnkgdGhlIGtleS4KLSAgcHJpdmF0ZSBIYXNodGFibGUgdGVtcGxhdGVzQnlTZXJ2aWNlUnVudGltZUlkXzsKLSAgCi0gIC8vdGVtcGxhdGVzQnlDbGllbnRSdW50aW1lSWRfCi0gIC8va2V5OiBPYmplY3Qgb2YgdHlwZSBTdHJpbmcuCi0gIC8vICAgICBjbGllbnRSdW50aW1lIGlkCi0gIC8vdmFsdWU6IFNldCBvZiBlbGVtZW50cyBvZiB0eXBlIG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLklGYWNldGVkUHJvamVjdFRlbXBsYXRlCi0gIC8vICAgICAgIFRoaXMgdGhlIHNldCBvZiB0ZW1wbGF0ZXMgdGhhdCBzdXBwb3J0IHRoZSBjbGllbnRSdW50aW1lIGlkZW50aWZpZWQgYnkgdGhlIGtleS4KLSAgcHJpdmF0ZSBIYXNodGFibGUgdGVtcGxhdGVzQnlDbGllbnRSdW50aW1lSWRfOwotICAKLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MuCi0gICAqIAotICAgKiBAcmV0dXJuIEEgc2luZ2xldG9uIEZhY2V0TWF0Y2hDYWNoZSBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHN5bmNocm9uaXplZCBGYWNldE1hdGNoQ2FjaGUgZ2V0SW5zdGFuY2UoKQotICB7Ci0gICAgaWYgKGluc3RhbmNlXyA9PSBudWxsKQotICAgIHsKLSAgICAgIGluc3RhbmNlXyA9IG5ldyBGYWNldE1hdGNoQ2FjaGUoKTsKLSAgICAgIGluc3RhbmNlXy5sb2FkKCk7Ci0gICAgfQotICAgIHJldHVybiBpbnN0YW5jZV87Ci0gIH0gIAotICAKLSAgcHJpdmF0ZSB2b2lkIGxvYWQoKQotICB7Ci0gICAgc2VydmljZUZhY2V0TWF0Y2hUYWJsZV8gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgc2VydmljZVRhYmxlS2V5c0J5UHJvamVjdE5hbWVfID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIGNsaWVudEZhY2V0TWF0Y2hUYWJsZV8gPSBuZXcgSGFzaHRhYmxlKCk7ICAgIAotICAgIGNsaWVudFRhYmxlS2V5c0J5UHJvamVjdE5hbWVfID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIHByb2plY3RFbnRyaWVzVG9EZWxldGVfID0gbmV3IEFycmF5TGlzdCgpOwotICAgIHRlbXBsYXRlc0J5Q2xpZW50UnVudGltZUlkXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICB0ZW1wbGF0ZXNCeVNlcnZpY2VSdW50aW1lSWRfID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIAotICAgIC8vTGlzdGVuIGZvciBkZWxldGlvbnMgb2YgcHJvamVjdHMgaW4gb3JkZXIgdG8gZGVsZXRlIGFsbCBlbnRyaWVzIGluCi0gICAgLy9IYXNodGFibGVzIGZvciB0aGUgZGVsZXRlZCBwcm9qZWN0LgotICAgIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5hZGRSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHRoaXMsIElSZXNvdXJjZUNoYW5nZUV2ZW50LlBSRV9ERUxFVEUpOwotICB9Ci0gIAotCi0gIC8qCi0gICAqIFJldHVybnMgdGhlIEZhY2V0TWF0Y2hlciByZXN1bHRpbmcgZnJvbSBtYXRjaGluZyBhIHNlcnZpY2VSdW50aW1lIG9yIGNsaWVudFJ1bnRpbWUgd2l0aCBhbiBleGlzdGluZyBwcm9qZWN0LgotICAgKiBAcGFyYW0gaXNDbGllbnQgdHJ1ZSBpZiBydW50aW1lSWQgaXMgYSBjbGllbnRSdW50aW1lSWQuIGZhbHNlIGlmIHJ1bnRpbWVJZCBpcyBhIHNlcnZpY2VSdW50aW1lSWQuCi0gICAqIEBwYXJhbSBydW50aW1lSWQgdGhlIGlkIG9mIGEgY2xpZW50UnVudGltZSBpZiBpc0NsaWVudCBpcyB0cnVlIG9yIHRoZSBpZCBvZiBhIHNlcnZpY2VSdW50aW1lIGlmCi0gICAqIGlzQ2xpZW50IGlzIGZhbHNlLgotICAgKiBAcGFyYW0gcHJvamVjdE5hbWUgdGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgcHJvamVjdC4KLSAgICogCi0gICAqIEByZXR1cm5zIEZhY2V0TWF0Y2hlciByZXN1bHRpbmcgZnJvbSBjYWxsaW5nIEZhY2V0VXRpbHMubWF0Y2goLi4pIHVzaW5nIHRoZSBzZXJ2aWNlUnVudGltZSBvciBjbGllbnRSdW50aW1lIGlkCi0gICAqIGFuZCB0aGUgcHJvamVjdCBuYW1lLiBSZXR1cm5zIG51bGwgaWYgdGhlIHByb2plY3QgZG9lc24ndCBleGlzdC4gTm9uLWZhY2V0ZWQgZXhpc3RpbmcgcHJvamVjdHMgd2lsbCBhbHdheXMgcmVzdWx0Ci0gICAqIGluIGEgRmFjZXRNYXRjaGVyIHdpdGggaXNNYXRjaCgpIGVxdWFsIHRvIGZhbHNlICh3aXRoIHRoZSBleGNlcHRpb24gb2YgSmF2YSBwcm9qZWN0cyB3aGljaCBhcmUgYSBzcGVjaWFsIGNhc2UgCi0gICAqIC0gc2VlIEZhY2V0VXRpbHMuZ2V0RmFjZXRzRm9yUHJvamVjdCgpKS4KLSAgICovCi0gIHB1YmxpYyBzeW5jaHJvbml6ZWQgRmFjZXRNYXRjaGVyIGdldE1hdGNoRm9yUHJvamVjdChib29sZWFuIGlzQ2xpZW50LCBTdHJpbmcgcnVudGltZUlkLCBTdHJpbmcgcHJvamVjdE5hbWUpCi0gIHsgICAgCi0gICAgLy9EZWxldGUgZW50cmllcyBmcm9tIHRhYmxlcyBpZiB0aGVyZSBhcmUgZGVsZXRpb25zIHBlbmRpbmcuCi0gICAgaWYgKHByb2plY3RFbnRyaWVzVG9EZWxldGVfLnNpemUoKSA+IDApCi0gICAgewotICAgICAgSXRlcmF0b3IgcHJvamVjdEl0ciA9IHByb2plY3RFbnRyaWVzVG9EZWxldGVfLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZShwcm9qZWN0SXRyLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHByb2plY3ROYW1lVG9EZWxldGUgPSAoU3RyaW5nKXByb2plY3RJdHIubmV4dCgpOwotICAgICAgIAotICAgICAgICAvL0RlbGV0ZSBlbnRyaWVzIGZyb20gY2xpZW50IHRhYmxlCi0gICAgICAgIHJlbW92ZVRhYmxlRW50cmllc0ZvclByb2plY3QodHJ1ZSwgcHJvamVjdE5hbWVUb0RlbGV0ZSk7Ci0gICAgICAgIAotICAgICAgICAvL0RlbGV0ZSBlbnRyaWVzIGZyb20gc2VydmljZSB0YWJsZQotICAgICAgICByZW1vdmVUYWJsZUVudHJpZXNGb3JQcm9qZWN0KGZhbHNlLCBwcm9qZWN0TmFtZVRvRGVsZXRlKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgLy9DbGVhciB0aGUgcHJvamVjdEVudHJpZXNUb0RlbGV0ZSBsaXN0Ci0gICAgICBwcm9qZWN0RW50cmllc1RvRGVsZXRlXy5jbGVhcigpOwotICAgIH0KLSAgICAKLSAgICBJUHJvamVjdCBwcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLSAgICBGYWNldE1hdGNoZXIgZm0gPSBudWxsOwotICAgIGlmIChwcm9qZWN0ICE9IG51bGwgJiYgcHJvamVjdC5leGlzdHMoKSkKLSAgICB7Ci0gICAgICBTdHJpbmcga2V5ID0gZ2V0S2V5KHJ1bnRpbWVJZCwgcHJvamVjdE5hbWUpOwotICAgICAgaWYgKGlzQ2xpZW50KQotICAgICAgewotICAgICAgICBmbSA9IChGYWNldE1hdGNoZXIpIGNsaWVudEZhY2V0TWF0Y2hUYWJsZV8uZ2V0KGtleSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGZtID0gKEZhY2V0TWF0Y2hlcikgc2VydmljZUZhY2V0TWF0Y2hUYWJsZV8uZ2V0KGtleSk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIGlmIChmbSA9PSBudWxsKQotICAgICAgewotICAgICAgICAvLyBUaGlzIGNvbWJpbmF0aW9uIGhhcyBub3QgeWV0IGJlZW4gY2FsY3VsYXRlZCBhbmQgY2FjaGVkIHNvIGNhbGN1bGF0ZSBpdCBhbmQgY2FjaGUgaXQuICAgICAgICAKLSAgICAgICAgZm0gPSBjYWxjdWxhdGVGYWNldE1hdGNoZXIoaXNDbGllbnQsIHJ1bnRpbWVJZCwgcHJvamVjdE5hbWUpOyAgICAgICAgIAotICAgICAgICBpZiAoaXNDbGllbnQpCi0gICAgICAgIHsKLSAgICAgICAgICBjbGllbnRGYWNldE1hdGNoVGFibGVfLnB1dChrZXksZm0pOyAgICAgCi0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgc2VydmljZUZhY2V0TWF0Y2hUYWJsZV8ucHV0KGtleSwgZm0pOwotICAgICAgICB9Ci0gICAgICAgIHVwZGF0ZVRhYmxlT2ZLZXlzKGlzQ2xpZW50LCBrZXksIHByb2plY3ROYW1lKTsKLSAgICAgICAgCi0gICAgICB9IGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gSWYgdGhlIHByb2plY3QncyBmYWNldHMgaGF2ZSBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IHRpbWUgdGhlCi0gICAgICAgIC8vIGZhY2V0cyB3ZXJlIGNhbGN1bGF0ZWQsIHJlZnJlc2ggdGhlIGZhY2V0TWF0Y2hlci4gICAgICAgIAotICAgICAgICBTZXQgY3VycmVudEZhY2V0VmVyc2lvbnMgPSBGYWNldFV0aWxzLmdldEZhY2V0c0ZvclByb2plY3QocHJvamVjdE5hbWUpOwotICAgICAgICBTZXQgcHJldmlvdXNGYWNldFZlcnNpb25zID0gZm0uZ2V0RmFjZXRzVGVzdGVkKCk7Ci0gICAgICAgIGlmICghY3VycmVudEZhY2V0VmVyc2lvbnMuZXF1YWxzKHByZXZpb3VzRmFjZXRWZXJzaW9ucykpCi0gICAgICAgIHsKLSAgICAgICAgICAvL3JlY2FsY3VsYXRlIGFuZCBjYWNoZSB0aGUgRmFjZXRNYXRjaGVyCi0gICAgICAgICAgZm0gPSBjYWxjdWxhdGVGYWNldE1hdGNoZXIoaXNDbGllbnQsIHJ1bnRpbWVJZCwgcHJvamVjdE5hbWUpOwotICAgICAgICAgIGlmIChpc0NsaWVudCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBjbGllbnRGYWNldE1hdGNoVGFibGVfLnB1dChrZXksZm0pOyAgICAgICAgIAotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgc2VydmljZUZhY2V0TWF0Y2hUYWJsZV8ucHV0KGtleSwgZm0pOwotICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmbTsgICAgCi0gIH0KLSAgCi0gIC8qKgotICAgKiBVcGRhdGVzIHNlcnZpY2VUYWJsZUtleXNCeVByb2plY3ROYW1lXyBvciBjbGllbnRUYWJsZUtleXNCeVByb2plY3ROYW1lXyB3aXRoCi0gICAqIHRoZSBwcm92aWRlZCBwcm9qZWN0IG5hbWUgYW5kIGtleS4gVGhpcyBpcyBjYWxsZWQgd2hlbmV2ZXIgYSBuZXcgZW50cnkgaXMgCi0gICAqIGFkZGVkIHRvIHNlcnZpY2VGYWNldE1hdGNoVGFibGVfIG9yIGNsaWVudEZhY2V0TWF0Y2hUYWJsZV8uCi0gICAqIEBwYXJhbSBpc0NsaWVudCB0cnVlIGlmIHJ1bnRpbWVJZCBpcyBhIGNsaWVudFJ1bnRpbWVJZC4gZmFsc2UgaWYgcnVudGltZUlkIGlzIGEgc2VydmljZVJ1bnRpbWVJZC4KLSAgICogQHBhcmFtIGtleSAKLSAgICogQHBhcmFtIHByb2plY3ROYW1lCi0gICAqLwotICBwcml2YXRlIHZvaWQgdXBkYXRlVGFibGVPZktleXMoYm9vbGVhbiBpc0NsaWVudCwgU3RyaW5nIGtleSwgU3RyaW5nIHByb2plY3ROYW1lKQotICB7Ci0gICAgU2V0IHNldE9mS2V5c0ZvclByb2plY3ROYW1lID0gbnVsbDsKLSAgICBpZiAoaXNDbGllbnQpCi0gICAgewotICAgICAgc2V0T2ZLZXlzRm9yUHJvamVjdE5hbWUgPSAoU2V0KWNsaWVudFRhYmxlS2V5c0J5UHJvamVjdE5hbWVfLmdldChwcm9qZWN0TmFtZSk7ICAgICAgCi0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBzZXRPZktleXNGb3JQcm9qZWN0TmFtZSA9IChTZXQpc2VydmljZVRhYmxlS2V5c0J5UHJvamVjdE5hbWVfLmdldChwcm9qZWN0TmFtZSk7Ci0gICAgfQotICAgIAotICAgIGlmIChzZXRPZktleXNGb3JQcm9qZWN0TmFtZSA9PSBudWxsKQotICAgIHsKLSAgICAgIC8vQWRkIGFuIGVudHJ5IGluIHRoZSB0YWJsZSBmb3IgdGhpcyBwcm9qZWN0LgotICAgICAgU2V0IGtleXMgPSBuZXcgSGFzaFNldCgpOwotICAgICAga2V5cy5hZGQoa2V5KTsKLSAgICAgIGlmIChpc0NsaWVudCkKLSAgICAgIHsKLSAgICAgICAgY2xpZW50VGFibGVLZXlzQnlQcm9qZWN0TmFtZV8ucHV0KHByb2plY3ROYW1lLCBrZXlzKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgc2VydmljZVRhYmxlS2V5c0J5UHJvamVjdE5hbWVfLnB1dChwcm9qZWN0TmFtZSwga2V5cyk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvL1VwZGF0ZSB0aGUgZW50cnkgaW4gdGhlIHRhYmxlIGZvciB0aGlzIHByb2plY3QuCi0gICAgICBzZXRPZktleXNGb3JQcm9qZWN0TmFtZS5hZGQoa2V5KTsgICAgICAKLSAgICB9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB7QGxpbmsgRmFjZXRNYXRjaGVyfSBjYWxjdWxhdGVkIGZvciB0aGUgZ2l2ZW4gc2VydmljZVJ1bnRpbWUgb3IgY2xpZW50UnVudGltZSBhbmQgcHJvamVjdAotICAgKiBAcGFyYW0gaXNDbGllbnQgdHJ1ZSBpZiBydW50aW1lSWQgaXMgYSBjbGllbnRSdW50aW1lSWQuIGZhbHNlIGlmIHJ1bnRpbWVJZCBpcyBhIHNlcnZpY2VSdW50aW1lSWQuCi0gICAqIEBwYXJhbSBydW50aW1lSWQgdGhlIGlkIG9mIGEgY2xpZW50UnVudGltZSBpZiBpc0NsaWVudCBpcyB0cnVlIG9yIHRoZSBpZCBvZiBhIHNlcnZpY2VSdW50aW1lIGlmCi0gICAqIGlzQ2xpZW50IGlzIGZhbHNlLgotICAgKiBAcGFyYW0gcHJvamVjdE5hbWUgdGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgcHJvamVjdC4KLSAgICogQHJldHVybiBGYWNldE1hdGNoZXIgcmVzdWx0aW5nIGZyb20gY2FsbGluZyBGYWNldFV0aWxzLm1hdGNoKC4uKSB1c2luZyB0aGUgc2VydmljZVJ1bnRpbWUgb3IgY2xpZW50UnVudGltZSBpZAotICAgKiBhbmQgdGhlIHByb2plY3QgbmFtZS4gUmV0dXJucyBudWxsIGlmIHRoZSBwcm9qZWN0IGRvZXNuJ3QgZXhpc3QuIE5vbi1mYWNldGVkIGV4aXN0aW5nIHByb2plY3RzIHdpbGwgYWx3YXlzIHJlc3VsdAotICAgKiBpbiBhIEZhY2V0TWF0Y2hlciB3aXRoIGlzTWF0Y2goKSBlcXVhbCB0byBmYWxzZSAod2l0aCB0aGUgZXhjZXB0aW9uIG9mIEphdmEgcHJvamVjdHMgd2hpY2ggYXJlIGEgc3BlY2lhbCBjYXNlIAotICAgKiAtIHNlZSBGYWNldFV0aWxzLmdldEZhY2V0c0ZvclByb2plY3QoKSkuCi0gICAqLwotICBwcml2YXRlIEZhY2V0TWF0Y2hlciBjYWxjdWxhdGVGYWNldE1hdGNoZXIoYm9vbGVhbiBpc0NsaWVudCwgU3RyaW5nIHJ1bnRpbWVJZCwgU3RyaW5nIHByb2plY3ROYW1lKQotICB7Ci0gICAgRmFjZXRNYXRjaGVyIGZtID0gbnVsbDsKLSAgICBSZXF1aXJlZEZhY2V0VmVyc2lvbltdIHJmdnMgPSBudWxsOwotICAgIGlmIChpc0NsaWVudCkKLSAgICB7Ci0gICAgICBDbGllbnRSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0Q2xpZW50UnVudGltZURlc2NyaXB0b3JCeUlkKHJ1bnRpbWVJZCk7Ci0gICAgICByZnZzID0gZGVzYy5nZXRSZXF1aXJlZEZhY2V0VmVyc2lvbnMoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yQnlJZChydW50aW1lSWQpOwotICAgICAgcmZ2cyA9IGRlc2MuZ2V0UmVxdWlyZWRGYWNldFZlcnNpb25zKCk7Ci0gICAgfQotICAgIAotICAgIFNldCBmYWNldFZlcnNpb25zID0gRmFjZXRVdGlscy5nZXRGYWNldHNGb3JQcm9qZWN0KHByb2plY3ROYW1lKTsKLSAgICBpZiAoZmFjZXRWZXJzaW9ucyA9PSBudWxsKQotICAgIHsKLSAgICAgIGZtID0gbmV3IEZhY2V0TWF0Y2hlcigpOwotICAgICAgZm0uc2V0TWF0Y2goZmFsc2UpOwotICAgICAgcmV0dXJuIGZtOwotICAgIH0gICAgCi0gICAgCi0gICAgZm0gPSBGYWNldFV0aWxzLm1hdGNoKHJmdnMsIGZhY2V0VmVyc2lvbnMpOwotICAgIAotICAgIC8vIENoZWNrIGlmIHRoZSBmYWNldCBydW50aW1lIHJlcXVpcmVkIGJ5IHRoZSByZXF1aXJlZCBmYWNldCBpcyBzdXBwb3J0ZWQKLSAgICAvLyBieSB0aGUgcHJvamVjdCB3aXRob3V0IGNoYW5pbmcgaXQncyBjdXJyZW50IGZhY2V0IHJ1bnRpbWUKLSAgICAKLSAgICBJUnVudGltZSBmUHJvamVjdFJ1bnRpbWUgPSBGYWNldFV0aWxzLmdldEZhY2V0UnVudGltZUZvclByb2plY3QocHJvamVjdE5hbWUpOwotICAgIGlmIChmUHJvamVjdFJ1bnRpbWUgIT0gbnVsbCkgewotICAgIAlTdHJpbmcgZlByb2plY3RSdW50aW1lTmFtZSA9IGZQcm9qZWN0UnVudGltZS5nZXROYW1lKCk7Ci0gICAgCWJvb2xlYW4gcHJvamVjdFN1cHBvcnRSZXF1aXJlZEZhY2V0UnVudGltZSA9IGZhbHNlOwotICAgIAlTZXQgcnRzID0gRmFjZXRVdGlscy5nZXRSdW50aW1lcyhyZnZzKTsKLSAgICAJZm9yIChJdGVyYXRvciBpdGVyYXRvciA9IHJ0cy5pdGVyYXRvcigpOyBpdGVyYXRvci5oYXNOZXh0KCkgJiYgIXByb2plY3RTdXBwb3J0UmVxdWlyZWRGYWNldFJ1bnRpbWU7KSB7Ci0gICAgCQlJUnVudGltZSBmUmVxdWlyZWRSdW50aW1lID0gKElSdW50aW1lKSBpdGVyYXRvci5uZXh0KCk7Ci0gICAgCQlpZiAoZlJlcXVpcmVkUnVudGltZSAhPSBudWxsKSB7Ci0gICAgCQkJaWYgKGZSZXF1aXJlZFJ1bnRpbWUuZ2V0TmFtZSgpLmVxdWFscyhmUHJvamVjdFJ1bnRpbWVOYW1lKSkgewotICAgIAkJCQlwcm9qZWN0U3VwcG9ydFJlcXVpcmVkRmFjZXRSdW50aW1lID0gdHJ1ZTsKLSAgICAJCQl9Ci0gICAgCQl9Ci0gICAgCX0KLQotICAgIAkvLyBpZiBwcm9qZWN0IGRvZXMgbm90IHN1cHBvcnQgdGhlIHJlcXVpcmVkIGZhY2V0IHJ1bnRpbWUsIHNldCBGYWNldE1hdGNoIG1hdGNoIHRvIGZhbHNlCi0gICAgCWlmICghcHJvamVjdFN1cHBvcnRSZXF1aXJlZEZhY2V0UnVudGltZSkgewotICAgIAkJZm0uc2V0TWF0Y2goZmFsc2UpOwotICAgIAl9Ci0gICAgfQotICAgIHJldHVybiBmbTsKLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIGdldEtleShTdHJpbmcgYSwgU3RyaW5nIGIpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIga2V5c2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAga2V5c2IuYXBwZW5kKGEpOwotICAgIGtleXNiLmFwcGVuZCgiLyIpOwotICAgIGtleXNiLmFwcGVuZChiKTsgICAgCi0gICAgcmV0dXJuIGtleXNiLnRvU3RyaW5nKCk7ICAgIAotICB9ICAKLSAgCi0gIC8qKgotICAgKiBSZW1vdmVzIGFsbCB0YWJsZSBlbnRyaWVzIGluIHRoaXMgY2FjaGUgZm9yIHRoZSBnaXZlbiBwcm9qZWN0Ci0gICAqIEBwYXJhbSBpc0NsaWVudCB0cnVlIHRvIHJlbW92ZSBlbnRyaWVzIGZyb20gY2xpZW50IHNpZGUgdGFibGVzLiBmYWxzZSB0byByZW1vdmUgZW50cmllcyBmcm9tIHNlcnZpY2Ugc2lkZSB0YWJsZXMKLSAgICogQHBhcmFtIHByb2plY3ROYW1lCi0gICAqLwotICBwcml2YXRlIHZvaWQgcmVtb3ZlVGFibGVFbnRyaWVzRm9yUHJvamVjdChib29sZWFuIGlzQ2xpZW50LCBTdHJpbmcgcHJvamVjdE5hbWUpCi0gIHsKLSAgICAvL0ZpcnN0IHJlbW92ZSB0aGUgZW50cmllcyBmcm9tIGNsaWVudEZhY2V0TWF0Y2hUYWJsZV8gb3Igc2VydmljZUZhY2V0TWF0Y2hUYWJsZV8KLSAgICAvL3RoYXQgaGF2ZSBrZXlzIGNvbnRhaW5pbmcgdGhpcyBwcm9qZWN0IG5hbWUuCi0gICAgU2V0IHNldE9mS2V5c0ZvclByb2plY3ROYW1lID0gbnVsbDsKLSAgICBpZiAoaXNDbGllbnQpCi0gICAgewotICAgICAgc2V0T2ZLZXlzRm9yUHJvamVjdE5hbWUgPSAoU2V0KWNsaWVudFRhYmxlS2V5c0J5UHJvamVjdE5hbWVfLmdldChwcm9qZWN0TmFtZSk7ICAgICAgCi0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBzZXRPZktleXNGb3JQcm9qZWN0TmFtZSA9IChTZXQpc2VydmljZVRhYmxlS2V5c0J5UHJvamVjdE5hbWVfLmdldChwcm9qZWN0TmFtZSk7Ci0gICAgfQotICAgIAotICAgIGlmIChzZXRPZktleXNGb3JQcm9qZWN0TmFtZSAhPSBudWxsKQotICAgIHsgCi0gICAgICBJdGVyYXRvciBrZXlzSXRyID0gc2V0T2ZLZXlzRm9yUHJvamVjdE5hbWUuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChrZXlzSXRyLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIGtleSA9IChTdHJpbmcpa2V5c0l0ci5uZXh0KCk7Ci0gICAgICAgIGlmIChpc0NsaWVudCkKLSAgICAgICAgeyAKLSAgICAgICAgICBjbGllbnRGYWNldE1hdGNoVGFibGVfLnJlbW92ZShrZXkpOyAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBzZXJ2aWNlRmFjZXRNYXRjaFRhYmxlXy5yZW1vdmUoa2V5KTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgCi0gICAgICAvL1NlY29uZCwgcmVtb3ZlIHRoZSBlbnRyeSBpbiBjbGllbnRUYWJsZUtleXNCeVByb2plY3ROYW1lXyBvciBzZXJ2aWNlVGFibGVLZXlzQnlQcm9qZWN0TmFtZV8KLSAgICAgIC8vd2l0aCB0aGlzIHByb2plY3ROYW1lIGFzIHRoZSBrZXkuCi0gICAgICBpZiAoaXNDbGllbnQpCi0gICAgICB7Ci0gICAgICAgIGNsaWVudFRhYmxlS2V5c0J5UHJvamVjdE5hbWVfLnJlbW92ZShwcm9qZWN0TmFtZSk7ICAKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgc2VydmljZVRhYmxlS2V5c0J5UHJvamVjdE5hbWVfLnJlbW92ZShwcm9qZWN0TmFtZSk7Ci0gICAgICB9Ci0gICAgICAKLSAgICB9Ci0gICAgCi0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyBhIHNldCBvZiB0ZW1wbGF0ZXMgc3VwcG9ydGVkIGJ5IHRoZSBnaXZlbiBjbGllbnRSdW50aW1lCi0gICAqIEBwYXJhbSBjbGllbnRSdW50aW1lSWQgaWQgb2YgYSBjbGllbnRSdW50aW1lCi0gICAqIEByZXR1cm5zIFNldCAoZWxlbWVudHR5cGU6IElGYWNldGVkUHJvamVjdFRlbXBsYXRlKQotICAgKi8KLSAgcHVibGljIHN5bmNocm9uaXplZCBTZXQgZ2V0VGVtcGxhdGVzRm9yQ2xpZW50UnVudGltZShTdHJpbmcgY2xpZW50UnVudGltZUlkKQotICB7Ci0gICAgU2V0IHRlbXBsYXRlcyA9IChTZXQpdGVtcGxhdGVzQnlDbGllbnRSdW50aW1lSWRfLmdldChjbGllbnRSdW50aW1lSWQpOwotICAgIGlmICh0ZW1wbGF0ZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvL1JldHVybiB0aGUgY2FjaGVkIHNldCBvZiB0ZW1wbGF0ZXMuCi0gICAgICByZXR1cm4gdGVtcGxhdGVzOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy9DYWxjdWxhdGUgdGhlIHRlbXBsYXRlcywgY2FjaGUgdGhlbSBmb3IgbGF0ZXIgdXNlLCBhbmQgcmV0dXJuIHRoZW0uCi0gICAgICBDbGllbnRSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0Q2xpZW50UnVudGltZURlc2NyaXB0b3JCeUlkKGNsaWVudFJ1bnRpbWVJZCk7Ci0gICAgICBTZXQgdmFsaWRUZW1wbGF0ZXMgPSBnZXRUZW1wbGF0ZXMoZGVzYy5nZXRSZXF1aXJlZEZhY2V0VmVyc2lvbnMoKSk7Ci0gICAgICB0ZW1wbGF0ZXNCeUNsaWVudFJ1bnRpbWVJZF8ucHV0KGNsaWVudFJ1bnRpbWVJZCwgdmFsaWRUZW1wbGF0ZXMpOwotICAgICAgcmV0dXJuIHZhbGlkVGVtcGxhdGVzOwotICAgIH0KLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgYSBzZXQgb2YgdGVtcGxhdGVzIHN1cHBvcnRlZCBieSB0aGUgZ2l2ZW4gc2VydmljZVJ1bnRpbWUKLSAgICogQHBhcmFtIHNlcnZpY2VSdW50aW1lSWQgaWQgb2YgYSBzZXJ2aWNlUnVudGltZQotICAgKiBAcmV0dXJucyBTZXQgKGVsZW1lbnR0eXBlOiBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZSkKLSAgICovICAKLSAgcHVibGljIHN5bmNocm9uaXplZCBTZXQgZ2V0VGVtcGxhdGVzRm9yU2VydmljZVJ1bnRpbWUoU3RyaW5nIHNlcnZpY2VSdW50aW1lSWQpCi0gIHsKLSAgICBTZXQgdGVtcGxhdGVzID0gKFNldCl0ZW1wbGF0ZXNCeVNlcnZpY2VSdW50aW1lSWRfLmdldChzZXJ2aWNlUnVudGltZUlkKTsKLSAgICBpZiAodGVtcGxhdGVzICE9IG51bGwpCi0gICAgewotICAgICAgLy9SZXR1cm4gdGhlIGNhY2hlZCBzZXQgb2YgdGVtcGxhdGVzLgotICAgICAgcmV0dXJuIHRlbXBsYXRlczsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vQ2FsY3VsYXRlIHRoZSB0ZW1wbGF0ZXMsIGNhY2hlIHRoZW0gZm9yIGxhdGVyIHVzZSwgYW5kIHJldHVybiB0aGVtLgotICAgICAgU2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yIGRlc2MgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTZXJ2aWNlUnVudGltZURlc2NyaXB0b3JCeUlkKHNlcnZpY2VSdW50aW1lSWQpOwotICAgICAgU2V0IHZhbGlkVGVtcGxhdGVzID0gZ2V0VGVtcGxhdGVzKGRlc2MuZ2V0UmVxdWlyZWRGYWNldFZlcnNpb25zKCkpOwotICAgICAgdGVtcGxhdGVzQnlTZXJ2aWNlUnVudGltZUlkXy5wdXQoc2VydmljZVJ1bnRpbWVJZCwgdmFsaWRUZW1wbGF0ZXMpOwotICAgICAgcmV0dXJuIHZhbGlkVGVtcGxhdGVzOwotICAgIH0KLSAgfQotIAotICAKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHNldCBvZiB0ZW1wbGF0ZXMgdGhhdCBzdXBwb3J0ZWQgdGhlIGdpdmVuIHJlcXVpcmVkIGZhY2V0IHZlcnNpb25zLgotICAgKiBAcGFyYW0gcmVxdWlyZWRGYWNldFZlcnNpb25zCi0gICAqIEByZXR1cm4gU2V0IGNvbnRhaW5pbmcgZWxlbWV0cyBvZiB0eXBlIHtAbGluayBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZX0uCi0gICAqLwotICBwcml2YXRlIFNldCBnZXRUZW1wbGF0ZXMoUmVxdWlyZWRGYWNldFZlcnNpb25bXSByZXF1aXJlZEZhY2V0VmVyc2lvbnMpCi0gIHsKLSAgICBTZXQgdGVtcGxhdGVzID0gbmV3IEhhc2hTZXQoKTsKLSAgICAKLSAgICBmb3IoIEl0ZXJhdG9yIGl0ciA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmdldFRlbXBsYXRlcygpLml0ZXJhdG9yKCk7IGl0ci5oYXNOZXh0KCk7ICkKLSAgICB7Ci0gICAgICAgIGZpbmFsIElGYWNldGVkUHJvamVjdFRlbXBsYXRlIHRlbXBsYXRlID0gKElGYWNldGVkUHJvamVjdFRlbXBsYXRlKSBpdHIubmV4dCgpOwotICAgICAgICBTdHJpbmcgdGVtcGxhdGVJZCA9IHRlbXBsYXRlLmdldElkKCk7Ci0gICAgICAgIGlmICh0ZW1wbGF0ZUlkLmluZGV4T2YoImVhciIpID09IC0xICYmIHRlbXBsYXRlSWQuaW5kZXhPZigid3N0LndlYiIpID09IC0xKSAvL0Rvbid0IGluY2x1ZGUgdGhlIEVBUnMhIQotICAgICAgICB7ICAgICAgICAgICAKLSAgICAgICAgICBTZXRbXSBjb21iaW5hdGlvbnMgPSBGYWNldFNldHNCeVRlbXBsYXRlQ2FjaGUuZ2V0SW5zdGFuY2UoKS5nZXRGYWNldFZlcnNpb25Db21iaW5hdGlvbnNGcm9tVGVtcGxhdGUodGVtcGxhdGVJZCk7Ci0gICAgICAgICAgZm9yIChpbnQgaT0wOyBpPGNvbWJpbmF0aW9ucy5sZW5ndGg7IGkrKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBGYWNldE1hdGNoZXIgZm0gPSBGYWNldFV0aWxzLm1hdGNoKHJlcXVpcmVkRmFjZXRWZXJzaW9ucywgY29tYmluYXRpb25zW2ldKTsKLSAgICAgICAgICAgIGlmIChmbS5pc01hdGNoKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIC8vRm91bmQgYSBjb21iaW5hdGlvbiB0aGF0IHdvcmtlZC4gQWRkIHRoZSB0ZW1wbGF0ZSB0byB0aGUgbGlzdCBhbmQgbW92ZSBvbi4KLSAgICAgICAgICAgICAgdGVtcGxhdGVzLmFkZCh0ZW1wbGF0ZSk7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gICAgCi0gICAgCi0gICAgcmV0dXJuIHRlbXBsYXRlczsKLSAgICAKLSAgfQotICAKLSAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHJlc291cmNlQ2hhbmdlZChJUmVzb3VyY2VDaGFuZ2VFdmVudCBldmVudCkKLSAgewotICAgIGlmIChldmVudC5nZXRUeXBlKCkgPT0gSVJlc291cmNlQ2hhbmdlRXZlbnQuUFJFX0RFTEVURSkKLSAgICB7Ci0gICAgICBJUmVzb3VyY2UgcHJvamVjdFJlc291cmNlID0gZXZlbnQuZ2V0UmVzb3VyY2UoKTsKLSAgICAgIGlmIChwcm9qZWN0UmVzb3VyY2UhPW51bGwpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBwcm9qZWN0TmFtZSA9IHByb2plY3RSZXNvdXJjZS5nZXROYW1lKCk7Ci0gICAgICAgIAotICAgICAgICAvL0FkZCB0aGlzIHByb2plY3QgbmFtZSB0byB0aGUgbGlzdCBvZiBwcm9qZWN0IGVudHJpZXMKLSAgICAgICAgLy90byBkZWxldGUuIE5leHQgdGltZSBnZXRNYXRjaEZvclByb2plY3QgaXMgY2FsbGVkIGFsbAotICAgICAgICAvL2VudHJpZXMgZm9yIHRoaXMgcHJvamVjdCBmcm9tIGFsbCB0YWJsZXMgaW4gdGhpcyBjYWNoZSAKLSAgICAgICAgLy93aWxsIGJlIGRlbGV0ZWQuCi0gICAgICAgIHByb2plY3RFbnRyaWVzVG9EZWxldGVfLmFkZChwcm9qZWN0TmFtZSk7Ci0gICAgICB9Ci0gICAgfSAgICAKLSAgfSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dzcnQvUnVudGltZURlc2NyaXB0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NydC9SdW50aW1lRGVzY3JpcHRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzJiYjM3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NydC9SdW50aW1lRGVzY3JpcHRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjIxICAgMTE5MTExIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgUnVudGltZURlc2NyaXB0b3IKLXsKLQotICBwcml2YXRlIElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtOwotICBwcml2YXRlIFN0cmluZyBpZDsKLSAgcHJpdmF0ZSBTdHJpbmcgbGFiZWw7Ci0gIHByaXZhdGUgU3RyaW5nIHNlcnZlclJlcXVpcmVkU3RyaW5nOwotICBwcml2YXRlIGJvb2xlYW4gc2VydmVyUmVxdWlyZWQ7Ci0gIAotCi0gIHB1YmxpYyBSdW50aW1lRGVzY3JpcHRvcihJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbSkKLSAgewotICAgIHRoaXMuZWxlbSA9IGVsZW07Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SWQoKQotICB7Ci0gICAgaWYgKGlkID09IG51bGwpCi0gICAgewotICAgICAgaWQgPSBlbGVtLmdldEF0dHJpYnV0ZSgiaWQiKTsKLSAgICB9Ci0gICAgcmV0dXJuIGlkOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldExhYmVsKCkKLSAgewotICAgIGlmIChsYWJlbCA9PSBudWxsKQotICAgIHsKLSAgICAgIGxhYmVsID0gZWxlbS5nZXRBdHRyaWJ1dGUoImxhYmVsIik7Ci0gICAgfQotICAgIHJldHVybiBsYWJlbDsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZ1tdIGdldEoyZWVMZXZlbHMoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBTdHJpbmdbXXsiMTMiLCAiMTQifTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0U2VydmVyUmVxdWlyZWQoKQotICB7Ci0gICAgaWYgKHNlcnZlclJlcXVpcmVkU3RyaW5nID09IG51bGwpCi0gICAgeyAgICAgCi0gICAgICAvL0RlZmF1bHRzIHRvIHRydWUgaWYgdGhlIGV4dGVuc2lvbiBvbWl0cyB0aGlzIGF0dHJpYnV0ZQotICAgICAgc2VydmVyUmVxdWlyZWQgPSB0cnVlOwotCi0gICAgICBzZXJ2ZXJSZXF1aXJlZFN0cmluZyA9IGVsZW0uZ2V0QXR0cmlidXRlKCJzZXJ2ZXJSZXF1aXJlZCIpOwotICAgICAgaWYgKHNlcnZlclJlcXVpcmVkU3RyaW5nICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHNlcnZlclJlcXVpcmVkID0gQm9vbGVhbi52YWx1ZU9mKHNlcnZlclJlcXVpcmVkU3RyaW5nKS5ib29sZWFuVmFsdWUoKTsKLSAgICAgIH0gICAgICAgICAgICAgCi0gICAgICAKLSAgICB9ICAgIAotICAgIHJldHVybiBzZXJ2ZXJSZXF1aXJlZDsgICAgCi0gIH0KLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dzcnQvU2VsZWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dzcnQvU2VsZWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzMTQ1NGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c3J0L1NlbGVjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSVNlbGVjdGlvbjsKLQotcHVibGljIGNsYXNzIFNlbGVjdGlvbiBpbXBsZW1lbnRzIElTZWxlY3Rpb24gewotCi0JcHJpdmF0ZSBPYmplY3RbXSBzZWxlY3Rpb247Ci0JCi0JcHVibGljIE9iamVjdFtdIGdldFNlbGVjdGlvbigpIAotCXsKLQkJcmV0dXJuIHNlbGVjdGlvbjsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uKE9iamVjdFtdIHNlbGVjdGlvbikKLQl7Ci0JCXRoaXMuc2VsZWN0aW9uID0gc2VsZWN0aW9uOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c3J0L1NlcnZpY2VSdW50aW1lRGVzY3JpcHRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c3J0L1NlcnZpY2VSdW50aW1lRGVzY3JpcHRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjNlNjcyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NydC9TZXJ2aWNlUnVudGltZURlc2NyaXB0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA4MDIgICAxNTIxNTAgbWFodXRjaEBjYS5pYm0uY29tCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLlJlcXVpcmVkRmFjZXRWZXJzaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLklQcm9qZWN0RmFjZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuSVByb2plY3RGYWNldFZlcnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuUHJvamVjdEZhY2V0c01hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSVdlYlNlcnZpY2VSdW50aW1lOwotCi0KLXB1YmxpYyBjbGFzcyBTZXJ2aWNlUnVudGltZURlc2NyaXB0b3IKLXsKLSAgcHJpdmF0ZSBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbTsKLSAgcHJpdmF0ZSBIYXNodGFibGUgYWxsV2ViU2VydmljZUltcGxzOwotICBwcml2YXRlIEhhc2h0YWJsZSBhbGxSdW50aW1lczsKLSAgcHJpdmF0ZSBTdHJpbmcgaWQ7Ci0gIHByaXZhdGUgV2ViU2VydmljZUltcGwgc2VydmljZUltcGxlbWVudGF0aW9uVHlwZTsKLSAgcHJpdmF0ZSBSdW50aW1lRGVzY3JpcHRvciBydW50aW1lOwotICBwcml2YXRlIGJvb2xlYW4gYm90dG9tVXAgPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRvcERvd24gPSBmYWxzZTsKLSAgcHJpdmF0ZSBTdHJpbmcgc2VydmljZVJ1bnRpbWVDbGFzc05hbWU7Ci0gIHByaXZhdGUgSVdlYlNlcnZpY2VSdW50aW1lIHdlYlNlcnZpY2VSdW50aW1lOwotICBwcml2YXRlIFJlcXVpcmVkRmFjZXRWZXJzaW9uW10gcmVxdWlyZWRGYWNldFZlcnNpb25zOwotICBwcml2YXRlIFNldCBwcm9qZWN0RmFjZXRWZXJzaW9uczsKLSAgCi0gIHB1YmxpYyBTZXJ2aWNlUnVudGltZURlc2NyaXB0b3IoSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW0sIEhhc2h0YWJsZSBhbGxXZWJTZXJ2aWNlSW1wbHMsIEhhc2h0YWJsZSBhbGxSdW50aW1lcykKLSAgewotICAgIHRoaXMuZWxlbSA9IGVsZW07Ci0gICAgdGhpcy5hbGxXZWJTZXJ2aWNlSW1wbHMgPSBhbGxXZWJTZXJ2aWNlSW1wbHM7Ci0gICAgdGhpcy5hbGxSdW50aW1lcyA9IGFsbFJ1bnRpbWVzOwotCi0gICAgYm90dG9tVXAgPSAoQm9vbGVhbi52YWx1ZU9mKGVsZW0uZ2V0QXR0cmlidXRlKCJib3R0b21VcCIpKSkuYm9vbGVhblZhbHVlKCk7Ci0gICAgdG9wRG93biA9IChCb29sZWFuLnZhbHVlT2YoZWxlbS5nZXRBdHRyaWJ1dGUoInRvcERvd24iKSkpLmJvb2xlYW5WYWx1ZSgpOyAgICAKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0Qm90dG9tVXAoKQotICB7ICAgIAotICAgIHJldHVybiBib3R0b21VcDsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRJZCgpCi0gIHsKLSAgICBpZiAoaWQgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZCA9IGVsZW0uZ2V0QXR0cmlidXRlKCJpZCIpOwotICAgIH0KLSAgICByZXR1cm4gaWQ7Ci0gIH0KLSAgCi0gIAotICBwdWJsaWMgUmVxdWlyZWRGYWNldFZlcnNpb25bXSBnZXRSZXF1aXJlZEZhY2V0VmVyc2lvbnMoKQotICB7Ci0gICAgaWYgKHJlcXVpcmVkRmFjZXRWZXJzaW9ucyA9PSBudWxsKQotICAgIHsKLSAgICAgIEFycmF5TGlzdCByZXF1aXJlZEZhY2V0VmVyc2lvbkxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBmYWNldEVsZW1zID0gZWxlbS5nZXRDaGlsZHJlbigicmVxdWlyZWQtZmFjZXQtdmVyc2lvbiIpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmYWNldEVsZW1zLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgIAlTdHJpbmcgZmFjZXRJRCA9IGZhY2V0RWxlbXNbaV0uZ2V0QXR0cmlidXRlKCJmYWNldCIpOwotICAgIAlpZiAoUHJvamVjdEZhY2V0c01hbmFnZXIuaXNQcm9qZWN0RmFjZXREZWZpbmVkKGZhY2V0SUQpKQotICAgIAl7Ci0JICAgICAgICBSZXF1aXJlZEZhY2V0VmVyc2lvbiByZnYgPSBuZXcgUmVxdWlyZWRGYWNldFZlcnNpb24oKTsKLQkgICAgICAgIElQcm9qZWN0RmFjZXQgcHJvamVjdEZhY2V0ID0gUHJvamVjdEZhY2V0c01hbmFnZXIuZ2V0UHJvamVjdEZhY2V0KGZhY2V0SUQpOyAgICAgICAgCi0JICAgICAgICBJUHJvamVjdEZhY2V0VmVyc2lvbiBwcm9qZWN0RmFjZXRWZXJzaW9uID0gcHJvamVjdEZhY2V0LmdldFZlcnNpb24oZmFjZXRFbGVtc1tpXS5nZXRBdHRyaWJ1dGUoInZlcnNpb24iKSk7Ci0JICAgICAgICByZnYuc2V0UHJvamVjdEZhY2V0VmVyc2lvbihwcm9qZWN0RmFjZXRWZXJzaW9uKTsKLQkgICAgICAgIFN0cmluZyBhbGxvd05ld2VyVmFsdWUgPSBmYWNldEVsZW1zW2ldLmdldEF0dHJpYnV0ZSgiYWxsb3ctbmV3ZXIiKTsKLQkgICAgICAgIGlmIChhbGxvd05ld2VyVmFsdWUgPT0gbnVsbCkKLQkgICAgICAgIHsKLQkgICAgICAgICAgcmZ2LnNldEFsbG93TmV3ZXIoZmFsc2UpOwotCSAgICAgICAgfQotCSAgICAgICAgZWxzZQotCSAgICAgICAgewotCSAgICAgICAgICByZnYuc2V0QWxsb3dOZXdlcihCb29sZWFuLnZhbHVlT2YoYWxsb3dOZXdlclZhbHVlKS5ib29sZWFuVmFsdWUoKSk7Ci0JICAgICAgICB9Ci0JICAgICAgICAKLQkgICAgICAgIHJlcXVpcmVkRmFjZXRWZXJzaW9uTGlzdC5hZGQocmZ2KTsKLSAgICAJfSAgICAJCi0gICAgICB9Ci0gICAgICAKLSAgICAgIHJlcXVpcmVkRmFjZXRWZXJzaW9ucyA9IChSZXF1aXJlZEZhY2V0VmVyc2lvbltdKXJlcXVpcmVkRmFjZXRWZXJzaW9uTGlzdC50b0FycmF5KG5ldyBSZXF1aXJlZEZhY2V0VmVyc2lvbltde30pOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVxdWlyZWRGYWNldFZlcnNpb25zOwotICB9Ci0gIAotICBwdWJsaWMgU2V0IGdldFByb2plY3RGYWNldFZlcnNpb25zKCkKLSAgewotICAgIGlmIChwcm9qZWN0RmFjZXRWZXJzaW9ucyA9PSBudWxsKQotICAgIHsKLSAgICAgcHJvamVjdEZhY2V0VmVyc2lvbnMgPSBuZXcgSGFzaFNldCgpOwotICAgICBSZXF1aXJlZEZhY2V0VmVyc2lvbltdIHJmdiA9IGdldFJlcXVpcmVkRmFjZXRWZXJzaW9ucygpOwotICAgICBmb3IgKGludCBpPTA7IGk8cmZ2Lmxlbmd0aDsgaSsrKQotICAgICB7Ci0gICAgICAgcHJvamVjdEZhY2V0VmVyc2lvbnMuYWRkKHJmdltpXS5nZXRQcm9qZWN0RmFjZXRWZXJzaW9uKCkpOwotICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBwcm9qZWN0RmFjZXRWZXJzaW9uczsgICAgCi0gIH0KLSAgCi0gIHB1YmxpYyBSdW50aW1lRGVzY3JpcHRvciBnZXRSdW50aW1lKCkKLSAgewotICAgIGlmIChydW50aW1lID09IG51bGwpCi0gICAgewotICAgICBTdHJpbmcgcnVudGltZUlkID0gZWxlbS5nZXRBdHRyaWJ1dGUoInJ1bnRpbWVJZCIpOwotICAgICBydW50aW1lID0gKFJ1bnRpbWVEZXNjcmlwdG9yKWFsbFJ1bnRpbWVzLmdldChydW50aW1lSWQpOyAgICAgCi0gICAgfQotICAgIHJldHVybiBydW50aW1lOwotICB9Ci0gIAotICBwdWJsaWMgV2ViU2VydmljZUltcGwgZ2V0U2VydmljZUltcGxlbWVudGF0aW9uVHlwZSgpCi0gIHsKLSAgICBpZiAoc2VydmljZUltcGxlbWVudGF0aW9uVHlwZSA9PSBudWxsKQotICAgIHsgICAgICAKLSAgICAgIFN0cmluZyBzZXJ2aWNlSW1wbGVtZW50YXRpb25UeXBlSWQgPSBlbGVtLmdldEF0dHJpYnV0ZSgic2VydmljZUltcGxlbWVudGF0aW9uVHlwZUlkIik7Ci0gICAgICBzZXJ2aWNlSW1wbGVtZW50YXRpb25UeXBlID0gKFdlYlNlcnZpY2VJbXBsKWFsbFdlYlNlcnZpY2VJbXBscy5nZXQoc2VydmljZUltcGxlbWVudGF0aW9uVHlwZUlkKTsKLSAgICB9Ci0gICAgcmV0dXJuIHNlcnZpY2VJbXBsZW1lbnRhdGlvblR5cGU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmljZVJ1bnRpbWVDbGFzc05hbWUoKQotICB7Ci0gICAgaWYgKHNlcnZpY2VSdW50aW1lQ2xhc3NOYW1lID09IG51bGwpCi0gICAgewotICAgICAgc2VydmljZVJ1bnRpbWVDbGFzc05hbWUgPSBlbGVtLmdldEF0dHJpYnV0ZSgiY2xhc3MiKTsKLSAgICB9Ci0gICAgcmV0dXJuIHNlcnZpY2VSdW50aW1lQ2xhc3NOYW1lOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRUb3BEb3duKCkKLSAgewotICAgIHJldHVybiB0b3BEb3duOwotICB9Ci0gIAotICBwdWJsaWMgSVdlYlNlcnZpY2VSdW50aW1lIGdldFdlYlNlcnZpY2VSdW50aW1lKCkKLSAgewotICAgIGlmICh3ZWJTZXJ2aWNlUnVudGltZSA9PSBudWxsKQotICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHdlYlNlcnZpY2VSdW50aW1lID0gKElXZWJTZXJ2aWNlUnVudGltZSllbGVtLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oImNsYXNzIik7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2goQ29yZUV4Y2VwdGlvbiBjZSkKLSAgICAgICAgewotICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHdlYlNlcnZpY2VSdW50aW1lOwotICB9ICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NydC9TZXJ2aWNlVHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c3J0L1NlcnZpY2VUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxN2NjMjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c3J0L1NlcnZpY2VUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjE2ICAgMTI3MTM4IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlU2NlbmFyaW87Ci1pbXBvcnQgY29tLmlibS5pY3UudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci0KLXB1YmxpYyBjbGFzcyBTZXJ2aWNlVHlwZSB7Ci0KLSAgcHJpdmF0ZSBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbV87Ci0gIHByaXZhdGUgSGFzaHRhYmxlIHdlYlNlcnZpY2VJbXBsc187Ci0gIHByaXZhdGUgU3RyaW5nIGlkOwotICBwcml2YXRlIFdlYlNlcnZpY2VJbXBsIHdlYlNlcnZpY2VJbXBsOwotICBwcml2YXRlIFN0cmluZ1tdIGJvdHRvbVVwTW9kdWxlVHlwZXNJbmNsdWRlOwotICBwcml2YXRlIFN0cmluZ1tdIHRvcERvd25Nb2R1bGVUeXBlc0luY2x1ZGU7Ci0gIHByaXZhdGUgU3RyaW5nW10gYm90dG9tVXBNb2R1bGVUeXBlc0V4Y2x1ZGU7Ci0gIHByaXZhdGUgU3RyaW5nW10gdG9wRG93bk1vZHVsZVR5cGVzRXhjbHVkZTsKLQotICAKLQotICAKLSAgcHVibGljIFNlcnZpY2VUeXBlKElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtXywgSGFzaHRhYmxlIHdlYlNlcnZpY2VJbXBsc18pCi0gIHsKLSAgICBzdXBlcigpOwotICAgIHRoaXMuZWxlbV8gPSBlbGVtXzsKLSAgICB0aGlzLndlYlNlcnZpY2VJbXBsc18gPSB3ZWJTZXJ2aWNlSW1wbHNfOwotICB9Ci0KLSAgcHVibGljIFN0cmluZ1tdIGdldEJvdHRvbVVwTW9kdWxlVHlwZXNFeGNsdWRlKCkKLSAgewotICAgIGlmIChib3R0b21VcE1vZHVsZVR5cGVzRXhjbHVkZT09bnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgYXR0ciA9IGVsZW1fLmdldEF0dHJpYnV0ZSgiYnVNb2R1bGVUeXBlc0V4Y2x1ZGUiKTsKLSAgICAgIGlmIChhdHRyICE9IG51bGwgJiYgYXR0ci5sZW5ndGgoKT4wKQotICAgICAgewotICAgICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGF0dHIsICIgIik7Ci0gICAgICAgIGludCBzaXplID0gc3QuY291bnRUb2tlbnMoKTsKLSAgICAgICAgYm90dG9tVXBNb2R1bGVUeXBlc0V4Y2x1ZGUgPSBuZXcgU3RyaW5nW3NpemVdOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGJvdHRvbVVwTW9kdWxlVHlwZXNFeGNsdWRlLmxlbmd0aDsgaSsrKQotICAgICAgICAgIGJvdHRvbVVwTW9kdWxlVHlwZXNFeGNsdWRlW2ldID0gc3QubmV4dFRva2VuKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBib3R0b21VcE1vZHVsZVR5cGVzRXhjbHVkZTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Qm90dG9tVXBNb2R1bGVUeXBlc0V4Y2x1ZGUoU3RyaW5nW10gYm90dG9tVXBNb2R1bGVUeXBlc0V4Y2x1ZGUpCi0gIHsKLSAgICB0aGlzLmJvdHRvbVVwTW9kdWxlVHlwZXNFeGNsdWRlID0gYm90dG9tVXBNb2R1bGVUeXBlc0V4Y2x1ZGU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRCb3R0b21VcE1vZHVsZVR5cGVzSW5jbHVkZSgpCi0gIHsKLSAgICBpZiAoYm90dG9tVXBNb2R1bGVUeXBlc0luY2x1ZGU9PW51bGwpCi0gICAgewotICAgICAgU3RyaW5nIGF0dHIgPSBlbGVtXy5nZXRBdHRyaWJ1dGUoImJ1TW9kdWxlVHlwZXNJbmNsdWRlIik7Ci0gICAgICBpZiAoYXR0ciAhPSBudWxsICYmIGF0dHIubGVuZ3RoKCk+MCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihhdHRyLCAiICIpOwotICAgICAgICBpbnQgc2l6ZSA9IHN0LmNvdW50VG9rZW5zKCk7Ci0gICAgICAgIGJvdHRvbVVwTW9kdWxlVHlwZXNJbmNsdWRlID0gbmV3IFN0cmluZ1tzaXplXTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBib3R0b21VcE1vZHVsZVR5cGVzSW5jbHVkZS5sZW5ndGg7IGkrKykKLSAgICAgICAgICBib3R0b21VcE1vZHVsZVR5cGVzSW5jbHVkZVtpXSA9IHN0Lm5leHRUb2tlbigpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gYm90dG9tVXBNb2R1bGVUeXBlc0luY2x1ZGU7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEJvdHRvbVVwTW9kdWxlVHlwZXNJbmNsdWRlKFN0cmluZ1tdIGJvdHRvbVVwTW9kdWxlVHlwZXNJbmNsdWRlKQotICB7Ci0gICAgdGhpcy5ib3R0b21VcE1vZHVsZVR5cGVzSW5jbHVkZSA9IGJvdHRvbVVwTW9kdWxlVHlwZXNJbmNsdWRlOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldElkKCkKLSAgewotICAgIGlmIChpZD09bnVsbCkKLSAgICB7Ci0gICAgICBpZCA9IGVsZW1fLmdldEF0dHJpYnV0ZSgiaWQiKTsKLSAgICB9Ci0gICAgcmV0dXJuIGlkOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRJZChTdHJpbmcgaWQpCi0gIHsKLSAgICB0aGlzLmlkID0gaWQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRUb3BEb3duTW9kdWxlVHlwZXNFeGNsdWRlKCkKLSAgewotICAgIGlmICh0b3BEb3duTW9kdWxlVHlwZXNFeGNsdWRlPT1udWxsKQotICAgIHsKLSAgICAgIFN0cmluZyBhdHRyID0gZWxlbV8uZ2V0QXR0cmlidXRlKCJ0ZE1vZHVsZVR5cGVzRXhjbHVkZSIpOwotICAgICAgaWYgKGF0dHIgIT0gbnVsbCAmJiBhdHRyLmxlbmd0aCgpPjApCi0gICAgICB7Ci0gICAgICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoYXR0ciwgIiAiKTsKLSAgICAgICAgaW50IHNpemUgPSBzdC5jb3VudFRva2VucygpOwotICAgICAgICB0b3BEb3duTW9kdWxlVHlwZXNFeGNsdWRlID0gbmV3IFN0cmluZ1tzaXplXTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3BEb3duTW9kdWxlVHlwZXNFeGNsdWRlLmxlbmd0aDsgaSsrKQotICAgICAgICAgIHRvcERvd25Nb2R1bGVUeXBlc0V4Y2x1ZGVbaV0gPSBzdC5uZXh0VG9rZW4oKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRvcERvd25Nb2R1bGVUeXBlc0V4Y2x1ZGU7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFRvcERvd25Nb2R1bGVUeXBlc0V4Y2x1ZGUoU3RyaW5nW10gdG9wRG93bk1vZHVsZVR5cGVzRXhjbHVkZSkKLSAgewotICAgIHRoaXMudG9wRG93bk1vZHVsZVR5cGVzRXhjbHVkZSA9IHRvcERvd25Nb2R1bGVUeXBlc0V4Y2x1ZGU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRUb3BEb3duTW9kdWxlVHlwZXNJbmNsdWRlKCkKLSAgewotICAgIGlmICh0b3BEb3duTW9kdWxlVHlwZXNJbmNsdWRlPT1udWxsKQotICAgIHsKLSAgICAgIFN0cmluZyBhdHRyID0gZWxlbV8uZ2V0QXR0cmlidXRlKCJ0ZE1vZHVsZVR5cGVzSW5jbHVkZSIpOwotICAgICAgaWYgKGF0dHIgIT0gbnVsbCAmJiBhdHRyLmxlbmd0aCgpPjApCi0gICAgICB7Ci0gICAgICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoYXR0ciwgIiAiKTsKLSAgICAgICAgaW50IHNpemUgPSBzdC5jb3VudFRva2VucygpOwotICAgICAgICB0b3BEb3duTW9kdWxlVHlwZXNJbmNsdWRlID0gbmV3IFN0cmluZ1tzaXplXTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3BEb3duTW9kdWxlVHlwZXNJbmNsdWRlLmxlbmd0aDsgaSsrKQotICAgICAgICAgIHRvcERvd25Nb2R1bGVUeXBlc0luY2x1ZGVbaV0gPSBzdC5uZXh0VG9rZW4oKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRvcERvd25Nb2R1bGVUeXBlc0luY2x1ZGU7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFRvcERvd25Nb2R1bGVUeXBlc0luY2x1ZGUoU3RyaW5nW10gdG9wRG93bk1vZHVsZVR5cGVzSW5jbHVkZSkKLSAgewotICAgIHRoaXMudG9wRG93bk1vZHVsZVR5cGVzSW5jbHVkZSA9IHRvcERvd25Nb2R1bGVUeXBlc0luY2x1ZGU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBXZWJTZXJ2aWNlSW1wbCBnZXRXZWJTZXJ2aWNlSW1wbCgpCi0gIHsKLSAgICBpZiAod2ViU2VydmljZUltcGwgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgd3NpbXBsSWQgPSBlbGVtXy5nZXRBdHRyaWJ1dGUoImltcGxJZCIpOwotICAgICAgd2ViU2VydmljZUltcGwgPSAoV2ViU2VydmljZUltcGwpd2ViU2VydmljZUltcGxzXy5nZXQod3NpbXBsSWQpOwotICAgIH0KLSAgICByZXR1cm4gd2ViU2VydmljZUltcGw7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VJbXBsMShXZWJTZXJ2aWNlSW1wbCB3ZWJTZXJ2aWNlSW1wbCkKLSAgewotICAgIHRoaXMud2ViU2VydmljZUltcGwgPSB3ZWJTZXJ2aWNlSW1wbDsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gc3VwcG9ydHNTY2VuYXJpbyhpbnQgc2NlbmFyaW8pCi0gIHsKLSAgICBzd2l0Y2goc2NlbmFyaW8pCi0gICAgewotICAgIGNhc2UgV2ViU2VydmljZVNjZW5hcmlvLkJPVFRPTVVQOgotICAgICAgU3RyaW5nW10gYnVzID0gZ2V0Qm90dG9tVXBNb2R1bGVUeXBlc0luY2x1ZGUoKTsKLSAgICAgIGlmIChidXMhPW51bGwgJiYgYnVzLmxlbmd0aD4wKQotICAgICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgV2ViU2VydmljZVNjZW5hcmlvLlRPUERPV046Ci0gICAgICBTdHJpbmdbXSB0ZHMgPSBnZXRUb3BEb3duTW9kdWxlVHlwZXNJbmNsdWRlKCk7Ci0gICAgICBpZiAodGRzIT1udWxsICYmIHRkcy5sZW5ndGg+MCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotCXB1YmxpYyBTdHJpbmdbXSBnZXRNb2R1bGVUeXBlc0luY2x1ZGUoaW50IHNjZW5hcmlvKQotICB7Ci0gICAgc3dpdGNoKHNjZW5hcmlvKQotICAgIHsKLSAgICBjYXNlIFdlYlNlcnZpY2VTY2VuYXJpby5CT1RUT01VUDoKLSAgICAgIHJldHVybiBnZXRCb3R0b21VcE1vZHVsZVR5cGVzSW5jbHVkZSgpOwotICAgIGNhc2UgV2ViU2VydmljZVNjZW5hcmlvLlRPUERPV046Ci0gICAgICByZXR1cm4gZ2V0VG9wRG93bk1vZHVsZVR5cGVzSW5jbHVkZSgpOwotICAgIGRlZmF1bHQ6ICAgICAKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG51bGw7ICAgIAotICB9Ci0gIAotCQotCQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c3J0L1dlYlNlcnZpY2VDbGllbnRJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dzcnQvV2ViU2VydmljZUNsaWVudEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDE4N2IzYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dzcnQvV2ViU2VydmljZUNsaWVudEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZUNsaWVudEltcGwgewotCi0gIHByaXZhdGUgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1fOyAKLQlwcml2YXRlIFN0cmluZyBpZDsKLQlwcml2YXRlIFN0cmluZyBsYWJlbDsKLSAgCi0gIHB1YmxpYyBXZWJTZXJ2aWNlQ2xpZW50SW1wbChJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbV8pCi0gIHsKLSAgICBzdXBlcigpOwotICAgIHRoaXMuZWxlbV8gPSBlbGVtXzsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SWQoKQotICB7Ci0gICAgaWYgKGlkPT1udWxsKQotICAgIHsKLSAgICAgIGlkID0gZWxlbV8uZ2V0QXR0cmlidXRlKCJpZCIpOwotICAgIH0KLSAgICByZXR1cm4gaWQ7Ci0gIH0KLSAgCi0KLSAgcHVibGljIFN0cmluZyBnZXRMYWJlbCgpCi0gIHsKLSAgICBpZiAobGFiZWw9PW51bGwpCi0gICAgewotICAgICAgbGFiZWwgPSBlbGVtXy5nZXRBdHRyaWJ1dGUoImxhYmVsIik7Ci0gICAgfQotICAgIHJldHVybiBsYWJlbDsKLSAgfQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NydC9XZWJTZXJ2aWNlSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c3J0L1dlYlNlcnZpY2VJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjYWYxYWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c3J0L1dlYlNlcnZpY2VJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjE2ICAgMTI3MTM4IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDcwNTA5ICAgMTgyMjc0IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklNZXJnZXI7Ci0KLWltcG9ydCBjb20uaWJtLmljdS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLQotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VJbXBsIHsKLQkKLSAgcHJpdmF0ZSBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbV87Ci0JcHJpdmF0ZSBTdHJpbmcgaWQ7Ci0JcHJpdmF0ZSBTdHJpbmcgbGFiZWw7Ci0JcHJpdmF0ZSBTdHJpbmdbXSByZXNvdXJjZVR5cGVNZXRhZGF0YTsKLQlwcml2YXRlIFN0cmluZ1tdIGV4dGVuc2lvbk1ldGFkYXRhOwotCXByaXZhdGUgU3RyaW5nIG9iamVjdFNlbGVjdGlvbldpZGdldDsKLQlwcml2YXRlIElNZXJnZXIgbWVyZ2VyQ2xhc3M7Ci0gIAotICBwdWJsaWMgV2ViU2VydmljZUltcGwoSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1fKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgICB0aGlzLmVsZW1fID0gZWxlbV87Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nW10gZ2V0RXh0ZW5zaW9uTWV0YWRhdGEoKQotICB7Ci0gICAgaWYgKGV4dGVuc2lvbk1ldGFkYXRhPT1udWxsKQotICAgIHsKLSAgICAgIFN0cmluZyBhdHRyID0gZWxlbV8uZ2V0QXR0cmlidXRlKCJleHRlbnNpb25NZXRhZGF0YSIpOwotICAgICAgaWYgKGF0dHIgIT0gbnVsbCAmJiBhdHRyLmxlbmd0aCgpPjApCi0gICAgICB7Ci0gICAgICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoYXR0ciwgIiAiKTsKLSAgICAgICAgaW50IHNpemUgPSBzdC5jb3VudFRva2VucygpOwotICAgICAgICBleHRlbnNpb25NZXRhZGF0YSA9IG5ldyBTdHJpbmdbc2l6ZV07Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZXh0ZW5zaW9uTWV0YWRhdGEubGVuZ3RoOyBpKyspCi0gICAgICAgICAgZXh0ZW5zaW9uTWV0YWRhdGFbaV0gPSBzdC5uZXh0VG9rZW4oKTsKLSAgICAgIH0gICAgICAKLSAgICB9Ci0gICAgcmV0dXJuIGV4dGVuc2lvbk1ldGFkYXRhOwotICB9Ci0gIAotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SWQoKQotICB7Ci0gICAgaWYgKGlkPT1udWxsKQotICAgIHsKLSAgICAgIGlkID0gZWxlbV8uZ2V0QXR0cmlidXRlKCJpZCIpOwotICAgIH0KLSAgICByZXR1cm4gaWQ7Ci0gIH0KLSAgCi0KLSAgcHVibGljIFN0cmluZyBnZXRMYWJlbCgpCi0gIHsKLSAgICBpZiAobGFiZWw9PW51bGwpCi0gICAgewotICAgICAgbGFiZWwgPSBlbGVtXy5nZXRBdHRyaWJ1dGUoImxhYmVsIik7Ci0gICAgfQotICAgIHJldHVybiBsYWJlbDsKLSAgfSAKLSAgCi0KLSAgcHVibGljIFN0cmluZ1tdIGdldFJlc291cmNlVHlwZU1ldGFkYXRhKCkKLSAgewotICAgIGlmIChyZXNvdXJjZVR5cGVNZXRhZGF0YT09bnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgYXR0ciA9IGVsZW1fLmdldEF0dHJpYnV0ZSgicmVzb3VyY2VUeXBlTWV0YWRhdGEiKTsKLSAgICAgIGlmIChhdHRyICE9IG51bGwgJiYgYXR0ci5sZW5ndGgoKT4wKQotICAgICAgewotICAgICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGF0dHIsICIgIik7Ci0gICAgICAgIGludCBzaXplID0gc3QuY291bnRUb2tlbnMoKTsKLSAgICAgICAgcmVzb3VyY2VUeXBlTWV0YWRhdGEgPSBuZXcgU3RyaW5nW3NpemVdOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlc291cmNlVHlwZU1ldGFkYXRhLmxlbmd0aDsgaSsrKQotICAgICAgICAgIHJlc291cmNlVHlwZU1ldGFkYXRhW2ldID0gc3QubmV4dFRva2VuKCk7Ci0gICAgICB9ICAgICAgCi0gICAgfQotICAgIHJldHVybiByZXNvdXJjZVR5cGVNZXRhZGF0YTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0T2JqZWN0U2VsZWN0aW9uV2lkZ2V0KCkKLSAgewotICAgIGlmIChvYmplY3RTZWxlY3Rpb25XaWRnZXQ9PW51bGwpCi0gICAgewotICAgICAgb2JqZWN0U2VsZWN0aW9uV2lkZ2V0ID0gZWxlbV8uZ2V0QXR0cmlidXRlKCJvYmplY3RTZWxlY3Rpb25XaWRnZXQiKTsKLSAgICB9Ci0gICAgcmV0dXJuIG9iamVjdFNlbGVjdGlvbldpZGdldDsKLSAgfQotICAKLXB1YmxpYyBJTWVyZ2VyIGdldE1lcmdlckNsYXNzKCkgewotCWlmIChtZXJnZXJDbGFzcyA9PSBudWxsKQotICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1lcmdlckNsYXNzID0gKElNZXJnZXIpIGVsZW1fLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oIm1lcmdlckNsYXNzIik7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2goQ29yZUV4Y2VwdGlvbiBjZSkKLSAgICAgICAgewotICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICB9CQotCXJldHVybiBtZXJnZXJDbGFzczsKLX0KLSAgCi0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c3J0L1dlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uUmVnaXN0cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NydC9XZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblJlZ2lzdHJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjNThkZWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c3J0L1dlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uUmVnaXN0cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VTY2VuYXJpbzsKLQotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uUmVnaXN0cnkKLXsKLQotICBwcml2YXRlIHN0YXRpYyBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblJlZ2lzdHJ5IGluc3RhbmNlXzsKLQotICBIYXNoTWFwIHdlYlNlcnZpY2VUeXBlc187Ci0gIAotICBBcnJheUxpc3Qgd2ViU2VydmljZVR5cGVzTGlzdF87Ci0gIAotICBBcnJheUxpc3Qgd2ViU2VydmljZUNsaWVudFR5cGVzTGlzdF87Ci0KLSAgSGFzaHRhYmxlIHdlYlNlcnZpY2VJbXBsc187Ci0KLSAgSGFzaHRhYmxlIHdlYlNlcnZpY2VDbGllbnRJbXBsc187Ci0KLSAgSGFzaHRhYmxlIHNlcnZpY2VUeXBlc187Ci0KLSAgSGFzaHRhYmxlIGNsaWVudFR5cGVzXzsKLQotICBIYXNodGFibGUgd2ViU2VydmljZVJ1bnRpbWVzXzsKLQotICAvKioKLSAgICogUmV0dXJucyBhIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLgotICAgKiAKLSAgICogQHJldHVybiBBIHNpbmdsZXRvbiBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblJlZ2lzdHJ5IG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25SZWdpc3RyeSBnZXRJbnN0YW5jZSgpCi0gIHsKLSAgICBpZiAoaW5zdGFuY2VfID09IG51bGwpCi0gICAgewotICAgICAgaW5zdGFuY2VfID0gbmV3IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uUmVnaXN0cnkoKTsKLSAgICAgIGluc3RhbmNlXy5sb2FkKCk7Ci0gICAgfQotICAgIHJldHVybiBpbnN0YW5jZV87Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgbG9hZCgpCi0gIHsKLSAgICAvLyBDYW4ndCBnZXQgcmlkIG9mIHdlYlNlcnZpY2VUeXBlcyBpbiBNNAotICAgIHdlYlNlcnZpY2VUeXBlc18gPSBuZXcgSGFzaE1hcCgpOwotICAgIHdlYlNlcnZpY2VUeXBlc0xpc3RfID0gbmV3IEFycmF5TGlzdCgpOwotICAgIHdlYlNlcnZpY2VDbGllbnRUeXBlc0xpc3RfID0gbmV3IEFycmF5TGlzdCgpOwotICAgIHdlYlNlcnZpY2VJbXBsc18gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgd2ViU2VydmljZUNsaWVudEltcGxzXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBzZXJ2aWNlVHlwZXNfID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIGNsaWVudFR5cGVzXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICB3ZWJTZXJ2aWNlUnVudGltZXNfID0gbmV3IEhhc2h0YWJsZSgpOwotCi0gICAgSUV4dGVuc2lvblJlZ2lzdHJ5IHJlZyA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0gICAgCi0gICAgLy9Mb2FkIFdlYlNlcnZpY2VJbXBscwotICAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdIHdzSW1wbEV4dHMgPSByZWcuZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzRm9yKAotICAgICAgICAib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpIiwgIndzSW1wbCIpOwotICAgIAotICAgIGZvcihpbnQgaWR4PTA7IGlkeDx3c0ltcGxFeHRzLmxlbmd0aDsgaWR4KyspIAotICAgIHsKLSAgICAgIElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtID0gd3NJbXBsRXh0c1tpZHhdOwotCi0gICAgICAgIGlmIChlbGVtLmdldE5hbWUoKS5lcXVhbHMoIndlYlNlcnZpY2VJbXBsIikpCi0gICAgICAgIHsKLSAgICAgICAgICBXZWJTZXJ2aWNlSW1wbCB3c2ltcGwgPSBuZXcgV2ViU2VydmljZUltcGwoZWxlbSk7Ci0gICAgICAgICAgd2ViU2VydmljZUltcGxzXy5wdXQoZWxlbS5nZXRBdHRyaWJ1dGUoImlkIiksIHdzaW1wbCk7Ci0gICAgICAgIH0gICAgICAgIAotICAgIH0KLSAgICAKLSAgICAvL0xvYWQgV2ViU2VydmljZUNsaWVudEltcGxzCi0gICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gd3NDbGllbnRJbXBsRXh0cyA9IHJlZy5nZXRDb25maWd1cmF0aW9uRWxlbWVudHNGb3IoCi0gICAgICAgICJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkiLCAid3NDbGllbnRJbXBsIik7Ci0gICAgCi0gICAgZm9yKGludCBpZHg9MDsgaWR4PHdzQ2xpZW50SW1wbEV4dHMubGVuZ3RoOyBpZHgrKykgCi0gICAgewotICAgICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW0gPSB3c0NsaWVudEltcGxFeHRzW2lkeF07Ci0KLSAgICAgICAgaWYgKGVsZW0uZ2V0TmFtZSgpLmVxdWFscygid2ViU2VydmljZUNsaWVudEltcGwiKSkKLSAgICAgICAgewotICAgICAgICAgIFdlYlNlcnZpY2VDbGllbnRJbXBsIHdzQ2xpZW50SW1wbCA9IG5ldyBXZWJTZXJ2aWNlQ2xpZW50SW1wbChlbGVtKTsKLSAgICAgICAgICB3ZWJTZXJ2aWNlQ2xpZW50SW1wbHNfLnB1dChlbGVtLmdldEF0dHJpYnV0ZSgiaWQiKSwgd3NDbGllbnRJbXBsKTsKLSAgICAgICAgfSAgICAgICAgCi0gICAgfQotICAgIAotICAgIC8vTG9hZCBTZXJ2aWNlVHlwZXMKLSAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBzZXJ2aWNlVHlwZUV4dHMgPSByZWcuZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzRm9yKAotICAgICAgICAib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpIiwgInNlcnZpY2VUeXBlIik7Ci0gICAgCi0gICAgZm9yKGludCBpZHg9MDsgaWR4PHNlcnZpY2VUeXBlRXh0cy5sZW5ndGg7IGlkeCsrKSAKLSAgICB7Ci0gICAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbSA9IHNlcnZpY2VUeXBlRXh0c1tpZHhdOwotCi0gICAgICAgIGlmIChlbGVtLmdldE5hbWUoKS5lcXVhbHMoInNlcnZpY2VUeXBlIikpCi0gICAgICAgIHsKLSAgICAgICAgICBTZXJ2aWNlVHlwZSBzdCA9IG5ldyBTZXJ2aWNlVHlwZShlbGVtLHdlYlNlcnZpY2VJbXBsc18pOwotICAgICAgICAgIHNlcnZpY2VUeXBlc18ucHV0KGVsZW0uZ2V0QXR0cmlidXRlKCJpZCIpLCBzdCk7Ci0gICAgICAgIH0gICAgICAgIAotICAgIH0KLSAgICAKLSAgICAvL0xvYWQgQ2xpZW50VHlwZXMKLSAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBjbGllbnRUeXBlRXh0cyA9IHJlZy5nZXRDb25maWd1cmF0aW9uRWxlbWVudHNGb3IoCi0gICAgICAgICJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkiLCAiY2xpZW50VHlwZSIpOwotICAgIAotICAgIGZvcihpbnQgaWR4PTA7IGlkeDxjbGllbnRUeXBlRXh0cy5sZW5ndGg7IGlkeCsrKSAKLSAgICB7Ci0gICAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbSA9IGNsaWVudFR5cGVFeHRzW2lkeF07Ci0KLSAgICAgICAgaWYgKGVsZW0uZ2V0TmFtZSgpLmVxdWFscygiY2xpZW50VHlwZSIpKQotICAgICAgICB7Ci0gICAgICAgICAgQ2xpZW50VHlwZSBjdCA9IG5ldyBDbGllbnRUeXBlKGVsZW0sd2ViU2VydmljZUNsaWVudEltcGxzXyk7Ci0gICAgICAgICAgY2xpZW50VHlwZXNfLnB1dChlbGVtLmdldEF0dHJpYnV0ZSgiaWQiKSwgY3QpOwotICAgICAgICB9ICAgICAgICAKLSAgICB9Ci0gICAgCi0gICAgLy9Mb2FkIFdlYlNlcml2Y2VSdW50aW1lcwotICAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdIHdzcnRFeHRzID0gcmVnLmdldENvbmZpZ3VyYXRpb25FbGVtZW50c0ZvcigKLSAgICAgICAgIm9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aSIsICJ3ZWJTZXJ2aWNlUnVudGltZSIpOwotICAgIAotICAgIGZvcihpbnQgaWR4PTA7IGlkeDx3c3J0RXh0cy5sZW5ndGg7IGlkeCsrKSAKLSAgICB7Ci0gICAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbSA9IHdzcnRFeHRzW2lkeF07Ci0KLSAgICAgICAgaWYgKGVsZW0uZ2V0TmFtZSgpLmVxdWFscygid2ViU2VydmljZVJ1bnRpbWUiKSkKLSAgICAgICAgewotICAgICAgICAgIFdlYlNlcnZpY2VSdW50aW1lSW5mbyB3c3J0SW5mbyA9IG5ldyBXZWJTZXJ2aWNlUnVudGltZUluZm8oZWxlbSwgc2VydmljZVR5cGVzXywgY2xpZW50VHlwZXNfKTsKLSAgICAgICAgICB3ZWJTZXJ2aWNlUnVudGltZXNfLnB1dChlbGVtLmdldEF0dHJpYnV0ZSgiaWQiKSwgd3NydEluZm8pOwotICAgICAgICAgIAotICAgICAgICAgIC8vVXBkYXRlIHRoZSB0eXBlIGxpc3RzCi0gICAgICAgICAgdXBkYXRlV2ViU2VydmljZVR5cGVMaXN0KHdzcnRJbmZvKTsKLSAgICAgICAgICB1cGRhdGVXZWJTZXJ2aWNlQ2xpZW50VHlwZUxpc3Qod3NydEluZm8pOwotICAgICAgICAgIAotICAgICAgICB9ICAgICAgICAKLSAgICB9Ci0gIH0gIAotICAgIAotICBwcml2YXRlIHZvaWQgdXBkYXRlV2ViU2VydmljZVR5cGVMaXN0KFdlYlNlcnZpY2VSdW50aW1lSW5mbyB3c3J0SW5mbykKLSAgewotICAgIFNlcnZpY2VUeXBlW10gc3RzID0gd3NydEluZm8uZ2V0U2VydmljZVR5cGVzKCk7Ci0gICAgaWYgKHN0cyAhPSBudWxsKQotICAgIHsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgc3RzLmxlbmd0aDsgaisrKQotICAgICAgewotICAgICAgICBTdHJpbmcgaW1wbElkID0gc3RzW2pdLmdldFdlYlNlcnZpY2VJbXBsKCkuZ2V0SWQoKTsKLSAgICAgICAgU3RyaW5nW10gYnVzID0gc3RzW2pdLmdldEJvdHRvbVVwTW9kdWxlVHlwZXNJbmNsdWRlKCk7Ci0gICAgICAgIFN0cmluZ1tdIHRkcyA9IHN0c1tqXS5nZXRUb3BEb3duTW9kdWxlVHlwZXNJbmNsdWRlKCk7Ci0gICAgICAgIGlmIChidXMgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZ0J1ZmZlciBlbnRyeWJ1ZmYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgICAgZW50cnlidWZmLmFwcGVuZChTdHJpbmcudmFsdWVPZihXZWJTZXJ2aWNlU2NlbmFyaW8uQk9UVE9NVVApKTsKLSAgICAgICAgICBlbnRyeWJ1ZmYuYXBwZW5kKCIvIik7Ci0gICAgICAgICAgZW50cnlidWZmLmFwcGVuZChpbXBsSWQpOwotICAgICAgICAgIFN0cmluZyBlbnRyeSA9IGVudHJ5YnVmZi50b1N0cmluZygpOwotICAgICAgICAgIGlmICghd2ViU2VydmljZVR5cGVzTGlzdF8uY29udGFpbnMoZW50cnkpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHdlYlNlcnZpY2VUeXBlc0xpc3RfLmFkZChlbnRyeSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICh0ZHMgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZ0J1ZmZlciBlbnRyeWJ1ZmYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgICAgZW50cnlidWZmLmFwcGVuZChTdHJpbmcudmFsdWVPZihXZWJTZXJ2aWNlU2NlbmFyaW8uVE9QRE9XTikpOwotICAgICAgICAgIGVudHJ5YnVmZi5hcHBlbmQoIi8iKTsKLSAgICAgICAgICBlbnRyeWJ1ZmYuYXBwZW5kKGltcGxJZCk7Ci0gICAgICAgICAgU3RyaW5nIGVudHJ5ID0gZW50cnlidWZmLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgaWYgKCF3ZWJTZXJ2aWNlVHlwZXNMaXN0Xy5jb250YWlucyhlbnRyeSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgd2ViU2VydmljZVR5cGVzTGlzdF8uYWRkKGVudHJ5KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCB1cGRhdGVXZWJTZXJ2aWNlQ2xpZW50VHlwZUxpc3QoV2ViU2VydmljZVJ1bnRpbWVJbmZvIHdzcnRJbmZvKQotICB7Ci0gICAgQ2xpZW50VHlwZVtdIGN0cyA9IHdzcnRJbmZvLmdldENsaWVudFR5cGVzKCk7Ci0gICAgaWYgKGN0cyAhPSBudWxsKQotICAgIHsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgY3RzLmxlbmd0aDsgaisrKQotICAgICAgewotICAgICAgICBTdHJpbmcgaW1wbElkID0gY3RzW2pdLmdldFdlYlNlcnZpY2VDbGllbnRJbXBsKCkuZ2V0SWQoKTsKLSAgICAgICAgU3RyaW5nW10gbW9kcyA9IGN0c1tqXS5nZXRNb2R1bGVUeXBlc0luY2x1ZGUoKTsKLSAgICAgICAgaWYgKG1vZHMgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZ0J1ZmZlciBlbnRyeWJ1ZmYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgICAgZW50cnlidWZmLmFwcGVuZChTdHJpbmcudmFsdWVPZihXZWJTZXJ2aWNlU2NlbmFyaW8uQ0xJRU5UKSk7Ci0gICAgICAgICAgZW50cnlidWZmLmFwcGVuZCgiLyIpOwotICAgICAgICAgIGVudHJ5YnVmZi5hcHBlbmQoaW1wbElkKTsKLSAgICAgICAgICBTdHJpbmcgZW50cnkgPSBlbnRyeWJ1ZmYudG9TdHJpbmcoKTsKLSAgICAgICAgICBpZiAoIXdlYlNlcnZpY2VDbGllbnRUeXBlc0xpc3RfLmNvbnRhaW5zKGVudHJ5KSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB3ZWJTZXJ2aWNlQ2xpZW50VHlwZXNMaXN0Xy5hZGQoZW50cnkpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NydC9XZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblJlZ2lzdHJ5Mi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c3J0L1dlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uUmVnaXN0cnkyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiMmRmMzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c3J0L1dlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uUmVnaXN0cnkyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDI3ICAgMTI2NzgwIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VTY2VuYXJpbzsKLQotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uUmVnaXN0cnkyCi17Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25SZWdpc3RyeTIgaW5zdGFuY2VfOwotCi0gIC8vd2ViU2VydmljZUltcGxzXzogCi0gIC8va2V5OiBpZCBhdHRyaWJ1dGUgb2YgZXh0ZW5zaW9uIHRvIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53c0ltcGwKLSAgLy92YWx1ZTogb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuV2ViU2VydmljZUltcGwgCi0gIEhhc2h0YWJsZSB3ZWJTZXJ2aWNlSW1wbHNfOwotCi0gIC8vd2ViU2VydmljZUNsaWVudEltcGxzXzogCi0gIC8va2V5OiBpZCBhdHRyaWJ1dGUgb2YgZXh0ZW5zaW9uIHRvIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53c0NsaWVudEltcGwKLSAgLy92YWx1ZTogb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuV2ViU2VydmljZUNsaWVudEltcGwgIAotICBIYXNodGFibGUgd2ViU2VydmljZUNsaWVudEltcGxzXzsKLQotICAvL3J1bnRpbWVzXzogCi0gIC8va2V5OiBpZCBhdHRyaWJ1dGUgb2YgZXh0ZW5zaW9uIHRvIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5ydW50aW1lcwotICAvL3ZhbHVlOiBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydC5SdW50aW1lRGVzY3JpcHRvcgotICBIYXNodGFibGUgcnVudGltZXNfOwotICAKLSAgLy9zZXJ2aWNlUnVudGltZXNfOiAKLSAgLy9rZXk6IGlkIGF0dHJpYnV0ZSBvZiBleHRlbnNpb24gdG8gb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLnNlcnZpY2VSdW50aW1lcwotICAvL3ZhbHVlOiBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydC5TZXJ2aWNlUnVudGltZURlc2NyaXB0b3IKLSAgSGFzaHRhYmxlIHNlcnZpY2VSdW50aW1lc187Ci0gIAotICAvL2NsaWVudFJ1bnRpbWVzXzogCi0gIC8va2V5OiBpZCBhdHRyaWJ1dGUgb2YgZXh0ZW5zaW9uIHRvIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5jbGllbnRSdW50aW1lcwotICAvL3ZhbHVlOiBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydC5DbGllbnRSdW50aW1lRGVzY3JpcHRvciAgCi0gIEhhc2h0YWJsZSBjbGllbnRSdW50aW1lc187Ci0gIAotICAvL3dlYlNlcnZpY2VUeXBlc0xpc3RfIGNvbnRhaW5zIGEgbGlzdCBvZiBTdHJpbmcgdmFsdWVzIGluIHRoaXMgZm9ybTogInNjZW5hcmlvL3dlYlNlcnZpY2VJbXBsSWQiLAotICAvL3doZXJlIHNjZWFucmlvIHRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2Ygb25lIG9mIAotICAvL29yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VTY2VuYXJpby5CT1RUT01fVVAgb3IgCi0gIC8vb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZVNjZW5hcmlvLlRPUF9ET1dOCi0gIC8vYW5kIHdlYlNlcnZpY2VJbXBsSWQgaXMgdGhlIGlkIGF0dHJpYnV0ZSBvZiBhbiBleHRlbnNpb24gdG8gb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLndzSW1wbAotICAvL1RoaXMgbGlzdCBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUgaXRlbXMgZGlzcGxheWVkIGluIHRoZSBXZWJTZXJ2aWNlVHlwZSBjb21iby1ib3ggb2YgcGFnZSAxIG9mIHRoZSAKLSAgLy9XZWIgc2VyaXZjZSB3aXphcmQuCi0gIEFycmF5TGlzdCB3ZWJTZXJ2aWNlVHlwZXNMaXN0XzsKLSAgCi0gIC8vVE9ETzogTm90IHVzZWQuIFJlbW92ZSB0aGlzIGFuZCBhbGwgcmVmZXJlbmNlcyB0byBpdCBpbiB0aGlzIGNsYXNzLgotICBBcnJheUxpc3Qgd2ViU2VydmljZUNsaWVudFR5cGVzTGlzdF87ICAKLSAgCi0gIAotICAvKioKLSAgICogUmV0dXJucyBhIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLgotICAgKiAKLSAgICogQHJldHVybiBBIHNpbmdsZXRvbiBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblJlZ2lzdHJ5MiBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uUmVnaXN0cnkyIGdldEluc3RhbmNlKCkKLSAgewotICAgIGlmIChpbnN0YW5jZV8gPT0gbnVsbCkKLSAgICB7Ci0gICAgICBpbnN0YW5jZV8gPSBuZXcgV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25SZWdpc3RyeTIoKTsKLSAgICAgIGluc3RhbmNlXy5sb2FkKCk7Ci0gICAgfQotICAgIHJldHVybiBpbnN0YW5jZV87Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgbG9hZCgpCi0gIHsKLSAgICB3ZWJTZXJ2aWNlSW1wbHNfID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIHdlYlNlcnZpY2VDbGllbnRJbXBsc18gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgcnVudGltZXNfID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIHNlcnZpY2VSdW50aW1lc18gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgY2xpZW50UnVudGltZXNfID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIHdlYlNlcnZpY2VUeXBlc0xpc3RfID0gbmV3IEFycmF5TGlzdCgpOwotICAgIHdlYlNlcnZpY2VDbGllbnRUeXBlc0xpc3RfID0gbmV3IEFycmF5TGlzdCgpOwotICAgIAotICAgIAotICAgIElFeHRlbnNpb25SZWdpc3RyeSByZWcgPSBQbGF0Zm9ybS5nZXRFeHRlbnNpb25SZWdpc3RyeSgpOwotICAgIAotLy8gIExvYWQgV2ViU2VydmljZUltcGxzIGJ5IHJlYWRpbmcgYWxsIGV4dGVuc2lvbnMgdG8gb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLndzSW1wbAotICAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdIHdzSW1wbEV4dHMgPSByZWcuZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzRm9yKAotICAgICAgICAib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpIiwgIndzSW1wbCIpOwotICAgIAotICAgIGZvcihpbnQgaWR4PTA7IGlkeDx3c0ltcGxFeHRzLmxlbmd0aDsgaWR4KyspIAotICAgIHsKLSAgICAgIElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtID0gd3NJbXBsRXh0c1tpZHhdOyAgICAgICAgCi0gICAgICAgIGlmIChlbGVtLmdldE5hbWUoKS5lcXVhbHMoIndlYlNlcnZpY2VJbXBsIikpCi0gICAgICAgIHsKLSAgICAgICAgICBXZWJTZXJ2aWNlSW1wbCB3c2ltcGwgPSBuZXcgV2ViU2VydmljZUltcGwoZWxlbSk7ICAgICAgICAgIAotICAgICAgICAgIHdlYlNlcnZpY2VJbXBsc18ucHV0KGVsZW0uZ2V0QXR0cmlidXRlKCJpZCIpLCB3c2ltcGwpOwotICAgICAgICB9ICAgICAgICAKLSAgICB9Ci0gICAgCi0gICAgLy9Mb2FkIFdlYlNlcnZpY2VDbGllbnRJbXBscyBieSByZWFkaW5nIGFsbCBleHRlbnNpb25zIHRvIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53c0NsaWVudEltcGwKLSAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSB3c0NsaWVudEltcGxFeHRzID0gcmVnLmdldENvbmZpZ3VyYXRpb25FbGVtZW50c0ZvcigKLSAgICAgICAgIm9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aSIsICJ3c0NsaWVudEltcGwiKTsKLSAgICAKLSAgICBmb3IoaW50IGlkeD0wOyBpZHg8d3NDbGllbnRJbXBsRXh0cy5sZW5ndGg7IGlkeCsrKSAKLSAgICB7Ci0gICAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbSA9IHdzQ2xpZW50SW1wbEV4dHNbaWR4XTsKLQotICAgICAgICBpZiAoZWxlbS5nZXROYW1lKCkuZXF1YWxzKCJ3ZWJTZXJ2aWNlQ2xpZW50SW1wbCIpKQotICAgICAgICB7Ci0gICAgICAgICAgV2ViU2VydmljZUNsaWVudEltcGwgd3NDbGllbnRJbXBsID0gbmV3IFdlYlNlcnZpY2VDbGllbnRJbXBsKGVsZW0pOwotICAgICAgICAgIHdlYlNlcnZpY2VDbGllbnRJbXBsc18ucHV0KGVsZW0uZ2V0QXR0cmlidXRlKCJpZCIpLCB3c0NsaWVudEltcGwpOwotICAgICAgICB9ICAgICAgICAKLSAgICB9Ci0gICAgCi0gICAgLy9Mb2FkIHJ1bnRpbWVzIGJ5IHJlYWRpbmcgYWxsIGV4dGVuc2lvbnMgdG8gb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLnJ1bnRpbWVzCi0gICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gcnVudGltZUV4dHMgPSByZWcuZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzRm9yKAotICAgICAgICAib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpIiwgInJ1bnRpbWVzIik7Ci0gICAgCi0gICAgZm9yKGludCBpZHg9MDsgaWR4PHJ1bnRpbWVFeHRzLmxlbmd0aDsgaWR4KyspIAotICAgIHsKLSAgICAgIElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtID0gcnVudGltZUV4dHNbaWR4XTsKLQotICAgICAgICBpZiAoZWxlbS5nZXROYW1lKCkuZXF1YWxzKCJydW50aW1lIikpCi0gICAgICAgIHsKLSAgICAgICAgICBSdW50aW1lRGVzY3JpcHRvciByZCA9IG5ldyBSdW50aW1lRGVzY3JpcHRvcihlbGVtKTsKLSAgICAgICAgICBydW50aW1lc18ucHV0KGVsZW0uZ2V0QXR0cmlidXRlKCJpZCIpLCByZCk7Ci0gICAgICAgIH0gICAgICAgIAotICAgIH0KLSAgICAKLSAgICAvL0xvYWQgc2VydmljZVJ1bnRpbWVzIGJ5IHJlYWRpbmcgYWxsIGV4dGVuc2lvbnMgdG8gb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLnNlcnZpY2VSdW50aW1lcwotICAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdIHNlcnZpY2VSdW50aW1lRXh0cyA9IHJlZy5nZXRDb25maWd1cmF0aW9uRWxlbWVudHNGb3IoCi0gICAgICAgICJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkiLCAic2VydmljZVJ1bnRpbWVzIik7Ci0gICAgCi0gICAgZm9yKGludCBpZHg9MDsgaWR4PHNlcnZpY2VSdW50aW1lRXh0cy5sZW5ndGg7IGlkeCsrKSAKLSAgICB7Ci0gICAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbSA9IHNlcnZpY2VSdW50aW1lRXh0c1tpZHhdOwotCi0gICAgICAgIGlmIChlbGVtLmdldE5hbWUoKS5lcXVhbHMoInNlcnZpY2VSdW50aW1lIikpCi0gICAgICAgIHsKLSAgICAgICAgICBTZXJ2aWNlUnVudGltZURlc2NyaXB0b3IgcmQgPSBuZXcgU2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yKGVsZW0sIHdlYlNlcnZpY2VJbXBsc18sIHJ1bnRpbWVzXyk7Ci0gICAgICAgICAgc2VydmljZVJ1bnRpbWVzXy5wdXQoZWxlbS5nZXRBdHRyaWJ1dGUoImlkIiksIHJkKTsgICAgICAgICAgCi0gICAgICAgICAgdXBkYXRlV2ViU2VydmljZVR5cGVMaXN0KHJkKTsKLSAgICAgICAgfSAgICAgICAgCi0gICAgfQotICAgIAotICAgIC8vTG9hZCBjbGllbnRSdW50aW1lcyBieSByZWFkaW5nIGFsbCBleHRlbnNpb25zIHRvIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5jbGllbnRSdW50aW1lcwotICAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGNsaWVudFJ1bnRpbWVFeHRzID0gcmVnLmdldENvbmZpZ3VyYXRpb25FbGVtZW50c0ZvcigKLSAgICAgICAgIm9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aSIsICJjbGllbnRSdW50aW1lcyIpOwotICAgIAotICAgIGZvcihpbnQgaWR4PTA7IGlkeDxjbGllbnRSdW50aW1lRXh0cy5sZW5ndGg7IGlkeCsrKSAKLSAgICB7Ci0gICAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbSA9IGNsaWVudFJ1bnRpbWVFeHRzW2lkeF07Ci0KLSAgICAgIGlmIChlbGVtLmdldE5hbWUoKS5lcXVhbHMoImNsaWVudFJ1bnRpbWUiKSkKLSAgICAgIHsKLSAgICAgICAgQ2xpZW50UnVudGltZURlc2NyaXB0b3IgcmQgPSBuZXcgQ2xpZW50UnVudGltZURlc2NyaXB0b3IoZWxlbSwgd2ViU2VydmljZUNsaWVudEltcGxzXywgcnVudGltZXNfKTsKLSAgICAgICAgY2xpZW50UnVudGltZXNfLnB1dChlbGVtLmdldEF0dHJpYnV0ZSgiaWQiKSwgcmQpOwotICAgICAgICB1cGRhdGVXZWJTZXJ2aWNlQ2xpZW50VHlwZUxpc3QocmQpOwotICAgICAgICAgIAotICAgICAgfSAgICAgICAgCi0gICAgfQotICB9ICAKLSAgICAKLSAgLyoqCi0gICAqIFVwZGF0ZXMgdGhlIGxpc3Qgb2YgV2ViIHNlcnZpY2UgdHlwZXMgd2l0aCB0aGUgcHJvdmlkZWQgc2VydmljZSBydW50aW1lJ3MgY29udHJpYnV0aW9uIG9mCi0gICAqIHNjZW5hcmlvL3dlYlNlcnZpY2VJbXBsIGNvbWJpbmF0aW9uLgotICAgKiBAcGFyYW0gZGVzY3JpcHRvcgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVdlYlNlcnZpY2VUeXBlTGlzdChTZXJ2aWNlUnVudGltZURlc2NyaXB0b3IgZGVzY3JpcHRvcikKLSAgewotICAgIFN0cmluZyBzZXJ2aWNlSW1wbElkID0gZGVzY3JpcHRvci5nZXRTZXJ2aWNlSW1wbGVtZW50YXRpb25UeXBlKCkuZ2V0SWQoKTsKLSAgICBib29sZWFuIGJvdHRvbVVwID0gZGVzY3JpcHRvci5nZXRCb3R0b21VcCgpOwotICAgIGJvb2xlYW4gdG9wRG93biA9IGRlc2NyaXB0b3IuZ2V0VG9wRG93bigpOwotICAgIGlmIChib3R0b21VcCkKLSAgICB7Ci0gICAgICBTdHJpbmdCdWZmZXIgZW50cnlidWZmID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgZW50cnlidWZmLmFwcGVuZChTdHJpbmcudmFsdWVPZihXZWJTZXJ2aWNlU2NlbmFyaW8uQk9UVE9NVVApKTsKLSAgICAgIGVudHJ5YnVmZi5hcHBlbmQoIi8iKTsKLSAgICAgIGVudHJ5YnVmZi5hcHBlbmQoc2VydmljZUltcGxJZCk7Ci0gICAgICBTdHJpbmcgZW50cnkgPSBlbnRyeWJ1ZmYudG9TdHJpbmcoKTsKLSAgICAgIGlmICghd2ViU2VydmljZVR5cGVzTGlzdF8uY29udGFpbnMoZW50cnkpKQotICAgICAgewotICAgICAgICB3ZWJTZXJ2aWNlVHlwZXNMaXN0Xy5hZGQoZW50cnkpOwotICAgICAgfSAgICAgIAotICAgIH0KLSAgICAKLSAgICBpZiAodG9wRG93bikKLSAgICB7Ci0gICAgICBTdHJpbmdCdWZmZXIgZW50cnlidWZmID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgZW50cnlidWZmLmFwcGVuZChTdHJpbmcudmFsdWVPZihXZWJTZXJ2aWNlU2NlbmFyaW8uVE9QRE9XTikpOwotICAgICAgZW50cnlidWZmLmFwcGVuZCgiLyIpOwotICAgICAgZW50cnlidWZmLmFwcGVuZChzZXJ2aWNlSW1wbElkKTsKLSAgICAgIFN0cmluZyBlbnRyeSA9IGVudHJ5YnVmZi50b1N0cmluZygpOwotICAgICAgaWYgKCF3ZWJTZXJ2aWNlVHlwZXNMaXN0Xy5jb250YWlucyhlbnRyeSkpCi0gICAgICB7Ci0gICAgICAgIHdlYlNlcnZpY2VUeXBlc0xpc3RfLmFkZChlbnRyeSk7Ci0gICAgICB9ICAgICAgCi0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgdXBkYXRlV2ViU2VydmljZUNsaWVudFR5cGVMaXN0KENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yIGRlc2NyaXB0b3IpCi0gIHsKLSAgICBTdHJpbmcgY2xpZW50SW1wbElkID0gZGVzY3JpcHRvci5nZXRDbGllbnRJbXBsZW1lbnRhdGlvblR5cGUoKS5nZXRJZCgpOwotICAgIFN0cmluZ0J1ZmZlciBlbnRyeWJ1ZmYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgZW50cnlidWZmLmFwcGVuZChTdHJpbmcudmFsdWVPZihXZWJTZXJ2aWNlU2NlbmFyaW8uQ0xJRU5UKSk7Ci0gICAgZW50cnlidWZmLmFwcGVuZCgiLyIpOwotICAgIGVudHJ5YnVmZi5hcHBlbmQoY2xpZW50SW1wbElkKTsKLSAgICBTdHJpbmcgZW50cnkgPSBlbnRyeWJ1ZmYudG9TdHJpbmcoKTsKLSAgICBpZiAoIXdlYlNlcnZpY2VDbGllbnRUeXBlc0xpc3RfLmNvbnRhaW5zKGVudHJ5KSkKLSAgICB7Ci0gICAgICB3ZWJTZXJ2aWNlQ2xpZW50VHlwZXNMaXN0Xy5hZGQoZW50cnkpOwotICAgIH0gICAgCi0gIH0KLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3VpL3dzcnQvV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NydC9XZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODFjNmU0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NydC9XZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTk1MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAxMzEgMTIxMDcxICAgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyICAgICAKLSAqIDIwMDYwMjIxICAgMTE5MTExIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjAyMjcgICAxMjQzOTIgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDMyNCAgIDExNjc1MCByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNDI3ICAgMTI2NzgwIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNzAxMTkgICAxNTk0NTggbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLkZhY2V0VXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLkZhY2V0TWF0Y2hlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLkZhY2V0VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbi5SZXF1aXJlZEZhY2V0VmVyc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuVHlwZVNlbGVjdGlvbkZpbHRlcjI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmRhdGEuTGFiZWxzQW5kSWRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5kYXRhLlR5cGVSdW50aW1lU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuc2VsZWN0aW9uLlNlbGVjdGlvbkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuc2VsZWN0aW9uLlNlbGVjdGlvbkxpc3RDaG9pY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLklGYWNldGVkUHJvamVjdFRlbXBsYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLlByb2plY3RGYWNldHNNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnJ1bnRpbWUuSVJ1bnRpbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklSdW50aW1lVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlclR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlckNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci51aS5TZXJ2ZXJVSUNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSVdlYlNlcnZpY2VSdW50aW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VTY2VuYXJpbzsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIGNvbnRhaW5zIG51bWVyb3VzIHV0aWxpdHkgbWV0aG9kcyB0aGF0Ci0gKiBwcm9jZXNzIHRoZSBpbmZvcm1hdGlvbiBwcm92aWRlZCB0aHJvdWdoIGV4dGVuc2lvbiBwb2ludHMKLSAqIHdoaWNoIGFyZSByZWFkIGluIFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uUmVnaXN0cnkyOgotICogPHVsPgotICogPGxpPiBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkud3NJbXBsIDwvbGk+Ci0gKiA8bGk+IG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53c0NsaWVudEltcGwgPC9saT4KLSAqIDxsaT4gb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLnJ1bnRpbWVzIDwvbGk+Ci0gKiA8bGk+IG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5zZXJ2aWNlUnVudGltZXMgPC9saT4KLSAqIDxsaT4gb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmNsaWVudFJ1bnRpbWVzIDwvbGk+Ci0gKiA8L3VsPgotICogCi0gKiB0byBwcm92aWRlIGFuc3dlcnMgdG8gY29tbW9uIHF1ZXN0aW9ucyByZWdhcmRpbmcgd2hpY2ggc2VydmVycywKLSAqIHByb2plY3RzLCBhbmQgcHJvamVjdCB0eXBlcyBhIHBhcnRpY3VsYXIgV2ViIHNlcnZpY2UgcnVudGltZQotICogc3VwcG9ydHMuCi0gKiA8YnIvPjxici8+Ci0gKiBUZW1pbm9sb2d5IHVzZWQgaW4gdGhlIGphdmFkb2MgaW4gdGhpcyBjbGFzczoKLSAqIDx1bD4KLSAqIDxsaT48Yj5XZWIgc2VydmljZSBzY2VuYXJpbzwvYj46IE9uZSBvZiBXZWJTZXJ2aWNlU2NlbmFyaW8uQk9UVE9NX1VQIG9yIFdlYlNlcnZpY2VTY2VuYXJpby5UT1BfRE9XTi48L2xpPiAKLSAqIDxsaT48Yj5XZWIgc2VydmljZSBpbXBsZW1lbnRhdGlvbiB0eXBlPC9iPjogZXh0ZW5zaW9uIHRvIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53c0ltcGwuCi0gKiBUaGUgSmF2YSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIGlzIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LldlYlNlcnZpY2VJbXBsLjwvbGk+Ci0gKiA8bGk+PGI+V2ViIHNlcnZpY2UgdHlwZTwvYj46IEZvcndhcmQgc2xhc2ggc2VwYXJhdGVkIGNvbmNhdGVuYXRpb24gb2YgdGhlIFN0cmluZyByZXByZXNlbnRhdGlvbgotICogb2YgYSBXZWIgc2VydmljZSBzY2VuYXJpbyBhbmQgYSBXZWIgc2VydmljZSBpbXBsZW1lbnRhdGlvbiB0eXBlIGlkLgotICogRm9yIGV4YW1wbGUsICIwL29yZy5lY2xpcHNlLmpzdC53cy53c0ltcGwuamF2YSIsIHJlcHJlc2VudHMgdGhlIGJvdHRvbSB1cCBKYXZhIGJlYW4gV2ViIHNlcnZpY2UgdHlwZS48L2xpPgotICogPGxpPjxiPldlYiBzZXJ2aWNlIGNsaWVudCBpbXBsZW1lbnRhdGlvbiB0eXBlPC9iPjogZXh0ZW5zaW9uIHRvIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53c0NsaWVudEltcGwuCi0gKiBUaGUgSmF2YSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIGlzIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LldlYlNlcnZpY2VDbGllbnRJbXBsLjwvbGk+Ci0gKiA8bGk+PGI+V2ViIHNlcnZpY2UgcnVudGltZTwvYj46IGV4dGVuc2lvbiB0byBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkucnVudGltZXMuIAotICogVGhlIEphdmEgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBpcyBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydC5SdW50aW1lRGVzY3JpcHRvcjwvbGk+IAotICogPGxpPjxiPnNlcnZpY2VSdW50aW1lPC9iPjogZXh0ZW5zaW9uIHRvIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5zZXJ2aWNlUnVudGltZXMuCi0gKiBUaGUgSmF2YSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIGlzIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LlNlcnZpY2VSdW50aW1lRGVzY3JpcHRvcjwvbGk+Ci0gKiA8bGk+PGI+Y2xpZW50UnVudGltZTwvYj46IGV4dGVuc2lvbiB0byBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuY2xpZW50UnVudGltZXMuCi0gKiBUaGUgSmF2YSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIGlzIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LkNsaWVudFJ1bnRpbWVEZXNjcmlwdG9yPC9saT4KLSAqIDxsaT48Yj5zZXJ2ZXIgdHlwZTwvYj46IFRoaXMgaXMgYSBzZXJ2ZXIgdG9vbHMgYXJ0aWZhY3QuIFlvdSBzZWUgYSBsaXN0IG9mIHRoZXNlIHdoZW4gY3JlYXRpbmcgYSBuZXcgc2VydmVyCi0gKiBpbiB0aGUgdG9vbC48L2xpPgotICogPGxpPjxiPnNlcnZlciBydW50aW1lPC9iPjogVGhpcyBpcyBhIHNlcnZlciB0b29scyBhcnRpZmFjdC4gWW91IHNlZSBhIGxpc3Qgb2YgdGhlc2UgaWYgeW91IGdvIHRvIFByZWZlcmVuY2VzLCAKLSAqIFNlcnZlciA+IEluc3RhbGxlZCBSdW50aW1lcyBpbiB0aGUgdG9vbC4gVGhlIEphdmEgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBpcyBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVJ1bnRpbWU8L2xpPgotICogPGxpPjxiPmZhY2V0IHJ1bnRpbWU8L2I+OiBUaGUgZmFjZXQgZXF1aXZhbGVudCBvZiBhIHNlcnZlciBydW50aW1lLiBUaGUgSmF2YSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIGlzIAotICogb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUucnVudGltZS5JUnVudGltZS4gb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLkZhY2V0VXRpbAotICogcHJvdmlkZXMgbWV0aG9kcyB0byB0cmFuc2xhdGUgZnJvbSBhIHNlcnZlciBydW50aW1lIHRvIGEgZmFjZXQgcnVudGltZSBhbmQgdmljZS12ZXJzYS48L2xpPgotICogPC91bD4KLSAqLwotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyCi17Ci0gIHByaXZhdGUgc3RhdGljIFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uUmVnaXN0cnkyIHJlZ2lzdHJ5ID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25SZWdpc3RyeTIuZ2V0SW5zdGFuY2UoKTsKLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBSdW50aW1lRGVzY3JpcHRvciByZXByZXNlbnRpbmcgdGhlIFdlYiBzZXJ2aWNlIHJ1bnRpbWUKLSAgICogd2l0aCBhbiBpZCBhdHRyaWJ1dGUgZXF1YWwgdG8gdGhlIHByb3ZpZGVkIGlkCi0gICAqIEBwYXJhbSBpZAotICAgKiBAcmV0dXJuIFJ1bnRpbWVEZXNjcmlwdG9yIHJlcHJlc2VudGluZyB0aGUgV2ViIHNlcnZpY2UgcnVudGltZQotICAgKiB3aXRoIGFuIGlkIGF0dHJpYnV0ZSBlcXVhbCB0byB0aGUgcHJvdmlkZWQgaWQuIFJldHVybnMgbnVsbAotICAgKiBpZiBzdWNoIGEgUnVudGltZURlc2NyaXB0b3IgY2Fubm90IGJlIGZvdW5kLgotICAgKi8gIAotICBwdWJsaWMgc3RhdGljIFJ1bnRpbWVEZXNjcmlwdG9yIGdldFJ1bnRpbWVCeUlkKFN0cmluZyBpZCkKLSAgewotICAgIE9iamVjdCByZXN1bHQgPSByZWdpc3RyeS5ydW50aW1lc18uZ2V0KGlkKTsKLSAgICBpZiAocmVzdWx0IT1udWxsKQotICAgIHsKLSAgICAgIHJldHVybiAoUnVudGltZURlc2NyaXB0b3IpcmVzdWx0OwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsgICAgICAgIAotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgdW5pb24gb2YgYWxsIHByb2plY3QgdHlwZXMgc3VwcG9ydGVkIGJ5IGFsbCBzZXJ2aWNlUnVudGltZXMuIFVzZWQgYnkgdGhlCi0gICAqIFByb2plY3RUb3BvbG9neSBwcmVmZXJlbmNlIHBhZ2UuIAotICAgKiBAcmV0dXJuIFN0cmluZ1tdIGFycmF5IG9mIHRlbXBsYXRlIGlkcy4gVGhlIGFycmF5IG1heSBoYXZlIDAgZWxlbWVudHMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZ1tdIGdldEFsbFNlcnZpY2VQcm9qZWN0VHlwZXMoKQotICB7Ci0gICAgQXJyYXlMaXN0IGZpbmFsVGVtcGxhdGVJZExpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgSXRlcmF0b3IgaXRlciA9IHJlZ2lzdHJ5LnNlcnZpY2VSdW50aW1lc18udmFsdWVzKCkuaXRlcmF0b3IoKTsKLQotICAgIC8vTG9vcCB0aHJvdWdoIGFsbCB0aGUgc2VydmljZVJ1bnRpbWVzCi0gICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSAgIAotICAgIHsKLSAgICAgIFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gKFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvcilpdGVyLm5leHQoKTsKLSAgICAgIAotICAgICAgLy9HZXQgdGhlIHRlbXBsYXRlcyBmb3IgdGhpcyBzZXJ2aWNlUnVudGltZQotICAgICAgU2V0IHRlbXBsYXRlcyA9IEZhY2V0TWF0Y2hDYWNoZS5nZXRJbnN0YW5jZSgpLmdldFRlbXBsYXRlc0ZvclNlcnZpY2VSdW50aW1lKGRlc2MuZ2V0SWQoKSk7Ci0gICAgICAKLSAgICAgIC8vQWRkIHRoZSB0ZW1wbGF0ZSBpZHMgdG8gdGhlIGxpc3QgaWYgdGhleSBoYXZlIG5vdCBhbHJlYWR5IGJlZW4gYWRkZWQKLSAgICAgIEl0ZXJhdG9yIGl0ciA9IHRlbXBsYXRlcy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0ci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIElGYWNldGVkUHJvamVjdFRlbXBsYXRlIHRlbXBsYXRlID0gKElGYWNldGVkUHJvamVjdFRlbXBsYXRlKWl0ci5uZXh0KCk7Ci0gICAgICAgIGlmICghZmluYWxUZW1wbGF0ZUlkTGlzdC5jb250YWlucyh0ZW1wbGF0ZS5nZXRJZCgpKSkKLSAgICAgICAgewotICAgICAgICAgIGZpbmFsVGVtcGxhdGVJZExpc3QuYWRkKHRlbXBsYXRlLmdldElkKCkpOwotICAgICAgICB9Ci0gICAgICB9ICAgICAgICAgICAgCi0gICAgfQotICAgIAotICAgIHJldHVybiAoU3RyaW5nW10pZmluYWxUZW1wbGF0ZUlkTGlzdC50b0FycmF5KG5ldyBTdHJpbmdbXXt9KTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHVuaW9uIG9mIGFsbCBwcm9qZWN0IHR5cGVzIHN1cHBvcnRlZCBieSBhbGwgY2xpZW50UnVudGltZXMuIFVzZWQgYnkgdGhlCi0gICAqIFByb2plY3RUb3BvbG9neSBwcmVmZXJlbmNlIHBhZ2UuIAotICAgKiBAcmV0dXJuIFN0cmluZ1tdIGFycmF5IG9mIHRlbXBsYXRlIGlkcy4gVGhlIGFycmF5IG1heSBoYXZlIDAgZWxlbWVudHMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZ1tdIGdldEFsbENsaWVudFByb2plY3RUeXBlcygpCi0gIHsKLSAgICBBcnJheUxpc3QgZmluYWxUZW1wbGF0ZUlkTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBJdGVyYXRvciBpdGVyID0gcmVnaXN0cnkuY2xpZW50UnVudGltZXNfLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0KLSAgICAvL0xvb3AgdGhyb3VnaCBhbGwgdGhlIGNsaWVudFJ1bnRpbWVzCi0gICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSAgIAotICAgIHsKLSAgICAgIENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yIGRlc2MgPSAoQ2xpZW50UnVudGltZURlc2NyaXB0b3IpaXRlci5uZXh0KCk7Ci0gICAgICAKLSAgICAgIC8vR2V0IHRoZSB0ZW1wbGF0ZXMgZm9yIHRoaXMgY2xpZW50UnVudGltZQotICAgICAgU2V0IHRlbXBsYXRlcyA9IEZhY2V0TWF0Y2hDYWNoZS5nZXRJbnN0YW5jZSgpLmdldFRlbXBsYXRlc0ZvckNsaWVudFJ1bnRpbWUoZGVzYy5nZXRJZCgpKTsKLSAgICAgIAotICAgICAgLy9BZGQgdGhlIHRlbXBsYXRlIGlkcyB0byB0aGUgbGlzdCBpZiB0aGV5IGhhdmUgbm90IGFscmVhZHkgYmVlbiBhZGRlZAotICAgICAgSXRlcmF0b3IgaXRyID0gdGVtcGxhdGVzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXRyLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGUgdGVtcGxhdGUgPSAoSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGUpaXRyLm5leHQoKTsKLSAgICAgICAgaWYgKCFmaW5hbFRlbXBsYXRlSWRMaXN0LmNvbnRhaW5zKHRlbXBsYXRlLmdldElkKCkpKQotICAgICAgICB7Ci0gICAgICAgICAgZmluYWxUZW1wbGF0ZUlkTGlzdC5hZGQodGVtcGxhdGUuZ2V0SWQoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0gICAgICAgICAgICAKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIChTdHJpbmdbXSlmaW5hbFRlbXBsYXRlSWRMaXN0LnRvQXJyYXkobmV3IFN0cmluZ1tde30pOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgbGFiZWwgb2YgYSBXZWIgc2VydmljZSBydW50aW1lIGdpdmVuIGl0cyBpZAotICAgKiBAcGFyYW0gcnVudGltZUlkIGlkIG9mIGEgV2ViIHNlcnZpY2UgcnVudGltZQotICAgKiBAcmV0dXJuIFN0cmluZyB0aGUgbGFiZWwgb2YgdGhlIFdlYiBzZXJ2aWNlIHJ1bnRpbWUgd2l0aCBhbiBpZCBlcXVhbCB0byBydW50aW1lSWQuCi0gICAqIFJldHVybnMgbnVsbCBpZiBzdWNoIGEgV2ViIHNlcnZpY2UgcnVudGltZSBjYW5ub3QgYmUgZm91bmQuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRSdW50aW1lTGFiZWxCeUlkKFN0cmluZyBydW50aW1lSWQpIAotICB7Ci0gICAgUnVudGltZURlc2NyaXB0b3IgZGVzYyA9IGdldFJ1bnRpbWVCeUlkKHJ1bnRpbWVJZCk7Ci0gICAgaWYgKGRlc2MgPT0gbnVsbCkKLSAgICAgIHJldHVybiBudWxsOwotICAgIAotICAgIHJldHVybiBkZXNjLmdldExhYmVsKCk7Ci0gIH0gICAgCi0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgUnVudGltZURlc2NyaXB0b3IgY29ycmVzcG9uZGluZyB0byB0aGUgV2ViIHNlcnZpY2UgcnVudGltZSB3aXRoIHRoZSBwcm92aWRlZCBsYWJlbAotICAgKiBAcGFyYW0gbGFiZWwgbGFiZWwgb2YgYSBXZWIgc2VydmljZSBydW50aW1lCi0gICAqIEByZXR1cm4gUnVudGltZURlc2NyaXB0b3IgY29ycmVzcG9uZGluZyB0byB0aGUgV2ViIHNlcnZpY2UgcnVudGltZSB3aXRoIHRoZSBwcm92aWRlZCBsYWJlbAotICAgKiBSZXR1cm5zIG51bGwgaWYgc3VjaCBhIFdlYiBzZXJ2aWNlIHJ1bnRpbWUgY2Fubm90IGJlIGZvdW5kLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBSdW50aW1lRGVzY3JpcHRvciBnZXRSdW50aW1lQnlMYWJlbChTdHJpbmcgbGFiZWwpCi0gIHsKLSAgICBJdGVyYXRvciBpdGVyID0gcmVnaXN0cnkucnVudGltZXNfLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIFJ1bnRpbWVEZXNjcmlwdG9yIGRlc2NyaXB0b3IgPSAoUnVudGltZURlc2NyaXB0b3IpaXRlci5uZXh0KCk7Ci0gICAgICBpZiAoZGVzY3JpcHRvciE9bnVsbCkgewotICAgICAgICBpZiAobGFiZWwuZXF1YWxzKGRlc2NyaXB0b3IuZ2V0TGFiZWwoKSkpCi0gICAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOyAgICAgIAotICB9ICAgICAgCi0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGxhYmVsIG9mIGFuIHNlcnZlciB0eXBlIGdpdmVuIGl0cyBpZAotICAgKiBAcGFyYW0gc2VydmVyRmFjdG9yeUlkIGlkIG9mIGEgc2VydmVyIHR5cGUKLSAgICogQHJldHVybiBTdHJpbmcgbGFiZWwgb2YgdGhlIHNlcnZlciB0eXBlIHdpdGggYW4gaWQgZXF1YWwgdG8gc2VydmVyRmFjdG9yeUlkLgotICAgKiBSZXR1cm5zIG51bGwgaWYgc3VjaCBhIHNlcnZlciB0eXBlIGNhbm5vdCBiZSBmb3VuZC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFNlcnZlckxhYmVsQnlJZChTdHJpbmcgc2VydmVyRmFjdG9yeUlkKQotICB7Ci0gICAgSVNlcnZlclR5cGUgc2VydmVyVHlwZSA9IFNlcnZlckNvcmUuZmluZFNlcnZlclR5cGUoc2VydmVyRmFjdG9yeUlkKTsKLSAgICBpZiAoc2VydmVyVHlwZSA9PSBudWxsKQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgCi0gICAgU3RyaW5nIHNlcnZlckxhYmVsID0gU2VydmVyVUlDb3JlLmdldExhYmVsUHJvdmlkZXIoKS5nZXRUZXh0KHNlcnZlclR5cGUpOyAgIAotICAgIHJldHVybiBzZXJ2ZXJMYWJlbDsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGxhYmVsIG9mIGFuIElTZXJ2ZXIgZ2l2ZW4gaXRzIGlkCi0gICAqIEBwYXJhbSBpbnN0YW5jZUlkIGlkIG9mIGFuIElTZXJ2ZXIKLSAgICogQHJldHVybiBTdHJpbmcgbGFiZWwgb2YgdGhlIElTZXJ2ZXIgd2l0aCBhbiBpZCBlcXVhbCB0byBpbnN0YW5jZUlkLgotICAgKi8gIAotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRTZXJ2ZXJJbnN0YW5jZUxhYmVsRnJvbUluc3RhbmNlSWQoIFN0cmluZyBpbnN0YW5jZUlkICkKLSAgewotICAgIElTZXJ2ZXIgc2VydmVyID0gU2VydmVyQ29yZS5maW5kU2VydmVyKCBpbnN0YW5jZUlkICk7ICAgIAotICAgIHJldHVybiBzZXJ2ZXIuZ2V0TmFtZSgpOwotICB9ICAKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdW5pb24gb2YgYWxsIHNlcnZlciB0eXBlIGlkcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBmYWNldCBydW50aW1lcwotICAgKiBpbiB0aGUgcHJvdmlkZWQgc2V0LgotICAgKiBAcGFyYW0gZmFjZXRSdW50aW1lcyBhIHNldCBjb250YWluaW5nIGVsZW1lbnRzIG9mIHR5cGUge0BsaW5rIElSdW50aW1lfS4KLSAgICogQHJldHVybiBhbiBhcnJheSBvZiBJU2VydmVyVHlwZSBpZHMuIFRoZSBhcnJheSBtYXkgaGF2ZSAwIGVsZW1lbnRzLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nW10gZ2V0U2VydmVyRmFjdG9yeUlkc0J5RmFjZXRSdW50aW1lcyhTZXQgZmFjZXRSdW50aW1lcykKLSAgewotICAgIAotICAgIEFycmF5TGlzdCBzdXBwb3J0ZWRTZXJ2ZXJGYWN0b3J5SWRzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIFN0cmluZ1tdIHNlcnZlclR5cGVJZHMgPSBnZXRBbGxTZXJ2ZXJGYWN0b3J5SWRzV2l0aFJ1bnRpbWVzKCk7Ci0gICAgSXRlcmF0b3IgaXRyID0gZmFjZXRSdW50aW1lcy5pdGVyYXRvcigpOwotICAgIHdoaWxlKGl0ci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgSVJ1bnRpbWUgZlJ1bnRpbWUgPSAoSVJ1bnRpbWUpaXRyLm5leHQoKTsKLSAgICAgIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JUnVudGltZSBzUnVudGltZSA9IEZhY2V0VXRpbC5nZXRSdW50aW1lKGZSdW50aW1lKTsKLSAgICAgIGZvciAoaW50IGk9MDsgaTxzZXJ2ZXJUeXBlSWRzLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICBJU2VydmVyVHlwZSBzZXJ2ZXJUeXBlID0gU2VydmVyQ29yZS5maW5kU2VydmVyVHlwZShzZXJ2ZXJUeXBlSWRzW2ldKTsKLSAgICAgICAgSVJ1bnRpbWVUeXBlIHJ1bnRpbWVUeXBlID0gc2VydmVyVHlwZS5nZXRSdW50aW1lVHlwZSgpOwotICAgICAgICBpZiAocnVudGltZVR5cGUgIT0gbnVsbCkKLSAgICAgICAgewotCSAgICAgICAgU3RyaW5nIHJ1bnRpbWVUeXBlSWQgPSBydW50aW1lVHlwZS5nZXRJZCgpOwotCSAgICAgICAgaWYgKHNSdW50aW1lICE9IG51bGwgJiYgc1J1bnRpbWUuZ2V0UnVudGltZVR5cGUoKSAhPSBudWxsICYmIHJ1bnRpbWVUeXBlSWQuZXF1YWxzKHNSdW50aW1lLmdldFJ1bnRpbWVUeXBlKCkuZ2V0SWQoKSkpCi0JICAgICAgICB7Ci0JICAgICAgICAgIHN1cHBvcnRlZFNlcnZlckZhY3RvcnlJZHMuYWRkKHNlcnZlclR5cGVJZHNbaV0pOyAgICAgICAgICAKLQkgICAgICAgIH0gICAgICAKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gKFN0cmluZ1tdKXN1cHBvcnRlZFNlcnZlckZhY3RvcnlJZHMudG9BcnJheShuZXcgU3RyaW5nWzBdKTsKLSAgICAKLSAgICAvL1RlbXBvcmFyaWx5IHJldHVybiBhbGwgZmFjdG9yeSBpZHMgd2l0aCBydW50aW1lcwotICAgIC8vcmV0dXJuIGdldEFsbFNlcnZlckZhY3RvcnlJZHNXaXRoUnVudGltZXMoKTsgICAgCi0gIH0KLSAgCi0gIC8vU2VydmljZS1zaWRlIHV0aWxpdGllcwotICAvKioKLSAgICogUmV0dXJucyBhIFdlYlNlcnZpY2VJbXBsIGdpdmVuIHRoZSBpZCBvZiBhIFdlYiBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIHR5cGUuCi0gICAqIEBwYXJhbSBpZCAKLSAgICogQHJldHVybiBXZWJTZXJ2aWNlSW1wbCB3aXRoIHRoZSBnaXZlbiBpZAotICAgKiBSZXR1cm5zIG51bGwgaWYgc3VjaCBhIFdlYlNlcnZpY2VJbXBsIGNhbm5vdCBiZSBmb3VuZC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgV2ViU2VydmljZUltcGwgZ2V0V2ViU2VydmljZUltcGxCeUlkKFN0cmluZyBpZCkKLSAgewotICAgIE9iamVjdCByZXN1bHQgPSByZWdpc3RyeS53ZWJTZXJ2aWNlSW1wbHNfLmdldChpZCk7Ci0gICAgaWYgKHJlc3VsdCE9bnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gKFdlYlNlcnZpY2VJbXBsKXJlc3VsdDsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7ICAgIAotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyBhIHtAbGluayBTZXJ2aWNlUnVudGltZURlc2NyaXB0b3J9IGdpdmVuIHRoZSBpZCBvZiBhIHNlcnZpY1J1bnRpbWUuCi0gICAqIEBwYXJhbSBpZCBvZiBhIHNlcnZpY2VSdW50aW1lCi0gICAqIEByZXR1cm4gU2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yIHdpdGggdGhlIGdpdmVuIGlkCi0gICAqIFJldHVybnMgbnVsbCBpZiBzdWNoIGEgU2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yIGNhbm5vdCBiZSBmb3VuZC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yIGdldFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvckJ5SWQoU3RyaW5nIGlkKQotICB7Ci0gICAgT2JqZWN0IHJlc3VsdCA9IHJlZ2lzdHJ5LnNlcnZpY2VSdW50aW1lc18uZ2V0KGlkKTsKLSAgICBpZiAocmVzdWx0IT1udWxsKQotICAgIHsKLSAgICAgIHJldHVybiAoU2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yKXJlc3VsdDsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7ICAgICAgICAKLSAgfSAgCi0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUge0BsaW5rIElXZWJTZXJ2aWNlUnVudGltZX0gb2YgdGhlIGdpdmVuIHNlcnZpY2VSdW50aW1lLiBFeHRlbmRlcnMgcHJvdmlkZSB0aGUgZnVsbHkgCi0gICAqIHF1YWxpZmllZCBuYW1lIG9mIGEgY29uY3JldGUgSVdlYlNlcnZpY2VSdW50aW1lIGluIHRoZSBjbGFzcyBhdHRyaWJ1dGUgb2YgYSBzZXJ2aWNlUnVudGltZXMgZXh0ZW5zaW9uLgotICAgKiBAcGFyYW0gc2VydmljZVJ1bnRpbWVJZCBpZCBvZiBhIHNlcnZpY2VSdW50aW1lCi0gICAqIEByZXR1cm4gSVdlYlNlcnZpY2VSdW50aW1lCi0gICAqLwotICBwdWJsaWMgc3RhdGljIElXZWJTZXJ2aWNlUnVudGltZSBnZXRTZXJ2aWNlUnVudGltZSggU3RyaW5nIHNlcnZpY2VSdW50aW1lSWQgKQotICB7Ci0gICAgU2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yIGRlc2NyaXB0b3IgPSBnZXRTZXJ2aWNlUnVudGltZURlc2NyaXB0b3JCeUlkKHNlcnZpY2VSdW50aW1lSWQpOwotICAgIElXZWJTZXJ2aWNlUnVudGltZSAgICB3ZWJzZXJ2aWNlUnVudGltZSAgICAgPSBudWxsOwotICAgIGlmIChkZXNjcmlwdG9yICE9IG51bGwpCi0gICAgewotICAgICAgICB3ZWJzZXJ2aWNlUnVudGltZSA9IGRlc2NyaXB0b3IuZ2V0V2ViU2VydmljZVJ1bnRpbWUoKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHdlYnNlcnZpY2VSdW50aW1lOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgaWQgb2YgYSBzZXJ2aWNlUnVudGltZSB0aGF0IHN1cHBvcnRzIHRoZSBwcm92aWRlZCBXZWIgc2VydmljZSB0eXBlLCBXZWIgc2VydmljZSBydW50aW1lLAotICAgKiBzZXJ2ZXIgdHlwZS9zZXJ2ZXIgaW5zdGFuY2UgKGlmIHByZXNlbnQpLCBwcm9qZWN0IG9yIHByb2plY3QgdHlwZS4KLSAgICogQHBhcmFtIHRycyBhbiBpbnN0YW5jZSBvZiB7QGxpbmsgVHlwZVJ1bnRpbWVTZXJ2ZXJ9IGNvbnRhaW5pbmcgYSBXZWIgc2VydmljZSB0eXBlIGlkLCBXZWIgc2VydmljZSBydW50aW1lIGlkLAotICAgKiBzZXJ2ZXIgdHlwZSBpZCBhbmQgc2VydmVyIGluc3RhbmNlIGlkLiBUaGUgV2ViIHNlcnZpY2UgdHlwZSBpZCBhbmQgV2ViIHNlcnZpY2UgcnVudGltZSBpZCBtdXN0IGJlIG5vbi1udWxsIAotICAgKiBhbmQgbm9uLWVtcHR5LiBUaGUgc2VydmVyIHR5cGUgaWQgYW5kIHNlcnZlciBpbnN0YW5jZSBpZCBtYXkgYmUgbnVsbCBvciBlbXB0eS4KLSAgICogQHBhcmFtIHByb2plY3ROYW1lIHRoZSBuYW1lIG9mIGFuIElQcm9qZWN0IHRoYXkgbWF5IG9yIG1hdCBub3QgZXhpc3QgaW4gdGhlIHdvcmtzcGFjZS4gTXVzdCBiZSBub24tbnVsbCBhbmQgCi0gICAqIG5vbi1lbXB0eS4KLSAgICogQHBhcmFtIHRlbXBsYXRlSWQgdGhlIGlkIG9mIGFuIHtAbGluayBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZX0uIE11c3QgYmUgbm9uLW51bGwgYW5kIG5vbi1lbXB0eSBpZgotICAgKiBhbiBJUHJvamVjdCB3aXRoIHRoZSBuYW1lIHByb2plY3ROYW1lIGRvZXMgbm90IGV4aXN0IGluIHRoZSB3b3Jrc3BhY2UuIAotICAgKiBAcmV0dXJuIFN0cmluZyBpZCBvZiBhIHNlcnZpY2VSdW50aW1lIHRoYXQgc3VwcG9ydHMgdGhlIHByb3ZpZGVkIFdlYiBzZXJ2aWNlIHR5cGUsIFdlYiBzZXJ2aWNlIHJ1bnRpbWUsCi0gICAqIHNlcnZlciB0eXBlL3NlcnZlciBpbnN0YW5jZSAoaWYgcHJlc2VudCksIHByb2plY3Qgb3IgcHJvamVjdCB0eXBlLiBSZXR1cm5zIGFuIGVtcHR5IFN0cmluZyBpZiBubyAKLSAgICogc3VjaCBzZXJ2aWNlUnVudGltZSBjb3VsZCBiZSBmb3VuZC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFNlcnZpY2VSdW50aW1lSWQoVHlwZVJ1bnRpbWVTZXJ2ZXIgdHJzLCBTdHJpbmcgcHJvamVjdE5hbWUsIFN0cmluZyB0ZW1wbGF0ZUlkKQotICB7Ci0gICAgYm9vbGVhbiBzZXJ2ZXJTZWxlY3RlZCA9ICh0cnMuZ2V0U2VydmVySWQoKSAhPSBudWxsKSAmJiAodHJzLmdldFNlcnZlcklkKCkubGVuZ3RoKCkgPiAwKTsgCi0gICAgLy9GaW5kIHRoZSBmaXJzdCBzZXJ2aWNlUnVudGltZSB0aGF0IHN1cHBvcnRzIHRoZSBpbXBsZW1lbnRhdGlvbiB0eXBlLCBydW50aW1lLCBzZXJ2ZXIsIGFuZCBwcm9qZWN0Ci0gICAgU3RyaW5nW10gZGVzY3MgPSBnZXRTZXJ2aWNlUnVudGltZXNCeVNlcnZpY2VUeXBlKHRycy5nZXRUeXBlSWQoKSk7Ci0gICAgZm9yIChpbnQgaT0wOyBpPGRlc2NzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gZ2V0U2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yQnlJZChkZXNjc1tpXSk7ICAgICAgCi0gICAgICBpZiAoZGVzYy5nZXRSdW50aW1lKCkuZ2V0SWQoKS5lcXVhbHModHJzLmdldFJ1bnRpbWVJZCgpKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKHNlcnZlclNlbGVjdGVkKQotICAgICAgICB7Ci0gICAgICAgICAgYm9vbGVhbiBzdXBwb3J0c1NlcnZlciA9IGRvZXNTZXJ2aWNlUnVudGltZVN1cHBvcnRTZXJ2ZXIoZGVzYy5nZXRJZCgpLCB0cnMuZ2V0U2VydmVySWQoKSk7Ci0gICAgICAgICAgaWYgKCFzdXBwb3J0c1NlcnZlcikKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIElQcm9qZWN0IHByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QocHJvamVjdE5hbWUpOwotICAgICAgICBpZiAocHJvamVjdC5leGlzdHMoKSkKLSAgICAgICAgewotICAgICAgICAgIGlmIChkb2VzU2VydmljZVJ1bnRpbWVTdXBwb3J0UHJvamVjdChkZXNjLmdldElkKCksIHByb2plY3ROYW1lKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZGVzYy5nZXRJZCgpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAvL0NoZWNrIGlmIHRlbXBsYXRlIGlzIHN1cHBvcnRlZAotICAgICAgICAgIGlmIChkb2VzU2VydmljZVJ1bnRpbWVTdXBwb3J0VGVtcGxhdGUoZGVzYy5nZXRJZCgpLCB0ZW1wbGF0ZUlkKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZGVzYy5nZXRJZCgpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gIiI7Ci0gICAgCi0gIH0gIAotICAKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIFdlYiBzZXJ2aWNlIHNjZW5hcmlvIGZyb20gdGhlIFdlYiBzZXJ2aWNlIHR5cGUuCi0gICAqIEBwYXJhbSB0eXBlSWQgbXVzdCBiZSBhIFN0cmluZyBvZiB0aGUgZm9ybWF0ICIwL2ltcGxJZCIKLSAgICogd2hlcmUgdGhlIGRpZ2l0IGJlZm9yZSB0aGUgIi8iIHJlcHJlc2VudHMgdGhlIHNjZW5hcmlvCi0gICAqIChlLmcuIFdlYlNlcnZpY2VTY2VuYXJpby5CT1RUT01fVVApIGFuZCB0aGUgaW1wbElkIGlzIHRoZSBXZWIgc2VydmljZSBpbXBsZW1lbnRhdGlvbiB0eXBlIGlkLgotICAgKiBAcmV0dXJuIGludCBzY2VuYXJpbyAoZS5nLiBXZWJTZXJ2aWNlU2NlbmFyaW8uQk9UVE9NX1VQIG9yIFdlYlNlcnZpY2VTY2VuYXJpby5UT1BfRE9XTikKLSAgICovICAgICAgICAKLSAgcHVibGljIHN0YXRpYyBpbnQgZ2V0U2NlbmFyaW9Gcm9tVHlwZUlkKFN0cmluZyB0eXBlSWQpCi0gIHsKLSAgICByZXR1cm4gSW50ZWdlci5wYXJzZUludCh0eXBlSWQuc3Vic3RyaW5nKDAsdHlwZUlkLmluZGV4T2YoIi8iKSkpOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgV2ViIHNlcnZpY2UgaW1wbGVtZW5hdGlvbiB0eXBlIGlkIGZyb24gdGhlIFdlYiBzZXJ2aWNlIHR5cGUgaWQuCi0gICAqIEBwYXJhbSB0eXBlSWQgbXVzdCBiZSBhIFN0cmluZyBvZiB0aGUgZm9ybWF0ICIwL2ltcGxJZCIKLSAgICogd2hlcmUgdGhlIGRpZ2l0IGJlZm9yZSB0aGUgIi8iIHJlcHJlc2VudHMgdGhlIHNjZW5hcmlvCi0gICAqIChlLmcuIFdlYlNlcnZpY2VTY2VuYXJpby5CT1RUT01fVVApIGFuZCB0aGUgaW1wbElkIGlzIHRoZSBXZWIgc2VydmljZSBpbXBsZW1lbnRhdGlvbiB0eXBlIGlkLgotICAgKiBAcmV0dXJuIFN0cmluZyB0aGUgV2ViU2VydmljZUltcGwgaWQuCi0gICAqLyAgICAgICAgCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFdlYlNlcnZpY2VJbXBsSWRGcm9tVHlwZUlkKFN0cmluZyB0eXBlSWQpCi0gIHsKLSAgICByZXR1cm4gdHlwZUlkLnN1YnN0cmluZyh0eXBlSWQuaW5kZXhPZigiLyIpKzEpOwotICB9ICAgIAotICAKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGlkcyBvZiBhbGwgV2ViIHNlcnZpY2UgcnVudGltZXMgdGhhdCBzdXBwb3J0IHRoZSBnaXZlbgotICAgKiBXZWIgc2VydmljZSB0eXBlLgotICAgKiAKLSAgICogQHBhcmFtIHR5cGVJZCBtdXN0IGJlIGEgU3RyaW5nIG9mIHRoZSBmb3JtYXQgIjAvaW1wbElkIgotICAgKiB3aGVyZSB0aGUgZGlnaXQgYmVmb3JlIHRoZSAiLyIgcmVwcmVzZW50cyB0aGUgc2NlbmFyaW8KLSAgICogKGUuZy4gV2ViU2VydmljZVNjZW5hcmlvLkJPVFRPTV9VUCkgYW5kIHRoZSBpbXBsSWQgaXMgdGhlIFdlYiBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIHR5cGUgaWQuCi0gICAqIAotICAgKiBAcmV0dXJuIFN0cmluZ1tdIGFycmF5IGNvbnRhaW5pbmcgdGhlIGlkcyBvZiBhbGwgV2ViIHNlcnZpY2UgcnVudGltZXMgdGhhdAotICAgKiBzdXBwb3J0IHRoZSBnaXZlbiBXZWIgc2VydmljZSB0eXBlLiBUaGUgYXJyYXkgbWF5IGhhdmUgMCBlbGVtZW50cy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nW10gZ2V0UnVudGltZXNCeVNlcnZpY2VUeXBlKFN0cmluZyB0eXBlSWQpIAotICB7Ci0gICAgaW50IHNjZW5hcmlvID0gZ2V0U2NlbmFyaW9Gcm9tVHlwZUlkKHR5cGVJZCk7Ci0gICAgU3RyaW5nIGltcGxJZCA9IGdldFdlYlNlcnZpY2VJbXBsSWRGcm9tVHlwZUlkKHR5cGVJZCk7ICAgIAotICAgIEFycmF5TGlzdCBpZHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgSXRlcmF0b3IgaXRlciA9IHJlZ2lzdHJ5LnNlcnZpY2VSdW50aW1lc18udmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpICAgCi0gICAgewotICAgICAgU2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yIGRlc2MgPSAoU2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yKWl0ZXIubmV4dCgpOwotICAgICAgLy9DaGVjayBpZiB0aGlzIHNlcnZpY2VSdW50aW1lIHN1cHBvcnRzIHRoZSBpbXBsZW1lbnRhdGlvbiB0eXBlCi0gICAgICBpZiAoZGVzYy5nZXRTZXJ2aWNlSW1wbGVtZW50YXRpb25UeXBlKCkuZ2V0SWQoKS5lcXVhbHMoaW1wbElkKSkKLSAgICAgIHsKLSAgICAgICAgc3dpdGNoIChzY2VuYXJpbykKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgV2ViU2VydmljZVNjZW5hcmlvLkJPVFRPTVVQOgotICAgICAgICAgICAgaWYgKGRlc2MuZ2V0Qm90dG9tVXAoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIHJ1bnRpbWVJZCA9IGRlc2MuZ2V0UnVudGltZSgpLmdldElkKCk7IAotICAgICAgICAgICAgICBpZiAoIWlkcy5jb250YWlucyhydW50aW1lSWQpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWRzLmFkZChydW50aW1lSWQpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIFdlYlNlcnZpY2VTY2VuYXJpby5UT1BET1dOOgotICAgICAgICAgICAgaWYgKGRlc2MuZ2V0VG9wRG93bigpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgcnVudGltZUlkID0gZGVzYy5nZXRSdW50aW1lKCkuZ2V0SWQoKTsgCi0gICAgICAgICAgICAgIGlmICghaWRzLmNvbnRhaW5zKHJ1bnRpbWVJZCkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZHMuYWRkKHJ1bnRpbWVJZCk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiAoU3RyaW5nW10paWRzLnRvQXJyYXkobmV3IFN0cmluZ1tde30pOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgaWRzIG9mIGFsbCBzZXJ2aWNlUnVudGltZXMgdGhhdCBzdXBwb3J0IHRoZSBnaXZlbgotICAgKiBXZWIgc2VydmljZSB0eXBlLgotICAgKiAKLSAgICogQHBhcmFtIHR5cGVJZCBtdXN0IGJlIGEgU3RyaW5nIG9mIHRoZSBmb3JtYXQgIjAvaW1wbElkIgotICAgKiB3aGVyZSB0aGUgZGlnaXQgYmVmb3JlIHRoZSAiLyIgcmVwcmVzZW50cyB0aGUgc2NlbmFyaW8KLSAgICogKGUuZy4gV2ViU2VydmljZVNjZW5hcmlvLkJPVFRPTV9VUCkgYW5kIHRoZSBpbXBsSWQgaXMgdGhlIFdlYiBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIHR5cGUgaWQuCi0gICAqIAotICAgKiBAcmV0dXJucyBTdHJpbmdbXSBhcnJheSBjb250YWluaW5nIHRoZSBpZHMgb2YgYWxsIHNlcnZpY2VSdW50aW1lcyB0aGF0Ci0gICAqIHN1cHBvcnQgdGhlIGdpdmVuIFdlYiBzZXJ2aWNlIHR5cGUuIFRoZSBhcnJheSBtYXkgaGF2ZSAwIGVsZW1lbnRzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmdbXSBnZXRTZXJ2aWNlUnVudGltZXNCeVNlcnZpY2VUeXBlKFN0cmluZyB0eXBlSWQpIAotICB7Ci0gICAgaW50IHNjZW5hcmlvID0gZ2V0U2NlbmFyaW9Gcm9tVHlwZUlkKHR5cGVJZCk7Ci0gICAgU3RyaW5nIGltcGxJZCA9IGdldFdlYlNlcnZpY2VJbXBsSWRGcm9tVHlwZUlkKHR5cGVJZCk7ICAgIAotICAgIEFycmF5TGlzdCBpZHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgSXRlcmF0b3IgaXRlciA9IHJlZ2lzdHJ5LnNlcnZpY2VSdW50aW1lc18udmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpICAgCi0gICAgewotICAgICAgU2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yIGRlc2MgPSAoU2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yKWl0ZXIubmV4dCgpOwotICAgICAgLy9DaGVjayBpZiB0aGlzIHNlcnZpY2VSdW50aW1lIHN1cHBvcnRzIHRoZSBpbXBsZW1lbnRhdGlvbiB0eXBlCi0gICAgICBpZiAoZGVzYy5nZXRTZXJ2aWNlSW1wbGVtZW50YXRpb25UeXBlKCkuZ2V0SWQoKS5lcXVhbHMoaW1wbElkKSkKLSAgICAgIHsKLSAgICAgICAgc3dpdGNoIChzY2VuYXJpbykKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgV2ViU2VydmljZVNjZW5hcmlvLkJPVFRPTVVQOgotICAgICAgICAgICAgaWYgKGRlc2MuZ2V0Qm90dG9tVXAoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIHNlcnZpY2VSdW50aW1lSWQgPSBkZXNjLmdldElkKCk7IAotICAgICAgICAgICAgICBpZHMuYWRkKHNlcnZpY2VSdW50aW1lSWQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBXZWJTZXJ2aWNlU2NlbmFyaW8uVE9QRE9XTjoKLSAgICAgICAgICAgIGlmIChkZXNjLmdldFRvcERvd24oKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIHNlcnZpY2VSdW50aW1lSWQgPSBkZXNjLmdldElkKCk7IAotICAgICAgICAgICAgICBpZHMuYWRkKHNlcnZpY2VSdW50aW1lSWQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDogICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIChTdHJpbmdbXSlpZHMudG9BcnJheShuZXcgU3RyaW5nW117fSk7Ci0gIH0gIAotICAKLSAgLyoqCi0gICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIGdpdmVuIFdlYiBzZXJ2aWNlIHJ1bnRpbWUgc3VwcG9ydHMgdGhlIGdpdmVuIAotICAgKiBXZWIgc2VydmljZSB0eXBlLgotICAgKiAKLSAgICogQHBhcmFtIHR5cGVJZCBtdXN0IGJlIGEgU3RyaW5nIG9mIHRoZSBmb3JtYXQgIjAvaW1wbElkIgotICAgKiB3aGVyZSB0aGUgZGlnaXQgYmVmb3JlIHRoZSAiLyIgcmVwcmVzZW50cyB0aGUgc2NlbmFyaW8KLSAgICogKGUuZy4gV2ViU2VydmljZVNjZW5hcmlvLkJPVFRPTV9VUCkgYW5kIHRoZSBpbXBsSWQgaXMgdGhlIFdlYiBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIHR5cGUgaWQuCi0gICAqIAotICAgKiBAcGFyYW0gcnVudGltZUlkIGlkIG9mIGEgV2ViIHNlcnZpY2UgcnVudGltZQotICAgKiAKLSAgICogQHJldHVybiBib29sZWFuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBnaXZlbiBXZWIgc2VydmljZSBydW50aW1lIHN1cHBvcnRzIHRoZSBnaXZlbiAKLSAgICogV2ViIHNlcnZpY2UgdHlwZS4gPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS4KLSAgICovIAotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNSdW50aW1lU3VwcG9ydGVkRm9yU2VydmljZVR5cGUoU3RyaW5nIHR5cGVJZCwgU3RyaW5nIHJ1bnRpbWVJZCkKLSAgewotICAgIFN0cmluZ1tdIHNlcnZpY2VSdW50aW1lSWRzID0gZ2V0U2VydmljZVJ1bnRpbWVzQnlTZXJ2aWNlVHlwZSh0eXBlSWQpOwotICAgIGlmIChzZXJ2aWNlUnVudGltZUlkcyE9bnVsbCkKLSAgICB7Ci0gICAgICBmb3IgKGludCBpPTA7IGkgPCBzZXJ2aWNlUnVudGltZUlkcy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgU2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yIGRlc2MgPSBnZXRTZXJ2aWNlUnVudGltZURlc2NyaXB0b3JCeUlkKHNlcnZpY2VSdW50aW1lSWRzW2ldKTsKLSAgICAgICAgaWYgKGRlc2MuZ2V0UnVudGltZSgpLmdldElkKCkuZXF1YWxzKHJ1bnRpbWVJZCkpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0gIAotICAKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGlkcyBvZiBhbGwgc2VydmVyIHR5cGVzIHRoYXQgc3VwcG9ydCB0aGUgZ2l2ZW4KLSAgICogV2ViIHNlcnZpY2UgdHlwZS4KLSAgICogCi0gICAqIEBwYXJhbSB0eXBlSWQgbXVzdCBiZSBhIFN0cmluZyBvZiB0aGUgZm9ybWF0ICIwL2ltcGxJZCIKLSAgICogd2hlcmUgdGhlIGRpZ2l0IGJlZm9yZSB0aGUgIi8iIHJlcHJlc2VudHMgdGhlIHNjZW5hcmlvCi0gICAqIChlLmcuIFdlYlNlcnZpY2VTY2VuYXJpby5CT1RUT01fVVApIGFuZCB0aGUgaW1wbElkIGlzIHRoZSBXZWIgc2VydmljZSBpbXBsZW1lbnRhdGlvbiB0eXBlIGlkLgotICAgKiAKLSAgICogQHJldHVybnMgU3RyaW5nW10gYXJyYXkgY29udGFpbmluZyB0aGUgaWRzIG9mIGFsbCBzZXJ2ZXIgdHlwZXMgdGhhdAotICAgKiBzdXBwb3J0IHRoZSBnaXZlbiBXZWIgc2VydmljZSB0eXBlLiBUaGUgYXJyYXkgbWF5IGhhdmUgMCBlbGVtZW50cy4gCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZ1tdIGdldFNlcnZlckZhY3RvcnlJZHNCeVNlcnZpY2VUeXBlKFN0cmluZyB0eXBlSWQpCi0gIHsKLSAgICBBcnJheUxpc3Qgc2VydmVyRmFjdG9yeUlkcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBTdHJpbmdbXSBzcnRzID0gZ2V0U2VydmljZVJ1bnRpbWVzQnlTZXJ2aWNlVHlwZSh0eXBlSWQpOwotICAgIGlmIChzcnRzICE9IG51bGwpCi0gICAgewotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzcnRzLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICAvL0dldCB0aGUgcnVudGltZXMgdGhhdCB3b3JrIGZvciB0aGUgZmFjZXRzIHJlcXVpcmVkIGZvciB0aGlzIHNlcnZpY2VSdW50aW1lICAgICAgICAKLSAgICAgICAgU3RyaW5nW10gZklkcyA9IGdldFNlcnZlckZhY3RvcnlJZHNCeVNlcnZpY2VSdW50aW1lKHNydHNbaV0pOwotICAgICAgICBmb3IgKGludCBqPTA7IGo8Zklkcy5sZW5ndGg7IGorKykKLSAgICAgICAgewotICAgICAgICAgIGlmICghc2VydmVyRmFjdG9yeUlkcy5jb250YWlucyhmSWRzW2pdKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBzZXJ2ZXJGYWN0b3J5SWRzLmFkZChmSWRzW2pdKTsgICAgICAgICAgICAKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIChTdHJpbmdbXSlzZXJ2ZXJGYWN0b3J5SWRzLnRvQXJyYXkobmV3IFN0cmluZ1tde30pOwotICAgIAotICAgIC8vVGVtcG9yYXJpbHkgcmV0dXJuIGFsbCBzZXJ2ZXIgdHlwZSBpZHMuCi0gICAgLy9yZXR1cm4gZ2V0QWxsU2VydmVyRmFjdG9yeUlkc1dpdGhSdW50aW1lcygpOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgZ2l2ZW4gc2VydmVyIHR5cGUgc3VwcG9ydHMgdGhlIGdpdmVuIAotICAgKiBXZWIgc2VydmljZSB0eXBlLgotICAgKiAKLSAgICogQHBhcmFtIHR5cGVJZCBtdXN0IGJlIGEgU3RyaW5nIG9mIHRoZSBmb3JtYXQgIjAvaW1wbElkIgotICAgKiB3aGVyZSB0aGUgZGlnaXQgYmVmb3JlIHRoZSAiLyIgcmVwcmVzZW50cyB0aGUgc2NlbmFyaW8KLSAgICogKGUuZy4gV2ViU2VydmljZVNjZW5hcmlvLkJPVFRPTV9VUCkgYW5kIHRoZSBpbXBsSWQgaXMgdGhlIFdlYiBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIHR5cGUgaWQuCi0gICAqIAotICAgKiBAcGFyYW0gc2VydmVyRmFjdG9yeUlkIGlkIG9mIGEgc2VydmVyIHR5cGUKLSAgICogCi0gICAqIEByZXR1cm4gYm9vbGVhbiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgZ2l2ZW4gc2VydmVyIHR5cGUgc3VwcG9ydHMgdGhlIGdpdmVuIAotICAgKiBXZWIgc2VydmljZSB0eXBlLiA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzU2VydmVyU3VwcG9ydGVkRm9yQ2hvc2VuU2VydmljZVR5cGUoU3RyaW5nIHR5cGVJZCwgU3RyaW5nIHNlcnZlckZhY3RvcnlJZCkKLSAgewotICAgIFN0cmluZ1tdIGZJZHMgPSBnZXRTZXJ2ZXJGYWN0b3J5SWRzQnlTZXJ2aWNlVHlwZSh0eXBlSWQpOwotICAgIGlmIChmSWRzID09IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGZvciAoaW50IGk9MDtpPGZJZHMubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICBpZiAoc2VydmVyRmFjdG9yeUlkLmVxdWFscyhmSWRzW2ldKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9ICAgICAgCi0gICAgfQotICAgIAotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGlkcyBvZiBhbGwgc2VydmVyIHR5cGVzIHRoYXQgc3VwcG9ydCB0aGUgZ2l2ZW4KLSAgICogc2VydmljZVJ1bnRpbWUuCi0gICAqIAotICAgKiBAcGFyYW0gc2VydmljZVJ1bnRpbWVJZCBpZCBvZiBhIHNlcnZpY2VSdW50aW1lCi0gICAqIAotICAgKiBAcmV0dXJucyBTdHJpbmdbXSBhcnJheSBjb250YWluaW5nIHRoZSBpZHMgb2YgYWxsIHNlcnZlciB0eXBlcyB0aGF0Ci0gICAqIHN1cHBvcnQgdGhlIGdpdmVuIHNlcnZpY2VSdW50aW1lLiBUaGUgYXJyYXkgbWF5IGhhdmUgMCBlbGVtZW50cy4gCi0gICAqLyAgIAotICBwdWJsaWMgc3RhdGljIFN0cmluZ1tdIGdldFNlcnZlckZhY3RvcnlJZHNCeVNlcnZpY2VSdW50aW1lKFN0cmluZyBzZXJ2aWNlUnVudGltZUlkKQotICB7ICAgICAgIAotICAgIFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gZ2V0U2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yQnlJZChzZXJ2aWNlUnVudGltZUlkKTsKLSAgICBTZXQgZmFjZXRSdW50aW1lcyA9IGdldFJ1bnRpbWVzKGRlc2MuZ2V0UmVxdWlyZWRGYWNldFZlcnNpb25zKCkpOwotICAgICAgICAgICAgCi0gICAgLy9UZW1wb3JhcmlseSByZXR1cm4gYWxsIHNlcnZlciB0eXBlcwotICAgIC8vcmV0dXJuIGdldEFsbFNlcnZlckZhY3RvcnlJZHNXaXRoUnVudGltZXMoKTsKLSAgICByZXR1cm4gZ2V0U2VydmVyRmFjdG9yeUlkc0J5RmFjZXRSdW50aW1lcyhmYWNldFJ1bnRpbWVzKTsKLSAgfSAKLSAgCi0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBnaXZlbiBzZXJ2ZXIgdHlwZSBzdXBwb3J0cyB0aGUgZ2l2ZW4gCi0gICAqIHNlcnZpY2VSdW50aW1lLgotICAgKiAKLSAgICogQHBhcmFtIHNlcnZpY2VSdW50aW1lSWQgaWQgb2YgYSBzZXJ2aWNlUnVudGltZQotICAgKiBAcGFyYW0gc2VydmVyRmFjdG9yeUlkIGlkIG9mIGEgc2VydmVyIHR5cGUKLSAgICogCi0gICAqIEByZXR1cm4gYm9vbGVhbiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgZ2l2ZW4gc2VydmVyIHR5cGUgc3VwcG9ydHMgdGhlIGdpdmVuIAotICAgKiBzZXJ2aWNlUnVudGltZS4gPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS4KLSAgICovICAKLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGRvZXNTZXJ2aWNlUnVudGltZVN1cHBvcnRTZXJ2ZXIoU3RyaW5nIHNlcnZpY2VSdW50aW1lSWQsIFN0cmluZyBzZXJ2ZXJGYWN0b3J5SWQpCi0gIHsKLSAgICBTdHJpbmdbXSBzZXJ2ZXJJZHMgPSBnZXRTZXJ2ZXJGYWN0b3J5SWRzQnlTZXJ2aWNlUnVudGltZShzZXJ2aWNlUnVudGltZUlkKTsKLSAgICBmb3IgKGludCBpPTA7IGk8c2VydmVySWRzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGlmIChzZXJ2ZXJJZHNbaV0uZXF1YWxzKHNlcnZlckZhY3RvcnlJZCkpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgICAKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGxhYmVscyBhbmQgaWRzIG9mIGFsbCBXZWIgc2VydmljZSB0eXBlcy4gVXNlZCB0byBwb3B1bGF0ZSB0aGUgV2ViIHNlcnZpY2UgdHlwZSBjb21ibyBib3ggb24KLSAgICogcGFnZSAxIG9mIHRoZSBXZWIgc2VydmljZSB3aXphcmQuCi0gICAqIEByZXR1cm4ge0BsaW5rIExhYmVsc0FuZElkc30KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgTGFiZWxzQW5kSWRzIGdldFNlcnZpY2VUeXBlTGFiZWxzKCkKLSAgeyAgIAotICAgIExhYmVsc0FuZElkcyBsYWJlbElkcyA9IG5ldyBMYWJlbHNBbmRJZHMoKTsKLSAgICBJdGVyYXRvciAgICAgaXRlcmF0b3IgPSByZWdpc3RyeS53ZWJTZXJ2aWNlVHlwZXNMaXN0Xy5pdGVyYXRvcigpOwotICAgIGludCAgICAgICAgICBzaXplICAgICA9IHJlZ2lzdHJ5LndlYlNlcnZpY2VUeXBlc0xpc3RfLnNpemUoKTsKLSAgICBTdHJpbmdbXSAgICAgbGFiZWxzICAgPSBuZXcgU3RyaW5nW3NpemVdOwotICAgIFN0cmluZ1tdICAgICBpZHMgICAgICA9IG5ldyBTdHJpbmdbc2l6ZV07Ci0gICAgaW50ICAgICAgICAgIGluZGV4ICAgID0gMDsKLSAgICAKLSAgICBsYWJlbElkcy5zZXRMYWJlbHNfKCBsYWJlbHMgKTsKLSAgICBsYWJlbElkcy5zZXRJZHNfKCBpZHMgKTsKLSAgICAKLSAgICB3aGlsZSggaXRlcmF0b3IuaGFzTmV4dCgpICkgCi0gICAgewotICAgICAgU3RyaW5nIHdzdCA9IChTdHJpbmcpaXRlcmF0b3IubmV4dCgpOwotICAgICAgaW50IHNjZW5hcmlvID0gZ2V0U2NlbmFyaW9Gcm9tVHlwZUlkKHdzdCk7Ci0gICAgICBTdHJpbmcgaW1wbElkID0gZ2V0V2ViU2VydmljZUltcGxJZEZyb21UeXBlSWQod3N0KTsKLSAgICAgIFdlYlNlcnZpY2VJbXBsIHdzaW1wbCA9IGdldFdlYlNlcnZpY2VJbXBsQnlJZChpbXBsSWQpOwotICAgICAgU3RyaW5nIGltcGxsYWJlbCA9IHdzaW1wbC5nZXRMYWJlbCgpOwotICAgICAgaWRzW2luZGV4XSAgICA9IHdzdDsKLSAgICAgIFN0cmluZyBzY2VuTGFiZWwgPSAiIjsKLSAgICAgIHN3aXRjaChzY2VuYXJpbykKLSAgICAgIHsKLSAgICAgIGNhc2UgV2ViU2VydmljZVNjZW5hcmlvLkJPVFRPTVVQOgotICAgICAgICBzY2VuTGFiZWwgPSBOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuQk9UVE9NVVBfTEFCRUwsIG5ldyBTdHJpbmdbMF0pOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgV2ViU2VydmljZVNjZW5hcmlvLlRPUERPV046Ci0gICAgICAgIHNjZW5MYWJlbCA9IE5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT1BET1dOX0xBQkVMLCBuZXcgU3RyaW5nWzBdKTsKLSAgICAgICAgYnJlYWs7IAotICAgICAgZGVmYXVsdDoKLSAgICAgIH0KLSAgICAgIGxhYmVsc1tpbmRleF0gPSBOTFMuYmluZChDb25zdW1wdGlvblVJTWVzc2FnZXMuQ09NQklORURfVFlQRV9BTkRfUlVOVElNRV9MQUJFTCwgbmV3IFN0cmluZ1tdeyBzY2VuTGFiZWwsIGltcGxsYWJlbCB9KTsKLSAgICAgIGluZGV4Kys7Ci0gICAgfSAgICAKLSAgICAKLSAgICByZXR1cm4gbGFiZWxJZHM7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBpZCBvZiBhIFdlYiBzZXJ2aWNlIHJ1bnRpbWUgdGhhdCBzdXBwb3J0cyB0aGUgZ2l2ZW4gV2ViIHNlcnZpY2UgdHlwZS4KLSAgICogIAotICAgKiBAcGFyYW0gdHlwZUlkIHdpbGwgYmUgYSBTdHJpbmcgb2YgdGhlIGZvcm1hdCAiMC9pbXBsSWQiCi0gICAqIHdoZXJlIHRoZSBkaWdpdCBiZWZvcmUgdGhlICIvIiByZXByZXNlbnRzIHRoZSBzY2VuYXJpbwotICAgKiAoZS5nLiBXZWJTZXJ2aWNlU2NlbmFyaW8uQk9UVE9NX1VQKSBhbmQgdGhlIGltcGxJZCBpcyB0aGUgV2ViIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gdHlwZSBpZC4KLSAgICogCi0gICAqIEByZXR1cm4gU3RyaW5nIGlkIG9mIGEgV2ViIHNlcnZpY2UgcnVudGltZSB0aGF0IHN1cHBvcnRzIHRoZSBnaXZlbiBXZWIgc2VydmljZSB0eXBlLiAKLSAgICogUmV0dXJucyBudWxsIGlmIHN1Y2ggYSBXZWIgc2VydmljZSBydW50aW1lIGNhbm5vdCBiZSBmb3VuZC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldERlZmF1bHRSdW50aW1lVmFsdWVGb3IoU3RyaW5nIHR5cGVJZCkKLSAgewotICAgIFN0cmluZ1tdIHNySWRzID0gZ2V0U2VydmljZVJ1bnRpbWVzQnlTZXJ2aWNlVHlwZSh0eXBlSWQpOwotICAgIGlmIChzcklkcyA9PSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICAKLSAgICBTZXJ2aWNlUnVudGltZURlc2NyaXB0b3IgZGVzYyA9IGdldFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvckJ5SWQoc3JJZHNbMF0pOwotICAgIHJldHVybiBkZXNjLmdldFJ1bnRpbWUoKS5nZXRJZCgpOwotICB9ICAgICAgCi0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGlkIG9mIGEgc2VydmVyIHR5cGUgdGhhdCBzdXBwb3J0cyB0aGUgZ2l2ZW4gV2ViIHNlcnZpY2UgdHlwZS4KLSAgICogIAotICAgKiBAcGFyYW0gdHlwZUlkIHdpbGwgYmUgYSBTdHJpbmcgb2YgdGhlIGZvcm1hdCAiMC9pbXBsSWQiCi0gICAqIHdoZXJlIHRoZSBkaWdpdCBiZWZvcmUgdGhlICIvIiByZXByZXNlbnRzIHRoZSBzY2VuYXJpbwotICAgKiAoZS5nLiBXZWJTZXJ2aWNlU2NlbmFyaW8uQk9UVE9NX1VQKSBhbmQgdGhlIGltcGxJZCBpcyB0aGUgV2ViIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gdHlwZSBpZC4KLSAgICogCi0gICAqIEByZXR1cm4gU3RyaW5nIGlkIG9mIGEgaWQgb2YgYSBzZXJ2ZXIgdHlwZSB0aGF0IHN1cHBvcnRzIHRoZSBnaXZlbiBXZWIgc2VydmljZSB0eXBlLiAKLSAgICogUmV0dXJucyBudWxsIGlmIHN1Y2ggYSBzZXJ2ZXIgdHlwZSBjYW5ub3QgYmUgZm91bmQuCi0gICAqLyAgICAKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RGVmYXVsdFNlcnZlclZhbHVlRm9yKFN0cmluZyB0eXBlSWQpCi0gIHsKLSAgICBTdHJpbmdbXSBmSWRzID0gZ2V0U2VydmVyRmFjdG9yeUlkc0J5U2VydmljZVR5cGUodHlwZUlkKTsKLSAgICBpZiAoZklkcz09bnVsbCB8fCBmSWRzLmxlbmd0aD09MCkKLSAgICAgIHJldHVybiBudWxsOwotICAgIAotICAgIHJldHVybiBmSWRzWzBdOwotICB9ICAgIAotICAKLSAgLyoqCi0gICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIGdpdmVuIGNvbWJpbmF0aW9uIG9mIHNlcnZlciB0eXBlLCBXZWIgc2VydmljZSBydW50aW1lLCBhbmQgV2ViIHNlcnZpY2UgdHlwZSBpcwotICAgKiBzdXBwb3J0ZWQuIFVzZWQgZm9yIHZhbGlkYXRpb24uCi0gICAqIAotICAgKiBAcGFyYW0gc2VydmVyRmFjdG9yeUlkIGlkIG9mIGEgc2VydmVyIHR5cGUKLSAgICogQHBhcmFtIHJ1bnRpbWVJZCBpZCBvZiBhIFdlYiBzZXJ2aWNlIHJ1bnRpbWUKLSAgICogQHBhcmFtIHR5cGVJZCB3aWxsIGJlIGEgU3RyaW5nIG9mIHRoZSBmb3JtYXQgIjAvaW1wbElkIgotICAgKiB3aGVyZSB0aGUgZGlnaXQgYmVmb3JlIHRoZSAiLyIgcmVwcmVzZW50cyB0aGUgc2NlbmFyaW8KLSAgICogKGUuZy4gV2ViU2VydmljZVNjZW5hcmlvLkJPVFRPTV9VUCkgYW5kIHRoZSBpbXBsSWQgaXMgdGhlIFdlYiBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIHR5cGUgaWQuCi0gICAqIAotICAgKiBAcmV0dXJuIGJvb2xlYW4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGdpdmVuIGNvbWJpbmF0aW9uIG9mIHNlcnZlciB0eXBlLCBXZWIgc2VydmljZSBydW50aW1lLCBhbmQgV2ViIHNlcnZpY2UgdHlwZSBpcwotICAgKiBzdXBwb3J0ZWQuIDxjb2RlPmZhbHNlPC9jb2RlPiBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNTZXJ2ZXJSdW50aW1lVHlwZVN1cHBvcnRlZChTdHJpbmcgc2VydmVyRmFjdG9yeUlkLCBTdHJpbmcgcnVudGltZUlkLCBTdHJpbmcgdHlwZUlkKSAgCi0gIHsKLSAgICAvL0Vuc3VyZSB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgc2VydmljZVJ1bnRpbWUgdGhhdCBzdXBwb3J0cyB0aGUgZ2l2ZW4gdHlwZQotICAgIFN0cmluZ1tdIHNlcnZpY2VSdW50aW1lcyA9IGdldFNlcnZpY2VSdW50aW1lc0J5U2VydmljZVR5cGUodHlwZUlkKTsKLSAgICBpZiAoc2VydmljZVJ1bnRpbWVzIT1udWxsICYmIHNlcnZpY2VSdW50aW1lcy5sZW5ndGg+MCkKLSAgICB7Ci0gICAgICAvL0Vuc3VyZSB0aGF0IGF0IGxlYXN0IG9uZSBvZiB0aGVzZSBzZXJ2ZXIgcnVudGltZXMgc3VwcG9ydHMgdGhlIGdpdmVuIHNlcnZlcgotICAgICAgZm9yIChpbnQgaT0wOyBpPHNlcnZpY2VSdW50aW1lcy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgU2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yIGRlc2MgPSBnZXRTZXJ2aWNlUnVudGltZURlc2NyaXB0b3JCeUlkKHNlcnZpY2VSdW50aW1lc1tpXSk7Ci0gICAgICAgIGlmIChkZXNjLmdldFJ1bnRpbWUoKS5nZXRJZCgpLmVxdWFscyhydW50aW1lSWQpKQotICAgICAgICB7Ci0gICAgICAgICAgLy9NYXRjaGVzIHRoZSB0eXBlIGFuZCB0aGUgcnVudGltZS4gQ2hlY2sgaWYgaXQgbWF0Y2hlcyB0aGUgc2VydmVyCi0gICAgICAgICAgU2V0IHJ1bnRpbWVzID0gZ2V0UnVudGltZXMoZGVzYy5nZXRSZXF1aXJlZEZhY2V0VmVyc2lvbnMoKSk7Ci0gICAgICAgICAgU3RyaW5nW10gZklkcyA9IGdldFNlcnZlckZhY3RvcnlJZHNCeUZhY2V0UnVudGltZXMocnVudGltZXMpOwotICAgICAgICAgIGZvciAoaW50IGo9MDsgajxmSWRzLmxlbmd0aDsgaisrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChmSWRzW2pdLmVxdWFscyhzZXJ2ZXJGYWN0b3J5SWQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9ICAgICAgICAgIAotICAgICAgICB9ICAgICAgICAKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy9kaWRuJ3QgZmluZCBhIG1hdGNoLiByZXR1cm4gZmFsc2UuCi0gICAgcmV0dXJuIGZhbHNlOwotICB9ICAKLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIFdlYiBzZXJ2aWNlIHR5cGUgaWRzIHRoYXQgYXJlIHN1aXRhYmxlIGZvciB0aGUgcHJvdmlkZWQgc2VsZWN0aW9uLgotICAgKiBVc2VkIHRvIGRlZmF1bHQgdGhlIFdlYiBzZXJ2aWNlIHR5cGUgY29tYm8gYm94IG9uIHBhZ2UgMSBvZiB0aGUgV2ViIHNlcnZpY2Ugd2l6YXJkCi0gICAqIGJhc2VkIG9uIHRoZSB1c2VyJ3MgaW5pdGlhbCBzZWxlY3Rpb24uCi0gICAqIEBwYXJhbSBzZWxlY3Rpb24KLSAgICogQHJldHVybiBTdHJpbmdbXSBhbiBhcnJheSBvZiBXZWIgc2VydmljZSB0eXBlIGlkcyB0aGF0IGFyZSBzdWl0YWJsZSBmb3IgdGhlIHByb3ZpZGVkIHNlbGVjdGlvbi4KLSAgICogUmV0dXJucyBudWxsIGlmIHRoZSBzZWxlY3Rpb24gaXMgZW1wdHkgb3Igbm8gc3VpdGFibGUgV2ViIHNlcnZpY2UgdHlwZXMgYXJlIGZvdW5kLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmdbXSBnZXRXZWJTZXJ2aWNlVHlwZUJ5U2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikKLSAgewotICAgIFR5cGVTZWxlY3Rpb25GaWx0ZXIyIHRzZiA9IG5ldyBUeXBlU2VsZWN0aW9uRmlsdGVyMigpOwotICAgIFN0cmluZ1tdIHdzdCA9IHRzZi5nZXRXZWJTZXJ2aWNlVHlwZUJ5SW5pdGlhbFNlbGVjdGlvbihzZWxlY3Rpb24sIHJlZ2lzdHJ5LndlYlNlcnZpY2VUeXBlc0xpc3RfKTsKLSAgICByZXR1cm4gd3N0ID09IG51bGwgPyBudWxsIDogd3N0OwotICB9ICAgIAotICAKLSAgLyoqCi0gICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIGdpdmVuIHNlcnZlciB0eXBlIHN1cHBvcnRzIHRoZSBnaXZlbiBXZWIgc2VydmljZSBydW50aW1lCi0gICAqIAotICAgKiBAcGFyYW0gcnVudGltZUlkIDogaWQgb2YgYSBXZWIgc2VydmljZSBydW50aW1lCi0gICAqIEBwYXJhbSBmYWN0b3J5SWQgOiBpZCBvZiBhIHNlcnZlciB0eXBlCi0gICAqIEByZXR1cm4gYm9vbGVhbiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgZ2l2ZW4gc2VydmVyIHR5cGUgc3VwcG9ydHMgdGhlIGdpdmVuIAotICAgKiBXZWIgc2VydmljZSBydW50aW1lIGZvciB0aGUgc2VydmljZSBzaWRlLiA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGRvZXNSdW50aW1lU3VwcG9ydFNlcnZlckZvclNlcnZpY2VTaWRlKFN0cmluZyBydW50aW1lSWQsIFN0cmluZyBmYWN0b3J5SWQpCi0gIHsKLSAgICAvL0dldCBhbGwgdGhlIFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvcnMgdGhhdCBwb2ludCB0byB0aGlzIHJ1bnRpbWVJZAotICAgIEl0ZXJhdG9yIGl0ZXIgPSByZWdpc3RyeS5zZXJ2aWNlUnVudGltZXNfLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSAgIAotICAgIHsKLSAgICAgIFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gKFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvcilpdGVyLm5leHQoKTsKLSAgICAgIC8vY2hlY2sgaWYgdGhpcyBzZXJ2aWNlUnVudGltZSBwb2ludHMgdG8gcnVudGltZUlkCi0gICAgICBTdHJpbmcgdGhpc1J1bnRpbWVJZCA9IGRlc2MuZ2V0UnVudGltZSgpLmdldElkKCk7Ci0gICAgICBpZiAodGhpc1J1bnRpbWVJZC5lcXVhbHMocnVudGltZUlkKSkKLSAgICAgIHsKLSAgICAgICAgU2V0IGZhY2V0UnVudGltZXMgPSBnZXRSdW50aW1lcyhkZXNjLmdldFJlcXVpcmVkRmFjZXRWZXJzaW9ucygpKTsKLSAgICAgICAgU3RyaW5nW10gZklkcyA9IGdldFNlcnZlckZhY3RvcnlJZHNCeUZhY2V0UnVudGltZXMoZmFjZXRSdW50aW1lcyk7Ci0gICAgICAgIGZvciAoaW50IGo9MDsgajxmSWRzLmxlbmd0aDsgaisrKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKGZJZHNbal0uZXF1YWxzKGZhY3RvcnlJZCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgfQotICAgICAgICB9ICAgICAgICAgICAgICAKLSAgICAgIH0gICAgICAgICAgICAKLSAgICB9Ci0gICAgCi0gICAgLy9ObyBzZXJ2aWNlUnVudGltZSBtYXRjaGVkLiBSZXR1cm4gZmFsc2UuCi0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgaWQgb2YgYSBzZXJ2ZXIgdHlwZSB0aGF0IHN1cHBvcnRzIHRoZSBnaXZlbiBXZWIgc2VydmljZSBydW50aW1lCi0gICAqIG9uIHRoZSBzZXJ2aWNlIHNpZGUuCi0gICAqIAotICAgKiBAcGFyYW0gcnVudGltZUlkIGlkIG9mIGEgV2ViIHNlcnZpY2UgcnVudGltZQotICAgKiBAcmV0dXJuIFN0cmluZyB0aGUgaWQgb2YgYSBzZXJ2ZXIgdHlwZSB0aGF0IHN1cHBvcnRzIHRoZSBnaXZlbiBXZWIgc2VydmljZSBydW50aW1lLgotICAgKiBSZXR1cm5zIG51bGwgaWYgc3VjaCBhIHNlcnZlciB0eXBlIGNhbm5vdCBiZSBmb3VuZC4gCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRGaXJzdFN1cHBvcnRlZFNlcnZlckZvclNlcnZpY2VTaWRlKFN0cmluZyBydW50aW1lSWQpCi0gIHsKLSAgICAvL0dldCBhbGwgdGhlIFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvcnMgdGhhdCBwb2ludCB0byB0aGlzIHJ1bnRpbWVJZAotICAgIEl0ZXJhdG9yIGl0ZXIgPSByZWdpc3RyeS5zZXJ2aWNlUnVudGltZXNfLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSAgIAotICAgIHsKLSAgICAgIFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gKFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvcilpdGVyLm5leHQoKTsKLSAgICAgIC8vY2hlY2sgaWYgdGhpcyBzZXJ2aWNlUnVudGltZSBwb2ludHMgdG8gcnVudGltZUlkCi0gICAgICBTdHJpbmcgdGhpc1J1bnRpbWVJZCA9IGRlc2MuZ2V0UnVudGltZSgpLmdldElkKCk7Ci0gICAgICBpZiAodGhpc1J1bnRpbWVJZC5lcXVhbHMocnVudGltZUlkKSkKLSAgICAgIHsKLSAgICAgICAgU2V0IGZhY2V0UnVudGltZXMgPSBnZXRSdW50aW1lcyhkZXNjLmdldFJlcXVpcmVkRmFjZXRWZXJzaW9ucygpKTsKLSAgICAgICAgU3RyaW5nW10gZmFjdG9yeUlkcyA9IGdldFNlcnZlckZhY3RvcnlJZHNCeUZhY2V0UnVudGltZXMoZmFjZXRSdW50aW1lcyk7Ci0gICAgICAgIGlmIChmYWN0b3J5SWRzIT1udWxsICYmIGZhY3RvcnlJZHMubGVuZ3RoID4wKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIGZhY3RvcnlJZHNbMF07Ci0gICAgICAgIH0KLSAgICAgIH0gICAgICAgICAgICAKLSAgICB9Ci0gICAgCi0gICAgLy9kaWRuJ3QgZ2V0IGEgc2luZ2xlIHN1aXRhYmxlIHNlcnZlciB0eXBlIGlkLCByZXR1cm4gbnVsbC4KLSAgICByZXR1cm4gbnVsbDsKLSAgfSAgCi0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgbmFtZXMgb2YgYWxsIHByb2plY3RzIGluIHRoZSB3b3Jrc3BhY2Ugd2hpY2ggc3VwcG9ydCB0aGUgZ2l2ZW4gV2ViIHNlcnZpY2UgdHlwZQotICAgKiBhbmQgV2ViIHNlcnZpY2UgcnVudGltZS4KLSAgICogQHBhcmFtIHR5cGVJZCBtdXN0IGJlIGEgU3RyaW5nIG9mIHRoZSBmb3JtYXQgIjAvaW1wbElkIgotICAgKiB3aGVyZSB0aGUgZGlnaXQgYmVmb3JlIHRoZSAiLyIgcmVwcmVzZW50cyB0aGUgc2NlbmFyaW8KLSAgICogKGUuZy4gV2ViU2VydmljZVNjZW5hcmlvLkJPVFRPTV9VUCkgYW5kIHRoZSBpbXBsSWQgaXMgdGhlIFdlYiBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIHR5cGUgaWQuCi0gICAqIEBwYXJhbSBydW50aW1lSWQgaWQgb2YgYSBXZWIgc2VydmljZSBydW50aW1lCi0gICAqIEByZXR1cm4gU3RyaW5nW10gYXJyYXkgb2YgcHJvamVjdCBuYW1lcy4gVGhlIGFycmF5IG1heSBoYXZlIDAgZWxlbWVudHMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZ1tdIGdldFByb2plY3RzRm9yU2VydmljZVR5cGVBbmRSdW50aW1lKFN0cmluZyB0eXBlSWQsIFN0cmluZyBydW50aW1lSWQpCi0gIHsKLSAgICBJUHJvamVjdFtdIHByb2plY3RzID0gRmFjZXRVdGlscy5nZXRBbGxQcm9qZWN0cygpOwotICAgIEFycmF5TGlzdCB2YWxpZFByb2plY3RzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIAotICAgIGZvciAoaW50IGk9MDsgaTxwcm9qZWN0cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIGlmIChkb2VzU2VydmljZVR5cGVBbmRSdW50aW1lU3VwcG9ydFByb2plY3QodHlwZUlkLCBydW50aW1lSWQsIHByb2plY3RzW2ldLmdldE5hbWUoKSkpCi0gICAgICB7Ci0gICAgICAgIHZhbGlkUHJvamVjdHMuYWRkKHByb2plY3RzW2ldLmdldE5hbWUoKSk7ICAgICAgICAKLSAgICAgIH0gICAgICAKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIChTdHJpbmdbXSl2YWxpZFByb2plY3RzLnRvQXJyYXkobmV3IFN0cmluZ1swXSk7Ci0gICAgCi0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBnaXZlbiBwcm9qZWN0IHN1cHBvcnRzIHRoZSBnaXZlbiBXZWIgc2VydmljZSB0eXBlIGFuZCBXZWIgc2VydmljZSBydW50aW1lLgotICAgKiBAcGFyYW0gdHlwZUlkIG11c3QgYmUgYSBTdHJpbmcgb2YgdGhlIGZvcm1hdCAiMC9pbXBsSWQiCi0gICAqIHdoZXJlIHRoZSBkaWdpdCBiZWZvcmUgdGhlICIvIiByZXByZXNlbnRzIHRoZSBzY2VuYXJpbwotICAgKiAoZS5nLiBXZWJTZXJ2aWNlU2NlbmFyaW8uQk9UVE9NX1VQKSBhbmQgdGhlIGltcGxJZCBpcyB0aGUgV2ViIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gdHlwZSBpZC4KLSAgICogQHBhcmFtIHJ1bnRpbWVJZCBpZCBvZiBhIFdlYiBzZXJ2aWNlIHJ1bnRpbWUKLSAgICogQHBhcmFtIHByb2plY3ROYW1lIG5hbWUgb2YgYW4gSVByb2plY3QgaW4gdGhlIHdvcmtzcGFjZQotICAgKiBAcmV0dXJuIGJvb2xlYW4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIHByb2plY3Qgc3VwcG9ydHMgdGhlIGdpdmVuIFdlYiBzZXJ2aWNlIHR5cGUgYW5kIAotICAgKiBXZWIgc2VydmljZSBydW50aW1lLiBSZXR1cm5zIDxjb2RlPmZhbHNlPC9jb2RlPgotICAgKiA8dWw+IAotICAgKiA8bGk+aWYgdGhlIHByb2plY3QgZG9lcyBub3Qgc3VwcG9ydCB0aGUgZ2l2ZW4gV2ViIHNlcnZpY2UgdHlwZSBhbmQgV2ViIHNlcnZpY2UgcnVudGltZSBvcjwvbGk+Ci0gICAqIDxsaT5pZiB0aGUgcHJvamVjdCBkb2VzIG5vdCBleGlzdCBvcjwvbGk+Ci0gICAqIDxsaT5pZiBwcm9qZWN0TmFtZSBpcyBudWxsIG9yIGVtcHR5PC9saT4KLSAgICogPC91bD4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBkb2VzU2VydmljZVR5cGVBbmRSdW50aW1lU3VwcG9ydFByb2plY3QoU3RyaW5nIHR5cGVJZCwgU3RyaW5nIHJ1bnRpbWVJZCwgU3RyaW5nIHByb2plY3ROYW1lKQotICB7Ci0gICAgU3RyaW5nW10gZGVzY3MgPSBnZXRTZXJ2aWNlUnVudGltZXNCeVNlcnZpY2VUeXBlKHR5cGVJZCk7Ci0gICAgZm9yIChpbnQgaiA9IDA7IGogPCBkZXNjcy5sZW5ndGg7IGorKykKLSAgICB7Ci0gICAgICBTZXJ2aWNlUnVudGltZURlc2NyaXB0b3IgZGVzYyA9IGdldFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvckJ5SWQoZGVzY3Nbal0pOwotICAgICAgaWYgKGRlc2MuZ2V0UnVudGltZSgpLmdldElkKCkuZXF1YWxzKHJ1bnRpbWVJZCkpCi0gICAgICB7Ci0gICAgICAgIGlmIChkb2VzU2VydmljZVJ1bnRpbWVTdXBwb3J0UHJvamVjdChkZXNjc1tqXSwgcHJvamVjdE5hbWUpKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOyAgICAKLSAgICAKLSAgfSAgCi0gIAotICAvKioKLSAgICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgZ2l2ZW4gcHJvamVjdCBzdXBwb3J0cyB0aGUgZ2l2ZW4gc2VydmljZVJ1bnRpbWUuCi0gICAqIEBwYXJhbSBzZXJ2aWNlUnVudGltZUlkIGlkIG9mIGEgc2VydmljZVJ1bnRpbWUKLSAgICogQHBhcmFtIHByb2plY3ROYW1lIG5hbWUgb2YgYW4gSVByb2plY3QgaW4gdGhlIHdvcmtzcGFjZQotICAgKiBAcmV0dXJuIGJvb2xlYW4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIHByb2plY3Qgc3VwcG9ydHMgdGhlIGdpdmVuCi0gICAqIHNlcnZpY2VSdW50aW1lLiBSZXR1cm5zIDxjb2RlPmZhbHNlPC9jb2RlPgotICAgKiA8dWw+IAotICAgKiA8bGk+aWYgdGhlIHByb2plY3QgZG9lcyBub3Qgc3VwcG9ydCB0aGUgZ2l2ZW4gc2VydmljZVJ1bnRpbWUgb3I8L2xpPgotICAgKiA8bGk+aWYgdGhlIHByb2plY3QgZG9lcyBub3QgZXhpc3Qgb3I8L2xpPgotICAgKiA8bGk+aWYgcHJvamVjdE5hbWUgaXMgbnVsbCBvciBlbXB0eTwvbGk+Ci0gICAqIDwvdWw+Ci0gICAqLyAgCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBkb2VzU2VydmljZVJ1bnRpbWVTdXBwb3J0UHJvamVjdChTdHJpbmcgc2VydmljZVJ1bnRpbWVJZCwgU3RyaW5nIHByb2plY3ROYW1lKQotICB7Ci0gICAgRmFjZXRNYXRjaGVyIGZtID0gRmFjZXRNYXRjaENhY2hlLmdldEluc3RhbmNlKCkuZ2V0TWF0Y2hGb3JQcm9qZWN0KGZhbHNlLCBzZXJ2aWNlUnVudGltZUlkLCBwcm9qZWN0TmFtZSk7Ci0gICAgaWYgKGZtICE9IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIGZtLmlzTWF0Y2goKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9ICAgIAotICB9ICAKLSAgCi0KLSAgLyoqCi0gICAqIFJldHVybnMgYW4gYXJyYXkgb2Yge0BsaW5rIElGYWNldGVkUHJvamVjdFRlbXBsYXRlfSBpZHMgdGhhdCBzdXBwb3J0IHRoZSBnaXZlbiBXZWIgc2VydmljZSB0eXBlCi0gICAqIGFuZCBXZWIgc2VydmljZSBydW50aW1lLgotICAgKiBAcGFyYW0gdHlwZUlkIG11c3QgYmUgYSBTdHJpbmcgb2YgdGhlIGZvcm1hdCAiMC9pbXBsSWQiCi0gICAqIHdoZXJlIHRoZSBkaWdpdCBiZWZvcmUgdGhlICIvIiByZXByZXNlbnRzIHRoZSBzY2VuYXJpbwotICAgKiAoZS5nLiBXZWJTZXJ2aWNlU2NlbmFyaW8uQk9UVE9NX1VQKSBhbmQgdGhlIGltcGxJZCBpcyB0aGUgV2ViIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gdHlwZSBpZC4KLSAgICogQHBhcmFtIHJ1bnRpbWVJZCBpZCBvZiBhIFdlYiBzZXJ2aWNlIHJ1bnRpbWUKLSAgICogQHJldHVybiBTdHJpbmdbXSBhcnJheSBvZiB7QGxpbmsgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGV9IGlkcyB0aGF0IHN1cHBvcnQgdGhlIGdpdmVuIFdlYiBzZXJ2aWNlIHR5cGUKLSAgICogYW5kIFdlYiBzZXJ2aWNlIHJ1bnRpbWUuIFRoZSBhcnJheSBtYXkgaGF2ZSAwIGVsZW1lbnRzLiBSZXR1cm5zIG51bGwgaWYgbm8gc2VydmljZVJ1bnRpbWVzIHN1cHBvcnRpbmcKLSAgICogdGhlIGdpdmVuIFdlYiBzZXJ2aWNlIHR5cGUgY291bGQgYmUgZm91bmQuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZ1tdIGdldFNlcnZpY2VQcm9qZWN0VGVtcGxhdGVzKFN0cmluZyB0eXBlSWQsIFN0cmluZyBydW50aW1lSWQpCi0gIHsKLSAgICBTdHJpbmdbXSBzcklkcyA9IGdldFNlcnZpY2VSdW50aW1lc0J5U2VydmljZVR5cGUodHlwZUlkKTsKLSAgICBpZiAoc3JJZHMgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBBcnJheUxpc3QgdGVtcGxhdGVJZExpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzcklkcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBTZXJ2aWNlUnVudGltZURlc2NyaXB0b3IgZGVzYyA9IGdldFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvckJ5SWQoc3JJZHNbaV0pOwotICAgICAgU3RyaW5nIHRoaXNSdW50aW1lSWQgPSBkZXNjLmdldFJ1bnRpbWUoKS5nZXRJZCgpOwotICAgICAgaWYgKHRoaXNSdW50aW1lSWQuZXF1YWxzKHJ1bnRpbWVJZCkpCi0gICAgICB7Ci0gICAgICAgIC8vR2V0IHRoZSB0ZW1wbGF0ZXMgZm9yIHRoaXMgc2VydmljZVJ1bnRpbWUKLSAgICAgICAgU2V0IHRlbXBsYXRlcyA9IEZhY2V0TWF0Y2hDYWNoZS5nZXRJbnN0YW5jZSgpLmdldFRlbXBsYXRlc0ZvclNlcnZpY2VSdW50aW1lKGRlc2MuZ2V0SWQoKSk7Ci0gICAgICAgIAotICAgICAgICAvL0FkZCB0aGUgdGVtcGxhdGUgaWRzIHRvIHRoZSBsaXN0IGlmIHRoZXkgaGF2ZSBub3QgYWxyZWFkeSBiZWVuIGFkZGVkCi0gICAgICAgIEl0ZXJhdG9yIGl0ciA9IHRlbXBsYXRlcy5pdGVyYXRvcigpOwotICAgICAgICB3aGlsZSAoaXRyLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIElGYWNldGVkUHJvamVjdFRlbXBsYXRlIHRlbXBsYXRlID0gKElGYWNldGVkUHJvamVjdFRlbXBsYXRlKWl0ci5uZXh0KCk7Ci0gICAgICAgICAgaWYgKCF0ZW1wbGF0ZUlkTGlzdC5jb250YWlucyh0ZW1wbGF0ZS5nZXRJZCgpKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0ZW1wbGF0ZUlkTGlzdC5hZGQodGVtcGxhdGUuZ2V0SWQoKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICB9ICAKLSAgICAKLSAgICByZXR1cm4gKFN0cmluZ1tdKXRlbXBsYXRlSWRMaXN0LnRvQXJyYXkobmV3IFN0cmluZ1tde30pOyAgICAKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBnaXZlbiB7QGxpbmsgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGV9IHN1cHBvcnRzIHRoZSBnaXZlbiBXZWIgc2VydmljZSB0eXBlCi0gICAqIGFuZCBXZWIgc2VydmljZSBydW50aW1lLgotICAgKiBAcGFyYW0gdHlwZUlkIG11c3QgYmUgYSBTdHJpbmcgb2YgdGhlIGZvcm1hdCAiMC9pbXBsSWQiCi0gICAqIHdoZXJlIHRoZSBkaWdpdCBiZWZvcmUgdGhlICIvIiByZXByZXNlbnRzIHRoZSBzY2VuYXJpbwotICAgKiAoZS5nLiBXZWJTZXJ2aWNlU2NlbmFyaW8uQk9UVE9NX1VQKSBhbmQgdGhlIGltcGxJZCBpcyB0aGUgV2ViIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gdHlwZSBpZC4KLSAgICogQHBhcmFtIHJ1bnRpbWVJZCBpZCBvZiBhIFdlYiBzZXJ2aWNlIHJ1bnRpbWUKLSAgICogQHBhcmFtIHRlbXBsYXRlSWQgaWQgb2YgYSB7QGxpbmsgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGV9Ci0gICAqIEByZXR1cm4gYm9vbGVhbiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgZ2l2ZW4ge0BsaW5rIElGYWNldGVkUHJvamVjdFRlbXBsYXRlfSBzdXBwb3J0cyB0aGUgZ2l2ZW4gCi0gICAqIFdlYiBzZXJ2aWNlIHR5cGUgYW5kIFdlYiBzZXJ2aWNlIHJ1bnRpbWUuIFJldHVybnMgPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS4gCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZG9lc1NlcnZpY2VUeXBlQW5kUnVudGltZVN1cHBvcnRUZW1wbGF0ZShTdHJpbmcgdHlwZUlkLCBTdHJpbmcgcnVudGltZUlkLCBTdHJpbmcgdGVtcGxhdGVJZCkKLSAgewotICAgIFN0cmluZ1tdIHNySWRzID0gZ2V0U2VydmljZVJ1bnRpbWVzQnlTZXJ2aWNlVHlwZSh0eXBlSWQpOwotICAgIGlmIChzcklkcyA9PSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNySWRzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gZ2V0U2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yQnlJZChzcklkc1tpXSk7Ci0gICAgICBTdHJpbmcgdGhpc1J1bnRpbWVJZCA9IGRlc2MuZ2V0UnVudGltZSgpLmdldElkKCk7Ci0gICAgICBpZiAodGhpc1J1bnRpbWVJZC5lcXVhbHMocnVudGltZUlkKSkKLSAgICAgIHsKLSAgICAgICAgLy9HZXQgdGhlIHRlbXBsYXRlcyBmb3IgdGhpcyBzZXJ2aWNlUnVudGltZQotICAgICAgICBTZXQgdGVtcGxhdGVzID0gRmFjZXRNYXRjaENhY2hlLmdldEluc3RhbmNlKCkuZ2V0VGVtcGxhdGVzRm9yU2VydmljZVJ1bnRpbWUoc3JJZHNbaV0pOwotICAgICAgICAKLSAgICAgICAgLy9DaGVjayBpZiBhbnkgb2YgdGhlIHRlbXBsYXRlIGlkcyBtYXRjaCB0aGUgZ2l2ZW4gb25lLgotICAgICAgICBJdGVyYXRvciBpdHIgPSB0ZW1wbGF0ZXMuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKGl0ci5oYXNOZXh0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZSB0ZW1wbGF0ZSA9IChJRmFjZXRlZFByb2plY3RUZW1wbGF0ZSlpdHIubmV4dCgpOwotICAgICAgICAgIGlmICh0ZW1wbGF0ZS5nZXRJZCgpLmVxdWFscyh0ZW1wbGF0ZUlkKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgCi0gICAgfSAgCi0gICAgCi0gICAgcmV0dXJuIGZhbHNlOyAgICAKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIGdpdmVuIHtAbGluayBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZX0gc3VwcG9ydHMgdGhlIGdpdmVuIHNlcnZpY2VSdW50aW1lLgotICAgKiBAcGFyYW0gc2VydmljZVJ1bnRpbWVJZCBpZCBvZiBhIHNlcnZpY2VSdW50aW1lCi0gICAqIEBwYXJhbSB0ZW1wbGF0ZUlkIGlkIG9mIGEge0BsaW5rIElGYWNldGVkUHJvamVjdFRlbXBsYXRlfQotICAgKiBAcmV0dXJuIGJvb2xlYW4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGdpdmVuIHtAbGluayBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZX0gc3VwcG9ydHMgdGhlIGdpdmVuIAotICAgKiBzZXJ2aWNlUnVudGltZS4gUmV0dXJucyA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGRvZXNTZXJ2aWNlUnVudGltZVN1cHBvcnRUZW1wbGF0ZShTdHJpbmcgc2VydmljZVJ1bnRpbWVJZCwgU3RyaW5nIHRlbXBsYXRlSWQpCi0gIHsKLSAgICAvL0dldCB0aGUgdGVtcGxhdGVzIGZvciB0aGlzIHNlcnZpY2VSdW50aW1lCi0gICAgU2V0IHRlbXBsYXRlcyA9IEZhY2V0TWF0Y2hDYWNoZS5nZXRJbnN0YW5jZSgpLmdldFRlbXBsYXRlc0ZvclNlcnZpY2VSdW50aW1lKHNlcnZpY2VSdW50aW1lSWQpOwotICAgIElGYWNldGVkUHJvamVjdFRlbXBsYXRlIGNoZWNraW5nVGVtcGxhdGUgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5nZXRUZW1wbGF0ZSh0ZW1wbGF0ZUlkKTsKLSAgICByZXR1cm4gdGVtcGxhdGVzLmNvbnRhaW5zKGNoZWNraW5nVGVtcGxhdGUpOwotICB9ICAKLSAgCi0gIC8vQ2xpZW50LXNpZGUgdXRpbGl0aWVzCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgV2ViU2VydmljZUNsaWVudEltcGwgZ2l2ZW4gdGhlIGlkIG9mIGEgV2ViIHNlcnZpY2UgY2xpZW50IGltcGxlbWVudGF0aW9uIHR5cGUuCi0gICAqIEBwYXJhbSBpZCAKLSAgICogQHJldHVybiB7QGxpbmsgV2ViU2VydmljZUNsaWVudEltcGx9IHdpdGggdGhlIGdpdmVuIGlkCi0gICAqIFJldHVybnMgbnVsbCBpZiBzdWNoIGEgV2ViU2VydmljZUNsaWVudEltcGwgY2Fubm90IGJlIGZvdW5kLgotICAgKi8gIAotICBwdWJsaWMgc3RhdGljIFdlYlNlcnZpY2VDbGllbnRJbXBsIGdldFdlYlNlcnZpY2VDbGllbnRJbXBsQnlJZChTdHJpbmcgaWQpCi0gIHsKLSAgICBPYmplY3QgcmVzdWx0ID0gcmVnaXN0cnkud2ViU2VydmljZUNsaWVudEltcGxzXy5nZXQoaWQpOwotICAgIGlmIChyZXN1bHQhPW51bGwpCi0gICAgewotICAgICAgcmV0dXJuIChXZWJTZXJ2aWNlQ2xpZW50SW1wbClyZXN1bHQ7Ci0gICAgfQotICAgIHJldHVybiBudWxsOyAgICAKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgYSB7QGxpbmsgQ2xpZW50UnVudGltZURlc2NyaXB0b3J9IGdpdmVuIHRoZSBpZCBvZiBhIGNsaWVudFJ1bnRpbWUuCi0gICAqIEBwYXJhbSBpZCBvZiBhIGNsaWVudFJ1bnRpbWUKLSAgICogQHJldHVybiBDbGllbnRSdW50aW1lRGVzY3JpcHRvciB3aXRoIHRoZSBnaXZlbiBpZAotICAgKiBSZXR1cm5zIG51bGwgaWYgc3VjaCBhIENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yIGNhbm5vdCBiZSBmb3VuZC4KLSAgICovICAKLSAgcHVibGljIHN0YXRpYyBDbGllbnRSdW50aW1lRGVzY3JpcHRvciBnZXRDbGllbnRSdW50aW1lRGVzY3JpcHRvckJ5SWQoU3RyaW5nIGlkKQotICB7Ci0gICAgT2JqZWN0IHJlc3VsdCA9IHJlZ2lzdHJ5LmNsaWVudFJ1bnRpbWVzXy5nZXQoaWQpOwotICAgIGlmIChyZXN1bHQhPW51bGwpCi0gICAgewotICAgICAgcmV0dXJuIChDbGllbnRSdW50aW1lRGVzY3JpcHRvcilyZXN1bHQ7Ci0gICAgfQotICAgIHJldHVybiBudWxsOyAgICAgICAgCi0gIH0gICAgCi0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUge0BsaW5rIElXZWJTZXJ2aWNlUnVudGltZX0gb2YgdGhlIGdpdmVuIGNsaWVudFJ1bnRpbWUuIEV4dGVuZGVycyBwcm92aWRlIHRoZSBmdWxseSAKLSAgICogcXVhbGlmaWVkIG5hbWUgb2YgYSBjb25jcmV0ZSBJV2ViU2VydmljZVJ1bnRpbWUgaW4gdGhlIGNsYXNzIGF0dHJpYnV0ZSBvZiBhIGNsaWVudFJ1bnRpbWVzIGV4dGVuc2lvbi4KLSAgICogQHBhcmFtIGNsaWVudFJ1bnRpbWVJZCBpZCBvZiBhIGNsaWVudFJ1bnRpbWUKLSAgICogQHJldHVybiBJV2ViU2VydmljZVJ1bnRpbWUKLSAgICovICAKLSAgcHVibGljIHN0YXRpYyBJV2ViU2VydmljZVJ1bnRpbWUgZ2V0Q2xpZW50UnVudGltZSggU3RyaW5nIGNsaWVudFJ1bnRpbWVJZCApCi0gIHsKLSAgICBDbGllbnRSdW50aW1lRGVzY3JpcHRvciBkZXNjcmlwdG9yID0gZ2V0Q2xpZW50UnVudGltZURlc2NyaXB0b3JCeUlkKGNsaWVudFJ1bnRpbWVJZCk7Ci0gICAgSVdlYlNlcnZpY2VSdW50aW1lICAgIHdlYnNlcnZpY2VSdW50aW1lICAgICA9IG51bGw7Ci0gICAgaWYgKGRlc2NyaXB0b3IgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAgIHdlYnNlcnZpY2VSdW50aW1lID0gZGVzY3JpcHRvci5nZXRXZWJTZXJ2aWNlUnVudGltZSgpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gd2Vic2VydmljZVJ1bnRpbWU7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBpZCBvZiBhIGNsaWVudFJ1bnRpbWUgdGhhdCBzdXBwb3J0cyB0aGUgcHJvdmlkZWQgV2ViIHNlcnZpY2UgY2xpZW50IGltcGxlbWVudGF0aW9uIHR5cGUsIFdlYiBzZXJ2aWNlIHJ1bnRpbWUsCi0gICAqIHNlcnZlciB0eXBlL3NlcnZlciBpbnN0YW5jZSAoaWYgcHJlc2VudCksIHByb2plY3Qgb3IgcHJvamVjdCB0eXBlLgotICAgKiBAcGFyYW0gdHJzIGFuIGluc3RhbmNlIG9mIHtAbGluayBUeXBlUnVudGltZVNlcnZlcn0gY29udGFpbmluZyBhIFdlYiBzZXJ2aWNlIGNsaWVudCBpbXBsZW1lbnRhdGlvbiB0eXBlIGlkLCBXZWIgc2VydmljZSBydW50aW1lIGlkLAotICAgKiBzZXJ2ZXIgdHlwZSBpZCBhbmQgc2VydmVyIGluc3RhbmNlIGlkLiBUaGUgV2ViIHNlcnZpY2UgY2xpZW50IGltcGxlbWVudGF0aW9uIHR5cGUgaWQgYW5kIFdlYiBzZXJ2aWNlIHJ1bnRpbWUgaWQgbXVzdCBiZSBub24tbnVsbCAKLSAgICogYW5kIG5vbi1lbXB0eS4gVGhlIHNlcnZlciB0eXBlIGlkIGFuZCBzZXJ2ZXIgaW5zdGFuY2UgaWQgbWF5IGJlIG51bGwgb3IgZW1wdHkuCi0gICAqIEBwYXJhbSBwcm9qZWN0TmFtZSB0aGUgbmFtZSBvZiBhbiBJUHJvamVjdCB0aGF5IG1heSBvciBtYXQgbm90IGV4aXN0IGluIHRoZSB3b3Jrc3BhY2UuIE11c3QgYmUgbm9uLW51bGwgYW5kIAotICAgKiBub24tZW1wdHkuCi0gICAqIEBwYXJhbSB0ZW1wbGF0ZUlkIHRoZSBpZCBvZiBhbiB7QGxpbmsgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGV9LiBNdXN0IGJlIG5vbi1udWxsIGFuZCBub24tZW1wdHkgaWYKLSAgICogYW4gSVByb2plY3Qgd2l0aCB0aGUgbmFtZSBwcm9qZWN0TmFtZSBkb2VzIG5vdCBleGlzdCBpbiB0aGUgd29ya3NwYWNlLiAKLSAgICogQHJldHVybiBTdHJpbmcgaWQgb2YgYSBjbGllbnRSdW50aW1lIHRoYXQgc3VwcG9ydHMgdGhlIHByb3ZpZGVkIFdlYiBzZXJ2aWNlIGNsaWVudCBpbXBsZW1lbnRhdGlvbiB0eXBlLCBXZWIgc2VydmljZSBydW50aW1lLAotICAgKiBzZXJ2ZXIgdHlwZS9zZXJ2ZXIgaW5zdGFuY2UgKGlmIHByZXNlbnQpLCBwcm9qZWN0IG9yIHByb2plY3QgdHlwZS4gUmV0dXJucyBhbiBlbXB0eSBTdHJpbmcgaWYgbm8gCi0gICAqIHN1Y2ggY2xpZW50UnVudGltZSBjb3VsZCBiZSBmb3VuZC4KLSAgICovICAKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0Q2xpZW50UnVudGltZUlkKFR5cGVSdW50aW1lU2VydmVyIHRycywgU3RyaW5nIHByb2plY3ROYW1lLCBTdHJpbmcgdGVtcGxhdGVJZCkKLSAgewotICAgIGJvb2xlYW4gc2VydmVyU2VsZWN0ZWQgPSAodHJzLmdldFNlcnZlcklkKCkhPW51bGwpICYmICh0cnMuZ2V0U2VydmVySWQoKS5sZW5ndGgoKT4wKTsKLSAgICAvL0ZpbmQgdGhlIGZpcnN0IGNsaWVudFJ1bnRpbWUgdGhhdCBzdXBwb3J0cyB0aGUgaW1wbGVtZW50YXRpb24gdHlwZSwgcnVudGltZSwgc2VydmVyLCBhbmQgcHJvamVjdAotICAgIFN0cmluZ1tdIGRlc2NzID0gZ2V0Q2xpZW50UnVudGltZXNCeVR5cGUodHJzLmdldFR5cGVJZCgpKTsKLSAgICBmb3IgKGludCBpPTA7IGk8ZGVzY3MubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgQ2xpZW50UnVudGltZURlc2NyaXB0b3IgZGVzYyA9IGdldENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yQnlJZChkZXNjc1tpXSk7ICAgICAgCi0gICAgICBpZiAoZGVzYy5nZXRSdW50aW1lKCkuZ2V0SWQoKS5lcXVhbHModHJzLmdldFJ1bnRpbWVJZCgpKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKHNlcnZlclNlbGVjdGVkKQotICAgICAgICB7Ci0gICAgICAgICAgYm9vbGVhbiBzdXBwb3J0c1NlcnZlciA9IGRvZXNDbGllbnRSdW50aW1lU3VwcG9ydFNlcnZlcihkZXNjLmdldElkKCksIHRycy5nZXRTZXJ2ZXJJZCgpKTsKLSAgICAgICAgICBpZiAoIXN1cHBvcnRzU2VydmVyKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgSVByb2plY3QgcHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSk7Ci0gICAgICAgIGlmIChwcm9qZWN0LmV4aXN0cygpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKGRvZXNDbGllbnRSdW50aW1lU3VwcG9ydFByb2plY3QoZGVzYy5nZXRJZCgpLCBwcm9qZWN0TmFtZSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGRlc2MuZ2V0SWQoKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgLy9DaGVjayBpZiB0ZW1wbGF0ZSBpcyBzdXBwb3J0ZWQKLSAgICAgICAgICBpZiAoZG9lc0NsaWVudFJ1bnRpbWVTdXBwb3J0VGVtcGxhdGUoZGVzYy5nZXRJZCgpLCB0ZW1wbGF0ZUlkKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZGVzYy5nZXRJZCgpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gIiI7Ci0gICAgCi0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIGFsbCBXZWIgc2VydmljZSBydW50aW1lIGlkcyBmb3IgdGhlIGNsaWVudCBzaWRlLgotICAgKiBAcmV0dXJuIFN0cmluZ1tdIGFycmF5IG9mIFdlYiBzZXJ2aWNlIHJ1bnRpbWUgaWRzIGZvciB0aGUgY2xpZW50IHNpZGUuCi0gICAqIFRoZSBhcnJheSBtYXkgaGF2ZSAwIGVsZW1lbnRzLiAKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nW10gZ2V0QWxsUnVudGltZXNGb3JDbGllbnRTaWRlKCkgCi0gIHsKLSAgICBBcnJheUxpc3QgcnVudGltZUlkcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBJdGVyYXRvciBpdGVyID0gcmVnaXN0cnkuY2xpZW50UnVudGltZXNfLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSAgIAotICAgIHsKLSAgICAgIENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yIGRlc2MgPSAoQ2xpZW50UnVudGltZURlc2NyaXB0b3IpaXRlci5uZXh0KCk7Ci0gICAgICBTdHJpbmcgdGhpc1J1bnRpbWVJZCA9IGRlc2MuZ2V0UnVudGltZSgpLmdldElkKCk7IAotICAgICAgaWYgKCFydW50aW1lSWRzLmNvbnRhaW5zKHRoaXNSdW50aW1lSWQpKQotICAgICAgcnVudGltZUlkcy5hZGQodGhpc1J1bnRpbWVJZCk7Ci0gICAgfSAgICAgIAotICAgIHJldHVybiAoU3RyaW5nW10pcnVudGltZUlkcy50b0FycmF5KG5ldyBTdHJpbmdbXXt9KTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGlkcyBvZiBhbGwgY2xpZW50UnVudGltZXMgdGhhdCBzdXBwb3J0IHRoZSBnaXZlbgotICAgKiBXZWIgc2VydmljZSBjbGllbnQgaW1wbGVtZW50YXRpb24gdHlwZS4KLSAgICogQHBhcmFtIGNsaWVudEltcGxJZCBpZCBvZiBhIFdlYiBzZXJ2aWNlIGNsaWVudCBpbXBsZW1lbnRhdGlvbiB0eXBlCi0gICAqIEByZXR1cm5zIFN0cmluZ1tdIGFycmF5IGNvbnRhaW5pbmcgdGhlIGlkcyBvZiBhbGwgY2xpZW50UnVudGltZXMgdGhhdAotICAgKiBzdXBwb3J0IHRoZSBnaXZlbiBXZWIgc2VydmljZSBjbGllbnQgaW1wbGVtZW50YXRpb24gdHlwZS4gVGhlIGFycmF5IG1heSBoYXZlIDAgZWxlbWVudHMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZ1tdIGdldENsaWVudFJ1bnRpbWVzQnlUeXBlKFN0cmluZyBjbGllbnRJbXBsSWQpIAotICB7Ci0gICAgQXJyYXlMaXN0IGlkcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBJdGVyYXRvciBpdGVyID0gcmVnaXN0cnkuY2xpZW50UnVudGltZXNfLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSAgIAotICAgIHsKLSAgICAgIENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yIGRlc2MgPSAoQ2xpZW50UnVudGltZURlc2NyaXB0b3IpaXRlci5uZXh0KCk7Ci0gICAgICAvL0NoZWNrIGlmIHRoaXMgc2VydmljZVJ1bnRpbWUgc3VwcG9ydHMgdGhlIGltcGxlbWVudGF0aW9uIHR5cGUKLSAgICAgIGlmIChkZXNjLmdldENsaWVudEltcGxlbWVudGF0aW9uVHlwZSgpLmdldElkKCkuZXF1YWxzKGNsaWVudEltcGxJZCkpCi0gICAgICB7Ci0gICAgICAgIGlkcy5hZGQoZGVzYy5nZXRJZCgpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIChTdHJpbmdbXSlpZHMudG9BcnJheShuZXcgU3RyaW5nW117fSk7Ci0gIH0gIAotICAKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGlkcyBvZiBhbGwgV2ViIHNlcnZpY2UgcnVudGltZXMgdGhhdCBzdXBwb3J0IHRoZSBnaXZlbgotICAgKiBXZWIgc2VydmljZSBjbGllbnQgaW1wbGVtZW50YXRpb24gdHlwZS4KLSAgICogQHBhcmFtIGNsaWVudEltcGxJZCBpZCBvZiBhIFdlYiBzZXJ2aWNlIGNsaWVudCBpbXBsZW1lbnRhdGlvbiB0eXBlCi0gICAqIEByZXR1cm4gU3RyaW5nW10gYXJyYXkgY29udGFpbmluZyB0aGUgaWRzIG9mIGFsbCBXZWIgc2VydmljZSBydW50aW1lcyB0aGF0Ci0gICAqIHN1cHBvcnQgdGhlIGdpdmVuIFdlYiBzZXJ2aWNlIGNsaWVudCBpbXBsZW1lbnRhdGlvbiB0eXBlLiBUaGUgYXJyYXkgbWF5IGhhdmUgMCBlbGVtZW50cy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nW10gZ2V0UnVudGltZXNCeUNsaWVudFR5cGUoU3RyaW5nIGNsaWVudEltcGxJZCkgCi0gIHsKLSAgICBBcnJheUxpc3QgcnVudGltZUlkcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBJdGVyYXRvciBpdGVyID0gcmVnaXN0cnkuY2xpZW50UnVudGltZXNfLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSAgIAotICAgIHsKLSAgICAgIENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yIGRlc2MgPSAoQ2xpZW50UnVudGltZURlc2NyaXB0b3IpaXRlci5uZXh0KCk7Ci0gICAgICAvL0NoZWNrIGlmIHRoaXMgc2VydmljZVJ1bnRpbWUgc3VwcG9ydHMgdGhlIGltcGxlbWVudGF0aW9uIHR5cGUKLSAgICAgIGlmIChkZXNjLmdldENsaWVudEltcGxlbWVudGF0aW9uVHlwZSgpLmdldElkKCkuZXF1YWxzKGNsaWVudEltcGxJZCkpCi0gICAgICB7Ci0gICAgICAgIGlmICghcnVudGltZUlkcy5jb250YWlucyhkZXNjLmdldFJ1bnRpbWUoKS5nZXRJZCgpKSkKLSAgICAgICAgewotICAgICAgICAgIHJ1bnRpbWVJZHMuYWRkKGRlc2MuZ2V0UnVudGltZSgpLmdldElkKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiAoU3RyaW5nW10pcnVudGltZUlkcy50b0FycmF5KG5ldyBTdHJpbmdbXXt9KTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIGdpdmVuIFdlYiBzZXJ2aWNlIHJ1bnRpbWUgc3VwcG9ydHMgdGhlIGdpdmVuIAotICAgKiBXZWIgc2VydmljZSBjbGllbnQgaW1wbGVtZW50YXRpb24gdHlwZS4KLSAgICogQHBhcmFtIGNsaWVudEltcGxJZCBpZCBvZiBhIFdlYiBzZXJ2aWNlIGNsaWVudCBpbXBsZW1lbnRhdGlvbiB0eXBlCi0gICAqIEBwYXJhbSBydW50aW1lSWQgaWQgb2YgYSBXZWIgc2VydmljZSBydW50aW1lCi0gICAqIEByZXR1cm4gYm9vbGVhbiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgZ2l2ZW4gV2ViIHNlcnZpY2UgcnVudGltZSBzdXBwb3J0cyB0aGUgZ2l2ZW4gCi0gICAqIFdlYiBzZXJ2aWNlIGNsaWVudCBpbXBsZW1lbnRhdGlvbiB0eXBlLiA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzUnVudGltZVN1cHBvcnRlZEZvckNsaWVudFR5cGUoU3RyaW5nIGNsaWVudEltcGxJZCwgU3RyaW5nIHJ1bnRpbWVJZCkKLSAgewotICAgIFN0cmluZ1tdIGNsaWVudFJ1bnRpbWVJZHMgPSBnZXRDbGllbnRSdW50aW1lc0J5VHlwZShjbGllbnRJbXBsSWQpOwotICAgIGlmIChjbGllbnRSdW50aW1lSWRzIT1udWxsKQotICAgIHsKLSAgICAgIGZvciAoaW50IGk9MDsgaSA8IGNsaWVudFJ1bnRpbWVJZHMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yIGRlc2MgPSBnZXRDbGllbnRSdW50aW1lRGVzY3JpcHRvckJ5SWQoY2xpZW50UnVudGltZUlkc1tpXSk7Ci0gICAgICAgIGlmIChkZXNjLmdldFJ1bnRpbWUoKS5nZXRJZCgpLmVxdWFscyhydW50aW1lSWQpKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyBhbGwgc2VydmVyIHR5cGUgaWRzIHdpdGggY29uZmlndXJlZCBzZXJ2ZXIgcnVudGltZXMuCi0gICAqIEByZXR1cm4gU3RyaW5nW10gYXJyYXkgb2Ygc2VydmVyIHR5cGUgaWRzLiBUaGUgYXJyYXkgbWF5IGhhdmUgMCBlbGVtZW50cy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nW10gZ2V0QWxsQ2xpZW50U2VydmVyRmFjdG9yeUlkcygpIAotICB7ICAgIAotICAgIC8vSXRlcmF0b3IgaXRlciA9IHJlZ2lzdHJ5LmNsaWVudFJ1bnRpbWVzXy52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgIC8vd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSAgIAotICAgIC8vewotICAgICAgLy9UT0RPIGl0ZXJhdGUgb3ZlciBhbGwgdGhlIHNlcnZlciB0eXBlcyBhbmQgc2VlIGlmIHRoZWlyIHJ1bnRpbWUgdHlwZXMgaGF2ZSBhbgotICAgICAgLy9pZCB0aGF0IG1hdGNoZXMgdGhlIHJ1bnRpbWUgdHlwZSBvZiBhbnkgb2YgdGhlIHJ1bnRpbWVzLiAgICAgICAgICAgIAotICAgICAgLy8gQ2xpZW50UnVudGltZURlc2NyaXB0b3IgZGVzYyA9IChDbGllbnRSdW50aW1lRGVzY3JpcHRvcilpdGVyLm5leHQoKTsKLSAgICAgIC8vIFNldCBydW50aW1lcyA9IGdldFJ1bnRpbWVzKGRlc2MuZ2V0UmVxdWlyZWRGYWNldFZlcnNpb25zKCkpOwotICAgICAgLy8gSVNlcnZlclR5cGVbXSBhbGxTZXJ2ZXJUeXBlcyA9IFNlcnZlckNvcmUuZ2V0U2VydmVyVHlwZXMoKTsKLSAgICAvL30KLSAgICAvL3JldHVybiAoU3RyaW5nW10pc2VydmVyRmFjdG9yeUlkcy50b0FycmF5KG5ldyBTdHJpbmdbXXt9KTsKLSAgICAvL1RlbXBvcmFyaWx5IHJldHVybiBhbGwgc2VydmVyIHR5cGVzCi0gICAgcmV0dXJuIGdldEFsbFNlcnZlckZhY3RvcnlJZHNXaXRoUnVudGltZXMoKTsgICAgCi0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBpZHMgb2YgYWxsIHNlcnZlciB0eXBlcyB0aGF0IHN1cHBvcnQgdGhlIGdpdmVuCi0gICAqIFdlYiBzZXJ2aWNlIGNsaWVudCBpbXBsZW1lbnRhdGlvbiB0eXBlLgotICAgKiAgCi0gICAqIEBwYXJhbSBjbGllbnRJbXBsSWQgaWQgb2YgYSBXZWIgc2VydmljZSBjbGllbnQgaW1wbGVtZW50YXRpb24gdHlwZQotICAgKiBAcmV0dXJuIFN0cmluZ1tdIGFycmF5IGNvbnRhaW5pbmcgdGhlIGlkcyBvZiBhbGwgc2VydmVyIHR5cGVzIHRoYXQKLSAgICogc3VwcG9ydCB0aGUgZ2l2ZW4gV2ViIHNlcnZpY2UgY2xpZW50IGltcGxlbWVudGF0aW9uIHR5cGUuIFRoZSBhcnJheSBtYXkgaGF2ZSAwIGVsZW1lbnRzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmdbXSBnZXRTZXJ2ZXJGYWN0b3J5SWRzQnlDbGllbnRUeXBlKFN0cmluZyBjbGllbnRJbXBsSWQpCi0gIHsKLSAgICBBcnJheUxpc3Qgc2VydmVyRmFjdG9yeUlkcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBTdHJpbmdbXSBjcnRzID0gZ2V0Q2xpZW50UnVudGltZXNCeVR5cGUoY2xpZW50SW1wbElkKTsKLSAgICBpZiAoY3J0cyAhPSBudWxsKQotICAgIHsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY3J0cy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgLy9HZXQgdGhlIHJ1bnRpbWVzIHRoYXQgd29yayBmb3IgdGhlIGZhY2V0cyByZXF1aXJlZCBmb3IgdGhpcyBzZXJ2aWNlUnVudGltZSAgICAgICAgCi0gICAgICAgIFN0cmluZ1tdIGZJZHMgPSBnZXRTZXJ2ZXJGYWN0b3J5SWRzQnlDbGllbnRSdW50aW1lKGNydHNbaV0pOwotICAgICAgICBmb3IgKGludCBqPTA7IGo8Zklkcy5sZW5ndGg7IGorKykKLSAgICAgICAgewotICAgICAgICAgIGlmICghc2VydmVyRmFjdG9yeUlkcy5jb250YWlucyhmSWRzW2pdKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBzZXJ2ZXJGYWN0b3J5SWRzLmFkZChmSWRzW2pdKTsgICAgICAgICAgICAKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0gICAgICAgIAotICAgIH0KLSAgICAKLSAgICByZXR1cm4gKFN0cmluZ1tdKXNlcnZlckZhY3RvcnlJZHMudG9BcnJheShuZXcgU3RyaW5nW117fSk7Ci0gIH0gIAotICAKLSAgLyoqCi0gICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIGdpdmVuIHNlcnZlciB0eXBlIHN1cHBvcnRzIHRoZSBnaXZlbiAKLSAgICogV2ViIHNlcnZpY2UgY2xpZW50IGltcGxlbWVudGF0aW9uIHR5cGUuCi0gICAqIEBwYXJhbSBjbGllbnRJbXBsSWQgaWQgb2YgYSBXZWIgc2VydmljZSBjbGllbnQgaW1wbGVtZW50YXRpb24gdHlwZQotICAgKiBAcGFyYW0gc2VydmVyRmFjdG9yeUlkIGlkIG9mIGEgc2VydmVyIHR5cGUKLSAgICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgZ2l2ZW4gc2VydmVyIHR5cGUgc3VwcG9ydHMgdGhlIGdpdmVuIAotICAgKiBXZWIgc2VydmljZSBjbGllbnQgaW1wbGVtZW50YXRpb24gdHlwZS4gPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1NlcnZlclN1cHBvcnRlZEZvckNob3NlbkNsaWVudFR5cGUoU3RyaW5nIGNsaWVudEltcGxJZCwgU3RyaW5nIHNlcnZlckZhY3RvcnlJZCkKLSAgewotICAgIFN0cmluZ1tdIGZJZHMgPSBnZXRTZXJ2ZXJGYWN0b3J5SWRzQnlDbGllbnRUeXBlKGNsaWVudEltcGxJZCk7Ci0gICAgaWYgKGZJZHMgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaT0wO2k8Zklkcy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIGlmIChzZXJ2ZXJGYWN0b3J5SWQuZXF1YWxzKGZJZHNbaV0pKQotICAgICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0gICAgICAKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotICB9ICAKLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBpZHMgb2YgYWxsIHNlcnZlciB0eXBlcyB0aGF0IHN1cHBvcnQgdGhlIGdpdmVuCi0gICAqIGNsaWVudFJ1bnRpbWUuCi0gICAqIAotICAgKiBAcGFyYW0gY2xpZW50UnVudGltZUlkIGlkIG9mIGEgY2xpZW50UnVudGltZQotICAgKiBAcmV0dXJuIFN0cmluZ1tdIGFycmF5IGNvbnRhaW5pbmcgdGhlIGlkcyBvZiBhbGwgc2VydmVyIHR5cGVzIHRoYXQKLSAgICogc3VwcG9ydCB0aGUgZ2l2ZW4gY2xpZW50UnVudGltZS4gVGhlIGFycmF5IG1heSBoYXZlIDAgZWxlbWVudHMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZ1tdIGdldFNlcnZlckZhY3RvcnlJZHNCeUNsaWVudFJ1bnRpbWUoU3RyaW5nIGNsaWVudFJ1bnRpbWVJZCkKLSAgeyAgICAgICAKLSAgICBDbGllbnRSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gZ2V0Q2xpZW50UnVudGltZURlc2NyaXB0b3JCeUlkKGNsaWVudFJ1bnRpbWVJZCk7Ci0gICAgU2V0IGZhY2V0UnVudGltZXMgPSBnZXRSdW50aW1lcyhkZXNjLmdldFJlcXVpcmVkRmFjZXRWZXJzaW9ucygpKTsKLQotICAgIFN0cmluZ1tdIGZJZHMgPSBnZXRTZXJ2ZXJGYWN0b3J5SWRzQnlGYWNldFJ1bnRpbWVzKGZhY2V0UnVudGltZXMpOwotICAgIHJldHVybiBmSWRzOyAgICAKLSAgfSAgICAKLQotICAvKioKLSAgICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgZ2l2ZW4gc2VydmVyIHR5cGUgc3VwcG9ydHMgdGhlIGdpdmVuIAotICAgKiBjbGllbnRSdW50aW1lLgotICAgKiAKLSAgICogQHBhcmFtIGNsaWVudFJ1bnRpbWVJZCBpZCBvZiBhIGNsaWVudFJ1bnRpbWUKLSAgICogQHBhcmFtIHNlcnZlckZhY3RvcnlJZCBpZCBvZiBhIHNlcnZlciB0eXBlCi0gICAqIEByZXR1cm4gYm9vbGVhbiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgZ2l2ZW4gc2VydmVyIHR5cGUgc3VwcG9ydHMgdGhlIGdpdmVuIAotICAgKiBjbGllbnRSdW50aW1lLiA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGRvZXNDbGllbnRSdW50aW1lU3VwcG9ydFNlcnZlcihTdHJpbmcgY2xpZW50UnVudGltZUlkLCBTdHJpbmcgc2VydmVyRmFjdG9yeUlkKQotICB7Ci0gICAgU3RyaW5nW10gc2VydmVySWRzID0gZ2V0U2VydmVyRmFjdG9yeUlkc0J5Q2xpZW50UnVudGltZShjbGllbnRSdW50aW1lSWQpOwotICAgIGZvciAoaW50IGk9MDsgaTxzZXJ2ZXJJZHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgaWYgKHNlcnZlcklkc1tpXS5lcXVhbHMoc2VydmVyRmFjdG9yeUlkKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIGdpdmVuIHNlcnZlciB0eXBlIHN1cHBvcnRzIHRoZSBnaXZlbiBXZWIgc2VydmljZSBydW50aW1lCi0gICAqIAotICAgKiBAcGFyYW0gcnVudGltZUlkIGlkIG9mIGEgV2ViIHNlcnZpY2UgcnVudGltZQotICAgKiBAcGFyYW0gZmFjdG9yeUlkIGlkIG9mIGEgc2VydmVyIHR5cGUKLSAgICogQHJldHVybiBib29sZWFuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBnaXZlbiBzZXJ2ZXIgdHlwZSBzdXBwb3J0cyB0aGUgZ2l2ZW4gCi0gICAqIFdlYiBzZXJ2aWNlIHJ1bnRpbWUgZm9yIHRoZSBjbGllbnQgc2lkZS4gPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBkb2VzUnVudGltZVN1cHBvcnRTZXJ2ZXJGb3JDbGllbnRTaWRlKFN0cmluZyBydW50aW1lSWQsIFN0cmluZyBmYWN0b3J5SWQpCi0gIHsKLSAgICAvL0dldCBhbGwgdGhlIENsaWVudFJ1bnRpbWVEZXNjcmlwdG9ycyB0aGF0IHBvaW50IHRvIHRoaXMgcnVudGltZUlkCi0gICAgSXRlcmF0b3IgaXRlciA9IHJlZ2lzdHJ5LmNsaWVudFJ1bnRpbWVzXy52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkgICAKLSAgICB7Ci0gICAgICBDbGllbnRSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gKENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yKWl0ZXIubmV4dCgpOwotICAgICAgLy9jaGVjayBpZiB0aGlzIGNsaWVudFJ1bnRpbWUgcG9pbnRzIHRvIHJ1bnRpbWVJZAotICAgICAgU3RyaW5nIHRoaXNSdW50aW1lSWQgPSBkZXNjLmdldFJ1bnRpbWUoKS5nZXRJZCgpOwotICAgICAgaWYgKHRoaXNSdW50aW1lSWQuZXF1YWxzKHJ1bnRpbWVJZCkpCi0gICAgICB7Ci0gICAgICAgIFNldCBmYWNldFJ1bnRpbWVzID0gZ2V0UnVudGltZXMoZGVzYy5nZXRSZXF1aXJlZEZhY2V0VmVyc2lvbnMoKSk7Ci0gICAgICAgIFN0cmluZ1tdIGZJZHMgPSBnZXRTZXJ2ZXJGYWN0b3J5SWRzQnlGYWNldFJ1bnRpbWVzKGZhY2V0UnVudGltZXMpOwotICAgICAgICBmb3IgKGludCBpPTA7IGk8Zklkcy5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgIGlmIChmSWRzW2ldLmVxdWFscyhmYWN0b3J5SWQpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfSAgICAgICAgICAgIAotICAgIH0KLSAgICAKLSAgICAvL05vIG1hdGNoLgotICAgIHJldHVybiBmYWxzZTsKLSAgfSAgICAKLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBpZCBvZiBhIHNlcnZlciB0eXBlIHRoYXQgc3VwcG9ydHMgdGhlIGdpdmVuIFdlYiBzZXJ2aWNlIHJ1bnRpbWUKLSAgICogb24gdGhlIGNsaWVudCBzaWRlLgotICAgKiAKLSAgICogQHBhcmFtIHJ1bnRpbWVJZCBpZCBvZiBhIFdlYiBzZXJ2aWNlIHJ1bnRpbWUKLSAgICogQHJldHVybiBTdHJpbmcgdGhlIGlkIG9mIGEgc2VydmVyIHR5cGUgdGhhdCBzdXBwb3J0cyB0aGUgZ2l2ZW4gV2ViIHNlcnZpY2UgcnVudGltZQotICAgKiBvbiB0aGUgY2xpZW50IHNpZGUuIFJldHVybnMgbnVsbCBpZiBzdWNoIGEgc2VydmVyIHR5cGUgY2Fubm90IGJlIGZvdW5kLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0Rmlyc3RTdXBwb3J0ZWRTZXJ2ZXJGb3JDbGllbnRTaWRlKFN0cmluZyBydW50aW1lSWQpCi0gIHsKLSAgICAvL0dldCBhbGwgdGhlIENsaWVudFJ1bnRpbWVEZXNjcmlwdG9ycyB0aGF0IHBvaW50IHRvIHRoaXMgcnVudGltZUlkCi0gICAgSXRlcmF0b3IgaXRlciA9IHJlZ2lzdHJ5LmNsaWVudFJ1bnRpbWVzXy52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkgICAKLSAgICB7Ci0gICAgICBDbGllbnRSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gKENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yKWl0ZXIubmV4dCgpOwotICAgICAgLy9jaGVjayBpZiB0aGlzIGNsaWVudFJ1bnRpbWUgcG9pbnRzIHRvIHJ1bnRpbWVJZAotICAgICAgU3RyaW5nIHRoaXNSdW50aW1lSWQgPSBkZXNjLmdldFJ1bnRpbWUoKS5nZXRJZCgpOwotICAgICAgaWYgKHRoaXNSdW50aW1lSWQuZXF1YWxzKHJ1bnRpbWVJZCkpCi0gICAgICB7Ci0gICAgICAgIFNldCBmYWNldFJ1bnRpbWVzID0gZ2V0UnVudGltZXMoZGVzYy5nZXRSZXF1aXJlZEZhY2V0VmVyc2lvbnMoKSk7Ci0gICAgICAgIFN0cmluZ1tdIGZhY3RvcnlJZHMgPSBnZXRTZXJ2ZXJGYWN0b3J5SWRzQnlGYWNldFJ1bnRpbWVzKGZhY2V0UnVudGltZXMpOwotICAgICAgICBpZiAoZmFjdG9yeUlkcyE9bnVsbCAmJiBmYWN0b3J5SWRzLmxlbmd0aCA+MCkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBmYWN0b3J5SWRzWzBdOwotICAgICAgICB9Ci0gICAgICB9ICAgICAgICAgICAgCi0gICAgfQotICAgIAotICAgIC8vTm8gc3VpdGFibGUgc2VydmVycyBmb3VuZC4gUmV0dXJuIG51bGwuCi0gICAgcmV0dXJuIG51bGw7Ci0KLSAgfQotICAKLQotICAvKioKLSAgICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgZ2l2ZW4gY29tYmluYXRpb24gb2Ygc2VydmVyIHR5cGUsIFdlYiBzZXJ2aWNlIHJ1bnRpbWUsIGFuZCAKLSAgICogV2ViIHNlcnZpY2UgY2xpZW50IGltcGxlbWVudGF0aW9uIHR5cGUgaXMgc3VwcG9ydGVkLiBVc2VkIGZvciB2YWxpZGF0aW9uLgotICAgKiAKLSAgICogQHBhcmFtIHNlcnZlckZhY3RvcnlJZCBpZCBvZiBhIHNlcnZlciB0eXBlCi0gICAqIEBwYXJhbSBydW50aW1lSWQgaWQgb2YgYSBXZWIgc2VydmljZSBydW50aW1lCi0gICAqIEBwYXJhbSBjbGllbnRJbXBsSWQgaWQgb2YgYSBXZWIgc2VydmljZSBjbGllbnQgaW1wbGVtZW50YXRpb24gdHlwZQotICAgKiBAcmV0dXJuIGJvb2xlYW4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGdpdmVuIGNvbWJpbmF0aW9uIG9mIHNlcnZlciB0eXBlLCBXZWIgc2VydmljZSBydW50aW1lLCAKLSAgICogYW5kIFdlYiBzZXJ2aWNlIGNsaWVudCBpbXBsZW1lbnRhdGlvbiB0eXBlIGlzIHN1cHBvcnRlZC4gPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1NlcnZlckNsaWVudFJ1bnRpbWVUeXBlU3VwcG9ydGVkKFN0cmluZyBzZXJ2ZXJGYWN0b3J5SWQsIFN0cmluZyBydW50aW1lSWQsIFN0cmluZyBjbGllbnRJbXBsSWQpICAKLSAgewotICAgIC8vRW5zdXJlIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjbGllbnRSdW50aW1lIHRoYXQgc3VwcG9ydHMgdGhlIGdpdmVuIHR5cGUKLSAgICBTdHJpbmdbXSBjbGllbnRSdW50aW1lcyA9IGdldENsaWVudFJ1bnRpbWVzQnlUeXBlKGNsaWVudEltcGxJZCk7Ci0gICAgaWYgKGNsaWVudFJ1bnRpbWVzIT1udWxsICYmIGNsaWVudFJ1bnRpbWVzLmxlbmd0aD4wKQotICAgIHsKLSAgICAgIC8vRW5zdXJlIHRoYXQgYXQgbGVhc3Qgb25lIG9mIHRoZXNlIHNlcnZlciBydW50aW1lcyBzdXBwb3J0cyB0aGUgZ2l2ZW4gc2VydmVyCi0gICAgICBmb3IgKGludCBpPTA7IGk8Y2xpZW50UnVudGltZXMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yIGRlc2MgPSBnZXRDbGllbnRSdW50aW1lRGVzY3JpcHRvckJ5SWQoY2xpZW50UnVudGltZXNbaV0pOwotICAgICAgICBpZiAoZGVzYy5nZXRSdW50aW1lKCkuZ2V0SWQoKS5lcXVhbHMocnVudGltZUlkKSkKLSAgICAgICAgewotICAgICAgICAgIC8vTWF0Y2hlZCB0eXBlIGFuZCBydW50aW1lLiBDaGVjayB0aGUgc2VydmVyLgotICAgICAgICAgIFN0cmluZ1tdIGZhY3RvcnlJZHMgPSBnZXRTZXJ2ZXJGYWN0b3J5SWRzQnlDbGllbnRSdW50aW1lKGRlc2MuZ2V0SWQoKSk7Ci0gICAgICAgICAgZm9yIChpbnQgaj0wOyBqPGZhY3RvcnlJZHMubGVuZ3RoOyBqKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKGZhY3RvcnlJZHNbal0uZXF1YWxzKHNlcnZlckZhY3RvcnlJZCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvL05vIG1hdGNoIGZvdW5kLiByZXR1cm4gZmFsc2UuCi0gICAgcmV0dXJuIGZhbHNlOwotICB9ICAgIAotICAKLSAgLyoqCi0gICAqIFJldHVybnMgYW4gYXJyYXkgb2Yge0BsaW5rIElGYWNldGVkUHJvamVjdFRlbXBsYXRlfSBpZHMgdGhhdCBzdXBwb3J0IHRoZSBnaXZlbiBXZWIgc2VydmljZSBjbGllbnQgaW1wbGVtZW50YXRpb24gdHlwZQotICAgKiBhbmQgV2ViIHNlcnZpY2UgcnVudGltZS4KLSAgICogCi0gICAqIEBwYXJhbSBjbGllbnRJbXBsSWQgaWQgb2YgYSBXZWIgc2VydmljZSBjbGllbnQgaW1wbGVtZW50YXRpb24gdHlwZQotICAgKiBAcGFyYW0gcnVudGltZUlkIGlkIG9mIGEgV2ViIHNlcnZpY2UgcnVudGltZQotICAgKiBAcmV0dXJuIFN0cmluZ1tdIGFycmF5IG9mIHtAbGluayBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZX0gaWRzIHRoYXQgc3VwcG9ydCB0aGUgZ2l2ZW4gV2ViIHNlcnZpY2UgY2xpZW50IGltcGxlbWVudGF0aW9uIHR5cGUKLSAgICogYW5kIFdlYiBzZXJ2aWNlIHJ1bnRpbWUuIFRoZSBhcnJheSBtYXkgaGF2ZSAwIGVsZW1lbnRzLiBSZXR1cm5zIG51bGwgaWYgbm8gY2xpZW50UnVudGltZXMgc3VwcG9ydGluZwotICAgKiB0aGUgZ2l2ZW4gV2ViIHNlcnZpY2UgY2xpZW50IGltcGxlbWVudGF0aW9uIHR5cGUgY291bGQgYmUgZm91bmQuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZ1tdIGdldENsaWVudFByb2plY3RUZW1wbGF0ZXMoU3RyaW5nIGNsaWVudEltcGxJZCwgU3RyaW5nIHJ1bnRpbWVJZCkKLSAgewotICAgIFN0cmluZ1tdIGNySWRzID0gZ2V0Q2xpZW50UnVudGltZXNCeVR5cGUoY2xpZW50SW1wbElkKTsKLSAgICBpZiAoY3JJZHMgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBBcnJheUxpc3QgdGVtcGxhdGVJZExpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjcklkcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBDbGllbnRSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gZ2V0Q2xpZW50UnVudGltZURlc2NyaXB0b3JCeUlkKGNySWRzW2ldKTsKLSAgICAgIFN0cmluZyB0aGlzUnVudGltZUlkID0gZGVzYy5nZXRSdW50aW1lKCkuZ2V0SWQoKTsKLSAgICAgIGlmICh0aGlzUnVudGltZUlkLmVxdWFscyhydW50aW1lSWQpKQotICAgICAgewotICAgICAgICAvL0dldCB0aGUgdGVtcGxhdGVzIGZvciB0aGlzIGNsaWVudFJ1bnRpbWUKLSAgICAgICAgU2V0IHRlbXBsYXRlcyA9IEZhY2V0TWF0Y2hDYWNoZS5nZXRJbnN0YW5jZSgpLmdldFRlbXBsYXRlc0ZvckNsaWVudFJ1bnRpbWUoZGVzYy5nZXRJZCgpKTsKLSAgICAgICAgCi0gICAgICAgIC8vQWRkIHRoZSB0ZW1wbGF0ZSBpZHMgdG8gdGhlIGxpc3QgaWYgdGhleSBoYXZlIG5vdCBhbHJlYWR5IGJlZW4gYWRkZWQKLSAgICAgICAgSXRlcmF0b3IgaXRyID0gdGVtcGxhdGVzLml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChpdHIuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGUgdGVtcGxhdGUgPSAoSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGUpaXRyLm5leHQoKTsKLSAgICAgICAgICBpZiAoIXRlbXBsYXRlSWRMaXN0LmNvbnRhaW5zKHRlbXBsYXRlLmdldElkKCkpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRlbXBsYXRlSWRMaXN0LmFkZCh0ZW1wbGF0ZS5nZXRJZCgpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIAotICAgIH0gIAotICAgIAotICAgIHJldHVybiAoU3RyaW5nW10pdGVtcGxhdGVJZExpc3QudG9BcnJheShuZXcgU3RyaW5nW117fSk7ICAgIAotICB9ICAKLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBnaXZlbiB7QGxpbmsgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGV9IHN1cHBvcnRzIHRoZSBnaXZlbiAKLSAgICogV2ViIHNlcnZpY2UgY2xpZW50IGltcGxlbWVudGF0aW9uIHR5cGUgYW5kIFdlYiBzZXJ2aWNlIHJ1bnRpbWUuCi0gICAqIAotICAgKiBAcGFyYW0gY2xpZW50SW1wbElkIGlkIG9mIGEgV2ViIHNlcnZpY2UgY2xpZW50IGltcGxlbWVudGF0aW9uIHR5cGUKLSAgICogQHBhcmFtIHJ1bnRpbWVJZCBpZCBvZiBhIFdlYiBzZXJ2aWNlIHJ1bnRpbWUKLSAgICogQHBhcmFtIHRlbXBsYXRlSWQgaWQgb2YgYSB7QGxpbmsgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGV9Ci0gICAqIEByZXR1cm4gYm9vbGVhbiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgZ2l2ZW4ge0BsaW5rIElGYWNldGVkUHJvamVjdFRlbXBsYXRlfSBzdXBwb3J0cyB0aGUgZ2l2ZW4gCi0gICAqIFdlYiBzZXJ2aWNlIGNsaWVudCBpbXBsZW1lbnRhdGlvbiB0eXBlIGFuZCBXZWIgc2VydmljZSBydW50aW1lLiBSZXR1cm5zIDxjb2RlPmZhbHNlPC9jb2RlPiBvdGhlcndpc2UuIAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGRvZXNDbGllbnRUeXBlQW5kUnVudGltZVN1cHBvcnRUZW1wbGF0ZShTdHJpbmcgY2xpZW50SW1wbElkLCBTdHJpbmcgcnVudGltZUlkLCBTdHJpbmcgdGVtcGxhdGVJZCkKLSAgewotICAgIFN0cmluZ1tdIGNySWRzID0gZ2V0Q2xpZW50UnVudGltZXNCeVR5cGUoY2xpZW50SW1wbElkKTsKLSAgICBpZiAoY3JJZHMgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjcklkcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBDbGllbnRSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gZ2V0Q2xpZW50UnVudGltZURlc2NyaXB0b3JCeUlkKGNySWRzW2ldKTsKLSAgICAgIFN0cmluZyB0aGlzUnVudGltZUlkID0gZGVzYy5nZXRSdW50aW1lKCkuZ2V0SWQoKTsKLSAgICAgIGlmICh0aGlzUnVudGltZUlkLmVxdWFscyhydW50aW1lSWQpKQotICAgICAgewotICAgICAgICAvL0dldCB0aGUgdGVtcGxhdGVzIGZvciB0aGlzIGNsaWVudFJ1bnRpbWUKLSAgICAgICAgU2V0IHRlbXBsYXRlcyA9IEZhY2V0TWF0Y2hDYWNoZS5nZXRJbnN0YW5jZSgpLmdldFRlbXBsYXRlc0ZvckNsaWVudFJ1bnRpbWUoY3JJZHNbaV0pOwotICAgICAgICAKLSAgICAgICAgLy9DaGVjayBpZiB0aGUgdGVtcGxhdGUgaWRzIGNvbnRhaW5zIHRoZSB0ZW1wbGF0ZSB3ZSdyZSBjaGVja2luZyBmb3IKLSAgICAgICAgSXRlcmF0b3IgaXRyID0gdGVtcGxhdGVzLml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChpdHIuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGUgdGVtcGxhdGUgPSAoSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGUpaXRyLm5leHQoKTsKLSAgICAgICAgICBpZiAodGVtcGxhdGUuZ2V0SWQoKS5lcXVhbHModGVtcGxhdGVJZCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICB9ICAKLSAgICAKLSAgICByZXR1cm4gZmFsc2U7ICAgIAotICB9ICAKLSAgCi0KLSAgLyoqCi0gICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIGdpdmVuIHtAbGluayBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZX0gCi0gICAqIHN1cHBvcnRzIHRoZSBnaXZlbiBjbGllbnRSdW50aW1lCi0gICAqICAKLSAgICogQHBhcmFtIGNsaWVudFJ1bnRpbWVJZCBpZCBvZiBhIGNsaWVudFJ1bnRpbWUKLSAgICogQHBhcmFtIHRlbXBsYXRlSWQgaWQgb2YgYSB7QGxpbmsgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGV9Ci0gICAqIEByZXR1cm4gYm9vbGVhbiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgZ2l2ZW4ge0BsaW5rIElGYWNldGVkUHJvamVjdFRlbXBsYXRlfSBzdXBwb3J0cyB0aGUgZ2l2ZW4gCi0gICAqIGNsaWVudFJ1bnRpbWUuIFJldHVybnMgPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBkb2VzQ2xpZW50UnVudGltZVN1cHBvcnRUZW1wbGF0ZShTdHJpbmcgY2xpZW50UnVudGltZUlkLCBTdHJpbmcgdGVtcGxhdGVJZCkKLSAgewotICAgIC8vR2V0IHRoZSB0ZW1wbGF0ZXMgZm9yIHRoaXMgY2xpZW50UnVudGltZQotICAgIFNldCB0ZW1wbGF0ZXMgPSBGYWNldE1hdGNoQ2FjaGUuZ2V0SW5zdGFuY2UoKS5nZXRUZW1wbGF0ZXNGb3JDbGllbnRSdW50aW1lKGNsaWVudFJ1bnRpbWVJZCk7Ci0gICAgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGUgY2hlY2tpbmdUZW1wbGF0ZSA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmdldFRlbXBsYXRlKHRlbXBsYXRlSWQpOwotICAgIHJldHVybiB0ZW1wbGF0ZXMuY29udGFpbnMoY2hlY2tpbmdUZW1wbGF0ZSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBsYWJlbHMgYW5kIGlkcyBvZiBhbGwgV2ViIHNlcnZpY2UgY2xpZW50IGltcGxlbWVudGF0aW9uIHR5cGVzLiAKLSAgICogVXNlZCB0byBwb3B1bGF0ZSB0aGUgV2ViIHNlcnZpY2UgY2xpZW50IHR5cGUgY29tYm8gYm94IG9uCi0gICAqIHBhZ2UgMSBvZiB0aGUgV2ViIHNlcnZpY2Ugd2l6YXJkIGFuZCBXZWIgc2VydmljZSBjbGllbnQgd2l6YXJkLgotICAgKiBAcmV0dXJuIHtAbGluayBMYWJlbHNBbmRJZHN9Ci0gICAqLyAgCi0gIHB1YmxpYyBzdGF0aWMgTGFiZWxzQW5kSWRzIGdldENsaWVudFR5cGVMYWJlbHMoKQotICB7Ci0gICAgCi0gICAgTGFiZWxzQW5kSWRzIGxhYmVsSWRzID0gbmV3IExhYmVsc0FuZElkcygpOwotICAgIFN0cmluZ1tdIGlkc0FycmF5ID0gbmV3IFN0cmluZ1swXTsKLSAgICBTdHJpbmdbXSBsYWJlbHNBcnJheSA9IG5ldyBTdHJpbmdbMF07Ci0gICAgbGFiZWxJZHMuc2V0SWRzXyhpZHNBcnJheSk7Ci0gICAgbGFiZWxJZHMuc2V0TGFiZWxzXyhsYWJlbHNBcnJheSk7Ci0gIAotICAgIEFycmF5TGlzdCBpZHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgQXJyYXlMaXN0IGxhYmVscyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgCi0gICAgSXRlcmF0b3IgaXRyID0gcmVnaXN0cnkuY2xpZW50UnVudGltZXNfLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUoaXRyLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBDbGllbnRSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gKENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yKWl0ci5uZXh0KCk7Ci0gICAgICBXZWJTZXJ2aWNlQ2xpZW50SW1wbCB0aGlzQ2xpZW50SW1wbCA9IGRlc2MuZ2V0Q2xpZW50SW1wbGVtZW50YXRpb25UeXBlKCk7Ci0gICAgICBpZiAoIWlkcy5jb250YWlucyh0aGlzQ2xpZW50SW1wbC5nZXRJZCgpKSkKLSAgICAgIHsKLSAgICAgICAgaWRzLmFkZCh0aGlzQ2xpZW50SW1wbC5nZXRJZCgpKTsKLSAgICAgICAgbGFiZWxzLmFkZCh0aGlzQ2xpZW50SW1wbC5nZXRMYWJlbCgpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoaWRzLnNpemUoKSA+IDApCi0gICAgewotICAgICAgaWRzQXJyYXkgPSAoU3RyaW5nW10pIGlkcy50b0FycmF5KG5ldyBTdHJpbmdbMF0pOwotICAgICAgbGFiZWxzQXJyYXkgPSAoU3RyaW5nW10pIGxhYmVscy50b0FycmF5KG5ldyBTdHJpbmdbMF0pOwotICAgICAgbGFiZWxJZHMuc2V0SWRzXyhpZHNBcnJheSk7Ci0gICAgICBsYWJlbElkcy5zZXRMYWJlbHNfKGxhYmVsc0FycmF5KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbGFiZWxJZHM7Ci0KLSAgfSAgCi0gIAotICAvKioKLSAgICogUmV0dXJucyBhbGwgc2VydmVyIHR5cGUgaWRzIGZvciB3aGljaCB0aGVyZSBhcmUgY29uZmlndXJlZCBzZXJ2ZXIgcnVudGltZXMKLSAgICogcHJlc2VudCBpbiB0aGUgd29ya3NwYWNlLgotICAgKiAKLSAgICogQHJldHVybiBTdHJpbmdbXSBhcnJheSBvZiBzZXJ2ZXIgdHlwZSBpZHMgZm9yIHdoaWNoIHRoZXJlIGFyZSBjb25maWd1cmVkIHNlcnZlciBydW50aW1lcwotICAgKiBwcmVzZW50IGluIHRoZSB3b3Jrc3BhY2UuIFRoZSBhcnJheSBtYXkgaGF2ZSAwIGVsZW1lbnRzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmdbXSBnZXRBbGxTZXJ2ZXJGYWN0b3J5SWRzV2l0aFJ1bnRpbWVzKCkKLSAgewotICAgIEFycmF5TGlzdCBmaWRzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIElTZXJ2ZXJUeXBlW10gc3RzID0gU2VydmVyQ29yZS5nZXRTZXJ2ZXJUeXBlcygpOwotICAgIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JUnVudGltZVtdIHJ0cyA9IFNlcnZlckNvcmUuZ2V0UnVudGltZXMoKTsKLSAgICAKLSAgICBmb3IgKGludCBpPTA7IGk8c3RzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIElTZXJ2ZXJUeXBlIHN0ID0gc3RzW2ldOwotICAgICAgZm9yIChpbnQgaj0wOyBqPHJ0cy5sZW5ndGg7IGorKykKLSAgICAgIHsKLSAgICAJaWYgKHN0ID09IG51bGwgfHwgc3QuZ2V0UnVudGltZVR5cGUoKSA9PSBudWxsKSBicmVhazsgICAgCSAgCi0gICAgICAgIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JUnVudGltZSBydCA9IHJ0c1tqXTsKLSAgICAgICAgLy8gSWYgdGhlIHNlcnZlciB0eXBlIGhhcyB0aGUgc2FtZSBydW50aW1lIHR5cGUgYXMgdGhpcyBydW50aW1lLCBhZGQgaXQgdG8gdGhlIGxpc3QKLSAgICAgICAgU3RyaW5nIHNlcnZlclR5cGVSdW50aW1lVHlwZUlkID0gc3QuZ2V0UnVudGltZVR5cGUoKS5nZXRJZCgpOwotICAgICAgICAKLSAgICAgICAgaWYgKHJ0ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgCUlSdW50aW1lVHlwZSBydFR5cGUgPSBydC5nZXRSdW50aW1lVHlwZSgpOwotICAgICAgICAJaWYgKHJ0VHlwZSAhPSBudWxsKQotICAgICAgICAJewotCQkgICAgICAgIFN0cmluZyBydW50aW1lUnVudGltZVR5cGVJZCA9IHJ0VHlwZS5nZXRJZCgpOwotCQkgICAgICAgIGlmIChzZXJ2ZXJUeXBlUnVudGltZVR5cGVJZC5lcXVhbHMocnVudGltZVJ1bnRpbWVUeXBlSWQpKQotCQkgICAgICAgIHsKLQkJICAgICAgICAgIGlmICghZmlkcy5jb250YWlucyhzdC5nZXRJZCgpKSkKLQkJICAgICAgICAgIHsKLQkJICAgICAgICAgICAgZmlkcy5hZGQoc3QuZ2V0SWQoKSk7Ci0JCSAgICAgICAgICB9Ci0JCSAgICAgICAgfQotICAgICAgICAJfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgCi0gICAgcmV0dXJuIChTdHJpbmdbXSlmaWRzLnRvQXJyYXkobmV3IFN0cmluZ1swXSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBuYW1lcyBvZiBhbGwgcHJvamVjdHMgaW4gdGhlIHdvcmtzcGFjZSB3aGljaCBzdXBwb3J0IHRoZSBnaXZlbiBXZWIgc2VydmljZSBjbGllbnQgCi0gICAqIGltcGxlbWVudGF0aW9uIHR5cGUgYW5kIFdlYiBzZXJ2aWNlIHJ1bnRpbWUuCi0gICAqIAotICAgKiBAcGFyYW0gdHlwZUlkIGlkIG9mIGEgV2ViIHNlcnZpY2UgY2xpZW50IGltcGxlbWVudGF0aW9uIHR5cGUKLSAgICogQHBhcmFtIHJ1bnRpbWVJZCBpZCBvZiBhIFdlYiBzZXJ2aWNlIHJ1bnRpbWUKLSAgICogQHJldHVybiBTdHJpbmdbXSBhcnJheSBvZiBwcm9qZWN0IG5hbWVzLiBUaGUgYXJyYXkgbWF5IGhhdmUgMCBlbGVtZW50cy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nW10gZ2V0UHJvamVjdHNGb3JDbGllbnRUeXBlQW5kUnVudGltZShTdHJpbmcgdHlwZUlkLCBTdHJpbmcgcnVudGltZUlkKQotICB7Ci0gICAgSVByb2plY3RbXSBwcm9qZWN0cyA9IEZhY2V0VXRpbHMuZ2V0QWxsUHJvamVjdHMoKTsKLSAgICBBcnJheUxpc3QgdmFsaWRQcm9qZWN0cyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAKLSAgICBmb3IgKGludCBpPTA7IGk8cHJvamVjdHMubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICBpZiAoZG9lc0NsaWVudFR5cGVBbmRSdW50aW1lU3VwcG9ydFByb2plY3QodHlwZUlkLCBydW50aW1lSWQsIHByb2plY3RzW2ldLmdldE5hbWUoKSkpCi0gICAgICB7Ci0gICAgICAgIHZhbGlkUHJvamVjdHMuYWRkKHByb2plY3RzW2ldLmdldE5hbWUoKSk7ICAgICAgICAKLSAgICAgIH0gICAgICAKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIChTdHJpbmdbXSl2YWxpZFByb2plY3RzLnRvQXJyYXkobmV3IFN0cmluZ1swXSk7Ci0gICAgCi0gIH0gIAotICAKLSAgLyoqCi0gICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIGdpdmVuIHByb2plY3Qgc3VwcG9ydHMgdGhlIGdpdmVuIFdlYiBzZXJ2aWNlIGNsaWVudCBpbXBsZW1lbnRhdGlvbiB0eXBlIAotICAgKiBhbmQgV2ViIHNlcnZpY2UgcnVudGltZS4KLSAgICogCi0gICAqIEBwYXJhbSB0eXBlSWQgaWQgb2YgYSBXZWIgc2VydmljZSBjbGllbnQgaW1wbGVtZW50YXRpb24gdHlwZQotICAgKiBAcGFyYW0gcnVudGltZUlkIGlkIG9mIGEgV2ViIHNlcnZpY2UgcnVudGltZQotICAgKiBAcGFyYW0gcHJvamVjdE5hbWUgbmFtZSBvZiBhbiBJUHJvamVjdCBpbiB0aGUgd29ya3NwYWNlCi0gICAqIEByZXR1cm4gYm9vbGVhbiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgcHJvamVjdCBzdXBwb3J0cyB0aGUgZ2l2ZW4gV2ViIHNlcnZpY2UgdHlwZSBhbmQgCi0gICAqIFdlYiBzZXJ2aWNlIHJ1bnRpbWUuIFJldHVybnMgPGNvZGU+ZmFsc2U8L2NvZGU+Ci0gICAqIDx1bD4gCi0gICAqIDxsaT5pZiB0aGUgcHJvamVjdCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBnaXZlbiBXZWIgc2VydmljZSBjbGllbnQgaW1wbGVtZW50YXRpb24gdHlwZSBhbmQgCi0gICAqIFdlYiBzZXJ2aWNlIHJ1bnRpbWUgb3I8L2xpPgotICAgKiA8bGk+aWYgdGhlIHByb2plY3QgZG9lcyBub3QgZXhpc3Qgb3I8L2xpPgotICAgKiA8bGk+aWYgcHJvamVjdE5hbWUgaXMgbnVsbCBvciBlbXB0eTwvbGk+Ci0gICAqIDwvdWw+Ci0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZG9lc0NsaWVudFR5cGVBbmRSdW50aW1lU3VwcG9ydFByb2plY3QoU3RyaW5nIHR5cGVJZCwgU3RyaW5nIHJ1bnRpbWVJZCwgU3RyaW5nIHByb2plY3ROYW1lKQotICB7Ci0gICAgU3RyaW5nW10gZGVzY3MgPSBnZXRDbGllbnRSdW50aW1lc0J5VHlwZSh0eXBlSWQpOwotICAgIGZvciAoaW50IGogPSAwOyBqIDwgZGVzY3MubGVuZ3RoOyBqKyspCi0gICAgewotICAgICAgQ2xpZW50UnVudGltZURlc2NyaXB0b3IgZGVzYyA9IGdldENsaWVudFJ1bnRpbWVEZXNjcmlwdG9yQnlJZChkZXNjc1tqXSk7Ci0gICAgICBpZiAoZGVzYy5nZXRSdW50aW1lKCkuZ2V0SWQoKS5lcXVhbHMocnVudGltZUlkKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKGRvZXNDbGllbnRSdW50aW1lU3VwcG9ydFByb2plY3QoZGVzY3Nbal0sIHByb2plY3ROYW1lKSkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICAKLSAgfSAgCi0gIAotICAKLSAgLyoqCi0gICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIGdpdmVuIHByb2plY3Qgc3VwcG9ydHMgdGhlIGdpdmVuIGNsaWVudFJ1bnRpbWUuCi0gICAqIEBwYXJhbSBjbGllbnRSdW50aW1lSWQgaWQgb2YgYSBjbGllbnRSdW50aW1lCi0gICAqIEBwYXJhbSBwcm9qZWN0TmFtZSBuYW1lIG9mIGFuIElQcm9qZWN0IGluIHRoZSB3b3Jrc3BhY2UKLSAgICogQHJldHVybiBib29sZWFuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBwcm9qZWN0IHN1cHBvcnRzIHRoZSBnaXZlbgotICAgKiBjbGllbnRSdW50aW1lLiBSZXR1cm5zIDxjb2RlPmZhbHNlPC9jb2RlPgotICAgKiA8dWw+IAotICAgKiA8bGk+aWYgdGhlIHByb2plY3QgZG9lcyBub3Qgc3VwcG9ydCB0aGUgZ2l2ZW4gY2xpZW50UnVudGltZSBvcjwvbGk+Ci0gICAqIDxsaT5pZiB0aGUgcHJvamVjdCBkb2VzIG5vdCBleGlzdCBvcjwvbGk+Ci0gICAqIDxsaT5pZiBwcm9qZWN0TmFtZSBpcyBudWxsIG9yIGVtcHR5PC9saT4KLSAgICogPC91bD4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBkb2VzQ2xpZW50UnVudGltZVN1cHBvcnRQcm9qZWN0KFN0cmluZyBjbGllbnRSdW50aW1lSWQsIFN0cmluZyBwcm9qZWN0TmFtZSkKLSAgewotICAgIEZhY2V0TWF0Y2hlciBmbSA9IEZhY2V0TWF0Y2hDYWNoZS5nZXRJbnN0YW5jZSgpLmdldE1hdGNoRm9yUHJvamVjdCh0cnVlLCBjbGllbnRSdW50aW1lSWQsIHByb2plY3ROYW1lKTsKLSAgICBpZiAoZm0gIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gZm0uaXNNYXRjaCgpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotICAKLSAgLy9VdGlsaXRpZXMgdXNlZCBieSB0aGUgU2VydmVyUnVudGltZVByZWZlcmVuY2VQYWdlCi0gIAotICBwcml2YXRlIHN0YXRpYyBTZWxlY3Rpb25MaXN0Q2hvaWNlcyBzZXJ2ZXJUb1J1bnRpbWVUb0oyRUVfOwotICBwcml2YXRlIHN0YXRpYyBIYXNodGFibGUgc2VydmVyRmFjdG9yeUlkQnlMYWJlbF87Ci0gIHByaXZhdGUgc3RhdGljIEhhc2h0YWJsZSBydW50aW1lSWRCeUxhYmVsXzsKLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB7QGxpbmsgU2VsZWN0aW9uTGlzdENob2ljZXN9IGRhdGEgc3RydWN0dXJlIHJlcHJlc2VudGluZyB0aGUgCi0gICAqIHNlcnZlciB0eXBlID4gV2ViIHNlcnZpY2UgcnVudGltZSA+IEoyRUUgY2FzY2FkaW5nIGxpc3RzIC4KLSAgICoge0BsaW5rIFNlbGVjdGlvbkxpc3RDaG9pY2VzfSBpcyBhIGRhdGEgc3RydWN0dXJlICB3aGljaCBpcyBsaWtlIGEgY2FzY2FkaW5nCi0gICAqIHNldCBvZiBsaXN0cyB1c2VmdWwgZm9yIHBvcHVsYXRpbmcgYSBncm91cCBvZiBjb21ibyBib3hlcyBpbiB3aGljaCB0aGUgCi0gICAqIHNlbGVjdGlvbiBpbiBhIGdpdmVuIGNvbWJvIGJveCBkZXRlcm1pbmVzIHRoZSBsaXN0IG9mIGl0ZW1zIHVzZWQgdG8gcG9wdWxhdGUKLSAgICogdGhlIGNvbWJvIGJveCBiZWxvdyBpdC4gVGhlIFNlcnZlciBSdW50aW1lIHByZWZlcmVuY2UgcGFnZSBjb250YWlucyB0d28gY29tYm8KLSAgICogYm94ZXM6IG9uZSBmb3Igc2VydmVyIHR5cGVzIGFuZCwgYmVsb3cgaXQsIG9uZSBmb3IgV2ViIHNlcnZpY2UgcnVudGltZXMuCi0gICAqIFRoZSBzZXJ2ZXIgdHlwZSBjb21ibyBib3ggaXMgbWVhbnQgdG8gY29udGFpbiB0aGUgbGlzdCBvZiBhbGwgYXZhaWxhYmxlIHNlcnZlciB0eXBlcwotICAgKiB0aGF0IHN1cHBvcnQgYXQgbGVhc3Qgb25lIFdlYiBzZXJ2aWNlIHJ1bnRpbWUgb24gZWl0aGVyIHRoZSBjbGllbnQgb3Igc2VydmljZSBzaWRlLiAKLSAgICogVGhlIFdlYiBzZXJ2aWNlIHJ1bnRpbWUgY29tYm8gYm94IGlzIG1lYW50IHRvIGNvbnRhaW4gdGhlIHN1YnNldCBvZiBXZWIgc2VydmljZSBydW50aW1lcwotICAgKiBzdXBwb3J0ZWQgYnkgdGhlIHNlcnZlciB0eXBlIHNlbGVjdGVkIGluIHRoZSBzZXJ2ZXIgdHlwZSBjb21ibyBib3guCi0gICAqIFRoZSBTZWxlY3Rpb25MaXN0Q2hvaWNlcyByZXR1cm5lZCBieSB0aGlzIG1ldGhvZCBoYXMgdGhyZWUgbGlzdHM6IHNlcnZlciB0eXBlcywgV2ViIHNlcnZpY2UgcnVudGltZXMsCi0gICAqIGFuZCBKMkVFIGxldmVscy4gVGhlIGZpcnN0IHR3byBsaXN0cyBjb3JyZXNwb25kIHRvIHRoZSBjb21ibyBib3hlcyBvbiB0aGUgcHJlZmVyZW5jZQotICAgKiBwYWdlIGFuZCBhcmUgdXNlZCB0byBwb3B1bGF0ZSB0aGVtLiBUaGUgSjJFRSBsZXZlbHMgbGlzdCBpcyBhIGhpc3RvcmljYWwgcmVtbmFudCBmcm9tCi0gICAqIHdoZW4gSjJFRSBsZXZlbHMgdXNlZCB0byBiZSBkaXNwbGF5ZWQgb24gdGhlIHByZWZlcmVuY2UgcGFnZS4gSXQgcmVtYWlucyBpbiB0aGlzIAotICAgKiBkYXRhIHN0cnVjdHVyZSB3aXRoIHNvbWUgaGFyZC1jb2RlZCB2YWx1ZXMgYnV0IGlzIG5vdCByZW5kZXJlZCB0byB0aGUgdXNlci4gCi0gICAqIAotICAgKiBAcmV0dXJuIFNlbGVjdGlvbkxpc3RDaG9pY2VzIHJlcHJlc2VudGluZyB0aGUgc2VydmVyIHR5cGUgPiBXZWIgc2VydmljZSBydW50aW1lID4gSjJFRSBjYXNjYWRpbmcgbGlzdHMKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU2VsZWN0aW9uTGlzdENob2ljZXMgZ2V0U2VydmVyVG9SdW50aW1lVG9KMkVFKCkKLSAgewotICAgIGlmIChzZXJ2ZXJUb1J1bnRpbWVUb0oyRUVfIT1udWxsKQotICAgIHsKLSAgICAgIHJldHVybiBzZXJ2ZXJUb1J1bnRpbWVUb0oyRUVfOwotICAgIH0KLSAgICAKLSAgICAvL1RPRE8gKHNlZSBidWcgMTE2MDI1KTogSW5zdGVhZCBvZiBhbGwgc2VydmVyIHR5cGUgaWRzLCB3ZSBzaG91bGQgYmUgY2FsY3VsYXRpbmcgdGhlIHNldCBvZiBzZXJ2ZXIKLSAgICAvL3R5cGVzIHRoYXQgc3VwcG9ydCBhdCBsZWFzdCBvbmUgV2ViIHNlcnZpY2UgcnVudGltZSBvbiBlaXRoZXIgdGhlIGNsaWVudCBvciBzZXJ2aWNlIHNpZGUuCi0gICAgLy9HZXR0aW5nIGFsbCBzZXJ2ZXIgdHlwZXMgZm9yIG5vdy4KLSAgICBTdHJpbmdbXSBzZXJ2ZXJzID0gZ2V0QWxsU2VydmVyRmFjdG9yeUlkcygpOwotICAgIAotICAgIFNlbGVjdGlvbkxpc3Qgc2VydmVyc0xpc3QgPSBuZXcgU2VsZWN0aW9uTGlzdChzZXJ2ZXJzLCAwKTsKLSAgICBWZWN0b3IgY2hvaWNlcyA9IG5ldyBWZWN0b3IoKTsKLSAgICBmb3IgKGludCBpPTA7IGk8c2VydmVycy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBjaG9pY2VzLmFkZChnZXRSdW50aW1lQ2hvaWNlcyhzZXJ2ZXJzW2ldKSk7Ci0gICAgfQotICAgIHNlcnZlclRvUnVudGltZVRvSjJFRV8gPSBuZXcgU2VsZWN0aW9uTGlzdENob2ljZXMoc2VydmVyc0xpc3QsIGNob2ljZXMpOwotICAgIHJldHVybiBzZXJ2ZXJUb1J1bnRpbWVUb0oyRUVfOwotICAgIAotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgU2VsZWN0aW9uTGlzdENob2ljZXMgZ2V0UnVudGltZUNob2ljZXMoU3RyaW5nIHNlcnZlckZhY3RvcnlJZCkKLSAgewotCS8vVE9ETyAoc2VlIGJ1ZyAxMTYwMjUpOiBJbnN0ZWFkIG9mIGFsbCBXZWIgc2VydmljZSBydW50aW1lcywgd2Ugc2hvdWxkIGJlIAotCS8vY2FsY3VsYXRpbmcgdGhlIHN1YnNldCBvZiBXZWIgc2VydmljZSBydW50aW1lcyBzdXBwb3J0ZWQgYnkgdGhlIHNlcnZlciB0eXBlCi0JLy93aXRoIGlkIGVxdWFsIHRvIHNlcnZlckZhY3RvcnlJZC4gR2V0dGluZyBhbGwgdGhlIFdlYiBzZXJ2aWNlIHJ1bnRpbWVzIGZvciBub3cuCi0gICAgU2V0IHJ1bnRpbWVzID0gcmVnaXN0cnkucnVudGltZXNfLmtleVNldCgpOwotICAgIEl0ZXJhdG9yIGl0ciA9IHJlZ2lzdHJ5LnJ1bnRpbWVzXy5rZXlTZXQoKS5pdGVyYXRvcigpOwotICAgIFN0cmluZ1tdIHJ1bnRpbWVJZHMgPSBuZXcgU3RyaW5nW3J1bnRpbWVzLnNpemUoKV07ICAgIAotICAgIGludCBpID0gMDsKLSAgICB3aGlsZSAoaXRyLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBTdHJpbmcgcnVudGltZUlkID0gKFN0cmluZylpdHIubmV4dCgpOwotICAgICAgcnVudGltZUlkc1tpXSA9IHJ1bnRpbWVJZDsKLSAgICAgIGkrKzsgICAgIAotICAgIH0KLQotICAgIFNlbGVjdGlvbkxpc3QgcnVudGltZXNMaXN0ID0gbmV3IFNlbGVjdGlvbkxpc3QocnVudGltZUlkcywgMCk7Ci0gICAgVmVjdG9yIGNob2ljZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgZm9yIChpbnQgaj0wOyBqPHJ1bnRpbWVJZHMubGVuZ3RoOyBqKyspCi0gICAgewotICAgICAgY2hvaWNlcy5hZGQoZ2V0SjJFRUNob2ljZXMocnVudGltZUlkc1tqXSkpOwotICAgIH0KLSAgICByZXR1cm4gbmV3IFNlbGVjdGlvbkxpc3RDaG9pY2VzKHJ1bnRpbWVzTGlzdCwgY2hvaWNlcyk7ICAgIAotICB9ICAKLSAgCi0gIHByaXZhdGUgc3RhdGljIFNlbGVjdGlvbkxpc3RDaG9pY2VzIGdldEoyRUVDaG9pY2VzKFN0cmluZyBydW50aW1lSWQpCi0gIHsKLSAgICAvL0oyRUUgbGV2ZWxzIGhhdmUgYmVlbiByZW1vdmVkIGZyb20gdGhlIFNlcnZlciBSdW50aW1lIHByZWZlcmVuY2UgcGFnZS4KLSAgICAvL1JldHVybiBzb21lIGhhcmQgY29kZWQgdmFsdWVzLiBUaGVzZSB3aWxsIG5vdCBiZSByZW5kZXJlZCBvbiB0aGUgcHJlZmVyZW5jZSBwYWdlLgotICAgIFN0cmluZ1tdIGoyZWVWZXJzaW9ucyA9IG5ldyBTdHJpbmdbXXsiMTMiLCAiMTQifTsKLSAgICBTZWxlY3Rpb25MaXN0IGoyZWVWZXJzaW9uc0xpc3QgPSBuZXcgU2VsZWN0aW9uTGlzdChqMmVlVmVyc2lvbnMsIDApOwotICAgIHJldHVybiBuZXcgU2VsZWN0aW9uTGlzdENob2ljZXMoajJlZVZlcnNpb25zTGlzdCwgbnVsbCk7ICAgICAgICAKLSAgfSAgCi0gIAotICBwcml2YXRlIHN0YXRpYyBTdHJpbmdbXSBnZXRBbGxTZXJ2ZXJGYWN0b3J5SWRzKCkKLSAgewotICAgIC8vVE9ETyAoc2VlIGJ1ZyAxMTYwMjUpOiBJbnN0ZWFkIG9mIGFsbCBzZXJ2ZXIgdHlwZSBpZHMsIHdlIHNob3VsZCBiZSBjYWxjdWxhdGluZyB0aGUgc2V0IG9mIHNlcnZlcgotCS8vdHlwZXMgdGhhdCBzdXBwb3J0IGF0IGxlYXN0IG9uZSBXZWIgc2VydmljZSBydW50aW1lIG9uIGVpdGhlciB0aGUgY2xpZW50IG9yIHNlcnZpY2Ugc2lkZS4KLQkvL1JldHVybiBhbGwgc2VydmVyIHR5cGUgaWRzIGZvciBub3cuCi0gICAgQXJyYXlMaXN0IGlkcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBpZiAoc2VydmVyRmFjdG9yeUlkQnlMYWJlbF8gPT0gbnVsbCkKLSAgICB7Ci0gICAgICBzZXJ2ZXJGYWN0b3J5SWRCeUxhYmVsXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICAgIElTZXJ2ZXJUeXBlW10gc2VydmVyVHlwZXMgPSBTZXJ2ZXJDb3JlLmdldFNlcnZlclR5cGVzKCk7Ci0gICAgICBmb3IgKGludCBpPTA7IGk8c2VydmVyVHlwZXMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBpZCA9IHNlcnZlclR5cGVzW2ldLmdldElkKCk7Ci0gICAgICAgIFN0cmluZyBsYWJlbCA9IGdldFNlcnZlckxhYmVsQnlJZChpZCk7Ci0gICAgICAgIHNlcnZlckZhY3RvcnlJZEJ5TGFiZWxfLnB1dChsYWJlbCwgaWQpOwotICAgICAgICBpZHMuYWRkKGlkKTsKLSAgICAgIH0gICAgCi0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBJdGVyYXRvciBmaWRzID0gIHNlcnZlckZhY3RvcnlJZEJ5TGFiZWxfLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoZmlkcy5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBmaWQgPSAoU3RyaW5nKWZpZHMubmV4dCgpOwotICAgICAgICBpZHMuYWRkKGZpZCk7Ci0gICAgICB9ICAgICAgICAgICAKLSAgICB9Ci0gICAgCi0gICAgaWYgKGlkcy5zaXplKCkgPiAwKQotICAgIHsKLSAgICAgIFN0cmluZ1tdIHNlcnZlckZhY3RvcnlJZHMgPSAoU3RyaW5nW10paWRzLnRvQXJyYXkobmV3IFN0cmluZ1swXSk7Ci0gICAgICByZXR1cm4gc2VydmVyRmFjdG9yeUlkczsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG51bGw7Ci0gIH0gIAotICAgIAotICAvKioKLSAgICogUmV0dXJucyBhIHNlcnZlciB0eXBlIGlkIGdpdmVuIHRoZSBzZXJ2ZXIgdHlwZSdzIGxhYmVsCi0gICAqIEBwYXJhbSBsYWJlbCBzZXJ2ZXIgdHlwZSBsYWJlbAotICAgKiBAcmV0dXJuIHNlcnZlciB0eXBlIGlkIG9yIG51bGwgaWYgbm8gc2VydmVyIHR5cGUgd2l0aCB0aGUgZ2l2ZW4gCi0gICAqIGxhYmVsIGlzIGZvdW5kLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U2VydmVyRmFjdG9yeUlkKFN0cmluZyBsYWJlbCkKLSAgewotICAgIGlmIChsYWJlbD09bnVsbCB8fCBsYWJlbC5sZW5ndGgoKT09MCkKLSAgICAgIHJldHVybiBudWxsOwotICAgIAotICAgIGlmIChzZXJ2ZXJGYWN0b3J5SWRCeUxhYmVsXyA9PSBudWxsKQotICAgIHsKLSAgICAgIGdldEFsbFNlcnZlckZhY3RvcnlJZHMoKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKHNlcnZlckZhY3RvcnlJZEJ5TGFiZWxfLmNvbnRhaW5zS2V5KGxhYmVsKSkKLSAgICB7Ci0gICAgICByZXR1cm4gKFN0cmluZylzZXJ2ZXJGYWN0b3J5SWRCeUxhYmVsXy5nZXQobGFiZWwpOyAgCi0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9ICAgICAgIAotICB9ICAKLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgV2ViIHNlcnZpY2UgcnVudGltZSdzIGlkIGdpdmVuIGl0cyBsYWJlbCAKLSAgICogQHBhcmFtIGxhYmVsIFdlYiBzZXJ2aWNlIHJ1bnRpbWUgbGFiZWwKLSAgICogQHJldHVybiBXZWIgc2VydmljZSBydW50aW1lIGlkIG9yIG51bGwgaWYgbm8KLSAgICogV2ViIHNlcnZpY2UgcnVudGltZSB3aXRoIHRoZSBnaXZlbiBsYWJlbCBpcyBmb3VuZC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFJ1bnRpbWVJZChTdHJpbmcgbGFiZWwpCi0gIHsKLSAgICAKLSAgICBpZiAobGFiZWw9PW51bGwgfHwgbGFiZWwubGVuZ3RoKCk9PTApCi0gICAgICByZXR1cm4gbnVsbDsKLSAgICAKLSAgICBpZiAocnVudGltZUlkQnlMYWJlbF8gPT0gbnVsbCkKLSAgICB7Ci0gICAgICBydW50aW1lSWRCeUxhYmVsXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICAgIEl0ZXJhdG9yIGl0ZXIgPSByZWdpc3RyeS5ydW50aW1lc18udmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgUnVudGltZURlc2NyaXB0b3IgZGVzYyA9IChSdW50aW1lRGVzY3JpcHRvcilpdGVyLm5leHQoKTsKLSAgICAgICAgcnVudGltZUlkQnlMYWJlbF8ucHV0KGRlc2MuZ2V0TGFiZWwoKSwgZGVzYy5nZXRJZCgpKTsgICAgICAgIAotICAgICAgfSAgICAgIAotICAgIH0KLSAgICAKLSAgICByZXR1cm4gKFN0cmluZylydW50aW1lSWRCeUxhYmVsXy5nZXQobGFiZWwpOyAgICAKLSAgfSAgICAKLSAgCi0gICAgCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgc2V0IG9mIGZhY2V0IHJ1bnRpbWVzIHRoYXQgc3VwcG9ydCB0aGUgZ2l2ZW4KLSAgICogcmVxdWlyZWQgZmFjZXQgdmVyc2lvbnMuCi0gICAqIEBwYXJhbSByZXF1aXJlZEZhY2V0VmVyc2lvbnMgYW4gYXJyYXkgY29udGFpbmluZyBlbGVtZW50cyBvZiB0eXBlIHtAbGluayBSZXF1aXJlZEZhY2V0VmVyc2lvbn0KLSAgICogQHJldHVybiBTZXQgc2V0IG9mIGZhY2V0IHJ1bnRpbWVzIHRoYXQgc3VwcG9ydCB0aGUgZ2l2ZW4gcmVxdWlyZWQgZmFjZXQgdmVyc2lvbnMuCi0gICAqIChlbGVtZW50IHR5cGU6IHtAbGluayBJUnVudGltZX0pIAotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgU2V0IGdldFJ1bnRpbWVzKFJlcXVpcmVkRmFjZXRWZXJzaW9uW10gcmVxdWlyZWRGYWNldFZlcnNpb25zKQotICB7Ci0gICAgcmV0dXJuIEZhY2V0VXRpbHMuZ2V0UnVudGltZXMocmVxdWlyZWRGYWNldFZlcnNpb25zKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c3J0L1dlYlNlcnZpY2VSdW50aW1lSW5mby5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi91aS93c3J0L1dlYlNlcnZpY2VSdW50aW1lSW5mby5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOGUyNTYyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vdWkvd3NydC9XZWJTZXJ2aWNlUnVudGltZUluZm8uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMTYgICAxMjcxMzggcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0OwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlUnVudGltZTsKLWltcG9ydCBjb20uaWJtLmljdS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLQotCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZVJ1bnRpbWVJbmZvIHsKLQotICBwcml2YXRlIElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtXzsKLSAgcHJpdmF0ZSBIYXNodGFibGUgYWxsU2VydmljZVR5cGVzXzsKLSAgcHJpdmF0ZSBIYXNodGFibGUgYWxsQ2xpZW50VHlwZXNfOwotICAKLSAgcHJpdmF0ZSBTdHJpbmcgaWQ7Ci0gIHByaXZhdGUgU3RyaW5nIGxhYmVsOwotCXByaXZhdGUgU2VydmljZVR5cGVbXSBzZXJ2aWNlVHlwZXM7Ci0JcHJpdmF0ZSBDbGllbnRUeXBlW10gY2xpZW50VHlwZXM7Ci0JcHJpdmF0ZSBqYXZhLmxhbmcuU3RyaW5nW10gc2VydmxldExldmVsczsKLQlwcml2YXRlIGphdmEubGFuZy5TdHJpbmdbXSBqMmVlTGV2ZWxzOwotCXByaXZhdGUgamF2YS5sYW5nLlN0cmluZ1tdIHJ1bnRpbWVJZHM7Ci0JcHJpdmF0ZSBqYXZhLmxhbmcuU3RyaW5nW10gc2VydmVyRmFjdG9yeUlkczsKLQlwcml2YXRlIFN0cmluZyBjbGFzc05hbWU7Ci0JcHJpdmF0ZSBJV2ViU2VydmljZVJ1bnRpbWUgd2ViU2VydmljZVJ1bnRpbWVfOwotICAKLSAgcHVibGljIFdlYlNlcnZpY2VSdW50aW1lSW5mbyhJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbV8sIEhhc2h0YWJsZSBhbGxTZXJ2aWNlVHlwZXNfLCBIYXNodGFibGUgYWxsQ2xpZW50VHlwZXNfKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgICB0aGlzLmVsZW1fID0gZWxlbV87Ci0gICAgdGhpcy5hbGxTZXJ2aWNlVHlwZXNfID0gYWxsU2VydmljZVR5cGVzXzsKLSAgICB0aGlzLmFsbENsaWVudFR5cGVzXyA9IGFsbENsaWVudFR5cGVzXzsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q2xhc3NOYW1lKCkKLSAgewotICAgIGlmIChjbGFzc05hbWU9PW51bGwpCi0gICAgewotICAgICAgY2xhc3NOYW1lPWVsZW1fLmdldEF0dHJpYnV0ZSgiY2xhc3MiKTsKLSAgICB9Ci0gICAgcmV0dXJuIGNsYXNzTmFtZTsKLSAgfQotICAKLQotICBwdWJsaWMgQ2xpZW50VHlwZVtdIGdldENsaWVudFR5cGVzKCkKLSAgewotICAgIGlmIChjbGllbnRUeXBlcz09bnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgYXR0ciA9IGVsZW1fLmdldEF0dHJpYnV0ZSgiY2xpZW50VHlwZXMiKTsKLSAgICAgIGlmIChhdHRyICE9IG51bGwgJiYgYXR0ci5sZW5ndGgoKT4wKQotICAgICAgewotICAgICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGF0dHIsICIgIik7Ci0gICAgICAgIGludCBzaXplID0gc3QuY291bnRUb2tlbnMoKTsKLSAgICAgICAgY2xpZW50VHlwZXMgPSBuZXcgQ2xpZW50VHlwZVtzaXplXTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjbGllbnRUeXBlcy5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBjdGlkID0gc3QubmV4dFRva2VuKCk7ICAgICAgICAgIAotICAgICAgICAgIGNsaWVudFR5cGVzW2ldID0gKENsaWVudFR5cGUpYWxsQ2xpZW50VHlwZXNfLmdldChjdGlkKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gY2xpZW50VHlwZXM7Ci0gIH0KLSAgCi0KLSAgcHVibGljIFN0cmluZyBnZXRJZCgpCi0gIHsKLSAgICBpZiAoaWQ9PW51bGwpCi0gICAgewotICAgICAgaWQgPSBlbGVtXy5nZXRBdHRyaWJ1dGUoImlkIik7Ci0gICAgfQotICAgIHJldHVybiBpZDsKLSAgfQotICAKLQotICBwdWJsaWMgU3RyaW5nIGdldExhYmVsKCkKLSAgewotICAgIGlmIChsYWJlbD09bnVsbCkKLSAgICB7Ci0gICAgICBsYWJlbCA9IGVsZW1fLmdldEF0dHJpYnV0ZSgibGFiZWwiKTsKLSAgICB9Ci0gICAgcmV0dXJuIGxhYmVsOwotICB9ICAgCi0KLSAgCi0gIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nW10gZ2V0SjJlZUxldmVscygpCi0gIHsKLSAgICBpZiAoajJlZUxldmVscyA9PSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyBhdHRyID0gZWxlbV8uZ2V0QXR0cmlidXRlKCJqMmVlTGV2ZWxzIik7Ci0gICAgICBpZiAoYXR0ciAhPSBudWxsICYmIGF0dHIubGVuZ3RoKCk+MCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihhdHRyLCAiICIpOwotICAgICAgICBpbnQgc2l6ZSA9IHN0LmNvdW50VG9rZW5zKCk7Ci0gICAgICAgIGoyZWVMZXZlbHMgPSBuZXcgU3RyaW5nW3NpemVdOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGoyZWVMZXZlbHMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgajJlZUxldmVsc1tpXSA9IHN0Lm5leHRUb2tlbigpOwotICAgICAgfQotICAgIH0gICAgICAKLSAgICAKLSAgICByZXR1cm4gajJlZUxldmVsczsKLSAgfQotICAKLQotICBwdWJsaWMgamF2YS5sYW5nLlN0cmluZ1tdIGdldFJ1bnRpbWVJZHMoKQotICB7Ci0gICAgaWYgKHJ1bnRpbWVJZHMgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgYXR0ciA9IGVsZW1fLmdldEF0dHJpYnV0ZSgicnVudGltZXMiKTsKLSAgICAgIGlmIChhdHRyICE9IG51bGwgJiYgYXR0ci5sZW5ndGgoKT4wKQotICAgICAgewotICAgICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGF0dHIsICIgIik7Ci0gICAgICAgIGludCBzaXplID0gc3QuY291bnRUb2tlbnMoKTsKLSAgICAgICAgcnVudGltZUlkcyA9IG5ldyBTdHJpbmdbc2l6ZV07Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcnVudGltZUlkcy5sZW5ndGg7IGkrKykKLSAgICAgICAgICBydW50aW1lSWRzW2ldID0gc3QubmV4dFRva2VuKCk7Ci0gICAgICB9Ci0gICAgfSAgICAgIAotICAgIAotICAgIHJldHVybiBydW50aW1lSWRzOwotICB9Ci0gIAotCi0gIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nW10gZ2V0U2VydmVyRmFjdG9yeUlkcygpCi0gIHsKLSAgICBpZiAoc2VydmVyRmFjdG9yeUlkcyA9PSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyBhdHRyID0gZWxlbV8uZ2V0QXR0cmlidXRlKCJzZXJ2ZXJzIik7Ci0gICAgICBpZiAoYXR0ciAhPSBudWxsICYmIGF0dHIubGVuZ3RoKCk+MCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihhdHRyLCAiICIpOwotICAgICAgICBpbnQgc2l6ZSA9IHN0LmNvdW50VG9rZW5zKCk7Ci0gICAgICAgIHNlcnZlckZhY3RvcnlJZHMgPSBuZXcgU3RyaW5nW3NpemVdOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNlcnZlckZhY3RvcnlJZHMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgc2VydmVyRmFjdG9yeUlkc1tpXSA9IHN0Lm5leHRUb2tlbigpOwotICAgICAgfSAgICAgIAotICAgIH0KLSAgICByZXR1cm4gc2VydmVyRmFjdG9yeUlkczsKLSAgfQotICAKLQotICBwdWJsaWMgU2VydmljZVR5cGVbXSBnZXRTZXJ2aWNlVHlwZXMoKQotICB7Ci0gICAgaWYgKHNlcnZpY2VUeXBlcz09bnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgYXR0ciA9IGVsZW1fLmdldEF0dHJpYnV0ZSgic2VydmljZVR5cGVzIik7Ci0gICAgICBpZiAoYXR0ciAhPSBudWxsICYmIGF0dHIubGVuZ3RoKCk+MCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihhdHRyLCAiICIpOwotICAgICAgICBpbnQgc2l6ZSA9IHN0LmNvdW50VG9rZW5zKCk7Ci0gICAgICAgIHNlcnZpY2VUeXBlcyA9IG5ldyBTZXJ2aWNlVHlwZVtzaXplXTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZXJ2aWNlVHlwZXMubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgY3RpZCA9IHN0Lm5leHRUb2tlbigpOyAgICAgICAgICAKLSAgICAgICAgICBzZXJ2aWNlVHlwZXNbaV0gPSAoU2VydmljZVR5cGUpYWxsU2VydmljZVR5cGVzXy5nZXQoY3RpZCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHNlcnZpY2VUeXBlczsKLSAgfQotICAKLQotICBwdWJsaWMgamF2YS5sYW5nLlN0cmluZ1tdIGdldFNlcnZsZXRMZXZlbHMoKQotICB7Ci0gICAgaWYgKHNlcnZsZXRMZXZlbHM9PW51bGwpCi0gICAgewotICAgICAgU3RyaW5nIGF0dHIgPSBlbGVtXy5nZXRBdHRyaWJ1dGUoInNlcnZsZXRMZXZlbHMiKTsKLSAgICAgIGlmIChhdHRyICE9IG51bGwgJiYgYXR0ci5sZW5ndGgoKT4wKQotICAgICAgewotICAgICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGF0dHIsICIgIik7Ci0gICAgICAgIGludCBzaXplID0gc3QuY291bnRUb2tlbnMoKTsKLSAgICAgICAgc2VydmxldExldmVscyA9IG5ldyBTdHJpbmdbc2l6ZV07Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VydmxldExldmVscy5sZW5ndGg7IGkrKykKLSAgICAgICAgICBzZXJ2bGV0TGV2ZWxzW2ldID0gc3QubmV4dFRva2VuKCk7Ci0gICAgICB9ICAgICAgCi0gICAgfQotICAgIHJldHVybiBzZXJ2bGV0TGV2ZWxzOwotICB9Ci0gIAotICBwdWJsaWMgSVdlYlNlcnZpY2VSdW50aW1lIGdldFdlYlNlcnZpY2VSdW50aW1lKCkKLSAgewotCWlmICh3ZWJTZXJ2aWNlUnVudGltZV8gPT0gbnVsbCkKLQl7Ci0JCXRyeQotCQl7Ci0JCQl3ZWJTZXJ2aWNlUnVudGltZV8gPSAoSVdlYlNlcnZpY2VSdW50aW1lKWVsZW1fLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oImNsYXNzIik7Ci0JCX0KLQkJY2F0Y2goQ29yZUV4Y2VwdGlvbiBjZSkKLQkJewotCQkJY2UucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQl9Ci0JCi0JcmV0dXJuIHdlYlNlcnZpY2VSdW50aW1lXzsKLSAgfQotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLy5jbGFzc3BhdGggYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODVjODk4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9IndlYnNlcnZpY2V1dGlscyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjQiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkMDlkOWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotYmluCi1idWlsZC54bWwKLXRlbXAuZm9sZGVyCi13ZWJzZXJ2aWNldXRpbHMuamFyCi13c2MuamFyCi13ZWJzZXJ2aWNldXRpbHNzcmMuemlwCi13c2NzcmMuemlwCi1qYXZhQ29tcGlsZXIud2Vic2VydmljZXV0aWxzLmphci5hcmdzCi1qYXZhQ29tcGlsZXIud3NjLmphci5hcmdzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi8ucHJvamVjdCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzU4OTQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQyNmJlZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0jTW9uIEphbiAzMCAxMDozNTo1MSBFU1QgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxMzU1MDcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSNNb24gSmFuIDMwIDEwOjQxOjI1IEVTVCAyMDA2Ci1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0xCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0xCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjRkYWJhYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVQTFVHSU5fTkFNRQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMzAzLnF1YWxpZmllcgotQnVuZGxlLUNsYXNzUGF0aDogd3NjLmphciwKLSB3ZWJzZXJ2aWNldXRpbHMuamFyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24ucGx1Z2luLldlYlNlcnZpY2VDb25zdW1wdGlvblBsdWdpbgotQnVuZGxlLVZlbmRvcjogJVBMVUdJTl9QUk9WSURFUgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW47eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5iZWFuO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uamF2YW1vZnZpc2l0b3JhY3Rpb25zO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uamF2YW1vZnZpc2l0b3JzO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC52YWxpZGF0ZTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwud3NkbG1vZGVsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmZyYWdtZW50czt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5wbHVnaW47eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uc2FtcGxlYXBwLmNvZGVnZW47eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uc2FtcGxlYXBwLmNvbW1hbmQ7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uc2FtcGxlYXBwLmNvbW1vbjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi53c2ZpbmRlcjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy51dGlsCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuamVtO2J1bmRsZS12ZXJzaW9uPSJbMi4wLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZW0ud29ya2JlbmNoO2J1bmRsZS12ZXJzaW9uPSJbMi4wLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS5lbWYuY29tbW9uO2J1bmRsZS12ZXJzaW9uPSJbMi4yLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS5lbWYuZWNvcmU7YnVuZGxlLXZlcnNpb249IlsyLjIuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLmpkdC5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsMy40LjApIiwKLSBvcmcuZWNsaXBzZS54c2Q7YnVuZGxlLXZlcnNpb249IlsyLjIuMCwyLjQuMCkiLAotIG9yZy5lY2xpcHNlLmRlYnVnLmNvcmU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC53cztidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnY7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamVtLndvcmtiZW5jaDtidW5kbGUtdmVyc2lvbj0iWzIuMC4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamZhY2U7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53cztidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDAsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDIsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbDtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDIsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS5qc3QuajJlZS5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS5qc3QuajJlZS5lamI7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC5qMmVlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWI7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3JrcztidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gamF2YXgud3NkbDtidW5kbGUtdmVyc2lvbj0iWzEuNC4wLDEuNS4wKSIsCi0gb3JnLmVjbGlwc2UuamVtLnV0aWw7YnVuZGxlLXZlcnNpb249IlsyLjAuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQ7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAwLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDIsMS4xLjApIiwKLSBjb20uaWJtLmljdTtidW5kbGUtdmVyc2lvbj0iWzMuNC40LDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UudWk7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmVtZi5jb2RlZ2VuO2J1bmRsZS12ZXJzaW9uPSJbMi4yLjAsMy4wLjApIgotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vYWJvdXQuaHRtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGIzNmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vYnVpbGQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjNjBlOTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotIyAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyAyMDA3MDUwMSAgIDE4NDUwNSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotc291cmNlLndzYy5qYXIgPSBzcmMvCi1zb3VyY2Uud2Vic2VydmljZXV0aWxzLmphciA9IHdlYnNlcnZpY2V1dGlscy8KLWphcnMuY29tcGlsZS5vcmRlciA9IHdzYy5qYXIsXAotICAgICAgICAgICAgICAgICAgICAgd2Vic2VydmljZXV0aWxzLmphcgotYmluLmluY2x1ZGVzID0gcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICB3c2MuamFyLFwKLSAgICAgICAgICAgICAgIHdlYnNlcnZpY2V1dGlscy5qYXIsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwKLWphcnMuZXh0cmEuY2xhc3NwYXRoID0gLi4vamF2YXgueG1sLnNvYXAvbGliL3NhYWouamFyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9wbHVnaW4ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMmMxYmFjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jCi0jIE1lc3NhZ2VzIGluIHBsdWdpbi54bWwuCi0jCi1QTFVHSU5fTkFNRT1XZWIgU2VydmljZXMgQ29uc3VtcHRpb24KLVBMVUdJTl9QUk9WSURFUj1FY2xpcHNlLm9yZwotWFBfV1NGSU5ERVI9b3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLndzZmluZGVyCi1YUF9XRUJfU0VSVklDRV9TVEFSVF9TRVJWRVJfVFlQRT1XZWJTZXJ2aWNlU3RhcnRTZXJ2ZXJUeXBlCi1YUF9TRVJWRVJfREVGQVVMVEVSPVNlcnZlciBEZWZhdWx0ZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3BsdWdpbi54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjY0MGFhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotCi08cGx1Z2luPgotCi0gICA8IS0tIFRoZSBmb2xsb3dpbmcgZXh0ZW5zaW9uIHBvaW50IGlzIGludGVybmFsIGFuZCBsaWtlbHkgdG8gYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSByZWxlYXNlLiAtLT4KLSAgIDxleHRlbnNpb24tcG9pbnQKLSAgICAgIGlkPSJ3c2ZpbmRlciIKLSAgICAgIG5hbWU9IiVYUF9XU0ZJTkRFUiIvPgotCi0gICA8IS0tIFRoZSBmb2xsb3dpbmcgZXh0ZW5zaW9uIHBvaW50IGlzIGludGVybmFsIGFuZCBsaWtlbHkgdG8gYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSByZWxlYXNlLiAtLT4KLSAgIDxleHRlbnNpb24tcG9pbnQKLSAgICAgIGlkPSJ3ZWJTZXJ2aWNlU3RhcnRTZXJ2ZXJUeXBlIgotICAgICAgbmFtZT0iJVhQX1dFQl9TRVJWSUNFX1NUQVJUX1NFUlZFUl9UWVBFIi8+Ci0KLSAgIDwhLS0gVGhlIGZvbGxvd2luZyBleHRlbnNpb24gcG9pbnQgaXMgaW50ZXJuYWwgYW5kIGxpa2VseSB0byBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHJlbGVhc2UuIC0tPgotICAgPGV4dGVuc2lvbi1wb2ludAotICAgICAgaWQ9InNlcnZlckRlZmF1bHRlciIKLSAgICAgIG5hbWU9IiVYUF9TRVJWRVJfREVGQVVMVEVSIi8+Ci0KLSAgIAotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi53ZWJTZXJ2aWNlU3RhcnRTZXJ2ZXJUeXBlIj4KLSAgICAgIDx3ZWJTZXJ2aWNlU3RhcnRTZXJ2ZXJUeXBlCi0gICAgICAgICAgICBmYWN0b3J5SWQ9Im9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjMyIgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5TdGFydFRvbWNhdFNlcnZlciIKLSAgICAgICAgICAgIGlkPSJTRVJWRVJfSURfVE9NQ0FUMzJfTE9DQUwiPgotICAgICAgPC93ZWJTZXJ2aWNlU3RhcnRTZXJ2ZXJUeXBlPgotICAgICAgPHdlYlNlcnZpY2VTdGFydFNlcnZlclR5cGUKLSAgICAgICAgICAgIGZhY3RvcnlJZD0ib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNDAiCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uLlN0YXJ0VG9tY2F0U2VydmVyIgotICAgICAgICAgICAgaWQ9IlNFUlZFUl9JRF9UT01DQVQ0MF9MT0NBTCI+Ci0gICAgICA8L3dlYlNlcnZpY2VTdGFydFNlcnZlclR5cGU+Ci0gICAgICA8d2ViU2VydmljZVN0YXJ0U2VydmVyVHlwZQotICAgICAgICAgICAgZmFjdG9yeUlkPSJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC40MSIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb24uU3RhcnRUb21jYXRTZXJ2ZXIiCi0gICAgICAgICAgICBpZD0iU0VSVkVSX0lEX1RPTUNBVDQxX0xPQ0FMIj4KLSAgICAgIDwvd2ViU2VydmljZVN0YXJ0U2VydmVyVHlwZT4KLSAgICAgIDx3ZWJTZXJ2aWNlU3RhcnRTZXJ2ZXJUeXBlCi0gICAgICAgICAgICBmYWN0b3J5SWQ9Im9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjUwIgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5TdGFydFRvbWNhdFNlcnZlciIKLSAgICAgICAgICAgIGlkPSJTRVJWRVJfSURfVE9NQ0FUNTBfTE9DQUwiPgotICAgICAgPC93ZWJTZXJ2aWNlU3RhcnRTZXJ2ZXJUeXBlPgotICAgICAgPHdlYlNlcnZpY2VTdGFydFNlcnZlclR5cGUKLSAgICAgICAgICAgIGZhY3RvcnlJZD0ib3JnLmVjbGlwc2UuanN0LnNlcnZlci5nZXJvbmltby4xMCIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb24uU3RhcnRUb21jYXRTZXJ2ZXIiCi0gICAgICAgICAgICBpZD0iU0VSVkVSX0lEX0dFUk9OSU1PMTBfTE9DQUwiPgotICAgICAgIDwvd2ViU2VydmljZVN0YXJ0U2VydmVyVHlwZT4gCi0gICA8L2V4dGVuc2lvbj4KLSAgIAotCi08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vQ29uc3VtcHRpb24ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vQ29uc3VtcHRpb24ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGZhOTZkYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL0NvbnN1bXB0aW9uLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxOTUgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0jIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIDIwMDYwMjE3ICAgMTI2NzU3IHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotIyAyMDA2MDQwMSAgIDEyODgyNyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotIyAyMDA3MDUwOSAgIDE4MjI3NCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jCi0jIFNhbXBsZSBtZXNzYWdlcwotIwotTVNHX0VSUk9SX0pUU19QUk9YWV9IQVNfTk9fTUVUSE9EUz1JV0FCMDE3OUUgVW5hYmxlIHRvIGNyZWF0ZSBhIHNhbXBsZSB0byB0aGUgcHJveHkgYmVjYXVzZSB0aGUgcHJveHkgZG9lcyBub3QgY29udGFpbiBtZXRob2RzLgotTVNHX0VSUk9SX0pUU19QUk9YWV9IQVNfTk9fREVGQVVMVD1JV0FCMDE4MEUgVW5hYmxlIHRvIGNyZWF0ZSBhIHNhbXBsZSB0byB0aGUgcHJveHkgYmVjYXVzZSB0aGUgcHJveHkgaXMgbm90IGEgYmVhbiAoaS5lLi4gdGhlIHNhbXBsZSBkb2VzIG5vdCBoYXZlIHB1YmxpYyBkZWZhdWx0IGNvbnN0cnVjdG9yKS4KLU1TR19FUlJPUl9KVFNfTk9fUFJPWFlfTUVUSE9EU19QUk9DRVNTRUQ9SVdBQjAxODFFIFVuYWJsZSB0byBjcmVhdGUgYSBzYW1wbGUgdG8gdGhlIHByb3h5IGJlY2F1c2Ugbm9uZSBvZiB0aGUgbWV0aG9kcyBpbiB0aGUgcHJveHkgd2VyZSBwcm9jZXNzZWQuCi1NU0dfV0FSTl9KVFNfVU5TVVBQT1JURURfVFlQRT1JV0FCMDE4MlcgVGhlIFNhbXBsZSBKU1AgY2xpZW50IGRvZXMgbm90IHN1cHBvcnQgdGhlIGZvbGxvd2luZyB0eXBlOgotTVNHX1dBUk5fSlRTX1VOU1VQUE9SVEVEX0lOREVYRURfUFJPUEVSVElFUz1JV0FCMDE4N1cgVGhlIFNhbXBsZSBKU1AgY2xpZW50IGRvZXMgbm90IHN1cHBvcnQgSW5kZXhlZCBwcm9wZXJ0aWVzLgotTVNHX1dBUk5fSlRTX1VOU1VQUE9SVEVEX1BBUkFNRVRFUlNfQVJSQVlTPUlXQUIwMjM3VyBUaGUgU2FtcGxlIEpTUCBjbGllbnQgZG9lcyBub3Qgc3VwcG9ydCBhcnJheXM6Ci1NU0dfV0FSTl9KVFNfVU5TVVBQT1JURURfUEFSQU1FVEVSU19JTlBVVFM9SVdBQjAxMjRXIFRoZSBTYW1wbGUgSlNQIGNsaWVudCBkb2VzIG5vdCBzdXBwb3J0IGlucHV0IHBhcmFtZXRlcnMgdGhhdCBhcmUgbm90IGJlYW5zOgotTVNHX0VSUk9SX0pUU19DWUNMSUNfQkVBTj1JV0FCMDE4OEUgVGhlIFNhbXBsZSBKU1AgY2xpZW50IGRvZXMgbm90IHN1cHBvcnQgYmVhbnMgY29udGFpbmluZyBhdHRyaWJ1dGVzIHRoYXQgcmVmZXJlbmNlIHRoZSBiZWFucy4KLU1TR19XQVJOX0pUU19QUk9YWV9NRVRIT0RTX09NSVRURUQ9SVdBQjAxODlXIFRoZSBTYW1wbGUgSlNQIGNsaWVudCBvbWl0dGVkIHNvbWUgbWV0aG9kcyBiZWNhdXNlIHRoZXkgY29udGFpbmVkIHVuc3VwcG9ydGVkIHR5cGVzLgotTVNHX0VSUk9SX1NBTVBMRV9DUkVBVElPTl9DQU5DRUxFRD1JV0FCMDAyMUUgU2FtcGxlIGNyZWF0aW9uIHdhcyBjYW5jZWxlZAotTVNHX1dBUk5fVU5BQkxFX1RPX0ZJTkRfUFJPWFk9SVdBQjAwMjJXIFRoZSBQcm94eSBSZXNvdXJjZSBjb3VuZCBub3Qgbm90IGJlIGZvdW5kLgotTVNHX0VSUk9SX0pUU19KU1BfR0VOPUVycm9yIGluIGdlbmVyYXRpbmcgc2FtcGxlIEpTUAotCi0jIE5vdCB1c2VkCi0jTVNHX0VSUk9SX0NBTk5PVF9DUkVBVEVfQ09NUE9ORU5UPVRoZSBXZWIgc2VydmljZSB3aXphcmQgY2Fubm90IGF1dG9tYXRpY2FsbHkgY3JlYXRlIGNvbXBvbmVudCAiezB9Ii4gQ2FuY2VsIHRoZSB3aXphcmQgYW5kIGNyZWF0ZSB0aGUgY29tcG9uZW50IG1hbnVhbGx5LgotCi0KLSMKLSMgRmlsdGVycwotIwotRklMVEVSX01TR19FUlJPUl9OVUxMX09CSkVDVD1JV0FCMDA5N0UgTm8gb2JqZWN0IGhhcyBiZWVuIHByb3ZpZGVkLgotRklMVEVSX01TR19FUlJPUl9OT1RfRklMRT1JV0FCMDA5OEUgVGhlIG9iamVjdCAiezB9IiBpcyBub3QgYSBmaWxlLgotRklMVEVSX01TR19FUlJPUl9OT1RfRk9MREVSPUlXQUIwMTM3RSBUaGUgb2JqZWN0ICJ7MH0iIGlzIG5vdCBhIGZvbGRlci4KLQotSkFWQV9GSUxURVJfTkFNRT1KYXZhIGZpbGVzCi1KQVZBX0ZJTFRFUl9ERVNDPUZpbGVzIHdpdGggbmFtZXMgZW5kaW5nIGluICIuamF2YSIgb3IgIi5jbGFzcyIuCi1KQVZBX0ZJTFRFUl9NU0dfRVJST1JfV1JPTkdfRVhURU5TSU9OPUlXQUIwMTAyRSBUaGUgZmlsZSAiezB9IiBkb2VzIG5vdCBlbmQgaW4gIi5qYXZhIiBvciAiLmNsYXNzIi4KLQotV1NETF9GSUxURVJfTkFNRT1XU0RMIGZpbGVzCi1XU0RMX0ZJTFRFUl9ERVNDPUZpbGVzIHdpdGggbmFtZXMgZW5kaW5nIGluICIud3NkbCIuCi1XU0RMX0ZJTFRFUl9NU0dfRVJST1JfV1JPTkdfRVhURU5TSU9OPUlXQUIwMTAzRSBUaGUgZmlsZSAiezB9IiBkb2VzIG5vdCBlbmQgaW4gIi53c2RsIi4KLQotSVNEX0ZJTFRFUl9OQU1FPUlTRCBmaWxlcwotSVNEX0ZJTFRFUl9ERVNDPUZpbGVzIHdpdGggbmFtZXMgZW5kaW5nIGluICIuaXNkIi4KLUlTRF9GSUxURVJfTVNHX0VSUk9SX1dST05HX0VYVEVOU0lPTj1JV0FCMDA5NUUgVGhlIGZpbGUgInswfSIgZG9lcyBub3QgZW5kIGluICIuaXNkIi4KLQotUFJPUEVSVElFU19GSUxURVJfTkFNRT1Qcm9wZXJ0aWVzIGZpbGVzCi1QUk9QRVJUSUVTX0ZJTFRFUl9ERVNDPUZpbGVzIHdpdGggbmFtZXMgZW5kaW5nIGluICIucHJvcGVydGllcyIKLVBST1BFUlRJRVNfRklMVEVSX01TR19FUlJPUl9XUk9OR19FWFRFTlNJT049IFRoZSBmaWxlICJ7MH0iIGRvZXMgbm90IGVuZCBpbiAiLnByb3BlcnRpZXMiLgotCi1GT0xERVJfRklMVEVSX05BTUU9Rm9sZGVycwotRk9MREVSX0ZJTFRFUl9ERVNDPUZvbGRlcnMuCi0KLSMKLSMgRGVwbG95bWVudCBzdGF0dXMKLSMKLVBST0dSRVNTX0lORk9fQ09QWV9XRUJTRVJWSUNFX1VUSUxTPUlXQUIwMDIzSSBDb3B5aW5nIHRoZSB3ZWJzZXJ2aWNlIHV0aWxpdGllcy4KLVBST0dSRVNTX0lORk9fQ09QWUlOR19GSUxFPUlXQUIwMTk3SSBDb3B5aW5nIFNPQVAgcnVuLXRpbWUgZmlsZS4KLVBST0dSRVNTX0lORk9fU1RBUlRfV0VCX1BST0pFQ1Q9SVdBQjAxOThJIFN0YXJ0aW5nIFdlYiBwcm9qZWN0LgotUFJPR1JFU1NfSU5GT19QVUJMSVNISU5HX1NFUlZFUj1JV0FCMDE5OUkgUHVibGlzaGluZyBzZXJ2ZXIuCi1QUk9HUkVTU19JTkZPX1NUQVJUSU5HX1NFUlZFUj1JV0FCMDIwMEkgU3RhcnRpbmcgc2VydmVyLgotUFJPR1JFU1NfSU5GT19QVUJMSVNIX1dFQl9QUk9KRUNUPUlXQUIwMjA1SSBQdWJsaXNoaW5nIFdlYiBwcm9qZWN0LgotCi0KLSMKLSMgRGVwbG95bWVudCBtZXNzYWdlcwotIwotTVNHX0VSUk9SX1BST0pFQ1RfTk9UX0ZPVU5EPUlXQUIwMjA3RSBXZWIgcHJvamVjdCB3YXMgbm90IGZvdW5kLgotTVNHX0VSUk9SX0ZJTEVDT1BZX1dFQlNFUlZJQ0VfVVRJTFM9SVdBQjAwMjRFIEVycm9yIGluIGNvcHlpbmcgV2Vic2VydmljZSBVdGlsaXR5IGZpbGUuCi1NU0dfRVJST1JfSU5TVEFOQ0VfTk9UX0ZPVU5EPUlXQUIwMjEyRSBTZXJ2ZXIgd2FzIG5vdCBmb3VuZC4KLU1TR19FUlJPUl9TRVJWRVI9SVdBQjAyMTNFIEVycm9yIGluIHN0YXJ0aW5nIHNlcnZlci4KLU1TR19FUlJPUl9QVUJMSVNIPUlXQUIwMjE3RSBFcnJvciBpbiBwdWJsaXNoaW5nIFdlYiBwcm9qZWN0LgotTVNHX0VSUk9SX0FERF9NT0RVTEU9RXJyb3Igb2NjdXJlZCB3aGVuIGFkZGluZyB0aGUgbW9kdWxlLCB7MH0sIHRvIHRoZSBzZXJ2ZXIKLQotTVNHX0VSUk9SX0NSRUFURV9TRVJWRVI9SVdBQjAwMjVFIFVuYWJsZSB0byBjcmVhdGUgc2VydmVyLgotTVNHX0VSUk9SX1NUVUJfT05MWT1VbmFibGUgdG8gY3JlYXRlIHNlcnZlciBiZWNhdXNlIG9ubHkgc3R1YiBydW50aW1lcyBhcmUgYXZhaWxhYmxlIGZvciB0aGUgezB9IHNlcnZlciB0eXBlLiBHbyB0byBXaW5kb3cgPiBQcmVmZXJlbmNlcy4gU2VsZWN0IFNlcnZlciA+IEluc3RhbGxlZCBSdW50aW1lcyB0byBpbnN0YWxsIGEgbm9uLXN0dWIgcnVudGltZS4KLQotIwotIyBFSkIgbWVzc2FnZXMKLSMgNCB1bnVzZWQgbWVzc2FnZXMgaW4ganN0LndzIGFuZCB3c3Qud3MKLVRBU0tfTEFCRUxfQ1JFQVRFX0VKQl9QUk9KRUNUPUNyZWF0ZUVKQlByb2plY3RUYXNrCi1UQVNLX0RFU0NfQ1JFQVRFX0VKQl9QUk9KRUNUPUNyZWF0ZSBhbiBFSkIgUHJvamVjdC4KLU1TR19FUlJPUl9DQU5OT1RfQ1JFQVRFX0VKQl9QUk9KRUNUPUlXQUIwNDMyRSBVbmFibGUgdG8gY3JlYXRlIEVKQiBwcm9qZWN0LgotTVNHX0VSUk9SX0NBTk5PVF9DUkVBVEVfQVBQX0NMSUVOVF9QUk9KRUNUPUlXQUIwMDI2RSBVbmFibGUgdG8gY3JlYXRlIGFwcGxpY2F0aW9uIGNsaWVudCBwcm9qZWN0IHswfS4KLQotTVNHX0VSUk9SX0NBTk5PVF9DUkVBVEVfSkFWQV9QUk9KRUNUPUlXQUIwMDI3RSBVbmFibGUgdG8gY3JlYXRlIEphdmEgcHJvamVjdCB7MH0uCi1NU0dfRVJST1JfQ0FOTk9UX0NSRUFURV9FQVJfUFJPSkVDVD1JV0FCMDA2MkUgVW5hYmxlIHRvIGNyZWF0ZSBFQVIgcHJvamVjdCB7MH0uCi0KLSMKLSMgVmFsaWRhdG9yIHRhc2sgZGVzY3JpcHRpb25zCi0jCi1UQVNLX0xBQkVMX1dFQlNFUlZJQ0VfRElTQUJMRV9WQUxJREFUSU9OPURpc2FibGUgdmFsaWRhdG9ycy4KLVRBU0tfREVTQ19XRUJTRVJWSUNFX0RJU0FCTEVfVkFMSURBVElPTj1UZW1wb3JhcmlseSBkaXNhYmxpbmcgdmFsaWRhdG9ycy4KLVRBU0tfTEFCRUxfV0VCU0VSVklDRV9SRVNUT1JFX1ZBTElEQVRJT049UmVzdG9yZSB2YWxpZGF0b3JzLgotVEFTS19ERVNDX1dFQlNFUlZJQ0VfUkVTVE9SRV9WQUxJREFUSU9OPVJlc3RvcmluZyBzdGF0ZXMgb2YgdmFsaWRhdG9ycy4KLVRBU0tfTEFCRUxfV0VCU0VSVklDRV9ESVNBQkxFX0JVSUxEPURpc2FibGUgYXV0byBidWlsZC4KLVRBU0tfREVTQ19XRUJTRVJWSUNFX0RJU0FCTEVfQlVJTEQ9VGVtcG9yYXJpbHkgZGlzYWJsaW5nIGF1dG8gYnVpbGQuCi1UQVNLX0xBQkVMX1dFQlNFUlZJQ0VfUkVTVE9SRV9CVUlMRD1SZXN0b3JlIGF1dG8gYnVpbGQuCi1UQVNLX0RFU0NfV0VCU0VSVklDRV9SRVNUT1JFX0JVSUxEPVJlc3RvcmluZyBzdGF0ZSBvZiBhdXRvIGJ1aWxkLgotCi0jCi0jIE1JU0MKLSMKLU1TR19FUlJPUl9XRUJfUFJPSkVDVF9DUkVBVEU9SVdBQjAzMTBFIEFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBjcmVhdGlvbiBvZiB0aGUgV2ViIFByb2plY3QuCi0KLSMKLSMgQ2hlY2tQcm9qZWN0T0tDb21tYW5kCi0jCi1NU0dfRVJST1JfU0VSVkVSX1ZJRVdfT1BFTj1JV0FCMDEyNkUgVGhlIHNlcnZlciBjb25maWd1cmF0aW9uIGVkaXRvciBpcyBvcGVuIGZvciB7MH0uICBDbG9zZSBpdCBhbmQgcmVzdGFydCB0aGUgd2l6YXJkLgotCi0KLSMKLSMJRGV0ZWN0Tm9uSmF2YUNoYXJzQ29tbWFuZAotIwotTVNHX1dBUk5fSkFWQV9NRVRIT0RfU1RBUlRfV0lUSF9VUFBFUl9DQVNFPUlXQUIwMTI5VyBKYXZhIG1ldGhvZCB7MH0gaW4gY2xhc3MgezF9IHN0YXJ0cyB3aXRoIGFuIHVwcGVyIGNhc2UgbGV0dGVyLiBNZXRob2QgbmFtZXMgc2hvdWxkIGJlZ2luIHdpdGggbG93ZXIgY2FzZSBsZXR0ZXJzLgotTVNHX1dBUk5fTUVUSE9EX05BTUVfSU5WQUxJRD1JV0FCMDEzMVcgSmF2YSBtZXRob2QgezB9IG5hbWUgY29udGFpbnMgdW5kZXJzY29yZSBvciBudW1lcmljIGRpZ2l0cyBmb2xsb3dlZCBieSBhIGxvd2VyIGNhc2UgbGV0dGVyLlwKLU1ldGhvZCBuYW1lcyBzaG91bGQgbm90IGNvbnRhaW4gbG93ZXIgY2FzZSBsZXR0ZXJzIGFmdGVyIGEgbnVtZXJpYyBvciB1bmRlcnNjb3JlLgotTVNHX1dBUk5fQk9PTEVBTl9QUk9QRVJUWV9BQ0NFU1NPUlM9SVdBQjAxMzJXIEJvb2xlYW4gcHJvcGVydHkgYWNjZXNzb3IgezB9IGluIGJlYW4gezF9IGJlZ2lucyB3aXRoICJnZXQiLiBCb29sZWFuIGdldHRlciBtZXRob2RzIHNob3VsZCBiZWdpbiB3dGggImlzIi4KLU1TR19XQVJOX1BBQ0tBR0VfTkFNRV9IQVNfVVBQRVJfQ0FTRT1JV0FCMDEzM1cgVGhlIHBhY2thZ2UgbmFtZSB7MH0gb2YgY2xhc3MgezF9IGluY2x1ZGVzIHVwcGVyIGNhc2UgbGV0dGVycy4gUGFja2FnZSBuYW1lcyBzaG91bGQgY29uc2lzdCBvZiBsb3dlciBjYXNlIGxldHRlcnMgb25seS4KLQotV0FSTl9CRUFOX05BTUVfU1RBUlRTX1dJVEhfTE9XRVJfQ0FTRQotCi0jCi0jIEphdmFUb01vZGVsQ29tbWFuZAotIwotTEFCRUxfT0s9T0sKLURFU0NSSVBUSU9OX09LPVNlbGVjdCBPSyB0byBjb250aW51ZQotCi1MQUJFTF9DQU5DRUw9Q2FuY2VsCi1ERVNDUklQVElPTl9DQU5DRUw9U2VsZWN0IENhbmNlbCB0byBjYW5jZWwKLQotIwotIyBDcmVhdGVNb25pdG9yQ29tbWFuZAotIwotTVNHX0VSUk9SX1VOQUJMRV9UT19TVEFSVF9NT05JVE9SPUlXQUIwMDAxRSBVbmFibGUgdG8gbW9uaXRvciBwb3J0IHswfSBvZiB7MX0uCi1NU0dfSU5GT19NT05JVE9SSU5HX05PVF9TVVBQT1JURUQ9SVdBQjAwMDJJIHswfSBkb2VzIG5vdCBzdXBwb3J0IHBvcnQgbW9uaXRvcmluZy4KLQotIwotIyBDb3B5V1NETENvbW1hbmQKLSMKLUNPTU1BTkRfTEFCRUxfQ09QWV9XU0RMPUNvcHlpbmcgV1NETAotQ09NTUFORF9ERVNDX0NPUFlfV1NETD1Db3B5aW5nIFdTREwgaW50byB0aGUgd29ya3NwYWNlIGZvciBXZWIgc2VydmljZSBkZXBsb3ltZW50Ci1NU0dfRVJST1JfQ09QWV9XU0RMPUlXQUIwMDI4RSBGYWlsZWQgdG8gY29weSBXU0RMIHswfSB0byB7MX0KLQotIwotIyBBc3NvY2lhdGVNb2R1bGVXaXRoRUFSQ29tbWFuZAotIwotTVNHX0VSUk9SX1VOQUJMRV9UT19BU1NPQ0lBVEU9VW5hYmxlIHRvIGFzc29jaWF0ZSBjb21wb25lbnQgezB9IHRvIGVhciBjb21wb25lbnQgezF9LgotCi0jCi0jIENyZWF0ZU1vZHVsZUNvbW1hbmQKLSMKLU1TR19FUlJPUl9DUkVBVEVfRkxFWF9QUk9KRVQ9QW4gZXJyb3Igb2NjdXJlZCBkdXJpbmcgY3JlYXRpb24gb2YgZmxleGlibGUgcHJvamVjdCB7MH0uCi1NU0dfRVJST1JfQ1JFQVRFX0VKQl9DT01QT05FTlQ9QW4gZXJyb3Igb2NjdXJlZCBkdXJpbmcgY3JlYXRpb24gb2YgRUpCIGNvbXBvbmVudCB7MH0uCi1NU0dfRVJST1JfQ1JFQVRFX0FQUENMSUVOVF9DT01QT05FTlQ9QW4gZXJyb3Igb2NjdXJlZCBkdXJpbmcgY3JlYXRpb24gb2YgQXBwbGljYXRpb24gQ2xpZW50IGNvbXBvbmVudCB7MH0uCi1NU0dfRVJST1JfQ09NUE9ORU5UX0NSRUFUSU9OPVVuYWJsZSB0byBjcmVhdGUgcHJvamVjdCB7MH0gYW5kL29yIGNvbXBvbmVudCB7MX0uCi0KLQotIwotIyBDcmVhdGVGYWNldGVkUHJvamVjdENvbW1hbmQKLSMKLU1TR19FUlJPUl9QUk9KRUNUX0NSRUFUSU9OPVVuYWJsZSB0byBjcmVhdGUgcHJvamVjdCB7MH0uCi0KLQotIwotIyBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQKLSMKLU1TR19FUlJPUl9QUk9KRUNUX0RPRVNfTk9UX0VYSVNUPVRoZSBwcm9qZWN0IHswfSBkb2VzIG5vdCBleGlzdC4KLU1TR19FUlJPUl9QUk9KRUNUX0lTX05PVF9PUEVOPVRoZSBwcm9qZWN0IHswfSBpcyBub3Qgb3Blbi4KLQotIwotIyBTUEVDSUFMIE5PVEUgVE8gVFJBTlNMQVRPUlM6IFN1YnN0aXR1dGlvbiB7MX0gaW4gTVNHX0VSUk9SX0FERElOR19GQUNFVFNfVE9fUFJPSkVDVCBhbmQKLSMgTVNHX0VSUk9SX0ZJWEVEX0ZBQ0VUUyB3aWxsIGJlIGEgZGVsaW1pdGVkIGxpc3Qgb2YgdHJhbnNsYXRlZCBsYWJlbHMuIFRoZSBsaXN0IGlzIGZvcm1lZCAKLSMgdGhyb3VnaCByZXBlYXRlZCB1c2Ugb2YgTVNHX0ZBQ0VUUy4KLSMKLU1TR19FUlJPUl9BRERJTkdfRkFDRVRTX1RPX1BST0pFQ1Q9VW5hYmxlIHRvIGFkZCB0aGUgZm9sbHdpbmcgZmFjZXRzIHRvIHByb2plY3QgezB9OiB7MX0uCi1NU0dfRVJST1JfRklYRURfRkFDRVRTPVVuYWJsZSB0byBzZXQgdGhlIGZvbGxvd2luZyBmYWNldHMgYXMgZml4ZWQgb24gcHJvamVjdCB7MH06IHsxfS4KLU1TR19GQUNFVFM9ezB9LCB7MX0KLQotTVNHX0VSUk9SX1NFVFRJTkdfUlVOVElNRT1VbmFibGUgdG8gYmluZCBwcm9qZWN0IHswfSB0byB0aGUgezF9IHJ1bnRpbWUuCi0KLSMKLSMgU2tlbGV0b24gTWVyZ2UgTWVzc2FnZXMKLSMKLU1TR19FUlJPUl9GSUxFX01FUkdFPUVycm9yIGluIG1lcmdpbmcgZmlsZSB7MH0uCi1NU0dfRVJST1JfRklMRV9NRVJHRV9MT0FEPUVycm9yIGluIGxvYWRpbmcgZmlsZSB7MH0gZm9yIG1lcmdlLiAKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vQ29uc3VtcHRpb25NZXNzYWdlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9Db25zdW1wdGlvbk1lc3NhZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1ODhiYmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9Db25zdW1wdGlvbk1lc3NhZ2VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjE3ICAgMTI2NzU3IHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA0MDEgICAxMjg4Mjcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotCi1wdWJsaWMgZmluYWwgY2xhc3MgQ29uc3VtcHRpb25NZXNzYWdlcyBleHRlbmRzIE5MUyB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSAib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLkNvbnN1bXB0aW9uIjsvLyROT04tTkxTLTEkCi0KLQlwcml2YXRlIENvbnN1bXB0aW9uTWVzc2FnZXMoKSB7Ci0JCS8vIERvIG5vdCBpbnN0YW50aWF0ZQotCX0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9KVFNfUFJPWFlfSEFTX05PX01FVEhPRFM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0pUU19QUk9YWV9IQVNfTk9fREVGQVVMVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfSlRTX05PX1BST1hZX01FVEhPRFNfUFJPQ0VTU0VEOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19XQVJOX0pUU19VTlNVUFBPUlRFRF9UWVBFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19XQVJOX0pUU19VTlNVUFBPUlRFRF9JTkRFWEVEX1BST1BFUlRJRVM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX1dBUk5fSlRTX1VOU1VQUE9SVEVEX1BBUkFNRVRFUlNfQVJSQVlTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19XQVJOX0pUU19VTlNVUFBPUlRFRF9QQVJBTUVURVJTX0lOUFVUUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfSlRTX0NZQ0xJQ19CRUFOOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19XQVJOX0pUU19QUk9YWV9NRVRIT0RTX09NSVRURUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1NBTVBMRV9DUkVBVElPTl9DQU5DRUxFRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfV0FSTl9VTkFCTEVfVE9fRklORF9QUk9YWTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfSlRTX0pTUF9HRU47Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgRklMVEVSX01TR19FUlJPUl9OVUxMX09CSkVDVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBGSUxURVJfTVNHX0VSUk9SX05PVF9GSUxFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEZJTFRFUl9NU0dfRVJST1JfTk9UX0ZPTERFUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBKQVZBX0ZJTFRFUl9OQU1FOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEpBVkFfRklMVEVSX0RFU0M7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSkFWQV9GSUxURVJfTVNHX0VSUk9SX1dST05HX0VYVEVOU0lPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMX0ZJTFRFUl9OQU1FOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfRklMVEVSX0RFU0M7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9GSUxURVJfTVNHX0VSUk9SX1dST05HX0VYVEVOU0lPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJU0RfRklMVEVSX05BTUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSVNEX0ZJTFRFUl9ERVNDOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElTRF9GSUxURVJfTVNHX0VSUk9SX1dST05HX0VYVEVOU0lPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQUk9QRVJUSUVTX0ZJTFRFUl9OQU1FOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBST1BFUlRJRVNfRklMVEVSX0RFU0M7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUFJPUEVSVElFU19GSUxURVJfTVNHX0VSUk9SX1dST05HX0VYVEVOU0lPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBGT0xERVJfRklMVEVSX05BTUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgRk9MREVSX0ZJTFRFUl9ERVNDOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBST0dSRVNTX0lORk9fQ09QWV9XRUJTRVJWSUNFX1VUSUxTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBST0dSRVNTX0lORk9fQ09QWUlOR19GSUxFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBST0dSRVNTX0lORk9fU1RBUlRfV0VCX1BST0pFQ1Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUFJPR1JFU1NfSU5GT19QVUJMSVNISU5HX1NFUlZFUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQUk9HUkVTU19JTkZPX1NUQVJUSU5HX1NFUlZFUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQUk9HUkVTU19JTkZPX1BVQkxJU0hfV0VCX1BST0pFQ1Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1BST0pFQ1RfTk9UX0ZPVU5EOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9GSUxFQ09QWV9XRUJTRVJWSUNFX1VUSUxTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9JTlNUQU5DRV9OT1RfRk9VTkQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1NFUlZFUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfUFVCTElTSDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfQUREX01PRFVMRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfQ1JFQVRFX1NFUlZFUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfU1RVQl9PTkxZOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRBU0tfTEFCRUxfQ1JFQVRFX0VKQl9QUk9KRUNUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRBU0tfREVTQ19DUkVBVEVfRUpCX1BST0pFQ1Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0NBTk5PVF9DUkVBVEVfRUpCX1BST0pFQ1Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0NBTk5PVF9DUkVBVEVfQVBQX0NMSUVOVF9QUk9KRUNUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9DQU5OT1RfQ1JFQVRFX0pBVkFfUFJPSkVDVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfQ0FOTk9UX0NSRUFURV9FQVJfUFJPSkVDVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUQVNLX0xBQkVMX1dFQlNFUlZJQ0VfRElTQUJMRV9WQUxJREFUSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRBU0tfREVTQ19XRUJTRVJWSUNFX0RJU0FCTEVfVkFMSURBVElPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUQVNLX0xBQkVMX1dFQlNFUlZJQ0VfUkVTVE9SRV9WQUxJREFUSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRBU0tfREVTQ19XRUJTRVJWSUNFX1JFU1RPUkVfVkFMSURBVElPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUQVNLX0xBQkVMX1dFQlNFUlZJQ0VfRElTQUJMRV9CVUlMRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUQVNLX0RFU0NfV0VCU0VSVklDRV9ESVNBQkxFX0JVSUxEOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRBU0tfTEFCRUxfV0VCU0VSVklDRV9SRVNUT1JFX0JVSUxEOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRBU0tfREVTQ19XRUJTRVJWSUNFX1JFU1RPUkVfQlVJTEQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1dFQl9QUk9KRUNUX0NSRUFURTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfU0VSVkVSX1ZJRVdfT1BFTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfV0FSTl9KQVZBX01FVEhPRF9TVEFSVF9XSVRIX1VQUEVSX0NBU0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX1dBUk5fTUVUSE9EX05BTUVfSU5WQUxJRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfV0FSTl9CT09MRUFOX1BST1BFUlRZX0FDQ0VTU09SUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfV0FSTl9QQUNLQUdFX05BTUVfSEFTX1VQUEVSX0NBU0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV0FSTl9CRUFOX05BTUVfU1RBUlRTX1dJVEhfTE9XRVJfQ0FTRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9PSzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBERVNDUklQVElPTl9PSzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9DQU5DRUw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgREVTQ1JJUFRJT05fQ0FOQ0VMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9VTkFCTEVfVE9fU1RBUlRfTU9OSVRPUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfSU5GT19NT05JVE9SSU5HX05PVF9TVVBQT1JURUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQ09NTUFORF9MQUJFTF9DT1BZX1dTREw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQ09NTUFORF9ERVNDX0NPUFlfV1NETDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfQ09QWV9XU0RMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9VTkFCTEVfVE9fQVNTT0NJQVRFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9DUkVBVEVfRkxFWF9QUk9KRVQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0NSRUFURV9FSkJfQ09NUE9ORU5UOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9DUkVBVEVfQVBQQ0xJRU5UX0NPTVBPTkVOVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfQ09NUE9ORU5UX0NSRUFUSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9QUk9KRUNUX0NSRUFUSU9OOwotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9QUk9KRUNUX0RPRVNfTk9UX0VYSVNUOwotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9QUk9KRUNUX0lTX05PVF9PUEVOOwotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9BRERJTkdfRkFDRVRTX1RPX1BST0pFQ1Q7Ci0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0ZJWEVEX0ZBQ0VUUzsKLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRkFDRVRTOwotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9TRVRUSU5HX1JVTlRJTUU7Ci0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0ZJTEVfTUVSR0VfTE9BRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfRklMRV9NRVJHRTsKLSAgICAKLQotCXN0YXRpYyB7Ci0JCU5MUy5pbml0aWFsaXplTWVzc2FnZXMoQlVORExFX05BTUUsIENvbnN1bXB0aW9uTWVzc2FnZXMuY2xhc3MpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9HZW5lcmF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9HZW5lcmF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGEyNzc0Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vR2VuZXJhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDgxMSAgIDE1MzQ4MiBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotCi0KLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSBnZW5lcmF0b3IuCi0qICovCi1wdWJsaWMgY2xhc3MgR2VuZXJhdG9yIGltcGxlbWVudHMgVmlzaXRvckFjdGlvbgotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0KLSAgLyoqCi0gICogVGhlIFN0cmluZ0J1ZmZlciB0aGF0IGhvbGRzIHRoZSBjb2RlZ2VuIAotICAqICovCi0gIHByb3RlY3RlZCBTdHJpbmdCdWZmZXIgZmJ1ZmZlcjsgCi0KLSAgLyoqCi0gICogVGhlIFZpc2l0b3IgdGhhdCBjYWxscyB0aGUgdmlzaXQgbWV0aG9kIAotICAqICovCi0gIHByb3RlY3RlZCBWaXNpdG9yIGZWaXNpdG9yOyAKLQotICAvKioKLSAgKiBWZWN0b3IgdGhhdCBob2xkcyBzdGF0ZSBkYXRhIGZvciB0aGlzICBnZW5lcmF0b3IgCi0gICogKi8KLSAgcHJvdGVjdGVkIFZlY3RvciBmUmVzaWRlbnRWZWN0b3I7Ci0gCi0gIC8qCi0gICogVGhpcyBpbnQgaG9sZHMgdGhlIGN1cnJlbnQgbnVtYmVyIAotICAqLwotICBwcm90ZWN0ZWQgaW50IGZVbmlxdWVOdW1iZXIgPTA7Ci0gCi0KLSAgcHJvdGVjdGVkIFN0cmluZyBmQ2xpZW50Rm9sZGVyUGF0aDsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGQUNUT1JZID0gIkZhY3RvcnkiOyAKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUQUIgPSAiICAgICI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERPVUJMRV9UQUIgPSAiICAgICAgICAiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTUEFDRSA9ICIgIjsKLSAgCi0gIC8qKgotICAqIENvbnN0cnVjdG9yLgotICAqIAotICAqLwotICBwdWJsaWMgR2VuZXJhdG9yICgpCi0gIHsKLSAgICAgIGZidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICBmUmVzaWRlbnRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7IAotICAgIAotICB9Ci0KLSAgLyoqCi0gICogQ29uc3RydWN0b3IuCi0gICogQHBhcmFtIFN0cmluZ0J1ZmZlciBUYWtlcyB0aGUgYnVmZmVyIGl0IHdpbGwgd3JpdGUgY29kZSB0bwotICAqLwotICBwdWJsaWMgR2VuZXJhdG9yIChTdHJpbmdCdWZmZXIgYnVmZmVyKQotICB7Ci0gICAgICBmYnVmZmVyID0gYnVmZmVyOwotICAgICAgZlJlc2lkZW50VmVjdG9yID0gbmV3IFZlY3RvcigpOyAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgaW5pdGlhbGl6ZShTdHJpbmcgcmVzaWRlbnQpCi0gIHsKLSAgICAvL25vdGhpbmcgdG8gYmUgZG9uZSBidXQgbXVzdCBiZSBpbXBsZW1lbnRlZAotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldENsaWVudEZvbGRlclBhdGgoKQotICB7Ci0gICAgcmV0dXJuIGZDbGllbnRGb2xkZXJQYXRoOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50Rm9sZGVyUGF0aChTdHJpbmcgZkNsaWVudEZvbGRlclBhdGhfKQotICB7Ci0gICAgZkNsaWVudEZvbGRlclBhdGggPSBmQ2xpZW50Rm9sZGVyUGF0aF87Ci0gIH0KLQotICBwcm90ZWN0ZWQgU3RyaW5nIHNlcnZpY2VOYW1lID0gIiI7Ci0gIHByb3RlY3RlZCBTdHJpbmcgcG9ydE5hbWUgPSAiIjsKLSAgcHJvdGVjdGVkIFN0cmluZyBwYWNrYWdlTmFtZSA9ICIiOwotICBwcm90ZWN0ZWQgU3RyaW5nIHByb3h5QmFzZU5hbWUgPSAiIjsKLQotICBwdWJsaWMgdm9pZCBzZXRJbmZvKFN0cmluZyBzZXJ2aWNlLCBTdHJpbmcgcG9ydCwgU3RyaW5nIHBhY2thZ2VOYW1lLCBTdHJpbmcgcHJveHlCYXNlKQotICB7Ci0gICAgc2VydmljZU5hbWUgPSBzZXJ2aWNlOwotICAgIHBvcnROYW1lID0gcG9ydDsKLSAgICB0aGlzLnBhY2thZ2VOYW1lID0gcGFja2FnZU5hbWU7IAotICAgIHByb3h5QmFzZU5hbWUgPSBwcm94eUJhc2U7ICAKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXIgVU5ERVJTQ09SRSA9ICdfJzsKLSAgcHVibGljIFN0cmluZyBnZXRTZXNzaW9uQmVhbklkKCkKLSAgewotICAgIFN0cmluZyBuYW1lID0gZ2V0Q2xpZW50Rm9sZGVyUGF0aCgpOwotICAgIGludCBpbmRleCA9IG5hbWUubGFzdEluZGV4T2YoIi8iKTsKLSAgICBpbmRleCsrOwotICAgIFN0cmluZ0J1ZmZlciBuZXdOYW1lID0gbmV3IFN0cmluZ0J1ZmZlcihuYW1lLnN1YnN0cmluZyhpbmRleCkpOwotICAgIAotICAgIC8vV2UgbmVlZCB0byBtYWtlIHRoaXMgYSB2YWxpZCBqYXZhIGlkZW50aWZpZXIKLSAgICAvL1RvIGRvIHRoaXMgd2Ugd2lsbCByZXBsYWNlIGFueSBjaGFyYWN0ZXIgdGhhdCBpcyBub3QgdmFsaWQgd2l0aCBhbiB1bmRlcnNjb3JlCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuZXdOYW1lLmxlbmd0aCgpOyBpKyspCi0gICAgewotICAgIAljaGFyIGMgPSBuZXdOYW1lLmNoYXJBdChpKTsKLSAgICAJaWYgKGkgPT0gMCAmJiAhQ2hhcmFjdGVyLmlzSmF2YUlkZW50aWZpZXJTdGFydChjKSB8fCAhQ2hhcmFjdGVyLmlzSmF2YUlkZW50aWZpZXJQYXJ0KGMpKQotICAgIAl7Ci0gICAgCQluZXdOYW1lLnNldENoYXJBdChpLFVOREVSU0NPUkUpOwotICAgIAl9Ci0gICAgfQotICAgIHJldHVybiBuZXdOYW1lICsgImlkIjsKLSAgfQotCi0gIC8qCi0gICogVGhlIE51bWJlciBGYWN0b3J5IGlzIGhlcmUgZm9yIG5hbWluZyBwdXJwb3Nlcy4gSW4gCi0gICogdGhpcyB3YXkgd2UgaW5zdXJlIG5vIG5hbWVzIHdlIGNyZWF0ZSBpbiBhIHBpZWNlIG9mCi0gICogY29kZSBnZW4gYXJlIHRoZSBzYW1lLiBXZSBrZWVwIHRyYWNrIG9mIHRoZSBudW1iZXJzCi0gICogdXNlZCBhbmQgd2UgaGFuZCBiYWNrIHRoZSBuZXh0IG9uZS4gTGlrZSB0YWtlIGEgbnVtYmVyIAotICAqIGJ1ZGR5Ci0gICogQHBhcmFtIGludCBudW1iZXIgd2UgYXJlIGF0IGFzIHRoZSBzdGF0ZSBkYXRhIGhhcyB0byBiZSBzZXR0YWJsZQotICAqLwotICBwdWJsaWMgdm9pZCBzZXROdW1iZXJGYWN0b3J5KGludCBudW1iZXIpCi0gIHsKLSAgICAgZlVuaXF1ZU51bWJlciA9IG51bWJlcjsKLSAgfQotCi0KLSAgLyoKLSAgKiBUaGlzIGlzIGEgdW5pcXVlIG51bWJlciBmb3Igc3RhdGUgcHVycG9zZXMKLSAgKiBAcmV0dXJuIGludCAKLSAgKi8KLSAgcHVibGljIGludCBnZXROdW1iZXJGYWN0b3J5KCkKLSAgewotICAgICByZXR1cm4gZlVuaXF1ZU51bWJlcjsgCi0gIH0KLSAgLyoKLSAgKiBUaGlzIGlzIGEgdW5pcXVlIG51bWJlciBmb3IgbmFtaW5nIHB1cnBvc2VzCi0gICogQHJldHVybiBpbnQgCi0gICovCi0gIHB1YmxpYyBpbnQgZ2V0VW5pcXVlTnVtYmVyKCkKLSAgewotICAgICByZXR1cm4gZlVuaXF1ZU51bWJlcisrOwotICB9Ci0KLQotICAvKioKLSAgKiByZXR1cm5zIHRoZSBjdXJyZW50IFN0cmluZ0J1ZmZlcgotICAqIEByZXR1cm4gU3RyaW5nQnVmZmVyIFRha2VzIHRoZSBidWZmZXIgaXQgd2lsbCB3cml0ZSBjb2RlIHRvbwotICAqLwotICBwdWJsaWMgU3RyaW5nQnVmZmVyIGdldFN0cmluZ0J1ZmZlciAoKQotICB7Ci0gICAgICByZXR1cm4gZmJ1ZmZlcjsKLSAgfQotCi0gIAotICAvKioKLSAgKiByZXR1cm5zIHRoZSBWaXNpdG9yIHRoYXQgY2FsbGVkIHRoaXMgZ2VuZXJhdG9yCi0gICogQHJldHVybiBWaXNpdG9yIAotICAqLwotICBwdWJsaWMgVmlzaXRvciBnZXRWaXNpdG9yICgpCi0gIHsKLSAgICAgIHJldHVybiBmVmlzaXRvcjsKLSAgfQotICAKLQotCi0KLSAgLyoqCi0gICogdmVjdG9yIHVzZWQgdG8gaG9sZCBzdGF0ZSBkYXRhIAotICAqIEBwYXJhbWV0ZXIgVmlzaXRvciAKLSAgKi8KLSAgcHVibGljIHZvaWQgcHV0UmVzaWRlbnRWZWN0b3IgKE9iamVjdCBvYmplY3QpCi0gIHsKLSAgICAgIGZSZXNpZGVudFZlY3Rvci5hZGRFbGVtZW50KG9iamVjdCk7Ci0gIH0KLSAgCi0KLSAgLyoqCi0gICogdmVjdG9yIHVzZWQgdG8gaG9sZCBzdGF0ZSBkYXRhIAotICAqIEBwYXJhbWV0ZXIgVmlzaXRvciAKLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0UmVzaWRlbnRWZWN0b3IgKFZlY3RvciB2ZWN0b3IpCi0gIHsKLSAgICAgIGZSZXNpZGVudFZlY3RvciA9IHZlY3RvcjsKLSAgfQotICAKLQotICAvKioKLSAgKiByZXR1cm5zIHRoZSByZXNpZGVudCB2ZWN0b3IKLSAgKiBAcmV0dXJuIFZpc2l0b3IgCi0gICovCi0gIHB1YmxpYyBWZWN0b3IgZ2V0UmVzaWRlbnRWZWN0b3IgKCkKLSAgewotICAgICAgcmV0dXJuIGZSZXNpZGVudFZlY3RvcjsKLSAgfQotICAKLQotICAvKioKLSAgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSBhbnkgc3RhdGUgYSBnZW5lcmF0b3IgbWF5IGhhdmUKLSAgKgotICAqKi8KLQotICBwdWJsaWMgdm9pZCBpbml0aWFsaXplKCkKLSAgewotICAgICAvL3RvIGJlIGltcGxlbWVudGVkIGluIHN1Ymxhc3NlcwotICB9Ci0KLQotICAgLyoqCi0gICogc2V0cyB0aGUgdmlzaXRvciB0aGF0IGNhbGxzIHRoZSB2aXNpdAotICAqIEBwYXJhbWV0ZXIgVmlzaXRvciAKLSAgKi8KLQotICBwdWJsaWMgdm9pZCBzZXRWaXNpdG9yKFZpc2l0b3IgdmlzaXRvcikKLSAgewotICAgICAgZlZpc2l0b3IgPSB2aXNpdG9yOwotICB9Ci0KLQotICBwdWJsaWMgSVN0YXR1cyB2aXNpdCAoT2JqZWN0IG9iamVjdCkKLSAgewotICAgLy9pbXBsZW1lbnRlZCBieSBzdWJjbGFzc2VzCi0gIAlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotICAKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL1JlbFZpc2l0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9SZWxWaXNpdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlYzlmZGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL1JlbFZpc2l0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuOwotICAgICAgCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5CYXNpY0VsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5SZWw7Ci0KLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSB2aXNpdG9yLgotKiBUaGlzIHZpc3RvciB3aWxsIHZpc2l0IGVsZW1lbnRzIGluIGEgbW9kZWwgZ2l2ZW4gYSAKLSogcGFydGljdWxhciByZWwKLSogKi8KLXB1YmxpYyBjbGFzcyBSZWxWaXNpdG9yIGltcGxlbWVudHMgVmlzaXRvcgotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIAotICBwcml2YXRlIGludCBmRWxlbWVudENvdW50ZXI7Ci0gIHByaXZhdGUgaW50IGZUb3RhbEVsZW1lbnRzOwotICBwcml2YXRlIFN0cmluZyBmcmVsTmFtZTsKLQotICAvKioKLSAgKiBDb25zdHJ1Y3Rvci4KLSAgKiAKLSAgKi8KLQotICBwdWJsaWMgUmVsVmlzaXRvciAoU3RyaW5nIHJlbE5hbWUpCi0gIHsKLSAgICAgZnJlbE5hbWUgPSByZWxOYW1lOwotICB9Ci0gIAotICBwdWJsaWMgaW50IGdldFRvdGFsRWxlbWVudHNUb1Zpc2l0KCkKLSAgewotICAgICByZXR1cm4gZlRvdGFsRWxlbWVudHM7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc0xhc3RFbGVtZW50KCkKLSAgewotICAgICBpZihnZXRUb3RhbEVsZW1lbnRzVG9WaXNpdCgpIC0gcHJlc2VudEVsZW1lbnQoKSA9PSAwKSByZXR1cm4gdHJ1ZTsKLSAgICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHVibGljIGludCBwcmVzZW50RWxlbWVudCgpCi0gIHsKLSAgICAgcmV0dXJuIGZFbGVtZW50Q291bnRlcjsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgaW5pdGlhbGl6ZShWaXNpdG9yQWN0aW9uIHZhKQotICB7Ci0gICAgLy9pbXBsZW1lbnRlZCBieSBzdWJjbGFzc2VzCi0gIH0gIAotICBwdWJsaWMgSVN0YXR1cyBydW4gKE9iamVjdCBzb3VyY2VFbGVtZW50LFZpc2l0b3JBY3Rpb24gdkFjdGlvbikKLSAgewotICAJICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICAgICAgaW5pdGlhbGl6ZSh2QWN0aW9uKTsKLSAgCi0gICAgICAgIHZBY3Rpb24uc2V0VmlzaXRvcih0aGlzKTsKLSAgICAgICAgUmVsIHJlbCA9ICgoQmFzaWNFbGVtZW50KXNvdXJjZUVsZW1lbnQpLmdldFJlbChmcmVsTmFtZSk7Ci0gICAgICAgIC8vc2V0IHNvbWUgc3RhdGUgZGF0YQotICAgICAgICBmVG90YWxFbGVtZW50cyA9IHJlbC5nZXROdW1iZXJPZlRhcmdldEVsZW1lbnRzKCk7Ci0gICAgICAgIGZFbGVtZW50Q291bnRlciA9IDA7ICAKLSAgICAgICAgCi0gICAgICAgIEVudW1lcmF0aW9uIGUgPSByZWwuZ2V0VGFyZ2V0RWxlbWVudHMoKTsKLSAgICAgICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpewotICAgICAgICAgICBCYXNpY0VsZW1lbnQgdGFyZ2V0RWxlbWVudCA9IChCYXNpY0VsZW1lbnQpZS5uZXh0RWxlbWVudCgpOyAKLSAgICAgICAgICAgZkVsZW1lbnRDb3VudGVyKys7Ci0gICAgICAgICAgIGluaXRpYWxpemUodkFjdGlvbik7Ci0gICAgICAgICAgIHN0YXR1cyA9IHZBY3Rpb24udmlzaXQodGFyZ2V0RWxlbWVudCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgfSAKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL1Zpc2l0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9WaXNpdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYTcwNDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL1Zpc2l0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci0KLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSB2aXNpdG9yLgotKiAqLwotcHVibGljIGludGVyZmFjZSBWaXNpdG9yIAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIAotICBwdWJsaWMgSVN0YXR1cyBydW4gKE9iamVjdCBvYmplY3QsIFZpc2l0b3JBY3Rpb24gdkFjdGlvbik7Ci0gICAgICAgIAotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vVmlzaXRvckFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL1Zpc2l0b3JBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjk0MTI2Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vVmlzaXRvckFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLQotCi0vKioKLSogT2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIFZpc2l0b3JBY3Rpb24uCi0qIFRoZSB2aXNpdG9yIHdhbGtzIHRoZSBtb2RlbCBhbmQgdGhlIFZpc2l0b3JBY3Rpb24gCi0qIGRvZXMgdGhlIGFjdGlvbgotKiAqLwotcHVibGljIGludGVyZmFjZSBWaXNpdG9yQWN0aW9uIAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIHB1YmxpYyBJU3RhdHVzIHZpc2l0IChPYmplY3Qgb2JqZWN0KTsKLSAgcHVibGljIHZvaWQgc2V0VmlzaXRvcihWaXNpdG9yIHZpc2l0b3IpOwotICBwdWJsaWMgdm9pZCBpbml0aWFsaXplKFN0cmluZyByZXNpZGVudFN0cmluZyk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vYmVhbi9BdHRyaWJ1dGVWaXNpdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vYmVhbi9BdHRyaWJ1dGVWaXNpdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjZmM2MjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2JlYW4vQXR0cmlidXRlVmlzaXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uYmVhbjsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uUmVsVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5WaXNpdG9yQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsLlR5cGVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5zYW1wbGVhcHAuY29kZWdlbi5JbnB1dEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3I7Ci0KLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSB2aXNpdG9yLgotKiAqLwotcHVibGljIGNsYXNzIEF0dHJpYnV0ZVZpc2l0b3IgZXh0ZW5kcyBSZWxWaXNpdG9yCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgCi0gIHByaXZhdGUgVmVjdG9yIGZSZXNpZGVudFZlY3RvcjE7Ci0gIHByaXZhdGUgVmVjdG9yIGZSZXNpZGVudFZlY3RvcjI7Ci0KLSAgIC8qKgotICAqIENvbnN0cnVjdG9yLgotICAqIAotICAqLwotCi0gIHB1YmxpYyBBdHRyaWJ1dGVWaXNpdG9yICgpCi0gIHsKLSAgICBzdXBlcihUeXBlRWxlbWVudC5SRUxfQVRUUklCVVRFUyk7Ci0gIH0KLQotICBwdWJsaWMgQXR0cmlidXRlVmlzaXRvciAoU3RyaW5nIHJlbCkKLSAgewotICAgIHN1cGVyKHJlbCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFJlc2lkZW50U3RyaW5nKFN0cmluZyByZXNpZGVudCkKLSAgewotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0UmVzaWRlbnRWZWN0b3IxKFZlY3RvciByZXNpZGVudCkKLSAgewotICAgIGZSZXNpZGVudFZlY3RvcjEgPSByZXNpZGVudDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFJlc2lkZW50VmVjdG9yMihWZWN0b3IgcmVzaWRlbnQpCi0gIHsKLSAgICBmUmVzaWRlbnRWZWN0b3IyID0gcmVzaWRlbnQ7Ci0gIH0KLQotICAKLSAgcHVibGljIHZvaWQgaW5pdGlhbGl6ZShWaXNpdG9yQWN0aW9uIHZBY3Rpb24pCi0gIHsKLSAgICAgLy9oYWNrIGZvciAxOTc3MjYKLQotICAgICBpZih2QWN0aW9uIGluc3RhbmNlb2YgSW5wdXRGaWxlQXR0cmlidXRlR2VuZXJhdG9yKXsKLSAgICAgICBpZihmUmVzaWRlbnRWZWN0b3IxID09IG51bGwpIGZSZXNpZGVudFZlY3RvcjE9bmV3IFZlY3RvcigpOwotICAgICAgIGlmKGZSZXNpZGVudFZlY3RvcjIgPT0gbnVsbCkgZlJlc2lkZW50VmVjdG9yMj1uZXcgVmVjdG9yKCk7Ci0gICAgICAgKChJbnB1dEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3IpdkFjdGlvbikuc2V0UGFyZW50R2V0dGVycyhmUmVzaWRlbnRWZWN0b3IxLGZSZXNpZGVudFZlY3RvcjIpOwotICAgICB9Ci0gIH0KLSAKLSAgCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9iZWFuL0ZpZWxkVmlzaXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2JlYW4vRmllbGRWaXNpdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3NWJlNWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2JlYW4vRmllbGRWaXNpdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5iZWFuOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5WaXNpdG9yQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsLlR5cGVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5zYW1wbGVhcHAuY29kZWdlbi5JbnB1dEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3I7Ci0KLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSB2aXNpdG9yLgotKiAqLwotcHVibGljIGNsYXNzIEZpZWxkVmlzaXRvciBleHRlbmRzIEF0dHJpYnV0ZVZpc2l0b3IKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAKLSAgcHJpdmF0ZSBWZWN0b3IgZlJlc2lkZW50VmVjdG9yMTsKLSAgcHJpdmF0ZSBWZWN0b3IgZlJlc2lkZW50VmVjdG9yMjsKLQotICAgLyoqCi0gICogQ29uc3RydWN0b3IuCi0gICogCi0gICovCi0KLSAgcHVibGljIEZpZWxkVmlzaXRvciAoKQotICB7Ci0gICAgc3VwZXIoVHlwZUVsZW1lbnQuUkVMX0ZJRUxEUyk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFJlc2lkZW50U3RyaW5nKFN0cmluZyByZXNpZGVudCkKLSAgewotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0UmVzaWRlbnRWZWN0b3IxKFZlY3RvciByZXNpZGVudCkKLSAgewotICAgIGZSZXNpZGVudFZlY3RvcjEgPSByZXNpZGVudDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFJlc2lkZW50VmVjdG9yMihWZWN0b3IgcmVzaWRlbnQpCi0gIHsKLSAgICBmUmVzaWRlbnRWZWN0b3IyID0gcmVzaWRlbnQ7Ci0gIH0KLQotICAKLSAgcHVibGljIHZvaWQgaW5pdGlhbGl6ZShWaXNpdG9yQWN0aW9uIHZBY3Rpb24pCi0gIHsKLSAgICAgLy9oYWNrIGZvciAxOTc3MjYKLQotICAgICBpZih2QWN0aW9uIGluc3RhbmNlb2YgSW5wdXRGaWxlQXR0cmlidXRlR2VuZXJhdG9yKXsKLSAgICAgICBpZihmUmVzaWRlbnRWZWN0b3IxID09IG51bGwpIGZSZXNpZGVudFZlY3RvcjE9bmV3IFZlY3RvcigpOwotICAgICAgIGlmKGZSZXNpZGVudFZlY3RvcjIgPT0gbnVsbCkgZlJlc2lkZW50VmVjdG9yMj1uZXcgVmVjdG9yKCk7Ci0gICAgICAgKChJbnB1dEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3IpdkFjdGlvbikuc2V0UGFyZW50R2V0dGVycyhmUmVzaWRlbnRWZWN0b3IxLGZSZXNpZGVudFZlY3RvcjIpOwotICAgICB9Ci0gIH0KLSAKLSAgCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9iZWFuL01ldGhvZFZpc2l0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9iZWFuL01ldGhvZFZpc2l0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQ2NjQ2Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vYmVhbi9NZXRob2RWaXNpdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uYmVhbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLlJlbFZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuQmVhbkVsZW1lbnQ7Ci0KLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSB2aXNpdG9yLgotKiAqLwotcHVibGljIGNsYXNzIE1ldGhvZFZpc2l0b3IgZXh0ZW5kcyBSZWxWaXNpdG9yCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgCi0gIC8qKgotICAqIENvbnN0cnVjdG9yLgotICAqIAotICAqLwotCi0gIHB1YmxpYyBNZXRob2RWaXNpdG9yICgpCi0gIHsKLSAgICAgc3VwZXIoQmVhbkVsZW1lbnQuUkVMX01FVEhPRFMpOwotICB9Ci0gIAotICAgCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9iZWFuL1BhcmFtZXRlclZpc2l0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9iZWFuL1BhcmFtZXRlclZpc2l0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDc0OTMxMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vYmVhbi9QYXJhbWV0ZXJWaXNpdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uYmVhbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLlJlbFZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuTWV0aG9kRWxlbWVudDsKLQotCi0vKioKLSogT2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIHZpc2l0b3IuCi0qICovCi1wdWJsaWMgY2xhc3MgUGFyYW1ldGVyVmlzaXRvciBleHRlbmRzIFJlbFZpc2l0b3IKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAKLSAgLyoqCi0gICogQ29uc3RydWN0b3IuCi0gICogCi0gICovCi0KLSAgcHVibGljIFBhcmFtZXRlclZpc2l0b3IgKCkKLSAgewotICAgICBzdXBlcihNZXRob2RFbGVtZW50LlJFTF9QQVJBTUVURVJTKTsKLSAgfQotICAKLSAgIAotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vYmVhbi9SZXR1cm5QYXJhbWV0ZXJWaXNpdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vYmVhbi9SZXR1cm5QYXJhbWV0ZXJWaXNpdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmNjIwNzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2JlYW4vUmV0dXJuUGFyYW1ldGVyVmlzaXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLmJlYW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5SZWxWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsLk1ldGhvZEVsZW1lbnQ7Ci0KLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSB2aXNpdG9yLgotKiAqLwotcHVibGljIGNsYXNzIFJldHVyblBhcmFtZXRlclZpc2l0b3IgZXh0ZW5kcyBSZWxWaXNpdG9yCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgCi0gIC8qKgotICAqIENvbnN0cnVjdG9yLgotICAqIAotICAqLwotCi0gIHB1YmxpYyBSZXR1cm5QYXJhbWV0ZXJWaXNpdG9yICgpCi0gIHsKLSAgICAgc3VwZXIoTWV0aG9kRWxlbWVudC5SRUxfUkVUVVJOX1BBUkFNRVRFUlMpOwotICB9Ci0gIAotICAgCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9iZWFuL1R5cGVWaXNpdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vYmVhbi9UeXBlVmlzaXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjU0NjE1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9iZWFuL1R5cGVWaXNpdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uYmVhbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLlJlbFZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuVHlwZUVsZW1lbnQ7Ci0KLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSB2aXNpdG9yLgotKiAqLwotcHVibGljIGNsYXNzIFR5cGVWaXNpdG9yIGV4dGVuZHMgUmVsVmlzaXRvcgotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIAotICAvKioKLSAgKiBDb25zdHJ1Y3Rvci4KLSAgKiAKLSAgKi8KLQotICBwdWJsaWMgVHlwZVZpc2l0b3IgKCkKLSAgewotICAgIHN1cGVyKFR5cGVFbGVtZW50LlJFTF9UWVBFKTsKLSAgfQotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcmFjdGlvbnMvRGV0ZWN0Tm9uSmF2YUNoYXJzQmVhblZpc2l0b3JBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcmFjdGlvbnMvRGV0ZWN0Tm9uSmF2YUNoYXJzQmVhblZpc2l0b3JBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjM5NmU5Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vamF2YW1vZnZpc2l0b3JhY3Rpb25zL0RldGVjdE5vbkphdmFDaGFyc0JlYW5WaXNpdG9yQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5qYXZhbW9mdmlzaXRvcmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLkNvbnN1bXB0aW9uTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uamF2YW1vZnZpc2l0b3JzLkphdmFNb2ZNZXRob2RWaXNpdG9yOwotCi0KLQotCi0vKioKLSogT2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIEphdmFNb2ZCZWFuVmlzaXRvckFjdGlvbi4KLSogVGhpcyBWaXNpdG9yQWN0aW9uIHdpbGwgY3JlYXRlIGEgQmVhbkVsZW1lbnQgdXNpbmcgdGhlCi0qIEphdmFDbGFzcyBhbmQgdGhlIEJlYW5Nb2RlbEVsZW1lbnRzRmFjdG9yeQotKiBJdCB3aWxsIGFsc28gYXV0b21hdGljYWxseSB3YWxrIHRoZSBtZXRob2RzIGluIHRoZSBKYXZhQ2xhc3MKLSogKi8KLXB1YmxpYyBjbGFzcyBEZXRlY3ROb25KYXZhQ2hhcnNCZWFuVmlzaXRvckFjdGlvbiBleHRlbmRzIFZpc2l0b3JBY3Rpb25JbXBsCi17Ci0gIHByaXZhdGUgc3RhdGljIGNoYXIgVU5ERVJTQ09SRSA9ICdfJzsKLQotICBwdWJsaWMgRGV0ZWN0Tm9uSmF2YUNoYXJzQmVhblZpc2l0b3JBY3Rpb24gKCBWZWN0b3IgbWVzc2FnZXMsIFZlY3RvciBiZWFucykKLSAgCXsKLSAgCQlzdXBlciAobWVzc2FnZXMsIGJlYW5zKTsKLSAgCX0KLQotICAvKioKLSAgKiBUaGUgdmlzaXQgd2lsbCBjcmVhdGUgdGhlIGJlYW4KLSAgKiBXYWxrIHRoZSBtZXRob2RzCi0gICogQHBhcmFtIEphdmFDbGFzcyB0aGUgY2xhc3MgdG8gYmUgdXNlZCB0byBjcmVhdGUgdGhlIGJlYW4gbW9kZWwKLSAgKiovCi0gIHB1YmxpYyBJU3RhdHVzIHZpc2l0IChPYmplY3QgamF2YWNsYXNzKQotICB7Ci0gICAgSmF2YUNsYXNzIGphdmFDbGFzcyA9IChKYXZhQ2xhc3MpamF2YWNsYXNzOwotICAgIFN0cmluZyBwYWNrYWdlTmFtZSA9IGphdmFDbGFzcy5nZXRKYXZhUGFja2FnZSgpLmdldFBhY2thZ2VOYW1lKCk7Ci0gICAgU3RyaW5nIGJlYW5OYW1lID0gamF2YUNsYXNzLmdldE5hbWUoKTsKLQotICAgIGlmICghaXNCZWFuVmlzaXRlZChqYXZhQ2xhc3MpKSB7Ci0gICAgICAJYWRkVmlzaXRlZEJlYW4oamF2YUNsYXNzKTsKLQkJLy8gY2hlY2sgdGhlIGJlYW4gbmFtZQotCQljaGVja0JlYW5OYW1lKGJlYW5OYW1lKTsKLQkJY2hlY2tQYWNrYWdlTmFtZShwYWNrYWdlTmFtZSwgYmVhbk5hbWUpOwotCSAgCURldGVjdE5vbkphdmFDaGFyc01ldGhvZFZpc2l0b3JBY3Rpb24gbWV0aG9kVmlzaXRvckFjdGlvbiA9IG5ldyBEZXRlY3ROb25KYXZhQ2hhcnNNZXRob2RWaXNpdG9yQWN0aW9uKGdldE1lc3NhZ2VzKCksIGdldEJlYW5zVmlzaXRlZCgpKTsKLSAgICAgIAlKYXZhTW9mTWV0aG9kVmlzaXRvciBtZXRob2RWaXNpdG9yID0gbmV3IEphdmFNb2ZNZXRob2RWaXNpdG9yKCk7Ci0gICAgCW1ldGhvZFZpc2l0b3IucnVuKGphdmFDbGFzcyxtZXRob2RWaXNpdG9yQWN0aW9uKTsKLSAgICAgfQotICAgIAotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICAgfQotCi0gICBwcml2YXRlIHZvaWQgY2hlY2tCZWFuTmFtZShTdHJpbmcgYmVhbk5hbWUpCi0gICAJewotCSAKLQkgLy8gY2hlY2sgaWYgdGhlIGJlYW4gc3RhcnRzIHdpdGggYSBsb3dlciBjYXNlCi0JIGlmICggQ2hhcmFjdGVyLmlzTG93ZXJDYXNlKGJlYW5OYW1lLmNoYXJBdCgwKSkpCi0gICAgCWFkZE1lc3NhZ2UoQ29uc3VtcHRpb25NZXNzYWdlcy5XQVJOX0JFQU5fTkFNRV9TVEFSVFNfV0lUSF9MT1dFUl9DQVNFLCBuZXcgU3RyaW5nW117YmVhbk5hbWV9KTsgIAotCi0JCi0gICAgIC8vY2hlY2sgaWYgdGhlIG5hbWUgaGFzIGFuIHVuZGVyc2NvcmUsIHRoZW4gbmV4dCBsZXR0ZXIgc2hvdWxkIGJlIHVwcGVyIGNhc2UKLSAgICAgaW50IHVuZGVyU2NvcmVJbmRleCA9IGJlYW5OYW1lLmluZGV4T2YoVU5ERVJTQ09SRSk7Ci0JIFN0cmluZyB0ZW1wTmFtZSA9IGJlYW5OYW1lOwotCSB3aGlsZSh1bmRlclNjb3JlSW5kZXggIT0tMSkgewotCQl0ZW1wTmFtZSA9IHRlbXBOYW1lLnN1YnN0cmluZyh1bmRlclNjb3JlSW5kZXgrMSk7Ci0JCWlmICggQ2hhcmFjdGVyLmlzTG93ZXJDYXNlKHRlbXBOYW1lLmNoYXJBdCgwKSkpIHsKLSAgICAgIAkJYWRkTWVzc2FnZShDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19XQVJOX01FVEhPRF9OQU1FX0lOVkFMSUQsIG5ldyBTdHJpbmdbXSB7IGJlYW5OYW1lIH0pOyAgCi0gICAgICAJCWJyZWFrOwotCQkJfQotCQllbHNlCi0JCQl1bmRlclNjb3JlSW5kZXggPSB0ZW1wTmFtZS5pbmRleE9mKFVOREVSU0NPUkUpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNoZWNrUGFja2FnZU5hbWUoU3RyaW5nIHBhY2thZ2VOYW1lLCBTdHJpbmcgYmVhbk5hbWUpCi0JCXsKLQkJCWlmICghcGFja2FnZU5hbWUuZXF1YWxzKHBhY2thZ2VOYW1lLnRvTG93ZXJDYXNlKCkpKQotCQkJCWFkZE1lc3NhZ2UoQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfV0FSTl9QQUNLQUdFX05BTUVfSEFTX1VQUEVSX0NBU0UsIG5ldyBTdHJpbmdbXSB7IHBhY2thZ2VOYW1lLCBiZWFuTmFtZSB9KTsKLQkJfQotIH0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcmFjdGlvbnMvRGV0ZWN0Tm9uSmF2YUNoYXJzTWV0aG9kVmlzaXRvckFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9yYWN0aW9ucy9EZXRlY3ROb25KYXZhQ2hhcnNNZXRob2RWaXNpdG9yQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0NjBiZmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9yYWN0aW9ucy9EZXRlY3ROb25KYXZhQ2hhcnNNZXRob2RWaXNpdG9yQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uamF2YW1vZnZpc2l0b3JhY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLk1ldGhvZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uQ29uc3VtcHRpb25NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5qYXZhbW9mdmlzaXRvcnMuSmF2YU1vZlBhcmFtZXRlclZpc2l0b3I7Ci0KLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSBKYXZhTW9mQmVhblZpc2l0b3JBY3Rpb24uCi0qIFRoaXMgVmlzaXRvckFjdGlvbiB3aWxsIGNyZWF0ZSBhIEJlYW5FbGVtZW50IHVzaW5nIHRoZSAKLSogSmF2YUNsYXNzIGFuZCB0aGUgQmVhbk1vZGVsRWxlbWVudHNGYWN0b3J5Ci0qIEl0IHdpbGwgYWxzbyBhdXRvbWF0aWNhbGx5IHdhbGsgdGhlIG1ldGhvZHMgaW4gdGhlIEphdmFDbGFzcwotKiAqLwotcHVibGljIGNsYXNzIERldGVjdE5vbkphdmFDaGFyc01ldGhvZFZpc2l0b3JBY3Rpb24gZXh0ZW5kcyBWaXNpdG9yQWN0aW9uSW1wbCAKLXsKLSAgcHJpdmF0ZSBzdGF0aWMgY2hhciBVTkRFUlNDT1JFID0gJ18nOwotICBwcml2YXRlIGJvb2xlYW4gc2VydmljZUJlYW4gPSBmYWxzZTsKLQotICAgcHVibGljIERldGVjdE5vbkphdmFDaGFyc01ldGhvZFZpc2l0b3JBY3Rpb24gKCBWZWN0b3IgbWVzc2FnZXMsIFZlY3RvciBiZWFucykKLSAgCXsKLSAgCQlzdXBlciAobWVzc2FnZXMsIGJlYW5zKTsKLSAgCQlpZiAoIGJlYW5zLnNpemUoKSA9PSAxKQotICAJCQlzZXJ2aWNlQmVhbiA9IHRydWU7Ci0gIAl9Ci0KLSAgLyoqCi0gICogQ3JlYXRlIGEgbWV0aG9kIGVsZW1lbnQgZnJvbSB0aGUgbWV0aG9kIAotICAqIEBwYXJhbSBNZXRob2QgdGhlIGNsYXNzIHRvIGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBtZXRob2QKLSAgKiovCi0gIHB1YmxpYyBJU3RhdHVzIHZpc2l0IChPYmplY3QgaW1ldGhvZCkKLSAgewotICAgIAotICAgIE1ldGhvZCBtZXRob2QgPSAoTWV0aG9kKWltZXRob2Q7Ci0gICAgU3RyaW5nICBjbGFzc05hbWUgPSBtZXRob2QuZ2V0Q29udGFpbmluZ0phdmFDbGFzcygpLmdldE5hbWUoKTsKLSAgICBTdHJpbmcgbmFtZSA9IG1ldGhvZC5nZXROYW1lKCk7Ci0KLQlpZiAoIHNlcnZpY2VCZWFuICYmICFtZXRob2QuaXNDb25zdHJ1Y3RvcigpICkKLQkJY2hlY2tVcHBlckNhc2UobmFtZSwgY2xhc3NOYW1lKTsKLQkKLQkvLyBmb3Igc2VydmljZSBiZWFuIG9yIGFueSByZWZlcmVuY2VkIGJlYW4gcHJvcGVydHkgYWNjZXNzb3JzCi0JIGlmICggc2VydmljZUJlYW4gfHwgbmFtZS5zdGFydHNXaXRoKCJnZXQiKSB8fCBuYW1lLnN0YXJ0c1dpdGgoInNldCIpIHx8IG5hbWUuc3RhcnRzV2l0aCgiaXMiKSkgCi0JIHsKLQkgICAgY2hlY2tVbmRlclNjb3JlKG5hbWUsIGNsYXNzTmFtZSk7Ci0JICAgIGNoZWNrTnVtZXJpY0RpZ2l0cyhuYW1lLCBjbGFzc05hbWUpOwotCSAgICBjaGVja0Jvb2xlYW5Qcm9wZXJ0aWVzKG1ldGhvZCwgY2xhc3NOYW1lKTsKLQkJICAJCi0JIAlEZXRlY3ROb25KYXZhQ2hhcnNQYXJhbWV0ZXJWaXNpdG9yQWN0aW9uIHBhcmFtZXRlclZpc2l0b3JBY3Rpb24gPSBuZXcgRGV0ZWN0Tm9uSmF2YUNoYXJzUGFyYW1ldGVyVmlzaXRvckFjdGlvbihnZXRNZXNzYWdlcygpLCBnZXRCZWFuc1Zpc2l0ZWQoKSk7Ci0JIAkvLyByc2sgUGFzc2luZyBpbiBudWxsIGZvciB0aGUgZW52aXJvbm1lbnQuIERldGVjdE5vbkphdmFDaGFyc1BhcmFtZXRlclZpc2l0b3JBY3Rpb24gYWx3YXlzIHJldHVybnMgYW4gT0sgc3RhdHVzLgotICAgIAlKYXZhTW9mUGFyYW1ldGVyVmlzaXRvciBwYXJhbWV0ZXJWaXNpdG9yID0gbmV3IEphdmFNb2ZQYXJhbWV0ZXJWaXNpdG9yKG51bGwpOwotICAgIAlwYXJhbWV0ZXJWaXNpdG9yLnJ1bihtZXRob2QsIHBhcmFtZXRlclZpc2l0b3JBY3Rpb24pOyAgIAotCSAgfQotCSAKLQkgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JfQotCi0gIHByaXZhdGUgdm9pZCBjaGVja1VwcGVyQ2FzZShTdHJpbmcgbmFtZSwgU3RyaW5nIGNsYXNzTmFtZSkKLSAgewotICAJIC8vIGluIGEgc2VydmljZSBiZWFuIGNoZWNrIGlmIGFueSBtZXRob2Qgc3RhcnRzIHdpdGggdXBwZXIgY2FzZSBsZXR0ZXIKLQkgaWYgKCBDaGFyYWN0ZXIuaXNVcHBlckNhc2UobmFtZS5jaGFyQXQoMCkpKQotICAgIAkJYWRkTWVzc2FnZShDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19XQVJOX0pBVkFfTUVUSE9EX1NUQVJUX1dJVEhfVVBQRVJfQ0FTRSwgbmV3IFN0cmluZ1tde25hbWUsIGNsYXNzTmFtZX0pOyAgCi0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBjaGVja1VuZGVyU2NvcmUoU3RyaW5nIG5hbWUsIFN0cmluZyBjbGFzc05hbWUpCi0gIHsKLSAgICAgLy9jaGVjayBpZiB0aGUgbmFtZSBoYXMgYW4gdW5kZXJzY29yZSwgdGhlbiBuZXh0IGxldHRlciBzaG91bGQgYmUgdXBwZXIgY2FzZQotICAgICBpbnQgdW5kZXJTY29yZUluZGV4ID0gbmFtZS5pbmRleE9mKFVOREVSU0NPUkUpOwotCSBTdHJpbmcgdGVtcE5hbWUgPSBuYW1lOwotCSB3aGlsZSh1bmRlclNjb3JlSW5kZXggIT0tMSkgewotCQl0ZW1wTmFtZSA9IHRlbXBOYW1lLnN1YnN0cmluZyh1bmRlclNjb3JlSW5kZXgrMSk7Ci0JCWlmICggQ2hhcmFjdGVyLmlzTG93ZXJDYXNlKHRlbXBOYW1lLmNoYXJBdCgwKSkpIHsKLSAgICAJCWFkZE1lc3NhZ2UoQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfV0FSTl9NRVRIT0RfTkFNRV9JTlZBTElELCBuZXcgU3RyaW5nW117bmFtZSwgY2xhc3NOYW1lfSk7ICAKLSAgICAgCQlicmVhazsKLQkJfQotCQllbHNlCi0JCQl1bmRlclNjb3JlSW5kZXggPSB0ZW1wTmFtZS5pbmRleE9mKFVOREVSU0NPUkUpOwotCSAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBjaGVja051bWVyaWNEaWdpdHMoU3RyaW5nIG5hbWUsIFN0cmluZyBjbGFzc05hbWUpCi0gIHsKLSAgICAgLy9jaGVjayBpZiB0aGUgbmFtZSBoYXMgYSBudW1lcmljLCB0aGVuIG5leHQgbGV0dGVyIHNob3VsZCBiZSB1cHBlciBjYXNlCi0gICAgIGZvciAoIGludCBpID0gMDsgaSA8IG5hbWUubGVuZ3RoKCk7IGkrKykKLSAgICAgCXsKLSAgICAgCQlpZiAoIENoYXJhY3Rlci5pc0RpZ2l0KG5hbWUuY2hhckF0KGkpKSkKLSAgICAgCQkJewotICAgICAJCQkJaWYgKENoYXJhY3Rlci5pc0xvd2VyQ2FzZShuYW1lLmNoYXJBdChpKzEpKSkgewotCQkJICAgIAkJYWRkTWVzc2FnZShDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19XQVJOX01FVEhPRF9OQU1FX0lOVkFMSUQsIG5ldyBTdHJpbmdbXXtuYW1lLCBjbGFzc05hbWV9KTsgIAotCQkJICAgICAJCWJyZWFrOwotIAkJCQkJfQotCQl9Ci0gICAgIH0KLSAgfQotICBwcml2YXRlIHZvaWQgY2hlY2tCb29sZWFuUHJvcGVydGllcyhNZXRob2QgbWV0aG9kLCBTdHJpbmcgY2xhc3NOYW1lKQotICAJewotICAJCWlmICghc2VydmljZUJlYW4gJiYgbWV0aG9kLmdldE5hbWUoKS5zdGFydHNXaXRoKCJnZXQiKSAmJiAKLSAgCQkJKG1ldGhvZC5nZXRSZXR1cm5UeXBlKCkuZ2V0TmFtZSgpLmVxdWFscygiYm9vbGVhbiIpIHx8Ci0gIAkJCSBtZXRob2QuZ2V0UmV0dXJuVHlwZSgpLmdldE5hbWUoKS5lcXVhbHMoImphdmEubGFuZy5Cb29sZWFuIikpKQotICAJCQlhZGRNZXNzYWdlKENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX1dBUk5fQk9PTEVBTl9QUk9QRVJUWV9BQ0NFU1NPUlMsIG5ldyBTdHJpbmdbXXttZXRob2QuZ2V0TmFtZSgpLCBjbGFzc05hbWV9KTsgIAotICAJfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vamF2YW1vZnZpc2l0b3JhY3Rpb25zL0RldGVjdE5vbkphdmFDaGFyc1BhcmFtZXRlclZpc2l0b3JBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcmFjdGlvbnMvRGV0ZWN0Tm9uSmF2YUNoYXJzUGFyYW1ldGVyVmlzaXRvckFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYWUyOGExLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcmFjdGlvbnMvRGV0ZWN0Tm9uSmF2YUNoYXJzUGFyYW1ldGVyVmlzaXRvckFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uamF2YW1vZnZpc2l0b3JhY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkFycmF5VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuSmF2YUhlbHBlcnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuSmF2YVBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5qYXZhbW9mdmlzaXRvcnMuSmF2YU1vZkJlYW5WaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsLlR5cGVGYWN0b3J5OwotCi0KLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSBKYXZhTW9mQmVhblZpc2l0b3JBY3Rpb24uCi0qIFRoaXMgVmlzaXRvckFjdGlvbiB3aWxsIGNyZWF0ZSBhIEJlYW5FbGVtZW50IHVzaW5nIHRoZSAKLSogSmF2YUNsYXNzIGFuZCB0aGUgQmVhbk1vZGVsRWxlbWVudHNGYWN0b3J5Ci0qIEl0IHdpbGwgYWxzbyBhdXRvbWF0aWNhbGx5IHdhbGsgdGhlIG1ldGhvZHMgaW4gdGhlIEphdmFDbGFzcwotKiAqLwotcHVibGljIGNsYXNzIERldGVjdE5vbkphdmFDaGFyc1BhcmFtZXRlclZpc2l0b3JBY3Rpb24gZXh0ZW5kcyBWaXNpdG9yQWN0aW9uSW1wbCAKLXsKLQotICBwdWJsaWMgRGV0ZWN0Tm9uSmF2YUNoYXJzUGFyYW1ldGVyVmlzaXRvckFjdGlvbiAoIFZlY3RvciBtZXNzYWdlcywgVmVjdG9yIGJlYW5zKQotICAJewotICAJCXN1cGVyIChtZXNzYWdlcywgYmVhbnMpOwotICAJfQotCi0gIC8qKgotICAqIENyZWF0ZSBhIG1ldGhvZCBlbGVtZW50IGZyb20gdGhlIG1ldGhvZCAKLSAgKiBAcGFyYW0gTWV0aG9kIHRoZSBjbGFzcyB0byBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgbWV0aG9kCi0gICoqLwotICBwdWJsaWMgSVN0YXR1cyB2aXNpdCAoT2JqZWN0IGlqYXZhUGFyYW1ldGVyKQotICB7Ci0gICAgCi0gICAgSmF2YVBhcmFtZXRlciBqYXZhUGFyYW1ldGVyID0gKEphdmFQYXJhbWV0ZXIpIGlqYXZhUGFyYW1ldGVyOwotICAgIEphdmFDbGFzcyBqYXZhQ2xhc3MgPSBudWxsOwotICAgIGlmICggamF2YVBhcmFtZXRlci5nZXRKYXZhVHlwZSgpIGluc3RhbmNlb2YgSmF2YUNsYXNzKSAKLSAgICAJewotICAgIAlqYXZhQ2xhc3MgPSAoSmF2YUNsYXNzKSBqYXZhUGFyYW1ldGVyLmdldEphdmFUeXBlKCk7Ci0gICAgCWlmIChqYXZhQ2xhc3MuaXNBcnJheSgpKQotICAgIAkgIHsKLSAgICAJICAgIEphdmFIZWxwZXJzIGNvbXBvbmVudFR5cGUgPSAoKEFycmF5VHlwZSlqYXZhQ2xhc3MpLmdldENvbXBvbmVudFR5cGVBc0hlbHBlcigpOwotICAgIAkgICAgaWYgKGNvbXBvbmVudFR5cGUgaW5zdGFuY2VvZiBKYXZhQ2xhc3MpCi0gICAgCSAgICAgIHsKLSAgICAJICAgICAgICBqYXZhQ2xhc3MgPSAoSmF2YUNsYXNzKWNvbXBvbmVudFR5cGU7Ci0gICAgCSAgICAgIH0KLSAgICAJICAgIGVsc2UKLSAgICAJICAgICAgewotICAgIAkgICAgICAgIGphdmFDbGFzcyA9IG51bGw7IC8vVGhlIGFycmF5IGNvbnRhaW5zIHByaW1pdGl2ZSB0eXBlcywgdGhlcmUgaXMgbm8gbmVlZCBmb3IgZnVydGhlciBjaGVja2luZy4KLSAgICAJICAgICAgfQotICAgIAkgIH0KLSAgICAJfQotICAgCWlmICh0b0JlVmlzaXRlZChqYXZhQ2xhc3MpKSAgICB7Ci0JCQlEZXRlY3ROb25KYXZhQ2hhcnNCZWFuVmlzaXRvckFjdGlvbiBiZWFuVmlzaXRvckFjdGlvbiA9IG5ldyBEZXRlY3ROb25KYXZhQ2hhcnNCZWFuVmlzaXRvckFjdGlvbihnZXRNZXNzYWdlcygpLCBnZXRCZWFuc1Zpc2l0ZWQoKSk7Ci0JCQlKYXZhTW9mQmVhblZpc2l0b3IgYmVhblZpc2l0b3IgPSBuZXcgSmF2YU1vZkJlYW5WaXNpdG9yKCk7Ci0JCQliZWFuVmlzaXRvci5ydW4oamF2YUNsYXNzLGJlYW5WaXNpdG9yQWN0aW9uKTsKLSAgCSAgCX0KLSAgIAkKLSAgIAlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotICAKLQotICBwcml2YXRlIGJvb2xlYW4gdG9CZVZpc2l0ZWQgKEphdmFDbGFzcyBqYXZhQ2xhc3MpCi0gIHsKLQkvL2NoZWNrIGZvciByZWNvZ25pemVkIHR5cGVzIAotCWlmKCBqYXZhQ2xhc3MgPT0gbnVsbAl8fAotCSAgIGphdmFDbGFzcy5pc1ByaW1pdGl2ZSgpIHx8Ci0JICAgamF2YUNsYXNzLmdldEphdmFOYW1lKCkuc3RhcnRzV2l0aCgiamF2YXgiKSB8fAotICAgICAgIFR5cGVGYWN0b3J5LnJlY29nbml6ZWRCZWFuKGphdmFDbGFzcy5nZXRKYXZhTmFtZSgpKSkKLQkgICAgCXJldHVybiBmYWxzZTsKLQllbHNlCi0JCSAgCXJldHVybiB0cnVlOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcmFjdGlvbnMvSmF2YU1vZkF0dHJpYnV0ZVZpc2l0b3JBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcmFjdGlvbnMvSmF2YU1vZkF0dHJpYnV0ZVZpc2l0b3JBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWYzY2EyOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vamF2YW1vZnZpc2l0b3JhY3Rpb25zL0phdmFNb2ZBdHRyaWJ1dGVWaXNpdG9yQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uamF2YW1vZnZpc2l0b3JhY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhSGVscGVyczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLk1ldGhvZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uQ29uc3VtcHRpb25NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5qYXZhbW9mdmlzaXRvcnMuSmF2YU1vZlR5cGVWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsLkF0dHJpYnV0ZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuQmVhbk1vZGVsRWxlbWVudHNGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsLlR5cGVGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5zYW1wbGVhcHAuY29tbW9uLlNhbXBsZVByb3BlcnR5RGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JTG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuU3RhdHVzRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuRWxlbWVudDsKLQotCi0vKioKLSogT2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIEphdmFNb2ZCZWFuVmlzaXRvckFjdGlvbi4KLSogVGhpcyBWaXNpdG9yQWN0aW9uIHdpbGwgY3JlYXRlIGEgQXR0cmlidXRlRWxlbWVudCB1c2luZyB0aGUKLSogSmF2YUNsYXNzIGFuZCB0aGUgQmVhbk1vZGVsRWxlbWVudHNGYWN0b3J5Ci0qIEl0IHdpbGwgYWxzbyBhdXRvbWF0aWNhbGx5IHdhbGsgYSBjb21wbGV4IHR5cGUKLSogKi8KLXB1YmxpYyBjbGFzcyBKYXZhTW9mQXR0cmlidXRlVmlzaXRvckFjdGlvbiBleHRlbmRzIEphdmFNb2ZCZWFuVmlzaXRvckFjdGlvbgotewotCi0gIC8qCi0gICpDb25zdHJ1Y3RvcgotICAqKi8KLSAgcHVibGljIEphdmFNb2ZBdHRyaWJ1dGVWaXNpdG9yQWN0aW9uKEVsZW1lbnQgcGFyZW50RWxlbWVudCwgU3RyaW5nIHByb2plY3QsIElFbnZpcm9ubWVudCBlbnYpCi0gIHsKLSAgICBzdXBlcihwYXJlbnRFbGVtZW50LHByb2plY3QsIGVudik7Ci0gIH0KLQotICBwdWJsaWMgSVN0YXR1cyB2aXNpdCAoT2JqZWN0IHByb3BlcnR5RGVjb3JhdG9yKQotICB7Ci0gIAlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gIAkgIAkKLSAgICAvL1Byb3BlcnR5RGVjb3JhdG9yIHBkID0gKFByb3BlcnR5RGVjb3JhdG9yKXByb3BlcnR5RGVjb3JhdG9yOwotICAgIFNhbXBsZVByb3BlcnR5RGVzY3JpcHRvciBwZCA9IChTYW1wbGVQcm9wZXJ0eURlc2NyaXB0b3IpcHJvcGVydHlEZWNvcmF0b3I7ICAKLSAgICAKLSAgICAKLSAgICB0cnl7Ci0gICAgICAgLy9pZiB0aGUgdHlwZSBvZiB0aGlzIGF0dHJpYnV0ZSBpcyB1bnN1cHBvcnRlZCBkb250IG1ha2UgYW4gQXR0cmlidXRlCi0gICAgICBpZighKGdldFJldHVyblBhcmFtKCkgJiYgVHlwZUZhY3RvcnkuaXNSZWNvZ25pemVkUmV0dXJuVHlwZSgoSmF2YUhlbHBlcnMpcGQuZ2V0UHJvcGVydHlUeXBlKCkpKSAKLSAgICAgIAkmJiAoVHlwZUZhY3RvcnkuaXNVblN1cHBvcnRlZFR5cGUoKEphdmFIZWxwZXJzKXBkLmdldFByb3BlcnR5VHlwZSgpKSkpewotICAgICAgCSAgc3RhdHVzID0gU3RhdHVzVXRpbHMud2FybmluZ1N0YXR1cyggQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfV0FSTl9KVFNfVU5TVVBQT1JURURfVFlQRSArICgoSmF2YUhlbHBlcnMpcGQuZ2V0UHJvcGVydHlUeXBlKCkpLmdldEphdmFOYW1lKCkgKTsKLQkgICAgICAvL2dldFN0YXR1c01vbml0b3IoKS5yZXBvcnRTdGF0dXMoIG5ldyBTdGF0dXMoSVN0YXR1cy5XQVJOSU5HLFdlYlNlcnZpY2VDb25zdW1wdGlvblBsdWdpbi5JRCwwLAotCSAgICAgIC8vQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfV0FSTl9KVFNfVU5TVVBQT1JURURfVFlQRSArICgoSmF2YUhlbHBlcnMpcGQuZ2V0UHJvcGVydHlUeXBlKCkpLmdldEphdmFOYW1lKCksbnVsbCkpOwotCSAgICAgIHJldHVybiBzdGF0dXM7Ci0JICB9CQotCi0gICAgICBNZXRob2Qgc2V0TWV0aG9kID0gcGQuZ2V0V3JpdGVNZXRob2QoKTsKLSAgICAgIE1ldGhvZCBnZXRNZXRob2QgPSBwZC5nZXRSZWFkTWV0aG9kKCk7Ci0gICAgICBpZihzZXRNZXRob2QgIT0gbnVsbCl7Ci0gICAgICAJaWYoc2V0TWV0aG9kLmlzU3RhdGljKCkpewotICAgICAgICAgIHNldE1ldGhvZD1udWxsOyAKLSAgICAgIAl9Ci0gICAgICB9Ci0gICAgICBpZihnZXRNZXRob2QgIT0gbnVsbCl7Ci0gICAgICAJaWYoZ2V0TWV0aG9kLmlzU3RhdGljKCkpewotICAgICAgICAgIGdldE1ldGhvZD1udWxsOwotICAgICAgCX0KLSAgICAgIH0KLSAgICAgIGlmKHBkLmlzZlN0YXRpYygpKXsKLSAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgIH0KLSAgICAgIAotICAgICAgQXR0cmlidXRlRWxlbWVudCBhdHRyaWJ1dGVFbGVtZW50ID0gKEF0dHJpYnV0ZUVsZW1lbnQpQmVhbk1vZGVsRWxlbWVudHNGYWN0b3J5LmdldEJlYW5Nb2RlbEVsZW1lbnQocHJvcGVydHlEZWNvcmF0b3IsZlBhcmVudEVsZW1lbnQpOwotCi0gICAgICBpZihhdHRyaWJ1dGVFbGVtZW50ICE9IG51bGwpewotICAgICAgICAKLSAgICAgICAgLy9sZXRzIGNoZWNrIGFuZCBzZWUgaWYgdGhlIGdldHRlciB0YWtlcyBpbnB1dCBwYXJhbXMKLSAgICAgICAgLy9pZiBzbyB0aHJvdyBhbiBlcnJvcgotICAgICAgICAvL25vdyB0aGUgaW5wdXRzCi0gICAgICAgIGlmKGdldE1ldGhvZCAhPSBudWxsKXsKLQkgICAgICBKYXZhUGFyYW1ldGVyIGphdmFQYXJhbWV0ZXJbXSA9IGdldE1ldGhvZC5saXN0UGFyYW1ldGVyc1dpdGhvdXRSZXR1cm4oKTsKLQkgICAgICAgIGlmKGphdmFQYXJhbWV0ZXIubGVuZ3RoID4gMCl7Ci0JICAgICAgICAgIGlmKGdldFJldHVyblBhcmFtKCkpIHJldHVybiBzdGF0dXM7Ci0JICAgICAgICAgIHN0YXR1cyA9IFN0YXR1c1V0aWxzLndhcm5pbmdTdGF0dXMoIENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX1dBUk5fSlRTX1VOU1VQUE9SVEVEX0lOREVYRURfUFJPUEVSVElFUyArIGdldE1ldGhvZC5nZXROYW1lKCkgKTsKLQkgICAgICAgICAgLy9nZXRTdGF0dXNNb25pdG9yKCkucmVwb3J0U3RhdHVzIChuZXcgU3RhdHVzKElTdGF0dXMuV0FSTklORyxXZWJTZXJ2aWNlQ29uc3VtcHRpb25QbHVnaW4uSUQsMCwKLQkgICAgICAgICAgLy8JCUNvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX1dBUk5fSlRTX1VOU1VQUE9SVEVEX0lOREVYRURfUFJPUEVSVElFUyArIGdldE1ldGhvZC5nZXROYW1lKCksbnVsbCkpOwotCSAgICAgICAgICByZXR1cm4gc3RhdHVzOwotCSAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmKHNldE1ldGhvZCAhPSBudWxsKSBhdHRyaWJ1dGVFbGVtZW50LnNldFNldHRlck1ldGhvZChzZXRNZXRob2QuZ2V0TWV0aG9kRWxlbWVudFNpZ25hdHVyZSgpKTsKLSAgICAgICAgaWYoZ2V0TWV0aG9kICE9IG51bGwpIGF0dHJpYnV0ZUVsZW1lbnQuc2V0R2V0dGVyTWV0aG9kKGdldE1ldGhvZC5nZXRNZXRob2RFbGVtZW50U2lnbmF0dXJlKCkpOwotCi0gICAgICAgIEphdmFNb2ZUeXBlVmlzaXRvckFjdGlvbiB0eXBlVmlzaXRvckFjdGlvbiA9IG5ldyBKYXZhTW9mVHlwZVZpc2l0b3JBY3Rpb24oYXR0cmlidXRlRWxlbWVudCxjbGllbnRQcm9qZWN0LCBlbnZfKTsKLSAgICAgICAgdHlwZVZpc2l0b3JBY3Rpb24uc2V0U3RhdHVzTW9uaXRvcihnZXRTdGF0dXNNb25pdG9yKCkpOwotICAgICAgICB0eXBlVmlzaXRvckFjdGlvbi5zZXRCZWFuc0NyZWF0ZWQoZ2V0QmVhbnNDcmVhdGVkKCkpOwotICAgICAgICB0eXBlVmlzaXRvckFjdGlvbi5zZXRSZXR1cm5QYXJhbShnZXRSZXR1cm5QYXJhbSgpKTsgCi0gICAgICAgIEphdmFNb2ZUeXBlVmlzaXRvciB0eXBlVmlzaXRvciA9IG5ldyBKYXZhTW9mVHlwZVZpc2l0b3IoZW52Xyk7Ci0gICAgICAgIHR5cGVWaXNpdG9yLnNldENsaWVudFByb2plY3QoZ2V0UHJvamVjdCgpKTsKLSAgICAgICAgc3RhdHVzID0gdHlwZVZpc2l0b3IucnVuKHBkLHR5cGVWaXNpdG9yQWN0aW9uKTsKLSAgICAgICAKLSAgICAgIH0KLSAgICAKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfWNhdGNoKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAJZW52Xy5nZXRMb2coKS5sb2coSUxvZy5XQVJOSU5HLCA1MDU0LCB0aGlzLCAidmlzaXQiLCBlKTsKLSAgICAJc3RhdHVzID0gU3RhdHVzVXRpbHMud2FybmluZ1N0YXR1cygJQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfSlRTX0pTUF9HRU4sIGUpOwotICAgIAl0cnkgewotCQkJZW52Xy5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0KHN0YXR1cyk7Ci0JCX0gY2F0Y2ggKFN0YXR1c0V4Y2VwdGlvbiBlMSkgewotCQkJc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfSlRTX0pTUF9HRU4pOwotCQl9Ci0gICAgCXJldHVybiBzdGF0dXM7Ci0gICAgfQotICAgIC8vZW52LkxvZy53cml0ZSh0aGlzLCJ2aXNpdCIsSUxvZy5PSyxlKTt9Ci0KLSAgfQotIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9yYWN0aW9ucy9KYXZhTW9mQmVhblZpc2l0b3JBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcmFjdGlvbnMvSmF2YU1vZkJlYW5WaXNpdG9yQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmZWM2NGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9yYWN0aW9ucy9KYXZhTW9mQmVhblZpc2l0b3JBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMzEzICAgMTc2NTgwIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBHZW5lcmF0ZSBhIENsaWVudCBXUyBQcm94eSBhY2NlcHRpbmcgVVJMCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5qYXZhbW9mdmlzaXRvcmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkphdmFDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLk1ldGhvZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbWFuZC5OdWxsU3RhdHVzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbWFuZC5TdGF0dXNNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5Db25zdW1wdGlvbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLlZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uVmlzaXRvckFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5qYXZhbW9mdmlzaXRvcnMuSmF2YU1vZkF0dHJpYnV0ZVZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uamF2YW1vZnZpc2l0b3JzLkphdmFNb2ZGaWVsZFZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uamF2YW1vZnZpc2l0b3JzLkphdmFNb2ZNZXRob2RWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsLkJlYW5FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsLkJlYW5Nb2RlbEVsZW1lbnRzRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuc2VsZWN0aW9uLkJvb2xlYW5TZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5DaG9pY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci0KLS8qKgotKiBPYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgSmF2YU1vZkJlYW5WaXNpdG9yQWN0aW9uLgotKiBUaGlzIFZpc2l0b3JBY3Rpb24gd2lsbCBjcmVhdGUgYSBCZWFuRWxlbWVudCB1c2luZyB0aGUKLSogSmF2YUNsYXNzIGFuZCB0aGUgQmVhbk1vZGVsRWxlbWVudHNGYWN0b3J5Ci0qIEl0IHdpbGwgYWxzbyBhdXRvbWF0aWNhbGx5IHdhbGsgdGhlIG1ldGhvZHMgaW4gdGhlIEphdmFDbGFzcwotKiAqLwotcHVibGljIGNsYXNzIEphdmFNb2ZCZWFuVmlzaXRvckFjdGlvbiBpbXBsZW1lbnRzIFZpc2l0b3JBY3Rpb24KLXsKLQotICBwcm90ZWN0ZWQgSUVudmlyb25tZW50IGVudl87Ci0gIHByb3RlY3RlZCBWaXNpdG9yIGZWaXNpdG9yOwotCi0gIC8qCi0gICogVGhlIHByb2plY3QgdGhhdCBkZWZpbmVzIHRoZSBjb250ZXh0Ci0gICoqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGNsaWVudFByb2plY3Q7Ci0KLSAgLyoKLSAgKiBUaGUgU3RhdHVzIG1vbml0b3IKLSAgKiovCi0gIHByb3RlY3RlZCBTdGF0dXNNb25pdG9yIG1vbml0b3JfOwotCi0gIC8qCi0gICogVGhlIG1vZGVsIHRoYXQgd2lsbCBiZSBjcmVhdGVkCi0gICoqLwotICBwcm90ZWN0ZWQgTW9kZWwgZk1vZGVsOwotCi0gIC8qCi0gICogVGhpcyBpcyB0aGUgcGFyZW50IGVsZW1lbnQgdXNlZCB3aGVuIGNyZWF0aW5nIGEKLSAgKiBuZXcgZWxlbWVudAotICAqLwotICBwcm90ZWN0ZWQgRWxlbWVudCBmUGFyZW50RWxlbWVudDsKLQotICAvKgotICAqIE1ldGhvZHMgcHJvY2Vzc2VkIGZyb20gcHJveHkKLSAgKi8KLSAgcHJvdGVjdGVkIFZlY3RvciBmQmVhbnNDcmVhdGVkOwotCi0gIHByaXZhdGUgQm9vbGVhblNlbGVjdGlvbltdIGZNZXRob2RzU2VsZWN0ZWQ7Ci0KLSAgLyoKLSAgKiB0aGlzIGJvb2xlYW4gdGVsbHMgd2V0aGVyIHRoZSBiZWFuIGlzIGEgcmV0dXJuIHBhcmFtZXRlciBvciBhbiBpbnB1dCBwYXJhbWV0ZXIKLSAgKiB1c3VhbGx5IHRoaXMgc2hvdWxkIGJlIHNldCBhcm91bmQgdGhlIHBhcmFtZXRlcnZpc2l0b3JhY3Rpb24sIGFuZCBwYXNzZWQgb24gZnJvbSB0aGVyZQotICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiBmUmV0dXJuUGFyYW09ZmFsc2U7Ci0KLSAgcHVibGljIEphdmFNb2ZCZWFuVmlzaXRvckFjdGlvbihTdHJpbmcgY2xpZW50UHJvamVjdCxCb29sZWFuU2VsZWN0aW9uW10gbWV0aG9kcywgSUVudmlyb25tZW50IGVudikKLSAgewotICAgIHRoaXMuY2xpZW50UHJvamVjdCA9IGNsaWVudFByb2plY3Q7Ci0gICAgZk1ldGhvZHNTZWxlY3RlZCA9IG1ldGhvZHM7Ci0JZW52XyA9IGVudjsKLSAgfQotCi0KLQotICAvKgotICAqQ29uc3RydWN0b3IKLSAgKiBAcGFyYW0gTW9kZWwgbW9kZWwgaXMgdGhlIE1vZGVsIHRoYXQgdGhpcyBiZWFuIHdpbGwgYmUgcGxhY2VkIGluCi0gICogQHBhcmFtIElQcm9qZWN0IHVzZWQgaW4gbmF0dXJlCi0gICoqLwotICBwdWJsaWMgSmF2YU1vZkJlYW5WaXNpdG9yQWN0aW9uKE1vZGVsIG1vZGVsLCBTdHJpbmcgY2xpZW50UHJvamVjdCwgSUVudmlyb25tZW50IGVudikKLSAgewotICAgIHRoaXMuY2xpZW50UHJvamVjdCA9IGNsaWVudFByb2plY3Q7Ci0gICAgZk1vZGVsID0gbW9kZWw7Ci0JZW52XyA9IGVudjsKLSAgfQotCi0gIC8qCi0gICpDb25zdHJ1Y3RvcgotICAqIEBwYXJhbSBFbGVtZW50IHRoZSBwYXJlbnQgZWxlbWVudCB0aGF0IHRoaXMgZWxlbWVudCB3aWxsIGJlIGFkZGVkIHRvbwotICAqIEBwYXJhbSBJUHJvamVjdCB1c2VkIGluIG5hdHVyZQotICAqKi8KLSAgcHVibGljIEphdmFNb2ZCZWFuVmlzaXRvckFjdGlvbihFbGVtZW50IHBhcmVudEVsZW1lbnQsIFN0cmluZyBjbGllbnRQcm9qZWN0LCBJRW52aXJvbm1lbnQgZW52ICkKLSAgewotICAgIGZQYXJlbnRFbGVtZW50ID0gcGFyZW50RWxlbWVudDsKLSAgICB0aGlzLmNsaWVudFByb2plY3QgPSBjbGllbnRQcm9qZWN0OwotCWVudl8gPSBlbnY7Ci0gIH0KLQotICAvKioKLSAgKiBUaGUgdmlzaXQgd2lsbCBjcmVhdGUgdGhlIGJlYW4KLSAgKiBXYWxrIHRoZSBtZXRob2RzCi0gICogQHBhcmFtIEphdmFDbGFzcyB0aGUgY2xhc3MgdG8gYmUgdXNlZCB0byBjcmVhdGUgdGhlIGJlYW4gbW9kZWwKLSAgKiovCi0gIHB1YmxpYyBJU3RhdHVzIHZpc2l0IChPYmplY3QgamF2YWNsYXNzKQotICB7Ci0gIAlDaG9pY2UgT0tDaG9pY2UgPSBuZXcgQ2hvaWNlKCdPJywgQ29uc3VtcHRpb25NZXNzYWdlcy5MQUJFTF9PSywgQ29uc3VtcHRpb25NZXNzYWdlcy5ERVNDUklQVElPTl9PSyk7Ci0gIAlDaG9pY2UgQ2FuY2VsQ2hvaWNlID0gbmV3IENob2ljZSgnQycsIENvbnN1bXB0aW9uTWVzc2FnZXMuTEFCRUxfQ0FOQ0VMLCBDb25zdW1wdGlvbk1lc3NhZ2VzLkRFU0NSSVBUSU9OX0NBTkNFTCk7Ci0gIAlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgSmF2YUNsYXNzIGphdmFDbGFzcyA9IChKYXZhQ2xhc3MpamF2YWNsYXNzOwotICAgIAotICAgIAotICAgIEJlYW5FbGVtZW50IGJlYW5FbGVtZW50ID0gKEJlYW5FbGVtZW50KUJlYW5Nb2RlbEVsZW1lbnRzRmFjdG9yeS5nZXRCZWFuTW9kZWxFbGVtZW50KGphdmFDbGFzcyxmUGFyZW50RWxlbWVudCxmTW9kZWwpOwotICAgIGlmKGJlYW5FbGVtZW50LmlzT3duZXJQYXJhbWV0ZXIoKSkgewotICAgICAgICByZXNldEJlYW5zQ3JlYXRlZCgpOwotICAgIH0KLSAgICBmTW9kZWwgPSBiZWFuRWxlbWVudC5nZXRNb2RlbCgpOwotCi0gICAgLy90aGlzIGZvciB0aGUgc3Vic2VxdWVudCBiZWFucyB0aGF0IHJlcHJlc2VudCB0eXBlcwotICAgIC8vZmlyc3QgZG8gdGhlIGF0dHJpYnV0ZXMKLSAgICAvL2lmIHdlIGFyZSBub3Qgb24gdGhlIHJvb3QKLSAgICBpZiAoIShiZWFuRWxlbWVudCA9PSBmTW9kZWwuZ2V0Um9vdEVsZW1lbnQoKSkpewotICAgICAgIEVudW1lcmF0aW9uIGUgPSBnZXRCZWFuc0NyZWF0ZWQoKS5lbGVtZW50cygpOwotICAgICAgIHdoaWxlKGUuaGFzTW9yZUVsZW1lbnRzKCkpewotICAgICAgICAgIFN0cmluZyBuYW1lID0gKFN0cmluZyllLm5leHRFbGVtZW50KCk7Ci0gICAgICAgICAgaWYobmFtZS5lcXVhbHMoamF2YUNsYXNzLmdldE5hbWUoKSkpewotICAgICAgICAgIAlzdGF0dXMgPSBTdGF0dXNVdGlscy53YXJuaW5nU3RhdHVzKCBDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9KVFNfQ1lDTElDX0JFQU4gKTsKLSAgICAgICAgICAgIC8vZ2V0U3RhdHVzTW9uaXRvcigpLnJlcG9ydFN0YXR1cyhuZXcgU3RhdHVzKElTdGF0dXMuV0FSTklORyxXZWJTZXJ2aWNlQ29uc3VtcHRpb25QbHVnaW4uSUQsMCwKLSAgICAgICAgICAgIAkJCS8vV2ViU2VydmljZUNvbnN1bXB0aW9uUGx1Z2luLmdldE1lc3NhZ2UoICIlTVNHX0VSUk9SX0pUU19DWUNMSUNfQkVBTiIgKSxudWxsKSk7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgICAgICAgIH0KLSAgICAgICB9Ci0gICAgICAgCi0gICAgICAgSmF2YU1vZkF0dHJpYnV0ZVZpc2l0b3JBY3Rpb24gYXR0cmlidXRlVmlzaXRvckFjdGlvbiA9IG5ldyBKYXZhTW9mQXR0cmlidXRlVmlzaXRvckFjdGlvbihiZWFuRWxlbWVudCxjbGllbnRQcm9qZWN0LCBlbnZfKTsKLSAgICAgICAvL2F0dHJpYnV0ZVZpc2l0b3JBY3Rpb24uc2V0U3RhdHVzTW9uaXRvcihnZXRTdGF0dXNNb25pdG9yKCkpOwotICAgICAgIFZlY3RvciBjaGlsZFZlY3RvciA9ICgoVmVjdG9yKWdldEJlYW5zQ3JlYXRlZCgpLmNsb25lKCkpOwotICAgICAgIGNoaWxkVmVjdG9yLmFkZEVsZW1lbnQoamF2YUNsYXNzLmdldE5hbWUoKSk7ICAKLSAgICAgICBhdHRyaWJ1dGVWaXNpdG9yQWN0aW9uLnNldEJlYW5zQ3JlYXRlZChjaGlsZFZlY3Rvcik7Ci0gICAgICAgYXR0cmlidXRlVmlzaXRvckFjdGlvbi5zZXRSZXR1cm5QYXJhbShnZXRSZXR1cm5QYXJhbSgpKTsKLSAgICAgICBKYXZhTW9mQXR0cmlidXRlVmlzaXRvciBhdHRyaWJ1dGVWaXNpdG9yID0gbmV3IEphdmFNb2ZBdHRyaWJ1dGVWaXNpdG9yKCk7Ci0gICAgICAgYXR0cmlidXRlVmlzaXRvci5zZXRSZXR1cm5QYXJhbWV0ZXIoZ2V0UmV0dXJuUGFyYW0oKSk7Ci0gICAgICAgYXR0cmlidXRlVmlzaXRvci5zZXRQcm9qZWN0KGdldFByb2plY3QoKSk7Ci0gICAgICAgYXR0cmlidXRlVmlzaXRvci5zZXRFbnZpcm9ubWVudChlbnZfKTsKLSAgICAgICBzdGF0dXMgPSBhdHRyaWJ1dGVWaXNpdG9yLnJ1bihqYXZhQ2xhc3MsYXR0cmlidXRlVmlzaXRvckFjdGlvbik7Ci0gICAgICAgLy8KLSAgICAgICBpbnQgc2V2ZXJpdHkgPSBzdGF0dXMuZ2V0U2V2ZXJpdHkoKTsgCi0gICAgICAgaWYgKHNldmVyaXR5PT1TdGF0dXMuRVJST1IpCi0gICAgICAgCXJldHVybiBzdGF0dXM7Ci0gICAgICAgCi0gICAgICAgaWYgKHNldmVyaXR5PT1TdGF0dXMuV0FSTklORykKLSAgICAgICB7Ci0gICAgICAgICBDaG9pY2UgcmVzdWx0ID0gZW52Xy5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0KHN0YXR1cywgbmV3IENob2ljZVtde09LQ2hvaWNlLCBDYW5jZWxDaG9pY2V9KTsKLSAgICAgICAgIGlmIChyZXN1bHQuZ2V0TGFiZWwoKS5lcXVhbHMoQ2FuY2VsQ2hvaWNlLmdldExhYmVsKCkpKQotICAgICAgICAgewotICAgICAgICAgCSAvL3JldHVybiBhbiBlcnJvciBzdGF0dXMgc2luY2UgdGhlIHVzZXIgY2FuY2VsZWQKLSAgICAgICAgIAkgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9TQU1QTEVfQ1JFQVRJT05fQ0FOQ0VMRUQgKTsKLSAgICAgICAgIH0KLSAgICAgICAgIAkKLSAgICAgICB9Ci0gICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAKLQotICAgICAgIEphdmFNb2ZGaWVsZFZpc2l0b3JBY3Rpb24gZmllbGRWaXNpdG9yQWN0aW9uID0gbmV3IEphdmFNb2ZGaWVsZFZpc2l0b3JBY3Rpb24oYmVhbkVsZW1lbnQsY2xpZW50UHJvamVjdCwgZW52Xyk7Ci0gICAgICAgLy9maWVsZFZpc2l0b3JBY3Rpb24uc2V0U3RhdHVzTW9uaXRvcihnZXRTdGF0dXNNb25pdG9yKCkpOwotICAgICAgIFZlY3RvciBjaGlsZFZlY3RvcjIgPSAoKFZlY3RvcilnZXRCZWFuc0NyZWF0ZWQoKS5jbG9uZSgpKTsKLSAgICAgICBjaGlsZFZlY3RvcjIuYWRkRWxlbWVudChqYXZhQ2xhc3MuZ2V0TmFtZSgpKTsgIAotICAgICAgIGZpZWxkVmlzaXRvckFjdGlvbi5zZXRCZWFuc0NyZWF0ZWQoY2hpbGRWZWN0b3IyKTsKLSAgICAgICBmaWVsZFZpc2l0b3JBY3Rpb24uc2V0UmV0dXJuUGFyYW0oZ2V0UmV0dXJuUGFyYW0oKSk7Ci0gICAgICAgSmF2YU1vZkZpZWxkVmlzaXRvciBmaWVsZFZpc2l0b3IgPSBuZXcgSmF2YU1vZkZpZWxkVmlzaXRvcigpOwotICAgICAgIGZpZWxkVmlzaXRvci5zZXRQcm9qZWN0KGdldFByb2plY3QoKSk7Ci0gICAgICAgc3RhdHVzID0gZmllbGRWaXNpdG9yLnJ1bihqYXZhQ2xhc3MsZmllbGRWaXNpdG9yQWN0aW9uKTsKLSAgICAgICAvLwotICAgICAgIHNldmVyaXR5ID0gc3RhdHVzLmdldFNldmVyaXR5KCk7IAotICAgICAgIGlmIChzZXZlcml0eT09U3RhdHVzLkVSUk9SKQotICAgICAgIAlyZXR1cm4gc3RhdHVzOwotICAgICAgIAotICAgICAgIGlmIChzZXZlcml0eT09U3RhdHVzLldBUk5JTkcpCi0gICAgICAgewotICAgICAgICAgQ2hvaWNlIHJlc3VsdCA9IGVudl8uZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydChzdGF0dXMsIG5ldyBDaG9pY2VbXXtPS0Nob2ljZSwgQ2FuY2VsQ2hvaWNlfSk7Ci0gICAgICAgICBpZiAocmVzdWx0LmdldExhYmVsKCkuZXF1YWxzKENhbmNlbENob2ljZS5nZXRMYWJlbCgpKSkKLSAgICAgICAgIHsKLSAgICAgICAgIAkgLy9yZXR1cm4gYW4gZXJyb3Igc3RhdHVzIHNpbmNlIHRoZSB1c2VyIGNhbmNlbGVkCi0gICAgICAgICAJICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX1NBTVBMRV9DUkVBVElPTl9DQU5DRUxFRCApOwotICAgICAgICAgfQotICAgICAgICAgCQotICAgICAgIH0KLSAgICAgICAvLyAgICAgICAKLSAgICAgICAKLSAgIH0KLQotICAgIC8vdGhpcyBpcyB0byBpbnN1cmUgd2UgYXJlIG9uIHRoZSBwcm94eQotICAgIC8vbm93IGRvIHRoZSBtZXRob2RzCi0gICAgaWYgKGJlYW5FbGVtZW50ID09IGZNb2RlbC5nZXRSb290RWxlbWVudCgpKXsKLSAgICAgIC8vZmlyc3QgbGV0cyBtYWtlIHN1cmUgdGhlIHByb3h5IGlzIGluIGdvb2QgZm9ybQotICAgICAgLy8taXQgaGFzIGEgZGVmYXVsdCBjb25zdHJ1Y3RvcgotICAgICAgLy8taXQgaGFzIGF0IGxlYXN0IG9uZSBtZXRob2QKLSAgICAgIC8vb3RoZXJ3aXNlIHJldHVybiB0aGUgcHJvYmxlbSBpbiB0aGUgZm9ybSBvZiBhIHN0YXR1cwotCi0gICAgICBpZiAoIXByb3h5Q2hlY2soamF2YUNsYXNzLCBzdGF0dXMpKSByZXR1cm4gc3RhdHVzOwotICAgICAgSmF2YU1vZk1ldGhvZFZpc2l0b3JBY3Rpb24gbWV0aG9kVmlzaXRvckFjdGlvbiA9IG5ldyBKYXZhTW9mTWV0aG9kVmlzaXRvckFjdGlvbihiZWFuRWxlbWVudCxjbGllbnRQcm9qZWN0LCBlbnZfKTsKLSAgICAgIAotICAgICAgLy9tZXRob2RWaXNpdG9yQWN0aW9uLnNldFN0YXR1c01vbml0b3IoZ2V0U3RhdHVzTW9uaXRvcigpKTsKLSAgICAgIEphdmFNb2ZNZXRob2RWaXNpdG9yIG1ldGhvZFZpc2l0b3IgPSBuZXcgSmF2YU1vZk1ldGhvZFZpc2l0b3IoKTsKLSAgICAgIG1ldGhvZFZpc2l0b3Iuc2V0TWV0aG9kU2VsZWN0aW9uKGZNZXRob2RzU2VsZWN0ZWQpOwotICAgICAgc3RhdHVzID0gbWV0aG9kVmlzaXRvci5ydW4oamF2YUNsYXNzLG1ldGhvZFZpc2l0b3JBY3Rpb24pOwotCi0gICAgICAvLwotICAgICAgaW50IHNldmVyaXR5ID0gc3RhdHVzLmdldFNldmVyaXR5KCk7IAotICAgICAgaWYgKHNldmVyaXR5PT1TdGF0dXMuRVJST1IpCi0gICAgICAJcmV0dXJuIHN0YXR1czsKLSAgICAgIAotICAgICAgaWYgKHNldmVyaXR5PT1TdGF0dXMuV0FSTklORykKLSAgICAgIHsKLSAgICAgICAgQ2hvaWNlIHJlc3VsdCA9IGVudl8uZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydChzdGF0dXMsIG5ldyBDaG9pY2VbXXtPS0Nob2ljZSwgQ2FuY2VsQ2hvaWNlfSk7Ci0gICAgICAgIGlmIChyZXN1bHQuZ2V0TGFiZWwoKS5lcXVhbHMoQ2FuY2VsQ2hvaWNlLmdldExhYmVsKCkpKQotICAgICAgICB7Ci0gICAgICAgIAkgLy9yZXR1cm4gYW4gZXJyb3Igc3RhdHVzIHNpbmNlIHRoZSB1c2VyIGNhbmNlbGVkCi0gICAgICAgIAkgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfU0FNUExFX0NSRUFUSU9OX0NBTkNFTEVEICk7Ci0gICAgICAgIH0KLSAgICAgICAgCQotICAgICAgfQotICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAvL1RoaXMgaXMgd2hlcmUgd2UgY2hlY2sgZm9yIHNldmVyYWwgdGhpbmdzOgotICAgICAgLy8taWYgbm8gbWV0aG9kcyB3ZXJlIHByb2Nlc3NlZCBiZWNhdXNlIG9mIHVuc3VwcG9ydGVkIHR5cGVzIHRoZW4gd2Ugc2VuZCBiYWNrIHRoYXQgcmVzdWx0Ci0gICAgICAvLy1pZiB0aGVyZSB3ZXJlIGFueSBtZXRob2RzIG9taXR0ZWQgd2Ugc2hvdWxkIHdhcm4gdGhlbQotCi0gICAgICAvL2ZpcnN0IG5vIG1ldGhvZHMKLSAgICAgIGlmICghbWV0aG9kVmlzaXRvckFjdGlvbi53ZXJlTWV0aG9kc1Byb2Nlc3NlZCgpKXsKLSAgICAgICAgLy90aGlzIGhhcyB0byBiZSBkb25lIHRvIGluc3VyZSB0aGUgZGlhbG9nIGlzIGFuIGVycm9yCi0gICAgICAJc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX0pUU19OT19QUk9YWV9NRVRIT0RTX1BST0NFU1NFRCApOwotICAgICAgCXJldHVybiBzdGF0dXM7Ci0gICAgICAgIC8vZ2V0U3RhdHVzTW9uaXRvcigpLnJlcG9ydFN0YXR1cyggbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLFdlYlNlcnZpY2VDb25zdW1wdGlvblBsdWdpbi5JRCwwLAotICAgICAgICAvLwkJV2ViU2VydmljZUNvbnN1bXB0aW9uUGx1Z2luLmdldE1lc3NhZ2UoICIlTVNHX0VSUk9SX0pUU19OT19QUk9YWV9NRVRIT0RTX1BST0NFU1NFRCIgKSxudWxsKSk7Ci0gICAgICB9ICAgICAgICAJCi0gICAgICAvL25vdyBtZXRob2RzIG9taXR0ZWQKLSAgICAgIGVsc2UgaWYobWV0aG9kVmlzaXRvckFjdGlvbi53ZXJlTWV0aG9kc09taXR0ZWQoKSl7Ci0gICAgICAgIC8vVGhlIGRpYWxvZyBpcyBhbHJlYWR5IGEgd2FybmluZyBzbyB3ZSBqdXN0IG5lZWQgdG8gc2V0IHRoZSBvdmVyYWxsIG1lc3NhZ2UKLSAgICAgIAlzdGF0dXMgPSBTdGF0dXNVdGlscy53YXJuaW5nU3RhdHVzKCBDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19XQVJOX0pUU19QUk9YWV9NRVRIT0RTX09NSVRURUQgKTsKLSAgICAgIAlyZXR1cm4gc3RhdHVzOwotICAgICAgICAvL2dldFN0YXR1c01vbml0b3IoKS5yZXBvcnRTdGF0dXMoIG5ldyBTdGF0dXMoSVN0YXR1cy5XQVJOSU5HLFdlYlNlcnZpY2VDb25zdW1wdGlvblBsdWdpbi5JRCwwLAotICAgICAgICAvLwkJQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfV0FSTl9KVFNfUFJPWFlfTUVUSE9EU19PTUlUVEVELG51bGwpKTsKLSAgICAgIH0JCi0gICAgfQotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBpbml0aWFsaXplKFN0cmluZyByZXNpZGVudCkKLSAgewotICAgIC8vbm90aGluZyB0byBiZSBkb25lIGJ1dCBtdXN0IGJlIGltcGxlbWVudGVkCi0gIH0KLQotCi0gIC8qCi0gICogUmV0dXJuIHRoZSBtb2RlbCB0aGF0IHdhcyBjcmVhdGVkCi0gICogQHJldHVybiBNb2RlbCB0aGUgYmVhbiBtb2RlbCB0aGF0IHdhcyBjcmVhdGVkCi0gICovCi0gIHB1YmxpYyBNb2RlbCBnZXRNb2RlbCgpCi0gIHsKLSAgICByZXR1cm4gZk1vZGVsOwotICB9Ci0KLSAgLyoKLSAgKiBUaGUgcHJveHkgY2hlY2sgaW5zdXJlcyB0aGVyZSBpcyBhIGRlZmF1bHQgY29uc3RydWN0b3IgYW5kCi0gICogYXQgTGVhc3Qgb25lIG1ldGhvZAotICAqIEBwYXJhbSBKYXZhQ2xhc3MgamF2YUNsYXNzIGlzIHVzZWQgdG8gdHJhdmVyc2UgdGhlIG1ldGhvZHMgb24gdGhlIHByb3h5Ci0gICovCi0gIHB1YmxpYyBib29sZWFuIHByb3h5Q2hlY2soSmF2YUNsYXNzIGphdmFDbGFzcywgSVN0YXR1cyBzdGF0dXMpCi0gIHsKLSAgICAgLy8gZmlyc3QgY2hlY2sgZm9yIGEgbWV0aG9kCi0gICAgIEl0ZXJhdG9yIG09amF2YUNsYXNzLmdldFB1YmxpY01ldGhvZHMoKS5pdGVyYXRvcigpOwotICAgICBpZiAoIW0uaGFzTmV4dCgpKXsKLSAgICAgCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9KVFNfUFJPWFlfSEFTX05PX01FVEhPRFMgKTsKLSAgICAgICAvL2dldFN0YXR1c01vbml0b3IoKS5yZXBvcnRTdGF0dXMoIG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUixXZWJTZXJ2aWNlQ29uc3VtcHRpb25QbHVnaW4uSUQsMCwKLSAgICAgICAvLwkJCUNvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX0pUU19QUk9YWV9IQVNfTk9fTUVUSE9EUyxudWxsKSk7Ci0gICAgICAgcmV0dXJuIGZhbHNlOwotICAgICB9CQotICAgICAvL25vdyBjaGVjayBmb3IgYSBkZWZhdWx0IGNvbnN0cnVjdG9yCi0gICAgIHdoaWxlIChtLmhhc05leHQoKSkgewotICAgICAgIE1ldGhvZCBtZXRob2Q9KE1ldGhvZCltLm5leHQoKTsKLSAgICAgICBpZiAoamF2YUNsYXNzLmdldE5hbWUoKS5lcXVhbHMobWV0aG9kLmdldE5hbWUoKSkpewotICAgICAgICAgIC8vbm93IHRoZSBpbnB1dHMKLSAgICAgICAgICBKYXZhUGFyYW1ldGVyIGphdmFQYXJhbWV0ZXJbXSA9IG1ldGhvZC5saXN0UGFyYW1ldGVyc1dpdGhvdXRSZXR1cm4oKTsKLSAgICAgICAgICBpZiAoamF2YVBhcmFtZXRlci5sZW5ndGggPT0gMCkKLSAgICAgICAgCSAgcmV0dXJuIHRydWU7Ci0gICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0KLSAgfQotCi0gLyoqCi0gICogU2V0cyB0aGUgc3RhdHVzIG1vbml0b3IgdGhhdCB0aGlzIGFjdGlvbiB3aWxsIHVzZSB0byByZXBvcnQgc3RhdHVzIHRoYXQgb2NjcmVzIHdoaWxlIGV4ZWN1dGluZyB0aGUgQWN0aW9uLgotICAqLwotICBwdWJsaWMgdm9pZCBzZXRTdGF0dXNNb25pdG9yICggU3RhdHVzTW9uaXRvciBtb25pdG9yICkKLSAgewotCW1vbml0b3JfID0gbW9uaXRvcjsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIHN0YXR1cyBtb25pdG9yIHRoYXQgdGhpcyB0YXNrIGlzIHVzaW5nIHRvIHJlcG9ydCBzdGF0dXMuCi0gICovCi0gIHB1YmxpYyBTdGF0dXNNb25pdG9yIGdldFN0YXR1c01vbml0b3IgKCkKLSAgewotICAgIGlmIChtb25pdG9yXyA9PSBudWxsKQotICAgIHsKLSAgICAgIG1vbml0b3JfID0gbmV3IE51bGxTdGF0dXNNb25pdG9yKCk7Ci0gICAgfQotICAgIHJldHVybiBtb25pdG9yXzsKLSAgfQotCi0KLSAgIC8qKgotICAqIGNoZWNrIGlmIHRoZSBhY3Rpb24gaGFzIGZpbmlzaGVkIHN1Y3Nlc3NmdWxseSAKLSAgKi8KLSAgLyoKLSAgcHVibGljIGJvb2xlYW4gaXNTdWNjZXNzZnVsICgpCi0gIHsKLSAgIAlyZXR1cm4gZ2V0U3RhdHVzTW9uaXRvcigpLmNhbkNvbnRpbnVlKCk7Ci0gIH0KLSAgKi8gCi0gIHB1YmxpYyB2b2lkIHJlc2V0QmVhbnNDcmVhdGVkKCkKLSAgewotICAgIGZCZWFuc0NyZWF0ZWQgPSBuZXcgVmVjdG9yKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRFbnZpcm9ubWVudChJRW52aXJvbm1lbnQgZW52KQotICB7Ci0gIAllbnZfID0gZW52OwotICB9Ci0gIAotICAvKgotICAqIFRoZSBjb21tYW5kIHRoYXQgY2FsbGVkIHRoaXMgd2lsbCBnZXQgdGhlIHJlc3VsdHMgb2YgdGhlIG9wZXJhdGlvbiBpbiB0aGUgZm9ybQotICAqIG9mIGEgc3RhdHVzLgotICAqLwotICBwdWJsaWMgVmVjdG9yIGdldEJlYW5zQ3JlYXRlZCAoKQotICB7Ci0gICAgaWYoZkJlYW5zQ3JlYXRlZCA9PSBudWxsKSBmQmVhbnNDcmVhdGVkID0gbmV3IFZlY3RvcigpOwotICAgIHJldHVybiBmQmVhbnNDcmVhdGVkOwotICB9Ci0KLSAgLyoKLSAgKiBUaGUgY29tbWFuZCB0aGF0IGNhbGxlZCB0aGlzIHdpbGwgZ2V0IHRoZSByZXN1bHRzIG9mIHRoZSBvcGVyYXRpb24gaW4gdGhlIGZvcm0KLSAgKiBvZiBhIHN0YXR1cy4KLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0QmVhbnNDcmVhdGVkIChWZWN0b3IgYmVhbnNDcmVhdGVkKQotICB7Ci0gICAgZkJlYW5zQ3JlYXRlZCA9IGJlYW5zQ3JlYXRlZDsKLSAgfQotCi0gICAvKgotICAqIFRoaXMgYm9vbGVhbiB0ZWxscyB3ZXRoZXIgd2UgYXJlIGRlYWxpbmcgd2l0aCBhIHJldHVybiBwYXJhbSAKLSAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0UmV0dXJuUGFyYW0gKCkKLSAgewotICAgIHJldHVybiBmUmV0dXJuUGFyYW07Ci0gIH0KLQotICAvKgotICAqIFRoaXMgYm9vbGVhbiB0ZWxscyB3ZXRoZXIgd2UgYXJlIGRlYWxpbmcgd2l0aCBhIHJldHVybiBwYXJhbSAKLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0UmV0dXJuUGFyYW0gKGJvb2xlYW4gcmV0dXJucGFyYW0pCi0gIHsKLSAgICBmUmV0dXJuUGFyYW0gPSByZXR1cm5wYXJhbTsKLSAgfQotCi0gICAvKgotICAqIFRoaXMgYm9vbGVhbiB0ZWxscyB3ZXRoZXIgd2UgYXJlIGRlYWxpbmcgd2l0aCBhIHJldHVybiBwYXJhbSAKLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRQcm9qZWN0ICgpCi0gIHsKLSAgICByZXR1cm4gY2xpZW50UHJvamVjdDsKLSAgfQotCi0gIC8qCi0gICogVGhpcyBib29sZWFuIHRlbGxzIHdldGhlciB3ZSBhcmUgZGVhbGluZyB3aXRoIGEgcmV0dXJuIHBhcmFtIAotICAqLwotICBwdWJsaWMgdm9pZCBzZXRQcm9qZWN0IChTdHJpbmcgY2xpZW50UHJvamVjdCkKLSAgewotICAgIHRoaXMuY2xpZW50UHJvamVjdCA9IGNsaWVudFByb2plY3Q7Ci0gIH0KLQotCi0gIC8qKgotICAqIHNldHMgdGhlIHZpc2l0b3IgdGhhdCBjYWxscyB0aGUgdmlzaXQKLSAgKiBAcGFyYW1ldGVyIFZpc2l0b3IKLSAgKi8KLQotICBwdWJsaWMgdm9pZCBzZXRWaXNpdG9yKFZpc2l0b3IgdmlzaXRvcikKLSAgewotICAgICAgZlZpc2l0b3IgPSB2aXNpdG9yOwotICB9Ci0KLSAgLyoKLSAgKiBTZXRzIHRoZSBwYXJlbnQgZWxlbWVudCB0aGUgY2hpbGQgdGhlbiBrbm93cyB3aGVyZSB0bwotICAqIGFkZCBpdHNlbGYgdG8gdGhlIG1vZGVsCi0gICogQHBhcmFtIEVsZW1lbnQgcGFyZW50IGVsZW1lbnQKLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0UGFyZW50RWxlbWVudChFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBmUGFyZW50RWxlbWVudCA9IGVsZW1lbnQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcmFjdGlvbnMvSmF2YU1vZkZpZWxkVmlzaXRvckFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9yYWN0aW9ucy9KYXZhTW9mRmllbGRWaXNpdG9yQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2NDI1N2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9yYWN0aW9ucy9KYXZhTW9mRmllbGRWaXNpdG9yQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5qYXZhbW9mdmlzaXRvcmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkZpZWxkOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkphdmFIZWxwZXJzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5Db25zdW1wdGlvbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLmphdmFtb2Z2aXNpdG9ycy5KYXZhTW9mVHlwZVZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuQmVhbk1vZGVsRWxlbWVudHNGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsLkZpZWxkRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbC5UeXBlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JTG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuU3RhdHVzRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuRWxlbWVudDsKLQotCi0vKioKLSogT2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIEphdmFNb2ZCZWFuVmlzaXRvckFjdGlvbi4KLSogVGhpcyBWaXNpdG9yQWN0aW9uIHdpbGwgY3JlYXRlIGEgQXR0cmlidXRlRWxlbWVudCB1c2luZyB0aGUKLSogSmF2YUNsYXNzIGFuZCB0aGUgQmVhbk1vZGVsRWxlbWVudHNGYWN0b3J5Ci0qIEl0IHdpbGwgYWxzbyBhdXRvbWF0aWNhbGx5IHdhbGsgYSBjb21wbGV4IHR5cGUKLSogKi8KLXB1YmxpYyBjbGFzcyBKYXZhTW9mRmllbGRWaXNpdG9yQWN0aW9uIGV4dGVuZHMgSmF2YU1vZkJlYW5WaXNpdG9yQWN0aW9uCi17Ci0KLSAgLyoKLSAgKkNvbnN0cnVjdG9yCi0gICoqLwotICBwdWJsaWMgSmF2YU1vZkZpZWxkVmlzaXRvckFjdGlvbihFbGVtZW50IHBhcmVudEVsZW1lbnQsIFN0cmluZyBwcm9qZWN0LCBJRW52aXJvbm1lbnQgZW52KQotICB7Ci0gICAgc3VwZXIocGFyZW50RWxlbWVudCxwcm9qZWN0LCBlbnYpOwotICB9Ci0KLQotICBwdWJsaWMgSVN0YXR1cyB2aXNpdCAoT2JqZWN0IGZpZWxkXykKLSAgewotICAJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAgIEZpZWxkIGZpZWxkID0gKEZpZWxkKWZpZWxkXzsKLSAgICAgCi0gICAgdHJ5ewotICAgICAgIC8vaWYgdGhlIHR5cGUgb2YgdGhpcyBhdHRyaWJ1dGUgaXMgdW5zdXBwb3J0ZWQgZG9udCBtYWtlIGFuIEF0dHJpYnV0ZQotICAgICAgaWYoIShnZXRSZXR1cm5QYXJhbSgpICYmIFR5cGVGYWN0b3J5LmlzUmVjb2duaXplZFJldHVyblR5cGUoKEphdmFIZWxwZXJzKWZpZWxkLmdldEphdmFDbGFzcygpKSkgCi0gICAgICAJJiYgKFR5cGVGYWN0b3J5LmlzVW5TdXBwb3J0ZWRUeXBlKChKYXZhSGVscGVycylmaWVsZC5nZXRKYXZhQ2xhc3MoKSkpKXsKLSAgICAgIAkgIHN0YXR1cyA9IFN0YXR1c1V0aWxzLndhcm5pbmdTdGF0dXMoIENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX1dBUk5fSlRTX1VOU1VQUE9SVEVEX1RZUEUgKyAoKEphdmFIZWxwZXJzKWZpZWxkLmdldEphdmFDbGFzcygpKS5nZXRKYXZhTmFtZSgpICk7Ci0JICAgICAgLy9nZXRTdGF0dXNNb25pdG9yKCkucmVwb3J0U3RhdHVzKCBuZXcgU3RhdHVzKElTdGF0dXMuV0FSTklORyxXZWJTZXJ2aWNlQ29uc3VtcHRpb25QbHVnaW4uSUQsMCwKLQkgICAgICAvL0NvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX1dBUk5fSlRTX1VOU1VQUE9SVEVEX1RZUEUgKyAoKEphdmFIZWxwZXJzKWZpZWxkLmdldEphdmFDbGFzcygpKS5nZXRKYXZhTmFtZSgpLG51bGwpKTsKLQkgICAgICByZXR1cm4gc3RhdHVzOwotCSAgfQkKLQotCi0gICAgICBGaWVsZEVsZW1lbnQgZmllbGRFbGVtZW50ID0gKEZpZWxkRWxlbWVudClCZWFuTW9kZWxFbGVtZW50c0ZhY3RvcnkuZ2V0QmVhbk1vZGVsRWxlbWVudChmaWVsZCxmUGFyZW50RWxlbWVudCk7Ci0KLSAgICAgIGlmKGZpZWxkRWxlbWVudCAhPSBudWxsKXsKLSAgICAgICAgLy9sZXRzIGNoZWNrIGFuZCBzZWUgaWYgdGhlIGdldHRlciB0YWtlcyBpbnB1dCBwYXJhbXMKLSAgICAgICAgLy9pZiBzbyB0aHJvdyBhbiBlcnJvcgotICAgICAgICAvL25vdyB0aGUgaW5wdXRzCi0gICAgICAgIAotICAgICAgICBKYXZhTW9mVHlwZVZpc2l0b3JBY3Rpb24gdHlwZVZpc2l0b3JBY3Rpb24gPSBuZXcgSmF2YU1vZlR5cGVWaXNpdG9yQWN0aW9uKGZpZWxkRWxlbWVudCxjbGllbnRQcm9qZWN0LCBlbnZfKTsKLSAgICAgICAgdHlwZVZpc2l0b3JBY3Rpb24uc2V0U3RhdHVzTW9uaXRvcihnZXRTdGF0dXNNb25pdG9yKCkpOwotICAgICAgICB0eXBlVmlzaXRvckFjdGlvbi5zZXRCZWFuc0NyZWF0ZWQoZ2V0QmVhbnNDcmVhdGVkKCkpOwotICAgICAgICB0eXBlVmlzaXRvckFjdGlvbi5zZXRSZXR1cm5QYXJhbShnZXRSZXR1cm5QYXJhbSgpKTsgCi0gICAgICAgIEphdmFNb2ZUeXBlVmlzaXRvciB0eXBlVmlzaXRvciA9IG5ldyBKYXZhTW9mVHlwZVZpc2l0b3IoZW52Xyk7Ci0gICAgICAgIHR5cGVWaXNpdG9yLnNldENsaWVudFByb2plY3QoZ2V0UHJvamVjdCgpKTsKLSAgICAgICAgc3RhdHVzID0gdHlwZVZpc2l0b3IucnVuKGZpZWxkLHR5cGVWaXNpdG9yQWN0aW9uKTsKLSAgICAgICAKLSAgICAgIH0KLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgCi0gICAgfWNhdGNoKEV4Y2VwdGlvbiBlKQotCXsKLSAgICAJZW52Xy5nZXRMb2coKS5sb2coSUxvZy5XQVJOSU5HLCA1MDU1LCB0aGlzLCAidmlzaXQiLCBlKTsKLSAgICAJc3RhdHVzID0gU3RhdHVzVXRpbHMud2FybmluZ1N0YXR1cygJQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfSlRTX0pTUF9HRU4sIGUpOwotICAgIAl0cnkgewotICAgIAkJZW52Xy5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0KHN0YXR1cyk7Ci0gICAgCX0gCi0gICAgICBjYXRjaCAoU3RhdHVzRXhjZXB0aW9uIGUxKSAKLSAgICAgIHsKLSAgICAJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX0pUU19KU1BfR0VOLCBlMSApOwotICAgIAl9Ci0gICAgCXJldHVybiBzdGF0dXM7Ci0JfQotCi0gIH0KLSAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcmFjdGlvbnMvSmF2YU1vZk1ldGhvZFZpc2l0b3JBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcmFjdGlvbnMvSmF2YU1vZk1ldGhvZFZpc2l0b3JBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE1MTY2NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vamF2YW1vZnZpc2l0b3JhY3Rpb25zL0phdmFNb2ZNZXRob2RWaXNpdG9yQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uamF2YW1vZnZpc2l0b3JhY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkphdmFDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhSGVscGVyczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLk1ldGhvZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uQ29uc3VtcHRpb25NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5qYXZhbW9mdmlzaXRvcnMuSmF2YU1vZlBhcmFtZXRlclZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuQmVhbk1vZGVsRWxlbWVudHNGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsLk1ldGhvZEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuVHlwZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuRWxlbWVudDsKLQotCi0vKioKLSogT2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIEphdmFNb2ZCZWFuVmlzaXRvckFjdGlvbi4KLSogVGhpcyBWaXNpdG9yQWN0aW9uIHdpbGwgY3JlYXRlIGEgQmVhbkVsZW1lbnQgdXNpbmcgdGhlIAotKiBKYXZhQ2xhc3MgYW5kIHRoZSBCZWFuTW9kZWxFbGVtZW50c0ZhY3RvcnkKLSogSXQgd2lsbCBhbHNvIGF1dG9tYXRpY2FsbHkgd2FsayB0aGUgbWV0aG9kcyBpbiB0aGUgSmF2YUNsYXNzCi0qICovCi1wdWJsaWMgY2xhc3MgSmF2YU1vZk1ldGhvZFZpc2l0b3JBY3Rpb24gZXh0ZW5kcyBKYXZhTW9mQmVhblZpc2l0b3JBY3Rpb24gCi17Ci0KLSAgcHVibGljIFN0cmluZyBmVW5zdXBwb3J0ZWRQYXJhbWV0ZXJOYW1lOwotCi0gLyoKLSAgKiBNZXRob2RzIG9taXR0ZWQgZnJvbSB0aGUgcHJveHkKLSAgKi8KLSAgcHJvdGVjdGVkIFZlY3RvciBmTWV0aG9kc09taXR0ZWQ7Ci0KLSAgLyoKLSAgKiBNZXRob2RzIHByb2Nlc3NlZCBmcm9tIHByb3h5Ci0gICovCi0gIHByb3RlY3RlZCBWZWN0b3IgZk1ldGhvZHNQcm9jZXNzZWQ7Ci0KLSAgICAgCi0gIC8qCi0gICpDb25zdHJ1Y3RvcgotICAqKi8KLSAgcHVibGljIEphdmFNb2ZNZXRob2RWaXNpdG9yQWN0aW9uKEVsZW1lbnQgcGFyZW50RWxlbWVudCxTdHJpbmcgcHJvamVjdCwgSUVudmlyb25tZW50IGVudikKLSAgewotICAgIHN1cGVyKHBhcmVudEVsZW1lbnQscHJvamVjdCwgZW52KTsKLSAgICBmTWV0aG9kc09taXR0ZWQgPSBuZXcgVmVjdG9yKCk7Ci0gICAgZk1ldGhvZHNQcm9jZXNzZWQgPSBuZXcgVmVjdG9yKCk7Ci0KLSAgfQotICAgCi0gIC8qKgotICAqIENyZWF0ZSBhIG1ldGhvZCBlbGVtZW50IGZyb20gdGhlIG1ldGhvZCAKLSAgKiBAcGFyYW0gTWV0aG9kIHRoZSBjbGFzcyB0byBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgbWV0aG9kCi0gICoqLwotICBwdWJsaWMgSVN0YXR1cyB2aXNpdCAoT2JqZWN0IGltZXRob2QpCi0gIHsKLSAgCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICBNZXRob2QgbWV0aG9kID0gKE1ldGhvZClpbWV0aG9kOwotICAgICAgICAgICAKLSAgICBpZiAobWV0aG9kQ2hlY2sobWV0aG9kKSl7Ci0gICAgICAvL3RoaXMgaXMgdG8gY2hlY2sgaW1tZWRpYXRlIGlucHV0IGFuZCByZXR1cm4gcGFyYW1ldGVycwotICAgICAgLy9pZiB0aGVyZSBpcyBhbiB1bnN1cHBvcnRlZCB0eXBlIGluIHRoZXNlIHdlIGNhbiByZWFjdCBpbW1lZGlhdGVseQotICAgICAgLy93ZSBhZGQgaXQgdG8gdGhlIG9taXR0ZWQgbWV0aG9kcyBhbiBnbyB0byB0aGUgbmV4dCBvbmUKLSAgICAgIGlmKCFwYXJhbWV0ZXJDaGVjayhtZXRob2QpKXsKLSAgICAgIAlzdGF0dXMgPSBTdGF0dXNVdGlscy53YXJuaW5nU3RhdHVzKENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX1dBUk5fSlRTX1VOU1VQUE9SVEVEX1BBUkFNRVRFUlNfQVJSQVlTICsgZlVuc3VwcG9ydGVkUGFyYW1ldGVyTmFtZSApOwotICAgICAgICAvL2dldFN0YXR1c01vbml0b3IoKS5yZXBvcnRTdGF0dXMgKG5ldyBTdGF0dXMoSVN0YXR1cy5XQVJOSU5HLFdlYlNlcnZpY2VDb25zdW1wdGlvblBsdWdpbi5JRCwwLAotICAgICAgICAvLwkJQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfV0FSTl9KVFNfVU5TVVBQT1JURURfUEFSQU1FVEVSU19BUlJBWVMgKyBmVW5zdXBwb3J0ZWRQYXJhbWV0ZXJOYW1lLG51bGwpKTsKLSAgICAgICAgZk1ldGhvZHNPbWl0dGVkLmFkZEVsZW1lbnQobWV0aG9kLmdldE1ldGhvZEVsZW1lbnRTaWduYXR1cmUoKSk7Ci0gICAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgICB9Ci0gICAgICBpZighbnVsbENvbnN0cnVjdG9yKG1ldGhvZCkpewotICAgICAgCXN0YXR1cyA9IFN0YXR1c1V0aWxzLndhcm5pbmdTdGF0dXMoIENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX1dBUk5fSlRTX1VOU1VQUE9SVEVEX1BBUkFNRVRFUlNfSU5QVVRTICsgZlVuc3VwcG9ydGVkUGFyYW1ldGVyTmFtZSApOwotICAgICAgICAvL2dldFN0YXR1c01vbml0b3IoKS5yZXBvcnRTdGF0dXMgKG5ldyBTdGF0dXMoSVN0YXR1cy5XQVJOSU5HLFdlYlNlcnZpY2VDb25zdW1wdGlvblBsdWdpbi5JRCwwLAotICAgICAgIAkvLwlDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19XQVJOX0pUU19VTlNVUFBPUlRFRF9QQVJBTUVURVJTX0lOUFVUUyArIGZVbnN1cHBvcnRlZFBhcmFtZXRlck5hbWUsbnVsbCkpOwotICAgICAgICBmTWV0aG9kc09taXR0ZWQuYWRkRWxlbWVudChtZXRob2QuZ2V0TWV0aG9kRWxlbWVudFNpZ25hdHVyZSgpKTsKLSAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgIAotICAgICAgfQotCi0gICAgICAvL2NhcnJ5IG9uIGFsbCBwYXJhbWV0ZXJzIHN1cHBvcnRlZAotICAgICAgTWV0aG9kRWxlbWVudCBtZXRob2RFbGVtZW50ID0gKE1ldGhvZEVsZW1lbnQpQmVhbk1vZGVsRWxlbWVudHNGYWN0b3J5LmdldEJlYW5Nb2RlbEVsZW1lbnQobWV0aG9kLGZQYXJlbnRFbGVtZW50KTsKLSAgICAgIEphdmFNb2ZQYXJhbWV0ZXJWaXNpdG9yQWN0aW9uIHBhcmFtZXRlclZpc2l0b3JBY3Rpb24gPSBuZXcgSmF2YU1vZlBhcmFtZXRlclZpc2l0b3JBY3Rpb24obWV0aG9kRWxlbWVudCxjbGllbnRQcm9qZWN0LGVudl8pOwotICAgICAgcGFyYW1ldGVyVmlzaXRvckFjdGlvbi5zZXRTdGF0dXNNb25pdG9yKGdldFN0YXR1c01vbml0b3IoKSk7Ci0gICAgICBKYXZhTW9mUGFyYW1ldGVyVmlzaXRvciBwYXJhbWV0ZXJWaXNpdG9yID0gbmV3IEphdmFNb2ZQYXJhbWV0ZXJWaXNpdG9yKGVudl8pOwotICAgICAgc3RhdHVzID0gcGFyYW1ldGVyVmlzaXRvci5ydW4obWV0aG9kLHBhcmFtZXRlclZpc2l0b3JBY3Rpb24pOyAgIAotICAgICAgLy9zb21ldGhpbmcgbWF5IGhhdmUgZ29uZSB3cm9uZyB3aXRoIGFuIGludGVybmFsIHR5cGUKLSAgICAgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSE9U3RhdHVzLk9LKXsKLSAgICAgICAgLy9UaGlzIG1ldGhvZCBoYXMgdG8gYmUgb21pdHRlZAotICAgICAgICBmTWV0aG9kc09taXR0ZWQuYWRkRWxlbWVudChtZXRob2QuZ2V0TWV0aG9kRWxlbWVudFNpZ25hdHVyZSgpKTsKLSAgICAgICAgbWV0aG9kRWxlbWVudC5zZXRNZXRob2RPbW1pc3Npb24odHJ1ZSk7ICAKLSAgICAgIH0JCi0gICAgICBlbHNlIHsKLSAgICAgICAgZk1ldGhvZHNQcm9jZXNzZWQuYWRkRWxlbWVudChtZXRob2QuZ2V0TWV0aG9kRWxlbWVudFNpZ25hdHVyZSgpKTsKLSAgICAgIH0JCi0gICAgfQotICAgIAotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0KLSAKLSAgLyoKLSAgKiBUZWxscyB3ZXRoZXIgYW55IG1ldGhvZHMgd2VyZSBwcm9jZXNzZWQgCi0gICogQHJldHVybiBib29sZWFuIHRydWUgaWYgYW55IG1ldGhvZHMgd2VyZSBwcm9jZXNzZWQgCi0gICovCi0gIHB1YmxpYyBib29sZWFuIHdlcmVNZXRob2RzUHJvY2Vzc2VkKCkKLSAgewotICAgIGlmKGZNZXRob2RzUHJvY2Vzc2VkLmlzRW1wdHkoKSkgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoKLSAgKiBUZWxscyB3ZXRoZXIgdGhlcmUgd2VyZSBtZXRob2RzIG9taXR0ZWQgYmVjYXVzZSBvZiB1bnN1cHBvcnRlZCB0eXBlcwotICAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIG1ldGhvZHMgd2VyZSBvbWl0dGVkCi0gICovCi0gIHB1YmxpYyBib29sZWFuIHdlcmVNZXRob2RzT21pdHRlZCgpCi0gIHsKLSAgICBpZihmTWV0aG9kc09taXR0ZWQuaXNFbXB0eSgpKSByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgCi0gIC8qKgotICAqIFRoZXJlIG1heSBiZSBtZXRob2RzIHRoYXQgd2UgZG9udCBzdXBwb3J0Ci0gICogYW5kIGRvbnQgd2FudCBpbiB0aGUgbW9kZWwKLSAgKiBAcGFyYW0gYm9vbGVhbiB0cnVlIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBmaW5lCi0gICoqLwotICBwdWJsaWMgYm9vbGVhbiBtZXRob2RDaGVjayhNZXRob2QgbWV0aG9kKQotICB7Ci0gICAgYm9vbGVhbiBvayA9IHRydWU7Ci0gICAgLy8gaWYgd2UgaGF2ZSBhIGNvbnN0cnVjdG9yIHdlIHJldHVybiBmYWxzZQotICAgIGlmIChtZXRob2QuaXNDb25zdHJ1Y3RvcigpKSByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAKLSAgICByZXR1cm4gb2s7Ci0gIH0KLQotICAvKioKLSAgKiBUaGVyZSBtYXkgYmUgcGFyYW1ldGVycyBvZiB0aGlzIG1ldGhvZCB0aGF0IGhhdmUgdHlwZXMKLSAgKiBub3QgeWV0IHN1cHBvcnRlZCByZXR1cm4gZmFsc2UgaWYgd2UgZmluZCBhbnkKLSAgKiBAcGFyYW0gYm9vbGVhbiB0cnVlIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBmaW5lCi0gICoqLwotICBwdWJsaWMgYm9vbGVhbiBwYXJhbWV0ZXJDaGVjayhNZXRob2QgbWV0aG9kKQotICB7Ci0KLSAgICBib29sZWFuIG9rID0gdHJ1ZTsKLSAgICAKLSAgICAvL25vdyB0aGUgaW5wdXRzCi0gICAgSmF2YVBhcmFtZXRlciBqYXZhUGFyYW1ldGVyW10gPSBtZXRob2QubGlzdFBhcmFtZXRlcnNXaXRob3V0UmV0dXJuKCk7IAotICAgIGZvciAoaW50IGkgPSAwO2k8amF2YVBhcmFtZXRlci5sZW5ndGg7aSsrKSB7Ci0gICAgICBKYXZhUGFyYW1ldGVyIHBhcmFtPWphdmFQYXJhbWV0ZXJbaV07Ci0gICAgICBKYXZhSGVscGVycyBqYXZhSGVscGVyMSA9IHBhcmFtLmdldEphdmFUeXBlKCk7Ci0gICAgICBpZihUeXBlRmFjdG9yeS5pc1VuU3VwcG9ydGVkVHlwZShqYXZhSGVscGVyMSkpIHsKLSAgICAgICAgZlVuc3VwcG9ydGVkUGFyYW1ldGVyTmFtZSA9IHBhcmFtLmdldE5hbWUoKTsgCi0gICAgCXJldHVybiBmYWxzZTsKLSAgICAgIH0gICAgCi0gICAgfQotICByZXR1cm4gb2s7Ci0gIH0KLQotIAotICAvKioKLSAgKiBUaGVyZSBtYXkgYmUgcGFyYW1ldGVycyBvZiB0aGlzIG1ldGhvZCB0aGF0IGhhdmUgdHlwZXMKLSAgKiBub3QgeWV0IHN1cHBvcnRlZCByZXR1cm4gZmFsc2UgaWYgd2UgZmluZCBhbnkKLSAgKiBAcGFyYW0gYm9vbGVhbiB0cnVlIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBmaW5lCi0gICoqLwotICBwdWJsaWMgYm9vbGVhbiBudWxsQ29uc3RydWN0b3IoTWV0aG9kIG1ldGhvZCkKLSAgewotICAgIAotICAgIGJvb2xlYW4gb2sgPSB0cnVlOwotICAgIC8vbm93IHRoZSBpbnB1dHMKLSAgICBKYXZhUGFyYW1ldGVyIGphdmFQYXJhbWV0ZXJbXSA9IG1ldGhvZC5saXN0UGFyYW1ldGVyc1dpdGhvdXRSZXR1cm4oKTsgCi0gICAgZm9yIChpbnQgaSA9IDA7aTxqYXZhUGFyYW1ldGVyLmxlbmd0aDtpKyspIHsKLSAgICAgIEphdmFQYXJhbWV0ZXIgcGFyYW09amF2YVBhcmFtZXRlcltpXTsKLSAgICAgIEphdmFIZWxwZXJzIGphdmFIZWxwZXIxID0gcGFyYW0uZ2V0SmF2YVR5cGUoKTsKLSAgICAgIGlmKGphdmFIZWxwZXIxIGluc3RhbmNlb2YgSmF2YUNsYXNzKXsKLSAgICAgICAgSmF2YUNsYXNzIGphdmFDbGFzcyA9IChKYXZhQ2xhc3MpamF2YUhlbHBlcjE7Ci0gICAgICAgIGlmKFR5cGVGYWN0b3J5LnJlY29nbml6ZWRCZWFuKGphdmFDbGFzcy5nZXRKYXZhTmFtZSgpKSlyZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBJdGVyYXRvciBtPWphdmFDbGFzcy5nZXRNZXRob2RzKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgICB3aGlsZSAobS5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgIE1ldGhvZCBtZXRob2QyPShNZXRob2QpbS5uZXh0KCk7Ci0gICAgICAgICAgICBpZiAoamF2YUNsYXNzLmdldE5hbWUoKS5lcXVhbHMobWV0aG9kMi5nZXROYW1lKCkpKXsKLSAgICAgICAgICAgICAgLy9ub3cgdGhlIGlucHV0cwotICAgICAgICAgICAgICBKYXZhUGFyYW1ldGVyIGphdmFQYXJhbVtdID0gbWV0aG9kMi5saXN0UGFyYW1ldGVyc1dpdGhvdXRSZXR1cm4oKTsKLSAgICAgICAgICAgICAgaWYgKGphdmFQYXJhbS5sZW5ndGggPiAwKXsKLSAgICAgICAgICAgICAgICAvL3RoZW4gd2UgaGF2ZSBubyBkZWZhdWx0IGNvbnN0cnVjdG9yCi0gICAgICAgICAgICAgICAgZlVuc3VwcG9ydGVkUGFyYW1ldGVyTmFtZSA9IHBhcmFtLmdldE5hbWUoKTsgCi0gICAgCSAgICAgICAgb2sgPSBmYWxzZTsKLSAgICAgICAgICAgICAgfSAgICAKLSAgICAgICAgICAgICAgZWxzZSByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0gCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gIHJldHVybiBvazsKLSAgfQotCi0gCi0KLQotCi0KLQotCi0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9yYWN0aW9ucy9KYXZhTW9mUGFyYW1ldGVyVmlzaXRvckFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9yYWN0aW9ucy9KYXZhTW9mUGFyYW1ldGVyVmlzaXRvckFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MmY1NDFlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcmFjdGlvbnMvSmF2YU1vZlBhcmFtZXRlclZpc2l0b3JBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLmphdmFtb2Z2aXNpdG9yYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLkNvbnN1bXB0aW9uTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uamF2YW1vZnZpc2l0b3JzLkphdmFNb2ZUeXBlVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbC5CZWFuTW9kZWxFbGVtZW50c0ZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuUGFyYW1ldGVyRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5DaG9pY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50OwotCi0KLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSBKYXZhTW9mQmVhblZpc2l0b3JBY3Rpb24uCi0qIFRoaXMgVmlzaXRvckFjdGlvbiB3aWxsIGNyZWF0ZSBhIHBhcmFtZXRlckVsZW1lbnQgdXNpbmcgdGhlIAotKiBKYXZhQ2xhc3MgYW5kIHRoZSBCZWFuTW9kZWxFbGVtZW50c0ZhY3RvcnkKLSogSXQgd2lsbCBhbHNvIGF1dG9tYXRpY2FsbHkgd2FsayB0byBpdHMgdHlwZQotKiAqLwotcHVibGljIGNsYXNzIEphdmFNb2ZQYXJhbWV0ZXJWaXNpdG9yQWN0aW9uIGV4dGVuZHMgSmF2YU1vZkJlYW5WaXNpdG9yQWN0aW9uIAotewotCi0KLSAgLyoKLSAgKkNvbnN0cnVjdG9yCi0gICoqLwotICBwdWJsaWMgSmF2YU1vZlBhcmFtZXRlclZpc2l0b3JBY3Rpb24oRWxlbWVudCBwYXJlbnRFbGVtZW50LFN0cmluZyBwcm9qZWN0LCBJRW52aXJvbm1lbnQgZW52KQotICB7Ci0gICAgc3VwZXIocGFyZW50RWxlbWVudCxwcm9qZWN0LCBlbnYpOwotICB9Ci0gICAKLSAgLyoqCi0gICogQ3JlYXRlIGEgcGFyYW1ldGVyIGVsZW1lbnQgZnJvbSB0aGUgbWV0aG9kIAotICAqIEBwYXJhbSBKYXZhUGFyYW1ldGVyIHRoZSBtb2YgZWxlbWVudCB0byBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgUGFyYW1ldGVyCi0gICoqLwotICBwdWJsaWMgSVN0YXR1cyB2aXNpdCAoT2JqZWN0IGlqYXZhUGFyYW1ldGVyKQotICB7Ci0gIAlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gIAlDaG9pY2UgT0tDaG9pY2UgPSBuZXcgQ2hvaWNlKCdPJyxDb25zdW1wdGlvbk1lc3NhZ2VzLkxBQkVMX09LLCBDb25zdW1wdGlvbk1lc3NhZ2VzLkRFU0NSSVBUSU9OX09LKTsKLSAgCUNob2ljZSBDYW5jZWxDaG9pY2UgPSBuZXcgQ2hvaWNlKCdDJywgQ29uc3VtcHRpb25NZXNzYWdlcy5MQUJFTF9DQU5DRUwsIENvbnN1bXB0aW9uTWVzc2FnZXMuREVTQ1JJUFRJT05fQ0FOQ0VMKTsKLSAgCQotICAgIFBhcmFtZXRlckVsZW1lbnQgcGFyYW1ldGVyRWxlbWVudCA9IChQYXJhbWV0ZXJFbGVtZW50KUJlYW5Nb2RlbEVsZW1lbnRzRmFjdG9yeS5nZXRCZWFuTW9kZWxFbGVtZW50KGlqYXZhUGFyYW1ldGVyLGZQYXJlbnRFbGVtZW50KTsKLSAgICBKYXZhTW9mVHlwZVZpc2l0b3JBY3Rpb24gdHlwZVZpc2l0b3JBY3Rpb24gPSBuZXcgSmF2YU1vZlR5cGVWaXNpdG9yQWN0aW9uKHBhcmFtZXRlckVsZW1lbnQsY2xpZW50UHJvamVjdCwgZW52Xyk7Ci0gICAgLy90eXBlVmlzaXRvckFjdGlvbi5zZXRTdGF0dXNNb25pdG9yKGdldFN0YXR1c01vbml0b3IoKSk7Ci0gICAgdHlwZVZpc2l0b3JBY3Rpb24uc2V0UmV0dXJuUGFyYW0ocGFyYW1ldGVyRWxlbWVudC5pc1JldHVybigpKTsKLSAgICBKYXZhTW9mVHlwZVZpc2l0b3IgdHlwZVZpc2l0b3IgPSBuZXcgSmF2YU1vZlR5cGVWaXNpdG9yKGVudl8pOwotICAgIHR5cGVWaXNpdG9yLnNldENsaWVudFByb2plY3QoZ2V0UHJvamVjdCgpKTsKLSAgICBzdGF0dXMgPSB0eXBlVmlzaXRvci5ydW4oaWphdmFQYXJhbWV0ZXIsdHlwZVZpc2l0b3JBY3Rpb24pOwotICAgIC8vCi0gICAgaW50IHNldmVyaXR5ID0gc3RhdHVzLmdldFNldmVyaXR5KCk7IAotICAgIGlmIChzZXZlcml0eT09U3RhdHVzLkVSUk9SKQotICAgIAlyZXR1cm4gc3RhdHVzOwotICAgIAotICAgIGlmIChzZXZlcml0eT09U3RhdHVzLldBUk5JTkcpCi0gICAgewotICAgICAgQ2hvaWNlIHJlc3VsdCA9IGVudl8uZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydChzdGF0dXMsIG5ldyBDaG9pY2VbXXtPS0Nob2ljZSwgQ2FuY2VsQ2hvaWNlfSk7Ci0gICAgICBpZiAocmVzdWx0LmdldExhYmVsKCkuZXF1YWxzKENhbmNlbENob2ljZS5nZXRMYWJlbCgpKSkKLSAgICAgIHsKLSAgICAgIAkgLy9yZXR1cm4gYW4gZXJyb3Igc3RhdHVzIHNpbmNlIHRoZSB1c2VyIGNhbmNlbGVkCi0gICAgICAJICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX1NBTVBMRV9DUkVBVElPTl9DQU5DRUxFRCApOwotICAgICAgfQotICAgICAgCQotICAgIH0KLSAgICAvLyAgICAgICAgICAgCi0gICAgcmV0dXJuIHN0YXR1czsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9yYWN0aW9ucy9KYXZhTW9mVHlwZVZpc2l0b3JBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcmFjdGlvbnMvSmF2YU1vZlR5cGVWaXNpdG9yQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmOThmYmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9yYWN0aW9ucy9KYXZhTW9mVHlwZVZpc2l0b3JBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNDEwICAgMTgwOTUyIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBTYW1wbGUgSlNQIGdlbmVyYXRvciBjaG9rZXMgb24gaW50ZXJmYWNlcyBhbmQgYWJzdHJhY3QgY2xhc3NlcwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uamF2YW1vZnZpc2l0b3JhY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuSmF2YUhlbHBlcnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuSmF2YVZpc2liaWxpdHlLaW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLk1ldGhvZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uQ29uc3VtcHRpb25NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5qYXZhbW9mdmlzaXRvcnMuSmF2YU1vZkJlYW5WaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsLkJlYW5Nb2RlbEVsZW1lbnRzRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbC5UeXBlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbC5UeXBlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5DaG9pY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50OwotCi0KLQotCi0vKioKLSogT2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIEphdmFNb2ZCZWFuVmlzaXRvckFjdGlvbi4KLSogVGhpcyBWaXNpdG9yQWN0aW9uIHdpbGwgY3JlYXRlIGEgVHlwZUVsZW1lbnQgdXNpbmcgdGhlCi0qIEphdmFDbGFzcyBhbmQgdGhlIEJlYW5Nb2RlbEVsZW1lbnRzRmFjdG9yeQotKiBJdCB3aWxsIGFsc28gYXV0b21hdGljYWxseSB3YWxrIGEgY29tcGxleCB0eXBlCi0qICovCi1wdWJsaWMgY2xhc3MgSmF2YU1vZlR5cGVWaXNpdG9yQWN0aW9uIGV4dGVuZHMgSmF2YU1vZkJlYW5WaXNpdG9yQWN0aW9uCi17Ci0KLSAgLyoKLSAgKkNvbnN0cnVjdG9yCi0gICoqLwotICBwdWJsaWMgSmF2YU1vZlR5cGVWaXNpdG9yQWN0aW9uKEVsZW1lbnQgcGFyZW50RWxlbWVudCxTdHJpbmcgcHJvamVjdCwgSUVudmlyb25tZW50IGVudikKLSAgewotICAgIHN1cGVyKHBhcmVudEVsZW1lbnQscHJvamVjdCwgZW52KTsKLSAgfQotCi0gIC8qKgotICAqIENyZWF0ZSBhIHR5cGUgZWxlbWVudCBmcm9tIHRoZSBKYXZhSGVscGVyCi0gICogQHBhcmFtIEphdmFIZWxwZXIgdGhlIG1vZiBlbGVtZW50IHRvIGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBUeXBlCi0gICoqLwotICBwdWJsaWMgSVN0YXR1cyB2aXNpdCAoT2JqZWN0IHR5cGVOYXZpZ2F0b3IpCi0gIHsKLSAgCSBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gICAJIENob2ljZSBPS0Nob2ljZSA9IG5ldyBDaG9pY2UoJ08nLCBDb25zdW1wdGlvbk1lc3NhZ2VzLkxBQkVMX09LLCBDb25zdW1wdGlvbk1lc3NhZ2VzLkRFU0NSSVBUSU9OX09LKTsKLSAgCSBDaG9pY2UgQ2FuY2VsQ2hvaWNlID0gbmV3IENob2ljZSgnQycsIENvbnN1bXB0aW9uTWVzc2FnZXMuTEFCRUxfQ0FOQ0VMLCBDb25zdW1wdGlvbk1lc3NhZ2VzLkRFU0NSSVBUSU9OX0NBTkNFTCk7ICAJIAotCi0gICAgIC8vaWYgYmVhbgotCSBKYXZhQ2xhc3MgamF2YUNsYXNzID0gbnVsbDsKLQkgaWYodHlwZU5hdmlnYXRvciBpbnN0YW5jZW9mIEphdmFDbGFzcyl7Ci0JICAgIGphdmFDbGFzcyA9IChKYXZhQ2xhc3MpdHlwZU5hdmlnYXRvcjsKLQkgfQotCi0KLSAgICAgLyogSWYgd2UgYXJlIGRlYWxpbmcgd2l0aCBhIHJldHVybiBwYXJhbWV0ZXIgdGhlbiB3ZSBuZWVkIHRvIHRyZWF0IHRoaXMgZGlmZmVyZW50bHkgdGhlbiBpZiBpdCBpcyBhbiBpbnB1dCAKLSAgICAgKiAgcGFyYW1ldGVyLgotICAgICAqICBXZSBuZWVkIHRvIGZpcnN0IHNlZSBpZiBpdCBpcyBhIHNwZWNpYWwgY2FzZSBmb3IgcmV0dXJuIHR5cGVzIGlmIG5vdCB3ZSB0cmVhdCBpdCB0aGUgc2FtZSBhcyBldmVyeXRoaW5nCi0gICAgICogIGVsc2UuCi0gICAgICovCi0gICAgIGlmKGdldFJldHVyblBhcmFtKCkgJiYgVHlwZUZhY3RvcnkuaXNSZWNvZ25pemVkUmV0dXJuVHlwZSgoSmF2YUhlbHBlcnMpdHlwZU5hdmlnYXRvcikpCi0gICAgIHsKLSAgICAgICBCZWFuTW9kZWxFbGVtZW50c0ZhY3RvcnkuZ2V0QmVhbk1vZGVsRWxlbWVudCh0eXBlTmF2aWdhdG9yLGZQYXJlbnRFbGVtZW50KTsKLSAgICAgfQkKLSAgICAgZWxzZXsKLQkgICAgaWYoVHlwZUZhY3RvcnkuaXNVblN1cHBvcnRlZFR5cGUoKEphdmFIZWxwZXJzKXR5cGVOYXZpZ2F0b3IpKXsKLQkgICAgICBzdGF0dXMgPSBTdGF0dXNVdGlscy53YXJuaW5nU3RhdHVzKCBDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19XQVJOX0pUU19VTlNVUFBPUlRFRF9UWVBFICsgKChKYXZhSGVscGVycyl0eXBlTmF2aWdhdG9yKS5nZXRKYXZhTmFtZSgpICk7CSAgICAJCi0JICAgICAgLy9nZXRTdGF0dXNNb25pdG9yKCkucmVwb3J0U3RhdHVzKCBuZXcgU3RhdHVzKElTdGF0dXMuV0FSTklORyxXZWJTZXJ2aWNlQ29uc3VtcHRpb25QbHVnaW4uSUQsMCwKLSAgICAgICAgICAgICAgLy9Db25zdW1wdGlvbk1lc3NhZ2VzLk1TR19XQVJOX0pUU19VTlNVUFBPUlRFRF9UWVBFICsgKChKYXZhSGVscGVycyl0eXBlTmF2aWdhdG9yKS5nZXRKYXZhTmFtZSgpLG51bGwpKTsKLQkgICAgICByZXR1cm4gc3RhdHVzOwotCSAgICB9CQotCSAgICAKLQkgICAgLy9pZiBqYXZhY2xhc3MgaXMgbnVsbCB0aGVuIHdlIGhhdmUgYSBzaW1wbGUgdHlwZSAKLQkgICAgaWYoKGphdmFDbGFzcyA9PSBudWxsKSB8fCBUeXBlRmFjdG9yeS5yZWNvZ25pemVkQmVhbihqYXZhQ2xhc3MuZ2V0SmF2YU5hbWUoKSkpCi0gICAgICB7Ci0JICAgICAgQmVhbk1vZGVsRWxlbWVudHNGYWN0b3J5LmdldEJlYW5Nb2RlbEVsZW1lbnQodHlwZU5hdmlnYXRvcixmUGFyZW50RWxlbWVudCk7Ci0JICAgIH0KLQkgICAgZWxzZSBpZiAoamF2YUNsYXNzICE9IG51bGwgJiYgIWdldFJldHVyblBhcmFtKCkgJiYKLQkJCQkvLyB0aGUgZm9sbG93aW5nIGNhc2VzIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQgZm9yIGlucHV0Ci0JCQkJKGphdmFDbGFzcy5pc0ludGVyZmFjZSgpIHx8IGphdmFDbGFzcy5pc0Fic3RyYWN0KCkgfHwgIWhhc0RlZmF1bHRDb25zdHJ1Y3RvcihqYXZhQ2xhc3MpKSkgewotCSAgICAJCi0JICAgIAlFbGVtZW50IGVsZW1lbnQgPSBCZWFuTW9kZWxFbGVtZW50c0ZhY3RvcnkuZ2V0QmVhbk1vZGVsRWxlbWVudCh0eXBlTmF2aWdhdG9yLGZQYXJlbnRFbGVtZW50KTsKLQkgICAgCWVsZW1lbnQuc2V0UHJvcGVydHlBc09iamVjdChUeXBlRWxlbWVudC5OT05fSU5TVEFOVElBQkxFLCBCb29sZWFuLlRSVUUpOwotCSAgICB9Ci0JICAgIGVsc2V7Ci0JICAgICAgSmF2YU1vZkJlYW5WaXNpdG9yQWN0aW9uIGJlYW5WaXNpdG9yQWN0aW9uID0gbmV3IEphdmFNb2ZCZWFuVmlzaXRvckFjdGlvbihmUGFyZW50RWxlbWVudCxjbGllbnRQcm9qZWN0LCBlbnZfKTsKLQkgICAgICBiZWFuVmlzaXRvckFjdGlvbi5zZXRTdGF0dXNNb25pdG9yKGdldFN0YXR1c01vbml0b3IoKSk7Ci0JICAgICAgYmVhblZpc2l0b3JBY3Rpb24uc2V0QmVhbnNDcmVhdGVkKGdldEJlYW5zQ3JlYXRlZCgpKTsKLSAgICAgICAgICBiZWFuVmlzaXRvckFjdGlvbi5zZXRSZXR1cm5QYXJhbShnZXRSZXR1cm5QYXJhbSgpKTsKLQkJICBKYXZhTW9mQmVhblZpc2l0b3IgYmVhblZpc2l0b3IgPSBuZXcgSmF2YU1vZkJlYW5WaXNpdG9yKCk7Ci0JICAgICAgc3RhdHVzID0gYmVhblZpc2l0b3IucnVuKGphdmFDbGFzcyxiZWFuVmlzaXRvckFjdGlvbik7Ci0JICAgIH0KLSAgICAgfQotICAgICAKLSAgICAgLy8KLSAgICAgaW50IHNldmVyaXR5ID0gc3RhdHVzLmdldFNldmVyaXR5KCk7IAotICAgICBpZiAoc2V2ZXJpdHk9PVN0YXR1cy5FUlJPUikKLSAgICAgCXJldHVybiBzdGF0dXM7Ci0gICAgIAotICAgICBpZiAoc2V2ZXJpdHk9PVN0YXR1cy5XQVJOSU5HKQotICAgICB7Ci0gICAgICAgQ2hvaWNlIHJlc3VsdCA9IGVudl8uZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydChzdGF0dXMsIG5ldyBDaG9pY2VbXXtPS0Nob2ljZSwgQ2FuY2VsQ2hvaWNlfSk7Ci0gICAgICAgaWYgKHJlc3VsdC5nZXRMYWJlbCgpLmVxdWFscyhDYW5jZWxDaG9pY2UuZ2V0TGFiZWwoKSkpCi0gICAgICAgewotICAgICAgIAkgLy9yZXR1cm4gYW4gZXJyb3Igc3RhdHVzIHNpbmNlIHRoZSB1c2VyIGNhbmNlbGVkCi0gICAgICAgCSAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9TQU1QTEVfQ1JFQVRJT05fQ0FOQ0VMRUQgKTsKLSAgICAgICB9Ci0gICAgICAgCQotICAgICB9Ci0gICAgIC8vCi0gICAgIHJldHVybiBzdGF0dXM7Ci0gICB9Ci0KLSAgLyoqCi0gICAqIERldGVybWluZSBpZiB0aGUgZ2l2ZW4gamF2YUNsYXNzIGhhcyBhIGRlZmF1bHQgY29uc3RydWN0b3IuCi0gICAqIEBwYXJhbSBqYXZhQ2xhc3MgVGhlIGphdmEgY2xhc3MKLSAgICogQHJldHVybiB0cnVlIGlmIGphdmFDbGFzcyBoYXMgYSBkZWZhdWx0IGNvbnN0cnVjdG9yLCBmYWxzZSBvdGhlcndpc2UKLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBoYXNEZWZhdWx0Q29uc3RydWN0b3IoSmF2YUNsYXNzIGphdmFDbGFzcykgewotCSAgIAotCSAgTGlzdCBtZXRob2RzID0gamF2YUNsYXNzLmdldE1ldGhvZHMoKTsKLQkgIEl0ZXJhdG9yIGl0ZXIgPSBtZXRob2RzLml0ZXJhdG9yKCk7Ci0JICAgCi0JICBib29sZWFuIGZvdW5kQ29uc3RydWN0b3IgPSBmYWxzZTsKLQkgICAKLQkgIHdoaWxlIChpdGVyLmhhc05leHQoKSkgewotCQkgIE1ldGhvZCBtZXRob2QgPSAoTWV0aG9kKSBpdGVyLm5leHQoKTsKLQkJICAgCi0JCSAgaWYgKG1ldGhvZC5nZXROYW1lKCkuZXF1YWxzKGphdmFDbGFzcy5nZXROYW1lKCkpKSB7Ci0JCQkgIGlmIChtZXRob2QubGlzdFBhcmFtZXRlcnNXaXRob3V0UmV0dXJuKCkubGVuZ3RoID09IDApCi0JCQkJICByZXR1cm4gbWV0aG9kLmdldEphdmFWaXNpYmlsaXR5KCkuZ2V0VmFsdWUoKSA9PSBKYXZhVmlzaWJpbGl0eUtpbmQuUFVCTElDOwotCQkJICBmb3VuZENvbnN0cnVjdG9yID0gdHJ1ZTsKLQkJICB9Ci0JICB9Ci0JICAgCi0JICAvLyBpZiBubyBjb25zdHJ1Y3RvciBpcyBmb3VuZCBhdCB0aGlzIHBvaW50LCBhIGRlZmF1bHQgb25lIGlzIGltcGxpY2l0bHkgcHJvdmlkZWQKLQkgIHJldHVybiAhZm91bmRDb25zdHJ1Y3RvcjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9yYWN0aW9ucy9WaXNpdG9yQWN0aW9uSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9yYWN0aW9ucy9WaXNpdG9yQWN0aW9uSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTRhMmUzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcmFjdGlvbnMvVmlzaXRvckFjdGlvbkltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLmphdmFtb2Z2aXNpdG9yYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5WaXNpdG9yQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLQotCi0KLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSBWaXNpdG9yQWN0aW9uLgotKiBJdCB3aWxsIGF1dG9tYXRpY2FsbHkgd2FsayB0aGUgbWV0aG9kcyBpbiB0aGUgSmF2YUNsYXNzCi0qICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgVmlzaXRvckFjdGlvbkltcGwgaW1wbGVtZW50cyBWaXNpdG9yQWN0aW9uIAotewotCi0gIHByaXZhdGUgVmVjdG9yIGJlYW5zVmlzaXRlZCA9IG51bGw7Ci0gIHByaXZhdGUgVmVjdG9yIG1lc3NhZ2VzID0gbnVsbDsKLQotICBwdWJsaWMgVmlzaXRvckFjdGlvbkltcGwoIFZlY3RvciBtZXNzYWdlcywgVmVjdG9yIGJlYW5zVmlzaXRlZCkKLSAgCXsKLSAgCSB0aGlzLm1lc3NhZ2VzID0gbWVzc2FnZXM7Ci0gIAkgdGhpcy5iZWFuc1Zpc2l0ZWQgPSBiZWFuc1Zpc2l0ZWQ7Ci0gIAl9Ci0gIAotICBwdWJsaWMgdm9pZCBpbml0aWFsaXplKFN0cmluZyByZXNpZGVudCkKLSAgewotICAgIC8vbm90aGluZyB0byBiZSBkb25lIGJ1dCBtdXN0IGJlIGltcGxlbWVudGVkCi0gIH0KLQotIC8qKgotICAqIFJldHVybnMgdGhlIHZlY3RvciBvZiBhbGwgbWVzc2FnZXMgZm91bmQKLSAgKi8KLSAgcHVibGljIFZlY3RvciBnZXRNZXNzYWdlcyAoKQotICB7Ci0gIAlpZiAobWVzc2FnZXMgPT0gbnVsbCkgCi0gIAkJbWVzc2FnZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgcmV0dXJuIG1lc3NhZ2VzOwotICB9Ci0KLSAgcHVibGljIFZlY3RvciBnZXRCZWFuc1Zpc2l0ZWQoKQotICAJewotCQlpZiAoIGJlYW5zVmlzaXRlZCA9PSBudWxsKQotICAJCQliZWFuc1Zpc2l0ZWQgPSBuZXcgVmVjdG9yKCk7IAotICAgICAgICByZXR1cm4gYmVhbnNWaXNpdGVkOwotICAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZFZpc2l0ZWRCZWFuKCBKYXZhQ2xhc3MgYmVhbikKLSAgCXsKLSAgCQlpZiAoIGJlYW5zVmlzaXRlZCA9PSBudWxsKQotICAJCQliZWFuc1Zpc2l0ZWQgPSBuZXcgVmVjdG9yKCk7Ci0gIAkJYmVhbnNWaXNpdGVkLmFkZChiZWFuKTsKLSAgCX0KLQotICBwdWJsaWMgYm9vbGVhbiBpc0JlYW5WaXNpdGVkIChKYXZhQ2xhc3MgYmVhbikKLSAgCXsKLSAgCQlyZXR1cm4gKGJlYW5zVmlzaXRlZCAhPSBudWxsICYmIGJlYW5zVmlzaXRlZC5jb250YWlucyhiZWFuKSk7Ci0gIAl9Ci0KLSAgLyoqCi0gICogc2V0cyB0aGUgdmlzaXRvciB0aGF0IGNhbGxzIHRoZSB2aXNpdAotICAqIEBwYXJhbWV0ZXIgVmlzaXRvcgotICAqLwotCi0gIHB1YmxpYyB2b2lkIHNldFZpc2l0b3IoVmlzaXRvciB2aXNpdG9yKQotICB7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBhZGRNZXNzYWdlICggU3RyaW5nIGtleSApCi0gIHsKLSAgICBnZXRNZXNzYWdlcygpLmFkZChrZXkpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgYWRkTWVzc2FnZSAoIFN0cmluZyBrZXksIE9iamVjdFtdIGFyZ3MgKQotICB7Ci0gICAgZ2V0TWVzc2FnZXMoKS5hZGQoTkxTLmJpbmQoa2V5LGFyZ3MpKTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vamF2YW1vZnZpc2l0b3JzL0phdmFNb2ZBdHRyaWJ1dGVWaXNpdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vamF2YW1vZnZpc2l0b3JzL0phdmFNb2ZBdHRyaWJ1dGVWaXNpdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxNDY4YmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9ycy9KYXZhTW9mQXR0cmlidXRlVmlzaXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjE3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLmphdmFtb2Z2aXNpdG9yczsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuRmllbGQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuSmF2YUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkphdmFIZWxwZXJzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkphdmFQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuTWV0aG9kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLlZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uVmlzaXRvckFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb24uSmF2YU1vZlJlZmxlY3Rpb25Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsLlR5cGVGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5zYW1wbGVhcHAuY29tbW9uLlNhbXBsZVByb3BlcnR5RGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLQotCi0vKioKLSogT2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIHZpc2l0b3IuCi0qICovCi1wdWJsaWMgY2xhc3MgSmF2YU1vZkF0dHJpYnV0ZVZpc2l0b3IgaW1wbGVtZW50cyBWaXNpdG9yIAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0KLSAgcHJpdmF0ZSBTdHJpbmcgY2xpZW50UHJvamVjdDsKLSAgcHJpdmF0ZSBib29sZWFuIHJldHVyblBhcmFtZXRlcjsKLSAgcHJpdmF0ZSBJRW52aXJvbm1lbnQgZW52OwotICAKLSAgCi0gIHB1YmxpYyB2b2lkIHNldEVudmlyb25tZW50KElFbnZpcm9ubWVudCBlbnYpCi0gIHsKLSAgCXRoaXMuZW52ID0gZW52OwotICB9Ci0gIAotICAvKgotICAqIFVzZSB0aGlzIHRvIHJlZmxlY3QgCi0gICovCi0gIHB1YmxpYyB2b2lkIHNldFByb2plY3QoU3RyaW5nIGNsaWVudFByb2plY3QpCi0gIHsKLSAgICB0aGlzLmNsaWVudFByb2plY3QgPSBjbGllbnRQcm9qZWN0OwotICB9Ci0KLSAgIC8qCi0gICogVXNlIHRoaXMgdG8gcmVmbGVjdCAKLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRQcm9qZWN0KCkKLSAgewotICAgIHJldHVybiBjbGllbnRQcm9qZWN0OwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0UmV0dXJuUGFyYW1ldGVyKGJvb2xlYW4gcmV0dXJuUGFyYW1ldGVyKQotICB7Ci0gICAgdGhpcy5yZXR1cm5QYXJhbWV0ZXIgPSByZXR1cm5QYXJhbWV0ZXI7Ci0gIH0KLSAKLSAgCi0gIC8qCi0gICogR2V0IHRoZSBhdHRyaWJ1dGUgYmVsb25naW5nIHRvIHRoaXMgY29tcGxleCB0eXBlIAotICAqIEBwYXJhbSBKYXZhUGFyYW1ldGVyIGphdmFQYXJhbWV0ZXIgdGhhdCBvd25zIHRoZSB0eXBlCi0gICogQHBhcmFtIFZpc2l0b3JBY3Rpb24gQWN0aW9uIHRvIGJlIHBlcmZvcm1lZCBvbiBlYWNoIG1ldGhvZAotICAqKi8KLSAgcHVibGljIElTdGF0dXMgcnVuICggT2JqZWN0IGphdmFjbGFzcywgVmlzaXRvckFjdGlvbiB2QWN0aW9uKQotICB7Ci0gIAlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgSmF2YUNsYXNzIGphdmFDbGFzcyA9IChKYXZhQ2xhc3MpamF2YWNsYXNzOyAgICAgCi0KLSAgICBIYXNodGFibGUgc3BkTWFwID0gbmV3IEhhc2h0YWJsZSgpOyAgCi0gICAgZm9yIChJdGVyYXRvciBtPWphdmFDbGFzcy5nZXRQdWJsaWNNZXRob2RzKCkuaXRlcmF0b3IoKTsgbS5oYXNOZXh0KCk7ICkgewotICAgICAgTWV0aG9kIG1ldGhvZD0oTWV0aG9kKW0ubmV4dCgpOwotICAgICAgaWYgKCgobWV0aG9kLmdldE1ldGhvZEVsZW1lbnRTaWduYXR1cmUoKS5zdGFydHNXaXRoKCJnZXQiKSAKLSAgICAgIAl8fCBtZXRob2QuZ2V0TWV0aG9kRWxlbWVudFNpZ25hdHVyZSgpLnN0YXJ0c1dpdGgoImlzIikpIAotICAgICAgICAmJiBtZXRob2QubGlzdFBhcmFtZXRlcnNXaXRob3V0UmV0dXJuKCkubGVuZ3RoID09IDAgKQotICAgICAgICB8fCAobWV0aG9kLmdldE1ldGhvZEVsZW1lbnRTaWduYXR1cmUoKS5zdGFydHNXaXRoKCJzZXQiKSAKLSAgICAgICAgJiYgbWV0aG9kLmxpc3RQYXJhbWV0ZXJzV2l0aG91dFJldHVybigpLmxlbmd0aCA+IDApKSB7Ci0gICAgICAgIGludCBzdWIgPSAzOwotICAgICAgICBpZihtZXRob2QuZ2V0TWV0aG9kRWxlbWVudFNpZ25hdHVyZSgpLnN0YXJ0c1dpdGgoImlzIikpCi0gICAgICAgICAgc3ViID0gMjsJCi0gICAgICAgIFN0cmluZyBwcm9wZXJ0eU5hbWUgPSBtZXRob2QuZ2V0TWV0aG9kRWxlbWVudFNpZ25hdHVyZSgpLnN1YnN0cmluZyhzdWIpOyAgICAKLSAgICAgICAgU3RyaW5nIGxvd2VyID0gcHJvcGVydHlOYW1lLnN1YnN0cmluZygwLDEpLnRvTG93ZXJDYXNlKCk7Ci0gICAgICAgIFN0cmluZyByZW1haW5kZXIgPSBwcm9wZXJ0eU5hbWUuc3Vic3RyaW5nKDEpOyAKLSAgICAgICAgcHJvcGVydHlOYW1lID0gbG93ZXIgKyByZW1haW5kZXI7Ci0gICAgICAgIGludCBpbmRleCA9IHByb3BlcnR5TmFtZS5sYXN0SW5kZXhPZigiKCIpOwotICAgICAgICBTdHJpbmcgdGVtcCA9IHByb3BlcnR5TmFtZTsKLSAgICAgICAgcHJvcGVydHlOYW1lID0gdGVtcC5zdWJzdHJpbmcoMCxpbmRleCk7IAotICAgICAgICAKLSAgICAgICAgLy9maW5kIHRoZSBwcm9wZXJ0eWRlc2NyaXB0b3IKLSAgICAgICAgU2FtcGxlUHJvcGVydHlEZXNjcmlwdG9yIHNwZCA9IChTYW1wbGVQcm9wZXJ0eURlc2NyaXB0b3Ipc3BkTWFwLmdldChwcm9wZXJ0eU5hbWUpOyAKLSAgICAgICAgaWYoc3BkID09IG51bGwpewotICAgICAgICAgIHNwZCA9IG5ldyBTYW1wbGVQcm9wZXJ0eURlc2NyaXB0b3IocHJvcGVydHlOYW1lKTsKLSAgICAgICAgICBzcGRNYXAucHV0KHByb3BlcnR5TmFtZSxzcGQpOyAKLSAgICAgICAgfQotICAgICAgICBpZihtZXRob2QuZ2V0TWV0aG9kRWxlbWVudFNpZ25hdHVyZSgpLnN0YXJ0c1dpdGgoInNldCIpKQotICAgICAgICAgIHNwZC5zZXRXcml0ZU1ldGhvZChtZXRob2QpOwotICAgICAgICBlbHNlIAotICAgICAgICAgIHNwZC5zZXRSZWFkTWV0aG9kKG1ldGhvZCk7Ci0KLSAgICAgICAgRmllbGQgZmllbGQgPSBqYXZhQ2xhc3MuZ2V0RmllbGROYW1lZChwcm9wZXJ0eU5hbWUpOwotICAgICAgICBKYXZhSGVscGVycyBwcm9wZXJ0eVR5cGUgPSBudWxsOyAKLSAgICAgICAgaWYoZmllbGQgIT0gbnVsbCl7Ci0gICAgICAgICAgcHJvcGVydHlUeXBlID0gKEphdmFIZWxwZXJzKWZpZWxkLmdldEVUeXBlKCk7Ci0gICAgICAgICAgc3BkLnNldGZTdGF0aWMoZmllbGQuaXNTdGF0aWMoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZXsKLSAgICAgICAgICBpZihtZXRob2QuZ2V0TWV0aG9kRWxlbWVudFNpZ25hdHVyZSgpLnN0YXJ0c1dpdGgoImdldCIpIHx8IG1ldGhvZC5nZXRNZXRob2RFbGVtZW50U2lnbmF0dXJlKCkuc3RhcnRzV2l0aCgiaXMiKSkKLSAgICAgICAgICAJcHJvcGVydHlUeXBlID0gbWV0aG9kLmdldFJldHVyblR5cGUoKTsKLSAgICAgICAgICBlbHNlewotICAgICAgICAgICAgIEphdmFQYXJhbWV0ZXIgcGFyYW1zW10gPSBtZXRob2QubGlzdFBhcmFtZXRlcnNXaXRob3V0UmV0dXJuKCk7IAotICAgICAgICAgICAgIHByb3BlcnR5VHlwZSA9IHBhcmFtc1swXS5nZXRKYXZhVHlwZSgpOwotICAgICAgICAgIH0gIAotICAgICAgICB9Ci0gICAgICAgICAgCQotICAgICAgICBzcGQuc2V0UHJvcGVydHlUeXBlKHByb3BlcnR5VHlwZSk7IAotICAgICAgICAKLSAgICAgIH0KLSAgICB9Ci0gICAgRW51bWVyYXRpb24gc3BkRW51bSA9IHNwZE1hcC5lbGVtZW50cygpOwotICAgIHdoaWxlKHNwZEVudW0uaGFzTW9yZUVsZW1lbnRzKCkpewotICAgICAgU2FtcGxlUHJvcGVydHlEZXNjcmlwdG9yIHNwZCA9IChTYW1wbGVQcm9wZXJ0eURlc2NyaXB0b3Ipc3BkRW51bS5uZXh0RWxlbWVudCgpOwotICAgICAgaWYoc3BkQ2hlY2soc3BkKSkKLSAgICAgICAgc3RhdHVzID0gdkFjdGlvbi52aXNpdChzcGQpOyAgIAotICAgIH0gCi0gICAKLSAgICByZXR1cm4gc3RhdHVzOwotCi0gIH0KLSAgCi0gIHByaXZhdGUgYm9vbGVhbiBzcGRDaGVjayhTYW1wbGVQcm9wZXJ0eURlc2NyaXB0b3Igc3BkKQotICB7ICAKLSAgICAvL2NoZWNrIGZvciBpbmRleGVkIHByb3BlcnRpZXMKLSAgCU1ldGhvZCB3cml0ZU1ldGhvZCA9IHNwZC5nZXRXcml0ZU1ldGhvZCgpOwotICAJaWYod3JpdGVNZXRob2QgIT0gbnVsbCkKLSAgCSAgaWYod3JpdGVNZXRob2QubGlzdFBhcmFtZXRlcnNXaXRob3V0UmV0dXJuKCkubGVuZ3RoID4gMSkgcmV0dXJuIGZhbHNlOwotICAJCi0gIAlpZihzcGQuZ2V0UHJvcGVydHlUeXBlKCkgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwotICAgIGlmKHNwZC5nZXRQcm9wZXJ0eVR5cGUoKS5pc1ByaW1pdGl2ZSgpKSByZXR1cm4gdHJ1ZTsKLSAgICBpZihyZXR1cm5QYXJhbWV0ZXIgJiYgVHlwZUZhY3RvcnkuaXNSZWNvZ25pemVkUmV0dXJuVHlwZShzcGQuZ2V0UHJvcGVydHlUeXBlKCkpKSByZXR1cm4gdHJ1ZTsKLSAgICBpZighcmV0dXJuUGFyYW1ldGVyICYmIFR5cGVGYWN0b3J5LmlzVW5TdXBwb3J0ZWRUeXBlKHNwZC5nZXRQcm9wZXJ0eVR5cGUoKSkpIHJldHVybiB0cnVlOwotICAgIGlmKCFjaGVja1BvbGFyaXR5KHNwZCkpIHJldHVybiBmYWxzZTsgICAKLSAgICAgICAKLSAgICAvLyBzbyBpdHMgYSBiZWFuIG1ha2Ugc3VyZSBpdCBoYXMgYSBkZWZhdWx0IGNvbnN0cnVjdG9yICAgICAgIAotICAgIEphdmFNb2ZSZWZsZWN0aW9uQ29tbWFuZCBqYXZhTW9mUmVmID0gbmV3IEphdmFNb2ZSZWZsZWN0aW9uQ29tbWFuZCgpOwotICAgIGphdmFNb2ZSZWYuc2V0Q2xpZW50UHJvamVjdChnZXRQcm9qZWN0KCkpOwotICAgIGphdmFNb2ZSZWYuc2V0UHJveHlCZWFuKCgoSmF2YUhlbHBlcnMpc3BkLmdldFByb3BlcnR5VHlwZSgpKS5nZXRRdWFsaWZpZWROYW1lKCkpOwotICAgIGphdmFNb2ZSZWYuc2V0RW52aXJvbm1lbnQoIGVudiApOwotICAgIGphdmFNb2ZSZWYuZXhlY3V0ZShudWxsLCBudWxsKTsKLSAgICBpZihqYXZhTW9mUmVmLmdldEphdmFDbGFzcygpIGluc3RhbmNlb2YgSmF2YUNsYXNzKXsKLSAgICAgICBpZihUeXBlRmFjdG9yeS5yZWNvZ25pemVkQmVhbihqYXZhTW9mUmVmLmdldEphdmFDbGFzcygpLmdldEphdmFOYW1lKCkpKSByZXR1cm4gdHJ1ZTsKLSAgICAgICByZXR1cm4gZGVmYXVsdENoZWNrKChKYXZhQ2xhc3MpamF2YU1vZlJlZi5nZXRKYXZhQ2xhc3MoKSk7Ci0gICAgICAgICAgICAgICAKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIAotICB9Ci0gIAotICBwcml2YXRlIGJvb2xlYW4gY2hlY2tQb2xhcml0eShTYW1wbGVQcm9wZXJ0eURlc2NyaXB0b3Igc3BkKXsKLSAgICAKLSAgCU1ldGhvZCByZWFkTWV0aG9kID0gc3BkLmdldFJlYWRNZXRob2QoKTsKLSAgCU1ldGhvZCB3cml0ZU1ldGhvZCA9IHNwZC5nZXRXcml0ZU1ldGhvZCgpOwotICAJaWYoKHJlYWRNZXRob2QgPT0gbnVsbCAmJiB3cml0ZU1ldGhvZCAhPSBudWxsKSB8fCAocmVhZE1ldGhvZCAhPSBudWxsICYmIHdyaXRlTWV0aG9kID09IG51bGwpKQotICAJICByZXR1cm4gdHJ1ZTsJCi0gIAlpZihyZWFkTWV0aG9kID09IG51bGwgJiYgd3JpdGVNZXRob2QgPT0gbnVsbCkKLSAgCSAgcmV0dXJuIGZhbHNlOwkKLSAgCSAgCQotICAJSmF2YVBhcmFtZXRlciBqYXZhUGFyYW1ldGVyW10gPSB3cml0ZU1ldGhvZC5saXN0UGFyYW1ldGVyc1dpdGhvdXRSZXR1cm4oKTsKLSAgICBmb3IoaW50IGkgPSAwO2k8IGphdmFQYXJhbWV0ZXIubGVuZ3RoO2krKyl7Ci0gICAgICBKYXZhUGFyYW1ldGVyIGpwID0gamF2YVBhcmFtZXRlcltpXTsgCQotICAgICAganAuZ2V0SmF2YVR5cGUoKS5nZXRKYXZhTmFtZSgpOwotICAgICAgcmVhZE1ldGhvZC5nZXRSZXR1cm5UeXBlKCkuZ2V0SmF2YU5hbWUoKTsKLSAgICAgIGlmKGpwLmdldEphdmFUeXBlKCkuZ2V0SmF2YU5hbWUoKS5lcXVhbHMocmVhZE1ldGhvZC5nZXRSZXR1cm5UeXBlKCkuZ2V0SmF2YU5hbWUoKSkpCi0gICAgICAgIHJldHVybiB0cnVlOyAKLSAgICB9Ci0gIAlyZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIHByaXZhdGUgYm9vbGVhbiBkZWZhdWx0Q2hlY2soSmF2YUNsYXNzIGphdmFDbGFzcyl7Ci0gICAgCi0gICAgICAgSXRlcmF0b3IgbT1qYXZhQ2xhc3MuZ2V0TWV0aG9kcygpLml0ZXJhdG9yKCk7Ci0gICAgICAgIC8vbm93IGNoZWNrIGZvciBhIGRlZmF1bHQgY29uc3RydWN0b3IKLSAgICAgICAgYm9vbGVhbiBkZWZhdWx0Q29uc3QgPSB0cnVlOwotICAgICAgICB3aGlsZSAobS5oYXNOZXh0KCkpIHsKLSAgICAgICAgICBNZXRob2QgbWV0aG9kPShNZXRob2QpbS5uZXh0KCk7Ci0gICAgICAgICAgaWYgKGphdmFDbGFzcy5nZXROYW1lKCkuZXF1YWxzKG1ldGhvZC5nZXROYW1lKCkpKXsKLSAgICAgICAgICAgICAgICAvL25vdyB0aGUgaW5wdXRzCi0gICAgICAgICAgICAgICAgSmF2YVBhcmFtZXRlciBqYXZhUGFyYW1ldGVyW10gPSBtZXRob2QubGlzdFBhcmFtZXRlcnNXaXRob3V0UmV0dXJuKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGphdmFQYXJhbWV0ZXIubGVuZ3RoID4gMCl7Ci0gICAgICAgICAgICAgICAgICAgICAgLy90aGVuIHdlIGhhdmUgbm8gZGVmYXVsdCBjb25zdHJ1Y3RvcgotICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRDb25zdCA9IGZhbHNlOyAKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZihqYXZhUGFyYW1ldGVyLmxlbmd0aCA9PSAwKXsKLSAgICAgICAgICAgICAgICAgICAgIGlmIChtZXRob2QuZ2V0SmF2YVZpc2liaWxpdHkoKS5nZXRWYWx1ZSgpID09IDApCi0gICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgfQotICAgIAotICAgICAgIHJldHVybiBkZWZhdWx0Q29uc3Q7Ci0gIH0KLSAgICAgICAgICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcnMvSmF2YU1vZkJlYW5WaXNpdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vamF2YW1vZnZpc2l0b3JzL0phdmFNb2ZCZWFuVmlzaXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzNhYmIyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcnMvSmF2YU1vZkJlYW5WaXNpdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5qYXZhbW9mdmlzaXRvcnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5WaXNpdG9yQWN0aW9uOwotCi0KLQotCi0vKioKLSogT2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIHZpc2l0b3IuCi0qICovCi1wdWJsaWMgY2xhc3MgSmF2YU1vZkJlYW5WaXNpdG9yIGltcGxlbWVudHMgVmlzaXRvciAKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotCi0gIC8qCi0gICpDb25zdHJ1Y3RvcgotICAqKi8KLSAgcHVibGljIEphdmFNb2ZCZWFuVmlzaXRvcigpCi0gIHsKLSAgfQotIAotICBwdWJsaWMgSVN0YXR1cyBydW4gKCBPYmplY3QgamF2YUNsYXNzLCBWaXNpdG9yQWN0aW9uIHZBY3Rpb24pCi0gIHsKLSAgICByZXR1cm4gdkFjdGlvbi52aXNpdCgoSmF2YUNsYXNzKWphdmFDbGFzcyk7ICAgCi0gIH0KLSAgICAgICAgCi0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9ycy9KYXZhTW9mRmllbGRWaXNpdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vamF2YW1vZnZpc2l0b3JzL0phdmFNb2ZGaWVsZFZpc2l0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2YwZjBlYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vamF2YW1vZnZpc2l0b3JzL0phdmFNb2ZGaWVsZFZpc2l0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5qYXZhbW9mdmlzaXRvcnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3RJdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkZpZWxkOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkphdmFDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhSGVscGVyczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkphdmFWaXNpYmlsaXR5S2luZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5NZXRob2Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5WaXNpdG9yQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5KYXZhTW9mUmVmbGVjdGlvbkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuVHlwZUZhY3Rvcnk7Ci0KLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSB2aXNpdG9yLgotKiAqLwotcHVibGljIGNsYXNzIEphdmFNb2ZGaWVsZFZpc2l0b3IgaW1wbGVtZW50cyBWaXNpdG9yIAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0KLSAgcHJpdmF0ZSBTdHJpbmcgY2xpZW50UHJvamVjdDsKLQotICAvKgotICAqIENvbnN0cnVjdG9yCi0gICoqLwotICBwdWJsaWMgSmF2YU1vZkZpZWxkVmlzaXRvcigpCi0gIHsKLSAgfQotCi0gIC8qCi0gICogVXNlIHRoaXMgdG8gcmVmbGVjdCAKLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0UHJvamVjdChTdHJpbmcgY2xpZW50UHJvamVjdCkKLSAgewotICAgIHRoaXMuY2xpZW50UHJvamVjdCA9IGNsaWVudFByb2plY3Q7Ci0gIH0KLQotICAgLyoKLSAgKiBVc2UgdGhpcyB0byByZWZsZWN0IAotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFByb2plY3QoKQotICB7Ci0gICAgcmV0dXJuIGNsaWVudFByb2plY3Q7Ci0gIH0KLQotICAvKgotICAqIEdldCB0aGUgYXR0cmlidXRlIGJlbG9uZ2luZyB0byB0aGlzIGNvbXBsZXggdHlwZSAKLSAgKiBAcGFyYW0gSmF2YVBhcmFtZXRlciBqYXZhUGFyYW1ldGVyIHRoYXQgb3ducyB0aGUgdHlwZQotICAqIEBwYXJhbSBWaXNpdG9yQWN0aW9uIEFjdGlvbiB0byBiZSBwZXJmb3JtZWQgb24gZWFjaCBtZXRob2QKLSAgKiovCi0gIHB1YmxpYyBJU3RhdHVzIHJ1biAoIE9iamVjdCBqYXZhY2xhc3MsIFZpc2l0b3JBY3Rpb24gdkFjdGlvbikKLSAgewotICAJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAgIEphdmFDbGFzcyBqYXZhQ2xhc3MgPSAoSmF2YUNsYXNzKWphdmFjbGFzczsgICAgIAotCi0gICAgYm9vbGVhbiBob2xkZXJDbGFzcyA9IGZhbHNlOwotICAgIEVMaXN0IGltcGxlbWVudGVkID0gamF2YUNsYXNzLmdldEltcGxlbWVudHNJbnRlcmZhY2VzKCk7Ci0JZm9yIChpbnQgaSA9IDA7IGkgPCBpbXBsZW1lbnRlZC5zaXplKCk7IGkrKykgewotCSAgSmF2YUNsYXNzIGFuSW50ZXJmYWNlID0gKEphdmFDbGFzcykgaW1wbGVtZW50ZWQuZ2V0KGkpOwotCSAgaWYgKGFuSW50ZXJmYWNlLmdldFF1YWxpZmllZE5hbWUoKS5lcXVhbHMoImphdmF4LnhtbC5ycGMuaG9sZGVycy5Ib2xkZXIiKSkKLQkgICAgaG9sZGVyQ2xhc3MgPSB0cnVlOwotCX0gICAgICAKLQotICAgICAvL2JlYW5pbmZvIGNvZGUKLSAgICBpZihob2xkZXJDbGFzcyl7ICAgICAKLSAgICAgIEVMaXN0IGUgID0gamF2YUNsYXNzLmdldEZpZWxkcygpOwotICAgICAgTGlzdEl0ZXJhdG9yIGxpc3QgPSBlLmxpc3RJdGVyYXRvcigpOwotICAgICAgd2hpbGUobGlzdC5oYXNOZXh0KCkpewotICAgICAgICBGaWVsZCBmaWVsZCA9IChGaWVsZClsaXN0Lm5leHQoKTsgICAgIAotICAgICAgICBpZihmaWVsZC5nZXRKYXZhVmlzaWJpbGl0eSgpLmdldFZhbHVlKCkgPT0gSmF2YVZpc2liaWxpdHlLaW5kLlBVQkxJQyAmJiAhZmllbGQuaXNGaW5hbCgpICYmICFmaWVsZC5pc1N0YXRpYygpKXsKLSAgICAgICAgICBpZihmaWVsZENoZWNrKGZpZWxkKSkKLSAgICAgICAgICAgIHN0YXR1cyA9IHZBY3Rpb24udmlzaXQoZmllbGQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0gICAgICAgCi0gIHByaXZhdGUgYm9vbGVhbiBmaWVsZENoZWNrKEZpZWxkIGZpZWxkKQotICB7Ci0gICAgLy8gc28gaXRzIGEgYmVhbiBtYWtlIHN1cmUgaXQgaGFzIGEgZGVmYXVsdCBjb25zdHJ1Y3RvciAKLSAgICBKYXZhTW9mUmVmbGVjdGlvbkNvbW1hbmQgamF2YU1vZlJlZiA9IG5ldyBKYXZhTW9mUmVmbGVjdGlvbkNvbW1hbmQoKTsKLSAgICBqYXZhTW9mUmVmLnNldFByb3h5QmVhbigoKEphdmFIZWxwZXJzKWZpZWxkLmdldEVUeXBlKCkpLmdldFF1YWxpZmllZE5hbWUoKSk7Ci0gICAgamF2YU1vZlJlZi5zZXRDbGllbnRQcm9qZWN0KGdldFByb2plY3QoKSk7Ci0gICAgamF2YU1vZlJlZi5leGVjdXRlKG51bGwsIG51bGwpOwotICAgIGlmKGphdmFNb2ZSZWYuZ2V0SmF2YUNsYXNzKCkgaW5zdGFuY2VvZiBKYXZhQ2xhc3MpewotICAgICAgaWYoVHlwZUZhY3RvcnkucmVjb2duaXplZEJlYW4oamF2YU1vZlJlZi5nZXRKYXZhQ2xhc3MoKS5nZXRKYXZhTmFtZSgpKSkgcmV0dXJuIHRydWU7Ci0gICAgICByZXR1cm4gZGVmYXVsdENoZWNrKChKYXZhQ2xhc3MpamF2YU1vZlJlZi5nZXRKYXZhQ2xhc3MoKSk7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0gICAgICAgIAotIHByaXZhdGUgYm9vbGVhbiBkZWZhdWx0Q2hlY2soSmF2YUNsYXNzIGphdmFDbGFzcyl7Ci0gICAgCi0gICBJdGVyYXRvciBtPWphdmFDbGFzcy5nZXRNZXRob2RzKCkuaXRlcmF0b3IoKTsKLSAgIC8vbm93IGNoZWNrIGZvciBhIGRlZmF1bHQgY29uc3RydWN0b3IKLSAgIGJvb2xlYW4gZGVmYXVsdENvbnN0ID0gdHJ1ZTsKLSAgIHdoaWxlIChtLmhhc05leHQoKSkgewotICAgIE1ldGhvZCBtZXRob2Q9KE1ldGhvZCltLm5leHQoKTsKLSAgICBpZiAoamF2YUNsYXNzLmdldE5hbWUoKS5lcXVhbHMobWV0aG9kLmdldE5hbWUoKSkpewotICAgICAgLy9ub3cgdGhlIGlucHV0cwotICAgICAgSmF2YVBhcmFtZXRlciBqYXZhUGFyYW1ldGVyW10gPSBtZXRob2QubGlzdFBhcmFtZXRlcnNXaXRob3V0UmV0dXJuKCk7Ci0gICAgICBpZiAoamF2YVBhcmFtZXRlci5sZW5ndGggPiAwKXsKLSAgICAgICAgLy90aGVuIHdlIGhhdmUgbm8gZGVmYXVsdCBjb25zdHJ1Y3RvcgotICAgICAgICBkZWZhdWx0Q29uc3QgPSBmYWxzZTsgCi0gICAgICB9Ci0gICAgICBlbHNlIGlmKGphdmFQYXJhbWV0ZXIubGVuZ3RoID09IDApewotICAgICAgICBpZiAobWV0aG9kLmdldEphdmFWaXNpYmlsaXR5KCkuZ2V0VmFsdWUoKSA9PSAwKQotICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBlbHNlIGlmKG1ldGhvZC5nZXRKYXZhVmlzaWJpbGl0eSgpLmdldFZhbHVlKCkgPT0gMSkgCi0gICAgICAgICAgZGVmYXVsdENvbnN0ID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gICAgCi0gIHJldHVybiBkZWZhdWx0Q29uc3Q7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcnMvSmF2YU1vZk1ldGhvZFZpc2l0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcnMvSmF2YU1vZk1ldGhvZFZpc2l0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmYxZTAzNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vamF2YW1vZnZpc2l0b3JzL0phdmFNb2ZNZXRob2RWaXNpdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5qYXZhbW9mdmlzaXRvcnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuTWV0aG9kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLlZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uVmlzaXRvckFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5zZWxlY3Rpb24uQm9vbGVhblNlbGVjdGlvbjsKLQotCi0vKioKLSogT2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIHZpc2l0b3IuCi0qICovCi1wdWJsaWMgY2xhc3MgSmF2YU1vZk1ldGhvZFZpc2l0b3IgaW1wbGVtZW50cyBWaXNpdG9yIAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotICBwdWJsaWMgU3RyaW5nIFNFVF9FTkRQT0lOVCA9ICJzZXRFbmRQb2ludCI7Ci0gIHB1YmxpYyBTdHJpbmcgR0VUX0VORFBPSU5UID0gImdldEVuZFBvaW50IjsKLSAgcHJpdmF0ZSBCb29sZWFuU2VsZWN0aW9uW10gZk1ldGhvZHNTZWxlY3RlZDsKLQotCi0gIC8qCi0gICogQ29uc3RydWN0b3IKLSAgKiovCi0gIHB1YmxpYyBKYXZhTW9mTWV0aG9kVmlzaXRvcigpCi0gIHsKLSAgfQotIAotICBwdWJsaWMgU3RyaW5nIFVOREVSX1NDT1JFID0gIl8iOwotCi0gIC8qCi0gICogUnVuIHRocm91Z2ggYWxsIHRoZSBtZXRob2RzIGluIHRoaXMgYmVhbgotICAqIEBwYXJhbSBKYXZhQ2xhc3MgamF2YWNsYXNzIHRoYXQgaG9sZHMgdGhlIG1ldGhvZHMKLSAgKiBAcGFyYW0gVmlzaXRvckFjdGlvbiBBY3Rpb24gdG8gYmUgcGVyZm9ybWVkIG9uIGVhY2ggbWV0aG9kCi0gICoqLwotICBwdWJsaWMgSVN0YXR1cyBydW4gKCBPYmplY3QgamF2YWNsYXNzLCBWaXNpdG9yQWN0aW9uIHZBY3Rpb24pCi0gIHsKLSAgCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICBKYXZhQ2xhc3MgamF2YUNsYXNzID0gKEphdmFDbGFzcylqYXZhY2xhc3M7Ci0gICAgZm9yIChJdGVyYXRvciBtPWphdmFDbGFzcy5nZXRQdWJsaWNNZXRob2RzKCkuaXRlcmF0b3IoKTsgbS5oYXNOZXh0KCk7ICkgewotICAgICAgTWV0aG9kIG1ldGhvZD0oTWV0aG9kKW0ubmV4dCgpOwotICAgICAgaWYoZk1ldGhvZHNTZWxlY3RlZCAhPSBudWxsKSAgewotICAgICAgICBib29sZWFuIG1ldGhvZFNlbGVjdGVkID0gZmFsc2U7Ci0gICAgICAJZm9yKGludCBpID0wO2kgPCBmTWV0aG9kc1NlbGVjdGVkLmxlbmd0aDtpKyspewotICAgICAgICAgIGlmKGZNZXRob2RzU2VsZWN0ZWRbaV0gPT0gbnVsbCkgY29udGludWU7Ci0gICAgICAgICAgaWYgKCBmTWV0aG9kc1NlbGVjdGVkW2ldLmdldFZhbHVlKCkuZXF1YWxzKG1ldGhvZC5nZXRNZXRob2RFbGVtZW50U2lnbmF0dXJlKCkpKQotICAgICAgICAgICAgbWV0aG9kU2VsZWN0ZWQgPSAoYm9vbGVhbikgZk1ldGhvZHNTZWxlY3RlZFtpXS5pc1NlbGVjdGVkKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIG1ldGhvZC5nZXROYW1lKCk7Ci0gICAgICAgIAotICAgICAgICBpZihtZXRob2RTZWxlY3RlZCkKLSAgICAgICAgICBzdGF0dXMgPSB2QWN0aW9uLnZpc2l0KG1ldGhvZCk7ICAKLSAgICAgICAgCi0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgc3RhdHVzID0gdkFjdGlvbi52aXNpdChtZXRob2QpOyAgIAotICAgICAgfQotCi0gICAgfQotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRNZXRob2RTZWxlY3Rpb24oQm9vbGVhblNlbGVjdGlvbltdIG1ldGhvZFNlbGVjdGVkKQotICB7Ci0gICAgZk1ldGhvZHNTZWxlY3RlZCA9IG1ldGhvZFNlbGVjdGVkOwotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9ycy9KYXZhTW9mUGFyYW1ldGVyVmlzaXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb2RlZ2VuL2phdmFtb2Z2aXNpdG9ycy9KYXZhTW9mUGFyYW1ldGVyVmlzaXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDkwNGI2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcnMvSmF2YU1vZlBhcmFtZXRlclZpc2l0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5qYXZhbW9mdmlzaXRvcnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuSmF2YUhlbHBlcnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuSmF2YVBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5NZXRob2Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLkNvbnN1bXB0aW9uTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5WaXNpdG9yQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LkNob2ljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLQotCi0vKioKLSogT2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIHZpc2l0b3IuCi0qICovCi1wdWJsaWMgY2xhc3MgSmF2YU1vZlBhcmFtZXRlclZpc2l0b3IgaW1wbGVtZW50cyBWaXNpdG9yIAotewotICBwcml2YXRlIElFbnZpcm9ubWVudCBlbnZfOwotCi0gIC8qCi0gICogQ29uc3RydWN0b3IKLSAgKiovCi0gIHB1YmxpYyBKYXZhTW9mUGFyYW1ldGVyVmlzaXRvcihJRW52aXJvbm1lbnQgZW52KQotICB7Ci0gIAllbnZfID0gZW52OwotICB9Ci0gIAotICAvKgotICAqIFJ1biB0aHJvdWdoIGFsbCB0aGUgcGFyYW1ldGVycyBpbiB0aGlzIG1ldGhvZAotICAqIEBwYXJhbSBKYXZhQ2xhc3MgamF2YWNsYXNzIHRoYXQgaG9sZHMgdGhlIHBhcmFtZXRlcnMKLSAgKiBAcGFyYW0gVmlzaXRvckFjdGlvbiBBY3Rpb24gdG8gYmUgcGVyZm9ybWVkIG9uIGVhY2ggbWV0aG9kCi0gICoqLwotICBwdWJsaWMgSVN0YXR1cyBydW4gKCBPYmplY3QgaW1ldGhvZCwgVmlzaXRvckFjdGlvbiB2QWN0aW9uKQotICB7Ci0gIAlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gIAlDaG9pY2UgT0tDaG9pY2UgPSBuZXcgQ2hvaWNlKCdPJywgQ29uc3VtcHRpb25NZXNzYWdlcy5MQUJFTF9PSywgQ29uc3VtcHRpb25NZXNzYWdlcy5ERVNDUklQVElPTl9PSyk7Ci0gIAlDaG9pY2UgQ2FuY2VsQ2hvaWNlID0gbmV3IENob2ljZSgnQycsIENvbnN1bXB0aW9uTWVzc2FnZXMuTEFCRUxfQ0FOQ0VMLCBDb25zdW1wdGlvbk1lc3NhZ2VzLkRFU0NSSVBUSU9OX0NBTkNFTCk7ICAJCi0gICAgTWV0aG9kIG1ldGhvZCA9IChNZXRob2QpaW1ldGhvZDsKLSAgIAotICAgIEphdmFIZWxwZXJzIGphdmFSZXR1cm5QYXJhbWV0ZXIgPSBtZXRob2QuZ2V0UmV0dXJuVHlwZSgpOwotICAgIC8vcGdtIFRoaXMgdmlzaXRvciB1c2VkIHRvIHRha2UgYSBKYXZhUGFyYW1ldGVyIHR5cGUgYW5kIG5vdyBpdCBpcyBiZWluZyBjYWxsZWQKLSAgICAvLyAgICB3aXRoIGEgSmF2YUhlbHBlcnMgdHlwZS4gIEdpbCwgcGxlYXNlIGVuc3VyZSB0aGF0IHRoaXMgaXMgT2suCi0gICAgc3RhdHVzID0gdkFjdGlvbi52aXNpdChqYXZhUmV0dXJuUGFyYW1ldGVyKTsKLSAgICAvLwotICAgIGludCBzZXZlcml0eSA9IHN0YXR1cy5nZXRTZXZlcml0eSgpOyAKLSAgICBpZiAoc2V2ZXJpdHk9PVN0YXR1cy5FUlJPUikKLSAgICAJcmV0dXJuIHN0YXR1czsKLSAgICAKLSAgICBpZiAoc2V2ZXJpdHk9PVN0YXR1cy5XQVJOSU5HKQotICAgIHsKLSAgICAgIENob2ljZSByZXN1bHQgPSBlbnZfLmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnQoc3RhdHVzLCBuZXcgQ2hvaWNlW117T0tDaG9pY2UsIENhbmNlbENob2ljZX0pOwotICAgICAgaWYgKHJlc3VsdC5nZXRMYWJlbCgpLmVxdWFscyhDYW5jZWxDaG9pY2UuZ2V0TGFiZWwoKSkpCi0gICAgICB7Ci0gICAgICAJIC8vcmV0dXJuIGFuIGVycm9yIHN0YXR1cyBzaW5jZSB0aGUgdXNlciBjYW5jZWxlZAotICAgICAgCSAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9TQU1QTEVfQ1JFQVRJT05fQ0FOQ0VMRUQgKTsKLSAgICAgIH0KLSAgICAgIAkKLSAgICB9Ci0gICAgLy8gICAgICAgICAgIAotCi0gICAgLy9ub3cgdGhlIGlucHV0cwotICAgIExpc3QgcGFyYW1ldGVycyA9IG1ldGhvZC5nZXRQYXJhbWV0ZXJzKCk7IAotICAgIAotICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBwYXJhbWV0ZXJzLnNpemUoKTsgaW5kZXgrKykgCi0gICAgewotICAgICAgSmF2YVBhcmFtZXRlciBwYXJhbT0oSmF2YVBhcmFtZXRlcilwYXJhbWV0ZXJzLmdldChpbmRleCk7Ci0gICAgICBzdGF0dXMgPSB2QWN0aW9uLnZpc2l0KHBhcmFtKTsKLSAgICAgIC8vCi0gICAgICBzZXZlcml0eSA9IHN0YXR1cy5nZXRTZXZlcml0eSgpOyAKLSAgICAgIGlmIChzZXZlcml0eT09U3RhdHVzLkVSUk9SKQotICAgICAgCXJldHVybiBzdGF0dXM7Ci0gICAgICAKLSAgICAgIGlmIChzZXZlcml0eT09U3RhdHVzLldBUk5JTkcpCi0gICAgICB7Ci0gICAgICAgIENob2ljZSByZXN1bHQgPSBlbnZfLmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnQoc3RhdHVzLCBuZXcgQ2hvaWNlW117T0tDaG9pY2UsIENhbmNlbENob2ljZX0pOwotICAgICAgICBpZiAocmVzdWx0LmdldExhYmVsKCkuZXF1YWxzKENhbmNlbENob2ljZS5nZXRMYWJlbCgpKSkKLSAgICAgICAgewotICAgICAgICAJIC8vcmV0dXJuIGFuIGVycm9yIHN0YXR1cyBzaW5jZSB0aGUgdXNlciBjYW5jZWxlZAotICAgICAgICAJICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX1NBTVBMRV9DUkVBVElPTl9DQU5DRUxFRCApOwotICAgICAgICB9Ci0gICAgICAgIAkKLSAgICAgIH0KLSAgICAgIC8vICAgICAgCi0gICAgfQotICAgIAotICAgIHJldHVybiBzdGF0dXM7Ci0gICAgCi0gIH0KLSAgCi0gICAgICAgIAotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcnMvSmF2YU1vZlR5cGVWaXNpdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvZGVnZW4vamF2YW1vZnZpc2l0b3JzL0phdmFNb2ZUeXBlVmlzaXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMThmYzg2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29kZWdlbi9qYXZhbW9mdmlzaXRvcnMvSmF2YU1vZlR5cGVWaXNpdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLmphdmFtb2Z2aXNpdG9yczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuRmllbGQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuSmF2YUhlbHBlcnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuSmF2YVBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5WaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLlZpc2l0b3JBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uLkphdmFNb2ZSZWZsZWN0aW9uQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uc2FtcGxlYXBwLmNvbW1vbi5TYW1wbGVQcm9wZXJ0eURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci0KLQotCi0vKioKLSogT2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIHZpc2l0b3IuCi0qICovCi1wdWJsaWMgY2xhc3MgSmF2YU1vZlR5cGVWaXNpdG9yIGltcGxlbWVudHMgVmlzaXRvciAKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICBwcml2YXRlIElFbnZpcm9ubWVudCBlbnZfOwotCi0gIHByaXZhdGUgU3RyaW5nIGNsaWVudFByb2plY3Q7Ci0KLSAgLyoKLSAgKiBDb25zdHJ1Y3RvcgotICAqKi8KLSAgcHVibGljIEphdmFNb2ZUeXBlVmlzaXRvcihJRW52aXJvbm1lbnQgZW52KQotICB7Ci0gIAllbnZfID0gZW52OwotICB9Ci0KLSAgIC8qCi0gICogVXNlIHRoaXMgdG8gcmVmbGVjdCAKLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50UHJvamVjdChTdHJpbmcgY2xpZW50UHJvamVjdCkKLSAgewotICAgIHRoaXMuY2xpZW50UHJvamVjdCA9IGNsaWVudFByb2plY3Q7Ci0gIH0KLQotICAgLyoKLSAgKiBVc2UgdGhpcyB0byByZWZsZWN0IAotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldENsaWVudFByb2plY3QoKQotICB7Ci0gICAgcmV0dXJuIGNsaWVudFByb2plY3Q7Ci0gIH0KLSAgCi0gIC8qCi0gICogR2V0IHRoZSB0eXBlIGJlbG9uZ2luZyB0byB0aGUgcGFyYW1ldGVyCi0gICogQHBhcmFtIEphdmFQYXJhbWV0ZXIgamF2YVBhcmFtZXRlciB0aGF0IG93bnMgdGhlIHR5cGUKLSAgKiBAcGFyYW0gVmlzaXRvckFjdGlvbiBBY3Rpb24gdG8gYmUgcGVyZm9ybWVkIG9uIGVhY2ggbWV0aG9kCi0gICoqLwotICBwdWJsaWMgSVN0YXR1cyBydW4gKCBPYmplY3QgdHlwZU5hdmlnYXRvciwgVmlzaXRvckFjdGlvbiB2QWN0aW9uKQotICB7Ci0gIAlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgaWYgKHR5cGVOYXZpZ2F0b3IgaW5zdGFuY2VvZiBKYXZhUGFyYW1ldGVyKXsKLQotICAgICAgSmF2YVBhcmFtZXRlciBqYXZhUGFyYW1ldGVyID0gKEphdmFQYXJhbWV0ZXIpdHlwZU5hdmlnYXRvcjsKLSAgICAgIEphdmFIZWxwZXJzIGphdmFIZWxwZXJzID0gamF2YVBhcmFtZXRlci5nZXRKYXZhVHlwZSgpOwotICAgICAgc3RhdHVzID0gdkFjdGlvbi52aXNpdChqYXZhSGVscGVycyk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGVOYXZpZ2F0b3IgaW5zdGFuY2VvZiBKYXZhSGVscGVycyl7Ci0gICAgCXN0YXR1cyA9IHZBY3Rpb24udmlzaXQodHlwZU5hdmlnYXRvcik7CQotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlTmF2aWdhdG9yIGluc3RhbmNlb2YgU2FtcGxlUHJvcGVydHlEZXNjcmlwdG9yKXsKLSAgICAgIFNhbXBsZVByb3BlcnR5RGVzY3JpcHRvciBwZCA9IChTYW1wbGVQcm9wZXJ0eURlc2NyaXB0b3IpdHlwZU5hdmlnYXRvcjsKLSAgICAgIEphdmFNb2ZSZWZsZWN0aW9uQ29tbWFuZCBqYXZhTW9mUmVmID0gbmV3IEphdmFNb2ZSZWZsZWN0aW9uQ29tbWFuZCgpOwotICAgICAgamF2YU1vZlJlZi5zZXRDbGllbnRQcm9qZWN0KGNsaWVudFByb2plY3QpOwotICAgICAgamF2YU1vZlJlZi5zZXRQcm94eUJlYW4oKChKYXZhSGVscGVycylwZC5nZXRQcm9wZXJ0eVR5cGUoKSkuZ2V0UXVhbGlmaWVkTmFtZSgpKTsKLSAgICAgIGphdmFNb2ZSZWYuc2V0RW52aXJvbm1lbnQoIGVudl8gKTsKLSAgICAgIHN0YXR1cyA9IGphdmFNb2ZSZWYuZXhlY3V0ZSggbnVsbCwgbnVsbCApOwotICAgICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpPT1TdGF0dXMuRVJST1IpCi0gICAgICAJcmV0dXJuIHN0YXR1czsKLSAgICAgIAotICAgICAgc3RhdHVzID0gdkFjdGlvbi52aXNpdChqYXZhTW9mUmVmLmdldEphdmFDbGFzcygpKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZU5hdmlnYXRvciBpbnN0YW5jZW9mIEZpZWxkKXsKLSAgICAgIEZpZWxkIGZpZWxkID0gKEZpZWxkKXR5cGVOYXZpZ2F0b3I7Ci0gICAgICBKYXZhTW9mUmVmbGVjdGlvbkNvbW1hbmQgamF2YU1vZlJlZiA9IG5ldyBKYXZhTW9mUmVmbGVjdGlvbkNvbW1hbmQoKTsKLSAgICAgIGphdmFNb2ZSZWYuc2V0Q2xpZW50UHJvamVjdChjbGllbnRQcm9qZWN0KTsKLSAgICAgIGphdmFNb2ZSZWYuc2V0UHJveHlCZWFuKCgoSmF2YUhlbHBlcnMpZmllbGQuZ2V0RVR5cGUoKSkuZ2V0UXVhbGlmaWVkTmFtZSgpKTsKLSAgICAgIGphdmFNb2ZSZWYuc2V0RW52aXJvbm1lbnQoIGVudl8gKTsKLSAgICAgCi0gICAgICBzdGF0dXMgPSBqYXZhTW9mUmVmLmV4ZWN1dGUoIG51bGwsIG51bGwgKTsKLSAgICAgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKT09U3RhdHVzLkVSUk9SKQotICAgICAgCXJldHVybiBzdGF0dXM7Ci0gICAgICAKLSAgICAgIHN0YXR1cyA9IHZBY3Rpb24udmlzaXQoamF2YU1vZlJlZi5nZXRKYXZhQ2xhc3MoKSk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0KLSAgCi0gICAgICAgIAotICAKLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9BYnN0cmFjdFN0YXJ0U2VydmVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0Fic3RyYWN0U3RhcnRTZXJ2ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDczMTFmYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0Fic3RyYWN0U3RhcnRTZXJ2ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuSUxhdW5jaE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLkNvbnN1bXB0aW9uTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnBsdWdpbi5XZWJTZXJ2aWNlQ29uc3VtcHRpb25QbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5FbnZpcm9ubWVudFNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JTG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RTdGFydFNlcnZlciB7Ci0gCi1wcm90ZWN0ZWQgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yOwotcHJpdmF0ZSBJTG9nIGxvZ187Ci0KLXB1YmxpYyBBYnN0cmFjdFN0YXJ0U2VydmVyKCkKLXsKLQlsb2dfID0gRW52aXJvbm1lbnRTZXJ2aWNlLmdldEVjbGlwc2VMb2coKTsKLX0KLQotLyoqCi0gKiBFeGVjdXRlIHRoZSBjb21tYW5kCi0gKi8KLXB1YmxpYyB2b2lkIFN0YXJ0U2VydmVyIChJUHJvamVjdCBwcm9qZWN0LCBJU2VydmVyIHNlcnZlciwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBib29sZWFuIHJlc3RhcnQpIHRocm93cyBDb3JlRXhjZXB0aW9uCi17Ci0JdGhpcy5tb25pdG9yID0gbW9uaXRvcjsKLQotICAgdHJ5Ci0gIHsKLSAgIAkKLS8vICAgIElKYXZhU2VydmVyIGphdmFTZXJ2ZXIgPSAoSUphdmFTZXJ2ZXIpIHNlcnZlci5nZXREZWxlZ2F0ZSgpOwotLy8gICAgYWRkSmFyc1RvQ2xhc3NQYXRoKGphdmFTZXJ2ZXIpOwotICAgIHZhbGlkYXRlUmVtb3RlU2VydmVyUGF0aChzZXJ2ZXIpOwotCi0gICAgaWYgKHNlcnZlci5nZXRTZXJ2ZXJTdGF0ZSgpICE9IElTZXJ2ZXIuU1RBVEVfU1RPUFBFRCkgIC8vIFRoZSBTZXJ2ZXIgaXMgcnVubmluZwotICAgIHsgCi0gICAgICBpZiAoc2VydmVyLmdldFNlcnZlclJlc3RhcnRTdGF0ZSgpKQotICAgICAgeyAgICAKLSAgICAgIAkKLSAgICAgICAgc2VydmVyLnN5bmNocm9ub3VzU3RvcChmYWxzZSk7Ci0gICAgICAgIGxvZ18ubG9nKElMb2cuSU5GTywgNTA1MCwgdGhpcywgIlN0YXJ0U2VydmVyIiwgInByb2plY3Q9Iitwcm9qZWN0KyIsIFN0b3AgY29tbWFuZCBjb21wbGV0ZWQsIHJlc3RhcnQgbmVlZGVkIik7Ci0gICAgICAgIHB1Ymxpc2hQcm9qZWN0KHNlcnZlcik7Ci0gICAgCXN0YXJ0UHJvamVjdChzZXJ2ZXIpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgCQotICAgICAgICBpZiAocmVzdGFydCkgLy8gV0VCLUlORlxsaWIgbmVlZCB0byBiZSByZWxvYWRlZAotICAgICAgICB7Ci0gICAgICAgICAgcHVibGlzaFByb2plY3Qoc2VydmVyKTsgICAgICAKLSAgICAgICAgICByZXN0YXJ0UHJvamVjdChwcm9qZWN0LCBzZXJ2ZXIpOwotICAgICAgICB9ICAgICAgICAgCi0gICAgICB9Ci0gICAgfQotICAgIGVsc2UgewotICAgCQotICAgIAkJcHVibGlzaFByb2plY3Qoc2VydmVyKTsKLSAgICAJCXN0YXJ0UHJvamVjdChzZXJ2ZXIpOwotICAgIAl9Ci19Ci0KLSAgY2F0Y2ggKENvcmVFeGNlcHRpb24gY2UpIHsKLSAgCXRocm93IGNlOwotICAJfQotICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICB0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsV2ViU2VydmljZUNvbnN1bXB0aW9uUGx1Z2luLklELDAsQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfU0VSVkVSLGUpKTsKLSAgfQotfQotCi1wcm90ZWN0ZWQgdm9pZCBwdWJsaXNoUHJvamVjdChJU2VydmVyIHNlcnZlcikgdGhyb3dzIENvcmVFeGNlcHRpb24KLXsKLSAgICAgIG1vbml0b3Iuc3ViVGFzayggQ29uc3VtcHRpb25NZXNzYWdlcy5QUk9HUkVTU19JTkZPX1BVQkxJU0hJTkdfU0VSVkVSICk7Ci0gICAgICBJU3RhdHVzIHN0YXR1cyA9IHNlcnZlci5wdWJsaXNoKElTZXJ2ZXIuUFVCTElTSF9JTkNSRU1FTlRBTCwgbW9uaXRvcik7Ci0gICAgICBpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgIT0gSVN0YXR1cy5PSykKLSAgICAgIAl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihzdGF0dXMpOwotICAgICAgbG9nXy5sb2coSUxvZy5JTkZPLCA1MDUxLCB0aGlzLCAicHVibGlzaFByb2plY3QiLCAiSVNlcnZlcj0iK3NlcnZlcisiLCBQdWJsaXNoIGNvbW1hbmQgY29tcGxldGVkIik7Ci0gfQotCi1wcm90ZWN0ZWQgdm9pZCBzdGFydFByb2plY3QoSVNlcnZlciBzZXJ2ZXIpIHRocm93cyBDb3JlRXhjZXB0aW9uCi17Ci0gIHRyeQotICB7Ci0gICAgbW9uaXRvci5zdWJUYXNrKCBDb25zdW1wdGlvbk1lc3NhZ2VzLlBST0dSRVNTX0lORk9fU1RBUlRJTkdfU0VSVkVSICk7ICAgIAotICAgIHNlcnZlci5zeW5jaHJvbm91c1N0YXJ0KElMYXVuY2hNYW5hZ2VyLlJVTl9NT0RFLCBtb25pdG9yKTsKLSAgICBsb2dfLmxvZyhJTG9nLklORk8sIDUwNTIsIHRoaXMsICJzdGFydFByb2plY3QiLCAiSVNlcnZlcj0iK3NlcnZlcisiLCBTdGFydCBjb21tYW5kIGNvbXBsZXRlZCIpOwotICAgIAotICB9Ci0gIGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgIHRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUixXZWJTZXJ2aWNlQ29uc3VtcHRpb25QbHVnaW4uSUQsMCxDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9TRVJWRVIsZSkpOwotICB9ICAKLX0KLQotcHJvdGVjdGVkIHZvaWQgcmVzdGFydFByb2plY3QoSVByb2plY3QgcHJvamVjdCwgSVNlcnZlciBzZXJ2ZXIpIHRocm93cyBDb3JlRXhjZXB0aW9uCi17Ci0gIC8vRG8gbm90aGluZwotfQotCi1wdWJsaWMgdm9pZCBydW5QcmVTZXJ2ZXJDb25maWcoSVNlcnZlciBzZXJ2ZXIsIElQcm9qZWN0IEVBUlByb2plY3QpewotCi0JcmV0dXJuOwotCQotfQotCi1wdWJsaWMgdm9pZCBydW5Qb3N0U2VydmVyQ29uZmlnKElTZXJ2ZXIgc2VydmVyLCBJUHJvamVjdCBFQVJQcm9qZWN0KXsKLQotCXJldHVybjsKLX0KLQotCi1wcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCBhZGRKYXJzVG9DbGFzc1BhdGgoSVNlcnZlciBzZXJ2ZXIpIHRocm93cyBDb3JlRXhjZXB0aW9uOwotcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgdmFsaWRhdGVSZW1vdGVTZXJ2ZXJQYXRoKElTZXJ2ZXIgc2VydmVyKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbjsKLQotcHVibGljIHZvaWQgc3RvcFNlcnZlcihJU2VydmVyIHNlcnZlcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCi0JaWYgKHNlcnZlciAhPSBudWxsKSB7Ci0KLQkJaWYgKHNlcnZlci5nZXRTZXJ2ZXJTdGF0ZSgpICE9IElTZXJ2ZXIuU1RBVEVfU1RPUFBFRCkgewotCQkJc2VydmVyLnN5bmNocm9ub3VzU3RvcChmYWxzZSk7Ci0JCX0KLQl9CQotCQotfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0FkZE1vZHVsZVRvU2VydmVyQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9BZGRNb2R1bGVUb1NlcnZlckNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzk2NTdlMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0FkZE1vZHVsZVRvU2VydmVyQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDkyMSBbMTU4MjEwXSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbiwgQ2FsbGluZyBpbmNyZW1lbnRhbCBidWlsZCBvbiB0aGUgcHJvamVjdCBiZWZvcmUgYWRkaW5nIHRvIHNlcnZlcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSW5jcmVtZW50YWxQcm9qZWN0QnVpbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uSjJFRVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU2VydmVyVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLkNvbnN1bXB0aW9uTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSU1vZHVsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcldvcmtpbmdDb3B5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJVdGlsOwotCi1wdWJsaWMgY2xhc3MgQWRkTW9kdWxlVG9TZXJ2ZXJDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLSAgCi0gIHByaXZhdGUgU3RyaW5nIHNlcnZlckluc3RhbmNlSWQ7Ci0gIHByaXZhdGUgU3RyaW5nIHByb2plY3Q7Ci0gIHByaXZhdGUgU3RyaW5nIG1vZHVsZTsKLQkKLQlwdWJsaWMgQWRkTW9kdWxlVG9TZXJ2ZXJDb21tYW5kKCkKLQl7Ci0JfQotCQotCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotCXsKLSAgICAgIElFbnZpcm9ubWVudCBlbnYgPSBnZXRFbnZpcm9ubWVudCgpOwotICAgICAgCi0JICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsJICAgIAotCSAgICAKLQkgICAgSVNlcnZlciBzZXJ2ZXIgPSBTZXJ2ZXJDb3JlLmZpbmRTZXJ2ZXIoc2VydmVySW5zdGFuY2VJZCk7Ci0JICAgIGlmIChzZXJ2ZXIgPT0gbnVsbCkKLQkgICAgewotCSAgICAgIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9JTlNUQU5DRV9OT1RfRk9VTkQgKTsKLQkgICAgICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0JICAgICAgcmV0dXJuIHN0YXR1czsKLQkgICAgfQotCSAgIAotCSAgICBJU2VydmVyV29ya2luZ0NvcHkgc2VydmVyd2MgPSBudWxsOwotCSAgICAKLQkgICAgdHJ5Ci0JICAgIHsKLQkgICAgLy9FbnN1cmUgdGhlIG1vZHVsZSBpcyBub3QgYSBKYXZhIHV0aWxpdHkKLQkgICAgSVByb2plY3QgaXByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QocHJvamVjdCk7Ci0JICAgIGlmICghSjJFRVV0aWxzLmlzSmF2YUNvbXBvbmVudChpcHJvamVjdCkpCi0JICAgIHsgICAgICAKLQkgICAgCUlNb2R1bGUgaW1vZHVsZSA9IFNlcnZlclV0aWxzLmdldE1vZHVsZShpcHJvamVjdCk7Ci0JICAgIAkvLyBUT0RPOiAgVGhpcyB3b3JrYXJvdW5kIGZvciAxNTY3Njggc2hvdWxkIGJlIHJlbW92ZWQgb25jZSB0aGUgZGVmZWN0IGlzIGZpeGVkCi0JICAgIAlpZiAoaW1vZHVsZSA9PSBudWxsKSB7Ci0JICAgIAkgICAgLy8gY2FsbGluZyBpbmNyZW1lbnRhbCBidWlsZCBvbiB0aGUgcHJvamVjdCBiZWZvcmUgdHJ5aW5nIGFnYWluCi0JICAgIAkJaXByb2plY3QuYnVpbGQoSW5jcmVtZW50YWxQcm9qZWN0QnVpbGRlci5JTkNSRU1FTlRBTF9CVUlMRCxudWxsKTsKLQkgICAgCQkvLyB3YWl0IGZvciB0aGUgaW5jcmVtZW50YWwgYnVpbGQgdG8gY29tcGxldGUgYmVmb3JlIHRyeWluZyBhZ2FpbgotCSAgICAJCXRyeSAKLQkgICAgCQl7Ci0JICAgIAkJCVBsYXRmb3JtLmdldEpvYk1hbmFnZXIoKS5qb2luKFJlc291cmNlc1BsdWdpbi5GQU1JTFlfQVVUT19CVUlMRCwgbnVsbCk7Ci0JICAgIAkJfSAKLQkgICAgCQljYXRjaCggSW50ZXJydXB0ZWRFeGNlcHRpb24gZXhjICkgCi0JICAgIAkJewotCSAgICAJCQkvLyBBc3N1bWluZyB0aGF0IHRoZSBhdXRvYnVpbGRlciBoYXMgYWN0dWFsbHkgY29tcGxldGVkLgkKLQkgICAgCQl9Ci0JICAgIAkJaW1vZHVsZSA9IFNlcnZlclV0aWxzLmdldE1vZHVsZShpcHJvamVjdCk7Ci0JICAgIAkJaWYgKGltb2R1bGUgPT0gbnVsbCkgeyAgCi0JICAgIAkJCS8vIHJldHVybiBlcnJvciBpZiBtb2R1bGUgaXMgc3RpbGwgbnVsbCBhZnRlciAxIHJldHJ5Ci0JICAgIAkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBOTFMuYmluZChDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9BRERfTU9EVUxFLCBuZXcgU3RyaW5nW117bW9kdWxlfSkgKTsKLQkgICAgCQkJZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCSAgICAJCQlyZXR1cm4gc3RhdHVzOwotCSAgICAJCX0KLQkgICAgCX0KLQkgICAgCS8vIGVuZCBvZiB3b3JrYXJvdW5kIGZvciAxNTY3NjgKLQkgICAgCQotCSAgICAgIGlmICghU2VydmVyVXRpbC5jb250YWluc01vZHVsZShzZXJ2ZXIsIGltb2R1bGUsIG51bGwpKQotCSAgICAgIHsKLQkgICAgICAgIElNb2R1bGVbXSBpbW9kdWxlcyA9IG5ldyBJTW9kdWxlW117aW1vZHVsZX07Ci0JICAgICAgICBzZXJ2ZXJ3YyA9IHNlcnZlci5jcmVhdGVXb3JraW5nQ29weSgpOwotCSAgICAgICAgU2VydmVyVXRpbC5tb2RpZnlNb2R1bGVzKHNlcnZlcndjLCBpbW9kdWxlcywgbnVsbCwgbnVsbCk7Ci0JICAgICAgfQotCi0JICAgIH0KLQkgICAgfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKQotCSAgICB7Ci0JICAgICAgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIE5MUy5iaW5kKENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX0FERF9NT0RVTEUsIG5ldyBTdHJpbmdbXXttb2R1bGV9KSwgZSk7Ci0JICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCSAgICAgIHJldHVybiBzdGF0dXM7ICAgICAgCi0JICAgIH0gZmluYWxseQotCSAgICB7Ci0JICAgICAgdHJ5Ci0JICAgICAgewotCSAgICAgICAgaWYgKHNlcnZlcndjICE9IG51bGwpCi0JICAgICAgICB7Ci0JICAgICAgICAgIHNlcnZlcndjLnNhdmUodHJ1ZSwgbnVsbCk7Ci0JICAgICAgICB9Ci0JICAgICAgfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkKLQkgICAgICB7Ci0JICAgICAgICBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggTkxTLmJpbmQoQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfQUREX01PRFVMRSwgbmV3IFN0cmluZ1tdIHsgbW9kdWxlIH0pLCBjZSk7Ci0JICAgICAgICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0JICAgICAgICByZXR1cm4gc3RhdHVzOwotCSAgICAgIH0gICAgICAKLQkgICAgfQotCSAgICAKLQkJcmV0dXJuIHN0YXR1czsKLQkgICAgCi0JCQotCX0KLQotCXB1YmxpYyB2b2lkIHNldE1vZHVsZShTdHJpbmcgbW9kdWxlKQotCXsKLQkJdGhpcy5tb2R1bGUgPSBtb2R1bGU7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0UHJvamVjdChTdHJpbmcgcHJvamVjdCkKLQl7Ci0JCXRoaXMucHJvamVjdCA9IHByb2plY3Q7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0U2VydmVySW5zdGFuY2VJZChTdHJpbmcgc2VydmVySW5zdGFuY2VJZCkKLQl7Ci0JCXRoaXMuc2VydmVySW5zdGFuY2VJZCA9IHNlcnZlckluc3RhbmNlSWQ7Ci0JfQkKLQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9Bc3NvY2lhdGVNb2R1bGVXaXRoRUFSQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9Bc3NvY2lhdGVNb2R1bGVXaXRoRUFSQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmFiOGEzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vQXNzb2NpYXRlTW9kdWxlV2l0aEVBUkNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uQ29uc3VtcHRpb25NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi1wdWJsaWMgY2xhc3MgQXNzb2NpYXRlTW9kdWxlV2l0aEVBUkNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotCXByaXZhdGUgU3RyaW5nIHByb2plY3RfOwotCXByaXZhdGUgU3RyaW5nIG1vZHVsZV87Ci0JcHJpdmF0ZSBTdHJpbmcgZWFyUHJvamVjdF87Ci0JcHJpdmF0ZSBTdHJpbmcgZWFyXzsKLQkKLQotICBwdWJsaWMgQXNzb2NpYXRlTW9kdWxlV2l0aEVBUkNvbW1hbmQoKXsKLQotICB9Ci0gIAotCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotCXsKLSAgICBJRW52aXJvbm1lbnQgZW52ID0gZ2V0RW52aXJvbm1lbnQoKTsKLSAgICAKLQkJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCQlJUHJvamVjdCBtb2R1bGVQcm9qZWN0ID0gbnVsbDsKLQkJSVByb2plY3QgZWFyUHJvamVjdCA9IG51bGw7Ci0KLQkJLy8gZ2V0IHByb2plY3RzCi0JCWlmIChwcm9qZWN0XyE9bnVsbCkKLQkJCW1vZHVsZVByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QocHJvamVjdF8pOwotCQlpZiAoZWFyUHJvamVjdF8hPW51bGwpCi0JCQllYXJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KGVhclByb2plY3RfKTsKLQkJCi0JCS8vIGFzc29jaWF0ZSBtb2R1bGVzIGlmIG5vdCBhbHJlYWR5IGFzc29jaWF0ZWQKLQkJaWYgKG1vZHVsZVByb2plY3QhPW51bGwgJiYgZWFyUHJvamVjdCE9bnVsbCkgewotCQkJaWYgKCFKMkVFVXRpbHMuaXNDb21wb25lbnRBc3NvY2lhdGVkKGVhclByb2plY3QsIG1vZHVsZVByb2plY3QpKQotCQkJCUoyRUVVdGlscy5hc3NvY2lhdGVDb21wb25lbnRUb0VBUihtb2R1bGVQcm9qZWN0LCBlYXJQcm9qZWN0KTsKLQkJfQotCQkKLQkJLy8gZW5zdXJlIG1vZHVsZXMgYXJlIGFzc29jaWF0ZWQgb3RoZXJ3aXNlIHJlcG9ydCBlcnJvcgotCQlpZiAoIUoyRUVVdGlscy5pc0NvbXBvbmVudEFzc29jaWF0ZWQoZWFyUHJvamVjdCwgbW9kdWxlUHJvamVjdCkpewotCQkJc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIE5MUy5iaW5kKENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX1VOQUJMRV9UT19BU1NPQ0lBVEUsIG5ldyBTdHJpbmdbXXttb2R1bGVfLCBlYXJffSkgKTsKLQkJCWlmIChlbnYhPW51bGwpCi0JCQkJZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkgICAgcmV0dXJuIHN0YXR1czsgCi0JCX0KLQkJCi0JCXJldHVybiBzdGF0dXM7Ci0JfQotCQotICBwdWJsaWMgdm9pZCBzZXRQcm9qZWN0KCBTdHJpbmcgcHJvamVjdCApCi0gIHsKLQkgIHByb2plY3RfID0gcHJvamVjdDsKLSAgfQotCSAgCi0gIHB1YmxpYyB2b2lkIHNldE1vZHVsZSggU3RyaW5nIG1vZHVsZSApCi0gIHsKLQkgIG1vZHVsZV8gPSBtb2R1bGU7Ci0gIH0JCi0JCi0gIHB1YmxpYyB2b2lkIHNldEVBUlByb2plY3QoIFN0cmluZyBlYXJQcm9qZWN0ICkKLSAgewotCSAgZWFyUHJvamVjdF8gPSBlYXJQcm9qZWN0OwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRFYXIoIFN0cmluZyBlYXIgKQotICB7Ci0JICBlYXJfID0gZWFyOyAgCi0gIH0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0J1aWxkUHJvamVjdENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vQnVpbGRQcm9qZWN0Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhN2JmN2JhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vQnVpbGRQcm9qZWN0Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSW5jcmVtZW50YWxQcm9qZWN0QnVpbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk9wZXJhdGlvbkNhbmNlbGVkRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwudmFsaWRhdGUuVmFsaWRhdGlvbk1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotCi1wdWJsaWMgY2xhc3MgQnVpbGRQcm9qZWN0Q29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIAotewotICBwcml2YXRlIFZhbGlkYXRpb25NYW5hZ2VyIHZhbGlkYXRpb25NYW5hZ2VyOwotICBwcml2YXRlIElQcm9qZWN0IHByb2plY3RfOwotICBwcml2YXRlIGJvb2xlYW4gZm9yY2VCdWlsZF87Ci0gIC8vIHJtIHByaXZhdGUgTW9kZWwgbW9kZWw7Ci0KLSAgLyoqCi0gICAqIERlZmF1bHQgQ1RPUjsKLSAgICovCi0gIHB1YmxpYyBCdWlsZFByb2plY3RDb21tYW5kKCkKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIEV4ZWN1dGUgdGhlIGNvbW1hbmQKLSAgICovCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgaWYgKGZvcmNlQnVpbGRfKQotICAgICAgICBwcm9qZWN0Xy5idWlsZChJbmNyZW1lbnRhbFByb2plY3RCdWlsZGVyLklOQ1JFTUVOVEFMX0JVSUxELCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLSAgICAgIGVsc2UgaWYgKHZhbGlkYXRpb25NYW5hZ2VyID09IG51bGwpCi0gICAgICAgIHByb2plY3RfLmJ1aWxkKEluY3JlbWVudGFsUHJvamVjdEJ1aWxkZXIuSU5DUkVNRU5UQUxfQlVJTEQsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotICAgICAgZWxzZSBpZiAodmFsaWRhdGlvbk1hbmFnZXIuZ2V0V29ya3NwYWNlQXV0b0J1aWxkUHJlZmVyZW5jZSgpKQotICAgICAgICBwcm9qZWN0Xy5idWlsZChJbmNyZW1lbnRhbFByb2plY3RCdWlsZGVyLklOQ1JFTUVOVEFMX0JVSUxELCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgdHJ5Ci0gICAgewotICAgICAgUGxhdGZvcm0uZ2V0Sm9iTWFuYWdlcigpLmpvaW4oUmVzb3VyY2VzUGx1Z2luLkZBTUlMWV9BVVRPX0JVSUxELCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsgICAKLSAgICB9Ci0gICAgY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGllKQotICAgIHsKLSAgICAgIC8vIGNvbnRpbnVlIGV4ZWN1dGlvbgotICAgIH0KLSAgICBjYXRjaCAoT3BlcmF0aW9uQ2FuY2VsZWRFeGNlcHRpb24gb2NlKQotICAgIHsKLSAgICAgIC8vIGNvbnRpbnVlIGV4ZWN1dGlvbgotICAgIH0KLSAgICAKLSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotICAvKioKLSAgICogQHBhcmFtIGZvcmNlQnVpbGQgVGhlIGZvcmNlQnVpbGQgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Rm9yY2VCdWlsZChib29sZWFuIGZvcmNlQnVpbGQpIHsKLSAgICB0aGlzLmZvcmNlQnVpbGRfID0gZm9yY2VCdWlsZDsKLSAgfQotCi0gIC8qKgotICAgKiBAcGFyYW0gcHJvamVjdCBUaGUgcHJvamVjdCB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRQcm9qZWN0KElQcm9qZWN0IHByb2plY3QpIHsKLSAgICB0aGlzLnByb2plY3RfID0gcHJvamVjdDsKLSAgfQotCi0gIC8qKgotICAgKiBAcGFyYW0gdmFsaWRhdGlvbk1hbmFnZXIgVGhlIHZhbGlkYXRpb25NYW5hZ2VyIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFZhbGlkYXRpb25NYW5hZ2VyKFZhbGlkYXRpb25NYW5hZ2VyIHZhbGlkYXRpb25NYW5hZ2VyKSB7Ci0gICAgdGhpcy52YWxpZGF0aW9uTWFuYWdlciA9IHZhbGlkYXRpb25NYW5hZ2VyOwotICB9Ci0KLSAgCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vQ2hlY2tQcm9qZWN0T0tDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0NoZWNrUHJvamVjdE9LQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODFmM2I5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vQ2hlY2tQcm9qZWN0T0tDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5Db25zdW1wdGlvbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlckNvcmU7Ci0KLXB1YmxpYyBjbGFzcyBDaGVja1Byb2plY3RPS0NvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiAKLXsKLQotICBwcml2YXRlIFN0cmluZyBzZXJ2aWNlU2VydmVyVHlwZUlkXzsKLQotCi0gIC8qKgotICAgKiBEZWZhdWx0IENUT1IKLSAgICovCi0gIHB1YmxpYyBDaGVja1Byb2plY3RPS0NvbW1hbmQoKSB7Ci0gIH0KLQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgeyAKLSAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgCi0gICAgU3RyaW5nIHR5cGVpZCA9IHNlcnZpY2VTZXJ2ZXJUeXBlSWRfOwotICAgIElTZXJ2ZXJbXSBzZXJ2ZXJzID0gU2VydmVyQ29yZS5nZXRTZXJ2ZXJzKCk7Ci0vLyAgICBJdGVyYXRvciBpdGVyYXRvciA9IHNlcnZlcnMuaXRlcmF0b3IoKTsKLSAgICBib29sZWFuIHZpZXdPcGVuID0gZmFsc2U7Ci0gICAgU3RyaW5nIHNlcnZlck5hbWUgPSBudWxsOwotCi0gICAgZm9yIChpbnQgaT0wO2k8c2VydmVycy5sZW5ndGg7aSsrKSB7Ci0gICAgICBJU2VydmVyIHNlcnZlciA9IChJU2VydmVyKSBzZXJ2ZXJzW2ldOwotCi0gICAgICAvLyBJZiB0aGUgY29uZmlndXJhdGlvbiBlZGl0b3IgaXMgb3BlbiBmb3IgdGhlIHNlcnZlciB0aGF0IHdlIGFyZQotICAgICAgLy8gZGVwbG95aW5nCi0gICAgICAvLyB0byB3ZSB3aWxsIHByb21wdCB0aGUgdXNlciB0byBjbG9zZSBpdC4KLSAgICAgIGlmIChzZXJ2ZXIgIT0gbnVsbCAmJiBzZXJ2ZXIuZ2V0U2VydmVyVHlwZSgpLmdldElkKCkuZXF1YWxzKHR5cGVpZCkpIHsKLSAgICAgICAgdmlld09wZW4gPSB0cnVlOwotICAgICAgICBzZXJ2ZXJOYW1lID0gc2VydmVyLmdldE5hbWUoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHZpZXdPcGVuKSB7Ci0gICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gTkxTLmJpbmQoQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfU0VSVkVSX1ZJRVdfT1BFTiwgbmV3IFN0cmluZ1tdIHsgc2VydmVyTmFtZX0pOwotICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBlcnJvck1lc3NhZ2UgKTsKLSAgICAgIAotICAgIH0KLSAgICAKLSAgICByZXR1cm4gc3RhdHVzOwotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBzZXJ2aWNlU2VydmVySWQKLSAgICogICAgICAgICAgICBUaGUgc2VydmljZVNlcnZlciBmYWN0b3J5IElkIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VTZXJ2ZXJUeXBlSUQoU3RyaW5nIHNlcnZpY2VTZXJ2ZXJJZCkgewotICAgIHRoaXMuc2VydmljZVNlcnZlclR5cGVJZF8gPSBzZXJ2aWNlU2VydmVySWQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vQ29tcHV0ZUVuZHBvaW50Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9Db21wdXRlRW5kcG9pbnRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxNjM3MjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9Db21wdXRlRW5kcG9pbnRDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbjsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5TZXJ2aWNlOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQWRkcmVzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VzUGFyc2VyOwotCi1wdWJsaWMgY2xhc3MgQ29tcHV0ZUVuZHBvaW50Q29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIHByaXZhdGUgV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXI7Ci0gIHByaXZhdGUgU3RyaW5nIHdzZGxVUkk7Ci0gIHByaXZhdGUgQm9vbGVhbiBtb25pdG9yU2VydmljZTsKLSAgcHJpdmF0ZSBJbnRlZ2VyIG1vbml0b3JlZFBvcnQ7Ci0KLSAgcHVibGljIENvbXB1dGVFbmRwb2ludENvbW1hbmQoKQotICB7Ci0gIH0KLQotICAvKioKLSAgICogQHBhcmFtIG1vbml0b3JlZFBvcnQgVGhlIG1vbml0b3JlZFBvcnQgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TW9uaXRvcmVkUG9ydChJbnRlZ2VyIG1vbml0b3JlZFBvcnQpCi0gIHsKLSAgICB0aGlzLm1vbml0b3JlZFBvcnQgPSBtb25pdG9yZWRQb3J0OwotICB9Ci0gIC8qKgotICAgKiBAcGFyYW0gbW9uaXRvclNlcnZpY2UgVGhlIG1vbml0b3JTZXJ2aWNlIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE1vbml0b3JTZXJ2aWNlKEJvb2xlYW4gbW9uaXRvclNlcnZpY2UpCi0gIHsKLSAgICB0aGlzLm1vbml0b3JTZXJ2aWNlID0gbW9uaXRvclNlcnZpY2U7Ci0gIH0KLSAgLyoqCi0gICAqIEBwYXJhbSB3ZWJTZXJ2aWNlc1BhcnNlciBUaGUgd2ViU2VydmljZXNQYXJzZXIgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZXNQYXJzZXIoV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXIpCi0gIHsKLSAgICB0aGlzLndlYlNlcnZpY2VzUGFyc2VyID0gd2ViU2VydmljZXNQYXJzZXI7Ci0gIH0KLSAgLyoqCi0gICAqIEBwYXJhbSB3c2RsVVJJIFRoZSB3c2RsVVJJIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdzZGxVUkkoU3RyaW5nIHdzZGxVUkkpCi0gIHsKLSAgICB0aGlzLndzZGxVUkkgPSB3c2RsVVJJOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldEVuZHBvaW50KCkKLSAgewotICAgIGlmIChtb25pdG9yU2VydmljZSAhPSBudWxsICYmIG1vbml0b3JTZXJ2aWNlLmJvb2xlYW5WYWx1ZSgpICYmIG1vbml0b3JlZFBvcnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uIGRlZiA9IHdlYlNlcnZpY2VzUGFyc2VyLmdldFdTRExEZWZpbml0aW9uKHdzZGxVUkkpOwotICAgICAgaWYgKGRlZiAhPSBudWxsKQotICAgICAgewotICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gZGVmLmdldFNlcnZpY2VzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICAgICAgewotICAgICAgICAgIFNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKWl0Lm5leHQoKTsKLSAgICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0MiA9IHNlcnZpY2UuZ2V0UG9ydHMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOyBpdDIuaGFzTmV4dCgpOykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBQb3J0IHBvcnQgPSAoUG9ydClpdDIubmV4dCgpOwotICAgICAgICAgICAgZm9yIChJdGVyYXRvciBpdDMgPSBwb3J0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7IGl0My5oYXNOZXh0KCk7KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHQgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpaXQzLm5leHQoKTsKLSAgICAgICAgICAgICAgaWYgKGV4dCBpbnN0YW5jZW9mIFNPQVBBZGRyZXNzKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGxvY2F0aW9uID0gKChTT0FQQWRkcmVzcylleHQpLmdldExvY2F0aW9uVVJJKCk7Ci0gICAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwobG9jYXRpb24pOwotICAgICAgICAgICAgICAgICAgdXJsID0gbmV3IFVSTCh1cmwuZ2V0UHJvdG9jb2woKSwgdXJsLmdldEhvc3QoKSwgbW9uaXRvcmVkUG9ydC5pbnRWYWx1ZSgpLCB1cmwuZ2V0RmlsZSgpKTsKLSAgICAgICAgICAgICAgICAgIHJldHVybiB1cmwudG9TdHJpbmcoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBtdXJsZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBpbnQgcHJvdG9jb2xJbmRleCA9IGxvY2F0aW9uLmluZGV4T2YoIjovLyIpOwotICAgICAgICAgICAgICAgICAgaWYgKHByb3RvY29sSW5kZXggIT0gLTEpCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBwcm90b2NvbCA9IGxvY2F0aW9uLnN1YnN0cmluZygwLCBwcm90b2NvbEluZGV4KzMpOwotICAgICAgICAgICAgICAgICAgICBpbnQgaG9zdFBvcnRJbmRleCA9IGxvY2F0aW9uLmluZGV4T2YoJy8nLCBwcm90b2NvbEluZGV4KzMpOwotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZmlsZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGhvc3RQb3J0SW5kZXggPT0gLTEpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICBob3N0UG9ydEluZGV4ID0gbG9jYXRpb24ubGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgZmlsZSA9ICIiOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICBmaWxlID0gbG9jYXRpb24uc3Vic3RyaW5nKGhvc3RQb3J0SW5kZXgsIGxvY2F0aW9uLmxlbmd0aCgpKTsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGhvc3RQb3J0ID0gbG9jYXRpb24uc3Vic3RyaW5nKHByb3RvY29sSW5kZXgrMywgaG9zdFBvcnRJbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgIGludCBob3N0SW5kZXggPSBob3N0UG9ydC5pbmRleE9mKCc6Jyk7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBob3N0OwotICAgICAgICAgICAgICAgICAgICBpZiAoaG9zdEluZGV4ICE9IC0xKQotICAgICAgICAgICAgICAgICAgICAgIGhvc3QgPSBob3N0UG9ydC5zdWJzdHJpbmcoMCwgaG9zdEluZGV4KzEpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgaG9zdCA9IGhvc3RQb3J0ICsgJzonOwotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbmV3UG9ydCA9IFN0cmluZy52YWx1ZU9mKG1vbml0b3JlZFBvcnQuaW50VmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1ZmZlciBlbmRwb2ludCA9IG5ldyBTdHJpbmdCdWZmZXIocHJvdG9jb2wpOwotICAgICAgICAgICAgICAgICAgICBlbmRwb2ludC5hcHBlbmQoaG9zdCk7Ci0gICAgICAgICAgICAgICAgICAgIGVuZHBvaW50LmFwcGVuZChuZXdQb3J0KTsKLSAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQuYXBwZW5kKGZpbGUpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW5kcG9pbnQudG9TdHJpbmcoKTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBpbmZvKSB0aHJvd3MgRXhlY3V0aW9uRXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9Db21wdXRlUHJveHlFbmRwb2ludENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vQ29tcHV0ZVByb3h5RW5kcG9pbnRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkMDE0ZTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9Db21wdXRlUHJveHlFbmRwb2ludENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA3MjggICAxNDU0MjYga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb247Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi1wdWJsaWMgY2xhc3MgQ29tcHV0ZVByb3h5RW5kcG9pbnRDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLSAgcHJpdmF0ZSBCb29sZWFuIG1vbml0b3JTZXJ2aWNlOwotICBwcml2YXRlIEludGVnZXIgbW9uaXRvcmVkUG9ydDsKLSAgcHJpdmF0ZSBTdHJpbmcgcHJveHlFbmRwb2ludDsKLSAgcHJpdmF0ZSBTdHJpbmcgZW5kcG9pbnQ7Ci0KLSAgcHVibGljIENvbXB1dGVQcm94eUVuZHBvaW50Q29tbWFuZCgpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBAcGFyYW0gbW9uaXRvcmVkUG9ydCBUaGUgbW9uaXRvcmVkUG9ydCB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRNb25pdG9yZWRQb3J0KEludGVnZXIgbW9uaXRvcmVkUG9ydCkKLSAgewotICAgIHRoaXMubW9uaXRvcmVkUG9ydCA9IG1vbml0b3JlZFBvcnQ7Ci0gIH0KLSAgLyoqCi0gICAqIEBwYXJhbSBtb25pdG9yU2VydmljZSBUaGUgbW9uaXRvclNlcnZpY2UgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TW9uaXRvclNlcnZpY2UoQm9vbGVhbiBtb25pdG9yU2VydmljZSkKLSAgewotICAgIHRoaXMubW9uaXRvclNlcnZpY2UgPSBtb25pdG9yU2VydmljZTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRFbmRwb2ludCgpCi0gIHsKLSAgCWlmIChtb25pdG9yU2VydmljZSAhPSBudWxsICYmIG1vbml0b3JTZXJ2aWNlLmJvb2xlYW5WYWx1ZSgpICYmIG1vbml0b3JlZFBvcnQgIT0gbnVsbCkKLSAgCXsKLSAgCQkvLyBVc2UgdGhlIGVuZHBvaW50IHRoYXQgbWF0Y2hlcyB3aXRoIHRoZSBwcm94eSB0aGUgZXh0ZW5zaW9uIHBhc3NlcyB0byB1cyBpZiBpdCBpcyBzZXQKLSAgCQlpZiAocHJveHlFbmRwb2ludCAhPSBudWxsKSB7Ci0gIAkJCVN0cmluZyBsb2NhdGlvbiA9IHByb3h5RW5kcG9pbnQ7Ci0gIAkJCXRyeQotCQkJewotICAJCQkJVVJMIHVybCA9IG5ldyBVUkwobG9jYXRpb24pOwotICAJCQkJdXJsID0gbmV3IFVSTCh1cmwuZ2V0UHJvdG9jb2woKSwgdXJsLmdldEhvc3QoKSwgbW9uaXRvcmVkUG9ydC5pbnRWYWx1ZSgpLCB1cmwuZ2V0RmlsZSgpKTsKLSAgCQkJCXJldHVybiB1cmwudG9TdHJpbmcoKTsKLQkJCX0KLSAgCQkJY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBtdXJsZSkKLQkJCXsKLSAgCQkJCWludCBwcm90b2NvbEluZGV4ID0gbG9jYXRpb24uaW5kZXhPZigiOi8vIik7Ci0gICAgICAgICAgICAgICAgaWYgKHByb3RvY29sSW5kZXggIT0gLTEpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgU3RyaW5nIHByb3RvY29sID0gbG9jYXRpb24uc3Vic3RyaW5nKDAsIHByb3RvY29sSW5kZXgrMyk7Ci0gICAgICAgICAgICAgICAgICBpbnQgaG9zdFBvcnRJbmRleCA9IGxvY2F0aW9uLmluZGV4T2YoJy8nLCBwcm90b2NvbEluZGV4KzMpOwotICAgICAgICAgICAgICAgICAgU3RyaW5nIGZpbGU7Ci0gICAgICAgICAgICAgICAgICBpZiAoaG9zdFBvcnRJbmRleCA9PSAtMSkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaG9zdFBvcnRJbmRleCA9IGxvY2F0aW9uLmxlbmd0aCgpOwotICAgICAgICAgICAgICAgICAgICBmaWxlID0gIiI7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGZpbGUgPSBsb2NhdGlvbi5zdWJzdHJpbmcoaG9zdFBvcnRJbmRleCwgbG9jYXRpb24ubGVuZ3RoKCkpOwotICAgICAgICAgICAgICAgICAgU3RyaW5nIGhvc3RQb3J0ID0gbG9jYXRpb24uc3Vic3RyaW5nKHByb3RvY29sSW5kZXgrMywgaG9zdFBvcnRJbmRleCk7Ci0gICAgICAgICAgICAgICAgICBpbnQgaG9zdEluZGV4ID0gaG9zdFBvcnQuaW5kZXhPZignOicpOwotICAgICAgICAgICAgICAgICAgU3RyaW5nIGhvc3Q7Ci0gICAgICAgICAgICAgICAgICBpZiAoaG9zdEluZGV4ICE9IC0xKQotICAgICAgICAgICAgICAgICAgICBob3N0ID0gaG9zdFBvcnQuc3Vic3RyaW5nKDAsIGhvc3RJbmRleCsxKTsKLSAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgaG9zdCA9IGhvc3RQb3J0ICsgJzonOwotICAgICAgICAgICAgICAgICAgU3RyaW5nIG5ld1BvcnQgPSBTdHJpbmcudmFsdWVPZihtb25pdG9yZWRQb3J0LmludFZhbHVlKCkpOwotICAgICAgICAgICAgICAgICAgU3RyaW5nQnVmZmVyIGVuZHBvaW50ID0gbmV3IFN0cmluZ0J1ZmZlcihwcm90b2NvbCk7Ci0gICAgICAgICAgICAgICAgICBlbmRwb2ludC5hcHBlbmQoaG9zdCk7Ci0gICAgICAgICAgICAgICAgICBlbmRwb2ludC5hcHBlbmQobmV3UG9ydCk7Ci0gICAgICAgICAgICAgICAgICBlbmRwb2ludC5hcHBlbmQoZmlsZSk7Ci0gICAgICAgICAgICAgICAgICByZXR1cm4gZW5kcG9pbnQudG9TdHJpbmcoKTsKLSAgICAgICAgICAgICAgICB9Ci0JCQl9Ci0gIAkJfSBlbHNlIHsKLSAgCQkJcmV0dXJuIGVuZHBvaW50OwotICAJCX0KLSAgCX0KLSAgCXJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgaW5mbykgdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbgotICB7Ci0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAcGFyYW0gcHJveHlFbmRwb2ludCBUaGUgcHJveHlFbmRwb2ludCB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRQcm94eUVuZHBvaW50KFN0cmluZyBwcm94eUVuZHBvaW50KSB7Ci0gIAl0aGlzLnByb3h5RW5kcG9pbnQgPSBwcm94eUVuZHBvaW50OwotICB9Ci0gIC8qKgotICAgKiBAcGFyYW0gZW5kcG9pbnQgVGhlIGVuZHBvaW50IHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEVuZHBvaW50KFN0cmluZyBlbmRwb2ludCkgewotICAJdGhpcy5lbmRwb2ludCA9IGVuZHBvaW50OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0NvcHlXU0RMQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9Db3B5V1NETENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTgzNDk0OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0NvcHlXU0RMQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzYyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MTIxMyAgIDE2NTcyMyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjEyMTMgICAxNjU3MjUga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb247Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkltcG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlR5cGVzOwotaW1wb3J0IGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmZhY3RvcnkuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgud3NkbC54bWwuV1NETFdyaXRlcjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLk91dHB1dEtleXM7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lcjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uZG9tLkRPTVNvdXJjZTsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLnN0cmVhbS5TdHJlYW1SZXN1bHQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlUnVubmFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5Db25zdW1wdGlvbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQudXJpLlVSSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZGlzY292ZXJ5Lk5ldFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC53c2RsNGouV1NETEZhY3RvcnlJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYURpcmVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuaW1wbC5YU0RTY2hlbWFJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC51dGlsLlhTRFBhcnNlcjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgQ29weVdTRExDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLSAgcHJpdmF0ZSBTdHJpbmcgd3NkbFVSSTsKLSAgcHJpdmF0ZSBXZWJTZXJ2aWNlc1BhcnNlciB3ZWJTZXJ2aWNlc1BhcnNlcjsKLSAgcHJpdmF0ZSBTdHJpbmcgZGVzdGluYXRpb25VUkk7Ci0gIHByaXZhdGUgRGVmaW5pdGlvbiBkZWY7Ci0gIHByaXZhdGUgVmVjdG9yIGlnbm9yZUxpc3Q7Ci0KLSAgcHVibGljIENvcHlXU0RMQ29tbWFuZCgpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBFeGVjdXRlIHRoZSBjb21tYW5kCi0gICAqLwotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgewotICAgIElFbnZpcm9ubWVudCBlbnYgPSBnZXRFbnZpcm9ubWVudCgpOwotICAgIENvcHlXU0RMUnVubmFibGUgY29weVdTRExSdW5uYWJsZSA9IG5ldyBDb3B5V1NETFJ1bm5hYmxlKGVudik7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2UoKS5ydW4oY29weVdTRExSdW5uYWJsZSwgbnVsbCk7Ci0gICAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICB9Ci0gICAgY2F0Y2ggKENvcmVFeGNlcHRpb24gY2UpCi0gICAgewotICAgICAgICBJU3RhdHVzIHN0YXR1cyA9IGNlLmdldFN0YXR1cygpOwotCQllbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0KLSAgfQotCi0gICAKLSAgcHJpdmF0ZSBjbGFzcyBDb3B5V1NETFJ1bm5hYmxlIGltcGxlbWVudHMgSVdvcmtzcGFjZVJ1bm5hYmxlIHsKLSAgCQotICAJcHJpdmF0ZSBJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQgPSBudWxsOwotICAJCi0gIAlwcm90ZWN0ZWQgQ29weVdTRExSdW5uYWJsZShJRW52aXJvbm1lbnQgZW52KXsKLSAgCQllbnZpcm9ubWVudCA9IGVudjsKLSAgCX0KLSAgCXB1YmxpYyB2b2lkIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIHBtKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0gIAkJaWdub3JlTGlzdCA9IG5ldyBWZWN0b3IoKTsKLSAgCQlpZiAoZGVmID09IG51bGwpCi0gIAkJCWRlZiA9IHdlYlNlcnZpY2VzUGFyc2VyLmdldFdTRExEZWZpbml0aW9uKHdzZGxVUkkpOwotICAJCXRyeSB7Ci0gIAkJCWNvcHlXU0RMKGVudmlyb25tZW50LCB3c2RsVVJJLCBnZXRCYXNlVVJJKGRlc3RpbmF0aW9uVVJJKSwgZ2V0TG9jYWxuYW1lKGRlc3RpbmF0aW9uVVJJKSwgZGVmKTsKLSAgCQl9IGNhdGNoIChUaHJvd2FibGUgZSkgewotICAJCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggTkxTLmJpbmQoQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfQ09QWV9XU0RMLCBuZXcgU3RyaW5nW117d3NkbFVSSSwgZGVzdGluYXRpb25VUkl9KSwgZSkpOwotICAJCX0KLSAgCX0KLSAgfQotICBwcml2YXRlIHZvaWQgY29weVdTREwoSUVudmlyb25tZW50IGVudiwgU3RyaW5nIHVyaSwgU3RyaW5nIGRlc3RVUkksIFN0cmluZyBkZXN0TG9jYWxuYW1lKSB0aHJvd3MgV1NETEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIFdXV0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uLCBUcmFuc2Zvcm1lckV4Y2VwdGlvbiwgVHJhbnNmb3JtZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uLCBVUklFeGNlcHRpb24KLSAgewotICAJRGVmaW5pdGlvbiBkZWZpbml0aW9uOwotCQotCXRyeSB7Ci0JCWRlZmluaXRpb24gPSB3ZWJTZXJ2aWNlc1BhcnNlci5nZXRXU0RMRGVmaW5pdGlvblZlcmJvc2UodXJpKTsKLQkJY29weVdTREwoZW52LCB1cmksIGRlc3RVUkksIGRlc3RMb2NhbG5hbWUsIGRlZmluaXRpb24pOwkKLQl9IGNhdGNoIChXU0RMRXhjZXB0aW9uIGUpIHsKLQkJY29weVhNTFNjaGVtYShlbnYsIHVyaSwgZGVzdFVSSSk7Ci0JfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNvcHlXU0RMKElFbnZpcm9ubWVudCBlbnYsIFN0cmluZyB1cmksIFN0cmluZyBkZXN0VVJJLCBTdHJpbmcgZGVzdExvY2FsbmFtZSwgRGVmaW5pdGlvbiBkZWZpbml0aW9uKSB0aHJvd3MgV1NETEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIFdXV0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uLCBUcmFuc2Zvcm1lckV4Y2VwdGlvbiwgVHJhbnNmb3JtZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uLCBVUklFeGNlcHRpb24KLSAgewotCXVyaSA9IG5vcm1hbGl6ZSh1cmkpOwotCWlmICghbmVlZFRvQ29weSh1cmkpKSB7Ci0JICAgCXJldHVybjsKLQl9Ci0JZGVzdFVSSSA9IG5vcm1hbGl6ZShkZXN0VVJJKTsKLSAgICBTdHJpbmcgYmFzZVVSSSA9IGdldEJhc2VVUkkodXJpKTsKLSAgICBpZiAoZGVzdExvY2FsbmFtZSA9PSBudWxsIHx8IGRlc3RMb2NhbG5hbWUubGVuZ3RoKCkgPD0gMCkKLSAgICAgIGRlc3RMb2NhbG5hbWUgPSBnZXRMb2NhbG5hbWUodXJpKTsKLSAgICAKLSAgICAvLyBjb3B5IFdTREwKLSAgICBTdHJpbmdCdWZmZXIgZGVzdGluYXRpb25GaWxlVVJJID0gbmV3IFN0cmluZ0J1ZmZlcihhZGRUcmFpbGluZ1NlcGFyYXRvcihkZXN0VVJJKSk7Ci0gICAgZGVzdGluYXRpb25GaWxlVVJJLmFwcGVuZChkZXN0TG9jYWxuYW1lKTsKLSAgICBXU0RMRmFjdG9yeSB3c2RsRmFjdG9yeSA9IG5ldyBXU0RMRmFjdG9yeUltcGwoKTsKLSAgICBXU0RMV3JpdGVyIHdzZGxXcml0ZXIgPSB3c2RsRmFjdG9yeS5uZXdXU0RMV3JpdGVyKCk7Ci0gICAgT3V0cHV0U3RyZWFtIG9zID0gZW52LmdldFVSSUZhY3RvcnkoKS5uZXdVUkkoZGVzdGluYXRpb25GaWxlVVJJLnRvU3RyaW5nKCkpLmdldE91dHB1dFN0cmVhbSgpOwotICAgIHdzZGxXcml0ZXIud3JpdGVXU0RMKGRlZmluaXRpb24sIG9zKTsKLSAgICBvcy5jbG9zZSgpOwotICAgIC8vIGNvcHkgPHdzZGw6aW1wb3J0PnMKLSAgICBNYXAgaW1wb3J0cyA9IGRlZmluaXRpb24uZ2V0SW1wb3J0cygpOwotICAgIGZvciAoSXRlcmF0b3IgaXQgPSBpbXBvcnRzLnZhbHVlcygpLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgewotICAgICAgTGlzdCBsaXN0ID0gKExpc3QpaXQubmV4dCgpOwotICAgICAgZm9yIChJdGVyYXRvciBsaXN0SXQgPSBsaXN0Lml0ZXJhdG9yKCk7IGxpc3RJdC5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBJbXBvcnQgd3NkbEltcG9ydCA9IChJbXBvcnQpbGlzdEl0Lm5leHQoKTsKLSAgICAgICAgU3RyaW5nIHdzZGxJbXBvcnRVUkkgPSB3c2RsSW1wb3J0LmdldExvY2F0aW9uVVJJKCk7Ci0gICAgICAgIGlmIChpc1JlbGF0aXZlKHdzZGxJbXBvcnRVUkkpKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIGltcG9ydEJhc2VVUkkgPSAobmV3IFN0cmluZ0J1ZmZlcihiYXNlVVJJKSkuYXBwZW5kKHdzZGxJbXBvcnRVUkkpLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgU3RyaW5nIHdzZGxJbXBvcnRCYXNlVVJJID0gZ2V0QmFzZVVSSSh3c2RsSW1wb3J0VVJJKTsKLSAgICAgICAgICBTdHJpbmdCdWZmZXIgaW1wb3J0RGVzdFVSSSA9IG5ldyBTdHJpbmdCdWZmZXIoZGVzdFVSSSk7Ci0gICAgICAgICAgaWYgKHdzZGxJbXBvcnRCYXNlVVJJICE9IG51bGwpCi0gICAgICAgICAgICBpbXBvcnREZXN0VVJJLmFwcGVuZCh3c2RsSW1wb3J0QmFzZVVSSSk7Ci0gICAgICAgICAgY29weVdTREwoZW52LCBpbXBvcnRCYXNlVVJJLCBpbXBvcnREZXN0VVJJLnRvU3RyaW5nKCksIGdldExvY2FsbmFtZSh3c2RsSW1wb3J0VVJJKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgVHlwZXMgdHlwZXMgPSBkZWZpbml0aW9uLmdldFR5cGVzKCk7Ci0gICAgaWYgKHR5cGVzICE9IG51bGwpCi0gICAgewotICAgICAgTGlzdCBzY2hlbWFzID0gdHlwZXMuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gc2NoZW1hcy5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtZW50ID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWl0Lm5leHQoKTsKLSAgICAgICAgaWYgKGV4dEVsZW1lbnQgaW5zdGFuY2VvZiBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi0gICAgICAgIHsKLSAgICAgICAgICBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQgc2NoZW1hRWxlbWVudCA9IChVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZXh0RWxlbWVudDsKLSAgICAgICAgICBYU0RTY2hlbWEgeHNkU2NoZW1hID0gbnVsbDsKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB4c2RTY2hlbWEgPSBYU0RTY2hlbWFJbXBsLmNyZWF0ZVNjaGVtYShzY2hlbWFFbGVtZW50LmdldEVsZW1lbnQoKSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBpZ25vcmUgYW55IGV4dGVuc2liaWxpdHkgZWxlbWVudHMgdGhhdCBjYW5ub3QgYmUgcGFyc2VkIGludG8gYQotICAgICAgICAgICAgLy8gWFNEU2NoZW1hIGluc3RhbmNlCi0gICAgICAgICAgfQotICAgICAgICAgIGNvcHlYTUxTY2hlbWEoZW52LCB4c2RTY2hlbWEsIGJhc2VVUkksIGRlc3RVUkkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGV4dEVsZW1lbnQgaW5zdGFuY2VvZiBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwpCi0gICAgICAgIHsKLSAgICAgICAgICBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwgc2NoZW1hRWxlbWVudCA9IChYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwpZXh0RWxlbWVudDsKLSAgICAgICAgICBYU0RTY2hlbWEgeHNkU2NoZW1hID0gbnVsbDsKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB4c2RTY2hlbWEgPSBYU0RTY2hlbWFJbXBsLmNyZWF0ZVNjaGVtYShzY2hlbWFFbGVtZW50LmdldEVsZW1lbnQoKSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBpZ25vcmUgYW55IGV4dGVuc2liaWxpdHkgZWxlbWVudHMgdGhhdCBjYW5ub3QgYmUgcGFyc2VkIGludG8gYQotICAgICAgICAgICAgLy8gWFNEU2NoZW1hIGluc3RhbmNlCi0gICAgICAgICAgfQotICAgICAgICAgIGNvcHlYTUxTY2hlbWEoZW52LCB4c2RTY2hlbWEsIGJhc2VVUkksIGRlc3RVUkkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0QmFzZVVSSShTdHJpbmcgdXJpKQotICB7Ci0gICAgaW50IGluZGV4ID0gdXJpLmxhc3RJbmRleE9mKCcvJyk7Ci0gICAgaWYgKGluZGV4ID09IC0xKQotICAgICAgaW5kZXggPSB1cmkubGFzdEluZGV4T2YoJ1xcJyk7Ci0gICAgaWYgKGluZGV4ICE9IC0xKQotICAgICAgcmV0dXJuIHVyaS5zdWJzdHJpbmcoMCwgaW5kZXggKyAxKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIGdldExvY2FsbmFtZShTdHJpbmcgdXJpKQotICB7Ci0gICAgaW50IGluZGV4ID0gdXJpLmxhc3RJbmRleE9mKCcvJyk7Ci0gICAgaWYgKGluZGV4ID09IC0xKQotICAgICAgaW5kZXggPSB1cmkubGFzdEluZGV4T2YoJ1xcJyk7Ci0gICAgaWYgKGluZGV4ICE9IC0xKQotICAgICAgcmV0dXJuIHVyaS5zdWJzdHJpbmcoaW5kZXggKyAxKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gdXJpOwotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgYWRkVHJhaWxpbmdTZXBhcmF0b3IoU3RyaW5nIHMpCi0gIHsKLSAgICBpZiAoIShzLmVuZHNXaXRoKCIvIikgfHwgcy5lbmRzV2l0aCgiXFwiKSkpCi0gICAgewotICAgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcihzKTsKLSAgICAgIHNiLmFwcGVuZCgnLycpOwotICAgICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJldHVybiBzOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGlzUmVsYXRpdmUoU3RyaW5nIHVyaSkKLSAgewotICAgIHJldHVybiAodXJpLmluZGV4T2YoJzonKSA9PSAtMSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgY29weVhNTFNjaGVtYShJRW52aXJvbm1lbnQgZW52LCBTdHJpbmcgdXJpLCBTdHJpbmcgZGVzdFVSSSkgdGhyb3dzIFRyYW5zZm9ybWVyRXhjZXB0aW9uLCBUcmFuc2Zvcm1lckNvbmZpZ3VyYXRpb25FeGNlcHRpb24sIElPRXhjZXB0aW9uLCBVUklFeGNlcHRpb24KLSAgewotCSAgdXJpID0gbm9ybWFsaXplKHVyaSk7Ci0JICBpZiAoIW5lZWRUb0NvcHkodXJpKSkgewotCSAgICAJcmV0dXJuOwotCSAgICB9Ci0JICBkZXN0VVJJID0gbm9ybWFsaXplKGRlc3RVUkkpOwotICAgIC8vIGxvYWQgYXMgYSBjYWNoZWQgc2NoZW1hCi0gICAgWFNEU2NoZW1hIHhzZFNjaGVtYSA9IFhTRFNjaGVtYUltcGwuZ2V0U2NoZW1hRm9yU2NoZW1hKHVyaSk7Ci0gICAgLy8gaWYgc2NoZW1hIGlzIG5vdCBjYWNoZWQsIHBhcnNlIGl0Ci0gICAgaWYgKHhzZFNjaGVtYSA9PSBudWxsKQotICAgIHsKLSAgICAgIFhTRFBhcnNlciBwID0gbmV3IFhTRFBhcnNlcigpOwotICAgICAgSW5wdXRTdHJlYW0gaXMgPSBOZXRVdGlscy5nZXRVUkxJbnB1dFN0cmVhbSh1cmkpOwotICAgICAgaWYgKGlzICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHAucGFyc2UoaXMpOwotICAgICAgICB4c2RTY2hlbWEgPSBwLmdldFNjaGVtYSgpOwotICAgICAgfQotICAgIH0KLSAgICBpZiAoeHNkU2NoZW1hICE9IG51bGwpCi0gICAgewotICAgICAgLy8gY29weSBzY2hlbWEKLSAgICAgIEVsZW1lbnQgZSA9IHhzZFNjaGVtYS5nZXRFbGVtZW50KCk7Ci0gICAgICBET01Tb3VyY2UgZG9tU291cmNlID0gbmV3IERPTVNvdXJjZShlKTsKLSAgICAgIFRyYW5zZm9ybWVyIHNlcmlhbGl6ZXIgPSBUcmFuc2Zvcm1lckZhY3RvcnkubmV3SW5zdGFuY2UoKS5uZXdUcmFuc2Zvcm1lcigpOwotICAgICAgc2VyaWFsaXplci5zZXRPdXRwdXRQcm9wZXJ0eShPdXRwdXRLZXlzLklOREVOVCwgInllcyIpOwotICAgICAgc2VyaWFsaXplci5zZXRPdXRwdXRQcm9wZXJ0eShPdXRwdXRLZXlzLkVOQ09ESU5HLCAiVVRGLTgiKTsKLSAgICAgIHNlcmlhbGl6ZXIuc2V0T3V0cHV0UHJvcGVydHkoIntodHRwOi8veG1sLmFwYWNoZS5vcmcveHNsdH1pbmRlbnQtYW1vdW50IiwgIjIiKTsKLSAgICAgIE91dHB1dFN0cmVhbSBvcyA9IGVudi5nZXRVUklGYWN0b3J5KCkubmV3VVJJKChuZXcgU3RyaW5nQnVmZmVyKGRlc3RVUkkpKS5hcHBlbmQoZ2V0TG9jYWxuYW1lKHVyaSkpLnRvU3RyaW5nKCkpLmdldE91dHB1dFN0cmVhbSgpOwotICAgICAgc2VyaWFsaXplci50cmFuc2Zvcm0oZG9tU291cmNlLCBuZXcgU3RyZWFtUmVzdWx0KG9zKSk7Ci0gICAgICBvcy5jbG9zZSgpOwotICAgICAgLy8gY29weSA8eHNkOmltcG9ydD5zIGFuZCA8eHNkOmluY2x1ZGU+cwotICAgICAgY29weVhNTFNjaGVtYShlbnYsIHhzZFNjaGVtYSwgZ2V0QmFzZVVSSSh1cmkpLCBkZXN0VVJJKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgY29weVhNTFNjaGVtYShJRW52aXJvbm1lbnQgZW52LCBYU0RTY2hlbWEgeHNkU2NoZW1hLCBTdHJpbmcgYmFzZVVSSSwgU3RyaW5nIGRlc3RVUkkpIHRocm93cyBUcmFuc2Zvcm1lckV4Y2VwdGlvbiwgVHJhbnNmb3JtZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgVVJJRXhjZXB0aW9uCi0gIHsKLSAgICBpZiAoeHNkU2NoZW1hICE9IG51bGwpCi0gICAgewotICAgICAgLy8gY29weSA8eHNkOmltcG9ydD5zIGFuZCA8eHNkOmluY2x1ZGU+cwotICAgICAgRUxpc3QgeHNkU2NoZW1hQ29udGVudHMgPSB4c2RTY2hlbWEuZ2V0Q29udGVudHMoKTsKLSAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSB4c2RTY2hlbWFDb250ZW50cy5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBPYmplY3QgY29udGVudCA9IGl0Lm5leHQoKTsKLSAgICAgICAgaWYgKGNvbnRlbnQgaW5zdGFuY2VvZiBYU0RTY2hlbWFEaXJlY3RpdmUpCi0gICAgICAgIHsKLSAgICAgICAgICBYU0RTY2hlbWFEaXJlY3RpdmUgeHNkU2NoZW1hRGlyZWN0aXZlID0gKFhTRFNjaGVtYURpcmVjdGl2ZSljb250ZW50OwotICAgICAgICAgIFN0cmluZyB4c2RTY2hlbWFEaXJlY3RpdmVMb2NhdGlvbiA9IHhzZFNjaGVtYURpcmVjdGl2ZS5nZXRTY2hlbWFMb2NhdGlvbigpOwotICAgICAgICAgIGlmICh4c2RTY2hlbWFEaXJlY3RpdmVMb2NhdGlvbiAhPSBudWxsICYmIGlzUmVsYXRpdmUoeHNkU2NoZW1hRGlyZWN0aXZlTG9jYXRpb24pKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBkaXJlY3RpdmVVUkkgPSAobmV3IFN0cmluZ0J1ZmZlcihiYXNlVVJJKSkuYXBwZW5kKHhzZFNjaGVtYURpcmVjdGl2ZUxvY2F0aW9uKS50b1N0cmluZygpOwotICAgICAgICAgICAgU3RyaW5nIGRpcmVjdGl2ZUJhc2VVUkkgPSBnZXRCYXNlVVJJKHhzZFNjaGVtYURpcmVjdGl2ZUxvY2F0aW9uKTsKLSAgICAgICAgICAgIFN0cmluZ0J1ZmZlciBkaXJlY3RpdmVEZXN0VVJJID0gbmV3IFN0cmluZ0J1ZmZlcihkZXN0VVJJKTsKLSAgICAgICAgICAgIGlmIChkaXJlY3RpdmVCYXNlVVJJICE9IG51bGwpCi0gICAgICAgICAgICAgIGRpcmVjdGl2ZURlc3RVUkkuYXBwZW5kKGRpcmVjdGl2ZUJhc2VVUkkpOwotICAgICAgICAgICAgY29weVhNTFNjaGVtYShlbnYsIGRpcmVjdGl2ZVVSSSwgZGlyZWN0aXZlRGVzdFVSSS50b1N0cmluZygpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gbmVlZFRvQ29weSAoU3RyaW5nIG5vcm1hbGl6ZWRVUkkpIHsJCi0JICBpZiAoaWdub3JlTGlzdC5jb250YWlucyhub3JtYWxpemVkVVJJKSkKLQkJICByZXR1cm4gZmFsc2U7Ci0JICBpZ25vcmVMaXN0LmFkZChub3JtYWxpemVkVVJJKTsKLQkgIHJldHVybiB0cnVlOwotICB9Ci0gIAotLy9ub3JtYWxpemUgdGhlIHVyaSB0byByZW1vdmUgcmVsYXRpdmUgYWRkcmVzc2luZyAiLy4uIgotICBwcml2YXRlIFN0cmluZyBub3JtYWxpemUoU3RyaW5nIHVyaSApCi0gIHsKLSAgCWJvb2xlYW4gbm9ybWFsaXplZCA9IGZhbHNlOwotICAJd2hpbGUoIW5vcm1hbGl6ZWQpewotICAJICBpbnQgZGlyID0gdXJpLmluZGV4T2YoIi8uLiIpOwotICAJICBpZihkaXIgPT0gLTEpCi0gIAkgIAlub3JtYWxpemVkID0gdHJ1ZTsKLSAgCSAgZWxzZXsKLSAgCSAgCVN0cmluZyBmaXJzdCA9IHVyaS5zdWJzdHJpbmcoMCxkaXIpOwotICAJICAgIFN0cmluZyBzZWNvbmQgPSB1cmkuc3Vic3RyaW5nKGRpciArIDMpOwotICAJICAgIGludCBuZXdJbmRleCA9IGZpcnN0Lmxhc3RJbmRleE9mKCIvIik7Ci0gIAkgICAgaWYobmV3SW5kZXggPT0gLTEpewotICAJICAgIAlub3JtYWxpemVkID0gdHJ1ZTsKLSAgCSAgICB9IGVsc2UgewotICAJICAgIAlmaXJzdCA9IGZpcnN0LnN1YnN0cmluZygwLG5ld0luZGV4KTsKLSAgCSAgICAJdXJpID0gZmlyc3QgKyBzZWNvbmQ7Ci0gIAkgICAgfQotICAJICB9Ci0gIAl9Ci0gIAlyZXR1cm4gdXJpOwotICAKLSAgfQotCSAgCi0gIHB1YmxpYyB2b2lkIHNldFdzZGxVUkkoU3RyaW5nIHdzZGxVUkkpCi0gIHsKLSAgICB0aGlzLndzZGxVUkkgPSB3c2RsVVJJOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZXNQYXJzZXIoV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXIpCi0gIHsKLSAgICB0aGlzLndlYlNlcnZpY2VzUGFyc2VyID0gd2ViU2VydmljZXNQYXJzZXI7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXREZXN0aW5hdGlvblVSSShTdHJpbmcgZGVzdGluYXRpb25VUkkpCi0gIHsKLSAgICB0aGlzLmRlc3RpbmF0aW9uVVJJID0gZGVzdGluYXRpb25VUkk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXREZWZpbml0aW9uKERlZmluaXRpb24gZGVmKQotICB7Ci0gICAgdGhpcy5kZWYgPSBkZWY7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vQ29weVdTRExUcmVlQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9Db3B5V1NETFRyZWVDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiZWRiMmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9Db3B5V1NETFRyZWVDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMTEyICAgMTY1NzIxIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0RMIGltcG9ydCBjYW5ub3QgdXNlIHJlbGF0aXZlIGltcG9ydCB3aXRoIHRvIHBhcmVudCBkaXJlY3RvcmllcwotICogMjAwNzAxMjUgICAxNzEwNzEgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIENyZWF0ZSBwdWJsaWMgdXRpbGl0eSBtZXRob2QgZm9yIGNvcHlpbmcgV1NETCBmaWxlcwotICogMjAwNzA0MDkgICAxODE2MzUgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTRExDb3BpZXIgdXRpbGl0eSBzaG91bGQgY3JlYXRlIHRhcmdldCBmb2xkZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb247Ci0KLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlc1BhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudXRpbC5XU0RMQ29waWVyOwotCi0vKioKLSAqIEBkZXByZWNhdGVkIFVzZSB7QGxpbmsgV1NETENvcGllcn0gaW5zdGVhZC4gCi0gKi8KLXB1YmxpYyBjbGFzcyBDb3B5V1NETFRyZWVDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLSAgcHJpdmF0ZSBTdHJpbmcgd3NkbFVSSTsKLSAgcHJpdmF0ZSBXZWJTZXJ2aWNlc1BhcnNlciB3ZWJTZXJ2aWNlc1BhcnNlcjsKLSAgcHJpdmF0ZSBTdHJpbmcgZGVzdGluYXRpb25VUkk7Ci0gIHByaXZhdGUgRGVmaW5pdGlvbiBkZWY7Ci0gIHByaXZhdGUgU3RyaW5nIHdzZGxSZWxQYXRoOwotICAKLSAgLyoqCi0gICAqIEV4ZWN1dGUgdGhlIGNvbW1hbmQKLSAgICovCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0gICAgSUVudmlyb25tZW50IGVudiA9IGdldEVudmlyb25tZW50KCk7Ci0gICAgCi0gICAgdHJ5Ci0gICAgewotICAgICAgV1NETENvcGllciBjb3BpZXIgPSBuZXcgV1NETENvcGllcih3ZWJTZXJ2aWNlc1BhcnNlcik7ICAgICAgICAKLSAgICAgIGNvcGllci5zZXRTb3VyY2VVUkkod3NkbFVSSSwgZGVmKTsKLSAgICAgIGNvcGllci5zZXRUYXJnZXRGb2xkZXJVUkkoZ2V0QmFzZVVSSShkZXN0aW5hdGlvblVSSSkpOwotICAgICAgY29waWVyLnNldFRhcmdldEZpbGVuYW1lKGdldExvY2FsbmFtZShkZXN0aW5hdGlvblVSSSkpOwotICAgICAgICAKLSAgICAgIFJlc291cmNlVXRpbHMuZ2V0V29ya3NwYWNlKCkucnVuKGNvcGllciwgbW9uaXRvcik7Ci0gICAgICAgIAotICAgICAgd3NkbFJlbFBhdGggPSBjb3BpZXIuZ2V0UmVsYXRpdmVQYXRoKCkudG9TdHJpbmcoKTsKLQotICAgICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgfQotICAgIGNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKQotICAgIHsKLSAgICAgICAgSVN0YXR1cyBzdGF0dXMgPSBjZS5nZXRTdGF0dXMoKTsKLQkJZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIFN0cmluZyBnZXRCYXNlVVJJKFN0cmluZyB1cmkpCi0gIHsKLSAgICBpbnQgaW5kZXggPSB1cmkubGFzdEluZGV4T2YoJy8nKTsKLSAgICBpZiAoaW5kZXggPT0gLTEpCi0gICAgICBpbmRleCA9IHVyaS5sYXN0SW5kZXhPZignXFwnKTsKLSAgICBpZiAoaW5kZXggIT0gLTEpCi0gICAgICByZXR1cm4gdXJpLnN1YnN0cmluZygwLCBpbmRleCArIDEpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0TG9jYWxuYW1lKFN0cmluZyB1cmkpCi0gIHsKLSAgICBpbnQgaW5kZXggPSB1cmkubGFzdEluZGV4T2YoJy8nKTsKLSAgICBpZiAoaW5kZXggPT0gLTEpCi0gICAgICBpbmRleCA9IHVyaS5sYXN0SW5kZXhPZignXFwnKTsKLSAgICBpZiAoaW5kZXggIT0gLTEpCi0gICAgICByZXR1cm4gdXJpLnN1YnN0cmluZyhpbmRleCArIDEpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiB1cmk7Ci0gIH0KLSAJICAKLSAgcHVibGljIHZvaWQgc2V0V3NkbFVSSShTdHJpbmcgd3NkbFVSSSkKLSAgewotICAgIHRoaXMud3NkbFVSSSA9IHdzZGxVUkk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlc1BhcnNlcihXZWJTZXJ2aWNlc1BhcnNlciB3ZWJTZXJ2aWNlc1BhcnNlcikKLSAgewotICAgIHRoaXMud2ViU2VydmljZXNQYXJzZXIgPSB3ZWJTZXJ2aWNlc1BhcnNlcjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldERlc3RpbmF0aW9uVVJJKFN0cmluZyBkZXN0aW5hdGlvblVSSSkKLSAgewotICAgIHRoaXMuZGVzdGluYXRpb25VUkkgPSBkZXN0aW5hdGlvblVSSTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldERlZmluaXRpb24oRGVmaW5pdGlvbiBkZWYpCi0gIHsKLSAgICB0aGlzLmRlZiA9IGRlZjsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRXU0RMUmVsUGF0aCgpIHsKLSAgICByZXR1cm4gd3NkbFJlbFBhdGg7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vQ3JlYXRlRmFjZXRlZFByb2plY3RDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0NyZWF0ZUZhY2V0ZWRQcm9qZWN0Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOGM3MTRmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vQ3JlYXRlRmFjZXRlZFByb2plY3RDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMTMxIDEyMTA3MSAgIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lciAgICAgCi0gKiAyMDA2MDIwNCAxMjQ0MDggICByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIgICAgICAKLSAqIDIwMDYwMjE3IDEyNjc1NyAgIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjAyMjEgMTE5MTExICAgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDQyNyAxMjY3ODAgICByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNTE3IDEyNjk2NSAgIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDkwNSAgIDE1NjIzMCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbiwgSGFuZGxpbmcgcHJvamVjdHMgd2l0aCBubyB0YXJnZXQgcnVudGltZQotICogMjAwNzA1MDUgICAxODQ3NzIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbjsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLkZhY2V0VXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlNlcnZlclV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5Db25zdW1wdGlvbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uRmFjZXRNYXRjaGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uRmFjZXRTZXRzQnlUZW1wbGF0ZUNhY2hlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uRmFjZXRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLlJlcXVpcmVkRmFjZXRWZXJzaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuSUZhY2V0ZWRQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLklQcm9qZWN0RmFjZXRWZXJzaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLlByb2plY3RGYWNldHNNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JUnVudGltZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlclR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlckNvcmU7Ci0KLXB1YmxpYyBjbGFzcyBDcmVhdGVGYWNldGVkUHJvamVjdENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotCi0gIC8vbmFtZSBvZiB0aGUgcHJvamVjdCB0byBiZSBjcmVhdGVkCi0gIHByaXZhdGUgU3RyaW5nICAgcHJvamVjdE5hbWU7IAotCi0gIC8vaWQgb2YgdGhlIElGYWNldGVkUHJvamVjdFRlbXBsYXRlIHRvIGJlIHVzZWQgdG8gY3JlYXRlIHRoaXMgcHJvamVjdC4KLSAgcHJpdmF0ZSBTdHJpbmcgICB0ZW1wbGF0ZUlkOwotICAKLSAgLy9yZXF1aXJlZCBmYWNldCB2ZXJzaW9ucyB0aGF0IG11c3QgYmUgc2F0aXNmaWVkIHdoZW4gY3JlYXRpbmcgdGhlIHByb2plY3QgKHRoaXMgY29tZXMgZnJvbQotICAvL3RoZSBzZWxlY3RlZCBzZXJ2ZXJSdW50aW1lIG9yIGNsaWVudFJ1bnRpbWUgaW4gdGhlIGNhbGxpbmcgc2NlbmFyaW8pCi0gIHByaXZhdGUgUmVxdWlyZWRGYWNldFZlcnNpb25bXSAgIHJlcXVpcmVkRmFjZXRWZXJzaW9uczsKLQotICAvL3NlcnZlciB0eXBlIGlkIC0gdXNlZCB0byBkZXRlcm1pbmUgdGhlIGZhY2V0IHJ1bnRpbWUgdGhlIGNyZWF0ZWQgcHJvamVjdCB3aWxsIGJlIGJvdW5kIHRvCi0gIC8vaWYgc2VydmVySW5zdGFuY2VJZCBpcyBudWxsIG9yIGVtcHR5Ci0gIHByaXZhdGUgU3RyaW5nICAgc2VydmVyRmFjdG9yeUlkOwotCi0gIC8vc2VydmVyIGlkIC0gdXNlZCB0byBkZXRlcm1pbmUgdGhlIGZhY2V0IHJ1bnRpbWUgdGhlIGNyZWF0ZWQgcHJvamVjdCB3aWxsIGJlIGJvdW5kIHRvLiBNYXkKLSAgLy9iZSBudWxsIG9yIGVtcHR5LgotICBwcml2YXRlIFN0cmluZyAgIHNlcnZlckluc3RhbmNlSWQ7Ci0gIAotICAvL2ZhY2V0IHJ1bnRpbWUgZGV0ZXJtaW5lZCBmcm9tIHRoZSBzZXJ2ZXJJbnN0YW5jZUlkIG9yIHNlcnZlckZhY3RvcnlJZAotICBwcml2YXRlIG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnJ1bnRpbWUuSVJ1bnRpbWUgZmFjZXRSdW50aW1lOwotICAKLSAgCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGluZm8pCi0gIHsKLSAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgCi0gICAgLy8gY2hlY2sgaWYgZGF0YSByZWFkeQotICAgIHN0YXR1cyA9IGNoZWNrRGF0YVJlYWR5KCk7Ci0gICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpPT1TdGF0dXMuRVJST1IpCi0gICAgewotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICB9Ci0KLSAgICBJUHJvamVjdCBwcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLSAgICBpZiAoIXByb2plY3QuZXhpc3RzKCkpCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIHN0YXR1cyA9IEZhY2V0VXRpbHMuY3JlYXRlTmV3RmFjZXRlZFByb2plY3QocHJvamVjdE5hbWUpOwotICAgICAgICBpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5FUlJPUikKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIElQcm9qZWN0IGNyZWF0ZWRQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLSAgICAgICAgSUZhY2V0ZWRQcm9qZWN0IGZwcm9qZWN0ID0gUHJvamVjdEZhY2V0c01hbmFnZXIuY3JlYXRlKGNyZWF0ZWRQcm9qZWN0KTsKLSAgICAgICAgCi0gICAgICAgIC8vR2V0IHRoZSBmYWNldCB2ZXJzaW9ucyB0byBpbnN0YWxsLiAKLSAgICAgICAgU2V0IGZhY2V0c1RvQWRkID0gZ2V0RmFjZXRzVG9BZGQoKTsKLSAgICAgICAgCi0gICAgICAgIC8vSW5zdGFsbCB0aGUgZmFjZXQgdmVyc2lvbnMKLSAgICAgICAgc3RhdHVzID0gRmFjZXRVdGlscy5hZGRGYWNldHNUb1Byb2plY3QoZnByb2plY3QsIGZhY2V0c1RvQWRkKTsKLSAgICAgICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuRVJST1IpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgICAgICB9ICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIC8vU2V0IHRoZSBpbnN0YWxsZWQgZmFjZXQgdmVyc2lvbnMgYXMgZml4ZWQuCi0gICAgICAgIFNldCBuZXdGYWNldFZlcnNpb25zID0gZnByb2plY3QuZ2V0UHJvamVjdEZhY2V0cygpOwotICAgICAgICBTZXQgZml4ZWRGYWNldHMgPSBuZXcgSGFzaFNldCgpOwotICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ZXIgPSBuZXdGYWNldFZlcnNpb25zLml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOykgewotICAgICAgICAgICAgSVByb2plY3RGYWNldFZlcnNpb24gZmFjZXRWZXJzaW9uID0gKElQcm9qZWN0RmFjZXRWZXJzaW9uKSBpdGVyLm5leHQoKTsKLSAgICAgICAgICAgIGZpeGVkRmFjZXRzLmFkZChmYWNldFZlcnNpb24uZ2V0UHJvamVjdEZhY2V0KCkpOwotICAgICAgICB9Ci0gICAgICAgIHN0YXR1cyA9IEZhY2V0VXRpbHMuc2V0Rml4ZWRGYWNldHNPblByb2plY3QoZnByb2plY3QsIGZpeGVkRmFjZXRzKTsKLSAgICAgICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuRVJST1IpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgICAgICB9ICAgICAgICAgICAgICAgIAotICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIC8vU2V0IHRoZSBydW50aW1lICAgICAgICAKLSAgICAgICAgaWYgKGZhY2V0UnVudGltZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgc3RhdHVzID0gRmFjZXRVdGlscy5zZXRGYWNldFJ1bnRpbWVPblByb2plY3QoZnByb2plY3QsIGZhY2V0UnVudGltZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBhZGQgZmFjZXRzIHJlcXVpcmVkIGJ5IFdlYiBzZXJ2aWNlIHJ1bnRpbWUKLSAgICAgICAgaWYgKHJlcXVpcmVkRmFjZXRWZXJzaW9ucy5sZW5ndGggIT0gMCkgewotICAgICAgICAJc3RhdHVzID0gRmFjZXRVdGlscy5hZGRSZXF1aXJlZEZhY2V0c1RvUHJvamVjdChwcm9qZWN0LCByZXF1aXJlZEZhY2V0VmVyc2lvbnMsIG1vbml0b3IpOwotICAgICAgICAJaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUikKLSAgICAgICAgCXsKLSAgICAgICAgCQlyZXR1cm4gc3RhdHVzOwotICAgICAgICAJfSAgICAgIAotICAgICAgICB9Ci0gICAgICAgICAgICAgCi0gICAgICAgIGlmIChmYWNldFJ1bnRpbWUgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAJLy8gYWRkIHRoZSBkZWZhdWx0IGZhY2V0cyB0aGF0J3Mgbm90IGluIGNvbmZsaWN0IHdpdGggdGhlIGV4aXN0aW5nIGZhY2V0cwotICAgICAgICAJU2V0IHByb2plY3RGYWNldFZlcnNpb25TZXQgPSBmcHJvamVjdC5nZXRQcm9qZWN0RmFjZXRzKCk7Ci0gICAgICAgIAlTZXQgcHJvamVjdEZhY2V0U2V0ID0gbmV3IEhhc2hTZXQoKTsKLSAgICAgICAgCS8vIGdldCB0aGUgcHJvamVjdCBmYWNldCBmcm9tIHRoZSBwcm9qZWN0IGZhY2V0IHZlcnNpb24gd2UgY2FsY3VsYXRlZAotICAgICAgICAJZm9yIChJdGVyYXRvciBpdGVyID0gcHJvamVjdEZhY2V0VmVyc2lvblNldC5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspIHsKLSAgICAgICAgCQlJUHJvamVjdEZhY2V0VmVyc2lvbiBwZnYgPSAoSVByb2plY3RGYWNldFZlcnNpb24pIGl0ZXIubmV4dCgpOwotICAgICAgICAJCXByb2plY3RGYWNldFNldC5hZGQocGZ2LmdldFByb2plY3RGYWNldCgpKTsKLSAgICAgICAgCX0KLSAgICAgICAgCXRyeSB7Ci0gICAgICAgIAkJU2V0IGRlZmF1bHRQcm9qZWN0RmFjZXRWZXJzaW9uU2V0ID0gZmFjZXRSdW50aW1lLmdldERlZmF1bHRGYWNldHMocHJvamVjdEZhY2V0U2V0KTsKLSAgICAgICAgCQkvLyBUaGUgcmV0dXJuZWQgZGVmYXVsdEZhY2V0U2V0IGNvbnRhaW5zIHRoZSBvcmlnaW5hbCBwcm9qZWN0RmFjZXRTZXQgcGFzc2VkIGludG8gZ2V0RGVmYXVsdEZhY2V0cwotICAgICAgICAJCS8vIHBsdXMgYW55IGRlZmF1bHQgZmFjZXRzIHRoYXQgYXJlIG5vdCBpbiBjb25mbGljdCB3aXRoIHRoZSBvcmlnaW5hbCBwcm9qZWN0RmFjZXRTZXQuCi0gICAgICAgIAkJLy8gQWRkIHRvIGZhY2V0c1RvQWRkIGlmIHRoZSB0aGUgZGVmYXVsdCBmYWNldCBpcyBub3QgaW4gdGhlIG9yaWdpbmFsIHNldC4KLSAgICAgICAgCQlTZXQgZGVmYXVsdEZhY2V0c1RvQWRkID0gbmV3IEhhc2hTZXQoKTsKLSAgICAgICAgCQlmb3IgKEl0ZXJhdG9yIGl0ZXIgPSBkZWZhdWx0UHJvamVjdEZhY2V0VmVyc2lvblNldC5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspIHsKLSAgICAgICAgCQkJSVByb2plY3RGYWNldFZlcnNpb24gZGVmYXVsdFByb2pGYWNldFZlcnNpb24gPSAoSVByb2plY3RGYWNldFZlcnNpb24pIGl0ZXIubmV4dCgpOwotICAgICAgICAJCQlpZiggISBwcm9qZWN0RmFjZXRTZXQuY29udGFpbnMoIGRlZmF1bHRQcm9qRmFjZXRWZXJzaW9uLmdldFByb2plY3RGYWNldCgpICkgKQotICAgICAgICAJCQl7Ci0gICAgICAgIAkJCQlkZWZhdWx0RmFjZXRzVG9BZGQuYWRkKGRlZmF1bHRQcm9qRmFjZXRWZXJzaW9uKTsKLSAgICAgICAgCQkJfQotICAgICAgICAJCX0KLSAgICAgICAgCQlpZiAoIWRlZmF1bHRGYWNldHNUb0FkZC5pc0VtcHR5KCkpIHsKLSAgICAgICAgCQkJc3RhdHVzID0gRmFjZXRVdGlscy5hZGRGYWNldHNUb1Byb2plY3QoZnByb2plY3QsIGRlZmF1bHRGYWNldHNUb0FkZCk7Ci0gICAgICAgIAkJCWlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLkVSUk9SKQotICAgICAgICAJCQl7Ci0gICAgICAgIAkJCQlyZXR1cm4gc3RhdHVzOwotICAgICAgICAJCQl9ICAgIAotICAgICAgICAJCX0KLSAgICAgICAgCX0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotICAgICAgICAJCS8vIElmIHRoZXJlJ3MgYW55IGV4Y2VwdGlvbiB3aGVuIHRyeWluZyB0byBnZXQgdGhlIGRlZmF1bHQgZmFjZXQsIGp1c3QgaWdub3JlIHRoZSBkZWZhdWx0IGZhY2V0Ci0gICAgICAgIAkJLy8gYW5kIHJldHVybiB0aGUgb3JpZ2luYWwgZmFjZXRzVG9BZGQuCi0gICAgICAgIAl9Ci0gICAgICAgIAkvLyBlbmQgb2YgYWRkaW5nIGRlZmF1bHQgZmFjZXRzCi0gICAgICAgIH0KLSAgICAgIH0gY2F0Y2ggKENvcmVFeGNlcHRpb24gY2UpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZChDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9QUk9KRUNUX0NSRUFUSU9OLCBuZXcgU3RyaW5nW10geyBwcm9qZWN0TmFtZSB9KSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0KLSAgICAKLSAgcHJpdmF0ZSBJU3RhdHVzIGNoZWNrRGF0YVJlYWR5KCkKLSAgewotCi0JaWYgKHByb2plY3ROYW1lID09IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX1BST0pFQ1RfQ1JFQVRJT04sIG5ldyBTdHJpbmdbXSB7cHJvamVjdE5hbWV9KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBzZXQgb2YgZmFjZXRzIHRvIGluc3RhbGwgb24gdGhlIG5ldyBwcm9qZWN0LiBUaGUgc2V0IHdpbGwgY29uc2lzdAotICAgKiBvZiB0aGUgaGlnaGVzdCB2ZXJzaW9uIG9mIGVhY2ggb2YgdGhlIHRlbXBsYXRlJ3MgZml4ZWQgZmFjZXRzIHRoYXQgc2F0aWZpZXMKLSAgICogYm90aCB0aGUgcmVxdWlyZWQgZmFjZXQgdmVyc2lvbnMgYW5kIHRoZSBmYWNldCBydW50aW1lLgotICAgKiBAcmV0dXJuIFNldCBhIFNldCBjb250YWluaW5nIGVsZW1lbnRzIG9mIHR5cGUgSVByb2plY3RGYWNldFZlcnNpb24uCi0gICAqLwotICBwcml2YXRlIFNldCBnZXRGYWNldHNUb0FkZCgpCi0gIHsKLQkgIFNldCBmYWNldHMgPSBudWxsOwotCi0JICAvL1NldCB0aGUgZmFjZXQgcnVudGltZS4KLQkgIHNldEZhY2V0UnVudGltZSgpOwotCi0JICAvL0dldCBhbGwgZmFjZXQgdmVyc2lvbiBjb21iaW5hdGlvbnMgZm9yIHRoZSB0ZW1wbGF0ZSBpbiBvcmRlciBvZiBhc2NlbmRpbmcgdmVyc2lvbiBudW1iZXJzLgotCSAgU2V0W10gYWxsQ29tYmluYXRpb25zID0gRmFjZXRTZXRzQnlUZW1wbGF0ZUNhY2hlLmdldEluc3RhbmNlKCkuZ2V0RmFjZXRWZXJzaW9uQ29tYmluYXRpb25zRnJvbVRlbXBsYXRlKHRlbXBsYXRlSWQpOwotCSAgaW50IG4gPSBhbGxDb21iaW5hdGlvbnMubGVuZ3RoOwotCi0JICBTZXQgZGVmYXVsdEZhY2V0cyA9IEZhY2V0VXRpbHMuZ2V0RGVmYXVsdEZhY2V0VmVyc2lvbnNGcm9tVGVtcGxhdGUodGVtcGxhdGVJZCk7Ci0JICBpbnQgZGVmYXVsdEluZGV4ID0gbi0xOyAvLyBzZXQgZGVmYXVsdCB0byBoaWdoZXN0IHZlcnNpb25zCi0JICBpZiAoIWRlZmF1bHRGYWNldHMuaXNFbXB0eSgpKSB7Ci0JCS8vIGZpbmQgdGhlIGluZGV4IG9mIHRoZSBkZWZhdWx0RmFjZXQgd2l0aGluIGFsbCBjb21iaW5hdGlvbnMKLQkJICBmb3IgKGludCBpPW4tMTsgaT49MDsgaS0tKQotCQkgIHsKLQkJCSAgU2V0IGNvbWJvID0gYWxsQ29tYmluYXRpb25zW2ldOwotCQkJICBpZiAoY29tYm8uZXF1YWxzIChkZWZhdWx0RmFjZXRzKSkgewotCQkJCSAgZGVmYXVsdEluZGV4ID0gaTsKLQkJCQkgIGJyZWFrOwotCQkJICB9Ci0JCSAgfQotCSAgfSBlbHNlIHsKLQkJICAvLyBnZXQgdGhlIGhpZ2hlc3QgdmVyc2lvbnMgb2YgYWxsIGZhY2V0cwotCQkgIGRlZmF1bHRGYWNldHMgPSBGYWNldFV0aWxzLmdldEluaXRpYWxGYWNldFZlcnNpb25zRnJvbVRlbXBsYXRlKHRlbXBsYXRlSWQpOwotCSAgfQotCSAgCi0JICAvLyB3YWxrIHRoZSBmYWNldCB2ZXJzaW9uIGNvbWJpbmF0aW9ucyBmcm9tIGRlZmF1bHQgdmVyc2lvbiB1cCB0byBoaWdoZXIgdmVyc2lvbnMKLQkgIGZvciAoaW50IGk9ZGVmYXVsdEluZGV4OyBpPG47IGkrKykgCi0JICB7Ci0JCSAgLy9DaGVjayB0aGUgdGVtcGxhdGUgY29tYmluYXRpb24gdG8gc2VlIGlmIGl0IGlzIGNvbXBhdGlibGUgd2l0aCBib3RoIHRoZSAKLQkJICAvL3JlcXVpcmVkIGZhY2V0IHZlcnNpb25zIGFuZCB0aGUgc2VydmVyIHJ1bnRpbWUuIElmIGl0IGlzLCBjaG9vc2UgaXQuCi0JCSAgU2V0IGNvbWJpbmF0aW9uID0gYWxsQ29tYmluYXRpb25zW2ldOwotCQkgIEZhY2V0TWF0Y2hlciBmbSA9IEZhY2V0VXRpbHMubWF0Y2gocmVxdWlyZWRGYWNldFZlcnNpb25zLCBjb21iaW5hdGlvbik7Ci0JCSAgaWYgKGZtLmlzTWF0Y2goKSkKLQkJICB7Ci0JCQkgIGlmIChmYWNldFJ1bnRpbWUgIT0gbnVsbCkKLQkJCSAgewotCQkJCSAgaWYgKEZhY2V0VXRpbHMuZG9lc1J1bnRpbWVTdXBwb3J0RmFjZXRzKGZhY2V0UnVudGltZSwgY29tYmluYXRpb24pKQotCQkJCSAgewotCQkJCQkgIGZhY2V0cyA9IGNvbWJpbmF0aW9uOwotCQkJCQkgIGJyZWFrOwotCQkJCSAgfQotCQkJICB9IGVsc2UgewotCQkJCSAgZmFjZXRzID0gY29tYmluYXRpb247Ci0JCQkJICBicmVhazsKLQkJCSAgfQotCQkgIH0gICAgICAgICAgICAgICAgCi0JICB9Ci0JICBpZiAoZmFjZXRzID09IG51bGwpCi0JICB7Ci0JCSAgLy8gd2FsayB0aGUgZmFjZXQgdmVyc2lvbiBjb21iaW5hdGlvbnMgZnJvbSBkZWZhdWx0IHZlcnNpb24gZG93biB0byBsb3dlciB2ZXJzaW9ucwotCQkgIGZvciAoaW50IGk9ZGVmYXVsdEluZGV4LTE7IGk+PTA7IGktLSkgCi0JCSAgewotCQkJICBTZXQgY29tYmluYXRpb24gPSBhbGxDb21iaW5hdGlvbnNbaV07Ci0JCQkgIEZhY2V0TWF0Y2hlciBmbSA9IEZhY2V0VXRpbHMubWF0Y2gocmVxdWlyZWRGYWNldFZlcnNpb25zLCBjb21iaW5hdGlvbik7Ci0JCQkgIGlmIChmbS5pc01hdGNoKCkpCi0JCQkgIHsKLQkJCQkgIGlmIChmYWNldFJ1bnRpbWUgIT0gbnVsbCkKLQkJCQkgIHsKLQkJCQkJICBpZiAoRmFjZXRVdGlscy5kb2VzUnVudGltZVN1cHBvcnRGYWNldHMoZmFjZXRSdW50aW1lLCBjb21iaW5hdGlvbikpCi0JCQkJCSAgewotCQkJCQkJICBmYWNldHMgPSBjb21iaW5hdGlvbjsKLQkJCQkJCSAgYnJlYWs7Ci0JCQkJCSAgfQotCQkJCSAgfSBlbHNlIHsKLQkJCQkJICBmYWNldHMgPSBjb21iaW5hdGlvbjsKLQkJCQkJICBicmVhazsKLQkJCQkgIH0KLQkJCSAgfSAgICAgICAgICAgICAgICAKLQkJICB9Ci0JICB9Ci0KLQkgIC8vVW5saWtlbHkgdG8gZ2V0IHRvIHRoaXMgcG9pbnQgaW4gdGhlIGNvZGUsIGJ1dCBpZiB3ZSBkbywgY2hvb3NlIHRoZSBkZWZhdWx0IHZlcnNpb24KLQkgIC8vb2YgZWFjaCBmaXhlZCBmYWNldCBpbiB0aGUgdGVtcGxhdGUuCi0JICBpZiAoZmFjZXRzID09IG51bGwpCi0JICB7Ci0JCSAgZmFjZXRzID0gZGVmYXVsdEZhY2V0czsKLQkgIH0KLSAgICAgCi0gICAgcmV0dXJuIGZhY2V0czsKLSAgfQotCi0gIC8qKgotICAgKiBTZXRzIHRoZSBmYWNldFJ1bnRpbWUgYXR0cmlidXRlIGJhc2VkIG9uIHRoZSBzZXJ2ZXJJbnN0YW5jZUlkIG9yIHNlcnZlckZhY3RvcnlJZAotICAgKiBQcmVmZXJlbmNlIGlzIGdpdmVuIHRvIG5vbi1zdHViIGZhY2V0IHJ1bnRpbWVzLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHNldEZhY2V0UnVudGltZSgpCi0gIHsKLSAgICAKLQkgIGlmIChzZXJ2ZXJJbnN0YW5jZUlkICE9IG51bGwgJiYgc2VydmVySW5zdGFuY2VJZC5sZW5ndGgoKT4wKQotCSAgewotCQkgIElTZXJ2ZXIgc2VydmVyID0gU2VydmVyQ29yZS5maW5kU2VydmVyKHNlcnZlckluc3RhbmNlSWQpOwotCQkgIElSdW50aW1lIHNSdW50aW1lID0gc2VydmVyLmdldFJ1bnRpbWUoKTsKLQkJICBmYWNldFJ1bnRpbWUgPSBGYWNldFV0aWwuZ2V0UnVudGltZShzUnVudGltZSk7ICAgICAgCi0JICB9Ci0JICBlbHNlCi0JICB7Ci0JCSAgaWYgKHNlcnZlckZhY3RvcnlJZCAhPSBudWxsICYmIHNlcnZlckZhY3RvcnlJZC5sZW5ndGgoKSA+IDApCi0JCSAgewotCQkJICAvL0ZpbmQgYSBub24gU3R1YiBydW50aW1lIHRoYXQgbWF0Y2hlcyB0aGlzIHNlcnZlciB0eXBlCi0JCQkgIElSdW50aW1lIHNlcnZlclJ1bnRpbWUgPSBTZXJ2ZXJVdGlscy5nZXROb25TdHViUnVudGltZShzZXJ2ZXJGYWN0b3J5SWQpOwotCQkJICBpZiAoc2VydmVyUnVudGltZSAhPSBudWxsKQotCQkJICB7Ci0JCQkJICBmYWNldFJ1bnRpbWUgPSBGYWNldFV0aWwuZ2V0UnVudGltZShzZXJ2ZXJSdW50aW1lKTsKLQkJCSAgfQotCQkJICBlbHNlCi0JCQkgIHsKLQkJCQkgIC8vQWNjZXB0IHN0dWIgcnVudGltZS4KLQkJCQkgIElTZXJ2ZXJUeXBlIHN0ID0gU2VydmVyQ29yZS5maW5kU2VydmVyVHlwZShzZXJ2ZXJGYWN0b3J5SWQpOwotCQkJCSAgU3RyaW5nIHJ1bnRpbWVUeXBlSWQgPSBzdC5nZXRSdW50aW1lVHlwZSgpLmdldElkKCk7ICAgCi0JCQkJICAvL0ZpbmQgdGhlIGZhY2V0IHJ1bnRpbWUKLQkJCQkgIElSdW50aW1lW10gcnVudGltZXMgPSBTZXJ2ZXJDb3JlLmdldFJ1bnRpbWVzKCk7Ci0JCQkJICBmb3IgKGludCBpPTA7IGk8cnVudGltZXMubGVuZ3RoOyBpKyspCi0JCQkJICB7Ci0JCQkJCSAgSVJ1bnRpbWUgc1J1bnRpbWUgPSBydW50aW1lc1tpXTsKLQkJCQkJICBpZiAoc1J1bnRpbWUuZ2V0UnVudGltZVR5cGUoKS5nZXRJZCgpLmVxdWFscyhydW50aW1lVHlwZUlkKSkKLQkJCQkJICB7Ci0JCQkJCQkgIGZhY2V0UnVudGltZSA9IEZhY2V0VXRpbC5nZXRSdW50aW1lKHNSdW50aW1lKTsKLQkJCQkJICB9Ci0JCQkJICB9ICAgICAgICAgICAgICAgIAotCQkJICB9Ci0JCSAgfQotCSAgfQotICB9ICAKLSAgCi0gIHB1YmxpYyB2b2lkIHNldFByb2plY3ROYW1lKFN0cmluZyBwcm9qZWN0TmFtZSkKLSAgewotICAgIHRoaXMucHJvamVjdE5hbWUgPSBwcm9qZWN0TmFtZTsKLSAgfSAgCi0gIAotICBwdWJsaWMgdm9pZCBzZXRUZW1wbGF0ZUlkKFN0cmluZyB0ZW1wbGF0ZUlkKQotICB7Ci0gICAgdGhpcy50ZW1wbGF0ZUlkID0gdGVtcGxhdGVJZDsKLSAgfSAgICAKLQotICBwdWJsaWMgdm9pZCBzZXRSZXF1aXJlZEZhY2V0VmVyc2lvbnMoUmVxdWlyZWRGYWNldFZlcnNpb25bXSByZXF1aXJlZEZhY2V0VmVyc2lvbnMpCi0gIHsKLSAgICB0aGlzLnJlcXVpcmVkRmFjZXRWZXJzaW9ucyA9IHJlcXVpcmVkRmFjZXRWZXJzaW9uczsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZlckZhY3RvcnlJZChTdHJpbmcgc2VydmVyRmFjdG9yeUlkKQotICB7Ci0gICAgdGhpcy5zZXJ2ZXJGYWN0b3J5SWQgPSBzZXJ2ZXJGYWN0b3J5SWQ7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJJbnN0YW5jZUlkKFN0cmluZyBzZXJ2ZXJJbnN0YW5jZUlkKQotICB7Ci0gICAgdGhpcy5zZXJ2ZXJJbnN0YW5jZUlkID0gc2VydmVySW5zdGFuY2VJZDsKLSAgfQotCi0gIAotICAKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9DcmVhdGVKYXZhUHJvamVjdENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vQ3JlYXRlSmF2YVByb2plY3RDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjOTAzNDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9DcmVhdGVKYXZhUHJvamVjdENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklDbGFzc3BhdGhFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JSmF2YVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KYXZhUnVudGltZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uQ29uc3VtcHRpb25NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi0KLQotcHVibGljIGNsYXNzIENyZWF0ZUphdmFQcm9qZWN0Q29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIHByaXZhdGUgU3RyaW5nIHByb2plY3ROYW1lXzsKLQotICAvKioKLSAgICogRGVmYXVsdCBDVE9SCi0gICAqLwotICBwdWJsaWMgQ3JlYXRlSmF2YVByb2plY3RDb21tYW5kKCkKLSAgewotICB9Ci0KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLSAgICBJRW52aXJvbm1lbnQgZW52ID0gZ2V0RW52aXJvbm1lbnQoKTsKLSAgICBJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2plY3ROYW1lXyk7Ci0gICAgCi0gICAgaWYgKHByb2plY3QgIT0gbnVsbCAmJiAhcHJvamVjdC5leGlzdHMoKSkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgcHJvamVjdC5jcmVhdGUoUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLm5ld1Byb2plY3REZXNjcmlwdGlvbihwcm9qZWN0LmdldE5hbWUoKSksIG1vbml0b3IpOwotICAgICAgICBwcm9qZWN0Lm9wZW4obW9uaXRvcik7Ci0gICAgICAgIElQcm9qZWN0RGVzY3JpcHRpb24gZGVzYyA9IHByb2plY3QuZ2V0RGVzY3JpcHRpb24oKTsKLSAgICAgICAgZGVzYy5zZXROYXR1cmVJZHMobmV3IFN0cmluZ1tdIHtKYXZhQ29yZS5OQVRVUkVfSUR9KTsKLSAgICAgICAgSUNvbW1hbmQgY21kID0gZGVzYy5uZXdDb21tYW5kKCk7Ci0gICAgICAgIGNtZC5zZXRCdWlsZGVyTmFtZShKYXZhQ29yZS5CVUlMREVSX0lEKTsKLSAgICAgICAgZGVzYy5zZXRCdWlsZFNwZWMobmV3IElDb21tYW5kW10ge2NtZH0pOwotICAgICAgICBwcm9qZWN0LnNldERlc2NyaXB0aW9uKGRlc2MsIG1vbml0b3IpOwotICAgICAgICBJSmF2YVByb2plY3QgamF2YVByb2plY3QgPSBKYXZhQ29yZS5jcmVhdGUocHJvamVjdCk7Ci0gICAgICAgIFBhdGggcHJvamVjdFJvb3QgPSBuZXcgUGF0aChQYXRoLlJPT1QuYXBwZW5kKG5ldyBQYXRoKHByb2plY3QuZ2V0TmFtZSgpKSkudG9TdHJpbmcoKSk7Ci0gICAgICAgIGphdmFQcm9qZWN0LnNldFJhd0NsYXNzcGF0aChuZXcgSUNsYXNzcGF0aEVudHJ5W10ge0phdmFDb3JlLm5ld1NvdXJjZUVudHJ5KHByb2plY3RSb290KSwgSmF2YUNvcmUubmV3Q29udGFpbmVyRW50cnkobmV3IFBhdGgoSmF2YVJ1bnRpbWUuSlJFX0NPTlRBSU5FUikpfSwgbW9uaXRvcik7Ci0gICAgICAgIGphdmFQcm9qZWN0LnNldE91dHB1dExvY2F0aW9uKHByb2plY3RSb290LCBtb25pdG9yKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKQotICAgICAgewotICAgICAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBOTFMuYmluZChDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9DQU5OT1RfQ1JFQVRFX0pBVkFfUFJPSkVDVCwgbmV3IFN0cmluZ1tdIHtwcm9qZWN0TmFtZV99KSwgY2UpOwotICAgICAgICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRQcm9qZWN0TmFtZShTdHJpbmcgcHJvamVjdE5hbWUpCi0gIHsKLSAgICBwcm9qZWN0TmFtZV8gPSBwcm9qZWN0TmFtZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9DcmVhdGVNb2R1bGVDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0NyZWF0ZU1vZHVsZUNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2VlZTgxYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0NyZWF0ZU1vZHVsZUNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY4MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMDQgMTI0NDA4ICAgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyICAgICAgKiAgICAgCi0gKiAyMDA2MDIxNyAgIDEyNjc1NyByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDcwMjAxICAgMTcyMjQ0IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBSZW1vdmUgdXNhZ2Ugb2YgZGVwcmVjYXRlZCAoYW5kIG5vdyByZW1vdmVkKSBjbGFzc2VzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuaW50ZXJuYWwuSjJFRVZlcnNpb25Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLkZhY2V0VXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlNlcnZlclV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5Db25zdW1wdGlvbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uRmFjZXRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUuaW50ZXJuYWwudXRpbC5JTW9kdWxlQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuSUZhY2V0ZWRQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLklGYWNldGVkUHJvamVjdFRlbXBsYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLklQcm9qZWN0RmFjZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuSVByb2plY3RGYWNldFZlcnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuUHJvamVjdEZhY2V0c01hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuVmVyc2lvbkZvcm1hdEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVJ1bnRpbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXJUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJDb3JlOwotCi1wdWJsaWMgY2xhc3MgQ3JlYXRlTW9kdWxlQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0JCi0JcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgV0VCID0gSjJFRVV0aWxzLldFQjsgICAgCi0JcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgRUpCID0gSjJFRVV0aWxzLkVKQjsgICAgCi0JcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgQVBQQ0xJRU5UID0gSjJFRVV0aWxzLkFQUENMSUVOVDsKLQlwdWJsaWMgZmluYWwgc3RhdGljIGludCBFQVIgPSBKMkVFVXRpbHMuRUFSOwotICAgIAotICAgIC8vVGVtcGxhdGVzCi0gICAgLy9UT0RPICBSZW1vdmUgdGhlc2UgdGVtcGxhdGUgY29uc3RhbnRzIG9uY2UgSjJFRSB0b29scyBkZWZpbmVzIGNvbnN0YW50cyAoYnVnIDExNzUzMSkKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBXRUJfVEVNUExBVEUgPSAidGVtcGxhdGUuanN0LndlYiI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgRUpCX1RFTVBMQVRFID0gInRlbXBsYXRlLmpzdC5lamIiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIEFQUENMSUVOVF9URU1QTEFURSA9ICJ0ZW1wbGF0ZS5qc3QuYXBwY2xpZW50IjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBFQVJfVEVNUExBVEUgPSAidGVtcGxhdGUuanN0LmVhciI7Ci0JCi0JcHJpdmF0ZSBTdHJpbmcgICBwcm9qZWN0TmFtZTsKLQlwcml2YXRlIFN0cmluZyAgIG1vZHVsZU5hbWU7ICAvLyBtYXkgYmUgbnVsbCBmb3Igbm9uLWZsZXhpYmxlIHByb2plY3QKLQlwcml2YXRlIGludCAgICAgIG1vZHVsZVR5cGU7OwotCXByaXZhdGUgU3RyaW5nICAgajJlZUxldmVsOwotCXByaXZhdGUgU3RyaW5nICAgc2VydmVyRmFjdG9yeUlkOwotCXByaXZhdGUgU3RyaW5nICAgc2VydmVySW5zdGFuY2VJZF87Ci0JCi0gICAgcHJpdmF0ZSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5ydW50aW1lLklSdW50aW1lIGZhY2V0UnVudGltZTsKLSAgICAKLQlwdWJsaWMgQ3JlYXRlTW9kdWxlQ29tbWFuZCgpewotCX0KLQkKLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLQkJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCQkKLQkJLy8gY2hlY2sgaWYgZGF0YSByZWFkeQotCQlzdGF0dXMgPSBjaGVja0RhdGFSZWFkeSgpOwotCQlpZiAoc3RhdHVzLmdldFNldmVyaXR5KCk9PVN0YXR1cy5FUlJPUil7Ci0JCQlyZXR1cm4gc3RhdHVzOwotCQl9CQotCi0gICAgICAgIC8vZW5zdXJlIHRoZSBwcm9qZWN0IGRvZXMgbm90IGV4aXN0Ci0gICAgICAgIElQcm9qZWN0IHByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QocHJvamVjdE5hbWUpOwotICAgICAgICBpZiAoIXByb2plY3QuZXhpc3RzKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBjcmVhdGUgdGhlIGNvbXBvbmVudCBhY2NvcmRpbmcgdG8gdGhlIGNvbXBvbmVudCB0eXBlIHNwZWNpZmllZAotICAgICAgICAgIGludCB0eXBlID0gZ2V0TW9kdWxlVHlwZSgpOwotICAgICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICAgIGNhc2UgV0VCOgotICAgICAgICAgICAgc3RhdHVzID0gY3JlYXRlV2ViQ29tcG9uZW50KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEVKQjoKLSAgICAgICAgICAgICBzdGF0dXMgPSBjcmVhdGVFSkJDb21wb25lbnQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgQVBQQ0xJRU5UOgotICAgICAgICAgICAgc3RhdHVzID0gY3JlYXRlQXBwQ2xpZW50Q29tcG9uZW50KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEVBUjoKLSAgICAgICAgICAgIHN0YXR1cyA9IGNyZWF0ZUVBUkNvbXBvbmVudCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBOTFMuYmluZChDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9DT01QT05FTlRfQ1JFQVRJT04sIG5ldyBTdHJpbmdbXXttb2R1bGVOYW1lfSkgKTsgICAgICAgICAKLSAgICAgICAgICB9ICAgICAgICAgIAotICAgICAgICB9Ci0JCQotICAgICAgICAKLSAgICAgICAgLy8gY2hlY2sgaWYgZmxleGlibGUgcHJvamVjdCBleGlzdHMKLSAgICAgICAgLyoKLQkJaWYgKHByb2plY3Q9PW51bGwgfHwgIXByb2plY3QuZXhpc3RzKCkpewotCQkJc3RhdHVzID0gY3JlYXRlRmxleGlibGVKYXZhUHJvamVjdCgpOwotCQkJaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpPT1TdGF0dXMuRVJST1IpewotCQkJCXJldHVybiBzdGF0dXM7Ci0JCQl9CQkJCi0JCX0KLSAgICAgICAgKi8KLSAgICAgICAgLyoKLQkJLy8gY2hlY2sgaWYgcHJvamVjdCBhbmQvb3IgY29tcG9uZW50IGV4aXN0cwotICAgICAgICBpZiAocHJvamVjdE5hbWUhPW51bGwpIHsKLSAgICAgICAgICBpZiAobW9kdWxlTmFtZT09bnVsbCl7Ci0gICAgICAgICAgICBpZiAocHJvamVjdC5leGlzdHMoKSkKLSAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSB7Ci0JCQlpZiAoSjJFRVV0aWxzLmV4aXN0cyhwcm9qZWN0TmFtZSwgbW9kdWxlTmFtZSkpCi0JCQkJcmV0dXJuIHN0YXR1czsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQkJZWxzZSB7Ci0JCQlyZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfQ09NUE9ORU5UX0NSRUFUSU9OLCBuZXcgU3RyaW5nW117cHJvamVjdE5hbWUsIG1vZHVsZU5hbWV9KSApOwotCQl9IAotICAgICAgICAqLyAgICAgICAKLSAgICAgICAgCi0KLQkJCi0JCi0JCXJldHVybiBzdGF0dXM7Ci0JfQotCi0JcHJpdmF0ZSBJU3RhdHVzIGNoZWNrRGF0YVJlYWR5KCl7Ci0JCQotCQlpZiAocHJvamVjdE5hbWU9PW51bGwgfHwgc2VydmVyRmFjdG9yeUlkPT1udWxsKXsKLQkJCXJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggTkxTLmJpbmQoQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfQ09NUE9ORU5UX0NSRUFUSU9OLCBuZXcgU3RyaW5nW117cHJvamVjdE5hbWUsIG1vZHVsZU5hbWV9KSApOwotCQl9Ci0JCQotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQl9Ci0JCi0JCi0JLyoqCi0JICogQ3JlYXRlIGEgV2ViIGNvbXBvbmVudAotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgSVN0YXR1cyBjcmVhdGVXZWJDb21wb25lbnQoKXsgICAKLSAgICAKLSAgICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsgICAgICAKLSAgICAgIAotICAgICAgdHJ5Ci0gICAgICB7ICAgICAgICAKLSAgICAgICAgc3RhdHVzID0gRmFjZXRVdGlscy5jcmVhdGVOZXdGYWNldGVkUHJvamVjdChwcm9qZWN0TmFtZSk7Ci0gICAgICAgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLkVSUk9SKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgICAgfSAgICAgICAgCi0gICAgICAgIElQcm9qZWN0IGNyZWF0ZWRQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLSAgICAgICAgSUZhY2V0ZWRQcm9qZWN0IGZwcm9qZWN0ID0gUHJvamVjdEZhY2V0c01hbmFnZXIuY3JlYXRlKGNyZWF0ZWRQcm9qZWN0KTsgICAgICAgIAotICAgICAgICAKLSAgICAgICAgLy9EZWNpZGUgd2hpY2ggZmFjZXRzIHRvIGluc3RhbGwgYmFzZWQgb24gdGhlIHRlbXBsYXRlSWQgYW5kIHRoZSBzZWxlY3RlZCBzZXJ2ZXIuIAotICAgICAgICBTZXQgZmFjZXRzVG9BZGQgPSBnZXRGYWNldHNUb0FkZChXRUJfVEVNUExBVEUpOyAKLSAgICAgICAgU2V0IGZhY2V0c1RvQWRkTW9kaWZpZWQgPSBmYWNldHNUb0FkZDsKLSAgICAgICAgLy9JZiB0aGUgSjJFRSBsZXZlbCBoYXMgYmVlbiBzZXQsIG1vZGlmeSB0aGUgV2ViIGZhY2V0IHZlcnNpb24gdG8gYmUgY29uc2lzdGVudC4KLSAgICAgICAgaWYgKGoyZWVMZXZlbCE9bnVsbCAmJiBqMmVlTGV2ZWwubGVuZ3RoKCk+MCkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyB3ZWJWZXJzaW9uID0gZ2V0V2ViVmVyc2lvbkZyb21KMkVFTGV2ZWwoajJlZUxldmVsKTsKLSAgICAgICAgICBmYWNldHNUb0FkZE1vZGlmaWVkID0gbmV3IEhhc2hTZXQoKTsKLSAgICAgICAgICBJdGVyYXRvciBpdHIgPSBmYWNldHNUb0FkZC5pdGVyYXRvcigpOwotICAgICAgICAgIHdoaWxlIChpdHIuaGFzTmV4dCgpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vSWYgdGhpcyBpcyB0aGUgd2ViIGZhY2V0LCBnZXQgdGhlIHJpZ2h0IHZlcnNpb24uCi0gICAgICAgICAgICBJUHJvamVjdEZhY2V0VmVyc2lvbiBwZnYgPSAoSVByb2plY3RGYWNldFZlcnNpb24paXRyLm5leHQoKTsKLSAgICAgICAgICAgIElQcm9qZWN0RmFjZXQgcGYgPSBwZnYuZ2V0UHJvamVjdEZhY2V0KCk7IAotICAgICAgICAgICAgaWYgKHBmLmdldElkKCkuZXF1YWxzKElNb2R1bGVDb25zdGFudHMuSlNUX1dFQl9NT0RVTEUpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJUHJvamVjdEZhY2V0VmVyc2lvbiB3ZWJmdiA9IHBmLmdldFZlcnNpb24od2ViVmVyc2lvbik7Ci0gICAgICAgICAgICAgIGZhY2V0c1RvQWRkTW9kaWZpZWQuYWRkKHdlYmZ2KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgZmFjZXRzVG9BZGRNb2RpZmllZC5hZGQocGZ2KTsgCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzdGF0dXMgPSBGYWNldFV0aWxzLmFkZEZhY2V0c1RvUHJvamVjdChmcHJvamVjdCwgZmFjZXRzVG9BZGRNb2RpZmllZCk7Ci0gICAgICAgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLkVSUk9SKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgICAgfSAgICAgICAgICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIFNldCBuZXdGYWNldFZlcnNpb25zID0gZnByb2plY3QuZ2V0UHJvamVjdEZhY2V0cygpOwotICAgICAgICBTZXQgZml4ZWRGYWNldHMgPSBuZXcgSGFzaFNldCgpOwotICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ZXIgPSBuZXdGYWNldFZlcnNpb25zLml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOykgewotICAgICAgICAgICAgSVByb2plY3RGYWNldFZlcnNpb24gZmFjZXRWZXJzaW9uID0gKElQcm9qZWN0RmFjZXRWZXJzaW9uKSBpdGVyLm5leHQoKTsKLSAgICAgICAgICAgIGZpeGVkRmFjZXRzLmFkZChmYWNldFZlcnNpb24uZ2V0UHJvamVjdEZhY2V0KCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzdGF0dXMgPSBGYWNldFV0aWxzLnNldEZpeGVkRmFjZXRzT25Qcm9qZWN0KGZwcm9qZWN0LCBmaXhlZEZhY2V0cyk7Ci0gICAgICAgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLkVSUk9SKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAKLSAgICAgICAgLy9TZXQgdGhlIHJ1bnRpbWUgICAgICAgIAotICAgICAgICBpZiAoZmFjZXRSdW50aW1lICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBzdGF0dXMgPSBGYWNldFV0aWxzLnNldEZhY2V0UnVudGltZU9uUHJvamVjdChmcHJvamVjdCwgZmFjZXRSdW50aW1lKTsKLSAgICAgICAgfSAgICAgICAgCi0gICAgICAgIAotICAgICAgfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX1BST0pFQ1RfQ1JFQVRJT04sIG5ldyBTdHJpbmdbXSB7IHByb2plY3ROYW1lIH0pLCBjZSk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgICAJCQotCX0KLQkKLQkvKioKLQkgKiBDcmVhdGUgYW4gRUFSIGNvbXBvbmVudAotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgSVN0YXR1cyBjcmVhdGVFQVJDb21wb25lbnQoKXsKLSAgICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsgICAgICAKLSAgICAgIAotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIHN0YXR1cyA9IEZhY2V0VXRpbHMuY3JlYXRlTmV3RmFjZXRlZFByb2plY3QocHJvamVjdE5hbWUpOwotICAgICAgICBpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5FUlJPUikKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgICAgIH0gICAgICAgIAotICAgICAgICBJUHJvamVjdCBjcmVhdGVkUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSk7Ci0gICAgICAgIElGYWNldGVkUHJvamVjdCBmcHJvamVjdCA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmNyZWF0ZShjcmVhdGVkUHJvamVjdCk7ICAgICAgICAKLQotICAgICAgICAvL0RlY2lkZSB3aGljaCBmYWNldHMgdG8gaW5zdGFsbCBiYXNlZCBvbiB0aGUgdGVtcGxhdGVJZCBhbmQgdGhlIHNlbGVjdGVkIHNlcnZlci4gCi0gICAgICAgIFNldCBmYWNldHNUb0FkZCA9IGdldEZhY2V0c1RvQWRkKEVBUl9URU1QTEFURSk7IAotICAgICAgICBTZXQgZmFjZXRzVG9BZGRNb2RpZmllZCA9IGZhY2V0c1RvQWRkOwotICAgICAgICAvL0lmIHRoZSBKMkVFIGxldmVsIGhhcyBiZWVuIHNldCwgbW9kaWZ5IHRoZSBXZWIgZmFjZXQgdmVyc2lvbiB0byBiZSBjb25zaXN0ZW50LgotICAgICAgICBpZiAoajJlZUxldmVsIT1udWxsICYmIGoyZWVMZXZlbC5sZW5ndGgoKT4wKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIHdlYlZlcnNpb24gPSBnZXRFQVJWZXJzaW9uRnJvbUoyRUVMZXZlbChqMmVlTGV2ZWwpOwotICAgICAgICAgIGZhY2V0c1RvQWRkTW9kaWZpZWQgPSBuZXcgSGFzaFNldCgpOwotICAgICAgICAgIEl0ZXJhdG9yIGl0ciA9IGZhY2V0c1RvQWRkLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgd2hpbGUgKGl0ci5oYXNOZXh0KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy9JZiB0aGlzIGlzIHRoZSBlYXIgZmFjZXQsIGdldCB0aGUgcmlnaHQgdmVyc2lvbi4KLSAgICAgICAgICAgIElQcm9qZWN0RmFjZXRWZXJzaW9uIHBmdiA9IChJUHJvamVjdEZhY2V0VmVyc2lvbilpdHIubmV4dCgpOwotICAgICAgICAgICAgSVByb2plY3RGYWNldCBwZiA9IHBmdi5nZXRQcm9qZWN0RmFjZXQoKTsgCi0gICAgICAgICAgICBpZiAocGYuZ2V0SWQoKS5lcXVhbHMoSU1vZHVsZUNvbnN0YW50cy5KU1RfRUFSX01PRFVMRSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIElQcm9qZWN0RmFjZXRWZXJzaW9uIHdlYmZ2ID0gcGYuZ2V0VmVyc2lvbih3ZWJWZXJzaW9uKTsKLSAgICAgICAgICAgICAgZmFjZXRzVG9BZGRNb2RpZmllZC5hZGQod2ViZnYpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBmYWNldHNUb0FkZE1vZGlmaWVkLmFkZChwZnYpOyAKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHN0YXR1cyA9IEZhY2V0VXRpbHMuYWRkRmFjZXRzVG9Qcm9qZWN0KGZwcm9qZWN0LCBmYWNldHNUb0FkZE1vZGlmaWVkKTsKLSAgICAgICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuRVJST1IpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgICAgICB9ICAgICAgICAgICAgICAgIAotICAgICAgICAKLSAgICAgICAgU2V0IG5ld0ZhY2V0VmVyc2lvbnMgPSBmcHJvamVjdC5nZXRQcm9qZWN0RmFjZXRzKCk7Ci0gICAgICAgIFNldCBmaXhlZEZhY2V0cyA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaXRlciA9IG5ld0ZhY2V0VmVyc2lvbnMuaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7KSB7Ci0gICAgICAgICAgICBJUHJvamVjdEZhY2V0VmVyc2lvbiBmYWNldFZlcnNpb24gPSAoSVByb2plY3RGYWNldFZlcnNpb24pIGl0ZXIubmV4dCgpOwotICAgICAgICAgICAgZml4ZWRGYWNldHMuYWRkKGZhY2V0VmVyc2lvbi5nZXRQcm9qZWN0RmFjZXQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHN0YXR1cyA9IEZhY2V0VXRpbHMuc2V0Rml4ZWRGYWNldHNPblByb2plY3QoZnByb2plY3QsIGZpeGVkRmFjZXRzKTsKLSAgICAgICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuRVJST1IpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgIAotICAgICAgICAvL1NldCB0aGUgcnVudGltZSAgICAgICAgCi0gICAgICAgIGlmIChmYWNldFJ1bnRpbWUgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHN0YXR1cyA9IEZhY2V0VXRpbHMuc2V0RmFjZXRSdW50aW1lT25Qcm9qZWN0KGZwcm9qZWN0LCBmYWNldFJ1bnRpbWUpOwotICAgICAgICB9ICAgICAgICAKLSAgICAgICAgCi0gICAgICB9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKQotICAgICAgeyAgICAgICAgCi0gICAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZChDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9QUk9KRUNUX0NSRUFUSU9OLCBuZXcgU3RyaW5nW10geyBwcm9qZWN0TmFtZSB9KSwgY2UpOwotICAgICAgfQotICAgICAgICAKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0JfQotCQotCS8qKgotCSAqIENyZWF0ZSBhbiBFSkIgQ29tcG9uZW50Ci0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBJU3RhdHVzIGNyZWF0ZUVKQkNvbXBvbmVudCgpewotICAgICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOyAgICAgIAotICAgICAgCi0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgc3RhdHVzID0gRmFjZXRVdGlscy5jcmVhdGVOZXdGYWNldGVkUHJvamVjdChwcm9qZWN0TmFtZSk7Ci0gICAgICAgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLkVSUk9SKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgICAgfSAgICAgICAgCi0gICAgICAgIElQcm9qZWN0IGNyZWF0ZWRQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLSAgICAgICAgSUZhY2V0ZWRQcm9qZWN0IGZwcm9qZWN0ID0gUHJvamVjdEZhY2V0c01hbmFnZXIuY3JlYXRlKGNyZWF0ZWRQcm9qZWN0KTsgICAgICAgIAotCi0gICAgICAgIC8vRGVjaWRlIHdoaWNoIGZhY2V0cyB0byBpbnN0YWxsIGJhc2VkIG9uIHRoZSB0ZW1wbGF0ZUlkIGFuZCB0aGUgc2VsZWN0ZWQgc2VydmVyLiAKLSAgICAgICAgU2V0IGZhY2V0c1RvQWRkID0gZ2V0RmFjZXRzVG9BZGQoRUpCX1RFTVBMQVRFKTsgCi0gICAgICAgIFNldCBmYWNldHNUb0FkZE1vZGlmaWVkID0gZmFjZXRzVG9BZGQ7Ci0gICAgICAgIC8vSWYgdGhlIEoyRUUgbGV2ZWwgaGFzIGJlZW4gc2V0LCBtb2RpZnkgdGhlIFdlYiBmYWNldCB2ZXJzaW9uIHRvIGJlIGNvbnNpc3RlbnQuCi0gICAgICAgIGlmIChqMmVlTGV2ZWwhPW51bGwgJiYgajJlZUxldmVsLmxlbmd0aCgpPjApCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgd2ViVmVyc2lvbiA9IGdldEVKQlZlcnNpb25Gcm9tSjJFRUxldmVsKGoyZWVMZXZlbCk7Ci0gICAgICAgICAgZmFjZXRzVG9BZGRNb2RpZmllZCA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgICAgICAgSXRlcmF0b3IgaXRyID0gZmFjZXRzVG9BZGQuaXRlcmF0b3IoKTsKLSAgICAgICAgICB3aGlsZSAoaXRyLmhhc05leHQoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvL0lmIHRoaXMgaXMgdGhlIHdlYiBmYWNldCwgZ2V0IHRoZSByaWdodCB2ZXJzaW9uLgotICAgICAgICAgICAgSVByb2plY3RGYWNldFZlcnNpb24gcGZ2ID0gKElQcm9qZWN0RmFjZXRWZXJzaW9uKWl0ci5uZXh0KCk7Ci0gICAgICAgICAgICBJUHJvamVjdEZhY2V0IHBmID0gcGZ2LmdldFByb2plY3RGYWNldCgpOyAKLSAgICAgICAgICAgIGlmIChwZi5nZXRJZCgpLmVxdWFscyhJTW9kdWxlQ29uc3RhbnRzLkpTVF9FSkJfTU9EVUxFKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSVByb2plY3RGYWNldFZlcnNpb24gd2ViZnYgPSBwZi5nZXRWZXJzaW9uKHdlYlZlcnNpb24pOwotICAgICAgICAgICAgICBmYWNldHNUb0FkZE1vZGlmaWVkLmFkZCh3ZWJmdik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGZhY2V0c1RvQWRkTW9kaWZpZWQuYWRkKHBmdik7IAotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgc3RhdHVzID0gRmFjZXRVdGlscy5hZGRGYWNldHNUb1Byb2plY3QoZnByb2plY3QsIGZhY2V0c1RvQWRkTW9kaWZpZWQpOwotICAgICAgICBpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5FUlJPUikKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgICAgIH0gICAgICAgICAgICAgICAgCi0gICAgICAgIAotICAgICAgICBTZXQgbmV3RmFjZXRWZXJzaW9ucyA9IGZwcm9qZWN0LmdldFByb2plY3RGYWNldHMoKTsKLSAgICAgICAgU2V0IGZpeGVkRmFjZXRzID0gbmV3IEhhc2hTZXQoKTsKLSAgICAgICAgZm9yIChJdGVyYXRvciBpdGVyID0gbmV3RmFjZXRWZXJzaW9ucy5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspIHsKLSAgICAgICAgICAgIElQcm9qZWN0RmFjZXRWZXJzaW9uIGZhY2V0VmVyc2lvbiA9IChJUHJvamVjdEZhY2V0VmVyc2lvbikgaXRlci5uZXh0KCk7Ci0gICAgICAgICAgICBmaXhlZEZhY2V0cy5hZGQoZmFjZXRWZXJzaW9uLmdldFByb2plY3RGYWNldCgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN0YXR1cyA9IEZhY2V0VXRpbHMuc2V0Rml4ZWRGYWNldHNPblByb2plY3QoZnByb2plY3QsIGZpeGVkRmFjZXRzKTsKLSAgICAgICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuRVJST1IpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgIAotICAgICAgICAvL1NldCB0aGUgcnVudGltZSAgICAgICAgCi0gICAgICAgIGlmIChmYWNldFJ1bnRpbWUgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHN0YXR1cyA9IEZhY2V0VXRpbHMuc2V0RmFjZXRSdW50aW1lT25Qcm9qZWN0KGZwcm9qZWN0LCBmYWNldFJ1bnRpbWUpOwotICAgICAgICB9ICAgICAgICAKLSAgICAgICAgCi0gICAgICB9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKQotICAgICAgewotICAgICAgICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfQ1JFQVRFX0VKQl9DT01QT05FTlQsIG5ldyBTdHJpbmdbXSB7IHByb2plY3ROYW1lIH0pLCBjZSk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIHJldHVybiBzdGF0dXM7ICAgICAgCi0KLQl9Ci0JCi0JLyoqCi0JICogQ3JlYXRlIGFuIEFwcGxpY2F0aW9uIENsaWVudCBjb21wb25lbnQKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIElTdGF0dXMgY3JlYXRlQXBwQ2xpZW50Q29tcG9uZW50KCkKLSAgICB7Ci0gICAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7ICAgICAgCi0gICAgICAKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBzdGF0dXMgPSBGYWNldFV0aWxzLmNyZWF0ZU5ld0ZhY2V0ZWRQcm9qZWN0KHByb2plY3ROYW1lKTsKLSAgICAgICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuRVJST1IpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgICAgICB9ICAgICAgICAKLSAgICAgICAgSVByb2plY3QgY3JlYXRlZFByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QocHJvamVjdE5hbWUpOwotICAgICAgICBJRmFjZXRlZFByb2plY3QgZnByb2plY3QgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5jcmVhdGUoY3JlYXRlZFByb2plY3QpOyAgICAgICAgCi0KLSAgICAgICAgLy9EZWNpZGUgd2hpY2ggZmFjZXRzIHRvIGluc3RhbGwgYmFzZWQgb24gdGhlIHRlbXBsYXRlSWQgYW5kIHRoZSBzZWxlY3RlZCBzZXJ2ZXIuIAotICAgICAgICBTZXQgZmFjZXRzVG9BZGQgPSBnZXRGYWNldHNUb0FkZChBUFBDTElFTlRfVEVNUExBVEUpOyAKLSAgICAgICAgU2V0IGZhY2V0c1RvQWRkTW9kaWZpZWQgPSBmYWNldHNUb0FkZDsKLSAgICAgICAgLy9JZiB0aGUgSjJFRSBsZXZlbCBoYXMgYmVlbiBzZXQsIG1vZGlmeSB0aGUgV2ViIGZhY2V0IHZlcnNpb24gdG8gYmUgY29uc2lzdGVudC4KLSAgICAgICAgaWYgKGoyZWVMZXZlbCE9bnVsbCAmJiBqMmVlTGV2ZWwubGVuZ3RoKCk+MCkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyB3ZWJWZXJzaW9uID0gZ2V0QXBwQ2xpZW50VmVyc2lvbkZyb21KMkVFTGV2ZWwoajJlZUxldmVsKTsKLSAgICAgICAgICBmYWNldHNUb0FkZE1vZGlmaWVkID0gbmV3IEhhc2hTZXQoKTsKLSAgICAgICAgICBJdGVyYXRvciBpdHIgPSBmYWNldHNUb0FkZC5pdGVyYXRvcigpOwotICAgICAgICAgIHdoaWxlIChpdHIuaGFzTmV4dCgpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vSWYgdGhpcyBpcyB0aGUgd2ViIGZhY2V0LCBnZXQgdGhlIHJpZ2h0IHZlcnNpb24uCi0gICAgICAgICAgICBJUHJvamVjdEZhY2V0VmVyc2lvbiBwZnYgPSAoSVByb2plY3RGYWNldFZlcnNpb24paXRyLm5leHQoKTsKLSAgICAgICAgICAgIElQcm9qZWN0RmFjZXQgcGYgPSBwZnYuZ2V0UHJvamVjdEZhY2V0KCk7IAotICAgICAgICAgICAgaWYgKHBmLmdldElkKCkuZXF1YWxzKElNb2R1bGVDb25zdGFudHMuSlNUX0FQUENMSUVOVF9NT0RVTEUpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBJUHJvamVjdEZhY2V0VmVyc2lvbiB3ZWJmdiA9IHBmLmdldFZlcnNpb24od2ViVmVyc2lvbik7Ci0gICAgICAgICAgICAgIGZhY2V0c1RvQWRkTW9kaWZpZWQuYWRkKHdlYmZ2KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgZmFjZXRzVG9BZGRNb2RpZmllZC5hZGQocGZ2KTsgCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzdGF0dXMgPSBGYWNldFV0aWxzLmFkZEZhY2V0c1RvUHJvamVjdChmcHJvamVjdCwgZmFjZXRzVG9BZGRNb2RpZmllZCk7Ci0gICAgICAgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLkVSUk9SKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgICAgfSAgICAgICAgICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIFNldCBuZXdGYWNldFZlcnNpb25zID0gZnByb2plY3QuZ2V0UHJvamVjdEZhY2V0cygpOwotICAgICAgICBTZXQgZml4ZWRGYWNldHMgPSBuZXcgSGFzaFNldCgpOwotICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ZXIgPSBuZXdGYWNldFZlcnNpb25zLml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOykgewotICAgICAgICAgICAgSVByb2plY3RGYWNldFZlcnNpb24gZmFjZXRWZXJzaW9uID0gKElQcm9qZWN0RmFjZXRWZXJzaW9uKSBpdGVyLm5leHQoKTsKLSAgICAgICAgICAgIGZpeGVkRmFjZXRzLmFkZChmYWNldFZlcnNpb24uZ2V0UHJvamVjdEZhY2V0KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdHVzID0gRmFjZXRVdGlscy5zZXRGaXhlZEZhY2V0c09uUHJvamVjdChmcHJvamVjdCwgZml4ZWRGYWNldHMpOwotICAgICAgICBpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5FUlJPUikKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIC8vU2V0IHRoZSBydW50aW1lICAgICAgICAKLSAgICAgICAgaWYgKGZhY2V0UnVudGltZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgc3RhdHVzID0gRmFjZXRVdGlscy5zZXRGYWNldFJ1bnRpbWVPblByb2plY3QoZnByb2plY3QsIGZhY2V0UnVudGltZSk7Ci0gICAgICAgIH0gICAgICAgIAotICAgICAgICAKLSAgICAgIH0gY2F0Y2ggKENvcmVFeGNlcHRpb24gY2UpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZChDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9DUkVBVEVfQVBQQ0xJRU5UX0NPTVBPTkVOVCwgbmV3IFN0cmluZ1tdIHsgcHJvamVjdE5hbWUgfSksIGNlKTsKLSAgICAgIH0KLSAgICAgICAgCi0gICAgICByZXR1cm4gc3RhdHVzOyAgICAgIAotCX0KLQkKLSAgICAgIC8qCi0gICAgICAgKiBAcmV0dXJuIFNldCBSZXR1cm5zIHRoZSBTZXQgb2YgZmFjZXRzIHRvIGFkZCB0byB0aGUgbmV3IHByb2plY3QsIAotICAgICAgICogY2hvb3NpbmcgdGhlIGhpZ2hlc3QgbGV2ZWwgb2YgZWFjaCBmYWNldCB0aGF0IHdvcmtzIG9uIHRoZSBzZWxlY3RlZCBzZXJ2ZXIuCi0gICAgICAgKi8KLSAgICAgIHByaXZhdGUgU2V0IGdldEZhY2V0c1RvQWRkKFN0cmluZyB0ZW1wbGF0ZUlkKQotICAgICAgewotICAgICAgICBTZXQgZmFjZXRzID0gbmV3IEhhc2hTZXQoKTsKLSAgICAgICAgCi0gICAgICAgIC8vU2V0IHRoZSBmYWNldCBydW50aW1lLgotICAgICAgICBzZXRGYWNldFJ1bnRpbWUoKTsKLSAgICAgICAgaWYgKGZhY2V0UnVudGltZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGUgdGVtcGxhdGUgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5nZXRUZW1wbGF0ZSh0ZW1wbGF0ZUlkKTsKLSAgICAgICAgICBTZXQgdGVtcGxhdGVGYWNldHMgPSB0ZW1wbGF0ZS5nZXRGaXhlZFByb2plY3RGYWNldHMoKTsKLSAgICAgICAgICBJdGVyYXRvciB0ZW1wbGF0ZUZhY2V0c0l0ciA9IHRlbXBsYXRlRmFjZXRzLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgd2hpbGUgKHRlbXBsYXRlRmFjZXRzSXRyLmhhc05leHQoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBJUHJvamVjdEZhY2V0IGZpeGVkRmFjZXQgPSAoSVByb2plY3RGYWNldCl0ZW1wbGF0ZUZhY2V0c0l0ci5uZXh0KCk7Ci0gICAgICAgICAgICBMaXN0IHZlcnNpb25zID0gbnVsbDsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgdmVyc2lvbnMgPSBmaXhlZEZhY2V0LmdldFNvcnRlZFZlcnNpb25zKGZhbHNlKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKFZlcnNpb25Gb3JtYXRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIFNldCB2ZXJzaW9uU2V0ID0gZml4ZWRGYWNldC5nZXRWZXJzaW9ucygpOwotICAgICAgICAgICAgICAgIEl0ZXJhdG9yIGl0ciA9IHZlcnNpb25TZXQuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgICAgICB2ZXJzaW9ucyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoaXRyLmhhc05leHQoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHZlcnNpb25zLmFkZChpdHIubmV4dCgpKTsKLSAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgCi0gICAgICAgICAgICB9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBTZXQgdmVyc2lvblNldCA9IGZpeGVkRmFjZXQuZ2V0VmVyc2lvbnMoKTsKLSAgICAgICAgICAgICAgICBJdGVyYXRvciBpdHIgPSB2ZXJzaW9uU2V0Lml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICAgICAgdmVyc2lvbnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGl0ci5oYXNOZXh0KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB2ZXJzaW9ucy5hZGQoaXRyLm5leHQoKSk7Ci0gICAgICAgICAgICAgICAgfSAgICAgICAgICAgIAotICAgICAgICAgICAgfSAKLSAgICAgICAgICAgIEl0ZXJhdG9yIHZlcnNpb25zSXRyID0gdmVyc2lvbnMuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgIHdoaWxlKHZlcnNpb25zSXRyLmhhc05leHQoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSVByb2plY3RGYWNldFZlcnNpb24gcGZ2ID0gKElQcm9qZWN0RmFjZXRWZXJzaW9uKXZlcnNpb25zSXRyLm5leHQoKTsKLSAgICAgICAgICAgICAgU2V0IHBmdnMgPSBuZXcgSGFzaFNldCgpOwotICAgICAgICAgICAgICBwZnZzLmFkZChwZnYpOyAgICAgICAgICAgCi0gICAgICAgICAgICAgIAotICAgICAgICAgICAgICAvL0NoZWNrIGFnYWluc3QgUnVudGltZQotICAgICAgICAgICAgICBpZiAoRmFjZXRVdGlscy5kb2VzUnVudGltZVN1cHBvcnRGYWNldHMoZmFjZXRSdW50aW1lLCBwZnZzKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgLy9XZSBoYXZlIGEgbWF0Y2guIEFkZCB0aGlzIG9uZSB0byB0aGUgbWFzdGVyIHNldC4KLSAgICAgICAgICAgICAgICAgIGZhY2V0cy5hZGQocGZ2KTsKLSAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIGZhY2V0cyA9IEZhY2V0VXRpbHMuZ2V0SW5pdGlhbEZhY2V0VmVyc2lvbnNGcm9tVGVtcGxhdGUodGVtcGxhdGVJZCk7Ci0gICAgICAgIH0KLSAgICAgCi0gICAgICAgIAotICAgICAgICByZXR1cm4gZmFjZXRzOwotICAgICAgfQotICAgICAgCi0gICAgICBwcml2YXRlIHZvaWQgc2V0RmFjZXRSdW50aW1lKCkKLSAgICAgIHsKLSAgICAgICAgCi0gICAgICAgIGlmIChzZXJ2ZXJJbnN0YW5jZUlkXyAhPSBudWxsICYmIHNlcnZlckluc3RhbmNlSWRfLmxlbmd0aCgpPjApCi0gICAgICAgIHsKLSAgICAgICAgICBJU2VydmVyIHNlcnZlciA9IFNlcnZlckNvcmUuZmluZFNlcnZlcihzZXJ2ZXJJbnN0YW5jZUlkXyk7Ci0gICAgICAgICAgSVJ1bnRpbWUgc1J1bnRpbWUgPSBzZXJ2ZXIuZ2V0UnVudGltZSgpOwotICAgICAgICAgIGZhY2V0UnVudGltZSA9IEZhY2V0VXRpbC5nZXRSdW50aW1lKHNSdW50aW1lKTsgICAgICAKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAvL0ZpbmQgYSBub24gU3R1YiBydW50aW1lIHRoYXQgbWF0Y2hlcyB0aGlzIHNlcnZlciB0eXBlCi0gICAgICAgICAgSVJ1bnRpbWUgc2VydmVyUnVudGltZSA9IFNlcnZlclV0aWxzLmdldE5vblN0dWJSdW50aW1lKHNlcnZlckZhY3RvcnlJZCk7Ci0gICAgICAgICAgaWYgKHNlcnZlclJ1bnRpbWUgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBmYWNldFJ1bnRpbWUgPSBGYWNldFV0aWwuZ2V0UnVudGltZShzZXJ2ZXJSdW50aW1lKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vQWNjZXB0IHN0dWIgcnVudGltZS4KLSAgICAgICAgICAgIElTZXJ2ZXJUeXBlIHN0ID0gU2VydmVyQ29yZS5maW5kU2VydmVyVHlwZShzZXJ2ZXJGYWN0b3J5SWQpOwotICAgICAgICAgICAgU3RyaW5nIHJ1bnRpbWVUeXBlSWQgPSBzdC5nZXRSdW50aW1lVHlwZSgpLmdldElkKCk7ICAgCi0gICAgICAgICAgICAvL0ZpbmQgdGhlIGZhY2V0IHJ1bnRpbWUKLSAgICAgICAgICAgIElSdW50aW1lW10gcnVudGltZXMgPSBTZXJ2ZXJDb3JlLmdldFJ1bnRpbWVzKCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpPTA7IGk8cnVudGltZXMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIElSdW50aW1lIHNSdW50aW1lID0gcnVudGltZXNbaV07Ci0gICAgICAgICAgICAgIGlmIChzUnVudGltZS5nZXRSdW50aW1lVHlwZSgpLmdldElkKCkuZXF1YWxzKHJ1bnRpbWVUeXBlSWQpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZmFjZXRSdW50aW1lID0gRmFjZXRVdGlsLmdldFJ1bnRpbWUoc1J1bnRpbWUpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9ICAgICAgICAgICAgICAgIAotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfSAgICAgIAotICAgIAotICAgcHJpdmF0ZSBTdHJpbmcgZ2V0V2ViVmVyc2lvbkZyb21KMkVFTGV2ZWwoU3RyaW5nIGoyZWVWZXJzaW9uKQotICAgewotICAgICAgICBpbnQgYVZlcnNpb24gPSBJbnRlZ2VyLnZhbHVlT2YoajJlZUxldmVsKS5pbnRWYWx1ZSgpOwotICAgICAgICBzd2l0Y2ggKGFWZXJzaW9uKSB7Ci0gICAgICAgIGNhc2UgSjJFRVZlcnNpb25Db25zdGFudHMuSjJFRV8xXzJfSUQ6Ci0gICAgICAgICAgICByZXR1cm4gIjIuMiI7Ci0KLSAgICAgICAgY2FzZSBKMkVFVmVyc2lvbkNvbnN0YW50cy5KMkVFXzFfM19JRDoKLSAgICAgICAgICAgIHJldHVybiAiMi4zIjsKLQotICAgICAgICBjYXNlIEoyRUVWZXJzaW9uQ29uc3RhbnRzLkoyRUVfMV80X0lEOgotICAgICAgICAgICAgcmV0dXJuICIyLjQiOwotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gIjIuNCI7Ci0gICAgICAgIH0gICAgICAgICAgICAgICAgCi0gICB9Ci0JCi0gICBwcml2YXRlIFN0cmluZyBnZXRFSkJWZXJzaW9uRnJvbUoyRUVMZXZlbChTdHJpbmcgajJlZVZlcnNpb24pCi0gICB7Ci0gICAgICAgIGludCBhVmVyc2lvbiA9IEludGVnZXIudmFsdWVPZihqMmVlTGV2ZWwpLmludFZhbHVlKCk7Ci0gICAgICAgIHN3aXRjaCAoYVZlcnNpb24pIHsKLSAgICAgICAgY2FzZSBKMkVFVmVyc2lvbkNvbnN0YW50cy5KMkVFXzFfMl9JRDoKLSAgICAgICAgICAgIHJldHVybiAiMS4xIjsKLQotICAgICAgICBjYXNlIEoyRUVWZXJzaW9uQ29uc3RhbnRzLkoyRUVfMV8zX0lEOgotICAgICAgICAgICAgcmV0dXJuICIyLjAiOwotCi0gICAgICAgIGNhc2UgSjJFRVZlcnNpb25Db25zdGFudHMuSjJFRV8xXzRfSUQ6Ci0gICAgICAgICAgICByZXR1cm4gIjIuMSI7Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiAiMi4xIjsKLSAgICAgICAgfSAgICAgICAgICAgICAgICAKLSAgIH0KLSAgIAotICAgcHJpdmF0ZSBTdHJpbmcgZ2V0QXBwQ2xpZW50VmVyc2lvbkZyb21KMkVFTGV2ZWwoU3RyaW5nIGoyZWVWZXJzaW9uKQotICAgewotICAgICAgICBpbnQgYVZlcnNpb24gPSBJbnRlZ2VyLnZhbHVlT2YoajJlZUxldmVsKS5pbnRWYWx1ZSgpOwotICAgICAgICBzd2l0Y2ggKGFWZXJzaW9uKSB7Ci0gICAgICAgIGNhc2UgSjJFRVZlcnNpb25Db25zdGFudHMuSjJFRV8xXzJfSUQ6Ci0gICAgICAgICAgICByZXR1cm4gIjEuMiI7Ci0KLSAgICAgICAgY2FzZSBKMkVFVmVyc2lvbkNvbnN0YW50cy5KMkVFXzFfM19JRDoKLSAgICAgICAgICAgIHJldHVybiAiMS4zIjsKLQotICAgICAgICBjYXNlIEoyRUVWZXJzaW9uQ29uc3RhbnRzLkoyRUVfMV80X0lEOgotICAgICAgICAgICAgcmV0dXJuICIxLjQiOwotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gIjEuNCI7Ci0gICAgICAgIH0gICAgICAgICAgICAgICAgCi0gICB9Ci0gICAKLSAgIHByaXZhdGUgU3RyaW5nIGdldEVBUlZlcnNpb25Gcm9tSjJFRUxldmVsKFN0cmluZyBqMmVlVmVyc2lvbikKLSAgIHsKLSAgICAgICAgaW50IGFWZXJzaW9uID0gSW50ZWdlci52YWx1ZU9mKGoyZWVMZXZlbCkuaW50VmFsdWUoKTsKLSAgICAgICAgc3dpdGNoIChhVmVyc2lvbikgewotICAgICAgICBjYXNlIEoyRUVWZXJzaW9uQ29uc3RhbnRzLkoyRUVfMV8yX0lEOgotICAgICAgICAgICAgcmV0dXJuICIxLjIiOwotCi0gICAgICAgIGNhc2UgSjJFRVZlcnNpb25Db25zdGFudHMuSjJFRV8xXzNfSUQ6Ci0gICAgICAgICAgICByZXR1cm4gIjEuMyI7Ci0KLSAgICAgICAgY2FzZSBKMkVFVmVyc2lvbkNvbnN0YW50cy5KMkVFXzFfNF9JRDoKLSAgICAgICAgICAgIHJldHVybiAiMS40IjsKLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuICIxLjQiOwotICAgICAgICB9ICAgICAgICAgICAgICAgIAotICAgfQotICAgCi0JcHVibGljIHZvaWQgc2V0TW9kdWxlTmFtZShTdHJpbmcgbW9kdWxlTmFtZSkKLQl7Ci0JCXRoaXMubW9kdWxlTmFtZSA9IG1vZHVsZU5hbWU7Ci0JfQkKLQotCXB1YmxpYyBpbnQgZ2V0TW9kdWxlVHlwZSgpCi0JewotCQlyZXR1cm4gbW9kdWxlVHlwZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRNb2R1bGVUeXBlKGludCBtb2R1bGVUeXBlKQotCXsKLQkJdGhpcy5tb2R1bGVUeXBlID0gbW9kdWxlVHlwZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRQcm9qZWN0TmFtZShTdHJpbmcgcHJvamVjdE5hbWUpCi0JewotCQl0aGlzLnByb2plY3ROYW1lID0gcHJvamVjdE5hbWU7Ci0JfQotCi0JLyoqCi0JICogRXhwZWN0aW5nIDEyLDEzLDE0IGV0Yy4KLQkgKiBAcGFyYW0gbGV2ZWwKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRKMmVlTGV2ZWwoU3RyaW5nIGxldmVsKQotCXsKLQkJaWYgKGxldmVsICE9bnVsbCAmJiBsZXZlbC5pbmRleE9mKCIuIikhPS0xKQotCQkJajJlZUxldmVsID0gSjJFRVV0aWxzLmdldEoyRUVJbnRWZXJzaW9uQXNTdHJpbmcobGV2ZWwpOwotCQllbHNlCi0JCQlqMmVlTGV2ZWwgPSBsZXZlbDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJGYWN0b3J5SWQoU3RyaW5nIHNlcnZlckZhY3RvcnlJZCkKLQl7Ci0JCXRoaXMuc2VydmVyRmFjdG9yeUlkID0gc2VydmVyRmFjdG9yeUlkOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJJbnN0YW5jZUlkKCBTdHJpbmcgc2VydmVySW5zdGFuY2VJZCApCi0JewotCSAgc2VydmVySW5zdGFuY2VJZF8gPSBzZXJ2ZXJJbnN0YW5jZUlkOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9DcmVhdGVNb25pdG9yQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9DcmVhdGVNb25pdG9yQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NGI4ODZjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vQ3JlYXRlTW9uaXRvckNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uQ29uc3VtcHRpb25NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZGF0YS5UeXBlUnVudGltZVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJQb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5pbnRlcm5hbC5JTW9uaXRvcmVkU2VydmVyUG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuaW50ZXJuYWwuSVNlcnZlck1vbml0b3JNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5pbnRlcm5hbC5TZXJ2ZXJNb25pdG9yTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIENyZWF0ZU1vbml0b3JDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgV0VCX1NFUlZJQ0VTID0gIldlYiBzZXJ2aWNlcyI7Ci0KLSAgcHJpdmF0ZSBCb29sZWFuIG1vbml0b3JTZXJ2aWNlOwotCi0gIHByaXZhdGUgU3RyaW5nIHNlcnZpY2VTZXJ2ZXJJbnN0YW5jZUlkOwotCi0gIHByaXZhdGUgSW50ZWdlciBtb25pdG9yZWRQb3J0OwotCi0gIHB1YmxpYyBDcmVhdGVNb25pdG9yQ29tbWFuZCgpIHsKLSAgfQotCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0gICAgSUVudmlyb25tZW50IGVudiA9IGdldEVudmlyb25tZW50KCk7Ci0gICAgCi0gICAgaWYgKG1vbml0b3JTZXJ2aWNlICE9IG51bGwgJiYgbW9uaXRvclNlcnZpY2UuYm9vbGVhblZhbHVlKCkpIHsKLSAgICAgIElTZXJ2ZXIgc2VydmVyID0gU2VydmVyQ29yZS5maW5kU2VydmVyKHNlcnZpY2VTZXJ2ZXJJbnN0YW5jZUlkKTsKLSAgICAgIGlmIChzZXJ2ZXIgIT0gbnVsbCkgewotCi0gICAgICAgIC8vIElNb25pdG9yYWJsZVNlcnZlciBtb25pdG9yYWJsZVNlcnZlciA9IChJTW9uaXRvcmFibGVTZXJ2ZXIpCi0gICAgICAgIC8vIHNlcnZlckRlbGVnYXRlOwotICAgICAgICBTZXJ2ZXJQb3J0W10gcG9ydHMgPSBzZXJ2ZXIuZ2V0U2VydmVyUG9ydHMobnVsbCk7Ci0gICAgICAgIFNlcnZlclBvcnQgcG9ydCA9IG51bGw7Ci0gICAgICAgIGZvciAoaW50IGl0ID0gMDsgaXQgPCBwb3J0cy5sZW5ndGg7IGl0KyspIHsKLSAgICAgICAgICBTZXJ2ZXJQb3J0IHAgPSBwb3J0c1tpdF07Ci0gICAgICAgICAgU3RyaW5nIHByb3RvY29sID0gcC5nZXRQcm90b2NvbCgpOwotICAgICAgICAgIGlmIChwcm90b2NvbCAhPSBudWxsICYmIHByb3RvY29sLnRyaW0oKS50b0xvd2VyQ2FzZSgpLmVxdWFscygiaHR0cCIpKSB7Ci0gICAgICAgICAgICBwb3J0ID0gcDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAocG9ydCAhPSBudWxsKSB7Ci0gICAgICAgICAgSVNlcnZlck1vbml0b3JNYW5hZ2VyIHNlcnZlck1vbml0b3JNYW5hZ2VyID0gU2VydmVyTW9uaXRvck1hbmFnZXIuZ2V0SW5zdGFuY2UoKTsKLSAgICAgICAgICBJTW9uaXRvcmVkU2VydmVyUG9ydFtdIG1vbml0b3JlZFBvcnRzID0gc2VydmVyTW9uaXRvck1hbmFnZXIuZ2V0TW9uaXRvcmVkUG9ydHMoc2VydmVyKTsKLSAgICAgICAgICBmb3IgKGludCBpdDIgPSAwOyBpdDIgPCBtb25pdG9yZWRQb3J0cy5sZW5ndGg7IGl0MisrKSB7Ci0gICAgICAgICAgICBJTW9uaXRvcmVkU2VydmVyUG9ydCBpbXNQb3J0ID0gbW9uaXRvcmVkUG9ydHNbaXQyXTsKLSAgICAgICAgICAgIGlmIChwb3J0LmdldFBvcnQoKSA9PSBpbXNQb3J0LmdldFNlcnZlclBvcnQoKS5nZXRQb3J0KCkgJiYgaGFzQ29udGVudFdlYlNlcnZpY2VzKGltc1BvcnQpKSAvLyBwb3J0Ci0gICAgICAgICAgICAvLyBhbHJlYWR5Ci0gICAgICAgICAgICAvLyBiZWluZwotICAgICAgICAgICAgLy8gbW9uaXRvcmVkCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlmICghaW1zUG9ydC5pc1N0YXJ0ZWQoKSkgewotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICBzZXJ2ZXJNb25pdG9yTWFuYWdlci5zdGFydE1vbml0b3IoaW1zUG9ydCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKSB7Ci0gICAgICAgICAgICAgICAgICBJU3RhdHVzIGVycm9yID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIE5MUy5iaW5kKENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX1VOQUJMRV9UT19TVEFSVF9NT05JVE9SLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W10geyBTdHJpbmcudmFsdWVPZihwb3J0LmdldFBvcnQoKSksIHNlcnZlci5nZXROYW1lKCl9KSwgY2UpOwotICAgICAgICAgICAgICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihlcnJvcik7Ci0gICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3I7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIG1vbml0b3JlZFBvcnQgPSBuZXcgSW50ZWdlcihpbXNQb3J0LmdldE1vbml0b3JQb3J0KCkpOwotICAgICAgICAgICAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIElNb25pdG9yZWRTZXJ2ZXJQb3J0IGltc1BvcnQgPSBzZXJ2ZXJNb25pdG9yTWFuYWdlci5jcmVhdGVNb25pdG9yKHNlcnZlciwgcG9ydCwgLTEsIG5ldyBTdHJpbmdbXSB7IFdFQl9TRVJWSUNFU30pOwotICAgICAgICAgICAgc2VydmVyTW9uaXRvck1hbmFnZXIuc3RhcnRNb25pdG9yKGltc1BvcnQpOwotICAgICAgICAgICAgbW9uaXRvcmVkUG9ydCA9IG5ldyBJbnRlZ2VyKGltc1BvcnQuZ2V0TW9uaXRvclBvcnQoKSk7Ci0gICAgICAgICAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKENvcmVFeGNlcHRpb24gY2UpIHsKLSAgICAgICAgICAgIElTdGF0dXMgZXJyb3IgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggTkxTLmJpbmQoQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfVU5BQkxFX1RPX1NUQVJUX01PTklUT1IsIG5ldyBPYmplY3RbXSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZy52YWx1ZU9mKHBvcnQuZ2V0UG9ydCgpKSwgc2VydmVyLmdldE5hbWUoKX0pLCBjZSk7Ci0gICAgICAgICAgICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKGVycm9yKTsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcjsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICBJU3RhdHVzIGluZm8gPSBTdGF0dXNVdGlscy5pbmZvU3RhdHVzKCBOTFMuYmluZChDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19JTkZPX01PTklUT1JJTkdfTk9UX1NVUFBPUlRFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W10geyBzZXJ2ZXIuZ2V0TmFtZSgpfSkgKTsKLSAgICAgICAgICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEluZm8oaW5mbyk7Ci0gICAgICAgICAgcmV0dXJuIGluZm87Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gaGFzQ29udGVudFdlYlNlcnZpY2VzKElNb25pdG9yZWRTZXJ2ZXJQb3J0IGltc1BvcnQpIHsKLSAgICBTdHJpbmdbXSBjb250ZW50cyA9IGltc1BvcnQuZ2V0Q29udGVudFR5cGVzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb250ZW50cy5sZW5ndGg7IGkrKykKLSAgICAgIGlmIChXRUJfU0VSVklDRVMuZXF1YWxzKGNvbnRlbnRzW2ldKSkgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0U2VydmljZVR5cGVSdW50aW1lU2VydmVyKFR5cGVSdW50aW1lU2VydmVyIHR5cGVSdW50aW1lU2VydmVyKSB7Ci0gICAgdGhpcy5zZXJ2aWNlU2VydmVySW5zdGFuY2VJZCA9IHR5cGVSdW50aW1lU2VydmVyLmdldFNlcnZlckluc3RhbmNlSWQoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VTZXJ2ZXJJbnN0YW5jZUlkKFN0cmluZyBzZXJ2aWNlU2VydmVySW5zdGFuY2VJZCkgewotICAgIHRoaXMuc2VydmljZVNlcnZlckluc3RhbmNlSWQgPSBzZXJ2aWNlU2VydmVySW5zdGFuY2VJZDsKLSAgfQotCi0gIHB1YmxpYyBJbnRlZ2VyIGdldE1vbml0b3JlZFBvcnQoKSB7Ci0gICAgcmV0dXJuIG1vbml0b3JlZFBvcnQ7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRNb25pdG9yU2VydmljZShCb29sZWFuIHZhbHVlKSB7Ci0gICAgbW9uaXRvclNlcnZpY2UgPSB2YWx1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9DcmVhdGVTZXJ2ZXJDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0NyZWF0ZVNlcnZlckNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmUzMWU4My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0NyZWF0ZVNlcnZlckNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uQ29uc3VtcHRpb25NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JUnVudGltZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlclR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXJXb3JraW5nQ29weTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuU2VydmVyQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuU2VydmVyVXRpbDsKLQotcHVibGljIGNsYXNzIENyZWF0ZVNlcnZlckNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotCXByaXZhdGUgU3RyaW5nIHNlcnZlckZhY3RvcnlJZDsKLQlwcml2YXRlIFN0cmluZyBzZXJ2ZXJJbnN0YW5jZUlkOwotCQotCS8qKgotCSAqIENyZWF0ZXMgYSBzZXJ2ZXIgb2YgdGhlIGZhY3RvcnkgaWQKLQkgKiBOb3RlMTogQ2hlY2tpbmcgZm9yIHNlcnZlciBpbnN0YW5jZSA9PSBudWxsIGlzIGRvbmUgaW4gdGhlIFByZVNlcnZpY2UvQ2xpZW50SW5zdGFsbENvbW1hbmRzCi0JICogTm90ZTI6IFJlcG9ydGluZyBvZiBlcnJvcnMgaXMgZG9uZSBpbiBQcmVTZXJ2aWNlL0NsaWVudEluc3RhbGxDb21tYW5kczsgc2ltcGx5IHJldHVybiB0aGUgc3RhdHVzLgotCSAqLwotCXB1YmxpYyBDcmVhdGVTZXJ2ZXJDb21tYW5kKCl7Ci0JfQotCQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgewotICAgIElFbnZpcm9ubWVudCBlbnYgPSBnZXRFbnZpcm9ubWVudCgpOwotICAgIAotCQlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0JCQotCQlpZiAoc2VydmVyRmFjdG9yeUlkPT1udWxsKXsKLQkJCXN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX0NSRUFURV9TRVJWRVIgKTsKLQkJCXJldHVybiBzdGF0dXM7CQkJCi0JCX0KLQkJCi0JCUlTZXJ2ZXJXb3JraW5nQ29weSBzZXJ2ZXJXQyA9IG51bGw7Ci0JCUlTZXJ2ZXIgc2VydmVyID0gbnVsbDsKLQkJdHJ5IHsKLQkJCUlTZXJ2ZXJUeXBlIHNlcnZlclR5cGUgPSBTZXJ2ZXJDb3JlLmZpbmRTZXJ2ZXJUeXBlKHNlcnZlckZhY3RvcnlJZCk7Ci0JCQlpZiAoc2VydmVyVHlwZSE9bnVsbCkgewotCQkJCQotCQkJCS8vQ2hvb3NlIGEgUnVudGltZSB3aGljaCBpcyBub3QgYSBzdHViCi0JCQkJSVJ1bnRpbWUgbm9uU3R1YlJ1bnRpbWUgPSBudWxsOwotCQkJCUlSdW50aW1lW10gcnVudGltZXMgPSBTZXJ2ZXJVdGlsLmdldFJ1bnRpbWVzKG51bGwsIG51bGwpOwotCQkJCVN0cmluZyBzZXJ2ZXJSdW50aW1lVHlwZUlkID0gc2VydmVyVHlwZS5nZXRSdW50aW1lVHlwZSgpLmdldElkKCk7Ci0JCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBydW50aW1lcy5sZW5ndGg7IGkrKykgewotCQkJCQlJUnVudGltZSBydW50aW1lID0gcnVudGltZXNbaV07Ci0JCQkJCVN0cmluZyB0aGlzUnVudGltZVR5cGVJZCA9IHJ1bnRpbWUuZ2V0UnVudGltZVR5cGUoKS5nZXRJZCgpOwotCQkJCQlpZiAodGhpc1J1bnRpbWVUeXBlSWQuZXF1YWxzKHNlcnZlclJ1bnRpbWVUeXBlSWQpICYmICFydW50aW1lLmlzU3R1YigpKSB7Ci0JCQkJICAgICAgICAvL0ZvdW5kIGFuIGFwcHJvcHJpYXRlIElSdW50aW1lIHRoYXQgaXMgbm90IGEgc3R1YgotCQkJCQkJbm9uU3R1YlJ1bnRpbWUgPSBydW50aW1lOwotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJCQl9CQkJCQotCQkJCQotCQkJCWlmIChub25TdHViUnVudGltZT09bnVsbCkKLQkJCQl7CQkJCQkKLQkJCQkJc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIE5MUy5iaW5kKENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX1NUVUJfT05MWSxuZXcgU3RyaW5nW117c2VydmVyRmFjdG9yeUlkfSkgKTsKLQkJCQkJcmV0dXJuIHN0YXR1czsJCQkJCQotCQkJCX0KLQkJCQkKLQkJCQlpZiAoZW52IT1udWxsKQotCQkJCXsKLQkJCQkJc2VydmVyV0MgPSBzZXJ2ZXJUeXBlLmNyZWF0ZVNlcnZlcihudWxsLCBudWxsLCBub25TdHViUnVudGltZSwgbW9uaXRvciApOwotCQkJCX0KLQkJCQllbHNlCi0JCQkJewkJCQkJCi0JCQkJCXNlcnZlcldDID0gc2VydmVyVHlwZS5jcmVhdGVTZXJ2ZXIobnVsbCwgbnVsbCwgbm9uU3R1YlJ1bnRpbWUsIG51bGwpOwotCQkJCX0KLQkJCQkKLQkJCQlpZiAoc2VydmVyV0MgIT0gbnVsbCkgewotCQkJCQlpZiAoZW52IT1udWxsKQotCQkJCQkJc2VydmVyID0gc2VydmVyV0Muc2F2ZUFsbCh0cnVlLCBtb25pdG9yICk7Ci0JCQkJCWVsc2UKLQkJCQkJCXNlcnZlciA9IHNlcnZlcldDLnNhdmVBbGwodHJ1ZSwgbnVsbCk7Ci0JCQkJfQotCQkJfQotCQl9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKSB7Ci0JCQlzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfQ1JFQVRFX1NFUlZFUiwgY2UpOwotCQkJcmV0dXJuIHN0YXR1czsKLQkJfQotCQkKLQkJLy8gc2V0IHNlcnZlckluc3RhbmNlSWQKLQkJaWYgKHNlcnZlciE9bnVsbCkKLQkJCXNlcnZlckluc3RhbmNlSWQgPSBzZXJ2ZXIuZ2V0SWQoKTsKLQkJZWxzZSB7Ci0JCQlzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfQ1JFQVRFX1NFUlZFUiApOwkJCQotCQl9Ci0JCQotCQlyZXR1cm4gc3RhdHVzOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFNlcnZlckZhY3RvcnlpZChTdHJpbmcgc2VydmVyRmFjdG9yeUlkKQotCXsKLQkJdGhpcy5zZXJ2ZXJGYWN0b3J5SWQgPSBzZXJ2ZXJGYWN0b3J5SWQ7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRTZXJ2ZXJJbnN0YW5jZUlkKCkKLQl7Ci0JCXJldHVybiBzZXJ2ZXJJbnN0YW5jZUlkOwotCX0KLQkKLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vRGlzYWJsZUJ1aWxkQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9EaXNhYmxlQnVpbGRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxMmNjYmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9EaXNhYmxlQnVpbGRDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5Db25zdW1wdGlvbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwudmFsaWRhdGUuVmFsaWRhdGlvbk1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlByb2dyZXNzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotCi0KLXB1YmxpYyBjbGFzcyBEaXNhYmxlQnVpbGRDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gCi17Ci0KLSAgcHJpdmF0ZSBWYWxpZGF0aW9uTWFuYWdlciBtYW5hZ2VyXzsKLSAgLyoqCi0gICAqIENUT1I7Ci0gICAqLwotICBwdWJsaWMgRGlzYWJsZUJ1aWxkQ29tbWFuZCgpCi0gIHsKLQotICB9Ci0KLSAgLyoqCi0gICAqIEV4ZWN1dGUgdGhlIGNvbW1hbmQKLSAgICovCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7ICAgIAotICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLQotICAgIFByb2dyZXNzVXRpbHMucmVwb3J0KCBtb25pdG9yLCBDb25zdW1wdGlvbk1lc3NhZ2VzLlRBU0tfREVTQ19XRUJTRVJWSUNFX0RJU0FCTEVfQlVJTEQpOwotCi0gICAgaWYgKG1hbmFnZXJfIT1udWxsKSB7Ci0gICAgICBtYW5hZ2VyXy5kaXNhYmxlQXV0b0J1aWxkKCk7Ci0gICAgfQotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IHRoZSBtb2RlbAotICAgKiAKLSAgICogQHBhcmFtIG1vZGVsCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRNb2RlbChNb2RlbCBtb2RlbCkgewotICB9ICAKLSAgCi0gIAotICAvKioKLSAgICogQHBhcmFtIG1hbmFnZXJfIFRoZSBtYW5hZ2VyXyB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRWYWxpZGF0aW9uTWFuYWdlcihWYWxpZGF0aW9uTWFuYWdlciBtYW5hZ2VyKSB7Ci0gICAgdGhpcy5tYW5hZ2VyXyA9IG1hbmFnZXI7Ci0gIH0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9EaXNhYmxlVmFsaWRhdGlvbkNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vRGlzYWJsZVZhbGlkYXRpb25Db21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0NWRmY2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9EaXNhYmxlVmFsaWRhdGlvbkNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLkNvbnN1bXB0aW9uTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC52YWxpZGF0ZS5WYWxpZGF0aW9uTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uUHJvZ3Jlc3NVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi0KLXB1YmxpYyBjbGFzcyBEaXNhYmxlVmFsaWRhdGlvbkNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiAKLXsKLQotICBwcml2YXRlIFZhbGlkYXRpb25NYW5hZ2VyIG1hbmFnZXJfOwotICBwcml2YXRlIElQcm9qZWN0IHNlcnZpY2VQcm9qZWN0XzsKLQotICAvKioKLSAgICogQ1RPUjsKLSAgICovCi0gIHB1YmxpYyBEaXNhYmxlVmFsaWRhdGlvbkNvbW1hbmQoKSB7Ci0gIH0KLQotICAvKioKLSAgICogRXhlY3V0ZSB0aGUgY29tbWFuZAotICAgKi8KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLSAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0KLSAgICBQcm9ncmVzc1V0aWxzLnJlcG9ydChtb25pdG9yLCBDb25zdW1wdGlvbk1lc3NhZ2VzLlRBU0tfREVTQ19XRUJTRVJWSUNFX0RJU0FCTEVfVkFMSURBVElPTik7Ci0KLSAgICBJUHJvamVjdCBwcm9qZWN0ID0gc2VydmljZVByb2plY3RfOwotICAgIGlmIChwcm9qZWN0ICE9IG51bGwpIG1hbmFnZXJfLmRpc2FibGVWYWxpZGF0aW9uRm9yUHJvamVjdChwcm9qZWN0KTsKLQotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0KLQotICAvKioKLSAgICogQHBhcmFtIG1hbmFnZXJfCi0gICAqICAgICAgICAgICAgVGhlIG1hbmFnZXJfIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFZhbGlkYXRpb25NYW5hZ2VyKFZhbGlkYXRpb25NYW5hZ2VyIG1hbmFnZXIpIHsKLSAgICB0aGlzLm1hbmFnZXJfID0gbWFuYWdlcjsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U2VydmljZVByb2plY3QoSVByb2plY3Qgc2VydmljZVByb2plY3QpewotICAgIHRoaXMuc2VydmljZVByb2plY3RfID0gc2VydmljZVByb2plY3Q7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vR2V0TW9uaXRvckNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vR2V0TW9uaXRvckNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQwY2Q2NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0dldE1vbml0b3JDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNjEyICAgMTQ2NTY0IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDcyOCAgIDE0NTQyNiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbjsKLQotLy8gVE9ETzogR2V0IHJpZCBvZiB0aGlzLiBBIHJlcGxhY2VtZW50IGlzIGluIG9yZy5lY2xpcHNlLndzdC53cy4KLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5TZXJ2aWNlOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQQWRkcmVzczsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQWRkcmVzczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLkNvbnN1bXB0aW9uTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbi5XU0RMUGFyc2VyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LlN0YXR1c0V4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9uaXRvcldvcmtpbmdDb3B5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuTW9uaXRvckNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnV0aWwuU29ja2V0VXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci0KLXB1YmxpYyBjbGFzcyBHZXRNb25pdG9yQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIHByaXZhdGUgYm9vbGVhbiBtb25pdG9yU2VydmljZTsKLSAgcHJpdmF0ZSBib29sZWFuIGNyZWF0ZTsKLSAgcHJpdmF0ZSBXZWJTZXJ2aWNlc1BhcnNlciB3ZWJTZXJ2aWNlc1BhcnNlcjsKLSAgcHJpdmF0ZSBTdHJpbmcgd3NkbFVSSTsKLSAgcHJpdmF0ZSBMaXN0IGVuZHBvaW50czsKLSAgcHJpdmF0ZSBTdHJpbmcgcHJveHlFbmRwb2ludDsKLQotICBwdWJsaWMgR2V0TW9uaXRvckNvbW1hbmQoKQotICB7Ci0gICAgbW9uaXRvclNlcnZpY2UgPSB0cnVlOwotICAgIGNyZWF0ZSA9IHRydWU7Ci0gIH0KLQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgewotICAgIElFbnZpcm9ubWVudCBlbnYgPSBnZXRFbnZpcm9ubWVudCgpOwotICAgIAotICAgIGVuZHBvaW50cyA9IG5ldyBWZWN0b3IoKTsKLSAgICBpZiAobW9uaXRvclNlcnZpY2UgJiYgd3NkbFVSSSAhPSBudWxsICYmIHdzZGxVUkkubGVuZ3RoKCkgPiAwKQotICAgIHsKLSAgICAJd2ViU2VydmljZXNQYXJzZXIgPSBXU0RMUGFyc2VyRmFjdG9yeS5nZXRXU0RMUGFyc2VyKCk7Ci0gICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSB3ZWJTZXJ2aWNlc1BhcnNlci5nZXRXU0RMRGVmaW5pdGlvbih3c2RsVVJJKTsKLSAgICAgIGlmIChkZWZpbml0aW9uICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIE1hcCBzZXJ2aWNlcyA9IGRlZmluaXRpb24uZ2V0U2VydmljZXMoKTsKLSAgICAgICAgZm9yIChJdGVyYXRvciBzZXJ2aWNlc0l0ID0gc2VydmljZXMudmFsdWVzKCkuaXRlcmF0b3IoKTsgc2VydmljZXNJdC5oYXNOZXh0KCk7KQotICAgICAgICB7Ci0gICAgICAgICAgU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2Upc2VydmljZXNJdC5uZXh0KCk7Ci0gICAgICAgICAgTWFwIHBvcnRzID0gc2VydmljZS5nZXRQb3J0cygpOwotICAgICAgICAgIGZvciAoSXRlcmF0b3IgcG9ydHNJdCA9IHBvcnRzLnZhbHVlcygpLml0ZXJhdG9yKCk7IHBvcnRzSXQuaGFzTmV4dCgpOykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBQb3J0IHdzZGxQb3J0ID0gKFBvcnQpcG9ydHNJdC5uZXh0KCk7Ci0gICAgICAgICAgICBMaXN0IGV4dEVsZW1lbnRzID0gd3NkbFBvcnQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICAgICAgICBmb3IgKEl0ZXJhdG9yIGV4dEVsZW1lbnRzSXQgPSBleHRFbGVtZW50cy5pdGVyYXRvcigpOyBleHRFbGVtZW50c0l0Lmhhc05leHQoKTspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dEVsZW1lbnQgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZXh0RWxlbWVudHNJdC5uZXh0KCk7Ci0gICAgICAgICAgICAgIFN0cmluZyBlbmRwb2ludCA9IG51bGw7Ci0gICAgICAgICAgICAgIFVSTCBlbmRwb2ludFVSTCA9IG51bGw7Ci0gICAgICAgICAgICAgIGlmIChleHRFbGVtZW50IGluc3RhbmNlb2YgU09BUEFkZHJlc3MpCi0gICAgICAgICAgICAgICAgZW5kcG9pbnQgPSAoKFNPQVBBZGRyZXNzKWV4dEVsZW1lbnQpLmdldExvY2F0aW9uVVJJKCk7Ci0gICAgICAgICAgICAgIGVsc2UgaWYgKGV4dEVsZW1lbnQgaW5zdGFuY2VvZiBIVFRQQWRkcmVzcykKLSAgICAgICAgICAgICAgICBlbmRwb2ludCA9ICgoSFRUUEFkZHJlc3MpZXh0RWxlbWVudCkuZ2V0TG9jYXRpb25VUkkoKTsKLSAgICAgICAgICAgICAgaWYgKGVuZHBvaW50ICE9IG51bGwpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0cnkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBlbmRwb2ludFVSTCA9IG5ldyBVUkwoZW5kcG9pbnQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIG11cmxlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgaWYgKGVuZHBvaW50VVJMICE9IG51bGwpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgcHJvdG9jb2wgPSBlbmRwb2ludFVSTC5nZXRQcm90b2NvbCgpOwotICAgICAgICAgICAgICAgIFN0cmluZyBob3N0ID0gZW5kcG9pbnRVUkwuZ2V0SG9zdCgpOwotICAgICAgICAgICAgICAgIGludCBwb3J0ID0gZW5kcG9pbnRVUkwuZ2V0UG9ydCgpOwotICAgICAgICAgICAgICAgIGlmIChwb3J0ID09IC0xKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGlmICgiaHR0cCIuZXF1YWxzSWdub3JlQ2FzZShwcm90b2NvbCkpCi0gICAgICAgICAgICAgICAgICAgIHBvcnQgPSA4MDsKLSAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCJodHRwcyIuZXF1YWxzSWdub3JlQ2FzZShwcm90b2NvbCkpCi0gICAgICAgICAgICAgICAgICAgIHBvcnQgPSA0NDM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChwcm90b2NvbCAhPSBudWxsICYmIHByb3RvY29sLnN0YXJ0c1dpdGgoImh0dHAiKSAmJiBob3N0ICE9IG51bGwgJiYgaG9zdC5sZW5ndGgoKSA+IDAgJiYgcG9ydCAhPSAtMSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBJTW9uaXRvciBtID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgIElNb25pdG9yW10gbW9uaXRvcnMgPSBNb25pdG9yQ29yZS5nZXRNb25pdG9ycygpOwotICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPG1vbml0b3JzLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoaG9zdC5lcXVhbHNJZ25vcmVDYXNlKG1vbml0b3JzW2ldLmdldFJlbW90ZUhvc3QoKSkgJiYgcG9ydCA9PSBtb25pdG9yc1tpXS5nZXRSZW1vdGVQb3J0KCkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICBtID0gbW9uaXRvcnNbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGlmIChtID09IG51bGwgJiYgY3JlYXRlKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpbnQgbW9uaXRvcmVkUG9ydCA9IFNvY2tldFV0aWwuZmluZFVudXNlZFBvcnQoNTAwMCwgMTUwMDApOwotICAgICAgICAgICAgICAgICAgICBJTW9uaXRvcldvcmtpbmdDb3B5IG1vbml0b3JXb3JraW5nQ29weSA9IE1vbml0b3JDb3JlLmNyZWF0ZU1vbml0b3IoKTsKLSAgICAgICAgICAgICAgICAgICAgbW9uaXRvcldvcmtpbmdDb3B5LnNldExvY2FsUG9ydChtb25pdG9yZWRQb3J0KTsKLSAgICAgICAgICAgICAgICAgICAgbW9uaXRvcldvcmtpbmdDb3B5LnNldFJlbW90ZUhvc3QoaG9zdCk7Ci0gICAgICAgICAgICAgICAgICAgIG1vbml0b3JXb3JraW5nQ29weS5zZXRSZW1vdGVQb3J0KHBvcnQpOwotICAgICAgICAgICAgICAgICAgICBtb25pdG9yV29ya2luZ0NvcHkuc2V0UHJvdG9jb2woIkhUVFAiKTsKLSAgICAgICAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICBtID0gbW9uaXRvcldvcmtpbmdDb3B5LnNhdmUoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICBJU3RhdHVzIHdhcm5pbmcgPSBTdGF0dXNVdGlscy53YXJuaW5nU3RhdHVzKCBOTFMuYmluZChDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9VTkFCTEVfVE9fU1RBUlRfTU9OSVRPUiwgbmV3IE9iamVjdFtde1N0cmluZy52YWx1ZU9mKHBvcnQpLCBlbmRwb2ludH0pLCB0KTsKLSAgICAgICAgICAgICAgICAgICAgICB0cnkKLSAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW52ICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0KHdhcm5pbmcpOwotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoU3RhdHVzRXhjZXB0aW9uIHNlKQotICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGlmIChtICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgCQlpZiAoIW0uaXNSdW5uaW5nKCkpCi0gICAgICAgICAgICAgICAgICAgICAgCQkJbS5zdGFydCgpOwotICAgICAgICAgICAgICAgICAgICAgIAkJLy8gVXNlIHRoZSBlbmRwb2ludCB0aGF0IG1hdGNoZXMgd2l0aCB0aGUgcHJveHkgdGhlIGV4dGVuc2lvbiBwYXNzZXMgdG8gdXMgaWYgaXQgaXMgc2V0Ci0gICAgICAgICAgICAgICAgICAgICAgCQlpZiAocHJveHlFbmRwb2ludCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgCQkJdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAJCQkJZW5kcG9pbnRVUkwgPSBuZXcgVVJMKHByb3h5RW5kcG9pbnQpOwotICAgICAgICAgICAgICAgICAgICAgIAkJCX0gY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBtdXJsZSkKLSAgICAJCQkgICAgICAgICAgICAgICAgeyAKLSAgICAgICAgICAgICAgICAgICAgICAJCQkJLy8gaWdub3JlIHByb3h5IGVuZHBvaW50IAotICAgIAkJCSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgCQl9Ci0gICAgICAgICAgICAgICAgICAgICAgCQlTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKGVuZHBvaW50VVJMLmdldFByb3RvY29sKCkpOwotICAgICAgICAgICAgICAgICAgICAgIAkJc2IuYXBwZW5kKCI6Ly9sb2NhbGhvc3Q6Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgCQlzYi5hcHBlbmQoU3RyaW5nLnZhbHVlT2YobS5nZXRMb2NhbFBvcnQoKSkpOwotICAgICAgICAgICAgICAgICAgICAgIAkJc2IuYXBwZW5kKGVuZHBvaW50VVJMLmdldEZpbGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgCQllbmRwb2ludHMuYWRkKHNiLnRvU3RyaW5nKCkpOwotICAgIAkJCQkJfQotICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgIElTdGF0dXMgd2FybmluZyA9IFN0YXR1c1V0aWxzLndhcm5pbmdTdGF0dXMoIE5MUy5iaW5kKENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX1VOQUJMRV9UT19TVEFSVF9NT05JVE9SLCBuZXcgT2JqZWN0W117U3RyaW5nLnZhbHVlT2YocG9ydCksIGVuZHBvaW50fSksIHQpOwotICAgICAgICAgICAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbnYgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnQod2FybmluZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChTdGF0dXNFeGNlcHRpb24gc2UpCi0gICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldE1vbml0b3JTZXJ2aWNlKGJvb2xlYW4gbW9uaXRvclNlcnZpY2UpCi0gIHsKLSAgICB0aGlzLm1vbml0b3JTZXJ2aWNlID0gbW9uaXRvclNlcnZpY2U7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXREZWZpbml0aW9uKERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZXNQYXJzZXIoV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXIpCi0gIHsKLSAgICB0aGlzLndlYlNlcnZpY2VzUGFyc2VyID0gd2ViU2VydmljZXNQYXJzZXI7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFdzZGxVUkkoU3RyaW5nIHdzZGxVUkkpCi0gIHsKLSAgICB0aGlzLndzZGxVUkkgPSB3c2RsVVJJOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0Q3JlYXRlKGJvb2xlYW4gY3JlYXRlKQotICB7Ci0gICAgdGhpcy5jcmVhdGUgPSBjcmVhdGU7Ci0gIH0KLQotICBwdWJsaWMgTGlzdCBnZXRFbmRwb2ludHMoKQotICB7Ci0gICAgcmV0dXJuIGVuZHBvaW50czsKLSAgfQotICAKLSAgLyoqCi0gICAqIEBwYXJhbSBwcm94eUVuZHBvaW50IFRoZSBwcm94eUVuZHBvaW50IHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFByb3h5RW5kcG9pbnQoU3RyaW5nIHByb3h5RW5kcG9pbnQpIHsKLSAgCXRoaXMucHJveHlFbmRwb2ludCA9IHByb3h5RW5kcG9pbnQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vSmF2YU1vZlJlZmxlY3Rpb25Db21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL0phdmFNb2ZSZWZsZWN0aW9uQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNWUyOTMxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vSmF2YU1vZlJlZmxlY3Rpb25Db21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uOwotCi0KLS8vY29yZSBzdHVmZgotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuSmF2YUhlbHBlcnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuSmF2YVJlZkZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5uYXR1cmUuRU1GTmF0dXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS53b3JrYmVuY2gudXRpbGl0eS5KZW1Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uQ29uc3VtcHRpb25NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotCi0vKioKLSogVGhpcyBjbGFzcyBpcyB0byBiZSB1c2VkIHRvIEJ1aWxkIHRoZSBkYXRhIG1vZGVsCi0qIGZpcnN0IHdlIGdldCB0aGUgamF2YSBjbGFzcyBhbmQgdGhlbiBidWlsZCB0aGUgbW9kZWwKLSovCi1wdWJsaWMgY2xhc3MgSmF2YU1vZlJlZmxlY3Rpb25Db21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTCA9ICJKYXZhTW9mUmVmbGVjdGlvbkNvbW1hbmQiOyAKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgREVTQ1JJUFRJT04gPSAicmVmbGVjdGlvbiBmb3IgYSBnaXZlbiBjbGFzcyI7IAotICBwdWJsaWMgc3RhdGljIFN0cmluZyBPS19NRVNTQUdFID0gICJUaGUgbW9kZWwgaGFzIGJlZW4gYnVpbHQgIjsgCi0gIHByaXZhdGUgc3RhdGljIFN0cmluZyBKQVZBX0VYVEVOU0lPTiA9ICIuamF2YSI7Ci0gIHByaXZhdGUgc3RhdGljIFN0cmluZyBDTEFTU19FWFRFTlNJT04gPSAiLmNsYXNzIjsKLSAgCi0gIHByaXZhdGUgU3RyaW5nIGNsaWVudFByb2plY3Q7Ci0gIHByaXZhdGUgSmF2YUhlbHBlcnMgamF2YUNsYXNzOwotICBwcml2YXRlIFN0cmluZyBxbmFtZTsKLSAgcHJpdmF0ZSBTdHJpbmcgcHJveHlCZWFuOwotIAotICAvKioKLSAgKiBDb25zdHJ1Y3RzIGEgbmV3IEphdmFNb2ZSZWZsZWN0aW9uQ29tbWFuZCB3aXRoIHRoZSBnaXZlbiBsYWJlbCBhbmQgZGVzY3JpcHRpb24KLSAgKiAKLSAgKi8KLSAgcHVibGljIEphdmFNb2ZSZWZsZWN0aW9uQ29tbWFuZCgpCi0gIHsKLSAgfQotICAKLSAgLy8gc2V0dGVycyBmb3IgdGhpcyBjb21tYW5kCi0gIAotICAgIAotICAvKioKLSAgKiBUaGUgZW5kIHJlc3VsdCBvZiB0aGlzIHdob2xlIHByb2Nlc3MgaXMgdG8gZ2V0IHRoZSBKYXZhIENsYXNzCi0gICovCi0gIHB1YmxpYyBKYXZhSGVscGVycyBnZXRKYXZhQ2xhc3MoKQotICB7Ci0gICAgcmV0dXJuIGphdmFDbGFzczsKLSAgfQotCi0gIAotICBwcml2YXRlIHZvaWQgcHJvY2Vzc1FOYW1lKCkKLSAgewotICAgICAgcW5hbWUgPSBwcm94eUJlYW47Ci0JICBpZiAocW5hbWUudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChKQVZBX0VYVEVOU0lPTikpIHsKLQkJICBxbmFtZSA9IHFuYW1lLnN1YnN0cmluZygwLChxbmFtZS5sZW5ndGgoKSAtNSkpOwotCSAgfQotCSAgaWYgKHFuYW1lLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoQ0xBU1NfRVhURU5TSU9OKSkgewotCQkgIHFuYW1lID0gcW5hbWUuc3Vic3RyaW5nKDAsKHFuYW1lLmxlbmd0aCgpIC02KSk7Ci0JICB9Ci0gICB9Ci0gICAgICAKLSAgLyoqCi0gICogR2V0IHRoZSBqYXZhIG1vZGVsIGZyb20gdGhlIHJlc291cmNlIHRoZW4gCi0gICogYnVpbGQgdGhlIG1vZGVsIGZyb20gdGhlIG1vZgotICAqLwotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgeyAgICAKLSAJICAvL2p1c3QgbWFrZSBzdXJlIHRoZSBwcm9qZWN0IGFuZCBxbmFtZSBhcmUgdGhlcmUKLSAgCS8vdGhleSBhcmUgZXNzZW50aWFsIGZvciB0aGlzIG9wZXJhdGlvbgotICAJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAJSVByb2plY3QgY2xpZW50SVByb2plY3QgPSAoSVByb2plY3QpUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2UoY2xpZW50UHJvamVjdCk7Ci0gIAlwcm9jZXNzUU5hbWUoKTsKLSAgCWlmKGNsaWVudFByb2plY3QgPT0gbnVsbCB8fCBxbmFtZSA9PSBudWxsKQotICAJICByZXR1cm4gU3RhdHVzVXRpbHMud2FybmluZ1N0YXR1cyggQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfV0FSTl9VTkFCTEVfVE9fRklORF9QUk9YWSApOwotICAJCi0gICAgdHJ5IHsKLQkJRU1GTmF0dXJlIG5hdHVyZSA9IEplbVByb2plY3RVdGlsaXRpZXMuZ2V0SkVNX0VNRl9OYXR1cmUoY2xpZW50SVByb2plY3QsIHRydWUpOwotCQlqYXZhQ2xhc3MgPSBKYXZhUmVmRmFjdG9yeS5lSU5TVEFOQ0UucmVmbGVjdFR5cGUocW5hbWUsIG5hdHVyZS5nZXRSZXNvdXJjZVNldCgpKTsKLQl9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQl9Ci0gICAgCi0gICAgcmV0dXJuIHN0YXR1czsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0UHJveHlCZWFuKFN0cmluZyBwcm94eUJlYW4pCi0gIHsKLSAgCXRoaXMucHJveHlCZWFuID0gcHJveHlCZWFuOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50UHJvamVjdChTdHJpbmcgY2xpZW50UHJvamVjdCkKLSAgewotICAJdGhpcy5jbGllbnRQcm9qZWN0ID0gY2xpZW50UHJvamVjdDsKLSAgfQotICAKLSB9CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL01hbmFnZVNlcnZlclN0YXJ0VXBDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL01hbmFnZVNlcnZlclN0YXJ0VXBDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0ZWNlMWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9NYW5hZ2VTZXJ2ZXJTdGFydFVwQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLkNvbnN1bXB0aW9uTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlByb2dyZXNzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjsKLQotcHVibGljIGNsYXNzIE1hbmFnZVNlcnZlclN0YXJ0VXBDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLQotCXByaXZhdGUgQm9vbGVhbiBpc1N0YXJ0U2VydmljZUVuYWJsZWRfOwotCXByaXZhdGUgQm9vbGVhbiBpc1Rlc3RTZXJ2aWNlRW5hYmxlZF87Ci0JCi0JcHJpdmF0ZSBJUHJvamVjdCBzZXJ2aWNlUHJvamVjdF87Ci0JcHJpdmF0ZSBTdHJpbmcgc2VydmljZVNlcnZlclR5cGVJZF87Ci0JcHJpdmF0ZSBJU2VydmVyIHNlcnZpY2VFeGlzdGluZ1NlcnZlcl87Ci0JCi0JcHJpdmF0ZSBJUHJvamVjdCBzYW1wbGVQcm9qZWN0XzsKLQlwcml2YXRlIFN0cmluZyBzYW1wbGVTZXJ2ZXJUeXBlSWRfOwotCXByaXZhdGUgSVNlcnZlciBzYW1wbGVFeGlzdGluZ1NlcnZlcl87Ci0JCi0JcHJpdmF0ZSBib29sZWFuIGlzV2ViUHJvamVjdFN0YXJ0dXBSZXF1ZXN0ZWRfOwotCi0JLyoqCi0JICogRGVmYXVsdCBDVE9SOwotCSAqLwotCXB1YmxpYyBNYW5hZ2VTZXJ2ZXJTdGFydFVwQ29tbWFuZCggKSB7Ci0KLQl9Ci0JCi0JLyoqCi0JICogRXhlY3V0ZSB0aGUgY29tbWFuZAotCSAqLwotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgewotICAgICAgSUVudmlyb25tZW50IGVudiA9IGdldEVudmlyb25tZW50KCk7Ci0JICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLQkgICAgUHJvZ3Jlc3NVdGlscy5yZXBvcnQobW9uaXRvciwgQ29uc3VtcHRpb25NZXNzYWdlcy5QUk9HUkVTU19JTkZPX1NUQVJUX1dFQl9QUk9KRUNUKTsKLQkgCi0JICAgIGlmIChpc1N0YXJ0U2VydmljZUVuYWJsZWRfLmJvb2xlYW5WYWx1ZSgpICYmIHNlcnZpY2VFeGlzdGluZ1NlcnZlcl8hPW51bGwpewotCSAgICAJLy9TeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxpbmcgc2VydmljZSBzZXJ2ZXIgc3RhcnQ6ICIrc2VydmljZVByb2plY3RfKyIgICIrc2VydmljZVNlcnZlclR5cGVJZF8pOwotCSAgICAJU3RhcnRQcm9qZWN0Q29tbWFuZCBzcGMgPSBuZXcgU3RhcnRQcm9qZWN0Q29tbWFuZCggKTsKLQkgICAgCXNwYy5zZXRTZXJ2aWNlUHJvamVjdChzZXJ2aWNlUHJvamVjdF8pOwotCSAgICAJc3BjLnNldFNlcnZpY2VTZXJ2ZXJUeXBlSUQoc2VydmljZVNlcnZlclR5cGVJZF8pOwotCSAgICAJc3BjLnNldFNlcnZpY2VFeGlzdGluZ1NlcnZlcihzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXJfKTsKLQkgICAgCXNwYy5zZXRJc1dlYlByb2plY3RTdGFydHVwUmVxdWVzdGVkKGlzV2ViUHJvamVjdFN0YXJ0dXBSZXF1ZXN0ZWRfKTsKLQkgICAgCXNwYy5zZXRFbnZpcm9ubWVudCggZW52ICk7Ci0JICAgIAlzcGMuZXhlY3V0ZSggbnVsbCwgbnVsbCApOwotCSAgICB9Ci0JICAgIAotCSAgICBpZihpc1Rlc3RTZXJ2aWNlRW5hYmxlZF8uYm9vbGVhblZhbHVlKCkmJiBzYW1wbGVFeGlzdGluZ1NlcnZlcl8hPW51bGwgJiYgc2VydmljZUV4aXN0aW5nU2VydmVyXyE9bnVsbCAmJiAhc2FtcGxlRXhpc3RpbmdTZXJ2ZXJfLmVxdWFscyhzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXJfKSl7Ci0JICAgIAkvL1N5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGluZyBjbGllbnQgc2VydmVyIHN0YXJ0OiAiK3NhbXBsZVByb2plY3RfKyIgICIrc2FtcGxlRXhpc3RpbmdTZXJ2ZXJfXyk7Ci0JICAgIAlTdGFydFByb2plY3RDb21tYW5kIHNwYyA9IG5ldyBTdGFydFByb2plY3RDb21tYW5kKCApOwotCSAgICAJc3BjLnNldFNhbXBsZVByb2plY3Qoc2FtcGxlUHJvamVjdF8pOwotCSAgICAJc3BjLnNldFNhbXBsZVNlcnZlclR5cGVJRChzYW1wbGVTZXJ2ZXJUeXBlSWRfKTsKLQkgICAgCXNwYy5zZXRTYW1wbGVFeGlzdGluZ1NlcnZlcihzYW1wbGVFeGlzdGluZ1NlcnZlcl8pOwotCSAgICAJc3BjLnNldENyZWF0aW9uU2NlbmFyaW8obmV3IEJvb2xlYW4oImZhbHNlIikpOwotCSAgICAJc3BjLnNldEVudmlyb25tZW50KCBlbnYgKTsKLQkgICAgCXNwYy5leGVjdXRlKCBudWxsLCBudWxsICk7CSAgICAJCi0JICAgIH0KLQkgICAgCi0JICAgIHJldHVybiBzdGF0dXM7Ci0JfQotCQotCS8qKgotCSAqIEBwYXJhbSBpc1N0YXJ0U2VydmljZUVuYWJsZWQgVGhlIGlzU3RhcnRTZXJ2aWNlRW5hYmxlZCB0byBzZXQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0U3RhcnRTZXJ2aWNlKEJvb2xlYW4gaXNTdGFydFNlcnZpY2VFbmFibGVkKSB7Ci0JCXRoaXMuaXNTdGFydFNlcnZpY2VFbmFibGVkXyA9IGlzU3RhcnRTZXJ2aWNlRW5hYmxlZDsKLQl9Ci0JLyoqCi0JICogQHBhcmFtIGlzVGVzdFNlcnZpY2VFbmFibGVkIFRoZSBpc1Rlc3RTZXJ2aWNlRW5hYmxlZCB0byBzZXQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0VGVzdFNlcnZpY2UoQm9vbGVhbiBpc1Rlc3RTZXJ2aWNlRW5hYmxlZCkgewotCQl0aGlzLmlzVGVzdFNlcnZpY2VFbmFibGVkXyA9IGlzVGVzdFNlcnZpY2VFbmFibGVkOwotCX0KLQkvKioKLQkgKiBAcGFyYW0gc2VydmljZUV4aXN0aW5nU2VydmVyIFRoZSBzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIgdG8gc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHNldFNlcnZpY2VFeGlzdGluZ1NlcnZlcihJU2VydmVyIHNlcnZpY2VFeGlzdGluZ1NlcnZlcikgewotCQl0aGlzLnNlcnZpY2VFeGlzdGluZ1NlcnZlcl8gPSBzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXI7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHNlcnZpY2VTZXJ2ZXJUeXBlSWQgVGhlIHNlcnZpY2VTZXJ2ZXJUeXBlSWQgdG8gc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHNldFNlcnZpY2VTZXJ2ZXJUeXBlSWQoU3RyaW5nIHNlcnZpY2VTZXJ2ZXJUeXBlSWQpIHsKLQkJdGhpcy5zZXJ2aWNlU2VydmVyVHlwZUlkXyA9IHNlcnZpY2VTZXJ2ZXJUeXBlSWQ7Ci0JfQotCS8qKgotCSAqIEBwYXJhbSBzZXJ2aWNlUHJvamVjdCBUaGUgc2VydmljZVByb2plY3QgdG8gc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHNldFNlcnZpY2VQcm9qZWN0KElQcm9qZWN0IHNlcnZpY2VQcm9qZWN0KSB7Ci0JCXRoaXMuc2VydmljZVByb2plY3RfID0gc2VydmljZVByb2plY3Q7Ci0JfQotCQotCS8qKgotCSAqIEBwYXJhbSBzYW1wbGVFeGlzdGluZ1NlcnZlciBUaGUgc2FtcGxlRXhpc3RpbmdTZXJ2ZXIgdG8gc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHNldFNhbXBsZUV4aXN0aW5nU2VydmVyKElTZXJ2ZXIgc2FtcGxlRXhpc3RpbmdTZXJ2ZXIpIHsKLQkJdGhpcy5zYW1wbGVFeGlzdGluZ1NlcnZlcl8gPSBzYW1wbGVFeGlzdGluZ1NlcnZlcjsKLQl9Ci0JLyoqCi0JICogQHBhcmFtIHNhbXBsZVByb2plY3QgVGhlIHNhbXBsZVByb2plY3QgdG8gc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHNldFNhbXBsZVByb2plY3QoSVByb2plY3Qgc2FtcGxlUHJvamVjdCkgewotCQl0aGlzLnNhbXBsZVByb2plY3RfID0gc2FtcGxlUHJvamVjdDsKLQl9Ci0JLyoqCi0JICogQHBhcmFtIHNhbXBsZVNlcnZlclR5cGVJZCBUaGUgc2FtcGxlU2VydmVyVHlwZUlkIHRvIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRTYW1wbGVTZXJ2ZXJUeXBlSWQoU3RyaW5nIHNhbXBsZVNlcnZlclR5cGVJZCkgewotCQl0aGlzLnNhbXBsZVNlcnZlclR5cGVJZF8gPSBzYW1wbGVTZXJ2ZXJUeXBlSWQ7Ci0JfQkKLQkKLQkvKioKLQkgKiBAcGFyYW0gaXNSZXN0YXJ0UHJvamVjdE5lZWRlZCBUaGUgaXNSZXN0YXJ0UHJvamVjdE5lZWRlZCB0byBzZXQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0SXNXZWJQcm9qZWN0U3RhcnR1cFJlcXVlc3RlZChib29sZWFuIGlzUmVzdGFydFByb2plY3ROZWVkZWQpIHsKLQkJdGhpcy5pc1dlYlByb2plY3RTdGFydHVwUmVxdWVzdGVkXyA9IGlzUmVzdGFydFByb2plY3ROZWVkZWQ7Ci0JfQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vUmVzdG9yZUJ1aWxkU3RhdGVDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL1Jlc3RvcmVCdWlsZFN0YXRlQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYTE1MjM4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vUmVzdG9yZUJ1aWxkU3RhdGVDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb247Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLkNvbnN1bXB0aW9uTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC52YWxpZGF0ZS5WYWxpZGF0aW9uTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uUHJvZ3Jlc3NVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi0KLXB1YmxpYyBjbGFzcyBSZXN0b3JlQnVpbGRTdGF0ZUNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotCi0gIHByaXZhdGUgVmFsaWRhdGlvbk1hbmFnZXIgbWFuYWdlcl87Ci0gIAotICAvKioKLSAgICogRGVmYXVsdCBDVE9SOwotICAgKi8KLSAgcHVibGljIFJlc3RvcmVCdWlsZFN0YXRlQ29tbWFuZCgpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBFeGVjdXRlIHRoZSBjb21tYW5kCi0gICAqLwotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgewotICAgIFByb2dyZXNzVXRpbHMucmVwb3J0KCBtb25pdG9yLCBDb25zdW1wdGlvbk1lc3NhZ2VzLlRBU0tfREVTQ19XRUJTRVJWSUNFX1JFU1RPUkVfQlVJTEQpOwotCi0gICAgbWFuYWdlcl8ucmVzdG9yZUF1dG9CdWlsZCgpOwotCi0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLSAgICAKLSAgLyoqCi0gICAqIEBwYXJhbSBtYW5hZ2VyXyBUaGUgbWFuYWdlcl8gdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VmFsaWRhdGlvbk1hbmFnZXIoVmFsaWRhdGlvbk1hbmFnZXIgbWFuYWdlcikgewotICAgIHRoaXMubWFuYWdlcl8gPSBtYW5hZ2VyOwotICB9Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vUmVzdG9yZVZhbGlkYXRpb25TdGF0ZUNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbWFuZC9jb21tb24vUmVzdG9yZVZhbGlkYXRpb25TdGF0ZUNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjdlOTdmNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL1Jlc3RvcmVWYWxpZGF0aW9uU3RhdGVDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb247Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLkNvbnN1bXB0aW9uTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC52YWxpZGF0ZS5WYWxpZGF0aW9uTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uUHJvZ3Jlc3NVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi0KLXB1YmxpYyBjbGFzcyBSZXN0b3JlVmFsaWRhdGlvblN0YXRlQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIAotewotICBwcml2YXRlIFZhbGlkYXRpb25NYW5hZ2VyIG1hbmFnZXJfOwotICAKLSAgcHJpdmF0ZSBib29sZWFuIHJ1blZhbGlkYXRpb25fOwotCi0gIC8qKgotICAgKiBEZWZhdWx0IENUT1I7Ci0gICAqLwotICBwdWJsaWMgUmVzdG9yZVZhbGlkYXRpb25TdGF0ZUNvbW1hbmQoIGJvb2xlYW4gcnVuVmFsaWRhdGlvbiApCi0gIHsKLSAgICBydW5WYWxpZGF0aW9uXyA9IHJ1blZhbGlkYXRpb247Ci0gIH0KLQotICAvKioKLSAgICogRXhlY3V0ZSB0aGUgY29tbWFuZAotICAgKi8KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLSAgICBQcm9ncmVzc1V0aWxzLnJlcG9ydCggbW9uaXRvciwgQ29uc3VtcHRpb25NZXNzYWdlcy5UQVNLX0RFU0NfV0VCU0VSVklDRV9SRVNUT1JFX1ZBTElEQVRJT04pOwotCi0gICAgbWFuYWdlcl8ucmVzdG9yZVZhbGlkYXRpb25Gb3JQcm9qZWN0cyggcnVuVmFsaWRhdGlvbl8gKTsgICAgCi0KLSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotICAgIAotICAvKioKLSAgICogQHBhcmFtIG1hbmFnZXIgVGhlIHZhbGlkYXRpb24gbWFuYWdlciB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRWYWxpZGF0aW9uTWFuYWdlcihWYWxpZGF0aW9uTWFuYWdlciBtYW5hZ2VyKSB7Ci0gICAgdGhpcy5tYW5hZ2VyXyA9IG1hbmFnZXI7Ci0gIH0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tYW5kL2NvbW1vbi9TdGFydFByb2plY3RDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL1N0YXJ0UHJvamVjdENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzc0YTBmMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1hbmQvY29tbW9uL1N0YXJ0UHJvamVjdENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU2VydmVyVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLkNvbnN1bXB0aW9uTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbi5XZWJTZXJ2aWNlU3RhcnRTZXJ2ZXJSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uUHJvZ3Jlc3NVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjsKLQotcHVibGljIGNsYXNzIFN0YXJ0UHJvamVjdENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiAKLXsKLQotcHJpdmF0ZSBCb29sZWFuIGNyZWF0aW9uU2NlbmFyaW9fID0gQm9vbGVhbi5UUlVFOwotCi1wcml2YXRlIGJvb2xlYW4gaXNXZWJQcm9qZWN0U3RhcnR1cFJlcXVlc3RlZF87Ci1wcml2YXRlIElQcm9qZWN0IHNlcnZpY2VQcm9qZWN0XzsKLXByaXZhdGUgSVByb2plY3Qgc2FtcGxlUHJvamVjdF87Ci1wcml2YXRlIFN0cmluZyBzZXJ2aWNlU2VydmVyVHlwZUlEXzsKLXByaXZhdGUgU3RyaW5nIHNhbXBsZVNlcnZlclR5cGVJRF87Ci1wcml2YXRlIElTZXJ2ZXIgc2VydmljZUV4aXN0aW5nU2VydmVyXzsKLXByaXZhdGUgSVNlcnZlciBzYW1wbGVFeGlzdGluZ1NlcnZlcl87Ci0KLQotLyoqCi0gKiBEZWZhdWx0IENUT1I7Ci0gKi8KLXB1YmxpYyBTdGFydFByb2plY3RDb21tYW5kKCApIHsKLQotfQotCi0vKioKLSAqIERlZmF1bHQgQ1RPUjsKLSAqLwotcHVibGljIFN0YXJ0UHJvamVjdENvbW1hbmQoYm9vbGVhbiBjcmVhdGlvblNjZW5hcmlvICkgewotCWNyZWF0aW9uU2NlbmFyaW9fID0gbmV3IEJvb2xlYW4oY3JlYXRpb25TY2VuYXJpbyk7Ci19Ci0KLS8qKgotICogRXhlY3V0ZSB0aGUgY29tbWFuZAotICovCi1wdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLXsKLSAgICBJRW52aXJvbm1lbnQgZW52ID0gZ2V0RW52aXJvbm1lbnQoKTsgICAgCi0gIAotICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICBQcm9ncmVzc1V0aWxzLnJlcG9ydCggbW9uaXRvciwgQ29uc3VtcHRpb25NZXNzYWdlcy5QUk9HUkVTU19JTkZPX1NUQVJUX1dFQl9QUk9KRUNUKTsKLSAgICAKLSAgICAKLSAgICBJUHJvamVjdCBwcm9qZWN0ID0gKChjcmVhdGlvblNjZW5hcmlvXy5ib29sZWFuVmFsdWUoKSkgPyBzZXJ2aWNlUHJvamVjdF8gOiBzYW1wbGVQcm9qZWN0Xyk7Ci0gICAgU3RyaW5nIHNlcnZlclR5cGVJRCA9ICgoY3JlYXRpb25TY2VuYXJpb18uYm9vbGVhblZhbHVlKCkpID8gc2VydmljZVNlcnZlclR5cGVJRF8gOiBzYW1wbGVTZXJ2ZXJUeXBlSURfKTsKLSAgICBJU2VydmVyIHNlcnZlciA9ICgoY3JlYXRpb25TY2VuYXJpb18uYm9vbGVhblZhbHVlKCkpID8gc2VydmljZUV4aXN0aW5nU2VydmVyXyA6IHNhbXBsZUV4aXN0aW5nU2VydmVyXyk7ICAgCi0gICAgaWYgKHNlcnZlclR5cGVJRCA9PSBudWxsICYmIHNlcnZlciE9bnVsbCkgewotICAgIAlzZXJ2ZXJUeXBlSUQgPSBzZXJ2ZXIuZ2V0U2VydmVyVHlwZSgpLmdldElkKCk7Ci0gICAgfQotICAgIGlmIChwcm9qZWN0ID09IG51bGwpCi0gICAgewotICAgICAgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX1BST0pFQ1RfTk9UX0ZPVU5EICk7ICAKLSAgICAgIGVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQkKLSAgICBJU2VydmVyIGluc3RhbmNlID0gU2VydmVyVXRpbHMuZ2V0U2VydmVyRm9yTW9kdWxlKFNlcnZlclV0aWxzLmdldE1vZHVsZShwcm9qZWN0KSwgc2VydmVyVHlwZUlELCBzZXJ2ZXIsIHRydWUsIG1vbml0b3IgKTsKLSAgICBpZiAoaW5zdGFuY2UgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfSU5TVEFOQ0VfTk9UX0ZPVU5EICk7Ci0gICAgICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0KLQotICAgdHJ5Ci0gICAJewotICAgCQlBYnN0cmFjdFN0YXJ0U2VydmVyIHN0YXJ0U2VydmVyQ29tbWFuZCA9IG51bGw7Ci0gICAJCVdlYlNlcnZpY2VTdGFydFNlcnZlclJlZ2lzdHJ5IHJlZyA9IFdlYlNlcnZpY2VTdGFydFNlcnZlclJlZ2lzdHJ5LmdldEluc3RhbmNlKCk7Ci0gICAgIAlzdGFydFNlcnZlckNvbW1hbmQgPSAoQWJzdHJhY3RTdGFydFNlcnZlcilyZWcuZ2V0U2VydmVyU3RhcnRCeVR5cGVJZChpbnN0YW5jZS5nZXRTZXJ2ZXJUeXBlKCkuZ2V0SWQoKSk7Ci0gICAgCXN0YXJ0U2VydmVyQ29tbWFuZC5TdGFydFNlcnZlcihwcm9qZWN0LCBpbnN0YW5jZSwgbW9uaXRvciwgaXNXZWJQcm9qZWN0U3RhcnR1cFJlcXVlc3RlZF8pOwotICAgIAlyZXR1cm4gc3RhdHVzOwotICAgCX0KLSAgY2F0Y2ggKENvcmVFeGNlcHRpb24gY2UgKQotICAJewotICAgIAlJU3RhdHVzIGVtYmVkZGVkU3RhdHVzID0gY2UuZ2V0U3RhdHVzKCk7Ci0gICAgCXN0YXR1cyA9IGVtYmVkZGVkU3RhdHVzOwotICAgIAllbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gIAkJcmV0dXJuIHN0YXR1czsKLSAgCX0KLSAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgIAl7Ci0gICAgICAgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX1NFUlZFUiwgZSk7Ci0gICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgCSAgIHJldHVybiBzdGF0dXM7Ci0gICAJfQotICAgCi19Ci0KLXB1YmxpYyB2b2lkIHNldENyZWF0aW9uU2NlbmFyaW8oQm9vbGVhbiBjcmVhdGlvblNjZW5hcmlvKQotewotCWNyZWF0aW9uU2NlbmFyaW9fID0gY3JlYXRpb25TY2VuYXJpbzsKLX0KLQotcHVibGljIHZvaWQgc2V0U2VydmljZVByb2plY3QoSVByb2plY3Qgc2VydmljZVByb2plY3QpCi17Ci0gIHNlcnZpY2VQcm9qZWN0XyA9IHNlcnZpY2VQcm9qZWN0OwotfQotCi1wdWJsaWMgdm9pZCBzZXRTYW1wbGVQcm9qZWN0KElQcm9qZWN0IHNhbXBsZVByb2plY3QpCi17Ci0gIHNhbXBsZVByb2plY3RfID0gc2FtcGxlUHJvamVjdDsKLX0KLQotcHVibGljIHZvaWQgc2V0U2VydmljZVNlcnZlclR5cGVJRChTdHJpbmcgc2VydmljZVNlcnZlclR5cGVJRCkKLXsKLSAgc2VydmljZVNlcnZlclR5cGVJRF8gPSBzZXJ2aWNlU2VydmVyVHlwZUlEOwotfQotCi1wdWJsaWMgdm9pZCBzZXRTYW1wbGVTZXJ2ZXJUeXBlSUQoU3RyaW5nIHNhbXBsZVNlcnZlclR5cGVJRCkKLXsKLSAgc2FtcGxlU2VydmVyVHlwZUlEXyA9IHNhbXBsZVNlcnZlclR5cGVJRDsKLX0KLQotcHVibGljIHZvaWQgc2V0U2VydmljZUV4aXN0aW5nU2VydmVyKElTZXJ2ZXIgc2VydmljZUV4aXN0aW5nU2VydmVyKQotewotICBzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXJfID0gc2VydmljZUV4aXN0aW5nU2VydmVyOwotICBpZiAoc2VydmljZUV4aXN0aW5nU2VydmVyXyAhPSBudWxsKQotICAgIHNldFNlcnZpY2VTZXJ2ZXJUeXBlSUQoc2VydmljZUV4aXN0aW5nU2VydmVyXy5nZXRTZXJ2ZXJUeXBlKCkuZ2V0SWQoKSk7Ci19Ci0KLXB1YmxpYyB2b2lkIHNldFNhbXBsZUV4aXN0aW5nU2VydmVyKElTZXJ2ZXIgc2FtcGxlRXhpc3RpbmdTZXJ2ZXIpCi17Ci0gIHNhbXBsZUV4aXN0aW5nU2VydmVyXyA9IHNhbXBsZUV4aXN0aW5nU2VydmVyOwotICBpZiAoc2FtcGxlRXhpc3RpbmdTZXJ2ZXJfICE9IG51bGwpCi0gICAgc2V0U2FtcGxlU2VydmVyVHlwZUlEKHNhbXBsZUV4aXN0aW5nU2VydmVyXy5nZXRTZXJ2ZXJUeXBlKCkuZ2V0SWQoKSk7Ci19Ci0KLXB1YmxpYyB2b2lkIHNldElzV2ViUHJvamVjdFN0YXJ0dXBSZXF1ZXN0ZWQoYm9vbGVhbiB3ZWJQcm9qZWN0U3RhcnR1cFJlcXVlc3RlZCkKLXsKLSAgaXNXZWJQcm9qZWN0U3RhcnR1cFJlcXVlc3RlZF8gPSB3ZWJQcm9qZWN0U3RhcnR1cFJlcXVlc3RlZDsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tb24vRmFjZXRNYXRjaGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1vbi9GYWNldE1hdGNoZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjZmZDJlNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1vbi9GYWNldE1hdGNoZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1wdWJsaWMgY2xhc3MgRmFjZXRNYXRjaGVyCi17Ci0gIHByaXZhdGUgYm9vbGVhbiBtYXRjaDsKLSAgcHJpdmF0ZSBTZXQgZmFjZXRzVGVzdGVkOwotICBwcml2YXRlIFNldCBmYWNldHNUaGF0TWF0Y2hlZDsKLSAgcHJpdmF0ZSBTZXQgZmFjZXRzVG9BZGQ7Ci0gIAotICBwdWJsaWMgU2V0IGdldEZhY2V0c1RoYXRNYXRjaGVkKCkKLSAgewotICAgIHJldHVybiBmYWNldHNUaGF0TWF0Y2hlZDsKLSAgfQotICBwdWJsaWMgdm9pZCBzZXRGYWNldHNUaGF0TWF0Y2hlZChTZXQgZmFjZXRzVGhhdE1hdGNoZWQpCi0gIHsKLSAgICB0aGlzLmZhY2V0c1RoYXRNYXRjaGVkID0gZmFjZXRzVGhhdE1hdGNoZWQ7Ci0gIH0KLSAgcHVibGljIFNldCBnZXRGYWNldHNUb0FkZCgpCi0gIHsKLSAgICByZXR1cm4gZmFjZXRzVG9BZGQ7Ci0gIH0KLSAgcHVibGljIHZvaWQgc2V0RmFjZXRzVG9BZGQoU2V0IGZhY2V0c1RvQWRkKQotICB7Ci0gICAgdGhpcy5mYWNldHNUb0FkZCA9IGZhY2V0c1RvQWRkOwotICB9Ci0gIHB1YmxpYyBib29sZWFuIGlzTWF0Y2goKQotICB7Ci0gICAgcmV0dXJuIG1hdGNoOwotICB9Ci0gIHB1YmxpYyB2b2lkIHNldE1hdGNoKGJvb2xlYW4gbWF0Y2gpCi0gIHsKLSAgICB0aGlzLm1hdGNoID0gbWF0Y2g7Ci0gIH0KLSAgcHVibGljIFNldCBnZXRGYWNldHNUZXN0ZWQoKQotICB7Ci0gICAgcmV0dXJuIGZhY2V0c1Rlc3RlZDsKLSAgfQotICBwdWJsaWMgdm9pZCBzZXRGYWNldHNUZXN0ZWQoU2V0IGZhY2V0c1Rlc3RlZCkKLSAgewotICAgIHRoaXMuZmFjZXRzVGVzdGVkID0gZmFjZXRzVGVzdGVkOwotICB9Ci0gIAotICAKLQotICAKLSAgCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbW9uL0ZhY2V0U2V0c0J5VGVtcGxhdGVDYWNoZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tb24vRmFjZXRTZXRzQnlUZW1wbGF0ZUNhY2hlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkNjUzNWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tb24vRmFjZXRTZXRzQnlUZW1wbGF0ZUNhY2hlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMTMxIDEyMTA3MSAgIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lciAoY3JlYXRpb24pCi0gKiAyMDA2MDQyNyAgIDEyNjc4MCByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDcwNDAyIDE1MTk0MyAgIHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5JRmFjZXRlZFByb2plY3RUZW1wbGF0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5JUHJvamVjdEZhY2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLklQcm9qZWN0RmFjZXRWZXJzaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLlByb2plY3RGYWNldHNNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLlZlcnNpb25Gb3JtYXRFeGNlcHRpb247Ci0KLQotLyoqCi0gKiBGYWNldFNldHNCeVRlbXBsYXRlQ2FjaGUgY2FjaGVzIHRoZSBzZXRzIG9mIGZhY2V0IHZlcnNpb24gY29tYmluYXRpb25zIGZvciB0ZW1wbGF0ZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBGYWNldFNldHNCeVRlbXBsYXRlQ2FjaGUKLXsKLSAgLy8gc2luZ2xlIGluc3RhbmNlIHBlciB3b3JrYmVuY2gKLSAgcHJpdmF0ZSBzdGF0aWMgRmFjZXRTZXRzQnlUZW1wbGF0ZUNhY2hlIGluc3RhbmNlXzsKLSAgCi0gIC8vZmFjZXRTZXRzQnlUZW1wbGF0ZUlkXzogCi0gIC8va2V5OiBPYmplY3Qgb2YgdHlwZSBTdHJpbmcuIFN0cmluZyBpZCBvZiBhbiBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZS4KLSAgLy92YWx1ZTogT2JqZWN0IG9mIFNldFtdLiBBbiBhcnJheSBvZiBTZXRzIHdoZXJlIGVhY2ggc2V0IGNvbnRhaW5zIGVsZW1lbnRzIG9mIHR5cGUgSVByb2plY3RGYWNldFZlcnNpb24uCi0gIHByaXZhdGUgSGFzaHRhYmxlIGZhY2V0U2V0c0J5VGVtcGxhdGVJZF87Ci0gIC8qKgotICAgKiBSZXR1cm5zIGEgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MuCi0gICAqIAotICAgKiBAcmV0dXJuIEEgc2luZ2xldG9uIEZhY2V0U2V0c0J5VGVtcGxhdGVDYWNoZSBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHN5bmNocm9uaXplZCBGYWNldFNldHNCeVRlbXBsYXRlQ2FjaGUgZ2V0SW5zdGFuY2UoKQotICB7Ci0gICAgaWYgKGluc3RhbmNlXyA9PSBudWxsKQotICAgIHsKLSAgICAgIGluc3RhbmNlXyA9IG5ldyBGYWNldFNldHNCeVRlbXBsYXRlQ2FjaGUoKTsKLSAgICAgIGluc3RhbmNlXy5sb2FkKCk7Ci0gICAgfQotICAgIHJldHVybiBpbnN0YW5jZV87Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBsb2FkKCkKLSAgewotICAgIGZhY2V0U2V0c0J5VGVtcGxhdGVJZF8gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gIH0gIAotICAKLSAgLyoqCi0gICAqIFJldHVybnMgYWxsIHRoZSB2YWxpZCBmYWNldCB2ZXJzaW9uIGNvbWJpbmF0aW9ucyB0aGF0IGNhbiBiZSBkZXJpdmVkIGZyb20gdGhlIGZpeGVkIGZhY2V0cwotICAgKiBvZiB0aGUgZ2l2ZW4gdGVtcGxhdGUuIEZvciBleGFtcGxlLCBpZiB0aGUgdGVtcGxhdGUgaGFzIHR3byBmaXhlZCBmYWNldHMsIEEgYW5kIEIsCi0gICAqIGFuZCBBIGhhcyB2ZXJzaW9ucyAxLjAgYW5kIDIuMCwgQiBoYXMgdmVyc2lvbnMgMS4xLCAyLjEsCi0gICAqIHRoZSBmb2xsb3dpbmcgYXJyYXkgb2YgU2V0cyB3aWxsIGJlIHJldHVybmVkIChhc3N1bWluZyBmb3IgdGhlIHNha2Ugb2YgdGhlIGV4YW1wbGUKLSAgICogdGhhdCBhbGwgdGhlIGNvbWJpbmF0aW9ucyBhcmUgdmFsaWQpOjxici8+Ci0gICAqIHtTZXQxLCBTZXQyLCBTZXQzLCBTZXQ0fSwgd2hlcmU8YnIvPgotICAgKiBTZXQxID0gW0ExLjAsIEIxLjFdPGJyLz4KLSAgICogU2V0MiA9IFtBMi4wLCBCMS4xXTxici8+Ci0gICAqIFNldDMgPSBbQTEuMCwgQjIuMV08YnIvPgotICAgKiBTZXQ0ID0gW0EyLjAsIEIyLjFdPGJyLz4KLSAgICogPGJyLz4KLSAgICogQHBhcmFtIHRlbXBsYXRlSWQgaWQgb2YgYW4ge0BsaW5rIElGYWNldGVkUHJvamVjdFRlbXBsYXRlfQotICAgKiBAcmV0dXJuIFNldFtdIEFuIGFycmF5IG9mIFNldHMgd2hlcmUgZWFjaCBzZXQgY29udGFpbnMgZWxlbWVudHMgb2YgdHlwZSB7QGxpbmsgSVByb2plY3RGYWNldFZlcnNpb259LgotICAgKi8KLSAgcHVibGljIHN5bmNocm9uaXplZCBTZXRbXSBnZXRGYWNldFZlcnNpb25Db21iaW5hdGlvbnNGcm9tVGVtcGxhdGUoU3RyaW5nIHRlbXBsYXRlSWQpCi0gIHsKLQkvL1JldHVybiB0aGUgY2FjaGVkIGNvbWJpbmF0aW9ucyBpZiBwcmVzZW50LgotICAgIFNldFtdIGNhY2hlZENvbWJpbmF0aW9ucyA9IChTZXRbXSlmYWNldFNldHNCeVRlbXBsYXRlSWRfLmdldCh0ZW1wbGF0ZUlkKTsKLSAgICBpZiAoY2FjaGVkQ29tYmluYXRpb25zICE9IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIGNhY2hlZENvbWJpbmF0aW9uczsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLQotICAgICAgLy9Db21iaW5hdGlvbnMgaGF2ZSBub3QgeWV0IGJlZW4gY2FjaGVkIGZvciB0aGUgZ2l2ZW4gdGVtcGxhdGUuIAotICAgICAgLy9EZXRlcm1pbmUgdGhlIGNvbWJpbmF0aW9ucyBhbmQgY2FjaGUgdGhlbS4KLSAgICAgIElGYWNldGVkUHJvamVjdFRlbXBsYXRlIHRlbXBsYXRlID0gUHJvamVjdEZhY2V0c01hbmFnZXIuZ2V0VGVtcGxhdGUodGVtcGxhdGVJZCk7Ci0gICAgICBTZXQgZml4ZWRGYWNldHMgPSB0ZW1wbGF0ZS5nZXRGaXhlZFByb2plY3RGYWNldHMoKTsKLSAgICAgIAotICAgICAgLy9DcmVhdGUgYW4gYXJyYXkgb2YgYXJyYXlzLiBFYWNoIGVsZW1lbnQgb2YgdGhlIGFycmF5IHdpbGwgY29udGFpbiB0aGUgYXJyYXkKLSAgICAgIC8vb2YgSVByb2plY3RGYWNldFZlcnNpb25zIGZvciBlYWNoIElQcm9qZWN0RmFjZXQgaW4gdGhlIHNldCBvZiBmaXhlZCBmYWNldHMuCi0gICAgICBJdGVyYXRvciBpdHIgPSBmaXhlZEZhY2V0cy5pdGVyYXRvcigpOwotICAgICAgQXJyYXlMaXN0IHByb2plY3RGYWNldFZlcnNpb25BcnJheXMgPSBuZXcgQXJyYXlMaXN0KCk7ICAgICAgCi0KLSAgICAgIHdoaWxlIChpdHIuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBJUHJvamVjdEZhY2V0IGZhY2V0ID0gKElQcm9qZWN0RmFjZXQpIGl0ci5uZXh0KCk7Ci0gICAgICAgIExpc3QgdmVyc2lvbnMgPSBudWxsOwotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIC8vIEdldCB0aGUgZmFjZXQgdmVyc2lvbnMgaW4gYXNjZW5kaW5nIG9yZGVyLgotICAgICAgICAgIHZlcnNpb25zID0gZmFjZXQuZ2V0U29ydGVkVmVyc2lvbnModHJ1ZSk7Ci0gICAgICAgIH0gY2F0Y2ggKFZlcnNpb25Gb3JtYXRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgU2V0IHZlcnNpb25TZXQgPSBmYWNldC5nZXRWZXJzaW9ucygpOwotICAgICAgICAgICAgSXRlcmF0b3IgdmVyc2lvblNldEl0ciA9IHZlcnNpb25TZXQuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgIHZlcnNpb25zID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICAgICAgd2hpbGUgKHZlcnNpb25TZXRJdHIuaGFzTmV4dCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZlcnNpb25zLmFkZChpdHIubmV4dCgpKTsKLSAgICAgICAgICAgIH0gICAgICAgICAgICAKLSAgICAgICAgfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgU2V0IHZlcnNpb25TZXQgPSBmYWNldC5nZXRWZXJzaW9ucygpOwotICAgICAgICAgIEl0ZXJhdG9yIHZlcnNpb25TZXRJdHIgPSB2ZXJzaW9uU2V0Lml0ZXJhdG9yKCk7Ci0gICAgICAgICAgdmVyc2lvbnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgICAgd2hpbGUgKHZlcnNpb25TZXRJdHIuaGFzTmV4dCgpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgICAgdmVyc2lvbnMuYWRkKGl0ci5uZXh0KCkpOwotICAgICAgICAgIH0gICAgICAgICAgICAKLSAgICAgICAgfSAgICAgICAgIAotICAgICAgICAKLSAgICAgICAgaWYgKHZlcnNpb25zLnNpemUoKSA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICAvL0NyZWF0ZSBhbiBhcnJheSBvZiBJUHJvamVjdEZhY2V0VmVyc2lvbnMgZnJvbSB2ZXJzaW9ucy4KLSAgICAgICAgICBJdGVyYXRvciB2ZXJzaW9uSXRyID0gdmVyc2lvbnMuaXRlcmF0b3IoKTsKLSAgICAgICAgICBBcnJheUxpc3QgYXJyYXlPZlZlcnNpb25zTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgICB3aGlsZSAodmVyc2lvbkl0ci5oYXNOZXh0KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgSVByb2plY3RGYWNldFZlcnNpb24gcGZ2ID0gKElQcm9qZWN0RmFjZXRWZXJzaW9uKXZlcnNpb25JdHIubmV4dCgpOwotICAgICAgICAgICAgYXJyYXlPZlZlcnNpb25zTGlzdC5hZGQocGZ2KTsKLSAgICAgICAgICB9ICAgICAgICAgIAotICAgICAgICAgIAotICAgICAgICAgIC8vQWRkIHRoZSBhcnJheSBvZiB2ZXJzaW9ucyB0byB0aGUgbGlzdCBvZiBhcnJheXMuCi0gICAgICAgICAgcHJvamVjdEZhY2V0VmVyc2lvbkFycmF5cy5hZGQoKElQcm9qZWN0RmFjZXRWZXJzaW9uW10pYXJyYXlPZlZlcnNpb25zTGlzdC50b0FycmF5KG5ldyBJUHJvamVjdEZhY2V0VmVyc2lvblswXSkpOwotICAgICAgICAgIAotCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIFNldFtdIGFsbFZhbGlkQ29tYmluYXRpb25zQXJyYXkgPSBuZXcgSGFzaFNldFswXTsKLSAgICAgIGlmIChwcm9qZWN0RmFjZXRWZXJzaW9uQXJyYXlzLnNpemUoKT4wKSB7Ci0gICAgCSAgSVByb2plY3RGYWNldFZlcnNpb25bXVtdIGFycmF5T2ZQcm9qZWN0RmFjZXRWZXJzaW9uQXJyYXlzID0gKElQcm9qZWN0RmFjZXRWZXJzaW9uW11bXSlwcm9qZWN0RmFjZXRWZXJzaW9uQXJyYXlzLnRvQXJyYXkobmV3IElQcm9qZWN0RmFjZXRWZXJzaW9uWzBdWzBdKTsKLSAgICAJICBhbGxWYWxpZENvbWJpbmF0aW9uc0FycmF5ID0gRmFjZXRVdGlscy5nZXRGYWNldENvbWJpbmF0aW9ucyhhcnJheU9mUHJvamVjdEZhY2V0VmVyc2lvbkFycmF5cywgdHJ1ZSk7Ci0gICAgCSAgZmFjZXRTZXRzQnlUZW1wbGF0ZUlkXy5wdXQodGVtcGxhdGVJZCwgYWxsVmFsaWRDb21iaW5hdGlvbnNBcnJheSk7Ci0gICAgICB9Ci0gICAgIAotICAgICAgcmV0dXJuIGFsbFZhbGlkQ29tYmluYXRpb25zQXJyYXk7Ci0gICAgfSAgICAKLSAgfSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1vbi9GYWNldFV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1vbi9GYWNldFV0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4ZThiOGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tb24vRmFjZXRVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQwOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbi4gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uLiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDUyMyAgIDE1ODIzMCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbjsKLQotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25UYXJnZXRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JSmF2YVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLm9wZXJhdGlvbi5JUnVubmFibGVXaXRoUHJvZ3Jlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuaW50ZXJuYWwuZWpiLnByb2plY3Qub3BlcmF0aW9ucy5FamJGYWNldEluc3RhbGxEYXRhTW9kZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5pbnRlcm5hbC5lamIucHJvamVjdC5vcGVyYXRpb25zLklFamJGYWNldEluc3RhbGxEYXRhTW9kZWxQcm9wZXJ0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLnByb2plY3QuZmFjZXQuQXBwQ2xpZW50RmFjZXRJbnN0YWxsRGF0YU1vZGVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUucHJvamVjdC5mYWNldC5JQXBwQ2xpZW50RmFjZXRJbnN0YWxsRGF0YU1vZGVsUHJvcGVydGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5wcm9qZWN0LmZhY2V0LklVdGlsaXR5RmFjZXRJbnN0YWxsRGF0YU1vZGVsUHJvcGVydGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5wcm9qZWN0LmZhY2V0LlV0aWxpdHlGYWNldEluc3RhbGxEYXRhTW9kZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWIucHJvamVjdC5mYWNldC5JV2ViRmFjZXRJbnN0YWxsRGF0YU1vZGVsUHJvcGVydGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWIucHJvamVjdC5mYWNldC5XZWJGYWNldEluc3RhbGxEYXRhTW9kZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLkNvbnN1bXB0aW9uTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5pbnRlcm5hbC51dGlsLklNb2R1bGVDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5EYXRhTW9kZWxGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuSURhdGFNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5JRmFjZXRlZFByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuSVByb2plY3RGYWNldDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5JUHJvamVjdEZhY2V0VmVyc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5Qcm9qZWN0RmFjZXRzTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5WZXJzaW9uRm9ybWF0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLklGYWNldGVkUHJvamVjdC5BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuSUZhY2V0ZWRQcm9qZWN0LkFjdGlvbi5UeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnJ1bnRpbWUuSVJ1bnRpbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUucnVudGltZS5SdW50aW1lTWFuYWdlcjsKLQotaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuU3RyaW5nVG9rZW5pemVyOwotCi0vKioKLSAqIEZhY2V0VXRpbHMgY29udGFpbnMgdXRpbGl0eSBtZXRob2RzIHJlbGF0ZWQgdG8gZmFjZXRzIGFuZCB0ZW1wbGF0ZXMuCi0gKiA8YnIvPjxici8+Ci0gKiBUZXJtaW5vbG9neSB1c2VkIGluIHRoZSBKYXZhZG9jIGluIHRoaXMgY2xhc3MKLSAqIDx1bD4KLSAqIDxsaT48Yj5mYWNldDwvYj46IEFuIHtAbGluayBJUHJvamVjdEZhY2V0fTwvbGk+Ci0gKiA8bGk+PGI+ZmFjZXQgdmVyc2lvbjwvYj46IEFuIHtAbGluayBJUHJvamVjdEZhY2V0VmVyc2lvbn0gPC9saT4KLSAqIDxsaT48Yj5mYWNldCBydW50aW1lPC9iPjogQW4ge0BsaW5rIElSdW50aW1lfTwvbGk+Ci0gKiA8bGk+PGI+ZmFjZXRlZCBwcm9qZWN0PC9iPjogQW4ge0BsaW5rIElGYWNldGVkUHJvamVjdH0uIEEgZmFjZXRlZCBwcm9qZWN0IG1heSBiZSBvYnRhaW5lZAotICogZnJvbSBhbiBJUHJvamVjdCAoQHNlZSBQcm9qZWN0RmFjZXRzTWFuYWdlciNjcmVhdGUpPC9saT4KLSAqIDxsaT48Yj50ZW1wbGF0ZTwvYj46IEFuIHtAbGluayBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZX0uIENvbmNlcHR1YWxseSB0aGlzIGlzIHNpbWlsYXIgdG8gYSBwcm9qZWN0IHR5cGUuPC9saT4KLSAqIDxsaT48Yj5yZXF1aXJlZCBmYWNldCB2ZXJzaW9uPC9iPjogQSB7QGxpbmsgUmVxdWlyZWRGYWNldFZlcnNpb259LiBVc2VkIGJ5IHNlcnZpY2VSdW50aW1lcyBhbmQgY2xpZW50UnVudGltZXMKLSAqIHRvIGlkZW50aWZ5IHdoYXQgdGhleSByZXF1aXJlIGluIHRlcm1zIG9mIGZhY2V0IHZlcnNpb25zLjwvbGk+Ci0gKiA8L3VsPgotICovCi1wdWJsaWMgY2xhc3MgRmFjZXRVdGlscwotewotCi0gIC8qKgotICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIHZhbGlkIHByb2plY3RzLiBWYWxpZCBwcm9qZWN0cyBpbmNsdWRlIHByb2plY3RzIHdpdGggdGhlIGZhY2V0cyBuYXR1cmUgb3IKLSAgICogcHJvamVjdHMgd2l0aCB0aGUgSmF2YSBuYXR1cmUuCi0gICAqIEByZXR1cm4gSVByb2plY3RbXSBhbiBhcnJheSBvZiB2YWxpZCBwcm9qZWN0cwotICAgKi8KLSAgcHVibGljIHN0YXRpYyBJUHJvamVjdFtdIGdldEFsbFByb2plY3RzKCkKLSAgewotICAgIC8vUmV0dXJuIGFsbCBwcm9qZWN0cyBpbiB0aGUgd29ya3NwYWNlIHRoYXQgaGF2ZSB0aGUgcHJvamVjdCBmYWNldCBuYXR1cmUgb3IgdGhhdCBkbyBub3QgaGF2ZSB0aGUgcHJvamVjdAotICAgIC8vZmFjZXQgbmF0dXJlIGJ1dCBoYXZlIHRoZSBKYXZhIG5hdHVyZS4KLSAgICBJUHJvamVjdFtdIHByb2plY3RzID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0cygpOwotICAgIEFycmF5TGlzdCB2YWxpZFByb2plY3RzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJvamVjdHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIElGYWNldGVkUHJvamVjdCBmYWNQcm9qZWN0ID0gUHJvamVjdEZhY2V0c01hbmFnZXIuY3JlYXRlKHByb2plY3RzW2ldKTsKLSAgICAgICAgaWYgKGZhY1Byb2plY3QgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIC8vQWRkIGl0IHRvIHRoZSBsaXN0Ci0gICAgICAgICAgdmFsaWRQcm9qZWN0cy5hZGQocHJvamVjdHNbaV0pOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAJaWYgKFJlc291cmNlVXRpbHMuaXNKYXZhUHJvamVjdChwcm9qZWN0c1tpXSkpCi0gICAgICAgIAl7Ci0gICAgICAgICAgICAgIHZhbGlkUHJvamVjdHMuYWRkKHByb2plY3RzW2ldKTsKLSAgICAgICAgCX0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2F0Y2ggKENvcmVFeGNlcHRpb24gY2UpCi0gICAgICB7ICAgICAgICAKLSAgICAgIH0gICAgICAKLSAgICB9Ci0gICAgcmV0dXJuIChJUHJvamVjdFtdKXZhbGlkUHJvamVjdHMudG9BcnJheShuZXcgSVByb2plY3RbXXt9KTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGZhY2V0IHZlcnNpb25zIG9uIHRoZSBnaXZlbiBwcm9qZWN0LgotICAgKiBAcGFyYW0gcHJvamVjdE5hbWUgbmFtZSBvZiBhbiBleGlzdGluZyBwcm9qZWN0LgotICAgKiBAcmV0dXJucyBTZXQgY29udGFpbmluZyBlbGVtZW50cyBvZiB0eXBlIHtAbGluayBJUHJvamVjdEZhY2V0VmVyc2lvbn0uIAotICAgKiBUaGVzZSBhcmUgdGhlIGZhY2V0IHZlcnNpb25zIGN1cnJlbnRseSBpbnN0YWxsZWQgb24gdGhpcyBwcm9qZWN0LiBJZiB0aGUgcHJvamVjdAotICAgKiBpcyBhIEphdmEgcHJvamVjdCwgZmFjZXRzIGFyZSBpbmZlcnJlZCBmcm9tIHRoZSBKYXZhIHByb2plY3QuIFJldHVybnMgbnVsbCAKLSAgICogPHVsPgotICAgKiA8bGk+aWYgdGhlIHByb2plY3QgaXMgbm90IGEgZmFjZXRlZCBwcm9qZWN0IG9yIGEgSmF2YSBwcm9qZWN0IG9yPC9saT4KLSAgICogPGxpPmlmIHRoZSBwcm9qZWN0IGRvZXMgbm90IGV4aXN0IG9yPC9saT4KLSAgICogPGxpPmlmIHRoZSBwcm9qZWN0IGlzIG51bGw8L2xpPgotICAgKiA8L3VsPiAgCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFNldCBnZXRGYWNldHNGb3JQcm9qZWN0KFN0cmluZyBwcm9qZWN0TmFtZSkKLSAgewotICAgIFNldCBmYWNldFZlcnNpb25zID0gbnVsbDsKLSAgICBJUHJvamVjdCBwcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLSAgICBpZiAocHJvamVjdCE9bnVsbCAmJiBwcm9qZWN0LmV4aXN0cygpKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBJRmFjZXRlZFByb2plY3QgZnByb2plY3QgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5jcmVhdGUocHJvamVjdCk7Ci0gICAgICAgIGlmIChmcHJvamVjdCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgZmFjZXRWZXJzaW9ucyA9IGZwcm9qZWN0LmdldFByb2plY3RGYWNldHMoKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAvL0lmIHRoaXMgaXMgbm90IGEgZmFjZXRlZCBwcm9qZWN0LCBpdCBtYXkgc3RpbGwgYmUgb2theSBpZiBpdCBpcyBhIEphdmEgcHJvamVjdAotICAgICAgICAgIC8vYW5kIHRoZSBjbGllbnQgcnVudGltZSBzdXBwb3J0cyBhIEphdmEgcHJvamVjdC4KLSAgICAgICAgICBJSmF2YVByb2plY3QgamF2YVByb2plY3QgPSBudWxsOyAgICAgICAgICAgICAgCi0gICAgICAgICAgaWYgKFJlc291cmNlVXRpbHMuaXNKYXZhUHJvamVjdChwcm9qZWN0KSkKLSAgICAgICAgICB7Ci0gICAgICAgIAlqYXZhUHJvamVjdCA9IEphdmFDb3JlLmNyZWF0ZShwcm9qZWN0KTsKLSAgICAgICAgICAgIGZhY2V0VmVyc2lvbnMgPSBGYWNldFV0aWxzLmdldEZhY2V0c0ZvckphdmFQcm9qZWN0KGphdmFQcm9qZWN0KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0gY2F0Y2ggKENvcmVFeGNlcHRpb24gY2UpCi0gICAgICB7Ci0gICAgCSAgLy9MZWF2aW5nIHRoZSBjYXRjaCBibG9jayBlbXB0eS4gVGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gbnVsbCBpZiB0aGVyZQotICAgIAkgIC8vd2VyZSBhbnkgYmxvdy11cHMgaW4gdGhlIGZhY2V0IEFQSSBiZWluZyBjYWxsZWQuCi0gICAgICB9ICAgICAgCi0gICAgfQotICAgIAotICAgIHJldHVybiBmYWNldFZlcnNpb25zOwotICAgIAotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGZhY2V0IHJ1bnRpbWUgdGhlIGdpdmVuIHByb2plY3QgaXMgYm91bmQgdG8uCi0gICAqIEBwYXJhbSBwcm9qZWN0TmFtZSBuYW1lIG9mIGFuIGV4aXN0aW5nIHByb2plY3QKLSAgICogQHJldHVybiB7QGxpbmsgSVJ1bnRpbWV9IHRoZSBwcm9qZWN0IGlzIGJvdW5kIHRvLiBSZXR1cm5zIG51bGwKLSAgICogPHVsPgotICAgKiA8bGk+aWYgdGhlIHByb2plY3QgaXMgbm90IGJvdW5kIHRvIGEgZmFjZXQgcnVudGltZTwvbGk+IAotICAgKiA8bGk+aWYgdGhlIHByb2plY3QgZG9lcyBub3QgZXhpc3Q8L2xpPgotICAgKiA8bGk+aWYgdGhlIHByb2plY3QgaXMgbnVsbDwvbGk+Ci0gICAqIDwvdWw+Ci0gICAqLwotICBwdWJsaWMgc3RhdGljIElSdW50aW1lIGdldEZhY2V0UnVudGltZUZvclByb2plY3QoU3RyaW5nIHByb2plY3ROYW1lKQotICB7Ci0gICAgSVByb2plY3QgcHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSk7Ci0gICAgaWYgKHByb2plY3QhPW51bGwgJiYgcHJvamVjdC5leGlzdHMoKSkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgSUZhY2V0ZWRQcm9qZWN0IGZwcm9qZWN0ID0gUHJvamVjdEZhY2V0c01hbmFnZXIuY3JlYXRlKHByb2plY3QpOwotICAgICAgICBpZiAoZnByb2plY3QgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBmcHJvamVjdC5nZXRQcmltYXJ5UnVudGltZSgpOwotICAgICAgICB9Ci0gICAgICB9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKQotICAgICAgewotICAgIAkgIC8vTGVhdmluZyB0aGUgY2F0Y2ggYmxvY2sgZW1wdHkuIFRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIG51bGwgaWYgdGhlcmUKLSAgICAJICAvL3dlcmUgYW55IGJsb3ctdXBzIGluIHRoZSBmYWNldCBBUEkgYmVpbmcgY2FsbGVkLgotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbnVsbDsgICAgCi0gIH0KLSAgCi0gIAotICAvKioKLSAgICogUmV0dXJucyBhIHNldCBvZiBjb21iaW5hdGlvbnMgb2YgZmFjZXQgdmVyc2lvbnMgZGVyaXZlZCBmcm9tIHRoZSBmYWNldCB2ZXJzaW9ucwotICAgKiBpbiB0aGUgcHJvdmlkZWQgYXJyYXlPZlByb2plY3RGYWNldFZlcnNpb25BcnJheXMuIEZvciBleGFtcGxlLCBpZiAKLSAgICogYXJyYXlPZlByb2plY3RGYWNldFZlcnNpb25BcnJheXMgaXMgYSB0d28gZGltZW5zdGlvbmFsIGFycmF5IG9mIGZhY2V0IHZlcnNpb25zIHRoYXQgaGFzCi0gICAqIGEgc3RydWN0dXJlIGxpa2UgdGhpczo8YnIvPgotICAgKiB7e0ZhY2V0QV92ZXJzaW9uMSwgRmFjZXRBX3ZlcnNpb24yfSw8YnIvPgotICAgKiAge0ZhY2V0Ql92ZXJzaW9uMX0sPGJyLz4KLSAgICogIHtGYWNldENfdmVyc2lvbjEsIEZhY2V0Q192ZXJzaW9uMn19PGJyLz4KLSAgICogdGhlIGZvbGxvd2luZyBhcnJheSBvZiBTZXRzIHdpbGwgYmUgcmV0dXJuZWQ6PGJyLz4KLSAgICoge1NldDEsIFNldDIsIFNldDMsIFNldDR9LCB3aGVyZTxici8+Ci0gICAqIFNldDEgPSBbRmFjZXRBX3ZlcnNpb24xLCBGYWNldEJfdmVyc2lvbjEsIEZhY2V0Q192ZXJzaW9uMV08YnIvPgotICAgKiBTZXQyID0gW0ZhY2V0QV92ZXJzaW9uMiwgRmFjZXRCX3ZlcnNpb24xLCBGYWNldENfdmVyc2lvbjFdPGJyLz4KLSAgICogU2V0MyA9IFtGYWNldEFfdmVyc2lvbjEsIEZhY2V0Ql92ZXJzaW9uMSwgRmFjZXRDX3ZlcnNpb24yXTxici8+Ci0gICAqIFNldDQgPSBbRmFjZXRBX3ZlcnNpb24yLCBGYWNldEJfdmVyc2lvbjEsIEZhY2V0Q192ZXJzaW9uMl08YnIvPgotICAgKiA8YnIvPgotICAgKiBAcGFyYW0gYXJyYXlPZlByb2plY3RGYWNldFZlcnNpb25BcnJheXMgYSB0d28gZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyBlbGVtZW50cyAKLSAgICogb2YgdHlwZSB7QGxpbmsgSVByb2plY3RGYWNldFZlcnNpb259Ci0gICAqIEBwYXJhbSByZXR1cm5WYWxpZE9ubHkgZmFsc2UgaWYgYWxsIGNvbWJpbmF0aW9ucyBvZiBmYWNldCB2ZXJzaW9ucyBhcmUgdG8gYmUgcmV0dXJuZWQuIAotICAgKiB0cnVlIGlmIG9ubHkgdmFsaWQgY29tYmluYXRpb25zIG9mIGZhY2V0IHZlcnNpb25zIGFyZSB0byBiZSByZXR1cm5lZC4gIAotICAgKiBAcmV0dXJuIFNldFtdIGFuIGFycmF5IG9mIFNldHMsIHdoZXJlIGVhY2ggU2V0IGNvbnRhaW5zIGVsZW1lbnRzIG9mIHR5cGUge0BsaW5rIElQcm9qZWN0RmFjZXRWZXJzaW9ufS4gCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFNldFtdIGdldEZhY2V0Q29tYmluYXRpb25zKElQcm9qZWN0RmFjZXRWZXJzaW9uW11bXSBhcnJheU9mUHJvamVjdEZhY2V0VmVyc2lvbkFycmF5cywgYm9vbGVhbiByZXR1cm5WYWxpZE9ubHkpICAKLSAgewotICAgIEFycmF5TGlzdCBhbGxDb21iaW5hdGlvbnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgLy9tYXhDb3VudCBjb250YWlucyB0aGUgbnVtYmVyIG9mIHZlcnNpb25zIGluIGVhY2ggYXJyYXkgb2YgSVByb2plY3RGYWNldFZlcnNpb25zLgotICAgIC8vaW5pdGlhbGl6ZSBjb3VudGVyLCB3aGljaCB3aWxsIGJlIHVzZWQgdG8gbmF2aWdhdGUgYXJyYXlPZlByb2plY3RGYWNldFZlcnNpb25BcnJheXMuCi0gICAgaW50IG4gPSBhcnJheU9mUHJvamVjdEZhY2V0VmVyc2lvbkFycmF5cy5sZW5ndGg7Ci0gICAgaW50W10gbWF4Q291bnQgPSBuZXcgaW50W25dOwotICAgIGludFtdIGNvdW50ZXIgPSBuZXcgaW50W25dOwotICAgIGZvciAoaW50IGk9MDsgaTxuOyBpKyspCi0gICAgewotICAgICAgbWF4Q291bnRbaV0gPSBhcnJheU9mUHJvamVjdEZhY2V0VmVyc2lvbkFycmF5c1tpXS5sZW5ndGggLSAxOwotICAgICAgY291bnRlcltpXSA9IDA7Ci0gICAgfSAgICAgIAotICAgIAotICAgIC8vTmF2aWdhdGUgYXJyYXlPZlByb2plY3RGYWNldFZlcnNpb25BcnJheXMgdG8gY3JlYXRlIGFsbCBwb3NzaWJsZSBjb21iaW5hdGlvbnMuCi0gICAgYm9vbGVhbiBkb25lID0gZmFsc2U7Ci0gICAgd2hpbGUgKCFkb25lKQotICAgIHsKLSAgICAgIC8vQ3JlYXRlIGEgY29tYmluYXRpb24gb2Ygc2l6ZSBuIHVzaW5nIGN1cnJlbnQgdmFsdWVzIGluIGNvdW50ZXIuCi0gICAgICAvL0FkZCBpdCB0byB0aGUgbGlzdCBvZiBhbGwgY29tYmluYXRpb25zLCBjaGVja2luZyBmaXJzdCBmb3IgdmFsaWRpdHkgaWYgcmV0dXJuVmFsaWRPbmx5IGlzIHRydWUuCi0gICAgICBTZXQgY29tYmluYXRpb24gPSBuZXcgSGFzaFNldCgpOwotICAgICAgZm9yIChpbnQgaj0wOyBqPG47IGorKykKLSAgICAgIHsKLSAgICAgICAgSVByb2plY3RGYWNldFZlcnNpb24gcGZ2ID0gYXJyYXlPZlByb2plY3RGYWNldFZlcnNpb25BcnJheXNbal1bY291bnRlcltqXV07Ci0gICAgICAgIGNvbWJpbmF0aW9uLmFkZChwZnYpOwotICAgICAgfQotICAgICAgCi0gICAgICAvL0NoZWNrIGlmIHZhbGlkLgotICAgICAgaWYgKHJldHVyblZhbGlkT25seSkKLSAgICAgIHsKLSAgICAgICAgU2V0IGFjdGlvbnMgPSBnZXRJbnN0YWxsQWN0aW9ucyhjb21iaW5hdGlvbik7Ci0JCXRyeSB7Ci0JCQlpZiggUHJvamVjdEZhY2V0c01hbmFnZXIuY2hlY2soIG5ldyBIYXNoU2V0KCksIGFjdGlvbnMgKS5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuT0sgKSAgICAgICAgCi0JICAgICAgICB7Ci0JICAgICAgICAgIGFsbENvbWJpbmF0aW9ucy5hZGQoKGNvbWJpbmF0aW9uKSk7Ci0JICAgICAgICB9Ci0JCX0gY2F0Y2ggKFRocm93YWJsZSBlKSB7Ci0JCQkvLyBEbyBub3RoaW5nIGlmIFByb2plY3RGYWNldHNNYW5hZ2VyLmNoZWNrKCkgdGhyb3dzIGV4Y2VwdGlvbi4KLQkJCS8vIFRPRE8gVGhpcyB0cnkvY2F0Y2ggd2lsbCBiZSB1bm5lY2Nlc2FyeSBvbmNlIFdUUCBidWcgMTM3NTUxIGlzIGZpeGVkIHNvIHRoYXQgYW4gT0sgU3RhdHVzIAotCQkJLy8gCQl3b3VsZCBub3QgYmUgcmV0dXJuZWQgd2hlbiBhbiBleGNlcHRpb24gaXMgdGhyb3duLgotCQl9ICAgICAKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgYWxsQ29tYmluYXRpb25zLmFkZCgoY29tYmluYXRpb24pKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgLy9VcGRhdGUgdGhlIGNvdW50ZXJzLgotICAgICAgZm9yIChpbnQgcD0wOyBwPG47IHArKykKLSAgICAgIHsKLSAgICAgICAgaWYgKCAoY291bnRlcltwXSArIDEpIDw9IG1heENvdW50W3BdKQotICAgICAgICB7Ci0gICAgICAgICAgKGNvdW50ZXJbcF0pKys7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgY291bnRlcltwXSA9IDA7Ci0gICAgICAgICAgaWYgKHAgPT0gbi0xKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGRvbmUgPSB0cnVlOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAKLSAgICBTZXRbXSBhbGxDb21iaW5hdGlvbnNBcnJheSA9IChTZXRbXSlhbGxDb21iaW5hdGlvbnMudG9BcnJheShuZXcgU2V0WzBdKTsgICAgCi0gICAgcmV0dXJuIGFsbENvbWJpbmF0aW9uc0FycmF5OyAgICAKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgYSBzZXQgb2YgZmFjZXQgdmVyc2lvbnMgZ2l2ZW4gYSB0ZW1wbGF0ZS4gVGhlIGhpZ2hlc3QgZmFjZXQgdmVyc2lvbiBvZiBldmVyeSBmaXhlZCAKLSAgICogZmFjZXQgaW4gdGhlIHRlbXBsYXRlIGlzIHJldHVybmVkLCB3aXRoIHRoZSBleGNlcHRpb24gb2YgdGhlIGpzdC5qYXZhIGZhY2V0LCB3aGVyZSB0aGUgMS40IAotICAgKiBmYWNldCB2ZXJzaW9uIGlzIHJldHVybmVkLgotICAgKiAKLSAgICogQHBhcmFtIHRlbXBsYXRlSWQgaWQgb2YgYSB7QGxpbmsgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGV9Ci0gICAqIEByZXR1cm4gU2V0IGNvbnRhaW5pbmcgZWxlbWVudHMgb2YgdHlwZSB7QGxpbmsgSVByb2plY3RGYWNldFZlcnNpb259Ci0gICAqLwotICBwdWJsaWMgc3RhdGljIFNldCBnZXRJbml0aWFsRmFjZXRWZXJzaW9uc0Zyb21UZW1wbGF0ZShTdHJpbmcgdGVtcGxhdGVJZCkKLSAgewotICAgIElGYWNldGVkUHJvamVjdFRlbXBsYXRlIHRlbXBsYXRlID0gUHJvamVjdEZhY2V0c01hbmFnZXIuZ2V0VGVtcGxhdGUodGVtcGxhdGVJZCk7Ci0gICAgU2V0IGZpeGVkRmFjZXRzID0gdGVtcGxhdGUuZ2V0Rml4ZWRQcm9qZWN0RmFjZXRzKCk7IAotICAgIEhhc2hTZXQgaW5pdGlhbCA9IG5ldyBIYXNoU2V0KCk7IAotICAgIGZvciAoSXRlcmF0b3IgaXRyMiA9IGZpeGVkRmFjZXRzLml0ZXJhdG9yKCk7IGl0cjIuaGFzTmV4dCgpOyApIAotICAgIHsgCi0gICAgICBJUHJvamVjdEZhY2V0IGZhY2V0ID0gKElQcm9qZWN0RmFjZXQpIGl0cjIubmV4dCgpOyAKLSAgICAgIElQcm9qZWN0RmFjZXRWZXJzaW9uIGhpZ2hlc3RGYWNldFZlcnNpb24gPSBudWxsOwotICAgICAgdHJ5IHsKLSAgICAJICBpZiAoaXNKYXZhRmFjZXQoZmFjZXQpKSAvL3NwZWNpYWwgY2FzZSB0aGUgamF2YSBmYWNldCBiZWNhdXNlIDEuNCBpcyBhIGJldHRlciBkZWZhdWx0IHRoYW4gNS4wIGZvciBub3cuCi0gICAgCSAgewotICAgIAkJICBoaWdoZXN0RmFjZXRWZXJzaW9uID0gZmFjZXQuZ2V0VmVyc2lvbigiMS40Iik7Ci0gICAgCSAgfSBlbHNlIHsKLSAgICAJCSAgaGlnaGVzdEZhY2V0VmVyc2lvbiA9IGZhY2V0LmdldExhdGVzdFZlcnNpb24oKTsKLSAgICAJICB9Ci0gICAgICB9IGNhdGNoIChWZXJzaW9uRm9ybWF0RXhjZXB0aW9uIGUpIHsKLSAgICAgIH0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotICAgICAgfQotICAgICAgaW5pdGlhbC5hZGQoaGlnaGVzdEZhY2V0VmVyc2lvbik7IAotICAgIH0gICAgICAgICAgICAgCi0gICAgCi0gICAgcmV0dXJuIGluaXRpYWw7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgc2V0IG9mIGZhY2V0IHZlcnNpb25zIGdpdmVuIGEgdGVtcGxhdGUuIFRoZSBkZWZhdWx0IGZhY2V0IHZlcnNpb24gb2YgZXZlcnkgZml4ZWQgCi0gICAqIGZhY2V0IGluIHRoZSB0ZW1wbGF0ZSBpcyByZXR1cm5lZC4gIElmIHVuYWJsZSB0byBnZXQgZGVmYXVsdCB2ZXJzaW9ucywgYW4gZW1wdHkgc2V0IHdpbGwgYmUgcmV0dXJuZWQuCi0gICAqIAotICAgKiBAcGFyYW0gdGVtcGxhdGVJZCBpZCBvZiBhIHtAbGluayBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZX0KLSAgICogQHJldHVybiBTZXQgY29udGFpbmluZyBlbGVtZW50cyBvZiB0eXBlIHtAbGluayBJUHJvamVjdEZhY2V0VmVyc2lvbn0KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU2V0IGdldERlZmF1bHRGYWNldFZlcnNpb25zRnJvbVRlbXBsYXRlKFN0cmluZyB0ZW1wbGF0ZUlkKQotICB7Ci0JICBIYXNoU2V0IGRlZmF1bHRTZXQgPSBuZXcgSGFzaFNldCgpOyAKLQkgIHRyeSB7Ci0JCSAgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGUgdGVtcGxhdGUgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5nZXRUZW1wbGF0ZSh0ZW1wbGF0ZUlkKTsKLQkJICBTZXQgZml4ZWRGYWNldHMgPSB0ZW1wbGF0ZS5nZXRGaXhlZFByb2plY3RGYWNldHMoKTsgCi0JCSAgZm9yIChJdGVyYXRvciBpdHIyID0gZml4ZWRGYWNldHMuaXRlcmF0b3IoKTsgaXRyMi5oYXNOZXh0KCk7ICkgCi0JCSAgeyAKLQkJCSAgSVByb2plY3RGYWNldCBmYWNldCA9IChJUHJvamVjdEZhY2V0KSBpdHIyLm5leHQoKTsgCi0JCQkgIElQcm9qZWN0RmFjZXRWZXJzaW9uIGRlZmF1bHRGYWNldFZlcnNpb24gPSBudWxsOwotCQkJICBkZWZhdWx0RmFjZXRWZXJzaW9uID0gZmFjZXQuZ2V0RGVmYXVsdFZlcnNpb24oKTsKLQkJCSAgZGVmYXVsdFNldC5hZGQoZGVmYXVsdEZhY2V0VmVyc2lvbik7IAotCQkgIH0gICAgICAgICAgICAgCi0JCSAgcmV0dXJuIGRlZmF1bHRTZXQ7Ci0JICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewotCQkgIHJldHVybiBkZWZhdWx0U2V0OwotCSAgfSBjYXRjaCAoVmVyc2lvbkZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0JCSAgcmV0dXJuIGRlZmF1bHRTZXQ7Ci0JICB9IAotCSAgCi0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB0ZW1wbGF0ZSBsYWJsZXMgY29ycmVzcG9uZGluZyB0byB0aGUgcHJvdmlkZWQgdGVtcGxhdGVJZHMuCi0gICAqIEBwYXJhbSB0ZW1wbGF0ZUlkcyBhcnJheSBvZiB2YWxpZCB0ZW1wbGF0ZSBpZHMuIEVhY2ggaWQgbXVzdCBjb3JyZXNwb25kIHRvIGEge0BsaW5rIElGYWNldGVkUHJvamVjdFRlbXBsYXRlfS4KLSAgICogQHJldHVybiBTdHJpbmdbXSBhcnJheSBvZiB0ZW1wbGF0ZSBsYWJlbHMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZ1tdIGdldFRlbXBsYXRlTGFiZWxzKFN0cmluZ1tdIHRlbXBsYXRlSWRzKQotICB7Ci0gICAgU3RyaW5nW10gbGFiZWxzID0gbmV3IFN0cmluZ1t0ZW1wbGF0ZUlkcy5sZW5ndGhdOwotICAgIGZvciAoaW50IGk9MDsgaTx0ZW1wbGF0ZUlkcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZSB0ZW1wbGF0ZSA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmdldFRlbXBsYXRlKHRlbXBsYXRlSWRzW2ldKTsgICAgICAKLSAgICAgIGxhYmVsc1tpXSA9IHRlbXBsYXRlLmdldExhYmVsKCk7Ci0gICAgfQotICAgIHJldHVybiBsYWJlbHM7Ci0gICAgCi0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBpZCBvZiBhIHRlbXBsYXRlIGdpdmVuIGl0cyBsYWJlbC4gCi0gICAqIAotICAgKiBAcGFyYW0gdGVtcGxhdGVMYWJlbCBsYWJlbCBvZiBhIHRlbXBsYXRlCi0gICAqIEByZXR1cm4gdGVtcGxhdGUgaWQgb3IgZW1wdHkgU3RyaW5nIGlmIG5vIHtAbGluayBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZX0gd2l0aCB0aGUKLSAgICogZ2l2ZW4gdGVtcGxhdGVMYWJlbCBjb3VsZCBiZSBmb3VuZC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFRlbXBsYXRlSWRCeUxhYmVsKFN0cmluZyB0ZW1wbGF0ZUxhYmVsKQotICB7Ci0gICAgZm9yKCBJdGVyYXRvciBpdHIgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5nZXRUZW1wbGF0ZXMoKS5pdGVyYXRvcigpOyBpdHIuaGFzTmV4dCgpOyApCi0gICAgewotICAgICAgICBmaW5hbCBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZSB0ZW1wbGF0ZSA9IChJRmFjZXRlZFByb2plY3RUZW1wbGF0ZSkgaXRyLm5leHQoKTsKLSAgICAgICAgaWYgKHRlbXBsYXRlLmdldExhYmVsKCkuZXF1YWxzKHRlbXBsYXRlTGFiZWwpKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHRlbXBsYXRlLmdldElkKCk7Ci0KLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gIiI7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBsYWJlbCBvZiBhIHRlbXBsYXRlIGdpdmVuIGl0cyBpZCAKLSAgICogCi0gICAqIEBwYXJhbSB0ZW1wbGF0ZUlkIGlkIG9mIGEge0BsaW5rIElGYWNldGVkUHJvamVjdFRlbXBsYXRlfQotICAgKiBAcmV0dXJuIHRlbXBsYXRlIGxhYmVsCi0gICAqLyAgCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFRlbXBsYXRlTGFiZWxCeUlkKFN0cmluZyB0ZW1wbGF0ZUlkKQotICB7Ci0gICAgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGUgdGVtcGxhdGUgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5nZXRUZW1wbGF0ZSh0ZW1wbGF0ZUlkKTsKLSAgICByZXR1cm4gdGVtcGxhdGUuZ2V0TGFiZWwoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgYSBzZXQgb2YgaW5zdGFsbCBhY3Rpb25zIGZvciB0aGUgcHJvdmlkZWQgZmFjZXQgdmVyc2lvbgotICAgKiAKLSAgICogQHBhcmFtIHByb2plY3RGYWNldFZlcnNpb25zIFNldCBjb250YWluaW5nIGVsZW1lbnRzIG9mIHR5cGUge0BsaW5rIElQcm9qZWN0RmFjZXRWZXJzaW9ufQotICAgKiBAcmV0dXJuIFNldCBjb250YWluaW5nIGVsZW1lbnRzIG9mIHR5cGUge0BsaW5rIEFjdGlvbn0gd2l0aCB0aGUgdHlwZSBhdHRyaWJ1dGUgc2V0IHRvIFR5cGUuSU5TVEFMTAotICAgKiBUaGUgc2V0IGNvbnRhaW5zIG9uZSBBY3Rpb24gZm9yIGVhY2gge0BsaW5rIElQcm9qZWN0RmFjZXRWZXJzaW9ufSBpbiBwcm9qZWN0RmFjZXRWZXJzaW9ucy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU2V0IGdldEluc3RhbGxBY3Rpb25zKFNldCBwcm9qZWN0RmFjZXRWZXJzaW9ucykKLSAgewotICAgIEhhc2hTZXQgYWN0aW9ucyA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgCi0gICAgSXRlcmF0b3IgZmFjZXRzID0gcHJvamVjdEZhY2V0VmVyc2lvbnMuaXRlcmF0b3IoKTsKLSAgICAKLSAgICB3aGlsZShmYWNldHMuaGFzTmV4dCgpKQotICAgIHsKLSAgICAJSVByb2plY3RGYWNldFZlcnNpb24gZnYgPSAoSVByb2plY3RGYWNldFZlcnNpb24pZmFjZXRzLm5leHQoKTsKLSAgICAJaWYgKGZ2ICE9IG51bGwpIHsKLSAgICAJCUlQcm9qZWN0RmFjZXQgcGYgPSBmdi5nZXRQcm9qZWN0RmFjZXQoKTsKLSAgICAJCUFjdGlvbiBhY3Rpb24gPSBuZXcgQWN0aW9uKFR5cGUuSU5TVEFMTCwgZnYsIGdldENvbmZpZ09iamVjdChwZikpOwotICAgIAkJYWN0aW9ucy5hZGQoYWN0aW9uKTsKLSAgICAJfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gYWN0aW9uczsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGRhdGEgbW9kZWwgY29uZmlnIG9iamVjdCBmb3IgdGhlIGdpdmVuIHByb2plY3QgZmFjZXQKLSAgICogRm9yIEoyRUUgZmFjZXRzLCBzZXQgQWRkX1RPX0VBUiBwcm9wZXJ0aWVzIG9mIHRoZSBkYXRhIG1vZGVsIHRvIGZhbHNlLCAKLSAgICogZm9yIG90aGVyIGZhY2V0cywganVzdCByZXR1cm4gbnVsbAotICAgKiBAcGFyYW0gZmFjZXRJRAotICAgKiBAcmV0dXJuIGRhdGEgbW9kZWwgY29uZmlnIG9iamVjdAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBPYmplY3QgZ2V0Q29uZmlnT2JqZWN0KElQcm9qZWN0RmFjZXQgcHJvamVjdEZhY2V0KQotICB7Ci0JICAKLQkgIElEYXRhTW9kZWwgZG0gPSBudWxsOwotCSAgaWYgKHByb2plY3RGYWNldCAhPSBudWxsKSB7Ci0JCSAgU3RyaW5nIGZhY2V0SWQgPSBwcm9qZWN0RmFjZXQuZ2V0SWQoKTsKLQkJICBpZiAoZmFjZXRJZCAhPSBudWxsKSB7Ci0JCQkgIC8vIHNldCBBZGQgdG8gRUFSIHRvIGZhbHNlCi0JCQkgIGlmIChmYWNldElkLmVxdWFscyhJTW9kdWxlQ29uc3RhbnRzLkpTVF9XRUJfTU9EVUxFKSkgeyAKLQkJCQkgIGRtID0gRGF0YU1vZGVsRmFjdG9yeS5jcmVhdGVEYXRhTW9kZWwobmV3IFdlYkZhY2V0SW5zdGFsbERhdGFNb2RlbFByb3ZpZGVyKCkpOwotCQkJCSAgZG0uc2V0Qm9vbGVhblByb3BlcnR5KElXZWJGYWNldEluc3RhbGxEYXRhTW9kZWxQcm9wZXJ0aWVzLkFERF9UT19FQVIsIGZhbHNlKTsKLQkJCSAgfSBlbHNlIGlmIChmYWNldElkLmVxdWFscyhJTW9kdWxlQ29uc3RhbnRzLkpTVF9FSkJfTU9EVUxFKSkgewotCQkJCSAgZG0gPSBEYXRhTW9kZWxGYWN0b3J5LmNyZWF0ZURhdGFNb2RlbChuZXcgRWpiRmFjZXRJbnN0YWxsRGF0YU1vZGVsUHJvdmlkZXIoKSk7Ci0JCQkJICBkbS5zZXRCb29sZWFuUHJvcGVydHkoSUVqYkZhY2V0SW5zdGFsbERhdGFNb2RlbFByb3BlcnRpZXMuQUREX1RPX0VBUiwgZmFsc2UpOwotCQkJICB9IGVsc2UgaWYgKGZhY2V0SWQuZXF1YWxzKElNb2R1bGVDb25zdGFudHMuSlNUX0FQUENMSUVOVF9NT0RVTEUpKSB7Ci0JCQkJICBkbSA9IERhdGFNb2RlbEZhY3RvcnkuY3JlYXRlRGF0YU1vZGVsKG5ldyBBcHBDbGllbnRGYWNldEluc3RhbGxEYXRhTW9kZWxQcm92aWRlcigpKTsKLQkJCQkgIGRtLnNldEJvb2xlYW5Qcm9wZXJ0eShJQXBwQ2xpZW50RmFjZXRJbnN0YWxsRGF0YU1vZGVsUHJvcGVydGllcy5BRERfVE9fRUFSLCBmYWxzZSk7Ci0JCQkgIH0gZWxzZSBpZiAoZmFjZXRJZC5lcXVhbHMoSU1vZHVsZUNvbnN0YW50cy5KU1RfVVRJTElUWV9NT0RVTEUpKSB7Ci0JCQkJICBkbSA9IERhdGFNb2RlbEZhY3RvcnkuY3JlYXRlRGF0YU1vZGVsKG5ldyBVdGlsaXR5RmFjZXRJbnN0YWxsRGF0YU1vZGVsUHJvdmlkZXIoKSk7Ci0JCQkJICBkbS5zZXRCb29sZWFuUHJvcGVydHkoSVV0aWxpdHlGYWNldEluc3RhbGxEYXRhTW9kZWxQcm9wZXJ0aWVzLkFERF9UT19FQVIsIGZhbHNlKTsKLQkJCSAgfQotCQkgIH0KLQkgIH0KLQkgIHJldHVybiBkbTsKLSAgfQotICAvKioKLSAgICogUmV0dXJucyB0aGUge0BsaW5rIEZhY2V0TWF0Y2hlcn0gY2FsY3VsYXRlZCB3aGVuIGNoZWNraW5nIHRoZSByZXF1aXJlZCBmYWNldCB2ZXJzaW9ucyAKLSAgICogYWdhaW5zdCB0aGUgZmFjZXQgdmVyc2lvbnMuCi0gICAqIAotICAgKiBAcGFyYW0gcmVxdWlyZWRGYWNldFZlcnNpb25zIGFycmF5IG9mIHJlcXVpcmVkIGZhY2V0IHZlcnNpb25zCi0gICAqIEBwYXJhbSBwcm9qZWN0RmFjZXRWZXJzaW9ucyBmYWNldCB2ZXJzaW9ucyB0byBjaGVjayBhZ2FpbnN0LiBTZXQgY29udGFpbmluZyBlbGVtZW50cyBvZiB0eXBlIAotICAgKiB7QGxpbmsgSVByb2plY3RGYWNldFZlcnNpb259Ci0gICAqIEByZXR1cm4gRmFjZXRNYXRjaGVyIHdpdGggdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJpc3RpY3M6Ci0gICAqIDx1bD4KLSAgICogPGxpPjxiPmlzTWF0Y2g8L2I+OiByZXR1cm5zIHRydWUgaWYgdGhlIHJlcXVpcmVkIGZhY2V0IHZlcnNpb25zIGFscmVhZHkgZXhpc3QgaW4gdGhlIGZhY2V0IHZlcnNpb25zCi0gICAqIG9yIGNhbiBiZSBhZGRlZCB0byB0aGUgZmFjZXQgdmVyc2lvbnMuIGlzTWF0Y2ggd2lsbCByZXR1cm4gZmFsc2Ugb3RoZXJ3aXNlLjwvbGk+Ci0gICAqIDxsaT48Yj5nZXRGYWNldHNUZXN0ZWQ8L2I+OiByZXR1cm5zIHRoZSBzYW1lIHNldCBvZiBmYWNldCB2ZXJzaW9ucyBhcyB0aGUgaW5wdXQgcGFyYW1ldGVyLCBwcm9qZWN0RmFjZXRWZXJzaW9uczwvbGk+Ci0gICAqIDxsaT48Yj5nZXRGYWNldHNUaGF0TWF0Y2hlZDwvYj46IGlmIGlzTWF0Y2ggcmV0dXJucyBmYWxzZSwgZ2V0RmFjZXRzVGhhdE1hdGNoZWQgcmV0dXJucyBudWxsLiBJZiBpc01hdGNoIHJldHVybnMgdHJ1ZSwgCi0gICAqIGdldEZhY2V0c1RoYXRNYXRjaGVkIHJldHVybnMgdGhlIHN1YnNldCBvZiBmYWNldCB2ZXJzaW9ucyBpbiB0aGUgaW5wdXQgcGFyYW1ldGVyLCBwcm9qZWN0RmFjZXRWZXJzaW9ucywgCi0gICAqIHRoYXQgbWF0Y2hlZCBvbmUgb2YgdGhlIHJlcXVpcmVkIGZhY2V0IHZlcnNpb25zLiBUaGlzIG1heSBiZSBhbiBlbXB0eSBzZXQuPC9saT4KLSAgICogPGxpPjxiPmdldEZhY2V0c1RvQWRkPC9iPjogaWYgaXNNYXRjaCByZXR1cm5zIGZhbHNlLCBnZXRGYWNldHNUb0FkZCByZXR1cm5zIG51bGwuIElmIGlzTWF0Y2ggcmV0dXJucyB0cnVlLCAKLSAgICogZ2V0RmFjZXRzVG9BZGQgcmV0dXJucyB0aGUgc3Vic2V0IG9mIGZhY2V0IHZlcnNpb25zIHRoYXQgd291bGQgbmVlZCB0byBiZSBhZGRlZCB0byB0aGUgZmFjZXQgdmVyc2lvbnMgaW4KLSAgICogcHJvamVjdEZhY2V0VmVyc2lvbnMgaW4gb3JkZXIgdG8gc2F0aXNmeSB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoZSByZXF1aXJlZCBmYWNldCB2ZXJzaW9ucy4gVGhpcyBtYXkgYmUKLSAgICogYW4gZW1wdHkgc2V0LjwvbGk+Ci0gICAqIDwvdWw+Ci0gICAqLwotICBwdWJsaWMgc3RhdGljIEZhY2V0TWF0Y2hlciBtYXRjaChSZXF1aXJlZEZhY2V0VmVyc2lvbltdIHJlcXVpcmVkRmFjZXRWZXJzaW9ucywgU2V0IHByb2plY3RGYWNldFZlcnNpb25zKQotICB7Ci0gICAgRmFjZXRNYXRjaGVyIGZtID0gbmV3IEZhY2V0TWF0Y2hlcigpOwotICAgIGZtLnNldEZhY2V0c1Rlc3RlZChwcm9qZWN0RmFjZXRWZXJzaW9ucyk7Ci0gICAgSGFzaFNldCBmYWNldHNUb0FkZCA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgSGFzaFNldCByZXF1aXJlZEZhY2V0VmVyc2lvbnNUb0FkZCA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgSGFzaFNldCBmYWNldHNUaGF0TWF0Y2hlZCA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgZm9yIChpbnQgaT0wOyBpPHJlcXVpcmVkRmFjZXRWZXJzaW9ucy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBSZXF1aXJlZEZhY2V0VmVyc2lvbiByZnYgPSByZXF1aXJlZEZhY2V0VmVyc2lvbnNbaV07Ci0gICAgICBJUHJvamVjdEZhY2V0VmVyc2lvbiBycGZ2ID0gcmZ2LmdldFByb2plY3RGYWNldFZlcnNpb24oKTsKLSAgICAgIFN0cmluZyByaWQgPSBycGZ2LmdldFByb2plY3RGYWNldCgpLmdldElkKCk7Ci0gICAgICBTdHJpbmcgcnYgPSBycGZ2LmdldFZlcnNpb25TdHJpbmcoKTsKLSAgICAgIGJvb2xlYW4gZmFjZXRQcmVzZW50ID0gZmFsc2U7Ci0KLSAgICAgIC8vSXMgdGhlIHByb2plY3QgZmFjZXQgcHJlc2VudD8gb3IgYSBsYXRlciB2ZXJzaW9uIG9mIGFwcGxpY2FibGUuCi0gICAgICBJdGVyYXRvciBpdHIgPSBwcm9qZWN0RmFjZXRWZXJzaW9ucy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUoaXRyLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgSVByb2plY3RGYWNldFZlcnNpb24gcGZ2ID0gKElQcm9qZWN0RmFjZXRWZXJzaW9uKWl0ci5uZXh0KCk7Ci0gICAgICAgIFN0cmluZyBpZCA9IHBmdi5nZXRQcm9qZWN0RmFjZXQoKS5nZXRJZCgpOwotICAgICAgICBTdHJpbmcgdmVyc2lvbiA9IHBmdi5nZXRWZXJzaW9uU3RyaW5nKCk7Ci0gICAgICAgIGlmIChyaWQuZXF1YWxzKGlkKSkKLSAgICAgICAgewotICAgICAgICAgIGlmIChydi5lcXVhbHModmVyc2lvbikpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy9mb3VuZCBhbiBleGFjdCBtYXRjaAotICAgICAgICAgICAgZmFjZXRQcmVzZW50ID0gdHJ1ZTsKLSAgICAgICAgICAgIGZhY2V0c1RoYXRNYXRjaGVkLmFkZChwZnYpOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKHJmdi5nZXRBbGxvd05ld2VyKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlmIChncmVhdGVyVGhhbih2ZXJzaW9uLCBydikpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvL2ZvdW5kIGEgbWF0Y2gKLSAgICAgICAgICAgICAgICBmYWNldFByZXNlbnQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGZhY2V0c1RoYXRNYXRjaGVkLmFkZChwZnYpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIC8vTm8gbmVlZCB0byBrZWVwIGl0ZXJhdGluZyBzaW5jZSB3ZSBoaXQgYSBmYWNldCB3aXRoIHRoZSBzYW1lIGlkOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIC8vaWYgbm90IHByZXNlbnQsIHB1dCBpdCBpbiB0aGUgbGlzdCB0byBjaGVjayBpZiBpdCBjYW4gYmUgYWRkZWQuCi0gICAgICBpZiAoIWZhY2V0UHJlc2VudCkKLSAgICAgIHsKLSAgICAgICAgZmFjZXRzVG9BZGQuYWRkKHJwZnYpOwotICAgICAgICByZXF1aXJlZEZhY2V0VmVyc2lvbnNUb0FkZC5hZGQocmZ2KTsKLSAgICAgIH0KLSAgICAgIAotICAgIH0KLSAgICAKLSAgICAvL0NoZWNrIGlmIHRoZSBmYWNldHNUb0FkZCBjYW4gYmUgYWRkZWQKLSAgICBpZiAocmVxdWlyZWRGYWNldFZlcnNpb25zVG9BZGQuc2l6ZSgpID4gMCkKLSAgICB7Ci0gICAgICAvL1Rlc3QgYWxsIHBvc3NpYmxlIGNvbWJpbmF0aW9ucyBvZiB0aGUgZmFjZXRzIHRoYXQgbmVlZCB0byBiZSBhZGRlZAotICAgICAgLy9DcmVhdGUgYW4gYXJyYXkgb2YgYXJyYXlzLiBFYWNoIGVsZW1lbnQgb2YgdGhlIGFycmF5IHdpbGwgY29udGFpbiB0aGUgYXJyYXkKLSAgICAgIC8vb2YgdGhlIHBlcm1pdHRlZCBJUHJvamVjdEZhY2V0VmVyc2lvbnMgZm9yIGVhY2ggcmVxdWlyZWQgZmFjZXQuCi0gICAgICBib29sZWFuIGZhY2V0c0NhbkJlQWRkZWQgPSBmYWxzZTsKLSAgICAgIEl0ZXJhdG9yIGl0ciA9IHJlcXVpcmVkRmFjZXRWZXJzaW9uc1RvQWRkLml0ZXJhdG9yKCk7Ci0gICAgICBBcnJheUxpc3QgcHJvamVjdEZhY2V0VmVyc2lvbkFycmF5cyA9IG5ldyBBcnJheUxpc3QoKTsgICAgICAKLQotICAgICAgd2hpbGUgKGl0ci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIFJlcXVpcmVkRmFjZXRWZXJzaW9uIHJlcUZhY2V0VmVyc2lvbiA9IChSZXF1aXJlZEZhY2V0VmVyc2lvbikgaXRyLm5leHQoKTsKLSAgICAgICAgSVByb2plY3RGYWNldFZlcnNpb25bXSB2ZXJzaW9ucyA9IHJlcUZhY2V0VmVyc2lvbi5nZXRBbGxvd2VkUHJvamVjdEZhY2V0VmVyc2lvbnMoKTsKLSAgICAgICAgaWYgKHZlcnNpb25zICE9IG51bGwgJiYgdmVyc2lvbnMubGVuZ3RoID4gMCkKLSAgICAgICAgeyAgICAgICAgICAKLSAgICAgICAgICAvL0FkZCB0aGUgYXJyYXkgb2YgdmVyc2lvbnMgdG8gdGhlIGxpc3Qgb2YgYXJyYXlzLgotICAgICAgICAgIHByb2plY3RGYWNldFZlcnNpb25BcnJheXMuYWRkKHZlcnNpb25zKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgCi0gICAgICBJUHJvamVjdEZhY2V0VmVyc2lvbltdW10gYXJyYXlPZlByb2plY3RGYWNldFZlcnNpb25BcnJheXMgPSAoSVByb2plY3RGYWNldFZlcnNpb25bXVtdKXByb2plY3RGYWNldFZlcnNpb25BcnJheXMudG9BcnJheShuZXcgSVByb2plY3RGYWNldFZlcnNpb25bMF1bMF0pOwotICAgICAgU2V0W10gY29tYmluYXRpb25zID0gZ2V0RmFjZXRDb21iaW5hdGlvbnMoYXJyYXlPZlByb2plY3RGYWNldFZlcnNpb25BcnJheXMsIGZhbHNlKTsKLSAgICAgIGZvciAoaW50IGk9MDsgaTxjb21iaW5hdGlvbnMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIC8vQ2hlY2sgaWYgdGhlIHNldCBjYW4gYmUgYWRkZWQuIElmIHNvLCB0aGlzIGlzIGEgbWF0Y2guIFVwZGF0ZSB0aGUgZmFjZXQgbWF0Y2hlciBhbmQgYnJlYWsuCi0gICAgICAgIFNldCBhY3Rpb25zID0gZ2V0SW5zdGFsbEFjdGlvbnMoY29tYmluYXRpb25zW2ldKTsKLSAgICAgICAgdHJ5IHsKLQkJCWlmKCBQcm9qZWN0RmFjZXRzTWFuYWdlci5jaGVjayggcHJvamVjdEZhY2V0VmVyc2lvbnMsIGFjdGlvbnMgKS5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuT0sgKQotCQkJewotCQkJICAvL0ZhY2V0cyBjYW4gYmUgYWRkZWQgc28gdGhlcmUgaXMgYSBtYXRjaAotCQkJICBmYWNldHNDYW5CZUFkZGVkPXRydWU7Ci0JCQkgIGZtLnNldE1hdGNoKHRydWUpOwotCQkJICBmbS5zZXRGYWNldHNUaGF0TWF0Y2hlZChmYWNldHNUaGF0TWF0Y2hlZCk7Ci0JCQkgIGZtLnNldEZhY2V0c1RvQWRkKGNvbWJpbmF0aW9uc1tpXSk7Ci0JCQkgIGJyZWFrOwotCQkJfQotCQl9IGNhdGNoIChUaHJvd2FibGUgZSkgewotCQkJLy8gRG8gbm90aGluZyBpZiBQcm9qZWN0RmFjZXRzTWFuYWdlci5jaGVjaygpIHRocm93cyBleGNlcHRpb24uCi0JCQkvLyBUT0RPIFRoaXMgdHJ5L2NhdGNoIHdpbGwgYmUgdW5uZWNjZXNhcnkgb25jZSBXVFAgYnVnIDEzNzU1MSBpcyBmaXhlZCBzbyB0aGF0IGFuIE9LIFN0YXR1cyAKLQkJCS8vIAkJd291bGQgbm90IGJlIHJldHVybmVkIHdoZW4gYW4gZXhjZXB0aW9uIGlzIHRocm93bi4KLQkJfSAgICAgICAgICAgICAgICAKLSAgICAgIH0KLSAgICAgIAotICAgICAgCi0gICAgICBpZiAoIWZhY2V0c0NhbkJlQWRkZWQpCi0gICAgICB7Ci0gICAgICAgIGZtLnNldE1hdGNoKGZhbHNlKTsKLSAgICAgIH0gICAgICAKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vVGhlcmUgYXJlIG5vIGZhY2V0cyB0byBhZGQuCi0gICAgICBmbS5zZXRNYXRjaCh0cnVlKTsKLSAgICAgIGZtLnNldEZhY2V0c1RoYXRNYXRjaGVkKGZhY2V0c1RoYXRNYXRjaGVkKTsKLSAgICAgIGZtLnNldEZhY2V0c1RvQWRkKGZhY2V0c1RvQWRkKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZtOwotICB9Ci0gICAgCi0gIC8qKgotICAgKiBBZGRzIGZhY2V0IHZlcnNpb25zIHRvIHRoZSBwcm92aWRlZCBwcm9qZWN0IGlmIHJlcXVpcmVkIGJhc2VkIG9uIGNoZWNraW5nIHByb3ZpZGVkIAotICAgKiByZXF1aXJlZCBmYWNldCB2ZXJzaW9ucyBhZ2FpbnN0IHRoZSBmYWNldCB2ZXJzaW9ucyBhbHJlYWR5IGluc3RhbGxlZCBvbiBwcm9qZWN0LgotICAgKiAKLSAgICogQHBhcmFtIHByb2plY3QgSVByb2plY3Qgd2hpY2ggZXhpc3RzIGluIHRoZSB3b3Jrc3BhY2UKLSAgICogQHBhcmFtIHJmdnMgYXJyYXkgb2YgcmVxdWlyZWQgZmFjZXQgdmVyc2lvbnMuCi0gICAqIEBwYXJhbSBtb25pdG9yIHByb2dyZXNzIG1vbml0b3IKLSAgICogQHJldHVybiBJU3RhdHVzIHdpdGggc2V2ZXJpdHkgSVN0YXR1cy5FUlJPUgotICAgKiA8dWw+Ci0gICAqIDxsaT5pZiB0aGUgcHJvamVjdCBkb2VzIG5vdCBleGlzdCBvcjwvbGk+Ci0gICAqIDxsaT5pZiB0aGUgcHJvamVjdCBpcyBub3Qgb3BlbiBvcjwvbGk+Ci0gICAqIDxsaT5hbiBhdHRlbXB0IHRvIGFkZCBmYWNldCB2ZXJzaW9ucyB0byB0aGUgcHJvamVjdCByZXN1bHRlZCBpbiBhbiBlcnJvci48L2xpPgotICAgKiA8L3VsPiAKLSAgICogT3RoZXJ3aXNlLCByZXR1cm5zIGFuIElTdGF0dXMgd2l0aCBzZXZlcml0eSBJU3RhdHVzLk9LICAgIAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBJU3RhdHVzIGFkZFJlcXVpcmVkRmFjZXRzVG9Qcm9qZWN0KElQcm9qZWN0IHByb2plY3QsIFJlcXVpcmVkRmFjZXRWZXJzaW9uW10gcmZ2cywgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKQotICB7Ci0gICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAgIAotICAgIFNldCBtaXNzaW5nRmFjZXRzID0gbnVsbDsKLSAgICBTZXQgZmFjZXRzVG9BZGQgPSBuZXcgSGFzaFNldCgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIElGYWNldGVkUHJvamVjdCBmUHJvamVjdCA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmNyZWF0ZShwcm9qZWN0KTsKLSAgICAgIGlmIChmUHJvamVjdCAhPSBudWxsKQotICAgICAgewotICAgICAgICBTZXQgcHJvamVjdEZhY2V0VmVyc2lvbnMgPSBmUHJvamVjdC5nZXRQcm9qZWN0RmFjZXRzKCk7Ci0gICAgICAgIEZhY2V0TWF0Y2hlciBwcm9qZWN0RmFjZXRNYXRjaGVyID0gRmFjZXRVdGlscy5tYXRjaChyZnZzLCBwcm9qZWN0RmFjZXRWZXJzaW9ucyk7Ci0gICAgICAgIGlmIChwcm9qZWN0RmFjZXRNYXRjaGVyLmlzTWF0Y2goKSkKLSAgICAgICAgewotICAgICAgICAgIG1pc3NpbmdGYWNldHMgPSBwcm9qZWN0RmFjZXRNYXRjaGVyLmdldEZhY2V0c1RvQWRkKCk7Ci0gICAgICAgICAgaWYgKG1pc3NpbmdGYWNldHMuc2l6ZSgpID4gMCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBJUnVudGltZSBmUnVudGltZSA9IG51bGw7Ci0gICAgICAgICAgICBmUnVudGltZSA9IEZhY2V0VXRpbHMuZ2V0RmFjZXRSdW50aW1lRm9yUHJvamVjdChwcm9qZWN0LmdldE5hbWUoKSk7Ci0gICAgICAgICAgICBpZiAoZlJ1bnRpbWUgIT0gbnVsbCkKLSAgICAgICAgICAgIHsgIAotICAgICAgICAgICAgICAvL0FkZCB0aGUgaGlnaGVzdCB2ZXJzaW9uIHN1cHBvcnRlZCBieSB0aGUgcnVudGltZSB0aGUgcHJvamVjdCBpcyBib3VuZCB0by4KLSAgICAgICAgICAgICAgSXRlcmF0b3IgbWlzc2luZ0ZhY2V0c0l0ciA9IG1pc3NpbmdGYWNldHMuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgICAgd2hpbGUgKG1pc3NpbmdGYWNldHNJdHIuaGFzTmV4dCgpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSVByb2plY3RGYWNldCBmYWNldCA9ICgoSVByb2plY3RGYWNldFZlcnNpb24pbWlzc2luZ0ZhY2V0c0l0ci5uZXh0KCkpLmdldFByb2plY3RGYWNldCgpOwotICAgICAgICAgICAgICAgIC8vR2V0IHRoZSBoaWdoZXN0IGxldmVsIG9mIHRoaXMgZmFjZXQgc3VwcG9ydGVkIGJ5IHRoZSBydW50aW1lLgotICAgICAgICAgICAgICAgIExpc3QgdmVyc2lvbnMgPSBudWxsOwotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIHZlcnNpb25zID0gZmFjZXQuZ2V0U29ydGVkVmVyc2lvbnMoZmFsc2UpOwotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFZlcnNpb25Gb3JtYXRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICBTZXQgdmVyc2lvblNldCA9IGZhY2V0LmdldFZlcnNpb25zKCk7Ci0gICAgICAgICAgICAgICAgICAgIEl0ZXJhdG9yIGl0ciA9IHZlcnNpb25TZXQuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgICAgICAgICAgdmVyc2lvbnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChpdHIuaGFzTmV4dCgpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9ucy5hZGQoaXRyLm5leHQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICB9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgU2V0IHZlcnNpb25TZXQgPSBmYWNldC5nZXRWZXJzaW9ucygpOwotICAgICAgICAgICAgICAgICAgICBJdGVyYXRvciBpdHIgPSB2ZXJzaW9uU2V0Lml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICAgICAgICAgIHZlcnNpb25zID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaXRyLmhhc05leHQoKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbnMuYWRkKGl0ci5uZXh0KCkpOwotICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vSXRlcmF0ZSBvdmVyIHRoZSB2ZXJzaW9ucyBpbiBkZXNjZW5kaW5nIG9yZGVyIGFuZCBwaWNrIHRoZSAKLSAgICAgICAgICAgICAgICAvL2ZpcnN0IG9uZSB0aGF0IGZSdW50aW1lIHN1cHBvcnRzLgotICAgICAgICAgICAgICAgIEl0ZXJhdG9yIHZlcnNpb25zSXRyID0gdmVyc2lvbnMuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgICAgICB3aGlsZSh2ZXJzaW9uc0l0ci5oYXNOZXh0KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgYm9vbGVhbiBtYXRjaCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgSVByb2plY3RGYWNldFZlcnNpb24gcGZ2ID0gKElQcm9qZWN0RmFjZXRWZXJzaW9uKXZlcnNpb25zSXRyLm5leHQoKTsKLSAgICAgICAgICAgICAgICAgIFNldCBwZnZzID0gbmV3IEhhc2hTZXQoKTsKLSAgICAgICAgICAgICAgICAgIHBmdnMuYWRkKHBmdik7Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgIC8vQ2hlY2sgdGhlIHJlcXVpcmVkIGZhY2V0cyB0byBzZWUgaWYgdGhpcyB2ZXJzaW9uIG9mIHRoaXMgZmFjZXQgaXMgc3VwcG9ydGVkLgotICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaj0wOyBqPHJmdnMubGVuZ3RoOyBqKyspCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFJlcXVpcmVkRmFjZXRWZXJzaW9uIHJmdiA9IHJmdnNbal07Ci0gICAgICAgICAgICAgICAgICAgIElQcm9qZWN0RmFjZXRWZXJzaW9uIHJwZnYgPSByZnYuZ2V0UHJvamVjdEZhY2V0VmVyc2lvbigpOwotICAgICAgICAgICAgICAgICAgICBpZiAocnBmdi5nZXRQcm9qZWN0RmFjZXQoKS5nZXRJZCgpLmVxdWFscyhwZnYuZ2V0UHJvamVjdEZhY2V0KCkuZ2V0SWQoKSkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICBpZiAocnBmdi5nZXRWZXJzaW9uU3RyaW5nKCkuZXF1YWxzKHBmdi5nZXRWZXJzaW9uU3RyaW5nKCkpKQotICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZnYuZ2V0QWxsb3dOZXdlcigpKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ3JlYXRlclRoYW4ocGZ2LmdldFZlcnNpb25TdHJpbmcoKSwgcnBmdi5nZXRWZXJzaW9uU3RyaW5nKCkpKQotICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLy9DaGVjayBhZ2FpbnN0IFJ1bnRpbWUKLSAgICAgICAgICAgICAgICAgICAgaWYgKEZhY2V0VXRpbHMuZG9lc1J1bnRpbWVTdXBwb3J0RmFjZXRzKGZSdW50aW1lLCBwZnZzKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgIC8vV2UgaGF2ZSBhIG1hdGNoLiBBZGQgdGhpcyBvbmUgdG8gdGhlIG1hc3RlciBzZXQuCi0gICAgICAgICAgICAgICAgICAgICAgZmFjZXRzVG9BZGQuYWRkKHBmdik7Ci0gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgZmFjZXRzVG9BZGQgPSBtaXNzaW5nRmFjZXRzOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzdGF0dXMgPSBhZGRGYWNldHNUb1Byb2plY3QoZlByb2plY3QsIGZhY2V0c1RvQWRkKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0gICAgICAgICAgICAKLSAgICAgIH0KLSAgICB9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKQotICAgIHsKLSAgICAgIC8vRGlzcGxheSBhbiBhcHByb3ByaWF0ZSBlcnJvciBtZXNzYWdlIHRvIHRoZSB1c2VyLgotICAgICAgLy9BIENvcmVFeGNlcHRpb24gY291bGQgaGF2ZSBiZWVuIHRocm93biBmb3IgYW55IG9mIHRoZSBmb2xsb3dpbmcgdGhyZWUgcmVhc29ucwotICAgICAgLy8xLiBUaGUgcHJvamVjdCBkb2VzIG5vdCBleGlzdAotICAgICAgLy8yLiBUaGUgcHJvamVjdCBpcyBub3Qgb3BlbgotICAgICAgLy8zLiBUaGVyZSB3YXMgYSBwcm9ibGVtIGFkZGluZyB0aGUgZmFjZXRzIHRvIHRoZSBwcm9qZWN0LgotICAgICAgCi0gICAgICBpZiAoIXByb2plY3QuZXhpc3RzKCkpCi0gICAgICB7Ci0gICAgICAgIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX1BST0pFQ1RfRE9FU19OT1RfRVhJU1QsIG5ldyBTdHJpbmdbXSB7IHByb2plY3QuZ2V0TmFtZSgpfSkpOyAgICAgICAgICAgIAotICAgICAgfQotICAgICAgZWxzZSBpZiAoIXByb2plY3QuaXNPcGVuKCkpCi0gICAgICB7Ci0gICAgICAgIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX1BST0pFQ1RfSVNfTk9UX09QRU4sIG5ldyBTdHJpbmdbXSB7IHByb2plY3QuZ2V0TmFtZSgpfSkpOyAgICAgICAgICAgIAotICAgICAgfQotICAgICAgZWxzZQotICAgICAgeyAKLSAgICAgICAgc3RhdHVzID0gZ2V0RXJyb3JTdGF0dXNGb3JBZGRpbmdGYWNldHMocHJvamVjdC5nZXROYW1lKCksIGZhY2V0c1RvQWRkLCBjZSk7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0KLSAgCi0KLSAgLyoqCi0gICAqIEFkZHMgdGhlIHByb3ZpZGVkIHNldCBvZiBmYWNldCB2ZXJzaW9ucyB0byB0aGUgcHJvdmlkZWQgZmFjZXRlZCBwcm9qZWN0Ci0gICAqIAotICAgKiBAcGFyYW0gZnByb2plY3QgQSBmYWNldGVkIHByb2plY3Qgd2hpY2ggZXhpc3RzIGluIHRoZSB3b3Jrc3BhY2UKLSAgICogQHBhcmFtIHByb2plY3RGYWNldFZlcnNpb25zIEEgc2V0IGNvbnRhaW5pbmcgZWxlbWVudHMgb2YgdHlwZSB7QGxpbmsgSVByb2plY3RGYWNldFZlcnNpb259Ci0gICAqIEByZXR1cm4gQW4gSVN0YXR1cyB3aXRoIGEgc2V2ZXJpdHkgb2YgSVN0YXR1cy5PSyBpZiB0aGUgZmFjZXQgCi0gICAqIHZlcnNpb25zIHdlcmUgYWRkZWQgc3VjY2Vzc2Z1bGx5LiBPdGhlcndpc2UsIGFuIElTdGF0dXMgd2l0aCBhIHNldmVyaXR5IG9mCi0gICAqIElTdGF0dXMuRVJST1IuIAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBJU3RhdHVzIGFkZEZhY2V0c1RvUHJvamVjdChmaW5hbCBJRmFjZXRlZFByb2plY3QgZnByb2plY3QsIGZpbmFsIFNldCBwcm9qZWN0RmFjZXRWZXJzaW9ucykKLSAgewotICAgIGZpbmFsIElTdGF0dXNbXSBzdGF0dXMgPSBuZXcgSVN0YXR1c1sxXTsKLSAgICBzdGF0dXNbMF0gPSBTdGF0dXMuT0tfU1RBVFVTOwotICAgIGZpbmFsIFNldCBhY3Rpb25zID0gZ2V0SW5zdGFsbEFjdGlvbnMocHJvamVjdEZhY2V0VmVyc2lvbnMpOwotICAgIAotICAgIC8vIENyZWF0ZSBhIHJ1bm5hYmxlIHRoYXQgYXBwbGllcyB0aGUgaW5zdGFsbCBhY3Rpb25zIHRvIHRoZSBmYWNldGVkIHByb2plY3QKLSAgICBJUnVubmFibGVXaXRoUHJvZ3Jlc3MgcnVubmFibGUgPSBuZXcgSVJ1bm5hYmxlV2l0aFByb2dyZXNzKCkKLSAgICB7Ci0gICAgICBwdWJsaWMgdm9pZCBydW4oSVByb2dyZXNzTW9uaXRvciBzaGVsbE1vbml0b3IpIHRocm93cyBJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uLCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbgotICAgICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIGZwcm9qZWN0Lm1vZGlmeShhY3Rpb25zLCBzaGVsbE1vbml0b3IpOwotICAgICAgICB9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICBzdGF0dXNbMF0gPSBnZXRFcnJvclN0YXR1c0ZvckFkZGluZ0ZhY2V0cyhmcHJvamVjdC5nZXRQcm9qZWN0KCkuZ2V0TmFtZSgpLCBwcm9qZWN0RmFjZXRWZXJzaW9ucywgZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9OyAgICAKLSAgICAgICAgCi0gICAgLy8gUnVuIHRoZSBydW5uYWJsZSBpbiBhbm90aGVyIHRocmVhZCB1bmxlc3MgdGhlcmUgaXMgbm8gVUkgdGhyZWFkIChBbnQgc2NlbmFyaW9zKQotICAgIGlmIChEaXNwbGF5LmdldEN1cnJlbnQoKSAhPSBudWxsKQotICAgIHsgICAgCQotCSAgICB0cnkKLQkgICAgewotCSAgICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0UHJvZ3Jlc3NTZXJ2aWNlKCkucnVuKHRydWUsIGZhbHNlLCBydW5uYWJsZSk7Ci0JICAgIH0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaXRlKQotCSAgICB7Ci0JICAgICAgc3RhdHVzWzBdID0gZ2V0RXJyb3JTdGF0dXNGb3JBZGRpbmdGYWNldHMoZnByb2plY3QuZ2V0UHJvamVjdCgpLmdldE5hbWUoKSwgcHJvamVjdEZhY2V0VmVyc2lvbnMsIGl0ZSk7Ci0JICAgIH0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGllKQotCSAgICB7Ci0JICAgICAgc3RhdHVzWzBdID0gZ2V0RXJyb3JTdGF0dXNGb3JBZGRpbmdGYWNldHMoZnByb2plY3QuZ2V0UHJvamVjdCgpLmdldE5hbWUoKSwgcHJvamVjdEZhY2V0VmVyc2lvbnMsIGllKTsKLQkgICAgfQotCX0KLQllbHNlCi0JewotCQl0cnkKLSAgICAgICAgewotICAgICAgICAgIGZwcm9qZWN0Lm1vZGlmeShhY3Rpb25zLCBudWxsKTsKLSAgICAgICAgfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgc3RhdHVzWzBdID0gZ2V0RXJyb3JTdGF0dXNGb3JBZGRpbmdGYWNldHMoZnByb2plY3QuZ2V0UHJvamVjdCgpLmdldE5hbWUoKSwgcHJvamVjdEZhY2V0VmVyc2lvbnMsIGUpOwotICAgICAgICB9Ci0JfQotICAgIAotICAgIHJldHVybiBzdGF0dXNbMF07Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIGFuIGVycm9yIHN0YXR1cyBpbmRpY2F0aW5nIHRoYXQgdGhlIGZhY2V0IHZlcnNpb25zIGNvdWxkIG5vdCBiZQotICAgKiBhZGRlZCB0byB0aGUgZmFjZXRlZCBwcm9qZWN0Ci0gICAqIAotICAgKiBAcGFyYW0gcHJvamVjdE5hbWUgYSBwcm9qZWN0IG5hbWUgdG8gaW5zZXJ0IGluIHRoZSBlcnJvciBtZXNzYWdlIGluIHRoZSBJU3RhdHVzCi0gICAqIEBwYXJhbSBwcm9qZWN0RmFjZXRWZXJzaW9ucyBhIHNldCBjb250YWluaW5nIGVsZW1lbnRzIG9mIHR5cGUge0BsaW5rIElQcm9qZWN0RmFjZXRWZXJzaW9ufS4KLSAgICogVGhlIGZhY2V0cyBpbiB0aGlzIHNldCB3aWxsIGJlIGxpc3RlZCBpbiB0aGUgZXJyb3IgbWVzc2FnZSBpbiB0aGUgSVN0YXR1cy4KLSAgICogQHBhcmFtIHQgYSBUaHJvd2FibGUgd2hpY2ggd2lsbCBiZSBpbnNlcnRlZCBpbiB0aGUgSVN0YXR1cwotICAgKiBAcmV0dXJuIGFuIElTdGF0dXMgd2l0aCBzZXZlcml0eSBJU3RhdHVzLkVSUk9SCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBJU3RhdHVzIGdldEVycm9yU3RhdHVzRm9yQWRkaW5nRmFjZXRzKFN0cmluZyBwcm9qZWN0TmFtZSwgU2V0IHByb2plY3RGYWNldFZlcnNpb25zLCBUaHJvd2FibGUgdCkKLSAgewotICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICBpbnQgc2l6ZSA9IHByb2plY3RGYWNldFZlcnNpb25zLnNpemUoKTsKLSAgICBpZiAoc2l6ZSA+IDApCi0gICAgeyAgICAgICAgICAKLSAgICAgIFNldCBmYWNldHMgPSBuZXcgSGFzaFNldCgpOwotICAgICAgLy9JdGVyYXRlIG92ZXIgcHJvamVjdEZhY2V0VmVyc2lvbnMgdG8gZm9ybSBhIHNldCBvZiBJUHJvamVjdEZhY2V0cwotICAgICAgSXRlcmF0b3IgaXRyID0gcHJvamVjdEZhY2V0VmVyc2lvbnMuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdHIuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBJUHJvamVjdEZhY2V0VmVyc2lvbiBwcm9qZWN0RmFjZXQgPSAoSVByb2plY3RGYWNldFZlcnNpb24paXRyLm5leHQoKTsKLSAgICAgICAgSVByb2plY3RGYWNldCBmYWNldCA9IHByb2plY3RGYWNldC5nZXRQcm9qZWN0RmFjZXQoKTsKLSAgICAgICAgZmFjZXRzLmFkZChmYWNldCk7Ci0gICAgICB9Ci0gICAgICBTdHJpbmcgZmFjZXRMaXN0ID0gZ2V0RmFjZXRMaXN0TWVzc2FnZVN0cmluZyhmYWNldHMpOwotICAgICAgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfQURESU5HX0ZBQ0VUU19UT19QUk9KRUNULCBuZXcgU3RyaW5nW10geyBwcm9qZWN0TmFtZSwgZmFjZXRMaXN0fSksIHQpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gc3RhdHVzOwotICB9Ci0gIAotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBmYWNldGVkIHByb2plY3Qgd2l0aCB0aGUgcHJvdmlkZWQgbmFtZQotICAgKiAKLSAgICogQHBhcmFtIHByb2plY3ROYW1lIEEgU3RyaW5nIGNvbnRhaW5pbmcgdGhlIG5hbWUgb2YgdGhlIHByb2plY3QgdG8gYmUgY3JlYXRlZAotICAgKiBAcmV0dXJuIEFuIElTdGF0dXMgd2l0aCBhIHNldmVyaXR5IG9mIElTdGF0dXMuT0sgaWYgdGhlIGZhY2V0ZWQgcHJvamVjdAotICAgKiB3YXMgY3JlYXRlZCBzdWNjZXNzZnVsbHkgb3IgaWYgYSBwcm9qZWN0IG9mIHRoZSBwcm92aWRlZCBuYW1lIGFscmVhZHkKLSAgICogZXhpc3RzIGluIHRoZSB3b3Jrc3BhY2UuIE90aGVyd2lzZSwgYW4gSVN0YXR1cyB3aXRoIHNldmVyaXR5IG9mCi0gICAqIElTdGF0dXMuRVJST1IuIAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBJU3RhdHVzIGNyZWF0ZU5ld0ZhY2V0ZWRQcm9qZWN0KGZpbmFsIFN0cmluZyBwcm9qZWN0TmFtZSkKLSAgewotICAgIGZpbmFsIElTdGF0dXNbXSBzdGF0dXMgPSBuZXcgSVN0YXR1c1sxXTsKLSAgICBzdGF0dXNbMF0gPSBTdGF0dXMuT0tfU1RBVFVTOwotICAgIElQcm9qZWN0IHByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QocHJvamVjdE5hbWUpOwotICAgIGlmICghcHJvamVjdC5leGlzdHMoKSkKLSAgICB7Ci0gICAgICAvLyBDcmVhdGUgYSBydW5uYWJsZSB0aGF0IGNyZWF0ZXMgYSBuZXcgZmFjZXRlZCBwcm9qZWN0LgotICAgICAgSVJ1bm5hYmxlV2l0aFByb2dyZXNzIHJ1bm5hYmxlID0gbmV3IElSdW5uYWJsZVdpdGhQcm9ncmVzcygpCi0gICAgICB7Ci0gICAgICAgIHB1YmxpYyB2b2lkIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIHNoZWxsTW9uaXRvcikgdGhyb3dzIEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24sIEludGVycnVwdGVkRXhjZXB0aW9uCi0gICAgICAgIHsKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBJRmFjZXRlZFByb2plY3QgZlByb2plY3QgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5jcmVhdGUocHJvamVjdE5hbWUsIG51bGwsIHNoZWxsTW9uaXRvcik7Ci0gICAgICAgICAgICBpZiAoZlByb2plY3QgPT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgc3RhdHVzWzBdID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfUFJPSkVDVF9DUkVBVElPTiwgbmV3IFN0cmluZ1tdIHsgcHJvamVjdE5hbWUgfSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBzdGF0dXNbMF0gPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZChDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9QUk9KRUNUX0NSRUFUSU9OLCBuZXcgU3RyaW5nW10geyBwcm9qZWN0TmFtZSB9KSwgZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9OwotCi0gICAgLy8gUnVuIHRoZSBydW5uYWJsZSBpbiBhbm90aGVyIHRocmVhZCB1bmxlc3MgdGhlcmUgaXMgbm8gVUkgdGhyZWFkIChBbnQgc2NlbmFyaW9zKSAgICAJICAKLSAgICAgIHRyeQotICAgICAgewotICAgIAkgIGlmIChEaXNwbGF5LmdldEN1cnJlbnQoKSAhPSBudWxsKQotICAgIAkgIHsKLSAgICAJCSAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRQcm9ncmVzc1NlcnZpY2UoKS5ydW4odHJ1ZSwgZmFsc2UsIHJ1bm5hYmxlKTsgICAgCQkgIAotICAgIAkgIH0KLSAgICAJICBlbHNlCi0gICAgCSAgewotICAgIAkJICB0cnkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIElGYWNldGVkUHJvamVjdCBmUHJvamVjdCA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmNyZWF0ZShwcm9qZWN0TmFtZSwgbnVsbCwgbnVsbCk7Ci0gICAgICAgICAgICAgICAgaWYgKGZQcm9qZWN0ID09IG51bGwpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgc3RhdHVzWzBdID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfUFJPSkVDVF9DUkVBVElPTiwgbmV3IFN0cmluZ1tdIHsgcHJvamVjdE5hbWUgfSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3RhdHVzWzBdID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfUFJPSkVDVF9DUkVBVElPTiwgbmV3IFN0cmluZ1tdIHsgcHJvamVjdE5hbWUgfSksIGUpOwotICAgICAgICAgICAgICB9ICAKLSAgICAJICB9ICAgICAgICAKLSAgICAgIH0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaXRlKQotICAgICAgewotICAgICAgICBzdGF0dXNbMF0gPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZChDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9QUk9KRUNUX0NSRUFUSU9OLCBuZXcgU3RyaW5nW10geyBwcm9qZWN0TmFtZSB9KSwgaXRlKTsKLSAgICAgIH0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGllKQotICAgICAgewotICAgICAgICBzdGF0dXNbMF0gPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZChDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9QUk9KRUNUX0NSRUFUSU9OLCBuZXcgU3RyaW5nW10geyBwcm9qZWN0TmFtZSB9KSwgaWUpOwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBzdGF0dXNbMF07Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBTZXRzIHRoZSBwcm92aWRlZCBzZXQgb2YgZmFjZXRzIGFzIGZpeGVkIG9uIHRoZSBmYWNldGVkIHByb2plY3QKLSAgICogCi0gICAqIEBwYXJhbSBmUHJvamVjdCBBIGZhY2V0ZWQgcHJvamVjdCB3aGljaCBleGlzdHMgaW4gdGhlIHdvcmtzcGFjZQotICAgKiBAcGFyYW0gZml4ZWRGYWNldHMgQSBzZXQgY29udGFpbmluZyBlbGVtZW50cyBvZiB0eXBlIHtAbGluayBJUHJvamVjdEZhY2V0fQotICAgKiBAcmV0dXJuIEFuIElTdGF0dXMgd2l0aCBhIHNldmVyaXR5IG9mIElTdGF0dXMuT0sgaWYgdGhlIGZhY2V0cyAKLSAgICogd2VyZSBzdWNjZXNzZnVsbHkgc2V0IGFzIGZpeGVkIGZhY2V0cyBvbiB0aGUgZmFjZXRlZCBwcm9qZWN0LiAKLSAgICogT3RoZXJ3aXNlLCBhbiBJU3RhdHVzIHdpdGggYSBzZXZlcml0eSBvZiBJU3RhdHVzLkVSUk9SLgotICAgKiAKLSAgICogQHNlZSBJRmFjZXRlZFByb2plY3Qjc2V0Rml4ZWRQcm9qZWN0RmFjZXRzCi0gICAqLwotICBwdWJsaWMgc3RhdGljIElTdGF0dXMgc2V0Rml4ZWRGYWNldHNPblByb2plY3QoZmluYWwgSUZhY2V0ZWRQcm9qZWN0IGZQcm9qZWN0LCBmaW5hbCBTZXQgZml4ZWRGYWNldHMpCi0gIHsKLSAgICBmaW5hbCBJU3RhdHVzW10gc3RhdHVzID0gbmV3IElTdGF0dXNbMV07Ci0gICAgc3RhdHVzWzBdID0gU3RhdHVzLk9LX1NUQVRVUzsKLQotICAgIC8vQ3JlYXRlIGEgcnVubmFibGUgdGhhdCBzZXRzIHRoZSBmaXhlZCBmYWNldHMgb24gdGhlIGZhY2V0ZWQgcHJvamVjdAotICAgIElSdW5uYWJsZVdpdGhQcm9ncmVzcyBydW5uYWJsZSA9IG5ldyBJUnVubmFibGVXaXRoUHJvZ3Jlc3MoKQotICAgIHsKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIHNoZWxsTW9uaXRvcikgdGhyb3dzIEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24sIEludGVycnVwdGVkRXhjZXB0aW9uCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgZlByb2plY3Quc2V0Rml4ZWRQcm9qZWN0RmFjZXRzKGZpeGVkRmFjZXRzKTsKLSAgICAgICAgfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgc3RhdHVzWzBdID0gZ2V0RXJyb3JTdGF0dXNGb3JTZXR0aW5nRml4ZWRGYWNldHMoZlByb2plY3QuZ2V0UHJvamVjdCgpLmdldE5hbWUoKSwgZml4ZWRGYWNldHMsIGUpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfTsKLQotICAgIC8vIFJ1biB0aGUgcnVubmFibGUgaW4gYW5vdGhlciB0aHJlYWQgdW5sZXNzIHRoZXJlIGlzIG5vIFVJIHRocmVhZCAoQW50IHNjZW5hcmlvcykKLSAgICBpZiAoRGlzcGxheS5nZXRDdXJyZW50KCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgCXRyeQotICAgICAgICB7Ci0gICAgICAgICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRQcm9ncmVzc1NlcnZpY2UoKS5ydW4odHJ1ZSwgZmFsc2UsIHJ1bm5hYmxlKTsKLSAgICAgICAgfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBpdGUpCi0gICAgICAgIHsKLSAgICAgICAgICBzdGF0dXNbMF0gPSBnZXRFcnJvclN0YXR1c0ZvclNldHRpbmdGaXhlZEZhY2V0cyhmUHJvamVjdC5nZXRQcm9qZWN0KCkuZ2V0TmFtZSgpLCBmaXhlZEZhY2V0cywgaXRlKTsKLSAgICAgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gaWUpCi0gICAgICAgIHsKLSAgICAgICAgICBzdGF0dXNbMF0gPSBnZXRFcnJvclN0YXR1c0ZvclNldHRpbmdGaXhlZEZhY2V0cyhmUHJvamVjdC5nZXRQcm9qZWN0KCkuZ2V0TmFtZSgpLCBmaXhlZEZhY2V0cywgaWUpOwotICAgICAgICB9CQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgIAl0cnkKLSAgICAgICAgewotICAgICAgICAgIGZQcm9qZWN0LnNldEZpeGVkUHJvamVjdEZhY2V0cyhmaXhlZEZhY2V0cyk7Ci0gICAgICAgIH0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIHN0YXR1c1swXSA9IGdldEVycm9yU3RhdHVzRm9yU2V0dGluZ0ZpeGVkRmFjZXRzKGZQcm9qZWN0LmdldFByb2plY3QoKS5nZXROYW1lKCksIGZpeGVkRmFjZXRzLCBlKTsKLSAgICAgICAgfQotICAgIH0gICAgICAgCi0gICAgCi0gICAgcmV0dXJuIHN0YXR1c1swXTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgYW4gZXJyb3Igc3RhdHVzIGluZGljYXRpbmcgdGhhdCB0aGUgZmFjZXRzIGNvdWxkIG5vdCBiZQotICAgKiBzZXQgYXMgZml4ZWQgZmFjZXRzIG9uIHRoZSBmYWNldGVkIHByb2plY3QKLSAgICogCi0gICAqIEBwYXJhbSBwcm9qZWN0TmFtZSBhIHByb2plY3QgbmFtZSB0byBpbnNlcnQgaW4gdGhlIGVycm9yIG1lc3NhZ2UgaW4gdGhlIElTdGF0dXMKLSAgICogQHBhcmFtIGZhY2V0cyBhIHNldCBjb250YWluaW5nIGVsZW1lbnRzIG9mIHR5cGUge0BsaW5rIElQcm9qZWN0RmFjZXR9LgotICAgKiBUaGUgZmFjZXRzIGluIHRoaXMgc2V0IHdpbGwgYmUgbGlzdGVkIGluIHRoZSBlcnJvciBtZXNzYWdlIGluIHRoZSBJU3RhdHVzLgotICAgKiBAcGFyYW0gdCBhIFRocm93YWJsZSB3aGljaCB3aWxsIGJlIGluc2VydGVkIGluIHRoZSBJU3RhdHVzCi0gICAqIEByZXR1cm4gYW4gSVN0YXR1cyB3aXRoIHNldmVyaXR5IElTdGF0dXMuRVJST1IKLSAgICovCi0gIHByaXZhdGUgc3RhdGljIElTdGF0dXMgZ2V0RXJyb3JTdGF0dXNGb3JTZXR0aW5nRml4ZWRGYWNldHMoU3RyaW5nIHByb2plY3ROYW1lLCBTZXQgZmFjZXRzLCBUaHJvd2FibGUgdCkKLSAgewotICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICBpbnQgc2l6ZSA9IGZhY2V0cy5zaXplKCk7Ci0gICAgaWYgKHNpemUgPiAwKQotICAgIHsgICAgICAgICAgCi0gICAgICBTdHJpbmcgZmFjZXRMaXN0ID0gZ2V0RmFjZXRMaXN0TWVzc2FnZVN0cmluZyhmYWNldHMpOyAgICAgIAotICAgICAgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfRklYRURfRkFDRVRTLCBuZXcgU3RyaW5nW10geyBwcm9qZWN0TmFtZSwgZmFjZXRMaXN0fSksIHQpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gc3RhdHVzOwotICB9ICAKLSAgCi0gIAotICAvKioKLSAgICogQmluZHMgdGhlIGZhY2V0ZWQgcHJvamVjdCB0byB0aGUgZmFjZXQgcnVudGltZQotICAgKiAKLSAgICogQHBhcmFtIGZQcm9qZWN0IEEgZmFjZXRlZCBwcm9qZWN0IHdoaWNoIGV4aXN0cyBpbiB0aGUgd29ya3NwYWNlCi0gICAqIEBwYXJhbSBmUnVudGltZSBBIGZhY2V0IHJ1bnRpbWUKLSAgICogQHJldHVybiBBbiBJU3RhdHVzIHdpdGggYSBzZXZlcml0eSBvZiBJU3RhdHVzLk9LIGlmIHRoZSBmYWNldGVkIHByb2plY3QKLSAgICogd2FzIGJvdW5kIHRvIHRoZSBmYWNldCBydW50aW1lIHN1Y2Nlc3NmdWxseS4gT3RoZXJ3aXNlLCBhbiBJU3RhdHVzIHdpdGggc2V2ZXJpdHkgb2YKLSAgICogSVN0YXR1cy5FUlJPUi4gCi0gICAqLwotICBwdWJsaWMgc3RhdGljIElTdGF0dXMgc2V0RmFjZXRSdW50aW1lT25Qcm9qZWN0KGZpbmFsIElGYWNldGVkUHJvamVjdCBmUHJvamVjdCwgZmluYWwgSVJ1bnRpbWUgZlJ1bnRpbWUpCi0gIHsKLSAgICBmaW5hbCBJU3RhdHVzW10gc3RhdHVzID0gbmV3IElTdGF0dXNbMV07Ci0gICAgc3RhdHVzWzBdID0gU3RhdHVzLk9LX1NUQVRVUzsKLQotICAgIC8vQ3JlYXRlIGEgcnVubmFibGUgdGhhdCBzZXRzIHRoZSBmYWNldCBydW50aW1lIG9uIHRoZSBmYWNldGVkIHByb2plY3QKLSAgICBJUnVubmFibGVXaXRoUHJvZ3Jlc3MgcnVubmFibGUgPSBuZXcgSVJ1bm5hYmxlV2l0aFByb2dyZXNzKCkKLSAgICB7Ci0gICAgICBwdWJsaWMgdm9pZCBydW4oSVByb2dyZXNzTW9uaXRvciBzaGVsbE1vbml0b3IpIHRocm93cyBJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uLCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbgotICAgICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAJZlByb2plY3Quc2V0VGFyZ2V0ZWRSdW50aW1lcyhDb2xsZWN0aW9ucy5zaW5nbGV0b24oZlJ1bnRpbWUpLCBzaGVsbE1vbml0b3IpOwotICAgICAgICB9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICBzdGF0dXNbMF0gPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhOTFMuYmluZChDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9TRVRUSU5HX1JVTlRJTUUsIG5ldyBTdHJpbmdbXSB7IGZQcm9qZWN0LmdldFByb2plY3QoKS5nZXROYW1lKCksIGZSdW50aW1lLmdldE5hbWUoKSB9KSwgZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9OwotCi0gICAgLy8gUnVuIHRoZSBydW5uYWJsZSBpbiBhbm90aGVyIHRocmVhZCB1bmxlc3MgdGhlcmUgaXMgbm8gVUkgdGhyZWFkIChBbnQgc2NlbmFyaW9zKQotICAgIGlmIChEaXNwbGF5LmdldEN1cnJlbnQoKSAhPSBudWxsKQotICAgIHsKLSAgICAJdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldFByb2dyZXNzU2VydmljZSgpLnJ1bih0cnVlLCBmYWxzZSwgcnVubmFibGUpOwotICAgICAgICB9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl0ZSkKLSAgICAgICAgewotICAgICAgICAgIHN0YXR1c1swXSA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX1NFVFRJTkdfUlVOVElNRSwgbmV3IFN0cmluZ1tdIHsgZlByb2plY3QuZ2V0UHJvamVjdCgpLmdldE5hbWUoKSwgZlJ1bnRpbWUuZ2V0TmFtZSgpIH0pLCBpdGUpOwotICAgICAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBpZSkKLSAgICAgICAgewotICAgICAgICAgIHN0YXR1c1swXSA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX1NFVFRJTkdfUlVOVElNRSwgbmV3IFN0cmluZ1tdIHsgZlByb2plY3QuZ2V0UHJvamVjdCgpLmdldE5hbWUoKSwgZlJ1bnRpbWUuZ2V0TmFtZSgpIH0pLCBpZSk7Ci0gICAgICAgIH0JCi0gICAgfQotICAgIGVsc2UgCi0gICAgewotICAgIAl0cnkKLSAgICAgICAgewotICAgIAkJZlByb2plY3Quc2V0VGFyZ2V0ZWRSdW50aW1lcyhDb2xsZWN0aW9ucy5zaW5nbGV0b24oZlJ1bnRpbWUpLCBudWxsKTsgLy9qdmggLSBoYXBwZW5zIGhlcmUuLi4KLSAgICAgICAgfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgc3RhdHVzWzBdID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfU0VUVElOR19SVU5USU1FLCBuZXcgU3RyaW5nW10geyBmUHJvamVjdC5nZXRQcm9qZWN0KCkuZ2V0TmFtZSgpLCBmUnVudGltZS5nZXROYW1lKCkgfSksIGUpOwotICAgICAgICB9Ci0gICAgfQotICAgICAgICAKLSAgICAKLSAgICByZXR1cm4gc3RhdHVzWzBdOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyBhIHRyYW5zbGF0YWJsZSBkZWxpbWl0ZWQgbGlzdCBvZiBmYWNldCBsYWJlbHMgZGVyaXZlZCBmcm9tIHRoZSBwcm92aWRlZAotICAgKiBzZXQgb2YgZmFjZXRzCi0gICAqIAotICAgKiBAcGFyYW0gZmFjZXRzIGEgc2V0IGNvbnRhaW5pbmcgZWxlbWVudHMgb2YgdHlwZSB7QGxpbmsgSVByb2plY3RGYWNldH0KLSAgICogQHJldHVybiBTdHJpbmcgYSBkZWxpbWl0ZWQgbGlzdCBvZiBmYWNldCBsYWJlbHMKLSAgICovCi0gIHByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRGYWNldExpc3RNZXNzYWdlU3RyaW5nKFNldCBmYWNldHMpCi0gIHsKLSAgICBTdHJpbmcgZmFjZXRMaXN0TWVzc2FnZSA9ICIiOwotICAgIGludCBzaXplID0gZmFjZXRzLnNpemUoKTsKLSAgICBpZiAoc2l6ZSA+IDApCi0gICAgewotICAgICAgSXRlcmF0b3IgaXRyID0gZmFjZXRzLml0ZXJhdG9yKCk7Ci0gICAgICBJUHJvamVjdEZhY2V0IGZpcnN0UHJvamVjdEZhY2V0ID0gKElQcm9qZWN0RmFjZXQpaXRyLm5leHQoKTsKLSAgICAgIGZhY2V0TGlzdE1lc3NhZ2UgPSBmaXJzdFByb2plY3RGYWNldC5nZXRMYWJlbCgpOwotICAgICAgCi0gICAgICAvL0NvbnRpbnVlIGFwcGVuZGluZyB0byBmYWNldExpc3RNZXNzYWdlIHVudGlsIGFsbCB0aGUgZmFjZXQgbGFiZWxzCi0gICAgICAvL2FyZSBpbiB0aGUgbGlzdC4KLSAgICAgIHdoaWxlIChpdHIuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBJUHJvamVjdEZhY2V0IHByb2plY3RGYWNldCA9IChJUHJvamVjdEZhY2V0KWl0ci5uZXh0KCk7Ci0gICAgICAgIFN0cmluZyBwZkxhYmVsID0gcHJvamVjdEZhY2V0LmdldExhYmVsKCk7Ci0gICAgICAgIGZhY2V0TGlzdE1lc3NhZ2UgPSBOTFMuYmluZChDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19GQUNFVFMsIG5ldyBTdHJpbmdbXSB7ZmFjZXRMaXN0TWVzc2FnZSwgcGZMYWJlbH0pOwotICAgICAgfSAgICAgICAgICAgIAotICAgIH0gICAgCi0gICAgCi0gICAgcmV0dXJuIGZhY2V0TGlzdE1lc3NhZ2U7Ci0gIH0KLSAgCi0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgc2V0IG9mIGZhY2V0IHZlcnNpb25zIHdoaWNoIGNhbiBiZSBpbmZlcnJlZCBmcm9tIHRoZSBwcm92aWRlZCBKYXZhIHByb2plY3QKLSAgICogCi0gICAqIEBwYXJhbSBqYXZhUHJvamVjdCBhIEphdmEgcHJvamVjdCB0aGF0IGV4aXN0cyBpbiB0aGUgd29ya3NwYWNlLiBNdXN0IG5vdCBiZSBudWxsLgotICAgKiBAcmV0dXJuIFNldCBjb250YWluaW5nIGVsZW1lbnRzIG9mIHR5cGUge0BsaW5rIElQcm9qZWN0RmFjZXRWZXJzaW9ufQotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTZXQgZ2V0RmFjZXRzRm9ySmF2YVByb2plY3QoSUphdmFQcm9qZWN0IGphdmFQcm9qZWN0KQotICB7Ci0gICAgU2V0IGZhY2V0cyA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgU3RyaW5nIGpka0NvbXBsaWFuY2VMZXZlbCA9IG51bGw7Ci0gICAgaWYgKGphdmFQcm9qZWN0IT1udWxsKQotICAgIHsKLSAgICAgIGpka0NvbXBsaWFuY2VMZXZlbCA9IGphdmFQcm9qZWN0LmdldE9wdGlvbigib3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZSIsIGZhbHNlKTsKLSAgICAgIGlmIChqZGtDb21wbGlhbmNlTGV2ZWwgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgamRrQ29tcGxpYW5jZUxldmVsID0gSmF2YUNvcmUuZ2V0T3B0aW9uKEphdmFDb3JlLkNPTVBJTEVSX0NPTVBMSUFOQ0UpOwotICAgICAgICBpZiAoamRrQ29tcGxpYW5jZUxldmVsID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBqZGtDb21wbGlhbmNlTGV2ZWwgPSAiMS40IjsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAKLSAgICBJUHJvamVjdEZhY2V0IGphdmFGYWNldCA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmdldFByb2plY3RGYWNldChJTW9kdWxlQ29uc3RhbnRzLkpTVF9KQVZBKTsKLSAgICBJUHJvamVjdEZhY2V0VmVyc2lvbiBqYXZhRmFjZXRWZXJzaW9uID0gbnVsbDsKLSAgICBpZiAoamRrQ29tcGxpYW5jZUxldmVsLmVxdWFscygiMS4zIikpCi0gICAgewotICAgICAgamF2YUZhY2V0VmVyc2lvbiA9IGphdmFGYWNldC5nZXRWZXJzaW9uKCIxLjMiKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoamRrQ29tcGxpYW5jZUxldmVsLmVxdWFscygiMS40IikpCi0gICAgewotICAgICAgamF2YUZhY2V0VmVyc2lvbiA9IGphdmFGYWNldC5nZXRWZXJzaW9uKCIxLjQiKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoamRrQ29tcGxpYW5jZUxldmVsLmVxdWFscygiMS41IikpCi0gICAgewotICAgICAgamF2YUZhY2V0VmVyc2lvbiA9IGphdmFGYWNldC5nZXRWZXJzaW9uKCI1LjAiKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGphdmFGYWNldFZlcnNpb24gPSBqYXZhRmFjZXQuZ2V0VmVyc2lvbigiMS40Iik7Ci0gICAgfQotIAotICAgIGZhY2V0cy5hZGQoamF2YUZhY2V0VmVyc2lvbik7Ci0gICAgSVByb2plY3RGYWNldCB1dGlsaXR5RmFjZXQgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5nZXRQcm9qZWN0RmFjZXQoSU1vZHVsZUNvbnN0YW50cy5KU1RfVVRJTElUWV9NT0RVTEUpOwotICAgIElQcm9qZWN0RmFjZXRWZXJzaW9uIHV0aWxpdHlGYWNldFZlcnNpb24gPSBudWxsOwotICAgIHRyeQotICAgIHsKLSAgICAgIHV0aWxpdHlGYWNldFZlcnNpb24gPSB1dGlsaXR5RmFjZXQuZ2V0TGF0ZXN0VmVyc2lvbigpOwotICAgIH0KLSAgICBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkKLSAgICB7Ci0gICAgICAKLSAgICB9Ci0gICAgaWYgKHV0aWxpdHlGYWNldFZlcnNpb24gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmYWNldHMuYWRkKHV0aWxpdHlGYWNldFZlcnNpb24pOwotICAgIH0KLSAgICByZXR1cm4gZmFjZXRzOwotICB9Ci0gIAotICAKLSAgLy9NZXRob2RzIHJlbGF0ZWQgdG8gZmFjZXQgcnVudGltZXMuCi0gIAotICAvKioKLSAgICogUmV0dXJucyBhIHNldCBvZiBmYWNldCBydW50aW1lcyB0aGF0IHN1cHBvcnQgdGhlIGdpdmVuCi0gICAqIHJlcXVpcmVkIGZhY2V0IHZlcnNpb25zLgotICAgKiBAcGFyYW0gcmVxdWlyZWRGYWNldFZlcnNpb25zIGFuIGFycmF5IGNvbnRhaW5pbmcgZWxlbWVudHMgb2YgdHlwZSB7QGxpbmsgUmVxdWlyZWRGYWNldFZlcnNpb259Ci0gICAqIEByZXR1cm4gU2V0IHNldCBvZiBmYWNldCBydW50aW1lcyB0aGF0IHN1cHBvcnQgdGhlIGdpdmVuIHJlcXVpcmVkIGZhY2V0IHZlcnNpb25zLgotICAgKiAoZWxlbWVudCB0eXBlOiB7QGxpbmsgSVJ1bnRpbWV9KSAKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU2V0IGdldFJ1bnRpbWVzKFJlcXVpcmVkRmFjZXRWZXJzaW9uW10gcmVxdWlyZWRGYWNldFZlcnNpb25zKQotICB7Ci0gICAgLy9Gb3JtIHRoZSBzZXRzIG9mIElQcm9qZWN0RmFjZXRWZXJzaW9ucyB0aGVzZSBSZXF1aXJlZEZhY2V0VmVyc2lvbnMgcmVwcmVzZW50LgotICAgIEFycmF5TGlzdCBsaXN0T2ZGYWNldFNldHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgCi0gICAgSGFzaFNldCBmYWNldHMgPSBuZXcgSGFzaFNldCgpOwotICAgIGludCBqYXZhRmFjZXRJbmRleCA9IC0xOwotICAgIGZvciAoaW50IGk9MDsgaTxyZXF1aXJlZEZhY2V0VmVyc2lvbnMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgSVByb2plY3RGYWNldFZlcnNpb24gcGZ2ID0gcmVxdWlyZWRGYWNldFZlcnNpb25zW2ldLmdldFByb2plY3RGYWNldFZlcnNpb24oKTsKLSAgICAgIGlmIChGYWNldFV0aWxzLmlzSmF2YUZhY2V0KHBmdi5nZXRQcm9qZWN0RmFjZXQoKSkpCi0gICAgICB7Ci0gICAgICAgIC8vUmVtZW1iZXIgdGhlIGluZGV4Ci0gICAgICAgIGphdmFGYWNldEluZGV4ID0gaTsKLSAgICAgIH0KLSAgICAgIGZhY2V0cy5hZGQocmVxdWlyZWRGYWNldFZlcnNpb25zW2ldLmdldFByb2plY3RGYWNldFZlcnNpb24oKSk7Ci0gICAgfQotICAgIAotICAgIGxpc3RPZkZhY2V0U2V0cy5hZGQoZmFjZXRzKTsKLSAgICAKLSAgICAvL0lmIHRoZSBqYXZhIGZhY2V0IHdhcyBvbmUgb2YgdGhlIGZhY2V0cyBpbiB0aGUgc2V0LCBhbmQgbmV3IHZlcnNpb25zIG9mIGphdmEgYXJlIGFsbG93ZWQsCi0gICAgLy9jcmVhdGUgc2V0cyB0aGF0IGNvbnRhaW4gdGhlIG5ld2VyIHBlcm1pdHRlZCB2ZXJzaW9ucyBvZiB0aGUgamF2YSBmYWNldHMuCi0gICAgaWYgKGphdmFGYWNldEluZGV4ID4gLTEpCi0gICAgewotICAgICAgQXJyYXlMaXN0IHBlcm1pdHRlZEphdmFWZXJzaW9ucyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgIFJlcXVpcmVkRmFjZXRWZXJzaW9uIHJmdiA9IHJlcXVpcmVkRmFjZXRWZXJzaW9uc1tqYXZhRmFjZXRJbmRleF07Ci0gICAgICBpZiAocmZ2LmdldEFsbG93TmV3ZXIoKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHZlcnNpb24gPSByZnYuZ2V0UHJvamVjdEZhY2V0VmVyc2lvbigpLmdldFZlcnNpb25TdHJpbmcoKTsgICAgICAKLSAgICAgICAgU2V0IGFsbFZlcnNpb25zID0gcmZ2LmdldFByb2plY3RGYWNldFZlcnNpb24oKS5nZXRQcm9qZWN0RmFjZXQoKS5nZXRWZXJzaW9ucygpOwotICAgICAgICBJdGVyYXRvciBpdHIgPSBhbGxWZXJzaW9ucy5pdGVyYXRvcigpOwotICAgICAgICB3aGlsZSAoaXRyLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIElQcm9qZWN0RmFjZXRWZXJzaW9uIHRoaXNQZnYgPSAoSVByb2plY3RGYWNldFZlcnNpb24paXRyLm5leHQoKTsKLSAgICAgICAgICBTdHJpbmcgdGhpc1ZlcnNpb24gPSB0aGlzUGZ2LmdldFZlcnNpb25TdHJpbmcoKTsKLSAgICAgICAgICBpZiAoZ3JlYXRlclRoYW4odGhpc1ZlcnNpb24sIHZlcnNpb24pKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHBlcm1pdHRlZEphdmFWZXJzaW9ucy5hZGQodGhpc1ZlcnNpb24pOwotICAgICAgICAgIH0gICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFN0cmluZ1tdIGphdmFWZXJzaW9ucyA9IChTdHJpbmdbXSlwZXJtaXR0ZWRKYXZhVmVyc2lvbnMudG9BcnJheShuZXcgU3RyaW5nWzBdKTsKLSAgICAgICAgCi0gICAgICAgIGZvciAoaW50IGo9MDsgajxqYXZhVmVyc2lvbnMubGVuZ3RoOyBqKyspCi0gICAgICAgIHsKLSAgICAgICAgICBIYXNoU2V0IHRoaXNGYWNldFNldCA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgICAgICAgCi0gICAgICAgICAgZm9yIChpbnQgaz0wOyBrPHJlcXVpcmVkRmFjZXRWZXJzaW9ucy5sZW5ndGg7IGsrKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAgaWYgKGs9PWphdmFGYWNldEluZGV4KQotICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIElQcm9qZWN0RmFjZXRWZXJzaW9uIHBmdiA9IHJlcXVpcmVkRmFjZXRWZXJzaW9uc1trXS5nZXRQcm9qZWN0RmFjZXRWZXJzaW9uKCkuZ2V0UHJvamVjdEZhY2V0KCkuZ2V0VmVyc2lvbihqYXZhVmVyc2lvbnNbal0pOwotICAgICAgICAgICAgICAgdGhpc0ZhY2V0U2V0LmFkZChwZnYpOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgewotICAgICAgICAgICAgICAgSVByb2plY3RGYWNldFZlcnNpb24gcGZ2ID0gcmVxdWlyZWRGYWNldFZlcnNpb25zW2tdLmdldFByb2plY3RGYWNldFZlcnNpb24oKTsKLSAgICAgICAgICAgICAgIHRoaXNGYWNldFNldC5hZGQocGZ2KTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICAgIGxpc3RPZkZhY2V0U2V0cy5hZGQodGhpc0ZhY2V0U2V0KTsgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy9SZXR1cm4gdGhlIHVuaW9uIG9mIHJ1bnRpbWVzIGZvciBhbGwgdGhlIGZhY2V0U2V0cy4KLSAgICByZXR1cm4gZ2V0UnVudGltZXMoKFNldFtdKWxpc3RPZkZhY2V0U2V0cy50b0FycmF5KG5ldyBTZXRbMF0pKTsKLSAgICAKLSAgfSAgCi0gIAotICAvKioKLSAgICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgcHJvdmlkZWQgZmFjZXQgcnVudGltZSBzdXBwb3J0cyB0aGUgcHJvdmlkZWQKLSAgICogcmVxdWlyZWQgZmFjZXQgdmVyc2lvbnMuCi0gICAqIAotICAgKiBAcGFyYW0gcmVxdWlyZWRGYWNldFZlcnNpb25zIGFuIGFycmF5IGNvbnRhaW5pbmcgZWxlbWVudHMgb2YgdHlwZSB7QGxpbmsgUmVxdWlyZWRGYWNldFZlcnNpb259Ci0gICAqIEBwYXJhbSBmUnVudGltZU5hbWUgbmFtZSBvZiBhIHtAbGluayBJUnVudGltZX0KLSAgICogQHJldHVybiBib29sZWFuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBmYWNldCBydW50aW1lIHN1cHBvcnRzIHRoZSByZXF1aXJlZCBmYWNldCB2ZXJzaW9ucy4KLSAgICogUmV0dXJucyA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzRmFjZXRSdW50aW1lU3VwcG9ydGVkKFJlcXVpcmVkRmFjZXRWZXJzaW9uW10gcmVxdWlyZWRGYWNldFZlcnNpb25zLCBTdHJpbmcgZlJ1bnRpbWVOYW1lKQotICB7Ci0gICAgU2V0IGZSdW50aW1lcyA9IGdldFJ1bnRpbWVzKHJlcXVpcmVkRmFjZXRWZXJzaW9ucyk7Ci0gICAgSXRlcmF0b3IgaXRyID0gZlJ1bnRpbWVzLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgSVJ1bnRpbWUgcnVudGltZSA9IChJUnVudGltZSlpdHIubmV4dCgpOwotICAgICAgaWYgKHJ1bnRpbWUuZ2V0TmFtZSgpLmVxdWFscyhmUnVudGltZU5hbWUpKQotICAgICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0gICAgICAKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gICAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB1bmlvbiBvZiBmYWNldCBydW50aW1lcyB0aGF0IHN1cHBvcnQgdGhlIHByb3ZpZGVkIHNldHMgb2YgZmFjZXQgdmVyc2lvbnMuCi0gICAqIAotICAgKiBAcGFyYW0gZmFjZXRTZXRzIGFycmF5IG9mIFNldHMsIHdoZXJlIGVhY2ggU2V0IGNvbnRhaW5zIGVsZW1lbnRzIG9mIHR5cGUge0BsaW5rIElQcm9qZWN0RmFjZXRWZXJzaW9ufS4KLSAgICogQHJldHVybiBTZXQgY29udGFpbmluZyBlbGVtZW50cyBvZiB0eXBlIHtAbGluayBJUnVudGltZX0KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU2V0IGdldFJ1bnRpbWVzKFNldFtdIGZhY2V0U2V0cykgIAotICB7Ci0gICAgSGFzaFNldCB1bmlvblNldCA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgZm9yIChpbnQgaT0wOyBpPGZhY2V0U2V0cy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBTZXQgZmFjZXRzID0gZmFjZXRTZXRzW2ldOwotICAgICAgU2V0IHJ1bnRpbWVzID0gUnVudGltZU1hbmFnZXIuZ2V0UnVudGltZXMoZmFjZXRzKTsKLSAgICAgIEl0ZXJhdG9yIGl0ciA9IHJ1bnRpbWVzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXRyLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgSVJ1bnRpbWUgcnVudGltZSA9IChJUnVudGltZSlpdHIubmV4dCgpOwotICAgICAgICBpZiAoIXVuaW9uU2V0LmNvbnRhaW5zKHJ1bnRpbWUpKQotICAgICAgICB7Ci0gICAgICAgICAgdW5pb25TZXQuYWRkKHJ1bnRpbWUpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiB1bmlvblNldDsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHByb3ZpZGVkIGZhY2V0IHJ1bnRpbWUgc3VwcG9ydHMgdGhlIHByb3ZpZGVkIHNldCBvZiBmYWNldCB2ZXJzaW9ucy4KLSAgICogCi0gICAqIEBwYXJhbSBmYWNldFJ1bnRpbWUgYSBmYWNldCBydW50aW1lCi0gICAqIEBwYXJhbSBwcm9qZWN0RmFjZXRWZXJzaW9ucyBzZXQgY29udGFpbmluZyBlbGVtZW50cyBvZiB0eXBlIHtAbGluayBJUHJvamVjdEZhY2V0VmVyc2lvbn0KLSAgICogQHJldHVybiBib29sZWFuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBmYWNldCBydW50aW1lIHN1cHBvcnRzIHRoZSBwcm92aWRlZCBzZXQgb2YgZmFjZXQgdmVyc2lvbnMuCi0gICAqIFJldHVybnMgPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBkb2VzUnVudGltZVN1cHBvcnRGYWNldHMoSVJ1bnRpbWUgZmFjZXRSdW50aW1lLCBTZXQgcHJvamVjdEZhY2V0VmVyc2lvbnMpCi0gIHsKLSAgICBTZXQgcnVudGltZXMgPSBSdW50aW1lTWFuYWdlci5nZXRSdW50aW1lcyhwcm9qZWN0RmFjZXRWZXJzaW9ucyk7Ci0gICAgSXRlcmF0b3IgaXRyID0gcnVudGltZXMuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRyLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBJUnVudGltZSBydW50aW1lID0gKElSdW50aW1lKWl0ci5uZXh0KCk7Ci0gICAgICBpZiAocnVudGltZS5nZXROYW1lKCkuZXF1YWxzKGZhY2V0UnVudGltZS5nZXROYW1lKCkpKQotICAgICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB3aGV0aGVyIHZlcnNpb25BIGlzIGdyZWF0ZXIgdGhhbiB2ZXJzaW9uQgotICAgKiAKLSAgICogQHBhcmFtIHZlcnNpb25BIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBmb3JtIDEuMi4zCi0gICAqIEBwYXJhbSB2ZXJzaW9uQSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgZm9ybSAxLjIuMwotICAgKiBAcmV0dXJuIGJvb2xlYW4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdmVyc2lvbkEgaXMgZ3JlYXRlciB0aGFuIHZlcnNpb25CLCA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGdyZWF0ZXJUaGFuKFN0cmluZyB2ZXJzaW9uQSwgU3RyaW5nIHZlcnNpb25CKQotICB7Ci0gICAgU3RyaW5nVG9rZW5pemVyIHN0QSA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodmVyc2lvbkEsICIuIik7Ci0gICAgU3RyaW5nVG9rZW5pemVyIHN0QiA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodmVyc2lvbkIsICIuIik7Ci0gICAgCi0gICAgaW50IHNpemVBID0gc3RBLmNvdW50VG9rZW5zKCk7Ci0gICAgaW50IHNpemVCID0gc3RCLmNvdW50VG9rZW5zKCk7Ci0gICAgCi0gICAgaW50IHNpemU7Ci0gICAgaWYgKHNpemVBIDwgc2l6ZUIpCi0gICAgewotICAgICAgc2l6ZSA9IHNpemVBOwotICAgIH0KLSAgICBlbHNlCi0gICAgICBzaXplID0gc2l6ZUI7Ci0gICAgCi0gICAgZm9yIChpbnQgaT0wOyBpPHNpemU7IGkrKykKLSAgICB7Ci0gICAgICBpbnQgYSA9IEludGVnZXIucGFyc2VJbnQoc3RBLm5leHRUb2tlbigpKTsKLSAgICAgIGludCBiID0gSW50ZWdlci5wYXJzZUludChzdEIubmV4dFRva2VuKCkpOwotICAgICAgaWYgKGEhPWIpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBhID4gYjsKLSAgICAgIH0gICAgICAKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHNpemVBID4gc2l6ZUI7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHByb3ZpZGVkIGZhY2V0IGhhcyBhbiBpZCBvZiAianN0LmphdmEiCi0gICAqIEBwYXJhbSBwZiBmYWNldAotICAgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIGZhY2V0IGhhcyBhbiBpZCBvZiAianN0LmphdmEiLCA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzSmF2YUZhY2V0KElQcm9qZWN0RmFjZXQgcGYpCi0gIHsKLSAgICBpZiAocGYuZ2V0SWQoKS5lcXVhbHMoImpzdC5qYXZhIikpCi0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBwcm92aWRlZCBwcm9qZWN0IGlzIGEgZmFjZXRlZCBKYXZhIHV0aWxpdHkgcHJvamVjdCBvciBhIG5vbi1mYWNldGVkIEphdmEgcHJvamVjdC4KLSAgICogCi0gICAqIEBwYXJhbSBwcm9qZWN0IGFuIElQcm9qZWN0Ci0gICAqIEByZXR1cm4gYm9vbGVhbiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgcHJvdmlkZWQgcHJvamVjdCBpcyBhIGZhY2V0ZWQgSmF2YSB1dGlsaXR5IHByb2plY3QgCi0gICAqIG9yIGEgbm9uLWZhY2V0ZWQgSmF2YSBwcm9qZWN0LCA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzSmF2YVByb2plY3QoSVByb2plY3QgcHJvamVjdCkKLSAgewotICAgIC8vQ2hlY2sgaWYgaXQncyBhIGZhY2V0ZWQgcHJvamVjdAotICAgIHRyeQotICAgIHsKLSAgICAgIElGYWNldGVkUHJvamVjdCBmUHJvamVjdCA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmNyZWF0ZShwcm9qZWN0KTsKLSAgICAgIGlmIChmUHJvamVjdCAhPSBudWxsKQotICAgICAgewotICAgICAgICAvL1JldHVybiB0cnVlIGlmIGl0J3MgYSB1dGlsaXR5IHByb2plY3QKLSAgICAgICAgaWYgKEoyRUVVdGlscy5pc0phdmFDb21wb25lbnQocHJvamVjdCkpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAvL1NlZSBpZiB0aGUgamF2YSBmYWNldCBpcyB0aGUgb25seSBvbmUgaXQgaGFzLgotICAgICAgICAgIFNldCBmYWNldHMgPSBmUHJvamVjdC5nZXRQcm9qZWN0RmFjZXRzKCk7Ci0gICAgICAgICAgaWYgKGZhY2V0cy5zaXplKCk9PTEpCi0gICAgICAgICAgewotICAgICAgICAgICAgSVByb2plY3RGYWNldFZlcnNpb24gcGZ2ID0gKElQcm9qZWN0RmFjZXRWZXJzaW9uKWZhY2V0cy5pdGVyYXRvcigpLm5leHQoKTsKLSAgICAgICAgICAgIGlmIChpc0phdmFGYWNldChwZnYuZ2V0UHJvamVjdEZhY2V0KCkpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgaWYgKFJlc291cmNlVXRpbHMuaXNKYXZhUHJvamVjdChwcm9qZWN0KSkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9ICAgICAgICAKLSAgICAgIH0KLSAgICB9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKQotICAgIHsKLSAgICAgIAotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHByb3ZpZGVkIHRlbXBsYXRlIGlkIGlzIGVxdWFsIHRvICJ0ZW1wbGF0ZS5qc3QudXRpbGl0eSIKLSAgICogCi0gICAqIEBwYXJhbSB0ZW1wbGF0ZUlkIHRlbXBsYXRlIGlkCi0gICAqIEByZXR1cm4gYm9vbGVhbiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgcHJvdmlkZWQgdGVtcGxhdGUgaWQgaXMgZXF1YWwgdG8gInRlbXBsYXRlLmpzdC51dGlsaXR5IiwgCi0gICAqIDxjb2RlPmZhbHNlPC9jb2RlPiBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNVdGlsaXR5VGVtcGxhdGUoU3RyaW5nIHRlbXBsYXRlSWQpCi0gIHsKLSAgICBpZiAoUHJvamVjdEZhY2V0c01hbmFnZXIuaXNUZW1wbGF0ZURlZmluZWQodGVtcGxhdGVJZCkpCi0gICAgewotICAgICAgaWYgKHRlbXBsYXRlSWQuZXF1YWxzKCJ0ZW1wbGF0ZS5qc3QudXRpbGl0eSIpKQotICAgICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gICAgICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbW9uL0ZvbGRlclJlc291cmNlRmlsdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1vbi9Gb2xkZXJSZXNvdXJjZUZpbHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmVjODMxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbW9uL0ZvbGRlclJlc291cmNlRmlsdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5BbnlGaWx0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLkNvbnN1bXB0aW9uTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnBsdWdpbi5XZWJTZXJ2aWNlQ29uc3VtcHRpb25QbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLQotCi0vKioKLSogVGhpcyBpcyBhIGtpbmQgb2YgRmlsdGVyIHRoYXQgYWNjZXB0cyBvbmx5IG9iamVjdHMKLSogd2hpY2ggaW5kaWNhdGUgYSBKYXZhIHJlc291cmNlLiBJbiBwYXJ0aWN1bGFyLCBhbnkKLSoge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZX0gd2hvc2UKLSogcGF0aG5hbWUsIG9yIGFueSBvYmplY3Qgd2hvc2Ugc3RyaW5nIHJlcHJlc2VudGF0aW9uIGFzCi0qIHJldHVybmVkIGJ5IDxjb2RlPnRvU3RyaW5nKCk8L2NvZGU+LCBlbmRzIGluCi0qICI8Y29kZT4uamF2YTwvY29kZT4iIG9yICI8Y29kZT4uY2xhc3M8L2NvZGU+IiB3aWxsIGJlIGFjY2VwdGVkLgotKiBBbGwgb3RoZXIgb2JqZWN0cyB3aWxsIGJlIHJlamVjdGVkLgotKi8KLXB1YmxpYyBjbGFzcyBGb2xkZXJSZXNvdXJjZUZpbHRlciBleHRlbmRzIEFueUZpbHRlcgotewotCi0gIC8qKgotICAqIENvbnN0cnVjdHMgYSBuZXcgPGNvZGU+SmF2YVJlc291cmNlRmlsdGVyPC9jb2RlPiB0aGF0IGZpbHRlcnMKLSAgKiAiPGNvZGU+LmphdmE8L2NvZGU+IiBhbmQgIjxjb2RlPi5jbGFzczwvY29kZT4iIG9iamVjdHMuCi0gICogRXF1aXZhbGVudCB0byA8Y29kZT5KYXZhUmVzb3VyY2VGaWx0ZXIoQUxMX0ZJTEVTKTwvY29kZT4uCi0gICovCi0gIHB1YmxpYyBGb2xkZXJSZXNvdXJjZUZpbHRlciAoKSB7IH0KLQotIC8qKgotICAqIFJldHVybnMgdGhlIGxvY2FsZS1zcGVjaWZpYyBuYW1lIG9mIHRoaXMgZmlsdGVyLgotICAqIEByZXR1cm4gVGhlIGxvY2FsZS1zcGVjaWZpYyBuYW1lIG9mIHRoaXMgZmlsdGVyLgotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUgKCkKLSAgewotICAgIHJldHVybiBDb25zdW1wdGlvbk1lc3NhZ2VzLkZPTERFUl9GSUxURVJfTkFNRTsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIGxvY2FsZS1zcGVjaWZpYyBkZXNjcmlwdGlvbiBvZiB0aGlzIGZpbHRlci4KLSAgKiBAcmV0dXJuIFRoZSBsb2NhbGUtc3BlY2lmaWMgZGVzY3JpcHRpb24gb2YgdGhpcyBmaWx0ZXIuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24gKCkKLSAgewotICAgIHJldHVybiBDb25zdW1wdGlvbk1lc3NhZ2VzLkZPTERFUl9GSUxURVJfREVTQzsKLSAgfQotCi0gcHVibGljIElTdGF0dXMgc3RhdHVzT2YgKCBPYmplY3Qgb2JqZWN0ICkKLSAgewotICAgIGlmIChvYmplY3QgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gbmV3IFN0YXR1cygKLSAgICAgICAgSVN0YXR1cy5FUlJPUiwKLSAgICAgICAgV2ViU2VydmljZUNvbnN1bXB0aW9uUGx1Z2luLklELAotICAgICAgICAwLAotICAgICAgICBDb25zdW1wdGlvbk1lc3NhZ2VzLkZJTFRFUl9NU0dfRVJST1JfTlVMTF9PQkpFQ1QsCi0gICAgICAgIG51bGwKLSAgICAgICk7Ci0gICAgfQotCi0gICAgU3RyaW5nIG5hbWUgPSBudWxsOwotCi0gICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIElSZXNvdXJjZSkKLSAgICB7Ci0gICAgICBJUmVzb3VyY2UgcmVzb3VyY2UgPSAoSVJlc291cmNlKW9iamVjdDsKLSAgICAgIG5hbWUgPSByZXNvdXJjZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCk7Ci0gICAgICBpZiAocmVzb3VyY2UuZ2V0VHlwZSgpICE9IElSZXNvdXJjZS5GT0xERVIpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgU3RhdHVzKAotICAgICAgICAgIElTdGF0dXMuRVJST1IsCi0gICAgICAgICAgV2ViU2VydmljZUNvbnN1bXB0aW9uUGx1Z2luLklELAotICAgICAgICAgIDAsCi0gICAgICAgICAgTkxTLmJpbmQoQ29uc3VtcHRpb25NZXNzYWdlcy5GSUxURVJfTVNHX0VSUk9SX05PVF9GT0xERVIsbmV3IE9iamVjdFtdIHtuYW1lfSksCi0gICAgICAgICAgbnVsbAotICAgICAgICApOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbmV3IFN0YXR1cyhJU3RhdHVzLk9LLFdlYlNlcnZpY2VDb25zdW1wdGlvblBsdWdpbi5JRCwwLCIiLG51bGwpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1vbi9JU2VydmVyRGVmYXVsdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1vbi9JU2VydmVyRGVmYXVsdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjMWYxZDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tb24vSVNlcnZlckRlZmF1bHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLQotCi0vKioKLSAqIEltcGxlbWVudCB0aGlzIGludGVyZmFjZSB0byBwcm92aWRlIGxvZ2ljIHRoYXQgY2FuIGJlIHBsdWdnZWQgaW50bwotICogdGhlIHNlcnZlciBkZWZhdWx0aW5nIGFsZ29yaXRobS4gCi0gKiAoU2VlIHRoZSBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24uc2VydmVyRGVmYXVsdGVyIGV4dGVuc2lvbiBwb2ludCkgIAotICovCi1wdWJsaWMgaW50ZXJmYWNlIElTZXJ2ZXJEZWZhdWx0ZXIKLXsKLSAgCi0gIC8qKgotICAgKiBAcGFyYW0gcHJvamVjdAotICAgKiBAcmV0dXJuIFNlcnZlckluZm8uIAotICAgKiBJZiBubyBleGlzdGluZyBzZXJ2ZXIgb3Igc2VydmVyIHR5cGUgaXMgcmVjb21tZW5kZWQsIHJldHVybiBudWxsLgotICAgKiBJZiBhIHNlcnZlciB0eXBlIGlzIHJlY29tbWVuZGVkLCByZXR1cm4gYW4gaW5zdGFuY2Ugb2YgU2VydmVySW5mbyB3aXRoIGEgbm9uLW51bGwKLSAgICogbm9uLWVtcHR5IFN0cmluZyBmb3IgdGhlIHNlcnZlckZhY3RvcnlJZCBhbmQgbnVsbCBmb3IgdGhlIHNlcnZlckluc3RhbmNlSWQuCi0gICAqIElmIGEgc2VydmVyIGluc3RhbmNlIGlzIHJlY29tbWVuZGVkLCByZXR1cm4gYW4gaW5zdGFuY2Ugb2YgU2VydmVySW5mbyB3aXRoIGEgbm9uLW51bGwKLSAgICogbm9uLWVtcHR5IFN0cmluZyBmb3IgdGhlIHNlcnZlckZhY3RvcnlJZCBhbmQgdGhlIHNlcnZlckluc3RhbmNlSWQuCi0gICAqLwotICBwdWJsaWMgU2VydmVySW5mbyByZWNvbW1lbmREZWZhdWx0U2VydmVyKElQcm9qZWN0IHByb2plY3QpOwotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbW9uL0phdmFNZXJnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbW9uL0phdmFNZXJnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzYwMzhlMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1vbi9KYXZhTWVyZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNTA5ICAgMTgyMjc0IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbjsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb2RlZ2VuLm1lcmdlLmphdmEuSkNvbnRyb2xNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29kZWdlbi5tZXJnZS5qYXZhLkpNZXJnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvZGVnZW4ubWVyZ2UuamF2YS5mYWNhZGUuRmFjYWRlSGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb2RlZ2VuLnV0aWwuQ29kZUdlblV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLkNvbnN1bXB0aW9uTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnBsdWdpbi5XZWJTZXJ2aWNlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbW1vbi5GaWxlUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JU3RhdHVzSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50TWVyZ2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklNZXJnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuTWVyZ2VyOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci0KLS8qCi0gKiBKYXZhTWVyZ2VyIGhhbmRsZXMgdGhlIG1lcmdpbmcgb2Ygd29ya3NwYWNlIGZpbGVzIHVzaW5nIEpNZXJnZXIuICBJZiB0aGUgVVJJcyBzcGVjaWZpZWQgaXMgbm90IGEgZmlsZQotICogaW4gdGhlIHdvcmtzcGFjZSwgaXQgd2lsbCBiZSBpZ25vcmVkLgotICovCi1wdWJsaWMgY2xhc3MgSmF2YU1lcmdlciBleHRlbmRzIE1lcmdlciBpbXBsZW1lbnRzIElNZXJnZXIgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFdTVF9XUyA9ICJvcmcuZWNsaXBzZS53c3Qud3MiOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBNRVJHRV9YTUwgPSAibWVyZ2UueG1sIjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSk1FUkdFUiA9ICJqbWVyZ2VyIjsKLQkKLQlwcml2YXRlIGludCBzaXplID0gMDsgCi0JcHJpdmF0ZSBJRmlsZVtdIHdvcmtzcGFjZUZpbGVzOwotCXByaXZhdGUgSk1lcmdlcltdIG1lcmdlTW9kZWxzOwotCXByaXZhdGUgSkNvbnRyb2xNb2RlbCBqTWVyZ2VDb250cm9sTW9kZWwgPSBudWxsOwotCXByaXZhdGUgSVN0YXR1cyBsb2FkU3RhdHVzOwotCQotCQotCS8qCi0JICogQ29udmVydCB0aGUgVVJJIHN0cmluZ3MgaW4gdGhlIHVyaXMgYXJyYXkgdG8gRWNsaXBzZSBJRmlsZXMgYW5kIHN0b3JlIGluIHRoZSB3b3Jrc3BhY2VGaWxlcyBhcnJheS4gCi0JICogTG9hZCB0aGUgd29ya3NwYWNlRmlsZXMgaW50byBKTWVyZ2VyIGFuZCBzdG9yZSBpbiB0aGUgbWVyZ2VyTW9kZWxzIGFycmF5LiAgCi0JICogSWYgdGhlIG1lcmdlciBtb2RlbCBjYW5ub3QgYmUgb2J0YWluZWQsIG51bGwgaXMgc3RvcmVkIGluIHRoZSBtZXJnZXJNb2RlbHMuIAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSU1lcmdlciNsb2FkKGphdmEubGFuZy5TdHJpbmdbXSkKLQkgKi8KLQkKLQlwdWJsaWMgSVN0YXR1cyBsb2FkKElGaWxlW10gZmlsZXMpIHsKLQkJCi0JCWxvYWRTdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCQlpZiAoZmlsZXMgIT0gbnVsbCkgewotCQkJd29ya3NwYWNlRmlsZXMgPSBmaWxlczsKLQkJCVBlcnNpc3RlbnRNZXJnZUNvbnRleHQgbWVyZ2VDb250ZXh0ID0gV1NQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRNZXJnZUNvbnRleHQoKTsKLQkJCWlmIChtZXJnZUNvbnRleHQuaXNTa2VsZXRvbk1lcmdlRW5hYmxlZCgpKSB7Ci0JCQkJLy8gaW5pdGlhbGl6ZSBKTWVyZ2VyCi0JCQkJaW5pdGlhbGl6ZSgpOwotCQkJCQotCQkJCWlmIChqTWVyZ2VDb250cm9sTW9kZWwgIT0gbnVsbCkgewotCQkJCQkvLyBKTWVyZ2VyIGluaXRpYWxpemVkIHByb3Blcmx5Ci0JCQkJCXNpemUgPSBmaWxlcy5sZW5ndGg7Ci0JCQkJCW1lcmdlTW9kZWxzID0gbmV3IEpNZXJnZXJbc2l6ZV07Ci0JCQkJCQotCQkJCQlmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotCQkJCQkJSk1lcmdlciBqTWVyZ2VyID0gbnVsbDsKLQkJCQkJCUlGaWxlIGZpbGUgPSBudWxsOwotCQkJCQkJSW5wdXRTdHJlYW0gaW5TdHJlYW0gPSBudWxsOwotCQkJCQkJCi0JCQkJCQlmaWxlID0gZmlsZXNbaV07Ci0JCQkJCQlpZiAoZmlsZSAhPSBudWxsICYmIGZpbGUuZXhpc3RzKCkpIHsJCQkJCQkJCQkJCQkJCQotCQkJCQkJCXRyeSB7Ci0JCQkJCQkJCWluU3RyZWFtID0gZmlsZS5nZXRDb250ZW50cygpOwotCQkJCQkJCQlpZiAoaW5TdHJlYW0gIT0gbnVsbCkgewotCQkJCQkJCQkJak1lcmdlciA9IG5ldyBKTWVyZ2VyKGpNZXJnZUNvbnRyb2xNb2RlbCk7Ci0JCQkJCQkJCQlqTWVyZ2VyLnNldFRhcmdldENvbXBpbGF0aW9uVW5pdChqTWVyZ2VyLmNyZWF0ZUNvbXBpbGF0aW9uVW5pdEZvcklucHV0U3RyZWFtKGluU3RyZWFtKSk7Ci0JCQkJCQkJCX0KLQkJCQkJCQl9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCQkJCQkJbG9hZFN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX0ZJTEVfTUVSR0VfTE9BRCwgZmlsZSksIGUpOwotCQkJCQkJCX0gZmluYWxseSB7Ci0JCQkJCQkJCWlmIChpblN0cmVhbSAhPSBudWxsKSB7Ci0JCQkJCQkJCQl0cnkgewotCQkJCQkJCQkJCWluU3RyZWFtLmNsb3NlKCk7Ci0JCQkJCQkJCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkJCQkJCQkJLy8gaWdub3JlIGV4Y2VwdGlvbnMgaW4gY2xvc2luZyBmaWxlCi0JCQkJCQkJCQl9Ci0JCQkJCQkJCX0KLQkJCQkJCQl9CQkJCQotCQkJCQkJfQotCQkJCQkJbWVyZ2VNb2RlbHNbaV0gPSBqTWVyZ2VyOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBsb2FkU3RhdHVzOwotCX0KLQotCS8qKgotCSAqIEluaXRpYWxpemVzIHRoZSBKTWVyZ2UgbW9kZWwKLQkgKiBGaWxlIG1lcmdlLnhtbCBpbiBXZWJTZXJ2aWNlUGx1Z2luIGNvbnRhaW5zIHRoZSBydWxlcyBmb3IgdGhlIG1lcmdlLgotCSAqIElmIHRoZSBtZXJnZS54bWwgZmlsZSBpcyBub3QgZm91bmQsIGpNZXJnZUNvbnRyb2xNb2RlbCBpcyBsZWF2ZSBhcyBudWxsLgotCSAqLwotCXByaXZhdGUgdm9pZCBpbml0aWFsaXplKCkgewotCQlpZiAoak1lcmdlQ29udHJvbE1vZGVsID09IG51bGwpIHsKLQkJCUZhY2FkZUhlbHBlciBmYWNhZGVIZWxwZXIgPSBDb2RlR2VuVXRpbC5pbnN0YW50aWF0ZUZhY2FkZUhlbHBlcihKTWVyZ2VyLkRFRkFVTFRfRkFDQURFX0hFTFBFUl9DTEFTUyk7Ci0JCQlqTWVyZ2VDb250cm9sTW9kZWwgPSBuZXcgSkNvbnRyb2xNb2RlbCgpOwotCi0JCQlCdW5kbGUgICAgICAgIHdzQnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKFdTVF9XUyk7Ci0JCQlJUGF0aCAgICAgICAgIG1lcmdlUGF0aCAgICAgID0gbmV3IFBhdGgoIEpNRVJHRVIgKS5hcHBlbmQoIE1FUkdFX1hNTCApOwotCQkJVVJMICAgICAgICAgICBmaWxlVVJMICAgICAgICA9IEZpbGVMb2NhdG9yLmZpbmQoIHdzQnVuZGxlLCBtZXJnZVBhdGgsIG51bGwpOwotCQkJak1lcmdlQ29udHJvbE1vZGVsLmluaXRpYWxpemUoZmFjYWRlSGVscGVyLCBmaWxlVVJMLnRvU3RyaW5nKCkpOwotCQl9Ci0JCXJldHVybjsKLQl9Ci0JCi0JLyoqCi0JICogTWVyZ2UgdGhlIGN1cnJlbnQgY29udGVudHMgb2YgdGhlIHdvcmtzcGFjZUZpbGVzIHdpdGggdGhlIG1lcmdlTW9kZWxzIHRoYXQgaGFkIGJlZW4gc3RvcmVkIGVhcmxpZXIuICAgCi0JICogVGhlbiB3cml0ZSB0aGUgbWVyZ2VkIGNvbnRlbnRzIGJhY2sgdG8gdGhlIGZpbGUuCi0JICogQHBhcmFtIG1vbml0b3IKLQkgKiBAcGFyYW0gc3RhdHVzSGFuZGxlcgotCSAqIEByZXR1cm4gSVN0YXR1cwotCSAqLwotCXB1YmxpYyBJU3RhdHVzIG1lcmdlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSVN0YXR1c0hhbmRsZXIgc3RhdHVzSGFuZGxlcikgewotCQkKLQkJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCQkKLQkJaWYgKGxvYWRTdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLkVSUk9SKSB7Ci0JCQlyZXR1cm4gbG9hZFN0YXR1czsKLQkJfQotCQkKLQkJUGVyc2lzdGVudE1lcmdlQ29udGV4dCBtZXJnZUNvbnRleHQgPSBXU1BsdWdpbi5nZXRJbnN0YW5jZSgpLmdldE1lcmdlQ29udGV4dCgpOwotCQlpZiAobWVyZ2VDb250ZXh0LmlzU2tlbGV0b25NZXJnZUVuYWJsZWQoKSkgewotCQkJUmVzb3VyY2VDb250ZXh0IHJlc291cmNlQ29udGV4dCA9IFdlYlNlcnZpY2VQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRSZXNvdXJjZUNvbnRleHQoKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0JCQkJU3RyaW5nIG1lcmdlZENvbnRlbnQgPSBudWxsOwotCQkJCUpNZXJnZXIgak1lcmdlciA9IG51bGw7Ci0JCQkJSUZpbGUgZmlsZSA9IG51bGw7Ci0JCQkJSW5wdXRTdHJlYW0gaW5TdHJlYW0gPSBudWxsOwotCQkJCWJ5dGVbXSBidWYgPSBudWxsOwotCQkJCQotCQkJCWpNZXJnZXIgPSBtZXJnZU1vZGVsc1tpXTsKLQkJCQlmaWxlID0gd29ya3NwYWNlRmlsZXNbaV07Ci0JCQkJaWYgKGZpbGUgIT0gbnVsbCAmJiBqTWVyZ2VyICE9IG51bGwgJiYgZmlsZS5leGlzdHMoKSkgeyAgCi0JCQkJCS8vIGEgSk1lcmdlciBtb2RlbCBvZiB0aGUgZmlsZSBleGlzdHMsIG1lcmdlIHRoZSBjb250ZW50cwotCQkJCQl0cnkgewotCQkJCQkJaW5TdHJlYW0gPSBmaWxlLmdldENvbnRlbnRzKCk7Ci0JCQkJCQlqTWVyZ2VyLnNldFNvdXJjZUNvbXBpbGF0aW9uVW5pdChqTWVyZ2VyLmNyZWF0ZUNvbXBpbGF0aW9uVW5pdEZvcklucHV0U3RyZWFtKGluU3RyZWFtKSk7Ci0JCQkJCQlqTWVyZ2VyLm1lcmdlKCk7Ci0JCQkJCQltZXJnZWRDb250ZW50ID0gak1lcmdlci5nZXRUYXJnZXRDb21waWxhdGlvblVuaXRDb250ZW50cygpOwkKLQkJCQkJCWlmIChtZXJnZWRDb250ZW50ICE9IG51bGwpIHsKLQkJCQkJCQl0cnkgewotCQkJCQkJCQlidWYgPSBtZXJnZWRDb250ZW50LmdldEJ5dGVzKGZpbGUuZ2V0Q2hhcnNldCgpKTsKLQkJCQkJCQl9IGNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUpIHsKLQkJCQkJCQkJYnVmID0gbWVyZ2VkQ29udGVudC5nZXRCeXRlcygpOwotCQkJCQkJCX0KLQkJCQkJCQlpblN0cmVhbSA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShidWYpOwotCQkJCQkJCUlQYXRoIHRhcmdldFBhdGggPSBmaWxlLmdldExvY2F0aW9uKCk7Ci0JCQkJCQkJaWYgKHRhcmdldFBhdGggIT0gbnVsbCkgewotCQkJCQkJCQlGaWxlUmVzb3VyY2VVdGlscy5jcmVhdGVGaWxlQXRMb2NhdGlvbihyZXNvdXJjZUNvbnRleHQsIHRhcmdldFBhdGgubWFrZUFic29sdXRlKCksIGluU3RyZWFtLAotCQkJCQkJCQkJICBtb25pdG9yLCBzdGF0dXNIYW5kbGVyKTsKLQkJCQkJCQl9Ci0JCQkJCQl9Ci0JCQkJCX0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJCQkJc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoTkxTLmJpbmQoQ29uc3VtcHRpb25NZXNzYWdlcy5NU0dfRVJST1JfRklMRV9NRVJHRSwgZmlsZSksIGUpOwotCQkJCQl9IGZpbmFsbHkgewotCQkJCQkJdHJ5IHsKLQkJCQkJCQlpZiAoaW5TdHJlYW0gIT0gbnVsbCkgewotCQkJCQkJCQlpblN0cmVhbS5jbG9zZSgpOwotCQkJCQkJCX0KLQkJCQkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCQkJCQkvLyBpZ25vcmUgZXhjZXB0aW9ucyBpbiBjbG9zaW5nIGZpbGUKLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCQotCQl9Ci0JCXJldHVybiBzdGF0dXM7Ci0JfQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tb24vSmF2YVJlc291cmNlRmlsdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1vbi9KYXZhUmVzb3VyY2VGaWx0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTg0ZGEyMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1vbi9KYXZhUmVzb3VyY2VGaWx0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5BbnlGaWx0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLkNvbnN1bXB0aW9uTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnBsdWdpbi5XZWJTZXJ2aWNlQ29uc3VtcHRpb25QbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLQotCi0vKioKLSogVGhpcyBpcyBhIGtpbmQgb2YgRmlsdGVyIHRoYXQgYWNjZXB0cyBvbmx5IG9iamVjdHMKLSogd2hpY2ggaW5kaWNhdGUgYSBKYXZhIHJlc291cmNlLiBJbiBwYXJ0aWN1bGFyLCBhbnkKLSoge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZX0gd2hvc2UKLSogcGF0aG5hbWUsIG9yIGFueSBvYmplY3Qgd2hvc2Ugc3RyaW5nIHJlcHJlc2VudGF0aW9uIGFzCi0qIHJldHVybmVkIGJ5IDxjb2RlPnRvU3RyaW5nKCk8L2NvZGU+LCBlbmRzIGluCi0qICI8Y29kZT4uamF2YTwvY29kZT4iIG9yICI8Y29kZT4uY2xhc3M8L2NvZGU+IiB3aWxsIGJlIGFjY2VwdGVkLgotKiBBbGwgb3RoZXIgb2JqZWN0cyB3aWxsIGJlIHJlamVjdGVkLgotKi8KLXB1YmxpYyBjbGFzcyBKYXZhUmVzb3VyY2VGaWx0ZXIgZXh0ZW5kcyBBbnlGaWx0ZXIKLXsKLQotICAvKioKLSAgKiBBIDxjb2RlPkphdmFSZXNvdXJjZUZpbHRlcjwvY29kZT4gY29uc3RydWN0ZWQgd2l0aCB0aGlzIHZhbHVlIHdpbGwKLSAgKiBhY2NlcHQgIjxjb2RlPi5qYXZhPC9jb2RlPiIsIGJ1dCBub3QgIjxjb2RlPi5jbGFzczwvY29kZT4iLCBvYmplY3RzLgotICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgSkFWQV9GSUxFUyA9IChieXRlKTE7Ci0KLSAgLyoqCi0gICogQSA8Y29kZT5KYXZhUmVzb3VyY2VGaWx0ZXI8L2NvZGU+IGNvbnN0cnVjdGVkIHdpdGggdGhpcyB2YWx1ZSB3aWxsCi0gICogYWNjZXB0ICI8Y29kZT4uY2xhc3M8L2NvZGU+IiwgYnV0IG5vdCAiPGNvZGU+LmphdmE8L2NvZGU+Iiwgb2JqZWN0cy4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBieXRlIENMQVNTX0ZJTEVTID0gKGJ5dGUpMjsKLQotICAvKioKLSAgKiBBIDxjb2RlPkphdmFSZXNvdXJjZUZpbHRlcjwvY29kZT4gY29uc3RydWN0ZWQgd2l0aCB0aGlzIHZhbHVlIHdpbGwKLSAgKiBhY2NlcHQgYm90aCAiPGNvZGU+LmphdmE8L2NvZGU+IiBhbmQgIjxjb2RlPi5jbGFzczwvY29kZT4iIG9iamVjdHMuCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgYnl0ZSBBTExfRklMRVMgPSAoYnl0ZSkyNTU7Ci0KLSAgcHJpdmF0ZSBieXRlIGV4dGVuc2lvbnNfOwotCi0gIC8qKgotICAqIENvbnN0cnVjdHMgYSBuZXcgPGNvZGU+SmF2YVJlc291cmNlRmlsdGVyPC9jb2RlPiB0aGF0IGZpbHRlcnMKLSAgKiAiPGNvZGU+LmphdmE8L2NvZGU+IiBhbmQgIjxjb2RlPi5jbGFzczwvY29kZT4iIG9iamVjdHMuCi0gICogRXF1aXZhbGVudCB0byA8Y29kZT5KYXZhUmVzb3VyY2VGaWx0ZXIoQUxMX0ZJTEVTKTwvY29kZT4uCi0gICovCi0gIHB1YmxpYyBKYXZhUmVzb3VyY2VGaWx0ZXIgKCkKLSAgewotICAgIHRoaXMoQUxMX0ZJTEVTKTsKLSAgfQotCi0gIC8qKgotICAqIENvbnN0cnVjdHMgYSBuZXcgPGNvZGU+SmF2YVJlc291cmNlRmlsdGVyPC9jb2RlPiB0aGF0IGZpbHRlcnMKLSAgKiAiPGNvZGU+LmphdmE8L2NvZGU+IiBvYmplY3RzLCAiPGNvZGU+LmNsYXNzPC9jb2RlPiIgb2JqZWN0cywKLSAgKiBvciBib3RoIGlmIHRoZSB2YWx1ZSBvZiA8Y29kZT5leHRlbnNpb25zPC9jb2RlPiBpcwotICAqIHtAbGluayAjSkFWQV9GSUxFU30sIHtAbGluayAjQ0xBU1NfRklMRVN9IG9yIHtAbGluayAjQUxMX0ZJTEVTfQotICAqIHJlc3BlY3RpdmVseS4KLSAgKiBAcGFyYW0gZXh0ZW5zaW9ucyBPbmUgb2YKLSAgKiB7QGxpbmsgI0pBVkFfRklMRVN9LCB7QGxpbmsgI0NMQVNTX0ZJTEVTfSBvciB7QGxpbmsgI0FMTF9GSUxFU30uCi0gICovCi0gIHB1YmxpYyBKYXZhUmVzb3VyY2VGaWx0ZXIgKCBieXRlIGV4dGVuc2lvbnMgKQotICB7Ci0gICAgZXh0ZW5zaW9uc18gPSBleHRlbnNpb25zOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbG9jYWxlLXNwZWNpZmljIG5hbWUgb2YgdGhpcyBmaWx0ZXIuCi0gICogQHJldHVybiBUaGUgbG9jYWxlLXNwZWNpZmljIG5hbWUgb2YgdGhpcyBmaWx0ZXIuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSAoKQotICB7Ci0gICAgcmV0dXJuIENvbnN1bXB0aW9uTWVzc2FnZXMuSkFWQV9GSUxURVJfTkFNRTsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIGxvY2FsZS1zcGVjaWZpYyBkZXNjcmlwdGlvbiBvZiB0aGlzIGZpbHRlci4KLSAgKiBAcmV0dXJuIFRoZSBsb2NhbGUtc3BlY2lmaWMgZGVzY3JpcHRpb24gb2YgdGhpcyBmaWx0ZXIuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24gKCkKLSAgewotICAgIHJldHVybiBDb25zdW1wdGlvbk1lc3NhZ2VzLkpBVkFfRklMVEVSX0RFU0M7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIGFuIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1c30KLSAgKiBkZXNjcmliaW5nIHRoZSA8Y29kZT5GaWx0ZXI8L2NvZGU+J3MgYXNzZXNzbWVudCBvZgotICAqIHRoZSBnaXZlbiA8Y29kZT5vYmplY3Q8L2NvZGU+LgotICAqIEBwYXJhbSBvYmplY3QgVGhlIG9iamVjdCB0byBmaWx0ZXIuCi0gICogQHJldHVybiBBbiB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXN9Ci0gICogaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCBpZiB0aGUgZ2l2ZW4gPGNvZGU+b2JqZWN0PC9jb2RlPgotICAqIHJlcHJlc2VudHMgYSBKYXZhIHJlc291cmNlLgotICAqLwotICBwdWJsaWMgSVN0YXR1cyBzdGF0dXNPZiAoIE9iamVjdCBvYmplY3QgKQotICB7Ci0gICAgaWYgKG9iamVjdCA9PSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiBuZXcgU3RhdHVzKAotICAgICAgICBJU3RhdHVzLkVSUk9SLAotICAgICAgICBXZWJTZXJ2aWNlQ29uc3VtcHRpb25QbHVnaW4uSUQsCi0gICAgICAgIDAsCi0gICAgICAgIENvbnN1bXB0aW9uTWVzc2FnZXMuRklMVEVSX01TR19FUlJPUl9OVUxMX09CSkVDVCwKLSAgICAgICAgbnVsbAotICAgICAgKTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgbmFtZSA9IG51bGw7Ci0KLSAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgSVJlc291cmNlKQotICAgIHsKLSAgICAgIElSZXNvdXJjZSByZXNvdXJjZSA9IChJUmVzb3VyY2Upb2JqZWN0OwotICAgICAgbmFtZSA9IHJlc291cmNlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKTsKLSAgICAgIGlmIChyZXNvdXJjZS5nZXRUeXBlKCkgIT0gSVJlc291cmNlLkZJTEUpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgU3RhdHVzKAotICAgICAgICAgIElTdGF0dXMuRVJST1IsCi0gICAgICAgICAgV2ViU2VydmljZUNvbnN1bXB0aW9uUGx1Z2luLklELAotICAgICAgICAgIDAsCi0gICAgICAgICAgTkxTLmJpbmQoQ29uc3VtcHRpb25NZXNzYWdlcy5GSUxURVJfTVNHX0VSUk9SX05PVF9GSUxFLG5ldyBPYmplY3RbXSB7bmFtZX0pLAotICAgICAgICAgIG51bGwKLSAgICAgICAgKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobmFtZSA9PSBudWxsKQotICAgIHsKLSAgICAgIG5hbWUgPSBvYmplY3QudG9TdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBpZiAoIWFjY2VwdHNOYW1lKG5hbWUpKQotICAgIHsKLSAgICAgIHJldHVybiBuZXcgU3RhdHVzKAotICAgICAgICBJU3RhdHVzLkVSUk9SLAotICAgICAgICBXZWJTZXJ2aWNlQ29uc3VtcHRpb25QbHVnaW4uSUQsCi0gICAgICAgIDAsCi0gICAgICAgIE5MUy5iaW5kKENvbnN1bXB0aW9uTWVzc2FnZXMuSkFWQV9GSUxURVJfTVNHX0VSUk9SX1dST05HX0VYVEVOU0lPTixuZXcgT2JqZWN0W10ge25hbWV9KSwKLSAgICAgICAgbnVsbAotICAgICAgKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbmV3IFN0YXR1cyhJU3RhdHVzLk9LLFdlYlNlcnZpY2VDb25zdW1wdGlvblBsdWdpbi5JRCwwLCIiLG51bGwpOwotICB9Ci0KLSAgLy8KLSAgLy8gQ2hlY2tzIGlmIHRoZSBnaXZlbiBuYW1lIGlzIGFjY2VwdGFibGUgYmFzZWQgdXBvbiBpdHMgZXh0ZW5zaW9uCi0gIC8vIGFuZCB0aGUgdmFsdWUgb2YgdGhlIGV4dGVuc2lvbnNfIGJpdG1hc2suCi0gIC8vCi0gIHByaXZhdGUgYm9vbGVhbiBhY2NlcHRzTmFtZSAoIFN0cmluZyBuYW1lICkKLSAgewotICAgIHJldHVybiAoIAotICAgICAgKG5hbWUuZW5kc1dpdGgoIi5qYXZhIikgJiYgKChleHRlbnNpb25zXyAmIEpBVkFfRklMRVMpICE9IDApKSB8fAotICAgICAgKG5hbWUuZW5kc1dpdGgoIi5jbGFzcyIpICYmICgoZXh0ZW5zaW9uc18gJiBDTEFTU19GSUxFUykgIT0gMCkpCi0gICAgKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tb24vTWFwcGluZ1V0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1vbi9NYXBwaW5nVXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTM2NDhkZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1vbi9NYXBwaW5nVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7Ci0KLQotLyoqCi0qIFRoaXMgY2xhc3MgY29udGFpbnMgdXNlZnVsIG1ldGhvZHMgZm9yIHdvcmtpbmcgd2l0aCBTZXJ2ZXIgcGx1Z2luIGZ1bmN0aW9ucwotKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBNYXBwaW5nVXRpbHMKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9TRVJWSUNFX0VYVCA9ICJTZXJ2aWNlLndzZGwiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9CSU5ESU5HX0VYVCA9ICJCaW5kaW5nLndzZGwiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9WNF9TRVJWSUNFX0VYVCA9ICItc2VydmljZS53c2RsIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfVjRfQklORElOR19FWFQgPSAiLWJpbmRpbmcud3NkbCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBXU0RMX0VYVEVOU0lPTiA9ICIud3NkbCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBXU0RMX0ZPTERFUiA9ICJ3c2RsIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9TS0VMRVRPTl9QQUNLQUdFTkFNRSA9ICJzZXJ2aWNlIjsKLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBXU0RMIGZvbGRlciBwYXRoCi0gICogQHBhcmFtIHByb2plY3QgdGhlIHByb2plY3QKLSAgKi8KLSAgcHVibGljIHN0YXRpYyBJUGF0aCBnZXRXU0RMRm9sZGVyUGF0aCAoSVByb2plY3QgcHJvamVjdCwgU3RyaW5nIGNvbXBvbmVudE5hbWUpCi0gIHsKLSAgICBJUGF0aCB3c2RsRm9sZGVyPW51bGw7Ci0vLyAgCUlQYXRoIHdlYk1vZHVsZVNlcnZlclJvb3QgPSBSZXNvdXJjZVV0aWxzLmdldFdlYk1vZHVsZVNlcnZlclJvb3QoIHByb2plY3QgKS5nZXRGdWxsUGF0aCgpOwotICAJSVBhdGggd2ViTW9kdWxlU2VydmVyUm9vdCA9IEoyRUVVdGlscy5nZXRXZWJDb250ZW50UGF0aChwcm9qZWN0KTsKLSAgCWlmICh3ZWJNb2R1bGVTZXJ2ZXJSb290ICE9IG51bGwgKQotICAJCXdzZGxGb2xkZXIgPSB3ZWJNb2R1bGVTZXJ2ZXJSb290LmFwcGVuZChXU0RMX0ZPTERFUik7Ci0gICAgcmV0dXJuIHdzZGxGb2xkZXI7Ci0gIH0KLSAgICAKLQotICAgLyoqCi0gICogUmV0dXJucyB0aGUgYmFzZSBuYW1lIGJhc2VkIG9uIFdTREwgZmlsZSBuYW1lCi0gICogQHBhcmFtIHdzZGxOYW1lIFdTREwgZmlsZSBuYW1lCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEJhc2VOYW1lIChTdHJpbmcgd3NkbExvY2F0aW9uICkKLSAgewotICAJU3RyaW5nIHdzZGxOYW1lPXdzZGxMb2NhdGlvbjsKLSAgCQotICAJaW50IGluZGV4ID0gd3NkbExvY2F0aW9uLmxhc3RJbmRleE9mKCcvJyk7Ci0gICAgaWYgKGluZGV4IT0gLTEpIHsKLSAgICAgIHdzZGxOYW1lID0gd3NkbExvY2F0aW9uLnN1YnN0cmluZyhpbmRleCsxLHdzZGxOYW1lLmxlbmd0aCgpKTsKLSAgICB9Ci0gICAgCi0gICAgU3RyaW5nIGJhc2VOYW1lPXdzZGxOYW1lOwotICAgIGlmICggd3NkbE5hbWUuZW5kc1dpdGgoREVGQVVMVF9TRVJWSUNFX0VYVCkgKSB7Ci0gICAgICBiYXNlTmFtZSA9IHdzZGxOYW1lLnN1YnN0cmluZygwLCh3c2RsTmFtZS5sZW5ndGgoKSAtIERFRkFVTFRfU0VSVklDRV9FWFQubGVuZ3RoKCkpKTsKLSAgICB9IGVsc2UgaWYgKCB3c2RsTmFtZS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKERFRkFVTFRfVjRfU0VSVklDRV9FWFQpICkgewotICAgICAgYmFzZU5hbWUgPSB3c2RsTmFtZS5zdWJzdHJpbmcoMCwod3NkbE5hbWUubGVuZ3RoKCkgLSBERUZBVUxUX1Y0X1NFUlZJQ0VfRVhULmxlbmd0aCgpKSk7Ci0gICAgfSBlbHNlIGlmICh3c2RsTmFtZS5lbmRzV2l0aChERUZBVUxUX0JJTkRJTkdfRVhUKSkgewotICAgICAgYmFzZU5hbWUgPSB3c2RsTmFtZS5zdWJzdHJpbmcoMCwod3NkbE5hbWUubGVuZ3RoKCktREVGQVVMVF9CSU5ESU5HX0VYVC5sZW5ndGgoKSkpOwotICAgIH0gZWxzZSBpZiAod3NkbE5hbWUudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChERUZBVUxUX1Y0X0JJTkRJTkdfRVhUKSkgewotICAgICAgYmFzZU5hbWUgPSB3c2RsTmFtZS5zdWJzdHJpbmcoMCwod3NkbE5hbWUubGVuZ3RoKCktREVGQVVMVF9WNF9CSU5ESU5HX0VYVC5sZW5ndGgoKSkpOwotICAgIH0gZWxzZSBpZiAod3NkbE5hbWUudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChXU0RMX0VYVEVOU0lPTikpIHsKLSAgICAJYmFzZU5hbWUgPSB3c2RsTmFtZS5zdWJzdHJpbmcoMCwod3NkbE5hbWUubGVuZ3RoKCkgLSBXU0RMX0VYVEVOU0lPTi5sZW5ndGgoKSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBubyByZWNvZ25pemFibGUgc3VmZml4LCBqdXN0IHJlbW92ZSBleHRlbnNpb24sIGlmIGFueQotICAgICAgaW50IGluZGV4NCA9IGJhc2VOYW1lLmxhc3RJbmRleE9mKCcuJyk7Ci0gICAgICBpZiAoaW5kZXg0IT0tMSkKLSAgICAgICAgYmFzZU5hbWUgPSBiYXNlTmFtZS5zdWJzdHJpbmcoMCwgaW5kZXg0KTsKLSAgICB9Ci0gICAgcmV0dXJuIGJhc2VOYW1lOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbW9uL1Byb3BlcnRpZXNSZXNvdXJjZUZpbHRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tb24vUHJvcGVydGllc1Jlc291cmNlRmlsdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkNjc5ZjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tb24vUHJvcGVydGllc1Jlc291cmNlRmlsdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uQW55RmlsdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5Db25zdW1wdGlvbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5wbHVnaW4uV2ViU2VydmljZUNvbnN1bXB0aW9uUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLQotLyoqCi0qIFRoaXMgaXMgYSBraW5kIG9mIEZpbHRlciB0aGF0IGFjY2VwdHMgb25seSBvYmplY3RzCi0qIHdoaWNoIGluZGljYXRlIGEgSmF2YSByZXNvdXJjZS4gSW4gcGFydGljdWxhciwgYW55Ci0qIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2V9IHdob3NlCi0qIHBhdGhuYW1lLCBvciBhbnkgb2JqZWN0IHdob3NlIHN0cmluZyByZXByZXNlbnRhdGlvbiBhcwotKiByZXR1cm5lZCBieSA8Y29kZT50b1N0cmluZygpPC9jb2RlPiwgZW5kcyBpbgotKiAiPGNvZGU+LmphdmE8L2NvZGU+IiBvciAiPGNvZGU+LmNsYXNzPC9jb2RlPiIgd2lsbCBiZSBhY2NlcHRlZC4KLSogQWxsIG90aGVyIG9iamVjdHMgd2lsbCBiZSByZWplY3RlZC4KLSovCi1wdWJsaWMgY2xhc3MgUHJvcGVydGllc1Jlc291cmNlRmlsdGVyIGV4dGVuZHMgQW55RmlsdGVyCi17Ci0gCi0gIC8qKgotICAqIENvbnN0cnVjdHMgYSBuZXcgPGNvZGU+SmF2YVJlc291cmNlRmlsdGVyPC9jb2RlPiB0aGF0IGZpbHRlcnMKLSAgKiAiPGNvZGU+LmphdmE8L2NvZGU+IiBhbmQgIjxjb2RlPi5jbGFzczwvY29kZT4iIG9iamVjdHMuCi0gICogRXF1aXZhbGVudCB0byA8Y29kZT5KYXZhUmVzb3VyY2VGaWx0ZXIoQUxMX0ZJTEVTKTwvY29kZT4uCi0gICovCi0gIHB1YmxpYyBQcm9wZXJ0aWVzUmVzb3VyY2VGaWx0ZXIgKCkKLSAgewotICAgIAotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbG9jYWxlLXNwZWNpZmljIG5hbWUgb2YgdGhpcyBmaWx0ZXIuCi0gICogQHJldHVybiBUaGUgbG9jYWxlLXNwZWNpZmljIG5hbWUgb2YgdGhpcyBmaWx0ZXIuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSAoKQotICB7Ci0gICAgcmV0dXJuIENvbnN1bXB0aW9uTWVzc2FnZXMuUFJPUEVSVElFU19GSUxURVJfTkFNRTsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIGxvY2FsZS1zcGVjaWZpYyBkZXNjcmlwdGlvbiBvZiB0aGlzIGZpbHRlci4KLSAgKiBAcmV0dXJuIFRoZSBsb2NhbGUtc3BlY2lmaWMgZGVzY3JpcHRpb24gb2YgdGhpcyBmaWx0ZXIuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24gKCkKLSAgewotICAgIHJldHVybiBDb25zdW1wdGlvbk1lc3NhZ2VzLlBST1BFUlRJRVNfRklMVEVSX0RFU0M7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIGFuIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1c30KLSAgKiBkZXNjcmliaW5nIHRoZSA8Y29kZT5GaWx0ZXI8L2NvZGU+J3MgYXNzZXNzbWVudCBvZgotICAqIHRoZSBnaXZlbiA8Y29kZT5vYmplY3Q8L2NvZGU+LgotICAqIEBwYXJhbSBvYmplY3QgVGhlIG9iamVjdCB0byBmaWx0ZXIuCi0gICogQHJldHVybiBBbiB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXN9Ci0gICogaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCBpZiB0aGUgZ2l2ZW4gPGNvZGU+b2JqZWN0PC9jb2RlPgotICAqIHJlcHJlc2VudHMgYSBKYXZhIHJlc291cmNlLgotICAqLwotICBwdWJsaWMgSVN0YXR1cyBzdGF0dXNPZiAoIE9iamVjdCBvYmplY3QgKQotICB7Ci0gICAgaWYgKG9iamVjdCA9PSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiBuZXcgU3RhdHVzKAotICAgICAgICBJU3RhdHVzLkVSUk9SLAotICAgICAgICBXZWJTZXJ2aWNlQ29uc3VtcHRpb25QbHVnaW4uSUQsCi0gICAgICAgIDAsCi0gICAgICAgIENvbnN1bXB0aW9uTWVzc2FnZXMuRklMVEVSX01TR19FUlJPUl9OVUxMX09CSkVDVCwKLSAgICAgICAgbnVsbAotICAgICAgKTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgbmFtZSA9IG51bGw7Ci0KLSAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgSVJlc291cmNlKQotICAgIHsKLSAgICAgIElSZXNvdXJjZSByZXNvdXJjZSA9IChJUmVzb3VyY2Upb2JqZWN0OwotICAgICAgbmFtZSA9IHJlc291cmNlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKTsKLSAgICAgIGlmIChyZXNvdXJjZS5nZXRUeXBlKCkgIT0gSVJlc291cmNlLkZJTEUpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgU3RhdHVzKAotICAgICAgICAgIElTdGF0dXMuRVJST1IsCi0gICAgICAgICAgV2ViU2VydmljZUNvbnN1bXB0aW9uUGx1Z2luLklELAotICAgICAgICAgIDAsCi0gICAgICAgICAgTkxTLmJpbmQoQ29uc3VtcHRpb25NZXNzYWdlcy5GSUxURVJfTVNHX0VSUk9SX05PVF9GSUxFLG5ldyBPYmplY3RbXSB7bmFtZX0pLAotICAgICAgICAgIG51bGwKLSAgICAgICAgKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobmFtZSA9PSBudWxsKQotICAgIHsKLSAgICAgIG5hbWUgPSBvYmplY3QudG9TdHJpbmcoKTsKLSAgICB9Ci0KLQlpZiAoIW5hbWUuZW5kc1dpdGgoIi5wcm9wZXJ0aWVzIikpCi0gICAgewotICAgICAgcmV0dXJuIG5ldyBTdGF0dXMoCi0gICAgICAgIElTdGF0dXMuRVJST1IsCi0gICAgICAgIFdlYlNlcnZpY2VDb25zdW1wdGlvblBsdWdpbi5JRCwKLSAgICAgICAgMCwKLSAgICAgICAgTkxTLmJpbmQoQ29uc3VtcHRpb25NZXNzYWdlcy5QUk9QRVJUSUVTX0ZJTFRFUl9NU0dfRVJST1JfV1JPTkdfRVhURU5TSU9OLG5ldyBPYmplY3RbXSB7bmFtZX0pLAotICAgICAgICBudWxsCi0gICAgICApOwotICAgIH0KLQotICAgIHJldHVybiBuZXcgU3RhdHVzKElTdGF0dXMuT0ssV2ViU2VydmljZUNvbnN1bXB0aW9uUGx1Z2luLklELDAsIiIsbnVsbCk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tb24vUmVxdWlyZWRGYWNldFZlcnNpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbW9uL1JlcXVpcmVkRmFjZXRWZXJzaW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4ZDJhYTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tb24vUmVxdWlyZWRGYWNldFZlcnNpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAxMzEgMTIxMDcxICAgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyICAgICAgICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbjsKLQotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5JUHJvamVjdEZhY2V0VmVyc2lvbjsKLQotcHVibGljIGNsYXNzIFJlcXVpcmVkRmFjZXRWZXJzaW9uCi17Ci0gIHByaXZhdGUgSVByb2plY3RGYWNldFZlcnNpb24gcHJvamVjdEZhY2V0VmVyc2lvbjsKLSAgcHJpdmF0ZSBib29sZWFuIGFsbG93TmV3ZXI7Ci0gIHByaXZhdGUgSVByb2plY3RGYWNldFZlcnNpb25bXSBhbGxvd2VkUHJvamVjdEZhY2V0VmVyc2lvbnM7Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRBbGxvd05ld2VyKCkKLSAgewotICAgIHJldHVybiBhbGxvd05ld2VyOwotICB9Ci0gIHB1YmxpYyB2b2lkIHNldEFsbG93TmV3ZXIoYm9vbGVhbiBhbGxvd05ld2VyKQotICB7Ci0gICAgdGhpcy5hbGxvd05ld2VyID0gYWxsb3dOZXdlcjsKLSAgfQotICBwdWJsaWMgSVByb2plY3RGYWNldFZlcnNpb24gZ2V0UHJvamVjdEZhY2V0VmVyc2lvbigpCi0gIHsKLSAgICByZXR1cm4gcHJvamVjdEZhY2V0VmVyc2lvbjsKLSAgfQotICBwdWJsaWMgdm9pZCBzZXRQcm9qZWN0RmFjZXRWZXJzaW9uKElQcm9qZWN0RmFjZXRWZXJzaW9uIHByb2plY3RGYWNldFZlcnNpb24pCi0gIHsKLSAgICB0aGlzLnByb2plY3RGYWNldFZlcnNpb24gPSBwcm9qZWN0RmFjZXRWZXJzaW9uOwotICB9ICAKLSAgcHVibGljIElQcm9qZWN0RmFjZXRWZXJzaW9uW10gZ2V0QWxsb3dlZFByb2plY3RGYWNldFZlcnNpb25zKCkgIAotICB7Ci0gICAgaWYgKGFsbG93ZWRQcm9qZWN0RmFjZXRWZXJzaW9ucyA9PSBudWxsKQotICAgIHsKLSAgICAgIEFycmF5TGlzdCB2ZXJzaW9ucyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgIElQcm9qZWN0RmFjZXRWZXJzaW9uIG1pbnBmdiA9IGdldFByb2plY3RGYWNldFZlcnNpb24oKTsKLSAgICAgIHZlcnNpb25zLmFkZChtaW5wZnYpOwotICAgICAgLy9JZiBhbGxvdy1uZXdlciBpcyB0cnVlLCBhZGQgYWxsIHRoZSB2ZXJzaW9ucyBncmVhdGVyIHRoYW4gdGhlIG1pbiB2ZXJzaW9uLgotICAgICAgaWYgKGdldEFsbG93TmV3ZXIoKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIG1pblZlcnNpb24gPSBtaW5wZnYuZ2V0VmVyc2lvblN0cmluZygpOwotICAgICAgICBJdGVyYXRvciBhbGxWZXJzaW9uc0l0ciA9IG1pbnBmdi5nZXRQcm9qZWN0RmFjZXQoKS5nZXRWZXJzaW9ucygpLml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChhbGxWZXJzaW9uc0l0ci5oYXNOZXh0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBJUHJvamVjdEZhY2V0VmVyc2lvbiB0ZXN0cGZ2ID0gKElQcm9qZWN0RmFjZXRWZXJzaW9uKWFsbFZlcnNpb25zSXRyLm5leHQoKTsKLSAgICAgICAgICBTdHJpbmcgdGVzdFZlcnNpb24gPSB0ZXN0cGZ2LmdldFZlcnNpb25TdHJpbmcoKTsKLSAgICAgICAgICBpZiAoRmFjZXRVdGlscy5ncmVhdGVyVGhhbih0ZXN0VmVyc2lvbiwgbWluVmVyc2lvbikpCi0gICAgICAgICAgewotICAgICAgICAgICAgdmVyc2lvbnMuYWRkKHRlc3RwZnYpOyAgICAgICAgICAgICAgCi0gICAgICAgICAgfQotICAgICAgICB9ICAgICAgCi0gICAgICB9Ci0gICAgICAKLSAgICAgIGFsbG93ZWRQcm9qZWN0RmFjZXRWZXJzaW9ucyA9IChJUHJvamVjdEZhY2V0VmVyc2lvbltdKXZlcnNpb25zLnRvQXJyYXkobmV3IElQcm9qZWN0RmFjZXRWZXJzaW9uWzBdKTsgICAgICAKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGFsbG93ZWRQcm9qZWN0RmFjZXRWZXJzaW9uczsKLSAgfQotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbW9uL1NlcnZlckluZm8uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbW9uL1NlcnZlckluZm8uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDYyNWNiMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1vbi9TZXJ2ZXJJbmZvLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKgotICogQ3JlYXRlZCBvbiBNYXIgMjUsIDIwMDQKLSAqCi0gKiBUbyBjaGFuZ2UgdGhlIHRlbXBsYXRlIGZvciB0aGlzIGdlbmVyYXRlZCBmaWxlIGdvIHRvCi0gKiBXaW5kb3cgLSBQcmVmZXJlbmNlcyAtIEphdmEgLSBDb2RlIEdlbmVyYXRpb24gLSBDb2RlIGFuZCBDb21tZW50cwotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb247Ci0KLS8qKgotICoKLSAqLwotcHVibGljIGNsYXNzIFNlcnZlckluZm8KLXsKLSAgU3RyaW5nIHNlcnZlckZhY3RvcnlJZDsKLSAgU3RyaW5nIHNlcnZlckluc3RhbmNlSWQ7Ci0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHNlcnZlckZhY3RvcnlJZC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmVyRmFjdG9yeUlkKCkKLSAgewotICAgIHJldHVybiBzZXJ2ZXJGYWN0b3J5SWQ7Ci0gIH0KLSAgLyoqCi0gICAqIEBwYXJhbSBzZXJ2ZXJGYWN0b3J5SWQgVGhlIHNlcnZlckZhY3RvcnlJZCB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJGYWN0b3J5SWQoU3RyaW5nIHNlcnZlckZhY3RvcnlJZCkKLSAgewotICAgIHRoaXMuc2VydmVyRmFjdG9yeUlkID0gc2VydmVyRmFjdG9yeUlkOwotICB9Ci0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHNlcnZlckluc3RhbmNlSWQuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFNlcnZlckluc3RhbmNlSWQoKQotICB7Ci0gICAgcmV0dXJuIHNlcnZlckluc3RhbmNlSWQ7Ci0gIH0KLSAgLyoqCi0gICAqIEBwYXJhbSBzZXJ2ZXJJbnN0YW5jZUlkIFRoZSBzZXJ2ZXJJbnN0YW5jZUlkIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZlckluc3RhbmNlSWQoU3RyaW5nIHNlcnZlckluc3RhbmNlSWQpCi0gIHsKLSAgICB0aGlzLnNlcnZlckluc3RhbmNlSWQgPSBzZXJ2ZXJJbnN0YW5jZUlkOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1vbi9XU0RMUGFyc2VyRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tb24vV1NETFBhcnNlckZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTZkZDE4MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1vbi9XU0RMUGFyc2VyRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmRpc2NvdmVyeS5XZWJTZXJ2aWNlc1BhcnNlckV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci0KLS8qKgotICogCi0gKiBUaGUgZmFjdG9yeSBjbGFzcyBjYW4gYmUgdXNlZCB0byBnZXQgYXQgYSBzaW5nbGUgaW5zdGFuY2Ugb2YgdGhlCi0gKiBXU0RMIHBhcnNlci4gIE5vdGU6ICBUaGlzIGNsYXNzIGlzIHRlbXBvcmFyeS4gIFdlIHdpbGwgcHJvYmFibHkgY29tZQotICogdXAgd2l0aCBhIGJldHRlciBtZXRob2Qgb2YgaGFuZGxpbmcgcGFzc2luZyBhcm91bmQgdGhlIHBhcnNlci4KLSAqCi0gKi8KLS8vVE9ETyBXZSBuZWVkIHRvIGZpbmQgYSBiZXR0ZXIgd2F5IHRvIHBhc3MgYXJvdW5kIHRoZSBwYXJzZXIgdGhhbgotLy8gICAgIHVzaW5nIHRoaXMgc2luZ2xldG9uIGZhY3RvcnkuICBIb3BlZnVsbHksIHdlIGNhbiB0aGVuIGRlbGV0ZQotLy8gICAgIHRoaXMgY2xhc3MuCi1wdWJsaWMgY2xhc3MgV1NETFBhcnNlckZhY3RvcnkgCi17Ci0gIHByaXZhdGUgc3RhdGljIFdlYlNlcnZpY2VzUGFyc2VyRXh0IHBhcnNlcl87Ci0gIAotICBwcml2YXRlIFdTRExQYXJzZXJGYWN0b3J5KCkKLSAgewotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIFdlYlNlcnZpY2VzUGFyc2VyIGdldFdTRExQYXJzZXIoKQotICB7Ci0gICAgaWYoIHBhcnNlcl8gPT0gbnVsbCApCi0JewotCSAgcGFyc2VyXyA9IG5ldyBXZWJTZXJ2aWNlc1BhcnNlckV4dCgpOwotCX0KLQkKLQlyZXR1cm4gcGFyc2VyXzsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyB2b2lkIGtpbGxQYXJzZXIoKQotICB7Ci0gICAgcGFyc2VyXyA9IG51bGw7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vY29tbW9uL1dTRExSZXNvdXJjZUZpbHRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tb24vV1NETFJlc291cmNlRmlsdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzZDM3MjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tb24vV1NETFJlc291cmNlRmlsdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uQW55RmlsdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5Db25zdW1wdGlvbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5wbHVnaW4uV2ViU2VydmljZUNvbnN1bXB0aW9uUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLQotLyoqCi0qIFRoaXMgaXMgYSBraW5kIG9mIEZpbHRlciB0aGF0IGFjY2VwdHMgb25seSBvYmplY3RzCi0qIHdoaWNoIGluZGljYXRlIGEgV1NETCByZXNvdXJjZS4gSW4gcGFydGljdWxhciwgYW55Ci0qIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2V9IHdob3NlCi0qIHBhdGhuYW1lLCBvciBhbnkgb2JqZWN0IHdob3NlIHN0cmluZyByZXByZXNlbnRhdGlvbiBhcwotKiByZXR1cm5lZCBieSA8Y29kZT50b1N0cmluZygpPC9jb2RlPiwgZW5kcyBpbgotKiAiPGNvZGU+LndzZGw8L2NvZGU+IiB3aWxsIGJlIGFjY2VwdGVkLgotKiBBbGwgb3RoZXIgb2JqZWN0cyB3aWxsIGJlIHJlamVjdGVkLgotKi8KLXB1YmxpYyBjbGFzcyBXU0RMUmVzb3VyY2VGaWx0ZXIgZXh0ZW5kcyBBbnlGaWx0ZXIKLXsKLSAgLyoqCi0gICogQ29uc3RydWN0cyBhIG5ldyA8Y29kZT5XU0RMUmVzb3VyY2VGaWx0ZXI8L2NvZGU+LgotICAqLwotICBwdWJsaWMgV1NETFJlc291cmNlRmlsdGVyICgpCi0gIHsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIGxvY2FsZS1zcGVjaWZpYyBuYW1lIG9mIHRoaXMgZmlsdGVyLgotICAqIEByZXR1cm4gVGhlIGxvY2FsZS1zcGVjaWZpYyBuYW1lIG9mIHRoaXMgZmlsdGVyLgotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUgKCkKLSAgewotICAgIHJldHVybiBDb25zdW1wdGlvbk1lc3NhZ2VzLldTRExfRklMVEVSX05BTUU7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBsb2NhbGUtc3BlY2lmaWMgZGVzY3JpcHRpb24gb2YgdGhpcyBmaWx0ZXIuCi0gICogQHJldHVybiBUaGUgbG9jYWxlLXNwZWNpZmljIGRlc2NyaXB0aW9uIG9mIHRoaXMgZmlsdGVyLgotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uICgpCi0gIHsKLSAgICByZXR1cm4gQ29uc3VtcHRpb25NZXNzYWdlcy5XU0RMX0ZJTFRFUl9ERVNDOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyBhbiB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXN9Ci0gICogZGVzY3JpYmluZyB0aGUgPGNvZGU+RmlsdGVyPC9jb2RlPidzIGFzc2Vzc21lbnQgb2YKLSAgKiB0aGUgZ2l2ZW4gPGNvZGU+b2JqZWN0PC9jb2RlPi4KLSAgKiBAcGFyYW0gb2JqZWN0IFRoZSBvYmplY3QgdG8gZmlsdGVyLgotICAqIEByZXR1cm4gQW4ge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzfQotICAqIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgaWYgdGhlIGdpdmVuIDxjb2RlPm9iamVjdDwvY29kZT4KLSAgKiByZXByZXNlbnRzIGEgV1NETCByZXNvdXJjZS4KLSAgKi8KLSAgcHVibGljIElTdGF0dXMgc3RhdHVzT2YgKCBPYmplY3Qgb2JqZWN0ICkKLSAgewotICAgIGlmIChvYmplY3QgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gbmV3IFN0YXR1cygKLSAgICAgICAgSVN0YXR1cy5FUlJPUiwKLSAgICAgICAgV2ViU2VydmljZUNvbnN1bXB0aW9uUGx1Z2luLklELAotICAgICAgICAwLAotICAgICAgICBDb25zdW1wdGlvbk1lc3NhZ2VzLkZJTFRFUl9NU0dfRVJST1JfTlVMTF9PQkpFQ1QsCi0gICAgICAgIG51bGwKLSAgICAgICk7Ci0gICAgfQotCi0gICAgU3RyaW5nIG5hbWUgPSBudWxsOwotCi0gICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIElSZXNvdXJjZSkKLSAgICB7Ci0gICAgICBJUmVzb3VyY2UgcmVzb3VyY2UgPSAoSVJlc291cmNlKW9iamVjdDsKLSAgICAgIG5hbWUgPSByZXNvdXJjZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCk7Ci0gICAgICBpZiAocmVzb3VyY2UuZ2V0VHlwZSgpICE9IElSZXNvdXJjZS5GSUxFKQotICAgICAgewotICAgICAgICByZXR1cm4gbmV3IFN0YXR1cygKLSAgICAgICAgICBJU3RhdHVzLkVSUk9SLAotICAgICAgICAgIFdlYlNlcnZpY2VDb25zdW1wdGlvblBsdWdpbi5JRCwKLSAgICAgICAgICAwLAotICAgICAgICAgIE5MUy5iaW5kKENvbnN1bXB0aW9uTWVzc2FnZXMuRklMVEVSX01TR19FUlJPUl9OT1RfRklMRSxuZXcgT2JqZWN0W10ge25hbWV9KSwKLSAgICAgICAgICBudWxsCi0gICAgICAgICk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG5hbWUgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBuYW1lID0gb2JqZWN0LnRvU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgaWYgKCFuYW1lLmVuZHNXaXRoKCIud3NkbCIpKQotICAgIHsKLSAgICAgIHJldHVybiBuZXcgU3RhdHVzKAotICAgICAgICBJU3RhdHVzLkVSUk9SLAotICAgICAgICBXZWJTZXJ2aWNlQ29uc3VtcHRpb25QbHVnaW4uSUQsCi0gICAgICAgIDAsCi0gICAgICAgIE5MUy5iaW5kKENvbnN1bXB0aW9uTWVzc2FnZXMuV1NETF9GSUxURVJfTVNHX0VSUk9SX1dST05HX0VYVEVOU0lPTixuZXcgT2JqZWN0W10ge25hbWV9KSwKLSAgICAgICAgbnVsbAotICAgICAgKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbmV3IFN0YXR1cyhJU3RhdHVzLk9LLFdlYlNlcnZpY2VDb25zdW1wdGlvblBsdWdpbi5JRCwwLCIiLG51bGwpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1vbi9XZWJTZXJ2aWNlU3RhcnRTZXJ2ZXJSZWdpc3RyeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9jb21tb24vV2ViU2VydmljZVN0YXJ0U2VydmVyUmVnaXN0cnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGIwNTg1Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2NvbW1vbi9XZWJTZXJ2aWNlU3RhcnRTZXJ2ZXJSZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5FbnZpcm9ubWVudFNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JTG9nOwotCi0KLQotLyoqCi0qIFRoaXMgaXMgdGhlIHJlZ2lzdHJ5IG9mIFdlYlNlcnZpY2VTdGFydFNlcnZlclR5cGUgb2JqZWN0cy4KLSovCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZVN0YXJ0U2VydmVyUmVnaXN0cnkKLXsKLQotICBwcml2YXRlIHN0YXRpYyBXZWJTZXJ2aWNlU3RhcnRTZXJ2ZXJSZWdpc3RyeSBpbnN0YW5jZV87Ci0gIHByaXZhdGUgSGFzaHRhYmxlIFN0YXJ0U2VydmVyVHlwZXM7Ci0KLSAgLy8KLSAgLy8gTG9hZHMgV2ViU2VydmljZVN0YXJ0U2VydmVyVHlwZSBvYmplY3RzIGludG8gdGhpcyByZWdpc3RyeS4KLSAgLy8gU2VlIG1ldGhvZCBnZXRJbnN0YW5jZSgpLgotICAvLwotICBwcml2YXRlIHZvaWQgbG9hZCAoKQotICB7Ci0gICAgU3RhcnRTZXJ2ZXJUeXBlcyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBJRXh0ZW5zaW9uUmVnaXN0cnkgcmVnID0gUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKTsKLSAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBjb25maWcgPSByZWcuZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzRm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3ZWJTZXJ2aWNlU3RhcnRTZXJ2ZXJUeXBlIik7Ci0KLSAgICBmb3IoaW50IGlkeD0wOyBpZHg8Y29uZmlnLmxlbmd0aDsgaWR4KyspIAotICAgIHsKLSAgICAgIElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtID0gY29uZmlnW2lkeF07Ci0gICAgICB0cnkgCi0gICAgICB7Ci0gICAgICAgICAgU3RyaW5nIGZhY3RvcnlJZF8gPSBlbGVtLmdldEF0dHJpYnV0ZSgiZmFjdG9yeUlkIik7Ci0JCSAgU3RhcnRTZXJ2ZXJUeXBlcy5wdXQoZmFjdG9yeUlkXywgZWxlbSk7Ci0JICAKLSAgICAgIH0gCi0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIElMb2cgbG9nID0gRW52aXJvbm1lbnRTZXJ2aWNlLmdldEVjbGlwc2VMb2coKTsKLSAgICAgICAgbG9nLmxvZyhJTG9nLkVSUk9SLCA1MDQ3LCB0aGlzLCAibG9hZCIsIGUpOwotICAgICAgfQotICAgICAgCi0gICAgfQotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyBhIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLgotICAqIEByZXR1cm4gQSBzaW5nbGV0b24gV2ViU2VydmljZVN0YXJ0U2VydmVyUmVnaXN0cnkgb2JqZWN0LgotICAqLwotICBwdWJsaWMgc3RhdGljIFdlYlNlcnZpY2VTdGFydFNlcnZlclJlZ2lzdHJ5IGdldEluc3RhbmNlICgpCi0gIHsKLSAgICBpZiAoaW5zdGFuY2VfID09IG51bGwpCi0gICAgewotICAgICAgaW5zdGFuY2VfID0gbmV3IFdlYlNlcnZpY2VTdGFydFNlcnZlclJlZ2lzdHJ5KCk7Ci0gICAgICBpbnN0YW5jZV8ubG9hZCgpOwotICAgIH0KLSAgICByZXR1cm4gaW5zdGFuY2VfOwotICB9Ci0KLSAgIHB1YmxpYyBPYmplY3QgZ2V0U2VydmVyU3RhcnRCeVR5cGVJZCAoU3RyaW5nIHR5cGVJRCkgdGhyb3dzIENvcmVFeGNlcHRpb24KLSAgIHsKLSAgICBpZiAodHlwZUlEPT1udWxsKQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgcmV0dXJuICgoSUNvbmZpZ3VyYXRpb25FbGVtZW50KVN0YXJ0U2VydmVyVHlwZXMuZ2V0KHR5cGVJRCkpLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oImNsYXNzIik7Ci0gIH0KLSAgCi0gICBwdWJsaWMgYm9vbGVhbiBpc1JlbW92ZUVBUlJlcXVpcmVkKFN0cmluZyB0eXBlSWQpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLSAgIAlpZiAodHlwZUlkIT1udWxsKSB7Ci0gICAJCUlDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtID0gKElDb25maWd1cmF0aW9uRWxlbWVudClTdGFydFNlcnZlclR5cGVzLmdldCh0eXBlSWQpOwotICAgCQlpZiAoZWxlbSE9bnVsbCl7Ci0gICAJCQlTdHJpbmcgdmFsdWUgPSBlbGVtLmdldEF0dHJpYnV0ZSgicmVtb3ZlRUFSIik7Ci0gICAJCQlpZiAodmFsdWUhPW51bGwpewotICAgCQkJCXJldHVybiBCb29sZWFuLnZhbHVlT2YodmFsdWUpLmJvb2xlYW5WYWx1ZSgpOwotICAgCQkJfQotICAgCQl9Ci0gICAJfQotCXJldHVybiB0cnVlOyAgIAkJIAotICAgfSAgIAotfQotCi0KLQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvQXJyYXlFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvQXJyYXlFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzZGI5NTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL0FycmF5RWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkJhc2ljTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSBKYXZhIGJlYW4uCi0qIE5lYXJlc3QgbW9yYWwgZXF1aXZhbGVudHM6IGphdmEubGFuZy5DbGFzcywgamF2YS5iZWFucy5CZWFuRGVzY3JpcHRvci4KLSovCi1wdWJsaWMgY2xhc3MgQXJyYXlFbGVtZW50IGV4dGVuZHMgVHlwZUVsZW1lbnQKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgQVJSQVlfTkFNRSA9ICIxMDEwMTAxMGFycmF5MTAxMDEwMTAiOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBSRUxfTUVUSE9EUyA9ICJyZWxtZXRob2RzIjsKLSAKLSAgLyoqCi0gICogQ29uc3RydWN0b3IgCi0gICogQHBhcmFtIHByb2plY3RFbGVtZW50IFRoZSBwcm9qZWN0IHRoaXMgQmVhbiBiZWxvbmdzIHRvLgotICAqLwotICBwdWJsaWMgQXJyYXlFbGVtZW50IChTdHJpbmcgbmFtZSkKLSAgewotICAgIHRoaXMobmFtZSxuZXcgQmFzaWNNb2RlbCgiUHJvamVjdCIpLHRydWUpOwotICB9Ci0KLSAgLyoqCi0gICogQ29uc3RydWN0b3IgCi0gICogQHBhcmFtIHBhcmFtZXRlckVsZW1lbnQgVGhlIHBhcmFtZXRlciB0aGlzIEJlYW4gYmVsb25ncyB0by4KLSAgKi8KLSAgcHVibGljIEFycmF5RWxlbWVudCAoU3RyaW5nIG5hbWUsIE1vZGVsIG1vZGVsLGJvb2xlYW4gaXNSb290KQotICB7Ci0gICAgc3VwZXIobmFtZSxtb2RlbCxUeXBlRWxlbWVudC5BUlJBWSk7Ci0gICAgaWYoaXNSb290KSBtb2RlbC5zZXRSb290RWxlbWVudCh0aGlzKTsKLSAgICBmT3duZXJUeXBlID0gVHlwZUVsZW1lbnQuUk9PVDsKLSAgfQotICAKLSAgCi0gIC8qKgotICAqIENvbnN0cnVjdG9yIGZvciB0aGUgY2FzZSB3aGVuIHRoaXMgaXMgbm90IHRoZSByb290IG9iamVjdAotICAqIGhlcmUgaXQgcmVwcmVzZW50cyBjb21wbGV4IHR5cGVzCi0gICogQHBhcmFtIFBhcmFtZXRlckVsZW1lbnQgVGhlIFBhcmFtZXRlciB0aGF0IG93bnMgdGhpcyBiZWFuIHR5cGUuCi0gICogQHBhcmFtIFN0cmluZyBOYW1lIG9mIHRoZSBiZWFuIGVsZW1lbnQuCi0gICovCi0gIHB1YmxpYyBBcnJheUVsZW1lbnQgKCBQYXJhbWV0ZXJFbGVtZW50IHBhcmFtZXRlckVsZW1lbnQsIFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIobmFtZSxwYXJhbWV0ZXJFbGVtZW50LFR5cGVFbGVtZW50LlJFTF9PV05FUixUeXBlRWxlbWVudC5SRUxfVFlQRSxUeXBlRWxlbWVudC5BUlJBWSk7Ci0gICAgZk93bmVyVHlwZSA9IFR5cGVFbGVtZW50LlBBUkFNRVRFUl9PV05FUjsKLSAgfQotCi0gIC8qKgotICAqIENvbnN0cnVjdG9yIGZvciB0aGUgY2FzZSB3aGVuIHRoaXMgaXMgbm90IHRoZSByb290IG9iamVjdAotICAqIGhlcmUgaXQgcmVwcmVzZW50cyBjb21wbGV4IHR5cGVzCi0gICogQHBhcmFtIFBhcmFtZXRlckVsZW1lbnQgVGhlIFBhcmFtZXRlciB0aGF0IG93bnMgdGhpcyBiZWFuIHR5cGUuCi0gICogQHBhcmFtIFN0cmluZyBOYW1lIG9mIHRoZSBQYXJhbWV0ZXJFbGVtZW50LgotICAqLwotICBwdWJsaWMgQXJyYXlFbGVtZW50ICggQXR0cmlidXRlRWxlbWVudCBhdHRyaWJ1dGVFbGVtZW50LCBTdHJpbmcgbmFtZSkKLSAgewotICAgIHN1cGVyKG5hbWUsYXR0cmlidXRlRWxlbWVudCxUeXBlRWxlbWVudC5SRUxfT1dORVIsVHlwZUVsZW1lbnQuUkVMX1RZUEUsVHlwZUVsZW1lbnQuQVJSQVkpOwotICAgIGZPd25lclR5cGUgPSBUeXBlRWxlbWVudC5BVFRSSUJVVEVfT1dORVI7Ci0gIH0KLQotICAvKioKLSAgKiBDb25zdHJ1Y3RvciBmb3IgdGhlIGNhc2Ugd2hlbiB0aGlzIGlzIG5vdCB0aGUgcm9vdCBvYmplY3QKLSAgKiBoZXJlIGl0IHJlcHJlc2VudHMgY29tcGxleCB0eXBlcwotICAqIEBwYXJhbSBGaWVsZEVsZW1lbnQgVGhlIFBhcmFtZXRlciB0aGF0IG93bnMgdGhpcyBiZWFuIHR5cGUuCi0gICogQHBhcmFtIFN0cmluZyBOYW1lIG9mIHRoZSBQYXJhbWV0ZXJFbGVtZW50LgotICAqLwotICBwdWJsaWMgQXJyYXlFbGVtZW50ICggRmllbGRFbGVtZW50IGZpZWxkRWxlbWVudCwgU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihuYW1lLGZpZWxkRWxlbWVudCxUeXBlRWxlbWVudC5SRUxfT1dORVIsVHlwZUVsZW1lbnQuUkVMX1RZUEUsVHlwZUVsZW1lbnQuQVJSQVkpOwotICAgIGZPd25lclR5cGUgPSBUeXBlRWxlbWVudC5GSUVMRF9PV05FUjsKLSAgfQotCi0KLSAgLyoKLSAgKiBkZXRlcm1pbmUgd2V0aGVyIHRoaXMgaXMgYW4gb2JqZWN0IGFycmF5IG9yCi0gICogcHJpbWl0aXZlIGFycmF5Ci0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VHlwZU5hbWUoKQotICB7Ci0gICAgcmV0dXJuIEFSUkFZX05BTUUgKyBnZXROYW1lKCk7Ci0gIH0KLQotIAotICAKLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL0FycmF5VHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL0FycmF5VHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTZjYjJkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9BcnJheVR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmdVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5HZW5lcmF0b3I7Ci0KLQotLyoqCi0qIG9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSByZWNvZ25pemVkIHJldHVybiB0eXBlCi0qIAotKi8KLXB1YmxpYyBjbGFzcyBBcnJheVR5cGUgZXh0ZW5kcyBSZWNvZ25pemVkUmV0dXJuVHlwZQotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIAotICAvKioKLSAgKkNvbnN0cnVjdG9yCi0gICoKLSAgKi8KLSAgcHVibGljIEFycmF5VHlwZShTdHJpbmcgdHlwZU5hbWUpCi0gIHsKLSAgICB0aGlzKFR5cGVGYWN0b3J5LkFSUkFZX05BTUUsdHlwZU5hbWUpOwotICB9Ci0KLSAgcHVibGljIEFycmF5VHlwZShTdHJpbmcgbmFtZSxTdHJpbmcgdHlwZU5hbWUpCi0gIHsKLSAgICBzdXBlcihuYW1lKTsKLSAgfSAKLQotIAotICAgLyoqCi0gICogVGhpcyBpcyBiYXNpY2FsbHkgdGhlIGZ1bmN0aW9uIHRoYXQgZGljdGF0ZXMgaG93IHdlIHdhbnQgdG8gZGlzcGxheSB0aGlzIHR5cGUgCi0gICogdXBvbiByZWNlaXZpbmcgaXQgYXMgYSByZXR1cm4gZnJvbSBhIHByb3h5IG1ldGhvZAotICAqIEBwYXJhbSBTdHJpbmcgdGhlIG5hbWUgb2YgdGhlIHR5cGUKLSAgKiBAcmV0dXJuIFN0cmluZyBUaGUgZGlzcGxheSBzdHJpbmcKLSAgKi8KLSAgcHVibGljIFN0cmluZyBUeXBlQ29udmVyc2lvbihTdHJpbmcgbmFtZSkKLSAgewotICAgICAKLSAgICBTdHJpbmcgbm9uQmVhbiA9IEdlbmVyYXRvci5ET1VCTEVfVEFCICsgImphdmEudXRpbC5MaXN0IGxpc3QiICsgZ2V0VW5pcXVlTmFtZSgpICsgIj0gamF2YS51dGlsLkFycmF5cy5hc0xpc3QoIiArIG5hbWUgKyAiKTsiICtTdHJpbmdVdGlscy5ORVdMSU5FCi0gICAgCSAgICAgICAgICAgICArIEdlbmVyYXRvci5ET1VCTEVfVEFCICsgIlN0cmluZyB0ZW1wIisgZ2V0VW5pcXVlTmFtZSgpICsiID0gbGlzdCIgKyBnZXRVbmlxdWVOYW1lKCkgKyAiLnRvU3RyaW5nKCk7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgCi0gICAgICAgICAgICAgICAgICAgICArIEdlbmVyYXRvci5ET1VCTEVfVEFCICsgIiU+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgIAotICAgIAkgICAgICAgICAgICAgKyBHZW5lcmF0b3IuRE9VQkxFX1RBQiArICI8JT10ZW1wIisgZ2V0VW5pcXVlTmFtZSgpICsiJT4iICsgU3RyaW5nVXRpbHMuTkVXTElORQotICAgICAgICAgICAgICAgICAgICAgKyBHZW5lcmF0b3IuRE9VQkxFX1RBQiArICI8JSIrIFN0cmluZ1V0aWxzLk5FV0xJTkU7Ci0KLSAgICByZXR1cm4gbm9uQmVhbjsKLSAgfQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvQXR0cmlidXRlRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL0F0dHJpYnV0ZUVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTM3Y2Y3MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvQXR0cmlidXRlRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5CYXNpY0VsZW1lbnQ7Ci0KLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSBKYXZhIGJlYW4gbWV0aG9kIHBhcmFtZXRlci4KLSogTmVhcmVzdCBtb3JhbCBlcXVpdmFsZW50czogamF2YS5iZWFucy5QYXJhbWV0ZXJEZXNjcmlwdG9yLgotKi8KLXB1YmxpYyBjbGFzcyBBdHRyaWJ1dGVFbGVtZW50IGV4dGVuZHMgQmFzaWNFbGVtZW50IGltcGxlbWVudHMgQXR0cmlidXRlRWxlbWVudFR5cGUKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRUxfVFlQRSA9ICJ0eXBlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVMX09XTklOR19CRUFOID0gIm93bmluZ2JlYW4iOwotCi0gIHByaXZhdGUgU3RyaW5nIGZTZXR0ZXJNZXRob2Q7Ci0gIHByaXZhdGUgU3RyaW5nIGZHZXR0ZXJNZXRob2Q7Ci0KLSAgLyoqCi0gICogQ29uc3RydWN0b3IgdGhpcyB0YWtlcyB0aGUgb3duaW5nIGJlYW4uCi0gICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZS4KLSAgKiBAcGFyYW0gYmVhbkVsZW1lbnQgdGhlIGJlYW4gdGhhdCBvd25zIHRoaXMgYXR0cmlidXRlLgotICAqLwotICBwdWJsaWMgQXR0cmlidXRlRWxlbWVudCAoIEJlYW5FbGVtZW50IGJlYW5FbGVtZW50LCBTdHJpbmcgbmFtZSkKLSAgewotICAgIHN1cGVyKG5hbWUsYmVhbkVsZW1lbnQsUkVMX09XTklOR19CRUFOLEJlYW5FbGVtZW50LlJFTF9BVFRSSUJVVEVTKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U2V0dGVyTWV0aG9kKFN0cmluZyBzZXR0ZXJNZXRob2QpCi0gIHsKLSAgICBmU2V0dGVyTWV0aG9kID0gc2V0dGVyTWV0aG9kOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZXR0ZXJNZXRob2QoKQotICB7Ci0gICAgcmV0dXJuIGZTZXR0ZXJNZXRob2Q7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEdldHRlck1ldGhvZCgpCi0gIHsKLSAgICByZXR1cm4gZkdldHRlck1ldGhvZDsKLSAgfQotIAotICBwdWJsaWMgdm9pZCBzZXRHZXR0ZXJNZXRob2QoU3RyaW5nIGdldHRlck1ldGhvZCkKLSAgewotICAgIGZHZXR0ZXJNZXRob2QgPSBnZXR0ZXJNZXRob2Q7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNldHRlclNpZ25hdHVyZShTdHJpbmcgYXR0cmlidXRlKQotICB7Ci0gICAgaW50IGJyYWNrZXQgPSBmU2V0dGVyTWV0aG9kLmluZGV4T2YoIigiKTsKLSAgICBicmFja2V0Kys7Ci0gICAgU3RyaW5nIHNldHRlciA9IGZTZXR0ZXJNZXRob2Quc3Vic3RyaW5nKDAsYnJhY2tldCk7Ci0gICAgU3RyaW5nIGZ1bGxTZXR0ZXIgPSBzZXR0ZXIgKyBhdHRyaWJ1dGUgKyAiKTsiOwotICAgCi0gICAgcmV0dXJuIGZ1bGxTZXR0ZXI7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBCZWFuIHRoYXQgb3ducyB0aGlzIEF0dHJpYnV0ZS4KLSAgKiBAcmV0dXJuIEJlYW5FbGVtZW50IFRoZSBiZWFuIHRoYXQgb3ducyB0aGlzIGF0dHJpYnV0ZS4KLSAgKi8KLSAgcHVibGljIEJlYW5FbGVtZW50IGdldE93bmluZ0JlYW5FbGVtZW50ICgpCi0gIHsKLSAgICBFbnVtZXJhdGlvbiBlID0gZ2V0RWxlbWVudHMoUkVMX09XTklOR19CRUFOKTsKLSAgICByZXR1cm4gZS5oYXNNb3JlRWxlbWVudHMoKSA/IChCZWFuRWxlbWVudCllLm5leHRFbGVtZW50KCkgOiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgdHlwZSB0aGF0IGlzIG93bmVkIGJ5IHRoaXMgYXR0cmlidXR0ZS4KLSAgKiBAcmV0dXJuIFR5cGVFbGVtZW50IFRoZSBUeXBlIHRoYXQgb2YgdGhpcyBhdHRyaWJ1dGUuCi0gICovCi0gIHB1YmxpYyBUeXBlRWxlbWVudCBnZXRUeXBlRWxlbWVudCAoKQotICB7Ci0gICAgRW51bWVyYXRpb24gZSA9IGdldEVsZW1lbnRzKFJFTF9UWVBFKTsKLSAgICByZXR1cm4gZS5oYXNNb3JlRWxlbWVudHMoKSA/IChUeXBlRWxlbWVudCllLm5leHRFbGVtZW50KCkgOiBudWxsOwotICB9Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9BdHRyaWJ1dGVFbGVtZW50VHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL0F0dHJpYnV0ZUVsZW1lbnRUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiMGI2ZmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL0F0dHJpYnV0ZUVsZW1lbnRUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSBKYXZhIGJlYW4gbWV0aG9kIHBhcmFtZXRlci4KLSogTmVhcmVzdCBtb3JhbCBlcXVpdmFsZW50czogamF2YS5iZWFucy5QYXJhbWV0ZXJEZXNjcmlwdG9yLgotKi8KLXB1YmxpYyBpbnRlcmZhY2UgQXR0cmlidXRlRWxlbWVudFR5cGUgCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgIAotICBwdWJsaWMgdm9pZCBzZXRTZXR0ZXJNZXRob2QoU3RyaW5nIHNldHRlck1ldGhvZCk7Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0U2V0dGVyTWV0aG9kKCk7Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0R2V0dGVyTWV0aG9kKCk7Ci0gIHB1YmxpYyB2b2lkIHNldEdldHRlck1ldGhvZChTdHJpbmcgZ2V0dGVyTWV0aG9kKTsKLSAgcHVibGljIEJlYW5FbGVtZW50IGdldE93bmluZ0JlYW5FbGVtZW50ICgpOwotICBwdWJsaWMgVHlwZUVsZW1lbnQgZ2V0VHlwZUVsZW1lbnQgKCk7Ci0gIC8qKgotICAqIFJldHVybiB0aGUgc2lnbmF0dXJlIHdpdGggdGhpcyB2YWx1ZSBhcyB0aGUgcGFybWV0ZXIKLSAgKgotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFNldHRlclNpZ25hdHVyZShTdHJpbmcgYXR0cmlidXRlKTsKLSAgCi19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9CZWFuRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL0JlYW5FbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5YzlkMGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL0JlYW5FbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNjEyICAgMTQ1NDMzIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuQmFzaWNNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotCi0KLS8qKgotKiBPYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgSmF2YSBiZWFuLgotKiBOZWFyZXN0IG1vcmFsIGVxdWl2YWxlbnRzOiBqYXZhLmxhbmcuQ2xhc3MsIGphdmEuYmVhbnMuQmVhbkRlc2NyaXB0b3IuCi0qLwotcHVibGljIGNsYXNzIEJlYW5FbGVtZW50IGV4dGVuZHMgVHlwZUVsZW1lbnQKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgU1RBVEVMRVNTX0JFQU4gPSAiMTAxMDEwMTBzdGF0ZWxlc3NiZWFuMTAxMDEwMTAiOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBSRUxfTUVUSE9EUyA9ICJyZWxtZXRob2RzIjsKLSAgcHVibGljIHN0YXRpYyBpbnQgUkVBRE9OTFkgPSAwOwotICBwdWJsaWMgc3RhdGljIGludCBXUklURU9OTFkgPSAxOwotICBwdWJsaWMgc3RhdGljIGludCBSRUFEV1JJVEUgPSAyOwotICBwcml2YXRlIGludCBhdHRyaWIgPSAyOwotICAKLSAgCi0gIC8qKgotICAqIENvbnN0cnVjdG9yIAotICAqIEBwYXJhbSBwcm9qZWN0RWxlbWVudCBUaGUgcHJvamVjdCB0aGlzIEJlYW4gYmVsb25ncyB0by4KLSAgKi8KLSAgcHVibGljIEJlYW5FbGVtZW50IChTdHJpbmcgbmFtZSkKLSAgewotICAgIHRoaXMobmFtZSxuZXcgQmFzaWNNb2RlbCgiUHJvamVjdCIpLHRydWUpOwotICB9Ci0KLSAgLyoqCi0gICogQ29uc3RydWN0b3IgCi0gICogQHBhcmFtIHBhcmFtZXRlckVsZW1lbnQgVGhlIHBhcmFtZXRlciB0aGlzIEJlYW4gYmVsb25ncyB0by4KLSAgKi8KLSAgcHVibGljIEJlYW5FbGVtZW50IChTdHJpbmcgbmFtZSwgTW9kZWwgbW9kZWwsYm9vbGVhbiBpc1Jvb3QpCi0gIHsKLSAgICBzdXBlcihuYW1lLG1vZGVsLFR5cGVFbGVtZW50LkJFQU4pOwotICAgIGlmKGlzUm9vdCkgbW9kZWwuc2V0Um9vdEVsZW1lbnQodGhpcyk7Ci0gICAgZk93bmVyVHlwZSA9IFR5cGVFbGVtZW50LlJPT1Q7Ci0gIH0KLQotICAvKioKLSAgKiBDb25zdHJ1Y3RvciBmb3IgdGhlIGNhc2Ugd2hlbiB0aGlzIGlzIG5vdCB0aGUgcm9vdCBvYmplY3QKLSAgKiBoZXJlIGl0IHJlcHJlc2VudHMgY29tcGxleCB0eXBlcwotICAqIEBwYXJhbSBQYXJhbWV0ZXJFbGVtZW50IFRoZSBQYXJhbWV0ZXIgdGhhdCBvd25zIHRoaXMgYmVhbiB0eXBlLgotICAqIEBwYXJhbSBTdHJpbmcgTmFtZSBvZiB0aGUgYmVhbiBlbGVtZW50LgotICAqLwotICBwdWJsaWMgQmVhbkVsZW1lbnQgKCBQYXJhbWV0ZXJFbGVtZW50IHBhcmFtZXRlckVsZW1lbnQsIFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIobmFtZSxwYXJhbWV0ZXJFbGVtZW50LFR5cGVFbGVtZW50LlJFTF9PV05FUixUeXBlRWxlbWVudC5SRUxfVFlQRSxUeXBlRWxlbWVudC5CRUFOKTsKLSAgICBmT3duZXJUeXBlID0gVHlwZUVsZW1lbnQuUEFSQU1FVEVSX09XTkVSOwotICB9Ci0KLSAgLyoqCi0gICogQ29uc3RydWN0b3IgZm9yIHRoZSBjYXNlIHdoZW4gdGhpcyBpcyBub3QgdGhlIHJvb3Qgb2JqZWN0Ci0gICogaGVyZSBpdCByZXByZXNlbnRzIGNvbXBsZXggdHlwZXMKLSAgKiBAcGFyYW0gUGFyYW1ldGVyRWxlbWVudCBUaGUgUGFyYW1ldGVyIHRoYXQgb3ducyB0aGlzIGJlYW4gdHlwZS4KLSAgKiBAcGFyYW0gU3RyaW5nIE5hbWUgb2YgdGhlIFBhcmFtZXRlckVsZW1lbnQuCi0gICovCi0gIHB1YmxpYyBCZWFuRWxlbWVudCAoIEF0dHJpYnV0ZUVsZW1lbnQgYXR0cmlidXRlRWxlbWVudCwgU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihuYW1lLGF0dHJpYnV0ZUVsZW1lbnQsVHlwZUVsZW1lbnQuUkVMX09XTkVSLFR5cGVFbGVtZW50LlJFTF9UWVBFLFR5cGVFbGVtZW50LkJFQU4pOwotICAgIGZPd25lclR5cGUgPSBUeXBlRWxlbWVudC5BVFRSSUJVVEVfT1dORVI7Ci0gICAgYXR0cmliRnVuY3Rpb24oYXR0cmlidXRlRWxlbWVudCk7Ci0gIH0KLSAKLSAgcHJpdmF0ZSB2b2lkIGF0dHJpYkZ1bmN0aW9uKEF0dHJpYnV0ZUVsZW1lbnQgYXR0cmlidXRlRWxlbWVudCl7Ci0JaWYoYXR0cmlidXRlRWxlbWVudC5nZXRHZXR0ZXJNZXRob2QoKSAhPSBudWxsICYmIGF0dHJpYnV0ZUVsZW1lbnQuZ2V0U2V0dGVyTWV0aG9kKCkgIT0gbnVsbCkgYXR0cmliID0gUkVBRFdSSVRFOwotCWVsc2UgaWYoYXR0cmlidXRlRWxlbWVudC5nZXRHZXR0ZXJNZXRob2QoKSA9PSBudWxsICYmIGF0dHJpYnV0ZUVsZW1lbnQuZ2V0U2V0dGVyTWV0aG9kKCkgIT0gbnVsbCkgYXR0cmliID0gV1JJVEVPTkxZOwotCWVsc2UgaWYoYXR0cmlidXRlRWxlbWVudC5nZXRHZXR0ZXJNZXRob2QoKSAhPSBudWxsICYmIGF0dHJpYnV0ZUVsZW1lbnQuZ2V0U2V0dGVyTWV0aG9kKCkgPT0gbnVsbCkgYXR0cmliID0gUkVBRE9OTFk7Ci0gIH0KLSAgCi0gICAvKioKLSAgKiBDb25zdHJ1Y3RvciBmb3IgdGhlIGNhc2Ugd2hlbiB0aGlzIGlzIG5vdCB0aGUgcm9vdCBvYmplY3QKLSAgKiBoZXJlIGl0IHJlcHJlc2VudHMgY29tcGxleCB0eXBlcwotICAqIEBwYXJhbSBQYXJhbWV0ZXJFbGVtZW50IFRoZSBQYXJhbWV0ZXIgdGhhdCBvd25zIHRoaXMgYmVhbiB0eXBlLgotICAqIEBwYXJhbSBTdHJpbmcgTmFtZSBvZiB0aGUgUGFyYW1ldGVyRWxlbWVudC4KLSAgKi8KLSAgcHVibGljIEJlYW5FbGVtZW50ICggRmllbGRFbGVtZW50IGZpZWxkRWxlbWVudCwgU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihuYW1lLGZpZWxkRWxlbWVudCxUeXBlRWxlbWVudC5SRUxfT1dORVIsVHlwZUVsZW1lbnQuUkVMX1RZUEUsVHlwZUVsZW1lbnQuQkVBTik7Ci0gICAgZk93bmVyVHlwZSA9IFR5cGVFbGVtZW50LkZJRUxEX09XTkVSOwotICAKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgYW4gZW51bWVyYXRpb24gb2YgYWxsIE1ldGhvZCBvYmplY3RzIG9mIHRoaXMgQmVhbi4KLSAgKiBAcmV0dXJuIEVudW1lcmF0aW9uIEFsbCBNZXRob2Qgb2JqZWN0cyBvZiB0aGlzIEJlYW4uCi0gICovCi0gIHB1YmxpYyBFbnVtZXJhdGlvbiBnZXRNZXRob2RzICgpCi0gIHsKLSAgICByZXR1cm4gZ2V0RWxlbWVudHMoUkVMX01FVEhPRFMpOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIE1ldGhvZCBvYmplY3RzIG9mIHRoaXMgQmVhbi4KLSAgKiBAcmV0dXJuIGludCBUaGUgbnVtYmVyIG9mIE1ldGhvZCBvYmplY3RzIG9mIHRoaXMgQmVhbi4KLSAgKi8KLSAgcHVibGljIGludCBnZXROdW1iZXJPZk1ldGhvZEVsZW1lbnRzICgpCi0gIHsKLSAgICByZXR1cm4gZ2V0TnVtYmVyT2ZFbGVtZW50cyhSRUxfTUVUSE9EUyk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFR5cGVOYW1lKCkKLSAgewotICAgIGlmKGlzU3RhdGVMZXNzKCkpIHJldHVybiBTVEFURUxFU1NfQkVBTiArIGdldE5hbWUoKTsKLSAgICByZXR1cm4gZ2V0TmFtZSgpOwotICB9Ci0KLSAgcHVibGljIGludCBnZXRBdHRyaWIoKQotICB7Ci0gICAgcmV0dXJuIGF0dHJpYjsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0QXR0cmliKGludCBhdHRyaWIpCi0gIHsKLSAgICB0aGlzLmF0dHJpYiA9IGF0dHJpYjsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gaXNTdGF0ZUxlc3MoKQotICB7Ci0gICAgRW51bWVyYXRpb24gZWEgPSBnZXRFbGVtZW50cyhUeXBlRWxlbWVudC5SRUxfQVRUUklCVVRFUyk7Ci0gICAgRW51bWVyYXRpb24gZWYgPSBnZXRFbGVtZW50cyhUeXBlRWxlbWVudC5SRUxfRklFTERTKTsKLSAgICBpZihlYS5oYXNNb3JlRWxlbWVudHMoKSB8fCBlZi5oYXNNb3JlRWxlbWVudHMoKSkgcmV0dXJuIGZhbHNlOwotICAgIGVsc2UgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAKLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL0JlYW5Nb2RlbEVsZW1lbnRzRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL0JlYW5Nb2RlbEVsZW1lbnRzRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzRkNmFmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9CZWFuTW9kZWxFbGVtZW50c0ZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkZpZWxkOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkphdmFDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhSGVscGVyczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLk1ldGhvZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uc2FtcGxlYXBwLmNvbW1vbi5TYW1wbGVQcm9wZXJ0eURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci0KLS8qKgotICogVHlwZUZhY3RvcnkKLSAqIENyZWF0aW9uIGRhdGU6ICg0LzEwLzIwMDEgMTI6NDE6NDggUE0pCi0gKiBAYXV0aG9yOiBHaWxiZXJ0IEFuZHJld3MKLSAqLwotcHVibGljIGNsYXNzIEJlYW5Nb2RlbEVsZW1lbnRzRmFjdG9yeSAKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVUVVJOX1BBUkFNX05BTUU9InJldHVybnAiOwotCi0gIHByaXZhdGUgQmVhbk1vZGVsRWxlbWVudHNGYWN0b3J5KCl7fQotCi0gIHB1YmxpYyBzdGF0aWMgRWxlbWVudCBnZXRCZWFuTW9kZWxFbGVtZW50KE9iamVjdCBvYmplY3QpCi0gIHsKLSAgICByZXR1cm4gQmVhbk1vZGVsRWxlbWVudHNGYWN0b3J5LmdldEJlYW5Nb2RlbEVsZW1lbnQob2JqZWN0LG51bGwsbnVsbCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgZ2V0QmVhbk1vZGVsRWxlbWVudChPYmplY3Qgb2JqZWN0LEVsZW1lbnQgcGFyZW50RWxlbWVudCkKLSAgewotICAgIHJldHVybiBCZWFuTW9kZWxFbGVtZW50c0ZhY3RvcnkuZ2V0QmVhbk1vZGVsRWxlbWVudChvYmplY3QscGFyZW50RWxlbWVudCxudWxsKTsKLSAgfQotICAKLSAvKgotICAqIFRha2UgaW4gYW4gb2JqZWN0IGFuZCByZXR1cm4gYW4gZWxlbWVudCBkZXBlbmRpbmcgb24gd2hhdCAKLSAgKiB0eXBlIHdlIGFyZSBkZWFsaW5nIHdpdGggZnJvbSB0aGUgamF2YW1vZgotICAqKi8KLSAgcHVibGljIHN0YXRpYyBFbGVtZW50IGdldEJlYW5Nb2RlbEVsZW1lbnQoT2JqZWN0IG9iamVjdCxFbGVtZW50IHBhcmVudEVsZW1lbnQsIE1vZGVsIG1vZGVsKQotICB7Ci0gICAgRWxlbWVudCByZXR1cm5FbGVtZW50ID0gbnVsbDsKLQotICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBKYXZhQ2xhc3MpewotICAgICAgSmF2YUNsYXNzIGphdmFDbGFzcyA9IChKYXZhQ2xhc3Mpb2JqZWN0OwotICAgICAgU3RyaW5nIGphdmFOYW1lID0gamF2YUNsYXNzLmdldEphdmFOYW1lKCk7Ci0gICAgICBpZiAoIWphdmFDbGFzcy5pc0FycmF5KCkpeyAKLQkgICAgICBpZihwYXJlbnRFbGVtZW50ID09IG51bGwgJiYgbW9kZWwgPT1udWxsKSByZXR1cm5FbGVtZW50ID0gbmV3IEJlYW5FbGVtZW50KGphdmFOYW1lKTsKLQkgICAgICBlbHNlIGlmKHBhcmVudEVsZW1lbnQgPT0gbnVsbCAmJiBtb2RlbCAhPW51bGwpIHJldHVybkVsZW1lbnQgPSBuZXcgQmVhbkVsZW1lbnQoamF2YU5hbWUsbW9kZWwsZmFsc2UpOwotCSAgICAgIGVsc2V7Ci0JICAgICAgICBpZihwYXJlbnRFbGVtZW50IGluc3RhbmNlb2YgUGFyYW1ldGVyRWxlbWVudCl7IAotCSAgICAgICAgICAgUGFyYW1ldGVyRWxlbWVudCB0ZW1wRWxlbWVudCA9IChQYXJhbWV0ZXJFbGVtZW50KXBhcmVudEVsZW1lbnQ7Ci0JICAgICAgICAgICByZXR1cm5FbGVtZW50ID0gbmV3IEJlYW5FbGVtZW50KHRlbXBFbGVtZW50LGphdmFOYW1lKTsKLQkgICAgICAgIH0KLQkgICAgICAgIGVsc2UgaWYocGFyZW50RWxlbWVudCBpbnN0YW5jZW9mIEF0dHJpYnV0ZUVsZW1lbnQpewotCSAgICAgICAgICAgQXR0cmlidXRlRWxlbWVudCB0ZW1wRWxlbWVudCA9IChBdHRyaWJ1dGVFbGVtZW50KXBhcmVudEVsZW1lbnQ7Ci0JICAgICAgICAgICByZXR1cm5FbGVtZW50ID0gbmV3IEJlYW5FbGVtZW50KHRlbXBFbGVtZW50LGphdmFOYW1lKTsKLQkgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYocGFyZW50RWxlbWVudCBpbnN0YW5jZW9mIEZpZWxkRWxlbWVudCl7Ci0gICAgICAgICAgICAgICBGaWVsZEVsZW1lbnQgdGVtcEVsZW1lbnQgPSAoRmllbGRFbGVtZW50KXBhcmVudEVsZW1lbnQ7Ci0JICAgICAgICAgICByZXR1cm5FbGVtZW50ID0gbmV3IEJlYW5FbGVtZW50KHRlbXBFbGVtZW50LGphdmFOYW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYocGFyZW50RWxlbWVudCBpbnN0YW5jZW9mIE1ldGhvZEVsZW1lbnQpewotICAgICAgICAgICAgICAgcmV0dXJuRWxlbWVudCA9IG5ldyBQYXJhbWV0ZXJFbGVtZW50KChNZXRob2RFbGVtZW50KXBhcmVudEVsZW1lbnQsUkVUVVJOX1BBUkFNX05BTUUsTWV0aG9kRWxlbWVudC5SRUxfUkVUVVJOX1BBUkFNRVRFUlMsdHJ1ZSk7Ci0gICAgICAgICAgICB9CSAgICAgICAgIAotCSAgICAgIH0KLSAgICAgIH0gCi0gICAgICBlbHNlewotICAgICAgICAgIGlmKHBhcmVudEVsZW1lbnQgPT0gbnVsbCAmJiBtb2RlbCA9PW51bGwpIHJldHVybkVsZW1lbnQgPSBuZXcgQXJyYXlFbGVtZW50KGphdmFOYW1lKTsKLQkgICAgICBlbHNlIGlmKHBhcmVudEVsZW1lbnQgPT0gbnVsbCAmJiBtb2RlbCAhPW51bGwpIHJldHVybkVsZW1lbnQgPSBuZXcgQXJyYXlFbGVtZW50KGphdmFOYW1lLG1vZGVsLGZhbHNlKTsKLQkgICAgICBlbHNlewotCSAgICAgICAgaWYocGFyZW50RWxlbWVudCBpbnN0YW5jZW9mIFBhcmFtZXRlckVsZW1lbnQpeyAKLQkgICAgICAgICAgIFBhcmFtZXRlckVsZW1lbnQgdGVtcEVsZW1lbnQgPSAoUGFyYW1ldGVyRWxlbWVudClwYXJlbnRFbGVtZW50OwotCSAgICAgICAgICAgcmV0dXJuRWxlbWVudCA9IG5ldyBBcnJheUVsZW1lbnQodGVtcEVsZW1lbnQsamF2YU5hbWUpOwotCSAgICAgICAgfQotCSAgICAgICAgZWxzZSBpZihwYXJlbnRFbGVtZW50IGluc3RhbmNlb2YgQXR0cmlidXRlRWxlbWVudCl7Ci0JICAgICAgICAgICBBdHRyaWJ1dGVFbGVtZW50IHRlbXBFbGVtZW50ID0gKEF0dHJpYnV0ZUVsZW1lbnQpcGFyZW50RWxlbWVudDsKLQkgICAgICAgICAgIHJldHVybkVsZW1lbnQgPSBuZXcgQXJyYXlFbGVtZW50KHRlbXBFbGVtZW50LGphdmFOYW1lKTsKLQkgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYocGFyZW50RWxlbWVudCBpbnN0YW5jZW9mIEZpZWxkRWxlbWVudCl7Ci0gICAgICAgICAgICAgICBGaWVsZEVsZW1lbnQgdGVtcEVsZW1lbnQgPSAoRmllbGRFbGVtZW50KXBhcmVudEVsZW1lbnQ7Ci0JICAgICAgICAgICByZXR1cm5FbGVtZW50ID0gbmV3IEFycmF5RWxlbWVudCh0ZW1wRWxlbWVudCxqYXZhTmFtZSk7Ci0JICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmKHBhcmVudEVsZW1lbnQgaW5zdGFuY2VvZiBNZXRob2RFbGVtZW50KXsKLSAgICAgICAgICAgICAgIHJldHVybkVsZW1lbnQgPSBuZXcgUGFyYW1ldGVyRWxlbWVudCgoTWV0aG9kRWxlbWVudClwYXJlbnRFbGVtZW50LFJFVFVSTl9QQVJBTV9OQU1FLE1ldGhvZEVsZW1lbnQuUkVMX1JFVFVSTl9QQVJBTUVURVJTLHRydWUpOwotICAgICAgICAgICAgfQotCi0JICAgICAgfQotICAgICAgIH0KLQotICAgIH0KLSAgICBlbHNlIGlmKG9iamVjdCBpbnN0YW5jZW9mIFNhbXBsZVByb3BlcnR5RGVzY3JpcHRvcil7Ci0gICAgICBTYW1wbGVQcm9wZXJ0eURlc2NyaXB0b3IgcGQgPSAoU2FtcGxlUHJvcGVydHlEZXNjcmlwdG9yKW9iamVjdDsKLSAgICAgIHJldHVybkVsZW1lbnQgPSBuZXcgQXR0cmlidXRlRWxlbWVudCgoQmVhbkVsZW1lbnQpcGFyZW50RWxlbWVudCxwZC5nZXROYW1lKCkpOyAgCi0gICAgfQotICAgIGVsc2UgaWYob2JqZWN0IGluc3RhbmNlb2YgRmllbGQpewotICAgICAgRmllbGQgZmllbGQgPSAoRmllbGQpb2JqZWN0OwotICAgICAgcmV0dXJuRWxlbWVudCA9IG5ldyBGaWVsZEVsZW1lbnQoKEJlYW5FbGVtZW50KXBhcmVudEVsZW1lbnQsZmllbGQuZ2V0TmFtZSgpKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgTWV0aG9kKXsKLSAgICAgIE1ldGhvZCBtZXRob2QgPSAoTWV0aG9kKW9iamVjdDsKLSAgICAgIHJldHVybkVsZW1lbnQgPSBuZXcgTWV0aG9kRWxlbWVudCgoQmVhbkVsZW1lbnQpcGFyZW50RWxlbWVudCxtZXRob2QuZ2V0TmFtZSgpLCBtZXRob2QuZ2V0TWV0aG9kRWxlbWVudFNpZ25hdHVyZSgpKTsKLSAgICB9Ci0gICAgLy9ub24gYmVhbmluZm8KLSAgICBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBTdHJpbmcpewotICAgICAgU3RyaW5nIG5hbWUgPSAoU3RyaW5nKW9iamVjdDsgIAotICAgICAgcmV0dXJuRWxlbWVudCA9IG5ldyBBdHRyaWJ1dGVFbGVtZW50KChCZWFuRWxlbWVudClwYXJlbnRFbGVtZW50LG5hbWUpOwotICAgIH0KLSAgICBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBKYXZhUGFyYW1ldGVyKXsKLSAgICAgIEphdmFQYXJhbWV0ZXIgamF2YVBhcmFtZXRlciA9IChKYXZhUGFyYW1ldGVyKW9iamVjdDsKLQotICAgICAgCi0gICAgICBpZiAoamF2YVBhcmFtZXRlci5pc1JldHVybigpKSAKLSAgICAgICAgIHJldHVybkVsZW1lbnQgPSBuZXcgUGFyYW1ldGVyRWxlbWVudCgoTWV0aG9kRWxlbWVudClwYXJlbnRFbGVtZW50LFJFVFVSTl9QQVJBTV9OQU1FLE1ldGhvZEVsZW1lbnQuUkVMX1JFVFVSTl9QQVJBTUVURVJTLHRydWUpOyAKLSAgICAgIGVsc2V7IAotICAgICAgICAgLy9hIGphdmEgcGFyYW1ldGVyIGdpdmVzIHVzIHRoZSBxdWFsaWZpZWQgbmFtZSB3ZSBkb250IHdhbnQgdGhpcwotICAgICAgICAgU3RyaW5nIG5hbWUgPSBqYXZhUGFyYW1ldGVyLmdldFF1YWxpZmllZE5hbWUoKTsKLSAgICAgICAgIFN0cmluZyBzaG9ydE5hbWU7Ci0gICAgICAgICBpbnQgaW5kZXggPSBuYW1lLmxhc3RJbmRleE9mKCIuIik7Ci0gICAgICAgICBpZiAoaW5kZXggIT0gLTEpewotICAgICAgICAgICBpbmRleCsrOwotICAgICAgICAgICBzaG9ydE5hbWUgPSBuYW1lLnN1YnN0cmluZyhpbmRleCk7Ci0gICAgICAgICB9Ci0gICAgICBlbHNlIHNob3J0TmFtZSA9IG5hbWU7Ci0KLSAgICAgICAgIHJldHVybkVsZW1lbnQgPSBuZXcgUGFyYW1ldGVyRWxlbWVudCgoTWV0aG9kRWxlbWVudClwYXJlbnRFbGVtZW50LHNob3J0TmFtZSxNZXRob2RFbGVtZW50LlJFTF9QQVJBTUVURVJTLGZhbHNlKTsgCi0KLSAgICAgIH0KLSAgICAgCi0gICAgfQotICAgIGVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEphdmFIZWxwZXJzKXsKLSAgICAgIEphdmFIZWxwZXJzIGphdmFIZWxwZXIgPSAoSmF2YUhlbHBlcnMpb2JqZWN0OwotICAgICAgU3RyaW5nIGphdmFOYW1lOyAKLSAgICAgIGlmIChqYXZhSGVscGVyLmlzQXJyYXkoKSkgamF2YU5hbWUgPSBUeXBlRmFjdG9yeS5BUlJBWV9OQU1FOwotICAgICAgZWxzZSBqYXZhTmFtZSA9IGphdmFIZWxwZXIuZ2V0SmF2YU5hbWUoKTsKLSAgICAgIGlmIChwYXJlbnRFbGVtZW50IGluc3RhbmNlb2YgUGFyYW1ldGVyRWxlbWVudCl7Ci0gICAgICAgICAgcmV0dXJuRWxlbWVudCA9IG5ldyBTaW1wbGVFbGVtZW50KChQYXJhbWV0ZXJFbGVtZW50KXBhcmVudEVsZW1lbnQsamF2YU5hbWUsamF2YUhlbHBlci5pc1ByaW1pdGl2ZSgpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYocGFyZW50RWxlbWVudCBpbnN0YW5jZW9mIEF0dHJpYnV0ZUVsZW1lbnQpewotICAgICAgICAgIHJldHVybkVsZW1lbnQgPSBuZXcgU2ltcGxlRWxlbWVudCgoQXR0cmlidXRlRWxlbWVudClwYXJlbnRFbGVtZW50LGphdmFOYW1lLGphdmFIZWxwZXIuaXNQcmltaXRpdmUoKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmKHBhcmVudEVsZW1lbnQgaW5zdGFuY2VvZiBGaWVsZEVsZW1lbnQpewotICAgICAgICAgIHJldHVybkVsZW1lbnQgPSBuZXcgU2ltcGxlRWxlbWVudCgoRmllbGRFbGVtZW50KXBhcmVudEVsZW1lbnQsamF2YU5hbWUsamF2YUhlbHBlci5pc1ByaW1pdGl2ZSgpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYocGFyZW50RWxlbWVudCBpbnN0YW5jZW9mIE1ldGhvZEVsZW1lbnQpewotICAgICAgCXJldHVybkVsZW1lbnQgPSBuZXcgUGFyYW1ldGVyRWxlbWVudCgoTWV0aG9kRWxlbWVudClwYXJlbnRFbGVtZW50LFJFVFVSTl9QQVJBTV9OQU1FLE1ldGhvZEVsZW1lbnQuUkVMX1JFVFVSTl9QQVJBTUVURVJTLHRydWUpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmV0dXJuRWxlbWVudDsKLSAgfQotICAKLSAgCi0gIAotCi0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL0JpZ0RlY2ltYWxUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvQmlnRGVjaW1hbFR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRkYTBjMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvQmlnRGVjaW1hbFR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbDsKLQotLyoqCi0qIG9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSB0eXBlCi0qIAotKi8KLXB1YmxpYyBjbGFzcyBCaWdEZWNpbWFsVHlwZSBleHRlbmRzIFNpbXBsZVR5cGUgCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgCi0gIC8qKgotICAqQ29uc3RydWN0b3IKLSAgKgotICAqLwotICBwdWJsaWMgQmlnRGVjaW1hbFR5cGUoKQotICB7Ci0gICAgc3VwZXIoVHlwZUZhY3RvcnkuQklHX0RFQ0lNQUxfTkFNRSk7Ci0gIH0KLSAKLSAgLyoqCi0gICogU3RyaW5nVG9UeXBlIGdldHMgdGhlIHN0cmluZyB0YWtlbiBieSB0aGUgCi0gICogdXNlciBpbnRvIHByb3h5IGZvcm0KLSAgKiBAcmV0dXJuIFN0cmluZyBjb252ZXJ0IHRoZSBzdHJpbmcgdG8gdHlwZSAuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgU3RyaW5nVG9UeXBlKFN0cmluZyBuYW1lKQotICB7Ci0gICAgcmV0dXJuICJuZXcgamF2YS5tYXRoLkJpZ0RlY2ltYWwoIiArIG5hbWUgKyAiKTsiOwotICB9Ci0KLSAgLyoqCi0gICogVGhlIHN0cmluZ0NvbnZlcnNpb24gZnVuY3Rpb24gbmFpbHMgb3V0IHNwZWNpZmljIGNvbnZlcnNpb24gbWV0aG9kcyB1c2VkIGFtb25nIHNpbXBsZSB0eXBlcyAKLSAgKiBUaGlzIG1ldGhvZCBpcyB0byBiZSBpbXBsZW1lbnRlZCBieSBTaW1wbGVUeXBlIHN1YmNsYXNzZXMKLSAgKiBAcGFyYW0gU3RyaW5nIHRoZSBuYW1lIG9mIHN0cmluZyBhZnRlciB0aGUgcmVxdWVzdCBjYWxsCi0gICogQHJldHVybiBTdHJpbmcgdGhlIGFjdHVhbCBjb252ZXJzaW9uIHN0cmluZyBjb250YWluaW5nIHRoZSBuYW1lLgotICAqLwotICBwdWJsaWMgU3RyaW5nIFR5cGVUb1N0cmluZyhTdHJpbmcgbmFtZSkKLSAgewotICAgIHJldHVybiBuYW1lICsgIi50b1N0cmluZygpIjsKLSAgfQotIAotIH0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL0JpZ0ludGVnZXJUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvQmlnSW50ZWdlclR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWNmNjAzMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvQmlnSW50ZWdlclR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbDsKLQotLyoqCi0qIG9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSB0eXBlCi0qIAotKi8KLXB1YmxpYyBjbGFzcyBCaWdJbnRlZ2VyVHlwZSBleHRlbmRzIFNpbXBsZVR5cGUgCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgCi0gIC8qKgotICAqQ29uc3RydWN0b3IKLSAgKgotICAqLwotICBwdWJsaWMgQmlnSW50ZWdlclR5cGUoKQotICB7Ci0gICAgc3VwZXIoVHlwZUZhY3RvcnkuQklHX0lOVEVHRVJfTkFNRSk7Ci0gIH0KLSAKLSAgLyoqCi0gICogU3RyaW5nVG9UeXBlIGdldHMgdGhlIHN0cmluZyB0YWtlbiBieSB0aGUgCi0gICogdXNlciBpbnRvIHByb3h5IGZvcm0KLSAgKiBAcmV0dXJuIFN0cmluZyBjb252ZXJ0IHRoZSBzdHJpbmcgdG8gdHlwZSAuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgU3RyaW5nVG9UeXBlKFN0cmluZyBuYW1lKQotICB7Ci0gICAgcmV0dXJuICJuZXcgamF2YS5tYXRoLkJpZ0ludGVnZXIoIiArIG5hbWUgKyAiKTsiOwotICB9Ci0KLSAgLyoqCi0gICogVGhlIHN0cmluZ0NvbnZlcnNpb24gZnVuY3Rpb24gbmFpbHMgb3V0IHNwZWNpZmljIGNvbnZlcnNpb24gbWV0aG9kcyB1c2VkIGFtb25nIHNpbXBsZSB0eXBlcyAKLSAgKiBUaGlzIG1ldGhvZCBpcyB0byBiZSBpbXBsZW1lbnRlZCBieSBTaW1wbGVUeXBlIHN1YmNsYXNzZXMKLSAgKiBAcGFyYW0gU3RyaW5nIHRoZSBuYW1lIG9mIHN0cmluZyBhZnRlciB0aGUgcmVxdWVzdCBjYWxsCi0gICogQHJldHVybiBTdHJpbmcgdGhlIGFjdHVhbCBjb252ZXJzaW9uIHN0cmluZyBjb250YWluaW5nIHRoZSBuYW1lLgotICAqLwotICBwdWJsaWMgU3RyaW5nIFR5cGVUb1N0cmluZyhTdHJpbmcgbmFtZSkKLSAgewotICAgIHJldHVybiBuYW1lICsgIi50b1N0cmluZygpIjsKLSAgfQotIAotIH0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL0RhdGFUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvRGF0YVR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg2MWE2OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvRGF0YVR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbDsKLQotCi0vKioKLSogb2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIHR5cGUKLSogVGhpcyBjbGFzcyBpcyB1c2VkIHRvIHNpbXBsaWZ5IHRoZSBjb2RlZ2VuIHByb2Nlc3MKLSogQmVjYXVzZSBjb2RlZ2VuIG1heSBiZSBwcm9jZXNzZWQgZGlmZmVyZW50bHkgZGVwZW5kaW5nIG9uIHRoZSB0eXBlCi0qIHdlIGNhbiBoYW5kbGUgaG93IGVhY2ggdHlwZSB3YW50cyB0aGUgY29kZSB0byBsb29rIGZvciBhIHNwZWNpZmljIHRhc2sgCi0qIGJ5IGNyZWF0aW5nIGEgZGF0YXR5cGUgYW5kIGNhbGxpbmcgZ2VuZXJpYyBtZXRob2RzIHRoYXQgYXJlIAotKiB0byBiZSBzcGVjaWFsaXplZCBpbiBzdWJjbGFzc2VzCi0qLwotcHVibGljIGludGVyZmFjZSBEYXRhVHlwZSAKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgUkVMX1RZUEUgPSAidHlwZSI7Ci0KLSAgLyoqCi0gICogVGhpcyBmdW5jdGlvbiBoYW5kcyBiYWNrIHRoZSBjb2RlIHJlcXVpcmVkIHRvIGdvIGZyb20gdGhlIAotICAqIHN0cmluZyB0aGUgdXNlciBlbnRlcmVkIHRvIHRoZSBhY3R1YWwgdHlwZSBvZiB0aGUgZWxlbWVudAotICAqIEBwYXJhbSBTdHJpbmcgdHlwZU5hbWUgdGhpcyBpcyB0aGUgYWN0dWFsIG5hbWUgb2YgdGhlIHR5cGUgaWUgaW50LGJvb2xlYW4KLSAgKiBAcGFyYW0gU3RyaW5nIG5vZGVOYW1lIFRoZSBub2RlTmFtZSBpcyBqdXN0IHRoZSBhdHRyaWJ1dGVuYW1lICsgVGVtcC4gCi0gICogQHBhcmFtIFN0cmluZyB0aGUgYXR0cmlidXRlTmFtZSAKLSAgKiBAcmV0dXJuIFN0cmluZyBjb252ZXJ0IHRoZSBzdHJpbmcgdG8gdHlwZSAuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgc3RyaW5nQ29udmVyc2lvbihTdHJpbmcgdHlwZU5hbWUsIFN0cmluZyBub2RlTmFtZSwgU3RyaW5nIGF0dHJpYnV0ZU5hbWUpOwotCi0gIC8qKgotICAqIE9mdGVuIHRpbWVzIGluIG9yZGVyIHRvIGNvbnZlcnQgYSB0eXBlIHRvIHN0cmluZywgc3RyaW5nIHRvIHR5cGUgb3IganVzdCBwbGFpbiBwcm92aWRlIGFuIGlucHV0IGZvcm0KLSAgKiBBIHRlbXBvcmFyeSB2YXJpYWJsZSBpcyB1c2VkLiBJZiB3ZSBydW4gaW50byBhIHNpdHV0aW9uIHdoZXJlIHR3byBvZiB0aGUgc2FtZSB0eXBlcyBhcmUgdXNlZCBpbiB0aGUgIAotICAqIHNhbWUgbWV0aG9kIHRoZXNlIHRlbXBvcmFyeSB2YXJpYWJsZXMgc2hhcmUgdGhlIHNhbWUgbmFtZSBzcGFjZS4gSXQgaXNudCBlbm91Z2ggdG8gdXNlIGEgbmFtZSAKLSAgKiBiZWNhdXNlIG9mIHdlIG1heSBoYXZlIGEgbmVzdGVkIHNjZW5hcmlvLiBUaGVyZWZvcmUgYW55IHRlbXBvcmFyeSB2YXJpYWJsZSB0aGF0IGlzIHVzZWQgaW4gYSBkYXRhVHlwZQotICAqIG11c3QgdXNlIGEgdW5pcXVlIG5hbWUgYXBlZW5kZWQgdG8gdGhlIGVuZC4gVGhpcyBuYW1lIG11c3QgYmUgcGFzc2VkIGluIGFuZCBpdCBpcyB1cCB0byB0aGUgdXNlciBvZgotICAqIERhdGFUeXBlIHRvIGluc3VyZSBpdCBpcyB1bmlxdWUuCi0gICogQHJldHVybiBVbmlxdWUgTmFtZSAKLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0VW5pcXVlTmFtZShTdHJpbmcgbmFtZSk7Ci0KLSAgLyoqCi0gICogVGhpcyBpcyB0aGUgbmFtZSBlYWNoIHRlbXAgdmFyaWFibGUgd2lsbCB1c2UKLSAgKiAKLSAgKgotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFVuaXF1ZU5hbWUoKTsKLSAgCi0gIC8qKgotICAqIFRoaXMgZnVuY3Rpb24gZGljdGF0ZXMgaG93IHlvdSB3YW50IHRvIHByb2Nlc3MgdGhlIAotICAqIGluY29taW5nIHN0cmluZyBmcm9tIHRoZSBpbnB1dCBqc3AuIFlvdSBtYXkgb3IgbWF5IG5vdCB1c2UgdGhlIG1hcmt1cCAKLSAgKiBmdW5jdGlvbiBkZXBlbmRpbmcgb24gdGhlIHR5cGUuIFRoZSBzaW1wbGUgdHlwZXMgdXNlIGl0LiBEb21FbGVtZW50IGRvZXMgbm90Ci0gICogQHBhcmFtIFN0cmluZyB0aGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlCi0gICogQHJldHVybiBTdHJpbmcgdGhlIGNvZGUgdG8gYmUgZ2VuZXJhdGVkCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVxdWVzdENvZGUoU3RyaW5nIG5hbWUsIFN0cmluZyBpZCk7Ci0KLQotICAvKioKLSAgKiBJbnB1dCBmb3JtIHJldHVybnMgdGhlIHVzZXIgaW5wdXQgaHRtbAotICAqIEBwYXJhbSBTdHJpbmcgbmFtZSBUaGUgbmFtZSBvZiB0aGUgaW5wdXQgZWxlbWVudAotICAqIEByZXR1cm4gU3RyaW5nIFRoZSBmb3JtIHVzZWQgdG8gY29sbGVjdCB0aGUgZGF0YQotICAqLwotICBwdWJsaWMgU3RyaW5nIGlucHV0Rm9ybShTdHJpbmcgbmFtZSk7Ci0gIAotICAvKioKLSAgKiBjb252ZXJ0cyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBwcm94eSAKLSAgKiBiYWNrIHRvIGEgc3RyaW5nIAotICAqIEByZXR1cm4gU3RyaW5nIGNvbnZlcnQgdGhlIHR5cGUgdG8gc3RyaW5nLgotICAqLwotICBwdWJsaWMgU3RyaW5nIFR5cGVDb252ZXJzaW9uKFN0cmluZyBuYW1lKTsKLQotICAvKioKLSAgKiByZXR1cm4gdGhlIHR5cGUKLSAgKiBAcmV0dXJuIFN0cmluZyB0aGUgdHlwZShpbmNsdWRpbmcgcGFja2FnZSkuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VHlwZSgpOwotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvRGF0ZVR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9EYXRlVHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTgzOTg5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9EYXRlVHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uR2VuZXJhdG9yOwotCi0KLS8qKgotKiBvYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgdHlwZQotKiAKLSovCi1wdWJsaWMgY2xhc3MgRGF0ZVR5cGUgZXh0ZW5kcyBTaW1wbGVUeXBlIAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIAotICAvKioKLSAgKkNvbnN0cnVjdG9yCi0gICoKLSAgKi8KLSAgcHVibGljIERhdGVUeXBlKCkKLSAgewotICAgIHN1cGVyKFR5cGVGYWN0b3J5LkJJR19ERUNJTUFMX05BTUUpOwotICB9Ci0gCi0KLSAgLyoqCi0gICogaW5wdXRGb3JtIHJldHVybnMgdGhlIHVzZXIgaW5wdXQgaHRtbAotICAqIFRoZSBzaW1wbGUgZm9ybSBpcyBqdXN0IGEgdGV4dCBpbnB1dCBib3gKLSAgKiBUaGlzIGhhcyBiZWVuIHNwZWNpYWxpemVkIHRvIHNob3cgYW4gZXhhbXBsZQotICAqIEBwYXJhbSBTdHJpbmcgbmFtZSBUaGUgbmFtZSBvZiB0aGUgaW5wdXQgZWxlbWVudAotICAqIEByZXR1cm4gU3RyaW5nIFRoZSBmb3JtIHVzZWQgdG8gY29sbGVjdCB0aGUgZGF0YQotICAqLwotICBwdWJsaWMgU3RyaW5nIGlucHV0Rm9ybShTdHJpbmcgbmFtZSkKLSAgewotICAgICBTdHJpbmcgaW5wdXRGb3JtID0gIjxURCBBTElHTj1cImxlZnRcIj48SU5QVVQgVFlQRT1cIlRFWFRcIiBOQU1FPVwiIiAKLSAgICAgICAgICAgICAgICAgICAgICAgICArIG5hbWUgKyAiXCIgU0laRT0yMD48L1REPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FIAotICAgICAgICAgICAgICAgICAgICAgICAgICsgIjwlIiArIFN0cmluZ1V0aWxzLk5FV0xJTkUKLSAgICAgICAgICAgICAgICAgICAgICAgICArICJqYXZhLnRleHQuRGF0ZUZvcm1hdCBkYXRlRm9ybWF0IiArIGdldFVuaXF1ZU5hbWUoKSsgIiA9IGphdmEudGV4dC5EYXRlRm9ybWF0LmdldERhdGVJbnN0YW5jZSgpOyIgKyBTdHJpbmdVdGlscy5ORVdMSU5FICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgKyAiamF2YS51dGlsLkdyZWdvcmlhbkNhbGVuZGFyIGdjRXhhbXAiICsgZ2V0VW5pcXVlTmFtZSgpKyAiICA9IG5ldyBqYXZhLnV0aWwuR3JlZ29yaWFuQ2FsZW5kYXIoKTsiICsgU3RyaW5nVXRpbHMuTkVXTElORSAKLSAgICAgICAgICAgICAgICAgICAgICAgICArICJqYXZhLnV0aWwuRGF0ZSBkYXRlIiArIGdldFVuaXF1ZU5hbWUoKSsgIiA9IGdjRXhhbXAiICsgZ2V0VW5pcXVlTmFtZSgpKyAiLmdldFRpbWUoKTsiICsgU3RyaW5nVXRpbHMuTkVXTElORSAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgKyAiU3RyaW5nIHRlbXBSZXN1bHQiICsgZ2V0VW5pcXVlTmFtZSgpKyAiID0gZGF0ZUZvcm1hdCIgKyBnZXRVbmlxdWVOYW1lKCkrICIuZm9ybWF0KGRhdGUiICsgZ2V0VW5pcXVlTmFtZSgpKyAiKTsiICsgU3RyaW5nVXRpbHMuTkVXTElORSAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgKyAiJT4iICsgU3RyaW5nVXRpbHMuTkVXTElORQotICAgICAgICAgICAgICAgICAgICAgICAgICsgIjxURCBBTElHTj1cImxlZnRcIj4iICsgU3RyaW5nVXRpbHMuTkVXTElORSAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgKyAiPC9UUj4iICsgU3RyaW5nVXRpbHMuTkVXTElORQotICAgICAgICAgICAgICAgICAgICAgICAgICsgIjxUUj4iICArIFN0cmluZ1V0aWxzLk5FV0xJTkUKLSAgICAgICAgICAgICAgICAgICAgICAgICArICI8VEQ+IDwvVEQ+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUKLSAgICAgICAgICAgICAgICAgICAgICAgICArICI8VEQgQUxJR049XCJsZWZ0XCI+IGVnLiA8JT0gdGVtcFJlc3VsdCIgKyBnZXRVbmlxdWVOYW1lKCkrICIgJT4gPC9URD4iICsgU3RyaW5nVXRpbHMuTkVXTElORQotICAgICAgICAgICAgICAgICAgICAgICAgICsgIjwvVFI+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkU7Ci0gICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgIAotCi0gICAgIHJldHVybiBpbnB1dEZvcm07Ci0gIH0KLQotCi0gIC8qCi0gICogVGhpcyBmdW5jdGlvbiBuZWVkcyB0byBiZSBzcGVjaWFsaXplZAotICAqIFdlIG11c3QgdXNlIHRoZSBkYXRlIGZ1bmN0aW9uIHRvIGhlbHAKLSAgKiB1cyBjb252ZXJ0IGJhY2sgYW5kIGZvcnRoCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgc3RyaW5nQ29udmVyc2lvbihTdHJpbmcgdHlwZU5hbWUsIFN0cmluZyBub2RlTmFtZSwgU3RyaW5nIGF0dHJpYnV0ZU5hbWUpCi0gIHsKLSAgICAgU3RyaW5nIGNvbnZlcnNpb24gPSAgR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiamF2YS50ZXh0LkRhdGVGb3JtYXQgZGF0ZUZvcm1hdCIgKyBnZXRVbmlxdWVOYW1lKCkrICIgPSBqYXZhLnRleHQuRGF0ZUZvcm1hdC5nZXREYXRlSW5zdGFuY2UoKTsiICAKLSAgICAgICAgICAgICAgICAgICAgICAgICArIFN0cmluZ1V0aWxzLk5FV0xJTkUgKyBHZW5lcmF0b3IuRE9VQkxFX1RBQiArICAiamF2YS51dGlsLkRhdGUgIiArIG5vZGVOYW1lICArICAiPSBkYXRlRm9ybWF0IiArIGdldFVuaXF1ZU5hbWUoKSsgIi5wYXJzZSgiICsgYXR0cmlidXRlTmFtZSArICIpOyIgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgKyAiIiArIFN0cmluZ1V0aWxzLk5FV0xJTkU7Ci0gICAgIHJldHVybiBjb252ZXJzaW9uOwotICB9Ci0KLSAgLyoqCi0gICogdGhpcyBpcyBuZWVkZWQgZm9yIG1vc3QgY2FzZSAKLSAgKiBidXQgaXQgaXMgcGVyaXBoZXJhbCBhcyB0aGUgc3RyaW5nY29udmVyc2lvbiBuZWVkZWQgCi0gICogdG8gYmUgb3ZlcnJpZGRlbgotICAqLwotICBwdWJsaWMgU3RyaW5nIFN0cmluZ1RvVHlwZShTdHJpbmcgbmFtZSkKLSAgewotICAgIHJldHVybiAiIjsKLSAgfQotCi0KLQotICAvKioKLSAgKiBjb252ZXJ0cyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBwcm94eSAKLSAgKiBiYWNrIHRvIGEgc3RyaW5nIAotICAqIEByZXR1cm4gU3RyaW5nIGNvbnZlcnQgdGhlIHR5cGUgdG8gc3RyaW5nLgotICAqLwotICBwdWJsaWMgU3RyaW5nIFR5cGVDb252ZXJzaW9uKFN0cmluZyBuYW1lKQotICB7Ci0KLSAgICBTdHJpbmcgY29udmVyc2lvbiA9IEdlbmVyYXRvci5ET1VCTEVfVEFCICsgImphdmEudGV4dC5EYXRlRm9ybWF0IGRhdGVGb3JtYXQiICsgZ2V0VW5pcXVlTmFtZSgpKyAiID0gamF2YS50ZXh0LkRhdGVGb3JtYXQuZ2V0RGF0ZUluc3RhbmNlKCk7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgCi0gICAgCSAgICAgICAgICAgICAgICsgR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiU3RyaW5nIHRlbXBSZXN1bHQiICsgZ2V0VW5pcXVlTmFtZSgpKyAiID0gb3JnLmVjbGlwc2UuanN0LndzLnV0aWwuSnNwVXRpbHMubWFya3VwKGRhdGVGb3JtYXQiICsgZ2V0VW5pcXVlTmFtZSgpKyAiLmZvcm1hdCgiICsgbmFtZSArIikpOyIgKyBTdHJpbmdVdGlscy5ORVdMSU5FIAotICAgICAgICAgICAgICAgICAgICAgICArIEdlbmVyYXRvci5ET1VCTEVfVEFCICsgIiU+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUKLSAgICAgICAgICAgICAgICAgICAgICAgKyBHZW5lcmF0b3IuRE9VQkxFX1RBQiArICI8JT0gdGVtcFJlc3VsdCIgKyBnZXRVbmlxdWVOYW1lKCkrICIgJT4iICsgU3RyaW5nVXRpbHMuTkVXTElORQotICAgICAgICAgICAgICAgICAgICAgICArIEdlbmVyYXRvci5ET1VCTEVfVEFCICsgIjwlIiArIFN0cmluZ1V0aWxzLk5FV0xJTkU7Ci0KLSAgICByZXR1cm4gY29udmVyc2lvbjsKLSAgfQotCi0KLQotICAvKioKLSAgKiBUaGUgc3RyaW5nQ29udmVyc2lvbiBmdW5jdGlvbiBuYWlscyBvdXQgc3BlY2lmaWMgY29udmVyc2lvbiBtZXRob2RzIHVzZWQgYW1vbmcgc2ltcGxlIHR5cGVzIAotICAqIFRoaXMgbWV0aG9kIGlzIHRvIGJlIGltcGxlbWVudGVkIGJ5IFNpbXBsZVR5cGUgc3ViY2xhc3NlcwotICAqIEBwYXJhbSBTdHJpbmcgdGhlIG5hbWUgb2Ygc3RyaW5nIGFmdGVyIHRoZSByZXF1ZXN0IGNhbGwKLSAgKiBAcmV0dXJuIFN0cmluZyB0aGUgYWN0dWFsIGNvbnZlcnNpb24gc3RyaW5nIGNvbnRhaW5pbmcgdGhlIG5hbWUuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgVHlwZVRvU3RyaW5nKFN0cmluZyBuYW1lKQotICB7Ci0gICAgcmV0dXJuICIiOwotICB9Ci0gCi0gfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvRG9tRWxlbWVudFR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9Eb21FbGVtZW50VHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDQwNmFjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9Eb21FbGVtZW50VHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uR2VuZXJhdG9yOwotCi0KLS8qKgotKiBvYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgdHlwZQotKiAKLSovCi1wdWJsaWMgY2xhc3MgRG9tRWxlbWVudFR5cGUgaW1wbGVtZW50cyBEYXRhVHlwZQotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIAotICBwcm90ZWN0ZWQgU3RyaW5nIGZUeXBlOwotICBwcm90ZWN0ZWQgU3RyaW5nIGZVbmlxdWVOYW1lOwotCi0gIC8qKgotICAqQ29uc3RydWN0b3IKLSAgKgotICAqLwotICBwdWJsaWMgRG9tRWxlbWVudFR5cGUoKQotICB7Ci0gICAgZlR5cGUgPSAib3JnLnczYy5kb20uRWxlbWVudCI7Ci0gICAgZlVuaXF1ZU5hbWUgPSAiIjsKLSAgfQotCi0gIC8qKgotICAqIGlucHV0Rm9ybSByZXR1cm5zIHRoZSB1c2VyIGlucHV0IGh0bWwKLSAgKiBUaGUgRG9tRWxlbWVudCBmb3JtIGlzIGEgdGV4dCBib3gKLSAgKiBAcGFyYW0gU3RyaW5nIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGlucHV0IGVsZW1lbnQKLSAgKiBAcmV0dXJuIFN0cmluZyBUaGUgZm9ybSB1c2VkIHRvIGNvbGxlY3QgdGhlIGRhdGEKLSAgKi8KLSAgcHVibGljIFN0cmluZyBpbnB1dEZvcm0oU3RyaW5nIG5hbWUpCi0gIHsKLSAgICAgU3RyaW5nIGlucHV0Rm9ybSA9ICI8VEQgQUxJR049XCJsZWZ0XCI+PFRFWFRBUkVBIFJvd3M9NyBDb2xzPTQ1IE5BTUU9XCIiIAotICAgICAgICAgICAgICAgICAgICAgICAgICsgbmFtZSArICJcIj48L1RFWFRBUkVBPjwvVEQ+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgCi0gICAgICAgICAgICAgICAgICAgICAgICAgKyAiPC9UUj4iICsgU3RyaW5nVXRpbHMuTkVXTElORTsKLSAgICAgcmV0dXJuIGlucHV0Rm9ybTsKLSAgfQotCi0gICAvKioKLSAgKiBUaGlzIGZ1bmN0aW9uIGRpY3RhdGVzIGhvdyB5b3Ugd2FudCB0byBwcm9jZXNzIHRoZSAKLSAgKiBpbmNvbWluZyBzdHJpbmcgZnJvbSB0aGUgaW5wdXQganNwLiBZb3UgbWF5IG9yIG1heSBub3QgdXNlIHRoZSBtYXJrdXAgCi0gICogZnVuY3Rpb24gZGVwZW5kaW5nIG9uIHRoZSB0eXBlLiBUaGUgc2ltcGxlIHR5cGVzIHVzZSBpdC4gRG9tRWxlbWVudCBkb2VzIG5vdAotICAqIEBwYXJhbSBTdHJpbmcgdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZQotICAqIEByZXR1cm4gU3RyaW5nIHRoZSBjb2RlIHRvIGJlIGdlbmVyYXRlZAotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFJlcXVlc3RDb2RlKFN0cmluZyBuYW1lLCBTdHJpbmcgaWQpCi0gIHsKLSAgICAgU3RyaW5nIHJlcXVlc3RDb2RlID0gR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiU3RyaW5nIiArIEdlbmVyYXRvci5TUEFDRSAKLSAgICAgCSAgICAgICAgICAgICAgICAgICArIGlkICsgIj0gIHJlcXVlc3QuZ2V0UGFyYW1ldGVyKFwiIgotICAgICAJICAgICAgICAgICAgICAgICAgICsgbmFtZSArIlwiKTsiICsgU3RyaW5nVXRpbHMuTkVXTElORTsKLSAgICAgcmV0dXJuIHJlcXVlc3RDb2RlOwotICB9Ci0KLSAgLyoqCi0gICogVGhpcyBmdW5jdGlvbiBoYW5kcyBiYWNrIHRoZSBjb2RlIHJlcXVpcmVkIHRvIGdvIGZyb20gdGhlIAotICAqIHN0cmluZyB0aGUgdXNlciBlbnRlcmVkIHRvIHRoZSBhY3R1YWwgdHlwZSBvZiB0aGUgZWxlbWVudAotICAqIEBwYXJhbSBTdHJpbmcgdHlwZU5hbWUgdGhpcyBpcyB0aGUgYWN0dWFsIG5hbWUgb2YgdGhlIHR5cGUgaWUgaW50LGJvb2xlYW4KLSAgKiBAcGFyYW0gU3RyaW5nIG5vZGVOYW1lIFRoZSBub2RlTmFtZSBpcyBqdXN0IHRoZSBhdHRyaWJ1dGVuYW1lICsgVGVtcC4gCi0gICogQHBhcmFtIFN0cmluZyB0aGUgYXR0cmlidXRlTmFtZSAKLSAgKiBAcmV0dXJuIFN0cmluZyBjb252ZXJ0IHRoZSBzdHJpbmcgdG8gdHlwZSAuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgc3RyaW5nQ29udmVyc2lvbihTdHJpbmcgdHlwZU5hbWUsIFN0cmluZyBub2RlTmFtZSwgU3RyaW5nIGF0dHJpYnV0ZU5hbWUpCi0gIHsKLSAgICAgU3RyaW5nIGNvbnZlcnNpb24gPSAgR2VuZXJhdG9yLkRPVUJMRV9UQUIgCi0gICAgICAgICAgICAgICAgICAgICAgICsgIm9yZy53M2MuZG9tLkVsZW1lbnQgIiArIG5vZGVOYW1lICsgIj0gb3JnLmVjbGlwc2UuanN0LndzLnV0aWwuRG9tRWxlbWVudEhlbHBlci5jcmVhdGVEb21FbGVtZW50RnJvbVhNTFN0cmluZygiICsgYXR0cmlidXRlTmFtZSArICIpOyIgCi0JICAgICAgICAgICAgICAgICAgICsgU3RyaW5nVXRpbHMuTkVXTElORTsKLSAgICAgcmV0dXJuIGNvbnZlcnNpb247IAotICB9Ci0KLSAgLyoqCi0gICogVGhpcyBpcyBiYXNpY2FsbHkgdGhlIGZ1bmN0aW9uIHRoYXQgZGljdGF0ZXMgaG93IHdlIHdhbnQgdG8gZGlzcGxheSB0aGlzIHR5cGUgCi0gICogdXBvbiByZWNlaXZpbmcgaXQgYXMgYSByZXR1cm4gZnJvbSBhIHByb3h5IG1ldGhvZAotICAqIEBwYXJhbSBTdHJpbmcgdGhlIG5hbWUgb2YgdGhlIHR5cGUKLSAgKiBAcmV0dXJuIFN0cmluZyBUaGUgZGlzcGxheSBzdHJpbmcKLSAgKi8KLSAgcHVibGljIFN0cmluZyBUeXBlQ29udmVyc2lvbihTdHJpbmcgbmFtZSkKLSAgewotICAgIFN0cmluZyB0eXBlVG9TdHJpbmcgPSBHZW5lcmF0b3IuRE9VQkxFX1RBQiArICJTdHJpbmcgdGVtcFJlc3VsdCIgKyBnZXRVbmlxdWVOYW1lKCkrICIgPSBvcmcuZWNsaXBzZS5qc3Qud3MudXRpbC5Eb21FbGVtZW50SGVscGVyLmRvbVdyaXRlcigiICsgbmFtZSArICIsIG5ldyBqYXZhLmxhbmcuU3RyaW5nQnVmZmVyKCkiICsgIik7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgCi0gICAgICAgICAgICAgICAgICAgICAgICsgR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiJT4iICsgU3RyaW5nVXRpbHMuTkVXTElORQotICAgICAgICAgICAgICAgICAgICAgICArIEdlbmVyYXRvci5ET1VCTEVfVEFCICsgIjwlPSB0ZW1wUmVzdWx0IiArIGdldFVuaXF1ZU5hbWUoKSsgIiAlPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FCi0gICAgICAgICAgICAgICAgICAgICAgICsgR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiPCUiICsgU3RyaW5nVXRpbHMuTkVXTElORTsKLQotICAgIHJldHVybiB0eXBlVG9TdHJpbmc7Ci0gIH0KLQotICAvKioKLSAgKiByZXR1cm4gdGhlIG5hbWUgb2YgdGhpcyB0eXBlCi0gICogQHJldHVybiBTdHJpbmcgdGhlIG5hbWUoaW5jbHVkaW5nIHBhY2thZ2UpLgotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFR5cGUoKQotICB7Ci0gICAgcmV0dXJuIGZUeXBlOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRVbmlxdWVOYW1lKCkKLSAgewotICAgIHJldHVybiBmVW5pcXVlTmFtZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFVuaXF1ZU5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBmVW5pcXVlTmFtZSA9IG5hbWU7Ci0gIH0KLQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvRmllbGRFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvRmllbGRFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0ZmJiMWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL0ZpZWxkRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5CYXNpY0VsZW1lbnQ7Ci0KLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSBKYXZhIGJlYW4gbWV0aG9kIHBhcmFtZXRlci4KLSogTmVhcmVzdCBtb3JhbCBlcXVpdmFsZW50czogamF2YS5iZWFucy5QYXJhbWV0ZXJEZXNjcmlwdG9yLgotKi8KLXB1YmxpYyBjbGFzcyBGaWVsZEVsZW1lbnQgZXh0ZW5kcyBCYXNpY0VsZW1lbnQgaW1wbGVtZW50cyBBdHRyaWJ1dGVFbGVtZW50VHlwZQotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIHByaXZhdGUgU3RyaW5nIGZTZXR0ZXJNZXRob2Q7Ci0gIHByaXZhdGUgU3RyaW5nIGZHZXR0ZXJNZXRob2Q7Ci0KLSAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVMX1RZUEUgPSAidHlwZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFTF9PV05JTkdfQkVBTiA9ICJvd25pbmdiZWFuIjsKLSAgCi0gIC8qKgotICAqIENvbnN0cnVjdG9yIHRoaXMgdGFrZXMgdGhlIG93bmluZyBiZWFuLgotICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUuCi0gICogQHBhcmFtIGJlYW5FbGVtZW50IHRoZSBiZWFuIHRoYXQgb3ducyB0aGlzIGF0dHJpYnV0ZS4KLSAgKi8KLSAgcHVibGljIEZpZWxkRWxlbWVudCAoIEJlYW5FbGVtZW50IGJlYW5FbGVtZW50LCBTdHJpbmcgbmFtZSkKLSAgewotICAgIHN1cGVyKG5hbWUsYmVhbkVsZW1lbnQsUkVMX09XTklOR19CRUFOLEJlYW5FbGVtZW50LlJFTF9GSUVMRFMpOwotICAgIGZTZXR0ZXJNZXRob2QgPSBuYW1lOwotICAgIGZHZXR0ZXJNZXRob2QgPSBuYW1lOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0U2V0dGVyTWV0aG9kKFN0cmluZyBzZXR0ZXJNZXRob2QpCi0gIHsKLSAgICBmU2V0dGVyTWV0aG9kID0gc2V0dGVyTWV0aG9kOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZXR0ZXJNZXRob2QoKQotICB7Ci0gICAgcmV0dXJuIGZTZXR0ZXJNZXRob2Q7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEdldHRlck1ldGhvZCgpCi0gIHsKLSAgICByZXR1cm4gZkdldHRlck1ldGhvZDsKLSAgfQotIAotICBwdWJsaWMgdm9pZCBzZXRHZXR0ZXJNZXRob2QoU3RyaW5nIGdldHRlck1ldGhvZCkKLSAgewotICAgIGZHZXR0ZXJNZXRob2QgPSBnZXR0ZXJNZXRob2Q7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNldHRlclNpZ25hdHVyZShTdHJpbmcgYXR0cmlidXRlKQotICB7Ci0gICAgcmV0dXJuIGZTZXR0ZXJNZXRob2QgKyAiID0gIiArIGF0dHJpYnV0ZSArICI7IjsKLSAgfQotICAgCi0gIC8qKgotICAqIFJldHVybnMgdGhlIEJlYW4gdGhhdCBvd25zIHRoaXMgQXR0cmlidXRlLgotICAqIEByZXR1cm4gQmVhbkVsZW1lbnQgVGhlIGJlYW4gdGhhdCBvd25zIHRoaXMgYXR0cmlidXRlLgotICAqLwotICBwdWJsaWMgQmVhbkVsZW1lbnQgZ2V0T3duaW5nQmVhbkVsZW1lbnQgKCkKLSAgewotICAgIEVudW1lcmF0aW9uIGUgPSBnZXRFbGVtZW50cyhSRUxfT1dOSU5HX0JFQU4pOwotICAgIHJldHVybiBlLmhhc01vcmVFbGVtZW50cygpID8gKEJlYW5FbGVtZW50KWUubmV4dEVsZW1lbnQoKSA6IG51bGw7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSB0eXBlIHRoYXQgaXMgb3duZWQgYnkgdGhpcyBhdHRyaWJ1dHRlLgotICAqIEByZXR1cm4gVHlwZUVsZW1lbnQgVGhlIFR5cGUgdGhhdCBvZiB0aGlzIGF0dHJpYnV0ZS4KLSAgKi8KLSAgcHVibGljIFR5cGVFbGVtZW50IGdldFR5cGVFbGVtZW50ICgpCi0gIHsKLSAgICBFbnVtZXJhdGlvbiBlID0gZ2V0RWxlbWVudHMoUkVMX1RZUEUpOwotICAgIHJldHVybiBlLmhhc01vcmVFbGVtZW50cygpID8gKFR5cGVFbGVtZW50KWUubmV4dEVsZW1lbnQoKSA6IG51bGw7Ci0gIH0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL0dyZWdvcmlhbkNhbGVuZGFyVHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL0dyZWdvcmlhbkNhbGVuZGFyVHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkN2NmYmY5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9HcmVnb3JpYW5DYWxlbmRhclR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlN0cmluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLkdlbmVyYXRvcjsKLQotLyoqCi0qIG9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSB0eXBlCi0qIAotKi8KLXB1YmxpYyBjbGFzcyBHcmVnb3JpYW5DYWxlbmRhclR5cGUgZXh0ZW5kcyBTaW1wbGVUeXBlIAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIAotICAvKioKLSAgKkNvbnN0cnVjdG9yCi0gICoKLSAgKi8KLSAgcHVibGljIEdyZWdvcmlhbkNhbGVuZGFyVHlwZSgpCi0gIHsKLSAgICBzdXBlcihUeXBlRmFjdG9yeS5HUkVHT1JJQU5fQ0FMRU5EQVJfTkFNRSk7Ci0gIH0KLQotCi0gIC8qKgotICAqIGlucHV0Rm9ybSByZXR1cm5zIHRoZSB1c2VyIGlucHV0IGh0bWwKLSAgKiBUaGUgc2ltcGxlIGZvcm0gaXMganVzdCBhIHRleHQgaW5wdXQgYm94Ci0gICogVGhpcyBoYXMgYmVlbiBzcGVjaWFsaXplZCB0byBzaG93IGFuIGV4YW1wbGUKLSAgKiBAcGFyYW0gU3RyaW5nIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGlucHV0IGVsZW1lbnQKLSAgKiBAcmV0dXJuIFN0cmluZyBUaGUgZm9ybSB1c2VkIHRvIGNvbGxlY3QgdGhlIGRhdGEKLSAgKi8KLSAgcHVibGljIFN0cmluZyBpbnB1dEZvcm0oU3RyaW5nIG5hbWUpCi0gIHsKLSAgICAgU3RyaW5nIGlucHV0Rm9ybSA9ICI8VEQgQUxJR049XCJsZWZ0XCI+PElOUFVUIFRZUEU9XCJURVhUXCIgTkFNRT1cIiIgCi0gICAgICAgICAgICAgICAgICAgICAgICAgKyBuYW1lICsgIlwiIFNJWkU9MjA+PC9URD4iICsgU3RyaW5nVXRpbHMuTkVXTElORSAKLSAgICAgICAgICAgICAgICAgICAgICAgICArICI8JSIgKyBTdHJpbmdVdGlscy5ORVdMSU5FCi0gICAgICAgICAgICAgICAgICAgICAgICAgKyAiamF2YS50ZXh0LkRhdGVGb3JtYXQgZGF0ZUZvcm1hdCIgKyBnZXRVbmlxdWVOYW1lKCkrICIgPSBqYXZhLnRleHQuRGF0ZUZvcm1hdC5nZXREYXRlSW5zdGFuY2UoKTsiICsgU3RyaW5nVXRpbHMuTkVXTElORSAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICsgImphdmEudXRpbC5HcmVnb3JpYW5DYWxlbmRhciBnY0V4YW1wIiArIGdldFVuaXF1ZU5hbWUoKSsgIiAgPSBuZXcgamF2YS51dGlsLkdyZWdvcmlhbkNhbGVuZGFyKCk7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgCi0gICAgICAgICAgICAgICAgICAgICAgICAgKyAiamF2YS51dGlsLkRhdGUgZGF0ZSIgKyBnZXRVbmlxdWVOYW1lKCkrICIgPSBnY0V4YW1wIiArIGdldFVuaXF1ZU5hbWUoKSsgIi5nZXRUaW1lKCk7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICsgIlN0cmluZyB0ZW1wUmVzdWx0IiArIGdldFVuaXF1ZU5hbWUoKSsgIiA9IGRhdGVGb3JtYXQiICsgZ2V0VW5pcXVlTmFtZSgpKyAiLmZvcm1hdChkYXRlIiArIGdldFVuaXF1ZU5hbWUoKSsgIik7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgIAotICAgICAgICAgICAgICAgICAgICAgICAgICsgIiU+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUKLSAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgKyAiPFREIEFMSUdOPVwibGVmdFwiPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FICAKLSAgICAgICAgICAgICAgICAgICAgICAgICArICI8L1RSPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FCi0gICAgICAgICAgICAgICAgICAgICAgICAgKyAiPFRSPiIgICsgU3RyaW5nVXRpbHMuTkVXTElORQotICAgICAgICAgICAgICAgICAgICAgICAgICsgIjxURD4gPC9URD4iICsgU3RyaW5nVXRpbHMuTkVXTElORQotICAgICAgICAgICAgICAgICAgICAgICAgICsgIjxURCBBTElHTj1cImxlZnRcIj4gZWcuIDwlPSB0ZW1wUmVzdWx0IiArIGdldFVuaXF1ZU5hbWUoKSsgIiAlPiA8L1REPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FCi0gICAgICAgICAgICAgICAgICAgICAgICAgKyAiPC9UUj4iICsgU3RyaW5nVXRpbHMuTkVXTElORTsKLSAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgCi0KLSAgICAgcmV0dXJuIGlucHV0Rm9ybTsKLSAgfQotIAotIAotICAvKgotICAqIFRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUgc3BlY2lhbGl6ZWQKLSAgKiBXZSBtdXN0IHVzZSB0aGUgZGF0ZSBmdW5jdGlvbiB0byBoZWxwCi0gICogdXMgY29udmVydCBiYWNrIGFuZCBmb3J0aAotICAqLwotICAgcHVibGljIFN0cmluZyBzdHJpbmdDb252ZXJzaW9uKFN0cmluZyB0eXBlTmFtZSwgU3RyaW5nIG5vZGVOYW1lLCBTdHJpbmcgYXR0cmlidXRlTmFtZSkKLSAgewotICAgICBTdHJpbmcgY29udmVyc2lvbiA9ICBHZW5lcmF0b3IuRE9VQkxFX1RBQiArICJqYXZhLnRleHQuRGF0ZUZvcm1hdCBkYXRlRm9ybWF0IiArIGdldFVuaXF1ZU5hbWUoKSsgIiA9IGphdmEudGV4dC5EYXRlRm9ybWF0LmdldERhdGVJbnN0YW5jZSgpOyIgIAotICAgICAgICAgICAgICAgICAgICAgICAgICsgU3RyaW5nVXRpbHMuTkVXTElORSArIEdlbmVyYXRvci5ET1VCTEVfVEFCICsgICJqYXZhLnV0aWwuRGF0ZSBkYXRlVGVtcCIgKyBnZXRVbmlxdWVOYW1lKCkrICIgID0gZGF0ZUZvcm1hdCIgKyBnZXRVbmlxdWVOYW1lKCkrICIucGFyc2UoIiArIGF0dHJpYnV0ZU5hbWUgKyAiKTsiICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICsgU3RyaW5nVXRpbHMuTkVXTElORSArIEdlbmVyYXRvci5ET1VCTEVfVEFCICsgImphdmEudXRpbC5HcmVnb3JpYW5DYWxlbmRhciIgKyBHZW5lcmF0b3IuU1BBQ0UgKyBub2RlTmFtZSArICIgPSAiICsgIm5ldyBqYXZhLnV0aWwuR3JlZ29yaWFuQ2FsZW5kYXIoKTsiIAotICAgICAgICAgICAgICAgICAgICAgICAgICsgU3RyaW5nVXRpbHMuTkVXTElORSArIEdlbmVyYXRvci5ET1VCTEVfVEFCICsgbm9kZU5hbWUgKyAiLnNldFRpbWUoZGF0ZVRlbXAiICsgZ2V0VW5pcXVlTmFtZSgpKyAiKTsiCi0gICAgICAgICAgICAgICAgICAgICAgICAgKyAiIiArIFN0cmluZ1V0aWxzLk5FV0xJTkU7Ci0gICAgIHJldHVybiBjb252ZXJzaW9uOwotICB9Ci0KLSAgLyoqCi0gICogdGhpcyBpcyBuZWVkZWQgZm9yIG1vc3QgY2FzZSAKLSAgKiBidXQgaXQgaXMgcGVyaXBoZXJhbCBhcyB0aGUgc3RyaW5nY29udmVyc2lvbiBuZWVkZWQgCi0gICogdG8gYmUgb3ZlcnJpZGRlbgotICAqLwotICBwdWJsaWMgU3RyaW5nIFN0cmluZ1RvVHlwZShTdHJpbmcgbmFtZSkKLSAgewotICAgIHJldHVybiAiIjsKLSAgfQotCi0gIC8qKgotICAqIGNvbnZlcnRzIHRoZSB0eXBlIHJldHVybmVkIGZyb20gdGhlIHByb3h5IAotICAqIGJhY2sgdG8gYSBzdHJpbmcgCi0gICogQHJldHVybiBTdHJpbmcgY29udmVydCB0aGUgdHlwZSB0byBzdHJpbmcuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgVHlwZUNvbnZlcnNpb24oU3RyaW5nIG5hbWUpCi0gIHsKLQotICAgIFN0cmluZyBjb252ZXJzaW9uID0gR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiamF2YS50ZXh0LkRhdGVGb3JtYXQgZGF0ZUZvcm1hdCIgKyBnZXRVbmlxdWVOYW1lKCkrICIgPSBqYXZhLnRleHQuRGF0ZUZvcm1hdC5nZXREYXRlSW5zdGFuY2UoKTsiICsgU3RyaW5nVXRpbHMuTkVXTElORSAKLSAgICAJICAgICAgICAgICAgICAgKyBHZW5lcmF0b3IuRE9VQkxFX1RBQiArICJqYXZhLnV0aWwuRGF0ZSBkYXRlIiArIGdldFVuaXF1ZU5hbWUoKSsgIiA9ICIgKyBuYW1lICsgIi5nZXRUaW1lKCk7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgCi0gICAgCSAgICAgICAgICAgICAgICsgR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiU3RyaW5nIHRlbXBSZXN1bHQiICsgZ2V0VW5pcXVlTmFtZSgpKyAiID0gb3JnLmVjbGlwc2UuanN0LndzLnV0aWwuSnNwVXRpbHMubWFya3VwKGRhdGVGb3JtYXQiICsgZ2V0VW5pcXVlTmFtZSgpKyAiLmZvcm1hdChkYXRlIiArIGdldFVuaXF1ZU5hbWUoKSArICIpKTsiICsgU3RyaW5nVXRpbHMuTkVXTElORSAKLSAgICAgICAgICAgICAgICAgICAgICAgKyBHZW5lcmF0b3IuRE9VQkxFX1RBQiArICIlPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FCi0gICAgICAgICAgICAgICAgICAgICAgICsgR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiPCU9IHRlbXBSZXN1bHQiICsgZ2V0VW5pcXVlTmFtZSgpKyAiICU+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUKLSAgICAgICAgICAgICAgICAgICAgICAgKyBHZW5lcmF0b3IuRE9VQkxFX1RBQiArICI8JSIgKyBTdHJpbmdVdGlscy5ORVdMSU5FOwotCi0gICAgcmV0dXJuIGNvbnZlcnNpb247Ci0gIH0KLQotCi0KLSAgLyoqCi0gICogVGhlIHN0cmluZ0NvbnZlcnNpb24gZnVuY3Rpb24gbmFpbHMgb3V0IHNwZWNpZmljIGNvbnZlcnNpb24gbWV0aG9kcyB1c2VkIGFtb25nIHNpbXBsZSB0eXBlcyAKLSAgKiBUaGlzIG1ldGhvZCBpcyB0byBiZSBpbXBsZW1lbnRlZCBieSBTaW1wbGVUeXBlIHN1YmNsYXNzZXMKLSAgKiBAcGFyYW0gU3RyaW5nIHRoZSBuYW1lIG9mIHN0cmluZyBhZnRlciB0aGUgcmVxdWVzdCBjYWxsCi0gICogQHJldHVybiBTdHJpbmcgdGhlIGFjdHVhbCBjb252ZXJzaW9uIHN0cmluZyBjb250YWluaW5nIHRoZSBuYW1lLgotICAqLwotICBwdWJsaWMgU3RyaW5nIFR5cGVUb1N0cmluZyhTdHJpbmcgbmFtZSkKLSAgewotICAgIHJldHVybiAiIjsKLSAgfQotIAotIH0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL0hhc2h0YWJsZVR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9IYXNodGFibGVUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExZmYyY2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL0hhc2h0YWJsZVR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbDsKLQotCi0vKioKLSogb2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIHJlY29nbml6ZWQgcmV0dXJuIHR5cGUKLSogCi0qLwotcHVibGljIGNsYXNzIEhhc2h0YWJsZVR5cGUgZXh0ZW5kcyBSZWNvZ25pemVkUmV0dXJuVHlwZQotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIAotICAvKioKLSAgKkNvbnN0cnVjdG9yCi0gICoKLSAgKi8KLSAgcHVibGljIEhhc2h0YWJsZVR5cGUoKQotICB7Ci0gICAgc3VwZXIoVHlwZUZhY3RvcnkuSEFTSFRBQkxFX05BTUUpOwotICB9Ci0KLSAgCi19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9NYXBUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvTWFwVHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDM1YmZiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9NYXBUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLQotLyoqCi0qIG9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSByZWNvZ25pemVkIHJldHVybiB0eXBlCi0qIAotKi8KLXB1YmxpYyBjbGFzcyBNYXBUeXBlIGV4dGVuZHMgUmVjb2duaXplZFJldHVyblR5cGUKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAKLSAgLyoqCi0gICpDb25zdHJ1Y3RvcgotICAqCi0gICovCi0gIHB1YmxpYyBNYXBUeXBlKCkKLSAgewotICAgIHN1cGVyKFR5cGVGYWN0b3J5Lk1BUF9OQU1FKTsKLSAgfQotCi0gIAotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvTWV0aG9kRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL01ldGhvZEVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjcxZTRlZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvTWV0aG9kRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuQmFzaWNFbGVtZW50OwotCi0KLS8qKgotKiBPYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgSmF2YSBiZWFuIG1ldGhvZC4KLSogTmVhcmVzdCBtb3JhbCBlcXVpdmFsZW50czogamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kLCBqYXZhLmJlYW5zLk1ldGhvZERlc2NyaXB0b3IuCi0qLwotcHVibGljIGNsYXNzIE1ldGhvZEVsZW1lbnQgZXh0ZW5kcyBCYXNpY0VsZW1lbnQKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVMX0JFQU4gPSAiYmVhbiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFTF9QQVJBTUVURVJTID0gInBhcmFtZXRlcnMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRUxfUkVUVVJOX1BBUkFNRVRFUlMgPSAicmV0dXJucGFyYW1ldGVycyI7Ci0gIHByaXZhdGUgU3RyaW5nIGZEaXNwbGF5TmFtZTsKLSAgcHJpdmF0ZSBTdHJpbmcgZk5hbWU7Ci0gIHByaXZhdGUgYm9vbGVhbiBmTWV0aG9kT21pdHRlZDsKLQotICAvKioKLSAgKiBDb25zdHJ1Y3Rvci4KLSAgKiBAcGFyYW0gYmVhbiBUaGUgQmVhbiB0aGF0IG93bnMgdGhpcyBtZXRob2QuCi0gICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIG1ldGhvZC4KLSAgKiBAcGFyYW0gdHlwZSBUaGUgdHlwZSBvZiB0aGUgbWV0aG9kLgotICAqLwotICBwdWJsaWMgTWV0aG9kRWxlbWVudCAoIEJlYW5FbGVtZW50IGJlYW5FbGVtZW50LCBTdHJpbmcgbmFtZSwgU3RyaW5nIGRpc3BsYXlOYW1lKQotICB7Ci0gICAgc3VwZXIobmFtZSxiZWFuRWxlbWVudCxSRUxfQkVBTixCZWFuRWxlbWVudC5SRUxfTUVUSE9EUyk7Ci0gICAgZkRpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7Ci0gICAgZk5hbWUgPSBuYW1lOwotICAgIGZNZXRob2RPbWl0dGVkID0gZmFsc2U7Ci0gICAgCi0gIH0KLQotICAvKgotICAqIEluIHRoZSBldmVudCB0aGF0IHRoZXJlIGlzIGFuIHVuc3VwcG9ydGVkIHR5cGUKLSAgKiB3ZSB3aWxsIHNldCB0aGUgb21taXNzaW9uIGJvb2xlYW4gdmFyaWFibGUKLSAgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiB0aGlzIG1ldGhvZCBpcyB0byBiZSBvbW1pdGVkCi0gICovCi0gIHB1YmxpYyBib29sZWFuIGdldE1ldGhvZE9tbWlzc2lvbigpCi0gIHsKLSAgICByZXR1cm4gZk1ldGhvZE9taXR0ZWQ7Ci0gIH0KLQotICAvKgotICAqIEluIHRoZSBldmVudCB0aGF0IHRoZXJlIGlzIGFuIHVuc3VwcG9ydGVkIHR5cGUKLSAgKiB3ZSB3aWxsIGdldCB0aGUgb21taXNzaW9uIGJvb2xlYW4gdmFyaWFibGUKLSAgKiBAcGFyYW0gYm9vbGVhbiB0cnVlIGlmIHRoaXMgbWV0aG9kIGlzIHRvIGJlIG9tbWl0ZWQKLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0TWV0aG9kT21taXNzaW9uKGJvb2xlYW4gYm9vbCkKLSAgewotICAgIGZNZXRob2RPbWl0dGVkID0gYm9vbDsKLSAgfQotCi0KLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLSAgewotICAgIHJldHVybiBmTmFtZTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RGlzcGxheU5hbWUoKQotICB7Ci0gICAgcmV0dXJuIGZEaXNwbGF5TmFtZTsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIEJlYW4gdGhhdCBvd25zIHRoaXMgbWV0aG9kLgotICAqIEByZXR1cm4gQmVhbiBUaGUgQmVhbiB0aGF0IG93bnMgdGhpcyBtZXRob2QuCi0gICovCi0gIHB1YmxpYyBCZWFuRWxlbWVudCBnZXRCZWFuRWxlbWVudCAoKQotICB7Ci0gICAgRW51bWVyYXRpb24gZSA9IGdldEVsZW1lbnRzKFJFTF9CRUFOKTsKLSAgICByZXR1cm4gZS5oYXNNb3JlRWxlbWVudHMoKSA/IChCZWFuRWxlbWVudCllLm5leHRFbGVtZW50KCkgOiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyBhbiBlbnVtZXJhdGlvbiBvZiB0aGUgcmV0dXJuIHBhcmFtZXRlciBvZiB0aGlzIG1ldGhvZC4KLSAgKiBAcmV0dXJuIEVudW1lcmF0aW9uIGhvbGRzIHRoZSByZXR1cm4gcGFyYW1ldGVyIG9mIHRoaXMgbWV0aG9kLgotICAqLwotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0UmV0dXJuUGFyYW1ldGVyRW51bSAoKQotICB7Ci0gICAgcmV0dXJuIGdldEVsZW1lbnRzKFJFTF9SRVRVUk5fUEFSQU1FVEVSUyk7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIGFuIGVudW1lcmF0aW9uIG9mIHRoZSByZXR1cm4gcGFyYW1ldGVyIG9mIHRoaXMgbWV0aG9kLgotICAqIEByZXR1cm4gRW51bWVyYXRpb24gaG9sZHMgdGhlIHJldHVybiBwYXJhbWV0ZXIgb2YgdGhpcyBtZXRob2QuCi0gICovCi0gIHB1YmxpYyBQYXJhbWV0ZXJFbGVtZW50IGdldFJldHVyblBhcmFtZXRlckVsZW1lbnQgKCkKLSAgewotICAgIEVudW1lcmF0aW9uIGUgPSBnZXRSZXR1cm5QYXJhbWV0ZXJFbnVtKCk7Ci0gICAgcmV0dXJuIGUuaGFzTW9yZUVsZW1lbnRzKCkgPyAoUGFyYW1ldGVyRWxlbWVudCllLm5leHRFbGVtZW50KCkgOiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyBhbiBlbnVtZXJhdGlvbiBvZiBhbGwgUGFyYW1ldGVyIG9iamVjdHMgb2YgdGhpcyBtZXRob2QuCi0gICogQHJldHVybiBFbnVtZXJhdGlvbiBBbGwgUGFyYW1ldGVyIG9iamVjdHMgb2YgdGhpcyBtZXRob2QuCi0gICovCi0gIHB1YmxpYyBFbnVtZXJhdGlvbiBnZXRQYXJhbWV0ZXJFbGVtZW50cyAoKQotICB7Ci0gICAgcmV0dXJuIGdldEVsZW1lbnRzKFJFTF9QQVJBTUVURVJTKTsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBQYXJhbWV0ZXIgb2JqZWN0cyBvZiB0aGlzIG1ldGhvZC4KLSAgKiBAcmV0dXJuIGludCBUaGUgbnVtYmVyIG9mIFBhcmFtZXRlciBvYmplY3RzIG9mIHRoaXMgbWV0aG9kLgotICAqLwotICBwdWJsaWMgaW50IGdldE51bWJlck9mUGFyYW1ldGVyRWxlbWVudHMgKCkKLSAgewotICAgIHJldHVybiBnZXROdW1iZXJPZkVsZW1lbnRzKFJFTF9QQVJBTUVURVJTKTsKLSAgfQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvT2JqZWN0VHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL09iamVjdFR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGVlYmRmZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvT2JqZWN0VHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwODIzCSAgMTQ1NjQzIG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbiAoY3JlYXRlZCBjbGFzcykKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsOwotCi0KLS8qKgotKiBvYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgdHlwZQotKiAKLSovCi1wdWJsaWMgY2xhc3MgT2JqZWN0VHlwZSBleHRlbmRzIFNpbXBsZVR5cGUgCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgCi0gIC8qKgotICAqQ29uc3RydWN0b3IKLSAgKgotICAqLwotICBwdWJsaWMgT2JqZWN0VHlwZSgpCi0gIHsKLSAgICBzdXBlcihUeXBlRmFjdG9yeS5PQkpFQ1RfTkFNRSk7Ci0gIH0KLSAKLSAgLyoqCi0gICogU3RyaW5nVG9UeXBlIGdldHMgdGhlIHN0cmluZyB0YWtlbiBieSB0aGUgCi0gICogdXNlciBpbnRvIHByb3h5IGZvcm0KLSAgKiBAcmV0dXJuIFN0cmluZyBjb252ZXJ0IHRoZSBzdHJpbmcgdG8gdHlwZSAuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgU3RyaW5nVG9UeXBlKFN0cmluZyBuYW1lKQotICB7IAotCS8vV2UgY2FuJ3QgZGVzZXJpYWxpemUgYSBTdHJpbmcgdG8gYW4gT2JqZWN0Ci0JLy90aGlzIHNob3VsZCBuZXZlciBhY3R1YWxseSBiZSBjYWxsZWQgc2luY2UKLQkvL21ldGhvZHMgd2l0aCBPYmplY3RzIGFzIGlucHV0IGFyZSBvbWl0dGVkLgotICAgIHJldHVybiAibmV3IGphdmEubGFuZy5PYmplY3QoKTsiOwotICB9Ci0KLSAgLyoqCi0gICogVGhlIHN0cmluZ0NvbnZlcnNpb24gZnVuY3Rpb24gbmFpbHMgb3V0IHNwZWNpZmljIGNvbnZlcnNpb24gbWV0aG9kcyB1c2VkIGFtb25nIHNpbXBsZSB0eXBlcyAKLSAgKiBUaGlzIG1ldGhvZCBpcyB0byBiZSBpbXBsZW1lbnRlZCBieSBTaW1wbGVUeXBlIHN1YmNsYXNzZXMKLSAgKiBAcGFyYW0gU3RyaW5nIHRoZSBuYW1lIG9mIHN0cmluZyBhZnRlciB0aGUgcmVxdWVzdCBjYWxsCi0gICogQHJldHVybiBTdHJpbmcgdGhlIGFjdHVhbCBjb252ZXJzaW9uIHN0cmluZyBjb250YWluaW5nIHRoZSBuYW1lLgotICAqLwotICBwdWJsaWMgU3RyaW5nIFR5cGVUb1N0cmluZyhTdHJpbmcgbmFtZSkKLSAgewotICAgIHJldHVybiBuYW1lICsgIi50b1N0cmluZygpIjsKLSAgfQotIAotIH0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1BhcmFtZXRlckVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9QYXJhbWV0ZXJFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwMWNmYzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1BhcmFtZXRlckVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuQmFzaWNFbGVtZW50OwotCi0KLS8qKgotKiBPYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgSmF2YSBiZWFuIG1ldGhvZCBwYXJhbWV0ZXIuCi0qIE5lYXJlc3QgbW9yYWwgZXF1aXZhbGVudHM6IGphdmEuYmVhbnMuUGFyYW1ldGVyRGVzY3JpcHRvci4KLSovCi1wdWJsaWMgY2xhc3MgUGFyYW1ldGVyRWxlbWVudCBleHRlbmRzIEJhc2ljRWxlbWVudAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFTF9NRVRIT0QgPSAibWV0aG9kIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVMX1RZUEUgPSAidHlwZSI7Ci0KLSAgcHVibGljIGJvb2xlYW4gZlJldHVyblBhcmFtZXRlcj1mYWxzZTsKLSAgCi0gIC8qKgotICAqIENvbnN0cnVjdG9yLgotICAqIEBwYXJhbSBtZXRob2QgVGhlIE1ldGhvZCB0aGF0IG93bnMgdGhpcyBwYXJhbWV0ZXIuCi0gICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHBhcmFtZXRlci4KLSAgKiBAcGFyYW0gdHlwZSBUaGUgdHlwZSBvZiB0aGUgcGFyYW1ldGVyLgotICAqLwotICBwdWJsaWMgUGFyYW1ldGVyRWxlbWVudCAoIE1ldGhvZEVsZW1lbnQgbWV0aG9kRWxlbWVudCwgU3RyaW5nIG5hbWUsIFN0cmluZyByZWxUeXBlLGJvb2xlYW4gcmV0dXJuUGFyYW1ldGVyICkKLSAgewotICAgIHRoaXMobmFtZSxtZXRob2RFbGVtZW50LFJFTF9NRVRIT0QscmVsVHlwZSk7Ci0gICAgZlJldHVyblBhcmFtZXRlciA9IHJldHVyblBhcmFtZXRlcjsKLSAgfQotICAKLSAgLyoqCi0gICogQ29uc3RydWN0b3IuCi0gICogQHBhcmFtIG1ldGhvZCBUaGUgTWV0aG9kIHRoYXQgb3ducyB0aGlzIHBhcmFtZXRlci4KLSAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcGFyYW1ldGVyLgotICAqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIHRoZSBwYXJhbWV0ZXIuCi0gICovCi0gIHB1YmxpYyBQYXJhbWV0ZXJFbGVtZW50IChTdHJpbmcgbmFtZSwgTWV0aG9kRWxlbWVudCBtZXRob2RFbGVtZW50LCBTdHJpbmcgb3V0UmVsLFN0cmluZyBpblJlbCkKLSAgewotICAgIHN1cGVyKG5hbWUsbWV0aG9kRWxlbWVudCxvdXRSZWwsaW5SZWwpOwotICB9Ci0gICAKLSAgLyoqCi0gICogUmV0dXJucyB0aGUgTWV0aG9kIHRoYXQgb3ducyB0aGlzIHBhcmFtZXRlci4KLSAgKiBAcmV0dXJuIE1ldGhvZCBUaGUgTWV0aG9kIHRoYXQgb3ducyB0aGlzIHBhcmFtZXRlci4KLSAgKi8KLSAgcHVibGljIE1ldGhvZEVsZW1lbnQgZ2V0TWV0aG9kRWxlbWVudCAoKQotICB7Ci0gICAgRW51bWVyYXRpb24gZSA9IGdldEVsZW1lbnRzKFJFTF9NRVRIT0QpOwotICAgIHJldHVybiBlLmhhc01vcmVFbGVtZW50cygpID8gKE1ldGhvZEVsZW1lbnQpZS5uZXh0RWxlbWVudCgpIDogbnVsbDsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIE1ldGhvZCB0aGF0IG93bnMgdGhpcyBwYXJhbWV0ZXIuCi0gICogQHJldHVybiBNZXRob2QgVGhlIE1ldGhvZCB0aGF0IG93bnMgdGhpcyBwYXJhbWV0ZXIuCi0gICovCi0gIHB1YmxpYyBUeXBlRWxlbWVudCBnZXRUeXBlRWxlbWVudCAoKQotICB7Ci0gICAgRW51bWVyYXRpb24gZSA9IGdldEVsZW1lbnRzKFJFTF9UWVBFKTsKLSAgICByZXR1cm4gZS5oYXNNb3JlRWxlbWVudHMoKSA/IChUeXBlRWxlbWVudCllLm5leHRFbGVtZW50KCkgOiBudWxsOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNSZXR1cm4oKQotICB7Ci0gICAgcmV0dXJuIGZSZXR1cm5QYXJhbWV0ZXI7Ci0gIH0KLQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvUHJpbWl0aXZlQXJyYXlUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvUHJpbWl0aXZlQXJyYXlUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4NzMwNjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1ByaW1pdGl2ZUFycmF5VHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmdVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5HZW5lcmF0b3I7Ci0KLQotLyoqCi0qIG9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSByZWNvZ25pemVkIHJldHVybiB0eXBlCi0qIAotKi8KLXB1YmxpYyBjbGFzcyBQcmltaXRpdmVBcnJheVR5cGUgZXh0ZW5kcyBBcnJheVR5cGUKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAKLSAgLyoqCi0gICpDb25zdHJ1Y3RvcgotICAqCi0gICovCi0gIHB1YmxpYyBQcmltaXRpdmVBcnJheVR5cGUoU3RyaW5nIHR5cGVOYW1lKQotICB7Ci0gICAgc3VwZXIoVHlwZUZhY3RvcnkuUFJJTUlUSVZFX0FSUkFZX05BTUUsIHR5cGVOYW1lKTsKLSAgfQotCi0gICAvKioKLSAgKiBUaGlzIGlzIGJhc2ljYWxseSB0aGUgZnVuY3Rpb24gdGhhdCBkaWN0YXRlcyBob3cgd2Ugd2FudCB0byBkaXNwbGF5IHRoaXMgdHlwZSAKLSAgKiB1cG9uIHJlY2VpdmluZyBpdCBhcyBhIHJldHVybiBmcm9tIGEgcHJveHkgbWV0aG9kCi0gICogQHBhcmFtIFN0cmluZyB0aGUgbmFtZSBvZiB0aGUgdHlwZQotICAqIEByZXR1cm4gU3RyaW5nIFRoZSBkaXNwbGF5IHN0cmluZwotICAqLwotICBwdWJsaWMgU3RyaW5nIFR5cGVDb252ZXJzaW9uKFN0cmluZyBuYW1lKQotICB7Ci0gICAgU3RyaW5nIHRyaXBwbGVUYWIgPSBHZW5lcmF0b3IuRE9VQkxFX1RBQiArIEdlbmVyYXRvci5UQUI7Ci0KLSAgICBTdHJpbmcgbm9uQmVhbiA9IEdlbmVyYXRvci5ET1VCTEVfVEFCICsgIlN0cmluZyB0ZW1wIiArIGdldFVuaXF1ZU5hbWUoKSArICIgPSBcIltcIjsiIAotICAgIAkgICAgICAgICAgICAgKyBHZW5lcmF0b3IuRE9VQkxFX1RBQiArICJmb3IoaW50IGkiICsgZ2V0VW5pcXVlTmFtZSgpICsgIj0wO2kiICtnZXRVbmlxdWVOYW1lKCkgKyAiPCAiICsgbmFtZSAKLSAgICAJICAgICAgICAgICAgICAgICAgICsgIi5sZW5ndGg7aSIgKyBnZXRVbmlxdWVOYW1lKCkgKyAiKyspeyIgKyBTdHJpbmdVdGlscy5ORVdMSU5FICAKLSAgICAJICAgICAgICAgICAgICsgdHJpcHBsZVRhYiArICJ0ZW1wIisgZ2V0VW5pcXVlTmFtZSgpICsiID0gdGVtcCIrZ2V0VW5pcXVlTmFtZSgpICsgIiArICIgKyBuYW1lICsgIltpIiArIGdldFVuaXF1ZU5hbWUoKSAKLSAgICAJICAgICAgICAgICAgICAgICAgICsgIl0gKyBcIixcIjsiICsgU3RyaW5nVXRpbHMuTkVXTElORSAKLSAgICAgICAgICAgICAgICAgICAgICsgR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAifSIgKyBTdHJpbmdVdGlscy5ORVdMSU5FCi0gICAgICAgICAgICAgICAgICAgICArIEdlbmVyYXRvci5ET1VCTEVfVEFCICsgImludCBsZW5ndGgiICsgZ2V0VW5pcXVlTmFtZSgpICsgIiA9IHRlbXAiICsgZ2V0VW5pcXVlTmFtZSgpICsgIi5sZW5ndGgoKTsiIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBTdHJpbmdVdGlscy5ORVdMSU5FCi0gICAgICAgICAgICAgICAgICAgICArIEdlbmVyYXRvci5ET1VCTEVfVEFCICsgInRlbXAiICsgZ2V0VW5pcXVlTmFtZSgpICsgIiA9IHRlbXAiK2dldFVuaXF1ZU5hbWUoKSsiLnN1YnN0cmluZygwLChsZW5ndGgiK2dldFVuaXF1ZU5hbWUoKSsiIC0gMSkpICsgXCJdXCI7IiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICsgU3RyaW5nVXRpbHMuTkVXTElORQotICAgIAkgICAgICAgICAgICAgKyBHZW5lcmF0b3IuRE9VQkxFX1RBQiArICIlPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FICAKLSAgICAJICAgICAgICAgICAgICsgR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiPCU9dGVtcCIrIGdldFVuaXF1ZU5hbWUoKSArIiU+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUKLSAgICAgICAgICAgICAgICAgICAgICsgR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiPCUiKyBTdHJpbmdVdGlscy5ORVdMSU5FOwotCi0gICAgcmV0dXJuIG5vbkJlYW47Ci0gIH0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1ByaW1pdGl2ZUJvb2xlYW5UeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvUHJpbWl0aXZlQm9vbGVhblR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjU4YWQ5ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvUHJpbWl0aXZlQm9vbGVhblR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbDsKLQotCi0vKioKLSogb2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIHR5cGUKLSogCi0qLwotcHVibGljIGNsYXNzIFByaW1pdGl2ZUJvb2xlYW5UeXBlIGV4dGVuZHMgUHJpbWl0aXZlVHlwZSAKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAKLSAgLyoqCi0gICpDb25zdHJ1Y3RvcgotICAqCi0gICovCi0gIHB1YmxpYyBQcmltaXRpdmVCb29sZWFuVHlwZSgpCi0gIHsKLSAgICBzdXBlcihUeXBlRmFjdG9yeS5QUklNX0JPT0xFQU5fTkFNRSk7Ci0gIH0KLSAKLSAgLyoqCi0gICogU3RyaW5nVG9UeXBlIGdldHMgdGhlIHN0cmluZyB0YWtlbiBieSB0aGUgCi0gICogdXNlciBpbnRvIHByb3h5IGZvcm0KLSAgKiBAcmV0dXJuIFN0cmluZyBjb252ZXJ0IHRoZSBzdHJpbmcgdG8gdHlwZS4KLSAgKi8KLSAgcHVibGljIFN0cmluZyBTdHJpbmdUb1R5cGUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBTdHJpbmcgY29udmVyc2lvbiA9ICJCb29sZWFuLnZhbHVlT2YoIiArIG5hbWUgKyAiKS5ib29sZWFuVmFsdWUoKTsiOwotICAgIHJldHVybiBjb252ZXJzaW9uOwotICB9Ci0gIAotICAKLSB9Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9QcmltaXRpdmVCeXRlVHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1ByaW1pdGl2ZUJ5dGVUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwNDVkMjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1ByaW1pdGl2ZUJ5dGVUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLQotLyoqCi0qIG9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSB0eXBlCi0qIAotKi8KLXB1YmxpYyBjbGFzcyBQcmltaXRpdmVCeXRlVHlwZSBleHRlbmRzIFByaW1pdGl2ZVR5cGUgCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgCi0gIC8qKgotICAqQ29uc3RydWN0b3IKLSAgKgotICAqLwotICBwdWJsaWMgUHJpbWl0aXZlQnl0ZVR5cGUoKQotICB7Ci0gICAgc3VwZXIoVHlwZUZhY3RvcnkuUFJJTV9CWVRFX05BTUUpOwotICB9Ci0gCi0gIC8qKgotICAqIFN0cmluZ1RvVHlwZSBnZXRzIHRoZSBzdHJpbmcgdGFrZW4gYnkgdGhlIAotICAqIHVzZXIgaW50byBwcm94eSBmb3JtCi0gICogQHJldHVybiBTdHJpbmcgY29udmVydCB0aGUgc3RyaW5nIHRvIHR5cGUuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgU3RyaW5nVG9UeXBlKFN0cmluZyBuYW1lKQotICB7Ci0gICAgU3RyaW5nIGNvbnZlcnNpb24gPSAiQnl0ZS5wYXJzZUJ5dGUoIiArIG5hbWUgKyAiKTsiOwotICAgIHJldHVybiBjb252ZXJzaW9uOwotICB9Ci0gIAotICAKLSB9Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9QcmltaXRpdmVDaGFyVHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1ByaW1pdGl2ZUNoYXJUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1MmY5MDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1ByaW1pdGl2ZUNoYXJUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLQotLyoqCi0qIG9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSB0eXBlCi0qIAotKi8KLXB1YmxpYyBjbGFzcyBQcmltaXRpdmVDaGFyVHlwZSBleHRlbmRzIFByaW1pdGl2ZVR5cGUgCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgCi0gIC8qKgotICAqQ29uc3RydWN0b3IKLSAgKgotICAqLwotICBwdWJsaWMgUHJpbWl0aXZlQ2hhclR5cGUoKQotICB7Ci0gICAgc3VwZXIoVHlwZUZhY3RvcnkuUFJJTV9DSEFSX05BTUUpOwotICB9Ci0gCi0gIC8qKgotICAqIFN0cmluZ1RvVHlwZSBnZXRzIHRoZSBzdHJpbmcgdGFrZW4gYnkgdGhlIAotICAqIHVzZXIgaW50byBwcm94eSBmb3JtCi0gICogQHJldHVybiBTdHJpbmcgY29udmVydCB0aGUgc3RyaW5nIHRvIHR5cGUuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgU3RyaW5nVG9UeXBlKFN0cmluZyBuYW1lKQotICB7Ci0gICAgU3RyaW5nIGNvbnZlcnNpb24gPSAiIiArIG5hbWUgKyAiLmNoYXJBdCgwKTsiOwotICAgIHJldHVybiBjb252ZXJzaW9uOwotICB9Ci0gIAotICAKLSB9Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9QcmltaXRpdmVEb3VibGVUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvUHJpbWl0aXZlRG91YmxlVHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjM2MmU3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9QcmltaXRpdmVEb3VibGVUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLQotLyoqCi0qIG9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSB0eXBlCi0qIAotKi8KLXB1YmxpYyBjbGFzcyBQcmltaXRpdmVEb3VibGVUeXBlIGV4dGVuZHMgUHJpbWl0aXZlVHlwZSAKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAKLSAgLyoqCi0gICpDb25zdHJ1Y3RvcgotICAqCi0gICovCi0gIHB1YmxpYyBQcmltaXRpdmVEb3VibGVUeXBlKCkKLSAgewotICAgIHN1cGVyKFR5cGVGYWN0b3J5LlBSSU1fRE9VQkxFX05BTUUpOwotICB9Ci0gCi0gIC8qKgotICAqIFN0cmluZ1RvVHlwZSBnZXRzIHRoZSBzdHJpbmcgdGFrZW4gYnkgdGhlIAotICAqIHVzZXIgaW50byBwcm94eSBmb3JtCi0gICogQHJldHVybiBTdHJpbmcgY29udmVydCB0aGUgc3RyaW5nIHRvIHR5cGUuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgU3RyaW5nVG9UeXBlKFN0cmluZyBuYW1lKQotICB7Ci0gICAgU3RyaW5nIGNvbnZlcnNpb24gPSAiRG91YmxlLnBhcnNlRG91YmxlKCIgKyBuYW1lICsgIik7IjsKLSAgICByZXR1cm4gY29udmVyc2lvbjsKLSAgfQotICAKLSAgCi0gfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvUHJpbWl0aXZlRmxvYXRUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvUHJpbWl0aXZlRmxvYXRUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwMGY5ZDcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1ByaW1pdGl2ZUZsb2F0VHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsOwotCi0KLS8qKgotKiBvYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgdHlwZQotKiAKLSovCi1wdWJsaWMgY2xhc3MgUHJpbWl0aXZlRmxvYXRUeXBlIGV4dGVuZHMgUHJpbWl0aXZlVHlwZSAKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAKLSAgLyoqCi0gICpDb25zdHJ1Y3RvcgotICAqCi0gICovCi0gIHB1YmxpYyBQcmltaXRpdmVGbG9hdFR5cGUoKQotICB7Ci0gICAgc3VwZXIoVHlwZUZhY3RvcnkuUFJJTV9GTE9BVF9OQU1FKTsKLSAgfQotIAotICAvKioKLSAgKiBTdHJpbmdUb1R5cGUgZ2V0cyB0aGUgc3RyaW5nIHRha2VuIGJ5IHRoZSAKLSAgKiB1c2VyIGludG8gcHJveHkgZm9ybQotICAqIEByZXR1cm4gU3RyaW5nIGNvbnZlcnQgdGhlIHN0cmluZyB0byB0eXBlLgotICAqLwotICBwdWJsaWMgU3RyaW5nIFN0cmluZ1RvVHlwZShTdHJpbmcgbmFtZSkKLSAgewotICAgIFN0cmluZyBjb252ZXJzaW9uID0gIkZsb2F0LnBhcnNlRmxvYXQoIiArIG5hbWUgKyAiKTsiOwotICAgIHJldHVybiBjb252ZXJzaW9uOwotICB9Ci0gIAotICAKLSB9Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9QcmltaXRpdmVJbnRUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvUHJpbWl0aXZlSW50VHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjMzZGQ5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9QcmltaXRpdmVJbnRUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLQotLyoqCi0qIG9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSB0eXBlCi0qIAotKi8KLXB1YmxpYyBjbGFzcyBQcmltaXRpdmVJbnRUeXBlIGV4dGVuZHMgUHJpbWl0aXZlVHlwZSAKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAKLSAgLyoqCi0gICpDb25zdHJ1Y3RvcgotICAqCi0gICovCi0gIHB1YmxpYyBQcmltaXRpdmVJbnRUeXBlKCkKLSAgewotICAgIHN1cGVyKFR5cGVGYWN0b3J5LlBSSU1fSU5URUdFUl9OQU1FKTsKLSAgfQotIAotICAvKioKLSAgKiBTdHJpbmdUb1R5cGUgZ2V0cyB0aGUgc3RyaW5nIHRha2VuIGJ5IHRoZSAKLSAgKiB1c2VyIGludG8gcHJveHkgZm9ybQotICAqIEByZXR1cm4gU3RyaW5nIGNvbnZlcnQgdGhlIHN0cmluZyB0byB0eXBlLgotICAqLwotICBwdWJsaWMgU3RyaW5nIFN0cmluZ1RvVHlwZShTdHJpbmcgbmFtZSkKLSAgewotICAgIFN0cmluZyBjb252ZXJzaW9uID0gIkludGVnZXIucGFyc2VJbnQoIiArIG5hbWUgKyAiKTsiOwotICAgIHJldHVybiBjb252ZXJzaW9uOwotICB9Ci0gIAotICAKLSB9Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9QcmltaXRpdmVKYXZhVHlwZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9QcmltaXRpdmVKYXZhVHlwZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjcxNTIzNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvUHJpbWl0aXZlSmF2YVR5cGVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLS8qKgotKiBvYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgdHlwZQotKiAKLSovCi1wdWJsaWMgY2xhc3MgUHJpbWl0aXZlSmF2YVR5cGVzIGV4dGVuZHMgU2ltcGxlVHlwZSAKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAKLSAgLyoqCi0gICpDb25zdHJ1Y3RvcgotICAqCi0gICovCi0gIHB1YmxpYyBQcmltaXRpdmVKYXZhVHlwZXMoU3RyaW5nIHR5cGUpCi0gIHsKLSAgICBzdXBlcih0eXBlKTsKLSAgfQotIAotICAvKioKLSAgKiBTdHJpbmdUb1R5cGUgZ2V0cyB0aGUgc3RyaW5nIHRha2VuIGJ5IHRoZSAKLSAgKiB1c2VyIGludG8gcHJveHkgZm9ybQotICAqIEByZXR1cm4gU3RyaW5nIGNvbnZlcnQgdGhlIHN0cmluZyB0byB0eXBlIC4KLSAgKi8KLSAgcHVibGljIFN0cmluZyBTdHJpbmdUb1R5cGUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBTdHJpbmcgY29udmVyc2lvbiA9IGZUeXBlICsgIi52YWx1ZU9mKCIgKyBuYW1lICsgIik7IjsKLSAgICByZXR1cm4gY29udmVyc2lvbjsgICAgCi0gIH0KLQotICAvKioKLSAgKiBUaGUgc3RyaW5nQ29udmVyc2lvbiBmdW5jdGlvbiBuYWlscyBvdXQgc3BlY2lmaWMgY29udmVyc2lvbiBtZXRob2RzIHVzZWQgYW1vbmcgc2ltcGxlIHR5cGVzIAotICAqIFRoaXMgbWV0aG9kIGlzIHRvIGJlIGltcGxlbWVudGVkIGJ5IFNpbXBsZVR5cGUgc3ViY2xhc3NlcwotICAqIEBwYXJhbSBTdHJpbmcgdGhlIG5hbWUgb2Ygc3RyaW5nIGFmdGVyIHRoZSByZXF1ZXN0IGNhbGwKLSAgKiBAcmV0dXJuIFN0cmluZyB0aGUgYWN0dWFsIGNvbnZlcnNpb24gc3RyaW5nIGNvbnRhaW5pbmcgdGhlIG5hbWUuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgVHlwZVRvU3RyaW5nKFN0cmluZyBuYW1lKQotICB7Ci0gICAgcmV0dXJuICJTdHJpbmcudmFsdWVPZigiICsgbmFtZSArICIpIjsKLSAgfQotIH0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1ByaW1pdGl2ZUxvbmdUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvUHJpbWl0aXZlTG9uZ1R5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWYwYzgyNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvUHJpbWl0aXZlTG9uZ1R5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbDsKLQotCi0vKioKLSogb2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIHR5cGUKLSogCi0qLwotcHVibGljIGNsYXNzIFByaW1pdGl2ZUxvbmdUeXBlIGV4dGVuZHMgUHJpbWl0aXZlVHlwZSAKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAKLSAgLyoqCi0gICpDb25zdHJ1Y3RvcgotICAqCi0gICovCi0gIHB1YmxpYyBQcmltaXRpdmVMb25nVHlwZSgpCi0gIHsKLSAgICBzdXBlcihUeXBlRmFjdG9yeS5QUklNX0xPTkdfTkFNRSk7Ci0gIH0KLSAKLSAgLyoqCi0gICogU3RyaW5nVG9UeXBlIGdldHMgdGhlIHN0cmluZyB0YWtlbiBieSB0aGUgCi0gICogdXNlciBpbnRvIHByb3h5IGZvcm0KLSAgKiBAcmV0dXJuIFN0cmluZyBjb252ZXJ0IHRoZSBzdHJpbmcgdG8gdHlwZS4KLSAgKi8KLSAgcHVibGljIFN0cmluZyBTdHJpbmdUb1R5cGUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBTdHJpbmcgY29udmVyc2lvbiA9ICJMb25nLnBhcnNlTG9uZygiICsgbmFtZSArICIpOyI7Ci0gICAgcmV0dXJuIGNvbnZlcnNpb247Ci0gIH0KLSAgCi0gIAotIH0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1ByaW1pdGl2ZVNob3J0VHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1ByaW1pdGl2ZVNob3J0VHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjkxY2U2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9QcmltaXRpdmVTaG9ydFR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbDsKLQotCi0vKioKLSogb2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIHR5cGUKLSogCi0qLwotcHVibGljIGNsYXNzIFByaW1pdGl2ZVNob3J0VHlwZSBleHRlbmRzIFByaW1pdGl2ZVR5cGUgCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgCi0gIC8qKgotICAqQ29uc3RydWN0b3IKLSAgKgotICAqLwotICBwdWJsaWMgUHJpbWl0aXZlU2hvcnRUeXBlKCkKLSAgewotICAgIHN1cGVyKFR5cGVGYWN0b3J5LlBSSU1fU0hPUlRfTkFNRSk7Ci0gIH0KLSAKLSAgLyoqCi0gICogU3RyaW5nVG9UeXBlIGdldHMgdGhlIHN0cmluZyB0YWtlbiBieSB0aGUgCi0gICogdXNlciBpbnRvIHByb3h5IGZvcm0KLSAgKiBAcmV0dXJuIFN0cmluZyBjb252ZXJ0IHRoZSBzdHJpbmcgdG8gdHlwZS4KLSAgKi8KLSAgcHVibGljIFN0cmluZyBTdHJpbmdUb1R5cGUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBTdHJpbmcgY29udmVyc2lvbiA9ICJTaG9ydC5wYXJzZVNob3J0KCIgKyBuYW1lICsgIik7IjsKLSAgICByZXR1cm4gY29udmVyc2lvbjsKLSAgfQotICAKLSAgCi0gfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvUHJpbWl0aXZlVHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1ByaW1pdGl2ZVR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI1MTc2Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvUHJpbWl0aXZlVHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsOwotCi0vKioKLSogb2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIHR5cGUKLSogCi0qLwotcHVibGljIGFic3RyYWN0IGNsYXNzIFByaW1pdGl2ZVR5cGUgZXh0ZW5kcyBTaW1wbGVUeXBlIAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIAotICAvKioKLSAgKkNvbnN0cnVjdG9yCi0gICoKLSAgKi8KLSAgcHVibGljIFByaW1pdGl2ZVR5cGUoU3RyaW5nIHR5cGUpCi0gIHsKLSAgICBzdXBlcih0eXBlKTsKLSAgfQotIAotIC8qKgotICAqIFRoZSBzdHJpbmdDb252ZXJzaW9uIGZ1bmN0aW9uIG5haWxzIG91dCBzcGVjaWZpYyBjb252ZXJzaW9uIG1ldGhvZHMgdXNlZCBhbW9uZyBzaW1wbGUgdHlwZXMgCi0gICogVGhpcyBtZXRob2QgaXMgdG8gYmUgaW1wbGVtZW50ZWQgYnkgU2ltcGxlVHlwZSBzdWJjbGFzc2VzCi0gICogQHBhcmFtIFN0cmluZyB0aGUgbmFtZSBvZiBzdHJpbmcgYWZ0ZXIgdGhlIHJlcXVlc3QgY2FsbAotICAqIEByZXR1cm4gU3RyaW5nIHRoZSBhY3R1YWwgY29udmVyc2lvbiBzdHJpbmcgY29udGFpbmluZyB0aGUgbmFtZS4KLSAgKi8KLSAgcHVibGljIFN0cmluZyBUeXBlVG9TdHJpbmcoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICByZXR1cm4gIlN0cmluZy52YWx1ZU9mKCIgKyBuYW1lICsgIikiOwotICB9Ci0gIAotICAKLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1JlY29nbml6ZWRSZXR1cm5UeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvUmVjb2duaXplZFJldHVyblR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmM3MjFhOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvUmVjb2duaXplZFJldHVyblR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlN0cmluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLkdlbmVyYXRvcjsKLQotCi0vKioKLSogb2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIHJlY29nbml6ZWQgcmV0dXJuIHR5cGUKLSogCi0qLwotcHVibGljIGNsYXNzIFJlY29nbml6ZWRSZXR1cm5UeXBlIGltcGxlbWVudHMgRGF0YVR5cGUKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAKLSAgcHJvdGVjdGVkIFN0cmluZyBmVHlwZTsKLSAgcHJvdGVjdGVkIFN0cmluZyBmVW5pcXVlTmFtZTsKLQotICAvKioKLSAgKkNvbnN0cnVjdG9yCi0gICoKLSAgKi8KLSAgcHVibGljIFJlY29nbml6ZWRSZXR1cm5UeXBlKFN0cmluZyB0eXBlKQotICB7Ci0gICAgZlR5cGUgPSB0eXBlOwotICAgIGZVbmlxdWVOYW1lID0gIiI7Ci0gIH0KLQotICAvKioKLSAgKiBub3QgcmVsZXZhbnQgYXQgdGhpcyBwb2ludCAKLSAgKi8KLSAgcHVibGljIFN0cmluZyBpbnB1dEZvcm0oU3RyaW5nIG5hbWUpCi0gIHsKLSAgICAgcmV0dXJuICIiOwotICB9Ci0KLSAgIC8qKgotICAqIGFnYWluIG5vdCByZWxldmFudAotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFJlcXVlc3RDb2RlKFN0cmluZyBuYW1lLCBTdHJpbmcgaWQpCi0gIHsKLSAgICAgcmV0dXJuICIiOwotICB9Ci0KLSAgLyoqCi0gICogVGhpcyBmdW5jdGlvbiBoYW5kcyBiYWNrIHRoZSBjb2RlIHJlcXVpcmVkIHRvIGdvIGZyb20gdGhlIAotICAqIHN0cmluZyB0aGUgdXNlciBlbnRlcmVkIHRvIHRoZSBhY3R1YWwgdHlwZSBvZiB0aGUgZWxlbWVudAotICAqIEBwYXJhbSBTdHJpbmcgdHlwZU5hbWUgdGhpcyBpcyB0aGUgYWN0dWFsIG5hbWUgb2YgdGhlIHR5cGUgaWUgaW50LGJvb2xlYW4KLSAgKiBAcGFyYW0gU3RyaW5nIG5vZGVOYW1lIFRoZSBub2RlTmFtZSBpcyBqdXN0IHRoZSBhdHRyaWJ1dGVuYW1lICsgVGVtcC4gCi0gICogQHBhcmFtIFN0cmluZyB0aGUgYXR0cmlidXRlTmFtZSAKLSAgKiBAcmV0dXJuIFN0cmluZyBjb252ZXJ0IHRoZSBzdHJpbmcgdG8gdHlwZSAuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgc3RyaW5nQ29udmVyc2lvbihTdHJpbmcgdHlwZU5hbWUsIFN0cmluZyBub2RlTmFtZSwgU3RyaW5nIGF0dHJpYnV0ZU5hbWUpCi0gIHsKLSAgICByZXR1cm4gIiI7Ci0gIH0KLQotICAvKioKLSAgKiBUaGlzIGlzIGJhc2ljYWxseSB0aGUgZnVuY3Rpb24gdGhhdCBkaWN0YXRlcyBob3cgd2Ugd2FudCB0byBkaXNwbGF5IHRoaXMgdHlwZSAKLSAgKiB1cG9uIHJlY2VpdmluZyBpdCBhcyBhIHJldHVybiBmcm9tIGEgcHJveHkgbWV0aG9kCi0gICogQHBhcmFtIFN0cmluZyB0aGUgbmFtZSBvZiB0aGUgdHlwZQotICAqIEByZXR1cm4gU3RyaW5nIFRoZSBkaXNwbGF5IHN0cmluZwotICAqLwotICBwdWJsaWMgU3RyaW5nIFR5cGVDb252ZXJzaW9uKFN0cmluZyBuYW1lKQotICB7Ci0gICAgU3RyaW5nIG5vbkJlYW4gPSAgIEdlbmVyYXRvci5ET1VCTEVfVEFCICsgImlmKCIgKyBuYW1lICsgIiE9IG51bGwpeyIgKyBTdHJpbmdVdGlscy5ORVdMSU5FICAgCi0gICAgCSAgICAgICAgICAgICArIEdlbmVyYXRvci5ET1VCTEVfVEFCICsgIlN0cmluZyB0ZW1wIiArIGdldFVuaXF1ZU5hbWUoKSsiID0gIiArIG5hbWUgKyAiLnRvU3RyaW5nKCk7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgCi0gICAgICAgICAgICAgICAgICAgICArIEdlbmVyYXRvci5ET1VCTEVfVEFCICsgIiU+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgIAotICAgIAkgICAgICAgICAgICAgKyBHZW5lcmF0b3IuRE9VQkxFX1RBQiArICAiPCU9dGVtcCIgKyBnZXRVbmlxdWVOYW1lKCkgKyIlPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FCi0gICAgICAgICAgICAgICAgICAgICArIEdlbmVyYXRvci5ET1VCTEVfVEFCICsgICI8JSIgKyBTdHJpbmdVdGlscy5ORVdMSU5FCi0gICAgICAgICAgICAgICAgICAgICArIEdlbmVyYXRvci5ET1VCTEVfVEFCICsgIn0iOwotICAgIHJldHVybiBub25CZWFuOwotICB9Ci0KLSAgLyoqCi0gICogcmV0dXJuIHRoZSBuYW1lIG9mIHRoaXMgdHlwZQotICAqIEByZXR1cm4gU3RyaW5nIHRoZSBuYW1lKGluY2x1ZGluZyBwYWNrYWdlKS4KLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRUeXBlKCkKLSAgewotICAgIHJldHVybiBmVHlwZTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VW5pcXVlTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gZlVuaXF1ZU5hbWU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRVbmlxdWVOYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gICAgZlVuaXF1ZU5hbWUgPSBuYW1lOwotICB9Ci0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1NPQVBFbGVtZW50VHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1NPQVBFbGVtZW50VHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODllMDA5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9TT0FQRWxlbWVudFR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlN0cmluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLkdlbmVyYXRvcjsKLQotCi0vKioKLSogb2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIHR5cGUKLSogCi0qLwotcHVibGljIGNsYXNzIFNPQVBFbGVtZW50VHlwZSBpbXBsZW1lbnRzIERhdGFUeXBlCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgCi0gIHByb3RlY3RlZCBTdHJpbmcgZlR5cGU7Ci0gIHByb3RlY3RlZCBTdHJpbmcgZlVuaXF1ZU5hbWU7Ci0KLSAgLyoqCi0gICpDb25zdHJ1Y3RvcgotICAqCi0gICovCi0gIHB1YmxpYyBTT0FQRWxlbWVudFR5cGUoKQotICB7Ci0gICAgZlR5cGUgPSAiamF2YXgueG1sLnNvYXAuU09BUEVsZW1lbnQiOwotICAgIGZVbmlxdWVOYW1lID0gIiI7Ci0gIH0KLQotICAvKioKLSAgKiBpbnB1dEZvcm0gcmV0dXJucyB0aGUgdXNlciBpbnB1dCBodG1sCi0gICogVGhlIERvbUVsZW1lbnQgZm9ybSBpcyBhIHRleHQgYm94Ci0gICogQHBhcmFtIFN0cmluZyBuYW1lIFRoZSBuYW1lIG9mIHRoZSBpbnB1dCBlbGVtZW50Ci0gICogQHJldHVybiBTdHJpbmcgVGhlIGZvcm0gdXNlZCB0byBjb2xsZWN0IHRoZSBkYXRhCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgaW5wdXRGb3JtKFN0cmluZyBuYW1lKQotICB7Ci0gICAgIFN0cmluZyBpbnB1dEZvcm0gPSAiPFREIEFMSUdOPVwibGVmdFwiPjxURVhUQVJFQSBSb3dzPTcgQ29scz00NSBOQU1FPVwiIiAKLSAgICAgICAgICAgICAgICAgICAgICAgICArIG5hbWUgKyAiXCI+PC9URVhUQVJFQT48L1REPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FIAotICAgICAgICAgICAgICAgICAgICAgICAgICsgIjwvVFI+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkU7Ci0gICAgIHJldHVybiBpbnB1dEZvcm07Ci0gIH0KLQotICAgLyoqCi0gICogVGhpcyBmdW5jdGlvbiBkaWN0YXRlcyBob3cgeW91IHdhbnQgdG8gcHJvY2VzcyB0aGUgCi0gICogaW5jb21pbmcgc3RyaW5nIGZyb20gdGhlIGlucHV0IGpzcC4gWW91IG1heSBvciBtYXkgbm90IHVzZSB0aGUgbWFya3VwIAotICAqIGZ1bmN0aW9uIGRlcGVuZGluZyBvbiB0aGUgdHlwZS4gVGhlIHNpbXBsZSB0eXBlcyB1c2UgaXQuIERvbUVsZW1lbnQgZG9lcyBub3QKLSAgKiBAcGFyYW0gU3RyaW5nIHRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUKLSAgKiBAcmV0dXJuIFN0cmluZyB0aGUgY29kZSB0byBiZSBnZW5lcmF0ZWQKLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRSZXF1ZXN0Q29kZShTdHJpbmcgbmFtZSwgU3RyaW5nIGlkKQotICB7Ci0gICAgIFN0cmluZyByZXF1ZXN0Q29kZSA9IEdlbmVyYXRvci5ET1VCTEVfVEFCICsgIlN0cmluZyIgKyBHZW5lcmF0b3IuU1BBQ0UgCi0gICAgIAkgICAgICAgICAgICAgICAgICAgKyBpZCArICI9ICByZXF1ZXN0LmdldFBhcmFtZXRlcihcIiIKLSAgICAgCSAgICAgICAgICAgICAgICAgICArIG5hbWUgKyJcIik7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkU7Ci0gICAgIHJldHVybiByZXF1ZXN0Q29kZTsKLSAgfQotCi0gIC8qKgotICAqIFRoaXMgZnVuY3Rpb24gaGFuZHMgYmFjayB0aGUgY29kZSByZXF1aXJlZCB0byBnbyBmcm9tIHRoZSAKLSAgKiBzdHJpbmcgdGhlIHVzZXIgZW50ZXJlZCB0byB0aGUgYWN0dWFsIHR5cGUgb2YgdGhlIGVsZW1lbnQKLSAgKiBAcGFyYW0gU3RyaW5nIHR5cGVOYW1lIHRoaXMgaXMgdGhlIGFjdHVhbCBuYW1lIG9mIHRoZSB0eXBlIGllIGludCxib29sZWFuCi0gICogQHBhcmFtIFN0cmluZyBub2RlTmFtZSBUaGUgbm9kZU5hbWUgaXMganVzdCB0aGUgYXR0cmlidXRlbmFtZSArIFRlbXAuIAotICAqIEBwYXJhbSBTdHJpbmcgdGhlIGF0dHJpYnV0ZU5hbWUgCi0gICogQHJldHVybiBTdHJpbmcgY29udmVydCB0aGUgc3RyaW5nIHRvIHR5cGUgLgotICAqLwotICBwdWJsaWMgU3RyaW5nIHN0cmluZ0NvbnZlcnNpb24oU3RyaW5nIHR5cGVOYW1lLCBTdHJpbmcgbm9kZU5hbWUsIFN0cmluZyBhdHRyaWJ1dGVOYW1lKQotICB7Ci0gICAgIFN0cmluZyBjb252ZXJzaW9uID0gIEdlbmVyYXRvci5ET1VCTEVfVEFCIAotICAgICAgICAgICAgICAgICAgICAgICArICJqYXZheC54bWwuc29hcC5TT0FQRWxlbWVudCAiICsgbm9kZU5hbWUgKyAiPSBvcmcuZWNsaXBzZS5qc3Qud3MudXRpbC5Tb2FwRWxlbWVudEhlbHBlci5jcmVhdGVTT0FQRWxlbWVudEZyb21YTUxTdHJpbmcoIiArIGF0dHJpYnV0ZU5hbWUgKyAiKTsiIAotCSAgICAgICAgICAgICAgICAgICArIFN0cmluZ1V0aWxzLk5FV0xJTkU7Ci0gICAgIHJldHVybiBjb252ZXJzaW9uOwotICB9Ci0KLSAgLyoqCi0gICogVGhpcyBpcyBiYXNpY2FsbHkgdGhlIGZ1bmN0aW9uIHRoYXQgZGljdGF0ZXMgaG93IHdlIHdhbnQgdG8gZGlzcGxheSB0aGlzIHR5cGUgCi0gICogdXBvbiByZWNlaXZpbmcgaXQgYXMgYSByZXR1cm4gZnJvbSBhIHByb3h5IG1ldGhvZAotICAqIEBwYXJhbSBTdHJpbmcgdGhlIG5hbWUgb2YgdGhlIHR5cGUKLSAgKiBAcmV0dXJuIFN0cmluZyBUaGUgZGlzcGxheSBzdHJpbmcKLSAgKi8KLSAgcHVibGljIFN0cmluZyBUeXBlQ29udmVyc2lvbihTdHJpbmcgbmFtZSkKLSAgewotICAgIFN0cmluZyB0eXBlVG9TdHJpbmcgPSBHZW5lcmF0b3IuRE9VQkxFX1RBQiArICJTdHJpbmcgdGVtcFJlc3VsdCIgKyBnZXRVbmlxdWVOYW1lKCkrICIgPSBvcmcuZWNsaXBzZS5qc3Qud3MudXRpbC5Tb2FwRWxlbWVudEhlbHBlci5zb2FwRWxlbWVudFdyaXRlcigiICsgbmFtZSArICIsIG5ldyBqYXZhLmxhbmcuU3RyaW5nQnVmZmVyKCkiICsgIik7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgCi0gICAgICAgICAgICAgICAgICAgICAgICsgR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiJT4iICsgU3RyaW5nVXRpbHMuTkVXTElORQotICAgICAgICAgICAgICAgICAgICAgICArIEdlbmVyYXRvci5ET1VCTEVfVEFCICsgIjwlPSB0ZW1wUmVzdWx0IiArIGdldFVuaXF1ZU5hbWUoKSsgIiAlPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FCi0gICAgICAgICAgICAgICAgICAgICAgICsgR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiPCUiICsgU3RyaW5nVXRpbHMuTkVXTElORTsKLQotICAgIHJldHVybiB0eXBlVG9TdHJpbmc7Ci0gIH0KLQotICAvKioKLSAgKiByZXR1cm4gdGhlIG5hbWUgb2YgdGhpcyB0eXBlCi0gICogQHJldHVybiBTdHJpbmcgdGhlIG5hbWUoaW5jbHVkaW5nIHBhY2thZ2UpLgotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFR5cGUoKQotICB7Ci0gICAgcmV0dXJuIGZUeXBlOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRVbmlxdWVOYW1lKCkKLSAgewotICAgIHJldHVybiBmVW5pcXVlTmFtZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFVuaXF1ZU5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBmVW5pcXVlTmFtZSA9IG5hbWU7Ci0gIH0KLQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvU2ltcGxlRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1NpbXBsZUVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQ3ODM0NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvU2ltcGxlRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsOwotCi0KLS8qKgotKiAxIG9mIHRocmVlIHR5cGUgZWxlbWVudHMgcmVwcmVzZW50cyBwcmltaXRpdmVzIAotKi8KLXB1YmxpYyBjbGFzcyBTaW1wbGVFbGVtZW50IGV4dGVuZHMgVHlwZUVsZW1lbnQKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAKLSAgLyoqCi0gICogQ29uc3RydWN0b3IgCi0gICogQHBhcmFtIFBhcmFtZXRlckVsZW1lbnQgVGhlIFBhcmFtZXRlciB0aGF0IG93bnMgdGhpcyBzaW1wbGUgdHlwZS4KLSAgKiBAcGFyYW0gU3RyaW5nIE5hbWUgb2YgdGhlIHNpbXBsZSBlbGVtZW50LgotICAqLwotICBwdWJsaWMgU2ltcGxlRWxlbWVudCAoIFBhcmFtZXRlckVsZW1lbnQgcGFyYW1ldGVyRWxlbWVudCwgU3RyaW5nIG5hbWUsIGJvb2xlYW4gcHJpbSkKLSAgewotICAgIHN1cGVyKG5hbWUscGFyYW1ldGVyRWxlbWVudCxUeXBlRWxlbWVudC5SRUxfT1dORVIsVHlwZUVsZW1lbnQuUkVMX1RZUEUsVHlwZUVsZW1lbnQuU0lNUExFKTsKLSAgICBmT3duZXJUeXBlID0gVHlwZUVsZW1lbnQuUEFSQU1FVEVSX09XTkVSOwotICAgIHNldFByaW1pdGl2ZShwcmltKTsKLSAgfQotICAKLSAgLyoqCi0gICogQ29uc3RydWN0b3IgCi0gICogQHBhcmFtIFBhcmFtZXRlckVsZW1lbnQgVGhlIEF0dHJpYnV0ZSB0aGF0IG93bnMgdGhpcyBzaW1wbGUgdHlwZS4KLSAgKiBAcGFyYW0gU3RyaW5nIE5hbWUgb2YgdGhlIEF0dHJpYnV0ZUVsZW1lbnQuCi0gICovCi0gIHB1YmxpYyBTaW1wbGVFbGVtZW50ICggQXR0cmlidXRlRWxlbWVudCBhdHRyaWJ1dGVFbGVtZW50LCBTdHJpbmcgbmFtZSwgYm9vbGVhbiBwcmltKQotICB7Ci0gICAgc3VwZXIobmFtZSxhdHRyaWJ1dGVFbGVtZW50LFR5cGVFbGVtZW50LlJFTF9PV05FUixUeXBlRWxlbWVudC5SRUxfVFlQRSxUeXBlRWxlbWVudC5TSU1QTEUpOwotICAgIGZPd25lclR5cGUgPSBUeXBlRWxlbWVudC5BVFRSSUJVVEVfT1dORVI7Ci0gICAgc2V0UHJpbWl0aXZlKHByaW0pOwotICB9Ci0KLSAgLyoqCi0gICogQ29uc3RydWN0b3IgCi0gICogQHBhcmFtIFBhcmFtZXRlckVsZW1lbnQgVGhlIEF0dHJpYnV0ZSB0aGF0IG93bnMgdGhpcyBzaW1wbGUgdHlwZS4KLSAgKiBAcGFyYW0gU3RyaW5nIE5hbWUgb2YgdGhlIEF0dHJpYnV0ZUVsZW1lbnQuCi0gICovCi0gIHB1YmxpYyBTaW1wbGVFbGVtZW50ICggRmllbGRFbGVtZW50IGZpZWxkRWxlbWVudCwgU3RyaW5nIG5hbWUsIGJvb2xlYW4gcHJpbSkKLSAgewotICAgIHN1cGVyKG5hbWUsZmllbGRFbGVtZW50LFR5cGVFbGVtZW50LlJFTF9PV05FUixUeXBlRWxlbWVudC5SRUxfVFlQRSxUeXBlRWxlbWVudC5TSU1QTEUpOwotICAgIGZPd25lclR5cGUgPSBUeXBlRWxlbWVudC5GSUVMRF9PV05FUjsKLSAgICBzZXRQcmltaXRpdmUocHJpbSk7Ci0gIH0KLSAgCi19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9TaW1wbGVUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvU2ltcGxlVHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODE5NDgyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9TaW1wbGVUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmdVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5HZW5lcmF0b3I7Ci0KLQotLyoqCi0qIG9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSB0eXBlCi0qIAotKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBTaW1wbGVUeXBlIGltcGxlbWVudHMgRGF0YVR5cGUKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAKLSAgcHJvdGVjdGVkIFN0cmluZyBmVHlwZTsKLSAgcHJvdGVjdGVkIFN0cmluZyBmVW5pcXVlTmFtZTsKLQotICAvKioKLSAgKkNvbnN0cnVjdG9yCi0gICoKLSAgKi8KLSAgcHVibGljIFNpbXBsZVR5cGUoU3RyaW5nIHR5cGUpCi0gIHsKLSAgICBmVHlwZSA9IHR5cGU7Ci0gIH0KLQotICAvKioKLSAgKiBpbnB1dEZvcm0gcmV0dXJucyB0aGUgdXNlciBpbnB1dCBodG1sCi0gICogVGhlIHNpbXBsZSBmb3JtIGlzIGp1c3QgYSB0ZXh0IGlucHV0IGJveAotICAqIEBwYXJhbSBTdHJpbmcgbmFtZSBUaGUgbmFtZSBvZiB0aGUgaW5wdXQgZWxlbWVudAotICAqIEByZXR1cm4gU3RyaW5nIFRoZSBmb3JtIHVzZWQgdG8gY29sbGVjdCB0aGUgZGF0YQotICAqLwotICBwdWJsaWMgU3RyaW5nIGlucHV0Rm9ybShTdHJpbmcgbmFtZSkKLSAgewotICAgICBTdHJpbmcgaW5wdXRGb3JtID0gIjxURCBBTElHTj1cImxlZnRcIj48SU5QVVQgVFlQRT1cIlRFWFRcIiBOQU1FPVwiIiAKLSAgICAgICAgICAgICAgICAgICAgICAgICArIG5hbWUgKyAiXCIgU0laRT0yMD48L1REPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FIAotICAgICAgICAgICAgICAgICAgICAgICAgICsgIjwvVFI+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkU7Ci0gICAgIHJldHVybiBpbnB1dEZvcm07Ci0gIH0KLQotICAgLyoqCi0gICogVGhpcyBmdW5jdGlvbiBkaWN0YXRlcyBob3cgeW91IHdhbnQgdG8gcHJvY2VzcyB0aGUgCi0gICogaW5jb21pbmcgc3RyaW5nIGZyb20gdGhlIGlucHV0IGpzcC4gWW91IG1heSBvciBtYXkgbm90IHVzZSB0aGUgbWFya3VwIAotICAqIGZ1bmN0aW9uIGRlcGVuZGluZyBvbiB0aGUgdHlwZS4gVGhlIHNpbXBsZSB0eXBlcyB1c2UgaXQuIERvbUVsZW1lbnQgZG9lcyBub3QKLSAgKiBAcGFyYW0gU3RyaW5nIHRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUKLSAgKiBAcmV0dXJuIFN0cmluZyB0aGUgY29kZSB0byBiZSBnZW5lcmF0ZWQKLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRSZXF1ZXN0Q29kZShTdHJpbmcgbmFtZSwgU3RyaW5nIGlkKQotICB7Ci0gICAgIFN0cmluZyByZXF1ZXN0Q29kZSA9IEdlbmVyYXRvci5ET1VCTEVfVEFCICsgIlN0cmluZyIgKyBHZW5lcmF0b3IuU1BBQ0UgCi0gICAgIAkgICAgICAgICAgICAgICAgICAgKyBpZCArICI9ICByZXF1ZXN0LmdldFBhcmFtZXRlcihcIiIKLSAgICAgCSAgICAgICAgICAgICAgICAgICArIG5hbWUgKyJcIik7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkU7Ci0gICAgIHJldHVybiByZXF1ZXN0Q29kZTsKLSAgIH0KLSAKLSAgLyoqCi0gICogVGhpcyBmdW5jdGlvbiBoYW5kcyBiYWNrIHRoZSBjb2RlIHJlcXVpcmVkIHRvIGdvIGZyb20gdGhlIAotICAqIHN0cmluZyB0aGUgdXNlciBlbnRlcmVkIHRvIHRoZSBhY3R1YWwgdHlwZSBvZiB0aGUgZWxlbWVudAotICAqIGl0IHVzZXMgYW5vdGhlciBmdW5jdGlvbiB0aGF0IGFsbCBzdWJjbGFzc2VzIG9mIFNpbXBsZVR5cGUgYXJlIHJlcXVpcmVkIHRvIGltcGxlbWVudAotICAqIFRoZSBTdHJpbmdUb1R5cGUgZnVuY3Rpb24KLSAgKiBAcGFyYW0gU3RyaW5nIHR5cGVOYW1lIHRoaXMgaXMgdGhlIGFjdHVhbCBuYW1lIG9mIHRoZSB0eXBlIGllIGludCxib29sZWFuCi0gICogQHBhcmFtIFN0cmluZyBub2RlTmFtZSBUaGUgbm9kZU5hbWUgaXMganVzdCB0aGUgYXR0cmlidXRlbmFtZSArIFRlbXAuIAotICAqIEBwYXJhbSBTdHJpbmcgdGhlIGF0dHJpYnV0ZU5hbWUgCi0gICogQHJldHVybiBTdHJpbmcgY29udmVydCB0aGUgc3RyaW5nIHRvIHR5cGUgLgotICAqLwotICBwdWJsaWMgU3RyaW5nIHN0cmluZ0NvbnZlcnNpb24oU3RyaW5nIHR5cGVOYW1lLCBTdHJpbmcgbm9kZU5hbWUsIFN0cmluZyBhdHRyaWJ1dGVOYW1lKQotICB7Ci0gICAgIFN0cmluZyBjb252ZXJzaW9uID0gR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyB0eXBlTmFtZSArIEdlbmVyYXRvci5TUEFDRSArIG5vZGVOYW1lIAotICAgICAJICAgICAgICAgICAgICAgICArIEdlbmVyYXRvci5TUEFDRSArICIgPSAiICsgU3RyaW5nVG9UeXBlKGF0dHJpYnV0ZU5hbWUpIAotICAgICAJICAgICAgICAgICAgICAgICArICIiICsgU3RyaW5nVXRpbHMuTkVXTElORTsKLSAgICAgcmV0dXJuIGNvbnZlcnNpb247Ci0gIH0KLQotICAvKioKLSAgKiBUaGUgc3RyaW5nQ29udmVyc2lvbiBmdW5jdGlvbiBuYWlscyBvdXQgc3BlY2lmaWMgY29udmVyc2lvbiBtZXRob2RzIHVzZWQgYW1vbmcgc2ltcGxlIHR5cGVzIAotICAqIFRoaXMgbWV0aG9kIGlzIHRvIGJlIGltcGxlbWVudGVkIGJ5IFNpbXBsZVR5cGUgc3ViY2xhc3NlcwotICAqIEBwYXJhbSBTdHJpbmcgdGhlIG5hbWUgb2Ygc3RyaW5nIGFmdGVyIHRoZSByZXF1ZXN0IGNhbGwKLSAgKiBAcmV0dXJuIFN0cmluZyB0aGUgYWN0dWFsIGNvbnZlcnNpb24gc3RyaW5nIGNvbnRhaW5pbmcgdGhlIG5hbWUuCi0gICovCi0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgU3RyaW5nVG9UeXBlKFN0cmluZyBuYW1lKTsKLQotICAvKioKLSAgKiBjb252ZXJ0cyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBwcm94eSAKLSAgKiBiYWNrIHRvIGEgc3RyaW5nIAotICAqIEByZXR1cm4gU3RyaW5nIGNvbnZlcnQgdGhlIHR5cGUgdG8gc3RyaW5nLgotICAqLwotICBwdWJsaWMgU3RyaW5nIFR5cGVDb252ZXJzaW9uKFN0cmluZyBuYW1lKQotICB7Ci0KLSAgICBTdHJpbmcgY29udmVyc2lvbiA9IEdlbmVyYXRvci5ET1VCTEVfVEFCICsgIlN0cmluZyB0ZW1wUmVzdWx0IiArIGdldFVuaXF1ZU5hbWUoKSsgIiA9IG9yZy5lY2xpcHNlLmpzdC53cy51dGlsLkpzcFV0aWxzLm1hcmt1cCgiICsgVHlwZVRvU3RyaW5nKG5hbWUpICsgIik7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgCi0gICAgICAgICAgICAgICAgICAgICAgICsgR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiJT4iICsgU3RyaW5nVXRpbHMuTkVXTElORQotICAgICAgICAgICAgICAgICAgICAgICArIEdlbmVyYXRvci5ET1VCTEVfVEFCICsgIjwlPSB0ZW1wUmVzdWx0IiArIGdldFVuaXF1ZU5hbWUoKSsgIiAlPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FCi0gICAgICAgICAgICAgICAgICAgICAgICsgR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiPCUiICsgU3RyaW5nVXRpbHMuTkVXTElORTsKLQotICAgIHJldHVybiBjb252ZXJzaW9uOwotICB9Ci0KLSAgIC8qKgotICAqIFRoZSBzdHJpbmdDb252ZXJzaW9uIGZ1bmN0aW9uIG5haWxzIG91dCBzcGVjaWZpYyBjb252ZXJzaW9uIG1ldGhvZHMgdXNlZCBhbW9uZyBzaW1wbGUgdHlwZXMgCi0gICogVGhpcyBtZXRob2QgaXMgdG8gYmUgaW1wbGVtZW50ZWQgYnkgU2ltcGxlVHlwZSBzdWJjbGFzc2VzCi0gICogQHBhcmFtIFN0cmluZyB0aGUgbmFtZSBvZiBzdHJpbmcgYWZ0ZXIgdGhlIHJlcXVlc3QgY2FsbAotICAqIEByZXR1cm4gU3RyaW5nIHRoZSBhY3R1YWwgY29udmVyc2lvbiBzdHJpbmcgY29udGFpbmluZyB0aGUgbmFtZS4KLSAgKi8KLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBUeXBlVG9TdHJpbmcoU3RyaW5nIG5hbWUpOwotCi0gIC8qKgotICAqIHJldHVybiB0aGUgbmFtZSBvZiB0aGlzIHR5cGUKLSAgKiBAcmV0dXJuIFN0cmluZyB0aGUgbmFtZShpbmNsdWRpbmcgcGFja2FnZSkuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VHlwZSgpCi0gIHsKLSAgICByZXR1cm4gZlR5cGU7Ci0gIH0KLQotICAgcHVibGljIFN0cmluZyBnZXRVbmlxdWVOYW1lKCkKLSAgewotICAgIHJldHVybiBmVW5pcXVlTmFtZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFVuaXF1ZU5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBmVW5pcXVlTmFtZSA9IG5hbWU7Ci0gIH0KLQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvU3RhdGVMZXNzQmVhblR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9TdGF0ZUxlc3NCZWFuVHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MGY5ZDZjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9TdGF0ZUxlc3NCZWFuVHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLQotLyoqCi0qIG9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSByZWNvZ25pemVkIHJldHVybiB0eXBlCi0qIAotKi8KLXB1YmxpYyBjbGFzcyBTdGF0ZUxlc3NCZWFuVHlwZSBleHRlbmRzIFJlY29nbml6ZWRSZXR1cm5UeXBlCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLQotICAvKioKLSAgKkNvbnN0cnVjdG9yCi0gICoKLSAgKi8KLSAgCi0gIHB1YmxpYyBTdGF0ZUxlc3NCZWFuVHlwZShTdHJpbmcgbmFtZSkKLSAgewotICAgIHN1cGVyKFR5cGVGYWN0b3J5LlNUQVRFTEVTU19CRUFOKTsKLSAgfQotCi0gIAotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvU3RyaW5nVHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1N0cmluZ1R5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWI5OWM3NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvU3RyaW5nVHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsOwotCi0vKioKLSogb2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIHR5cGUKLSogCi0qLwotcHVibGljIGNsYXNzIFN0cmluZ1R5cGUgZXh0ZW5kcyBTaW1wbGVUeXBlIAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIAotICAvKioKLSAgKkNvbnN0cnVjdG9yCi0gICoKLSAgKi8KLSAgcHVibGljIFN0cmluZ1R5cGUoKQotICB7Ci0gICAgc3VwZXIoVHlwZUZhY3RvcnkuU1RSSU5HX05BTUUpOwotICB9Ci0gCi0gIC8qKgotICAqIFN0cmluZ1RvVHlwZSBnZXRzIHRoZSBzdHJpbmcgdGFrZW4gYnkgdGhlIAotICAqIHVzZXIgaW50byBwcm94eSBmb3JtCi0gICogQHJldHVybiBTdHJpbmcgY29udmVydCB0aGUgc3RyaW5nIHRvIHR5cGUgLgotICAqLwotICBwdWJsaWMgU3RyaW5nIFN0cmluZ1RvVHlwZShTdHJpbmcgbmFtZSkKLSAgewotICAgIFN0cmluZyBjb252ZXJzaW9uID0gbmFtZSArICI7IjsKLSAgICByZXR1cm4gY29udmVyc2lvbjsgICAgCi0gIH0KLQotICAvKioKLSAgKiBUaGUgc3RyaW5nQ29udmVyc2lvbiBmdW5jdGlvbiBuYWlscyBvdXQgc3BlY2lmaWMgY29udmVyc2lvbiBtZXRob2RzIHVzZWQgYW1vbmcgc2ltcGxlIHR5cGVzIAotICAqIFRoaXMgbWV0aG9kIGlzIHRvIGJlIGltcGxlbWVudGVkIGJ5IFNpbXBsZVR5cGUgc3ViY2xhc3NlcwotICAqIEBwYXJhbSBTdHJpbmcgdGhlIG5hbWUgb2Ygc3RyaW5nIGFmdGVyIHRoZSByZXF1ZXN0IGNhbGwKLSAgKiBAcmV0dXJuIFN0cmluZyB0aGUgYWN0dWFsIGNvbnZlcnNpb24gc3RyaW5nIGNvbnRhaW5pbmcgdGhlIG5hbWUuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgVHlwZVRvU3RyaW5nKFN0cmluZyBuYW1lKQotICB7Ci0gICAgcmV0dXJuICJTdHJpbmcudmFsdWVPZigiICsgbmFtZSArICIpIjsKLSAgfQotIAotIH0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1R5cGVFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvVHlwZUVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWY4MGQ3Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvVHlwZUVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNDEwICAgMTgwOTUyIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBTYW1wbGUgSlNQIGdlbmVyYXRvciBjaG9rZXMgb24gaW50ZXJmYWNlcyBhbmQgYWJzdHJhY3QgY2xhc3NlcwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5CYXNpY0VsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci0KLS8qKgotKiBUeXBlRWxlbWVudCBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgSmF2YSBiZWFuIGZlYXR1cmVzIHRoYXQgaGF2ZSB0eXBlcy4KLSovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgVHlwZUVsZW1lbnQgZXh0ZW5kcyBCYXNpY0VsZW1lbnQKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9OX0lOU1RBTlRJQUJMRSA9ICJub25JbnN0YW50aWFibGUiOwotCi0gIHB1YmxpYyBzdGF0aWMgaW50IEJFQU4gPSAwOwotICBwdWJsaWMgc3RhdGljIGludCBTSU1QTEUgPSAxOwotICBwdWJsaWMgc3RhdGljIGludCBBUlJBWSA9IDI7Ci0KLSAgcHJpdmF0ZSBpbnQgZlR5cGU7Ci0gIHByb3RlY3RlZCBpbnQgZk93bmVyVHlwZTsKLSAgcHJpdmF0ZSBib29sZWFuIGZQcmltaXRpdmUgPSBmYWxzZTsKLQotICAvKioKLSAgKiBDb25zdHJ1Y3Rvci4gQXV0b21hdGljYWxseSBhZGRzIHRoaXMgb2JqZWN0IHRvIHRoZSBnaXZlbiBtb2RlbC4KLSAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgZWxlbWVudAotICAqIEBwYXJhbSBtb2RlbCBUaGUgbW9kZWwgdG8gb3duIHRoaXMgb2JqZWN0LgotICAqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIHJlcHJlc2VudGVkIGJ5IHRoaXMgb2JqZWN0LCBvbmUgb2YKLSAgKiA8Y29kZT5CRUFOPC9jb2RlPiwgPGNvZGU+U0lNUExFPC9jb2RlPiBvciA8Y29kZT5BUlJBWTwvY29kZT4uCi0gICovCi0gIHByb3RlY3RlZCBUeXBlRWxlbWVudCAoIFN0cmluZyBuYW1lLCBNb2RlbCBtb2RlbCwgaW50IHR5cGUgKQotICB7Ci0gICAgc3VwZXIobmFtZSxtb2RlbCk7Ci0gICAgZlR5cGUgPSB0eXBlOwotICB9Ci0KLSAgLyoqCi0gICovCi0gIHByb3RlY3RlZCBUeXBlRWxlbWVudCAoIFN0cmluZyBuYW1lLCBFbGVtZW50IGVsZW1lbnQsIFN0cmluZyBvdXRib3VuZFJlbE5hbWUsIFN0cmluZyBpbmJvdW5kUmVsTmFtZSwgaW50IHR5cGUgKQotICB7Ci0gICAgc3VwZXIobmFtZSxlbGVtZW50LG91dGJvdW5kUmVsTmFtZSxpbmJvdW5kUmVsTmFtZSk7Ci0gICAgZlR5cGUgPSB0eXBlOwotICB9Ci0KLSAgLyoKLSAgKlRoaXMgd2lsbCB0ZWxsIHlvdSB3ZXRoZXIgdGhlIHR5cGUgaXMgYSBiZWFuCi0gICpAcGFyYW0gQm9vbGVhbiByZXR1cm5zIHRydWUgaWYgdGhpcyBpcyBiZWFuCi0gICoqLwotICBwdWJsaWMgYm9vbGVhbiBpc0JlYW4oKQotICB7Ci0gICAgaWYgKGZUeXBlID09IEJFQU4pIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qCi0gICpUaGlzIHdpbGwgdGVsbCB5b3Ugd2V0aGVyIHRoZSB0eXBlIGlzIGEgYmVhbgotICAqQHBhcmFtIEJvb2xlYW4gcmV0dXJucyB0cnVlIGlmIHRoaXMgaXMgYmVhbgotICAqKi8KLSAgcHVibGljIGJvb2xlYW4gaXNQcmltaXRpdmUoKQotICB7Ci0gICAgcmV0dXJuIGZQcmltaXRpdmU7Ci0gIH0KLQotICAvKgotICAqVGhpcyB3aWxsIHRlbGwgeW91IHdldGhlciB0aGUgdHlwZSBpcyBhIGJlYW4KLSAgKkBwYXJhbSBCb29sZWFuIHJldHVybnMgdHJ1ZSBpZiB0aGlzIGlzIGJlYW4KLSAgKiovCi0gIHByb3RlY3RlZCB2b2lkIHNldFByaW1pdGl2ZShib29sZWFuIHByaW0pCi0gIHsKLSAgICBmUHJpbWl0aXZlID0gcHJpbTsgCi0gIH0KLQotCi0gIC8qCi0gICogVGhpcyBpcyBtYWlubHkgbmVlZGVkIGZvciBhcnJheXMgYXMgd2l0aCBhbGwgdHlwZXMgdGhlCi0gICogbmFtZXMgY29tZSBvdXQgYXMgamF2YS51dGlsLnR5cGUsIGJ1dCB3aXRoIGFuIGFycmF5IGl0IAotICAqIGlzbnQgZXhwbGljaXQgaW4gdGVsbGluZyB1cyBpdHMgYW4gYXJyYXkKLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRUeXBlTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0TmFtZSgpOwotICB9Ci0gIAotICAvKgotICAqVGhpcyB3aWxsIHRlbGwgeW91IHdldGhlciB0aGUgdHlwZSBpcyBhIHNpbXBsZQotICAqQHBhcmFtIEJvb2xlYW4gcmV0dXJucyB0cnVlIGlmIHRoaXMgaXMgc2ltcGxlCi0gICoqLwotICBwdWJsaWMgYm9vbGVhbiBpc1NpbXBsZSgpCi0gIHsKLSAgICBpZiAoZlR5cGUgPT0gU0lNUExFKSByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvKgotICAqVGhpcyB3aWxsIHRlbGwgeW91IHdldGhlciB0aGUgdHlwZSBpcyBhIGFycmF5Ci0gICpAcGFyYW0gQm9vbGVhbiByZXR1cm5zIHRydWUgaWYgdGhpcyBpcyBhcnJheQotICAqKi8KLSAgcHVibGljIGJvb2xlYW4gaXNBcnJheSgpCi0gIHsKLSAgICBpZiAoZlR5cGUgPT0gQVJSQVkpIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFJFTF9BVFRSSUJVVEVTID0gImF0dHJpYnV0ZXMiOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBSRUxfRklFTERTID0gImZpZWxkcyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFTF9UWVBFID0gInR5cGUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRUxfT1dORVIgPSAib3duZXIiOwotCi0gIHB1YmxpYyBzdGF0aWMgaW50IFBBUkFNRVRFUl9PV05FUiA9IDA7Ci0gIHB1YmxpYyBzdGF0aWMgaW50IEFUVFJJQlVURV9PV05FUiA9IDE7Ci0gIHB1YmxpYyBzdGF0aWMgaW50IEZJRUxEX09XTkVSID0gMjsKLSAgcHVibGljIHN0YXRpYyBpbnQgUk9PVCA9IDM7Ci0KLSAgLyoKLSAgKiBUaGlzIGNvdWxkIGJlIFRoZSByb290IHRlc3QgYmVhbgotICAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIHRoaXMgaXMgcm9vdCBiZWFuCi0gICovCi0gIHB1YmxpYyBib29sZWFuIGlzUm9vdCgpCi0gIHsKLSAgICBpZihmT3duZXJUeXBlID09IFJPT1QpIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qCi0gICogVGhpcyBUeXBlIGNvdWxkIGJlIG93bmVkIGJ5IGEgUGFyYW1ldGVyIG9yIGFuIGF0dHJpYnV0ZQotICAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIHRoaXMgaXMgb3duZWQgYnkgYSBwYXJhbWV0ZXIKLSAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNPd25lclBhcmFtZXRlcigpCi0gIHsKLSAgICBpZihmT3duZXJUeXBlID09IFBBUkFNRVRFUl9PV05FUikgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLyoKLSAgKiBUaGlzIFR5cGUgY291bGQgYmUgb3duZWQgYnkgYSBQYXJhbWV0ZXIgb3IgYW4gYXR0cmlidXRlCi0gICogQHJldHVybiBib29sZWFuIHRydWUgaWYgdGhpcyBpcyBvd25lZCBieSBhbiBhdHRyaWJ1dGUgCi0gICovCi0gIHB1YmxpYyBib29sZWFuIGlzT3duZXJBdHRyaWJ1dGUoKQotICB7Ci0gICAgaWYoZk93bmVyVHlwZSA9PSBBVFRSSUJVVEVfT1dORVIpIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qCi0gICogVGhpcyBUeXBlIGNvdWxkIGJlIG93bmVkIGJ5IGEgUGFyYW1ldGVyIG9yIGFuIGF0dHJpYnV0ZQotICAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIHRoaXMgaXMgb3duZWQgYnkgYW4gYXR0cmlidXRlIAotICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc093bmVyRmllbGQoKQotICB7Ci0gICAgaWYoZk93bmVyVHlwZSA9PSBGSUVMRF9PV05FUikgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICogVGhpcyBUeXBlIG1heSBiZSBvd25lZCBieSBhIHBhcmFtZXRlciBvciBhbiBhdHRyaWJ1dGUgCi0gICogVXNlIHRoaXMgbWV0aG9kIGluIGNvbmp1bmN0aW9uIHdpdGggaXNPd25lclBhcmFtdGVyLCBpc093bmVyCi0gICogQHJldHVybiBCYXNpY0VsZW1lbnQgdGhlIGVsZW1lbnQgdGhhdCBvd25zIHRoaXMgYXR0cmlidXRlLgotICAqLwotICBwdWJsaWMgQmFzaWNFbGVtZW50IGdldE93bmluZ0VsZW1lbnQgKCkKLSAgewotICAgIGlmIChpc093bmVyUGFyYW1ldGVyKCkpewotICAgICAgRW51bWVyYXRpb24gZSA9IGdldEVsZW1lbnRzKFJFTF9PV05FUik7Ci0gICAgICByZXR1cm4gZS5oYXNNb3JlRWxlbWVudHMoKSA/IChCYXNpY0VsZW1lbnQpZS5uZXh0RWxlbWVudCgpIDogbnVsbDsKLSAgICB9Ci0gICAgZWxzZSBpZihpc093bmVyQXR0cmlidXRlKCkpewotICAgICAgRW51bWVyYXRpb24gZSA9IGdldEVsZW1lbnRzKFJFTF9PV05FUik7Ci0gICAgICByZXR1cm4gZS5oYXNNb3JlRWxlbWVudHMoKSA/IChCYXNpY0VsZW1lbnQpZS5uZXh0RWxlbWVudCgpIDogbnVsbDsKLSAgICB9Ci0gICAgZWxzZSBpZihpc093bmVyRmllbGQoKSl7Ci0gICAgICBFbnVtZXJhdGlvbiBlID0gZ2V0RWxlbWVudHMoUkVMX09XTkVSKTsKLSAgICAgIHJldHVybiBlLmhhc01vcmVFbGVtZW50cygpID8gKEJhc2ljRWxlbWVudCllLm5leHRFbGVtZW50KCkgOiBudWxsOwotICAgIH0KLQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgCi19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9UeXBlRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1R5cGVGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiZWQ2MTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1R5cGVGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNzI2ICAgMTQ1Njc2IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqIDIwMDYwODIzCSAgMTQ1NjQzIG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkphdmFIZWxwZXJzOwotLyoqCi0gKiBUeXBlRmFjdG9yeQotICogQ3JlYXRpb24gZGF0ZTogKDQvMTAvMjAwMSAxMjo0MTo0OCBQTSkKLSAqIEBhdXRob3I6IEdpbGJlcnQgQW5kcmV3cwotICovCi1wdWJsaWMgY2xhc3MgVHlwZUZhY3RvcnkgCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBVUkxfTkFNRSAgICAgICAgICAgICAgICAgICA9ICJqYXZhLm5ldC5VUkwiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTVFJJTkdfTkFNRSAgICAgICAgICAgICAgID0gImphdmEubGFuZy5TdHJpbmciOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBCSUdfREVDSU1BTF9OQU1FICAgICAgICAgID0gImphdmEubWF0aC5CaWdEZWNpbWFsIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQklHX0lOVEVHRVJfTkFNRSAgICAgICAgICA9ICJqYXZhLm1hdGguQmlnSW50ZWdlciI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERBVEVfTkFNRSAgICAgICAgICAgICAgICAgPSAiamF2YS51dGlsLkRhdGUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBHUkVHT1JJQU5fQ0FMRU5EQVJfTkFNRSA9ICJqYXZhLnV0aWwuR3JlZ29yaWFuQ2FsZW5kYXIiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDQUxFTkRBUl9OQU1FICAgICAgICAgICAgID0gImphdmEudXRpbC5DYWxlbmRhciI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEJPT0xFQU5fTkFNRSAgICAgICAgICAgICAgPSAiamF2YS5sYW5nLkJvb2xlYW4iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBCWVRFX05BTUUgICAgICAgICAgICAgICAgICA9ICJqYXZhLmxhbmcuQnl0ZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERPVUJMRV9OQU1FICAgICAgICAgICAgICAgPSAiamF2YS5sYW5nLkRvdWJsZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZMT0FUX05BTUUgICAgICAgICAgICAgICAgID0gImphdmEubGFuZy5GbG9hdCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElOVEVHRVJfTkFNRSAgICAgICAgICAgICAgID0gImphdmEubGFuZy5JbnRlZ2VyIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9OR19OQU1FICAgICAgICAgICAgICAgICAgPSAiamF2YS5sYW5nLkxvbmciOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTSE9SVF9OQU1FICAgICAgICAgICAgICAgICA9ICJqYXZhLmxhbmcuU2hvcnQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDSEFSQUNURVJfTkFNRSAgICAgICAgICAgID0gImphdmEubGFuZy5DaGFyYWN0ZXIiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBPQkpFQ1RfTkFNRQkJCSAgID0gImphdmEubGFuZy5PYmplY3QiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUklNX0JPT0xFQU5fTkFNRSAgICAgICAgID0gImJvb2xlYW4iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUklNX0JZVEVfTkFNRSAgICAgICAgICAgID0gImJ5dGUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUklNX0RPVUJMRV9OQU1FICAgICAgICAgID0gImRvdWJsZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBSSU1fRkxPQVRfTkFNRSAgICAgICAgICAgPSAiZmxvYXQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUklNX0lOVEVHRVJfTkFNRSAgICAgICAgID0gImludCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBSSU1fTE9OR19OQU1FICAgICAgICAgICAgPSAibG9uZyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBSSU1fU0hPUlRfTkFNRSAgICAgICAgICAgPSAic2hvcnQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUklNX0NIQVJfTkFNRSAgICAgICAgICAgID0gImNoYXIiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBWT0lEX05BTUUgICAgICAgICAgICAgICAgICA9ICJ2b2lkIjsKLQotICAvL3NvbWUgc3BlY2lhbCBjb21wbGV4Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERPTV9FTEVNRU5UX05BTUUgICA9ICJvcmcudzNjLmRvbS5FbGVtZW50IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU09BUF9FTEVNRU5UX05BTUUgPSAiamF2YXgueG1sLnNvYXAuU09BUEVsZW1lbnQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTVEFURUxFU1NfQkVBTiA9IEJlYW5FbGVtZW50LlNUQVRFTEVTU19CRUFOOwotCi0KLQotICBwdWJsaWMgc3RhdGljIEhhc2h0YWJsZSBqYXZhVHlwZXMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gIAotICBwdWJsaWMgVHlwZUZhY3RvcnkoKXt9Ci0KLSAgc3RhdGljewotICAgIGphdmFUeXBlcy5wdXQoQk9PTEVBTl9OQU1FLG5ldyBQcmltaXRpdmVKYXZhVHlwZXMoQk9PTEVBTl9OQU1FKSk7Ci0gICAgamF2YVR5cGVzLnB1dChCWVRFX05BTUUsICAgbmV3IFByaW1pdGl2ZUphdmFUeXBlcyhCWVRFX05BTUUpKTsKLSAgICBqYXZhVHlwZXMucHV0KERPVUJMRV9OQU1FLCBuZXcgUHJpbWl0aXZlSmF2YVR5cGVzKERPVUJMRV9OQU1FKSk7Ci0gICAgamF2YVR5cGVzLnB1dChGTE9BVF9OQU1FLCAgbmV3IFByaW1pdGl2ZUphdmFUeXBlcyhGTE9BVF9OQU1FKSk7Ci0gICAgamF2YVR5cGVzLnB1dChJTlRFR0VSX05BTUUsbmV3IFByaW1pdGl2ZUphdmFUeXBlcyhJTlRFR0VSX05BTUUpKTsKLSAgICBqYXZhVHlwZXMucHV0KExPTkdfTkFNRSwgICBuZXcgUHJpbWl0aXZlSmF2YVR5cGVzKExPTkdfTkFNRSkpOwotICAgIGphdmFUeXBlcy5wdXQoU0hPUlRfTkFNRSwgIG5ldyBQcmltaXRpdmVKYXZhVHlwZXMoU0hPUlRfTkFNRSkpOwotICAgIGphdmFUeXBlcy5wdXQoQ0hBUkFDVEVSX05BTUUsICBuZXcgUHJpbWl0aXZlSmF2YVR5cGVzKENIQVJBQ1RFUl9OQU1FKSk7Ci0gIH0KLQotCi0gIC8qCi0gICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgdXMgdG8gaGFuZGxlIHJlY29nbml6ZWQgYmVhbnMgCi0gICogaW4gZGlzcGxheWluZyBhbmQgZ2VuZXJhdGluZyBjb2RlIGZvciB0aGVtIGluc3RlYWQgb2YgCi0gICogdHJlYXRpbmcgdGhlbSBhcyBjb21wbGV4IHR5cGVzCi0gICovIAotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gcmVjb2duaXplZEJlYW4oU3RyaW5nIHR5cGUpCi0gIHsKLQotICAgIC8vICAgICAKLSAgICAvL2N1cnJlbnQgcmVjb2duaXplZCBiZWFucyAobW9zdGx5IGphdmEubGFuZykKLSAgICBpZiAodHlwZS5lcXVhbHMoQk9PTEVBTl9OQU1FKSAgICAgICAgICAgICB8fAotICAgICAgICB0eXBlLmVxdWFscyhCWVRFX05BTUUpICAgICAgICAgICAgICAgfHwKLSAgICAgICAgdHlwZS5lcXVhbHMoRE9VQkxFX05BTUUpICAgICAgICAgICAgIHx8Ci0gICAgICAgIHR5cGUuZXF1YWxzKEZMT0FUX05BTUUpICAgICAgICAgICAgICAgfHwKLSAgICAgICAgdHlwZS5lcXVhbHMoSU5URUdFUl9OQU1FKSAgICAgICAgICAgICB8fAotICAgICAgICB0eXBlLmVxdWFscyhMT05HX05BTUUpICAgICAgICAgICAgICAgfHwKLSAgICAgICAgdHlwZS5lcXVhbHMoU0hPUlRfTkFNRSkgICAgICAgICAgICAgIHx8ICAgICAgCi0gICAgICAgIHR5cGUuZXF1YWxzKENIQVJBQ1RFUl9OQU1FKSAgICAgICAgICB8fCAgICAgIAotICAgICAgICB0eXBlLmVxdWFscyhET01fRUxFTUVOVF9OQU1FKSAgICAgICAgfHwgICAgICAKLQkgICAgdHlwZS5lcXVhbHMoU09BUF9FTEVNRU5UX05BTUUpICAgICAgICB8fAotICAgICAgICB0eXBlLmVxdWFscyhCSUdfREVDSU1BTF9OQU1FKSAgICAgICAgIHx8Ci0gICAgICAgIHR5cGUuZXF1YWxzKEJJR19JTlRFR0VSX05BTUUpICAgICAgICAgfHwKLSAgICAgICAgdHlwZS5lcXVhbHMoREFURV9OQU1FKSAgICAgICAgICAgICAgICB8fAotICAgICAgICB0eXBlLmVxdWFscyhHUkVHT1JJQU5fQ0FMRU5EQVJfTkFNRSkgfHwKLSAgICAgICAgdHlwZS5lcXVhbHMoQ0FMRU5EQVJfTkFNRSkgICAgICAgICAgIHx8IAotICAgICAgICB0eXBlLmVxdWFscyhVUkxfTkFNRSkgICAgICAgICAgICAgICAgIHx8Ci0gICAgICAgIHR5cGUuZXF1YWxzKE9CSkVDVF9OQU1FKQkJCSB8fAotICAgICAgICB0eXBlLmVxdWFscyhTVFJJTkdfTkFNRSkpICByZXR1cm4gdHJ1ZTsgICAgICAKLSAgICAgcmV0dXJuIGZhbHNlOyAKLSAgCi0gIH0KLQotICAvKgotICAqIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHVzIHRvIGhhbmRsZSB1bnN1cHBvcnRlZCB0eXBlcyAKLSAgKiBpZiB3ZSBkb250IHdhbnQgdG8gc3VwcG9ydCBhIHR5cGUgYW5kIHdlIHdhbnQgdG8gb21pdHQgdGhpcyAgCi0gICogbWV0aG9kIGZyb20gdGhlIHNhbXBsZXMKLSAgKiBAcGFyYW0gamF2YUhlbHBlcnMgdGhpcyBpcyB0aGUgdHlwZSB0byBiZSBldmFsdWF0ZWQKLSAgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiB0aGUgdHlwZSBpcyBub3Qgc3VwcG9ydGVkCi0gICovIAotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNVblN1cHBvcnRlZFR5cGUoSmF2YUhlbHBlcnMgamF2YUhlbHBlcnMpCi0gIHsKLSAgICAvL3dlIGFsc28gZG9udCBzdXBwb3J0IGFycmF5cwotCS8vamF2YS5sYW5nLk9iamVjdHMgYXJlIG9rIGZvciByZXR1cm4gdHlwZXMgYnV0IG5vdCBmb3IgaW5wdXQgdHlwZQotICAgIGlmIChqYXZhSGVscGVycy5pc0FycmF5KCl8fAotICAgIAkJamF2YUhlbHBlcnMuZ2V0SmF2YU5hbWUoKS5lcXVhbHMoTUFQX05BTUUpfHwKLSAgICAJCWphdmFIZWxwZXJzLmdldEphdmFOYW1lKCkuZXF1YWxzKFZFQ1RPUl9OQU1FKXx8Ci0gICAgCQlqYXZhSGVscGVycy5nZXRKYXZhTmFtZSgpLmVxdWFscyhEQVRBX0hBTkRMRVIpfHwKLSAgICAJCWphdmFIZWxwZXJzLmdldEphdmFOYW1lKCkuZXF1YWxzKE9CSkVDVF9OQU1FKSB8fAotICAgIAkJamF2YUhlbHBlcnMuZ2V0SmF2YU5hbWUoKS5lcXVhbHMoImphdmEubGFuZy5jbGFzcyIpCSkgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgSEFTSFRBQkxFX05BTUUgPSAiamF2YS51dGlsLkhhc2h0YWJsZSI7Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE1BUF9OQU1FID0gImphdmEudXRpbC5NYXAiOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBWRUNUT1JfTkFNRSA9ICJqYXZhLnV0aWwuVmVjdG9yIjsKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgQVJSQVlfTkFNRSA9IEFycmF5RWxlbWVudC5BUlJBWV9OQU1FOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBQUklNSVRJVkVfQVJSQVlfTkFNRSA9ICJwcmltaXRpdmVhcnJheSI7Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIERBVEFfSEFORExFUiA9ICJqYXZheC5hY3RpdmF0aW9uLkRhdGFIYW5kbGVyIjsKLQotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNSZWNvZ25pemVkUmV0dXJuVHlwZShKYXZhSGVscGVycyBqYXZhSGVscGVycykKLSAgewotICAgIC8vYXJyYXlzIAotICAgIC8vSGFzaHRhYmxlCi0gICAgLy9WZWN0b3JzCi0JLy9qYXZhLmxhbmcuT2JqZWN0cyBhcmUgb2sgZm9yIHJldHVybiB0eXBlcwotICAgIGlmIChqYXZhSGVscGVycy5pc0FycmF5KCkpIHJldHVybiB0cnVlOwotICAgIGVsc2UgaWYgKGphdmFIZWxwZXJzLmdldEphdmFOYW1lKCkuZXF1YWxzKEhBU0hUQUJMRV9OQU1FKSlyZXR1cm4gdHJ1ZTsKLSAgICBlbHNlIGlmIChqYXZhSGVscGVycy5nZXRKYXZhTmFtZSgpLmVxdWFscyhWRUNUT1JfTkFNRSkpcmV0dXJuIHRydWU7Ci0gICAgZWxzZSBpZiAoamF2YUhlbHBlcnMuZ2V0SmF2YU5hbWUoKS5lcXVhbHMoTUFQX05BTUUpKXJldHVybiB0cnVlOwotICAgIGVsc2UgaWYgKGphdmFIZWxwZXJzLmdldEphdmFOYW1lKCkuZXF1YWxzKE9CSkVDVF9OQU1FKSlyZXR1cm4gdHJ1ZTsKLSAgICBlbHNlIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1JlY29nbml6ZWRSZXR1cm5UeXBlKFN0cmluZyB0eXBlKQotICB7Ci0gICAgLy9hcnJheXMgCi0gICAgLy9IYXNodGFibGUKLSAgICAvL1ZlY3RvcnMKLQkvL2phdmEubGFuZy5PYmplY3RzIGFyZSBvayBmb3IgcmV0dXJuIHR5cGVzCi0gICAgaWYgKHR5cGUuc3RhcnRzV2l0aChBUlJBWV9OQU1FKSkgcmV0dXJuIHRydWU7Ci0gICAgZWxzZSBpZiAodHlwZS5lcXVhbHMoSEFTSFRBQkxFX05BTUUpKXJldHVybiB0cnVlOwotICAgIGVsc2UgaWYgKHR5cGUuZXF1YWxzKFZFQ1RPUl9OQU1FKSlyZXR1cm4gdHJ1ZTsKLSAgICBlbHNlIGlmICh0eXBlLmVxdWFscyhNQVBfTkFNRSkpcmV0dXJuIHRydWU7Ci0gICAgZWxzZSBpZiAodHlwZS5lcXVhbHMoT0JKRUNUX05BTUUpKSByZXR1cm4gdHJ1ZTsKLSAgICBlbHNlIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1N0YXRlTGVzc0JlYW4oU3RyaW5nIHR5cGUpCi0gIHsKLSAgICBpZih0eXBlLnN0YXJ0c1dpdGgoU1RBVEVMRVNTX0JFQU4pKSByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotCi0gIC8qKgotICAqIENyZWF0ZXMgYSB0eXBlIGJhc2VkIG9uIHRoZSBKYXZhSGVscGVyIHRoZW4gc2V0cyB0aGlzIHR5cGUgaW4gdGhlIGVsZW1lbnQKLSAgKiBAcGFyYW1zIEphdmFIZWxwZXJzIHRoaXMgaG9sZHMgdGhlIHR5cGUKLSAgKiBAcGFyYW0gVHlwZUVsZW1lbnQgVGhlIGVsZW1lbnQgd2hpY2ggd2lsbCBob2xkIHRoZSB0eXBlIGNyZWF0ZWQKLSAgKiBAcGFyYW0gU3RyaW5nIFVuaXF1ZW5hbWUgdG8gYmUgdXNlZCB3aGVuIG5hbWluZyB0ZW1wIHZhcmlhYmxlcwotICAqLwotIAotICBwdWJsaWMgc3RhdGljIERhdGFUeXBlIGNyZWF0ZVR5cGUoU3RyaW5nIHR5cGUsIFN0cmluZyBVbmlxdWVOYW1lKQotICB7Ci0gICAgLy90aGlzIGd1eSBtaWdodCBiZSBib3RoIHN0YXRlbGVzcyBhbmQgb25lIG9mIHRoZSBiZWxvdyBlbGVtZW50cwotICAgIC8vd2Ugd291bGQgbGlrZSB0byBiZSBhcyBzcGVjaWZpYyBhcyB3ZSBjYW4sIHN0YXRlbGVzcyBpcyB0aGUgd29yc3QgY2FzZSAKLSAgICBib29sZWFuIHN0YXRlbGVzcyA9IGZhbHNlOyAgCi0gICAgaWYodHlwZS5zdGFydHNXaXRoKFNUQVRFTEVTU19CRUFOKSkgewotICAgICAgc3RhdGVsZXNzID0gdHJ1ZTsKLSAgICAgIHR5cGUgPSB0eXBlLnN1YnN0cmluZygyOSk7IAotICAgIH0KLSAgIAotICAgIERhdGFUeXBlIGRhdGF0eXBlID0gbnVsbDsKLSAgICBpZiAgICAgICh0eXBlLmVxdWFscyhQUklNX0JPT0xFQU5fTkFNRSkpIGRhdGF0eXBlID0gbmV3IFByaW1pdGl2ZUJvb2xlYW5UeXBlKCk7Ci0gICAgZWxzZSBpZiAodHlwZS5lcXVhbHMoUFJJTV9CWVRFX05BTUUpKSAgICAgZGF0YXR5cGUgPSBuZXcgUHJpbWl0aXZlQnl0ZVR5cGUoKTsKLSAgICBlbHNlIGlmICh0eXBlLmVxdWFscyhQUklNX0RPVUJMRV9OQU1FKSkgIGRhdGF0eXBlID0gbmV3IFByaW1pdGl2ZURvdWJsZVR5cGUoKTsKLSAgICBlbHNlIGlmICh0eXBlLmVxdWFscyhQUklNX0ZMT0FUX05BTUUpKSAgIGRhdGF0eXBlID0gbmV3IFByaW1pdGl2ZUZsb2F0VHlwZSgpOwotICAgIGVsc2UgaWYgKHR5cGUuZXF1YWxzKFBSSU1fTE9OR19OQU1FKSkgICAgZGF0YXR5cGUgPSBuZXcgUHJpbWl0aXZlTG9uZ1R5cGUoKTsKLSAgICBlbHNlIGlmICh0eXBlLmVxdWFscyhQUklNX0lOVEVHRVJfTkFNRSkpIGRhdGF0eXBlID0gbmV3IFByaW1pdGl2ZUludFR5cGUoKTsKLSAgICBlbHNlIGlmICh0eXBlLmVxdWFscyhQUklNX0NIQVJfTkFNRSkpICAgIGRhdGF0eXBlID0gbmV3IFByaW1pdGl2ZUNoYXJUeXBlKCk7Ci0gICAgZWxzZSBpZiAodHlwZS5lcXVhbHMoUFJJTV9TSE9SVF9OQU1FKSkgICBkYXRhdHlwZSA9IG5ldyBQcmltaXRpdmVTaG9ydFR5cGUoKTsKLSAgICAKLQotICAgIC8vc2VlIGlmIHRoaXMgY3JpdHRlciBpcyBhIGphdmF0eXBlCi0gICAgZWxzZSBpZiAodHlwZS5lcXVhbHMoQk9PTEVBTl9OQU1FKSAgICAgfHwKLSAgICAgICAgICAgIHR5cGUuZXF1YWxzKEJZVEVfTkFNRSkgICAgICAgIHx8Ci0gICAgICAgICAgICB0eXBlLmVxdWFscyhET1VCTEVfTkFNRSkgICAgICB8fAotICAgICAgICAgICAgdHlwZS5lcXVhbHMoRkxPQVRfTkFNRSkgICAgICAgfHwKLSAgICAgICAgICAgIHR5cGUuZXF1YWxzKElOVEVHRVJfTkFNRSkgICAgIHx8Ci0gICAgICAgICAgICB0eXBlLmVxdWFscyhMT05HX05BTUUpICAgICAgICB8fAotICAgICAgICAgICAgdHlwZS5lcXVhbHMoQ0hBUkFDVEVSX05BTUUpICB8fAotICAgICAgICAgICAgdHlwZS5lcXVhbHMoU0hPUlRfTkFNRSkpICAgICAgICBkYXRhdHlwZSA9IChEYXRhVHlwZSlqYXZhVHlwZXMuZ2V0KHR5cGUpOyAgIAotCi0gICAgLy9zZWUgaWYgaXRzIGEgY2FzZSB3ZSBoYW5kbGUKLSAgICBlbHNlIGlmICh0eXBlLmVxdWFscyhTVFJJTkdfTkFNRSkpICAgICAgICAgICAgICAgZGF0YXR5cGUgPSBuZXcgU3RyaW5nVHlwZSgpOyAKLSAgICBlbHNlIGlmICh0eXBlLmVxdWFscyhWT0lEX05BTUUpKSAgICAgICAgICAgICAgICAgZGF0YXR5cGUgPSBuZXcgVm9pZFR5cGUoKTsKLSAgICBlbHNlIGlmICh0eXBlLmVxdWFscyhET01fRUxFTUVOVF9OQU1FKSkgICAgICAgICAgZGF0YXR5cGUgPSBuZXcgRG9tRWxlbWVudFR5cGUoKTsKLSAgICBlbHNlIGlmICh0eXBlLmVxdWFscyhTT0FQX0VMRU1FTlRfTkFNRSkpICAgICAgICAgZGF0YXR5cGUgPSBuZXcgU09BUEVsZW1lbnRUeXBlKCk7ICAKLSAgICBlbHNlIGlmICh0eXBlLmVxdWFscyhCSUdfREVDSU1BTF9OQU1FKSkgICAgICAgICAgZGF0YXR5cGUgPSBuZXcgQmlnRGVjaW1hbFR5cGUoKTsKLSAgICBlbHNlIGlmICh0eXBlLmVxdWFscyhCSUdfSU5URUdFUl9OQU1FKSkgICAgICAgICAgZGF0YXR5cGUgPSBuZXcgQmlnSW50ZWdlclR5cGUoKTsKLSAgICBlbHNlIGlmICh0eXBlLmVxdWFscyhEQVRFX05BTUUpKSAgICAgICAgICAgICAgICAgIGRhdGF0eXBlID0gbmV3IERhdGVUeXBlKCk7Ci0gICAgZWxzZSBpZiAodHlwZS5lcXVhbHMoVVJMX05BTUUpKSAgICAgICAgICAgICAgICAgICBkYXRhdHlwZSA9IG5ldyBVUkxUeXBlKCk7IAotICAgIGVsc2UgaWYgKHR5cGUuZXF1YWxzKEdSRUdPUklBTl9DQUxFTkRBUl9OQU1FKSkgIGRhdGF0eXBlID0gbmV3IEdyZWdvcmlhbkNhbGVuZGFyVHlwZSgpOwotICAgIGVsc2UgaWYgKHR5cGUuZXF1YWxzKENBTEVOREFSX05BTUUpKSAgZGF0YXR5cGUgPSBuZXcgR3JlZ29yaWFuQ2FsZW5kYXJUeXBlKCk7Ci0KLSAgICAvL2l0IGNvdWxkIGJlIGEgcmV0dXJuIHR5cGUgd2Ugc3VwcG9ydAotICAgIGVsc2UgaWYgKHR5cGUuZXF1YWxzKEhBU0hUQUJMRV9OQU1FKSkgICAgICAgICAgICBkYXRhdHlwZSA9IG5ldyBIYXNodGFibGVUeXBlKCk7Ci0gICAgZWxzZSBpZiAodHlwZS5lcXVhbHMoVkVDVE9SX05BTUUpKSAgICAgICAgICAgICAgIGRhdGF0eXBlID0gbmV3IFZlY3RvclR5cGUoKTsKLSAgICBlbHNlIGlmICh0eXBlLmVxdWFscyhNQVBfTkFNRSkpICAgICAgICAgICAgICAgICAgZGF0YXR5cGUgPSBuZXcgTWFwVHlwZSgpOwotICAgIGVsc2UgaWYgKHR5cGUuZXF1YWxzKE9CSkVDVF9OQU1FKSkJCQkJZGF0YXR5cGUgPSBuZXcgT2JqZWN0VHlwZSgpOwotCi0gICAgLy8gbmVlZCB0byBzZWUgaWYgaXQgaXMgYW4gb2JqZWN0IGFycmF5Ci0gICAgLy9vciBhIHByaW1pdGl2ZQotICAgIGVsc2UgaWYgKHR5cGUuc3RhcnRzV2l0aChBUlJBWV9OQU1FKSl7ICAgICAgICAgICAgICAKLSAgICAJU3RyaW5nIG5hbWUgPSB0eXBlLnN1YnN0cmluZygyMSk7IAotICAgICAgICBpZihuYW1lLnN0YXJ0c1dpdGgoUFJJTV9CT09MRUFOX05BTUUpIHx8Ci0gICAgICAgICAgbmFtZS5zdGFydHNXaXRoKFBSSU1fQllURV9OQU1FKSAgICAgfHwKLSAgICAgICAgICBuYW1lLnN0YXJ0c1dpdGgoUFJJTV9ET1VCTEVfTkFNRSkgIHx8Ci0gICAgICAgICAgbmFtZS5zdGFydHNXaXRoKFBSSU1fRkxPQVRfTkFNRSkgICAgfHwKLSAgICAgICAgICBuYW1lLnN0YXJ0c1dpdGgoUFJJTV9MT05HX05BTUUpICAgIHx8Ci0gICAgICAgICAgbmFtZS5zdGFydHNXaXRoKFBSSU1fSU5URUdFUl9OQU1FKSAgfHwKLSAgICAgICAgICBuYW1lLnN0YXJ0c1dpdGgoUFJJTV9DSEFSX05BTUUpICAgIHx8Ci0gICAgICAgICAgbmFtZS5zdGFydHNXaXRoKFBSSU1fU0hPUlRfTkFNRSkpCi0gICAgICAgICAgICBkYXRhdHlwZSA9IG5ldyBQcmltaXRpdmVBcnJheVR5cGUobmFtZSk7ICAKLSAgICAgICAgZWxzZQotICAgICAgICAJZGF0YXR5cGUgPSBuZXcgQXJyYXlUeXBlKG5hbWUpOwotCi0gICAgfQotICAgIGVsc2UgaWYgKHN0YXRlbGVzcyl7Ci0gICAgICAgIGRhdGF0eXBlID0gbmV3IFN0YXRlTGVzc0JlYW5UeXBlKHR5cGUpOwotCi0gICAgfQotCi0KLSAgICBkYXRhdHlwZS5zZXRVbmlxdWVOYW1lKFVuaXF1ZU5hbWUpOwotICAgIHJldHVybiBkYXRhdHlwZTsKLSAgICAgCi0gIH0KLSAgCi0gIAotCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9VUkxUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC9iZWFubW9kZWwvVVJMVHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzBmYjI4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9VUkxUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLS8qKgotKiBvYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgdHlwZQotKiAKLSovCi1wdWJsaWMgY2xhc3MgVVJMVHlwZSBleHRlbmRzIFNpbXBsZVR5cGUgCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgCi0gIC8qKgotICAqQ29uc3RydWN0b3IKLSAgKgotICAqLwotICBwdWJsaWMgVVJMVHlwZSgpCi0gIHsKLSAgICBzdXBlcihUeXBlRmFjdG9yeS5VUkxfTkFNRSk7Ci0gIH0KLSAKLSAgLyoqCi0gICogU3RyaW5nVG9UeXBlIGdldHMgdGhlIHN0cmluZyB0YWtlbiBieSB0aGUgCi0gICogdXNlciBpbnRvIHByb3h5IGZvcm0KLSAgKiBAcmV0dXJuIFN0cmluZyBjb252ZXJ0IHRoZSBzdHJpbmcgdG8gdHlwZSAuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgU3RyaW5nVG9UeXBlKFN0cmluZyBuYW1lKQotICB7Ci0gICAgU3RyaW5nIGNvbnZlcnNpb24gPSAibmV3IGphdmEubmV0LlVSTCgiICsgbmFtZSArICIpOyI7Ci0gICAgcmV0dXJuIGNvbnZlcnNpb247ICAgIAotICB9Ci0KLSAgLyoqCi0gICogVGhlIHN0cmluZ0NvbnZlcnNpb24gZnVuY3Rpb24gbmFpbHMgb3V0IHNwZWNpZmljIGNvbnZlcnNpb24gbWV0aG9kcyB1c2VkIGFtb25nIHNpbXBsZSB0eXBlcyAKLSAgKiBUaGlzIG1ldGhvZCBpcyB0byBiZSBpbXBsZW1lbnRlZCBieSBTaW1wbGVUeXBlIHN1YmNsYXNzZXMKLSAgKiBAcGFyYW0gU3RyaW5nIHRoZSBuYW1lIG9mIHN0cmluZyBhZnRlciB0aGUgcmVxdWVzdCBjYWxsCi0gICogQHJldHVybiBTdHJpbmcgdGhlIGFjdHVhbCBjb252ZXJzaW9uIHN0cmluZyBjb250YWluaW5nIHRoZSBuYW1lLgotICAqLwotICBwdWJsaWMgU3RyaW5nIFR5cGVUb1N0cmluZyhTdHJpbmcgbmFtZSkKLSAgewotICAgIHJldHVybiBuYW1lICsgIi50b1N0cmluZygpIjsKLSAgfQotIAotIH0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1ZlY3RvclR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9WZWN0b3JUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhMDcxOGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1ZlY3RvclR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbDsKLQotCi0vKioKLSogb2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIHJlY29nbml6ZWQgcmV0dXJuIHR5cGUKLSogCi0qLwotcHVibGljIGNsYXNzIFZlY3RvclR5cGUgZXh0ZW5kcyBSZWNvZ25pemVkUmV0dXJuVHlwZQotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIAotICAvKioKLSAgKkNvbnN0cnVjdG9yCi0gICoKLSAgKi8KLSAgcHVibGljIFZlY3RvclR5cGUoKQotICB7Ci0gICAgc3VwZXIoVHlwZUZhY3RvcnkuVkVDVE9SX05BTUUpOwotICB9Ci0KLSAgCi19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL2JlYW5tb2RlbC9Wb2lkVHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1ZvaWRUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmZGU5MWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvYmVhbm1vZGVsL1ZvaWRUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWw7Ci0KLQotLyoqCi0qIG9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSB0eXBlCi0qIAotKi8KLXB1YmxpYyBjbGFzcyBWb2lkVHlwZSBleHRlbmRzIFNpbXBsZVR5cGUKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAKLSAgLyoqCi0gICpDb25zdHJ1Y3RvcgotICAqCi0gICovCi0gIHB1YmxpYyBWb2lkVHlwZSgpCi0gIHsKLSAgICBzdXBlcigidm9pZCIpOwotICB9Ci0KLSAgIC8qKgotICAqIGZvciBhIHZvaWQgdGhlcmUgaXMgbm8gbmVlZCB0byByZXR1cm4gCi0gICogQHJldHVybiBTdHJpbmcgY29udmVydCB0aGUgc3RyaW5nIHRvIHR5cGUgLgotICAqLwotICBwdWJsaWMgU3RyaW5nIFN0cmluZ1RvVHlwZShTdHJpbmcgbmFtZSkKLSAgewotICAgIHJldHVybiAiIjsKLSAgfQotICAKLSAgLyoqCi0gICogVGhlIHN0cmluZ0NvbnZlcnNpb24gZnVuY3Rpb24gbmFpbHMgb3V0IHNwZWNpZmljIGNvbnZlcnNpb24gbWV0aG9kcyB1c2VkIGFtb25nIHNpbXBsZSB0eXBlcyAKLSAgKiBUaGlzIG1ldGhvZCBpcyB0byBiZSBpbXBsZW1lbnRlZCBieSBTaW1wbGVUeXBlIHN1YmNsYXNzZXMKLSAgKiBAcGFyYW0gU3RyaW5nIHRoZSBuYW1lIG9mIHN0cmluZyBhZnRlciB0aGUgcmVxdWVzdCBjYWxsCi0gICogQHJldHVybiBTdHJpbmcgdGhlIGFjdHVhbCBjb252ZXJzaW9uIHN0cmluZyBjb250YWluaW5nIHRoZSBuYW1lLgotICAqLwotICBwdWJsaWMgU3RyaW5nIFR5cGVUb1N0cmluZyhTdHJpbmcgbmFtZSkKLSAgewotICAgIHJldHVybiAiU3RyaW5nLnZhbHVlT2YoIiArIG5hbWUgKyAiKSI7Ci0gIH0KLSAKLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvdmFsaWRhdGUvVmFsaWRhdGlvbk1hbmFnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL3ZhbGlkYXRlL1ZhbGlkYXRpb25NYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjMDEyOGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvdmFsaWRhdGUvVmFsaWRhdGlvbk1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwudmFsaWRhdGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci0KLS8qKgotICAqIFRoaXMgY2xhc3MgbWFuYWdlcyB0aGUgdmFsaWRhdGlvbiBzdGF0ZSBvZiBwcm9qZWN0cyB0aGF0IHNvbWUgdGFza3MgbWF5IHdhbnQKLSAgKiB0byBkaXNhYmxlLiAgVGhlIG1hbmFnZXIgY2FuIHRoZW4gYmUgdXNlZCB0byByZXN0b3JlIHRoZSB2YWxpZGF0aW9uIHN0YXRlLgotKiovCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGlvbk1hbmFnZXIKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAvKioKLSAgICAqIFRoaXMgc2V0IGNvbnRhaW5zIGEgc2V0IG9mIElQcm9qZWN0cyB0aGF0IG5lZWQgdG8gYmUgdmFsaWRhdGVkLgotICAqKi8KLSAgcHJpdmF0ZSBIYXNoU2V0IHByb2plY3RzID0gbnVsbDsgICAgICAgICAgICAgIAotCi0gIC8qKgotICAgICogVGhpcyBvYmplY3QgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIGoyZWUgdmFsaWRhdG9yLgotICAqKi8KLSAgLy9wZ20gcHJpdmF0ZSBWYWxpZGF0b3JNYW5hZ2VyIGoyZWVNYW5hZ2VyID0gbnVsbDsKLQotICAvKioKLSAgICAqIFRoaXMgYm9vbGVhbiBjb250YWlucyB0aGUgYXV0byBidWlsZCBzZXR0aW5nIHVuZGVyIHByZWZlcnJlbmNlCi0gICoqLwotICBwcml2YXRlIGJvb2xlYW4gaXNBdXRvQnVpbGRfOwotICBwcml2YXRlIGJvb2xlYW4gYXV0b0J1aWxkRGlzYWJsZWRfOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gIHB1YmxpYyBWYWxpZGF0aW9uTWFuYWdlcigpCi0gIHsKLSAgICBwcm9qZWN0cyAgICA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgLy9wZ20gajJlZU1hbmFnZXIgPSBWYWxpZGF0b3JNYW5hZ2VyLmdldE1hbmFnZXIoKTsKLSAgICBzZXRBdXRvQnVpbGRQcmVmZXJlbmNlKCk7Ci0gICAgYXV0b0J1aWxkRGlzYWJsZWRfID0gZmFsc2U7Ci0gIH0KLSAgCi0gIC8qKgotICAgICogRGlzYWJsZXMgdGhlIHZhbGlkYXRpb24gZm9yIGEgcHJvamVjdCBpZiByZXF1aXJlZC4KLSAgKiovCi0gIHB1YmxpYyB2b2lkIGRpc2FibGVWYWxpZGF0aW9uRm9yUHJvamVjdCggSVByb2plY3QgcHJvamVjdCApCi0gIHsgICAgCi0gICAgLy8gV2UgbmVlZCB0byByZW1lbWJlciB0aGF0IHRoaXMgcHJvamVjdCBuZWVkcyBoYXZlIHZhbGlkYXRpb24gdHVybmVkIGJhY2sgb24uCi0gICAgcHJvamVjdHMuYWRkKCBwcm9qZWN0ICk7Ci0gICAgCi0gICAgLy9wZ20gajJlZU1hbmFnZXIuc3VzcGVuZEFsbFZhbGlkYXRpb24oIHRydWUgKTsKLSAgfQotCi0gIC8qKgotICAgICogUmVzdG9yZXMgdGhlIHZhbGlkYXRpb24gc3RhdGUgZm9yIGFsbCBuZWVkZWQgcHJvamVjdHMuCi0gICoqLwotICBwdWJsaWMgdm9pZCByZXN0b3JlVmFsaWRhdGlvbkZvclByb2plY3RzKCBib29sZWFuIHJ1blZhbGlkYXRpb24gKQotICB7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBtb2RpZnlBdXRvQnVpbGQoYm9vbGVhbiBpc0F1dG9CdWlsZCkgewotICAgIHRyeSB7Ci0gICAgICBJV29ya3NwYWNlIHdvcmtzcGFjZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKTsKLSAgICAgIElXb3Jrc3BhY2VEZXNjcmlwdGlvbiB3b3Jrc3BhY2VEZXNjID0gd29ya3NwYWNlLmdldERlc2NyaXB0aW9uKCk7Ci0gICAgICB3b3Jrc3BhY2VEZXNjLnNldEF1dG9CdWlsZGluZyhpc0F1dG9CdWlsZCk7Ci0gICAgICB3b3Jrc3BhY2Uuc2V0RGVzY3JpcHRpb24od29ya3NwYWNlRGVzYyk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkge30KLSAgfQotCi0gIHB1YmxpYyB2b2lkIGRpc2FibGVBdXRvQnVpbGQoKSB7Ci0gICAgaWYgKCFhdXRvQnVpbGREaXNhYmxlZF8pIHsKLSAgICAgIHNldEF1dG9CdWlsZFByZWZlcmVuY2UoKTsKLSAgICAgIG1vZGlmeUF1dG9CdWlsZChmYWxzZSk7Ci0gICAgICBhdXRvQnVpbGREaXNhYmxlZF8gPSB0cnVlOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlc3RvcmVBdXRvQnVpbGQoKSB7Ci0gICAgaWYgKGF1dG9CdWlsZERpc2FibGVkXykgewotICAgICAgbW9kaWZ5QXV0b0J1aWxkKGdldEF1dG9CdWlsZFByZWZlcmVuY2UoKSk7Ci0gICAgICBhdXRvQnVpbGREaXNhYmxlZF8gPSBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBzZXRBdXRvQnVpbGRQcmVmZXJlbmNlKCkgewotICAgIGlzQXV0b0J1aWxkXyA9IGdldFdvcmtzcGFjZUF1dG9CdWlsZFByZWZlcmVuY2UoKTsKLSAgICByZXR1cm4gaXNBdXRvQnVpbGRfOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZ2V0QXV0b0J1aWxkUHJlZmVyZW5jZSgpIHsKLSAgICByZXR1cm4gaXNBdXRvQnVpbGRfOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZ2V0V29ya3NwYWNlQXV0b0J1aWxkUHJlZmVyZW5jZSgpIHsKLSAgICBJV29ya3NwYWNlRGVzY3JpcHRpb24gd29ya3NwYWNlRGVzYyA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXREZXNjcmlwdGlvbigpOwotICAgIHJldHVybiB3b3Jrc3BhY2VEZXNjLmlzQXV0b0J1aWxkaW5nKCk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvd3NkbG1vZGVsL0JpbmRpbmdFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC93c2RsbW9kZWwvQmluZGluZ0VsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2FiMWEyYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC93c2RsbW9kZWwvQmluZGluZ0VsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwud3NkbG1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuQmFzaWNFbGVtZW50OwotCi0KLXB1YmxpYyBjbGFzcyBCaW5kaW5nRWxlbWVudCBleHRlbmRzIEJhc2ljRWxlbWVudAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgUkVMX1BPUlQgPSAicG9ydCI7Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFJFTF9PUEVSQVRJT05TID0gIm9wZXJhdGlvbnMiOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBSRUxfUE9SVF9UWVBFID0gInBvcnR0eXBlIjsKLSAgCi0gIHB1YmxpYyBCaW5kaW5nRWxlbWVudCAoUG9ydEVsZW1lbnQgcG9ydEVsZW1lbnQsU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihuYW1lLHBvcnRFbGVtZW50LFJFTF9QT1JULFBvcnRFbGVtZW50LlJFTF9CSU5ESU5HKTsKLSAgfQotCi0gIHB1YmxpYyBFbnVtZXJhdGlvbiBnZXRQb3J0KCkKLSAgewotICAgIHJldHVybiBnZXRFbGVtZW50cyhSRUxfUE9SVCk7Ci0gIH0KLQotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0UG9ydFR5cGUoKQotICB7Ci0gICAgcmV0dXJuIGdldEVsZW1lbnRzKFJFTF9QT1JUX1RZUEUpOwotICB9Ci0KLSAgcHVibGljIEVudW1lcmF0aW9uIGdldE9wZXJhdGlvbnMoKQotICB7Ci0gICAgcmV0dXJuIGdldEVsZW1lbnRzKFJFTF9PUEVSQVRJT05TKTsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0TnVtYmVyT2ZPcGVyYXRpb25zKCkKLSAgewotICAgIHJldHVybiBnZXROdW1iZXJPZkVsZW1lbnRzKFJFTF9PUEVSQVRJT05TKTsKLSAgfQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC93c2RsbW9kZWwvRGVmaW5pdGlvbkVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL3dzZGxtb2RlbC9EZWZpbml0aW9uRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDU0YzIyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL3dzZGxtb2RlbC9EZWZpbml0aW9uRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC53c2RsbW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5CYXNpY0VsZW1lbnQ7Ci0KLQotcHVibGljIGNsYXNzIERlZmluaXRpb25FbGVtZW50IGV4dGVuZHMgQmFzaWNFbGVtZW50Ci17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBSRUxfU0VSVklDRVMgPSAic2VydmljZXMiOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBSRUxfV1NETCA9ICJ3c2RsIjsKLSAgCi0gIHB1YmxpYyBEZWZpbml0aW9uRWxlbWVudCAoV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQsU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihuYW1lLHdzZGxFbGVtZW50LFJFTF9XU0RMLFdTRExFbGVtZW50LlJFTF9ERUZJTklUSU9OUyk7Ci0gIH0KLQotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0V1NETCgpCi0gIHsKLSAgICByZXR1cm4gZ2V0RWxlbWVudHMoUkVMX1dTREwpOwotICB9Ci0KLSAgcHVibGljIEVudW1lcmF0aW9uIGdldFNlcnZpY2VzKCkKLSAgewotICAgIHJldHVybiBnZXRFbGVtZW50cyhSRUxfU0VSVklDRVMpOwotICB9Ci0KLSAgcHVibGljIGludCBnZXROdW1iZXJPZlNlcnZpY2VzKCkKLSAgewotICAgIHJldHVybiBnZXROdW1iZXJPZkVsZW1lbnRzKFJFTF9TRVJWSUNFUyk7Ci0gIH0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvd3NkbG1vZGVsL01lc3NhZ2VFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC93c2RsbW9kZWwvTWVzc2FnZUVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGJlMjc4MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC93c2RsbW9kZWwvTWVzc2FnZUVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwud3NkbG1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuQmFzaWNFbGVtZW50OwotCi0KLXB1YmxpYyBjbGFzcyBNZXNzYWdlRWxlbWVudCBleHRlbmRzIEJhc2ljRWxlbWVudAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgUkVMX09QRVJBVElPTiA9ICJvcGVyYXRpb24iOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBSRUxfUEFSVFMgPSAicGFydHMiOwotICAKLSAgcHVibGljIE1lc3NhZ2VFbGVtZW50IChPcGVyYXRpb25FbGVtZW50IG9wZXJhdGlvbkVsZW1lbnQsU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihuYW1lLG9wZXJhdGlvbkVsZW1lbnQsUkVMX09QRVJBVElPTixPcGVyYXRpb25FbGVtZW50LlJFTF9NRVNTQUdFUyk7Ci0gIH0KLQotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0T3BlcmF0aW9uKCkKLSAgewotICAgIHJldHVybiBnZXRFbGVtZW50cyhSRUxfT1BFUkFUSU9OKTsKLSAgfQotCi0gIHB1YmxpYyBFbnVtZXJhdGlvbiBnZXRQYXJ0cygpCi0gIHsKLSAgICByZXR1cm4gZ2V0RWxlbWVudHMoUkVMX1BBUlRTKTsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0TnVtYmVyT2ZQYXJ0cygpCi0gIHsKLSAgICByZXR1cm4gZ2V0TnVtYmVyT2ZFbGVtZW50cyhSRUxfUEFSVFMpOwotICB9Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL3dzZGxtb2RlbC9PcGVyYXRpb25FbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC93c2RsbW9kZWwvT3BlcmF0aW9uRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDg5YzJlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL3dzZGxtb2RlbC9PcGVyYXRpb25FbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLndzZGxtb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkJhc2ljRWxlbWVudDsKLQotCi1wdWJsaWMgY2xhc3MgT3BlcmF0aW9uRWxlbWVudCBleHRlbmRzIEJhc2ljRWxlbWVudAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgUkVMX0JJTkRJTkcgPSAiYmluZGluZyI7Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFJFTF9NRVNTQUdFUyA9ICJtZXNzYWdlcyI7Ci0KLSAgcHVibGljIE9wZXJhdGlvbkVsZW1lbnQgKEJpbmRpbmdFbGVtZW50IGJpbmRpbmdFbGVtZW50LFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIobmFtZSxiaW5kaW5nRWxlbWVudCxSRUxfQklORElORyxCaW5kaW5nRWxlbWVudC5SRUxfT1BFUkFUSU9OUyk7Ci0gIH0KLQotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0QmluZGluZygpCi0gIHsKLSAgICByZXR1cm4gZ2V0RWxlbWVudHMoUkVMX0JJTkRJTkcpOwotICB9Ci0KLSAgcHVibGljIEVudW1lcmF0aW9uIGdldE1lc3NhZ2VzKCkKLSAgewotICAgIHJldHVybiBnZXRFbGVtZW50cyhSRUxfTUVTU0FHRVMpOwotICB9Ci0KLSAgcHVibGljIGludCBnZXROdW1iZXJPZk1lc3NhZ2VzKCkKLSAgewotICAgIHJldHVybiBnZXROdW1iZXJPZkVsZW1lbnRzKFJFTF9NRVNTQUdFUyk7Ci0gIH0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvd3NkbG1vZGVsL1BhcnRFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC93c2RsbW9kZWwvUGFydEVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI0MDBkYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC93c2RsbW9kZWwvUGFydEVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwud3NkbG1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuQmFzaWNFbGVtZW50OwotCi0KLXB1YmxpYyBjbGFzcyBQYXJ0RWxlbWVudCBleHRlbmRzIEJhc2ljRWxlbWVudAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgUkVMX01FU1NBR0UgPSAibWVzc2FnZSI7Ci0gICAgCi0gIHB1YmxpYyBQYXJ0RWxlbWVudCAoTWVzc2FnZUVsZW1lbnQgbWVzc2FnZUVsZW1lbnQsU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihuYW1lLG1lc3NhZ2VFbGVtZW50LFJFTF9NRVNTQUdFLE1lc3NhZ2VFbGVtZW50LlJFTF9QQVJUUyk7Ci0gIH0KLQotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0TWVzc2FnZSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0RWxlbWVudHMoUkVMX01FU1NBR0UpOwotICB9Ci0KLSAgCi19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL3dzZGxtb2RlbC9Qb3J0RWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvd3NkbG1vZGVsL1BvcnRFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2YmRhOTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvd3NkbG1vZGVsL1BvcnRFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLndzZGxtb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkJhc2ljRWxlbWVudDsKLQotCi1wdWJsaWMgY2xhc3MgUG9ydEVsZW1lbnQgZXh0ZW5kcyBCYXNpY0VsZW1lbnQKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFJFTF9CSU5ESU5HID0gImJpbmRpbmciOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBSRUxfU0VSVklDRSA9ICJzZXJ2aWNlIjsKLSAgCi0gIHB1YmxpYyBQb3J0RWxlbWVudCAoU2VydmljZUVsZW1lbnQgc2VydmljZUVsZW1lbnQsU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihuYW1lLHNlcnZpY2VFbGVtZW50LFJFTF9TRVJWSUNFLFNlcnZpY2VFbGVtZW50LlJFTF9QT1JUUyk7Ci0gIH0KLQotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0U2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0RWxlbWVudHMoUkVMX1NFUlZJQ0UpOwotICB9Ci0KLSAgcHVibGljIEVudW1lcmF0aW9uIGdldEJpbmRpbmcoKQotICB7Ci0gICAgcmV0dXJuIGdldEVsZW1lbnRzKFJFTF9CSU5ESU5HKTsKLSAgfQotIAotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC93c2RsbW9kZWwvUG9ydFR5cGVFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC93c2RsbW9kZWwvUG9ydFR5cGVFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllZDE1NjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvd3NkbG1vZGVsL1BvcnRUeXBlRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC53c2RsbW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5CYXNpY0VsZW1lbnQ7Ci0KLQotcHVibGljIGNsYXNzIFBvcnRUeXBlRWxlbWVudCBleHRlbmRzIEJhc2ljRWxlbWVudAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgUkVMX0JJTkRJTkcgPSAiYmluZGluZyI7Ci0gIAotICBwdWJsaWMgUG9ydFR5cGVFbGVtZW50IChCaW5kaW5nRWxlbWVudCBiaW5kaW5nRWxlbWVudCxTdHJpbmcgbmFtZSkKLSAgewotICAgIHN1cGVyKG5hbWUsYmluZGluZ0VsZW1lbnQsUkVMX0JJTkRJTkcsQmluZGluZ0VsZW1lbnQuUkVMX1BPUlRfVFlQRSk7Ci0gIH0KLQotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0QmluZGluZygpCi0gIHsKLSAgICByZXR1cm4gZ2V0RWxlbWVudHMoUkVMX0JJTkRJTkcpOwotICB9Ci0KLSAKLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvd3NkbG1vZGVsL1NlcnZpY2VFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC93c2RsbW9kZWwvU2VydmljZUVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTU5MWQ3Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC93c2RsbW9kZWwvU2VydmljZUVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwud3NkbG1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuQmFzaWNFbGVtZW50OwotCi0KLXB1YmxpYyBjbGFzcyBTZXJ2aWNlRWxlbWVudCBleHRlbmRzIEJhc2ljRWxlbWVudAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgUkVMX1BPUlRTID0gInBvcnRzIjsKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgUkVMX0RFRklOSVRJT04gPSAiZGVmaW5pdGlvbiI7Ci0gIAotICBwdWJsaWMgU2VydmljZUVsZW1lbnQgKERlZmluaXRpb25FbGVtZW50IGRlZmluaXRpb25FbGVtZW50LFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIobmFtZSxkZWZpbml0aW9uRWxlbWVudCxSRUxfREVGSU5JVElPTixEZWZpbml0aW9uRWxlbWVudC5SRUxfU0VSVklDRVMpOwotICB9Ci0KLSAgcHVibGljIEVudW1lcmF0aW9uIGdldERlZmluaXRpb24oKQotICB7Ci0gICAgcmV0dXJuIGdldEVsZW1lbnRzKFJFTF9ERUZJTklUSU9OKTsKLSAgfQotCi0gIHB1YmxpYyBFbnVtZXJhdGlvbiBnZXRQb3J0cygpCi0gIHsKLSAgICByZXR1cm4gZ2V0RWxlbWVudHMoUkVMX1BPUlRTKTsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0TnVtYmVyT2ZQb3J0cygpCi0gIHsKLSAgICByZXR1cm4gZ2V0TnVtYmVyT2ZFbGVtZW50cyhSRUxfUE9SVFMpOwotICB9Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL3dzZGxtb2RlbC9TdHViYmVkV1NETE1vZGVsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC93c2RsbW9kZWwvU3R1YmJlZFdTRExNb2RlbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjhmYTc2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZGF0YW1vZGVsL3dzZGxtb2RlbC9TdHViYmVkV1NETE1vZGVsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLndzZGxtb2RlbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci0KLXB1YmxpYyBjbGFzcyBTdHViYmVkV1NETE1vZGVsCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLQotICBwcm90ZWN0ZWQgTW9kZWwgZk1vZGVsOwotICBwdWJsaWMgU3R1YmJlZFdTRExNb2RlbCgpCi0gIHsKLSAgICBXU0RMRWxlbWVudCB3c2RsRWxlbWVudCA9IG5ldyBXU0RMRWxlbWVudCgiV1NETEZpbGVzIik7Ci0gICAgZk1vZGVsID0gd3NkbEVsZW1lbnQuZ2V0TW9kZWwoKTsgICAKLSAgfQotCi0gIHB1YmxpYyBNb2RlbCBnZXRXU0RMTW9kZWwoKQotICB7Ci0gICAgcmV0dXJuIGZNb2RlbDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGJ1aWxkTW9kZWwoKQotICB7Ci0gICAgRGVmaW5pdGlvbkVsZW1lbnQgZGVmMSA9IG5ldyBEZWZpbml0aW9uRWxlbWVudCgoV1NETEVsZW1lbnQpZk1vZGVsLmdldFJvb3RFbGVtZW50KCksIlN0b2NrUXVvdGUiKTsgCi0gICAgU2VydmljZUVsZW1lbnQgc2VyMSA9IG5ldyBTZXJ2aWNlRWxlbWVudChkZWYxLCJnZXRRdW90ZSIpOwotICAgIFNlcnZpY2VFbGVtZW50IHNlcjIgPSBuZXcgU2VydmljZUVsZW1lbnQoZGVmMSwic2V0UXVvdGUiKTsKLSAgICBQb3J0RWxlbWVudCBwb3J0MSA9IG5ldyBQb3J0RWxlbWVudChzZXIxLCJwb3J0MSIpOwotICAgIFBvcnRFbGVtZW50IHBvcnQyID0gbmV3IFBvcnRFbGVtZW50KHNlcjEsInBvcnQyIik7Ci0gICAgUG9ydEVsZW1lbnQgcG9ydDMgPSBuZXcgUG9ydEVsZW1lbnQoc2VyMiwicG9ydDEiKTsKLSAgICBQb3J0RWxlbWVudCBwb3J0NCA9IG5ldyBQb3J0RWxlbWVudChzZXIyLCJwb3J0MiIpOwotICAgIEJpbmRpbmdFbGVtZW50IGJpbmQxID0gbmV3IEJpbmRpbmdFbGVtZW50KHBvcnQxLCJiaW5kMSIpOwotICAgIEJpbmRpbmdFbGVtZW50IGJpbmQyID0gbmV3IEJpbmRpbmdFbGVtZW50KHBvcnQyLCJiaW5kMSIpOwotICAgIEJpbmRpbmdFbGVtZW50IGJpbmQzID0gbmV3IEJpbmRpbmdFbGVtZW50KHBvcnQzLCJiaW5kMSIpOwotICAgIEJpbmRpbmdFbGVtZW50IGJpbmQ0ID0gbmV3IEJpbmRpbmdFbGVtZW50KHBvcnQ0LCJiaW5kMSIpOwotICAgIE9wZXJhdGlvbkVsZW1lbnQgb3AxID0gbmV3IE9wZXJhdGlvbkVsZW1lbnQoYmluZDEsIm9wMSIpOwotICAgIG5ldyBPcGVyYXRpb25FbGVtZW50KGJpbmQyLCJvcDEiKTsKLSAgICBuZXcgT3BlcmF0aW9uRWxlbWVudChiaW5kMywib3AxIik7Ci0gICAgbmV3IE9wZXJhdGlvbkVsZW1lbnQoYmluZDQsIm9wMSIpOwotICAgIE1lc3NhZ2VFbGVtZW50IG1lMSA9IG5ldyBNZXNzYWdlRWxlbWVudChvcDEsIm1lMSIpOwotICAgIE1lc3NhZ2VFbGVtZW50IG1lMiA9IG5ldyBNZXNzYWdlRWxlbWVudChvcDEsIm1lMiIpOwotICAgIG5ldyBQYXJ0RWxlbWVudChtZTEsInBlMSIpOwotICAgIG5ldyBQYXJ0RWxlbWVudChtZTIsInBlMiIpOwotCi0gICAgRGVmaW5pdGlvbkVsZW1lbnQgZGVmMiA9IG5ldyBEZWZpbml0aW9uRWxlbWVudCgoV1NETEVsZW1lbnQpZk1vZGVsLmdldFJvb3RFbGVtZW50KCksIlRlbXBDb252ZXJzaW9uIik7IAotICAgIFNlcnZpY2VFbGVtZW50IHNlcjMgPSBuZXcgU2VydmljZUVsZW1lbnQoZGVmMiwiZ2V0VGVtcCIpOwotICAgIFNlcnZpY2VFbGVtZW50IHNlcjQgPSBuZXcgU2VydmljZUVsZW1lbnQoZGVmMiwic2V0VGVtcCIpOwotICAgIFBvcnRFbGVtZW50IHBvcnQ1ID0gbmV3IFBvcnRFbGVtZW50KHNlcjMsInBvcnQxIik7Ci0gICAgUG9ydEVsZW1lbnQgcG9ydDYgPSBuZXcgUG9ydEVsZW1lbnQoc2VyNCwicG9ydDEiKTsKLSAgICBCaW5kaW5nRWxlbWVudCBiaW5kNSA9IG5ldyBCaW5kaW5nRWxlbWVudChwb3J0NSwiYmluZDEiKTsKLSAgICBCaW5kaW5nRWxlbWVudCBiaW5kNiA9IG5ldyBCaW5kaW5nRWxlbWVudChwb3J0NiwiYmluZDEiKTsKLSAgICBuZXcgT3BlcmF0aW9uRWxlbWVudChiaW5kNSwib3AxIik7Ci0gICAgbmV3IE9wZXJhdGlvbkVsZW1lbnQoYmluZDYsIm9wMSIpOwotCi0gIH0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9kYXRhbW9kZWwvd3NkbG1vZGVsL1dTRExFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC93c2RsbW9kZWwvV1NETEVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjliMTQ1Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2RhdGFtb2RlbC93c2RsbW9kZWwvV1NETEVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwud3NkbG1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuQmFzaWNFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuQmFzaWNNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotCi0KLXB1YmxpYyBjbGFzcyBXU0RMRWxlbWVudCBleHRlbmRzIEJhc2ljRWxlbWVudAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgUkVMX0RFRklOSVRJT05TID0gImRlZmluaXRpb25zIjsKLSAgCi0gIC8qCi0gICoKLSAgKiovCi0gIHB1YmxpYyBXU0RMRWxlbWVudCAoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICB0aGlzKG5hbWUsbmV3IEJhc2ljTW9kZWwoIldTRExNb2RlbCIpKTsKLSAgfQotCi0gIHB1YmxpYyBXU0RMRWxlbWVudCAoU3RyaW5nIG5hbWUsIE1vZGVsIG1vZGVsKQotICB7Ci0gICAgc3VwZXIobmFtZSxtb2RlbCk7Ci0gICAgbW9kZWwuc2V0Um9vdEVsZW1lbnQodGhpcyk7Ci0gIH0KLQotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0RGVmaW5pdGlvbnMoKQotICB7Ci0gICAgcmV0dXJuIGdldEVsZW1lbnRzKFJFTF9ERUZJTklUSU9OUyk7Ci0gIH0KLQotICBwdWJsaWMgaW50IGdldE51bWJlck9mRGVmaW5pdGlvbnMoKQotICB7Ci0gICAgcmV0dXJuIGdldE51bWJlck9mRWxlbWVudHMoUkVMX0RFRklOSVRJT05TKTsKLSAgfQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2ZyYWdtZW50cy9DbGllbnRQcmVBc3NlbWJseUZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2ZyYWdtZW50cy9DbGllbnRQcmVBc3NlbWJseUZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2MjJhYmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9mcmFnbWVudHMvQ2xpZW50UHJlQXNzZW1ibHlGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5mcmFnbWVudHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TZXF1ZW5jZUZyYWdtZW50OwotCi1wdWJsaWMgY2xhc3MgQ2xpZW50UHJlQXNzZW1ibHlGcmFnbWVudCBleHRlbmRzIFNlcXVlbmNlRnJhZ21lbnQKLXsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZnJhZ21lbnRzL0NsaWVudFByZURlcGxveUZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2ZyYWdtZW50cy9DbGllbnRQcmVEZXBsb3lGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjY5ZmJjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZnJhZ21lbnRzL0NsaWVudFByZURlcGxveUZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmZyYWdtZW50czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNlcXVlbmNlRnJhZ21lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBDbGllbnRQcmVEZXBsb3lGcmFnbWVudCBleHRlbmRzIFNlcXVlbmNlRnJhZ21lbnQKLXsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZnJhZ21lbnRzL0NsaWVudFByZURldmVsb3BGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9mcmFnbWVudHMvQ2xpZW50UHJlRGV2ZWxvcEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3ZmExZWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9mcmFnbWVudHMvQ2xpZW50UHJlRGV2ZWxvcEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmZyYWdtZW50czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNlcXVlbmNlRnJhZ21lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBDbGllbnRQcmVEZXZlbG9wRnJhZ21lbnQgZXh0ZW5kcyBTZXF1ZW5jZUZyYWdtZW50Ci17Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2ZyYWdtZW50cy9DbGllbnRQcmVJbnN0YWxsRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZnJhZ21lbnRzL0NsaWVudFByZUluc3RhbGxGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDJhMmIxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZnJhZ21lbnRzL0NsaWVudFByZUluc3RhbGxGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5mcmFnbWVudHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TZXF1ZW5jZUZyYWdtZW50OwotCi1wdWJsaWMgY2xhc3MgQ2xpZW50UHJlSW5zdGFsbEZyYWdtZW50IGV4dGVuZHMgU2VxdWVuY2VGcmFnbWVudAotewotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9mcmFnbWVudHMvU2VydmljZVByZUFzc2VtYmx5RnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZnJhZ21lbnRzL1NlcnZpY2VQcmVBc3NlbWJseUZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3Y2VmM2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9mcmFnbWVudHMvU2VydmljZVByZUFzc2VtYmx5RnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZnJhZ21lbnRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2VxdWVuY2VGcmFnbWVudDsKLQotcHVibGljIGNsYXNzIFNlcnZpY2VQcmVBc3NlbWJseUZyYWdtZW50IGV4dGVuZHMgU2VxdWVuY2VGcmFnbWVudAotewotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9mcmFnbWVudHMvU2VydmljZVByZURlcGxveUZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2ZyYWdtZW50cy9TZXJ2aWNlUHJlRGVwbG95RnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQ1OGY1Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2ZyYWdtZW50cy9TZXJ2aWNlUHJlRGVwbG95RnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZnJhZ21lbnRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2VxdWVuY2VGcmFnbWVudDsKLQotcHVibGljIGNsYXNzIFNlcnZpY2VQcmVEZXBsb3lGcmFnbWVudCBleHRlbmRzIFNlcXVlbmNlRnJhZ21lbnQKLXsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZnJhZ21lbnRzL1NlcnZpY2VQcmVEZXZlbG9wRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZnJhZ21lbnRzL1NlcnZpY2VQcmVEZXZlbG9wRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2NiNGQyZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL2ZyYWdtZW50cy9TZXJ2aWNlUHJlRGV2ZWxvcEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmZyYWdtZW50czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNlcXVlbmNlRnJhZ21lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBTZXJ2aWNlUHJlRGV2ZWxvcEZyYWdtZW50IGV4dGVuZHMgU2VxdWVuY2VGcmFnbWVudAotewotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9mcmFnbWVudHMvU2VydmljZVByZUluc3RhbGxGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9mcmFnbWVudHMvU2VydmljZVByZUluc3RhbGxGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODQ5MjQ1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vZnJhZ21lbnRzL1NlcnZpY2VQcmVJbnN0YWxsRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZnJhZ21lbnRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2VxdWVuY2VGcmFnbWVudDsKLQotcHVibGljIGNsYXNzIFNlcnZpY2VQcmVJbnN0YWxsRnJhZ21lbnQgZXh0ZW5kcyBTZXF1ZW5jZUZyYWdtZW50Ci17Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3BsdWdpbi9XZWJTZXJ2aWNlQ29uc3VtcHRpb25QbHVnaW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vcGx1Z2luL1dlYlNlcnZpY2VDb25zdW1wdGlvblBsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDQwNjJhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vcGx1Z2luL1dlYlNlcnZpY2VDb25zdW1wdGlvblBsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDI0ICAgMTE1NjkwIHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnBsdWdpbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci0KLS8qKgotKiBUaGlzIGlzIHRoZSBwbHVnaW4gY2xhc3MgZm9yIHRoZSBXZWIgU2VydmljZXMgcGx1Z2luLgotKiA8cD4KLSogVGhpcyBwbHVnaW4gY29udGFpbnMgdGhlIGJ1bGsgb2YgdGhlIFdlYiBTZXJ2aWNlcyBydW50aW1lLgotKiBPbmx5IHRoZSBncmFwaGljYWwgdXNlciBpbnRlcmZhY2UgcG9ydGlvbiBvZiB0aGUgcnVudGltZSBpcwotKiBmb3VuZCBlbHNld2hlcmUgLSBpbiB0aGUgb3JnLmVjbGlwc2UuanN0LndzLnVpIHBsdWdpbi4KLSovCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZUNvbnN1bXB0aW9uUGx1Z2luIGV4dGVuZHMgUGx1Z2luCi17Ci0gIC8qKgotICAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBkZXNjcmlwdG9yIG9mIHRoaXMgcGx1Z2luIGluIHBsdWdpbi54bWwuCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEID0gIm9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbiI7Ci0KLSAgLyoqCi0gICogVGhlIHJlZmVyZW5jZSB0byB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgcGx1Z2luLgotICAqLwotICBwcml2YXRlIHN0YXRpYyBXZWJTZXJ2aWNlQ29uc3VtcHRpb25QbHVnaW4gaW5zdGFuY2VfOwotCi0gIC8qKgotICAqIENvbnN0cnVjdHMgYSBydW50aW1lIHBsdWdpbiBvYmplY3QgZm9yIHRoaXMgcGx1Z2luLgotICAqLwotICBwdWJsaWMgV2ViU2VydmljZUNvbnN1bXB0aW9uUGx1Z2luICgpCi0gIHsKLSAgICBzdXBlcigpOwotICAgIGluc3RhbmNlXyA9IHRoaXM7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBwbHVnaW4uIEVxdWl2YWxlbnQgdG8gY2FsbGluZwotICAqIChXZWJTZXJ2aWNlQ29uc3VtcHRpb25QbHVnaW4pUGxhdGZvcm0uZ2V0UGx1Z2luKCJvcmcuZWNsaXBzZS5qc3Qud3MiKTsKLSAgKiBAcmV0dXJuIFRoZSBXZWJTZXJ2aWNlQ29uc3VtcHRpb25QbHVnaW4gc2luZ2xldG9uLgotICAqLwotICBwdWJsaWMgc3RhdGljIFdlYlNlcnZpY2VDb25zdW1wdGlvblBsdWdpbiBnZXRJbnN0YW5jZSAoKQotICB7Ci0gICAgcmV0dXJuIGluc3RhbmNlXzsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3NhbXBsZWFwcC9jb2RlZ2VuL0lucHV0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29kZWdlbi9JbnB1dEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTIyNWUwMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3NhbXBsZWFwcC9jb2RlZ2VuL0lucHV0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNjEyICAgMTQ1NDMzIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uc2FtcGxlYXBwLmNvZGVnZW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLmJlYW4uVHlwZVZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuQXR0cmlidXRlRWxlbWVudFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuQmVhbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuVHlwZUZhY3Rvcnk7Ci0KLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSBJbnB1dEZpbGVUeXBlR2VuZXJhdG9yLgotKiAqLwotcHVibGljIGNsYXNzIElucHV0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvciBleHRlbmRzIElucHV0RmlsZVR5cGVHZW5lcmF0b3IgCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgIAotICBwcml2YXRlIGJvb2xlYW4gZlN0YXRlTGVzczsKLQotICAvKioKLSAgKiBDb25zdHJ1Y3Rvci4KLSAgKiAKLSAgKi8KLSAgcHVibGljIElucHV0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvciAoU3RyaW5nQnVmZmVyIGJ1ZmZlciwgaW50IGN1cnJlbnRMZXZlbCwgaW50IGxldmVsc0RlZXApCi0gIHsKLSAgICAgc3VwZXIoYnVmZmVyLGN1cnJlbnRMZXZlbCxsZXZlbHNEZWVwKTsKLSAgfQotCi0gCi0gIC8qCi0gICogVGFrZXMgaW4gYW4gb2JqZWN0IHRvIGJlIGFjdGVkIHVwb24gYnkgdGhpcyB2aXNpdG9yIGFjdGlvbgotICAqIEBwYXJhbSBPYmplY3QgVGhlIG9iamVjdCB0byBiZSBhY3RlZCB1cG9uCi0gICovCi0gIHB1YmxpYyBJU3RhdHVzIHZpc2l0IChPYmplY3Qgb2JqZWN0KQotICB7Ci0gICAgIAotICAgICBBdHRyaWJ1dGVFbGVtZW50VHlwZSBhdHRyaWJ1dGVFbGVtZW50VHlwZSA9IChBdHRyaWJ1dGVFbGVtZW50VHlwZSlvYmplY3Q7Ci0gICAgIC8vaWYgaXQgaXMgYSBiZWFuIGlzIGl0IHN0YXRlbGVzcwotICAgICBhdHRyaWJ1dGVFbGVtZW50VHlwZS5nZXRUeXBlRWxlbWVudCgpOyAKLSAgICAgaWYoYXR0cmlidXRlRWxlbWVudFR5cGUuZ2V0U2V0dGVyTWV0aG9kKCkgPT0gbnVsbCkgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgIGlmKGF0dHJpYnV0ZUVsZW1lbnRUeXBlLmdldFR5cGVFbGVtZW50KCkuaXNCZWFuKCkpewotICAgICAgIEJlYW5FbGVtZW50IGJlYW4gPSAoQmVhbkVsZW1lbnQpYXR0cmlidXRlRWxlbWVudFR5cGUuZ2V0VHlwZUVsZW1lbnQoKTsKLSAgICAgICBmU3RhdGVMZXNzID0gYmVhbi5pc1N0YXRlTGVzcygpOwotICAgICB9CSAKLQotICAgICBUeXBlVmlzaXRvciB0eXBlVmlzaXRvciA9IG5ldyBUeXBlVmlzaXRvcigpOwotICAgICBJbnB1dEZpbGVUeXBlR2VuZXJhdG9yIGlucHV0RmlsZVR5cGVHZW5lcmF0b3IgPSBuZXcgSW5wdXRGaWxlVHlwZUdlbmVyYXRvcihmYnVmZmVyLGZDdXJyZW50TGV2ZWwsZkxldmVsc0RlZXApOwotICAgICBpZihhdHRyaWJ1dGVFbGVtZW50VHlwZS5nZXRUeXBlRWxlbWVudCgpLmlzQmVhbigpICYmICFUeXBlRmFjdG9yeS5yZWNvZ25pemVkQmVhbihhdHRyaWJ1dGVFbGVtZW50VHlwZS5nZXRUeXBlRWxlbWVudCgpLmdldE5hbWUoKSkgCi0gICAgIAkmJiAhKGdldFJldHVyblBhcmFtKCkgJiYgKFR5cGVGYWN0b3J5LmlzUmVjb2duaXplZFJldHVyblR5cGUoYXR0cmlidXRlRWxlbWVudFR5cGUuZ2V0VHlwZUVsZW1lbnQoKS5nZXRUeXBlTmFtZSgpKSB8fCBmU3RhdGVMZXNzKSkpCi0gICAgICAgICAgICAgICAgCi0gICAgIGFkZFBhcmVudEdldHRlcihhdHRyaWJ1dGVFbGVtZW50VHlwZS5nZXRHZXR0ZXJNZXRob2QoKSxhdHRyaWJ1dGVFbGVtZW50VHlwZS5nZXRUeXBlRWxlbWVudCgpLmdldE5hbWUoKSk7Ci0gICAgIGlucHV0RmlsZVR5cGVHZW5lcmF0b3IuYWRkUGFyZW50R2V0dGVyKHJldHVyblBhcmVudEdldHRlcigpLHJldHVyblBhcmVudEdldHRlclR5cGUoKSk7Ci0gICAgIGlucHV0RmlsZVR5cGVHZW5lcmF0b3Iuc2V0SW5zdGFuY2VOYW1lKGZJbnN0YW5jZU5hbWUpOwotICAgICBpbnB1dEZpbGVUeXBlR2VuZXJhdG9yLnNldFJldHVyblBhcmFtKGdldFJldHVyblBhcmFtKCkpOwotICAgICB0eXBlVmlzaXRvci5ydW4oYXR0cmlidXRlRWxlbWVudFR5cGUsaW5wdXRGaWxlVHlwZUdlbmVyYXRvcik7ICAgCi0gICAgIGZidWZmZXIgPSBpbnB1dEZpbGVUeXBlR2VuZXJhdG9yLmdldFN0cmluZ0J1ZmZlcigpOwotICAgICAKLSAgICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvZGVnZW4vSW5wdXRGaWxlR2VuZXJhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3NhbXBsZWFwcC9jb2RlZ2VuL0lucHV0RmlsZUdlbmVyYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDQ3YmIwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvZGVnZW4vSW5wdXRGaWxlR2VuZXJhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uc2FtcGxlYXBwLmNvZGVnZW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uR2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLmJlYW4uTWV0aG9kVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkVsZW1lbnQ7Ci0KLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSBNZXRob2RGaWxlZ2VuZXJhdG9yLgotKiAqLwotcHVibGljIGNsYXNzIElucHV0RmlsZUdlbmVyYXRvciBleHRlbmRzIEdlbmVyYXRvciAKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAgCi0gIHB1YmxpYyBTdHJpbmcgZlJlc3VsdE5hbWU7Ci0KLSAgLyoqCi0gICogQ29uc3RydWN0b3IuCi0gICogdXNlZCBkaXJlY3RseSAKLSAgKi8KLSAgcHVibGljIElucHV0RmlsZUdlbmVyYXRvciAoU3RyaW5nIHJlc3VsdCkKLSAgewotICAgICAgc3VwZXIoKTsKLSAgICAgIGZSZXN1bHROYW1lID0gcmVzdWx0OwotICB9Ci0KLSAgLyoqCi0gICogQ29uc3RydWN0b3IuCi0gICogY2FsbGVkIGZyb20gc3ViY2xhc3NlcwotICAqLwotICBwdWJsaWMgSW5wdXRGaWxlR2VuZXJhdG9yIChTdHJpbmdCdWZmZXIgYnVmZmVyLCBTdHJpbmcgcmVzdWx0KQotICB7Ci0gICAgICBzdXBlcihidWZmZXIpOwotICAgICAgZlJlc3VsdE5hbWUgPSByZXN1bHQ7Ci0gIH0KLQotICAvKioKLSAgKiBDb25zdHJ1Y3Rvci4KLSAgKiBjYWxsZWQgZnJvbSBzdWJjbGFzc2VzCi0gICovCi0gIHB1YmxpYyBJbnB1dEZpbGVHZW5lcmF0b3IgKFN0cmluZ0J1ZmZlciBidWZmZXIpCi0gIHsKLSAgICAgIHN1cGVyKGJ1ZmZlcik7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEZpbGVOYW1lcyhTdHJpbmcgcmVzdWx0cykKLSAgewotICAgIGZSZXN1bHROYW1lID0gcmVzdWx0czsKLSAgfQotCi0gIC8vdGFrZXMgaW4gYSBiZWFuIG5vZGUKLSAgIHB1YmxpYyBJU3RhdHVzIHZpc2l0IChPYmplY3Qgb2JqZWN0KQotICAgewotICAgICAgRWxlbWVudCBiZWFuRWxlbWVudCA9IChFbGVtZW50KW9iamVjdDsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8JUBwYWdlIGNvbnRlbnRUeXBlPVwidGV4dC9odG1sO2NoYXJzZXQ9VVRGLThcIiU+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjxIVE1MPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8SEVBRD4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPFRJVExFPklucHV0czwvVElUTEU+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjwvSEVBRD4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPEJPRFk+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjxIMT5JbnB1dHM8L0gxPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FICsgIiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8JSIgKyBTdHJpbmdVdGlscy5ORVdMSU5FICsgIlN0cmluZyBtZXRob2QgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihcIm1ldGhvZFwiKTsiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiaW50IG1ldGhvZElEID0gMDsiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiaWYgKG1ldGhvZCA9PSBudWxsKSBtZXRob2RJRCA9IC0xOyIgKyBTdHJpbmdVdGlscy5ORVdMSU5FICsgIiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCJib29sZWFuIHZhbGlkID0gdHJ1ZTsiICsgU3RyaW5nVXRpbHMuTkVXTElORSArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotCi0gICAgICBmYnVmZmVyLmFwcGVuZCgiaWYobWV0aG9kSUQgIT0gLTEpIG1ldGhvZElEID0gSW50ZWdlci5wYXJzZUludChtZXRob2QpOyIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsgCi0gICAgICBmYnVmZmVyLmFwcGVuZCgic3dpdGNoIChtZXRob2RJRCl7ICIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIAkKLSAgICAgIC8vIGdvIHRvIHRoZSBuZXh0IGdlbmVyYXRvcgotICAgICAgTWV0aG9kVmlzaXRvciBtZXRob2RWaXNpdG9yID0gbmV3IE1ldGhvZFZpc2l0b3IoKTsKLSAgICAgIElucHV0RmlsZUhlbHAxR2VuZXJhdG9yIGlucHV0RmlsZUhlbHAxR2VuZXJhdG9yID0gbmV3IElucHV0RmlsZUhlbHAxR2VuZXJhdG9yKGZidWZmZXIsZlJlc3VsdE5hbWUpOyAKLSAgICAgIG1ldGhvZFZpc2l0b3IucnVuKGJlYW5FbGVtZW50LGlucHV0RmlsZUhlbHAxR2VuZXJhdG9yKTsKLSAgICAgIGZidWZmZXIgPSBpbnB1dEZpbGVIZWxwMUdlbmVyYXRvci5nZXRTdHJpbmdCdWZmZXIoKTsKLQotICAgICAgZmJ1ZmZlci5hcHBlbmQoImNhc2UgMTExMTExMTExMToiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgidmFsaWQgPSBmYWxzZTsiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiJT4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPEZPUk0gTUVUSE9EPVwiUE9TVFwiIEFDVElPTj1cIiIgKyBmUmVzdWx0TmFtZSArICJcIiBUQVJHRVQ9XCJyZXN1bHRcIj4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPElOUFVUIFRZUEU9XCJISURERU5cIiBOQU1FPVwibWV0aG9kXCIgVkFMVUU9XCI8JT1tZXRob2QlPlwiPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8VEFCTEU+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjxUUj4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPFREIENPTFNQQU49XCIxXCIgQUxJR049XCJMRUZUXCI+VVJMU3RyaW5nOjwvVEQ+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjxURCBBTElHTj1cImxlZnRcIj48SU5QVVQgVFlQRT1cIlRFWFRcIiBOQU1FPVwidXJsMTExMTExMTExMVwiIFNJWkU9MjA+PC9URD4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPC9UUj4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPC9UQUJMRT4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPEJSPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8SU5QVVQgVFlQRT1cIlNVQk1JVFwiIFZBTFVFPVwiSW52b2tlXCI+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjxJTlBVVCBUWVBFPVwiUkVTRVRcIiBWQUxVRT1cIkNsZWFyXCI+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjwvRk9STT4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPCUiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiYnJlYWs7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoImNhc2UgMTExMTExMTExMjoiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgidmFsaWQgPSBmYWxzZTsiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiJT4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPEZPUk0gTUVUSE9EPVwiUE9TVFwiIEFDVElPTj1cIiIgKyBmUmVzdWx0TmFtZSArICJcIiBUQVJHRVQ9XCJyZXN1bHRcIj4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPElOUFVUIFRZUEU9XCJISURERU5cIiBOQU1FPVwibWV0aG9kXCIgVkFMVUU9XCI8JT1tZXRob2QlPlwiPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8QlI+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjxJTlBVVCBUWVBFPVwiU1VCTUlUXCIgVkFMVUU9XCJJbnZva2VcIj4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPElOUFVUIFRZUEU9XCJSRVNFVFwiIFZBTFVFPVwiQ2xlYXJcIj4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPC9GT1JNPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8JSIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCJicmVhazsiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICAKLSAgICAgIAotCi0gICAgICBmYnVmZmVyLmFwcGVuZCgifSIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsgICAgCi0gICAgICBmYnVmZmVyLmFwcGVuZCgiaWYgKHZhbGlkKSB7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIiU+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgKyAiU2VsZWN0IGEgbWV0aG9kIHRvIHRlc3QuIiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOyAgCi0gICAgICBmYnVmZmVyLmFwcGVuZCgiPCUiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZChHZW5lcmF0b3IuVEFCICsgInJldHVybjsiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgifSIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCIlPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPC9CT0RZPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8L0hUTUw+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgCi0gICAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvZGVnZW4vSW5wdXRGaWxlSGVscDFHZW5lcmF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvZGVnZW4vSW5wdXRGaWxlSGVscDFHZW5lcmF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQ2MTA1Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3NhbXBsZWFwcC9jb2RlZ2VuL0lucHV0RmlsZUhlbHAxR2VuZXJhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5zYW1wbGVhcHAuY29kZWdlbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmdVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5iZWFuLlBhcmFtZXRlclZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuTWV0aG9kRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkVsZW1lbnQ7Ci0KLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSBJbnB1dEZpbGVIZWxwMUdlbmVyYXRvci4KLSogKi8KLXB1YmxpYyBjbGFzcyBJbnB1dEZpbGVIZWxwMUdlbmVyYXRvciBleHRlbmRzIElucHV0RmlsZUdlbmVyYXRvciAKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOSVRJQUxfU1RBVEUgPSAxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGSU5BTF9TVEFURSA9IDI7Ci0KLSAgcHVibGljIGludCBmc3RhdGU7Ci0gICAKLSAgLyoqCi0gICogQ29uc3RydWN0b3IuCi0gICogCi0gICovCi0gIHB1YmxpYyBJbnB1dEZpbGVIZWxwMUdlbmVyYXRvciAoU3RyaW5nQnVmZmVyIGJ1ZmZlcikKLSAgewotICAgICAgc3VwZXIoYnVmZmVyKTsKLSAgICAgIGZzdGF0ZSA9IElOSVRJQUxfU1RBVEU7Ci0gIH0KLSAgCi0gIC8qKgotICAqIENvbnN0cnVjdG9yLgotICAqIAotICAqLwotICBwdWJsaWMgSW5wdXRGaWxlSGVscDFHZW5lcmF0b3IgKFN0cmluZ0J1ZmZlciBidWZmZXIsU3RyaW5nIHJlc3VsdE5hbWUpCi0gIHsKLSAgICAgIHN1cGVyKGJ1ZmZlcixyZXN1bHROYW1lKTsKLSAgICAgIGZzdGF0ZSA9IElOSVRJQUxfU1RBVEU7Ci0gIH0KLSAgCi0gIC8qCi0gICogVGFrZXMgaW4gYW4gZWxlbWVudAotICAqIEBwYXJhbSBPYmplY3QgVGFrZXMgaW4gYW4gb2JqZWN0IHRvIGJlIGFjdGVkIHVwb24KLSAgKi8KLSAgcHVibGljIElTdGF0dXMgdmlzaXQgKE9iamVjdCBvYmplY3QpCi0gIHsKLSAgICAgRWxlbWVudCBtZXRob2RFbGVtZW50ID0gKEVsZW1lbnQpb2JqZWN0OwotICAgICBNZXRob2RFbGVtZW50IG1ldGhvZCA9IChNZXRob2RFbGVtZW50KW1ldGhvZEVsZW1lbnQ7Ci0gICAgIGlmIChtZXRob2QuZ2V0TWV0aG9kT21taXNzaW9uKCkpIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICAgICAKLSAgICAgUGFyYW1ldGVyVmlzaXRvciBwYXJhbWV0ZXJWaXNpdG9yID0gbmV3IFBhcmFtZXRlclZpc2l0b3IoKTsKLSAgICAgZmJ1ZmZlci5hcHBlbmQoImNhc2UgIiArIG1ldGhvZC5nZXROdW1iZXJJRCgpKyAiOiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgZmJ1ZmZlci5hcHBlbmQoInZhbGlkID0gZmFsc2U7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICBmYnVmZmVyLmFwcGVuZCgiJT4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgIGZidWZmZXIuYXBwZW5kKCI8Rk9STSBNRVRIT0Q9XCJQT1NUXCIgQUNUSU9OPVwiIiArIGZSZXN1bHROYW1lICsgIlwiIFRBUkdFVD1cInJlc3VsdFwiPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgZmJ1ZmZlci5hcHBlbmQoIjxJTlBVVCBUWVBFPVwiSElEREVOXCIgTkFNRT1cIm1ldGhvZFwiIFZBTFVFPVwiPCU9bWV0aG9kJT5cIj4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgCi0gICAgIC8vIGdvIHRvIHRoZSBuZXh0IGdlbmVyYXRvcgotICAgICBJbnB1dEZpbGVIZWxwMkdlbmVyYXRvciBpbnB1dEZpbGVIZWxwMkdlbmVyYXRvciA9IG5ldyBJbnB1dEZpbGVIZWxwMkdlbmVyYXRvcihmYnVmZmVyKTsgCi0gICAgIHBhcmFtZXRlclZpc2l0b3IucnVuKG1ldGhvZEVsZW1lbnQsaW5wdXRGaWxlSGVscDJHZW5lcmF0b3IpOwotICAgICBmYnVmZmVyID0gaW5wdXRGaWxlSGVscDJHZW5lcmF0b3IuZ2V0U3RyaW5nQnVmZmVyKCk7Ci0gICAgIAotICAgICBmYnVmZmVyLmFwcGVuZCgiPEJSPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgZmJ1ZmZlci5hcHBlbmQoIjxJTlBVVCBUWVBFPVwiU1VCTUlUXCIgVkFMVUU9XCJJbnZva2VcIj4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgIGZidWZmZXIuYXBwZW5kKCI8SU5QVVQgVFlQRT1cIlJFU0VUXCIgVkFMVUU9XCJDbGVhclwiPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgZmJ1ZmZlci5hcHBlbmQoIjwvRk9STT4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgIGZidWZmZXIuYXBwZW5kKCI8JSIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgZmJ1ZmZlci5hcHBlbmQoImJyZWFrOyIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIAotCi0gICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICAgICAKLSAgCi0gIH0gICAKLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3NhbXBsZWFwcC9jb2RlZ2VuL0lucHV0RmlsZUhlbHAyR2VuZXJhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3NhbXBsZWFwcC9jb2RlZ2VuL0lucHV0RmlsZUhlbHAyR2VuZXJhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiN2U2NGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29kZWdlbi9JbnB1dEZpbGVIZWxwMkdlbmVyYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uc2FtcGxlYXBwLmNvZGVnZW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uYmVhbi5UeXBlVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkVsZW1lbnQ7Ci0KLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSBJbnB1dEZpbGVIZWxwMkdlbmVyYXRvci4KLSogKi8KLXB1YmxpYyBjbGFzcyBJbnB1dEZpbGVIZWxwMkdlbmVyYXRvciBleHRlbmRzIElucHV0RmlsZUhlbHAxR2VuZXJhdG9yIAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gICAKLSAgLyoKLSAgKiBUaGlzIGlzIGFjdHVhbGx5IHVzZWQgYnkgdGhlIHJlc3VsdCBnZW5lcmF0b3IgdG8gc2hvdyB0aGUgCi0gICogcmVzdWx0YW50IEJlYW4KLSAgKiBUaGUgbmFtZSBpcyB0aGUgbmFtZSB0aGUgcmVzdWx0YW50IGJlYW4gaXMgdXNpbmcgYXMgaXRzIGluc3RhbmNlIG5hbWUKLSAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBmSW5zdGFuY2VOYW1lOwotICBwcml2YXRlIGJvb2xlYW4gZlJldHVyblBhcmFtPWZhbHNlOwotCi0gIC8qKgotICAqIENvbnN0cnVjdG9yLgotICAqIAotICAqLwotICBwdWJsaWMgSW5wdXRGaWxlSGVscDJHZW5lcmF0b3IgKFN0cmluZ0J1ZmZlciBidWZmZXIpCi0gIHsKLSAgICAgIHN1cGVyKGJ1ZmZlcik7Ci0gICAgICBmSW5zdGFuY2VOYW1lPSIiOwotICB9Ci0KLSAgLyoqCi0gICogVGhpcyBpcyBzdGF0ZSBkYXRhIHRvIGJlIHVzZWQgYnkgdGhlIGdlbmVyYXRvcnMKLSAgKiBAcGFyYW0gU3RyaW5nIG5hbWUgVGhlIGluc3RhbmNlIG5hbWUgb2YgdGhlIHBhcmFtZXRlcnMgdHlwZSBiZWFuCi0gICovCi0gIHB1YmxpYyB2b2lkIHNldEluc3RhbmNlTmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgIGZJbnN0YW5jZU5hbWUgPSBuYW1lOwotICB9Ci0KLSAgLyoqCi0gICogVGhpcyBpcyBzdGF0ZSBkYXRhIHRvIGJlIHVzZWQgYnkgdGhlIGdlbmVyYXRvcnMKLSAgKiBAcmV0dXJuIFN0cmluZyBuYW1lIFRoZSBpbnN0YW5jZSBuYW1lIG9mIHRoZSBwYXJhbWV0ZXJzIHR5cGUgYmVhbgotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEluc3RhbmNlTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gZkluc3RhbmNlTmFtZTsKLSAgfQotCi0KLSAgLyoKLSAgKiBUYWtlcyBpbiBhbiBvYmplY3QgdG8gYmUgYWN0ZWQgdXBvbiBieSB0aGlzIHZpc2l0b3IgYWN0aW9uCi0gICogQHBhcmFtIE9iamVjdCBUaGUgb2JqZWN0IHRvIGJlIGFjdGVkIHVwb24KLSAgKi8KLSAgcHVibGljIElTdGF0dXMgdmlzaXQgKE9iamVjdCBvYmplY3QpCi0gIHsKLSAgICAgIEVsZW1lbnQgcGFyYW1ldGVyRWxlbWVudCA9IChFbGVtZW50KW9iamVjdDsKLSAgICAgIGdldFZpc2l0b3IoKTsKLQotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjxUQUJMRT4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0KLSAgICAgIFR5cGVWaXNpdG9yIHR5cGVWaXNpdG9yID0gbmV3IFR5cGVWaXNpdG9yKCk7Ci0gICAgICBJbnB1dEZpbGVUeXBlR2VuZXJhdG9yIGlucHV0RmlsZVR5cGVHZW5lcmF0b3IgPSBuZXcgSW5wdXRGaWxlVHlwZUdlbmVyYXRvcihmYnVmZmVyLDApOwotICAgICAgaW5wdXRGaWxlVHlwZUdlbmVyYXRvci5zZXRSZXR1cm5QYXJhbShnZXRSZXR1cm5QYXJhbSgpKTsKLSAgICAgIGlucHV0RmlsZVR5cGVHZW5lcmF0b3Iuc2V0SW5zdGFuY2VOYW1lKGZJbnN0YW5jZU5hbWUpOwotICAgICAgdHlwZVZpc2l0b3IucnVuKHBhcmFtZXRlckVsZW1lbnQsaW5wdXRGaWxlVHlwZUdlbmVyYXRvcik7Ci0gICAgICBmYnVmZmVyID0gaW5wdXRGaWxlVHlwZUdlbmVyYXRvci5nZXRTdHJpbmdCdWZmZXIoKTsKLQotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjwvVEFCTEU+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgCi0gICAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgCi0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBnZXRSZXR1cm5QYXJhbSgpCi0gIHsKLSAgICByZXR1cm4gZlJldHVyblBhcmFtOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0UmV0dXJuUGFyYW0oYm9vbGVhbiByZXR1cm5QYXJhbSkKLSAgewotICAgIGZSZXR1cm5QYXJhbSA9IHJldHVyblBhcmFtOwotICB9IAotCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvZGVnZW4vSW5wdXRGaWxlVHlwZUdlbmVyYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29kZWdlbi9JbnB1dEZpbGVUeXBlR2VuZXJhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliOWJmNmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29kZWdlbi9JbnB1dEZpbGVUeXBlR2VuZXJhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNjEyICAgMTQ1NDMzIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqIDIwMDcwNDEwICAgMTgwOTUyIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBTYW1wbGUgSlNQIGdlbmVyYXRvciBjaG9rZXMgb24gaW50ZXJmYWNlcyBhbmQgYWJzdHJhY3QgY2xhc3NlcyAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uc2FtcGxlYXBwLmNvZGVnZW47Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmdVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5iZWFuLkF0dHJpYnV0ZVZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uYmVhbi5GaWVsZFZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuQXR0cmlidXRlRWxlbWVudFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuQmVhbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuRGF0YVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuU2ltcGxlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbC5UeXBlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbC5UeXBlRmFjdG9yeTsKLQotCi0vKioKLSogT2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIElucHV0RmlsZVR5cGVHZW5lcmF0b3IuCi0qICovCi1wdWJsaWMgY2xhc3MgSW5wdXRGaWxlVHlwZUdlbmVyYXRvciBleHRlbmRzIElucHV0RmlsZUhlbHAyR2VuZXJhdG9yIAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gICAKLSAgcHJvdGVjdGVkIFN0cmluZyBmUGFyZW50R2V0dGVyczsKLSAgcHJvdGVjdGVkIGludCBmTGV2ZWxzRGVlcDsKLSAgcHJvdGVjdGVkIGludCBmQ29sc3BhbjsKLSAgcHJvdGVjdGVkIGludCBmQ3VycmVudExldmVsOwotICBwcml2YXRlIGJvb2xlYW4gZklzU2ltcGxlOwotICBwcml2YXRlIGJvb2xlYW4gZlN0YXRlTGVzc0JlYW47Ci0gIHByaXZhdGUgVmVjdG9yIGZHZXR0ZXJzOwotICBwcml2YXRlIFZlY3RvciBmVHlwZXM7Ci0gIHByaXZhdGUgYm9vbGVhbiBmV3JpdGUgPSB0cnVlOwotCi0gIC8qKgotICAqIENvbnN0cnVjdG9yLgotICAqIAotICAqLwotICBwdWJsaWMgSW5wdXRGaWxlVHlwZUdlbmVyYXRvciAoU3RyaW5nQnVmZmVyIGJ1ZmZlciwgaW50IGN1cnJlbnRMZXZlbCkKLSAgewotICAgICBzdXBlcihidWZmZXIpOwotICAgICBmQ3VycmVudExldmVsID0gY3VycmVudExldmVsOwotICAgICBmTGV2ZWxzRGVlcCA9IC0xOwotICAgICBmUGFyZW50R2V0dGVycyA9ICIiOwotICB9Ci0KLSAgLyoqCi0gICogQ29uc3RydWN0b3IuCi0gICogCi0gICovCi0gIHB1YmxpYyBJbnB1dEZpbGVUeXBlR2VuZXJhdG9yIChTdHJpbmdCdWZmZXIgYnVmZmVyLCBpbnQgY3VycmVudExldmVsLGludCBsZXZlbHNEZWVwKQotICB7Ci0gICAgIHN1cGVyKGJ1ZmZlcik7Ci0gICAgIGZDdXJyZW50TGV2ZWwgPSBjdXJyZW50TGV2ZWw7Ci0gICAgIGZMZXZlbHNEZWVwID0gbGV2ZWxzRGVlcDsKLSAgICAgZlBhcmVudEdldHRlcnMgPSAiIjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFBhcmVudEdldHRlcnMoVmVjdG9yIGdldHRlcixWZWN0b3IgdHlwZSkKLSAgewotICAgICBpZihmR2V0dGVycyAhPSBudWxsKXsKLSAgICAgICBmR2V0dGVycy5jbGVhcigpOwotICAgICAgIGZUeXBlcy5jbGVhcigpOwotICAgICB9Ci0gICAgIGFkZFBhcmVudEdldHRlcihnZXR0ZXIsdHlwZSk7Ci0gIH0KLQotCi0gIC8qKgotICAqIFRoaXMgZnVuY3Rpb24gaG9sZHMgc29tZSBzdGF0ZSBkYXRhIHRoYXQgaXMgaW1wb3J0YW50IGluIGdldHRpbmcgdGhlIAotICAqIFN0cmluZ3MgZm9yIGRpc3BsYXkgb2YgcmVzdWx0YW50IGJlYW5zCi0gICogQHBhcmFtIFN0cmluZyBnZXR0ZXIgdGhpcyBpcyB0aGUgZ2V0dGVyIG9mIGFuIGF0dHJpYnV0ZQotICAqIFRoZSBpZGVhIGlzIHRoYXQgYnkgdGhlIHRpbWUgd2UgZ2V0IHRvIHRoZSBzaW1wbGUgdHlwZQotICAqIHdlIGhhdmUgZ2V0QWRkcmVzcygpLmdldFN0cmVldCgpLi4uLgotICAqLwotICBwdWJsaWMgdm9pZCBhZGRQYXJlbnRHZXR0ZXIoU3RyaW5nIGdldHRlciwgU3RyaW5nIHR5cGUpCi0gIHsKLSAgICBpZihmR2V0dGVycyA9PSBudWxsKSBmR2V0dGVycyA9IG5ldyBWZWN0b3IoKTsKLSAgICBpZihmVHlwZXMgPT0gbnVsbCkgZlR5cGVzID0gbmV3IFZlY3RvcigpOwotICAgIGZHZXR0ZXJzLmFkZEVsZW1lbnQoZ2V0dGVyKTsKLSAgICBmVHlwZXMuYWRkRWxlbWVudCh0eXBlKTsKLSAgfQotCi0gIC8qCi0gICogdGhpcyB3aWxsIGJlIHVzZWQgd2hlbiBwYXNzaW5nIGJldHdlZW4gdHdvIHZpc2l0b3JzCi0gICoKLSAgKi8KLSAgcHVibGljIHZvaWQgYWRkUGFyZW50R2V0dGVyKFZlY3RvciBnZXR0ZXJzLCBWZWN0b3IgdHlwZXMpCi0gIHsKLSAgICBpZihmR2V0dGVycyA9PSBudWxsKSBmR2V0dGVycyA9IG5ldyBWZWN0b3IoKTsKLSAgICBpZihmVHlwZXMgPT0gbnVsbCkgZlR5cGVzID0gbmV3IFZlY3RvcigpOwotICAgIGludCBzaXplID0gZ2V0dGVycy5zaXplKCk7ICAgIAotICAgIGZvcihpbnQgaSA9IDA7IGk8c2l6ZTsgaSsrKXsKLSAgICAgIGZHZXR0ZXJzLmFkZEVsZW1lbnQoZ2V0dGVycy5nZXQoaSkpOwotICAgICAgZlR5cGVzLmFkZEVsZW1lbnQodHlwZXMuZ2V0KGkpKTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgU3RyaW5nIHJldHVyblBhcmVudEdldHRlcihpbnQgY291bnQpCi0gIHsKLSAgICBpZiAoZkdldHRlcnMgPT0gbnVsbCB8fCBjb3VudCA+IGZHZXR0ZXJzLnNpemUoKSkgcmV0dXJuIG51bGw7Ci0gICAgcmV0dXJuIChTdHJpbmcpZkdldHRlcnMuZ2V0KGNvdW50KTsgIAotICB9Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyByZXR1cm5QYXJlbnRHZXR0ZXJUeXBlKGludCBjb3VudCkKLSAgewotICAgIGlmIChmVHlwZXMgPT0gbnVsbCB8fCBjb3VudCA+IGZUeXBlcy5zaXplKCkpIHJldHVybiBudWxsOwotICAgIHJldHVybiAoU3RyaW5nKWZUeXBlcy5nZXQoY291bnQpOyAgCi0gIH0KLQotICBwcm90ZWN0ZWQgVmVjdG9yIHJldHVyblBhcmVudEdldHRlcigpCi0gIHsKLSAgICBpZiAoZkdldHRlcnMgPT0gbnVsbCApIHJldHVybiBuZXcgVmVjdG9yKCk7Ci0gICAgcmV0dXJuIGZHZXR0ZXJzOyAgCi0gIH0KLQotICBwcm90ZWN0ZWQgVmVjdG9yIHJldHVyblBhcmVudEdldHRlclR5cGUoKQotICB7Ci0gICAgaWYgKGZUeXBlcyA9PSBudWxsICkgcmV0dXJuIG5ldyBWZWN0b3IoKTsKLSAgICByZXR1cm4gZlR5cGVzOyAgCi0gIH0KLQotICBwcm90ZWN0ZWQgaW50IGdldHRlckNvdW50KCkKLSAgewotICAgIGlmKGZHZXR0ZXJzID09IG51bGwpIHJldHVybiAwOwotICAgIHJldHVybiBmR2V0dGVycy5zaXplKCk7IAotICB9Ci0KLQotICAvKioKLSAgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgc29tZSBzdGF0ZSBkYXRhIHRoYXQgaXMgaW1wb3J0YW50IGluIGdldHRpbmcgdGhlIAotICAqIFN0cmluZ3MgZm9yIGRpc3BsYXkgb2YgcmVzdWx0YW50IGJlYW5zCi0gICogQHJldHVybiBTdHJpbmcgdGhlIHN0cmluZyBvZiBnZXR0ZXJzIHRvIHRoaXMgcG9pbnQKLSAgKiBUaGUgaWRlYSBpcyB0aGF0IGJ5IHRoZSB0aW1lIHdlIGdldCB0byB0aGUgc2ltcGxlIHR5cGUKLSAgKiB3ZSBoYXZlIGdldEFkZHJlc3MoKS5nZXRTdHJlZXQoKS4uLi4KLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRQYXJlbnRHZXR0ZXJzKCkKLSAgewotICAgIHJldHVybiBmUGFyZW50R2V0dGVyczsKLSAgfQotICAKLSAgLyoKLSAgKiBUYWtlcyBpbiBhbiBvYmplY3QgdG8gYmUgYWN0ZWQgdXBvbiBieSB0aGlzIHZpc2l0b3IgYWN0aW9uCi0gICogQHBhcmFtIE9iamVjdCBUaGUgb2JqZWN0IHRvIGJlIGFjdGVkIHVwb24KLSAgKi8KLSAgcHVibGljIElTdGF0dXMgdmlzaXQgKE9iamVjdCBvYmplY3QpCi0gIHsKLSAgICAgVHlwZUVsZW1lbnQgZWxlbWVudCA9IChUeXBlRWxlbWVudClvYmplY3Q7Ci0gICAgICAgICAgCi0gICAgIGlmIChCb29sZWFuLlRSVUUuZXF1YWxzKGVsZW1lbnQuZ2V0UHJvcGVydHlBc09iamVjdChUeXBlRWxlbWVudC5OT05fSU5TVEFOVElBQkxFKSkpCi0JICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICAgICAKLSAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBTaW1wbGVFbGVtZW50KSBmSXNTaW1wbGUgPSB0cnVlOwotICAgICBlbHNlIGZJc1NpbXBsZSA9IGZhbHNlOwotCi0gICAgIC8vdGhpcyBjb3VsZCBiZSBhIHN0YXRlbGVzc2JlYW4gbmVlZCB0byBrbm93Ci0gICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgQmVhbkVsZW1lbnQgKXsKLSAgICAgICAgQmVhbkVsZW1lbnQgYmVhbiA9IChCZWFuRWxlbWVudCllbGVtZW50OwotICAgICAgICBpZiAoYmVhbi5pc1N0YXRlTGVzcygpKSBmU3RhdGVMZXNzQmVhbiA9IHRydWU7Ci0gICAgICAgIGlmIChiZWFuLmdldEF0dHJpYigpID09IEJlYW5FbGVtZW50LlJFQURPTkxZKSBmV3JpdGUgPSBmYWxzZTsKLSAgICAgfQotCi0KLQotICAgICAvL0NvbXBsZXggdHlwZSBzdXBwb3J0Ci0gICAgIC8vZmlyc3QgSSBuZWVkIHRvIGZpbmQgb3V0IGhvdyBtYW55IGxldmVscyBkZWVwCi0gICAgIGlmKGZMZXZlbHNEZWVwID09IC0xKXsKLSAgICAgICAgQXR0cmlidXRlVmlzaXRvciBhdHRyaWJ1dGVWaXNpdG9yID0gbmV3IEF0dHJpYnV0ZVZpc2l0b3IoKTsKLSAgICAgICAgTGV2ZWxzRGVlcFZpc2l0b3JBY3Rpb24gbGR2YSA9IG5ldyBMZXZlbHNEZWVwVmlzaXRvckFjdGlvbigpOwotICAgICAgICBhdHRyaWJ1dGVWaXNpdG9yLnJ1bihlbGVtZW50LGxkdmEpOwotICAgICAgICBmTGV2ZWxzRGVlcCA9IGxkdmEuZ2V0TGV2ZWxzRGVlcCgpOwotICAgICAgICAvL2NoZWNrIG91dCB0aGUgZmllbGRzIAotICAgICAgICBGaWVsZFZpc2l0b3IgZmllbGRWaXNpdG9yID0gbmV3IEZpZWxkVmlzaXRvcigpOwotICAgICAgICBMZXZlbHNEZWVwVmlzaXRvckFjdGlvbiBsZHZhMiA9IG5ldyBMZXZlbHNEZWVwVmlzaXRvckFjdGlvbigpOwotICAgICAgICBmaWVsZFZpc2l0b3IucnVuKGVsZW1lbnQsbGR2YTIpOwotCi0gICAgICAgIGlmKGZMZXZlbHNEZWVwIDwgbGR2YTIuZ2V0TGV2ZWxzRGVlcCgpKWZMZXZlbHNEZWVwID0gbGR2YTIuZ2V0TGV2ZWxzRGVlcCgpOyAKLSAgICAgICAgZkxldmVsc0RlZXArKzsKLSAgICAgfSAKLSAgICAgZkNvbHNwYW4gPSBmTGV2ZWxzRGVlcCAtIGZDdXJyZW50TGV2ZWw7Ci0KLSAgICAgLy9pZiB3ZSBoYXZlIGEgcmV0dXJuIHBhcmFtIHdpdGggbm8gZ2V0dGVyIG1ha2Ugc3VyZSB3ZSBhcmUgb24gdGhlIAotICAgICAvL2F0dHJpYnV0ZSBhbmQgbm90IHRoZSBwYXJhbWV0ZXIgdGhlbiByZXR1cm4KLSAgICAgaWYoZ2V0UmV0dXJuUGFyYW0oKSAmJiAgZWxlbWVudC5nZXRPd25pbmdFbGVtZW50KCkgaW5zdGFuY2VvZiBBdHRyaWJ1dGVFbGVtZW50VHlwZSAmJigoKEF0dHJpYnV0ZUVsZW1lbnRUeXBlKWVsZW1lbnQuZ2V0T3duaW5nRWxlbWVudCgpKS5nZXRHZXR0ZXJNZXRob2QoKSA9PSBudWxsKSApIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCi0gICAgIC8vQ29kZSBnZW4gZm9yIGFsbCBlbGVtZW50cwotICAgICBpZihmV3JpdGUpewotICAgICAgIGZidWZmZXIuYXBwZW5kKCI8VFI+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZkN1cnJlbnRMZXZlbDtpKyspewotICAgICAgICAgIGZidWZmZXIuYXBwZW5kKCI8VEQgV0lEVEg9XCI1JVwiPjwvVEQ+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgIH0KLSAgICAgICBmYnVmZmVyLmFwcGVuZCgiPFREIENPTFNQQU49XCIiICsgZkNvbHNwYW4gKyAiXCIgQUxJR049XCJMRUZUXCI+IiArIGVsZW1lbnQuZ2V0T3duaW5nRWxlbWVudCgpLmdldE5hbWUoKSArICI6PC9URD4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7ICAgCi0gICAgIH0KLSAgICAgaWYoZklzU2ltcGxlIHx8IFR5cGVGYWN0b3J5LnJlY29nbml6ZWRCZWFuKGVsZW1lbnQuZ2V0TmFtZSgpKSAKLSAgICAgICAgICAgICAgICB8fCAoZ2V0UmV0dXJuUGFyYW0oKSAmJiBmU3RhdGVMZXNzQmVhbikgCi0gICAgICAgICAgICAgICAgfHwgKGdldFJldHVyblBhcmFtKCkgJiYgVHlwZUZhY3RvcnkuaXNSZWNvZ25pemVkUmV0dXJuVHlwZShlbGVtZW50LmdldFR5cGVOYW1lKCkpKSl7Ci0gICAgICAgIGlmKGdldEluc3RhbmNlTmFtZSgpLmVxdWFscygiIikpewotICAgICAgICAgICBpZihmV3JpdGUpewotICAgICAgICAgICAgIERhdGFUeXBlIGRhdGFUeXBlID0gVHlwZUZhY3RvcnkuY3JlYXRlVHlwZShlbGVtZW50LmdldE5hbWUoKSxlbGVtZW50LmdldE93bmluZ0VsZW1lbnQoKS5nZXRNVUlEKCkpOwotICAgICAgICAgICAgIGZidWZmZXIuYXBwZW5kKGRhdGFUeXBlLmlucHV0Rm9ybShlbGVtZW50LmdldE93bmluZ0VsZW1lbnQoKS5nZXRNVUlEKCkpKTsKLSAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2V7Ci0gICAgICAgICAgIGlmKGdldFJldHVyblBhcmFtKCkgJiYgKFR5cGVGYWN0b3J5LmlzUmVjb2duaXplZFJldHVyblR5cGUoZWxlbWVudC5nZXRUeXBlTmFtZSgpKSB8fCBmU3RhdGVMZXNzQmVhbikpewotICAgICAgICAgICAgIERhdGFUeXBlIGRhdGFUeXBlID0gVHlwZUZhY3RvcnkuY3JlYXRlVHlwZShlbGVtZW50LmdldFR5cGVOYW1lKCksZWxlbWVudC5nZXRPd25pbmdFbGVtZW50KCkuZ2V0TVVJRCgpKTsgIAotICAgICAgICAgICAgIFN0cmluZyB1bmlxdWVOYW1lID0gInR5cGUiICsgZGF0YVR5cGUuZ2V0VW5pcXVlTmFtZSgpOwotICAgICAgICAgICAgIGZidWZmZXIuYXBwZW5kKCI8VEQ+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgICAgICAgIGZidWZmZXIuYXBwZW5kKCI8JSIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgICAgICAgICBmYnVmZmVyLmFwcGVuZCgiaWYoIiArICBnZXRJbnN0YW5jZU5hbWUoKSArICIgIT0gbnVsbCl7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgICAgICAgIFN0cmluZyBhZnRlclN0cmluZyA9IGdldEluc3RhbmNlTmFtZSgpOyAKLSAgICAgICAgICAgICBTdHJpbmcgdG1wU3RyaW5nID0gInRlYmVjZSI7Ci0gICAgICAgICAgICAgU3RyaW5nIHByZXZTdHJpbmcgPSBnZXRJbnN0YW5jZU5hbWUoKTsKLSAgICAgICAgICAgICBTdHJpbmcgbmV3VG1wU3RyaW5nID0gIiI7Ci0gICAgICAgICAgICAgZm9yKGludCBpPTA7aTxnZXR0ZXJDb3VudCgpO2krKyl7Ci0gICAgICAgICAgICAgICBuZXdUbXBTdHJpbmcgPSB0bXBTdHJpbmcgKyBpOwotICAgICAgICAgICAgICAgZmJ1ZmZlci5hcHBlbmQocmV0dXJuUGFyZW50R2V0dGVyVHlwZShpKSArICIgIiArIG5ld1RtcFN0cmluZyArICI9IiArIHByZXZTdHJpbmcgKyAiLiIgKyByZXR1cm5QYXJlbnRHZXR0ZXIoaSkgKyAiOyIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgICAgICAgICAgIHByZXZTdHJpbmcgPSBuZXdUbXBTdHJpbmc7IAotICAgICAgICAgICAgICAgZmJ1ZmZlci5hcHBlbmQoImlmKCIgKyBuZXdUbXBTdHJpbmcgKyAiICE9IG51bGwpeyIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgICAgICAgICAgIGFmdGVyU3RyaW5nID0gbmV3VG1wU3RyaW5nOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICBmYnVmZmVyLmFwcGVuZChlbGVtZW50LmdldE5hbWUoKSArICIgIiArIHVuaXF1ZU5hbWUgKyAiID0gIiArIGFmdGVyU3RyaW5nICsgIi4iICsgKChBdHRyaWJ1dGVFbGVtZW50VHlwZSllbGVtZW50LmdldE93bmluZ0VsZW1lbnQoKSkuZ2V0R2V0dGVyTWV0aG9kKCkrICI7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOyAgICAgICAgICAgICAKLSAgICAgICAgICAgICBmYnVmZmVyLmFwcGVuZChkYXRhVHlwZS5UeXBlQ29udmVyc2lvbih1bmlxdWVOYW1lKSk7Ci0gICAgICAgICAgICAgZm9yKGludCBpPTA7aTxnZXR0ZXJDb3VudCgpO2krKyl7Ci0gICAgICAgICAgICAgICBmYnVmZmVyLmFwcGVuZCgifSIpOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICBmYnVmZmVyLmFwcGVuZCgifSU+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgICAgICAgIGZidWZmZXIuYXBwZW5kKCI8L1REPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgICAgICAgfQotCi0gICAgICAgICAgIGVsc2V7IAotICAgICAgICAgICAgIGZidWZmZXIuYXBwZW5kKCI8VEQ+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgICAgICAgIGZidWZmZXIuYXBwZW5kKCI8JSIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgICAgICAgICBmYnVmZmVyLmFwcGVuZCgiaWYoIiArICBnZXRJbnN0YW5jZU5hbWUoKSArICIgIT0gbnVsbCl7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgICAgICAgIFN0cmluZyBhZnRlclN0cmluZyA9IGdldEluc3RhbmNlTmFtZSgpOwotICAgICAgICAgICAgIFN0cmluZyB0bXBTdHJpbmcgPSAidGViZWNlIjsKLSAgICAgICAgICAgICBTdHJpbmcgcHJldlN0cmluZyA9IGdldEluc3RhbmNlTmFtZSgpOwotICAgICAgICAgICAgIFN0cmluZyBuZXdUbXBTdHJpbmcgPSAiIjsKLSAgICAgICAgICAgICBmb3IoaW50IGk9MDtpPGdldHRlckNvdW50KCk7aSsrKXsKLSAgICAgICAgICAgICAgIG5ld1RtcFN0cmluZyA9IHRtcFN0cmluZyArIGk7Ci0gICAgICAgICAgICAgICBmYnVmZmVyLmFwcGVuZChyZXR1cm5QYXJlbnRHZXR0ZXJUeXBlKGkpICsgIiAiICsgbmV3VG1wU3RyaW5nICsgIj0iICsgcHJldlN0cmluZyArICIuIiArIHJldHVyblBhcmVudEdldHRlcihpKSArICI7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgICAgICAgICAgcHJldlN0cmluZyA9IG5ld1RtcFN0cmluZzsgCi0gICAgICAgICAgICAgICBmYnVmZmVyLmFwcGVuZCgiaWYoIiArIG5ld1RtcFN0cmluZyArICIgIT0gbnVsbCl7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgICAgICAgICAgYWZ0ZXJTdHJpbmcgPSBuZXdUbXBTdHJpbmc7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICAgIGZidWZmZXIuYXBwZW5kKCIlPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgICAgICAgICBmYnVmZmVyLmFwcGVuZCgiPCU9Iik7Ci0gICAgICAgICAgICAgZmJ1ZmZlci5hcHBlbmQoYWZ0ZXJTdHJpbmcgKyAiLiIgKyAoKEF0dHJpYnV0ZUVsZW1lbnRUeXBlKWVsZW1lbnQuZ2V0T3duaW5nRWxlbWVudCgpKS5nZXRHZXR0ZXJNZXRob2QoKSsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICAgICAgICAgZmJ1ZmZlci5hcHBlbmQoIiU+Iik7Ci0gICAgICAgICAgICAgZmJ1ZmZlci5hcHBlbmQoIjwlIik7Ci0gICAgICAgICAgICAgZm9yKGludCBpPTA7aTxnZXR0ZXJDb3VudCgpO2krKyl7Ci0gICAgICAgICAgICAgICBmYnVmZmVyLmFwcGVuZCgifSIpOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICBmYnVmZmVyLmFwcGVuZCgifSU+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgICAgICAgIGZidWZmZXIuYXBwZW5kKCI8L1REPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgCi0gICAgIH0KLSAgICAgICAgIAotICAgICAgLy9Ob3cgY2Fycnkgb24gZG93biB0aGUgcmVzdCBvZiB0aGUgYmVhbgotICAgICBlbHNlIHsKLSAgICAgICAgQXR0cmlidXRlVmlzaXRvciBhdHRyaWJ1dGVWaXNpdG9yID0gbmV3IEF0dHJpYnV0ZVZpc2l0b3IoKTsKLSAgICAgICAgYXR0cmlidXRlVmlzaXRvci5zZXRSZXNpZGVudFZlY3RvcjEocmV0dXJuUGFyZW50R2V0dGVyKCkpOwotICAgICAgICBhdHRyaWJ1dGVWaXNpdG9yLnNldFJlc2lkZW50VmVjdG9yMihyZXR1cm5QYXJlbnRHZXR0ZXJUeXBlKCkpOwotICAgICAgICBJbnB1dEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3IgaW5wdXRGaWxlQXR0cmlidXRlR2VuZXJhdG9yID0gbmV3IElucHV0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvcihmYnVmZmVyLChmQ3VycmVudExldmVsICsgMSksZkxldmVsc0RlZXApOwotICAgICAgICBpbnB1dEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3Iuc2V0UmV0dXJuUGFyYW0oZ2V0UmV0dXJuUGFyYW0oKSk7Ci0gICAgICAgIGlucHV0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvci5zZXRJbnN0YW5jZU5hbWUoZkluc3RhbmNlTmFtZSk7Ci0gICAgICAgIGF0dHJpYnV0ZVZpc2l0b3IucnVuKGVsZW1lbnQsaW5wdXRGaWxlQXR0cmlidXRlR2VuZXJhdG9yKTsKLSAgICAgICAgZmJ1ZmZlciA9IGlucHV0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvci5nZXRTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAKLSAgICAgICAgLy9ub3cgZG8gZmllbGRzIHZlcnkgc2ltaWxhcgotICAgICAgICBGaWVsZFZpc2l0b3IgZmllbGRWaXNpdG9yID0gbmV3IEZpZWxkVmlzaXRvcigpOwotICAgICAgICBmaWVsZFZpc2l0b3Iuc2V0UmVzaWRlbnRWZWN0b3IxKHJldHVyblBhcmVudEdldHRlcigpKTsKLSAgICAgICAgZmllbGRWaXNpdG9yLnNldFJlc2lkZW50VmVjdG9yMihyZXR1cm5QYXJlbnRHZXR0ZXJUeXBlKCkpOwotICAgICAgICBJbnB1dEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3IgaW5wdXRGaWxlQXR0cmlidXRlR2VuZXJhdG9yMiA9IG5ldyBJbnB1dEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3IoZmJ1ZmZlciwoZkN1cnJlbnRMZXZlbCArIDEpLGZMZXZlbHNEZWVwKTsKLSAgICAgICAgaW5wdXRGaWxlQXR0cmlidXRlR2VuZXJhdG9yMi5zZXRSZXR1cm5QYXJhbShnZXRSZXR1cm5QYXJhbSgpKTsKLSAgICAgICAgaW5wdXRGaWxlQXR0cmlidXRlR2VuZXJhdG9yMi5zZXRJbnN0YW5jZU5hbWUoZkluc3RhbmNlTmFtZSk7Ci0gICAgICAgIGZpZWxkVmlzaXRvci5ydW4oZWxlbWVudCxpbnB1dEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3IyKTsKLSAgICAgICAgZmJ1ZmZlciA9IGlucHV0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvcjIuZ2V0U3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgCi0gICAgICAgIAotCi0gICAgIH0KLQotCi0gICAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29kZWdlbi9MZXZlbHNEZWVwVmlzaXRvckFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29kZWdlbi9MZXZlbHNEZWVwVmlzaXRvckFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjJlMWE5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvZGVnZW4vTGV2ZWxzRGVlcFZpc2l0b3JBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnNhbXBsZWFwcC5jb2RlZ2VuOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5WaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLlZpc2l0b3JBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uYmVhbi5BdHRyaWJ1dGVWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLmJlYW4uRmllbGRWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLmJlYW4uVHlwZVZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuQXR0cmlidXRlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbC5CZWFuRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbC5UeXBlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbC5UeXBlRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkVsZW1lbnQ7Ci0KLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSBMZXZlbHNEZWVwVmlzaXRvckFjdGlvbi4KLSogKi8KLXB1YmxpYyBjbGFzcyBMZXZlbHNEZWVwVmlzaXRvckFjdGlvbiBpbXBsZW1lbnRzIFZpc2l0b3JBY3Rpb24gCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLQotICBwcml2YXRlIGludCBmTGV2ZWxzRGVlcDsKLSAgcHJpdmF0ZSBpbnQgZkRlZXBlc3RMZXZlbDsKLSAgCi0gIC8qKgotICAqIENvbnN0cnVjdG9yLgotICAqIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50Ci0gICogCi0gICovCi0gIHB1YmxpYyBMZXZlbHNEZWVwVmlzaXRvckFjdGlvbiAoKQotICB7Ci0gICAgZkxldmVsc0RlZXAgPSAwOwotICB9Ci0KLSAgLyoqCi0gICogQ29uc3RydWN0b3IuCi0gICogVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQKLSAgKiAKLSAgKi8KLSAgcHVibGljIExldmVsc0RlZXBWaXNpdG9yQWN0aW9uIChpbnQgY3VycmVudCxib29sZWFuIGluY3JlbWVudCkKLSAgewotICAgIGZMZXZlbHNEZWVwID0gY3VycmVudDsKLSAgICBpZihpbmNyZW1lbnQpIGZMZXZlbHNEZWVwKys7Ci0gICAgZkRlZXBlc3RMZXZlbCA9IGZMZXZlbHNEZWVwOyAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgaW5pdGlhbGl6ZShTdHJpbmcgcmVzaWRlbnQpCi0gIHsKLSAgICAvL25vdGhpbmcgdG8gYmUgZG9uZSBidXQgbXVzdCBiZSBpbXBsZW1lbnRlZAotICB9Ci0KLQotCi0gIC8qKgotICAqIFRoZSB2aXNpdG9yIHRoYXQgY2FsbGVkIHRoaXMgVmlzaXRvckFjdGlvbgotICAqIEBwYXJhbSB2aXNpdG9yIHRoZSB2aXNpdG9yIHRoYXQgY2FsbGVkIHRoaXMgdmlzaXRvciBhY3Rpb24KLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0VmlzaXRvcihWaXNpdG9yIHZpc2l0b3IpCi0gIHsKLSAgfQotCi0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbGV2ZWwgb2YgbmVzdGluZyB3aXRoaW4gdGhpcyBiZWFuCi0gICogQHJldHVybiBpbnQgcmV0dXJucyB0aGUgaW50IG51bWJlciByZXByZXNlbnRpbmcgdGhlIG51bWJlciBvZiBuZXN0cyBvZiB0aGlzIGJlYW4KLSAgKi8KLSAgcHVibGljIGludCBnZXRMZXZlbHNEZWVwKCkKLSAgewotICAgICByZXR1cm4gZkRlZXBlc3RMZXZlbDsKLSAgfQotIAotCi0gIC8qKgotICAqIFRha2VzIGluIGFuIG9iamVjdCB0byBiZSBhY3RlZCB1cG9uIGJ5IHRoaXMgdmlzaXRvciBhY3Rpb24KLSAgKiBAcGFyYW0gT2JqZWN0IFRoZSBvYmplY3QgdG8gYmUgYWN0ZWQgdXBvbgotICAqLwotICBwdWJsaWMgSVN0YXR1cyB2aXNpdCAoT2JqZWN0IG9iamVjdCkKLSAgewotICAgICAgRWxlbWVudCBlbGVtZW50ID0gKEVsZW1lbnQpb2JqZWN0OwotICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBBdHRyaWJ1dGVFbGVtZW50IHx8IGVsZW1lbnQgaW5zdGFuY2VvZiBUeXBlRWxlbWVudCl7Ci0gICAgICAgICBUeXBlVmlzaXRvciB0eXBlVmlzaXRvciA9IG5ldyBUeXBlVmlzaXRvcigpOwotICAgICAgICAgTGV2ZWxzRGVlcFZpc2l0b3JBY3Rpb24gbHZkYSA9IG5ldyBMZXZlbHNEZWVwVmlzaXRvckFjdGlvbihmTGV2ZWxzRGVlcCx0cnVlKTsKLSAgICAgICAgIHR5cGVWaXNpdG9yLnJ1bihlbGVtZW50LGx2ZGEpOwotCi0gICAgICAgICBpZiAobHZkYS5nZXRMZXZlbHNEZWVwKCkgPiBmRGVlcGVzdExldmVsKSBmRGVlcGVzdExldmVsID0gbHZkYS5nZXRMZXZlbHNEZWVwKCk7IAotICAgICAgICAgCi0gICAgICB9Ci0gICAgICBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgQmVhbkVsZW1lbnQgJiYgIShUeXBlRmFjdG9yeS5yZWNvZ25pemVkQmVhbihlbGVtZW50LmdldE5hbWUoKSkpKXsKLSAgICAgICAgIEF0dHJpYnV0ZVZpc2l0b3IgYXR0cmlidXRlVmlzaXRvciA9IG5ldyBBdHRyaWJ1dGVWaXNpdG9yKCk7Ci0gICAgICAgICBMZXZlbHNEZWVwVmlzaXRvckFjdGlvbiBsdmRhID0gbmV3IExldmVsc0RlZXBWaXNpdG9yQWN0aW9uKGZMZXZlbHNEZWVwLGZhbHNlKTsKLSAgICAgICAgIGF0dHJpYnV0ZVZpc2l0b3IucnVuKGVsZW1lbnQsbHZkYSk7Ci0gICAgICAgICBpZiAobHZkYS5nZXRMZXZlbHNEZWVwKCkgPiBmRGVlcGVzdExldmVsKSBmRGVlcGVzdExldmVsID0gbHZkYS5nZXRMZXZlbHNEZWVwKCk7IAotICAgCi0gICAgICAgICBGaWVsZFZpc2l0b3IgZmllbGRWaXNpdG9yID0gbmV3IEZpZWxkVmlzaXRvcigpOwotICAgICAgICAgTGV2ZWxzRGVlcFZpc2l0b3JBY3Rpb24gbHZkYTIgPSBuZXcgTGV2ZWxzRGVlcFZpc2l0b3JBY3Rpb24oZkxldmVsc0RlZXAsZmFsc2UpOwotICAgICAgICAgZmllbGRWaXNpdG9yLnJ1bihlbGVtZW50LGx2ZGEyKTsKLSAgICAgICAgIGlmIChsdmRhMi5nZXRMZXZlbHNEZWVwKCkgPiBmRGVlcGVzdExldmVsKSBmRGVlcGVzdExldmVsID0gbHZkYTIuZ2V0TGV2ZWxzRGVlcCgpOyAKLSAgIAotICAgICAgfQotICAgICAgICAgCi0gICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOyAgIAotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvZGVnZW4vTWV0aG9kRmlsZUdlbmVyYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29kZWdlbi9NZXRob2RGaWxlR2VuZXJhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhZWM1MGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29kZWdlbi9NZXRob2RGaWxlR2VuZXJhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnNhbXBsZWFwcC5jb2RlZ2VuOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlN0cmluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLkdlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5iZWFuLk1ldGhvZFZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50OwotCi0KLS8qKgotKiBPYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgTWV0aG9kRmlsZWdlbmVyYXRvci4KLSogKi8KLXB1YmxpYyBjbGFzcyBNZXRob2RGaWxlR2VuZXJhdG9yIGV4dGVuZHMgR2VuZXJhdG9yIAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gICAKLSAgcHVibGljIFN0cmluZyBmSW5wdXROYW1lOwotICAvKioKLSAgKiBDb25zdHJ1Y3Rvci4KLSAgKiAKLSAgKi8KLSAgcHVibGljIE1ldGhvZEZpbGVHZW5lcmF0b3IgKFN0cmluZyBpbnB1dHMpCi0gIHsKLSAgICBzdXBlcigpOwotICAgIGZJbnB1dE5hbWUgPSBpbnB1dHM7Ci0gIH0KLQotICAgLyoqCi0gICogQ29uc3RydWN0b3IuCi0gICogQHBhcmFtIFN0cmluZ0J1ZmZlciBidWZmZXIgdG8gYXBwZW5kIGNvZGVnZW4gCi0gICovCi0gIHB1YmxpYyBNZXRob2RGaWxlR2VuZXJhdG9yIChTdHJpbmdCdWZmZXIgYnVmZmVyLFN0cmluZyBpbnB1dHMpCi0gIHsKLSAgICBzdXBlcihidWZmZXIpOwotICAgIGZJbnB1dE5hbWUgPSBpbnB1dHM7Ci0gIH0KLQotCi0gIHB1YmxpYyB2b2lkIHNldEZpbGVOYW1lcyhTdHJpbmcgaW5wdXRzKQotICB7Ci0gICAgZklucHV0TmFtZSA9IGlucHV0czsKLSAgfQotCi0gIC8vcHVibGljIHN0YXRpYyBTdHJpbmcgTE9DQVRPUiA9ICJMb2NhdG9yIjsKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgQkVBTiA9ICJQcm94eSI7Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIEdFVCA9ICJnZXQiOwotCi0gIAotICAvL3Rha2VzIGluIGEgYmVhbiBub2RlCi0gIHB1YmxpYyBJU3RhdHVzIHZpc2l0IChPYmplY3Qgb2JqZWN0KQotICAgewotICAgICAgRWxlbWVudCBiZWFuRWxlbWVudCA9IChFbGVtZW50KW9iamVjdDsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8JUBwYWdlIGNvbnRlbnRUeXBlPVwidGV4dC9odG1sO2NoYXJzZXQ9VVRGLThcIiU+Iik7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPEhUTUw+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgKyAiPEhFQUQ+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgKyAiPFRJVExFPk1ldGhvZHM8L1RJVExFPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FICsgIjwvSEVBRD4iICsgU3RyaW5nVXRpbHMuTkVXTElORSArICI8Qk9EWT4iICsgU3RyaW5nVXRpbHMuTkVXTElORSArICI8SDE+TWV0aG9kczwvSDE+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgKyAiPFVMPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIE1ldGhvZFZpc2l0b3IgbWV0aG9kVmlzaXRvciA9IG5ldyBNZXRob2RWaXNpdG9yKCk7Ci0gICAgICBNZXRob2RGaWxlSGVscEdlbmVyYXRvciBtZXRob2RGaWxlSGVscEdlbmVyYXRvciA9IG5ldyBNZXRob2RGaWxlSGVscEdlbmVyYXRvcihmYnVmZmVyLGZJbnB1dE5hbWUpOyAKLSAgICAgIG1ldGhvZFZpc2l0b3IucnVuKGJlYW5FbGVtZW50LG1ldGhvZEZpbGVIZWxwR2VuZXJhdG9yKTsKLSAgICAgIGZidWZmZXIgPSBtZXRob2RGaWxlSGVscEdlbmVyYXRvci5nZXRTdHJpbmdCdWZmZXIoKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8L1VMPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FICsgIjwvQk9EWT4iICsgU3RyaW5nVXRpbHMuTkVXTElORSArICI8L0hUTUw+Iik7Ci0gICAgICAKLSAgICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3NhbXBsZWFwcC9jb2RlZ2VuL01ldGhvZEZpbGVIZWxwR2VuZXJhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3NhbXBsZWFwcC9jb2RlZ2VuL01ldGhvZEZpbGVIZWxwR2VuZXJhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1ZDBiNzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29kZWdlbi9NZXRob2RGaWxlSGVscEdlbmVyYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnNhbXBsZWFwcC5jb2RlZ2VuOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlN0cmluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsLk1ldGhvZEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50OwotCi0KLS8qKgotKiBPYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgTWV0aG9kRmlsZWdlbmVyYXRvci4KLSogKi8KLXB1YmxpYyBjbGFzcyBNZXRob2RGaWxlSGVscEdlbmVyYXRvciBleHRlbmRzIE1ldGhvZEZpbGVHZW5lcmF0b3IKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotCi0gIC8qKgotICAqIENvbnN0cnVjdG9yLgotICAqCi0gICovCi0gIHB1YmxpYyBNZXRob2RGaWxlSGVscEdlbmVyYXRvciAoU3RyaW5nQnVmZmVyIGJ1ZmZlcixTdHJpbmcgaW5wdXROYW1lKQotICB7Ci0gICAgICBzdXBlcihidWZmZXIsaW5wdXROYW1lKTsKLSAgfQotCi0KLSAgLy90YWtlcyBpbiBhIE1ldGhvZCBub2RlCi0gIHB1YmxpYyBJU3RhdHVzIHZpc2l0IChPYmplY3Qgb2JqZWN0KQotICB7Ci0gICAgICBFbGVtZW50IG1ldGhvZEVsZW1lbnQgPSAoRWxlbWVudClvYmplY3Q7Ci0gICAgICBNZXRob2RFbGVtZW50IG1ldGhvZCA9IChNZXRob2RFbGVtZW50KW1ldGhvZEVsZW1lbnQ7Ci0gICAgICBpZiAobWV0aG9kLmdldE1ldGhvZE9tbWlzc2lvbigpKSByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICAgIAotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjxMST48QSBIUkVGPVwiIiArIGZJbnB1dE5hbWUgKyAiP21ldGhvZD0iICsgbWV0aG9kLmdldE51bWJlcklEKCkpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIlwiIFRBUkdFVD1cImlucHV0c1wiPiAiICsgbWV0aG9kLmdldERpc3BsYXlOYW1lKCkpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjwvQT48L0xJPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLQotICAgICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3NhbXBsZWFwcC9jb2RlZ2VuL1Jlc3VsdEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvZGVnZW4vUmVzdWx0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTg2NmY0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvZGVnZW4vUmVzdWx0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNjEyICAgMTQ1NDMzIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5zYW1wbGVhcHAuY29kZWdlbjsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5iZWFuLlR5cGVWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsLkF0dHJpYnV0ZUVsZW1lbnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsLkRhdGFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsLlR5cGVGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuQmFzaWNFbGVtZW50OwotCi0vKioKLSogT2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBhIFJlc3VsdEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3IuCi0qICovCi1wdWJsaWMgY2xhc3MgUmVzdWx0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvciBleHRlbmRzIFJlc3VsdEZpbGVIZWxwMkdlbmVyYXRvciAKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAgCi0gIHByaXZhdGUgVmVjdG9yIGZTZXR0ZXJWZWN0b3I7IAotCi0gIC8qKgotICAqIENvbnN0cnVjdG9yLgotICAqIEBwYXJhbSBidWZmZXIgU3RyaW5nQnVmZmVyIG9iamVjdCB0aGF0IHRoaXMgY29kZSBnZW5lcmF0b3Igd3JpdGVzIHRvIAotICAqLwotICBwdWJsaWMgUmVzdWx0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvciAoU3RyaW5nQnVmZmVyIGJ1ZmZlcikKLSAgewotICAgICAgc3VwZXIoYnVmZmVyKTsKLSAgICAgIAotICB9Ci0gIAotICAvKioKLSAgKiBTZXR0ZXIgdmVjdG9yCi0gICovCi0gIHB1YmxpYyBWZWN0b3IgZ2V0U2V0dGVyVmVjdG9yKCkKLSAgewotICAgICAgcmV0dXJuIGZTZXR0ZXJWZWN0b3I7Ci0gIH0KLSAgCi0KLSAgLyoqCi0gICogVmlzaXQgTWV0aG9kIGdlbmVyYXRlcyBjb2RlIGZvciB0aGlzIFZpc2l0b3IKLSAgKiBAcGFyYW0gUGFyYW1ldGVyIHBhcmFtZXRlciBjb2RlIHdpbGwgYmUgZ2VuZXJhdGVkIAotICAqLwotICBwdWJsaWMgSVN0YXR1cyB2aXNpdCAoT2JqZWN0IG9iamVjdCkKLSAgewotICAgICBBdHRyaWJ1dGVFbGVtZW50VHlwZSBhdHRyaWJ1dGVFbGVtZW50VHlwZSA9IChBdHRyaWJ1dGVFbGVtZW50VHlwZSlvYmplY3Q7Ci0gICAgIGlmKGF0dHJpYnV0ZUVsZW1lbnRUeXBlLmdldFNldHRlck1ldGhvZCgpID09IG51bGwpIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICAgICBCYXNpY0VsZW1lbnQgZWxlbWVudCA9IChCYXNpY0VsZW1lbnQpb2JqZWN0OwotICAgICBpZihhdHRyaWJ1dGVFbGVtZW50VHlwZS5nZXRUeXBlRWxlbWVudCgpLmlzU2ltcGxlKCkgfHwgVHlwZUZhY3RvcnkucmVjb2duaXplZEJlYW4oYXR0cmlidXRlRWxlbWVudFR5cGUuZ2V0VHlwZUVsZW1lbnQoKS5nZXROYW1lKCkpKXsgICAgICAKLSAgICAgICAgLy9zdGFydCB0aGUgY29kZWdlbgotICAgICAgICAvL2FzayB0aGUgZGF0YXR5cGUgZm9yIGl0cyByZXF1ZXN0IGxpbmUsIGl0IG1heSBuZWVkIG1hcmsgdXAgb3Igbm90LgotICAgICAgICAvL2llIEZvciB0aGUgc2ltcGxlIHR5cGVzIHdlIG5lZWQgdGhlIG1hcmsgdXAKLSAgICAgICAgLy9mb3IgdGhlIGRvbSBlbGVtZW50IHdlIGNhbnQgdXNlIGl0LgotICAgICAgICBEYXRhVHlwZSBkYXRhVHlwZSA9IFR5cGVGYWN0b3J5LmNyZWF0ZVR5cGUoYXR0cmlidXRlRWxlbWVudFR5cGUuZ2V0VHlwZUVsZW1lbnQoKS5nZXROYW1lKCksZWxlbWVudC5nZXRNVUlEKCkpOwotICAgICAgICBzZXRUeXBlT3duZXJJZChpZE5hbWUoZWxlbWVudC5nZXROYW1lKCkpKTsgCi0gICAgICAgIGZidWZmZXIuYXBwZW5kKGRhdGFUeXBlLmdldFJlcXVlc3RDb2RlKGVsZW1lbnQuZ2V0TVVJRCgpLGdldFR5cGVPd25lcklkKCkpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgfQotICAgICAKLSAgICAgVHlwZVZpc2l0b3IgdHlwZVZpc2l0b3IgPSBuZXcgVHlwZVZpc2l0b3IoKTsKLSAgICAgUmVzdWx0RmlsZVR5cGVHZW5lcmF0b3IgcmVzdWx0RmlsZVR5cGVHZW5lcmF0b3IgPSBuZXcgUmVzdWx0RmlsZVR5cGVHZW5lcmF0b3IoZmJ1ZmZlcik7Ci0gICAgIHJlc3VsdEZpbGVUeXBlR2VuZXJhdG9yLnNldE51bWJlckZhY3RvcnkoZ2V0TnVtYmVyRmFjdG9yeSgpKTsKLSAgICAgcmVzdWx0RmlsZVR5cGVHZW5lcmF0b3Iuc2V0VHlwZU93bmVySWQoZ2V0VHlwZU93bmVySWQoKSk7Ci0gICAgIAotICAgICB0eXBlVmlzaXRvci5ydW4oYXR0cmlidXRlRWxlbWVudFR5cGUscmVzdWx0RmlsZVR5cGVHZW5lcmF0b3IpOwotICAgICBzZXROdW1iZXJGYWN0b3J5KHJlc3VsdEZpbGVUeXBlR2VuZXJhdG9yLmdldE51bWJlckZhY3RvcnkoKSk7Ci0gICAgIFZlY3RvciBzZXR0ZXJJbnB1dHMgPSByZXN1bHRGaWxlVHlwZUdlbmVyYXRvci5nZXRSZXNpZGVudFZlY3RvcigpOyAKLSAgICAgcHV0UmVzaWRlbnRWZWN0b3IoYXR0cmlidXRlRWxlbWVudFR5cGUuZ2V0U2V0dGVyU2lnbmF0dXJlKChTdHJpbmcpc2V0dGVySW5wdXRzLmZpcnN0RWxlbWVudCgpKSk7Ci0gICAgIAotICAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfSAgIAotCi0gIAotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvZGVnZW4vUmVzdWx0RmlsZUdlbmVyYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29kZWdlbi9SZXN1bHRGaWxlR2VuZXJhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0Mjc3MjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29kZWdlbi9SZXN1bHRGaWxlR2VuZXJhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTIzICAgMTQyMjk2IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uc2FtcGxlYXBwLmNvZGVnZW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uR2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLmJlYW4uTWV0aG9kVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbC5CZWFuRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkVsZW1lbnQ7Ci0KLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSBNZXRob2RGaWxlZ2VuZXJhdG9yLgotKiAqLwotcHVibGljIGNsYXNzIFJlc3VsdEZpbGVHZW5lcmF0b3IgZXh0ZW5kcyBHZW5lcmF0b3IgCi17Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFRSSVBMRV9UQUIgPSBHZW5lcmF0b3IuRE9VQkxFX1RBQiArIEdlbmVyYXRvci5UQUI7IAotICBwdWJsaWMgc3RhdGljIFN0cmluZyBRVUFEX1RBQiA9IEdlbmVyYXRvci5ET1VCTEVfVEFCICsgR2VuZXJhdG9yLkRPVUJMRV9UQUI7Ci0gIAotICBwcml2YXRlIFN0cmluZyBzZXRFbmRwb2ludE1ldGhvZDsKLQotICAvKioKLSAgKiBDb25zdHJ1Y3Rvci4KLSAgKiAKLSAgKi8KLSAgcHVibGljIFJlc3VsdEZpbGVHZW5lcmF0b3IgKCkKLSAgewotICAgICAgc3VwZXIoKTsKLSAgfQotCi0gICAvKioKLSAgKiBDb25zdHJ1Y3Rvci4KLSAgKiAKLSAgKi8KLSAgcHVibGljIFJlc3VsdEZpbGVHZW5lcmF0b3IgKFN0cmluZ0J1ZmZlciBidWZmZXIpCi0gIHsKLSAgICAgIHN1cGVyKGJ1ZmZlcik7Ci0gIH0KLQotICAvL3Rha2VzIGluIGEgYmVhbiBub2RlCi0gIHB1YmxpYyBJU3RhdHVzIHZpc2l0IChPYmplY3Qgb2JqZWN0KQotICB7Ci0gICAgICBFbGVtZW50IGJlYW5FbGVtZW50ID0gKEVsZW1lbnQpb2JqZWN0OwotICAgICAgQmVhbkVsZW1lbnQgYmVhbiA9IChCZWFuRWxlbWVudCliZWFuRWxlbWVudDsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8JUBwYWdlIGNvbnRlbnRUeXBlPVwidGV4dC9odG1sO2NoYXJzZXQ9VVRGLThcIiU+IisgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPCUgcmVxdWVzdC5zZXRDaGFyYWN0ZXJFbmNvZGluZyhcIlVURi04XCIpOyAlPiIrIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjxIVE1MPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8SEVBRD4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPFRJVExFPlJlc3VsdDwvVElUTEU+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjwvSEVBRD4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPEJPRFk+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjxIMT5SZXN1bHQ8L0gxPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0KLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8anNwOnVzZUJlYW4gaWQ9XCIiKyBnZXRTZXNzaW9uQmVhbklkKCkgKyAiXCIgc2NvcGU9XCJzZXNzaW9uXCIgY2xhc3M9XCIiKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKGJlYW4uZ2V0TmFtZSgpICsgIlwiIC8+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgaWYgKHNldEVuZHBvaW50TWV0aG9kICE9IG51bGwgJiYgc2V0RW5kcG9pbnRNZXRob2QubGVuZ3RoKCkgPiAwKQotICAgICAgewotICAgICAgICBmYnVmZmVyLmFwcGVuZCgiPCUiKTsKLSAgICAgICAgZmJ1ZmZlci5hcHBlbmQoU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICAgIGZidWZmZXIuYXBwZW5kKCJpZiAocmVxdWVzdC5nZXRQYXJhbWV0ZXIoXCJlbmRwb2ludFwiKSAhPSBudWxsICYmIHJlcXVlc3QuZ2V0UGFyYW1ldGVyKFwiZW5kcG9pbnRcIikubGVuZ3RoKCkgPiAwKSIpOwotICAgICAgICBmYnVmZmVyLmFwcGVuZChTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgICAgZmJ1ZmZlci5hcHBlbmQoZ2V0U2Vzc2lvbkJlYW5JZCgpKTsKLSAgICAgICAgZmJ1ZmZlci5hcHBlbmQoIi4iKTsKLSAgICAgICAgaW50IGluZGV4ID0gc2V0RW5kcG9pbnRNZXRob2QuaW5kZXhPZignPycpOwotICAgICAgICBpZiAoaW5kZXggIT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICBmYnVmZmVyLmFwcGVuZChzZXRFbmRwb2ludE1ldGhvZC5zdWJzdHJpbmcoMCwgaW5kZXgpKTsKLSAgICAgICAgICBmYnVmZmVyLmFwcGVuZCgiKG5ldyAiKTsKLSAgICAgICAgICBmYnVmZmVyLmFwcGVuZChzZXRFbmRwb2ludE1ldGhvZC5zdWJzdHJpbmcoaW5kZXgrMSwgc2V0RW5kcG9pbnRNZXRob2QubGVuZ3RoKCkpKTsKLSAgICAgICAgICBmYnVmZmVyLmFwcGVuZCgiKHJlcXVlc3QuZ2V0UGFyYW1ldGVyKFwiZW5kcG9pbnRcIikpKTsiKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBmYnVmZmVyLmFwcGVuZChzZXRFbmRwb2ludE1ldGhvZCk7Ci0gICAgICAgICAgZmJ1ZmZlci5hcHBlbmQoIihyZXF1ZXN0LmdldFBhcmFtZXRlcihcImVuZHBvaW50XCIpKTsiKTsKLSAgICAgICAgfQotICAgICAgICBmYnVmZmVyLmFwcGVuZChTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgICAgZmJ1ZmZlci5hcHBlbmQoIiU+Iik7Ci0gICAgICAgIGZidWZmZXIuYXBwZW5kKFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgfQotICAgICAgZmJ1ZmZlci5hcHBlbmQoU3RyaW5nVXRpbHMuTkVXTElORSk7IAotICAgICAgICAgICAgCi0gICAgICAvL2NhcnJ5IG9uIHdpdGggcmVndWxhciBnb3JwCi0gICAgICBmYnVmZmVyLmFwcGVuZCgiPCUiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiU3RyaW5nIG1ldGhvZCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKFwibWV0aG9kXCIpOyIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCJpbnQgbWV0aG9kSUQgPSAwOyIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCJpZiAobWV0aG9kID09IG51bGwpIG1ldGhvZElEID0gLTE7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgKyAiIiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoImlmKG1ldGhvZElEICE9IC0xKSBtZXRob2RJRCA9IEludGVnZXIucGFyc2VJbnQobWV0aG9kKTsiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7IAotICAgICAgZmJ1ZmZlci5hcHBlbmQoImJvb2xlYW4gZ290TWV0aG9kID0gZmFsc2U7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLQotICAgICAgZmJ1ZmZlci5hcHBlbmQoInRyeSB7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoInN3aXRjaCAobWV0aG9kSUQpeyAiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgCi0gICAgICAvLyBnbyB0byB0aGUgbmV4dCBnZW5lcmF0b3IKLSAgICAgIE1ldGhvZFZpc2l0b3IgbWV0aG9kVmlzaXRvciA9IG5ldyBNZXRob2RWaXNpdG9yKCk7Ci0gICAgICBSZXN1bHRGaWxlSGVscDFHZW5lcmF0b3IgcmVzdWx0RmlsZUhlbHAxR2VuZXJhdG9yID0gbmV3IFJlc3VsdEZpbGVIZWxwMUdlbmVyYXRvcihmYnVmZmVyKTsgCi0gICAgICByZXN1bHRGaWxlSGVscDFHZW5lcmF0b3Iuc2V0TnVtYmVyRmFjdG9yeShnZXROdW1iZXJGYWN0b3J5KCkpOwotICAgICAgcmVzdWx0RmlsZUhlbHAxR2VuZXJhdG9yLnNldENsaWVudEZvbGRlclBhdGgoZ2V0Q2xpZW50Rm9sZGVyUGF0aCgpKTsKLSAgICAgIG1ldGhvZFZpc2l0b3IucnVuKGJlYW5FbGVtZW50LHJlc3VsdEZpbGVIZWxwMUdlbmVyYXRvcik7Ci0gICAgICBzZXROdW1iZXJGYWN0b3J5KHJlc3VsdEZpbGVIZWxwMUdlbmVyYXRvci5nZXROdW1iZXJGYWN0b3J5KCkpOwotCi0gICAgICBmYnVmZmVyID0gcmVzdWx0RmlsZUhlbHAxR2VuZXJhdG9yLmdldFN0cmluZ0J1ZmZlcigpOwotIAotICAgICAgZmJ1ZmZlci5hcHBlbmQoIn0iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7ICAgIAotICAgICAgZmJ1ZmZlci5hcHBlbmQoIn0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7ICIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCIlPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCJleGNlcHRpb246IDwlPSBlICU+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjwlIiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoInJldHVybjsiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgifSIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCJpZighZ290TWV0aG9kKXsiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiJT4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgicmVzdWx0OiBOL0EiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPCUiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgifSIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCIlPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8L0JPRFk+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjwvSFRNTD4iKTsKLQotICAgICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgfQotCi0gIC8qKgotICAgKiBAcGFyYW0gc2V0RW5kcG9pbnRNZXRob2QgVGhlIHNldEVuZHBvaW50TWV0aG9kIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNldEVuZHBvaW50TWV0aG9kKFN0cmluZyBzZXRFbmRwb2ludE1ldGhvZCkKLSAgewotICAgIHRoaXMuc2V0RW5kcG9pbnRNZXRob2QgPSBzZXRFbmRwb2ludE1ldGhvZDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29kZWdlbi9SZXN1bHRGaWxlSGVscDFHZW5lcmF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvZGVnZW4vUmVzdWx0RmlsZUhlbHAxR2VuZXJhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExNjc3ZjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29kZWdlbi9SZXN1bHRGaWxlSGVscDFHZW5lcmF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uc2FtcGxlYXBwLmNvZGVnZW47Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlN0cmluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLkdlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5iZWFuLlBhcmFtZXRlclZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uYmVhbi5SZXR1cm5QYXJhbWV0ZXJWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsLkRhdGFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsLk1ldGhvZEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuVHlwZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50OwotCi0KLS8qKgotKiBPYmplY3RzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgUmVzdWx0RmlsZWdlbmVyYXRvci4KLSogKi8KLXB1YmxpYyBjbGFzcyBSZXN1bHRGaWxlSGVscDFHZW5lcmF0b3IgZXh0ZW5kcyBSZXN1bHRGaWxlR2VuZXJhdG9yIAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gICAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5JVElBTF9TVEFURSA9IDE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZJTkFMX1NUQVRFID0gMjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTVRFTVAgPSAibXRlbXAiOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBCRUFOID0gIlByb3h5IjsKLSAgCi0gIC8qKgotICAqIENvbnN0cnVjdG9yLgotICAqIEBwYXJhbSBidWZmZXIgU3RyaW5nQnVmZmVyIG9iamVjdCB0aGF0IHRoaXMgY29kZSBnZW5lcmF0b3Igd3JpdGVzIHRvIAotICAqLwotICBwdWJsaWMgUmVzdWx0RmlsZUhlbHAxR2VuZXJhdG9yIChTdHJpbmdCdWZmZXIgYnVmZmVyKQotICB7Ci0gICAgICBzdXBlcihidWZmZXIpOyAgICAKLSAgfQotICAKLSAgLyoqCi0gICogVmlzaXQgTWV0aG9kIGdlbmVyYXRlcyBjb2RlIGZvciB0aGlzIFZpc2l0b3IKLSAgKiBAcGFyYW0gbWV0aG9kIG1ldGhvZCBjb2RlIHdpbGwgYmUgZ2VuZXJhdGVkIGZvciAKLSAgKi8KLSAgcHVibGljIElTdGF0dXMgdmlzaXQgKE9iamVjdCBvYmplY3QpCi0gIHsKLSAgICAgRWxlbWVudCBtZXRob2RFbGVtZW50ID0gKEVsZW1lbnQpb2JqZWN0OwotICAKLQotICAgICBNZXRob2RFbGVtZW50IG1ldGhvZCA9IChNZXRob2RFbGVtZW50KW1ldGhvZEVsZW1lbnQ7Ci0gICAgIGlmIChtZXRob2QuZ2V0TWV0aG9kT21taXNzaW9uKCkpIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCi0gICAgIGZidWZmZXIuYXBwZW5kKCJjYXNlICIgKyBtZXRob2QuZ2V0TnVtYmVySUQoKSsgIjoiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgIHZpc2l0SGVscGVyKG1ldGhvZCk7Ci0gICAgIAotICAgICBmYnVmZmVyLmFwcGVuZCgiYnJlYWs7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOyAKLSAgCi0gICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9ICAgCi0gIC8qKgotICAqIEhlbHBzIG91dCB0aGUgdmlzaXRvcgotICAqIEBwYXJhbSBtZXRob2QgbWV0aG9kIGNvZGUgd2lsbCBiZSBnZW5lcmF0ZWQgZm9yIAotICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdEhlbHBlciAoRWxlbWVudCBtZXRob2RFbGVtZW50KQotICB7Ci0KLSAgICAgZmJ1ZmZlci5hcHBlbmQoR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiZ290TWV0aG9kID0gdHJ1ZTsiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgIAotICAgICBNZXRob2RFbGVtZW50IG1ldGhvZCA9IChNZXRob2RFbGVtZW50KW1ldGhvZEVsZW1lbnQ7Ci0gICAgIC8vIGdvIHRvIHRoZSBuZXh0IGdlbmVyYXRvcgotICAgICBSZXN1bHRGaWxlSGVscDJHZW5lcmF0b3IgcmVzdWx0RmlsZUhlbHAyR2VuZXJhdG9yID0gbmV3IFJlc3VsdEZpbGVIZWxwMkdlbmVyYXRvcihmYnVmZmVyKTsgCi0gICAgIHJlc3VsdEZpbGVIZWxwMkdlbmVyYXRvci5zZXROdW1iZXJGYWN0b3J5KGdldE51bWJlckZhY3RvcnkoKSk7Ci0gICAgIFBhcmFtZXRlclZpc2l0b3IgcGFyYW1ldGVyVmlzaXRvciA9IG5ldyBQYXJhbWV0ZXJWaXNpdG9yKCk7Ci0gICAgIHBhcmFtZXRlclZpc2l0b3IucnVuKG1ldGhvZEVsZW1lbnQscmVzdWx0RmlsZUhlbHAyR2VuZXJhdG9yKTsKLSAgICAgZmJ1ZmZlciA9IHJlc3VsdEZpbGVIZWxwMkdlbmVyYXRvci5nZXRTdHJpbmdCdWZmZXIoKTsKLSAgICAgc2V0TnVtYmVyRmFjdG9yeShyZXN1bHRGaWxlSGVscDJHZW5lcmF0b3IuZ2V0TnVtYmVyRmFjdG9yeSgpKTsKLSAgICAgLy8gd2UgbXVzdCBub3cgZ3JhYiB0aGUgc3RhdGUgZGF0YSBmcm9tIHRoZSByZXNpZGVudCB2ZWN0b3IKLSAgICAgc2V0UmVzaWRlbnRWZWN0b3IocmVzdWx0RmlsZUhlbHAyR2VuZXJhdG9yLmdldFJlc2lkZW50VmVjdG9yKCkpOwotCi0gICAgIAotICAgICAvL3RoZXJlIGlzIG5vIHJldHVybiB0eXBlIGlmIHZvaWQgb2NjdXJzICAgIAotICAgIAotICAgICAKLSAgICAgaWYgKG1ldGhvZC5nZXRSZXR1cm5QYXJhbWV0ZXJFbGVtZW50KCkuZ2V0VHlwZUVsZW1lbnQoKS5nZXROYW1lKCkuZXF1YWxzKCJ2b2lkIikpCi0gICAgICAgIGZidWZmZXIuYXBwZW5kKEdlbmVyYXRvci5ET1VCTEVfVEFCICsgZ2V0U2Vzc2lvbkJlYW5JZCgpICsgIi4iICttZXRob2QuZ2V0TmFtZSgpICsgIigiKTsKLQotICAgICBlbHNlewotICAgICAgICBmYnVmZmVyLmFwcGVuZChHZW5lcmF0b3IuRE9VQkxFX1RBQiArIG1ldGhvZC5nZXRSZXR1cm5QYXJhbWV0ZXJFbGVtZW50KCkuZ2V0VHlwZUVsZW1lbnQoKS5nZXROYW1lKCkgKyBHZW5lcmF0b3IuU1BBQ0UgKyBtZXRob2QuZ2V0TVVJRCgpICsgTVRFTVAgKyBHZW5lcmF0b3IuU1BBQ0UpOwotICAgICAgICBmYnVmZmVyLmFwcGVuZCgiPSIgKyBHZW5lcmF0b3IuU1BBQ0UgKyBnZXRTZXNzaW9uQmVhbklkKCkgKyAiLiIgKyBtZXRob2QuZ2V0TmFtZSgpICsgIigiKTsKLSAgICAgfQotCi0gICAgIEVudW1lcmF0aW9uIGUgPSBmUmVzaWRlbnRWZWN0b3IuZWxlbWVudHMoKTsKLSAgICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpewotICAgICAgICAgIGZidWZmZXIuYXBwZW5kKChTdHJpbmcpZS5uZXh0RWxlbWVudCgpKTsKLSAgICAgICAgICBpZiAoZS5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgICAgICAgICAgZmJ1ZmZlci5hcHBlbmQoIiwiKTsgICAgCi0gICAgIH0KLSAgICAgZmJ1ZmZlci5hcHBlbmQoIik7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICBpZiAoIW1ldGhvZC5nZXRSZXR1cm5QYXJhbWV0ZXJFbGVtZW50KCkuZ2V0VHlwZUVsZW1lbnQoKS5nZXROYW1lKCkuZXF1YWxzKCJ2b2lkIikgJiYgIW1ldGhvZC5nZXRSZXR1cm5QYXJhbWV0ZXJFbGVtZW50KCkuZ2V0VHlwZUVsZW1lbnQoKS5pc1ByaW1pdGl2ZSgpKXsKLSAgICAgICAgLy9pbiBjYXNlIG91ciByZXN1bHQgaXMgbnVsbAotICAgICAgICBmYnVmZmVyLmFwcGVuZCgiaWYoIiArIG1ldGhvZC5nZXRNVUlEKCkgKyAibXRlbXAgPT0gbnVsbCl7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgICBmYnVmZmVyLmFwcGVuZCgiJT4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICAgIGZidWZmZXIuYXBwZW5kKCI8JT0iICsgbWV0aG9kLmdldE1VSUQoKSArICJtdGVtcCAlPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgICAgZmJ1ZmZlci5hcHBlbmQoIjwlIiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgICBmYnVmZmVyLmFwcGVuZCgifWVsc2V7IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICB9Ci0gICAgIAotICAgICAvL25vdyBsZXRzIGRpc3BsYXkgdGhlIHJldHVybiBiZWFuCi0gICAgIC8vIGlmIGl0IGlzIHNpbXBsZSB3ZSBkb250IG5lZWQgdG8gdXNlIHRoZSBnZW5lcmF0b3IKLSAgICAgCi0gICAgIGlmICghbWV0aG9kLmdldFJldHVyblBhcmFtZXRlckVsZW1lbnQoKS5nZXRUeXBlRWxlbWVudCgpLmdldE5hbWUoKS5lcXVhbHMoInZvaWQiKSl7Ci0gICAgICAgIGlmIChtZXRob2QuZ2V0UmV0dXJuUGFyYW1ldGVyRWxlbWVudCgpLmdldFR5cGVFbGVtZW50KCkuaXNTaW1wbGUoKSAKLSAgICAgICAgICAgfHwgVHlwZUZhY3RvcnkucmVjb2duaXplZEJlYW4obWV0aG9kLmdldFJldHVyblBhcmFtZXRlckVsZW1lbnQoKS5nZXRUeXBlRWxlbWVudCgpLmdldE5hbWUoKSkKLSAgICAgICAgICAgfHwgVHlwZUZhY3RvcnkuaXNTdGF0ZUxlc3NCZWFuKG1ldGhvZC5nZXRSZXR1cm5QYXJhbWV0ZXJFbGVtZW50KCkuZ2V0VHlwZUVsZW1lbnQoKS5nZXRUeXBlTmFtZSgpKQotICAgICAgICAgICB8fCBUeXBlRmFjdG9yeS5pc1JlY29nbml6ZWRSZXR1cm5UeXBlKG1ldGhvZC5nZXRSZXR1cm5QYXJhbWV0ZXJFbGVtZW50KCkuZ2V0VHlwZUVsZW1lbnQoKS5nZXRUeXBlTmFtZSgpKSl7Ci0gICAgICAgICAgIERhdGFUeXBlIGRhdGFUeXBlID0gVHlwZUZhY3RvcnkuY3JlYXRlVHlwZShtZXRob2QuZ2V0UmV0dXJuUGFyYW1ldGVyRWxlbWVudCgpLmdldFR5cGVFbGVtZW50KCkuZ2V0VHlwZU5hbWUoKSxtZXRob2QuZ2V0UmV0dXJuUGFyYW1ldGVyRWxlbWVudCgpLmdldE1VSUQoKSk7Ci0gICAgICAgICAgIGZidWZmZXIuYXBwZW5kKGRhdGFUeXBlLlR5cGVDb252ZXJzaW9uKG1ldGhvZC5nZXRNVUlEKCkgKyBNVEVNUCkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2V7Ci0gICAgICAgICAgIGZidWZmZXIuYXBwZW5kKCIlPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgICAgICAgSW5wdXRGaWxlSGVscDJHZW5lcmF0b3IgaW5wdXRGaWxlSGVscDJHZW5lcmF0b3IgPSBuZXcgSW5wdXRGaWxlSGVscDJHZW5lcmF0b3IoZmJ1ZmZlcik7Ci0gICAgICAgICAgIGlucHV0RmlsZUhlbHAyR2VuZXJhdG9yLnNldEluc3RhbmNlTmFtZShtZXRob2QuZ2V0TVVJRCgpICsgTVRFTVApOwotICAgICAgICAgICBpbnB1dEZpbGVIZWxwMkdlbmVyYXRvci5zZXRSZXR1cm5QYXJhbSh0cnVlKTsKLSAgICAgICAgICAgUmV0dXJuUGFyYW1ldGVyVmlzaXRvciByZXR1cm5QYXJhbWV0ZXJWaXNpdG9yID0gbmV3IFJldHVyblBhcmFtZXRlclZpc2l0b3IoKTsKLSAgICAgICAgICAgcmV0dXJuUGFyYW1ldGVyVmlzaXRvci5ydW4obWV0aG9kLGlucHV0RmlsZUhlbHAyR2VuZXJhdG9yKTsKLSAgICAgICAgICAgZmJ1ZmZlciA9IGlucHV0RmlsZUhlbHAyR2VuZXJhdG9yLmdldFN0cmluZ0J1ZmZlcigpOwotICAgICAgICAgICBmYnVmZmVyLmFwcGVuZCgiPCUiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0KLSAgICAgICAgfQotICAgICB9Ci0KLSAgICBpZiAoIW1ldGhvZC5nZXRSZXR1cm5QYXJhbWV0ZXJFbGVtZW50KCkuZ2V0VHlwZUVsZW1lbnQoKS5nZXROYW1lKCkuZXF1YWxzKCJ2b2lkIikgICYmICFtZXRob2QuZ2V0UmV0dXJuUGFyYW1ldGVyRWxlbWVudCgpLmdldFR5cGVFbGVtZW50KCkuaXNQcmltaXRpdmUoKSkgZmJ1ZmZlci5hcHBlbmQoIn0iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7ICAgIAotICAgIAotICB9Ci0KLQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3NhbXBsZWFwcC9jb2RlZ2VuL1Jlc3VsdEZpbGVIZWxwMkdlbmVyYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29kZWdlbi9SZXN1bHRGaWxlSGVscDJHZW5lcmF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjEyMjgwNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3NhbXBsZWFwcC9jb2RlZ2VuL1Jlc3VsdEZpbGVIZWxwMkdlbmVyYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5zYW1wbGVhcHAuY29kZWdlbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uR2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLmJlYW4uVHlwZVZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuRGF0YVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC5iZWFubW9kZWwuUGFyYW1ldGVyRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uZGF0YW1vZGVsLmJlYW5tb2RlbC5UeXBlRmFjdG9yeTsKLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSBSZXN1bHRGaWxlSGVscDJnZW5lcmF0b3IuCi0qICovCi1wdWJsaWMgY2xhc3MgUmVzdWx0RmlsZUhlbHAyR2VuZXJhdG9yIGV4dGVuZHMgR2VuZXJhdG9yIAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gICAKLSAgcHJpdmF0ZSBTdHJpbmcgZlR5cGVPd25lcklkOyAgCi0KLQotICAvKioKLSAgKiBDb25zdHJ1Y3Rvci4KLSAgKiBAcGFyYW0gYnVmZmVyIFN0cmluZ0J1ZmZlciBvYmplY3QgdGhhdCB0aGlzIGNvZGUgZ2VuZXJhdG9yIHdyaXRlcyB0byAKLSAgKi8KLSAgcHVibGljIFJlc3VsdEZpbGVIZWxwMkdlbmVyYXRvciAoU3RyaW5nQnVmZmVyIGJ1ZmZlcikKLSAgewotICAgICAgc3VwZXIoYnVmZmVyKTsKLSAgICAgIAotICB9Ci0gIAotICAvKioKLSAgKiBWaXNpdCBNZXRob2QgZ2VuZXJhdGVzIGNvZGUgZm9yIHRoaXMgVmlzaXRvcgotICAqIEBwYXJhbSBQYXJhbWV0ZXIgcGFyYW1ldGVyIGNvZGUgd2lsbCBiZSBnZW5lcmF0ZWQgCi0gICovCi0gIHB1YmxpYyBJU3RhdHVzIHZpc2l0IChPYmplY3Qgb2JqZWN0KQotICB7Ci0gICAgCi0KLSAgICAgUGFyYW1ldGVyRWxlbWVudCBwYXJhbWV0ZXJFbGVtZW50ID0gKFBhcmFtZXRlckVsZW1lbnQpb2JqZWN0OwotICAgICBwYXJhbWV0ZXJFbGVtZW50LmdldFR5cGVFbGVtZW50KCk7IAotICAgICBpZihwYXJhbWV0ZXJFbGVtZW50LmdldFR5cGVFbGVtZW50KCkuaXNTaW1wbGUoKSB8fCBUeXBlRmFjdG9yeS5yZWNvZ25pemVkQmVhbihwYXJhbWV0ZXJFbGVtZW50LmdldFR5cGVFbGVtZW50KCkuZ2V0TmFtZSgpKSl7ICAgICAgCi0gICAgICAgIC8vc3RhcnQgdGhlIGNvZGVnZW4KLSAgICAgICAgIC8vYXNrIHRoZSBkYXRhdHlwZSBmb3IgaXRzIHJlcXVlc3QgbGluZSwgaXQgbWF5IG5lZWQgbWFyayB1cCBvciBub3QuCi0gICAgICAgIC8vaWUgRm9yIHRoZSBzaW1wbGUgdHlwZXMgd2UgbmVlZCB0aGUgbWFyayB1cAotICAgICAgICAvL2ZvciB0aGUgZG9tIGVsZW1lbnQgd2UgY2FudCB1c2UgaXQuCi0gICAgICAgIERhdGFUeXBlIGRhdGFUeXBlID0gVHlwZUZhY3RvcnkuY3JlYXRlVHlwZShwYXJhbWV0ZXJFbGVtZW50LmdldFR5cGVFbGVtZW50KCkuZ2V0TmFtZSgpLHBhcmFtZXRlckVsZW1lbnQuZ2V0TVVJRCgpKTsKLSAgICAgICAgc2V0VHlwZU93bmVySWQoaWROYW1lKHBhcmFtZXRlckVsZW1lbnQuZ2V0TmFtZSgpKSk7Ci0gICAgICAgIGZidWZmZXIuYXBwZW5kKGRhdGFUeXBlLmdldFJlcXVlc3RDb2RlKHBhcmFtZXRlckVsZW1lbnQuZ2V0TVVJRCgpLGdldFR5cGVPd25lcklkKCkpKTsKLSAgICAgfQotICAgICAgICAgCi0gICAgIC8vdmlzaXQgdGhlIHR5cGUgZ2VuZXJhdG9yCi0gICAgIFJlc3VsdEZpbGVUeXBlR2VuZXJhdG9yIHJlc3VsdEZpbGVUeXBlR2VuZXJhdG9yID0gbmV3IFJlc3VsdEZpbGVUeXBlR2VuZXJhdG9yKGZidWZmZXIpOyAKLSAgICAgcmVzdWx0RmlsZVR5cGVHZW5lcmF0b3Iuc2V0TnVtYmVyRmFjdG9yeShnZXROdW1iZXJGYWN0b3J5KCkpOwotICAgICByZXN1bHRGaWxlVHlwZUdlbmVyYXRvci5zZXRUeXBlT3duZXJJZChnZXRUeXBlT3duZXJJZCgpKTsKLSAgICAgVHlwZVZpc2l0b3IgVHlwZVZpc2l0b3IgPSBuZXcgVHlwZVZpc2l0b3IoKTsKLSAgICAgVHlwZVZpc2l0b3IucnVuKHBhcmFtZXRlckVsZW1lbnQscmVzdWx0RmlsZVR5cGVHZW5lcmF0b3IpOwotICAgICBmYnVmZmVyID0gcmVzdWx0RmlsZVR5cGVHZW5lcmF0b3IuZ2V0U3RyaW5nQnVmZmVyKCk7Ci0gICAgIHNldE51bWJlckZhY3RvcnkocmVzdWx0RmlsZVR5cGVHZW5lcmF0b3IuZ2V0TnVtYmVyRmFjdG9yeSgpKTsKLSAgICAgU3RyaW5nIG5hbWUgPSAoU3RyaW5nKXJlc3VsdEZpbGVUeXBlR2VuZXJhdG9yLmdldFJlc2lkZW50VmVjdG9yKCkuZmlyc3RFbGVtZW50KCk7Ci0gICAgIHB1dFJlc2lkZW50VmVjdG9yKG5hbWUpOyAKLSAgICAgCi0gICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0KLQotICBwdWJsaWMgU3RyaW5nIGdldFR5cGVPd25lcklkKCkKLSAgewotICAgICBpZiAoZlR5cGVPd25lcklkID09IG51bGwpIGZUeXBlT3duZXJJZCA9ICIiOyAKLSAgICAgcmV0dXJuIGZUeXBlT3duZXJJZDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFR5cGVPd25lcklkKFN0cmluZyBuYW1lKQotICB7Ci0gICAgZlR5cGVPd25lcklkID0gbmFtZTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgaWROYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gIAkKLSAgICBTdHJpbmcgdW5pcXVlTnVtID0gU3RyaW5nLnZhbHVlT2YoZ2V0VW5pcXVlTnVtYmVyKCkpOwotICAgIFN0cmluZyBuZXdOYW1lID0gbmFtZS5yZXBsYWNlKCcuJywnMScpICsgIl8iICt1bmlxdWVOdW0gKyAiaWQiOwotICAgIHJldHVybiBuZXdOYW1lOwotICB9Ci0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29kZWdlbi9SZXN1bHRGaWxlVHlwZUdlbmVyYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29kZWdlbi9SZXN1bHRGaWxlVHlwZUdlbmVyYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZWE2ODg3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvZGVnZW4vUmVzdWx0RmlsZVR5cGVHZW5lcmF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNDEwICAgMTgwOTUyIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBTYW1wbGUgSlNQIGdlbmVyYXRvciBjaG9rZXMgb24gaW50ZXJmYWNlcyBhbmQgYWJzdHJhY3QgY2xhc3NlcwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnNhbXBsZWFwcC5jb2RlZ2VuOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmdVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5HZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uYmVhbi5BdHRyaWJ1dGVWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLmJlYW4uRmllbGRWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsLkRhdGFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsLlR5cGVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5kYXRhbW9kZWwuYmVhbm1vZGVsLlR5cGVGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuRWxlbWVudDsKLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSBSZXN1bHRGaWxlSGVscDJnZW5lcmF0b3IuCi0qICovCi1wdWJsaWMgY2xhc3MgUmVzdWx0RmlsZVR5cGVHZW5lcmF0b3IgZXh0ZW5kcyBSZXN1bHRGaWxlSGVscDJHZW5lcmF0b3IgCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLQotCi0gIHB1YmxpYyBTdHJpbmcgZlR5cGVJZE5hbWU7Ci0gCi0gIC8qKgotICAqIENvbnN0cnVjdG9yLgotICAqIEBwYXJhbSBidWZmZXIgU3RyaW5nQnVmZmVyIG9iamVjdCB0aGF0IHRoaXMgY29kZSBnZW5lcmF0b3Igd3JpdGVzIHRvIAotICAqLwotICBwdWJsaWMgUmVzdWx0RmlsZVR5cGVHZW5lcmF0b3IgKFN0cmluZ0J1ZmZlciBidWZmZXIpCi0gIHsKLSAgICAgIHN1cGVyKGJ1ZmZlcik7Ci0gIH0KLSAgCi0gIC8qKgotICAqIFZpc2l0IE1ldGhvZCBnZW5lcmF0ZXMgY29kZSBmb3IgdGhpcyBWaXNpdG9yCi0gICogQHBhcmFtIFBhcmFtZXRlciBwYXJhbWV0ZXIgY29kZSB3aWxsIGJlIGdlbmVyYXRlZCAKLSAgKi8KLSAgcHVibGljIElTdGF0dXMgdmlzaXQgKE9iamVjdCBvYmplY3QpCi0gIHsKLSAgICAgRWxlbWVudCB0eXBlRWxlbWVudCA9IChFbGVtZW50KW9iamVjdDsKLSAgICAgVHlwZUVsZW1lbnQgdHlwZSA9IChUeXBlRWxlbWVudCl0eXBlRWxlbWVudDsgICAgICAKLSAgICAgLy8gcmlnaHQgbm93IHdlIG9ubHkgaGF2ZSBzaW1wbGUgdG8gd29ycnkgYWJvdXQKLSAgICAgaWYodHlwZS5pc1NpbXBsZSgpIHx8IFR5cGVGYWN0b3J5LnJlY29nbml6ZWRCZWFuKHR5cGUuZ2V0TmFtZSgpKSl7Ci0gICAgICAgLy8gY3JlYXRlIHRoZSB0eXBlIHRoYXQgcmVwcmVzZW50cyB0aGUgc2ltcGxlIHR5cGUgbmFtZQotICAgICAgIERhdGFUeXBlIGRhdGFUeXBlID0gVHlwZUZhY3RvcnkuY3JlYXRlVHlwZSh0eXBlLmdldE5hbWUoKSx0eXBlLmdldE93bmluZ0VsZW1lbnQoKS5nZXRNVUlEKCkpOwotICAKLSAgICAgICBTdHJpbmcgbm9kZU5hbWUgPSBnZXRUeXBlT3duZXJJZCgpKyAiVGVtcCI7Ci0gICAgICAgZmJ1ZmZlci5hcHBlbmQoZGF0YVR5cGUuc3RyaW5nQ29udmVyc2lvbih0eXBlLmdldE5hbWUoKSxub2RlTmFtZSxnZXRUeXBlT3duZXJJZCgpKSk7Ci0KLSAgICAgICBwdXRSZXNpZGVudFZlY3Rvcihub2RlTmFtZSk7Ci0gICAgIH0KLQotICAgICBlbHNlIHsKLSAgICAgICAvL211c3QgYmUgY29tcGxleAotICAgICAgIFN0cmluZyB0eXBlTmFtZSA9IHR5cGVFbGVtZW50LmdldE5hbWUoKTsgCi0gICAgICAgZlR5cGVJZE5hbWUgPSBpZE5hbWUodHlwZU5hbWUpOwotICAgICAgICAgICAgICAKLSAgICAgICBpZiAoIUJvb2xlYW4uVFJVRS5lcXVhbHModHlwZUVsZW1lbnQuZ2V0UHJvcGVydHlBc09iamVjdChUeXBlRWxlbWVudC5OT05fSU5TVEFOVElBQkxFKSkpIHsKLSAgICAgICAKLQkgICAgICAgQXR0cmlidXRlVmlzaXRvciBhdHRyaWJ1dGVWaXNpdG9yID0gbmV3IEF0dHJpYnV0ZVZpc2l0b3IoKTsKLQkgICAgICAgUmVzdWx0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvciByZXN1bHRGaWxlQXR0cmlidXRlR2VuZXJhdG9yID0gbmV3IFJlc3VsdEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3IoZmJ1ZmZlcik7Ci0JICAgICAgIHJlc3VsdEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3Iuc2V0TnVtYmVyRmFjdG9yeShnZXROdW1iZXJGYWN0b3J5KCkpOwotCSAgICAgICBhdHRyaWJ1dGVWaXNpdG9yLnJ1bih0eXBlRWxlbWVudCxyZXN1bHRGaWxlQXR0cmlidXRlR2VuZXJhdG9yKTsKLQkgICAgICAgc2V0TnVtYmVyRmFjdG9yeShyZXN1bHRGaWxlQXR0cmlidXRlR2VuZXJhdG9yLmdldE51bWJlckZhY3RvcnkoKSk7Ci0JICAgICAgIGZidWZmZXIgPSByZXN1bHRGaWxlQXR0cmlidXRlR2VuZXJhdG9yLmdldFN0cmluZ0J1ZmZlcigpOwotCQotCSAgICAgICBGaWVsZFZpc2l0b3IgZmllbGRWaXNpdG9yID0gbmV3IEZpZWxkVmlzaXRvcigpOwotCSAgICAgICBSZXN1bHRGaWxlQXR0cmlidXRlR2VuZXJhdG9yIHJlc3VsdEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3IyID0gbmV3IFJlc3VsdEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3IoZmJ1ZmZlcik7Ci0JICAgICAgIHJlc3VsdEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3IyLnNldE51bWJlckZhY3RvcnkoZ2V0TnVtYmVyRmFjdG9yeSgpKTsKLQkgICAgICAgZmllbGRWaXNpdG9yLnJ1bih0eXBlRWxlbWVudCxyZXN1bHRGaWxlQXR0cmlidXRlR2VuZXJhdG9yMik7Ci0JICAgICAgIHNldE51bWJlckZhY3RvcnkocmVzdWx0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvcjIuZ2V0TnVtYmVyRmFjdG9yeSgpKTsKLQkgICAgICAgZmJ1ZmZlciA9IHJlc3VsdEZpbGVBdHRyaWJ1dGVHZW5lcmF0b3IyLmdldFN0cmluZ0J1ZmZlcigpOwotCi0gICAgICAKLQkgICAgICAgZmJ1ZmZlci5hcHBlbmQoR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiJT4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0JICAgICAgIGZidWZmZXIuYXBwZW5kKEdlbmVyYXRvci5ET1VCTEVfVEFCICsgIjxqc3A6dXNlQmVhbiBpZD1cIiIgKyBmVHlwZUlkTmFtZSArICJcIiBzY29wZT1cInNlc3Npb25cIiBjbGFzcz1cIiIgKyB0eXBlTmFtZSArICJcIiAvPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLQkgICAgICAgZmJ1ZmZlci5hcHBlbmQoR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyAiPCUiICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0JICAgICAgIAotCSAgICAgICBFbnVtZXJhdGlvbiBlID0gcmVzdWx0RmlsZUF0dHJpYnV0ZUdlbmVyYXRvci5nZXRSZXNpZGVudFZlY3RvcigpLmVsZW1lbnRzKCk7Ci0JICAgICAgIHdoaWxlKGUuaGFzTW9yZUVsZW1lbnRzKCkpewotCSAgICAgICAgICBmYnVmZmVyLmFwcGVuZChHZW5lcmF0b3IuRE9VQkxFX1RBQiArIGZUeXBlSWROYW1lICsgIi4iICsgZS5uZXh0RWxlbWVudCgpICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0JICAgICAgIH0KLQkKLQkgICAgICAgRW51bWVyYXRpb24gZTIgPSByZXN1bHRGaWxlQXR0cmlidXRlR2VuZXJhdG9yMi5nZXRSZXNpZGVudFZlY3RvcigpLmVsZW1lbnRzKCk7Ci0JICAgICAgIHdoaWxlKGUyLmhhc01vcmVFbGVtZW50cygpKXsKLQkgICAgICAgICAgZmJ1ZmZlci5hcHBlbmQoR2VuZXJhdG9yLkRPVUJMRV9UQUIgKyBmVHlwZUlkTmFtZSArICIuIiArIGUyLm5leHRFbGVtZW50KCkgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLQkgICAgICAgfSAKLQkgICB9Ci0gICAgICAgZWxzZQotICAgIAkgICBmYnVmZmVyLmFwcGVuZChHZW5lcmF0b3IuRE9VQkxFX1RBQiArIHR5cGVOYW1lICsgIiAiICsgZlR5cGVJZE5hbWUgKyAiID0gbnVsbDsiKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsgICAgIAotICAgICAgIAotICAgICAgIHB1dFJlc2lkZW50VmVjdG9yKGZUeXBlSWROYW1lKTsKLSAgICAgICAvL2VuZCBvZiBjaGFuZ2VzCi0gICAgIAotICAgIH0KLSAgICAgCi0gICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9ICAgCi0gIAotCi0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29kZWdlbi9UZXN0Q2xpZW50RmlsZUdlbmVyYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29kZWdlbi9UZXN0Q2xpZW50RmlsZUdlbmVyYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDcxNGJiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvZGVnZW4vVGVzdENsaWVudEZpbGVHZW5lcmF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5zYW1wbGVhcHAuY29kZWdlbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmdVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5HZW5lcmF0b3I7Ci0KLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSBUZXN0Q2xpZW50RmlsZWdlbmVyYXRvci4KLSogKi8KLXB1YmxpYyBjbGFzcyBUZXN0Q2xpZW50RmlsZUdlbmVyYXRvciBleHRlbmRzIEdlbmVyYXRvcgotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0KLSAgcHVibGljIFN0cmluZyBmTWV0aG9kTmFtZTsKLSAgcHVibGljIFN0cmluZyBmSW5wdXROYW1lOwotICBwdWJsaWMgU3RyaW5nIGZSZXN1bHROYW1lOwotICAKLSAgLyoqCi0gICogQ29uc3RydWN0b3IuCi0gICoKLSAgKi8KLSAgcHVibGljIFRlc3RDbGllbnRGaWxlR2VuZXJhdG9yIChTdHJpbmcgaW5wdXRzLCBTdHJpbmcgbWV0aG9kcywgU3RyaW5nIHJlc3VsdHMpCi0gIHsKLSAgICAgc3VwZXIoKTsKLSAgICAgZklucHV0TmFtZSA9IGlucHV0czsKLSAgICAgZk1ldGhvZE5hbWUgPSBtZXRob2RzOwotICAgICBmUmVzdWx0TmFtZSA9IHJlc3VsdHM7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRGaWxlTmFtZXMoU3RyaW5nIGlucHV0cywgU3RyaW5nIG1ldGhvZHMsIFN0cmluZyByZXN1bHRzKQotICB7Ci0gICAgZklucHV0TmFtZSA9IGlucHV0czsKLSAgICBmTWV0aG9kTmFtZSA9IG1ldGhvZHM7Ci0gICAgZlJlc3VsdE5hbWUgPSByZXN1bHRzOwotICB9Ci0KLSAgLy90YWtlcyBpbiBhIGJlYW4gbm9kZQotICAgcHVibGljIElTdGF0dXMgdmlzaXQgKE9iamVjdCBvYmplY3QpCi0gICB7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPCVAcGFnZSBjb250ZW50VHlwZT1cInRleHQvaHRtbDtjaGFyc2V0PVVURi04XCIlPiIpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjxIVE1MPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8SEVBRD4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPFRJVExFPldlYiBTZXJ2aWNlcyBUZXN0IENsaWVudDwvVElUTEU+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjwvSEVBRD4iICsgU3RyaW5nVXRpbHMuTkVXTElORSArICIiKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8RlJBTUVTRVQgIENPTFM9XCIyMjAsKlwiPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8RlJBTUUgU1JDPVwiIisgZk1ldGhvZE5hbWUgKyAiXCIgTkFNRT1cIm1ldGhvZHNcIiBNQVJHSU5XSURUSD1cIjFcIiBNQVJHSU5IRUlHSFQ9XCIxXCIgU0NST0xMSU5HPVwieWVzXCIgRlJBTUVCT1JERVI9XCIxXCI+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjxGUkFNRVNFVCAgUk9XUz1cIjgwJSwyMCVcIj4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPEZSQU1FIFNSQz1cIiIrIGZJbnB1dE5hbWUgICsgIlwiIE5BTUU9XCJpbnB1dHNcIiAgTUFSR0lOV0lEVEg9XCIxXCIgTUFSR0lOSEVJR0hUPVwiMVwiIFNDUk9MTElORz1cInllc1wiIEZSQU1FQk9SREVSPVwiMVwiPiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8JSIpLmFwcGVuZChTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCJTdHJpbmdCdWZmZXIgcmVzdWx0SlNQID0gbmV3IFN0cmluZ0J1ZmZlcihcIiIpLmFwcGVuZChmUmVzdWx0TmFtZSkuYXBwZW5kKCJcIik7IikuYXBwZW5kKFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoInJlc3VsdEpTUC5hcHBlbmQoXCI/XCIpOyIpLmFwcGVuZChTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCJqYXZhLnV0aWwuRW51bWVyYXRpb24gcmVzdWx0RW51bSA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyTmFtZXMoKTsiKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCJ3aGlsZSAocmVzdWx0RW51bS5oYXNNb3JlRWxlbWVudHMoKSkgeyIpLmFwcGVuZChTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCJPYmplY3QgcmVzdWx0T2JqID0gcmVzdWx0RW51bS5uZXh0RWxlbWVudCgpOyIpLmFwcGVuZChTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCJyZXN1bHRKU1AuYXBwZW5kKHJlc3VsdE9iai50b1N0cmluZygpKS5hcHBlbmQoXCI9XCIpLmFwcGVuZChyZXF1ZXN0LmdldFBhcmFtZXRlcihyZXN1bHRPYmoudG9TdHJpbmcoKSkpLmFwcGVuZChcIiZcIik7IikuYXBwZW5kKFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIn0iKS5hcHBlbmQoU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiJT4iKS5hcHBlbmQoU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPEZSQU1FIFNSQz1cIjwlPXJlc3VsdEpTUC50b1N0cmluZygpJT5cIiBOQU1FPVwicmVzdWx0XCIgIE1BUkdJTldJRFRIPVwiMVwiIE1BUkdJTkhFSUdIVD1cIjFcIiBTQ1JPTExJTkc9XCJ5ZXNcIiBGUkFNRUJPUkRFUj1cIjFcIj4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPC9GUkFNRVNFVD4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0KLQotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjxOT0ZSQU1FUz4iICsgU3RyaW5nVXRpbHMuTkVXTElORSk7Ci0gICAgICBmYnVmZmVyLmFwcGVuZCgiPEJPRFk+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIlRoZSBXZWIgU2VydmljZXMgVGVzdCBDbGllbnQgcmVxdWlyZXMgYSBicm93c2VyIHRoYXQgc3VwcG9ydHMgZnJhbWVzLiIgKyBTdHJpbmdVdGlscy5ORVdMSU5FKTsKLSAgICAgIGZidWZmZXIuYXBwZW5kKCI8L0JPRFk+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjwvTk9GUkFNRVM+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjwvRlJBTUVTRVQ+IiArIFN0cmluZ1V0aWxzLk5FV0xJTkUpOwotICAgICAgZmJ1ZmZlci5hcHBlbmQoIjwvSFRNTD4iKTsKLQotICAgICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvbW1hbmQvR2VuZXJhdGVQYWdlQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29tbWFuZC9HZW5lcmF0ZVBhZ2VDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxZDdmODcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29tbWFuZC9HZW5lcmF0ZVBhZ2VDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnNhbXBsZWFwcC5jb21tYW5kOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbVdyaXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb2RlZ2VuLkdlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29tbW9uLkZpbGVSZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0LlJlc291cmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotCi0KLS8qKgotICogTW9mVG9CZWFuTW9kZWxDb21tYW5kCi0gKiBDcmVhdGlvbiBkYXRlOiAoNC8xMC8yMDAxIDEyOjQxOjQ4IFBNKQotICogQGF1dGhvcjogR2lsYmVydCBBbmRyZXdzCi0gKi8KLXB1YmxpYyBjbGFzcyBHZW5lcmF0ZVBhZ2VDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gCi17Ci0JCQotcHJpdmF0ZSBNb2RlbCBtb2RlbF87Ci1wcml2YXRlIEdlbmVyYXRvciBmR2VuZXJhdG9yOwotcHJpdmF0ZSBJRmlsZSBmSUZpbGU7Ci1wcml2YXRlIFJlc291cmNlQ29udGV4dCByZXNvdXJjZUNvbnRleHRfOwotcHJpdmF0ZSBTdHJpbmdCdWZmZXIgZlN0cmluZ0J1ZmZlcjsKLQotLyoqCi0gKiBCdWlsZCBjb25zdHJ1Y3RvciBjb21tZW50LgotICovCi1wdWJsaWMgR2VuZXJhdGVQYWdlQ29tbWFuZCgpCi17Ci19Ci0KLS8qKgotKiBDb25zdHJ1Y3RvcgotKiBUaGlzIGNvbW1hbmQgd2lsbCBnZW5lcmF0ZSBjb2RlIGZyb20gYSBNb2RlbAotKiBAcGFyYW0gbW9kZWwgVGhlIG1vZGVsIHRvIGJlIHRyYXZlcnNlZAotKiBAcGFyYW0gZ2VuZXJhdG9yIFRoZSBjb2RlIGdlbmVyYXRvciB0byBiZSB1c2VkCi0qIEBwYXJhbSByZXNvdXJjZSB0aGUgcmVzb3VyY2UgdG8gcGxhY2UgdGhlIGZpbmlzaGVkIHByb2R1Y3QKLSovCi1wdWJsaWMgR2VuZXJhdGVQYWdlQ29tbWFuZChSZXNvdXJjZUNvbnRleHQgY29udGV4dCwgTW9kZWwgbW9kZWwsIEdlbmVyYXRvciBnZW5lcmF0b3IsIElGaWxlIGZpbGUpCi17Ci0gIG1vZGVsXyA9IG1vZGVsOwotICBmR2VuZXJhdG9yID0gZ2VuZXJhdG9yOwotICBmSUZpbGUgPSBmaWxlOwotICByZXNvdXJjZUNvbnRleHRfID0gY29udGV4dDsKLX0KLQotcHVibGljIE1vZGVsIGdldEphdmFEYXRhTW9kZWwoKQotewotICByZXR1cm4gbW9kZWxfOwotfQotCi0vKioKLSAqCi0gKi8KLXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotewotICBJRW52aXJvbm1lbnQgZW52ID0gZ2V0RW52aXJvbm1lbnQoKTsKLSAgCi0gIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgdHJ5IHsKLSAgICBmR2VuZXJhdG9yLnZpc2l0KG1vZGVsXy5nZXRSb290RWxlbWVudCgpKTsKLSAgICBmU3RyaW5nQnVmZmVyID0gZkdlbmVyYXRvci5nZXRTdHJpbmdCdWZmZXIoKTsKLSAgICBTdHJpbmcgdGVtcFN0cmluZyA9IGZTdHJpbmdCdWZmZXIudG9TdHJpbmcoKTsKLSAgICBPdXRwdXRTdHJlYW0gZmlsZVJlc291cmNlID0gRmlsZVJlc291cmNlVXRpbHMubmV3RmlsZU91dHB1dFN0cmVhbShyZXNvdXJjZUNvbnRleHRfLCBmSUZpbGUuZ2V0RnVsbFBhdGgoKSwgbW9uaXRvciwgZW52LmdldFN0YXR1c0hhbmRsZXIoKSk7Ci0gICAgLy9QcmludFN0cmVhbSBwcyA9IG5ldyBQcmludFN0cmVhbShmaWxlUmVzb3VyY2UpOwotICAgIC8vcHMucHJpbnQodGVtcFN0cmluZyk7Ci0gICAgT3V0cHV0U3RyZWFtV3JpdGVyIG9zdyA9IG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIoZmlsZVJlc291cmNlLCJVVEYtOCIpOwotICAgIG9zdy53cml0ZSh0ZW1wU3RyaW5nLDAsZlN0cmluZ0J1ZmZlci5sZW5ndGgoKSk7ICAKLSAgICBvc3cuY2xvc2UoKTsKLSAgICBmaWxlUmVzb3VyY2UuY2xvc2UoKTsKLSAgICByZXR1cm4gc3RhdHVzOwotICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2V4YykgewotICAJc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIGlvZXhjICk7Ci0gIAlyZXR1cm4gc3RhdHVzOwotICB9Ci19Ci0KLXB1YmxpYyB2b2lkIHNldFJvb3RFbGVtZW50KEVsZW1lbnQgcm9vdEVsZW1lbnQpCi17Ci19Ci0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29tbWFuZC9KYXZhVG9Nb2RlbENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvbW1hbmQvSmF2YVRvTW9kZWxDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0MDgxMDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29tbWFuZC9KYXZhVG9Nb2RlbENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnNhbXBsZWFwcC5jb21tYW5kOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLkNvbnN1bXB0aW9uTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvZGVnZW4uamF2YW1vZnZpc2l0b3JhY3Rpb25zLkphdmFNb2ZCZWFuVmlzaXRvckFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29kZWdlbi5qYXZhbW9mdmlzaXRvcnMuSmF2YU1vZkJlYW5WaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5KYXZhTW9mUmVmbGVjdGlvbkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLnNlbGVjdGlvbi5Cb29sZWFuU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuQ2hvaWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci0KLS8qKgotKiBUaGlzIGlzIHRoZSBiYXNlIGNsYXNzIGZvciBjb21tYW5kcyB0aGF0IG5lZWQgdG8gcmVwb3J0IHByb2dyZXNzCi0qIGFuZCBzdGF0dXMgZHVyaW5nIGFuZCBhZnRlciB0aGVpciBleGVjdXRpb24uIFRoaXMgY2xhc3MgZXh0ZW5kcwotKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkFic3RyYWN0Q29tbWFuZCBBYnN0cmFjdENvbW1hbmR9Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSogd2l0aCBtZXRob2RzIHRvIHtAbGluayAjc2V0UHJvZ3Jlc3NNb25pdG9yIHNldH0KLSogYW5kIHtAbGluayAjZ2V0UHJvZ3Jlc3NNb25pdG9yIGdldH0gYSBwcm9ncmVzcyBtb25pdG9yLAotKiBhbmQgdG8gZ2V0IGEgc3RhdHVzIG9iamVjdCB7QGxpbmsgI2dldFJlYWR5U3RhdHVzIGJlZm9yZX0KLSogb3Ige0BsaW5rICNnZXRSZXN1bHRTdGF0dXMgYWZ0ZXJ9IGV4ZWN1dGlvbi4KLSogPHA+Ci0qIE5vdGUgdGhhdCB0aGUgcmVzcG9uc2liaWxpdHkgb2YgcHJvdmlkaW5nIGFuCi0qIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvciBJUHJvZ3Jlc3NNb25pdG9yfQotKiByZXN0cyB3aXRoIGZyYW1ld29ya3MgdGhhdCBjb25zdHJ1Y3Qgb3IgcnVuIFByb2dyZXNzQ29tbWFuZCBvYmplY3RzLAotKiB3aGVyZWFzIHRoZSByZXNwb25zaWJpbGl0eSBvZiBwcm92aWRpbmcgYW4KLSoge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzIElTdGF0dXN9Ci0qIG9iamVjdCBsaWVzIHdpdGggdGhlIHN1YmNsYXNzZXMgb2YgUHJvZ3Jlc3NDb21tYW5kLgotKiBTdWJjbGFzc2VzIG11c3QgZm9sbG93IHRoZSBydWxlcyBkZXNjcmliZWQgZm9yCi0qIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQWJzdHJhY3RDb21tYW5kIEFic3RyYWN0Q29tbWFuZH0uCi0qLwotcHVibGljIGNsYXNzIEphdmFUb01vZGVsQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgY2xpZW50UHJvamVjdDsKLSAgcHJpdmF0ZSBCb29sZWFuU2VsZWN0aW9uW10gbWV0aG9kczsKLSAgcHJpdmF0ZSBTdHJpbmcgcHJveHlCZWFuOwotICBwcml2YXRlIEphdmFDbGFzcyBqYXZhQ2xhc3M7Ci0gIHByaXZhdGUgTW9kZWwgbW9kZWw7Ci0gIHByaXZhdGUgRWxlbWVudCBwYXJlbnRFbGVtZW50OwotICAKLSAgcHVibGljIEphdmFUb01vZGVsQ29tbWFuZCAoKQotICB7Ci0gIH0KLQotICAKLSAgcHJpdmF0ZSBJU3RhdHVzIGNyZWF0ZUphdmFSZWZsZWN0aW9uKElFbnZpcm9ubWVudCBlbnYsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApCi0gIHsKLSAgCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICBKYXZhTW9mUmVmbGVjdGlvbkNvbW1hbmQgamF2YU1vZlJlZmxlY3Rpb25Db21tYW5kID0gbmV3IEphdmFNb2ZSZWZsZWN0aW9uQ29tbWFuZCgpOwotICAgIGphdmFNb2ZSZWZsZWN0aW9uQ29tbWFuZC5zZXRDbGllbnRQcm9qZWN0KGNsaWVudFByb2plY3QpOwotICAgIGphdmFNb2ZSZWZsZWN0aW9uQ29tbWFuZC5zZXRQcm94eUJlYW4ocHJveHlCZWFuKTsKLSAgICBqYXZhTW9mUmVmbGVjdGlvbkNvbW1hbmQuc2V0RW52aXJvbm1lbnQoIGVudiApOwotICAgIC8vamF2YU1vZlJlZmxlY3Rpb25Db21tYW5kLnNldFN0YXR1c01vbml0b3IoZ2V0U3RhdHVzTW9uaXRvcigpKTsKLSAgICBzdGF0dXMgPSBqYXZhTW9mUmVmbGVjdGlvbkNvbW1hbmQuZXhlY3V0ZSggbW9uaXRvciwgbnVsbCk7Ci0gICAgamF2YUNsYXNzID0gKEphdmFDbGFzcylqYXZhTW9mUmVmbGVjdGlvbkNvbW1hbmQuZ2V0SmF2YUNsYXNzKCk7Ci0gICAgcmV0dXJuIHN0YXR1czsKLSAgfQotCi0gIC8qKgotICAqIFRoZSBNb2RlbCB0aGF0IHdhcyBjcmVhdGVkIGZyb20gdGhpcyBqYXZhbW9mCi0gICogQHJldHVybiBNb2RlbCBUaGUgZGF0YSBtb2RlbCB0aGF0IHdhcyBjcmVhdGVkCi0gICoqLwotICBwdWJsaWMgTW9kZWwgZ2V0SmF2YURhdGFNb2RlbCgpCi0gIHsKLSAgICByZXR1cm4gbW9kZWw7Ci0gIH0KLQotICAvKioKLSAgKiBCdWlsZCB0aGUgZGF0YW1vZGVsIGZyb20gdGhlIG1vZgotICAqLwotICBwdWJsaWMgSVN0YXR1cyBidWlsZE1vZGVsRnJvbU1vZiAoSUVudmlyb25tZW50IGVudikgdGhyb3dzIENvcmVFeGNlcHRpb24KLSAgewotICAJCi0gIAlDaG9pY2UgT0tDaG9pY2UgPSBuZXcgQ2hvaWNlKCdPJywgQ29uc3VtcHRpb25NZXNzYWdlcy5MQUJFTF9PSywgQ29uc3VtcHRpb25NZXNzYWdlcy5ERVNDUklQVElPTl9PSyk7Ci0gIAlDaG9pY2UgQ2FuY2VsQ2hvaWNlID0gbmV3IENob2ljZSgnQycsIENvbnN1bXB0aW9uTWVzc2FnZXMuTEFCRUxfQ0FOQ0VMLCBDb25zdW1wdGlvbk1lc3NhZ2VzLkRFU0NSSVBUSU9OX0NBTkNFTCk7Ci0gIAkKLSAgICAvLyB3ZSBjb3VsZCBoYXZlIG9uZSBvZiB0aHJlZSBjYXNlczoKLSAgICAvLzEuIFRoZSBtb2RlbCBpcyBudWxsIG1lYW5pbmcgd2Ugd2FudCBhbmQgdGhlIHBhcmVudCBlbGVtZW50IGlzIG51bGwsIG1lYW5pbmcgd2Ugd2FudCB0bwotICAgIC8vICAgY3JlYXRlIGEgYnJhbmQgbmV3IG1vZGVsIGFuZCBtYWtlIHRoaXMgYmVhbiBpdHMgcm9vdAotICAgIC8vMi4gVGhlIG1vZGVsIGlzIG51bGwgYnV0IHRoZSBwYXJlbnRFbGVtZW50IGlzIG5vdCwgbWVhbmluZyB3ZSB3YW50IHRvIGFkZCB0aGUgQmVhbiB0byB0aGUKLSAgICAvLyAgIGdpdmVuIHBhcmVudCBlbGVtZW50Ci0gICAgLy8zLiBUaGUgbW9kZWwgaXMgbm90IG51bGwgaG93ZXZlciB0aGUgcGFyZW50RWxlbWVudCBpcywgbWVhbmluZyB3ZSB3YW50IHRvIGFkZCB0aGlzIEJlYW4gdG8KLSAgICAvLyAgIFRoaXMgbW9kZWwgYnV0IGRvbnQgYXR0YWNoIGl0IHRvIGFueXRoaW5nCi0gICAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0KLSAgICAgIGlmKG1vZGVsID09IG51bGwgJiYgcGFyZW50RWxlbWVudCA9PSBudWxsKXsKLSAgICAgICAgIEphdmFNb2ZCZWFuVmlzaXRvckFjdGlvbiBiZWFuVmlzaXRvckFjdGlvbiA9IG5ldyBKYXZhTW9mQmVhblZpc2l0b3JBY3Rpb24oY2xpZW50UHJvamVjdCxtZXRob2RzLCBlbnYpOwotICAgICAgICAgLy9iZWFuVmlzaXRvckFjdGlvbi5zZXRTdGF0dXNNb25pdG9yKGdldFN0YXR1c01vbml0b3IoKSk7Ci0JICAgICBKYXZhTW9mQmVhblZpc2l0b3IgYmVhblZpc2l0b3IgPSBuZXcgSmF2YU1vZkJlYW5WaXNpdG9yKCk7Ci0gICAgICAgICBzdGF0dXMgPSBiZWFuVmlzaXRvci5ydW4oamF2YUNsYXNzLGJlYW5WaXNpdG9yQWN0aW9uKTsKLSAgICAgICAgIC8vCi0gICAgICAgICBpbnQgc2V2ZXJpdHkgPSBzdGF0dXMuZ2V0U2V2ZXJpdHkoKTsgCi0gICAgICAgICBpZiAoc2V2ZXJpdHk9PVN0YXR1cy5FUlJPUikKLSAgICAgICAgIAlyZXR1cm4gc3RhdHVzOwotICAgICAgICAgCi0gICAgICAgICBpZiAoc2V2ZXJpdHk9PVN0YXR1cy5XQVJOSU5HKQotICAgICAgICAgewotICAgICAgICAgICBDaG9pY2UgcmVzdWx0ID0gZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnQoc3RhdHVzLCBuZXcgQ2hvaWNlW117T0tDaG9pY2UsIENhbmNlbENob2ljZX0pOwotICAgICAgICAgICBpZiAocmVzdWx0LmdldExhYmVsKCkuZXF1YWxzKENhbmNlbENob2ljZS5nZXRMYWJlbCgpKSkKLSAgICAgICAgICAgewotICAgICAgICAgICAJIC8vcmV0dXJuIGFuIGVycm9yIHN0YXR1cyBzaW5jZSB0aGUgdXNlciBjYW5jZWxlZAotICAgICAgICAgICAJICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX1NBTVBMRV9DUkVBVElPTl9DQU5DRUxFRCApOwotICAgICAgICAgICB9Ci0gICAgICAgICAgIAkKLSAgICAgICAgIH0KLSAgICAgICAgIC8vCi0gICAgICAgICBtb2RlbCA9IGJlYW5WaXNpdG9yQWN0aW9uLmdldE1vZGVsKCk7Ci0KLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKG1vZGVsID09IG51bGwgJiYgcGFyZW50RWxlbWVudCAhPSBudWxsKXsKLSAgICAgICAgIEphdmFNb2ZCZWFuVmlzaXRvckFjdGlvbiBiZWFuVmlzaXRvckFjdGlvbiA9IG5ldyBKYXZhTW9mQmVhblZpc2l0b3JBY3Rpb24ocGFyZW50RWxlbWVudCxjbGllbnRQcm9qZWN0LCBlbnYpOwotICAgICAgICAgLy9iZWFuVmlzaXRvckFjdGlvbi5zZXRTdGF0dXNNb25pdG9yKGdldFN0YXR1c01vbml0b3IoKSk7Ci0JICAgICBKYXZhTW9mQmVhblZpc2l0b3IgYmVhblZpc2l0b3IgPSBuZXcgSmF2YU1vZkJlYW5WaXNpdG9yKCk7Ci0gICAgICAgICBzdGF0dXMgPSBiZWFuVmlzaXRvci5ydW4oamF2YUNsYXNzLGJlYW5WaXNpdG9yQWN0aW9uKTsKLSAgICAgICAgIC8vCi0gICAgICAgICBpbnQgc2V2ZXJpdHkgPSBzdGF0dXMuZ2V0U2V2ZXJpdHkoKTsgCi0gICAgICAgICBpZiAoc2V2ZXJpdHk9PVN0YXR1cy5FUlJPUikKLSAgICAgICAgIAlyZXR1cm4gc3RhdHVzOwotICAgICAgICAgCi0gICAgICAgICBpZiAoc2V2ZXJpdHk9PVN0YXR1cy5XQVJOSU5HKQotICAgICAgICAgewotICAgICAgICAgICBDaG9pY2UgcmVzdWx0ID0gZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnQoc3RhdHVzLCBuZXcgQ2hvaWNlW117T0tDaG9pY2UsIENhbmNlbENob2ljZX0pOwotICAgICAgICAgICBpZiAocmVzdWx0LmdldExhYmVsKCkuZXF1YWxzKENhbmNlbENob2ljZS5nZXRMYWJlbCgpKSkKLSAgICAgICAgICAgewotICAgICAgICAgICAJIC8vcmV0dXJuIGFuIGVycm9yIHN0YXR1cyBzaW5jZSB0aGUgdXNlciBjYW5jZWxlZAotICAgICAgICAgICAJICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIENvbnN1bXB0aW9uTWVzc2FnZXMuTVNHX0VSUk9SX1NBTVBMRV9DUkVBVElPTl9DQU5DRUxFRCApOwotICAgICAgICAgICB9Ci0gICAgICAgICAgIAkKLSAgICAgICAgIH0KLSAgICAgICAgIC8vICAgICAgICAgCi0gICAgICAgICBtb2RlbCA9IGJlYW5WaXNpdG9yQWN0aW9uLmdldE1vZGVsKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgIEphdmFNb2ZCZWFuVmlzaXRvckFjdGlvbiBiZWFuVmlzaXRvckFjdGlvbiA9IG5ldyBKYXZhTW9mQmVhblZpc2l0b3JBY3Rpb24obW9kZWwsY2xpZW50UHJvamVjdCwgZW52KTsKLSAgICAgICAgIC8vYmVhblZpc2l0b3JBY3Rpb24uc2V0U3RhdHVzTW9uaXRvcihnZXRTdGF0dXNNb25pdG9yKCkpOwotCSAgICAgSmF2YU1vZkJlYW5WaXNpdG9yIGJlYW5WaXNpdG9yID0gbmV3IEphdmFNb2ZCZWFuVmlzaXRvcigpOwotICAgICAgICAgc3RhdHVzID0gYmVhblZpc2l0b3IucnVuKGphdmFDbGFzcyxiZWFuVmlzaXRvckFjdGlvbik7Ci0gICAgICAgICAvLwotICAgICAgICAgaW50IHNldmVyaXR5ID0gc3RhdHVzLmdldFNldmVyaXR5KCk7IAotICAgICAgICAgaWYgKHNldmVyaXR5PT1TdGF0dXMuRVJST1IpCi0gICAgICAgICAJcmV0dXJuIHN0YXR1czsKLSAgICAgICAgIAotICAgICAgICAgaWYgKHNldmVyaXR5PT1TdGF0dXMuV0FSTklORykKLSAgICAgICAgIHsKLSAgICAgICAgICAgQ2hvaWNlIHJlc3VsdCA9IGVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0KHN0YXR1cywgbmV3IENob2ljZVtde09LQ2hvaWNlLCBDYW5jZWxDaG9pY2V9KTsKLSAgICAgICAgICAgaWYgKHJlc3VsdC5nZXRMYWJlbCgpLmVxdWFscyhDYW5jZWxDaG9pY2UuZ2V0TGFiZWwoKSkpCi0gICAgICAgICAgIHsKLSAgICAgICAgICAgCSAvL3JldHVybiBhbiBlcnJvciBzdGF0dXMgc2luY2UgdGhlIHVzZXIgY2FuY2VsZWQKLSAgICAgICAgICAgCSAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBDb25zdW1wdGlvbk1lc3NhZ2VzLk1TR19FUlJPUl9TQU1QTEVfQ1JFQVRJT05fQ0FOQ0VMRUQgKTsKLSAgICAgICAgICAgfQotICAgICAgICAgICAJCi0gICAgICAgICB9Ci0gICAgICAgICAvLyAgICAgICAgIAotICAgICAgICAgbW9kZWwgPSBiZWFuVmlzaXRvckFjdGlvbi5nZXRNb2RlbCgpOwotICAgICAgfQotCi0gICAgICByZXR1cm4gc3RhdHVzOwotICB9Ci0KLSAgLyoqCi0gICogR2V0IHRoZSBqYXZhIG1vZGVsIGZyb20gdGhlIHJlc291cmNlIHRoZW4KLSAgKiBidWlsZCB0aGUgbW9kZWwgZnJvbSB0aGUgbW9mCi0gICovCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7ICAgIAotICAgIElFbnZpcm9ubWVudCBlbnYgPSBnZXRFbnZpcm9ubWVudCgpOwotICAJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAgIGlmKGNsaWVudFByb2plY3QgPT0gbnVsbCkgcmV0dXJuIHN0YXR1czsKLSAgICAKLSAgCXN0YXR1cyA9IGNyZWF0ZUphdmFSZWZsZWN0aW9uKGVudiwgbW9uaXRvcik7Ci0gICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpPT1TdGF0dXMuRVJST1IpIHJldHVybiBzdGF0dXM7Ci0gICAgdHJ5ewotICAgICAgc3RhdHVzID0gYnVpbGRNb2RlbEZyb21Nb2YoZW52KTsKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfWNhdGNoKENvcmVFeGNlcHRpb24gZXhjKXsKLSAgICAgIElTdGF0dXMgZW1iZWRkZWRTdGF0dXMgPSBleGMuZ2V0U3RhdHVzKCk7Ci0gICAgICBzdGF0dXMgPSBlbWJlZGRlZFN0YXR1czsKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQotCi0gIH0KLSAgICAKLSAgcHVibGljIHZvaWQgc2V0TWV0aG9kcyhCb29sZWFuU2VsZWN0aW9uW10gbWV0aG9kcykKLSAgewotICAJdGhpcy5tZXRob2RzID0gIG1ldGhvZHM7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudFByb2plY3QoU3RyaW5nIGNsaWVudFByb2plY3QpCi0gIHsKLSAgCXRoaXMuY2xpZW50UHJvamVjdCA9IGNsaWVudFByb2plY3Q7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFBhcmVudEVsZW1lbnQoRWxlbWVudCBwYXJlbnRFbGVtZW50KQotICB7Ci0gIAl0aGlzLnBhcmVudEVsZW1lbnQgPSBwYXJlbnRFbGVtZW50OwotICB9Ci0gICAgIAotICBwdWJsaWMgdm9pZCBzZXRQcm94eUJlYW4oU3RyaW5nIHByb3h5QmVhbikKLSAgewotICAJdGhpcy5wcm94eUJlYW4gPSBwcm94eUJlYW47Ci0gIH0KLQotIH0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29tbW9uL1NhbXBsZVByb3BlcnR5RGVzY3JpcHRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi9zYW1wbGVhcHAvY29tbW9uL1NhbXBsZVByb3BlcnR5RGVzY3JpcHRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NGY0YjAxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vc2FtcGxlYXBwL2NvbW1vbi9TYW1wbGVQcm9wZXJ0eURlc2NyaXB0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnNhbXBsZWFwcC5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhSGVscGVyczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5NZXRob2Q7Ci0KLQotLyoqCi0qIE9iamVjdHMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYSBQcm9wZXJ0eURlc2NyaXB0b3IuCi0qICovCi1wdWJsaWMgY2xhc3MgU2FtcGxlUHJvcGVydHlEZXNjcmlwdG9yIAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0KLSAgcHJpdmF0ZSBNZXRob2QgZlJlYWRNZXRob2Q7Ci0gIHByaXZhdGUgTWV0aG9kIGZXcml0ZU1ldGhvZDsKLSAgcHJpdmF0ZSBTdHJpbmcgZlByb3BlcnR5TmFtZTsKLSAgcHJpdmF0ZSBKYXZhSGVscGVycyBmUHJvcGVydHlUeXBlOyAKLSAgcHJpdmF0ZSBib29sZWFuIGZTdGF0aWM7Ci0gIAotICAvKgotICAqIENvbnN0cnVjdG9yCi0gICoqLwotICBwdWJsaWMgU2FtcGxlUHJvcGVydHlEZXNjcmlwdG9yKFN0cmluZyBuYW1lKQotICB7Ci0gICAgZlByb3BlcnR5TmFtZSA9IG5hbWU7IAotICB9Ci0KLSAgLyoKLSAgKiBzZXQgdGhlIFJlYWRNZXRob2QKLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0UmVhZE1ldGhvZChNZXRob2QgcmVhZE1ldGhvZCkKLSAgewotICAgIGZSZWFkTWV0aG9kID0gcmVhZE1ldGhvZDsKLSAgfQotCi0gICAvKgotICAqIGdldCB0aGUgUmVhZE1ldGhvZCAKLSAgKi8KLSAgcHVibGljIE1ldGhvZCBnZXRSZWFkTWV0aG9kKCkKLSAgewotICAgIHJldHVybiBmUmVhZE1ldGhvZDsKLSAgfQotCi0gIC8qCi0gICogc2V0IHRoZSB3cml0ZU1ldGhvZAotICAqLwotICBwdWJsaWMgdm9pZCBzZXRXcml0ZU1ldGhvZChNZXRob2Qgd3JpdGVNZXRob2QpCi0gIHsKLSAgICBmV3JpdGVNZXRob2QgPSB3cml0ZU1ldGhvZDsKLSAgfQotCi0gICAvKgotICAqIGdldCB0aGUgd3JpdGVNZXRob2QgCi0gICovCi0gIHB1YmxpYyBNZXRob2QgZ2V0V3JpdGVNZXRob2QoKQotICB7Ci0gICAgcmV0dXJuIGZXcml0ZU1ldGhvZDsKLSAgfQotCi0gIC8qCi0gICogc2V0IHRoZSBwcm9wZXJ0eU5hbWUKLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgIGZQcm9wZXJ0eU5hbWU9IG5hbWU7Ci0gIH0KLQotICAgLyoKLSAgKiBnZXQgdGhlIHByb3BlcnR5TmFtZQotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIGZQcm9wZXJ0eU5hbWU7Ci0gIH0KLQotICAvKgotICAqIHNldCB0aGUgUHJvcGVydHlUeXBlCi0gICovCi0gIHB1YmxpYyB2b2lkIHNldFByb3BlcnR5VHlwZShKYXZhSGVscGVycyBwcm9wZXJ0eVR5cGUpCi0gIHsKLSAgICBmUHJvcGVydHlUeXBlID0gcHJvcGVydHlUeXBlOwotICB9Ci0KLSAgIC8qCi0gICogZ2V0IHRoZSBQcm9wZXJ0eVR5cGUgCi0gICovCi0gIHB1YmxpYyBKYXZhSGVscGVycyBnZXRQcm9wZXJ0eVR5cGUoKQotICB7Ci0gICAgcmV0dXJuIGZQcm9wZXJ0eVR5cGU7Ci0gIH0KLSAgICAgIAotICBwdWJsaWMgYm9vbGVhbiBpc2ZTdGF0aWMoKQotICB7Ci0gIAlyZXR1cm4gZlN0YXRpYzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldGZTdGF0aWMoYm9vbGVhbiBmU3RhdGljKQotICB7Ci0gICAgdGhpcy5mU3RhdGljID0gZlN0YXRpYzsJCi0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vd3NmaW5kZXIvSVdTRmluZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3dzZmluZGVyL0lXU0ZpbmRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZWE3ZmY1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vd3NmaW5kZXIvSVdTRmluZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLndzZmluZGVyOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSVdTRmluZGVyCi17Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0SUQoKTsKLSAgcHVibGljIHZvaWQgc2V0SUQoU3RyaW5nIGlkKTsKLQotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKTsKLSAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSk7Ci0KLSAgcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbigpOwotICBwdWJsaWMgdm9pZCBzZXREZXNjcmlwdGlvbihTdHJpbmcgZGVzYyk7Ci0KLSAgcHVibGljIExpc3QgZmluZCgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi93c2ZpbmRlci9MaXZlV1NETEZpbHRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25zdW1wdGlvbi93c2ZpbmRlci9MaXZlV1NETEZpbHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTYxNGJiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vd3NmaW5kZXIvTGl2ZVdTRExGaWx0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi53c2ZpbmRlcjsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5TZXJ2aWNlOwotaW1wb3J0IGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUEFkZHJlc3M7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEFkZHJlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5kaXNjb3ZlcnkuV2ViU2VydmljZXNQYXJzZXJFeHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldXV0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgTGl2ZVdTRExGaWx0ZXIgZXh0ZW5kcyBUaHJlYWQKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgd3NkbFVSTF87Ci0gIHByaXZhdGUgYm9vbGVhbiBmaW5pc2hfOwotICBwcml2YXRlIGJvb2xlYW4gbGl2ZV87Ci0KLSAgcHVibGljIExpdmVXU0RMRmlsdGVyKFN0cmluZyB3c2RsVVJMKQotICB7Ci0gICAgd3NkbFVSTF8gPSB3c2RsVVJMOwotICAgIGZpbmlzaF8gPSBmYWxzZTsKLSAgICBsaXZlXyA9IGZhbHNlOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXU0RMVVJMKCkKLSAgewotICAgIHJldHVybiB3c2RsVVJMXzsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzRmluaXNoKCkKLSAgewotICAgIHJldHVybiBmaW5pc2hfOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNXU0RMTGl2ZSgpCi0gIHsKLSAgICByZXR1cm4gbGl2ZV87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBydW4oKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgbGl2ZV8gPSB2YWxpZGF0ZVdTREwoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgIHsKLSAgICAgIGxpdmVfID0gZmFsc2U7Ci0gICAgfQotICAgIGZpbmFsbHkKLSAgICB7Ci0gICAgICBmaW5pc2hfID0gdHJ1ZTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gdmFsaWRhdGVXU0RMKCkgdGhyb3dzIFdTRExFeGNlcHRpb24sIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIFdXV0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uCi0gIHsKLSAgCVdlYlNlcnZpY2VzUGFyc2VyRXh0IHBhcnNlciA9IG5ldyBXZWJTZXJ2aWNlc1BhcnNlckV4dCgpOwotICAJRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gcGFyc2VyLmdldFdTRExEZWZpbml0aW9uVmVyYm9zZSh3c2RsVVJMXyk7Ci0gICAgTWFwIHNlcnZpY2VzID0gZGVmaW5pdGlvbi5nZXRTZXJ2aWNlcygpOwotICAgIEl0ZXJhdG9yIHNlcnZpY2VJdGVyYXRvciA9IHNlcnZpY2VzLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKHNlcnZpY2VJdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2Upc2VydmljZUl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIE1hcCBwb3J0cyA9IHNlcnZpY2UuZ2V0UG9ydHMoKTsKLSAgICAgIEl0ZXJhdG9yIHBvcnRJdGVyYXRvciA9IHBvcnRzLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAocG9ydEl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgUG9ydCBwb3J0ID0gKFBvcnQpcG9ydEl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgTGlzdCBleHRlbnNpYmlsaXR5RWxlbWVudHMgPSBwb3J0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgICBJdGVyYXRvciBleHRlbnNpYmlsaXR5RWxlbWVudHNJdGVyYXRvciA9IGV4dGVuc2liaWxpdHlFbGVtZW50cy5pdGVyYXRvcigpOwotICAgICAgICB3aGlsZSAoZXh0ZW5zaWJpbGl0eUVsZW1lbnRzSXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZXh0ZW5zaWJpbGl0eUVsZW1lbnRzSXRlcmF0b3IubmV4dCgpOwotICAgICAgICAgIGlmICgoZXh0ZW5zaWJpbGl0eUVsZW1lbnQgaW5zdGFuY2VvZiBTT0FQQWRkcmVzcykgfHwgKGV4dGVuc2liaWxpdHlFbGVtZW50IGluc3RhbmNlb2YgSFRUUEFkZHJlc3MpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnN1bXB0aW9uL3dzZmluZGVyL1dTRmluZGVyUmVnaXN0cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vd3NmaW5kZXIvV1NGaW5kZXJSZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYmJmMjdhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uc3VtcHRpb24vd3NmaW5kZXIvV1NGaW5kZXJSZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLndzZmluZGVyOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLQotcHVibGljIGNsYXNzIFdTRmluZGVyUmVnaXN0cnkKLXsKLSAgcHJpdmF0ZSBzdGF0aWMgV1NGaW5kZXJSZWdpc3RyeSBpbnN0YW5jZV87Ci0gIHByaXZhdGUgVmVjdG9yIHdzZmluZGVyc187Ci0KLSAgcHJpdmF0ZSBXU0ZpbmRlclJlZ2lzdHJ5KCkKLSAgewotICAgIHdzZmluZGVyc18gPSBuZXcgVmVjdG9yKCk7Ci0gIH0KLSAgCi0gIC8qKgotICAqIFJldHVybnMgYSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcy4KLSAgKiBAcmV0dXJuIEEgc2luZ2xldG9uIFdTRmluZGVyUmVnaXN0cnkgb2JqZWN0LgotICAqLwotICBwdWJsaWMgc3RhdGljIFdTRmluZGVyUmVnaXN0cnkgZ2V0SW5zdGFuY2UoKQotICB7Ci0gICAgaWYgKGluc3RhbmNlXyA9PSBudWxsKQotICAgIHsKLSAgICAgIGluc3RhbmNlXyA9IG5ldyBXU0ZpbmRlclJlZ2lzdHJ5KCk7Ci0gICAgICBpbnN0YW5jZV8uaW5pdCgpOwotICAgIH0KLSAgICByZXR1cm4gaW5zdGFuY2VfOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgaW5pdCgpCi0gIHsKLSAgICBJRXh0ZW5zaW9uUmVnaXN0cnkgcGx1Z2luUmVnID0gUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKTsKLSAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBjb25maWdFbGVtZW50cyA9IHBsdWdpblJlZy5nZXRDb25maWd1cmF0aW9uRWxlbWVudHNGb3IoIm9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbiIsICJ3c2ZpbmRlciIpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29uZmlnRWxlbWVudHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIE9iamVjdCBvYmplY3QgPSBjb25maWdFbGVtZW50c1tpXS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKCJjbGFzcyIpOwotICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgSVdTRmluZGVyKQotICAgICAgICB7Ci0gICAgICAgICAgSVdTRmluZGVyIHdzZmluZGVyID0gKElXU0ZpbmRlcilvYmplY3Q7Ci0gICAgICAgICAgd3NmaW5kZXIuc2V0SUQoY29uZmlnRWxlbWVudHNbaV0uZ2V0QXR0cmlidXRlKCJpZCIpKTsKLSAgICAgICAgICB3c2ZpbmRlci5zZXROYW1lKGNvbmZpZ0VsZW1lbnRzW2ldLmdldEF0dHJpYnV0ZSgibmFtZSIpKTsKLSAgICAgICAgICB3c2ZpbmRlci5zZXREZXNjcmlwdGlvbihjb25maWdFbGVtZW50c1tpXS5nZXRBdHRyaWJ1dGUoImRlc2NyaXB0aW9uIikpOwotICAgICAgICAgIHdzZmluZGVyc18uYWRkKHdzZmluZGVyKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2F0Y2ggKENvcmVFeGNlcHRpb24gY2UpCi0gICAgICB7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIExpc3QgZ2V0V1NGaW5kZXJzKCkKLSAgewotICAgIHJldHVybiB3c2ZpbmRlcnNfOwotICB9Ci0gIAotICBwdWJsaWMgTGlzdCBnZXRXZWJTZXJ2aWNlcygpCi0gIHsKLSAgICBMaXN0IHdzID0gbmV3IFZlY3RvcigpOwotICAgIExpc3Qgd3NGaW5kZXJzID0gZ2V0V1NGaW5kZXJzKCk7Ci0gICAgZm9yIChJdGVyYXRvciBpdCA9IHdzRmluZGVycy5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIElXU0ZpbmRlciB3c0ZpbmRlciA9IChJV1NGaW5kZXIpaXQubmV4dCgpOwotICAgICAgd3MuYWRkQWxsKHdzRmluZGVyLmZpbmQoKSk7Ci0gICAgfQotICAgIHJldHVybiB3czsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vd2Vic2VydmljZXV0aWxzL29yZy9lY2xpcHNlL2pzdC93cy91dGlsL0RvbUVsZW1lbnRIZWxwZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3dlYnNlcnZpY2V1dGlscy9vcmcvZWNsaXBzZS9qc3Qvd3MvdXRpbC9Eb21FbGVtZW50SGVscGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ZWEyYmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vd2Vic2VydmljZXV0aWxzL29yZy9lY2xpcHNlL2pzdC93cy91dGlsL0RvbUVsZW1lbnRIZWxwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MudXRpbDsKLQotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlcjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5OwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotCi0vKioKLSAqIEBhdXRob3IgZ2lsYmVydGEKLSAqCi0gKiBUbyBjaGFuZ2UgdGhlIHRlbXBsYXRlIGZvciB0aGlzIGdlbmVyYXRlZCB0eXBlIGNvbW1lbnQgZ28gdG8KLSAqIFdpbmRvdyZndDtQcmVmZXJlbmNlcyZndDtKYXZhJmd0O0NvZGUgR2VuZXJhdGlvbiZndDtDb2RlIGFuZCBDb21tZW50cwotICovCi1wdWJsaWMgY2xhc3MgRG9tRWxlbWVudEhlbHBlciB7Ci0KLQotICBwdWJsaWMgc3RhdGljIG9yZy53M2MuZG9tLkVsZW1lbnQgY3JlYXRlRG9tRWxlbWVudEZyb21YTUxTdHJpbmcoamF2YS5sYW5nLlN0cmluZyB4bWxTdHJpbmcgKQotICB7Ci0gICAgamF2YS5pby5TdHJpbmdSZWFkZXIgc3RyaW5nUmVhZGVyID0gbmV3IGphdmEuaW8uU3RyaW5nUmVhZGVyKHhtbFN0cmluZyk7IAotICAgIG9yZy54bWwuc2F4LklucHV0U291cmNlIGlucHV0U291cmNlID0gbmV3IG9yZy54bWwuc2F4LklucHV0U291cmNlKHN0cmluZ1JlYWRlcik7IAotICAgIHRyeQotICAgIHsKLSAgICAgIERvY3VtZW50QnVpbGRlckZhY3RvcnkgZG9jQnVpbGRlckZhY3RvcnkgPSBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0gICAgICBEb2N1bWVudEJ1aWxkZXIgZG9jQnVpbGRlciA9IGRvY0J1aWxkZXJGYWN0b3J5Lm5ld0RvY3VtZW50QnVpbGRlcigpOwotICAgICAgRG9jdW1lbnQgZG9jdW1lbnQgPSBkb2NCdWlsZGVyLnBhcnNlKGlucHV0U291cmNlKTsKLSAgICAgIHJldHVybiBkb2N1bWVudC5nZXREb2N1bWVudEVsZW1lbnQoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgamF2YS5sYW5nLlN0cmluZyBkb21Xcml0ZXIob3JnLnczYy5kb20uTm9kZSBub2RlLGphdmEubGFuZy5TdHJpbmdCdWZmZXIgYnVmZmVyKQotICB7Ci0gICAgaWYgKCBub2RlID09IG51bGwgKSB7Ci0gICAgICByZXR1cm4gIiI7Ci0gICAgfQotCWludCB0eXBlID0gbm9kZS5nZXROb2RlVHlwZSgpOwotCXN3aXRjaCAoIHR5cGUgKSB7Ci0JICBjYXNlIG9yZy53M2MuZG9tLk5vZGUuRE9DVU1FTlRfTk9ERTogewotCSAgYnVmZmVyLmFwcGVuZChKc3BVdGlscy5tYXJrdXAoIjw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIlVURi04XCI/PiIpICsgIjxicj4iKTsKLQkgIGRvbVdyaXRlcigoKG9yZy53M2MuZG9tLkRvY3VtZW50KW5vZGUpLmdldERvY3VtZW50RWxlbWVudCgpLGJ1ZmZlcik7Ci0JICBicmVhazsKLQl9Ci0JICBjYXNlIG9yZy53M2MuZG9tLk5vZGUuRUxFTUVOVF9OT0RFOiB7Ci0JICBidWZmZXIuYXBwZW5kKEpzcFV0aWxzLm1hcmt1cCgiPCIgKyBub2RlLmdldE5vZGVOYW1lKCkpKTsKLQkgIG9yZy53M2MuZG9tLkF0dHIgYXR0cnNbXSA9IHNvcnRBdHRyaWJ1dGVzKG5vZGUuZ2V0QXR0cmlidXRlcygpKTsKLQkgIGZvciAoIGludCBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrICkgewotCSAgICBvcmcudzNjLmRvbS5BdHRyIGF0dHIgPSBhdHRyc1tpXTsKLQkgICAgYnVmZmVyLmFwcGVuZCgiICIgKyBhdHRyLmdldE5vZGVOYW1lKCkgKyAiPVwiIiArIEpzcFV0aWxzLm1hcmt1cChhdHRyLmdldE5vZGVWYWx1ZSgpKSArICJcIiIpOwotCSAgfQotCSAgICBidWZmZXIuYXBwZW5kKEpzcFV0aWxzLm1hcmt1cCgiPiIpKTsKLQkgICAgb3JnLnczYy5kb20uTm9kZUxpc3QgY2hpbGRyZW4gPSBub2RlLmdldENoaWxkTm9kZXMoKTsKLQkgICAgaWYgKCBjaGlsZHJlbiAhPSBudWxsICkgewotCSAgICAgIGludCBsZW4gPSBjaGlsZHJlbi5nZXRMZW5ndGgoKTsKLQkJICBmb3IgKCBpbnQgaSA9IDA7IGkgPCBsZW47IGkrKyApIHsKLQkJICAgIGlmKCgob3JnLnczYy5kb20uTm9kZSljaGlsZHJlbi5pdGVtKGkpKS5nZXROb2RlVHlwZSgpID09IG9yZy53M2MuZG9tLk5vZGUuRUxFTUVOVF9OT0RFKQotCQkJICBidWZmZXIuYXBwZW5kKCI8YnI+Iik7Ci0JCQlkb21Xcml0ZXIoY2hpbGRyZW4uaXRlbShpKSxidWZmZXIpOwotCQkgIH0KLQkJfQotCQlidWZmZXIuYXBwZW5kKEpzcFV0aWxzLm1hcmt1cCgiPC8iICsgbm9kZS5nZXROb2RlTmFtZSgpICsgIj4iKSk7Ci0JCWJyZWFrOwotICAgICAgfQotCSAgY2FzZSBvcmcudzNjLmRvbS5Ob2RlLkVOVElUWV9SRUZFUkVOQ0VfTk9ERTogewotCSAgICBvcmcudzNjLmRvbS5Ob2RlTGlzdCBjaGlsZHJlbiA9IG5vZGUuZ2V0Q2hpbGROb2RlcygpOwotCSAgICBpZiAoIGNoaWxkcmVuICE9IG51bGwgKSB7Ci0JCSAgaW50IGxlbiA9IGNoaWxkcmVuLmdldExlbmd0aCgpOwotCQkgIGZvciAoIGludCBpID0gMDsgaSA8IGxlbjsgaSsrICkKLQkgICAgICB7Ci0JCSAgICBidWZmZXIuYXBwZW5kKGNoaWxkcmVuLml0ZW0oaSkpOwotCQkgIH0KLQkJfQotCQlicmVhazsKLQkgIH0KLQkgIGNhc2Ugb3JnLnczYy5kb20uTm9kZS5DREFUQV9TRUNUSU9OX05PREU6IHsKLQkgICAgYnVmZmVyLmFwcGVuZChKc3BVdGlscy5tYXJrdXAobm9kZS5nZXROb2RlVmFsdWUoKSkpOwotCSAgICBicmVhazsKLSAgICAgIH0KLQkgIGNhc2Ugb3JnLnczYy5kb20uTm9kZS5URVhUX05PREU6ewotCSAgICBidWZmZXIuYXBwZW5kKEpzcFV0aWxzLm1hcmt1cChub2RlLmdldE5vZGVWYWx1ZSgpKSk7Ci0JICAgIGJyZWFrOwotCSAgfQotCSAgY2FzZSBvcmcudzNjLmRvbS5Ob2RlLlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERTp7Ci0JCWJ1ZmZlci5hcHBlbmQoSnNwVXRpbHMubWFya3VwKCI8PyIpKTsKLQkJYnVmZmVyLmFwcGVuZChub2RlLmdldE5vZGVOYW1lKCkpOwotCQlTdHJpbmcgZGF0YSA9IG5vZGUuZ2V0Tm9kZVZhbHVlKCk7Ci0JCWlmICggZGF0YSAhPSBudWxsICYmIGRhdGEubGVuZ3RoKCkgPiAwICl7Ci0JICAgICAgYnVmZmVyLmFwcGVuZCgiICIpOwotCQkgIGJ1ZmZlci5hcHBlbmQoZGF0YSk7Ci0JCX0KLQkJYnVmZmVyLmFwcGVuZChKc3BVdGlscy5tYXJrdXAoIj8+IikpOwotCQkgIGJyZWFrOwotCQl9Ci0JICB9Ci0JICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7Ci0gICAgfQotIAotCXB1YmxpYyBzdGF0aWMgb3JnLnczYy5kb20uQXR0cltdIHNvcnRBdHRyaWJ1dGVzKG9yZy53M2MuZG9tLk5hbWVkTm9kZU1hcCBhdHRycykKLQl7Ci0JICBpbnQgbGVuID0gKGF0dHJzICE9IG51bGwpID8gYXR0cnMuZ2V0TGVuZ3RoKCkgOiAwOwotCSAgb3JnLnczYy5kb20uQXR0ciBhcnJheVtdID0gbmV3IG9yZy53M2MuZG9tLkF0dHJbbGVuXTsKLQkgIGZvciAoIGludCBpID0gMDsgaSA8IGxlbjsgaSsrICl7Ci0JICAgYXJyYXlbaV0gPSAob3JnLnczYy5kb20uQXR0cilhdHRycy5pdGVtKGkpOwotCSAgfQotCSAgZm9yICggaW50IGkgPSAwOyBpIDwgbGVuIC0gMTsgaSsrICkgewotCSAgICBTdHJpbmcgbmFtZSAgPSBhcnJheVtpXS5nZXROb2RlTmFtZSgpOwotCSAgICBpbnQgaW5kZXggPSBpOwotCSAgICBmb3IgKCBpbnQgaiA9IGkgKyAxOyBqIDwgbGVuOyBqKysgKSB7Ci0JICAgICAgU3RyaW5nIGN1ck5hbWUgPSBhcnJheVtqXS5nZXROb2RlTmFtZSgpOwotCQkgIGlmICggY3VyTmFtZS5jb21wYXJlVG8obmFtZSkgPCAwICkgewotCQkgICAgbmFtZSAgPSBjdXJOYW1lOwotCQkJaW5kZXggPSBqOwotCQkgIH0KLQkJfQotCQlpZiAoIGluZGV4ICE9IGkgKSB7Ci0JCSAgb3JnLnczYy5kb20uQXR0ciB0ZW1wID0gYXJyYXlbaV07Ci0JCSAgYXJyYXlbaV0gPSBhcnJheVtpbmRleF07Ci0JCSAgYXJyYXlbaW5kZXhdID0gdGVtcDsKLQkJfQotCSAgfQotCSAgcmV0dXJuIChhcnJheSk7Ci0gICAgfQotIAotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi93ZWJzZXJ2aWNldXRpbHMvb3JnL2VjbGlwc2UvanN0L3dzL3V0aWwvSnNwVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3dlYnNlcnZpY2V1dGlscy9vcmcvZWNsaXBzZS9qc3Qvd3MvdXRpbC9Kc3BVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYmI5MDEzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3dlYnNlcnZpY2V1dGlscy9vcmcvZWNsaXBzZS9qc3Qvd3MvdXRpbC9Kc3BVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy51dGlsOwotCi0vKioKLSAqIEBhdXRob3IgZ2lsYmVydGEKLSAqCi0gKiBUbyBjaGFuZ2UgdGhlIHRlbXBsYXRlIGZvciB0aGlzIGdlbmVyYXRlZCB0eXBlIGNvbW1lbnQgZ28gdG8KLSAqIFdpbmRvdyZndDtQcmVmZXJlbmNlcyZndDtKYXZhJmd0O0NvZGUgR2VuZXJhdGlvbiZndDtDb2RlIGFuZCBDb21tZW50cwotICovCi1wdWJsaWMgY2xhc3MgSnNwVXRpbHMgewotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIG1hcmt1cChTdHJpbmcgdGV4dCkgewotCQkJaWYgKHRleHQgPT0gbnVsbCkgewotCQkJCXJldHVybiBudWxsOwotCQkJfQotCi0JCQlTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aCgpOyBpKyspIHsKLQkJCQljaGFyIGMgPSB0ZXh0LmNoYXJBdChpKTsKLQkJCQlzd2l0Y2ggKGMpIHsKLQkJCQkJY2FzZSAnPCc6Ci0JCQkJCQlidWZmZXIuYXBwZW5kKCImbHQ7Iik7Ci0JCQkJCQlicmVhazsKLQkJCQkJY2FzZSAnJic6Ci0JCQkJCQlidWZmZXIuYXBwZW5kKCImYW1wOyIpOwotCQkJCQkJYnJlYWs7Ci0JCQkJCWNhc2UgJz4nOgotCQkJCQkJYnVmZmVyLmFwcGVuZCgiJmd0OyIpOwotCQkJCQkJYnJlYWs7Ci0JCQkJCWNhc2UgJyInOgotCQkJCQkJYnVmZmVyLmFwcGVuZCgiJnF1b3Q7Iik7Ci0JCQkJCQlicmVhazsKLQkJCQkJZGVmYXVsdDoKLQkJCQkJCWJ1ZmZlci5hcHBlbmQoYyk7Ci0JCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCQlyZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7Ci0JCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vd2Vic2VydmljZXV0aWxzL29yZy9lY2xpcHNlL2pzdC93cy91dGlsL1NvYXBFbGVtZW50SGVscGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi93ZWJzZXJ2aWNldXRpbHMvb3JnL2VjbGlwc2UvanN0L3dzL3V0aWwvU29hcEVsZW1lbnRIZWxwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTgwMzAwNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi93ZWJzZXJ2aWNldXRpbHMvb3JnL2VjbGlwc2UvanN0L3dzL3V0aWwvU29hcEVsZW1lbnRIZWxwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDEzMSAgIDEyMzk2MyBhbmR5emhhaUBjYS5pYm0uY29tIC0gQW5keSBaaGFpCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnV0aWw7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5TQVhQYXJzZXI7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuU0FYUGFyc2VyRmFjdG9yeTsKLQotaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKLQotLyoqCi0gKiBAYXV0aG9yIGdpbGJlcnRhCi0gKi8KLXB1YmxpYyBjbGFzcyBTb2FwRWxlbWVudEhlbHBlcgotewotCXB1YmxpYyBzdGF0aWMgamF2YXgueG1sLnNvYXAuU09BUEVsZW1lbnQgY3JlYXRlU09BUEVsZW1lbnRGcm9tWE1MU3RyaW5nKFN0cmluZyB4bWxTdHJpbmcpIHRocm93cyBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgU0FYRXhjZXB0aW9uCi0JewotCQlqYXZhLmlvLlN0cmluZ1JlYWRlciBzdHJpbmdSZWFkZXIgPSBuZXcgamF2YS5pby5TdHJpbmdSZWFkZXIoeG1sU3RyaW5nKTsgCi0JCW9yZy54bWwuc2F4LklucHV0U291cmNlIGlucHV0U291cmNlID0gbmV3IG9yZy54bWwuc2F4LklucHV0U291cmNlKHN0cmluZ1JlYWRlcik7IAotCQlTQVhQYXJzZXJGYWN0b3J5IGZhY3RvcnkgPSBTQVhQYXJzZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0JCWZhY3Rvcnkuc2V0TmFtZXNwYWNlQXdhcmUodHJ1ZSk7Ci0JCVNBWFBhcnNlciBwYXJzZXIgPSBmYWN0b3J5Lm5ld1NBWFBhcnNlcigpOwotCQlTb2FwRWxlbWVudFNheEhhbmRsZXIgaGFuZGxlciA9IG5ldyBTb2FwRWxlbWVudFNheEhhbmRsZXIoKTsKLQkJcGFyc2VyLnBhcnNlKGlucHV0U291cmNlLGhhbmRsZXIpOwotCQlyZXR1cm4gaGFuZGxlci5nZXRTT0FQRWxlbWVudCgpOyAgICAKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIGphdmEubGFuZy5TdHJpbmcgc29hcEVsZW1lbnRXcml0ZXIoamF2YXgueG1sLnNvYXAuU09BUEVsZW1lbnQgbm9kZSxqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIGJ1ZmZlcikKLQl7Ci0JCWlmIChub2RlID09IG51bGwgKSB7Ci0JCQlyZXR1cm4gIiI7Ci0JCX0KLQkJCi0JCWJ1ZmZlci5hcHBlbmQoSnNwVXRpbHMubWFya3VwKCI8IiArIG5vZGUuZ2V0RWxlbWVudE5hbWUoKS5nZXRMb2NhbE5hbWUoKSkpOwotCQlqYXZhLnV0aWwuSXRlcmF0b3IgYXR0cnMgPSBub2RlLmdldEFsbEF0dHJpYnV0ZXMoKTsKLQkJd2hpbGUoYXR0cnMuaGFzTmV4dCgpKSB7Ci0JCQlqYXZheC54bWwuc29hcC5OYW1lIGF0dHIgPSAoamF2YXgueG1sLnNvYXAuTmFtZSlhdHRycy5uZXh0KCk7Ci0JCQlidWZmZXIuYXBwZW5kKCIgIiArIGF0dHIuZ2V0UXVhbGlmaWVkTmFtZSgpICsgIj1cIiIgKyBKc3BVdGlscy5tYXJrdXAobm9kZS5nZXRBdHRyaWJ1dGVWYWx1ZShhdHRyKSkgKyAiXCIiKTsKLQkJfQotCQlidWZmZXIuYXBwZW5kKEpzcFV0aWxzLm1hcmt1cCgiPiIpKTsKLQkJamF2YS51dGlsLkl0ZXJhdG9yIGNoaWxkcmVuID0gbm9kZS5nZXRDaGlsZEVsZW1lbnRzKCk7Ci0JCWlmICggY2hpbGRyZW4gIT0gbnVsbCApIHsKLQkJCXdoaWxlKGNoaWxkcmVuLmhhc05leHQoKSl7Ci0JCQkJamF2YXgueG1sLnNvYXAuTm9kZSBjaGlsZE5vZGUgPSAoamF2YXgueG1sLnNvYXAuTm9kZSljaGlsZHJlbi5uZXh0KCk7Ci0JCQkJaWYoY2hpbGROb2RlIGluc3RhbmNlb2YgamF2YXgueG1sLnNvYXAuU09BUEVsZW1lbnQpewotCQkJCQlidWZmZXIuYXBwZW5kKCI8YnI+Iik7Ci0JCQkJCXNvYXBFbGVtZW50V3JpdGVyKChqYXZheC54bWwuc29hcC5TT0FQRWxlbWVudCljaGlsZE5vZGUsYnVmZmVyKTsKLQkJCQl9Ci0JCQkJZWxzZQotCQkJCQlidWZmZXIuYXBwZW5kKEpzcFV0aWxzLm1hcmt1cCgoKGphdmF4LnhtbC5zb2FwLlRleHQpY2hpbGROb2RlKS5nZXRWYWx1ZSgpKSk7IAotCQkJfQotCQkJYnVmZmVyLmFwcGVuZChKc3BVdGlscy5tYXJrdXAoIjwvIiArIG5vZGUuZ2V0RWxlbWVudE5hbWUoKS5nZXRMb2NhbE5hbWUoKSArICI+IikpOwotCQl9Ci0JCXJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi93ZWJzZXJ2aWNldXRpbHMvb3JnL2VjbGlwc2UvanN0L3dzL3V0aWwvU29hcEVsZW1lbnRSdW50aW1lRXhjZXB0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi93ZWJzZXJ2aWNldXRpbHMvb3JnL2VjbGlwc2UvanN0L3dzL3V0aWwvU29hcEVsZW1lbnRSdW50aW1lRXhjZXB0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkNjcwZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24vd2Vic2VydmljZXV0aWxzL29yZy9lY2xpcHNlL2pzdC93cy91dGlsL1NvYXBFbGVtZW50UnVudGltZUV4Y2VwdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnV0aWw7Ci0KLS8qKgotICogQGF1dGhvciBnaWxiZXJ0YQotICoKLSAqIFRvIGNoYW5nZSB0aGUgdGVtcGxhdGUgZm9yIHRoaXMgZ2VuZXJhdGVkIHR5cGUgY29tbWVudCBnbyB0bwotICogV2luZG93Jmd0O1ByZWZlcmVuY2VzJmd0O0phdmEmZ3Q7Q29kZSBHZW5lcmF0aW9uJmd0O0NvZGUgYW5kIENvbW1lbnRzCi0gKi8KLXB1YmxpYyBjbGFzcyBTb2FwRWxlbWVudFJ1bnRpbWVFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24gIHsKLQotICAvKioKLQkgKiBDb21tZW50IGZvciA8Y29kZT5zZXJpYWxWZXJzaW9uVUlEPC9jb2RlPgotCSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDM3NjE2OTMzNzI2NzQ3NDg0NzFMOwotCi1wdWJsaWMgU29hcEVsZW1lbnRSdW50aW1lRXhjZXB0aW9uKFN0cmluZyBtZXNzYWdlKXsKLSAgICBzdXBlcihtZXNzYWdlKTsKLSAgfQotICAKLSAgCi0gICAgICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3dlYnNlcnZpY2V1dGlscy9vcmcvZWNsaXBzZS9qc3Qvd3MvdXRpbC9Tb2FwRWxlbWVudFNheEhhbmRsZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uL3dlYnNlcnZpY2V1dGlscy9vcmcvZWNsaXBzZS9qc3Qvd3MvdXRpbC9Tb2FwRWxlbWVudFNheEhhbmRsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjZiYmY2ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi93ZWJzZXJ2aWNldXRpbHMvb3JnL2VjbGlwc2UvanN0L3dzL3V0aWwvU29hcEVsZW1lbnRTYXhIYW5kbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDEzMSAgIDEyMzk2MyBhbmR5emhhaUBjYS5pYm0uY29tIC0gQW5keSBaaGFpCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MudXRpbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci0KLWltcG9ydCBqYXZheC54bWwuc29hcC5OYW1lOwotaW1wb3J0IGphdmF4LnhtbC5zb2FwLlNPQVBFbGVtZW50OwotaW1wb3J0IGphdmF4LnhtbC5zb2FwLlNPQVBFeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnNvYXAuU09BUEZhY3Rvcnk7Ci0KLWltcG9ydCBvcmcueG1sLnNheC5BdHRyaWJ1dGVzOwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcueG1sLnNheC5oZWxwZXJzLkRlZmF1bHRIYW5kbGVyOwotCi0vKioKLSAqIEBhdXRob3IgeGluemhhaQotICovCi1wdWJsaWMgY2xhc3MgU29hcEVsZW1lbnRTYXhIYW5kbGVyIGV4dGVuZHMgRGVmYXVsdEhhbmRsZXIKLXsKLQkvL1N0b3JlcyBhbGwgdmFsdWVzIG9mIHBhaXJzIG9mIHByZWZpeCBhbmQgVVJJIGluIHRoZSBkb2N1bWVudAotCXByaXZhdGUgSGFzaE1hcCBwcmVmaXhVUklNYXBwaW5nID0gbmV3IEhhc2hNYXAoKTsKLQkvL1N0b3JlcyBhIGxpc3Qgb2YgVVJJcyBmb3IgYSBwYXJ0aWN1bGFyIFNPQVAgZWxlbWVudAotCXByaXZhdGUgQXJyYXlMaXN0IHVyaXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JLy9SZXByZXNlbnRzIHRoZSB3aG9sZShyb290KSBTT0FQIGRvY3VtZW50Ci0JcHJpdmF0ZSBTT0FQRWxlbWVudCByb290RWxlbWVudCA9IG51bGw7Ci0JLy9SZXByZXNlbnRzIHRoZSBjdXJyZW50IFNPQVAgZWxlbWVudCB3aGVyZSBTQVggcGFyc2VyIGlzIHJlYWRpbmcKLQlwcml2YXRlIFNPQVBFbGVtZW50IGN1cnJlbnRFbGVtZW50ID0gbnVsbDsKLQlwcml2YXRlIFNPQVBGYWN0b3J5IHNvYXBGYWN0b3J5OwotCQotCXB1YmxpYyBTT0FQRWxlbWVudCBnZXRTT0FQRWxlbWVudCgpCi0JewotCQlyZXR1cm4gcm9vdEVsZW1lbnQ7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHN0YXJ0RG9jdW1lbnQoKSB0aHJvd3MgU0FYRXhjZXB0aW9uCi0JewotCQl0cnkgCi0JCXsKLQkJCXNvYXBGYWN0b3J5ID0gU09BUEZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLQkJfQotCQljYXRjaCAoU09BUEV4Y2VwdGlvbiBlKSAKLQkJewotCQkJdGhyb3cgbmV3IFNBWEV4Y2VwdGlvbigiQ2FuJ3QgY3JlYXRlIGEgU09BUEZhY3RvcnkgaW5zdGFuY2UiLCBlKTsKLQkJfQkKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzdGFydFByZWZpeE1hcHBpbmcoU3RyaW5nIHByZWZpeCwgU3RyaW5nIHVyaSkKLQl7Ci0JCXByZWZpeFVSSU1hcHBpbmcucHV0KHVyaSxwcmVmaXgpOwotCQl1cmlzLmFkZCh1cmkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBjaGFyYWN0ZXJzKGNoYXJbXSBjaCwgaW50IHN0YXJ0LCBpbnQgbGVuZ3RoKSB0aHJvd3MgU0FYRXhjZXB0aW9uCi0JewotCQlTdHJpbmcgc3RyID0gU3RyaW5nLnZhbHVlT2YoY2gpOwotCQkvL0FkZCBub24tdHJpdmlhbCB0ZXh0IGFzIGEgdGV4dCBub2RlCi0JCWlmIChsZW5ndGggPiAxKQotCQl7Ci0JCQl0cnkgCi0JCQl7Ci0JCQkJY3VycmVudEVsZW1lbnQuYWRkVGV4dE5vZGUoc3RyLnN1YnN0cmluZyhzdGFydCxzdGFydCtsZW5ndGgpKTsKLQkJCX0gCi0JCQljYXRjaCAoU09BUEV4Y2VwdGlvbiBlKSAKLQkJCXsKLQkJCQl0aHJvdyBuZXcgU0FYRXhjZXB0aW9uKCJDYW4ndCBhZGQgYSB0ZXh0IG5vZGUgaW50byBTT0FQRWxlbWVudCBmcm9tIHRleHQiLCBlKTsKLQkJCX0KLQkJfQotCX0KLQkKLQlwdWJsaWMgdm9pZCBlbmRFbGVtZW50IChTdHJpbmcgdXJpLCBTdHJpbmcgbG9jYWxOYW1lLCBTdHJpbmcgcU5hbWUpCi0JewotCQlpZiAoY3VycmVudEVsZW1lbnQgIT0gcm9vdEVsZW1lbnQgKQotCQl7Ci0JCQljdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LmdldFBhcmVudEVsZW1lbnQoKTsKLQkJfQotCX0KLQlwdWJsaWMgdm9pZCBzdGFydEVsZW1lbnQoU3RyaW5nIG5hbWVzcGFjZVVSSSwgU3RyaW5nIGxvY2FsTmFtZSwgU3RyaW5nIHFOYW1lLCBBdHRyaWJ1dGVzIGF0dHMpIHRocm93cyBTQVhFeGNlcHRpb24KLQl7Ci0JCVN0cmluZyBwcmVmaXggPSAoU3RyaW5nKXByZWZpeFVSSU1hcHBpbmcuZ2V0KG5hbWVzcGFjZVVSSSk7Ci0JCXRyeQotCQl7Ci0JCQkvLyBDcmVhdGUgYW5kL29yIGFkZCBjaGlsZCBlbGVtZW50Ci0JCQlpZiAocm9vdEVsZW1lbnQgPT0gbnVsbCAmJiBjdXJyZW50RWxlbWVudCA9PSBudWxsKQotCQkJewotCQkJCXJvb3RFbGVtZW50ID0gc29hcEZhY3RvcnkuY3JlYXRlRWxlbWVudChsb2NhbE5hbWUscHJlZml4LG5hbWVzcGFjZVVSSSk7Ci0JCQkJY3VycmVudEVsZW1lbnQgPSByb290RWxlbWVudDsKLQkJCX0gCi0JCQllbHNlCi0JCQl7Ci0JCQkJY3VycmVudEVsZW1lbnQgPSBjdXJyZW50RWxlbWVudC5hZGRDaGlsZEVsZW1lbnQobG9jYWxOYW1lLHByZWZpeCxuYW1lc3BhY2VVUkkpOwotCQkJfQotCQkJCi0JCQkvLyBBZGQgbmFtZXNwYWNlIGRlY2xhcmF0aW9uCi0JCQlpZiAodXJpcy5zaXplKCkgPiAwKQotCQkJewotCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgdXJpcy5zaXplKCk7IGkrKykKLQkJCQl7Ci0JCQkJCVN0cmluZyB1cmkgPSAoU3RyaW5nKXVyaXMuZ2V0KGkpOwotCQkJCQlTdHJpbmcgcHJlID0gKFN0cmluZylwcmVmaXhVUklNYXBwaW5nLmdldCh1cmkpOwotCQkJCQljdXJyZW50RWxlbWVudC5hZGROYW1lc3BhY2VEZWNsYXJhdGlvbihwcmUsdXJpKTsKLQkJCQl9Ci0JCQkJLy8gTmVlZCB0byByZXNldCB1cmlzIGFzIHdlIHdpbGwgdXNlIGl0IGZvciBuZXh0IGVsZW1lbnQuCi0JCQkJdXJpcy5jbGVhcigpOyAKLQkJCX0KLQkJCQotCQkJLy8gQWRkIGF0dGlidXRlcwotCQkJZm9yIChpbnQgaSA9MDsgaTxhdHRzLmdldExlbmd0aCgpOyBpKyspCi0JCQl7Ci0JCQkJTmFtZSBhdHRyaU5hbWU7Ci0JCQkJaWYgKGF0dHMuZ2V0VVJJKGkpICE9IG51bGwpCi0JCQkJewotCQkJCQlTdHJpbmcgYXR0cmlQcmUgPSAoU3RyaW5nKXByZWZpeFVSSU1hcHBpbmcuZ2V0KGF0dHMuZ2V0VVJJKGkpKTsKLQkJCQkJYXR0cmlOYW1lID0gc29hcEZhY3RvcnkuY3JlYXRlTmFtZShhdHRzLmdldExvY2FsTmFtZShpKSxhdHRyaVByZSxhdHRzLmdldFVSSShpKSk7Ci0JCQkJfQotCQkJCWVsc2UKLQkJCQl7Ci0JCQkJCWF0dHJpTmFtZSA9IHNvYXBGYWN0b3J5LmNyZWF0ZU5hbWUoYXR0cy5nZXRMb2NhbE5hbWUoaSkpOwotCQkJCX0KLQkJCQljdXJyZW50RWxlbWVudC5hZGRBdHRyaWJ1dGUoYXR0cmlOYW1lLCBhdHRzLmdldFZhbHVlKGkpKTsKLQkJCX0KLQkJfQotCQljYXRjaCAoU09BUEV4Y2VwdGlvbiBlKSAKLQkJewotCQkJdGhyb3cgbmV3IFNBWEV4Y2VwdGlvbihlKTsKLQkJfQotCX0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24uZWpiLnVpLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi5lamIudWkvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE0NDg3Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi5lamIudWkvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWJ1aWxkLnhtbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24uZWpiLnVpLy5wcm9qZWN0IGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24uZWpiLnVpLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDIzNDYxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLmVqYi51aS8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi5lamIudWk8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi5lamIudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLmVqYi51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjI4MWIzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLmVqYi51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotI1N1biBKdW4gMDMgMDE6NTc6MDAgRURUIDIwMDcKLWNvbXBpbGVycy5pbmNvbXBhdGlibGUtZW52aXJvbm1lbnQ9MQotY29tcGlsZXJzLnAuYnVpbGQ9MQotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5taXNzaW5nLXBhY2thZ2VzPTIKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0xCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTIKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0xCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24uZWpiLnVpL01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24uZWpiLnVpL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjFmMTc2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLmVqYi51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJVBMVUdJTl9OQU1FCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24uZWpiLnVpOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMTAwLnF1YWxpZmllcgotQnVuZGxlLVZlbmRvcjogJVBMVUdJTl9QUk9WSURFUgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24uZWpiLnVpL2Fib3V0Lmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi5lamIudWkvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkYjM2ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi5lamIudWkvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24uZWpiLnVpL2J1aWxkLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi5lamIudWkvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmUyOTQwZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi5lamIudWkvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotYmluLmluY2x1ZGVzID0gcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24uZWpiLnVpL3BsdWdpbi5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24uZWpiLnVpL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxM2ZlNjU0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLmVqYi51aS9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgTWVzc2FnZXMgaW4gcGx1Z2luLnhtbC4KLSMKLVBMVUdJTl9OQU1FPVdlYiBTZXJ2aWNlcyBDcmVhdGlvbiBFSkIgR3JhcGhpY2FsIFVzZXIgSW50ZXJmYWNlCi1QTFVHSU5fUFJPVklERVI9RWNsaXBzZS5vcmcKLQotIwotIyBXZWIgc2VydmljZSB0eXBlcwotIwotV0VCU0VSVklDRVRZUEVfTkFNRV9FSkJfVFA9RUpCIFdlYiBTZXJ2aWNlCi1XRUJTRVJWSUNFVFlQRV9OQU1FX1dTRExfRUpCX1RQPVNrZWxldG9uIEVKQiBXZWIgU2VydmljZQotCi0jCi0jIFBvcC11cCBhY3Rpb25zCi0jCi1BQ1RJT05fREVQTE9ZX1dFQlNFUlZJQ0U9Q3JlYXRlIFdlYiBzZXJ2aWNlCi0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLmVqYi51aS9wbHVnaW4ueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24uZWpiLnVpL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4YjNjMzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24uZWpiLnVpL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotCi08cGx1Z2luPgotCi0gICAgPCEtLSBFSkIgV2ViIFNlcnZpY2UgVHlwZXMgLS0+Ci08IS0tICAgCi0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLndlYlNlcnZpY2VTZXJ2ZXJSdW50aW1lVHlwZSI+Ci0KLSAgICAgIDx3ZWJTZXJ2aWNlVHlwZQotICAgICAgICAgICAgbGFiZWw9IiVXRUJTRVJWSUNFVFlQRV9OQU1FX1dTRExfRUpCX1RQIgotICAgICAgICAgICAgcmVzb3VyY2VUeXBlTWV0YWRhdGE9IkZpbGUgSVJlc291cmNlIgotICAgICAgICAgICAgZXh0ZW5zaW9uTWV0YWRhdGE9Ii53c2RsIgotICAgICAgICAgICAgb2JqZWN0U2VsZWN0aW9uV2lkZ2V0PSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuV1NETFNlbGVjdGlvbldpZGdldCIKLSAgICAgICAgICAgIGluY2x1ZGVOYXR1cmVzPSJvcmcuZWNsaXBzZS5qc3QuajJlZS5lamIuRUpCTmF0dXJlIgotICAgICAgICAgICAgZXhjbHVkZU5hdHVyZXM9IiIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MudHlwZS53c2RsLmVqYiI+Ci0gICAgICA8L3dlYlNlcnZpY2VUeXBlPgotCi0gICAgICA8d2ViU2VydmljZVR5cGUKLQkJICAgIGxhYmVsPSIlV0VCU0VSVklDRVRZUEVfTkFNRV9FSkJfVFAiCi0JCSAgICByZXNvdXJjZVR5cGVNZXRhZGF0YT0iRUpCT2JqZWN0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmVqYi5FbnRlcnByaXNlQmVhbiBTZXNzaW9uSW1wbCIKLQkJICAgIGV4dGVuc2lvbk1ldGFkYXRhPSIuamF2YSAuY2xhc3MgLlNlc3Npb25JbXBsIgotCQkgICAgb2JqZWN0U2VsZWN0aW9uV2lkZ2V0PSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuRUpCU2VsZWN0aW9uV2lkZ2V0IgotCQkgICAgaW5jbHVkZU5hdHVyZXM9Im9yZy5lY2xpcHNlLmpzdC5qMmVlLmVqYi5FSkJOYXR1cmUiCi0JCSAgICBleGNsdWRlTmF0dXJlcz0iIgotCQkgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy50eXBlLmVqYiI+Ci0gIAkgPC93ZWJTZXJ2aWNlVHlwZT4KLQk8L2V4dGVuc2lvbj4KLS0tPgotCi0gICA8IS0tIFBvcHVwcyAtLT4KLSAgICAgIAotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnBvcHVwTWVudXMiPgotICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmpzdC5qMmVlLmVqYi5FbnRlcnByaXNlQmVhbiIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZC5lamIiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVBQ1RJT05fREVQTE9ZX1dFQlNFUlZJQ0UiCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMucG9wdXAuRHluYW1pY1BvcHVwV2l6YXJkIgotICAgICAgICAgICAgICAgbWVudWJhclBhdGg9Im9yZy5lY2xpcHNlLmpzdC53cy5hdGsudWkud2Vic2VydmljZS5jYXRlZ29yeS5lamIucG9wdXBNZW51L3BvcHVwQWN0aW9ucyIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZCI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPgotICAgPC9leHRlbnNpb24+Ci0KLQotPCEtLSBFSkIgc3R1ZmYgLS0+Ci0gICAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53c0ltcGwiPgotICAgICA8d2ViU2VydmljZUltcGwKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3Mud3NJbXBsLmVqYiIKLSAgICAgICAgICAgIGxhYmVsPSIlV0VCU0VSVklDRVRZUEVfTkFNRV9FSkJfVFAiCi0gICAgICAgICAgICByZXNvdXJjZVR5cGVNZXRhZGF0YT0iRUpCT2JqZWN0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmVqYi5FbnRlcnByaXNlQmVhbiBTZXNzaW9uSW1wbCIKLSAgICAgICAgICAgIGV4dGVuc2lvbk1ldGFkYXRhPSIuamF2YSAuY2xhc3MgLlNlc3Npb25JbXBsIgotICAgICAgICAgICAgb2JqZWN0U2VsZWN0aW9uV2lkZ2V0PSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuRUpCU2VsZWN0aW9uV2lkZ2V0Ij4KLSAgICAgPC93ZWJTZXJ2aWNlSW1wbD4KLSAgICA8L2V4dGVuc2lvbj4gICAgCi0gICAgCi0KLSAgICAgICAgICAgIAotICAgCi08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS8uY2xhc3NwYXRoIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTk2ZDQ5YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMvIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGU2ZWRlZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1iaW4KLWJ1aWxkLnhtbAotdGVtcC5mb2xkZXIKLXdzcy11aS5qYXIKLUBkb3QKLXNyYy56aXAKLWphdmFDb21waWxlci4uLmFyZ3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLy5wcm9qZWN0IGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5YzhiZmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWk8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YmFiMTg5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLSNTYXQgSnVuIDAyIDE3OjA3OjA2IEVEVCAyMDA3Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTcxYWMwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jTW9uIEphbiAzMCAxMDo0MTowNCBFU1QgMjAwNgotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0MDViZjIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlUExVR0lOX05BTUUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aTsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjMwNS5xdWFsaWZpZXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS5wbHVnaW4uV2ViU2VydmljZUNyZWF0aW9uVUlQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVQTFVHSU5fUFJPVklERVIKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS5hbnQ7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkuZXh0ZW5zaW9uO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLnBsdWdpbjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS5wcmVmZXJlbmNlczt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS5zZXJ2ZXI7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0czt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS53aWRnZXRzLmJpbmRpbmc7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0cy5ydW50aW1lO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLndpZGdldHMudGVzdDt4LWludGVybmFsOj10cnVlCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52O2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbDtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53cy5leHBsb3JlcjtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS5qc3Qud3M7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53cy5wYXJzZXI7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAwLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LndzLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZHQuY29yZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UudWk7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXM7YnVuZGxlLXZlcnNpb249IlszLjIuMCwzLjQuMCkiLAotIG9yZy5lY2xpcHNlLmVtZi5jb21tb247YnVuZGxlLXZlcnNpb249IlsyLjIuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLmplbS51dGlsO2J1bmRsZS12ZXJzaW9uPSJbMi4wLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZW0ud29ya2JlbmNoO2J1bmRsZS12ZXJzaW9uPSJbMi4wLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAyLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbWZ3b3JrYmVuY2guaW50ZWdyYXRpb247YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC5qMmVlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS5qc3QuajJlZS5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS5qc3QuajJlZS5lamI7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIGphdmF4LndzZGw7YnVuZGxlLXZlcnNpb249IlsxLjQuMCwxLjUuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3JrcztidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudDtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDAsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2UudWkuZm9ybXM7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53cy51aTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIgotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvYWJvdXQuaHRtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGIzNmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvYnVpbGQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxZGVjMzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotc291cmNlLi4gPSBzcmMvCi1iaW4uaW5jbHVkZXMgPSAuLFwKLSAgICAgICAgICAgICAgIGljb25zLyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9pY29ucy9leHBvcnRfd3MuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvaWNvbnMvZXhwb3J0X3dzLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2E0NGVmOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9pY29ucy9leHBvcnRfd3MuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvaWNvbnMvZnVsbC9jdG9vbDE2L25ld193ZWJzZXJ2X3dpei5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9pY29ucy9mdWxsL2N0b29sMTYvbmV3X3dlYnNlcnZfd2l6LmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmQ3MzdmMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9pY29ucy9mdWxsL2N0b29sMTYvbmV3X3dlYnNlcnZfd2l6LmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL2ljb25zL2Z1bGwvd2l6YmFuL2V4cG9ydF93c193aXoucG5nIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvaWNvbnMvZnVsbC93aXpiYW4vZXhwb3J0X3dzX3dpei5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkNmJjYWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvaWNvbnMvZnVsbC93aXpiYW4vZXhwb3J0X3dzX3dpei5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9pY29ucy9mdWxsL3dpemJhbi93ZWJzZXJ2aWNlc193aXoucG5nIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvaWNvbnMvZnVsbC93aXpiYW4vd2Vic2VydmljZXNfd2l6LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDVmODc2YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9pY29ucy9mdWxsL3dpemJhbi93ZWJzZXJ2aWNlc193aXoucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvaWNvbnMvc2VydmljZV9hc3NlbWJsZS5qcGcgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9pY29ucy9zZXJ2aWNlX2Fzc2VtYmxlLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQzNzkzMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9pY29ucy9zZXJ2aWNlX2Fzc2VtYmxlLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL2ljb25zL3NlcnZpY2VfZGVwbG95LmpwZyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL2ljb25zL3NlcnZpY2VfZGVwbG95LmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQ1OGJjMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9pY29ucy9zZXJ2aWNlX2RlcGxveS5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9pY29ucy9zZXJ2aWNlX2RldmVsb3AuanBnIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvaWNvbnMvc2VydmljZV9kZXZlbG9wLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzhmZjZhNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9pY29ucy9zZXJ2aWNlX2RldmVsb3AuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvaWNvbnMvc2VydmljZV9pbnN0YWxsLmpwZyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL2ljb25zL3NlcnZpY2VfaW5zdGFsbC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4ZmNkYmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvaWNvbnMvc2VydmljZV9pbnN0YWxsLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL2ljb25zL3NlcnZpY2VfcnVuLmpwZyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL2ljb25zL3NlcnZpY2VfcnVuLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWM5MTJmNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9pY29ucy9zZXJ2aWNlX3J1bi5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9pY29ucy9zZXJ2aWNlX3Rlc3QuanBnIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvaWNvbnMvc2VydmljZV90ZXN0LmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWI1Njk1OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9pY29ucy9zZXJ2aWNlX3Rlc3QuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvcGx1Z2luLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDZlODVmMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIwotIyBNZXNzYWdlcyBpbiBwbHVnaW4ueG1sLgotIwotUExVR0lOX05BTUU9V2ViIFNlcnZpY2VzIENyZWF0aW9uIEdyYXBoaWNhbCBVc2VyIEludGVyZmFjZQotUExVR0lOX1BST1ZJREVSPUVjbGlwc2Uub3JnCi0KLVBMVUdJTl9ORVdfQ0FURUdPUllfTkFNRV9XUz1XZWIgU2VydmljZXMKLVBMVUdJTl9ORVdfV0laQVJEX05BTUVfV1NfU0VSVklDRT1XZWIgU2VydmljZQotUExVR0lOX0VYUE9SVF9XSVpBUkRfTkFNRV9XUz1XZWIgU2VydmljZQotUExVR0lOX05FV19XSVpBUkRfREVTQ19XU19TRVJWSUNFPUNyZWF0ZSBhIG5ldyBYTUwgd2ViIHNlcnZpY2UuCi1QTFVHSU5fRVhQT1JUX1dJWkFSRF9ERVNDX1dTPUEgd2l6YXJkIGZvciBleHBvcnRpbmcgYSB3ZWIgc2VydmljZS4KLQotIwotIwlXZWIgU2VydmljZXMgUHJlZmVyYW5jZSBQYWdlcwotIwotIyBEaWFsb2dzCi1DSEVDS0JPWF9TSE9XX0RFUExPWV9XRUJfU0VSVklDRV9ESUFMT0c9SGlkZSAmQ3JlYXRlIFdlYiBzZXJ2aWNlIERpYWxvZwotQ0hFQ0tCT1hfU0hPV19HRU5FUkFURV9TS0VMRVRPTl9ESUFMT0c9SGlkZSBHZW5lcmF0ZSBKYXZhIEJlYW4gUyZrZWxldG9uIERpYWxvZwotQ0hFQ0tCT1hfU0hPV19HRU5FUkFURV9XU0RMX0ZJTEVTX0RJQUxPRz1IaWRlIEdlbmVyYXRlIFdTREwgRmlsZXMgRGlhbG9nCi1DSEVDS0JPWF9TSE9XX1BVQkxJU0hfV1NETF9ESUFMT0c9SGlkZSBQdWJsaXNoICZXU0RMIERpYWxvZwotCi1QUkVGRVJFTkNFX0NBVEVHT1JZX1NDRU5BUklPX0RFRkFVTFRTPVNjZW5hcmlvIERlZmF1bHRzCi0KLQotIwotIyBQcmVmZXJlbmNlcyBUb29sdGlwcwotIwotI0FjdGlvbiBEaWFsb2dzCi1UT09MVElQX1BQQURfQ0hFQ0tCT1hfREVQTE9ZPUhpZGVzIHRoZSBkaWFsb2cgZm9yIGRlcGxveWluZyBhIFdlYiBzZXJ2aWNlIGFjdGlvbgotVE9PTFRJUF9QUEFEX0NIRUNLQk9YX1NLRUxFVE9OPUhpZGVzIHRoZSBkaWFsb2cgZm9yIGdlbmVyYXRpbmcgSmF2YSBiZWFuIFNrZWxldG9uIGFjdGlvbgotVE9PTFRJUF9QUEFEX0NIRUNLQk9YX1dTREw9SGlkZXMgdGhlIGRpYWxvZyBmb3IgZ2VuZXJhdGluZyBXU0RMIGZpbGVzIGFjdGlvbgotVE9PTFRJUF9QUEFEX0NIRUNLQk9YX1BVQkxJU0g9SGlkZXMgdGhlIGRpYWxvZyBmb3IgcHVibGlzaGluZyB0aGUgV1NETCBhY3Rpb24KLQotIwotIyBQb3AtdXAgYWN0aW9ucwotIwotQUNUSU9OX0RFUExPWV9XRUJTRVJWSUNFPUNyZWF0ZSBXZWIgc2VydmljZQotQUNUSU9OX0dFTkVSQVRFX0pBVkFfU0tFTEVUT049R2VuZXJhdGUgSmF2YSBiZWFuIHNrZWxldG9uCi1BQ1RJT05fUFVCTElTSF9XU0RMPVB1Ymxpc2ggV1NETCBmaWxlCi0KLSMKLSMgV2l6YXJkcy4KLSMKLVdJWkFSRF9USVRMRV9XU1M9V2ViIFNlcnZpY2UKLQotCi0jCi0jIFBvcC11cCBhY3Rpb25zCi0jCi1BQ1RJT05fREVQTE9ZX1dFQlNFUlZJQ0U9Q3JlYXRlIFdlYiBzZXJ2aWNlCi0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3BsdWdpbi54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODNlOTgwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzOTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLQotPHBsdWdpbj4KLQotICAgICA8IS0tIFdpemFyZHMgLS0+Ci0KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5uZXdXaXphcmRzIj4KLSAgICAgIDxjYXRlZ29yeQotICAgICAgICAgICAgbmFtZT0iJVBMVUdJTl9ORVdfQ0FURUdPUllfTkFNRV9XUyIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MudWkubmV3Ij4KLSAgICAgIDwvY2F0ZWdvcnk+Ci0gICAgICA8d2l6YXJkCi0gICAgICAgICAgICBuYW1lPSIlUExVR0lOX05FV19XSVpBUkRfTkFNRV9XU19TRVJWSUNFIgotICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdG9vbDE2L25ld193ZWJzZXJ2X3dpei5naWYiCi0gICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2UuanN0LndzLnVpLm5ldyIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5EeW5hbWljV2l6YXJkIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkIj4KLSAgICAgICAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICAgICAgICVQTFVHSU5fTkVXX1dJWkFSRF9ERVNDX1dTX1NFUlZJQ0UKLSAgICAgICAgIDwvZGVzY3JpcHRpb24+Ci0gICAgICA8L3dpemFyZD4KLSAgIDwvZXh0ZW5zaW9uPgotCi0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmR5bmFtaWNXaXphcmQiPgotICAgICAgPGR5bmFtaWNXaXphcmQKLSAgICAgICAgICAgIGljb25iYW5uZXI9Imljb25zL2Z1bGwvd2l6YmFuL3dlYnNlcnZpY2VzX3dpei5wbmciCi0gICAgICAgICAgICB0aXRsZT0iJVdJWkFSRF9USVRMRV9XU1MiCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLndpZGdldHMuYmluZGluZy5TZXJ2ZXJXaWRnZXRCaW5kaW5nIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkIj4KLSAgICAgIDwvZHluYW1pY1dpemFyZD4KLSAgIDwvZXh0ZW5zaW9uPgotCi0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkuZXhwb3J0V2l6YXJkcyI+Ci0gICAgICA8Y2F0ZWdvcnkKLSAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndzZXhwb3J0LmNhdGVnb3J5IgotICAgICAgICAgICAgIG5hbWU9IiVQTFVHSU5fTkVXX0NBVEVHT1JZX05BTUVfV1MiLz4KLSAgIDwvZXh0ZW5zaW9uPgotICAgCi0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkuZXhwb3J0V2l6YXJkcyI+Ci0gICAgICA8d2l6YXJkCi0gICAgICAgICAgICBuYW1lPSIlUExVR0lOX0VYUE9SVF9XSVpBUkRfTkFNRV9XUyIKLSAgICAgICAgICAgIGljb249Imljb25zL2V4cG9ydF93cy5naWYiCi0gICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndzZXhwb3J0LmNhdGVnb3J5IgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLkR5bmFtaWNXaXphcmQiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLndzZXhwb3J0Ij4KLSAgICAgICAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICAgICAgICVQTFVHSU5fRVhQT1JUX1dJWkFSRF9ERVNDX1dTCi0gICAgICAgICA8L2Rlc2NyaXB0aW9uPgotICAgICAgPC93aXphcmQ+Ci0gICA8L2V4dGVuc2lvbj4KLQotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5keW5hbWljV2l6YXJkIj4KLSAgICAgIDxkeW5hbWljV2l6YXJkCi0gICAgICAgICAgICBpY29uYmFubmVyPSJpY29ucy9mdWxsL3dpemJhbi9leHBvcnRfd3Nfd2l6LnBuZyIKLSAgICAgICAgICAgIG5hbWU9IiVQTFVHSU5fRVhQT1JUX1dJWkFSRF9OQU1FX1dTIgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS53aWRnZXRzLmJpbmRpbmcuRXhwb3J0V1NXaWRnZXRCaW5kaW5nIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53c2V4cG9ydCI+Ci0gICAgICA8L2R5bmFtaWNXaXphcmQ+Ci0gICA8L2V4dGVuc2lvbj4KLQotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5keW5hbWljV2l6YXJkIj4KLSAgICAgIDxkeW5hbWljV2l6YXJkCi0gICAgICAgICAgICBpY29uYmFubmVyPSJpY29ucy9mdWxsL3dpemJhbi9leHBvcnRfd3Nfd2l6LnBuZyIKLSAgICAgICAgICAgIG5hbWU9IiVQTFVHSU5fRVhQT1JUX1dJWkFSRF9OQU1FX1dTIgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS53aWRnZXRzLmJpbmRpbmcuRXhwb3J0V1NXaWRnZXRCaW5kaW5nIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQucHVibGlzaCI+Ci0gICAgICA8L2R5bmFtaWNXaXphcmQ+Ci0gICA8L2V4dGVuc2lvbj4KLQotICAgPCEtLSAiRG9uJ3QgU2hvdyBNZSIgUHJlZmVyZW5jZXMgLS0+Ci0KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuYWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGUiPgotCi0gICAgICA8YWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGUKLSAgICAgICAgICAgIG5hbWU9IiVDSEVDS0JPWF9TSE9XX0RFUExPWV9XRUJfU0VSVklDRV9ESUFMT0ciCi0gICAgICAgICAgICB0b29sdGlwPSIlVE9PTFRJUF9QUEFEX0NIRUNLQk9YX0RFUExPWSIKLSAgICAgICAgICAgIGluZm9wb3A9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS5QUEFEMDAwNiIKLSAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5qc3Qud3NzLnBvcHVwLmNhdGVnb3J5IgotICAgICAgICAgICAgb2JqZWN0aWRzPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZC5lamIgb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQuamF2YS5maWxlIG9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkLmphdmEuY29tcHVuaXQgb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQuamF2YS5zZXJ2aWNlLmJlYW4gb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQuamF2YS5iZWFuLmxpbmsiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQuamF2YSI+Ci0gICAgICA8L2FjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlPgotCi0gICAgICA8YWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGUKLSAgICAgICAgICAgIG5hbWU9IiVDSEVDS0JPWF9TSE9XX0dFTkVSQVRFX1NLRUxFVE9OX0RJQUxPRyIKLSAgICAgICAgICAgIHRvb2x0aXA9IiVUT09MVElQX1BQQURfQ0hFQ0tCT1hfU0tFTEVUT04iCi0gICAgICAgICAgICBpbmZvcG9wPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkuUFBBRDAwMDgiCi0gICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2UuanN0Lndzcy5wb3B1cC5jYXRlZ29yeSIKLSAgICAgICAgICAgIG9iamVjdGlkcz0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQuc2tlbGV0b24uZmlsZS53c2RsIG9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkLnNrZWxldG9uLnNlcnZpY2Ugb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQuc2tlbGV0b24ud3NkbHJlcyBvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZC5za2VsZXRvbi5zZXJ2aWNlcmVmIG9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkLnNrZWxldG9uLmZpbGUud3NpbCIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZC5za2VsZXRvbiI+Ci0gICAgICA8L2FjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlPgotCi0gICAgICA8YWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGUKLSAgICAgICAgICAgIG5hbWU9IiVDSEVDS0JPWF9TSE9XX1BVQkxJU0hfV1NETF9ESUFMT0ciCi0gICAgICAgICAgICB0b29sdGlwPSIlVE9PTFRJUF9QUEFEX0NIRUNLQk9YX1BVQkxJU0giCi0gICAgICAgICAgICBpbmZvcG9wPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkuUFBBRDAwMDkiCi0gICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2UuanN0Lndzcy5wb3B1cC5jYXRlZ29yeSIKLSAgICAgICAgICAgIG9iamVjdGlkcz0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5wdWJsaXNoLmZpbGUgb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5wdWJsaXNoLnNlcnZpY2Ugb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5wdWJsaXNoLndzZGxyZXMgb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5wdWJsaXNoLnNlcnZpY2VyZWYiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5wdWJsaXNoIj4KLSAgICAgIDwvYWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGU+Ci0KLSAgIDwvZXh0ZW5zaW9uPgotCi0gICA8IS0tIFBvcHVwcyAtLT4KLSAgIAotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnBvcHVwTWVudXMiPgotCi0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGUiCi0gICAgICAgICAgICBuYW1lRmlsdGVyPSIqLmphdmEiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQuamF2YS5maWxlIj4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlQUNUSU9OX0RFUExPWV9XRUJTRVJWSUNFIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLnBvcHVwLkR5bmFtaWNQb3B1cFdpemFyZCIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJvcmcuZWNsaXBzZS5qc3Qud3MuYXRrLnVpLndlYnNlcnZpY2UuY2F0ZWdvcnkucG9wdXBNZW51L3BvcHVwQWN0aW9ucyIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZCI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPgotCi0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuQ29tcGlsYXRpb25Vbml0IgotICAgICAgICAgICAgbmFtZUZpbHRlcj0iKi5qYXZhIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkLmphdmEuY29tcHVuaXQiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVBQ1RJT05fREVQTE9ZX1dFQlNFUlZJQ0UiCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMucG9wdXAuRHluYW1pY1BvcHVwV2l6YXJkIgotICAgICAgICAgICAgICAgbWVudWJhclBhdGg9Im9yZy5lY2xpcHNlLmpzdC53cy5hdGsudWkud2Vic2VydmljZS5jYXRlZ29yeS5wb3B1cE1lbnUvcG9wdXBBY3Rpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0KLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZSIKLSAgICAgICAgICAgIG5hbWVGaWx0ZXI9Iioud3NkbCIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZC5za2VsZXRvbi5maWxlLndzZGwiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVBQ1RJT05fR0VORVJBVEVfSkFWQV9TS0VMRVRPTiIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5wb3B1cC5EeW5hbWljUG9wdXBXaXphcmQiCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0ib3JnLmVjbGlwc2UuanN0LndzLmF0ay51aS53ZWJzZXJ2aWNlLmNhdGVnb3J5LnBvcHVwTWVudS9wb3B1cEFjdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQiPgotICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4KLQotICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2UiCi0gICAgICAgICAgICBuYW1lRmlsdGVyPSIqIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkLnNrZWxldG9uLnNlcnZpY2UiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVBQ1RJT05fR0VORVJBVEVfSkFWQV9TS0VMRVRPTiIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5wb3B1cC5EeW5hbWljUG9wdXBXaXphcmQiCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0iYWRkaXRpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0KLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExSZXNvdXJjZUltcGwiCi0gICAgICAgICAgICBuYW1lRmlsdGVyPSIqIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkLnNrZWxldG9uLndzZGxyZXMiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVBQ1RJT05fR0VORVJBVEVfSkFWQV9TS0VMRVRPTiIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5wb3B1cC5EeW5hbWljUG9wdXBXaXphcmQiCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0iYWRkaXRpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0KLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzY2xpZW50LlNlcnZpY2VSZWYiCi0gICAgICAgICAgICBuYW1lRmlsdGVyPSIqIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkLnNrZWxldG9uLnNlcnZpY2VyZWYiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVBQ1RJT05fR0VORVJBVEVfSkFWQV9TS0VMRVRPTiIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5wb3B1cC5EeW5hbWljUG9wdXBXaXphcmQiCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0iYWRkaXRpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0KLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuU2VydmljZUltcGxCZWFuIgotICAgICAgICAgICAgbmFtZUZpbHRlcj0iKiIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZC5qYXZhLnNlcnZpY2UuYmVhbiI+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iJUFDVElPTl9ERVBMT1lfV0VCU0VSVklDRSIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5wb3B1cC5EeW5hbWljUG9wdXBXaXphcmQiCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0iYWRkaXRpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0gICAgICAKLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuQmVhbkxpbmsiCi0gICAgICAgICAgICBuYW1lRmlsdGVyPSIqIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkLmphdmEuYmVhbi5saW5rIj4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlQUNUSU9OX0RFUExPWV9XRUJTRVJWSUNFIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLnBvcHVwLkR5bmFtaWNQb3B1cFdpemFyZCIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJhZGRpdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQiPgotICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4gICAgICAgCi0gICAgICAKLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZSIKLSAgICAgICAgICAgIG5hbWVGaWx0ZXI9Iioud3NpbCIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZC5za2VsZXRvbi5maWxlLndzaWwiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVBQ1RJT05fR0VORVJBVEVfSkFWQV9TS0VMRVRPTiIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5wb3B1cC5EeW5hbWljUG9wdXBXaXphcmQiCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0ib3JnLmVjbGlwc2UuanN0LndzLmF0ay51aS53ZWJzZXJ2aWNlLmNhdGVnb3J5LnBvcHVwTWVudS9wb3B1cEFjdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5zZXJ2ZXJ3aXphcmQiPgotICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4KLQotICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlIgotICAgICAgICAgICAgbmFtZUZpbHRlcj0iKi53c2RsIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQucHVibGlzaC5maWxlIj4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlQUNUSU9OX1BVQkxJU0hfV1NETCIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5wb3B1cC5EeW5hbWljUG9wdXBXaXphcmQiCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0ib3JnLmVjbGlwc2UuanN0LndzLmF0ay51aS53ZWJzZXJ2aWNlLmNhdGVnb3J5LnBvcHVwTWVudS9wb3B1cEFjdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5wdWJsaXNoIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0KLSAgICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZSIKLSAgICAgICAgICAgIG5hbWVGaWx0ZXI9IioiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5wdWJsaXNoLnNlcnZpY2UiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVBQ1RJT05fUFVCTElTSF9XU0RMIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLnBvcHVwLkR5bmFtaWNQb3B1cFdpemFyZCIKLSAgICAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJhZGRpdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpLndpemFyZC5wdWJsaXNoIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0gICAgICAKLSAgICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMUmVzb3VyY2VJbXBsIgotICAgICAgICAgICAgbmFtZUZpbHRlcj0iKiIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnB1Ymxpc2gud3NkbHJlcyI+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iJUFDVElPTl9QVUJMSVNIX1dTREwiCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMucG9wdXAuRHluYW1pY1BvcHVwV2l6YXJkIgotICAgICAgICAgICAgICAgICAgbWVudWJhclBhdGg9ImFkZGl0aW9ucyIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnB1Ymxpc2giPgotICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4KLSAgICAgIAotICAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzY2xpZW50LlNlcnZpY2VSZWYiCi0gICAgICAgICAgICBuYW1lRmlsdGVyPSIqIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQucHVibGlzaC5zZXJ2aWNlcmVmIj4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlQUNUSU9OX1BVQkxJU0hfV1NETCIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5wb3B1cC5EeW5hbWljUG9wdXBXaXphcmQiCi0gICAgICAgICAgICAgICAgICBtZW51YmFyUGF0aD0iYWRkaXRpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQucHVibGlzaCI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPgotCi0gICA8L2V4dGVuc2lvbj4KLSAgIAotICAgPCEtLSBQcmVmZXJlbmNlIFBhZ2VzIC0tPgotCi0gICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wcmVmZXJlbmNlUGFnZXMiPgotICAgICAgPHBhZ2UKLSAgICAgICAgICAgIG5hbWU9IiVQUkVGRVJFTkNFX0NBVEVHT1JZX1NDRU5BUklPX0RFRkFVTFRTIgotICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS5wcmVmZXJlbmNlcy5uYW1lIgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS5wcmVmZXJlbmNlcy5TY2VuYXJpb0RlZmF1bHRzUHJlZmVyZW5jZVBhZ2UiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLnByZWZlcmVuY2VzLlNjZW5hcmlvRGVmYXVsdHNQcmVmZXJlbmNlUGFnZSI+Ci0gICAgICA8L3BhZ2U+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIAotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRSZWdpc3RyeSI+Ci0gICAgICAgPHdpZGdldEZhY3RvcnkgICAKLSAgICAgICAgICAgICBpZD0iU3RhcnRTZXJ2aWNlU2VydmVyIgotICAgICAgICAgICAgIGluc2VydEJlZm9yZUNvbW1hbmRJZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLmV4dGVuc2lvbi5QcmVTZXJ2aWNlUnVuQ29tbWFuZCIKLSAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLnNlcnZlci5TdGFydFNlcnZlcldpZGdldEZhY3RvcnkiLz4KLSAgICA8L2V4dGVuc2lvbj4gCi0gICAgCi0gICAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5hbnRTY2VuYXJpbyI+Ci0gICAgICAgIDxhbnRTY2VuYXJpbwotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS5hbnQuQW50U2VydmljZVJvb3RDb21tYW5kRnJhZ21lbnQiCi0gICAgICAgICAgICBzY2VuYXJpb1R5cGU9InNlcnZpY2UiLz4KLSAgICAgPC9leHRlbnNpb24+ICAgIAotICAgIAotICAgICA8ZXh0ZW5zaW9uCi0gICAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuYW50RGF0YU1hcHBpbmciPgotICAgICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iSW5pdGlhbFNlbGVjdGlvbiIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0cy5TZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZCIKLSAgICAgICAgICAgICAgcHJvcGVydHk9IkluaXRpYWxTZWxlY3Rpb24iCi0gICAgICAgICAgICAgIHJlcXVpcmVkPSJ0cnVlIgotICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nMlNlbGVjdGlvblRyYW5zZm9ybWVyIi8+Ci0gICAgICAgIDxtYXAKLSAgICAgICAgICAgICAga2V5PSJJbml0aWFsU2VsZWN0aW9uIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5PYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iT2JqZWN0U2VsZWN0aW9uIgotICAgICAgICAgICAgICByZXF1aXJlZD0idHJ1ZSIKLSAgICAgICAgICAgICAgdHJhbnNmb3JtPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlN0cmluZzJTZWxlY3Rpb25UcmFuc2Zvcm1lciIvPiAgICAgICAgICAgICAgCi0JCTxtYXAKLSAgICAgICAgICAgICAga2V5PSJQcm9qZWN0IgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5PYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iUHJvamVjdCIKLSAgICAgICAgICAgICAgdHJhbnNmb3JtPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlN0cmluZ1RvSVByb2plY3RUcmFuc2Zvcm1lciIvPgotICAgICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iQ29tcG9uZW50TmFtZSIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuT2JqZWN0U2VsZWN0aW9uT3V0cHV0Q29tbWFuZCIKLSAgICAgICAgICAgICAgcHJvcGVydHk9IkNvbXBvbmVudE5hbWUiLz4KLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IlNlcnZpY2UuUnVudGltZUlkIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS53aWRnZXRzLlNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQiCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIiCi0gICAgICAgICAgICAgIHRyYW5zZm9ybT0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmcyVHlwZVJ1bnRpbWVTZXJ2ZXJNb2RpZmllciIvPgotICAgICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iU2VydmljZS5TZXJ2ZXJJZCIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0cy5TZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iU2VydmljZVR5cGVSdW50aW1lU2VydmVyIgotICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nMlR5cGVSdW50aW1lU2VydmVyTW9kaWZpZXIiLz4KLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IlNlcnZpY2UuVHlwZUlkIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS53aWRnZXRzLlNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQiCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIiCi0gICAgICAgICAgICAgIHRyYW5zZm9ybT0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5TdHJpbmcyVHlwZVJ1bnRpbWVTZXJ2ZXJNb2RpZmllciIvPiAgICAgICAgICAgICAKLSAgICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IkdlbmVyYXRlUHJveHkiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLndpZGdldHMuU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZCIKLSAgICAgICAgICAgICAgcHJvcGVydHk9IkdlbmVyYXRlUHJveHkiLz4KLSAgICAgIDxtYXAKLSAgICAgICAgICAgICAga2V5PSJTZXJ2aWNlLlJ1bnRpbWVJZCIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zLlNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iU2VydmljZVR5cGVSdW50aW1lU2VydmVyIgotICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nMlR5cGVSdW50aW1lU2VydmVyTW9kaWZpZXIiLz4KLSAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IlNlcnZpY2UuU2VydmVySWQiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9ucy5TZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZCIKLSAgICAgICAgICAgICAgcHJvcGVydHk9IlNlcnZpY2VUeXBlUnVudGltZVNlcnZlciIKLSAgICAgICAgICAgICAgdHJhbnNmb3JtPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlN0cmluZzJUeXBlUnVudGltZVNlcnZlck1vZGlmaWVyIi8+Ci0gICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iU2VydmljZS5UeXBlSWQiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9ucy5TZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZCIKLSAgICAgICAgICAgICAgcHJvcGVydHk9IlNlcnZpY2VUeXBlUnVudGltZVNlcnZlciIKLSAgICAgICAgICAgICAgdHJhbnNmb3JtPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlN0cmluZzJUeXBlUnVudGltZVNlcnZlck1vZGlmaWVyIi8+Ci0gICAgICAgICAgICAgIAotICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IlNlcnZpY2VQcm9qZWN0TmFtZSIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0cy5ydW50aW1lLlNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZCIKLSAgICAgICAgICAgICAgcHJvcGVydHk9IlNlcnZpY2VQcm9qZWN0TmFtZSIvPgotICAgICAgICAgICAgICAKLSAgICAgIDxtYXAKLSAgICAgICAgICAgICAga2V5PSJTZXJ2aWNlUHJvamVjdE5hbWUiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9ucy5TZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZCIKLSAgICAgICAgICAgICAgcHJvcGVydHk9IlNlcnZpY2VQcm9qZWN0TmFtZSIvPgotICAgICAgICAgICAgICAKLSAgICAgIDxtYXAKLSAgICAgICAgICAgICAga2V5PSJTZXJ2aWNlQ29tcG9uZW50TmFtZSIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zLlNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iU2VydmljZUNvbXBvbmVudE5hbWUiLz4KLQotICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IlNlcnZpY2VFYXJQcm9qZWN0TmFtZSIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zLlNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kIgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iU2VydmljZUVhclByb2plY3ROYW1lIi8+Ci0gICAgICAgICAgICAgIAotICAgICAgPG1hcAotICAgICAgICAgICAgICBrZXk9IlNlcnZpY2VFYXJDb21wb25lbnROYW1lIgotICAgICAgICAgICAgICBvcGVyYXRpb249Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnMuU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQiCi0gICAgICAgICAgICAgIHByb3BlcnR5PSJTZXJ2aWNlRWFyQ29tcG9uZW50TmFtZSIvPiAgICAgICAgICAgICAgCi0gICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iU2VydmljZS5SdW50aW1lSWQiCi0gICAgICAgICAgICAgIG9wZXJhdGlvbj0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9ucy5TZXJ2ZXJFeHRlbnNpb25GcmFnbWVudCIKLSAgICAgICAgICAgICAgcHJvcGVydHk9IlNlcnZpY2VUeXBlUnVudGltZVNlcnZlciIKLSAgICAgICAgICAgICAgdHJhbnNmb3JtPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlN0cmluZzJUeXBlUnVudGltZVNlcnZlck1vZGlmaWVyIi8+Ci0gICAgICA8bWFwCi0gICAgICAgICAgICAgIGtleT0iU2VydmljZS5TZXJ2ZXJJZCIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zLlNlcnZlckV4dGVuc2lvbkZyYWdtZW50IgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iU2VydmljZVR5cGVSdW50aW1lU2VydmVyIgotICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nMlR5cGVSdW50aW1lU2VydmVyTW9kaWZpZXIiLz4KLSAgICAgIDxtYXAKLSAgICAgICAgICAgICAga2V5PSJTZXJ2aWNlLlR5cGVJZCIKLSAgICAgICAgICAgICAgb3BlcmF0aW9uPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zLlNlcnZlckV4dGVuc2lvbkZyYWdtZW50IgotICAgICAgICAgICAgICBwcm9wZXJ0eT0iU2VydmljZVR5cGVSdW50aW1lU2VydmVyIgotICAgICAgICAgICAgICB0cmFuc2Zvcm09Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nMlR5cGVSdW50aW1lU2VydmVyTW9kaWZpZXIiLz4KLSAgICAgPC9leHRlbnNpb24+Ci08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvQ3JlYXRpb25VSS5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9DcmVhdGlvblVJLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViN2Q5OGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9DcmVhdGlvblVJLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgV2l6YXJkIHBhZ2VzCi0jCi1QQUdFX1RJVExFX09CSkVDVF9TRUxFQ1RJT049T2JqZWN0IFNlbGVjdGlvbiBQYWdlCi1QQUdFX0RFU0NfT0JKRUNUX1NFTEVDVElPTj1PYmplY3QgU2VsZWN0aW9uIFBhZ2UKLQotCi0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvQ3JlYXRpb25VSU1lc3NhZ2VzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL0NyZWF0aW9uVUlNZXNzYWdlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjE5ZThiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvQ3JlYXRpb25VSU1lc3NhZ2VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLQotcHVibGljIGZpbmFsIGNsYXNzIENyZWF0aW9uVUlNZXNzYWdlcyBleHRlbmRzIE5MUyB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSAib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLkNyZWF0aW9uVUkiOy8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgQ3JlYXRpb25VSU1lc3NhZ2VzKCkgewotCQkvLyBEbyBub3QgaW5zdGFudGlhdGUKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQUdFX1RJVExFX09CSkVDVF9TRUxFQ1RJT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9ERVNDX09CSkVDVF9TRUxFQ1RJT047Ci0KLQlzdGF0aWMgewotCQlOTFMuaW5pdGlhbGl6ZU1lc3NhZ2VzKEJVTkRMRV9OQU1FLCBDcmVhdGlvblVJTWVzc2FnZXMuY2xhc3MpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL2FudC9BbnRTZXJ2aWNlUm9vdENvbW1hbmRGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9hbnQvQW50U2VydmljZVJvb3RDb21tYW5kRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZjNjA1MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL2FudC9BbnRTZXJ2aWNlUm9vdENvbW1hbmRGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIyMSAgIDExOTExMSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNTMwICAgMTQ0MzU4IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDUzMCAgIDE0NDM1MCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA4MjMgICAxNTQ5MzggcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNjA4MjUgICAxNTUxMTQgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNjEwMTEgICAxNTkyODMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIHByb2plY3Qgbm90IGFzc29jaWF0ZWQgdG8gRUFSIHdoZW4gdXNpbmcgYW50IG9uIGNvbW1hbmQtbGluZQotICogMjAwNzA1MDEgICAxNzgxMjkgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIHdvcmtzcGFjZSByZXBvcnRzICJjcmFzaCBkZXRlY3RlZCIgYWZ0ZXIgcnVubmluZyBXUyBhbnQgdGFzayAoY21kbGluZSkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkuYW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1hbmQuQW50RGVmYXVsdGluZ09wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbWFuZC5BbnRSZXN0b3JpbmdDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tYW5kLkFudFdvcmtzcGFjZVNhdmVDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tYW5kLkxpc3RPcHRpb25zQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbW9uLkZpbmlzaEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tb24uU2NlbmFyaW9DbGVhbnVwQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuc2VsZWN0aW9uLlNlbGVjdGlvblRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnMuU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9ucy5TZXJ2ZXJFeHRlbnNpb25GcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zLlNlcnZlckV4dGVuc2lvbk91dHB1dENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0Lk9iamVjdFNlbGVjdGlvbkZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5PYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS5leHRlbnNpb24uUHJlU2VydmljZURldmVsb3BDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS5leHRlbnNpb24uU2VydmljZVJvb3RGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0cy5TZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0cy5TZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS53aWRnZXRzLnJ1bnRpbWUuU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TZXF1ZW5jZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNpbXBsZUZyYWdtZW50OwotIAotLyoqCi0gKiAKLSAqIENvbW1hbmQgZnJhZ21lbnQgZm9yIGdlbmVyYXRpbmcgd2ViIHNlcnZpY2UgdG9wIGRvd24gb3IgYm90dG9tIHVwIHVzaW5nIEFudCB0YXNrLgotICogUnVuIGhlYWRsZXNzIEVjbGlwc2Ugb3Igd2l0aGluIHdvcmtzcGFjZSB1c2luZyBSdW4gYXMgQW50IEJ1aWxkLiAgVGhpcyBmcmFnbWVudCBlbGltaW5hdGVzIGFueSBVSSBzcGVjaWZpYyAKLSAqIGNvbW1hbmRzIGFuZCBkYXRhIG1hcHBpbmdzIGJldHdlZW4gY29tbWFuZHMgYW5kIHdpZGdldHMuICBXaWRnZXQgdG8gY29tbWFuZCBtYXBwaW5ncyBhcmUKLSAqIHJlcGxhY2VkIGJ5IEFudCBwcm9wZXJ0eSBmaWxlIHRvIGNvbW1hbmQgbWFwcGluZ3Mgd2hpY2ggYXJlIGVuYWJsZWQgYnkgYSBhbnREYXRhTWFwcGluZyBleHRlbnNpb24gCi0gKiBwb2ludCBpbiB0aGUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52IHBsdWdpbi4KLSAqIAotICogQGF1dGhvciBqb2FuCi0gKgotICovCi0KLXB1YmxpYyBjbGFzcyBBbnRTZXJ2aWNlUm9vdENvbW1hbmRGcmFnbWVudCBleHRlbmRzIFNlcXVlbmNlRnJhZ21lbnQKLXsKLQkKLSAgcHVibGljIEFudFNlcnZpY2VSb290Q29tbWFuZEZyYWdtZW50KCkKLSAgeyAKLSAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IFNjZW5hcmlvQ2xlYW51cENvbW1hbmQoKSwgIiIgKSk7Ci0gICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQobmV3IExpc3RPcHRpb25zQ29tbWFuZCgpLCAiIikpOwotICAgIGFkZCAobmV3IFNpbXBsZUZyYWdtZW50KG5ldyBBbnREZWZhdWx0aW5nT3BlcmF0aW9uKCksICIiKSk7ICAgIAotICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQoKSwgIiIpKTsKLSAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQoKSwgIiIgKSk7ICAgIAotICAgIGFkZCggbmV3IE9iamVjdFNlbGVjdGlvbkZyYWdtZW50KCkgKTsKLSAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZCgpLCAiIikpOwotICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQoKSwgIiIpKTsgICAKLSAgICBhZGQoIG5ldyBTZXJ2aWNlUm9vdEZyYWdtZW50KCkgKTsKLSAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IFNlcnZlckV4dGVuc2lvbk91dHB1dENvbW1hbmQoKSwgIiIgKSk7Ci0gICAgYWRkKG5ldyBGaW5pc2hGcmFnbWVudCgpKTsKLSAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IEFudFJlc3RvcmluZ0NvbW1hbmQoKSwgIiIgKSk7Ci0gICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBTY2VuYXJpb0NsZWFudXBDb21tYW5kKCksICIiICkpOwotICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgQW50V29ya3NwYWNlU2F2ZUNvbW1hbmQoKSwgIiIpKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhUmVnaXN0cnkpCi0gIHsgCQotCWRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKE9iamVjdFNlbGVjdGlvbk91dHB1dENvbW1hbmQuY2xhc3MsICJPYmplY3RTZWxlY3Rpb24iLCBTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJJbml0aWFsU2VsZWN0aW9uIiwgbnVsbCk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoT2JqZWN0U2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIk9iamVjdFNlbGVjdGlvbiIsIFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEluaXRpYWxTZWxlY3Rpb24iLCBudWxsKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhPYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiUHJvamVjdCIsIFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkluaXRpYWxQcm9qZWN0IiwgbnVsbCk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoT2JqZWN0U2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIlByb2plY3QiLCBTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRJbml0aWFsUHJvamVjdCIsIG51bGwpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKE9iamVjdFNlbGVjdGlvbk91dHB1dENvbW1hbmQuY2xhc3MsICJDb21wb25lbnROYW1lIiwgU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSW5pdGlhbENvbXBvbmVudE5hbWUiLCBudWxsKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhPYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiQ29tcG9uZW50TmFtZSIsIFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEluaXRpYWxDb21wb25lbnROYW1lIiwgbnVsbCk7ICAgICAgCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoT2JqZWN0U2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2VzUGFyc2VyIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MgKTsgICAgCi0JCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRUeXBlUnVudGltZVNlcnZlciIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZVR5cGVSdW50aW1lU2VydmVyIiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJHZW5lcmF0ZVByb3h5IiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJHZW5lcmF0ZVByb3h5IiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJSZXNvdXJjZUNvbnRleHQiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkRldmVsb3BTZXJ2aWNlIiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJBc3NlbWJsZVNlcnZpY2UiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkRlcGxveVNlcnZpY2UiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgICAgCQotICAgIC8vIE1hcCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLgotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIiLCBPYmplY3RTZWxlY3Rpb25GcmFnbWVudC5jbGFzcywgIlR5cGVSdW50aW1lU2VydmVyIiwgbnVsbCk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIkNsaWVudFR5cGVSdW50aW1lU2VydmVyIiwgU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiU2VydmljZVR5cGVSdW50aW1lU2VydmVyIiwgU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiU3RhcnRTZXJ2aWNlIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJHZW5lcmF0ZVByb3h5IiwgU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiRGV2ZWxvcFNlcnZpY2UiLCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIkFzc2VtYmxlU2VydmljZSIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiRGVwbG95U2VydmljZSIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgICAgCi0gICAgLy9NYXAgQW50RGVmYXVsdGluZ0ZyYWdtZW50Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQW50RGVmYXVsdGluZ09wZXJhdGlvbi5jbGFzcywgIlNlcnZpY2VJZHNGaXhlZCIsIFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQW50RGVmYXVsdGluZ09wZXJhdGlvbi5jbGFzcywgIkNsaWVudElkc0ZpeGVkIiwgU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhBbnREZWZhdWx0aW5nT3BlcmF0aW9uLmNsYXNzLCAiU3RhcnRTZXJ2aWNlIiwgUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhBbnREZWZhdWx0aW5nT3BlcmF0aW9uLmNsYXNzLCAiSW5zdGFsbFNlcnZpY2UiLCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKEFudERlZmF1bHRpbmdPcGVyYXRpb24uY2xhc3MsICJEZXBsb3lTZXJ2aWNlIiwgUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzKTsKLSAgICAKLSAgICAvLyBNYXAgU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZVR5cGVSdW50aW1lU2VydmVyIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOyAgICAKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlUHJvamVjdE5hbWUiLCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZUVhclByb2plY3ROYW1lIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VDb21wb25lbnROYW1lIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VFYXJDb21wb25lbnROYW1lIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VKMkVFVmVyc2lvbiIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlTmVlZEVBUiIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAKLSAgICAKLSAgICAvLyBNYXAgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VUeXBlUnVudGltZVNlcnZlciIsIFNlcnZlckV4dGVuc2lvbkZyYWdtZW50LmNsYXNzKTsKLSAgICAJICAKLQkvLyBTZXR1cCB0aGUgUHJlU2VydmljZURldmVsb3BDb21tYW5kLgkKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIlN0YXJ0U2VydmljZSIsIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJHZW5lcmF0ZVByb3h5IiwgUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzKTsgICAgICAKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIlJlc291cmNlQ29udGV4dCIsIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcyk7CQkJCi0JCi0JZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VDb21wb25lbnRUeXBlIiwgUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiTW9kdWxlVHlwZSIsIG51bGwpOwotCWRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlQ29tcG9uZW50VHlwZSIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzICk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZVJ1bnRpbWVJZCIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLQlkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIiLCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MgKTsKLQlkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlUnVudGltZUlkIiwgUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzICk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZUoyRUVWZXJzaW9uIiwgUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2ZXJQcm9qZWN0IiwgUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiTW9kdWxlIiwgbnVsbCApOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZlclByb2plY3RFQVIiLCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJFYXIiLCBudWxsICk7Ci0gICAgCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiRGV2ZWxvcFNlcnZpY2UiLCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkFzc2VtYmxlU2VydmljZSIsIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcyk7Ci0gICAgCi0gICAgCi0gICAgCi0JZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIE9iamVjdFNlbGVjdGlvbk91dHB1dENvbW1hbmQuY2xhc3MsICJPYmplY3RTZWxlY3Rpb24iLCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJTZWxlY3Rpb24iLCBuZXcgU2VsZWN0aW9uVHJhbnNmb3JtZXIoKSApOwotCWRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlIiwgU2VydmVyRXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5jbGFzcyApOwotCi0gICAgLy8gTWFwIFNlcnZlckV4dGVuc2lvbk91dHB1dENvbW1hbmQgZm9yIFNlcnZlclN0YXJ0KCkKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZlclByb2plY3RFQVIiLCBTZXJ2ZXJFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiRWFyUHJvamVjdE5hbWUiLCBudWxsKTsKLSAgICAKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhBbnREZWZhdWx0aW5nT3BlcmF0aW9uLmNsYXNzLCAiUmVuZGVyZXJWYWxpZGF0aW9uIiwgQW50UmVzdG9yaW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgCi0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9leHRlbnNpb24vUHJlU2VydmljZUFzc2VtYmxlQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9leHRlbnNpb24vUHJlU2VydmljZUFzc2VtYmxlQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYmEyZjE2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvZXh0ZW5zaW9uL1ByZVNlcnZpY2VBc3NlbWJsZUNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAxMzEgMTIxMDcxICAgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyICAgICAKLSAqIDIwMDYwMzMwIDEyODgyNyAgIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDUyNCAgIDE0MTkyNSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA1MjkgICAxNDE0MjIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDcwNTA5ICAgMTgyMjc0IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkuZXh0ZW5zaW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5pbnRlcm5hbC5wbHVnaW4uSUoyRUVNb2R1bGVDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uLkFzc29jaWF0ZU1vZHVsZVdpdGhFQVJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5DcmVhdGVGYWNldGVkUHJvamVjdENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbi5SZXF1aXJlZEZhY2V0VmVyc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW4uV1NQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzLlBlcnNpc3RlbnRNZXJnZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSVdlYlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSU1lcmdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlU2NlbmFyaW87Ci0KLXB1YmxpYyBjbGFzcyBQcmVTZXJ2aWNlQXNzZW1ibGVDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gCi17Ci0JcHJpdmF0ZSBJV2ViU2VydmljZQkJCQl3ZWJTZXJ2aWNlXzsKLQlwcml2YXRlIFN0cmluZwkJCQkJCXByb2plY3RfOwotICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgIG1vZHVsZV87Ci0JcHJpdmF0ZSBTdHJpbmcJCQkJCQllYXJQcm9qZWN0XzsKLSAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICBlYXJfOwotICBwcml2YXRlIElDb250ZXh0ICAgICAgICAgIGNvbnRleHRfOwotCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0JICBJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQgPSBnZXRFbnZpcm9ubWVudCgpOwotCSAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCSAgCi0JICAvLyBGb3IgdG9wIGRvd24gc2NlbmFyaW9zLCBtZXJnZSB0aGUgY29udGVudCBvZiB0aGUgc2tlbGV0b24gZmlsZXMgd2l0aCB0aGUgcHJldmlvdXMgdmVyc2lvbiBzdG9yZWQuCSAgCi0JICAvLyBUaGUgV2ViIHNlcnZpY2UgZXh0ZW5zaW9ucyB0cmlnZ2VycyB0aGUgc3RvcmluZyBvZiB0aGUgY29udGVudCBvZiB0aGUgb2xkIHNrZWxldG9uIGZpbGUgYnkgCi0JICAvLyBjYWxsaW5nIFdlYlNlcnZpY2VJbmZvLnNldEltcGxVUkxzKCkgYmVmb3JlIHRoZSBuZXcgc2tlbGV0b24gaXMgZ2VuZXJhdGVkIGluIHRoZSBleHRlbnNpb24ncyAKLQkgIC8vIGRldmVsb3AoKSBtZXRob2QuCi0JICAKLQkgIGlmIChjb250ZXh0Xy5nZXRTY2VuYXJpbygpLmdldFZhbHVlKCkgPT0gV2ViU2VydmljZVNjZW5hcmlvLlRPUERPV04pIHsKLQkJICBQZXJzaXN0ZW50TWVyZ2VDb250ZXh0IG1lcmdlQ29udGV4dCA9IFdTUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0TWVyZ2VDb250ZXh0KCk7Ci0JCSAgSU1lcmdlciBtZXJnZXIgPSB3ZWJTZXJ2aWNlXy5nZXRXZWJTZXJ2aWNlSW5mbygpLmdldE1lcmdlcigpOwotCQkgIGlmIChtZXJnZUNvbnRleHQuaXNTa2VsZXRvbk1lcmdlRW5hYmxlZCgpICYmIG1lcmdlciAhPSBudWxsKSB7Ci0JCQkgIHN0YXR1cyA9IG1lcmdlci5tZXJnZShtb25pdG9yLCBnZXRFbnZpcm9ubWVudCgpLmdldFN0YXR1c0hhbmRsZXIoKSk7CQotCQkJICBpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKSB7Ci0JCQkJICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJCQkgIHJldHVybiBzdGF0dXM7Ci0JCQkgIH0JCQotCQkgIH0KLQkgIH0KLQkgIAotCSAgaWYgKGNvbnRleHRfLmdldEFzc2VtYmxlKCkpIHsKLQotCQkgIC8vIENoZWNrIGlmIEVBUiBtb2R1bGUgaXMgcmVxJ2QsIGllLiAhPW51bGwKLQkJICBpZiAoZWFyUHJvamVjdF89PW51bGwpCi0JCQkgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCi0KLQotCQkgIC8vQ3JlYXRlIHRoZSBzZXJ2aWNlIEVBUiBtb2R1bGUKLQotCQkgIENyZWF0ZUZhY2V0ZWRQcm9qZWN0Q29tbWFuZCBjb21tYW5kID0gbmV3IENyZWF0ZUZhY2V0ZWRQcm9qZWN0Q29tbWFuZCgpOwotCQkgIGNvbW1hbmQuc2V0UHJvamVjdE5hbWUoZWFyUHJvamVjdF8pOwotCQkgIGNvbW1hbmQuc2V0VGVtcGxhdGVJZChJSjJFRU1vZHVsZUNvbnN0YW50cy5KU1RfRUFSX1RFTVBMQVRFKTsKLQotCQkgIC8vIFJlcXVpcmVkRmFjZXRWZXJzaW9ucyBpcyBzZXQgdG8gYW4gZW1wdHkgYXJyYXkgYmVjYXVzZSB3ZSBkb24ndCBuZWVkIHRvIGltcG9zZSBhbnkgYWRkaXRpb25hbCBjb25zdHJhaW50cy4KLQkJICAvLyBXZSBqdXN0IHdhbnQgdG8gY3JlYXRlIHRoZSBoaWdoZXN0IGxldmVsIG9mIEVBUiBwcm9qZWN0IHRoYXQgdGhlIHNlbGVjdGVkIHNlcnZlciBzdXBwb3J0cy4KLQkJICBjb21tYW5kLnNldFJlcXVpcmVkRmFjZXRWZXJzaW9ucyhuZXcgUmVxdWlyZWRGYWNldFZlcnNpb25bMF0pOyAKLQotCQkgIGNvbW1hbmQuc2V0U2VydmVyRmFjdG9yeUlkKHdlYlNlcnZpY2VfLmdldFdlYlNlcnZpY2VJbmZvKCkuZ2V0U2VydmVyRmFjdG9yeUlkKCkpOwotCQkgIGNvbW1hbmQuc2V0U2VydmVySW5zdGFuY2VJZCh3ZWJTZXJ2aWNlXy5nZXRXZWJTZXJ2aWNlSW5mbygpLmdldFNlcnZlckluc3RhbmNlSWQoKSk7Ci0JCSAgc3RhdHVzID0gY29tbWFuZC5leGVjdXRlKCBtb25pdG9yLCBhZGFwdGFibGUgKTsKLQkJICBpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKQotCQkgIHsKLQkJCSAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKCBzdGF0dXMgKTsKLQkJCSAgcmV0dXJuIHN0YXR1czsKLQkJICB9ICAgICAgICAgICAgICAgIAotCi0JCSAgLy9Bc3NvY2lhdGUgdGhlIHNlcnZpY2UgbW9kdWxlIGFuZCBzZXJ2aWNlIEVBUgotCQkgIEFzc29jaWF0ZU1vZHVsZVdpdGhFQVJDb21tYW5kIGFzc29jaWF0ZUNvbW1hbmQgPSBuZXcgQXNzb2NpYXRlTW9kdWxlV2l0aEVBUkNvbW1hbmQoKTsKLQkJICBhc3NvY2lhdGVDb21tYW5kLnNldFByb2plY3QocHJvamVjdF8pOwotCQkgIGFzc29jaWF0ZUNvbW1hbmQuc2V0TW9kdWxlKG1vZHVsZV8pOwotCQkgIGFzc29jaWF0ZUNvbW1hbmQuc2V0RUFSUHJvamVjdChlYXJQcm9qZWN0Xyk7Ci0JCSAgYXNzb2NpYXRlQ29tbWFuZC5zZXRFYXIoZWFyXyk7Ci0JCSAgYXNzb2NpYXRlQ29tbWFuZC5zZXRFbnZpcm9ubWVudCggZW52aXJvbm1lbnQgKTsKLQkJICBzdGF0dXMgPSBhc3NvY2lhdGVDb21tYW5kLmV4ZWN1dGUoIG1vbml0b3IsIG51bGwgKTsKLQkJICBpZiAoc3RhdHVzLmdldFNldmVyaXR5KCk9PVN0YXR1cy5FUlJPUikKLQkJICB7Ci0JCQkgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwkJICAKLQkJICB9CQkJCi0KLQkgIH0KLQkgIHJldHVybiBzdGF0dXM7CSAgCi0gIH0KLQkKLSAgcHVibGljIHZvaWQgc2V0UHJvamVjdCggU3RyaW5nIHByb2plY3QgKQotICB7Ci0JICBwcm9qZWN0XyA9IHByb2plY3Q7Ci0gIH0KLQkgIAotICBwdWJsaWMgdm9pZCBzZXRNb2R1bGUoIFN0cmluZyBtb2R1bGUgKQotICB7Ci0JICBtb2R1bGVfID0gbW9kdWxlOwotICB9CQotCQotICBwdWJsaWMgdm9pZCBzZXRFYXJQcm9qZWN0KCBTdHJpbmcgZWFyUHJvamVjdCApCi0gIHsKLQkgIGVhclByb2plY3RfID0gZWFyUHJvamVjdDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0RWFyKCBTdHJpbmcgZWFyICkKLSAgewotCSAgZWFyXyA9IGVhcjsgIAotICB9Ci0JCi0gIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2UoIElXZWJTZXJ2aWNlIHdlYlNlcnZpY2UgKQotICB7Ci0JICB3ZWJTZXJ2aWNlXyA9IHdlYlNlcnZpY2U7ICAKLSAgfQkKLSAgCi0gIHB1YmxpYyB2b2lkIHNldENvbnRleHQgKElDb250ZXh0IGNvbnRleHQpIHsKLQkgIGNvbnRleHRfID0gY29udGV4dDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9leHRlbnNpb24vUHJlU2VydmljZURlcGxveUNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvZXh0ZW5zaW9uL1ByZVNlcnZpY2VEZXBsb3lDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlNTU3NTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9leHRlbnNpb24vUHJlU2VydmljZURlcGxveUNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIyMSAgIDExOTExMSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS5leHRlbnNpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSUNvbnRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBQcmVTZXJ2aWNlRGVwbG95Q29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIHByaXZhdGUgSUNvbnRleHQgICAgY29udGV4dF87Ci0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0gICAgICBpZiAoY29udGV4dF8uZ2V0RGVwbG95KCkpCi0gICAgICB7Ci0gICAgICAgIC8vSWYgYW5kIHdoZW4gdGhlcmUgYXJlIGZyYW1ld29yayBzcGVjaWZpYyBkZXBsb3kgdGhpbmdzIHRvIGJlIGRvbmUsCi0gICAgICAgIC8vZG8gdGhlbSBoZXJlLgotICAgICAgfQotICAgICAgCi0JICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q29udGV4dChJQ29udGV4dCBjb250ZXh0KQotICB7Ci0gICAgICBjb250ZXh0Xz1jb250ZXh0OwotICB9ICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvZXh0ZW5zaW9uL1ByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9leHRlbnNpb24vUHJlU2VydmljZURldmVsb3BDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViMGIwODkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9leHRlbnNpb24vUHJlU2VydmljZURldmVsb3BDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMTMxIDEyMTA3MSAgIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjAyMjEgICAxMTkxMTEgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDUxNiAgIDEyNjk2NSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA1MjkgICAxNDE0MjIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDcwMTIzICAgMTY3NDg3IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrCi0gKiAyMDA3MDQwMyAgIDE3MzY1NCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzA1MDkgICAxODIyNzQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS5leHRlbnNpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb24uQ3JlYXRlRmFjZXRlZFByb2plY3RDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uRmFjZXRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbW9uLlJlcXVpcmVkRmFjZXRWZXJzaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LlNlcnZpY2VSdW50aW1lRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydC5XZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZGF0YS5UeXBlUnVudGltZVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0LlJlc291cmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5jb21tb24uSFRUUFV0aWxpdHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JV2ViU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JV2ViU2VydmljZVJ1bnRpbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSU1lcmdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5TaW1wbGVDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VTY2VuYXJpbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlU3RhdGU7Ci0KLXB1YmxpYyBjbGFzcyBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiAKLXsKLSAgcHJpdmF0ZSBUeXBlUnVudGltZVNlcnZlciB0eXBlUnVudGltZVNlcnZlcl87Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgc2VydmljZVJ1bnRpbWVJZF87Ci0gIHByaXZhdGUgSUNvbnRleHQgICAgICAgICAgY29udGV4dF87Ci0gIHByaXZhdGUgSVNlbGVjdGlvbiAgICAgICAgc2VsZWN0aW9uXzsKLSAgcHJpdmF0ZSBTdHJpbmcJCQlwcm9qZWN0XzsKLSAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICBtb2R1bGVfOwotICBwcml2YXRlIFN0cmluZwkJCW1vZHVsZVR5cGVfOwotICBwcml2YXRlIFN0cmluZwkJCWVhclByb2plY3RfOwotICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgIGVhcl87Ci0JCi0gIHByaXZhdGUgSVdlYlNlcnZpY2UgICAgICAgd2ViU2VydmljZV87Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgajJlZUxldmVsXzsKLSAgcHJpdmF0ZSBSZXNvdXJjZUNvbnRleHQgICByZXNvdXJjZUNvbnRleHRfOwotICAKLSAgcHJpdmF0ZSBib29sZWFuIGRldmVsb3BfOwotICBwcml2YXRlIGJvb2xlYW4gYXNzZW1ibGVfOwotICBwcml2YXRlIGJvb2xlYW4gZGVwbG95XzsKLSAgcHJpdmF0ZSBib29sZWFuIGluc3RhbGxfOwotICBwcml2YXRlIGJvb2xlYW4gcnVuXzsKLSAgcHJpdmF0ZSBib29sZWFuIGNsaWVudF87Ci0gIHByaXZhdGUgYm9vbGVhbiB0ZXN0XzsKLSAgcHJpdmF0ZSBib29sZWFuIHB1Ymxpc2hfOwotICAKLQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgewotCSAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCSAgaWYgKGRldmVsb3BfKSB7Ci0JCSAgSUVudmlyb25tZW50IGVudmlyb25tZW50ID0gZ2V0RW52aXJvbm1lbnQoKTsKLQotCQkgIC8vIFNwbGl0IHVwIHRoZSBwcm9qZWN0IGFuZCBtb2R1bGUKLQkJICBpbnQgaW5kZXggPSBtb2R1bGVfLmluZGV4T2YoIi8iKTsKLQkJICBpZiAoaW5kZXghPS0xKXsKLQkJCSAgcHJvamVjdF8gPSBtb2R1bGVfLnN1YnN0cmluZygwLGluZGV4KTsKLQkJCSAgbW9kdWxlXyA9IG1vZHVsZV8uc3Vic3RyaW5nKGluZGV4KzEpOwotCQkgIH0KLQotCQkgIGlmIChlYXJfIT1udWxsICYmIGVhcl8ubGVuZ3RoKCk+MCkKLQkJICB7Ci0JCQkgIGludCBlYXJJbmRleCA9IGVhcl8uaW5kZXhPZigiLyIpOwotCQkJICBpZiAoZWFySW5kZXghPS0xKSB7Ci0JCQkJICBlYXJQcm9qZWN0XyA9IGVhcl8uc3Vic3RyaW5nKDAsZWFySW5kZXgpOwotCQkJCSAgZWFyXyA9IGVhcl8uc3Vic3RyaW5nKGVhckluZGV4KzEpOwotCQkJICB9Ci0JCSAgfQotCi0KLQkJICBJV2ViU2VydmljZVJ1bnRpbWUgd3NydCAgID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2VydmljZVJ1bnRpbWUoIHNlcnZpY2VSdW50aW1lSWRfICk7Ci0JCSAgV2ViU2VydmljZUluZm8gICAgIHdzSW5mbyA9IG5ldyBXZWJTZXJ2aWNlSW5mbygpOwotCi0JCSAgd3NJbmZvLnNldFNlcnZlckZhY3RvcnlJZCggdHlwZVJ1bnRpbWVTZXJ2ZXJfLmdldFNlcnZlcklkKCkgKTsKLQkJICB3c0luZm8uc2V0U2VydmVySW5zdGFuY2VJZCggdHlwZVJ1bnRpbWVTZXJ2ZXJfLmdldFNlcnZlckluc3RhbmNlSWQoKSk7Ci0JCSAgd3NJbmZvLnNldFN0YXRlKCBXZWJTZXJ2aWNlU3RhdGUuVU5LTk9XTl9MSVRFUkFMICk7Ci0JCSAgd3NJbmZvLnNldFdlYlNlcnZpY2VSdW50aW1lSWQoIHR5cGVSdW50aW1lU2VydmVyXy5nZXRSdW50aW1lSWQoKSApOwotCQkgIAotCQkgIFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvciBzZXJ2aWNlUnVudGltZURlc2NyaXB0b3IgPSAgV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yQnlJZChzZXJ2aWNlUnVudGltZUlkXyk7Ci0JCSAgSU1lcmdlciBtZXJnZXIgPSBzZXJ2aWNlUnVudGltZURlc2NyaXB0b3IuZ2V0U2VydmljZUltcGxlbWVudGF0aW9uVHlwZSgpLmdldE1lcmdlckNsYXNzKCk7Ci0JCSAgd3NJbmZvLnNldE1lcmdlcihtZXJnZXIpOwkJICAKLQotCQkgIHdlYlNlcnZpY2VfICA9IHdzcnQuZ2V0V2ViU2VydmljZSggd3NJbmZvICk7Ci0KLQkJICAvL1NldCB1cCB0aGUgSUNvbnRleHQKLQkJICBXZWJTZXJ2aWNlU2NlbmFyaW8gc2NlbmFyaW8gPSBudWxsOwotCQkgIGludCBzY2VuYXJpb0ludCA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNjZW5hcmlvRnJvbVR5cGVJZCh0eXBlUnVudGltZVNlcnZlcl8uZ2V0VHlwZUlkKCkpOwotCQkgIGlmIChzY2VuYXJpb0ludCA9PSBXZWJTZXJ2aWNlU2NlbmFyaW8uQk9UVE9NVVApCi0JCSAgewotCQkJICBzY2VuYXJpbyA9IFdlYlNlcnZpY2VTY2VuYXJpby5CT1RUT01VUF9MSVRFUkFMOwotCQkJICBTdHJpbmcgaW1wbCA9IChTdHJpbmcpKHNlbGVjdGlvbl8uZ2V0U2VsZWN0aW9uKCkpWzBdOwotCQkJICB3c0luZm8uc2V0SW1wbFVSTChpbXBsKTsKLQkJICB9Ci0JCSAgZWxzZSBpZiAoc2NlbmFyaW9JbnQgPT0gV2ViU2VydmljZVNjZW5hcmlvLlRPUERPV04pCi0JCSAgewotCQkJICBzY2VuYXJpbyA9IFdlYlNlcnZpY2VTY2VuYXJpby5UT1BET1dOX0xJVEVSQUw7Ci0JCQkgIFN0cmluZyB3c2RsVVJMID0gKFN0cmluZykoc2VsZWN0aW9uXy5nZXRTZWxlY3Rpb24oKSlbMF07Ci0JCQkgIAotCQkJICAvLyBjaGVjayBmb3IgcmVkaXJlY3Rpb24gaW4gdGhlIHdzZGwKLQkJCSAgSFRUUFV0aWxpdHkgaHR0cFV0aWwgPSBuZXcgSFRUUFV0aWxpdHkoKTsKLQkJCSAgd3NJbmZvLnNldFdzZGxVUkwoaHR0cFV0aWwuaGFuZGxlUmVkaXJlY3Qod3NkbFVSTCkpOyAgICAgIAotCQkgIH0KLQotCQkgIGNvbnRleHRfICAgICA9IG5ldyBTaW1wbGVDb250ZXh0KGRldmVsb3BfLCBhc3NlbWJsZV8sIGRlcGxveV8sIGluc3RhbGxfLCBydW5fLCBjbGllbnRfLCB0ZXN0XywgcHVibGlzaF8sIAotCQkJCSAgc2NlbmFyaW8sIAotCQkJCSAgcmVzb3VyY2VDb250ZXh0Xy5pc092ZXJ3cml0ZUZpbGVzRW5hYmxlZCgpLAotCQkJCSAgcmVzb3VyY2VDb250ZXh0Xy5pc0NyZWF0ZUZvbGRlcnNFbmFibGVkKCksCi0JCQkJICByZXNvdXJjZUNvbnRleHRfLmlzQ2hlY2tvdXRGaWxlc0VuYWJsZWQoKSk7Ci0KLQkJICAvLyBDcmVhdGUgdGhlIHNlcnZpY2UgbW9kdWxlIGlmIG5lZWRlZC4KLQkJICBJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2plY3RfKTsKLQkJICBSZXF1aXJlZEZhY2V0VmVyc2lvbltdIHJmdiA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvckJ5SWQoc2VydmljZVJ1bnRpbWVJZF8pLmdldFJlcXVpcmVkRmFjZXRWZXJzaW9ucygpOwotCQkgIGlmICghcHJvamVjdC5leGlzdHMoKSkKLQkJICB7Ci0JCQkgIGJvb2xlYW4gbWF0Y2hlcyA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmRvZXNTZXJ2aWNlUnVudGltZVN1cHBvcnRUZW1wbGF0ZShzZXJ2aWNlUnVudGltZUlkXywgbW9kdWxlVHlwZV8pOwotCQkJICBpZiAobWF0Y2hlcykKLQkJCSAgewkJCQkgIAotCQkJCSAgQ3JlYXRlRmFjZXRlZFByb2plY3RDb21tYW5kIGNvbW1hbmQgPSBuZXcgQ3JlYXRlRmFjZXRlZFByb2plY3RDb21tYW5kKCk7Ci0JCQkJICBjb21tYW5kLnNldFByb2plY3ROYW1lKHByb2plY3RfKTsKLQkJCQkgIGNvbW1hbmQuc2V0VGVtcGxhdGVJZChtb2R1bGVUeXBlXyk7Ci0JCQkJICBjb21tYW5kLnNldFJlcXVpcmVkRmFjZXRWZXJzaW9ucyhyZnYpOwotCQkJCSAgY29tbWFuZC5zZXRTZXJ2ZXJGYWN0b3J5SWQodHlwZVJ1bnRpbWVTZXJ2ZXJfLmdldFNlcnZlcklkKCkpOwotCQkJCSAgY29tbWFuZC5zZXRTZXJ2ZXJJbnN0YW5jZUlkKHR5cGVSdW50aW1lU2VydmVyXy5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCkpOwotCQkJCSAgc3RhdHVzID0gY29tbWFuZC5leGVjdXRlKCBtb25pdG9yLCBhZGFwdGFibGUgKTsKLQkJCQkgIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpCi0JCQkJICB7Ci0JCQkJCSAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKCBzdGF0dXMgKTsKLQkJCQkJICByZXR1cm4gc3RhdHVzOwotCQkJCSAgfSAgICAgICAgCi0JCQkgIH0gICAgICAgICAgICAKLQkJICB9IGVsc2UgewotCQkJLy8gYWRkIGZhY2V0cyByZXF1aXJlZCBieSBXZWIgc2VydmljZSBydW50aW1lCi0JCSAgICAgICAgaWYgKHJmdi5sZW5ndGggIT0gMCkgewotCQkgICAgICAgIAlzdGF0dXMgPSBGYWNldFV0aWxzLmFkZFJlcXVpcmVkRmFjZXRzVG9Qcm9qZWN0KHByb2plY3QsIHJmdiwgbW9uaXRvcik7Ci0JCSAgICAgICAgCWlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpCi0JCSAgICAgICAgCXsKLQkJICAgICAgICAJCWVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvciggc3RhdHVzICk7Ci0JCSAgICAgICAgCQlyZXR1cm4gc3RhdHVzOwotCQkgICAgICAgIAl9ICAgICAgCi0JCSAgICAgICAgfQotCQkgIH0KLQkgIH0KLQkgIHJldHVybiBzdGF0dXM7Ci0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U2VydmljZVR5cGVSdW50aW1lU2VydmVyKCBUeXBlUnVudGltZVNlcnZlciB0eXBlUnVudGltZVNlcnZlciApCi0gIHsKLQkgIHR5cGVSdW50aW1lU2VydmVyXyA9IHR5cGVSdW50aW1lU2VydmVyOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VSdW50aW1lSWQoU3RyaW5nIGlkKQotICB7Ci0gICAgc2VydmljZVJ1bnRpbWVJZF8gPSBpZDsKLSAgfQotCSAgCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VKMkVFVmVyc2lvbiggU3RyaW5nIGoyZWVMZXZlbCApCi0gIHsKLQlqMmVlTGV2ZWxfID0gajJlZUxldmVsOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SjJlZUxldmVsKCkKLSAgewotCSAgcmV0dXJuIGoyZWVMZXZlbF87ICAKLSAgfQotCQotICBwdWJsaWMgSVdlYlNlcnZpY2UgZ2V0V2ViU2VydmljZSgpCi0gIHsKLQlyZXR1cm4gd2ViU2VydmljZV87ICAKLSAgfQotICAKLSAgcHVibGljIElDb250ZXh0IGdldENvbnRleHQoKQotICB7Ci0gICAgcmV0dXJuIGNvbnRleHRfOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRSZXNvdXJjZUNvbnRleHQoIFJlc291cmNlQ29udGV4dCByZXNvdXJjZUNvbnRleHQgKQotICB7Ci0gICAgcmVzb3VyY2VDb250ZXh0XyA9IHJlc291cmNlQ29udGV4dDsJICAKLSAgfQotICAKLSAgcHVibGljIElTZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCkKLSAgewotICAgIHJldHVybiBzZWxlY3Rpb25fOwkgIAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb24oIElTZWxlY3Rpb24gc2VsZWN0aW9uICkKLSAgewotCXNlbGVjdGlvbl8gPSBzZWxlY3Rpb247ICAKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRQcm9qZWN0KCkKLSAgewotICAgIHJldHVybiBwcm9qZWN0XzsJICAKLSAgfQotCSAKLSAgcHVibGljIFN0cmluZyBnZXRNb2R1bGUoKQotICB7Ci0gICAgcmV0dXJuIG1vZHVsZV87CSAgCi0gIH0KLQkKLSAgcHVibGljIHZvaWQgc2V0TW9kdWxlKCBTdHJpbmcgbW9kdWxlICkKLSAgewotCSAgbW9kdWxlXyA9IG1vZHVsZTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0TW9kdWxlVHlwZShTdHJpbmcgdHlwZSkKLSAgewotCSAgbW9kdWxlVHlwZV8gPSB0eXBlOwotICB9Ci0JCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RWFyUHJvamVjdCgpCi0gIHsKLSAgICByZXR1cm4gZWFyUHJvamVjdF87CSAgCi0gIH0KLQkKLSAgcHVibGljIFN0cmluZyBnZXRFYXIoKQotICB7Ci0JICByZXR1cm4gZWFyXzsgIAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRFYXIoIFN0cmluZyBlYXIgKQotICB7Ci0JICBlYXJfID0gZWFyOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEluc3RhbGxTZXJ2aWNlKGJvb2xlYW4gaW5zdGFsbFNlcnZpY2UpCi0JewotCQlpbnN0YWxsXyA9IGluc3RhbGxTZXJ2aWNlOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldERldmVsb3BTZXJ2aWNlKGJvb2xlYW4gZGV2ZWxvcFNlcnZpY2UpIHsKLQkJZGV2ZWxvcF8gPSBkZXZlbG9wU2VydmljZTsKLQl9CQotCQotCXB1YmxpYyB2b2lkIHNldEFzc2VtYmxlU2VydmljZShib29sZWFuIGFzc2VtYmxlU2VydmljZSkgewotCQlhc3NlbWJsZV8gPSBhc3NlbWJsZVNlcnZpY2U7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0RGVwbG95U2VydmljZShib29sZWFuIGRlcGxveVNlcnZpY2UpIHsKLQkJZGVwbG95XyA9IGRlcGxveVNlcnZpY2U7Ci0JfQotICAKLQlwdWJsaWMgdm9pZCBzZXRTdGFydFNlcnZpY2UoYm9vbGVhbiBzdGFydFNlcnZpY2UpCi0JewotCQlydW5fID0gc3RhcnRTZXJ2aWNlOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRUZXN0U2VydmljZShib29sZWFuIHRlc3RTZXJ2aWNlKQotCXsKLQkJdGVzdF8gPSB0ZXN0U2VydmljZTsKLQl9CQotCQotICBwdWJsaWMgdm9pZCBzZXRQdWJsaXNoU2VydmljZShib29sZWFuIHB1Ymxpc2hTZXJ2aWNlKQotICB7Ci0gICAgcHVibGlzaF8gPSBwdWJsaXNoU2VydmljZTsKLSAgfQotCQotICBwdWJsaWMgdm9pZCBzZXRHZW5lcmF0ZVByb3h5KGJvb2xlYW4gZ2VuUHJveHkpCi0gIHsKLSAgICBjbGllbnRfID0gZ2VuUHJveHk7ICAKLSAgfQkKLQkKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9leHRlbnNpb24vUHJlU2VydmljZUluc3RhbGxDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL2V4dGVuc2lvbi9QcmVTZXJ2aWNlSW5zdGFsbENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM2M2JkMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL2V4dGVuc2lvbi9QcmVTZXJ2aWNlSW5zdGFsbENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA4MTUgICAxOTk2MjYga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS5leHRlbnNpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5BZGRNb2R1bGVUb1NlcnZlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uLkNyZWF0ZVNlcnZlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JV2ViU2VydmljZTsKLQotcHVibGljIGNsYXNzIFByZVNlcnZpY2VJbnN0YWxsQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIAotewotCXByaXZhdGUgSVdlYlNlcnZpY2Ugd2ViU2VydmljZV87Ci0JcHJpdmF0ZSBTdHJpbmcJCXByb2plY3RfOwotICAgIHByaXZhdGUgU3RyaW5nICAgICAgbW9kdWxlXzsKLQlwcml2YXRlIFN0cmluZwkJZWFyUHJvamVjdF87Ci0gICAgcHJpdmF0ZSBTdHJpbmcgICAgICBlYXJfOwotICAgIHByaXZhdGUgSUNvbnRleHQgICAgY29udGV4dF87Ci0JCQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgewotCSAgaWYgKGNvbnRleHRfLmdldEluc3RhbGwoKSkKLQkgIHsKLQkgICAgICAgICAgICBJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQgPSBnZXRFbnZpcm9ubWVudCgpOyAgICAgIAotCQkJICAJCQkKLQkJCQlpZiAod2ViU2VydmljZV8uZ2V0V2ViU2VydmljZUluZm8oKS5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCk9PW51bGwpCi0JCQkJewotCQkJCQlDcmVhdGVTZXJ2ZXJDb21tYW5kIGNyZWF0ZVNlcnZlckNvbW1hbmQgPSBuZXcgQ3JlYXRlU2VydmVyQ29tbWFuZCgpOwotCQkJCQljcmVhdGVTZXJ2ZXJDb21tYW5kLnNldFNlcnZlckZhY3RvcnlpZCh3ZWJTZXJ2aWNlXy5nZXRXZWJTZXJ2aWNlSW5mbygpLmdldFNlcnZlckZhY3RvcnlJZCgpKTsKLQkgICAgICAgICAgICAgICAgY3JlYXRlU2VydmVyQ29tbWFuZC5zZXRFbnZpcm9ubWVudCggZW52aXJvbm1lbnQgKTsKLQkJCQkJSVN0YXR1cyBjcmVhdGVTZXJ2ZXJTdGF0dXMgPSBjcmVhdGVTZXJ2ZXJDb21tYW5kLmV4ZWN1dGUoIG1vbml0b3IsIG51bGwpOwotCQkJCQlpZiAoY3JlYXRlU2VydmVyU3RhdHVzLmdldFNldmVyaXR5KCk9PVN0YXR1cy5PSykKLQkJCQkJewotCQkJCQkJd2ViU2VydmljZV8uZ2V0V2ViU2VydmljZUluZm8oKS5zZXRTZXJ2ZXJJbnN0YW5jZUlkKGNyZWF0ZVNlcnZlckNvbW1hbmQuZ2V0U2VydmVySW5zdGFuY2VJZCgpKTsKLQkJCQkJCXdlYlNlcnZpY2VfLmdldFdlYlNlcnZpY2VJbmZvKCkuc2V0U2VydmVyQ3JlYXRlZCh0cnVlKTsKLQkJCQkJfQotCQkJCQllbHNlCi0JCQkJCXsKLQkJCQkJCWlmIChjcmVhdGVTZXJ2ZXJTdGF0dXMuZ2V0U2V2ZXJpdHkoKT09U3RhdHVzLkVSUk9SKQotCQkJCQkJewotCQkJCQkJCWVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihjcmVhdGVTZXJ2ZXJTdGF0dXMpOwotCQkJCQkJfQkJCQkJCQkJCi0JCQkJCQlyZXR1cm4gY3JlYXRlU2VydmVyU3RhdHVzOwotCQkJCQl9Ci0JCQkJfQotCQkJCSAgCi0JCQkJCi0JCQkJCi0JCQkJQWRkTW9kdWxlVG9TZXJ2ZXJDb21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkTW9kdWxlVG9TZXJ2ZXJDb21tYW5kKCk7Ci0JCQkJY29tbWFuZC5zZXRTZXJ2ZXJJbnN0YW5jZUlkKHdlYlNlcnZpY2VfLmdldFdlYlNlcnZpY2VJbmZvKCkuZ2V0U2VydmVySW5zdGFuY2VJZCgpKTsKLQkJCQlpZiAoZWFyUHJvamVjdF8gIT0gbnVsbCAmJiBlYXJQcm9qZWN0Xy5sZW5ndGgoKT4wICYmIGVhcl8hPSBudWxsICYmIGVhcl8ubGVuZ3RoKCk+MCkKLQkJCQl7Ci0JCQkJCWNvbW1hbmQuc2V0UHJvamVjdChlYXJQcm9qZWN0Xyk7Ci0JCQkJCWNvbW1hbmQuc2V0TW9kdWxlKGVhcl8pOwotCQkJCX0KLQkJCQllbHNlCi0JCQkJewotCQkJCQljb21tYW5kLnNldFByb2plY3QocHJvamVjdF8pOwotCQkJCQljb21tYW5kLnNldE1vZHVsZShtb2R1bGVfKTsJCQkJCi0JCQkJfQotCQotCSAgICAgICAgICAgIGNvbW1hbmQuc2V0RW52aXJvbm1lbnQoIGVudmlyb25tZW50ICk7Ci0JCQkJSVN0YXR1cyBzdGF0dXMgPSBjb21tYW5kLmV4ZWN1dGUoIG1vbml0b3IsIG51bGwgKTsKLQkJCQlpZiAoc3RhdHVzLmdldFNldmVyaXR5KCk9PVN0YXR1cy5FUlJPUikKLQkJCQl7Ci0JCQkJCWVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkJCX0JCQkKLQkJCSAgcmV0dXJuIHN0YXR1czsKLQkJICB9Ci0JCSAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JICB9Ci0KLQkgIHB1YmxpYyB2b2lkIHNldFByb2plY3QoIFN0cmluZyBwcm9qZWN0ICkKLQkgIHsKLQkJICBwcm9qZWN0XyA9IHByb2plY3Q7Ci0JICB9Ci0JCSAgCi0JICBwdWJsaWMgdm9pZCBzZXRNb2R1bGUoIFN0cmluZyBtb2R1bGUgKQotCSAgewotCQkgIG1vZHVsZV8gPSBtb2R1bGU7Ci0JICB9CQotCQkKLQkgIHB1YmxpYyB2b2lkIHNldEVhclByb2plY3QoIFN0cmluZyBlYXJQcm9qZWN0ICkKLQkgIHsKLQkJICBlYXJQcm9qZWN0XyA9IGVhclByb2plY3Q7Ci0JICB9Ci0JICAKLQkgIHB1YmxpYyB2b2lkIHNldEVhciggU3RyaW5nIGVhciApCi0JICB7Ci0JCSAgZWFyXyA9IGVhcjsgIAotCSAgfQotCQkKLQkgIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2UoIElXZWJTZXJ2aWNlIHdlYlNlcnZpY2UgKQotCSAgewotCQkgIHdlYlNlcnZpY2VfID0gd2ViU2VydmljZTsgIAotCSAgfQotCSAgCi0JICBwdWJsaWMgdm9pZCBzZXRDb250ZXh0KElDb250ZXh0IGNvbnRleHQpCi0JICB7Ci0JCSAgY29udGV4dF89Y29udGV4dDsKLQkgIH0KLQkJCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL2V4dGVuc2lvbi9QcmVTZXJ2aWNlUnVuQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9leHRlbnNpb24vUHJlU2VydmljZVJ1bkNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjc1OGJjYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL2V4dGVuc2lvbi9QcmVTZXJ2aWNlUnVuQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS5leHRlbnNpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tYW5kLlN0YXJ0U2VydmVyQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlOwotCi1wdWJsaWMgY2xhc3MgUHJlU2VydmljZVJ1bkNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiAKLXsKLQlwcml2YXRlIElXZWJTZXJ2aWNlCQkJCXdlYlNlcnZpY2VfOwotCXByaXZhdGUgSUNvbnRleHQJCQkJY29udGV4dF87Ci0JCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7Ci0JCSAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCSAgICAgIGlmIChjb250ZXh0Xy5nZXRSdW4oKSkKLQkJICB7Ci0JICAgICAgICAgICAgSUVudmlyb25tZW50IGVudmlyb25tZW50ID0gZ2V0RW52aXJvbm1lbnQoKTsKLQkJCQkKLQkJCQlTdGFydFNlcnZlckNvbW1hbmQgY29tbWFuZCA9IG5ldyBTdGFydFNlcnZlckNvbW1hbmQoKTsKLQkJCQljb21tYW5kLnNldFNlcnZlckluc3RhbmNlSWQod2ViU2VydmljZV8uZ2V0V2ViU2VydmljZUluZm8oKS5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCkpOwotCSAgICAgICAgICAgIGNvbW1hbmQuc2V0RW52aXJvbm1lbnQoIGVudmlyb25tZW50ICk7Ci0JCQkJc3RhdHVzID0gY29tbWFuZC5leGVjdXRlKCBtb25pdG9yLCBudWxsICk7Ci0JCQkJaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpPT1TdGF0dXMuRVJST1IpCi0JCQkJewotCQkJCQllbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsJCQkgIAotCQkJCX0KLQkJICB9Ci0JCSAgCi0JCSAgcmV0dXJuIHN0YXR1czsJCQkKLQkgIH0KLQkJCi0JICBwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlKCBJV2ViU2VydmljZSB3ZWJTZXJ2aWNlICkKLQkgIHsKLQkJICB3ZWJTZXJ2aWNlXyA9IHdlYlNlcnZpY2U7ICAKLQkgIH0KLQkgIAotCSAgcHVibGljIHZvaWQgc2V0Q29udGV4dCAoSUNvbnRleHQgY29udGV4dCkKLQkgIHsKLQkJICBjb250ZXh0XyA9IGNvbnRleHQ7Ci0JICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvZXh0ZW5zaW9uL1NlcnZpY2VSb290RnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvZXh0ZW5zaW9uL1NlcnZpY2VSb290RnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmFiNDM5YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL2V4dGVuc2lvbi9TZXJ2aWNlUm9vdEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMTMxIDEyMTA3MSAgIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lciAgICAgCi0gKiAyMDA2MDIyMSAgIDExOTExMSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwMzMxICAgMTI4ODI3IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkuZXh0ZW5zaW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmV4dGVuc2lvbi5QcmVDbGllbnREZXZlbG9wQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2VxdWVuY2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TaW1wbGVGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5EYXRhT2JqZWN0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXh0ZW5zaW9ucy5Bc3NlbWJsZVNlcnZpY2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXh0ZW5zaW9ucy5EZXBsb3lTZXJ2aWNlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4dGVuc2lvbnMuRGV2ZWxvcFNlcnZpY2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXh0ZW5zaW9ucy5JbnN0YWxsU2VydmljZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHRlbnNpb25zLlJ1blNlcnZpY2VGcmFnbWVudDsKLQotcHVibGljIGNsYXNzIFNlcnZpY2VSb290RnJhZ21lbnQgZXh0ZW5kcyBTZXF1ZW5jZUZyYWdtZW50IAotewotICBwdWJsaWMgU2VydmljZVJvb3RGcmFnbWVudCgpCi0gIHsKLSAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZCgpLCAiIiApICk7Ci0gICAgYWRkKCBuZXcgRGV2ZWxvcFNlcnZpY2VGcmFnbWVudCgpICk7Ci0gICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBQcmVTZXJ2aWNlQXNzZW1ibGVDb21tYW5kKCksICIiICkgKTsKLSAgICBhZGQoIG5ldyBBc3NlbWJsZVNlcnZpY2VGcmFnbWVudCgpICk7Ci0gICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBQcmVTZXJ2aWNlRGVwbG95Q29tbWFuZCgpLCAiIiApICk7Ci0gICAgYWRkKCBuZXcgRGVwbG95U2VydmljZUZyYWdtZW50KCkgKTsKLSAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IFByZVNlcnZpY2VJbnN0YWxsQ29tbWFuZCgpLCAiIiApICk7Ci0gICAgYWRkKCBuZXcgSW5zdGFsbFNlcnZpY2VGcmFnbWVudCgpICk7Ci0gICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBQcmVTZXJ2aWNlUnVuQ29tbWFuZCgpLCAKLSAgICAJICJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkuZXh0ZW5zaW9uLlByZVNlcnZpY2VSdW5Db21tYW5kIiApICk7Ci0gICAgYWRkKCBuZXcgUnVuU2VydmljZUZyYWdtZW50KCkgKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKERhdGFNYXBwaW5nUmVnaXN0cnkgcmVnaXN0cnkpIAotICB7Ci0JCS8vTWFwcGluZ3MgZnJvbSBmcmFtZXdvcmsgdG8gZXh0ZW5zaW9uIGZyYWdtZW50cwotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZSIsIERldmVsb3BTZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsgIAotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiRW52aXJvbm1lbnQiLCBEZXZlbG9wU2VydmljZUZyYWdtZW50LmNsYXNzICk7ICAKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIkNvbnRleHQiLCBEZXZlbG9wU2VydmljZUZyYWdtZW50LmNsYXNzICk7ICAKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIlNlbGVjdGlvbiIsIERldmVsb3BTZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsgIAotCQlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJQcm9qZWN0IiwgRGV2ZWxvcFNlcnZpY2VGcmFnbWVudC5jbGFzcyApOwotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiTW9kdWxlIiwgRGV2ZWxvcFNlcnZpY2VGcmFnbWVudC5jbGFzcyApOwotCQlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJFYXJQcm9qZWN0IiwgRGV2ZWxvcFNlcnZpY2VGcmFnbWVudC5jbGFzcyApOwotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiRWFyIiwgRGV2ZWxvcFNlcnZpY2VGcmFnbWVudC5jbGFzcyApOwotCQotCS8vIE1hcCB0aGUgUHJlU2VydmljZURldmVsb3BDb21tYW5kIGludG8gdGhlIGRhdGFPYmplY3QgYW5kIHRoZSBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC4KLQlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlIiwgRGF0YU9iamVjdENvbW1hbmQuY2xhc3MsICJEYXRhT2JqZWN0IiwgbnVsbCApOwotCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2UiLCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIkRhdGFPYmplY3QiLCBudWxsICk7Ci0JCQotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZSIsIEFzc2VtYmxlU2VydmljZUZyYWdtZW50LmNsYXNzICk7ICAKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVudmlyb25tZW50IiwgQXNzZW1ibGVTZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsgIAotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiQ29udGV4dCIsIEFzc2VtYmxlU2VydmljZUZyYWdtZW50LmNsYXNzICk7ICAKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIlNlbGVjdGlvbiIsIEFzc2VtYmxlU2VydmljZUZyYWdtZW50LmNsYXNzICk7Ci0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIlByb2plY3QiLCBBc3NlbWJsZVNlcnZpY2VGcmFnbWVudC5jbGFzcyApOwotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiTW9kdWxlIiwgQXNzZW1ibGVTZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsgIAotCQlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJFYXJQcm9qZWN0IiwgQXNzZW1ibGVTZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVhciIsIEFzc2VtYmxlU2VydmljZUZyYWdtZW50LmNsYXNzICk7Ci0JCi0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlIiwgRGVwbG95U2VydmljZUZyYWdtZW50LmNsYXNzICk7ICAKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVudmlyb25tZW50IiwgRGVwbG95U2VydmljZUZyYWdtZW50LmNsYXNzICk7ICAKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIkNvbnRleHQiLCBEZXBsb3lTZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsgIAotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiU2VsZWN0aW9uIiwgRGVwbG95U2VydmljZUZyYWdtZW50LmNsYXNzICk7Ci0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIlByb2plY3QiLCBEZXBsb3lTZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIk1vZHVsZSIsIERlcGxveVNlcnZpY2VGcmFnbWVudC5jbGFzcyApOyAgCi0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVhclByb2plY3QiLCBEZXBsb3lTZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVhciIsIERlcGxveVNlcnZpY2VGcmFnbWVudC5jbGFzcyApOwotCQotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZSIsIEluc3RhbGxTZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsgIAotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiRW52aXJvbm1lbnQiLCBJbnN0YWxsU2VydmljZUZyYWdtZW50LmNsYXNzICk7ICAKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIkNvbnRleHQiLCBJbnN0YWxsU2VydmljZUZyYWdtZW50LmNsYXNzICk7ICAKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIlNlbGVjdGlvbiIsIEluc3RhbGxTZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsKLQkJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiUHJvamVjdCIsIEluc3RhbGxTZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIk1vZHVsZSIsIEluc3RhbGxTZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsgIAotCQlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJFYXJQcm9qZWN0IiwgSW5zdGFsbFNlcnZpY2VGcmFnbWVudC5jbGFzcyApOwotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiRWFyIiwgSW5zdGFsbFNlcnZpY2VGcmFnbWVudC5jbGFzcyApOwotCQotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZSIsIFJ1blNlcnZpY2VGcmFnbWVudC5jbGFzcyApOyAgCi0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJFbnZpcm9ubWVudCIsIFJ1blNlcnZpY2VGcmFnbWVudC5jbGFzcyApOyAgCi0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJDb250ZXh0IiwgUnVuU2VydmljZUZyYWdtZW50LmNsYXNzICk7ICAKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIlNlbGVjdGlvbiIsIFJ1blNlcnZpY2VGcmFnbWVudC5jbGFzcyApOyAgCi0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIlByb2plY3QiLCBSdW5TZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIk1vZHVsZSIsIFJ1blNlcnZpY2VGcmFnbWVudC5jbGFzcyApOyAgCi0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVhclByb2plY3QiLCBSdW5TZXJ2aWNlRnJhZ21lbnQuY2xhc3MgKTsKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVhciIsIFJ1blNlcnZpY2VGcmFnbWVudC5jbGFzcyApOwotCQkKLQkJLy9NYXBwaW5ncyBmcm9tIGZyYW1ld29yayB0byBmcmFtZXdvcmsgY29tbWFuZHMKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2UiLCBQcmVTZXJ2aWNlQXNzZW1ibGVDb21tYW5kLmNsYXNzICk7Ci0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIlByb2plY3QiLCBQcmVTZXJ2aWNlQXNzZW1ibGVDb21tYW5kLmNsYXNzICk7Ci0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJNb2R1bGUiLCBQcmVTZXJ2aWNlQXNzZW1ibGVDb21tYW5kLmNsYXNzICk7Ci0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVhclByb2plY3QiLCBQcmVTZXJ2aWNlQXNzZW1ibGVDb21tYW5kLmNsYXNzICk7Ci0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJFYXIiLCBQcmVTZXJ2aWNlQXNzZW1ibGVDb21tYW5kLmNsYXNzICk7Ci0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJDb250ZXh0IiwgUHJlU2VydmljZUFzc2VtYmxlQ29tbWFuZC5jbGFzcyApOwotCQkKLSAgICByZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJDb250ZXh0IiwgUHJlU2VydmljZURlcGxveUNvbW1hbmQuY2xhc3MgKTsKLSAgICAKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2UiLCBQcmVTZXJ2aWNlSW5zdGFsbENvbW1hbmQuY2xhc3MgKTsKLQkJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiUHJvamVjdCIsIFByZVNlcnZpY2VJbnN0YWxsQ29tbWFuZC5jbGFzcyApOwotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiTW9kdWxlIiwgUHJlU2VydmljZUluc3RhbGxDb21tYW5kLmNsYXNzICk7Ci0JCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVhclByb2plY3QiLCBQcmVTZXJ2aWNlSW5zdGFsbENvbW1hbmQuY2xhc3MgKTsKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIkVhciIsIFByZVNlcnZpY2VJbnN0YWxsQ29tbWFuZC5jbGFzcyApOwotICAJcmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiQ29udGV4dCIsIFByZVNlcnZpY2VJbnN0YWxsQ29tbWFuZC5jbGFzcyApOwotCi0gIAlyZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlIiwgUHJlU2VydmljZVJ1bkNvbW1hbmQuY2xhc3MgKTsKLSAgCXJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIkNvbnRleHQiLCBQcmVTZXJ2aWNlUnVuQ29tbWFuZC5jbGFzcyApOwotCQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3BsdWdpbi9XZWJTZXJ2aWNlQ3JlYXRpb25VSVBsdWdpbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9wbHVnaW4vV2ViU2VydmljZUNyZWF0aW9uVUlQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDdiOGEwYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3BsdWdpbi9XZWJTZXJ2aWNlQ3JlYXRpb25VSVBsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDI0ICAgMTE1NjkwIHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwNjA1MDQgICAxMzgxMTggam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS5wbHVnaW47Ci0KLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZURlc2NyaXB0b3I7Ci0KLQotLyoqCi0qIFRoaXMgaXMgdGhlIHBsdWdpbiBjbGFzcyBmb3IgdGhlIFdlYiBTZXJ2aWNlcyBDcmVhdGlvbiBVSSBwbHVnaW4uCi0qIDxwPgotKiBUaGUgV2ViIFNlcnZpY2VzIENyZWF0aW9uIFVJIHBsdWdpbidzIHNvbGUgZnVuY3Rpb24gaXMgdG8gYWRkIAotKiB1c2VyIGludGVyZmFjZSBvZiB0aGUgV2ViIFNlcnZpY2VzIENyZWF0aW9uIFdpemFyZCwgY29udGFpbmVkIGluICAKLSogdGhlIG9yZy5lY2xpcHNlLmpzdC53cy51aSBwbHVnaW4uCi0qLwotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VDcmVhdGlvblVJUGx1Z2luIGV4dGVuZHMgUGx1Z2luCi17Ci0KLSAgLyoqCi0gICogVGhlIGlkZW50aWZpZXIgb2YgdGhlIGRlc2NyaXB0b3Igb2YgdGhpcyBwbHVnaW4gaW4gcGx1Z2luLnhtbC4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSUQgPSAib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpIjsKLQotICAvKioKLSAgKiBUaGUgcmVmZXJlbmNlIHRvIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBwbHVnaW4uCi0gICovCi0gIHByaXZhdGUgc3RhdGljIFdlYlNlcnZpY2VDcmVhdGlvblVJUGx1Z2luIGluc3RhbmNlXzsKLQotICAvKioKLSAgKiBDb25zdHJ1Y3RzIGEgcnVudGltZSBwbHVnaW4gb2JqZWN0IGZvciB0aGlzIHBsdWdpbi4KLSAgKiBUaGUgInBsdWdpbiIgZWxlbWVudCBpbiBwbHVnaW4ueG1sIHNob3VsZCBpbmNsdWRlIHRoZSBhdHRyaWJ1dGUKLSAgKiBjbGFzcyA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkucGx1Z2luLldlYlNlcnZpY2VDcmVhdGlvblVJUGx1Z2luIi4KLSAgKiBAcGFyYW0gZGVzY3JpcHRvciBUaGUgZGVzY3JpcHRvciBvZiB0aGlzIHBsdWdpbi4KLSAgKi8KLSAgcHVibGljIFdlYlNlcnZpY2VDcmVhdGlvblVJUGx1Z2luICgpCi0gIHsKLSAgICBzdXBlcigpOwotICAgIGluc3RhbmNlXyA9IHRoaXM7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBwbHVnaW4uIEVxdWl2YWxlbnQgdG8gY2FsbGluZwotICAqIChXZWJTZXJ2aWNlQ3JlYXRpb25VSVBsdWdpbilQbGF0Zm9ybS5nZXRQbHVnaW4oIm9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aSIpOwotICAqIEByZXR1cm4gVGhlIFdlYlNlcnZpY2VDcmVhdGlvblVJUGx1Z2luIHNpbmdsZXRvbi4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBXZWJTZXJ2aWNlQ3JlYXRpb25VSVBsdWdpbiBnZXRJbnN0YW5jZSAoKQotICB7Ci0gICAgcmV0dXJuIGluc3RhbmNlXzsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIGFuIGltYWdlIGRlc2NyaXB0b3IgZm9yIHRoZSBuYW1lZCByZXNvdXJjZQotICAgKiBhcyByZWxhdGl2ZSB0byB0aGUgcGx1Z2luIGluc3RhbGwgbG9jYXRpb24uCi0gICAqIEByZXR1cm4gQW4gaW1hZ2UgZGVzY3JpcHRvciwgcG9zc2libHkgbnVsbC4KLSAgICovCi0gICBwdWJsaWMgc3RhdGljIEltYWdlRGVzY3JpcHRvciBnZXRJbWFnZURlc2NyaXB0b3IgKCBTdHJpbmcgbmFtZSApCi0gICB7Ci0gCXRyeQotICAgICB7CQotICAgICAJVVJMIGltYWdlVVJMID0gRmlsZUxvY2F0b3IuZmluZChpbnN0YW5jZV8uZ2V0QnVuZGxlKCksIG5ldyBQYXRoKCIkbmwkLyIrbmFtZSksIG51bGwpOwotICAgICAJcmV0dXJuIEltYWdlRGVzY3JpcHRvci5jcmVhdGVGcm9tVVJMKGltYWdlVVJMKTsKLSAgICAgfQotICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgIHsKLSAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgfQotICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9wcmVmZXJlbmNlcy9TY2VuYXJpb0RlZmF1bHRzUHJlZmVyZW5jZVBhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvcHJlZmVyZW5jZXMvU2NlbmFyaW9EZWZhdWx0c1ByZWZlcmVuY2VQYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0ZTA5ZjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9wcmVmZXJlbmNlcy9TY2VuYXJpb0RlZmF1bHRzUHJlZmVyZW5jZVBhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MTcgICAxMzYzOTEgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA1MjkgICAxNDE0MjIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkucHJlZmVyZW5jZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLlByZWZlcmVuY2VQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0cy5TZXJ2ZXJXaXphcmRXaWRnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmRhdGEuVHlwZVJ1bnRpbWVTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnBsdWdpbi5XZWJTZXJ2aWNlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5jb21tb24uVUlVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZTsKLQotCi0KLS8qKgotICoKLSAqLwotcHVibGljIGNsYXNzIFNjZW5hcmlvRGVmYXVsdHNQcmVmZXJlbmNlUGFnZSBleHRlbmRzIFByZWZlcmVuY2VQYWdlIGltcGxlbWVudHMgSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlIAotewotCXByaXZhdGUgU2VydmVyV2l6YXJkV2lkZ2V0IHNlcnZlcldpZGdldF8gPSBudWxsOwotCQotCXB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaCB3b3JrYmVuY2gpICAgeyB9CQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuUHJlZmVyZW5jZVBhZ2UjY3JlYXRlQ29udGVudHMob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlKQotCSAqLwotCQotCXByb3RlY3RlZCBDb250cm9sIGNyZWF0ZUNvbnRlbnRzKENvbXBvc2l0ZSBwYXJlbnQpIAotCXsKLQkgIFVJVXRpbHMgdXRpbHMgPSBuZXcgVUlVdGlscyhudWxsKTsKLQkgIAotCSAgQ29tcG9zaXRlIHBhZ2UgPSB1dGlscy5jcmVhdGVDb21wb3NpdGUoIHBhcmVudCwgMSApOwotCSAgCi0gICAgICBzZXJ2ZXJXaWRnZXRfID0gbmV3IFNlcnZlcldpemFyZFdpZGdldCggZmFsc2UsIHRydWUgKTsKLSAgICAgIHNlcnZlcldpZGdldF8uYWRkQ29udHJvbHMoIHBhZ2UsIG5ldyBMaXN0ZW5lcigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIGhhbmRsZUV2ZW50KCBFdmVudCBldnQgKXt9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICk7ICAgICAgCi0JICBpbml0aWFsaXplVmFsdWVzKCk7Ci0JICBzZXJ2ZXJXaWRnZXRfLmRpc2FibGVOb25QcmVmZXJlbmNlV2lkZ2V0cygpOwotCSAgYXBwbHlEaWFsb2dGb250KHBhZ2UpOwotCSAgcmV0dXJuIHBhZ2U7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGluaXRpYWxpemVWYWx1ZXMoKQotCXsKLQkgIFNjZW5hcmlvQ29udGV4dCBjb250ZXh0ID0gV2ViU2VydmljZVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFNjZW5hcmlvQ29udGV4dCgpOwotCi0gICAgICAvLyBTZXQgdmFsdWVzIGZyb20gY29udGV4dC4KLQkgIFR5cGVSdW50aW1lU2VydmVyIHNlcnZlcklkcyA9IG5ldyBUeXBlUnVudGltZVNlcnZlcigpOwotCSAgVHlwZVJ1bnRpbWVTZXJ2ZXIgY2xpZW50SWRzID0gbmV3IFR5cGVSdW50aW1lU2VydmVyKCk7Ci0JCQotCSAgc2VydmVySWRzLnNldFR5cGVJZCggY29udGV4dC5nZXRXZWJTZXJ2aWNlVHlwZSgpICk7Ci0JICBjbGllbnRJZHMuc2V0VHlwZUlkKCBjb250ZXh0LmdldENsaWVudFdlYlNlcnZpY2VUeXBlKCkgKTsKLQkJCi0gICAgICBzZXJ2ZXJXaWRnZXRfLnNldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlciggc2VydmVySWRzICk7Ci0gICAgICBzZXJ2ZXJXaWRnZXRfLnNldENsaWVudFR5cGVSdW50aW1lU2VydmVyKCBjbGllbnRJZHMgKTsKLSAgICAgIC8vanZoIHNlcnZlcldpZGdldF8uc2V0R2VuZXJhdGVQcm94eSggbmV3IEJvb2xlYW4oY29udGV4dC5nZXRHZW5lcmF0ZVByb3h5KCkpICk7Ci0gICAgICBzZXJ2ZXJXaWRnZXRfLnNldFB1Ymxpc2hTZXJ2aWNlKCBuZXcgQm9vbGVhbihjb250ZXh0LmdldExhdW5jaFdlYlNlcnZpY2VFeHBsb3JlcigpKSApOwotICAgICAgc2VydmVyV2lkZ2V0Xy5zZXRJbnN0YWxsU2VydmljZSggbmV3IEJvb2xlYW4oY29udGV4dC5nZXRJbnN0YWxsV2ViU2VydmljZSgpKSApOwotICAgICAgc2VydmVyV2lkZ2V0Xy5zZXRJbnN0YWxsQ2xpZW50KCBuZXcgQm9vbGVhbihjb250ZXh0LmdldEluc3RhbGxDbGllbnQoKSkgKTsKLSAgICAgIHNlcnZlcldpZGdldF8uc2V0U3RhcnRTZXJ2aWNlKCBuZXcgQm9vbGVhbihjb250ZXh0LmdldFN0YXJ0V2ViU2VydmljZSgpKSApOwotICAgICAgc2VydmVyV2lkZ2V0Xy5zZXRUZXN0U2VydmljZSggbmV3IEJvb2xlYW4oY29udGV4dC5nZXRUZXN0V2ViU2VydmljZSgpKSApOwotICAgICAgc2VydmVyV2lkZ2V0Xy5zZXRUZXN0Q2xpZW50KCBuZXcgQm9vbGVhbihjb250ZXh0LmdldFRlc3RXZWJTZXJ2aWNlKCkpICk7Ci0gICAgICBzZXJ2ZXJXaWRnZXRfLnNldE1vbml0b3JTZXJ2aWNlKG5ldyBCb29sZWFuKGNvbnRleHQuZ2V0TW9uaXRvcldlYlNlcnZpY2UoKSkpOwotICAgICAgc2VydmVyV2lkZ2V0Xy5zZXRTZXJ2aWNlR2VuZXJhdGlvbihjb250ZXh0LmdldEdlbmVyYXRlV2ViU2VydmljZSgpKTsgIC8vanZoICAgICAgCi0gICAgICBzZXJ2ZXJXaWRnZXRfLnNldENsaWVudEdlbmVyYXRpb24oY29udGV4dC5nZXRHZW5lcmF0ZUNsaWVudCgpKTsgIC8vanZoCi0gICAgICBzZXJ2ZXJXaWRnZXRfLmludGVybmFsaXplKCk7Ci0JfQotCQotICAgIC8qKgotCSAqIERvZXMgYW55dGhpbmcgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIGRlZmF1bHQgYnV0dG9uIGhhcyBiZWVuIHByZXNzZWQuCi0JKi8KLQlwcm90ZWN0ZWQgdm9pZCBwZXJmb3JtRGVmYXVsdHMoKQotCXsKLQkgIHN1cGVyLnBlcmZvcm1EZWZhdWx0cygpOwotCSAgc2V0VG9EZWZhdWx0cygpOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgc2V0VG9EZWZhdWx0cygpCi0JewotCSAgU2NlbmFyaW9Db250ZXh0IGNvbnRleHQgPSBXZWJTZXJ2aWNlUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0U2NlbmFyaW9Db250ZXh0KCk7Ci0KLSAgICAgIC8vIFNldCB2YWx1ZXMgZnJvbSBjb250ZXh0LgotCSAgVHlwZVJ1bnRpbWVTZXJ2ZXIgc2VydmVySWRzID0gbmV3IFR5cGVSdW50aW1lU2VydmVyKCk7Ci0JICBUeXBlUnVudGltZVNlcnZlciBjbGllbnRJZHMgPSBuZXcgVHlwZVJ1bnRpbWVTZXJ2ZXIoKTsKLQkJCi0JICBzZXJ2ZXJJZHMuc2V0VHlwZUlkKCBjb250ZXh0LmdldFdlYlNlcnZpY2VUeXBlRGVmYXVsdCgpICk7Ci0JICBjbGllbnRJZHMuc2V0VHlwZUlkKCBjb250ZXh0LmdldENsaWVudFdlYlNlcnZpY2VUeXBlRGVmYXVsdCgpICk7Ci0JCQotICAgICAgc2VydmVyV2lkZ2V0Xy5zZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoIHNlcnZlcklkcyApOwotICAgICAgc2VydmVyV2lkZ2V0Xy5zZXRDbGllbnRUeXBlUnVudGltZVNlcnZlciggY2xpZW50SWRzICk7Ci0gICAgICBzZXJ2ZXJXaWRnZXRfLnNldFB1Ymxpc2hTZXJ2aWNlKCBuZXcgQm9vbGVhbihjb250ZXh0LmdldExhdW5jaFdlYlNlcnZpY2VFeHBsb3JlckRlZmF1bHQoKSkgKTsKLSAgICAgIHNlcnZlcldpZGdldF8uc2V0SW5zdGFsbFNlcnZpY2UoIG5ldyBCb29sZWFuKGNvbnRleHQuZ2V0SW5zdGFsbFdlYlNlcnZpY2VEZWZhdWx0KCkpICk7Ci0gICAgICBzZXJ2ZXJXaWRnZXRfLnNldEluc3RhbGxDbGllbnQoIG5ldyBCb29sZWFuKGNvbnRleHQuZ2V0SW5zdGFsbENsaWVudERlZmF1bHQoKSkgKTsKLSAgICAgIHNlcnZlcldpZGdldF8uc2V0U3RhcnRTZXJ2aWNlKCBuZXcgQm9vbGVhbihjb250ZXh0LmdldFN0YXJ0V2ViU2VydmljZURlZmF1bHQoKSkgKTsKLSAgICAgIHNlcnZlcldpZGdldF8uc2V0VGVzdFNlcnZpY2UoIG5ldyBCb29sZWFuKGNvbnRleHQuZ2V0VGVzdFdlYlNlcnZpY2VEZWZhdWx0KCkpICk7Ci0gICAgICBzZXJ2ZXJXaWRnZXRfLnNldFRlc3RDbGllbnQoIG5ldyBCb29sZWFuKGNvbnRleHQuZ2V0VGVzdFdlYlNlcnZpY2VEZWZhdWx0KCkpICk7Ci0gICAgICBzZXJ2ZXJXaWRnZXRfLnNldE1vbml0b3JTZXJ2aWNlKG5ldyBCb29sZWFuKGNvbnRleHQuZ2V0TW9uaXRvcldlYlNlcnZpY2VEZWZhdWx0KCkpKTsKLSAgICAgIHNlcnZlcldpZGdldF8uc2V0U2VydmljZUdlbmVyYXRpb24oY29udGV4dC5nZXRHZW5lcmF0ZVdlYlNlcnZpY2VEZWZhdWx0KCkpOyAvL2p2aAotICAgICAgc2VydmVyV2lkZ2V0Xy5zZXRDbGllbnRHZW5lcmF0aW9uKGNvbnRleHQuZ2V0R2VuZXJhdGVDbGllbnREZWZhdWx0KCkpOyAvL2p2aAotICAgICAgc2VydmVyV2lkZ2V0Xy5pbnRlcm5hbGl6ZSgpOwotCX0KLQotCS8qKgotCSAqIERvIGFueXRoaW5nIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBPSyBidXR0b24gaGFzIGJlZW4gcHJlc3NlZC4KLQkgKiAgQHJldHVybiB3aGV0aGVyIGl0IGlzIG9rYXkgdG8gY2xvc2UgdGhlIHByZWZlcmVuY2UgcGFnZQotCSAqLwotCXB1YmxpYyBib29sZWFuIHBlcmZvcm1PaygpCi0JewotCSAgc3RvcmVWYWx1ZXMoKTsKLQkgIHJldHVybiB0cnVlOwotCX0KLQotCXByaXZhdGUgdm9pZCBzdG9yZVZhbHVlcygpCi0JewotCSAgU2NlbmFyaW9Db250ZXh0IGNvbnRleHQgPSBXZWJTZXJ2aWNlUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0U2NlbmFyaW9Db250ZXh0KCk7Ci0JICAKLQkgIFR5cGVSdW50aW1lU2VydmVyIHNlcnZlcklkcyA9IHNlcnZlcldpZGdldF8uZ2V0U2VydmljZVR5cGVSdW50aW1lU2VydmVyKCk7Ci0JICBUeXBlUnVudGltZVNlcnZlciBjbGllbnRJZHMgPSBzZXJ2ZXJXaWRnZXRfLmdldENsaWVudFR5cGVSdW50aW1lU2VydmVyKCk7Ci0JICAKLSAgICAgIGNvbnRleHQuc2V0V2ViU2VydmljZVR5cGUoIHNlcnZlcklkcy5nZXRUeXBlSWQoKSApOwotICAgICAgY29udGV4dC5zZXRDbGllbnRXZWJTZXJ2aWNlVHlwZSggY2xpZW50SWRzLmdldFR5cGVJZCgpICk7Ci0gICAgICBjb250ZXh0LnNldEdlbmVyYXRlUHJveHkoIHNlcnZlcldpZGdldF8uZ2V0R2VuZXJhdGVQcm94eSgpLmJvb2xlYW5WYWx1ZSgpICk7Ci0gICAgICBjb250ZXh0LnNldExhdW5jaFdlYlNlcnZpY2VFeHBsb3Jlciggc2VydmVyV2lkZ2V0Xy5nZXRQdWJsaXNoU2VydmljZSgpLmJvb2xlYW5WYWx1ZSgpICk7Ci0gICAgICBjb250ZXh0LnNldEluc3RhbGxXZWJTZXJ2aWNlKCBzZXJ2ZXJXaWRnZXRfLmdldEluc3RhbGxTZXJ2aWNlKCkuYm9vbGVhblZhbHVlKCkgKTsKLSAgICAgIGNvbnRleHQuc2V0SW5zdGFsbENsaWVudCggc2VydmVyV2lkZ2V0Xy5nZXRJbnN0YWxsQ2xpZW50KCkuYm9vbGVhblZhbHVlKCkgKTsKLSAgICAgIGNvbnRleHQuc2V0U3RhcnRXZWJTZXJ2aWNlKCBzZXJ2ZXJXaWRnZXRfLmdldFN0YXJ0U2VydmljZSgpLmJvb2xlYW5WYWx1ZSgpICk7Ci0gICAgICBjb250ZXh0LnNldFRlc3RXZWJTZXJ2aWNlKCBzZXJ2ZXJXaWRnZXRfLmdldFRlc3RTZXJ2aWNlKCkuYm9vbGVhblZhbHVlKCkgKTsKLSAgICAgIGNvbnRleHQuc2V0TW9uaXRvcldlYlNlcnZpY2Uoc2VydmVyV2lkZ2V0Xy5nZXRNb25pdG9yU2VydmljZSgpLmJvb2xlYW5WYWx1ZSgpKTsKLSAgICAgIGNvbnRleHQuc2V0R2VuZXJhdGVXZWJTZXJ2aWNlKHNlcnZlcldpZGdldF8uZ2V0U2VydmljZUdlbmVyYXRpb24oKSk7ICAgICAgCi0gICAgICBjb250ZXh0LnNldEdlbmVyYXRlQ2xpZW50KHNlcnZlcldpZGdldF8uZ2V0Q2xpZW50R2VuZXJhdGlvbigpKTsKLQl9Ci0JCi0JcHJvdGVjdGVkIHZvaWQgcGVyZm9ybUFwcGx5KCkKLQl7Ci0JICBwZXJmb3JtT2soKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3NlcnZlci9TdGFydFNlcnZlcldpZGdldENvbnRyaWJ1dG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3NlcnZlci9TdGFydFNlcnZlcldpZGdldENvbnRyaWJ1dG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjOTZjMWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9zZXJ2ZXIvU3RhcnRTZXJ2ZXJXaWRnZXRDb250cmlidXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS5zZXJ2ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5zZXJ2ZXIuU3RhcnRTZXJ2ZXJXaWRnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0Q29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotCi1wdWJsaWMgY2xhc3MgU3RhcnRTZXJ2ZXJXaWRnZXRDb250cmlidXRvciBpbXBsZW1lbnRzIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yIAotewotICBwcml2YXRlIElTZXJ2ZXIgICAgICBzZXJ2ZXJfOwotCSAgCi0gIHB1YmxpYyBTdGFydFNlcnZlcldpZGdldENvbnRyaWJ1dG9yKCBJU2VydmVyIHNlcnZlciApCi0gIHsKLQlzZXJ2ZXJfID0gc2VydmVyOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgCi0gIHsKLQlyZXR1cm4gQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfREVTQ19XU19TVEFSVF9TRVJWRVI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSAKLSAgewotCXJldHVybiAiIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VGl0bGUoKSAKLSAgewotCXJldHVybiBDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9USVRMRV9XU19TVEFSVF9TRVJWRVI7Ci0gIH0KLQotICBwdWJsaWMgV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5IGdldFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSgpIAotICB7Ci0JcmV0dXJuIG5ldyBXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKQotCSAgICAgICB7Ci0JCQkgcHVibGljIFdpZGdldENvbnRyaWJ1dG9yIGNyZWF0ZSgpIAotCQkJIHsKLQkJCQlyZXR1cm4gbmV3IFN0YXJ0U2VydmVyV2lkZ2V0KCBzZXJ2ZXJfICk7Ci0gCQkJIH0KLQkgICAgICAgfTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS9zZXJ2ZXIvU3RhcnRTZXJ2ZXJXaWRnZXRGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3NlcnZlci9TdGFydFNlcnZlcldpZGdldEZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTg3MTdiMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3NlcnZlci9TdGFydFNlcnZlcldpZGdldEZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDUyOSAgIDE0MTQyMiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzAzMjggICAxNzMzNDUgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgUGVlayBuZXh0IHBhZ2UgcHJvYmxlbQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLnNlcnZlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS5leHRlbnNpb24uUHJlU2VydmljZURldmVsb3BDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5JTmFtZWRXaWRnZXRDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5JTmFtZWRXaWRnZXRDb250cmlidXRvckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlckNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSVdlYlNlcnZpY2U7Ci0KLXB1YmxpYyBjbGFzcyBTdGFydFNlcnZlcldpZGdldEZhY3RvcnkgaW1wbGVtZW50cyBJTmFtZWRXaWRnZXRDb250cmlidXRvckZhY3RvcnkgCi17Ci0gIHByaXZhdGUgSVdlYlNlcnZpY2Ugd2Vic2VydmljZV87Ci0gIHByaXZhdGUgSUNvbnRleHQgY29udGV4dF87Ci0gIAotICBwdWJsaWMgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3IgZ2V0Rmlyc3ROYW1lZFdpZGdldCgpIAotICB7Ci0gICAgSVNlcnZlciBzZXJ2ZXIgPSBudWxsOwotICAgIAotICAgIGlmKCB3ZWJzZXJ2aWNlXyAhPSBudWxsICYmIGNvbnRleHRfLmdldFJ1bigpKQotICAgIHsKLSAgICAgIFN0cmluZyBpbnN0YW5jZUlkID0gd2Vic2VydmljZV8uZ2V0V2ViU2VydmljZUluZm8oKS5nZXRTZXJ2ZXJJbnN0YW5jZUlkKCk7Ci0gICAgICAKLSAgICAgIGlmKCBpbnN0YW5jZUlkICE9IG51bGwgJiYgaW5zdGFuY2VJZC5sZW5ndGgoKSA+IDAgKQotICAgICAgewotICAgICAgICBzZXJ2ZXIgPSBTZXJ2ZXJDb3JlLmZpbmRTZXJ2ZXIoIGluc3RhbmNlSWQgKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYoIHNlcnZlciAhPSBudWxsICYmIHNlcnZlci5nZXRTZXJ2ZXJTdGF0ZSgpICE9IElTZXJ2ZXIuU1RBVEVfU1RBUlRFRCApCi0gICAgewotICAgICAgcmV0dXJuIG5ldyBTdGFydFNlcnZlcldpZGdldENvbnRyaWJ1dG9yKCBzZXJ2ZXIgKTsKLSAgICB9Ci0gICAgCi0JcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3IgZ2V0TmV4dE5hbWVkV2lkZ2V0KCBJTmFtZWRXaWRnZXRDb250cmlidXRvciB3aWRnZXRDb250cmlidXRvcikgCi0gIHsKLQlyZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKERhdGFNYXBwaW5nUmVnaXN0cnkgZGF0YVJlZ2lzdHJ5KSAKLSAgewotCWRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlIiwgU3RhcnRTZXJ2ZXJXaWRnZXRGYWN0b3J5LmNsYXNzICk7Ci0JZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIkNvbnRleHQiLCBTdGFydFNlcnZlcldpZGdldEZhY3RvcnkuY2xhc3MgKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZSggSVdlYlNlcnZpY2Ugd2Vic2VydmljZSApCi0gIHsKLSAgICB3ZWJzZXJ2aWNlXyA9IHdlYnNlcnZpY2U7ICAKLSAgfQotICBwdWJsaWMgdm9pZCBzZXRDb250ZXh0ICggSUNvbnRleHQgY29udGV4dCApCi0gIHsKLSAgICBjb250ZXh0XyA9IGNvbnRleHQ7ICAKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL1NlcnZlcldpemFyZFdpZGdldC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL1NlcnZlcldpemFyZFdpZGdldC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlY2M5ZWY5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvd2lkZ2V0cy9TZXJ2ZXJXaXphcmRXaWRnZXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDA3ICAgMTM1NDE1IHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA0MDcgICAxMzU0NDMgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA0MTAgICAxMzU0NDIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNDEwICAgMTM1NDQxIGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwNDEwICAgMTM1NTYyIGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwNDExICAgMTM2MTY3IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDQxNyAgIDEzNjM5MC8xMzYzOTEvMTM2MTU5IGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwNDEzICAgMTM1NTgxIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA0MjAgICAxMzYxNTggcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDQyMCAgIDEzNjcwNSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNDIwICAgMTM2MTgyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDQyMCAgIDEzNzgyMCByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNDIwICAgMTM1OTEyIGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwNDIxICAgMTM2NzYxIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA0MjQgICAxMzgwNTIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNDI1ICAgMTM3ODMxIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA0MjYgICAxMzg1MTkgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA0MjcgICAxMzgwNTggam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA1MDQgICAxMzgwMzUgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA1MjQgICAxNDIyNzYgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA1MjkgICAxNDE0MjIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNjA1ICAgMTQ1MDgxIGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwNjA3ICAgMTQ0ODI2IGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwNjA3ICAgMTQ0MDQ5IGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwNjE0ICAgMTQ2MjcwIGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwNjE2ICAgMTQ3MzE3IGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwNzE3ICAgMTUwNTc3IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrCi0gKiAyMDA2MDcyNiAgIDE1MDg2NSBzZW5ncGxAY2EuaWJtLmNvbSAtICBTZW5nIFBodW5nLUx1Ci0gKiAyMDA2MDgwMyAgIDE1MjQ4NiBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgVHlwaW5nIFdTREwgaW4gU2VydmljZSBkZWZpbml0aW9uIGZpZWxkIGlzIHZlcnkgc2xvdwotICogMjAwNjA4MTcgICAxNDAwMTcgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIGxvbmdlciBwcm9qZWN0IG9yIHNlcnZlci9ydW50aW1lIHN0cmluZ3MgZG8gbm90IHJlc2l6ZSB3aXphcmQKLSAqIDIwMDYwODI1ICAgMTM1NTcwIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBTZXJ2aWNlIGltcGxlbWVudGF0aW9uIFVSTCBub3QgZGlzcGxheWVkIHByb3Blcmx5IG9uIGZpcnN0IHBhZ2UKLSAqIDIwMDYwODI5ICAgMTU1NDQxIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCB3ZWIgc2VydmljZSB3aXphcmQgaGFuZ3MgZHVyaW5nIHJlc2l6ZQotICogMjAwNjA4MzAgICAxNTUxMTQgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgVXBkYXRlZCBwYXRjaCBmb3IgdGhpcyBkZWZlY3QuCi0gKiAyMDA2MDgzMSAgIDE1NTQ0MSBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgU21hbGwgdHdlYWsgZm9yIHRoaXMgYnVnCi0gKiAyMDA2MTAwMyAgIDE1OTE0MiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjEyMTIgICAxNjQxNzcgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIEluY29ycmVjdCB2YWxpZGF0aW9uIGVycm9yIGNvbXBsYWluaW5nIGFib3V0IHJ1bnRpbWUgbm90IHN1cHBvcnRpbmcgYSBwcm9qZWN0IHR5cGUKLSAqIDIwMDYxMjEyICAgMTU5OTExIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBjaGFuZ2luZyBzZXJ2aWNlIGRlZmluaXRpb24gcmVzZXRzIHNvbWUgY29uZmlndXJhdGlvbiBmaWVsZHMKLSAqIDIwMDcwMjA1ICAgMTcyNjg3IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBOUEUgaW4gU2NlbmNhcmlvIERlZmF1bHRzIHByZWZlcmVuY2VzIHBhZ2UKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0czsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZVJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tb24uRGVmYXVsdGluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tb24uVmFsaWRhdGlvblV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5wbHVnaW4uV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuSU9iamVjdFNlbGVjdGlvbkxhdW5jaGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuSVBhY2thYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLlByb2plY3RTZWxlY3Rpb25EaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuV2ViU2VydmljZUNsaWVudFR5cGVXaWRnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0LklPYmplY3RTZWxlY3Rpb25XaWRnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0Lk9iamVjdFNlbGVjdGlvbk91dHB1dENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0Lk9iamVjdFNlbGVjdGlvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5PYmplY3RTZWxlY3Rpb25XaWRnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0LlRpbWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnJ1bnRpbWUuUHJvamVjdFNlbGVjdGlvbldpZGdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLlJ1bnRpbWVTZXJ2ZXJTZWxlY3Rpb25EaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuV2ViU2VydmljZUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS5wbHVnaW4uV2ViU2VydmljZUNyZWF0aW9uVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLndpZGdldHMucnVudGltZS5TZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmRhdGEuTGFiZWxzQW5kSWRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5kYXRhLlR5cGVSdW50aW1lU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5wbHVnaW4uV2ViU2VydmljZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuY29tbW9uLlVJVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2libGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJsZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJsZUNvbnRyb2xBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2libGVDb250cm9sRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJsZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlJlY3RhbmdsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2NhbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZm9ybXMuSHlwZXJsaW5rR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZm9ybXMuSHlwZXJsaW5rU2V0dGluZ3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZm9ybXMuZXZlbnRzLkh5cGVybGlua0V2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmZvcm1zLmV2ZW50cy5JSHlwZXJsaW5rTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZm9ybXMud2lkZ2V0cy5IeXBlcmxpbms7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLlBhZ2VJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLlNpbXBsZVdpZGdldERhdGFDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0RGF0YUV2ZW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZVNjZW5hcmlvOwotCi1wdWJsaWMgY2xhc3MgU2VydmVyV2l6YXJkV2lkZ2V0IGV4dGVuZHMgU2ltcGxlV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yIGltcGxlbWVudHMgUnVubmFibGUsIElQYWNrYWJsZSB7Ci0JCi0JLy9JTkZPUE9QUwotICAgIC8qIENPTlRFWFRfSUQgV1NXU0NFTjAwMDEgZm9yIHRoZSBTY2VuYXJpbyBQYWdlICovCi0JcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9XU1dTQ0VOX1BBR0UgPSAiV1NXU0NFTjAwMDEiOwotCSAvKiBDT05URVhUX0lEIFdTV1NDRU4wMDEwIGZvciB0aGUgV2ViIFNlcnZpY2UgVHlwZSBjb21ibyBib3ggb2YgdGhlIFNjZW5hcmlvIFBhZ2UgKi8KLQkgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9XU1dTQ0VOX0NPTUJPX1NFUlZJQ0VUWVBFID0gIldTV1NDRU4wMDEwIjsKLQkgLyogQ09OVEVYVF9JRCBXU1dTQ0VOMDAxNCBmb3IgdGhlIG1vbml0b3Igc2VydmljZSBjaGVja2JveCBvZiB0aGUgU2NlbmFyaW8gcGFnZSAqLwotCSBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1dTV1NDRU5fQ0hFQ0tCT1hfTU9OSVRPUl9TRVJWSUNFID0gIldTV1NDRU4wMDE0IjsKLQkgLyogQ09OVEVYVF9JRCBXU1dTQ0VOMDAxMiBmb3IgdGhlIExhdW5jaCBVRERJIGNoZWNrIGJveCBvZiB0aGUgU2NlbmFyaW8gUGFnZSAqLwotCSBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1dTV1NDRU5fQ0hFQ0tCT1hfTEFVTkNIX1dTID0gIldTV1NDRU4wMDEyIjsKLQkgLyogQ09OVEVYVF9JRCBXU1dTQ0VOMDAyMCBmb3IgdGhlIFNlcnZpY2UgSW1wbGVtZW5hdGlvbiB0ZXh0IGZpZWxkIG9mIHRoZSBTY2VuYXJpbyBQYWdlICovCi0JIHByaXZhdGUgU3RyaW5nIElORk9QT1BfV1NXU0NFTl9URVhUX1NFUlZJQ0VfSU1QTCA9ICJXU1dTQ0VOMDAyMCI7Ci0JIC8qIENPTlRFWFRfSUQgV1NXU0NFTjAwMjEgZm9yIHRoZVNlcnZpY2UgU2xpZGVyIG9mIHRoZSBTY2VuYXJpbyBQYWdlICovCi0JIHByaXZhdGUgU3RyaW5nIElORk9QT1BfV1NXU0NFTl9TQ0FMRV9TRVJWSUNFID0gIldTV1NDRU4wMDIxIjsKLQkgLyogQ09OVEVYVF9JRCBXU1dTQ0VOMDAyMiBmb3IgdGhlIFNlcnZlciBoeXBlcmxpbmsgb2YgdGhlIFNjZW5hcmlvIFBhZ2UgKi8KLQkgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9XU1dTQ0VOX0hZUEVSTElOS19TRVJWRVIgPSAiV1NXU0NFTjAwMjIiOwotCSAvKiBDT05URVhUX0lEIFdTV1NDRU4wMDIzIGZvciB0aGUgUnVudGltZSBoeXBlcmxpbmsgb2YgdGhlIFNjZW5hcmlvIFBhZ2UgKi8KLQkgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9XU1dTQ0VOX0hZUEVSTElOS19SVU5USU1FID0gIldTV1NDRU4wMDIzIjsKLQkgLyogQ09OVEVYVF9JRCBXU1dTQ0VOMDAyNCBmb3IgdGhlUHJvamVjdHMgaHlwZXJsaW5rIG9mIHRoZSBTY2VuYXJpbyBQYWdlICovCi0JIHByaXZhdGUgU3RyaW5nIElORk9QT1BfV1NXU0NFTl9IWVBFUkxJTktfUFJPSkVDVFMgID0gIldTV1NDRU4wMDI0IjsKLQkgLyogQ09OVEVYVF9JRCBXU1dTQ0VOMDAzMCBmb3IgdGhlIE92ZXJ3cml0ZSBGaWxlcyBjaGVja2JveCBvZiB0aGUgU2NlbmFyaW8gUGFnZSAqLwotCSBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1dTV1NDRU5fQ0hFQ0tCT1hfT1ZFUldSSVRFID0gIldTV1NDRU4wMDMwIjsKLQkgCi0JcHJpdmF0ZSBTY2FsZVNlbGVjdGlvbkxpc3RlbmVyIHNjYWxlU2VsZWN0aW9uTGlzdGVuZXIgPSBuZXcgU2NhbGVTZWxlY3Rpb25MaXN0ZW5lcigpOwotCXByaXZhdGUgTGlzdGVuZXIgc3RhdHVzTGlzdGVuZXJfOwotCXByaXZhdGUgTW9kaWZ5TGlzdGVuZXIgb2JqZWN0TW9kaWZ5TGlzdGVuZXJfIDsKLQlwcml2YXRlIGludCB2YWxpZGF0aW9uU3RhdGVfOwotCWJvb2xlYW4gdmFsaWRPYmplY3RTZWxlY3Rpb25fID0gdHJ1ZTsKLQotCXByaXZhdGUgSW1hZ2VSZWdpc3RyeSBpbWFnZVJlZ187Ci0JCi0JcHJpdmF0ZSBUeXBlUnVudGltZVNlcnZlciBpZHNfOwotCXByaXZhdGUgTGFiZWxzQW5kSWRzIGxhYmVsSWRzXzsKLQlwcml2YXRlIFN0cmluZyBzZXJ2aWNlUHJvamVjdE5hbWVfOwotCXByaXZhdGUgU3RyaW5nIHNlcnZpY2VFYXJQcm9qZWN0TmFtZV87Ci0JcHJpdmF0ZSBTdHJpbmcgc2VydmljZUNvbXBvbmVudFR5cGVfOwotCXByaXZhdGUgV2ViU2VydmljZXNQYXJzZXIgcGFyc2VyXzsKLQlwcml2YXRlIGJvb2xlYW4gbmVlZEVhcl87Ci0JCSAKLQlwcml2YXRlIGJvb2xlYW4gZGV2ZWxvcFNlcnZpY2VfOwotCXByaXZhdGUgYm9vbGVhbiBhc3NlbWJsZVNlcnZpY2VfOwotCXByaXZhdGUgYm9vbGVhbiBkZXBsb3lTZXJ2aWNlXzsKLQkKLQlwcml2YXRlIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIG9iamVjdFNlbGVjdGlvbl87Ci0JcHJpdmF0ZSBCb29sZWFuIHRlc3RTZXJ2aWNlXzsKLQlwcml2YXRlIEJvb2xlYW4gc3RhcnRTZXJ2aWNlXzsKLQlwcml2YXRlIEJvb2xlYW4gaW5zdGFsbFNlcnZpY2VfOwotCi0JcHJpdmF0ZSBib29sZWFuIGRpc3BsYXlQcmVmZXJlbmNlc187Ci0JcHJpdmF0ZSBib29sZWFuIHByZWZlcmVuY2VzUGFnZV87Ci0KLQlwcml2YXRlIENvbXBvc2l0ZSBncm91cENvbXBvc2l0ZV87Ci0JcHJpdmF0ZSBDb21wb3NpdGUgaENvbXBTZXJ2aWNlXzsJCi0JcHJpdmF0ZSBXZWJTZXJ2aWNlQ2xpZW50VHlwZVdpZGdldCBjbGllbnRXaWRnZXRfOwotICAgIHByaXZhdGUgTGFiZWwgc2VydmljZUxhYmVsXzsKLQlwcml2YXRlIENvbWJvIHdlYnNlcnZpY2VUeXBlXzsKLQlwcml2YXRlIFRleHQgc2VydmljZUltcGxfOwotCXByaXZhdGUgU2NhbGUgc2VydmljZVNjYWxlXzsKLQlwcml2YXRlIExhYmVsIHRvcG9sb2d5U3BvdF87Ci0JcHJpdmF0ZSBCdXR0b24gYnJvd3NlQnV0dG9uXzsKLQlwcml2YXRlIEJ1dHRvbiBwdWJsaXNoQnV0dG9uXzsKLQlwcml2YXRlIEJ1dHRvbiBtb25pdG9yQnV0dG9uXzsKLQlwcml2YXRlIEJ1dHRvbiBvdmVyd3JpdGVCdXR0b25fOwkKLQlwcml2YXRlIFNlcnZpY2VJbXBsU2VsZWN0aW9uRGlhbG9nIGJyb3dzZURpYWxvZ187Ci0JcHJpdmF0ZSBQcm9qZWN0U2VsZWN0aW9uRGlhbG9nIHByb2plY3REaWFsb2dfOwotCXByaXZhdGUgSHlwZXJsaW5rIGhMaW5rU2VydmljZVJ1bnRpbWVfOwotCXByaXZhdGUgSHlwZXJsaW5rIGhMaW5rU2VydmljZVNlcnZlcl87Ci0JcHJpdmF0ZSBIeXBlcmxpbmsgaExpbmtTZXJ2aWNlUHJvamVjdF87Ci0JcHJpdmF0ZSBIeXBlcmxpbmsgaExpbmtTZXJ2aWNlRUFSXzsKLQkJCi0JcHJpdmF0ZSBPYmplY3Qgb2JqZWN0U2VsZWN0aW9uV2lkZ2V0XzsgLy9tYXkgYmUgSU9iamVjdFNlbGVjdGlvbkxhdW5jaGFibGUgb3IgSU9iamVjdFNlbGVjdGlvbldpZGdldAotCQotCXByaXZhdGUgUmVzb3VyY2VDb250ZXh0IHJlc291cmNlQ29udGV4dF87Ci0JCi0JcHJpdmF0ZSBUaW1lciB0aW1lcl8gPSBudWxsOwotCQkKLQlwcml2YXRlIFVJVXRpbHMgdXRpbHNfID0gbmV3IFVJVXRpbHMoIm9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aSIpOwotCQotCXByaXZhdGUgYm9vbGVhbiBmb3JjZVJlZnJlc2hSdW50aW1lID0gZmFsc2U7Ci0JCi0JcHJpdmF0ZSBTdHJpbmcgR1JBUEhJQ19TRVJWSUNFXzA9Imljb25zL3NlcnZpY2VfdGVzdC5qcGciOyAvLyROT04tTkxTLU4kCi0JcHJpdmF0ZSBTdHJpbmcgR1JBUEhJQ19TRVJWSUNFXzE9Imljb25zL3NlcnZpY2VfcnVuLmpwZyI7ICAvLyROT04tTkxTLU4kCi0JcHJpdmF0ZSBTdHJpbmcgR1JBUEhJQ19TRVJWSUNFXzI9Imljb25zL3NlcnZpY2VfaW5zdGFsbC5qcGciOyAvLyROT04tTkxTLU4kCi0JcHJpdmF0ZSBTdHJpbmcgR1JBUEhJQ19TRVJWSUNFXzM9Imljb25zL3NlcnZpY2VfZGVwbG95LmpwZyI7IC8vJE5PTi1OTFMtTiQKLQlwcml2YXRlIFN0cmluZyBHUkFQSElDX1NFUlZJQ0VfND0iaWNvbnMvc2VydmljZV9hc3NlbWJsZS5qcGciOyAvLyROT04tTkxTLU4kCi0JcHJpdmF0ZSBTdHJpbmcgR1JBUEhJQ19TRVJWSUNFXzU9Imljb25zL3NlcnZpY2VfZGV2ZWxvcC5qcGciOyAvLyROT04tTkxTLU4kCi0JCQotCXByaXZhdGUgU3RyaW5nIElDT05fU0NBTEVfQkdfMD0iaWNvbnMvc2NhbGUwX2Jncm91bmQuanBnIjsgLy8kTk9OLU5MUy1OJAotCXByaXZhdGUgU3RyaW5nIElDT05fU0NBTEVfQkdfMT0iaWNvbnMvc2NhbGUxX2Jncm91bmQuanBnIjsgLy8kTk9OLU5MUy1OJAotCXByaXZhdGUgU3RyaW5nIElDT05fU0NBTEVfQkdfMj0iaWNvbnMvc2NhbGUyX2Jncm91bmQuanBnIjsgLy8kTk9OLU5MUy1OJAotCXByaXZhdGUgU3RyaW5nIElDT05fU0NBTEVfQkdfMz0iaWNvbnMvc2NhbGUzX2Jncm91bmQuanBnIjsgLy8kTk9OLU5MUy1OJAotCXByaXZhdGUgU3RyaW5nIElDT05fU0NBTEVfQkdfND0iaWNvbnMvc2NhbGU0X2Jncm91bmQuanBnIjsgLy8kTk9OLU5MUy1OJAotCXByaXZhdGUgU3RyaW5nIElDT05fU0NBTEVfQkdfNT0iaWNvbnMvc2NhbGU1X2Jncm91bmQuanBnIjsgLy8kTk9OLU5MUy1OJAotCXByaXZhdGUgU3RyaW5nIElDT05fU0NBTEVfQkdfNj0iaWNvbnMvc2NhbGU2X2Jncm91bmQuanBnIjsgLy8kTk9OLU5MUy1OJAotCi0JcHJpdmF0ZSBTdHJpbmcgU0VSVklDRV9SVU5USU1FX1BSRUZJWCA9IENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9SVU5USU1FU19MSVNUIDsgCi0gICAgcHJpdmF0ZSBTdHJpbmcgU0VSVklDRV9TRVJWRVJfUFJFRklYID0gIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9TRVJWRVJTX0xJU1Q7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgU0VSVklDRV9QUk9KRUNUX1BSRUZJWCA9IENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9TRVJWSUNFX1BST0pFQ1Q7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgU0VSVklDRV9FQVJfUFJFRklYID0gQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1NFUlZJQ0VfRUFSX1BST0pFQ1Q7Ci0gICAgCi0gICAgLyoqCi0gICAgICogQHBhcmFtIGRpc3BsYXlQcmVmZXJlbmNlcyBTZXQgdG8gdHJ1ZSBpZiBwcmVmZXJlbmNlcyBzdWNoIGFzIG92ZXJ3cml0ZSBzaG91bGQgYmUgZGlzcGxheWVkIG9uIHRoZSB3aXphcmQgcGFnZQotICAgICAqIEBwYXJhbSBwcmVmUGFnZSAgU2V0IHRvIHRydWUgaWYgdGhlIHdpZGdldCBpcyBiZWluZyB1c2VkIG9uIHRoZSBwcmVmZXJlbmNlcyBwYWdlLiAgQWx0ZXJzIHdpZGdldCBsYXlvdXQuCi0gICAgICovCi0JcHVibGljIFNlcnZlcldpemFyZFdpZGdldChib29sZWFuIGRpc3BsYXlQcmVmZXJlbmNlcywgYm9vbGVhbiBwcmVmUGFnZSkgewotCQlkaXNwbGF5UHJlZmVyZW5jZXNfID0gZGlzcGxheVByZWZlcmVuY2VzOwotCQlwcmVmZXJlbmNlc1BhZ2VfID0gcHJlZlBhZ2U7Ci0JCWluaXRJbWFnZVJlZ2lzdHJ5KCk7Ci0JCXZhbGlkYXRpb25TdGF0ZV8gPSBWYWxpZGF0aW9uVXRpbHMuVkFMSURBVEVfQUxMOwotCX0KLQkKLQlwcml2YXRlIENvbXBvc2l0ZSBzZXJ2aWNlQ29tcG9zaXRlXzsKLQkKLQkvKioKLQkgKiBSdW4gdGhpcyBTZXJ2ZXJXaXphcmRXaWRnZXQsIHdoaWNoIHZhbGlkYXRlcyB0aGUgZW50cnkgZmllbGQgdmFsdWVzLgotCSAqLwotCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCi0JCS8vIGRvIG1pbmltYWwgY2hlY2sgaGVyZSwgdGhpcyBjYWxsIHdpbGwgZGV0ZXJtaW5lIGlmIHdlIGF0IGxlYXN0Ci0JCS8vIGhhdmUgYSAidmFsaWRPYmplY3RTZWxlY3Rpb25fIgotCQljaGVja1NlcnZpY2VJbXBsVGV4dFN0YXR1cygpOwotCQkKLQkJaWYgKHZhbGlkT2JqZWN0U2VsZWN0aW9uXykKLQkJewotCQkJYm9vbGVhbiByZWZyZXNoUnVudGltZSA9IChnZXRXZWJTZXJ2aWNlU2NlbmFyaW8oKSAhPSBXZWJTZXJ2aWNlU2NlbmFyaW8uVE9QRE9XTik7IAotCQkJCi0JCQlpZiAob2JqZWN0U2VsZWN0aW9uV2lkZ2V0XyBpbnN0YW5jZW9mIElPYmplY3RTZWxlY3Rpb25MYXVuY2hhYmxlKQotCQkgICAgICAgewotCQkJCUlPYmplY3RTZWxlY3Rpb25MYXVuY2hhYmxlIGxhdW5jaGFibGUgPSAoSU9iamVjdFNlbGVjdGlvbkxhdW5jaGFibGUpb2JqZWN0U2VsZWN0aW9uV2lkZ2V0XzsKLQkJCQljYWxsT2JqZWN0VHJhbnNmb3JtYXRpb24obGF1bmNoYWJsZS5nZXRPYmplY3RTZWxlY3Rpb24oKSwgbGF1bmNoYWJsZS5nZXRQcm9qZWN0KCksIGxhdW5jaGFibGUuZ2V0Q29tcG9uZW50TmFtZSgpLCByZWZyZXNoUnVudGltZSk7CQkJCQkJCQkKLQkJICAgICAgIH0KLQkJCWVsc2UgCi0JCQl7Ci0JCQkJSU9iamVjdFNlbGVjdGlvbldpZGdldCB3aWRnZXQgPSAoSU9iamVjdFNlbGVjdGlvbldpZGdldClvYmplY3RTZWxlY3Rpb25XaWRnZXRfOwotCQkJCWNhbGxPYmplY3RUcmFuc2Zvcm1hdGlvbih3aWRnZXQuZ2V0T2JqZWN0U2VsZWN0aW9uKCksIHdpZGdldC5nZXRQcm9qZWN0KCksIHdpZGdldC5nZXRDb21wb25lbnROYW1lKCksIHJlZnJlc2hSdW50aW1lKTsKLQkJICAgIH0JCi0JCX0KLQkJZWxzZQotCQkJc2V0T2JqZWN0U2VsZWN0aW9uKG51bGwpOwotCQkKLQkJLy8gZG8gZnVsbCB2YWxpZGF0aW9uIGFmdGVyIGFsbCB0cmFuc2Zvcm1hdGlvbnMgYW5kIGNhbGN1bGF0aW9ucyBoYXZlIG9jY3VycmVkCi0JCXZhbGlkYXRpb25TdGF0ZV8gPSBWYWxpZGF0aW9uVXRpbHMuVkFMSURBVEVfQUxMOwotCQlzdGF0dXNMaXN0ZW5lcl8uaGFuZGxlRXZlbnQobnVsbCk7CQkKLQl9Ci0JCi0JLyoqCi0JICogUGFjayB0aGlzIHdpZGdldCBhbmQgdGhlIGNsaWVudC1zaWRlIHdpZGdldCBhcyB3ZWxsLiAKLQkgKi8KLQlwcml2YXRlIHZvaWQgcGFja1NlbGYoKSB7Ci0JCS8vIGRvbid0IG5lZWQgdG8gY2FsbCBwYWNrSXQoKSwgc2luY2UgY2xpZW50V2lkZ2V0XyBoYXMgYSBjYWxsYmFjayB0byBwYWNrSXQoKSBhbHJlYWR5LgotCQljbGllbnRXaWRnZXRfLnBhY2tJdCgpOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5JUGFja2FibGUjcGFja0l0KCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBwYWNrSXQoKSB7CQkKLQkJZ3JvdXBDb21wb3NpdGVfLnBhY2sodHJ1ZSk7Ci0JCXV0aWxzXy5ob3Jpem9udGFsUmVzaXplKGdyb3VwQ29tcG9zaXRlXy5nZXRTaGVsbCgpLCBncm91cENvbXBvc2l0ZV8sIFVJVXRpbHMuREVGQVVMVF9QQURESU5HKTsKLQl9Ci0JCi0JcHVibGljIFdpZGdldERhdGFFdmVudHMgYWRkQ29udHJvbHMoQ29tcG9zaXRlIHBhcmVudCwKLQkJCUxpc3RlbmVyIHN0YXR1c0xpc3RlbmVyKSB7Ci0JCQkJCi0JCXN0YXR1c0xpc3RlbmVyXyA9IHN0YXR1c0xpc3RlbmVyOwotCQl1dGlsc18uY3JlYXRlSW5mb1BvcChwYXJlbnQsIElORk9QT1BfV1NXU0NFTl9QQUdFKTsKLQkJCi0JCUNvbXBvc2l0ZSB0eXBlQ29tcG9zaXRlID0gdXRpbHNfLmNyZWF0ZUNvbXBvc2l0ZShwYXJlbnQsIDMpOwotCi0JCXdlYnNlcnZpY2VUeXBlXyA9IHV0aWxzXy5jcmVhdGVDb21ibyh0eXBlQ29tcG9zaXRlLAotCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9XRUJTRVJWSUNFVFlQRSwKLQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QV1BSX0NPTUJPX1RZUEUsCi0JCQkJSU5GT1BPUF9XU1dTQ0VOX0NPTUJPX1NFUlZJQ0VUWVBFLCBTV1QuU0lOR0xFIHwgU1dULkJPUkRFUgotCQkJCQkJfCBTV1QuUkVBRF9PTkxZKTsKLQkJR3JpZERhdGEgZ2RhdGExID0gKEdyaWREYXRhKSB3ZWJzZXJ2aWNlVHlwZV8uZ2V0TGF5b3V0RGF0YSgpOwotCQlnZGF0YTEuaG9yaXpvbnRhbFNwYW4gPSAyOwotCQl3ZWJzZXJ2aWNlVHlwZV8uc2V0TGF5b3V0RGF0YShnZGF0YTEpOwotCQkKLQkJd2Vic2VydmljZVR5cGVfLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpewotCQkJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHt9Ci0JCQkKLQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLQkJCQlTdHJpbmcgb2xkVHlwZUlkID0gaWRzXy5nZXRUeXBlSWQoKTsKLQkJCQlpbnQgY3VycmVudFNlbGVjdGlvbklkeCA9IHdlYnNlcnZpY2VUeXBlXy5nZXRTZWxlY3Rpb25JbmRleCgpOwotCQkJCVN0cmluZyBjdXJyZW50VHlwZUlkID0gbGFiZWxJZHNfLmdldElkc18oKVtjdXJyZW50U2VsZWN0aW9uSWR4XTsKLQkJCQlpZiAoIW9sZFR5cGVJZC5lcXVhbHMoY3VycmVudFR5cGVJZCkpIHsJCQkJCQotCQkJCQlpZHNfLnNldFR5cGVJZChjdXJyZW50VHlwZUlkKTsKLQkJCQkJCi0JCQkJCS8vIGRvbid0IG5lZWQgdG8gcmVmcmVzaCBydW50aW1lIG9yIHZhbGlkYXRlIGZpZWxkcyBpZiB3ZSBhcmUgb24gdGhlIHByZWZlcmVuY2UgcGFnZSwganVzdCByZXR1cm4KLQkJCQkJaWYgKHByZWZlcmVuY2VzUGFnZV8pCi0JCQkJCQlyZXR1cm47Ci0JCQkJCQkKLQkJCQkJaW50IG9sZFNjZW5hcmlvID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2NlbmFyaW9Gcm9tVHlwZUlkKG9sZFR5cGVJZCk7Ci0JCQkJCWludCBjdXJyZW50U2NlbmFyaW8gPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTY2VuYXJpb0Zyb21UeXBlSWQoY3VycmVudFR5cGVJZCk7Ci0KLQkJCSAgICAgIG9iamVjdFNlbGVjdGlvbldpZGdldF8gPSBnZXRTZWxlY3Rpb25XaWRnZXQoKTsKLQkJCQkJLy8gY2hhbmdlIHRoZSBsYWJlbCBmb3IgdGhlIHNlcnZpY2UKLQkJCQkJLy8gaW1wbGVtZW50YXRpb24vZGVmaW5pdGlvbiBiYXNlZCBvbiB0aGUgd2ViIHNlcnZpY2UgdHlwZQotCQkJCQloYW5kbGVUeXBlQ2hhbmdlKCk7CQkJCQkKLQotCQkJCQkvLyBBZnRlciBidWcgMTU5OTExLCB3ZSB3aWxsIG5vdCByZWZyZXNoIHRoZSBydW50aW1lIGluIFRPUERPV04gc2NlbmFyaW8gdW5sZXNzIHdlIGFic29sdXRlbHkKLQkJCQkJLy8gaGF2ZSB0by4gIFRoZXJlZm9yZSwgaWYgd2UgYXJlIHN3aXRjaGluZyBmcm9tIGFub3RoZXIgc2NlbmFyaW8gdHlwZSwgd2Ugc2hvdWxkIGNoZWNrIGlmIHRoZSAKLQkJCQkJLy8gY3VycmVudCBzZWxlY3Rpb25zIGFyZSB2YWxpZCBmb3IgdGhpcyBUT1BET1dOIHNjZW5hcmlvLCBpZiBub3QsIHRyeSB0byBwaWNrIGEgbW9yZSBzdWl0YWJsZSAKLQkJCQkJLy8gcnVudGltZS4KLQkJCQkJaWYgKGN1cnJlbnRTY2VuYXJpbyA9PSBXZWJTZXJ2aWNlU2NlbmFyaW8uVE9QRE9XTikgewotCQkJCQkJdmFsaWRhdGlvblN0YXRlXyA9IFZhbGlkYXRpb25VdGlscy5WQUxJREFURV9TRVJWRVJfUlVOVElNRV9DSEFOR0VTOwotCQkJCQkJCi0JCQkJCQkvLyB0aGlzIHdpbGwgZm9yY2UgYSByZWZyZXNoIHRoZSBuZXh0IHRpbWUgdGhlIHdzZGwgaXMgY2hhbmdlZAotCQkJCQkJZm9yY2VSZWZyZXNoUnVudGltZSA9ICFjaGVja0Vycm9yU3RhdHVzKCkuaXNPSygpOwotCQkJCQl9Ci0JCQkJCQotCQkJCQkvL2lmIHRoZSB3ZWIgc2VydmljZSB0eXBlIGNoYW5nZSBpcyBmcm9tIG9uZSB0b3AtZG93biB0eXBlIHRvIGFub3RoZXIKLQkJCQkJLy90b3AtZG93biB0eXBlIGxlYXZlIHRoZSBvYmplY3Qgc2VsZWN0aW9uIGZpZWxkIGluIHRhY3QgYW5kIHJlZnJlc2gKLQkJCQkJLy90aGUgc2VydmVyL3J1bnRpbWUgcHJvamVjdCBkZWZhdWx0aW5nLgotCQkJCQkvL090aGVyd2lzZSBjbGVhciB0aGUgb2JqZWN0IHNlbGVjdGlvbiBmaWVsZCBzaW5jZSBpdCdzIHZhbHVlIGlzIG5vdCB2YWxpZCBhbnltb3JlCi0JCQkJCWlmIChvbGRTY2VuYXJpbz09V2ViU2VydmljZVNjZW5hcmlvLlRPUERPV04gJiYgY3VycmVudFNjZW5hcmlvPT1XZWJTZXJ2aWNlU2NlbmFyaW8uVE9QRE9XTikJCQkJCQkKLQkJCQkJewotCQkJCQkJLy8gaWYgc3dpdGNoaW5nIGZyb20gb25lIFRPUERPV04gc2NlbmFyaW8gdG8gYW5vdGhlciBUT1BET1dOIHNjZW5hcmlvIGFuZAotCQkJCQkJLy8gd2UndmUgZGV0ZXJtaW5lZCB0aGF0IHRoZSBjdXJyZW50IHJ1bnRpbWUgc2VsZWN0aW9uIGlzIG5vdCBzdWl0YWJsZSwgd2UgCi0JCQkJCQkvLyBjYW4gcmVmcmVzaCB0aGUgcnVudGltZSBub3cgKGRvbid0IG5lZWQgdG8gd2FpdCBmb3IgdGhlIG5leHQgdGltZSB0aGUKLQkJCQkJCS8vIHdzZGwgaXMgY2hhbmdlZCkuCi0JCQkJCQlpZiAoZm9yY2VSZWZyZXNoUnVudGltZSkgewotCQkJCQkJCXJlZnJlc2hTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uKCk7Ci0JCQkJCQkJZm9yY2VSZWZyZXNoUnVudGltZSA9IGZhbHNlOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCWVsc2UKLQkJCQkJewotCQkJCQkJLy9jbGVhciB0aGUgb2JqZWN0IHNlbGVjdGlvbiBmaWVsZAotCQkJCQkJLy8gc2VydmljZUltcGwgbWF5IGJlIG51bGwgaWYgb24gdGhlIHByZWZlcmVuY2VzIHBhZ2UKLQkJCQkJCWlmIChzZXJ2aWNlSW1wbF8gIT0gbnVsbCkKLQkJCQkJCXsKLQkJCQkJCQlzZXJ2aWNlSW1wbF8ucmVtb3ZlTW9kaWZ5TGlzdGVuZXIob2JqZWN0TW9kaWZ5TGlzdGVuZXJfKTsKLQkJCQkJCQlzZXJ2aWNlSW1wbF8uc2V0VGV4dCgiIik7Ci0JCQkJCQkJc2V0T2JqZWN0U2VsZWN0aW9uKG51bGwpOwotCQkJCQkJCXNlcnZpY2VJbXBsXy5hZGRNb2RpZnlMaXN0ZW5lcihvYmplY3RNb2RpZnlMaXN0ZW5lcl8pOwotCQkJCQkJfQkJCQkJCSAgIAotCQkJCQl9CQkJCQkKLQkJCSAgIHZhbGlkYXRpb25TdGF0ZV8gPSBWYWxpZGF0aW9uVXRpbHMuVkFMSURBVEVfQUxMOwotCQkJICAgc3RhdHVzTGlzdGVuZXJfLmhhbmRsZUV2ZW50KG51bGwpOwkJCSAgIAotCQkJCQkKLQkJCX0KLQkJICB9Ci0JCQkKLQkJfSk7Ci0JCQotCQkvLyBDcmVhdGUgdGV4dCBmaWVsZCBhbmQgYnJvd3NlIGZvciBvYmplY3Qgc2VsZWN0aW9uIGlmIG5vdCBvbiBwcmVmZXJlbmNlcyBwYWdlCi0JCWlmICghcHJlZmVyZW5jZXNQYWdlXykKLQkJewotCQkJLy90ZXh0IG9mIHRoaXMgbGFiZWwgaXMgYmFzZWQgb24gdGhlIHdlYiBzZXJ2aWNlIHR5cGUgc2VsZWN0ZWQgaW4gd2Vic2VydmljZVR5cGVfIGNvbWJvCi0JCQlzZXJ2aWNlTGFiZWxfID0gbmV3IExhYmVsKCB0eXBlQ29tcG9zaXRlLCBTV1QuV1JBUCk7Ci0JCQlzZXJ2aWNlTGFiZWxfLnNldFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1dFQlNFUlZJQ0VJTVBMKTsKLQkJCXNlcnZpY2VMYWJlbF8uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9URVhUX0lNUEwpOwotCi0JCQlzZXJ2aWNlSW1wbF8gPSBuZXcgVGV4dCh0eXBlQ29tcG9zaXRlLCBTV1QuTEVGVCB8IFNXVC5CT1JERVIgKTsKLQkJCUdyaWREYXRhIGdyaWRkYXRhID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCB8IEdyaWREYXRhLkdSQUJfSE9SSVpPTlRBTCk7CQkgICAgCi0JCQlzZXJ2aWNlSW1wbF8uc2V0TGF5b3V0RGF0YSggZ3JpZGRhdGEgKTsKLQkJCXNlcnZpY2VJbXBsXy5zZXRUb29sVGlwVGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX1RFWFRfSU1QTCk7Ci0JCQl1dGlsc18uY3JlYXRlSW5mb1BvcChzZXJ2aWNlSW1wbF8sIElORk9QT1BfV1NXU0NFTl9URVhUX1NFUlZJQ0VfSU1QTCk7Ci0JCQkKLQkJCW9iamVjdE1vZGlmeUxpc3RlbmVyXyA9IG5ldyBNb2RpZnlMaXN0ZW5lcigpewotCQkJCXB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkgewotCQkJCSAgICBpZiAoc2VydmljZUltcGxfLmdldFRleHQoKS5pbmRleE9mKCc6JykgPiAwKSB7Ci0JCQkJICAgICAgICB0aW1lcl8gPSBUaW1lci5uZXdJbnN0YW5jZSh0aW1lcl8sIERpc3BsYXkuZ2V0Q3VycmVudCgpLCBTZXJ2ZXJXaXphcmRXaWRnZXQudGhpcyk7Ci0JCQkJICAgICAgICB0aW1lcl8uc3RhcnRUaW1lcigpOwotCQkJCSAgICB9Ci0JCQkJICAgIGVsc2UKLQkJCQkgICAgICAgIHJ1bigpOwotCQkJCX0KLQkJCX07Ci0JCQkKLQkJCXNlcnZpY2VJbXBsXy5hZGRNb2RpZnlMaXN0ZW5lcihvYmplY3RNb2RpZnlMaXN0ZW5lcl8pOwotCi0JCQlicm93c2VCdXR0b25fID0gdXRpbHNfLmNyZWF0ZVB1c2hCdXR0b24odHlwZUNvbXBvc2l0ZSwKLQkJCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkJVVFRPTl9CUk9XU0UsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fQlVUVE9OX0JST1dTRV9JTVBMLCBudWxsKTsKLQotCQkJSVdvcmtiZW5jaCB3b3JrYmVuY2ggPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpOwotCQkJYnJvd3NlRGlhbG9nXyA9IG5ldyBTZXJ2aWNlSW1wbFNlbGVjdGlvbkRpYWxvZyh3b3JrYmVuY2guZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0U2hlbGwoKSwgCi0JCQkJCW5ldyBQYWdlSW5mbyhDb25zdW1wdGlvblVJTWVzc2FnZXMuRElBTE9HX1RJVElMRV9TRVJWSUNFX0lNUExfU0VMRUNUSU9OLCAiIiwgCi0JCQkJCQkJbmV3IFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSgpCi0JCQkJCXsJCi0JCQkJCQlwdWJsaWMgV2lkZ2V0Q29udHJpYnV0b3IgY3JlYXRlKCkKLQkJCQkJCXsJICAJCQkJCQkgCi0JCQkJCQkJcmV0dXJuIG5ldyBPYmplY3RTZWxlY3Rpb25XaWRnZXQoKTsKLQkJCQkJCX0KLQkJCQkJfSkpOwkJCi0JCQlicm93c2VCdXR0b25fLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZXJ2aWNlSW1wbEJyb3dzZUxpc3RlbmVyKCkpOwotCQl9Ci0JCS8vIFNlcnZpY2UgTGlmZWN5Y2xlIHNlY3Rpb24gLSBzY2FsZXMgZm9yIHNlcnZpY2UgJiBjbGllbnQsIGdyYXBoaWMKLQkJCi0JCWdyb3VwQ29tcG9zaXRlXyA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7Ci0JCUdyaWRMYXlvdXQgZ2NsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotCQlnY2xheW91dC5udW1Db2x1bW5zID0gMjsKLQkJZ2NsYXlvdXQuaG9yaXpvbnRhbFNwYWNpbmc9MDsJCQotCQlnY2xheW91dC5tYXJnaW5IZWlnaHQ9MDsJCQotCQlnY2xheW91dC5tYXJnaW5Cb3R0b209NTsKLQkJZ3JvdXBDb21wb3NpdGVfLnNldExheW91dCggZ2NsYXlvdXQgKTsKLQkgICAgR3JpZERhdGEgZ2NHcmlkRGF0YSA9IG5ldyBHcmlkRGF0YShTV1QuQkVHSU5OSU5HLCBTV1QuQkVHSU5OSU5HLCB0cnVlLCB0cnVlKTsKLQkgICAgZ3JvdXBDb21wb3NpdGVfLnNldExheW91dERhdGEoZ2NHcmlkRGF0YSk7CQkKLQkgICAgCi0JICAgIGdyb3VwQ29tcG9zaXRlXy5hZGRDb250cm9sTGlzdGVuZXIobmV3IENvbnRyb2xMaXN0ZW5lcigpCi0JCXsKLQkJCXB1YmxpYyB2b2lkIGNvbnRyb2xNb3ZlZChDb250cm9sRXZlbnQgZSkgewotCQkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQkJCQkKLQkJCX0KLQkJCXB1YmxpYyB2b2lkIGNvbnRyb2xSZXNpemVkKENvbnRyb2xFdmVudCBlKSB7Ci0JCQkJZ3JvdXBDb21wb3NpdGVfLnBhY2sodHJ1ZSk7CQkJCQotCQkJfQotCQl9KTsKLQkgICAgCi0JCXNlcnZpY2VDb21wb3NpdGVfID0gIG5ldyBDb21wb3NpdGUoZ3JvdXBDb21wb3NpdGVfLCBTV1QuTk9ORSk7Ci0JCUdyaWRMYXlvdXQgZ3JpZGxheW91dCAgID0gbmV3IEdyaWRMYXlvdXQoKTsKLQkgICAgZ3JpZGxheW91dC5udW1Db2x1bW5zICAgPSAyOwotCSAgICBncmlkbGF5b3V0Lmhvcml6b250YWxTcGFjaW5nPTA7Ci0JICAgIGdyaWRsYXlvdXQubWFyZ2luSGVpZ2h0PTA7Ci0JICAgIHNlcnZpY2VDb21wb3NpdGVfLnNldExheW91dCggZ3JpZGxheW91dCApOwotCSAgICBHcmlkRGF0YSBzY0dyaWREYXRhID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCk7Ci0JICAgIHNlcnZpY2VDb21wb3NpdGVfLnNldExheW91dERhdGEoc2NHcmlkRGF0YSk7ICAgIAotCSAgICAKLQkJc2VydmljZUNvbXBvc2l0ZV8uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9TRVJWSUNFKTsKLQkKLQkJCi0JCXNlcnZpY2VTY2FsZV8gPSBuZXcgU2NhbGUoc2VydmljZUNvbXBvc2l0ZV8sIFNXVC5WRVJUSUNBTCB8IFNXVC5CT1JERVIpOwotCSAgICB1dGlsc18uY3JlYXRlSW5mb1BvcChzZXJ2aWNlU2NhbGVfLCBJTkZPUE9QX1dTV1NDRU5fU0NBTEVfU0VSVklDRSk7Ci0JCXNlcnZpY2VTY2FsZV8uc2V0TWluaW11bSgwKTsKLQkJc2VydmljZVNjYWxlXy5zZXRNYXhpbXVtKDYpOwotCQlzZXJ2aWNlU2NhbGVfLnNldEluY3JlbWVudCgxKTsKLQkJc2VydmljZVNjYWxlXy5hZGRTZWxlY3Rpb25MaXN0ZW5lcihzY2FsZVNlbGVjdGlvbkxpc3RlbmVyKTsKLQkJc2VydmljZVNjYWxlXy5zZXRTZWxlY3Rpb24oZ2V0U2VydmljZUdlbmVyYXRpb24oKSk7Ci0JCXNlcnZpY2VTY2FsZV8uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9TRVJWSUNFKTsKLQkJCi0JCUFjY2Vzc2libGUgYWNjZXNzaWJsZVNjYWxlID0gc2VydmljZVNjYWxlXy5nZXRBY2Nlc3NpYmxlKCk7Ci0JCWFjY2Vzc2libGVTY2FsZS5hZGRBY2Nlc3NpYmxlTGlzdGVuZXIobmV3IEFjY2Vzc2libGVBZGFwdGVyKCl7Ci0JCQkvLwlyZXR1cm4gYSBzdHJpbmcgdGhhdCBkZXNjcmliZXMgd2hhdCB0byBkbyB3aXRoIHRoZSBzbGlkZXIKLQkJCS8vICB0aGlzIGlzIHJlYWQgYnkgdGhlIHNjcmVlbiByZWFkZXIgd2hlbiB0aGUgc2xpZGVyIGZpcnN0IGdldHMgZm9jdXMKLQkJCXB1YmxpYyB2b2lkIGdldE5hbWUoQWNjZXNzaWJsZUV2ZW50IGUpIHsKLQkJCQllLnJlc3VsdCA9IENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fU0NBTEVfU0VSVklDRTsJCQkKLQkJCX0JCQkKLQkJfSk7Ci0JCWFjY2Vzc2libGVTY2FsZS5hZGRBY2Nlc3NpYmxlQ29udHJvbExpc3RlbmVyKG5ldyBBY2Nlc3NpYmxlQ29udHJvbEFkYXB0ZXIoKXsKLQkJCS8vIHJldHVybiBhIG1lYW5pbmdmdWwgc3RyaW5nIHdoZW4gdGhlIHNjcmVlbiByZWFkZXIKLQkJCS8vIGF0dGVtcHRzIHRvIGdldCB0aGUgdmFsdWUgZnJvbSB0aGUgc2VydmljZSBzY2FsZQotCQkJcHVibGljIHZvaWQgZ2V0VmFsdWUoQWNjZXNzaWJsZUNvbnRyb2xFdmVudCBlKSB7Ci0JCQkJaW50IHNlbGVjdGlvbiA9IHNlcnZpY2VTY2FsZV8uZ2V0U2VsZWN0aW9uKCk7Ci0JCQkJc3dpdGNoIChzZWxlY3Rpb24pIHsKLQkJCQljYXNlIDA6Ci0JCQkJCWUucmVzdWx0ID0gQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9URVNUOwotCQkJCQlicmVhazsKLQkJCQljYXNlIDE6Ci0JCQkJCWUucmVzdWx0ID0gQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9SVU47Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgMjoKLQkJCQkJZS5yZXN1bHQgPSBDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX0lOU1RBTEw7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgMzoKLQkJCQkJZS5yZXN1bHQgPSBDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX0RFUExPWTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSA0OgotCQkJCQllLnJlc3VsdCA9IENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fU0NBTEVfQVNTRU1CTEU7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgNToJCQkJCQotCQkJCWNhc2UgNjoKLQkJCQkJZS5yZXN1bHQgPSBDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX0RFVkVMT1A7Ci0JCQkJCWJyZWFrOwotCQkJCWRlZmF1bHQ6Ci0JCQkJCWJyZWFrOwotCQkJCX0JCQkJCQkJCQotCQkJfQotCQl9KTsJCi0JCQotCQlHcmlkRGF0YSBsYXlvdXREYXRhMSA9IG5ldyBHcmlkRGF0YSgpOwotCQlsYXlvdXREYXRhMS5ob3Jpem9udGFsQWxpZ25tZW50PVNXVC5DRU5URVI7Ci0JCWxheW91dERhdGExLnZlcnRpY2FsQWxpZ25tZW50ID0gU1dULkJFR0lOTklORzsKLQkJUmVjdGFuZ2xlIHNjYWxlUiA9IChpbWFnZVJlZ18uZ2V0KElDT05fU0NBTEVfQkdfMCkpLmdldEJvdW5kcygpOwotCQlsYXlvdXREYXRhMS5oZWlnaHRIaW50PXNjYWxlUi5oZWlnaHQ7Ci0JCWxheW91dERhdGExLndpZHRoSGludD1zY2FsZVIud2lkdGgrMTsKLQkJc2VydmljZVNjYWxlXy5zZXRMYXlvdXREYXRhKGxheW91dERhdGExKTsJCQotCQkKLQkJdG9wb2xvZ3lTcG90XyA9IG5ldyBMYWJlbChzZXJ2aWNlQ29tcG9zaXRlXywgU1dULkJPUkRFUiB8IFNXVC5UT1AgKTsKLQkJdG9wb2xvZ3lTcG90Xy5zZXRCYWNrZ3JvdW5kKERpc3BsYXkuZ2V0Q3VycmVudCgpLmdldFN5c3RlbUNvbG9yKFNXVC5DT0xPUl9XSElURSkpOwotCQl0b3BvbG9neVNwb3RfLnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fU0NBTEVfU0VSVklDRSk7Ci0JCQotCQlHcmlkRGF0YSBsYXlvdXREYXRhMiA9IG5ldyBHcmlkRGF0YSgpOwkJCi0JCWxheW91dERhdGEyLmhvcml6b250YWxBbGlnbm1lbnQ9U1dULkJFR0lOTklORzsJCQkJCi0JCWxheW91dERhdGEyLnZlcnRpY2FsQWxpZ25tZW50ID0gU1dULkJFR0lOTklORzsKLQkJUmVjdGFuZ2xlIHRvcFIgPSAoaW1hZ2VSZWdfLmdldChHUkFQSElDX1NFUlZJQ0VfMCkpLmdldEJvdW5kcygpOwotCQlsYXlvdXREYXRhMi5oZWlnaHRIaW50PXRvcFIuaGVpZ2h0OwotCQlsYXlvdXREYXRhMi53aWR0aEhpbnQ9dG9wUi53aWR0aDsKLQkJdG9wb2xvZ3lTcG90Xy5zZXRMYXlvdXREYXRhKGxheW91dERhdGEyKTsJCQotCQkJCQotCQlzZXRHcmFwaGljcyhnZXRTZXJ2aWNlR2VuZXJhdGlvbigpKTsKLQkJCi0JCWhDb21wU2VydmljZV8gPSB1dGlsc18uY3JlYXRlQ29tcG9zaXRlKGdyb3VwQ29tcG9zaXRlXywgMSk7Ci0JCQotCQlMYWJlbCBzZXJ2aWNlRGV0YWlsc0xhYmVsID0gbmV3IExhYmVsKGhDb21wU2VydmljZV8sIFNXVC5OT05FKTsKLQkJc2VydmljZURldGFpbHNMYWJlbC5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9TVU1NQVJZKTsKLQkJCi0JCWhMaW5rU2VydmljZVNlcnZlcl89IG5ldyBIeXBlcmxpbmsoaENvbXBTZXJ2aWNlXywgU1dULk5VTEwpOwotCQl1dGlsc18uY3JlYXRlSW5mb1BvcChoTGlua1NlcnZpY2VTZXJ2ZXJfLCBJTkZPUE9QX1dTV1NDRU5fSFlQRVJMSU5LX1NFUlZFUik7Ci0JCWhMaW5rU2VydmljZVNlcnZlcl8uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfUFdSU19URVhUX1NFUlZFUik7Ci0JCWhMaW5rU2VydmljZVNlcnZlcl8uYWRkSHlwZXJsaW5rTGlzdGVuZXIobmV3IElIeXBlcmxpbmtMaXN0ZW5lcigpewotCQkJcHVibGljIHZvaWQgbGlua0FjdGl2YXRlZChIeXBlcmxpbmtFdmVudCBlKXsJCQkJCi0JCQkJbGF1bmNoUnVudGltZVNlbGVjdGlvbkRpYWxvZyhmYWxzZSwgdHJ1ZSk7CQkJCQotCQkJfQotCQkJcHVibGljIHZvaWQgbGlua0VudGVyZWQoSHlwZXJsaW5rRXZlbnQgZSl7fQotCQkJcHVibGljIHZvaWQgbGlua0V4aXRlZChIeXBlcmxpbmtFdmVudCBlKXt9CQkJCi0JCX0pOwotCi0JCWhMaW5rU2VydmljZVJ1bnRpbWVfID0gbmV3IEh5cGVybGluayhoQ29tcFNlcnZpY2VfLCBTV1QuTlVMTCk7Ci0JCXV0aWxzXy5jcmVhdGVJbmZvUG9wKGhMaW5rU2VydmljZVJ1bnRpbWVfLCBJTkZPUE9QX1dTV1NDRU5fSFlQRVJMSU5LX1JVTlRJTUUpOwotCQloTGlua1NlcnZpY2VSdW50aW1lXy5zZXRUb29sVGlwVGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QV1JTX1RFWFRfUlVOVElNRSk7Ci0JCWhMaW5rU2VydmljZVJ1bnRpbWVfLmFkZEh5cGVybGlua0xpc3RlbmVyKG5ldyBJSHlwZXJsaW5rTGlzdGVuZXIoKXsKLQkJCXB1YmxpYyB2b2lkIGxpbmtBY3RpdmF0ZWQoSHlwZXJsaW5rRXZlbnQgZSl7Ci0JCQkJCQkJCWxhdW5jaFJ1bnRpbWVTZWxlY3Rpb25EaWFsb2coZmFsc2UpOwotCQkJfQotCQkJcHVibGljIHZvaWQgbGlua0VudGVyZWQoSHlwZXJsaW5rRXZlbnQgZSl7fQotCQkJcHVibGljIHZvaWQgbGlua0V4aXRlZChIeXBlcmxpbmtFdmVudCBlKXt9CQkJCi0JCX0pOwotCQkKLQkJSVdvcmtiZW5jaCB3b3JrYmVuY2ggPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpOwotCQlwcm9qZWN0RGlhbG9nXyA9IG5ldyBQcm9qZWN0U2VsZWN0aW9uRGlhbG9nKHdvcmtiZW5jaC5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRTaGVsbCgpLCAKLQkJCQluZXcgUGFnZUluZm8oQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkRJQUxPR19USVRJTEVfU0VSVklDRV9QUk9KRUNUX1NFVFRJTkdTLCAiIiwgCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5KCkKLSAgCQkJCQkJewkKLSAgCQkJCQkJCXB1YmxpYyBXaWRnZXRDb250cmlidXRvciBjcmVhdGUoKQotICAJCQkJCQkJewkgIAkJCQkJCSAKLSAgCQkJCQkJCSAgIHJldHVybiBuZXcgUHJvamVjdFNlbGVjdGlvbldpZGdldCgpOwotICAJCQkJCQkJfQotICAJCQkJCQl9KSk7Ci0JCQotCQloTGlua1NlcnZpY2VQcm9qZWN0Xz0gbmV3IEh5cGVybGluayhoQ29tcFNlcnZpY2VfLCBTV1QuTlVMTCk7Ci0JCXV0aWxzXy5jcmVhdGVJbmZvUG9wKGhMaW5rU2VydmljZVJ1bnRpbWVfLCBJTkZPUE9QX1dTV1NDRU5fSFlQRVJMSU5LX1BST0pFQ1RTKTsKLQkJaExpbmtTZXJ2aWNlUHJvamVjdF8uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9TRVJWSUNFUFJPSkVDVF9MSU5LKTsKLQkJaExpbmtTZXJ2aWNlUHJvamVjdF8uYWRkSHlwZXJsaW5rTGlzdGVuZXIobmV3IElIeXBlcmxpbmtMaXN0ZW5lcigpewotCQkJcHVibGljIHZvaWQgbGlua0FjdGl2YXRlZChIeXBlcmxpbmtFdmVudCBlKXsKLQkJCQlsYXVuY2hQcm9qZWN0RGlhbG9nKCk7CQkJCQotCQkJfQotCQkJcHVibGljIHZvaWQgbGlua0VudGVyZWQoSHlwZXJsaW5rRXZlbnQgZSl7fQotCQkJcHVibGljIHZvaWQgbGlua0V4aXRlZChIeXBlcmxpbmtFdmVudCBlKXt9CQkJCi0JCX0pOwotCQkKLQkJaExpbmtTZXJ2aWNlRUFSXz0gbmV3IEh5cGVybGluayhoQ29tcFNlcnZpY2VfLCBTV1QuTlVMTCk7Ci0JCXV0aWxzXy5jcmVhdGVJbmZvUG9wKGhMaW5rU2VydmljZVJ1bnRpbWVfLCBJTkZPUE9QX1dTV1NDRU5fSFlQRVJMSU5LX1BST0pFQ1RTKTsKLQkJaExpbmtTZXJ2aWNlRUFSXy5zZXRUb29sVGlwVGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX1NFUlZJQ0VQUk9KRUNUX0xJTkspOwotCQloTGlua1NlcnZpY2VFQVJfLmFkZEh5cGVybGlua0xpc3RlbmVyKG5ldyBJSHlwZXJsaW5rTGlzdGVuZXIoKXsKLQkJCXB1YmxpYyB2b2lkIGxpbmtBY3RpdmF0ZWQoSHlwZXJsaW5rRXZlbnQgZSl7Ci0JCQkJbGF1bmNoUHJvamVjdERpYWxvZygpOwkJCQotCQkJfQotCQkJcHVibGljIHZvaWQgbGlua0VudGVyZWQoSHlwZXJsaW5rRXZlbnQgZSl7fQotCQkJcHVibGljIHZvaWQgbGlua0V4aXRlZChIeXBlcmxpbmtFdmVudCBlKXt9CQkJCi0JCX0pOwkJCi0KLQkJaExpbmtTZXJ2aWNlU2VydmVyXy5zZXRUZXh0KFNFUlZJQ0VfU0VSVkVSX1BSRUZJWCk7IAotCQloTGlua1NlcnZpY2VSdW50aW1lXy5zZXRUZXh0KFNFUlZJQ0VfUlVOVElNRV9QUkVGSVgpOwotCQloTGlua1NlcnZpY2VQcm9qZWN0Xy5zZXRUZXh0KFNFUlZJQ0VfUFJPSkVDVF9QUkVGSVgpOwotCQloTGlua1NlcnZpY2VFQVJfLnNldFRleHQoU0VSVklDRV9FQVJfUFJFRklYKTsKLQkJCi0JCUh5cGVybGlua0dyb3VwIHNlcnZlclJ1bnRpbWVHcm91cCA9IG5ldyBIeXBlcmxpbmtHcm91cChEaXNwbGF5LmdldEN1cnJlbnQoKSk7Ci0JCQotCQlzZXJ2ZXJSdW50aW1lR3JvdXAuYWRkKGhMaW5rU2VydmljZVNlcnZlcl8pOwotCQlzZXJ2ZXJSdW50aW1lR3JvdXAuYWRkKGhMaW5rU2VydmljZVJ1bnRpbWVfKTsKLQkJc2VydmVyUnVudGltZUdyb3VwLmFkZChoTGlua1NlcnZpY2VQcm9qZWN0Xyk7Ci0JCXNlcnZlclJ1bnRpbWVHcm91cC5hZGQoaExpbmtTZXJ2aWNlRUFSXyk7Ci0JCXNlcnZlclJ1bnRpbWVHcm91cC5zZXRIeXBlcmxpbmtVbmRlcmxpbmVNb2RlKEh5cGVybGlua1NldHRpbmdzLlVOREVSTElORV9BTFdBWVMpOwotICAgIAotCQl1dGlsc18uY3JlYXRlSG9yaXpvbnRhbFNlcGFyYXRvcihwYXJlbnQsIDEpOwkJCi0JCQotCQkvLyBBZGQgY2xpZW50IHdpZGdldHMuLi4KLQkJY2xpZW50V2lkZ2V0XyA9IG5ldyBXZWJTZXJ2aWNlQ2xpZW50VHlwZVdpZGdldChmYWxzZSk7Ci0JICAgIGNsaWVudFdpZGdldF8uYWRkQ29udHJvbHMocGFyZW50LCBzdGF0dXNMaXN0ZW5lciApOwotCSAgICBjbGllbnRXaWRnZXRfLnNldFBhY2thYmxlKHRoaXMpOwotCSAgICBjbGllbnRXaWRnZXRfLmVuYWJsZUNsaWVudFNsaWRlcihzZXJ2aWNlU2NhbGVfLmdldFNlbGVjdGlvbigpPD1TY2VuYXJpb0NvbnRleHQuV1NfU1RBUlQpOwotCQkKLQkJLy8gQWR2YW5jZWQgYnV0dG9ucyBzZWN0aW9uCi0JCXV0aWxzXy5jcmVhdGVIb3Jpem9udGFsU2VwYXJhdG9yKHBhcmVudCwgMyk7Ci0JCQotCQlDb21wb3NpdGUgYWR2YW5jZWRCdXR0b25QYW5lbCA9IHV0aWxzXy5jcmVhdGVDb21wb3NpdGUocGFyZW50LCAxKTsKLQkJCi0JCXB1Ymxpc2hCdXR0b25fID0gdXRpbHNfLmNyZWF0ZUNoZWNrYm94KGFkdmFuY2VkQnV0dG9uUGFuZWwsCi0JCQkJQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkJVVFRPTl9XU1dTQ0VOX1BVQkxJU0gsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BXUFJfQ0hFQ0tCT1hfTEFVTkNIX1dTLCBJTkZPUE9QX1dTV1NDRU5fQ0hFQ0tCT1hfTEFVTkNIX1dTKTsJCQotCQltb25pdG9yQnV0dG9uXyA9IHV0aWxzXy5jcmVhdGVDaGVja2JveChhZHZhbmNlZEJ1dHRvblBhbmVsLAotCQkJCUNvbnN1bXB0aW9uVUlNZXNzYWdlcy5DSEVDS0JPWF9NT05JVE9SX1dFQlNFUlZJQ0UsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1BXUFJfQ0hFQ0tCT1hfTU9OSVRPUl9TRVJWSUNFLCBJTkZPUE9QX1dTV1NDRU5fQ0hFQ0tCT1hfTU9OSVRPUl9TRVJWSUNFKTsKLQotCQlpZiAoZGlzcGxheVByZWZlcmVuY2VzXyAmJiBnZXRSZXNvdXJjZUNvbnRleHQoKS5pc092ZXJ3cml0ZUZpbGVzRW5hYmxlZCgpKSB7Ci0JCQl1dGlsc18uY3JlYXRlSG9yaXpvbnRhbFNlcGFyYXRvcihwYXJlbnQsIDEpOwkJCQotCQkJQ29tcG9zaXRlIHByZWZCdXR0b25QYW5lbCA9IHV0aWxzXy5jcmVhdGVDb21wb3NpdGUocGFyZW50LCAxKTsKLQkJCW92ZXJ3cml0ZUJ1dHRvbl8gPSB1dGlsc18uY3JlYXRlQ2hlY2tib3gocHJlZkJ1dHRvblBhbmVsLAotCQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuQ0hFQ0tCT1hfT1ZFUldSSVRFX0ZJTEVTLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX0JVVFRPTl9PVkVSV1JJVEVfRklMRVMsIElORk9QT1BfV1NXU0NFTl9DSEVDS0JPWF9PVkVSV1JJVEUpOwotCQkJb3ZlcndyaXRlQnV0dG9uXy5zZXRTZWxlY3Rpb24oZ2V0UmVzb3VyY2VDb250ZXh0KCkKLQkJCQkJLmlzT3ZlcndyaXRlRmlsZXNFbmFibGVkKCkpOwotCQl9Ci0KLQkJcmV0dXJuIHRoaXM7Ci0JfQkKLQkKLQlwcml2YXRlIHZvaWQgbGF1bmNoUHJvamVjdERpYWxvZygpCi0JewotCQlTdHJpbmcgY3VycmVudFByb2plY3ROYW1lID0gZ2V0U2VydmljZVByb2plY3ROYW1lKCk7Ci0JCVN0cmluZyBjdXJyZW50RWFyUHJvamVjdE5hbWUgPSBnZXRTZXJ2aWNlRWFyUHJvamVjdE5hbWUoKTsKLQkJU3RyaW5nIGN1cnJlbnRQcm9qZWN0VHlwZSA9IGdldFNlcnZpY2VDb21wb25lbnRUeXBlKCk7Ci0JCWJvb2xlYW4gY3VycmVudE5lZWRFYXIgPSBnZXRTZXJ2aWNlTmVlZEVBUigpOwotCQkKLQkJcHJvamVjdERpYWxvZ18uc2V0UHJvamVjdE5hbWUoY3VycmVudFByb2plY3ROYW1lKTsKLQkJcHJvamVjdERpYWxvZ18uc2V0RWFyUHJvamVjdE5hbWUoY3VycmVudEVhclByb2plY3ROYW1lKTsKLQkJcHJvamVjdERpYWxvZ18uc2V0UHJvamVjdENvbXBvbmVudFR5cGUoY3VycmVudFByb2plY3RUeXBlKTsKLQkJcHJvamVjdERpYWxvZ18uc2V0TmVlZEVBUihjdXJyZW50TmVlZEVhcik7Ci0JCQotCQlpbnQgc3RhdHVzID0gcHJvamVjdERpYWxvZ18ub3BlbigpOwotCQlpZiAoc3RhdHVzID09IFdpbmRvdy5PSykKLQkJewotCQkJU3RyaW5nIG5ld1Byb2plY3ROYW1lID0gcHJvamVjdERpYWxvZ18uZ2V0UHJvamVjdE5hbWUoKTsKLQkJCVN0cmluZyBuZXdFYXJQcm9qZWN0TmFtZSA9IHByb2plY3REaWFsb2dfLmdldEVhclByb2plY3ROYW1lKCk7Ci0JCQlTdHJpbmcgbmV3UHJvamVjdFR5cGUgPSBwcm9qZWN0RGlhbG9nXy5nZXRQcm9qZWN0Q29tcG9uZW50VHlwZSgpOwotCQkJYm9vbGVhbiBuZXdOZWVkRWFyID0gcHJvamVjdERpYWxvZ18uZ2V0TmVlZEVBUigpOwkKLQkJCQotCQkJLy9VcGRhdGUgcHJvamVjdCBzZXR0aW5ncyBhbmQgdmFsaWRhdGUgcGFnZSBpZiBzZWxlY3Rpb25zIGNoYW5nZWQuCi0JCQlpZiAoIW5ld1Byb2plY3ROYW1lLmVxdWFscyhjdXJyZW50UHJvamVjdE5hbWUpCi0JCQkJCXx8ICFuZXdFYXJQcm9qZWN0TmFtZS5lcXVhbHMoY3VycmVudEVhclByb2plY3ROYW1lKQotCQkJCQl8fCAhbmV3UHJvamVjdFR5cGUuZXF1YWxzKGN1cnJlbnRQcm9qZWN0VHlwZSkKLQkJCQkJfHwgbmV3TmVlZEVhciAhPSBjdXJyZW50TmVlZEVhcikgewotCQkJCXNldFNlcnZpY2VQcm9qZWN0TmFtZShuZXdQcm9qZWN0TmFtZSk7Ci0JCQkJc2V0U2VydmljZUVhclByb2plY3ROYW1lKG5ld0VhclByb2plY3ROYW1lKTsKLQkJCQlzZXRTZXJ2aWNlQ29tcG9uZW50VHlwZShuZXdQcm9qZWN0VHlwZSk7Ci0JCQkJc2V0U2VydmljZU5lZWRFQVIobmV3TmVlZEVhcik7CQkJCQotCQkJCXZhbGlkYXRpb25TdGF0ZV8gPSAobmV3IFZhbGlkYXRpb25VdGlscygpKS5nZXROZXdWYWxpZGF0aW9uU3RhdGUodmFsaWRhdGlvblN0YXRlXywgVmFsaWRhdGlvblV0aWxzLlZBTElEQVRFX1BST0pFQ1RfQ0hBTkdFUyk7Ci0JCQkJc3RhdHVzTGlzdGVuZXJfLmhhbmRsZUV2ZW50KG51bGwpOwotCQkJfQotCQkJCi0JCQkvKmNoZWNrIHRvIHNlZSBpZiB0ZXh0IGhhcyBjaGFuZ2VkIGZvciBwcm9qZWN0IGFuZCBFQVIKLQkJCWlmIHNvLCByZXBhaW50IGxpbmtzICovCi0JCQlpZiAoIW5ld1Byb2plY3ROYW1lLmVxdWFscyhjdXJyZW50UHJvamVjdE5hbWUpKQotCQkJewotCQkJCWhMaW5rU2VydmljZVByb2plY3RfLnBhY2sodHJ1ZSk7Ci0JCQkJcGFja1NlbGYoKTsJIAotCQkJfQotCQkJaWYgKCFuZXdFYXJQcm9qZWN0TmFtZS5lcXVhbHMoY3VycmVudEVhclByb2plY3ROYW1lKSkKLQkJCXsKLQkJCQloTGlua1NlcnZpY2VFQVJfLnBhY2sodHJ1ZSk7Ci0JCQkJcGFja1NlbGYoKTsJICAJCQkJCQotCQkJfQotCQl9Ci0JfQotCQkKLQlwcml2YXRlIHZvaWQgbGF1bmNoUnVudGltZVNlbGVjdGlvbkRpYWxvZyhib29sZWFuIGNsaWVudENvbnRleHQpCi0JewotCQlsYXVuY2hSdW50aW1lU2VsZWN0aW9uRGlhbG9nKGNsaWVudENvbnRleHQsIGZhbHNlKTsKLQl9Ci0JCQotCXByaXZhdGUgdm9pZCBsYXVuY2hSdW50aW1lU2VsZWN0aW9uRGlhbG9nKGJvb2xlYW4gY2xpZW50Q29udGV4dCwgYm9vbGVhbiBzZWxlY3RTZXJ2ZXJGaXJzdCkgCQotCXsJCi0JCWJ5dGUgbW9kZSA9IGNsaWVudENvbnRleHQgPyAoYnl0ZSkxIDogKGJ5dGUpMDsKLQkJCi0JCS8vVE9ETzoganZoIC0gaW52ZXN0aWdhdGUgLSBkb24ndCB0aGluayBqMmVlIHZlcnNpb24gc2hvdWxkbid0IGJlIGhhcmQgY29kZWQgKGxhc3QgcGFybSkgCi0JCS8vICBxdWVzdGlvbiAtIHdoZXJlIHRvIHBpY2sgaXQgdXAgZnJvbT8KLQkJLy9SZW1lbWJlciB0aGUgY3VycmVudCB2YWx1ZXMKLQkJVHlwZVJ1bnRpbWVTZXJ2ZXIgY3VycmVudFNlcnZpY2VUUlMgPSBnZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoKTsKLQkJSVdvcmtiZW5jaCB3b3JrYmVuY2ggPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpOwotCQlSdW50aW1lU2VydmVyU2VsZWN0aW9uRGlhbG9nIHJzc2QgPSBuZXcgUnVudGltZVNlcnZlclNlbGVjdGlvbkRpYWxvZygKLQkJCQl3b3JrYmVuY2guZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0U2hlbGwoKSwgbW9kZSwgY3VycmVudFNlcnZpY2VUUlMsICIxNCIpOwkKLQkJcnNzZC5zZXRTZWxlY3RTZXJ2ZXJGaXJzdChzZWxlY3RTZXJ2ZXJGaXJzdCk7CQkKLQkJaW50IHJlc3VsdCA9IHJzc2Qub3BlbigpOwkJCi0JCWlmIChyZXN1bHQgPT0gV2luZG93Lk9LKQotCQl7Ci0JCQlUeXBlUnVudGltZVNlcnZlciBuZXdTZXJ2aWNlVFJTID0gcnNzZC5nZXRUeXBlUnVudGltZVNlcnZlcigpOwotCQkJaWYgKCFjdXJyZW50U2VydmljZVRSUy5lcXVhbHMobmV3U2VydmljZVRSUykpCi0JCQl7Ci0JCQkJc2V0U2VydmljZVR5cGVSdW50aW1lU2VydmVyKG5ld1NlcnZpY2VUUlMpOwkKLQkJCQlyZWZyZXNoQ2xpZW50U2VydmVyUnVudGltZVNlbGVjdGlvbigpOwkKLQkJCQl2YWxpZGF0aW9uU3RhdGVfID0gKG5ldyBWYWxpZGF0aW9uVXRpbHMoKSkuZ2V0TmV3VmFsaWRhdGlvblN0YXRlKHZhbGlkYXRpb25TdGF0ZV8sIFZhbGlkYXRpb25VdGlscy5WQUxJREFURV9TRVJWRVJfUlVOVElNRV9DSEFOR0VTKTsKLQkJCQljbGllbnRXaWRnZXRfLnNldFZhbGlkYXRpb25TdGF0ZShWYWxpZGF0aW9uVXRpbHMuVkFMSURBVEVfU0VSVkVSX1JVTlRJTUVfQ0hBTkdFUyk7Ci0JCQkJc3RhdHVzTGlzdGVuZXJfLmhhbmRsZUV2ZW50KG51bGwpOyAvL1JldmFsaWRhdGUgdGhlIHBhZ2Ugc2luY2Ugc2VydmVyL3J1bnRpbWUgc2VsZWN0aW9ucyBjaGFuZ2VkLgotCQkJfQotCQkJCi0JCX0JCQotCX0JCi0JCi0JcHVibGljIHZvaWQgc2V0Q2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIoVHlwZVJ1bnRpbWVTZXJ2ZXIgaWRzKSB7Ci0JCWNsaWVudFdpZGdldF8uc2V0VHlwZVJ1bnRpbWVTZXJ2ZXIoIGlkcyApOwotCX0KLQotCXB1YmxpYyBUeXBlUnVudGltZVNlcnZlciBnZXRDbGllbnRUeXBlUnVudGltZVNlcnZlcigpIHsKLQkJcmV0dXJuIGNsaWVudFdpZGdldF8uZ2V0VHlwZVJ1bnRpbWVTZXJ2ZXIoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRJbnN0YWxsQ2xpZW50KEJvb2xlYW4gaW5zdGFsbCkgewotCQljbGllbnRXaWRnZXRfLnNldEluc3RhbGxDbGllbnQoIGluc3RhbGwgKTsKLQl9Ci0KLQlwdWJsaWMgQm9vbGVhbiBnZXRJbnN0YWxsQ2xpZW50KCkgewkJCi0JCXJldHVybiBjbGllbnRXaWRnZXRfLmdldEluc3RhbGxDbGllbnQoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0U3RhcnRDbGllbnQoQm9vbGVhbiBzdGFydENsaWVudCkgewotCQljbGllbnRXaWRnZXRfLnNldFN0YXJ0Q2xpZW50KCBzdGFydENsaWVudCApOwotCX0KLQotCXB1YmxpYyBCb29sZWFuIGdldFN0YXJ0Q2xpZW50KCkgewkJCi0JCXJldHVybiBjbGllbnRXaWRnZXRfLmdldFN0YXJ0Q2xpZW50KCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldFRlc3RDbGllbnQoQm9vbGVhbiB0ZXN0Q2xpZW50KSB7Ci0JCWNsaWVudFdpZGdldF8uc2V0VGVzdENsaWVudCggdGVzdENsaWVudCApOwotCX0KLQotCXB1YmxpYyBCb29sZWFuIGdldFRlc3RDbGllbnQoKSB7CQkKLQkJcmV0dXJuIGNsaWVudFdpZGdldF8uZ2V0VGVzdENsaWVudCgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXREZXZlbG9wQ2xpZW50KGJvb2xlYW4gZGV2ZWxvcCkgewotCQljbGllbnRXaWRnZXRfLnNldERldmVsb3BDbGllbnQoIGRldmVsb3AgKTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBnZXREZXZlbG9wQ2xpZW50KCkgewkJCi0JCXJldHVybiBjbGllbnRXaWRnZXRfLmdldERldmVsb3BDbGllbnQoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0QXNzZW1ibGVDbGllbnQoYm9vbGVhbiBhc3NlbWJsZSkgewotCQljbGllbnRXaWRnZXRfLnNldEFzc2VtYmxlQ2xpZW50KCBhc3NlbWJsZSApOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGdldEFzc2VtYmxlQ2xpZW50KCkgewkJCi0JCXJldHVybiBjbGllbnRXaWRnZXRfLmdldEFzc2VtYmxlQ2xpZW50KCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldERlcGxveUNsaWVudChib29sZWFuIGRlcGxveSkgewotCQljbGllbnRXaWRnZXRfLnNldERlcGxveUNsaWVudCggZGVwbG95ICk7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gZ2V0RGVwbG95Q2xpZW50KCkgewkJCi0JCXJldHVybiBjbGllbnRXaWRnZXRfLmdldERlcGxveUNsaWVudCgpOwotCX0KLQotcHJpdmF0ZSB2b2lkIGhhbmRsZVR5cGVDaGFuZ2UoKQotCXsKLQkJaWYgKCFwcmVmZXJlbmNlc1BhZ2VfKSB7Ci0JCSAgIGludCBzY2VuYXJpbyA9IGdldFdlYlNlcnZpY2VTY2VuYXJpbygpOwotCQkgICAKLQkJICAgaWYgKHNjZW5hcmlvID09IFdlYlNlcnZpY2VTY2VuYXJpby5CT1RUT01VUCkKLQkJICAgewotCQkJICBzZXJ2aWNlTGFiZWxfLnNldFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLkxBQkVMX1dFQlNFUlZJQ0VJTVBMKTsKLQkJICAgfQotCQkgICBlbHNlIGlmIChzY2VuYXJpbyA9PSBXZWJTZXJ2aWNlU2NlbmFyaW8uVE9QRE9XTikKLQkJICAgewotCQkJICAgc2VydmljZUxhYmVsXy5zZXRUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5MQUJFTF9XRUJTRVJWSUNFREVGKTsKLQkJICAgfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0U2VydmljZVR5cGVSdW50aW1lU2VydmVyKFR5cGVSdW50aW1lU2VydmVyIGlkcykgewotCQlMYWJlbHNBbmRJZHMgbGFiZWxJZHMgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMgotCQkJCS5nZXRTZXJ2aWNlVHlwZUxhYmVscygpOwotCQkvLyByc2tyZWcKLQkJaW50IHNlbGVjdGlvbiA9IDA7Ci0JCVN0cmluZ1tdIHNlcnZpY2VJZHMgPSBsYWJlbElkcy5nZXRJZHNfKCk7Ci0JCVN0cmluZyBzZWxlY3RlZElkID0gaWRzLmdldFR5cGVJZCgpOwotCi0JCXdlYnNlcnZpY2VUeXBlXy5zZXRJdGVtcyhsYWJlbElkcy5nZXRMYWJlbHNfKCkpOwotCi0JCS8vIE5vdyBmaW5kIHRoZSBzZWxlY3RlZCBvbmUuCi0JCWZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBzZXJ2aWNlSWRzLmxlbmd0aDsgaW5kZXgrKykgewotCQkJaWYgKHNlbGVjdGVkSWQuZXF1YWxzKHNlcnZpY2VJZHNbaW5kZXhdKSkgewotCQkJCXNlbGVjdGlvbiA9IGluZGV4OwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCXdlYnNlcnZpY2VUeXBlXy5zZWxlY3Qoc2VsZWN0aW9uKTsKLQkJCi0JCWlkc18gPSBpZHM7Ci0JCQotCQlpZiAoaWRzXyAhPSBudWxsKQotCQl7Ci0JCQlTdHJpbmcgc2VydmljZVNlcnZlclRleHQgPSAiIjsKLQkJCVN0cmluZyBzZXJ2ZXJJZCA9IGlkc18uZ2V0U2VydmVySWQoKTsKLQkJCWlmIChzZXJ2ZXJJZCAhPSBudWxsICYmIHNlcnZlcklkLmxlbmd0aCgpPjApCi0JCQl7Ci0JCQkgIHNlcnZpY2VTZXJ2ZXJUZXh0ID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2VydmVyTGFiZWxCeUlkKHNlcnZlcklkKTsKLQkJCX0KLQkJCVN0cmluZyBzZXJ2aWNlUnVudGltZVRleHQgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRSdW50aW1lTGFiZWxCeUlkKGlkc18uZ2V0UnVudGltZUlkKCkpOwotCQkJCi0JCQlTdHJpbmcgY3VycmVudFNlcnZlclRleHQgPSBoTGlua1NlcnZpY2VTZXJ2ZXJfLmdldFRleHQoKTsKLQkJCVN0cmluZyBjdXJyZW50UnVudGltZVRleHQgPSBoTGlua1NlcnZpY2VSdW50aW1lXy5nZXRUZXh0KCk7Ci0JCQlTdHJpbmcgbmV3U2VydmVyVGV4dCA9IFNFUlZJQ0VfU0VSVkVSX1BSRUZJWCArICIgIiArIHNlcnZpY2VTZXJ2ZXJUZXh0OwotCQkJU3RyaW5nIG5ld1J1bnRpbWVUZXh0ID0gU0VSVklDRV9SVU5USU1FX1BSRUZJWCArICIgIiArIHNlcnZpY2VSdW50aW1lVGV4dDsKLQkJCWhMaW5rU2VydmljZVNlcnZlcl8uc2V0VGV4dChuZXdTZXJ2ZXJUZXh0KTsKLQkJCWhMaW5rU2VydmljZVJ1bnRpbWVfLnNldFRleHQobmV3UnVudGltZVRleHQpOwkJCi0JCQkKLQkJCS8qY2hlY2sgdG8gc2VlIGlmIHRleHQgaGFzIGNoYW5nZWQgZm9yIHNlcnZlciBvciBydW50aW1lCi0JCQlpZiBzbywgcmVwYWludCBsaW5rcyAqLwotCQkJaWYgKCFuZXdTZXJ2ZXJUZXh0LmVxdWFscyhjdXJyZW50U2VydmVyVGV4dCkpCi0JCQl7Ci0JCQkJaExpbmtTZXJ2aWNlU2VydmVyXy5wYWNrKHRydWUpOwotCQkJCXBhY2tTZWxmKCk7Ci0JCQl9CQkJCi0JCQkKLQkJCWlmICghbmV3UnVudGltZVRleHQuZXF1YWxzKGN1cnJlbnRSdW50aW1lVGV4dCkpCi0JCQl7Ci0JCQkJaExpbmtTZXJ2aWNlUnVudGltZV8ucGFjayh0cnVlKTsKLQkJCQlwYWNrU2VsZigpOwotCQkJfSAKLQkJfQkJCQkKLQkJbGFiZWxJZHNfID0gbGFiZWxJZHM7Ci0JCWhhbmRsZVR5cGVDaGFuZ2UoKTsKLQkJCi0JCWlmIChwcm9qZWN0RGlhbG9nXyAhPSBudWxsKQotCQkJcHJvamVjdERpYWxvZ18uc2V0VHlwZVJ1bnRpbWVTZXJ2ZXIoaWRzXyk7Ci0JCQotCQkKLQkJLy9XaGVuIHRoZSBzZXJ2ZXIgY2hhbmdlcywgdGhlIHN0YXRlIG9mIG5lZWRFYXIgY291bGQgY2hhbmdlLgotCQkvL0lmIHRoZSB0aGUgc2VydmVyIGNoYW5nZSByZXN1bHRzIGluIGEgY2hhbmdlIGluIHRoZSBzdGF0ZSBvZiBuZWVkRWFyLAotCQkvL3VwZGF0ZSBuZWVkRWFyIGFuZCBzZXJ2aWNlRWFyUHJvamVjdE5hbWUuCi0JCVZhbGlkYXRpb25VdGlscyB2dSA9IG5ldyBWYWxpZGF0aW9uVXRpbHMoKTsKLQkJYm9vbGVhbiBvbGROZWVkRWFyID0gZ2V0U2VydmljZU5lZWRFQVIoKTsKLQkJYm9vbGVhbiBzZXJ2aWNlUHJvamVjdE9yUHJvamVjdFR5cGVOZWVkc0VhcjsKLQotCQlpZiAoIW9sZE5lZWRFYXIpCi0JCXsKLQkJCS8vSWYgYW4gRUFSIHdhcyBub3QgbmVlZGVkIHByZXZpb3VzbHkgaXQgY291bGQgaGF2ZSBiZWVuIGJlY2F1c2Ugb2YgdGhlIHByb2plY3QvcHJvamVjdCB0eXBlIG9yIHRoZSBzZXJ2ZXIuCi0JCQkvL0lmIGl0IHdhcyBiZWNhdXNlIG9mIHRoZSBwcm9qZWN0L3Byb2plY3QgdHlwZSwgY2hhbmdpbmcgdGhlIHNlcnZlciBzaG91bGQgaGF2ZSBubyBpbXBhY3QKLQkJCS8vb24gdGhlIHN0YXRlIG9mIG5lZWRFYXIuCi0JCQlzZXJ2aWNlUHJvamVjdE9yUHJvamVjdFR5cGVOZWVkc0VhciA9IHZ1LnByb2plY3RPclByb2plY3RUeXBlTmVlZHNFYXIoZ2V0U2VydmljZVByb2plY3ROYW1lKCksIGdldFNlcnZpY2VDb21wb25lbnRUeXBlKCkpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJc2VydmljZVByb2plY3RPclByb2plY3RUeXBlTmVlZHNFYXIgPSB0cnVlOwotCQl9Ci0JCQotCQkvL2Jvb2xlYW4gc2VydmljZVByb2plY3RPclByb2plY3RUeXBlTmVlZHNFYXIgPSB2dS5wcm9qZWN0T3JQcm9qZWN0VHlwZU5lZWRzRWFyKGdldFNlcnZpY2VQcm9qZWN0TmFtZSgpLCBnZXRTZXJ2aWNlQ29tcG9uZW50VHlwZSgpKTsKLQkJaWYgKHNlcnZpY2VQcm9qZWN0T3JQcm9qZWN0VHlwZU5lZWRzRWFyKQotCQl7Ci0JCQkvL0NvdWxkIG5vdCBydWxlIG91dCBuZWVkIGZvciBhbiBFYXIgZnJvbSB0aGUgcHJvamVjdC9wcm9qZWN0IHR5cGUgc28gY2hhbmdpbmcgdGhlIHNlcnZlcgotCQkJLy9tYXkgaW1wYWN0IHRoZSBuZWVkIGZvciBhbiBFYXIuCi0KLQkJCWJvb2xlYW4gY3VycmVudFNlcnZpY2VTZXJ2ZXJOZWVkc0VhciA9IHZ1LnNlcnZlck5lZWRzRUFSKGdldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcigpLmdldFNlcnZlcklkKCkpOwotCQkJaWYgKG9sZE5lZWRFYXIgIT0gY3VycmVudFNlcnZpY2VTZXJ2ZXJOZWVkc0VhcikKLQkJCXsKLQkJCQkvL1VwZGF0ZSBuZWVkRWFyIGFuZCBzZXJ2aWNlRWFyUHJvamVjdE5hbWUuCi0JCQkJaWYgKGN1cnJlbnRTZXJ2aWNlU2VydmVyTmVlZHNFYXIpCi0JCQkJewotCQkJCQkvL0NhbGN1bGF0ZSBhIHJlYXNvbmFibGUgZGVmYXVsdCBmb3IgdGhlIEVhciBwcm9qZWN0IG5hbWUKLQkJCQkJU3RyaW5nIGVhclByb2plY3ROYW1lID0gRGVmYXVsdGluZ1V0aWxzLmdldERlZmF1bHRFQVJQcm9qZWN0TmFtZShnZXRTZXJ2aWNlUHJvamVjdE5hbWUoKSk7Ci0JCQkJCXNldFNlcnZpY2VOZWVkRUFSKGN1cnJlbnRTZXJ2aWNlU2VydmVyTmVlZHNFYXIpOwotCQkJCQlzZXRTZXJ2aWNlRWFyUHJvamVjdE5hbWUoZWFyUHJvamVjdE5hbWUpOwotCQkJCX0KLQkJCQllbHNlCi0JCQkJewotCQkJCQlzZXRTZXJ2aWNlTmVlZEVBUihjdXJyZW50U2VydmljZVNlcnZlck5lZWRzRWFyKTsKLQkJCQkJc2V0U2VydmljZUVhclByb2plY3ROYW1lKCIiKTsJCQkJCQotCQkJCX0KLQkJCQkKLQkJCX0KLQkJfQkJCi0JfQotCi0JcHVibGljIFR5cGVSdW50aW1lU2VydmVyIGdldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcigpIHsKLQkJcmV0dXJuIGlkc187Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0U2VydmljZUdlbmVyYXRpb24oaW50IHZhbHVlKQotCXsKLQkJc2VydmljZVNjYWxlXy5zZXRTZWxlY3Rpb24odmFsdWUpOwotCQlzZXRHcmFwaGljcyh2YWx1ZSk7Ci0JCQotCQkvL2VuYWJsZSBjbGllbnQgd2lkZ2V0IGJhc2VkIG9uIHNlcnZpY2Ugc2NhbGUgc2V0dGluZwotCQljbGllbnRXaWRnZXRfLmVuYWJsZUNsaWVudFNsaWRlcih2YWx1ZTw9U2NlbmFyaW9Db250ZXh0LldTX1NUQVJUKTsKLQkJCi0JCS8qZm9yIHBvcHVwIGNhc2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgVUkgaXMgcmVmcmVzaGVkIGJhc2VkIG9uIAotCQljaGFuZ2VzIHRvIGRhdGEqLwotCQlwYWNrU2VsZigpOwotCX0JCi0KLQlwdWJsaWMgaW50IGdldFNlcnZpY2VHZW5lcmF0aW9uKCkKLQl7Ci0JCXJldHVybiBzZXJ2aWNlU2NhbGVfLmdldFNlbGVjdGlvbigpOwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBnZXREZXZlbG9wU2VydmljZSgpIHsKLQkJcmV0dXJuIGRldmVsb3BTZXJ2aWNlXzsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXREZXZlbG9wU2VydmljZShib29sZWFuIGRldmVsb3BTZXJ2aWNlKSB7Ci0JCXRoaXMuZGV2ZWxvcFNlcnZpY2VfID0gZGV2ZWxvcFNlcnZpY2U7Ci0JfQkKLQkKLQlwdWJsaWMgYm9vbGVhbiBnZXRBc3NlbWJsZVNlcnZpY2UoKSB7Ci0JCXJldHVybiBhc3NlbWJsZVNlcnZpY2VfOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldEFzc2VtYmxlU2VydmljZShib29sZWFuIGFzc2VtYmxlU2VydmljZSkgewotCQl0aGlzLmFzc2VtYmxlU2VydmljZV8gPSBhc3NlbWJsZVNlcnZpY2U7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gZ2V0RGVwbG95U2VydmljZSgpIHsKLQkJcmV0dXJuIGRlcGxveVNlcnZpY2VfOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldERlcGxveVNlcnZpY2UoYm9vbGVhbiBkZXBsb3lTZXJ2aWNlKSB7Ci0JCXRoaXMuZGVwbG95U2VydmljZV8gPSBkZXBsb3lTZXJ2aWNlOwotCX0KLQkKLQlwdWJsaWMgQm9vbGVhbiBnZXRTdGFydFNlcnZpY2UoKXsKLQkJcmV0dXJuIHN0YXJ0U2VydmljZV87Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldFN0YXJ0U2VydmljZShCb29sZWFuIHZhbHVlKSB7Ci0gICAgICAgIHN0YXJ0U2VydmljZV89dmFsdWU7Ci0JfQotCi0JcHVibGljIEJvb2xlYW4gZ2V0SW5zdGFsbFNlcnZpY2UoKSB7Ci0JCXJldHVybiBpbnN0YWxsU2VydmljZV87Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0SW5zdGFsbFNlcnZpY2UoQm9vbGVhbiB2YWx1ZSkgewotICAgICAgICBpbnN0YWxsU2VydmljZV89dmFsdWU7Ci0JfQotCi0JcHVibGljIEJvb2xlYW4gZ2V0VGVzdFNlcnZpY2UoKSB7Ci0gICAgICAgIHJldHVybiAKLQkgICAgICAgICAgbmV3IEJvb2xlYW4odGVzdFNlcnZpY2VfLmJvb2xlYW5WYWx1ZSgpIHx8IGNsaWVudFdpZGdldF8uZ2V0VGVzdENsaWVudCgpLmJvb2xlYW5WYWx1ZSgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRUZXN0U2VydmljZShCb29sZWFuIHZhbHVlKSB7Ci0gICAgICAgIHRlc3RTZXJ2aWNlXz0gdmFsdWU7Ci0JfQotCXB1YmxpYyBCb29sZWFuIGdldE1vbml0b3JTZXJ2aWNlKCkgewotCQlyZXR1cm4gbmV3IEJvb2xlYW4obW9uaXRvckJ1dHRvbl8uZ2V0U2VsZWN0aW9uKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldE1vbml0b3JTZXJ2aWNlKEJvb2xlYW4gdmFsdWUpIHsKLQkJbW9uaXRvckJ1dHRvbl8uc2V0U2VsZWN0aW9uKHZhbHVlLmJvb2xlYW5WYWx1ZSgpKTsKLQl9Ci0KLQlwdWJsaWMgQm9vbGVhbiBnZXRQdWJsaXNoU2VydmljZSgpIHsJCQotCQlyZXR1cm4gbmV3IEJvb2xlYW4ocHVibGlzaEJ1dHRvbl8uZ2V0U2VsZWN0aW9uKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFB1Ymxpc2hTZXJ2aWNlKEJvb2xlYW4gdmFsdWUpIHsKLQkJcHVibGlzaEJ1dHRvbl8uc2V0U2VsZWN0aW9uKCB2YWx1ZS5ib29sZWFuVmFsdWUoKSApOwotCX0KLQotCXB1YmxpYyBCb29sZWFuIGdldEdlbmVyYXRlUHJveHkoKSB7Ci0JCXJldHVybiBuZXcgQm9vbGVhbihjbGllbnRXaWRnZXRfLmdldEdlbmVyYXRlUHJveHkoKSk7CQkKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRDbGllbnRHZW5lcmF0aW9uKGludCB2YWx1ZSkKLQl7Ci0JCWNsaWVudFdpZGdldF8uc2V0Q2xpZW50R2VuZXJhdGlvbih2YWx1ZSk7Ci0JCS8qZm9yIHBvcHVwIGNhc2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgVUkgaXMgcmVmcmVzaGVkIGJhc2VkIG9uIAotCQkJY2hhbmdlcyB0byBkYXRhKi8KLQkJcGFja1NlbGYoKTsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRDbGllbnRFYXJQcm9qZWN0TmFtZSgpCi0JewotCQlyZXR1cm4gY2xpZW50V2lkZ2V0Xy5nZXRDbGllbnRFYXJQcm9qZWN0TmFtZSgpOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldENsaWVudFByb2plY3ROYW1lKCkKLQl7Ci0JCXJldHVybiBjbGllbnRXaWRnZXRfLmdldENsaWVudFByb2plY3ROYW1lKCk7Ci0JfQotCQotCXB1YmxpYyBpbnQgZ2V0Q2xpZW50R2VuZXJhdGlvbigpCi0JewotCQlyZXR1cm4gY2xpZW50V2lkZ2V0Xy5nZXRDbGllbnRHZW5lcmF0aW9uKCk7Ci0JfQkKLQotCXB1YmxpYyBSZXNvdXJjZUNvbnRleHQgZ2V0UmVzb3VyY2VDb250ZXh0KCkgewotCQlpZiAocmVzb3VyY2VDb250ZXh0XyA9PSBudWxsKSB7Ci0JCQlyZXNvdXJjZUNvbnRleHRfID0gV2ViU2VydmljZVBsdWdpbi5nZXRJbnN0YW5jZSgpCi0JCQkJCS5nZXRSZXNvdXJjZUNvbnRleHQoKTsKLQkJfQotCQlyZXR1cm4gcmVzb3VyY2VDb250ZXh0XzsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRSZXNvdXJjZUNvbnRleHQoUmVzb3VyY2VDb250ZXh0IGNvbnRleHQpIHsKLQkJcmVzb3VyY2VDb250ZXh0XyA9IGNvbnRleHQ7Ci0JfQotCi0JcHVibGljIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGdldE9iamVjdFNlbGVjdGlvbigpCi0JewotCQlyZXR1cm4gb2JqZWN0U2VsZWN0aW9uXzsJCQotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRPYmplY3RTZWxlY3Rpb24oSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uICkKLQl7Ci0JCW9iamVjdFNlbGVjdGlvbl8gPSBzZWxlY3Rpb247Ci0JfQotCQotCXB1YmxpYyBXZWJTZXJ2aWNlc1BhcnNlciBnZXRXZWJTZXJ2aWNlc1BhcnNlcigpCi0JewotCQlyZXR1cm4gcGFyc2VyXzsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0V2ViU2VydmljZXNQYXJzZXIoV2ViU2VydmljZXNQYXJzZXIgcGFyc2VyKQotCXsKLQkJcGFyc2VyXyA9IHBhcnNlcjsKLQkJY2xpZW50V2lkZ2V0Xy5zZXRXZWJTZXJ2aWNlc1BhcnNlcihwYXJzZXIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBpbnRlcm5hbGl6ZSgpIHsJCQotCQkKLQkJaWYgKHByZWZlcmVuY2VzUGFnZV8pCi0JCQlyZXR1cm47Ci0JCQotCQlpZiAob2JqZWN0U2VsZWN0aW9uV2lkZ2V0XyA9PSBudWxsKQotCQkJb2JqZWN0U2VsZWN0aW9uV2lkZ2V0XyA9IGdldFNlbGVjdGlvbldpZGdldCgpOwotCQkKLQkJU3RyaW5nIGRpc3BsYXlhYmxlID0gbnVsbDsKLQkJCi0JCWlmIChvYmplY3RTZWxlY3Rpb25XaWRnZXRfIGluc3RhbmNlb2YgSU9iamVjdFNlbGVjdGlvbkxhdW5jaGFibGUpIHsJCQotCQkJSU9iamVjdFNlbGVjdGlvbkxhdW5jaGFibGUgbGF1bmNoYWJsZSA9IChJT2JqZWN0U2VsZWN0aW9uTGF1bmNoYWJsZSkgb2JqZWN0U2VsZWN0aW9uV2lkZ2V0XzsKLQkJCWxhdW5jaGFibGUuc2V0SW5pdGlhbFNlbGVjdGlvbihvYmplY3RTZWxlY3Rpb25fKTsKLQkJCW9iamVjdFNlbGVjdGlvbl8gPSBsYXVuY2hhYmxlLmdldE9iamVjdFNlbGVjdGlvbigpOwotCQkJZGlzcGxheWFibGUgPSBsYXVuY2hhYmxlLmdldE9iamVjdFNlbGVjdGlvbkRpc3BsYXlhYmxlU3RyaW5nKCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlJT2JqZWN0U2VsZWN0aW9uV2lkZ2V0IHNlbGVjdGlvbldpZGdldCA9IChJT2JqZWN0U2VsZWN0aW9uV2lkZ2V0KSBvYmplY3RTZWxlY3Rpb25XaWRnZXRfOwotCQkJc2VsZWN0aW9uV2lkZ2V0LnNldEluaXRpYWxTZWxlY3Rpb24ob2JqZWN0U2VsZWN0aW9uXyk7Ci0JCSAgICBkaXNwbGF5YWJsZSA9IHNlbGVjdGlvbldpZGdldC5nZXRPYmplY3RTZWxlY3Rpb25EaXNwbGF5YWJsZVN0cmluZygpOwotCQl9Ci0JCQotCQlpZiAoZGlzcGxheWFibGUgPT0gbnVsbCB8fCBkaXNwbGF5YWJsZS5sZW5ndGgoKSA9PSAwKQotCQkJcmV0dXJuOwotCQkJCi0JCXNlcnZpY2VJbXBsXy5yZW1vdmVNb2RpZnlMaXN0ZW5lcihvYmplY3RNb2RpZnlMaXN0ZW5lcl8pOwotCQlzZXJ2aWNlSW1wbF8uc2V0VGV4dChkaXNwbGF5YWJsZSk7Ci0JCXNlcnZpY2VJbXBsXy5hZGRNb2RpZnlMaXN0ZW5lcihvYmplY3RNb2RpZnlMaXN0ZW5lcl8pOwotCX0KLQotCXB1YmxpYyBJU3RhdHVzIGdldFN0YXR1cygpIHsKLQkJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCi0JCUlTdGF0dXMgbWlzc2luZ0ZpZWxkU3RhdHVzID0gY2hlY2tNaXNzaW5nRmllbGRTdGF0dXMoKTsKLQkJaWYgKG1pc3NpbmdGaWVsZFN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuRVJST1IpIHsKLQkJCXJldHVybiBtaXNzaW5nRmllbGRTdGF0dXM7Ci0JCX0KLQotCQlJU3RhdHVzIGludmFsaWRTZXJ2aWNlSW1wbFN0YXR1cyA9IGNoZWNrU2VydmljZUltcGxUZXh0U3RhdHVzKCk7Ci0JCWlmIChpbnZhbGlkU2VydmljZUltcGxTdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLkVSUk9SKSB7Ci0JCQlyZXR1cm4gaW52YWxpZFNlcnZpY2VJbXBsU3RhdHVzOwotCQl9Ci0KLQkJSVN0YXR1cyBwb3NzaWJsZUVycm9yU3RhdHVzID0gY2hlY2tFcnJvclN0YXR1cygpOwotCQlpZiAocG9zc2libGVFcnJvclN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuRVJST1IpIHsKLQkJCXJldHVybiBwb3NzaWJsZUVycm9yU3RhdHVzOwotCQl9Ci0KLQkJSVN0YXR1cyBwb3NzaWJsZVdhcm5pbmdTdGF0dXMgPSBjaGVja1dhcm5pbmdTdGF0dXMoKTsKLQkJaWYgKHBvc3NpYmxlV2FybmluZ1N0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuV0FSTklORykgewotCQkJcmV0dXJuIHBvc3NpYmxlV2FybmluZ1N0YXR1czsKLQkJfQotCi0JCS8vIElmIG5vIHdhcm5pbmdzL2Vycm9ycyB3ZXJlIHJlcG9ydGVkLCBjbGVhciB2YWxpZGF0aW9uIHN0YXRlIG9uCi0JCS8vIHNlcnZpY2Ugc2lkZSBhbmQgY2xpZW50IHNpZGUgKGlmIGVuYWJsZWQpCi0JCXZhbGlkYXRpb25TdGF0ZV8gPSBWYWxpZGF0aW9uVXRpbHMuVkFMSURBVEVfTk9ORTsKLQkJaWYgKGNsaWVudFdpZGdldF8uZ2V0R2VuZXJhdGVQcm94eSgpKSB7Ci0JCQljbGllbnRXaWRnZXRfLnNldFZhbGlkYXRpb25TdGF0ZShWYWxpZGF0aW9uVXRpbHMuVkFMSURBVEVfTk9ORSk7Ci0JCX0KLQotCQlyZXR1cm4gc3RhdHVzOwotCX0KLQkKLQkvKgotCSAqIGNhbGwgdmFsaWRhdGlvbiBjb2RlIGluIHRoZSBvYmplY3Qgc2VsZWN0aW9uIHdpZGdldCB0byBlbnN1cmUgYW55Ci0JICogbW9kaWZpY2F0aW9ucyB0byB0aGUgc2VydmljZUltcGxfIGZpZWxkIGFyZSB2YWxpZAotCSAqLwotCXByaXZhdGUgSVN0YXR1cyBjaGVja1NlcnZpY2VJbXBsVGV4dFN0YXR1cygpIHsKLQkJCi0JCVN0cmluZyBmaWVsZFRleHQgPSBzZXJ2aWNlSW1wbF8uZ2V0VGV4dCgpLnRyaW0oKTsKLQotCQlpZiAob2JqZWN0U2VsZWN0aW9uV2lkZ2V0XyA9PSBudWxsKQotCQl7Ci0JCQlvYmplY3RTZWxlY3Rpb25XaWRnZXRfID0gZ2V0U2VsZWN0aW9uV2lkZ2V0KCk7Ci0JCX0KLQkJCi0JCWlmIChvYmplY3RTZWxlY3Rpb25XaWRnZXRfIGluc3RhbmNlb2YgSU9iamVjdFNlbGVjdGlvbkxhdW5jaGFibGUpCi0JCSAgICB7ICAgICAgCQotCQkJCUlPYmplY3RTZWxlY3Rpb25MYXVuY2hhYmxlIGxhdW5jaGFibGUgPSAoSU9iamVjdFNlbGVjdGlvbkxhdW5jaGFibGUpb2JqZWN0U2VsZWN0aW9uV2lkZ2V0XzsKLQkJCQl2YWxpZE9iamVjdFNlbGVjdGlvbl8gPSBsYXVuY2hhYmxlLnZhbGlkYXRlKGZpZWxkVGV4dCk7Ci0JCQl9Ci0JCQllbHNlIAotCQkJewotCQkJCUlPYmplY3RTZWxlY3Rpb25XaWRnZXQgd2lkZ2V0ID0gKElPYmplY3RTZWxlY3Rpb25XaWRnZXQpb2JqZWN0U2VsZWN0aW9uV2lkZ2V0XzsKLQkJCQl2YWxpZE9iamVjdFNlbGVjdGlvbl8gPSB3aWRnZXQudmFsaWRhdGUoZmllbGRUZXh0KTsKLQkJCX0KLQkJCi0JCWlmICghdmFsaWRPYmplY3RTZWxlY3Rpb25fKQotCQl7Ci0JCQlpbnQgc2NlbmFyaW8gPSBnZXRXZWJTZXJ2aWNlU2NlbmFyaW8oKTsKLQkJCQotCQkJaWYgKHNjZW5hcmlvID09IFdlYlNlcnZpY2VTY2VuYXJpby5CT1RUT01VUCkKLQkJCQlyZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLk1TR19JTlZBTElEX1NFUlZJQ0VfSU1QTCk7Ci0JCQllbHNlCi0JCQkJcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfSU5WQUxJRF9TRVJWSUNFX0RFRik7CQkJCi0JCX0JCQotCQkKLQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JfQotCi0JcHJpdmF0ZSBpbnQgZ2V0V2ViU2VydmljZVNjZW5hcmlvKCkKLQl7Ci0JCSAgIGludCBpbmRleCA9IHdlYnNlcnZpY2VUeXBlXy5nZXRTZWxlY3Rpb25JbmRleCgpOwkKLQkJICAgU3RyaW5nIHR5cGVJZCA9IGxhYmVsSWRzXy5nZXRJZHNfKClbaW5kZXhdOwotCQkgICByZXR1cm4gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2NlbmFyaW9Gcm9tVHlwZUlkKHR5cGVJZCk7CQkKLQl9Ci0JCi0JcHJpdmF0ZSBJU3RhdHVzIGNoZWNrTWlzc2luZ0ZpZWxkU3RhdHVzKCkgewotCi0JCS8vIDEuIENoZWNrIGZvciBtaXNzaW5nIGZpZWxkcyBvbiBzZXJ2aWNlIHNpZGUKLQkJVmFsaWRhdGlvblV0aWxzIHZhbFV0aWxzID0gbmV3IFZhbGlkYXRpb25VdGlscygpOwotCQlTdHJpbmcgc2VydmljZUltcGwgPSBzZXJ2aWNlSW1wbF8uZ2V0VGV4dCgpLnRyaW0oKTsKLQkJU3RyaW5nIHR5cGVJZCA9IGdldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcigpLmdldFR5cGVJZCgpOwotCQlTdHJpbmcgcnVudGltZUlkID0gZ2V0U2VydmljZVR5cGVSdW50aW1lU2VydmVyKCkuZ2V0UnVudGltZUlkKCk7Ci0JCVN0cmluZyBzZXJ2ZXJJZCA9IGdldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcigpLmdldFNlcnZlcklkKCk7Ci0JCVN0cmluZyBwcm9qZWN0TmFtZSA9IGdldFNlcnZpY2VQcm9qZWN0TmFtZSgpOwotCQlib29sZWFuIG5lZWRFYXIgPSBnZXRTZXJ2aWNlTmVlZEVBUigpOwotCQlTdHJpbmcgZWFyUHJvamVjdE5hbWUgPSBnZXRTZXJ2aWNlRWFyUHJvamVjdE5hbWUoKTsKLQkJU3RyaW5nIHByb2plY3RUeXBlSWQgPSBnZXRTZXJ2aWNlQ29tcG9uZW50VHlwZSgpOwotCQkKLQkJSVN0YXR1cyBzZXJ2aWNlTWlzc2luZ0ZpZWxkU3RhdHVzID0gdmFsVXRpbHMuY2hlY2tNaXNzaW5nRmllbGRTdGF0dXModmFsaWRhdGlvblN0YXRlXywgdHlwZUlkLCBzZXJ2aWNlSW1wbCwKLQkJCQlydW50aW1lSWQsIHNlcnZlcklkLCBwcm9qZWN0TmFtZSwgbmVlZEVhciwgZWFyUHJvamVjdE5hbWUsIHByb2plY3RUeXBlSWQsIGZhbHNlKTsKLQkJaWYgKHNlcnZpY2VNaXNzaW5nRmllbGRTdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLkVSUk9SKSB7Ci0JCQlyZXR1cm4gc2VydmljZU1pc3NpbmdGaWVsZFN0YXR1czsKLQkJfQotCi0JCS8vIDIuIENoZWNrIGZvciBtaXNzaW5nIGZpZWxkcyBvbiB0aGUgY2xpZW50IHNpZGUgaWYgaXQncyB2aXNpYmxlLgotCQlpZiAoY2xpZW50V2lkZ2V0Xy5nZXRHZW5lcmF0ZVByb3h5KCkpIHsKLQkJCUlTdGF0dXMgY2xpZW50TWlzc2luZ0ZpZWxkc1N0YXR1cyA9IGNsaWVudFdpZGdldF8uY2hlY2tNaXNzaW5nRmllbGRTdGF0dXMoKTsKLQkJCWlmIChjbGllbnRNaXNzaW5nRmllbGRzU3RhdHVzLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5FUlJPUikgewotCQkJCXJldHVybiBjbGllbnRNaXNzaW5nRmllbGRzU3RhdHVzOwotCQkJfQotCi0JCX0KLQotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQl9Ci0KLQlwcml2YXRlIElTdGF0dXMgY2hlY2tFcnJvclN0YXR1cygpIHsKLQotCQlWYWxpZGF0aW9uVXRpbHMgdmFsVXRpbHMgPSBuZXcgVmFsaWRhdGlvblV0aWxzKCk7Ci0KLQkJLy8gMS4gQ2hlY2sgZm9yIGVycm9ycyBvbiBzZXJ2aWNlIHNpZGUKLQkJU3RyaW5nIHJ1bnRpbWVJZCA9IGdldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcigpLmdldFJ1bnRpbWVJZCgpOwotCQlTdHJpbmcgc2VydmVySWQgPSBnZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoKS5nZXRTZXJ2ZXJJZCgpOwotCQlTdHJpbmcgdHlwZUlkID0gZ2V0U2VydmljZVR5cGVSdW50aW1lU2VydmVyKCkuZ2V0VHlwZUlkKCk7Ci0JCVN0cmluZyBwcm9qZWN0TmFtZSA9IGdldFNlcnZpY2VQcm9qZWN0TmFtZSgpOwotCQlib29sZWFuIG5lZWRFYXIgPSBnZXRTZXJ2aWNlTmVlZEVBUigpOwotCQlTdHJpbmcgZWFyUHJvamVjdE5hbWUgPSBnZXRTZXJ2aWNlRWFyUHJvamVjdE5hbWUoKTsKLQkJU3RyaW5nIHByb2plY3RUeXBlSWQgPSBnZXRTZXJ2aWNlQ29tcG9uZW50VHlwZSgpOwotCQlJU3RhdHVzIHNlcnZpY2VTaWRlRXJyb3JTdGF0dXMgPSB2YWxVdGlscy5jaGVja0Vycm9yU3RhdHVzKHZhbGlkYXRpb25TdGF0ZV8sIHR5cGVJZCwgcnVudGltZUlkLCBzZXJ2ZXJJZCwKLQkJCQlwcm9qZWN0TmFtZSwgbmVlZEVhciwgZWFyUHJvamVjdE5hbWUsIHByb2plY3RUeXBlSWQsIGZhbHNlKTsKLQkJaWYgKHNlcnZpY2VTaWRlRXJyb3JTdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLkVSUk9SKSB7Ci0JCQlyZXR1cm4gc2VydmljZVNpZGVFcnJvclN0YXR1czsKLQkJfQotCi0JCS8vIDIuIENoZWNrIGZvciBlcnJvcnMgb24gY2xpZW50IHNpZGUgaWYgaXQgaXMgdmlzaWJsZQotCQlpZiAoY2xpZW50V2lkZ2V0Xy5nZXRHZW5lcmF0ZVByb3h5KCkpIHsKLQkJCUlTdGF0dXMgY2xpZW50U2lkZUVycm9yU3RhdHVzID0gY2xpZW50V2lkZ2V0Xy5jaGVja0Vycm9yU3RhdHVzKCk7Ci0JCQlpZiAoY2xpZW50U2lkZUVycm9yU3RhdHVzLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5FUlJPUikgewotCQkJCXJldHVybiBjbGllbnRTaWRlRXJyb3JTdGF0dXM7Ci0JCQl9Ci0KLQkJCS8vIDMuIENoZWNrIGZvciBlcnJvcnMgdGhhdCBzcGFuIHNlcnZpY2UgYW5kIGNsaWVudCBpZiBjbGllbnQgc2lkZQotCQkJLy8gaXMgdmlzaWJsZS4KLQkJCWludCBjbGllbnRWYWxpZGF0aW9uU3RhdGUgPSBjbGllbnRXaWRnZXRfLmdldFZhbGlkYXRpb25TdGF0ZSgpOwotCQkJaWYgKHZhbGlkYXRpb25TdGF0ZV8gPT0gVmFsaWRhdGlvblV0aWxzLlZBTElEQVRFX0FMTAotCQkJCQl8fCB2YWxpZGF0aW9uU3RhdGVfID09IFZhbGlkYXRpb25VdGlscy5WQUxJREFURV9QUk9KRUNUX0NIQU5HRVMKLQkJCQkJfHwgY2xpZW50VmFsaWRhdGlvblN0YXRlID09IFZhbGlkYXRpb25VdGlscy5WQUxJREFURV9BTEwKLQkJCQkJfHwgY2xpZW50VmFsaWRhdGlvblN0YXRlID09IFZhbGlkYXRpb25VdGlscy5WQUxJREFURV9QUk9KRUNUX0NIQU5HRVMpIHsKLQkJCQlTdHJpbmcgY2xpZW50UHJvamVjdE5hbWUgPSBjbGllbnRXaWRnZXRfLmdldENsaWVudFByb2plY3ROYW1lKCk7Ci0JCQkJaWYgKGNsaWVudFByb2plY3ROYW1lLmVxdWFsc0lnbm9yZUNhc2UocHJvamVjdE5hbWUpKSB7Ci0JCQkJCXJldHVybiBTdGF0dXNVdGlscwotCQkJCQkJCS5lcnJvclN0YXR1cyhDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX1NBTUVfQ0xJRU5UX0FORF9TRVJWSUNFX1BST0pFQ1RTKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQl9Ci0KLQlwcml2YXRlIElTdGF0dXMgY2hlY2tXYXJuaW5nU3RhdHVzKCkgewotCQlWYWxpZGF0aW9uVXRpbHMgdmFsVXRpbHMgPSBuZXcgVmFsaWRhdGlvblV0aWxzKCk7Ci0JCS8vIDEuIENoZWNrIGZvciB3YXJuaW5ncyBvbiB0aGUgc2VydmljZSBzaWRlCi0JCWludCBzY2FsZVNldHRpbmcgPSBnZXRTZXJ2aWNlR2VuZXJhdGlvbigpOwotCQlTdHJpbmcgc2VydmVySWQgPSBnZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoKS5nZXRTZXJ2ZXJJZCgpOwotCQlJU3RhdHVzIHNlcnZpY2VXYXJuaW5nU3RhdHVzID0gdmFsVXRpbHMuY2hlY2tXYXJuaW5nU3RhdHVzKHZhbGlkYXRpb25TdGF0ZV8sIHNjYWxlU2V0dGluZywgc2VydmVySWQsIGZhbHNlKTsKLQkJaWYgKHNlcnZpY2VXYXJuaW5nU3RhdHVzLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5XQVJOSU5HKSB7Ci0JCQlyZXR1cm4gc2VydmljZVdhcm5pbmdTdGF0dXM7Ci0JCX0KLQotCQkvLyAyLiBDaGVjayBmb3Igd2FybmluZ3Mgb24gdGhlIGNsaWVudCBzaWRlIGlmIGl0J3MgZW5hYmxlZAotCQlpZiAoY2xpZW50V2lkZ2V0Xy5nZXRHZW5lcmF0ZVByb3h5KCkpIHsKLQkJCUlTdGF0dXMgY2xpZW50V2FybmluZ1N0YXR1cyA9IGNsaWVudFdpZGdldF8uY2hlY2tXYXJuaW5nU3RhdHVzKCk7Ci0JCQlpZiAoY2xpZW50V2FybmluZ1N0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuV0FSTklORykgewotCQkJCXJldHVybiBjbGllbnRXYXJuaW5nU3RhdHVzOwotCQkJfQotCi0JCQkvLyAzLiBDaGVjayBmb3Igd2FybmluZ3MgdGhhdCBzcGFuIHNlcnZpY2UgYW5kIGNsaWVudCBpZiBjbGllbnQgc2lkZQotCQkJLy8gaXMgZW5hYmxlZC4KLQkJCWludCBjbGllbnRWYWxpZGF0aW9uU3RhdGUgPSBjbGllbnRXaWRnZXRfLmdldFZhbGlkYXRpb25TdGF0ZSgpOwotCQkJaWYgKHZhbGlkYXRpb25TdGF0ZV8gPT0gVmFsaWRhdGlvblV0aWxzLlZBTElEQVRFX0FMTAotCQkJCQl8fCB2YWxpZGF0aW9uU3RhdGVfID09IFZhbGlkYXRpb25VdGlscy5WQUxJREFURV9QUk9KRUNUX0NIQU5HRVMKLQkJCQkJfHwgY2xpZW50VmFsaWRhdGlvblN0YXRlID09IFZhbGlkYXRpb25VdGlscy5WQUxJREFURV9BTEwKLQkJCQkJfHwgY2xpZW50VmFsaWRhdGlvblN0YXRlID09IFZhbGlkYXRpb25VdGlscy5WQUxJREFURV9QUk9KRUNUX0NIQU5HRVMpIHsKLQkJCQlpZiAoZ2V0U2VydmljZU5lZWRFQVIoKSAmJiBjbGllbnRXaWRnZXRfLmdldENsaWVudE5lZWRFQVIoKSkgewotCQkJCQlpZiAoZ2V0U2VydmljZUVhclByb2plY3ROYW1lKCkuZXF1YWxzKGNsaWVudFdpZGdldF8uZ2V0Q2xpZW50RWFyUHJvamVjdE5hbWUoKSkpIHsKLQkJCQkJCXJldHVybiBTdGF0dXNVdGlscy53YXJuaW5nU3RhdHVzKE5MUy5iaW5kKAotCQkJCQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuTVNHX1NBTUVfQ0xJRU5UX0FORF9TRVJWSUNFX0VBUlMsCi0JCQkJCQkJCW5ldyBTdHJpbmdbXSB7ICJFQVIiIH0pKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQotCQl9Ci0KLQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JfQotCQkKLQlwcm90ZWN0ZWQgdm9pZCBpbml0SW1hZ2VSZWdpc3RyeSgpCi0JewotCQlpbWFnZVJlZ18gPSBuZXcgSW1hZ2VSZWdpc3RyeShEaXNwbGF5LmdldEN1cnJlbnQoKSk7Ci0JCQotCQlpbWFnZVJlZ18ucHV0KElDT05fU0NBTEVfQkdfMCwgV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4KLQkJCQkuZ2V0SW1hZ2VEZXNjcmlwdG9yKElDT05fU0NBTEVfQkdfMCkpOwotCQlpbWFnZVJlZ18ucHV0KElDT05fU0NBTEVfQkdfMSwgV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4KLQkJCQkuZ2V0SW1hZ2VEZXNjcmlwdG9yKElDT05fU0NBTEVfQkdfMSkpOwotCQlpbWFnZVJlZ18ucHV0KElDT05fU0NBTEVfQkdfMiwgV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4KLQkJCQkuZ2V0SW1hZ2VEZXNjcmlwdG9yKElDT05fU0NBTEVfQkdfMikpOwotCQlpbWFnZVJlZ18ucHV0KElDT05fU0NBTEVfQkdfMywgV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4KLQkJCQkuZ2V0SW1hZ2VEZXNjcmlwdG9yKElDT05fU0NBTEVfQkdfMykpOwotCQlpbWFnZVJlZ18ucHV0KElDT05fU0NBTEVfQkdfNCwgV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4KLQkJCQkuZ2V0SW1hZ2VEZXNjcmlwdG9yKElDT05fU0NBTEVfQkdfNCkpOwotCQlpbWFnZVJlZ18ucHV0KElDT05fU0NBTEVfQkdfNSwgV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4KLQkJCQkuZ2V0SW1hZ2VEZXNjcmlwdG9yKElDT05fU0NBTEVfQkdfNSkpOwotCQlpbWFnZVJlZ18ucHV0KElDT05fU0NBTEVfQkdfNiwgV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4KLQkJCQkuZ2V0SW1hZ2VEZXNjcmlwdG9yKElDT05fU0NBTEVfQkdfNikpOwotCQkKLQkJaW1hZ2VSZWdfLnB1dChHUkFQSElDX1NFUlZJQ0VfMCwgV2ViU2VydmljZUNyZWF0aW9uVUlQbHVnaW4KLQkJCQkuZ2V0SW1hZ2VEZXNjcmlwdG9yKEdSQVBISUNfU0VSVklDRV8wKSk7Ci0JCWltYWdlUmVnXy5wdXQoR1JBUEhJQ19TRVJWSUNFXzEsIFdlYlNlcnZpY2VDcmVhdGlvblVJUGx1Z2luCi0JCQkJLmdldEltYWdlRGVzY3JpcHRvcihHUkFQSElDX1NFUlZJQ0VfMSkpOwotCQlpbWFnZVJlZ18ucHV0KEdSQVBISUNfU0VSVklDRV8yLCBXZWJTZXJ2aWNlQ3JlYXRpb25VSVBsdWdpbgotCQkJCS5nZXRJbWFnZURlc2NyaXB0b3IoR1JBUEhJQ19TRVJWSUNFXzIpKTsKLQkJaW1hZ2VSZWdfLnB1dChHUkFQSElDX1NFUlZJQ0VfMywgV2ViU2VydmljZUNyZWF0aW9uVUlQbHVnaW4KLQkJCQkuZ2V0SW1hZ2VEZXNjcmlwdG9yKEdSQVBISUNfU0VSVklDRV8zKSk7Ci0JCWltYWdlUmVnXy5wdXQoR1JBUEhJQ19TRVJWSUNFXzQsIFdlYlNlcnZpY2VDcmVhdGlvblVJUGx1Z2luCi0JCQkJLmdldEltYWdlRGVzY3JpcHRvcihHUkFQSElDX1NFUlZJQ0VfNCkpOwotCQlpbWFnZVJlZ18ucHV0KEdSQVBISUNfU0VSVklDRV81LCBXZWJTZXJ2aWNlQ3JlYXRpb25VSVBsdWdpbgotCQkJCS5nZXRJbWFnZURlc2NyaXB0b3IoR1JBUEhJQ19TRVJWSUNFXzUpKTsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIHNldEFkdmFuY2VkT3B0aW9ucyhib29sZWFuIGVuYWJsZWQpCi0JewotCQltb25pdG9yQnV0dG9uXy5zZXRFbmFibGVkKGVuYWJsZWQpOyAKLQkJcHVibGlzaEJ1dHRvbl8uc2V0RW5hYmxlZChlbmFibGVkKTsJCQotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlUHJvamVjdE5hbWUoU3RyaW5nIG5hbWUpCi0JICB7Ci0JCXNlcnZpY2VQcm9qZWN0TmFtZV89IG5hbWU7Ci0JCWhMaW5rU2VydmljZVByb2plY3RfLnNldFRleHQoU0VSVklDRV9QUk9KRUNUX1BSRUZJWCArICIgIiArIHNlcnZpY2VQcm9qZWN0TmFtZV8pOwotCQloTGlua1NlcnZpY2VQcm9qZWN0Xy5wYWNrKHRydWUpOwotCQlwYWNrU2VsZigpOwkKLQkgIH0KLQkKLQkgcHVibGljIHZvaWQgc2V0U2VydmljZUVhclByb2plY3ROYW1lKFN0cmluZyBuYW1lKQotCSAgewkgIAotCQkgc2VydmljZUVhclByb2plY3ROYW1lXyA9IG5hbWU7Ci0JCSByZWZyZXNoRUFSTGluaygpOwotCSAgfQotCSAKLQkgIHB1YmxpYyB2b2lkIHJlZnJlc2hFQVJMaW5rKCkKLQkgIHsKLQkJICBoTGlua1NlcnZpY2VFQVJfLnNldFZpc2libGUobmVlZEVhcl8pOyAKLQkJICBpZiAobmVlZEVhcl8pCi0JCSAgewkJCSAKLQkJCSAgaExpbmtTZXJ2aWNlRUFSXy5zZXRUZXh0KFNFUlZJQ0VfRUFSX1BSRUZJWCArICIgIiArIHNlcnZpY2VFYXJQcm9qZWN0TmFtZV8pOwotCQkJICBoTGlua1NlcnZpY2VFQVJfLnBhY2sodHJ1ZSk7Ci0JCQkgIHBhY2tTZWxmKCk7Ci0JCSAgfQotCSAgfQotCSBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlQ29tcG9uZW50VHlwZSggU3RyaW5nIHR5cGUgKQotCSAgewotCQkgc2VydmljZUNvbXBvbmVudFR5cGVfID0gdHlwZTsKLQkgIH0KLQkgCi0JICBwdWJsaWMgdm9pZCBzZXRDbGllbnRQcm9qZWN0TmFtZShTdHJpbmcgbmFtZSkKLQkgIHsKLQkgICAgY2xpZW50V2lkZ2V0Xy5zZXRDbGllbnRQcm9qZWN0TmFtZShuYW1lKTsgIAotCSAgfSAgCi0JICAKLQkgIHB1YmxpYyB2b2lkIHNldENsaWVudEVhclByb2plY3ROYW1lKFN0cmluZyBuYW1lKQotCSAgewotCSAgICBjbGllbnRXaWRnZXRfLnNldENsaWVudEVhclByb2plY3ROYW1lKG5hbWUpOyAgCi0JICB9Ci0JICAKLQkgIElQcm9qZWN0IHByb2plY3RfOwotCSAgCi0JICBwdWJsaWMgU3RyaW5nIGdldFNlcnZpY2VDb21wb25lbnRUeXBlKCkKLQkgIHsKLQkJICByZXR1cm4gc2VydmljZUNvbXBvbmVudFR5cGVfOwotCSAgfQotCSAgCi0JICBwdWJsaWMgdm9pZCBzZXRDbGllbnRDb21wb25lbnRUeXBlKFN0cmluZyB0eXBlKQotCSAgewotCQkgIGNsaWVudFdpZGdldF8uc2V0Q2xpZW50Q29tcG9uZW50VHlwZSh0eXBlKTsKLQkgIH0KLQkgIAotCSAgcHVibGljIFN0cmluZyBnZXRDbGllbnRDb21wb25lbnRUeXBlKCkKLQkgIHsKLQkJICByZXR1cm4gY2xpZW50V2lkZ2V0Xy5nZXRDbGllbnRDb21wb25lbnRUeXBlKCk7Ci0JICB9Ci0JIAotCSAgcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlUHJvamVjdE5hbWUoKQotCSAgewotCQkgIHJldHVybiBzZXJ2aWNlUHJvamVjdE5hbWVfOwotCSAgfQotCSAgCi0JICBwdWJsaWMgU3RyaW5nIGdldFNlcnZpY2VFYXJQcm9qZWN0TmFtZSgpCi0JICB7Ci0JCSAgcmV0dXJuIHNlcnZpY2VFYXJQcm9qZWN0TmFtZV87Ci0JICB9Ci0JICAKLQkgIHB1YmxpYyB2b2lkIHNldENsaWVudFByb2plY3QoSVByb2plY3QgcHJvamVjdCkKLQkgIHsKLQkJICBjbGllbnRXaWRnZXRfLnNldFByb2plY3QocHJvamVjdCk7Ci0JICB9Ci0JICAKLQkgIHByaXZhdGUgSVByb2plY3QgZ2V0Q2xpZW50UHJvamVjdCgpCi0JICB7Ci0JCSAgcmV0dXJuIGNsaWVudFdpZGdldF8uZ2V0UHJvamVjdCgpOyAKLQkgIH0KLQkgIAotCSAgcHVibGljIHZvaWQgc2V0UHJvamVjdChJUHJvamVjdCBwcm9qZWN0KQotCSAgewotCQkgIHByb2plY3RfID0gcHJvamVjdDsKLQkgIH0JICAKLQkgIAkgIAotCSAgcHVibGljIElQcm9qZWN0IGdldFByb2plY3QoKQotCSAgewotCQkgIHJldHVybiBwcm9qZWN0XzsKLQkgIH0KLQkgIAotCSAgcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlUnVudGltZUlkKCkKLQkgIHsKLQkJICAvLyBjYWxjdWxhdGUgdGhlIG1vc3QgYXBwcm9wcmlhdGUgc2VydmljZVJ1bnRpbWVJZCBiYXNlZCBvbiBjdXJyZW50IHNldHRpbmdzLgotCQkgIHJldHVybiBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTZXJ2aWNlUnVudGltZUlkKGdldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcigpLCBnZXRTZXJ2aWNlUHJvamVjdE5hbWUoKSwgZ2V0U2VydmljZUNvbXBvbmVudFR5cGUoKSk7ICAgIAotCSAgfQotCSAgCi0JICBwdWJsaWMgU3RyaW5nIGdldENsaWVudFJ1bnRpbWVJZCgpCi0JICB7Ci0JCSAgcmV0dXJuIGNsaWVudFdpZGdldF8uZ2V0Q2xpZW50UnVudGltZUlkKCk7Ci0JICB9Ci0JICAKLQkgIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VOZWVkRUFSKGJvb2xlYW4gYikKLQkgIHsKLQkJICBuZWVkRWFyXyA9IGI7Ci0JCSAgcmVmcmVzaEVBUkxpbmsoKTsKLQkgIH0KLQkgIAotCSAgcHVibGljIGJvb2xlYW4gZ2V0U2VydmljZU5lZWRFQVIoKQotCSAgewotCQkgIHJldHVybiBuZWVkRWFyXzsKLQkgIH0KLQkgIAotCSAgcHVibGljIHZvaWQgc2V0Q2xpZW50TmVlZEVBUihib29sZWFuIGIpCi0JICB7Ci0JICAgIGNsaWVudFdpZGdldF8uc2V0Q2xpZW50TmVlZEVBUihiKTsKLQkgIH0JICAKLQkgIAotCSAgcHVibGljIGJvb2xlYW4gZ2V0Q2xpZW50TmVlZEVBUigpCi0JICB7Ci0JCSAgcmV0dXJuIGNsaWVudFdpZGdldF8uZ2V0Q2xpZW50TmVlZEVBUigpOwotCSAgfQotCSAgCi0JICAvLyBsb29rcyB0aHJvdWdoIGV4dGVuc2lvbnMgYW5kIHJldHVybnMgdGhlIGFwcHJvcHJpYXRlIHNlbGVjdGlvbiB3aWRnZXQKLQkgIHByaXZhdGUgT2JqZWN0IGdldFNlbGVjdGlvbldpZGdldCgpCi0JICB7Ci0JCQlTdHJpbmcgICAgICAgICB3c3QgICAgICA9IGdldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcigpLmdldFR5cGVJZCgpOwotCQkJaW50ICAgICAgICAgICAgc2NlbmFyaW8gPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTY2VuYXJpb0Zyb21UeXBlSWQod3N0KTsKLQkJCVN0cmluZyAgICAgICAgIGltcGxJZCAgID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0V2ViU2VydmljZUltcGxJZEZyb21UeXBlSWQod3N0KTsKLQkJICBXZWJTZXJ2aWNlSW1wbCB3c2ltcGwgICA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldFdlYlNlcnZpY2VJbXBsQnlJZChpbXBsSWQpOwotICAgICAgT2JqZWN0ICAgICAgICAgcmVzdWx0ICAgPSBudWxsOwotICAgICAgICAKLQkJICAgIAotCQkgIGlmICh3c2ltcGwgIT0gbnVsbCkKLQkJICB7Ci0JCSAgICBTdHJpbmcgb2JqZWN0U2VsZWN0aW9uV2lkZ2V0SWQgPSBudWxsOwotCQkgICAgaWYgKHNjZW5hcmlvID09IFdlYlNlcnZpY2VTY2VuYXJpby5UT1BET1dOKQotCQkgICAgewotCQkgICAgICBvYmplY3RTZWxlY3Rpb25XaWRnZXRJZCA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5vYmplY3QuV1NETFNlbGVjdGlvbldpZGdldCI7Ci0JCSAgICB9Ci0JCSAgICBlbHNlCi0JCSAgICB7Ci0JCSAgICAgIG9iamVjdFNlbGVjdGlvbldpZGdldElkID0gd3NpbXBsLmdldE9iamVjdFNlbGVjdGlvbldpZGdldCgpOwotCQkgICAgfQotICAgICAgICAKLSAgICAgICAgT2JqZWN0U2VsZWN0aW9uUmVnaXN0cnkgcmVnaXN0cnkgPSBPYmplY3RTZWxlY3Rpb25SZWdpc3RyeS5nZXRJbnN0YW5jZSgpOwotICAgICAgICBib29sZWFuIGVkaXRhYmxlID0gcmVnaXN0cnkuZ2V0RXh0ZXJuYWxNb2RpZnkoIG9iamVjdFNlbGVjdGlvbldpZGdldElkICk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgIHNlcnZpY2VJbXBsXy5zZXRFZGl0YWJsZSggZWRpdGFibGUgKTsKLSAgICAgICAgcmVzdWx0ID0gcmVnaXN0cnkuZ2V0U2VsZWN0aW9uV2lkZ2V0KCBvYmplY3RTZWxlY3Rpb25XaWRnZXRJZCApOwotICAgICAgfQotICAgICAgCi0JCSAgcmV0dXJuIHJlc3VsdDsKLQkgIH0KLQkgCi0JLy8gZm9yIHRoZSBwdXJwb3NlcyBvZiBkaXNhYmxpbmcgdGhlIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gY29udHJvbHMgZnJvbSB0aGUgcHJlZmVyZW5jZXMgZGlhbG9nCi0JcHVibGljIHZvaWQgZGlzYWJsZU5vblByZWZlcmVuY2VXaWRnZXRzKCkKLQl7Ci0JCWlmIChzZXJ2aWNlSW1wbF8gIT0gbnVsbCkKLQkJCXNlcnZpY2VJbXBsXy5zZXRFbmFibGVkKGZhbHNlKTsKLQkJaWYgKGJyb3dzZUJ1dHRvbl8gIT0gbnVsbCkKLQkJCWJyb3dzZUJ1dHRvbl8uc2V0RW5hYmxlZChmYWxzZSk7Ci0JCWlmIChoQ29tcFNlcnZpY2VfICE9IG51bGwpCi0JCXsKLQkJCWhDb21wU2VydmljZV8uc2V0VmlzaWJsZShmYWxzZSk7CQkJCi0JCX0KLQkJY2xpZW50V2lkZ2V0Xy5kaXNhYmxlTm9uUHJlZmVyZW5jZVdpZGdldHMoKTsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIHNldEdyYXBoaWNzKGludCB2YWx1ZSkKLQl7Ci0JCVN0cmluZyBpY29uSW1hZ2UgPSAiIjsKLQkJU3RyaW5nIHRvcGxvZ3lJbWFnZSA9ICIiOwotCQlzd2l0Y2ggKHZhbHVlKSB7Ci0JCWNhc2UgMDoKLQkJCWljb25JbWFnZT1JQ09OX1NDQUxFX0JHXzA7Ci0JCQl0b3Bsb2d5SW1hZ2U9R1JBUEhJQ19TRVJWSUNFXzA7Ci0JCQlicmVhazsKLQkJY2FzZSAxOgotCQkJaWNvbkltYWdlPUlDT05fU0NBTEVfQkdfMTsKLQkJCXRvcGxvZ3lJbWFnZT1HUkFQSElDX1NFUlZJQ0VfMTsKLQkJCWJyZWFrOwotCQljYXNlIDI6Ci0JCQlpY29uSW1hZ2U9SUNPTl9TQ0FMRV9CR18yOwotCQkJdG9wbG9neUltYWdlPUdSQVBISUNfU0VSVklDRV8yOwotCQkJYnJlYWs7Ci0JCWNhc2UgMzoKLQkJCWljb25JbWFnZT1JQ09OX1NDQUxFX0JHXzM7Ci0JCQl0b3Bsb2d5SW1hZ2U9R1JBUEhJQ19TRVJWSUNFXzM7Ci0JCQlicmVhazsKLQkJY2FzZSA0OgotCQkJaWNvbkltYWdlPUlDT05fU0NBTEVfQkdfNDsKLQkJCXRvcGxvZ3lJbWFnZT1HUkFQSElDX1NFUlZJQ0VfNDsKLQkJCWJyZWFrOwotCQljYXNlIDU6CQkJCQkKLQkJY2FzZSA2OgotCQkJaWNvbkltYWdlPUlDT05fU0NBTEVfQkdfNTsKLQkJCXRvcGxvZ3lJbWFnZT1HUkFQSElDX1NFUlZJQ0VfNTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJYnJlYWs7Ci0JCX0KLQkJc2VydmljZVNjYWxlXy5zZXRCYWNrZ3JvdW5kSW1hZ2UoaW1hZ2VSZWdfLmdldChpY29uSW1hZ2UpKTsKLQkJdG9wb2xvZ3lTcG90Xy5zZXRJbWFnZShpbWFnZVJlZ18uZ2V0KHRvcGxvZ3lJbWFnZSkpOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgcmVmcmVzaFNlcnZlclJ1bnRpbWVTZWxlY3Rpb24oKQotCXsJCQotCQkvL25ldyB1cCBTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQKLQkJU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kIHNlcnZlclJURGVmYXVsdENtZCA9IG5ldyBTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQoKTsKLQkJCi0JCSAgLy9jYWxsIHNldHRlcnMgb2YgbmV3IGRlZmF1bHRpbmcgY29tbWFuZDoKLQkgICAgICBzZXJ2ZXJSVERlZmF1bHRDbWQuc2V0SW5pdGlhbFNlbGVjdGlvbihnZXRPYmplY3RTZWxlY3Rpb24oKSk7Ci0JICAgICAgc2VydmVyUlREZWZhdWx0Q21kLnNldEluaXRpYWxQcm9qZWN0KGdldFByb2plY3QoKSk7Ci0JICAgICAgc2VydmVyUlREZWZhdWx0Q21kLnNldEdlbmVyYXRlUHJveHkoY2xpZW50V2lkZ2V0Xy5nZXRHZW5lcmF0ZVByb3h5KCkpOwotCSAgICAgIHNlcnZlclJURGVmYXVsdENtZC5zZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoZ2V0U2VydmljZVR5cGVSdW50aW1lU2VydmVyKCkpOwotCQkgIHNlcnZlclJURGVmYXVsdENtZC5zZXRXZWJTZXJ2aWNlc1BhcnNlcihnZXRXZWJTZXJ2aWNlc1BhcnNlcigpKTsgICAgIAotCQkgIHNlcnZlclJURGVmYXVsdENtZC5zZXRDbGllbnRJbml0aWFsU2VsZWN0aW9uKGdldE9iamVjdFNlbGVjdGlvbigpKTsKLQkgICAgICBzZXJ2ZXJSVERlZmF1bHRDbWQuc2V0Q2xpZW50SW5pdGlhbFByb2plY3QoZ2V0Q2xpZW50UHJvamVjdCgpKTsKLQkgICAgICBzZXJ2ZXJSVERlZmF1bHRDbWQuc2V0Q2xpZW50RWFyUHJvamVjdE5hbWUoY2xpZW50V2lkZ2V0Xy5nZXRDbGllbnRFYXJQcm9qZWN0TmFtZSgpKTsKLQkJICBzZXJ2ZXJSVERlZmF1bHRDbWQuc2V0Q2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIoZ2V0Q2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIoKSk7Ci0JCSAgCQkgIAotCQkgIHNlcnZlclJURGVmYXVsdENtZC5leGVjdXRlKG51bGwsIG51bGwpOwotCQkgIAotCQkgIC8vcGVyZm9ybSBtYXBwaW5ncyBmcm9tIHRoZSBkZWZhdWx0aW5nIGNvbW1hbmQgdG8gdGhlIHByb2plY3Qgc2V0dGluZ3MuLi4JCi0JCSAgc2V0U2VydmljZVByb2plY3ROYW1lKHNlcnZlclJURGVmYXVsdENtZC5nZXRTZXJ2aWNlUHJvamVjdE5hbWUoKSk7Ci0JCSAgc2V0U2VydmljZUVhclByb2plY3ROYW1lKHNlcnZlclJURGVmYXVsdENtZC5nZXRTZXJ2aWNlRWFyUHJvamVjdE5hbWUoKSk7Ci0JCSAgc2V0U2VydmljZUNvbXBvbmVudFR5cGUoc2VydmVyUlREZWZhdWx0Q21kLmdldFNlcnZpY2VDb21wb25lbnRUeXBlKCkpOwotCQkgIHNldENsaWVudFByb2plY3ROYW1lKHNlcnZlclJURGVmYXVsdENtZC5nZXRDbGllbnRQcm9qZWN0TmFtZSgpKTsKLQkJICBzZXRDbGllbnRFYXJQcm9qZWN0TmFtZShzZXJ2ZXJSVERlZmF1bHRDbWQuZ2V0Q2xpZW50RWFyUHJvamVjdE5hbWUoKSk7Ci0JCSAgc2V0U2VydmljZVR5cGVSdW50aW1lU2VydmVyKHNlcnZlclJURGVmYXVsdENtZC5nZXRTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIoKSk7Ci0gICAgICAgICAgc2V0Q2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIoc2VydmVyUlREZWZhdWx0Q21kLmdldENsaWVudFR5cGVSdW50aW1lU2VydmVyKCkpOwotICAgICAgICAgIHNldFNlcnZpY2VOZWVkRUFSKHNlcnZlclJURGVmYXVsdENtZC5nZXRTZXJ2aWNlTmVlZEVBUigpKTsKLSAgICAgICAgICBzZXRDbGllbnROZWVkRUFSKHNlcnZlclJURGVmYXVsdENtZC5nZXRDbGllbnROZWVkRUFSKCkpOwotICAgICAgICAgIHNldENsaWVudENvbXBvbmVudFR5cGUoc2VydmVyUlREZWZhdWx0Q21kLmdldENsaWVudENvbXBvbmVudFR5cGUoKSk7Ci0JfQotCQotCS8qKgotCSAqICBVcGRhdGUgY2xpZW50IHNlcnZlciBhbmQgcnVudGltZSBiYXNlZCBvbiBzZXJ2aWNlIHNpZGUKLQkgKi8KLQlwcml2YXRlIHZvaWQgcmVmcmVzaENsaWVudFNlcnZlclJ1bnRpbWVTZWxlY3Rpb24oKQotCXsJCi0JCVR5cGVSdW50aW1lU2VydmVyIGNsaWVudFR5cGVSdW50aW1lc2VydmVyID0gZ2V0Q2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIoKTsKLQkJY2xpZW50VHlwZVJ1bnRpbWVzZXJ2ZXIuc2V0UnVudGltZUlkKGdldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcigpLmdldFJ1bnRpbWVJZCgpKTsKLQkJY2xpZW50VHlwZVJ1bnRpbWVzZXJ2ZXIuc2V0U2VydmVySWQoZ2V0U2VydmljZVR5cGVSdW50aW1lU2VydmVyKCkuZ2V0U2VydmVySWQoKSk7Ci0JCWNsaWVudFR5cGVSdW50aW1lc2VydmVyLnNldFNlcnZlckluc3RhbmNlSWQoZ2V0U2VydmljZVR5cGVSdW50aW1lU2VydmVyKCkuZ2V0U2VydmVySW5zdGFuY2VJZCgpKTsKLQkJc2V0Q2xpZW50VHlwZVJ1bnRpbWVTZXJ2ZXIoY2xpZW50VHlwZVJ1bnRpbWVzZXJ2ZXIpOwotCX0JCi0JCQotCQotCXByaXZhdGUgdm9pZCBjYWxsT2JqZWN0VHJhbnNmb3JtYXRpb24oSVN0cnVjdHVyZWRTZWxlY3Rpb24gb2JqZWN0U2VsZWN0aW9uLAotCQkJSVByb2plY3QgcHJvamVjdCwgU3RyaW5nIGNvbXBvbmVudE5hbWUsIGJvb2xlYW4gcmVmcmVzaFJ1bnRpbWUpCi0JewotCQlPYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kIG9iak91dHB1dENvbW1hbmQgPSBuZXcgT2JqZWN0U2VsZWN0aW9uT3V0cHV0Q29tbWFuZCgpOwotCQkgICBvYmpPdXRwdXRDb21tYW5kLnNldFR5cGVSdW50aW1lU2VydmVyKGdldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcigpKTsKLQkJICAgb2JqT3V0cHV0Q29tbWFuZC5zZXRPYmplY3RTZWxlY3Rpb24ob2JqZWN0U2VsZWN0aW9uKTsKLQkgICAgICAgb2JqT3V0cHV0Q29tbWFuZC5zZXRQcm9qZWN0KHByb2plY3QpOwotCSAgICAgICBvYmpPdXRwdXRDb21tYW5kLnNldENvbXBvbmVudE5hbWUoY29tcG9uZW50TmFtZSk7CQkJICAgCi0JICAgICAgIAotCSAgICAgICBvYmpPdXRwdXRDb21tYW5kLmV4ZWN1dGUobnVsbCwgbnVsbCk7Ci0gICAgICAgIAotCSAgICAgICBzZXRXZWJTZXJ2aWNlc1BhcnNlcihvYmpPdXRwdXRDb21tYW5kLmdldFdlYlNlcnZpY2VzUGFyc2VyKCkpOwotCSAgICAgICBzZXRPYmplY3RTZWxlY3Rpb24ob2JqT3V0cHV0Q29tbWFuZC5nZXRPYmplY3RTZWxlY3Rpb24oKSk7Ci0JICAgICAgIHNldFByb2plY3Qob2JqT3V0cHV0Q29tbWFuZC5nZXRQcm9qZWN0KCkpOyAgICAgIAkJICAgICAgIAotCSAgICAgICAKLQkgICAgICAgaWYgKHJlZnJlc2hSdW50aW1lIHx8IGZvcmNlUmVmcmVzaFJ1bnRpbWUpCi0JICAgIAkgICByZWZyZXNoU2VydmVyUnVudGltZVNlbGVjdGlvbigpOyAgCi0JICAgICAgIAotCSAgICAgICBmb3JjZVJlZnJlc2hSdW50aW1lID0gZmFsc2U7Ci0JfQotCQotCXByaXZhdGUgY2xhc3MgU2NhbGVTZWxlY3Rpb25MaXN0ZW5lciBpbXBsZW1lbnRzIFNlbGVjdGlvbkxpc3RlbmVyCi0JewotCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7CQkJCi0JCQkgICAgCi0JCQkgICAgU2NhbGUgc2NhbGUgPSAoU2NhbGUpZS53aWRnZXQ7Ci0JCQkJaW50IHNlbGVjdGlvbiA9IHNjYWxlLmdldFNlbGVjdGlvbigpOwotCQkJCQotCQkJCS8vVE9ETzogY2hhbmdlIHRoZSBoYXJkIGNvZGVkIGludGVnZXJzIGhlcmUgdG8gdGhlIHRoZSBTY2VuYXJpb0NvbnRleHQuV1NfeHh4IHdoZW4gaW4gbGVzcyBjcml0aWNhbCBwaGFzZQotCQkJCXN3aXRjaCAoc2VsZWN0aW9uKSB7Ci0JCQkJY2FzZSAwOgotCQkJCQlzZXJ2aWNlU2NhbGVfLnNldFRvb2xUaXBUZXh0KENvbnN1bXB0aW9uVUlNZXNzYWdlcy5UT09MVElQX1dTV1NDRU5fU0NBTEVfVEVTVCk7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgMToKLQkJCQkJc2VydmljZVNjYWxlXy5zZXRUb29sVGlwVGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX1JVTik7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgMjoKLQkJCQkJc2VydmljZVNjYWxlXy5zZXRUb29sVGlwVGV4dChDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9XU1dTQ0VOX1NDQUxFX0lOU1RBTEwpOwotCQkJCQlicmVhazsKLQkJCQljYXNlIDM6Ci0JCQkJCXNlcnZpY2VTY2FsZV8uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9ERVBMT1kpOwotCQkJCQlicmVhazsKLQkJCQljYXNlIDQ6Ci0JCQkJCXNlcnZpY2VTY2FsZV8uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9BU1NFTUJMRSk7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgNToJCQkJCQotCQkJCWNhc2UgNjoKLQkJCQkJc2VydmljZVNjYWxlXy5zZXRTZWxlY3Rpb24oU2NlbmFyaW9Db250ZXh0LldTX0RFVkVMT1ApOyAvLyJubyBzZWxlY3Rpb24iIGlzIG5vdCBhbGxvd2VkLi4ubXVzdCBkZXZlbG9wIHNlcnZpY2UgQCBtaW5pbXVtCi0JCQkJCXNlcnZpY2VTY2FsZV8uc2V0VG9vbFRpcFRleHQoQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlRPT0xUSVBfV1NXU0NFTl9TQ0FMRV9ERVZFTE9QKTsKLQkJCQkJLy9yZXNldCBsb2NhbCBzZWxlY3Rpb24gc28gdGhhdCBzZXR0ZXJzIGdldCBjb3JyZWN0IHZhbHVlIGJlbG93Ci0JCQkJCXNlbGVjdGlvbiA9IFNjZW5hcmlvQ29udGV4dC5XU19ERVZFTE9QOwotCQkJCQlicmVhazsKLQkJCQlkZWZhdWx0OgotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJCi0JCQkJc2V0RGV2ZWxvcFNlcnZpY2Uoc2VsZWN0aW9uIDw9IFNjZW5hcmlvQ29udGV4dC5XU19ERVZFTE9QKTsKLQkJCQlzZXRBc3NlbWJsZVNlcnZpY2Uoc2VsZWN0aW9uIDw9IFNjZW5hcmlvQ29udGV4dC5XU19BU1NFTUJMRSk7Ci0JCQkJc2V0RGVwbG95U2VydmljZShzZWxlY3Rpb24gPD0gU2NlbmFyaW9Db250ZXh0LldTX0RFUExPWSk7Ci0JCQkJCi0JCQkJc2V0VGVzdFNlcnZpY2UobmV3IEJvb2xlYW4oc2VsZWN0aW9uIDw9IFNjZW5hcmlvQ29udGV4dC5XU19URVNUKSk7Ci0JCQkJc2V0SW5zdGFsbFNlcnZpY2UobmV3IEJvb2xlYW4oc2VsZWN0aW9uIDw9IFNjZW5hcmlvQ29udGV4dC5XU19JTlNUQUxMKSk7Ci0JCQkJc2V0U3RhcnRTZXJ2aWNlKG5ldyBCb29sZWFuKHNlbGVjdGlvbiA8PSBTY2VuYXJpb0NvbnRleHQuV1NfU1RBUlQpKTsKLQkJCQlzZXRBZHZhbmNlZE9wdGlvbnMoc2VsZWN0aW9uIDw9IFNjZW5hcmlvQ29udGV4dC5XU19JTlNUQUxMKTsKLQkJCQljbGllbnRXaWRnZXRfLmVuYWJsZUNsaWVudFNsaWRlcihzZWxlY3Rpb24gPD0gU2NlbmFyaW9Db250ZXh0LldTX1NUQVJUKTsKLQkJCQkKLQkJCQlzZXRHcmFwaGljcyhzZWxlY3Rpb24pOwotCQkJCQotCQkJCS8vVmFsaWRhdGUgdGhlIHBhZ2UKLQkJCQl2YWxpZGF0aW9uU3RhdGVfID0gKG5ldyBWYWxpZGF0aW9uVXRpbHMoKSkuZ2V0TmV3VmFsaWRhdGlvblN0YXRlKHZhbGlkYXRpb25TdGF0ZV8sIFZhbGlkYXRpb25VdGlscy5WQUxJREFURV9TQ0FMRV9DSEFOR0VTKTsKLQkJCQlzdGF0dXNMaXN0ZW5lcl8uaGFuZGxlRXZlbnQobnVsbCk7Ci0JCQkJCi0JCQl9CQkKLQotCQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgewotCQkJd2lkZ2V0U2VsZWN0ZWQoZSk7Ci0JCX0KLQl9Ci0JCi0JcHJpdmF0ZSBjbGFzcyBTZXJ2aWNlSW1wbEJyb3dzZUxpc3RlbmVyIGltcGxlbWVudHMgU2VsZWN0aW9uTGlzdGVuZXIKLQl7Ci0JCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCQkJCi0JCX0KLQkJCi0JCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsgICAgIAotCQkJICAgCi0JCQkgIGlmIChvYmplY3RTZWxlY3Rpb25XaWRnZXRfID09IG51bGwpCi0JCQkJICAgb2JqZWN0U2VsZWN0aW9uV2lkZ2V0XyA9IGdldFNlbGVjdGlvbldpZGdldCgpOwotCQkJICAKLQkJCSAgIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIG9iamVjdFNlbGVjdGlvbiA9IG51bGw7Ci0JCQkgICBJUHJvamVjdCBwcm9qZWN0ID0gbnVsbDsKLQkJCSAgIFN0cmluZyBjb21wb25lbnROYW1lPSIiOwotCQkJICAgaW50IHJlc3VsdD1EaWFsb2cuQ0FOQ0VMOwotCQkJICAgCi0JCQkgICBpZiAob2JqZWN0U2VsZWN0aW9uV2lkZ2V0XyBpbnN0YW5jZW9mIElPYmplY3RTZWxlY3Rpb25MYXVuY2hhYmxlKQotCQkgICAgICAgeyAgICAgIAkKLQkJCQkgSU9iamVjdFNlbGVjdGlvbkxhdW5jaGFibGUgbGF1bmNoYWJsZSA9ICgoSU9iamVjdFNlbGVjdGlvbkxhdW5jaGFibGUpb2JqZWN0U2VsZWN0aW9uV2lkZ2V0Xyk7Ci0JCQkJIGxhdW5jaGFibGUuc2V0SW5pdGlhbFNlbGVjdGlvbihnZXRPYmplY3RTZWxlY3Rpb24oKSk7Ci0JCQkJIElXb3JrYmVuY2ggd29ya2JlbmNoID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKTsKLQkJICAgICAgICAgcmVzdWx0ID0gbGF1bmNoYWJsZS5sYXVuY2god29ya2JlbmNoLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldFNoZWxsKCkpOwotCQkgICAgICAgICBpZiAocmVzdWx0ID09IERpYWxvZy5PSykKLQkJICAgICAgICAgewotCQkgICAgICAgIAkgc2VydmljZUltcGxfLnJlbW92ZU1vZGlmeUxpc3RlbmVyKG9iamVjdE1vZGlmeUxpc3RlbmVyXyk7Ci0JCQkgICAgICAgICBzZXJ2aWNlSW1wbF8uc2V0VGV4dChsYXVuY2hhYmxlLmdldE9iamVjdFNlbGVjdGlvbkRpc3BsYXlhYmxlU3RyaW5nKCkpOwotCQkJICAgICAgICAgc2VydmljZUltcGxfLmFkZE1vZGlmeUxpc3RlbmVyKG9iamVjdE1vZGlmeUxpc3RlbmVyXyk7Ci0JCQkgICAgICAgICBvYmplY3RTZWxlY3Rpb24gPSBsYXVuY2hhYmxlLmdldE9iamVjdFNlbGVjdGlvbigpOwotCQkJICAgICAgICAgcHJvamVjdCA9IGxhdW5jaGFibGUuZ2V0UHJvamVjdCgpOwotCQkJICAgICAgICAgY29tcG9uZW50TmFtZT0gbGF1bmNoYWJsZS5nZXRDb21wb25lbnROYW1lKCk7Ci0JCSAgICAgICAgIH0KLQkJICAgICAgIH0KLQkJCSAgIGVsc2UKLQkJCSAgIHsKLQkJCQkgICBicm93c2VEaWFsb2dfLnNldFR5cGVSdW50aW1lU2VydmVyKGdldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcigpKTsKLQkJCQkgICBicm93c2VEaWFsb2dfLnNldEluaXRpYWxTZWxlY3Rpb24oZ2V0T2JqZWN0U2VsZWN0aW9uKCkpOwotCQkJICAgICAgIHJlc3VsdCA9IGJyb3dzZURpYWxvZ18ub3BlbigpOwotCQkJICAgICAgIGlmIChyZXN1bHQgPT0gRGlhbG9nLk9LKQotCQkJICAgICAgIHsKLQkJCSAgICAJICAgc2VydmljZUltcGxfLnJlbW92ZU1vZGlmeUxpc3RlbmVyKG9iamVjdE1vZGlmeUxpc3RlbmVyXyk7Ci0JCQkJICAgICAgIHNlcnZpY2VJbXBsXy5zZXRUZXh0KGJyb3dzZURpYWxvZ18uZ2V0RGlzcGxheWFibGVTZWxlY3Rpb25TdHJpbmcoKSk7IAotCQkJCSAgICAgICBzZXJ2aWNlSW1wbF8uYWRkTW9kaWZ5TGlzdGVuZXIob2JqZWN0TW9kaWZ5TGlzdGVuZXJfKTsKLQkJCQkgICAgICAgb2JqZWN0U2VsZWN0aW9uID0gYnJvd3NlRGlhbG9nXy5nZXRPYmplY3RTZWxlY3Rpb24oKTsKLQkJCQkgICAgICAgcHJvamVjdCA9IGJyb3dzZURpYWxvZ18uZ2V0UHJvamVjdCgpOwotCQkJCSAgICAgICBjb21wb25lbnROYW1lPSBicm93c2VEaWFsb2dfLmdldENvbXBvbmVudE5hbWUoKTsJCQkgICAgICAgCi0JCQkgICAgICAgfQotCQkJICAgfQotCQkJICAgCi0JCQkgICAvLyBjYWxsIE9iamVjdFNlbGVjdGlvbk91dHB1dENvbW1hbmQgdG8gY2Fycnkgb3V0IGFueSB0cmFuc2Zvcm1hdGlvbiBvbiB0aGUgb2JqZWN0U2VsZWN0aW9uCi0JCQkgICBpZiAocmVzdWx0ID09IERpYWxvZy5PSykKLQkJCSAgIHsKLQkJCQkgICBjYWxsT2JqZWN0VHJhbnNmb3JtYXRpb24ob2JqZWN0U2VsZWN0aW9uLCBwcm9qZWN0LCBjb21wb25lbnROYW1lLCBnZXRXZWJTZXJ2aWNlU2NlbmFyaW8oKSAhPSBXZWJTZXJ2aWNlU2NlbmFyaW8uVE9QRE9XTik7CQkJCSAgIAotCQkJICAgICAgIHZhbGlkYXRpb25TdGF0ZV8gPSBWYWxpZGF0aW9uVXRpbHMuVkFMSURBVEVfQUxMOwotCQkJICAgICAgIHN0YXR1c0xpc3RlbmVyXy5oYW5kbGVFdmVudChudWxsKTsgLy8gdmFsaWRhdGUgdGhlIHBhZ2UKLQkJCSAgIH0JCQkgICAKLQkgICAgfQotCX0KLQotCQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvd2lkZ2V0cy9TZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTg2MWU3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvd2lkZ2V0cy9TZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTk3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDUyNCAgIDE0MjYzNSBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKiAyMDA2MDUyOSAgIDE0MTQyMiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzAzMjcgICAxNzIzMzkga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLkNsaWVudFdpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LldlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZGF0YS5UeXBlUnVudGltZVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkudXRpbHMuQWRhcHRlclV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VTY2VuYXJpbzsKLQotcHVibGljIGNsYXNzIFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kIGV4dGVuZHMgQ2xpZW50V2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQKLXsgICAgCi0gIHByaXZhdGUgVHlwZVJ1bnRpbWVTZXJ2ZXIgdHlwZVJ1bnRpbWVTZXJ2ZXJfOwotICBwcml2YXRlIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGluaXRpYWxTZWxlY3Rpb25fOwotICBwcml2YXRlIGludCBzZXJ2aWNlR2VuZXJhdGlvbl87Ci0gIHByaXZhdGUgYm9vbGVhbiBkZXZlbG9wU2VydmljZV87Ci0gIHByaXZhdGUgYm9vbGVhbiBhc3NlbWJsZVNlcnZpY2VfOwotICBwcml2YXRlIGJvb2xlYW4gZGVwbG95U2VydmljZV87Ci0gIAotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgeyAgICAKLSAgCi0gICAgU3RyaW5nIHR5cGUgICAgICA9IGdldFNjZW5hcmlvQ29udGV4dCgpLmdldFdlYlNlcnZpY2VUeXBlKCk7Ci0gICAgU3RyaW5nIHJ1bnRpbWUgICA9IFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmdldERlZmF1bHRSdW50aW1lVmFsdWVGb3IoIHR5cGUgKTsKLQkKLSAgICBTdHJpbmcgZmFjdG9yeUlEID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0RGVmYXVsdFNlcnZlclZhbHVlRm9yKHR5cGUpOyAgICAKLSAgICB0eXBlUnVudGltZVNlcnZlcl8gPSBuZXcgVHlwZVJ1bnRpbWVTZXJ2ZXIoKTsKLSAgICAKLSAgICB0eXBlUnVudGltZVNlcnZlcl8uc2V0VHlwZUlkKCB0eXBlICk7Ci0gICAgdHlwZVJ1bnRpbWVTZXJ2ZXJfLnNldFJ1bnRpbWVJZCggcnVudGltZSApOwotICAgIHR5cGVSdW50aW1lU2VydmVyXy5zZXRTZXJ2ZXJJZCggZmFjdG9yeUlEICk7Ci0gICAgCi0gICAgLy9EZWZhdWx0IHRoZSB0eXBlSWQgZnJvbSB0aGUgaW5pdGlhbCBzZWxlY3Rpb24KLSAgICBTdHJpbmdbXSB0eXBlSWRzID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0V2ViU2VydmljZVR5cGVCeVNlbGVjdGlvbihpbml0aWFsU2VsZWN0aW9uXyk7Ci0KLSAgICBpZiAodHlwZUlkcyE9bnVsbCAmJiB0eXBlSWRzLmxlbmd0aD4wKQotICAgIHsKLSAgICAgIHR5cGVSdW50aW1lU2VydmVyXy5zZXRUeXBlSWQodHlwZUlkc1swXSk7Ci0gIH0gZWxzZSB7Ci0JICBpZiAoaW5pdGlhbFNlbGVjdGlvbl8gIT0gbnVsbCAmJiAhaW5pdGlhbFNlbGVjdGlvbl8uaXNFbXB0eSgpKQotCSAgeyAKLQkJICBPYmplY3QgaW5pdGlhbE9iamVjdCA9IGluaXRpYWxTZWxlY3Rpb25fLmdldEZpcnN0RWxlbWVudCgpOyAKLQkJICAvLyBpbml0aWFsT2JqZWN0IHdvdWxkIG5vdCBiZSBudWxsIHNpbmNlICFpbml0aWFsU2VsZWN0aW9uXy5pc0VtcHR5KCkKLQkJICBPYmplY3QgYWRhcHRlZE9iamVjdCA9IEFkYXB0ZXJVdGlscy5nZXRBZGFwdGVkT2JqZWN0KGluaXRpYWxPYmplY3QpOwotCQkgIGlmIChhZGFwdGVkT2JqZWN0ICE9IG51bGwpIHsKLQkJCSAgU3RyaW5nQnVmZmVyIGVudHJ5YnVmZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJCSAgZW50cnlidWZmLmFwcGVuZChTdHJpbmcudmFsdWVPZihXZWJTZXJ2aWNlU2NlbmFyaW8uVE9QRE9XTikpOwotCQkJICBlbnRyeWJ1ZmYuYXBwZW5kKCIvIik7Ci0JCQkgIGVudHJ5YnVmZi5hcHBlbmQoIm9yZy5lY2xpcHNlLmpzdC53cy53c0ltcGwuamF2YSIpOwotCQkJICBTdHJpbmcgZW50cnkgPSBlbnRyeWJ1ZmYudG9TdHJpbmcoKTsgICAgIAotCQkJICB0eXBlUnVudGltZVNlcnZlcl8uc2V0VHlwZUlkKGVudHJ5KTsKLQkJICB9Ci0JICB9Ci0gIH0KLSAgICAKLSAgICBzZXJ2aWNlR2VuZXJhdGlvbl8gPSBnZXRTY2VuYXJpb0NvbnRleHQoKS5nZXRHZW5lcmF0ZVdlYlNlcnZpY2UoKTsKLSAgICAJCi0JZGV2ZWxvcFNlcnZpY2VfID0gc2VydmljZUdlbmVyYXRpb25fIDw9IFNjZW5hcmlvQ29udGV4dC5XU19ERVZFTE9QOwotCWFzc2VtYmxlU2VydmljZV8gPSBzZXJ2aWNlR2VuZXJhdGlvbl8gPD0gU2NlbmFyaW9Db250ZXh0LldTX0FTU0VNQkxFOwotCWRlcGxveVNlcnZpY2VfID0gc2VydmljZUdlbmVyYXRpb25fIDw9IFNjZW5hcmlvQ29udGV4dC5XU19ERVBMT1k7Ci0gICAgCi0JZGVmYXVsdENsaWVudFNjYWxlKCk7Ci0JCi0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEluaXRpYWxTZWxlY3Rpb24oSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uKQotICB7Ci0gICAgaW5pdGlhbFNlbGVjdGlvbl8gPSBzZWxlY3Rpb247Ci0gIH0KLSAgCi0gIHB1YmxpYyBJU3RydWN0dXJlZFNlbGVjdGlvbiBnZXRJbml0aWFsU2VsZWN0aW9uKCkKLSAgewotICAgIHJldHVybiBpbml0aWFsU2VsZWN0aW9uXyA7Ci0gIH0KLSAgCi0gIElQcm9qZWN0IHByb2plY3RfOyAgCi0gIAotICBwdWJsaWMgSVByb2plY3QgZ2V0SW5pdGlhbFByb2plY3QoKQotICB7Ci0JICBpZiAocHJvamVjdF89PW51bGwpCi0JICB7Ci0JICAgIHByb2plY3RfID0gZ2V0UHJvamVjdEZyb21PYmplY3RTZWxlY3Rpb24oaW5pdGlhbFNlbGVjdGlvbl8pOwotCSAgfSAgCi0JICAKLQkgIHJldHVybiBwcm9qZWN0XzsKLSAgfQotICAKLSAgcHJpdmF0ZSBJUHJvamVjdCBnZXRQcm9qZWN0RnJvbU9iamVjdFNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pCi0gIHsKLSAgICBpZiAoc2VsZWN0aW9uICE9IG51bGwgJiYgc2VsZWN0aW9uLnNpemUoKSA9PSAxKQotICAgIHsKLSAgICAgIE9iamVjdCBvYmogPSBzZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCk7Ci0gICAgICBpZiAob2JqICE9IG51bGwpIAotICAgICAgewotICAgICAgICB0cnkKLSAgICAgICAgeyAKLSAgICAgICAgICBJUmVzb3VyY2UgcmVzb3VyY2UgPSBSZXNvdXJjZVV0aWxzLmdldFJlc291cmNlRnJvbVNlbGVjdGlvbihvYmopOwotICAgICAgICAgIGlmIChyZXNvdXJjZT09bnVsbCkgCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICBJUHJvamVjdCBwID0gUmVzb3VyY2VVdGlscy5nZXRQcm9qZWN0T2YocmVzb3VyY2UuZ2V0RnVsbFBhdGgoKSk7Ci0gICAgICAgICAgcmV0dXJuIHA7Ci0gICAgICAgIH0gY2F0Y2goQ29yZUV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0gICAgICAgIAotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgcHVibGljIFR5cGVSdW50aW1lU2VydmVyIGdldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcigpCi0gIHsgCi0gICAgcmV0dXJuIHR5cGVSdW50aW1lU2VydmVyXzsKLSAgfQotCi0gIHB1YmxpYyBCb29sZWFuIGdldEluc3RhbGxTZXJ2aWNlKCkKLSAgewotICAgIHJldHVybiBuZXcgQm9vbGVhbiggZ2V0U2NlbmFyaW9Db250ZXh0KCkuZ2V0SW5zdGFsbFdlYlNlcnZpY2UoKSApOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBCb29sZWFuIGdldFN0YXJ0U2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IEJvb2xlYW4oIGdldFNjZW5hcmlvQ29udGV4dCgpLmdldFN0YXJ0V2ViU2VydmljZSgpICk7ICAKLSAgfQotICAKLSAgcHVibGljIEJvb2xlYW4gZ2V0VGVzdFNlcnZpY2UoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBCb29sZWFuKCBnZXRTY2VuYXJpb0NvbnRleHQoKS5nZXRUZXN0V2ViU2VydmljZSgpICk7ICAKLSAgfQotICAKLSAgcHVibGljIEJvb2xlYW4gZ2V0UHVibGlzaFNlcnZpY2UoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBCb29sZWFuKCBnZXRTY2VuYXJpb0NvbnRleHQoKS5nZXRMYXVuY2hXZWJTZXJ2aWNlRXhwbG9yZXIoKSApOwotICB9Ci0KLSAgcHVibGljIEJvb2xlYW4gZ2V0R2VuZXJhdGVQcm94eSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IEJvb2xlYW4oIGdldFNjZW5hcmlvQ29udGV4dCgpLmdldEdlbmVyYXRlUHJveHkoKSApOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldFJ1blRlc3RDbGllbnQoKQotICB7Ci0gICAgcmV0dXJuICBnZXRTY2VuYXJpb0NvbnRleHQoKS5pc0xhdW5jaFNhbXBsZUVuYWJsZWQoKTsgIAotICB9Ci0gIAotICBwdWJsaWMgQm9vbGVhbiBnZXRNb25pdG9yU2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IEJvb2xlYW4oZ2V0U2NlbmFyaW9Db250ZXh0KCkuZ2V0TW9uaXRvcldlYlNlcnZpY2UoKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBpbnQgZ2V0U2VydmljZUdlbmVyYXRpb24oKQotICB7Ci0JICByZXR1cm4gc2VydmljZUdlbmVyYXRpb25fOwotICB9Ci0gIAotICBwdWJsaWMgaW50IGdldENsaWVudEdlbmVyYXRpb24oKQotICB7Ci0JICByZXR1cm4gZ2V0U2NlbmFyaW9Db250ZXh0KCkuZ2V0R2VuZXJhdGVDbGllbnQoKTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0RGV2ZWxvcFNlcnZpY2UoKSB7Ci0JICByZXR1cm4gZGV2ZWxvcFNlcnZpY2VfOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRBc3NlbWJsZVNlcnZpY2UoKSB7Ci0JICByZXR1cm4gYXNzZW1ibGVTZXJ2aWNlXzsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0RGVwbG95U2VydmljZSgpIHsKLQkgIHJldHVybiBkZXBsb3lTZXJ2aWNlXzsKLSAgfQotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvd2lkZ2V0cy9TZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjUyY2E2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvd2lkZ2V0cy9TZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTI0ICAgMTQyNjM1IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqIDIwMDYwNTI5ICAgMTQxNDIyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDcyNyAgIDE0NDM1NCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS53aWRnZXRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5DbGllbnRXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5kYXRhLlR5cGVSdW50aW1lU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VDb250ZXh0OwotCi0KLXB1YmxpYyBjbGFzcyBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kIGV4dGVuZHMgQ2xpZW50V2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZAoteyAgICAKLSAgcHJpdmF0ZSBUeXBlUnVudGltZVNlcnZlciB0eXBlUnVudGltZVNlcnZlcl87Ci0gIHByaXZhdGUgYm9vbGVhbiAgICAgICAgICAgaW5zdGFsbFNlcnZpY2VfOwotICBwcml2YXRlIGJvb2xlYW4gICAgICAgICAgIHN0YXJ0U2VydmljZV87Ci0gIHByaXZhdGUgYm9vbGVhbiAgICAgICAgICAgdGVzdFNlcnZpY2VfOwotICBwcml2YXRlIGJvb2xlYW4gICAgICAgICAgIHRlc3RDbGllbnRfOwotICBwcml2YXRlIGJvb2xlYW4gICAgICAgICAgIHJ1blRlc3RDbGllbnRfOwotICBwcml2YXRlIGJvb2xlYW4gICAgICAgICAgIHB1Ymxpc2hTZXJ2aWNlXzsKLSAgcHJpdmF0ZSBib29sZWFuICAgICAgICAgICBnZW5lcmF0ZVByb3h5XzsKLSAgcHJpdmF0ZSBib29sZWFuICAgICAgICAgICBkZXZlbG9wU2VydmljZV87Ci0gIHByaXZhdGUgYm9vbGVhbiAgICAgICAgICAgYXNzZW1ibGVTZXJ2aWNlXzsKLSAgcHJpdmF0ZSBib29sZWFuICAgICAgICAgICBkZXBsb3lTZXJ2aWNlXzsgCi0gIAotCXByaXZhdGUgUmVzb3VyY2VDb250ZXh0ICAgcmVzb3VyY2VDb250ZXh0XzsKLQlwcml2YXRlIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbl87IAotICAgIAotICAKLSAgcHVibGljIFR5cGVSdW50aW1lU2VydmVyIGdldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcigpCi0gIHsgCi0gICAgcmV0dXJuIHR5cGVSdW50aW1lU2VydmVyXzsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGdldEluc3RhbGxTZXJ2aWNlKCkKLSAgewotICAgIHJldHVybiBpbnN0YWxsU2VydmljZV87ICAKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGdldFN0YXJ0U2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gc3RhcnRTZXJ2aWNlXzsgIAotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZ2V0VGVzdFNlcnZpY2UoKQotICB7Ci0gICAgcmV0dXJuIHRlc3RTZXJ2aWNlXzsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0UnVuVGVzdENsaWVudCgpCi0gIHsKLSAgICByZXR1cm4gcnVuVGVzdENsaWVudF87Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldFB1Ymxpc2hTZXJ2aWNlKCkKLSAgewotICAgIHJldHVybiBwdWJsaXNoU2VydmljZV87Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBnZXRHZW5lcmF0ZVByb3h5KCkKLSAgewotICAgIHJldHVybiBnZW5lcmF0ZVByb3h5XzsgIAotICB9Ci0JCi0JcHVibGljIFJlc291cmNlQ29udGV4dCBnZXRSZXNvdXJjZUNvbnRleHQoKQotCXsKLQkJcmV0dXJuIHJlc291cmNlQ29udGV4dF87Ci0JfQotICAKLSAgLyoqCi0gICAqIEBwYXJhbSBnZW5lcmF0ZVByb3h5XyBUaGUgZ2VuZXJhdGVQcm94eV8gdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0R2VuZXJhdGVQcm94eShib29sZWFuIGdlbmVyYXRlUHJveHlfKQotICB7Ci0gICAgdGhpcy5nZW5lcmF0ZVByb3h5XyA9IGdlbmVyYXRlUHJveHlfOwotICB9Ci0gIC8qKgotICAgKiBAcGFyYW0gcHVibGlzaFNlcnZpY2VfIFRoZSBwdWJsaXNoU2VydmljZV8gdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UHVibGlzaFNlcnZpY2UoYm9vbGVhbiBwdWJsaXNoU2VydmljZV8pCi0gIHsKLSAgICB0aGlzLnB1Ymxpc2hTZXJ2aWNlXyA9IHB1Ymxpc2hTZXJ2aWNlXzsKLSAgfQotICAvKioKLSAgICogQHBhcmFtIGluc3RhbGxTZXJ2aWNlXyBUaGUgaW5zdGFsbFNlcnZpY2VfIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEluc3RhbGxTZXJ2aWNlKGJvb2xlYW4gaW5zdGFsbFNlcnZpY2VfKQotICB7Ci0gICAgdGhpcy5pbnN0YWxsU2VydmljZV8gPSBpbnN0YWxsU2VydmljZV87Ci0gIH0KLSAgLyoqCi0gICAqIEBwYXJhbSBzdGFydFNlcnZpY2VfIFRoZSBzdGFydFNlcnZpY2VfIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFN0YXJ0U2VydmljZShib29sZWFuIHN0YXJ0U2VydmljZV8pCi0gIHsKLSAgICB0aGlzLnN0YXJ0U2VydmljZV8gPSBzdGFydFNlcnZpY2VfOwotICB9Ci0gIC8qKgotICAgKiBAcGFyYW0gdGVzdFNlcnZpY2VfIFRoZSB0ZXN0U2VydmljZV8gdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VGVzdFNlcnZpY2UoYm9vbGVhbiB0ZXN0U2VydmljZV8pCi0gIHsKLSAgICB0aGlzLnRlc3RTZXJ2aWNlXyA9IHRlc3RTZXJ2aWNlXzsKLSAgfQotICAKLSAgLyoqCi0gICAqIEBwYXJhbSB0ZXN0U2VydmljZV8gVGhlIHRlc3RTZXJ2aWNlXyB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSdW5UZXN0Q2xpZW50KGJvb2xlYW4gcnVuVGVzdENsaWVudF8pCi0gIHsKLSAgICB0aGlzLnJ1blRlc3RDbGllbnRfID0gcnVuVGVzdENsaWVudF87Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAcGFyYW0gdHlwZVJ1bnRpbWVTZXJ2ZXJfIFRoZSB0eXBlUnVudGltZVNlcnZlcl8gdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U2VydmljZVR5cGVSdW50aW1lU2VydmVyKFR5cGVSdW50aW1lU2VydmVyIHR5cGVSdW50aW1lU2VydmVyXykKLSAgewotICAgIHRoaXMudHlwZVJ1bnRpbWVTZXJ2ZXJfID0gdHlwZVJ1bnRpbWVTZXJ2ZXJfOwotICB9Ci0JCi0JcHVibGljIHZvaWQgc2V0UmVzb3VyY2VDb250ZXh0KFJlc291cmNlQ29udGV4dCByYykKLQl7Ci0JCXJlc291cmNlQ29udGV4dF8gPSByYzsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0T2JqZWN0U2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikKLQl7Ci0JICAgc2VsZWN0aW9uXyA9IHNlbGVjdGlvbjsJCi0JfQkKLQkKLQlwdWJsaWMgSVN0cnVjdHVyZWRTZWxlY3Rpb24gZ2V0T2JqZWN0U2VsZWN0aW9uKCkKLQl7Ci0JICAgcmV0dXJuIHNlbGVjdGlvbl87Ci0JfQotCQotCXB1YmxpYyBib29sZWFuIGdldERldmVsb3BTZXJ2aWNlKCkgewotCQlyZXR1cm4gZGV2ZWxvcFNlcnZpY2VfOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldERldmVsb3BTZXJ2aWNlKGJvb2xlYW4gZGV2ZWxvcFNlcnZpY2UpIHsKLQkJdGhpcy5kZXZlbG9wU2VydmljZV8gPSBkZXZlbG9wU2VydmljZTsKLQl9CQotCQotCXB1YmxpYyBib29sZWFuIGdldEFzc2VtYmxlU2VydmljZSgpIHsKLQkJcmV0dXJuIGFzc2VtYmxlU2VydmljZV87Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0QXNzZW1ibGVTZXJ2aWNlKGJvb2xlYW4gYXNzZW1ibGVTZXJ2aWNlKSB7Ci0JCXRoaXMuYXNzZW1ibGVTZXJ2aWNlXyA9IGFzc2VtYmxlU2VydmljZTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBnZXREZXBsb3lTZXJ2aWNlKCkgewotCQlyZXR1cm4gZGVwbG95U2VydmljZV87Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0RGVwbG95U2VydmljZShib29sZWFuIGRlcGxveVNlcnZpY2UpIHsKLQkJdGhpcy5kZXBsb3lTZXJ2aWNlXyA9IGRlcGxveVNlcnZpY2U7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gZ2V0VGVzdENsaWVudCgpIHsKLQkJcmV0dXJuIHRlc3RDbGllbnRfOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFRlc3RDbGllbnQoYm9vbGVhbiB0ZXN0Q2xpZW50XykgewotCQl0aGlzLnRlc3RDbGllbnRfID0gdGVzdENsaWVudF87Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvU2VydmljZUltcGxTZWxlY3Rpb25EaWFsb2cuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvd2lkZ2V0cy9TZXJ2aWNlSW1wbFNlbGVjdGlvbkRpYWxvZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDIxMGEwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvd2lkZ2V0cy9TZXJ2aWNlSW1wbFNlbGVjdGlvbkRpYWxvZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQxMCAgIDEzNTQ0MSBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDQxOCAgIDEzNjMzNSBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLndpZGdldHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMub2JqZWN0Lk9iamVjdFNlbGVjdGlvbldpZGdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydC5XZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZGF0YS5UeXBlUnVudGltZVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5BYnN0cmFjdFNlbGVjdGlvbkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5QYWdlSW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlU2NlbmFyaW87Ci0KLXB1YmxpYyBjbGFzcyBTZXJ2aWNlSW1wbFNlbGVjdGlvbkRpYWxvZyBleHRlbmRzIEFic3RyYWN0U2VsZWN0aW9uRGlhbG9nIHsKLQotCVR5cGVSdW50aW1lU2VydmVyIHRyc187Ci0JU3RyaW5nIHRpdGxlVGV4dF87Ci0JSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uXzsKLQkKLQlwdWJsaWMgU2VydmljZUltcGxTZWxlY3Rpb25EaWFsb2coU2hlbGwgcGFyZW50LCBQYWdlSW5mbyBwYWdlSW5mbykgewotCQlzdXBlcihwYXJlbnQsIHBhZ2VJbmZvKTsKLQkJdGl0bGVUZXh0XyA9IHBhZ2VJbmZvLmdldFBhZ2VOYW1lKCk7Ci0JfQotCQotCXByb3RlY3RlZCB2b2lkIGNhbGxTZXR0ZXJzKCkKLQl7CQkKLQkJKChPYmplY3RTZWxlY3Rpb25XaWRnZXQpZ2V0V2lkZ2V0KCkpLnNldFR5cGVSdW50aW1lU2VydmVyKHRyc18pOwotCQkoKE9iamVjdFNlbGVjdGlvbldpZGdldClnZXRXaWRnZXQoKSkuc2V0SW5pdGlhbFNlbGVjdGlvbihzZWxlY3Rpb25fKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0VHlwZVJ1bnRpbWVTZXJ2ZXIoVHlwZVJ1bnRpbWVTZXJ2ZXIgdHJzKQotCXsKLQkJdHJzXyA9IHRyczsgCi0JCQotCQkvLyBzZXQgZGlhbG9nIHRpdGxlIHRleHQgYmFzZWQgb24gdGhlIHdlYiBzZXJ2aWNlIHNjZW5hcmlvCi0JCWlmICh0cnMgIT0gbnVsbCkKLQkJewotCQkgICBTdHJpbmcgdHlwZUlkID0gdHJzLmdldFR5cGVJZCgpOwotCQkgICBpbnQgc2NlbmFyaW8gPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTY2VuYXJpb0Zyb21UeXBlSWQodHlwZUlkKTsKLQkJICAgCi0JCSAgIGlmIChzY2VuYXJpbyA9PSBXZWJTZXJ2aWNlU2NlbmFyaW8uQk9UVE9NVVApCi0JCSAgIHsKLQkJCSAgdGl0bGVUZXh0XyA9IENvbnN1bXB0aW9uVUlNZXNzYWdlcy5ESUFMT0dfVElUSUxFX1NFUlZJQ0VfSU1QTF9TRUxFQ1RJT047Ci0JCSAgIH0KLQkJICAgZWxzZSBpZiAoc2NlbmFyaW8gPT0gV2ViU2VydmljZVNjZW5hcmlvLlRPUERPV04pCi0JCSAgIHsKLQkJCSAgIHRpdGxlVGV4dF8gPSBDb25zdW1wdGlvblVJTWVzc2FnZXMuRElBTE9HX1RJVElMRV9TRVJWSUNFX0RFRl9TRUxFQ1RJT047Ci0JCSAgIH0KLQkJfSAgICAgICAgICAgICAJICAgCi0JfQotCSAKLQkgIHByb3RlY3RlZCB2b2lkIHNldFNoZWxsU3R5bGUoaW50IG5ld1NoZWxsU3R5bGUpCi0JICB7Ci0JICAgIHN1cGVyLnNldFNoZWxsU3R5bGUoIG5ld1NoZWxsU3R5bGUgfCBTV1QuUkVTSVpFICk7ICAKLQkgIH0KLQotCSAgcHJvdGVjdGVkIHZvaWQgY29uZmlndXJlU2hlbGwoU2hlbGwgbmV3U2hlbGwpCi0JICB7Ci0JICAgIG5ld1NoZWxsLnNldFRleHQodGl0bGVUZXh0Xyk7ICAgCi0JICAgIHN1cGVyLmNvbmZpZ3VyZVNoZWxsKG5ld1NoZWxsKTsKLQkgIH0KLQotCSAgcHVibGljIFN0cmluZyBnZXREaXNwbGF5YWJsZVNlbGVjdGlvblN0cmluZygpIHsKLQkJICAKLQkJIHJldHVybiAoKE9iamVjdFNlbGVjdGlvbldpZGdldClnZXRXaWRnZXQoKSkuZ2V0T2JqZWN0U2VsZWN0aW9uRGlzcGxheWFibGVTdHJpbmcoKTsKLQl9Ci0JICAKLQkgIHB1YmxpYyBJU3RydWN0dXJlZFNlbGVjdGlvbiBnZXRPYmplY3RTZWxlY3Rpb24oKSB7Ci0JCSAgcmV0dXJuICgoT2JqZWN0U2VsZWN0aW9uV2lkZ2V0KWdldFdpZGdldCgpKS5nZXRPYmplY3RTZWxlY3Rpb24oKTsKLQl9Ci0JICAKLQkgIHB1YmxpYyBJUHJvamVjdCBnZXRQcm9qZWN0KCl7Ci0JCSAgcmV0dXJuICgoT2JqZWN0U2VsZWN0aW9uV2lkZ2V0KWdldFdpZGdldCgpKS5nZXRQcm9qZWN0KCk7Ci0JICB9Ci0JICAKLQkgIHB1YmxpYyBTdHJpbmcgZ2V0Q29tcG9uZW50TmFtZSgpewotCQkgIHJldHVybiAoKE9iamVjdFNlbGVjdGlvbldpZGdldClnZXRXaWRnZXQoKSkuZ2V0Q29tcG9uZW50TmFtZSgpOyAgCi0JICB9Ci0JICAKLQkgIHB1YmxpYyB2b2lkIHNldEluaXRpYWxTZWxlY3Rpb24oSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uKQotCSAgewotCQkgIHNlbGVjdGlvbl8gPSBzZWxlY3Rpb247IAotCSAgfQotCSAgCi0JICBwcm90ZWN0ZWQgUG9pbnQgZ2V0SW5pdGlhbFNpemUoKQotCSAgewkKLQkJICByZXR1cm4gKChPYmplY3RTZWxlY3Rpb25XaWRnZXQpZ2V0V2lkZ2V0KCkpLmdldFdpZGdldFNpemUoKTsJICAgIAotCSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL2JpbmRpbmcvRXhwb3J0V1NXaWRnZXRCaW5kaW5nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvYmluZGluZy9FeHBvcnRXU1dpZGdldEJpbmRpbmcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDAwNjdhNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvYmluZGluZy9FeHBvcnRXU1dpZGdldEJpbmRpbmcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLndpZGdldHMuYmluZGluZzsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuUHVibGlzaFRvUHJpdmF0ZVVERElDb21tYW5kRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuUHVibGlzaFdTV2lkZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TZXF1ZW5jZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNpbXBsZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLkNhbkZpbmlzaFJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIuV1NFeHBsb3JlckxhdW5jaGVyQ29tbWFuZDsKLQotCi1wdWJsaWMgY2xhc3MgRXhwb3J0V1NXaWRnZXRCaW5kaW5nIGltcGxlbWVudHMgQ29tbWFuZFdpZGdldEJpbmRpbmcKLXsKLSAgcHJpdmF0ZSBDYW5GaW5pc2hSZWdpc3RyeSAgIGNhbkZpbmlzaFJlZ2lzdHJ5OwotICBwcml2YXRlIFdpZGdldFJlZ2lzdHJ5ICAgICAgd2lkZ2V0UmVnaXN0cnk7Ci0gIHByaXZhdGUgRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhTWFwcGluZ1JlZ2lzdHJ5OwotICBwcml2YXRlIFB1Ymxpc2hUb1ByaXZhdGVVRERJQ29tbWFuZEZyYWdtZW50IHB1Ymxpc2hUb1ByaXZhdGVVRERJQ21kRnJhZzsKLQotICBwdWJsaWMgRXhwb3J0V1NXaWRnZXRCaW5kaW5nKCkKLSAgewotICAgIHB1Ymxpc2hUb1ByaXZhdGVVRERJQ21kRnJhZyA9IG5ldyBQdWJsaXNoVG9Qcml2YXRlVURESUNvbW1hbmRGcmFnbWVudCgpOwotICB9Ci0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNjcmVhdGUoKQotICAgKi8KLSAgcHVibGljIENvbW1hbmRGcmFnbWVudEZhY3RvcnkgY3JlYXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgQ29tbWFuZEZyYWdtZW50RmFjdG9yeSgpCi0gICAgICAgICAgIHsKLSAgICAgICAgICAgICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50IGNyZWF0ZSgpCi0gICAgICAgICAgICAgewotICAgICAgICAgICAgICAgU2VxdWVuY2VGcmFnbWVudCByb290ID0gbmV3IFNlcXVlbmNlRnJhZ21lbnQoKTsKLSAgICAgICAgICAgICAgIHJvb3QuYWRkKG5ldyBTaW1wbGVGcmFnbWVudCgiV1NFeHBvcnQiKSk7Ci0gICAgICAgICAgICAgICByb290LmFkZChwdWJsaXNoVG9Qcml2YXRlVURESUNtZEZyYWcpOwotICAgICAgICAgICAgICAgcm9vdC5hZGQobmV3IFNpbXBsZUZyYWdtZW50KG5ldyBXU0V4cGxvcmVyTGF1bmNoZXJDb21tYW5kKCksICIiKSk7Ci0gICAgICAgICAgICAgICByZXR1cm4gcm9vdDsgIAotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgfTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlckNhbkZpbmlzaChvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5DYW5GaW5pc2hSZWdpc3RyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyQ2FuRmluaXNoKENhbkZpbmlzaFJlZ2lzdHJ5IGNhbkZpbmlzaFJlZ2lzdHJ5KQotICB7Ci0gICAgdGhpcy5jYW5GaW5pc2hSZWdpc3RyeSA9IGNhbkZpbmlzaFJlZ2lzdHJ5OwotICAgIHB1Ymxpc2hUb1ByaXZhdGVVRERJQ21kRnJhZy5yZWdpc3RlckNhbkZpbmlzaCh0aGlzLmNhbkZpbmlzaFJlZ2lzdHJ5KTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlckRhdGFNYXBwaW5ncyhvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyhEYXRhTWFwcGluZ1JlZ2lzdHJ5IGRhdGFSZWdpc3RyeSkKLSAgewotICAgIHRoaXMuZGF0YU1hcHBpbmdSZWdpc3RyeSA9IGRhdGFSZWdpc3RyeTsKLSAgICBwdWJsaXNoVG9Qcml2YXRlVURESUNtZEZyYWcucmVnaXN0ZXJEYXRhTWFwcGluZ3ModGhpcy5kYXRhTWFwcGluZ1JlZ2lzdHJ5KTsKLSAgICAKLSAgICAvLyBQdWJsaXNoVG9Qcml2YXRlVURESUNvbW1hbmRGcmFnbWVudAotICAgIGRhdGFNYXBwaW5nUmVnaXN0cnkuYWRkTWFwcGluZyhQdWJsaXNoV1NXaWRnZXQuY2xhc3MsICJQdWJsaXNoVG9Qcml2YXRlVURESSIsIFB1Ymxpc2hUb1ByaXZhdGVVRERJQ29tbWFuZEZyYWdtZW50LmNsYXNzKTsKLSAgICAKLSAgICAvLyBMYXVuY2hXZWJTZXJ2aWNlc0V4cGxvcmVyQ29tbWFuZAotICAgIGRhdGFNYXBwaW5nUmVnaXN0cnkuYWRkTWFwcGluZyhQdWJsaXNoV1NXaWRnZXQuY2xhc3MsICJGb3JjZUxhdW5jaE91dHNpZGVJREUiLCBXU0V4cGxvcmVyTGF1bmNoZXJDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhTWFwcGluZ1JlZ2lzdHJ5LmFkZE1hcHBpbmcoUHVibGlzaFdTV2lkZ2V0LmNsYXNzLCAiTGF1bmNoT3B0aW9ucyIsIFdTRXhwbG9yZXJMYXVuY2hlckNvbW1hbmQuY2xhc3MpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI3JlZ2lzdGVyV2lkZ2V0TWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuV2lkZ2V0UmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlcldpZGdldE1hcHBpbmdzKFdpZGdldFJlZ2lzdHJ5IHdpZGdldFJlZ2lzdHJ5KQotICB7Ci0gICAgdGhpcy53aWRnZXRSZWdpc3RyeSA9IHdpZGdldFJlZ2lzdHJ5OwotICAgIHB1Ymxpc2hUb1ByaXZhdGVVRERJQ21kRnJhZy5yZWdpc3RlcldpZGdldE1hcHBpbmdzKHRoaXMud2lkZ2V0UmVnaXN0cnkpOwotCi0gICAgd2lkZ2V0UmVnaXN0cnkuYWRkKCJXU0V4cG9ydCIsIAotICAgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX1RJVExFX1dTX1BVQkxJU0gsCi0gICAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfREVTQ19XU19QVUJMSVNILAotICAgICAgbmV3IFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSgpCi0gICAgICB7Ci0gICAgICAgIHB1YmxpYyBXaWRnZXRDb250cmlidXRvciBjcmVhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIG5ldyBQdWJsaXNoV1NXaWRnZXQodHJ1ZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICApOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvYmluZGluZy9QdWJsaXNoV1NETFdpZGdldEJpbmRpbmcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvd2lkZ2V0cy9iaW5kaW5nL1B1Ymxpc2hXU0RMV2lkZ2V0QmluZGluZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDBmMzhlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvd2lkZ2V0cy9iaW5kaW5nL1B1Ymxpc2hXU0RMV2lkZ2V0QmluZGluZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS53aWRnZXRzLmJpbmRpbmc7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2ltcGxlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuQ2FuRmluaXNoUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0UmVnaXN0cnk7Ci0KLQotcHVibGljIGNsYXNzIFB1Ymxpc2hXU0RMV2lkZ2V0QmluZGluZyBpbXBsZW1lbnRzIENvbW1hbmRXaWRnZXRCaW5kaW5nCi17Ci0gIHB1YmxpYyBQdWJsaXNoV1NETFdpZGdldEJpbmRpbmcoKQotICB7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjY3JlYXRlKCkKLSAgICovCi0gIHB1YmxpYyBDb21tYW5kRnJhZ21lbnRGYWN0b3J5IGNyZWF0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IENvbW1hbmRGcmFnbWVudEZhY3RvcnkoKQotICAgICAgICAgICB7Ci0gICAgICAgICAgICAgcHVibGljIENvbW1hbmRGcmFnbWVudCBjcmVhdGUoKQotICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2ltcGxlRnJhZ21lbnQoKTsgIAotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgfTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlckNhbkZpbmlzaChvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5DYW5GaW5pc2hSZWdpc3RyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyQ2FuRmluaXNoKENhbkZpbmlzaFJlZ2lzdHJ5IGNhbkZpbmlzaFJlZ2lzdHJ5KQotICB7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpLCAKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlckRhdGFNYXBwaW5ncyhvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyhEYXRhTWFwcGluZ1JlZ2lzdHJ5IGRhdGFSZWdpc3RyeSkKLSAgewotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI3JlZ2lzdGVyV2lkZ2V0TWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuV2lkZ2V0UmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlcldpZGdldE1hcHBpbmdzKFdpZGdldFJlZ2lzdHJ5IHdpZGdldFJlZ2lzdHJ5KQotICB7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvd2lkZ2V0cy9iaW5kaW5nL1NlcnZlcldpZGdldEJpbmRpbmcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvd2lkZ2V0cy9iaW5kaW5nL1NlcnZlcldpZGdldEJpbmRpbmcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzg0MWNhYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvYmluZGluZy9TZXJ2ZXJXaWRnZXRCaW5kaW5nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjA0IDEyNDQwOCAgIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjAyMDQgMTIxNjA1ICAgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyICAgICAgICAgICAKLSAqIDIwMDYwMjIxICAgMTE5MTExIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA0MDcgICAxMzU0MTUgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDQxMCAgIDEzNTU2MiBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDQxNyAgIDEzNjM5MSBqb2FuQGNhLmlibS5jb20gLSBKb2FuIEhhZ2dhcnR5Ci0gKiAyMDA2MDQyNSAgIDEzODA1MiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA1MjQgICAxNDI2MzUgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICogMjAwNjA1MjkgICAxNDE0MjIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNTMwICAgMTQ0MzU4IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDYwOCAgIDE0NTUyOSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA2MDkgICAgODY0MjEga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNzI3ICAgMTQ0MzU0IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDcyOCAgIDE0NTQyNiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA4MTAgICAxMzUzOTUgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIEVuYWJsZSBXVFAgV2ViIHNlcnZpY2UgZnJhbWV3b3JrIG9wZW5pbmcgSmF2YSBlZGl0b3IKLSAqIDIwMDYwODIxICAgMTUzODMzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBBbGxvdyB0aGUgV2ViIFNlcnZpY2UgVGVzdCBleHRlbnNpb24gcG9pbnQgdG8gc3BlY2lmeSB0aGUgc3VwcG9ydGVkIGNsaWVudCBydW50aW1lCi0gKiAyMDA2MDgyNSAgIDE1NTExNCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA3MDUwMiAgIDE4MDMwNCBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLndpZGdldHMuYmluZGluZzsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU3RyaW5nVG9JUHJvamVjdFRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5Db21wdXRlRW5kcG9pbnRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5Db21wdXRlUHJveHlFbmRwb2ludENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uLkNyZWF0ZU1vbml0b3JDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5NYW5hZ2VTZXJ2ZXJTdGFydFVwQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuQ29uc3VtcHRpb25VSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tYW5kLmRhdGEuU2VydmVySW5zdFRvSVNlcnZlclRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5jb21tb24uRmluaXNoRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmNvbW1vbi5TY2VuYXJpb0NsZWFudXBDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5leHRlbnNpb24uQ2xpZW50Um9vdEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5leHRlbnNpb24uUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnNlbGVjdGlvbi5TZWxlY3Rpb25UcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5QdWJsaXNoVG9Qcml2YXRlVURESUNvbW1hbmRGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5QdWJsaXNoV1NXaWRnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9ucy5DbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zLkNsaWVudEV4dGVuc2lvbkZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnMuQ2xpZW50RXh0ZW5zaW9uT3V0cHV0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy5leHRlbnNpb25zLlNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLmV4dGVuc2lvbnMuU2VydmVyRXh0ZW5zaW9uRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuZXh0ZW5zaW9ucy5TZXJ2ZXJFeHRlbnNpb25PdXRwdXRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLm9iamVjdC5PYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aWRnZXRzLnRlc3QuQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0LkNsaWVudFRlc3RGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0LkNsaWVudFRlc3RXaWRnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5GaW5pc2hEZWZhdWx0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0LkZpbmlzaFRlc3RGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0LlRlc3REZWZhdWx0aW5nRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5XU0RMVGVzdExhdW5jaENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5XZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS5leHRlbnNpb24uUHJlU2VydmljZURldmVsb3BDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS5leHRlbnNpb24uU2VydmljZVJvb3RGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0cy5TZXJ2ZXJXaXphcmRXaWRnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLndpZGdldHMuU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLndpZGdldHMuU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0cy5ydW50aW1lLlNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0cy50ZXN0LkxhdW5jaEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS53aWRnZXRzLnRlc3QuU2VydmljZVRlc3RGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0cy50ZXN0LlNlcnZpY2VUZXN0V2lkZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS53aWRnZXRzLnRlc3QuV2ViU2VydmljZVRlc3REZWZhdWx0aW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uQ29uZGl0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Cb29sZWFuRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2VxdWVuY2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TaW1wbGVGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5DYW5GaW5pc2hSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5TZWxlY3Rpb25Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldENvbnRyaWJ1dG9yRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIuV1NFeHBsb3JlckxhdW5jaGVyQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkuY29tbWFuZC5PcGVuRWRpdG9yQ29tbWFuZDsKLQotcHVibGljIGNsYXNzIFNlcnZlcldpZGdldEJpbmRpbmcgaW1wbGVtZW50cyBDb21tYW5kV2lkZ2V0QmluZGluZwotewotICBwcml2YXRlIENhbkZpbmlzaFJlZ2lzdHJ5ICAgY2FuRmluaXNoUmVnaXN0cnlfOwotICBwcml2YXRlIFdpZGdldFJlZ2lzdHJ5ICAgICAgd2lkZ2V0UmVnaXN0cnlfOwotICBwcml2YXRlIERhdGFNYXBwaW5nUmVnaXN0cnkgZGF0YU1hcHBpbmdSZWdpc3RyeV87Ci0gIHByaXZhdGUgUHVibGlzaFRvUHJpdmF0ZVVERElDb21tYW5kRnJhZ21lbnQgcHVibGlzaFRvUHJpdmF0ZVVERElDbWRGcmFnOwotCi0gIHB1YmxpYyBTZXJ2ZXJXaWRnZXRCaW5kaW5nKCkKLSAgewotICAgIHB1Ymxpc2hUb1ByaXZhdGVVRERJQ21kRnJhZyA9IG5ldyBQdWJsaXNoVG9Qcml2YXRlVURESUNvbW1hbmRGcmFnbWVudCgpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI2NyZWF0ZSgpCi0gICAqLwotICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50RmFjdG9yeSBjcmVhdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBDb21tYW5kRnJhZ21lbnRGYWN0b3J5KCkKLSAgICAgICAgICAgewotICAgICAgICAgICAgIHB1YmxpYyBDb21tYW5kRnJhZ21lbnQgY3JlYXRlKCkKLSAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICByZXR1cm4gbmV3IFNlcnZpY2VSb290Q29tbWFuZEZyYWdtZW50KCk7ICAKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIH07Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJDYW5GaW5pc2gob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ2FuRmluaXNoUmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlckNhbkZpbmlzaChDYW5GaW5pc2hSZWdpc3RyeSBjYW5GaW5pc2hSZWdpc3RyeSkKLSAgewotICAgIGNhbkZpbmlzaFJlZ2lzdHJ5XyA9IGNhbkZpbmlzaFJlZ2lzdHJ5OwotICAgIHB1Ymxpc2hUb1ByaXZhdGVVRERJQ21kRnJhZy5yZWdpc3RlckNhbkZpbmlzaChjYW5GaW5pc2hSZWdpc3RyeV8pOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKSwgCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJEYXRhTWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhUmVnaXN0cnkpCi0gIHsKLSAgICBkYXRhTWFwcGluZ1JlZ2lzdHJ5XyA9IGRhdGFSZWdpc3RyeTsKLQotICAgIC8vIEJlZm9yZSBTZXJ2ZXJXaXphcmRXaWRnZXQKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhPYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiT2JqZWN0U2VsZWN0aW9uIiwgU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VUeXBlUnVudGltZVNlcnZlciIsIFNlcnZlcldpemFyZFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlR2VuZXJhdGlvbiIsIFNlcnZlcldpemFyZFdpZGdldC5jbGFzcyk7IAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiTW9uaXRvclNlcnZpY2UiLCBTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiTW9uaXRvclNlcnZpY2UiLCBDcmVhdGVNb25pdG9yQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJNb25pdG9yU2VydmljZSIsIENvbXB1dGVFbmRwb2ludENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiTW9uaXRvclNlcnZpY2UiLCBDb21wdXRlUHJveHlFbmRwb2ludENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiUHVibGlzaFNlcnZpY2UiLCBTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MpOyAgICAKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEdlbmVyYXRpb24iLCBTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSW5zdGFsbENsaWVudCIsIFNlcnZlcldpemFyZFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRUeXBlUnVudGltZVNlcnZlciIsIFNlcnZlcldpemFyZFdpZGdldC5jbGFzcyk7ICAgIAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiUmVzb3VyY2VDb250ZXh0IiwgU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkRldmVsb3BTZXJ2aWNlIiwgU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkFzc2VtYmxlU2VydmljZSIsIFNlcnZlcldpemFyZFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJEZXBsb3lTZXJ2aWNlIiwgU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkluc3RhbGxTZXJ2aWNlIiwgU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlN0YXJ0U2VydmljZSIsIFNlcnZlcldpemFyZFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJUZXN0U2VydmljZSIsIFNlcnZlcldpemFyZFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJEZXZlbG9wQ2xpZW50IiwgU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkFzc2VtYmxlQ2xpZW50IiwgU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkRlcGxveUNsaWVudCIsIFNlcnZlcldpemFyZFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTdGFydENsaWVudCIsIFNlcnZlcldpemFyZFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJUZXN0Q2xpZW50IiwgU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzKTsKLQotICAgIAotICAgIC8vIEFmdGVyIFNlcnZlcldpemFyZFdpZGdldAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldC5jbGFzcywgIlNlcnZpY2VUeXBlUnVudGltZVNlcnZlciIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MgKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MsICJJbnN0YWxsU2VydmljZSIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldC5jbGFzcywgIkluc3RhbGxDbGllbnQiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MsICJTdGFydFNlcnZpY2UiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MsICJUZXN0U2VydmljZSIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldC5jbGFzcywgIk1vbml0b3JTZXJ2aWNlIiwgQ3JlYXRlTW9uaXRvckNvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldC5jbGFzcywgIk1vbml0b3JTZXJ2aWNlIiwgQ29tcHV0ZUVuZHBvaW50Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzLCAiTW9uaXRvclNlcnZpY2UiLCBDb21wdXRlUHJveHlFbmRwb2ludENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldC5jbGFzcywgIlB1Ymxpc2hTZXJ2aWNlIiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzLCAiR2VuZXJhdGVQcm94eSIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldC5jbGFzcywgIkNsaWVudFR5cGVSdW50aW1lU2VydmVyIiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzLCAiUmVzb3VyY2VDb250ZXh0IiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzLCAiT2JqZWN0U2VsZWN0aW9uIiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzLCAiRGV2ZWxvcFNlcnZpY2UiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MsICJBc3NlbWJsZVNlcnZpY2UiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MsICJEZXBsb3lTZXJ2aWNlIiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzLCAiRGV2ZWxvcENsaWVudCIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldC5jbGFzcywgIkFzc2VtYmxlQ2xpZW50IiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzLCAiRGVwbG95Q2xpZW50IiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzLCAiU3RhcnRDbGllbnQiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MsICJUZXN0Q2xpZW50IiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICAgIAotICAgIC8vIEJlZm9yZSBPYmplY3RTZWxlY3Rpb25XaWRnZXQgICAgCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJUZXN0U2VydmljZSIsIENsaWVudFRlc3RXaWRnZXQuY2xhc3MgKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlRlc3RTZXJ2aWNlIixGaW5pc2hUZXN0RnJhZ21lbnQuY2xhc3MpOwotICAgIAotCWRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJHZW5lcmF0ZVByb3h5IiwgQ2xpZW50RnJhZ21lbnQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkdlbmVyYXRlUHJveHkiLCBTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VQcm9qZWN0TmFtZSIsIFNlcnZlcldpemFyZFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZUVhclByb2plY3ROYW1lIiwgU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlQ29tcG9uZW50VHlwZSIsIFNlcnZlcldpemFyZFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdE5hbWUiLCBTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEVhclByb2plY3ROYW1lIiwgU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIiLCBTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFR5cGVSdW50aW1lU2VydmVyIiwgU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzKTsgICAgCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZU5lZWRFQVIiLCBTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudE5lZWRFQVIiLCBTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudENvbXBvbmVudFR5cGUiLCBTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MpOyAvL2p2aAotICAgICAgICAgICAgICAgIAotICAgIC8vIEFmdGVyIFNlcnZlcldpemFyZFdpZGdldCAgCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzLCAiU2VydmljZVR5cGVSdW50aW1lU2VydmVyIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldC5jbGFzcywgIlNlcnZpY2VSdW50aW1lSWQiLCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7ICAgIAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldC5jbGFzcywgIkNsaWVudFR5cGVSdW50aW1lU2VydmVyIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldC5jbGFzcywgIkNsaWVudFJ1bnRpbWVJZCIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MsICJTZXJ2aWNlUHJvamVjdE5hbWUiLCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzLCAiU2VydmljZUVhclByb2plY3ROYW1lIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldC5jbGFzcywgIlNlcnZpY2VDb21wb25lbnRUeXBlIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOyAgICAgICAgCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzLCAiQ2xpZW50UHJvamVjdE5hbWUiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzLCAiQ2xpZW50RWFyUHJvamVjdE5hbWUiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0LmNsYXNzLCAiQ2xpZW50Q29tcG9uZW50VHlwZSIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MsICJTZXJ2aWNlTmVlZEVBUiIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MsICJDbGllbnROZWVkRUFSIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldC5jbGFzcywgIldlYlNlcnZpY2VzUGFyc2VyIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MgKTsKLQotICAgIC8vIE1hcCBmcmFnbWVudHMgdGhhdCBkZXBlbmQgb24gZGF0YS4gICAKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MsICJDbGllbnRUeXBlUnVudGltZVNlcnZlciIsIENsaWVudEV4dGVuc2lvbkZyYWdtZW50LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXQuY2xhc3MsICJTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIiLCBTZXJ2ZXJFeHRlbnNpb25GcmFnbWVudC5jbGFzcyk7Ci0gICAgCi0gICAgLy8gQ3JlYXRlTW9uaXRvckNvbW1hbmQKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDcmVhdGVNb25pdG9yQ29tbWFuZC5jbGFzcywgIk1vbml0b3JlZFBvcnQiLCBDb21wdXRlRW5kcG9pbnRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDcmVhdGVNb25pdG9yQ29tbWFuZC5jbGFzcywgIk1vbml0b3JlZFBvcnQiLCBDb21wdXRlUHJveHlFbmRwb2ludENvbW1hbmQuY2xhc3MpOwotICAgIAotICAgIC8vIENvbXB1dGVFbmRwb2ludENvbW1hbmQKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDb21wdXRlRW5kcG9pbnRDb21tYW5kLmNsYXNzLCAiRW5kcG9pbnQiLCBTZXJ2aWNlVGVzdFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ29tcHV0ZUVuZHBvaW50Q29tbWFuZC5jbGFzcywgIkVuZHBvaW50IiwgQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ29tcHV0ZUVuZHBvaW50Q29tbWFuZC5jbGFzcywgIkVuZHBvaW50IiwgQ29tcHV0ZVByb3h5RW5kcG9pbnRDb21tYW5kLmNsYXNzKTsKLSAgICAKLSAgICAvLyAgQ29tcHV0ZVByb3h5RW5kcG9pbnRDb21tYW5kCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ29tcHV0ZVByb3h5RW5kcG9pbnRDb21tYW5kLmNsYXNzLCAiRW5kcG9pbnQiLCBDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICAKLSAgICAvLyAxNDU0MjYKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiUHJveHlFbmRwb2ludCIsIENvbXB1dGVQcm94eUVuZHBvaW50Q29tbWFuZC5jbGFzcyk7Ci0KLSAgICAvL1NlcnZpY2VUZXN0V2lkZ2V0IG1hcHBpbmdzICAgIAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZVR5cGVSdW50aW1lU2VydmVyIiwgU2VydmljZVRlc3RXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmVyUHJvamVjdCIsIFNlcnZpY2VUZXN0V2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VUeXBlUnVudGltZVNlcnZlciIsIENyZWF0ZU1vbml0b3JDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiV3NkbFVSSSIsIFNlcnZpY2VUZXN0V2lkZ2V0LmNsYXNzKTsKLQlkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiU2VydmljZVNlcnZlckluc3RhbmNlSWQiLCBTZXJ2aWNlVGVzdFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyRXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIldzZGxVUkkiLCBDb21wdXRlRW5kcG9pbnRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZXNQYXJzZXIiLCBDb21wdXRlRW5kcG9pbnRDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXZWJTZXJ2aWNlVGVzdERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZVRlc3RGYWNpbGl0aWVzIiwgU2VydmljZVRlc3RXaWRnZXQuY2xhc3MpOyAgICAKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXZWJTZXJ2aWNlVGVzdERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiRW52aXJvbm1lbnQiLCBTZXJ2aWNlVGVzdFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmljZVRlc3RXaWRnZXQuY2xhc3MsICJMYXVuY2hlZFNlcnZpY2VUZXN0TmFtZSIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2aWNlVGVzdFdpZGdldC5jbGFzcywgIkxhdW5jaGVkU2VydmljZVRlc3ROYW1lIiwgRmluaXNoVGVzdEZyYWdtZW50LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2aWNlVGVzdFdpZGdldC5jbGFzcywgIkxhdW5jaGVkU2VydmljZVRlc3ROYW1lIiwgVGVzdERlZmF1bHRpbmdGcmFnbWVudC5jbGFzcyk7Ci0gICAgICAgIAotICAgIC8vIEJlZm9yZSBDbGllbnQgVGVzdCB3aWRnZXQuCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VsZWN0aW9uQ29tbWFuZC5jbGFzcywgIkluaXRpYWxTZWxlY3Rpb24iLCBDbGllbnRUZXN0V2lkZ2V0LmNsYXNzICk7Ci0gICAgCi0gICAgLy8gQmVmb3JlIENsaWVudFRlc3RXaWRnZXQKLSAgICAgICAgCi0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcywgIlNhbXBsZVByb2plY3QiLCBDbGllbnRUZXN0V2lkZ2V0LmNsYXNzICk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcywgIlNhbXBsZVByb2plY3RFQVIiLCBDbGllbnRUZXN0V2lkZ2V0LmNsYXNzICk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoVGVzdERlZmF1bHRpbmdGcmFnbWVudC5jbGFzcywgIlRlc3RGYWNpbGl0eSIsQ2xpZW50VGVzdFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcywgIkZvbGRlciIsQ2xpZW50VGVzdFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcywgIkpzcEZvbGRlciIsQ2xpZW50VGVzdFdpZGdldC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcywgIlJ1bkNsaWVudFRlc3QiLENsaWVudFRlc3RXaWRnZXQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MsICJNZXRob2RzIixDbGllbnRUZXN0V2lkZ2V0LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kLmNsYXNzLCAiUnVuVGVzdENsaWVudCIsQ2xpZW50VGVzdFdpZGdldC5jbGFzcyk7Ci0gICAgCi0gICAgLy8gQWZ0ZXIgQ2xpZW50VGVzdFdpZGdldCAgICAKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRUZXN0V2lkZ2V0LmNsYXNzLCAiU2FtcGxlUHJvamVjdEVBUiIsRmluaXNoRGVmYXVsdENvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFRlc3RXaWRnZXQuY2xhc3MsICJTYW1wbGVQcm9qZWN0IixGaW5pc2hEZWZhdWx0Q29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50VGVzdFdpZGdldC5jbGFzcywgIlRlc3RGYWNpbGl0eSIsQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50VGVzdFdpZGdldC5jbGFzcywgIkZvbGRlciIsQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50VGVzdFdpZGdldC5jbGFzcywgIkpzcEZvbGRlciIsQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50VGVzdFdpZGdldC5jbGFzcywgIlJ1blRlc3RDbGllbnQiLENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudFRlc3RXaWRnZXQuY2xhc3MsICJNZXRob2RzIixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRUZXN0V2lkZ2V0LmNsYXNzLCAiVGVzdFNlcnZpY2UiLEZpbmlzaFRlc3RGcmFnbWVudC5jbGFzcyk7Ci0gICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50VGVzdFdpZGdldC5jbGFzcywgIlRlc3RJRCIsRmluaXNoVGVzdEZyYWdtZW50LmNsYXNzKTsKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRUZXN0V2lkZ2V0LmNsYXNzLCAiSXNUZXN0V2lkZ2V0IixGaW5pc2hUZXN0RnJhZ21lbnQuY2xhc3MpOwotICAgIC8vIFB1Ymxpc2hXU1dpZGdldAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiUHVibGlzaFNlcnZpY2UiLCBQdWJsaXNoV1NXaWRnZXQuY2xhc3MsICJQdWJsaXNoVG9QdWJsaWNVRERJIiwgbnVsbCk7Ci0gICAgCi0gICAgLy8gUHVibGlzaFRvUHJpdmF0ZVVERElDb21tYW5kRnJhZ21lbnQKLSAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhQdWJsaXNoV1NXaWRnZXQuY2xhc3MsICJQdWJsaXNoVG9Qcml2YXRlVURESSIsIFB1Ymxpc2hUb1ByaXZhdGVVRERJQ29tbWFuZEZyYWdtZW50LmNsYXNzKTsKLSAgICAKLSAgICAvLyBMYXVuY2hXZWJTZXJ2aWNlc0V4cGxvcmVyQ29tbWFuZAotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFB1Ymxpc2hXU1dpZGdldC5jbGFzcywgIlB1Ymxpc2hUb1ByaXZhdGVVRERJIiwgTGF1bmNoRnJhZ21lbnQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFB1Ymxpc2hXU1dpZGdldC5jbGFzcywgIlB1Ymxpc2hUb1B1YmxpY1VEREkiLCBMYXVuY2hGcmFnbWVudC5jbGFzcyk7Ci0gICAgLy8gVE9ETyBOZWVkIGRlZmF1bHRzIGZvciB0aGVzZSBwcm9wZXJ0aWVzLgotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFB1Ymxpc2hXU1dpZGdldC5jbGFzcywgIkZvcmNlTGF1bmNoT3V0c2lkZUlERSIsIFdTRXhwbG9yZXJMYXVuY2hlckNvbW1hbmQuY2xhc3MpOwotICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFB1Ymxpc2hXU1dpZGdldC5jbGFzcywgIkxhdW5jaE9wdGlvbnMiLCBXU0V4cGxvcmVyTGF1bmNoZXJDb21tYW5kLmNsYXNzKTsKLSAgCi0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJXaWRnZXRNYXBwaW5ncyhvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5XaWRnZXRSZWdpc3RyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyV2lkZ2V0TWFwcGluZ3MoV2lkZ2V0UmVnaXN0cnkgd2lkZ2V0UmVnaXN0cnkpCi0gIHsKLSAgIAotICAgIHdpZGdldFJlZ2lzdHJ5XyA9IHdpZGdldFJlZ2lzdHJ5OwotICAgIHB1Ymxpc2hUb1ByaXZhdGVVRERJQ21kRnJhZy5yZWdpc3RlcldpZGdldE1hcHBpbmdzKHdpZGdldFJlZ2lzdHJ5Xyk7Ci0KLSAgICB3aWRnZXRSZWdpc3RyeS5hZGQoICJTZXJ2ZXJXaXphcmRXaWRnZXQiLCAKLSAgICAgICAgICAgICAgICAgICAgICAgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX1RJVExFX1dTX1BST0pFQ1QsCi0gICAgICAgICAgICAgICAgICAgICAgICBDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9ERVNDX1dTX1BST0pFQ1QsCi0JCQkJICAgICAgICBuZXcgV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5KCkKLQkJCQkgICAgICAgIHsKLQkJCQkgICAgICAgICAgcHVibGljIFdpZGdldENvbnRyaWJ1dG9yIGNyZWF0ZSgpCi0JCQkJICAgICAgICAgIHsKLQkJCQkgICAgICAgICAgICByZXR1cm4gbmV3IFNlcnZlcldpemFyZFdpZGdldCggdHJ1ZSwgZmFsc2UgKTsKLQkJCQkgICAgICAgICAgfQotCQkJCSAgICAgICAgfSApOwotCi0gICAgd2lkZ2V0UmVnaXN0cnkuYWRkKCAiVGVzdFNlcnZpY2UiLCAKLSAgICAgICAgICAgICAgICAgICAgICAgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX1RJVExFX1dTVEVTVCwKLSAgICAgICAgICAgICAgICAgICAgICAgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX0RFU0NfV1NURVNULAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSgpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBXaWRnZXRDb250cmlidXRvciBjcmVhdGUoKQotICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTZXJ2aWNlVGVzdFdpZGdldCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9ICk7Ci0gICAgCi0gICAgd2lkZ2V0UmVnaXN0cnkuYWRkKCAiQ2xpZW50VGVzdFdpZGdldCIsIAotICAgICAgICAgICAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfVElUTEVfV1NfU0FNUExFLAotICAgICAgICAgICAgQ29uc3VtcHRpb25VSU1lc3NhZ2VzLlBBR0VfREVTQ19XU19TQU1QTEUsCi0gICAgICAgICAgICBuZXcgV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5KCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgcHVibGljIFdpZGdldENvbnRyaWJ1dG9yIGNyZWF0ZSgpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENsaWVudFRlc3RXaWRnZXQoKTsgCi0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotICAgIAotICAgIHdpZGdldFJlZ2lzdHJ5LmFkZCggIlB1Ymxpc2giLCAKLSAgICAgICAgICAgICAgICAgICAgICAgIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5QQUdFX1RJVExFX1dTX1BVQkxJU0gsCi0gICAgICAgICAgICAgICAgICAgICAgICBDb25zdW1wdGlvblVJTWVzc2FnZXMuUEFHRV9ERVNDX1dTX1BVQkxJU0gsCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5KCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFdpZGdldENvbnRyaWJ1dG9yIGNyZWF0ZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFB1Ymxpc2hXU1dpZGdldCh0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSApOwotICB9Ci0gICAgICAKLSAgcHJpdmF0ZSBjbGFzcyBDbGllbnRGcmFnbWVudCBleHRlbmRzIEJvb2xlYW5GcmFnbWVudAotICB7Ci0gICAgYm9vbGVhbiBnZW5Qcm94eV8gPSBmYWxzZTsKLSAgICAKLSAgICBwdWJsaWMgQ2xpZW50RnJhZ21lbnQoKQotICAgIHsgICAgICAKLSAgICAgIHNldENvbmRpdGlvbiggbmV3IENvbmRpdGlvbigpIAotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gZXZhbHVhdGUoKQotICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZW5Qcm94eV87Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgIAotICAgICAgU2VxdWVuY2VGcmFnbWVudCBjbGllbnRSb290ID0gbmV3IFNlcXVlbmNlRnJhZ21lbnQoKTsKLSAgICAgIAotICAgICAgY2xpZW50Um9vdC5hZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kKCBmYWxzZSApLCAiIikpOwotICAgICAgLy9jbGllbnRSb290LmFkZChuZXcgU2ltcGxlRnJhZ21lbnQobmV3IENsaWVudFNlcnZlckRlcGxveWFibGVDb25maWdDb21tYW5kKCksICIiKSk7IC8vTm90ZTogYWRkZWQgaGVyZSBmb3IgY2xpZW50ICAgICAKLSAgICAgIC8vY2xpZW50Um9vdC5hZGQoIG5ldyBDbGllbnRFeHRlbnNpb25GcmFnbWVudCgpICk7Ci0gICAgICBjbGllbnRSb290LmFkZCggbmV3IENsaWVudFJvb3RGcmFnbWVudCgpICk7Ci0gICAgICBjbGllbnRSb290LmFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgQ2xpZW50RXh0ZW5zaW9uT3V0cHV0Q29tbWFuZCgpLCAiIiApKTsKLSAgICAgIAotICAgICAgc2V0VHJ1ZUZyYWdtZW50KCBjbGllbnRSb290ICk7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIHNldEdlbmVyYXRlUHJveHkoIGJvb2xlYW4gZ2VuUHJveHkgKQotICAgIHsKLSAgICAgIGdlblByb3h5XyA9IGdlblByb3h5OwotICAgIH0KLSAgICAKLSAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnQjcmVnaXN0ZXJEYXRhTWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5KQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKERhdGFNYXBwaW5nUmVnaXN0cnkgZGF0YVJlZ2lzdHJ5KQotICAgIHsKLSAgICAgIC8vIE1hcCB0aGUgb3V0cHV0IG9mIHRoZSBzZXJ2aWNlIHNjZW5hcmlvIHRvIHRoZSBjbGllbnQgc2NlbmFyaW8uCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyRXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2VzUGFyc2VyIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlckV4dGVuc2lvbk91dHB1dENvbW1hbmQuY2xhc3MsICJXc2RsVVJJIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MgKTsKLQkgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiU2VydmljZVNlcnZlckZhY3RvcnlJZCIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzICk7Ci0JICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyRXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIlNlcnZpY2VTZXJ2ZXJJbnN0YW5jZUlkIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MgKTsKLQkgIAotICAgICAgCi0gICAgICAvLyBTZXR1cCB0aGUgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJUZXN0U2VydmljZSIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzKTsKLSAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJSZXNvdXJjZUNvbnRleHQiLCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJEZXZlbG9wQ2xpZW50IiwgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQXNzZW1ibGVDbGllbnQiLCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJEZXBsb3lDbGllbnQiLCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcyApOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSW5zdGFsbENsaWVudCIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzICk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTdGFydENsaWVudCIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiU3RhcnRTZXJ2aWNlIiwgbnVsbCk7ICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRUeXBlUnVudGltZVNlcnZlciIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzICk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRSdW50aW1lSWQiLCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcyApOyAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50SjJFRVZlcnNpb24iLCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0IiwgUHJlQ2xpZW50RGV2ZWxvcENvbW1hbmQuY2xhc3MsICJNb2R1bGUiLCBudWxsICk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0VHlwZSIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiTW9kdWxlVHlwZSIsIG51bGwpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdEVBUiIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzLCAiRWFyIiwgbnVsbCApOyAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiV3NkbFVSSSIsIFByZUNsaWVudERldmVsb3BDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVDbGllbnREZXZlbG9wQ29tbWFuZC5jbGFzcywgIldlYlNlcnZpY2UiLCBDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZUNsaWVudCIsIG51bGwgKTsgICAgICAKLSAgICB9Ci0gIH0KLSAgCi0gIHByaXZhdGUgY2xhc3MgU2VydmljZVJvb3RDb21tYW5kRnJhZ21lbnQgZXh0ZW5kcyBTZXF1ZW5jZUZyYWdtZW50Ci0gIHsKLSAgICBwdWJsaWMgU2VydmljZVJvb3RDb21tYW5kRnJhZ21lbnQoKQotICAgIHsKLSAgICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgU2NlbmFyaW9DbGVhbnVwQ29tbWFuZCgpLCAiIiApKTsKLSAgICAgIAotICAgICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZCgpLCAiIikpOwotICAgICAgYWRkIChuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBPYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kKCksICIiKSk7Ci0gICAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZCgpLCAiIikpOyAgCi0gICAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggIlNlcnZlcldpemFyZFdpZGdldCIgKSApOwotICAgICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kKCksICIiICkpOwotICAgICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZCgpLCAiIikpOwotICAgICAgYWRkKCBuZXcgU2VydmljZVJvb3RGcmFnbWVudCgpICk7Ci0gICAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IFNlcnZlckV4dGVuc2lvbk91dHB1dENvbW1hbmQoKSwgIiIgKSk7Ci0gICAgICBhZGQobmV3IFNpbXBsZUZyYWdtZW50KG5ldyBDcmVhdGVNb25pdG9yQ29tbWFuZCgpLCAiIikpOwotICAgICAgYWRkKG5ldyBTaW1wbGVGcmFnbWVudChuZXcgQ29tcHV0ZUVuZHBvaW50Q29tbWFuZCgpLCAiIikpOwotICAgICAgYWRkKCBuZXcgU2VydmljZVRlc3RGcmFnbWVudCggIlRlc3RTZXJ2aWNlIikgKTsKLSAgICAgIGFkZCggbmV3IENsaWVudEZyYWdtZW50KCkgKTsKLSAgICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KG5ldyBUZXN0RGVmYXVsdGluZ0ZyYWdtZW50KCksIiIpKTsgCi0gICAgICBhZGQoIG5ldyBTaW1wbGVGcmFnbWVudChuZXcgQ29tcHV0ZVByb3h5RW5kcG9pbnRDb21tYW5kKCksICIiKSk7Ci0gICAgICBhZGQoIG5ldyBDbGllbnRUZXN0RnJhZ21lbnQoICJDbGllbnRUZXN0V2lkZ2V0IikgKTsKLSAgICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCAiUHVibGlzaCIpICk7Ci0gICAgICBhZGQocHVibGlzaFRvUHJpdmF0ZVVERElDbWRGcmFnKTsKLSAgICAgIGFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgT3BlbkVkaXRvckNvbW1hbmQoKSwgIiIpICk7Ci0gICAgICBhZGQobmV3IExhdW5jaEZyYWdtZW50KCkpOwotICAgICAgYWRkKG5ldyBGaW5pc2hGcmFnbWVudCgpKTsKLSAgICAgIAotICAgICAgYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBTY2VuYXJpb0NsZWFudXBDb21tYW5kKCksICIiICkpOwotICAgIH0KLSAgICAKLSAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnQjcmVnaXN0ZXJEYXRhTWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5KQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKERhdGFNYXBwaW5nUmVnaXN0cnkgZGF0YVJlZ2lzdHJ5KQotICAgIHsKLSAgICAgIHB1Ymxpc2hUb1ByaXZhdGVVRERJQ21kRnJhZy5yZWdpc3RlckRhdGFNYXBwaW5ncyhkYXRhTWFwcGluZ1JlZ2lzdHJ5Xyk7ICAgCi0gICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlbGVjdGlvbkNvbW1hbmQuY2xhc3MsICJJbml0aWFsU2VsZWN0aW9uIiwgU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MgKTsgICAgICAgICAgICAKLQotICAgICAgLy8gTWFwIFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kIHRvIE9iamVjdFNlbGVjdGlvbk91dHB1dENvbW1hbmQKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiSW5pdGlhbFNlbGVjdGlvbiIsIE9iamVjdFNlbGVjdGlvbk91dHB1dENvbW1hbmQuY2xhc3MsICJPYmplY3RTZWxlY3Rpb24iLCBudWxsKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZVR5cGVSdW50aW1lU2VydmVyIiwgT2JqZWN0U2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIlR5cGVSdW50aW1lU2VydmVyIiwgbnVsbCk7Ci0gICAgICAKLSAgICAgIC8vIE1hcCBTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZCB0byBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFR5cGVSdW50aW1lU2VydmVyIiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VUeXBlUnVudGltZVNlcnZlciIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJHZW5lcmF0ZVByb3h5IiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkRldmVsb3BTZXJ2aWNlIiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkFzc2VtYmxlU2VydmljZSIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJEZXBsb3lTZXJ2aWNlIiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkRldmVsb3BDbGllbnQiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQXNzZW1ibGVDbGllbnQiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiRGVwbG95Q2xpZW50IiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkluc3RhbGxDbGllbnQiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU3RhcnRDbGllbnQiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiVGVzdENsaWVudCIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJJbnN0YWxsU2VydmljZSIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTdGFydFNlcnZpY2UiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiVGVzdFNlcnZpY2UiLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiUnVuVGVzdENsaWVudCIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJQdWJsaXNoU2VydmljZSIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJHZW5lcmF0ZVByb3h5IiwgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlJlc291cmNlQ29udGV4dCIsIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MpOyAgICAgIAotICAgICAgCi0gICAgICAvLyBNYXAgU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC4gICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJJbml0aWFsUHJvamVjdCIsIFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7IAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRUeXBlUnVudGltZVNlcnZlciIsIFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VUeXBlUnVudGltZVNlcnZlciIsIFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7ICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkluc3RhbGxTZXJ2aWNlIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTdGFydFNlcnZpY2UiLCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlRlc3RTZXJ2aWNlIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOyAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIlRlc3RTZXJ2aWNlIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOyAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJQdWJsaXNoU2VydmljZSIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiUHVibGlzaFNlcnZpY2UiLCBQdWJsaXNoV1NXaWRnZXQuY2xhc3MsICJQdWJsaXNoVG9QdWJsaWNVRERJIiwgbnVsbCk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkdlbmVyYXRlUHJveHkiLCBTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJJbnN0YWxsQ2xpZW50IiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIlJ1blRlc3RDbGllbnQiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7IAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIkdlbmVyYXRlUHJveHkiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7IC8vIEtTQwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJSZXNvdXJjZUNvbnRleHQiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJEZXZlbG9wU2VydmljZSIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJBc3NlbWJsZVNlcnZpY2UiLCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiRGVwbG95U2VydmljZSIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIkluc3RhbGxDbGllbnQiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiU3RhcnRDbGllbnQiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzLCAiRGV2ZWxvcENsaWVudCIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJBc3NlbWJsZUNsaWVudCIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJEZXBsb3lDbGllbnQiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0KLSAgICAgIAotICAgICAgLy9NYXAgT2JqZWN0U2VsZWN0aW9uT3V0cHV0Q29tbWFuZCB0byBTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKE9iamVjdFNlbGVjdGlvbk91dHB1dENvbW1hbmQuY2xhc3MsICJPYmplY3RTZWxlY3Rpb24iLCBTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJJbml0aWFsU2VsZWN0aW9uIiwgbnVsbCk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhPYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiT2JqZWN0U2VsZWN0aW9uIiwgU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50SW5pdGlhbFNlbGVjdGlvbiIsIG51bGwpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoT2JqZWN0U2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIlByb2plY3QiLCBTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJJbml0aWFsUHJvamVjdCIsIG51bGwpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoT2JqZWN0U2VsZWN0aW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIlByb2plY3QiLCBTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRJbml0aWFsUHJvamVjdCIsIG51bGwpOyAgICAgIAotCi0gICAgICAvL01hcCBPYmplY3RTZWxlY3Rpb25PdXRwdXRDb21tYW5kIHRvIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKE9iamVjdFNlbGVjdGlvbk91dHB1dENvbW1hbmQuY2xhc3MsICJPYmplY3RTZWxlY3Rpb24iLCBTZXJ2ZXJXaXphcmRXaWRnZXRPdXRwdXRDb21tYW5kLmNsYXNzKTsgICAgICAKLSAgICAgIAotICAgICAgLy90byB0aGUgdGVzdCB3aXphcmQKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJHZW5lcmF0ZVByb3h5IiwgU2VydmljZVRlc3RGcmFnbWVudC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiV3NkbFVSSSIsIFdTRExUZXN0TGF1bmNoQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZlclByb2plY3QiLCBXU0RMVGVzdExhdW5jaENvbW1hbmQuY2xhc3MpOyAgICAgCi0gICAgICAKLSAgICAgIC8vIE1hcCBTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQgICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VUeXBlUnVudGltZVNlcnZlciIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VSdW50aW1lSWQiLCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7ICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRUeXBlUnVudGltZVNlcnZlciIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFJ1bnRpbWVJZCIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsgICAgICAKLSAgICAgIC8vZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZVByb2plY3QyRUFSUHJvamVjdCIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VQcm9qZWN0TmFtZSIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VFYXJQcm9qZWN0TmFtZSIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VDb21wb25lbnRUeXBlIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOyAgICAgIAotICAgICAgLy9kYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlQ29tcG9uZW50TmFtZSIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIC8vZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZUVhckNvbXBvbmVudE5hbWUiLCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICAvL2RhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlJ1bnRpbWUyQ2xpZW50VHlwZXMiLCBDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0TmFtZSIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEVhclByb2plY3ROYW1lIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgLy9kYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRFYXJDb21wb25lbnROYW1lIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgLy9kYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRDb21wb25lbnROYW1lIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOyAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50Q29tcG9uZW50VHlwZSIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIC8vZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZUoyRUVWZXJzaW9uIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgLy9kYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRKMkVFVmVyc2lvbiIsIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkdlbmVyYXRlUHJveHkiLCBDbGllbnRGcmFnbWVudC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJHZW5lcmF0ZVByb3h5IiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZU5lZWRFQVIiLCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnROZWVkRUFSIiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOwotICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIkluc3RhbGxTZXJ2aWNlIiwgU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MpOyAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIlN0YXJ0U2VydmljZSIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJUZXN0U2VydmljZSIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJNb25pdG9yU2VydmljZSIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJQdWJsaXNoU2VydmljZSIsIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzKTsgIAotICAgICAgCi0gICAgICAKLSAgICAgIC8vIE1hcCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlVHlwZVJ1bnRpbWVTZXJ2ZXIiLCBTZXJ2ZXJFeHRlbnNpb25GcmFnbWVudC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlRlc3RTZXJ2aWNlIiwgU2VydmljZVRlc3RGcmFnbWVudC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlB1Ymxpc2giLCBQdWJsaXNoVG9Qcml2YXRlVURESUNvbW1hbmRGcmFnbWVudC5jbGFzcyk7ICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VUeXBlUnVudGltZVNlcnZlciIsV1NETFRlc3RMYXVuY2hDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZVR5cGVSdW50aW1lU2VydmVyIiwgQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0JICAKLQkgICAgLy8gU2V0dXAgdGhlIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC4KLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkRldmVsb3BTZXJ2aWNlIiwgUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkFzc2VtYmxlU2VydmljZSIsIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJEZXBsb3lTZXJ2aWNlIiwgUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkluc3RhbGxTZXJ2aWNlIiwgUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlN0YXJ0U2VydmljZSIsIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcyk7ICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJUZXN0U2VydmljZSIsIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcyk7ICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiUHVibGlzaFNlcnZpY2UiLCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MpOwotICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIkdlbmVyYXRlUHJveHkiLCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MpOyAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJSZXNvdXJjZUNvbnRleHQiLCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJPYmplY3RTZWxlY3Rpb24iLCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJTZWxlY3Rpb24iLCBuZXcgU2VsZWN0aW9uVHJhbnNmb3JtZXIoKSApOwotCQkKLQkgIC8vZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZpY2VDb21wb25lbnRUeXBlIiwgUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiTW9kdWxlVHlwZSIsIG51bGwpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmljZVR5cGVSdW50aW1lU2VydmVyIiwgUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzICk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlUnVudGltZUlkIiwgUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzICk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlSjJFRVZlcnNpb24iLCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoIFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmVyUHJvamVjdCIsIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIk1vZHVsZSIsIG51bGwgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZlclByb2plY3RFQVIiLCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJFYXIiLCBudWxsICk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2aWNlQ29tcG9uZW50VHlwZSIsIFByZVNlcnZpY2VEZXZlbG9wQ29tbWFuZC5jbGFzcywgIk1vZHVsZVR5cGUiLCBudWxsICk7ICAgICAgCi0JCQkKLQkgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKCBQcmVTZXJ2aWNlRGV2ZWxvcENvbW1hbmQuY2xhc3MsICJXZWJTZXJ2aWNlIiwgU2VydmVyRXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5jbGFzcyApOwotIAotICAgICAgLy8gTWFwIENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFR5cGVSdW50aW1lU2VydmVyIiwgQ2xpZW50RXh0ZW5zaW9uRnJhZ21lbnQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRUeXBlUnVudGltZVNlcnZlciIsIENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRUeXBlUnVudGltZVNlcnZlciIsIEZpbmlzaERlZmF1bHRDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiVGVzdFNlcnZpY2UiLCBDbGllbnRUZXN0RnJhZ21lbnQuY2xhc3MgKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiVGVzdFNlcnZpY2UiLCBDbGllbnRUZXN0V2lkZ2V0LmNsYXNzICk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlJ1blRlc3RDbGllbnQiLCBDbGllbnRUZXN0V2lkZ2V0LmNsYXNzICk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3QiLENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnROZWVkRUFSIiwgQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0JICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEVhclByb2plY3ROYW1lIiwgQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0JICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudEVhckNvbXBvbmVudE5hbWUiLCBDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLQkgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50UHJvamVjdCIsIFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MpOwotCSAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRQcm9qZWN0RUFSIiwgV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcyk7Ci0JICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkxhdW5jaGVkU2VydmljZVRlc3ROYW1lIiwgV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFNlcnZlciIsIENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJSdW5UZXN0Q2xpZW50IixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsgCi0gICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJSdW5UZXN0Q2xpZW50IiwgQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgICAKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJUZXN0Q2xpZW50IiwgQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJUZXN0U2VydmljZSIsIG51bGwpOwotICAgCSAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIlRlc3RDbGllbnQiLCBUZXN0RGVmYXVsdGluZ0ZyYWdtZW50LmNsYXNzLCAiR2VuZXJhdGVQcm94eSIsIG51bGwpOwotICAgCSAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJUZXN0U2VydmljZSIsIFRlc3REZWZhdWx0aW5nRnJhZ21lbnQuY2xhc3MsICJHZW5lcmF0ZVByb3h5IiwgbnVsbCk7Ci0gICAJICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFJ1bnRpbWVJZCIsIFRlc3REZWZhdWx0aW5nRnJhZ21lbnQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJUZXN0U2VydmljZSIsIENsaWVudFRlc3RGcmFnbWVudC5jbGFzcywgIkdlbmVyYXRlUHJveHkiLCBudWxsKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiVGVzdFNlcnZpY2UiLCBGaW5pc2hUZXN0RnJhZ21lbnQuY2xhc3MsICJHZW5lcmF0ZVByb3h5IiwgbnVsbCk7Ci0KLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmVyUHJvamVjdCIsIENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyRXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIldzZGxVUkkiLCBDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICAgICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiU2VydmljZVNlcnZlckluc3RhbmNlSWQiLCBDcmVhdGVNb25pdG9yQ29tbWFuZC5jbGFzcyk7Ci0KLSAgICAgIC8vIE1hcCBTZXJ2ZXJFeHRlbnNpb25PdXRwdXRDb21tYW5kIGZvciBTZXJ2ZXJTdGFydCgpCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIlNlcnZlclByb2plY3RFQVIiLCBTZXJ2ZXJFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiRWFyUHJvamVjdE5hbWUiLCBudWxsKTsKLQotICAgICAgLy8gTUFQIHBvc3Qgc2VydmVyIGNvbmZpZyBjYWxsCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3RFQVIiLCBDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiRWFyUHJvamVjdE5hbWUiLCBudWxsKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKENsaWVudEV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiQ2xpZW50U2VydmVySW5zdGFuY2UiLCBDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiRXhpc3RpbmdTZXJ2ZXJJZCIsIG51bGwpOwotICAgICAgCi0gICAgICAvLyBNYXAgQ2xpZW50RXh0ZW5zaW9uT3V0cHV0Q29tbWFuZAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIkNhbkdlbmVyYXRlUHJveHkiLCBDbGllbnRUZXN0RnJhZ21lbnQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIlByb3h5QmVhbiIsIFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIlByb3h5QmVhbiIsIENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uT3V0cHV0Q29tbWFuZC5jbGFzcywgIlNldEVuZHBvaW50TWV0aG9kIiwgQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0JICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiU2VydmVySW5zdGFuY2VJZCIsIEZpbmlzaERlZmF1bHRDb21tYW5kLmNsYXNzKTsKLQkgIAotICAgICAgLy8gTWFwIE1hbmFnZVNlcnZlclN0YXJ0VXBDb21tYW5kCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhTZXJ2ZXJFeHRlbnNpb25PdXRwdXRDb21tYW5kLmNsYXNzLCAiSXNXZWJQcm9qZWN0U3RhcnR1cFJlcXVlc3RlZCIsIE1hbmFnZVNlcnZlclN0YXJ0VXBDb21tYW5kLmNsYXNzKTsKLSAgICAgIAotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyV2l6YXJkV2lkZ2V0T3V0cHV0Q29tbWFuZC5jbGFzcywgIlN0YXJ0U2VydmljZSIsIE1hbmFnZVNlcnZlclN0YXJ0VXBDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlcldpemFyZFdpZGdldE91dHB1dENvbW1hbmQuY2xhc3MsICJUZXN0U2VydmljZSIsIE1hbmFnZVNlcnZlclN0YXJ0VXBDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZlckV4dGVuc2lvbkRlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiU2VydmVyUHJvamVjdCIsIE1hbmFnZVNlcnZlclN0YXJ0VXBDb21tYW5kLmNsYXNzLCAiU2VydmljZVByb2plY3QiLCBuZXcgU3RyaW5nVG9JUHJvamVjdFRyYW5zZm9ybWVyKCkpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoU2VydmVyRXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJTZXJ2ZXJTZXJ2ZXIiLCBNYW5hZ2VTZXJ2ZXJTdGFydFVwQ29tbWFuZC5jbGFzcywiU2VydmljZVNlcnZlclR5cGVJZCIsIG51bGwpOwotICAgICAgCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhDbGllbnRFeHRlbnNpb25EZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkNsaWVudFByb2plY3QiLCBNYW5hZ2VTZXJ2ZXJTdGFydFVwQ29tbWFuZC5jbGFzcywgIlNhbXBsZVByb2plY3QiLCBuZXcgU3RyaW5nVG9JUHJvamVjdFRyYW5zZm9ybWVyKCkpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoQ2xpZW50RXh0ZW5zaW9uRGVmYXVsdGluZ0NvbW1hbmQuY2xhc3MsICJDbGllbnRTZXJ2ZXJJbnN0YW5jZSIsIE1hbmFnZVNlcnZlclN0YXJ0VXBDb21tYW5kLmNsYXNzLCJTYW1wbGVFeGlzdGluZ1NlcnZlciIsIG5ldyBTZXJ2ZXJJbnN0VG9JU2VydmVyVHJhbnNmb3JtZXIoKSk7ICAgICAgCi0gICAgICAKLSAgICAgIC8vIE1hcCBXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhUZXN0RGVmYXVsdGluZ0ZyYWdtZW50LmNsYXNzLCAiVGVzdEZhY2lsaXR5IixDbGllbnRUZXN0RGVsZWdhdGVDb21tYW5kLmNsYXNzKTsKLSAgICAgIGRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFdlYlNlcnZpY2VDbGllbnRUZXN0QXJyaXZhbENvbW1hbmQuY2xhc3MsICJGb2xkZXIiLENsaWVudFRlc3REZWxlZ2F0ZUNvbW1hbmQuY2xhc3MpOwotICAgICAgZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV2ViU2VydmljZUNsaWVudFRlc3RBcnJpdmFsQ29tbWFuZC5jbGFzcywgIkpzcEZvbGRlciIsQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kLmNsYXNzLCAiUnVuQ2xpZW50VGVzdCIsQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kLmNsYXNzLCAiTWV0aG9kcyIsQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kLmNsYXNzLCAiU2FtcGxlUHJvamVjdCIsQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXZWJTZXJ2aWNlQ2xpZW50VGVzdEFycml2YWxDb21tYW5kLmNsYXNzLCAiU2FtcGxlUHJvamVjdEVBUiIsQ2xpZW50VGVzdERlbGVnYXRlQ29tbWFuZC5jbGFzcyk7ICAgIAotICAgIAotICAgICAgLy8gTWFwIE9wZW5FZGl0b3JDb21tYW5kCi0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiV2ViU2VydmljZSIsIE9wZW5FZGl0b3JDb21tYW5kLmNsYXNzICk7Ci0gICAgICBkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyggUHJlU2VydmljZURldmVsb3BDb21tYW5kLmNsYXNzLCAiQ29udGV4dCIsICAgIE9wZW5FZGl0b3JDb21tYW5kLmNsYXNzICk7ICAgICAgCi0gICAgICAKLSAgICAgIC8vTWFwIEZpbmlzaCBDb21tYW5kIAotICAgICAgCi0gICAgICAKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvd2lkZ2V0cy9ydW50aW1lL1NlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL3J1bnRpbWUvU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhMmVhY2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL3J1bnRpbWUvU2VydmVyUnVudGltZVNlbGVjdGlvbldpZGdldERlZmF1bHRpbmdDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMTMxIDEyMTA3MSAgIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lciAgICAgCi0gKiAyMDA2MDIyMSAgIDExOTExMSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwMjI3ICAgMTI0MzkyIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjAzMTUgICAxMzE5NjMgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDQxOCAgIDEyOTY4OCByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNDI3ICAgMTI2NzgwIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA0MjcgICAxMzgwNTggam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA1MjMgICAxMzM3MTQgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA1MjUgICAxNDM4NDMgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA5MDUgICAxNTYyMzAga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4sIEhhbmRsaW5nIHByb2plY3RzIHdpdGggbm8gdGFyZ2V0IHJ1bnRpbWUKLSAqIDIwMDcwMzE5CSAgMTU5NDU4IG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbiBhZGRlZCBpbiBzb21lIG51bGwgY2hlY2tzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLndpZGdldHMucnVudGltZTsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU2VydmVyVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbi5GYWNldE1hdGNoZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbi5GYWNldFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uUmVxdWlyZWRGYWNldFZlcnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLkNvbnN1bXB0aW9uVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuY29tbW9uLkRlZmF1bHRpbmdVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkucGx1Z2luLldlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50U2VydmVyUnVudGltZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnByZWZlcmVuY2VzLlByb2plY3RUb3BvbG9neUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMucnVudGltZS5DbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuRmFjZXRNYXRjaENhY2hlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LlJ1bnRpbWVEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53c3J0LlNlcnZpY2VSdW50aW1lRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydC5XZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZGF0YS5UeXBlUnVudGltZVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlclR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlckNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlclV0aWw7Ci0KLXB1YmxpYyBjbGFzcyBTZXJ2ZXJSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQgZXh0ZW5kcyBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQKLXsJCi0gIHByaXZhdGUgYm9vbGVhbiAgICAgICAgICAgZ2VuZXJhdGVQcm94eV89dHJ1ZTsgLy9qdmgKLSAgCi0gIHByaXZhdGUgVHlwZVJ1bnRpbWVTZXJ2ZXIgc2VydmljZUlkc187Ci0gIHByaXZhdGUgYm9vbGVhbiBzZXJ2aWNlSWRzRml4ZWRfID0gZmFsc2U7Ci0gIHByaXZhdGUgU3RyaW5nIHNlcnZpY2VSdW50aW1lSWRfOwotICBwcml2YXRlIFN0cmluZyBzZXJ2aWNlUHJvamVjdE5hbWVfOwotICBwcml2YXRlIFN0cmluZyBzZXJ2aWNlRWFyUHJvamVjdE5hbWVfOwotICBwcml2YXRlIFN0cmluZyBzZXJ2aWNlQ29tcG9uZW50VHlwZV87Ci0gIHByaXZhdGUgSVByb2plY3QgaW5pdGlhbFByb2plY3RfOwotICBwcml2YXRlIGJvb2xlYW4gc2VydmljZU5lZWRFQVJfID0gdHJ1ZTsKLSAgcHJpdmF0ZSBGYWNldE1hdGNoZXIgc2VydmljZUZhY2V0TWF0Y2hlcl87Ci0KLSAgcHVibGljIFNlcnZlclJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0gIAotICAKLSAgLyoqCi0gICAqIERlZmF1bHRzIHRoZSBmb2xsb3dpbmcgYml0cyBvZiBpbmZvcm1hdGlvbiBpbiB0aGUgZm9sbG93aW5nIG9yZGVyOgotICAgKiBzZXJ2aWNlUnVudGltZUlkXyA6IHRoZSBzZXJ2aWNlUnVudGltZUlkLiBNdXN0IGJlIGRlZmF1bHRlZCB0byBub24tZW1wdHkgU3RyaW5nLgotICAgKiBzZXJ2aWNlSWRzXy5ydW50aW1lSWRfOiB0aGUgV2ViIHNlcnZpY2UgcnVudGltZSBpZC4gTXVzdCBiZSBkZWZhdWx0ZWQgdG8gbm9uLWVtcHR5IFN0cmluZy4KLSAgICogc2VydmljZVByb2plY3ROYW1lXyA6IHRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlIHByb2plY3QuIE11c3QgYmUgbm9uLWVtcHR5LiBNYXkgb3IgbWF5IG5vdCBleGlzdC4KLSAgICogc2VydmljZUNvbXBvbmVudFR5cGVfOiB0aGUgaWQgb2YgdGhlIHNlcnZpY2UgcHJvamVjdCB0ZW1wbGF0ZS4gTXVzdCBiZSBlbXB0eSBpZiB0aGUgc2VydmljZQotICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3QgZXhpc3RzLiBNdXN0IGJlIG5vbi1lbXB0eSBvZiB0aGUgc2VydmljZSBwcm9qZWN0IGRvZXMgbm90IGV4aXN0LgotICAgKiBzZXJ2aWNlSWRzXy5zZXJ2ZXJJZF86IHRoZSBzZXJ2ZXIgdHlwZSBpZC4gTWF5IGJlIGFuIGVtcHR5IFN0cmluZyBpZiB0aGUgZGVmYXVsdGVkIFdlYiBzZXJ2aWNlIHJ1bnRpbWUKLSAgICogICAgICAgICAgICAgICAgICAgICAgICBkb2VzIG5vdCByZXF1aXJlIGEgc2VydmVyLgotICAgKiBzZXJ2aWNlSWRzXy5zZXJ2ZXJJbnN0YW5jZUlkXzogdGhlIHNlcnZlciBpZC4gTWF5IGJlIG51bGwgb3IgYW4gZW1wdHkgU3RyaW5nLgotICAgKiBzZXJ2aWNlTmVlZEVBUl86IHRydWUgaWYgYW4gRUFSIGlzIG5lZWRlZC4gRmFsc2Ugb3RoZXJ3aXNlLgotICAgKiBzZXJ2aWNlRWFyUHJvamVjdE5hbWVfOiB0aGUgc2VydmljZSBFQVIgcHJvamVjdC4gTXVzdCBiZSBlbXB0eSBpZiB0aGUgc2VydmljZU5lZWRFQVJfIGlzIGZhbHNlLgotICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBNdXN0IGJlIG5vbi1lbXB0eSBpZiB0aGUgc2VydmljZU5lZWRFQVJfIGlzIHRydWUuCi0gICAqIERlZmF1bHRzIHRoZSBwYXJhbGxlbCBpbmZvcm1hdGlvbiBvbiB0aGUgY2xpZW50LXNpZGUgaWYgbmVlZGVkIAotICAgKiAoQHNlZSBDbGllbnRSdW50aW1lU2VsZWN0aW9uV2lkZ2V0RGVmYXVsdGluZ0NvbW1hbmQjZXhlY3V0ZSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgKi8KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsgICAgCi0gICAgSUVudmlyb25tZW50IGVudiA9IGdldEVudmlyb25tZW50KCk7Ci0gICAgCi0gICAgdHJ5Ci0gICAgeyAgICAJCi0gICAgIAotICAgICAvLyoqU3RlcCAxKiogRGVmYXVsdCB0aGUgc2VydmljZVJ1bnRpbWUgYW5kIHRoZSBXZWIgc2VydmljZSBydW50aW1lLgotICAgICAvL3NlcnZpY2VJZHNGaXhlZF8gaXMgc2V0IHRvIHRydWUgZm9yIHRoZSBBbnQgc2NlbmFyaW8uIEl0J3MgYWx3YXlzIGZhbHNlIGZvciB0aGUgd2l6YXJkCi0gICAgIC8vc2NlbmFyaW9zLiAgICAJCi0gICAgIGlmIChzZXJ2aWNlSWRzRml4ZWRfKQotICAgICB7Ci0gICAgICAgLy9TZXQgdGhlIHNlcnZpY2VSdW50aW1lIGJhc2VkIG9uIHRoZSBydW50aW1lIGFuZCBzZXJ2ZXIuCi0gICAgICAgLy9JZiB1c2VyIHNldCBhIHNlcnZpY2UgcHJvamVjdCB1c2UgdGhhdCBhcyBpbml0aWFsIHByb2plY3Qgb3RoZXJ3aXNlIGRlZmF1bHQgZnJvbSBpbml0aWFsIHNlbGVjdGlvbi4KLSAgICAJIGlmIChzZXJ2aWNlUHJvamVjdE5hbWVfICE9IG51bGwpIAotICAgIAkgewotICAgIAkJIGluaXRpYWxQcm9qZWN0XyA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChzZXJ2aWNlUHJvamVjdE5hbWVfKTsKLSAgICAJCSAKLSAgICAJCSBEZWZhdWx0UnVudGltZVRyaXBsZXQgZHJ0ID0gZ2V0RGVmYXVsdFJ1bnRpbWUoaW5pdGlhbFByb2plY3RfLCBzZXJ2aWNlSWRzXy5nZXRUeXBlSWQoKSwgZmFsc2UpOwotICAgICAgICAgICAgIHNlcnZpY2VGYWNldE1hdGNoZXJfID0gZHJ0LmdldEZhY2V0TWF0Y2hlcigpOwotICAgIAkgICAgIHNlcnZpY2VQcm9qZWN0TmFtZV8gPSBkcnQuZ2V0UHJvamVjdE5hbWUoKTsKLSAgICAJICAgICBzZXJ2aWNlUnVudGltZUlkXyA9IGRydC5nZXRSdW50aW1lSWQoKTsgICAgICAgCi0KLSAgICAJICAgICAgIGlmIChzZXJ2aWNlUnVudGltZUlkXyAhPSBudWxsKQotICAgIAkgICAgICAgewotICAgIAkgICAgCSAgIHNlcnZpY2VJZHNfLnNldFJ1bnRpbWVJZChXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTZXJ2aWNlUnVudGltZURlc2NyaXB0b3JCeUlkKHNlcnZpY2VSdW50aW1lSWRfKS5nZXRSdW50aW1lKCkKLSAgICAJICAgICAgCSAgICAgICAgIC5nZXRJZCgpKTsKLSAgICAJICAgICAgIH0KLSAgICAJIH0KLSAgICAJIGVsc2UKLSAgICAJIHsKLSAgICAJCSBEZWZhdWx0UnVudGltZVRyaXBsZXQgZHJ0ID0gZ2V0RGVmYXVsdFNlcnZpY2VSdW50aW1lRm9yRml4ZWRSdW50aW1lQW5kU2VydmVyKGluaXRpYWxQcm9qZWN0Xyk7ICAKLSAgICAJICAgICBzZXJ2aWNlRmFjZXRNYXRjaGVyXyA9IGRydC5nZXRGYWNldE1hdGNoZXIoKTsKLSAgICAJICAgICBzZXJ2aWNlUHJvamVjdE5hbWVfID0gZHJ0LmdldFByb2plY3ROYW1lKCk7Ci0gICAgCSAgICAgc2VydmljZVJ1bnRpbWVJZF8gPSBkcnQuZ2V0UnVudGltZUlkKCk7CSAKLSAgICAJIH0gICAKLSAgICAgfQotICAgICBlbHNlCi0gICAgIHsKLSAgICAgICAvLyBTZXQgdGhlIHJ1bnRpbWUgYmFzZWQgb24gdGhlIGluaXRpYWwgc2VsZWN0aW9uCi0gICAgICAgRGVmYXVsdFJ1bnRpbWVUcmlwbGV0IGRydCA9IGdldERlZmF1bHRSdW50aW1lKGluaXRpYWxQcm9qZWN0Xywgc2VydmljZUlkc18uZ2V0VHlwZUlkKCksIGZhbHNlKTsKLSAgICAgICBzZXJ2aWNlRmFjZXRNYXRjaGVyXyA9IGRydC5nZXRGYWNldE1hdGNoZXIoKTsKLSAgICAgICBzZXJ2aWNlUHJvamVjdE5hbWVfID0gZHJ0LmdldFByb2plY3ROYW1lKCk7Ci0gICAgICAgc2VydmljZVJ1bnRpbWVJZF8gPSBkcnQuZ2V0UnVudGltZUlkKCk7ICAgICAgIAotCi0gICAgICAgaWYgKHNlcnZpY2VSdW50aW1lSWRfICE9IG51bGwpCi0gICAgICAgewotICAgIAkgICBzZXJ2aWNlSWRzXy5zZXRSdW50aW1lSWQoV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yQnlJZChzZXJ2aWNlUnVudGltZUlkXykuZ2V0UnVudGltZSgpCi0gICAgCQkgICAgICAgICAuZ2V0SWQoKSk7IAotICAgICAgIH0gCi0gICAgIH0KLSAgICAgCi0gICAgIC8vKipTdGVwIDIqKiBEZWZhdWx0IHRoZSBzZXJ2aWNlIHByb2plY3QgaWYgaXQgd2FzIG5vdCBhbHJlYWR5IGRlZmF1bHRlZCAKLSAgICAgLy9hcyBwYXJ0IG9mIGRlZmF1bHRpbmcgdGhlIFdlYiBzZXJ2aWNlIHJ1bnRpbWUuCi0gICAgIGlmIChzZXJ2aWNlUHJvamVjdE5hbWVfID09IG51bGwpCi0gICAgIHsKLSAgICAgICAvLyBQcm9qZWN0IG5hbWUgZGlkIG5vdCBnZXQgc2V0IHdoZW4gdGhlIHJ1bnRpbWUgd2FzIHNldCwgc28gc2V0IGl0IG5vdwotICAgICAgIHNlcnZpY2VQcm9qZWN0TmFtZV8gPSBnZXREZWZhdWx0U2VydmljZVByb2plY3ROYW1lKCk7Ci0gICAgIH0KLQotICAgICAvLyoqU3RlcCAzKiogRGVmYXVsdCB0aGUgc2VydmljZSBwcm9qZWN0IHR5cGUuCi0gICAgIElQcm9qZWN0IHNlcnZpY2VQcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHNlcnZpY2VQcm9qZWN0TmFtZV8pOyAKLSAgICAgaWYgKCFzZXJ2aWNlUHJvamVjdC5leGlzdHMoKSkKLSAgICAgewotICAgICAgIC8vIFNldCB0aGUgcHJvamVjdCB0ZW1wbGF0ZQotICAgICAgIHNlcnZpY2VDb21wb25lbnRUeXBlXyA9IGdldERlZmF1bHRTZXJ2aWNlUHJvamVjdFRlbXBsYXRlKCk7Ci0gICAgIH0KLSAgICAgZWxzZQotICAgICB7Ci0gICAgICAgLy9TZXQgaXQgdG8gYW4gZW1wdHkgU3RyaW5nCi0gICAgICAgc2VydmljZUNvbXBvbmVudFR5cGVfID0gIiI7Ci0gICAgIH0KLSAgICAgLy8qKlN0ZXAgNCoqIERlZmF1bHQgdGhlIHNlcnZlciBpZiB0aGlzIGlzIG5vdCBhbiBBbnQgc2NlbmFyaW8uCi0gICAgIGlmICghc2VydmljZUlkc0ZpeGVkXykKLSAgICAgewotICAgICAgIC8vIFNldCB0aGUgc2VydmVyCi0gICAgICAgSVN0YXR1cyBzZXJ2ZXJTdGF0dXMgPSBzZXRTZXJ2aWNlRGVmYXVsdFNlcnZlcigpOwotICAgICAgIGlmIChzZXJ2ZXJTdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpCi0gICAgICAgewotICAgICAgICAgZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzZXJ2ZXJTdGF0dXMpOwotICAgICAgICAgcmV0dXJuIHNlcnZlclN0YXR1czsKLSAgICAgICB9Ci0gICAgIH0KLSAgICAgCi0gICAgIC8vKipTdGVwIDUqKiBEZWZhdWx0IGNsaWVudE5lZWRFQVIgYW5kIGNsaWVudCBFQVIgaWYgYW4gRUFSIGlzIG5lZWRlZAotICAgICBzZXREZWZhdWx0U2VydmljZUVhclByb2plY3QoKTsKLSAgICAgCi0gICAgIC8vIGp2aCAtIGZvciBub3cgY29tbWVudCBvdXQgZ2VuZXJhdGUgcHJveHkKLSAgICAgLy8gICBuZWVkIHRvIGxvb2sgYXQgZGVmYXVsdGluZyBiYXNlZCBvbiBhbiBldmVudAotICAgICAvLyAgICBvbiBwYWdlIDEgLSB3aGVuIGNsaWVudCBnZW5lcmF0aW9uIGdvZXMgZnJvbSBub25lCi0gICAgIC8vICAgIHRvIGRldmVsb3AuLi4KLSAgICAgLyppZiAoZ2VuZXJhdGVQcm94eV8pCi0gICAgIHsqLwotICAgIAkgLy9EZWZhdWx0IHRoZSBjbGllbnQtc2lkZS4KLSAgICAJIElTdGF0dXMgY2xpZW50U2lkZVN0YXR1cyA9IGRlZmF1bHRDbGllbnRTaWRlKG1vbml0b3IpOwotICAgICAgICAgaWYgKGNsaWVudFNpZGVTdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBTdGF0dXMuRVJST1IpCi0gICAgICAgICB7Ci0gICAgICAgICAgIHJldHVybiBjbGllbnRTaWRlU3RhdHVzOwotICAgICAgICAgfSAgICAgICAgICAgICAgICAgIAotICAgIC8vIH0KLSAgICAgICAgICAKLSAgICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgIAotICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vIENhdGNoIGFsbCBFeGNlcHRpb25zIGluIG9yZGVyIHRvIGdpdmUgc29tZSBmZWVkYmFjayB0byB0aGUgdXNlcgotICAgICAgSVN0YXR1cyBlcnJvclN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfVEFTS19FWENFUFRFRCwKLSAgICAgICAgICBuZXcgU3RyaW5nW10geyBlLmdldE1lc3NhZ2UoKSB9KSwgZSk7Ci0gICAgICBlbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKGVycm9yU3RhdHVzKTsKLSAgICAgIHJldHVybiBlcnJvclN0YXR1czsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIElTdGF0dXMgZGVmYXVsdENsaWVudFNpZGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKQotICB7Ci0gICAgSVN0YXR1cyBjbGllbnREZWZhdWx0RnJvbVNlcnZpY2VTdGF0dXMgPSBkZWZhdWx0Q2xpZW50U2lkZUZyb21TZXJ2aWNlU2lkZShzZXJ2aWNlUHJvamVjdE5hbWVfLCBzZXJ2aWNlSWRzXywgc2VydmljZU5lZWRFQVJfLCBzZXJ2aWNlRWFyUHJvamVjdE5hbWVfKTsKLQotICAgIC8vIElmIGFuIGVycm9yIHN0YXR1cyBpcyByZXR1cm5lZCwgdGhlIG9ubHkgcHJvcGVydHkgdGhhdCB3YXMgc2V0IG9uIAotICAgIC8vIENsaWVudFJ1bnRpbWVTZWxlY3Rpb25XaWRnZXREZWZhdWx0aW5nQ29tbWFuZCBpcyBjbGllbnRQcm9qZWN0TmFtZV8uIAotICAgIC8vIFRoZSByZXN0IG9mIHRoZSBwcm9wZXJ0aWVzIGluY2x1ZGluZyBjbGllbnRSdW50aW1lSWRfLCBjbGllbnRDb21wb25lbnRUeXBlXywgCi0gICAgLy8gYWxsIHRoZSB2YWx1ZXMgaW4gY2xpZW50SWRzXywgY2xpZW50TmVlZEVBUl8sIGFuZCBjbGllbnRFYXJQcm9qZWN0TmFtZV8gCi0gICAgLy8gaGF2ZSBub3QgYmVlbiBzZXQgYmVjYXVzZSB0aGUgc2VydmljZSBzaWRlIHNlcnZlciBhbmQKLSAgICAvLyB3ZWIgc2VydmljZSBydW50aW1lIGNvdWxkIG5vdCBiZSB1c2VkIG9uIHRoZSBjbGllbnQgc2lkZS4gUnVuIHRoZSBlbnRpcmUKLSAgICAvLyBjbGllbnQtc2lkZSBkZWZhdWx0aW5nIGFsZ29yaXRobSB1c2luZyBjbGllbnRQcm9qZWN0TmFtZV8gYXMgdGhlIAotICAgIC8vIGNsaWVudEluaXRpYWxQcm9qZWN0Xy4gVGhlbiB1cGRhdGUgdGhlIGNsaWVudEVhclByb2plY3ROYW1lXyBiYXNlZCBvbiB0aGUKLSAgICAvLyBzZXJ2aWNlIHNpZGUgRUFSLgotICAgIGlmIChjbGllbnREZWZhdWx0RnJvbVNlcnZpY2VTdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLkVSUk9SKQotICAgIHsKLSAgICAgIC8vIDEuIFJ1biBjbGllbnQgc2lkZSBkZWZhdWx0aW5nIGZyb20gc2NyYXRjaCB3aXRoIGNsaWVudEluaXRpYWxQcm9qZWN0XwotICAgICAgLy8gc2V0IHRvIHRoZSBuZXcgY2xpZW50UHJvamVjdE5hbWVfLgotICAgICAgSVByb2plY3QgY2xpZW50UHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChnZXRDbGllbnRQcm9qZWN0TmFtZSgpKTsKLSAgICAgIHNldENsaWVudEluaXRpYWxQcm9qZWN0KGNsaWVudFByb2plY3QpOwotICAgICAgSVN0YXR1cyBjbGllbnRFeGVjdXRlU3RhdHVzID0gc3VwZXIuZXhlY3V0ZShtb25pdG9yLCBudWxsKTsKLSAgICAgIGlmIChjbGllbnRFeGVjdXRlU3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKQotICAgICAgewotICAgICAgICByZXR1cm4gY2xpZW50RXhlY3V0ZVN0YXR1czsKLSAgICAgIH0KLQotICAgICAgLy8gMi4gVXBkYXRlIHRoZSBjbGllbnQtc2lkZSBFQVIgaWYgc2VydmljZU5lZWRFQVJfIGlzIHRydWU7Ci0gICAgICBpZiAoc2VydmljZU5lZWRFQVJfKQotICAgICAgewotICAgICAgICBkZWZhdWx0Q2xpZW50RWFyRnJvbVNlcnZpY2VFYXIoc2VydmljZVByb2plY3ROYW1lXywgc2VydmljZUVhclByb2plY3ROYW1lXyk7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCSAgCi0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBzZXREZWZhdWx0U2VydmljZUVhclByb2plY3QoKQotICB7Ci0gICAgLy9Eb24ndCBuZWVkIGFuIGVhciBpZiB0aGlzIGlzIGEgSmF2YSBwcm9qZWN0LCBvciBpZiB0aGUgc2VsZWN0ZWQgdGVtcGxhdGUgaXMganN0LnV0aWxpdHkKLSAgICBJUHJvamVjdCBzZXJ2aWNlUHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChzZXJ2aWNlUHJvamVjdE5hbWVfKTsKLSAgICBpZiAoc2VydmljZVByb2plY3QuZXhpc3RzKCkpCi0gICAgewotICAgICAgc2VydmljZU5lZWRFQVJfID0gIShGYWNldFV0aWxzLmlzSmF2YVByb2plY3Qoc2VydmljZVByb2plY3QpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHNlcnZpY2VOZWVkRUFSXyA9ICEoRmFjZXRVdGlscy5pc1V0aWxpdHlUZW1wbGF0ZShzZXJ2aWNlQ29tcG9uZW50VHlwZV8pKTsgIAotICAgIH0gICAgCi0gICAgCi0gICAgLy9JZiBzZXJ2aWNlTmVlZEVBUl8gaXMgc3RpbGwgdHJ1ZSwgaXQgbWVhbnMgdGhhdCB3ZSdyZSBub3QgZGVhbGluZyB3aXRoIGEgSmF2YSBwcm9qZWN0Ci0gICAgLy9vciBKYXZhIHByb2plY3QgdHlwZS4gQ2hlY2sgdGhlIHNlcnZlci4KLSAgICAKLSAgICAKLSAgICBpZiAoc2VydmljZU5lZWRFQVJfKQotICAgIHsKLSAgICAgIAotICAgICAgLy8gRGV0ZXJtaW5lIGlmIGFuIGVhciBzZWxlY3Rpb24gaXMgbmVlZGVkIGJhc2VkIG9uIHRoZSBzZXJ2ZXIgdHlwZS4gICAgICAKLSAgICAgIFN0cmluZyBzZXJ2ZXJJZCA9IHNlcnZpY2VJZHNfLmdldFNlcnZlcklkKCk7Ci0gICAgICBpZiAoc2VydmVySWQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLy8gVXNlIHRoZSBzZXJ2ZXIgdHlwZQotICAgICAgICBTdHJpbmcgc2VydmVyVGFyZ2V0SWQgPSBTZXJ2ZXJVdGlscy5nZXRSdW50aW1lVGFyZ2V0SWRGcm9tRmFjdG9yeUlkKHNlcnZlcklkKTsKLSAgICAgICAgaWYgKHNlcnZlclRhcmdldElkICE9IG51bGwgJiYgc2VydmVyVGFyZ2V0SWQubGVuZ3RoKCkgPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFTZXJ2ZXJVdGlscy5pc1RhcmdldFZhbGlkRm9yRUFSKHNlcnZlclRhcmdldElkLCAiMTMiKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBEZWZhdWx0IHRoZSBFQVIgc2VsZWN0aW9uIHRvIGJlIGVtcHR5Ci0gICAgICAgICAgICBzZXJ2aWNlTmVlZEVBUl8gPSBmYWxzZTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7IC8vIHNlcnZlcklkID09IG51bGwsIGFzc3VtZSB0aGF0IGl0IGRvZXMgbm90IG5lZWQgRUFSCi0gICAgCSAgc2VydmljZU5lZWRFQVJfID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIGlmIChzZXJ2aWNlTmVlZEVBUl8pCi0gICAgewotICAgICAgc2VydmljZUVhclByb2plY3ROYW1lXyA9IERlZmF1bHRpbmdVdGlscy5nZXREZWZhdWx0RUFSUHJvamVjdE5hbWUoc2VydmljZVByb2plY3ROYW1lXyk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBzZXJ2aWNlRWFyUHJvamVjdE5hbWVfID0gIiI7Ci0gICAgfSAgIAotICB9Ci0gIAotICBwcml2YXRlIElTdGF0dXMgc2V0U2VydmljZURlZmF1bHRTZXJ2ZXIoKQotICB7Ci0gICAgLy9DaG9vc2UgYW4gZXhpc3Rpbmcgc2VydmVyIHRoZSBtb2R1bGUgaXMgYWxyZWFkeSBhc3NvY2lhdGVkIHdpdGggaWYgcG9zc2libGUKLSAgICBJUHJvamVjdCBzZXJ2aWNlUHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChzZXJ2aWNlUHJvamVjdE5hbWVfKTsKLSAgICBJU2VydmVyW10gY29uZmlndXJlZFNlcnZlcnMgPSBTZXJ2ZXJVdGlsLmdldFNlcnZlcnNCeU1vZHVsZShTZXJ2ZXJVdGlscy5nZXRNb2R1bGUoc2VydmljZVByb2plY3QpLCBudWxsKTsKLSAgICBpZiAoY29uZmlndXJlZFNlcnZlcnMhPW51bGwgJiYgY29uZmlndXJlZFNlcnZlcnMubGVuZ3RoPjApCi0gICAgewotICAgICAgc2VydmljZUlkc18uc2V0U2VydmVySWQoY29uZmlndXJlZFNlcnZlcnNbMF0uZ2V0U2VydmVyVHlwZSgpLmdldElkKCkpOwotICAgICAgc2VydmljZUlkc18uc2V0U2VydmVySW5zdGFuY2VJZChjb25maWd1cmVkU2VydmVyc1swXS5nZXRJZCgpKTsKLSAgICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOyAgICAgICAgICAgICAgCi0gICAgfQotICAgIAotICAgIC8vSWYgdGhlIHByb2plY3QgZXhpc3RzLCBjaG9vc2UgYSBzdWl0YWJsZSBzZXJ2ZXIgb3Igc2VydmVyIHR5cGUgYmFzZWQgb24gdGhlIGV4aXN0aW5nIHByb2plY3QncyBydW50aW1lIG9yIGZhY2V0cwotICAgIGlmIChzZXJ2aWNlUHJvamVjdC5leGlzdHMoKSkKLSAgICB7Ci0gICAgICBJU2VydmVyIHNlcnZlciA9IGdldFNlcnZlckZyb21Qcm9qZWN0KHNlcnZpY2VQcm9qZWN0TmFtZV8sIHNlcnZpY2VGYWNldE1hdGNoZXJfKTsKLSAgICAgIGlmIChzZXJ2ZXIgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgc2VydmljZUlkc18uc2V0U2VydmVySWQoc2VydmVyLmdldFNlcnZlclR5cGUoKS5nZXRJZCgpKTsKLSAgICAgICAgc2VydmljZUlkc18uc2V0U2VydmVySW5zdGFuY2VJZChzZXJ2ZXIuZ2V0SWQoKSk7Ci0gICAgICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBJU2VydmVyVHlwZSBzZXJ2ZXJUeXBlID0gZ2V0U2VydmVyVHlwZUZyb21Qcm9qZWN0KHNlcnZpY2VQcm9qZWN0TmFtZV8sIHNlcnZpY2VGYWNldE1hdGNoZXJfKTsKLSAgICAgICAgaWYgKHNlcnZlclR5cGUgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHNlcnZpY2VJZHNfLnNldFNlcnZlcklkKHNlcnZlclR5cGUuZ2V0SWQoKSk7Ci0gICAgICAgICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy9IYXZlbid0IHBpY2tlZCBhIHNlcnZlci9zZXJ2ZXIgdHlwZSBvbiB0aGUgYmFzaXMgb2YgdGhlIHByb2plY3QuIFBpY2sgYSBzZXJ2ZXIvc2VydmVyIHR5cGUKLSAgICAvL3RoYXQgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBzZXJ2aWNlUnVudGltZUlkLgotICAgIElTZXJ2ZXIgc2VydmVyID0gZ2V0U2VydmVyRnJvbVNlcnZpY2VSdW50aW1lSWQoKTsKLSAgICBpZiAoc2VydmVyIT1udWxsKQotICAgIHsKLSAgICAgIHNlcnZpY2VJZHNfLnNldFNlcnZlcklkKHNlcnZlci5nZXRTZXJ2ZXJUeXBlKCkuZ2V0SWQoKSk7Ci0gICAgICBzZXJ2aWNlSWRzXy5zZXRTZXJ2ZXJJbnN0YW5jZUlkKHNlcnZlci5nZXRJZCgpKTsKLSAgICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICAgIH0KLSAgICAKLSAgICBJU2VydmVyVHlwZSBzZXJ2ZXJUeXBlID0gZ2V0U2VydmVyVHlwZUZyb21TZXJ2aWNlUnVudGltZUlkKCk7Ci0gICAgaWYgKHNlcnZlclR5cGUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBzZXJ2aWNlSWRzXy5zZXRTZXJ2ZXJJZChzZXJ2ZXJUeXBlLmdldElkKCkpOwotICAgICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgfSAgICAKLQotICAgIC8vTm8gc3VpdGFibGUgc2VydmVyIHdhcyBmb3VuZC4gUG9wdXAgYW4gZXJyb3IuCi0gICAgUnVudGltZURlc2NyaXB0b3IgcnVudGltZURlc2NyaXB0b3IgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRSdW50aW1lQnlJZChzZXJ2aWNlSWRzXy5nZXRSdW50aW1lSWQoKSk7Ci0gICAgaWYgKHJ1bnRpbWVEZXNjcmlwdG9yLmdldFNlcnZlclJlcXVpcmVkKCkpCi0gICAgeyAgICAKLSAgICAgIFN0cmluZyBydW50aW1lTGFiZWwgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRSdW50aW1lTGFiZWxCeUlkKHNlcnZpY2VJZHNfLmdldFJ1bnRpbWVJZCgpKTsgICAgCi0gICAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKE5MUy5iaW5kKENvbnN1bXB0aW9uVUlNZXNzYWdlcy5NU0dfRVJST1JfTk9fU0VSVkVSX1JVTlRJTUUsIG5ldyBTdHJpbmdbXXtydW50aW1lTGFiZWx9KSApOwotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0gIAotICAKLSAgcHJpdmF0ZSBJU2VydmVyIGdldFNlcnZlckZyb21TZXJ2aWNlUnVudGltZUlkKCkKLSAgewotICAgIElTZXJ2ZXJbXSBzZXJ2ZXJzID0gU2VydmVyQ29yZS5nZXRTZXJ2ZXJzKCk7Ci0gICAgaWYgKHNlcnZlcnMgIT0gbnVsbCAmJiBzZXJ2ZXJzLmxlbmd0aCA+IDApIAotICAgIHsKLSAgICAgIFBlcnNpc3RlbnRTZXJ2ZXJSdW50aW1lQ29udGV4dCBjb250ZXh0ID0gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRTZXJ2ZXJSdW50aW1lQ29udGV4dCgpOwotICAgICAgU3RyaW5nIHByZWZlcnJlZFNlcnZlckZhY3RvcnlJZCA9IGNvbnRleHQuZ2V0U2VydmVyRmFjdG9yeUlkKCk7Ci0KLSAgICAgIC8vSWYgYSBzZXJ2ZXIgb2YgdGhlIHByZWZlcnJlZCBzZXJ2ZXIgdHlwZSBpcyBwcmVzZW50LCBjaGVjayB0aGF0IG9uZSBmaXJzdAotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBzZXJ2ZXJzLmxlbmd0aDsgaisrKQotICAgICAgewotICAgIAlpZiAoc2VydmVyc1tqXSAhPSBudWxsICYmIHNlcnZlcnNbal0uZ2V0U2VydmVyVHlwZSgpICE9IG51bGwpCi0gICAgCXsKLQkgICAgICAgIFN0cmluZyBzZXJ2ZXJGYWN0b3J5SWQgPSBzZXJ2ZXJzW2pdLmdldFNlcnZlclR5cGUoKS5nZXRJZCgpOwotCSAgICAgICAgaWYgKHNlcnZlckZhY3RvcnlJZCA9PSBwcmVmZXJyZWRTZXJ2ZXJGYWN0b3J5SWQpCi0JICAgICAgICB7Ci0JICAgICAgICAgIGlmIChXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5kb2VzU2VydmljZVJ1bnRpbWVTdXBwb3J0U2VydmVyKHNlcnZpY2VSdW50aW1lSWRfLCBzZXJ2ZXJGYWN0b3J5SWQpKQotCSAgICAgICAgICB7Ci0JICAgICAgICAgICAgcmV0dXJuIHNlcnZlcnNbal07Ci0JICAgICAgICAgIH0KLQkgICAgICAgIH0gIAotICAgIAl9Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIC8vQSBzZXJ2ZXIgb2YgdGhlIHByZWZlcnJlZCBzZXJ2ZXIgdHlwZSBjb3VsZCBub3QgYmUgZm91bmQgb3IgZGlkIG5vdCBtYXRjaC4gQ2hlY2sgYWxsIHRoZSBleGlzdGluZyBzZXJ2ZXJzLiAgICAKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VydmVycy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAJaWYgKHNlcnZlcnNbaV0gIT0gbnVsbCAmJiBzZXJ2ZXJzW2ldLmdldFNlcnZlclR5cGUoKSAhPSBudWxsKQotICAgIAl7Ci0JICAgICAgICBTdHJpbmcgc2VydmVyRmFjdG9yeUlkID0gc2VydmVyc1tpXS5nZXRTZXJ2ZXJUeXBlKCkuZ2V0SWQoKTsKLQkgICAgICAgIGlmIChXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5kb2VzU2VydmljZVJ1bnRpbWVTdXBwb3J0U2VydmVyKHNlcnZpY2VSdW50aW1lSWRfLCBzZXJ2ZXJGYWN0b3J5SWQpKQotCSAgICAgICAgewotCSAgICAgICAgICByZXR1cm4gc2VydmVyc1tpXTsKLQkgICAgICAgIH0KLSAgICAJfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsgICAgCi0gIH0KLSAgCi0gIHByaXZhdGUgSVNlcnZlclR5cGUgZ2V0U2VydmVyVHlwZUZyb21TZXJ2aWNlUnVudGltZUlkKCkKLSAgewotICAgIFN0cmluZ1tdIHNlcnZlclR5cGVzID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2VydmVyRmFjdG9yeUlkc0J5U2VydmljZVJ1bnRpbWUoc2VydmljZVJ1bnRpbWVJZF8pOwotICAgIGlmIChzZXJ2ZXJUeXBlcyE9bnVsbCAmJiBzZXJ2ZXJUeXBlcy5sZW5ndGg+MCkKLSAgICB7Ci0gICAgICAvL1JldHVybiB0aGUgcHJlZmVycmVkIG9uZSBpZiBpdCBpcyBpbiB0aGUgbGlzdAotICAgICAgUGVyc2lzdGVudFNlcnZlclJ1bnRpbWVDb250ZXh0IGNvbnRleHQgPSBXZWJTZXJ2aWNlQ29uc3VtcHRpb25VSVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFNlcnZlclJ1bnRpbWVDb250ZXh0KCk7Ci0gICAgICBTdHJpbmcgcHJlZmVycmVkU2VydmVyRmFjdG9yeUlkID0gY29udGV4dC5nZXRTZXJ2ZXJGYWN0b3J5SWQoKTsKLSAgICAgIGZvciAoaW50IGk9MDsgaTxzZXJ2ZXJUeXBlcy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgaWYgKHNlcnZlclR5cGVzW2ldLmVxdWFscyhwcmVmZXJyZWRTZXJ2ZXJGYWN0b3J5SWQpKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIFNlcnZlckNvcmUuZmluZFNlcnZlclR5cGUoc2VydmVyVHlwZXNbaV0pOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIHJldHVybiBTZXJ2ZXJDb3JlLmZpbmRTZXJ2ZXJUeXBlKHNlcnZlclR5cGVzWzBdKTsKLSAgICB9ICAgIAotICAgIAotICAgIHJldHVybiBudWxsOwotICB9ICAKLSAgCi0gIAotICBwcml2YXRlIFN0cmluZyBnZXREZWZhdWx0U2VydmljZVByb2plY3RUZW1wbGF0ZSgpCi0gIHsKLSAgICBTdHJpbmdbXSB0ZW1wbGF0ZXMgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTZXJ2aWNlUHJvamVjdFRlbXBsYXRlcyhzZXJ2aWNlSWRzXy5nZXRUeXBlSWQoKSwgc2VydmljZUlkc18uZ2V0UnVudGltZUlkKCkpOyAgICAKLSAgICAKLSAgICAvL1dhbGsgdGhlIGxpc3Qgb2Ygc2VydmljZSBwcm9qZWN0IHR5cGVzIGluIHRoZSBwcm9qZWN0IHRvcG9sb2d5IHByZWZlcmVuY2UKLSAgICBQcm9qZWN0VG9wb2xvZ3lDb250ZXh0IHB0Yz0gV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQcm9qZWN0VG9wb2xvZ3lDb250ZXh0KCk7Ci0gICAgU3RyaW5nW10gcHJlZmVycmVkVGVtcGxhdGVJZHMgPSBwdGMuZ2V0U2VydmljZVR5cGVzKCk7Ci0gICAgZm9yIChpbnQgaiA9IDA7IGogPCBwcmVmZXJyZWRUZW1wbGF0ZUlkcy5sZW5ndGg7IGorKykKLSAgICB7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRlbXBsYXRlcy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHRlbXBsYXRlSWQgPSB0ZW1wbGF0ZXNbaV07Ci0gICAgICAgIGlmICh0ZW1wbGF0ZUlkLmVxdWFscyhwcmVmZXJyZWRUZW1wbGF0ZUlkc1tqXSkpCi0gICAgICAgIHsKLSAgICAgICAgICBib29sZWFuIG1hdGNoZXMgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5kb2VzU2VydmljZVJ1bnRpbWVTdXBwb3J0VGVtcGxhdGUoc2VydmljZVJ1bnRpbWVJZF8sIHRlbXBsYXRlSWQpOwotICAgICAgICAgIGlmIChtYXRjaGVzKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB0ZW1wbGF0ZXNbaV07Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIC8vU2luY2UgdGhlIHByZWZlcnJlZFRlbXBsYXRlSWRzIGNvbnRhaW5zIHRoZSB1bmlvbiBvZiBhbGwgcHJvamVjdCB0eXBlcyBmb3IgYWxsIHNlcnZpY2UgcnVudGltZXMsIHdlIGFyZQotICAgIC8vZ3VhcmFudGVlZCB0byBoYXZlIHJldHVybmVkIGJ5IG5vdywgc28gdGhlIGNvZGUgYmVsb3cgd2lsbCBuZXZlciBiZSBleGVjdXRlZCB1bmRlciBub3JtYWwKLSAgICAvL2NpcmN1bXN0YW5jZXMuIEp1c3QgcmV0dXJuIHNvbWV0aGluZyB0byBzYXRpc2Z5IHRoZSBjb21waWxlci4KLSAgICBpZiAodGVtcGxhdGVzLmxlbmd0aCA+IDApCi0gICAgICByZXR1cm4gdGVtcGxhdGVzWzBdOwotICAgIAotICAgIHJldHVybiAiIjsgICAgCi0gICAgCi0gIH0gIAotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0RGVmYXVsdFNlcnZpY2VQcm9qZWN0TmFtZSgpCi0gIHsKLSAgICBJUHJvamVjdFtdIHByb2plY3RzID0gRmFjZXRVdGlscy5nZXRBbGxQcm9qZWN0cygpOwotICAgIFNlcnZpY2VSdW50aW1lRGVzY3JpcHRvciBkZXNjID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yQnlJZChzZXJ2aWNlUnVudGltZUlkXyk7Ci0gICAgUmVxdWlyZWRGYWNldFZlcnNpb25bXSByZnZzID0gZGVzYy5nZXRSZXF1aXJlZEZhY2V0VmVyc2lvbnMoKTsKLSAgICAKLSAgICAvL0NoZWNrIGVhY2ggcHJvamVjdCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBzZXJ2aWNlUnVudGltZQotICAgIGZvciAoaW50IGk9MDsgaTxwcm9qZWN0cy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBTZXQgZmFjZXRWZXJzaW9ucyA9IEZhY2V0VXRpbHMuZ2V0RmFjZXRzRm9yUHJvamVjdChwcm9qZWN0c1tpXS5nZXROYW1lKCkpOwotICAgICAgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUucnVudGltZS5JUnVudGltZSBmUnVudGltZSA9IG51bGw7Ci0gICAgICBTdHJpbmcgZlJ1bnRpbWVOYW1lID0gbnVsbDsKLSAgICAgIGZSdW50aW1lID0gRmFjZXRVdGlscy5nZXRGYWNldFJ1bnRpbWVGb3JQcm9qZWN0KHByb2plY3RzW2ldLmdldE5hbWUoKSk7Ci0gICAgICBpZiAoZlJ1bnRpbWUgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZlJ1bnRpbWVOYW1lID0gZlJ1bnRpbWUuZ2V0TmFtZSgpOyAgICAgICAgCi0gICAgICB9ICAgICAgICAgICAgICAKLSAgICAgIAotICAgICAgaWYgKGZhY2V0VmVyc2lvbnMgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgRmFjZXRNYXRjaGVyIGZtID0gRmFjZXRNYXRjaENhY2hlLmdldEluc3RhbmNlKCkuZ2V0TWF0Y2hGb3JQcm9qZWN0KGZhbHNlLCBzZXJ2aWNlUnVudGltZUlkXywgcHJvamVjdHNbaV0uZ2V0TmFtZSgpKTsKLSAgICAgICAgYm9vbGVhbiBmYWNldFJ1bnRpbWVNYXRjaGVzID0gdHJ1ZTsKLSAgICAgICAgaWYgKGZSdW50aW1lTmFtZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgZmFjZXRSdW50aW1lTWF0Y2hlcyA9IEZhY2V0VXRpbHMuaXNGYWNldFJ1bnRpbWVTdXBwb3J0ZWQocmZ2cywgZlJ1bnRpbWVOYW1lKTsgIAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoZm0uaXNNYXRjaCgpICYmIGZhY2V0UnVudGltZU1hdGNoZXMpCi0gICAgICAgIHsKLSAgICAgICAgICBzZXJ2aWNlRmFjZXRNYXRjaGVyXyA9IGZtOwotICAgICAgICAgIHJldHVybiBwcm9qZWN0c1tpXS5nZXROYW1lKCk7Ci0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgIAotICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvL05vIHByb2plY3Qgd2FzIHN1aXRhYmxlLCByZXR1cm4gYSBuZXcgcHJvamVjdCBuYW1lCi0gICAgcmV0dXJuIFJlc291cmNlVXRpbHMuZ2V0RGVmYXVsdFdlYlByb2plY3ROYW1lKCk7Ci0gICAgCi0gIH0gIAotICAKLSAgcHJpdmF0ZSBEZWZhdWx0UnVudGltZVRyaXBsZXQgZ2V0RGVmYXVsdFNlcnZpY2VSdW50aW1lRm9yRml4ZWRSdW50aW1lQW5kU2VydmVyKElQcm9qZWN0IHByb2plY3QpCi0gIHsKLSAgICBTdHJpbmdbXSBzZXJ2aWNlUnVudGltZXMgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTZXJ2aWNlUnVudGltZXNCeVNlcnZpY2VUeXBlKHNlcnZpY2VJZHNfLmdldFR5cGVJZCgpKTsKLSAgICBBcnJheUxpc3QgdmFsaWRTZXJ2aWNlUnVudGltZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yIChpbnQgaT0wOyBpPHNlcnZpY2VSdW50aW1lcy5sZW5ndGg7IGkrKyApCi0gICAgewotICAgICAgU2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yIGRlc2MgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRTZXJ2aWNlUnVudGltZURlc2NyaXB0b3JCeUlkKHNlcnZpY2VSdW50aW1lc1tpXSk7Ci0gICAgICBpZiAoZGVzYy5nZXRSdW50aW1lKCkuZ2V0SWQoKS5lcXVhbHMoc2VydmljZUlkc18uZ2V0UnVudGltZUlkKCkpKQotICAgICAgewotICAgICAgICAvL0NoZWNrIGlmIHRoaXMgc2VydmljZSBydW50aW1lIHN1cHBvcnRzIHRoZSBzZXJ2ZXIKLSAgICAgICAgaWYgKFdlYlNlcnZpY2VSdW50aW1lRXh0ZW5zaW9uVXRpbHMyLmRvZXNTZXJ2aWNlUnVudGltZVN1cHBvcnRTZXJ2ZXIoZGVzYy5nZXRJZCgpLCBzZXJ2aWNlSWRzXy5nZXRTZXJ2ZXJJZCgpKSkKLSAgICAgICAgewotICAgICAgICAgIHZhbGlkU2VydmljZVJ1bnRpbWVzLmFkZChkZXNjLmdldElkKCkpOwotICAgICAgICAgIGlmIChwcm9qZWN0ICE9IG51bGwgJiYgcHJvamVjdC5leGlzdHMoKSkgIAotICAgICAgICAgIHsKLSAgICAgICAgICAgIFNldCBmYWNldFZlcnNpb25zID0gRmFjZXRVdGlscy5nZXRGYWNldHNGb3JQcm9qZWN0KHByb2plY3QuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgIGlmIChmYWNldFZlcnNpb25zICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEZhY2V0TWF0Y2hlciBmbSA9IEZhY2V0TWF0Y2hDYWNoZS5nZXRJbnN0YW5jZSgpLmdldE1hdGNoRm9yUHJvamVjdChmYWxzZSwgc2VydmljZVJ1bnRpbWVzW2ldLCBwcm9qZWN0LmdldE5hbWUoKSk7Ci0gICAgICAgICAgICAgIGlmIChmbS5pc01hdGNoKCkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBEZWZhdWx0UnVudGltZVRyaXBsZXQgZHJ0ID0gbmV3IERlZmF1bHRSdW50aW1lVHJpcGxldCgpOwotICAgICAgICAgICAgICAgIGRydC5zZXRGYWNldE1hdGNoZXIoZm0pOwotICAgICAgICAgICAgICAgIGRydC5zZXRQcm9qZWN0TmFtZShwcm9qZWN0LmdldE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgZHJ0LnNldFJ1bnRpbWVJZChkZXNjLmdldElkKCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBkcnQ7Ci0gICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICB9Ci0gICAgCi0gICAgaWYgKHZhbGlkU2VydmljZVJ1bnRpbWVzLnNpemUoKSA+IDApCi0gICAgewotICAgICAgLy9XZSBjb3VsZG4ndCBtYXRjaCB0byB0aGUgaW5pdGlhbGx5IHNlbGVjdGVkIHByb2plY3Qgc28gcmV0dXJuIHRoZSBmaXJzdCB2YWxpZCBydW50aW1lLgotICAgICAgRGVmYXVsdFJ1bnRpbWVUcmlwbGV0IGRydCA9IG5ldyBEZWZhdWx0UnVudGltZVRyaXBsZXQoKTsKLSAgICAgIGRydC5zZXRGYWNldE1hdGNoZXIobnVsbCk7Ci0gICAgICBkcnQuc2V0UHJvamVjdE5hbWUobnVsbCk7Ci0gICAgICBkcnQuc2V0UnVudGltZUlkKCgoU3RyaW5nW10pdmFsaWRTZXJ2aWNlUnVudGltZXMudG9BcnJheShuZXcgU3RyaW5nWzBdKSlbMF0pOwotICAgICAgcmV0dXJuIGRydDsgICAgICAKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vVGhlcmUgYXJlIG5vIHNlcnZpY2UgcnVudGltZXMgdGhhdCBtYXRjaCB0aGUgZml4ZWQgcnVudGltZSBhbmQgc2VydmVyLiBGYWxsIGJhY2sgdG8gb3JpZ2luYWwgYWxnb3JpdGhtLgotICAgICAgc2VydmljZUlkc0ZpeGVkXyA9IGZhbHNlOwotICAgICAgcmV0dXJuIGdldERlZmF1bHRSdW50aW1lKHByb2plY3QsIHNlcnZpY2VJZHNfLmdldFR5cGVJZCgpLCBmYWxzZSk7Ci0gICAgfQotICB9Ci0gIAotCi0gIAotICBwdWJsaWMgdm9pZCBzZXRJbml0aWFsU2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikKLSAgewotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRJbml0aWFsUHJvamVjdChJUHJvamVjdCBpbml0aWFsUHJvamVjdCkKLSAgewotICAgIGluaXRpYWxQcm9qZWN0XyA9IGluaXRpYWxQcm9qZWN0OwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRJbml0aWFsQ29tcG9uZW50TmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgIC8vVE9ETyBUaGlzIG1ldGhvZCBhbmQgYW55IG1hcHBpbmdzIHRvIGl0Ci0JLy8gc2hvdWxkIGJlIHJlbW92ZWQgaWYgbm8gbG9uZ2VyIG5lZWRlZC4KLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U2VydmljZVR5cGVSdW50aW1lU2VydmVyKCBUeXBlUnVudGltZVNlcnZlciBpZHMgKQotICB7Ci0gICAgc2VydmljZUlkc18gPSBpZHM7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VJZHNGaXhlZChib29sZWFuIGIpCi0gIHsKLSAgICBzZXJ2aWNlSWRzRml4ZWRfID0gYjsgIAotICB9Ci0gIAotICBwdWJsaWMgVHlwZVJ1bnRpbWVTZXJ2ZXIgZ2V0U2VydmljZVR5cGVSdW50aW1lU2VydmVyKCkKLSAgewotICAgIHJldHVybiBzZXJ2aWNlSWRzXzsgCi0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNlcnZpY2VSdW50aW1lSWQoKQotICB7Ci0gICAgcmV0dXJuIHNlcnZpY2VSdW50aW1lSWRfOwotICB9Ci0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIGdlbmVyYXRlUHJveHlfLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0R2VuZXJhdGVQcm94eSgpCi0gIHsKLSAgICByZXR1cm4gZ2VuZXJhdGVQcm94eV87Ci0gIH0KLSAgLyoqCi0gICAqIEBwYXJhbSBnZW5lcmF0ZVByb3h5XyBUaGUgZ2VuZXJhdGVQcm94eV8gdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0R2VuZXJhdGVQcm94eShib29sZWFuIGdlbmVyYXRlUHJveHlfKQotICB7Ci0gICAgdGhpcy5nZW5lcmF0ZVByb3h5XyA9IGdlbmVyYXRlUHJveHlfOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFNlcnZpY2VQcm9qZWN0TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gc2VydmljZVByb2plY3ROYW1lXzsgIAotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFNlcnZpY2VFYXJQcm9qZWN0TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gc2VydmljZUVhclByb2plY3ROYW1lXzsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlQ29tcG9uZW50VHlwZSgpCi0gIHsKLSAgICByZXR1cm4gc2VydmljZUNvbXBvbmVudFR5cGVfOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRTZXJ2aWNlTmVlZEVBUigpCi0gIHsKLSAgICByZXR1cm4gc2VydmljZU5lZWRFQVJfOwotICB9Ci0gIAotICAvLyBUaGlzIGlzIGZvciB0aGUgQW50IHNjZW5hcmlvIHdoZXJlIHRoZSBzZXJ2aWNlIHByb2plY3QgbmFtZSBjYW4gYmUgc2V0IGluIHRoZSBwcm9wZXJ0eSBmaWxlLgotICAvLyBJZiB0aGUgdXNlciBoYXMgc2V0IHRoZSBTZXJ2aWNlUHJvamVjdE5hbWUgdXNlIGl0IGZvciBkZWZhdWx0aW5nIHB1cnBvc2VzCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VQcm9qZWN0TmFtZShTdHJpbmcgbmFtZSkKLSAgewotCSAgc2VydmljZVByb2plY3ROYW1lXyA9IG5hbWU7Ci0gIH0KLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvdGVzdC9MYXVuY2hGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL3Rlc3QvTGF1bmNoRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWI2ZGY4OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvdGVzdC9MYXVuY2hGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0cy50ZXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLkNvbmRpdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Cb29sZWFuRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2ltcGxlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLldTRXhwbG9yZXJMYXVuY2hlckNvbW1hbmQ7Ci0KLQotcHVibGljIGNsYXNzIExhdW5jaEZyYWdtZW50IGV4dGVuZHMgQm9vbGVhbkZyYWdtZW50Ci17Ci0gIHByaXZhdGUgYm9vbGVhbiBwdWJsaXNoVG9QdWJsaWNVRERJXzsgIAotICBwcml2YXRlIGJvb2xlYW4gcHVibGlzaFRvUHJpdmF0ZVVERElfOwotICAKLSAgcHVibGljIExhdW5jaEZyYWdtZW50KCkKLSAgewotICAgIENvbmRpdGlvbiBjb25kaXRpb24gPSBuZXcgQ29uZGl0aW9uKCkKLSAgICB7Ci0gICAgICBwdWJsaWMgYm9vbGVhbiBldmFsdWF0ZSgpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiAocHVibGlzaFRvUHVibGljVURESV8gfHwgcHVibGlzaFRvUHJpdmF0ZVVERElfKTsKLSAgICAgIH0KLSAgICB9OwotICAgIHNldENvbmRpdGlvbiggY29uZGl0aW9uICk7Ci0gICAgc2V0VHJ1ZUZyYWdtZW50KCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBXU0V4cGxvcmVyTGF1bmNoZXJDb21tYW5kKCksICIiICkgKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0UHVibGlzaFRvUHVibGljVURESShib29sZWFuIHB1Ymxpc2hUb1B1YmxpY1VEREkpCi0gIHsKLSAgICBwdWJsaXNoVG9QdWJsaWNVRERJXyA9IHB1Ymxpc2hUb1B1YmxpY1VEREk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFB1Ymxpc2hUb1ByaXZhdGVVRERJKGJvb2xlYW4gcHVibGlzaFRvUHJpdmF0ZVVEREkpCi0gIHsKLSAgCXB1Ymxpc2hUb1ByaXZhdGVVRERJXyA9IHB1Ymxpc2hUb1ByaXZhdGVVRERJOwotICB9Ci0gICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvd2lkZ2V0cy90ZXN0L1NlcnZpY2VUZXN0RnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY3JlYXRpb24vdWkvd2lkZ2V0cy90ZXN0L1NlcnZpY2VUZXN0RnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzMwZTE1My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvdGVzdC9TZXJ2aWNlVGVzdEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKgotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jcmVhdGlvbi51aS53aWRnZXRzLnRlc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0LldTRExUZXN0TGF1bmNoQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uQ29uZGl0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Cb29sZWFuRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2VxdWVuY2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TaW1wbGVGcmFnbWVudDsKLQotCi1wdWJsaWMgY2xhc3MgU2VydmljZVRlc3RGcmFnbWVudCBleHRlbmRzIEJvb2xlYW5GcmFnbWVudAotewotICBwcml2YXRlIGJvb2xlYW4gdGVzdFNlcnZpY2U7Ci0gIHByaXZhdGUgYm9vbGVhbiBnZW5lcmF0ZVByb3h5OwotICAKLSAgCi0gIHB1YmxpYyBTZXJ2aWNlVGVzdEZyYWdtZW50KCBTdHJpbmcgaWQgKQotICB7Ci0gIAlTZXF1ZW5jZUZyYWdtZW50IHRlc3RSb290ID0gbmV3IFNlcXVlbmNlRnJhZ21lbnQoKTsKLSAgCUNvbmRpdGlvbiBjb25kaXRpb24gPSBuZXcgQ29uZGl0aW9uKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIGV2YWx1YXRlKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGVzdFNlcnZpY2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICB9OwotICAgIHNldENvbmRpdGlvbiggY29uZGl0aW9uICk7Ci0gICAgCi0gICAgdGVzdFJvb3QuYWRkKCBuZXcgU2ltcGxlRnJhZ21lbnQoIG5ldyBXZWJTZXJ2aWNlVGVzdERlZmF1bHRpbmdDb21tYW5kKCksICIiICkgKTsKLSAgICB0ZXN0Um9vdC5hZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggaWQgKSApOwotICAgIHNldFRydWVGcmFnbWVudCggdGVzdFJvb3QgKTsKLSAgICAgIAotICB9Ci0gCi0gIAotICBwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyhEYXRhTWFwcGluZ1JlZ2lzdHJ5IGRhdGFSZWdpc3RyeSkKLSAgewotICAJCi0gIAlkYXRhUmVnaXN0cnkuYWRkTWFwcGluZyhXZWJTZXJ2aWNlVGVzdERlZmF1bHRpbmdDb21tYW5kLmNsYXNzLCAiVGVzdElEIixXU0RMVGVzdExhdW5jaENvbW1hbmQuY2xhc3MpOwotICAJCi0gIAkvL2Zyb20gdGhlIHdpemFyZCAKLSAgCWRhdGFSZWdpc3RyeS5hZGRNYXBwaW5nKFNlcnZpY2VUZXN0V2lkZ2V0LmNsYXNzLCAiVGVzdElEIixXU0RMVGVzdExhdW5jaENvbW1hbmQuY2xhc3MpOwotICAJZGF0YVJlZ2lzdHJ5LmFkZE1hcHBpbmcoV2ViU2VydmljZVRlc3REZWZhdWx0aW5nQ29tbWFuZC5jbGFzcywgIkV4dGVybmFsQnJvd3NlciIsV1NETFRlc3RMYXVuY2hDb21tYW5kLmNsYXNzKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0R2VuZXJhdGVQcm94eShib29sZWFuIGdlbmVyYXRlUHJveHkpCi0gIHsKLSAgCXRoaXMuZ2VuZXJhdGVQcm94eSA9IGdlbmVyYXRlUHJveHk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldEdlbmVyYXRlUHJveHkoKQotICB7Ci0gIAlyZXR1cm4gZ2VuZXJhdGVQcm94eTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgdGVzdFNlcnZpY2UuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUZXN0U2VydmljZSggYm9vbGVhbiB0ZXN0U2VydmljZSApCi0gIHsKLSAgICB0aGlzLnRlc3RTZXJ2aWNlID0gdGVzdFNlcnZpY2U7Ci0gIH0KLQotICAKLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvdGVzdC9TZXJ2aWNlVGVzdFdpZGdldC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL3Rlc3QvU2VydmljZVRlc3RXaWRnZXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGYxODZmMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvdGVzdC9TZXJ2aWNlVGVzdFdpZGdldC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY3JlYXRpb24udWkud2lkZ2V0cy50ZXN0OwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5Db25zdW1wdGlvblVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpZGdldHMudGVzdC5XU0RMVGVzdExhdW5jaENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmRhdGEuVHlwZVJ1bnRpbWVTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLmNvbW1vbi5VSVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5zZWxlY3Rpb24uU2VsZWN0aW9uTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5TaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0RGF0YUV2ZW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLQotCi1wdWJsaWMgY2xhc3MgU2VydmljZVRlc3RXaWRnZXQgZXh0ZW5kcyBTaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3IKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgY3JlYXRlUGx1Z2luSWRfID0gIm9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aSI7Ci0KLSAgcHJpdmF0ZSBDb21ibyB0ZXN0VHlwZUNvbWJvXzsKLSAgLypDT05URVhUX0lEIFBTVFAwMDAxIGZvciB0aGUgVGVzdCBUeXBlIENvbWJvIGJveCBvZiB0aGUgU2VydmljZSBUZXN0IFBhZ2UqLwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBJTkZPUE9QX1BTVFBfQ09NQk9CT1hfVEVTVCA9ICJQU1RQMDAwMSI7Ci0KLSAgcHJpdmF0ZSBCdXR0b24gbGF1bmNoQnV0dG9uXzsKLSAgLypDT05URVhUX0lEIFBTVFAwMDAyIGZvciB0aGUgbGF1bmNoIGJ1dHRvbiBvZiB0aGUgU2VydmljZSBUZXN0IFBhZ2UqLwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBJTkZPUE9QX1BTVFBfTEFVTkNIX0JVVFRPTiA9ICJQU1RQMDAwMiI7Ci0KLSAgCi0gIHByaXZhdGUgU2VsZWN0aW9uTGlzdCBmYWNpbGl0aWVzXzsKLSAgCi0gIHByaXZhdGUgU3RyaW5nIHNlcnZpY2VTZXJ2ZXJJbnN0YW5jZUlkID0gbnVsbDsKLSAgCi0gIHB1YmxpYyBXaWRnZXREYXRhRXZlbnRzIGFkZENvbnRyb2xzKCBDb21wb3NpdGUgcGFyZW50LCBMaXN0ZW5lciBzdGF0dXNMaXN0ZW5lciApCi0gIHsKLSAgICBVSVV0aWxzICAgICAgdWlVdGlscyAgPSBuZXcgVUlVdGlscyhjcmVhdGVQbHVnaW5JZF8gKTsKLSAgICAgICAgCi0gICAgQ29tcG9zaXRlIHRlc3RDb21wb3NpdGUgPSB1aVV0aWxzLmNyZWF0ZUNvbXBvc2l0ZSggcGFyZW50LCAzLCAwLCAwICk7Ci0gICAgCi0gICAgdGVzdFR5cGVDb21ib18gPSB1aVV0aWxzLmNyZWF0ZUNvbWJvKCB0ZXN0Q29tcG9zaXRlLCBDb25zdW1wdGlvblVJTWVzc2FnZXMuTEFCRUxfVEVTVF9UWVBFUywKLSAgICAJCQkJCQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QU1RQX0NPTUJPQk9YX1RFU1QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkZPUE9QX1BTVFBfQ09NQk9CT1hfVEVTVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNXVC5TSU5HTEUgfCBTV1QuQk9SREVSIHwgU1dULlJFQURfT05MWSApOwotICAgIAotICAgIGxhdW5jaEJ1dHRvbl8gPSB1aVV0aWxzLmNyZWF0ZVB1c2hCdXR0b24oIHRlc3RDb21wb3NpdGUsIENvbnN1bXB0aW9uVUlNZXNzYWdlcy5CVVRUT05fTEFVTkNIX1NFUlZJQ0VfVEVTVCwKLSAgICAJCQkJCQkJCQlDb25zdW1wdGlvblVJTWVzc2FnZXMuVE9PTFRJUF9QU1RQX0xBVU5DSF9CVVRUT04sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkZPUE9QX1BTVFBfTEFVTkNIX0JVVFRPTiApOwotICAgIGxhdW5jaEJ1dHRvbl8uYWRkU2VsZWN0aW9uTGlzdGVuZXIoIG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZCggU2VsZWN0aW9uRXZlbnQgZXZlbnQgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVMYXVuY2hCdXR0b24oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAKLSAgICAgCi0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgCi0gIHByaXZhdGUgVHlwZVJ1bnRpbWVTZXJ2ZXIgc2VydmljZWlkczsKLSAgcHJpdmF0ZSBTdHJpbmcgc2VydmVyUHJvamVjdDsKLSAgcHJpdmF0ZSBTdHJpbmcgbW9kdWxlOwotICBwcml2YXRlIFN0cmluZyB3c2RsVVJJOwotICBwcml2YXRlIFN0cmluZyBsYXVuY2hlZFNlcnZpY2VUZXN0TmFtZSA9ICIiOwotICBwcml2YXRlIElFbnZpcm9ubWVudCBlbnY7Ci0gIHByaXZhdGUgTGlzdCBlbmRwb2ludHM7Ci0gIAotICBwcml2YXRlIHZvaWQgaGFuZGxlTGF1bmNoQnV0dG9uKCkKLSAgewotCS8vIFNwbGl0IHVwIHRoZSBwcm9qZWN0IGFuZCBtb2R1bGUKLQlpbnQgcCA9IHNlcnZlclByb2plY3QuaW5kZXhPZigiLyIpOwotCWlmIChwICE9IC0xKXsKLQkJbW9kdWxlID0gc2VydmVyUHJvamVjdC5zdWJzdHJpbmcocCsxKTsKLQkJc2VydmVyUHJvamVjdCA9IHNlcnZlclByb2plY3Quc3Vic3RyaW5nKDAscCk7Ci0JfQotICAJCi0gIAlTdHJpbmcgdGVzdElEID0gdGVzdFR5cGVDb21ib18uZ2V0VGV4dCgpOwotICAJbGF1bmNoZWRTZXJ2aWNlVGVzdE5hbWUgPSB0ZXN0SUQ7Ci0gIAlXU0RMVGVzdExhdW5jaENvbW1hbmQgd3RsYyA9IG5ldyBXU0RMVGVzdExhdW5jaENvbW1hbmQoKTsKLSAgCXd0bGMuc2V0VGVzdElEKHRlc3RJRCk7Ci0gIAl3dGxjLnNldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcihzZXJ2aWNlaWRzKTsKLQkgIHd0bGMuc2V0U2VydmljZVNlcnZlckluc3RhbmNlSWQoc2VydmljZVNlcnZlckluc3RhbmNlSWQpOwotICAJd3RsYy5zZXRTZXJ2ZXJQcm9qZWN0KHNlcnZlclByb2plY3QpOwotCSAgd3RsYy5zZXRTZXJ2ZXJNb2R1bGUobW9kdWxlKTsKLSAgCXd0bGMuc2V0V3NkbFVSSSh3c2RsVVJJKTsKLSAgCXd0bGMuc2V0RXh0ZXJuYWxCcm93c2VyKHRydWUpOwotICAJd3RsYy5zZXRFbmRwb2ludChlbmRwb2ludHMpOwotICAJd3RsYy5zZXRFbnZpcm9ubWVudCggZW52ICk7Ci0gIAl3dGxjLmV4ZWN1dGUoIG51bGwsIG51bGwgKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U2VydmljZVRlc3RGYWNpbGl0aWVzKCBTZWxlY3Rpb25MaXN0IGZhY2lsaXRpZXMgKQotICB7Ci0gICAgZmFjaWxpdGllc18gPSBmYWNpbGl0aWVzOwotICAgIHRlc3RUeXBlQ29tYm9fLnNldEl0ZW1zKCBmYWNpbGl0aWVzLmdldExpc3QoKSApOwotICAgIHRlc3RUeXBlQ29tYm9fLnNlbGVjdCggZmFjaWxpdGllcy5nZXRJbmRleCgpICk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTZWxlY3Rpb25MaXN0IGdldFNlcnZpY2VUZXN0RmFjaWxpdGllcygpCi0gIHsKLSAgICBmYWNpbGl0aWVzXy5zZXRJbmRleCggdGVzdFR5cGVDb21ib18uZ2V0U2VsZWN0aW9uSW5kZXgoKSApOwotICAgIHJldHVybiBmYWNpbGl0aWVzXzsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VGVzdElEKCkKLSAgewotICAJcmV0dXJuIHRlc3RUeXBlQ29tYm9fLmdldFRleHQoKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0V3NkbFVSSShTdHJpbmcgd3NkbFVSSSkKLSAgewotICAJdGhpcy53c2RsVVJJID0gd3NkbFVSSTsKLSAgfQotICAgIAotICBwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJQcm9qZWN0KFN0cmluZyBzZXJ2ZXJQcm9qZWN0KQotICB7Ci0gICAgdGhpcy5zZXJ2ZXJQcm9qZWN0ID0gc2VydmVyUHJvamVjdDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VUeXBlUnVudGltZVNlcnZlcihUeXBlUnVudGltZVNlcnZlciBzZXJ2aWNlaWRzKQotICB7Ci0gICAgdGhpcy5zZXJ2aWNlaWRzID0gc2VydmljZWlkczsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRMYXVuY2hlZFNlcnZpY2VUZXN0TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gbGF1bmNoZWRTZXJ2aWNlVGVzdE5hbWU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRFbnZpcm9ubWVudChJRW52aXJvbm1lbnQgZW52KQotICB7Ci0gIAl0aGlzLmVudiA9IGVudjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEVuZHBvaW50KFN0cmluZyBlbmRwb2ludCkKLSAgewotICAgIGlmIChlbmRwb2ludCAhPSBudWxsICYmIGVuZHBvaW50Lmxlbmd0aCgpID4gMCkKLSAgICB7Ci0gICAgICBWZWN0b3IgdiA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIHYuYWRkKGVuZHBvaW50KTsKLSAgICAgIHNldEVuZHBvaW50cyh2KTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEVuZHBvaW50cyhMaXN0IGVuZHBvaW50cykKLSAgewotICAgIHRoaXMuZW5kcG9pbnRzID0gZW5kcG9pbnRzOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlU2VydmVySW5zdGFuY2VJZChTdHJpbmcgc3NJbnN0YW5jZUlkKXsKLQkgIHRoaXMuc2VydmljZVNlcnZlckluc3RhbmNlSWQgPSBzc0luc3RhbmNlSWQ7Ci0gIH0KLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvdGVzdC9XZWJTZXJ2aWNlVGVzdERlZmF1bHRpbmdDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NyZWF0aW9uL3VpL3dpZGdldHMvdGVzdC9XZWJTZXJ2aWNlVGVzdERlZmF1bHRpbmdDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkMWQ2YWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jcmVhdGlvbi91aS93aWRnZXRzL3Rlc3QvV2ViU2VydmljZVRlc3REZWZhdWx0aW5nQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKgotICogQ3JlYXRlZCBvbiBBcHIgMTUsIDIwMDQKLSAqCi0gKiBUT0RPIFRvIGNoYW5nZSB0aGUgdGVtcGxhdGUgZm9yIHRoaXMgZ2VuZXJhdGVkIGZpbGUgZ28gdG8KLSAqIFdpbmRvdyAtIFByZWZlcmVuY2VzIC0gSmF2YSAtIENvZGUgR2VuZXJhdGlvbiAtIENvZGUgYW5kIENvbW1lbnRzCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNyZWF0aW9uLnVpLndpZGdldHMudGVzdDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQudGVzdC5XZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZXh0LnRlc3QuV2ViU2VydmljZVRlc3RSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwucGx1Z2luLldlYlNlcnZpY2VQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuc2VsZWN0aW9uLlNlbGVjdGlvbkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotCi0vKioKLSAqIEBhdXRob3IgZ2lsYmVydGEKLSAqCi0gKiBUT0RPIFRvIGNoYW5nZSB0aGUgdGVtcGxhdGUgZm9yIHRoaXMgZ2VuZXJhdGVkIHR5cGUgY29tbWVudCBnbyB0bwotICogV2luZG93IC0gUHJlZmVyZW5jZXMgLSBKYXZhIC0gQ29kZSBHZW5lcmF0aW9uIC0gQ29kZSBhbmQgQ29tbWVudHMKLSAqLwotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VUZXN0RGVmYXVsdGluZ0NvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiAKLXsKLSAgCi0gIHByaXZhdGUgU2VsZWN0aW9uTGlzdCBzZXJ2aWNlVGVzdEZhY2lsaXRpZXM7CQotICBwcml2YXRlIFN0cmluZ1tdIHRlc3RJRDsKLSAgCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBhZGFwdGFibGUgKQotICB7ICAgIAotICAJU2NlbmFyaW9Db250ZXh0IHNjZW5hcmlvQ29udGV4dCA9IFdlYlNlcnZpY2VQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRTY2VuYXJpb0NvbnRleHQoKS5jb3B5KCk7Ci0gIAl0ZXN0SUQgPSBzY2VuYXJpb0NvbnRleHQuZ2V0Tm9uSmF2YVRlc3RTZXJ2aWNlKCk7Ci0gIAlTdHJpbmdbXSB0ZXN0VHlwZXMgPSBzY2VuYXJpb0NvbnRleHQuZ2V0V2ViU2VydmljZVRlc3RUeXBlcygpOwotICAJICAJCi0gIAlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gIAlXZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5IHdzdHRSZWdpc3RyeSA9IFdlYlNlcnZpY2VUZXN0UmVnaXN0cnkuZ2V0SW5zdGFuY2UoKTsKLSAgCQotICAgIAotICAJVmVjdG9yIHdzZGxOYW1lcyA9IG5ldyBWZWN0b3IoKTsKLSAgCWZvcihpbnQgaSA9MCA7aTx0ZXN0VHlwZXMubGVuZ3RoO2krKyl7Ci0gIAkgIFdlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uIHdzY3RlID0gKFdlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uKXdzdHRSZWdpc3RyeS5nZXRXZWJTZXJ2aWNlRXh0ZW5zaW9uc0J5TmFtZSh0ZXN0VHlwZXNbaV0pOyAgCQotICAJICBpZih3c2N0ZS50ZXN0V1NETCgpKXsKLSAgCSAgICB3c2RsTmFtZXMuYWRkRWxlbWVudCh0ZXN0VHlwZXNbaV0pOwotICAJICB9Ci0gIAl9Ci0gICAgCi0gIAlTdHJpbmcgamF2YU5hbWVzQXJyYXlbXSA9IG5ldyBTdHJpbmdbd3NkbE5hbWVzLnNpemUoKV07Ci0gIAlFbnVtZXJhdGlvbiBlID0gd3NkbE5hbWVzLmVsZW1lbnRzKCk7Ci0gIAlpbnQgaSA9IDA7Ci0gIAl3aGlsZShlLmhhc01vcmVFbGVtZW50cygpKXsKLSAgICAgIGphdmFOYW1lc0FycmF5W2ldID0gKFN0cmluZyllLm5leHRFbGVtZW50KCk7Ci0gIAkgIGkrKzsKLSAgCX0KLSAgCQotICAJCi0gIAlzZXJ2aWNlVGVzdEZhY2lsaXRpZXMgPSBuZXcgU2VsZWN0aW9uTGlzdChqYXZhTmFtZXNBcnJheSwwKTsgIAkKLSAgCQotIAlyZXR1cm4gc3RhdHVzOwotICB9Ci0KLSAgcHVibGljIFNlbGVjdGlvbkxpc3QgZ2V0U2VydmljZVRlc3RGYWNpbGl0aWVzKCkKLSAgewotICAJcmV0dXJuIHNlcnZpY2VUZXN0RmFjaWxpdGllczsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRUZXN0SUQoKQotICB7Ci0gIAlyZXR1cm4gdGVzdElEOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRFeHRlcm5hbEJyb3dzZXIoKQotICB7Ci0gIAlyZXR1cm4gZmFsc2U7Ci0gIH0KLQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvLmNsYXNzcGF0aCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjE2NWVjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMvIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNCIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzg1M2VhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1iaW4KLWJ1aWxkLnhtbAotdGVtcC5mb2xkZXIKLXVkZGlyZWdpc3RyeS5qYXIKLUBkb3QKLXNyYy56aXAKLWphdmFDb21waWxlci4uLmFyZ3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS8ucHJvamVjdCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjYyNTYyZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5PC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMmIwMjlhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0jTW9uIEphbiAzMCAxMDozNjo1OCBFU1QgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTI2OWI0ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSNNb24gSmFuIDMwIDEwOjQwOjQ5IEVTVCAyMDA2Ci1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0xCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0xCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOWUzMDY5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVQTFVHSU5fTkFNRQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeTsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjIwMC5xdWFsaWZpZXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51ZGRpcmVnaXN0cnkucGx1Z2luLldlYlNlcnZpY2VVRERJUmVnaXN0cnlQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVQTFVHSU5fUFJPVklERVIKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51ZGRpcmVnaXN0cnk7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWRkaXJlZ2lzdHJ5LnBsdWdpbjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51ZGRpcmVnaXN0cnkud2lkZ2V0czt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51ZGRpcmVnaXN0cnkud2lkZ2V0cy5iaW5kaW5nO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVkZGlyZWdpc3RyeS53aXphcmQ7eC1pbnRlcm5hbDo9dHJ1ZQotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLnVpO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC53cy51aTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDAsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnY7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3JrcztidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gY29tLmlibS5pY3U7YnVuZGxlLXZlcnNpb249IlszLjQuNCw0LjAuMCkiCi1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9hYm91dC5odG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGIzNmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lIDA2LCAyMDA3PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9idWlsZC5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxZGVjMzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLXNvdXJjZS4uID0gc3JjLwotYmluLmluY2x1ZGVzID0gLixcCi0gICAgICAgICAgICAgICBpY29ucy8sXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L2ljb25zL3JlZ2lzdHJ5LmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9pY29ucy9yZWdpc3RyeS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViNDNjYWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L2ljb25zL3JlZ2lzdHJ5LmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9pY29ucy93aXpiYW4vdWRkaXByaXZhdGVjb25maWdfd2l6LnBuZyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9pY29ucy93aXpiYW4vdWRkaXByaXZhdGVjb25maWdfd2l6LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjJkMTU1ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvaWNvbnMvd2l6YmFuL3VkZGlwcml2YXRlY29uZmlnX3dpei5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvcGx1Z2luLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1MGFmYjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0jIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIDIwMDcwNTE2ICAgMTYzMjY2IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIwotIyBNZXNzYWdlcyBpbiBwbHVnaW4ueG1sLgotIwotUExVR0lOX05BTUU9V2ViIFNlcnZpY2VzIFVuaXZlcnNhbCBEZXNjcmlwdGlvbiBEaXNjb3ZlcnkgYW5kIEludGVncmF0aW9uIFJlZ2lzdHJ5Ci1QTFVHSU5fUFJPVklERVI9RWNsaXBzZS5vcmcKLQotUExVR0lOX05FV19XSVpBUkRfTkFNRV9XU19VTklUX1RFU1RfVUREST1Vbml0IFRlc3QgVURESQotCi1YUF9QUklWQVRFX1VERElfUkVHSVNUUllfVFlQRVM9UHJpdmF0ZSBVRERJIFJlZ2lzdHJ5IFR5cGVzCi1QUklWQVRFX1VERElfUkVHSVNUUllfREVTQz1DcmVhdGUgYW5kIGNvbmZpZ3VyZSBhIHVuaXQgdGVzdCBVRERJIHJlZ2lzdHJ5CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvcGx1Z2luLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NmFjNzUwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLQotPHBsdWdpbj4KLQotICAgPCEtLSBUaGUgZm9sbG93aW5nIGV4dGVuc2lvbiBwb2ludCBpcyBpbnRlcm5hbCBhbmQgbGlrZWx5IHRvIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgcmVsZWFzZS4gLS0+Ci0gICA8ZXh0ZW5zaW9uLXBvaW50IGlkPSJwcml2YXRlVURESVJlZ2lzdHJ5VHlwZSIgbmFtZT0iJVhQX1BSSVZBVEVfVURESV9SRUdJU1RSWV9UWVBFUyIvPgotCi0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLnByaXZhdGVVRERJUmVnaXN0cnlUeXBlIj4KLSAgICAgIDxwcml2YXRlVURESVJlZ2lzdHJ5VHlwZQotICAgICAgICAgICAgbmFtZT0iJVBSSVZBVEVfVURESV9SRUdJU1RSWV9UWVBFX0lNUEwiCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVkZGlyZWdpc3RyeS53aXphcmQuUHJpdmF0ZVVERElSZWdpc3RyeVR5cGVJbXBsIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51ZGRpcmVnaXN0cnkud2l6YXJkLlByaXZhdGVVRERJUmVnaXN0cnlUeXBlSW1wbCI+Ci0gICAgICA8L3ByaXZhdGVVRERJUmVnaXN0cnlUeXBlPgotICAgPC9leHRlbnNpb24+Ci0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkubmV3V2l6YXJkcyI+Ci0gICAgICA8d2l6YXJkCi0gICAgICAgICAgICBuYW1lPSIlUExVR0lOX05FV19XSVpBUkRfTkFNRV9XU19VTklUX1RFU1RfVURESSIKLSAgICAgICAgICAgIGljb249Imljb25zL3JlZ2lzdHJ5LmdpZiIKLSAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5qc3Qud3MudWkubmV3IgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLkR5bmFtaWNXaXphcmQiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVkZGlyZWdpc3RyeS53aWRnZXRzLmJpbmRpbmcuUHJpdmF0ZVVERElXaWRnZXRCaW5kaW5nIj4KLSAgICAgICAgICAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICAgICAgICVQUklWQVRFX1VERElfUkVHSVNUUllfREVTQwotICAgICAgICAgPC9kZXNjcmlwdGlvbj4KLSAgICAgIDwvd2l6YXJkPgotICAgPC9leHRlbnNpb24+Ci0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmR5bmFtaWNXaXphcmQiPgotICAgICAgPGR5bmFtaWNXaXphcmQKLSAgICAgICAgICAgIG5hbWU9IiVQTFVHSU5fTkVXX1dJWkFSRF9OQU1FX1dTX1VOSVRfVEVTVF9VRERJIgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51ZGRpcmVnaXN0cnkud2lkZ2V0cy5iaW5kaW5nLlByaXZhdGVVRERJV2lkZ2V0QmluZGluZyIKLSAgICAgICAgICAgIGljb25iYW5uZXI9Imljb25zL3dpemJhbi91ZGRpcHJpdmF0ZWNvbmZpZ193aXoucG5nIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51ZGRpcmVnaXN0cnkud2lkZ2V0cy5iaW5kaW5nLlByaXZhdGVVRERJV2lkZ2V0QmluZGluZyI+Ci0gICAgICA8L2R5bmFtaWNXaXphcmQ+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIDwhLS0KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5uZXdXaXphcmRzIj4KLSAgICAgIDx3aXphcmQKLSAgICAgICAgICAgIG5hbWU9IiVQTFVHSU5fTkVXX1dJWkFSRF9OQU1FX1dTX1VOSVRfVEVTVF9VRERJIgotICAgICAgICAgICAgaWNvbj0iaWNvbnMvcmVnaXN0cnkuZ2lmIgotICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLmpzdC53cy51aS5uZXciCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVkZGlyZWdpc3RyeS53aXphcmQuUHJpdmF0ZVVERElXaXphcmQiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVkZGlyZWdpc3RyeS53aXphcmQuUHJpdmF0ZVVERElXaXphcmQiPgotICAgICAgICAgPGRlc2NyaXB0aW9uPgotICAgICAgICAgICAgJVBMVUdJTl9ORVdfV0laQVJEX0RFU0NfV1NfVU5JVF9URVNUX1VEREkKLSAgICAgICAgIDwvZGVzY3JpcHRpb24+Ci0gICAgICAgICA8c2VsZWN0aW9uCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlIj4KLSAgICAgICAgIDwvc2VsZWN0aW9uPgotICAgICAgPC93aXphcmQ+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIC0tPgotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91ZGRpcmVnaXN0cnkvVURESVJlZ2lzdHJ5LnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91ZGRpcmVnaXN0cnkvVURESVJlZ2lzdHJ5LnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwZDI2YmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWRkaXJlZ2lzdHJ5L1VERElSZWdpc3RyeS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jCi0jIFByaXZhdGVVRERJQ29uZmlnUGFnZQotIwotUEFHRV9USVRMRV9QUklWQVRFX1VERElfQ09ORklHPVVuaXQgVGVzdCBVRERJIFJlZ2lzdHJ5IENvbmZpZ3VyYXRpb24KLVBBR0VfREVTQ19QUklWQVRFX1VERElfQ09ORklHPUNvbmZpZ3VyZSB0aGUgdW5pdCB0ZXN0IFVEREkgcmVnaXN0cnkuCi0KLSMKLSMgVG9vbHRpcCBmb3IgUHJpdmF0ZVVERElDb25maWdQYWdlCi0jCi1UT09MVElQX1BVUFJfUFJJVkFURV9VRERJX1BBR0U9RGVwbG95IG9yIHJlbW92ZSBhIFVuaXQgVGVzdCBVRERJIFJlZ2lzdHJ5Ci1UT09MVElQX1BVUFJfUFJJVkFURV9VRERJX1RZUEU9Q2hvb3NlIHRoZSB0eXBlIG9mIFVuaXQgVGVzdCBVRERJIFJlZ2lzdHJ5IHlvdSB3YW50IHRvIGRlcGxveQotVE9PTFRJUF9QVVBSX0RFUExPWV9QUklWQVRFX1VEREk9RGVwbG95IGEgVW5pdCBUZXN0IFVEREkgUmVnaXN0cnkKLVRPT0xUSVBfUFVQUl9VUERBVEVfUFJJVkFURV9VRERJPVVwZGF0ZSB0aGUgZXhpc3RpbmcgVW5pdCBUZXN0IFVEREkgUmVnaXN0cnkKLVRPT0xUSVBfUFVQUl9SRU1PVkVfUFJJVkFURV9VRERJPVJlbW92ZSB0aGUgZXhpc3RpbmcgVW5pdCBUZXN0IFVEREkgUmVnaXN0cnkKLQotIwotIyBDb21tb24gd2l6YXJkIHN0cmluZ3MuCi0jCi1MQUJFTF9QUklWQVRFX1VERElfUkVHSVNUUllfVFlQRVM9UHJpdmF0ZSBVRERJIFJlZ2lzdHJ5IHR5cGU6Ci1CVVRUT05fREVQTE9ZX1VERElfUkVHSVNUUlk9RGVwbG95IHRoZSBVbml0IFRlc3QgVURESSBSZWdpc3RyeQotQlVUVE9OX1VQREFURV9VRERJX1JFR0lTVFJZPVVwZGF0ZSB0aGUgcHJldmlvdXNseSBkZXBsb3llZCBVRERJIHJlZ2lzdHJ5Ci1CVVRUT05fUkVNT1ZFX1VERElfUkVHSVNUUlk9UmVtb3ZlIHRoZSBwcmV2aW91c2x5IGRlcGxveWVkIFVEREkgcmVnaXN0cnkKLQotIwotIyBXaXphcmQgcGFnZSB0YXNrIGxhYmVscyBhbmQgZGVzY3JpcHRpb25zCi0jICh1c2VkIG9ubHkgZm9yIHByb2dyZXNzIGluZGljYXRpb24pLgotIwotCi0jCi0jIERpYWxvZyBtZXNzYWdlcwotIwotCi0jCi0jIFByb2dyZXNzIG1lc3NhZ2VzCi0jCi0KLSMKLSMgV2FybmluZyBtZXNzYWdlcwotIwotCi0jCi0jIEVycm9yIG1lc3NhZ2VzCi0jCi1NU0dfRVJST1JfTk9fVURESV9SRUdJU1RSWV9BVkFJTEFCTEU9SVdBQjAzNjNFIE5vIFVEREkgcmVnaXN0cnkgYXZhaWxhYmxlLgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWRkaXJlZ2lzdHJ5L1VERElSZWdpc3RyeU1lc3NhZ2VzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91ZGRpcmVnaXN0cnkvVURESVJlZ2lzdHJ5TWVzc2FnZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWEyOWU4OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91ZGRpcmVnaXN0cnkvVURESVJlZ2lzdHJ5TWVzc2FnZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWRkaXJlZ2lzdHJ5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLQotcHVibGljIGZpbmFsIGNsYXNzIFVERElSZWdpc3RyeU1lc3NhZ2VzIGV4dGVuZHMgTkxTIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeSI7Ly8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBVRERJUmVnaXN0cnlNZXNzYWdlcygpIHsKLQkJLy8gRG8gbm90IGluc3RhbnRpYXRlCi0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEFHRV9USVRMRV9QUklWQVRFX1VERElfQ09ORklHOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBR0VfREVTQ19QUklWQVRFX1VERElfQ09ORklHOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFVQUl9QUklWQVRFX1VERElfUEFHRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BVUFJfUFJJVkFURV9VRERJX1RZUEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QVVBSX0RFUExPWV9QUklWQVRFX1VEREk7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QVVBSX1VQREFURV9QUklWQVRFX1VEREk7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QVVBSX1JFTU9WRV9QUklWQVRFX1VEREk7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfUFJJVkFURV9VRERJX1JFR0lTVFJZX1RZUEVTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJVVFRPTl9ERVBMT1lfVURESV9SRUdJU1RSWTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBCVVRUT05fVVBEQVRFX1VERElfUkVHSVNUUlk7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQlVUVE9OX1JFTU9WRV9VRERJX1JFR0lTVFJZOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9OT19VRERJX1JFR0lTVFJZX0FWQUlMQUJMRTsKLQotCXN0YXRpYyB7Ci0JCU5MUy5pbml0aWFsaXplTWVzc2FnZXMoQlVORExFX05BTUUsIFVERElSZWdpc3RyeU1lc3NhZ2VzLmNsYXNzKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWRkaXJlZ2lzdHJ5L3BsdWdpbi9XZWJTZXJ2aWNlVURESVJlZ2lzdHJ5UGx1Z2luLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91ZGRpcmVnaXN0cnkvcGx1Z2luL1dlYlNlcnZpY2VVRERJUmVnaXN0cnlQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjY4N2ExNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91ZGRpcmVnaXN0cnkvcGx1Z2luL1dlYlNlcnZpY2VVRERJUmVnaXN0cnlQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVkZGlyZWdpc3RyeS5wbHVnaW47Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudGV4dC5NZXNzYWdlRm9ybWF0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKLQotLyoqCi0qIFRoaXMgaXMgdGhlIHBsdWdpbiBjbGFzcyBmb3IgdGhlIFdlYiBTZXJ2aWNlcyBVRERJIFJlZ2lzdHJ5IHBsdWdpbi4KLSogPHA+Ci0qIFRoZSBXZWIgU2VydmljZXMgVURESSBSZWdpc3RyeSBwbHVnaW4ncyBpcyB0byBhZGQgdGhlCi0qIG9wdGlvbiB0byBjcmVhdGUgYSB1bml0IHRlc3QgVURESSByZWdpc3RyeSAKLSovCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZVVERElSZWdpc3RyeVBsdWdpbiBleHRlbmRzIFBsdWdpbgotewotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDIuIjsKLSAgLyoqCi0gICogVGhlIGlkZW50aWZpZXIgb2YgdGhlIGRlc2NyaXB0b3Igb2YgdGhpcyBwbHVnaW4gaW4gcGx1Z2luLnhtbC4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSUQgPSAib3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeSI7Ci0KLSAgLyoqCi0gICogVGhlIHJlZmVyZW5jZSB0byB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgcGx1Z2luLgotICAqLwotICBwcml2YXRlIHN0YXRpYyBXZWJTZXJ2aWNlVURESVJlZ2lzdHJ5UGx1Z2luIGluc3RhbmNlXzsKLSAgCi0gIC8qKgotICAqIENvbnN0cnVjdHMgYSBydW50aW1lIHBsdWdpbiBvYmplY3QgZm9yIHRoaXMgcGx1Z2luLgotICAqLwotICBwdWJsaWMgV2ViU2VydmljZVVERElSZWdpc3RyeVBsdWdpbiAoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgICBpbnN0YW5jZV8gPSB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgcGx1Z2luLiBFcXVpdmFsZW50IHRvIGNhbGxpbmcKLSAgKiAoV2ViU2VydmljZVVERElSZWdpc3RyeVBsdWdpbilQbGF0Zm9ybS5nZXRQbHVnaW4oIm9yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkiKTsKLSAgKiBAcmV0dXJuIFRoZSBXZWJTZXJ2aWNlVURESVJlZ2lzdHJ5UGx1Z2luIHNpbmdsZXRvbi4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBXZWJTZXJ2aWNlVURESVJlZ2lzdHJ5UGx1Z2luIGdldEluc3RhbmNlICgpCi0gIHsKLSAgICByZXR1cm4gaW5zdGFuY2VfOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyBhbiBpbWFnZSBkZXNjcmlwdG9yIGZvciB0aGUgbmFtZWQgcmVzb3VyY2UKLSAgKiBhcyByZWxhdGl2ZSB0byB0aGUgcGx1Z2luIGluc3RhbGwgbG9jYXRpb24uCi0gICogQHJldHVybiBBbiBpbWFnZSBkZXNjcmlwdG9yLCBwb3NzaWJseSBudWxsLgotICAqLwotICBwdWJsaWMgc3RhdGljIEltYWdlRGVzY3JpcHRvciBnZXRJbWFnZURlc2NyaXB0b3IgKCBTdHJpbmcgbmFtZSApCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBVUkwgaW5zdGFsbFVSTCA9IGluc3RhbmNlXy5nZXRCdW5kbGUoKS5nZXRFbnRyeSgiLyIpOwotICAgICAgVVJMIGltYWdlVVJMID0gbmV3IFVSTChpbnN0YWxsVVJMLG5hbWUpOwotICAgICAgcmV0dXJuIEltYWdlRGVzY3JpcHRvci5jcmVhdGVGcm9tVVJMKGltYWdlVVJMKTsKLSAgICB9Ci0gICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIG1lc3NhZ2Ugc3RyaW5nIGlkZW50aWZpZWQgYnkgdGhlIGdpdmVuIGtleSBmcm9tCi0gICogcGx1Z2luLnByb3BlcnRpZXMuCi0gICogQHJldHVybiBUaGUgU3RyaW5nIG1lc3NhZ2UuCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldE1lc3NhZ2UgKCBTdHJpbmcga2V5ICkKLSAgewotICAgIHJldHVybiBQbGF0Zm9ybS5nZXRSZXNvdXJjZVN0cmluZyhpbnN0YW5jZV8uZ2V0QnVuZGxlKCksa2V5KTsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIG1lc3NhZ2Ugc3RyaW5nIGlkZW50aWZpZWQgYnkgdGhlIGdpdmVuIGtleSBmcm9tCi0gICogcGx1Z2luLnByb3BlcnRpZXMuIFN1YnN0aXR1dGlvbiBzZXF1ZW5jZXMgaW4gdGhlIG1lc3NhZ2Ugc3RyaW5nCi0gICogYXJlIHJlcGxhY2VkIGJ5IHRoZSBnaXZlbiBhcnJheSBvZiBzdWJzdGl0dXRpb24gb2JqZWN0cyAod2hpY2gKLSAgKiBhcmUgbW9zdCBmcmVxdWVudGx5IHN0cmluZ3MpLiBTZWUgdGhlIEpESydzCi0gICoge0BsaW5rIGphdmEudGV4dC5NZXNzYWdlRm9ybWF0IGphdmEudGV4dC5NZXNzYWdlRm9ybWF0fQotICAqIGNsYXNzIGZvciBmdXJ0aGVyIGRldGFpbHMgb24gc3Vic3RpdHV0aW9uLgotICAqIEByZXR1cm4gVGhlIFN0cmluZyBtZXNzYWdlLgotICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRNZXNzYWdlICggU3RyaW5nIGtleSwgT2JqZWN0W10gYXJncyApCi0gIHsKLSAgICByZXR1cm4gTWVzc2FnZUZvcm1hdC5mb3JtYXQoZ2V0TWVzc2FnZShrZXkpLGFyZ3MpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91ZGRpcmVnaXN0cnkvd2lkZ2V0cy9Qcml2YXRlVURESVNlbGVjdGlvbkNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VkZGlyZWdpc3RyeS93aWRnZXRzL1ByaXZhdGVVRERJU2VsZWN0aW9uQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzRmOTQ5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VkZGlyZWdpc3RyeS93aWRnZXRzL1ByaXZhdGVVRERJU2VsZWN0aW9uQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51ZGRpcmVnaXN0cnkud2lkZ2V0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVkZGlyZWdpc3RyeS53aXphcmQuUHJpdmF0ZVVERElSZWdpc3RyeVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLS8qCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLkVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5NZXNzYWdlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlNpbXBsZVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51ZGRpcmVnaXN0cnkucGx1Z2luLldlYlNlcnZpY2VVRERJUmVnaXN0cnlQbHVnaW47Ci0qLwotCi1wdWJsaWMgY2xhc3MgUHJpdmF0ZVVERElTZWxlY3Rpb25Db21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLSAgcHJpdmF0ZSBieXRlIG9wZXJhdGlvblR5cGU7Ci0gIHByaXZhdGUgUHJpdmF0ZVVERElSZWdpc3RyeVR5cGUgcmVnaXN0cnlUeXBlOwotICAKLSAgLyoKLSAgcHVibGljIFN0YXR1cyBleGVjdXRlKEVudmlyb25tZW50IGVudikKLSAgewotICAgIE1lc3NhZ2VVdGlscyBtc2dVdGlscyA9IG5ldyBNZXNzYWdlVXRpbHMoV2ViU2VydmljZVVERElSZWdpc3RyeVBsdWdpbi5JRCArICIucGx1Z2luIiwgdGhpcyk7Ci0gIAlpZiAocmVnaXN0cnlUeXBlICE9IG51bGwpCi0gIAl7Ci0gIAkgIHN3aXRjaCAob3BlcmF0aW9uVHlwZSkKLSAgCSAgewotICAJICAJY2FzZSBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZS5PUF9ERVBMT1k6Ci0gIAkgICAgICByZXR1cm4gcmVnaXN0cnlUeXBlLmRlcGxveShlbnYpOwotICAJICAJY2FzZSBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZS5PUF9VUERBVEU6Ci0gIAkgIAkgIHJldHVybiByZWdpc3RyeVR5cGUudXBkYXRlKGVudik7Ci0gIAkgIAljYXNlIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlLk9QX1JFTU9WRToKLSAgCSAgCSAgcmV0dXJuIHJlZ2lzdHJ5VHlwZS5yZW1vdmUoZW52KTsKLSAgCSAgCWRlZmF1bHQ6Ci0gIAkgIH0KLSAgCX0KLSAgCXJldHVybiBuZXcgU2ltcGxlU3RhdHVzKCIiKTsKLSAgfQotICAqLwotCi0gIHB1YmxpYyBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZSBnZXRSZWdpc3RyeVR5cGUoKQotICB7Ci0gICAgcmV0dXJuIGdldFByaXZhdGVVRERJUmVnaXN0cnlUeXBlKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBieXRlIGdldE9wZXJhdGlvblR5cGUoKQotICB7Ci0gICAgcmV0dXJuIG9wZXJhdGlvblR5cGU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZSBnZXRQcml2YXRlVURESVJlZ2lzdHJ5VHlwZSgpCi0gIHsKLSAgCXJldHVybiByZWdpc3RyeVR5cGU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRSZWdpc3RyeVR5cGUoUHJpdmF0ZVVERElSZWdpc3RyeVR5cGUgcmVnVHlwZSkKLSAgewotICAJc2V0UHJpdmF0ZVVERElSZWdpc3RyeVR5cGUocmVnVHlwZSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldE9wZXJhdGlvblR5cGUoYnl0ZSB0eXBlKQotICB7Ci0gICAgb3BlcmF0aW9uVHlwZSA9IHR5cGU7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFByaXZhdGVVRERJUmVnaXN0cnlUeXBlKFByaXZhdGVVRERJUmVnaXN0cnlUeXBlIHJlZ1R5cGUpCi0gIHsKLSAgCXJlZ2lzdHJ5VHlwZSA9IHJlZ1R5cGU7Ci0gIH0KLQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBpbmZvKSB0aHJvd3MgRXhlY3V0aW9uRXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWRkaXJlZ2lzdHJ5L3dpZGdldHMvUHJpdmF0ZVVERElTZWxlY3Rpb25Db21tYW5kRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VkZGlyZWdpc3RyeS93aWRnZXRzL1ByaXZhdGVVRERJU2VsZWN0aW9uQ29tbWFuZEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiZmFmYTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5L3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWRkaXJlZ2lzdHJ5L3dpZGdldHMvUHJpdmF0ZVVERElTZWxlY3Rpb25Db21tYW5kRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWRkaXJlZ2lzdHJ5LndpZGdldHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWRkaXJlZ2lzdHJ5LndpemFyZC5Qcml2YXRlVURESVJlZ2lzdHJ5VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQWJzdHJhY3RDb21tYW5kRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLkNhbkZpbmlzaFJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldFJlZ2lzdHJ5OwotCi0KLXB1YmxpYyBjbGFzcyBQcml2YXRlVURESVNlbGVjdGlvbkNvbW1hbmRGcmFnbWVudCBleHRlbmRzIEFic3RyYWN0Q29tbWFuZEZyYWdtZW50Ci17Ci0gIHByaXZhdGUgUHJpdmF0ZVVERElSZWdpc3RyeVR5cGUgcmVnaXN0cnlUeXBlOwotICBwcml2YXRlIERhdGFNYXBwaW5nUmVnaXN0cnkgZGF0YU1hcHBpbmdSZWdpc3RyeTsKLSAgcHJpdmF0ZSBDYW5GaW5pc2hSZWdpc3RyeSBjYW5GaW5pc2hSZWdpc3RyeTsKLSAgcHJpdmF0ZSBXaWRnZXRSZWdpc3RyeSB3aWRnZXRSZWdpc3RyeTsKLSAgCi0gIHB1YmxpYyBQcml2YXRlVURESVNlbGVjdGlvbkNvbW1hbmRGcmFnbWVudCgpCi0gIHsKLSAgCXN1cGVyKG51bGwsICIiKTsKLSAgfQotCi0gIC8qKiAKLSAgICAqIEdldHMgdGhlIGZpcnN0IGNoaWxkIGZyYWdtZW50IGZvciB0aGlzIGZyYWdtZW50LgotICAgICoKLSAgICAqIEByZXR1cm4gcmV0dXJucyB0aGUgZmlyc3QgY2hpbGQgZnJhZ21lbnQgZm9yIHRoaXMgZnJhZ21lbnQuICBSZXR1cm5zCi0gICAgKiBudWxsIHdoZW4gdGhlcmUgaXMgbm8gZmlyc3QgY2hpbGQuCi0gICoqLwotICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50IGdldEZpcnN0U3ViRnJhZ21lbnQoKQotICB7Ci0gIAlpZiAocmVnaXN0cnlUeXBlICE9IG51bGwpCi0gIAl7Ci0gICAgICByZWdpc3RyeVR5cGUucmVnaXN0ZXJDYW5GaW5pc2goY2FuRmluaXNoUmVnaXN0cnkpOwotICAgICAgcmVnaXN0cnlUeXBlLnJlZ2lzdGVyRGF0YU1hcHBpbmdzKGRhdGFNYXBwaW5nUmVnaXN0cnkpOwotICAgICAgcmVnaXN0cnlUeXBlLnJlZ2lzdGVyV2lkZ2V0TWFwcGluZ3Mod2lkZ2V0UmVnaXN0cnkpOwotICAgICAgcmV0dXJuIHJlZ2lzdHJ5VHlwZS5jcmVhdGUoKS5jcmVhdGUoKTsKLSAgCX0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgICogR2V0cyB0aGUgbmV4dCBjaGlsZCBmcmFnbWVudCBmb3IgdGhpcyBmcmFnbWVudC4KLSAgICAqCi0gICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIG5leHQgY2hpbGQgZnJhZ21lbnQgZm9yIHRoaXMgZnJhZ21lbnQuICBSZXR1cm5zIG51bGwKLSAgICAqIHdoZW4gdGhlcmUgaXMgbm8gbmV4dCBjaGlsZC4KLSAgKiovCi0gIHB1YmxpYyBDb21tYW5kRnJhZ21lbnQgZ2V0TmV4dFN1YkZyYWdtZW50KENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCkKLSAgewotICAJcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIC8qCi0gICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB0byByZXRyaWV2ZSB0aGUgZGF0YSBtYXBwaW5ncyBmb3IgdGhpcyBjb21tYW5kIGZyYWdtZW50LgotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoRGF0YU1hcHBpbmdSZWdpc3RyeSByZWdpc3RyeSkKLSAgewotICAJZGF0YU1hcHBpbmdSZWdpc3RyeSA9IHJlZ2lzdHJ5OwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJDYW5GaW5pc2goQ2FuRmluaXNoUmVnaXN0cnkgY2FuRmluaXNoUmVnaXN0cnkpCi0gIHsKLSAgICB0aGlzLmNhbkZpbmlzaFJlZ2lzdHJ5ID0gY2FuRmluaXNoUmVnaXN0cnk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZWdpc3RlcldpZGdldE1hcHBpbmdzKFdpZGdldFJlZ2lzdHJ5IHdpZGdldFJlZ2lzdHJ5KQotICB7Ci0gICAgdGhpcy53aWRnZXRSZWdpc3RyeSA9IHdpZGdldFJlZ2lzdHJ5OwotICB9Ci0KLSAgLyoqCi0gICAgKiBBbGwgd2l6YXJkIGZyYWdtZW50cyBuZWVkIHRvIGJlIGNsb25lYWJsZS4KLSAgKiovCi0gIHB1YmxpYyBPYmplY3QgY2xvbmUoKQotICB7Ci0gIAlQcml2YXRlVURESVNlbGVjdGlvbkNvbW1hbmRGcmFnbWVudCBmcmFnbWVudCA9IG5ldyBQcml2YXRlVURESVNlbGVjdGlvbkNvbW1hbmRGcmFnbWVudCgpOwotICAJZnJhZ21lbnQucmVnaXN0ZXJEYXRhTWFwcGluZ3MoZGF0YU1hcHBpbmdSZWdpc3RyeSk7Ci0gIAlmcmFnbWVudC5yZWdpc3RlckNhbkZpbmlzaChjYW5GaW5pc2hSZWdpc3RyeSk7Ci0gIAlmcmFnbWVudC5yZWdpc3RlcldpZGdldE1hcHBpbmdzKHdpZGdldFJlZ2lzdHJ5KTsKLSAgCWZyYWdtZW50LnNldFByaXZhdGVVRERJUmVnaXN0cnlUeXBlKHJlZ2lzdHJ5VHlwZSk7Ci0gIAlyZXR1cm4gZnJhZ21lbnQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFByaXZhdGVVRERJUmVnaXN0cnlUeXBlKFByaXZhdGVVRERJUmVnaXN0cnlUeXBlIHJlZ2lzdHJ5VHlwZSkKLSAgewotICAJdGhpcy5yZWdpc3RyeVR5cGUgPSByZWdpc3RyeVR5cGU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VkZGlyZWdpc3RyeS93aWRnZXRzL1ByaXZhdGVVRERJU2VsZWN0aW9uV2lkZ2V0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91ZGRpcmVnaXN0cnkvd2lkZ2V0cy9Qcml2YXRlVURESVNlbGVjdGlvbldpZGdldC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZWEzZDZhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VkZGlyZWdpc3RyeS93aWRnZXRzL1ByaXZhdGVVRERJU2VsZWN0aW9uV2lkZ2V0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51ZGRpcmVnaXN0cnkud2lkZ2V0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5TWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVkZGlyZWdpc3RyeS5wbHVnaW4uV2ViU2VydmljZVVERElSZWdpc3RyeVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWRkaXJlZ2lzdHJ5LndpemFyZC5Qcml2YXRlVURESVJlZ2lzdHJ5VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWRkaXJlZ2lzdHJ5LndpemFyZC5Qcml2YXRlVURESVJlZ2lzdHJ5VHlwZVJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhlbHAuSVdvcmtiZW5jaEhlbHBTeXN0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLlNpbXBsZVdpZGdldERhdGFDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXREYXRhRXZlbnRzOwotCi0KLS8qKgotKiBUaGlzIFVEREkgY29uZmlndXJhdGlvbiBwYWdlIHByb21wdHMgdGhlIHVzZXIKLSogZm9yIHRoZSBpbmZvcm1hdGlvbiByZXF1aXJlZCB0byBjb25maWd1cmUgdGhlCi0qIHVuaXQgdGVzdCBVRERJIHJlZ2lzdHJ5LgotKi8KLXB1YmxpYyBjbGFzcyBQcml2YXRlVURESVNlbGVjdGlvbldpZGdldCBleHRlbmRzIFNpbXBsZVdpZGdldERhdGFDb250cmlidXRvcgotewotICBwcml2YXRlIExpc3RlbmVyIHN0YXR1c0xpc3RlbmVyOwotCi0gIHByaXZhdGUgQnV0dG9uIGRlcGxveVJhZGlvXzsKLSAgcHJpdmF0ZSBMYWJlbCB0eXBlc0xhYmVsXzsKLSAgcHJpdmF0ZSBDb21ibyB0eXBlc0NvbWJvXzsKLSAgcHJpdmF0ZSBCdXR0b24gdXBkYXRlUmFkaW9fOwotICBwcml2YXRlIEJ1dHRvbiByZW1vdmVSYWRpb187Ci0gIHByaXZhdGUgUHJpdmF0ZVVERElSZWdpc3RyeVR5cGVbXSB0eXBlc187Ci0gIHByaXZhdGUgUHJpdmF0ZVVERElSZWdpc3RyeVR5cGUgaW5zdGFsbGVkVHlwZV87Ci0KLSAgLy8gSW5mb3BvcAotICBwcml2YXRlIGZpbmFsIFN0cmluZyBJTkZPUE9QX1BVUFJfUFJJVkFURV9VRERJX1BBR0UgPSBXZWJTZXJ2aWNlVURESVJlZ2lzdHJ5UGx1Z2luLklEICsgIi5wdXByMDAwMSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIElORk9QT1BfUFVQUl9QUklWQVRFX1VERElfVFlQRSA9IFdlYlNlcnZpY2VVRERJUmVnaXN0cnlQbHVnaW4uSUQgKyAiLnB1cHIwMDAyIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9QVVBSX0RFUExPWV9QUklWQVRFX1VEREkgPSBXZWJTZXJ2aWNlVURESVJlZ2lzdHJ5UGx1Z2luLklEICsgIi5wdXByMDAwMyI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIElORk9QT1BfUFVQUl9VUERBVEVfUFJJVkFURV9VRERJID0gV2ViU2VydmljZVVERElSZWdpc3RyeVBsdWdpbi5JRCArICIucHVwcjAwMDUiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBJTkZPUE9QX1BVUFJfUkVNT1ZFX1BSSVZBVEVfVURESSA9IFdlYlNlcnZpY2VVRERJUmVnaXN0cnlQbHVnaW4uSUQgKyAiLnB1cHIwMDA0IjsKLQotICBwdWJsaWMgUHJpdmF0ZVVERElTZWxlY3Rpb25XaWRnZXQoKQotICB7Ci0gIH0KLQotICBwdWJsaWMgV2lkZ2V0RGF0YUV2ZW50cyBhZGRDb250cm9scyhDb21wb3NpdGUgcGFyZW50LCBMaXN0ZW5lciBzdGF0dXNMaXN0ZW5lcikKLSAgewotICAJdGhpcy5zdGF0dXNMaXN0ZW5lciA9IHN0YXR1c0xpc3RlbmVyOwotICAgIHBhcmVudC5zZXRUb29sVGlwVGV4dChVRERJUmVnaXN0cnlNZXNzYWdlcy5UT09MVElQX1BVUFJfUFJJVkFURV9VRERJX1BBR0UpOwotICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAocGFyZW50LCBJTkZPUE9QX1BVUFJfUFJJVkFURV9VRERJX1BBR0UpOwotCi0gICAgR3JpZExheW91dCBnbDsKLSAgICBHcmlkRGF0YSBnZDsKLSAgICAKLSAgICBMaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBMaXN0ZW5lcigpCi0gICAgewotICAgICAgcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQgZXZlbnQpCi0gICAgICB7Ci0gICAgICAJaGFuZGxlV2lkZ2V0RXZlbnQoZXZlbnQpOwotICAgICAgfQotICAgIH07Ci0KLSAgICBJV29ya2JlbmNoSGVscFN5c3RlbSBoZWxwU3lzdGVtID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCk7Ci0gICAgCi0gICAgZGVwbG95UmFkaW9fID0gbmV3IEJ1dHRvbihwYXJlbnQsIFNXVC5SQURJTyk7Ci0gICAgZGVwbG95UmFkaW9fLnNldFRleHQoVURESVJlZ2lzdHJ5TWVzc2FnZXMuQlVUVE9OX0RFUExPWV9VRERJX1JFR0lTVFJZKTsKLSAgICBkZXBsb3lSYWRpb18uc2V0U2VsZWN0aW9uKHRydWUpOwotICAgIGRlcGxveVJhZGlvXy5hZGRMaXN0ZW5lcihTV1QuU2VsZWN0aW9uLCBsaXN0ZW5lcik7Ci0gICAgZGVwbG95UmFkaW9fLnNldFRvb2xUaXBUZXh0KFVERElSZWdpc3RyeU1lc3NhZ2VzLlRPT0xUSVBfUFVQUl9ERVBMT1lfUFJJVkFURV9VRERJKTsKLSAgICBoZWxwU3lzdGVtLnNldEhlbHAoZGVwbG95UmFkaW9fLCBJTkZPUE9QX1BVUFJfREVQTE9ZX1BSSVZBVEVfVURESSk7Ci0KLSAgICBDb21wb3NpdGUgdHlwZUNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LFNXVC5OT05FKTsKLSAgICBnbCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgZ2wubnVtQ29sdW1ucyA9IDI7Ci0gICAgZ2wubWFyZ2luSGVpZ2h0ID0gNTsKLSAgICBnbC52ZXJ0aWNhbFNwYWNpbmcgPSAxNTsKLSAgICBnbC5tYXJnaW5XaWR0aCA9IDIwOwotICAgIHR5cGVDb21wb3NpdGUuc2V0TGF5b3V0KGdsKTsKLSAgICBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwgfCBHcmlkRGF0YS5HUkFCX0hPUklaT05UQUwpOwotICAgIHR5cGVDb21wb3NpdGUuc2V0TGF5b3V0RGF0YShnZCk7Ci0KLSAgICB0eXBlc0xhYmVsXyA9IG5ldyBMYWJlbCh0eXBlQ29tcG9zaXRlLCBTV1QuV1JBUCk7Ci0gICAgdHlwZXNMYWJlbF8uc2V0VGV4dChVRERJUmVnaXN0cnlNZXNzYWdlcy5MQUJFTF9QUklWQVRFX1VERElfUkVHSVNUUllfVFlQRVMpOwotICAgIHR5cGVzTGFiZWxfLnNldFRvb2xUaXBUZXh0KFVERElSZWdpc3RyeU1lc3NhZ2VzLlRPT0xUSVBfUFVQUl9QUklWQVRFX1VERElfVFlQRSk7Ci0gICAgaGVscFN5c3RlbS5zZXRIZWxwKHR5cGVzTGFiZWxfLCBJTkZPUE9QX1BVUFJfUFJJVkFURV9VRERJX1RZUEUpOwotCi0gICAgdHlwZXNDb21ib18gPSBuZXcgQ29tYm8odHlwZUNvbXBvc2l0ZSwgU1dULkRST1BfRE9XTiB8IFNXVC5SRUFEX09OTFkpOwotICAgIGdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCk7Ci0gICAgdHlwZXNDb21ib18uc2V0TGF5b3V0RGF0YShnZCk7Ci0gICAgdHlwZXNDb21ib18uYWRkTGlzdGVuZXIoU1dULlNlbGVjdGlvbiwgbGlzdGVuZXIpOwotICAgIHR5cGVzQ29tYm9fLnNldFRvb2xUaXBUZXh0KFVERElSZWdpc3RyeU1lc3NhZ2VzLlRPT0xUSVBfUFVQUl9QUklWQVRFX1VERElfVFlQRSk7Ci0gICAgaGVscFN5c3RlbS5zZXRIZWxwKHR5cGVzQ29tYm9fLCBJTkZPUE9QX1BVUFJfUFJJVkFURV9VRERJX1RZUEUpOwotCi0gICAgdXBkYXRlUmFkaW9fID0gbmV3IEJ1dHRvbihwYXJlbnQsU1dULlJBRElPKTsKLSAgICB1cGRhdGVSYWRpb18uc2V0VGV4dChVRERJUmVnaXN0cnlNZXNzYWdlcy5CVVRUT05fVVBEQVRFX1VERElfUkVHSVNUUlkpOwotICAgIHVwZGF0ZVJhZGlvXy5zZXRTZWxlY3Rpb24oZmFsc2UpOwotICAgIHVwZGF0ZVJhZGlvXy5hZGRMaXN0ZW5lcihTV1QuU2VsZWN0aW9uLGxpc3RlbmVyKTsKLSAgICB1cGRhdGVSYWRpb18uc2V0VG9vbFRpcFRleHQoVURESVJlZ2lzdHJ5TWVzc2FnZXMuVE9PTFRJUF9QVVBSX1VQREFURV9QUklWQVRFX1VEREkpOwotICAgIGhlbHBTeXN0ZW0uc2V0SGVscCh1cGRhdGVSYWRpb18sIElORk9QT1BfUFVQUl9VUERBVEVfUFJJVkFURV9VRERJKTsKLQotICAgIHJlbW92ZVJhZGlvXyA9IG5ldyBCdXR0b24ocGFyZW50LCBTV1QuUkFESU8pOwotICAgIHJlbW92ZVJhZGlvXy5zZXRUZXh0KFVERElSZWdpc3RyeU1lc3NhZ2VzLkJVVFRPTl9SRU1PVkVfVURESV9SRUdJU1RSWSk7Ci0gICAgcmVtb3ZlUmFkaW9fLnNldFNlbGVjdGlvbihmYWxzZSk7Ci0gICAgcmVtb3ZlUmFkaW9fLmFkZExpc3RlbmVyKFNXVC5TZWxlY3Rpb24sIGxpc3RlbmVyKTsKLSAgICByZW1vdmVSYWRpb18uc2V0VG9vbFRpcFRleHQoVURESVJlZ2lzdHJ5TWVzc2FnZXMuVE9PTFRJUF9QVVBSX1JFTU9WRV9QUklWQVRFX1VEREkpOwotICAgIGhlbHBTeXN0ZW0uc2V0SGVscChyZW1vdmVSYWRpb18sIElORk9QT1BfUFVQUl9SRU1PVkVfUFJJVkFURV9VRERJKTsgICAgICAgICAgICAgICAgCi0KLSAgICBsb2FkVHlwZXMoKTsKLSAgICBpbml0KCk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIHZvaWQgbG9hZFR5cGVzKCkKLSAgewotICAgIHR5cGVzXyA9IFByaXZhdGVVRERJUmVnaXN0cnlUeXBlUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKS5nZXRUeXBlcygpOwotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIGluaXQoKQotICB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlc18ubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgaWYgKHR5cGVzX1tpXSAhPSBudWxsKQotICAgICAgewotICAgICAgICB0eXBlc0NvbWJvXy5hZGQodHlwZXNfW2ldLmdldE5hbWUoKSk7Ci0gICAgICAgIGlmICh0eXBlc19baV0uaXNQcml2YXRlVURESVJlZ2lzdHJ5SW5zdGFsbGVkKCkpCi0gICAgICAgICAgaW5zdGFsbGVkVHlwZV8gPSB0eXBlc19baV07Ci0gICAgICB9Ci0gICAgfQotICAgIGlmICh0eXBlc0NvbWJvXy5nZXRJdGVtQ291bnQoKSA+IDApCi0gICAgICB0eXBlc0NvbWJvXy5zZXRUZXh0KHR5cGVzQ29tYm9fLmdldEl0ZW0oMCkpOwotICAgIGlmIChpbnN0YWxsZWRUeXBlXyAhPSBudWxsKQotICAgIHsKLSAgICAgIHVwZGF0ZVJhZGlvXy5zZXRFbmFibGVkKHRydWUpOwotICAgICAgcmVtb3ZlUmFkaW9fLnNldEVuYWJsZWQodHJ1ZSk7ICAgICAgICAgICAgICAgIAotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgdXBkYXRlUmFkaW9fLnNldEVuYWJsZWQoZmFsc2UpOwotICAgICAgcmVtb3ZlUmFkaW9fLnNldEVuYWJsZWQoZmFsc2UpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBoYW5kbGVXaWRnZXRFdmVudChFdmVudCBldmVudCkKLSAgewotICAgIGlmIChldmVudC53aWRnZXQgPT0gcmVtb3ZlUmFkaW9fIHx8IGV2ZW50LndpZGdldCA9PSB1cGRhdGVSYWRpb18pCi0gICAgewotICAgICAgYm9vbGVhbiBpc1VwZGF0ZU9yUmVtb3ZlU2VsZWN0ZWQgPSAoKEJ1dHRvbilldmVudC53aWRnZXQpLmdldFNlbGVjdGlvbigpOwotICAgICAgdHlwZXNMYWJlbF8uc2V0RW5hYmxlZCghaXNVcGRhdGVPclJlbW92ZVNlbGVjdGVkKTsKLSAgICAgIHR5cGVzQ29tYm9fLnNldEVuYWJsZWQoIWlzVXBkYXRlT3JSZW1vdmVTZWxlY3RlZCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGV2ZW50LndpZGdldCA9PSBkZXBsb3lSYWRpb18pCi0gICAgewotICAgICAgYm9vbGVhbiBpc0RlcGxveVNlbGVjdGVkID0gKChCdXR0b24pZXZlbnQud2lkZ2V0KS5nZXRTZWxlY3Rpb24oKTsKLSAgICAgIHR5cGVzTGFiZWxfLnNldEVuYWJsZWQoaXNEZXBsb3lTZWxlY3RlZCk7Ci0gICAgICB0eXBlc0NvbWJvXy5zZXRFbmFibGVkKGlzRGVwbG95U2VsZWN0ZWQpOwotICAgIH0KLSAgICBzdGF0dXNMaXN0ZW5lci5oYW5kbGVFdmVudChldmVudCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZSBnZXRQcml2YXRlVURESVJlZ2lzdHJ5VHlwZSgpCi0gIHsKLSAgCWlmIChkZXBsb3lSYWRpb18uZ2V0U2VsZWN0aW9uKCkpCi0gIAl7Ci0gIAkgIFN0cmluZyBzZWxlY3RlZFJlZ2lzdHJ5TmFtZSA9IHR5cGVzQ29tYm9fLmdldFRleHQoKTsKLSAgCSAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlc18ubGVuZ3RoOyBpKyspCi0gICAgICAgIGlmIChzZWxlY3RlZFJlZ2lzdHJ5TmFtZS5lcXVhbHModHlwZXNfW2ldLmdldE5hbWUoKSkpCi0gIAkgIAkgIHJldHVybiB0eXBlc19baV07Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgCX0KLSAgCWVsc2UKLSAgCSAgcmV0dXJuIGluc3RhbGxlZFR5cGVfOwotICB9Ci0gIAotICBwdWJsaWMgYnl0ZSBnZXRPcGVyYXRpb25UeXBlKCkKLSAgewotICAJaWYgKGRlcGxveVJhZGlvXy5nZXRTZWxlY3Rpb24oKSkKLSAgCSAgcmV0dXJuIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlLk9QX0RFUExPWTsKLSAgCWVsc2UgaWYgKHVwZGF0ZVJhZGlvXy5nZXRTZWxlY3Rpb24oKSkKLSAgICAgIHJldHVybiBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZS5PUF9VUERBVEU7Ci0gIAllbHNlIGlmIChyZW1vdmVSYWRpb18uZ2V0U2VsZWN0aW9uKCkpCi0gICAgICByZXR1cm4gUHJpdmF0ZVVERElSZWdpc3RyeVR5cGUuT1BfUkVNT1ZFOwotICAJZWxzZQotICAJICByZXR1cm4gUHJpdmF0ZVVERElSZWdpc3RyeVR5cGUuT1BfREVQTE9ZOwotICB9Ci0KLSAgcHVibGljIElTdGF0dXMgZ2V0U3RhdHVzKCkKLSAgewotICAgIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlIHByaXZhdGVVRERJUmVnaXN0cnlUeXBlID0gZ2V0UHJpdmF0ZVVERElSZWdpc3RyeVR5cGUoKTsKLSAgICBpZiAocHJpdmF0ZVVERElSZWdpc3RyeVR5cGUgIT0gbnVsbCkKLSAgICAgIHJldHVybiBwcml2YXRlVURESVJlZ2lzdHJ5VHlwZS5nZXRPcGVyYXRpb25TdGF0dXMoZ2V0T3BlcmF0aW9uVHlwZSgpKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIFVERElSZWdpc3RyeU1lc3NhZ2VzLk1TR19FUlJPUl9OT19VRERJX1JFR0lTVFJZX0FWQUlMQUJMRSApOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91ZGRpcmVnaXN0cnkvd2lkZ2V0cy9Qcml2YXRlVURESVNlbGVjdGlvbldpZGdldENvbmRpdGlvbkNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VkZGlyZWdpc3RyeS93aWRnZXRzL1ByaXZhdGVVRERJU2VsZWN0aW9uV2lkZ2V0Q29uZGl0aW9uQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOGVhYTlkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VkZGlyZWdpc3RyeS93aWRnZXRzL1ByaXZhdGVVRERJU2VsZWN0aW9uV2lkZ2V0Q29uZGl0aW9uQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51ZGRpcmVnaXN0cnkud2lkZ2V0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLkNvbmRpdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi0KLXB1YmxpYyBjbGFzcyBQcml2YXRlVURESVNlbGVjdGlvbldpZGdldENvbmRpdGlvbkNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiBpbXBsZW1lbnRzIENvbmRpdGlvbgotewotICBwcml2YXRlIGJvb2xlYW4gY29uZGl0aW9uOwotCi0gIHB1YmxpYyBQcml2YXRlVURESVNlbGVjdGlvbldpZGdldENvbmRpdGlvbkNvbW1hbmQoKQotICB7Ci0gICAgY29uZGl0aW9uID0gdHJ1ZTsKLSAgfQotICAKLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLSAgICBjb25kaXRpb24gPSAhY29uZGl0aW9uOwotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0gIAotICBwdWJsaWMgSVN0YXR1cyB1bmRvKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgewotICAgIGNvbmRpdGlvbiA9ICFjb25kaXRpb247Ci0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGV2YWx1YXRlKCkKLSAgewotICAgIHJldHVybiBjb25kaXRpb247Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VkZGlyZWdpc3RyeS93aWRnZXRzL2JpbmRpbmcvUHJpdmF0ZVVERElXaWRnZXRCaW5kaW5nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91ZGRpcmVnaXN0cnkvd2lkZ2V0cy9iaW5kaW5nL1ByaXZhdGVVRERJV2lkZ2V0QmluZGluZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDQ0YTQ2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VkZGlyZWdpc3RyeS93aWRnZXRzL2JpbmRpbmcvUHJpdmF0ZVVERElXaWRnZXRCaW5kaW5nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51ZGRpcmVnaXN0cnkud2lkZ2V0cy5iaW5kaW5nOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWRkaXJlZ2lzdHJ5LndpZGdldHMuUHJpdmF0ZVVERElTZWxlY3Rpb25Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51ZGRpcmVnaXN0cnkud2lkZ2V0cy5Qcml2YXRlVURESVNlbGVjdGlvbkNvbW1hbmRGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWRkaXJlZ2lzdHJ5LndpZGdldHMuUHJpdmF0ZVVERElTZWxlY3Rpb25XaWRnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVkZGlyZWdpc3RyeS53aWRnZXRzLlByaXZhdGVVRERJU2VsZWN0aW9uV2lkZ2V0Q29uZGl0aW9uQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2VxdWVuY2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5TaW1wbGVGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5DYW5GaW5pc2hSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0UmVnaXN0cnk7Ci0KLQotcHVibGljIGNsYXNzIFByaXZhdGVVRERJV2lkZ2V0QmluZGluZyBpbXBsZW1lbnRzIENvbW1hbmRXaWRnZXRCaW5kaW5nCi17Ci0gIHByaXZhdGUgQ2FuRmluaXNoUmVnaXN0cnkgICBjYW5GaW5pc2hSZWdpc3RyeTsKLSAgcHJpdmF0ZSBXaWRnZXRSZWdpc3RyeSAgICAgIHdpZGdldFJlZ2lzdHJ5OwotICBwcml2YXRlIERhdGFNYXBwaW5nUmVnaXN0cnkgZGF0YU1hcHBpbmdSZWdpc3RyeTsKLSAgcHJpdmF0ZSBQcml2YXRlVURESVNlbGVjdGlvbkNvbW1hbmRGcmFnbWVudCBwcml2YXRlVURESVNlbEZyYWdtZW50OwotICBwcml2YXRlIFByaXZhdGVVRERJU2VsZWN0aW9uV2lkZ2V0Q29uZGl0aW9uQ29tbWFuZCBjb25kaXRpb25Db21tYW5kOwotICAKLSAgcHVibGljIFByaXZhdGVVRERJV2lkZ2V0QmluZGluZygpCi0gIHsKLSAgICBwcml2YXRlVURESVNlbEZyYWdtZW50ID0gbmV3IFByaXZhdGVVRERJU2VsZWN0aW9uQ29tbWFuZEZyYWdtZW50KCk7Ci0gICAgY29uZGl0aW9uQ29tbWFuZCA9IG5ldyBQcml2YXRlVURESVNlbGVjdGlvbldpZGdldENvbmRpdGlvbkNvbW1hbmQoKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI2NyZWF0ZSgpCi0gICAqLwotICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50RmFjdG9yeSBjcmVhdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBDb21tYW5kRnJhZ21lbnRGYWN0b3J5KCkKLSAgICB7Ci0gICAgICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50IGNyZWF0ZSgpCi0gICAgICB7Ci0gICAgICAgIFNlcXVlbmNlRnJhZ21lbnQgcm9vdCA9IG5ldyBTZXF1ZW5jZUZyYWdtZW50KCk7Ci0gICAgICAgIHJvb3QuYWRkKG5ldyBTaW1wbGVGcmFnbWVudChjb25kaXRpb25Db21tYW5kLCAiIikpOwotICAgICAgICByb290LmFkZChuZXcgU2ltcGxlRnJhZ21lbnQoIlByaXZhdGVVRERJU2VsZWN0aW9uV2lkZ2V0IikpOwotICAgICAgICByb290LmFkZChuZXcgU2ltcGxlRnJhZ21lbnQoY29uZGl0aW9uQ29tbWFuZCwgIiIpKTsKLSAgICAgICAgcm9vdC5hZGQobmV3IFNpbXBsZUZyYWdtZW50KG5ldyBQcml2YXRlVURESVNlbGVjdGlvbkNvbW1hbmQoKSwgIiIpKTsKLSAgICAgICAgcm9vdC5hZGQocHJpdmF0ZVVERElTZWxGcmFnbWVudCk7Ci0gICAgICAgIHJldHVybiByb290OwotICAgICAgfQotICAgIH07Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJDYW5GaW5pc2gob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ2FuRmluaXNoUmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlckNhbkZpbmlzaChDYW5GaW5pc2hSZWdpc3RyeSBjYW5GaW5pc2hSZWdpc3RyeSkKLSAgewotICAgIHRoaXMuY2FuRmluaXNoUmVnaXN0cnkgPSBjYW5GaW5pc2hSZWdpc3RyeTsKLSAgICBwcml2YXRlVURESVNlbEZyYWdtZW50LnJlZ2lzdGVyQ2FuRmluaXNoKHRoaXMuY2FuRmluaXNoUmVnaXN0cnkpOwotICAgIAotICAgIGNhbkZpbmlzaFJlZ2lzdHJ5LmFkZENvbmRpdGlvbihjb25kaXRpb25Db21tYW5kKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlckRhdGFNYXBwaW5ncyhvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyhEYXRhTWFwcGluZ1JlZ2lzdHJ5IGRhdGFSZWdpc3RyeSkKLSAgewotICAgIGRhdGFNYXBwaW5nUmVnaXN0cnkgPSBkYXRhUmVnaXN0cnk7Ci0gICAgcHJpdmF0ZVVERElTZWxGcmFnbWVudC5yZWdpc3RlckRhdGFNYXBwaW5ncyhkYXRhTWFwcGluZ1JlZ2lzdHJ5KTsKLSAgICAKLSAgICAvLyBQcml2YXRlVURESVNlbGVjdGlvbkNvbW1hbmQKLSAgICBkYXRhTWFwcGluZ1JlZ2lzdHJ5LmFkZE1hcHBpbmcoUHJpdmF0ZVVERElTZWxlY3Rpb25XaWRnZXQuY2xhc3MsICJQcml2YXRlVURESVJlZ2lzdHJ5VHlwZSIsIFByaXZhdGVVRERJU2VsZWN0aW9uQ29tbWFuZC5jbGFzcyk7Ci0gICAgZGF0YU1hcHBpbmdSZWdpc3RyeS5hZGRNYXBwaW5nKFByaXZhdGVVRERJU2VsZWN0aW9uV2lkZ2V0LmNsYXNzLCAiT3BlcmF0aW9uVHlwZSIsIFByaXZhdGVVRERJU2VsZWN0aW9uQ29tbWFuZC5jbGFzcyk7Ci0gICAgCi0gICAgLy8gUHJpdmF0ZVVERElTZWxlY3Rpb25Db21tYW5kRnJhZ21lbnQKLSAgICBkYXRhTWFwcGluZ1JlZ2lzdHJ5LmFkZE1hcHBpbmcoUHJpdmF0ZVVERElTZWxlY3Rpb25XaWRnZXQuY2xhc3MsICJQcml2YXRlVURESVJlZ2lzdHJ5VHlwZSIsIFByaXZhdGVVRERJU2VsZWN0aW9uQ29tbWFuZEZyYWdtZW50LmNsYXNzKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlcldpZGdldE1hcHBpbmdzKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLldpZGdldFJlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJXaWRnZXRNYXBwaW5ncyhXaWRnZXRSZWdpc3RyeSB3aWRnZXRSZWdpc3RyeSkKLSAgewotICAgIHRoaXMud2lkZ2V0UmVnaXN0cnkgPSB3aWRnZXRSZWdpc3RyeTsKLSAgICBwcml2YXRlVURESVNlbEZyYWdtZW50LnJlZ2lzdGVyV2lkZ2V0TWFwcGluZ3ModGhpcy53aWRnZXRSZWdpc3RyeSk7Ci0KLSAgICB3aWRnZXRSZWdpc3RyeS5hZGQoIlByaXZhdGVVRERJU2VsZWN0aW9uV2lkZ2V0IiwgCi0gICAgICBVRERJUmVnaXN0cnlNZXNzYWdlcy5QQUdFX1RJVExFX1BSSVZBVEVfVURESV9DT05GSUcsCi0gICAgICBVRERJUmVnaXN0cnlNZXNzYWdlcy5QQUdFX0RFU0NfUFJJVkFURV9VRERJX0NPTkZJRywKLQkgIG5ldyBXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKQotICAgICAgewotCSAgICBwdWJsaWMgV2lkZ2V0Q29udHJpYnV0b3IgY3JlYXRlKCkKLQkgICAgewotCSAgICAgIHJldHVybiBuZXcgUHJpdmF0ZVVERElTZWxlY3Rpb25XaWRnZXQoKTsKLQkgICAgfQotCSAgfQotICAgICk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VkZGlyZWdpc3RyeS93aXphcmQvUHJpdmF0ZVVERElSZWdpc3RyeVR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VkZGlyZWdpc3RyeS93aXphcmQvUHJpdmF0ZVVERElSZWdpc3RyeVR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTY2M2Q2OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91ZGRpcmVnaXN0cnkvd2l6YXJkL1ByaXZhdGVVRERJUmVnaXN0cnlUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVkZGlyZWdpc3RyeS53aXphcmQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZzsKLQotCi1wdWJsaWMgaW50ZXJmYWNlIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlIGV4dGVuZHMgQ29tbWFuZFdpZGdldEJpbmRpbmcKLXsKLSAgLy8gb3BlcmF0aW9uIHR5cGVzCi0gIHB1YmxpYyBzdGF0aWMgYnl0ZSBPUF9ERVBMT1kgPSAweDA7Ci0gIHB1YmxpYyBzdGF0aWMgYnl0ZSBPUF9VUERBVEUgPSAweDE7Ci0gIHB1YmxpYyBzdGF0aWMgYnl0ZSBPUF9SRU1PVkUgPSAweDI7Ci0KLSAgLy8gZ2VuZXJhbCBpbmZvcm1hdGlvbgotICBwdWJsaWMgU3RyaW5nIGdldElEKCk7Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpOwotICBwdWJsaWMgYm9vbGVhbiBpc1ByaXZhdGVVRERJUmVnaXN0cnlJbnN0YWxsZWQoKTsKLSAgcHVibGljIElTdGF0dXMgZ2V0T3BlcmF0aW9uU3RhdHVzKGJ5dGUgb3BlcmF0aW9uKTsKLQotICAvLyByZWdpc3RyeSBVUkxzCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5xdWlyeUFQSSgpOwotICBwdWJsaWMgU3RyaW5nIGdldFB1Ymxpc2hBUEkoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VkZGlyZWdpc3RyeS93aXphcmQvUHJpdmF0ZVVERElSZWdpc3RyeVR5cGVJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91ZGRpcmVnaXN0cnkvd2l6YXJkL1ByaXZhdGVVRERJUmVnaXN0cnlUeXBlSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTJkYmZmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VkZGlyZWdpc3RyeS93aXphcmQvUHJpdmF0ZVVERElSZWdpc3RyeVR5cGVJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWRkaXJlZ2lzdHJ5LndpemFyZDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51ZGRpcmVnaXN0cnkud2lkZ2V0cy5iaW5kaW5nLlByaXZhdGVVRERJV2lkZ2V0QmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZzsKLQotCi1wdWJsaWMgY2xhc3MgUHJpdmF0ZVVERElSZWdpc3RyeVR5cGVJbXBsIGltcGxlbWVudHMgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLnVkZGkuUHJpdmF0ZVVERElSZWdpc3RyeVR5cGUKLXsKLSAgICBwdWJsaWMgUHJpdmF0ZVVERElSZWdpc3RyeVR5cGVJbXBsKCkgewotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGlzUHJpdmF0ZVVERElSZWdpc3RyeUluc3RhbGxlZCgpIHsKLSAgICAgICAgUHJpdmF0ZVVERElSZWdpc3RyeVR5cGVbXSB0eXBlcyA9IFByaXZhdGVVRERJUmVnaXN0cnlUeXBlUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKS5nZXRUeXBlcygpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAodHlwZXNbaV0uaXNQcml2YXRlVURESVJlZ2lzdHJ5SW5zdGFsbGVkKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRQcml2YXRlVURESVJlZ2lzdHJ5SW5xdWlyeUFQSSgpIHsKLSAgICAgICAgVmVjdG9yIGlucXVpcnlBUElWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlW10gdHlwZXMgPSBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZVJlZ2lzdHJ5LmdldEluc3RhbmNlKCkuZ2V0VHlwZXMoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgaWYgKHR5cGVzW2ldLmlzUHJpdmF0ZVVERElSZWdpc3RyeUluc3RhbGxlZCgpKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGlucXVpcnlBUEkgPSB0eXBlc1tpXS5nZXRJbnF1aXJ5QVBJKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGlucXVpcnlBUEkgIT0gbnVsbCAmJiBpbnF1aXJ5QVBJLnN0YXJ0c1dpdGgoImh0dHAiKSkKLSAgICAgICAgICAgICAgICAgICAgaW5xdWlyeUFQSVZlY3Rvci5hZGQoaW5xdWlyeUFQSSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmdbXSBpbnF1aXJ5QVBJQXJyYXkgPSBuZXcgU3RyaW5nW2lucXVpcnlBUElWZWN0b3Iuc2l6ZSgpXTsKLSAgICAgICAgRW51bWVyYXRpb24gZSA9IGlucXVpcnlBUElWZWN0b3IuZWxlbWVudHMoKTsKLSAgICAgICAgaW50IGogPSAwOwotICAgICAgICB3aGlsZShlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICAgICAgICBpbnF1aXJ5QVBJQXJyYXlbal0gPSAoU3RyaW5nKWUubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgICAgIGorKzsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gaW5xdWlyeUFQSUFycmF5OwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRQcml2YXRlVURESVJlZ2lzdHJ5UHVibGlzaEFQSSgpIHsKLSAgICAgICAgVmVjdG9yIHB1Ymxpc2hBUElWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlW10gdHlwZXMgPSBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZVJlZ2lzdHJ5LmdldEluc3RhbmNlKCkuZ2V0VHlwZXMoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgaWYgKHR5cGVzW2ldLmlzUHJpdmF0ZVVERElSZWdpc3RyeUluc3RhbGxlZCgpKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHB1Ymxpc2hBUEkgPSB0eXBlc1tpXS5nZXRQdWJsaXNoQVBJKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHB1Ymxpc2hBUEkgIT0gbnVsbCAmJiBwdWJsaXNoQVBJLnN0YXJ0c1dpdGgoImh0dHAiKSkKLSAgICAgICAgICAgICAgICAgICAgcHVibGlzaEFQSVZlY3Rvci5hZGQocHVibGlzaEFQSSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmdbXSBwdWJsaXNoQVBJQXJyYXkgPSBuZXcgU3RyaW5nW3B1Ymxpc2hBUElWZWN0b3Iuc2l6ZSgpXTsKLSAgICAgICAgRW51bWVyYXRpb24gZSA9IHB1Ymxpc2hBUElWZWN0b3IuZWxlbWVudHMoKTsKLSAgICAgICAgaW50IGogPSAwOwotICAgICAgICB3aGlsZShlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICAgICAgICBwdWJsaXNoQVBJQXJyYXlbal0gPSAoU3RyaW5nKWUubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgICAgIGorKzsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcHVibGlzaEFQSUFycmF5OwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgQ29tbWFuZFdpZGdldEJpbmRpbmcgZ2V0QmluZGluZygpCi0gICAgewotICAgICAgcmV0dXJuIG5ldyBQcml2YXRlVURESVdpZGdldEJpbmRpbmcoKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91ZGRpcmVnaXN0cnkvd2l6YXJkL1ByaXZhdGVVRERJUmVnaXN0cnlUeXBlUmVnaXN0cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VkZGlyZWdpc3RyeS93aXphcmQvUHJpdmF0ZVVERElSZWdpc3RyeVR5cGVSZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNzU1MTBlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVkZGlyZWdpc3RyeS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VkZGlyZWdpc3RyeS93aXphcmQvUHJpdmF0ZVVERElSZWdpc3RyeVR5cGVSZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIxNiAgIDEyNzEzOCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWRkaXJlZ2lzdHJ5LndpemFyZDsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBjb20uaWJtLmljdS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLQotcHVibGljIGNsYXNzIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlUmVnaXN0cnkgewotCi0gICAgcHJpdmF0ZSBzdGF0aWMgUHJpdmF0ZVVERElSZWdpc3RyeVR5cGVSZWdpc3RyeSBpbnN0YW5jZV87Ci0gICAgcHJpdmF0ZSBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBjb25maWdFbGVtZW50c187Ci0KLSAgICBwcml2YXRlIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlUmVnaXN0cnkoKSB7Ci0gICAgfQotICAKLSAgICAvKioKLSAgICAqIFJldHVybnMgYSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcy4KLSAgICAqIEByZXR1cm4gQSBzaW5nbGV0b24gV2ViU2VydmljZUNsaWVudFR5cGVSZWdpc3RyeSBvYmplY3QuCi0gICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlUmVnaXN0cnkgZ2V0SW5zdGFuY2UoKSB7Ci0gICAgICAgIGlmIChpbnN0YW5jZV8gPT0gbnVsbCkgewotICAgICAgICAgICAgaW5zdGFuY2VfID0gbmV3IFByaXZhdGVVRERJUmVnaXN0cnlUeXBlUmVnaXN0cnkoKTsKLSAgICAgICAgICAgIGluc3RhbmNlXy5nZXRDb25maWdFbGVtZW50cygpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBpbnN0YW5jZV87Ci0gICAgfQotICAKLSAgICBwdWJsaWMgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gZ2V0Q29uZmlnRWxlbWVudHMoKSB7Ci0gICAgICAgIElFeHRlbnNpb25SZWdpc3RyeSByZWcgPSBQbGF0Zm9ybS5nZXRFeHRlbnNpb25SZWdpc3RyeSgpOwotICAgICAgICBjb25maWdFbGVtZW50c18gPSByZWcuZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzRm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcmcuZWNsaXBzZS5qc3Qud3MudWRkaXJlZ2lzdHJ5IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJpdmF0ZVVERElSZWdpc3RyeVR5cGUiKTsKLSAgICAgICAgVmVjdG9yIHYgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29uZmlnRWxlbWVudHNfLmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgaW50IHdlaWdodCA9IGdldFdlaWdodChjb25maWdFbGVtZW50c19baV0pOwotICAgICAgICAgIGludCBpbmRleCA9IC0xOwotICAgICAgICAgIGZvciAoaW50IGogPSB2LnNpemUoKS0xOyBqID49IDA7IGotLSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAod2VpZ2h0ID4gZ2V0V2VpZ2h0KChJQ29uZmlndXJhdGlvbkVsZW1lbnQpdi5nZXQoaikpKQotICAgICAgICAgICAgICBpbmRleCA9IGo7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoaW5kZXggIT0gLTEpCi0gICAgICAgICAgICB2LmFkZChpbmRleCwgY29uZmlnRWxlbWVudHNfW2ldKTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB2LmFkZChjb25maWdFbGVtZW50c19baV0pOwotICAgICAgICB9Ci0gICAgICAgIHYuY29weUludG8oY29uZmlnRWxlbWVudHNfKTsKLSAgICAgICAgcmV0dXJuIGNvbmZpZ0VsZW1lbnRzXzsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGludCBnZXRXZWlnaHQoSUNvbmZpZ3VyYXRpb25FbGVtZW50IGUpCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIHJldHVybiBJbnRlZ2VyLnBhcnNlSW50KGUuZ2V0QXR0cmlidXRlKCJ3ZWlnaHQiKSk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGdldENvbmZpZ0VsZW1lbnRCeUlEKFN0cmluZyBpZCkgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8Y29uZmlnRWxlbWVudHNfLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoY29uZmlnRWxlbWVudHNfW2ldLmdldEF0dHJpYnV0ZSgiaWQiKS5lcXVhbHMoaWQpKQotICAgICAgICAgICAgICAgIHJldHVybiBjb25maWdFbGVtZW50c19baV07Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlW10gZ2V0VHlwZXMoKSB7Ci0gICAgICAgIFZlY3RvciB0eXBlcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb25maWdFbGVtZW50c18ubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgT2JqZWN0IHR5cGVPYmogPSBjb25maWdFbGVtZW50c19baV0uY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbigiY2xhc3MiKTsKLSAgICAgICAgICAgICAgICBpZiAodHlwZU9iaiBpbnN0YW5jZW9mIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlKQotICAgICAgICAgICAgICAgICAgICB0eXBlcy5hZGQodHlwZU9iaik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9Ci0gICAgICAgIH0KLQotICAgICAgICBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZVtdIHR5cGVzQXJyYXkgPSBuZXcgUHJpdmF0ZVVERElSZWdpc3RyeVR5cGVbdHlwZXMuc2l6ZSgpXTsKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCB0eXBlcy5zaXplKCk7IGorKykgewotICAgICAgICAgICAgdHlwZXNBcnJheVtqXSA9IChQcml2YXRlVURESVJlZ2lzdHJ5VHlwZSl0eXBlcy5lbGVtZW50QXQoaik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHR5cGVzQXJyYXk7Ci0gICAgfQotCi0gICAgcHVibGljIFByaXZhdGVVRERJUmVnaXN0cnlUeXBlIGdldFR5cGVCeUlEKFN0cmluZyBpZCkgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgT2JqZWN0IHR5cGVPYmogPSBnZXRDb25maWdFbGVtZW50QnlJRChpZCkuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbigiY2xhc3MiKTsKLSAgICAgICAgICAgIGlmICh0eXBlT2JqIGluc3RhbmNlb2YgUHJpdmF0ZVVERElSZWdpc3RyeVR5cGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIChQcml2YXRlVURESVJlZ2lzdHJ5VHlwZSl0eXBlT2JqOyAKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRTdXBwb3J0ZWRTZXJ2ZXJGYWN0b3J5SURCeUlEKFN0cmluZyBpZCkgewotICAgICAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnQgY29uZmlnRWxlbWVudCA9IGdldENvbmZpZ0VsZW1lbnRCeUlEKGlkKTsKLSAgICAgICAgaWYgKGNvbmZpZ0VsZW1lbnQgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBuZXcgU3RyaW5nWzBdOwotICAgICAgICBWZWN0b3IgaWRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoY29uZmlnRWxlbWVudC5nZXRBdHRyaWJ1dGUoInNlcnZlckZhY3RvcnlJRCIpLCAiLCIpOwotICAgICAgICB3aGlsZSAoc3QuaGFzTW9yZVRva2VucygpKSB7Ci0gICAgICAgICAgICBpZFZlY3Rvci5hZGQoc3QubmV4dFRva2VuKCkpOwotICAgICAgICB9Ci0gICAgICAgIFN0cmluZ1tdIGlkcyA9IG5ldyBTdHJpbmdbaWRWZWN0b3Iuc2l6ZSgpXTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpZFZlY3Rvci5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgaWRzW2ldID0gKFN0cmluZylpZFZlY3Rvci5lbGVtZW50QXQoaSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGlkczsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpLy5jbGFzc3BhdGggYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjE2NWVjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYy8iLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZGVmZmU1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLWJpbgotYnVpbGQueG1sCi10ZW1wLmZvbGRlcgotd3MtdWkuamFyCi1AZG90Ci1zcmMuemlwCi1qYXZhQ29tcGlsZXIuLi5hcmdzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS8ucHJvamVjdCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDAxNjY5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanN0LndzLnVpPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWYyYTViZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0jTW9uIEphbiAzMCAxMDozNzowNyBFU1QgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmNmZlYTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSNNb24gSmFuIDMwIDEwOjQwOjQ1IEVTVCAyMDA2Ci1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0xCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0xCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjUxZjAwZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVQTFVHSU5fTkFNRQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuanN0LndzLnVpOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMzAyLnF1YWxpZmllcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLnBsdWdpbi5XZWJTZXJ2aWNlVUlQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVQTFVHSU5fUFJPVklERVIKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5hY3Rpb247eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuY29tbW9uO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLmRpYWxvZzt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5wbHVnaW47eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkucHJlZmVyZW5jZXM7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkudWRkaTt4LWludGVybmFsOj10cnVlCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52O2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS5qc3Qud3M7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamR0LmNvcmU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmpkdC51aTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UudWkuaWRlO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS51aTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcztidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDMuNC4wKSIsCi0gb3JnLmVjbGlwc2UuZW1mLmVjb3JlO2J1bmRsZS12ZXJzaW9uPSJbMi4yLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZW0udXRpbDtidW5kbGUtdmVyc2lvbj0iWzIuMC4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMiwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC5qMmVlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXI7YnVuZGxlLXZlcnNpb249IlsxLjAuMjA0LDEuMS4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LmoyZWUuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53cy51aTtidW5kbGUtdmVyc2lvbj0iWzEuMC4yMDIsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbDtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL2Fib3V0Lmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2RiMzZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lIDA2LCAyMDA3PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL2J1aWxkLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMWRlYzMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLXNvdXJjZS4uID0gc3JjLwotYmluLmluY2x1ZGVzID0gLixcCi0gICAgICAgICAgICAgICBpY29ucy8sXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvaWNvbnMvamFyX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9pY29ucy9qYXJfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTUyZjRmMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9pY29ucy9qYXJfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3BsdWdpbi5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxZDAyYTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgTWVzc2FnZXMgaW4gcGx1Z2luLnhtbC4KLSMKLVBMVUdJTl9OQU1FPVdlYiBTZXJ2aWNlcyBHcmFwaGljYWwgVXNlciBJbnRlcmZhY2UKLVBMVUdJTl9QUk9WSURFUj1FY2xpcHNlLm9yZwotCi1QTFVHSU5fTkVXX0NBVEVHT1JZX05BTUVfV1M9V2ViIFNlcnZpY2VzCi0KLSMKLSMJV2ViIFNlcnZpY2VzIFByZWZlcmFuY2UgUGFnZXMKLSMKLSMgQ2F0ZWdvcmllcwotUFJFRkVSRU5DRV9DQVRFR09SWV9SRVNPVVJDRV9NQU5BR0VNRU5UPVJlc291cmNlIE1hbmFnZW1lbnQKLQotIwotIyAgV1MtSSBQcmVmZXJlbmNlIHBhZ2VzCi0jCi0jIFdTLUkgQ29tcGxpYW5jZSBQYWdlCi0jCi1QUkVGRVJFTkNFX0NBVEVHT1JZX1dTST1XUy1JIENvbXBsaWFuY2UKLQotIwotIyBQb3B1cCBhY3Rpb24gQ2F0ZWdvcnkKLSMKLUxBQkVMX1BPUFVQX0NBVEVHT1JZX1dFQl9TRVJWSUNFUz1XZWIgU2VydmljZXMKLQotIwotIyBNZXNzYWdlcyBmb3IgcG9wdXAgYWN0aW9uIChUZXN0IHdpdGggV2ViIFNlcnZpY2VzIEV4cGxvcmVyKQotIwotUE9QVVBfVEVTVF9XU0RMPVRlc3Qgd2l0aCBXZWIgU2VydmljZXMgRXhwbG9yZXIKLQotCi0KLQotCi0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvcGx1Z2luLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2N2IxYjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci0KLTxwbHVnaW4+Ci0KLSAgICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLm5ld1dpemFyZHMiPgotICAgICAgPGNhdGVnb3J5Ci0gICAgICAgICAgICBuYW1lPSIlUExVR0lOX05FV19DQVRFR09SWV9OQU1FX1dTIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy51aS5uZXciPgotICAgICAgPC9jYXRlZ29yeT4KLSAgIDwvZXh0ZW5zaW9uPgotCi0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkucHJlZmVyZW5jZVBhZ2VzIj4KLSAgICAgIAotICAgICAgPHBhZ2UKLSAgICAgICAgICAgIG5hbWU9IiVQUkVGRVJFTkNFX0NBVEVHT1JZX1JFU09VUkNFX01BTkFHRU1FTlQiCi0gICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLnByZWZlcmVuY2VzLm5hbWUiCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLnByZWZlcmVuY2VzLlJlc291cmNlTWFuYWdtZW50UHJlZmVyZW5jZVBhZ2UiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLnByZWZlcmVuY2VzLlJlc291cmNlTWFuYWdtZW50UHJlZmVyZW5jZVBhZ2UiPgotICAgICAgPC9wYWdlPgotCi0gICA8L2V4dGVuc2lvbj4KLQotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnByb3BlcnR5UGFnZXMiPgotCi0gICAgICAKLQotICAgPC9leHRlbnNpb24+Ci0KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wb3B1cE1lbnVzIj4KLQotICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmpzdC5qMmVlLmVqYi5FbnRlcnByaXNlQmVhbiIKLSAgICAgICAgICAgIGFkYXB0YWJsZT0idHJ1ZSIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuYXRrLnVpLndlYnNlcnZpY2UuY2F0ZWdvcnkuZWpiLnBvcHVwTWVudSI+Ci0gICAgICAgICA8bWVudQotICAgICAgICAgICAgICAgbGFiZWw9IiVMQUJFTF9QT1BVUF9DQVRFR09SWV9XRUJfU0VSVklDRVMiCi0gICAgICAgICAgICAgICBwYXRoPSJhZGRpdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmF0ay51aS53ZWJzZXJ2aWNlLmNhdGVnb3J5LmVqYi5wb3B1cE1lbnUiPgotICAgICAgICAgICAgPHNlcGFyYXRvcgotICAgICAgICAgICAgICAgICAgbmFtZT0icG9wdXBBY3Rpb25zIj4KLSAgICAgICAgICAgIDwvc2VwYXJhdG9yPgotICAgICAgICAgPC9tZW51PgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0gICAgICAKLQotICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NjbGllbnQuU2VydmljZVJlZiIKLSAgICAgICAgICAgIG5hbWVGaWx0ZXI9IioiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmFjdGlvbi5XU0RMRmlsZU1lbnUiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVQT1BVUF9URVNUX1dTREwiCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLnBvcHVwLlBvcHVwVGVzdFNlcnZpY2UiCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0iYWRkaXRpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5wb3B1cC5Qb3B1cFRlc3RTZXJ2aWNlIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIAotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL1dTVUlQbHVnaW4ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvV1NVSVBsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOWY2ZjJmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvV1NVSVBsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTE2ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotIyAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyAyMDA2MDIyNyAgIDEyNDM5MiByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSMgMjAwNjAzMjkgICAxMjg4Mjcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSMgMjAwNjAzMjkgICAxMjQ2Njcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSMgMjAwNjAzMzEgICAxMjg4Mjcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIwotIyBNZXNzYWdlcyBpbiBwbHVnaW4ueG1sLgotIwotUExVR0lOX05BTUU9V2ViIFNlcnZpY2VzIEdyYXBoaWNhbCBVc2VyIEludGVyZmFjZQotUExVR0lOX1ZFTkRPUj1FY2xpcHNlLm9yZwotUExVR0lOX0RFU0M9XAotVGhlIFdlYiBzZXJ2aWNlcyBHVUkgcGx1Z2luIGRlbGl2ZXJzIHRoZSBncmFwaGljYWwgXAotdXNlciBpbnRlcmZhY2UgdG8gdGhlIFdlYiBzZXJ2aWNlcyBmdW5jdGlvbiBvZiB0aGUgXAotV2ViIHNlcnZpY2VzIHBsdWdpbi4KLQotUExVR0lOX05FV19DQVRFR09SWV9OQU1FX1dTPVdlYiBTZXJ2aWNlcwotCi0jCi0jCVdlYiBTZXJ2aWNlcyBQcmVmZXJhbmNlIFBhZ2VzCi0jCi0jIENhdGVnb3JpZXMKLVBSRUZFUkVOQ0VfQ0FURUdPUllfUkVTT1VSQ0VfTUFOQUdFTUVOVD1SZXNvdXJjZSBNYW5hZ2VtZW50Ci1QUkVGRVJFTkNFX0NBVEVHT1JZX0NPREVfR0VORVJBVElPTj1Db2RlIEdlbmVyYXRpb24KLVBSRUZFUkVOQ0VfQ0FURUdPUllfU0NFTkFSSU9fREVGQVVMVFM9U2NlbmFyaW8gRGVmYXVsdHMKLVBSRUZFUkVOQ0VfQ0FURUdPUllfUFJPSkVDVF9UT1BPTE9HWT1Qcm9qZWN0IFRvcG9sb2d5Ci1QUkVGRVJFTkNFX0NBVEVHT1JZX0RSSVZFUl9KQVJTPUpEQkMgZHJpdmVycwotCi0jCi0jU2NlbmFyaW8gRGVmYXVsdHMKLUJVVFRPTl9MQVVOQ0hfU0FNUExFPSZMYXVuY2ggdGhlIHNhbXBsZSB3aGVuIGdlbmVyYXRlZAotTEFCRUxfTU9WRV9VUD1Nb3ZlICZ1cAotTEFCRUxfTU9WRV9ET1dOPU1vdmUgJmRvd24KLUxBQkVMX01PVkVfVVBfMj1Nb3ZlIHUmcAotTEFCRUxfTU9WRV9ET1dOXzI9TW92ZSBkb3cmbgotCi0jCi0jIFByZWZlcmVuY2VzIFRvb2x0aXBzCi0jCi0KLSNTY2VuYXJpbyBEZWZhdWx0cwotVE9PTFRJUF9QUFNEX1BBR0U9U2V0IHRoZSBkZWZhdWx0cyBmb3IgdGhlIFdlYiBzZXJ2aWNlIHNjZW5hcmlvcy4KLVRPT0xUSVBfUFBTRF9DSEVDS0JPWF9MQVVOQ0hfU0FNUExFPUxhdW5jaCB0aGUgc2FtcGxlIGFwcGxpY2F0aW9uIGFmdGVyIGdlbmVyYXRpb24uCi1UT09MVElQX1NFUlZJQ0VfVFlQRV9UQUJMRV9WSUVXRVI9UHJlZmVycmVkIG9yZGVyIG9mIHRoZSBsaXN0IG9mIHNlcnZpY2UgcHJvamVjdCB0eXBlcwotVE9PTFRJUF9DTElFTlRfVFlQRV9UQUJMRV9WSUVXRVI9UHJlZmVycmVkIG9yZGVyIG9mIHRoZSBsaXN0IG9mIGNsaWVudCBwcm9qZWN0IHR5cGVzCi1UT09MVElQX01PVkVfVVA9TW92ZSB0aGUgc2VsZWN0ZWQgcHJvamVjdCB0eXBlIHVwIHRoZSBsaXN0Ci1UT09MVElQX01PVkVfRE9XTj1Nb3ZlIHRoZSBzZWxlY3RlZCBwcm9qZWN0IHR5cGUgZG93biB0aGUgbGlzdAotCi0jCi0jIFJlc291cmNlIE1hbmFnbWVudAotVE9PTFRJUF9QUFJNX1BBR0U9U2V0IHByZWZlcmVuY2VzIHRoYXQgY29udHJvbCByZXNvdXJjZXMgdXNlZC9nZW5lcmF0ZWQgYnkgdGhlIFdlYiBzZXJ2aWNlLgotVE9PTFRJUF9QUFJNX0NIRUNLQk9YX09WRVJXUklURV9GSUxFUz1PdmVyd3JpdGUgZmlsZXMgd2l0aG91dCB3YXJuaW5nLgotVE9PTFRJUF9QUFJNX0NIRUNLQk9YX0NSRUFURV9GT0xERVJTPUNyZWF0ZSBmb2xkZXJzIHdoZW4gbmVjZXNzYXJ5LgotVE9PTFRJUF9QUFJNX0NIRUNLQk9YX0NIRUNLX09VVD1DaGVjayBvdXQgZmlsZXMgd2l0aG91dCB3YXJuaW5nLgotVE9PTFRJUF9QUFJNX0NIRUNLQk9YX1NLRUxFVE9OX01FUkdFPUVuYWJsZSBtZXJnaW5nIG9mIGdlbmVyYXRlZCBza2VsZXRvbiBmaWxlLgotQlVUVE9OX0NSRUFURV9GT0xERVJTPSZDcmVhdGUgZm9sZGVycyB3aGVuIG5lY2Vzc2FyeQotQlVUVE9OX09WRVJXUklURV9GSUxFUz0mT3ZlcndyaXRlIGZpbGVzIHdpdGhvdXQgd2FybmluZwotQlVUVE9OX0NIRUNLT1VUX0ZJTEVTPUMmaGVjayBvdXQgZmlsZXMgd2l0aG91dCB3YXJuaW5nCi1CVVRUT05fU0tFTEVUT05fTUVSR0U9Jk1lcmdlIGdlbmVyYXRlZCBza2VsZXRvbiBmaWxlLgotCi0jCi0jIEdlbmVyYWwgbWVzc2FnZXMuCi0jCi1JU1RBVFVTX1dJVEhPVVRfRVhDRVBUSU9OPXswfQotSVNUQVRVU19XSVRIX0VYQ0VQVElPTj17MH1cbkV4Y2VwdGlvbjogezF9Ci1NU0dfSU5GT19TQVZFRF9TVEFUVVM9SVdBQjAyOTdJIFByZXNzIHRoZSBEZXRhaWxzIGJ1dHRvbiB0byBzZWUgaW5mb3JtYXRpb25hbCBtZXNzYWdlcy4KLQotIwotIyBUeXBlU2VsZWN0aW9uRGlhbG9nCi0jCi1ESUFMT0dfVElUTEVfQ0xBU1NfQlJPV1NFPUJyb3dzZSBDbGFzc2VzCi1ESUFMT0dfVElUTEVfSU5URVJGQUNFX0JST1dTRT1Ccm93c2UgSW50ZXJmYWNlcwotCi0jCi0jIENvbW1vbiB3aXphcmQgc3RyaW5ncy4KLSMKLUxBQkVMX1NBTVBMRV9UWVBFUz1KYXZhIHByb3h5IHNhbXBsZQotCi0jCi0jIFJlc291cmNlU2VsZWN0aW9uRGlhbG9nCi0jCi1ESUFMT0dfVElUTEVfUkVTT1VSQ0VfQlJPV1NFPUJyb3dzZSBGaWxlcwotTEFCRUxfUkVTT1VSQ0VfRklMVEVSPUZpbHRlcjoKLQotIwotIyBUb29sdGlwcyBmb3IgZGlhbG9nLlJlc291cmNlU2VsZWN0aW9uRGlhbG9nCi0jIERSRVM9RGlhbG9nL1JFU291cmNlcwotIwotVE9PTFRJUF9EUkVTX0NPTUJPX1JFU09VUkNFX1RZUEU9VHlwZSBvZiByZXNvdXJjZXMgdG8gYnJvd3NlLgotVE9PTFRJUF9EUkVTX1RSRUVfUkVTT1VSQ0U9UmVzb3VyY2VzIGF2YWlsYWJsZSBmb3Igc2VsZWN0aW9uLgotCi0jCi0jIE1lc3NhZ2VzIGZvciBwcm9qZWN0IHRvcG9sb2d5IHByZWZlcmVuY2UgcGFnZQotIwotVE9PTFRJUF9QVFBQX1BBR0U9UHJlZmVyZW5jZSB0aGF0IGNvbnRyb2wgdGhlIHByb2plY3QgdG9wb2xvZ3kgb2YgeW91ciBXZWIgc2VydmljZSBhbmQgY2xpZW50IHNjZW5hcmlvcy4KLVRPT0xUSVBfRU5BQkxFX1RXT19FQVJTPUVuYWJsZSB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBnZW5lcmF0ZSB5b3VyIFdlYiBzZXJ2aWNlIGFuZCBXZWIgc2VydmljZSBjbGllbnQgaW4gZGlmZmVyZW50IEVBUiBwcm9qZWN0cy4KLQotTEFCRUxfRU5BQkxFX1RXT19FQVJTPSZHZW5lcmF0ZSBXZWIgc2VydmljZSBhbmQgV2ViIHNlcnZpY2UgY2xpZW50IGluIGRpZmZlcmVudCBFQVIgcHJvamVjdHMKLUxBQkVMX0NMSUVOVF9UWVBFX05BTUU9Q2xpZW50IHByb2plY3QgdHlwZXMKLUxBQkVMX1NFUlZJQ0VfVFlQRV9OQU1FPVNlcnZpY2UgcHJvamVjdCB0eXBlcwotIwotIyBSZXNvdXJjZSBCcm93c2VyCi0jCi1ESUFMT0dfVElUTEVfUkVTT1VSQ0VfQlJPV1NFUj1SZXNvdXJjZSBicm93c2VyCi1UT09MVElQX1JFU09VUkNFX1RSRUU9Q2hvb3NlIGEgcmVzb3VyY2UuCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL1dTVUlQbHVnaW5NZXNzYWdlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9XU1VJUGx1Z2luTWVzc2FnZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjVmYjhmNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL1dTVUlQbHVnaW5NZXNzYWdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjI3ICAgMTI0MzkyIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjAzMjkgICAxMjg4Mjcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwMzI5ICAgMTI0NjY3IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDMzMSAgIDEyODgyNyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA1MTUgICAxNDEzOTggY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotCi1wdWJsaWMgZmluYWwgY2xhc3MgV1NVSVBsdWdpbk1lc3NhZ2VzIGV4dGVuZHMgTkxTIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuV1NVSVBsdWdpbiI7Ly8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBXU1VJUGx1Z2luTWVzc2FnZXMoKSB7Ci0JCS8vIERvIG5vdCBpbnN0YW50aWF0ZQotCX0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBMVUdJTl9OQU1FOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBMVUdJTl9WRU5ET1I7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUExVR0lOX0RFU0M7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUExVR0lOX05FV19DQVRFR09SWV9OQU1FX1dTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBSRUZFUkVOQ0VfQ0FURUdPUllfUkVTT1VSQ0VfTUFOQUdFTUVOVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQUkVGRVJFTkNFX0NBVEVHT1JZX0NPREVfR0VORVJBVElPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQUkVGRVJFTkNFX0NBVEVHT1JZX1NDRU5BUklPX0RFRkFVTFRTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBSRUZFUkVOQ0VfQ0FURUdPUllfUFJPSkVDVF9UT1BPTE9HWTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQUkVGRVJFTkNFX0NBVEVHT1JZX0RSSVZFUl9KQVJTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJVVFRPTl9MQVVOQ0hfU0FNUExFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX01PVkVfVVA7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfTU9WRV9ET1dOOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX01PVkVfVVBfMjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9NT1ZFX0RPV05fMjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BQU0RfUEFHRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BQU0RfQ0hFQ0tCT1hfTEFVTkNIX1NBTVBMRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX0NMSUVOVF9UWVBFX1RBQkxFX1ZJRVdFUjsKLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1NFUlZJQ0VfVFlQRV9UQUJMRV9WSUVXRVI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9NT1ZFX1VQOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfTU9WRV9ET1dOOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFBSTV9QQUdFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFBSTV9DSEVDS0JPWF9PVkVSV1JJVEVfRklMRVM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QUFJNX0NIRUNLQk9YX0NSRUFURV9GT0xERVJTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFBSTV9DSEVDS0JPWF9DSEVDS19PVVQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QUFJNX0NIRUNLQk9YX1NLRUxFVE9OX01FUkdFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJVVFRPTl9DUkVBVEVfRk9MREVSUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBCVVRUT05fT1ZFUldSSVRFX0ZJTEVTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJVVFRPTl9DSEVDS09VVF9GSUxFUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBCVVRUT05fU0tFTEVUT05fTUVSR0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSVNUQVRVU19XSVRIT1VUX0VYQ0VQVElPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJU1RBVFVTX1dJVEhfRVhDRVBUSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19JTkZPX1NBVkVEX1NUQVRVUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBESUFMT0dfVElUTEVfQ0xBU1NfQlJPV1NFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIERJQUxPR19USVRMRV9JTlRFUkZBQ0VfQlJPV1NFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1NBTVBMRV9UWVBFUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBESUFMT0dfVElUTEVfUkVTT1VSQ0VfQlJPV1NFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1JFU09VUkNFX0ZJTFRFUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX0RSRVNfQ09NQk9fUkVTT1VSQ0VfVFlQRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX0RSRVNfVFJFRV9SRVNPVVJDRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BUUFBfUEFHRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX0VOQUJMRV9UV09fRUFSUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9FTkFCTEVfVFdPX0VBUlM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfQ0xJRU5UX1RZUEVfTkFNRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBESUFMT0dfVElUTEVfUkVTT1VSQ0VfQlJPV1NFUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1JFU09VUkNFX1RSRUU7Ci0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfU0VSVklDRV9UWVBFX05BTUU7Ci0KLQlzdGF0aWMgewotCQlOTFMuaW5pdGlhbGl6ZU1lc3NhZ2VzKEJVTkRMRV9OQU1FLCBXU1VJUGx1Z2luTWVzc2FnZXMuY2xhc3MpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvYWN0aW9uL0xhdW5jaEltcG9ydFdpemFyZEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9hY3Rpb24vTGF1bmNoSW1wb3J0V2l6YXJkQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmN2NkN2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9hY3Rpb24vTGF1bmNoSW1wb3J0V2l6YXJkQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLmFjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmREaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkRlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuRHluYW1pY1dpemFyZDsKLQotCi0vKioKLSAqIFRoaXMgY2xhc3MgbGF1bmNoZXMgdGhlIGltcG9ydCB3aXphcmQuCi0gKi8KLXB1YmxpYyBjbGFzcyBMYXVuY2hJbXBvcnRXaXphcmRBY3Rpb24gaW1wbGVtZW50cyBJQWN0aW9uRGVsZWdhdGUKLXsKLSAgICBwcml2YXRlIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbl87Ci0gICAgCi0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkRlbGVnYXRlI3J1bihvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbikKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBydW4oSUFjdGlvbiBhY3Rpb24pIAotICAgIHsKLSAgICAgIER5bmFtaWNXaXphcmQgd2l6YXJkID0gbmV3IER5bmFtaWNXaXphcmQoKTsKLSAgICAgIAotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIHdpemFyZC5zZXRJbml0aWFsRGF0YSggIm9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53c2ltcG9ydCIgKTsKLSAgICAgICAgd2l6YXJkLmluaXQoIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCksIHNlbGVjdGlvbl8gKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoKCBDb3JlRXhjZXB0aW9uIGV4YyApCi0gICAgICB7Ci0gICAgICAgIC8vIERvIG5vdGhpbmcuCi0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIAotICAJICBXaXphcmREaWFsb2cgZGlhbG9nPSBuZXcgV2l6YXJkRGlhbG9nKFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0U2hlbGwoKSwgd2l6YXJkKTsKLQkgIGRpYWxvZy5zZXRQYWdlU2l6ZSggNTAwLCA0MDAgKTsKLQkgIGRpYWxvZy5jcmVhdGUoKTsKLQkgIGRpYWxvZy5vcGVuKCk7Ci0gICAgfQotICAgIAotICAgIC8qIChub24tSmF2YWRvYykKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklBY3Rpb25EZWxlZ2F0ZSNzZWxlY3Rpb25DaGFuZ2VkKG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uLCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb24pCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChJQWN0aW9uIGFjdGlvbiwgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIAotICAgIHsKLSAgICAgIGlmKCBzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbiApCi0gICAgICB7Ci0gICAgICAgIHNlbGVjdGlvbl8gPSAoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uOwotICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvYWN0aW9uL1dlYlNlcnZpY2VEZXBsb3kuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvYWN0aW9uL1dlYlNlcnZpY2VEZXBsb3kuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThkNDhiNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL2FjdGlvbi9XZWJTZXJ2aWNlRGVwbG95LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLmFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci0KLQotcHVibGljIGludGVyZmFjZSBXZWJTZXJ2aWNlRGVwbG95IHsKLQlwdWJsaWMgdm9pZCBydW4oSVJlc291cmNlIHNlbGVjdGlvbik7IAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9hY3Rpb24vV2ViU2VydmljZURlcGxveUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9hY3Rpb24vV2ViU2VydmljZURlcGxveUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDQ4OTczLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvYWN0aW9uL1dlYlNlcnZpY2VEZXBsb3lBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5hY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uU2VydmVyVXRpbHM7Ci0KLXB1YmxpYyBjbGFzcyBXZWJTZXJ2aWNlRGVwbG95QWN0aW9uIGV4dGVuZHMgV2luZG93QWN0aW9uRGVsZWdhdGUgewotcHVibGljIHZvaWQgcnVuKG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uIGFjdGlvbikgewotCi0gICBJUHJvamVjdCBwcm9qZWN0ID0gZ2V0U2VsZWN0ZWRSZXNvdXJjZVByb2plY3QoKTsKLQotICAgU3RyaW5nIFtdIHR5cGVJZHMgPSBTZXJ2ZXJVdGlscy5nZXRTZXJ2ZXJUeXBlSWRzQnlNb2R1bGUocHJvamVjdCk7Ci0gICBPYmplY3QgdGhlQWN0aW9uID0gbnVsbDsKLQotICAgSUV4dGVuc2lvblJlZ2lzdHJ5IHJlZyA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0gICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBlbGVtZW50cyA9IHJlZy5nZXRDb25maWd1cmF0aW9uRWxlbWVudHNGb3IoIm9yZy5lY2xpcHNlLmpzdC53cy51aSIsICJ3ZWJzZXJ2aWNlZGVwbG95Iik7Ci0gICB0cnkgewotICAgCQotICAgCWlmICh0eXBlSWRzID09IG51bGwgfHwgdHlwZUlkcy5sZW5ndGggPD0gMCkKLSAgIAl7Ci0gICAJIAkvLyB0aGF0IG1lYW5zIHRoZSBtb2R1bGUgaXMgbm90IGF0dGFjaGVkIHRvIGEgc2VydmVyIHRoZW4gcGljayB0aGUgZmlyc3QgZXh0ZW5zaW9uIGZvdW5kCi0gICAJICAgIHRoZUFjdGlvbiA9IGVsZW1lbnRzWzBdLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oImNsYXNzIik7Ci0gICAJfQotICAgCWVsc2UgaWYgKCB0eXBlSWRzLmxlbmd0aCA9PSAxKQotICAgCXsKLSAgIAkJLy8gdGhhdCBtZWFucyB0aGUgbW9kdWxlIGlzIGF0dGFjaGVkIHRvIG9uZSBzZXJ2ZXIgdGhlbiBmaW5kcyBpdCBpZCBhbmQgYSBtYXRjaGluIGV4dGVuc2lvbiBvciBnaXZlIGEgbWVzc2FnZQotICAgCQlmb3IgKGludCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKQotICAgICAgCXsKLQkJICAgCVN0cmluZyBpZCA9IGVsZW1lbnRzW2ldLmdldEF0dHJpYnV0ZSgiZmFjdG9yeUlkIik7Ci0gICAgCSAgIAlpZiAoIHR5cGVJZHNbMF0uZXF1YWxzKGlkKSkKLQkJICAgCXsKLQkJICAgCQl0aGVBY3Rpb24gPSBlbGVtZW50c1tpXS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKCJjbGFzcyIpOwotCQkgICAJCWJyZWFrOwotCQkgICAJfQotICAgCQl9Ci0gICAJCWlmICh0aGVBY3Rpb24gPT0gbnVsbCApCi0gICAJCQl7Ci0gICAJCQkJLy8gZ2l2ZSBhIG1lc3NhZ2UKLSAgIAkJCX0KLSAgIAl9Ci0gICAJZWxzZQotICAgCXsKLQkJLy8gVGhlIG1vZHVsZSBpcyBhdHRhY2hlZCB0byBtb3JlIHRoYW4gb25lIHNlcnZlciBmaW5kIHRoZSBmaXJzdCBzZXJ2ZXItZXh0ZW5zaW9uIGNvdXBsZQotCQkvLyBUQkQ6IGFkZCBhIGRpYWxvZyB0byBjaG9vc2UgdGhlIHNlcnZlciBmb3IgZGVwbG95bWVudAotCQlmb3IgKGludCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKQotICAgICAgCXsKLQkJICAgCVN0cmluZyBpZCA9IGVsZW1lbnRzW2ldLmdldEF0dHJpYnV0ZSgiZmFjdG9yeUlkIik7Ci0JCSAgIAlmb3IgKCBpbnQgaz0wOyBrPCB0eXBlSWRzLmxlbmd0aDsgaysrKQotCQkgICAJewotICAgIAkgICAJCWlmICggdHlwZUlkc1trXS5lcXVhbHMoaWQpKQotCQkgICAJCXsKLQkJICAgCQkJdGhlQWN0aW9uID0gZWxlbWVudHNbaV0uY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbigiY2xhc3MiKTsKLQkJICAgCQkJYnJlYWs7Ci0JCSAgIAkJfQotCQkgICAJfQotCQkgICBpZiAodGhlQWN0aW9uICE9IG51bGwpIGJyZWFrOwotICAgCQkgfQotCQlpZiAodGhlQWN0aW9uID09IG51bGwpIAotCQkJewotCQkJCS8vIGdpdmUgYSBNZXNzYWdlCi0JCQl9Ci0gICAJfQotCi0gICAgaWYgKHRoZUFjdGlvbiBpbnN0YW5jZW9mIFdlYlNlcnZpY2VEZXBsb3kpCi0gICAgICAgICAgKChXZWJTZXJ2aWNlRGVwbG95KXRoZUFjdGlvbikucnVuKHByb2plY3QpOyAgIAotICB9Ci0KLSAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQotfSAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvYWN0aW9uL1dpbmRvd0FjdGlvbkRlbGVnYXRlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL2FjdGlvbi9XaW5kb3dBY3Rpb25EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOGQ1MTJiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvYWN0aW9uL1dpbmRvd0FjdGlvbkRlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuYWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklDb21waWxhdGlvblVuaXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvd0FjdGlvbkRlbGVnYXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotCi0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBXaW5kb3dBY3Rpb25EZWxlZ2F0ZSBpbXBsZW1lbnRzIElXb3JrYmVuY2hXaW5kb3dBY3Rpb25EZWxlZ2F0ZSB7Ci1wcm90ZWN0ZWQgSVN0cnVjdHVyZWRTZWxlY3Rpb24gZlNlbGVjdGlvbjsKLQotcHVibGljIFdpbmRvd0FjdGlvbkRlbGVnYXRlKCkgewotICAgIHN1cGVyKCk7Ci0gfQotCi1wdWJsaWMgdm9pZCBkaXNwb3NlKCkgCi0gewotIH0KLQotcHVibGljIHZvaWQgaW5pdChvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93IHdpbmRvdykgeyB9Ci0KLXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQob3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb24gYWN0aW9uLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKLSAgIGlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgZlNlbGVjdGlvbiA9IChJU3RydWN0dXJlZFNlbGVjdGlvbikgc2VsZWN0aW9uOwotIH0KLQotcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikgewotCWZTZWxlY3Rpb24gPSBzZWxlY3Rpb247Ci19Ci1wdWJsaWMgSVN0cnVjdHVyZWRTZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCkgewotCXJldHVybiBmU2VsZWN0aW9uOwotfQotCi1wdWJsaWMgSVByb2plY3QgZ2V0U2VsZWN0ZWRSZXNvdXJjZVByb2plY3QoKSB7Ci0gSVByb2plY3QgcHJvamVjdCA9IG51bGw7Ci0gSVJlc291cmNlIHJlc291cmNlXyA9IG51bGw7Ci0gICB0cnkgewotICAgCQlpZiAoZlNlbGVjdGlvbiAhPSBudWxsICYmIGZTZWxlY3Rpb24uc2l6ZSgpID09IDEpICAgIHsKLSAgICAgIAkJT2JqZWN0IG9iaiA9IGZTZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCk7Ci0KLSAgICAgIAkJaWYgKG9iaiAhPSBudWxsKSAgICB7Ci0gICAgICAJCQlpZiAoIG9iaiBpbnN0YW5jZW9mIElSZXNvdXJjZSkgCi0gICAgICAJCQkJewotICAgICAgCQkJCQlyZXNvdXJjZV8gPSAoSVJlc291cmNlKSBvYmo7Ci0gICAgICAJCQkJfQotICAgICAgCQkJZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgSUNvbXBpbGF0aW9uVW5pdCkKLSAgICAgIAkJCXsKLSAgICAgICAgCQkJSUNvbXBpbGF0aW9uVW5pdCBjb21wVW5pdCA9IChJQ29tcGlsYXRpb25Vbml0KW9iajsKLSAgICAgICAgCQkJcmVzb3VyY2VfPSBjb21wVW5pdC5nZXRDb3JyZXNwb25kaW5nUmVzb3VyY2UoKTsKLSAgICAgIAkJCX0KLQkJCQllbHNlIGlmIChvYmogaW5zdGFuY2VvZiBJSmF2YVByb2plY3QpIHsKLQkJCQkJcHJvamVjdCA9ICgoSUphdmFQcm9qZWN0KSBvYmopLmdldFByb2plY3QoKTsKLQkJCQl9Ci0KLQkJCQllbHNlIGlmIChvYmogaW5zdGFuY2VvZiBFT2JqZWN0KSB7Ci0JCQkJCXByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoKEVPYmplY3QpIG9iaik7Ci0JCQkJfQotCi0gICAgICAJCQlpZiAoIHJlc291cmNlXyAhPSBudWxsICkKLSAgIAkJCQkJcHJvamVjdCA9IHJlc291cmNlXy5nZXRQcm9qZWN0KCk7Ci0gICAgICAgICAJCQotICAgIAkJfQotICAgCQl9Ci0gICAJfQkKLSAgIGNhdGNoIChFeGNlcHRpb24gZSkge30KLSAgIHJldHVybiBwcm9qZWN0OwotIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9jb21tb24vRGlhbG9nUmVzb3VyY2VCcm93c2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL2NvbW1vbi9EaWFsb2dSZXNvdXJjZUJyb3dzZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ0OWRiMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL2NvbW1vbi9EaWFsb2dSZXNvdXJjZUJyb3dzZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA0MjMgICAxODMwNzUgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLmNvbW1vbjsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JQ29udGFpbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5EaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5EZWNvcmF0aW5nTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UcmVlVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyRmlsdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5XU1VJUGx1Z2luTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLnBsdWdpbi5XZWJTZXJ2aWNlVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkubW9kZWwuV29ya2JlbmNoQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLm1vZGVsLldvcmtiZW5jaExhYmVsUHJvdmlkZXI7Ci0KLS8qKgotKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgZGlhbG9nIGZvciBicm93c2luZyB3b3Jrc3BhY2UgcmVzb3VyY2VzLgotKi8KLXB1YmxpYyBjbGFzcyBEaWFsb2dSZXNvdXJjZUJyb3dzZXIgZXh0ZW5kcyBEaWFsb2cKLXsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9SRVNPVVJDRV9UUkVFID0gV2ViU2VydmljZVVJUGx1Z2luLklEICsgIi5EUkVTMDAwMSI7Ci0KLSAgcHJpdmF0ZSBJUmVzb3VyY2Ugcm9vdF87Ci0gIHByaXZhdGUgSUZpbHRlcltdIGZpbHRlcnNfOwotICBwcml2YXRlIGJvb2xlYW4gbXVsdGlwbGVTZWxlY3Rpb25FbmFibGVkXzsKLSAgcHJpdmF0ZSBJUmVzb3VyY2VbXSBzZWxlY3Rpb25fOwotICBwcml2YXRlIFRyZWUgcmVzb3VyY2VUcmVlXzsKLSAgcHJpdmF0ZSBUcmVlVmlld2VyIGZpbGVWaWV3ZXJfOwotICBwcml2YXRlIEhhc2hNYXAgICAgdmlzaXRlZENvbnRhaW5lcnNfOwotICBwcml2YXRlIGJvb2xlYW4gICAgZm9sZGVyc1NlbGVjdGFibGVfOwotCi0gIHB1YmxpYyBEaWFsb2dSZXNvdXJjZUJyb3dzZXIoU2hlbGwgc2hlbGwsIElSZXNvdXJjZSByb290LCBJRmlsdGVyIGZpbHRlcikKLSAgewotICAgIHRoaXMoc2hlbGwsIHJvb3QsIG5ldyBJRmlsdGVyW117ZmlsdGVyfSwgZmFsc2UgKTsKLSAgfQotCi0gIC8qKgotICAqIENvbnN0cnVjdHMgYSBuZXcgPGNvZGU+RGlhbG9nUmVzb3VyY2VCcm93c2VyPC9jb2RlPgotICAqIHVuZGVyIHRoZSBnaXZlbiA8Y29kZT5wYXJlbnQgU2hlbGw8L2NvZGU+LgotICAqIFRoZSBkaWFsb2cgcmVuZGVycyBhbGwgcmVzb3VyY2VzIGluY2x1ZGluZyBhbmQKLSAgKiB1bmRlciB0aGUgZ2l2ZW4gPGNvZGU+cm9vdCBJUmVzb3VyY2U8L2NvZGU+Ci0gICogQHBhcmFtIHBhcmVudCBUaGUgcGFyZW50IHtAbGluayBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbH0uCi0gICogb3IgbnVsbCB0byBjcmVhdGUgYSB0b3AtbGV2ZWwgc2hlbGwuCi0gICogQHBhcmFtIHJvb3QgVGhlIHJvb3Qge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZX0sCi0gICogb3IgbnVsbCB0byBiZWdpbiB3aXRoIHRoZSB3b3Jrc3BhY2Ugcm9vdC4KLSAgKiBAcGFyYW0gZmlsdGVycyBBbiBhcnJheSBvZiBqYXZhLmxhbmcuU3RyaW5nCi0gICovCi0gIHB1YmxpYyBEaWFsb2dSZXNvdXJjZUJyb3dzZXIoU2hlbGwgc2hlbGwsIElSZXNvdXJjZSByb290LCBJRmlsdGVyW10gZmlsdGVycykKLSAgewotICAgIHRoaXMoIHNoZWxsLCByb290LCBmaWx0ZXJzLCBmYWxzZSApOwotICB9Ci0gIAotICBwdWJsaWMgRGlhbG9nUmVzb3VyY2VCcm93c2VyKFNoZWxsIHNoZWxsLCBJUmVzb3VyY2Ugcm9vdCwgSUZpbHRlcltdIGZpbHRlcnMsIGJvb2xlYW4gZm9sZGVyc1NlbGVjdGFibGUgKQotICB7Ci0gICAgc3VwZXIoc2hlbGwpOwotCi0gICAgSVJlc291cmNlIG1vZHVsZVJvb3QgPSByb290OwotICAgIGlmIChyb290IGluc3RhbmNlb2YgSVByb2plY3QpCi0gICAgewotICAgICAgSVByb2plY3QgcCA9IChJUHJvamVjdCltb2R1bGVSb290OwotICAgICAKLSAgICAgICAgbW9kdWxlUm9vdCA9IHA7Ci0gICAgCi0gICAgfQotCi0gICAgcm9vdF8gPSAobW9kdWxlUm9vdCA9PSBudWxsKSA/IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkgOiBtb2R1bGVSb290OwotICAgIGZpbHRlcnNfID0gKGZpbHRlcnMgPT0gbnVsbCkgPyBuZXcgSUZpbHRlclswXSA6IGZpbHRlcnM7Ci0gICAgdmlzaXRlZENvbnRhaW5lcnNfID0gbmV3IEhhc2hNYXAoKTsKLSAgICBtdWx0aXBsZVNlbGVjdGlvbkVuYWJsZWRfID0gZmFsc2U7Ci0gICAgZm9sZGVyc1NlbGVjdGFibGVfID0gZm9sZGVyc1NlbGVjdGFibGU7Ci0gICAgc2V0U2hlbGxTdHlsZShTV1QuRElBTE9HX1RSSU0gfCBTV1QuUkVTSVpFIHwgU1dULkFQUExJQ0FUSU9OX01PREFMKTsKLSAgfQotCi0gIC8qKgotICAqIEVuYWJsZXMgb3IgZGlzYWJsZXMgbXVsdGlwbGUgc2VsZWN0aW9uIGluIHRoZSB0cmVlIHZpZXcuCi0gICogTXVsdGlwbGUgc2VsZWN0aW9uIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCi0gICogQHBhcmFtIG11bHRpcGxlU2VsZWN0aW9uRW5hYmxlZCBUcnVlIHRvIGVuYWJsZWQgb3IgZmFsc2UgdG8gZGlzYWJsZS4KLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0TXVsdGlwbGVTZWxlY3Rpb25FbmFibGVkKGJvb2xlYW4gbXVsdGlwbGVTZWxlY3Rpb25FbmFibGVkKQotICB7Ci0gICAgbXVsdGlwbGVTZWxlY3Rpb25FbmFibGVkXyA9IG11bHRpcGxlU2VsZWN0aW9uRW5hYmxlZDsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIHNlbGVjdGlvbnMgbWFkZSBpbiB0aGUgZGlhbG9nIGlmIE9LIHdhcyBwcmVzc2VkLAotICAqIG9yIG51bGwgaWYgQ2FuY2VsIHdhcyBwcmVzc2VkLiBSZXR1cm5zIG51bGwgaWYgdGhlIGRpYWxvZwotICAqIGhhcyBuZXZlciBiZWVuIG9wZW5lZC4KLSAgKiBAcmV0dXJuIEFuIGFycmF5IG9mIHNlbGVjdGVkIHJlc291cmNlcywgcG9zc2libHkgZW1wdHksIHBvc3NpYmx5IG51bGwuCi0gICovCi0gIHB1YmxpYyBJUmVzb3VyY2VbXSBnZXRTZWxlY3Rpb24oKQotICB7Ci0gICAgcmV0dXJuIHNlbGVjdGlvbl87Ci0gIH0KLQotICBwdWJsaWMgSVJlc291cmNlIGdldEZpcnN0U2VsZWN0aW9uKCkKLSAgewotICAgIGlmIChzZWxlY3Rpb25fICE9IG51bGwgJiYgc2VsZWN0aW9uXy5sZW5ndGggPiAwKQotICAgICAgcmV0dXJuIHNlbGVjdGlvbl9bMF07Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAgLyoqCi0gICogQ2FsbGVkIHdoZW4gdGhlIENhbmNlbCBidXR0b24gaXMgcHJlc3NlZC4KLSAgKiBJbnN1cmVzIHRoYXQge0BsaW5rICNnZXRSZXN1bHR9IHdpbGwgcmV0dXJuIG51bGwuCi0gICovCi0gIHByb3RlY3RlZCB2b2lkIGNhbmNlbFByZXNzZWQoKQotICB7Ci0gICAgc2VsZWN0aW9uXyA9IG51bGw7Ci0gICAgc2V0UmV0dXJuQ29kZShEaWFsb2cuQ0FOQ0VMKTsKLSAgICBzdXBlci5jYW5jZWxQcmVzc2VkKCk7Ci0gIH0KLQotICAvKioKLSAgKiBDYWxsZWQgd2hlbiB0aGUgT0sgYnV0dG9uIGlzIHByZXNzZWQuCi0gICogU3F1aXJyZWxzIGF3YXkgdGhlIGxpc3Qgb2YgemVybyBvciBtb3JlIHNlbGVjdGVkCi0gICogPGNvZGU+SVJlc291cmNlPC9jb2RlPnMgdG8gYmUgcmV0dXJuZWQgYnkge0BsaW5rICNnZXRSZXN1bHR9LgotICAqLwotICBwcm90ZWN0ZWQgdm9pZCBva1ByZXNzZWQoKQotICB7Ci0gICAgSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBmaWxlVmlld2VyXy5nZXRTZWxlY3Rpb24oKTsKLSAgICBpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pCi0gICAgewotICAgICAgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc3RydWN0dXJlZFNlbGVjdGlvbiA9IChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb247Ci0gICAgICBzZWxlY3Rpb25fID0gbmV3IElSZXNvdXJjZVtzdHJ1Y3R1cmVkU2VsZWN0aW9uLnNpemUoKV07Ci0gICAgICBpbnQgaSA9IDA7Ci0gICAgICBJdGVyYXRvciBpdCA9IHN0cnVjdHVyZWRTZWxlY3Rpb24uaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIE9iamVjdCBvYmplY3QgPSBpdC5uZXh0KCk7Ci0gICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBJUmVzb3VyY2UpCi0gICAgICAgICAgc2VsZWN0aW9uX1tpKytdID0gKElSZXNvdXJjZSlvYmplY3Q7Ci0gICAgICB9Ci0gICAgfQotICAgIHNldFJldHVybkNvZGUoRGlhbG9nLk9LKTsKLSAgICBzdXBlci5va1ByZXNzZWQoKTsKLSAgfQotCi0gIC8qKgotICAqIFNlZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdyNjb25maWd1cmVTaGVsbH0uCi0gICogQHBhcmFtIHNoZWxsIFRoZSBzaGVsbC4KLSAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgY29uZmlndXJlU2hlbGwoU2hlbGwgc2hlbGwpCi0gIHsKLSAgICBzdXBlci5jb25maWd1cmVTaGVsbChzaGVsbCk7Ci0gICAgc2hlbGwuc2V0VGV4dChXU1VJUGx1Z2luTWVzc2FnZXMuRElBTE9HX1RJVExFX1JFU09VUkNFX0JST1dTRVIpOwotICB9Ci0KLSAgLyoqIAotICAqIENyZWF0ZXMgdGhlIGRpYWxvZyBhcmVhLgotICAqIEBwYXJhbSBwYXJlbnQgVGhlIHBhcmVudCBjb21wb3NpdGUuCi0gICogQHJldHVybiBUaGUgY29udHJvbCBhcmVhLgotICAqLwotICBwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVEaWFsb2dBcmVhKENvbXBvc2l0ZSBwYXJlbnQpCi0gIHsKLSAgICBDb21wb3NpdGUgY29tcG9zaXRlID0gKENvbXBvc2l0ZSlzdXBlci5jcmVhdGVEaWFsb2dBcmVhKHBhcmVudCk7Ci0gICAgR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMIHwgR3JpZERhdGEuR1JBQl9IT1JJWk9OVEFMIHwgR3JpZERhdGEuVkVSVElDQUxfQUxJR05fRklMTCB8IEdyaWREYXRhLkdSQUJfVkVSVElDQUwpOwotICAgIGdkLndpZHRoSGludCA9IDQwMDsKLSAgICBnZC5oZWlnaHRIaW50ID0gMzAwOwotICAgIGdkLmdyYWJFeGNlc3NWZXJ0aWNhbFNwYWNlID0gdHJ1ZTsKLSAgICBnZC5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKLSAgICBjb21wb3NpdGUuc2V0TGF5b3V0RGF0YShnZCk7Ci0KLSAgICBpZiAobXVsdGlwbGVTZWxlY3Rpb25FbmFibGVkXykKLSAgICB7Ci0gICAgICByZXNvdXJjZVRyZWVfID0gbmV3IFRyZWUoY29tcG9zaXRlLFNXVC5NVUxUSSB8IFNXVC5CT1JERVIgfCBTV1QuVl9TQ1JPTEwgfCBTV1QuSF9TQ1JPTEwpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmVzb3VyY2VUcmVlXyA9IG5ldyBUcmVlKGNvbXBvc2l0ZSxTV1QuU0lOR0xFIHwgU1dULkJPUkRFUiB8IFNXVC5WX1NDUk9MTCB8IFNXVC5IX1NDUk9MTCk7Ci0gICAgfQotICAgIGdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCB8IEdyaWREYXRhLkdSQUJfSE9SSVpPTlRBTCB8IEdyaWREYXRhLlZFUlRJQ0FMX0FMSUdOX0ZJTEwgfCBHcmlkRGF0YS5HUkFCX1ZFUlRJQ0FMKTsKLSAgICBnZC5ncmFiRXhjZXNzVmVydGljYWxTcGFjZSA9IHRydWU7Ci0gICAgZ2QuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7Ci0gICAgcmVzb3VyY2VUcmVlXy5zZXRMYXlvdXREYXRhKGdkKTsKLSAgICByZXNvdXJjZVRyZWVfLnNldFRvb2xUaXBUZXh0KFdTVUlQbHVnaW5NZXNzYWdlcy5UT09MVElQX1JFU09VUkNFX1RSRUUpOwotICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAocmVzb3VyY2VUcmVlXywgSU5GT1BPUF9SRVNPVVJDRV9UUkVFKTsKLQotICAgIGZpbGVWaWV3ZXJfID0gbmV3IFRyZWVWaWV3ZXIocmVzb3VyY2VUcmVlXyk7Ci0gICAgZmlsZVZpZXdlcl8uc2V0Q29udGVudFByb3ZpZGVyKG5ldyBXb3JrYmVuY2hDb250ZW50UHJvdmlkZXIoKSk7Ci0gICAgZmlsZVZpZXdlcl8uc2V0TGFiZWxQcm92aWRlcihuZXcgRGVjb3JhdGluZ0xhYmVsUHJvdmlkZXIobmV3IFdvcmtiZW5jaExhYmVsUHJvdmlkZXIoKSwgV2ViU2VydmljZVVJUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0V29ya2JlbmNoKCkuZ2V0RGVjb3JhdG9yTWFuYWdlcigpLmdldExhYmVsRGVjb3JhdG9yKCkpKTsKLSAgICBmaWxlVmlld2VyXy5hZGRGaWx0ZXIoCi0gICAgICBuZXcgVmlld2VyRmlsdGVyKCkKLSAgICAgIHsKLSAgICAgICAgcHVibGljIGJvb2xlYW4gc2VsZWN0KFZpZXdlciB2aWV3ZXIsIE9iamVjdCBwYXJlbnRPYmplY3QsIE9iamVjdCBvYmplY3QpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiggb2JqZWN0IGluc3RhbmNlb2YgSVJlc291cmNlICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaXNWYWxpZFJlc291cmNlKCAoSVJlc291cmNlKW9iamVjdCApOwotICAgICAgICAgIH0KLSAgICAgICAgICAKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICApOwotICAgIAotICAgIGlmKCAhZm9sZGVyc1NlbGVjdGFibGVfICkKLSAgICB7Ci0gICAgICBmaWxlVmlld2VyXy5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoIG5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVNlbGVjdGlvbkNoYW5nZWQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gKTsKLSAgICB9Ci0gICAgCi0gICAgZmlsZVZpZXdlcl8uc2V0SW5wdXQocm9vdF8pOwotICAgIHJldHVybiBjb21wb3NpdGU7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgaGFuZGxlU2VsZWN0aW9uQ2hhbmdlZCgpCi0gIHsKLSAgICBJU2VsZWN0aW9uIHNlbGVjdGlvbiAgICAgID0gZmlsZVZpZXdlcl8uZ2V0U2VsZWN0aW9uKCk7Ci0gICAgYm9vbGVhbiAgICB2YWxpZFNlbGVjdGlvbiA9IHRydWU7Ci0gICAgCi0gICAgaWYoIHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uICkKLSAgICB7Ci0gICAgICBJU3RydWN0dXJlZFNlbGVjdGlvbiBzdHJ1Y1NlbGVjdGlvbiA9IChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb247Ci0gICAgICBJdGVyYXRvciAgICAgICAgICAgICBpdGVyICAgICAgICAgICA9IHN0cnVjU2VsZWN0aW9uLml0ZXJhdG9yKCk7Ci0gICAgICAKLSAgICAgIC8vIEVuc3VyZSB0aGF0IGFsbCBzZWxlY3RlZCBpdGVtcyBhcmUgdmFsaWQuCi0gICAgICB3aGlsZSggaXRlci5oYXNOZXh0KCkgKQotICAgICAgewotICAgICAgICBPYmplY3Qgb2JqZWN0ID0gaXRlci5uZXh0KCk7Ci0gICAgICAgIAotICAgICAgICBpZiggb2JqZWN0IGluc3RhbmNlb2YgSUZpbGUgKQotICAgICAgICB7Ci0gICAgICAgICAgdmFsaWRTZWxlY3Rpb24gPSBhY2NlcHRzRmlsZSggKElGaWxlKW9iamVjdCApOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHZhbGlkU2VsZWN0aW9uID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmKCAhdmFsaWRTZWxlY3Rpb24gKSBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHZhbGlkU2VsZWN0aW9uID0gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIEJ1dHRvbiBva0J1dHRvbiA9IGdldEJ1dHRvbiggRGlhbG9nLk9LICk7Ci0gICAgb2tCdXR0b24uc2V0RW5hYmxlZCggdmFsaWRTZWxlY3Rpb24gKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBib29sZWFuIGFjY2VwdHNGaWxlKCBJUmVzb3VyY2UgZmlsZSApCi0gIHsKLSAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotICAgIAotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmlsdGVyc18ubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgaWYoIGZpbHRlcnNfW2ldLmFjY2VwdHMoIGZpbGUgKSApCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0gIAotICBwcml2YXRlIGJvb2xlYW4gaXNWYWxpZFJlc291cmNlKCBJUmVzb3VyY2UgcmVzb3VyY2UgKQotICB7Ci0gICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLSAgICAKLSAgICBpZiggcmVzb3VyY2UgaW5zdGFuY2VvZiBJRmlsZSApCi0gICAgewotICAgICAgLy8gTG9vcCBvdmVyIGFsbCBmaWx0ZXJzLiAgSWYgb25lIGlzIGFjY2VwdGFibGUgdGhlbiB3ZSB3aWxsCi0gICAgICAvLyByZXR1cm4gdHJ1ZS4KLSAgICAgIHJlc3VsdCA9IGFjY2VwdHNGaWxlKCByZXNvdXJjZSApOwotICAgIH0KLSAgICBlbHNlIGlmKCByZXNvdXJjZSBpbnN0YW5jZW9mIElDb250YWluZXIgKQotICAgIHsKLSAgICAgIC8vIE5vdyBzZWUgaWYgdGhpcyBjb250YWluZXIgY29udGFpbnMgYXQgbGVhc3Qgb25lIHZhbGlkIGZpbGUuCi0gICAgICBCb29sZWFuIHZhbGlkQ29udGFpbmVyID0gKEJvb2xlYW4pdmlzaXRlZENvbnRhaW5lcnNfLmdldCggcmVzb3VyY2UgKTsKLSAgICAgIAotICAgICAgaWYoIHZhbGlkQ29udGFpbmVyID09IG51bGwgKQotICAgICAgewotICAgICAgICAvLyBXZSBoYXZlbid0IHNlZW4gdGhpcyBjb250YWluZXIgYmVmb3JlLgotICAgICAgICB0cnkgCi0gICAgICAgIHsKLSAgICAgICAgICBJQ29udGFpbmVyICBjb250YWluZXIgPSAoSUNvbnRhaW5lcilyZXNvdXJjZTsKLSAgICAgICAgICBJUmVzb3VyY2VbXSBtZW1iZXJzICAgPSBjb250YWluZXIubWVtYmVycygpOwotICAgICAgICAgIAotICAgICAgICAgIHZpc2l0ZWRDb250YWluZXJzXy5wdXQoIGNvbnRhaW5lciwgQm9vbGVhbi5GQUxTRSApOwotICAgICAgICAgIAotICAgICAgICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBtZW1iZXJzLmxlbmd0aDsgaW5kZXgrKykgCi0gICAgICAgICAgewotICAgICAgICAgICAgaWYoIGlzVmFsaWRSZXNvdXJjZShtZW1iZXJzW2luZGV4XSkgKSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgdmlzaXRlZENvbnRhaW5lcnNfLnB1dCggY29udGFpbmVyLCBCb29sZWFuLlRSVUUgKTsKLSAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9IAotICAgICAgICBjYXRjaCggQ29yZUV4Y2VwdGlvbiBleGMgKSAKLSAgICAgICAgewotICAgICAgICAgIC8vIERvIG5vdGhpbmcKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICByZXN1bHQgPSB2YWxpZENvbnRhaW5lci5ib29sZWFuVmFsdWUoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL2NvbW1vbi9GaWxlRXh0ZW5zaW9uRmlsdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL2NvbW1vbi9GaWxlRXh0ZW5zaW9uRmlsdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkMzU1YzQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9jb21tb24vRmlsZUV4dGVuc2lvbkZpbHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLQotLyoqCi0qIFRoaXMgaXMgdGhlIGludGVyZmFjZSBmb3IgYSBjbGFzcyBvZiBvYmplY3RzIHRoYXQgZmlsdGVyCi0qIG90aGVyIG9iamVjdHMgZm9yIGluY2x1c2lvbiBvciBleGNsdXNpb24gYnkgc29tZSBjb25zdW1lci4KLSovCi1wdWJsaWMgY2xhc3MgRmlsZUV4dGVuc2lvbkZpbHRlciBpbXBsZW1lbnRzIElGaWx0ZXIKLXsKLSAgcHJpdmF0ZSBTdHJpbmdbXSBleHRlbnNpb25zXzsKLQotICBwdWJsaWMgRmlsZUV4dGVuc2lvbkZpbHRlcihTdHJpbmdbXSBleHRlbnNpb25zKQotICB7Ci0gICAgZXh0ZW5zaW9uc18gPSAoZXh0ZW5zaW9ucyAhPSBudWxsKSA/IGV4dGVuc2lvbnMgOiBuZXcgU3RyaW5nWzBdOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbG9jYWxlLXNwZWNpZmljIG5hbWUgb2YgdGhpcyBmaWx0ZXIuCi0gICogQHJldHVybiBUaGUgbG9jYWxlLXNwZWNpZmljIG5hbWUgb2YgdGhpcyBmaWx0ZXIuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gIm9yZy5lY2xpcHNlLmpzdC53cy5hdGsudWkuZWRpdG9yLmNvbW1vbi5GaWxlRXh0ZW5zaW9uRmlsdGVyIjsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIGxvY2FsZS1zcGVjaWZpYyBkZXNjcmlwdGlvbiBvZiB0aGlzIGZpbHRlci4KLSAgKiBAcmV0dXJuIFRoZSBsb2NhbGUtc3BlY2lmaWMgZGVzY3JpcHRpb24gb2YgdGhpcyBmaWx0ZXIuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKQotICB7Ci0gICAgcmV0dXJuICJvcmcuZWNsaXBzZS5qc3Qud3MuYXRrLnVpLmVkaXRvci5jb21tb24uRmlsZUV4dGVuc2lvbkZpbHRlciI7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRydWUgaWYgYW5kIG9ubHkgaWYgdGhpcyA8Y29kZT5GaWx0ZXI8L2NvZGU+Ci0gICogYWNjZXB0cyB0aGUgZ2l2ZW4gPGNvZGU+b2JqZWN0PC9jb2RlPi4gVGhpcyBtZXRob2QKLSAgKiBtdXN0IHJldHVybiB0cnVlIGlmIGFuZCBvbmx5IGlmIHtAbGluayAjc3RhdHVzT2Z9Ci0gICogcmV0dXJucyBhbiA8Y29kZT5JU3RhdHVzPC9jb2RlPiB3aXRoIGEgc2V2ZXJpdHkgb2YKLSAgKiBsZXNzIHRoYW4gPGNvZGU+SVN0YXR1cy5FUlJPUjwvY29kZT4uCi0gICogQHBhcmFtIG9iamVjdCBUaGUgb2JqZWN0IHRvIGZpbHRlci4KLSAgKiBAcmV0dXJuIFRydWUgaWYgYW5kIG9ubHkgaWYgdGhpcyA8Y29kZT5GaWx0ZXI8L2NvZGU+Ci0gICogYWNjZXB0cyB0aGUgZ2l2ZW4gPGNvZGU+b2JqZWN0PC9jb2RlPi4KLSAgKi8KLSAgcHVibGljIGJvb2xlYW4gYWNjZXB0cyhPYmplY3Qgb2JqZWN0KQotICB7Ci0gICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIElGaWxlKQotICAgIHsKLSAgICAgIElGaWxlIGZpbGUgPSAoSUZpbGUpb2JqZWN0OwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBleHRlbnNpb25zXy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgaWYgKGZpbGUuZ2V0RmlsZUV4dGVuc2lvbigpICE9IG51bGwgJiYgZmlsZS5nZXRGaWxlRXh0ZW5zaW9uKCkuZXF1YWxzKGV4dGVuc2lvbnNfW2ldKSkKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL2NvbW1vbi9JRmlsdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL2NvbW1vbi9JRmlsdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlNWRiOGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9jb21tb24vSUZpbHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5jb21tb247Ci0KLS8qKgotKiBUaGlzIGlzIHRoZSBpbnRlcmZhY2UgZm9yIGEgY2xhc3Mgb2Ygb2JqZWN0cyB0aGF0IGZpbHRlcgotKiBvdGhlciBvYmplY3RzIGZvciBpbmNsdXNpb24gb3IgZXhjbHVzaW9uIGJ5IHNvbWUgY29uc3VtZXIuCi0qLwotcHVibGljIGludGVyZmFjZSBJRmlsdGVyCi17Ci0gIC8qKgotICAqIFJldHVybnMgdGhlIGxvY2FsZS1zcGVjaWZpYyBuYW1lIG9mIHRoaXMgZmlsdGVyLgotICAqIEByZXR1cm4gVGhlIGxvY2FsZS1zcGVjaWZpYyBuYW1lIG9mIHRoaXMgZmlsdGVyLgotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKTsKLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBsb2NhbGUtc3BlY2lmaWMgZGVzY3JpcHRpb24gb2YgdGhpcyBmaWx0ZXIuCi0gICogQHJldHVybiBUaGUgbG9jYWxlLXNwZWNpZmljIGRlc2NyaXB0aW9uIG9mIHRoaXMgZmlsdGVyLgotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCk7Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0cnVlIGlmIGFuZCBvbmx5IGlmIHRoaXMgPGNvZGU+RmlsdGVyPC9jb2RlPgotICAqIGFjY2VwdHMgdGhlIGdpdmVuIDxjb2RlPm9iamVjdDwvY29kZT4uIFRoaXMgbWV0aG9kCi0gICogbXVzdCByZXR1cm4gdHJ1ZSBpZiBhbmQgb25seSBpZiB7QGxpbmsgI3N0YXR1c09mfQotICAqIHJldHVybnMgYW4gPGNvZGU+SVN0YXR1czwvY29kZT4gd2l0aCBhIHNldmVyaXR5IG9mCi0gICogbGVzcyB0aGFuIDxjb2RlPklTdGF0dXMuRVJST1I8L2NvZGU+LgotICAqIEBwYXJhbSBvYmplY3QgVGhlIG9iamVjdCB0byBmaWx0ZXIuCi0gICogQHJldHVybiBUcnVlIGlmIGFuZCBvbmx5IGlmIHRoaXMgPGNvZGU+RmlsdGVyPC9jb2RlPgotICAqIGFjY2VwdHMgdGhlIGdpdmVuIDxjb2RlPm9iamVjdDwvY29kZT4uCi0gICovCi0gIHB1YmxpYyBib29sZWFuIGFjY2VwdHMoT2JqZWN0IG9iamVjdCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL2NvbW1vbi9VSVV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL2NvbW1vbi9VSVV0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0NzkzYzQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9jb21tb24vVUlVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA4MTcgICAxNDAwMTcgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIGxvbmdlciBwcm9qZWN0IG9yIHNlcnZlci9ydW50aW1lIHN0cmluZ3MgZG8gbm90IHJlc2l6ZSB3aXphcmQKLSAqIDIwMDYwODI5ICAgMTU1NDQxIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCB3ZWIgc2VydmljZSB3aXphcmQgaGFuZ3MgZHVyaW5nIHJlc2l6ZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci0KLQotcHVibGljIGNsYXNzIFVJVXRpbHMgCi17Ci0JLyoqCi0JICogQSBkZWZhdWx0IHBhZGRpbmcgdmFsdWUgZm9yIGhvcml6b250YWxSZXNpemUoKS4KLQkgKi8KLQlwdWJsaWMgZmluYWwgc3RhdGljIGludCBERUZBVUxUX1BBRERJTkcgPSAzNTsKLQkKLSAgU3RyaW5nICAgICAgIGluZm9Qb3BpZF87Ci0gIAotICBwdWJsaWMgVUlVdGlscyggU3RyaW5nIGluZm9Qb3BpZCApCi0gIHsKLSAgICBpbmZvUG9waWRfID0gaW5mb1BvcGlkOwotICB9Ci0gIAotICBwdWJsaWMgQnV0dG9uIGNyZWF0ZVJhZGlvQnV0dG9uKCBDb21wb3NpdGUgcGFyZW50LCBTdHJpbmcgbGFiZWxOYW1lLCBTdHJpbmcgdG9vbHRpcCwgU3RyaW5nIGluZm9wb3AgKQotICB7Ci0gICAgcmV0dXJuIGNyZWF0ZUJ1dHRvbiggU1dULlJBRElPLCBwYXJlbnQsIGxhYmVsTmFtZSwgdG9vbHRpcCwgaW5mb3BvcCApOwotICB9Ci0gIAotICBwdWJsaWMgQnV0dG9uIGNyZWF0ZUNoZWNrYm94KCBDb21wb3NpdGUgcGFyZW50LCBTdHJpbmcgbGFiZWxOYW1lLCBTdHJpbmcgdG9vbHRpcCwgU3RyaW5nIGluZm9wb3AgKQotICB7Ci0gICAgcmV0dXJuIGNyZWF0ZUJ1dHRvbiggU1dULkNIRUNLLCBwYXJlbnQsIGxhYmVsTmFtZSwgdG9vbHRpcCwgaW5mb3BvcCApOwotICB9Ci0gIAotICBwdWJsaWMgQnV0dG9uIGNyZWF0ZVB1c2hCdXR0b24oIENvbXBvc2l0ZSBwYXJlbnQsIFN0cmluZyBsYWJlbE5hbWUsIFN0cmluZyB0b29sdGlwLCBTdHJpbmcgaW5mb3BvcCApCi0gIHsKLSAgICByZXR1cm4gY3JlYXRlQnV0dG9uKCBTV1QuTk9ORSwgcGFyZW50LCBsYWJlbE5hbWUsIHRvb2x0aXAsIGluZm9wb3AgKTsKLSAgfQotICAKLSAgcHVibGljIEJ1dHRvbiBjcmVhdGVCdXR0b24oIGludCBraW5kLCBDb21wb3NpdGUgcGFyZW50LCBTdHJpbmcgbGFiZWxOYW1lLCBTdHJpbmcgdG9vbHRpcCwgU3RyaW5nIGluZm9wb3AgKQotICB7Ci0gICAgQnV0dG9uIGJ1dHRvbiA9IG5ldyBCdXR0b24oIHBhcmVudCwga2luZCApOwotICAgIAotICAgIHRvb2x0aXAgPSB0b29sdGlwID09IG51bGwgPyBsYWJlbE5hbWUgOiB0b29sdGlwOwotICAgIGJ1dHRvbi5zZXRUZXh0KCBsYWJlbE5hbWUgKTsKLSAgICBidXR0b24uc2V0VG9vbFRpcFRleHQoIHRvb2x0aXAgKTsKLSAgICAKLSAgICBpZiggaW5mb3BvcCAhPSBudWxsICkgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscCggYnV0dG9uLCBpbmZvUG9waWRfICsgIi4iICsgaW5mb3BvcCApOwotICAgIAotICAgIHJldHVybiBidXR0b247Ci0gIH0KLSAgCi0gIHB1YmxpYyBDb21ibyBjcmVhdGVDb21ibyggQ29tcG9zaXRlIHBhcmVudCwgU3RyaW5nIGxhYmVsTmFtZSwgU3RyaW5nIHRvb2x0aXAsIFN0cmluZyBpbmZvcG9wLCBpbnQgc3R5bGUgKQotICB7ICAgIAotICAgIHRvb2x0aXAgPSB0b29sdGlwID09IG51bGwgPyBsYWJlbE5hbWUgOiB0b29sdGlwOwotICAgIAotICAgIGlmKCBsYWJlbE5hbWUgIT0gbnVsbCApCi0gICAgewotICAgICAgTGFiZWwgbGFiZWwgPSBuZXcgTGFiZWwoIHBhcmVudCwgU1dULldSQVApOwotICAgICAgbGFiZWwuc2V0VGV4dCggbGFiZWxOYW1lICk7Ci0gICAgICBsYWJlbC5zZXRUb29sVGlwVGV4dCggdG9vbHRpcCApOwotICAgIH0KLSAgICAKLSAgICBDb21ibyBjb21ibyA9IG5ldyBDb21ibyggcGFyZW50LCBzdHlsZSApOwotICAgIEdyaWREYXRhIGdyaWRkYXRhID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCB8IEdyaWREYXRhLkdSQUJfSE9SSVpPTlRBTCk7Ci0gICAgIAotICAgIGNvbWJvLnNldExheW91dERhdGEoIGdyaWRkYXRhICk7Ci0gICAgY29tYm8uc2V0VG9vbFRpcFRleHQoIHRvb2x0aXAgKTsKLSAgICAKLSAgICBpZiggaW5mb3BvcCAhPSBudWxsICkgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscCggY29tYm8sIGluZm9Qb3BpZF8gKyAiLiIgKyBpbmZvcG9wICk7Ci0gICAgCi0gICAgcmV0dXJuIGNvbWJvOyAgICAgIAotICB9Ci0gIAotICBwdWJsaWMgVGV4dCBjcmVhdGVUZXh0KCBDb21wb3NpdGUgcGFyZW50LCBTdHJpbmcgbGFiZWxOYW1lLCBTdHJpbmcgdG9vbHRpcCwgU3RyaW5nIGluZm9wb3AsIGludCBzdHlsZSApCi0gIHsgICAgCi0gICAgdG9vbHRpcCA9IHRvb2x0aXAgPT0gbnVsbCA/IGxhYmVsTmFtZSA6IHRvb2x0aXA7Ci0gICAgCi0gICAgaWYoIGxhYmVsTmFtZSAhPSBudWxsICkKLSAgICB7Ci0gICAgICBMYWJlbCBsYWJlbCA9IG5ldyBMYWJlbCggcGFyZW50LCBTV1QuV1JBUCk7Ci0gICAgICBsYWJlbC5zZXRUZXh0KCAgbGFiZWxOYW1lICApOwotICAgICAgbGFiZWwuc2V0VG9vbFRpcFRleHQoICB0b29sdGlwICk7Ci0gICAgfQotICAgIAotICAgIFRleHQgdGV4dCA9IG5ldyBUZXh0KCBwYXJlbnQsIHN0eWxlICk7Ci0gICAgR3JpZERhdGEgZ3JpZGRhdGEgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMIHwgR3JpZERhdGEuR1JBQl9IT1JJWk9OVEFMKTsKLSAgICAKLSAgICB0ZXh0LnNldExheW91dERhdGEoIGdyaWRkYXRhICk7Ci0gICAgdGV4dC5zZXRUb29sVGlwVGV4dCggdG9vbHRpcCk7Ci0gICAgCi0gICAgaWYoIGluZm9wb3AgIT0gbnVsbCApIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoIHRleHQsIGluZm9Qb3BpZF8gKyAiLiIgKyBpbmZvcG9wICk7Ci0gICAgCi0gICAgcmV0dXJuIHRleHQ7ICAgICAgCi0gIH0KLSAgCi0gIHB1YmxpYyBDb21wb3NpdGUgY3JlYXRlQ29tcG9zaXRlKCBDb21wb3NpdGUgcGFyZW50LCBpbnQgY29sdW1ucyApCi0gIHsKLSAgICByZXR1cm4gY3JlYXRlQ29tcG9zaXRlKCBwYXJlbnQsIGNvbHVtbnMsIC0xLCAtMSApOwotICB9Ci0gIAotICBwdWJsaWMgQ29tcG9zaXRlIGNyZWF0ZUNvbXBvc2l0ZSggQ29tcG9zaXRlIHBhcmVudCwgaW50IGNvbHVtbnMsIGludCBtYXJnaW5IZWlnaHQsIGludCBtYXJnaW5XaWR0aCApCi0gIHsKLSAgICBDb21wb3NpdGUgY29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZSggcGFyZW50LCBTV1QuTk9ORSApOwotICAgIAotICAgIEdyaWRMYXlvdXQgZ3JpZGxheW91dCAgID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBncmlkbGF5b3V0Lm51bUNvbHVtbnMgICA9IGNvbHVtbnM7Ci0gIAotICAgIGlmKCBtYXJnaW5IZWlnaHQgPj0gMCApIGdyaWRsYXlvdXQubWFyZ2luSGVpZ2h0ID0gbWFyZ2luSGVpZ2h0OwotICAgIGlmKCBtYXJnaW5XaWR0aCA+PSAwICkgIGdyaWRsYXlvdXQubWFyZ2luV2lkdGggID0gbWFyZ2luV2lkdGg7Ci0gICAgCi0gICAgY29tcG9zaXRlLnNldExheW91dCggZ3JpZGxheW91dCApOwotICAgIEdyaWREYXRhIGdyaWRkYXRhID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCB8IEdyaWREYXRhLkdSQUJfSE9SSVpPTlRBTCk7Ci0gICAgY29tcG9zaXRlLnNldExheW91dERhdGEoIGdyaWRkYXRhICk7Ci0gICAgCi0gICAgcmV0dXJuIGNvbXBvc2l0ZTsKLSAgICAKLSAgfQotICBwdWJsaWMgR3JvdXAgY3JlYXRlR3JvdXAoIENvbXBvc2l0ZSBwYXJlbnQsIFN0cmluZyBncm91cE5hbWUsIFN0cmluZyB0b29sdGlwLCBTdHJpbmcgaW5mb3BvcCApCi0gIHsKLSAgCXJldHVybiBjcmVhdGVHcm91cCggcGFyZW50LCBncm91cE5hbWUsIHRvb2x0aXAsIGluZm9wb3AsIDEsIC0xLCAtMSApOwotICB9Ci0gIAotICBwdWJsaWMgR3JvdXAgY3JlYXRlR3JvdXAoIENvbXBvc2l0ZSBwYXJlbnQsIFN0cmluZyBncm91cE5hbWUsIFN0cmluZyB0b29sdGlwLCBTdHJpbmcgaW5mb3BvcCwgaW50IGNvbHVtbnMsIGludCBtYXJnaW5IZWlnaHQsIGludCBtYXJnaW5XaWR0aCApCi0gIHsKLSAgICBHcm91cCAgICAgIG5ld0dyb3VwICAgID0gbmV3IEdyb3VwKCBwYXJlbnQsIFNXVC5OT05FICk7Ci0gICAgR3JpZERhdGEgICBncmlkZGF0YSAgICA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwgfCBHcmlkRGF0YS5HUkFCX0hPUklaT05UQUwpOwotICAgIEdyaWRMYXlvdXQgZ3JpZGxheW91dCAgPSBuZXcgR3JpZExheW91dCgpOwotICAgIAotICAgIGdyaWRsYXlvdXQubnVtQ29sdW1ucyAgPSBjb2x1bW5zOwotICAKLSAgICBpZiggbWFyZ2luSGVpZ2h0ID49IDAgKSBncmlkbGF5b3V0Lm1hcmdpbkhlaWdodCA9IG1hcmdpbkhlaWdodDsKLSAgICBpZiggbWFyZ2luV2lkdGggPj0gMCApICBncmlkbGF5b3V0Lm1hcmdpbldpZHRoICA9IG1hcmdpbldpZHRoOwotICAgICAgICAKLSAgICB0b29sdGlwID0gdG9vbHRpcCA9PSBudWxsID8gZ3JvdXBOYW1lIDogdG9vbHRpcDsKLSAgICBuZXdHcm91cC5zZXRMYXlvdXQoIGdyaWRsYXlvdXQgKTsKLSAgICBuZXdHcm91cC5zZXRUZXh0KCAgZ3JvdXBOYW1lICApOwotICAgIG5ld0dyb3VwLnNldExheW91dERhdGEoIGdyaWRkYXRhICk7Ci0gICAgbmV3R3JvdXAuc2V0VG9vbFRpcFRleHQoICB0b29sdGlwICk7Ci0gICAgCi0gICAgaWYoIGluZm9wb3AgIT0gbnVsbCApIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAobmV3R3JvdXAsIGluZm9Qb3BpZF8gKyAiLiIgKyBpbmZvcG9wKTsKLSAgICAKLSAgICByZXR1cm4gbmV3R3JvdXA7Ci0gIH0KLSAgCi0gIHB1YmxpYyBUcmVlIGNyZWF0ZVRyZWUoIENvbXBvc2l0ZSBwYXJlbnQsIFN0cmluZyB0b29sdGlwLCBTdHJpbmcgaW5mb3BvcCwgaW50IHN0eWxlICkKLSAgewotICAgIAotICAgIHRvb2x0aXAgPSB0b29sdGlwID09IG51bGwgPyAiIiA6IHRvb2x0aXA7Ci0gICAgCi0gICAgVHJlZSB0cmVlID0gbmV3IFRyZWUoIHBhcmVudCwgc3R5bGUgKTsKLSAgICAgCi0gICAgdHJlZS5zZXRMYXlvdXREYXRhKCBjcmVhdGVGaWxsQWxsKCkgKTsKLSAgICB0cmVlLnNldFRvb2xUaXBUZXh0KCB0b29sdGlwKTsKLSAgICAKLSAgICBpZiggaW5mb3BvcCAhPSBudWxsICkgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscCggdHJlZSwgaW5mb1BvcGlkXyArICIuIiArIGluZm9wb3AgKTsKLSAgICAKLSAgICByZXR1cm4gdHJlZTsgICAgICAKLSAgICAKLSAgfQotICAKLSAgcHVibGljIFRhYmxlIGNyZWF0ZVRhYmxlKCBDb21wb3NpdGUgcGFyZW50LCBTdHJpbmcgdG9vbHRpcCwgU3RyaW5nIGluZm9wb3AsIGludCBzdHlsZSApCi0gIHsKLSAgICAKLSAgICB0b29sdGlwID0gdG9vbHRpcCA9PSBudWxsID8gIiIgOiB0b29sdGlwOwotICAgIAotICAgIFRhYmxlIHRhYmxlID0gbmV3IFRhYmxlKCBwYXJlbnQsIHN0eWxlICk7Ci0gICAgIAotICAgIC8vdGFibGUuc2V0TGF5b3V0RGF0YSggY3JlYXRlRmlsbEFsbCgpICk7Ci0gICAgdGFibGUuc2V0VG9vbFRpcFRleHQoIHRvb2x0aXApOwotICAgIAotICAgIGlmKCBpbmZvcG9wICE9IG51bGwgKSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKCB0YWJsZSwgaW5mb1BvcGlkXyArICIuIiArIGluZm9wb3AgKTsKLSAgICAKLSAgICByZXR1cm4gdGFibGU7ICAgICAgCi0gICAgCi0gIH0gIAotICAKLSAgcHVibGljIExhYmVsIGNyZWF0ZUhvcml6b250YWxTZXBhcmF0b3IoIENvbXBvc2l0ZSBwYXJlbnQsIGludCBzcGFjaW5nICkKLSAgewotICAgIENvbXBvc2l0ZSBjb21wb3NpdGUgPSBjcmVhdGVDb21wb3NpdGUoIHBhcmVudCwgMSwgc3BhY2luZywgLTEgKTsKLSAgICAgCi0JTGFiZWwgc2VwYXJhdG9yID0gbmV3IExhYmVsKCBjb21wb3NpdGUsIFNXVC5TRVBBUkFUT1IgfCBTV1QuSE9SSVpPTlRBTCApOwotCQotCUdyaWREYXRhIGdyaWRkYXRhICA9IG5ldyBHcmlkRGF0YSggR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMIHwgR3JpZERhdGEuR1JBQl9IT1JJWk9OVEFMICk7Ci0Jc2VwYXJhdG9yLnNldExheW91dERhdGEoIGdyaWRkYXRhICk7Ci0gICAKLQlyZXR1cm4gc2VwYXJhdG9yOwotICB9Ci0gIAotICBwdWJsaWMgR3JpZERhdGEgY3JlYXRlRmlsbEFsbCgpCi0gIHsKLQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCBHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwgfAotCQkJICAgICAgICAgICAgICAgICAgICAgIEdyaWREYXRhLkdSQUJfSE9SSVpPTlRBTCB8Ci0JCQkgICAgICAgICAgICAgICAgICAgICAgR3JpZERhdGEuVkVSVElDQUxfQUxJR05fRklMTCB8Ci0JCQkgICAgICAgICAgICAgICAgICAgICAgR3JpZERhdGEuR1JBQl9WRVJUSUNBTCApOwotICAgIHJldHVybiBkYXRhOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBjcmVhdGVJbmZvUG9wKENvbnRyb2wgY3RybCwgU3RyaW5nIGluZm9wb3ApCi0gIHsKLQkgIGlmKCBpbmZvcG9wICE9IG51bGwgKSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKCBjdHJsLCBpbmZvUG9waWRfICsgIi4iICsgaW5mb3BvcCApOwotICB9Ci0gIAotICAvKioKLSAgICogUmVzaXplcyB0aGUgd2lkdGggb2YgdGhlIHRhcmdldCBjb21wb3NpdGUgc28gdGhhdCBpdCBpcyBhcyB3aWRlIGFzIHRoZQotICAgKiByZWZlcmVuY2UgY29tcG9zaXRlIHBsdXMgYSBwYWRkaW5nIHZhbHVlLiAgCi0gICAqIAotICAgKiBAcGFyYW0gdGFyZ2V0IFRoZSBjb21wb3NpdGUgdG8gcmVzaXplLgotICAgKiBAcGFyYW0gcmVmZXJlbmNlIFRoZSByZWZlcmVuY2UgY29tcG9zaXRlCi0gICAqIEBwYXJhbSBwYWRkaW5nIFRoZSBwYWRkaW5nIHZhbHVlCi0gICAqLwotICBwdWJsaWMgdm9pZCBob3Jpem9udGFsUmVzaXplKENvbXBvc2l0ZSB0YXJnZXQsIENvbXBvc2l0ZSByZWZlcmVuY2UsIGludCBwYWRkaW5nKSB7Ci0JCQotCQlQb2ludCBvcmlnaW5hbFNpemUgID0gdGFyZ2V0LmdldFNpemUoKTsKLQkJUG9pbnQgcmVmZXJlbmNlU2l6ZSA9IHJlZmVyZW5jZS5nZXRTaXplKCk7Ci0JCQotCQlwYWRkaW5nID0gcGFkZGluZyA+PSAwID8gcGFkZGluZyA6IERFRkFVTFRfUEFERElORzsKLQkJCi0JCWlmIChyZWZlcmVuY2VTaXplLnggKyBwYWRkaW5nID4gb3JpZ2luYWxTaXplLngpCi0JCQl0YXJnZXQuc2V0U2l6ZShyZWZlcmVuY2VTaXplLnggKyBwYWRkaW5nLCBvcmlnaW5hbFNpemUueSk7Ci0gIH0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9kaWFsb2cvRGlhbG9nVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvZGlhbG9nL0RpYWxvZ1V0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlOGYyNTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9kaWFsb2cvRGlhbG9nVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuZGlhbG9nOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklDb250YWluZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JSmF2YUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YU1vZGVsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLnNlYXJjaC5JSmF2YVNlYXJjaFNjb3BlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLnNlYXJjaC5TZWFyY2hFbmdpbmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LnVpLklKYXZhRWxlbWVudFNlYXJjaENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQudWkuSmF2YVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLm9wZXJhdGlvbi5JUnVubmFibGVDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5JV2l6YXJkQ29udGFpbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uRmlsdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuV1NVSVBsdWdpbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuQ29udGFpbmVyU2VsZWN0aW9uRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuU2VsZWN0aW9uRGlhbG9nOwotCi0KLS8qKgotKiBDb250YWlucyB1dGlsaXR5IG1ldGhvZHMgZm9yIGxhdW5jaGluZyB2YXJpb3VzIGNvbW1vbiBkaWFsb2dzLgotKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBEaWFsb2dVdGlscwotewotCi0gIC8qKgotICAqIFJhaXNlcyBhIGRpYWxvZyBmb3IgYnJvd3NpbmcgY29udGFpbmVycy4KLSAgKiBAcGFyYW0gcGFyZW50U2hlbGwgVGhlIHBhcmVudCBzaGVsbCwgb3B0aW9uYWxseSBudWxsLgotICAqIEBwYXJhbSBpbml0aWFsUGF0aG5hbWUgVGhlIGluaXRpYWwgc2VsZWN0aW9uLgotICAqIEByZXR1cm4gVGhlIHNlbGVjdGVkIGNvbnRhaW5lciBvciBudWxsIGlmIHRoZSBkaWFsb2cKLSAgKiBpcyBjYW5jZWxsZWQsIG9yIHRoZXJlIGlzIG5vIHNlbGVjdGlvbiwgb3IgdGhlIHNlbGVjdGlvbgotICAqIGlzIG5vdCBhIHByb2plY3Qgb3IgYSBmb2xkZXIuCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGJyb3dzZUNvbnRhaW5lcnMgKCBTaGVsbCBwYXJlbnRTaGVsbCwgU3RyaW5nIGluaXRpYWxQYXRobmFtZSApCi0gIHsKLSAgICBTdHJpbmcgc2VsZWN0ZWRQYXRobmFtZSA9IG51bGw7Ci0gICAgSVBhdGggaW5pdGlhbFBhdGggPSBuZXcgUGF0aChpbml0aWFsUGF0aG5hbWUpOwotICAgIElSZXNvdXJjZSBpbml0aWFsUmVzb3VyY2UgPSBSZXNvdXJjZVV0aWxzLmdldFdvcmtzcGFjZVJvb3QoKS5maW5kTWVtYmVyKGluaXRpYWxQYXRoKTsKLSAgICBpZiAoaW5pdGlhbFJlc291cmNlID09IG51bGwpCi0gICAgewotICAgICAgaWYgKGluaXRpYWxQYXRoLnNlZ21lbnRDb3VudCgpID09IDEpCi0gICAgICB7Ci0gICAgICAgIGluaXRpYWxSZXNvdXJjZSA9IFJlc291cmNlVXRpbHMuZ2V0V29ya3NwYWNlUm9vdCgpLmdldFByb2plY3QoaW5pdGlhbFBhdGguc2VnbWVudCgwKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChpbml0aWFsUGF0aC5zZWdtZW50Q291bnQoKSA+IDEpCi0gICAgICB7Ci0gICAgICAgIGluaXRpYWxSZXNvdXJjZSA9IFJlc291cmNlVXRpbHMuZ2V0V29ya3NwYWNlUm9vdCgpLmdldEZvbGRlcihpbml0aWFsUGF0aCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBpZiAoaW5pdGlhbFJlc291cmNlLmdldFR5cGUoKSA9PSBJUmVzb3VyY2UuRklMRSkKLSAgICAgIHsKLSAgICAgICAgaW5pdGlhbFJlc291cmNlID0gaW5pdGlhbFJlc291cmNlLmdldFBhcmVudCgpOwotICAgICAgfQotICAgIH0KLSAgICBDb250YWluZXJTZWxlY3Rpb25EaWFsb2cgZGlhbG9nID0gbmV3IENvbnRhaW5lclNlbGVjdGlvbkRpYWxvZyhwYXJlbnRTaGVsbCwoSUNvbnRhaW5lcilpbml0aWFsUmVzb3VyY2UsdHJ1ZSxudWxsKTsKLSAgICBkaWFsb2cub3BlbigpOwotICAgIE9iamVjdFtdIHJlc3VsdCA9IGRpYWxvZy5nZXRSZXN1bHQoKTsKLSAgICBpZiAocmVzdWx0ICE9IG51bGwgJiYgcmVzdWx0Lmxlbmd0aCA+IDApCi0gICAgewotICAgICAgaWYgKHJlc3VsdFswXSBpbnN0YW5jZW9mIElQYXRoKQotICAgICAgewotICAgICAgICBJUGF0aCBwYXRoID0gKElQYXRoKXJlc3VsdFswXTsKLSAgICAgICAgc2VsZWN0ZWRQYXRobmFtZSA9IHBhdGgudG9TdHJpbmcoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHNlbGVjdGVkUGF0aG5hbWU7Ci0gIH0KLQotICAvKioKLSAgKiBSYWlzZXMgYSBkaWFsb2cgZm9yIGJyb3dzaW5nIHJlc291cmNlcy4KLSAgKiBAcGFyYW0gcGFyZW50U2hlbGwgVGhlIHBhcmVudCBzaGVsbCwgb3B0aW9uYWxseSBudWxsLgotICAqIEBwYXJhbSB0b3BSZXNvdXJjZSBUaGUgcmVzb3VyY2UgdW5kZXIgd2hpY2ggdG8gYnJvd3NlLgotICAqIElmIG51bGwsIGFsbCByZXNvdXJjZXMgaW4gdGhlIHdvcmtzcGFjZSBhcmUgYnJvd3NlZC4KLSAgKiBAcGFyYW0gaW5pdGlhbFNlbGVjdGlvbiBUaGUgaW5pdGlhbCBzZWxlY3Rpb24sIG9yIG51bGwgZm9yIG5vbmUuCi0gICogSWYgdGhlIGluaXRpYWwgc2VsZWN0aW9uIGlzIG5vdCBudWxsIGFuZCBleGlzdHMgaW4gdGhlIHNldCBvZgotICAqIHJlc291cmNlcyBmb3VuZCBieSB0aGUgYnJvd3NlciwgdGhhdCByZXNvdXJjZSBpcyBzZWxlY3RlZCBieSBkZWZhdWx0LgotICAqIEBwYXJhbSBmaWx0ZXIgVGhlIHJlc291cmNlIGZpbHRlciBvYmplY3QuCi0gICogQHJldHVybiBUaGUgc2VsZWN0ZWQgcmVzb3VyY2UuCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgSVJlc291cmNlIGJyb3dzZVJlc291cmNlcyAoIFNoZWxsIHBhcmVudFNoZWxsLCBJUmVzb3VyY2UgdG9wUmVzb3VyY2UsIElSZXNvdXJjZSBpbml0aWFsU2VsZWN0aW9uLCBGaWx0ZXIgZmlsdGVyKQotICB7Ci0gICAgUmVzb3VyY2VTZWxlY3Rpb25EaWFsb2cgcmRzID0gbmV3IFJlc291cmNlU2VsZWN0aW9uRGlhbG9nKHBhcmVudFNoZWxsLHRvcFJlc291cmNlLGluaXRpYWxTZWxlY3Rpb24sZmlsdGVyKTsKLSAgICByZHMuc2V0TXVsdGlwbGVTZWxlY3Rpb25FbmFibGVkKGZhbHNlKTsKLSAgICBpZiAocmRzLm9wZW4oKSA9PSBEaWFsb2cuT0spCi0gICAgewotICAgICAgSVJlc291cmNlW10gcmVzb3VyY2VzID0gcmRzLmdldFJlc3VsdCgpOwotICAgICAgaWYgKHJlc291cmNlcyAhPSBudWxsICYmIHJlc291cmNlcy5sZW5ndGggPiAwKQotICAgICAgewotICAgICAgICByZXR1cm4gcmVzb3VyY2VzWzBdOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAqIDxiPkltcGxlbWVudGF0aW9uIHJlbWFpbnMgVEJELjwvYj48YnI+Ci0gICogUmFpc2VzIGEgZGlhbG9nIGZvciBicm93c2luZyBjbGFzc2VzIG9uIGEgcHJvamVjdCdzIGNsYXNzIHBhdGguCi0gICogQHBhcmFtIHBhcmVudFNoZWxsIFRoZSBwYXJlbnQgc2hlbGwsIG9wdGlvbmFsbHkgbnVsbC4KLSAgKiBAcGFyYW0gcHJvamVjdCBUaGUgcHJvamVjdC4KLSAgKiBAcmV0dXJuIFRoZSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgc2VsZWN0ZWQgamF2YSBjbGFzcy4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgYnJvd3NlQ2xhc3NlcyAoIFNoZWxsIHBhcmVudFNoZWxsLCBJUHJvamVjdCBwcm9qZWN0ICkKLSAgewotICAgIHJldHVybiBicm93c2VDbGFzc2VzKHBhcmVudFNoZWxsLCBwcm9qZWN0LCAoSVJ1bm5hYmxlQ29udGV4dCludWxsKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGJyb3dzZUNsYXNzZXMgKCBTaGVsbCBwYXJlbnRTaGVsbCwgSVByb2plY3QgcHJvamVjdCwgSVdpemFyZENvbnRhaW5lciBjb250YWluZXIpCi0gIHsKLSAgICByZXR1cm4gYnJvd3NlQ2xhc3NlcyhwYXJlbnRTaGVsbCwgcHJvamVjdCwgKElSdW5uYWJsZUNvbnRleHQpY29udGFpbmVyKTsKLSAgfQotCi0gIC8qKgotICAqIFJhaXNlcyBhIGRpYWxvZyBmb3IgYnJvd3NpbmcgY2xhc3NlcyBvbiBhIHByb2plY3QncyBjbGFzcyBwYXRoLgotICAqIEBwYXJhbSBwYXJlbnRTaGVsbCBUaGUgcGFyZW50IHNoZWxsLCBvcHRpb25hbGx5IG51bGwuCi0gICogQHBhcmFtIHByb2plY3QgVGhlIHByb2plY3QuCi0gICogQHBhcmFtIGNvbnRhaW5lciBUaGUgY29udGFpbmVyIG9mIHRoZSBsYXVuY2hpbmcgd2l6YXJkLgotICAqIEByZXR1cm4gVGhlIHF1YWxpZmllZCBuYW1lIG9mIHRoZSBzZWxlY3RlZCBqYXZhIGNsYXNzLgotICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBicm93c2VDbGFzc2VzICggU2hlbGwgcGFyZW50U2hlbGwsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVByb2plY3QgcHJvamVjdCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUnVubmFibGVDb250ZXh0IGN0eHQpIAotICB7Ci0gICAgcmV0dXJuIGJyb3dzZUNsYXNzZXMocGFyZW50U2hlbGwsIG5ldyBJUmVzb3VyY2VbXSB7cHJvamVjdH0sIGN0eHQpOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIFN0cmluZyBicm93c2VDbGFzc2VzKFNoZWxsIHBhcmVudFNoZWxsLCBJUmVzb3VyY2VbXSByZXNvdXJjZXMsIElSdW5uYWJsZUNvbnRleHQgY3R4dCkKLSAgewotICAgIElUeXBlIGl0eXBlID0gYnJvd3NlQ2xhc3Nlc0FzSVR5cGUocGFyZW50U2hlbGwsIHJlc291cmNlcywgY3R4dCk7Ci0gICAgaWYgKGl0eXBlICE9IG51bGwpCi0gICAgICByZXR1cm4gaXR5cGUuZ2V0RnVsbHlRdWFsaWZpZWROYW1lKCk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgSVR5cGUgYnJvd3NlQ2xhc3Nlc0FzSVR5cGUoU2hlbGwgcGFyZW50U2hlbGwsIElSZXNvdXJjZVtdIHJlc291cmNlcywgSVJ1bm5hYmxlQ29udGV4dCBjdHh0KQotICB7Ci0JVmVjdG9yIGphdmFFbGVtZW50cyA9IG5ldyBWZWN0b3IoKTsKLQlmb3IgKGludCBpID0gMDsgaSA8IHJlc291cmNlcy5sZW5ndGg7IGkrKykKLQl7Ci0JICBJSmF2YUVsZW1lbnQgamF2YUVsZW1lbnQgPSBKYXZhQ29yZS5jcmVhdGUocmVzb3VyY2VzW2ldKTsKLQkgIGlmIChqYXZhRWxlbWVudCAhPSBudWxsKQotCSAgICBqYXZhRWxlbWVudHMuYWRkKGphdmFFbGVtZW50KTsKLQl9Ci0JSUphdmFFbGVtZW50W10gZWxlbWVudHMgPSAoSUphdmFFbGVtZW50W10pamF2YUVsZW1lbnRzLnRvQXJyYXkobmV3IElKYXZhRWxlbWVudFswXSk7Ci0JCi0gICAgSUphdmFTZWFyY2hTY29wZSBzY29wZSA9IFNlYXJjaEVuZ2luZS5jcmVhdGVKYXZhU2VhcmNoU2NvcGUoZWxlbWVudHMpOwotICAgIHNjb3BlLnNldEluY2x1ZGVzQ2xhc3NwYXRocyh0cnVlKTsKLSAgICBzY29wZS5zZXRJbmNsdWRlc0JpbmFyaWVzKHRydWUpOwotCi0gICAgLy9DcmVhdGluZyBhbmQgb3BlbmluZyBhIFR5cGVTZWxlY3Rpb25EaWFsb2cKLSAgICB0cnkKLQl7Ci0gICAgICBTZWxlY3Rpb25EaWFsb2cgZGlhbG9nID0gSmF2YVVJLmNyZWF0ZVR5cGVEaWFsb2cocGFyZW50U2hlbGwsIGN0eHQsIHNjb3BlLCBJSmF2YUVsZW1lbnRTZWFyY2hDb25zdGFudHMuQ09OU0lERVJfQ0xBU1NFUywgZmFsc2UpOwotICAgICAgZGlhbG9nLnNldFRpdGxlKFdTVUlQbHVnaW5NZXNzYWdlcy5ESUFMT0dfVElUTEVfQ0xBU1NfQlJPV1NFKTsKLSAgICAgIGRpYWxvZy5zZXRNZXNzYWdlKFdTVUlQbHVnaW5NZXNzYWdlcy5ESUFMT0dfVElUTEVfQ0xBU1NfQlJPV1NFKTsgICAgCi0gICAgICBkaWFsb2cub3BlbigpOwotCi0gICAgICAvL0dldHRpbmcgdGhlIHJlc3VsdCBhbmQgcmV0dXJuaW5nIGl0Ci0gICAgICBPYmplY3RbXSByZXN1bHRzID0gZGlhbG9nLmdldFJlc3VsdCgpOwotICAgICAgaWYgKHJlc3VsdHMgIT0gbnVsbCAmJiByZXN1bHRzLmxlbmd0aCA+IDApCi0gICAgICB7Ci0gICAgICAgIGlmIChyZXN1bHRzWzBdIGluc3RhbmNlb2YgSVR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gKElUeXBlKXJlc3VsdHNbMF07Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBqbWUpCi0JewotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAqIFJhaXNlcyBhIGRpYWxvZyBmb3IgYnJvd3NpbmcgaW50ZXJmYWNlcyBvbiBhIHByb2plY3QncyBjbGFzcyBwYXRoLgotICAqIEBwYXJhbSBwYXJlbnRTaGVsbCBUaGUgcGFyZW50IHNoZWxsLCBvcHRpb25hbGx5IG51bGwuCi0gICogQHBhcmFtIHByb2plY3QgVGhlIHByb2plY3QuCi0gICogQHBhcmFtIGNvbnRhaW5lciBUaGUgY29udGFpbmVyIG9mIHRoZSBsYXVuY2hpbmcgd2l6YXJkLgotICAqIEByZXR1cm4gVGhlIHF1YWxpZmllZCBuYW1lIG9mIHRoZSBzZWxlY3RlZCBqYXZhIGludGVyZmFjZS4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgYnJvd3NlSW50ZXJmYWNlcyggU2hlbGwgcGFyZW50U2hlbGwsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUHJvamVjdCBwcm9qZWN0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVdpemFyZENvbnRhaW5lciBjb250YWluZXIpIAotICAJCQkJCQkJCQkgICAgCi0gIHsKLSAgICBTdHJpbmcgaW50ZXJmYWNlTmFtZSA9IG51bGw7Ci0KLSAgICAvL0xpbWl0aW5nIHNlYXJjaCBzY29wZSB0byB0aGUgcHJvamVjdAotICAgIElSZXNvdXJjZVtdIHJlc291cmNlcyA9IG5ldyBJUmVzb3VyY2VbMV07Ci0gICAgcmVzb3VyY2VzWzBdPXByb2plY3Q7Ci0JSUphdmFFbGVtZW50W10gZWxlbWVudHMgPSBuZXcgSUphdmFFbGVtZW50WzFdOwotCWVsZW1lbnRzWzBdID0gSmF2YUNvcmUuY3JlYXRlKHJlc291cmNlc1swXSk7Ci0gICAgSUphdmFTZWFyY2hTY29wZSBzY29wZSA9IFNlYXJjaEVuZ2luZS5jcmVhdGVKYXZhU2VhcmNoU2NvcGUoZWxlbWVudHMpOwotICAgIHNjb3BlLnNldEluY2x1ZGVzQ2xhc3NwYXRocyh0cnVlKTsKLSAgICBzY29wZS5zZXRJbmNsdWRlc0JpbmFyaWVzKHRydWUpOwotCi0gICAgLy9DcmVhdGluZyBhbmQgb3BlbmluZyBhIFR5cGVTZWxlY3Rpb25EaWFsb2cKLSAgICB0cnkKLQl7Ci0gICAgCVNlbGVjdGlvbkRpYWxvZyBkaWFsb2cgPSBKYXZhVUkuY3JlYXRlVHlwZURpYWxvZyhwYXJlbnRTaGVsbCwgY29udGFpbmVyLCBzY29wZSwgSUphdmFFbGVtZW50U2VhcmNoQ29uc3RhbnRzLkNPTlNJREVSX1RZUEVTLCBmYWxzZSk7Ci0gICAgCWRpYWxvZy5zZXRUaXRsZShXU1VJUGx1Z2luTWVzc2FnZXMuRElBTE9HX1RJVExFX0lOVEVSRkFDRV9CUk9XU0UpOwotICAgIAlkaWFsb2cuc2V0TWVzc2FnZShXU1VJUGx1Z2luTWVzc2FnZXMuRElBTE9HX1RJVExFX0lOVEVSRkFDRV9CUk9XU0UpOyAgICAKLSAgICAJZGlhbG9nLm9wZW4oKTsKLQotICAgIAkvL0dldHRpbmcgdGhlIHJlc3VsdCBhbmQgcmV0dXJuaW5nIGl0Ci0gICAgCU9iamVjdFtdIHJlc3VsdHMgPSBkaWFsb2cuZ2V0UmVzdWx0KCk7Ci0gICAgCWlmIChyZXN1bHRzICE9IG51bGwgJiYgcmVzdWx0cy5sZW5ndGggPiAwKQotICAgIAl7Ci0gICAgCQlpZiAocmVzdWx0c1swXSBpbnN0YW5jZW9mIElUeXBlKQotICAgIAkJewotICAgIAkJCUlUeXBlIHJlc3VsdEludGVyZmFjZSA9IChJVHlwZSlyZXN1bHRzWzBdOwotICAgIAkJCWludGVyZmFjZU5hbWUgPSByZXN1bHRJbnRlcmZhY2UuZ2V0RnVsbHlRdWFsaWZpZWROYW1lKCk7Ci0gICAgCQl9Ci0gICAgCX0KLSAgICB9Ci0gICAgY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBqbWUpCi0JewotICAgIH0KLSAgICAKLSAgICByZXR1cm4gaW50ZXJmYWNlTmFtZTsKLSAgfSAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvZGlhbG9nL1Jlc291cmNlU2VsZWN0aW9uRGlhbG9nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL2RpYWxvZy9SZXNvdXJjZVNlbGVjdGlvbkRpYWxvZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZGUzYmVhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvZGlhbG9nL1Jlc291cmNlU2VsZWN0aW9uRGlhbG9nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLmRpYWxvZzsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkRlY29yYXRpbmdMYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UcmVlVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyRmlsdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uQW55RmlsdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uRmlsdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkuV1NVSVBsdWdpbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC51aS5wbHVnaW4uV2ViU2VydmljZVVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLm1vZGVsLldvcmtiZW5jaENvbnRlbnRQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5tb2RlbC5Xb3JrYmVuY2hMYWJlbFByb3ZpZGVyOwotCi0KLS8qKgotKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgZGlhbG9nIGZvciBicm93c2luZyB3b3Jrc3BhY2UgcmVzb3VyY2VzLgotKiBTZWUgYWxzbyB7QGxpbmsgRGlhbG9nVXRpbHMjYnJvd3NlUmVzb3VyY2VzfS4KLSovCi1wdWJsaWMgY2xhc3MgUmVzb3VyY2VTZWxlY3Rpb25EaWFsb2cgZXh0ZW5kcyBEaWFsb2cgaW1wbGVtZW50cyBMaXN0ZW5lcgotewotCi0gIC8vIERpYWxvZyBjb250cm9scy4KLSAgLy8KLSAgcHJpdmF0ZSBMYWJlbCBmaWx0ZXJMYWJlbF87Ci0gIHByaXZhdGUgQ29tYm8gZmlsdGVyQ29tYm9fOwotICAvKkNPTlRFWFRfSUQgRFJFUzAwMDEgZm9yIHRoZSBSZXNvdXJjZSBUeXBlIGNvbWJvIGJveCBvZiB0aGUgUmVzb3VyY2UgU2VsZWN0aW9uIERpYWxvZyovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJTkZPUE9QX0RSRVNfQ09NQk9fUkVTT1VSQ0VfVFlQRSA9IFdlYlNlcnZpY2VVSVBsdWdpbi5JRCArICIuRFJFUzAwMDEiOwotCi0gIHByaXZhdGUgVHJlZSByZXNvdXJjZVRyZWVfOwotICBwcml2YXRlIFRyZWVWaWV3ZXIgZmlsZVZpZXdlcl87Ci0gIC8qQ09OVEVYVF9JRCBEUkVTMDAwMiBmb3IgdGhlIFJlc291cmNlIHRyZWUgb2YgdGhlIFJlc291cmNlIFNlbGVjdGlvbiBEaWFsb2cqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5GT1BPUF9EUkVTX1RSRUVfUkVTT1VSQ0UgPSBXZWJTZXJ2aWNlVUlQbHVnaW4uSUQgKyAiLkRSRVMwMDAyIjsKLQotICAvLwotICAvLyBFc3NlbnRpYWwgZ29vZGllcy4KLSAgLy8KLSAgcHJpdmF0ZSBJUmVzb3VyY2Ugcm9vdF87Ci0gIHByaXZhdGUgSVJlc291cmNlIGluaXRpYWxTZWxlY3Rpb25fOwotICBwcml2YXRlIEZpbHRlcltdIGZpbHRlcnNfOwotICBwcml2YXRlIEZpbHRlciBjdXJyZW50RmlsdGVyXzsKLSAgcHJpdmF0ZSBJUmVzb3VyY2VbXSBzZWxlY3Rpb25fOwotICBwcml2YXRlIGJvb2xlYW4gbXVsdGlwbGVTZWxlY3Rpb25FbmFibGVkXzsKLQotICAvKioKLSAgKiBDb25zdHJ1Y3RzIGEgbmV3IDxjb2RlPlJlc291cmNlU2VsZWN0aW9uRGlhbG9nPC9jb2RlPgotICAqIHVuZGVyIHRoZSBnaXZlbiA8Y29kZT5wYXJlbnQgU2hlbGw8L2NvZGU+LgotICAqIFRoZSBkaWFsb2cgcmVuZGVycyBhbGwgcmVzb3VyY2VzIGluY2x1ZGluZyBhbmQKLSAgKiB1bmRlciB0aGUgZ2l2ZW4gPGNvZGU+cm9vdCBJUmVzb3VyY2U8L2NvZGU+LgotICAqIEBwYXJhbSBwYXJlbnQgVGhlIHBhcmVudCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGx9LAotICAqIG9yIG51bGwgdG8gY3JlYXRlIGEgdG9wLWxldmVsIHNoZWxsLgotICAqIEBwYXJhbSByb290IFRoZSByb290IHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2V9LAotICAqIG9yIG51bGwgdG8gYmVnaW4gd2l0aCB0aGUgd29ya3NwYWNlIHJvb3QuCi0gICogQHBhcmFtIGluaXRpYWxTZWxlY3Rpb24gVGhlIGluaXRpYWxseSBzZWxlY3RlZCBvYmplY3Qgb3IgbnVsbCBpZiBub25lLgotICAqLwotICBwdWJsaWMgUmVzb3VyY2VTZWxlY3Rpb25EaWFsb2cgKCBTaGVsbCBwYXJlbnQsIElSZXNvdXJjZSByb290LCBJUmVzb3VyY2UgaW5pdGlhbFNlbGVjdGlvbiApCi0gIHsKLSAgICB0aGlzKHBhcmVudCxyb290LGluaXRpYWxTZWxlY3Rpb24sbmV3IEZpbHRlcltdIHtuZXcgQW55RmlsdGVyKCl9KTsKLSAgfQotCi0gIC8qKgotICAqIENvbnN0cnVjdHMgYSBuZXcgPGNvZGU+UmVzb3VyY2VTZWxlY3Rpb25EaWFsb2c8L2NvZGU+Ci0gICogdW5kZXIgdGhlIGdpdmVuIDxjb2RlPnBhcmVudCBTaGVsbDwvY29kZT4uCi0gICogVGhlIGRpYWxvZyByZW5kZXJzIGFsbCByZXNvdXJjZXMgaW5jbHVkaW5nIGFuZAotICAqIHVuZGVyIHRoZSBnaXZlbiA8Y29kZT5yb290IElSZXNvdXJjZTwvY29kZT4gdGhhdAotICAqIGFyZSBhY2NlcHRlZCBieSB0aGUgZ2l2ZW4gZmlsdGVyLgotICAqIFNlZSB7QGxpbmsgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5GaWx0ZXIjYWNjZXB0c30uCi0gICogQHBhcmFtIHBhcmVudCBUaGUgcGFyZW50IHtAbGluayBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbH0sCi0gICogb3IgbnVsbCB0byBjcmVhdGUgYSB0b3AtbGV2ZWwgc2hlbGwuCi0gICogQHBhcmFtIHJvb3QgVGhlIHJvb3Qge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZX0sCi0gICogb3IgbnVsbCB0byBiZWdpbiB3aXRoIHRoZSB3b3Jrc3BhY2Ugcm9vdC4KLSAgKiBAcGFyYW0gaW5pdGlhbFNlbGVjdGlvbiBUaGUgaW5pdGlhbGx5IHNlbGVjdGVkIG9iamVjdCBvciBudWxsIGlmIG5vbmUuCi0gICogQHBhcmFtIGZpbHRlciBUaGUge0BsaW5rIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uRmlsdGVyfSwKLSAgKiBvciBudWxsIHRvIGRlZmF1bHQgdG8gYWxsIHJlc291cmNlcyB1bmRlciB0aGUgPGNvZGU+cm9vdDwvY29kZT4uCi0gICovCi0gIHB1YmxpYyBSZXNvdXJjZVNlbGVjdGlvbkRpYWxvZyAoIFNoZWxsIHBhcmVudCwgSVJlc291cmNlIHJvb3QsIElSZXNvdXJjZSBpbml0aWFsU2VsZWN0aW9uLCBGaWx0ZXIgZmlsdGVyICkKLSAgewotICAgIHRoaXMocGFyZW50LHJvb3QsaW5pdGlhbFNlbGVjdGlvbixuZXcgRmlsdGVyW10ge2ZpbHRlcn0pOwotICB9Ci0KLSAgLyoqCi0gICogQ29uc3RydWN0cyBhIG5ldyA8Y29kZT5SZXNvdXJjZVNlbGVjdGlvbkRpYWxvZzwvY29kZT4KLSAgKiB1bmRlciB0aGUgZ2l2ZW4gPGNvZGU+cGFyZW50IFNoZWxsPC9jb2RlPi4KLSAgKiBUaGUgZGlhbG9nIHJlbmRlcnMgYWxsIHJlc291cmNlcyBpbmNsdWRpbmcgYW5kCi0gICogdW5kZXIgdGhlIGdpdmVuIDxjb2RlPnJvb3QgSVJlc291cmNlPC9jb2RlPiB0aGF0Ci0gICogYXJlIGFjY2VwdGVkIGJ5IHRoZSBnaXZlbiBmaWx0ZXJzLgotICAqIFNlZSB7QGxpbmsgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5GaWx0ZXIjYWNjZXB0c30uCi0gICogQHBhcmFtIHBhcmVudCBUaGUgcGFyZW50IHtAbGluayBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbH0uCi0gICogb3IgbnVsbCB0byBjcmVhdGUgYSB0b3AtbGV2ZWwgc2hlbGwuCi0gICogQHBhcmFtIHJvb3QgVGhlIHJvb3Qge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZX0sCi0gICogb3IgbnVsbCB0byBiZWdpbiB3aXRoIHRoZSB3b3Jrc3BhY2Ugcm9vdC4KLSAgKiBAcGFyYW0gaW5pdGlhbFNlbGVjdGlvbiBUaGUgaW5pdGlhbGx5IHNlbGVjdGVkIG9iamVjdCBvciBudWxsIGlmIG5vbmUuCi0gICogQHBhcmFtIGZpbHRlcnMgQW4gYXJyYXkgb2Yge0BsaW5rIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uRmlsdGVyfQotICAqIG9iamVjdHMuCi0gICogSWYgdGhlIGFycmF5IGlzIG51bGwgb3Igb2YgbGVuZ3RoIHplcm8sIHRoZW4gYWxsIHJlc291cmNlcyBhcmUgYWNjZXB0ZWQKLSAgKiAoaWUuIGVxdWl2YWxlbnQgdG8gPGNvZGU+UmVzb3VyY2VTZWxlY3Rpb25EaWFsb2cocGFyZW50LHJvb3QpPC9jb2RlPi4KLSAgKiBJZiB0aGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG9uZSwgdGhlbiB0aGUgZGlhbG9nIHdpbGwgY29uc2lzdCBvZiBhIHNpbmdsZQotICAqIGNvbnRyb2wgc2hvd2luZyBhIGxpc3Qgb2YgYWxsIGZpbHRlcmVkIHJlc291cmNlcy4KLSAgKiBJZiB0aGUgYXJyYXkgaXMgb2YgbGVuZ3RoIGdyZWF0ZXIgdGhhbiBvbmUsIHRoZW4gdGhlIGRpYWxvZyB3aWxsCi0gICogY29uc2lzdCBvZiBhIGNvbWJvIGJveCBjb250YWluaW5nIHRoZSBuYW1lcyBvZiB0aGUgZmlsdGVycyBhbmQgd2l0aCB0aGUKLSAgKiBmaXJzdCBmaWx0ZXIgKGllLiA8Y29kZT5maWx0ZXJzWzBdPC9jb2RlPikgc2VsZWN0ZWQgYnkgZGVmYXVsdCwgZm9sbG93ZWQKLSAgKiBieSBhIGNvbnRyb2wgc2hvd2luZyBhIGxpc3Qgb2YgYWxsIHJlc291cmNlcyBmaWx0ZXJlZCBieSB0aGUgc2VsZWN0ZWQgZmlsdGVyLiAKLSAgKi8KLSAgcHVibGljIFJlc291cmNlU2VsZWN0aW9uRGlhbG9nICggU2hlbGwgcGFyZW50LCBJUmVzb3VyY2Ugcm9vdCwgSVJlc291cmNlIGluaXRpYWxTZWxlY3Rpb24sIEZpbHRlcltdIGZpbHRlcnMgKQotICB7Ci0gICAgc3VwZXIocGFyZW50KTsKLSAgICByb290XyA9IHJvb3QgPT0gbnVsbCA/IFJlc291cmNlVXRpbHMuZ2V0V29ya3NwYWNlUm9vdCgpIDogcm9vdDsKLSAgICBpbml0aWFsU2VsZWN0aW9uXyA9IGluaXRpYWxTZWxlY3Rpb247Ci0gICAgZmlsdGVyc18gPSAoZmlsdGVycyA9PSBudWxsIHx8IGZpbHRlcnMubGVuZ3RoID09IDApID8gbmV3IEZpbHRlcltdIHtuZXcgQW55RmlsdGVyKCl9IDogZmlsdGVyczsKLSAgICBjdXJyZW50RmlsdGVyXyA9IGZpbHRlcnNfWzBdOwotICAgIG11bHRpcGxlU2VsZWN0aW9uRW5hYmxlZF8gPSBmYWxzZTsKLSAgICBzZXRTaGVsbFN0eWxlKFNXVC5ESUFMT0dfVFJJTSB8IFNXVC5SRVNJWkUgfCBTV1QuQVBQTElDQVRJT05fTU9EQUwpOwotICB9Ci0KLSAgLyoqCi0gICogRW5hYmxlcyBvciBkaXNhYmxlcyBtdWx0aXBsZSBzZWxlY3Rpb24gaW4gdGhlIHRyZWUgdmlldy4KLSAgKiBNdWx0aXBsZSBzZWxlY3Rpb24gaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KLSAgKiBAcGFyYW0gbXVsdGlwbGVTZWxlY3Rpb25FbmFibGVkIFRydWUgdG8gZW5hYmxlZCBvciBmYWxzZSB0byBkaXNhYmxlLgotICAqLwotICBwdWJsaWMgdm9pZCBzZXRNdWx0aXBsZVNlbGVjdGlvbkVuYWJsZWQgKCBib29sZWFuIG11bHRpcGxlU2VsZWN0aW9uRW5hYmxlZCApCi0gIHsKLSAgICBtdWx0aXBsZVNlbGVjdGlvbkVuYWJsZWRfID0gbXVsdGlwbGVTZWxlY3Rpb25FbmFibGVkOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgc2VsZWN0aW9ucyBtYWRlIGluIHRoZSBkaWFsb2cgaWYgT0sgd2FzIHByZXNzZWQsCi0gICogb3IgbnVsbCBpZiBDYW5jZWwgd2FzIHByZXNzZWQuIFJldHVybnMgbnVsbCBpZiB0aGUgZGlhbG9nCi0gICogaGFzIG5ldmVyIGJlZW4gb3BlbmVkLgotICAqIEByZXR1cm4gQW4gYXJyYXkgb2Ygc2VsZWN0ZWQgcmVzb3VyY2VzLCBwb3NzaWJseSBlbXB0eSwgcG9zc2libHkgbnVsbC4KLSAgKi8KLSAgcHVibGljIElSZXNvdXJjZVtdIGdldFJlc3VsdCAoKQotICB7Ci0gICAgcmV0dXJuIHNlbGVjdGlvbl87Ci0gIH0KLQotICAvKioKLSAgKiBDYWxsZWQgd2hlbiB0aGUgQ2FuY2VsIGJ1dHRvbiBpcyBwcmVzc2VkLgotICAqIEluc3VyZXMgdGhhdCB7QGxpbmsgI2dldFJlc3VsdH0gd2lsbCByZXR1cm4gbnVsbC4KLSAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgY2FuY2VsUHJlc3NlZCAoKQotICB7Ci0gICAgc2VsZWN0aW9uXyA9IG51bGw7Ci0gICAgc2V0UmV0dXJuQ29kZShEaWFsb2cuQ0FOQ0VMKTsKLSAgICBzdXBlci5jYW5jZWxQcmVzc2VkKCk7Ci0gIH0KLQotICAvKioKLSAgKiBDYWxsZWQgd2hlbiB0aGUgT0sgYnV0dG9uIGlzIHByZXNzZWQuCi0gICogU3F1aXJyZWxzIGF3YXkgdGhlIGxpc3Qgb2YgemVybyBvciBtb3JlIHNlbGVjdGVkCi0gICogPGNvZGU+SVJlc291cmNlPC9jb2RlPnMgdG8gYmUgcmV0dXJuZWQgYnkge0BsaW5rICNnZXRSZXN1bHR9LgotICAqLwotICBwcm90ZWN0ZWQgdm9pZCBva1ByZXNzZWQgKCkKLSAgewotICAgIElTZWxlY3Rpb24gc2VsZWN0aW9uID0gZmlsZVZpZXdlcl8uZ2V0U2VsZWN0aW9uKCk7Ci0gICAgaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKQotICAgIHsKLSAgICAgIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHN0cnVjdHVyZWRTZWxlY3Rpb24gPSAoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uOwotICAgICAgc2VsZWN0aW9uXyA9IG5ldyBJUmVzb3VyY2Vbc3RydWN0dXJlZFNlbGVjdGlvbi5zaXplKCldOwotICAgICAgaW50IGk9MDsKLSAgICAgIEl0ZXJhdG9yIGl0ZXIgPSBzdHJ1Y3R1cmVkU2VsZWN0aW9uLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIE9iamVjdCBvYmplY3QgPSBpdGVyLm5leHQoKTsKLSAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIElSZXNvdXJjZSkKLSAgICAgICAgewotICAgICAgICAgIHNlbGVjdGlvbl9baSsrXSA9IChJUmVzb3VyY2Upb2JqZWN0OwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHNldFJldHVybkNvZGUoRGlhbG9nLk9LKTsKLSAgICBzdXBlci5va1ByZXNzZWQoKTsKLSAgfQotCi0gIC8qKgotICAqIFNlZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdyNjb25maWd1cmVTaGVsbH0uCi0gICogQHBhcmFtIHNoZWxsIFRoZSBzaGVsbC4KLSAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgY29uZmlndXJlU2hlbGwgKCBTaGVsbCBzaGVsbCApCi0gIHsKLSAgICBzdXBlci5jb25maWd1cmVTaGVsbChzaGVsbCk7Ci0gICAgc2hlbGwuc2V0VGV4dChXU1VJUGx1Z2luTWVzc2FnZXMuRElBTE9HX1RJVExFX1JFU09VUkNFX0JST1dTRSk7Ci0gIH0KLQotICAvKiogCi0gICogQ3JlYXRlcyB0aGUgZGlhbG9nIGFyZWEuCi0gICogQHBhcmFtIHBhcmVudCBUaGUgcGFyZW50IGNvbXBvc2l0ZS4KLSAgKiBAcmV0dXJuIFRoZSBjb250cm9sIGFyZWEuCi0gICovCi0gIHByb3RlY3RlZCBDb250cm9sIGNyZWF0ZURpYWxvZ0FyZWEgKCBDb21wb3NpdGUgcGFyZW50ICkKLSAgewotICAgIEdyaWRMYXlvdXQgZ2w7Ci0gICAgR3JpZERhdGEgZ2Q7Ci0KLSAgICBDb21wb3NpdGUgY29tcG9zaXRlID0gKENvbXBvc2l0ZSlzdXBlci5jcmVhdGVEaWFsb2dBcmVhKHBhcmVudCk7Ci0gICAgZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMIHwgR3JpZERhdGEuR1JBQl9IT1JJWk9OVEFMIHwgR3JpZERhdGEuVkVSVElDQUxfQUxJR05fRklMTCB8IEdyaWREYXRhLkdSQUJfVkVSVElDQUwpOwotICAgIGdkLndpZHRoSGludCA9IDQwMDsKLSAgICBnZC5oZWlnaHRIaW50ID0gMzAwOwotICAgIGdkLmdyYWJFeGNlc3NWZXJ0aWNhbFNwYWNlID0gdHJ1ZTsKLSAgICBnZC5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKLSAgICBjb21wb3NpdGUuc2V0TGF5b3V0RGF0YShnZCk7Ci0KLSAgICBpZiAoZmlsdGVyc18ubGVuZ3RoID4gMSkKLSAgICB7Ci0gICAgICBDb21wb3NpdGUgZiA9IG5ldyBDb21wb3NpdGUoY29tcG9zaXRlLFNXVC5OT05FKTsKLSAgICAgIGdsID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICAgIGdsLm51bUNvbHVtbnMgPSAyOwotICAgICAgZ2wubWFyZ2luSGVpZ2h0ID0gMDsKLSAgICAgIGdsLm1hcmdpbldpZHRoID0gMDsKLSAgICAgIGYuc2V0TGF5b3V0KGdsKTsKLSAgICAgIGdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCB8IEdyaWREYXRhLkdSQUJfSE9SSVpPTlRBTCk7Ci0gICAgICBmLnNldExheW91dERhdGEoZ2QpOwotCi0gICAgICBmaWx0ZXJMYWJlbF8gPSBuZXcgTGFiZWwoZixTV1QuV1JBUCk7Ci0gICAgICBmaWx0ZXJMYWJlbF8uc2V0VGV4dChXU1VJUGx1Z2luTWVzc2FnZXMuTEFCRUxfUkVTT1VSQ0VfRklMVEVSKTsKLSAgICAgIGZpbHRlckxhYmVsXy5zZXRUb29sVGlwVGV4dChXU1VJUGx1Z2luTWVzc2FnZXMuVE9PTFRJUF9EUkVTX0NPTUJPX1JFU09VUkNFX1RZUEUpOwotCi0gICAgICBmaWx0ZXJDb21ib18gPSBuZXcgQ29tYm8oZixTV1QuRFJPUF9ET1dOIHwgU1dULlJFQURfT05MWSk7Ci0gICAgICBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwgfCBHcmlkRGF0YS5HUkFCX0hPUklaT05UQUwpOwotICAgICAgZmlsdGVyQ29tYm9fLnNldExheW91dERhdGEoZ2QpOwotICAgICAgZmlsdGVyQ29tYm9fLmFkZExpc3RlbmVyKFNXVC5TZWxlY3Rpb24sdGhpcyk7Ci0gICAgICBmaWx0ZXJDb21ib18uc2V0VG9vbFRpcFRleHQoV1NVSVBsdWdpbk1lc3NhZ2VzLlRPT0xUSVBfRFJFU19DT01CT19SRVNPVVJDRV9UWVBFKTsKLSAgICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoZmlsdGVyQ29tYm9fLElORk9QT1BfRFJFU19DT01CT19SRVNPVVJDRV9UWVBFKTsKLSAgICB9Ci0KLSAgICBpZiAobXVsdGlwbGVTZWxlY3Rpb25FbmFibGVkXykKLSAgICB7Ci0gICAgICByZXNvdXJjZVRyZWVfID0gbmV3IFRyZWUoY29tcG9zaXRlLFNXVC5NVUxUSSB8IFNXVC5CT1JERVIgfCBTV1QuVl9TQ1JPTEwgfCBTV1QuSF9TQ1JPTEwpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmVzb3VyY2VUcmVlXyA9IG5ldyBUcmVlKGNvbXBvc2l0ZSxTV1QuU0lOR0xFIHwgU1dULkJPUkRFUiB8IFNXVC5WX1NDUk9MTCB8IFNXVC5IX1NDUk9MTCk7Ci0gICAgfQotICAgIGdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCB8IEdyaWREYXRhLkdSQUJfSE9SSVpPTlRBTCB8IEdyaWREYXRhLlZFUlRJQ0FMX0FMSUdOX0ZJTEwgfCBHcmlkRGF0YS5HUkFCX1ZFUlRJQ0FMKTsKLSAgICBnZC5ncmFiRXhjZXNzVmVydGljYWxTcGFjZSA9IHRydWU7Ci0gICAgZ2QuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7Ci0gICAgcmVzb3VyY2VUcmVlXy5zZXRMYXlvdXREYXRhKGdkKTsKLS8vICByZXNvdXJjZVRyZWVfLmFkZExpc3RlbmVyKFNXVC5TZWxlY3Rpb24sdGhpcyk7Ci0gICAgcmVzb3VyY2VUcmVlXy5zZXRUb29sVGlwVGV4dChXU1VJUGx1Z2luTWVzc2FnZXMuVE9PTFRJUF9EUkVTX1RSRUVfUkVTT1VSQ0UpOwotICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAocmVzb3VyY2VUcmVlXyxJTkZPUE9QX0RSRVNfVFJFRV9SRVNPVVJDRSk7Ci0KLSAgICBmaWxlVmlld2VyXyA9IG5ldyBUcmVlVmlld2VyKHJlc291cmNlVHJlZV8pOwotICAgIGZpbGVWaWV3ZXJfLnNldENvbnRlbnRQcm92aWRlcihuZXcgV29ya2JlbmNoQ29udGVudFByb3ZpZGVyKCkpOwotICAgIGZpbGVWaWV3ZXJfLnNldExhYmVsUHJvdmlkZXIoCi0gICAgICAgICAgICAgICAgbmV3IERlY29yYXRpbmdMYWJlbFByb3ZpZGVyKAotCQkJCSAgICAgICAgbmV3IFdvcmtiZW5jaExhYmVsUHJvdmlkZXIoKSwgCi0JCQkJICAgICAgICBXZWJTZXJ2aWNlVUlQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRXb3JrYmVuY2goKS5nZXREZWNvcmF0b3JNYW5hZ2VyKCkuZ2V0TGFiZWxEZWNvcmF0b3IoKSkpOwotICAgIGZpbGVWaWV3ZXJfLmFkZEZpbHRlcigKLSAgICAgIG5ldyBWaWV3ZXJGaWx0ZXIgKCkKLSAgICAgIHsKLSAgICAgICAgcHVibGljIGJvb2xlYW4gc2VsZWN0ICggVmlld2VyIHZpZXdlciwgT2JqZWN0IHBhcmVudE9iamVjdCwgT2JqZWN0IG9iamVjdCApCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAoCi0gICAgICAgICAgICAoKG9iamVjdCBpbnN0YW5jZW9mIElSZXNvdXJjZSkgJiYgKChJUmVzb3VyY2Upb2JqZWN0KS5nZXRUeXBlKCkgIT0gSVJlc291cmNlLkZJTEUpCi0gICAgICAgICAgICB8fCAoUmVzb3VyY2VTZWxlY3Rpb25EaWFsb2cudGhpcy5jdXJyZW50RmlsdGVyXy5hY2NlcHRzKG9iamVjdCkpCi0gICAgICAgICAgKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICk7Ci0gICAgZmlsZVZpZXdlcl8uc2V0SW5wdXQocm9vdF8pOwotICAgIGZpbGVWaWV3ZXJfLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigKLSAgICAgIG5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyICgpCi0gICAgICB7Ci0gICAgICAgIHB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQgKCBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQgKQotICAgICAgICB7Ci0vLyAgICAgICAgUmVzb3VyY2VTZWxlY3Rpb25EaWFsb2cudGhpcy52YWxpZGF0ZVBhZ2VUb1N0YXR1cygpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgKTsKLSAgICBpZiAoaW5pdGlhbFNlbGVjdGlvbl8gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmaWxlVmlld2VyXy5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oUmVzb3VyY2VTZWxlY3Rpb25EaWFsb2cudGhpcy5pbml0aWFsU2VsZWN0aW9uXyksdHJ1ZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGNvbXBvc2l0ZTsKLSAgfQotCi0gIC8qKgotICAqIENhbGxlZCB3aGVuIGFuIGV2ZW50IG9jY3VycyBvbiB0aGUgcGFnZS4KLSAgKiBIYW5kbGVzIHRoZSBldmVudCBhbmQgcmV2YWxpZGF0ZXMgdGhlIHBhZ2UuCi0gICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCB0aGF0IG9jY3VyZWQuCi0gICovCi0gIHB1YmxpYyB2b2lkIGhhbmRsZUV2ZW50ICggRXZlbnQgZXZlbnQgKQotICB7Ci0vLyAgdmFsaWRhdGVQYWdlVG9TdGF0dXMoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9wbHVnaW4vV2ViU2VydmljZVVJUGx1Z2luLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL3BsdWdpbi9XZWJTZXJ2aWNlVUlQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmU1MWE1NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL3BsdWdpbi9XZWJTZXJ2aWNlVUlQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyNCAgIDExNTY5MCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkucGx1Z2luOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsKLQotCi0vKioKLSogVGhpcyBpcyB0aGUgcGx1Z2luIGNsYXNzIGZvciB0aGUgV2ViIFNlcnZpY2VzIHBsdWdpbi4KLSogPHA+Ci0qIFRoaXMgcGx1Z2luIGNvbnRhaW5zIHRoZSBncmFwaGljIHVzZXIgaW50ZXJmYWNlIHRvIHRoZQotKiBXZWIgU2VydmljZXMgcnVudGltZSBmb3VuZCBpbiBvcmcuZWNsaXBzZS5qc3Qud3MuCi0qLwotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VVSVBsdWdpbiBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4KLXsKLQotICAvKioKLSAgKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgZGVzY3JpcHRvciBvZiB0aGlzIHBsdWdpbiBpbiBwbHVnaW4ueG1sLgotICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRCA9ICJvcmcuZWNsaXBzZS5qc3Qud3MudWkiOwotCi0gIC8qKgotICAqIFRoZSByZWZlcmVuY2UgdG8gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGlzIHBsdWdpbi4KLSAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgV2ViU2VydmljZVVJUGx1Z2luIGluc3RhbmNlXzsKLQotICAvKioKLSAgICogQ29uc3RydWN0cyBhIHJ1bnRpbWUgcGx1Z2luIG9iamVjdCBmb3IgdGhpcyBwbHVnaW4uCi0gICAqLwotICBwdWJsaWMgV2ViU2VydmljZVVJUGx1Z2luKCkgewotCXN1cGVyKCk7Ci0JaW5zdGFuY2VfID0gdGhpczsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGlzIHBsdWdpbi4gRXF1aXZhbGVudCB0byBjYWxsaW5nCi0gICogKFdlYlNlcnZpY2VVSVBsdWdpbilQbGF0Zm9ybS5nZXRQbHVnaW4oIm9yZy5lY2xpcHNlLmpzdC53cy51aSIpOwotICAqIEByZXR1cm4gVGhlIFdlYlNlcnZpY2VVSVBsdWdpbiBzaW5nbGV0b24uCi0gICovCi0gIHN0YXRpYyBwdWJsaWMgV2ViU2VydmljZVVJUGx1Z2luIGdldEluc3RhbmNlKCkgewotICAgIHJldHVybiBpbnN0YW5jZV87Ci0gIH0KLQkJCi0gIC8qKgotICAqIFJldHVybnMgYW4gaW1hZ2UgZGVzY3JpcHRvciBmb3IgdGhlIG5hbWVkIHJlc291cmNlCi0gICogYXMgcmVsYXRpdmUgdG8gdGhlIHBsdWdpbiBpbnN0YWxsIGxvY2F0aW9uLgotICAqIEByZXR1cm4gQW4gaW1hZ2UgZGVzY3JpcHRvciwgcG9zc2libHkgbnVsbC4KLSAgKi8KLQlwdWJsaWMgc3RhdGljIEltYWdlRGVzY3JpcHRvciBnZXRJbWFnZURlc2NyaXB0b3IoU3RyaW5nIG5hbWUpIHsKLQkJdHJ5IHsKLQkJCVVSTCBpbnN0YWxsVVJMID0gaW5zdGFuY2VfLmdldEJ1bmRsZSgpLmdldEVudHJ5KCIvIik7Ci0JCQlVUkwgaW1hZ2VVUkwgPSBuZXcgVVJMKGluc3RhbGxVUkwsIG5hbWUpOwotCQkJcmV0dXJuIEltYWdlRGVzY3JpcHRvci5jcmVhdGVGcm9tVVJMKGltYWdlVVJMKTsKLQkJfSBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL3BvcHVwL1BvcHVwVGVzdFNlcnZpY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvcG9wdXAvUG9wdXBUZXN0U2VydmljZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzQ4YWVmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvcG9wdXAvUG9wdXBUZXN0U2VydmljZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwODAzICAgMTUyNzkwIG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbiAoY3JlYXRlZCBjbGFzcykKLSAqIDIwMDcwMzI3ICAgMTcyMzM5IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLnBvcHVwOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NjbGllbnQuU2VydmljZVJlZjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVBY3Rpb25BZGFwdGVyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIuTGF1bmNoT3B0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5XU0V4cGxvcmVyTGF1bmNoZXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbHVnaW4uRXhwbG9yZXJQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBvcHVwLlBvcHVwVGVzdFdTREw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLnV0aWxzLkFkYXB0ZXJVdGlsczsKLQotCi1wdWJsaWMgY2xhc3MgUG9wdXBUZXN0U2VydmljZSBleHRlbmRzIFBvcHVwVGVzdFdTREwKLXsKLSAgcHVibGljIFBvcHVwVGVzdFNlcnZpY2UoKQotICB7Ci0JICBzdXBlcigpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcnVuKCkKLSAgewotCVN0cmluZyBzdGF0ZUxvY2F0aW9uID0gRXhwbG9yZXJQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQbHVnaW5TdGF0ZUxvY2F0aW9uKCk7Ci0JU3RyaW5nIGRlZmF1bHRGYXZvcml0ZXNMb2NhdGlvbiA9IEV4cGxvcmVyUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0RGVmYXVsdEZhdm9yaXRlc0xvY2F0aW9uKCk7Ci0gIAlXU0V4cGxvcmVyTGF1bmNoZXJDb21tYW5kIGNvbW1hbmQgPSBuZXcgV1NFeHBsb3JlckxhdW5jaGVyQ29tbWFuZCgpOwotICAgIGNvbW1hbmQuc2V0Rm9yY2VMYXVuY2hPdXRzaWRlSURFKGZhbHNlKTsKLSAgICBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24gPSBnZXRXb3JrYmVuY2hTZWxlY3Rpb24oKTsKLSAgICBWZWN0b3IgbGF1bmNoT3B0aW9ucyA9IG5ldyBWZWN0b3IoKTsKLSAgICBpZiAoc2VsZWN0aW9uICE9IG51bGwpCi0gICAgeyAgICAgIAotICAgICAgZm9yIChJdGVyYXRvciBpdCA9IHNlbGVjdGlvbi5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBTdHJpbmcgd3NkbFVSTCA9IG51bGw7Ci0gICAgICAgIE9iamVjdCBvYmplY3QgPSBpdC5uZXh0KCk7Ci0gICAgICAgIAotICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgU2VydmljZVJlZikKLSAgICAgICAgewotICAgICAgICAgIFNlcnZpY2VSZWYgc2VydmljZUltcGwgPSAoU2VydmljZVJlZilvYmplY3Q7Ci0gICAgICAgICAgd3NkbFVSTCA9IEoyRUVBY3Rpb25BZGFwdGVyRmFjdG9yeS5nZXRXU0RMVVJJKHNlcnZpY2VJbXBsKTsKLSAgICAgICAgfSBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBTdHJpbmcpIHsKLSAgICAgICAgCXdzZGxVUkwgPSAoU3RyaW5nKSBvYmplY3Q7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgIAkvLyBPYmplY3QgaXMgbm90IGFueSB0eXBlcyB3ZSByZWNvZ25pemVkLCB3c2RsVVJMIGlzIHN0aWxsIG51bGwuCi0gICAgICAgICAgCS8vIFRyeSBsb29raW5nIHVwIGFuIGFkYXB0ZXIgZm9yIHRoZSBvYmplY3QuCi0gICAgICAgIAkvLyBJZiBmb3VuZCwgdXBkYXRlIHdzZGxVUkwgY29udGFpbnMgdGhlIGFkYXB0ZWQgV1NETCBzdHJpbmcuICAKLSAgICAgICAgCS8vIElmIG5vdCBmb3VuZCwgd3NkbFVSTCB3b3VsZCBzdGlsbCBiZSBudWxsLgotICAgICAgICAJd3NkbFVSTCA9IEFkYXB0ZXJVdGlscy5nZXRBZGFwdGVkV1NETChvYmplY3QpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBhZGRMYXVuY2hPcHRpb25zKGxhdW5jaE9wdGlvbnMsIHdzZGxVUkwsIHN0YXRlTG9jYXRpb24sIGRlZmF1bHRGYXZvcml0ZXNMb2NhdGlvbik7Ci0gICAgICB9Ci0gICAgfQotICAgIGNvbW1hbmQuc2V0TGF1bmNoT3B0aW9ucygoTGF1bmNoT3B0aW9uW10pbGF1bmNoT3B0aW9ucy50b0FycmF5KG5ldyBMYXVuY2hPcHRpb25bMF0pKTsKLSAgICBjb21tYW5kLmV4ZWN1dGUoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9wcmVmZXJlbmNlcy9SZXNvdXJjZU1hbmFnbWVudFByZWZlcmVuY2VQYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL3ByZWZlcmVuY2VzL1Jlc291cmNlTWFuYWdtZW50UHJlZmVyZW5jZVBhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRiM2ZlNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy51aS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3VpL3ByZWZlcmVuY2VzL1Jlc291cmNlTWFuYWdtZW50UHJlZmVyZW5jZVBhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAzMzEgICAxMjg4Mjcga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwNDAzICAgMTI4ODI3IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLnByZWZlcmVuY2VzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5QcmVmZXJlbmNlUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwucGx1Z2luLldlYlNlcnZpY2VQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLldTVUlQbHVnaW5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkucGx1Z2luLldlYlNlcnZpY2VVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5oZWxwLklXb3JrYmVuY2hIZWxwU3lzdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VEZWZhdWx0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5NZXJnZURlZmF1bHRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50TWVyZ2VDb250ZXh0OwotCi0KLQotcHVibGljIGNsYXNzIFJlc291cmNlTWFuYWdtZW50UHJlZmVyZW5jZVBhZ2UgZXh0ZW5kcyBQcmVmZXJlbmNlUGFnZSBpbXBsZW1lbnRzIElXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZQotewotICAvKkNPTlRFWFRfSUQgUFBSTTAwMDEgZm9yIHRoZSBSZXNvdXJjZSBNYW5hZ21lbnQgUHJlZmVyZW5jZSBQYWdlKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QUFJNX1BBR0UgPSBXZWJTZXJ2aWNlVUlQbHVnaW4uSUQgKyAiLlBQUk0wMDAxIjsKLSAgLy8KLSAgcHJpdmF0ZSBCdXR0b24gb3ZlcldyaXRlRmlsZXM7Ci0gIC8qQ09OVEVYVF9JRCBQUFJNMDAwMiBmb3IgdGhlIGZpbGUgb3ZlcndyaXRlIGNoZWNrIGJveCBvbiB0aGUgUmVzb3VyY2UgTWFuYWdlbWVudCBQcmVmZXJlbmNlIFBhZ2UqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BQUk1fQ0hFQ0tCT1hfT1ZFUldSSVRFX0ZJTEVTID0gV2ViU2VydmljZVVJUGx1Z2luLklEICsgIi5QUFJNMDAwMiI7Ci0gIC8vCi0gIHByaXZhdGUgQnV0dG9uIGNyZWF0ZUZvbGRlcnM7Ci0gIC8qQ09OVEVYVF9JRCBQUFJNMDAwMyBmb3IgdGhlIGNyZWF0ZSBmb2xkZXJzIGNoZWNrIGJveCBvbiB0aGUgUmVzb3VyY2UgTWFuYWdlbWVudCBQcmVmZXJlbmNlIFBhZ2UqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BQUk1fQ0hFQ0tCT1hfQ1JFQVRFX0ZPTERFUlMgPSBXZWJTZXJ2aWNlVUlQbHVnaW4uSUQgKyAiLlBQUk0wMDAzIjsKLSAgLy8KLSAgcHJpdmF0ZSBCdXR0b24gY2hlY2tvdXRGaWxlczsKLSAgLypDT05URVhUX0lEIFBQUk0wMDA0IGZvciB0aGUgY2hlY2tvdXQgZmlsZXMgY2hlY2sgYm94IG9uIHRoZSBSZXNvdXJjZSBNYW5hZ2VtZW50IFByZWZlcmVuY2UgUGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFBSTV9DSEVDS0JPWF9DSEVDS19PVVQgPSBXZWJTZXJ2aWNlVUlQbHVnaW4uSUQgKyAiLlBQUk0wMDA0IjsKLSAgCi0gIHByaXZhdGUgQnV0dG9uIHNrZWxldG9uTWVyZ2U7Ci0gIC8qQ09OVEVYVF9JRCBQUFJNMDAwNSBmb3IgdGhlIHNrZWxldG9uIG1lcmdlIGNoZWNrIGJveCBvbiB0aGUgUmVzb3VyY2UgTWFuYWdlbWVudCBQcmVmZXJlbmNlIFBhZ2UqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BQUk1fQ0hFQ0tCT1hfU0tFTEVUT05fTUVSR0UgPSBXZWJTZXJ2aWNlVUlQbHVnaW4uSUQgKyAiLlBQUk0wMDA1IjsKLQotIC8qKgotICAgKiBDcmVhdGVzIHByZWZlcmVuY2UgcGFnZSBjb250cm9scyBvbiBkZW1hbmQuCi0gICAqICAgQHBhcmFtIHBhcmVudCAgdGhlIHBhcmVudCBmb3IgdGhlIHByZWZlcmVuY2UgcGFnZQotICAgKi8KLSAgcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlQ29udGVudHMoQ29tcG9zaXRlIHN1cGVycGFyZW50KQotICB7Ci0gIAlJV29ya2JlbmNoSGVscFN5c3RlbSBoZWxwU3lzdGVtID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCk7Ci0gIAkKLSAgICBDb21wb3NpdGUgICBwYXJlbnQgPSBuZXcgQ29tcG9zaXRlKCBzdXBlcnBhcmVudCwgU1dULk5PTkUgKTsJCi0gICAgR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGxheW91dC5udW1Db2x1bW5zID0gMTsKLSAgICBwYXJlbnQuc2V0TGF5b3V0KCBsYXlvdXQgKTsKLSAgICBwYXJlbnQuc2V0VG9vbFRpcFRleHQoV1NVSVBsdWdpbk1lc3NhZ2VzLlRPT0xUSVBfUFBSTV9QQUdFKTsKLSAgICBoZWxwU3lzdGVtLnNldEhlbHAocGFyZW50LCBJTkZPUE9QX1BQUk1fUEFHRSk7Ci0KLSAgICBvdmVyV3JpdGVGaWxlcyA9IGNyZWF0ZUNoZWNrQm94KHBhcmVudCwgV1NVSVBsdWdpbk1lc3NhZ2VzLkJVVFRPTl9PVkVSV1JJVEVfRklMRVMpOwotICAgIG92ZXJXcml0ZUZpbGVzLnNldFRvb2xUaXBUZXh0KFdTVUlQbHVnaW5NZXNzYWdlcy5UT09MVElQX1BQUk1fQ0hFQ0tCT1hfT1ZFUldSSVRFX0ZJTEVTKTsKLSAgICBoZWxwU3lzdGVtLnNldEhlbHAob3ZlcldyaXRlRmlsZXMsIElORk9QT1BfUFBSTV9DSEVDS0JPWF9PVkVSV1JJVEVfRklMRVMpOwotCi0gICAgY3JlYXRlRm9sZGVycyAgPSBjcmVhdGVDaGVja0JveChwYXJlbnQsIFdTVUlQbHVnaW5NZXNzYWdlcy5CVVRUT05fQ1JFQVRFX0ZPTERFUlMpOwotICAgIGNyZWF0ZUZvbGRlcnMuc2V0VG9vbFRpcFRleHQoV1NVSVBsdWdpbk1lc3NhZ2VzLlRPT0xUSVBfUFBSTV9DSEVDS0JPWF9DUkVBVEVfRk9MREVSUyk7Ci0gICAgaGVscFN5c3RlbS5zZXRIZWxwKGNyZWF0ZUZvbGRlcnMsIElORk9QT1BfUFBSTV9DSEVDS0JPWF9DUkVBVEVfRk9MREVSUyk7Ci0KLSAgICBjaGVja291dEZpbGVzID0gY3JlYXRlQ2hlY2tCb3gocGFyZW50LCBXU1VJUGx1Z2luTWVzc2FnZXMuQlVUVE9OX0NIRUNLT1VUX0ZJTEVTKTsgICAgCi0gICAgY2hlY2tvdXRGaWxlcy5zZXRUb29sVGlwVGV4dChXU1VJUGx1Z2luTWVzc2FnZXMuVE9PTFRJUF9QUFJNX0NIRUNLQk9YX0NIRUNLX09VVCk7Ci0gICAgaGVscFN5c3RlbS5zZXRIZWxwKGNoZWNrb3V0RmlsZXMsIElORk9QT1BfUFBSTV9DSEVDS0JPWF9DSEVDS19PVVQpOwotICAgIAotICAgIHNrZWxldG9uTWVyZ2UgPSBjcmVhdGVDaGVja0JveChwYXJlbnQsIFdTVUlQbHVnaW5NZXNzYWdlcy5CVVRUT05fU0tFTEVUT05fTUVSR0UpOyAgICAKLSAgICBza2VsZXRvbk1lcmdlLnNldFRvb2xUaXBUZXh0KFdTVUlQbHVnaW5NZXNzYWdlcy5UT09MVElQX1BQUk1fQ0hFQ0tCT1hfU0tFTEVUT05fTUVSR0UpOwotICAgIGhlbHBTeXN0ZW0uc2V0SGVscChza2VsZXRvbk1lcmdlLCBJTkZPUE9QX1BQUk1fQ0hFQ0tCT1hfU0tFTEVUT05fTUVSR0UpOwotCi0gICAgaW5pdGlhbGl6ZVZhbHVlcygpOwotICAgIG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nLmFwcGx5RGlhbG9nRm9udChzdXBlcnBhcmVudCk7ICAgIAotCi0gICAgcmV0dXJuIHBhcmVudDsKLSAgfQotIAotICBwcml2YXRlIEJ1dHRvbiBjcmVhdGVDaGVja0JveCggQ29tcG9zaXRlIHBhcmVudCwgU3RyaW5nIHRleHQgKQotICB7Ci0gICAgQnV0dG9uIGJ1dHRvbiA9IG5ldyBCdXR0b24oIHBhcmVudCwgU1dULkNIRUNLICk7Ci0gICAgYnV0dG9uLnNldFRleHQoIHRleHQgKTsKLSAgICByZXR1cm4gYnV0dG9uOwotICB9Ci0KLSAgLyoqCi0gICAqIERvZXMgYW55dGhpbmcgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIGRlZmF1bHQgYnV0dG9uIGhhcyBiZWVuIHByZXNzZWQuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBwZXJmb3JtRGVmYXVsdHMoKQotICB7Ci0gICAgc3VwZXIucGVyZm9ybURlZmF1bHRzKCk7Ci0gICAgaW5pdGlhbGl6ZURlZmF1bHRzKCk7Ci0gIH0KLQotICAvKioKLSAgICogRG8gYW55dGhpbmcgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIE9LIGJ1dHRvbiBoYXMgYmVlbiBwcmVzc2VkLgotICAgKiAgQHJldHVybiB3aGV0aGVyIGl0IGlzIG9rYXkgdG8gY2xvc2UgdGhlIHByZWZlcmVuY2UgcGFnZQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gcGVyZm9ybU9rKCkKLSAgewotICAgIHN0b3JlVmFsdWVzKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBwZXJmb3JtQXBwbHkoKQotICB7Ci0gICAgcGVyZm9ybU9rKCk7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBJV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2UKLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaCB3b3JrYmVuY2gpICB7IH0KLQotICAvKioKLSAgICogSW5pdGlhbGl6ZXMgc3RhdGVzIG9mIHRoZSBjb250cm9scyB1c2luZyBkZWZhdWx0IHZhbHVlcwotICAgKiBpbiB0aGUgcHJlZmVyZW5jZSBzdG9yZS4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBpbml0aWFsaXplRGVmYXVsdHMoKQotICB7Ci0gICAgb3ZlcldyaXRlRmlsZXMuc2V0U2VsZWN0aW9uKCBSZXNvdXJjZURlZmF1bHRzLmdldE92ZXJ3cml0ZUZpbGVzRGVmYXVsdCgpKTsKLSAgICBjcmVhdGVGb2xkZXJzLnNldFNlbGVjdGlvbiggUmVzb3VyY2VEZWZhdWx0cy5nZXRDcmVhdGVGb2xkZXJzRGVmYXVsdCgpKTsKLSAgICBjaGVja291dEZpbGVzLnNldFNlbGVjdGlvbiggUmVzb3VyY2VEZWZhdWx0cy5nZXRDaGVja291dEZpbGVzRGVmYXVsdCgpKTsKLSAgICBza2VsZXRvbk1lcmdlLnNldFNlbGVjdGlvbiggTWVyZ2VEZWZhdWx0cy5nZXRTa2VsZXRvbk1lcmdlRGVmYXVsdCgpKTsKLSAgfQotCi0gIC8qKgotICAgKiBJbml0aWFsaXplcyBzdGF0ZXMgb2YgdGhlIGNvbnRyb2xzIGZyb20gdGhlIHByZWZlcmVuY2Ugc3RvcmUuCi0gICAqLwotICBwcml2YXRlIHZvaWQgaW5pdGlhbGl6ZVZhbHVlcygpCi0gIHsKLSAgICAvLyBnZXQgdGhlIHBlcnNpc3RlbnQgY29udGV4dCBmcm9tIHRoZSBwbHVnaW4KLSAgICBSZXNvdXJjZUNvbnRleHQgY29udGV4dCA9IFdlYlNlcnZpY2VQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRSZXNvdXJjZUNvbnRleHQoKTsKLSAgICBQZXJzaXN0ZW50TWVyZ2VDb250ZXh0IG1lcmdlQ29udGV4dCA9IFdTUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0TWVyZ2VDb250ZXh0KCk7Ci0gICAgb3ZlcldyaXRlRmlsZXMuc2V0U2VsZWN0aW9uKCBjb250ZXh0LmlzT3ZlcndyaXRlRmlsZXNFbmFibGVkKCkpOwotICAgIGNyZWF0ZUZvbGRlcnMuc2V0U2VsZWN0aW9uKCBjb250ZXh0LmlzQ3JlYXRlRm9sZGVyc0VuYWJsZWQoKSk7Ci0gICAgY2hlY2tvdXRGaWxlcy5zZXRTZWxlY3Rpb24oIGNvbnRleHQuaXNDaGVja291dEZpbGVzRW5hYmxlZCgpKTsKLSAgICBza2VsZXRvbk1lcmdlLnNldFNlbGVjdGlvbiggbWVyZ2VDb250ZXh0LmlzU2tlbGV0b25NZXJnZUVuYWJsZWQoKSk7IAotICAgfQotCi0gIC8qKgotICAgKiBTdG9yZXMgdGhlIHZhbHVlcyBvZiB0aGUgY29udHJvbHMgYmFjayB0byB0aGUgcHJlZmVyZW5jZSBzdG9yZS4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBzdG9yZVZhbHVlcygpCi0gIHsKLSAgICAvLyBnZXQgdGhlIHBlcnNpc3RlbnQgY29udGV4dCBmcm9tIHRoZSBwbHVnaW4KLSAgICBSZXNvdXJjZUNvbnRleHQgY29udGV4dCA9IFdlYlNlcnZpY2VQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRSZXNvdXJjZUNvbnRleHQoKTsKLSAgICBQZXJzaXN0ZW50TWVyZ2VDb250ZXh0IG1lcmdlQ29udGV4dCA9IFdTUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0TWVyZ2VDb250ZXh0KCk7Ci0gICAgY29udGV4dC5zZXRPdmVyd3JpdGVGaWxlc0VuYWJsZWQoIG92ZXJXcml0ZUZpbGVzLmdldFNlbGVjdGlvbigpICk7Ci0gICAgY29udGV4dC5zZXRDcmVhdGVGb2xkZXJzRW5hYmxlZCggY3JlYXRlRm9sZGVycy5nZXRTZWxlY3Rpb24oKSApOwotICAgIGNvbnRleHQuc2V0Q2hlY2tvdXRGaWxlc0VuYWJsZWQoIGNoZWNrb3V0RmlsZXMuZ2V0U2VsZWN0aW9uKCkgKTsgIAotICAgIG1lcmdlQ29udGV4dC5zZXRTa2VsZXRvbk1lcmdlRW5hYmxlZCggc2tlbGV0b25NZXJnZS5nZXRTZWxlY3Rpb24oKSApOwotICB9Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvcHJlZmVyZW5jZXMvVGVzdEZhY2lsaXR5RGVmYXVsdHNQcmVmZXJlbmNlUGFnZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9wcmVmZXJlbmNlcy9UZXN0RmFjaWxpdHlEZWZhdWx0c1ByZWZlcmVuY2VQYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiNTc1ZDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS9wcmVmZXJlbmNlcy9UZXN0RmFjaWxpdHlEZWZhdWx0c1ByZWZlcmVuY2VQYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjE3ICAgMTEzMTY5IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDYwMjIyICAgMTE4NzExIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDcwMzE0ICAgMTU0NTQzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5IGlzIHRyYWNraW5nIGV4dGVuc2lvbnMgdXNpbmcgbGFiZWwgYXR0cmlidXRlIGluc3RlYWQgb2YgSUQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkucHJlZmVyZW5jZXM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5QcmVmZXJlbmNlUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkNvbHVtbldlaWdodERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZENvbnRlbnRQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkxhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UYWJsZUxheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0RlZmF1bHRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQudGVzdC5XZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZXh0LnRlc3QuV2ViU2VydmljZVRlc3RSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwucGx1Z2luLldlYlNlcnZpY2VQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLldTVUlQbHVnaW5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwudWkucGx1Z2luLldlYlNlcnZpY2VVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlQ29sdW1uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLQotCi0KLXB1YmxpYyBjbGFzcyBUZXN0RmFjaWxpdHlEZWZhdWx0c1ByZWZlcmVuY2VQYWdlIGV4dGVuZHMgUHJlZmVyZW5jZVBhZ2UgaW1wbGVtZW50cyBJV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2UsIFNlbGVjdGlvbkxpc3RlbmVyCi17Ci0gIAotICBwcml2YXRlIFRhYmxlVmlld2VyIHdlYlNlcnZpY2VUZXN0VHlwZVZpZXdlcl87IAotICBwcml2YXRlIEJ1dHRvbiBtb3ZlVXBfOwotICBwcml2YXRlIEJ1dHRvbiBtb3ZlRG93bl87Ci0gIHByaXZhdGUgVmVjdG9yIHdlYlNlcnZpY2VUZXN0VHlwZXNfOwotICAKLSAgLypDT05URVhUX0lEIFBQU0QwMDAxIGZvciB0aGUgU2NlbmFyaW8gRGVmYXVsdHMgUHJlZmVyZW5jZSBQYWdlKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QUFNEX1BBR0UgPSBXZWJTZXJ2aWNlVUlQbHVnaW4uSUQgKyAiLlBQU0QwMDAxIjsKLSAgLy8KLSAgcHJpdmF0ZSBCdXR0b24gbGF1bmNoU2FtcGxlOwotICAvKkNPTlRFWFRfSUQgUFBTRDAwMDIgZm9yIHRoZSBsYXVuY2ggc2FtcGxlIGNoZWNrIGJveCBvbiB0aGUgU2NlbmFyaW8gRGVmYXVsdHMgUHJlZmVyZW5jZSBQYWdlKi8KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSU5GT1BPUF9QUFNEX0NIRUNLQk9YX0xBVU5DSF9TQU1QTEUgPSBXZWJTZXJ2aWNlVUlQbHVnaW4uSUQgKyAiLlBQU0QwMDAyIjsKLSAgLy8KLQotICAvKioKLSAgICogQ3JlYXRlcyBwcmVmZXJlbmNlIHBhZ2UgY29udHJvbHMgb24gZGVtYW5kLgotICAgKiAgIEBwYXJhbSBwYXJlbnQgIHRoZSBwYXJlbnQgZm9yIHRoZSBwcmVmZXJlbmNlIHBhZ2UKLSAgICovCi0gIHByb3RlY3RlZCBDb250cm9sIGNyZWF0ZUNvbnRlbnRzKENvbXBvc2l0ZSBzdXBlcnBhcmVudCkKLSAgewotICAgIAotICAJQ29tcG9zaXRlICAgcGFyZW50ID0gbmV3IENvbXBvc2l0ZSggc3VwZXJwYXJlbnQsIFNXVC5OT05FICk7CQotICAgIEdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBsYXlvdXQubnVtQ29sdW1ucyA9IDE7Ci0gICAgcGFyZW50LnNldExheW91dCggbGF5b3V0ICk7Ci0gICAgcGFyZW50LnNldFRvb2xUaXBUZXh0KFdTVUlQbHVnaW5NZXNzYWdlcy5UT09MVElQX1BQU0RfUEFHRSk7Ci0gICAgcGFyZW50LnNldExheW91dERhdGEoIG5ldyBHcmlkRGF0YSggR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMICkgKTsKLSAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHBhcmVudCxJTkZPUE9QX1BQU0RfUEFHRSk7ICAgIAotCi0gICAgbGF1bmNoU2FtcGxlID0gY3JlYXRlQ2hlY2tCb3gocGFyZW50LCBXU1VJUGx1Z2luTWVzc2FnZXMuQlVUVE9OX0xBVU5DSF9TQU1QTEUpOwotICAgIGxhdW5jaFNhbXBsZS5zZXRUb29sVGlwVGV4dChXU1VJUGx1Z2luTWVzc2FnZXMuVE9PTFRJUF9QUFNEX0NIRUNLQk9YX0xBVU5DSF9TQU1QTEUpOwotICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAobGF1bmNoU2FtcGxlLCBJTkZPUE9QX1BQU0RfQ0hFQ0tCT1hfTEFVTkNIX1NBTVBMRSk7Ci0KLSAgICAKLSAgICBUZXh0IHRlc3RTZXJ2aWNlVHlwZUxhYmVsID0gbmV3IFRleHQocGFyZW50LCBTV1QuUkVBRF9PTkxZIHwgU1dULldSQVApOwotICAgIHRlc3RTZXJ2aWNlVHlwZUxhYmVsLnNldFRleHQoV1NVSVBsdWdpbk1lc3NhZ2VzLkxBQkVMX1NBTVBMRV9UWVBFUyk7Ci0gICAgdGVzdFNlcnZpY2VUeXBlTGFiZWwuc2V0TGF5b3V0RGF0YSggbmV3IEdyaWREYXRhKCBHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwgKSApOwotCi0gICAgQ29tcG9zaXRlIHdlYlNlcnZpY2VUZXN0VHlwZUNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7Ci0gICAgR3JpZExheW91dCBnbCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgZ2wubnVtQ29sdW1ucyA9IDI7Ci0gICAgZ2wubWFyZ2luSGVpZ2h0ID0gMDsKLSAgICBnbC5tYXJnaW5XaWR0aCA9IDA7Ci0gICAgd2ViU2VydmljZVRlc3RUeXBlQ29tcG9zaXRlLnNldExheW91dChnbCk7Ci0gICAgd2ViU2VydmljZVRlc3RUeXBlQ29tcG9zaXRlLnNldExheW91dERhdGEoIG5ldyBHcmlkRGF0YSggR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMICkgKTsKLQotICAgIFRhYmxlIHRhYmxlPSBuZXcgVGFibGUod2ViU2VydmljZVRlc3RUeXBlQ29tcG9zaXRlLCBTV1QuQk9SREVSIHwgU1dULlNJTkdMRSB8IFNXVC5GVUxMX1NFTEVDVElPTiB8IFNXVC5IX1NDUk9MTCB8IFNXVC5WX1NDUk9MTCk7Ci0gICAgR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMIHwgR3JpZERhdGEuRklMTF9WRVJUSUNBTCk7Ci0gICAgZ2Qud2lkdGhIaW50ID0gMjU2OwotICAgIHRhYmxlLnNldExheW91dERhdGEoZ2QpOwotICAgIHRhYmxlLnNldFRvb2xUaXBUZXh0KFdTVUlQbHVnaW5NZXNzYWdlcy5UT09MVElQX0NMSUVOVF9UWVBFX1RBQkxFX1ZJRVdFUik7Ci0KLSAgICB3ZWJTZXJ2aWNlVGVzdFR5cGVzXyA9IG5ldyBWZWN0b3IoKTsKLSAgICB3ZWJTZXJ2aWNlVGVzdFR5cGVWaWV3ZXJfID0gbmV3IFRhYmxlVmlld2VyKHRhYmxlKTsKLSAgICB3ZWJTZXJ2aWNlVGVzdFR5cGVWaWV3ZXJfLnNldENvbnRlbnRQcm92aWRlcihuZXcgV2ViU2VydmljZVRlc3RUeXBlQ29udGVudFByb3ZpZGVyKCkpOwotICAgIHdlYlNlcnZpY2VUZXN0VHlwZVZpZXdlcl8uc2V0TGFiZWxQcm92aWRlcihuZXcgV2ViU2VydmljZVRlc3RUeXBlTGFiZWxQcm92aWRlcigpKTsKLSAgICB3ZWJTZXJ2aWNlVGVzdFR5cGVWaWV3ZXJfLnNldElucHV0KHdlYlNlcnZpY2VUZXN0VHlwZXNfKTsKLQotICAgIFRhYmxlTGF5b3V0IHRhYmxlTGF5b3V0ID0gbmV3IFRhYmxlTGF5b3V0KCk7Ci0gICAgVGFibGVDb2x1bW4gdGFibGVDb2x1bW4gPSBuZXcgVGFibGVDb2x1bW4odGFibGUsIFNXVC5OT05FKTsKLSAgICB0YWJsZUNvbHVtbi5zZXRUZXh0KFdTVUlQbHVnaW5NZXNzYWdlcy5MQUJFTF9DTElFTlRfVFlQRV9OQU1FKTsKLSAgICBDb2x1bW5XZWlnaHREYXRhIGNvbHVtbkRhdGEgPSBuZXcgQ29sdW1uV2VpZ2h0RGF0YSgyNTYsIDI1NiwgZmFsc2UpOwotICAgIHRhYmxlTGF5b3V0LmFkZENvbHVtbkRhdGEoY29sdW1uRGF0YSk7Ci0gICAgdGFibGUuc2V0TGF5b3V0KHRhYmxlTGF5b3V0KTsKLQotICAgIENvbXBvc2l0ZSBjID0gbmV3IENvbXBvc2l0ZSh3ZWJTZXJ2aWNlVGVzdFR5cGVDb21wb3NpdGUsIFNXVC5OT05FKTsKLSAgICBnbCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgZ2wubnVtQ29sdW1ucyA9IDE7Ci0gICAgZ2wubWFyZ2luSGVpZ2h0ID0gMTA7Ci0gICAgZ2wubWFyZ2luV2lkdGggPSAwOwotICAgIGMuc2V0TGF5b3V0KGdsKTsKLQotICAgIG1vdmVVcF8gPSBuZXcgQnV0dG9uKGMsIFNXVC5QVVNIKTsKLSAgICBtb3ZlVXBfLnNldFRleHQoV1NVSVBsdWdpbk1lc3NhZ2VzLkxBQkVMX01PVkVfVVApOwotICAgIG1vdmVVcF8uc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMKSk7Ci0gICAgbW92ZVVwXy5hZGRTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKLSAgICBtb3ZlVXBfLnNldFRvb2xUaXBUZXh0KFdTVUlQbHVnaW5NZXNzYWdlcy5UT09MVElQX01PVkVfVVApOwotCi0gICAgbW92ZURvd25fID0gbmV3IEJ1dHRvbihjLCBTV1QuUFVTSCk7Ci0gICAgbW92ZURvd25fLnNldFRleHQoV1NVSVBsdWdpbk1lc3NhZ2VzLkxBQkVMX01PVkVfRE9XTik7Ci0gICAgbW92ZURvd25fLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCkpOwotICAgIG1vdmVEb3duXy5hZGRTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKLSAgICBtb3ZlRG93bl8uc2V0VG9vbFRpcFRleHQoV1NVSVBsdWdpbk1lc3NhZ2VzLlRPT0xUSVBfTU9WRV9ET1dOKTsKLQotICAgIGluaXRpYWxpemVWYWx1ZXMoKTsKLSAgICBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZy5hcHBseURpYWxvZ0ZvbnQoc3VwZXJwYXJlbnQpOyAgICAKLQotICAgIHJldHVybiBwYXJlbnQ7Ci0gIH0KLQotICBwcml2YXRlIEJ1dHRvbiBjcmVhdGVDaGVja0JveCggQ29tcG9zaXRlIHBhcmVudCwgU3RyaW5nIHRleHQgKQotICB7Ci0gICAgQnV0dG9uIGJ1dHRvbiA9IG5ldyBCdXR0b24oIHBhcmVudCwgU1dULkNIRUNLICk7Ci0gICAgYnV0dG9uLnNldFRleHQoIHRleHQgKTsKLSAgICByZXR1cm4gYnV0dG9uOwotICB9Ci0KLSAgLyoqCi0gICAqIERvZXMgYW55dGhpbmcgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIGRlZmF1bHQgYnV0dG9uIGhhcyBiZWVuIHByZXNzZWQuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBwZXJmb3JtRGVmYXVsdHMoKQotICB7Ci0gICAgc3VwZXIucGVyZm9ybURlZmF1bHRzKCk7Ci0gICAgaW5pdGlhbGl6ZURlZmF1bHRzKCk7Ci0gIH0KLQotICAvKioKLSAgICogRG8gYW55dGhpbmcgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIE9LIGJ1dHRvbiBoYXMgYmVlbiBwcmVzc2VkLgotICAgKiAgQHJldHVybiB3aGV0aGVyIGl0IGlzIG9rYXkgdG8gY2xvc2UgdGhlIHByZWZlcmVuY2UgcGFnZQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gcGVyZm9ybU9rKCkKLSAgewotICAgIHRyeXsKLSAgICAgIHN0b3JlVmFsdWVzKCk7Ci0gICAgfWNhdGNoIChFeGNlcHRpb24gZXhjKXsKLSAgICAJZXhjLnByaW50U3RhY2tUcmFjZSgpO30KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHBlcmZvcm1BcHBseSgpCi0gIHsKLSAgICB0cnl7Ci0gIAlwZXJmb3JtT2soKTsKLSAgICB9Y2F0Y2goTnVsbFBvaW50ZXJFeGNlcHRpb24gZXhjKXsKLSAgICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBJV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2UKLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaCB3b3JrYmVuY2gpICB7IH0KLQotICAvKioKLSAgICogSW5pdGlhbGl6ZXMgc3RhdGVzIG9mIHRoZSBjb250cm9scyB0byB0aGVpciBidXJuZWQtaW4gZGVmYXVsdHMuCi0gICAqLwotICBwcml2YXRlIHZvaWQgaW5pdGlhbGl6ZURlZmF1bHRzKCkKLSAgewotICAgIFNjZW5hcmlvRGVmYXVsdHMgZGVmYXVsdHMgPSBuZXcgU2NlbmFyaW9EZWZhdWx0cygpOwotICAgIC8vcGdtIGxhdW5jaFNhbXBsZS5zZXRTZWxlY3Rpb24oIGRlZmF1bHRzLmdldExhdW5jaFNhbXBsZURlZmF1bHQoKSk7Ci0gICAgCi0gICAgd2ViU2VydmljZVRlc3RUeXBlc18uY2xlYXIoKTsKLSAgICBTdHJpbmdbXSB0eXBlcyA9IGRlZmF1bHRzLmdldFdlYlNlcnZpY2VUZXN0SWRzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7IGkrKykKLSAgICAgIHdlYlNlcnZpY2VUZXN0VHlwZXNfLmFkZCh0eXBlc1tpXSk7Ci0gICAgd2ViU2VydmljZVRlc3RUeXBlVmlld2VyXy5yZWZyZXNoKCk7Ci0gIH0KLQotICAvKioKLSAgICogSW5pdGlhbGl6ZXMgc3RhdGVzIG9mIHRoZSBjb250cm9scyBmcm9tIHRoZSBwcmVmZXJlbmNlIGhlbHBlci4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBpbml0aWFsaXplVmFsdWVzKCkKLSAgewotICAJU2NlbmFyaW9Db250ZXh0ICBjb250ZXh0ICA9IFdlYlNlcnZpY2VQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRTY2VuYXJpb0NvbnRleHQoKTsKLSAgICBTY2VuYXJpb0RlZmF1bHRzIGRlZmF1bHRzID0gbmV3IFNjZW5hcmlvRGVmYXVsdHMoKTsKLSAgICAKLSAgICBsYXVuY2hTYW1wbGUuc2V0U2VsZWN0aW9uKCBjb250ZXh0LmlzTGF1bmNoU2FtcGxlRW5hYmxlZCgpKTsKLSAgICAgICAgCi0gICAgU3RyaW5nW10gdHlwZXMgPSBjb250ZXh0LmdldFdlYlNlcnZpY2VUZXN0SWRzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7IGkrKykKLSAgICAgIHdlYlNlcnZpY2VUZXN0VHlwZXNfLmFkZCh0eXBlc1tpXSk7Ci0gICAgLy8gY2hlY2sgd2hldGhlciB3ZSBtaXNzZWQgYW55IHR5cGVzIGZyb20gdGhlIGRlZmF1bHQgbGlzdAotICAgIGJvb2xlYW4gbWlzc2VkID0gZmFsc2U7Ci0gICAgdHlwZXMgPSBkZWZhdWx0cy5nZXRXZWJTZXJ2aWNlVGVzdElkcygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgaWYgKHdlYlNlcnZpY2VUZXN0VHlwZXNfLmluZGV4T2YodHlwZXNbaV0pID09IC0xKQotICAgICAgewotICAgICAgICB3ZWJTZXJ2aWNlVGVzdFR5cGVzXy5hZGQodHlwZXNbaV0pOwotICAgICAgICBtaXNzZWQgPSB0cnVlOwotICAgICAgfQotICAgIH0KLSAgICBpZiAobWlzc2VkKQotICAgIHsKLSAgICAgIHR5cGVzID0gbmV3IFN0cmluZ1t3ZWJTZXJ2aWNlVGVzdFR5cGVzXy5zaXplKCldOwotICAgICAgd2ViU2VydmljZVRlc3RUeXBlc18uY29weUludG8odHlwZXMpOwotICAgICAgY29udGV4dC5zZXRXZWJTZXJ2aWNlVGVzdElkcyh0eXBlcyk7Ci0gICAgfQotICAgIC8vIHJlZnJlc2ggdmlld2VyCi0gICAgd2ViU2VydmljZVRlc3RUeXBlVmlld2VyXy5yZWZyZXNoKCk7Ci0gICB9Ci0KLSAgLyoqCi0gICAqIFN0b3JlcyB0aGUgdmFsdWVzIG9mIHRoZSBjb250cm9scyBiYWNrIHRvIHRoZSBwcmVmZXJlbmNlIGhlbHBlci4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBzdG9yZVZhbHVlcygpCi0gIHsKLSAgICBTY2VuYXJpb0NvbnRleHQgY29udGV4dCA9IFdlYlNlcnZpY2VQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRTY2VuYXJpb0NvbnRleHQoKTsKLSAgICBTdHJpbmdbXSB0eXBlcyA9IG5ldyBTdHJpbmdbd2ViU2VydmljZVRlc3RUeXBlc18uc2l6ZSgpXTsKLSAgICB3ZWJTZXJ2aWNlVGVzdFR5cGVzXy5jb3B5SW50byh0eXBlcyk7Ci0gICAgY29udGV4dC5zZXRXZWJTZXJ2aWNlVGVzdElkcyh0eXBlcyk7Ci0gICAgCi0gICAgY29udGV4dC5zZXRMYXVuY2hTYW1wbGVFbmFibGVkKGxhdW5jaFNhbXBsZS5nZXRTZWxlY3Rpb24oKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAgewotICB9Ci0KLSAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAgewotICAgIGludCBpbmRleCA9IHdlYlNlcnZpY2VUZXN0VHlwZVZpZXdlcl8uZ2V0VGFibGUoKS5nZXRTZWxlY3Rpb25JbmRleCgpOwotICAgIGlmIChpbmRleCAhPSAtMSkKLSAgICB7Ci0gICAgICBpZiAoZS53aWRnZXQgPT0gbW92ZVVwXyAmJiBpbmRleCA+IDApCi0gICAgICB7Ci0gICAgICAgIE9iamVjdCBvYmplY3QgPSB3ZWJTZXJ2aWNlVGVzdFR5cGVzXy5yZW1vdmUoaW5kZXgpOwotICAgICAgICB3ZWJTZXJ2aWNlVGVzdFR5cGVzXy5pbnNlcnRFbGVtZW50QXQob2JqZWN0LCBpbmRleC0xKTsKLSAgICAgICAgd2ViU2VydmljZVRlc3RUeXBlVmlld2VyXy5yZWZyZXNoKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChlLndpZGdldCA9PSBtb3ZlRG93bl8gJiYgaW5kZXggPCB3ZWJTZXJ2aWNlVGVzdFR5cGVzXy5zaXplKCktMSkKLSAgICAgIHsKLSAgICAgICAgT2JqZWN0IG9iamVjdCA9IHdlYlNlcnZpY2VUZXN0VHlwZXNfLnJlbW92ZShpbmRleCk7Ci0gICAgICAgIHdlYlNlcnZpY2VUZXN0VHlwZXNfLmluc2VydEVsZW1lbnRBdChvYmplY3QsIGluZGV4KzEpOwotICAgICAgICB3ZWJTZXJ2aWNlVGVzdFR5cGVWaWV3ZXJfLnJlZnJlc2goKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGNsYXNzIFdlYlNlcnZpY2VUZXN0VHlwZUNvbnRlbnRQcm92aWRlciBpbXBsZW1lbnRzIElTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyCi0gIHsKLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXIjZ2V0RWxlbWVudHMoT2JqZWN0KQotICAgICAqLwotICAgIHB1YmxpYyBPYmplY3RbXSBnZXRFbGVtZW50cyhPYmplY3QgdmFsdWUpIAotICAgIHsKLSAgICAgIHJldHVybiAoKFZlY3Rvcil2YWx1ZSkudG9BcnJheShuZXcgU3RyaW5nWzBdKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUNvbnRlbnRQcm92aWRlciNkaXNwb3NlKCkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkgCi0gICAgewotICAgIH0KLQotICAgIC8qKgotICAgICAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQ29udGVudFByb3ZpZGVyI2lucHV0Q2hhbmdlZChWaWV3ZXIsIE9iamVjdCwgT2JqZWN0KQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGlucHV0Q2hhbmdlZChWaWV3ZXIgYXJnMCwgT2JqZWN0IGFyZzEsIE9iamVjdCBhcmcyKSAKLSAgICB7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBjbGFzcyBXZWJTZXJ2aWNlVGVzdFR5cGVMYWJlbFByb3ZpZGVyIGV4dGVuZHMgTGFiZWxQcm92aWRlcgotICB7Ci0gICAgcHVibGljIFdlYlNlcnZpY2VUZXN0VHlwZUxhYmVsUHJvdmlkZXIoKQotICAgIHsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlciNnZXRJbWFnZShPYmplY3QpCi0gICAgKi8KLSAgICBwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoT2JqZWN0IGFyZzApIAotICAgIHsgCi0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXIjZ2V0VGV4dChPYmplY3QpCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCB2YWx1ZSkgCi0gICAgewotICAgICAgV2ViU2VydmljZVRlc3RFeHRlbnNpb24gZXh0ZW5zaW9uID0gKFdlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uKSBXZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5LmdldEluc3RhbmNlKCkKLSAgICAgIAkJLmdldFdlYlNlcnZpY2VFeHRlbnNpb25zQnlJZCh2YWx1ZS50b1N0cmluZygpKTsKLSAgICAgIGlmIChleHRlbnNpb24gIT0gbnVsbCkKLSAgICAJICByZXR1cm4gZXh0ZW5zaW9uLmdldExhYmVsKCk7Ci0gICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvdWkvdWRkaS9Qcml2YXRlVURESVJlZ2lzdHJ5VHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS91ZGRpL1ByaXZhdGVVRERJUmVnaXN0cnlUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4NmQwMjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC91aS91ZGRpL1ByaXZhdGVVRERJUmVnaXN0cnlUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnVpLnVkZGk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZzsKLQotcHVibGljIGludGVyZmFjZSBQcml2YXRlVURESVJlZ2lzdHJ5VHlwZQotewotICAgIHB1YmxpYyBib29sZWFuIGlzUHJpdmF0ZVVERElSZWdpc3RyeUluc3RhbGxlZCgpOwotICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRQcml2YXRlVURESVJlZ2lzdHJ5SW5xdWlyeUFQSSgpOwotICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRQcml2YXRlVURESVJlZ2lzdHJ5UHVibGlzaEFQSSgpOwotICAgIHB1YmxpYyBDb21tYW5kV2lkZ2V0QmluZGluZyBnZXRCaW5kaW5nKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy8uY2xhc3NwYXRoIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2U3MzkzMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTAxYjBmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLWJpbgotYnVpbGQueG1sCi10ZW1wLmZvbGRlcgotd3MuamFyCi1AZG90Ci1zcmMuemlwCi1qYXZhQ29tcGlsZXIuLi5hcmdzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy8ucHJvamVjdCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDE0NTE3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanN0LndzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM1Mjg0Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0jTW9uIEphbiAzMCAxMDozNToyNiBFU1QgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiY2M4YzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSNNb24gSmFuIDMwIDEwOjQxOjQyIEVTVCAyMDA2Ci1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0xCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0xCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmRmZGE1Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVQTFVHSU5fTkFNRQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuanN0LndzCi1CdW5kbGUtVmVyc2lvbjogMS4wLjMwNC5xdWFsaWZpZXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5wbHVnaW4uV2ViU2VydmljZVBsdWdpbgotQnVuZGxlLVZlbmRvcjogJVBMVUdJTl9QUk9WSURFUgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1hbmQ7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLnJ1bGVzO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQ7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZGF0YTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5kaWFsb2c7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZXh0O3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmV4dC50ZXN0O3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnBsdWdpbjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC53c3J0Ci1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52O2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLmplbS51dGlsO2J1bmRsZS12ZXJzaW9uPSJbMi4wLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZW0ud29ya2JlbmNoO2J1bmRsZS12ZXJzaW9uPSJbMi4wLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZW07YnVuZGxlLXZlcnNpb249IlsyLjAuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLmpkdC5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5lbWYuY29tbW9uO2J1bmRsZS12ZXJzaW9uPSJbMi4yLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsMy40LjApIiwKLSBvcmcuZWNsaXBzZS5qZmFjZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuZW1mLmVjb3JlO2J1bmRsZS12ZXJzaW9uPSJbMi4yLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZW0ud29ya2JlbmNoO2J1bmRsZS12ZXJzaW9uPSJbMi4wLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAyLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGw7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC5qMmVlLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC5qMmVlLmVqYjtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2UuanN0LmoyZWU7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24ubW9kdWxlY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pO2J1bmRsZS12ZXJzaW9uPSJbMi4yLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZW0udXRpbDtidW5kbGUtdmVyc2lvbj0iWzIuMC4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudDtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDAsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDIuMC4wKSIsCi0gY29tLmlibS5pY3U7YnVuZGxlLXZlcnNpb249IlszLjQuNCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53cztidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDAsMS4xLjApIgotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MvYWJvdXQuaHRtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGIzNmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MvYnVpbGQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkNTkzNmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLXNyYy5pbmNsdWRlcyA9IGNvbXBvbmVudC54bWwKLWJpbi5pbmNsdWRlcyA9IC4sXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKLXNvdXJjZS4uID0gc3JjLwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MvY29tcG9uZW50LnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL2NvbXBvbmVudC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5MGJmMTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MvY29tcG9uZW50LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y29tcG9uZW50IHhtbG5zPSJodHRwOi8vZWNsaXBzZS5vcmcvd3RwL3JlbGVuZy90b29scy9jb21wb25lbnQtbW9kZWwiIG5hbWU9Im9yZy5lY2xpcHNlLmpzdC53cyI+Ci0gICA8Y29tcG9uZW50LWRlcGVuZHMgdW5yZXN0cmljdGVkPSJ0cnVlIj4KLSAgIDwvY29tcG9uZW50LWRlcGVuZHM+Ci0gICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MiIGZyYWdtZW50PSJmYWxzZSIvPgotICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZSIgZnJhZ21lbnQ9ImZhbHNlIi8+Ci0gICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi51aSIgZnJhZ21lbnQ9ImZhbHNlIi8+Ci0gICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aSIgZnJhZ21lbnQ9ImZhbHNlIi8+Ci0gICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24iIGZyYWdtZW50PSJmYWxzZSIvPgotICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpIiBmcmFnbWVudD0iZmFsc2UiLz4KLSAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi5lamIudWkiIGZyYWdtZW50PSJmYWxzZSIvPgotICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNyZWF0aW9uLnVpIiBmcmFnbWVudD0iZmFsc2UiLz4KLSAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy51ZGRpcmVnaXN0cnkiIGZyYWdtZW50PSJmYWxzZSIvPgotICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UuanN0LndzLnVpIiBmcmFnbWVudD0iZmFsc2UiLz4KLTwvY29tcG9uZW50PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3MvcGx1Z2luLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTA1YThiZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgTWVzc2FnZXMgaW4gcGx1Z2luLnhtbC4KLSMKLVBMVUdJTl9OQU1FPVdlYiBTZXJ2aWNlcwotUExVR0lOX1BST1ZJREVSPUVjbGlwc2Uub3JnCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL1dTUGx1Z2luLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL1dTUGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhYWE3NWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9XU1BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLU1TR19FUlJPUl9TRVJWRVI9SVdBQjAyMTNFIEVycm9yIGluIHN0YXJ0aW5nIHNlcnZlci4KLQotQU5ZX0ZJTFRFUl9OQU1FPUFsbCBmaWxlcwotQU5ZX0ZJTFRFUl9ERVNDPVRoaXMgaXMgYSBraW5kIG9mIEZpbHRlciB0aGF0IGFjY2VwdHMgYWxsIG9iamVjdHMuCi0KLUVSUk9SX1NFTEVDVElPTl9UUkFOU0ZPUk09U3BlY2lmaWVkIHNlbGVjdGlvbiBkb2VzIG5vdCBtYXRjaCBhIHJlc291cmNlLgotCi1NU0dfSkFYUlBDMTFfTk9UX0NPTVBMSUFOVD1UaGUgc2VydmljZSBjbGFzcyAiezB9IiBkb2VzIG5vdCBjb21wbHkgdG8gb25lIG9yIG1vcmUgcmVxdWlyZW1lbnRzIG9mIHRoZSBKQVgtUlBDIDEuMSBzcGVjaWZpY2F0aW9uLCBhbmQgbWF5IG5vdCBkZXBsb3kgb3IgZnVuY3Rpb24gY29ycmVjdGx5LgotTVNHX0pBWFJQQzExX1VOUkVTT0xWRURfQ0xBU1M9VGhlIGNsYXNzICJ7MH0iIGNhbm5vdCBiZSBsb2FkZWQgdmlhIHByb2plY3QgInsxfSIuIENoZWNrIHRoYXQgdGhlIHByb2plY3QgY29udGFpbnMgdGhlIGNsYXNzLCBvciB0aGF0IHRoZSBjbGFzcyBpcyBsb2FkYWJsZSBhY2NvcmRpbmcgdG8gdGhlIEphdmEgQnVpbGQgUGF0aCBvZiB0aGUgcHJvamVjdC4KLU1TR19KQVhSUEMxMV9VTlJFU09MVkVEX1RZUEU9QSBkYXRhIHR5cGUsICJ7MH0iLCBjb3VsZCBub3QgYmUgcmVzb2x2ZWQgd2hpbGUgYW5hbHl6aW5nIHRoZSBzZXJ2aWNlIGNsYXNzLiBDaGVjayB5b3VyIHByb2plY3QgY2xhc3NwYXRoLgotTVNHX0pBWFJQQzExX1JVTEVfMDAwMT1UaGUgc2VydmljZSBjbGFzcyAiezB9IiBkb2VzIG5vdCBoYXZlIGEgcHVibGljIGRlZmF1bHQgY29uc3RydWN0b3IuIENoYXB0ZXIgMTAuMSBvZiB0aGUgSkFYLVJQQyAxLjEgc3BlY2lmaWNhdGlvbiByZXF1aXJlcyBhIHNlcnZpY2UgY2xhc3MgdG8gaGF2ZSBhIHB1YmxpYyBkZWZhdWx0IGNvbnN0cnVjdG9yLCBvdGhlcndpc2UgYSBKQVgtUlBDIDEuMSBjb21wbGlhbnQgV2ViIHNlcnZpY2UgZW5naW5lIG1heSBiZSB1bmFibGUgdG8gY29uc3RydWN0IGFuIGluc3RhbmNlIG9mIHRoZSBzZXJ2aWNlIGNsYXNzIHRvIGhhbmRsZSBhbiBpbmNvbWluZyByZXF1ZXN0IG1lc3NhZ2UuIAotTVNHX0pBWFJQQzExX1JVTEVfMDAwMj1UaGUgdmFsdWUgdHlwZSAiezB9IiB1c2VkIHZpYSB0aGUgc2VydmljZSBjbGFzcyAiezF9IiBkb2VzIG5vdCBoYXZlIGEgcHVibGljIGRlZmF1bHQgY29uc3RydWN0b3IuIENoYXB0ZXIgNS40IG9mIHRoZSBKQVgtUlBDIDEuMSBzcGVjaWZpY2F0aW9uIHJlcXVpcmVzIGEgdmFsdWUgdHlwZSB0byBoYXZlIGEgcHVibGljIGRlZmF1bHQgY29uc3RydWN0b3IsIG90aGVyd2lzZSBhIEpBWC1SUEMgMS4xIGNvbXBsaWFudCBXZWIgc2VydmljZSBlbmdpbmUgbWF5IGJlIHVuYWJsZSB0byBjb25zdHJ1Y3QgYW4gaW5zdGFuY2Ugb2YgdGhlIHZhbHVlIHR5cGUgZHVyaW5nIGRlc2VyaWFsaXphdGlvbi4KLU1TR19KQVhSUEMxMV9SVUxFXzAwMDM9VGhlIG1ldGhvZCAiezB9IiBvbiB0aGUgc2VydmljZSBjbGFzcyAiezF9IiBpcyBvdmVybG9hZGVkLiBPdmVybG9hZGVkIG1ldGhvZHMgYXJlIGFsbG93ZWQgYnkgY2hhcHRlciA1LjUuNSBvZiB0aGUgSkFYLVJQQyAxLjEgc3BlY2lmaWNhdGlvbiwgaG93ZXZlciwgc29tZSBKQVgtUlBDIDEuMSBjb21wbGlhbnQgdG9vbHMgbWF5IG5vdCBhbGxvdyBvdmVybG9hZGVkIG1ldGhvZHMgb3IgbWF5IGdlbmVyYXRlIFdTREwgd2l0aCBvdmVybG9hZGVkIG9wZXJhdGlvbnMgYXMgY29udHJhcnkgdG8gcnVsZSBSMjMwNCBvZiB0aGUgV1MtSSBCYXNpYyBQcm9maWxlLgotTVNHX0pBWFJQQzExX1JVTEVfMDAwND1UaGUgc2VydmljZSBzcGVjaWZpYyBleGNlcHRpb24gY2xhc3MgInswfSIgZG9lcyBub3QgaGF2ZSBhIHB1YmxpYyBjb25zdHJ1Y3RvciB3aXRoIHBhcmFtZXRlcnMgY29ycmVzcG9uZGluZyBpbiBudW1iZXIgYW5kIHR5cGUgdG8gdGhlIGdldHRlciBtZXRob2RzIG9uIHRoZSBjbGFzcy4gQ2hhcHRlciA1LjUuNSBvZiB0aGUgSkFYLVJQQyAxLjEgc3BlY2lmaWNhdGlvbiByZXF1aXJlcyBhIHNlcnZpY2Ugc3BlY2lmaWMgZXhjZXB0aW9uIHRvIGhhdmUgYSBwdWJsaWMgY29uc3RydWN0b3Igd2l0aCB0aGUgc2FtZSBudW1iZXIgb2YgcGFyYW1ldGVycyBhcyB0aGVyZSBhcmUgZ2V0dGVyIG1ldGhvZHMsIGFuZCBvZiBtYXRjaGluZyBkYXRhIHR5cGVzLCBvdGhlcndpc2UgYSBKQVgtUlBDIDEuMSBjb21wbGlhbnQgV2ViIHNlcnZpY2UgZW5naW5lIG1heSBiZSB1bmFibGUgdG8gY29uc3RydWN0IGFuIGluc3RhbmNlIG9mIHRoZSBleGNlcHRpb24gZHVyaW5nIGRlc2VyaWFsaXphdGlvbiBvZiBhIGZhdWx0IG1lc3NhZ2UuCi1NU0dfSkFYUlBDMTFfUlVMRV8wMDA1PVRoZSBtZXRob2QgInswfSIgb24gdGhlIHNlcnZpY2UgY2xhc3MgInsxfSIgdXNlcyBhIGRhdGEgdHlwZSwgInsyfSIsIHRoYXQgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgSkFYLVJQQyBzcGVjaWZpY2F0aW9uLiBJbnN0YW5jZXMgb2YgdGhlIHR5cGUgbWF5IG5vdCBzZXJpYWxpemUgb3IgZGVzZXJpYWxpemUgY29ycmVjdGx5LiBMb3NzIG9mIGRhdGEgb3IgY29tcGxldGUgZmFpbHVyZSBvZiB0aGUgV2ViIHNlcnZpY2UgbWF5IHJlc3VsdC4KLU1TR19KQVhSUEMxMV9SVUxFXzAwMDY9VGhlIGZpZWxkIG9yIHByb3BlcnR5ICJ7MH0iIG9uIHRoZSB2YWx1ZSB0eXBlICJ7MX0iIHVzZWQgdmlhIHRoZSBzZXJ2aWNlIGNsYXNzICJ7Mn0iIGhhcyBhIGRhdGEgdHlwZSwgInszfSIsIHRoYXQgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgSkFYLVJQQyAxLjEgc3BlY2lmaWNhdGlvbi4gSW5zdGFuY2VzIG9mIHRoZSB0eXBlIG1heSBub3Qgc2VyaWFsaXplIG9yIGRlc2VyaWFsaXplIGNvcnJlY3RseS4gTG9zcyBvZiBkYXRhIG9yIGNvbXBsZXRlIGZhaWx1cmUgb2YgdGhlIFdlYiBzZXJ2aWNlIG1heSByZXN1bHQuCi1NU0dfSkFYUlBDMTFfUlVMRV8wMDA3PVRoZSBwcmltaXRpdmUgdHlwZSAiezB9IiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBKQVgtUlBDIDEuMSBzcGVjaWZpY2F0aW9uLiBBcyBzdGF0ZWQgaW4gY2hhcHRlciA1LjEuMSBvZiB0aGUgc3BlY2lmaWNhdGlvbiwgdGhlIHN1cHBvcnRlZCBwcmltaXRpdmUgdHlwZXMgYXJlICJib29sZWFuIiwgImJ5dGUiLCAic2hvcnQiLCAiaW50IiwgImxvbmciLCAiZmxvYXQiIGFuZCAiZG91YmxlIi4KLU1TR19KQVhSUEMxMV9SVUxFXzAwMDg9VGhlIHdyYXBwZXIgdHlwZSAiezB9IiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBKQVgtUlBDIDEuMSBzcGVjaWZpY2F0aW9uLiBBcyBzdGF0ZWQgaW4gY2hhcHRlciA1LjEuMSBvZiB0aGUgc3BlY2lmaWNhdGlvbiwgdGhlIHN1cHBvcnRlZCB3cmFwcGVyIHR5cGVzIGFyZSB0aG9zZSBjb3JyZXNwb25kaW5nIHRvICJib29sZWFuIiwgImJ5dGUiLCAic2hvcnQiLCAiaW50IiwgImxvbmciLCAiZmxvYXQiIGFuZCAiZG91YmxlIi4KLU1TR19KQVhSUEMxMV9SVUxFXzAwMDk9VGhlIEphdmEgdHlwZSAiezB9IiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBKQVgtUlBDIDEuMSBzcGVjaWZpY2F0aW9uLiBBcyBzdGF0ZWQgaW4gY2hhcHRlciA1LjEuMyBvZiB0aGUgc3BlY2lmaWNhdGlvbiwgdGhlIHN1cHBvcnRlZCBzdGFuZGFyZCB0eXBlcyBhcmUgImphdmEubGFuZy5TdHJpbmciLCAiamF2YS51dGlsLkRhdGUiLCAiamF2YS51dGlsLkNhbGVuZGFyIiwgImphdmEubWF0aC5CaWdJbnRlZ2VyIiwgImphdmEubWF0aC5CaWdEZWNpbWFsIiwgImphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUiIGFuZCAiamF2YS5uZXQuVVJJIi4KLU1TR19KQVhSUEMxMV9SVUxFXzAwMTA9U3VwcG9ydCBmb3IgY29sbGVjdGlvbiBhbmQgbWFwIGNsYXNzZXMgc3VjaCBhcyAiezB9IiBpcyBub3QgcmVxdWlyZWQgYnkgSkFYLVJQQyAxLjEuIER1ZSB0byB0aGVpciBub24tdHlwZSBzYWZlIG5hdHVyZSwgYSBKQVgtUlBDIDEuMSBjb21wbGlhbnQgV2ViIHNlcnZpY2UgZW5naW5lIG1heSBub3QgaGFuZGxlIGNvbGxlY3Rpb25zLCBvciBtYXkgcmVwcmVzZW50IHRoZW0gaW4gV1NETCBkb2N1bWVudHMgYW5kIFNPQVAgbWVzc2FnZXMgaW4gYSBtYW5uZXIgdGhhdCBpbXBhaXJzIGludGVyb3BlcmFiaWxpdHkuIFRoZSB1c2Ugb2YgYXJyYXlzIGluc3RlYWQgb2YgY29sbGVjdGlvbnMgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQuCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL1dTUGx1Z2luTWVzc2FnZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvV1NQbHVnaW5NZXNzYWdlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjk1NzkzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvV1NQbHVnaW5NZXNzYWdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDIwICAgMTMyOTA1IGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5ICAgICAgICAgIAotICogMjAwNjA2MDcgICAxNDU2MDQgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkgICAgICAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLQotcHVibGljIGZpbmFsIGNsYXNzIFdTUGx1Z2luTWVzc2FnZXMgZXh0ZW5kcyBOTFMgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gIm9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5XU1BsdWdpbiI7Ly8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBXU1BsdWdpbk1lc3NhZ2VzKCkgewotCQkvLyBEbyBub3QgaW5zdGFudGlhdGUKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfU0VSVkVSOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFOWV9GSUxURVJfTkFNRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBBTllfRklMVEVSX0RFU0M7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgRVJST1JfU0VMRUNUSU9OX1RSQU5TRk9STTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfSkFYUlBDMTFfTk9UX0NPTVBMSUFOVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfSkFYUlBDMTFfVU5SRVNPTFZFRF9DTEFTUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfSkFYUlBDMTFfVU5SRVNPTFZFRF9UWVBFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19KQVhSUEMxMV9SVUxFXzAwMDE7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0pBWFJQQzExX1JVTEVfMDAwMjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfSkFYUlBDMTFfUlVMRV8wMDAzOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19KQVhSUEMxMV9SVUxFXzAwMDQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0pBWFJQQzExX1JVTEVfMDAwNTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfSkFYUlBDMTFfUlVMRV8wMDA2OwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19KQVhSUEMxMV9SVUxFXzAwMDc7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0pBWFJQQzExX1JVTEVfMDAwODsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfSkFYUlBDMTFfUlVMRV8wMDA5OwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19KQVhSUEMxMV9SVUxFXzAwMTA7Ci0KLQlzdGF0aWMgewotCQlOTFMuaW5pdGlhbGl6ZU1lc3NhZ2VzKEJVTkRMRV9OQU1FLCBXU1BsdWdpbk1lc3NhZ2VzLmNsYXNzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1hbmQvTnVsbFN0YXR1c01vbml0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbWFuZC9OdWxsU3RhdHVzTW9uaXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NWFiN2Q4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbWFuZC9OdWxsU3RhdHVzTW9uaXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1hbmQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotCi0vKioKLSogQSBOdWxsU3RhdHVzUmVuZGVyZXIgdGhyb3dzIGF3YXkgSVN0YXR1cyBpbmZvcm1hdGlvbi4KLSovCi1wdWJsaWMgY2xhc3MgTnVsbFN0YXR1c01vbml0b3IgaW1wbGVtZW50cyBTdGF0dXNNb25pdG9yCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gcmVzdWx0OwotCi0gIC8qKgotICAqIERlZmF1bHQgY29uc3RydWN0b3IuCi0gICovCi0gIHB1YmxpYyBOdWxsU3RhdHVzTW9uaXRvciAoKSAge30KLSAgLyoqCi0gICogRG9lcyBub3RoaW5nLgotICAqLwotICBwdWJsaWMgaW50IHJlcG9ydFN0YXR1cyhJU3RhdHVzIHN0YXR1cywgVmVjdG9yIG9wdGlvbnMpIHsgcmV0dXJuIDA7IH0KLSAgcHVibGljIGJvb2xlYW4gcmVwb3J0U3RhdHVzKElTdGF0dXMgc3RhdHVzKSAKLSAgeyAKLSAgICBzd2l0Y2ggKHN0YXR1cy5nZXRTZXZlcml0eSgpKQotICAgIHsKLSAgICAgIGNhc2UgSVN0YXR1cy5FUlJPUjoKLSAgICAgIGNhc2UgSVN0YXR1cy5XQVJOSU5HOgotICAgICAgCQlyZXN1bHQgPSBmYWxzZTsKLSAgICAgIAkJYnJlYWs7Ci0JICBjYXNlIElTdGF0dXMuSU5GTzoKLSAgICAgIGRlZmF1bHQ6IC8vSVN0YXR1cy5PSwotICAgICAgCQlyZXN1bHQgPSB0cnVlOyAKLSAgICAgIAkJYnJlYWs7Ci0gICAgIH0KLSAJcmV0dXJuIHJlc3VsdDsKLSAgfQotICBwdWJsaWMgdm9pZCBkdW1wU2F2ZWRTdGF0dXMoKSB7IH0KLSAgcHVibGljIGJvb2xlYW4gY2FuQ29udGludWUoKSAKLSAgeyAKLQlyZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVzZXQgKCkgewotICAJCXJlc3VsdCA9IHRydWU7Ci0gIAl9Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbWFuZC9TdGF0dXNNb25pdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1hbmQvU3RhdHVzTW9uaXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNGFjODAyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbWFuZC9TdGF0dXNNb25pdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbWFuZDsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci0KLS8qKgotKiBBIFN0YXR1c01vbml0b3IgcmVwb3J0cyBJU3RhdHVzIGluZm9ybWF0aW9uIHRvIGEgZGlzcGxheSBzeXN0ZW0uCi0qLwotcHVibGljIGludGVyZmFjZSBTdGF0dXNNb25pdG9yCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgLyoqCi0gICogcmVwb3J0cyB0aGUgY29udGVudHMgb2YgdGhlIGdpdmVuIHN0YXR1cyBvYmplY3QuCi0gICogU3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCB0aGlzIG1ldGhvZCB0byByZXBvcnQKLSAgKiBJU3RhdHVzIGluZm9ybWF0aW9uIHRvIGEgZ2l2ZW4gZGlzcGxheSBzeXN0ZW0sCi0gICogc3VjaCBhcyBTV1QsIHRoZSBjb21tYW5kIGxpbmUsIG9yIGEgdHJhY2UgZmlsZS4KLSAgKi8KLSAgcHVibGljIGludCByZXBvcnRTdGF0dXMoSVN0YXR1cyBzdGF0dXMsIFZlY3RvciBvcHRpb25zKTsKLSAgcHVibGljIGJvb2xlYW4gcmVwb3J0U3RhdHVzKElTdGF0dXMgc3RhdHVzKTsKLSAgcHVibGljIHZvaWQgZHVtcFNhdmVkU3RhdHVzKCk7Ci0gIHB1YmxpYyBib29sZWFuIGNhbkNvbnRpbnVlKCk7Ci0gIHB1YmxpYyB2b2lkIHJlc2V0KCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1hbmQvU3RhdHVzUmVuZGVyZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbWFuZC9TdGF0dXNSZW5kZXJlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwY2ZmM2E2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbWFuZC9TdGF0dXNSZW5kZXJlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tYW5kOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci0KLS8qKgotKiBBIFN0YXR1c1JlbmRlcmVyIHJlbmRlcnMgSVN0YXR1cyBpbmZvcm1hdGlvbiB0byBhIGRpc3BsYXkgc3lzdGVtLgotKi8KLXB1YmxpYyBpbnRlcmZhY2UgU3RhdHVzUmVuZGVyZXIKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAvKioKLSAgKiBSZW5kZXJzIHRoZSBjb250ZW50cyBvZiB0aGUgZ2l2ZW4gc3RhdHVzIG9iamVjdC4KLSAgKiBTdWJjbGFzc2VzIG11c3QgaW1wbGVtZW50IHRoaXMgbWV0aG9kIHRvIHJlbmRlcgotICAqIElTdGF0dXMgaW5mb3JtYXRpb24gdG8gYSBnaXZlbiBkaXNwbGF5IHN5c3RlbSwKLSAgKiBzdWNoIGFzIFNXVCwgdGhlIGNvbW1hbmQgbGluZSwgb3IgYSB0cmFjZSBmaWxlLgotICAqLwotICBwdWJsaWMgdm9pZCByZW5kZXIgKCBJU3RhdHVzIHN0YXR1cyApOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vQW55RmlsdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9BbnlGaWx0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTVhOGYxNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9BbnlGaWx0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5wbHVnaW4uV2ViU2VydmljZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuV1NQbHVnaW5NZXNzYWdlczsKLQotLyoqCi0qIFRoaXMgaXMgYSBraW5kIG9mIHtAbGluayBGaWx0ZXJ9IHRoYXQgYWNjZXB0cyBhbGwgb2JqZWN0cywKLSogYW5kIGlzIGEgc3VpdGFibGUgYmFzZSBjbGFzcyBmb3IgbmV3IDxjb2RlPkZpbHRlcnM8L2NvZGU+LgotKi8KLXB1YmxpYyBjbGFzcyBBbnlGaWx0ZXIgaW1wbGVtZW50cyBGaWx0ZXIKLXsKLQotICAvKioKLSAgKiBDb25zdHJ1Y3RzIGEgbmV3IDxjb2RlPkFueUZpbHRlcjwvY29kZT4uCi0gICovCi0gIHB1YmxpYyBBbnlGaWx0ZXIgKCkKLSAgewotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbG9jYWxlLXNwZWNpZmljIG5hbWUgb2YgdGhpcyBmaWx0ZXIuCi0gICogQHJldHVybiBUaGUgbG9jYWxlLXNwZWNpZmljIG5hbWUgb2YgdGhpcyBmaWx0ZXIuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSAoKQotICB7Ci0gICAgcmV0dXJuIFdTUGx1Z2luTWVzc2FnZXMuQU5ZX0ZJTFRFUl9OQU1FOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbG9jYWxlLXNwZWNpZmljIGRlc2NyaXB0aW9uIG9mIHRoaXMgZmlsdGVyLgotICAqIEByZXR1cm4gVGhlIGxvY2FsZS1zcGVjaWZpYyBkZXNjcmlwdGlvbiBvZiB0aGlzIGZpbHRlci4KLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbiAoKQotICB7Ci0gICAgcmV0dXJuIFdTUGx1Z2luTWVzc2FnZXMuQU5ZX0ZJTFRFUl9ERVNDOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyBhbiB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXN9Ci0gICogZGVzY3JpYmluZyB0aGUgPGNvZGU+RmlsdGVyPC9jb2RlPidzIGFzc2Vzc21lbnQgb2YKLSAgKiB0aGUgZ2l2ZW4gPGNvZGU+b2JqZWN0PC9jb2RlPi4KLSAgKiBTZWUge0BsaW5rIEZpbHRlciNzdGF0dXNPZn0gZm9yIGdlbmVyYWwgY29tbWVudHMuCi0gICogVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgPGNvZGU+QW55RmlsdGVyPC9jb2RlPgotICAqIHJldHVybnMgYSBzdGF0dXMgd2l0aCBzZXZlcml0eSA8Y29kZT5JU3RhdHVzLk9LPC9jb2RlPi4KLSAgKiBTdWJjbGFzc2VzIG1heSBvdmVycmlkZS4KLSAgKiBAcGFyYW0gb2JqZWN0IFRoZSBvYmplY3QgdG8gZmlsdGVyLgotICAqIEByZXR1cm4gQW4ge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzfS4KLSAgKi8KLSAgcHVibGljIElTdGF0dXMgc3RhdHVzT2YgKCBPYmplY3Qgb2JqZWN0ICkKLSAgewotICAgIHJldHVybiBuZXcgU3RhdHVzKElTdGF0dXMuT0ssV2ViU2VydmljZVBsdWdpbi5JRCwwLCIiLG51bGwpOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0cnVlIGlmIGFuZCBvbmx5IGlmIHtAbGluayAjc3RhdHVzT2Z9IHJldHVybnMKLSAgKiBhbiB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXN9IHdpdGggYQotICAqIHNldmVyaXR5IG9mIGxlc3MgdGhhbiA8Y29kZT5JU3RhdHVzLkVSUk9SPC9jb2RlPi4KLSAgKiBTdWJjbGFzc2VzIG1heSBvdmVycmlkZSB0byBwcm92aWRlIGEgaGlnaGVyLXBlcmZvcm1hbmNlCi0gICogaW1wbGVtZW50YXRpb24uCi0gICogQHBhcmFtIG9iamVjdCBUaGUgb2JqZWN0IHRvIGZpbHRlci4KLSAgKiBAcmV0dXJuIFRydWUgaWYgYW5kIG9ubHkgaWYge0BsaW5rICNzdGF0dXNPZn0gcmV0dXJucwotICAqIGFuIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1c30gd2l0aCBhCi0gICogc2V2ZXJpdHkgb2YgbGVzcyB0aGFuIDxjb2RlPklTdGF0dXMuRVJST1I8L2NvZGU+LgotICAqLwotICBwdWJsaWMgYm9vbGVhbiBhY2NlcHRzICggT2JqZWN0IG9iamVjdCApCi0gIHsKLSAgICByZXR1cm4gIXN0YXR1c09mKG9iamVjdCkubWF0Y2hlcyhJU3RhdHVzLkVSUk9SKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vRmlsdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9GaWx0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODY4NzZmYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9GaWx0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLQotLyoqCi0qIFRoaXMgaXMgdGhlIGludGVyZmFjZSBmb3IgYSBjbGFzcyBvZiBvYmplY3RzIHRoYXQgZmlsdGVyCi0qIG90aGVyIG9iamVjdHMgZm9yIGluY2x1c2lvbiBvciBleGNsdXNpb24gYnkgc29tZSBjb25zdW1lci4KLSovCi1wdWJsaWMgaW50ZXJmYWNlIEZpbHRlcgotewotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIGxvY2FsZS1zcGVjaWZpYyBuYW1lIG9mIHRoaXMgZmlsdGVyLgotICAqIEByZXR1cm4gVGhlIGxvY2FsZS1zcGVjaWZpYyBuYW1lIG9mIHRoaXMgZmlsdGVyLgotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUgKCk7Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbG9jYWxlLXNwZWNpZmljIGRlc2NyaXB0aW9uIG9mIHRoaXMgZmlsdGVyLgotICAqIEByZXR1cm4gVGhlIGxvY2FsZS1zcGVjaWZpYyBkZXNjcmlwdGlvbiBvZiB0aGlzIGZpbHRlci4KLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbiAoKTsKLQotICAvKioKLSAgKiBSZXR1cm5zIGFuIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1c30KLSAgKiBkZXNjcmliaW5nIHRoZSA8Y29kZT5GaWx0ZXI8L2NvZGU+J3MgYXNzZXNzbWVudCBvZgotICAqIHRoZSBnaXZlbiA8Y29kZT5vYmplY3Q8L2NvZGU+LgotICAqIFRoZSBzZXZlcml0eSBvZiB0aGUKLSAgKiByZXR1cm5lZCA8Y29kZT5JU3RhdHVzPC9jb2RlPiBpcyBhcyBmb2xsb3dzOgotICAqIDx1bD4KLSAgKiA8bGk+Ci0gICoge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzI09LfQotICAqIGlmIHRoZSA8Y29kZT5GaWx0ZXI8L2NvZGU+IGFjY2VwdHMgdGhlIDxjb2RlPm9iamVjdDwvY29kZT4KLSAgKiB3aXRoIG5vIGZ1cnRoZXIgaW5mb3JtYXRpb24gZm9yIHRoZSBjYWxsZXIgKG1lYW5pbmcgdGhlCi0gICoge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzI2dldE1lc3NhZ2V9IGFuZAotICAqIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1cyNnZXRFeGNlcHRpb259IG1ldGhvZHMKLSAgKiBhcmUgaWdub3JlZCkuCi0gICogPGxpPgotICAqIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1cyNJTkZPfQotICAqIGlmIHRoZSA8Y29kZT5GaWx0ZXI8L2NvZGU+IGFjY2VwdHMgdGhlIDxjb2RlPm9iamVjdDwvY29kZT4KLSAgKiBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG1heSBiZSBhdmFpbGFibGUgZnJvbSB0aGUKLSAgKiB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXMjZ2V0TWVzc2FnZX0gYW5kCi0gICoge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzI2dldEV4Y2VwdGlvbn0gbWV0aG9kcy4KLSAgKiA8bGk+Ci0gICoge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzI1dBUk5JTkd9Ci0gICogaWYgdGhlIDxjb2RlPkZpbHRlcjwvY29kZT4gYWNjZXB0cyB0aGUgPGNvZGU+b2JqZWN0PC9jb2RlPi4KLSAgKiBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG1heSBiZSBhdmFpbGFibGUgZnJvbSB0aGUKLSAgKiB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXMjZ2V0TWVzc2FnZX0gYW5kCi0gICoge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzI2dldEV4Y2VwdGlvbn0gbWV0aG9kcy4KLSAgKiA8bGk+Ci0gICoge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzI0VSUk9SfQotICAqIGlmIHRoZSA8Y29kZT5GaWx0ZXI8L2NvZGU+IGRvZXMgbm90IGFjY2VwdCB0aGUgPGNvZGU+b2JqZWN0PC9jb2RlPi4KLSAgKiBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG1heSBiZSBhdmFpbGFibGUgZnJvbSB0aGUKLSAgKiB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXMjZ2V0TWVzc2FnZX0gYW5kCi0gICoge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzI2dldEV4Y2VwdGlvbn0gbWV0aG9kcy4KLSAgKiA8L3VsPgotICAqIEBwYXJhbSBvYmplY3QgVGhlIG9iamVjdCB0byBmaWx0ZXIuCi0gICogQHJldHVybiBBbiB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXN9Ci0gICogZGVzY3JpYmluZyB0aGUgPGNvZGU+RmlsdGVyPC9jb2RlPidzIGFzc2Vzc21lbnQgb2YKLSAgKiB0aGUgZ2l2ZW4gPGNvZGU+b2JqZWN0PC9jb2RlPi4KLSAgKi8KLSAgcHVibGljIElTdGF0dXMgc3RhdHVzT2YgKCBPYmplY3Qgb2JqZWN0ICk7Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0cnVlIGlmIGFuZCBvbmx5IGlmIHRoaXMgPGNvZGU+RmlsdGVyPC9jb2RlPgotICAqIGFjY2VwdHMgdGhlIGdpdmVuIDxjb2RlPm9iamVjdDwvY29kZT4uIFRoaXMgbWV0aG9kCi0gICogbXVzdCByZXR1cm4gdHJ1ZSBpZiBhbmQgb25seSBpZiB7QGxpbmsgI3N0YXR1c09mfQotICAqIHJldHVybnMgYW4gPGNvZGU+SVN0YXR1czwvY29kZT4gd2l0aCBhIHNldmVyaXR5IG9mCi0gICogbGVzcyB0aGFuIDxjb2RlPklTdGF0dXMuRVJST1I8L2NvZGU+LgotICAqIEBwYXJhbSBvYmplY3QgVGhlIG9iamVjdCB0byBmaWx0ZXIuCi0gICogQHJldHVybiBUcnVlIGlmIGFuZCBvbmx5IGlmIHRoaXMgPGNvZGU+RmlsdGVyPC9jb2RlPgotICAqIGFjY2VwdHMgdGhlIGdpdmVuIDxjb2RlPm9iamVjdDwvY29kZT4uCi0gICovCi0gIHB1YmxpYyBib29sZWFuIGFjY2VwdHMgKCBPYmplY3Qgb2JqZWN0ICk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9JUHJvamVjdFRvU3RyaW5nVHJhbnNmb3JtZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL0lQcm9qZWN0VG9TdHJpbmdUcmFuc2Zvcm1lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDA2MWU1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL0lQcm9qZWN0VG9TdHJpbmdUcmFuc2Zvcm1lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLlRyYW5zZm9ybWVyOwotCi0KLQotLyoqCi0gKiBUcmFuc2Zyb21zIGEgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9qZWN0IHRvIGphdmEubGFuZy5TdHJpbmcKLSAqLwotcHVibGljIGNsYXNzIElQcm9qZWN0VG9TdHJpbmdUcmFuc2Zvcm1lciBpbXBsZW1lbnRzIFRyYW5zZm9ybWVyIHsKLQkKLQkgIHB1YmxpYyBPYmplY3QgdHJhbnNmb3JtKE9iamVjdCB2YWx1ZSkKLQkgIHsKLQkgIAlJUHJvamVjdCBwcm9qZWN0ID0gKElQcm9qZWN0KXZhbHVlOwotCSAgICByZXR1cm4gcHJvamVjdC5nZXROYW1lKCk7Ci0JICB9CQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vSjJFRUFjdGlvbkFkYXB0ZXJGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9KMkVFQWN0aW9uQWRhcHRlckZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTI0NTNlNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9KMkVFQWN0aW9uQWRhcHRlckZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMjIgICAxMjU1NzQgemluYUBjYS5pYm0uY29tIC0gWmluYSBNb3N0YWZpYQotICogMjAwNjAyMjIgICAyMjU1NzQgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKgotICogQ3JlYXRlZCBvbiBNYXkgOCwgMjAwNAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb247Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NjbGllbnQuU2VydmljZVJlZjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuU2VydmljZUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMUmVzb3VyY2VJbXBsOwotCi0KLS8qKgotICogQGF1dGhvciBnaWxiZXJ0YQotICovCi1wdWJsaWMgY2xhc3MgSjJFRUFjdGlvbkFkYXB0ZXJGYWN0b3J5IHsKLQkKLSAJCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFdTRExVUkkoU2VydmljZUltcGwgc2VydmljZUltcGwpCi0gIHsKLSAgCURlZmluaXRpb24gZGVmaW5pdGlvbiA9IHNlcnZpY2VJbXBsLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLSAgCVN0cmluZyBsb2NhdGlvbiA9IGRlZmluaXRpb24uZ2V0TG9jYXRpb24oKTsKLSAgCQotICAJcmV0dXJuIGxvY2F0aW9uOwotICB9Ci0gICAKLSAgLy9oYXMgdG8gYmUgdW5kZXIgdGhlIHdlYmNvbnRlbnQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUpCX01PRFVMRSA9ICJlamJNb2R1bGUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBUFBDTElFTlRfTU9EVUxFID0gImFwcENsaWVudE1vZHVsZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFdFQl9NT0RVTEUgPSAiV2ViQ29udGVudCI7Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0V1NETFVSSShTZXJ2aWNlUmVmIHNlcnZpY2VJbXBsKQotICB7Ci0gIAkgU3RyaW5nIG1vZHVsZVJvb3QgPSBudWxsOwotCSBJUHJvamVjdCBwcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHNlcnZpY2VJbXBsKTsKLQkgaWYoSjJFRVV0aWxzLmlzV2ViQ29tcG9uZW50KHByb2plY3QpKQotCSB7Ci0JICAgbW9kdWxlUm9vdCA9IFdFQl9NT0RVTEU7Ci0JIH0KLSAgICAgZWxzZSBpZiAoSjJFRVV0aWxzLmlzRUpCQ29tcG9uZW50KHByb2plY3QpKQotCSB7Ci0JICAgbW9kdWxlUm9vdCA9IEVKQl9NT0RVTEU7Ci0JIH0KLQkgZWxzZSBpZiAoSjJFRVV0aWxzLmlzQXBwQ2xpZW50Q29tcG9uZW50KHByb2plY3QpKQotCSB7Ci0JICAgbW9kdWxlUm9vdCA9IEFQUENMSUVOVF9NT0RVTEU7Ci0JIH0KLQkgSVBhdGggcGF0aCA9IHByb2plY3QuZ2V0TG9jYXRpb24oKS5hZGRUcmFpbGluZ1NlcGFyYXRvcigpOwotCSBwYXRoID0gcGF0aC5hcHBlbmQobW9kdWxlUm9vdCkuYWRkVHJhaWxpbmdTZXBhcmF0b3IoKTsKLQkgcGF0aCA9IHBhdGguYXBwZW5kKHNlcnZpY2VJbXBsLmdldFdzZGxGaWxlKCkpOwotCSBGaWxlIGZpbGUgPSBuZXcgRmlsZShwYXRoLnRvU3RyaW5nKCkpOwotCSB0cnl7Ci0JICAgVVJMIHVybCA9IGZpbGUudG9VUkwoKTsKLQkgICByZXR1cm4gdXJsLnRvU3RyaW5nKCk7Ci0JIH1jYXRjaChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSl7cmV0dXJuIG51bGw7fQotCSAKLSAgCi0JICAKLQkKLSB9Ci0gIAotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRXU0RMVVJJKFdTRExSZXNvdXJjZUltcGwgd3NkbFJJKQotICB7Ci0gIAlEZWZpbml0aW9uIGRlZmluaXRpb24gPSB3c2RsUkkuZ2V0RGVmaW5pdGlvbigpOwotICAJU3RyaW5nIGxvY2F0aW9uID0gZGVmaW5pdGlvbi5nZXRMb2NhdGlvbigpOwotICAJCi0gIAlyZXR1cm4gbG9jYXRpb247Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFdTSUxQYXRoKFdTRExSZXNvdXJjZUltcGwgd3NkbFJJKQotICB7Ci0gIAlyZXR1cm4gY29udmVydFRvUmVsYXRpdmUoZ2V0V1NETFVSSSh3c2RsUkkpKTsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0V1NJTFBhdGgoU2VydmljZVJlZiBzZXJ2aWNlSW1wbCkKLSAgewotICAJcmV0dXJuIGNvbnZlcnRUb1JlbGF0aXZlKGdldFdTRExVUkkoc2VydmljZUltcGwpKTsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0V1NJTFBhdGgoU2VydmljZUltcGwgc2VydmljZUltcGwpCi0gIHsKLSAgCXJldHVybiBjb252ZXJ0VG9SZWxhdGl2ZShnZXRXU0RMVVJJKHNlcnZpY2VJbXBsKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIEZJTEU9ImZpbGU6LyI7Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIEZJTEVMPSJmaWxlOiI7IAotICBwdWJsaWMgc3RhdGljIFN0cmluZyBjb252ZXJ0VG9SZWxhdGl2ZShTdHJpbmcgdXJpKQotICB7Ci0gIAkvL3JlbW92ZSBmaWxlOgotICAJU3RyaW5nIHJvb3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldExvY2F0aW9uKCkudG9TdHJpbmcoKTsKLSAgICByb290ID0gRklMRSArIHJvb3Q7Ci0gIAlTdHJpbmcgcm9vdEwgPSBGSUxFTCArIHJvb3Q7Ci0gICAgaWYodXJpLnN0YXJ0c1dpdGgocm9vdCkgfHwgdXJpLnN0YXJ0c1dpdGgocm9vdEwpKXsKLSAgICAgIHJldHVybiB1cmkuc3Vic3RyaW5nKHJvb3QubGVuZ3RoKCkpOyAgCQotICAgIH0KLSAgICByZXR1cm4gdXJpOwotICB9Ci0KLQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9KMkVFVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL0oyRUVVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjBiZjQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL0oyRUVVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQyMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMDQgIDEyNDE0MyAgIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lciAgICAgCi0gKiAyMDA2MDMyOSAgIDEyODA2OSByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNTAzICAgMTI2ODE5IHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA1MjQgICAxMzExMzIgbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uCi0gKiAyMDA3MDcyMyAgIDE5NDQzNCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbiwgQ2hlY2sgZm9yIG5vbi1leGlzdGluZyBFQVIgd2l0aCBjb250ZW50IG5vdCBkZWxldGVkCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLWltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JQ29udGFpbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwubG9nZ2VyLnByb3h5LkxvZ2dlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5hcHBsaWNhdGlvbi5pbnRlcm5hbC5vcGVyYXRpb25zLkFkZENvbXBvbmVudFRvRW50ZXJwcmlzZUFwcGxpY2F0aW9uRGF0YU1vZGVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuZWpiLkVKQkphcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5lamIuRUpCUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuZWpiLkVudGVycHJpc2VCZWFuOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmVqYi5TZXNzaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmVqYi5TZXNzaW9uVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5lamIuY29tcG9uZW50Y29yZS51dGlsLkVKQkFydGlmYWN0RWRpdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5pbnRlcm5hbC5KMkVFVmVyc2lvbkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5pbnRlcm5hbC5jb21tb24uSjJFRVZlcnNpb25VdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmludGVybmFsLnBsdWdpbi5JSjJFRU1vZHVsZUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5pbnRlcm5hbC5wcm9qZWN0LkoyRUVQcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUuQ29tcG9uZW50Q29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUuTW9kdWxlQ29yZU5hdHVyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUuZGF0YW1vZGVsLnByb3BlcnRpZXMuSUNyZWF0ZVJlZmVyZW5jZUNvbXBvbmVudHNEYXRhTW9kZWxQcm9wZXJ0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5pbnRlcm5hbC51dGlsLklNb2R1bGVDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLnJlc291cmNlcy5JVmlydHVhbENvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUucmVzb3VyY2VzLklWaXJ0dWFsRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5yZXNvdXJjZXMuSVZpcnR1YWxSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5FbnZpcm9ubWVudFNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JTG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuRGF0YU1vZGVsRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLklEYXRhTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmludGVybmFsLm9wZXJhdGlvbnMuUHJvamVjdENyZWF0aW9uRGF0YU1vZGVsUHJvdmlkZXJOZXc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuSUZhY2V0ZWRQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLklQcm9qZWN0RmFjZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuSVByb2plY3RGYWNldFZlcnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuUHJvamVjdEZhY2V0c01hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklNb2R1bGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlclV0aWw7Ci0vKioKLSAqIFRoaXMgY2xhc3MgY29udGFpbnMgc29tZSB1c2VmdWwgSjJFRSB1dGlsaXRpZXMgZm9yIFdlYiBzZXJ2aWNlcyBpbnRlcm5hbCB1c2UuCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBKMkVFVXRpbHMgewotCQotCXB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFdFQiA9IDE7Ci0JcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgRUpCID0gMjsKLQlwdWJsaWMgZmluYWwgc3RhdGljIGludCBBUFBDTElFTlQgPSA0OwotCXB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IEVBUiA9IDg7CQotCQotCS8qKgotCSAqIFJldHVybnMgYW4gSVZpcnR1YWxDb21wb25lbnQKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElWaXJ0dWFsQ29tcG9uZW50IGdldFZpcnR1YWxDb21wb25lbnQoSVByb2plY3QgcHJvamVjdCl7Ci0JCXJldHVybiBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLQl9Ci0JCi0JLyoqCi0JICogCi0JICogQHBhcmFtIHByb2plY3ROYW1lCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVZpcnR1YWxDb21wb25lbnQgZ2V0VmlydHVhbENvbXBvbmVudChTdHJpbmcgcHJvamVjdE5hbWUpewotCQlJUHJvamVjdCBwcm9qZWN0ID0gbnVsbDsKLQkJaWYgKHByb2plY3ROYW1lIT1udWxsICYmIHByb2plY3ROYW1lLmxlbmd0aCgpID4gMCApCi0gICAgICBwcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLQkJCi0JCXJldHVybiBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLQl9Ci0JCi0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBKMkVFIHZlcnNpb24KLQkgKiBAcGFyYW0gcCBwcm9qZWN0Ci0JICogQHJldHVybiBpbnQKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGludCBnZXRKMkVFVmVyc2lvbihJUHJvamVjdCBwKXsKLQkJCi0JCVN0cmluZyB2ZXIgPSBKMkVFUHJvamVjdFV0aWxpdGllcy5nZXRKMkVFUHJvamVjdFZlcnNpb24ocCk7Ci0JCXJldHVybiBKMkVFVmVyc2lvblV0aWwuY29udmVydFZlcnNpb25TdHJpbmdUb0ludCh2ZXIpOwotCi0JCS8qCi0JCWludCBqMmVlVmVyID0gLTE7Ci0JCXRyeSB7Ci0gICAgICAgICAgSVZpcnR1YWxDb21wb25lbnQgdmMgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwKTsKLSAgICAgICAgICBpZiAodmMhPW51bGwpewotICAgICAgICAgICAgajJlZVZlciA9IGdldEoyRUVWZXJzaW9uKHZjKTsKLSAgICAgICAgICB9Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKXsKLQkJCS8vaGFuZGxlIGV4Y2VwdGlvbgotCQl9Ci0JCXJldHVybiBqMmVlVmVyOwotCQkqLwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIGludCBnZXRKMkVFVmVyc2lvbihJVmlydHVhbENvbXBvbmVudCBjaCl7Ci0gICAgICBpbnQgajJlZVZlciA9IC0xOwotICAgICAgLy9jaGVjayB0eXBlCi0gICAgICBpZiAoY2ghPW51bGwpewotICAgIAkgIElQcm9qZWN0IHByb2plY3QgPSBjaC5nZXRQcm9qZWN0KCk7Ci0gICAgCSAgajJlZVZlciA9IGdldEoyRUVWZXJzaW9uKHByb2plY3QpOwotICAgICAgfQotICAgICAgCi0gICAgICAvKiAgVXNlIG5ldyBBUEkgcHJvdmlkZWQgYnkgSjJFRSAKLSAgICAgIGlmIChjaCE9bnVsbCkgewotICAgICAgICBpZiAoaXNXZWJDb21wb25lbnQoY2gpKQotICAgICAgICAgIGoyZWVWZXIgPSBnZXRXZWJDb21wb25lbnRKMkVFVmVyc2lvbihjaCk7Ci0gICAgICAgIGVsc2UgaWYgKGlzQXBwQ2xpZW50Q29tcG9uZW50KGNoKSkKLSAgICAgICAgICBqMmVlVmVyID0gZ2V0QXBwQ2xpZW50Q29tcG9uZW50SjJFRVZlcnNpb24oY2gpOwotICAgICAgICBlbHNlIGlmIChpc0VKQkNvbXBvbmVudChjaCkpCi0gICAgICAgICAgajJlZVZlciA9IGdldEVKQkNvbXBvbmVudEoyRUVWZXJzaW9uKGNoKTsKLSAgICAgICAgZWxzZSBpZiAoaXNFQVJDb21wb25lbnQoY2gpKQotICAgICAgICAgIGoyZWVWZXIgPSBnZXRFQVJDb21wb25lbnRKMkVFVmVyc2lvbihjaCk7Ci0gICAgICB9Ci0gICAgICAqLwotICAgICAgCi0gICAgICByZXR1cm4gajJlZVZlcjsgCi0JfQotCQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgSjJFRVZlcnNpb24KLQkgKiBAcGFyYW0gcCBJUHJvamVjdAotCSAqIEByZXR1cm4gU3RyaW5nCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0SjJFRVZlcnNpb25Bc1N0cmluZyhJUHJvamVjdCBwKXsKLQkJCi0JCVN0cmluZyB2ZXIgPSBKMkVFUHJvamVjdFV0aWxpdGllcy5nZXRKMkVFUHJvamVjdFZlcnNpb24ocCk7Ci0JCXJldHVybiAgdmVyICE9IG51bGwgPyB2ZXIgOiBudWxsOwotCQkgCi0JCS8qCi0JCWludCBqMmVlVmVyID0gZ2V0SjJFRVZlcnNpb24ocCk7Ci0JCWlmIChqMmVlVmVyIT0tMSl7Ci0JCQlyZXR1cm4gSjJFRVZlcnNpb25VdGlsLmdldEoyRUVUZXh0VmVyc2lvbihqMmVlVmVyKTsKLQkJfQotCQllbHNlIAotCQkJcmV0dXJuIG51bGw7Ci0JCQotCQkqLwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIElWaXJ0dWFsQ29tcG9uZW50W10gZ2V0QWxsQ29tcG9uZW50cygpewotCQlMaXN0IHYgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCUlQcm9qZWN0W10gcHJvamVjdHMgPSBSZXNvdXJjZVV0aWxzLmdldFdvcmtzcGFjZVJvb3QoKS5nZXRQcm9qZWN0cygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHByb2plY3RzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgSVZpcnR1YWxDb21wb25lbnQgdmMgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0c1tpXSk7Ci0gICAgICAgICAgaWYodmMgIT0gbnVsbCkKLSAgICAgICAgCSAgdi5hZGQodmMpOwotICAgICAgICAgIH0KLQotCQlyZXR1cm4gKElWaXJ0dWFsQ29tcG9uZW50W10pdi50b0FycmF5KG5ldyBJVmlydHVhbENvbXBvbmVudFswXSk7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgYWxsIHRoZSBFQVIgY29tcG9uZW50cyBpbiB0aGUgd29ya3NwYWNlCi0JICogQHJldHVybiBJVmlydHVhbENvbXBvbmVudFtdOyBlbXB0eSBpZiBub25lCi0JICovCi0JcHVibGljIHN0YXRpYyBJVmlydHVhbENvbXBvbmVudFtdIGdldEFsbEVBUkNvbXBvbmVudHMoKSB7Ci0JCUxpc3QgdiA9IG5ldyBBcnJheUxpc3QoKTsKLQkJSVByb2plY3RbXSBwcm9qZWN0cyA9IFJlc291cmNlVXRpbHMuZ2V0V29ya3NwYWNlUm9vdCgpLmdldFByb2plY3RzKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgcHJvamVjdHMubGVuZ3RoOyBpKyspIHsKLQkJCXRyeSB7Ci0JCQkJSVZpcnR1YWxDb21wb25lbnRbXSBjb21wb25lbnRzID0gZ2V0RUFSQ29tcG9uZW50c0Zyb21Qcm9qZWN0KHByb2plY3RzW2ldKTsKLQkJCQlmb3IgKGludCBqPTA7IGo8Y29tcG9uZW50cy5sZW5ndGg7IGorKykgewotCQkJCQlpZiAoY29tcG9uZW50c1tqXSE9bnVsbCkKLQkJCQkJCXYuYWRkKGNvbXBvbmVudHNbal0pOwotCQkJCX0KLQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCQkvL2hhbmRsZSBleGNlcHRpb24KLQkJCX0KLQotCQl9Ci0JCXJldHVybiAoSVZpcnR1YWxDb21wb25lbnRbXSl2LnRvQXJyYXkobmV3IElWaXJ0dWFsQ29tcG9uZW50WzBdKTsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBJVmlydHVhbENvbXBvbmVudFtdIGdldEFsbFdlYkNvbXBvbmVudHMoKXsKLQkJTGlzdCB2ID0gbmV3IEFycmF5TGlzdCgpOwotCQlJUHJvamVjdFtdIHByb2plY3RzID0gUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2VSb290KCkuZ2V0UHJvamVjdHMoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9qZWN0cy5sZW5ndGg7IGkrKykgewotCQkJdHJ5IHsKLQkJCQlJVmlydHVhbENvbXBvbmVudFtdIGNvbXBvbmVudHMgPSBnZXRXZWJDb21wb25lbnRzKHByb2plY3RzW2ldKTsKLQkJCQlmb3IgKGludCBqPTA7IGo8Y29tcG9uZW50cy5sZW5ndGg7IGorKykgewotCQkJCQlpZiAoY29tcG9uZW50c1tqXSE9bnVsbCkKLQkJCQkJCXYuYWRkKGNvbXBvbmVudHNbal0pOwotCQkJCX0KLQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCQkvL2hhbmRsZSBleGNlcHRpb24KLQkJCX0KLQotCQl9Ci0JCXJldHVybiAoSVZpcnR1YWxDb21wb25lbnRbXSl2LnRvQXJyYXkobmV3IElWaXJ0dWFsQ29tcG9uZW50WzBdKTsJCQotCX0KLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIElWaXJ0dWFsQ29tcG9uZW50W10gZ2V0QWxsRUpCQ29tcG9uZW50cygpewotICAgICAgICBMaXN0IHYgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgIElQcm9qZWN0W10gcHJvamVjdHMgPSBSZXNvdXJjZVV0aWxzLmdldFdvcmtzcGFjZVJvb3QoKS5nZXRQcm9qZWN0cygpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHByb2plY3RzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIElWaXJ0dWFsQ29tcG9uZW50W10gY29tcG9uZW50cyA9IGdldEVKQkNvbXBvbmVudHMocHJvamVjdHNbaV0pOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGo9MDsgajxjb21wb25lbnRzLmxlbmd0aDsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjb21wb25lbnRzW2pdIT1udWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgdi5hZGQoY29tcG9uZW50c1tqXSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAgICAgICAgIC8vaGFuZGxlIGV4Y2VwdGlvbgotICAgICAgICAgICAgfQotCi0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIChJVmlydHVhbENvbXBvbmVudFtdKXYudG9BcnJheShuZXcgSVZpcnR1YWxDb21wb25lbnRbMF0pOyAgICAgICAgCi0gICAgfSAgICAKLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBFQVIgY29tcG9uZW50cyBpbiBhIGdpdmVuIElQcm9qZWN0Ci0JICogQHBhcmFtIHByb2plY3QKLQkgKiBAcmV0dXJuIGVtcHR5IGlmIG5vIEVBUiBjb21wb25lbnRzOyBtdXN0IG5vdCByZXR1cm4gbnVsbAotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVZpcnR1YWxDb21wb25lbnRbXSBnZXRFQVJDb21wb25lbnRzRnJvbVByb2plY3QoSVByb2plY3QgcHJvamVjdCl7Ci0JCS8vZ2V0IGFsbCBjb21wb25lbnRzIGluIHRoZSBwcm9qZWN0Ci0JCUxpc3QgdiA9IG5ldyBBcnJheUxpc3QoKTsJCQotCQl0cnkgewotCQkJSVZpcnR1YWxDb21wb25lbnQgY29tcG9uZW50ID0gQ29tcG9uZW50Q29yZS5jcmVhdGVDb21wb25lbnQocHJvamVjdCk7Ci0JCQlpZiAoY29tcG9uZW50ICE9IG51bGwgJiYgaXNFQVJDb21wb25lbnQoY29tcG9uZW50KSl7Ci0JCQkJdi5hZGQoY29tcG9uZW50KTsKLQkJCX0KLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpewotCQkJLy9oYW5kbGUgZXhjZXB0aW9uCi0JCX0KLQkJCi0JCXJldHVybiAoSVZpcnR1YWxDb21wb25lbnRbXSl2LnRvQXJyYXkobmV3IElWaXJ0dWFsQ29tcG9uZW50WzBdKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyBXZWIgY29tcG9uZW50cyBpbiBhIHByb2plY3QKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqIEByZXR1cm4gZW1wdHkgYXJyYXkgaWYgbm8gd2ViIGNvbXBvbmVudHM7IG11c3Qgbm90IHJldHVybiBudWxsCi0JICovCi0JcHVibGljIHN0YXRpYyBJVmlydHVhbENvbXBvbmVudFtdIGdldFdlYkNvbXBvbmVudHMoSVByb2plY3QgcHJvamVjdCl7Ci0JCQotCQkvL2dldCBhbGwgY29tcG9uZW50cyBpbiB0aGUgcHJvamVjdAotCQlMaXN0IHYgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCXRyeSB7Ci0JCQlJVmlydHVhbENvbXBvbmVudCBjb21wb25lbnQgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLQkJCQotCQkJCWlmIChjb21wb25lbnQgIT0gbnVsbCAmJiBpc1dlYkNvbXBvbmVudChjb21wb25lbnQpKXsKLQkJCQkJdi5hZGQoY29tcG9uZW50KTsKLQkJCQl9CQkKLQotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSl7Ci0JCQkvL2hhbmRsZSBleGNlcHRpb24KLQkJfQotCQkKLQkJcmV0dXJuIChJVmlydHVhbENvbXBvbmVudFtdKXYudG9BcnJheShuZXcgSVZpcnR1YWxDb21wb25lbnRbMF0pOwotCX0gCi0JCi0JcHVibGljIHN0YXRpYyBTdHJpbmdbXSBnZXRXZWJDb21wb25lbnROYW1lcyhJUHJvamVjdCBwcm9qZWN0KXsKLQkJSVZpcnR1YWxDb21wb25lbnRbXSB2Y3MgPSBnZXRXZWJDb21wb25lbnRzKHByb2plY3QpOwotCQlyZXR1cm4gdG9Db21wb25lbnROYW1lc0FycmF5KHZjcyk7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nW10gZ2V0RUFSQ29tcG9uZW50TmFtZXMoSVByb2plY3QgcHJvamVjdCl7Ci0JCUlWaXJ0dWFsQ29tcG9uZW50W10gdmNzID0gZ2V0RUFSQ29tcG9uZW50c0Zyb21Qcm9qZWN0KHByb2plY3QpOwotCQlyZXR1cm4gdG9Db21wb25lbnROYW1lc0FycmF5KHZjcyk7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgYWxsIGNvbXBvbmVudHMgb2YgdHlwZSwgY29tcG9uZW50VHlwZSBpbiB0aGUgcHJvamVjdC4KLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqIEBwYXJhbSBjb21wb25lbnRUeXBlIGkuZS4gSjJFRVV0aWxzLldFQgotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElWaXJ0dWFsQ29tcG9uZW50W10gZ2V0Q29tcG9uZW50c0J5VHlwZShJUHJvamVjdCBwcm9qZWN0LCBpbnQgY29tcG9uZW50VHlwZSl7Ci0JCQotCQlMaXN0IHYgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWlmICggKFdFQiAmIGNvbXBvbmVudFR5cGUpPT1XRUIgKXsKLQkJCUlWaXJ0dWFsQ29tcG9uZW50W10gd2ViVkMgPSBnZXRXZWJDb21wb25lbnRzKHByb2plY3QpOwotCQkJYWRkVG9BcnJheUxpc3RIZWxwZXIod2ViVkMsIHYpOwotCQl9Ci0JCWlmICggKEVKQiAmIGNvbXBvbmVudFR5cGUpPT1FSkIgKXsKLQkJCUlWaXJ0dWFsQ29tcG9uZW50W10gZWpiVkMgPSBnZXRFSkJDb21wb25lbnRzKHByb2plY3QpOwotCQkJYWRkVG9BcnJheUxpc3RIZWxwZXIoZWpiVkMsIHYpOwotCQl9Ci0JCWlmICggKEFQUENMSUVOVCAmIGNvbXBvbmVudFR5cGUpPT1BUFBDTElFTlQgKSB7Ci0JCQlJVmlydHVhbENvbXBvbmVudFtdIGFwcENsaWVudFZDID0gZ2V0QXBwQ2xpZW50Q29tcG9uZW50cyhwcm9qZWN0KTsKLQkJCWFkZFRvQXJyYXlMaXN0SGVscGVyKGFwcENsaWVudFZDLCB2KTsKLQkJfQotCQlpZiAoIChFQVIgJiBjb21wb25lbnRUeXBlKT09RUFSICkgewotCQkJSVZpcnR1YWxDb21wb25lbnRbXSBlYXJWQyA9IGdldEVBUkNvbXBvbmVudHNGcm9tUHJvamVjdChwcm9qZWN0KTsKLQkJCWFkZFRvQXJyYXlMaXN0SGVscGVyKGVhclZDLCB2KTsKLQkJfQotCQkKLQkJcmV0dXJuIChJVmlydHVhbENvbXBvbmVudFtdKXYudG9BcnJheShuZXcgSVZpcnR1YWxDb21wb25lbnRbMF0pOwkJCi0JfQotCQotCS8qKgotCSAqIFJldHVybnMgYWxsIGNvbXBvbmVudHMgb2YgdHlwZSwgY29tcG9uZW50VHlwZSBpbiB0aGUgcHJvamVjdC4KLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqIEBwYXJhbSBjb21wb25lbnRUeXBlSWQgYXMgZGVmaW5lZCBpbiBJTW9kdWxlQ29uc3RhbnRzLgotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElWaXJ0dWFsQ29tcG9uZW50W10gZ2V0Q29tcG9uZW50c0J5VHlwZShJUHJvamVjdCBwcm9qZWN0LCBTdHJpbmcgY29tcG9uZW50VHlwZUlkKXsKLQkJCi0JCS8vZ2V0IGFsbCBjb21wb25lbnRzIGluIHRoZSBwcm9qZWN0IG9mIHR5cGUgY29tcG9uZW50VHlwZUlkCi0JCUxpc3QgdiA9IG5ldyBBcnJheUxpc3QoKTsKLQkJdHJ5IHsKLQotCQkJSVZpcnR1YWxDb21wb25lbnQgdmMgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsJCi0JCQlpZiAoIHZjICE9IG51bGwgJiYgSjJFRVByb2plY3RVdGlsaXRpZXMuaXNQcm9qZWN0T2ZUeXBlKHByb2plY3QsY29tcG9uZW50VHlwZUlkKSkKLQkJCXsKLQkJCQl2LmFkZCh2Yyk7Ci0JCQl9Ci0JCQkvL2lmIChpc1dlYkNvbXBvbmVudChwcm9qZWN0LCBjb21wb25lbnRzW2ldLmdldE5hbWUoKSkpewotCQkJCS8vdi5hZGQoY29tcG9uZW50c1tpXSk7Ci0JCQkvL30JCQotCi0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKXsKLQkJCS8vaGFuZGxlIGV4Y2VwdGlvbgotCQl9Ci0JCQotCQlyZXR1cm4gKElWaXJ0dWFsQ29tcG9uZW50W10pdi50b0FycmF5KG5ldyBJVmlydHVhbENvbXBvbmVudFswXSk7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nW10gZ2V0UHJvamVjdHNDb250YWluaW5nQ29tcG9uZW50T2ZUeXBlKFN0cmluZyBjb21wb25lbnRUeXBlSWQpCi0JewotCSAgICBWZWN0b3IgdiA9IG5ldyBWZWN0b3IoKTsgCi0JICAgIElWaXJ0dWFsQ29tcG9uZW50W10gY29tcHMgPSBnZXRBbGxDb21wb25lbnRzKCk7Ci0JICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29tcHMubGVuZ3RoOyBpKyspIHsKLQkJCWlmIChKMkVFUHJvamVjdFV0aWxpdGllcy5pc1Byb2plY3RPZlR5cGUoY29tcHNbaV0uZ2V0UHJvamVjdCgpLGNvbXBvbmVudFR5cGVJZCkpCi0JCQl7Ci0JCQkJLy9BZGQgdGhlIHByb2plY3QgbmFtZSB0byB0aGUgdmVjdG9yIGlmIGl0IGhhcyBub3QgYmVlbiBhZGRlZCBhbHJlYWR5Ci0JCQkJU3RyaW5nIG5hbWUgPSBjb21wc1tpXS5nZXRQcm9qZWN0KCkuZ2V0TmFtZSgpOwotCQkJCWlmICghdi5jb250YWlucyhuYW1lKSkKLQkJCQl7Ci0JCQkJCXYuYWRkKG5hbWUpOwkKLQkJCQl9CQkgICAgICAgIAkJCQotCQkJfQotCi0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gKFN0cmluZ1tdKXYudG9BcnJheShuZXcgU3RyaW5nWzBdKTsKLQl9Ci0gICAKLQkvKioKLQkgKiBIZWxwZXIgbWV0aG9kIGZvciBnZXRDb21wb25lbnRzQnlUeXBlCi0JICogQHBhcmFtIHZjcwotCSAqIEBwYXJhbSB2ZWN0Ci0JICovCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBhZGRUb0FycmF5TGlzdEhlbHBlcihJVmlydHVhbENvbXBvbmVudFtdIHZjcywgTGlzdCBhbCl7Ci0JCWZvciAoaW50IGk9MDtpPHZjcy5sZW5ndGg7aSsrKXsKLQkJCWFsLmFkZCh2Y3NbaV0pOwotCQl9CQkKLQl9Ci0KLQkKLQkvKioKLQkgKiBFc3NlbnRpYWxseSwgcmV0dXJucyBhbGwgcHJvamVjdHMgaW4gdGhlIHdvcmtzcGFjZQotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElQcm9qZWN0W10gZ2V0QWxsRmxleGlibGVQcm9qZWN0cygpewotCi0JCUxpc3QgdiA9IG5ldyBBcnJheUxpc3QoKTsKLQkJdHJ5IHsKLQkJCUlQcm9qZWN0W10gcHJvamVjdHMgPSBQcm9qZWN0VXRpbGl0aWVzLmdldEFsbFByb2plY3RzKCk7Ci0JCQlmb3IoaW50IGk9MDsgaTxwcm9qZWN0cy5sZW5ndGg7aSsrKSB7Ci0JCQkJaWYgKE1vZHVsZUNvcmVOYXR1cmUuZ2V0TW9kdWxlQ29yZU5hdHVyZShwcm9qZWN0c1tpXSkhPW51bGwpewotCQkJCQl2LmFkZChwcm9qZWN0c1tpXSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWNhdGNoKEV4Y2VwdGlvbiBlKXsKLQkJfQotCi0JCXJldHVybiAoSVByb2plY3RbXSl2LnRvQXJyYXkobmV3IElQcm9qZWN0WzBdKTsKLQl9Ci0JCi0JCi0JLyoqCi0JICogVHJ1ZSBpZiB0aGVyZSBleGlzdHMgYSB1bmRlcmx5aW5nIHJlc291cmNlIGJhY2tpbmcgdXAgdGhlIGNvbXBvbmVudCBhbmQgcHJvamVjdCAKLQkgKiBAcGFyYW0gcHJvamVjdE5hbWUKLQkgKiBAcGFyYW0gY29tcG9uZW50TmFtZQotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gZXhpc3RzKFN0cmluZyBwcm9qZWN0TmFtZSwgU3RyaW5nIGNvbXBvbmVudE5hbWUpewotCQlJUHJvamVjdCBwcm9qZWN0ID0gbnVsbDsKLQkJaWYgKHByb2plY3ROYW1lIT1udWxsICYmIHByb2plY3ROYW1lLmxlbmd0aCgpID4gMCApIHsKLQkJICBwcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotCQkKLQkJcmV0dXJuIGV4aXN0cyhwcm9qZWN0KTsKLQl9Ci0JCi0JLyoqCi0JICogVHJ1ZSBpZiB0aGVyZSBleGlzdHMgYSB1bmRlcmx5aW5nIHJlc291cmNlIGJhY2tpbmcgdXAgdGhlIGNvbXBvbmVudCBhbmQgcHJvamVjdAotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBleGlzdHMoSVByb2plY3QgcHJvamVjdCl7Ci0JCWlmIChwcm9qZWN0IT1udWxsKSB7Ci0gICAgICAgICAgICBpZiAoIXByb2plY3QuZXhpc3RzKCkpCi0gICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIAotCQkJSVZpcnR1YWxDb21wb25lbnQgdmMgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLQkJCXJldHVybiB2Yy5leGlzdHMoKTsKLQkJfQotCQllbHNlIAotCQkJcmV0dXJuIGZhbHNlOwotCQkKLQl9CQotCi0JLyoqCi0JICogUmV0dXJucyBhbiBhcnJheSBvZiBFQVIgY29tcG9uZW50cyB3aGljaCBhcmUgcmVmZXJlbmNlZCBieSB0aGUgY29tcG9uZW50Ci0JICogQHBhcmFtIHByb2plY3QKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBJVmlydHVhbENvbXBvbmVudFtdIGdldFJlZmVyZW5jaW5nRUFSQ29tcG9uZW50cyhJUHJvamVjdCBwcm9qZWN0KXsKLQkJTGlzdCBlYXJzID0gbmV3IEFycmF5TGlzdCgpOwotCQl0cnl7Ci0JCQlJVmlydHVhbENvbXBvbmVudCB0YXJnZXRWQyA9IENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KHByb2plY3QpOwotCQkJCi0JCQlJVmlydHVhbENvbXBvbmVudFtdIGVhclZDID0gZ2V0QWxsRUFSQ29tcG9uZW50cygpOwotCQkJZm9yIChpbnQgaT0wOyBpPGVhclZDLmxlbmd0aDtpKyspIHsKLQkJCQlJVmlydHVhbFJlZmVyZW5jZVtdIHJlZnMgPSBlYXJWQ1tpXS5nZXRSZWZlcmVuY2VzKCk7Ci0JCQkJZm9yIChpbnQgaz0wO2s8cmVmcy5sZW5ndGg7aysrKSB7Ci0JCQkJCWlmICh0YXJnZXRWQy5lcXVhbHMocmVmc1trXS5nZXRSZWZlcmVuY2VkQ29tcG9uZW50KCkpKXsKLQkJCQkJCWVhcnMuYWRkKHJlZnNba10uZ2V0RW5jbG9zaW5nQ29tcG9uZW50KCkpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCi0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKXsKLQkJfQotCi0JCXJldHVybiAoSVZpcnR1YWxDb21wb25lbnRbXSllYXJzLnRvQXJyYXkobmV3IElWaXJ0dWFsQ29tcG9uZW50WzBdKTsKLQl9Ci0JCi0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgRUpCIENvbXBvbmVudHMgcmVmZXJlbmNlZCBieSB0aGUgZWFyCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBJVmlydHVhbENvbXBvbmVudFtdIGdldFJlZmVyZW5jaW5nRUpCQ29tcG9uZW50c0Zyb21FQVIoSVByb2plY3QgcHJvamVjdCl7Ci0KLQkJTGlzdCBlamJDb21wcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJdHJ5ewotCQkJSVZpcnR1YWxDb21wb25lbnQgdmMgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLQkJCUlWaXJ0dWFsUmVmZXJlbmNlW10gcmVmcyA9IHZjLmdldFJlZmVyZW5jZXMoKTsKLQkJCWZvciAoaW50IGk9MDtpPHJlZnMubGVuZ3RoO2krKyl7Ci0JCQkJaWYgKGlzRUpCQ29tcG9uZW50KHJlZnNbaV0uZ2V0UmVmZXJlbmNlZENvbXBvbmVudCgpKSl7Ci0JCQkJCWVqYkNvbXBzLmFkZChyZWZzW2ldLmdldFJlZmVyZW5jZWRDb21wb25lbnQoKSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWNhdGNoKEV4Y2VwdGlvbiBlKXsKLQkJfQotCQkKLQkJcmV0dXJuIChJVmlydHVhbENvbXBvbmVudFtdKWVqYkNvbXBzLnRvQXJyYXkobmV3IElWaXJ0dWFsQ29tcG9uZW50WzBdKTsJCQotCX0KLQotCQotCS8qKgotCSAqIAotCSAqIEBwYXJhbSBqYXIKLQkgKiBAcmV0dXJuICBWZWN0b3Igb2YgYmVhbiBTdHJpbmcgbmFtZXMuCi0JICovCi0JcHVibGljIHN0YXRpYyBWZWN0b3IgZ2V0QmVhbk5hbWVzKEVKQkphciBqYXIpIHsKLQkJLy8gV2UgY3VycmVudGx5IG9ubHkgc3VwcG9ydCBTdGF0ZWxlc3Mgc2Vzc2lvbiBiZWFucy4KLQkJLy8gTGlzdCBjbXBCZWFucyA9IGphci5nZXRCZWFuTWFuYWdlZEJlYW5zKCk7Ci0JCS8vIExpc3QgYm1wQmVhbnMgPSBqYXIuZ2V0Q29udGFpbmVyTWFuYWdlZEJlYW5zKCk7Ci0JCUxpc3Qgc2Vzc2lvbkJlYW5zID0gamFyLmdldFNlc3Npb25CZWFucygpOwotCi0JCVZlY3RvciBuYW1lcyA9IG5ldyBWZWN0b3IoKTsKLQotCQkvLyBnZXRCZWFuTmFtZXMoIG5hbWVzLCBjbXBCZWFucyApOwotCQkvLyBnZXRCZWFuTmFtZXMoIG5hbWVzLCBibXBCZWFucyApOwotCQlnZXRCZWFuTmFtZXMobmFtZXMsIHNlc3Npb25CZWFucyk7Ci0KLQkJcmV0dXJuIG5hbWVzOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBuYW1lcwotCSAqICAgICAgICAgICAgc3BlY2lmaWVzIHRoYXQgdmVjdG9yIG9mIHN0cmluZ3MgdGhhdCB3aWxsIGJlIHVzZWQgdG8gYWRkIGJlYW4KLQkgKiAgICAgICAgICAgIG5hbWVzIHRvLgotCSAqIEBwYXJhbSBiZWFucwotCSAqICAgICAgICAgICAgc3BlY2lmaWVzIGEgbGlzdCBvZiBiZWFucy4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyB2b2lkIGdldEJlYW5OYW1lcyhWZWN0b3IgbmFtZXMsIExpc3QgYmVhbnMpIHsKLQkJSXRlcmF0b3IgaXRlcmF0b3IgPSBiZWFucy5pdGVyYXRvcigpOwotCi0JCXdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpIHsKLQkJCUVudGVycHJpc2VCZWFuIGJlYW4gPSAoRW50ZXJwcmlzZUJlYW4pIChpdGVyYXRvci5uZXh0KCkpOwotCi0JCQlpZiAoYmVhbi5pc1Nlc3Npb24oKSkgewotCQkJCVNlc3Npb24gc2Vzc2lvbkJlYW4gPSAoU2Vzc2lvbikgYmVhbjsKLQotCQkJCWlmIChzZXNzaW9uQmVhbi5nZXRTZXNzaW9uVHlwZSgpLmdldFZhbHVlKCkgPT0gU2Vzc2lvblR5cGUuU1RBVEVMRVNTKSB7Ci0JCQkJCW5hbWVzLmFkZChiZWFuLmdldE5hbWUoKSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JLyoqCi0JICogVXNlcyBqZW0gUHJvamVjdFV0aWxpdGllcyB0byBnZXQgdGhlIHByb2plY3QKLQkgKiBAcGFyYW0gZWpiIGVPYmplY3QKLQkgKiBAcmV0dXJuIElQcm9qZWN0Ci0JICovCi0JcHVibGljIHN0YXRpYyBJUHJvamVjdCBnZXRQcm9qZWN0RnJvbUVKQihFbnRlcnByaXNlQmVhbiBlamIpIHsKLQkJcmV0dXJuIFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChlamIpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgYSBkZWZhdWx0IEoyRUUgMS4zIEVBUiBjb21wb25lbnQgaW4gdGhlIHdvcmtzcGFjZQotCSAqIEByZXR1cm4gRUFSIGNvbXBvbmVudCBuYW1lCi0JICovCi0JcHVibGljIHN0YXRpYyBJVmlydHVhbENvbXBvbmVudCBnZXREZWZhdWx0MTNFQVJDb21wb25lbnQoKXsKLQkJSVZpcnR1YWxDb21wb25lbnRbXSBhbGxFQVJDb21wb25lbnRzID0gZ2V0QWxsRUFSQ29tcG9uZW50cygpOwotCQlmb3IgKGludCBqPTA7ajxhbGxFQVJDb21wb25lbnRzLmxlbmd0aDtqKyspewotCQkJaW50IGoyZWVWZXJzaW9uID0gZ2V0SjJFRVZlcnNpb24oYWxsRUFSQ29tcG9uZW50c1tqXSk7Ci0JCQlpZiAoajJlZVZlcnNpb24gPT0gSjJFRVZlcnNpb25Db25zdGFudHMuSjJFRV8xXzNfSUQpCi0JCQkJIHJldHVybiBhbGxFQVJDb21wb25lbnRzW2pdOwotCQkgfQkKLQkJcmV0dXJuIG51bGw7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgYSBkZWZhdWx0IEoyRUUgMS40IEVBUiBjb21wb25lbnQgaW4gdGhlIHdvcmtzcGFjZQotCSAqIEByZXR1cm4gRUFSIGNvbXBvbmVudCBuYW1lCi0JICovCi0JcHVibGljIHN0YXRpYyBJVmlydHVhbENvbXBvbmVudCBnZXREZWZhdWx0MTRFQVJDb21wb25lbnQoKXsKLQkJSVZpcnR1YWxDb21wb25lbnRbXSBhbGxFQVJDb21wb25lbnRzID0gZ2V0QWxsRUFSQ29tcG9uZW50cygpOwotCQlmb3IgKGludCBqPTA7ajxhbGxFQVJDb21wb25lbnRzLmxlbmd0aDtqKyspewotCQkJaW50IGoyZWVWZXJzaW9uID0gZ2V0SjJFRVZlcnNpb24oYWxsRUFSQ29tcG9uZW50c1tqXSk7Ci0JCQlpZiAoajJlZVZlcnNpb24gPT0gSjJFRVZlcnNpb25Db25zdGFudHMuSjJFRV8xXzRfSUQpCi0JCQkJIHJldHVybiBhbGxFQVJDb21wb25lbnRzW2pdOwotCQkgfQkKLQkJcmV0dXJuIG51bGw7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIGZpcnN0IEVBUiBjb21wb25lbnQgb2YgdGhlIEoyRUUgdmVyc2lvbgotCSAqIEBwYXJhbSB2ZXJzaW9uSWQKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBJVmlydHVhbENvbXBvbmVudCBnZXRFQVJDb21wb25lbnRvZkoyRUVWZXJzaW9uKGludCB2ZXJzaW9uSWQpewotCQlJVmlydHVhbENvbXBvbmVudFtdIGNvbXBvbmVudHMgPSBnZXRBbGxFQVJDb21wb25lbnRzKCk7Ci0JCWZvciAoaW50IGk9MDsgaTxjb21wb25lbnRzLmxlbmd0aDsgaSsrKXsKLQkJCWlmIChnZXRKMkVFVmVyc2lvbihjb21wb25lbnRzW2ldKSA9PSB2ZXJzaW9uSWQpCi0JCQkJcmV0dXJuIGNvbXBvbmVudHNbaV07Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCQotCi0JLyoqCi0JICogCi0JICogQHBhcmFtIGoyZWVWZXJzaW9uSW50Ci0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldExhYmVsRnJvbUoyRUVWZXJzaW9uKFN0cmluZyBqMmVlVmVyc2lvbkludCkgewotCQlpZiAoajJlZVZlcnNpb25JbnQgPT0gbnVsbCB8fCBqMmVlVmVyc2lvbkludC5sZW5ndGgoKSA9PSAwKQotCQkJcmV0dXJuICIiOwotCi0JCWludCBqMmVlVmVyc2lvbiA9IEludGVnZXIucGFyc2VJbnQoajJlZVZlcnNpb25JbnQpOwotCQlzd2l0Y2ggKGoyZWVWZXJzaW9uKSB7Ci0JCQljYXNlIEoyRUVWZXJzaW9uQ29uc3RhbnRzLkoyRUVfMV8yX0lEIDoKLQkJCQlyZXR1cm4gSjJFRVZlcnNpb25Db25zdGFudHMuVkVSU0lPTl8xXzJfVEVYVDsKLQkJCWNhc2UgSjJFRVZlcnNpb25Db25zdGFudHMuSjJFRV8xXzNfSUQgOgotCQkJCXJldHVybiBKMkVFVmVyc2lvbkNvbnN0YW50cy5WRVJTSU9OXzFfM19URVhUOwotCQkJY2FzZSBKMkVFVmVyc2lvbkNvbnN0YW50cy5KMkVFXzFfNF9JRCA6Ci0JCQkJcmV0dXJuIEoyRUVWZXJzaW9uQ29uc3RhbnRzLlZFUlNJT05fMV80X1RFWFQ7Ci0JCQlkZWZhdWx0IDoKLQkJCQlyZXR1cm4gIiI7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRKMkVFVmVyc2lvbkZyb21MYWJlbChTdHJpbmcgajJlZUxhYmVsKSB7Ci0JCVN0cmluZyBqMmVlMTJTdHJpbmcgPSBTdHJpbmcudmFsdWVPZihKMkVFVmVyc2lvbkNvbnN0YW50cy5KMkVFXzFfMl9JRCk7Ci0JCVN0cmluZyBqMmVlMTNTdHJpbmcgPSBTdHJpbmcudmFsdWVPZihKMkVFVmVyc2lvbkNvbnN0YW50cy5KMkVFXzFfM19JRCk7Ci0JCVN0cmluZyBqMmVlMTRTdHJpbmcgPSBTdHJpbmcudmFsdWVPZihKMkVFVmVyc2lvbkNvbnN0YW50cy5KMkVFXzFfNF9JRCk7Ci0JCWlmIChqMmVlTGFiZWwuZXF1YWxzKEoyRUVWZXJzaW9uQ29uc3RhbnRzLlZFUlNJT05fMV8yX1RFWFQpKQotCQkJcmV0dXJuIGoyZWUxMlN0cmluZzsKLQotCQlpZiAoajJlZUxhYmVsLmVxdWFscyhKMkVFVmVyc2lvbkNvbnN0YW50cy5WRVJTSU9OXzFfM19URVhUKSkKLQkJCXJldHVybiBqMmVlMTNTdHJpbmc7Ci0KLQkJaWYgKGoyZWVMYWJlbC5lcXVhbHMoSjJFRVZlcnNpb25Db25zdGFudHMuVkVSU0lPTl8xXzRfVEVYVCkpCi0JCQlyZXR1cm4gajJlZTE0U3RyaW5nOwotCi0JCXJldHVybiAiIjsKLQotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIFN0cmluZyByZXByZXNlbnRhdGlvbnMgb2YgSjJFRSB2ZXJzaW9ucwotCSAqIEBwYXJhbSBhVmVyc2lvbgotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRKMkVFSW50VmVyc2lvbkFzU3RyaW5nKFN0cmluZyBhVmVyc2lvbikgewotCQlpZiAoYVZlcnNpb24uZXF1YWxzKEoyRUVWZXJzaW9uQ29uc3RhbnRzLlZFUlNJT05fMV80X1RFWFQpKQotCQkJcmV0dXJuIG5ldyBJbnRlZ2VyKEoyRUVWZXJzaW9uQ29uc3RhbnRzLkoyRUVfMV80X0lEKS50b1N0cmluZygpOwotCQlpZiAoYVZlcnNpb24uZXF1YWxzKEoyRUVWZXJzaW9uQ29uc3RhbnRzLlZFUlNJT05fMV8zX1RFWFQpKQotCQkJcmV0dXJuIG5ldyBJbnRlZ2VyKEoyRUVWZXJzaW9uQ29uc3RhbnRzLkoyRUVfMV8zX0lEKS50b1N0cmluZygpOwotCQlpZiAoYVZlcnNpb24uZXF1YWxzKEoyRUVWZXJzaW9uQ29uc3RhbnRzLlZFUlNJT05fMV8yX1RFWFQpKQotCQkJcmV0dXJuIG5ldyBJbnRlZ2VyKEoyRUVWZXJzaW9uQ29uc3RhbnRzLkoyRUVfMV8yX0lEKS50b1N0cmluZygpOwkJCi0JCS8vIGRlZmF1bHQKLQkJcmV0dXJuIG5ldyBJbnRlZ2VyKEoyRUVWZXJzaW9uQ29uc3RhbnRzLkoyRUVfMV80X0lEKS50b1N0cmluZygpOwotCX0JCi0KLQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLQotCi0JLyoqCi0JICogCi0JICogQHJldHVybgotCSAqIAotCSAqIEBkZXByZWNhdGVkICAvLyB1c2UgZ2V0QUxMRUFSQ29tcG9uZW50cwotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVByb2plY3RbXSBnZXRFQVJQcm9qZWN0cygpIHsKLQkJVmVjdG9yIHYgPSBuZXcgVmVjdG9yKCk7Ci0JCUlQcm9qZWN0W10gcHJvamVjdHMgPSBSZXNvdXJjZVV0aWxzLmdldFdvcmtzcGFjZVJvb3QoKS5nZXRQcm9qZWN0cygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHByb2plY3RzLmxlbmd0aDsgaSsrKSB7Ci0JCQl0cnkgewotLy8JCQkJaWYgKHByb2plY3RzW2ldLmhhc05hdHVyZShJRUFSTmF0dXJlQ29uc3RhbnRzLk5BVFVSRV9JRCkpIHsKLQkJCQlpZiAoUmVzb3VyY2VVdGlscy5pc0VBUlByb2plY3QocHJvamVjdHNbaV0pKSB7Ci0JCQkJCXYuYWRkKHByb2plY3RzW2ldKTsKLQkJCQl9Ci0JCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQkJLy9oYW5kbGUgZXhjZXB0aW9uCi0JCQl9Ci0KLQkJfQotCi0JCXJldHVybiAoSVByb2plY3RbXSl2LnRvQXJyYXkobmV3IElQcm9qZWN0WzBdKTsKLQl9Ci0JCi0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZmlyc3QgRUFSIHByb2plY3QgYXNzb2NpYXRlZCB3aXRoIHRoZSBwcm9qZWN0IGFuZCBzZXJ2ZXIKLQkgKiBAcGFyYW0gc2VydmljZVByb2plY3QKLQkgKiBAcGFyYW0gc2VydmVyCi0JICogQHJldHVybgotCSAqIAotCSAqIEBkZXByZWNhdGVkICAvLyB0byBiZSBzaW1wbGlmaWVkCi0JICovCi0JcHVibGljIHN0YXRpYyBJUHJvamVjdCBnZXREZWZhdWx0RUFSUHJvamVjdChJUHJvamVjdCBzZXJ2aWNlUHJvamVjdCwgSVNlcnZlciBzZXJ2ZXIpIHsKLQotCQlJUHJvamVjdFtdIGVhclByb2plY3RzID0gbnVsbDsKLQkJSVByb2plY3QgZWFyID0gbnVsbDsKLQotCQlpZiAoc2VydmljZVByb2plY3QgIT0gbnVsbCAmJiBzZXJ2aWNlUHJvamVjdC5leGlzdHMoKSkgewotCQkJdHJ5IHsKLQotCQkJCWJvb2xlYW4gaXNXZWJFSkJPckFwcENsaWVudCA9IFJlc291cmNlVXRpbHMuaXNXZWJQcm9qZWN0KHNlcnZpY2VQcm9qZWN0KSAvL3NlcnZpY2VQcm9qZWN0Lmhhc05hdHVyZShJV2ViTmF0dXJlQ29uc3RhbnRzLkoyRUVfTkFUVVJFX0lEKQotCQkJCQkJfHwgIFJlc291cmNlVXRpbHMuaXNFSkJQcm9qZWN0KHNlcnZpY2VQcm9qZWN0KSAvL3NlcnZpY2VQcm9qZWN0Lmhhc05hdHVyZShJRUpCTmF0dXJlQ29uc3RhbnRzLk5BVFVSRV9JRCkKLQkJCQkJCXx8ICBSZXNvdXJjZVV0aWxzLmlzQXBwQ2xpZW50UHJvamVjdChzZXJ2aWNlUHJvamVjdCk7Ly9zZXJ2aWNlUHJvamVjdC5oYXNOYXR1cmUoSUFwcGxpY2F0aW9uQ2xpZW50TmF0dXJlQ29uc3RhbnRzLk5BVFVSRV9JRCk7Ci0JCQkJaWYgKCFpc1dlYkVKQk9yQXBwQ2xpZW50KSB7Ci0JCQkJCXJldHVybiBudWxsOwotCQkJCX0KLQotCQkJCUlQcm9qZWN0W10gZWFycyA9IGdldEVBUlByb2plY3RzKCk7Ci0KLQkJCQkvLyBzZXBhcmF0ZSBFQVJzIHdoaWNoIGFyZSBhbHJlYWR5IGRlcGxveWVkIHRvIHRoZSBleGlzdGluZwotCQkJCS8vIHNlcnZlcgotCQkJCWlmIChlYXJzICE9IG51bGwgJiYgZWFycy5sZW5ndGggPj0gMSkgewotCQkJCQlBcnJheUxpc3QgcHJlZmVycmVkRUFSTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCQkJQXJyYXlMaXN0IHNlY29uZGFyeUVBUkxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgZWFycy5sZW5ndGg7IGkrKykgewotCQkJCQkJZWFyID0gZWFyc1tpXTsKLQkJCQkJCUlNb2R1bGUgbW9kdWxlID0gUmVzb3VyY2VVdGlscy5nZXRNb2R1bGUoZWFyKTsKLQkJCQkJCWlmIChtb2R1bGUgIT0gbnVsbCkgewotCQkJCQkJCWlmIChzZXJ2ZXIgIT0gbnVsbAotCQkJCQkJCQkJfHwgU2VydmVyVXRpbC5jb250YWluc01vZHVsZShzZXJ2ZXIsCi0JCQkJCQkJCQkJCW1vZHVsZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSkpIHsKLQkJCQkJCQkJcHJlZmVycmVkRUFSTGlzdC5hZGQoZWFyKTsKLQkJCQkJCQl9IGVsc2UgewotCQkJCQkJCQlzZWNvbmRhcnlFQVJMaXN0LmFkZChlYXIpOwotCQkJCQkJCX0KLQkJCQkJCX0KLQkJCQkJfQotCQkJCQkvLyBhZGQgc2Vjb25kYXJ5RUFSTGlzdCBpdGVtcyB0byBlbmQgb2YgcHJpbWFyeSBsaXN0Ci0JCQkJCWZvciAoaW50IGogPSAwOyBqIDwgc2Vjb25kYXJ5RUFSTGlzdC5zaXplKCk7IGorKykgewotCQkJCQkJcHJlZmVycmVkRUFSTGlzdC5hZGQoc2Vjb25kYXJ5RUFSTGlzdC5nZXQoaikpOwotCQkJCQl9Ci0JCQkJCS8vIHRvQXJyYXkKLQkJCQkJaWYgKHByZWZlcnJlZEVBUkxpc3QgIT0gbnVsbCkgewotCQkJCQkJZWFyUHJvamVjdHMgPSAoSVByb2plY3RbXSkgcHJlZmVycmVkRUFSTGlzdC50b0FycmF5KG5ldyBJUHJvamVjdFswXSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9IGNhdGNoIChFeGNlcHRpb24gY2UpIHsKLQkJCQlJTG9nIGxvZyA9IEVudmlyb25tZW50U2VydmljZS5nZXRFY2xpcHNlTG9nKCk7Ci0JCQkJbG9nLmxvZyhJTG9nLkVSUk9SLCA1MDM5LCBKMkVFVXRpbHMuY2xhc3MsICJnZXRFQVJQcm9qZWN0cyIsIGNlKTsKLQotCQkJfQotCQl9Ci0JCXJldHVybiBlYXJQcm9qZWN0c1swXTsKLQl9Ci0KLQkvKioKLQkgKiBHZXRzIHRoZSBFSkIgQ29tcG9uZW50cyBpbiB0aGUgcHJvamVjdAotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVZpcnR1YWxDb21wb25lbnRbXSBnZXRFSkJDb21wb25lbnRzKElQcm9qZWN0IHByb2plY3QpewotCQkKLQkJLy9nZXQgYWxsIGNvbXBvbmVudHMgaW4gdGhlIHByb2plY3QKLQkJTGlzdCB2ID0gbmV3IEFycmF5TGlzdCgpOwotCQlJVmlydHVhbENvbXBvbmVudCBjb21wb25lbnQgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLQkJdHJ5IHsKLQkJCWlmIChjb21wb25lbnQgIT0gbnVsbCAmJiBpc0VKQkNvbXBvbmVudChjb21wb25lbnQpKXsKLQkJCQl2LmFkZChjb21wb25lbnQpOwotCQkJfQkKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpewotCQkJLy9oYW5kbGUgZXhjZXB0aW9uCi0JCX0KLQkJCi0JCXJldHVybiAoSVZpcnR1YWxDb21wb25lbnRbXSl2LnRvQXJyYXkobmV3IElWaXJ0dWFsQ29tcG9uZW50WzBdKTsKLQl9IAotCQotCS8qKgotCSAqIEdldHMgdGhlIEFwcGxpY2F0aW9uIENsaWVudCBjb21wb25lbnRzIGluIGEgcHJvamVjdC4KLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElWaXJ0dWFsQ29tcG9uZW50W10gZ2V0QXBwQ2xpZW50Q29tcG9uZW50cyhJUHJvamVjdCBwcm9qZWN0KXsKLQkJCi0JCS8vZ2V0IGFsbCBjb21wb25lbnRzIGluIHRoZSBwcm9qZWN0Ci0JCUxpc3QgdiA9IG5ldyBBcnJheUxpc3QoKTsKLQkJdHJ5IHsKLQkJCUlWaXJ0dWFsQ29tcG9uZW50IGNvbXBvbmVudCA9IENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KHByb2plY3QpOwotCQkJCi0JCQkJaWYgKGNvbXBvbmVudCAhPSBudWxsICYmIGlzQXBwQ2xpZW50Q29tcG9uZW50KGNvbXBvbmVudCkpewotCQkJCQl2LmFkZChjb21wb25lbnQpOwotCQkJCX0JCi0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKXsKLQkJCS8vaGFuZGxlIGV4Y2VwdGlvbgotCQl9Ci0JCQotCQlyZXR1cm4gKElWaXJ0dWFsQ29tcG9uZW50W10pdi50b0FycmF5KG5ldyBJVmlydHVhbENvbXBvbmVudFswXSk7Ci0JfSAJCi0JCi0JLyoqCi0JICogCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBJVmlydHVhbENvbXBvbmVudFtdIGdldFJlZmVyZW5jaW5nRUpCMjBDb21wb25lbnRzRnJvbUVBUihJUHJvamVjdCBwcm9qZWN0KXsKLQkJIAotCQlMaXN0IGVqYkNvbXBzID0gbmV3IEFycmF5TGlzdCgpOwotCQl0cnl7Ci0JCQlJVmlydHVhbENvbXBvbmVudCB2YyA9IENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KHByb2plY3QpOwotCQkJSVZpcnR1YWxSZWZlcmVuY2VbXSByZWZzID0gdmMuZ2V0UmVmZXJlbmNlcygpOwotCQkJZm9yIChpbnQgaT0wOyBpPHJlZnMubGVuZ3RoO2krKykgewotCQkJCWlmIChpc0VKQjIwQ29tcG9uZW50KHJlZnNbaV0uZ2V0UmVmZXJlbmNlZENvbXBvbmVudCgpKSkKLQkJCQkJZWpiQ29tcHMuYWRkKHJlZnNbaV0uZ2V0UmVmZXJlbmNlZENvbXBvbmVudCgpKTsKLQkJCX0KLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpewotCQl9Ci0JCQotCQlyZXR1cm4gKElWaXJ0dWFsQ29tcG9uZW50W10pZWpiQ29tcHMudG9BcnJheShuZXcgSVZpcnR1YWxDb21wb25lbnRbMF0pOwkJCi0JfQotCQotCQotCS8qKgotCSAqIFV0aWxpdHkgbWV0aG9kIHRvIGNvbWJpbmUgdHdvIElQcm9qZWN0W10KLQkgKiBAcGFyYW0gcHJvamVjdEFycmF5MQotCSAqIEBwYXJhbSBwcm9qZWN0QXJyYXkyCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVByb2plY3RbXSBjb21iaW5lUHJvamVjdEFycmF5cyhJUHJvamVjdFtdIHByb2plY3RBcnJheTEsCi0JCQlJUHJvamVjdFtdIHByb2plY3RBcnJheTIpIHsKLQotCQkvLyBjaGVjayBpZiBlaXRoZXIgb3IgYm90aCBhcnJheXMgYXJlIG51bGwuCi0JCWlmIChwcm9qZWN0QXJyYXkxID09IG51bGwgJiYgcHJvamVjdEFycmF5MiA9PSBudWxsKQotCQkJcmV0dXJuIG51bGw7Ci0JCWVsc2UgaWYgKHByb2plY3RBcnJheTEgIT0gbnVsbCAmJiBwcm9qZWN0QXJyYXkyID09IG51bGwpCi0JCQlyZXR1cm4gcHJvamVjdEFycmF5MTsKLQkJZWxzZSBpZiAocHJvamVjdEFycmF5MSA9PSBudWxsICYmIHByb2plY3RBcnJheTIgIT0gbnVsbCkKLQkJCXJldHVybiBwcm9qZWN0QXJyYXkyOwotCi0JCUlQcm9qZWN0W10gY29tYmluZWRQcm9qZWN0cyA9IG5ldyBJUHJvamVjdFtwcm9qZWN0QXJyYXkxLmxlbmd0aAotCQkJCSsgcHJvamVjdEFycmF5Mi5sZW5ndGhdOwotCi0JCVN5c3RlbS5hcnJheWNvcHkocHJvamVjdEFycmF5MSwgMCwgY29tYmluZWRQcm9qZWN0cywgMCwKLQkJCQlwcm9qZWN0QXJyYXkxLmxlbmd0aCk7Ci0JCWlmIChwcm9qZWN0QXJyYXkyLmxlbmd0aCA+IDApIHsKLQkJCVN5c3RlbS5hcnJheWNvcHkocHJvamVjdEFycmF5MiwgMCwgY29tYmluZWRQcm9qZWN0cywKLQkJCQkJcHJvamVjdEFycmF5MS5sZW5ndGgsIHByb2plY3RBcnJheTIubGVuZ3RoKTsKLQkJfQotCi0JCXJldHVybiBjb21iaW5lZFByb2plY3RzOwotCX0KLQotCS8qKgotCSAqIAotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVZpcnR1YWxDb21wb25lbnRbXSBnZXRSZWZlcmVuY2luZ1dlYkNvbXBvbmVudHNGcm9tRUFSKElQcm9qZWN0IHByb2plY3QpewotCQlMaXN0IHdlYkNvbXBzID0gbmV3IEFycmF5TGlzdCgpOwotCQl0cnl7Ci0JCQlJVmlydHVhbENvbXBvbmVudCB2YyA9IENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KHByb2plY3QpOwotCQkJSVZpcnR1YWxSZWZlcmVuY2VbXSByZWZzID0gdmMuZ2V0UmVmZXJlbmNlcygpOwotCQkJZm9yIChpbnQgaT0wOyBpPHJlZnMubGVuZ3RoO2krKykgewotCQkJCWlmIChpc1dlYkNvbXBvbmVudChyZWZzW2ldLmdldFJlZmVyZW5jZWRDb21wb25lbnQoKSkpCi0JCQkJCXdlYkNvbXBzLmFkZChyZWZzW2ldLmdldFJlZmVyZW5jZWRDb21wb25lbnQoKSk7Ci0JCQl9CQkJCi0JCX0KLQkJY2F0Y2goRXhjZXB0aW9uIGUpewotCQl9Ci0JCQotCQlyZXR1cm4gKElWaXJ0dWFsQ29tcG9uZW50W10pd2ViQ29tcHMudG9BcnJheShuZXcgSVZpcnR1YWxDb21wb25lbnRbMF0pOwkKLQl9Ci0JCi0KLQkKLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gZWpiQ29tcG9uZW50Ci0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0VKQjIwQ29tcG9uZW50KElWaXJ0dWFsQ29tcG9uZW50IGVqYkNvbXBvbmVudCl7Ci0JCXJldHVybiBpc0VKQjIwQ29tcG9uZW50KGVqYkNvbXBvbmVudC5nZXRQcm9qZWN0KCkpOwotCX0KLQkKLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNFSkIyMENvbXBvbmVudChJUHJvamVjdCBwcm9qZWN0KXsKLQkJYm9vbGVhbiBpc0VKQiA9IGZhbHNlOwotCQl0cnkgewotICAgICAgSVZpcnR1YWxDb21wb25lbnQgdmMgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLQkJICBpZiAoRUpCQXJ0aWZhY3RFZGl0LmlzVmFsaWRFSkJNb2R1bGUodmMpKSB7Ci0JCQkgIEVKQkFydGlmYWN0RWRpdCAgZWpiRWRpdCA9IG51bGw7Ci0JCQkgIHRyeSB7Ci0JCQkJICBlamJFZGl0ID0gRUpCQXJ0aWZhY3RFZGl0LmdldEVKQkFydGlmYWN0RWRpdEZvclJlYWQodmMpOwotCQkJCSAgRUpCUmVzb3VyY2UgZWpiUmVzID0gZWpiRWRpdC5nZXRFSkJKYXJYbWlSZXNvdXJjZSgpOwotCQkJCSAgaWYgKGVqYlJlcy5nZXRNb2R1bGVWZXJzaW9uSUQoKT09IEoyRUVWZXJzaW9uQ29uc3RhbnRzLkVKQl8yXzBfSUQpIHsKLQkJCQkJICByZXR1cm4gdHJ1ZTsKLQkJCQkgIH0KLQkJCSAgfQotCQkJICBmaW5hbGx5IHsKLQkJCQkgIGlmIChlamJFZGl0IT1udWxsKQotCQkJCQkgIGVqYkVkaXQuZGlzcG9zZSgpOwotCQkJICB9Ci0JCSAgfQotCQl9Ci0JCWNhdGNoKEV4Y2VwdGlvbiBleCl7fQotCQkKLQkJcmV0dXJuIGlzRUpCOwkJCQotCX0KLQotCQotCS8qKgotCSAqIENoZWNrcyBpZiB0aGUgY29tcG9uZW50IGF0IGNvbXBOYW1lIGlzIHJlZmVyZW5jZWQgYnkgdGhlIGVhciBhdCBlYXJDb21wTmFtZQotCSAqIEBwYXJhbSBlYXJQcm9qZWN0Ci0JICogQHBhcmFtIHByb2plY3QKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzQ29tcG9uZW50QXNzb2NpYXRlZChJUHJvamVjdCBlYXJQcm9qZWN0LCBJUHJvamVjdCBwcm9qZWN0KSB7Ci0JCUlWaXJ0dWFsQ29tcG9uZW50IHZjMSA9IENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KGVhclByb2plY3QpOwotCQlJVmlydHVhbENvbXBvbmVudCB2YzIgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLQkJcmV0dXJuIGlzQ29tcG9uZW50QXNzb2NpYXRlZCh2YzEsIHZjMik7Ci0JfQotCQotCS8qKgotCSAqIENoZWNrcyBpZiB0aGUgY29tcG9uZW50IGlzIHJlZmVyZW5jZWQgYnkgdGhlIGVhcgotCSAqIEBwYXJhbSBlYXIgCi0JICogQHBhcmFtIGNvbXBvbmVudAotCSAqIEByZXR1cm4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzQ29tcG9uZW50QXNzb2NpYXRlZChJVmlydHVhbENvbXBvbmVudCBlYXIsIElWaXJ0dWFsQ29tcG9uZW50IGNvbXBvbmVudCl7Ci0JCWJvb2xlYW4gaXNBc3NvY2lhdGVkID0gZmFsc2U7Ci0JCQotCQkvLyBOb3RlOiBub3QgaW1wbGVtZW50ZWQgYnkgSjJFRSB5ZXQuLiB0byBiZSB1c2VkIGxhdGVyLgotCQlJVmlydHVhbFJlZmVyZW5jZVtdIGNvbXBSZWZzID0gZWFyLmdldFJlZmVyZW5jZXMoKTsKLQkJaWYgKGNvbXBSZWZzIT0gbnVsbCkgewotCQkJZm9yIChpbnQgaT0wO2k8Y29tcFJlZnMubGVuZ3RoO2krKyl7Ci0JCQkJSVZpcnR1YWxSZWZlcmVuY2UgdnJlZiA9IGNvbXBSZWZzW2ldOwotCQkJCWlmIChjb21wb25lbnQuZXF1YWxzKHZyZWYuZ2V0UmVmZXJlbmNlZENvbXBvbmVudCgpKSkKLQkJCQkJCWlzQXNzb2NpYXRlZCA9IHRydWU7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGlzQXNzb2NpYXRlZDsKLQl9Ci0KLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqIEBwYXJhbSBlYXJQcm9qZWN0Ci0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIGFzc29jaWF0ZUNvbXBvbmVudFRvRUFSKElQcm9qZWN0IHByb2plY3QsIElQcm9qZWN0IGVhclByb2plY3QpIHsKLQkJCi0gICAgICAgIElEYXRhTW9kZWwgYWRkQ29tcG9uZW50VG9FQVJEYXRhTW9kZWwgPSBEYXRhTW9kZWxGYWN0b3J5LmNyZWF0ZURhdGFNb2RlbChuZXcgQWRkQ29tcG9uZW50VG9FbnRlcnByaXNlQXBwbGljYXRpb25EYXRhTW9kZWxQcm92aWRlcigpKTsKLQkJSVZpcnR1YWxDb21wb25lbnQgZWFyQ29tcCA9IENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KGVhclByb2plY3QpOwotICAgICAgICBhZGRDb21wb25lbnRUb0VBUkRhdGFNb2RlbC5zZXRQcm9wZXJ0eShJQ3JlYXRlUmVmZXJlbmNlQ29tcG9uZW50c0RhdGFNb2RlbFByb3BlcnRpZXMuU09VUkNFX0NPTVBPTkVOVCwgZWFyQ29tcCk7Ci0gICAgICAgIExpc3QgbW9kTGlzdCA9IChMaXN0KSBhZGRDb21wb25lbnRUb0VBUkRhdGFNb2RlbC5nZXRQcm9wZXJ0eShJQ3JlYXRlUmVmZXJlbmNlQ29tcG9uZW50c0RhdGFNb2RlbFByb3BlcnRpZXMuVEFSR0VUX0NPTVBPTkVOVF9MSVNUKTsKLSAgICAgICAgSVZpcnR1YWxDb21wb25lbnQgdGFyZ2V0Q29tcCA9IENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KHByb2plY3QpOwotICAgICAgICBtb2RMaXN0LmFkZCh0YXJnZXRDb21wKTsKLQkJYWRkQ29tcG9uZW50VG9FQVJEYXRhTW9kZWwuc2V0UHJvcGVydHkoSUNyZWF0ZVJlZmVyZW5jZUNvbXBvbmVudHNEYXRhTW9kZWxQcm9wZXJ0aWVzLlRBUkdFVF9DT01QT05FTlRfTElTVCwgbW9kTGlzdCk7Ci0gICAgICAgIAotCQl0cnkgewotCQkJYWRkQ29tcG9uZW50VG9FQVJEYXRhTW9kZWwuZ2V0RGVmYXVsdE9wZXJhdGlvbigpLmV4ZWN1dGUobnVsbCwgbnVsbCk7Ci0JCX0gY2F0Y2ggKEV4ZWN1dGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQlMb2dnZXIuZ2V0TG9nZ2VyKCkubG9nKGUpOwotCQl9Ci0gICAgICAgICAgICAKLQl9Ci0gICAgCi0gICAgLyoKLSAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgcHJvamVjdCBjYW4gYmUgYXNzb2NpYXRlZCB3aXRoIGVhclByb2plY3QuCi0gICAgICogQHJldHVybnMgSVN0YXR1cyBvZiBPSyBpZiB0aGUgcHJvamVjdCBpcyBhIFdlYiBwcm9qZWN0LCBFSkIgcHJvamVjdCwgb3IgQXBwQ2xpZW50Ci0gICAgICogcHJvamVjdCB0aGF0IGNhbiBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIEVBUiBwcm9qZWN0LiAKLSAgICAgKiBSZXR1cm5zIElTdGF0dXMgd2l0aCBhbiBFUlJPUiBzZXZlcml0eSBpZiB0aGUgcHJvamVjdCBpcyBhIFdlYiBwcm9qZWN0LCAKLSAgICAgKiBFSkIgcHJvamVjdCwgb3IgQXBwQ2xpZW50IHByb2plY3QgdGhhdCBjYW5ub3QgYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBFQVIgcHJvamVjdC4gCi0gICAgICogV2hlbiBhbiBJU3RhdHVzIG9mIHNldmVyaXR5IEVSUk9SIGlzIHJldHVybmVkLCB0aGUgSVN0YXR1cycgbWVzc2FnZSB3aWxsIGNvbnRhaW4gdGhlIAotICAgICAqIGxvd2VzdCBKMkVFIGxldmVsIHRoYXQgdGhpcyBwcm9qZWN0IHJlcXVpcmVzIG9uIGFuIEVBUi4KLSAgICAgKiBSZXR1cm5zIGFuIElTdGF0dXMgd2l0aCBzZXZlcml0eSBPSyBpZiBwcm9qZWN0IGlzIG5vdCByZWNvZ25pemVkIGFzIGEgV2ViLCBFSkIsIG9yCi0gICAgICogQXBwQ2xpZW50IHByb2plY3Qgb3IgaWYgZWFyUHJvamVjdCBpcyBub3QgcmVjb2duaXplZCBhcyBhbiBFQVIgcHJvamVjdC4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIElTdGF0dXMgY2FuQXNzb2NpYXRlUHJvamVjdFRvRUFSKElQcm9qZWN0IHByb2plY3QsIElQcm9qZWN0IGVhclByb2plY3QpCi0gICAgewotICAgICAgLy9JZiBwcm9qZWN0IGNvbnRhaW5zIHRoZSB3ZWIsIGVqYiwgb3IgYXBwY2xpZW50IGZhY2V0LCBhbmQgZWFyUHJvamVjdCBjb250YWlucyB0aGUgCi0gICAgICAvL2VhciBmYWNldCwgcmV0dXJuIHdoZXRoZXIgb3Igbm90IHRoZSBmYWNldCB2ZXJzaW9ucyBhcmUgc3VjaCB0aGF0IHRoZSBwcm9qZWN0Ci0gICAgICAvL2NhbiBiZSBhZGRlZCB0byB0aGUgZWFyLiAgICAgIAotCi0gICAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgICBib29sZWFuIGlzV2ViID0gaXNXZWJDb21wb25lbnQocHJvamVjdCk7Ci0gICAgICBib29sZWFuIGlzRUpCID0gaXNFSkJDb21wb25lbnQocHJvamVjdCk7Ci0gICAgICBib29sZWFuIGlzQXBwQ2xpZW50ID0gaXNBcHBDbGllbnRDb21wb25lbnQocHJvamVjdCk7Ci0gICAgICBib29sZWFuIGlzRUFSID0gaXNFQVJDb21wb25lbnQoZWFyUHJvamVjdCk7Ci0gICAgICBpZiAoKGlzV2ViIHx8IGlzRUpCIHx8IGlzQXBwQ2xpZW50KSAmJiBpc0VBUikKLSAgICAgIHsgICAgICAgIAotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIElGYWNldGVkUHJvamVjdCBmUHJvamVjdCA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmNyZWF0ZShwcm9qZWN0KTsKLSAgICAgICAgICBJRmFjZXRlZFByb2plY3QgZkVhclByb2plY3QgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5jcmVhdGUoZWFyUHJvamVjdCk7Ci0gICAgICAgICAgCi0gICAgICAgICAgSVByb2plY3RGYWNldCBlYXJQZiA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmdldFByb2plY3RGYWNldChJSjJFRU1vZHVsZUNvbnN0YW50cy5KU1RfRUFSX01PRFVMRSk7Ci0gICAgICAgICAgSVByb2plY3RGYWNldFZlcnNpb24gZWFyUGZ2ID0gZkVhclByb2plY3QuZ2V0SW5zdGFsbGVkVmVyc2lvbihlYXJQZik7Ci0gICAgICAgICAgU3RyaW5nIGVhclZlcnNpb24gPSBlYXJQZnYuZ2V0VmVyc2lvblN0cmluZygpOwotICAgICAgICAgIAotICAgICAgICAgIFN0cmluZyB3ZWJWZXJzaW9uID0gbnVsbDsKLSAgICAgICAgICBTdHJpbmcgZWpiVmVyc2lvbiA9IG51bGw7Ci0gICAgICAgICAgU3RyaW5nIGFjVmVyc2lvbiA9IG51bGw7Ci0gICAgICAgICAgICAKLSAgICAgICAgICBpZiAoaXNXZWIpCi0gICAgICAgICAgewotICAgICAgICAgICAgSVByb2plY3RGYWNldCB3ZWJQZiA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmdldFByb2plY3RGYWNldChJSjJFRU1vZHVsZUNvbnN0YW50cy5KU1RfV0VCX01PRFVMRSk7Ci0gICAgICAgICAgICBJUHJvamVjdEZhY2V0VmVyc2lvbiB3ZWJQZnYgPSBmUHJvamVjdC5nZXRJbnN0YWxsZWRWZXJzaW9uKHdlYlBmKTsKLSAgICAgICAgICAgIHdlYlZlcnNpb24gPSB3ZWJQZnYuZ2V0VmVyc2lvblN0cmluZygpOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIGlmIChpc0VKQikgICAgICAgICAgICAKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBJUHJvamVjdEZhY2V0IGVqYlBmID0gUHJvamVjdEZhY2V0c01hbmFnZXIuZ2V0UHJvamVjdEZhY2V0KElKMkVFTW9kdWxlQ29uc3RhbnRzLkpTVF9FSkJfTU9EVUxFKTsKLSAgICAgICAgICAgIElQcm9qZWN0RmFjZXRWZXJzaW9uIGVqYlBmdiA9IGZQcm9qZWN0LmdldEluc3RhbGxlZFZlcnNpb24oZWpiUGYpOwotICAgICAgICAgICAgZWpiVmVyc2lvbiA9IGVqYlBmdi5nZXRWZXJzaW9uU3RyaW5nKCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UgaWYgKGlzQXBwQ2xpZW50KQotICAgICAgICAgIHsKLSAgICAgICAgICAgIElQcm9qZWN0RmFjZXQgYWNQZiA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmdldFByb2plY3RGYWNldChJSjJFRU1vZHVsZUNvbnN0YW50cy5KU1RfQVBQQ0xJRU5UX01PRFVMRSk7Ci0gICAgICAgICAgICBJUHJvamVjdEZhY2V0VmVyc2lvbiBhY1BmdiA9IGZQcm9qZWN0LmdldEluc3RhbGxlZFZlcnNpb24oYWNQZik7Ci0gICAgICAgICAgICBhY1ZlcnNpb24gPSBhY1Bmdi5nZXRWZXJzaW9uU3RyaW5nKCk7Ci0gICAgICAgICAgfSAKLSAgICAgICAgICAKLSAgICAgICAgICBpZiAoKGlzV2ViICYmIHdlYlZlcnNpb24uZXF1YWxzKEoyRUVWZXJzaW9uQ29uc3RhbnRzLlZFUlNJT05fMl8yX1RFWFQpKSB8fAotICAgICAgICAgICAgICAoaXNFSkIgJiYgZWpiVmVyc2lvbi5lcXVhbHMoSjJFRVZlcnNpb25Db25zdGFudHMuVkVSU0lPTl8xXzFfVEVYVCkpIHx8Ci0gICAgICAgICAgICAgIChpc0FwcENsaWVudCAmJiBhY1ZlcnNpb24uZXF1YWxzKEoyRUVWZXJzaW9uQ29uc3RhbnRzLlZFUlNJT05fMV8yX1RFWFQpKQotICAgICAgICAgICAgICApCi0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKCFncmVhdGVyVGhhbk9yRXF1YWxUbyhlYXJWZXJzaW9uLCBKMkVFVmVyc2lvbkNvbnN0YW50cy5WRVJTSU9OXzFfMl9URVhUKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoSjJFRVZlcnNpb25Db25zdGFudHMuVkVSU0lPTl8xXzJfVEVYVCk7Ci0gICAgICAgICAgICB9ICAgICAgICAgICAgCi0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UgaWYgKChpc1dlYiAmJiB3ZWJWZXJzaW9uLmVxdWFscyhKMkVFVmVyc2lvbkNvbnN0YW50cy5WRVJTSU9OXzJfM19URVhUKSkgfHwKLSAgICAgICAgICAgICAgKGlzRUpCICYmIGVqYlZlcnNpb24uZXF1YWxzKEoyRUVWZXJzaW9uQ29uc3RhbnRzLlZFUlNJT05fMl8wX1RFWFQpKSB8fAotICAgICAgICAgICAgICAoaXNBcHBDbGllbnQgJiYgYWNWZXJzaW9uLmVxdWFscyhKMkVFVmVyc2lvbkNvbnN0YW50cy5WRVJTSU9OXzFfM19URVhUKSkKLSAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlmICghZ3JlYXRlclRoYW5PckVxdWFsVG8oZWFyVmVyc2lvbiwgSjJFRVZlcnNpb25Db25zdGFudHMuVkVSU0lPTl8xXzNfVEVYVCkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyhKMkVFVmVyc2lvbkNvbnN0YW50cy5WRVJTSU9OXzFfM19URVhUKTsKLSAgICAgICAgICAgICAgfSAgICAgICAgICAgIAotICAgICAgICAgICAgfSAgICAgICAgICAKLSAgICAgICAgICBlbHNlIGlmICgoaXNXZWIgJiYgd2ViVmVyc2lvbi5lcXVhbHMoSjJFRVZlcnNpb25Db25zdGFudHMuVkVSU0lPTl8yXzRfVEVYVCkpIHx8Ci0gICAgICAgICAgICAgIChpc0VKQiAmJiBlamJWZXJzaW9uLmVxdWFscyhKMkVFVmVyc2lvbkNvbnN0YW50cy5WRVJTSU9OXzJfMV9URVhUKSkgfHwKLSAgICAgICAgICAgICAgKGlzQXBwQ2xpZW50ICYmIGFjVmVyc2lvbi5lcXVhbHMoSjJFRVZlcnNpb25Db25zdGFudHMuVkVSU0lPTl8xXzRfVEVYVCkpCi0gICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBpZiAoIWdyZWF0ZXJUaGFuT3JFcXVhbFRvKGVhclZlcnNpb24sIEoyRUVWZXJzaW9uQ29uc3RhbnRzLlZFUlNJT05fMV80X1RFWFQpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoSjJFRVZlcnNpb25Db25zdGFudHMuVkVSU0lPTl8xXzRfVEVYVCk7Ci0gICAgICAgICAgICAgIH0gICAgICAgICAgICAKLSAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICB9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKQotICAgICAgICB7Ci0gICAgICAgICAgLy9JZiBmYWNldCBBUEkgdGhyb3dzIGEgQ29yZUV4Y2VwdGlvbiB3aGVuIHRyeWluZyB0byBjcmVhdGUgYW4gSUZhY2V0ZWRQcm9qZWN0IGZyb20gCi0gICAgICAgICAgLy9hbiBJUHJvamVjdCwgYW4gT0sgU3RhdHVzIHdpbGwgYmUgcmV0dXJuZWQgYW5kIGNsaWVudHMgb2YgdGhpcyB1dGlsaXR5IG1ldGhvZAotICAgICAgICAgIC8vd29uJ3QgcmFpc2UgYSB2YWxpZGF0aW9uIGVycm9yLgotICAgICAgICB9ICAgICAgICAgCi0gICAgICB9Ci0KLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQotCi0JCi0gICAgLyoKLSAgICAgKiBAcGFyYW0gdmVyc2lvbkEgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGZvcm0gMS4yLjMKLSAgICAgKiBAcGFyYW0gdmVyc2lvbkEgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGZvcm0gMS4yLjMKLSAgICAgKiBAcmV0dXJuIGJvb2xlYW4gcmV0dXJucyB3aGV0aGVyIHZlcnNpb25BIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB2ZXJzaW9uQgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gZ3JlYXRlclRoYW5PckVxdWFsVG8oU3RyaW5nIHZlcnNpb25BLCBTdHJpbmcgdmVyc2lvbkIpCi0gICAgewotICAgICAgaWYgKHZlcnNpb25BLmVxdWFscyh2ZXJzaW9uQikpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBTdHJpbmdUb2tlbml6ZXIgc3RBID0gbmV3IFN0cmluZ1Rva2VuaXplcih2ZXJzaW9uQSwgIi4iKTsKLSAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0QiA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodmVyc2lvbkIsICIuIik7Ci0KLSAgICAgICAgaW50IHNpemVBID0gc3RBLmNvdW50VG9rZW5zKCk7Ci0gICAgICAgIGludCBzaXplQiA9IHN0Qi5jb3VudFRva2VucygpOwotCi0gICAgICAgIGludCBzaXplOwotICAgICAgICBpZiAoc2l6ZUEgPCBzaXplQikKLSAgICAgICAgewotICAgICAgICAgIHNpemUgPSBzaXplQTsKLSAgICAgICAgfSAKLSAgICAgICAgZWxzZQotICAgICAgICAgIHNpemUgPSBzaXplQjsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKLSAgICAgICAgewotICAgICAgICAgIGludCBhID0gSW50ZWdlci5wYXJzZUludChzdEEubmV4dFRva2VuKCkpOwotICAgICAgICAgIGludCBiID0gSW50ZWdlci5wYXJzZUludChzdEIubmV4dFRva2VuKCkpOwotICAgICAgICAgIGlmIChhICE9IGIpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGEgPiBiOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBzaXplQSA+IHNpemVCOwotICAgICAgfQotICAgIH0KLQkKLQkvKioKLSAgICogQHBhcmFtIHByb2plY3QKLSAgICogQHJldHVybgotICAgKi8KLQlwdWJsaWMgc3RhdGljIElQYXRoIGdldFdlYkluZlBhdGgoSVByb2plY3QgcHJvamVjdCl7Ci0JCQotCQlJVmlydHVhbENvbXBvbmVudCBjb21wb25lbnQgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLQkJCi0JCS8vc2hvdWxkIFdFQi1JTkYgbG9jYXRpb24gYmUgcHVsbGVkIGluIGZyb20gdGhlIC5jb21wb25lbnQgZmlsZSByYXRoZXIgdGhhbiBoYXJkY29kZWQgaGVyZT8KLQkJSVZpcnR1YWxGb2xkZXIgd2ViSW5mRGlyID0gY29tcG9uZW50LmdldFJvb3RGb2xkZXIoKS5nZXRGb2xkZXIobmV3IFBhdGgoIi9XRUItSU5GIikpOwotCQlJUGF0aCBtb2R1bGVQYXRoID0gd2ViSW5mRGlyLmdldFdvcmtzcGFjZVJlbGF0aXZlUGF0aCgpOwotCQkKLQkJaWYgKCF3ZWJJbmZEaXIuZXhpc3RzKCkpCi0JCXsJCi0JCQl0cnkgCi0JCQl7CQotCQkJCXdlYkluZkRpci5jcmVhdGUoMCxudWxsKTsJCQkJCi0JCQl9Ci0JCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKQotCQkJe30KLQkJfQkJCi0JCXJldHVybiBtb2R1bGVQYXRoOwotCX0KLQkKLQkKLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqIEByZXR1cm4KLQkgKiAKLQkgKi8KLQlwdWJsaWMgc3RhdGljIElQYXRoIGdldEZpcnN0V2ViQ29udGVudFBhdGgoSVByb2plY3QgcHJvamVjdCl7Ci0JCQotCQlJUGF0aCBtb2R1bGVQYXRoID0gbnVsbDsKLQkJdHJ5IHsKLSAgICAgICAgICBJVmlydHVhbENvbXBvbmVudCB2YyA9IENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KHByb2plY3QpOwotCQkgIGlmIChNb2R1bGVDb3JlTmF0dXJlLmlzRmxleGlibGVQcm9qZWN0KHByb2plY3QpKSB7Ci0gICAgICAgICAgICBtb2R1bGVQYXRoID0gdmMuZ2V0Um9vdEZvbGRlcigpLmdldFdvcmtzcGFjZVJlbGF0aXZlUGF0aCgpOwotCQkgIH0KLQkJfQotCQljYXRjaChFeGNlcHRpb24gZXgpe30KLQotCQlyZXR1cm4gbW9kdWxlUGF0aDsJCQkKLQl9Ci0JCi0JLyoqCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBJUGF0aCBnZXRXZWJDb250ZW50UGF0aChJUHJvamVjdCBwcm9qZWN0KXsKLQkJSVZpcnR1YWxDb21wb25lbnQgY29tcG9uZW50ID0gQ29tcG9uZW50Q29yZS5jcmVhdGVDb21wb25lbnQocHJvamVjdCk7Ci0JCUlQYXRoIG1vZHVsZVBhdGggPSBjb21wb25lbnQuZ2V0Um9vdEZvbGRlcigpLmdldFdvcmtzcGFjZVJlbGF0aXZlUGF0aCgpOwotCQlyZXR1cm4gbW9kdWxlUGF0aDsKLQl9Ci0JCi0JLyoqCi0JICogCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiBAcmV0dXJuCi0JICogCi0JICovCi0JcHVibGljIHN0YXRpYyBJQ29udGFpbmVyIGdldEZpcnN0V2ViQ29udGVudENvbnRhaW5lcihJUHJvamVjdCBwcm9qZWN0KXsKLQkJSUNvbnRhaW5lciBjb250YWluZXIgPSBudWxsOwotCQlJUGF0aCBtb2R1bGVQYXRoID0gZ2V0Rmlyc3RXZWJDb250ZW50UGF0aChwcm9qZWN0KTsKLQkJSVJlc291cmNlIHJlcyA9IFJlc291cmNlVXRpbHMuZmluZFJlc291cmNlKG1vZHVsZVBhdGgpOwotCQlpZiAocmVzIT1udWxsKXsKLQkJICBjb250YWluZXIgPSByZXMuZ2V0UGFyZW50KCk7Ci0JCX0JCQotCQkgIAotCQlyZXR1cm4gY29udGFpbmVyOwotCX0KLQkKLQkvKioKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElDb250YWluZXIgZ2V0V2ViQ29udGVudENvbnRhaW5lcihJUHJvamVjdCBwcm9qZWN0KXsKLQkJSUNvbnRhaW5lciBjb250YWluZXIgPSBudWxsOwotCQlJUGF0aCBtb2R1bGVQYXRoID0gZ2V0V2ViQ29udGVudFBhdGgocHJvamVjdCk7Ci0JCUlSZXNvdXJjZSByZXMgPSBSZXNvdXJjZVV0aWxzLmZpbmRSZXNvdXJjZShtb2R1bGVQYXRoKTsKLQkJaWYgKHJlcyBpbnN0YW5jZW9mIElDb250YWluZXIpewotCQkgIGNvbnRhaW5lciA9IChJQ29udGFpbmVyKXJlczsKLQkJfQkJCi0JCXJldHVybiBjb250YWluZXI7Ci0JfQotCQotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIGZpcnN0IE1vZHVsZSBuYW1lIAotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogQHJldHVybgotCSAqIAotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEZpcnN0V2ViTW9kdWxlTmFtZShJUHJvamVjdCBwcm9qZWN0KXsKLSAgICAgIFN0cmluZyBtb2R1bGVOYW1lID0gbnVsbDsKLSAgICAgIHRyeSB7Ci0gICAgICAgIElWaXJ0dWFsQ29tcG9uZW50IHZjID0gQ29tcG9uZW50Q29yZS5jcmVhdGVDb21wb25lbnQocHJvamVjdCk7Ci0gICAgICAgIG1vZHVsZU5hbWUgPSB2Yy5nZXROYW1lKCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaChFeGNlcHRpb24gZXgpe30KLSAgCi0gICAgICByZXR1cm4gbW9kdWxlTmFtZTsgIAkJCQotCX0KLQkKLQkKLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNXZWJDb21wb25lbnQoSVZpcnR1YWxDb21wb25lbnQgY29tcCl7Ci0JICAgIHJldHVybiBKMkVFUHJvamVjdFV0aWxpdGllcy5pc0R5bmFtaWNXZWJQcm9qZWN0KGNvbXAuZ2V0UHJvamVjdCgpKTsKLSAgfQotCQotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0VBUkNvbXBvbmVudChJVmlydHVhbENvbXBvbmVudCBjb21wKXsKLQkgICAgcmV0dXJuIEoyRUVQcm9qZWN0VXRpbGl0aWVzLmlzRUFSUHJvamVjdChjb21wLmdldFByb2plY3QoKSk7Ci0JfQotCi0JLyoqCi0JICogVHJ1ZSBpZiB0aGUgY29tcG9uZW50IGlzIGEgdmFsaWQgRUpCIGNvbXBvbmVudAotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0VKQkNvbXBvbmVudChJUHJvamVjdCBwcm9qZWN0KSB7Ci0gICAgICBJVmlydHVhbENvbXBvbmVudCB2YyA9IENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KHByb2plY3QpOwotICAgICAgaWYgKHZjICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBpc0VKQkNvbXBvbmVudCh2Yyk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7IAotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0JfQotCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzRUpCQ29tcG9uZW50KElWaXJ0dWFsQ29tcG9uZW50IGNvbXApewotCQlyZXR1cm4gSjJFRVByb2plY3RVdGlsaXRpZXMuaXNFSkJQcm9qZWN0KGNvbXAuZ2V0UHJvamVjdCgpKTsKLQl9CQotCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzQXBwQ2xpZW50Q29tcG9uZW50KElWaXJ0dWFsQ29tcG9uZW50IGNvbXApewotCQlyZXR1cm4gSjJFRVByb2plY3RVdGlsaXRpZXMuaXNBcHBsaWNhdGlvbkNsaWVudFByb2plY3QoY29tcC5nZXRQcm9qZWN0KCkpOwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNKYXZhQ29tcG9uZW50KElWaXJ0dWFsQ29tcG9uZW50IGNvbXApewotCQlyZXR1cm4gSjJFRVByb2plY3RVdGlsaXRpZXMuaXNVdGlsaXR5UHJvamVjdChjb21wLmdldFByb2plY3QoKSk7Ci0JfQkKLQkKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRDb21wb25lbnRUeXBlSWQoSVByb2plY3QgcHJvamVjdCkgewotCQlyZXR1cm4gSjJFRVByb2plY3RVdGlsaXRpZXMuZ2V0SjJFRVByb2plY3RUeXBlKHByb2plY3QpOwotCX0KLSAgCi0JcHVibGljIHN0YXRpYyBTdHJpbmdbXSB0b0NvbXBvbmVudE5hbWVzQXJyYXkoSVZpcnR1YWxDb21wb25lbnRbXSBjb21wb25lbnRzKXsKLQkJU3RyaW5nW10gZWNOYW1lcyA9IG5ldyBTdHJpbmdbY29tcG9uZW50cy5sZW5ndGhdOwotCQlmb3IoaW50IGk9MDsgaTxjb21wb25lbnRzLmxlbmd0aDsgaSsrKXsKLQkJCWVjTmFtZXNbaV0gPSBjb21wb25lbnRzW2ldLmdldE5hbWUoKTsKLQkJfQotCQlyZXR1cm4gZWNOYW1lczsJCQotCX0KLQkKLQlwdWJsaWMgc3RhdGljIElQcm9qZWN0W10gdG9Qcm9qZWN0QXJyYXkoSVZpcnR1YWxDb21wb25lbnRbXSBjb21wb25lbnRzKXsKLQkJSVByb2plY3RbXSBwcm9qZWN0cyA9IG5ldyBJUHJvamVjdFtjb21wb25lbnRzLmxlbmd0aF07Ci0JCWZvciAoaW50IGk9MDsgaTxjb21wb25lbnRzLmxlbmd0aDsgaSsrKXsKLQkJCXByb2plY3RzW2ldID0gY29tcG9uZW50c1tpXS5nZXRQcm9qZWN0KCk7Ci0JCX0KLQkJcmV0dXJuIHByb2plY3RzOwotCX0KLQkKLQkvKioKLQkgKiBHaXZlbiBhIEoyRUUgbGV2ZWwsIHRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGhpZ2hlc3Qgc3VwcG9ydGVkIHNlcnZsZXQgbGV2ZWwKLQkgKiBAcGFyYW0gajJlZUxldmVsCi0JICogQHJldHVybiB3ZWIgYXBwIHZlcnNpb24KLQkgKi8KLQlwdWJsaWMgc3RhdGljIEludGVnZXIgZ2V0U2VydmxldFZlcnNpb25Gb3JKMkVFVmVyc2lvbihTdHJpbmcgajJlZUxldmVsKXsKLQkJaW50IGFWZXJzaW9uID0gSW50ZWdlci52YWx1ZU9mKGoyZWVMZXZlbCkuaW50VmFsdWUoKTsKLQkJc3dpdGNoIChhVmVyc2lvbikgewotCQljYXNlIEoyRUVWZXJzaW9uQ29uc3RhbnRzLkoyRUVfMV8yX0lEOgotCQkJcmV0dXJuIG5ldyBJbnRlZ2VyKEoyRUVWZXJzaW9uQ29uc3RhbnRzLldFQl8yXzJfSUQpOwotCi0JCWNhc2UgSjJFRVZlcnNpb25Db25zdGFudHMuSjJFRV8xXzNfSUQ6Ci0JCQlyZXR1cm4gbmV3IEludGVnZXIoSjJFRVZlcnNpb25Db25zdGFudHMuV0VCXzJfM19JRCk7Ci0KLQkJY2FzZSBKMkVFVmVyc2lvbkNvbnN0YW50cy5KMkVFXzFfNF9JRDoKLQkJCXJldHVybiBuZXcgSW50ZWdlcihKMkVFVmVyc2lvbkNvbnN0YW50cy5XRUJfMl80X0lEKTsKLQkJCQotCQlkZWZhdWx0OgotCQkJcmV0dXJuIG5ldyBJbnRlZ2VyKEoyRUVWZXJzaW9uQ29uc3RhbnRzLldFQl8yXzNfSUQpOwotCQl9CQkKLQl9Ci0JCi0JLyoqCi0JICogR2l2ZW4gYSBKMkVFIGxldmVsLCB0aGlzIG1ldGhvZCByZXR1cm5zIHRoZSBoaWdoZXN0IHN1cHBvcnRlZCBFSkIgdmVyc2lvbgotCSAqIEBwYXJhbSBqMmVlTGV2ZWwKLQkgKiBAcmV0dXJuIGVqYiBzcGVjIHZlcnNpb24KLQkgKi8KLQlwdWJsaWMgc3RhdGljIEludGVnZXIgZ2V0RUpCVmVyc2lvbkZvckoyRUVWZXJzaW9uKFN0cmluZyBqMmVlTGV2ZWwpewotCQlpbnQgYVZlcnNpb24gPSBJbnRlZ2VyLnZhbHVlT2YoajJlZUxldmVsKS5pbnRWYWx1ZSgpOwotCQlzd2l0Y2ggKGFWZXJzaW9uKSB7Ci0JCWNhc2UgSjJFRVZlcnNpb25Db25zdGFudHMuSjJFRV8xXzJfSUQ6Ci0JCQlyZXR1cm4gbmV3IEludGVnZXIoSjJFRVZlcnNpb25Db25zdGFudHMuRUpCXzFfMV9JRCk7Ci0KLQkJY2FzZSBKMkVFVmVyc2lvbkNvbnN0YW50cy5KMkVFXzFfM19JRDoKLQkJCXJldHVybiBuZXcgSW50ZWdlcihKMkVFVmVyc2lvbkNvbnN0YW50cy5FSkJfMl8wX0lEKTsKLQotCQljYXNlIEoyRUVWZXJzaW9uQ29uc3RhbnRzLkoyRUVfMV80X0lEOgotCQkJcmV0dXJuIG5ldyBJbnRlZ2VyKEoyRUVWZXJzaW9uQ29uc3RhbnRzLkVKQl8yXzFfSUQpOwotCQkJCi0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gbmV3IEludGVnZXIoSjJFRVZlcnNpb25Db25zdGFudHMuRUpCXzJfMF9JRCk7Ci0JCX0JCQkKLQl9Ci0KLQkvKioKLQkgKiBUcnVlIGlmIHRoZSBjb21wb25lbnQgaXMgYSB2YWxpZCBKYXZhIGNvbXBvbmVudAotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0phdmFDb21wb25lbnQoSVByb2plY3QgcHJvamVjdCkgewotCSAgSVZpcnR1YWxDb21wb25lbnQgdmMgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLSAgICAgIGlmICh2YyAhPSBudWxsKQotICAgICAgewotCSAgICByZXR1cm4gaXNKYXZhQ29tcG9uZW50KHZjKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy9jaGVjayBpZiBpdCdzIGEgZmFjZXRlZCBwcm9qZWN0IHdpdGggb25seSB0aGUgSmF2YSBmYWNldC4KLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBpZiAocHJvamVjdC5leGlzdHMoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBJRmFjZXRlZFByb2plY3QgZlByb2plY3QgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5jcmVhdGUocHJvamVjdCk7Ci0gICAgICAgICAgICBpZiAoZlByb2plY3QgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU2V0IGZhY2V0cyA9IGZQcm9qZWN0LmdldFByb2plY3RGYWNldHMoKTsKLSAgICAgICAgICAgICAgaWYgKGZhY2V0cy5zaXplKCk9PTEpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBJUHJvamVjdEZhY2V0VmVyc2lvbiBwZnYgPSAoSVByb2plY3RGYWNldFZlcnNpb24pZmFjZXRzLml0ZXJhdG9yKCkubmV4dCgpOwotICAgICAgICAgICAgICAgIGlmIChwZnYuZ2V0UHJvamVjdEZhY2V0KCkuZ2V0SWQoKS5lcXVhbHMoSU1vZHVsZUNvbnN0YW50cy5KU1RfSkFWQSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvL1RoaXMgaXMgbm90IGEgZmFjZXRlZCBwcm9qZWN0LiBDaGVjayBpZiB0aGlzIGlzIGEgc2ltcGxlIEphdmEgcHJvamVjdC4gICAgCi0gICAgICAgICAgICAgIGlmIChSZXNvdXJjZVV0aWxzLmlzSmF2YVByb2plY3QocHJvamVjdCkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgfSAgICAgICAgCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKQotICAgICAgICB7Ci0gICAgICAgICAgCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgIH0KLSAgICAgIAotICAgICAgcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qKgotCSAqIFRydWUgaWYgdGhlIGNvbXBvbmVudCBpcyBhIHZhbGlkIFdlYiBjb21wb25lbnQKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNXZWJDb21wb25lbnQoSVByb2plY3QgcHJvamVjdCkgewotCSAgSVZpcnR1YWxDb21wb25lbnQgdmMgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLSAgICAgIGlmICh2YyAhPSBudWxsKQotICAgICAgewotICAgICAgICByZXR1cm4gaXNXZWJDb21wb25lbnQodmMpOyAgCi0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0JCi0JfQotCi0JLyoqCi0JICogVHJ1ZSBpZiB0aGUgY29tcG9uZW50IGlzIGEgdHJ1ZSBBcHBsaWNhdGlvbiBjbGllbnQgY29tcG9uZW50Ci0JICogQHBhcmFtIHByb2plY3QKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzQXBwQ2xpZW50Q29tcG9uZW50KElQcm9qZWN0IHByb2plY3QpIHsKLQkgIElWaXJ0dWFsQ29tcG9uZW50IHZjID0gQ29tcG9uZW50Q29yZS5jcmVhdGVDb21wb25lbnQocHJvamVjdCk7Ci0gICAgICBpZiAodmMgIT0gbnVsbCkKLSAgICAgIHsKLQkgIHJldHVybiBpc0FwcENsaWVudENvbXBvbmVudCh2Yyk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLQl9Ci0KLQkvKioKLQkgKiBUcnVlIGlzIHRoZSBjb21wb25lbnQgaXMgYSB2YWxpZCBFQVIgY29tcG9uZW50Ci0JICogQHBhcmFtIHByb2plY3QKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzRUFSQ29tcG9uZW50KElQcm9qZWN0IHByb2plY3QpewotCSAgSVZpcnR1YWxDb21wb25lbnQgdmMgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLSAgICAgIGlmICh2YyAhPSBudWxsKQotICAgICAgewotCSAgcmV0dXJuIGlzRUFSQ29tcG9uZW50KHZjKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotCX0KLQkKLQlwdWJsaWMgc3RhdGljIElGb2xkZXIgZ2V0T3V0cHV0Q29udGFpbmVyUm9vdCAoSVZpcnR1YWxDb21wb25lbnQgY29tcG9uZW50KSB7Ci0JCXJldHVybiAoSUZvbGRlcilKMkVFUHJvamVjdFV0aWxpdGllcy5nZXRPdXRwdXRDb250YWluZXJzKGNvbXBvbmVudC5nZXRQcm9qZWN0KCkpWzBdOwotCX0KLQkKLQkvLyAxOTQ0MzQgLSBDaGVjayBmb3Igbm9uLWV4aXN0aW5nIEVBUiB3aXRoIGNvbnRlbnRzIHRoYXQncyBub3QgZGVsZXRlZCBwcmV2aW91c2x5Ci0JcHVibGljIHN0YXRpYyBJU3RhdHVzIGNhbkNyZWF0ZUVBUihJUHJvamVjdCBlYXJQcm9qZWN0KQotICAgIHsKLQkJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCQlpZiggIWVhclByb2plY3QuZXhpc3RzKCkgKXsKLQkJCUlQYXRoIHBhdGggPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldExvY2F0aW9uKCk7Ci0JCQlwYXRoID0gcGF0aC5hcHBlbmQoZWFyUHJvamVjdC5nZXROYW1lKCkpOwotCQkJc3RhdHVzID0gUHJvamVjdENyZWF0aW9uRGF0YU1vZGVsUHJvdmlkZXJOZXcudmFsaWRhdGVFeGlzdGluZyhlYXJQcm9qZWN0LmdldE5hbWUoKSwgcGF0aC50b09TU3RyaW5nKCkpOwotCQl9Ci0JCXJldHVybiBzdGF0dXM7Ci0gICAgfQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vSmF2YU1PRlV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9KYXZhTU9GVXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQ1NWZkYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9KYXZhTU9GVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5uYXR1cmUuRU1GTmF0dXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS53b3JrYmVuY2gudXRpbGl0eS5KZW1Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkphdmFDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhUmVmRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0uamF2YS5KYXZhVmlzaWJpbGl0eUtpbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLmphdmEuTWV0aG9kOwotCi0vKioKLSogVGhpcyBjbGFzcyBjb250YWlucyBzb21lIHVzZWZ1bCB1dGlsaXRpZXMgZm9yIGRlYWxpbmcgd2l0aCB0aGUgSmF2YU1PRgotKi8KLQotcHVibGljIGZpbmFsIGNsYXNzIEphdmFNT0ZVdGlscwotewotIC8qKgotICAqIERldGVybWluZSB3aGV0aGVyIHRoaXMgY2xhc3Mgb2YgdGhlIGdpdmVuIG5hbWUgaXMgbG9hZGFibGUgaW4gdGhlIGdpdmVuCi0gICogcHJvamVjdC4KLSAgKiBAcGFyYW0gY2xhc3NOYW1lIFRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgY2xhc3MKLSAgKiBAcGFyYW0gcHJvamVjdCBUaGUgcHJvamVjdAotICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgY2xhc3MgaXMgbG9hZGFibGUgYW5kIG5vIGV4Y2VwdGlvbnMgYXJlIHRocm93bi4gCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0NsYXNzTG9hZGFibGUoU3RyaW5nIGNsYXNzTmFtZSwgSVByb2plY3QgcHJvamVjdCkgdGhyb3dzIENvcmVFeGNlcHRpb24KLSAgewotICAgCXJldHVybiBpc0NsYXNzTG9hZGFibGUoZ2V0SmF2YUNsYXNzKGNsYXNzTmFtZSxwcm9qZWN0KSk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNDbGFzc0xvYWRhYmxlKEphdmFDbGFzcyBqYXZhQ2xhc3MpCi0gIHsKLQlyZXR1cm4gamF2YUNsYXNzLmlzRXhpc3RpbmdUeXBlKCk7ICAgIAotICB9Ci0KLSAgLyoqCi0gICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBjbGFzcyBoYXMgYSBwdWJsaWMgY29uc3RydWN0b3IKLSAgKiB3aXRoIGFuIGVtcHR5IHBhcmFtZXRlciBsaXN0LgotICAqIEBwYXJhbSBjbGFzc05hbWUgVGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBjbGFzcwotICAqIEBwYXJhbSBwcm9qZWN0IFRoZSBwcm9qZWN0Ci0gICogQHJldHVybiBUcnVlIGlmIHRoZSBjbGFzcyBpcyBsb2FkYWJsZSBmcm9tIHRoZSBwcm9qZWN0IGFuZCB0aGUgCi0gICogICAgICAgICBjbGFzcyBoYXMgYSBwdWJsaWMgY29uc3RydWN0b3Igd2l0aCBhbiBlbXB0eSBwYXJhbWV0ZXIgbGlzdCAgCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBoYXNQdWJsaWNEZWZhdWx0Q3RvcihTdHJpbmcgY2xhc3NOYW1lLCBJUHJvamVjdCBwcm9qZWN0KSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotICB7Ci0gICAgcmV0dXJuIGhhc1B1YmxpY0RlZmF1bHRDdG9yKGdldEphdmFDbGFzcyhjbGFzc05hbWUsIHByb2plY3QpKTsKLSAgfQotCi0KLSBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaGFzUHVibGljRGVmYXVsdEN0b3IoSmF2YUNsYXNzIGphdmFDbGFzcykKLSAgewotICAgCi0gICAgTGlzdCBtZXRob2RMaXN0ID0gamF2YUNsYXNzLmdldE1ldGhvZHMoKTsKLSAgICBpZiAobWV0aG9kTGlzdD09bnVsbCkKLSAgICAgIHJldHVybiB0cnVlOwotCi0gICAgSXRlcmF0b3IgaU1ldGhvZHMgPSBtZXRob2RMaXN0Lml0ZXJhdG9yKCk7Ci0gICAgYm9vbGVhbiB1c2VyRGVmaW5lZEN0b3IgPSBmYWxzZTsKLSAgICB3aGlsZSAoaU1ldGhvZHMuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIE1ldGhvZCB0aGlzTWV0aG9kID0gKE1ldGhvZClpTWV0aG9kcy5uZXh0KCk7Ci0KLSAgICAgIGlmICh0aGlzTWV0aG9kLmlzQ29uc3RydWN0b3IoKSkKLSAgICAgIHsKLSAgICAgICAgdXNlckRlZmluZWRDdG9yID0gdHJ1ZTsgCi0KLSAgICAgICAgLy9TaW5jZSB0aGUgdXNlciBoYXMgZGVmaW5lZCBhIGN0b3IsIHRoZSBkZWZhdWx0IGN0b3IgaXMgbm8gbG9uZ2VyIGF2YWlsYWJsZS4KLSAgICAgICAgLy9XZSBtdXN0IGVuc3VyZSB0aGF0IHRoZSB1c2VyIGhhcyBwcm92aWRlZCBhIHB1YmxpYyBjdG9yIHdpdGggbm8gcGFyYW1ldGVycy4KLQotICAgICAgICAvL2NoZWNrIGlmIHB1YmxpYwotICAgICAgICBpZiAodGhpc01ldGhvZC5nZXRKYXZhVmlzaWJpbGl0eSgpLmdldFZhbHVlKCkgPT0gSmF2YVZpc2liaWxpdHlLaW5kLlBVQkxJQykKLSAgICAgICAgewotICAgICAgICAgIC8vc2VlIGlmIHBhcmFtZXRlciBsaXN0IGlzIGVtcHR5Ci0gICAgICAgICAgTGlzdCBwYXJhbUxpc3QgPSB0aGlzTWV0aG9kLmdldFBhcmFtZXRlcnMoKTsKLSAgICAgICAgICBpZiAocGFyYW1MaXN0LmlzRW1wdHkoKSApCi0gICAgICAgICAgewotCSAgICAgICAgcmV0dXJuIHRydWU7ICAgICAgICAgICAgIAotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgfQotCi0gICAgaWYgKHVzZXJEZWZpbmVkQ3RvcikKLSAgICB7Ci0JICByZXR1cm4gZmFsc2U7IC8vaWYgdGhlIHVzZXIgZGVmaW5lZCBhIGN0b3IgYW5kIHdlIHN0aWxsIGhhdmVuJ3QKLQkgIAkgICAgICAgICAgICAvL3JldHVybmVkIHRydWUsIG5vbmUgb2YgdGhlbSB3ZXJlIHB1YmxpYyB3aXRoIG5vIHBhcmFtZXRlcnMuCi0gICAgfQotICAgIGVsc2UKLSAgICB7IAotICAgICAgIHJldHVybiB0cnVlOyAgICAKLSAgICB9Ci0KLSAgfQotICAvKioKLSAgKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgc3BlY2lmaWVkIGNsYXNzIGltcGxlbWVudHMgdGhlIHNwZWNpZmllZCBpbnRlcmZhY2UuCi0gICogQHBhcmFtIGNsYXNzTmFtZSBUaGUgZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIGNsYXNzCi0gICogQHBhcmFtIGludGVyZmFjZU5hbWUgVGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBpbnRlcmZhY2UKLSAgKiBAcGFyYW0gcHJvamVjdCBUaGUgcHJvamVjdAotICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgY2xhc3MgYW5kIGludGVyZmFjZSBhcmUgbG9hZGFibGUgZnJvbSB0aGUgcHJvamVjdCBhbmQKLSAgKiAgICAgICAgIHRoZSBjbGFzcyBpbXBsZW1lbnRzIHRoZSBpbnRlcmZhY2UuCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpbXBsZW1lbnRzSW50ZXJmYWNlKFN0cmluZyBjbGFzc05hbWUsIFN0cmluZyBpbnRlcmZhY2VOYW1lLCBJUHJvamVjdCBwcm9qZWN0KQotICAJCQl0aHJvd3MgQ29yZUV4Y2VwdGlvbgotICB7Ci0gICByZXR1cm4gaW1wbGVtZW50c0ludGVyZmFjZShnZXRKYXZhQ2xhc3MoY2xhc3NOYW1lLCBwcm9qZWN0KSwgZ2V0SmF2YUNsYXNzKGludGVyZmFjZU5hbWUsIHByb2plY3QpKTsKLSAgfQotCi1wdWJsaWMgc3RhdGljIGJvb2xlYW4gaW1wbGVtZW50c0ludGVyZmFjZShKYXZhQ2xhc3MgamF2YUNsYXNzLCBKYXZhQ2xhc3MgaW50ZXJmYWNlQ2xhc3MpCi0gIHsKLSAgIAotICAgIGlmICghamF2YUNsYXNzLmlzRXhpc3RpbmdUeXBlKCkpICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWludGVyZmFjZUNsYXNzLmlzRXhpc3RpbmdUeXBlKCkpICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgIHJldHVybiBqYXZhQ2xhc3MuaW1wbGVtZW50c0ludGVyZmFjZShpbnRlcmZhY2VDbGFzcyk7Ci0gIH0KLQotICAvKioKLSAgKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgc3BlY2lmaWVkIGNsYXNzIGV4dGVuZHMgdGhlIHNwZWNpZmllZCBzdXBlcmNsYXNzCi0gICogQHBhcmFtIGNsYXNzTmFtZSBUaGUgZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIGNsYXNzCi0gICogQHBhcmFtIHN1cGVyQ2xhc3NOYW1lIFRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgc3VwZXJjbGFzcwotICAqIEBwYXJhbSBwcm9qZWN0IFRoZSBwcm9qZWN0Ci0gICogQHJldHVybiBUcnVlIGlmIHRoZSBjbGFzcyBhbmQgc3VwZXJDbGFzcyBhcmUgbG9hZGFibGUgZnJvbSB0aGUgcHJvamVjdCBhbmQKLSAgKiAgICAgICAgIHRoZSBjbGFzcyBleHRlbmRzIHRoZSBzdXBlckNsYXNzCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBleHRlbmRzQ2xhc3MoU3RyaW5nIGNsYXNzTmFtZSwgU3RyaW5nIHN1cGVyQ2xhc3NOYW1lLCBJUHJvamVjdCBwcm9qZWN0KQotICAgICAgICAgdGhyb3dzIENvcmVFeGNlcHRpb24KLSAgewotICAgIHJldHVybiBleHRlbmRzQ2xhc3MoZ2V0SmF2YUNsYXNzKGNsYXNzTmFtZSxwcm9qZWN0KSwgZ2V0SmF2YUNsYXNzKHN1cGVyQ2xhc3NOYW1lLCBwcm9qZWN0KSk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZXh0ZW5kc0NsYXNzKEphdmFDbGFzcyBqYXZhQ2xhc3MsIEphdmFDbGFzcyBzdXBlckNsYXNzKQotICB7Ci0gICAgcmV0dXJuIHN1cGVyQ2xhc3MuaXNBc3NpZ25hYmxlRnJvbShqYXZhQ2xhc3MpOwotICB9Ci0KLSAgLyoqCi0gICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBjbGFzcyBpcyBhY3R1YWxseSBhbiBpbnRlcmZhY2UKLSAgKiBAcGFyYW0gY2xhc3NOYW1lIFRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgY2xhc3MKLSAgKiBAcGFyYW0gcHJvamVjdCBUaGUgcHJvamVjdAotICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgY2xhc3MgaXMgbG9hZGFibGUgZnJvbSB0aGUgcHJvamVjdCBhbmQgaXMgCi0gICogICAgICAgICBhY3R1YWxseSBhbiBpbnRlcmZhY2UKLSAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzSW50ZXJmYWNlKFN0cmluZyBjbGFzc05hbWUsIElQcm9qZWN0IHByb2plY3QpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0gIHsKLSAgICAgcmV0dXJuIGlzSW50ZXJmYWNlKGdldEphdmFDbGFzcyhjbGFzc05hbWUsIHByb2plY3QpKTsKLSAgfQotCi0gcHVibGljIHN0YXRpYyBib29sZWFuIGlzSW50ZXJmYWNlKEphdmFDbGFzcyBqYXZhQ2xhc3MpCi0gIHsKLSAgICAgIHJldHVybiBqYXZhQ2xhc3MuaXNJbnRlcmZhY2UoKTsKLSAgfQotIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBoYXNBYnN0cmFjdE1ldGhvZHMgKFN0cmluZyBjbGFzc05hbWUsIElQcm9qZWN0IHByb2plY3QpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0gCXsKLQkgICAgcmV0dXJuIGhhc0Fic3RyYWN0TWV0aG9kcyhnZXRKYXZhQ2xhc3MoY2xhc3NOYW1lLCBwcm9qZWN0KSk7Ci0gIAl9Ci0KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGhhc0Fic3RyYWN0TWV0aG9kcyAoSmF2YUNsYXNzIGphdmFDbGFzcykKLSAJewotCSAgIExpc3QgbWV0aG9kTGlzdCA9IGphdmFDbGFzcy5nZXRNZXRob2RzKCk7Ci0gICAgICAgaWYgKG1ldGhvZExpc3Q9PW51bGwpCi0gICAgICAJcmV0dXJuIGZhbHNlOwotCi0JICAgSXRlcmF0b3IgaU1ldGhvZHMgPSBtZXRob2RMaXN0Lml0ZXJhdG9yKCk7Ci0JICAgd2hpbGUgKGlNZXRob2RzLmhhc05leHQoKSkKLSAgICAJewotICAgICAgCQlNZXRob2QgdGhpc01ldGhvZCA9IChNZXRob2QpaU1ldGhvZHMubmV4dCgpOwotCQkJaWYgKCB0aGlzTWV0aG9kLmlzQWJzdHJhY3QoKSkgcmV0dXJuIHRydWU7Ci0JICAgCX0KLQkJcmV0dXJuIGZhbHNlOwotIAl9Ci0KLSAgLyogCi0gICAqIAotICAgKi8KLSAvKioKLSAqIEBwYXJhbSBjbGFzc1FOYW1lIEZ1bGx5IHF1YWxpZmllZCBjbGFzc25hbWUgKHBhY2thZ2VOYW1lICsgdHlwZU5hbWUpCi0gKiBAcGFyYW0gcHJvamVjdAotICogQHJldHVybgotICogQHRocm93cyBDb3JlRXhjZXB0aW9uCi0gKi8KLXB1YmxpYyBzdGF0aWMgSmF2YUNsYXNzIGdldEphdmFDbGFzcyhTdHJpbmcgY2xhc3NRTmFtZSAsIElQcm9qZWN0IHByb2plY3QpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0gCXsKLQkgCUVNRk5hdHVyZSBqTU9GID0gSmVtUHJvamVjdFV0aWxpdGllcy5nZXRKRU1fRU1GX05hdHVyZShwcm9qZWN0LCB0cnVlKTsKLQkgCXJldHVybiAoSmF2YUNsYXNzKUphdmFSZWZGYWN0b3J5LmVJTlNUQU5DRS5yZWZsZWN0VHlwZShjbGFzc1FOYW1lLGpNT0YuZ2V0UmVzb3VyY2VTZXQoKSk7Ci0gCX0KLSAKLSAvKioKLSAqIEBwYXJhbSBwYWNrYWdlTmFtZQotICogQHBhcmFtIHR5cGVOYW1lCi0gKiBAcGFyYW0gcHJvamVjdAotICogQHJldHVybgotICogQHRocm93cyBDb3JlRXhjZXB0aW9uCi0gKi8KLXB1YmxpYyBzdGF0aWMgSmF2YUNsYXNzIGdldEphdmFDbGFzcyhTdHJpbmcgcGFja2FnZU5hbWUsIFN0cmluZyB0eXBlTmFtZSAsIElQcm9qZWN0IHByb2plY3QpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCSAJRU1GTmF0dXJlIGpNT0YgPSBKZW1Qcm9qZWN0VXRpbGl0aWVzLmdldEpFTV9FTUZfTmF0dXJlKHByb2plY3QsIHRydWUpOwotCSAJcmV0dXJuIChKYXZhQ2xhc3MpSmF2YVJlZkZhY3RvcnkuZUlOU1RBTkNFLnJlZmxlY3RUeXBlKHBhY2thZ2VOYW1lLCB0eXBlTmFtZSwgak1PRi5nZXRSZXNvdXJjZVNldCgpKTsKLQl9Ci0KLSBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNWYWxpZFNFSUZpbGUoSmF2YUNsYXNzIGJlYW5DbGFzcywgSmF2YUNsYXNzIHNlaUNsYXNzKQotIAl7Ci0gCQlpZiAoIXNlaUNsYXNzLmlzSW50ZXJmYWNlKCkpCi0gCQkJcmV0dXJuIGZhbHNlOwotCi0JCVZlY3RvciBiZWFuTWV0aG9kc0xpc3QgPSBuZXcgVmVjdG9yKCk7Ci0gCQlMaXN0IGJlYW5NZXRob2RzID0gYmVhbkNsYXNzLmdldE1ldGhvZHMoKTsKLQkJSXRlcmF0b3IgYmVhbk1ldGhvZHNJdGVyYXRvciA9IGJlYW5NZXRob2RzLml0ZXJhdG9yKCk7Ci0JICAgCXdoaWxlIChiZWFuTWV0aG9kc0l0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAJewotICAgICAgCQlNZXRob2QgdGhpc01ldGhvZCA9IChNZXRob2QpYmVhbk1ldGhvZHNJdGVyYXRvci5uZXh0KCk7Ci0JCQliZWFuTWV0aG9kc0xpc3QuYWRkKHRoaXNNZXRob2QuZ2V0TWV0aG9kRWxlbWVudFNpZ25hdHVyZSgpKTsKLQkgICAJfQotCi0JCUxpc3Qgc2VpTWV0aG9kcyA9IHNlaUNsYXNzLmdldE1ldGhvZHMoKTsKLSAJCWlmIChiZWFuTWV0aG9kcyA9PSBudWxsICkgewotIAkJCWlmICggc2VpTWV0aG9kcyA9PSBudWxsKSByZXR1cm4gdHJ1ZTsKLSAJCQllbHNlCXJldHVybiBmYWxzZTsKLSAJCX0KLQkJaWYgKHNlaU1ldGhvZHMgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwotCi0JCUl0ZXJhdG9yIHNlaU1ldGhvZHNJdGVyYXRvciA9IHNlaU1ldGhvZHMuaXRlcmF0b3IoKTsKLQkgICAJd2hpbGUgKHNlaU1ldGhvZHNJdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgCXsKLSAgICAgIAkJTWV0aG9kIHRoaXNNZXRob2QgPSAoTWV0aG9kKXNlaU1ldGhvZHNJdGVyYXRvci5uZXh0KCk7Ci0JCQlpZiAoICFiZWFuTWV0aG9kc0xpc3QuY29udGFpbnModGhpc01ldGhvZC5nZXRNZXRob2RFbGVtZW50U2lnbmF0dXJlKCkpKSB7Ci0JCQkJcmV0dXJuIGZhbHNlOwotCQkJfQotCSAgIAl9Ci0JCXJldHVybiB0cnVlOwotIAkJCi0gCX0KLSAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL1Jlc291cmNlVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL1Jlc291cmNlVXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjUwYWY1YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9SZXNvdXJjZVV0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODkwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMzMCAgIDEyNDY2NyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA0MjEgICAxMzY3NjEgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDQyNCAgIDExNTY5MCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDYwNTAzICAgMTI2ODE5IHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb247Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS5uZXQuVVJMRW5jb2RlcjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlUm9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JQ2xhc3NwYXRoRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklKYXZhUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JUGFja2FnZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklQYWNrYWdlRnJhZ21lbnRSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb252ZW50aW9uczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhTW9kZWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmFwcGxpY2F0aW9uY2xpZW50LmNvbXBvbmVudGNvcmUudXRpbC5BcHBDbGllbnRBcnRpZmFjdEVkaXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuY29tcG9uZW50Y29yZS51dGlsLkVBUkFydGlmYWN0RWRpdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5lamIuRW50ZXJwcmlzZUJlYW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuZWpiLmNvbXBvbmVudGNvcmUudXRpbC5FSkJBcnRpZmFjdEVkaXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuaW50ZXJuYWwucHJvamVjdC5KMkVFUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwucGx1Z2luLldlYlNlcnZpY2VQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLkNvbXBvbmVudENvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLmludGVybmFsLlN0cnVjdHVyZUVkaXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLmludGVybmFsLldvcmtiZW5jaENvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUucmVzb3VyY2VzLklWaXJ0dWFsQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5yZXNvdXJjZXMuSVZpcnR1YWxGb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLnJlc291cmNlcy5JVmlydHVhbFJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuRW52aXJvbm1lbnRTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSU1vZHVsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuU2VydmVyVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUubW9kZWwuSVVSTFByb3ZpZGVyOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgY29udGFpbnMgdXNlZnVsIG1ldGhvZHMgZm9yIHdvcmtpbmcgd2l0aCBFY2xpcHNlIHJlc291cmNlcy4KLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIFJlc291cmNlVXRpbHMgewotCi0JLy8gS2VlcHMgdGhlIElXb3Jrc3BhY2VSb290IGhhbmdpbmcgYXJvdW5kLiBTZWUgZ2V0V29ya3NwYWNlUm9vdCgpLgotCXByaXZhdGUgc3RhdGljIElXb3Jrc3BhY2VSb290IHJvb3RfID0gbnVsbDsKLQotCS8vIEtlZXBzIHRoZSBJV29ya3NwYWNlIGhhbmdpbmcgYXJvdW5kLiBTZWUgZ2V0V29ya3NwYWNlKCkuCi0KLQlwcml2YXRlIHN0YXRpYyBJV29ya3NwYWNlIHdvcmtzcGFjZV8gPSBudWxsOwotCi0JLyoqCi0JICogQXMgcmV0dXJuZWQgYnkge0BsaW5rICNnZXRQcm9qZWN0VHlwZSBnZXRQcm9qZWN0VHlwZSgpfSwgaW5kaWNhdGVzIHRoYXQKLQkgKiB0aGUgZ2l2ZW4gcHJvamVjdCBoYXMgbm8gSmF2YSBvciBXZWIgbmF0dXJlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgYnl0ZSBQUk9KRUNUX1RZUEVfTk9ORSA9IDA7Ci0KLQkvKioKLQkgKiBBcyByZXR1cm5lZCBieSB7QGxpbmsgI2dldFByb2plY3RUeXBlIGdldFByb2plY3RUeXBlKCl9LCBpbmRpY2F0ZXMgdGhhdAotCSAqIHRoZSBnaXZlbiBwcm9qZWN0IGhhcyBhIEphdmEgcHJvamVjdCBuYXR1cmUuCi0JICovCi0JcHVibGljIHN0YXRpYyBieXRlIFBST0pFQ1RfVFlQRV9KQVZBID0gMTsKLQotCS8qKgotCSAqIEFzIHJldHVybmVkIGJ5IHtAbGluayAjZ2V0UHJvamVjdFR5cGUgZ2V0UHJvamVjdFR5cGUoKX0sIGluZGljYXRlcyB0aGF0Ci0JICogdGhlIGdpdmVuIHByb2plY3QgaGFzIGEgV2ViIHByb2plY3QgbmF0dXJlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgYnl0ZSBQUk9KRUNUX1RZUEVfV0VCID0gMjsKLQotCS8qKgotCSAqIEFzIHJldHVybmVkIGJ5IHtAbGluayAjZ2V0UHJvamVjdFR5cGUgZ2V0UHJvamVjdFR5cGUoKX0sIGluZGljYXRlcyB0aGF0Ci0JICogdGhlIGdpdmVuIHByb2plY3QgaGFzIGFuIEVKQiBwcm9qZWN0IG5hdHVyZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJ5dGUgUFJPSkVDVF9UWVBFX0VKQiA9IDQ7Ci0JCi0JLyoqCi0JICogQXMgcmV0dXJuZWQgYnkge0BsaW5rICNnZXRQcm9qZWN0VHlwZSBnZXRQcm9qZWN0VHlwZSgpfSwgaW5kaWNhdGVzIHRoYXQKLQkgKiB0aGUgZ2l2ZW4gcHJvamVjdCBoYXMgYW4gQXBwbGljYXRpb24gY2xpZW50IHByb2plY3QgbmF0dXJlLgotCSAqLwkKLQlwdWJsaWMgc3RhdGljIGJ5dGUgUFJPSkVDVF9UWVBFX0FQUENMSUVOVCA9IDg7Ci0KLQkvKioKLQkgKiBUaGUgU09BUCBycGNyb3V0ZXIgc2VydmxldCBleHRlbnNpb24gdG8gYmUgYWRkZWQgdG8gd2ViIHByb2plY3QgVVJMCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgU0VSVkxFVF9FWFQgPSAiL3NlcnZsZXQvcnBjcm91dGVyIjsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX0NMSUVOVF9XRUJfUFJPSkVDVF9FWFQgPSAiQ2xpZW50IjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9DTElFTlRfRUpCX1BST0pFQ1RfRVhUID0gIkVKQkNsaWVudCI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfRUpCX1BST0pFQ1RfTkFNRSA9ICJXZWJTZXJ2aWNlRUpCUHJvamVjdCI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfRUpCX0NPTVBPTkVOVF9OQU1FID0gIldlYlNlcnZpY2VFSkIiOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX1dFQl9QUk9KRUNUX05BTUUgPSAiV2ViU2VydmljZVByb2plY3QiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX1dFQl9DT01QT05FTlRfTkFNRSA9ICJXZWJTZXJ2aWNlUHJvamVjdCI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfUk9VVEVSX1BST0pFQ1RfRVhUID0gIlJvdXRlciI7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9TRVJWSUNFX0VBUl9QUk9KRUNUX05BTUUgPSAiV2ViU2VydmljZVByb2plY3RFQVIiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX1NFUlZJQ0VfRUFSX0NPTVBPTkVOVF9OQU1FID0gIldlYlNlcnZpY2VQcm9qZWN0RUFSIjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9DTElFTlRfRUFSX1BST0pFQ1RfTkFNRSA9ICJXZWJTZXJ2aWNlUHJvamVjdENsaWVudEVBUiI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfQ0xJRU5UX0VBUl9DT01QT05FTlRfTkFNRSA9ICJXZWJTZXJ2aWNlUHJvamVjdENsaWVudEVBUiI7Ci0gICAgCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfRUFSX0VYVCA9ICJFQVIiOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgSVdvcmtzcGFjZVJvb3Qgb2JqZWN0LgotCSAqIEByZXR1cm4gVGhlIElXb3Jrc3BhY2VSb290IG9iamVjdC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElXb3Jrc3BhY2VSb290IGdldFdvcmtzcGFjZVJvb3QoKSB7Ci0JCWlmIChyb290XyA9PSBudWxsKSB7Ci0JCQlyb290XyA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7Ci0JCX0KLQkJcmV0dXJuIHJvb3RfOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIElXb3Jrc3BhY2Ugb2JqZWN0LgotCSAqIEByZXR1cm4gVGhlIElXb3Jrc3BhY2Ugb2JqZWN0LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVdvcmtzcGFjZSBnZXRXb3Jrc3BhY2UoKSB7Ci0JCWlmICh3b3Jrc3BhY2VfID09IG51bGwpIHsKLQkJCWlmIChyb290XyA9PSBudWxsKSB7Ci0JCQkJcm9vdF8gPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotCQkJfQotCQkJd29ya3NwYWNlXyA9IHJvb3RfLmdldFdvcmtzcGFjZSgpOwotCQl9Ci0JCXJldHVybiB3b3Jrc3BhY2VfOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgYW4ge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZSBJUmVzb3VyY2V9b2YgdGhlCi0JICogZ2l2ZW4gYWJzb2x1dGUgcGF0aG5hbWUgb3IgbnVsbCBpZiBubyBzdWNoIHJlc291cmNlIGV4aXN0cy4KLQkgKiAKLQkgKiBAcGFyYW0gYWJzb2x1dGVQYXRobmFtZQotCSAqICAgICAgICAgICAgVGhlIGFic29sdXRlIHBhdGggb2YgdGhlIHJlc291cmNlLgotCSAqIEByZXR1cm4gVGhlIDxjb2RlPklSZXNvdXJjZTwvY29kZT4uCi0JICovCi0JcHVibGljIHN0YXRpYyBJUmVzb3VyY2UgZmluZFJlc291cmNlKFN0cmluZyBhYnNvbHV0ZVBhdGhuYW1lKSB7Ci0JCWlmIChhYnNvbHV0ZVBhdGhuYW1lID09IG51bGwpIHsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0JCXJldHVybiBmaW5kUmVzb3VyY2UobmV3IFBhdGgoYWJzb2x1dGVQYXRobmFtZSkpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgYW4ge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZSBJUmVzb3VyY2V9b2YgdGhlCi0JICogZ2l2ZW4gYWJzb2x1dGUgcGF0aCBvciBudWxsIGlmIG5vIHN1Y2ggcmVzb3VyY2UgZXhpc3RzLgotCSAqIAotCSAqIEBwYXJhbSBhYnNvbHV0ZVBhdGgKLQkgKiAgICAgICAgICAgIFRoZSBhYnNvbHV0ZSA8Y29kZT5JUGF0aDwvY29kZT4gb2YgdGhlIHJlc291cmNlLgotCSAqIEByZXR1cm4gVGhlIDxjb2RlPklSZXNvdXJjZTwvY29kZT4uCi0JICovCi0JcHVibGljIHN0YXRpYyBJUmVzb3VyY2UgZmluZFJlc291cmNlKElQYXRoIGFic29sdXRlUGF0aCkgewotCQlpZiAoYWJzb2x1dGVQYXRoID09IG51bGwpIHsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0JCXJldHVybiBSZXNvdXJjZVV0aWxzLmdldFdvcmtzcGFjZVJvb3QoKS5maW5kTWVtYmVyKGFic29sdXRlUGF0aCk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyBhbiB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlIElSZXNvdXJjZX1vZiB0aGUKLQkgKiBnaXZlbiBmaWxlIHN5c3RlbSByZWxhdGl2ZSBwYXRobmFtZSBhbmQgcHJvamVjdCBvciBudWxsIGlmIG5vIHN1Y2ggcmVzb3VyY2UgZXhpc3RzLgotCSAqCi0JICogQHBhcmFtIGZpbGVQYXRoIEZpbGUgc3lzdGVtIHJlbGF0aXZlIHBhdGhuYW1lCi0JICogQHBhcmFtIHByb2plY3QgUHJvamVjdAotCSAqIEByZXR1cm4gVGhlIDxjb2RlPklSZXNvdXJjZTwvY29kZT4uCi0JICovCi0JcHVibGljIHN0YXRpYyBJUmVzb3VyY2UgZmluZFJlc291cmNlQXRMb2NhdGlvbihTdHJpbmcgZmlsZVBhdGgsIElQcm9qZWN0IHByb2plY3QpIHsKLQkJCi0JCXJldHVybiBmaW5kUmVzb3VyY2UoZmluZFBhdGhBdExvY2F0aW9uKCBuZXcgUGF0aChmaWxlUGF0aCksIHByb2plY3QpKTsKLQl9Ci0JCi0JLyoqCi0JICogVGhpcyBtZXRob2QgYXR0ZW1wdHMgdG8gY29udmVydCBhIHBhdGggdGhhdCBpcyByZWxhdGl2ZSB0byBhIGZpbGUgc3lzdGVtCi0JICogdG8gYSBwYXRoIHRoYXQgaXMgcmVsYXRpdmUgdG8gdGhlIHdvcmtzcGFjZS4gSW5zdGVhZCBvZiBjb21wYXJpbmcgdGhlCi0JICogZmlsZVBhdGggd2l0aCB0aGUgaW5zdGFsbCBsb2NhdGlvbiBvZiB0aGUgd29ya3NwYWNlIChpLmUuCi0JICogUGxhdGZvcm0uZ2V0TG9jYXRpb24oKSksIHRoZSBmaWxlUGF0aCBpcyBjb21wYXJlZCB3aXRoIHRoZSBsb2NhdGlvbiBvZiB0aGUgcHJvamVjdAotCSAqIHNpbmNlIHRoZSBwcm9qZWN0IGNvdWxkIGJlIGluIGEgbG9jYXRpb24gb3RoZXIgdGhhbiB0aGUgdGhlIGRlZmF1bHQgbG9jYXRpb24gcmVsYXRpdmUgdG8gdGhlCi0JICogd29ya3NwYWNlLgotCSAqIAotCSAqIEBwYXJhbSBmaWxlUGF0aAlGaWxlIHBhdGggcmVsYXRpdmUgdG8gYSBmaWxlIHN5c3RlbQotCSAqIEBwYXJhbSBwcm9qZWN0CVRoZSBwcm9qZWN0IHRoZSBmaWxlIGlzIGluCi0JICogQHJldHVybiAJCQlQYXRoIHJlbGF0aXZlIHRvIHRoZSB3b3Jrc3BhY2UKLQkgKi8KLQlwdWJsaWMgc3RhdGljIElQYXRoIGZpbmRQYXRoQXRMb2NhdGlvbihJUGF0aCBmaWxlUGF0aCwgSVByb2plY3QgcHJvamVjdCkgewotCQlJUGF0aCByZXN1bHQgPSBudWxsOwotCi0JCUlQYXRoIHByb2plY3RMb2NhdGlvbiA9IHByb2plY3QuZ2V0TG9jYXRpb24oKTsKLQotCQlpZiAocHJvamVjdExvY2F0aW9uLm1hdGNoaW5nRmlyc3RTZWdtZW50cyhmaWxlUGF0aCkgPT0gcHJvamVjdExvY2F0aW9uCi0JCQkJLnNlZ21lbnRDb3VudCgpKSB7Ci0JCQlmaWxlUGF0aCA9IGZpbGVQYXRoLnJlbW92ZUZpcnN0U2VnbWVudHMocHJvamVjdExvY2F0aW9uCi0JCQkJCS5zZWdtZW50Q291bnQoKSAtIDEpOwotCQkJcmVzdWx0ID0gZmlsZVBhdGguc2V0RGV2aWNlKG51bGwpOwotCQl9Ci0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0JLyoqCi0JICogVmFsaWRhdGVzIHRoZSBnaXZlbiBzdHJpbmcgYXMgYSBuYW1lIGZvciBhIHJlc291cmNlIG9mIHRoZSBnaXZlbiB0eXBlKHMpLgotCSAqIFRoaXMgbWV0aG9kIG9iZXlzIHRoZSBjb250cmFjdCBvZgotCSAqIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlI3ZhbGlkYXRlTmFtZSBJV29ya3NwYWNlLnZhbGlkYXRlTmFtZSgpfS4KLQkgKiAKLQkgKiBAcGFyYW0gc2VnbWVudAotCSAqICAgICAgICAgICAgVGhlIHBhdGggdG8gdmFsaWRhdGUuCi0JICogQHBhcmFtIHR5cGVNYXNrCi0JICogICAgICAgICAgICBUaGUgPGNvZGU+SVJlc291cmNlPC9jb2RlPiB0eXBlIG9yIHR5cGVzLgotCSAqIEByZXR1cm4gVGhlIHN0YXR1cyB3aXRoIGEgdmFsdWUgaWYgPGNvZGU+SVN0YXR1cy5PSzwvY29kZT4gaWYgdGhlIHBhdGgKLQkgKiAgICAgICAgIGlzIHZhbGlkLCBvciB3aXRoIGFwcHJvcHJpYXRlIHNldmVyaXR5IGFuZCBtZXNzYWdlIGluZm9ybWF0aW9uIGlmCi0JICogICAgICAgICB0aGUgcGF0aCBpcyBub3QgdmFsaWQuCi0JICogICAgICAgICAKLQkgKiBAZGVwcmVjYXRlZCBub3QgdXNlZCAgICAgICAgIAotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVN0YXR1cyB2YWxpZGF0ZU5hbWUoU3RyaW5nIHNlZ21lbnQsIGludCB0eXBlTWFzaykgewotCQlyZXR1cm4gZ2V0V29ya3NwYWNlKCkudmFsaWRhdGVOYW1lKHNlZ21lbnQsIHR5cGVNYXNrKTsKLQl9Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZXMgdGhlIGdpdmVuIHN0cmluZyBhcyB0aGUgcGF0aCBvZiBhIHJlc291cmNlIG9mIHRoZSBnaXZlbgotCSAqIHR5cGUocykuIFRoaXMgbWV0aG9kIG9iZXlzIHRoZSBjb250cmFjdCBvZgotCSAqIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlI3ZhbGlkYXRlUGF0aCBJV29ya3NwYWNlLnZhbGlkYXRlUGF0aCgpfS4KLQkgKiAKLQkgKiBAcGFyYW0gcGF0aAotCSAqICAgICAgICAgICAgVGhlIHBhdGggdG8gdmFsaWRhdGUuCi0JICogQHBhcmFtIHR5cGVNYXNrCi0JICogICAgICAgICAgICBUaGUgPGNvZGU+SVJlc291cmNlPC9jb2RlPiB0eXBlIG9yIHR5cGVzLgotCSAqIEByZXR1cm4gVGhlIHN0YXR1cyB3aXRoIGEgdmFsdWUgaWYgPGNvZGU+SVN0YXR1cy5PSzwvY29kZT4gaWYgdGhlIHBhdGgKLQkgKiAgICAgICAgIGlzIHZhbGlkLCBvciB3aXRoIGFwcHJvcHJpYXRlIHNldmVyaXR5IGFuZCBtZXNzYWdlIGluZm9ybWF0aW9uIGlmCi0JICogICAgICAgICB0aGUgcGF0aCBpcyBub3QgdmFsaWQuCi0JICogQGRlcHJlY2F0ZWQgbm90IHVzZWQgCi0JICovCi0JcHVibGljIHN0YXRpYyBJU3RhdHVzIHZhbGlkYXRlUGF0aChTdHJpbmcgcGF0aCwgaW50IHR5cGVNYXNrKSB7Ci0JCXJldHVybiBnZXRXb3Jrc3BhY2UoKS52YWxpZGF0ZVBhdGgocGF0aCwgdHlwZU1hc2spOwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlcyB0aGUgZ2l2ZW4gSmF2YSB0eXBlIG5hbWUuCi0JICogCi0JICogQHBhcmFtIHR5cGVOYW1lCi0JICogICAgICAgICAgICBUaGUgSmF2YSB0eXBlIG5hbWUuCi0JICogQHJldHVybiBUaGUgc3RhdHVzIHdpdGggYSB2YWx1ZSBvZiA8Y29kZT5JU3RhdHVzLk9LPC9jb2RlPiBpZiB0aGUgbmFtZQotCSAqICAgICAgICAgaXMgdmFsaWQsIG9yIHdpdGggYXBwcm9wcmlhdGUgc2V2ZXJpdHkgYW5kIG1lc3NhZ2UgaW5mb3JtYXRpb24gaWYKLQkgKiAgICAgICAgIG5hbWUgaXMgbm90IHZhbGlkLiBUaGUgcHJpbWl0aXZlIHR5cGVzIChib29sZWFuLCBjaGFyLCBieXRlLAotCSAqICAgICAgICAgc2hvcnQsIGludCwgbG9uZywgZmxvYXQsIGRvdWJsZSkgYXJlIHZhbGlkLiBBcnJheXMgb2YgdmFsaWQgdHlwZXMKLQkgKiAgICAgICAgIGFyZSB0aGVtc2VsdmVzIHZhbGlkLgotCSAqIEBkZXByZWNhdGVkIHVzZSBKYXZhQ29udmVudGlvbnMgaW4gdGhlIGpkdCBjb3JlIAotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVN0YXR1cyB2YWxpZGF0ZUphdmFUeXBlTmFtZShTdHJpbmcgdHlwZU5hbWUpIHsKLQkJLy8KLQkJLy8gU3RyaXAgb2ZmIHRoZSB0cmFpbGluZyBhcnJheSBiaXRzLCBpZiBhbnkuCi0JCS8vCi0JCWludCBhID0gdHlwZU5hbWUuaW5kZXhPZignWycpOwotCQlpZiAoYSA+IDApIHsKLQkJCXR5cGVOYW1lID0gdHlwZU5hbWUuc3Vic3RyaW5nKDAsIGEpOwotCQl9Ci0JCS8vCi0JCS8vIEFsbG93IHByaW1pdGl2ZXMuCi0JCS8vCi0JCWlmIChpc1ByaW1pdGl2ZUphdmFUeXBlKHR5cGVOYW1lKSkgewotCQkJcmV0dXJuIG5ldyBTdGF0dXMoSVN0YXR1cy5PSywgV2ViU2VydmljZVBsdWdpbi5JRCwgMCwgIiIsIG51bGwpOwotCQl9Ci0JCS8vCi0JCS8vIERlZmVyIHRvIEphdmFDb252ZW50aW9ucy4KLQkJLy8KLQkJcmV0dXJuIEphdmFDb252ZW50aW9ucy52YWxpZGF0ZUphdmFUeXBlTmFtZSh0eXBlTmFtZSk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiA8Y29kZT50eXBlTmFtZTwvY29kZT4gaXMgYSBKYXZhIHByaW1pdGl2ZQotCSAqIChib29sZWFuLCBjaGFyLCBieXRlLCBzaG9ydCwgaW50LCBsb25nLCBmbG9hdCwgZG91YmxlKS4KLQkgKiAKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHR5cGUgbmFtZSBpcyBhIEphdmEgcHJpbWl0aXZlLgotCSAqIAotCSAqIEBkZXByZWNhdGVkCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzUHJpbWl0aXZlSmF2YVR5cGUoU3RyaW5nIHR5cGVOYW1lKSB7Ci0JCXJldHVybiAodHlwZU5hbWUuZXF1YWxzKCJib29sZWFuIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJjaGFyIikKLQkJCQl8fCB0eXBlTmFtZS5lcXVhbHMoImJ5dGUiKSB8fCB0eXBlTmFtZS5lcXVhbHMoInNob3J0IikKLQkJCQl8fCB0eXBlTmFtZS5lcXVhbHMoImludCIpIHx8IHR5cGVOYW1lLmVxdWFscygibG9uZyIpCi0JCQkJfHwgdHlwZU5hbWUuZXF1YWxzKCJmbG9hdCIpIHx8IHR5cGVOYW1lLmVxdWFscygiZG91YmxlIikpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGhhbmRsZSBvZiB0aGUgSVByb2plY3QgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZ2l2ZW4KLQkgKiA8Y29kZT5hYnNvbHV0ZVBhdGg8L2NvZGU+LiBOZWl0aGVyIHRoZSBnaXZlbiBwYXRoIG5vciB0aGUgcHJvamVjdCBuZWVkCi0JICogZXhpc3QgaW4gdGhlIHdvcmtzcGFjZS4gVGhlIHBhdGggbXVzdCBiZSBhYnNvbHV0ZSwgYW5kIG11c3QgY29uc2lzdCBvZiBhdAotCSAqIGxlYXN0IG9uZSBzZWdtZW50LgotCSAqIAotCSAqIEByZXR1cm4gQW4gSVByb2plY3QgaGFuZGxlIGZvciB0aGUgcHJvamVjdCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBnaXZlbgotCSAqICAgICAgICAgPGNvZGU+YWJzb2x1dGVQYXRoPC9jb2RlPiwgb3IgbnVsbCBpZiB0aGUgcGF0aCBkb2VzIG5vdAotCSAqICAgICAgICAgc3BlY2lmeSBhIHByb2plY3QuCi0JICovCi0JcHVibGljIHN0YXRpYyBJUHJvamVjdCBnZXRQcm9qZWN0T2YoSVBhdGggYWJzb2x1dGVQYXRoKSB7Ci0JCWlmIChhYnNvbHV0ZVBhdGguaXNBYnNvbHV0ZSgpKSB7Ci0JCQlTdHJpbmcgcHJvamVjdE5hbWUgPSBhYnNvbHV0ZVBhdGguc2VnbWVudCgwKTsKLQkJCWlmIChwcm9qZWN0TmFtZSAhPSBudWxsKSB7Ci0JCQkJcmV0dXJuIGdldFdvcmtzcGFjZVJvb3QoKS5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gYWJzb2x1dGVQYXRoCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVZpcnR1YWxDb21wb25lbnQgZ2V0Q29tcG9uZW50T2YoSVBhdGggYWJzb2x1dGVQYXRoKXsKLQkJaWYgKGFic29sdXRlUGF0aC5pc0Fic29sdXRlKCkpIHsKLQkJCQlTdHJpbmcgcHJvamVjdE5hbWUgPSBhYnNvbHV0ZVBhdGguc2VnbWVudCgwKTsKLQkJCQlJUHJvamVjdCBwcm9qZWN0ID0gZ2V0V29ya3NwYWNlUm9vdCgpLmdldFByb2plY3QocHJvamVjdE5hbWUpOwotCQkJCWlmIChwcm9qZWN0TmFtZSAhPSBudWxsKSB7Ci0JCQkJCXJldHVybiBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLQkJCQl9Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgSVZpcnR1YWxDb21wb25lbnQgZ2V0Q29tcG9uZW50T2YoSVJlc291cmNlIHJlcykKLQl7Ci0JCUlWaXJ0dWFsUmVzb3VyY2VbXSB2cmVzb3VyY2VzID0gQ29tcG9uZW50Q29yZS5jcmVhdGVSZXNvdXJjZXMocmVzKTsKLQkJSVZpcnR1YWxDb21wb25lbnQgdmNvbXAgPSBudWxsOwotCQlpZiAodnJlc291cmNlcyAhPSBudWxsICYmIHZyZXNvdXJjZXMubGVuZ3RoPjApCi0JCXsKLQkJCUlWaXJ0dWFsUmVzb3VyY2UgdnJlcyA9IHZyZXNvdXJjZXNbMF07Ci0JCQl2Y29tcCA9IHZyZXMuZ2V0Q29tcG9uZW50KCk7Ci0JCX0KLQkJcmV0dXJuIHZjb21wOwotCX0KLQkKLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIDxjb2RlPnByb2plY3Q8L2NvZGU+IGlzIGEgSmF2YSBQcm9qZWN0LgotCSAqIAotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogICAgICAgICAgICBUaGUgcHJvamVjdC4KLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHByb2plY3QgaXMgYSBKYXZhIFByb2plY3QuCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzSmF2YVByb2plY3QoSVByb2plY3QgcHJvamVjdCkgewotCQl0cnkKLQkJewotCQkgIHJldHVybiBwcm9qZWN0Lmhhc05hdHVyZShKYXZhQ29yZS5OQVRVUkVfSUQpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKQotCQl7Ci0JCQkvL1JldHVybiBmYWxzZSBpZiBDb3JlRXhjZXB0aW9uIG9jY3VycyB3aGlsZSBjaGVja2luZyBuYXR1cmUuCi0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIDxjb2RlPnByb2plY3Q8L2NvZGU+IGlzIGEgSmF2YSBQcm9qZWN0LgotCSAqIAotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogICAgICAgICAgICBUaGUgcHJvamVjdC4KLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHByb2plY3QgaXMgYSBKYXZhIFByb2plY3QuCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzVHJ1ZUphdmFQcm9qZWN0KElQcm9qZWN0IHByb2plY3QpIHsKLQkJcmV0dXJuICghaXNXZWJQcm9qZWN0KHByb2plY3QpICYmICFpc0FwcENsaWVudFByb2plY3QocHJvamVjdCkgJiYgIWlzRUFSUHJvamVjdChwcm9qZWN0KQotCQkJCSYmICFpc0VKQlByb2plY3QocHJvamVjdCkgJiYgaXNKYXZhUHJvamVjdChwcm9qZWN0KSk7Ci0JCS8qCi0JCSAqIHRyeSB7IFN0cmluZ1tdIG5hdHVyZXMgPSBwcm9qZWN0LmdldERlc2NyaXB0aW9uKCkuZ2V0TmF0dXJlSWRzKCk7Ci0JCSAqIHJldHVybiAobmF0dXJlcy5sZW5ndGggPT0gMSAmJgotCQkgKiBuYXR1cmVzWzBdLmVxdWFscyhKYXZhQ29yZS5OQVRVUkVfSUQpKTsgfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7IH0KLQkJICogcmV0dXJuIGZhbHNlOwotCQkgKi8KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIDxjb2RlPnByb2plY3Q8L2NvZGU+IGlzIGEgV2ViIFByb2plY3QuCi0JICogTm90ZTogRm9yIGNvbXBvbmVudHM7IHVzZSBKMkVFVXRpbHMuaXNXZWJDb21wb25lbnQoKQotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogICAgICAgICAgICBUaGUgcHJvamVjdC4KLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHByb2plY3QgaXMgYSBXZWIgUHJvamVjdC4KLSAgICogCi0gICAqIEBkZXByZWNhdGVkCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzV2ViUHJvamVjdChJUHJvamVjdCBwcm9qZWN0KSB7Ci0JCWJvb2xlYW4gaXNXZWIgPSBmYWxzZTsKLQkJU3RydWN0dXJlRWRpdCBtYyA9IG51bGw7Ci0JCXRyeSB7Ci0JCSAgbWMgPSBTdHJ1Y3R1cmVFZGl0LmdldFN0cnVjdHVyZUVkaXRGb3JSZWFkKHByb2plY3QpOwotCQkgIFdvcmtiZW5jaENvbXBvbmVudFtdIHdiY3MgPSBtYy5nZXRXb3JrYmVuY2hNb2R1bGVzKCk7Ci0JCSAgaWYgKHdiY3MubGVuZ3RoIT0wKSB7Ci0JCQkgIC8vaXNXZWIgPSBXZWJBcnRpZmFjdEVkaXQuaXNWYWxpZFdlYk1vZHVsZSh3YmNzWzBdKTsKLQkJICB9Ci0JCX0KLQkJY2F0Y2goRXhjZXB0aW9uIGV4KXsKLQkJCS8vIGhhbmRsZSBleGNlcHRpb24KLQkJfQotCQlmaW5hbGx5ewotCQkJaWYgKG1jIT1udWxsKQotCQkJCW1jLmRpc3Bvc2UoKTsKLQkJfQotCi0JCXJldHVybiBpc1dlYjsKLQl9Ci0KLQkvKioKLQkgKiBOb3RlOiBmb3IgY29tcG9uZW50czsgdXNlIEoyRUVVdGlscy5pc0VBUkNvbXBvbmVudCgpCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiBAcmV0dXJuCi0gICAqIAotICAgKiBAZGVwcmVjYXRlZAotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0VBUlByb2plY3QoSVByb2plY3QgcHJvamVjdCl7Ci0JCWJvb2xlYW4gaXNFQVIgPSBmYWxzZTsKLQkJU3RydWN0dXJlRWRpdCBtYyA9IG51bGw7Ci0JCXRyeSB7Ci0JCSAgbWMgPSBTdHJ1Y3R1cmVFZGl0LmdldFN0cnVjdHVyZUVkaXRGb3JSZWFkKHByb2plY3QpOwotCQkgIFdvcmtiZW5jaENvbXBvbmVudFtdIHdiY3MgPSBtYy5nZXRXb3JrYmVuY2hNb2R1bGVzKCk7Ci0JCSAgaWYgKHdiY3MubGVuZ3RoIT0wKSB7Ci0JCQlFQVJBcnRpZmFjdEVkaXQgZWFyRWRpdCA9IG51bGw7Ci0JCQl0cnkgewotCQkJICAvL2VhckVkaXQgPSBFQVJBcnRpZmFjdEVkaXQuZ2V0RUFSQXJ0aWZhY3RFZGl0Rm9yUmVhZCh3YmNzWzBdKTsKLQkJCSAgaWYgKGVhckVkaXQhPW51bGwpewotCQkJCWlzRUFSID0gdHJ1ZTsKLQkJCSAgfQotCQkJfQotCQkJZmluYWxseXsKLQkJCQlpZiAoZWFyRWRpdCE9bnVsbCkKLQkJCQkJZWFyRWRpdC5kaXNwb3NlKCk7Ci0JCQl9Ci0JCSAgfQotCQl9Ci0JCWNhdGNoKEV4Y2VwdGlvbiBleCl7fQotCQlmaW5hbGx5ewotCQkJaWYgKG1jIT1udWxsKQotCQkJCW1jLmRpc3Bvc2UoKTsKLQkJfQotCQkKLQkJcmV0dXJuIGlzRUFSOwotCX0KLQkvKioKLQkgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIDxjb2RlPnByb2plY3Q8L2NvZGU+IGlzIGFuIEVKQiAxLjEgb3IgRUpCIDIuMAotCSAqIFByb2plY3QuCi0JICogTm90ZTogZm9yIGNvbXBvbmVudHMsIHVzZSBKMkVFVXRpbHMuaXNFSkJDb21wb25lbnQKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqICAgICAgICAgICAgVGhlIHByb2plY3QuCi0JICogQHJldHVybiBUcnVlIGlmIHRoZSBwcm9qZWN0IGlzIGFuIEVKQiAxLjEgb3IgYW4gRUpCIDIuMCBQcm9qZWN0LgotICAgKiAKLSAgICogQGRlcHJlY2F0ZWQKLSAgICogCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzRUpCUHJvamVjdChJUHJvamVjdCBwcm9qZWN0KSB7Ci0JCWJvb2xlYW4gaXNFSkIgPSBmYWxzZTsKLQkJU3RydWN0dXJlRWRpdCBtYyA9IG51bGw7Ci0JCXRyeSB7Ci0JCSAgbWMgPSBTdHJ1Y3R1cmVFZGl0LmdldFN0cnVjdHVyZUVkaXRGb3JSZWFkKHByb2plY3QpOwotCQkgIFdvcmtiZW5jaENvbXBvbmVudFtdIHdiY3MgPSBtYy5nZXRXb3JrYmVuY2hNb2R1bGVzKCk7Ci0JCSAgaWYgKHdiY3MubGVuZ3RoIT0wKSB7Ci0JCQlFSkJBcnRpZmFjdEVkaXQgZWpiRWRpdCA9IG51bGw7Ci0JCQl0cnkgewotCQkJICAvL2VqYkVkaXQgPSBFSkJBcnRpZmFjdEVkaXQuZ2V0RUpCQXJ0aWZhY3RFZGl0Rm9yUmVhZCh3YmNzWzBdKTsKLQkJCSAgaWYgKGVqYkVkaXQhPW51bGwpewotCQkJCWlzRUpCID0gdHJ1ZTsKLQkJCSAgfQotCQkJfQotCQkJZmluYWxseXsKLQkJCQlpZiAoZWpiRWRpdCE9bnVsbCkKLQkJCQkJZWpiRWRpdC5kaXNwb3NlKCk7Ci0JCQl9Ci0JCSAgfQotCQl9Ci0JCWNhdGNoKEV4Y2VwdGlvbiBleCl7fQotCQlmaW5hbGx5ewotCQkJaWYgKG1jIT1udWxsKQotCQkJCW1jLmRpc3Bvc2UoKTsKLQkJfQotCQkKLQkJcmV0dXJuIGlzRUpCOwkKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIDxjb2RlPnByb2plY3Q8L2NvZGU+IGlzIGFuIEFwcGxpY2F0aW9uIENsaWVudAotCSAqIFByb2plY3QuCi0JICogTm90ZTogZm9yIGNvbXBvbmVudHMsIHVzZSBKMkVFVXRpbHMuaXNBcHBDbGllbnRDb21wb25lbnQoKQotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogICAgICAgICAgICBUaGUgcHJvamVjdC4KLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHByb2plY3QgaXMgYW4gQXBwbGljYXRpb24gQ2xpZW50IFByb2plY3QKLSAgICogCi0gICAqIEBkZXByZWNhdGVkCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzQXBwQ2xpZW50UHJvamVjdChJUHJvamVjdCBwcm9qZWN0KSB7Ci0JCWJvb2xlYW4gaXNBcHBDbGllbnQgPSBmYWxzZTsKLQkJU3RydWN0dXJlRWRpdCBtYyA9IG51bGw7Ci0JCXRyeSB7Ci0JCSAgbWMgPSBTdHJ1Y3R1cmVFZGl0LmdldFN0cnVjdHVyZUVkaXRGb3JSZWFkKHByb2plY3QpOwotCQkgIFdvcmtiZW5jaENvbXBvbmVudFtdIHdiY3MgPSBtYy5nZXRXb3JrYmVuY2hNb2R1bGVzKCk7Ci0JCSAgaWYgKHdiY3MubGVuZ3RoIT0wKSB7Ci0JCQlBcHBDbGllbnRBcnRpZmFjdEVkaXQgYXBwQ2xpZW50RWRpdCA9IG51bGw7Ci0JCQl0cnkgewotCQkJCS8vYXBwQ2xpZW50RWRpdCA9IEFwcENsaWVudEFydGlmYWN0RWRpdC5nZXRBcHBDbGllbnRBcnRpZmFjdEVkaXRGb3JSZWFkKHdiY3NbMF0pOwotCQkJICBpZiAoYXBwQ2xpZW50RWRpdCE9bnVsbCl7Ci0JCQkJICBpc0FwcENsaWVudCA9IHRydWU7Ci0JCQkgIH0KLQkJCX0KLQkJCWZpbmFsbHl7Ci0JCQkJaWYgKGFwcENsaWVudEVkaXQhPW51bGwpCi0JCQkJCWFwcENsaWVudEVkaXQuZGlzcG9zZSgpOwotCQkJfQotCQkgIH0KLQkJfQotCQljYXRjaChFeGNlcHRpb24gZXgpe30KLQkJZmluYWxseXsKLQkJCWlmIChtYyE9bnVsbCkKLQkJCQltYy5kaXNwb3NlKCk7Ci0JCX0KLQkJCi0JCXJldHVybiBpc0FwcENsaWVudDsJCi0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdHlwZSBvZiB0aGUgZ2l2ZW4gPGNvZGU+cHJvamVjdDwvY29kZT4gYXMgYSBiaXRtYXNrLgotCSAqIFJlbGV2YW50IGJpdG1hc2sgdmFsdWVzIGFyZToKLQkgKiA8b2w+Ci0JICogPGxpPntAbGluayAjUFJPSkVDVF9UWVBFX0pBVkEgUFJPSkVDVF9UWVBFX0pBVkF9Ci0JICogPGxpPntAbGluayAjUFJPSkVDVF9UWVBFX1dFQiBQUk9KRUNUX1RZUEVfV0VCfQotCSAqIDxsaT57QGxpbmsgI1BST0pFQ1RfVFlQRV9FSkIgUFJPSkVDVF9UWVBFX0VKQn0KLQkgKiA8bGk+e0BsaW5rICNQUk9KRUNUX1RZUEVfTk9ORSBQUk9KRUNUX1RZUEVfTk9ORX0KLQkgKiA8L29sPgotCSAqIAotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogICAgICAgICAgICBUaGUgcHJvamVjdC4KLQkgKiBAcmV0dXJuIFRoZSB0eXBlIGJpdG1hc2sgb2YgdGhlIHByb2plY3QuCi0JICogCi0JICogQGRlcHJlY2F0ZWQgdXNlIGdldENvbXBvbmVudFR5cGUKLQkgKi8gCi0JcHVibGljIHN0YXRpYyBieXRlIGdldFByb2plY3RUeXBlKElQcm9qZWN0IHByb2plY3QpIHsKLQkJYnl0ZSBwcm9qZWN0VHlwZSA9IFBST0pFQ1RfVFlQRV9OT05FOwotCQlpZiAoUmVzb3VyY2VVdGlscy5pc0phdmFQcm9qZWN0KHByb2plY3QpKSB7Ci0JCQlwcm9qZWN0VHlwZSB8PSBQUk9KRUNUX1RZUEVfSkFWQTsKLQkJfQotCQlpZiAoUmVzb3VyY2VVdGlscy5pc1dlYlByb2plY3QocHJvamVjdCkpIHsKLQkJCXByb2plY3RUeXBlIHw9IFBST0pFQ1RfVFlQRV9XRUI7Ci0JCX0KLQkJaWYgKFJlc291cmNlVXRpbHMuaXNFSkJQcm9qZWN0KHByb2plY3QpKSB7Ci0JCQlwcm9qZWN0VHlwZSB8PSBQUk9KRUNUX1RZUEVfRUpCOwotCQl9Ci0JCXJldHVybiBwcm9qZWN0VHlwZTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBjb21wb25lbnQgdHlwZSBpZCBhcyBkZWZpbmVkIGluIElNb2R1bGVDb25zdGFudHMKLQkgKiBpLmUuIElNb2R1bGVDb25zdGFudHMuSlNUX1dFQl9NT0RVTEUgPSAianN0LndlYiIKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRDb21wb25lbnRUeXBlKElQcm9qZWN0IHByb2plY3QpewotCQlyZXR1cm4gSjJFRVByb2plY3RVdGlsaXRpZXMuZ2V0SjJFRVByb2plY3RUeXBlKHByb2plY3QpOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBjb21wb25lbnQgdHlwZQotCSAqIEBwYXJhbSBjb21wb25lbnQKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0Q29tcG9uZW50VHlwZShJVmlydHVhbENvbXBvbmVudCBjb21wb25lbnQpewotCQlyZXR1cm4gZ2V0Q29tcG9uZW50VHlwZShjb21wb25lbnQuZ2V0UHJvamVjdCgpKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyBXZWJNb2R1bGUgRGVwbG95YWJsZSBvZiB0aGUgPGNvZGU+cHJvamVjdDwvY29kZT4gYXMgYW4KLQkgKiA8Y29kZT5JRGVwbG95YWJsZTwvY29kZT4sIG9yIG51bGwgaWYgdGhlIHByb2plY3QgaGFzIG5vIFdlYiBuYXR1cmUuCi0JICogCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiAgICAgICAgICAgIFRoZSBwcm9qZWN0LgotCSAqIEByZXR1cm4gV2ViTW9kdWxlIERlcGxveWFibGUgb2YgdGhlIDxjb2RlPnByb2plY3Q8L2NvZGU+IG9yIG51bGwgaWYgdGhlCi0JICogICAgICAgICBwcm9qZWN0IGhhcyBubyBXZWIgbmF0dXJlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSU1vZHVsZSBnZXRNb2R1bGUoSVByb2plY3QgcHJvamVjdCkgewotCXJldHVybiBTZXJ2ZXJVdGlsLmdldE1vZHVsZShwcm9qZWN0KTsKLX0KLQkKLS8vIFdvcmthcm91bmQgZm9yIDExMzYyMSAKLS8vcHVibGljIHN0YXRpYyBJTW9kdWxlIGdldE1vZHVsZShJUHJvamVjdCBwcm9qZWN0KSB7Ci0vLwlJTW9kdWxlW10gbW9kdWxlcyA9IFNlcnZlclV0aWwuZ2V0TW9kdWxlcyhwcm9qZWN0KTsKLS8vCWlmIChtb2R1bGVzIT1udWxsICYmIG1vZHVsZXMubGVuZ3RoIT0wKSB7Ci0vLwkJcmV0dXJuIG1vZHVsZXNbMF07Ci0vLwl9Ci0vLwlyZXR1cm4gbnVsbDsKLS8vfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgYnVpbGQgb3V0cHV0IGxvY2F0aW9uIG9mIHRoZSA8Y29kZT5wcm9qZWN0PC9jb2RlPiBhcyBhbgotCSAqIDxjb2RlPklQYXRoPC9jb2RlPiwgb3IgbnVsbCBpZiB0aGUgcHJvamVjdCBoYXMgbm8gSmF2YSBuYXR1cmUuCi0JICogaS5lLiBXUFwuZGVwbG95YWJsZXNcd2ViTW9kdWxlXFdFQi1JTkZcY2xhc3NlcwotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogICAgICAgICAgICBUaGUgcHJvamVjdC4KLQkgKiBAcmV0dXJuIFRoZSBidWlsZCBvdXRwdXQgbG9jYXRpb24gb2YgdGhlIDxjb2RlPnByb2plY3Q8L2NvZGU+IG9yIG51bGwKLQkgKiAgICAgICAgIGlmIHRoZSBwcm9qZWN0IGhhcyBubyBKYXZhIG5hdHVyZS4KLQkgKiBAZGVwcmVjYXRlZCBub3QgdXNlZCAKLQkgKi8KLQlwdWJsaWMgc3RhdGljIElQYXRoIGdldEphdmFPdXRwdXRMb2NhdGlvbihJUHJvamVjdCBwcm9qZWN0KSB7Ci0JCUlQYXRoIG91dHB1dExvY2F0aW9uID0gbnVsbDsKLQkJdHJ5IHsKLQkJCUlKYXZhUHJvamVjdCBqYXZhUHJvamVjdCA9IEphdmFDb3JlLmNyZWF0ZShwcm9qZWN0KTsKLQkJCWlmIChqYXZhUHJvamVjdCAhPSBudWxsKSB7Ci0JCQkJb3V0cHV0TG9jYXRpb24gPSBqYXZhUHJvamVjdC5nZXRPdXRwdXRMb2NhdGlvbigpOwotCQkJfQotCQl9IGNhdGNoIChKYXZhTW9kZWxFeGNlcHRpb24gZSkgewotCQl9Ci0JCUlMb2cgbG9nID0gRW52aXJvbm1lbnRTZXJ2aWNlLmdldEVjbGlwc2VMb2coKTsKLQkJbG9nLmxvZyhJTG9nLklORk8sIDUwMzIsIFJlc291cmNlVXRpbHMuY2xhc3MsICJnZXRKYXZhT3V0cHV0TG9jYXRpb24iLAotCQkJCSJwcm9qZWN0PSIgKyBwcm9qZWN0ICsgIixvdXRwdXRMb2NhdGlvbj0iICsgb3V0cHV0TG9jYXRpb24pOwotCi0JCXJldHVybiBvdXRwdXRMb2NhdGlvbjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGEgYnVpbGQgc291cmNlIGxvY2F0aW9uIG9mIHRoZSA8Y29kZT5wcm9qZWN0PC9jb2RlPiBhcyBhbgotCSAqIDxjb2RlPklQYXRoPC9jb2RlPiwgb3IgbnVsbCBpZiB0aGUgcHJvamVjdCBlaXRoZXIgaGFzIG5vIEphdmEgbmF0dXJlCi0JICogb3IgaWYgdGhlIHByb2plY3QncyBidWlsZCBjbGFzc3BhdGggY29udGFpbnMgbm8gZm9sZGVycyBsb2NhbCB0byB0aGUKLQkgKiBwcm9qZWN0LiBJZiB0aGUgcHJvamVjdCBoYXMgbW9yZSB0aGFuIG9uZSBvZiBpdHMgb3duIGZvbGRlcnMgb24gdGhlIGJ1aWxkCi0JICogY2xhc3NwYXRoLCB0aGVuIG9uZSBvZiB0aGVtIGlzIGNob3NlbiBhcmJpdHJhcmlseSBhcyB0aGUgYnVpbGQgc291cmNlCi0JICogbG9jYXRpb24uIFRvIHdvcmsgd2l0aCBhbGwgZW50cmllcyBvbiB0aGUgYnVpbGQgY2xhc3NwYXRoLCB1c2UKLQkgKiB7QGxpbmsgI2dldEphdmFQYWNrYWdlRnJhZ21lbnRSb290cyBnZXRKYXZhUGFja2FnZUZyYWdtZW50Um9vdHMoKX1vcgotCSAqIHtAbGluayAjZ2V0SmF2YUNsYXNzcGF0aCBnZXRKYXZhQ2xhc3NwYXRoKCl9LgotCSAqIAotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogICAgICAgICAgICBUaGUgcHJvamVjdC4KLQkgKiBAcmV0dXJuIEEgYnVpbGQgc291cmNlIGxvY2F0aW9uIG9mIHRoZSA8Y29kZT5wcm9qZWN0PC9jb2RlPiBvciBudWxsIGlmCi0JICogICAgICAgICB0aGUgcHJvamVjdCBoYXMgbm8gSmF2YSBuYXR1cmUgb3IgaWYgdGhlIHByb2plY3QncyBidWlsZAotCSAqICAgICAgICAgY2xhc3NwYXRoIGNvbnRhaW5zIG5vIGZvbGRlcnMgbG9jYWwgdG8gdGhlIHByb2plY3QuCi0JICovCi0KLQlwdWJsaWMgc3RhdGljIElQYXRoIGdldEphdmFTb3VyY2VMb2NhdGlvbihJUHJvamVjdCBwcm9qZWN0KSB7Ci0JCUlQYXRoIHNvdXJjZUxvY2F0aW9uID0gbnVsbDsKLQkJSVBhY2thZ2VGcmFnbWVudFJvb3RbXSBmcmFnbWVudFJvb3RzID0gZ2V0SmF2YVBhY2thZ2VGcmFnbWVudFJvb3RzKHByb2plY3QpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGZyYWdtZW50Um9vdHMubGVuZ3RoICYmIHNvdXJjZUxvY2F0aW9uID09IG51bGw7IGkrKykgewotCQkJdHJ5IHsKLQkJCQlJUmVzb3VyY2UgZnJhZ21lbnRSb290ID0gZnJhZ21lbnRSb290c1tpXQotCQkJCQkJLmdldENvcnJlc3BvbmRpbmdSZXNvdXJjZSgpOwotCQkJCWlmIChmcmFnbWVudFJvb3QgIT0gbnVsbAotCQkJCQkJJiYgKGZyYWdtZW50Um9vdC5nZXRQcm9qZWN0KCkuZXF1YWxzKHByb2plY3QpKQotCQkJCQkJJiYgKGZyYWdtZW50Um9vdC5nZXRUeXBlKCkgIT0gSVJlc291cmNlLkZJTEUpKSB7Ci0JCQkJCXNvdXJjZUxvY2F0aW9uID0gZnJhZ21lbnRSb290LmdldEZ1bGxQYXRoKCk7Ci0JCQkJfQotCQkJfSBjYXRjaCAoSmF2YU1vZGVsRXhjZXB0aW9uIGUpIHsKLQkJCX0KLQkJfQotCi0JCUlMb2cgbG9nID0gRW52aXJvbm1lbnRTZXJ2aWNlLmdldEVjbGlwc2VMb2coKTsKLQkJbG9nLmxvZyhJTG9nLklORk8sIDUwMzAsIFJlc291cmNlVXRpbHMuY2xhc3MsICJnZXRKYXZhU291cmNlTG9jYXRpb24iLAotCQkJCSJwcm9qZWN0PSIgKyBwcm9qZWN0ICsgIixzb3VyY2VMb2NhdGlvbj0iICsgc291cmNlTG9jYXRpb24pOwotCQkKLQkJcmV0dXJuIHNvdXJjZUxvY2F0aW9uOwotCX0KLQotCQotCS8qKgotCSAqIFJldHVybnMgdGhlICJKYXZhU291cmNlIiBmb2xkZXIKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqIEByZXR1cm4KLQkgKi8KLSAgICAvKgotCXB1YmxpYyBzdGF0aWMgSVBhdGggZ2V0SmF2YVNvdXJjZUxvY2F0aW9uKElQcm9qZWN0IHByb2plY3QpewotCQlJVmlydHVhbENvbXBvbmVudCBjb21wb25lbnQgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLQkJcmV0dXJuIGdldEphdmFTb3VyY2VMb2NhdGlvbihjb21wb25lbnQpOwkJCQotCX0KLQkqLwotCS8qKgotCSAqIFJldHVybnMgdGhlIEphdmFTb3VyY2UgbG9jYXRpb24gZm9sZGVyCi0JICogQHBhcmFtIGNvbXAKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBJUGF0aCBnZXRKYXZhU291cmNlTG9jYXRpb24oSVZpcnR1YWxDb21wb25lbnQgY29tcCl7Ci0JCWlmIChjb21wIT1udWxsKXsKLQkJICAgSVZpcnR1YWxGb2xkZXIgZm9sZGVyID0gY29tcC5nZXRSb290Rm9sZGVyKCkuZ2V0Rm9sZGVyKG5ldyBQYXRoKCIvV0VCLUlORi9jbGFzc2VzIikpOwotCQkgICByZXR1cm4gZm9sZGVyLmdldFdvcmtzcGFjZVJlbGF0aXZlUGF0aCgpOwotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBKYXZhU291cmNlIGxvY2F0aW9ucyBpbiBlYWNoIHByb2plY3QKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElQYXRoW10gZ2V0QWxsSmF2YVNvdXJjZUxvY2F0aW9ucyhJUHJvamVjdCBwcm9qZWN0KSB7Ci0JCVZlY3RvciBwYXRoVmVjdG9yID0gbmV3IFZlY3RvcigpOwotCQlJUGFja2FnZUZyYWdtZW50Um9vdFtdIGZyYWdtZW50Um9vdHMgPSBnZXRKYXZhUGFja2FnZUZyYWdtZW50Um9vdHMocHJvamVjdCk7Ci0KLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBmcmFnbWVudFJvb3RzLmxlbmd0aDsgaSsrKSB7Ci0JCQl0cnkgewotCQkJCUlSZXNvdXJjZSBmcmFnbWVudFJvb3QgPSBmcmFnbWVudFJvb3RzW2ldLmdldENvcnJlc3BvbmRpbmdSZXNvdXJjZSgpOwotCQkJCWlmIChmcmFnbWVudFJvb3QgIT0gbnVsbCAmJiAoZnJhZ21lbnRSb290LmdldFByb2plY3QoKS5lcXVhbHMocHJvamVjdCkpCi0JCQkJCQkmJiAoZnJhZ21lbnRSb290LmdldFR5cGUoKSAhPSBJUmVzb3VyY2UuRklMRSkpIHsKLQkJCQkJcGF0aFZlY3Rvci5hZGQoZnJhZ21lbnRSb290LmdldEZ1bGxQYXRoKCkpOwotCQkJCX0KLQkJCX0gY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBlKSB7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIChJUGF0aFtdKSBwYXRoVmVjdG9yLnRvQXJyYXkobmV3IFBhdGhbcGF0aFZlY3Rvci5zaXplKCldKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIElQYXRoW10gZ2V0QWxsSmF2YVNvdXJjZUxvY2F0aW9ucyhJVmlydHVhbENvbXBvbmVudFtdIGNvbXBvbmVudHMpIHsKLQotCQlpZiAoY29tcG9uZW50cyE9bnVsbCl7Ci0JCQlMaXN0IGphdmFTb3VyY2VQYXRocyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCWZvciAoaW50IGk9MDtpPGNvbXBvbmVudHMubGVuZ3RoO2krKyl7Ci0JCQkJSVBhdGggcGF0aCA9IGdldEphdmFTb3VyY2VMb2NhdGlvbihjb21wb25lbnRzW2ldKTsKLQkJCQlqYXZhU291cmNlUGF0aHMuYWRkKHBhdGgpOwotCQkJfQotCQkJcmV0dXJuIChJUGF0aFtdKWphdmFTb3VyY2VQYXRocy50b0FycmF5KG5ldyBJUGF0aFswXSk7Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgYSBidWlsZCBzb3VyY2UgcGFja2FnZSBmcmFnbWVudCByb290IG9mIHRoZSA8Y29kZT5wcm9qZWN0PC9jb2RlPgotCSAqIGFzIGFuIDxjb2RlPklQYWNrYWdlRnJhZ21lbnRSb290PC9jb2RlPiwgb3IgbnVsbCBpZiB0aGUgcHJvamVjdCBlaXRoZXIKLQkgKiBoYXMgbm8gSmF2YSBuYXR1cmUgb3IgaWYgdGhlIHByb2plY3QncyBidWlsZCBjbGFzc3BhdGggY29udGFpbnMgbm8KLQkgKiBmb2xkZXJzIGxvY2FsIHRvIHRoZSBwcm9qZWN0LiBJZiB0aGUgcHJvamVjdCBoYXMgbW9yZSB0aGFuIG9uZSBvZiBpdHMgb3duCi0JICogZm9sZGVycyBvbiB0aGUgYnVpbGQgY2xhc3NwYXRoLCB0aGVuIG9uZSBvZiB0aGVtIGlzIGNob3NlbiBhcmJpdHJhcmlseSBhcwotCSAqIHRoZSBidWlsZCBzb3VyY2UgbG9jYXRpb24uCi0JICogCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiAgICAgICAgICAgIFRoZSBwcm9qZWN0LgotCSAqIEByZXR1cm4gQSBidWlsZCBzb3VyY2UgcGFja2FnZSBmcmFnbWVudCByb290IG9mIHRoZSA8Y29kZT5wcm9qZWN0PC9jb2RlPgotCSAqICAgICAgICAgb3IgbnVsbCBpZiB0aGUgcHJvamVjdCBoYXMgbm8gSmF2YSBuYXR1cmUgb3IgaWYgdGhlIHByb2plY3QncwotCSAqICAgICAgICAgYnVpbGQgY2xhc3NwYXRoIGNvbnRhaW5zIG5vIGZvbGRlcnMgbG9jYWwgdG8gdGhlIHByb2plY3QuCi0JICogICAgICAgICAKLQkgKiBAZGVwcmVjYXRlZCBub3QgdXNlZAotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVBhY2thZ2VGcmFnbWVudFJvb3QgZ2V0SmF2YVNvdXJjZVBhY2thZ2VGcmFnbWVudFJvb3QoSVByb2plY3QgcHJvamVjdCkgewotCQlJUGFja2FnZUZyYWdtZW50Um9vdCBwYWNrYWdlRnJhZ21lbnRSb290ID0gbnVsbDsKLQkJSVBhdGggamF2YVNvdXJjZUxvY2F0aW9uID0gZ2V0SmF2YVNvdXJjZUxvY2F0aW9uKHByb2plY3QpOwotCQl0cnkgewotCQkJSUphdmFQcm9qZWN0IGphdmFQcm9qZWN0ID0gSmF2YUNvcmUuY3JlYXRlKHByb2plY3QpOwotCQkJaWYgKGphdmFQcm9qZWN0ICE9IG51bGwpIHsKLQkJCQlwYWNrYWdlRnJhZ21lbnRSb290ID0gamF2YVByb2plY3QuZmluZFBhY2thZ2VGcmFnbWVudFJvb3QoamF2YVNvdXJjZUxvY2F0aW9uKTsKLQkJCX0KLQkJfSBjYXRjaCAoSmF2YU1vZGVsRXhjZXB0aW9uIGUpIHsKLQkJfQotCQlyZXR1cm4gcGFja2FnZUZyYWdtZW50Um9vdDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBwYWNrYWdlIGZyYWdtZW50IHJvb3RzIG9mIHRoZSA8Y29kZT5wcm9qZWN0PC9jb2RlPiBhcyBhbgotCSAqIGFycmF5IG9mIDxjb2RlPklQYWNrYWdlRnJhZ21lbnRSb290PC9jb2RlPiBvYmplY3RzLiBJZiB0aGUgcHJvamVjdCBoYXMKLQkgKiBubyBKYXZhIG5hdHVyZSB0aGVuIHRoZSByZXR1cm5lZCBhcnJheSB3aWxsIGJlIG9mIGxlbmd0aCB6ZXJvLgotCSAqIAotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogICAgICAgICAgICBUaGUgcHJvamVjdC4KLQkgKiBAcmV0dXJuIFRoZSBwYWNrYWdlIGZyYWdtZW50IHJvb3RzIG9mIHRoZSA8Y29kZT5wcm9qZWN0PC9jb2RlPi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElQYWNrYWdlRnJhZ21lbnRSb290W10gZ2V0SmF2YVBhY2thZ2VGcmFnbWVudFJvb3RzKElQcm9qZWN0IHByb2plY3QpIHsKLQkJdHJ5IHsKLQkJCUlKYXZhUHJvamVjdCBqYXZhUHJvamVjdCA9IEphdmFDb3JlLmNyZWF0ZShwcm9qZWN0KTsKLQkJCWlmIChqYXZhUHJvamVjdCAhPSBudWxsKSB7Ci0JCQkJSVBhY2thZ2VGcmFnbWVudFJvb3RbXSBwYWNrYWdlRnJhZ21lbnRSb290cyA9IGphdmFQcm9qZWN0Ci0JCQkJCQkuZ2V0UGFja2FnZUZyYWdtZW50Um9vdHMoKTsKLQkJCQlyZXR1cm4gcGFja2FnZUZyYWdtZW50Um9vdHM7Ci0JCQl9Ci0JCX0gY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBlKSB7Ci0JCX0KLQkJcmV0dXJuIG5ldyBJUGFja2FnZUZyYWdtZW50Um9vdFswXTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBidWlsZCBjbGFzc3BhdGggZW50cmllcyBvZiB0aGUgPGNvZGU+cHJvamVjdDwvY29kZT4gYXMgYW4KLQkgKiBhcnJheSBvZiA8Y29kZT5JQ2xhc3NwYXRoRW50cnk8L2NvZGU+IG9iamVjdHMuIElmIHRoZSBwcm9qZWN0IGhhcyBubwotCSAqIEphdmEgbmF0dXJlIHRoZW4gdGhlIHJldHVybmVkIGFycmF5IHdpbGwgYmUgb2YgbGVuZ3RoIHplcm8uCi0JICogCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiAgICAgICAgICAgIFRoZSBwcm9qZWN0LgotCSAqIEByZXR1cm4gVGhlIGNsYXNzcGF0aCBlbnRyaWVzIG9mIHRoZSA8Y29kZT5wcm9qZWN0PC9jb2RlPi4KLQkgKiAKLQkgKiBAZGVwcmVjYXRlZCBub3QgdXNlZAotCSAqLwotCXB1YmxpYyBzdGF0aWMgSUNsYXNzcGF0aEVudHJ5W10gZ2V0SmF2YUNsYXNzcGF0aChJUHJvamVjdCBwcm9qZWN0KSB7Ci0JCXRyeSB7Ci0JCQlJSmF2YVByb2plY3QgamF2YVByb2plY3QgPSBKYXZhQ29yZS5jcmVhdGUocHJvamVjdCk7Ci0JCQlpZiAoamF2YVByb2plY3QgIT0gbnVsbCkgewotCQkJCUlDbGFzc3BhdGhFbnRyeVtdIGNsYXNzcGF0aEVudHJpZXMgPSBqYXZhUHJvamVjdC5nZXRSYXdDbGFzc3BhdGgoKTsKLQkJCQlyZXR1cm4gY2xhc3NwYXRoRW50cmllczsKLQkJCX0KLQkJfSBjYXRjaCAoSmF2YU1vZGVsRXhjZXB0aW9uIGUpIHsKLQkJfQotCQlyZXR1cm4gbmV3IElDbGFzc3BhdGhFbnRyeVswXTsKLQl9Ci0KLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElGb2xkZXIgZ2V0V2ViQ29tcG9uZW50U2VydmVyUm9vdChJUHJvamVjdCBwcm9qZWN0KXsKLQkJCi0gICAgICBJRm9sZGVyIHdlYk1vZHVsZVNlcnZlclJvb3QgPSBudWxsOwotICAgICAgSVZpcnR1YWxDb21wb25lbnQgdmMgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLSAgICAgIGlmICh2Yy5leGlzdHMoKSkKLSAgICAgICAgd2ViTW9kdWxlU2VydmVyUm9vdCA9IEoyRUVVdGlscy5nZXRPdXRwdXRDb250YWluZXJSb290KHZjKTsKLQotCSAgcmV0dXJuIHdlYk1vZHVsZVNlcnZlclJvb3Q7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgVVJMIHN0cmluZyBjb3JyZXNwb25kaW5nIHRvIHRoZSB3ZWIgc2VydmVyIG1vZHVsZSByb290IG9mIHRoZQotCSAqIHByb2plY3QgaW4gYSBzZXJ2ZXIgaW5zdGFuY2Ugb3IgbnVsbCBpZiB0aGUgcHJvamVjdCBoYXMgbm8gV2ViIG5hdHVyZSBvcgotCSAqIGhhcyBubyBhc3NvY2lhdGlvbiB0byBhIHNlcnZlciBpbnN0YW5jZS4KLQkgKiAKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqICAgICAgICAgICAgVGhlIHByb2plY3QuCi0JICogQHJldHVybiBUaGUgd2ViIHNlcnZlciBtb2R1bGUgcm9vdCBVUkwgb3IgbnVsbCBpZiB0aGUgcHJvamVjdCBoYXMgbm8gV2ViCi0JICogICAgICAgICBuYXR1cmUgb3IgaGFzIG5vIGFzc29jaWF0aW9uIHRvIGEgc2VydmVyIGluc3RhbmNlLgotCSAqIEBkZXByZWNhdGVkIHVzZSBnZXRXZWJDb21wb25lbnRVUkwoLi4pIHdoaWNoIGJlbG9uZ3MgaW4gU2VydmVyVXRpbHMKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRXZWJQcm9qZWN0VVJMKElQcm9qZWN0IHByb2plY3QsCi0JCQlTdHJpbmcgc2VydmVyRmFjdG9yeUlkLCBJU2VydmVyIHNlcnZlcikgewotCi0JCVN0cmluZyB3ZWJQcm9qZWN0VVJMID0gbnVsbDsKLQkJSU1vZHVsZSBtb2R1bGUgPSBnZXRNb2R1bGUocHJvamVjdCk7Ci0JCWlmIChtb2R1bGUgIT0gbnVsbCkgewotCQkJSVNlcnZlciBzZXJ2ZXJJbnN0YW5jZSA9IFNlcnZlclV0aWxzLmdldFNlcnZlckZvck1vZHVsZShtb2R1bGUsCi0JCQkJCXNlcnZlckZhY3RvcnlJZCwgc2VydmVyLCB0cnVlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCWlmIChzZXJ2ZXJJbnN0YW5jZSAhPSBudWxsKSB7Ci0vLwkJCQlVUkwgdXJsID0gKChJVVJMUHJvdmlkZXIpIHNlcnZlckluc3RhbmNlLmdldERlbGVnYXRlKCkpLmdldE1vZHVsZVJvb3RVUkwobW9kdWxlKTsKLQkJCQlVUkwgdXJsID0gKChJVVJMUHJvdmlkZXIpc2VydmVySW5zdGFuY2UuZ2V0QWRhcHRlcihJVVJMUHJvdmlkZXIuY2xhc3MpKS5nZXRNb2R1bGVSb290VVJMKG1vZHVsZSk7Ci0JCQkJaWYgKHVybCAhPSBudWxsKSB7Ci0JCQkJCVN0cmluZyBzID0gdXJsLnRvU3RyaW5nKCk7Ci0JCQkJCXdlYlByb2plY3RVUkwgPSAocy5lbmRzV2l0aCgiLyIpID8gcy5zdWJzdHJpbmcoMCwgcwotCQkJCQkJCS5sZW5ndGgoKSAtIDEpIDogcyk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCQotCQlJTG9nIGxvZyA9IEVudmlyb25tZW50U2VydmljZS5nZXRFY2xpcHNlTG9nKCk7Ci0JCWxvZy5sb2coSUxvZy5JTkZPLCA1MDM2LCBSZXNvdXJjZVV0aWxzLmNsYXNzLCAiZ2V0V2ViUHJvamVjdFVSTCIsCi0JCQkJInByb2plY3Q9IiArIHByb2plY3QgKyAiLHdlYlByb2plY3RVUkw9IiArIHdlYlByb2plY3RVUkwpOwotCi0JCXJldHVybiB3ZWJQcm9qZWN0VVJMOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBmb3JnZWQgVVJMIHN0cmluZyBjb3JyZXNwb25kaW5nIHRvIHRoZSB3ZWIgc2VydmVyIG1vZHVsZSByb290Ci0JICogb2YgdGhlIHByb2plY3QgaW4gYSBzZXJ2ZXIgaW5zdGFuY2Ugb3IgbnVsbCBpZiB0aGUgcHJvamVjdCBoYXMgbm8gV2ViCi0JICogbmF0dXJlIG9yIGhhcyBubyBhc3NvY2lhdGlvbiB0byBhIHNlcnZlciBpbnN0YW5jZS4KLQkgKiAKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqIEByZXR1cm4gVGhlIHdlYiBzZXJ2ZXIgbW9kdWxlIHJvb3QgVVJMIG9yIG51bGwgaWYgdGhlIHByb2plY3QgaGFzIG5vIFdlYgotCSAqICAgICAgICAgbmF0dXJlIG9yIGhhcyBubyBhc3NvY2lhdGlvbiB0byBhIHNlcnZlciBpbnN0YW5jZS4KLQkgKiBAZGVwcmVjYXRlZCAgbm90IHVzZWQKLQkgKi8KLS8vCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEZvcmdlZFdlYlByb2plY3RVUkwoSVByb2plY3QgcHJvamVjdCwgU3RyaW5nIHNlcnZlckZhY3RvcnlJZCwgSVNlcnZlciBzZXJ2ZXIpewotLy8gIAkKLS8vICAJU3RyaW5nIHdlYlByb2plY3RVUkwgPSBudWxsOwotLy8gIAlJTW9kdWxlIG1vZHVsZSA9IGdldE1vZHVsZShwcm9qZWN0KTsKLS8vICAJaWYgKG1vZHVsZSAhPSBudWxsKQotLy8gIAl7Ci0vLyAgCQkvL0lTZXJ2ZXIgc2VydmVySW5zdGFuY2UgPSBTZXJ2ZXJVdGlscy5nZXRTZXJ2ZXJGb3JNb2R1bGUobW9kdWxlLAotLy8JCSAgLy8gc2VydmVyRmFjdG9yeUlkLCBzZXJ2ZXIsIHRydWUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotLy8gIAkJaWYgKHNlcnZlciAhPSBudWxsKQotLy8gIAkJewotLy8gIAkJCVN0cmluZyBob3N0bmFtZSA9IHNlcnZlci5nZXRIb3N0KCk7Ci0vLwotLy8gIAkJCS8vIGdldCBTZXJ2ZXJQb3J0Ci0vLyAgCQkJaW50IHBvcnROdW1iZXIgPSAwOwotLy8KLS8vICAJICAgICAgICAgIFNlcnZlclBvcnRbXSBwb3J0cyA9IHNlcnZlci5nZXRTZXJ2ZXJQb3J0cyhudWxsKTsKLS8vICAJICAgICAgICAgIFNlcnZlclBvcnQgcG9ydCA9IG51bGw7Ci0vLyAgCSAgICAgICAgICBmb3IgKGludCBpdCA9IDA7IGl0PHBvcnRzLmxlbmd0aDsgaXQrKykKLS8vICAJICAgICAgICAgIHsKLS8vICAJICAgICAgICAgICAgU2VydmVyUG9ydCBwID0gcG9ydHNbaXRdOwotLy8gIAkgICAgICAgICAgICBTdHJpbmcgcHJvdG9jb2wgPSBwLmdldFByb3RvY29sKCk7Ci0vLyAgCSAgICAgICAgICAgIGlmIChwcm90b2NvbCAhPSBudWxsICYmIHByb3RvY29sLnRyaW0oKS50b0xvd2VyQ2FzZSgpLmVxdWFscygiaHR0cCIpKQotLy8gIAkgICAgICAgICAgICB7Ci0vLyAgCSAgICAgICAgICAgICAgcG9ydCA9IHA7Ci0vLyAgCSAgICAgICAgICAgICAgcG9ydE51bWJlciA9IHAuZ2V0UG9ydCgpOwotLy8gIAkgICAgICAgICAgICAgIGJyZWFrOwotLy8gIAkgICAgICAgICAgICB9Ci0vLyAgCSAgICAgICAgICB9Ci0vLyAgCSAgICAgICAgICAKLS8vICAJICAgICAgICAKLS8vICAJICAgICAgICAKLS8vICAJICAgICAgICBVUkwgdXJsID0gbnVsbDsKLS8vICAJICAgICAgICB0cnkgewotLy8gIAkgICAgICAgIAl1cmwgPSBuZXcgVVJMKCJodHRwIiwgaG9zdG5hbWUsIHBvcnROdW1iZXIsICIiKTsKLS8vICAJICAgICAgICB9Ci0vLyAgCSAgICAgICAgY2F0Y2goRXhjZXB0aW9uIGUpewotLy8gIAkgICAgICAgIAllLnByaW50U3RhY2tUcmFjZSgpOwotLy8gIAkgICAgICAgIH0KLS8vCi0vLyAgCSAgICAgICAgCi0vLyAgCQkJLy9VUkwgdXJsID0gKChJVVJMUHJvdmlkZXIpIHNlcnZlckluc3RhbmNlLmdldERlbGVnYXRlKCkpLmdldE1vZHVsZVJvb3RVUkwobW9kdWxlKTsKLS8vICAJCQkKLS8vICAJCQlpZiAodXJsICE9IG51bGwpCi0vLyAgCQkJewotLy8gIAkJCQlTdHJpbmcgcyA9IHVybC50b1N0cmluZygpOwotLy8gIAkJCQl3ZWJQcm9qZWN0VVJMID0gcyArICIvIitwcm9qZWN0LmdldE5hbWUoKTsKLS8vICAJCQkJLy93ZWJQcm9qZWN0VVJMID0gKHMuZW5kc1dpdGgoIi8iKSA/IHMuc3Vic3RyaW5nKDAscy5sZW5ndGgoKS0xKSA6IHMpOwotLy8gIAkJCX0KLS8vICAJCX0KLS8vICAJfQotLy8gCUlMb2cgbG9nID0gbmV3IEVjbGlwc2VMb2coKTsKLS8vICAgIGxvZy5sb2coSUxvZy5JTkZPLCA1MDM2LCBSZXNvdXJjZVV0aWxzLmNsYXNzLCAiZ2V0V2ViUHJvamVjdFVSTCIsICJwcm9qZWN0PSIrcHJvamVjdCsiLHdlYlByb2plY3RVUkw9Iit3ZWJQcm9qZWN0VVJMKTsKLS8vICAJcmV0dXJuIHdlYlByb2plY3RVUkw7ICAJCi0vLyAgfQotCS8qKgotCSAqIFJldHVybnMgdGhlIFVSTCBzdHJpbmcgY29ycmVzcG9uZGluZyB0byB0aGUgd2ViIHNlcnZlciBtb2R1bGUgcm9vdCBvZiB0aGUKLQkgKiBwcm9qZWN0IGluIGEgc2VydmVyIGluc3RhbmNlIG9yIG51bGwgaWYgdGhlIHByb2plY3QgaGFzIG5vIFdlYiBuYXR1cmUgb3IKLQkgKiBoYXMgbm8gYXNzb2NpYXRpb24gdG8gYSBzZXJ2ZXIgaW5zdGFuY2UuCi0JICogCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiAgICAgICAgICAgIFRoZSBwcm9qZWN0LgotCSAqIEByZXR1cm4gVGhlIHdlYiBzZXJ2ZXIgbW9kdWxlIHJvb3QgVVJMIG9yIG51bGwgaWYgdGhlIHByb2plY3QgaGFzIG5vIFdlYgotCSAqICAgICAgICAgbmF0dXJlIG9yIGhhcyBubyBhc3NvY2lhdGlvbiB0byBhIHNlcnZlciBpbnN0YW5jZS4KLQkgKiBAZGVwcmVjYXRlZCBiZWxvbmdzIGluIFNlcnZlclV0aWxzCi0JICoKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRXZWJQcm9qZWN0VVJMKElQcm9qZWN0IHByb2plY3QpIHsKLQkJU3RyaW5nIHdlYlByb2plY3RVUkwgPSBudWxsOwotCQlJTW9kdWxlIG1vZHVsZSA9IGdldE1vZHVsZShwcm9qZWN0KTsKLQkJaWYgKG1vZHVsZSAhPSBudWxsKSB7Ci0JCQlJU2VydmVyIHNlcnZlckluc3RhbmNlID0gU2VydmVyVXRpbHMuZ2V0U2VydmVyRm9yTW9kdWxlKG1vZHVsZSk7Ci0JCQlpZiAoc2VydmVySW5zdGFuY2UgIT0gbnVsbCkgewotCQkJCVVSTCB1cmwgPSAoKElVUkxQcm92aWRlcilzZXJ2ZXJJbnN0YW5jZS5nZXRBZGFwdGVyKElVUkxQcm92aWRlci5jbGFzcykpLmdldE1vZHVsZVJvb3RVUkwobW9kdWxlKTsKLQkJCQlpZiAodXJsICE9IG51bGwpIHsKLQkJCQkJU3RyaW5nIHMgPSB1cmwudG9TdHJpbmcoKTsKLQkJCQkJd2ViUHJvamVjdFVSTCA9IChzLmVuZHNXaXRoKCIvIikgPyBzLnN1YnN0cmluZygwLCBzCi0JCQkJCQkJLmxlbmd0aCgpIC0gMSkgOiBzKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJSUxvZyBsb2cgPSBFbnZpcm9ubWVudFNlcnZpY2UuZ2V0RWNsaXBzZUxvZygpOwotCQlsb2cubG9nKElMb2cuSU5GTywgNTAzNywgUmVzb3VyY2VVdGlscy5jbGFzcywgImdldFdlYlByb2plY3RVUkwiLAotCQkJCSJwcm9qZWN0PSIgKyBwcm9qZWN0ICsgIix3ZWJQcm9qZWN0VVJMPSIgKyB3ZWJQcm9qZWN0VVJMKTsKLQotCQlyZXR1cm4gd2ViUHJvamVjdFVSTDsKLQl9Ci0KLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqIEByZXR1cm4KLQkgKiAKLQkgKiBAZGVwcmVjYXRlZCBzaG91bGQgYmUgaW4gU2VydmVyVXRpbHMKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRFbmNvZGVkV2ViUHJvamVjdFVSTChJUHJvamVjdCBwcm9qZWN0KSB7Ci0JCVN0cmluZyB1cmwgPSBnZXRXZWJQcm9qZWN0VVJMKHByb2plY3QpOwotCQlpZiAodXJsICE9IG51bGwpIHsKLQkJCWludCBpbmRleCA9IHVybC5sYXN0SW5kZXhPZignLycpOwotCQkJaWYgKGluZGV4ICE9IC0xKSB7Ci0JCQkJU3RyaW5nQnVmZmVyIGVuY29kZWRVUkwgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCQkJZW5jb2RlZFVSTC5hcHBlbmQodXJsLnN1YnN0cmluZygwLCBpbmRleCArIDEpKTsKLQkJCQl0cnkgewotCQkJCQlTdHJpbmcgY3R4dFJvb3QgPSBVUkxFbmNvZGVyLmVuY29kZSh1cmwuc3Vic3RyaW5nKGluZGV4ICsgMSwgdXJsLmxlbmd0aCgpKSwgIlVURi04Iik7Ci0JCQkJCWludCBwbHVzSW5kZXggPSBjdHh0Um9vdC5pbmRleE9mKCcrJyk7Ci0JCQkJCXdoaWxlIChwbHVzSW5kZXggIT0gLTEpIHsKLQkJCQkJCVN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJCQkJCXNiLmFwcGVuZChjdHh0Um9vdC5zdWJzdHJpbmcoMCwgcGx1c0luZGV4KSk7Ci0JCQkJCQlzYi5hcHBlbmQoIiUyMCIpOwotCQkJCQkJc2IuYXBwZW5kKGN0eHRSb290LnN1YnN0cmluZyhwbHVzSW5kZXggKyAxLCBjdHh0Um9vdAotCQkJCQkJCS5sZW5ndGgoKSkpOwotCQkJCQkJY3R4dFJvb3QgPSBzYi50b1N0cmluZygpOwotCQkJCQkJcGx1c0luZGV4ID0gY3R4dFJvb3QuaW5kZXhPZignKycpOwotCQkJCQl9Ci0JCQkJCWVuY29kZWRVUkwuYXBwZW5kKGN0eHRSb290KTsKLQkJCQl9Y2F0Y2ggKElPRXhjZXB0aW9uIGlvKXsKLQkJCQkJLy9oYW5kbGVyIGV4Y2VwdGlvbgotCQkJCX0JCQkJCi0JCQkJdXJsID0gZW5jb2RlZFVSTC50b1N0cmluZygpOwotCQkJfQotCQl9Ci0JCXJldHVybiB1cmw7Ci0JfQotCi0JLyoqCi0JICogR2l2ZW4gdGhlIDxjb2RlPmFic29sdXRlUGF0aDwvY29kZT4gb2YgYSBKYXZhIHJlc291cmNlLCByZXR1cm5zIHRoZQotCSAqIHBhY2thZ2UgbmFtZSBvZiB0aGUgcmVzb3VyY2Ugb3IgbnVsbCBpZiB0aGUgcmVzb3VyY2UgaXMgbm90IHByb3Blcmx5Ci0JICogbG9jYXRlZCBpbiBhIHByb2plY3Qgb3IgZm9sZGVyIG9uIHRoZSBidWlsZCBjbGFzc3BhdGggb3IgdGhhdCBpcyB0aGUKLQkgKiBidWlsZCBvdXRwdXQgcGF0aC4KLQkgKiAKLQkgKiBAcGFyYW0gYWJzb2x1dGVQYXRoCi0JICogICAgICAgICAgICBUaGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgSmF2YSByZXNvdXJjZS4KLQkgKiBAcmV0dXJuIHRoZSBwYWNrYWdlIG5hbWUgb2YgdGhlIEphdmEgcmVzb3VyY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0SmF2YVJlc291cmNlUGFja2FnZU5hbWUoSVBhdGggYWJzb2x1dGVQYXRoKSB7Ci0JCXRyeSB7Ci0JCQlJUGF0aCBqYXZhRm9sZGVyUGF0aCA9IGFic29sdXRlUGF0aC5yZW1vdmVMYXN0U2VnbWVudHMoMSk7Ci0JCQlJUHJvamVjdCBwcm9qZWN0ID0gZ2V0UHJvamVjdE9mKGFic29sdXRlUGF0aCk7Ci0JCQlJSmF2YVByb2plY3QgamF2YVByb2plY3QgPSBKYXZhQ29yZS5jcmVhdGUocHJvamVjdCk7Ci0JCQlpZiAoamF2YVByb2plY3QgIT0gbnVsbCkgewotCQkJCUlQYWNrYWdlRnJhZ21lbnQgZnJhZ21lbnQgPSBqYXZhUHJvamVjdAotCQkJCQkJLmZpbmRQYWNrYWdlRnJhZ21lbnQoamF2YUZvbGRlclBhdGgpOwotCQkJCWlmIChmcmFnbWVudCAhPSBudWxsKSB7Ci0JCQkJCXJldHVybiBmcmFnbWVudC5nZXRFbGVtZW50TmFtZSgpOwotCQkJCX0KLQkJCQlJUGF0aCBvdXRwdXRQYXRoID0gZ2V0SmF2YU91dHB1dExvY2F0aW9uKHByb2plY3QpOwotCQkJCWlmIChvdXRwdXRQYXRoLmlzUHJlZml4T2YoamF2YUZvbGRlclBhdGgpKSB7Ci0JCQkJCUlQYXRoIGphdmFQYWNrYWdlUGF0aCA9IGphdmFGb2xkZXJQYXRoCi0JCQkJCQkJLnJlbW92ZUZpcnN0U2VnbWVudHMob3V0cHV0UGF0aC5zZWdtZW50Q291bnQoKSk7Ci0JCQkJCXJldHVybiBqYXZhUGFja2FnZVBhdGguaXNFbXB0eSgpID8gbnVsbCA6IGphdmFQYWNrYWdlUGF0aAotCQkJCQkJCS50b1N0cmluZygpLnJlcGxhY2UoSVBhdGguU0VQQVJBVE9SLCAnLicpOwotCQkJCX0KLQkJCX0KLQkJfSBjYXRjaCAoSmF2YU1vZGVsRXhjZXB0aW9uIGUpIHsKLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBHaXZlbiB0aGUgPGNvZGU+YWJzb2x1dGVQYXRoPC9jb2RlPiBvZiBhIEphdmEgcmVzb3VyY2UsIHJldHVybnMgdGhlCi0JICogcGFja2FnZSBuYW1lIG9mIHRoZSByZXNvdXJjZSBhcyBhIHJlbGF0aXZlIHBhdGhuYW1lIG9yIG51bGwgaWYgdGhlCi0JICogcmVzb3VyY2UgaXMgbm90IHByb3Blcmx5IGxvY2F0ZWQgaW4gYSBwcm9qZWN0IG9yIGZvbGRlciBvbiB0aGUgYnVpbGQKLQkgKiBjbGFzc3BhdGguCi0JICogCi0JICogQHBhcmFtIGFic29sdXRlUGF0aAotCSAqICAgICAgICAgICAgVGhlIGFic29sdXRlIHBhdGggb2YgdGhlIEphdmEgcmVzb3VyY2UuCi0JICogQHJldHVybiB0aGUgcGFja2FnZSBuYW1lIG9mIHRoZSBKYXZhIHJlc291cmNlIGFzIGEgcmVsYXRpdmUgcGF0aC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElQYXRoIGdldEphdmFSZXNvdXJjZVBhY2thZ2VQYXRoKElQYXRoIGFic29sdXRlUGF0aCkgewotCQlTdHJpbmcgcGFja2FnZU5hbWUgPSBSZXNvdXJjZVV0aWxzCi0JCQkJLmdldEphdmFSZXNvdXJjZVBhY2thZ2VOYW1lKGFic29sdXRlUGF0aCk7Ci0JCXJldHVybiAocGFja2FnZU5hbWUgPT0gbnVsbCA/IG51bGwgOiBuZXcgUGF0aChwYWNrYWdlTmFtZS5yZXBsYWNlKCcuJywKLQkJCQlJUGF0aC5TRVBBUkFUT1IpKSk7Ci0JfQotCi0JLyoqCi0JICogR2l2ZW4gdGhlIDxjb2RlPmFic29sdXRlUGF0aDwvY29kZT4gb2YgYSBKYXZhIHJlc291cmNlLCByZXR1cm5zIHRoZQotCSAqIGFic29sdXRlIHBhdGggb2YgdGhlIHByb2plY3Qgb3IgZm9sZGVyIHRoYXQgaXMgb24gdGhlIGJ1aWxkIGNsYXNzcGF0aCBvcgotCSAqIGlzIHRoZSBidWlsZCBvdXRwdXQgcGF0aCBhbmQgdGhhdCBjb250YWlucyB0aGUgZnVsbHkgcXVhbGlmaWVkIEphdmEKLQkgKiByZXNvdXJjZSwgb3IgbnVsbCBpZiBubyBzdWNoIHByb2plY3Qgb3IgZm9sZGVyIGV4aXN0cy4KLQkgKiAKLQkgKiBAcGFyYW0gYWJzb2x1dGVQYXRoCi0JICogICAgICAgICAgICBUaGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgSmF2YSByZXNvdXJjZS4KLQkgKiBAcmV0dXJuIFRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBwcm9qZWN0IG9yIGZvbGRlciBjb250YWluaW5nIHRoZSBmdWxseQotCSAqICAgICAgICAgcXVhbGlmaWVkIEphdmEgcmVzb3VyY2UuCi0JICogQGRlcHJlY2F0ZWQgbm90IHVzZWQKLQkgKi8KLQlwdWJsaWMgc3RhdGljIElQYXRoIGdldEphdmFSZXNvdXJjZVJvb3RQYXRoKElQYXRoIGFic29sdXRlUGF0aCkgewotCQl0cnkgewotCQkJSVByb2plY3QgcHJvamVjdCA9IGdldFByb2plY3RPZihhYnNvbHV0ZVBhdGgpOwotCQkJSUphdmFQcm9qZWN0IGphdmFQcm9qZWN0ID0gSmF2YUNvcmUuY3JlYXRlKHByb2plY3QpOwotCQkJaWYgKGphdmFQcm9qZWN0ICE9IG51bGwpIHsKLQkJCQlJUGFja2FnZUZyYWdtZW50Um9vdFtdIHBmcnMgPSBqYXZhUHJvamVjdAotCQkJCQkJLmdldFBhY2thZ2VGcmFnbWVudFJvb3RzKCk7Ci0JCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwZnJzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJCUlSZXNvdXJjZSBmcmFnbWVudFJvb3QgPSBwZnJzW2ldLmdldENvcnJlc3BvbmRpbmdSZXNvdXJjZSgpOwotCQkJCQlpZiAoZnJhZ21lbnRSb290ICE9IG51bGwpIHsKLQkJCQkJCUlQYXRoIGZyYWdtZW50UGF0aCA9IGZyYWdtZW50Um9vdC5nZXRGdWxsUGF0aCgpOwotCQkJCQkJaWYgKGZyYWdtZW50UGF0aC5pc1ByZWZpeE9mKGFic29sdXRlUGF0aCkpIHsKLQkJCQkJCQlyZXR1cm4gZnJhZ21lbnRQYXRoOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfQotCQkJCUlQYXRoIG91dHB1dFBhdGggPSBnZXRKYXZhT3V0cHV0TG9jYXRpb24ocHJvamVjdCk7Ci0JCQkJaWYgKG91dHB1dFBhdGguaXNQcmVmaXhPZihhYnNvbHV0ZVBhdGgpKSB7Ci0JCQkJCXJldHVybiBvdXRwdXRQYXRoOwotCQkJCX0KLQkJCX0KLQkJfSBjYXRjaCAoSmF2YU1vZGVsRXhjZXB0aW9uIGUpIHsKLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBEZXRlcm1pbmVzIGFuIFVSTCAoSFRUUCBvciBGSUxFKSB0byBhbiBFY2xpcHNlIHJlc291cmNlLCByZXR1cm5pbmcgdGhlCi0JICogVVJMIHN0cmluZyBpZiBzdWNjZXNzZnVsIGFuZCBmYWxzZSBvdGhlcndpc2UuIEEgdmFsdWUgb2YgbnVsbCB3aWxsCi0JICogZGVmaW5pdGVseSBiZSByZXR1cm5lZCBpZiBhbnkgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBub3QgbWV0OgotCSAqIDxvbD4KLQkgKiA8bGk+VGhlIGFic29sdXRlIHBhdGggYmVnaW5zIHdpdGggYSBXZWIgUHJvamVjdC4KLQkgKiA8bGk+VGhlIGxlYWRpbmcgcG9ydGlvbiBvZiB0aGUgYWJzb2x1dGUgcGF0aCBtYXRjaGVzIHRoZSBwYXRoIG9mIHRoZQotCSAqIGNvbnRhaW5lciByZXR1cm5lZCBieSB7I2xpbmsgI2dldFdlYk1vZHVsZVNlcnZlclJvb3QKLQkgKiBnZXRXZWJNb2R1bGVTZXJ2ZXJSb290fSBmb3IgdGhlIHByb2plY3QuCi0JICogPGxpPlRoZSBwYXRoIGRvZXMgbm90IGxlYWQgdG8gdGhlIFdFQi1JTkYgZm9sZGVyIG9yIGFueSBkZXNjZW5kZW50Ci0JICogdGhlcmVvZi4KLQkgKiA8bGk+VGhlIFdlYiBQcm9qZWN0IGlzIGFzc29jaWF0ZWQgd2l0aCBhbiBleHBsaWNpdCBvciBkZWZhdWx0IHNlcnZlcgotCSAqIGluc3RhbmNlLgotCSAqIDwvb2w+Ci0JICogCi0JICogQHBhcmFtIGFic29sdXRlUGF0aAotCSAqICAgICAgICAgICAgVGhlIGFic29sdXRlIHBhdGggb2YgdGhlIHJlc291cmNlLgotCSAqIEByZXR1cm4gVGhlIFVSTCBvZiB0aGUgZmlsZSwgb3IgbnVsbCBpZiBubyBVUkwgY2FuIGJlIGRldGVybWluZWQuCi0JICogQGRlcHJlY2F0ZWQgbm90IHVzZWQKLQkgKi8KLS8vCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFVSTEZyb21QYXRoKElQYXRoIGFic29sdXRlUGF0aCwKLS8vCQkJU3RyaW5nIHNlcnZlckZhY3RvcnlJZCwgSVNlcnZlciBzZXJ2ZXIpIHsKLS8vCQlyZXR1cm4gZ2V0VVJMRnJvbVBhdGgoYWJzb2x1dGVQYXRoLCBnZXRXZWJQcm9qZWN0VVJMKAotLy8JCQkJZ2V0UHJvamVjdE9mKGFic29sdXRlUGF0aCksIHNlcnZlckZhY3RvcnlJZCwgc2VydmVyKSk7Ci0vLwl9Ci0KLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gYWJzb2x1dGVQYXRoCi0JICogQHBhcmFtIHdlYlByb2plY3RVUkwKLQkgKiBAcmV0dXJuCi0JICogQGRlcHJlY2F0ZWQgbm90IHVzZWQKLQkgKi8KLS8vCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFVSTEZyb21QYXRoKElQYXRoIGFic29sdXRlUGF0aCwgU3RyaW5nIHdlYlByb2plY3RVUkwpIHsKLS8vCQlTdHJpbmdCdWZmZXIgdXJsID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotLy8JCUlQcm9qZWN0IHByb2plY3QgPSBnZXRQcm9qZWN0T2YoYWJzb2x1dGVQYXRoKTsKLS8vCQlJQ29udGFpbmVyIHdlYk1vZHVsZVNlcnZlclJvb3QgPSBnZXRXZWJNb2R1bGVTZXJ2ZXJSb290KHByb2plY3QpOwotLy8JCWlmICh3ZWJNb2R1bGVTZXJ2ZXJSb290ICE9IG51bGwpIHsKLS8vCQkJSVBhdGggd2ViTW9kdWxlU2VydmVyUm9vdFBhdGggPSB3ZWJNb2R1bGVTZXJ2ZXJSb290LmdldEZ1bGxQYXRoKCk7Ci0vLwkJCWlmICh3ZWJNb2R1bGVTZXJ2ZXJSb290UGF0aC5pc1ByZWZpeE9mKGFic29sdXRlUGF0aCkpIHsKLS8vCQkJCWludCBudW1TZWdtZW50ID0gd2ViTW9kdWxlU2VydmVyUm9vdFBhdGguc2VnbWVudENvdW50KCk7Ci0vLwkJCQlpbnQgbnVtU2VnbWVudEZyb21QYXRoID0gYWJzb2x1dGVQYXRoLnNlZ21lbnRDb3VudCgpOwotLy8JCQkJaWYgKG51bVNlZ21lbnRGcm9tUGF0aCA+IG51bVNlZ21lbnQpIHsKLS8vCQkJCQlTdHJpbmcgbmV4dFNlZ21lbnQgPSBhYnNvbHV0ZVBhdGguc2VnbWVudChudW1TZWdtZW50KTsKLS8vCQkJCQkvLyBjaGVjayBpZiB0aGUgc2VnbWVudCBhZnRlciB0aGUgV2ViTW9kdWxlU2VydmVyUm9vdCBpcwotLy8JCQkJCS8vIFdFQi1JTkYgKGlnbm9yaW5nIGNhc2UpCi0vLwkJCQkJaWYgKG5leHRTZWdtZW50ICE9IG51bGwJJiYgIW5leHRTZWdtZW50LmVxdWFsc0lnbm9yZUNhc2UoIldFQi1JTkYiKSkgewotLy8JCQkJCQlJUGF0aCByZWxhdGl2ZVBhdGggPSBhYnNvbHV0ZVBhdGgucmVtb3ZlRmlyc3RTZWdtZW50cyhudW1TZWdtZW50KTsKLS8vCQkJCQkJaWYgKHdlYlByb2plY3RVUkwgIT0gbnVsbCkKLS8vCQkJCQkJCXVybC5hcHBlbmQod2ViUHJvamVjdFVSTCkuYXBwZW5kKElQYXRoLlNFUEFSQVRPUikuYXBwZW5kKHJlbGF0aXZlUGF0aC50b1N0cmluZygpKTsKLS8vCQkJCQl9Ci0vLwkJCQl9IGVsc2UgaWYgKG51bVNlZ21lbnRGcm9tUGF0aCA9PSBudW1TZWdtZW50KQotLy8JCQkJCXVybC5hcHBlbmQod2ViUHJvamVjdFVSTCk7Ci0vLwkJCX0KLS8vCQl9Ci0vLwkJaWYgKHVybC5sZW5ndGgoKSA8IDEpIHsKLS8vCQkJSVdvcmtzcGFjZVJvb3Qgd29ya3NwYWNlID0gZ2V0V29ya3NwYWNlUm9vdCgpOwotLy8JCQl1cmwuYXBwZW5kKGdldFJlc291cmNlVVJJKHdvcmtzcGFjZS5nZXRGaWxlKGFic29sdXRlUGF0aCkpKTsKLS8vCQl9Ci0vLwkJSUxvZyBsb2cgPSBuZXcgRWNsaXBzZUxvZygpOwotLy8JCWxvZy5sb2coSUxvZy5JTkZPLCA1MDM4LCBSZXNvdXJjZVV0aWxzLmNsYXNzLCAiZ2V0VVJMRnJvbVBhdGgiLAotLy8JCQkJImFic29sdXRlUGF0aD0iICsgYWJzb2x1dGVQYXRoICsgIix1cmw9IiArIHVybCk7Ci0vLwotLy8JCXJldHVybiB1cmwudG9TdHJpbmcoKTsKLS8vCX0KLQotCS8qKgotCSAqIENvcGllcyBhIHNldCBvZiBmaWxlcyBmcm9tIGEgcGx1Z2luJ3MgaW5zdGFsbGF0aW9uIGxvY2F0aW9uIHRvIGEgbmF0aXZlCi0JICogZGlyZWN0b3J5LiBUaGUgZmlsZXMgYXJlIG5hbWVkIGluIGFuIGluZGV4IGZpbGUgbG9jYXRlZCByZWxhdGl2ZSB0byB0aGUKLQkgKiBwbHVnaW4ncyBpbnN0YWxsYXRpb24gbG9jYXRpb24uCi0JICogCi0JICogQHBhcmFtIHBsdWdpbgotCSAqICAgICAgICAgICAgVGhlIHBsdWdpbiBjb250YWluaW5nIHRoZSBmaWxlcyB0byBjb3B5LiBNdXN0IG5vdCBiZSBudWxsLgotCSAqIEBwYXJhbSBzb3VyY2VQYXRoCi0JICogICAgICAgICAgICBUaGUgcGF0aCwgcmVsYXRpdmUgdG8gdGhlIDxjb2RlPnBsdWdpbjwvY29kZT4gaW5zdGFsbAotCSAqICAgICAgICAgICAgbG9jYXRpb24sIGNvbnRhaW5pbmcgdGhlIGZpbGVzIHRvIGNvcHkuIElmIG51bGwsIHRoZW4gdGhlCi0JICogICAgICAgICAgICBwbHVnaW4gaW5zdGFsbCBsb2NhdGlvbiBpcyB0aGUgc291cmNlIHBhdGggKGllLiBudWxsIGlzCi0JICogICAgICAgICAgICBlcXVpdmFsZW50IHRvICIuIikuCi0JICogQHBhcmFtIGluZGV4UGF0aG5hbWUKLQkgKiAgICAgICAgICAgIEEgZmlsZSBjb250YWluaW5nIGEgd2hpdGVzcGFjZS1kZWxpbWl0dGVkIGxpc3Qgb2YgcGF0aG5hbWVzIG9mCi0JICogICAgICAgICAgICB0aGUgZmlsZXMgdG8gY29weS4gVGhlIHBhdGhuYW1lcyBhcmUgcmVsYXRpdmUgdG8gdGhlCi0JICogICAgICAgICAgICA8Y29kZT5wbHVnaW4gc291cmNlUGF0aDwvY29kZT4uIE11c3Qgbm90IGJlIG51bGwuCi0JICogQHBhcmFtIHRhcmdldFBhdGgKLQkgKiAgICAgICAgICAgIFRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBuYXRpdmUgZGlyZWN0b3J5IHRvIHdoaWNoIHRoZSBmaWxlcwotCSAqICAgICAgICAgICAgd2lsbCBiZSBjb3BpZWQuIFRoZSByZWxhdGl2ZSBwYXRobmFtZXMgb2YgdGhlIGZpbGVzIG5hbWVkIGluCi0JICogICAgICAgICAgICB0aGUgPGNvZGU+aW5kZXhQYXRobmFtZTwvY29kZT4gZmlsZSBhcmUgcHJlc2VydmVkLiBNdXN0IG5vdAotCSAqICAgICAgICAgICAgYmUgbnVsbC4KLQkgKiBAcGFyYW0gcHJvZ3Jlc3NNb25pdG9yCi0JICogICAgICAgICAgICBUaGUgcHJvZ3Jlc3MgbW9uaXRvciBmb3IgdGhlIG9wZXJhdGlvbiwgb3IgbnVsbC4KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICogICAgICAgICAgICAgQW4gZXhjZXB0aW9uIGluZGljYXRpbmcgYW4gSU8gZXJyb3IgaGFzIG9jY3VyZWQuCi0JICovCi0Jc3RhdGljIHB1YmxpYyB2b2lkIGNvcHlJbmRleGVkRmlsZXNUb09TKFBsdWdpbiBwbHVnaW4sIElQYXRoIHNvdXJjZVBhdGgsCi0JCQlJUGF0aCBpbmRleFBhdGhuYW1lLCBJUGF0aCB0YXJnZXRQYXRoLAotCQkJSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUlucHV0U3RyZWFtIGlucHV0ID0gcGx1Z2luLm9wZW5TdHJlYW0oaW5kZXhQYXRobmFtZSk7Ci0JCUVudW1lcmF0aW9uIGZpbGVuYW1lcyA9IFN0cmluZ1V0aWxzLnBhcnNlRmlsZW5hbWVzRnJvbVN0cmVhbShpbnB1dCk7Ci0JCWNvcHlFbnVtZXJhdGVkRmlsZXNUb09TKHBsdWdpbiwgc291cmNlUGF0aCwgZmlsZW5hbWVzLCB0YXJnZXRQYXRoLAotCQkJCXByb2dyZXNzTW9uaXRvcik7Ci0JfQotCi0JLyoqCi0JICogQ29waWVzIGEgc2V0IG9mIGZpbGVzIGZyb20gYSBwbHVnaW4ncyBpbnN0YWxsYXRpb24gbG9jYXRpb24gdG8gYSBuYXRpdmUKLQkgKiBkaXJlY3RvcnkuIFRoZSBmaWxlcyBhcmUgbmFtZWQgaW4gYW4gZW51bWVyYXRpb24uCi0JICogCi0JICogQHBhcmFtIHBsdWdpbgotCSAqICAgICAgICAgICAgVGhlIHBsdWdpbiBjb250YWluaW5nIHRoZSBmaWxlcyB0byBjb3B5LiBNdXN0IG5vdCBiZSBudWxsLgotCSAqIEBwYXJhbSBzb3VyY2VQYXRoCi0JICogICAgICAgICAgICBUaGUgcGF0aCwgcmVsYXRpdmUgdG8gdGhlIDxjb2RlPnBsdWdpbjwvY29kZT4gaW5zdGFsbAotCSAqICAgICAgICAgICAgbG9jYXRpb24sIGNvbnRhaW5pbmcgdGhlIGZpbGVzIHRvIGNvcHkuIElmIG51bGwsIHRoZW4gdGhlCi0JICogICAgICAgICAgICBwbHVnaW4gaW5zdGFsbCBsb2NhdGlvbiBpcyB0aGUgc291cmNlIHBhdGggKGllLiBudWxsIGlzCi0JICogICAgICAgICAgICBlcXVpdmFsZW50IHRvICIuIikuCi0JICogQHBhcmFtIHBhdGhuYW1lcwotCSAqICAgICAgICAgICAgQW4gZW51bWVyYXRpb24gb2YgcGF0aG5hbWVzIG9mIHRoZSBmaWxlcyB0byBjb3B5LiBUaGUKLQkgKiAgICAgICAgICAgIHBhdGhuYW1lcyBhcmUgcmVsYXRpdmUgdG8gdGhlIDxjb2RlPnBsdWdpbiBzb3VyY2VQYXRoPC9jb2RlPi4KLQkgKiAgICAgICAgICAgIE11c3Qgbm90IGJlIG51bGwuCi0JICogQHBhcmFtIHRhcmdldFBhdGgKLQkgKiAgICAgICAgICAgIFRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBuYXRpdmUgZGlyZWN0b3J5IHRvIHdoaWNoIHRoZSBmaWxlcwotCSAqICAgICAgICAgICAgd2lsbCBiZSBjb3BpZWQuIFRoZSByZWxhdGl2ZSBwYXRobmFtZXMgb2YgdGhlIGZpbGVzIG5hbWVkIGluCi0JICogICAgICAgICAgICB0aGUgPGNvZGU+cGF0aG5hbWVzPC9jb2RlPiBlbnVtZXJhdGlvbiBhcmUgcHJlc2VydmVkLiBNdXN0Ci0JICogICAgICAgICAgICBub3QgYmUgbnVsbC4KLQkgKiBAcGFyYW0gcHJvZ3Jlc3NNb25pdG9yCi0JICogICAgICAgICAgICBUaGUgcHJvZ3Jlc3MgbW9uaXRvciBmb3IgdGhlIG9wZXJhdGlvbiwgb3IgbnVsbC4KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICogICAgICAgICAgICAgQW4gZXhjZXB0aW9uIGluZGljYXRpbmcgYW4gSU8gZXJyb3IgaGFzIG9jY3VyZWQuCi0JICovCi0Jc3RhdGljIHB1YmxpYyB2b2lkIGNvcHlFbnVtZXJhdGVkRmlsZXNUb09TKFBsdWdpbiBwbHVnaW4sIElQYXRoIHNvdXJjZVBhdGgsCi0JCQlFbnVtZXJhdGlvbiBwYXRobmFtZXMsIElQYXRoIHRhcmdldFBhdGgsCi0JCQlJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJd2hpbGUgKHBhdGhuYW1lcy5oYXNNb3JlRWxlbWVudHMoKSkgewotCQkJU3RyaW5nIGZpbGVuYW1lID0gKFN0cmluZykgcGF0aG5hbWVzLm5leHRFbGVtZW50KCk7Ci0JCQljb3B5RmlsZVRvT1MocGx1Z2luLCBzb3VyY2VQYXRoLCBuZXcgUGF0aChmaWxlbmFtZSksIHRhcmdldFBhdGgsCi0JCQkJCXByb2dyZXNzTW9uaXRvcik7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBDb3BpZXMgYSBmaWxlIGZyb20gYSBwbHVnaW4ncyBpbnN0YWxsYXRpb24gbG9jYXRpb24gdG8gYSBuYXRpdmUKLQkgKiBkaXJlY3RvcnkuCi0JICogCi0JICogQHBhcmFtIHBsdWdpbgotCSAqICAgICAgICAgICAgVGhlIHBsdWdpbiBjb250YWluaW5nIHRoZSBmaWxlcyB0byBjb3B5LiBNdXN0IG5vdCBiZSBudWxsLgotCSAqIEBwYXJhbSBzb3VyY2VQYXRoCi0JICogICAgICAgICAgICBUaGUgcGF0aCwgcmVsYXRpdmUgdG8gdGhlIDxjb2RlPnBsdWdpbjwvY29kZT4gaW5zdGFsbAotCSAqICAgICAgICAgICAgbG9jYXRpb24sIGNvbnRhaW5pbmcgdGhlIGZpbGVzIHRvIGNvcHkuIElmIG51bGwsIHRoZW4gdGhlCi0JICogICAgICAgICAgICBwbHVnaW4gaW5zdGFsbCBsb2NhdGlvbiBpcyB0aGUgc291cmNlIHBhdGggKGllLiBudWxsIGlzCi0JICogICAgICAgICAgICBlcXVpdmFsZW50IHRvICIuIikuCi0JICogQHBhcmFtIHBhdGhuYW1lCi0JICogICAgICAgICAgICBUaGUgcGF0aG5hbWUgb2YgdGhlIGZpbGUgdG8gY29weS4gVGhlIHBhdGhuYW1lIGlzIHJlbGF0aXZlIHRvCi0JICogICAgICAgICAgICB0aGUgPGNvZGU+cGx1Z2luIHNvdXJjZVBhdGg8L2NvZGU+LiBNdXN0IG5vdCBiZSBudWxsLgotCSAqIEBwYXJhbSB0YXJnZXRQYXRoCi0JICogICAgICAgICAgICBUaGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgbmF0aXZlIGRpcmVjdG9yeSB0byB3aGljaCB0aGUgZmlsZQotCSAqICAgICAgICAgICAgd2lsbCBiZSBjb3BpZWQuIFRoZSByZWxhdGl2ZSBwYXRobmFtZSBvZiB0aGUgZmlsZSBpcwotCSAqICAgICAgICAgICAgcHJlc2VydmVkLiBNdXN0IG5vdCBiZSBudWxsLgotCSAqIEBwYXJhbSBwcm9ncmVzc01vbml0b3IKLQkgKiAgICAgICAgICAgIFRoZSBwcm9ncmVzcyBtb25pdG9yIGZvciB0aGUgb3BlcmF0aW9uLCBvciBudWxsLgotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KLQkgKiAgICAgICAgICAgICBBbiBleGNlcHRpb24gaW5kaWNhdGluZyBhbiBJTyBlcnJvciBoYXMgb2NjdXJlZC4KLQkgKi8KLQlzdGF0aWMgcHVibGljIHZvaWQgY29weUZpbGVUb09TKFBsdWdpbiBwbHVnaW4sIElQYXRoIHNvdXJjZVBhdGgsCi0JCQlJUGF0aCBwYXRobmFtZSwgSVBhdGggdGFyZ2V0UGF0aCwgSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IpCi0JCQl0aHJvd3MgSU9FeGNlcHRpb24gewotCQlJUGF0aCB0YXJnZXQgPSB0YXJnZXRQYXRoLmFwcGVuZChwYXRobmFtZSk7Ci0JCUlQYXRoIHNvdXJjZSA9IHNvdXJjZVBhdGggPT0gbnVsbCA/IHBhdGhuYW1lIDogc291cmNlUGF0aAotCQkJCS5hcHBlbmQocGF0aG5hbWUpOwotCQlJbnB1dFN0cmVhbSBpbnB1dCA9IHBsdWdpbi5vcGVuU3RyZWFtKHNvdXJjZSk7Ci0JCU91dHB1dFN0cmVhbSBvdXRwdXQgPSBuZXcgRmlsZU91dHB1dFN0cmVhbSh0YXJnZXQudG9PU1N0cmluZygpKTsKLQkJY29weVN0cmVhbShpbnB1dCwgb3V0cHV0KTsKLQkJaW5wdXQuY2xvc2UoKTsKLQkJb3V0cHV0LmNsb3NlKCk7Ci0JfQotCi0JLyoqCi0JICogQ29waWVzIGRhdGEgZnJvbSBvbmUgc3RyZWFtIHRvIGFub3RoZXIuCi0JICogCi0JICogQHBhcmFtIGlucHV0Ci0JICogICAgICAgICAgICBUaGUgaW5wdXQgc3RyZWFtLgotCSAqIEBwYXJhbSBvdXRwdXQKLQkgKiAgICAgICAgICAgIFRoZSBvdXRwdXQgc3RyZWFtLgotCSAqIEByZXR1cm4gVGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQuCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqICAgICAgICAgICAgIEFuIGV4Y2VwdGlvbiBpZiBhbiBlcnJvciBvY2N1cnMgd2hpbGUgcHJvY2Vzc2luZyBlaXRoZXIgb2YKLQkgKiAgICAgICAgICAgICB0aGUgc3RyZWFtcy4KLQkgKi8KLQlzdGF0aWMgcHVibGljIGludCBjb3B5U3RyZWFtKElucHV0U3RyZWFtIGlucHV0LCBPdXRwdXRTdHJlYW0gb3V0cHV0KQotCQkJdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJaW50IHQgPSAwOwotCQlieXRlW10gYnVmZmVyID0gbmV3IGJ5dGVbMTAyNF07Ci0JCWludCBuID0gaW5wdXQucmVhZChidWZmZXIpOwotCQl3aGlsZSAobiA+PSAwKSB7Ci0JCQlvdXRwdXQud3JpdGUoYnVmZmVyLCAwLCBuKTsKLQkJCXQgKz0gbjsKLQkJCW4gPSBpbnB1dC5yZWFkKGJ1ZmZlcik7Ci0JCX0KLQkJcmV0dXJuIHQ7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5hdGl2ZSBkaXJlY3RvcnkgcGF0aCBlcXVhbCB0byB0aGUgcGFyZW50IHBvcnRpb24gb2YgdGhlIGdpdmVuCi0JICogPGNvZGU+cGF0aG5hbWU8L2NvZGU+LiBJZiB0aGUgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzLCB0aGVuIG5vIGFjdGlvbgotCSAqIGlzIHRha2VuLgotCSAqIAotCSAqIEBwYXJhbSBwYXRobmFtZQotCSAqICAgICAgICAgICAgVGhlIHBhdGhuYW1lIHRvIHRoZSBmaWxlIHdob3NlIHBhcmVudCBkaXJlY3Rvcnkgc2hvdWxkIGJlCi0JICogICAgICAgICAgICBjcmVhdGVkLgotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KLQkgKiAgICAgICAgICAgICBBbiBleGNlcHRpb24gaWYgYW4gSU8gZXJyb3Igb2NjdXJzLgotCSAqLwotCXN0YXRpYyBwdWJsaWMgdm9pZCBjcmVhdGVQYXJlbnREaXJlY3RvcnlGb3IoU3RyaW5nIHBhdGhuYW1lKQotCQkJdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJRmlsZSBmaWxlID0gbmV3IEZpbGUocGF0aG5hbWUpOwotCQlGaWxlIHBhcmVudCA9IGZpbGUuZ2V0UGFyZW50RmlsZSgpOwotCQlpZiAocGFyZW50ICE9IG51bGwpIHsKLQkJCXBhcmVudC5ta2RpcnMoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIElSZXNvdXJjZSByZXByZXNlbnRlZCBieSB0aGUgZ2l2ZW4gc2VsZWN0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBvYmplY3QKLQkgKiAgICAgICAgICAgIFRoZSBzZWxlY3Rpb24KLQkgKiBAcmV0dXJuIElSZXNvdXJjZSBpZiB0aGUgc2VsZWN0aW9uIHJlcHJlc2VudHMgYW4gSVJlc291cmNlLiBSZXR1cm5zIG51bGwKLQkgKiAgICAgICAgIG90aGVyd2lzZS4KLQkgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24KLQkgKi8KLQlzdGF0aWMgcHVibGljIElSZXNvdXJjZSBnZXRSZXNvdXJjZUZyb21TZWxlY3Rpb24oT2JqZWN0IG9iaikKLQkJCXRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJSVJlc291cmNlIHJlcyA9IG51bGw7Ci0JCWlmIChvYmogIT0gbnVsbCkgewotCQkJaWYgKG9iaiBpbnN0YW5jZW9mIElSZXNvdXJjZSkgewotCQkJCXJlcyA9IChJUmVzb3VyY2UpIG9iajsKLQkJCX0gZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgSUphdmFFbGVtZW50KSB7Ci0JCQkJSUphdmFFbGVtZW50IGphdmFFbGVtZW50ID0gKElKYXZhRWxlbWVudCkgb2JqOwotCQkJCXJlcyA9IGphdmFFbGVtZW50LmdldENvcnJlc3BvbmRpbmdSZXNvdXJjZSgpOwotCQkJfSBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBFbnRlcnByaXNlQmVhbikgewotCQkJCUVudGVycHJpc2VCZWFuIGVqYkJlYW4gPSAoRW50ZXJwcmlzZUJlYW4pIG9iajsKLQkJCQlJUHJvamVjdCBlamJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KGVqYkJlYW4pOwotCQkJCWlmIChlamJQcm9qZWN0ICE9IG51bGwpCi0JCQkJCXJlcyA9IGVqYlByb2plY3Q7Ci0JCQl9Ci0KLQkJfQotCi0JCXJldHVybiByZXM7Ci0JfQotCi0JLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JLy8gTmF1Z2h0eSBiaXRzLi4uCi0JLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLQkvLwotCS8vIENyZWF0ZXMgYSBwYXRoIG9mIGZvbGRlcnMuCi0JLy8gRG8gbm90IGNhbGwgd2l0aCBhbiBhYnNvbHV0ZVBhdGggb2YgbGVzcyB0aGFuIG9uZSBzZWdtZW50LgotCS8vCi0JLy8gIHByaXZhdGUgc3RhdGljIElDb250YWluZXIgbWFrZUZvbGRlclBhdGggKAotCS8vICAgICAgICBSZXNvdXJjZUNvbnRleHQgcmVzb3VyY2VDb250ZXh0LAotCS8vICAgIElQYXRoIGFic29sdXRlUGF0aCwKLQkvLyAgICBJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciwKLQkvLyAgICBTdGF0dXNNb25pdG9yIHN0YXR1c01vbml0b3IKLQkvLyAgKQotCS8vICB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCS8vICB7Ci0JLy8gICAgaWYgKGFic29sdXRlUGF0aC5zZWdtZW50Q291bnQoKSA8PSAxKQotCS8vICAgIHsKLQkvLyAgICAgIHJldHVybiBnZXRXb3Jrc3BhY2VSb290KCkuZ2V0UHJvamVjdChhYnNvbHV0ZVBhdGguc2VnbWVudCgwKSk7Ci0JLy8gICAgfQotCS8vICAgIGVsc2UKLQkvLyAgICB7Ci0JLy8gICAgICBJQ29udGFpbmVyIHBhcmVudCA9IG1ha2VGb2xkZXJQYXRoKHJlc291cmNlQ29udGV4dCwKLQkvLyBhYnNvbHV0ZVBhdGgucmVtb3ZlTGFzdFNlZ21lbnRzKDEpLCBwcm9ncmVzc01vbml0b3IsIHN0YXR1c01vbml0b3IpOwotCS8vICAgICAgU3RyaW5nIGZvbGRlck5hbWUgPSBhYnNvbHV0ZVBhdGgubGFzdFNlZ21lbnQoKTsKLQkvLyAgICAgIHJldHVybiBtYWtlRm9sZGVyKHJlc291cmNlQ29udGV4dCwgcGFyZW50LGZvbGRlck5hbWUsIHByb2dyZXNzTW9uaXRvciAsCi0JLy8gc3RhdHVzTW9uaXRvcik7Ci0JLy8gICAgfQotCS8vICB9Ci0JLy8KLQkvLyBDcmVhdGVzIGEgZm9sZGVyIHVuZGVyIGEgY29udGFpbmVyLgotCS8vIFRoZSBjb250YWluZXIgbXVzdCBhbHJlYWR5IGV4aXN0LgotCS8vCi0JLy8gcHJpdmF0ZSBzdGF0aWMgSUZvbGRlciBtYWtlRm9sZGVyICgKLQkvLyAgICAgICAgUmVzb3VyY2VDb250ZXh0IHJlc291cmNlQ29udGV4dCwKLQkvLyAgICBJQ29udGFpbmVyIHBhcmVudCwKLQkvLyAgICBTdHJpbmcgZm9sZGVyTmFtZSwKLQkvLyAgICBJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciwKLQkvLyAgICBTdGF0dXNNb25pdG9yIHN0YXR1c01vbml0b3IKLQkvLyAgKQotCS8vICB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCS8vICB7Ci0JLy8gICAgSVJlc291cmNlIGNoaWxkID0gcGFyZW50LmZpbmRNZW1iZXIoZm9sZGVyTmFtZSk7Ci0JLy8gICAgaWYgKGNoaWxkID09IG51bGwpCi0JLy8gICAgewotCS8vICAgICAgaWYgKCFyZXNvdXJjZUNvbnRleHQuaXNDcmVhdGVGb2xkZXJzRW5hYmxlZCgpKSB7Ci0JLy8gICAgICAgIGludCByZXN1bHQgPSBzdGF0dXNNb25pdG9yLnJlcG9ydFN0YXR1cyhuZXcKLQkvLyBTdGF0dXMoSVN0YXR1cy5XQVJOSU5HLFdlYlNlcnZpY2VQbHVnaW4uSUQsMCwKLQkvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlNlcnZpY2VQbHVnaW4uZ2V0TWVzc2FnZSgiJU1TR19FUlJPUl9GT0xERVJfQ1JFQVRJT05fRElTQUJMRUQiLAotCS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdIHtwYXJlbnQuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLGZvbGRlck5hbWV9KSxudWxsKSwKLQkvLyBnZXRUaHJlZVN0YXRlRmlsZU9wdGlvbnMoKSk7Ci0JLy8gICAgICAgIGlmIChyZXN1bHQgPT0gSVN0YXR1c0RpYWxvZ0NvbnN0YW50cy5DQU5DRUxfSUQpCi0JLy8gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLQkvLwotCS8vICAgICAgICAgIGlmICggcmVzdWx0ID09IElTdGF0dXNEaWFsb2dDb25zdGFudHMuWUVTX1RPX0FMTF9JRCkKLQkvLyAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlQ29udGV4dC5zZXRDcmVhdGVGb2xkZXJzRW5hYmxlZCh0cnVlKTsKLQkvLwotCS8vICAgICAgfQotCS8vICAgICAgSUZvbGRlciBmb2xkZXIgPSBwYXJlbnQuZ2V0Rm9sZGVyKG5ldyBQYXRoKGZvbGRlck5hbWUpKTsKLQkvLyAgICAgIGZvbGRlci5jcmVhdGUodHJ1ZSx0cnVlLHByb2dyZXNzTW9uaXRvcik7Ci0JLy8gICAgICByZXR1cm4gZm9sZGVyOwotCS8vICAgIH0KLQkvLyAgICBlbHNlIGlmIChjaGlsZC5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZPTERFUikKLQkvLyAgICB7Ci0JLy8gICAgICByZXR1cm4gKElGb2xkZXIpY2hpbGQ7Ci0JLy8gICAgfQotCS8vICAgIGVsc2UKLQkvLyAgICB7Ci0JLy8gICAgICB0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcKLQkvLyBTdGF0dXMoSVN0YXR1cy5FUlJPUixXZWJTZXJ2aWNlUGx1Z2luLklELDAsV2ViU2VydmljZVBsdWdpbi5nZXRNZXNzYWdlKCIlTVNHX0VSUk9SX1JFU09VUkNFX05PVF9GT0xERVIiLG5ldwotCS8vIE9iamVjdFtdIHtwYXJlbnQuZ2V0RnVsbFBhdGgoKS5hcHBlbmQoZm9sZGVyTmFtZSkudG9TdHJpbmcoKX0pLG51bGwpKTsKLQkvLyAgICB9Ci0JLy8gIH0KLQotCS8vCi0JLy8gQ3JlYXRlcyBhIGZpbGUgdW5kZXIgYSBjb250YWluZXIuCi0JLy8gVGhlIGNvbnRhaW5lciBtdXN0IGFscmVhZHkgZXhpc3QuCi0JLy8KLQkvLyBwcml2YXRlIHN0YXRpYyBJRmlsZSBtYWtlRmlsZSAoCi0JLy8gICAgUmVzb3VyY2VDb250ZXh0IHJlc291cmNlQ29udGV4dCwKLQkvLyAgICBJQ29udGFpbmVyIHBhcmVudCwKLQkvLyAgICBTdHJpbmcgZmlsZU5hbWUsCi0JLy8gICAgSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0sCi0JLy8gICAgSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IsCi0JLy8gICAgU3RhdHVzTW9uaXRvciBzdGF0dXNNb25pdG9yCi0JLy8gICkKLQkvLyAgdGhyb3dzIENvcmVFeGNlcHRpb24KLQkvLyAgewotCS8vICAgIElSZXNvdXJjZSBjaGlsZCA9IHBhcmVudC5maW5kTWVtYmVyKGZpbGVOYW1lKTsKLQkvLyAgICBpZiAoY2hpbGQgIT0gbnVsbCkKLQkvLyAgICB7Ci0JLy8gICAgICBpZiAoY2hpbGQuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFKQotCS8vICAgICAgewotCS8vICAgICAgICBpZiAoIXJlc291cmNlQ29udGV4dC5pc092ZXJ3cml0ZUZpbGVzRW5hYmxlZCgpKSB7Ci0JLy8gICAgICAgICAgaW50IHJlc3VsdCA9IHN0YXR1c01vbml0b3IucmVwb3J0U3RhdHVzKCBuZXcKLQkvLyBTdGF0dXMoSVN0YXR1cy5XQVJOSU5HLFdlYlNlcnZpY2VQbHVnaW4uSUQsMCwKLQkvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlNlcnZpY2VQbHVnaW4uZ2V0TWVzc2FnZSgiJU1TR19FUlJPUl9GSUxFX09WRVJXUklURV9ESVNBQkxFRCIsCi0JLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W10ge3BhcmVudC5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksZmlsZU5hbWV9KSxudWxsKSwKLQkvLyBnZXRUaHJlZVN0YXRlRmlsZU9wdGlvbnMoKSk7Ci0JLy8KLQkvLyAgICAgICAgICBpZiAocmVzdWx0ID09IElTdGF0dXNEaWFsb2dDb25zdGFudHMuQ0FOQ0VMX0lEKQotCS8vICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0JLy8KLQkvLyAgICAgICAgICBpZiAoIHJlc3VsdCA9PSBJU3RhdHVzRGlhbG9nQ29uc3RhbnRzLllFU19UT19BTExfSUQpCi0JLy8gICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZUNvbnRleHQuc2V0T3ZlcndyaXRlRmlsZXNFbmFibGVkKHRydWUpOwotCS8vICAgICAgICB9Ci0JLy8gICAgICAgIC8vV2UgaGF2ZSBwZXJtaXNzaW9uIHRvIG92ZXJ3cml0ZSBzbyBjaGVjayBpZiBmaWxlIGlzIHJlYWQtb25seQotCS8vICAgICAgICBpZiAoY2hpbGQuaXNSZWFkT25seSgpKQotCS8vICAgICAgICB7Ci0JLy8gICAgICAgICAgaWYgKCFyZXNvdXJjZUNvbnRleHQuaXNDaGVja291dEZpbGVzRW5hYmxlZCgpKSB7Ci0JLy8KLQkvLyAgICAgICAgICAgIGludCByZXN1bHQgPSBzdGF0dXNNb25pdG9yLnJlcG9ydFN0YXR1cyggbmV3Ci0JLy8gU3RhdHVzKElTdGF0dXMuV0FSTklORyxXZWJTZXJ2aWNlUGx1Z2luLklELDAsCi0JLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJTZXJ2aWNlUGx1Z2luLmdldE1lc3NhZ2UoIiVNU0dfRVJST1JfRklMRV9DSEVDS09VVF9ESVNBQkxFRCIsCi0JLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W10ge3BhcmVudC5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksZmlsZU5hbWV9KSxudWxsKSwKLQkvLyBnZXRUaHJlZVN0YXRlRmlsZU9wdGlvbnMoKSk7Ci0JLy8KLQkvLyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gSVN0YXR1c0RpYWxvZ0NvbnN0YW50cy5DQU5DRUxfSUQpCi0JLy8gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLQkvLwotCS8vICAgICAgICAgICAgaWYgKCByZXN1bHQgPT0gSVN0YXR1c0RpYWxvZ0NvbnN0YW50cy5ZRVNfVE9fQUxMX0lEKQotCS8vICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VDb250ZXh0LnNldENoZWNrb3V0RmlsZXNFbmFibGVkKHRydWUpOwotCS8vICAgICAgICAgIH0KLQkvLwotCS8vICAgICAgICAgIElGaWxlW10gZmlsZXMgPSBuZXcgSUZpbGVbMV07Ci0JLy8gICAgICAgICAgZmlsZXNbMF0gPSAoSUZpbGUpY2hpbGQ7Ci0JLy8KLQkvLyAgICAgICAgICBpZiAoCi0JLy8gIXN0YXR1c01vbml0b3IucmVwb3J0U3RhdHVzKGdldFdvcmtzcGFjZSgpLnZhbGlkYXRlRWRpdChmaWxlcyxudWxsKSkpCi0JLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotCS8vICAgICAgICB9Ci0JLy8KLQkvLyAgICAgICAgLy9DaGFuZ2UgdGhlIGNvbnRlbnRzIG9mIHRoZSBleGlzdGluZyBmaWxlLgotCS8vICAgICAgICAgICAgSUZpbGUgZmlsZSA9IHBhcmVudC5nZXRGaWxlKG5ldyBQYXRoKGZpbGVOYW1lKSk7Ci0JLy8gICAgICAgIGZpbGUuc2V0Q29udGVudHMoaW5wdXRTdHJlYW0sdHJ1ZSx0cnVlLHByb2dyZXNzTW9uaXRvcik7Ci0JLy8gICAgICAgIHJldHVybiBmaWxlOwotCS8vCi0JLy8gICAgICB9Ci0JLy8gICAgICBlbHNlCi0JLy8gICAgICB7Ci0JLy8gICAgICAgIHRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldwotCS8vIFN0YXR1cyhJU3RhdHVzLkVSUk9SLFdlYlNlcnZpY2VQbHVnaW4uSUQsMCxXZWJTZXJ2aWNlUGx1Z2luLmdldE1lc3NhZ2UoIiVNU0dfRVJST1JfUkVTT1VSQ0VfTk9UX0ZJTEUiLG5ldwotCS8vIE9iamVjdFtdIHtwYXJlbnQuZ2V0RnVsbFBhdGgoKS5hcHBlbmQoZmlsZU5hbWUpfSksbnVsbCkpOwotCS8vICAgICAgfQotCS8vICAgIH0KLQkvLyAgICBlbHNlCi0JLy8gICAgewotCS8vICAgICAgICAvL0NyZWF0ZSBhIG5ldyBmaWxlLgotCS8vICAgICAgICBJRmlsZSBmaWxlID0gcGFyZW50LmdldEZpbGUobmV3IFBhdGgoZmlsZU5hbWUpKTsKLQkvLyAgICAgICAgZmlsZS5jcmVhdGUoaW5wdXRTdHJlYW0sdHJ1ZSxwcm9ncmVzc01vbml0b3IpOwotCS8vICAgICAgICByZXR1cm4gZmlsZTsKLQkvLyAgICB9Ci0JLy8gIH0KLQotCS8qKgotCSAqIERlbGV0ZXMgYSBmaWxlIHVuZGVyIGEgY29udGFpbmVyLiBUaGUgY29udGFpbmVyIG11c3QgYWxyZWFkeSBleGlzdC4KLQkgKiAKLQkgKiBAcGFyYW0gZmlsZSAtCi0JICogICAgICAgICAgICB0aGUgSUZpbGUgdG8gYmUgZGVsZXRlZAotCSAqIEBwYXJhbSBwcm9ncmVzc01vbml0b3IKLQkgKiBAcGFyYW0gc3RhdHVzTW9uaXRvcgotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCBvciBpZiBpdCBleGlzdHMgYW5kIGlzCi0JICogICAgICAgICBzdWNjZXNzZnVsbHkgZGVsZXRlZC4gRmFsc2Ugb3RoZXJ3aXNlLgotCSAqLwotCS8vICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZGVsZXRlRmlsZSAoCi0JLy8gICAgICAgIFJlc291cmNlQ29udGV4dCByZXNvdXJjZUNvbnRleHQsCi0JLy8gICAgSUZpbGUgZmlsZSwKLQkvLyAgICBJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciwKLQkvLyAgICBTdGF0dXNNb25pdG9yIHN0YXR1c01vbml0b3IgKQotCS8vICAgIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JLy8gICAgewotCS8vICAgICAgICBpZiAoZmlsZS5leGlzdHMoKSkKLQkvLyAgICAgICAgewotCS8vICAgICAgICAgICAgICAgIGlmICghcmVzb3VyY2VDb250ZXh0LmlzT3ZlcndyaXRlRmlsZXNFbmFibGVkKCkpIHsKLQkvLyAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHQgPSBzdGF0dXNNb25pdG9yLnJlcG9ydFN0YXR1cyggbmV3Ci0JLy8gU3RhdHVzKElTdGF0dXMuV0FSTklORyxXZWJTZXJ2aWNlUGx1Z2luLklELDAsCi0JLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlNlcnZpY2VQbHVnaW4uZ2V0TWVzc2FnZSgiJU1TR19FUlJPUl9GSUxFX09WRVJXUklURV9ESVNBQkxFRCIsCi0JLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXQotCS8vIHtmaWxlLmdldFBhcmVudCgpLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSxmaWxlLmdldE5hbWUoKX0pLG51bGwpLAotCS8vIGdldFRocmVlU3RhdGVGaWxlT3B0aW9ucygpKTsKLQkvLwotCS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gSVN0YXR1c0RpYWxvZ0NvbnN0YW50cy5DQU5DRUxfSUQpCi0JLy8gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0JLy8KLQkvLyAgICAgICAgICAgICAgICBpZiAoIHJlc3VsdCA9PSBJU3RhdHVzRGlhbG9nQ29uc3RhbnRzLllFU19UT19BTExfSUQpCi0JLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlQ29udGV4dC5zZXRPdmVyd3JpdGVGaWxlc0VuYWJsZWQodHJ1ZSk7Ci0JLy8gICAgICAgICAgICAgICAgICAgICAgICB9Ci0JLy8gICAgICAgICAgICAgICAgLy9XZSBoYXZlIHBlcm1pc3Npb24gdG8gb3ZlcndyaXRlIHNvIGNoZWNrIGlmIGZpbGUgaXMgcmVhZC1vbmx5Ci0JLy8gICAgICAgICAgICAgICAgaWYgKGZpbGUuaXNSZWFkT25seSgpKQotCS8vICAgICAgICAgICAgICAgIHsKLQkvLyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzb3VyY2VDb250ZXh0LmlzQ2hlY2tvdXRGaWxlc0VuYWJsZWQoKSkgewotCS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHQgPSBzdGF0dXNNb25pdG9yLnJlcG9ydFN0YXR1cyggbmV3Ci0JLy8gU3RhdHVzKElTdGF0dXMuV0FSTklORyxXZWJTZXJ2aWNlUGx1Z2luLklELDAsCi0JLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlNlcnZpY2VQbHVnaW4uZ2V0TWVzc2FnZSgiJU1TR19FUlJPUl9GSUxFX0NIRUNLT1VUX0RJU0FCTEVEIiwKLQkvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdCi0JLy8ge2ZpbGUuZ2V0UGFyZW50KCkuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLGZpbGUuZ2V0TmFtZSgpfSksbnVsbCksCi0JLy8gZ2V0VGhyZWVTdGF0ZUZpbGVPcHRpb25zKCkpOwotCS8vICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBJU3RhdHVzRGlhbG9nQ29uc3RhbnRzLkNBTkNFTF9JRCkKLQkvLyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQkvLwotCS8vICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByZXN1bHQgPT0gSVN0YXR1c0RpYWxvZ0NvbnN0YW50cy5ZRVNfVE9fQUxMX0lEKQotCS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZUNvbnRleHQuc2V0Q2hlY2tvdXRGaWxlc0VuYWJsZWQodHJ1ZSk7Ci0JLy8KLQkvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCS8vICAgICAgICAgICAgICAgICAgICAgICAgSUZpbGVbXSBmaWxlcyA9IG5ldyBJRmlsZVsxXTsKLQkvLyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzWzBdID0gZmlsZTsKLQkvLwotCS8vICAgICAgICAgICAgICAgICAgICAgICAgaWYgKAotCS8vICFzdGF0dXNNb25pdG9yLnJlcG9ydFN0YXR1cyhnZXRXb3Jrc3BhY2UoKS52YWxpZGF0ZUVkaXQoZmlsZXMsbnVsbCkpKQotCS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0JLy8gICAgICAgICAgICAgICAgfQotCS8vICAgICAgICAgICAgICAgIGZpbGUuZGVsZXRlKHRydWUscHJvZ3Jlc3NNb25pdG9yKTsKLQkvLyAgICAgICAgICAgICAgICB9Ci0JLy8gICAgICAgIC8vQXQgdGhpcyBwb2ludCwgZWl0aGVyIHRoZSBmaWxlIGRpZCBub3QgZXhpc3Qgb3Igd2Ugc3VjY2Vzc2Z1bGx5IGRlbGV0ZWQKLQkvLyBpdC4gUmV0dXJuIHN1Y2Nlc3MuCi0JLy8gICAgICAgIHJldHVybiB0cnVlOwotCS8vICB9Ci0JLyoqCi0JICogRGVsZXRlcyBhIGZvbGRlciB1bmRlciBhIGNvbnRhaW5lci4KLQkgKiAKLQkgKiBAcGFyYW0gZm9sZGVyIC0KLQkgKiAgICAgICAgICAgIHRoZSBJRm9sZGVyIHRvIGJlIGRlbGV0ZWQKLQkgKiBAcGFyYW0gcHJvZ3Jlc3NNb25pdG9yCi0JICogQHBhcmFtIHN0YXR1c01vbml0b3IKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhlIGZvbGRlciBkb2VzIG5vdCBleGlzdCBvciBpZiBpdCBleGlzdHMgYW5kIGlzCi0JICogICAgICAgICBzdWNjZXNzZnVsbHkgZGVsZXRlZCBhbG9uZyB3aXRoIGl0cyBtZW1iZXJzLiBGYWxzZSBvdGhlcndpc2UuCi0JICovCi0JLy8gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBkZWxldGVGb2xkZXIgKAotCS8vICAgIFJlc291cmNlQ29udGV4dCByZXNvdXJjZUNvbnRleHQsCi0JLy8gICAgSUZvbGRlciBmb2xkZXIsCi0JLy8gICAgSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IsCi0JLy8gICAgU3RhdHVzTW9uaXRvciBzdGF0dXNNb25pdG9yCi0JLy8gICkKLQkvLyAgdGhyb3dzIENvcmVFeGNlcHRpb24KLQkvLyAgewotCS8vICAgIGlmICghZm9sZGVyLmV4aXN0cygpKSByZXR1cm4gdHJ1ZTsKLQkvLwotCS8vICAgIGJvb2xlYW4gZGVsZXRlZCA9IHRydWU7Ci0JLy8gICAgSVJlc291cmNlW10gcmVzb3VyY2VzID0gZm9sZGVyLm1lbWJlcnMoKTsKLQkvLyAgICBmb3IgKGludCBpPTA7IGk8cmVzb3VyY2VzLmxlbmd0aDsgaSsrKQotCS8vICAgIHsKLQkvLyAgICAgIElSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlc1tpXTsKLQkvLyAgICAgIGlmIChyZXNvdXJjZSBpbnN0YW5jZW9mIElGaWxlKQotCS8vICAgICAgewotCS8vICAgICAgICBkZWxldGVkID0gZGVsZXRlRmlsZShyZXNvdXJjZUNvbnRleHQsIChJRmlsZSlyZXNvdXJjZSwgcHJvZ3Jlc3NNb25pdG9yLAotCS8vIHN0YXR1c01vbml0b3IpOwotCS8vICAgICAgfQotCS8vICAgICAgaWYgKHJlc291cmNlIGluc3RhbmNlb2YgSUZvbGRlcikKLQkvLyAgICAgIHsKLQkvLyAgICAgICAgZGVsZXRlZCA9IGRlbGV0ZUZvbGRlciggcmVzb3VyY2VDb250ZXh0LCAoSUZvbGRlcilyZXNvdXJjZSwKLQkvLyBwcm9ncmVzc01vbml0b3IsIHN0YXR1c01vbml0b3IpOwotCS8vICAgICAgfQotCS8vCi0JLy8gICAgICBpZiAoIWRlbGV0ZWQpIGJyZWFrOwotCS8vICAgIH0KLQkvLyAgICBpZiAoZGVsZXRlZCkgewotCS8vICAgICAgZm9sZGVyLmRlbGV0ZSh0cnVlLCB0cnVlLCBwcm9ncmVzc01vbml0b3IpOwotCS8vICAgICAgcmV0dXJuIHRydWU7Ci0JLy8gICAgfQotCS8vICAgIGVsc2UKLQkvLyAgICAgIHJldHVybiBmYWxzZTsKLQkvLwotCS8vICB9Ci0JLyoqCi0JICogRGVsZXRlcyBhIHNldCBvZiBmaWxlcyB0aGF0IGFyZSBuYW1lZCBpbiBhbiBpbmRleCBmaWxlIGxvY2F0ZWQgcmVsYXRpdmUKLQkgKiB0byB0aGUgcGx1Z2luJ3MgaW5zdGFsbGF0aW9uIGxvY2F0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBwbHVnaW4KLQkgKiAgICAgICAgICAgIFRoZSBwbHVnaW4gY29udGFpbmluZyB0aGUgaW5kZXhlZCBmaWxlIE11c3Qgbm90IGJlIG51bGwuCi0JICogQHBhcmFtIHNvdXJjZVBhdGggLQotCSAqICAgICAgICAgICAgcmVsYXRpdmUgcGF0aCBvZiB0aGUgaW5kZXhlZCBmaWxlIHBhc3NpbmcgYSBudWxsIGluIGhhcyB0aGUKLQkgKiAgICAgICAgICAgIHNhbWUgZWZmZWN0IGFzIHBhc3NpbmcgYSAiLiIgaW4KLQkgKiBAcGFyYW0gaW5kZXhGaWxlUGF0aCAtCi0JICogICAgICAgICAgICB0aGUgaW5kZXhlZCBmaWxlbmFtZSBNdXN0IG5vdCBiZSBudWxsCi0JICogQHBhcmFtIHRhcmdldFBhdGggLQotCSAqICAgICAgICAgICAgcGF0aCBjb250YWluaW5nIHRoZSBmaWxlcyBuYW1lZCBpbiB0aGUgaW5kZXhlZCBmaWxlIE11c3Qgbm90Ci0JICogICAgICAgICAgICBiZSBudWxsLCB0aGlzIHBhdGggbXVzdCBlbmQgd2l0aCBhIHRyYWlsaW5nIHNlcGFyYXRvcgotCSAqIEBwYXJhbSBwcm9ncmVzc01vbml0b3IKLQkgKi8KLQkvLyAgcHVibGljIHN0YXRpYyB2b2lkIGRlbGV0ZUluZGV4RmlsZXNGcm9tT1MgKAotCS8vICAgIFBsdWdpbiBwbHVnaW4sCi0JLy8gICAgSVBhdGggaW5kZXhGaWxlUGF0aCwKLQkvLyAgICBJUGF0aCB0YXJnZXRQYXRoCi0JLy8gICkKLQkvLyAgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkvLyAgICBJbnB1dFN0cmVhbSBpbnB1dCA9IHBsdWdpbi5vcGVuU3RyZWFtKGluZGV4RmlsZVBhdGgpOwotCS8vICAgIEVudW1lcmF0aW9uIGZpbGVuYW1lcyA9IFN0cmluZ1V0aWxzLnBhcnNlRmlsZW5hbWVzRnJvbVN0cmVhbShpbnB1dCk7Ci0JLy8gICAgd2hpbGUgKGZpbGVuYW1lcy5oYXNNb3JlRWxlbWVudHMoKSkgewotCS8vICAgICAgRmlsZSB0YXJnZXRGaWxlID0KLQkvLyB0YXJnZXRQYXRoLmFwcGVuZCgoU3RyaW5nKWZpbGVuYW1lcy5uZXh0RWxlbWVudCgpKS50b0ZpbGUoKTsKLQkvLyAgICAgIGlmICh0YXJnZXRGaWxlLmV4aXN0cygpKQotCS8vICAgICAgICB0YXJnZXRGaWxlLmRlbGV0ZSgpOwotCS8vICAgIH0KLQkvLyAgfQotCS8qKgotCSAqIFJldHVybnMgYSBVUkkgcmVmZXJlbmNlIHRvIHRoZSBnaXZlbiBFY2xpcHNlIHJlc291cmNlLCBvciBudWxsIGlmIG5vIHN1Y2gKLQkgKiByZWZlcmVuY2UgY2FuIGJlIGRldGVybWluZWQgKGZvciBleGFtcGxlLCBpZiB0aGUgcmVzb3VyY2UgZG9lcyBub3QgZXhpc3QKLQkgKiBpbiB0aGUgdW5kZXJseWluZyBmaWxlc3lzdGVtKS4KLQkgKiAKLQkgKiBAcGFyYW0gcmVzb3VyY2UKLQkgKiAgICAgICAgICAgIFRoZSByZXNvdXJjZS4KLQkgKiBAcmV0dXJuIFRoZSBVUkkgYXMgYSBzdHJpbmcsIG9yIG51bGwgaWYgdGhlcmUgaXMgbm8gVVJJIHRvIHRoZSByZXNvdXJjZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRSZXNvdXJjZVVSSShJUmVzb3VyY2UgcmVzb3VyY2UpIHsKLQkJU3RyaW5nIHVyaSA9IG51bGw7Ci0JCUlQYXRoIGxvY2F0aW9uID0gcmVzb3VyY2UuZ2V0TG9jYXRpb24oKTsKLQkJaWYgKGxvY2F0aW9uICE9IG51bGwpIHsKLQkJCXVyaSA9ICJmaWxlOiIgKyBsb2NhdGlvbi50b1N0cmluZygpOwotCQl9Ci0JCXJldHVybiB1cmk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyBhIFVSSSByZWZlcmVuY2UgdG8gdGhlIGdpdmVuIEVjbGlwc2UgcmVzb3VyY2UgdXNpbmcgdGhlCi0JICogInBsYXRmb3JtOiIgcHJvdG9jb2wsIG9yIG51bGwgaWYgbm8gc3VjaCByZWZlcmVuY2UgY2FuIGJlIGRldGVybWluZWQgKGZvcgotCSAqIGV4YW1wbGUsIGlmIHRoZSByZXNvdXJjZSBkb2VzIG5vdCBleGlzdCBpbiB0aGUgdW5kZXJseWluZyBmaWxlc3lzdGVtKS4KLQkgKiAKLQkgKiBAcGFyYW0gcmVzb3VyY2UKLQkgKiAgICAgICAgICAgIFRoZSByZXNvdXJjZS4KLQkgKiBAcmV0dXJuIFRoZSBVUkkgYXMgYSBzdHJpbmcsIG9yIG51bGwgaWYgdGhlcmUgaXMgbm8gVVJJIHRvIHRoZSByZXNvdXJjZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQbGF0Zm9ybVJlc291cmNlVVJJKElSZXNvdXJjZSByZXNvdXJjZSkgewotCQlTdHJpbmcgdXJpID0gbnVsbDsKLQkJSVBhdGggbG9jYXRpb24gPSByZXNvdXJjZS5nZXRGdWxsUGF0aCgpOwotCQlpZiAobG9jYXRpb24gIT0gbnVsbCkgewotCQkJdXJpID0gInBsYXRmb3JtOi9yZXNvdXJjZSIgKyBsb2NhdGlvbi50b1N0cmluZygpOwotCQl9Ci0JCXJldHVybiB1cmk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZGVmYXVsdCBiaW5kaW5nIG5hbWVzcGFjZSBzdHJpbmcgZ2l2ZW4gYSBKYXZhIGJlYW4gbmFtZQotCSAqICh1c2luZyB0aGUgY29udmVudGlvbiB1c2VkIGJ5IENUQyBpbiBHTSkuIGUuZy4gSmF2YSBiZWFuIE15Q2xhc3MgcmVzdWx0Ci0JICogaW4gYmluZGluZyBuYW1lc3BhY2Ugb2YKLQkgKiAiaHR0cDovL3d3dy5teWNsYXNzLmNvbS9kZWZpbml0aW9ucy9NeUNsYXNzUmVtb3RlSW50ZXJmYWNlIgotCSAqIAotCSAqIEBwYXJhbSBiZWFuTmFtZQotCSAqICAgICAgICAgICAgVGhlIGphdmEgYmVhbi4KLQkgKiBAcmV0dXJuIFRoZSBiaW5kaW5nIG5hbWVzcGFjZSBhcyBhIHN0cmluZy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRCaW5kaW5nTmFtZXNwYWNlKFN0cmluZyBiZWFuTmFtZSkgewotCQlyZXR1cm4gImh0dHA6Ly93d3cuIiArIGJlYW5OYW1lLnRvTG93ZXJDYXNlKCkgKyAiLmNvbS9kZWZpbml0aW9ucy8iCi0JCQkJKyBiZWFuTmFtZSArICJSZW1vdGVJbnRlcmZhY2UiOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGRlZmF1bHQgc2NoZW1hIG5hbWVzcGFjZSBzdHJpbmcgZ2l2ZW4gYSBKYXZhIGJlYW4gbmFtZSAodXNpbmcKLQkgKiB0aGUgY29udmVudGlvbiB1c2VkIGJ5IENUQyBpbiBHTSkuIGUuZy4gSmF2YSBiZWFuIE15Q2xhc3MgcmVzdWx0IGluCi0JICogc2NoZW1hIG5hbWVzcGFjZSBvZgotCSAqICJodHRwOi8vd3d3Lm15Y2xhc3MuY29tL3NjaGVtYXMvTXlDbGFzc1JlbW90ZUludGVyZmFjZSIKLQkgKiAKLQkgKiBAcGFyYW0gYmVhbk5hbWUKLQkgKiAgICAgICAgICAgIFRoZSBqYXZhIGJlYW4uCi0JICogQHJldHVybiBUaGUgc2NoZW1hcyBuYW1lc3BhY2UgYXMgYSBzdHJpbmcuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U2NoZW1hTmFtZXNwYWNlKFN0cmluZyBiZWFuTmFtZSkgewotCQlyZXR1cm4gImh0dHA6Ly93d3cuIiArIGJlYW5OYW1lLnRvTG93ZXJDYXNlKCkgKyAiLmNvbS9zY2hlbWFzLyIKLQkJCQkrIGJlYW5OYW1lICsgIlJlbW90ZUludGVyZmFjZSI7Ci0JfQotCi0JLy8gIHB1YmxpYyBzdGF0aWMgVmVjdG9yIGdldFRocmVlU3RhdGVGaWxlT3B0aW9ucygpIHsKLQkvLyAgICAgICAgVmVjdG9yIG9wdGlvbnMgPSBuZXcgVmVjdG9yKCk7Ci0JLy8gICAgb3B0aW9ucy5hZGQobmV3Ci0JLy8gU3RhdHVzT3B0aW9uKElTdGF0dXNEaWFsb2dDb25zdGFudHMuWUVTX0lELElTdGF0dXNEaWFsb2dDb25zdGFudHMuWUVTX0xBQkVMLCIiLCIiKSk7Ci0JLy8gICAgb3B0aW9ucy5hZGQobmV3Ci0JLy8gU3RhdHVzT3B0aW9uKElTdGF0dXNEaWFsb2dDb25zdGFudHMuWUVTX1RPX0FMTF9JRCxJU3RhdHVzRGlhbG9nQ29uc3RhbnRzLllFU19UT19BTExfTEFCRUwsIiIsIiIpKTsKLQkvLyAgICBvcHRpb25zLmFkZChuZXcKLQkvLyBTdGF0dXNPcHRpb24oSVN0YXR1c0RpYWxvZ0NvbnN0YW50cy5DQU5DRUxfSUQsSVN0YXR1c0RpYWxvZ0NvbnN0YW50cy5DQU5DRUxfTEFCRUwsIiIsIiIpKTsKLQkvLyAgICByZXR1cm4gb3B0aW9uczsKLQkvLyAgfQotCi0JLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLQkvKioKLQkgKiBHZXRzIHRoZSBTT0FQIHJwY3JvdXRlciBzZXJ2bGV0IFVSTCBmb3IgdGhlIHNlcnZpY2UgcHJvamVjdAotCSAqIAotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogICAgICAgICAgICBUaGUgcHJvamVjdC4KLQkgKiBAcGFyYW0gc2VydmVyRmFjdG9yeUlkCi0JICogICAgICAgICAgICBUaGUgc2VydmVyIGZhY3RvcnkgaWQKLQkgKiBAcGFyYW0gc2VydmVyCi0JICogICAgICAgICAgICBUaGUgc2VydmVyCi0JICogQHJldHVybiBUaGUgVVJMLCBwb3NzaWJseSBudWxsLgotCSAqLwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U2VydmxldFVSTChJUHJvamVjdCBwcm9qZWN0LAotCQkJU3RyaW5nIHNlcnZlckZhY3RvcnlJZCwgSVNlcnZlciBzZXJ2ZXIpIHsKLQkJcmV0dXJuIGdldFNlcnZsZXRVUkwoZ2V0V2ViUHJvamVjdFVSTChwcm9qZWN0LCBzZXJ2ZXJGYWN0b3J5SWQsIHNlcnZlcikpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFNlcnZsZXRVUkwoU3RyaW5nIHdlYlByb2plY3RVUkwpIHsKLQkJaWYgKHdlYlByb2plY3RVUkwgPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCQllbHNlCi0JCQlyZXR1cm4gd2ViUHJvamVjdFVSTCArIFNFUlZMRVRfRVhUOwotCX0KLQotCS8qKgotCSAqIEdldHMgdGhlIGNsaWVudCBXZWIgcHJvamVjdCBuYW1lCi0JICogCi0JICogQHBhcmFtIHByb2plY3ROYW1lCi0JICogICAgICAgICAgICBUaGUgcHJvamVjdCBuYW1lIHRvIGJhc2Ugb24uCi0JICogQHBhcmFtIHR5cGVJZCB0aGUgd2Vic2VydmljZSB0eXBlIGlkLgotCSAqIEByZXR1cm4gVGhlIGNsaWVudCBXZWIgcHJvamVjdCBuYW1lLgotCSAqIAotCSAqIEBkZXByZWNhdGVkCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0Q2xpZW50V2ViUHJvamVjdE5hbWUoU3RyaW5nIHByb2plY3ROYW1lLCBTdHJpbmcgdHlwZUlkKSAKLQl7Ci0JCVN0cmluZyAgIGJhc2VDbGllbnRXZWJQcm9qZWN0TmFtZSA9IHByb2plY3ROYW1lICsgREVGQVVMVF9DTElFTlRfV0VCX1BST0pFQ1RfRVhUOwotCQlJUGF0aCAgICBwcm9qZWN0UGF0aDsKLQkJSVByb2plY3QgcHJvamVjdDsKLQkJYm9vbGVhbiAgZm91bmRXZWJQcm9qZWN0ICAgICA9IGZhbHNlOwotCQlpbnQgICAgICBpICAgICAgICAgICAgICAgICAgID0gMTsKLQkJCi0JCWlmKCBpc1NrZWxldG9uRUpCVHlwZSggdHlwZUlkICkgKQotCQl7Ci0JCSAgLy8gRm9yIHRoZSBza2VsZXRvbiBFSkIgc2NlbmFyaW8gd2UgbmVlZCB0byBjcmVhdGUgYSBzbGlnaHRseSBkaWZmZXJlbnQKLQkJICAvLyBiYXNlIG5hbWUuICBXaGVuIHRoZSBFSkIgcHJvamVjdCBpcyBjcmVhdGVkIGFub3RoZXIgcHJvamVjdAotCQkgIC8vIGlzIGNyZWF0ZWQgd2l0aCAiQ2xpZW50IiB0YWNrZWQgb250byB0aGUgZW5kLiAgV2Ugd2lsbAotCQkgIC8vIGFkZCAiV1MiIHRvIG91ciBjbGllbnQgc28gd2UgZG9uJ3QgY29sbGlkZSB3aXRoIHRoZSBvdGhlcgotCQkgIC8vIGNsaWVudCBwcm9qZWN0LgotCQkgIGJhc2VDbGllbnRXZWJQcm9qZWN0TmFtZSA9IHByb2plY3ROYW1lICsgIldTIiArIERFRkFVTFRfQ0xJRU5UX1dFQl9QUk9KRUNUX0VYVDsgICAgCi0JCX0KLQkJCi0JCVN0cmluZyAgY2xpZW50V2ViUHJvamVjdE5hbWUgPSBiYXNlQ2xpZW50V2ViUHJvamVjdE5hbWU7Ci0JCQotCQl3aGlsZSAoIWZvdW5kV2ViUHJvamVjdCkgCi0JCXsKLQkJICBwcm9qZWN0UGF0aCA9IG5ldyBQYXRoKGNsaWVudFdlYlByb2plY3ROYW1lKS5tYWtlQWJzb2x1dGUoKTsKLQkJICBwcm9qZWN0ID0gUmVzb3VyY2VVdGlscy5nZXRQcm9qZWN0T2YocHJvamVjdFBhdGgpOwotCQkgIAotCQkgIGlmIChwcm9qZWN0LmV4aXN0cygpICYmICFSZXNvdXJjZVV0aWxzLmlzV2ViUHJvamVjdChwcm9qZWN0KSkgCi0JCSAgewotCQkJY2xpZW50V2ViUHJvamVjdE5hbWUgPSBiYXNlQ2xpZW50V2ViUHJvamVjdE5hbWUgKyBpOwotCQkJaSsrOwotCQkgIH0KLQkJICBlbHNlIAotCQkgIHsKLQkJCWZvdW5kV2ViUHJvamVjdCA9IHRydWU7Ci0JCSAgfQotCQl9Ci0JCQotCQlyZXR1cm4gY2xpZW50V2ViUHJvamVjdE5hbWU7Ci0JfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nW10gZ2V0Q2xpZW50UHJvamVjdENvbXBvbmVudE5hbWUoU3RyaW5nIHByb2plY3ROYW1lLCBTdHJpbmcgY29tcG9uZW50TmFtZSwgYm9vbGVhbiBpc0VKQikKLSAgewotICAgIFN0cmluZyBjbGllbnRQcm9qZWN0TmFtZSA9IG51bGw7Ci0gICAgU3RyaW5nIGNsaWVudENvbXBvbmVudE5hbWUgPSBudWxsOwotICAgIGlmIChpc0VKQikKLSAgICB7Ci0gICAgICBjbGllbnRQcm9qZWN0TmFtZSA9IHByb2plY3ROYW1lICsgREVGQVVMVF9DTElFTlRfRUpCX1BST0pFQ1RfRVhUOwotICAgICAgY2xpZW50Q29tcG9uZW50TmFtZSA9IGNvbXBvbmVudE5hbWUgKyBERUZBVUxUX0NMSUVOVF9FSkJfUFJPSkVDVF9FWFQ7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBjbGllbnRQcm9qZWN0TmFtZSA9IHByb2plY3ROYW1lICsgREVGQVVMVF9DTElFTlRfV0VCX1BST0pFQ1RfRVhUOwotLy8gICAgICBTdHJpbmcgYmFzZU5hbWUgPSBjbGllbnRQcm9qZWN0TmFtZTsKLSAgICAgIGNsaWVudENvbXBvbmVudE5hbWUgPSBjb21wb25lbnROYW1lICsgREVGQVVMVF9DTElFTlRfV0VCX1BST0pFQ1RfRVhUOwotLy8gICAgICBTdHJpbmcgYmFzZUNvbXBOYW1lID0gY2xpZW50Q29tcG9uZW50TmFtZTsKLSAgICB9Ci0gICAgCi0gICAgLy9UT0RPIHdlIG1heSB3YW50IHRvIHJlbW92ZSB0aGlzIGlmIHN0YXRlbWVudCBvbmNlIGRlZmVjdCAxMDMzNjYgaXMgcmVzb2x2ZWQuCi0gICAgLy9UT0RPOiAgRGVmZWN0IDEwNzk5NyAtIFJldmlzaXQgcHJqZWN0IGFuZCBtb2R1bGUgY3JlYXRpb24gbG9naWMKLS8vICAgIGlmKCAhRmxleGlibGVKYXZhUHJvamVjdFByZWZlcmVuY2VVdGlsLmdldE11bHRpcGxlTW9kdWxlc1BlclByb2plY3RQcm9wKCkgKQotLy8gICAgewotLy8gICAgICBjbGllbnRDb21wb25lbnROYW1lID0gY2xpZW50UHJvamVjdE5hbWU7CQotLy8gICAgfQotICAgIAotLy8gICAgYm9vbGVhbiAgZm91bmRXZWJQcm9qZWN0ICAgICA9IGZhbHNlOwotLy8gICAgaW50ICAgICAgaSAgICAgICAgICAgICAgICAgICA9IDE7Ci0vLyAgICAKLS8vICAgIHdoaWxlICghZm91bmRXZWJQcm9qZWN0KSAKLS8vICAgIHsKLS8vICAgICAgSVBhdGggcHJvamVjdFBhdGggPSBuZXcgUGF0aChjbGllbnRQcm9qZWN0TmFtZSkubWFrZUFic29sdXRlKCk7Ci0vLyAgICAgIElQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZVV0aWxzLmdldFByb2plY3RPZihwcm9qZWN0UGF0aCk7Ci0vLyAgICAgIAotLy8gICAgICBpZiAocHJvamVjdC5leGlzdHMoKSkgCi0vLyAgICAgIHsKLS8vICAgICAgICBjbGllbnRQcm9qZWN0TmFtZSA9IGJhc2VOYW1lICsgaTsKLS8vICAgICAgICBjbGllbnRDb21wb25lbnROYW1lID0gYmFzZUNvbXBOYW1lICsgaTsKLS8vICAgICAgICBpKys7Ci0vLyAgICAgIH0KLS8vICAgICAgZWxzZSAKLS8vICAgICAgewotLy8gICAgICAgIGZvdW5kV2ViUHJvamVjdCA9IHRydWU7Ci0vLyAgICAgIH0KLS8vICAgIH0KLSAgICAKLSAgICByZXR1cm4gbmV3IFN0cmluZ1tde2NsaWVudFByb2plY3ROYW1lLCBjbGllbnRDb21wb25lbnROYW1lfTsKLSAgfQotICAKLSAgICAvKioKLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gdHlwZUlECi0gICAgICogQHJldHVybgotICAgICAqIAotICAgICAqIEBkZXByZWNhdGVkCi0gICAgICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzU2tlbGV0b25FSkJUeXBlKCBTdHJpbmcgdHlwZUlEICkKLQl7Ci0JICByZXR1cm4gdHlwZUlELmVxdWFscyggIm9yZy5lY2xpcHNlLmpzdC53cy50eXBlLndzZGwuZWpiIiApOyAgICAKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RGVmYXVsdEVKQlByb2plY3ROYW1lKCkgewotCQlyZXR1cm4gREVGQVVMVF9FSkJfUFJPSkVDVF9OQU1FOwotCX0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldERlZmF1bHRFSkJDb21wb25lbnROYW1lKCkgewotICAgIHJldHVybiBERUZBVUxUX0VKQl9DT01QT05FTlRfTkFNRTsKLSAgfSAgCi0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXREZWZhdWx0V2ViUHJvamVjdE5hbWUoKSB7Ci0JCXJldHVybiBERUZBVUxUX1dFQl9QUk9KRUNUX05BTUU7Ci0JfQotICAKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RGVmYXVsdFdlYkNvbXBvbmVudE5hbWUoKSB7Ci0gICAgcmV0dXJuIERFRkFVTFRfV0VCX0NPTVBPTkVOVF9OQU1FOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RGVmYXVsdENsaWVudEV4dGVuc2lvbigpIHsKLSAgICByZXR1cm4gREVGQVVMVF9DTElFTlRfV0VCX1BST0pFQ1RfRVhUOwotICB9Ci0gIAotCS8qKgotCSAqIAotCSAqIEBwYXJhbSBwcm9qZWN0TmFtZQotCSAqIEByZXR1cm4KLQkgKiAKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRSb3V0ZXJQcm9qZWN0TmFtZShTdHJpbmcgcHJvamVjdE5hbWUpIHsKLQkJcmV0dXJuIHByb2plY3ROYW1lICsgREVGQVVMVF9ST1VURVJfUFJPSkVDVF9FWFQ7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RGVmYXVsdFNlcnZpY2VFQVJQcm9qZWN0TmFtZSgpIHsKLQkJcmV0dXJuIERFRkFVTFRfU0VSVklDRV9FQVJfUFJPSkVDVF9OQU1FOwotCX0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldERlZmF1bHRTZXJ2aWNlRUFSQ29tcG9uZW50TmFtZSgpIHsKLSAgICByZXR1cm4gREVGQVVMVF9TRVJWSUNFX0VBUl9DT01QT05FTlRfTkFNRTsKLSAgfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RGVmYXVsdENsaWVudEVBUlByb2plY3ROYW1lKCkgewotCQlyZXR1cm4gREVGQVVMVF9DTElFTlRfRUFSX1BST0pFQ1RfTkFNRTsKLQl9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RGVmYXVsdENsaWVudEVBUkNvbXBvbmVudE5hbWUoKSB7Ci0gICAgcmV0dXJuIERFRkFVTFRfQ0xJRU5UX0VBUl9DT01QT05FTlRfTkFNRTsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RGVmYXVsdEVBUkV4dGVuc2lvbigpIHsKLQkgICAgcmV0dXJuIERFRkFVTFRfRUFSX0VYVDsKLQkgIH0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vU2VsZWN0aW9uVG9SZXNvdXJjZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vU2VsZWN0aW9uVG9SZXNvdXJjZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1N2U0MTIwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL1NlbGVjdGlvblRvUmVzb3VyY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklDb21waWxhdGlvblVuaXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YU1vZGVsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmVqYi5FbnRlcnByaXNlQmVhbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLlRyYW5zZm9ybWVyOwotCi1wdWJsaWMgY2xhc3MgU2VsZWN0aW9uVG9SZXNvdXJjZSBpbXBsZW1lbnRzIFRyYW5zZm9ybWVyCi17Ci0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLlRyYW5zZm9ybWVyI3RyYW5zZm9ybShqYXZhLmxhbmcuT2JqZWN0KQotICAgKi8KLSAgcHVibGljIE9iamVjdCB0cmFuc2Zvcm0oT2JqZWN0IHZhbHVlKQotICB7Ci0gICAgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXZhbHVlOwotICAgIElSZXNvdXJjZSAgICAgICAgICAgIHJlc291cmNlICA9IG51bGw7Ci0gICAgCi0gICAgaWYoIHNlbGVjdGlvbiAhPSBudWxsICkKLSAgICB7Ci0gICAgICBPYmplY3Qgb2JqZWN0ID0gc2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOwotICAgICAgCi0gICAgICBpZiggb2JqZWN0ICE9IG51bGwgKQotICAgICAgewotICAgICAgICBpZiggb2JqZWN0IGluc3RhbmNlb2YgSVJlc291cmNlKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzb3VyY2UgPSAoSVJlc291cmNlKW9iamVjdDsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmKCBvYmplY3QgaW5zdGFuY2VvZiBJQ29tcGlsYXRpb25Vbml0ICkKLSAgICAgICAgewotICAgICAgICAgIElDb21waWxhdGlvblVuaXQgY29tcFVuaXQgPSAoSUNvbXBpbGF0aW9uVW5pdClvYmplY3Q7Ci0gICAgICAgICAgCi0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgcmVzb3VyY2UgPSBjb21wVW5pdC5nZXRDb3JyZXNwb25kaW5nUmVzb3VyY2UoKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2goIEphdmFNb2RlbEV4Y2VwdGlvbiBleGMpCi0gICAgICAgICAgewotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmKCBvYmplY3QgaW5zdGFuY2VvZiBFbnRlcnByaXNlQmVhbiApIAotICAgICAgICB7Ci0gICAgICAgICAgRW50ZXJwcmlzZUJlYW4gZWpiQmVhbiAgICA9IChFbnRlcnByaXNlQmVhbilvYmplY3Q7Ci0gICAgICAgICAgSVByb2plY3QgICAgICAgZWpiUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdCggZWpiQmVhbiApOwotICAgICAgICAgIAotICAgICAgICAgIGlmKCBlamJQcm9qZWN0ICE9IG51bGwgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJlc291cmNlID0gZWpiUHJvamVjdDsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzb3VyY2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL1NlcnZlclV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9TZXJ2ZXJVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODdkNTE1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL1NlcnZlclV0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjA0ICAxMjQ0MDggICByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIgICAgICAgICAgCi0gKiAyMDA2MDMzMCAgIDEyNDY2NyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjEwMDQgICAxNTkzNTYga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4sIEdldCBjb3JyZWN0IG1vZHVsZSByb290IFVSTCBiYXNlZCBvbiBzZXJ2ZXIgY2hvc2VuCi0gKiAyMDA3MDExOSAgIDE1OTQ1OCBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb247Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLm5ldC5VUkxFbmNvZGVyOwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5sb2dnZXIucHJveHkuTG9nZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmludGVybmFsLkoyRUVWZXJzaW9uQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmludGVybmFsLnNlcnZlcnRhcmdldC5JU2VydmVyVGFyZ2V0Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5XU1BsdWdpbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUuaW50ZXJuYWwudXRpbC5JTW9kdWxlQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5yZXNvdXJjZXMuSVZpcnR1YWxDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklNb2R1bGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklSdW50aW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JUnVudGltZVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXJUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyV29ya2luZ0NvcHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlckNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLlNlcnZlclV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLm1vZGVsLklVUkxQcm92aWRlcjsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIGNvbnRhaW5zIHVzZWZ1bCBtZXRob2RzIGZvciB3b3JraW5nIHdpdGggU2VydmVyIHBsdWdpbiBmdW5jdGlvbnMKLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIFNlcnZlclV0aWxzIHsKLQotCXByaXZhdGUgSGFzaHRhYmxlIHNlcnZlcklkVG9MYWJlbF87Ci0KLQlwcml2YXRlIEhhc2h0YWJsZSBzZXJ2ZXJMYWJlbFRvSWRfOwotCi0JcHJpdmF0ZSBzdGF0aWMgU2VydmVyVXRpbHMgaW5zdGFuY2VfOwotCi0JcHVibGljIHN0YXRpYyBTZXJ2ZXJVdGlscyBnZXRJbnN0YW5jZSgpIHsKLQkJaWYgKGluc3RhbmNlXyA9PSBudWxsKSB7Ci0JCQlpbnN0YW5jZV8gPSBuZXcgU2VydmVyVXRpbHMoKTsKLQkJfQotCQlyZXR1cm4gaW5zdGFuY2VfOwotCi0JfQotCi0JcHVibGljIFNlcnZlclV0aWxzKCkgewotCX0KLQotCS8vIEdldHMgdGhlIFNlcnZlciBsYWJlbHMgZ2l2ZW4gdGhlIHNlcnZlciBmYWN0b3J5IGlkCi0JcHVibGljIHZvaWQgZ2V0U2VydmVyTGFiZWxzQW5kSWRzKCkgewotCQlzZXJ2ZXJJZFRvTGFiZWxfID0gbmV3IEhhc2h0YWJsZSgpOwotCQlzZXJ2ZXJMYWJlbFRvSWRfID0gbmV3IEhhc2h0YWJsZSgpOwotCQlJU2VydmVyVHlwZVtdIHNlcnZlclR5cGVzID0gU2VydmVyQ29yZS5nZXRTZXJ2ZXJUeXBlcygpOwotCQlmb3IgKGludCBpZHggPSAwOyBpZHggPCBzZXJ2ZXJUeXBlcy5sZW5ndGg7IGlkeCsrKSB7Ci0KLQkJCUlTZXJ2ZXJUeXBlIHNlcnZlclR5cGUgPSAoSVNlcnZlclR5cGUpIHNlcnZlclR5cGVzW2lkeF07Ci0KLQkJCVN0cmluZyBpZCA9IHNlcnZlclR5cGUuZ2V0SWQoKTsKLQkJCVN0cmluZyBzZXJ2ZXJMYWJlbCA9IHNlcnZlclR5cGUuZ2V0TmFtZSgpOwotCQkJaWYgKCEoaWQgPT0gbnVsbCkgJiYgIShzZXJ2ZXJMYWJlbCA9PSBudWxsKSkgewotCQkJCXNlcnZlcklkVG9MYWJlbF8ucHV0KGlkLCBzZXJ2ZXJMYWJlbCk7Ci0JCQkJc2VydmVyTGFiZWxUb0lkXy5wdXQoc2VydmVyTGFiZWwsIGlkKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0U2VydmVyTGFiZWxGb3JJZChTdHJpbmcgZmFjdG9yeUlkKSB7Ci0JCWlmIChzZXJ2ZXJJZFRvTGFiZWxfID09IG51bGwpCi0JCQl0aGlzLmdldFNlcnZlckxhYmVsc0FuZElkcygpOwotCQlyZXR1cm4gKFN0cmluZykgc2VydmVySWRUb0xhYmVsXy5nZXQoZmFjdG9yeUlkKTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFNlcnZlcklkRm9yTGFiZWwoU3RyaW5nIGZhY3RvcnlMYWJlbCkgewotCQlpZiAoc2VydmVyTGFiZWxUb0lkXyA9PSBudWxsKQotCQkJdGhpcy5nZXRTZXJ2ZXJMYWJlbHNBbmRJZHMoKTsKLQkJcmV0dXJuIChTdHJpbmcpIHNlcnZlckxhYmVsVG9JZF8uZ2V0KGZhY3RvcnlMYWJlbCk7Ci0JfQotCi0JcHVibGljIElTdGF0dXMgbW9kaWZ5TW9kdWxlcyhJRW52aXJvbm1lbnQgZW52LCBJU2VydmVyIHNlcnZlciwKLQkJCUlNb2R1bGUgbW9kdWxlLCBib29sZWFuIGFkZCwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7Ci0KLQkJSVNlcnZlcldvcmtpbmdDb3B5IHdjID0gbnVsbDsKLQkJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotICAgIAotCQl0cnkgewotCi0JCQlpZiAobW9kdWxlID09IG51bGwgfHwgIW1vZHVsZS5nZXRQcm9qZWN0KCkuZXhpc3RzKCkpIHsKLQkJCQlyZXR1cm4gc3RhdHVzOwotCQkJfQotCi0JCQkvLyBjaGVjayBpZiBtb2R1bGUgaXMgYSB0cnVlIEphdmEgcHJvamVjdAotCQkJaWYgKG1vZHVsZSBpbnN0YW5jZW9mIElNb2R1bGUpIHsKLQkJCQlJTW9kdWxlIHBtID0gKElNb2R1bGUpIG1vZHVsZTsKLQkJCQlpZiAocG0gIT0gbnVsbCkgewotCQkJCQlJUHJvamVjdCBwcm9qZWN0ID0gcG0uZ2V0UHJvamVjdCgpOwotCQkJCQlpZiAocHJvamVjdCA9PSBudWxsCi0JCQkJCQkJfHwgUmVzb3VyY2VVdGlscy5pc1RydWVKYXZhUHJvamVjdChwcm9qZWN0KSkgewotCQkJCQkJcmV0dXJuIHN0YXR1czsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQotCQkJd2MgPSBzZXJ2ZXIuY3JlYXRlV29ya2luZ0NvcHkoKTsKLQkJCWlmICh3YyAhPSBudWxsKSB7Ci0vLwkJCQlPYmplY3QgeCA9IHNlcnZlci5nZXRBZGFwdGVyKElSdW5uaW5nQWN0aW9uU2VydmVyLmNsYXNzKTsKLS8vCQkJCWlmICh4ICE9IG51bGwgJiYgeCBpbnN0YW5jZW9mIElSdW5uaW5nQWN0aW9uU2VydmVyKSB7Ci0vLwkJCQkJaW50IHN0YXRlID0gc2VydmVyLmdldFNlcnZlclN0YXRlKCk7Ci0vLwkJCQkJaWYgKHN0YXRlID09IElTZXJ2ZXIuU1RBVEVfU1RPUFBFRAotLy8JCQkJCQkJfHwgc3RhdGUgPT0gSVNlcnZlci5TVEFURV9VTktOT1dOKSB7Ci0vLwkJCQkJCVN0cmluZyBtb2RlID0gSUxhdW5jaE1hbmFnZXIuUlVOX01PREU7Ci0vLwkJCQkJCXNlcnZlci5zeW5jaHJvbm91c1N0YXJ0KG1vZGUsIG1vbml0b3IpOwotLy8JCQkJCX0KLS8vCQkJCX0KLQotCQkJCUxpc3QgbGlzdCA9IEFycmF5cy5hc0xpc3Qoc2VydmVyLmdldE1vZHVsZXMoKSk7Ci0JCQkJaWYgKGFkZCkgewotCQkJCQlpZiAoIWxpc3QuY29udGFpbnMobW9kdWxlKSkgewotCQkJCQkJU2VydmVyVXRpbC5tb2RpZnlNb2R1bGVzKHdjLCBuZXcgSU1vZHVsZVtdIHsgbW9kdWxlIH0sCi0JCQkJCQkJCW5ldyBJTW9kdWxlWzBdLCBtb25pdG9yKTsKLQkJCQkJfQotCQkJCX0gZWxzZSB7IC8vIHJlbW92ZXMgbW9kdWxlCi0JCQkJCWlmIChsaXN0LmNvbnRhaW5zKG1vZHVsZSkpIHsKLQkJCQkJCVNlcnZlclV0aWwubW9kaWZ5TW9kdWxlcyh3YywgbmV3IElNb2R1bGVbMF0sCi0JCQkJCQkJCW5ldyBJTW9kdWxlW10geyBtb2R1bGUgfSwgbW9uaXRvcik7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCS8vIGhhbmRsZSBjYXNlIG9mIE51bGwgV0M7IG5vbi1pc3N1ZSBmb3Igbm93Ci0JCQl9Ci0JCX0gCi0gICAgY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjICkgCi0gICAgewotCQkJc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIFdTUGx1Z2luTWVzc2FnZXMuTVNHX0VSUk9SX1NFUlZFUiwgZXhjICk7Ci0JCQllbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0JCQlyZXR1cm4gc3RhdHVzOwotCQl9IGZpbmFsbHkgewotCQkJaWYgKHdjICE9IG51bGwpIHsKLQkJCQkvLyBBbHdheXMgc2F2ZUFsbCBhbmQgcmVsZWFzZSB0aGUgc2VydmVyV29ya2luZ0NvcHkKLQkJCQl0cnkgCi0gICAgICAgIHsKLQkJCQkJd2Muc2F2ZUFsbCh0cnVlLCBtb25pdG9yKTsKLQkJCQl9IAotICAgICAgICBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGMgKSAKLSAgICAgICAgewotCQkJCQlzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggV1NQbHVnaW5NZXNzYWdlcy5NU0dfRVJST1JfU0VSVkVSLCBleGMgKTsKLQkJCQkJZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkJCQlyZXR1cm4gc3RhdHVzOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gc3RhdHVzOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgSVNlcnZlciBnZXRTZXJ2ZXJGb3JNb2R1bGUoSU1vZHVsZSBtb2R1bGUsIFN0cmluZyBzZXJ2ZXJUeXBlSWQsIAotCQkJCQkJCQlJU2VydmVyIHNlcnZlciwgYm9vbGVhbiBjcmVhdGUsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgewotCQlpZiAoc2VydmVyICE9IG51bGwpCi0JCQlyZXR1cm4gc2VydmVyOwotCQllbHNlCi0JCQlyZXR1cm4gZ2V0U2VydmVyRm9yTW9kdWxlKG1vZHVsZSwgc2VydmVyVHlwZUlkLCBjcmVhdGUsIG1vbml0b3IpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgSVNlcnZlciBnZXRTZXJ2ZXJGb3JNb2R1bGUoSU1vZHVsZSBtb2R1bGUsCi0JCQlTdHJpbmcgc2VydmVyVHlwZUlkLCBib29sZWFuIGNyZWF0ZSwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7Ci0JCXRyeSB7Ci0KLQkJCUlTZXJ2ZXJbXSBzZXJ2ZXJzID0gU2VydmVyVXRpbC5nZXRTZXJ2ZXJzQnlNb2R1bGUobW9kdWxlLCBtb25pdG9yKTsKLQotCQkJaWYgKHNlcnZlcnMgIT0gbnVsbCAmJiBzZXJ2ZXJzLmxlbmd0aCA+IDApIHsKLQkJCQlpZiAoc2VydmVyVHlwZUlkID09IG51bGwgfHwgc2VydmVyVHlwZUlkLmxlbmd0aCgpID09IDApCi0JCQkJCXJldHVybiBzZXJ2ZXJzWzBdOyAvLyBXU0FEIHY0IGJlaGF2aW9yCi0KLQkJCQlmb3IgKGludCBpID0gMDsgaSA8IHNlcnZlcnMubGVuZ3RoOyBpKyspIHsKLQkJCQkJaWYgKHNlcnZlcnNbaV0uZ2V0U2VydmVyVHlwZSgpLmdldElkKCkuZXF1YWxzSWdub3JlQ2FzZSgKLQkJCQkJCQlzZXJ2ZXJUeXBlSWQpKQotCQkJCQkJcmV0dXJuIHNlcnZlcnNbaV07Ci0JCQkJfQotCQkJfQotCi0JCQlyZXR1cm4gY3JlYXRlU2VydmVyKG1vZHVsZSwgc2VydmVyVHlwZUlkLCBtb25pdG9yKTsKLQotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgc3RhdGljIElTZXJ2ZXIgZ2V0U2VydmVyRm9yTW9kdWxlKElNb2R1bGUgbW9kdWxlKSB7Ci0JCXRyeSB7Ci0JCQlJU2VydmVyW10gc2VydmVycyA9IFNlcnZlclV0aWwuZ2V0U2VydmVyc0J5TW9kdWxlKG1vZHVsZSwgbnVsbCk7Ci0JCQlyZXR1cm4gKChzZXJ2ZXJzICE9IG51bGwgJiYgc2VydmVycy5sZW5ndGggPiAwKSA/IHNlcnZlcnNbMF0gOiBudWxsKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0JfQotCi0JLyoqCi0JICogCi0JICogQHBhcmFtIGVudgotCSAqIEBwYXJhbSBtb2R1bGUKLQkgKiBAcGFyYW0gc2VydmVyVHlwZUlkCi0JICogQHBhcmFtIG1vbml0b3IKLQkgKiBAcmV0dXJuCi0JICogCi0JICogQGRlcHJlY2F0ZWQKLQkgKi8KLQlwdWJsaWMgSVNlcnZlciBjcmVhdGVTZXJ2ZXIoSUVudmlyb25tZW50IGVudiwgSU1vZHVsZSBtb2R1bGUsCi0JCQlTdHJpbmcgc2VydmVyVHlwZUlkLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKLQkJSVNlcnZlcldvcmtpbmdDb3B5IHNlcnZlcldDID0gbnVsbDsKLQkJSVNlcnZlciBzZXJ2ZXIgPSBudWxsOwotCQl0cnkgewotCQkJSVNlcnZlclR5cGUgc2VydmVyVHlwZSA9IFNlcnZlckNvcmUuZmluZFNlcnZlclR5cGUoc2VydmVyVHlwZUlkKTsKLQkJCXNlcnZlcldDID0gc2VydmVyVHlwZS5jcmVhdGVTZXJ2ZXIoc2VydmVyVHlwZUlkLCBudWxsLCBtb25pdG9yKTsKLQkJCXRyeSB7Ci0JCQkJaWYgKHNlcnZlcldDICE9IG51bGwpIHsKLQkJCQkJc2VydmVyID0gc2VydmVyV0Muc2F2ZUFsbCh0cnVlLCBtb25pdG9yKTsKLQkJCQl9Ci0JCQl9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKSAKLSAgICAgIHsKLQkJCQlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBXU1BsdWdpbk1lc3NhZ2VzLk1TR19FUlJPUl9TRVJWRVIsIGNlKTsKLQkJCQllbnYuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0JCQkJcmV0dXJuIG51bGw7Ci0JCQl9Ci0KLQkJCWlmIChzZXJ2ZXIgIT0gbnVsbCkgewotCi0vLwkJCQlPYmplY3QgeCA9IHNlcnZlci5nZXRBZGFwdGVyKElSdW5uaW5nQWN0aW9uU2VydmVyLmNsYXNzKTsKLS8vCQkJCWlmICh4ICE9IG51bGwgJiYgeCBpbnN0YW5jZW9mIElSdW5uaW5nQWN0aW9uU2VydmVyKSB7Ci0vLwkJCQkJaW50IHN0YXRlID0gc2VydmVyLmdldFNlcnZlclN0YXRlKCk7Ci0vLwkJCQkJaWYgKHN0YXRlID09IElTZXJ2ZXIuU1RBVEVfU1RPUFBFRAotLy8JCQkJCQkJfHwgc3RhdGUgPT0gSVNlcnZlci5TVEFURV9VTktOT1dOKSB7Ci0vLwkJCQkJCVN0cmluZyBtb2RlID0gSUxhdW5jaE1hbmFnZXIuUlVOX01PREU7Ci0vLwkJCQkJCXNlcnZlci5zeW5jaHJvbm91c1N0YXJ0KG1vZGUsIG1vbml0b3IpOwotLy8JCQkJCX0KLS8vCQkJCX0KLQotCQkJCWlmIChtb2R1bGUgIT0gbnVsbCAmJiBtb2R1bGUuZ2V0UHJvamVjdCgpLmV4aXN0cygpKSB7Ci0JCQkJCUlNb2R1bGVbXSBwYXJlbnRNb2R1bGVzID0gc2VydmVyLmdldFJvb3RNb2R1bGVzKG1vZHVsZSwKLQkJCQkJCQltb25pdG9yKTsKLQkJCQkJaWYgKHBhcmVudE1vZHVsZXMgIT0gbnVsbCAmJiBwYXJlbnRNb2R1bGVzLmxlbmd0aCAhPSAwKSB7Ci0JCQkJCQltb2R1bGUgPSAoSU1vZHVsZSkgcGFyZW50TW9kdWxlc1swXTsKLQkJCQkJfQotCQkJCQlzZXJ2ZXJXQy5tb2RpZnlNb2R1bGVzKG5ldyBJTW9kdWxlW10geyBtb2R1bGUgfSwKLQkJCQkJCQluZXcgSU1vZHVsZVswXSwgbW9uaXRvcik7Ci0JCQkJfQotCi0JCQl9Ci0KLQkJCXJldHVybiBzZXJ2ZXI7Ci0JCX0gCi0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSAKLSAgICB7Ci0JCQlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBXU1BsdWdpbk1lc3NhZ2VzLk1TR19FUlJPUl9TRVJWRVIsIGUpOwotCQkJZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotCQkJcmV0dXJuIG51bGw7Ci0JCX0gZmluYWxseSB7Ci0JCQl0cnkgewotCQkJCWlmIChzZXJ2ZXJXQyAhPSBudWxsKSB7Ci0JCQkJCXNlcnZlcldDLnNhdmVBbGwodHJ1ZSwgbW9uaXRvcik7Ci0JCQkJfQotCQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkgewotCQkJCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIFdTUGx1Z2luTWVzc2FnZXMuTVNHX0VSUk9SX1NFUlZFUiwgY2UpOwotCQkJCWVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLQkJCQlyZXR1cm4gbnVsbDsKLQkJCX0KLQkJfQotCX0KLQotCS8qKgotCSAqIGNyZWF0ZVNlcnZlciBUaGlzIGNyZWF0ZXMgYSBzZXJ2ZXIgYnV0IGRvZXMgbm90IHJlcG9ydCBlcnJvcnMuIEBwYXJhbQotCSAqIG1vZHVsZSAKLQkgKiBAcGFyYW0gc2VydmVyVHlwZUlkIAotCSAqIEBwYXJhbSBtb25pdG9yIHByb2dyZXNzIG1vbml0b3IgCi0JICogQHJldHVybiBJU2VydmVyIHJldHVybnMgbnVsbCBpZiB1bnN1Y2Nlc3NmdWwKLQkgKiAKLQkgKiBAZGVwcmVjYXRlZAotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVNlcnZlciBjcmVhdGVTZXJ2ZXIoSU1vZHVsZSBtb2R1bGUsIFN0cmluZyBzZXJ2ZXJUeXBlSWQsCi0JCQlJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKLQkJSVNlcnZlcldvcmtpbmdDb3B5IHNlcnZlcldDID0gbnVsbDsKLQkJSVNlcnZlciBzZXJ2ZXIgPSBudWxsOwotCQl0cnkgewotCQkJSVNlcnZlclR5cGUgc2VydmVyVHlwZSA9IFNlcnZlckNvcmUuZmluZFNlcnZlclR5cGUoc2VydmVyVHlwZUlkKTsKLQkJCXNlcnZlcldDID0gc2VydmVyVHlwZS5jcmVhdGVTZXJ2ZXIoc2VydmVyVHlwZUlkLCBudWxsLCBtb25pdG9yKTsKLQotCQkJdHJ5IHsKLQkJCQlpZiAoc2VydmVyV0MgIT0gbnVsbCkgewotCQkJCQlzZXJ2ZXIgPSBzZXJ2ZXJXQy5zYXZlQWxsKHRydWUsIG1vbml0b3IpOwotCQkJCX0KLQkJCX0gY2F0Y2ggKENvcmVFeGNlcHRpb24gY2UpIHsKLQkJCQlyZXR1cm4gbnVsbDsKLQkJCX0KLQotCQkJaWYgKHNlcnZlciAhPSBudWxsKSB7Ci0KLS8vCQkJCU9iamVjdCB4ID0gc2VydmVyLmdldEFkYXB0ZXIoSVJ1bm5pbmdBY3Rpb25TZXJ2ZXIuY2xhc3MpOwotLy8JCQkJaWYgKHggIT0gbnVsbCAmJiB4IGluc3RhbmNlb2YgSVJ1bm5pbmdBY3Rpb25TZXJ2ZXIpIHsKLS8vCQkJCQlpbnQgc3RhdGUgPSBzZXJ2ZXIuZ2V0U2VydmVyU3RhdGUoKTsKLS8vCQkJCQlpZiAoc3RhdGUgPT0gSVNlcnZlci5TVEFURV9TVE9QUEVECi0vLwkJCQkJCQl8fCBzdGF0ZSA9PSBJU2VydmVyLlNUQVRFX1VOS05PV04pIHsKLS8vCQkJCQkJU3RyaW5nIG1vZGUgPSBJTGF1bmNoTWFuYWdlci5SVU5fTU9ERTsKLS8vCQkJCQkJc2VydmVyLnN5bmNocm9ub3VzU3RhcnQobW9kZSwgbW9uaXRvcik7Ci0vLwkJCQkJfQotLy8JCQkJfQotCQkJCWlmIChtb2R1bGUgIT0gbnVsbCkgewotCQkJCQlJTW9kdWxlW10gcGFyZW50TW9kdWxlcyA9IHNlcnZlci5nZXRSb290TW9kdWxlcyhtb2R1bGUsCi0JCQkJCQkJbW9uaXRvcik7Ci0JCQkJCWlmIChwYXJlbnRNb2R1bGVzICE9IG51bGwgJiYgcGFyZW50TW9kdWxlcy5sZW5ndGggIT0gMCkgewotCQkJCQkJbW9kdWxlID0gKElNb2R1bGUpIHBhcmVudE1vZHVsZXNbMF07Ci0JCQkJCX0KLQkJCQkJc2VydmVyV0MubW9kaWZ5TW9kdWxlcyhuZXcgSU1vZHVsZVtdIHsgbW9kdWxlIH0sCi0JCQkJCQkJbmV3IElNb2R1bGVbMF0sIG1vbml0b3IpOwotCQkJCX0KLQotCQkJfQotCi0JCQlyZXR1cm4gc2VydmVyOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0gZmluYWxseSB7Ci0JCQl0cnkgewotCQkJCWlmIChzZXJ2ZXJXQyAhPSBudWxsKSB7Ci0JCQkJCXNlcnZlcldDLnNhdmVBbGwodHJ1ZSwgbW9uaXRvcik7Ci0JCQkJfQotCQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkgewotCQkJCXJldHVybiBudWxsOwotCQkJCS8vIGhhbmRsZXIgY29yZSBleGNlcHRpb24KLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nW10gZ2V0U2VydmVyVHlwZUlkc0J5TW9kdWxlKElWaXJ0dWFsQ29tcG9uZW50IGNvbXBvbmVudCkgewotCQlJUHJvamVjdCBwcm9qZWN0ID0gY29tcG9uZW50LmdldFByb2plY3QoKTsKLQkJU3RyaW5nW10gc2VydmVySWRzID0gbnVsbDsKLQotCQlpZiAocHJvamVjdCAhPSBudWxsKSB7Ci0JCQlJU2VydmVyW10gc2VydmVycyA9IFNlcnZlclV0aWwuZ2V0U2VydmVyc0J5TW9kdWxlKGdldE1vZHVsZShwcm9qZWN0KSwgbnVsbCk7Ci0JCQlpZiAoc2VydmVycyAhPSBudWxsKSB7Ci0JCQkJc2VydmVySWRzID0gbmV3IFN0cmluZ1tzZXJ2ZXJzLmxlbmd0aF07Ci0KLQkJCQlmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgc2VydmVycy5sZW5ndGg7IGluZGV4KyspIHsKLQkJCQkJc2VydmVySWRzW2luZGV4XSA9IHNlcnZlcnNbaW5kZXhdLmdldElkKCk7Ci0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQlpZiAoc2VydmVySWRzID09IG51bGwpIHsKLQkJCXNlcnZlcklkcyA9IG5ldyBTdHJpbmdbMF07Ci0JCX0KLQotCQlyZXR1cm4gc2VydmVySWRzOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBwcm9qZWN0Ci0JICogQHJldHVybgotCSAqIEBkZXByZWNhdGVkIHNob3VsZCBiZSB1c2luZyBnZXRTZXJ2ZXJUeXBlSWRzQnlNb2R1bGUoIElWaXJ0dWFsQ29tcG9uZW50ICkKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZ1tdIGdldFNlcnZlclR5cGVJZHNCeU1vZHVsZShJUHJvamVjdCBwcm9qZWN0KSB7Ci0JCVZlY3RvciBzZXJ2ZXJJZHMgPSBuZXcgVmVjdG9yKCk7Ci0JCWlmIChwcm9qZWN0ICE9IG51bGwpIHsKLQkJCUlTZXJ2ZXJbXSBzZXJ2ZXJzID0gU2VydmVyVXRpbC5nZXRTZXJ2ZXJzQnlNb2R1bGUoUmVzb3VyY2VVdGlscwotCQkJCQkuZ2V0TW9kdWxlKHByb2plY3QpLCBudWxsKTsKLQkJCWlmIChzZXJ2ZXJzICE9IG51bGwgJiYgc2VydmVycy5sZW5ndGggPiAwKSB7Ci0JCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBzZXJ2ZXJzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJCXNlcnZlcklkcy5hZGQoc2VydmVyc1tpXS5nZXRJZCgpKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIChTdHJpbmdbXSkgc2VydmVySWRzLnRvQXJyYXkobmV3IFN0cmluZ1tzZXJ2ZXJJZHMuc2l6ZSgpXSk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBJTW9kdWxlIGdldE1vZHVsZShJUHJvamVjdCBwcm9qZWN0KSB7Ci0JcmV0dXJuIFNlcnZlclV0aWwuZ2V0TW9kdWxlKHByb2plY3QpOwotfQotCQotLy8gV29ya2Fyb3VuZCBmb3IgMTEzNjIxCi0vL3B1YmxpYyBzdGF0aWMgSU1vZHVsZSBnZXRNb2R1bGUoSVByb2plY3QgcHJvamVjdCkgewotLy8JSU1vZHVsZVtdIG1vZHVsZXMgPSBTZXJ2ZXJVdGlsLmdldE1vZHVsZXMocHJvamVjdCk7Ci0vLwlpZiAobW9kdWxlcyE9bnVsbCAmJiBtb2R1bGVzLmxlbmd0aCE9MCkgewotLy8JCXJldHVybiBtb2R1bGVzWzBdOwotLy8JfQotLy8JcmV0dXJuIG51bGw7Ci0vL30KLSAgCi0JLyoqCi0JICogUmV0dXJucyB0aGUgVVJMIHN0cmluZyBjb3JyZXNwb25kaW5nIHRvIHRoZSB3ZWIgc2VydmVyIG1vZHVsZSByb290IG9mIHRoZQotCSAqIGNvbXBvbmVudCBiYXNlZCBvbiBhIHNlcnZlciBmYWN0b3J5IElEIG9yIG51bGwgaWYgdGhlIHByb2plY3QgaGFzIG5vIFdlYiBuYXR1cmUKLQkgKiBvciB0aGUgbW9kdWxlIHJvb3QgY2Fubm90IGJlIGRldGVybWluZWQgKGUuZy4gRm9yIHNvbWUgdHlwZXMgb2YgCi0JICogc2VydmVycywgd2Ugd291bGQgbm90IGJlIGFibGUgdG8gZ2V0IG1vZHVsZSByb290IFVSTCBpZiB0aGUgc2VydmVyIGhhcyBub3QgYmVlbiBzdGFydGVkKS4KLQkgKiBOb3RlIHRoYXQgd2UgYXJlIG5vdCByZWx5aW5nIG9uIHdoaWNoIHNlcnZlciB0aGUgbW9kdWxlIGlzIGN1cnJlbnRseSBhc3NvY2lhdGVkIHdpdGggdG8gZGV0ZXJtaW5lCi0JICogdGhlIGNvcnJlY3QgbW9kdWxlIHNlcnZlciByb290IGJlY2F1c2UgdGhlIHByb2plY3QgbWlnaHQgYmUgYXNzb2NpYXRlZCB3aXRoIGEgc2VydmVyIGJ1dCB3ZSBuZWVkIHRoZQotCSAqIG1vZHVsZSByb290IGJhc2VkIG9uIGFub3RoZXIgc2VydmVyIGZhY3RvcnkgSUQuCi0JICogCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiAgICAgICAgICAgIFRoZSBwcm9qZWN0LgotCSAqIEBwYXJhbSBzZXJ2ZXJGYWN0b3J5SWQgc2VydmVyIGZhY3RvcnkgSUQKLQkgKiBAcmV0dXJuIFRoZSB3ZWIgc2VydmVyIG1vZHVsZSByb290IFVSTCBvciBudWxsIAotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFdlYkNvbXBvbmVudFVSTChJUHJvamVjdCBwcm9qZWN0LCBTdHJpbmcgc2VydmVyRmFjdG9yeUlkKSB7Ci0JCVN0cmluZyB3ZWJQcm9qZWN0VVJMID0gbnVsbDsKLQkJSU1vZHVsZSBtb2R1bGUgPSBnZXRNb2R1bGUocHJvamVjdCk7Ci0JCWlmIChtb2R1bGUgIT0gbnVsbCkgewotCQkJSVNlcnZlclR5cGUgc2VydmVyVHlwZSA9IFNlcnZlckNvcmUuZmluZFNlcnZlclR5cGUoc2VydmVyRmFjdG9yeUlkKTsgICAgICAgICAgICAgICAKLQkJCWlmIChzZXJ2ZXJUeXBlIT1udWxsKQotCQkJewotCQkJCXRyeSB7Ci0JCQkJCS8vQ2hvb3NlIGEgUnVudGltZSB3aGljaCBpcyBub3QgYSBzdHViCi0JCQkJCUlSdW50aW1lIG5vblN0dWJSdW50aW1lID0gbnVsbDsKLQkJCQkJSVJ1bnRpbWVbXSBydW50aW1lcyA9IFNlcnZlclV0aWwuZ2V0UnVudGltZXMobnVsbCwgbnVsbCk7Ci0JCQkJCVN0cmluZyBzZXJ2ZXJSdW50aW1lVHlwZUlkID0gc2VydmVyVHlwZS5nZXRSdW50aW1lVHlwZSgpLmdldElkKCk7Ci0JCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgcnVudGltZXMubGVuZ3RoOyBpKyspIHsKLQkJCQkJCUlSdW50aW1lIHJ1bnRpbWUgPSBydW50aW1lc1tpXTsKLQkJCQkJCUlSdW50aW1lVHlwZSBydW50aW1lVHlwZSA9IHJ1bnRpbWUuZ2V0UnVudGltZVR5cGUoKTsKLQkJCQkJCWlmIChydW50aW1lVHlwZSAhPSBudWxsKQotCQkJCQkJewotCQkJCQkJCVN0cmluZyB0aGlzUnVudGltZVR5cGVJZCA9IHJ1bnRpbWVUeXBlLmdldElkKCk7Ci0JCQkJCQkJaWYgKHRoaXNSdW50aW1lVHlwZUlkLmVxdWFscyhzZXJ2ZXJSdW50aW1lVHlwZUlkKSAmJiAhcnVudGltZS5pc1N0dWIoKSkgewotCQkJCQkJCQkvL0ZvdW5kIGFuIGFwcHJvcHJpYXRlIElSdW50aW1lIHRoYXQgaXMgbm90IGEgc3R1YgotCQkJCQkJCQlub25TdHViUnVudGltZSA9IHJ1bnRpbWU7Ci0JCQkJCQkJCWJyZWFrOwotCQkJCQkJCX0KLQkJCQkJCX0KLQkJCQkJfQotCi0JCQkJCWlmIChub25TdHViUnVudGltZSAhPSBudWxsKQotCQkJCQl7Ci0JCQkJCQlJU2VydmVyV29ya2luZ0NvcHkgc2VydmVyV0MgPSBzZXJ2ZXJUeXBlLmNyZWF0ZVNlcnZlcihudWxsLCBudWxsLCBub25TdHViUnVudGltZSwgbnVsbCk7Ci0JCQkJCQlJVVJMUHJvdmlkZXIgdXJsUHJvdmlkZXIgPSAoSVVSTFByb3ZpZGVyKSBzZXJ2ZXJXQy5sb2FkQWRhcHRlcihJVVJMUHJvdmlkZXIuY2xhc3MsIG51bGwpOwotCQkJCQkJaWYgKHVybFByb3ZpZGVyIT1udWxsKSB7Ci0JCQkJCQkJVVJMIHVybCA9IHVybFByb3ZpZGVyLmdldE1vZHVsZVJvb3RVUkwobW9kdWxlKTsJCQkJCQkJCi0JCQkJCQkJaWYgKHVybCAhPSBudWxsKSB7Ci0JCQkJCQkJCVN0cmluZyBzID0gdXJsLnRvU3RyaW5nKCk7Ci0JCQkJCQkJCXdlYlByb2plY3RVUkwgPSAocy5lbmRzV2l0aCgiLyIpID8gcy5zdWJzdHJpbmcoMCwgcy5sZW5ndGgoKSAtIDEpIDogcyk7Ci0JCQkJCQkJfQkJCQkKLQkJCQkJCX0KLQkJCQkJfQotCi0JCQkJfSBjYXRjaChDb3JlRXhjZXB0aW9uIGNlKXsKLQkJCQkJTG9nZ2VyLmdldExvZ2dlcigpLmxvZyhjZSk7Ci0JCQkJfQotCi0JCQl9Ci0JCX0KLQkJcmV0dXJuIHdlYlByb2plY3RVUkw7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgVVJMIHN0cmluZyBjb3JyZXNwb25kaW5nIHRvIHRoZSB3ZWIgc2VydmVyIG1vZHVsZSByb290IG9mIHRoZQotCSAqIGNvbXBvbmVudCBiYXNlZCBvbiBhIHNlcnZlciBmYWN0b3J5IElEIGFuZCBzZXJ2ZXIuICBSZXR1cm5zIG51bGwgaWYgdGhlIHByb2plY3QgaGFzIG5vIFdlYiBuYXR1cmUKLQkgKiBvciB0aGUgbW9kdWxlIHJvb3QgY2Fubm90IGJlIGRldGVybWluZWQgKGUuZy4gRm9yIHNvbWUgdHlwZXMgb2YgCi0JICogc2VydmVycywgd2Ugd291bGQgbm90IGJlIGFibGUgdG8gZ2V0IG1vZHVsZSByb290IFVSTCBpZiB0aGUgc2VydmVyIGhhcyBub3QgYmVlbiBzdGFydGVkKS4KLQkgKiBOb3RlIHRoYXQgd2UgYXJlIG5vdCByZWx5aW5nIG9uIHdoaWNoIHNlcnZlciB0aGUgbW9kdWxlIGlzIGN1cnJlbnRseSBhc3NvY2lhdGVkIHdpdGggdG8gZGV0ZXJtaW5lCi0JICogdGhlIGNvcnJlY3QgbW9kdWxlIHNlcnZlciByb290IGJlY2F1c2UgdGhlIHByb2plY3QgbWlnaHQgYmUgYXNzb2NpYXRlZCB3aXRoIGEgc2VydmVyIGJ1dCB3ZSBuZWVkIHRoZQotCSAqIG1vZHVsZSByb290IGJhc2VkIG9uIGFub3RoZXIgc2VydmVyIC8gc2VydmVyIGZhY3RvcnkgSUQuCi0JICogCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiAgICAgICAgICAgIFRoZSBwcm9qZWN0LgotCSAqIEBwYXJhbSBzZXJ2ZXJGYWN0b3J5SWQgc2VydmVyIGZhY3RvcnkgSUQKLQkgKiBAcGFyYW0gc2VydmVyIFNlcnZlciBpZAotCSAqIEByZXR1cm4gVGhlIHdlYiBzZXJ2ZXIgbW9kdWxlIHJvb3QgVVJMIG9yIG51bGwgCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0V2ViQ29tcG9uZW50VVJMKElQcm9qZWN0IHByb2plY3QsCi0JCQlTdHJpbmcgc2VydmVyRmFjdG9yeUlkLCBJU2VydmVyIHNlcnZlcikgewotCi0JCVN0cmluZyB3ZWJQcm9qZWN0VVJMID0gbnVsbDsKLQkJSU1vZHVsZSBtb2R1bGUgPSBnZXRNb2R1bGUocHJvamVjdCk7Ci0JCWlmIChtb2R1bGUgIT0gbnVsbCkgewotCQkJaWYgKHNlcnZlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgSVVSTFByb3ZpZGVyIHVybFByb3ZpZGVyID0gKElVUkxQcm92aWRlcikgc2VydmVyLmxvYWRBZGFwdGVyKElVUkxQcm92aWRlci5jbGFzcywgbnVsbCk7Ci0gICAgICAgICAgICAgICAgaWYgKHVybFByb3ZpZGVyIT1udWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIFVSTCB1cmwgPSB1cmxQcm92aWRlci5nZXRNb2R1bGVSb290VVJMKG1vZHVsZSk7ICAgICAgICAgICAgICAKLQkJCQkJaWYgKHVybCAhPSBudWxsKSB7Ci0JCQkJCSAgU3RyaW5nIHMgPSB1cmwudG9TdHJpbmcoKTsKLQkJCQkJICB3ZWJQcm9qZWN0VVJMID0gKHMuZW5kc1dpdGgoIi8iKSA/IHMuc3Vic3RyaW5nKDAsIHMubGVuZ3RoKCkgLSAxKSA6IHMpOwotICAgICAgICAgICAgICAgICAgICB9Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQl3ZWJQcm9qZWN0VVJMID0gZ2V0V2ViQ29tcG9uZW50VVJMKHByb2plY3QsIHNlcnZlckZhY3RvcnlJZCk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIHdlYlByb2plY3RVUkw7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEVuY29kZWRXZWJDb21wb25lbnRVUkwoSVByb2plY3QgcHJvamVjdCwgU3RyaW5nIHNlcnZlckZhY3RvcnlJZCkgewotCQlTdHJpbmcgdXJsID0gZ2V0V2ViQ29tcG9uZW50VVJMKHByb2plY3QsIHNlcnZlckZhY3RvcnlJZCk7Ci0JCXJldHVybiBlbmNvZGVVUkwodXJsKTsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RW5jb2RlZFdlYkNvbXBvbmVudFVSTChJUHJvamVjdCBwcm9qZWN0LCBTdHJpbmcgc2VydmVyRmFjdG9yeUlkLCBJU2VydmVyIHNlcnZlcikgewotCQlTdHJpbmcgdXJsID0gZ2V0V2ViQ29tcG9uZW50VVJMKHByb2plY3QsIHNlcnZlckZhY3RvcnlJZCwgc2VydmVyKTsKLQkJcmV0dXJuIGVuY29kZVVSTCh1cmwpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGVuY29kZVVSTChTdHJpbmcgdXJsKSB7Ci0JCWlmICh1cmwgIT0gbnVsbCkgewotCQkJaW50IGluZGV4ID0gdXJsLmxhc3RJbmRleE9mKCcvJyk7Ci0JCQlpZiAoaW5kZXggIT0gLTEpIHsKLQkJCQlTdHJpbmdCdWZmZXIgZW5jb2RlZFVSTCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJCQllbmNvZGVkVVJMLmFwcGVuZCh1cmwuc3Vic3RyaW5nKDAsIGluZGV4ICsgMSkpOwotCQkJCXRyeSB7Ci0JCQkJCVN0cmluZyBjdHh0Um9vdCA9IFVSTEVuY29kZXIuZW5jb2RlKHVybC5zdWJzdHJpbmcoaW5kZXggKyAxLCB1cmwubGVuZ3RoKCkpLCAiVVRGLTgiKTsKLQkJCQkJaW50IHBsdXNJbmRleCA9IGN0eHRSb290LmluZGV4T2YoJysnKTsKLQkJCQkJd2hpbGUgKHBsdXNJbmRleCAhPSAtMSkgewotCQkJCQkJU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQkJCQkJc2IuYXBwZW5kKGN0eHRSb290LnN1YnN0cmluZygwLCBwbHVzSW5kZXgpKTsKLQkJCQkJCXNiLmFwcGVuZCgiJTIwIik7Ci0JCQkJCQlzYi5hcHBlbmQoY3R4dFJvb3Quc3Vic3RyaW5nKHBsdXNJbmRleCArIDEsIGN0eHRSb290Ci0JCQkJCQkJLmxlbmd0aCgpKSk7Ci0JCQkJCQljdHh0Um9vdCA9IHNiLnRvU3RyaW5nKCk7Ci0JCQkJCQlwbHVzSW5kZXggPSBjdHh0Um9vdC5pbmRleE9mKCcrJyk7Ci0JCQkJCX0KLQkJCQkJZW5jb2RlZFVSTC5hcHBlbmQoY3R4dFJvb3QpOwotCQkJCX1jYXRjaCAoSU9FeGNlcHRpb24gaW8pewotCQkJCQkvL2hhbmRsZXIgZXhjZXB0aW9uCi0JCQkJfQkJCQkKLQkJCQl1cmwgPSBlbmNvZGVkVVJMLnRvU3RyaW5nKCk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIHVybDsKLQl9CQotCi0JcHVibGljIHN0YXRpYyBJU2VydmVyIGdldERlZmF1bHRFeGlzdGluZ1NlcnZlcihJVmlydHVhbENvbXBvbmVudCBjb21wb25lbnQpIHsKLQkJSVByb2plY3QgcHJvamVjdCA9IGNvbXBvbmVudC5nZXRQcm9qZWN0KCk7Ci0JCUlNb2R1bGUgbW9kdWxlID0gZ2V0TW9kdWxlKHByb2plY3QpOwotCQlJU2VydmVyIHByZWZlcnJlZFNlcnZlciA9IFNlcnZlckNvcmUuZ2V0RGVmYXVsdFNlcnZlcihtb2R1bGUpOwotCQlpZiAocHJlZmVycmVkU2VydmVyICE9IG51bGwpCi0JCQlyZXR1cm4gcHJlZmVycmVkU2VydmVyOwotCQkKLQkJSVNlcnZlcltdIGNvbmZpZ3VyZWRTZXJ2ZXJzID0gU2VydmVyVXRpbC5nZXRTZXJ2ZXJzQnlNb2R1bGUobW9kdWxlLAotCQkJCW51bGwpOwotCi0JCWlmIChjb25maWd1cmVkU2VydmVycyAhPSBudWxsICYmIGNvbmZpZ3VyZWRTZXJ2ZXJzLmxlbmd0aCA+IDApIHsKLQkJCXByZWZlcnJlZFNlcnZlciA9IGNvbmZpZ3VyZWRTZXJ2ZXJzWzBdOwotCQl9IGVsc2UgewotCQkJSVNlcnZlcltdIG5vbkNvbmZpZ3VyZWRTZXJ2ZXJzID0gU2VydmVyVXRpbAotCQkJCQkuZ2V0QXZhaWxhYmxlU2VydmVyc0Zvck1vZHVsZShtb2R1bGUsIGZhbHNlLCBudWxsKTsKLQotCQkJaWYgKG5vbkNvbmZpZ3VyZWRTZXJ2ZXJzICE9IG51bGwKLQkJCQkJJiYgbm9uQ29uZmlndXJlZFNlcnZlcnMubGVuZ3RoID4gMCkgewotCQkJCXByZWZlcnJlZFNlcnZlciA9IG5vbkNvbmZpZ3VyZWRTZXJ2ZXJzWzBdOwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIHByZWZlcnJlZFNlcnZlcjsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqIEByZXR1cm4KLQkgKiBAZGVwcmVjYXRlZCBzaG91bGQgYmUgdXNpbmcgZ2V0RGVmYXVsdEV4aXN0aW5nU2VydmVyKCBJVmlydHVhbENvbXBvbmVudCApCi0JICovCi0JcHVibGljIHN0YXRpYyBJU2VydmVyIGdldERlZmF1bHRFeGlzdGluZ1NlcnZlcihJUHJvamVjdCBwcm9qZWN0KSB7Ci0gICAgCi0gICAgICBJTW9kdWxlIG1vZHVsZSA9IFNlcnZlclV0aWwuZ2V0TW9kdWxlKHByb2plY3QpOwotICAgICAgSVNlcnZlciBwcmVmZXJyZWRTZXJ2ZXIgPSBudWxsOwotICAgICAgcHJlZmVycmVkU2VydmVyID0gU2VydmVyQ29yZS5nZXREZWZhdWx0U2VydmVyKG1vZHVsZSk7Ci0JCQotLy8gV29ya2Fyb3VuZCBmb3IgMTEzNjIxCi0vLwkJSU1vZHVsZVtdIG1vZHVsZXMgPSBTZXJ2ZXJVdGlsLmdldE1vZHVsZXMocHJvamVjdCk7Ci0vLyAgICAgIElTZXJ2ZXIgcHJlZmVycmVkU2VydmVyID0gbnVsbDsKLS8vICAgICAgaWYgKG1vZHVsZXMubGVuZ3RoID4gMCl7Ci0vLyAgICAgICAgcHJlZmVycmVkU2VydmVyID0gU2VydmVyQ29yZS5nZXREZWZhdWx0U2VydmVyKG1vZHVsZXNbMF0pOwotLy8gICAgICB9Ci0gIAotCQlpZiAocHJlZmVycmVkU2VydmVyICE9IG51bGwpCi0JCQlyZXR1cm4gcHJlZmVycmVkU2VydmVyOwotCi0JCUlTZXJ2ZXJbXSBjb25maWd1cmVkU2VydmVycyA9IFNlcnZlclV0aWwuZ2V0U2VydmVyc0J5TW9kdWxlKAotCQkJCVJlc291cmNlVXRpbHMuZ2V0TW9kdWxlKHByb2plY3QpLCBudWxsKTsKLQkJaWYgKGNvbmZpZ3VyZWRTZXJ2ZXJzICE9IG51bGwgJiYgY29uZmlndXJlZFNlcnZlcnMubGVuZ3RoID4gMCkgewotCQkJcmV0dXJuIGNvbmZpZ3VyZWRTZXJ2ZXJzWzBdOwotCQl9Ci0KLQkJSVNlcnZlcltdIG5vbkNvbmZpZ3VyZWRTZXJ2ZXJzID0gU2VydmVyVXRpbAotCQkJCS5nZXRBdmFpbGFibGVTZXJ2ZXJzRm9yTW9kdWxlKFJlc291cmNlVXRpbHMuZ2V0TW9kdWxlKHByb2plY3QpLAotCQkJCQkJZmFsc2UsIG51bGwpOwotCQlpZiAobm9uQ29uZmlndXJlZFNlcnZlcnMgIT0gbnVsbCAmJiBub25Db25maWd1cmVkU2VydmVycy5sZW5ndGggPiAwKSB7Ci0JCQlyZXR1cm4gbm9uQ29uZmlndXJlZFNlcnZlcnNbMF07Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoKLQkgKiBAcGFyYW0gbW9kdWxlVHlwZSAtIGFkIGRlZmluZWQgaW4gSVNlcnZlclRhcmdldENvbnN0YW50cyAoaS5lLiBFQVJfVFlQRSwKLQkgKiBXRUJfVFlQRSwgZXRjLikgQHBhcmFtIGoyZWVWZXJzaW9uIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgaW50Ci0JICogdmFsdWVzIGluIEoyRUVWZXJzaW9uQ29uc3RhbnRzIGkuZS4gIjEyIiBvciAiMTMiIG9yICIxNCIgQHJldHVybiBTdHJpbmcKLQkgKiB0aGUgaWQgb2YgdGhlIHNlcnZlciB0YXJnZXQgLSB0byBiZSB1c2VkIGluIHByb2plY3QgY3JlYXRpb24gb3BlcmF0aW9ucy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRTZXJ2ZXJUYXJnZXRJZEZyb21GYWN0b3J5SWQoU3RyaW5nIHNlcnZlckZhY3RvcnlJZCwKLQkJCVN0cmluZyBtb2R1bGVUeXBlLCBTdHJpbmcgajJlZVZlcnNpb24pIHsKLQkJSVNlcnZlclR5cGUgc2VydmVyVHlwZSA9IFNlcnZlckNvcmUuZmluZFNlcnZlclR5cGUoc2VydmVyRmFjdG9yeUlkKTsKLQkJaWYgKHNlcnZlclR5cGUgPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCi0JCVN0cmluZyBzZXJ2ZXJSdW50aW1lVHlwZUlkID0gc2VydmVyVHlwZS5nZXRSdW50aW1lVHlwZSgpLmdldElkKCk7Ci0KLQkJU3RyaW5nIHN0SjJFRVZlcnNpb24gPSBTZXJ2ZXJVdGlscy5nZXRTZXJ2ZXJUYXJnZXRKMkVFVmVyc2lvbihqMmVlVmVyc2lvbik7Ci0gICAgICAgIExpc3QgcnVudGltZXMgPSBBcnJheXMuYXNMaXN0KFNlcnZlclV0aWwuZ2V0UnVudGltZXMobW9kdWxlVHlwZSwgc3RKMkVFVmVyc2lvbikpOyAgICAKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBydW50aW1lcy5zaXplKCk7IGkrKykgewotCQkJSVJ1bnRpbWUgcnVudGltZSA9IChJUnVudGltZSkgcnVudGltZXMuZ2V0KGkpOwotCQkJSVJ1bnRpbWVUeXBlIHJ1bnRpbWVUeXBlID0gcnVudGltZS5nZXRSdW50aW1lVHlwZSgpOwotCQkJaWYgKHJ1bnRpbWVUeXBlICE9IG51bGwpCi0JCQl7Ci0JCQkJU3RyaW5nIHRoaXNSdW50aW1lVHlwZUlkID0gcnVudGltZVR5cGUuZ2V0SWQoKTsKLQkJCQlpZiAodGhpc1J1bnRpbWVUeXBlSWQuZXF1YWxzKHNlcnZlclJ1bnRpbWVUeXBlSWQpICYmICFydW50aW1lLmlzU3R1YigpKSB7Ci0JCQkJCXJldHVybiBydW50aW1lLmdldElkKCk7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoKLQkgKiBAcGFyYW0gc2VydmVyRmFjdG9yeUlkIHRoZSBzZXJ2ZXIncyBmYWN0b3J5IGlkIEByZXR1cm5zIHRoZSBydW50aW1lIHR5cGUKLQkgKiBpZCBnaXZlbiB0aGUgc2VydmVyJ3MgZmFjdG9yeSBpZC4gUmV0dXJucyBhIGJsYW5rIFN0cmluZyBpZiB0aGUgbm8KLQkgKiBTZXJ2ZXJUeXBlIGV4aXN0cyBmb3IgdGhlIGdpdmVuIGZhY3RvcnkgaWQuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UnVudGltZVRhcmdldElkRnJvbUZhY3RvcnlJZChTdHJpbmcgc2VydmVyRmFjdG9yeUlkKSB7Ci0JCUlTZXJ2ZXJUeXBlIHNlcnZlclR5cGUgPSBTZXJ2ZXJDb3JlLmZpbmRTZXJ2ZXJUeXBlKHNlcnZlckZhY3RvcnlJZCk7Ci0JCWlmIChzZXJ2ZXJUeXBlICE9IG51bGwpIHsKLQkJCVN0cmluZyBzZXJ2ZXJSdW50aW1lSWQgPSBzZXJ2ZXJUeXBlLmdldFJ1bnRpbWVUeXBlKCkuZ2V0SWQoKTsKLQkJCXJldHVybiBzZXJ2ZXJSdW50aW1lSWQ7Ci0JCX0gZWxzZQotCQkJcmV0dXJuICIiOwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRGYWN0b3J5SWRGcm9tUnVudGltZVRhcmdldElkKFN0cmluZyBydW50aW1lVGFyZ2V0SWQpewotCQlJU2VydmVyVHlwZVtdIHNlcnZlclR5cGVzID0gU2VydmVyQ29yZS5nZXRTZXJ2ZXJUeXBlcygpOwotCQlmb3IgKGludCBpPTA7aTxzZXJ2ZXJUeXBlcy5sZW5ndGg7aSsrKSB7Ci0JCQlJUnVudGltZVR5cGUgcnVudGltZVR5cCA9IHNlcnZlclR5cGVzW2ldLmdldFJ1bnRpbWVUeXBlKCk7Ci0JCQlpZiAocnVudGltZVR5cCE9bnVsbCl7Ci0JCQkJaWYgKHJ1bnRpbWVUeXAuZ2V0SWQoKS5lcXVhbHMocnVudGltZVRhcmdldElkKSkKLQkJCQkJcmV0dXJuIHNlcnZlclR5cGVzW2ldLmdldElkKCk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuICIiOwotCQkKLQl9Ci0JCi0KLQkvKgotCSAqIEBwYXJhbSBzZXJ2ZXJGYWN0b3J5SWQgdGhlIHNlcnZlcidzIGZhY3RvcnkgaWQgQHJldHVybnMgdGhlIHNlcnZlciB0eXBlCi0JICogaWQgZ2l2ZW4gdGhlIHNlcnZlcidzIGZhY3RvcnkgaWQuIFJldHVybnMgYSBibGFuayBTdHJpbmcgaWYgdGhlIG5vCi0JICogU2VydmVyVHlwZSBleGlzdHMgZm9yIHRoZSBnaXZlbiBmYWN0b3J5IGlkLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFNlcnZlclR5cGVJZEZyb21GYWN0b3J5SWQoU3RyaW5nIHNlcnZlckZhY3RvcnlJZCkgewotCQlJU2VydmVyVHlwZSBzZXJ2ZXJUeXBlID0gU2VydmVyQ29yZS5maW5kU2VydmVyVHlwZShzZXJ2ZXJGYWN0b3J5SWQpOwotCQlpZiAoc2VydmVyVHlwZSAhPSBudWxsKSB7Ci0JCQlTdHJpbmcgc2VydmVyVHlwZUlkID0gc2VydmVyVHlwZS5nZXRJZCgpOwotCQkJcmV0dXJuIHNlcnZlclR5cGVJZDsKLQkJfSBlbHNlCi0JCQlyZXR1cm4gIiI7Ci0JfQotCi0JLyoKLQkgKiBAcGFyYW0gajJlZVZlcnNpb24gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBpbnQgdmFsdWVzIGluCi0JICogSjJFRVZlcnNpb25Db25zdGFudHMgaS5lLiAiMTIiIG9yICIxMyIgb3IgIjE0IgotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1RhcmdldFZhbGlkRm9yRUFSKFN0cmluZyBydW50aW1lVGFyZ2V0SWQsCi0JCQlTdHJpbmcgajJlZVZlcnNpb24pIHsKLQkJaWYgKHJ1bnRpbWVUYXJnZXRJZCA9PSBudWxsKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCVN0cmluZyBlYXJNb2R1bGVUeXBlID0gSU1vZHVsZUNvbnN0YW50cy5KU1RfRUFSX01PRFVMRTsKLQkJU3RyaW5nIHN0SjJFRVZlcnNpb24gPSBTZXJ2ZXJVdGlscy5nZXRTZXJ2ZXJUYXJnZXRKMkVFVmVyc2lvbihqMmVlVmVyc2lvbik7Ci0gICAgICAgIExpc3QgcnVudGltZXMgPSBBcnJheXMuYXNMaXN0KFNlcnZlclV0aWwuZ2V0UnVudGltZXMoZWFyTW9kdWxlVHlwZSwgc3RKMkVFVmVyc2lvbikpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHJ1bnRpbWVzLnNpemUoKTsgaSsrKSB7Ci0JCQlJUnVudGltZSBydW50aW1lID0gKElSdW50aW1lKSBydW50aW1lcy5nZXQoaSk7Ci0JCQlJUnVudGltZVR5cGUgcnVudGltZVR5cGUgPSBydW50aW1lLmdldFJ1bnRpbWVUeXBlKCk7Ci0JCQlpZiAocnVudGltZVR5cGUgIT0gbnVsbCkKLQkJCXsKLQkJCQlTdHJpbmcgdGhpc0lkID0gcnVudGltZVR5cGUuZ2V0SWQoKTsKLQkJCQlpZiAodGhpc0lkLmVxdWFscyhydW50aW1lVGFyZ2V0SWQpKQotCQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQkJfQotCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkvKgotCSAqIEBwYXJhbSBqMmVlVmVyc2lvbiBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGludCB2YWx1ZXMgaW4KLQkgKiBKMkVFVmVyc2lvbkNvbnN0YW50cyBpLmUuICIxMiIgb3IgIjEzIiBvciAiMTQiIEBwYXJhbSB0aGUgcHJvamVjdCB0eXBlCi0JICogZnJvbSBJU2VydmVyVGFyZ2V0Q29uc3RhbnRzCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzVGFyZ2V0VmFsaWRGb3JQcm9qZWN0VHlwZShTdHJpbmcgcnVudGltZVRhcmdldElkLAotCQkJU3RyaW5nIGoyZWVWZXJzaW9uLCBTdHJpbmcgcHJvamVjdFR5cGUpIHsKLQkJaWYgKHJ1bnRpbWVUYXJnZXRJZCA9PSBudWxsKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCWlmIChwcm9qZWN0VHlwZSA9PSBudWxsIHx8IHByb2plY3RUeXBlLmxlbmd0aCgpID09IDApCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJU3RyaW5nIHN0SjJFRVZlcnNpb24gPSBTZXJ2ZXJVdGlscy5nZXRTZXJ2ZXJUYXJnZXRKMkVFVmVyc2lvbihqMmVlVmVyc2lvbik7Ci0gICAgICAgIExpc3QgcnVudGltZXMgPSBBcnJheXMuYXNMaXN0KFNlcnZlclV0aWwuZ2V0UnVudGltZXMocHJvamVjdFR5cGUsIHN0SjJFRVZlcnNpb24pKTsgICAgCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgcnVudGltZXMuc2l6ZSgpOyBpKyspIHsKLQkJCUlSdW50aW1lIHJ1bnRpbWUgPSAoSVJ1bnRpbWUpIHJ1bnRpbWVzLmdldChpKTsKLQkJCUlSdW50aW1lVHlwZSBydW50aW1lVHlwZSA9IHJ1bnRpbWUuZ2V0UnVudGltZVR5cGUoKTsKLQkJCWlmIChydW50aW1lVHlwZSAhPSBudWxsKQotCQkJewotCQkJCVN0cmluZyB0aGlzSWQgPSBydW50aW1lVHlwZS5nZXRJZCgpOwotCQkJCWlmICh0aGlzSWQuZXF1YWxzKHJ1bnRpbWVUYXJnZXRJZCkpCi0JCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFNlcnZlclRhcmdldEoyRUVWZXJzaW9uKFN0cmluZyBqMmVlVmVyc2lvbikgewotCi0JCWlmIChqMmVlVmVyc2lvbiA9PSBudWxsIHx8IGoyZWVWZXJzaW9uLmxlbmd0aCgpID09IDApCi0JCQlyZXR1cm4gbnVsbDsKLQotCQlpbnQgajJlZVZlcnNpb25JbnQgPSBJbnRlZ2VyLnBhcnNlSW50KGoyZWVWZXJzaW9uKTsKLQkJc3dpdGNoIChqMmVlVmVyc2lvbkludCkgewotCQljYXNlIChKMkVFVmVyc2lvbkNvbnN0YW50cy5KMkVFXzFfMl9JRCk6Ci0JCQlyZXR1cm4gSVNlcnZlclRhcmdldENvbnN0YW50cy5KMkVFXzEyOwotCQljYXNlIChKMkVFVmVyc2lvbkNvbnN0YW50cy5KMkVFXzFfM19JRCk6Ci0JCQlyZXR1cm4gSVNlcnZlclRhcmdldENvbnN0YW50cy5KMkVFXzEzOwotCQljYXNlIChKMkVFVmVyc2lvbkNvbnN0YW50cy5KMkVFXzFfNF9JRCk6Ci0JCQlyZXR1cm4gSVNlcnZlclRhcmdldENvbnN0YW50cy5KMkVFXzE0OwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQl9Ci0JCi0JLy9Db252ZXJ0cyBhIG1vZHVsZSB0eXBlIGZyb20gSjJFRVV0aWxzIHRvIGEgbW9kdWxlIHR5cGUgbGlrZQotCS8vdGhlIG9uZSBpbiBJU2VydmVyVGFyZ2V0Q29uc3RhbnRzLgotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFNlcnZlclRhcmdldE1vZHVsZVR5cGUoaW50IG1vZHVsZVR5cGUpCi0JewotCQlzd2l0Y2ggKG1vZHVsZVR5cGUpCi0gICAgewotICAgIGNhc2UgSjJFRVV0aWxzLldFQiA6Ci0gICAgICByZXR1cm4gSVNlcnZlclRhcmdldENvbnN0YW50cy5XRUJfVFlQRTsKLSAgICBjYXNlIEoyRUVVdGlscy5FSkIgOgotICAgICAgcmV0dXJuIElTZXJ2ZXJUYXJnZXRDb25zdGFudHMuRUpCX1RZUEU7Ci0gICAgY2FzZSBKMkVFVXRpbHMuQVBQQ0xJRU5UIDoKLSAgICAgIHJldHVybiBJU2VydmVyVGFyZ2V0Q29uc3RhbnRzLkFQUF9DTElFTlRfVFlQRTsKLSAgICBjYXNlIEoyRUVVdGlscy5FQVIgOgotICAgICAgcmV0dXJuIElTZXJ2ZXJUYXJnZXRDb25zdGFudHMuRUFSX1RZUEU7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldHVybiBudWxsOwotICAgICAgCi0gICAgfSAgICAgIAkJCQotCX0KLSAgICAKLSAgLyoKLSAgICogUmV0dXJucyBhIG5vbi1zdHViIHJ1bnRpbWUgaWYgb25lIGlzIGF2YWlsYWJsZSBmb3IgdGhlIHRoZSBnaXZlbiBzZXJ2ZXIgdHlwZS4KLSAgICogQHBhcmFtIHNlcnZlckZhY3RvcnlJZCAtIHNlcnZlciB0eXBlIGlkCi0gICAqIEByZXR1cm5zIElSdW50aW1lIFJldHVybnMgYSBub24tc3R1YiBydW50aW1lIGlmIG9uZSBpcyBhdmFpbGFibGUgZm9yIHRoZSB0aGUgZ2l2ZW4gc2VydmVyIHR5cGUuCi0gICAqIFJldHVybnMgbnVsbCBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIElSdW50aW1lIGdldE5vblN0dWJSdW50aW1lKFN0cmluZyBzZXJ2ZXJGYWN0b3J5SWQpCi0gIHsKLSAgICAvL0ZpbmQgYSBSdW50aW1lIHdoaWNoIGlzIG5vdCBhIHN0dWIKLSAgICBJU2VydmVyVHlwZSBzZXJ2ZXJUeXBlID0gU2VydmVyQ29yZS5maW5kU2VydmVyVHlwZShzZXJ2ZXJGYWN0b3J5SWQpOwotICAgIElSdW50aW1lIG5vblN0dWJSdW50aW1lID0gbnVsbDsKLSAgICBpZiAoc2VydmVyVHlwZSAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vYm9vbGVhbiBmb3VuZE5vblN0dWJSdW50aW1lID0gZmFsc2U7Ci0gICAgICBJUnVudGltZVtdIHJ1bnRpbWVzID0gU2VydmVyVXRpbC5nZXRSdW50aW1lcyhudWxsLCBudWxsKTsKLSAgICAgIFN0cmluZyBzZXJ2ZXJSdW50aW1lVHlwZUlkID0gc2VydmVyVHlwZS5nZXRSdW50aW1lVHlwZSgpLmdldElkKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJ1bnRpbWVzLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICBJUnVudGltZSBydW50aW1lID0gcnVudGltZXNbaV07Ci0gICAgICAgIElSdW50aW1lVHlwZSBydW50aW1lVHlwZSA9IHJ1bnRpbWUuZ2V0UnVudGltZVR5cGUoKTsKLSAgICAJaWYgKHJ1bnRpbWVUeXBlICE9IG51bGwpCi0gICAgCXsKLSAgICAJCVN0cmluZyB0aGlzUnVudGltZVR5cGVJZCA9IHJ1bnRpbWVUeXBlLmdldElkKCk7Ci0JICAgICAgICBpZiAodGhpc1J1bnRpbWVUeXBlSWQuZXF1YWxzKHNlcnZlclJ1bnRpbWVUeXBlSWQpICYmICFydW50aW1lLmlzU3R1YigpKQotCSAgICAgICAgewotCSAgICAgICAgICAvLyBGb3VuZCBhbiBhcHByb3ByaWF0ZSBJUnVudGltZSB0aGF0IGlzIG5vdCBhIHN0dWIKLQkgICAgICAgICAgLy9mb3VuZE5vblN0dWJSdW50aW1lID0gdHJ1ZTsKLQkgICAgICAgICAgbm9uU3R1YlJ1bnRpbWUgPSBydW50aW1lOwotCSAgICAgICAgICBicmVhazsKLQkgICAgICAgIH0KLSAgICAJfQotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbm9uU3R1YlJ1bnRpbWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL1N0YXR1c09iamVjdEhhbmRsZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL1N0YXR1c09iamVjdEhhbmRsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWY0OTliMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9TdGF0dXNPYmplY3RIYW5kbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbjsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTXVsdGlTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuV3JhcHBlZEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwucGx1Z2luLldlYlNlcnZpY2VQbHVnaW47Ci0KLQotcHVibGljIGNsYXNzIFN0YXR1c09iamVjdEhhbmRsZXIKLXsKLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVhfREVUQUlMUyA9IDE2OwotCi0gIHB1YmxpYyBzdGF0aWMgSVN0YXR1cyBnZW5lcmF0ZVRyZWVTdGF0dXMgKElTdGF0dXMgc3RhdHVzKSAKLSAgCXsKLSAgICAvLwotICAgIC8vIFRoZXJlIGNvdWxkIGJlIGxvdHMgb2YgVGhyb3dhYmxlcywgQ29yZUV4Y2VwdGlvbnMsCi0gICAgLy8gV3JhcHBlZEV4Y2VwdGlvbnMgYW5kIElTdGF0dXMgb2JqZWN0cyBiZW5lYXRoIHRoZQotICAgIC8vIGdpdmVuIHN0YXR1cy4gRmluZCB0aGVtLgotICAgIC8vCi0gICAgTGlua2VkTGlzdCBzdGF0dXNMaXN0ID0gbmV3IExpbmtlZExpc3QoKTsKLSAgICBhcHBlbmRTdGF0dXMoTUFYX0RFVEFJTFMsIHN0YXR1c0xpc3QsIHN0YXR1cywgc3RhdHVzLmdldFNldmVyaXR5KCkpOwotICAgIGlmIChzdGF0dXNMaXN0LnNpemUoKSA+IDApCi0gICAgewotICAgICAgSVN0YXR1cyBuZXdTdGF0dXMgPSAoSVN0YXR1cylzdGF0dXNMaXN0LnJlbW92ZUZpcnN0KCk7Ci0gICAgICBpZiAoc3RhdHVzTGlzdC5zaXplKCkgPiAwKQotICAgICAgewotICAgICAgICBJU3RhdHVzW10gc2Vjb25kYXJ5U3RhdHVzQXJyYXkgPSBuZXcgSVN0YXR1c1tzdGF0dXNMaXN0LnNpemUoKV07Ci0gICAgICAgIGludCBuID0gMDsKLSAgICAgICAgSXRlcmF0b3IgaSA9IHN0YXR1c0xpc3QuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKGkuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgc2Vjb25kYXJ5U3RhdHVzQXJyYXlbbisrXSA9IChJU3RhdHVzKWkubmV4dCgpOwotICAgICAgICB9Ci0gICAgICAgIG5ld1N0YXR1cyA9IG5ldyBNdWx0aVN0YXR1cyhzdGF0dXMuZ2V0UGx1Z2luKCksc3RhdHVzLmdldENvZGUoKSxzZWNvbmRhcnlTdGF0dXNBcnJheSxzdGF0dXMuZ2V0TWVzc2FnZSgpLHN0YXR1cy5nZXRFeGNlcHRpb24oKSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gbmV3U3RhdHVzOwotICAgIH0KLSAgICBlbHNlIAotICAgIAlyZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8vCi0gIC8vIEFwcGVuZHMgemVybyBvciBtb3JlIElTdGF0dXMgb2JqZWN0cyB0byB0aGUgbGlzdCBvZiBJU3RhdHVzIG9iamVjdHMKLSAgLy8gYmFzZWQgdXBvbiBhbiBJU3RhdHVzLgotICAvLwotICBwcml2YXRlIHN0YXRpYyBpbnQgYXBwZW5kU3RhdHVzICggaW50IG1heCwgTGlzdCBzdGF0dXNMaXN0LCBJU3RhdHVzIHN0YXR1cywgaW50IHNldmVyaXR5ICkKLSAgewotICAgIGlmIChtYXggPiAwICYmIHN0YXR1cyAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vCi0gICAgICAvLyBBcHBlbmQgYW4gSVN0YXR1cyBvYmplY3QgZm9yIHRoZSBnaXZlbiBzdGF0dXMnIG1lc3NhZ2UuCi0gICAgICAvLwotICAgICAgaWYgKHN0YXR1cy5nZXRNZXNzYWdlKCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgbWF4ID0gYXBwZW5kKHN0YXR1c0xpc3QsbWF4LHNldmVyaXR5LHN0YXR1cy5nZXRQbHVnaW4oKSxzdGF0dXMuZ2V0Q29kZSgpLHN0YXR1cy5nZXRNZXNzYWdlKCksc3RhdHVzLmdldEV4Y2VwdGlvbigpKTsKLSAgICAgIH0KLSAgICAgIC8vCi0gICAgICAvLyBBcHBlbmQgdGhlIElTdGF0dXMnIFRocm93YWJsZSwgaWYgYW55LgotICAgICAgLy8KLSAgICAgIG1heCA9IGFwcGVuZFRocm93YWJsZShtYXgsc3RhdHVzTGlzdCxzdGF0dXMuZ2V0RXhjZXB0aW9uKCksc2V2ZXJpdHkpOwotICAgICAgLy8KLSAgICAgIC8vIElmIHRoZSBJU3RhdHVzIGlzIGEgbXVsdGkgc3RhdHVzLCBhcHBlbmQgdGhlIGNoaWxkcmVuLgotICAgICAgLy8KLSAgICAgIElTdGF0dXNbXSBjaGlsZHJlbiA9IHN0YXR1cy5nZXRDaGlsZHJlbigpOwotICAgICAgZm9yIChpbnQgaT0wOyBpPGNoaWxkcmVuLmxlbmd0aCAmJiBtYXg+MDsgaSsrKQotICAgICAgewotICAgICAgICBtYXggPSBhcHBlbmRTdGF0dXMobWF4LHN0YXR1c0xpc3QsY2hpbGRyZW5baV0sc2V2ZXJpdHkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbWF4OwotICB9Ci0KLSAgLy8KLSAgLy8gQXBwZW5kcyB6ZXJvIG9yIG1vcmUgSVN0YXR1cyBvYmplY3RzIHRvIHRoZSBsaXN0IG9mIElTdGF0dXMgb2JqZWN0cwotICAvLyBiYXNlZCB1cG9uIGEgVGhyb3dhYmxlLiBXcmFwcGVkRXhjZXB0aW9ucyBhbmQgQ29yZUV4Y2VwdGlvbnMgYXJlCi0gIC8vIGdpdmVuIHNwZWNpYWwgdHJlYXRtZW50LgotICAvLwotICBwcml2YXRlIHN0YXRpYyBpbnQgYXBwZW5kVGhyb3dhYmxlICggaW50IG1heCwgTGlzdCBzdGF0dXNMaXN0LCBUaHJvd2FibGUgdGhyb3dhYmxlLCBpbnQgc2V2ZXJpdHkgKQotICB7Ci0gICAgaWYgKG1heCA+IDAgJiYgdGhyb3dhYmxlICE9IG51bGwpCi0gICAgewotICAgICAgLy8KLSAgICAgIC8vIEFwcGVuZCBhbiBJU3RhdHVzIG9iamVjdCBmb3IgdGhlIGV4Y2VwdGlvbidzIG1lc3NhZ2UuCi0gICAgICAvLwotICAgICAgaWYgKHRocm93YWJsZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgbWF4ID0gYXBwZW5kKHN0YXR1c0xpc3QsbWF4LHNldmVyaXR5LFdlYlNlcnZpY2VQbHVnaW4uSUQsMCx0aHJvd2FibGUuZ2V0TG9jYWxpemVkTWVzc2FnZSgpLHRocm93YWJsZSk7Ci0gICAgICB9Ci0gICAgICAvLwotICAgICAgLy8gSWYgdGhlIGV4Y2VwdGlvbiBpcyBhIFdyYXBwZWRFeGNlcHRpb24sIGFwcGVuZCB0aGUgd3JhcHBlZCBFeGNlcHRpb24uCi0gICAgICAvLwotICAgICAgaWYgKHRocm93YWJsZSBpbnN0YW5jZW9mIFdyYXBwZWRFeGNlcHRpb24pCi0gICAgICB7Ci0gICAgICAgIFdyYXBwZWRFeGNlcHRpb24gd2V4YyA9IChXcmFwcGVkRXhjZXB0aW9uKXRocm93YWJsZTsKLSAgICAgICAgbWF4ID0gYXBwZW5kVGhyb3dhYmxlKG1heCxzdGF0dXNMaXN0LHdleGMuZXhjZXB0aW9uKCksc2V2ZXJpdHkpOwotICAgICAgfQotICAgICAgLy8KLSAgICAgIC8vIElmIHRoZSBleGNlcHRpb24gaXMgYSBDb3JlRXhjZXB0aW9uLCBhcHBlbmQgdGhlIGVuY2xvc2VkIElTdGF0dXMuCi0gICAgICAvLwotICAgICAgaWYgKHRocm93YWJsZSBpbnN0YW5jZW9mIENvcmVFeGNlcHRpb24pCi0gICAgICB7Ci0gICAgICAgIENvcmVFeGNlcHRpb24gY2V4YyA9IChDb3JlRXhjZXB0aW9uKXRocm93YWJsZTsKLSAgICAgICAgbWF4ID0gYXBwZW5kU3RhdHVzKG1heCxzdGF0dXNMaXN0LGNleGMuZ2V0U3RhdHVzKCksc2V2ZXJpdHkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbWF4OwotICB9Ci0KLSAgLy8KLSAgLy8gQ3JlYXRlcyBhbmQgYXBwZW5kcyBhbiBJU3RhdHVzIHRvIHRoZSBsaXN0IG9mIElTdGF0dXMgb2JqZWN0cy4KLSAgLy8KLSAgcHJpdmF0ZSBzdGF0aWMgaW50IGFwcGVuZCAoIExpc3Qgc3RhdHVzTGlzdCwgaW50IG1heCwgaW50IHNldmVyaXR5LCBTdHJpbmcgaWQsIGludCBjb2RlLCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIHRocm93YWJsZSApCi0gIHsKLSAgICBpZiAobWF4ID4gMCkKLSAgICB7Ci0gICAgICBJU3RhdHVzIHN0YXR1cyA9IG5ldyBTdGF0dXMoc2V2ZXJpdHksaWQsY29kZSxtZXNzYWdlLHRocm93YWJsZSk7Ci0gICAgICBzdGF0dXNMaXN0LmFkZChzdGF0dXMpOwotICAgICAgbWF4LS07Ci0gICAgfQotICAgIHJldHVybiBtYXg7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL1N0cmluZzJQYXRoVHJhbnNmb3JtZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL1N0cmluZzJQYXRoVHJhbnNmb3JtZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGE3ZTFkYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9TdHJpbmcyUGF0aFRyYW5zZm9ybWVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLlRyYW5zZm9ybWVyOwotCi0vKioKLSAqIAotICogVHJhbnNmb3JtcyBhIGlucHV0IFN0cmluZyB0byBhIFBhdGgKLSAqIAotICogQGF1dGhvciBqb2FuCi0gKgotICovCi0KLXB1YmxpYyBjbGFzcyBTdHJpbmcyUGF0aFRyYW5zZm9ybWVyIGltcGxlbWVudHMgVHJhbnNmb3JtZXIgewotCQotCXB1YmxpYyBPYmplY3QgdHJhbnNmb3JtKE9iamVjdCB2YWx1ZSkgewkJCQkgCi0JCVBhdGggcGF0aCA9IG5ldyBQYXRoKHZhbHVlLnRvU3RyaW5nKCkpOwotCQlyZXR1cm4gcGF0aDsJCSAKLQl9Ci0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vU3RyaW5nMlNlbGVjdGlvblRyYW5zZm9ybWVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9TdHJpbmcyU2VsZWN0aW9uVHJhbnNmb3JtZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDYwNjdkZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9TdHJpbmcyU2VsZWN0aW9uVHJhbnNmb3JtZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMjIgICAxMjgwOTQgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNzAzMDUgICAxNzUxOTQgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIEFudCB0YXNrIEluaXRpYWxTZWxlY3Rpb24gb25seSBhbGxvd3Mgd3NkbCB3aXRoaW4gdGhlIHdvcmtzcGFjZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS5qYXZhLkphdmFDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuZWpiLkVKQkphcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5lamIuRUpCUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuZWpiLkVudGVycHJpc2VCZWFuOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmVqYi5jb21wb25lbnRjb3JlLnV0aWwuRUpCQXJ0aWZhY3RFZGl0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5XU1BsdWdpbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb21tb24uRmlsZVJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5UcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUucmVzb3VyY2VzLklWaXJ0dWFsQ29tcG9uZW50OwotCi0vKioKLSAqIFRyYW5zZm9ybXMgYSBzdHJpbmcgdmFsdWUgcmVwcmVzZW50aW5nIGEgd29ya3NwYWNlIHJlc291cmNlIHBhdGggaW50byBhIFN0cnVjdHVyZWRTZWxlY3Rpb24gb2JqZWN0Ci0gKiAKLSAqIEBhdXRob3Igam9hbgotICoKLSAqLwotCi1wdWJsaWMgY2xhc3MgU3RyaW5nMlNlbGVjdGlvblRyYW5zZm9ybWVyIGltcGxlbWVudHMgVHJhbnNmb3JtZXIgewotCi0JcHVibGljIE9iamVjdCB0cmFuc2Zvcm0oT2JqZWN0IHZhbHVlKSB7Ci0JCQotCQlTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG51bGw7Ci0JCUlSZXNvdXJjZSByZXNvdXJjZSA9IEZpbGVSZXNvdXJjZVV0aWxzLmdldFdvcmtzcGFjZVJvb3QoKS5maW5kTWVtYmVyKG5ldyBQYXRoKHZhbHVlLnRvU3RyaW5nKCkpKTsKLQkJaWYgKHJlc291cmNlICE9IG51bGwpCi0JCXsKLQkJCUlQcm9qZWN0IHJlc1Byb2plY3QgPSByZXNvdXJjZS5nZXRQcm9qZWN0KCk7CQkJCi0JCQkvLyBjaGVjayBpZiByZXNvdXJjZSBpcyBwYXJ0IG9mIGFuIEVKQgotCQkJaWYgKEoyRUVVdGlscy5pc0VKQkNvbXBvbmVudChyZXNQcm9qZWN0KSkKLQkJCXsKLQkJCQkvLyBpZiByZXNvdXJjZSBpcyBwYXJ0IG9mIEVKQiBuZWVkIHRvIGdldCB0aGUgRW50ZXJwcmlzZUJlYW4gYXMgdGhlIHNlbGVjdGlvbgotCQkJCUlWaXJ0dWFsQ29tcG9uZW50W10gZWpiQ29tcG9uZW50cyA9IEoyRUVVdGlscy5nZXRFSkJDb21wb25lbnRzKHJlc1Byb2plY3QpOwotCQkJCUVKQkFydGlmYWN0RWRpdCAgZWpiRWRpdCA9IG51bGw7CQkJCi0JCQkJdHJ5ewkJCQkKLQkJCQkJZWpiRWRpdCA9IEVKQkFydGlmYWN0RWRpdC5nZXRFSkJBcnRpZmFjdEVkaXRGb3JSZWFkKGVqYkNvbXBvbmVudHNbMF0pOwkJCQkKLQkJICAgICAgICAgICAgRUpCUmVzb3VyY2UgZWpiUmVzID0gZWpiRWRpdC5nZXRFSkJKYXJYbWlSZXNvdXJjZSgpOwotCQkgICAgICAgICAgICBFSkJKYXIgZWpiSmFyID0gZWpiUmVzLmdldEVKQkphcigpOwkgICAgICAgICAgICAKLQkJICAgICAgICAgICAgSVBhdGggcGF0aCA9IHJlc291cmNlLmdldEZ1bGxQYXRoKCk7Ci0JCSAgICAgICAgICAgIFN0cmluZyByZXNvdXJjZVBhdGggPSBSZXNvdXJjZVV0aWxzLmdldEphdmFSZXNvdXJjZVBhY2thZ2VOYW1lKHBhdGgpOwotCQkgICAgICAgICAgICBTdHJpbmcgamF2YUNsYXNzTmFtZSA9IHJlc291cmNlLmdldE5hbWUoKTsKLQkJICAgICAgICAgICAgLy8gc3RyaXAgb2ZmIGZpbGUgZXh0ZW5zaW9uIGlmIG5lY2Vzc2FyeQotCQkgICAgICAgICAgICBpZiAoamF2YUNsYXNzTmFtZS5sYXN0SW5kZXhPZignLicpPi0xKQotCQkgICAgICAgICAgICB7CQotCQkgICAgICAgICAgICAgIGphdmFDbGFzc05hbWUgPSBqYXZhQ2xhc3NOYW1lLnN1YnN0cmluZygwLCBqYXZhQ2xhc3NOYW1lLmxhc3RJbmRleE9mKCcuJykpOwkgICAgICAgICAgICAgIAotCQkgICAgICAgICAgICB9IAotCQkgICAgICAgICAgICBKYXZhQ2xhc3MgamF2YUNsYXNzID0gSmF2YU1PRlV0aWxzLmdldEphdmFDbGFzcyhyZXNvdXJjZVBhdGgsIGphdmFDbGFzc05hbWUsIHJlc1Byb2plY3QpOwotCQkgICAgICAgICAgICBFbnRlcnByaXNlQmVhbiBlamIgPSBlamJKYXIuZ2V0RW50ZXJwcmlzZUJlYW5XaXRoUmVmZXJlbmNlKGphdmFDbGFzcyk7Ci0JCSAgICAgICAgICAgIGlmIChlamIgIT0gbnVsbCkKLQkJICAgICAgICAgICAgewotCQkgICAgICAgICAgICAJc2VsZWN0aW9uID0gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWpiLmdldE5hbWUoKSk7CQotCQkgICAgICAgICAgICB9Ci0JCQkJfQotCQkJCWNhdGNoIChFeGNlcHRpb24gZXhjKQotCQkJCXsKLQkJCQkJCi0JCQkJfQotCQkJCWZpbmFsbHkgewotCQkgICAgICAgICAgICAgIGlmIChlamJFZGl0IT1udWxsKQotCQkgICAgICAgICAgICAgICAgZWpiRWRpdC5kaXNwb3NlKCk7Ci0JCSAgICAgICAgfQotCQkJfQotCQkJLy8gaWYgc2VsZWN0aW9uIG5vdCBhbHJlYWR5IHNldCAtIGNyZWF0ZSBpdCBmcm9tIHRoZSByZXNvdXJjZSBvYmplY3QKLQkJCWlmIChzZWxlY3Rpb24gPT0gbnVsbCkKLQkJCXsKLQkJCSAgc2VsZWN0aW9uID0gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24ocmVzb3VyY2UpOwotCQkJfQotCQl9Ci0JCWVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nICYmIHZhbHVlLnRvU3RyaW5nKCkuaW5kZXhPZigiOiIpICE9IC0xKSB7Ci0JCQkvLyByZW1vdGUgZmlsZQotCQkJc2VsZWN0aW9uID0gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24odmFsdWUpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJLy8gc3RyaW5nIGRvZXNuJ3QgcmV0dXJuIHJlc291cmNlIC0gZXJyb3IgY29uZGl0aW9uCi0JCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKFdTUGx1Z2luTWVzc2FnZXMuRVJST1JfU0VMRUNUSU9OX1RSQU5TRk9STSk7Ci0JCX0KLQkJcmV0dXJuIHNlbGVjdGlvbjsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL1N0cmluZzJUZXN0RmFjaWxpdHlMaXN0VHJhbnNmb3JtZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL1N0cmluZzJUZXN0RmFjaWxpdHlMaXN0VHJhbnNmb3JtZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjg1OTYwNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9TdHJpbmcyVGVzdEZhY2lsaXR5TGlzdFRyYW5zZm9ybWVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwucGx1Z2luLldlYlNlcnZpY2VQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5UcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5zZWxlY3Rpb24uU2VsZWN0aW9uTGlzdDsKLQotcHVibGljIGNsYXNzIFN0cmluZzJUZXN0RmFjaWxpdHlMaXN0VHJhbnNmb3JtZXIgaW1wbGVtZW50cyBUcmFuc2Zvcm1lciB7Ci0KLQlwdWJsaWMgT2JqZWN0IHRyYW5zZm9ybShPYmplY3QgdmFsdWUpIHsKLQkJU3RyaW5nIHRlc3RGYWNpbGl0eSA9IChTdHJpbmcpdmFsdWU7Ci0JCS8vdmFsdWUgcmVwcmVzZW50cyBuYW1lIG9mIGEgdGVzdCBmYWNpbGl0eQotCQkvL3BpY2sgdXAgbGlzdCBvZiB0ZXN0IGZhY2lsaXRpZXMKLQkJU3RyaW5nW10gdGVzdFR5cGVzID0gV2ViU2VydmljZVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFNjZW5hcmlvQ29udGV4dCgpLmdldFdlYlNlcnZpY2VUZXN0VHlwZXMoKTsgICAgICAgIAkKLQkJCi0JCWludCBpbmRleCA9IDA7Ci0JCS8vbWF0Y2ggdmFsdWUgdG8gbmFtZSBvZiB0ZXN0IGZhY2lsaXR5IGFuZCBzZXQgaW5kZXggYWNjb3JkaW5nbHkKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCB0ZXN0VHlwZXMubGVuZ3RoOyBpKyspIHsKLQkJCWlmICh0ZXN0VHlwZXNbaV0uZXF1YWxzKHRlc3RGYWNpbGl0eSkpCi0JCQl7CQkKLQkJCQlicmVhazsKLQkJCX0JCQkKLQkJCWluZGV4Kys7Ci0JCX0KLQkJCi0JCVNlbGVjdGlvbkxpc3Qgc2VsZWN0aW9uTGlzdCA9IG5ldyBTZWxlY3Rpb25MaXN0KHRlc3RUeXBlcywgaW5kZXgpOwkJCi0JCXJldHVybiBzZWxlY3Rpb25MaXN0OwotCX0KLX0KLQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9TdHJpbmcyVHlwZVJ1bnRpbWVTZXJ2ZXJNb2RpZmllci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vU3RyaW5nMlR5cGVSdW50aW1lU2VydmVyTW9kaWZpZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGU4N2ZlMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9TdHJpbmcyVHlwZVJ1bnRpbWVTZXJ2ZXJNb2RpZmllci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMzAzICAgMTI4ODMyIGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uOwotCi1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5kYXRhLlR5cGVSdW50aW1lU2VydmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuQmVhbk1vZGlmaWVyOwotCi1wdWJsaWMgY2xhc3MgU3RyaW5nMlR5cGVSdW50aW1lU2VydmVyTW9kaWZpZXIgaW1wbGVtZW50cyBCZWFuTW9kaWZpZXIgewotCi0JcHJpdmF0ZSBTdHJpbmcgU0VSVklDRV9SVF9JRF9LRVkgPSAiU2VydmljZS5SdW50aW1lSWQiOyAgLy8kTk9OLU5MUy1OJAotCXByaXZhdGUgU3RyaW5nIFJVTlRJTUVfSUQgPSAiUnVudGltZUlkIjsgIC8vJE5PTi1OTFMtTiQKLQlwcml2YXRlIFN0cmluZyBTRVJWSUNFX1NSVl9JRF9LRVkgPSAiU2VydmljZS5TZXJ2ZXJJZCI7ICAvLyROT04tTkxTLU4kCi0JcHJpdmF0ZSBTdHJpbmcgU0VSVkVSX0lEID0gIlNlcnZlcklkIjsgIC8vJE5PTi1OTFMtTiQKLQlwcml2YXRlIFN0cmluZyBUWVBFX0lEID0gIlR5cGVJZCI7ICAvLyROT04tTkxTLU4kCi0JcHJpdmF0ZSBTdHJpbmcgVERfRUpCID0gIlRPUCBET1dOIEVKQiI7ICAvLyROT04tTkxTLU4kCi0JcHJpdmF0ZSBTdHJpbmcgQlVfRUpCID0gIkJPVFRPTSBVUCBFSkIiOyAgLy8kTk9OLU5MUy1OJAotCXByaXZhdGUgU3RyaW5nIFREX0VKQl9UWVBFX0lEID0gIjEvb3JnLmVjbGlwc2UuanN0LndzLndzSW1wbC5lamIiOwotCXByaXZhdGUgU3RyaW5nIEJVX0VKQl9UWVBFX0lEID0gIjAvb3JnLmVjbGlwc2UuanN0LndzLndzSW1wbC5lamIiOwotCXByaXZhdGUgU3RyaW5nIFNFUlZJQ0VfUFJFRklYID0gIlNlcnZpY2UuIjsgIC8vJE5PTi1OTFMtTiQKLQlwcml2YXRlIFN0cmluZyBDTElFTlRfUFJFRklYID0gIkNsaWVudC4iOyAgLy8kTk9OLU5MUy1OJAotCQotCS8qKgotCSAqIE1vZGlmaWVzIHRoZSBzdXBwbGllZCBUeXBlUnVudGltZVNlcnZlciBiZWFuIHdpdGggcHJvcGVydGllcyBpbiBob2xkZXIuCi0JICogSWYgdGhlIGJlYW4gaXMgbnVsbCwgY29uc3RydWN0IGEgbmV3IG9uZSBhbmQgc2V0IGl0cyBwcm9wZXJ0aWVzLgotCSAqIEBwYXJhbSBiZWFuIFR5cGVSdW50aW1lU2VydmVyIGJlYW4gdG8gYmUgbW9kaWZpZWQKLQkgKiBAcGFyYW0gaG9sZGVyIE1hcCBjb250YWluaW5nIHZhbHVlcyBmb3IgVHlwZVJ1bnRpbWVTZXJ2ZXIgcHJvcGVydGllcyAKLQkgKiBAcmV0dXJuIFR5cGVSdW50aW1lU2VydmVyIHdpdGggcHJvcGVydGllcyBzZXQKLQkgKi8KLQlwdWJsaWMgdm9pZCBtb2RpZnkoT2JqZWN0IGJlYW4sIE9iamVjdCBob2xkZXIpIHsKLQkJCi0JCVR5cGVSdW50aW1lU2VydmVyIHR5cGVzID0gbnVsbDsKLQkJaWYgKGJlYW4gPT0gbnVsbCB8fCAhKGJlYW4gaW5zdGFuY2VvZiBUeXBlUnVudGltZVNlcnZlcikpCi0JCXsKLQkJCXR5cGVzID0gbmV3IFR5cGVSdW50aW1lU2VydmVyKCk7CQkJCi0JCX0KLQkJZWxzZQotCQl7Ci0JCQl0eXBlcyA9IChUeXBlUnVudGltZVNlcnZlciliZWFuOwotCQl9Ci0JCQotCQlpZiAoaG9sZGVyIGluc3RhbmNlb2YgTWFwKQotCQl7CQotCQkJTWFwIHR5cGVzTWFwID0gKE1hcClob2xkZXI7Ci0JCQlTdHJpbmcgcHJlZml4ID0gIiI7Ci0JCQkKLQkJCQotCQkJaWYgKHR5cGVzTWFwLmNvbnRhaW5zS2V5KFNFUlZJQ0VfUlRfSURfS0VZKXx8dHlwZXNNYXAuY29udGFpbnNLZXkoU0VSVklDRV9TUlZfSURfS0VZKSkKLQkJCXsKLQkJCQlwcmVmaXggPSBTRVJWSUNFX1BSRUZJWDsKLQkJCX0JCQkgIAkKLQkJCWVsc2UKLQkJCXsKLQkJCQlwcmVmaXggPSBDTElFTlRfUFJFRklYOwotCQkJfQotCQkJCi0JCQlTdHJpbmcgcnVudGltZUlEID0gKFN0cmluZyl0eXBlc01hcC5nZXQocHJlZml4K1JVTlRJTUVfSUQpOwotCQkJaWYgKHJ1bnRpbWVJRCAhPSBudWxsKQotCQkJCXR5cGVzLnNldFJ1bnRpbWVJZChydW50aW1lSUQpOwkJCi0JCQkKLQkJCVN0cmluZyBzZXJ2ZXJJRCA9IChTdHJpbmcpdHlwZXNNYXAuZ2V0KHByZWZpeCtTRVJWRVJfSUQpOwotCQkJaWYgKHNlcnZlcklEICAhPSBudWxsKQkJCQkKLQkJCQl0eXBlcy5zZXRTZXJ2ZXJJZChzZXJ2ZXJJRCk7CQotCQkJCi0JCQkvL2NoZWNrIGlmIHdlYiBzZXJ2aWNlIHR5cGUgaXMgRUpCIC0gaWYgbm90LCBkZWZhdWx0IGZvciBKYXZhIGJlYW4gdHlwZXMKLQkJCVN0cmluZyB0eXBlSUQgPSAoU3RyaW5nKXR5cGVzTWFwLmdldChwcmVmaXgrVFlQRV9JRCk7Ci0JCQlpZiAodHlwZUlEICE9IG51bGwpCi0JCQl7Ci0JCQkJaWYgKHR5cGVJRC50b1VwcGVyQ2FzZSgpLmVxdWFscyhURF9FSkIpKSAgLy9vbmx5IHNldHRpbmcgdHlwZUlEIHNwZWNpZmljYWxseSBmb3IgRUpCIGNhc2UKLQkJCQl7Ci0JCQkJCXR5cGVzLnNldFR5cGVJZChURF9FSkJfVFlQRV9JRCk7Ci0JCQkJfQkKLQkJCQllbHNlIGlmICh0eXBlSUQudG9VcHBlckNhc2UoKS5lcXVhbHMoQlVfRUpCKSkKLQkJCQl7Ci0JCQkJCXR5cGVzLnNldFR5cGVJZChCVV9FSkJfVFlQRV9JRCk7Ci0JCQkJfQkKLQkJCX0JCQkKLQkJfQotICB9CQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9TdHJpbmdUb0lQcm9qZWN0VHJhbnNmb3JtZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL1N0cmluZ1RvSVByb2plY3RUcmFuc2Zvcm1lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMWI2NmQ4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29tbW9uL1N0cmluZ1RvSVByb2plY3RUcmFuc2Zvcm1lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5UcmFuc2Zvcm1lcjsKLQotCi0vKioKLSAqIFRyYW5zZnJvbXMgYSBqYXZhLmxhbmcuU3RyaW5nIHRvIGFuIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvamVjdAotICovCi1wdWJsaWMgY2xhc3MgU3RyaW5nVG9JUHJvamVjdFRyYW5zZm9ybWVyIGltcGxlbWVudHMgVHJhbnNmb3JtZXIKLXsKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuVHJhbnNmb3JtZXIjdHJhbnNmb3JtKGphdmEubGFuZy5PYmplY3QpCi0gICAqIEBwYXJhbSBPYmplY3QgVGhpcyBtdXN0IGJlIGEgamF2YS5sYW5nLlN0cmluZwotICAgKiBAcmV0dXJuIE9iamVjdCBSZXR1cm5zIGFuIElQcm9qZWN0Ci0gICAqLwotCi0gIHB1YmxpYyBPYmplY3QgdHJhbnNmb3JtKE9iamVjdCB2YWx1ZSkKLSAgewotCVN0cmluZyBwcm9qZWN0ICAgICA9IChTdHJpbmcpdmFsdWU7Ci0JaW50ICAgIHNsYXNoSW5kZXggID0gcHJvamVjdC5pbmRleE9mKCAnLycgKTsKLQlTdHJpbmcgcHJvamVjdE5hbWUgPSBwcm9qZWN0OwotCQotCWlmKCBzbGFzaEluZGV4ICE9IC0xICkKLQl7Ci0JICBwcm9qZWN0TmFtZSA9IHByb2plY3Quc3Vic3RyaW5nKCAwLCBzbGFzaEluZGV4ICk7Ci0JfQotCQotICAgIHJldHVybiBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QocHJvamVjdE5hbWUpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9TdHJpbmdVdGlscy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb21tb24vU3RyaW5nVXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmI1ZWFhMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbW1vbi9TdHJpbmdVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjg4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb247Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvbnZlbnRpb25zOwotCi0vKioKLSAgKiBUaGlzIGNsYXNzIGNvbnRhaW5zIHNvbWUgdXNlZnVsIHN0cmluZyB1dGlsaXRpZXMgdGhhdCBhcmUgbm90IHByb3ZpZGVkIGJ5Ci0gICogZWl0aGVyIFN0cmluZyBvciBTdHJpbmdCdWZmZXIuCi0gICoKLSAgKiBAYXV0aG9yIFBldGVyIE1vb2drCi0gICogQGRhdGUgICBKdWx5IDEzLCAyMDAwCi0qKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBTdHJpbmdVdGlscwotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIC8qKgotICAqIFRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBsaW5lIHNlcGFyYXRvci4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkVXTElORSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKTsKLQotICBwcml2YXRlIFN0cmluZ1V0aWxzKCl7fTsKLQotICAvKioKLSAgICAqIFRoaXMgbWV0aG9kIHNwbGl0cyBhIHNpbmdsZSBsaW5lIG9mIHRleHQgaW50byBtdWx0aXBsZSBsaW5lcwotICAgICogYmFzZWQgb24gYSBtYXhpbXVtIGxpbmUgbGVuZ3RoLiAgVGhlIG1ldGhvZCB3aWxsIHRyeSB0byBmaXQgYXMKLSAgICAqIG1hbnkgd29yZHMgYXMgcG9zc2libGUgb250byBhIGxpbmUgd2l0aG91dCBleGNlZWRpbmcgdGhlIG1heGltdW0KLSAgICAqIGxpbmUgbGVuZ3RoLiAgTm90ZTogdGhlIG9ubHkgY2FzZSB3aGVyZSBhIGxpbmUgbWlnaHQgZXhjZWVkIHRoZQotICAgICogbWF4aW11bSBpcyBpZiBhIHNpbmdsZSB3b3JkIGlzIGxvbmdlciB0aGFuIHRoZSBtYXhpbXVtLgotICAqKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmdbXSBzcGxpdHRlciggU3RyaW5nIHRleHQsIGludCBtYXhfbGVuZ3RoICkKLSAgewotICAgIFZlY3RvciAgICAgICAgICByZXR1cm5fdGV4dCA9IG5ldyBWZWN0b3IoMjApOwotICAgIFN0cmluZ1tdICAgICAgICByZXR1cm5fc3RyOwotICAgIGludCAgICAgICAgICAgICBpbmRleCA9IDA7Ci0KLSAgICB3aGlsZSggaW5kZXggPCB0ZXh0Lmxlbmd0aCgpICkKLSAgICB7Ci0gICAgICBTdHJpbmcgc3RyID0gdGV4dC5zdWJzdHJpbmcoIGluZGV4LCBNYXRoLm1pbiggbWF4X2xlbmd0aCArIGluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQubGVuZ3RoKCkgKSApOwotICAgICAgaW50IHNwYWNlX2luZGV4ID0gc3RyLmxhc3RJbmRleE9mKCAiICIgKTsKLQotICAgICAgaWYoIGluZGV4ICsgc3RyLmxlbmd0aCgpIDwgdGV4dC5sZW5ndGgoKSAmJgotICAgICAgICAgIHRleHQuY2hhckF0KCBpbmRleCArIHN0ci5sZW5ndGgoKSAtIDEgKSAhPSAnICcgJiYKLSAgICAgICAgICB0ZXh0LmNoYXJBdCggaW5kZXggKyBzdHIubGVuZ3RoKCkgKSAhPSAnICcgJiYKLSAgICAgICAgICBzcGFjZV9pbmRleCAhPSAtMSApCi0gICAgICB7Ci0gICAgICAgIHJldHVybl90ZXh0LmFkZEVsZW1lbnQoIHN0ci5zdWJzdHJpbmcoIDAsIHNwYWNlX2luZGV4ICkgKTsKLSAgICAgICAgaW5kZXggKz0gc3BhY2VfaW5kZXggKyAxOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICByZXR1cm5fdGV4dC5hZGRFbGVtZW50KCBzdHIudHJpbSgpICk7Ci0gICAgICAgIGluZGV4ICs9IHN0ci5sZW5ndGgoKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm5fc3RyID0gbmV3IFN0cmluZ1tyZXR1cm5fdGV4dC5zaXplKCldOwotCi0gICAgZm9yKCBpbmRleCA9IDA7IGluZGV4IDwgcmV0dXJuX3RleHQuc2l6ZSgpOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICByZXR1cm5fc3RyW2luZGV4XSA9IChTdHJpbmcpKHJldHVybl90ZXh0LmVsZW1lbnRBdChpbmRleCkpOwotICAgIH0KLQotICAgIHJldHVybiByZXR1cm5fc3RyOwotICB9Ci0KLSAgLyoqCi0gICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgc3RyaW5nIHdpdGggYSByZXBlYXRlZCBudW1iZXIgb2YgY2hhcmFjdGVycy4KLSAgKiovCi0gIHN0YXRpYyBwdWJsaWMgU3RyaW5nIHJlcGVhdCggY2hhciB0aGVfY2hhciwgaW50IGNvdW50ICkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKCBjb3VudCApOwotCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IGNvdW50OyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBidWYuYXBwZW5kKCB0aGVfY2hhciApOwotICAgIH0KLQotICAgIHJldHVybiBidWYudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qKgotICAgICogVGhpcyBtZXRob2QgZmxhdHRlbnMgYW4gYXJyYXkgb2YgYXJndW1lbnRzIHRvIGEgc3RyaW5nLgotICAgICogVGhlIG1ldGhvZCByZXNwZWN0cyBlbWJlZGRlZCB3aGl0ZXNwYWNlIGFuZCBxdW90ZXMuCi0gICAgKiA8dWw+Ci0gICAgKiA8bGk+QW55IGFyZ3VtZW50IHdpdGggZW1iZWRkZWQgd2hpdGVzcGFjZSB3aWxsIGJlIGZsYXR0ZW5lZCBvdXQKLSAgICAqIHdpdGggZW5jbG9zaW5nIHF1b3Rlcy4gRm9yIGV4YW1wbGUsIHRoZSBzaW5nbGUgYXJndW1lbnQKLSAgICAqIDx1PkhlbGxvIFdvcmxkPC91PgotICAgICogd2lsbCBiZSByZXR1cm5lZCBhcwotICAgICogPHU+IkhlbGxvIFdvcmxkIjwvdT4uCi0gICAgKiA8bGk+QW55IGFyZ3VtZW50IHdpdGggcXVvdGVzIHdpbGwgYmUgZmxhdHRlbmVkIG91dCB3aXRoIHRoZQotICAgICogcXVvdGVzIGVzY2FwZWQuIEZvciBleGFtcGxlLCB0aGUgc2luZ2xlIGFyZ3VtZW50Ci0gICAgKiA8dT4iSGFwcHkgZGF5cyI8L3U+Ci0gICAgKiB3aWxsIGJlIHJldHVybmVkIGFzCi0gICAgKiA8dT5cIkhhcHB5IGRheXNcIjwvdT4uCi0gICAgKiA8L3VsPgotICAgICogQHBhcmFtIGFyZ3VtZW50cyBUaGUgYXJyYXkgb2Ygc3RyaW5ncyB0byBmbGF0dGVuLgotICAgICogQHJldHVybiB0aGUgZmxhdHRlbmVkIHN0cmluZy4KLSAgKi8KLSAgc3RhdGljIHB1YmxpYyBTdHJpbmcgZmxhdHRlbkFyZ3VtZW50cyAoIFN0cmluZ1tdIGFyZ3VtZW50cyApCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCi0gICAgZm9yIChpbnQgaT0wOyBpPGFyZ3VtZW50cy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICAvLwotICAgICAgLy8gQXBwZW5kIGEgc2VwYXJhdG9yIChleGNlcHQgdGhlIGZpcnN0IHRpbWUpLgotICAgICAgLy8KLSAgICAgIGlmIChpID4gMCkgYnVmLmFwcGVuZCgnICcpOwotCi0gICAgICAvLwotICAgICAgLy8gTG9vayBmb3Igd2hpdGVzcGFjZS4KLSAgICAgIC8vCi0gICAgICBib29sZWFuIHdoaXRlc3BhY2UgPSBmYWxzZTsKLSAgICAgIGNoYXJbXSBjaGFycyA9IGFyZ3VtZW50c1tpXS50b0NoYXJBcnJheSgpOwotICAgICAgZm9yIChpbnQgaj0wOyAhd2hpdGVzcGFjZSAmJiBqPGNoYXJzLmxlbmd0aDsgaisrKQotICAgICAgewotICAgICAgICBpZiAoQ2hhcmFjdGVyLmlzV2hpdGVzcGFjZShjaGFyc1tqXSkpCi0gICAgICAgIHsKLSAgICAgICAgICB3aGl0ZXNwYWNlID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICAvLwotICAgICAgLy8gQXBwZW5kIHRoZSBhcmd1bWVudCwgcXVvdGVkIGFzIG5lY2Vzc2FyeS4KLSAgICAgIC8vCi0gICAgICBpZiAod2hpdGVzcGFjZSkgYnVmLmFwcGVuZCgnIicpOwotICAgICAgZm9yIChpbnQgaj0wOyBqPGNoYXJzLmxlbmd0aDsgaisrKQotICAgICAgewotICAgICAgICBpZiAoY2hhcnNbal0gPT0gJyInKSBidWYuYXBwZW5kKCdcXCcpOwotICAgICAgICBidWYuYXBwZW5kKGNoYXJzW2pdKTsKLSAgICAgIH0KLSAgICAgIGlmICh3aGl0ZXNwYWNlKSBidWYuYXBwZW5kKCciJyk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGJ1Zi50b1N0cmluZygpOwotICB9Ci0KLSAgLyoqCi0gICAgKiBUaGlzIG1ldGhvZCBwYXJzZXMgd2hpdGVzcGFjZS1kZWxpbWl0dGVkIGZpbGVuYW1lcyBmcm9tCi0gICAgKiB0aGUgZ2l2ZW4gPGNvZGU+aW5wdXQ8L2NvZGU+IHN0cmVhbS4gPGI+TGltaXRhdGlvbjo8L2I+Ci0gICAgKiBRdW90ZWQgZmlsZW5hbWVzIG9yIGZpbGVuYW1lcyB3aXRoIGVtYmVkZGVkIHdoaXRlc3BhY2UKLSAgICAqIGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4KLSAgICAqIEBwYXJhbSBpbnB1dCBUaGUgaW5wdXQgc3RyZWFtLgotICAgICogQHJldHVybiBBbiBlbnVtZXJhdGlvbiBvZiBmaWxlbmFtZXMgZnJvbSB0aGUgc3RyZWFtLgotICAqLwotICBzdGF0aWMgcHVibGljIEVudW1lcmF0aW9uIHBhcnNlRmlsZW5hbWVzRnJvbVN0cmVhbSAoIElucHV0U3RyZWFtIGlucHV0ICkKLSAgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgICBWZWN0b3IgZmlsZW5hbWVzID0gbmV3IFZlY3Rvcig2NCw2NCk7Ci0gICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG51bGw7Ci0gICAgYnl0ZSBzdGF0ZSA9IFNUQVRFX1dTOwotICAgIGludCBpYyA9IGlucHV0LnJlYWQoKTsKLSAgICB3aGlsZSAoaWMgPj0gMCkKLSAgICB7Ci0gICAgICBjaGFyIGMgPSAoY2hhcilpYzsKLSAgICAgIHN3aXRjaCAoc3RhdGUpCi0gICAgICB7Ci0gICAgICAgIGNhc2UgU1RBVEVfV1M6Ci0gICAgICAgICAgaWYgKCFDaGFyYWN0ZXIuaXNXaGl0ZXNwYWNlKGMpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoYyk7Ci0gICAgICAgICAgICBzdGF0ZSA9IFNUQVRFX05XUzsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU1RBVEVfTldTOgotICAgICAgICAgIGlmICghQ2hhcmFjdGVyLmlzV2hpdGVzcGFjZShjKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBidWZmZXIuYXBwZW5kKGMpOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIGZpbGVuYW1lID0gYnVmZmVyLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICBmaWxlbmFtZXMuYWRkKGZpbGVuYW1lKTsKLSAgICAgICAgICAgIGJ1ZmZlciA9IG51bGw7Ci0gICAgICAgICAgICBzdGF0ZSA9IFNUQVRFX1dTOwotICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGljID0gaW5wdXQucmVhZCgpOwotICAgIH0KLSAgICByZXR1cm4gZmlsZW5hbWVzLmVsZW1lbnRzKCk7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBieXRlIFNUQVRFX1dTID0gMDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYnl0ZSBTVEFURV9OV1MgPSAxOwotCi0KLSAgLyoqCi0gICogUmV0dXJucyB0cnVlIGlzIHRoZSB0eXBlIHBhc3NlZCBpbiBpcyBhIHByaW10aXZlIGphdmEgdHlwZQotICAqIEBwYXJhbSBjbGFzcyBuYW1lIFN0cmluZwotICAqIEByZXR1cm4gdHJ1ZSBpcyBwcmltaXRpdmUgdHlwZQotICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNQcmltaXRpdmVUeXBlKFN0cmluZyB0eXBlTmFtZSkgCi0gIHsKLQotICAgIGlmICh0eXBlTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJib29sZWFuIikgfHwKLSAgICAgIHR5cGVOYW1lLmVxdWFsc0lnbm9yZUNhc2UoImJ5dGUiKSB8fAotICAgICAgdHlwZU5hbWUuZXF1YWxzSWdub3JlQ2FzZSgiZG91YmxlIikgfHwKLSAgICAgIHR5cGVOYW1lLmVxdWFsc0lnbm9yZUNhc2UoImZsb2F0IikgfHwKLSAgICAgIHR5cGVOYW1lLmVxdWFsc0lnbm9yZUNhc2UoImludCIpIHx8Ci0gICAgICB0eXBlTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJsb25nIikgfHwKLSAgICAgIHR5cGVOYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNob3J0IikgfHwKLSAgICAgIHR5cGVOYW1lLmVxdWFsc0lnbm9yZUNhc2UoImNoYXIiKSkKLSAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLQotICB9Ci0KLSAgLyoqCi0gICogVGhlIG1ldGhvZCByZXBsYWNlIHRoZSBjaGFyYWN0ZXJzIHRoYXQgYXJlIGFsbG93ZWQgaW4gVVJJcwotICAqIGFuZCBub3QgYWxsb3dlZCBpbiBKYXZhIGNsYXNzIG5hbWVzIHRvIGFuIHVuZGVyc2NvcmUgKCdfJykKLSAgKiBAcGFyYW0gVVJJIFN0cmluZwotICAqIEByZXR1cm4gdmFsaWQgSmF2YSBjbGFzcyBuYW1lIFN0cmluZwotICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBVUkkyQ2xhc3NOYW1lKCBTdHJpbmcgdXJpICkgewotICAgIFN0cmluZyBjbGFzc05hbWUgPSB1cmk7Ci0gICAgZm9yICggaW50IGkgPSAwOyBpIDwgVVJJX1NZTUJPTFMubGVuZ3RoOyBpKysgKSB7Ci0gICAgCWNsYXNzTmFtZSA9IGNsYXNzTmFtZS5yZXBsYWNlICggVVJJX1NZTUJPTFNbaV0sIFVOREVSU0NPUkUgKTsKLSAgICB9Ci0gICAgcmV0dXJuIGNsYXNzTmFtZTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXJbXSBVUklfU1lNQk9MUyA9IHsnLScsICd+JywgJyMnLCAnLycsICcuJ307Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXIgVU5ERVJTQ09SRSA9ICdfJzsKLQotCi0gIC8qKgotICAgKiBUaGlzIHJldHVybnMgYSB2YWxpZCBKYXZhIGlkZW50aWZpZXIgYmFzZWQgb24gdGhlIGdpdmVuIG5hbWUuIAotICAgKiAoZm9sbG93cyBKQVgtUlBDIDEuMCBQdWJsaWMgUmV2aWV3IERyYWZ0IDIgcmVjb21tZW5kYXRpb25zKQotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgamF2YUlkZW50aWZpZXJGb3IoU3RyaW5nIGxvY2FsTmFtZSkKLSAgewotICAgIFN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgYm9vbGVhbiBza2lwcGVkID0gZmFsc2U7Ci0gICAgZm9yIChpbnQgaSA9IDAsIGxlbmd0aCA9IGxvY2FsTmFtZS5sZW5ndGgoKTsgaSA8IGxlbmd0aDsgKytpKQotICAgIHsKLSAgICAgIGNoYXIgY2hhcmFjdGVyID0gbG9jYWxOYW1lLmNoYXJBdChpKTsKLSAgICAgIGlmIChDaGFyYWN0ZXIuaXNKYXZhSWRlbnRpZmllclBhcnQoY2hhcmFjdGVyKSAmJiAhaXNEZWxpbWl0ZXIoY2hhcmFjdGVyKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKHNraXBwZWQgJiYgcmVzdWx0Lmxlbmd0aCgpICE9IDApCi0gICAgICAgIHsKLSAgICAgICAgICBjaGFyYWN0ZXIgPSBDaGFyYWN0ZXIudG9VcHBlckNhc2UoY2hhcmFjdGVyKTsKLSAgICAgICAgfQotICAgICAgICByZXN1bHQuYXBwZW5kKGNoYXJhY3Rlcik7Ci0gICAgICAgIHNraXBwZWQgPSBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgc2tpcHBlZCA9dHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIUphdmFDb252ZW50aW9ucy52YWxpZGF0ZUlkZW50aWZpZXIocmVzdWx0LnRvU3RyaW5nKCkpLmlzT0soKSkKLSAgICB7Ci0gICAgICByZXN1bHQuaW5zZXJ0KDAsICJfIik7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0RlbGltaXRlcihjaGFyIGNoYXJhY3RlcikKLSAgewotICAgIHJldHVybiAiXHUwMDJEXHUwMDJFXHUwMDNBXHUwMDVGXHUwMEI3XHUwMzg3XHUwNkREXHUwNkRFIi5pbmRleE9mKGNoYXJhY3RlcikgIT0gLTE7Ci0gIH0KLSAgCi0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9JSmF2YUJlYW5Qcm9wZXJ0eS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9JSmF2YUJlYW5Qcm9wZXJ0eS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Y2ZlMjdkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvSUphdmFCZWFuUHJvcGVydHkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQxOSAgIDEzMjkwNSBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleSAgICAgICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JTWV0aG9kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklUeXBlOwotCi0vKioKLSAqIEBhdXRob3IgY2JyZWFsZXkKLSAqIFRoaXMgb2JqZWN0IHJlcHJlc2VudHMgYSBzaW1wbGUgb3IgaW5kZXhlZCBwcm9wZXJ0eQotICogYXMgZGVmaW5lZCBieSB0aGUgSmF2YSBCZWFuIHNwZWNpZmljYXRpb24uIEV2ZXJ5Ci0gKiBJSmF2YUJlYW5Qcm9wZXJ0eSBpcyBjaGFyYWN0ZXJpemVkIGJ5IGZvdXIgdGhpbmdzOgotICogPG9sPgotICogPGxpPlRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eS48L2xpPgotICogPGxpPldoZXRoZXIgb3Igbm90IHRoZSBwcm9wZXJ0eSBpcyBpbmRleGVkLjwvbGk+Ci0gKiA8bGk+VGhlIEpEVCBJTWV0aG9kIG9mIHRoZSBnZXR0ZXIsIGlmIGFueS48L2xpPgotICogPGxpPlRoZSBKRFQgSU1ldGhvZCBvZiB0aGUgc2V0dGVyLCBpZiBhbnkuPC9saT4KLSAqIDwvb2w+Ci0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSUphdmFCZWFuUHJvcGVydHkKLXsKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eS4KLQkgKiBAcmV0dXJuIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eS4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUgKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRydWUgaWYgYW5kIG9ubHkgaWYgdGhlIHByb3BlcnR5IGlzIGluZGV4ZWQuCi0JICogQHJldHVybiBUcnVlIGlmIGFuZCBvbmx5IGlmIHRoZSBwcm9wZXJ0eSBpcyBpbmRleGVkLgotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzSW5kZXhlZCAoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIEpEVCBJTWV0aG9kIG9mIHRoZSBnZXR0ZXIuCi0JICogRm9yIGluZGV4ZWQgcHJvcGVydGllcywKLQkgKiB0aGUgcmV0dXJuIHR5cGUgb2YgdGhlIGdldHRlciB3aWxsIGJlIGFuIGFycmF5LgotCSAqIEZvciBzaW1wbGUgcHJvcGVydGllcywKLQkgKiB0aGUgcmV0dXJuIHR5cGUgb2YgdGhlIGdldHRlciB3aWxsIG5vdCBiZSBhbiBhcnJheS4KLQkgKiBAcmV0dXJuIFRoZSBKRFQgSU1ldGhvZCBvZiB0aGUgZ2V0dGVyLAotCSAqIG9yIG51bGwgaWYgdGhpcyBpcyBhIHdyaXRlLW9ubHkgcHJvcGVydHkuCi0JICovCi0JcHVibGljIElNZXRob2QgZ2V0R2V0dGVyICgpOwotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIEpEVCBJTWV0aG9kIG9mIHRoZSBpbmRleGVkIGdldHRlciwKLQkgKiBvciBudWxsIGlmIHRoaXMgaXMgZWl0aGVyIG5vdCBhbiBpbmRleGVkIHByb3BlcnR5LAotCSAqIG9yIGlzIGFuIGluZGV4ZWQgcHJvcGVydHkgYnV0IGhhcyBvbmx5IHRoZSBhcnJheS0KLQkgKiBiYXNlZCBnZXR0ZXIuCi0JICogQHJldHVybiBUaGUgSkRUIElNZXRob2Qgb2YgdGhlIGluZGV4ZWQgZ2V0dGVyLAotCSAqIG9yIG51bGwgaWYgdGhpcyBpcyBub3QgYW4gaW5kZXhlZCBwcm9wZXJ0eSBvcgotCSAqIGlmIHRoZXJlIGlzIG5vIGluZGV4ZWQgZ2V0dGVyLgotCSAqLwotCXB1YmxpYyBJTWV0aG9kIGdldEluZGV4ZWRHZXR0ZXIgKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBKRFQgSU1ldGhvZCBvZiB0aGUgc2V0dGVyLgotCSAqIEZvciBpbmRleGVkIHByb3BlcnRpZXMsCi0JICogdGhlIHBhcmFtZXRlciB0eXBlIG9mIHRoZSBzZXR0ZXIgd2lsbCBiZSBhbiBhcnJheS4KLQkgKiBGb3Igc2ltcGxlIHByb3BlcnRpZXMsCi0JICogdGhlIHBhcmFtZXRlciB0eXBlIG9mIHRoZSBzZXR0ZXIgd2lsbCBub3QgYmUgYW4gYXJyYXkuCi0JICogQHJldHVybiBUaGUgSkRUIElNZXRob2Qgb2YgdGhlIHNldHRlciwKLQkgKiBvciBudWxsIGlmIHRoaXMgaXMgYSByZWFkLW9ubHkgcHJvcGVydHkuCi0JICovCi0JcHVibGljIElNZXRob2QgZ2V0U2V0dGVyICgpOwotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIEpEVCBJTWV0aG9kIG9mIHRoZSBpbmRleGVkIHNldHRlciwKLQkgKiBvciBudWxsIGlmIHRoaXMgaXMgZWl0aGVyIG5vdCBhbiBpbmRleGVkIHByb3BlcnR5LAotCSAqIG9yIGlzIGFuIGluZGV4ZWQgcHJvcGVydHkgYnV0IGhhcyBvbmx5IHRoZSBhcnJheS0KLQkgKiBiYXNlZCBzZXR0ZXIuCi0JICogQHJldHVybiBUaGUgSkRUIElNZXRob2Qgb2YgdGhlIGluZGV4ZWQgc2V0dGVyLAotCSAqIG9yIG51bGwgaWYgdGhpcyBpcyBub3QgYW4gaW5kZXhlZCBwcm9wZXJ0eSBvcgotCSAqIGlmIHRoZXJlIGlzIG5vIGluZGV4ZWQgc2V0dGVyLgotCSAqLwotCXB1YmxpYyBJTWV0aG9kIGdldEluZGV4ZWRTZXR0ZXIgKCk7Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdHlwZSB3aXRoaW4gd2hpY2ggdGhlIGdldHRlciBhbmQvb3Igc2V0dGVyCi0JICogb2YgdGhpcyBwcm9wZXJ0eSBpcyBkZWNsYXJlZCwgb3IgbnVsbCBpZiBub25lLgotCSAqIEByZXR1cm4gVGhlIHR5cGUgd2l0aGluIHdoaWNoIHRoZSBnZXR0ZXIgYW5kL29yIHNldHRlcgotCSAqIG9mIHRoaXMgcHJvcGVydHkgaXMgZGVjbGFyZWQuCi0JICovCi0JcHVibGljIElUeXBlIGdldERlY2xhcmluZ1R5cGUgKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL0lKYXZhV2ViU2VydmljZVJ1bGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvSUphdmFXZWJTZXJ2aWNlUnVsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOTEyYzlkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvSUphdmFXZWJTZXJ2aWNlUnVsZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQxOSAgIDEzMjkwNSBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleSAgICAgICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2U7Ci0KLWltcG9ydCBqYXZhLnV0aWwuU3RhY2s7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JRmllbGQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSU1ldGhvZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JVHlwZTsKLQotLyoqCi0gKiBAYXV0aG9yIGNicmVhbGV5Ci0gKiBBIEphdmEgV2ViIHNlcnZpY2UgY29uZm9ybWFuY2UgUnVsZSB0ZXN0cyBzb21lIGNvbGxlY3Rpb24KLSAqIG9mIEphdmEgcmVzb3VyY2VzIHRoYXQgaW1wbGVtZW50LCBvciBhcmUgbWVhbnQgdG8gaW1wbGVtZW50LAotICogYSBXZWIgc2VydmljZSBhZ2FpbnN0IGEgc2luZ2xlLCBjb25jaXNlIHJlcXVpcmVtZW50IGFzIGlzCi0gKiB0eXBpY2FsbHkgZGVmaW5lZCBieSBhIHNwZWNpZmljYXRpb24gKGVnLiBKQVgtUlBDLCBKU1IgMTA5KQotICogb3IgYSBydW50aW1lIChlZy4gQXBhY2hlIEF4aXMpLgotICogPHA+Ci0gKiBFdmVyeSBydWxlIG11c3QgaGF2ZSBhIG5hbWVzcGFjZSBhbmQgYSB1bmlxdWUgSUQgdW5kZXIgdGhhdAotICogdGhhdCBuYW1lc3BhY2UuIEV2ZXJ5IHJ1bGUgbWF5IGhhdmUgYSBzaG9ydCBuYW1lIGFuZCBhIGxvbmcKLSAqIGRlc2NyaXB0aW9uLCBib3RoIG9mIHdoaWNoIGFyZSByZWNvbW1lbmRlZCBidXQgb3B0aW9uYWwuCi0gKiA8cD4KLSAqIEV2ZXJ5IHJ1bGUgZm9sbG93cyBhIGxpZmVjeWNsZSBvZiBpbml0aWFsaXphdGlvbiwgYW5hbHlzaXMKLSAqIGFuZCBjb21wbGV0aW9uLiBBIEphdmEgV2ViIHNlcnZpY2UgcnVsZSBlbmdpbmUgd2lsbCBkcml2ZQotICogdGhlIDxjb2RlPmluaXQoKTwvY29kZT4gbWV0aG9kIHRvIGluaXRpYWxpemUgdGhlIHJ1bGUsIHRoZW4KLSAqIGRyaXZlIHRoZSB2YXJpb3VzIDxjb2RlPnZpc2l0Li4uKCk8L2NvZGU+IG1ldGhvZHMgYXMgaXQKLSAqIG5hdmlnYXRlcyBzb21lIGNvbGxlY3Rpb24gb2YgSkRUIHJlc291cmNlcywgdGhlbiBkcml2ZSB0aGUKLSAqIDxjb2RlPmdldFJlc3VsdHMoKTwvY29kZT4gbWV0aG9kIHRvIGluZGljYXRlIGFuYWx5c2lzIGlzIGRvbmUKLSAqIGFuZCByZXRyaWV2ZSBhIHN0YXR1cyBvYmplY3Qgd2l0aCB0aGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSUphdmFXZWJTZXJ2aWNlUnVsZQotewotCS8qKgotCSAqIFJldHVybnMgdGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBydWxlCi0JICogd2l0aGluIHRoZSBuYW1lc3BhY2UgdG8gd2hpY2ggdGhlIHJ1bGUgYmVsb25ncy4KLQkgKiBAcmV0dXJuIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgcnVsZS4KLQkgKiBWYWxpZCBydWxlIGlkZW50aWZpZXJzIG11c3Qgbm90IGJlIG5lZ2F0aXZlLgotCSAqLwotCXB1YmxpYyBpbnQgZ2V0SWQgKCk7Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbmFtZXNwYWNlIHRvIHdoaWNoIHRoaXMgcnVsZSBiZWxvbmdzLgotCSAqIEByZXR1cm4gVGhlIG5hbWVzcGFjZSB0byB3aGljaCB0aGlzIHJ1bGUgYmVsb25ncy4KLQkgKiBOZXZlciByZXR1cm5zIG51bGwuCi0JICovCi0JcHVibGljIFN0cmluZyBnZXROYW1lc3BhY2UgKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB0cmFuc2xhdGFibGUgc2hvcnQgbmFtZSBvZiB0aGlzIHJ1bGUuICAKLQkgKiBAcmV0dXJuIFRoZSB0cmFuc2xhdGFibGUgc2hvcnQgbmFtZSBvZiB0aGlzIHJ1bGUsCi0JICogb3IgbnVsbCBpZiB0aGUgcnVsZSBoYXMgbm8gbmFtZS4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUgKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB0cmFuc2xhdGFibGUgZGVzY3JpcHRpb24gb2YgdGhpcyBydWxlLgotCSAqIEByZXR1cm4gVGhlIHRyYW5zbGF0YWJsZSBkZXNjcmlwdGlvbiBvZiB0aGlzIHJ1bGUsCi0JICogb3IgbnVsbCBpZiB0aGUgcnVsZSBoYXMgbm8gZGVzY3JpcHRpb24uCi0JICovCi0JcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbiAoKTsKLQotCS8qKgotCSAqIENhbGxlZCBieSB0aGUgcnVsZSBlbmdpbmUgdG8gZ2l2ZSB0aGlzIHJ1bGUgYSBjaGFuY2UKLQkgKiB0byBpbml0aWFsaXplIGl0c2VsZiBwcmlvciB0byB2aXNpdGluZyBKRFQgb2JqZWN0cy4KLQkgKiBAcGFyYW0gZW5naW5lIFRoZSBlbmdpbmUgaW5pdGlhbGl6aW5nIHRoaXMgcnVsZS4KLQkgKi8KLQlwdWJsaWMgdm9pZCBpbml0ICggSUphdmFXZWJTZXJ2aWNlUnVsZUVuZ2luZSBlbmdpbmUgKTsKLQotCS8qKgotCSAqIENhbGxlZCBieSB0aGUgcnVsZSBlbmdpbmUgd2hlbiBpdCBkZWNpZGVzIHRvIHZpc2l0Ci0JICogYSBKYXZhIGNsYXNzIChpZS4gcHJpbWl0aXZlIHR5cGVzIGFyZSBleGNsdWRlZCkuCi0JICogQHBhcmFtIGpkdENsYXNzIFRoZSBjbGFzcyB0byB2aXNpdC4KLQkgKiBAcGFyYW0gcGVhbnV0VHJhaWwgVGhlIHRyYWlsIG9mIG9iamVjdHMgYmFjayB0byB0aGUgcm9vdC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB2aXNpdENsYXNzICggSVR5cGUgamR0Q2xhc3MsIFN0YWNrIHBlYW51dFRyYWlsICk7Ci0KLQkvKioKLQkgKiBDYWxsZWQgYnkgdGhlIHJ1bGUgZW5naW5lIHdoZW4gaXQgZGVjaWRlcyB0byB2aXNpdAotCSAqIGEgSmF2YSBjbGFzcyBmb3VuZCBvbiB0aGUgdGhyb3dzIGNsYXVzZSBvZiBhIG1ldGhvZC4KLQkgKiBAcGFyYW0gamR0Q2xhc3MgVGhlIGV4Y2VwdGlvbiBjbGFzcyB0byB2aXNpdC4KLQkgKiBAcGFyYW0gcGVhbnV0VHJhaWwgVGhlIHRyYWlsIG9mIG9iamVjdHMgYmFjayB0byB0aGUgcm9vdC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB2aXNpdEV4Y2VwdGlvbiAoIElUeXBlIGpkdENsYXNzLCBTdGFjayBwZWFudXRUcmFpbCApOwotCi0JLyoqCi0JICogQ2FsbGVkIGJ5IHRoZSBydWxlIGVuZ2luZSB3aGVuIGl0IGRlY2lkZXMgdG8gdmlzaXQKLQkgKiBhIGZpZWxkIGJlbG9uZ2luZyB0byBhIGNsYXNzLgotCSAqIEBwYXJhbSBqZHRGaWVsZCBUaGUgZmllbGQgdG8gdmlzaXQuCi0JICogQHBhcmFtIHBlYW51dFRyYWlsIFRoZSB0cmFpbCBvZiBvYmplY3RzIGJhY2sgdG8gdGhlIHJvb3QuCi0JICovCi0JcHVibGljIHZvaWQgdmlzaXRGaWVsZCAoIElGaWVsZCBqZHRGaWVsZCwgU3RhY2sgcGVhbnV0VHJhaWwgKTsKLQotCS8qKgotCSAqIENhbGxlZCBieSB0aGUgcnVsZSBlbmdpbmUgd2hlbiBpdCBkZWNpZGVzIHRvIHZpc2l0Ci0JICogYSBKYXZhIEJlYW4gcHJvcGVydHkgKGllLiByZXByZXNlbnRlZCBieSBhICJnZXQiIGFuZC9vcgotCSAqICJzZXQiIG1ldGhvZCkgYmVsb25pbmcgdG8gYSBjbGFzcy4KLQkgKiBAcGFyYW0gYmVhblByb3BlcnR5IFRoZSBwcm9wZXJ0eSB0byB2aXNpdC4KLQkgKiBAcGFyYW0gcGVhbnV0VHJhaWwgVGhlIHRyYWlsIG9mIG9iamVjdHMgYmFjayB0byB0aGUgcm9vdC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB2aXNpdFByb3BlcnR5ICggSUphdmFCZWFuUHJvcGVydHkgYmVhblByb3BlcnR5LCBTdGFjayBwZWFudXRUcmFpbCApOwotCi0JLyoqCi0JICogQ2FsbGVkIGJ5IHRoZSBydWxlIGVuZ2luZSB3aGVuIGl0IGRlY2lkZXMgdG8gdmlzaXQgYSBtZXRob2QuCi0JICogQHBhcmFtIGpkdE1ldGhvZCBUaGUgbWV0aG9kIHRvIHZpc2l0LgotCSAqIEBwYXJhbSBwZWFudXRUcmFpbCBUaGUgdHJhaWwgb2Ygb2JqZWN0cyBiYWNrIHRvIHRoZSByb290LgotCSAqLwotCXB1YmxpYyB2b2lkIHZpc2l0TWV0aG9kICggSU1ldGhvZCBqZHRNZXRob2QsIFN0YWNrIHBlYW51dFRyYWlsICk7Ci0KLQkvKioKLQkgKiBDYWxsZWQgYnkgdGhlIHJ1bGUgZW5naW5lIGFmdGVyIGFsbCBKRFQgb2JqZWN0cyBoYXZlCi0JICogYmVlbiB2aXNpdGVkIHNvIHRoYXQgdGhlIHJ1bGUgY2FuIHJldHVybiBhIHN0YXR1cwotCSAqIG9iamVjdCAodXN1YWxseSBhIG11bHRpLXN0YXR1cykgd2l0aCBhIHN1bW1hcnkgb2YKLQkgKiBhbnkgdmlvbGF0aW9ucyBieSBKRFQgb2JqZWN0cyBkZXRlY3RlZCBieSB0aGlzIHJ1bGUuCi0JICogQHJldHVybiBUaGUgcmVzdWx0cyBvZiB0aGUgcnVsZSdzIGFuYWx5c2lzLgotCSAqLwotCXB1YmxpYyBJU3RhdHVzIGdldFJlc3VsdHMgKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL0lKYXZhV2ViU2VydmljZVJ1bGVFbmdpbmUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvSUphdmFXZWJTZXJ2aWNlUnVsZUVuZ2luZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2VmMGI2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvSUphdmFXZWJTZXJ2aWNlUnVsZUVuZ2luZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDE5ICAgMTMyOTA1IGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5ICAgICAgICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklUeXBlOwotCi0vKioKLSAqIEBhdXRob3IgY2JyZWFsZXkKLSAqIFRoaXMgaXMgYW4gZW5naW5lIHRoYXQgd2Fsa3MgYSBKRFQgbW9kZWwgYW5kIHJ1bnMgcnVsZXMuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSUphdmFXZWJTZXJ2aWNlUnVsZUVuZ2luZQotewotCS8qKgotCSAqIEFuYWx5emVzIHRoZSBnaXZlbiBjbGFzcyBpbiB0aGUgY29udGV4dCBvZiB0aGUgZ2l2ZW4gCi0JICogcHJvamVjdCBmb3IgY29tcGxpYW5jZSB0byBhIHNldCBvZiBKQVgtUlBDIHJ1bGVzLgotCSAqIEBwYXJhbSBwcm9qZWN0IFRoZSBwcm9qZWN0IGNvbnRleHQgb2YgdGhlIGFuYWx5c2lzLgotCSAqIEBwYXJhbSByb290Q2xhc3MgVGhlIElUeXBlIG9mIHRoZSBjbGFzcyB0byBhbmFseXplLgotCSAqIEBwYXJhbSBydWxlcyBUaGUgcnVsZXMgdG8gdXNlIGZvciB0aGUgYW5hbHlzaXMuCi0JICogQHJldHVybiBBbiBJU3RhdHVzIHN1bW1hcml6aW5nIHRoZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KLQkgKi8KLQlwdWJsaWMgSVN0YXR1cyBhbmFseXplICggSVByb2plY3QgcHJvamVjdCwgSVR5cGUgcm9vdENsYXNzLCBKYXZhV2ViU2VydmljZVJ1bGVTZXQgcnVsZXMgKTsKLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBKRFRSZXNvbHZlciBpbiB1c2UgYnkgdGhpcyBhbmFseXplci4KLQkgKiBUaGUgSkRUUmVzb2x2ZXIgaXMgZ3VhcmFudGVlZCBub3QgdG8gYmUgbnVsbCBvbmx5Ci0JICogYWZ0ZXIgdGhlIGFuYWx5emUgbWV0aG9kIGhhcyBiZWVuIGludm9rZWQgYW5kIGJlZm9yZQotCSAqIHRoZSBmaXJzdCBydWxlIGlzIHZpc2l0ZWQuIFRoaXMgbWV0aG9kIGlzIGludGVuZGVkCi0JICogZm9yIHVzZSBieSBpbXBsZW1lbnRhdGlvbnMgb2YgSUphdmFXZWJTZXJ2aWNlUnVsZS4KLQkgKiBAcmV0dXJuIFRoZSBKRFRSZXNvbHZlciBpbiB1c2UgYnkgdGhpcyBhbmFseXplci4KLQkgKi8KLQlwdWJsaWMgSkRUUmVzb2x2ZXIgZ2V0SkRUUmVzb2x2ZXIgKCk7Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcHJvZ3Jlc3MgbW9uaXRvciBpbiB1c2UgYnkgdGhpcyBhbmFseXplciwKLQkgKiBvciBudWxsIGlmIG5vIHByb2dyZXNzIG1vbml0b3IgaXMgaW4gdXNlLgotCSAqIFRoaXMgbWV0aG9kIGlzIGludGVuZGVkIGZvciB1c2UgYnkgaW1wbGVtZW50YXRpb25zCi0JICogb2YgSUphdmFXZWJTZXJ2aWNlUnVsZS4KLQkgKiBAcmV0dXJuIFRoZSBwcm9ncmVzcyBtb25pdG9yIGluIHVzZSBieSB0aGlzIGFuYWx5emVyLAotCSAqIG9yIG51bGwgZm9yIG5vbmUuCi0JICovCi0JcHVibGljIElQcm9ncmVzc01vbml0b3IgZ2V0UHJvZ3Jlc3NNb25pdG9yICgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9KQVhSUENXZWJTZXJ2aWNlQW5hbHl6ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvSkFYUlBDV2ViU2VydmljZUFuYWx5emVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExNWVmYjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9KQVhSUENXZWJTZXJ2aWNlQW5hbHl6ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MTkgICAxMzI5MDUgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkgICAgICAgICAgCi0gKiAyMDA2MDYwNyAgIDE0NTYwNCBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleSAgICAgICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklDbGFzc0ZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUNvbXBpbGF0aW9uVW5pdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JSmF2YUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFNb2RlbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuV1NQbHVnaW5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UucnVsZXMuSkFYUlBDUnVsZVNldEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGNvbnZlbmllbmNlIG1ldGhvZHMgZm9yIGFuYWx5emluZwotICogY29tcGxpYW5jZSBvZiBKYXZhIHNlcnZpY2UgY2xhc3NlcyBhbmQgdmFsdWUgdHlwZXMgdG8KLSAqIHRoZSBKQVgtUlBDIDEuMSBzcGVjaWZpY2F0aW9uLiBUeXBpY2FsIHVzYWdlIG9mIHRoaXMKLSAqIGNsYXNzOgotICogPGNvZGU+Ci0gKiBJVHlwZSB0eXBlID0gSkFYUlBDV2ViU2VydmljZUFuYWx5emVyLmFzVHlwZShteUphdmFGaWxlUmVzb3VyY2UpOwotICogSmF2YVdlYlNlcnZpY2VSdWxlU2V0IHJ1bGVzID0gSkFYUlBDV2ViU2VydmljZUFuYWx5emVyLmdldFJ1bGVTZXQoKTsKLSAqIEpBWFJQQ1dlYlNlcnZpY2VBbmFseXplci5nZXRSdWxlRW5naW5lKCkuYW5hbHl6ZSh0eXBlLHJ1bGVzLG15UHJvZ3Jlc3NNb25pdG9yKTsKLSAqIDwvY29kZT4gCi0gKiBAYXV0aG9yIGNicmVhbGV5Ci0gKi8KLXB1YmxpYyBjbGFzcyBKQVhSUENXZWJTZXJ2aWNlQW5hbHl6ZXIKLXsKLQlwcml2YXRlIEphdmFXZWJTZXJ2aWNlUnVsZVNldCBydWxlU2V0XzsKLQkKLQkvKioKLQkgKiBDb25zdHJ1Y3RzIGEgbmV3IEpBWC1SUEMgV2ViIHNlcnZpY2UgYW5hbHl6ZXIsCi0JICogYSBjb252ZW5pZW5jZSBjbGFzcyB3cmFwcGVkIGFyb3VuZCBhCi0JICogSkFYUlBDV2ViU2VydmljZUFuYWx5emVyLgotCSAqLwotCXB1YmxpYyBKQVhSUENXZWJTZXJ2aWNlQW5hbHl6ZXIgKCkKLQl7Ci0JCXJ1bGVTZXRfID0gSkFYUlBDUnVsZVNldEZhY3RvcnkubmV3UnVsZVNldCgpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNldCBvZiBydWxlcyBpbiB1c2UsIHRoZSBjb250ZW50cyBvZgotCSAqIHdoaWNoIGNhbiBiZSBtYW5pcHVsYXRlZCBhbmQgd2lsbCBiZSByZXNwZWN0ZWQgYnkKLQkgKiB0aGlzIGFuYWx5emVyLiBJbiBvdGhlciB3b3JkcywgdGhpcyBtZXRob2QgcmV0dXJucyBhCi0JICogcmVmZXJlbmNlIHRvLCBub3QgYSBjb3B5IG9mLCB0aGUgc2V0IG9mIHJ1bGVzIGluIHVzZS4KLQkgKiBAcmV0dXJuIFRoZSBzZXQgb2YgcnVsZXMgaW4gdXNlIGJ5IHRoZSBhbmFseXplci4KLQkgKi8KLQlwdWJsaWMgSmF2YVdlYlNlcnZpY2VSdWxlU2V0IGdldFJ1bGVTZXQgKCkKLQl7Ci0JCXJldHVybiBydWxlU2V0XzsKLQl9Ci0JCi0JLyoqCi0JICogQW5hbHl6ZXMgdGhlIEphdmEgc2VydmljZSBjbGFzcyByZXByZXNlbnRlZCBieSB0aGUgZ2l2ZW4KLQkgKiBKRFQgdHlwZSBmb3IgY29tcGxpYW5jZSB0byB0aGUgSkFYLVJQQyBmb3IgY29tcGxpYW5jZSB0bwotCSAqIHRoZSBKQVgtUlBDIHNwZWNpZmljYXRpb24uCi0JICogUHJvZ3Jlc3MgbW9uaXRvcmluZyBpcyBwcm92aWRlZCBieSB0aGUgZ2l2ZW4gbW9uaXRvci4gCi0JICogQHBhcmFtIHByb2plY3QgVGhlIHByb2plY3QgY29udGV4dCBpbiB3aGljaCB0aGUgYW5hbHlzaXMKLQkgKiBzaG91bGQgdGFrZSBwbGFjZS4KLQkgKiBAcGFyYW0gcm9vdENsYXNzIFRoZSBKYXZhIHNlcnZpY2UgY2xhc3MgdG8gYW5hbHl6ZS4KLQkgKiBAcGFyYW0gbW9uaXRvciBUaGUgcHJvZ3Jlc3MgbW9uaXRvciB0byB1c2UsCi0JICogb3IgbnVsbCBpZiBtb25pdG9yaW5nIGlzIG5vdCBkZXNpcmVkLgotCSAqIEByZXR1cm4gQSBzdGF0dXMgb2JqZWN0IHdob3NlIHNldmVyaXR5LCBtZXNzYWdlIGFuZAotCSAqIGNoaWxkIHN0YXR1cyBvYmplY3RzLCBpZiBhbnksIGRlc2NyaWJlIGFueSBKQVgtUlBDCi0JICogcnVsZXMgdGhhdCBtYXkgYmUgY29tcHJvbWlzZWQgYnkgdGhlIHNlcnZpY2UgY2xhc3MuCi0JICogTmV2ZXIgcmV0dXJucyBudWxsLgotCSAqLwotCXB1YmxpYyBJU3RhdHVzIGFuYWx5emUgKCBJUHJvamVjdCBwcm9qZWN0LCBJVHlwZSByb290Q2xhc3MsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApCi0JewotCQlJSmF2YVdlYlNlcnZpY2VSdWxlRW5naW5lIGVuZ2luZSA9IG5ldyBKQVhSUENXZWJTZXJ2aWNlUnVsZUVuZ2luZShtb25pdG9yKTsKLQkJcmV0dXJuIGVuZ2luZS5hbmFseXplKHByb2plY3Qscm9vdENsYXNzLHJ1bGVTZXRfKTsKLQl9Ci0KLQkvKioKLQkgKiBBbmFseXplcyB0aGUgSmF2YSBzZXJ2aWNlIGNsYXNzIHJlcHJlc2VudGVkIGJ5IHRoZSBnaXZlbgotCSAqIEpEVCB0eXBlIGZvciBjb21wbGlhbmNlIHRvIHRoZSBKQVgtUlBDIGZvciBjb21wbGlhbmNlIHRvCi0JICogdGhlIEpBWC1SUEMgc3BlY2lmaWNhdGlvbi4KLQkgKiBQcm9ncmVzcyBtb25pdG9yaW5nIGlzIHByb3ZpZGVkIGJ5IHRoZSBnaXZlbiBtb25pdG9yLiAKLQkgKiBAcGFyYW0gcHJvamVjdCBUaGUgcHJvamVjdCBjb250ZXh0IGluIHdoaWNoIHRoZSBhbmFseXNpcwotCSAqIHNob3VsZCB0YWtlIHBsYWNlLgotCSAqIEBwYXJhbSByb290Q2xhc3MgVGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZQotCSAqIEphdmEgc2VydmljZSBjbGFzcyB0byBhbmFseXplLgotCSAqIEBwYXJhbSBtb25pdG9yIFRoZSBwcm9ncmVzcyBtb25pdG9yIHRvIHVzZSwKLQkgKiBvciBudWxsIGlmIG1vbml0b3JpbmcgaXMgbm90IGRlc2lyZWQuCi0JICogQHJldHVybiBBIHN0YXR1cyBvYmplY3Qgd2hvc2Ugc2V2ZXJpdHksIG1lc3NhZ2UgYW5kCi0JICogY2hpbGQgc3RhdHVzIG9iamVjdHMsIGlmIGFueSwgZGVzY3JpYmUgYW55IEpBWC1SUEMKLQkgKiBydWxlcyB0aGF0IG1heSBiZSBjb21wcm9taXNlZCBieSB0aGUgc2VydmljZSBjbGFzcy4KLQkgKiBOZXZlciByZXR1cm5zIG51bGwuCi0JICovCi0JcHVibGljIElTdGF0dXMgYW5hbHl6ZSAoIElQcm9qZWN0IHByb2plY3QsIFN0cmluZyByb290Q2xhc3MsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApCi0JewotCQl0cnkKLQkJewotCQkJSVR5cGUgcm9vdFR5cGUgPSBhc1R5cGUocm9vdENsYXNzLHByb2plY3QpOwotCQkJaWYgKHJvb3RUeXBlID09IG51bGwpCi0JCQl7Ci0JCQkJU3RyaW5nIG1lc3NhZ2UgPSBOTFMuYmluZChXU1BsdWdpbk1lc3NhZ2VzLk1TR19KQVhSUEMxMV9VTlJFU09MVkVEX0NMQVNTLHJvb3RDbGFzcyxwcm9qZWN0LmdldE5hbWUoKSk7Ci0JCQkJcmV0dXJuIG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwib3JnLmVjbGlwc2UuanN0LndzIiwwLG1lc3NhZ2UsbnVsbCk7Ci0JCQl9Ci0JCQlyZXR1cm4gYW5hbHl6ZShwcm9qZWN0LHJvb3RUeXBlLG1vbml0b3IpOwotCQl9Ci0JCWNhdGNoIChKYXZhTW9kZWxFeGNlcHRpb24gZSkKLQkJewotCQkJLy8gQW4gZXhjZXB0aW9uIG1heSBiZSB0aHJvd24gZnJvbSB0aGUgY2FsbCB0byBhc1R5cGUoLi4uKSwKLQkJCS8vIG5vdCBmcm9tIHRoZSBjYWxsIHRvIGFuYWx5emUoLi4uKS4gRXhjZXB0aW9ucyB3aXRoaW4gdGhlCi0JCQkvLyBhbmFseXplKC4uLikgbWV0aG9kIGFyZSBjYXB0dXJlZCBpbiB0aGUgcmV0dXJuZWQgSVN0YXR1cy4KLQkJCXJldHVybiBuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIm9yZy5lY2xpcHNlLmpzdC53cyIsMCwiSW50ZXJuYWwgZXJyb3IiLGUpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQW5hbHl6ZXMgdGhlIEphdmEgc2VydmljZSBjbGFzcyByZXByZXNlbnRlZCBieSB0aGUgZ2l2ZW4KLQkgKiAiLmphdmEiIGNvbXBpbGF0aW9uIHVuaXQgb3IgIi5jbGFzcyIgZmlsZSBmb3IgY29tcGxpYW5jZQotCSAqIHRvIHRoZSBKQVgtUlBDIHNwZWNpZmljYXRpb24uCi0JICogUHJvZ3Jlc3MgbW9uaXRvcmluZyBpcyBwcm92aWRlZCBieSB0aGUgZ2l2ZW4gbW9uaXRvci4gCi0JICogQHBhcmFtIHByb2plY3QgVGhlIHByb2plY3QgY29udGV4dCBpbiB3aGljaCB0aGUgYW5hbHlzaXMKLQkgKiBzaG91bGQgdGFrZSBwbGFjZS4KLQkgKiBAcGFyYW0gcm9vdENsYXNzIFRoZSBKYXZhIHNlcnZpY2UgY2xhc3MgdG8gYW5hbHl6ZS4KLQkgKiBAcGFyYW0gbW9uaXRvciBUaGUgcHJvZ3Jlc3MgbW9uaXRvciB0byB1c2UsCi0JICogb3IgbnVsbCBpZiBtb25pdG9yaW5nIGlzIG5vdCBkZXNpcmVkLgotCSAqIEByZXR1cm4gQSBzdGF0dXMgb2JqZWN0IHdob3NlIHNldmVyaXR5LCBtZXNzYWdlIGFuZAotCSAqIGNoaWxkIHN0YXR1cyBvYmplY3RzLCBpZiBhbnksIGRlc2NyaWJlIGFueSBKQVgtUlBDCi0JICogcnVsZXMgdGhhdCBtYXkgYmUgY29tcHJvbWlzZWQgYnkgdGhlIHNlcnZpY2UgY2xhc3MuCi0JICogTmV2ZXIgcmV0dXJucyBudWxsLgotCSAqLwotCXB1YmxpYyBJU3RhdHVzIGFuYWx5emUgKCBJUHJvamVjdCBwcm9qZWN0LCBJRmlsZSByb290Q2xhc3MsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApCi0JewotCQl0cnkKLQkJewotCQkJSVR5cGUgcm9vdFR5cGUgPSBhc1R5cGUocm9vdENsYXNzKTsKLQkJCWlmIChyb290VHlwZSA9PSBudWxsKQotCQkJewotCQkJCVN0cmluZyBtZXNzYWdlID0gTkxTLmJpbmQoV1NQbHVnaW5NZXNzYWdlcy5NU0dfSkFYUlBDMTFfVU5SRVNPTFZFRF9DTEFTUyxyb290Q2xhc3MuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLHByb2plY3QuZ2V0TmFtZSgpKTsKLQkJCQlyZXR1cm4gbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCJvcmcuZWNsaXBzZS5qc3Qud3MiLDAsbWVzc2FnZSxudWxsKTsKLQkJCX0KLQkJCXJldHVybiBhbmFseXplKHByb2plY3Qscm9vdFR5cGUsbW9uaXRvcik7Ci0JCX0KLQkJY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBlKQotCQl7Ci0JCQkvLyBBbiBleGNlcHRpb24gbWF5IGJlIHRocm93biBmcm9tIHRoZSBjYWxsIHRvIGFzVHlwZSguLi4pLAotCQkJLy8gbm90IGZyb20gdGhlIGNhbGwgdG8gYW5hbHl6ZSguLi4pLiBFeGNlcHRpb25zIHdpdGhpbiB0aGUKLQkJCS8vIGFuYWx5emUoLi4uKSBtZXRob2QgYXJlIGNhcHR1cmVkIGluIHRoZSByZXR1cm5lZCBJU3RhdHVzLgotCQkJcmV0dXJuIG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwib3JnLmVjbGlwc2UuanN0LndzIiwwLCJJbnRlcm5hbCBlcnJvciIsZSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBKYXZhIHR5cGUgcmVwcmVzZW50ZWQgYnkgdGhlIGdpdmVuIGZpbGUsCi0JICogb3IgbnVsbCBpZiBubyBzdWNoIHR5cGUgY2FuIGJlIGNsZWFybHkgZGV0ZXJtaW5lZC4KLQkgKiBAcGFyYW0gZmlsZSBUaGUgZmlsZSB3aG9zZSB0eXBlIHRvIGluZmVyLCB1c3VhbGx5IGEKLQkgKiAiLmphdmEiIG9yICIuY2xhc3MiIGZpbGUuIEZvciAiLmphdmEiIGZpbGVzLCB0aGlzCi0JICogbWV0aG9kIHdpbGwgcmV0dXJuIHRoZSBwcmltYXJ5IHR5cGUuCi0JICogQHJldHVybiBUaGUgaW5mZXJyZWQgSkRUIEphdmEgdHlwZS4KLQkgKiBAdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbiBJZiB0aGUgZ2l2ZW4gZmlsZSBjb3VsZCBub3QKLQkgKiBtYXBwZWQgdG8gYSBKRFQgSVR5cGUuCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgSVR5cGUgYXNUeXBlICggU3RyaW5nIHFuYW1lLCBJUHJvamVjdCBwcm9qZWN0ICkKLQl0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uCi0JewotCQlJVHlwZSB0eXBlID0gbnVsbDsKLQkJSUphdmFFbGVtZW50IGphdmFFbGVtZW50ID0gSmF2YUNvcmUuY3JlYXRlKHByb2plY3QpOwotCQlpZiAoamF2YUVsZW1lbnQgaW5zdGFuY2VvZiBJSmF2YVByb2plY3QpCi0JCXsKLQkJCUlKYXZhUHJvamVjdCBqYXZhUHJvamVjdCA9IChJSmF2YVByb2plY3QpamF2YUVsZW1lbnQ7Ci0JCQl0eXBlID0gamF2YVByb2plY3QuZmluZFR5cGUocW5hbWUpOwotCQl9Ci0JCXJldHVybiB0eXBlOwotCX0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBKYXZhIHR5cGUgcmVwcmVzZW50ZWQgYnkgdGhlIGdpdmVuIGZpbGUsCi0JICogb3IgbnVsbCBpZiBubyBzdWNoIHR5cGUgY2FuIGJlIGNsZWFybHkgZGV0ZXJtaW5lZC4KLQkgKiBAcGFyYW0gZmlsZSBUaGUgZmlsZSB3aG9zZSB0eXBlIHRvIGluZmVyLCB1c3VhbGx5IGEKLQkgKiAiLmphdmEiIG9yICIuY2xhc3MiIGZpbGUuIEZvciAiLmphdmEiIGZpbGVzLCB0aGlzCi0JICogbWV0aG9kIHdpbGwgcmV0dXJuIHRoZSBwcmltYXJ5IHR5cGUuCi0JICogQHJldHVybiBUaGUgaW5mZXJyZWQgSkRUIEphdmEgdHlwZS4KLQkgKiBAdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbiBJZiB0aGUgZ2l2ZW4gZmlsZSBjb3VsZCBub3QKLQkgKiBtYXBwZWQgdG8gYSBKRFQgSVR5cGUuCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgSVR5cGUgYXNUeXBlICggSUZpbGUgZmlsZSApCi0JdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbgotCXsKLQkJSVR5cGUgdHlwZSA9IG51bGw7Ci0JCUlKYXZhRWxlbWVudCBqYXZhRWxlbWVudCA9IEphdmFDb3JlLmNyZWF0ZShmaWxlKTsKLQkJaWYgKGphdmFFbGVtZW50IGluc3RhbmNlb2YgSUNvbXBpbGF0aW9uVW5pdCkKLQkJewotCQkJSUNvbXBpbGF0aW9uVW5pdCBjb21waWxhdGlvblVuaXQgPSAoSUNvbXBpbGF0aW9uVW5pdClqYXZhRWxlbWVudDsKLQkJCXR5cGUgPSBjb21waWxhdGlvblVuaXQuZmluZFByaW1hcnlUeXBlKCk7Ci0JCX0KLQkJZWxzZSBpZiAoamF2YUVsZW1lbnQgaW5zdGFuY2VvZiBJQ2xhc3NGaWxlKQotCQl7Ci0JCQlJQ2xhc3NGaWxlIGNsYXNzRmlsZSA9IChJQ2xhc3NGaWxlKWphdmFFbGVtZW50OwotCQkJdHlwZSA9IGNsYXNzRmlsZS5nZXRUeXBlKCk7Ci0JCX0KLQkJcmV0dXJuIHR5cGU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9KQVhSUENXZWJTZXJ2aWNlUnVsZUVuZ2luZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9KQVhSUENXZWJTZXJ2aWNlUnVsZUVuZ2luZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzU5N2YwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvSkFYUlBDV2ViU2VydmljZVJ1bGVFbmdpbmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MTkgICAxMzI5MDUgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkKLSAqIDIwMDYwNzExICAgMTQ5NDExIGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLWltcG9ydCBqYXZhLnV0aWwuU3RhY2s7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklGaWVsZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JTWV0aG9kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFNb2RlbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuV1NQbHVnaW5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotCi0vKioKLSAqIEBhdXRob3IgY2JyZWFsZXkKLSAqIFRoaXMgZW5naW5lIG5hdmlnYXRlZCBKRFQgY2xhc3NlcyBhY2NvcmRpbmcgdG8gYSBKQVgtUlBDCi0gKiBpbnRlcnByZXRhdGlvbi4gVGhlIHJvb3QgY2xhc3MgaXMgY29uc2lkZXJlZCB0byBiZSBhCi0gKiBjYW5kaWRhdGUgSkFYLVJQQyBzZXJ2aWNlIGNsYXNzLCBhbmQgYW55IG5vbi1zdGFuZGFyZAotICogb3Igbm9uLXByaW1pdGl2ZSB0eXBlcyB1c2VkIGJ5IHRoZSBtZXRob2RzIG9mIHRoZSBzZXJ2aWNlCi0gKiBjbGFzcyBhcmUgY29uc2lkZXJlZCB0byBiZSBjYW5kaWRhdGVzIGZvciBKQVgtUlBDIHZhbHVlCi0gKiB0eXBlIGNsYXNzZXMuIAotICovCi1wdWJsaWMgY2xhc3MgSkFYUlBDV2ViU2VydmljZVJ1bGVFbmdpbmUgaW1wbGVtZW50cyBJSmF2YVdlYlNlcnZpY2VSdWxlRW5naW5lCi17Ci0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBKQVgtUlBDIGFuYWx5c2lzIGVuZ2luZSB3aXRoIHRoZSBnaXZlbgotCSAqIHByb2dyZXNzIG1vbml0b3IuCi0JICogQHBhcmFtIHByb2dyZXNzTW9uaXRvciBUaGUgcHJvZ3Jlc3MgbW9uaXRvciBmb3IgdGhlCi0JICogZW5naW5lIHRvIHVzZSwgb3IgbnVsbCBpZiBtb25pdG9yaW5nIGlzIG5vdCBkZXNpcmVkLgotCSAqLwotCXB1YmxpYyBKQVhSUENXZWJTZXJ2aWNlUnVsZUVuZ2luZSAoIElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yICkKLQl7Ci0JCXByb2dyZXNzTW9uaXRvcl8gPSBwcm9ncmVzc01vbml0b3I7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5JSmF2YVdlYlNlcnZpY2VSdWxlRW5naW5lI2FuYWx5emUob3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3QsIG9yZy5lY2xpcHNlLmpkdC5jb3JlLklUeXBlLCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSmF2YVdlYlNlcnZpY2VSdWxlU2V0LCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcikKLQkgKi8KLQlwdWJsaWMgSVN0YXR1cyBhbmFseXplICggSVByb2plY3QgcHJvamVjdCwgSVR5cGUgcm9vdENsYXNzLCBKYXZhV2ViU2VydmljZVJ1bGVTZXQgcnVsZXMgKQotCXsKLQkJdmlzaXRlZF8gPSBuZXcgSGFzaFNldCgpOwotCQlwZWFudXRUcmFpbF8gPSBuZXcgU3RhY2soKTsJCQotCQlyZXNvbHZlcl8gPSBuZXcgSkRUUmVzb2x2ZXIocHJvamVjdCxwcm9ncmVzc01vbml0b3JfKTsKLQkJSVN0YXR1cyBzdGF0dXMgPSBudWxsOwotCQlydWxlcy5pbml0KHRoaXMpOwotCQl0cnkKLQkJewotCQkJYW5hbHl6ZVNlcnZpY2VDbGFzcyhyb290Q2xhc3MscnVsZXMpOwotCQkJU3RyaW5nIGluQ2FzZU9mRmFpbHVyZU1lc3NhZ2UgPSBOTFMuYmluZChXU1BsdWdpbk1lc3NhZ2VzLk1TR19KQVhSUEMxMV9OT1RfQ09NUExJQU5ULHJvb3RDbGFzcy5nZXRGdWxseVF1YWxpZmllZE5hbWUoKSk7Ci0JCQlzdGF0dXMgPSBydWxlcy5nZXRSZXN1bHRzKGluQ2FzZU9mRmFpbHVyZU1lc3NhZ2UpOwotCQl9Ci0JCWNhdGNoIChKYXZhTW9kZWxFeGNlcHRpb24gZSkKLQkJewotCQkJc3RhdHVzID0gbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCJvcmcuZWNsaXBzZS5qc3Qud3MiLDAsIkludGVybmFsIEVycm9yIixlKTsKLQkJfQotCQlyZXR1cm4gc3RhdHVzOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgYW5hbHl6ZVNlcnZpY2VDbGFzcyAoIElUeXBlIHR5cGUsIEphdmFXZWJTZXJ2aWNlUnVsZVNldCBydWxlcyApCi0JdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbgotCXsKLQkJcnVsZXMudmlzaXRDbGFzcyh0eXBlLHBlYW51dFRyYWlsXyk7Ci0JCXZpc2l0ZWRfLmFkZCh0eXBlLmdldEZ1bGx5UXVhbGlmaWVkTmFtZSgpKTsKLQkJcHVzaCh0eXBlKTsKLQkJdHJ5Ci0JCXsKLQkJCUlUeXBlW10gc3VwZXJDbGFzc2VzID0gcmVzb2x2ZXJfLmdldFN1cGVyQ2xhc3Nlcyh0eXBlKTsKLQkJCUlNZXRob2RbXSBtZXRob2RzID0gcmVzb2x2ZXJfLmdldFB1YmxpY01ldGhvZHModHlwZSxzdXBlckNsYXNzZXMpOwotCQkJZm9yIChpbnQgbT0wOyBtPG1ldGhvZHMubGVuZ3RoOyBtKyspCi0JCQl7Ci0JCQkJYW5hbHl6ZU1ldGhvZChtZXRob2RzW21dLHJ1bGVzKTsKLQkJCX0KLQkJfQotCQlmaW5hbGx5Ci0JCXsKLQkJCXBvcCgpOwotCQl9Ci0JfQotCQotCXByaXZhdGUgdm9pZCBhbmFseXplTWV0aG9kICggSU1ldGhvZCBtZXRob2QsIEphdmFXZWJTZXJ2aWNlUnVsZVNldCBydWxlcyApCi0JdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbgotCXsKLQkJcnVsZXMudmlzaXRNZXRob2QobWV0aG9kLHBlYW51dFRyYWlsXyk7Ci0JCXB1c2gobWV0aG9kKTsKLQkJdHJ5Ci0JCXsKLQkJCUlUeXBlIHJldHVyblR5cGUgPSByZXNvbHZlcl8uZ2V0UmV0dXJuVHlwZShtZXRob2QpOwotCQkJYW5hbHl6ZURhdGFUeXBlKHJldHVyblR5cGUscnVsZXMpOwotCQkJSVR5cGVbXSBwYXJhbWV0ZXJUeXBlcyA9IHJlc29sdmVyXy5nZXRQYXJhbWV0ZXJUeXBlcyhtZXRob2QpOwotCQkJZm9yIChpbnQgcD0wOyBwPHBhcmFtZXRlclR5cGVzLmxlbmd0aDsgcCsrKQotCQkJewotCQkJCWFuYWx5emVEYXRhVHlwZShwYXJhbWV0ZXJUeXBlc1twXSxydWxlcyk7Ci0JCQl9Ci0JCQlJVHlwZVtdIGV4Y2VwdGlvblR5cGVzID0gcmVzb2x2ZXJfLmdldEV4Y2VwdGlvblR5cGVzKG1ldGhvZCk7Ci0JCQlmb3IgKGludCBlPTA7IGU8ZXhjZXB0aW9uVHlwZXMubGVuZ3RoOyBlKyspCi0JCQl7Ci0JCQkJYW5hbHl6ZUV4Y2VwdGlvblR5cGUoZXhjZXB0aW9uVHlwZXNbZV0scnVsZXMpOwotCQkJfQotCQl9Ci0JCWZpbmFsbHkKLQkJewotCQkJcG9wKCk7Ci0JCX0KLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIGFuYWx5emVEYXRhVHlwZSAoIElUeXBlIHR5cGUsIEphdmFXZWJTZXJ2aWNlUnVsZVNldCBydWxlcyApCi0JdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbgotCXsKLQkJaWYgKHR5cGUgIT0gbnVsbCAmJiAhcmVzb2x2ZXJfLmlzU3RhbmRhcmRUeXBlKHR5cGUuZ2V0RnVsbHlRdWFsaWZpZWROYW1lKCkpICYmICF2aXNpdGVkXy5jb250YWlucyh0eXBlLmdldEZ1bGx5UXVhbGlmaWVkTmFtZSgpKSkKLQkJewotCQkJcnVsZXMudmlzaXRDbGFzcyh0eXBlLHBlYW51dFRyYWlsXyk7CQkJCi0JCQl2aXNpdGVkXy5hZGQodHlwZS5nZXRGdWxseVF1YWxpZmllZE5hbWUoKSk7Ci0JCQlwdXNoKHR5cGUpOwotCQkJdHJ5Ci0JCQl7CQotCQkJCUlUeXBlW10gc3VwZXJDbGFzc2VzID0gcmVzb2x2ZXJfLmdldFN1cGVyQ2xhc3Nlcyh0eXBlKTsKLQkJCQlJRmllbGRbXSBmaWVsZHMgPSByZXNvbHZlcl8uZ2V0UHVibGljRmllbGRzKHR5cGUsc3VwZXJDbGFzc2VzKTsKLQkJCQlmb3IgKGludCBmPTA7IGY8ZmllbGRzLmxlbmd0aDsgZisrKQotCQkJCXsKLQkJCQkJYW5hbHl6ZUZpZWxkKGZpZWxkc1tmXSxydWxlcyk7Ci0JCQkJfQotCQkJCUlKYXZhQmVhblByb3BlcnR5W10gcHJvcGVydGllcyA9IHJlc29sdmVyXy5nZXRQdWJsaWNQcm9wZXJ0aWVzKHR5cGUsc3VwZXJDbGFzc2VzKTsKLQkJCQlmb3IgKGludCBwPTA7IHA8cHJvcGVydGllcy5sZW5ndGg7IHArKykKLQkJCQl7Ci0JCQkJCWFuYWx5emVQcm9wZXJ0eShwcm9wZXJ0aWVzW3BdLHJ1bGVzKTsKLQkJCQl9Ci0JCQl9Ci0JCQlmaW5hbGx5Ci0JCQl7Ci0JCQkJcG9wKCk7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIGFuYWx5emVGaWVsZCAoIElGaWVsZCBmaWVsZCwgSmF2YVdlYlNlcnZpY2VSdWxlU2V0IHJ1bGVzICkKLQl0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uCi0JewotCQlpZiAoZmllbGQgIT0gbnVsbCkKLQkJewotCQkJcnVsZXMudmlzaXRGaWVsZChmaWVsZCxwZWFudXRUcmFpbF8pOwotCQkJcHVzaChmaWVsZCk7Ci0JCQl0cnkKLQkJCXsKLQkJCQkvL1RPRE86IEdldCBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgZmllbGQgdHlwZQotCQkJCS8vYW5kIGRldGVybWluZSBpZiB3ZSBuZWVkIHRvIGJ1aWxkIGFuIElUeXBlCi0JCQkJLy9mb3IgaXQgYW5kIGFuYWx5emUgaXQuCi0JCQkJSVR5cGUgdHlwZSA9IHJlc29sdmVyXy5nZXRGaWVsZFR5cGUoZmllbGQpOwotCQkJCWFuYWx5emVEYXRhVHlwZSh0eXBlLHJ1bGVzKTsKLQkJCX0KLQkJCWZpbmFsbHkKLQkJCXsKLQkJCQlwb3AoKTsKLQkJCX0KLQkJfQotCX0KLQkKLQlwcml2YXRlIHZvaWQgYW5hbHl6ZVByb3BlcnR5ICggSUphdmFCZWFuUHJvcGVydHkgcHJvcGVydHksIEphdmFXZWJTZXJ2aWNlUnVsZVNldCBydWxlcyApCi0JdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbgotCXsKLQkJaWYgKHByb3BlcnR5ICE9IG51bGwpCi0JCXsKLQkJCXJ1bGVzLnZpc2l0UHJvcGVydHkocHJvcGVydHkscGVhbnV0VHJhaWxfKTsKLQkJCXB1c2gocHJvcGVydHkpOwotCQkJdHJ5Ci0JCQl7Ci0JCQkJSVR5cGUgdHlwZSA9IHJlc29sdmVyXy5nZXRQcm9wZXJ0eVR5cGUocHJvcGVydHkpOwotCQkJCWFuYWx5emVEYXRhVHlwZSh0eXBlLHJ1bGVzKTsKLQkJCX0KLQkJCWZpbmFsbHkKLQkJCXsKLQkJCQlwb3AoKTsKLQkJCX0KLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBhbmFseXplRXhjZXB0aW9uVHlwZSAoIElUeXBlIHR5cGUsIEphdmFXZWJTZXJ2aWNlUnVsZVNldCBydWxlcyApCi0JdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbgotCXsKLQkJaWYgKHR5cGUgIT0gbnVsbCAmJiAhcmVzb2x2ZXJfLmlzU3RhbmRhcmRUeXBlKHR5cGUuZ2V0RnVsbHlRdWFsaWZpZWROYW1lKCkpICYmICF2aXNpdGVkXy5jb250YWlucyh0eXBlLmdldEZ1bGx5UXVhbGlmaWVkTmFtZSgpKSkKLQkJewotCQkJcnVsZXMudmlzaXRFeGNlcHRpb24odHlwZSxwZWFudXRUcmFpbF8pOwotCQkJdmlzaXRlZF8uYWRkKHR5cGUuZ2V0RnVsbHlRdWFsaWZpZWROYW1lKCkpOwotCQkJcHVzaCh0eXBlKTsKLQkJCXRyeQotCQkJewotCQkJCS8vIFdlIHRydXN0IGphdmEubGFuZy5FeGNlcHRpb24vVGhyb3dhYmxlIGFzIHN1cGVyY2xhc3NlcwotCQkJCS8vIGZvciBzZXJ2aWNlIHNwZWNpZmljIGV4Y2VwdGlvbiBjbGFzc2VzLCB0aGVyZWZvcmUgd2UgZG8KLQkJCQkvLyBub3QgdHJ5IHRvIGFuYWx5emUgdGhlaXIgcHJvcGVydGllcyAoc29tZSBvZiB3aGljaCB3b3VsZAotCQkJCS8vIG90aGVyd2lzZSB2aW9sYXRlIEpBWC1SUEMncyBydWxlcyBhbnl3YXlzKS4KLQkJCQlJVHlwZVtdIHN1cGVyQ2xhc3NlcyA9IHJlc29sdmVyXy5nZXRTdXBlckNsYXNzZXModHlwZSwiamF2YS5sYW5nLkV4Y2VwdGlvbiIpOwotCQkJCUlKYXZhQmVhblByb3BlcnR5W10gcHJvcGVydGllcyA9IHJlc29sdmVyXy5nZXRQdWJsaWNQcm9wZXJ0aWVzKHR5cGUsc3VwZXJDbGFzc2VzKTsKLQkJCQlmb3IgKGludCBwPTA7IHA8cHJvcGVydGllcy5sZW5ndGg7IHArKykKLQkJCQl7Ci0JCQkJCWFuYWx5emVQcm9wZXJ0eShwcm9wZXJ0aWVzW3BdLHJ1bGVzKTsKLQkJCQl9Ci0JCQl9Ci0JCQlmaW5hbGx5Ci0JCQl7Ci0JCQkJcG9wKCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSUphdmFXZWJTZXJ2aWNlUnVsZUVuZ2luZSNnZXRKRFRSZXNvbHZlcigpCi0JICovCi0JcHVibGljIEpEVFJlc29sdmVyIGdldEpEVFJlc29sdmVyICgpCi0JewotCQlyZXR1cm4gcmVzb2x2ZXJfOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSUphdmFXZWJTZXJ2aWNlUnVsZUVuZ2luZSNnZXRQcm9ncmVzc01vbml0b3IoKQotCSAqLwotCXB1YmxpYyBJUHJvZ3Jlc3NNb25pdG9yIGdldFByb2dyZXNzTW9uaXRvciAoKQotCXsKLQkJcmV0dXJuIHByb2dyZXNzTW9uaXRvcl87Ci0JfQotCQotCS8qCi0JICogUHVzaGVzIGEgcGVhbnV0IG9udG8gdGhlIHBlYW51dCB0cmFpbC4KLQkgKi8KLQlwcml2YXRlIHZvaWQgcHVzaCAoIE9iamVjdCBwZWFudXQgKQotCXsKLQkJcGVhbnV0VHJhaWxfLnB1c2gocGVhbnV0KTsKLQl9Ci0JCi0JLyoKLQkgKiBQb3BzIGEgcGVhbnV0IG9mZiB0aGUgcGVhbnV0IHRyYWlsLiAKLQkgKi8KLQlwcml2YXRlIHZvaWQgcG9wICgpCi0JewotCQlwZWFudXRUcmFpbF8ucG9wKCk7Ci0JfQotCQotCS8qCi0JICogVGhlIEpEVFJlc29sdmVyIHVzZWQgYnkgdGhpcyBhbmFseXplci4KLQkgKi8KLQlwcml2YXRlIEpEVFJlc29sdmVyIHJlc29sdmVyXzsKLQkKLQkvKgotCSAqIFRoZSBwcm9ncmVzcyBtb25pdG9yIHVzZWQgYnkgdGhpcyBhbmFseXplci4gCi0JICovCi0JcHJpdmF0ZSBJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcl87Ci0JCi0JLyoKLQkgKiBUaGlzIHNldCBrZWVwcyB0cmFjayBvZiB0aGUgZnVsbHkgcXVhbGlmaWVkIG5hbWVzIG9mCi0JICogY2xhc3NlcyB3ZSBoYXZlIHZpc2l0ZWQgc28gdGhhdCB3ZSBkb24ndCB2aXNpdCB0aGUgc2FtZQotCSAqIHNlcnZpY2UgY2xhc3MsIHZhbHVlIHR5cGUgb3IgZXhjZXB0aW9uIGNsYXNzIG1vcmUgdGhhbiBvbmNlLgotCSAqLwotCXByaXZhdGUgU2V0IHZpc2l0ZWRfOwotCi0JLyoKLQkgKiBUaGlzIHN0YWNrIGtlZXBzIGEgdHJhaWwgb2YgSkRUIG9iamVjdHMgYmFjayB0byB0aGUKLQkgKiBzZXJ2aWNlIGNsYXNzIHdlIGJlZ2FuIHdpdGguIFRoaXMgY2FuIGJlIHVzZWZ1bCB0bwotCSAqIHZpc2l0b3JzIHRoYXQgbmVlZCB0byBpbnNwZWN0IHRoZSBKRFQgZWxlbWVudHMgdGhhdAotCSAqIGVuY2xvc2UgdGhlIGN1cnJlbnRseSB2aXNpdGVkIGVsZW1lbnQuCi0JICovCi0JcHJpdmF0ZSBTdGFjayBwZWFudXRUcmFpbF87Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL0pEVFJlc29sdmVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL0pEVFJlc29sdmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkYzU3NDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9KRFRSZXNvbHZlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODgzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQxOSAgIDEzMjkwNSBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICogMjAwNjA3MTEgICAxNDk0MTEgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkKLSAqIDIwMDcwMTAyICAgMTk2MzcxIHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZTsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5GbGFnczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JRmllbGQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklKYXZhUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JTWV0aG9kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklUeXBlSGllcmFyY2h5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFNb2RlbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5TaWduYXR1cmU7Ci0KLS8qKgotICogQGF1dGhvciBjYnJlYWxleQotICogQSBKRFRSZXNvbHZlciBwcm92aWRlcyBzZXZlcmFsIGNvbnZlbmllbmNlIG1ldGhvZHMgZm9yCi0gKiBuYXZpZ2F0aW5nIHJlZmVyZW5jZXMgYmV0d2VlbiBKYXZhIGNsYXNzZXMsIG1ldGhvZHMsCi0gKiBmaWVsZHMgYW5kIHByb3BlcnRpZXMuIEEgSkRUUmVzb2x2ZXIgaXMgY29uc3RydWN0ZWQKLSAqIGZvciBhIEphdmEgcHJvamVjdCB3aG9zZSBlZmZlY3RpdmUgY2xhc3NwYXRoIHdpbGwKLSAqIGdvdmVybiB0aGUgc2NvcGUgb2Ygc2VhcmNoIG9wZXJhdGlvbnMgcGVyZm9ybWVkIGJ5IHRoZQotICogSkRUUmVzb2x2ZXIgd2hlbmV2ZXIgaXQgbmVlZHMgdG8gY29udmVydCBhIHNpZ25hdHVyZQotICogaW50byBhIEpEVCBJVHlwZSBvYmplY3QuCi0gKi8KLXB1YmxpYyBjbGFzcyBKRFRSZXNvbHZlcgotewotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgSkRUUmVzb2x2ZXIgZm9yIHRoZSBnaXZlbiBwcm9qZWN0LgotCSAqIEBwYXJhbSBwcm9qZWN0IFRoZSBwcm9qZWN0IHByb3ZpZGluZyB0aGUgY29udGV4dAotCSAqIEBwYXJhbSBtb25pdG9yIFRoZSBwcm9ncmVzcyBtb25pdG9yIGZvciB0aGlzIHJlc29sdmVyCi0JICogdG8gdXNlLCBvciBudWxsIGlmIHByb2dyZXNzIG1vbml0b3JpbmcgaXMgbm90IGRlc2lyZWQuCi0JICogd2l0aGluIHdoaWNoIHRoaXMgcmVzb2x2ZXIgd2lsbCBzZWFyY2ggZm9yIGNsYXNzZXMuCi0JICovCi0JcHVibGljIEpEVFJlc29sdmVyICggSVByb2plY3QgcHJvamVjdCwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkKLQl7Ci0JCWphdmFQcm9qZWN0XyA9IEphdmFDb3JlLmNyZWF0ZShwcm9qZWN0KTsKLQkJbW9uaXRvcl8gPSBtb25pdG9yOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRydWUgaWYgYW5kIG9ubHkgaWYgdGhlIGdpdmVuIEpEVCBJVHlwZSBpcyBhbiBpbnRlcmZhY2UuCi0JICogQHBhcmFtIGpkdFR5cGUgVGhlIHR5cGUgdG8gYW5hbHl6ZS4KLQkgKiBAcmV0dXJuIFRydWUgaWYgYW5kIG9ubHkgaWYgdGhlIGdpdmVuIEpEVCBJVHlwZSBpcyBhbiBpbnRlcmZhY2UuCi0JICogQHRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24gSWYgdGhlIEpEVCBtb2RlbCBmYWlscyB0bwotCSAqIGFuYWx5emUgdGhlIGdpdmVuIHR5cGUuCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNJbnRlcmZhY2UgKCBJVHlwZSBqZHRUeXBlICkKLQl0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uCi0JewotCQlyZXR1cm4gamR0VHlwZS5pc0ludGVyZmFjZSgpOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRydWUgaWYgYW5kIG9ubHkgaWYgdGhlIGdpdmVuIEpEVCBJVHlwZSBpcyBhbiBhYnN0cmFjdCBjbGFzcy4KLQkgKiBAcGFyYW0gamR0VHlwZSBUaGUgdHlwZSB0byBhbmFseXplLgotCSAqIEByZXR1cm4gVHJ1ZSBpZiBhbmQgb25seSBpZiB0aGUgZ2l2ZW4gSkRUIElUeXBlIGlzIGFuIGFic3RyYWN0IGNsYXNzLgotCSAqIEB0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uIElmIHRoZSBKRFQgbW9kZWwgZmFpbHMgdG8KLQkgKiBhbmFseXplIHRoZSBnaXZlbiB0eXBlLgotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzQWJzdHJhY3QgKCBJVHlwZSBqZHRUeXBlICkKLQl0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uCi0JewotCQlyZXR1cm4gRmxhZ3MuaXNBYnN0cmFjdChqZHRUeXBlLmdldEZsYWdzKCkpOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRydWUgaWYgYW5kIG9ubHkgaWYgaW5zdGFuY2VzIG9mIHRoZSBnaXZlbiBKRFQgSVR5cGUKLQkgKiBjYW4gYmUgaW5zdGFudGlhdGVkIHZpYSBhIHB1YmxpYyBkZWZhdWx0IGNvbnN0cnVjdG9yLiBUaGUgY2xhc3MKLQkgKiBtdXN0IGhhdmUgYW4gZXhwbGljaXQgcHVibGljIGRlZmF1bHQgY29uc3RydWN0b3IsIG9yIGhhdmUgbm8KLQkgKiBleHBsaWNpdCBjb25zdHJ1Y3RvcnMgYXQgYWxsIHRvIG1lZXQgdGhpcyBjcml0ZXJpYS4KLQkgKiBAcGFyYW0gamR0VHlwZSBUaGUgdHlwZSB0byBhbmFseXplLgotCSAqIEByZXR1cm4gVHJ1ZSBpZiBhbmQgb25seSBpZiBpbnN0YW5jZXMgb2YgdGhlIHR5cGUgYXJlCi0JICogcHVibGljIGRlZmF1bHQgY29uc3RydWN0YWJsZS4KLQkgKiBAdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbiBJZiB0aGUgSkRUIG1vZGVsIGZhaWxzIHRvCi0JICogYW5hbHl6ZSB0aGUgZ2l2ZW4gdHlwZS4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc0NvbnN0cnVjdGFibGUgKCBJVHlwZSBqZHRUeXBlICkKLQl0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uCi0JewotCQlJTWV0aG9kW10gbWV0aG9kcyA9IGpkdFR5cGUuZ2V0TWV0aG9kcygpOwotCQlpbnQgbnVtYmVyT2ZDb25zdHJ1Y3RvcnMgPSAwOwotCQlmb3IgKGludCBtPTA7IG08bWV0aG9kcy5sZW5ndGg7IG0rKykKLQkJewotCQkJaWYgKG1ldGhvZHNbbV0uaXNDb25zdHJ1Y3RvcigpKQotCQkJewotCQkJCW51bWJlck9mQ29uc3RydWN0b3JzKys7Ci0JCQkJaWYgKG1ldGhvZHNbbV0uZ2V0TnVtYmVyT2ZQYXJhbWV0ZXJzKCkgPT0gMCAmJiBGbGFncy5pc1B1YmxpYyhtZXRob2RzW21dLmdldEZsYWdzKCkpKQotCQkJCXsKLQkJCQkJcmV0dXJuIHRydWU7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBudW1iZXJPZkNvbnN0cnVjdG9ycyA9PSAwOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRydWUgaWYgYW5kIG9ubHkgaWYgdGhlIGdpdmVuIGZ1bGx5IHF1YWxpZmllZAotCSAqIHR5cGUgbmFtZSBpcyBhIHR5cGUgZnJvbSB0aGUgc3RhbmRhcmQgSkRLLCB0aGF0IGlzLAotCSAqIGlmIHRoZSBnaXZlbiB0eXBlIG5hbWUgYmVsb25ncyB1bmRlciB0aGUgImphdmEiIG9yCi0JICogImphdmF4IiBwYWNrYWdlcy4KLQkgKiBAcGFyYW0gdHlwZU5hbWUgVGhlIG5hbWUgb2YgdGhlIHR5cGUgdG8gY2hlY2suCi0JICogQHJldHVybiBUcnVlIGlmIGFuZCBvbmx5IGlmIHRoZSB0eXBlIGlzIGEgbm9uLXByaW1pdGl2ZSwKLQkgKiBKYXZhIHN0YW5kYXJkIHR5cGUuCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNTdGFuZGFyZFR5cGUgKCBTdHJpbmcgdHlwZU5hbWUgKQotCXsKLQkJcmV0dXJuIHR5cGVOYW1lLnN0YXJ0c1dpdGgoImphdmEuIikgfHwgdHlwZU5hbWUuc3RhcnRzV2l0aCgiamF2YXguIik7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGUgZ2l2ZW4gdHlwZSBuYW1lIGlzIGEKLQkgKiBKYXZhIHByaW1pdGl2ZSB0eXBlLgotCSAqIEBwYXJhbSB0eXBlTmFtZSBUaGUgbmFtZSBvZiB0aGUgdHlwZSB0byBjaGVjay4KLQkgKiBAcmV0dXJuIFRydWUgaWYgYW5kIG9ubHkgaWYgdGhlIHR5cGUgaXMgYSBKYXZhIHByaW1pdGl2ZSB0eXBlLgotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzUHJpbWl0aXZlVHlwZSAoIFN0cmluZyB0eXBlTmFtZSApCi0JewotCQlmb3IgKGludCBpPTA7IGk8cHJpbWl0aXZlVHlwZXNfLmxlbmd0aDsgaSsrKQotCQl7Ci0JCQlpZiAocHJpbWl0aXZlVHlwZXNfW2ldLmVxdWFscyh0eXBlTmFtZSkpCi0JCQl7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRydWUgaWYgYW5kIG9ubHkgaWYgdGhlIGdpdmVuIGZ1bGx5IHF1YWxpZmllZAotCSAqIHR5cGUgbmFtZSBpcyBhIEphdmEgd3JhcHBlciB0eXBlLgotCSAqIEBwYXJhbSB0eXBlTmFtZSBUaGUgbmFtZSBvZiB0aGUgdHlwZSB0byBjaGVjay4KLQkgKiBAcmV0dXJuIFRydWUgaWYgYW5kIG9ubHkgaWYgdGhlIHR5cGUgaXMgYSBKYXZhIHdyYXBwZXIgdHlwZS4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc1dyYXBwZXJUeXBlICggU3RyaW5nIHR5cGVOYW1lICkKLQl7Ci0JCWZvciAoaW50IGk9MDsgaTx3cmFwcGVyVHlwZXNfLmxlbmd0aDsgaSsrKQotCQl7Ci0JCQlpZiAod3JhcHBlclR5cGVzX1tpXS5lcXVhbHModHlwZU5hbWUpKQotCQkJewotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCQotCS8qKgotCSAqIFJldHVybnMgdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGUgZ2l2ZW4gZnVsbHkgcXVhbGlmaWVkCi0JICogdHlwZSBuYW1lIGlzIGEgSmF2YSBwcmltaXRpdmUgb3Igc3RhbmRhcmQgdHlwZSBzdXBwb3J0ZWQKLQkgKiBieSB0aGUgSkFYLVJQQyBzcGVjaWZpY2F0aW9uLgotCSAqIEBwYXJhbSB0eXBlTmFtZSBUaGUgbmFtZSBvZiB0aGUgdHlwZSB0byBjaGVjay4KLQkgKiBAcmV0dXJuIFRydWUgaWYgYW5kIG9ubHkgaWYgdGhlIHR5cGUgaXMgYSBKYXZhIHdyYXBwZXIgdHlwZS4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc0pBWFJQQ1N0YW5kYXJkVHlwZSAoIFN0cmluZyB0eXBlTmFtZSApCi0JewotCQlmb3IgKGludCBpPTA7IGk8amF4cnBjVHlwZXNfLmxlbmd0aDsgaSsrKQotCQl7Ci0JCQlpZiAoamF4cnBjVHlwZXNfW2ldLmVxdWFscyh0eXBlTmFtZSkpCi0JCQl7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCX0KLQkJaWYgKGlzV3JhcHBlclR5cGUodHlwZU5hbWUpICYmICEiamF2YS5sYW5nLkNoYXJhY3RlciIuZXF1YWxzKHR5cGVOYW1lKSkKLQkJewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJaWYgKGlzUHJpbWl0aXZlVHlwZSh0eXBlTmFtZSkgJiYgISJjaGFyIi5lcXVhbHModHlwZU5hbWUpKQotCQl7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCQkKLQkvKioKLQkgKiBSZXR1cm5zIGFuIGFycmF5IG9mIHplcm8gb3IgbW9yZSBKRFQgSVR5cGUgb2JqZWN0cwotCSAqIGZvciB0aGUgcHVibGljIGZpZWxkcyBiZWxvbmdpbmcgdG8gdGhlIGdpdmVuIHR5cGUKLQkgKiBAcGFyYW0gamR0VHlwZSBUaGUgdHlwZSB0byBhbmFseXplLgotCSAqIEBwYXJhbSBqZHRTdXBlclR5cGVzIEFueSBzdXBlcnR5cGVzIHRvIGFuYWx5emUsCi0JICogb3IgbnVsbCB0byBhbmFseXplIG9ubHkgdGhlIDxjb2RlPmpkdFR5cGU8L2NvZGU+LgotCSAqIEByZXR1cm4gQW4gYXJyYXkgb2YgemVybyBvciBtb3JlIHB1YmxpYyBmaWVsZCB0eXBlcy4KLQkgKiBAdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbiBJZiB0aGUgSkRUIGVuZ2luZSBmYWlscyB0bwotCSAqIGFuYWx5emUgdGhlIGdpdmVuIHR5cGVzIHRvIHNhdGlzZnkgdGhpcyByZXF1ZXN0LgotCSAqLwotCXB1YmxpYyBJRmllbGRbXSBnZXRQdWJsaWNGaWVsZHMgKCBJVHlwZSBqZHRUeXBlLCBJVHlwZVtdIGpkdFN1cGVyQ2xhc3NlcyApCi0JdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbgotCXsKLQkJTGlzdCBmaWVsZHNMaXN0ID0gbmV3IExpbmtlZExpc3QoKTsKLQkJaGFydmVzdFB1YmxpY0ZpZWxkcyhqZHRUeXBlLGZpZWxkc0xpc3QpOwotCQlpZiAoamR0U3VwZXJDbGFzc2VzICE9IG51bGwpCi0JCXsKLQkJCWZvciAoaW50IHQ9MDsgdDxqZHRTdXBlckNsYXNzZXMubGVuZ3RoOyB0KyspCi0JCQl7Ci0JCQkJaGFydmVzdFB1YmxpY0ZpZWxkcyhqZHRTdXBlckNsYXNzZXNbdF0sZmllbGRzTGlzdCk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIChJRmllbGRbXSlmaWVsZHNMaXN0LnRvQXJyYXkobmV3IElGaWVsZFswXSk7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgYW4gYXJyYXkgb2YgemVybyBvciBtb3JlIEpEVCBJTWV0aG9kIG9iamVjdHMKLQkgKiBmb3IgdGhlIHB1YmxpYyBtZXRob2RzIGJlbG9uZ2luZyB0byB0aGUgZ2l2ZW4gdHlwZS4KLQkgKiBAcGFyYW0gamR0VHlwZSBUaGUgdHlwZSB0byBhbmFseXplLgotCSAqIEBwYXJhbSBqZHRTdXBlclR5cGVzIEFueSBzdXBlcnR5cGVzIHRvIGFuYWx5emUsCi0JICogb3IgbnVsbCB0byBhbmFseXplIG9ubHkgdGhlIDxjb2RlPmpkdFR5cGU8L2NvZGU+LgotCSAqIEByZXR1cm4gQW4gYXJyYXkgb2YgemVybyBvciBtb3JlIHB1YmxpYyBtZXRob2RzLgotCSAqIEB0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uIElmIHRoZSBKRFQgZW5naW5lIGZhaWxzIHRvCi0JICogYW5hbHl6ZSB0aGUgZ2l2ZW4gdHlwZXMgdG8gc2F0aXNmeSB0aGlzIHJlcXVlc3QuCi0JICovCi0JcHVibGljIElNZXRob2RbXSBnZXRQdWJsaWNNZXRob2RzICggSVR5cGUgamR0VHlwZSwgSVR5cGVbXSBqZHRTdXBlckNsYXNzZXMgKQotCXRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24KLQl7Ci0JCUxpc3QgbWV0aG9kc0xpc3QgPSBuZXcgTGlua2VkTGlzdCgpOwotCQloYXJ2ZXN0UHVibGljTWV0aG9kcyhqZHRUeXBlLG1ldGhvZHNMaXN0KTsKLQkJaWYgKGpkdFN1cGVyQ2xhc3NlcyAhPSBudWxsKQotCQl7Ci0JCQlmb3IgKGludCB0PTA7IHQ8amR0U3VwZXJDbGFzc2VzLmxlbmd0aDsgdCsrKQotCQkJewotCQkJCWhhcnZlc3RQdWJsaWNNZXRob2RzKGpkdFN1cGVyQ2xhc3Nlc1t0XSxtZXRob2RzTGlzdCk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIChJTWV0aG9kW10pbWV0aG9kc0xpc3QudG9BcnJheShuZXcgSU1ldGhvZFswXSk7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgYW4gYXJyYXkgb2YgemVybyBvciBtb3JlIEpEVCBJVHlwZSBvYmplY3RzCi0JICogZm9yIHRoZSBwdWJsaWMgcHJvcGVydGllcyAoZ2V0dGVycyBhbmQvb3Igc2V0dGVycykKLQkgKiBiZWxvbmdpbmcgdG8gdGhlIGdpdmVuIHR5cGUuCi0JICogQHBhcmFtIGpkdFR5cGUgVGhlIHR5cGUgdG8gYW5hbHl6ZS4KLQkgKiBAcGFyYW0gamR0U3VwZXJUeXBlcyBBbnkgc3VwZXJ0eXBlcyB0byBhbmFseXplLAotCSAqIG9yIG51bGwgdG8gYW5hbHl6ZSBvbmx5IHRoZSA8Y29kZT5qZHRUeXBlPC9jb2RlPi4KLQkgKiBAcmV0dXJuIEFuIGFycmF5IG9mIHplcm8gb3IgbW9yZSBwdWJsaWMgcHJvcGVydHkgdHlwZXMuCi0JICogQHRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24gSWYgdGhlIEpEVCBlbmdpbmUgZmFpbHMgdG8KLQkgKiBhbmFseXplIHRoZSBnaXZlbiB0eXBlcyB0byBzYXRpc2Z5IHRoaXMgcmVxdWVzdC4KLQkgKi8KLQlwdWJsaWMgSUphdmFCZWFuUHJvcGVydHlbXSBnZXRQdWJsaWNQcm9wZXJ0aWVzICggSVR5cGUgamR0VHlwZSwgSVR5cGVbXSBqZHRTdXBlckNsYXNzZXMgKQotCXRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24KLQl7Ci0JCUlNZXRob2RbXSBtZXRob2RzID0gZ2V0UHVibGljTWV0aG9kcyhqZHRUeXBlLGpkdFN1cGVyQ2xhc3Nlcyk7Ci0JCU1hcCBwcm9wZXJ0aWVzID0gbmV3IEhhc2hNYXAoKTsKLQkJZm9yIChpbnQgbT0wOyBtPG1ldGhvZHMubGVuZ3RoOyBtKyspCi0JCXsKLQkJCVN0cmluZyBuYW1lID0gZ2V0R2V0dGVyTmFtZShtZXRob2RzW21dKTsKLQkJCWlmIChuYW1lICE9IG51bGwpCi0JCQl7Ci0JCQkJSmF2YUJlYW5Qcm9wZXJ0eSBwcm9wZXJ0eSA9IChKYXZhQmVhblByb3BlcnR5KXByb3BlcnRpZXMuZ2V0KG5hbWUpOwotCQkJCWlmIChwcm9wZXJ0eSA9PSBudWxsKQotCQkJCXsKLQkJCQkJcHJvcGVydHkgPSBuZXcgSmF2YUJlYW5Qcm9wZXJ0eSgpOwotCQkJCQlwcm9wZXJ0eS5zZXROYW1lKG5hbWUpOwotCQkJCQlwcm9wZXJ0aWVzLnB1dChuYW1lLHByb3BlcnR5KTsKLQkJCQl9Ci0JCQkJcHJvcGVydHkuc2V0R2V0dGVyKG1ldGhvZHNbbV0pOwotCQkJfQotCQkJZWxzZQotCQkJewotCQkJCW5hbWUgPSBnZXRTZXR0ZXJOYW1lKG1ldGhvZHNbbV0pOwotCQkJCWlmIChuYW1lICE9IG51bGwpCi0JCQkJewotCQkJCQlKYXZhQmVhblByb3BlcnR5IHByb3BlcnR5ID0gKEphdmFCZWFuUHJvcGVydHkpcHJvcGVydGllcy5nZXQobmFtZSk7Ci0JCQkJCWlmIChwcm9wZXJ0eSA9PSBudWxsKQotCQkJCQl7Ci0JCQkJCQlwcm9wZXJ0eSA9IG5ldyBKYXZhQmVhblByb3BlcnR5KCk7Ci0JCQkJCQlwcm9wZXJ0eS5zZXROYW1lKG5hbWUpOwotCQkJCQkJcHJvcGVydGllcy5wdXQobmFtZSxwcm9wZXJ0eSk7Ci0JCQkJCX0KLQkJCQkJcHJvcGVydHkuc2V0U2V0dGVyKG1ldGhvZHNbbV0pOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gKElKYXZhQmVhblByb3BlcnR5W10pcHJvcGVydGllcy52YWx1ZXMoKS50b0FycmF5KG5ldyBKYXZhQmVhblByb3BlcnR5WzBdKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgSkRUIElUeXBlIG9iamVjdCBmb3IgdGhlIGdpdmVuIGZpZWxkLgotCSAqIEBwYXJhbSBqZHRGaWVsZCBUaGUgZmllbGQgdG8gYW5hbHl6ZS4KLQkgKiBAcmV0dXJuIFRoZSBmaWVsZCB0eXBlLgotCSAqIEB0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uIElmIHRoZSBKRFQgZW5naW5lIGZhaWxzIHRvCi0JICogYW5hbHl6ZSB0aGUgZ2l2ZW4gZmllbGQgdG8gc2F0aXNmeSB0aGlzIHJlcXVlc3QuCi0JICovCi0JcHVibGljIElUeXBlIGdldEZpZWxkVHlwZSAoIElGaWVsZCBqZHRGaWVsZCApCi0JdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbgotCXsKLQkJSUphdmFFbGVtZW50IGVsZW0gPSBqZHRGaWVsZC5nZXRBbmNlc3RvcihJSmF2YUVsZW1lbnQuVFlQRSk7Ci0JCUlUeXBlIGFuY2VzdG9yID0gZWxlbSBpbnN0YW5jZW9mIElUeXBlID8gKElUeXBlKWVsZW0gOiBudWxsOwotCQlTdHJpbmcgc2lnbmF0dXJlID0gamR0RmllbGQuZ2V0VHlwZVNpZ25hdHVyZSgpOwotCQlTdHJpbmcgdHlwZU5hbWUgPSBnZXRUeXBlTmFtZUZyb21TaWduYXR1cmUoc2lnbmF0dXJlKTsKLQkJcmV0dXJuIGZpbmRUeXBlKHR5cGVOYW1lLGFuY2VzdG9yKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdHlwZSBuYW1lIGZvciB0aGUgZ2l2ZW4gZmllbGQuCi0JICogQHBhcmFtIGpkdEZpZWxkIFRoZSBmaWVsZCB0byBhbmFseXplLgotCSAqIEByZXR1cm4gVGhlIGZpZWxkIHR5cGUgbmFtZS4KLQkgKiBAdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbiBJZiB0aGUgSkRUIGVuZ2luZSBmYWlscyB0bwotCSAqIGFuYWx5emUgdGhlIGdpdmVuIGZpZWxkIHRvIHNhdGlzZnkgdGhpcyByZXF1ZXN0LgotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0RmllbGRUeXBlTmFtZSAoIElGaWVsZCBqZHRGaWVsZCApCi0JdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbgotCXsKLQkJSUphdmFFbGVtZW50IGVsZW0gPSBqZHRGaWVsZC5nZXRBbmNlc3RvcihJSmF2YUVsZW1lbnQuVFlQRSk7Ci0JCUlUeXBlIGFuY2VzdG9yID0gZWxlbSBpbnN0YW5jZW9mIElUeXBlID8gKElUeXBlKWVsZW0gOiBudWxsOwotCQlTdHJpbmcgc2lnbmF0dXJlID0gamR0RmllbGQuZ2V0VHlwZVNpZ25hdHVyZSgpOwotCQlTdHJpbmcgdHlwZU5hbWUgPSBnZXRUeXBlTmFtZUZyb21TaWduYXR1cmUoc2lnbmF0dXJlKTsKLQkJcmV0dXJuIHJlc29sdmVUeXBlKHR5cGVOYW1lLGFuY2VzdG9yKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgSkRUIElUeXBlIG9iamVjdCBmb3IgdGhlIGdpdmVuIGJlYW4gcHJvcGVydHkuCi0JICogQHBhcmFtIGphdmFCZWFuUHJvcGVydHkgVGhlIGJlYW4gcHJvcGVydHkgdG8gYW5hbHl6ZS4KLQkgKiBAcmV0dXJuIFRoZSBwcm9wZXJ0eSB0eXBlLgotCSAqIEB0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uIElmIHRoZSBKRFQgZW5naW5lIGZhaWxzIHRvCi0JICogYW5hbHl6ZSB0aGUgZ2l2ZW4gYmVhbiBwcm9wZXJ0eSB0byBzYXRpc2Z5IHRoaXMgcmVxdWVzdC4KLQkgKi8KLQlwdWJsaWMgSVR5cGUgZ2V0UHJvcGVydHlUeXBlICggSUphdmFCZWFuUHJvcGVydHkgamF2YUJlYW5Qcm9wZXJ0eSApCi0JdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbgotCXsKLQkJSU1ldGhvZCBtZXRob2QgPSBqYXZhQmVhblByb3BlcnR5LmdldEdldHRlcigpOwotCQlpZiAobWV0aG9kICE9IG51bGwpCi0JCXsKLQkJCXJldHVybiBnZXRSZXR1cm5UeXBlKG1ldGhvZCk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQltZXRob2QgPSBqYXZhQmVhblByb3BlcnR5LmdldFNldHRlcigpOwotCQkJaWYgKG1ldGhvZCAhPSBudWxsKQotCQkJewotCQkJCUlUeXBlW10gcGFyYW1ldGVycyA9IGdldFBhcmFtZXRlclR5cGVzKG1ldGhvZCk7Ci0JCQkJaWYgKHBhcmFtZXRlcnMubGVuZ3RoID4gMCkKLQkJCQl7Ci0JCQkJCS8vCi0JCQkJCS8vIEl0J3MgdGhlIGxhc3QgcGFyYW1ldGVyJ3MgdHlwZSB3ZSB3YW50LAotCQkJCQkvLyBmb3IgaW5kZXhlZCBvciBub24taW5kZXhlZCBzZXR0ZXJzLgotCQkJCQkvLwotCQkJCQlyZXR1cm4gcGFyYW1ldGVyc1twYXJhbWV0ZXJzLmxlbmd0aC0xXTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIHR5cGUgbmFtZSBmb3IgdGhlIGdpdmVuIGJlYW4gcHJvcGVydHkuCi0JICogQHBhcmFtIGphdmFCZWFuUHJvcGVydHkgVGhlIGJlYW4gcHJvcGVydHkgdG8gYW5hbHl6ZS4KLQkgKiBAcmV0dXJuIFRoZSBwcm9wZXJ0eSB0eXBlIG5hbWUuCi0JICogQHRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24gSWYgdGhlIEpEVCBlbmdpbmUgZmFpbHMgdG8KLQkgKiBhbmFseXplIHRoZSBnaXZlbiBiZWFuIHByb3BlcnR5IHRvIHNhdGlzZnkgdGhpcyByZXF1ZXN0LgotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHlUeXBlTmFtZSAoIElKYXZhQmVhblByb3BlcnR5IGphdmFCZWFuUHJvcGVydHkgKQotCXRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24KLQl7Ci0JCUlNZXRob2QgbWV0aG9kID0gamF2YUJlYW5Qcm9wZXJ0eS5nZXRHZXR0ZXIoKTsKLQkJaWYgKG1ldGhvZCAhPSBudWxsKQotCQl7Ci0JCQlyZXR1cm4gZ2V0UmV0dXJuVHlwZU5hbWUobWV0aG9kKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCW1ldGhvZCA9IGphdmFCZWFuUHJvcGVydHkuZ2V0U2V0dGVyKCk7Ci0JCQlpZiAobWV0aG9kICE9IG51bGwpCi0JCQl7Ci0JCQkJU3RyaW5nW10gcGFyYW1ldGVyVHlwZU5hbWVzID0gZ2V0UGFyYW1ldGVyVHlwZU5hbWVzKG1ldGhvZCk7Ci0JCQkJaWYgKHBhcmFtZXRlclR5cGVOYW1lcy5sZW5ndGggPiAwKQotCQkJCXsKLQkJCQkJcmV0dXJuIHBhcmFtZXRlclR5cGVOYW1lc1swXTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIEpEVCBJVHlwZSBvYmplY3QgZm9yIHRoZSByZXR1cm4gdHlwZQotCSAqIG9mIHRoZSBnaXZlbiBtZXRob2QsIG9yIG51bGwgaWYgdGhlIG1ldGhvZCBpcyB2b2lkLgotCSAqIEBwYXJhbSBqZHRNZXRob2QgVGhlIG1ldGhvZCB0byBhbmFseXplLgotCSAqIEByZXR1cm4gVGhlIG1ldGhvZCByZXR1cm4gdHlwZSwgb3IgbnVsbCBpZiBub25lLgotCSAqIEB0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uIElmIHRoZSBKRFQgZW5naW5lIGZhaWxzIHRvCi0JICogYW5hbHl6ZSB0aGUgZ2l2ZW4gbWV0aG9kIHRvIHNhdGlzZnkgdGhpcyByZXF1ZXN0LgotCSAqLwotCXB1YmxpYyBJVHlwZSBnZXRSZXR1cm5UeXBlICggSU1ldGhvZCBqZHRNZXRob2QgKQotCXRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24KLQl7Ci0JCUlKYXZhRWxlbWVudCBlbGVtID0gamR0TWV0aG9kLmdldEFuY2VzdG9yKElKYXZhRWxlbWVudC5UWVBFKTsKLQkJSVR5cGUgYW5jZXN0b3IgPSBlbGVtIGluc3RhbmNlb2YgSVR5cGUgPyAoSVR5cGUpZWxlbSA6IG51bGw7Ci0JCVN0cmluZyBzaWduYXR1cmUgPSBqZHRNZXRob2QuZ2V0UmV0dXJuVHlwZSgpOwotCQlTdHJpbmcgdHlwZU5hbWUgPSBnZXRUeXBlTmFtZUZyb21TaWduYXR1cmUoc2lnbmF0dXJlKTsKLQkJcmV0dXJuIGZpbmRUeXBlKHR5cGVOYW1lLGFuY2VzdG9yKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdHlwZSBuYW1lIGZvciB0aGUgcmV0dXJuIHR5cGUKLQkgKiBvZiB0aGUgZ2l2ZW4gbWV0aG9kLCBvciBudWxsIGlmIHRoZSBtZXRob2QgaXMgdm9pZC4KLQkgKiBAcGFyYW0gamR0TWV0aG9kIFRoZSBtZXRob2QgdG8gYW5hbHl6ZS4KLQkgKiBAcmV0dXJuIFRoZSBtZXRob2QgcmV0dXJuIHR5cGUgbmFtZSwgb3IgbnVsbCBpZiBub25lLgotCSAqIEB0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uIElmIHRoZSBKRFQgZW5naW5lIGZhaWxzIHRvCi0JICogYW5hbHl6ZSB0aGUgZ2l2ZW4gbWV0aG9kIHRvIHNhdGlzZnkgdGhpcyByZXF1ZXN0LgotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0UmV0dXJuVHlwZU5hbWUgKCBJTWV0aG9kIGpkdE1ldGhvZCApCi0JdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbgotCXsKLQkJSUphdmFFbGVtZW50IGVsZW0gPSBqZHRNZXRob2QuZ2V0QW5jZXN0b3IoSUphdmFFbGVtZW50LlRZUEUpOwotCQlJVHlwZSBhbmNlc3RvciA9IGVsZW0gaW5zdGFuY2VvZiBJVHlwZSA/IChJVHlwZSllbGVtIDogbnVsbDsKLQkJU3RyaW5nIHNpZ25hdHVyZSA9IGpkdE1ldGhvZC5nZXRSZXR1cm5UeXBlKCk7Ci0JCVN0cmluZyB0eXBlTmFtZSA9IGdldFR5cGVOYW1lRnJvbVNpZ25hdHVyZShzaWduYXR1cmUpOwotCQlyZXR1cm4gcmVzb2x2ZVR5cGUodHlwZU5hbWUsYW5jZXN0b3IpOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIGFuIGFycmF5IG9mIHplcm8gb3IgbW9yZSBKRFQgSVR5cGUgb2JqZWN0cwotCSAqIGZvciB0aGUgcGFyYW1ldGVycyBvZiB0aGUgZ2l2ZW4gbWV0aG9kLgotCSAqIEBwYXJhbSBqZHRNZXRob2QgVGhlIG1ldGhvZCB0byBhbmFseXplLgotCSAqIEByZXR1cm4gQW4gYXJyYXkgb2YgemVybyBvciBtb3JlIHBhcmFtZXRlciB0eXBlcy4KLQkgKiBAdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbiBJZiB0aGUgSkRUIGVuZ2luZSBmYWlscyB0bwotCSAqIGFuYWx5emUgdGhlIGdpdmVuIG1ldGhvZCB0byBzYXRpc2Z5IHRoaXMgcmVxdWVzdC4KLQkgKi8KLQlwdWJsaWMgSVR5cGVbXSBnZXRQYXJhbWV0ZXJUeXBlcyAoIElNZXRob2QgamR0TWV0aG9kICkKLQl0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uCi0JewotCQlJSmF2YUVsZW1lbnQgZWxlbSA9IGpkdE1ldGhvZC5nZXRBbmNlc3RvcihJSmF2YUVsZW1lbnQuVFlQRSk7Ci0JCUlUeXBlIGFuY2VzdG9yID0gZWxlbSBpbnN0YW5jZW9mIElUeXBlID8gKElUeXBlKWVsZW0gOiBudWxsOwotCQlTdHJpbmdbXSBzaWduYXR1cmVzID0gamR0TWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCk7Ci0JCUlUeXBlW10gdHlwZXMgPSBuZXcgSVR5cGVbc2lnbmF0dXJlcy5sZW5ndGhdOwotCQlmb3IgKGludCBzPTA7IHM8c2lnbmF0dXJlcy5sZW5ndGg7IHMrKykKLQkJewotCQkJU3RyaW5nIHR5cGVOYW1lID0gZ2V0VHlwZU5hbWVGcm9tU2lnbmF0dXJlKHNpZ25hdHVyZXNbc10pOwotCQkJdHlwZXNbc10gPSBmaW5kVHlwZSh0eXBlTmFtZSxhbmNlc3Rvcik7Ci0JCX0KLQkJcmV0dXJuIHR5cGVzOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIGFuIGFycmF5IG9mIHplcm8gb3IgbW9yZSB0eXBlIG5hbWVzCi0JICogZm9yIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBnaXZlbiBtZXRob2QuCi0JICogQHBhcmFtIGpkdE1ldGhvZCBUaGUgbWV0aG9kIHRvIGFuYWx5emUuCi0JICogQHJldHVybiBBbiBhcnJheSBvZiB6ZXJvIG9yIG1vcmUgcGFyYW1ldGVyIHR5cGUgbmFtZXMuCi0JICogQHRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24gSWYgdGhlIEpEVCBlbmdpbmUgZmFpbHMgdG8KLQkgKiBhbmFseXplIHRoZSBnaXZlbiBtZXRob2QgdG8gc2F0aXNmeSB0aGlzIHJlcXVlc3QuCi0JICovCi0JcHVibGljIFN0cmluZ1tdIGdldFBhcmFtZXRlclR5cGVOYW1lcyAoIElNZXRob2QgamR0TWV0aG9kICkKLQl0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uCi0JewotCQlJSmF2YUVsZW1lbnQgZWxlbSA9IGpkdE1ldGhvZC5nZXRBbmNlc3RvcihJSmF2YUVsZW1lbnQuVFlQRSk7Ci0JCUlUeXBlIGFuY2VzdG9yID0gZWxlbSBpbnN0YW5jZW9mIElUeXBlID8gKElUeXBlKWVsZW0gOiBudWxsOwotCQlTdHJpbmdbXSBzaWduYXR1cmVzID0gamR0TWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCk7Ci0JCVN0cmluZ1tdIHR5cGVOYW1lcyA9IG5ldyBTdHJpbmdbc2lnbmF0dXJlcy5sZW5ndGhdOwotCQlmb3IgKGludCBzPTA7IHM8c2lnbmF0dXJlcy5sZW5ndGg7IHMrKykKLQkJewotCQkJU3RyaW5nIHR5cGVOYW1lID0gZ2V0VHlwZU5hbWVGcm9tU2lnbmF0dXJlKHNpZ25hdHVyZXNbc10pOwotCQkJdHlwZU5hbWVzW3NdID0gcmVzb2x2ZVR5cGUodHlwZU5hbWUsYW5jZXN0b3IpOwotCQl9Ci0JCXJldHVybiB0eXBlTmFtZXM7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgYW4gYXJyYXkgb2YgemVybyBvciBtb3JlIEpEVCBJVHlwZSBvYmplY3RzCi0JICogZm9yIHRoZSBleGNlcHRpb25zIHRocm93biBieSB0aGUgZ2l2ZW4gbWV0aG9kLgotCSAqIEBwYXJhbSBqZHRNZXRob2QgVGhlIG1ldGhvZCB0byBhbmFseXplLgotCSAqIEByZXR1cm4gQW4gYXJyYXkgb2YgemVybyBvciBtb3JlIGV4Y2VwdGlvbiB0eXBlcy4KLQkgKiBAdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbiBJZiB0aGUgSkRUIGVuZ2luZSBmYWlscyB0bwotCSAqIGFuYWx5emUgdGhlIGdpdmVuIG1ldGhvZCB0byBzYXRpc2Z5IHRoaXMgcmVxdWVzdC4KLQkgKi8KLQlwdWJsaWMgSVR5cGVbXSBnZXRFeGNlcHRpb25UeXBlcyAoIElNZXRob2QgamR0TWV0aG9kICkKLQl0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uCi0JewotCQlJSmF2YUVsZW1lbnQgZWxlbSA9IGpkdE1ldGhvZC5nZXRBbmNlc3RvcihJSmF2YUVsZW1lbnQuVFlQRSk7Ci0JCUlUeXBlIGFuY2VzdG9yID0gZWxlbSBpbnN0YW5jZW9mIElUeXBlID8gKElUeXBlKWVsZW0gOiBudWxsOwotCQlTdHJpbmdbXSBzaWduYXR1cmVzID0gamR0TWV0aG9kLmdldEV4Y2VwdGlvblR5cGVzKCk7Ci0JCUlUeXBlW10gdHlwZXMgPSBuZXcgSVR5cGVbc2lnbmF0dXJlcy5sZW5ndGhdOwotCQlmb3IgKGludCBzPTA7IHM8c2lnbmF0dXJlcy5sZW5ndGg7IHMrKykKLQkJewotCQkJU3RyaW5nIHR5cGVOYW1lID0gZ2V0VHlwZU5hbWVGcm9tU2lnbmF0dXJlKHNpZ25hdHVyZXNbc10pOwotCQkJdHlwZXNbc10gPSBmaW5kVHlwZSh0eXBlTmFtZSxhbmNlc3Rvcik7Ci0JCX0KLQkJcmV0dXJuIHR5cGVzOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIGFuIGFycmF5IG9mIHplcm8gb3IgbW9yZSB0eXBlIG5hbWVzCi0JICogZm9yIHRoZSBleGNlcHRpb25zIHRocm93biBieSB0aGUgZ2l2ZW4gbWV0aG9kLgotCSAqIEBwYXJhbSBqZHRNZXRob2QgVGhlIG1ldGhvZCB0byBhbmFseXplLgotCSAqIEByZXR1cm4gQW4gYXJyYXkgb2YgemVybyBvciBtb3JlIGV4Y2VwdGlvbiB0eXBlIG5hbWVzLgotCSAqIEB0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uIElmIHRoZSBKRFQgZW5naW5lIGZhaWxzIHRvCi0JICogYW5hbHl6ZSB0aGUgZ2l2ZW4gbWV0aG9kIHRvIHNhdGlzZnkgdGhpcyByZXF1ZXN0LgotCSAqLwotCXB1YmxpYyBTdHJpbmdbXSBnZXRFeGNlcHRpb25UeXBlTmFtZXMgKCBJTWV0aG9kIGpkdE1ldGhvZCApCi0JdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbgotCXsKLQkJSUphdmFFbGVtZW50IGVsZW0gPSBqZHRNZXRob2QuZ2V0QW5jZXN0b3IoSUphdmFFbGVtZW50LlRZUEUpOwotCQlJVHlwZSBhbmNlc3RvciA9IGVsZW0gaW5zdGFuY2VvZiBJVHlwZSA/IChJVHlwZSllbGVtIDogbnVsbDsKLQkJU3RyaW5nW10gc2lnbmF0dXJlcyA9IGpkdE1ldGhvZC5nZXRFeGNlcHRpb25UeXBlcygpOwotCQlTdHJpbmdbXSB0eXBlTmFtZXMgPSBuZXcgU3RyaW5nW3NpZ25hdHVyZXMubGVuZ3RoXTsKLQkJZm9yIChpbnQgcz0wOyBzPHNpZ25hdHVyZXMubGVuZ3RoOyBzKyspCi0JCXsKLQkJCVN0cmluZyB0eXBlTmFtZSA9IGdldFR5cGVOYW1lRnJvbVNpZ25hdHVyZShzaWduYXR1cmVzW3NdKTsKLQkJCXR5cGVOYW1lc1tzXSA9IHJlc29sdmVUeXBlKHR5cGVOYW1lLGFuY2VzdG9yKTsKLQkJfQotCQlyZXR1cm4gdHlwZU5hbWVzOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIGFuIGFycmF5IG9mIHplcm8gb3IgbW9yZSB0eXBlcyByZXByZXNlbnRpbmcKLQkgKiB0aGUgc3VwZXJjbGFzc2VzLCBpZiBhbnksIG9mIHRoZSBnaXZlbiBJVHlwZSBpbiBib3R0b20tdXAKLQkgKiBvcmRlciBleGNsdWRpbmcgamF2YS5sYW5nLk9iamVjdC4KLQkgKiBAcGFyYW0gamR0VHlwZSBUaGUgdHlwZSB0byBhbmFseXplLgotCSAqIEByZXR1cm4gQW4gYXJyYXkgb2YgemVybyBvciBtb3JlIHN1cGVyY2xhc3MgdHlwZXMuCi0JICogQHRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24gSWYgdGhlIEpEVCBlbmdpbmUgZmFpbHMgdG8KLQkgKiBhbmFseXplIHRoZSBnaXZlbiB0eXBlIHRvIHNhdGlzZnkgdGhpcyByZXF1ZXN0LgotCSAqLwotCXB1YmxpYyBJVHlwZVtdIGdldFN1cGVyQ2xhc3NlcyAoIElUeXBlIGpkdFR5cGUgKQotCXRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24KLQl7Ci0JCXJldHVybiBnZXRTdXBlckNsYXNzZXMoamR0VHlwZSwiamF2YS5sYW5nLk9iamVjdCIpOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIGFuIGFycmF5IG9mIHplcm8gb3IgbW9yZSB0eXBlcyByZXByZXNlbnRpbmcKLQkgKiB0aGUgc3VwZXJjbGFzc2VzLCBpZiBhbnksIG9mIHRoZSBnaXZlbiBJVHlwZS4KLQkgKiBVbmRlciBub3JtYWwgY2lyY3Vtc3RhbmNlcywgamF2YS5sYW5nLk9iamVjdCBpcyBpbmNsdWRlZC4KLQkgKiBAcGFyYW0gamR0VHlwZSBUaGUgdHlwZSB0byBhbmFseXplLgotCSAqIEBwYXJhbSBzdG9wQ2xhc3NOYW1lIFRoZSBuYW1lIG9mIGEgc3RvcCBjbGFzcyB1c2VkIHRvIGxpbWl0Ci0JICogdGhlIHN1cGVyY2xhc3NlcyByZXR1cm5lZCB0byB0aGUgY2FsbGVyLiBJZiB0aGUgc3RvcCBjbGFzcwotCSAqIGlzIG51bGwgb3IgbmFtZXMgYSBjbGFzcyBub3QgZm91bmQgaW4gdGhlIGhpZXJhcmNoeSwgYWxsCi0JICogc3VwZXJjbGFzc2VzIGFyZSByZXR1cm5lZC4gT3RoZXJ3aXNlLCBvbmx5IHN1cGVyY2xhc3NlcyB1cAotCSAqIHRvIGJ1dCBleGNsdWRpbmcgdGhlIHN0b3AgY2xhc3MgYXJlIHJldHVybmVkLgotCSAqIEByZXR1cm4gQW4gYXJyYXkgb2YgemVybyBvciBtb3JlIHN1cGVyY2xhc3MgdHlwZXMuCi0JICogQHRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24gSWYgdGhlIEpEVCBlbmdpbmUgZmFpbHMgdG8KLQkgKiBhbmFseXplIHRoZSBnaXZlbiB0eXBlIHRvIHNhdGlzZnkgdGhpcyByZXF1ZXN0LgotCSAqLwotCXB1YmxpYyBJVHlwZVtdIGdldFN1cGVyQ2xhc3NlcyAoIElUeXBlIGpkdFR5cGUsIFN0cmluZyBzdG9wQ2xhc3NOYW1lICkKLQl0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uCi0JewotCQlJVHlwZUhpZXJhcmNoeSBoaWVyYXJjaHkgPSBqZHRUeXBlLm5ld1N1cGVydHlwZUhpZXJhcmNoeShtb25pdG9yXyk7Ci0JCUlUeXBlW10gYWxsU3VwZXJDbGFzc2VzID0gaGllcmFyY2h5LmdldEFsbFN1cGVyY2xhc3NlcyhqZHRUeXBlKTsKLQkJTGlzdCBzdXBlckNsYXNzZXMgPSBuZXcgTGlua2VkTGlzdCgpOwotCQlmb3IgKGludCBpPTA7IGk8YWxsU3VwZXJDbGFzc2VzLmxlbmd0aDsgaSsrKQotCQl7Ci0JCQlpZiAoYWxsU3VwZXJDbGFzc2VzW2ldLmdldEZ1bGx5UXVhbGlmaWVkTmFtZSgpLmVxdWFscyhzdG9wQ2xhc3NOYW1lKSkKLQkJCQlicmVhazsKLQkJCXN1cGVyQ2xhc3Nlcy5hZGQoYWxsU3VwZXJDbGFzc2VzW2ldKTsKLQkJfQotCQlyZXR1cm4gKElUeXBlW10pc3VwZXJDbGFzc2VzLnRvQXJyYXkobmV3IElUeXBlWzBdKTsKLQl9Ci0JCi0JLyoqCi0JICogRXh0cmFjdHMgdGhlIHF1YWxpZmllZCB0eXBlIG5hbWUgZnJvbSBhIEpEVCBzaWduYXR1cmUuCi0JICogQHBhcmFtIHNpZ25hdHVyZSBUaGUgc2lnbmF0dXJlIHRvIGV4YW1pbmUuCi0JICogQHJldHVybiBUaGUgcXVhbGlmaWVkIHR5cGUgbmFtZSBmcm9tIHRoZSBzaWduYXR1cmUuCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRUeXBlTmFtZUZyb21TaWduYXR1cmUgKCBTdHJpbmcgc2lnbmF0dXJlICkKLQl7Ci0KLQkJU3RyaW5nIHBhY2thZ2VOYW1lID0gU2lnbmF0dXJlLmdldFNpZ25hdHVyZVF1YWxpZmllcihzaWduYXR1cmUpOwotCQlTdHJpbmcgYmFzZU5hbWUgPSBTaWduYXR1cmUuZ2V0U2lnbmF0dXJlU2ltcGxlTmFtZShzaWduYXR1cmUpOwotCQlpZiAoYmFzZU5hbWUuZW5kc1dpdGgoIltdIikpewotCQkJYmFzZU5hbWUgPSBiYXNlTmFtZS5zdWJzdHJpbmcoMCwgYmFzZU5hbWUuaW5kZXhPZigiWyIpKTsKLQkJfQotCQkJCi0JCVN0cmluZyB0eXBlTmFtZSA9IChwYWNrYWdlTmFtZS50cmltKCkuZXF1YWxzKCIiKT8iIjpwYWNrYWdlTmFtZSsiLiIpICsgYmFzZU5hbWU7Ci0JCXJldHVybiB0eXBlTmFtZTsKLQl9Ci0JCi0JLyoqCi0JICogQXR0ZW1wdHMgdG8gcmVzb2x2ZSBhbiB1bnJlc29sdmVkIHR5cGUgbmFtZSBpbiB0aGUKLQkgKiBjb250ZXh0IG9mIHRoZSBnaXZlbiBhbmNlc3RvciB0eXBlIChpZS4gdGhlIHR5cGUKLQkgKiBhY3RpbmcgYXMgdGhlIGNvbnRleHQgd2l0aGluIHdoaWNoIHRoZSB0eXBlIG5hbWUKLQkgKiBzaG91bGQgYmUgcmVzb2x2ZWQpLgotCSAqIEBwYXJhbSB0eXBlTmFtZSBUaGUgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIHR5cGUgdG8gZmluZC4KLQkgKiBAcGFyYW0gYW5jZXN0b3IgVGhlIHR5cGUgcHJvdmlkaW5nIHRoZSBjb250ZXh0IHdpdGhpbgotCSAqIHdoaWNoIHRvIGxvb2sgdXAgdGhlIHR5cGUuCi0JICogQHJldHVybiBUaGUgcXVhbGlmaWVkIG5hbWUsIG9yIHRoZSBvcmlnaW5hbCB0eXBlIG5hbWUKLQkgKiBpZiBpdCBjb3VsZCBub3QgYmUgcmVzb2x2ZWQuCi0JICovCi0JcHVibGljIFN0cmluZyByZXNvbHZlVHlwZSAoIFN0cmluZyB0eXBlTmFtZSwgSVR5cGUgYW5jZXN0b3IgKQotCXRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24KLQl7Ci0JCWlmIChhbmNlc3RvciAhPSBudWxsKQotCQl7Ci0JCQlTdHJpbmdbXVtdIG1hdGNoZXMgPSBhbmNlc3Rvci5yZXNvbHZlVHlwZSh0eXBlTmFtZSk7Ci0JCQlpZiAobWF0Y2hlcyAhPSBudWxsICYmIG1hdGNoZXMubGVuZ3RoID4gMCkKLQkJCXsKLQkJCQlTdHJpbmdCdWZmZXIgcW5hbWUgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCQkJaW50IG4gPSBtYXRjaGVzWzBdLmxlbmd0aDsKLQkJCQlmb3IgKGludCBqPTA7IGo8bi0xOyBqKyspCi0JCQkJewotCQkJCQlxbmFtZS5hcHBlbmQobWF0Y2hlc1swXVtqXSkuYXBwZW5kKCIuIik7Ci0JCQkJfQotCQkJCWlmIChuID49IDApCi0JCQkJewotCQkJCQlxbmFtZS5hcHBlbmQobWF0Y2hlc1swXVtuLTFdKTsKLQkJCQl9Ci0JCQkJcmV0dXJuIHFuYW1lLnRvU3RyaW5nKCk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIHR5cGVOYW1lOwotCX0KLQotCS8qKgotCSAqIEF0dGVtcHRzIHRvIGZpbmQgYSBKRFQgSVR5cGUgb2JqZWN0IGZvciB0aGUgZ2l2ZW4KLQkgKiByZXNvbHZlZCBvciB1bnJlc29sdmVkIHR5cGUgbmFtZSBpbiB0aGUgY29udGV4dCBvZgotCSAqIHRoZSBnaXZlbiBhbmNlc3RvciB0eXBlIChpZS4gdGhlIHR5cGUgYWN0aW5nIGFzIHRoZQotCSAqIGNvbnRleHQgd2l0aGluIHdoaWNoIHRoZSB0eXBlIG5hbWUgc2hvdWxkIGJlIHJlc29sdmVkKS4KLQkgKiBAcGFyYW0gdHlwZU5hbWUgVGhlIHF1YWxpZmllZCBuYW1lIG9mIHRoZSB0eXBlIHRvIGZpbmQuCi0JICogQHBhcmFtIGFuY2VzdG9yIFRoZSB0eXBlIHByb3ZpZGluZyB0aGUgY29udGV4dCB3aXRoaW4KLQkgKiB3aGljaCB0byBsb29rIHVwIHRoZSB0eXBlLgotCSAqIEByZXR1cm4gVGhlIElUeXBlIG9iamVjdCBvZiB0aGUgZ2l2ZW4gcXVhbGlmaWVkIG5hbWUsCi0JICogb3IgbnVsbCBpZiBubyB0eXBlIGNvdWxkIGJlIGZvdW5kIGluIHRoZSB3b3Jrc3BhY2UuCi0JICovCi0JcHVibGljIElUeXBlIGZpbmRUeXBlICggU3RyaW5nIHR5cGVOYW1lLCBJVHlwZSBhbmNlc3RvciApCi0JdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbgotCXsKLQkJSVR5cGUgdHlwZSA9IGphdmFQcm9qZWN0Xy5maW5kVHlwZSh0eXBlTmFtZSk7Ci0JCWlmICh0eXBlID09IG51bGwgJiYgYW5jZXN0b3IgIT0gbnVsbCkKLQkJewotCQkJU3RyaW5nW11bXSBtYXRjaGVzID0gYW5jZXN0b3IucmVzb2x2ZVR5cGUodHlwZU5hbWUpOwotCQkJaWYgKG1hdGNoZXMgIT0gbnVsbCkKLQkJCXsKLQkJCQlpbnQgaT0wOwotCQkJCXdoaWxlICh0eXBlID09IG51bGwgJiYgaTxtYXRjaGVzLmxlbmd0aCkKLQkJCQl7Ci0JCQkJCVN0cmluZ0J1ZmZlciBxbmFtZSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJCQkJaW50IG4gPSBtYXRjaGVzW2ldLmxlbmd0aDsKLQkJCQkJZm9yIChpbnQgaj0wOyBqPG4tMTsgaisrKQotCQkJCQl7Ci0JCQkJCQlxbmFtZS5hcHBlbmQobWF0Y2hlc1tpXVtqXSkuYXBwZW5kKCIuIik7Ci0JCQkJCX0KLQkJCQkJaWYgKG4gPj0gMCkKLQkJCQkJewotCQkJCQkJcW5hbWUuYXBwZW5kKG1hdGNoZXNbaV1bbi0xXSk7Ci0JCQkJCX0KLQkJCQkJdHlwZSA9IGphdmFQcm9qZWN0Xy5maW5kVHlwZShxbmFtZS50b1N0cmluZygpKTsKLQkJCQkJaSsrOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gdHlwZTsKLQl9Ci0KLQkvKioKLQkgKiBGaW5kcyBhbGwgcHVibGljLCBub24tY29uc3RydWN0b3IgSU1ldGhvZHMgYmVsb25naW5nCi0JICogdG8gdGhlIGdpdmVuIElUeXBlIGFuZCBhZGRzIHRoZW0gdG8gdGhlIGdpdmVuIGxpc3QuCi0JICogQHBhcmFtIGpkdFR5cGUgVGhlIHR5cGUgd2hvc2UgbWV0aG9kcyBhcmUgdG8gYmUgaGFydmVzdGVkLgotCSAqIEBwYXJhbSBsaXN0IFRoZSBsaXN0IHRvIHdoaWNoIHRoZSBoYXJ2ZXN0ZWQgbWV0aG9kcyB3aWxsIGJlIGFkZGVkLgotCSAqIEB0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uIElmIHRoZSBKRFQgZW5naW5lIGZhaWxzIHRvCi0JICogYW5hbHl6ZSB0aGUgZ2l2ZW4gdHlwZSB0byBzYXRpc2Z5IHRoaXMgcmVxdWVzdC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBoYXJ2ZXN0UHVibGljTWV0aG9kcyAoIElUeXBlIGpkdFR5cGUsIExpc3QgbGlzdCApCi0JdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbgotCXsKLQkJSU1ldGhvZFtdIG1ldGhvZHMgPSBqZHRUeXBlLmdldE1ldGhvZHMoKTsKLQkJZm9yIChpbnQgbT0wOyBtPG1ldGhvZHMubGVuZ3RoOyBtKyspCi0JCXsKLQkJCWlmICghbWV0aG9kc1ttXS5pc0NvbnN0cnVjdG9yKCkgJiYgRmxhZ3MuaXNQdWJsaWMobWV0aG9kc1ttXS5nZXRGbGFncygpKSkKLQkJCXsKLQkJCQlsaXN0LmFkZChtZXRob2RzW21dKTsKLQkJCX0KLQkJfQotCX0KLQkKLQkvKioKLQkgKiBGaW5kcyBhbGwgcHVibGljIElGaWVsZHMgYmVsb25naW5nCi0JICogdG8gdGhlIGdpdmVuIElUeXBlIGFuZCBhZGRzIHRoZW0gdG8gdGhlIGdpdmVuIGxpc3QuCi0JICogQHBhcmFtIGpkdFR5cGUgVGhlIHR5cGUgd2hvc2UgZmllbGRzIGFyZSB0byBiZSBoYXJ2ZXN0ZWQuCi0JICogQHBhcmFtIGxpc3QgVGhlIGxpc3QgdG8gd2hpY2ggdGhlIGhhcnZlc3RlZCBmaWVsZHMgd2lsbCBiZSBhZGRlZC4KLQkgKiBAdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbiBJZiB0aGUgSkRUIGVuZ2luZSBmYWlscyB0bwotCSAqIGFuYWx5emUgdGhlIGdpdmVuIHR5cGUgdG8gc2F0aXNmeSB0aGlzIHJlcXVlc3QuCi0JICovCi0JcHVibGljIHZvaWQgaGFydmVzdFB1YmxpY0ZpZWxkcyAoIElUeXBlIGpkdFR5cGUsIExpc3QgbGlzdCApCi0JdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbgotCXsKLQkJSUZpZWxkW10gZmllbGRzID0gamR0VHlwZS5nZXRGaWVsZHMoKTsKLQkJZm9yIChpbnQgZj0wOyBmPGZpZWxkcy5sZW5ndGg7IGYrKykKLQkJewotCQkJaWYgKEZsYWdzLmlzUHVibGljKGZpZWxkc1tmXS5nZXRGbGFncygpKSkKLQkJCXsKLQkJCQlsaXN0LmFkZChmaWVsZHNbZl0pOwotCQkJfQotCQl9Ci0JfQotCQotCS8qKgotCSAqIElmIHRoZSBnaXZlbiBtZXRob2QgaXMgYSBnZXR0ZXIgYWNjb3JkaW5nIHRvIHRoZSBCZWFuIHNwZWMKLQkgKiAoZWcuICJNeVR5cGUgZ2V0TXlQcm9wZXJ0eSAoKSIgb3IgImJvb2xlYW4gaXNNeVByb3BlcnR5ICgpIikKLQkgKiByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgYmVhbiBwcm9wZXJ0eSBuYW1lIChlZy4gIm15UHJvcGVydHkiKSwKLQkgKiBvdGhlcndpc2UsIHJldHVybiBudWxsLgotCSAqIEBwYXJhbSBtZXRob2QgVGhlIG1ldGhvZCB0byBjaGVjay4KLQkgKiBAcmV0dXJuIFRoZSBwcm9wZXJ0eSBuYW1lIG9yIG5vbmUgaWYgdGhlIG1ldGhvZCBpcyBub3QgYSBnZXR0ZXIuCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRHZXR0ZXJOYW1lICggSU1ldGhvZCBtZXRob2QgKQotCXsKLQkJdHJ5Ci0JCXsKLQkJCVN0cmluZyBtZXRob2ROYW1lID0gbWV0aG9kLmdldEVsZW1lbnROYW1lKCk7Ci0JCQlpZiAobWV0aG9kTmFtZS5zdGFydHNXaXRoKCJnZXQiKSAmJiBtZXRob2ROYW1lLmxlbmd0aCgpID4gMykKLQkJCXsKLQkJCQlTdHJpbmcgc2lnbmF0dXJlID0gbWV0aG9kLmdldFNpZ25hdHVyZSgpOwotCQkJCVN0cmluZyByZXR1cm5UeXBlTmFtZSA9IFNpZ25hdHVyZS5nZXRSZXR1cm5UeXBlKHNpZ25hdHVyZSk7Ci0JCQkJLy8KLQkJCQkvLyBHZXR0ZXJzIG11c3Qgbm90IGJlIHZvaWQuCi0JCQkJLy8KLQkJCQlpZiAocmV0dXJuVHlwZU5hbWUgIT0gbnVsbCAmJiByZXR1cm5UeXBlTmFtZSAhPSBTaWduYXR1cmUuU0lHX1ZPSUQpCi0JCQkJewotCQkJCQlTdHJpbmdbXSBwYXJhbWV0ZXJTaWduYXR1cmVzID0gbWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCk7Ci0JCQkJCS8vCi0JCQkJCS8vIE5vbi1pbmRleGVkIGdldHRlcnMgbXVzdCBoYXZlIHplcm8gcGFyYW1ldGVycy4KLQkJCQkJLy8KLQkJCQkJaWYgKHBhcmFtZXRlclNpZ25hdHVyZXMubGVuZ3RoID09IDApCi0JCQkJCXsKLQkJCQkJCXJldHVybiBtZXRob2ROYW1lLnN1YnN0cmluZygzLDQpLnRvTG93ZXJDYXNlKCkgKyBtZXRob2ROYW1lLnN1YnN0cmluZyg0KTsKLQkJCQkJfQotCQkJCQkvLwotCQkJCQkvLyBJbmRleGVkIGdldHRlcnMgbXVzdCBoYXZlIGV4YWN0bHkgb25lIHBhcmFtZXRlciBvZiB0eXBlICJpbnQiLgotCQkJCQkvLwotCQkJCQllbHNlIGlmIChwYXJhbWV0ZXJTaWduYXR1cmVzLmxlbmd0aCA9PSAxKQotCQkJCQl7Ci0JCQkJCQlTdHJpbmcgaW5kZXhUeXBlTmFtZSA9IGdldFR5cGVOYW1lRnJvbVNpZ25hdHVyZShwYXJhbWV0ZXJTaWduYXR1cmVzWzBdKTsKLQkJCQkJCWlmIChpbmRleFR5cGVOYW1lLmVxdWFscygiaW50IikpCi0JCQkJCQl7Ci0JCQkJCQkJcmV0dXJuIG1ldGhvZE5hbWUuc3Vic3RyaW5nKDMsNCkudG9Mb3dlckNhc2UoKSArIG1ldGhvZE5hbWUuc3Vic3RyaW5nKDQpOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJZWxzZSBpZiAobWV0aG9kTmFtZS5zdGFydHNXaXRoKCJpcyIpICYmIG1ldGhvZE5hbWUubGVuZ3RoKCkgPiAyKQotCQkJewotCQkJCVN0cmluZyBzaWduYXR1cmUgPSBtZXRob2QuZ2V0U2lnbmF0dXJlKCk7Ci0JCQkJU3RyaW5nIHJldHVyblR5cGVOYW1lID0gU2lnbmF0dXJlLmdldFJldHVyblR5cGUoc2lnbmF0dXJlKTsKLQkJCQkvLwotCQkJCS8vICJpcyIgZ2V0dGVycyBtdXN0IGJlIGJvb2xlYW4uCi0JCQkJLy8KLQkJCQlpZiAoU2lnbmF0dXJlLlNJR19CT09MRUFOLmVxdWFscyhyZXR1cm5UeXBlTmFtZSkpCi0JCQkJewotCQkJCQkvLwotCQkJCQkvLyAiaXMiIGdldHRlcnMgbXVzdCBoYXZlIG5vIHBhcmFtZXRlcnMuCi0JCQkJCS8vCi0JCQkJCWlmIChtZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKS5sZW5ndGggPT0gMCkKLQkJCQkJewotCQkJCQkJcmV0dXJuIG1ldGhvZE5hbWUuc3Vic3RyaW5nKDIsMykudG9Mb3dlckNhc2UoKSArIG1ldGhvZE5hbWUuc3Vic3RyaW5nKDMpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWNhdGNoIChKYXZhTW9kZWxFeGNlcHRpb24gZSkKLQkJewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCQotCS8qKgotCSAqIElmIHRoZSBnaXZlbiBtZXRob2QgaXMgYSBzZXR0ZXIgYWNjb3JkaW5nIHRvIHRoZSBCZWFuIHNwZWMKLQkgKiAoZWcuICJ2b2lkIHNldE15UHJvcGVydHkgKE15VHlwZSkiIHJldHVybiB0aGUgY29ycmVzcG9uZGluZwotCSAqIGJlYW4gcHJvcGVydHkgbmFtZSAoZWcuICJteVByb3BlcnR5IiksIG90aGVyd2lzZSwgcmV0dXJuIG51bGwuCi0JICogQHBhcmFtIG1ldGhvZCBUaGUgbWV0aG9kIHRvIGNoZWNrLgotCSAqIEByZXR1cm4gVGhlIHByb3BlcnR5IG5hbWUgb3Igbm9uZSBpZiB0aGUgbWV0aG9kIGlzIG5vdCBhIHNldHRlci4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFNldHRlck5hbWUgKCBJTWV0aG9kIG1ldGhvZCApCi0JewotCQl0cnkKLQkJewotCQkJU3RyaW5nIG1ldGhvZE5hbWUgPSBtZXRob2QuZ2V0RWxlbWVudE5hbWUoKTsKLQkJCWlmIChtZXRob2ROYW1lLnN0YXJ0c1dpdGgoInNldCIpICYmIG1ldGhvZE5hbWUubGVuZ3RoKCkgPiAzKQotCQkJewotCQkJCVN0cmluZyBzaWduYXR1cmUgPSBtZXRob2QuZ2V0U2lnbmF0dXJlKCk7Ci0JCQkJU3RyaW5nIHJldHVyblR5cGVOYW1lID0gU2lnbmF0dXJlLmdldFJldHVyblR5cGUoc2lnbmF0dXJlKTsKLQkJCQkvLwotCQkJCS8vIFNldHRlcnMgbXVzdCBiZSB2b2lkLgotCQkJCS8vCi0JCQkJaWYgKFNpZ25hdHVyZS5TSUdfVk9JRC5lcXVhbHMocmV0dXJuVHlwZU5hbWUpKQotCQkJCXsKLQkJCQkJU3RyaW5nW10gcGFyYW1ldGVyU2lnbmF0dXJlcyA9IG1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpOwotCQkJCQkvLwotCQkJCQkvLyBOb24taW5kZXhlZCBzZXR0ZXJzIG11c3QgaGF2ZSBleGFjdGx5IG9uZSBwYXJhbWV0ZXIuCi0JCQkJCS8vCi0JCQkJCWlmIChwYXJhbWV0ZXJTaWduYXR1cmVzLmxlbmd0aCA9PSAxKQotCQkJCQl7Ci0JCQkJCQlyZXR1cm4gbWV0aG9kTmFtZS5zdWJzdHJpbmcoMyw0KS50b0xvd2VyQ2FzZSgpICsgbWV0aG9kTmFtZS5zdWJzdHJpbmcoNCk7Ci0JCQkJCX0KLQkJCQkJLy8KLQkJCQkJLy8gSW5kZXhlZCBzZXR0ZXJzIG11c3QgaGF2ZSBleGFjdGx5IHR3byBwYXJhbWV0ZXJzLAotCQkJCQkvLyB0aGUgZmlyc3Qgb2Ygd2hpY2ggbXVzdCBiZSAiaW50Ii4KLQkJCQkJLy8KLQkJCQkJZWxzZSBpZiAocGFyYW1ldGVyU2lnbmF0dXJlcy5sZW5ndGggPT0gMikKLQkJCQkJewotCQkJCQkJaWYgKFNpZ25hdHVyZS5TSUdfSU5ULmVxdWFscyhwYXJhbWV0ZXJTaWduYXR1cmVzWzBdKSkKLQkJCQkJCXsKLQkJCQkJCQlyZXR1cm4gbWV0aG9kTmFtZS5zdWJzdHJpbmcoMyw0KS50b0xvd2VyQ2FzZSgpICsgbWV0aG9kTmFtZS5zdWJzdHJpbmcoNCk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBlKQotCQl7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0JCi0JLyoKLQkgKiBUaGUgSmF2YSBwcm9qZWN0IHRoYXQgZ292ZXJucyB0aGUgc2VhcmNoIHNjb3BlIGZvciB0aGlzIHJlc29sdmVyLgotCSAqLwotCXByaXZhdGUgSUphdmFQcm9qZWN0IGphdmFQcm9qZWN0XzsKLQkKLQkvKgotCSAqIFRoZSBwcm9ncmVzcyBtb25pdG9yIHRvIHVzZSwgaWYgYW55LiAKLQkgKi8KLQlwcml2YXRlIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcl87Ci0JCi0JLyoKLQkgKiBUaGUgc2V0IG9mIEphdmEgd3JhcHBlciB0eXBlcy4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBTdHJpbmdbXSB3cmFwcGVyVHlwZXNfID0gewotCQkiamF2YS5sYW5nLkNoYXJhY3RlciIsCi0JCSJqYXZhLmxhbmcuQm9vbGVhbiIsCi0JCSJqYXZhLmxhbmcuQnl0ZSIsCi0JCSJqYXZhLmxhbmcuU2hvcnQiLAotCQkiamF2YS5sYW5nLkludGVnZXIiLAotCQkiamF2YS5sYW5nLkxvbmciLAotCQkiamF2YS5sYW5nLkZsb2F0IiwKLQkJImphdmEubGFuZy5Eb3VibGUiCi0JfTsKLQotCS8qCi0JICogVGhlIHNldCBvZiBKYXZhIHByaW1pdGl2ZSB0eXBlcy4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBTdHJpbmdbXSBwcmltaXRpdmVUeXBlc18gPSB7Ci0JCSJjaGFyIiwKLQkJImJvb2xlYW4iLAotCQkiYnl0ZSIsCi0JCSJzaG9ydCIsCi0JCSJpbnQiLAotCQkibG9uZyIsCi0JCSJmbG9hdCIsCi0JCSJkb3VibGUiCi0JfTsKLQotCS8qCi0JICogVGhlIHNldCBvZiBKQVgtUlBDIHN1cHBvcnRlZCBKYXZhIHN0YW5kYXJkIHR5cGVzLAotCSAqIGV4Y2x1ZGluZyBwcmltaXRpdmVzIGFuZCB3cmFwcGVyIHR5cGVzLgotCSAqLwotCXByaXZhdGUgc3RhdGljIFN0cmluZ1tdIGpheHJwY1R5cGVzXyA9IHsKLQkJImJvb2xlYW4iLAotCQkiYnl0ZSIsCi0JCSJzaG9ydCIsCi0JCSJpbnQiLAotCQkibG9uZyIsCi0JCSJmbG9hdCIsCi0JCSJkb3VibGUiLAotCQkiamF2YS5sYW5nLlN0cmluZyIsCi0JCSJqYXZhLmxhbmcuQm9vbGVhbiIsCi0JCSJqYXZhLmxhbmcuQnl0ZSIsCi0JCSJqYXZhLmxhbmcuU2hvcnQiLAotCQkiamF2YS5sYW5nLkludGVnZXIiLAotCQkiamF2YS5sYW5nLkxvbmciLAotCQkiamF2YS5sYW5nLkZsb2F0IiwKLQkJImphdmEubGFuZy5Eb3VibGUiLAotCQkiamF2YS51dGlsLkRhdGUiLAotCQkiamF2YS51dGlsLkNhbGVuZGFyIiwKLQkJImphdmEubWF0aC5CaWdJbnRlZ2VyIiwKLQkJImphdmEubWF0aC5CaWdEZWNpbWFsIiwKLQkJImphdmEubmV0LlVSSSIsCi0JCSJqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lIgotCX07Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL0phdmFCZWFuUHJvcGVydHkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvSmF2YUJlYW5Qcm9wZXJ0eS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjlkNTUyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvSmF2YUJlYW5Qcm9wZXJ0eS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQxOSAgIDEzMjkwNSBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleSAgICAgICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JTWV0aG9kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklUeXBlOwotCi0vKioKLSAqIEBhdXRob3IgY2JyZWFsZXkKLSAqIFRoaXMgaXMgYSBnYXJkZW4gdmFyaWV0eSBpbXBsZW1lbnRhdGlvbiBvZiBJSmF2YUJlYW5Qcm9wZXJ0eSwKLSAqIGNvbnN0cnVjdGFibGUgYnkgZGVmYXVsdCBhbmQgZXF1aXBwZWQgd2l0aCBnZXR0ZXJzIGFuZCBzZXR0ZXJzCi0gKiBmb3IgdGhlIHByb3BlcnRpZXMgb2YgSUphdmFCZWFuUHJvcGVydHkuCi0gKi8KLXB1YmxpYyBjbGFzcyBKYXZhQmVhblByb3BlcnR5IGltcGxlbWVudHMgSUphdmFCZWFuUHJvcGVydHkKLXsKLQlwcml2YXRlIFN0cmluZyBuYW1lXzsKLQlwcml2YXRlIGJvb2xlYW4gaW5kZXhlZF87Ci0JcHJpdmF0ZSBJTWV0aG9kIGdldHRlcl87Ci0JcHJpdmF0ZSBJTWV0aG9kIHNldHRlcl87Ci0JcHJpdmF0ZSBJTWV0aG9kIGluZGV4ZWRHZXR0ZXJfOwotCXByaXZhdGUgSU1ldGhvZCBpbmRleGVkU2V0dGVyXzsKLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSUphdmFCZWFuUHJvcGVydHkjZ2V0TmFtZSgpCi0JICovCi0JcHVibGljIFN0cmluZyBnZXROYW1lICgpCi0JewotCQlyZXR1cm4gbmFtZV87Ci0JfQotCQotCS8qKgotCSAqIFNldHMgdGhlICJuYW1lIiBwcm9wZXJ0eSBvZiB0aGlzIEphdmEgQmVhbiBQcm9wZXJ0eSBkZXNjcmlwdG9yLgotCSAqIEBwYXJhbSBuYW1lIFRoZSBzdHJpbmcgdmFsdWUgdG8gc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHNldE5hbWUgKCBTdHJpbmcgbmFtZSApCi0JewotCQluYW1lXyA9IG5hbWU7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5JSmF2YUJlYW5Qcm9wZXJ0eSNpc0luZGV4ZWQoKQotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzSW5kZXhlZCAoKQotCXsKLQkJcmV0dXJuIGluZGV4ZWRfOwotCX0KLQkKLQkvKioKLQkgKiBTZXRzIHRoZSAiaW5kZXhlZCIgcHJvcGVydHkgb2YgdGhpcyBKYXZhIEJlYW4gUHJvcGVydHkgZGVzY3JpcHRvci4KLQkgKiBAcGFyYW0gaW5kZXhlZCBUaGUgYm9vbGVhbiB2YWx1ZSB0byBzZXQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0SW5kZXhlZCAoIGJvb2xlYW4gaW5kZXhlZCApCi0JewotCQlpbmRleGVkXyA9IGluZGV4ZWQ7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5JSmF2YUJlYW5Qcm9wZXJ0eSNnZXRHZXR0ZXIoKQotCSAqLwotCXB1YmxpYyBJTWV0aG9kIGdldEdldHRlciAoKQotCXsKLQkJcmV0dXJuIGdldHRlcl87Ci0JfQotCQotCS8qKgotCSAqIFNldHMgdGhlICJnZXR0ZXIiIHByb3BlcnR5IG9mIHRoaXMgSmF2YSBCZWFuIFByb3BlcnR5IGRlc2NyaXB0b3IuCi0JICogQHBhcmFtIGdldHRlciBUaGUgSU1ldGhvZCB0byBzZXQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0R2V0dGVyICggSU1ldGhvZCBnZXR0ZXIgKQotCXsKLQkJZ2V0dGVyXyA9IGdldHRlcjsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLklKYXZhQmVhblByb3BlcnR5I2dldFNldHRlcigpCi0JICovCi0JcHVibGljIElNZXRob2QgZ2V0U2V0dGVyICgpCi0JewotCQlyZXR1cm4gc2V0dGVyXzsKLQl9Ci0JCi0JLyoqCi0JICogU2V0cyB0aGUgInNldHRlciIgcHJvcGVydHkgb2YgdGhpcyBKYXZhIEJlYW4gUHJvcGVydHkgZGVzY3JpcHRvci4KLQkgKiBAcGFyYW0gc2V0dGVyIFRoZSBJTWV0aG9kIHRvIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRTZXR0ZXIgKCBJTWV0aG9kIHNldHRlciApCi0JewotCQlzZXR0ZXJfID0gc2V0dGVyOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSUphdmFCZWFuUHJvcGVydHkjZ2V0SW5kZXhlZEdldHRlcigpCi0JICovCi0JcHVibGljIElNZXRob2QgZ2V0SW5kZXhlZEdldHRlciAoKQotCXsKLQkJcmV0dXJuIGluZGV4ZWRHZXR0ZXJfOwotCX0KLQkKLQkvKioKLQkgKiBTZXRzIHRoZSAiaW5kZXhlZEdldHRlciIgcHJvcGVydHkgb2YgdGhpcyBKYXZhIEJlYW4gUHJvcGVydHkgZGVzY3JpcHRvci4KLQkgKiBAcGFyYW0gaW5kZXhlZEdldHRlciBUaGUgSU1ldGhvZCB0byBzZXQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0SW5kZXhlZEdldHRlciAoIElNZXRob2QgaW5kZXhlZEdldHRlciApCi0JewotCQlpbmRleGVkR2V0dGVyXyA9IGluZGV4ZWRHZXR0ZXI7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5JSmF2YUJlYW5Qcm9wZXJ0eSNnZXRJbmRleGVkU2V0dGVyKCkKLQkgKi8KLQlwdWJsaWMgSU1ldGhvZCBnZXRJbmRleGVkU2V0dGVyICgpCi0JewotCQlyZXR1cm4gaW5kZXhlZFNldHRlcl87Ci0JfQotCQotCS8qKgotCSAqIFNldHMgdGhlICJpbmRleGVkU2V0dGVyIiBwcm9wZXJ0eSBvZiB0aGlzIEphdmEgQmVhbiBQcm9wZXJ0eSBkZXNjcmlwdG9yLgotCSAqIEBwYXJhbSBpbmRleGVkU2V0dGVyIFRoZSBJTWV0aG9kIHRvIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRJbmRleGVkU2V0dGVyICggSU1ldGhvZCBpbmRleGVkU2V0dGVyICkKLQl7Ci0JCWluZGV4ZWRTZXR0ZXJfID0gaW5kZXhlZFNldHRlcjsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSUphdmFCZWFuUHJvcGVydHkjZ2V0RGVjbGFyaW5nVHlwZSgpCi0JICovCi0JcHVibGljIElUeXBlIGdldERlY2xhcmluZ1R5cGUgKCkKLQl7Ci0JCUlNZXRob2QgbWV0aG9kID0gZ2V0R2V0dGVyKCk7Ci0JCWlmIChtZXRob2QgPT0gbnVsbCkgbWV0aG9kID0gZ2V0U2V0dGVyKCk7Ci0JCWlmIChtZXRob2QgPT0gbnVsbCkgbWV0aG9kID0gZ2V0SW5kZXhlZEdldHRlcigpOwotCQlpZiAobWV0aG9kID09IG51bGwpIG1ldGhvZCA9IGdldEluZGV4ZWRTZXR0ZXIoKTsKLQkJcmV0dXJuIG1ldGhvZCAhPSBudWxsID8gbWV0aG9kLmdldERlY2xhcmluZ1R5cGUoKSA6IG51bGw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9KYXZhV2ViU2VydmljZVJ1bGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvSmF2YVdlYlNlcnZpY2VSdWxlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5ZmZhMzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9KYXZhV2ViU2VydmljZVJ1bGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MTkgICAxMzI5MDUgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkgICAgICAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5TdGFjazsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5NdWx0aVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklGaWVsZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JTWV0aG9kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklUeXBlOwotCi0vKioKLSAqIEEgYmFzaWMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBJSmF2YVdlYlNlcnZpY2VSdWxlLgotICovCi1wdWJsaWMgY2xhc3MgSmF2YVdlYlNlcnZpY2VSdWxlIGltcGxlbWVudHMgSUphdmFXZWJTZXJ2aWNlUnVsZQotewotCXByb3RlY3RlZCBJSmF2YVdlYlNlcnZpY2VSdWxlRW5naW5lIGVuZ2luZV87Ci0JcHJvdGVjdGVkIExpc3Qgc3RhdHVzTGlzdF87Ci0JcHJvdGVjdGVkIGludCBpZF87Ci0JcHJvdGVjdGVkIFN0cmluZyBuYW1lc3BhY2VfOwotCXByb3RlY3RlZCBTdHJpbmcgbmFtZV87Ci0JcHJvdGVjdGVkIFN0cmluZyBkZXNjcmlwdGlvbl87Ci0JCi0JcHJvdGVjdGVkIEphdmFXZWJTZXJ2aWNlUnVsZSAoKQotCXsKLQkJLy8gTm90IHB1YmxpY2x5IGNvbnN0cnVjdGFibGUuCi0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5JSmF2YVdlYlNlcnZpY2VSdWxlI2dldElkKCkKLQkgKi8KLQlwdWJsaWMgaW50IGdldElkICgpCi0JewotCQlyZXR1cm4gaWRfOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSUphdmFXZWJTZXJ2aWNlUnVsZSNnZXROYW1lc3BhY2UoKQotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlICgpCi0JewotCQlyZXR1cm4gbmFtZXNwYWNlXzsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLklKYXZhV2ViU2VydmljZVJ1bGUjZ2V0TmFtZSgpCi0JICovCi0JcHVibGljIFN0cmluZyBnZXROYW1lICgpCi0JewotCQlyZXR1cm4gbmFtZV87Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5JSmF2YVdlYlNlcnZpY2VSdWxlI2dldERlc2NyaXB0aW9uKCkKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uICgpCi0JewotCQlyZXR1cm4gZGVzY3JpcHRpb25fOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSUphdmFXZWJTZXJ2aWNlUnVsZSNpbml0KCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBpbml0ICggSUphdmFXZWJTZXJ2aWNlUnVsZUVuZ2luZSBlbmdpbmUgKQotCXsKLQkJZW5naW5lXyA9IGVuZ2luZTsKLQkJc3RhdHVzTGlzdF8gPSBuZXcgTGlua2VkTGlzdCgpOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSUphdmFXZWJTZXJ2aWNlUnVsZSN2aXNpdENsYXNzKG9yZy5lY2xpcHNlLmpkdC5jb3JlLklUeXBlLCBqYXZhLnV0aWwuU3RhY2spCi0JICovCi0JcHVibGljIHZvaWQgdmlzaXRDbGFzcyAoIElUeXBlIGpkdENsYXNzLCBTdGFjayBwZWFudXRUcmFpbCApCi0JewotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSUphdmFXZWJTZXJ2aWNlUnVsZSN2aXNpdEV4Y2VwdGlvbihvcmcuZWNsaXBzZS5qZHQuY29yZS5JRmllbGQsIGphdmEudXRpbC5TdGFjaykKLQkgKi8KLQlwdWJsaWMgdm9pZCB2aXNpdEV4Y2VwdGlvbiAoIElUeXBlIGpkdENsYXNzLCBTdGFjayBwZWFudXRUcmFpbCApCi0JewotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSUphdmFXZWJTZXJ2aWNlUnVsZSN2aXNpdEZpZWxkKG9yZy5lY2xpcHNlLmpkdC5jb3JlLklGaWVsZCwgamF2YS51dGlsLlN0YWNrKQotCSAqLwotCXB1YmxpYyB2b2lkIHZpc2l0RmllbGQgKCBJRmllbGQgamR0RmllbGQsIFN0YWNrIHBlYW51dFRyYWlsICkKLQl7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5JSmF2YVdlYlNlcnZpY2VSdWxlI3Zpc2l0UHJvcGVydHkob3JnLmVjbGlwc2UuamR0LmNvcmUuSU1ldGhvZCwgb3JnLmVjbGlwc2UuamR0LmNvcmUuSU1ldGhvZCwgamF2YS51dGlsLlN0YWNrKQotCSAqLwotCXB1YmxpYyB2b2lkIHZpc2l0UHJvcGVydHkgKCBJSmF2YUJlYW5Qcm9wZXJ0eSBiZWFuUHJvcGVydHksIFN0YWNrIHBlYW51dFRyYWlsICkKLQl7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5JSmF2YVdlYlNlcnZpY2VSdWxlI3Zpc2l0TWV0aG9kKG9yZy5lY2xpcHNlLmpkdC5jb3JlLklNZXRob2QsIGphdmEudXRpbC5TdGFjaykKLQkgKi8KLQlwdWJsaWMgdm9pZCB2aXNpdE1ldGhvZCAoIElNZXRob2QgamR0TWV0aG9kLCBTdGFjayBwZWFudXRUcmFpbCApCi0JewotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSUphdmFXZWJTZXJ2aWNlUnVsZSNnZXRSZXN1bHRzKCkKLQkgKi8KLQlwdWJsaWMgSVN0YXR1cyBnZXRSZXN1bHRzICgpCi0JewotCQlJU3RhdHVzIHN0YXR1cyA9IG51bGw7Ci0JCWlmIChzdGF0dXNMaXN0Xy5zaXplKCkgPT0gMCkKLQkJewotCQkJc3RhdHVzID0gbmV3IFN0YXR1cyhJU3RhdHVzLk9LLCJvcmcuZWNsaXBzZS5qc3Qud3MiLDAsIiIsbnVsbCk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlNdWx0aVN0YXR1cyBtdWx0aVN0YXR1cyA9IG5ldyBNdWx0aVN0YXR1cygib3JnLmVjbGlwc2UuanN0LndzIiwwLCIiLG51bGwpOwotCQkJSXRlcmF0b3IgaSA9IHN0YXR1c0xpc3RfLml0ZXJhdG9yKCk7Ci0JCQl3aGlsZSAoaS5oYXNOZXh0KCkpCi0JCQl7Ci0JCQkJbXVsdGlTdGF0dXMuYWRkKChJU3RhdHVzKWkubmV4dCgpKTsKLQkJCX0KLQkJCXN0YXR1cyA9IG11bHRpU3RhdHVzOwotCQl9Ci0JCXJldHVybiBzdGF0dXM7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9KYXZhV2ViU2VydmljZVJ1bGVTZXQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvSmF2YVdlYlNlcnZpY2VSdWxlU2V0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0ODc3MTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9KYXZhV2ViU2VydmljZVJ1bGVTZXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MTkgICAxMzI5MDUgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkgICAgICAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLWltcG9ydCBqYXZhLnV0aWwuU3RhY2s7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTXVsdGlTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JRmllbGQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSU1ldGhvZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JVHlwZTsKLQotLyoqCi0gKiBAYXV0aG9yIGNicmVhbGV5Ci0gKiBUaGlzIG9iamVjdCBtYW5hZ2VzIGEgc2V0IG9mIHJ1bGVzLgotICogUnVsZXMgaW4gdGhlIHNldCBtYXkgYmUgZW5hYmxlZCBvciBkaXNhYmxlZC4KLSAqLwotcHVibGljIGNsYXNzIEphdmFXZWJTZXJ2aWNlUnVsZVNldAotewotCXByaXZhdGUgU2V0IGVuYWJsZWRSdWxlc18gPSBuZXcgSGFzaFNldCgpOwotCXByaXZhdGUgU2V0IGRpc2FibGVkUnVsZXNfID0gbmV3IEhhc2hTZXQoKTsKLQkKLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3LCBpbml0aWFsbHkgZW1wdHkgc2V0IG9mIHJ1bGVzLgotCSAqLwotCXB1YmxpYyBKYXZhV2ViU2VydmljZVJ1bGVTZXQgKCkKLQl7Ci0JCS8vIE5vdGhpbmcgdG8gZG8uCi0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBzZXQgb2YgcnVsZXMgaW5pdGlhbGl6ZWQgd2l0aCB0aG9zZQotCSAqIGZyb20gdGhlIGdpdmVuIGFycmF5IG9mIDxjb2RlPnJ1bGVzPC9jb2RlPi4KLQkgKiBAcGFyYW0gcnVsZXMgQW4gYXJyYXkgb2YgcnVsZXMgdG8gYWRkLgotCSAqLwotCXB1YmxpYyBKYXZhV2ViU2VydmljZVJ1bGVTZXQgKCBJSmF2YVdlYlNlcnZpY2VSdWxlW10gcnVsZXMgKQotCXsKLQkJYWRkUnVsZXMocnVsZXMpOwotCX0KLQkKLQkvKioKLQkgKiBBZGRzIGEgPGNvZGU+cnVsZTwvY29kZT4gdG8gdGhlIHNldC4KLQkgKiBSdWxlcyBhZGRlZCB0byB0aGUgc2V0IGFyZSBpbml0aWFsbHkgZW5hYmxlZC4KLQkgKiBAcGFyYW0gcnVsZSBUaGUgcnVsZSB0byBhZGQuCi0JICovCi0JcHVibGljIHZvaWQgYWRkUnVsZSAoIElKYXZhV2ViU2VydmljZVJ1bGUgcnVsZSApCi0JewotCQllbmFibGVkUnVsZXNfLmFkZChydWxlKTsKLQl9Ci0JCi0JLyoqCi0JICogQWRkcyBzZXZlcmFsIDxjb2RlPnJ1bGVzPC9jb2RlPiB0byB0aGUgc2V0LgotCSAqIFJ1bGVzIGFkZGVkIHRvIHRoZSBzZXQgYXJlIGluaXRpYWxseSBlbmFibGVkLgotCSAqIEBwYXJhbSBydWxlcyBUaGUgYXJyYXkgb2YgcnVsZXMgdG8gYWRkLgotCSAqLwotCXB1YmxpYyB2b2lkIGFkZFJ1bGVzICggSUphdmFXZWJTZXJ2aWNlUnVsZVtdIHJ1bGVzICkKLQl7Ci0JCWVuYWJsZWRSdWxlc18uYWRkQWxsKEFycmF5cy5hc0xpc3QocnVsZXMpKTsKLQl9Ci0JCi0JLyoqCi0JICogTWFya3MgdGhlIGdpdmVuIDxjb2RlPnJ1bGU8L2NvZGU+IGFzIGRpc2FibGVkIG9yIGVuYWJsZWQuCi0JICogVGhpcyBtZXRob2QgaGFzIG5vIGVmZmVjdCBpZiB0aGUgcnVsZSBpcyBub3QgYWxyZWFkeSBpbgotCSAqIHRoZSBzZXQsIGluIG90aGVyIHdvcmRzLCB0aGlzIG1ldGhvZCB3aWxsIG5vdCBoYXZlIHRoZQotCSAqIHNpZGUgZWZmZWN0IG9mIGFkZGluZyBhIHJ1bGUgdG8gdGhlIHNldC4KLQkgKiBAcGFyYW0gcnVsZSBUaGUgcnVsZSB0byBkaXNhYmxlIG9yIGVuYWJsZS4KLQkgKiBAcGFyYW0gZGlzYWJsZWQgVHJ1ZSB0byBkaXNhYmxlIHRoZSBydWxlIG9yIGZhbHNlIHRvIGVuYWJsZSBpdC4KLQkgKiBAcmV0dXJuIFRydWUgaWYgYSBjaGFuZ2UgaW4gc3RhdHVzIHdhcyBhY3R1YWxseSBtYWRlLgotCSAqLwotCXB1YmxpYyBib29sZWFuIHNldFJ1bGVEaXNhYmxlZCAoIElKYXZhV2ViU2VydmljZVJ1bGUgcnVsZSwgYm9vbGVhbiBkaXNhYmxlZCApCi0JewotCQlpZiAoZGlzYWJsZWQpCi0JCXsKLQkJCWlmIChlbmFibGVkUnVsZXNfLnJlbW92ZShydWxlKSkKLQkJCXsKLQkJCQlkaXNhYmxlZFJ1bGVzXy5hZGQocnVsZSk7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlpZiAoZGlzYWJsZWRSdWxlc18ucmVtb3ZlKHJ1bGUpKQotCQkJewotCQkJCWVuYWJsZWRSdWxlc18uYWRkKHJ1bGUpOwotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcnVsZXMgaW4gdGhlIHNldC4KLQkgKiBAcmV0dXJuIFRoZSBudW1iZXIgb2YgcnVsZXMgaW4gdGhlIHNldC4KLQkgKi8KLQlwdWJsaWMgaW50IHNpemUgKCkKLQl7Ci0JCXJldHVybiBlbmFibGVkUnVsZXNfLnNpemUoKSArIGRpc2FibGVkUnVsZXNfLnNpemUoKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGVuYWJsZWQgcnVsZXMgaW4gdGhlIHNldC4KLQkgKiBAcmV0dXJuIFRoZSBudW1iZXIgb2YgZW5hYmxlZCBydWxlcyBpbiB0aGUgc2V0LgotCSAqLwotCXB1YmxpYyBpbnQgbnVtYmVyRW5hYmxlZCAoKQotCXsKLQkJcmV0dXJuIGVuYWJsZWRSdWxlc18uc2l6ZSgpOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGlzYWJsZWQgcnVsZXMgaW4gdGhlIHNldC4KLQkgKiBAcmV0dXJuIFRoZSBudW1iZXIgb2YgZGlzYWJsZWQgcnVsZXMgaW4gdGhlIHNldC4KLQkgKi8KLQlwdWJsaWMgaW50IG51bWJlckRpc2FibGVkICgpCi0JewotCQlyZXR1cm4gZGlzYWJsZWRSdWxlc18uc2l6ZSgpOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIGFuIGFycmF5IG9mIGFsbCBjdXJyZW50bHkgZW5hYmxlZCBydWxlcyBmcm9tIHRoZSBzZXQuCi0JICogQHJldHVybiBBbiBhcnJheSBvZiBhbGwgY3VycmVudGx5IGVuYWJsZWQgcnVsZXMgZnJvbSB0aGUgc2V0LgotCSAqLwotCXB1YmxpYyBJSmF2YVdlYlNlcnZpY2VSdWxlW10gZ2V0RW5hYmxlZFJ1bGVzICgpCi0JewotCQlyZXR1cm4gKElKYXZhV2ViU2VydmljZVJ1bGVbXSllbmFibGVkUnVsZXNfLnRvQXJyYXkobmV3IElKYXZhV2ViU2VydmljZVJ1bGVbMF0pOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIGFuIGFycmF5IG9mIGFsbCBjdXJyZW50bHkgZGlzYWJsZWQgcnVsZXMgZnJvbSB0aGUgc2V0LgotCSAqIEByZXR1cm4gQW4gYXJyYXkgb2YgYWxsIGN1cnJlbnRseSBkaXNhYmxlZCBydWxlcyBmcm9tIHRoZSBzZXQuCi0JICovCi0JcHVibGljIElKYXZhV2ViU2VydmljZVJ1bGVbXSBnZXREaXNhYmxlZFJ1bGVzICgpCi0JewotCQlyZXR1cm4gKElKYXZhV2ViU2VydmljZVJ1bGVbXSlkaXNhYmxlZFJ1bGVzXy50b0FycmF5KG5ldyBJSmF2YVdlYlNlcnZpY2VSdWxlWzBdKTsKLQl9Ci0JCi0JLyoqCi0JICogSW5pdGlhbGl6ZXMgYWxsIHJ1bGVzIGluIHRoZSBzZXQgYnkgY2FsbGluZwotCSAqIHRoZWlyIGluaXQoKSBtZXRob2RzIHdpdGggdGhlIGdpdmVuIGVuZ2luZS4KLQkgKiBAcGFyYW0gZW5naW5lIFRoZSBlbmdpbmUgaW5pdGlhbGl6aW5nIAotCSAqLwotCXB1YmxpYyB2b2lkIGluaXQgKCBJSmF2YVdlYlNlcnZpY2VSdWxlRW5naW5lIGVuZ2luZSApCi0JewotCQlJdGVyYXRvciBpID0gZW5hYmxlZFJ1bGVzXy5pdGVyYXRvcigpOwotCQl3aGlsZSAoaS5oYXNOZXh0KCkpCi0JCXsKLQkJCUlKYXZhV2ViU2VydmljZVJ1bGUgcnVsZSA9IChJSmF2YVdlYlNlcnZpY2VSdWxlKWkubmV4dCgpOwotCQkJcnVsZS5pbml0KGVuZ2luZSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBWaXNpdHMgdGhlICJ2aXNpdENsYXNzIiBtZXRob2Qgb2YgYWxsIHJ1bGVzIGluIHRoZSBzZXQuIAotCSAqIEBwYXJhbSBqZHRDbGFzcyBUaGUgSkRUIElUeXBlIGJlaW5nIHZpc2l0ZWQuCi0JICogQHBhcmFtIHBlYW51dFRyYWlsIFRoZSBzdGFjayBvZiBvYmplY3RzIHVwIHRvIHRoZSByb290LgotCSAqLwotCXB1YmxpYyB2b2lkIHZpc2l0Q2xhc3MgKCBJVHlwZSBqZHRDbGFzcywgU3RhY2sgcGVhbnV0VHJhaWwgKQotCXsKLQkJSXRlcmF0b3IgaSA9IGVuYWJsZWRSdWxlc18uaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGkuaGFzTmV4dCgpKQotCQl7Ci0JCQlJSmF2YVdlYlNlcnZpY2VSdWxlIHJ1bGUgPSAoSUphdmFXZWJTZXJ2aWNlUnVsZSlpLm5leHQoKTsKLQkJCXJ1bGUudmlzaXRDbGFzcyhqZHRDbGFzcyxwZWFudXRUcmFpbCk7Ci0JCX0JCQotCX0KLQotCS8qKgotCSAqIFZpc2l0cyB0aGUgInZpc2l0RXhjZXB0aW9uIiBtZXRob2Qgb2YgYWxsIHJ1bGVzIGluIHRoZSBzZXQuIAotCSAqIEBwYXJhbSBqZHRDbGFzcyBUaGUgSkRUIElUeXBlIGJlaW5nIHZpc2l0ZWQuCi0JICogQHBhcmFtIHBlYW51dFRyYWlsIFRoZSBzdGFjayBvZiBvYmplY3RzIHVwIHRvIHRoZSByb290LgotCSAqLwotCXB1YmxpYyB2b2lkIHZpc2l0RXhjZXB0aW9uICggSVR5cGUgamR0Q2xhc3MsIFN0YWNrIHBlYW51dFRyYWlsICkKLQl7Ci0JCUl0ZXJhdG9yIGkgPSBlbmFibGVkUnVsZXNfLml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChpLmhhc05leHQoKSkKLQkJewotCQkJSUphdmFXZWJTZXJ2aWNlUnVsZSBydWxlID0gKElKYXZhV2ViU2VydmljZVJ1bGUpaS5uZXh0KCk7Ci0JCQlydWxlLnZpc2l0RXhjZXB0aW9uKGpkdENsYXNzLHBlYW51dFRyYWlsKTsKLQkJfQotCX0KLQotCi0JLyoqCi0JICogVmlzaXRzIHRoZSAidmlzaXRGaWVsZCIgbWV0aG9kIG9mIGFsbCBydWxlcyBpbiB0aGUgc2V0LiAKLQkgKiBAcGFyYW0gamR0Q2xhc3MgVGhlIEpEVCBJRmllbGQgYmVpbmcgdmlzaXRlZC4KLQkgKiBAcGFyYW0gcGVhbnV0VHJhaWwgVGhlIHN0YWNrIG9mIG9iamVjdHMgdXAgdG8gdGhlIHJvb3QuCi0JICovCi0JcHVibGljIHZvaWQgdmlzaXRGaWVsZCAoIElGaWVsZCBqZHRGaWVsZCwgU3RhY2sgcGVhbnV0VHJhaWwgKQotCXsKLQkJSXRlcmF0b3IgaSA9IGVuYWJsZWRSdWxlc18uaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGkuaGFzTmV4dCgpKQotCQl7Ci0JCQlJSmF2YVdlYlNlcnZpY2VSdWxlIHJ1bGUgPSAoSUphdmFXZWJTZXJ2aWNlUnVsZSlpLm5leHQoKTsKLQkJCXJ1bGUudmlzaXRGaWVsZChqZHRGaWVsZCxwZWFudXRUcmFpbCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBWaXNpdHMgdGhlICJ2aXNpdFByb3BlcnR5IiBtZXRob2Qgb2YgYWxsIHJ1bGVzIGluIHRoZSBzZXQuIAotCSAqIEBwYXJhbSBqZHRDbGFzcyBUaGUgSUphdmFCZWFuUHJvcGVydHkgYmVpbmcgdmlzaXRlZC4KLQkgKiBAcGFyYW0gcGVhbnV0VHJhaWwgVGhlIHN0YWNrIG9mIG9iamVjdHMgdXAgdG8gdGhlIHJvb3QuCi0JICovCi0JcHVibGljIHZvaWQgdmlzaXRQcm9wZXJ0eSAoIElKYXZhQmVhblByb3BlcnR5IGJlYW5Qcm9wZXJ0eSwgU3RhY2sgcGVhbnV0VHJhaWwgKQotCXsKLQkJSXRlcmF0b3IgaSA9IGVuYWJsZWRSdWxlc18uaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGkuaGFzTmV4dCgpKQotCQl7Ci0JCQlJSmF2YVdlYlNlcnZpY2VSdWxlIHJ1bGUgPSAoSUphdmFXZWJTZXJ2aWNlUnVsZSlpLm5leHQoKTsKLQkJCXJ1bGUudmlzaXRQcm9wZXJ0eShiZWFuUHJvcGVydHkscGVhbnV0VHJhaWwpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogVmlzaXRzIHRoZSAidmlzaXRNZXRob2QiIG1ldGhvZCBvZiBhbGwgcnVsZXMgaW4gdGhlIHNldC4gCi0JICogQHBhcmFtIGpkdENsYXNzIFRoZSBKRFQgSU1ldGhvZCBiZWluZyB2aXNpdGVkLgotCSAqIEBwYXJhbSBwZWFudXRUcmFpbCBUaGUgc3RhY2sgb2Ygb2JqZWN0cyB1cCB0byB0aGUgcm9vdC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB2aXNpdE1ldGhvZCAoIElNZXRob2QgamR0TWV0aG9kLCBTdGFjayBwZWFudXRUcmFpbCApCi0JewotCQlJdGVyYXRvciBpID0gZW5hYmxlZFJ1bGVzXy5pdGVyYXRvcigpOwotCQl3aGlsZSAoaS5oYXNOZXh0KCkpCi0JCXsKLQkJCUlKYXZhV2ViU2VydmljZVJ1bGUgcnVsZSA9IChJSmF2YVdlYlNlcnZpY2VSdWxlKWkubmV4dCgpOwotCQkJcnVsZS52aXNpdE1ldGhvZChqZHRNZXRob2QscGVhbnV0VHJhaWwpOwotCQl9Ci0JfQotCQotCS8qKgotCSAqIENvbGxlY3RzIHRoZSByZXN1bHRzIG9mIGFsbCBydWxlcyBpbiB0aGUgc2V0IHRvZ2V0aGVyLgotCSAqIElmIG9uZSBvciBtb3JlIHdhcm5pbmdzIG9yIGVycm9ycyBhcmUgZm91bmQsIHJldHVybnMKLQkgKiBhIHN0YXR1cyBvYmplY3Qgd2hvc2UgdG9wIGxldmVsIG1lc3NhZ2UgaXMgdGhlIHJvb3QKLQkgKiBtZXNzYWdlIHBhc3NlZCB0byB0aGlzIG1lc3NhZ2UsIG90aGVyd2lzZSwgcmV0dXJucyBhCi0JICogYmFzaWMgIk9LIiBzdGF0dXMuCi0JICogQHBhcmFtIHJvb3RNZXNzYWdlIFRoZSB3YXJuaW5nL2Vycm9yIG1lc3NhZ2UgdG8gYWN0IGFzCi0JICogdGhlIHJvb3QgbWVzc2FnZSBpZiBuZWNlc3NhcnkgKGllLiBpZiBhdCBsZWFzdCBvbmUgcnVsZQotCSAqIGluIHRoZSBzZXQgcmVwb3J0ZWQgYXQgbGVhc3Qgb25lIHdhcm5pbmcvZXJyb3IpLgotCSAqIEByZXR1cm4gVGhlIGNvbGxlY3RpdmUgc3RhdHVzLgotCSAqLwotCXB1YmxpYyBJU3RhdHVzIGdldFJlc3VsdHMgKCBTdHJpbmcgcm9vdE1lc3NhZ2UgKQotCXsKLQkJTGlzdCBsaXN0ID0gbmV3IExpbmtlZExpc3QoKTsKLQkJSXRlcmF0b3IgZSA9IGVuYWJsZWRSdWxlc18uaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGUuaGFzTmV4dCgpKQotCQl7Ci0JCQlJSmF2YVdlYlNlcnZpY2VSdWxlIHJ1bGUgPSAoSUphdmFXZWJTZXJ2aWNlUnVsZSllLm5leHQoKTsKLQkJCUlTdGF0dXMgc3RhdHVzID0gcnVsZS5nZXRSZXN1bHRzKCk7Ci0JCQlpZiAoIXN0YXR1cy5pc09LKCkpCi0JCQl7Ci0JCQkJbGlzdC5hZGQoc3RhdHVzKTsKLQkJCX0KLQkJfQotCQlpZiAobGlzdC5zaXplKCkgPiAwKQotCQl7Ci0JCQlNdWx0aVN0YXR1cyBtdWx0aVN0YXR1cyA9IG5ldyBNdWx0aVN0YXR1cygib3JnLmVjbGlwc2UuanN0LndzIiwwLHJvb3RNZXNzYWdlLG51bGwpOwotCQkJSXRlcmF0b3IgbCA9IGxpc3QuaXRlcmF0b3IoKTsKLQkJCXdoaWxlIChsLmhhc05leHQoKSkKLQkJCXsKLQkJCQlJU3RhdHVzIHN0YXR1cyA9IChJU3RhdHVzKWwubmV4dCgpOwotCQkJCW11bHRpU3RhdHVzLmFkZEFsbChzdGF0dXMpOwotCQkJfQotCQkJcmV0dXJuIG11bHRpU3RhdHVzOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJcmV0dXJuIG5ldyBTdGF0dXMoSVN0YXR1cy5PSywib3JnLmVjbGlwc2UuanN0LndzIiwwLCIiLG51bGwpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9ydWxlcy9KQVhSUENSdWxlMDAwMS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9ydWxlcy9KQVhSUENSdWxlMDAwMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDQxMDc5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvcnVsZXMvSkFYUlBDUnVsZTAwMDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQxOSAgIDEzMjkwNSBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleSAgICAgICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UucnVsZXM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuU3RhY2s7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFNb2RlbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuV1NQbHVnaW5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSkRUUmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLkphdmFXZWJTZXJ2aWNlUnVsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotCi0vKioKLSAqIFRoaXMgcnVsZSBjaGVja3MgaWYgYSBzZXJ2aWNlIGNsYXNzCi0gKiBpcyBwdWJsaWMgZGVmYXVsdCBjb25zdHJ1Y3RhYmxlLgotICovCi1wdWJsaWMgY2xhc3MgSkFYUlBDUnVsZTAwMDEgZXh0ZW5kcyBKYXZhV2ViU2VydmljZVJ1bGUKLXsKLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMgcnVsZS4KLQkgKi8KLQlwdWJsaWMgSkFYUlBDUnVsZTAwMDEgKCkKLQl7Ci0JCWlkXyA9IDE7Ci0JCW5hbWVzcGFjZV8gPSAiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9vcmcuZWNsaXBzZS5qc3Qud3MvamF4cnBjLzEuMSI7Ci0JCW5hbWVfID0gbnVsbDsKLQkJZGVzY3JpcHRpb25fID0gbnVsbDsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSmF2YVdlYlNlcnZpY2VSdWxlI3Zpc2l0Q2xhc3Mob3JnLmVjbGlwc2UuamR0LmNvcmUuSVR5cGUsIGphdmEudXRpbC5TdGFjaykKLQkgKi8KLQlwdWJsaWMgdm9pZCB2aXNpdENsYXNzICggSVR5cGUgamR0Q2xhc3MsIFN0YWNrIHBlYW51dFRyYWlsICkKLQl7Ci0JCS8vIEFuIGVtcHR5IHBlYW51dCB0cmFpbCBpbXBsaWVzIHRoaXMgaXMgdGhlIHJvb3QKLQkJLy8gY2xhc3Mgb3IgSkFYLVJQQyBzZXJ2aWNlIGNsYXNzLgotCQlpZiAocGVhbnV0VHJhaWwuc2l6ZSgpID09IDApCi0JCXsKLQkJCXRyeQotCQkJewotCQkJCUpEVFJlc29sdmVyIHJlc29sdmVyID0gZW5naW5lXy5nZXRKRFRSZXNvbHZlcigpOwotCQkJCWlmICghcmVzb2x2ZXIuaXNDb25zdHJ1Y3RhYmxlKGpkdENsYXNzKSB8fCByZXNvbHZlci5pc0ludGVyZmFjZShqZHRDbGFzcykgfHwgcmVzb2x2ZXIuaXNBYnN0cmFjdChqZHRDbGFzcykpCi0JCQkJewotCQkJCQlTdHJpbmcgbWVzc2FnZSA9IE5MUy5iaW5kKFdTUGx1Z2luTWVzc2FnZXMuTVNHX0pBWFJQQzExX1JVTEVfMDAwMSxqZHRDbGFzcy5nZXRGdWxseVF1YWxpZmllZE5hbWUoKSk7Ci0JCQkJCXN0YXR1c0xpc3RfLmFkZChuZXcgU3RhdHVzKElTdGF0dXMuV0FSTklORywib3JnLmVjbGlwc2UuanN0LndzIiwwLG1lc3NhZ2UsbnVsbCkpOwotCQkJCX0KLQkJCX0KLQkJCWNhdGNoIChKYXZhTW9kZWxFeGNlcHRpb24gZSkKLQkJCXsKLQkJCQlzdGF0dXNMaXN0Xy5hZGQobmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCJvcmcuZWNsaXBzZS5qc3Qud3MiLDAsIkludGVybmFsIGVycm9yIixlKSk7Ci0JCQl9Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL3J1bGVzL0pBWFJQQ1J1bGUwMDAyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL3J1bGVzL0pBWFJQQ1J1bGUwMDAyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwNDljMzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9ydWxlcy9KQVhSUENSdWxlMDAwMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDE5ICAgMTMyOTA1IGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5ICAgICAgICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5ydWxlczsKLQotaW1wb3J0IGphdmEudXRpbC5TdGFjazsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YU1vZGVsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5XU1BsdWdpbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5KRFRSZXNvbHZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSmF2YVdlYlNlcnZpY2VSdWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLS8qKgotICogVGhpcyBydWxlIGNoZWNrcyBpZiBhIHZhbHVlIHR5cGUgY2xhc3MKLSAqIGlzIHB1YmxpYyBkZWZhdWx0IGNvbnN0cnVjdGFibGUuCi0gKi8KLXB1YmxpYyBjbGFzcyBKQVhSUENSdWxlMDAwMiBleHRlbmRzIEphdmFXZWJTZXJ2aWNlUnVsZQotewotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcyBydWxlLgotCSAqLwotCXB1YmxpYyBKQVhSUENSdWxlMDAwMiAoKQotCXsKLQkJaWRfID0gMjsKLQkJbmFtZXNwYWNlXyA9ICJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL29yZy5lY2xpcHNlLmpzdC53cy9qYXhycGMvMS4xIjsKLQkJbmFtZV8gPSBudWxsOwotCQlkZXNjcmlwdGlvbl8gPSBudWxsOwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5KYXZhV2ViU2VydmljZVJ1bGUjdmlzaXRDbGFzcyhvcmcuZWNsaXBzZS5qZHQuY29yZS5JVHlwZSwgamF2YS51dGlsLlN0YWNrKQotCSAqLwotCXB1YmxpYyB2b2lkIHZpc2l0Q2xhc3MgKCBJVHlwZSBqZHRDbGFzcywgU3RhY2sgcGVhbnV0VHJhaWwgKQotCXsKLQkJLy8gQW4gZW1wdHkgcGVhbnV0IHRyYWlsIGltcGxpZXMgdGhpcyBpcyB0aGUgcm9vdCBjbGFzcwotCQkvLyByb290IGNsYXNzIG9yIEpBWC1SUEMgc2VydmljZSBjbGFzcywgd2hlcmVhcyBhIG5vbi1lbXB0eQotCQkvLyBwZWFudXQgdHJhaWwgaW1wbGllcyB0aGlzIGlzIGEgY2xhc3MgZnJvbSBhIG1ldGhvZCwgZmllbGQKLQkJLy8gb3IgcHJvcGVydHkgc2lnbmF0dXJlLiBJbiB0aGUgZm9ybWVyIGNhc2UsIHJlbWVtYmVyIHRoZQotCQkvLyBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgdHlwZSBqdXN0IGluIGNhc2Ugd2UgbmVlZCBpdCBmb3IgdGhlCi0JCS8vIGxhdHRlciBjYXNlLgotCQlpZiAocGVhbnV0VHJhaWwuc2l6ZSgpID09IDApCi0JCXsKLQkJCXNlcnZpY2VDbGFzc05hbWVfID0gamR0Q2xhc3MuZ2V0RnVsbHlRdWFsaWZpZWROYW1lKCk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQl0cnkKLQkJCXsKLQkJCQlKRFRSZXNvbHZlciByZXNvbHZlciA9IGVuZ2luZV8uZ2V0SkRUUmVzb2x2ZXIoKTsKLQkJCQlTdHJpbmcgcW5hbWUgPSBqZHRDbGFzcy5nZXRGdWxseVF1YWxpZmllZE5hbWUoKTsKLQkJCQlpZiAoIXJlc29sdmVyLmlzU3RhbmRhcmRUeXBlKHFuYW1lKSkKLQkJCQl7IAotCQkJCQlpZiAoIXJlc29sdmVyLmlzQ29uc3RydWN0YWJsZShqZHRDbGFzcykgfHwgcmVzb2x2ZXIuaXNJbnRlcmZhY2UoamR0Q2xhc3MpIHx8IHJlc29sdmVyLmlzQWJzdHJhY3QoamR0Q2xhc3MpKQotCQkJCQl7Ci0JCQkJCQlTdHJpbmcgbWVzc2FnZSA9IE5MUy5iaW5kKFdTUGx1Z2luTWVzc2FnZXMuTVNHX0pBWFJQQzExX1JVTEVfMDAwMixxbmFtZSxzZXJ2aWNlQ2xhc3NOYW1lXyk7Ci0JCQkJCQlzdGF0dXNMaXN0Xy5hZGQobmV3IFN0YXR1cyhJU3RhdHVzLldBUk5JTkcsIm9yZy5lY2xpcHNlLmpzdC53cyIsMCxtZXNzYWdlLG51bGwpKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWNhdGNoIChKYXZhTW9kZWxFeGNlcHRpb24gZSkKLQkJCXsKLQkJCQlzdGF0dXNMaXN0Xy5hZGQobmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCJvcmcuZWNsaXBzZS5qc3Qud3MiLDAsIkludGVybmFsIGVycm9yIixlKSk7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JcHJpdmF0ZSBTdHJpbmcgc2VydmljZUNsYXNzTmFtZV87Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL3J1bGVzL0pBWFJQQ1J1bGUwMDAzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL3J1bGVzL0pBWFJQQ1J1bGUwMDAzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjNjViY2QuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9ydWxlcy9KQVhSUENSdWxlMDAwMy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQxOSAgIDEzMjkwNSBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleSAgICAgICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UucnVsZXM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci1pbXBvcnQgamF2YS51dGlsLlN0YWNrOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JTWV0aG9kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFNb2RlbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuV1NQbHVnaW5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSUphdmFXZWJTZXJ2aWNlUnVsZUVuZ2luZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSmF2YVdlYlNlcnZpY2VSdWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLS8qKgotICogVGhpcyBydWxlIHZlcmlmaWVzIHRoYXQgYSBzZXJ2aWNlIGNsYXNzIGhhcyBubyBvdmVybG9hZGVkIG1ldGhvZHMuCi0gKi8KLXB1YmxpYyBjbGFzcyBKQVhSUENSdWxlMDAwMyBleHRlbmRzIEphdmFXZWJTZXJ2aWNlUnVsZQotewotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcyBydWxlLgotCSAqLwotCXB1YmxpYyBKQVhSUENSdWxlMDAwMyAoKQotCXsKLQkJaWRfID0gMzsKLQkJbmFtZXNwYWNlXyA9ICJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL29yZy5lY2xpcHNlLmpzdC53cy9qYXhycGMvMS4xIjsKLQkJbmFtZV8gPSBudWxsOwotCQlkZXNjcmlwdGlvbl8gPSBudWxsOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSmF2YVdlYlNlcnZpY2VSdWxlI2luaXQob3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLklKYXZhV2ViU2VydmljZVJ1bGVFbmdpbmUpCi0JICovCi0JcHVibGljIHZvaWQgaW5pdCAoIElKYXZhV2ViU2VydmljZVJ1bGVFbmdpbmUgZW5naW5lICkKLQl7Ci0JCXN1cGVyLmluaXQoZW5naW5lKTsKLQkJbWV0aG9kTmFtZXNfID0gbmV3IEhhc2hNYXAoKTsKLQkJb3ZlcmxvYWRlZE1ldGhvZE5hbWVzXyA9IG5ldyBIYXNoU2V0KCk7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5KYXZhV2ViU2VydmljZVJ1bGUjdmlzaXRDbGFzcyhvcmcuZWNsaXBzZS5qZHQuY29yZS5JVHlwZSwgamF2YS51dGlsLlN0YWNrKQotCSAqLwotCXB1YmxpYyB2b2lkIHZpc2l0Q2xhc3MgKCBJVHlwZSBqZHRDbGFzcywgU3RhY2sgcGVhbnV0VHJhaWwgKQotCXsKLQkJLy8KLQkJLy8gQW4gZW1wdHkgcGVhbnV0IHRyYWlsIGltcGxpZXMgdGhpcyBpcyB0aGUgcm9vdAotCQkvLyBjbGFzcywgYWthLiBKQVgtUlBDIHNlcnZpY2UgY2xhc3MuIFB1dCBhc2lkZQotCQkvLyB0aGUgY2xhc3MgbmFtZSBpbiBjYXNlIHZpc2l0TWV0aG9kKCkgbmVlZHMgaXQuCi0JCS8vCi0JCWlmIChwZWFudXRUcmFpbC5zaXplKCkgPT0gMCkKLQkJewotCQkJc2VydmljZUNsYXNzTmFtZV8gPSBqZHRDbGFzcy5nZXRGdWxseVF1YWxpZmllZE5hbWUoKTsKLQkJfQotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5KYXZhV2ViU2VydmljZVJ1bGUjdmlzaXRNZXRob2Qob3JnLmVjbGlwc2UuamR0LmNvcmUuSU1ldGhvZCwgamF2YS51dGlsLlN0YWNrKQotCSAqLwotCXB1YmxpYyB2b2lkIHZpc2l0TWV0aG9kICggSU1ldGhvZCBqZHRNZXRob2QsIFN0YWNrIHBlYW51dFRyYWlsICkKLQl7Ci0JCS8vCi0JCS8vIEEgcGVhbnV0IHRyYWlsIG9mIGxlbmd0aCBvbmUgaW1wbGllcyB0aGlzIGlzIGEgbWV0aG9kCi0JCS8vIGJlbG9uZ2luZyB0byB0aGUgcm9vdCBjbGFzcywgYWthLiBKQVgtUlBDIHNlcnZpY2UgY2xhc3MuCi0JCS8vCi0JCWlmIChwZWFudXRUcmFpbC5zaXplKCkgPT0gMSkKLQkJewotCQkJdHJ5Ci0JCQl7Ci0JCQkJLy8KLQkJCQkvLyBJZiB3ZSBoYXZlIGVuY291bnRlcmVkIHRoaXMgbWV0aG9kIGFscmVhZHkgYnV0IGhhdmVuJ3QKLQkJCQkvLyByZXBvcnRlZCB0aGUgb3ZlcmxvYWQgY29uZGl0aW9uLCByZXBvcnQgaXQuCi0JCQkJLy8KLQkJCQlTdHJpbmcgbWV0aG9kTmFtZSA9IGpkdE1ldGhvZC5nZXRFbGVtZW50TmFtZSgpOwotCQkJCVN0cmluZyBmaXJzdFBhcmFtZXRlclNpZ25hdHVyZSA9IChTdHJpbmcpbWV0aG9kTmFtZXNfLmdldChtZXRob2ROYW1lKTsKLQkJCQlTdHJpbmcgdGhpc1BhcmFtZXRlclNpZ25hdHVyZSA9IGZsYXR0ZW5lZFNpZ25hdHVyZU9mKGpkdE1ldGhvZCk7Ci0JCQkJaWYgKHRoaXNQYXJhbWV0ZXJTaWduYXR1cmUgIT0gbnVsbCkKLQkJCQl7Ci0JCQkJCWlmIChmaXJzdFBhcmFtZXRlclNpZ25hdHVyZSAhPSBudWxsKQotCQkJCQl7Ci0JCQkJCQkvLwotCQkJCQkJLy8gSWYgd2UgaGF2ZSBlbmNvdW50ZXJlZCB0aGlzIG1ldGhvZCdzIG5hbWUgYWxyZWFkeSwKLQkJCQkJCS8vIGJ1dCBoYXZlIG5vdCB5ZXQgZGV0ZXJtaW5lZCBpZiBpdCBpcyBvdmVybG9hZGVkLAotCQkJCQkJLy8gdGhlbiBjb21wYXJlIHRoaXMgbWV0aG9kJ3MgcGFyYW1ldGVyIHNpZ25hdHVyZSB3aXRoCi0JCQkJCQkvLyB0aGF0IG9mIHRoZSAiZmlyc3Qgc2lnbmF0dXJlIiBvZiB0aGUgbWV0aG9kIG5hbWUuCi0JCQkJCQkvLyBUaGUgbW9tZW50IHdlIGZpbmQgYSBzZWNvbmQgc2lnbmF0dXJlIGZvciBhIGdpdmVuCi0JCQkJCQkvLyBtZXRob2QgbmFtZSwgd2UgaGF2ZSBhbiBvdmVybG9hZCBjb25kaXRpb24uCi0JCQkJCQkvLwotCQkJCQkJaWYgKCFvdmVybG9hZGVkTWV0aG9kTmFtZXNfLmNvbnRhaW5zKG1ldGhvZE5hbWUpICYmICF0aGlzUGFyYW1ldGVyU2lnbmF0dXJlLmVxdWFscyhmaXJzdFBhcmFtZXRlclNpZ25hdHVyZSkpCi0JCQkJCQl7Ci0JCQkJCQkJb3ZlcmxvYWRlZE1ldGhvZE5hbWVzXy5hZGQobWV0aG9kTmFtZSk7Ci0JCQkJCQkJU3RyaW5nIG1lc3NhZ2UgPSBOTFMuYmluZChXU1BsdWdpbk1lc3NhZ2VzLk1TR19KQVhSUEMxMV9SVUxFXzAwMDMsbWV0aG9kTmFtZSxzZXJ2aWNlQ2xhc3NOYW1lXyk7Ci0JCQkJCQkJc3RhdHVzTGlzdF8uYWRkKG5ldyBTdGF0dXMoSVN0YXR1cy5XQVJOSU5HLCJvcmcuZWNsaXBzZS5qc3Qud3MiLDAsbWVzc2FnZSxudWxsKSk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJZWxzZQotCQkJCQl7Ci0JCQkJCQkvLwotCQkJCQkJLy8gSWYgd2UgaGF2ZSByZWNvcmRlZCBubyBzaWduYXR1cmUgZm9yIHRoZSBnaXZlbiBtZXRob2QKLQkJCQkJCS8vIG5hbWUgKGllLiB3ZSBoYXZlIG5vdCBlbmNvdW50ZXJlZCB0aGUgbWV0aG9kIG5hbWUgeWV0KSwKLQkJCQkJCS8vIHRoZW4gcmVjb3JkIHRoaXMgb25lLiBBbnkgImZpcnN0IHNpZ25hdHVyZSIgd2lsbCBkby4KLQkJCQkJCS8vCi0JCQkJCQltZXRob2ROYW1lc18ucHV0KG1ldGhvZE5hbWUsdGhpc1BhcmFtZXRlclNpZ25hdHVyZSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQljYXRjaCAoSmF2YU1vZGVsRXhjZXB0aW9uIGUpCi0JCQl7Ci0JCQkJLy8gRG8gbm90aGluZy4KLQkJCX0KLQkJfQotCX0KLQkKLQkvKgotCSAqIEdyYWJzIHRoZSB0eXBlcyBvZiB0aGUgcGFyYW1ldGVycyBvZiB0aGUgZ2l2ZW4gbWV0aG9kCi0JICogYW5kIGZsYXR0ZW5zIHRoZW4gaW50byBhIHNpbmdsZSBzdHJpbmcgc3VmZmljaWVudCB0bwotCSAqIGRpc3Rpbmd1aXNoIGJldHdlZW4gb3ZlcmxvYWRlZCB2cy4gb3ZlcnJpZGRlbiBtZXRob2RzLgotCSAqLwotCXByaXZhdGUgU3RyaW5nIGZsYXR0ZW5lZFNpZ25hdHVyZU9mICggSU1ldGhvZCBqZHRNZXRob2QgKQotCXRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24KLQl7Ci0JCVN0cmluZ1tdIHNpZ25hdHVyZXMgPSBlbmdpbmVfLmdldEpEVFJlc29sdmVyKCkuZ2V0UGFyYW1ldGVyVHlwZU5hbWVzKGpkdE1ldGhvZCk7Ci0JCVN0cmluZ0J1ZmZlciBmbGF0dGVuZWRTaWduYXR1cmUgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWZvciAoaW50IHM9MDsgczxzaWduYXR1cmVzLmxlbmd0aDsgcysrKQotCQl7Ci0JCQlmbGF0dGVuZWRTaWduYXR1cmUuYXBwZW5kKHNpZ25hdHVyZXNbc10pLmFwcGVuZCgiLCIpOwotCQl9Ci0JCXJldHVybiBmbGF0dGVuZWRTaWduYXR1cmUudG9TdHJpbmcoKTsKLQl9Ci0JCi0JcHJpdmF0ZSBNYXAgbWV0aG9kTmFtZXNfOwotCXByaXZhdGUgU2V0IG92ZXJsb2FkZWRNZXRob2ROYW1lc187Ci0JcHJpdmF0ZSBTdHJpbmcgc2VydmljZUNsYXNzTmFtZV87Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL3J1bGVzL0pBWFJQQ1J1bGUwMDA1LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL3J1bGVzL0pBWFJQQ1J1bGUwMDA1LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2NmNmN2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9ydWxlcy9KQVhSUENSdWxlMDAwNS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQxOSAgIDEzMjkwNSBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleSAgICAgICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UucnVsZXM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuU3RhY2s7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklNZXRob2Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YU1vZGVsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5XU1BsdWdpbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5JSmF2YVdlYlNlcnZpY2VSdWxlRW5naW5lOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5KRFRSZXNvbHZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSmF2YVdlYlNlcnZpY2VSdWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLS8qKgotICogVGhpcyBydWxlIHZlcmlmaWVzIHRoYXQgdGhlIG1ldGhvZHMgb2YgYSBzZXJ2aWNlIGNsYXNzCi0gKiB1c2VzIG9ubHkgSkFYLVJQQyBzdXBwb3J0ZWQgdHlwZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBKQVhSUENSdWxlMDAwNSBleHRlbmRzIEphdmFXZWJTZXJ2aWNlUnVsZQotewotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcyBydWxlLgotCSAqLwotCXB1YmxpYyBKQVhSUENSdWxlMDAwNSAoKQotCXsKLQkJaWRfID0gNTsKLQkJbmFtZXNwYWNlXyA9ICJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL29yZy5lY2xpcHNlLmpzdC53cy9qYXhycGMvMS4xIjsKLQkJbmFtZV8gPSBudWxsOwotCQlkZXNjcmlwdGlvbl8gPSBudWxsOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSmF2YVdlYlNlcnZpY2VSdWxlI2luaXQob3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLklKYXZhV2ViU2VydmljZVJ1bGVFbmdpbmUpCi0JICovCi0JcHVibGljIHZvaWQgaW5pdCAoIElKYXZhV2ViU2VydmljZVJ1bGVFbmdpbmUgZW5naW5lICkKLQl7Ci0JCXN1cGVyLmluaXQoZW5naW5lKTsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLkphdmFXZWJTZXJ2aWNlUnVsZSN2aXNpdENsYXNzKG9yZy5lY2xpcHNlLmpkdC5jb3JlLklUeXBlLCBqYXZhLnV0aWwuU3RhY2spCi0JICovCi0JcHVibGljIHZvaWQgdmlzaXRDbGFzcyAoIElUeXBlIGpkdENsYXNzLCBTdGFjayBwZWFudXRUcmFpbCApCi0JewotCQkvLwotCQkvLyBBbiBlbXB0eSBwZWFudXQgdHJhaWwgaW1wbGllcyB0aGlzIGlzIHRoZSByb290Ci0JCS8vIGNsYXNzLCBha2EuIEpBWC1SUEMgc2VydmljZSBjbGFzcy4gUHV0IGFzaWRlCi0JCS8vIHRoZSBjbGFzcyBuYW1lIGluIGNhc2UgdmlzaXRNZXRob2QoKSBuZWVkcyBpdC4KLQkJLy8KLQkJaWYgKHBlYW51dFRyYWlsLnNpemUoKSA9PSAwKQotCQl7Ci0JCQlzZXJ2aWNlQ2xhc3NOYW1lXyA9IGpkdENsYXNzLmdldEZ1bGx5UXVhbGlmaWVkTmFtZSgpOwotCQl9Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLkphdmFXZWJTZXJ2aWNlUnVsZSN2aXNpdE1ldGhvZChvcmcuZWNsaXBzZS5qZHQuY29yZS5JTWV0aG9kLCBqYXZhLnV0aWwuU3RhY2spCi0JICovCi0JcHVibGljIHZvaWQgdmlzaXRNZXRob2QgKCBJTWV0aG9kIGpkdE1ldGhvZCwgU3RhY2sgcGVhbnV0VHJhaWwgKQotCXsKLQkJLy8KLQkJLy8gQSBwZWFudXQgdHJhaWwgb2YgbGVuZ3RoIG9uZSBpbXBsaWVzIHRoaXMgaXMgYSBtZXRob2QKLQkJLy8gYmVsb25naW5nIHRvIHRoZSByb290IGNsYXNzLCBha2EuIEpBWC1SUEMgc2VydmljZSBjbGFzcy4KLQkJLy8KLQkJaWYgKHBlYW51dFRyYWlsLnNpemUoKSA9PSAxKQotCQl7Ci0JCQl0cnkKLQkJCXsKLQkJCQlTdHJpbmcgbWV0aG9kTmFtZSA9IGpkdE1ldGhvZC5nZXRFbGVtZW50TmFtZSgpOwotCQkJCS8vCi0JCQkJLy8gQ2hlY2sgdGhlIG1ldGhvZCByZXR1cm4gdHlwZSBmb3IgY29tcGxpYW5jZS4KLQkJCQkvLyBBbnkgSmF2YSBwcmltaXRpdmUgb3Igc3RhbmRhcmQgKCJqYXZhLiIgb3IgImphdmF4LiIpIHR5cGUKLQkJCQkvLyB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgSkFYLVJQQyB3aWxsIGdldCBmbGFnZ2VkLgotCQkJCS8vIEFueSBub24tcHJpbWl0aXZlIG9yIG5vbi1zdGFuZGFyZCB0eXBlIGlzIHByZXN1bWVkIHRvIGJlIGEKLQkJCQkvLyBwb3RlbnRpYWwgdmFsdWUgdHlwZSBhbmQgaXMgYnlwYXNzZWQgc2luY2UgdGhlIHJ1bGUgZW5naW5lCi0JCQkJLy8gd2lsbCBuYXZpZ2F0ZSBpbnRvIHRoZSBwb3RlbnRpYWwgdmFsdWUgdHlwZSdzIGNsYXNzLgotCQkJCS8vCi0JCQkJSkRUUmVzb2x2ZXIgcmVzb2x2ZXIgPSBlbmdpbmVfLmdldEpEVFJlc29sdmVyKCk7Ci0JCQkJU3RyaW5nIHJldHVyblR5cGVOYW1lID0gcmVzb2x2ZXIuZ2V0UmV0dXJuVHlwZU5hbWUoamR0TWV0aG9kKTsKLQkJCQlpZiAoKHJlc29sdmVyLmlzUHJpbWl0aXZlVHlwZShyZXR1cm5UeXBlTmFtZSkgfHwgcmVzb2x2ZXIuaXNTdGFuZGFyZFR5cGUocmV0dXJuVHlwZU5hbWUpKSAmJiAhcmVzb2x2ZXIuaXNKQVhSUENTdGFuZGFyZFR5cGUocmV0dXJuVHlwZU5hbWUpKQotCQkJCXsKLQkJCQkJU3RyaW5nIG1lc3NhZ2UgPSBOTFMuYmluZChXU1BsdWdpbk1lc3NhZ2VzLk1TR19KQVhSUEMxMV9SVUxFXzAwMDUsbmV3IFN0cmluZ1tdIHttZXRob2ROYW1lLHNlcnZpY2VDbGFzc05hbWVfLHJldHVyblR5cGVOYW1lfSk7Ci0JCQkJCXN0YXR1c0xpc3RfLmFkZChuZXcgU3RhdHVzKElTdGF0dXMuV0FSTklORywib3JnLmVjbGlwc2UuanN0LndzIiwwLG1lc3NhZ2UsbnVsbCkpOwotCQkJCX0KLQkJCQkvLwotCQkJCS8vIENoZWNrIHRoZSBtZXRob2QgcGFyYW1ldGVyIHR5cGVzIGZvciBjb21wbGlhbmNlLgotCQkJCS8vIFNhbWUgY29tbWVudCBhcyBhYm92ZSwgb25seSBhcHBsaWVkIHRvIHRoZSBtZXRob2QncyBwYXJhbWV0ZXJzLgotCQkJCS8vCi0JCQkJU3RyaW5nW10gcGFyYW1ldGVyVHlwZU5hbWVzID0gcmVzb2x2ZXIuZ2V0UGFyYW1ldGVyVHlwZU5hbWVzKGpkdE1ldGhvZCk7Ci0JCQkJZm9yIChpbnQgcD0wOyBwPHBhcmFtZXRlclR5cGVOYW1lcy5sZW5ndGg7IHArKykKLQkJCQl7Ci0JCQkJCWlmICgocmVzb2x2ZXIuaXNQcmltaXRpdmVUeXBlKHBhcmFtZXRlclR5cGVOYW1lc1twXSkgfHwgcmVzb2x2ZXIuaXNTdGFuZGFyZFR5cGUocGFyYW1ldGVyVHlwZU5hbWVzW3BdKSkgJiYgIXJlc29sdmVyLmlzSkFYUlBDU3RhbmRhcmRUeXBlKHBhcmFtZXRlclR5cGVOYW1lc1twXSkpCi0JCQkJCXsKLQkJCQkJCVN0cmluZyBtZXNzYWdlID0gTkxTLmJpbmQoV1NQbHVnaW5NZXNzYWdlcy5NU0dfSkFYUlBDMTFfUlVMRV8wMDA1LG5ldyBTdHJpbmdbXSB7bWV0aG9kTmFtZSxzZXJ2aWNlQ2xhc3NOYW1lXyxwYXJhbWV0ZXJUeXBlTmFtZXNbcF19KTsKLQkJCQkJCXN0YXR1c0xpc3RfLmFkZChuZXcgU3RhdHVzKElTdGF0dXMuV0FSTklORywib3JnLmVjbGlwc2UuanN0LndzIiwwLG1lc3NhZ2UsbnVsbCkpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBlKQotCQkJewotCQkJCS8vIERvIG5vdGhpbmcuCi0JCQl9Ci0JCX0KLQl9Ci0JCi0JcHJpdmF0ZSBTdHJpbmcgc2VydmljZUNsYXNzTmFtZV87Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL3J1bGVzL0pBWFJQQ1J1bGUwMDA2LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbmZvcm1hbmNlL3J1bGVzL0pBWFJQQ1J1bGUwMDA2LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwN2FmZDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9ydWxlcy9KQVhSUENSdWxlMDAwNi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQxOSAgIDEzMjkwNSBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleSAgICAgICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UucnVsZXM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuU3RhY2s7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklGaWVsZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhTW9kZWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLldTUGx1Z2luTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLklKYXZhQmVhblByb3BlcnR5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5JSmF2YVdlYlNlcnZpY2VSdWxlRW5naW5lOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5KRFRSZXNvbHZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSmF2YVdlYlNlcnZpY2VSdWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLS8qKgotICogVGhpcyBydWxlIHZlcmlmaWVzIHRoYXQgdGhlIGZpZWxkcyBhbmQgcHJvcGVydGllcyBvZiBhCi0gKiB2YWx1ZSB0eXBlIGNsYXNzIHVzZXMgb25seSBKQVgtUlBDIHN1cHBvcnRlZCB0eXBlcy4KLSAqLwotcHVibGljIGNsYXNzIEpBWFJQQ1J1bGUwMDA2IGV4dGVuZHMgSmF2YVdlYlNlcnZpY2VSdWxlCi17Ci0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGlzIHJ1bGUuCi0JICovCi0JcHVibGljIEpBWFJQQ1J1bGUwMDA2ICgpCi0JewotCQlpZF8gPSA2OwotCQluYW1lc3BhY2VfID0gImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvb3JnLmVjbGlwc2UuanN0LndzL2pheHJwYy8xLjEiOwotCQluYW1lXyA9IG51bGw7Ci0JCWRlc2NyaXB0aW9uXyA9IG51bGw7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25mb3JtYW5jZS5KYXZhV2ViU2VydmljZVJ1bGUjaW5pdChvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSUphdmFXZWJTZXJ2aWNlUnVsZUVuZ2luZSkKLQkgKi8KLQlwdWJsaWMgdm9pZCBpbml0ICggSUphdmFXZWJTZXJ2aWNlUnVsZUVuZ2luZSBlbmdpbmUgKQotCXsKLQkJc3VwZXIuaW5pdChlbmdpbmUpOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSmF2YVdlYlNlcnZpY2VSdWxlI3Zpc2l0Q2xhc3Mob3JnLmVjbGlwc2UuamR0LmNvcmUuSVR5cGUsIGphdmEudXRpbC5TdGFjaykKLQkgKi8KLQlwdWJsaWMgdm9pZCB2aXNpdENsYXNzICggSVR5cGUgamR0Q2xhc3MsIFN0YWNrIHBlYW51dFRyYWlsICkKLQl7Ci0JCS8vCi0JCS8vIEFuIGVtcHR5IHBlYW51dCB0cmFpbCBpbXBsaWVzIHRoaXMgaXMgdGhlIHJvb3QKLQkJLy8gY2xhc3MsIGFrYS4gSkFYLVJQQyBzZXJ2aWNlIGNsYXNzLiBQdXQgYXNpZGUKLQkJLy8gdGhlIGNsYXNzIG5hbWUgaW4gY2FzZSB2aXNpdE1ldGhvZCgpIG5lZWRzIGl0LgotCQkvLwotCQlpZiAocGVhbnV0VHJhaWwuc2l6ZSgpID09IDApCi0JCXsKLQkJCXNlcnZpY2VDbGFzc05hbWVfID0gamR0Q2xhc3MuZ2V0RnVsbHlRdWFsaWZpZWROYW1lKCk7Ci0JCX0KLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSmF2YVdlYlNlcnZpY2VSdWxlI3Zpc2l0TWV0aG9kKG9yZy5lY2xpcHNlLmpkdC5jb3JlLklNZXRob2QsIGphdmEudXRpbC5TdGFjaykKLQkgKi8KLQlwdWJsaWMgdm9pZCB2aXNpdEZpZWxkICggSUZpZWxkIGpkdEZpZWxkLCBTdGFjayBwZWFudXRUcmFpbCApCi0JewotCQkvLwotCQkvLyBBIHBlYW51dCB0cmFpbCBvZiBsZW5ndGggZ3JlYXRlciB0aGFuIG9uZSBpbXBsaWVzIHRoaXMgaXMgYQotCQkvLyBmaWVsZCBiZWxvbmdpbmcgdG8gYSBjbGFzcyBvdGhlciB0aGFuIHRoZSByb290IChha2EuIEpBWC1SUEMKLQkJLy8gc2VydmljZSkgY2xhc3MsIG5hbWVseSBhIHByZXN1bWVkIHZhbHVlIHR5cGUgY2xhc3MuCi0JCS8vCi0JCWlmIChwZWFudXRUcmFpbC5zaXplKCkgPiAxKQotCQl7Ci0JCQl0cnkKLQkJCXsKLQkJCQkvLwotCQkJCS8vIEFueSBKYXZhIHByaW1pdGl2ZSBvciBzdGFuZGFyZCAoImphdmEuIiBvciAiamF2YXguIikgdHlwZQotCQkJCS8vIHRoYXQgaXMgbm90IHN1cHBvcnRlZCBieSBKQVgtUlBDIHdpbGwgZ2V0IGZsYWdnZWQuCi0JCQkJLy8gQW55IG5vbi1wcmltaXRpdmUgb3Igbm9uLXN0YW5kYXJkIHR5cGUgaXMgcHJlc3VtZWQgdG8gYmUgYQotCQkJCS8vIHBvdGVudGlhbCB2YWx1ZSB0eXBlIGFuZCBpcyBieXBhc3NlZCBzaW5jZSB0aGUgcnVsZSBlbmdpbmUKLQkJCQkvLyB3aWxsIG5hdmlnYXRlIGludG8gdGhlIHBvdGVudGlhbCB2YWx1ZSB0eXBlJ3MgY2xhc3MuCi0JCQkJLy8KLQkJCQlKRFRSZXNvbHZlciByZXNvbHZlciA9IGVuZ2luZV8uZ2V0SkRUUmVzb2x2ZXIoKTsKLQkJCQlTdHJpbmcgZmllbGRUeXBlTmFtZSA9IHJlc29sdmVyLmdldEZpZWxkVHlwZU5hbWUoamR0RmllbGQpOwotCQkJCWlmICgocmVzb2x2ZXIuaXNQcmltaXRpdmVUeXBlKGZpZWxkVHlwZU5hbWUpIHx8IHJlc29sdmVyLmlzU3RhbmRhcmRUeXBlKGZpZWxkVHlwZU5hbWUpKSAmJiAhcmVzb2x2ZXIuaXNKQVhSUENTdGFuZGFyZFR5cGUoZmllbGRUeXBlTmFtZSkpCi0JCQkJewotCQkJCQkvLwotCQkJCQkvLyBUaGUgZmllbGQgcHJldHR5IG11Y2ggTVVTVCBiZSBkZWNsYXJlZCBpbiBhIHR5cGUgb3IKLQkJCQkJLy8gd2Ugd291bGQgbm90IGhhdmUgZ290dGVuIGhlcmUuIFN0aWxsLCBiZXN0IHRvIGJlIHNhZmUuCi0JCQkJCS8vCi0JCQkJCUlUeXBlIHZhbHVlVHlwZSA9IGpkdEZpZWxkLmdldERlY2xhcmluZ1R5cGUoKTsKLQkJCQkJaWYgKHZhbHVlVHlwZSAhPSBudWxsKQotCQkJCQl7Ci0JCQkJCQlTdHJpbmcgdmFsdWVUeXBlQ2xhc3NOYW1lID0gdmFsdWVUeXBlLmdldEZ1bGx5UXVhbGlmaWVkTmFtZSgpOwotCQkJCQkJU3RyaW5nIGZpZWxkTmFtZSA9IGpkdEZpZWxkLmdldEVsZW1lbnROYW1lKCk7Ci0JCQkJCQlTdHJpbmcgbWVzc2FnZSA9IE5MUy5iaW5kKFdTUGx1Z2luTWVzc2FnZXMuTVNHX0pBWFJQQzExX1JVTEVfMDAwNixuZXcgU3RyaW5nW10ge2ZpZWxkTmFtZSx2YWx1ZVR5cGVDbGFzc05hbWUsc2VydmljZUNsYXNzTmFtZV8sZmllbGRUeXBlTmFtZX0pOwotCQkJCQkJc3RhdHVzTGlzdF8uYWRkKG5ldyBTdGF0dXMoSVN0YXR1cy5XQVJOSU5HLCJvcmcuZWNsaXBzZS5qc3Qud3MiLDAsbWVzc2FnZSxudWxsKSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQljYXRjaCAoSmF2YU1vZGVsRXhjZXB0aW9uIGUpCi0JCQl7Ci0JCQkJLy8gRG8gbm90aGluZy4KLQkJCX0KLQkJfQotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSmF2YVdlYlNlcnZpY2VSdWxlI3Zpc2l0UHJvcGVydHkob3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbmZvcm1hbmNlLklKYXZhQmVhblByb3BlcnR5LCBqYXZhLnV0aWwuU3RhY2spCi0JICovCi0JcHVibGljIHZvaWQgdmlzaXRQcm9wZXJ0eSAoIElKYXZhQmVhblByb3BlcnR5IHByb3BlcnR5LCBTdGFjayBwZWFudXRUcmFpbCApCi0JewotCQkvLwotCQkvLyBBIHBlYW51dCB0cmFpbCBvZiBsZW5ndGggZ3JlYXRlciB0aGFuIG9uZSBpbXBsaWVzIHRoaXMgaXMgYQotCQkvLyBwcm9wZXJ0eSBiZWxvbmdpbmcgdG8gYSBjbGFzcyBvdGhlciB0aGFuIHRoZSByb290IChha2EuIEpBWC1SUEMKLQkJLy8gc2VydmljZSkgY2xhc3MsIG5hbWVseSBhIHByZXN1bWVkIHZhbHVlIHR5cGUgY2xhc3MuCi0JCS8vCi0JCWlmIChwZWFudXRUcmFpbC5zaXplKCkgPiAxKQotCQl7Ci0JCQl0cnkKLQkJCXsKLQkJCQkvLwotCQkJCS8vIEFueSBKYXZhIHByaW1pdGl2ZSBvciBzdGFuZGFyZCAoImphdmEuIiBvciAiamF2YXguIikgdHlwZQotCQkJCS8vIHRoYXQgaXMgbm90IHN1cHBvcnRlZCBieSBKQVgtUlBDIHdpbGwgZ2V0IGZsYWdnZWQuCi0JCQkJLy8gQW55IG5vbi1wcmltaXRpdmUgb3Igbm9uLXN0YW5kYXJkIHR5cGUgaXMgcHJlc3VtZWQgdG8gYmUgYQotCQkJCS8vIHBvdGVudGlhbCB2YWx1ZSB0eXBlIGFuZCBpcyBieXBhc3NlZCBzaW5jZSB0aGUgcnVsZSBlbmdpbmUKLQkJCQkvLyB3aWxsIG5hdmlnYXRlIGludG8gdGhlIHBvdGVudGlhbCB2YWx1ZSB0eXBlJ3MgY2xhc3MuCi0JCQkJLy8KLQkJCQlKRFRSZXNvbHZlciByZXNvbHZlciA9IGVuZ2luZV8uZ2V0SkRUUmVzb2x2ZXIoKTsKLQkJCQlTdHJpbmcgcHJvcGVydHlUeXBlTmFtZSA9IHJlc29sdmVyLmdldFByb3BlcnR5VHlwZU5hbWUocHJvcGVydHkpOwotCQkJCWlmICgocmVzb2x2ZXIuaXNQcmltaXRpdmVUeXBlKHByb3BlcnR5VHlwZU5hbWUpIHx8IHJlc29sdmVyLmlzU3RhbmRhcmRUeXBlKHByb3BlcnR5VHlwZU5hbWUpKSAmJiAhcmVzb2x2ZXIuaXNKQVhSUENTdGFuZGFyZFR5cGUocHJvcGVydHlUeXBlTmFtZSkpCi0JCQkJewotCQkJCQkvLwotCQkJCQkvLyBUaGUgZmllbGQgcHJldHR5IG11Y2ggTVVTVCBiZSBkZWNsYXJlZCBpbiBhIHR5cGUgb3IKLQkJCQkJLy8gd2Ugd291bGQgbm90IGhhdmUgZ290dGVuIGhlcmUuIFN0aWxsLCBiZXN0IHRvIGJlIHNhZmUuCi0JCQkJCS8vCi0JCQkJCUlUeXBlIHZhbHVlVHlwZSA9IHByb3BlcnR5LmdldERlY2xhcmluZ1R5cGUoKTsKLQkJCQkJaWYgKHZhbHVlVHlwZSAhPSBudWxsKQotCQkJCQl7Ci0JCQkJCQlTdHJpbmcgdmFsdWVUeXBlQ2xhc3NOYW1lID0gdmFsdWVUeXBlLmdldEZ1bGx5UXVhbGlmaWVkTmFtZSgpOwotCQkJCQkJU3RyaW5nIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5LmdldE5hbWUoKTsKLQkJCQkJCVN0cmluZyBtZXNzYWdlID0gTkxTLmJpbmQoV1NQbHVnaW5NZXNzYWdlcy5NU0dfSkFYUlBDMTFfUlVMRV8wMDA2LG5ldyBTdHJpbmdbXSB7cHJvcGVydHlOYW1lLHZhbHVlVHlwZUNsYXNzTmFtZSxzZXJ2aWNlQ2xhc3NOYW1lXyxwcm9wZXJ0eVR5cGVOYW1lfSk7Ci0JCQkJCQlzdGF0dXNMaXN0Xy5hZGQobmV3IFN0YXR1cyhJU3RhdHVzLldBUk5JTkcsIm9yZy5lY2xpcHNlLmpzdC53cyIsMCxtZXNzYWdlLG51bGwpKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWNhdGNoIChKYXZhTW9kZWxFeGNlcHRpb24gZSkKLQkJCXsKLQkJCQkvLyBEbyBub3RoaW5nLgotCQkJfQotCQl9Ci0JfQotCQotCXByaXZhdGUgU3RyaW5nIHNlcnZpY2VDbGFzc05hbWVfOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9ydWxlcy9KQVhSUENSdWxlU2V0RmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb25mb3JtYW5jZS9ydWxlcy9KQVhSUENSdWxlU2V0RmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjFjN2E2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29uZm9ybWFuY2UvcnVsZXMvSkFYUlBDUnVsZVNldEZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQxOSAgIDEzMjkwNSBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleSAgICAgICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UucnVsZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uZm9ybWFuY2UuSmF2YVdlYlNlcnZpY2VSdWxlU2V0OwotCi0vKioKLSAqIEEgZmFjdG9yeSB0aGF0IHByb2R1Y2VzIGEgSmF2YVdlYlNlcnZpY2VSdWxlU2V0Ci0gKiBmb3IgdGhlIEpBWC1SUEMgMS4xIHNwZWNpZmljYXRpb24uCi0gKi8KLXB1YmxpYyBjbGFzcyBKQVhSUENSdWxlU2V0RmFjdG9yeQotewotCXByaXZhdGUgSkFYUlBDUnVsZVNldEZhY3RvcnkgKCkKLQl7Ci0JCS8vIE5vdCBwdWJsaWNseSBjb25zdHJ1Y3RhYmxlLgotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIGEgc2V0IG9mIHJ1bGVzIGZvciBhbmFseXppbmcgSmF2YSBjbGFzc2VzCi0JICogZm9yIGNvbXBsaWFuY2UgdG8gdGhlIHJ1bGVzIG9mIEpBWC1SUEMgMS4xLiAgCi0JICogQHJldHVybiBBIHNldCBvZiBKQVgtUlBDIDEuMSBhbmFseXNpcyBydWxlcy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIEphdmFXZWJTZXJ2aWNlUnVsZVNldCBuZXdSdWxlU2V0ICgpCi0JewotCQlKYXZhV2ViU2VydmljZVJ1bGVTZXQgc2V0ID0gbmV3IEphdmFXZWJTZXJ2aWNlUnVsZVNldCgpOwotCQlzZXQuYWRkUnVsZShuZXcgSkFYUlBDUnVsZTAwMDEoKSk7Ci0JCXNldC5hZGRSdWxlKG5ldyBKQVhSUENSdWxlMDAwMigpKTsKLQkJc2V0LmFkZFJ1bGUobmV3IEpBWFJQQ1J1bGUwMDAzKCkpOwotCQlzZXQuYWRkUnVsZShuZXcgSkFYUlBDUnVsZTAwMDUoKSk7Ci0JCXNldC5hZGRSdWxlKG5ldyBKQVhSUENSdWxlMDAwNigpKTsKLQkJcmV0dXJuIHNldDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnRleHQvUGVyc2lzdGVudFNjZW5hcmlvQ29udGV4dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb250ZXh0L1BlcnNpc3RlbnRTY2VuYXJpb0NvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTE0Y2Y5YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnRleHQvUGVyc2lzdGVudFNjZW5hcmlvQ29udGV4dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIxNiAgIDEyNzEzOCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA3MDMxNCAgIDE1NDU0MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV2ViU2VydmljZVRlc3RSZWdpc3RyeSBpcyB0cmFja2luZyBleHRlbnNpb25zIHVzaW5nIGxhYmVsIGF0dHJpYnV0ZSBpbnN0ZWFkIG9mIElECi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmV4dC50ZXN0LldlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQudGVzdC5XZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5wbHVnaW4uV2ViU2VydmljZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29udGV4dC5QZXJzaXN0ZW50Q29udGV4dDsKLWltcG9ydCBjb20uaWJtLmljdS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLQotCi1wdWJsaWMgY2xhc3MgUGVyc2lzdGVudFNjZW5hcmlvQ29udGV4dCBleHRlbmRzIFBlcnNpc3RlbnRDb250ZXh0IGltcGxlbWVudHMgU2NlbmFyaW9Db250ZXh0Ci17Ci0gIHB1YmxpYyBQZXJzaXN0ZW50U2NlbmFyaW9Db250ZXh0KCkKLSAgewotICAgIHN1cGVyKFdlYlNlcnZpY2VQbHVnaW4uZ2V0SW5zdGFuY2UoKSk7IAotICB9Ci0KLSAgcHVibGljIHZvaWQgbG9hZCgpCi0gIHsKLSAgICBTY2VuYXJpb0RlZmF1bHRzIGRlZmF1bHRzID0gbmV3IFNjZW5hcmlvRGVmYXVsdHMoKTsKLSAgICBTdHJpbmdbXSBpZHMgPSBkZWZhdWx0cy5nZXRXZWJTZXJ2aWNlVGVzdElkcygpOwotICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpZiAoaSAhPSAwKSBzYi5hcHBlbmQoIiwiKTsKLSAgICAgIHNiLmFwcGVuZChpZHNbaV0pOwotICAgIH0KLSAgICBTdHJpbmcgbm9uSmF2YVRlc3RTZXJ2aWNlID0gZGVmYXVsdHMuZ2V0Tm9uSmF2YVRlc3RTZXJ2aWNlRGVmYXVsdCgpOwotICAgIHNldERlZmF1bHRTdHJpbmdJZk5vRGVmYXVsdChQUkVGRVJFTkNFX1dFQlNFUlZJQ0VfVEVTVF9UWVBFUywgc2IudG9TdHJpbmcoKSk7Ci0gICAgc2V0RGVmYXVsdFN0cmluZ0lmTm9EZWZhdWx0KFBSRUZFUkVOQ0VfTk9OX0pBVkFfVEVTVF9TRVJWSUNFLCBub25KYXZhVGVzdFNlcnZpY2UpOwotICAgIAotICAgIHNldERlZmF1bHRTdHJpbmdJZk5vRGVmYXVsdChQUkVGRVJFTkNFX0NMSUVOVF9XRUJTRVJWSUNFX1RZUEUsIGRlZmF1bHRzLndlYnNlcnZpY2VDbGllbnRUeXBlRGVmYXVsdCgpICk7Ci0gICAgc2V0RGVmYXVsdFN0cmluZ0lmTm9EZWZhdWx0KFBSRUZFUkVOQ0VfV0VCU0VSVklDRV9UWVBFLCBkZWZhdWx0cy53ZWJzZXJ2aWNlVHlwZUlkRGVmYXVsdCgpICk7Ci0gICAgc2V0RGVmYXVsdEJvb2xlYW5JZk5vRGVmYXVsdChQUkVGRVJFTkNFX0dFTkVSQVRFX1BST1hZLCBkZWZhdWx0cy5nZW5lcmF0ZVByb3h5RGVmYXVsdCgpICk7Ci0gICAgc2V0RGVmYXVsdEJvb2xlYW5JZk5vRGVmYXVsdChQUkVGRVJFTkNFX0xBVU5DSF9XRUJTRVJWSUNFX0VYUExPUkVSLCBkZWZhdWx0cy5sYXVuY2hXZWJzZXJ2aWNlRXhwbG9yZXJEZWZhdWx0KCkgKTsKLSAgICBzZXREZWZhdWx0Qm9vbGVhbklmTm9EZWZhdWx0KFBSRUZFUkVOQ0VfSU5TVEFMTF9XRUJTRVJWSUNFLCBkZWZhdWx0cy5pbnN0YWxsV2Vic2VydmljZURlZmF1bHQoKSApOwotICAgIHNldERlZmF1bHRCb29sZWFuSWZOb0RlZmF1bHQoUFJFRkVSRU5DRV9JTlNUQUxMX0NMSUVOVCwgZGVmYXVsdHMuaW5zdGFsbENsaWVudERlZmF1bHQoKSApOwotICAgIHNldERlZmF1bHRCb29sZWFuSWZOb0RlZmF1bHQoUFJFRkVSRU5DRV9TVEFSVF9XRUJTRVJWSUNFLCBkZWZhdWx0cy5zdGFydFdlYnNlcnZpY2VEZWZhdWx0KCkgKTsKLSAgICBzZXREZWZhdWx0Qm9vbGVhbklmTm9EZWZhdWx0KFBSRUZFUkVOQ0VfVEVTVF9XRUJTRVJWSUNFLCBkZWZhdWx0cy50ZXN0V2Vic2VydmljZURlZmF1bHQoKSApOwotICAgIHNldERlZmF1bHRCb29sZWFuSWZOb0RlZmF1bHQoUFJFRkVSRU5DRV9NT05JVE9SX1dFQlNFUlZJQ0UsIGRlZmF1bHRzLmdldE1vbml0b3JXZWJTZXJ2aWNlRGVmYXVsdCgpKTsKLSAgICBzZXREZWZhdWx0Qm9vbGVhbklmTm9EZWZhdWx0KFBSRUZFUkVOQ0VfTEFVTkNIX1NBTVBMRSwgZGVmYXVsdHMubGF1bmNoU2FtcGxlKCkgKTsKLSAgICAKLSAgICBzZXREZWZhdWx0SW50SWZOb0RlZmF1bHQoUFJFRkVSRU5DRV9HRU5FUkFURV9XRUJTRVJWSUNFLCBkZWZhdWx0cy5zZXJ2aWNlR2VuZXJhdGlvbkRlZmF1bHQoKSk7IC8vanZoCi0gICAgc2V0RGVmYXVsdEludElmTm9EZWZhdWx0KFBSRUZFUkVOQ0VfR0VORVJBVEVfQ0xJRU5ULCBkZWZhdWx0cy5jbGllbnRHZW5lcmF0aW9uRGVmYXVsdCgpKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXROb25KYXZhVGVzdFNlcnZpY2UoKQotICB7Ci0gICAgV2ViU2VydmljZVRlc3RSZWdpc3RyeSByZWdpc3RyeSA9IFdlYlNlcnZpY2VUZXN0UmVnaXN0cnkuZ2V0SW5zdGFuY2UoKTsKLSAgICBTdHJpbmdbXSBpZHMgPSBnZXRXZWJTZXJ2aWNlVGVzdElkcygpOwotICAgIFZlY3RvciBuZXdUZXN0Q2FzZXMgPSBuZXcgVmVjdG9yKCk7Ci0JZm9yIChpbnQgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgV2ViU2VydmljZVRlc3RFeHRlbnNpb24gd3NlID0gKFdlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uKSByZWdpc3RyeQotICAgICAgICAgIC5nZXRXZWJTZXJ2aWNlRXh0ZW5zaW9uc0J5SWQoaWRzW2ldKTsKLSAgICAgIGlmICh3c2UgIT0gbnVsbCAmJiB3c2UudGVzdFdTREwoKSkgCi0JCSAgbmV3VGVzdENhc2VzLmFkZEVsZW1lbnQod3NlLmdldExhYmVsKCkpOwotICAgIH0KLQlTdHJpbmdbXSB3c2RsVGVzdEFycmF5ID0gbmV3IFN0cmluZ1tuZXdUZXN0Q2FzZXMuc2l6ZSgpXTsKLQlFbnVtZXJhdGlvbiBlID0gbmV3VGVzdENhc2VzLmVsZW1lbnRzKCk7Ci0JaW50IGkgPSAwOwotCXdoaWxlKGUuaGFzTW9yZUVsZW1lbnRzKCkpewotCSAgd3NkbFRlc3RBcnJheVtpXSA9IChTdHJpbmcpZS5uZXh0RWxlbWVudCgpOwotCSAgaSsrOwotCX0KLQkKLQlyZXR1cm4gd3NkbFRlc3RBcnJheTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZVRlc3RJZHMoU3RyaW5nW10gaWRzKQotICB7Ci0JU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCWZvciAoaW50IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKQotCXsKLQkgIGlmIChpICE9IDApIHNiLmFwcGVuZCgiLCIpOwotCSAgc2IuYXBwZW5kKGlkc1tpXSk7Ci0JfQotCXNldFZhbHVlKFBSRUZFUkVOQ0VfV0VCU0VSVklDRV9URVNUX1RZUEVTLCBzYi50b1N0cmluZygpKTsgIAotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nW10gZ2V0V2ViU2VydmljZVRlc3RJZHMoKQotICB7Ci0JU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcigKLQkgICAgZ2V0VmFsdWVBc1N0cmluZyhQUkVGRVJFTkNFX1dFQlNFUlZJQ0VfVEVTVF9UWVBFUyksICIsIik7Ci0JU3RyaW5nW10gcyA9IG5ldyBTdHJpbmdbc3QuY291bnRUb2tlbnMoKV07Ci0JZm9yIChpbnQgaSA9IDA7IGkgPCBzLmxlbmd0aDsgaSsrKSB7Ci0JICAvLyAxNTQ1NDM6IHdlIGhhdmUgdG8gY29udGludWUgdG8gaW50ZXJwcmV0IHRoZSBvbGQgbGFiZWwgc3R5bGUgcHJlZmVyZW5jZXMKLQkgIHNbaV0gPSBXZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5LmdldEluc3RhbmNlKCkubGFiZWxUb0lkKHN0Lm5leHRUb2tlbigpKTsKLQl9Ci0JcmV0dXJuIHM7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VUZXN0VHlwZXMoU3RyaW5nW10gaWRzKQotICB7Ci0JLy8gMTU0NTQzOiBkZXByZWNhdGVkLCBub29wCi0gIH0KLQotICBwdWJsaWMgU3RyaW5nW10gZ2V0V2ViU2VydmljZVRlc3RUeXBlcygpCi0gIHsKLQlXZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gV2ViU2VydmljZVRlc3RSZWdpc3RyeS5nZXRJbnN0YW5jZSgpOwotCVN0cmluZ1tdIGlkcyA9IGdldFdlYlNlcnZpY2VUZXN0SWRzKCk7ICAKLSAgICBWZWN0b3IgbGFiZWxzID0gbmV3IFZlY3RvcigpOwotCWZvciAoaW50IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIFdlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uIHdzZSA9IChXZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbikgcmVnaXN0cnkKLSAgICAgICAgICAuZ2V0V2ViU2VydmljZUV4dGVuc2lvbnNCeUlkKGlkc1tpXSk7Ci0gICAgICBpZiAod3NlICE9IG51bGwpIAotCQkgIGxhYmVscy5hZGRFbGVtZW50KHdzZS5nZXRMYWJlbCgpKTsKLSAgICB9CSAgCSAgCi0gICAgU3RyaW5nW10gcyA9IG5ldyBTdHJpbmdbbGFiZWxzLnNpemUoKV07Ci0gICAgbGFiZWxzLmNvcHlJbnRvKHMpOwotICAgIHJldHVybiBzOwotICB9Ci0KLSAgcHVibGljIFNjZW5hcmlvQ29udGV4dCBjb3B5KCkKLSAgewotICAgIFRyYW5zaWVudFNjZW5hcmlvQ29udGV4dCBjb250ZXh0ID0gbmV3IFRyYW5zaWVudFNjZW5hcmlvQ29udGV4dCgpOwotICAgIGNvbnRleHQuc2V0V2ViU2VydmljZVRlc3RJZHMoZ2V0V2ViU2VydmljZVRlc3RJZHMoKSk7Ci0gICAgY29udGV4dC5zZXRXZWJTZXJ2aWNlVGVzdFR5cGVzKGdldFdlYlNlcnZpY2VUZXN0VHlwZXMoKSk7Ci0gICAgY29udGV4dC5zZXROb25KYXZhVGVzdFNlcnZpY2UoZ2V0Tm9uSmF2YVRlc3RTZXJ2aWNlKCkpOwotICAgIAotICAgIGNvbnRleHQuc2V0Q2xpZW50V2ViU2VydmljZVR5cGUoIGdldENsaWVudFdlYlNlcnZpY2VUeXBlKCkgKTsKLSAgICBjb250ZXh0LnNldFdlYlNlcnZpY2VUeXBlKCBnZXRXZWJTZXJ2aWNlVHlwZSgpICk7Ci0gICAgY29udGV4dC5zZXRMYXVuY2hXZWJTZXJ2aWNlRXhwbG9yZXIoIGdldExhdW5jaFdlYlNlcnZpY2VFeHBsb3JlcigpICk7Ci0gICAgY29udGV4dC5zZXRTdGFydFdlYlNlcnZpY2UoIGdldFN0YXJ0V2ViU2VydmljZSgpICk7Ci0gICAgY29udGV4dC5zZXRHZW5lcmF0ZVByb3h5KCBnZXRHZW5lcmF0ZVByb3h5KCkgKTsKLSAgICBjb250ZXh0LnNldFRlc3RXZWJTZXJ2aWNlKCBnZXRUZXN0V2ViU2VydmljZSgpICk7Ci0gICAgY29udGV4dC5zZXRNb25pdG9yV2ViU2VydmljZShnZXRNb25pdG9yV2ViU2VydmljZSgpKTsKLSAgICBjb250ZXh0LnNldExhdW5jaFNhbXBsZUVuYWJsZWQoIGlzTGF1bmNoU2FtcGxlRW5hYmxlZCgpICk7Ci0gICAgCi0gICAgcmV0dXJuIGNvbnRleHQ7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjZ2V0Q2xpZW50V2ViU2VydmljZVR5cGUoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRDbGllbnRXZWJTZXJ2aWNlVHlwZSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0VmFsdWVBc1N0cmluZyhQUkVGRVJFTkNFX0NMSUVOVF9XRUJTRVJWSUNFX1RZUEUpOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldENsaWVudFdlYlNlcnZpY2VUeXBlRGVmYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gZ2V0RGVmYXVsdFN0cmluZyhQUkVGRVJFTkNFX0NMSUVOVF9XRUJTRVJWSUNFX1RZUEUpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0I2dldEdlbmVyYXRlUHJveHkoKQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0R2VuZXJhdGVQcm94eSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0VmFsdWVBc0Jvb2xlYW4oUFJFRkVSRU5DRV9HRU5FUkFURV9QUk9YWSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldEdlbmVyYXRlUHJveHlEZWZhdWx0KCkKLSAgewotICAgIHJldHVybiBnZXREZWZhdWx0Qm9vbGVhbihQUkVGRVJFTkNFX0dFTkVSQVRFX1BST1hZKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNnZXRMYXVuY2hXZWJTZXJ2aWNlRXhwbG9yZXIoKQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0TGF1bmNoV2ViU2VydmljZUV4cGxvcmVyKCkKLSAgewotICAgIHJldHVybiBnZXRWYWx1ZUFzQm9vbGVhbihQUkVGRVJFTkNFX0xBVU5DSF9XRUJTRVJWSUNFX0VYUExPUkVSKTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0TGF1bmNoV2ViU2VydmljZUV4cGxvcmVyRGVmYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gZ2V0RGVmYXVsdEJvb2xlYW4oUFJFRkVSRU5DRV9MQVVOQ0hfV0VCU0VSVklDRV9FWFBMT1JFUik7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjZ2V0U3RhcnRXZWJTZXJ2aWNlKCkKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldFN0YXJ0V2ViU2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0VmFsdWVBc0Jvb2xlYW4oUFJFRkVSRU5DRV9TVEFSVF9XRUJTRVJWSUNFKTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0U3RhcnRXZWJTZXJ2aWNlRGVmYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gZ2V0RGVmYXVsdEJvb2xlYW4oUFJFRkVSRU5DRV9TVEFSVF9XRUJTRVJWSUNFKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNnZXRJbnN0YWxsV2ViU2VydmljZSgpCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRJbnN0YWxsV2ViU2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0VmFsdWVBc0Jvb2xlYW4oUFJFRkVSRU5DRV9JTlNUQUxMX1dFQlNFUlZJQ0UpOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRJbnN0YWxsV2ViU2VydmljZURlZmF1bHQoKQotICB7Ci0gICAgcmV0dXJuIGdldERlZmF1bHRCb29sZWFuKFBSRUZFUkVOQ0VfSU5TVEFMTF9XRUJTRVJWSUNFKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNnZXRJbnN0YWxsV2ViU2VydmljZSgpCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRJbnN0YWxsQ2xpZW50KCkKLSAgewotICAgIHJldHVybiBnZXRWYWx1ZUFzQm9vbGVhbihQUkVGRVJFTkNFX0lOU1RBTExfQ0xJRU5UKTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0SW5zdGFsbENsaWVudERlZmF1bHQoKQotICB7Ci0gICAgcmV0dXJuIGdldERlZmF1bHRCb29sZWFuKFBSRUZFUkVOQ0VfSU5TVEFMTF9DTElFTlQpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0I2dldFRlc3RXZWJTZXJ2aWNlKCkKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldFRlc3RXZWJTZXJ2aWNlKCkKLSAgewotICAgIHJldHVybiBnZXRWYWx1ZUFzQm9vbGVhbihQUkVGRVJFTkNFX1RFU1RfV0VCU0VSVklDRSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldFRlc3RXZWJTZXJ2aWNlRGVmYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gZ2V0RGVmYXVsdEJvb2xlYW4oUFJFRkVSRU5DRV9URVNUX1dFQlNFUlZJQ0UpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0I2dldFdlYlNlcnZpY2VUeXBlKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V2ViU2VydmljZVR5cGUoKQotICB7Ci0gICAgcmV0dXJuIGdldFZhbHVlQXNTdHJpbmcoUFJFRkVSRU5DRV9XRUJTRVJWSUNFX1RZUEUpOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFdlYlNlcnZpY2VUeXBlRGVmYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gZ2V0RGVmYXVsdFN0cmluZyhQUkVGRVJFTkNFX1dFQlNFUlZJQ0VfVFlQRSk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjc2V0Q2xpZW50V2ViU2VydmljZVR5cGUoamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldENsaWVudFdlYlNlcnZpY2VUeXBlKFN0cmluZyB2YWx1ZSkKLSAgewotICAgIHNldFZhbHVlKCBQUkVGRVJFTkNFX0NMSUVOVF9XRUJTRVJWSUNFX1RZUEUsIHZhbHVlKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNzZXRHZW5lcmF0ZVByb3h5KGJvb2xlYW4pCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRHZW5lcmF0ZVByb3h5KGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICBzZXRWYWx1ZSggUFJFRkVSRU5DRV9HRU5FUkFURV9QUk9YWSwgdmFsdWUpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0I3NldExhdW5jaFdlYlNlcnZpY2VFeHBsb3Jlcihib29sZWFuKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TGF1bmNoV2ViU2VydmljZUV4cGxvcmVyKGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICBzZXRWYWx1ZSggUFJFRkVSRU5DRV9MQVVOQ0hfV0VCU0VSVklDRV9FWFBMT1JFUiwgdmFsdWUpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0I3NldEluc3RhbGxXZWJTZXJ2aWNlKGJvb2xlYW4pCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRJbnN0YWxsV2ViU2VydmljZShib29sZWFuIHZhbHVlKQotICB7Ci0gICAgc2V0VmFsdWUoIFBSRUZFUkVOQ0VfSU5TVEFMTF9XRUJTRVJWSUNFLCB2YWx1ZSk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjc2V0SW5zdGFsbFdlYlNlcnZpY2UoYm9vbGVhbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEluc3RhbGxDbGllbnQoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHNldFZhbHVlKCBQUkVGRVJFTkNFX0lOU1RBTExfQ0xJRU5ULCB2YWx1ZSk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjc2V0U3RhcnRXZWJTZXJ2aWNlKGJvb2xlYW4pCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTdGFydFdlYlNlcnZpY2UoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHNldFZhbHVlKCBQUkVGRVJFTkNFX1NUQVJUX1dFQlNFUlZJQ0UsIHZhbHVlKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNzZXRUZXN0V2ViU2VydmljZShib29sZWFuKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VGVzdFdlYlNlcnZpY2UoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHNldFZhbHVlKCBQUkVGRVJFTkNFX1RFU1RfV0VCU0VSVklDRSwgdmFsdWUpOwotICB9Ci0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjc2V0V2ViU2VydmljZVR5cGUoamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VUeXBlKFN0cmluZyB2YWx1ZSkKLSAgewotICAgIHNldFZhbHVlKCBQUkVGRVJFTkNFX1dFQlNFUlZJQ0VfVFlQRSwgdmFsdWUpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNnZXRNb25pdG9yV2ViU2VydmljZSgpCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRNb25pdG9yV2ViU2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0VmFsdWVBc0Jvb2xlYW4oUFJFRkVSRU5DRV9NT05JVE9SX1dFQlNFUlZJQ0UpOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRNb25pdG9yV2ViU2VydmljZURlZmF1bHQoKQotICB7Ci0gICAgcmV0dXJuIGdldERlZmF1bHRCb29sZWFuKFBSRUZFUkVOQ0VfTU9OSVRPUl9XRUJTRVJWSUNFKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjc2V0TW9uaXRvcldlYlNlcnZpY2UoYm9vbGVhbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE1vbml0b3JXZWJTZXJ2aWNlKGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICBzZXRWYWx1ZShQUkVGRVJFTkNFX01PTklUT1JfV0VCU0VSVklDRSwgdmFsdWUpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0I2dldExhdW5jaFNhbXBsZUVuYWJsZWREZWZhdWx0KCkKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldExhdW5jaFNhbXBsZUVuYWJsZWREZWZhdWx0KCkKLSAgewotICAgIHJldHVybiBnZXREZWZhdWx0Qm9vbGVhbihQUkVGRVJFTkNFX0xBVU5DSF9TQU1QTEUpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0I2lzTGF1bmNoU2FtcGxlRW5hYmxlZCgpCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0xhdW5jaFNhbXBsZUVuYWJsZWQoKQotICB7Ci0gICAgcmV0dXJuIGdldFZhbHVlQXNCb29sZWFuKFBSRUZFUkVOQ0VfTEFVTkNIX1NBTVBMRSk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjc2V0TGF1bmNoU2FtcGxlRW5hYmxlZChib29sZWFuKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TGF1bmNoU2FtcGxlRW5hYmxlZChib29sZWFuIHZhbHVlKQotICB7Ci0gICAgc2V0VmFsdWUoIFBSRUZFUkVOQ0VfTEFVTkNIX1NBTVBMRSwgdmFsdWUpOwotICB9Ci0gIAotICAvL2p2aAotICBwdWJsaWMgaW50IGdldEdlbmVyYXRlV2ViU2VydmljZSgpCi0gIHsKLQkgIHJldHVybiBnZXRWYWx1ZUFzSW50KFBSRUZFUkVOQ0VfR0VORVJBVEVfV0VCU0VSVklDRSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBpbnQgZ2V0R2VuZXJhdGVXZWJTZXJ2aWNlRGVmYXVsdCgpCi0gIHsKLQkgIHJldHVybiBnZXREZWZhdWx0SW50KFBSRUZFUkVOQ0VfR0VORVJBVEVfV0VCU0VSVklDRSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEdlbmVyYXRlV2ViU2VydmljZShpbnQgdmFsdWUpCi0gIHsKLQkgIHNldFZhbHVlKFBSRUZFUkVOQ0VfR0VORVJBVEVfV0VCU0VSVklDRSwgdmFsdWUpOwotICB9Ci0gIAotICBwdWJsaWMgaW50IGdldEdlbmVyYXRlQ2xpZW50RGVmYXVsdCgpCi0gIHsKLQkgIHJldHVybiBnZXREZWZhdWx0SW50KFBSRUZFUkVOQ0VfR0VORVJBVEVfQ0xJRU5UKTsKLSAgfQotICAKLSAgcHVibGljIGludCBnZXRHZW5lcmF0ZUNsaWVudCgpCi0gIHsKLQkgIHJldHVybiBnZXRWYWx1ZUFzSW50KFBSRUZFUkVOQ0VfR0VORVJBVEVfQ0xJRU5UKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0R2VuZXJhdGVDbGllbnQoaW50IHZhbHVlKQotICB7Ci0JICBzZXRWYWx1ZShQUkVGRVJFTkNFX0dFTkVSQVRFX0NMSUVOVCwgdmFsdWUpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnRleHQvUGVyc2lzdGVudFVERElQcmVmZXJlbmNlQ29udGV4dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb250ZXh0L1BlcnNpc3RlbnRVRERJUHJlZmVyZW5jZUNvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQyYjFlZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnRleHQvUGVyc2lzdGVudFVERElQcmVmZXJlbmNlQ29udGV4dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnBsdWdpbi5XZWJTZXJ2aWNlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb250ZXh0LlBlcnNpc3RlbnRDb250ZXh0OwotCi0KLXB1YmxpYyBjbGFzcyBQZXJzaXN0ZW50VURESVByZWZlcmVuY2VDb250ZXh0IGV4dGVuZHMgUGVyc2lzdGVudENvbnRleHQgaW1wbGVtZW50cyBVRERJUHJlZmVyZW5jZUNvbnRleHQKLXsKLSAgcHVibGljIFBlcnNpc3RlbnRVRERJUHJlZmVyZW5jZUNvbnRleHQoKQotICB7Ci0gICAgc3VwZXIoV2ViU2VydmljZVBsdWdpbi5nZXRJbnN0YW5jZSgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGxvYWQoKQotICB7Ci0gICAgc2V0RGVmYXVsdChQUkVGRVJFTkNFX1VERElfQ0FUX0RBVEFfQ09MVU1OX0RFTElNSVRFUiwgVURESVByZWZlcmVuY2VEZWZhdWx0cy5nZXRVZGRpQ2F0RGF0YUNvbHVtbkRlbGltaXRlcigpKTsKLSAgICBzZXREZWZhdWx0KFBSRUZFUkVOQ0VfVURESV9DQVRfREFUQV9TVFJJTkdfREVMSU1JVEVSLCBVRERJUHJlZmVyZW5jZURlZmF1bHRzLmdldFVkZGlDYXREYXRhU3RyaW5nRGVsaW1pdGVyKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0VWRkaUNhdERhdGFDb2x1bW5EZWxpbWl0ZXIoU3RyaW5nIGRlbGltaXRlcikKLSAgewotICAgIHNldFZhbHVlKFBSRUZFUkVOQ0VfVURESV9DQVRfREFUQV9DT0xVTU5fREVMSU1JVEVSLCBkZWxpbWl0ZXIpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRVZGRpQ2F0RGF0YUNvbHVtbkRlbGltaXRlcigpCi0gIHsKLSAgICByZXR1cm4gZ2V0VmFsdWVBc1N0cmluZyhQUkVGRVJFTkNFX1VERElfQ0FUX0RBVEFfQ09MVU1OX0RFTElNSVRFUik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRVZGRpQ2F0RGF0YVN0cmluZ0RlbGltaXRlcihTdHJpbmcgZGVsaW1pdGVyKQotICB7Ci0gICAgc2V0VmFsdWUoUFJFRkVSRU5DRV9VRERJX0NBVF9EQVRBX1NUUklOR19ERUxJTUlURVIsIGRlbGltaXRlcik7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFVkZGlDYXREYXRhU3RyaW5nRGVsaW1pdGVyKCkKLSAgewotICAgIHJldHVybiBnZXRWYWx1ZUFzU3RyaW5nKFBSRUZFUkVOQ0VfVURESV9DQVRfREFUQV9TVFJJTkdfREVMSU1JVEVSKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb250ZXh0L1NjZW5hcmlvQ29udGV4dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb250ZXh0L1NjZW5hcmlvQ29udGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTdkNjYxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29udGV4dC9TY2VuYXJpb0NvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMzE0ICAgMTU0NTQzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5IGlzIHRyYWNraW5nIGV4dGVuc2lvbnMgdXNpbmcgbGFiZWwgYXR0cmlidXRlIGluc3RlYWQgb2YgSUQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dDsKLQotcHVibGljIGludGVyZmFjZSBTY2VuYXJpb0NvbnRleHQgCi17Ci0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgUFJFRkVSRU5DRV9XRUJTRVJWSUNFX1RFU1RfVFlQRVMgPSAid2ViU2VydmljZVRlc3RUeXBlcyI7Ci0gICAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgUFJFRkVSRU5DRV9OT05fSkFWQV9URVNUX1NFUlZJQ0U9ICJub25KYXZhVGVzdFNlcnZpY2UiOwotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBQUkVGRVJFTkNFX1dFQlNFUlZJQ0VfVFlQRSA9ICJ3ZWJTZXJ2aWNlVHlwZSI7Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIFBSRUZFUkVOQ0VfU1RBUlRfV0VCU0VSVklDRSA9ICJzdGFydFdlYlNlcnZpY2UiOwotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBQUkVGRVJFTkNFX0lOU1RBTExfV0VCU0VSVklDRSA9ICJpbnN0YWxsV2ViU2VydmljZSI7Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIFBSRUZFUkVOQ0VfSU5TVEFMTF9DTElFTlQgPSAiaW5zdGFsbENsaWVudCI7Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIFBSRUZFUkVOQ0VfTEFVTkNIX1dFQlNFUlZJQ0VfRVhQTE9SRVIgPSAibGF1bmNoV2ViU2VydmljZUV4cGxvcmVyIjsKLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgUFJFRkVSRU5DRV9HRU5FUkFURV9QUk9YWSA9ICJnZW5lcmF0ZVByb3h5IjsKLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgUFJFRkVSRU5DRV9DTElFTlRfV0VCU0VSVklDRV9UWVBFID0gImNsaWVudFdlYlNlcnZpY2VUeXBlIjsKLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgUFJFRkVSRU5DRV9URVNUX1dFQlNFUlZJQ0UgPSAidGVzdFdlYlNlcnZpY2UiOwotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBQUkVGRVJFTkNFX01PTklUT1JfV0VCU0VSVklDRSA9ICJtb25pdG9yV2ViU2VydmljZSI7Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIFBSRUZFUkVOQ0VfTEFVTkNIX1NBTVBMRSA9ICJsYXVuY2hTYW1wbGUiOwotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBQUkVGRVJFTkNFX0dFTkVSQVRFX1dFQlNFUlZJQ0UgPSAiZ2VuZXJhdGVXZWJTZXJ2aWNlIjsgLy9qdmgKLSAgcHVibGljIGZpbmFsIFN0cmluZyBQUkVGRVJFTkNFX0dFTkVSQVRFX0NMSUVOVCA9ICJnZW5lcmF0ZUNsaWVudCI7IC8vanZoICAKLSAgCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFdTX1RFU1Q9MDsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgV1NfU1RBUlQ9MTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgV1NfSU5TVEFMTD0yOwotICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBXU19ERVBMT1k9MzsgIAotICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBXU19BU1NFTUJMRT00OwotICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBXU19ERVZFTE9QPTU7ICAKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgV1NfTk9ORT02OwotICAKLSAgcHVibGljIFN0cmluZ1tdIGdldFdlYlNlcnZpY2VUZXN0SWRzKCk7Ci0gIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VUZXN0SWRzKFN0cmluZ1tdIGlkcyk7Ci0gIAotICBwdWJsaWMgU3RyaW5nW10gZ2V0V2ViU2VydmljZVRlc3RUeXBlcygpOwotICBwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlVGVzdFR5cGVzKFN0cmluZ1tdIHRlc3RUeXBlcyk7Ci0gIAotICBwdWJsaWMgU3RyaW5nW10gZ2V0Tm9uSmF2YVRlc3RTZXJ2aWNlKCk7Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFdlYlNlcnZpY2VUeXBlKCk7Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0V2ViU2VydmljZVR5cGVEZWZhdWx0KCk7Ci0gIHB1YmxpYyB2b2lkICAgc2V0V2ViU2VydmljZVR5cGUoIFN0cmluZyB2YWx1ZSApOwotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0SW5zdGFsbFdlYlNlcnZpY2UoKTsKLSAgcHVibGljIGJvb2xlYW4gZ2V0SW5zdGFsbFdlYlNlcnZpY2VEZWZhdWx0KCk7Ci0gIHB1YmxpYyB2b2lkICAgIHNldEluc3RhbGxXZWJTZXJ2aWNlKCBib29sZWFuIHZhbHVlICk7Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRJbnN0YWxsQ2xpZW50KCk7Ci0gIHB1YmxpYyBib29sZWFuIGdldEluc3RhbGxDbGllbnREZWZhdWx0KCk7Ci0gIHB1YmxpYyB2b2lkICAgIHNldEluc3RhbGxDbGllbnQoIGJvb2xlYW4gdmFsdWUgKTsKLSAgICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0U3RhcnRXZWJTZXJ2aWNlKCk7Ci0gIHB1YmxpYyBib29sZWFuIGdldFN0YXJ0V2ViU2VydmljZURlZmF1bHQoKTsKLSAgcHVibGljIHZvaWQgICAgc2V0U3RhcnRXZWJTZXJ2aWNlKCBib29sZWFuIHZhbHVlICk7Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRMYXVuY2hXZWJTZXJ2aWNlRXhwbG9yZXIoKTsKLSAgcHVibGljIGJvb2xlYW4gZ2V0TGF1bmNoV2ViU2VydmljZUV4cGxvcmVyRGVmYXVsdCgpOwotICBwdWJsaWMgdm9pZCAgICBzZXRMYXVuY2hXZWJTZXJ2aWNlRXhwbG9yZXIoIGJvb2xlYW4gdmFsdWUgKTsKLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldEdlbmVyYXRlUHJveHkoKTsKLSAgcHVibGljIGJvb2xlYW4gZ2V0R2VuZXJhdGVQcm94eURlZmF1bHQoKTsKLSAgcHVibGljIHZvaWQgICAgc2V0R2VuZXJhdGVQcm94eSggYm9vbGVhbiB2YWx1ZSApOwotICAKLSAgcHVibGljIFN0cmluZyBnZXRDbGllbnRXZWJTZXJ2aWNlVHlwZSgpOwotICBwdWJsaWMgU3RyaW5nIGdldENsaWVudFdlYlNlcnZpY2VUeXBlRGVmYXVsdCgpOwotICBwdWJsaWMgdm9pZCAgIHNldENsaWVudFdlYlNlcnZpY2VUeXBlKCBTdHJpbmcgdmFsdWUgKTsKLSAgCi0gIHB1YmxpYyBib29sZWFuIGdldFRlc3RXZWJTZXJ2aWNlKCk7Ci0gIHB1YmxpYyBib29sZWFuIGdldFRlc3RXZWJTZXJ2aWNlRGVmYXVsdCgpOwotICBwdWJsaWMgdm9pZCAgICBzZXRUZXN0V2ViU2VydmljZSggYm9vbGVhbiB2YWx1ZSApOwotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0TW9uaXRvcldlYlNlcnZpY2UoKTsKLSAgcHVibGljIGJvb2xlYW4gZ2V0TW9uaXRvcldlYlNlcnZpY2VEZWZhdWx0KCk7Ci0gIHB1YmxpYyB2b2lkIHNldE1vbml0b3JXZWJTZXJ2aWNlKGJvb2xlYW4gdmFsdWUpOwotICAKLSAgcHVibGljIGJvb2xlYW4gaXNMYXVuY2hTYW1wbGVFbmFibGVkKCk7Ci0gIHB1YmxpYyBib29sZWFuIGdldExhdW5jaFNhbXBsZUVuYWJsZWREZWZhdWx0KCk7Ci0gIHB1YmxpYyB2b2lkICAgIHNldExhdW5jaFNhbXBsZUVuYWJsZWQoIGJvb2xlYW4gdmFsdWUgKTsKLSAgCi0gIHB1YmxpYyBpbnQgZ2V0R2VuZXJhdGVXZWJTZXJ2aWNlRGVmYXVsdCgpOwotICBwdWJsaWMgaW50IGdldEdlbmVyYXRlV2ViU2VydmljZSgpOwotICBwdWJsaWMgdm9pZCBzZXRHZW5lcmF0ZVdlYlNlcnZpY2UoaW50IHZhbHVlKTsKLSAgCi0gIHB1YmxpYyBpbnQgZ2V0R2VuZXJhdGVDbGllbnREZWZhdWx0KCk7Ci0gIHB1YmxpYyBpbnQgZ2V0R2VuZXJhdGVDbGllbnQoKTsKLSAgcHVibGljIHZvaWQgc2V0R2VuZXJhdGVDbGllbnQoaW50IHZhbHVlKTsKLSAgCi0gIHB1YmxpYyBTY2VuYXJpb0NvbnRleHQgY29weSgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb250ZXh0L1NjZW5hcmlvRGVmYXVsdHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29udGV4dC9TY2VuYXJpb0RlZmF1bHRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmNGUxNTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb250ZXh0L1NjZW5hcmlvRGVmYXVsdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMzE0ICAgMTU0NTQzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5IGlzIHRyYWNraW5nIGV4dGVuc2lvbnMgdXNpbmcgbGFiZWwgYXR0cmlidXRlIGluc3RlYWQgb2YgSUQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmRhdGEuTGFiZWxzQW5kSWRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQudGVzdC5XZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5OwotCi0KLQotcHVibGljIGNsYXNzIFNjZW5hcmlvRGVmYXVsdHMKLXsgIAotICAKLQkKLSAgcHVibGljIFN0cmluZ1tdIGdldFdlYlNlcnZpY2VUZXN0SWRzKCkKLSAgewotICAJLy93ZSB3aWxsIHNldCB0aGUgaG9tZSBncm93biBzYW1wbGUgYXMgdGhlIGZpcnN0IGNob2ljZQotICAJV2ViU2VydmljZVRlc3RSZWdpc3RyeSB0ZXN0UmVnaXN0cnkgPSBXZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5LmdldEluc3RhbmNlKCk7Ci0gIAkKLSAgCUxhYmVsc0FuZElkcyBsYWJlbHNhbmRpZHMgPSB0ZXN0UmVnaXN0cnkuZ2V0TGFiZWxzQW5kSURzKCk7Ci0gIAlTdHJpbmdbXSBpZHMgPSBsYWJlbHNhbmRpZHMuZ2V0SWRzXygpOwotICAJCi0gIAlTdHJpbmdbXSBuZXdJZHMgPSBuZXcgU3RyaW5nW2lkcy5sZW5ndGhdOwotICAJaW50IGluZGV4ID0gLTE7Ci0gIAlmb3IoaW50IGkgPSAwO2k8aWRzLmxlbmd0aDtpKyspewotICAJICBpZihpZHNbaV0uZXF1YWxzKCJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2lkZ2V0cy50ZXN0LldlYlNlcnZpY2VTYW1wbGVUZXN0IikpICAJCi0gIAkgICAgaW5kZXggPSBpOyAgIAotICAJfQotICAJaWYoaW5kZXggIT0gLTEpewotICAJICBuZXdJZHNbMF0gPSBpZHNbaW5kZXhdOwotICAJICBpbnQgaiA9IDE7Ci0gIAkgIGZvcihpbnQgaSA9IDA7aTxpZHMubGVuZ3RoO2krKyl7Ci0gIAkgICAgaWYoaSAhPSBpbmRleCl7Ci0gIAkgIAkgIG5ld0lkc1tqXSA9IGlkc1tpXTsgCi0gIAkgICAgICBqKys7Ci0gIAkgICAgfQotICAJICB9Ci0gIAl9Ci0gIAllbHNlIHJldHVybiBpZHM7Ci0gIAkKLSAgCXJldHVybiBuZXdJZHM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Tm9uSmF2YVRlc3RTZXJ2aWNlRGVmYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gIldlYiBTZXJ2aWNlcyBFeHBsb3JlciI7CQotICB9IAotICAKLSAgcHVibGljIFN0cmluZyB3ZWJzZXJ2aWNlVHlwZUlkRGVmYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gIjAvb3JnLmVjbGlwc2UuanN0LndzLndzSW1wbC5qYXZhIjsKLSAgfQotICAKLSAgcHVibGljIGludCBzZXJ2aWNlR2VuZXJhdGlvbkRlZmF1bHQoKQotICB7Ci0JICByZXR1cm4gU2NlbmFyaW9Db250ZXh0LldTX1NUQVJUOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBpbnQgY2xpZW50R2VuZXJhdGlvbkRlZmF1bHQoKQotICB7Ci0JICByZXR1cm4gU2NlbmFyaW9Db250ZXh0LldTX05PTkU7ICAKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gc3RhcnRXZWJzZXJ2aWNlRGVmYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gaW5zdGFsbFdlYnNlcnZpY2VEZWZhdWx0KCkKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBpbnN0YWxsQ2xpZW50RGVmYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gbGF1bmNoV2Vic2VydmljZUV4cGxvcmVyRGVmYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGdlbmVyYXRlUHJveHlEZWZhdWx0KCkKLSAgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyB3ZWJzZXJ2aWNlQ2xpZW50VHlwZURlZmF1bHQoKQotICB7Ci0gICAgcmV0dXJuICJvcmcuZWNsaXBzZS5qc3Qud3MuY2xpZW50LnR5cGUuamF2YSI7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIHRlc3RXZWJzZXJ2aWNlRGVmYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBnZXRNb25pdG9yV2ViU2VydmljZURlZmF1bHQoKQotICB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBsYXVuY2hTYW1wbGUoKQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29udGV4dC9UcmFuc2llbnRTY2VuYXJpb0NvbnRleHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29udGV4dC9UcmFuc2llbnRTY2VuYXJpb0NvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGVjZTk4OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnRleHQvVHJhbnNpZW50U2NlbmFyaW9Db250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDMxNCAgIDE1NDU0MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV2ViU2VydmljZVRlc3RSZWdpc3RyeSBpcyB0cmFja2luZyBleHRlbnNpb25zIHVzaW5nIGxhYmVsIGF0dHJpYnV0ZSBpbnN0ZWFkIG9mIElECi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dDsKLQotcHVibGljIGNsYXNzIFRyYW5zaWVudFNjZW5hcmlvQ29udGV4dCBpbXBsZW1lbnRzIFNjZW5hcmlvQ29udGV4dAotewotICBwcml2YXRlIFN0cmluZ1tdIHdlYlNlcnZpY2VUZXN0SWRzOwotICBwcml2YXRlIFN0cmluZ1tdIHdlYlNlcnZpY2VUZXN0VHlwZXM7Ci0gIHByaXZhdGUgU3RyaW5nW10gbm9uSmF2YVRlc3RTZXJ2aWNlOwotICBwcml2YXRlIFN0cmluZyAgIHdlYlNlcnZpY2VUeXBlXzsKLSAgcHJpdmF0ZSBib29sZWFuICBpbnN0YWxsV2ViU2VydmljZV87Ci0gIHByaXZhdGUgYm9vbGVhbiAgaW5zdGFsbENsaWVudF87Ci0gIHByaXZhdGUgYm9vbGVhbiAgc3RhcnRXZWJTZXJ2aWNlXzsKLSAgcHJpdmF0ZSBib29sZWFuICBsYXVuY2hXZWJTZXJ2aWNlRXhwbG9yZXJfOwotICBwcml2YXRlIGJvb2xlYW4gIGdlbmVyYXRlUHJveHlfOwotICBwcml2YXRlIFN0cmluZyAgIGNsaWVudFdlYlNlcnZpY2VUeXBlXzsKLSAgcHJpdmF0ZSBib29sZWFuICB0ZXN0V2ViU2VydmljZV87Ci0gIHByaXZhdGUgYm9vbGVhbiAgbW9uaXRvcldlYlNlcnZpY2U7Ci0gIHByaXZhdGUgYm9vbGVhbiAgbGF1bmNoU2FtcGxlXzsKLSAgcHJpdmF0ZSBpbnQgZ2VuZXJhdGVXZWJTZXJ2aWNlXzsgLy9qdmgKLSAgcHJpdmF0ZSBpbnQgZ2VuZXJhdGVDbGllbnRfOyAvL2p2aAotICAKLSAgcHJpdmF0ZSBTY2VuYXJpb0RlZmF1bHRzIGRlZmF1bHRzID0gbmV3IFNjZW5hcmlvRGVmYXVsdHMoKTsKLSAKLSAgcHVibGljIFRyYW5zaWVudFNjZW5hcmlvQ29udGV4dCAoKSB7fQotCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXROb25KYXZhVGVzdFNlcnZpY2UoKQotICB7Ci0gICAgcmV0dXJuIG5vbkphdmFUZXN0U2VydmljZTsKLSAgfQotIAotICBwdWJsaWMgdm9pZCBzZXROb25KYXZhVGVzdFNlcnZpY2UoU3RyaW5nW10gbm9uSmF2YVRlc3RTZXJ2aWNlKQotICB7Ci0gICAgdGhpcy5ub25KYXZhVGVzdFNlcnZpY2UgPSBub25KYXZhVGVzdFNlcnZpY2U7CQotICB9Ci0gCi0gIHB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VUZXN0SWRzKFN0cmluZ1tdIHdlYlNlcnZpY2VUZXN0SWRzKSB7Ci0gICAgdGhpcy53ZWJTZXJ2aWNlVGVzdElkcyA9IHdlYlNlcnZpY2VUZXN0SWRzOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nW10gZ2V0V2ViU2VydmljZVRlc3RJZHMoKSB7Ci0gICAgcmV0dXJuIHdlYlNlcnZpY2VUZXN0SWRzOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlVGVzdFR5cGVzKFN0cmluZ1tdIHdlYlNlcnZpY2VUZXN0VHlwZXMpCi0gIHsKLSAgICB0aGlzLndlYlNlcnZpY2VUZXN0VHlwZXMgPSB3ZWJTZXJ2aWNlVGVzdFR5cGVzOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nW10gZ2V0V2ViU2VydmljZVRlc3RUeXBlcygpCi0gIHsKLSAgICByZXR1cm4gd2ViU2VydmljZVRlc3RUeXBlczsJCi0gIH0KLSAKLSAgcHVibGljIFNjZW5hcmlvQ29udGV4dCBjb3B5KCkgewotICAJVHJhbnNpZW50U2NlbmFyaW9Db250ZXh0IGNvbnRleHQgPSBuZXcgVHJhbnNpZW50U2NlbmFyaW9Db250ZXh0KCk7Ci0gIAljb250ZXh0LnNldFdlYlNlcnZpY2VUZXN0SWRzKGdldFdlYlNlcnZpY2VUZXN0SWRzKCkpOwotCWNvbnRleHQuc2V0V2ViU2VydmljZVRlc3RUeXBlcyhnZXRXZWJTZXJ2aWNlVGVzdFR5cGVzKCkpOwotCWNvbnRleHQuc2V0Tm9uSmF2YVRlc3RTZXJ2aWNlKGdldE5vbkphdmFUZXN0U2VydmljZSgpKTsKLQkKLQljb250ZXh0LnNldFdlYlNlcnZpY2VUeXBlKCBnZXRXZWJTZXJ2aWNlVHlwZSgpICk7Ci0JY29udGV4dC5zZXRDbGllbnRXZWJTZXJ2aWNlVHlwZSggZ2V0Q2xpZW50V2ViU2VydmljZVR5cGUoKSApOwotCWNvbnRleHQuc2V0R2VuZXJhdGVQcm94eSggZ2V0R2VuZXJhdGVQcm94eSgpICk7Ci0JY29udGV4dC5zZXRMYXVuY2hXZWJTZXJ2aWNlRXhwbG9yZXIoIGdldExhdW5jaFdlYlNlcnZpY2VFeHBsb3JlcigpICk7Ci0JY29udGV4dC5zZXRJbnN0YWxsV2ViU2VydmljZSggZ2V0SW5zdGFsbFdlYlNlcnZpY2UoKSApOwotCWNvbnRleHQuc2V0SW5zdGFsbENsaWVudCggZ2V0SW5zdGFsbENsaWVudCgpICk7Ci0JY29udGV4dC5zZXRTdGFydFdlYlNlcnZpY2UoIGdldFN0YXJ0V2ViU2VydmljZSgpICk7Ci0JY29udGV4dC5zZXRUZXN0V2ViU2VydmljZSggZ2V0VGVzdFdlYlNlcnZpY2UoKSApOwotCWNvbnRleHQuc2V0TW9uaXRvcldlYlNlcnZpY2UoZ2V0TW9uaXRvcldlYlNlcnZpY2UoKSk7Ci0JY29udGV4dC5zZXRMYXVuY2hTYW1wbGVFbmFibGVkKCBpc0xhdW5jaFNhbXBsZUVuYWJsZWQoKSApOwotCWNvbnRleHQuc2V0R2VuZXJhdGVXZWJTZXJ2aWNlKGdldEdlbmVyYXRlV2ViU2VydmljZSgpKTsgIC8vanZoCi0JcmV0dXJuIGNvbnRleHQ7Ci0gIH0KLSAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNnZXRDbGllbnRXZWJTZXJ2aWNlVHlwZSgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldENsaWVudFdlYlNlcnZpY2VUeXBlKCkKLSAgewotICAgIHJldHVybiBjbGllbnRXZWJTZXJ2aWNlVHlwZV87Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q2xpZW50V2ViU2VydmljZVR5cGVEZWZhdWx0KCl7IHJldHVybiBkZWZhdWx0cy53ZWJzZXJ2aWNlQ2xpZW50VHlwZURlZmF1bHQoKTsgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNnZXRHZW5lcmF0ZVByb3h5KCkKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldEdlbmVyYXRlUHJveHkoKQotICB7Ci0gICAgcmV0dXJuIGdlbmVyYXRlUHJveHlfOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRHZW5lcmF0ZVByb3h5RGVmYXVsdCgpeyByZXR1cm4gZGVmYXVsdHMuZ2VuZXJhdGVQcm94eURlZmF1bHQoKTsgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNnZXRMYXVuY2hXZWJTZXJ2aWNlRXhwbG9yZXIoKQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0TGF1bmNoV2ViU2VydmljZUV4cGxvcmVyKCkKLSAgewotICAgIHJldHVybiBsYXVuY2hXZWJTZXJ2aWNlRXhwbG9yZXJfOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRMYXVuY2hXZWJTZXJ2aWNlRXhwbG9yZXJEZWZhdWx0KCl7IHJldHVybiBkZWZhdWx0cy5sYXVuY2hXZWJzZXJ2aWNlRXhwbG9yZXJEZWZhdWx0KCk7IH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjZ2V0SW5zdGFsbFdlYlNlcnZpY2UoKQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0SW5zdGFsbFdlYlNlcnZpY2UoKQotICB7Ci0gICAgcmV0dXJuIGluc3RhbGxXZWJTZXJ2aWNlXzsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0SW5zdGFsbFdlYlNlcnZpY2VEZWZhdWx0KCl7IHJldHVybiBkZWZhdWx0cy5pbnN0YWxsV2Vic2VydmljZURlZmF1bHQoKTsgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNnZXRJbnN0YWxsV2ViU2VydmljZSgpCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRJbnN0YWxsQ2xpZW50KCkKLSAgewotICAgIHJldHVybiBpbnN0YWxsQ2xpZW50XzsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0SW5zdGFsbENsaWVudERlZmF1bHQoKXsgcmV0dXJuIGRlZmF1bHRzLmluc3RhbGxDbGllbnREZWZhdWx0KCk7IH0KLSAgCi0gIAotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNnZXRTdGFydFdlYlNlcnZpY2UoKQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0U3RhcnRXZWJTZXJ2aWNlKCkKLSAgewotICAgIHJldHVybiBzdGFydFdlYlNlcnZpY2VfOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBnZXRTdGFydFdlYlNlcnZpY2VEZWZhdWx0KCl7IHJldHVybiBkZWZhdWx0cy5zdGFydFdlYnNlcnZpY2VEZWZhdWx0KCk7IH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjZ2V0VGVzdFdlYlNlcnZpY2UoKQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0VGVzdFdlYlNlcnZpY2UoKQotICB7Ci0gICAgcmV0dXJuIHRlc3RXZWJTZXJ2aWNlXzsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0VGVzdFdlYlNlcnZpY2VEZWZhdWx0KCl7IHJldHVybiBkZWZhdWx0cy50ZXN0V2Vic2VydmljZURlZmF1bHQoKTsgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNnZXRXZWJTZXJ2aWNlVHlwZSgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFdlYlNlcnZpY2VUeXBlKCkKLSAgewotICAgIHJldHVybiB3ZWJTZXJ2aWNlVHlwZV87Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V2ViU2VydmljZVR5cGVEZWZhdWx0KCl7IHJldHVybiBkZWZhdWx0cy53ZWJzZXJ2aWNlVHlwZUlkRGVmYXVsdCgpOyB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0I3NldENsaWVudFdlYlNlcnZpY2VUeXBlKGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRXZWJTZXJ2aWNlVHlwZShTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBjbGllbnRXZWJTZXJ2aWNlVHlwZV8gPSB2YWx1ZTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNzZXRHZW5lcmF0ZVByb3h5KGJvb2xlYW4pCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRHZW5lcmF0ZVByb3h5KGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICBnZW5lcmF0ZVByb3h5XyA9IHZhbHVlOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0I3NldExhdW5jaFdlYlNlcnZpY2VFeHBsb3Jlcihib29sZWFuKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TGF1bmNoV2ViU2VydmljZUV4cGxvcmVyKGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICBsYXVuY2hXZWJTZXJ2aWNlRXhwbG9yZXJfID0gdmFsdWU7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjc2V0SW5zdGFsbFdlYlNlcnZpY2UoYm9vbGVhbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEluc3RhbGxXZWJTZXJ2aWNlKGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICBpbnN0YWxsV2ViU2VydmljZV8gPSB2YWx1ZTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNzZXRJbnN0YWxsV2ViU2VydmljZShib29sZWFuKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SW5zdGFsbENsaWVudChib29sZWFuIHZhbHVlKQotICB7Ci0gICAgaW5zdGFsbENsaWVudF8gPSB2YWx1ZTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNzZXRTdGFydFdlYlNlcnZpY2UoYm9vbGVhbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFN0YXJ0V2ViU2VydmljZShib29sZWFuIHZhbHVlKQotICB7Ci0gICAgc3RhcnRXZWJTZXJ2aWNlXyA9IHZhbHVlOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0I3NldFRlc3RXZWJTZXJ2aWNlKGJvb2xlYW4pCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUZXN0V2ViU2VydmljZShib29sZWFuIHZhbHVlKQotICB7Ci0gICAgdGVzdFdlYlNlcnZpY2VfID0gdmFsdWU7Ci0gIH0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNzZXRXZWJTZXJ2aWNlVHlwZShqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZVR5cGUoU3RyaW5nIHZhbHVlKQotICB7Ci0gICAgd2ViU2VydmljZVR5cGVfID0gdmFsdWU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0I2dldE1vbml0b3JXZWJTZXJ2aWNlKCkKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldE1vbml0b3JXZWJTZXJ2aWNlKCkKLSAgewotICAgIHJldHVybiBtb25pdG9yV2ViU2VydmljZTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0TW9uaXRvcldlYlNlcnZpY2VEZWZhdWx0KCkKLSAgewotICAgIHJldHVybiBkZWZhdWx0cy5nZXRNb25pdG9yV2ViU2VydmljZURlZmF1bHQoKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQjc2V0TW9uaXRvcldlYlNlcnZpY2UoYm9vbGVhbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE1vbml0b3JXZWJTZXJ2aWNlKGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICBtb25pdG9yV2ViU2VydmljZSA9IHZhbHVlOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0I2dldExhdW5jaFNhbXBsZUVuYWJsZWREZWZhdWx0KCkKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldExhdW5jaFNhbXBsZUVuYWJsZWREZWZhdWx0KCkKLSAgewotICAgIHJldHVybiBkZWZhdWx0cy5sYXVuY2hTYW1wbGUoKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlNjZW5hcmlvQ29udGV4dCNpc0xhdW5jaFNhbXBsZUVuYWJsZWQoKQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNMYXVuY2hTYW1wbGVFbmFibGVkKCkKLSAgewotICAgIHJldHVybiBsYXVuY2hTYW1wbGVfOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0I3NldExhdW5jaFNhbXBsZUVuYWJsZWQoYm9vbGVhbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExhdW5jaFNhbXBsZUVuYWJsZWQoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIGxhdW5jaFNhbXBsZV8gPSB2YWx1ZTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0R2VuZXJhdGVXZWJTZXJ2aWNlKGludCB2YWx1ZSkKLSAgewotCSAgZ2VuZXJhdGVXZWJTZXJ2aWNlXyA9IHZhbHVlOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBpbnQgZ2V0R2VuZXJhdGVXZWJTZXJ2aWNlRGVmYXVsdCgpCi0gIHsKLQkgIHJldHVybiBkZWZhdWx0cy5zZXJ2aWNlR2VuZXJhdGlvbkRlZmF1bHQoKTsgIAotICB9ICAKLSAgCi0gIHB1YmxpYyBpbnQgZ2V0R2VuZXJhdGVXZWJTZXJ2aWNlKCkKLSAgewotCSAgcmV0dXJuIGdlbmVyYXRlV2ViU2VydmljZV87IAotICB9Ci0gIAotICBwdWJsaWMgaW50IGdldEdlbmVyYXRlQ2xpZW50RGVmYXVsdCgpCi0gIHsKLQkgIHJldHVybiBkZWZhdWx0cy5jbGllbnRHZW5lcmF0aW9uRGVmYXVsdCgpOwotICB9Ci0gIAotICBwdWJsaWMgaW50IGdldEdlbmVyYXRlQ2xpZW50KCkKLSAgewotCSAgcmV0dXJuIGdlbmVyYXRlQ2xpZW50XzsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0R2VuZXJhdGVDbGllbnQoaW50IHZhbHVlKQotICB7Ci0JICBnZW5lcmF0ZUNsaWVudF8gPSB2YWx1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb250ZXh0L1VERElQcmVmZXJlbmNlQ29udGV4dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb250ZXh0L1VERElQcmVmZXJlbmNlQ29udGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjRhZGRiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvY29udGV4dC9VRERJUHJlZmVyZW5jZUNvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQ7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgVURESVByZWZlcmVuY2VDb250ZXh0IAotewotICAvKgotICAgKiBUaGlzIGNvbnN0YW50IFN0cmluZyBpcyB1c2VkIHRvIGxvb2t1cCB0aGUgY29sdW1uIGRlbGltaXRlciBmb3IgdXNlci1kZWZpbmVkIFVEREkKLSAgICogQ2F0ZWdvcnkgZGF0YS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBSRUZFUkVOQ0VfVURESV9DQVRfREFUQV9DT0xVTU5fREVMSU1JVEVSID0gInVkZGlDYXREYXRhQ29sdW1uRGVsaW1pdGVyIjsKLSAgCi0gIC8qCi0gICAqIFRoaXMgY29uc3RhbnQgU3RyaW5nIGlzIHVzZWQgdG8gbG9va3VwIHRoZSBzdHJpbmcgZGVsaW1pdGVyIGZvciB1c2VyLWRlZmluZWQgVURESQotICAgKiBDYXRlZ29yeSBkYXRhLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJFRkVSRU5DRV9VRERJX0NBVF9EQVRBX1NUUklOR19ERUxJTUlURVIgPSAidWRkaUNhdERhdGFTdHJpbmdEZWxpbWl0ZXIiOwotICAKLSAgcHVibGljIHZvaWQgc2V0VWRkaUNhdERhdGFDb2x1bW5EZWxpbWl0ZXIoU3RyaW5nIGRlbGltaXRlcik7Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0VWRkaUNhdERhdGFDb2x1bW5EZWxpbWl0ZXIoKTsKLSAgcHVibGljIHZvaWQgc2V0VWRkaUNhdERhdGFTdHJpbmdEZWxpbWl0ZXIoU3RyaW5nIGRlbGltaXRlcik7Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0VWRkaUNhdERhdGFTdHJpbmdEZWxpbWl0ZXIoKTsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnRleHQvVURESVByZWZlcmVuY2VEZWZhdWx0cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9jb250ZXh0L1VERElQcmVmZXJlbmNlRGVmYXVsdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzllYmE5MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2NvbnRleHQvVURESVByZWZlcmVuY2VEZWZhdWx0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dDsKLQotcHVibGljIGNsYXNzIFVERElQcmVmZXJlbmNlRGVmYXVsdHMKLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0VWRkaUNhdERhdGFDb2x1bW5EZWxpbWl0ZXIoKQotICB7Ci0gICAgcmV0dXJuICIjIjsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0VWRkaUNhdERhdGFTdHJpbmdEZWxpbWl0ZXIoKQotICB7Ci0gICAgcmV0dXJuICJcIiI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZGF0YS9MYWJlbHNBbmRJZHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZGF0YS9MYWJlbHNBbmRJZHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJkMGY2NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2RhdGEvTGFiZWxzQW5kSWRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZGF0YTsKLQotcHVibGljIGNsYXNzIExhYmVsc0FuZElkcwotewotICBwcml2YXRlIFN0cmluZ1tdIGxhYmVsc187Ci0gIHByaXZhdGUgU3RyaW5nW10gaWRzXzsKLSAgCi0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIGlkc18uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nW10gZ2V0SWRzXygpCi0gIHsKLSAgICByZXR1cm4gaWRzXzsKLSAgfQotICAvKioKLSAgICogQHBhcmFtIGlkc18gVGhlIGlkc18gdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SWRzXyhTdHJpbmdbXSBpZHNfKQotICB7Ci0gICAgdGhpcy5pZHNfID0gaWRzXzsKLSAgfQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBsYWJlbHNfLgotICAgKi8KLSAgcHVibGljIFN0cmluZ1tdIGdldExhYmVsc18oKQotICB7Ci0gICAgcmV0dXJuIGxhYmVsc187Ci0gIH0KLSAgLyoqCi0gICAqIEBwYXJhbSBsYWJlbHNfIFRoZSBsYWJlbHNfIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExhYmVsc18oU3RyaW5nW10gbGFiZWxzXykKLSAgewotICAgIHRoaXMubGFiZWxzXyA9IGxhYmVsc187Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZGF0YS9UeXBlUnVudGltZVNlcnZlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9kYXRhL1R5cGVSdW50aW1lU2VydmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1YjQ0NDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9kYXRhL1R5cGVSdW50aW1lU2VydmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDEzICAgMTM1NTgxIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZGF0YTsKLQotcHVibGljIGNsYXNzIFR5cGVSdW50aW1lU2VydmVyCi17Ci0gIHByaXZhdGUgU3RyaW5nIHR5cGVJZF8gICAgID0gIiI7Ci0gIHByaXZhdGUgU3RyaW5nIHJ1bnRpbWVJZF8gID0gIiI7Ci0gIHByaXZhdGUgU3RyaW5nIHNlcnZlcklkXyAgID0gIiI7Ci0gIHByaXZhdGUgU3RyaW5nIHNlcnZlckluc3RhbmNlSWRfOwotICAKLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgcnVudGltZUlkXy4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UnVudGltZUlkKCkKLSAgewotICAgIHJldHVybiBydW50aW1lSWRfOwotICB9Ci0gIC8qKgotICAgKiBAcGFyYW0gcnVudGltZUlkXyBUaGUgcnVudGltZUlkXyB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSdW50aW1lSWQoU3RyaW5nIHJ1bnRpbWVJZF8pCi0gIHsKLSAgICB0aGlzLnJ1bnRpbWVJZF8gPSBydW50aW1lSWRfOwotICB9Ci0gIC8qKgotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHNlcnZlcklkXy4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmVySWQoKQotICB7Ci0gICAgcmV0dXJuIHNlcnZlcklkXzsKLSAgfQotICAvKioKLSAgICogQHBhcmFtIHNlcnZlcklkXyBUaGUgc2VydmVySWRfIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZlcklkKFN0cmluZyBzZXJ2ZXJJZF8pCi0gIHsKLSAgICB0aGlzLnNlcnZlcklkXyA9IHNlcnZlcklkXzsKLSAgfQotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBzZXJ2ZXJJbnN0YW5jZUlkXy4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmVySW5zdGFuY2VJZCgpCi0gIHsKLSAgICByZXR1cm4gc2VydmVySW5zdGFuY2VJZF87Ci0gIH0KLSAgLyoqCi0gICAqIEBwYXJhbSBzZXJ2ZXJJbnN0YW5jZUlkXyBUaGUgc2VydmVySW5zdGFuY2VJZF8gdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U2VydmVySW5zdGFuY2VJZChTdHJpbmcgc2VydmVySW5zdGFuY2VJZF8pCi0gIHsKLSAgICB0aGlzLnNlcnZlckluc3RhbmNlSWRfID0gc2VydmVySW5zdGFuY2VJZF87Ci0gIH0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgdHlwZUlkXy4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VHlwZUlkKCkKLSAgewotICAgIHJldHVybiB0eXBlSWRfOwotICB9Ci0gIC8qKgotICAgKiBAcGFyYW0gdHlwZUlkXyBUaGUgdHlwZUlkXyB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUeXBlSWQoU3RyaW5nIHR5cGVJZF8pCi0gIHsKLSAgICB0aGlzLnR5cGVJZF8gPSB0eXBlSWRfOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCN0b1N0cmluZygpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIHJldHVybiAidHlwZSgiICsgdHlwZUlkXyArICIpIHJ1bnRpbWUoIiArIHJ1bnRpbWVJZF8gKyAiKSBmYWN0b3J5KCIgKyBzZXJ2ZXJJZF8gKyAiKSBzZXJ2SW5zdElkKCIgKyBzZXJ2ZXJJbnN0YW5jZUlkXyArICIpIjsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmplY3QpCi0gIHsKLQlpZiAob2JqZWN0ICE9IG51bGwgJiYgb2JqZWN0IGluc3RhbmNlb2YgVHlwZVJ1bnRpbWVTZXJ2ZXIpCi0JewotCQlUeXBlUnVudGltZVNlcnZlciB0cnMgPSAoVHlwZVJ1bnRpbWVTZXJ2ZXIpb2JqZWN0OwotCQlTdHJpbmcgdHJzVHlwZUlkID0gdHJzLmdldFR5cGVJZCgpOwotCQlTdHJpbmcgdHJzUnVudGltZUlkID0gdHJzLmdldFJ1bnRpbWVJZCgpOwotCQlTdHJpbmcgdHJzU2VydmVySWQgPSB0cnMuZ2V0U2VydmVySWQoKTsKLQkJU3RyaW5nIHRyc1NlcnZlckluc3RhbmNlSWQgPSB0cnMuZ2V0U2VydmVySW5zdGFuY2VJZCgpOwotCQkKLQkJYm9vbGVhbiB0eXBlSWRzTWF0Y2ggPSAoKHR5cGVJZF8gPT0gbnVsbCkgJiYgKHRyc1R5cGVJZCA9PSBudWxsKSkgfHwgKCh0eXBlSWRfICE9IG51bGwpICYmICh0eXBlSWRfLmVxdWFscyh0cnNUeXBlSWQpKSk7Ci0JCWlmICghdHlwZUlkc01hdGNoKSByZXR1cm4gZmFsc2U7Ci0JCWJvb2xlYW4gcnVudGltZUlkc01hdGNoID0gKChydW50aW1lSWRfID09IG51bGwpICYmICh0cnNSdW50aW1lSWQgPT0gbnVsbCkpIHx8ICgocnVudGltZUlkXyAhPSBudWxsKSAmJiAocnVudGltZUlkXy5lcXVhbHModHJzUnVudGltZUlkKSkpOwotCQlpZiAoIXJ1bnRpbWVJZHNNYXRjaCkgcmV0dXJuIGZhbHNlOwotCQlib29sZWFuIHNlcnZlcklkc01hdGNoID0gKChzZXJ2ZXJJZF8gPT0gbnVsbCkgJiYgKHRyc1NlcnZlcklkID09IG51bGwpKSB8fCAoKHNlcnZlcklkXyAhPSBudWxsKSAmJiAoc2VydmVySWRfLmVxdWFscyh0cnNTZXJ2ZXJJZCkpKTsKLQkJaWYgKCFzZXJ2ZXJJZHNNYXRjaCkgcmV0dXJuIGZhbHNlOwotCQlib29sZWFuIHNlcnZlckluc3RhbmNlSWRzTWF0Y2ggPSAoKHNlcnZlckluc3RhbmNlSWRfID09IG51bGwpICYmICh0cnNTZXJ2ZXJJbnN0YW5jZUlkID09IG51bGwpKSB8fCAoKHNlcnZlckluc3RhbmNlSWRfICE9IG51bGwpICYmIChzZXJ2ZXJJbnN0YW5jZUlkXy5lcXVhbHModHJzU2VydmVySW5zdGFuY2VJZCkpKTsKLQkJaWYgKCFzZXJ2ZXJJbnN0YW5jZUlkc01hdGNoKSByZXR1cm4gZmFsc2U7Ci0JCQotCQlyZXR1cm4gdHJ1ZTsJCQotCX0KLQkKLQlyZXR1cm4gZmFsc2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZGlhbG9nL0lTdGF0dXNEaWFsb2dDb25zdGFudHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZGlhbG9nL0lTdGF0dXNEaWFsb2dDb25zdGFudHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTViMTM0ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2RpYWxvZy9JU3RhdHVzRGlhbG9nQ29uc3RhbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZGlhbG9nOwotCi0vKioKLSogQ29uc3RhbnRzIGZvciBzdGF0dXMgZGlhbG9ncwotKi8KLXB1YmxpYyBpbnRlcmZhY2UgSVN0YXR1c0RpYWxvZ0NvbnN0YW50cyB7Ci0KLSAgLyoKLSAgKiBCdXR0b24gSUQgZm9yIHRoZSAiWWVzIiBidXR0b24KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgWUVTX0lEID0gMjsKLSAgLyoKLSAgKiBCdXR0b24gSUQgZm9yIHRoZSAiWWVzIHRvIGFsbCIgYnV0dG9uCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFlFU19UT19BTExfSUQgPSA0OwotICAvKgotICAqIEJ1dHRvbiBJRCBmb3IgdGhlICJDYW5jZWwiIGJ1dHRvbgotICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDQU5DRUxfSUQgPSAxOwotICAvKgotICAqIEJ1dHRvbiBJRCBmb3IgdGhlICJPSyIgYnV0dG9uCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9LX0lEID0gMDsKLSAgLyoKLSAgKiBCdXR0b24gSUQgZm9yIHRoZSAiRGV0YWlscyIgYnV0dG9uCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFVEFJTFNfSUQgPSAxMzsKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9leHQvV2ViU2VydmljZUV4ZWN1dGFibGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZXh0L1dlYlNlcnZpY2VFeGVjdXRhYmxlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5YzY5MTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9leHQvV2ViU2VydmljZUV4ZWN1dGFibGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi0vKioKLSogQWxsIEV4dGVuc2lvbnMgd2l0aCBleGVjdHV0YWJsZSBleHRlbnNpb25zIHNob3VsZCBpbXBsZW1lbnQgdGhpcyAKLSogdG8gZml0IG91ciBmcmFtZXdvcmsKLSovCi1wdWJsaWMgaW50ZXJmYWNlIFdlYlNlcnZpY2VFeGVjdXRhYmxlCi17Ci0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotICAvKioKLSAgKlJldHVybnMgYSB3aXphcmQgZnJhZ21lbnQgZm9yIHRoaXMgZXhlbnRpb24gdHlwZSAKLSAgKgotICAqLwotICBwdWJsaWMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gZ2V0RmluaXNoQ29tbWFuZCgpOwotfQotCi0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZXh0L1dlYlNlcnZpY2VFeHRlbnNpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZXh0L1dlYlNlcnZpY2VFeHRlbnNpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg2YTlhMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2V4dC9XZWJTZXJ2aWNlRXh0ZW5zaW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZXh0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLQotCi0vKioKLSogVGhpcyByZXByZXNlbnRzIGFuIGV4dGVuc2lvbiBpbiB0aGUgcGx1Z2luIHJlZ2lzdHJ5IAotKiBJdCBqb2IgaXMgdG8gYWN0IGFzIGEgcHJveHkgdG8gdGhlIGljb25maWdlbGVtZW50Ci0qLwotcHVibGljIGludGVyZmFjZSBXZWJTZXJ2aWNlRXh0ZW5zaW9uCi17Ci0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIC8qKgotICAqIElmIHRoZSBleHRlbnNpb24gaGFzIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBleGVjdXRlZCBvciBhIGZyYWdtZW50IGFkZGVkCi0gICogQHJldHVybiBXZWJTZXJ2aWNlRXhlY3V0YWJsZSB0aGlzIGludGVyZmFjZSBob2xkcyBleGVjdXRhYmxlIGNvZGUgYW5kIGEgCi0gICogZnJhZ21lbnQKLSAgKi8KLSAgcHVibGljIE9iamVjdCBnZXRXZWJTZXJ2aWNlRXhlY3V0YWJsZUV4dGVuc2lvbigpOwotCi0gIC8qKgotICAqIFRoaXMgaXMgdGhlIGNvbmZpZyBlbGVtZW50IHRoYXQgaG9sZHMgdGhlIGV4dGVuc2lvbiBpbmZvCi0gICogQHBhcmFtIElDb25maWd1cmF0aW9uRWxlbWVudCBFeHRlbnNpb24gZWxlbWVudAotICAqLwotICBwdWJsaWMgdm9pZCBzZXRDb25maWdFbGVtZW50KElDb25maWd1cmF0aW9uRWxlbWVudCBjb25maWdFbGVtZW50KTsKLSAKLSAgLyoqCi0gICogSWYgdGhlIGV4dGVuc2lvbiBoYXMgY29kZSB0aGF0IAotICAqIEByZXR1cm4gSUNvbmZpZ3VyYXRpb25FbGVtZW50IEV4dGVuc2lvbiBlbGVtZW50Ci0gICovCi0gIHB1YmxpYyBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZ2V0Q29uZmlnRWxlbWVudCgpOwotfQotCi0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZXh0L1dlYlNlcnZpY2VFeHRlbnNpb25JbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2V4dC9XZWJTZXJ2aWNlRXh0ZW5zaW9uSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDcyMGQ0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZXh0L1dlYlNlcnZpY2VFeHRlbnNpb25JbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmV4dDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5FbnZpcm9ubWVudFNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JTG9nOwotCi0KLQotCi0KLS8qKgotKiBUaGlzIHJlcHJlc2VudHMgYW4gZXh0ZW5zaW9uIGluIHRoZSBwbHVnaW4gcmVnaXN0cnkgCi0qIEl0IGpvYiBpcyB0byBhY3QgYXMgYSBwcm94eSB0byB0aGUgaWNvbmZpZ2VsZW1lbnQKLSovCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZUV4dGVuc2lvbkltcGwgaW1wbGVtZW50cyBXZWJTZXJ2aWNlRXh0ZW5zaW9uCi17Ci0KLQlwcml2YXRlIElMb2cJbG9nXzsKLQkKLSAgLyoKLSAgKiBUaGUgQ29uZmlnRWxlbWVudCB0aGF0IGhvbGRzIGV4dGVuc2lvbiBpbmZvCi0gICovCi0gIHByb3RlY3RlZCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgY29uZmlnRWxlbWVudF87Ci0KLSAgLyoKLSAgKiBUaGUgZXh0ZW5zaW9uIGV4ZWN1dGFibGUgCi0gICovCi0gIHByb3RlY3RlZCBXZWJTZXJ2aWNlRXhlY3V0YWJsZSB3ZWJTZXJ2aWNlRXhlY3V0YWJsZV87Ci0gIAotCi0gIHB1YmxpYyBXZWJTZXJ2aWNlRXh0ZW5zaW9uSW1wbChJQ29uZmlndXJhdGlvbkVsZW1lbnQgY29uZmlnRWxlbWVudCkKLSAgewotICAgIGNvbmZpZ0VsZW1lbnRfID0gY29uZmlnRWxlbWVudDsKLSAgICBsb2dfID0gRW52aXJvbm1lbnRTZXJ2aWNlLmdldEVjbGlwc2VMb2coKTsKLSAgfQotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIC8qKgotICAqIElmIHRoZSBleHRlbnNpb24gaGFzIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBleGVjdXRlZCBvciBhIGZyYWdtZW50IGFkZGVkCi0gICogQHJldHVybiBXZWJTZXJ2aWNlRXhlY3V0YWJsZSB0aGlzIGludGVyZmFjZSBob2xkcyBleGVjdXRhYmxlIGNvZGUgYW5kIGEgCi0gICogZnJhZ21lbnQKLSAgKi8KLSAgcHVibGljIE9iamVjdCBnZXRXZWJTZXJ2aWNlRXhlY3V0YWJsZUV4dGVuc2lvbigpCi0gIHsKLSAgICBpZih3ZWJTZXJ2aWNlRXhlY3V0YWJsZV8gIT0gbnVsbCkgcmV0dXJuIHdlYlNlcnZpY2VFeGVjdXRhYmxlXzsKLQotICAgIHRyeXsKLSAgICAgIHJldHVybiBjb25maWdFbGVtZW50Xy5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKCJjbGFzcyIpOwotICAgIH1jYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKXsKLSAgICAgIGxvZ18ubG9nKElMb2cuRVJST1IsIDUwMjksIHRoaXMsICJnZXRXZWJTZXJ2aWNlRXhlY3V0YWJsZUV4dGVuc2lvbiIsZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgKiBUaGlzIGlzIHRoZSBjb25maWcgZWxlbWVudCB0aGF0IGhvbGRzIHRoZSBleHRlbnNpb24gaW5mbwotICAqIEBwYXJhbSBJQ29uZmlndXJhdGlvbkVsZW1lbnQgRXh0ZW5zaW9uIGVsZW1lbnQKLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q29uZmlnRWxlbWVudChJQ29uZmlndXJhdGlvbkVsZW1lbnQgY29uZmlnRWxlbWVudCkKLSAgewotICAgIGNvbmZpZ0VsZW1lbnRfID0gY29uZmlnRWxlbWVudDsKLSAgfQkKLQotICAvKioKLSAgKiBUaGlzIGlzIHRoZSBjb25maWcgZWxlbWVudCB0aGF0IGhvbGRzIHRoZSBleHRlbnNpb24gaW5mbwotICAqIEByZXR1cm4gSUNvbmZpZ3VyYXRpb25FbGVtZW50IEV4dGVuc2lvbiBlbGVtZW50Ci0gICovCi0gIHB1YmxpYyBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZ2V0Q29uZmlnRWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gY29uZmlnRWxlbWVudF87Ci0gIH0KLSAgCi0gIC8qKgotICAqIFRoZSBuYW1lIG9mIHRoZSBleHRlbnNpb24gYmVpbmcgdXNlZAotICAqIEByZXR1cm4gU3RyaW5nIG5hbWUgb2YgdGhpcyBleHRlbnNpb24KLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLSAgewotICAgIHJldHVybiBnZXRDb25maWdFbGVtZW50KCkuZ2V0QXR0cmlidXRlKCAibmFtZSIgKTsKLSAgfQotCi0KLX0KLQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2V4dC9XZWJTZXJ2aWNlRXh0ZW5zaW9uUmVnaXN0cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZXh0L1dlYlNlcnZpY2VFeHRlbnNpb25SZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmMxZDA3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZXh0L1dlYlNlcnZpY2VFeHRlbnNpb25SZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQ7Ci0KLQotLyoqCi0qIFJldHVybnMgdGhlIG5hbWVzIG9mIHRoZSBleHRlbnNpb25zIGZvciBhIGdpdmVuIGV4dGVuc2lvbi1wb2ludCAKLSogYWxzbyByZXR1cm5zIHRoZSBleHRlbnNpb24gb2JqZWN0cyAKLSoKLSovCi1wdWJsaWMgaW50ZXJmYWNlIFdlYlNlcnZpY2VFeHRlbnNpb25SZWdpc3RyeQotewotICAKLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbmFtZXMgb2YgYWxsIHJlZ2lzdGVyZWQgZXh0ZW5zaW9ucwotICAqIEByZXR1cm4gVGhlIG5hbWVzIG9mIGFsbCByZWdpc3RlcmVkIGV4dGVuc2lvbnMuCi0gICovCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRXZWJTZXJ2aWNlRXh0ZW5zaW9uTmFtZXMgKCk7Ci0gIAotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBleHRlbnNpb24gb2JqZWN0IG9mIHRoZSBnaXZlbiBuYW1lCi0gICpAcmV0dXJuIFdlYlNlcnZpY2VFeHRlbnNpb24gb2JqZWN0Ci0gICovCi0gIHB1YmxpYyBXZWJTZXJ2aWNlRXh0ZW5zaW9uIGdldFdlYlNlcnZpY2VFeHRlbnNpb25zQnlOYW1lKCBTdHJpbmcgbmFtZSk7Ci0KLSAgLyoqCi0gICogUmV0dXJucyBBbGwgZXh0ZW50aW9uIG9iamVjdHMgaW4gdGhpcyByZWdpc3RyeQotICAqQHJldHVybiBXZWJTZXJ2aWNlRXh0ZW5zaW9uIG9iamVjdHMKLSAgKi8KLSAgcHVibGljIFdlYlNlcnZpY2VFeHRlbnNpb25bXSBnZXRXZWJTZXJ2aWNlRXh0ZW5zaW9ucygpOwotICAKLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2V4dC9XZWJTZXJ2aWNlRXh0ZW5zaW9uUmVnaXN0cnlJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2V4dC9XZWJTZXJ2aWNlRXh0ZW5zaW9uUmVnaXN0cnlJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2YmVhMTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9leHQvV2ViU2VydmljZUV4dGVuc2lvblJlZ2lzdHJ5SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA4MjEgICAxNTM4MzMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIEFsbG93IHRoZSBXZWIgU2VydmljZSBUZXN0IGV4dGVuc2lvbiBwb2ludCB0byBzcGVjaWZ5IHRoZSBzdXBwb3J0ZWQgY2xpZW50IHJ1bnRpbWUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZGF0YS5MYWJlbHNBbmRJZHM7Ci0KLQotLyoqCi0qIFRoaXMgaXMgYSBnZW5lcmljIHJlZ2lzdHJ5IHdoaWNoIHNldHMgdXAgZ2VuZXJhbCBjb2RlIGluIGhhbmRsaW5nICAgCi0qIElDb25maWdFbGVtZW50cyBmb3IgYW4gZXh0ZW5zaW9uCi0qLwotcHVibGljIGFic3RyYWN0IGNsYXNzIFdlYlNlcnZpY2VFeHRlbnNpb25SZWdpc3RyeUltcGwgaW1wbGVtZW50cyBXZWJTZXJ2aWNlRXh0ZW5zaW9uUmVnaXN0cnkKLXsKLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0gIAotICBwcm90ZWN0ZWQgSGFzaHRhYmxlIG5hbWVFeHRlbnNpb25UYWJsZV87Ci0gIHByb3RlY3RlZCBWZWN0b3IgaWRfOwotICBwcm90ZWN0ZWQgVmVjdG9yIGxhYmVsXzsKLSAgcHJpdmF0ZSBMYWJlbHNBbmRJZHMgbGFiZWxzYW5kaWRzXzsKLSAgICAKLSAgcHVibGljIFdlYlNlcnZpY2VFeHRlbnNpb25SZWdpc3RyeUltcGwoKQotICB7Ci0gICAgbmFtZUV4dGVuc2lvblRhYmxlXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBsYWJlbF8gPSBuZXcgVmVjdG9yKCk7Ci0gICAgaWRfID0gbmV3IFZlY3RvcigpOwotICAgIGxvYWRFeHRlbnNpb25zKCk7Ci0gIH0KLSAgCi0gIC8qKgotICAqIENoaWxkcmVuIHJlZ2lzdHJpZXMgd2lsbCBoYXZlIGRpZmZlcmVudCBleHRlbnNpb24gdHlwZXMgCi0gICogQHJldHVybiBXZWJzZXJ2aWNlRXh0ZW5zaW9uIGhvbGRzIGEgY29uZmlnIGVsZW0KLSAgKiBmb3IgdGhhdCBleHRlbnNpb24gY2FwYWJsZSBvZiBjcmVhdGluZyBhbiBleGVjdXRhYmxlIGZpbGUKLSAgKi8KLSAgcHVibGljIGFic3RyYWN0IFdlYlNlcnZpY2VFeHRlbnNpb24gY3JlYXRlV2ViU2VydmljZUV4dGVuc2lvbihJQ29uZmlndXJhdGlvbkVsZW1lbnQgY29uZmlnRWxlbWVudCk7Ci0KLSAgLyoqCi0gICogQ2hpbGRyZW4gbXVzdCBpbXBsZW1lbnQgaG93IHRoZXkgZ2V0IHRoZSBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSAKLSAgKiBAcmV0dXJuIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGFuIGFycmF5IG9mIGVsZW1lbnRzIHBhcnRpY3VsYXIgdG8gdGhhdAotICAqIGV4dGVuc2lvbgotICAqLwotICBwdWJsaWMgYWJzdHJhY3QgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gZ2V0Q29uZmlnRWxlbWVudHMoKTsKLQotICAvKgotICAqIExvYWRzIFdlYlNlcnZpY2VFeHRlbnNpb25zIGZvciBXZWJTZXJ2aWNlQ2xpZW50VGVzdCBpbnRvIHRoaXMgcmVnaXN0cnkuCi0gICogVGhpcyBpcyBkb25lIGJ5IHF1ZXJ5aW5nIHRoZSBwbHVnaW4gcmVnaXN0cnkgZm9yIGFsbCBleHRlbnNpb25zCi0gICogdGhhdCBleHRlbmQgd2ViU2VydmljZUNsaWVudFRlc3QgIAotICAqLwotICBwcm90ZWN0ZWQgdm9pZCBsb2FkRXh0ZW5zaW9ucyAoKQotICB7ICAgIAotICAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGNvbmZpZyA9IGdldENvbmZpZ0VsZW1lbnRzKCk7Ci0KLSAgICBmb3IoaW50IGlkeD0wOyBpZHg8Y29uZmlnLmxlbmd0aDsgaWR4KyspIAotICAgIHsKLSAgICAgIElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtID0gY29uZmlnW2lkeF07Ci0gICAgICBTdHJpbmcgbGFiZWwgPSBlbGVtLmdldEF0dHJpYnV0ZSggImxhYmVsIiApOwotICAgICAgU3RyaW5nIGlkID0gICBlbGVtLmdldEF0dHJpYnV0ZSggImlkIiApOyAgICAgIAotICAgICAgV2ViU2VydmljZUV4dGVuc2lvbiB3ZWJTZXJ2aWNlRXh0ZW5zaW9uID0gY3JlYXRlV2ViU2VydmljZUV4dGVuc2lvbihlbGVtKTsJCi0gICAgICBuYW1lRXh0ZW5zaW9uVGFibGVfLnB1dChsYWJlbCx3ZWJTZXJ2aWNlRXh0ZW5zaW9uKTsKLSAgICAgIGxhYmVsXy5hZGQobGFiZWwpOwotICAgICAgaWRfLmFkZChpZCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbmFtZXMgb2YgYWxsIHJlZ2lzdGVyZWQgZXh0ZW5zaW9ucwotICAqIEByZXR1cm4gVGhlIG5hbWVzIG9mIGFsbCByZWdpc3RlcmVkIGV4dGVuc2lvbnMuCi0gICovCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRXZWJTZXJ2aWNlRXh0ZW5zaW9uTmFtZXMgKCkKLSAgewotICAgIHJldHVybiAoU3RyaW5nW10pbmFtZUV4dGVuc2lvblRhYmxlXy5rZXlTZXQoKS50b0FycmF5KCBuZXcgU3RyaW5nWzBdICk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJuIHRoZSBuYW1lcyBhbmQgSWRzIAotICAgKi8KLSAgcHVibGljIExhYmVsc0FuZElkcyBnZXRMYWJlbHNBbmRJRHMoKQotICB7Ci0gIAlsYWJlbHNhbmRpZHNfID0gbmV3IExhYmVsc0FuZElkcygpOwotICAJbGFiZWxzYW5kaWRzXy5zZXRMYWJlbHNfKChTdHJpbmdbXSlsYWJlbF8udG9BcnJheSggbmV3IFN0cmluZ1swXSApKTsKLSAgCWxhYmVsc2FuZGlkc18uc2V0SWRzXygoU3RyaW5nW10paWRfLnRvQXJyYXkoIG5ldyBTdHJpbmdbMF0gKSk7Ci0gIAlyZXR1cm4gbGFiZWxzYW5kaWRzXzsKLSAgfQotICAKLSAgLyoqCi0gICogUmV0dXJucyB0aGUgZXh0ZW5zaW9uIG9iamVjdCBvZiB0aGUgZ2l2ZW4gbmFtZQotICAqIEByZXR1cm4gV2ViU2VydmljZUV4dGVuc2lvbiBvYmplY3QKLSAgKi8KLSAgcHVibGljIFdlYlNlcnZpY2VFeHRlbnNpb24gZ2V0V2ViU2VydmljZUV4dGVuc2lvbnNCeU5hbWUoIFN0cmluZyBuYW1lKQotICB7Ci0gICAgcmV0dXJuIChXZWJTZXJ2aWNlRXh0ZW5zaW9uKW5hbWVFeHRlbnNpb25UYWJsZV8uZ2V0KG5hbWUpOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyBBbGwgZXh0ZW50aW9uIG9iamVjdHMgaW4gdGhpcyByZWdpc3RyeQotICAqQHJldHVybiBXZWJTZXJ2aWNlRXh0ZW5zaW9uIG9iamVjdHMKLSAgKi8KLSAgcHVibGljIFdlYlNlcnZpY2VFeHRlbnNpb25bXSBnZXRXZWJTZXJ2aWNlRXh0ZW5zaW9ucygpCi0gIHsKLSAgICByZXR1cm4gKFdlYlNlcnZpY2VFeHRlbnNpb25bXSluYW1lRXh0ZW5zaW9uVGFibGVfLnZhbHVlcygpLnRvQXJyYXkoIG5ldyBXZWJTZXJ2aWNlRXh0ZW5zaW9uWzBdICk7Ci0gIH0KLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2V4dC90ZXN0L0phdmFQcm94eVRlc3RDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2V4dC90ZXN0L0phdmFQcm94eVRlc3RDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmYjM2N2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9leHQvdGVzdC9KYXZhUHJveHlUZXN0Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmV4dC50ZXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuc2VsZWN0aW9uLkJvb2xlYW5TZWxlY3Rpb247Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSmF2YVByb3h5VGVzdENvbW1hbmQgZXh0ZW5kcyBXZWJTZXJ2aWNlVGVzdEZpbmlzaENvbW1hbmQKLXsKLQotIC8qKgotICAqIFRoaXMgaG9sZHMgYW4gaW5mbyBjbGFzcyB0aGF0IGNvbWVzIGZyb20gdXNlciBpbnB1dCBvciBzb21lIGNhbGNpbGF0aW9ucyB0aGF0IG5lZWRzIHRvIGJlCi0gICogdXNlZCBmb3IgdGhlIGZpbmlzaAotICAqLwotICAKLSAgcHVibGljIHZvaWQgc2V0SnNwRm9sZGVyKFN0cmluZyBqc3BGb2xkZXIpOwotICAKLSAgcHVibGljIHZvaWQgc2V0UnVuQ2xpZW50VGVzdChib29sZWFuIHJ1bkNsaWVudFRlc3QpOwotICAKLSAgcHVibGljIHZvaWQgc2V0U2FtcGxlUHJvamVjdChTdHJpbmcgc2FtcGxlUHJvamVjdCk7Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRQcm94eUJlYW4oU3RyaW5nIHByb3h5QmVhbik7Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRTZXRFbmRwb2ludE1ldGhvZChTdHJpbmcgc2V0RW5kcG9pbnRNZXRob2QpOwotICAKLSAgcHVibGljIHZvaWQgc2V0Q2xpZW50UHJvamVjdChTdHJpbmcgY2xpZW50UHJvamVjdCk7Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRNZXRob2RzKEJvb2xlYW5TZWxlY3Rpb25bXSBtZXRob2RzKTsKLSAgCi0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9leHQvdGVzdC9XU0RMVGVzdEZpbmlzaENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZXh0L3Rlc3QvV1NETFRlc3RGaW5pc2hDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzMTcyNTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9leHQvdGVzdC9XU0RMVGVzdEZpbmlzaENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQudGVzdDsKLQotcHVibGljIGludGVyZmFjZSBXU0RMVGVzdEZpbmlzaENvbW1hbmQgZXh0ZW5kcyBXZWJTZXJ2aWNlVGVzdEZpbmlzaENvbW1hbmQKLXsKLSAgcHVibGljIHZvaWQgc2V0U2VydmljZVByb2plY3QoU3RyaW5nIHNlcnZlclByb2plY3QpOwotICBwdWJsaWMgdm9pZCBzZXRXc2RsU2VydmljZVVSTChTdHJpbmcgd3NkbFVSSSk7Ci0gIHB1YmxpYyB2b2lkIHNldEV4dGVybmFsQnJvd3Nlcihib29sZWFuIGV4dGVybmFsKTsgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2V4dC90ZXN0L1dlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2V4dC90ZXN0L1dlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3MmJkODcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9leHQvdGVzdC9XZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDgxNiAgIDEwNDg3MCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNjA4MjEgICAxNTM4MzMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIEFsbG93IHRoZSBXZWIgU2VydmljZSBUZXN0IGV4dGVuc2lvbiBwb2ludCB0byBzcGVjaWZ5IHRoZSBzdXBwb3J0ZWQgY2xpZW50IHJ1bnRpbWUKLSAqIDIwMDcwMzE0ICAgMTU0NTQzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5IGlzIHRyYWNraW5nIGV4dGVuc2lvbnMgdXNpbmcgbGFiZWwgYXR0cmlidXRlIGluc3RlYWQgb2YgSUQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQudGVzdDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQuV2ViU2VydmljZUV4dGVuc2lvbkltcGw7Ci0KLQotCi0vKioKLSogVGhpcyByZXByZXNlbnRzIGFuIGV4dGVuc2lvbiBpbiB0aGUgcGx1Z2luIHJlZ2lzdHJ5IAotKiBJdCBqb2IgaXMgdG8gYWN0IGFzIGEgcHJveHkgdG8gdGhlIGljb25maWdlbGVtZW50Ci0qIEluIHBhcnRpY3VsYXIgaXQgaG9sZHMgYSBjbGllbnQgdGVzdCBleHRlbnNpb24gZWxlbWVudCAKLSovCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZVRlc3RFeHRlbnNpb24gZXh0ZW5kcyBXZWJTZXJ2aWNlRXh0ZW5zaW9uSW1wbAotewotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICBwcml2YXRlIExpc3Qgc3VwcG9ydGVkUnVudGltZXNfID0gbmV3IEFycmF5TGlzdCgpOwotICAKLSAgcHVibGljIFdlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uKElDb25maWd1cmF0aW9uRWxlbWVudCBjb25maWdFbGVtZW50KQotICB7Ci0gICAgc3VwZXIoY29uZmlnRWxlbWVudCk7Ci0gICAgICAgCi0gICAgU3RyaW5nIHJ1bnRpbWVzTGlzdCA9IGdldENvbmZpZ0VsZW1lbnQoKS5nZXRBdHRyaWJ1dGUoInN1cHBvcnRlZENsaWVudFJ1bnRpbWVzIik7ICAKLSAgIAotICAgIGFkZFJ1bnRpbWVzKHJ1bnRpbWVzTGlzdCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBBZGRzIGEgbGlzdCBvZiBzcGFjZSBkZWxpbWl0ZWQgcnVudGltZSBJRHMuCi0gICAqIAotICAgKiBAcGFyYW0gcnVudGltZXNMaXN0IFRoZSBsaXN0IG9mIHJ1bnRpbWUgSURzLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkUnVudGltZXMoU3RyaW5nIHJ1bnRpbWVzTGlzdCkgewotCSAgCi0JICBpZiAocnVudGltZXNMaXN0ID09IG51bGwpCi0JCSAgcmV0dXJuOwotCSAgCi0JICBTdHJpbmdbXSBydW50aW1lcyA9IHJ1bnRpbWVzTGlzdC5zcGxpdCgiXFxzKyIpOwotCSAgICAKLQkgIGZvciAoaW50IGkgPSAwOyBpIDwgcnVudGltZXMubGVuZ3RoOyBpKyspIHsJICAgIAkKLQkJICBpZiAocnVudGltZXNbaV0ubGVuZ3RoKCkgPiAwKQotCQkJICBzdXBwb3J0ZWRSdW50aW1lc18uYWRkKHJ1bnRpbWVzW2ldKTsgICAKLQkgIH0KLSAgfQotICAKLSAgLyoqCi0gICogV2lsbCB0aGlzIHRlc3RDbGllbnQgZ2VuZXJhdGUgY29kZQotICAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIGNvZGVnZW4gbmVlZGVkCi0gICovCi0gIHB1YmxpYyBib29sZWFuIGlzQ29kZUdlbk5lZWRlZCgpCi0gIHsKLSAgICByZXR1cm4gQm9vbGVhbi52YWx1ZU9mKGdldENvbmZpZ0VsZW1lbnQoKS5nZXRBdHRyaWJ1dGUoICJjb2RlR2VuZXJhdGVkIiApKS5ib29sZWFuVmFsdWUoKTsKLSAgfQotICAKLSAgLyoqCi0gICogVXNlIHRoZSBkZWZhdWx0IEZvbGRlciBQcm92aWRlZCBieSB1cwotICAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIG5vIHNwZWNpYWwgZm9sZGVyIHJlcXVpcmVzCi0gICovCi0gIHB1YmxpYyBib29sZWFuIHVzZURlZmF1bHRDb2RlR2VuRm9sZGVyKCkKLSAgewotICAgIHJldHVybiBCb29sZWFuLnZhbHVlT2YoZ2V0Q29uZmlnRWxlbWVudCgpLmdldEF0dHJpYnV0ZSggImRlZmF1bHRjb2RlZ2VuZm9sZGVyIiApKS5ib29sZWFuVmFsdWUoKTsKLSAgfQotCi0gIC8qKgotICAqIFVzZSBTcGVjaWFsIEZvbGRlciBmb3IgZ2VuZXJhdGVkIGNvZGUKLSAgKiBAcmV0dXJuIFN0cmluZyBzcGVjaWFsIGZvbGRlciBuYW1lCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q29kZUdlbkZvbGRlcigpCi0gIHsKLSAgICByZXR1cm4gZ2V0Q29uZmlnRWxlbWVudCgpLmdldEF0dHJpYnV0ZSggImNvZGVnZW5mb2xkZXIiICk7Ci0gIH0KLQotICAvKioKLSAgKiBEbyB3ZSBuZWVkIHRvIGxhdW5jaCBzb21ldGhpbmcKLSAgKiBAcmV0dXJuIEJvb2xlYW4gaWYgdHJ1ZSBsYXVuY2ggY29kZWdlbgotICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0xhdW5jaFJlcXVpcmVkKCkKLSAgewotICAgIHJldHVybiBCb29sZWFuLnZhbHVlT2YoZ2V0Q29uZmlnRWxlbWVudCgpLmdldEF0dHJpYnV0ZSggImxhdW5jaFJlcXVpcmVkIiApKS5ib29sZWFuVmFsdWUoKTsKLSAgfQotCi0gIC8qKgotICAqIERvIHdlIG5lZWQgdGhlIG1ldGhvZHMgZm9yIHRoZSBwcm94eQotICAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIHByb3h5IG1ldGhvZHMgbmVlZGVkCi0gICovCi0gIHB1YmxpYyBib29sZWFuIGFyZU1ldGhvZHNOZWVkZWQoKQotICB7Ci0gICAgcmV0dXJuIEJvb2xlYW4udmFsdWVPZihnZXRDb25maWdFbGVtZW50KCkuZ2V0QXR0cmlidXRlKCAibWV0aG9kc25lZWRlZCIgKSkuYm9vbGVhblZhbHVlKCk7Ci0gIH0KLQotICAvKioKLSAgKiBEb2VzIHRoaXMgdGVzdCBtYWNoaW5lIG5lZWQgYSBzZXJ2ZXIKLSAgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiBhIHNlcnZlciBpcyByZXF1aXJlZAotICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1NlcnZlck5lZWRlZCgpCi0gIHsKLSAgICByZXR1cm4gQm9vbGVhbi52YWx1ZU9mKGdldENvbmZpZ0VsZW1lbnQoKS5nZXRBdHRyaWJ1dGUoICJzZXJ2ZXJSZXF1aXJlZCIgKSkuYm9vbGVhblZhbHVlKCk7Ci0gIH0KLQotICAvKioKLSAgKiBVc2UgdGhlIERlZmF1bHQgU2VydmVyIGNob3NlbiBieSB0aGUgd2l6YXJkCi0gICogQHJldHVybiBib29sZWFuIHRydWUgaWYgdGhlIGRlZmF1bHQgc2VydmVyIGlzIHdhbnRlZAotICAqLwotICBwdWJsaWMgYm9vbGVhbiB1c2VEZWZhdWx0U2VydmVyKCkKLSAgewotICAgIHJldHVybiBCb29sZWFuLnZhbHVlT2YoZ2V0Q29uZmlnRWxlbWVudCgpLmdldEF0dHJpYnV0ZSggImRlZmF1bHRzZXJ2ZXIiICkpLmJvb2xlYW5WYWx1ZSgpOwotICB9Ci0KLSAgLyoqCi0gICogVXNlIHRoZSBEZWZhdWx0IFNlcnZlciBjaG9zZW4gYnkgdGhlIHdpemFyZAotICAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIHRoZSBkZWZhdWx0IHNlcnZlciBpcyB3YW50ZWQKLSAgKi8KLSAgcHVibGljIFN0cmluZyB1c2VTZXJ2ZXIoKQotICB7Ci0gICAgcmV0dXJuIGdldENvbmZpZ0VsZW1lbnQoKS5nZXRBdHRyaWJ1dGUoICJ1c2VzZXJ2ZXIiICk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiB0ZXN0V1NETCgpCi0gIHsKLSAgCVN0cmluZyB3c2RsID0gZ2V0Q29uZmlnRWxlbWVudCgpLmdldEF0dHJpYnV0ZSggInRlc3RXU0RMIiApOwotICAgIGlmKHdzZGwuZXF1YWxzKCJ5ZXMiKSB8fCB3c2RsLmVxdWFscygidHJ1ZSIpKQotCSAgcmV0dXJuIHRydWU7Ci0JIAotCXJldHVybiBmYWxzZTsgIAotICB9Ci0gIAkKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGlkIGF0dHJpYnV0ZSBvZiB0aGlzIFdlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSB2YWx1ZSBvZiB0aGUgaWQgYXR0cmlidXRlLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRJZCgpIHsKLQlyZXR1cm4gZ2V0Q29uZmlnRWxlbWVudCgpLmdldEF0dHJpYnV0ZSggImlkIiApOyAKLSAgfQotICAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBsYWJlbCBhdHRyaWJ1dGUgb2YgdGhpcyBXZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbgotICAgKiAKLSAgICogQHJldHVybiBUaGUgdmFsdWUgb2YgdGhlIGxhYmVsIGF0dHJpYnV0ZS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TGFiZWwoKSB7Ci0gICAgcmV0dXJuIGdldENvbmZpZ0VsZW1lbnQoKS5nZXRBdHRyaWJ1dGUoICJsYWJlbCIgKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIERvZXMgdGhpcyBleHRlbnNpb24gYWxsb3cgZXh0ZW5kZXJzIHRvIHJlc3RyaWN0IHRoZSBydW50aW1lcyB0aGF0IGFyZSBzdXBwb3J0ZWQ/Ci0gICAqICAKLSAgICogQHJldHVybiBUaGUgdmFsdWUgb2YgdGhlIGFsbG93UnVuaW1lc1Jlc3RyaWN0aW9uIGF0dHJpYnV0ZSwgZmFsc2UgaWYgbm90IHByZXNlbnQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBhbGxvd0NsaWVudFJ1bnRpbWVzUmVzdHJpY3Rpb24oKSB7Ci0JICByZXR1cm4gQm9vbGVhbi52YWx1ZU9mKGdldENvbmZpZ0VsZW1lbnQoKS5nZXRBdHRyaWJ1dGUoICJhbGxvd0NsaWVudFJ1bnRpbWVzUmVzdHJpY3Rpb24iICkpLmJvb2xlYW5WYWx1ZSgpOwotICB9ICAKLSAgICAgICAKLSAgLyoqCi0gICAqIERldGVybWluZXMgaWYgdGhpcyBXZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbiBzdXBwb3J0cyB0aGUgZ2l2ZSBjbGllbnQgcnVudGltZSBJRC4KLSAgICogCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgY2xpZW50IHJ1bnRpbWUgSUQgaXMgc3VwcG9ydGVkLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBzdXBwb3J0c1J1bnRpbWUoU3RyaW5nIHJ1bnRpbWVJZCkgewotCSAgCi0JIGlmICghYWxsb3dDbGllbnRSdW50aW1lc1Jlc3RyaWN0aW9uKCkgfHwgc3VwcG9ydGVkUnVudGltZXNfLmlzRW1wdHkoKSkKLQkJIHJldHVybiB0cnVlOwotCSAgCi0JIHJldHVybiBzdXBwb3J0ZWRSdW50aW1lc18uY29udGFpbnMocnVudGltZUlkKTsKLSAgfQotfQotCi0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZXh0L3Rlc3QvV2ViU2VydmljZVRlc3RGaW5pc2hDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL2V4dC90ZXN0L1dlYlNlcnZpY2VUZXN0RmluaXNoQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTFlOWQwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZXh0L3Rlc3QvV2ViU2VydmljZVRlc3RGaW5pc2hDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZXh0LnRlc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjsKLQotcHVibGljIGludGVyZmFjZSBXZWJTZXJ2aWNlVGVzdEZpbmlzaENvbW1hbmQgCi17Ci0KLSAgLyoqCi0gICAqIElmIHRoZSBjb21tYW5kIG5lZWRzIGEgc2VydmVyIHRoaXMgaXMgdGhlIGNob3NlbiAKLSAgICogY2xpZW50IHNlcnZlcklECi0gICAqIEBwYXJhbSBzYW1wbGVTZXJ2ZXJUeXBlSUQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZlclR5cGVJRChTdHJpbmcgc2VydmljZVNlcnZlclR5cGVJRCk7Ci0gIAotICAvKioKLSAgICogVGhpcyBpcyB0aGUgSVNlcnZlciBpZiByZXF1aXJlZAotICAgKiBAcGFyYW0gc2FtcGxlRXhpc3RpbmdTZXJ2ZXIKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEV4aXN0aW5nU2VydmVyKElTZXJ2ZXIgc2VydmljZUV4aXN0aW5nU2VydmVyKTsKLSAgCi0gIC8qKgotICAgKiBUaGlzIGlzIHRoZSBlbmRwb2ludHMgaWYgbW9uaXRvciBzZXJ2aWNlIGlzIGVuYWJsZWQKLSAgICogQHBhcmFtIGVuZHBvaW50cwotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RW5kcG9pbnQoTGlzdCBlbmRwb2ludHMpOwotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvZXh0L3Rlc3QvV2ViU2VydmljZVRlc3RSZWdpc3RyeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9leHQvdGVzdC9XZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjZmVjY2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC9leHQvdGVzdC9XZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDgyMSAgIDE1MzgzMyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgQWxsb3cgdGhlIFdlYiBTZXJ2aWNlIFRlc3QgZXh0ZW5zaW9uIHBvaW50IHRvIHNwZWNpZnkgdGhlIHN1cHBvcnRlZCBjbGllbnQgcnVudGltZQotICogMjAwNzAzMTQgICAxNTQ1NDMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdlYlNlcnZpY2VUZXN0UmVnaXN0cnkgaXMgdHJhY2tpbmcgZXh0ZW5zaW9ucyB1c2luZyBsYWJlbCBhdHRyaWJ1dGUgaW5zdGVhZCBvZiBJRAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmV4dC50ZXN0OwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5leHQuV2ViU2VydmljZUV4dGVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZXh0LldlYlNlcnZpY2VFeHRlbnNpb25SZWdpc3RyeUltcGw7Ci0KLXB1YmxpYyBjbGFzcyBXZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5IGV4dGVuZHMgV2ViU2VydmljZUV4dGVuc2lvblJlZ2lzdHJ5SW1wbAotewotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLSAgLyoKLSAgICogVGhpcyBpcyBhIHNpbmdsZXRvbiBiZWNhc3VlIGl0IHdhcyBkZWNpZGVkIHRoYXQgdGhlIG1lbW9yeSBmb290IHByaW50IAotICAgKiBpcyBub3QgYXMgZXhwZW5zaXZlIGFzIHRoZSB0aW1lIHRha2VuIHJldHJpZXZpbmcgdGhlIGRhdGEKLSAgICogCi0gICAqLwotICAKLSAgCi0gIHByaXZhdGUgc3RhdGljIFdlYlNlcnZpY2VUZXN0UmVnaXN0cnkgd3N0cjsKLSAgCi0gIHB1YmxpYyBzdGF0aWMgV2ViU2VydmljZVRlc3RSZWdpc3RyeSBnZXRJbnN0YW5jZSgpCi0gIHsKLSAgCWlmKHdzdHIgPT0gbnVsbCkgd3N0ciA9IG5ldyBXZWJTZXJ2aWNlVGVzdFJlZ2lzdHJ5KCk7Ci0gICAgcmV0dXJuIHdzdHI7Ci0gIH0KLSAgCi0gIHByaXZhdGUgV2ViU2VydmljZVRlc3RSZWdpc3RyeSgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0gIAotICAvKioKLSAgICogSGVscGVyIG1ldGhvZCB0byAiam9pbiIgYW4gZXhpc3RpbmcgdmFsdWUgYW5kIGEgbmV3IHZhbHVlIHRvZ2V0aGVyIGJ5Ci0gICAqIGEgc3BhY2UgaW4gYmV0d2Vlbi4gIEhhbmRsZXMgc3BlY2lhbCBjYXNlIHdoZW4gZWl0aGVyIHZhbHVlIGlzIG51bGwuIAotICAgKiAgCi0gICAqIEBwYXJhbSBleGlzdGluZ1ZhbHVlIFRoZSBleGlzdGluZyB2YWx1ZQotICAgKiBAcGFyYW0gbmV3VmFsdWUgVGhlIG5ldyB2YWx1ZQotICAgKiBAcmV0dXJuIElmIGVpdGVyIHRoZSBleGlzdGluZyBvciBuZXcgdmFsdWUgaXMgbnVsbCwgc2ltcGx5IHJldHVybnMgdGhlCi0gICAqIG5ldyB2YWx1ZSBhcyBpcyAod2hpY2ggY291bGQgYmUgbnVsbCkuICBPdGhlcndpc2UgcmV0dXJucyB0aGUgdmFsdWUgam9pbmVkCi0gICAqIGJ5IGEgc3BhY2UuCi0gICAqLwotICBwcml2YXRlIFN0cmluZyBnZW5OZXdWYWx1ZShTdHJpbmcgZXhpc3RpbmdWYWx1ZSwgU3RyaW5nIG5ld1ZhbHVlKSB7Ci0JICAKLQkgIGlmIChleGlzdGluZ1ZhbHVlID09IG51bGwgfHwgbmV3VmFsdWUgPT0gbnVsbCkKLQkJICByZXR1cm4gbmV3VmFsdWU7Ci0JICAJICAJIAotCSAgcmV0dXJuIGV4aXN0aW5nVmFsdWUgKyAiICIgKyBuZXdWYWx1ZTsKLSAgfQotICAgIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmV4dC5XZWJTZXJ2aWNlRXh0ZW5zaW9uUmVnaXN0cnlJbXBsI2xvYWRFeHRlbnNpb25zKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGxvYWRFeHRlbnNpb25zICgpCi0gIHsKLQkvLyBrZWVwIHRyYWNrIG9mIHRoZSBzdXBwb3J0IHJ1bnRpbWVzIGZvciBlYWNoIHRlc3QgZmFjaWxpdHkgSUQKLSAgICBIYXNodGFibGUgc3VwcG9ydGVkQ2xpZW50UnVudGltZXMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0JICAKLSAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBjb25maWcgPSBnZXRDb25maWdFbGVtZW50cygpOwotICAgIAotICAgIGZvcihpbnQgaWR4PTA7IGlkeDxjb25maWcubGVuZ3RoOyBpZHgrKykgCi0gICAgewotICAgICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW0gPSBjb25maWdbaWR4XTsKLSAgICAgIFN0cmluZyBsYWJlbCA9IGVsZW0uZ2V0QXR0cmlidXRlKCAibGFiZWwiICk7Ci0gICAgICBTdHJpbmcgaWQgPSAgIGVsZW0uZ2V0QXR0cmlidXRlKCAiaWQiICk7ICAgICAgCi0gICAgICAKLSAgICAgIC8vIGxhYmVsIGlzIGZvdW5kLCBoZW5jZSB3ZSBoYXZlIGEgbWFzdGVyIGV4dGVuc2lvbiBlbGVtZW50Ci0gICAgICBpZiAobGFiZWwgIT0gbnVsbCkgewotICAgIAkgIFdlYlNlcnZpY2VFeHRlbnNpb24gd2ViU2VydmljZUV4dGVuc2lvbiA9IGNyZWF0ZVdlYlNlcnZpY2VFeHRlbnNpb24oZWxlbSk7CQotICAgIAkgIG5hbWVFeHRlbnNpb25UYWJsZV8ucHV0KGlkLHdlYlNlcnZpY2VFeHRlbnNpb24pOwotICAgIAkgIGxhYmVsXy5hZGQobGFiZWwpOwotICAgIAkgIGlkXy5hZGQoaWQpOwotICAgICAgfQotICAgICAgCi0gICAgICAvLyBzbGF2ZSBleHRlbnNpb24gZWxlbWVudCwgd2hpY2ggb25seSBoYXMgdGhlIGlkIGFuZCBzdXBwb3J0ZWRDbGllbnRSdW50aW1lcyBhdHRyaWJ1dGVzCi0gICAgICBlbHNlIHsKLSAgICAJICBTdHJpbmcgZXhpc3RpbmdWYWx1ZSA9IChTdHJpbmcpIHN1cHBvcnRlZENsaWVudFJ1bnRpbWVzLmdldChpZCk7Ci0gICAgCSAgU3RyaW5nIG5ld1ZhbHVlID0gZ2VuTmV3VmFsdWUoZXhpc3RpbmdWYWx1ZSwgZWxlbS5nZXRBdHRyaWJ1dGUoInN1cHBvcnRlZENsaWVudFJ1bnRpbWVzIikpOwotICAgIAkgIAotICAgIAkgIGlmIChuZXdWYWx1ZSAhPSBudWxsKQotICAgIAkJICBzdXBwb3J0ZWRDbGllbnRSdW50aW1lcy5wdXQoaWQsIG5ld1ZhbHVlKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy8gbWVyZ2UgYW55IHN1cHBvcnRlZENsaWVudFJ1bnRpbWVzIGF0dHJpYnV0ZXMgZnJvbSB0aGUgc2xhdmUgZWxlbWVudHMgYmFjayB0byB0aGUgbWFzdGVyIGVsZW1lbnRzCi0gICAgCi0gICAgSXRlcmF0b3IgaXRlciA9IG5hbWVFeHRlbnNpb25UYWJsZV8udmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICAKLSAgICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKLSAgICAJV2ViU2VydmljZVRlc3RFeHRlbnNpb24gd2ViU2VydmljZVRlc3RFeHRlbnNpb24gPSAoV2ViU2VydmljZVRlc3RFeHRlbnNpb24pIGl0ZXIubmV4dCgpOwotICAgIAotICAgIAkvLyBza2lwIGlmIHRoZSBleHRlbnNpb24gZG9lcyBub3QgYWxsb3cgcmVzdHJpY3Rpb24gb24gdGhlIHN1cHBvcnRlZCBjbGllbnQgcnVudGltZXMKLSAgICAJaWYgKHdlYlNlcnZpY2VUZXN0RXh0ZW5zaW9uLmFsbG93Q2xpZW50UnVudGltZXNSZXN0cmljdGlvbigpKSB7Ci0gICAgCQlTdHJpbmcgaWQgPSB3ZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbi5nZXRJZCgpOwotICAgIAkJd2ViU2VydmljZVRlc3RFeHRlbnNpb24uYWRkUnVudGltZXMoKFN0cmluZykgc3VwcG9ydGVkQ2xpZW50UnVudGltZXMuZ2V0KGlkKSk7Ci0gICAgCX0KLSAgICB9ICAgIAotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmV4dC5XZWJTZXJ2aWNlRXh0ZW5zaW9uUmVnaXN0cnlJbXBsI2dldFdlYlNlcnZpY2VFeHRlbnNpb25OYW1lcygpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nW10gZ2V0V2ViU2VydmljZUV4dGVuc2lvbk5hbWVzKCkgewotCXJldHVybiAoU3RyaW5nW10pbGFiZWxfLnRvQXJyYXkoIG5ldyBTdHJpbmdbMF0gKTsKLSAgfSAKLQotICAvKioKLSAgICogUmV0dXJuIHRoZSBJRCBjb3JyZXNwb25kaW5nIHRvIHRoZSBsYWJlbC4KLSAgICogQHBhcmFtIGxhYmVsIFRoZSBsYWJlbC4KLSAgICogQHJldHVybiBUaGUgSUQgY29ycmVzcG9uZGluZyB0byB0aGUgbGFiZWwsIG9yIGlmIHRoZSBsYWJlbCBwYXJhbWV0ZXIgaXMgbm90IGEgbGFiZWwKLSAgICogKG11c3QgYmUgYWxyZWFkeSBhbiBJRCksIGl0IGlzIHJldHVybmVkLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBsYWJlbFRvSWQoU3RyaW5nIGxhYmVsKSB7Ci0gICAgaW50IGxhYmVsSW5kZXggPSBsYWJlbF8uaW5kZXhPZihsYWJlbCk7Ci0gICAgaWYgKGxhYmVsSW5kZXggPT0gLTEpCi0gICAgICByZXR1cm4gbGFiZWw7Ci0gICAgcmV0dXJuIChTdHJpbmcpIGlkXy5lbGVtZW50QXQobGFiZWxJbmRleCk7Ci0gIH0gCi0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIFdlYlNlcnZpY2VFeHRlbnNpb24gd2l0aCB0aGUgZ2l2ZW4gSUQuCi0gICAqIEBwYXJhbSBpZCBUaGUgSUQuCi0gICAqIEByZXR1cm4gVGhlIFdlYlNlcnZpY2VFeHRlbnNpb24gb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdlYlNlcnZpY2VFeHRlbnNpb24gZ2V0V2ViU2VydmljZUV4dGVuc2lvbnNCeUlkKFN0cmluZyBpZCkgewotICAgIHJldHVybiAoV2ViU2VydmljZUV4dGVuc2lvbikgbmFtZUV4dGVuc2lvblRhYmxlXy5nZXQoaWQpOwotICB9IAotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuZXh0LldlYlNlcnZpY2VFeHRlbnNpb25SZWdpc3RyeUltcGwjZ2V0V2ViU2VydmljZUV4dGVuc2lvbnNCeU5hbWUoamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyBXZWJTZXJ2aWNlRXh0ZW5zaW9uIGdldFdlYlNlcnZpY2VFeHRlbnNpb25zQnlOYW1lKFN0cmluZyBuYW1lKSB7Ci0gICAgcmV0dXJuIGdldFdlYlNlcnZpY2VFeHRlbnNpb25zQnlJZChsYWJlbFRvSWQobmFtZSkpOwotICB9Ci0KLSAgLyoqCi0gICogQ2hpbGRyZW4gcmVnaXN0cmllcyB3aWxsIGhhdmUgZGlmZmVyZW50IGV4dGVuc2lvbiB0eXBlcyAKLSAgKiBAcmV0dXJuIFdlYnNlcnZpY2VFeHRlbnNpb24gaG9sZHMgYSBjb25maWcgZWxlbQotICAqIGZvciB0aGF0IGV4dGVuc2lvbiBjYXBhYmxlIG9mIGNyZWF0aW5nIGFuIGV4ZWN1dGFibGUgZmlsZQotICAqLwotICBwdWJsaWMgV2ViU2VydmljZUV4dGVuc2lvbiBjcmVhdGVXZWJTZXJ2aWNlRXh0ZW5zaW9uKElDb25maWd1cmF0aW9uRWxlbWVudCBjb25maWdFbGVtZW50KQotICB7Ci0gICAgcmV0dXJuIG5ldyBXZWJTZXJ2aWNlVGVzdEV4dGVuc2lvbihjb25maWdFbGVtZW50KTsKLSAgfQotCi0gIC8qKgotICAqIENoaWxkcmVuIG11c3QgaW1wbGVtZW50IGhvdyB0aGV5IGdldCB0aGUgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gCi0gICogQHJldHVybiBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBhbiBhcnJheSBvZiBlbGVtZW50cyBwYXJ0aWN1bGFyIHRvIHRoYXQKLSAgKiBleHRlbnNpb24KLSAgKi8KLSAgcHVibGljIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGdldENvbmZpZ0VsZW1lbnRzKCkKLSAgewotICAgIElFeHRlbnNpb25SZWdpc3RyeSByZWcgPSBQbGF0Zm9ybS5nZXRFeHRlbnNpb25SZWdpc3RyeSgpOwotICAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGNvbmZpZyA9IHJlZy5nZXRDb25maWd1cmF0aW9uRWxlbWVudHNGb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3RlciIpOwotICAgIHJldHVybiBjb25maWc7ICAgIAotICB9Ci0KLQotICAgIAotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvcGx1Z2luL1dlYlNlcnZpY2VQbHVnaW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvcGx1Z2luL1dlYlNlcnZpY2VQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjUyMGQxMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLmpzdC53cy9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL2ludGVybmFsL3BsdWdpbi9XZWJTZXJ2aWNlUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MjQgICAxMTU2OTAgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwucGx1Z2luOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5QZXJzaXN0ZW50U2NlbmFyaW9Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlBlcnNpc3RlbnRVRERJUHJlZmVyZW5jZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnRleHQuU2NlbmFyaW9Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb250ZXh0LlVERElQcmVmZXJlbmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29udGV4dC5QZXJzaXN0ZW50UmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VDb250ZXh0OwotCi0KLS8qKgotKiBUaGlzIGlzIHRoZSBwbHVnaW4gY2xhc3MgZm9yIHRoZSBXZWIgU2VydmljZXMgcGx1Z2luLgotKiA8cD4KLSogVGhpcyBwbHVnaW4gY29udGFpbnMgdGhlIGJ1bGsgb2YgdGhlIFdlYiBTZXJ2aWNlcyBydW50aW1lLgotKiBPbmx5IHRoZSBncmFwaGljYWwgdXNlciBpbnRlcmZhY2UgcG9ydGlvbiBvZiB0aGUgcnVudGltZSBpcwotKiBmb3VuZCBlbHNld2hlcmUgLSBpbiB0aGUgb3JnLmVjbGlwc2UuanN0LndzLnVpIHBsdWdpbi4KLSovCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZVBsdWdpbiBleHRlbmRzIFBsdWdpbgotewotICAvKioKLSAgKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgZGVzY3JpcHRvciBvZiB0aGlzIHBsdWdpbiBpbiBwbHVnaW4ueG1sLgotICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRCA9ICJvcmcuZWNsaXBzZS5qc3Qud3MiOwotCi0gIC8qKgotICAqIFRoZSByZWZlcmVuY2UgdG8gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGlzIHBsdWdpbi4KLSAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgV2ViU2VydmljZVBsdWdpbiBpbnN0YW5jZV87Ci0KLSAgcHJpdmF0ZSBQZXJzaXN0ZW50UmVzb3VyY2VDb250ZXh0IHJlc291cmNlQ29udGV4dF87Ci0gIHByaXZhdGUgUGVyc2lzdGVudFNjZW5hcmlvQ29udGV4dCBzY2VuYXJpb0NvbnRleHRfOwotICBwcml2YXRlIFBlcnNpc3RlbnRVRERJUHJlZmVyZW5jZUNvbnRleHQgdWRkaVByZWZlcmVuY2VDb250ZXh0OwotICAKLSAgLyoqCi0gICAqIENvbnN0cnVjdHMgYSBydW50aW1lIHBsdWdpbiBvYmplY3QgZm9yIHRoaXMgcGx1Z2luLgotICAgKi8KLSAgcHVibGljIFdlYlNlcnZpY2VQbHVnaW4oKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgICBpbnN0YW5jZV8gPSB0aGlzOyAKLSAgfQotICAKLSAgLyoqCi0gICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgcGx1Z2luLgotICAqIEByZXR1cm4gVGhlIFdlYlNlcnZpY2VQbHVnaW4gc2luZ2xldG9uLgotICAqLwotICBwdWJsaWMgc3RhdGljIFdlYlNlcnZpY2VQbHVnaW4gZ2V0SW5zdGFuY2UgKCkKLSAgewotICAgIHJldHVybiBpbnN0YW5jZV87Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRGVmYXVsdFBsdWdpblByZWZlcmVuY2VzKCkgCi0gIHsKLSAgCQkoKFBlcnNpc3RlbnRVRERJUHJlZmVyZW5jZUNvbnRleHQpIGdldFVERElQcmVmZXJlbmNlQ29udGV4dCgpKS5sb2FkKCk7Ci0gIH0KLQotICBwdWJsaWMgUmVzb3VyY2VDb250ZXh0IGdldFJlc291cmNlQ29udGV4dCgpCi0gIHsKLSAgCQlpZiAocmVzb3VyY2VDb250ZXh0XyA9PSBudWxsKSAKLSAgCQkJcmVzb3VyY2VDb250ZXh0XyA9IFBlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQuZ2V0SW5zdGFuY2UoKTsKLQkJcmV0dXJuIHJlc291cmNlQ29udGV4dF87Ci0gIH0KLQotICBwdWJsaWMgU2NlbmFyaW9Db250ZXh0IGdldFNjZW5hcmlvQ29udGV4dCgpCi0gIHsKLSAgCQlpZiAoc2NlbmFyaW9Db250ZXh0XyA9PSBudWxsKQotICAJCXsKLSAgCQkgIHNjZW5hcmlvQ29udGV4dF8gPSBuZXcgUGVyc2lzdGVudFNjZW5hcmlvQ29udGV4dCgpOwotICAJCSAgc2NlbmFyaW9Db250ZXh0Xy5sb2FkKCk7Ci0gIAkJfQotCi0JCXJldHVybiBzY2VuYXJpb0NvbnRleHRfOwotICB9Ci0gIAotICBwdWJsaWMgVURESVByZWZlcmVuY2VDb250ZXh0IGdldFVERElQcmVmZXJlbmNlQ29udGV4dCgpCi0gIHsKLSAgICBpZiAodWRkaVByZWZlcmVuY2VDb250ZXh0ID09IG51bGwpCi0gICAgICB1ZGRpUHJlZmVyZW5jZUNvbnRleHQgPSBuZXcgUGVyc2lzdGVudFVERElQcmVmZXJlbmNlQ29udGV4dCgpOwotICAgIHJldHVybiB1ZGRpUHJlZmVyZW5jZUNvbnRleHQ7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC93c3J0L1dlYlNlcnZpY2VKYXZhQ2xpZW50SW5mby5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC93c3J0L1dlYlNlcnZpY2VKYXZhQ2xpZW50SW5mby5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTkwMDJiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvd3NydC9XZWJTZXJ2aWNlSmF2YUNsaWVudEluZm8uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA2MjAgICAxNDc4NjQgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC53c3J0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZUNsaWVudEluZm87Ci0KLS8qKgotICogVGhpcyBzdWJjbGFzcyBvZiBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBhZGRzIHByb3BlcnRpZXMKLSAqIHJlbGV2YW50IHRvIGRlc2NyaXB0b3JzIG9mIEphdmEgV2ViIHNlcnZpY2UgY2xpZW50cy4KLSAqLwotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VKYXZhQ2xpZW50SW5mbyBleHRlbmRzIFdlYlNlcnZpY2VDbGllbnRJbmZvCi17Ci0JcHJpdmF0ZSBJVHlwZSBqZHRUeXBlXzsKLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBKRFQgSVR5cGUgb2YgdGhlIHByaW1hcnkgSmF2YSBwcm94eSBjbGFzcwotCSAqIG9mIGEgV2ViIHNlcnZpY2UgY2xpZW50LCBvciBudWxsIGlmIG5vIHN1Y2ggY2xhc3MgaGFzCi0JICogYmVlbiBsb2NhdGVkLgotCSAqIEByZXR1cm4gVGhlIEpEVCBJVHlwZSBvZiB0aGUgSmF2YSBjbGllbnQgcHJveHkgY2xhc3MuCi0JICovCi0JcHVibGljIElUeXBlIGdldFR5cGUgKCkKLQl7Ci0JCXJldHVybiBqZHRUeXBlXzsKLQl9Ci0JCi0JLyoqCi0JICogU2V0cyB0aGUgSkRUIElUeXBlIG9mIHRoZSBwcmltYXJ5IEphdmEgcHJveHkgY2xhc3MKLQkgKiBvZiBhIFdlYiBzZXJ2aWNlIGNsaWVudC4KLQkgKiBAcGFyYW0gamR0VHlwZSBUaGUgSkRUIElUeXBlIG9mIHRoZSBKYXZhIGNsaWVudCBwcm94eSBjbGFzcy4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRUeXBlICggSVR5cGUgamR0VHlwZSApCi0JewotCQlqZHRUeXBlXyA9IGpkdFR5cGU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC93c3J0L1dlYlNlcnZpY2VKYXZhSW5mby5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5qc3Qud3Mvc3JjL29yZy9lY2xpcHNlL2pzdC93cy9pbnRlcm5hbC93c3J0L1dlYlNlcnZpY2VKYXZhSW5mby5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NmQ5ZWM5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UuanN0LndzL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvaW50ZXJuYWwvd3NydC9XZWJTZXJ2aWNlSmF2YUluZm8uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA2MjAgICAxNDc4NjQgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC53c3J0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZUluZm87Ci0KLS8qKgotICogVGhpcyBzdWJjbGFzcyBvZiBXZWJTZXJ2aWNlSW5mbyBhZGRzIHByb3BlcnRpZXMKLSAqIHJlbGV2YW50IHRvIGRlc2NyaXB0b3JzIG9mIEphdmEgV2ViIHNlcnZpY2VzLgotICovCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZUphdmFJbmZvIGV4dGVuZHMgV2ViU2VydmljZUluZm8KLXsKLQlwcml2YXRlIElUeXBlIGpkdFR5cGVfOwotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIEpEVCBJVHlwZSBvZiB0aGUgcHJpbWFyeSBKYXZhIGltcGxlbWVudGF0aW9uCi0JICogY2xhc3Mgb2YgYSBXZWIgc2VydmljZSwgb3IgbnVsbCBpZiBubyBzdWNoIGNsYXNzIGhhcwotCSAqIGJlZW4gbG9jYXRlZC4KLQkgKiBAcmV0dXJuIFRoZSBKRFQgSVR5cGUgb2YgdGhlIEphdmEgaW1wbGVtZW50YXRpb24gY2xhc3MuCi0JICovCi0JcHVibGljIElUeXBlIGdldFR5cGUgKCkKLQl7Ci0JCXJldHVybiBqZHRUeXBlXzsKLQl9Ci0JCi0JLyoqCi0JICogU2V0cyB0aGUgSkRUIElUeXBlIG9mIHRoZSBwcmltYXJ5IEphdmEgaW1wbGVtZW50YXRpb24KLQkgKiBjbGFzcyBvZiBhIFdlYiBzZXJ2aWNlLgotCSAqIEBwYXJhbSBqZHRUeXBlIFRoZSBKRFQgSVR5cGUgb2YgdGhlIEphdmEgaW1wbGVtZW50YXRpb24gY2xhc3MuCi0JICovCi0JcHVibGljIHZvaWQgc2V0VHlwZSAoIElUeXBlIGpkdFR5cGUgKQotCXsKLQkJamR0VHlwZV8gPSBqZHRUeXBlOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvLmNsYXNzcGF0aCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2U3MzkzMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjQiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjY4YjA1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotYmluCi1idWlsZC54bWwKLXJ1bnRpbWUKLXRlbXAuZm9sZGVyCi1lbnZjb3JlLmphcgotQGRvdAotc3JjLnppcAotamF2YUNvbXBpbGVyLi4uYXJncwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS8ucHJvamVjdCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzMjdkZWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlZGU4NDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0jTW9uIEphbiAzMCAxMDozNzoyMSBFU1QgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDdhMjM1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSNNb24gSmFuIDMwIDEwOjQwOjM0IEVTVCAyMDA2Ci1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0xCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0xCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwMjVlNTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVQTFVHSU5fTkFNRQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMjAzLnF1YWxpZmllcgotQnVuZGxlLVZlbmRvcjogJVBMVUdJTl9QUk9WSURFUgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmU7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb247eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0O3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50O3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUucmVnaXN0cnk7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5zZWxlY3Rpb247eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS51cmk7eC1pbnRlcm5hbDo9dHJ1ZQotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3JrcztidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcztidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50O2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvYWJvdXQuaHRtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkYjM2ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lIDA2LCAyMDA3PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvYnVpbGQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRiODJjNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1iaW4uaW5jbHVkZXMgPSAqLmphcixcCi0gICAgICAgICAgICAgICAuLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sCi1zcmMuaW5jbHVkZXMgPSBjb21wb25lbnQueG1sCi1zb3VyY2UuLiA9IHNyYy8KLW91dHB1dC4uID0gYmluLwotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL2NvbXBvbmVudC54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL2NvbXBvbmVudC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjNDU4ZjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9jb21wb25lbnQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNvbXBvbmVudCB4bWxucz0iaHR0cDovL2VjbGlwc2Uub3JnL3d0cC9yZWxlbmcvdG9vbHMvY29tcG9uZW50LW1vZGVsIiBuYW1lPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZCI+Ci0gICA8Y29tcG9uZW50LWRlcGVuZHMgdW5yZXN0cmljdGVkPSJ0cnVlIj4KLSAgIDwvY29tcG9uZW50LWRlcGVuZHM+Ci0gICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYiIGZyYWdtZW50PSJmYWxzZSIvPgotICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUiIGZyYWdtZW50PSJmYWxzZSIvPgotICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpIiBmcmFnbWVudD0iZmFsc2UiLz4KLTwvY29tcG9uZW50PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9wbHVnaW4ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3MTcwOWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgTWVzc2FnZXMgaW4gcGx1Z2luLnhtbC4KLSMKLVBMVUdJTl9OQU1FPUVudmlyb25tZW50IENvbW1hbmQgRnJhbWV3b3JrIChjb3JlKQotUExVR0lOX1BST1ZJREVSPUVjbGlwc2Uub3JnCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9Db21tYW5kRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvQ29tbWFuZEZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGFkOGRlYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9Db21tYW5kRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotLyoqCi0gKiBUaGlzIGludGVyZmFjZSBpcyB1c2VkIHRvIGNyZWF0ZSBDb21tYW5kIG9iamVjdHMuCi0gKgotICovCi1wdWJsaWMgaW50ZXJmYWNlIENvbW1hbmRGYWN0b3J5IAotewotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyBhIGNyZWF0ZWQgQ29tbWFuZCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gY3JlYXRlKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9Db21tYW5kTWFuYWdlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvQ29tbWFuZE1hbmFnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI5NDZkMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9Db21tYW5kTWFuYWdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5OwotCi0vKioKLSAqIENvbW1hbmRNYW5hZ2VycyBoZWxwIG1hbmFnZSB0aGUgbGlmZWN5Y2xlIG9mIENvbW1hbmRzLgotICovCi1wdWJsaWMgaW50ZXJmYWNlIENvbW1hbmRNYW5hZ2VyCi17Ci0gIC8qKgotICAgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBDb21tYW5kTWFuYWdlciBpcyBjYXBhYmxlIG9mIHVuZG9pbmcKLSAgICogQ29tbWFuZHMuIFNvbWUgQ29tbWFuZE1hbmFnZXJzIGFuZCBFbnZpcm9ubWVudHMgbWF5IGJlIG9mCi0gICAqIGEgc29ydCB0aGF0IHdpbGwgbmV2ZXIgdW5kbygpIENvbW1hbmRzLiBDb21tYW5kLmV4ZWN1dGUoKQotICAgKiBtZXRob2RzIHNob3VsZCB0YWtlIGFkdmFudGFnZSBvZiB0aGlzIG1ldGhvZCB0byBvcHRpbWl6ZQotICAgKiBvdXQgYW55IGNhY2hpbmcgbG9naWMgd2hlbmV2ZXIgdGhpcyBtZXRob2QgcmV0dXJucyBmYWxzZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzVW5kb0VuYWJsZWQgKCk7Ci0KLSAgLy8gVGhlcmUncyBwcm9iYWJseSBtb3JlLCBsaWtlIGZhY3RvcnkgbWV0aG9kcyBmb3IgY3JlYXRpbmcKLSAgLy8gVW5kby9SZWRvIHN0YWNrcyBhbmQgc3R1ZmYgbGlrZSB0aGF0LgotICAKLSAgcHVibGljIERhdGFNYXBwaW5nUmVnaXN0cnkgZ2V0TWFwcGluZ1JlZ2lzdHJ5KCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9FbnZpcm9ubWVudENvcmUucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL0Vudmlyb25tZW50Q29yZS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTFkOGMwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL0Vudmlyb25tZW50Q29yZS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0jIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIDIwMDcwNDE4ICAgMTc3MDA1IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIwotIyBDb21tb24gTWVzc2FnZXMKLSMKLU1TR19FUlJPUl9VTkVYUEVDVEVEX0VSUk9SPUlXQUIwMDE0RSBVbmV4cGVjdGVkIGV4Y2VwdGlvbiBvY2N1cnJlZC4KLQotVElUTEVfV0FSTklORz1XYXJuaW5nOgotVElUTEVfRVJST1I9RXJyb3I6Ci1USVRMRV9JTkZPPUluZm86CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9FbnZpcm9ubWVudENvcmVNZXNzYWdlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvRW52aXJvbm1lbnRDb3JlTWVzc2FnZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQ1ODFhZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9FbnZpcm9ubWVudENvcmVNZXNzYWdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLQotcHVibGljIGZpbmFsIGNsYXNzIEVudmlyb25tZW50Q29yZU1lc3NhZ2VzIGV4dGVuZHMgTkxTIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5FbnZpcm9ubWVudENvcmUiOy8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgRW52aXJvbm1lbnRDb3JlTWVzc2FnZXMoKSB7Ci0JCS8vIERvIG5vdCBpbnN0YW50aWF0ZQotCX0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9VTkVYUEVDVEVEX0VSUk9SOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRJVExFX1dBUk5JTkc7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVElUTEVfRVJST1I7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVElUTEVfSU5GTzsKLQotCXN0YXRpYyB7Ci0JCU5MUy5pbml0aWFsaXplTWVzc2FnZXMoQlVORExFX05BTUUsIEVudmlyb25tZW50Q29yZU1lc3NhZ2VzLmNsYXNzKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvSUNvbW1hbmRGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9JQ29tbWFuZEZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTgyYTI4Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9JQ29tbWFuZEZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZTsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi0KLS8qKgotICogCi0gKiBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gcmV0dXJuIGEgc2VxdWVuY2Ugb2YgQ29tbWFuZHMuCi0gKgotICovCi1wdWJsaWMgaW50ZXJmYWNlIElDb21tYW5kRmFjdG9yeSBleHRlbmRzIEl0ZXJhdG9yIAotewotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgbmV4dCBDb21tYW5kIGluIHRoZSBzZXF1ZW5jZS4KLSAgICovCi0gIHB1YmxpYyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiBnZXROZXh0Q29tbWFuZCgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvU2ltcGxlQ29tbWFuZEZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL1NpbXBsZUNvbW1hbmRGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1ZmRjNGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvU2ltcGxlQ29tbWFuZEZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZTsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotCi1wdWJsaWMgY2xhc3MgU2ltcGxlQ29tbWFuZEZhY3RvcnkgaW1wbGVtZW50cyBJQ29tbWFuZEZhY3RvcnkgCi17Ci0gICAgcHJpdmF0ZSBWZWN0b3IgY29tbWFuZHNfOwotCXByaXZhdGUgaW50ICAgIGluZGV4XzsKLQkKLQlwdWJsaWMgU2ltcGxlQ29tbWFuZEZhY3RvcnkoIFZlY3RvciBjb21tYW5kcyApCi0JewotCSAgY29tbWFuZHNfID0gY29tbWFuZHM7Ci0JICBpbmRleF8gICAgPSAwOwotCX0KLQkKLQlwdWJsaWMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gZ2V0TmV4dENvbW1hbmQoKSAKLQl7Ci0JCXJldHVybiAoQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24pbmV4dCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHJlbW92ZSgpIAotCXsKLSAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGhhc05leHQoKSAKLQl7Ci0JCXJldHVybiBpbmRleF8gPCBjb21tYW5kc18uc2l6ZSgpOwotCX0KLQotCXB1YmxpYyBPYmplY3QgbmV4dCgpIAotCXsKLQkJcmV0dXJuIGNvbW1hbmRzXy5lbGVtZW50QXQoaW5kZXhfKyspOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvY29tbW9uL0NvbmRpdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvY29tbW9uL0NvbmRpdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjEyY2Y3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2NvbW1vbi9Db25kaXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb247Ci0KLS8qKgotICogVGhpcyBpbnRlcmZhY2UgZGVmaW5lcyBhIGJvb2xlYW4gY29uZGl0aW9uIHRoYXQgY2FuIGJlIGV2YWx1YXRlZCBmb3IgYW55IG9iamVjdC4KLSAqLwotcHVibGljIGludGVyZmFjZSBDb25kaXRpb24KLXsKLSAgLyoqCi0gICAqIFRoaXMgcmV0dXJucyB3aGV0aGVyIHRoZSBnaXZlbiBvYmplY3QgcGFzc2VzIHRoaXMgY29uZGl0aW9uLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZXZhbHVhdGUoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2NvbW1vbi9FdmFsdWF0ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvY29tbW9uL0V2YWx1YXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhZmE4MDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvY29tbW9uL0V2YWx1YXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uOwotCi0vKioKLSAgKiBUaGlzIGludGVyZmFjZSBjYW4gYmUgdXNlZCB3aGVuIGEgY29uZGl0aW9uYWwgb2JqZWN0IG5lZWRzIHRvIGJlIHJldHVybmVkLgotKiovCi1wdWJsaWMgaW50ZXJmYWNlIEV2YWx1YXRlCi17Ci0gIC8qKgotICAgICogQHJldHVybiByZXR1cm5zIGFuIG9iamVjdCBiYXNlZCBvbiBzb21lIGV2YWx1YXRlZCBjb25kaXRpb24uCi0gICoqLwotICBwdWJsaWMgT2JqZWN0IGV2YWx1YXRlKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9jb21tb24vTWVzc2FnZVV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9jb21tb24vTWVzc2FnZVV0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3MmNkNDcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvY29tbW9uL01lc3NhZ2VVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbjsKLQotaW1wb3J0IGphdmEudGV4dC5NZXNzYWdlRm9ybWF0OwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBwcm92aWRlcyBhIGNvbnZpZW5lbnQgd2F5IHRvIGFjY2VzcyByZXNvdXJjZSBidW5kbGVzIGFuZAotICogcmV0aWV2ZSB0cmFuc2xhdGVkIHN0cmluZ3MuCi0gKgotICoKLSAqLwotcHVibGljIGNsYXNzIE1lc3NhZ2VVdGlscwotewotICBwcml2YXRlIFJlc291cmNlQnVuZGxlIHJlc291cmNlXzsKLSAgCi0gIHByaXZhdGUgc3RhdGljIEhhc2h0YWJsZSBidW5kbGVzXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHBhcmFtIGJ1bmRsZUlkIHRoZSByZXNvdXJjZSBidW5kbGUgSUQuCi0gICAqIEBwYXJhbSBvYmplY3QgdGhlIGNsYXNzIGxvYWRlciBmb3IgdGhpcyBvYmplY3Qgd2lsbCBiZSB1c2VkIHRvIHJldHJpZXZlCi0gICAqICAgICAgICAgICAgICAgdGhlIHJlc291cmNlIGJ1bmRsZS4KLSAgICovCi0gIHB1YmxpYyBNZXNzYWdlVXRpbHMoIFN0cmluZyBidW5kbGVJZCwgT2JqZWN0IG9iamVjdCApCi0gIHsKLSAgICB0aGlzKCBidW5kbGVJZCwgb2JqZWN0LmdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKSApOwotICB9Ci0gIAotICAvKioKLSAgICogCi0gICAqIEBwYXJhbSBidW5kbGVJZCB0aGUgcmVzb3VyY2UgYnVuZGxlIElELgotICAgKiBAcGFyYW0gbG9hZGVyIHRoZSBjbGFzcyBsb2FkZXIgdGhhdCB3aWxsIGJlIHVzZWQgdG8gcmV0cmlldmUKLSAgICogICAgICAgICAgICAgICB0aGUgcmVzb3VyY2UgYnVuZGxlLgotICAgKi8KLSAgcHVibGljIE1lc3NhZ2VVdGlscyggU3RyaW5nIGJ1bmRsZUlkLCBDbGFzc0xvYWRlciBsb2FkZXIgKQotICB7Ci0gICAgcmVzb3VyY2VfID0gKFJlc291cmNlQnVuZGxlKWJ1bmRsZXNfLmdldCggYnVuZGxlSWQgKTsKLSAgICAKLSAgICBpZiggcmVzb3VyY2VfID09IG51bGwgKQotICAgIHsKLSAgICAgIHJlc291cmNlXyA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZSggYnVuZGxlSWQsIExvY2FsZS5nZXREZWZhdWx0KCksIGxvYWRlciApOwotICAgICAgYnVuZGxlc18ucHV0KCBidW5kbGVJZCwgcmVzb3VyY2VfICk7Ci0gICAgfQotICB9Ci0gIAotICAvKioKLSAgICogCi0gICAqIEBwYXJhbSBrZXkgdGhlIGtleSBmb3IgdGhlIHN0cmluZyB0byByZXRyaWV2ZS4KLSAgICogQHJldHVybiByZXR1cm5zIHRoZSB0cmFuc2xhdGVkIHN0cmluZy4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TWVzc2FnZSAoIFN0cmluZyBrZXkgKQotICB7Ci0gICAgU3RyaW5nIHZhbHVlID0ga2V5OwotICAgIAotICAgIHRyeQotICAgIHsKLSAgICAgIHZhbHVlID0gcmVzb3VyY2VfLmdldFN0cmluZygga2V5ICk7IAotICAgIH0KLSAgICBjYXRjaCggVGhyb3dhYmxlIGV4YyApCi0gICAgewotICAgIH0KLSAgICAKLSAgICByZXR1cm4gdmFsdWU7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHBhcmFtIGtleSB0aGUga2V5IGZvciB0aGUgc3RyaW5nIHRvIHJldHJpZXZlLgotICAgKiBAcGFyYW0gYXJncyBUaGVzZSBhcmd1bWVudHMgd2lsbCBiZSBzdWJzdGl0dXRlZCBpbnRvIHRoZSB0cmFuc2xhdGVkIHN0cmluZy4KLSAgICogQHJldHVybiByZXR1cm5zIHRoZSB0cmFuc2xhdGVkIHN0cmluZyB3aXRoIGFueSBzdWJzdGl0dXRpb25zLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRNZXNzYWdlICggU3RyaW5nIGtleSwgT2JqZWN0W10gYXJncyApCi0gIHsKLSAgICByZXR1cm4gTWVzc2FnZUZvcm1hdC5mb3JtYXQoIGdldE1lc3NhZ2Uoa2V5KSxhcmdzICk7Ci0gIH0gCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9jb21tb24vUHJvZ3Jlc3NVdGlscy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvY29tbW9uL1Byb2dyZXNzVXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDAyOGNhYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9jb21tb24vUHJvZ3Jlc3NVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZQotICogYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLQotcHVibGljIGNsYXNzIFByb2dyZXNzVXRpbHMKLXsKLSAgc3RhdGljIHB1YmxpYyB2b2lkIHJlcG9ydCggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBTdHJpbmcgbWVzc2FnZSApCi0gIHsKLSAgICBpZiggbW9uaXRvciAhPSBudWxsICkgCi0gICAgewotICAgICAgIG1vbml0b3IuYmVnaW5UYXNrKCBtZXNzYWdlLCBJUHJvZ3Jlc3NNb25pdG9yLlVOS05PV04gKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2NvbW1vbi9SYW5nZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvY29tbW9uL1JhbmdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5MjI0ZjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvY29tbW9uL1JhbmdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC51cmkuSVVSSTsKLQotLyoqCi0gKiBDYXJyaWVzIHBvc2l0aW9uIGluZm9ybWF0aW9uIHdpdGhpbiBhIHJlc291cmNlLgotICovCi1wdWJsaWMgaW50ZXJmYWNlIFJhbmdlCi17Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVOS05PV04gPSAtMTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgaWRlbnRpZmllciBvZiB0aGUgcmVzb3VyY2UgdGhlIHJhbmdlIGFwcGxpZXMgdG8uCi0gICAqLwotICBwdWJsaWMgSVVSSSBnZXRVUkkgKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGluZGV4LCB6ZXJvLWluZGV4ZWQsIG9mIHRoZSBmaXJzdCBsaW5lCi0gICAqIG9mIHRoZSByYW5nZS4KLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0U3RhcnRpbmdMaW5lTnVtYmVyICgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBpbmRleCwgemVyby1pbmRleGVkLCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyCi0gICAqIG9mIHRoZSByYW5nZSByZWxhdGl2ZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaW5lLgotICAgKi8KLSAgcHVibGljIGludCBnZXRTdGFydGluZ0NoYXJOdW1iZXJJbkxpbmUgKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGluZGV4LCB6ZXJvLWluZGV4ZWQsIG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIKLSAgICogb2YgdGhlIHJhbmdlIHJlbGF0aXZlIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUuCi0gICAqLwotICBwdWJsaWMgaW50IGdldFN0YXJ0aW5nQ2hhck51bWJlckluVVJJICgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBpbmRleCwgemVyby1pbmRleGVkLCBvZiB0aGUgbGFzdCBsaW5lCi0gICAqIG9mIHRoZSByYW5nZS4KLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0RW5kaW5nTGluZU51bWJlciAoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgb2Zmc2V0LCB6ZXJvLWluZGV4ZWQsIG9mIHRoZSBsYXN0IGNoYXJhY3RlcgotICAgKiBvZiB0aGUgcmFuZ2UgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGluZS4KLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0RW5kaW5nQ2hhck51bWJlckluTGluZSAoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgaW5kZXgsIHplcm8taW5kZXhlZCwgb2YgdGhlIGxhc3QgY2hhcmFjdGVyCi0gICAqIG9mIHRoZSByYW5nZSByZWxhdGl2ZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLgotICAgKi8KLSAgcHVibGljIGludCBnZXRFbmRpbmdDaGFyTnVtYmVySW5VUkkgKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9jb21tb24vUmFuZ2VWZWN0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2NvbW1vbi9SYW5nZVZlY3Rvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjQ2MGJhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2NvbW1vbi9SYW5nZVZlY3Rvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbjsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLS8qKgotICogVGhpcyBWZWN0b3IgbWFrZXMgdGhlIHByb3RlY3RlZCBtZXRob2QgcmVtb3ZlUmFuZ2UgcHVibGljLgotICoKLSAqLwotcHVibGljIGNsYXNzIFJhbmdlVmVjdG9yIGV4dGVuZHMgVmVjdG9yCi17Ci0gIC8qKgotICAgKiBDb21tZW50IGZvciA8Y29kZT5zZXJpYWxWZXJzaW9uVUlEPC9jb2RlPgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gNDA0ODc5MzQ3NjY1OTIzMDc3M0w7Ci0KLSAgcHVibGljIHZvaWQgcmVtb3ZlUmFuZ2UoIGludCBzdGFydCwgaW50IGVuZCApCi0gIHsKLSAgICBzdXBlci5yZW1vdmVSYW5nZSggc3RhcnQsIGVuZCApOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9jb21tb24vU3RhdHVzVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2NvbW1vbi9TdGF0dXNVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDNhNTcyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2NvbW1vbi9TdGF0dXNVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZQotICogYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTXVsdGlTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLQotcHVibGljIGNsYXNzIFN0YXR1c1V0aWxzCi17Ci0gIHB1YmxpYyBzdGF0aWMgSVN0YXR1cyBlcnJvclN0YXR1cyggU3RyaW5nIGVycm9yTWVzc2FnZSApCi0gIHsKLSAgICByZXR1cm4gbmV3IFN0YXR1cyggSVN0YXR1cy5FUlJPUiwgImlkIiwgMCwgZXJyb3JNZXNzYWdlLCBudWxsICk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgSVN0YXR1cyBlcnJvclN0YXR1cyggVGhyb3dhYmxlIGV4YyApCi0gIHsKLSAgICBTdHJpbmcgbWVzc2FnZSA9IGV4Yy5nZXRNZXNzYWdlKCk7Ci0gICAgCi0gICAgcmV0dXJuIG5ldyBTdGF0dXMoIElTdGF0dXMuRVJST1IsICJpZCIsIDAsIG1lc3NhZ2UgPT0gbnVsbCA/ICIiIDogbWVzc2FnZSwgZXhjICk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgSVN0YXR1cyBlcnJvclN0YXR1cyggU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGMgKQotICB7Ci0gICAgcmV0dXJuIG5ldyBTdGF0dXMoIElTdGF0dXMuRVJST1IsICJpZCIsIDAsIG1lc3NhZ2UsIGV4YyApOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIE11bHRpU3RhdHVzIG11bHRpU3RhdHVzKCBTdHJpbmcgbWVzc2FnZSwgSVN0YXR1c1tdIGNoaWxkcmVuLCBUaHJvd2FibGUgZXhjICkKLSAgewotICAgIHJldHVybiBuZXcgTXVsdGlTdGF0dXMoICJpZCIsIDAsIGNoaWxkcmVuLCBtZXNzYWdlLCBleGMgKTsgIAotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIE11bHRpU3RhdHVzIG11bHRpU3RhdHVzKCBTdHJpbmcgbWVzc2FnZSwgSVN0YXR1c1tdIGNoaWxkcmVuICkKLSAgewotICAgIHJldHVybiBuZXcgTXVsdGlTdGF0dXMoICJpZCIsIDAsIGNoaWxkcmVuLCBtZXNzYWdlLCBudWxsICk7ICAKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBJU3RhdHVzIHdhcm5pbmdTdGF0dXMoIFN0cmluZyB3YXJuaW5nTWVzc2FnZSApCi0gIHsKLSAgICByZXR1cm4gbmV3IFN0YXR1cyggSVN0YXR1cy5XQVJOSU5HLCAiaWQiLCAwLCB3YXJuaW5nTWVzc2FnZSwgbnVsbCApOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIElTdGF0dXMgd2FybmluZ1N0YXR1cyggU3RyaW5nIHdhcm5pbmdNZXNzYWdlLCBUaHJvd2FibGUgZXhjICkKLSAgewotICAgIHJldHVybiBuZXcgU3RhdHVzKCBJU3RhdHVzLldBUk5JTkcsICJpZCIsIDAsIHdhcm5pbmdNZXNzYWdlLCBleGMgKTsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBJU3RhdHVzIGluZm9TdGF0dXMoIFN0cmluZyBpbmZvTWVzc2FnZSApCi0gIHsKLSAgICByZXR1cm4gbmV3IFN0YXR1cyggSVN0YXR1cy5JTkZPLCAiaWQiLCAwLCBpbmZvTWVzc2FnZSwgbnVsbCApOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9jb250ZXh0L0NvbnRleHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2NvbnRleHQvQ29udGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTcyNmEwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2NvbnRleHQvQ29udGV4dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQ7Ci0KLS8qKgotICogVGhpcyBpbnRlcmZhY2UgcHJvdmlkZXMgYSB3YXkgdG8gZ2V0IGFuZCBzZXQgcHJlZmVyZW5jZSBpbmZvcm1hdGlvbi4KLSAqCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgQ29udGV4dCAKLXsKLSAvKioKLSAgKiBMb2FkcyB0aGUgcHJlZmVyZW5jZSBkYXRhIGludG8gdGhpcyBDb250ZXh0IG9iamVjdC4KLSAgKgotICAqLwotIHB1YmxpYyB2b2lkIGxvYWQoKTsKLQotIC8qKgotICAqIFNldHMgdGhlIGRlZmF1bHQgZm9yIGEgYm9vbGVhbiBwcmVmZXJlbmNlLgotICAqIEBwYXJhbSBuYW1lIHRoZSBwcmVmZXJlbmNlIG5hbWUuCi0gICogQHBhcmFtIHZhbHVlIHRoZSBwcmVmZXJlbmNlIHZhbHVlLgotICAqLwotIHB1YmxpYyB2b2lkIHNldERlZmF1bHQgKFN0cmluZyBuYW1lLCBib29sZWFuIHZhbHVlKTsgCi0gCi0gLyoqCi0gICogU2V0cyB0aGUgZGVmYXVsdCBmb3IgYSBzdHJpbmcgcHJlZmVyZW5jZS4KLSAgKiBAcGFyYW0gbmFtZSB0aGUgcHJlZmVyZW5jZSBuYW1lLgotICAqIEBwYXJhbSB2YWx1ZSB0aGUgcHJlZmVyZW5jZSB2YWx1ZS4KLSAgKi8KLSBwdWJsaWMgdm9pZCBzZXREZWZhdWx0IChTdHJpbmcgbmFtZSwgU3RyaW5nIHZhbHVlKTsKLSAKLSAvKioKLSAgKiBTZXRzIHRoZSBkZWZhdWx0IGZvciBhIGludCBwcmVmZXJlbmNlLgotICAqIEBwYXJhbSBuYW1lIHRoZSBwcmVmZXJlbmNlIG5hbWUuCi0gICogQHBhcmFtIHZhbHVlIHRoZSBwcmVmZXJlbmNlIHZhbHVlLgotICAqLwotIHB1YmxpYyB2b2lkIHNldERlZmF1bHQgKFN0cmluZyBuYW1lLCBpbnQgdmFsdWUpOyAKLQotIC8qKgotICAqIFNldHMgdGhlIHZhbHVlIGZvciBhIHN0cmluZyBwcmVmZXJlbmNlLgotICAqIEBwYXJhbSBuYW1lIHRoZSBwcmVmZXJlbmNlIG5hbWUuCi0gICogQHBhcmFtIHZhbHVlIHRoZSBwcmVmZXJlbmNlIHZhbHVlLgotICAqLwotIHB1YmxpYyB2b2lkIHNldFZhbHVlIChTdHJpbmcgbmFtZSwgU3RyaW5nIHZhbHVlKTsKLSAKLSAvKioKLSAgKiBTZXRzIHRoZSB2YWx1ZSBmb3IgYSBib29sZWFuIHByZWZlcmVuY2UuCi0gICogQHBhcmFtIG5hbWUgdGhlIHByZWZlcmVuY2UgbmFtZS4KLSAgKiBAcGFyYW0gdmFsdWUgdGhlIHByZWZlcmVuY2UgdmFsdWUuCi0gICovCi0gcHVibGljIHZvaWQgc2V0VmFsdWUgKFN0cmluZyBuYW1lLCBib29sZWFuIHZhbHVlKTsKLSAKLSAvKioKLSAgKiBTZXRzIHRoZSB2YWx1ZSBmb3IgYSBpbnQgcHJlZmVyZW5jZS4KLSAgKiBAcGFyYW0gbmFtZSB0aGUgcHJlZmVyZW5jZSBuYW1lLgotICAqIEBwYXJhbSB2YWx1ZSB0aGUgcHJlZmVyZW5jZSB2YWx1ZS4KLSAgKi8KLSBwdWJsaWMgdm9pZCBzZXRWYWx1ZSAoU3RyaW5nIG5hbWUsIGludCB2YWx1ZSk7ICAgCi0KLSAvKioKLSAgKiBHZXRzIHRoZSB2YWx1ZSBmb3IgYSBzdHJpbmcgcHJlZmVyZW5jZS4KLSAgKiBAcGFyYW0gbmFtZSB0aGUgcHJlZmVyZW5jZSBuYW1lLgotICAqIEByZXR1cm4gdGhlIHByZWZlcmVuY2UgdmFsdWUuCi0gICovCi0gcHVibGljIFN0cmluZyBnZXRWYWx1ZUFzU3RyaW5nICggU3RyaW5nIG5hbWUpOwotIAotIC8qKgotICAqIEdldHMgdGhlIHZhbHVlIGZvciBhIGJvb2xlYW4gcHJlZmVyZW5jZS4KLSAgKiBAcGFyYW0gbmFtZSB0aGUgcHJlZmVyZW5jZSBuYW1lLgotICAqIEByZXR1cm4gdGhlIHByZWZlcmVuY2UgdmFsdWUuCi0gICovCi0gcHVibGljIGJvb2xlYW4gZ2V0VmFsdWVBc0Jvb2xlYW4gKCBTdHJpbmcgbmFtZSk7Ci0gCi0gLyoqCi0gICogR2V0cyB0aGUgdmFsdWUgZm9yIGEgaW50IHByZWZlcmVuY2UuCi0gICogQHBhcmFtIG5hbWUgdGhlIHByZWZlcmVuY2UgbmFtZS4KLSAgKiBAcmV0dXJuIHRoZSBwcmVmZXJlbmNlIHZhbHVlLgotICAqLwotIHB1YmxpYyBpbnQgZ2V0VmFsdWVBc0ludCAoIFN0cmluZyBuYW1lKTsgIAkJCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9jb250ZXh0L1Jlc291cmNlQ29udGV4dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvY29udGV4dC9SZXNvdXJjZUNvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDA1Yzc1YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9jb250ZXh0L1Jlc291cmNlQ29udGV4dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQ7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgUmVzb3VyY2VDb250ZXh0IAotewotIC8qKgotICAgKiBUaGlzIGNvbnN0YW50IHN0cmluZyBpcyB1c2VkIHRvIGxvb2t1cCB0aGUgb3ZlcndyaXRlIGZpbGVzIGdlbmVyYWwgcHJlZmVyZW5jZSBmcm9tCi0gICAqIHRoZSBwbHVnaW5zIGxvY2FsIHByZWZlcmVuY2VzIHN0b3JlLgotICoqLwotIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBSRUZFUkVOQ0VfT1ZFUldSSVRFID0gImZpbGVzT3ZlcndyaXRlIjsKLQotIC8qKgotICAgKiBUaGlzIGNvbnN0YW50IHN0cmluZyBpcyB1c2VkIHRvIGxvb2t1cCB0aGUgY3JlYXRlIGZvbGRlcnMgZ2VuZXJhbCBwcmVmZXJlbmNlIGZyb20KLSAgICogdGhlIHBsdWdpbnMgbG9jYWwgcHJlZmVyZW5jZXMgc3RvcmUuCi0gKiovCi0gcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJFRkVSRU5DRV9DUkVBVEVfRk9MREVSUyA9ICJjcmVhdGVGb2xkZXJzIjsKLSAKLSAvKioKLSAgICogVGhpcyBjb25zdGFudCBzdHJpbmcgaXMgdXNlZCB0byBsb29rdXAgdGhlIGNoZWNrb3V0IGZpbGVzIGdlbmVyYWwgcHJlZmVyZW5jZSBmcm9tCi0gICAqIHRoZSBwbHVnaW5zIGxvY2FsIHByZWZlcmVuY2VzIHN0b3JlLgotICoqLwotIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBSRUZFUkVOQ0VfQ0hFQ0tPVVQgPSAiZmlsZXNDaGVja291dCI7Ci0KLSAvKioKLSAgKiAKLSAgKiBAcGFyYW0gZW5hYmxlIHNldCB3aGV0aGVyIG92ZXJ3cml0aW5nIG9mIGZpbGVzIGlzIGVuYWJsZWQuCi0gICovCi0gcHVibGljIHZvaWQgc2V0T3ZlcndyaXRlRmlsZXNFbmFibGVkICggYm9vbGVhbiBlbmFibGUpOwotIAotIC8qKgotICAqIAotICAqIEByZXR1cm4gcmV0dXJucyB3aGV0aGVyIG92ZXJ3cml0aW5nIG9mIGZpbGVzIGlzIGVuYWJsZWQuCi0gICovCi0gcHVibGljIGJvb2xlYW4gaXNPdmVyd3JpdGVGaWxlc0VuYWJsZWQoKTsKLSAKLSAvKioKLSAgKiAKLSAgKiBAcGFyYW0gZW5hYmxlIHNldCB3aGV0aGVyIGNyZWF0aW9uIG9mIGZvbGRlcnMgaXMgZW5hYmxlZC4KLSAgKi8KLSBwdWJsaWMgdm9pZCBzZXRDcmVhdGVGb2xkZXJzRW5hYmxlZCggYm9vbGVhbiBlbmFibGUpOwotIAotIC8qKgotICAqIAotICAqIEByZXR1cm4gcmV0dXJucyB3aGV0aGVyIGNyZWF0aW9uIG9mIGZvbGRlcnMgaXMgZW5hYmxlZC4KLSAgKi8KLSBwdWJsaWMgYm9vbGVhbiBpc0NyZWF0ZUZvbGRlcnNFbmFibGVkKCk7IAotIAotIC8qKgotICAqIAotICAqIEBwYXJhbSBlbmFibGUgc2V0cyB3aGV0aGVyIGF1dG9tYXRpYyBjaGVja291dCBvZiBmaWxlcyBpcyBlbmFibGVkLgotICAqLwotIHB1YmxpYyB2b2lkIHNldENoZWNrb3V0RmlsZXNFbmFibGVkKCBib29sZWFuIGVuYWJsZSk7Ci0gCi0gLyoqCi0gICogCi0gICogQHJldHVybiByZXR1cm5zIHdoZXRoZXIgYXV0b21hdGljIGNoZWNrb3V0IG9mIGZpbGVzIGlzIGVuYWJsZWQuCi0gICovCi0gcHVibGljIGJvb2xlYW4gaXNDaGVja291dEZpbGVzRW5hYmxlZCgpOwotIAotIC8qKgotICAqIAotICAqIEByZXR1cm4gcmV0dXJucyBhIGNvcHkgb2YgdGhpcyBSZXNvdXJjZUNvbnRleHQuCi0gICovCi0gcHVibGljIFJlc291cmNlQ29udGV4dCBjb3B5KCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9jb250ZXh0L1Jlc291cmNlRGVmYXVsdHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2NvbnRleHQvUmVzb3VyY2VEZWZhdWx0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjEzNDQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2NvbnRleHQvUmVzb3VyY2VEZWZhdWx0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBSZXNvdXJjZURlZmF1bHRzCi17Ci0gcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBQUkVGRVJFTkNFX09WRVJXUklURV9ERUZBVUxUID0gZmFsc2U7Ci0gcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBQUkVGRVJFTkNFX0NSRUFURV9GT0xERVJTX0RFRkFVTFQgPSB0cnVlOwotIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gUFJFRkVSRU5DRV9DSEVDS09VVF9ERUZBVUxUID0gZmFsc2U7Ci0KLSAvKioKLSAgKiAKLSAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGRlZmF1bHQgc2V0dGluZyBmb3Igb3ZlcndyaXRpbmcgZmlsZXMuCi0gICovCi0gcHVibGljIHN0YXRpYyBib29sZWFuIGdldE92ZXJ3cml0ZUZpbGVzRGVmYXVsdCAoKQotIHsKLSAJcmV0dXJuIFBSRUZFUkVOQ0VfT1ZFUldSSVRFX0RFRkFVTFQ7Ci0gfQotIAotIC8qKgotICAqIAotICAqIEByZXR1cm4gcmV0dXJucyB0aGUgZGVmYXVsdCBzZXR0aW5nIG9mciBjcmVhdGluZyBmb2xkZXJzLgotICAqLwotIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBnZXRDcmVhdGVGb2xkZXJzRGVmYXVsdCAoKQotIHsgCi0JcmV0dXJuIFBSRUZFUkVOQ0VfQ1JFQVRFX0ZPTERFUlNfREVGQVVMVDsKLSB9Ci0KLSAvKioKLSAgKiAKLSAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGRlZmF1bHQgc2V0dGluZyBmb3IgY2hlY2tpbmcgb3V0IGZpbGVzLgotICAqLwotIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBnZXRDaGVja291dEZpbGVzRGVmYXVsdCgpCi0gewotCXJldHVybiBQUkVGRVJFTkNFX0NIRUNLT1VUX0RFRkFVTFQ7Ci0gfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvY29udGV4dC9UcmFuc2llbnRSZXNvdXJjZUNvbnRleHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2NvbnRleHQvVHJhbnNpZW50UmVzb3VyY2VDb250ZXh0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiMGJhM2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvY29udGV4dC9UcmFuc2llbnRSZXNvdXJjZUNvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0OwotCi0vKioKLSAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBhIFJlc291cmNlQ29udGV4dCBpbnRlcmZhY2Ugd2hlcmUgdGhlIHN0YXRlCi0gKiBvZiB0aGUgY29udGV4dCBkYXRhIGlzIHRyYW5zaWVudC4KLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBUcmFuc2llbnRSZXNvdXJjZUNvbnRleHQgaW1wbGVtZW50cyBSZXNvdXJjZUNvbnRleHQgCi17Ci0gIHByaXZhdGUgYm9vbGVhbiBvdmVyV3JpdGVGaWxlczsKLSAgcHJpdmF0ZSBib29sZWFuIGNyZWF0ZUZvbGRlcnM7Ci0gIHByaXZhdGUgYm9vbGVhbiBjaGVja091dEZpbGVzOwotCi0gIHB1YmxpYyBUcmFuc2llbnRSZXNvdXJjZUNvbnRleHQoKSB7Ci0gICAgc2V0T3ZlcndyaXRlRmlsZXNFbmFibGVkKFJlc291cmNlRGVmYXVsdHMuZ2V0T3ZlcndyaXRlRmlsZXNEZWZhdWx0KCkpOwotICAgIHNldENyZWF0ZUZvbGRlcnNFbmFibGVkKFJlc291cmNlRGVmYXVsdHMuZ2V0Q3JlYXRlRm9sZGVyc0RlZmF1bHQoKSk7Ci0gICAgc2V0Q2hlY2tvdXRGaWxlc0VuYWJsZWQoUmVzb3VyY2VEZWZhdWx0cy5nZXRDaGVja291dEZpbGVzRGVmYXVsdCgpKTsKLSAgfQotCi0gIC8qKiAgCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZUNvbnRleHQjc2V0T3ZlcndyaXRlRmlsZXNFbmFibGVkKGJvb2xlYW4pCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRPdmVyd3JpdGVGaWxlc0VuYWJsZWQoYm9vbGVhbiBlbmFibGUpIHsKLSAgICBvdmVyV3JpdGVGaWxlcyA9IGVuYWJsZTsKLSAgfQotICAKLSAgLyoqICAKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0LlJlc291cmNlQ29udGV4dCNpc092ZXJ3cml0ZUZpbGVzRW5hYmxlZCgpCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc092ZXJ3cml0ZUZpbGVzRW5hYmxlZCgpIHsKLSAgICByZXR1cm4gb3ZlcldyaXRlRmlsZXM7Ci0gIH0KLQotICAvKiogIAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VDb250ZXh0I3NldENyZWF0ZUZvbGRlcnNFbmFibGVkKGJvb2xlYW4pCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDcmVhdGVGb2xkZXJzRW5hYmxlZChib29sZWFuIGVuYWJsZSkgewotICAgIGNyZWF0ZUZvbGRlcnMgPSBlbmFibGU7Ci0gIH0KLSAgCi0gIC8qKiAgCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZUNvbnRleHQjaXNDcmVhdGVGb2xkZXJzRW5hYmxlZCgpCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0NyZWF0ZUZvbGRlcnNFbmFibGVkKCkgewotICAgIHJldHVybiBjcmVhdGVGb2xkZXJzOwotICB9Ci0KLSAgLyoqICAKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0LlJlc291cmNlQ29udGV4dCNzZXRDaGVja291dEZpbGVzRW5hYmxlZChib29sZWFuKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q2hlY2tvdXRGaWxlc0VuYWJsZWQoYm9vbGVhbiBlbmFibGUpIHsKLSAgICBjaGVja091dEZpbGVzID0gZW5hYmxlOwotICB9Ci0gIAotICAvKiogIAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VDb250ZXh0I2lzQ2hlY2tvdXRGaWxlc0VuYWJsZWQoKQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNDaGVja291dEZpbGVzRW5hYmxlZCgpIHsKLSAgICByZXR1cm4gY2hlY2tPdXRGaWxlczsKLSAgfQotICAKLSAgLyoqICAKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0LlJlc291cmNlQ29udGV4dCNjb3B5KCkKLSAgICovCi0gIHB1YmxpYyBSZXNvdXJjZUNvbnRleHQgY29weSgpIHsKLSAgICBSZXNvdXJjZUNvbnRleHQgY2MgPSBuZXcgVHJhbnNpZW50UmVzb3VyY2VDb250ZXh0KCk7Ci0gICAgY2Muc2V0T3ZlcndyaXRlRmlsZXNFbmFibGVkKGlzT3ZlcndyaXRlRmlsZXNFbmFibGVkKCkpOwotICAgIGNjLnNldENyZWF0ZUZvbGRlcnNFbmFibGVkKGlzQ3JlYXRlRm9sZGVyc0VuYWJsZWQoKSk7Ci0gICAgY2Muc2V0Q2hlY2tvdXRGaWxlc0VuYWJsZWQoaXNDaGVja291dEZpbGVzRW5hYmxlZCgpKTsKLSAgICByZXR1cm4gY2M7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2RhdGEvQmVhbk1vZGlmaWVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9kYXRhL0JlYW5Nb2RpZmllci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTZmYzY2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2RhdGEvQmVhbk1vZGlmaWVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGE7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgQmVhbk1vZGlmaWVyIHsKLQotCS8qKgotCSAqIFBlcmZvcm1zIG1vZGlmaWNhdGlvbiBvbiBiZWFuIHByb3BlcnRpZXMgdXNpbmcgZGF0YSBwcm92aWRlZAotCSAqIEBwYXJhbSBiZWFuICBUaGUgYmVhbiB0byBiZSBtb2RpZmllZAotCSAqIEBwYXJhbSBwcm9wZXJ0eUhvbGRlciBUaGUgZGF0YSB0byB1c2UgdG8gbWFrZSB0aGUgbW9kaWZpY2F0aW9uCi0JICovCi0JcHVibGljIHZvaWQgbW9kaWZ5KE9iamVjdCBiZWFuLCBPYmplY3QgcHJvcGVydHlIb2xkZXIpOwotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZGF0YS9DbGFzc0VudHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9kYXRhL0NsYXNzRW50cnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDFlNWM1Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9kYXRhL0NsYXNzRW50cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMxMyAgIDEzMDk1OCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotcHVibGljIGNsYXNzIENsYXNzRW50cnkKLXsKLSAgLy8gQSBsaXN0IG9mIGdldHRlciBtZXRob2RzIGZvciBhIHBhcnRpY3VsYXIgY2xhc3MuCi0gIHB1YmxpYyBWZWN0b3IgZ2V0dGVyTGlzdF87Ci0gIAotICAvLyBBIGxpc3Qgb2Ygc2V0dGVyIG1ldGhvZHMgZm9yIGEgcGFydGljdWxhciBjbGFzcy4KLSAgcHVibGljIFZlY3RvciBzZXR0ZXJMaXN0XzsKLSAgCi0gIC8vIEEgbGlzdCBvZiBpbnN0YW5jZSBvYmplY3RzIGZvciB0aGlzIGNsYXNzLiAgT25seSB0aGUgbGFzdCBlbnRyeQotICAvLyBzaG91bGQgYmUgbG9va2VkIGF0LiAKLSAgcHJpdmF0ZSBWZWN0b3Igb2JqZWN0TGlzdF8gPSBuZXcgVmVjdG9yKCk7Ci0gIAotICAvLyBBIGxpc3Qgb2YgSW50ZXJnZXIgb2JqZWN0cyB0aGF0IHJlcHJlc2VudCBhbiBvcmRlcmluZyBvZiBvYmplY3RzLgotICAvLyBUaGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIG9iamVjdExpc3QgdmVjdG9yIGFuZCB0aGUgb3JkZXJMaXN0IHZlY3RvcgotICAvLyBzaG91bGQgYmUgdGhlIHNhbWUuICBFYWNoIGVudHJ5IGluIHRoZSBvYmplY3RMaXN0IHZlY3RvciBpcwotICAvLyBjb3JlbGF0ZWQgd2l0aCBlYWNoIGVudHJ5IGluIHRoZSBvcmRlckxpc3QgdmVjdG9yLgotICBwcml2YXRlIFZlY3RvciBvcmRlckxpc3RfID0gbmV3IFZlY3RvcigpOwotICAKLSAgcHVibGljIHZvaWQgYWRkT2JqZWN0KCBPYmplY3Qgb2JqZWN0LCBpbnQgb3JkZXIgKQotICB7Ci0gICAgb2JqZWN0TGlzdF8uYWRkKG9iamVjdCk7Ci0gICAgb3JkZXJMaXN0Xy5hZGQoIG5ldyBJbnRlZ2VyKG9yZGVyKSApOwotICB9Ci0gIAotICBwdWJsaWMgT2JqZWN0IGdldExhc3RPYmplY3QoKQotICB7Ci0gICAgT2JqZWN0IHJlc3VsdCA9IG51bGw7Ci0gICAgCi0gICAgaWYoIG9iamVjdExpc3RfLnNpemUoKSA+IDAgKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IG9iamVjdExpc3RfLmxhc3RFbGVtZW50KCk7Ci0gICAgfQotICAgICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotICAKLSAgcHVibGljIGludCBnZXRMYXN0T3JkZXIoKQotICB7Ci0gICAgaW50IHJlc3VsdCA9IC0xOwotICAgIAotICAgIGlmKCBvcmRlckxpc3RfLnNpemUoKSA+IDAgKQotICAgIHsKLSAgICAgIHJlc3VsdCA9ICgoSW50ZWdlcilvcmRlckxpc3RfLmxhc3RFbGVtZW50KCkpLmludFZhbHVlKCk7Ci0gICAgfQotICAgICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgcmVtb3ZlT2JqZWN0KCBPYmplY3Qgb2JqZWN0ICkKLSAgewotICAgIGludCByZW1vdmFsSW5kZXggPSBvYmplY3RMaXN0Xy5pbmRleE9mKG9iamVjdCk7Ci0gICAgCi0gICAgaWYoIHJlbW92YWxJbmRleCAhPSAtMSApCi0gICAgewotICAgICAgb2JqZWN0TGlzdF8ucmVtb3ZlKHJlbW92YWxJbmRleCk7Ci0gICAgICBvcmRlckxpc3RfLnJlbW92ZShyZW1vdmFsSW5kZXgpOwotICAgIH0gICAKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZGF0YS9EYXRhRmxvd01hbmFnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2RhdGEvRGF0YUZsb3dNYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3ZmZlMDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZGF0YS9EYXRhRmxvd01hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAzMTMgICAxMzA5NTggcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGE7Ci0KLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5Nb2RpZmllcjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JTG9nOwotCi0KLXB1YmxpYyBjbGFzcyBEYXRhRmxvd01hbmFnZXIgCi17Ci0gIHByaXZhdGUgRGF0YU1hcHBpbmdSZWdpc3RyeUltcGwgcmVnaXN0cnlfOwotICBwcml2YXRlIEhhc2h0YWJsZSAgICAgICAgICAgICAgIGNsYXNzVGFibGVfOwotICBwcml2YXRlIGludCAgICAgICAgICAgICAgICAgICAgIG9yZGVyXzsKLSAgcHJpdmF0ZSBJRW52aXJvbm1lbnQJCQkJICAgIGVudmlyb25tZW50XzsKLSAgCi0gIHB1YmxpYyBEYXRhRmxvd01hbmFnZXIoIERhdGFNYXBwaW5nUmVnaXN0cnlJbXBsIHJlZ2lzdHJ5LCBJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQgKQotICB7Ci0gICAgcmVnaXN0cnlfICAgPSByZWdpc3RyeTsKLSAgICBjbGFzc1RhYmxlXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBvcmRlcl8gICAgICA9IDA7Ci0gICAgZW52aXJvbm1lbnRfID0gZW52aXJvbm1lbnQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyBEYXRhTWFwcGluZ1JlZ2lzdHJ5IGdldE1hcHBpbmdSZWdpc3RyeSgpCi0gIHsKLSAgICByZXR1cm4gcmVnaXN0cnlfOyAKLSAgfQotICAKLSAgLy8gUmVtb3ZlIHRoaXMgaW5zdGFuY2Ugb2JqZWN0IGZyb20gdGhlIG1hcHBpbmcgdGFibGUuCi0gIHB1YmxpYyB2b2lkIHVucHJvY2VzcyggT2JqZWN0IG9iamVjdCApCi0gIHsKLSAgICBTdHJpbmcgICAgIG9iamVjdFR5cGUgPSBvYmplY3QuZ2V0Q2xhc3MoKS5nZXROYW1lKCk7Ci0gICAgQ2xhc3NFbnRyeSBjbGFzc0VudHJ5ID0gKENsYXNzRW50cnkpY2xhc3NUYWJsZV8uZ2V0KCBvYmplY3RUeXBlICk7Ci0KLSAgICBpZiggY2xhc3NFbnRyeSAhPSBudWxsICkKLSAgICB7Ci0gICAgICBjbGFzc0VudHJ5LnJlbW92ZU9iamVjdChvYmplY3QpOwotICAgIH0KLSAgfQotICAKLSAgLy8gQWRkIHRoaXMgb2JqZWN0IHRvIG91ciBtYXBwaW5nIHRhYmxlIGFuZCBjYWxsIHRoZSBzZXR0ZXJzCi0gIC8vIHRoYXQgaGF2ZSBjb3JyZXNwb25kaW5nIGdldHRlciBvYmplY3RzLgotICBwdWJsaWMgdm9pZCBwcm9jZXNzKCBPYmplY3Qgb2JqZWN0ICkKLSAgewotICAgIC8vIEFkZCB0aGlzIG9iamVjdCB0byB0aGUgY2xhc3NUYWJsZV8gaWYgcmVxdWlyZWQuCi0gICAgU3RyaW5nICAgICBvYmplY3RUeXBlID0gb2JqZWN0LmdldENsYXNzKCkuZ2V0TmFtZSgpOwotICAgIENsYXNzRW50cnkgY2xhc3NFbnRyeSA9IChDbGFzc0VudHJ5KWNsYXNzVGFibGVfLmdldCggb2JqZWN0VHlwZSApOwotCQotICAgIGVudmlyb25tZW50Xy5nZXRMb2coKS5sb2coSUxvZy5JTkZPLCAiZGF0YSIsIDUwMDQsIHRoaXMsICJwcm9jZXNzIiwgIlByb2Nlc3Npbmc6ICIgKyBvYmplY3RUeXBlICk7Ci0gICAgCi0gICAgaWYoIGNsYXNzRW50cnkgPT0gbnVsbCApCi0gICAgewotICAgICAgY2xhc3NFbnRyeSA9IG5ldyBDbGFzc0VudHJ5KCk7Ci0gICAgICBjbGFzc1RhYmxlXy5wdXQoIG9iamVjdFR5cGUsIGNsYXNzRW50cnkgKTsKLSAgICB9Ci0gICAgICAgIAotICAgIGNsYXNzRW50cnkuYWRkT2JqZWN0KG9iamVjdCwgb3JkZXJfKysgKTsKLSAgICAKLSAgICAvLyBOb3cgcHJvY2VzcyB0aGUgc2V0dGVycyBmb3IgdGhpcyBvYmplY3QKLSAgICBWZWN0b3IgcnVsZUVudHJpZXMgID0gcmVnaXN0cnlfLmdldFJ1bGVFbnRyaWVzKCBvYmplY3RUeXBlICk7Ci0gICAgCi0gICAgaWYoIHJ1bGVFbnRyaWVzICE9IG51bGwgKQotICAgIHsKLSAgICAgIGlmKCBjbGFzc0VudHJ5LnNldHRlckxpc3RfID09IG51bGwgKQotICAgICAgewotICAgICAgICBjbGFzc0VudHJ5LnNldHRlckxpc3RfID0gZ2V0U2V0dGVyTGlzdCggb2JqZWN0ICk7ICAKLSAgICAgIH0gICAgCi0gICAgICAKLSAgICAgIC8vIEZvciBlYWNoIHNldHRlciBpbiB0aGlzIG9iamVjdCB0cnkgdG8gZmluZCBhIHJ1bGUuCi0gICAgICBmb3IoIGludCBzZXR0ZXJJbmRleCA9IDA7IHNldHRlckluZGV4IDwgY2xhc3NFbnRyeS5zZXR0ZXJMaXN0Xy5zaXplKCk7IHNldHRlckluZGV4KysgKQotICAgICAgewotICAgICAgICBPYmplY3RNZXRob2QgY3VycmVudE9iamVjdE1ldGhvZCA9IG5ldyBPYmplY3RNZXRob2QoKTsKLSAgICAgICAgTWV0aG9kICAgICAgIHNldHRlck1ldGhvZCAgICAgICAgPSAoTWV0aG9kKWNsYXNzRW50cnkuc2V0dGVyTGlzdF8uZWxlbWVudEF0KCBzZXR0ZXJJbmRleCApOwotICAgICAgICBSdWxlRW50cnkgICAgY3VycmVudFJ1bGVFbnRyeSAgICA9IG51bGw7Ci0KLSAgICAgICAgY3VycmVudE9iamVjdE1ldGhvZC5vcmRlciA9IC0xOwotICAgICAgICAKLSAgICAgICAgLy8gRmluZCBydWxlcyB0aGF0IG1hdGNoIHRoaXMgc2V0dGVyLiAgTm90ZTogdGhlcmUgY2FuIGJlIG1vcmUgdGhhbiBvbmUgcnVsZQotICAgICAgICAvLyB0aGF0IG1hdGNoZXMgdGhpcyBzZXR0ZXIuICBJbiB0aGlzIGNhc2Ugd2UgdXNlIHRoZSBtb3N0IHJlY2VudCwgd2hpY2ggaXMgCi0gICAgICAgIC8vIGRlZmluZWQgYnkgdGhlIG9yZGVyIGZpZWxkLgotICAgICAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgcnVsZUVudHJpZXMuc2l6ZSgpOyBpbmRleCsrICkKLSAgICAgICAgewotICAgICAgICAgIFJ1bGVFbnRyeSBydWxlRW50cnkgPSAoUnVsZUVudHJ5KXJ1bGVFbnRyaWVzLmVsZW1lbnRBdCggaW5kZXggKTsgICAgICAgCi0gICAgICAgICAgCi0gICAgICAgICAgaWYoIHNldHRlck1ldGhvZC5nZXROYW1lKCkuZXF1YWxzKCAic2V0IiArIHJ1bGVFbnRyeS50YXJnZXRQcm9wZXJ0eV8gKSApCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gV2UgZm91bmQgYSBzZXR0ZXIgZm9yIHRoaXMgcnVsZS4gIE5vdyBmaW5kIHRoZSBnZXR0ZXIgbWV0aG9kLgotICAgICAgICAgICAgLy8gTm90ZTogZ2V0R2V0dGVyTWV0aG9kIGFsd2F5cyByZXR1cm5zIGEgdmFsdWUsIGJ1dCBpZiB0aGVyZSBpcyBubwotICAgICAgICAgICAgLy8gICAgICAgZ2V0dGVycyBhdmFpbGFibGUgaXQgd2lsbCBzZXQgdGhlIG9yZGVyIHRvIC0xLgotICAgICAgICAgICAgT2JqZWN0TWV0aG9kIGdldHRlciA9IGdldEdldHRlck1ldGhvZCggcnVsZUVudHJ5LnNvdXJjZVR5cGVfLCBydWxlRW50cnkuc291cmNlUHJvcGVydHlfICk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmKCBnZXR0ZXIub3JkZXIgPT0gLTEgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgCWVudmlyb25tZW50Xy5nZXRMb2coKS5sb2coSUxvZy5JTkZPICwgImRhdGEiLCA1MDA1LCB0aGlzLCAicHJvY2VzcyIsICIgID4+Tm8gZ2V0dGVyIGZvdW5kIGZvciBwcm9wZXJ0eTogIiArIHNldHRlck1ldGhvZC5nZXROYW1lKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiggY3VycmVudE9iamVjdE1ldGhvZC5vcmRlciA8IGdldHRlci5vcmRlciApIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvLyBXZSBmb3VuZCBhIG1vcmUgcmVjZW50IGdldHRlci4KLSAgICAgICAgICAgICAgY3VycmVudE9iamVjdE1ldGhvZCA9IGdldHRlcjsKLSAgICAgICAgICAgICAgY3VycmVudFJ1bGVFbnRyeSA9IHJ1bGVFbnRyeTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0gCi0gICAgICAgIAotICAgICAgICBpZiggY3VycmVudE9iamVjdE1ldGhvZC5vcmRlciAhPSAtMSApCi0gICAgICAgIHsKLSAgICAgICAgICBpbnZva2VNZXRob2QoIGN1cnJlbnRPYmplY3RNZXRob2Qub2JqZWN0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRPYmplY3RNZXRob2QubWV0aG9kLCAKLSAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdCwgCi0gICAgICAgICAgICAgICAgICAgICAgICBzZXR0ZXJNZXRob2QsIAotICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFJ1bGVFbnRyeS50cmFuc2Zvcm1lcl8gKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgCWVudmlyb25tZW50Xy5nZXRMb2coKS5sb2coSUxvZy5JTkZPLCAiZGF0YSIsIDUwMDYsIHRoaXMsICJwcm9jZXNzIiwgIiAgPj5ObyBydWxlIGZvdW5kIGZvciBzZXR0ZXI6ICIgKyBzZXR0ZXJNZXRob2QuZ2V0TmFtZSgpICk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9ICAgCi0gIH0KLSAgCi0gIC8qKgotICAgKiBGaW5kIGFsbCB0aGUgc2V0dGVycyBmb3IgdGhpcyBvYmplY3QgYW5kIHJldHVybiBhIHZlY3RvciBvZiB0aGVtLgotICAgKiAKLSAgICogQHBhcmFtIG9iamVjdAotICAgKiBAcmV0dXJuCi0gICAqLwotICBwcml2YXRlIFZlY3RvciBnZXRTZXR0ZXJMaXN0KCBPYmplY3Qgb2JqZWN0ICkKLSAgewotICAgIFZlY3RvciByZXN1bHQgPSBuZXcgVmVjdG9yKCk7Ci0gICAgCi0gICAgTWV0aG9kW10gbWV0aG9kcyA9IG9iamVjdC5nZXRDbGFzcygpLmdldE1ldGhvZHMoKTsKLSAgICAKLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgbWV0aG9kcy5sZW5ndGg7IGluZGV4KysgKQotICAgIHsKLSAgICAgIE1ldGhvZCAgbWV0aG9kICAgICA9IG1ldGhvZHNbaW5kZXhdOwotICAgICAgYm9vbGVhbiBpc1B1YmxpYyAgID0gTW9kaWZpZXIuaXNQdWJsaWMoIG1ldGhvZC5nZXRNb2RpZmllcnMoKSApOwotICAgICAgQ2xhc3MgICByZXR1cm5UeXBlID0gbWV0aG9kLmdldFJldHVyblR5cGUoKTsKLSAgICAKLSAgICAgIGlmKCBpc1B1YmxpYyAmJiAKLSAgICAgICAgICByZXR1cm5UeXBlID09IFZvaWQuVFlQRSAmJiAKLSAgICAgICAgICBtZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKS5sZW5ndGggPT0gMSAmJgotICAgICAgICAgIG1ldGhvZC5nZXROYW1lKCkuc3RhcnRzV2l0aCggInNldCIgKSkKLSAgICAgIHsKLSAgICAgICAgbWV0aG9kLnNldEFjY2Vzc2libGUoIHRydWUgKTsKLSAgICAgICAgcmVzdWx0LmFkZCggbWV0aG9kICk7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgCi0gIHByaXZhdGUgT2JqZWN0TWV0aG9kIGdldEdldHRlck1ldGhvZCggU3RyaW5nIHNvdXJjZVR5cGUsIFN0cmluZyBzb3VyY2VQcm9wZXJ0eSApCi0gIHsKLSAgICBDbGFzc0VudHJ5ICAgY2xhc3NFbnRyeSA9IChDbGFzc0VudHJ5KWNsYXNzVGFibGVfLmdldCggc291cmNlVHlwZSApOwotICAgIE9iamVjdE1ldGhvZCBnZXR0ZXJGb3VuZCA9IG5ldyBPYmplY3RNZXRob2QoKTsKLSAgICAKLSAgICAvLyBJbmRpY2F0ZSB0aGF0IHRoZXJlIGlzIG5vIGdldHRlciB5ZXQuCi0gICAgZ2V0dGVyRm91bmQub3JkZXIgPSAtMTsKLSAgICAKLSAgICBpZiggY2xhc3NFbnRyeSAhPSBudWxsICkKLSAgICB7Ci0gICAgICBPYmplY3QgbGFzdE9iamVjdCA9IGNsYXNzRW50cnkuZ2V0TGFzdE9iamVjdCgpOwotICAgICAgCi0gICAgICBpZiggbGFzdE9iamVjdCAhPSBudWxsICkKLSAgICAgIHsgICAgICAgIAotICAgICAgICBpZiggY2xhc3NFbnRyeS5nZXR0ZXJMaXN0XyA9PSBudWxsICkKLSAgICAgICAgewotICAgICAgICAgIC8vIEJ1aWxkIHRoZSBnZXR0ZXIgbGlzdC4KLSAgICAgICAgICBjbGFzc0VudHJ5LmdldHRlckxpc3RfID0gZ2V0R2V0dGVyTGlzdCggbGFzdE9iamVjdCApOwotICAgICAgICB9Ci0gICAgICAKLSAgICAgICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IGNsYXNzRW50cnkuZ2V0dGVyTGlzdF8uc2l6ZSgpOyBpbmRleCsrICkKLSAgICAgICAgewotICAgICAgICAgIE1ldGhvZCBnZXR0ZXIgPSAoTWV0aG9kKWNsYXNzRW50cnkuZ2V0dGVyTGlzdF8uZWxlbWVudEF0KCBpbmRleCApOwotICAgICAgICAKLSAgICAgICAgICBpZiggZ2V0dGVyLmdldE5hbWUoKS5lcXVhbHMoICJnZXQiICsgc291cmNlUHJvcGVydHkgKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBnZXR0ZXJGb3VuZC5vcmRlciAgPSBjbGFzc0VudHJ5LmdldExhc3RPcmRlcigpOwotICAgICAgICAgICAgZ2V0dGVyRm91bmQubWV0aG9kID0gZ2V0dGVyOwotICAgICAgICAgICAgZ2V0dGVyRm91bmQub2JqZWN0ID0gbGFzdE9iamVjdDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZ2V0dGVyRm91bmQ7Ci0gIH0KLSAgCi0gIHByaXZhdGUgVmVjdG9yIGdldEdldHRlckxpc3QoIE9iamVjdCBvYmplY3QgKQotICB7Ci0gICAgVmVjdG9yIHJlc3VsdCA9IG5ldyBWZWN0b3IoKTsKLSAgICAKLSAgICBNZXRob2RbXSBtZXRob2RzID0gb2JqZWN0LmdldENsYXNzKCkuZ2V0TWV0aG9kcygpOwotICAgIAotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBtZXRob2RzLmxlbmd0aDsgaW5kZXgrKyApCi0gICAgewotICAgICAgTWV0aG9kICBtZXRob2QgICAgID0gbWV0aG9kc1tpbmRleF07Ci0gICAgICBib29sZWFuIGlzUHVibGljICAgPSBNb2RpZmllci5pc1B1YmxpYyggbWV0aG9kLmdldE1vZGlmaWVycygpICk7Ci0gICAgICBDbGFzcyAgIHJldHVyblR5cGUgPSBtZXRob2QuZ2V0UmV0dXJuVHlwZSgpOwotICAgIAotICAgICAgaWYoIGlzUHVibGljICYmIAotICAgICAgICAgIHJldHVyblR5cGUgIT0gVm9pZC5UWVBFICYmIAotICAgICAgICAgIG1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpLmxlbmd0aCA9PSAwICYmCi0gICAgICAgICAgbWV0aG9kLmdldE5hbWUoKS5zdGFydHNXaXRoKCAiZ2V0IiApKQotICAgICAgewotICAgICAgICBtZXRob2Quc2V0QWNjZXNzaWJsZSggdHJ1ZSApOwotICAgICAgICByZXN1bHQuYWRkKCBtZXRob2QgKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotICAgIAotICBwcml2YXRlIHZvaWQgaW52b2tlTWV0aG9kKCBPYmplY3QgICAgICBzb3VyY2VPYmplY3QsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXRob2QgICAgICBzb3VyY2VNZXRob2QgLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0ICAgICAgY2xpZW50T2JqZWN0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWV0aG9kICAgICAgY2xpZW50TWV0aG9kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1lciB0cmFuc2Zvcm1lcikKLSAgeyAgCQotICAJT2JqZWN0IGRhdGEgPSBudWxsOwotICAJICAJICAJCi0gIAl0cnkKLSAgCXsKLSAgCSAgZGF0YSA9IHNvdXJjZU1ldGhvZC5pbnZva2UoIHNvdXJjZU9iamVjdCwgbmV3IE9iamVjdFswXSApOwotICAJfQotICAJY2F0Y2goIEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gZXhjICkKLSAgCXsKLSAgCSAgZXhjLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgLy8gcGdtIE5lZWQgdG8gZXh0ZXJuYWxpemUgdGhpcyBzdHJpbmcuCi0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCAiUHJvdmlkZXIgXCIiICsgc291cmNlT2JqZWN0LmdldENsYXNzKCkuZ2V0TmFtZSgpICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcIiB0aHJldyBhbiBleGNlcHRpb24uIiApOwotICAJfQotICAJY2F0Y2goIElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZXhjICkKLSAgCXsKLSAgCSAgZXhjLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgLy8gcGdtIE5lZWQgdG8gZXh0ZXJuYWxpemUgdGhpcyBzdHJpbmcuCi0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCAiUHJvdmlkZXIgXCIiICsgc291cmNlT2JqZWN0LmdldENsYXNzKCkuZ2V0TmFtZSgpICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCIgdGhyZXcgYW4gZXhjZXB0aW9uLiIgKTsKLSAgCX0KLSAgCQotICAJZW52aXJvbm1lbnRfLmdldExvZygpLmxvZyhJTG9nLklORk8sICJkYXRhIiwgNTAwNywgdGhpcywgImludm9rZU1ldGhvZCAiLCIgIFNldHRpbmcgcHJvcDogIiArIGNsaWVudE1ldGhvZC5nZXROYW1lKCkgKyAiIGRhdGE9IiArIGRhdGEgKyAiIGZyb206ICIgKyBzb3VyY2VPYmplY3QuZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKTsKLSAgCQotICAJCi0gIAlpZiggdHJhbnNmb3JtZXIgIT0gbnVsbCApCi0gIAl7Ci0gIAkgIGRhdGEgPSB0cmFuc2Zvcm1lci50cmFuc2Zvcm0oIGRhdGEgKTsgIAkgICAgCi0gIAl9Ci0gIAkKLSAgCXRyeQotICAJeyAgCSAgCi0gIAkgIGNsaWVudE1ldGhvZC5pbnZva2UoIGNsaWVudE9iamVjdCwgbmV3IE9iamVjdFtdeyBkYXRhIH0gKTsKLSAgCX0KLSAgCWNhdGNoKCBJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGV4YyApCi0gIAl7Ci0gIAkgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIC8vIHBnbSBOZWVkIHRvIGV4dGVybmFsaXplIHRoaXMgc3RyaW5nLgotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiggIkNsaWVudCBcIiIgKyBjbGllbnRPYmplY3QuZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwiIHRocmV3IGFuIGV4Y2VwdGlvbi4iICk7Ci0gIAl9Ci0gIAljYXRjaCggSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBleGMgKQotICAJewotICAJICBleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAvLyBwZ20gTmVlZCB0byBleHRlcm5hbGl6ZSB0aGlzIHN0cmluZy4KLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oICJDbGllbnQgXCIiICsgY2xpZW50T2JqZWN0LmdldENsYXNzKCkuZ2V0TmFtZSgpICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcIiB0aHJldyBhbiBleGNlcHRpb24uIiApOwotICAJfQotICB9Ci0gIAotICBwcml2YXRlIGNsYXNzIE9iamVjdE1ldGhvZAotICB7Ci0gICAgcHVibGljIE9iamVjdCBvYmplY3Q7Ci0gICAgcHVibGljIE1ldGhvZCBtZXRob2Q7Ci0gICAgcHVibGljIGludCAgICBvcmRlcjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZGF0YS9EYXRhTWFwcGluZ1JlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9kYXRhL0RhdGFNYXBwaW5nUmVnaXN0cnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjIwMzczMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9kYXRhL0RhdGFNYXBwaW5nUmVnaXN0cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhOwotCi1wdWJsaWMgaW50ZXJmYWNlIERhdGFNYXBwaW5nUmVnaXN0cnkKLXsKLSAgLyoqCi0gICAqIFRoaXMgbWV0aG9kIGFkZHMgYSBkYXRhIG1hcHBpbmcgZnJvbSBhIHNvdXJjZSBvYmplY3QgdG8gYSB0YXJnZXQKLSAgICogb2JqZWN0LiAgV2hlbiB0aGUgc291cmNlT2JqZWN0IGlzIGVuY291bnRlcmVkIGJ5IHRoZSBmcmFtZXdvcmsgdGhlCi0gICAqIHNvdXJjZVByb3BlcnR5IHdpbGwgYmUgY2FsbGVkIGFuZCB0aGUgZGF0YSB3aWxsIGJlIHBhc3NlZCB0byB0aGUKLSAgICogdGFyZ2V0UHJvcGVydHkgaW4gdGhlIHRhcmdldE9iamVjdC4gIElmIGEgdHJhbnNmb3JtZXIgb2JqZWN0IGlzCi0gICAqIHNwZWNpZmllZCB0aGUgc291cmNlT2JqZWN0IGlzIHRyYW5zZm9ybWVkIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8KLSAgICogdGhlIHRhcmdldCBvYmplY3QuCi0gICAqIAotICAgKiBAcGFyYW0gc291cmNlVHlwZSAgICAgIFRoZSBzb3VyY2Ugb2JqZWN0LgotICAgKiBAcGFyYW0gc291cmNlUHJvcGVydHkgIFRoZSBzb3VyY2UgcHJvcGVydHkuCi0gICAqIEBwYXJhbSB0YXJnZXRUeXBlICAgICAgVGhlIHRhcmdldCBvYmplY3QuCi0gICAqIEBwYXJhbSB0YXJnZXRQcm9wZXJ0eSAgVGhlIHRhcmdldCBwcm9wZXJ0eS4KLSAgICogQHBhcmFtIHRyYW5zZm9ybWVyICAgICBUaGUgdHJhbnNmb3JtZXIgb2JqZWN0IHRoYXQgdHJhbnNmb3JtcyB0aGUKLSAgICogICAgICAgICAgICAgICAgICAgICAgICB0aGUgc291cmNlIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZE1hcHBpbmcoIENsYXNzICAgICAgIHNvdXJjZVR5cGUsCi0JCQkJCQkgIFN0cmluZyAgICAgIHNvdXJjZVByb3BlcnR5LAotCQkJCQkJICBDbGFzcyAgICAgICB0YXJnZXRUeXBlLAotCQkJCQkJICBTdHJpbmcgICAgICB0YXJnZXRQcm9wZXJ0eSwKLQkJCQkJCSAgVHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIgKTsKLSAgCi0gIC8qKgotICAgKiBUaGlzIG1ldGhvZCBpcyBlcXVpdmFsZW50IHRvIHRoZSBhYm92ZSB3aXRoIHRhcmdldFByb3BlcnR5IHRoZSBzYW1lCi0gICAqIGFzIHRoZSBzb3VyY2VQcm9wZXJ0eSBhbmQgd2l0aCB0aGUgdHJhbnNmb3JtZXIgc2V0IHRvIG51bGwuCi0gICAqIAotICAgKiBAcGFyYW0gc291cmNlVHlwZSAgICAgVGhlIHNvdXJjZSBvYmplY3QuCi0gICAqIEBwYXJhbSBzb3VyY2VQcm9wZXJ0eSBUaGUgc291cmNlIHByb3BlcnR5LgotICAgKiBAcGFyYW0gdGFyZ2V0VHlwZSAgICAgVGhlIHRhcmdldCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRNYXBwaW5nKCBDbGFzcyAgICAgICBzb3VyY2VUeXBlLAotCSAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgICAgICBzb3VyY2VQcm9wZXJ0eSwKLQkgICAgICAgICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgdGFyZ2V0VHlwZSApOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZGF0YS9EYXRhTWFwcGluZ1JlZ2lzdHJ5SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZGF0YS9EYXRhTWFwcGluZ1JlZ2lzdHJ5SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMWE1ZjJlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2RhdGEvRGF0YU1hcHBpbmdSZWdpc3RyeUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YTsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotCi1wdWJsaWMgY2xhc3MgRGF0YU1hcHBpbmdSZWdpc3RyeUltcGwgaW1wbGVtZW50cyBEYXRhTWFwcGluZ1JlZ2lzdHJ5Ci17ICAKLSAgcHJpdmF0ZSBIYXNodGFibGUgcnVsZXNUYWJsZV8gPSBuZXcgSGFzaHRhYmxlKCk7Ci0KLSAgcHVibGljIFZlY3RvciBnZXRSdWxlRW50cmllcyggU3RyaW5nIHRhcmdldFR5cGUgKQotICB7Ci0gICAgcmV0dXJuIChWZWN0b3IpcnVsZXNUYWJsZV8uZ2V0KCB0YXJnZXRUeXBlICk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnkjYWRkTWFwcGluZyhqYXZhLmxhbmcuQ2xhc3MsIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5DbGFzcywgamF2YS5sYW5nLlN0cmluZywgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5UcmFuc2Zvcm1lcikKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZE1hcHBpbmcoIENsYXNzIHNvdXJjZVR5cGUsIFN0cmluZyBzb3VyY2VQcm9wZXJ0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3MgdGFyZ2V0VHlwZSwgU3RyaW5nIHRhcmdldFByb3BlcnR5LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIpIAotICB7Ci0gICAgVmVjdG9yICAgIHJ1bGVFbnRyaWVzID0gKFZlY3RvcilydWxlc1RhYmxlXy5nZXQoIHRhcmdldFR5cGUuZ2V0TmFtZSgpICk7Ci0gICAgUnVsZUVudHJ5IHJ1bGVFbnRyeSAgID0gbnVsbDsKLSAgICAKLSAgICBpZiggcnVsZUVudHJpZXMgPT0gbnVsbCApCi0gICAgewotICAgICAgcnVsZUVudHJpZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBydWxlc1RhYmxlXy5wdXQoIHRhcmdldFR5cGUuZ2V0TmFtZSgpLCBydWxlRW50cmllcyApOwotICAgIH0KLSAgICAKLSAgICAvLyBGaW5kIHRoZSBydWxlIGVudHJ5Ci0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IHJ1bGVFbnRyaWVzLnNpemUoKTsgaW5kZXgrKyApCi0gICAgewotICAgICAgUnVsZUVudHJ5IG5ld0VudHJ5ID0gKFJ1bGVFbnRyeSlydWxlRW50cmllcy5lbGVtZW50QXQoIGluZGV4ICk7Ci0gICAgCi0gICAgICBpZiggc291cmNlUHJvcGVydHkuZXF1YWxzKCBuZXdFbnRyeS5zb3VyY2VQcm9wZXJ0eV8gKSAmJgotICAgICAgICAgIHNvdXJjZVR5cGUuZXF1YWxzKCBuZXdFbnRyeS5zb3VyY2VUeXBlXyApICYmCi0gICAgICAgICAgdGFyZ2V0UHJvcGVydHkuZXF1YWxzKCBuZXdFbnRyeS50YXJnZXRQcm9wZXJ0eV8gKSApCi0gICAgICB7Ci0gICAgICAgIC8vIFRoZSBlbnRyeSBhbHJlYWR5IGV4aXN0cwotICAgICAgICBydWxlRW50cnkgPSBuZXdFbnRyeTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIGlmKCBydWxlRW50cnkgPT0gbnVsbCApCi0gICAgewotICAgICAgLy8gVGhlIHJ1bGUgZGlkbid0IGV4aXN0IGFscmVhZHkgc28gd2Ugd2lsbCBjcmVhdGUgYSBuZXcgb25lLgotICAgICAgcnVsZUVudHJ5ID0gbmV3IFJ1bGVFbnRyeShzb3VyY2VUeXBlLmdldE5hbWUoKSwgc291cmNlUHJvcGVydHksIHRhcmdldFByb3BlcnR5LCB0cmFuc2Zvcm1lciApOwotICAgICAgcnVsZUVudHJpZXMuYWRkKCBydWxlRW50cnkgKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIEp1c3QgdXBkYXRlIHRoZSB0cmFuc2Zvcm1lci4KLSAgICAgIHJ1bGVFbnRyeS50cmFuc2Zvcm1lcl8gPSB0cmFuc2Zvcm1lcjsgIAotICAgIH0KLSAgfQotICAgIAotICAgIC8vcnVsZUVudHJpZXNfLgotLy8gICAgU3RyaW5nICAgIHNvdXJjZUNsYXNzID0gc291cmNlVHlwZS5nZXROYW1lKCk7Ci0vLyAgICBTdHJpbmcgICAgdGFyZ2V0Q2xhc3MgPSB0YXJnZXRUeXBlLmdldE5hbWUoKTsKLS8vICAgIFZlY3RvciAgICBlbnRyaWVzICAgICA9IChWZWN0b3IpcnVsZUVudHJpZXNfLmdldCggc291cmNlQ2xhc3MgKTsgCi0vLyAgICBSdWxlRW50cnkgcnVsZUVudHJ5ICAgPSBudWxsOwotLy8gICAgCi0vLyAgICBpZiggZW50cmllcyAhPSBudWxsICkKLS8vICAgIHsKLS8vICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoaXMgbWFwcGluZyBhbHJlYWR5IGV4aXN0cy4KLS8vICAgICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IGVudHJpZXMuc2l6ZSgpOyBpbmRleCsrICkKLS8vICAgICAgewotLy8gICAgICAgIFJ1bGVFbnRyeSBmb3VuZEVudHJ5ID0gKFJ1bGVFbnRyeSllbnRyaWVzLmVsZW1lbnRBdCggaW5kZXggKTsKLS8vICAgICAgICAKLS8vICAgICAgICBpZiggc291cmNlUHJvcGVydHkuZXF1YWxzKCBmb3VuZEVudHJ5LnNvdXJjZVByb3BlcnR5XyApICYmCi0vLyAgICAgICAgICAgIHRhcmdldFR5cGUuZXF1YWxzKCBmb3VuZEVudHJ5LnRhcmdldFR5cGVfICkgJiYKLS8vICAgICAgICAgICAgdGFyZ2V0UHJvcGVydHkuZXF1YWxzKCBmb3VuZEVudHJ5LnRhcmdldFByb3BlcnR5XyApICkKLS8vICAgICAgICB7Ci0vLyAgICAgICAgICBydWxlRW50cnkgPSBmb3VuZEVudHJ5OwotLy8gICAgICAgICAgcnVsZUVudHJ5LnRyYW5zZm9ybWVyXyA9IHRyYW5zZm9ybWVyOwotLy8gICAgICAgIH0KLS8vICAgICAgfQotLy8gICAgICAKLS8vICAgICAgLy8gVGhlcmUgaXMgYW4gZXhpc3RpbmcgdmVjdG9yIGZvciB0aGlzIHNvdXJjZUNsYXNzLCBidXQgaXQgZGlkbid0Ci0vLyAgICAgIC8vIGNvbnRhaW4gdGhpcyBuZXcgcnVsZSBzbyB3ZSB3aWxsIGFkZCBpdCBpbi4KLS8vICAgICAgaWYoIHJ1bGVFbnRyeSA9PSBudWxsICkKLS8vICAgICAgewotLy8gICAgICAgIHJ1bGVFbnRyeSA9IG5ldyBSdWxlRW50cnkoIHNvdXJjZVByb3BlcnR5LCB0YXJnZXRDbGFzcywgdGFyZ2V0UHJvcGVydHksIHRyYW5zZm9ybWVyICk7Ci0vLyAgICAgICAgZW50cmllcy5hZGQoIHJ1bGVFbnRyeSApOwotLy8gICAgICB9Ci0vLyAgICB9Ci0vLyAgICBlbHNlCi0vLyAgICB7Ci0vLyAgICAgIC8vIFdlIG5lZWQgdG8gY3JlYXRlIGEgbmV3IHZlY3RvciBmb3IgdGhpcyBzb3VyY2VDbGFzcy4KLS8vICAgICAgZW50cmllcyA9IG5ldyBWZWN0b3IoKTsKLS8vICAgICAgcnVsZUVudHJ5ID0gbmV3IFJ1bGVFbnRyeSggc291cmNlUHJvcGVydHksIHRhcmdldENsYXNzLCB0YXJnZXRQcm9wZXJ0eSwgdHJhbnNmb3JtZXIgKTsKLS8vICAgICAgZW50cmllcy5hZGQoIHJ1bGVFbnRyeSApOwotLy8gICAgICBydWxlRW50cmllc18ucHV0KCBzb3VyY2VDbGFzcywgZW50cmllcyApOyAgCi0vLyAgICB9ICAgIAotLy8gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnkjYWRkTWFwcGluZyhqYXZhLmxhbmcuQ2xhc3MsIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5DbGFzcykKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZE1hcHBpbmcoQ2xhc3Mgc291cmNlVHlwZSwgU3RyaW5nIHNvdXJjZVByb3BlcnR5LCBDbGFzcyB0YXJnZXRUeXBlKSAKLSAgewotICAgIGFkZE1hcHBpbmcoIHNvdXJjZVR5cGUsIHNvdXJjZVByb3BlcnR5LCB0YXJnZXRUeXBlLCBzb3VyY2VQcm9wZXJ0eSwgbnVsbCApOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9kYXRhL1J1bGVFbnRyeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZGF0YS9SdWxlRW50cnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGI5MDkwMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9kYXRhL1J1bGVFbnRyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGE7Ci0KLQotcHVibGljIGNsYXNzIFJ1bGVFbnRyeSAKLXsKLSAgcHVibGljIFN0cmluZyAgICAgIHNvdXJjZVR5cGVfOwotICBwdWJsaWMgU3RyaW5nICAgICAgc291cmNlUHJvcGVydHlfOwotICBwdWJsaWMgU3RyaW5nICAgICAgdGFyZ2V0UHJvcGVydHlfOwotICBwdWJsaWMgVHJhbnNmb3JtZXIgdHJhbnNmb3JtZXJfOwotICAKLSAKLSAgcHVibGljIFJ1bGVFbnRyeSggU3RyaW5nIHNvdXJjZVR5cGUsCi0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBzb3VyY2VQcm9wZXJ0eSwKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHRhcmdldFByb3BlcnR5LCAKLSAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIgKQotICB7Ci0gICAgc291cmNlVHlwZV8gICAgID0gc291cmNlVHlwZTsKLSAgICBzb3VyY2VQcm9wZXJ0eV8gPSBzb3VyY2VQcm9wZXJ0eTsKLSAgICB0YXJnZXRQcm9wZXJ0eV8gPSB0YXJnZXRQcm9wZXJ0eTsgICAgCi0gICAgdHJhbnNmb3JtZXJfICAgID0gdHJhbnNmb3JtZXI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2RhdGEvVHJhbnNmb3JtZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2RhdGEvVHJhbnNmb3JtZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDg4MGE2NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9kYXRhL1RyYW5zZm9ybWVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YTsKLQotLyoqCi0gKiBUaGlzIGludGVyZmFjZSBpcyB1c2VkIHRvIHRyYW5zZm9ybSBhbiBvYmplY3QgZnJvbSBvbmUgY2xhc3MgdG8gYW5vdGhlci4KLSAqCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgVHJhbnNmb3JtZXIKLXsKLSAgLyoKLSAgICogQHJldHVybiByZXR1cm5zIGEgdHJhbnNmb3JtZWQgb2JqZWN0IGJhc2VkIG9uIHRoZSBpbnB1dCB2YWx1ZS4KLSAgICovCi0gIHB1YmxpYyBPYmplY3QgdHJhbnNmb3JtKCBPYmplY3QgdmFsdWUgKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L0Fic3RyYWN0Q29tbWFuZEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9BYnN0cmFjdENvbW1hbmRGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YWQwNjc3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L0Fic3RyYWN0Q29tbWFuZEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuQ29tbWFuZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5OwotCi0KLS8qKgotICAqIFRoaXMgY2xhc3MgaXMgdXNlZCBhcyB0aGUgYmFzZSBjbGFzcyBmb3Igb3RoZXIgc3RhbmRhcmQgZnJhZ21lbnQgY2xhc3Nlcy4KLSAgKiAKLSoqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0Q29tbWFuZEZyYWdtZW50IGltcGxlbWVudHMgQ29tbWFuZEZyYWdtZW50Ci17Ci0gIHByaXZhdGUgQ29tbWFuZEZhY3RvcnkgY29tbWFuZEZhY3RvcnlfOwotICBwcml2YXRlIFN0cmluZyAgICAgICAgIGlkXzsKLSAgcHJpdmF0ZSBib29sZWFuICAgICAgICBkb05vdFJ1bkluVHJhbnNhY3Rpb25fID0gZmFsc2U7Ci0KLSAgLyoqCi0gICAqIENvcHkgY29uc3RydWN0b3IuCi0gICAqIEBwYXJhbSBmcmFnbWVudAotICAgKi8KLSAgcHJvdGVjdGVkIEFic3RyYWN0Q29tbWFuZEZyYWdtZW50KCBBYnN0cmFjdENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCApCi0gIHsKLSAgICBjb21tYW5kRmFjdG9yeV8gPSBmcmFnbWVudC5jb21tYW5kRmFjdG9yeV87Ci0gICAgaWRfICAgICAgICAgICAgID0gZnJhZ21lbnQuaWRfOwotICB9Ci0gIAotICAvKioKLSAgICAqIENyZWF0ZXMgYSBuZXcgQWJzdHJhY3RDb21tYW5kRnJhZ21lbnQuCi0gICAgKgotICAgICogQHBhcmFtIGNvbW1hbmQgdGhlIGV4ZWN1dGFibGUgY29tbWFuZCBmb3IgdGhpcyBmcmFnbWVudC4KLSAgKiovCi0gIHB1YmxpYyBBYnN0cmFjdENvbW1hbmRGcmFnbWVudCggQ29tbWFuZEZhY3RvcnkgY29tbWFuZEZhY3RvcnksIFN0cmluZyBpZCApCi0gIHsKLSAgICBjb21tYW5kRmFjdG9yeV8gPSBjb21tYW5kRmFjdG9yeTsgIAotICAgIGlkXyAgICAgID0gaWQ7Ci0gIH0gCi0gIAotICBwdWJsaWMgU3RyaW5nIGdldElkKCkKLSAgewotICAgIHJldHVybiBpZF87Ci0gIH0KLSAgIAotICBwdWJsaWMgdm9pZCBzZXRJZCggU3RyaW5nIGlkICkKLSAgewotICAgIGlkXyA9IGlkOyAKLSAgfQotICAKLSAgLyoqIAotICAgICogR2V0cyBleGVjdXRhYmxlIGNvbW1hbmQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZnJhZ21lbnQuCi0gICAgKgotICAgICogQHJldHVybiByZXR1cm5zIHRoZSBmaXJzdCBjaGlsZCBmcmFnbWVudCBmb3IgdGhpcyBmcmFnbWVudC4gIFJldHVybnMKLSAgICAqIG51bGwgd2hlbiB0aGVyZSBpcyBubyBmaXJzdCBjaGlsZC4KLSAgKiovCi0gIHB1YmxpYyBDb21tYW5kRmFjdG9yeSBnZXRDb21tYW5kRmFjdG9yeSgpCi0gIHsKLSAgICByZXR1cm4gY29tbWFuZEZhY3RvcnlfOwotICB9Ci0gIAotICAvKioKLSAgICogIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCByZXRyaWV2ZSB0aGUgZGF0YSBtYXBwaW5ncyBmb3IgdGhpcyBjb21tYW5kIGZyYWdtZW50LgotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoIERhdGFNYXBwaW5nUmVnaXN0cnkgcmVnaXN0cnkgKQotICB7Ci0gICAgLy8gVGhlIGRlZmF1bHQgYmVoYXZpb3VyIGlzIG5vdCB0byBhZGQgYW55IGVudHJpZXMgdG8gdGhlIHJlZ2lzdHJ5LgotICB9Ci0gIAotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gSWYgdGhlIGNvbW1hbmRzIGZvciB0aGlzIGZyYWdtZW50IHNob3VsZCBub3QgYmUgcnVuIHdpdGhpbiBhIHRyYW5zYWN0aW9uIHRoZW4KLSAgICogdGhpcyBtZXRob2Qgc2hvdWxkIHJldHVybiB0cnVlLiAgSWYgdGhlIGZyYWdtZW50IGRvZXMgbm90IGNhcmUgaWYgaXQgaXMgcnVuIGluIGEgdHJhbnNhY3Rpb24KLSAgICogb3Igbm90IGl0IHNob3VsZCByZXR1cm4gZmFsc2UuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBkb05vdFJ1bkluVHJhbnNhY3Rpb24oKQotICB7Ci0gICAgcmV0dXJuIGRvTm90UnVuSW5UcmFuc2FjdGlvbl87Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBTZXRzIHRoZSBydW4gaW4gdHJhbnNhY3Rpb24gcHJvcGVydHkuCi0gICAqIEBwYXJhbSBkb05vdFJ1bkluVHJhbnNhY3Rpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldERvTm90UnVuSW5UcmFuc2FjdGlvbiggYm9vbGVhbiBkb05vdFJ1bkluVHJhbnNhY3Rpb24gKQotICB7Ci0gICAgZG9Ob3RSdW5JblRyYW5zYWN0aW9uXyA9IGRvTm90UnVuSW5UcmFuc2FjdGlvbjsKLSAgfQotICAKLSAgLyoqCi0gICAgKiBBbGwgZnJhZ21lbnRzIG5lZWQgdG8gYmUgY2xvbmVhYmxlLgotICAqKi8KLSAgYWJzdHJhY3QgcHVibGljIE9iamVjdCBjbG9uZSgpOyAgCi0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvQm9vbGVhbkZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9Cb29sZWFuRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjU2YjM2OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9Cb29sZWFuRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5Db21tYW5kRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uQ29uZGl0aW9uOwotCi0KLS8qKgotICAqIFRoaXMgY2xhc3MgcmV0dXJucyBlaXRoZXIgdGhlIHRydWUgZnJhZ21lbnQgb3IgdGhlIGZhbHNlIGZyYWdtZW50Ci0gICogYmFzZWQgb24gdGhlIHJlc3BvbnNlIGZyb20gdGhlIGNvbmRpdGlvbiBvYmplY3QuCi0qKi8KLXB1YmxpYyBjbGFzcyBCb29sZWFuRnJhZ21lbnQgZXh0ZW5kcyBBYnN0cmFjdENvbW1hbmRGcmFnbWVudAotewotICBwcml2YXRlIENvbW1hbmRGcmFnbWVudCB0cnVlRnJhZ21lbnRfOwotICBwcml2YXRlIENvbW1hbmRGcmFnbWVudCBmYWxzZUZyYWdtZW50XzsKLSAgcHJpdmF0ZSBDb25kaXRpb24gICAgICAgY29uZGl0aW9uXzsKLQotICAvKioKLSAgICogQ3JlYXRlIGEgQm9vbGVhbkZyYWdtZW50IHdpdGggZGVmYXVsdCB2YWx1ZXMuCi0gICAqCi0gICAqLwotICBwdWJsaWMgQm9vbGVhbkZyYWdtZW50KCkKLSAgewotICAgIHRoaXMoIG51bGwsIG51bGwsIG5ldyBDb25kaXRpb24oKQotICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIGV2YWx1YXRlKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgfSwgCi0gICAgICAgICAgICAgICAgICAgICAgbnVsbCwgIiIgKTsgIAotICB9Ci0gIAotICAvKioKLSAgICogCi0gICAqIEBwYXJhbSB0cnVlRnJhZ21lbnQgIFRoZSBmcmFnbWVudCBjaG9zZW4gaWYgdGhlIGNvbmRpdGlvbiBpcyB0cnVlLgotICAgKiBAcGFyYW0gZmFsc2VGcmFnbWVudCBUaGUgZnJhZ21lbnQgY2hvc2VuIGlmIHRoZSBjb25kaXRpb24gaXMgZmFsc2UuCi0gICAqIEBwYXJhbSBjb25kaXRpb24gICAgIFRoZSBjb25kaXRpb24uCi0gICAqLwotICBwdWJsaWMgQm9vbGVhbkZyYWdtZW50KCBDb21tYW5kRnJhZ21lbnQgdHJ1ZUZyYWdtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICBDb21tYW5kRnJhZ21lbnQgZmFsc2VGcmFnbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uZGl0aW9uICAgICAgIGNvbmRpdGlvbiApCi0gIHsKLSAgICB0aGlzKCB0cnVlRnJhZ21lbnQsIGZhbHNlRnJhZ21lbnQsIGNvbmRpdGlvbiwgbnVsbCwgIiIgKTsKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgCi0KLSAgLyoqCi0gICAgKiBDcmVhdGVzIGEgbmV3IEJvb2xlYW5GcmFnbWVudC4KLSAgICAqCi0gICAgKiBAcGFyYW0gdHJ1ZUZyYWdtZW50IHJldHVybmVkIGlmIGNvbmRpdGlvbiBpcyB0cnVlLgotICAgICogQHBhcmFtIGZhbHNlRnJhZ21lbnQgcmV0dXJuZWQgaWYgY29uZGl0aW9uIGlzIGZhbHNlLgotICAgICogQHBhcmFtIGNvbmRpdGlvbiB0aGUgY29uZGl0aW9uIGZvciB0aGlzIGZyYWdtZW50LgotICAgICogQHBhcmFtIHN0YXRlIHRoZSBzdGF0ZSBwYXNzZWQgdG8gdGhlIGNvbmRpdGlvbi4KLSAgICAqIEBwYXJhbSBjb21tYW5kIHRoZSBleGVjdGFibGUgY29tbWFuZCBmb3IgdGhpcyBmcmFnbWVudC4KLSAgKiovCi0gIHB1YmxpYyBCb29sZWFuRnJhZ21lbnQoIENvbW1hbmRGcmFnbWVudCAgdHJ1ZUZyYWdtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWFuZEZyYWdtZW50IGZhbHNlRnJhZ21lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBDb25kaXRpb24gICAgICAgY29uZGl0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWFuZEZhY3RvcnkgIGNvbW1hbmRGYWN0b3J5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nICAgICAgICAgIGlkICkKLSAgewotICAgIHN1cGVyKCBjb21tYW5kRmFjdG9yeSwgaWQgKTsKLQotICAgIHRydWVGcmFnbWVudF8gICAgICAgPSB0cnVlRnJhZ21lbnQ7Ci0gICAgZmFsc2VGcmFnbWVudF8gICAgICA9IGZhbHNlRnJhZ21lbnQ7Ci0gICAgY29uZGl0aW9uXyAgICAgICAgICA9IGNvbmRpdGlvbjsgCi0gIH0KLQotICAvKioKLSAgICogQ29weSBjb25zdHJ1Y3Rvci4KLSAgICogQHBhcmFtIGZyYWcKLSAgICovCi0gIHByb3RlY3RlZCBCb29sZWFuRnJhZ21lbnQoIEJvb2xlYW5GcmFnbWVudCBmcmFnICkKLSAgewotICAgIHRoaXMoIG51bGwsCi0gICAgCSAgbnVsbCwKLSAgICAJICBmcmFnLmNvbmRpdGlvbl8sCi0gICAgCSAgZnJhZy5nZXRDb21tYW5kRmFjdG9yeSgpLAotICAgIAkgIGZyYWcuZ2V0SWQoKSApOwotCi0gICAgLy8gTm93IHdlIGhhdmUgdG8gY2xvbmUgaW4gdGhlIHRydWUgYW5kIGZhbHNlCi0gICAgLy8gZnJhZ21lbnRzLgotICAgIHRydWVGcmFnbWVudF8gID0gKENvbW1hbmRGcmFnbWVudCl0cnVlRnJhZ21lbnRfLmNsb25lKCk7Ci0gICAgZmFsc2VGcmFnbWVudF8gPSAoQ29tbWFuZEZyYWdtZW50KWZhbHNlRnJhZ21lbnRfLmNsb25lKCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgICogTWFrZXMgYSBjb3B5IG9mIHRoZSBDb21tYW5kRnJhZ21lbnQuCi0gICAgKgotICAgICogQHJldHVybiByZXR1cm5zIGEgY29weSBvZiB0aGlzIGZyYWdtZW50LgotICAqKi8KLSAgcHVibGljIE9iamVjdCBjbG9uZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IEJvb2xlYW5GcmFnbWVudCggdGhpcyApOwotICB9Ci0KLSAgLyoqIAotICAgICogR2V0cyB0aGUgZmlyc3QgY2hpbGQgZnJhZ21lbnQgZm9yIHRoaXMgZnJhZ21lbnQuCi0gICAgKgotICAgICogQHJldHVybiByZXR1cm5zIHRoZSBmaXJzdCBjaGlsZCBmcmFnbWVudCBmb3IgdGhpcyBmcmFnbWVudC4gIFJldHVybnMKLSAgICAqIG51bGwgd2hlbiB0aGVyZSBpcyBubyBmaXJzdCBjaGlsZC4KLSAgKiovCi0gIHB1YmxpYyBDb21tYW5kRnJhZ21lbnQgZ2V0Rmlyc3RTdWJGcmFnbWVudCgpCi0gIHsgICAgCi0gICAgcmV0dXJuIGNvbmRpdGlvbl8uZXZhbHVhdGUoKSA/IHRydWVGcmFnbWVudF8gOiBmYWxzZUZyYWdtZW50XzsKLSAgfQotICAKLSAgLyoqCi0gICAgKiBHZXRzIHRoZSBuZXh0IGNoaWxkIGZyYWdtZW50IGZvciB0aGlzIGZyYWdtZW50LgotICAgICoKLSAgICAqIEByZXR1cm4gcmV0dXJucyB0aGUgbmV4dCBjaGlsZCBmcmFnbWVudCBmb3IgdGhpcyBmcmFnbWVudC4gIFJldHVybnMgbnVsbAotICAgICogd2hlbiB0aGVyZSBpcyBubyBuZXh0IGNoaWxkLgotICAqKi8KLSAgcHVibGljIENvbW1hbmRGcmFnbWVudCBnZXROZXh0U3ViRnJhZ21lbnQoIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCApCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgLyoqCi0gICAqIFNldHMgdGhlIGNvbmRpdGlvbi4KLSAgICogQHBhcmFtIGNvbmRpdGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q29uZGl0aW9uKCBDb25kaXRpb24gY29uZGl0aW9uICkKLSAgewotICAgIGNvbmRpdGlvbl8gPSBjb25kaXRpb247ICAgIAotICB9Ci0gIAotICAvKioKLSAgICogU2V0cyB0aGUgdHJ1ZSBmcmFnbWVudC4KLSAgICogQHBhcmFtIGZyYWdtZW50Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUcnVlRnJhZ21lbnQoIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCApCi0gIHsKLSAgICB0cnVlRnJhZ21lbnRfID0gZnJhZ21lbnQ7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBTZXRzIHRoZSBmYWxzZSBmcmFnbWVudC4KLSAgICogQHBhcmFtIGZyYWdtZW50Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRGYWxzZUZyYWdtZW50KCBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQgKQotICB7Ci0gICAgZmFsc2VGcmFnbWVudF8gPSBmcmFnbWVudDsKLSAgfSAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L0Nob2ljZUZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9DaG9pY2VGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MmM3NzJhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L0Nob2ljZUZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50OwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5Db21tYW5kRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uRXZhbHVhdGU7Ci0KLQotLyoqCi0gICogVGhpcyBjbGFzcyByZXR1cm5zIGEgZnJhZ21lbnQgZnJvbSBhIGxpc3Qgb2YgZnJhZ21lbnRzIGJhc2VkCi0gICogb24gdGhlIG9iamVjdCByZXR1cm5lZCBmcm9tIHRoZSBFdmFsdWF0ZSBvYmplY3QuCi0qKi8KLXB1YmxpYyBjbGFzcyBDaG9pY2VGcmFnbWVudCBleHRlbmRzIEFic3RyYWN0Q29tbWFuZEZyYWdtZW50IAotewotICBwcml2YXRlIEhhc2h0YWJsZSAgICAgIGZyYWdtZW50VGFibGVfOwotICBwcml2YXRlIEV2YWx1YXRlICAgICAgIGV2YWx1YXRlXzsKLQotICAvKioKLSAgICAqIENyZWF0ZSBhIGNsb25lIHdpdGggbmV3IGEgbmV3IGhhc2h0YWJsZS4KLSAgKiovCi0gIHByb3RlY3RlZCBDaG9pY2VGcmFnbWVudCggQ2hvaWNlRnJhZ21lbnQgZnJhZyApCi0gIHsKLSAgICBzdXBlciggZnJhZy5nZXRDb21tYW5kRmFjdG9yeSgpLCBmcmFnLmdldElkKCkgKTsKLSAgICAKLSAgICBldmFsdWF0ZV8gICAgICA9IGZyYWcuZXZhbHVhdGVfOwotICAgIGZyYWdtZW50VGFibGVfID0gbmV3IEhhc2h0YWJsZSgpOwotICAgCi0gICAgRW51bWVyYXRpb24ga2V5cyA9IGZyYWcuZnJhZ21lbnRUYWJsZV8ua2V5cygpOwotCi0gICAgLy8gQ2xvbmUgdGhlIGZyYWdtZW50cyBpbiB0aGUgdGFibGUuCi0gICAgd2hpbGUoIGtleXMuaGFzTW9yZUVsZW1lbnRzKCkgKQotICAgIHsKLSAgICAgIE9iamVjdCBrZXkgPSBrZXlzLm5leHRFbGVtZW50KCk7Ci0gICAgICBmcmFnbWVudFRhYmxlXy5wdXQoIGtleSwgKChDb21tYW5kRnJhZ21lbnQpZnJhZy5mcmFnbWVudFRhYmxlXy5nZXQoa2V5KSkuY2xvbmUoKSApOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIENob2ljZUZyYWdtZW50KCBPYmplY3RbXSAgICAgICAgICBrZXlzLAotICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmRGcmFnbWVudFtdIGZyYWdtZW50cyApCi0gIHsKLSAgCXRoaXMoIGtleXMsIGZyYWdtZW50cywgbnVsbCwgbnVsbCwgIiIgKTsgICAgCi0gIH0KLSAgCi0gIHB1YmxpYyBDaG9pY2VGcmFnbWVudCggT2JqZWN0W10gICAgICAgICAga2V5cywKLSAgICAgICAgICAgICAgICAgICAgICAgICBDb21tYW5kRnJhZ21lbnRbXSBmcmFnbWVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgRXZhbHVhdGUgICAgICAgICAgZXZhbHVhdGUgKQotICB7Ci0gIAl0aGlzKCBrZXlzLCBmcmFnbWVudHMsIGV2YWx1YXRlLCBudWxsLCAiIiApOwotICB9ICAgICAgICAgICAgICAgICAgICAgICAgIAotICAKLSAgcHVibGljIHZvaWQgc2V0RXZhbHVhdGUoIEV2YWx1YXRlIGV2YWx1YXRlICkKLSAgewotICAgIGV2YWx1YXRlXyA9IGV2YWx1YXRlOyAgCi0gIH0KLSAgCi0gIC8qKgotICAgICogQ29uc3RydWN0cyBhIGNob2ljZSBmcmFnbWVudC4gIFRoZSBrZXkgYXQgaW5kZXggWCBpcyBtYXBwZWQgdG8gCi0gICAgKiB0byB0aGUgZnJhZ21lbnQgYXQgaW5kZXggWC4KLSAgICAqCi0gICAgKiBAcGFyYW0ga2V5cyB0aGVzZSBrZXlzIG11c3QgYmUgdW5pcXVlIGFzIGRldGVybWluZWQgYnkgdGhlIGVxdWFscyBtZXRob2QuCi0gICAgKiBUaGV5IGFyZSB1c2VkIHRvIGlkZW50aWZ5IHdoaWNoIGZyYWdtZW50IHRvIHJldHVybi4KLSAgICAqIEBwYXJhbSBmcmFnbWVudHMgdGhlc2UgYXJlIHRoZSBmcmFnbWVudHMgdG8gYmUgcmV0dXJuZWQuICBOdWxsIGlzIG5vdCBhbGxvd2VkCi0gICAgKiBhcyBhbiBlbnRyeSBpbiB0aGUgYXJyYXkuCi0gICAgKiBAcGFyYW0gZXZhbHVhdGUgdGhlIG9iamVjdCByZXR1cm5lZCBieSB0aGlzIGV2YWx1YXRlIG9iamVjdCBpcyB1c2VkCi0gICAgKiBhcyB0aGUga2V5IHRvIGxvY2F0ZSBhIGZyYWdtZW50LgotICAgICogQHBhcmFtIHN0YXRlIHRoZSBzdGF0ZSBwYXNzZWQgdG8gZXZhbHVhdGUuCi0gICoqLwotICBwdWJsaWMgQ2hvaWNlRnJhZ21lbnQoIE9iamVjdFtdICAgICAgICAgIGtleXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWFuZEZyYWdtZW50W10gZnJhZ21lbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgIEV2YWx1YXRlICAgICAgICAgIGV2YWx1YXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmRGYWN0b3J5ICAgIGNvbW1hbmRGYWN0b3J5LAotICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyAgICAgICAgICAgIGlkICkKLSAgewotICAgIHN1cGVyKCBjb21tYW5kRmFjdG9yeSwgaWQgKTsKLQotICAgIGV2YWx1YXRlXyAgICAgID0gZXZhbHVhdGU7Ci0gICAgZnJhZ21lbnRUYWJsZV8gPSBuZXcgSGFzaHRhYmxlKCk7Ci0KLSAgICBpZigga2V5cyA9PSBudWxsIHx8IGZyYWdtZW50cyA9PSBudWxsIHx8IGtleXMubGVuZ3RoICE9IGZyYWdtZW50cy5sZW5ndGggKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oICJCYWQga2V5cyBvciBmcmFnbWVudHMuIiApOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gQ3JlYXRlIHRoZSBmcmFnbWVudCB0YWJsZS4KLSAgICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBrZXlzLmxlbmd0aDsgaW5kZXgrKyApCi0gICAgICB7Ci0gICAgICAgIGZyYWdtZW50VGFibGVfLnB1dCgga2V5c1tpbmRleF0sIGZyYWdtZW50c1tpbmRleF0gKTsKLSAgICAgIH0gICAgIAotICAgIH0KLSAgfQotICAKLSAgLyoqCi0gICAgKiBNYWtlcyBhIGNvcHkgb2YgdGhlIENvbW1hbmRGcmFnbWVudC4KLSAgICAqCi0gICAgKiBAcmV0dXJuIHJldHVybnMgYSBjb3B5IG9mIHRoaXMgZnJhZ21lbnQuCi0gICoqLwotICBwdWJsaWMgT2JqZWN0IGNsb25lKCkKLSAgewotICAgIHJldHVybiBuZXcgQ2hvaWNlRnJhZ21lbnQoIHRoaXMgKTsKLSAgfQotICAKLSAgLyoqIAotICAgICogR2V0cyB0aGUgZmlyc3QgY2hpbGQgZnJhZ21lbnQgZm9yIHRoaXMgZnJhZ21lbnQuCi0gICAgKgotICAgICogQHJldHVybiByZXR1cm5zIHRoZSBmaXJzdCBjaGlsZCBmcmFnbWVudCBmb3IgdGhpcyBmcmFnbWVudC4gIFJldHVybnMKLSAgICAqIG51bGwgd2hlbiB0aGVyZSBpcyBubyBmaXJzdCBjaGlsZC4KLSAgKiovCi0gIHB1YmxpYyBDb21tYW5kRnJhZ21lbnQgZ2V0Rmlyc3RTdWJGcmFnbWVudCgpCi0gIHsgICAgCi0gICAgT2JqZWN0IGtleSAgICAgICAgICAgICAgPSBldmFsdWF0ZV8uZXZhbHVhdGUoKTsKLSAgICBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQgPSAoQ29tbWFuZEZyYWdtZW50KWZyYWdtZW50VGFibGVfLmdldChrZXkpOwotCi0gICAgaWYoIGZyYWdtZW50ID09IG51bGwgKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oICJLZXkgbm90IGZvdW5kIGluIHRhYmxlLiBLZXk9IiArIGtleSApOwotICAgIH0KLQotICAgIHJldHVybiBmcmFnbWVudDsKLSAgfQotICAKLSAgLyoqCi0gICAgKiBHZXRzIHRoZSBuZXh0IGNoaWxkIGZyYWdtZW50IGZvciB0aGlzIGZyYWdtZW50LgotICAgICoKLSAgICAqIEByZXR1cm4gcmV0dXJucyB0aGUgbmV4dCBjaGlsZCBmcmFnbWVudCBmb3IgdGhpcyBmcmFnbWVudC4gIFJldHVybnMgbnVsbAotICAgICogd2hlbiB0aGVyZSBpcyBubyBuZXh0IGNoaWxkLgotICAqKi8KLSAgcHVibGljIENvbW1hbmRGcmFnbWVudCBnZXROZXh0U3ViRnJhZ21lbnQoIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCApCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvQ29tbWFuZEZhY3RvcnlGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvQ29tbWFuZEZhY3RvcnlGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTA3NWFjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L0NvbW1hbmRGYWN0b3J5RnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuQ29tbWFuZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuSUNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQ29tbWFuZEZhY3RvcnlGcmFnbWVudCBpbXBsZW1lbnRzIENvbW1hbmRGcmFnbWVudCAKLXsKLSAgcHJpdmF0ZSBWZWN0b3IgY29tbWFuZHNfOwotICAKLSAgLyoqCi0gICAqIFN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIHRoaXMgbWV0aG9kIGFuZCByZXR1cm4KLSAgICogYW4gQ29tbWFuZEZhY3RvcnkuCi0gICAqIEByZXR1cm4KLSAgICovCi0gIHB1YmxpYyBhYnN0cmFjdCBJQ29tbWFuZEZhY3RvcnkgZ2V0SUNvbW1hbmRGYWN0b3J5KCk7Ci0gIAotICAvKioKLSAgICogQWxsIHdpemFyZCBmcmFnbWVudHMgbmVlZCB0byBiZSBjbG9uZWFibGUuCi0gICoqLwotICBwdWJsaWMgYWJzdHJhY3QgT2JqZWN0IGNsb25lKCk7Ci0gIAotICBwcm90ZWN0ZWQgQ29tbWFuZEZhY3RvcnlGcmFnbWVudCggQ29tbWFuZEZhY3RvcnlGcmFnbWVudCBmcmFnICkKLSAgewotICAgIGNvbW1hbmRzXyA9IGZyYWcuY29tbWFuZHNfOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBDb21tYW5kRmFjdG9yeUZyYWdtZW50KCkKLSAgewotICB9Ci0gIAotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gUmV0dXJucyBhIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGlzIGZyYWdtZW50LgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRJZCgpCi0gIHsKLSAgICByZXR1cm4gIiI7Ci0gIH0KLSAgCi0gIC8qKiAKLSAgICAqIEdldHMgZXhlY3V0YWJsZSBjb21tYW5kIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGZyYWdtZW50LgotICAgICoKLSAgICAqIEByZXR1cm4gcmV0dXJucyB0aGUgZmlyc3QgY2hpbGQgZnJhZ21lbnQgZm9yIHRoaXMgZnJhZ21lbnQuICBSZXR1cm5zCi0gICAgKiBudWxsIHdoZW4gdGhlcmUgaXMgbm8gZmlyc3QgY2hpbGQuCi0gICoqLwotICBwdWJsaWMgQ29tbWFuZEZhY3RvcnkgZ2V0Q29tbWFuZEZhY3RvcnkoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKiogCi0gICAgKiBHZXRzIHRoZSBmaXJzdCBjaGlsZCBmcmFnbWVudCBmb3IgdGhpcyBmcmFnbWVudC4KLSAgICAqCi0gICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGZpcnN0IGNoaWxkIGZyYWdtZW50IGZvciB0aGlzIGZyYWdtZW50LiAgUmV0dXJucwotICAgICogbnVsbCB3aGVuIHRoZXJlIGlzIG5vIGZpcnN0IGNoaWxkLgotICAqKi8KLSAgcHVibGljIENvbW1hbmRGcmFnbWVudCBnZXRGaXJzdFN1YkZyYWdtZW50KCkKLSAgewotCUNvbW1hbmRGcmFnbWVudCByZXN1bHQgPSBudWxsOwotCQotICAgIGNvbW1hbmRzXyA9IGNyZWF0ZUNvbW1hbmRzKCk7CQotCi0JaWYoIGNvbW1hbmRzXy5zaXplKCkgPiAwICkKLQl7Ci0JICByZXN1bHQgPSAoQ2hpbGRGcmFnbWVudCljb21tYW5kc18uZWxlbWVudEF0KDApOwotCX0KLQkKLQlyZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgLyoqCi0gICAgKiBHZXRzIHRoZSBuZXh0IGNoaWxkIGZyYWdtZW50IGZvciB0aGlzIGZyYWdtZW50LgotICAgICoKLSAgICAqIEByZXR1cm4gcmV0dXJucyB0aGUgbmV4dCBjaGlsZCBmcmFnbWVudCBmb3IgdGhpcyBmcmFnbWVudC4gIFJldHVybnMgbnVsbAotICAgICogd2hlbiB0aGVyZSBpcyBubyBuZXh0IGNoaWxkLgotICAqKi8KLSAgcHVibGljIENvbW1hbmRGcmFnbWVudCBnZXROZXh0U3ViRnJhZ21lbnQoIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCApCi0gIHsKLQlDb21tYW5kRnJhZ21lbnQgcmVzdWx0ID0gbnVsbDsKLQkJCi0JaWYoIGNvbW1hbmRzXyAhPSBudWxsICYmIGZyYWdtZW50IGluc3RhbmNlb2YgQ2hpbGRGcmFnbWVudCApIAotCXsKLQkgIENoaWxkRnJhZ21lbnQgY2hpbGQgPSAoQ2hpbGRGcmFnbWVudClmcmFnbWVudDsKLQkgIAotCSAgaW50IGluZGV4ID0gY2hpbGQuaW5kZXhfOwotCQotICAgICAgaWYoIGluZGV4ICE9IC0xICkKLQkgIHsKLQkgICAgaW5kZXgrKzsKLQkgIAotCSAgICBpZiggaW5kZXggPCBjb21tYW5kc18uc2l6ZSgpICkKLQkJewotCQkgIHJlc3VsdCA9IChDb21tYW5kRnJhZ21lbnQpY29tbWFuZHNfLmVsZW1lbnRBdCggaW5kZXggKTsKLQkJfQotCSAgfQotCX0KLQkKLQlyZXR1cm4gcmVzdWx0OwotICB9Ci0gIAotICAvKgotICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gcmV0cmlldmUgdGhlIGRhdGEgbWFwcGluZ3MgZm9yIHRoaXMgY29tbWFuZCBmcmFnbWVudC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKCBEYXRhTWFwcGluZ1JlZ2lzdHJ5IHJlZ2lzdHJ5ICkKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIElmIHRoZSBjb21tYW5kcyBmb3IgdGhpcyBmcmFnbWVudCBzaG91bGQgbm90IGJlIHJ1biB3aXRoaW4gYSB0cmFuc2FjdGlvbiB0aGVuCi0gICAqIHRoaXMgbWV0aG9kIHNob3VsZCByZXR1cm4gdHJ1ZS4gIElmIHRoZSBmcmFnbWVudCBkb2VzIG5vdCBjYXJlIGlmIGl0IGlzIHJ1biBpbiBhIHRyYW5zYWN0aW9uCi0gICAqIG9yIG5vdCBpdCBzaG91bGQgcmV0dXJuIGZhbHNlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZG9Ob3RSdW5JblRyYW5zYWN0aW9uKCkKLSAgewotICAgIHJldHVybiBmYWxzZTsKLSAgfSAgCi0gIAotICBwcml2YXRlIFZlY3RvciBjcmVhdGVDb21tYW5kcygpCi0gIHsKLQlWZWN0b3IgICAgICAgICAgY29tbWFuZHMgPSBuZXcgVmVjdG9yKCk7Ci0JSUNvbW1hbmRGYWN0b3J5IGZhY3RvcnkgID0gZ2V0SUNvbW1hbmRGYWN0b3J5KCk7Ci0JaW50ICAgICAgICAgICAgIGluZGV4ICAgID0gMDsKLQkJICAKLQl3aGlsZSggZmFjdG9yeSAhPSBudWxsICYmIGZhY3RvcnkuaGFzTmV4dCgpICkKLQl7Ci0JICBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiBjb21tYW5kID0gZmFjdG9yeS5nZXROZXh0Q29tbWFuZCgpOwotCQkJCi0JICBjb21tYW5kcy5hZGQoIG5ldyBDaGlsZEZyYWdtZW50KCBjb21tYW5kLCBpbmRleCsrICkgKTsKLQl9Ci0JCi0JcmV0dXJuIGNvbW1hbmRzOwotICB9Ci0gIAotICBwcml2YXRlIGNsYXNzIENoaWxkRnJhZ21lbnQgZXh0ZW5kcyBTaW1wbGVGcmFnbWVudAotICB7Ci0JICBpbnQgaW5kZXhfOwotCQotCSAgcHVibGljIENoaWxkRnJhZ21lbnQoIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIGNvbW1hbmQsIGludCBpbmRleCApCi0JICB7Ci0JICAgIHN1cGVyKCBjb21tYW5kLCBjb21tYW5kLmdldElEKCkgKTsKLQkgICAgaW5kZXhfID0gaW5kZXg7Ci0JICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L0NvbW1hbmRGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvQ29tbWFuZEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2NzYyYTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvQ29tbWFuZEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5Db21tYW5kRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci0KLQotLyoqCi0gICogVGhpcyBpbnRlcmZhY2UgZGVzY3JpYmVzIGEgbGlzdCBvZiBpbnRlcnJ1cHRhYmxlIGNvbW1hbmRzLiAgVGhlCi0gICogb3JkZXIgb2YgdGhpcyBsaXN0IG9mIGNvbW1hbmRzIGlzIGRlZmluZWQgYnkgdGhlIGdldEZpcnN0U3ViRnJhZ21lbnQgYW5kCi0gICogZ2V0TmV4dFN1YkZyYWdtZW50IG1ldGhvZHMuCi0qKi8KLXB1YmxpYyBpbnRlcmZhY2UgQ29tbWFuZEZyYWdtZW50IGV4dGVuZHMgQ2xvbmVhYmxlCi17IAotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gUmV0dXJucyBhIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGlzIGZyYWdtZW50LgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRJZCgpOwotICAKLSAgLyoqIAotICAgICogR2V0cyBleGVjdXRhYmxlIGNvbW1hbmQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZnJhZ21lbnQuCi0gICAgKgotICAgICogQHJldHVybiByZXR1cm5zIHRoZSBmaXJzdCBjaGlsZCBmcmFnbWVudCBmb3IgdGhpcyBmcmFnbWVudC4gIFJldHVybnMKLSAgICAqIG51bGwgd2hlbiB0aGVyZSBpcyBubyBmaXJzdCBjaGlsZC4KLSAgKiovCi0gIHB1YmxpYyBDb21tYW5kRmFjdG9yeSBnZXRDb21tYW5kRmFjdG9yeSgpOwotCi0gIC8qKiAKLSAgICAqIEdldHMgdGhlIGZpcnN0IGNoaWxkIGZyYWdtZW50IGZvciB0aGlzIGZyYWdtZW50LgotICAgICoKLSAgICAqIEByZXR1cm4gcmV0dXJucyB0aGUgZmlyc3QgY2hpbGQgZnJhZ21lbnQgZm9yIHRoaXMgZnJhZ21lbnQuICBSZXR1cm5zCi0gICAgKiBudWxsIHdoZW4gdGhlcmUgaXMgbm8gZmlyc3QgY2hpbGQuCi0gICoqLwotICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50IGdldEZpcnN0U3ViRnJhZ21lbnQoKTsKLQotICAvKioKLSAgICAqIEdldHMgdGhlIG5leHQgY2hpbGQgZnJhZ21lbnQgZm9yIHRoaXMgZnJhZ21lbnQuCi0gICAgKgotICAgICogQHJldHVybiByZXR1cm5zIHRoZSBuZXh0IGNoaWxkIGZyYWdtZW50IGZvciB0aGlzIGZyYWdtZW50LiAgUmV0dXJucyBudWxsCi0gICAgKiB3aGVuIHRoZXJlIGlzIG5vIG5leHQgY2hpbGQuCi0gICoqLwotICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50IGdldE5leHRTdWJGcmFnbWVudCggQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50ICk7Ci0gIAotICAvKgotICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gcmV0cmlldmUgdGhlIGRhdGEgbWFwcGluZ3MgZm9yIHRoaXMgY29tbWFuZCBmcmFnbWVudC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKCBEYXRhTWFwcGluZ1JlZ2lzdHJ5IHJlZ2lzdHJ5ICk7Ci0KLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIElmIHRoZSBjb21tYW5kcyBmb3IgdGhpcyBmcmFnbWVudCBzaG91bGQgbm90IGJlIHJ1biB3aXRoaW4gYSB0cmFuc2FjdGlvbiB0aGVuCi0gICAqIHRoaXMgbWV0aG9kIHNob3VsZCByZXR1cm4gdHJ1ZS4gIElmIHRoZSBmcmFnbWVudCBkb2VzIG5vdCBjYXJlIGlmIGl0IGlzIHJ1biBpbiBhIHRyYW5zYWN0aW9uCi0gICAqIG9yIG5vdCBpdCBzaG91bGQgcmV0dXJuIGZhbHNlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZG9Ob3RSdW5JblRyYW5zYWN0aW9uKCk7Ci0gIAotICAvKioKLSAgICAqIEFsbCB3aXphcmQgZnJhZ21lbnRzIG5lZWQgdG8gYmUgY2xvbmVhYmxlLgotICAqKi8KLSAgcHVibGljIE9iamVjdCBjbG9uZSgpOyAgCi19ICAKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L0NvbW1hbmRGcmFnbWVudEVuZ2luZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvQ29tbWFuZEZyYWdtZW50RW5naW5lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1MTE2OTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvQ29tbWFuZEZyYWdtZW50RW5naW5lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjIzICAgMTI5MjMyIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDYwMzEzICAgMTMwOTU4IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDYxMDExICAgMTU5MjgzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBwcm9qZWN0IG5vdCBhc3NvY2lhdGVkIHRvIEVBUiB3aGVuIHVzaW5nIGFudCBvbiBjb21tYW5kLWxpbmUKLSAqIDIwMDcwMzIzICAgMTc1ODAwIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDcwNzMwICAgMTk3MTQ0IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2ssIFBhc3MgcHJvZ3Jlc3MgbW9uaXRvciB0byB1bmRvIGNvbW1hbmRzLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50OwotCi1pbXBvcnQgamF2YS51dGlsLlN0YWNrOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk11bHRpU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuQ29tbWFuZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuQ29tbWFuZE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuRW52aXJvbm1lbnRDb3JlTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YUZsb3dNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklMb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotCi0KLS8qKgotICogVGhlIENvbW1hbmRGcmFnbWVudEVuZ2luZSBwcm92aWRlcyBhIGNvbnZpZW5lbnQgd2F5IHRvIHRyYXZlcnNlIENvbW1hbmRGcmFnbWVudHMKLSAqIGFuZCBwb3NzaWJsaXR5IGV4ZWN1dGUgaXRzIGFzc29jaWF0ZSBDb21tYW5kLgotICovCi1wdWJsaWMgY2xhc3MgQ29tbWFuZEZyYWdtZW50RW5naW5lIGltcGxlbWVudHMgQ29tbWFuZE1hbmFnZXIKLXsKLSAgcHJpdmF0ZSBTdGFjayAgICAgICAgICAgIGNvbW1hbmRTdGFja187Ci0gIHByaXZhdGUgRnJhZ21lbnRMaXN0ZW5lciB1bmRvRnJhZ21lbnRMaXN0ZW5lcl87Ci0gIHByaXZhdGUgRnJhZ21lbnRMaXN0ZW5lciBuZXh0RnJhZ21lbnRMaXN0ZW5lcl87Ci0gIHByaXZhdGUgRnJhZ21lbnRMaXN0ZW5lciBhZnRlckV4ZWN1dGVGcmFnbWVudExpc3RlbmVyXzsKLSAgcHJpdmF0ZSBGcmFnbWVudExpc3RlbmVyIHBlZWtGcmFnbWVudExpc3RlbmVyXzsKLSAgcHJpdmF0ZSBEYXRhRmxvd01hbmFnZXIgIGRhdGFNYW5hZ2VyXzsKLSAgcHJpdmF0ZSBJRW52aXJvbm1lbnQgICAgIGVudmlyb25tZW50XzsKLSAgcHJpdmF0ZSBJU3RhdHVzICAgICAgICAgIGxhc3RTdGF0dXNfOwotICAKLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBDb21tYW5kRnJhZ21lbnRFbmdpbmUuCi0gICAqIAotICAgKiBAcGFyYW0gc3RhcnRGcmFnbWVudCB0aGUgcm9vdCBmcmFnbWVudCB3aGVyZSB0cmF2ZXJzYWwgd2lsbCBiZWdpbi4KLSAgICogQHBhcmFtIGRhdGFNYW5hZ2VyIHRoZSBkYXRhIG1hbmFnZXIgY29udGFpbmluZyBhbGwgb2YgdGhlIGRhdGEgbWFwcGluZ3MuCi0gICAqIEBwYXJhbSBlbnZpcm9ubWVudCB0aGUgZW52aXJvbm1lbnQuCi0gICAqLwotICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50RW5naW5lKCBDb21tYW5kRnJhZ21lbnQgc3RhcnRGcmFnbWVudCwgRGF0YUZsb3dNYW5hZ2VyIGRhdGFNYW5hZ2VyLCBJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQgKQotICB7Ci0gIAlTZXF1ZW5jZUZyYWdtZW50IHJvb3QgPSBuZXcgU2VxdWVuY2VGcmFnbWVudCgpOwotICAJcm9vdC5hZGQoIHN0YXJ0RnJhZ21lbnQgKTsKLSAgCSAgCQotICAJY29tbWFuZFN0YWNrXyA9IG5ldyBTdGFjaygpOwotICAJCi0gIAlhZGRUb1N0YWNrKCByb290LCAtMSApOwotICAJYWRkVG9TdGFjayggc3RhcnRGcmFnbWVudCwgMCApOwotICAJCi0gIAlkYXRhTWFuYWdlcl8gPSBkYXRhTWFuYWdlcjsKLSAgCWVudmlyb25tZW50XyA9IGVudmlyb25tZW50OwotICB9IAotICAKLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICBTdHJpbmcgICAgICBuZXdsaW5lID0gU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpOyAgICAKLSAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIAotICAgIGJ1ZmZlci5hcHBlbmQobmV3bGluZSk7Ci0gICAgYnVmZmVyLmFwcGVuZCgiQ29tbWFuZCBzdGFjayBzdGFydDoiKTsKLSAgICBidWZmZXIuYXBwZW5kKG5ld2xpbmUpOwotICAgIAotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBjb21tYW5kU3RhY2tfLnNpemUoKTsgaW5kZXgrKyApCi0gICAgewotICAgICAgQ29tbWFuZExpc3RFbnRyeSBlbnRyeSA9IChDb21tYW5kTGlzdEVudHJ5KWNvbW1hbmRTdGFja18uZWxlbWVudEF0KGluZGV4KTsKLSAgICAgIGVudHJ5LmR1bXAoYnVmZmVyLCBpbmRleCk7Ci0gICAgfQotICAgIAotICAgIGJ1ZmZlci5hcHBlbmQoIkNvbW1hbmQgc3RhcnQgZW5kOiIpOwotICAgIGJ1ZmZlci5hcHBlbmQobmV3bGluZSk7Ci0gICAgCi0gICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwotICB9Ci0gIAotICAvKioKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBEYXRhIG1hcHBpbmcgcmVnaXN0cnkuCi0gICAqLwotICBwdWJsaWMgRGF0YU1hcHBpbmdSZWdpc3RyeSBnZXRNYXBwaW5nUmVnaXN0cnkoKQotICB7Ci0JcmV0dXJuIGRhdGFNYW5hZ2VyXy5nZXRNYXBwaW5nUmVnaXN0cnkoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHRoZSBTdGF0dXMgZnJvbSB0aGUgbGFzdCBDb21tYW5kIGV4ZWN1dGVkLgotICAgKi8KLSAgcHVibGljIElTdGF0dXMgZ2V0TGFzdFN0YXR1cygpCi0gIHsKLSAgICByZXR1cm4gbGFzdFN0YXR1c187Ci0gIH0KLSAgCi0gIC8qKgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNVbmRvRW5hYmxlZCgpCi0gIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFNldHMgdGhlIG5leHQgZnJhZ21lbnQgbGlzdGVuZXIgZm9yIHRoaXMgZW5naW5lLiAgVGhpcyBsaXN0ZW5lciB3aWxsIGJlCi0gICAqIGNhbGxlZCBmb3IgZWFjaCBmcmFnbWVudCB0aGF0IGlzIHRyYXZlcnNlZCBpbiBtb3ZlRm9yd2FyZFRvTmV4dFN0b3Agb3BlcmF0aW9uLgotICAgKiAKLSAgICogQHBhcmFtIGxpc3RlbmVyIHRoZSBmcmFnbWVudCBsaXN0ZW5lci4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE5leHRGcmFnbWVudExpc3RlbmVyKCBGcmFnbWVudExpc3RlbmVyIGxpc3RlbmVyICkKLSAgewotICAgIG5leHRGcmFnbWVudExpc3RlbmVyXyA9IGxpc3RlbmVyOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRBZnRlckV4ZWN1dGVGcmFnbWVudExpc3RlbmVyKCBGcmFnbWVudExpc3RlbmVyIGxpc3RlbmVyICkKLSAgewotICAgIGFmdGVyRXhlY3V0ZUZyYWdtZW50TGlzdGVuZXJfID0gbGlzdGVuZXI7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBTZXRzIHRoZSBuZXh0IGZyYWdtZW50IGxpc3RlbmVyIGZvciB0aGlzIGVuZ2luZS4gIFRoaXMgbGlzdGVuZXIgd2lsbCBiZQotICAgKiBjYWxsZWQgZm9yIGVhY2ggZnJhZ21lbnQgdGhhdCBpcyB0cmF2ZXJzZWQgaW4gcGVla0ZvcndhcmRUb05leHRTdG9wIG9wZXJhdGlvbi4KLSAgICogCi0gICAqIEBwYXJhbSBsaXN0ZW5lciB0aGUgZnJhZ21lbnQgbGlzdGVuZXIuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRQZWVrRnJhZ21lbnRMaXN0ZW5lciggRnJhZ21lbnRMaXN0ZW5lciBsaXN0ZW5lciApCi0gIHsKLSAgICBwZWVrRnJhZ21lbnRMaXN0ZW5lcl8gPSBsaXN0ZW5lcjsKLSAgfQotICAKLSAgLyoqCi0gICAqIFNldHMgdGhlIHBlZWsgZnJhZ21lbnQgbGlzdGVuZXIgZm9yIHRoaXMgZW5naW5lLiAgVGhpcyBsaXN0ZW5lciB3aWxsIGJlCi0gICAqIGNhbGxlZCBmb3IgZWFjaCBmcmFnbWVudCB0aGF0IGlzIHRyYXZlcnNlZCBpbiB1bmRvVG9MYXN0U3RvcCBvcGVyYXRpb24uCi0gICAqIAotICAgKiBAcGFyYW0gbGlzdGVuZXIgdGhlIGZyYWdtZW50IGxpc3RlbmVyLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VW5kb0ZyYWdtZW50TGlzdGVuZXIoIEZyYWdtZW50TGlzdGVuZXIgbGlzdGVuZXIgKQotICB7Ci0gICAgdW5kb0ZyYWdtZW50TGlzdGVuZXJfID0gbGlzdGVuZXI7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUcmF2ZXJzZSB0aGUgQ29tbWFuZEZyYWdtZW50cyBzdGFydGluZyB3aXRoIHRoZSBDb21tYW5kRnJhZ21lbnQgb24gdGhlCi0gICAqIHRvcCBvZiB0aGUgY29tbWFuZCBmcmFnbWVudCBzdGFjay4gIFRoZSBvcGVyYXRpb24gZG9lcyBOT1QgY2hhbmdlIHRoZQotICAgKiBjb21tYW5kIGZyYWdtZW50IHN0YWNrIGFuZCBkb2VzIG5vdCBleGVjdXRlIGFueSBjb21tYW5kIGFzc29jaWF0ZWQgd2l0aAotICAgKiBhIENvbW1hbmRGcmFnbWVudC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHBlZWtGb3J3YXJkVG9OZXh0U3RvcCgpCi0gIHsKLSAgCUNvbW1hbmRMaXN0RW50cnkgdG9wRW50cnkgICAgICA9IChDb21tYW5kTGlzdEVudHJ5KWNvbW1hbmRTdGFja18ubGFzdEVsZW1lbnQoKTsgIAkKLSAgCWludCAgICAgICAgICAgICAgcGFyZW50SW5kZXggICA9IHRvcEVudHJ5LnBhcmVudEluZGV4XzsKLSAgCUNvbW1hbmRGcmFnbWVudCAgY2hpbGRGcmFnbWVudCA9IHRvcEVudHJ5LmZyYWdtZW50XzsgCi0gIAlib29sZWFuICAgICAgICAgIGNvbnRpbnVlTG9vcCAgPSBuYXZpZ2F0ZUNoaWxkRnJhZ21lbnRzKCBjaGlsZEZyYWdtZW50LCBmYWxzZSApOwotICAJICAJCi0gIAl3aGlsZSggcGFyZW50SW5kZXggIT0gLTEgJiYgY29udGludWVMb29wICkKLSAgCXsgIAkKLSAgCSAgQ29tbWFuZExpc3RFbnRyeSBwYXJlbnRFbnRyeSAgICA9IChDb21tYW5kTGlzdEVudHJ5KWNvbW1hbmRTdGFja18uZWxlbWVudEF0KCBwYXJlbnRJbmRleCApOwotICAJICBDb21tYW5kRnJhZ21lbnQgIHBhcmVudEZyYWdtZW50ID0gcGFyZW50RW50cnkuZnJhZ21lbnRfOwotICAJICBDb21tYW5kRnJhZ21lbnQgIG5leHRGcmFnbWVudCAgID0gcGFyZW50RnJhZ21lbnQuZ2V0TmV4dFN1YkZyYWdtZW50KCBjaGlsZEZyYWdtZW50ICk7Ci0gIAkgIAotICAJICBpZiggbmV4dEZyYWdtZW50ID09IG51bGwgKQotICAJICB7Ci0gIAkgIAkvLyBUaGVyZSBhcmUgbm8gbW9yZSBzaWJsaW5nIGZyYWdtZW50cyB0byBuYXZpZ2F0ZSBzbyB3ZSB3aWxsIHBvcCB1cCB0byB0aGUgcGFyZW50Ci0gIAkgIAkvLyBhbiBjb250aW51ZSBuYXZpZ2F0aW9uIHRoZXJlLgotICAJICAJcGFyZW50SW5kZXggICA9IHBhcmVudEVudHJ5LnBhcmVudEluZGV4XzsKLSAgCSAgCWNoaWxkRnJhZ21lbnQgPSBwYXJlbnRGcmFnbWVudDsgCi0gIAkgIH0KLSAgCSAgZWxzZQotICAJICB7ICAJICAJCi0gIAkgIAlpZiggbmF2aWdhdGVDaGlsZEZyYWdtZW50cyggbmV4dEZyYWdtZW50LCB0cnVlICkgKSAKLSAgCSAgCXsKLSAgCSAgCSAgLy8gV2UgYXJlIGNvbnRpbnVpbmcgdG8gbmF2aWdhdGUuICBUaGlzIHRpbWUgd2Ugd2FudCB0byB0cmF2ZXJzZSB0aGUgc2libGluZwotICAJICAJICAvLyBvZiBuZXh0RnJhZ21lbnQuIAotICAJICAJICBjaGlsZEZyYWdtZW50ID0gbmV4dEZyYWdtZW50OwotICAJICAJfQotICAJICAJZWxzZQotICAJICAJewotICAJICAJICAvLyBXZSBhcmUgc3RvcHBpbmcgb3VyIG5hdmlnYXRpb24uCi0gIAkgIAkgIGNvbnRpbnVlTG9vcCA9IGZhbHNlOwotICAJICAJfQotICAJICB9Ci0gIAl9Ci0gIH0KLSAgCi0gIAotICAvKioKLSAgICogVHJhdmVyc2UgdGhlIENvbW1hbmRGcmFnbWVudHMgc3RhcnRpbmcgd2l0aCB0aGUgQ29tbWFuZEZyYWdtZW50IG9uIHRoZQotICAgKiB0b3Agb2YgdGhlIGNvbW1hbmQgZnJhZ21lbnQgc3RhY2suICBUaGlzIG9wZXJhdGlvbiBkb2VzIGNoYW5nZSB0aGUKLSAgICogY29tbWFuZCBmcmFnbWVudCBzdGFjayBhbmQgZG9lcyBleGVjdXRlIGFueSBjb21tYW5kIGFzc29jaWF0ZWQgd2l0aAotICAgKiBhIENvbW1hbmRGcmFnbWVudC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIG1vdmVGb3J3YXJkVG9OZXh0U3RvcCggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkKLSAgewotICAJQ29tbWFuZExpc3RFbnRyeSB0b3BFbnRyeSAgICAgICAgPSAoQ29tbWFuZExpc3RFbnRyeSljb21tYW5kU3RhY2tfLmxhc3RFbGVtZW50KCk7ICAJCi0gIAlpbnQgICAgICAgICAgICAgIHBhcmVudEluZGV4ICAgICA9IHRvcEVudHJ5LnBhcmVudEluZGV4XzsKLSAgCUNvbW1hbmRGcmFnbWVudCAgY3VycmVudEZyYWdtZW50ID0gdG9wRW50cnkuZnJhZ21lbnRfOyAgCi0gIAlib29sZWFuICAgICAgICAgIGNvbnRpbnVlRXhlY3V0ZSA9IHZpc2l0VG9wKCBtb25pdG9yICk7Ci0gIAlDb21tYW5kRnJhZ21lbnQgIGNoaWxkRnJhZ21lbnQgICAgPSBjdXJyZW50RnJhZ21lbnQuZ2V0Rmlyc3RTdWJGcmFnbWVudCgpOwotICAJICAgIAotICAJLy8gSWYgdGhlIGN1cnJlbnQgZnJhZ21lbnQgaGFzIGNoaWxkIGZyYWdtZW50cyB3ZSBuZWVkIHRvIHRyYXZlcnNlIHRoZXNlIGNoaWxkcmVuLgotICAJd2hpbGUoIGNoaWxkRnJhZ21lbnQgIT0gbnVsbCAmJiBjb250aW51ZUV4ZWN1dGUgKQotICAJewotICAJICBwYXJlbnRJbmRleCA9IGNvbW1hbmRTdGFja18uc2l6ZSgpIC0gMTsKLSAgCSAgYWRkVG9TdGFjayggY2hpbGRGcmFnbWVudCwgcGFyZW50SW5kZXggKTsKLSAgCSAgY29udGludWVFeGVjdXRlID0gdmlzaXRUb3AoIG1vbml0b3IgKTsKLSAgCSAgY3VycmVudEZyYWdtZW50ID0gY2hpbGRGcmFnbWVudDsKLSAgCSAgY2hpbGRGcmFnbWVudCAgID0gY3VycmVudEZyYWdtZW50LmdldEZpcnN0U3ViRnJhZ21lbnQoKTsKLSAgCX0KLSAgCQotICAJLy8gVGhlIHByZXZpb3VzIHdoaWxlIGxvb3AgaGFzIGd1YXJhbnRlZWQgdGhhdCBjdXJyZW50RnJhZ21lbnQgaGFzIG5vCi0gIAkvLyBjaGlsZCBmcmFnbWVudHMuIFRoaXMgd2hpbGUgbG9vcCBhc3N1bWVzIHRoaXMgdG8gYmUgdGhlIGNhc2UuCi0gIAl3aGlsZSggcGFyZW50SW5kZXggIT0gLTEgJiYgY29udGludWVFeGVjdXRlICkKLSAgCXsgIAkgICAJCi0gIAkgIENvbW1hbmRMaXN0RW50cnkgcGFyZW50RW50cnkgICAgPSAoQ29tbWFuZExpc3RFbnRyeSljb21tYW5kU3RhY2tfLmVsZW1lbnRBdCggcGFyZW50SW5kZXggKTsKLSAgCSAgQ29tbWFuZEZyYWdtZW50ICBwYXJlbnRGcmFnbWVudCA9IHBhcmVudEVudHJ5LmZyYWdtZW50XzsKLSAgCSAgQ29tbWFuZEZyYWdtZW50ICBuZXh0RnJhZ21lbnQgICA9IG51bGw7Ci0gIAkgIAotICAJICBpZiggY3VycmVudEZyYWdtZW50ID09IG51bGwgKQotICAJICB7Ci0gIAkgICAgbmV4dEZyYWdtZW50ID0gcGFyZW50RnJhZ21lbnQuZ2V0Rmlyc3RTdWJGcmFnbWVudCgpOwotICAJICB9Ci0gIAkgIGVsc2UKLSAgCSAgewkKLSAgCSAgICBuZXh0RnJhZ21lbnQgPSBwYXJlbnRGcmFnbWVudC5nZXROZXh0U3ViRnJhZ21lbnQoIGN1cnJlbnRGcmFnbWVudCApOwotICAJICB9Ci0gIAkgIAotICAJICBpZiggbmV4dEZyYWdtZW50ID09IG51bGwgKQotICAJICB7Ci0gIAkgIAkvLyBUaGVyZSBhcmUgbm8gbW9yZSBzaWJsaW5nIGZyYWdtZW50cyB0byBuYXZpZ2F0ZSBzbyB3ZSB3aWxsIHBvcCB1cCB0byB0aGUgcGFyZW50Ci0gIAkgIAkvLyBhbmQgY29udGludWUgbmF2aWdhdGlvbiB0aGVyZS4KLSAgCSAgCXBhcmVudEluZGV4ICAgICA9IHBhcmVudEVudHJ5LnBhcmVudEluZGV4XzsKLSAgCSAgCWN1cnJlbnRGcmFnbWVudCA9IHBhcmVudEZyYWdtZW50OyAKLSAgCSAgfQotICAJICBlbHNlCi0gIAkgIHsgIAkKLSAgCSAgCS8vIFdlIGhhdmUgYSBuZXcgZnJhZ21lbnQgdGhhdCB3ZSBuZWVkIHRvIGFkZCB0byB0aGUgdG9wIG9mIHRoZSBzdGFjay4KLSAgCSAgCWFkZFRvU3RhY2soIG5leHRGcmFnbWVudCwgcGFyZW50SW5kZXggKTsgIAkgIAkKLSAgCSAgICBwYXJlbnRJbmRleCAgICAgPSBjb21tYW5kU3RhY2tfLnNpemUoKSAtIDE7ICAJCi0gIAkgICAgY29udGludWVFeGVjdXRlID0gdmlzaXRUb3AoIG1vbml0b3IgKTsKLSAgCSAgICBjdXJyZW50RnJhZ21lbnQgPSBudWxsOyAgCSAgCQotICAJICB9Ci0gIAl9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRydWUgaWYgdGhlIHRoZXJlIGlzIG5vdCBsb25nZXIgYW55IGVsZW1lbnRzIG9uIHRoZSBzdGFjay4gIE5vdGU6Ci0gICAqICAgICAgICAgICAgICAgICB0aGF0IGxhc3QgdHdvIGVudHJpZXMgYXJlIGFsd2F5cyBsZWZ0IG9uIHRoZSBzdGFjay4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIHVuZG9Ub0xhc3RTdG9wKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKQotICB7ICAgIAotICAJQ29tbWFuZExpc3RFbnRyeSB0b3BFbnRyeSA9IChDb21tYW5kTGlzdEVudHJ5KWNvbW1hbmRTdGFja18ubGFzdEVsZW1lbnQoKTsJCi0gIAkKLQkgIGlmKCB0b3BFbnRyeS5mcmFnbWVudFN0b3BwZWRfICYmICF0b3BFbnRyeS5iZWZvcmVFeGVjdXRlXyApCi0gICAgewotICAgICAgLy8gTm9ybWFsbHkgdGhlIGNvbW1hbmQgYXQgdGhlIHRvcCBvZiB0aGUgc3RhY2sgaGFzIG5vdCBiZWVuIGV4ZWN1dGVkLiAgSWYKLSAgICAgIC8vIGl0IGhhcyBiZWVuIGV4ZWN1dGUsIGl0IG1lYW5zIHRoYXQgd2UgdHJpZWQgdG8gZXhlY3V0ZSBhbmQgaXQgZmFpbGVkLgotICAgICAgLy8gVGhlIGZpcnN0IGNvbW1hbmQgaW4gdGhlIGNvbW1hbmQgc3RhY2sgZmFpbGVkLiAgVGhlcmVmb3JlLCB3ZSBzaG91bGQKLSAgICAgIC8vIG9ubHkgdW5kbyB0aGlzIGNvbW1hbmQuCi0gICAgICBwZXJmb3JtVW5kbyggdG9wRW50cnksIG1vbml0b3IgKTsKLSAgICAgIHJldHVybiB0b3BFbnRyeS5wYXJlbnRJbmRleF8gPT0gMDsKLSAgICB9Ci0gICAgCi0gIAlwZXJmb3JtVW5kbyggdG9wRW50cnksIG1vbml0b3IgKTsKLSAgCQkKLSAgICB3aGlsZSggdG9wRW50cnkucGFyZW50SW5kZXhfICE9IDAgKQotICAJewotICAgICAgY29tbWFuZFN0YWNrXy5wb3AoKTsKLSAgCSAgdG9wRW50cnkgPSAoQ29tbWFuZExpc3RFbnRyeSljb21tYW5kU3RhY2tfLmxhc3RFbGVtZW50KCk7CSAgCi0gICAgICAKLSAgCSAgcGVyZm9ybVVuZG8oIHRvcEVudHJ5LCBtb25pdG9yICk7Ci0gIAkgIAotICAJICBpZiggdG9wRW50cnkuZnJhZ21lbnRTdG9wcGVkXyApCi0gIAkgIHsKLSAgCSAgICBicmVhazsKLSAgCSAgfQotICAJfQotICAJCi0gIAlyZXR1cm4gdG9wRW50cnkucGFyZW50SW5kZXhfID09IDA7Ci0gIH0KLSAgIAotICBwcml2YXRlIHZvaWQgcGVyZm9ybVVuZG8oIENvbW1hbmRMaXN0RW50cnkgZW50cnksIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApCi0gIHsKLSAgICBpZiggZW50cnkucGFyZW50SW5kZXhfID09IDAgKSByZXR1cm47Ci0gICAgCi0JICBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiBjbWQgPSBlbnRyeS5jb21tYW5kXzsKLSAgCSAgCi0gICAgdHJ5Ci0gICAgewotICAgICAgaWYoIGNtZCAhPSBudWxsICkKLSAgICAgIHsKLSAgICAgICAgaWYoIGNtZC5jYW5VbmRvKCkgJiYgIWVudHJ5LmJlZm9yZUV4ZWN1dGVfICkKLQkgICAgICB7Ci0JICAgICAgICBjbWQudW5kbyggbW9uaXRvciwgbnVsbCApOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBkYXRhTWFuYWdlcl8udW5wcm9jZXNzKCBjbWQgKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goIEV4Y2VwdGlvbiBleGMgKQotICAgIHsKLSAgICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9Ci0gICAgCi0JICBlbnRyeS5iZWZvcmVFeGVjdXRlXyA9IHRydWU7ICAKLQkgIHVuZG9GcmFnbWVudExpc3RlbmVyXy5ub3RpZnkoIGVudHJ5LmZyYWdtZW50XyApOyAgCQotICB9Ci0gIAotICBwcml2YXRlIGJvb2xlYW4gbmF2aWdhdGVDaGlsZEZyYWdtZW50cyggQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50LCBib29sZWFuIHZpc2l0Q3VycmVudCApCi0gIHsKLSAgCWJvb2xlYW4gICAgICAgICBjb250aW51ZU5hdmlnYXRlID0gdHJ1ZTsKLSAgCUNvbW1hbmRGcmFnbWVudCBjaGlsZEZyYWcgICAgICAgID0gbnVsbDsgCi0gIAkgIAotICAJaWYoIHZpc2l0Q3VycmVudCApCi0gIAl7Ci0gIAkgIGNvbnRpbnVlTmF2aWdhdGUgPSBwZWVrRnJhZ21lbnRMaXN0ZW5lcl8ubm90aWZ5KCBmcmFnbWVudCApOwotICAgICAgZGF0YU1hbmFnZXJfLnByb2Nlc3MoIGZyYWdtZW50ICk7Ci0gIAl9Ci0gIAkKLSAgCWNoaWxkRnJhZyA9IGZyYWdtZW50LmdldEZpcnN0U3ViRnJhZ21lbnQoKTsKLSAgIAkKLSAgCXdoaWxlKCBjaGlsZEZyYWcgIT0gbnVsbCAmJiBjb250aW51ZU5hdmlnYXRlICkKLSAgCXsKLSAgCSAgY29udGludWVOYXZpZ2F0ZSA9IG5hdmlnYXRlQ2hpbGRGcmFnbWVudHMoIGNoaWxkRnJhZywgdHJ1ZSApOwotICAJICBjaGlsZEZyYWcgICAgICAgID0gZnJhZ21lbnQuZ2V0TmV4dFN1YkZyYWdtZW50KCBjaGlsZEZyYWcgKTsKLSAgCX0KLSAgCQotICAJcmV0dXJuIGNvbnRpbnVlTmF2aWdhdGU7Ci0gIH0KLSAgICAKLSAgcHJpdmF0ZSBib29sZWFuIHZpc2l0VG9wKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKQotICB7ICAKLSAgCUNvbW1hbmRMaXN0RW50cnkgZW50cnkgICAgICAgICAgID0gKENvbW1hbmRMaXN0RW50cnkpY29tbWFuZFN0YWNrXy5sYXN0RWxlbWVudCgpOwotICAJYm9vbGVhbiAgICAgICAgIGNvbnRpbnVlTmF2aWdhdGUgPSBuZXh0RnJhZ21lbnRMaXN0ZW5lcl8ubm90aWZ5KCBlbnRyeS5mcmFnbWVudF8gKTsKLSAgCSAgCi0gIAlpZiggY29udGludWVOYXZpZ2F0ZSApCi0gIAl7Ci0gIAkgIC8vIENhbGwgdGhlIHNldHRlcnMgZm9yIHRoaXMgZnJhZ21lbnQuCi0gICAgICBkYXRhTWFuYWdlcl8ucHJvY2VzcyggZW50cnkuZnJhZ21lbnRfICk7Ci0gICAgICAKLSAgICAgIC8vIEFkZCBhbnkgcnVsZXMgdG8gdGhlIG1hcHBpbmcgcmVnaXN0cnkgYmVmb3JlIHdlIGV4ZWN1dGUgdGhlIGNvbW1hbmQuCi0gICAgICBlbnRyeS5mcmFnbWVudF8ucmVnaXN0ZXJEYXRhTWFwcGluZ3MoIGRhdGFNYW5hZ2VyXy5nZXRNYXBwaW5nUmVnaXN0cnkoKSApOwotICAgCi0gIAkgIGxhc3RTdGF0dXNfID0gcnVuQ29tbWFuZCggZW50cnksIG1vbml0b3IgKTsKLSAgCSAgCi0gICAgICBpZiggYWZ0ZXJFeGVjdXRlRnJhZ21lbnRMaXN0ZW5lcl8gIT0gbnVsbCApCi0gICAgICB7Ci0gICAgICAgIGNvbnRpbnVlTmF2aWdhdGUgPSBhZnRlckV4ZWN1dGVGcmFnbWVudExpc3RlbmVyXy5ub3RpZnkoIGVudHJ5LmZyYWdtZW50XyApOyAgCi0gICAgICAgIAotICAgICAgICBpZiggIWNvbnRpbnVlTmF2aWdhdGUgKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gVGhlIGFmdGVyIGV4ZWN1dGlvbiBsaXN0ZW5lciBoYXMgaW5kaWNhdGVkIHRoYXQgZXhlY3V0aW9uIHNob3VsZCBzdG9wLgotICAgICAgICAgIC8vIFRoZXJlZm9yZSwgd2Ugd2lsbCB1cGdyYWRlIHRoZSBzZXZlcml0eSBvZiB0aGUgbGFzdCBzdGF0dXMgdG8gRVJST1IuCi0gICAgICAgICAgbGFzdFN0YXR1c18gPSBuZXcgU3RhdHVzKCBJU3RhdHVzLkVSUk9SLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RTdGF0dXNfLmdldFBsdWdpbigpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RTdGF0dXNfLmdldENvZGUoKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0U3RhdHVzXy5nZXRNZXNzYWdlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0U3RhdHVzXy5nZXRFeGNlcHRpb24oKSApOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgCSAgaWYoIGNvbnRpbnVlTmF2aWdhdGUgJiYgbGFzdFN0YXR1c18uZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLkVSUk9SICkgY29udGludWVOYXZpZ2F0ZSA9IGZhbHNlOwotICAJfQotICAJCi0gICAJaWYoICFjb250aW51ZU5hdmlnYXRlICkgZW50cnkuZnJhZ21lbnRTdG9wcGVkXyA9IHRydWU7Ci0gICAJCi0gIAlyZXR1cm4gY29udGludWVOYXZpZ2F0ZTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGFkZFRvU3RhY2soIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCwgaW50IHBhcmVudEluZGV4ICkKLSAgewotICAgIENvbW1hbmRMaXN0RW50cnkgZW50cnkgPSBuZXcgQ29tbWFuZExpc3RFbnRyeSggZnJhZ21lbnQsIHBhcmVudEluZGV4ICk7Ci0gICAgY29tbWFuZFN0YWNrXy5wdXNoKCBlbnRyeSApOwotICB9Ci0gIAotICAvLyBTdWJjbGFzc2VzIGNhbiBkbyBpbml0aWFsaXphdGlvbiBiZWZvcmUgdGhlIGV4ZWN1dGlvbiBvZiBhIGNvbW1hbmQgaGVyZQotICBwcm90ZWN0ZWQgSVN0YXR1cyBpbml0QmVmb3JlRXhlY3V0ZSggQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gb3BlcmF0aW9uICkKLSAgeyAgCi0JICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotICAKLSAgcHJpdmF0ZSBJU3RhdHVzIHJ1bkNvbW1hbmQoIENvbW1hbmRMaXN0RW50cnkgZW50cnksIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApCi0gIHsKLQlDb21tYW5kRmFjdG9yeSBmYWN0b3J5ICA9IGVudHJ5LmZyYWdtZW50Xy5nZXRDb21tYW5kRmFjdG9yeSgpOwotICAJSVN0YXR1cyAgICAgIHN0YXR1cyAgID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgCQotICAJaWYoIGZhY3RvcnkgIT0gbnVsbCApCi0gIAl7Ci0gIAkgIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIGNtZCAgPSBmYWN0b3J5LmNyZWF0ZSgpOwotICAgICAgCi0gIAkgIGVudHJ5LmNvbW1hbmRfID0gY21kOwotICAJICAgIAotICAJICBpZiggY21kICE9IG51bGwgKQotICAJICB7Ci0gIAkgICAgdHJ5Ci0gIAkgICAgewotICAJICAgICAgZGF0YU1hbmFnZXJfLnByb2Nlc3MoIGNtZCApOyAgCSAgICAJCi0gIAkgICAgCQotICAgICAgICAgIHN0YXR1cyA9IGluaXRCZWZvcmVFeGVjdXRlKCBjbWQgKTsKLSAgICAgICAgICAKLSAgCSAgICAgIGVudmlyb25tZW50Xy5nZXRMb2coKS5sb2coSUxvZy5JTkZPLCAiY29tbWFuZCIsIDUwMDEsIHRoaXMsICJydW5Db21tYW5kIiwgIkV4ZWN1dGluZzogIiArIGNtZC5nZXRDbGFzcygpLmdldE5hbWUoKSk7Ci0gIAkgIAkgICAgCi0gCSAgICAgICAgY21kLnNldEVudmlyb25tZW50KCBlbnZpcm9ubWVudF8gKTsKLSAgICAgICAgICBzdGF0dXMgPSBjbWQuZXhlY3V0ZSggbW9uaXRvciwgbnVsbCApOwotICAgICAgICAgIAotCQkgICAgICBlbnRyeS5iZWZvcmVFeGVjdXRlXyA9IGZhbHNlOwotICAJICAgIH0KLSAgCSAgICBjYXRjaCggVGhyb3dhYmxlIGV4YyApCi0gIAkgICAgewotICAJICAgICAgSVN0YXR1cyAgICAgIHVuZXhwZWN0ZWRFcnJvciA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBleGMgKTsKLSAgICAgICAgICBNdWx0aVN0YXR1cyAgcGFyZW50U3RhdHVzICAgID0gbmV3IE11bHRpU3RhdHVzKCAiaWQiLCAwLCBuZXcgSVN0YXR1c1tde3VuZXhwZWN0ZWRFcnJvcn0sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVudmlyb25tZW50Q29yZU1lc3NhZ2VzLk1TR19FUlJPUl9VTkVYUEVDVEVEX0VSUk9SLCBudWxsICk7Ci0gIAkgICAgICBlbnZpcm9ubWVudF8uZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKCBwYXJlbnRTdGF0dXMgKTsKLSAgCSAgICAgIHN0YXR1cyA9IHVuZXhwZWN0ZWRFcnJvcjsKLSAgCSAgICB9Ci0gIAkgICAgZmluYWxseQotICAJICAgIHsKLSAgCSAgICAgIFN0cmluZyBtZXNzYWdlID0gIk9rIjsKLSAgCSAgICAgIAotICAJICAgICAgaWYoIHN0YXR1cy5nZXRTZXZlcml0eSgpID09IFN0YXR1cy5FUlJPUiApCi0gIAkgICAgICB7Ci0gIAkgICAgICAgIG1lc3NhZ2UgPSAiRXJyb3I6ICIgKyBzdGF0dXMuZ2V0TWVzc2FnZSgpOyAKLSAgCSAgICAgIH0KLSAgCSAgICAgIAotCSAgICAgIGVudmlyb25tZW50Xy5nZXRMb2coKS5sb2coSUxvZy5JTkZPLCAiY29tbWFuZCIsIDUwMDEsIHRoaXMsICJydW5Db21tYW5kIiwgIkV4ZWN1dGlvbiBzdGF0dXM6ICIgKyBtZXNzYWdlICk7Ci0gIAkgICAgfQotICAJICB9Ci0gIAl9Ci0gIAkKLSAgCXJldHVybiBzdGF0dXM7Ci0gIH0KLSAgICAKLSAgcHJpdmF0ZSBjbGFzcyBDb21tYW5kTGlzdEVudHJ5Ci0gIHsKLSAgCXB1YmxpYyBDb21tYW5kTGlzdEVudHJ5KCBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQsIGludCBwYXJlbnRJbmRleCApCi0gIAl7Ci0gIAkgIGZyYWdtZW50XyAgICAgICAgPSBmcmFnbWVudDsKLSAgCSAgcGFyZW50SW5kZXhfICAgICA9IHBhcmVudEluZGV4OwotICAJICBmcmFnbWVudFN0b3BwZWRfID0gZmFsc2U7Ci0JICBiZWZvcmVFeGVjdXRlXyAgID0gdHJ1ZTsKLSAgCX0KLSAgCSAgCQotICAJcHVibGljIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIGNvbW1hbmRfOwotICAJcHVibGljIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudF87Ci0gIAlwdWJsaWMgaW50ICAgICAgICAgICAgIHBhcmVudEluZGV4XzsKLSAgCXB1YmxpYyBib29sZWFuICAgICAgICAgZnJhZ21lbnRTdG9wcGVkXzsKLSAgCXB1YmxpYyBib29sZWFuICAgICAgICAgYmVmb3JlRXhlY3V0ZV87Ci0gICAgCi0gICAgcHVibGljIHZvaWQgZHVtcCggU3RyaW5nQnVmZmVyIGJ1ZmZlciwgaW50IGluZGV4ICkKLSAgICB7Ci0gICAgICBTdHJpbmcgbmV3bGluZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKTsgICAgCi0gICAgICBTdHJpbmcgbGluZSAgICA9ICIgICIgKyBpbmRleCArICItIGZyYWc6ICIgKyBmcmFnbWVudF8uZ2V0SWQoKSArICIgcGFySW5kZXg6ICIgKyBwYXJlbnRJbmRleF8gKyAiIHN0b3A6ICIgKyBmcmFnbWVudFN0b3BwZWRfICsgIiBiZWZvcmVFeGVjdXRlOiAiICsgYmVmb3JlRXhlY3V0ZV8gOwotICAgICAgYnVmZmVyLmFwcGVuZChsaW5lKTsgCi0gICAgICBidWZmZXIuYXBwZW5kKG5ld2xpbmUpOwotICAgIH0KLSAgfSAgICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L0NvbW1hbmRGcmFnbWVudEZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L0NvbW1hbmRGcmFnbWVudEZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzIzYzk2My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9Db21tYW5kRnJhZ21lbnRGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQ7Ci0KLS8qKgotICogVGhpcyBpbnRlcmZhY2UgcHJvdmlkZXMgYSB3YXkgdG8gY3JlYXRlIENvbW1hbmRGcmFnbWVudHMuCi0gKgotICovCi1wdWJsaWMgaW50ZXJmYWNlIENvbW1hbmRGcmFnbWVudEZhY3RvcnkKLXsKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgYSBjcmVhdGVkIENvbW1hbmRGcmFnbWVudCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50IGNyZWF0ZSgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvQ29tbWFuZEZyYWdtZW50RmFjdG9yeUZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L0NvbW1hbmRGcmFnbWVudEZhY3RvcnlGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1OWZiNmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvQ29tbWFuZEZyYWdtZW50RmFjdG9yeUZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudDsKLQotcHVibGljIGludGVyZmFjZSBDb21tYW5kRnJhZ21lbnRGYWN0b3J5RmFjdG9yeSAKLXsKLSAgLyoqCi0gICAqIFRoZSBmcmFtZXdvcmsgY2FsbHMgdGhpcyBtZXRob2QgdG8gZ2V0IHRoZSBDb21tYW5kRnJhZ21lbnRGYWN0b3J5Ci0gICAqIGZvciBhIHBhcnRpY3VsYXIgZXh0ZW5zaW9uLgotICAgKiAKLSAgICogQHJldHVybiBDcmVhdGVzIGEgQ29tbWFuZEZyYWdtZW50RmFjdG9yeS4KLSAgICovCi0gIHB1YmxpYyBDb21tYW5kRnJhZ21lbnRGYWN0b3J5IGNyZWF0ZSgpOyAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9FeHRlbnNpb25GcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvRXh0ZW5zaW9uRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTkxNzNmMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9FeHRlbnNpb25GcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50OwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5yZWdpc3RyeS5Db21tYW5kUmVnaXN0cnk7Ci0KLQotcHVibGljIGNsYXNzIEV4dGVuc2lvbkZyYWdtZW50IGV4dGVuZHMgQWJzdHJhY3RDb21tYW5kRnJhZ21lbnQgCi17Ci0gIHByaXZhdGUgU3RyaW5nW10gICAgICAgIGlkc187OwotICBwcml2YXRlIENvbW1hbmRSZWdpc3RyeSBleHRlbnNpb25SZWdpc3RyeV87Ci0gIHByaXZhdGUgSGFzaHRhYmxlICAgICAgIGZyYWdtZW50c187Ci0gIAotICAvKioKLSAgICogIFRoZSBkZWZhdWx0IGNvbnN0cnVjdG9yCi0gICAqCi0gICAqLwotICBwdWJsaWMgRXh0ZW5zaW9uRnJhZ21lbnQoKQotICB7Ci0gICAgc3VwZXIoIG51bGwsICIiICk7ICAKLSAgICBmcmFnbWVudHNfID0gbmV3IEhhc2h0YWJsZSgpOwotICB9Ci0gICAgCi0gIC8qKgotICAgKiBDb3B5IGNvbnN0cnVjdG9yLgotICAgKiBAcGFyYW0gRnJhZ21lbnQgdGhlIGZyYWdtZW50IHRvIGNvcHkKLSAgICovCi0gIHByb3RlY3RlZCBFeHRlbnNpb25GcmFnbWVudCggRXh0ZW5zaW9uRnJhZ21lbnQgZnJhZ21lbnQgKQotICB7Ci0gICAgc3VwZXIoIGZyYWdtZW50ICk7Ci0gICAgCi0gICAgaWRzXyAgICAgICAgICAgICAgID0gZnJhZ21lbnQuaWRzXzsKLSAgICBleHRlbnNpb25SZWdpc3RyeV8gPSBmcmFnbWVudC5leHRlbnNpb25SZWdpc3RyeV87Ci0gICAgZnJhZ21lbnRzXyAgICAgICAgID0gZnJhZ21lbnQuZnJhZ21lbnRzXzsKLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcGFyYW0gaWRzIFNldHMgdGhlIElEcyBmb3IgdGhpcyBleHRlbnNpb24gZnJhZ21lbnQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFeHRlbnNpb25JZHMoIFN0cmluZ1tdIGlkcyApCi0gIHsKLSAgICBpZHNfID0gaWRzOwotICB9Ci0gIAotICAvKioKLSAgICogCi0gICAqIEBwYXJhbSByZWdpc3RyeSBTZXRzIHRoZSByZWdpc3RyeSBmb3IgdGhpcyBleHRlbnNpb24gZnJhZ21lbnQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFeHRlbnNpb25SZWdpc3RyeSggQ29tbWFuZFJlZ2lzdHJ5IHJlZ2lzdHJ5ICkKLSAgewotICAgIGV4dGVuc2lvblJlZ2lzdHJ5XyA9IHJlZ2lzdHJ5OyAKLSAgfQotICAgICAgCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudCNnZXRGaXJzdFN1YkZyYWdtZW50KCkKLSAgICovCi0gIHB1YmxpYyBDb21tYW5kRnJhZ21lbnQgZ2V0Rmlyc3RTdWJGcmFnbWVudCgpIAotICB7Ci0gICAgQ29tbWFuZEZyYWdtZW50RmFjdG9yeUZhY3RvcnkgZmFjdG9yeSAgPSBleHRlbnNpb25SZWdpc3RyeV8uZ2V0RmFjdG9yeUZhY3RvcnkoIGlkc18gKTsKLSAgICAKLSAgICBpZiggZmFjdG9yeSA9PSBudWxsICkgcmV0dXJuIG51bGw7Ci0gICAgCi0gICAgQ29tbWFuZEZyYWdtZW50ICAgICAgICAgICAgICAgZnJhZ21lbnQgPSAoQ29tbWFuZEZyYWdtZW50KWZyYWdtZW50c18uZ2V0KCBmYWN0b3J5ICk7Ci0gICAgCi0gICAgaWYoIGZyYWdtZW50ID09IG51bGwgKQotICAgIHsKLSAgICAgIGZyYWdtZW50ID0gZmFjdG9yeS5jcmVhdGUoKS5jcmVhdGUoKTsKLSAgICAgIGZyYWdtZW50c18ucHV0KCBmYWN0b3J5LCBmcmFnbWVudCApOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gIGZyYWdtZW50OwotICB9Ci0gIAotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnQjZ2V0TmV4dFN1YkZyYWdtZW50KG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudCkKLSAgICovCi0gIHB1YmxpYyBDb21tYW5kRnJhZ21lbnQgZ2V0TmV4dFN1YkZyYWdtZW50KENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCkgCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgLyoqCi0gICAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCNjbG9uZSgpCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGNsb25lKCkgCi0gIHsKLSAgICByZXR1cm4gbmV3IEV4dGVuc2lvbkZyYWdtZW50KCB0aGlzICk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L0ZyYWdtZW50TGlzdGVuZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L0ZyYWdtZW50TGlzdGVuZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjBkZTdlOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9GcmFnbWVudExpc3RlbmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQ7Ci0KLS8qKgotICogVGhpcyBpbnRlcmZhY2Ugc2hvdWxkIGJlIGltcGxlbWVudCBmb3IgY29kZSB0aGF0IG5lZWRzIHRvIGxpc3RlbiB0byBmcmFnbWVudHMKLSAqIHRoYXQgYXJlIGJlaW5nIHRyYXZlcnNlIGJ5IHRoZSBDb21tYW5kRnJhZ21lbnRFbmdpbmUuCi0gKgotICovCi1wdWJsaWMgaW50ZXJmYWNlIEZyYWdtZW50TGlzdGVuZXIgCi17Ci0gIC8qCi0gICAqIE5vdGlmaWVzIHRoaXMgbGlzdGVuZXIgdGhhdCBhIGNvbW1hbmRGcmFnbWVudCBpcyBiZWluZyB2aXNpdGVkIGR1cmluZwotICAgKiBhIHRyYXZlcnNhbC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIG5vdGlmeSggQ29tbWFuZEZyYWdtZW50IGNvbW1hbmRGcmFnbWVudCApOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvTG9vcENvbmRpdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvTG9vcENvbmRpdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDNiMWExLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L0xvb3BDb25kaXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudDsKLQotLyoqCi0gICogVGhpcyBpbnRlcmZhY2UgY2FuIGJlIHVzZWQgd2hlbiBhIGNvbmRpdGlvbmFsIG9iamVjdCBuZWVkcyB0byBiZSByZXR1cm5lZC4KLSoqLwotcHVibGljIGludGVyZmFjZSBMb29wQ29uZGl0aW9uCi17Ci0gIC8qKgotICAgICogRXZhbHVhdGVzIGEgbG9vcCBjb25kaXRpb24uCi0gICAgKgotICAgICogQHBhcmFtIGxvb3AgdGhlIGxvb3AgZnJhZ21lbnQgdGhhdCBpcyBiZWluZyBldmFsdWF0ZWQuCi0gICAgKiBAcGFyYW0gZnJhZ21lbnQgdGhlIGNoaWxkIGZyYWdtZW50IG9mIHRoZSBsb29wIAotICAgICogICAgICAgIHVuZGVyIGV2YWx1YXRpb24uICBOb3RlOiBmcmFnbWVudCBjYW4gYmUgbnVsbC4KLSAgICAqIEByZXR1cm4gcmV0dXJucyBhbiBvYmplY3QgYmFzZWQgb24gc29tZSBldmFsdWF0ZWQgY29uZGl0aW9uLgotICAqKi8KLSAgcHVibGljIGJvb2xlYW4gZXZhbHVhdGUoIExvb3BGcmFnbWVudCBsb29wLCBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQgKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L0xvb3BGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvTG9vcEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzOTcxYTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvTG9vcEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuQ29tbWFuZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlJhbmdlVmVjdG9yOwotCi0KLS8qKgotICAqIFRoaXMgY2xhc3MgcmV0dXJucyBhIGR5bmFtaWNhbGx5IGRldGVybWluZWQgbnVtYmVyIG9mCi0gICogZnJhZ21lbnRzLiAgVGhpcyBsb29wIHdpbGwgcmV0dXJuIHRoZSBmcmFnbWVudCBwYXJhbWV0ZXIKLSAgKiBhcyBsb25nIGFzIHRoZSBzdG9wQ29uZGl0aW9uIGV2YWx1YXRlcyB0byBmYWxzZS4gIE90aGVyd2lzZSwKLSAgKiBudWxsIGlzIHJldHVybmVkLgotKiovCi1wdWJsaWMgY2xhc3MgTG9vcEZyYWdtZW50IGV4dGVuZHMgQWJzdHJhY3RDb21tYW5kRnJhZ21lbnQKLXsKLSAgcHJpdmF0ZSBMb29wQ29uZGl0aW9uICAgc3RvcENvbmRpdGlvbl87Ci0gIHByaXZhdGUgQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50XzsKLSAgcHJpdmF0ZSBSYW5nZVZlY3RvciAgICAgZnJhZ21lbnRIaXN0b3J5XzsKLQotICAvKioKLSAgICAqIENvcHkgY29udHJ1Y3RvciBmb3IgdGhpcyBmcmFnbWVudC4KLSAgKiovCi0gIHByb3RlY3RlZCBMb29wRnJhZ21lbnQoIExvb3BGcmFnbWVudCBmcmFnbWVudCApCi0gIHsKLSAgICB0aGlzKCBmcmFnbWVudC5mcmFnbWVudF8sCi0gICAgCSAgZnJhZ21lbnQuc3RvcENvbmRpdGlvbl8sCi0gICAgCSAgZnJhZ21lbnQuZ2V0Q29tbWFuZEZhY3RvcnkoKSwKLSAgICAJICBmcmFnbWVudC5nZXRJZCgpICk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBMb29wRnJhZ21lbnQoIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgIExvb3BDb25kaXRpb24gICBzdG9wQ29uZGl0aW9uICkKLSAgewotICAgIHRoaXMoIGZyYWdtZW50LCBzdG9wQ29uZGl0aW9uLCBudWxsLCAiIiApOwotICB9ICAgICAgICAgICAgICAgICAgICAgICAKLSAgCi0gIC8qKgotICAgICogQHBhcmFtIGZyYWdtZW50IHRoZSBmcmFnbWVudCB0aGF0IHdpbGwgYmUgcmV0dXJuZWQgYnkgdGhlIGxvb3AuCi0gICAgKiBAcGFyYW0gc3RvcENvbmRpdGlvbiB3aGVuIGZhbHNlIHRoZSBmcmFnbWVudCB3aWxsIGJlIHJldHVybmVkLCAKLSAgICAqIG90aGVyd2lzZSBudWxsIGlzIHJldHVybmVkLgotICAgICogQHBhcmFtIHN0YXRlIHRoZSBzdGF0ZSBwYXNzZWQgdG8gdGhlIGNvbmRpdGlvbi4KLSAgICAqIEBwYXJhbSBjb21tYW5kIHRoZSBleGVjdXRhYmxlIGNvbW1hbmQgZm9yIHRoaXMgZnJhZ21lbnQuCi0gICoqLwotICBwdWJsaWMgTG9vcEZyYWdtZW50KCBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgIExvb3BDb25kaXRpb24gICBzdG9wQ29uZGl0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICBDb21tYW5kRmFjdG9yeSAgY29tbWFuZEZhY3RvcnksCi0gICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyAgICAgICAgICBpZCAgICkKLSAgewotICAgIHN1cGVyKCBjb21tYW5kRmFjdG9yeSwgaWQgKTsKLQotICAgIGZyYWdtZW50XyAgICAgICAgPSBmcmFnbWVudDsKLSAgICBzdG9wQ29uZGl0aW9uXyAgID0gc3RvcENvbmRpdGlvbjsKLSAgICBmcmFnbWVudEhpc3RvcnlfID0gbmV3IFJhbmdlVmVjdG9yKCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgICogTWFrZXMgYSBjb3B5IG9mIHRoZSBDb21tYW5kRnJhZ21lbnQuCi0gICAgKgotICAgICogQHJldHVybiByZXR1cm5zIGEgY29weSBvZiB0aGlzIGZyYWdtZW50LgotICAqKi8KLSAgcHVibGljIE9iamVjdCBjbG9uZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IExvb3BGcmFnbWVudCggdGhpcyApOwotICB9Ci0KLSAgLyoqCi0gICAgKiBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZnJhZ21lbnQKLSAgICAqCi0gICAgKiBAcGFyYW0gZnJhZ21lbnQgdGhlIGZyYWdtZW50IHRvIHNlYXJjaC4KLSAgICAqIEByZXR1cm4gdGhlIGluZGV4IG9mIHRoaXMgZnJhZ21lbnQuCi0gICoqLwotICBwdWJsaWMgaW50IGluZGV4T2YoIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCApCi0gIHsKLSAgICByZXR1cm4gZnJhZ21lbnRIaXN0b3J5Xy5pbmRleE9mKCBmcmFnbWVudCApOwotICB9Ci0KLQotICAvKiogCi0gICAgKiBHZXRzIHRoZSBmaXJzdCBjaGlsZCBmcmFnbWVudCBmb3IgdGhpcyBmcmFnbWVudC4KLSAgICAqCi0gICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGZpcnN0IGNoaWxkIGZyYWdtZW50IGZvciB0aGlzIGZyYWdtZW50LiAgUmV0dXJucwotICAgICogbnVsbCB3aGVuIHRoZXJlIGlzIG5vIGZpcnN0IGNoaWxkLgotICAqKi8KLSAgcHVibGljIENvbW1hbmRGcmFnbWVudCBnZXRGaXJzdFN1YkZyYWdtZW50KCkKLSAgeyAgICAKLSAgICByZXR1cm4gZ2V0TmV4dFN1YkZyYWdtZW50KCBudWxsICk7Ci0gIH0KLQotICAvKioKLSAgICAqIEdldHMgdGhlIG5leHQgY2hpbGQgZnJhZ21lbnQgZm9yIHRoaXMgZnJhZ21lbnQuCi0gICAgKgotICAgICogQHJldHVybiByZXR1cm5zIHRoZSBuZXh0IGNoaWxkIGZyYWdtZW50IGZvciB0aGlzIGZyYWdtZW50LiAgUmV0dXJucyBudWxsCi0gICAgKiB3aGVuIHRoZXJlIGlzIG5vIG5leHQgY2hpbGQuCi0gICoqLwotICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50IGdldE5leHRTdWJGcmFnbWVudCggQ29tbWFuZEZyYWdtZW50IGZyYWcgKQotICB7Ci0gICAgQ29tbWFuZEZyYWdtZW50IG5leHRGcmFnICA9IG51bGw7Ci0gICAgCi0gICAgaWYoIHN0b3BDb25kaXRpb25fLmV2YWx1YXRlKCB0aGlzLCBmcmFnICkgKQotICAgIHsKLSAgICAgIC8vIFRoZSBzdG9wIGNvbmRpdGlvbiBoYXMgYmVlbiBtZXQuCi0gICAgICAvLyBEbyBub3RoaW5nLgotICAgIH0KLSAgICBlbHNlCi0gICAgeyAgICAgIAotICAgICAgaW50IGZyYWdJbmRleCA9IGluZGV4T2YoIGZyYWcgKTsKLQotICAgICAgLy8gTm90ZTogd2hlbiBmcmFnbWVudCA9PSBudWxsIHRoZSBmcmFnSW5kZXgKLSAgICAgIC8vICAgICAgIHNob3VsZCBiZSAtMS4gIFRoZXJlZm9yZSwgaWYgdGhlcmUKLSAgICAgIC8vICAgICAgIGlzIGFscmVhZHkgYSBmaXJzdCBmcmFnbWVudCBpbgotICAgICAgLy8gICAgICAgZnJhZ21lbnRIaXN0b3J5IHRoYXQgd2lsbCBiZSByZXR1cm5lZC4KLSAgICAgIGlmKCBmcmFnSW5kZXggKyAxIDwgZnJhZ21lbnRIaXN0b3J5Xy5zaXplKCkgKQotICAgICAgewotICAgICAgICAvLyBXZSBoYXZlIGEgY29weSBvZiB0aGUgZnJhZ21lbnQgYWxyZWFkeS4KLSAgICAgICAgbmV4dEZyYWcgPSAoQ29tbWFuZEZyYWdtZW50KShmcmFnbWVudEhpc3RvcnlfLmVsZW1lbnRBdCggZnJhZ0luZGV4ICsgMSApKTsgCi0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIG5leHRGcmFnID0gKENvbW1hbmRGcmFnbWVudCkoZnJhZ21lbnRfLmNsb25lKCkpOwotICAgICAgICBmcmFnbWVudEhpc3RvcnlfLmFkZCggbmV4dEZyYWcgKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbmV4dEZyYWc7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L1NlcXVlbmNlRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL2ZyYWdtZW50L1NlcXVlbmNlRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjEwY2U2Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9TZXF1ZW5jZUZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50OwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuQ29tbWFuZEZhY3Rvcnk7Ci0KLQotLyoqCi0gICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGEgc2VxdWVuY2Ugb2YgQ29tbWFuZEZyYWdtZW50cy4KLSoqLwotcHVibGljIGNsYXNzIFNlcXVlbmNlRnJhZ21lbnQgZXh0ZW5kcyBBYnN0cmFjdENvbW1hbmRGcmFnbWVudAotewotICBwcml2YXRlIExpc3QgZnJhZ21lbnRMaXN0XzsKLQotICBwcm90ZWN0ZWQgU2VxdWVuY2VGcmFnbWVudCggU2VxdWVuY2VGcmFnbWVudCBmcmFnICkKLSAgewotICAJc3VwZXIoIGZyYWcuZ2V0Q29tbWFuZEZhY3RvcnkoKSwgZnJhZy5nZXRJZCgpICk7Ci0gIAkKLSAgICBmcmFnbWVudExpc3RfID0gbmV3IFZlY3RvcigpOwotICAgIAotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBmcmFnLmZyYWdtZW50TGlzdF8uc2l6ZSgpOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBPYmplY3QgbmV3RnJhZyA9ICgoQ29tbWFuZEZyYWdtZW50KWZyYWcuZnJhZ21lbnRMaXN0Xy5nZXQoaW5kZXgpKS5jbG9uZSgpOwotICAgICAgZnJhZ21lbnRMaXN0Xy5hZGQoIG5ld0ZyYWcgKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBTZXF1ZW5jZUZyYWdtZW50KCBDb21tYW5kRnJhZ21lbnRbXSBmcmFnbWVudHMsIAotCQkJCQkJICAgQ29tbWFuZEZhY3RvcnkgICAgY29tbWFuZEZhY3RvcnksIAotCQkJCQkgICAgICAgU3RyaW5nICAgICAgICAgICAgaWQgICkKLSAgewotICAJc3VwZXIoIGNvbW1hbmRGYWN0b3J5LCBpZCApOwotICAJCi0gICAgaWYoIGZyYWdtZW50cyAhPSBudWxsICkKLSAgICB7Ci0gICAgICBmcmFnbWVudExpc3RfID0gQXJyYXlzLmFzTGlzdCggZnJhZ21lbnRzICk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBmcmFnbWVudExpc3RfID0gbmV3IFZlY3RvcigpOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIFNlcXVlbmNlRnJhZ21lbnQoKQotICB7Ci0gIAlzdXBlciggbnVsbCwgIiIgKTsKLSAgCQotICAJZnJhZ21lbnRMaXN0XyA9IG5ldyBWZWN0b3IoKTsKLSAgfQotCi0gIC8qKgotICAgICogQXBwZW5kcyBhIGZyYWdtZW50IHRvIHRoZSBzZXF1ZW5jZS4gCi0gICoqLwotICBwdWJsaWMgdm9pZCBhZGQoIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCApCi0gIHsKLSAgICBmcmFnbWVudExpc3RfLmFkZCggZnJhZ21lbnQgKTsKLSAgfQotICAKLSAgLyoqCi0gICAgKiBNYWtlcyBhIGNvcHkgb2YgdGhlIENvbW1hbmRGcmFnbWVudC4KLSAgICAqCi0gICAgKiBAcmV0dXJuIHJldHVybnMgYSBjb3B5IG9mIHRoaXMgZnJhZ21lbnQuCi0gICoqLwotICBwdWJsaWMgT2JqZWN0IGNsb25lKCkKLSAgewotICAgIHJldHVybiBuZXcgU2VxdWVuY2VGcmFnbWVudCggdGhpcyApOwotICB9Ci0KLSAgLyoqIAotICAgICogR2V0cyB0aGUgZmlyc3QgY2hpbGQgZnJhZ21lbnQgZm9yIHRoaXMgZnJhZ21lbnQuCi0gICAgKgotICAgICogQHJldHVybiByZXR1cm5zIHRoZSBmaXJzdCBjaGlsZCBmcmFnbWVudCBmb3IgdGhpcyBmcmFnbWVudC4gIFJldHVybnMKLSAgICAqIG51bGwgd2hlbiB0aGVyZSBpcyBubyBmaXJzdCBjaGlsZC4KLSAgKiovCi0gIHB1YmxpYyBDb21tYW5kRnJhZ21lbnQgZ2V0Rmlyc3RTdWJGcmFnbWVudCgpCi0gIHsKLSAgICBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQgPSBudWxsOwotCi0gICAgaWYoIGZyYWdtZW50TGlzdF8gPT0gbnVsbCB8fCBmcmFnbWVudExpc3RfLnNpemUoKSA9PSAwICkKLSAgICB7Ci0gICAgICBmcmFnbWVudCA9IG51bGw7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7ICAgICAgCi0gICAgICBmcmFnbWVudCA9IChDb21tYW5kRnJhZ21lbnQpKCBmcmFnbWVudExpc3RfLmdldCgwKSApOwotICAgIH0KLQotICAgIHJldHVybiBmcmFnbWVudDsgICAgCi0gIH0KLQotICAvKioKLSAgICAqIEdldHMgdGhlIG5leHQgY2hpbGQgZnJhZ21lbnQgZm9yIHRoaXMgZnJhZ21lbnQuCi0gICAgKgotICAgICogQHJldHVybiByZXR1cm5zIHRoZSBuZXh0IGNoaWxkIGZyYWdtZW50IGZvciB0aGlzIGZyYWdtZW50LiAgUmV0dXJucyBudWxsCi0gICAgKiB3aGVuIHRoZXJlIGlzIG5vIG5leHQgY2hpbGQuCi0gICoqLwotICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50IGdldE5leHRTdWJGcmFnbWVudCggQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50ICkKLSAgewotICAgIGludCBpbmRleCA9IGZyYWdtZW50TGlzdF8uaW5kZXhPZiggZnJhZ21lbnQgKTsKLQotICAgIGlmKCBpbmRleCA9PSAtMSApCi0gICAgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiggIkZyYWdtZW50IG5vdCBmb3VuZCBpbiBzZXF1ZW5jZS4iKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGluZGV4Kys7Ci0KLSAgICAgIGlmKCBpbmRleCA+PSBmcmFnbWVudExpc3RfLnNpemUoKSApCi0gICAgICB7Ci0gICAgICAgIC8vIFRoZXJlIGlzIG5vdGhpbmcgZm9sbG93aW5nIHRoaXMgZnJhZ21lbnQgc28gcmV0dXJuIG51bGw7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBSZXR1cm4gdGhlIG5leHQgZnJhZ21lbnQuCi0gICAgICAgIHJldHVybiAoQ29tbWFuZEZyYWdtZW50KShmcmFnbWVudExpc3RfLmdldCggaW5kZXggKSk7Ci0gICAgICB9Ci0gICAgfQotICB9CQotfSAgCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9TaW1wbGVGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvZnJhZ21lbnQvU2ltcGxlRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWUzZWJhOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9mcmFnbWVudC9TaW1wbGVGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuQ29tbWFuZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotLyoqCi0gICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGFuIGVtcHR5IG9mIFdpemFyZEZyYWdtZW50LgotKiovCi1wdWJsaWMgY2xhc3MgU2ltcGxlRnJhZ21lbnQgZXh0ZW5kcyBBYnN0cmFjdENvbW1hbmRGcmFnbWVudAotewotICBwdWJsaWMgU2ltcGxlRnJhZ21lbnQoKQotICB7Ci0gICAgdGhpcyggKENvbW1hbmRGYWN0b3J5KW51bGwsICIiICk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTaW1wbGVGcmFnbWVudCggU3RyaW5nIGlkICkKLSAgewotICAgIHRoaXMoIChDb21tYW5kRmFjdG9yeSludWxsLCBpZCApOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBTaW1wbGVGcmFnbWVudCggZmluYWwgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gb3BlcmF0aW9uLCBTdHJpbmcgaWQgKQotICB7Ci0gICAgc3VwZXIoIG5ldyBDb21tYW5kRmFjdG9yeSgpCi0gICAgICAgICAgIHsKLSAgICAgICAgICAgICBwdWJsaWMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gY3JlYXRlKCkKLSAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgfSwgaWQgKTsgIAotICB9Ci0gIAotICBwdWJsaWMgU2ltcGxlRnJhZ21lbnQoIENvbW1hbmRGYWN0b3J5IGNvbW1hbmRGYWN0b3J5LCBTdHJpbmcgaWQgKQotICB7Ci0gIAlzdXBlciggY29tbWFuZEZhY3RvcnksIGlkICk7Ci0gIH0KLSAgCi0gIC8qKgotICAgICogQ29weSBjb25zdHJ1Y3RvciBmb3IgZnJhZ21lbnQuCi0gICoqLwotICBwcm90ZWN0ZWQgU2ltcGxlRnJhZ21lbnQoIFNpbXBsZUZyYWdtZW50IGZyYWdtZW50ICkKLSAgewotICAgIHN1cGVyKCBmcmFnbWVudC5nZXRDb21tYW5kRmFjdG9yeSgpLCBmcmFnbWVudC5nZXRJZCgpICk7Ci0gIH0KLSAgICAKLSAgLyoqCi0gICAgKiBBbGwgd2l6YXJkIGZyYWdtZW50cyBuZWVkIHRvIGJlIGNsb25lYWJsZS4KLSAgKiovCi0gIHB1YmxpYyBPYmplY3QgY2xvbmUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBTaW1wbGVGcmFnbWVudCggdGhpcyApOwotICB9Ci0KLQotICAvKiogCi0gICAgKiBHZXRzIHRoZSBmaXJzdCBjaGlsZCBmcmFnbWVudCBmb3IgdGhpcyBmcmFnbWVudC4KLSAgICAqCi0gICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGZpcnN0IGNoaWxkIGZyYWdtZW50IGZvciB0aGlzIGZyYWdtZW50LiAgUmV0dXJucwotICAgICogbnVsbCB3aGVuIHRoZXJlIGlzIG5vIGZpcnN0IGNoaWxkLgotICAqKi8KLSAgcHVibGljIENvbW1hbmRGcmFnbWVudCBnZXRGaXJzdFN1YkZyYWdtZW50KCl7IHJldHVybiBudWxsOyB9Ci0KLSAgLyoqCi0gICAgKiBHZXRzIHRoZSBuZXh0IGNoaWxkIGZyYWdtZW50IGZvciB0aGlzIGZyYWdtZW50LgotICAgICogU2luY2UgdGhpcyBpcyBhIHNpbXBsZSBmcmFnbWVudCwgdGhlcmUgaXMgbm8gbmV4dCBmcmFnbWVudAotICAgICogc28gd2Ugd2lsbCBhbHdheXMgcmV0dXJuIG51bGwuIAotICAgICoKLSAgICAqIEByZXR1cm4gcmV0dXJucyB0aGUgbmV4dCBjaGlsZCBmcmFnbWVudCBmb3IgdGhpcyBmcmFnbWVudC4gIFJldHVybnMgbnVsbAotICAgICogd2hlbiB0aGVyZSBpcyBubyBuZXh0IGNoaWxkLgotICAqKi8gIAotICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50IGdldE5leHRTdWJGcmFnbWVudCggQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50ICl7IHJldHVybiBudWxsOyB9Ci19ICAKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL3JlZ2lzdHJ5L0NvbW1hbmRSZWdpc3RyeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvcmVnaXN0cnkvQ29tbWFuZFJlZ2lzdHJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlNmVmODcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvcmVnaXN0cnkvQ29tbWFuZFJlZ2lzdHJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUucmVnaXN0cnk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnRGYWN0b3J5RmFjdG9yeTsKLQotLyoqCi0gKiBUaGlzIGludGVyZmFjZSBwcm92aWRlcyBhIHdheSB0byBjcmVhdGUgYSBDb21tYW5kRnJhZ21lbnRGYWN0b3J5RmFjdG9yeQotICogZnJvbSBhbiBhcnJheSBvZiBpZHMuCi0gKgotICovCi1wdWJsaWMgaW50ZXJmYWNlIENvbW1hbmRSZWdpc3RyeSAKLXsgIAotICAvKioKLSAgICogQ3JlYXRlcyBhIENvbW1hbmRGcmFnbWVudEZhY3RvcnlGYWN0b3J5IGZyb20gYW4gYXJyYXkgb2YgaWRzLgotICAgKiAKLSAgICogQHBhcmFtIGlkcyB0aGUgaWRzLgotICAgKiBAcmV0dXJuIHRoZSBDb21tYW5kRnJhZ21lbnRGYWN0b3J5RmFjdG9yeSBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50RmFjdG9yeUZhY3RvcnkgZ2V0RmFjdG9yeUZhY3RvcnkoIFN0cmluZ1tdIGlkcyApOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvc2VsZWN0aW9uL0Jvb2xlYW5TZWxlY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL3NlbGVjdGlvbi9Cb29sZWFuU2VsZWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2ODA1YTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvc2VsZWN0aW9uL0Jvb2xlYW5TZWxlY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqCi0gKiBUaGlzIGNsYXNzIGNvbWJpbmVzIGEgc3RyaW5nIHdpdGggYSBib29sZWFuIHZhbHVlLiAgVGhpcyBpcwotICogdXNlZnVsIGZvciBzdG9yaW5nIHRoZSBzdGF0ZSBkYXRhIGZvciBhIGJvb2xlYW4gc2VsZWN0aW9uIGxpc3QuCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuc2VsZWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgQm9vbGVhblNlbGVjdGlvbgotewotICBwcml2YXRlIFN0cmluZyAgdmFsdWVfOwotICBwcml2YXRlIGJvb2xlYW4gc2VsZWN0ZWRfOwotICAKLSAgcHVibGljIEJvb2xlYW5TZWxlY3Rpb24oIFN0cmluZyB2YWx1ZSwgYm9vbGVhbiBzZWxlY3RlZCApCi0gIHsKLSAgICB2YWx1ZV8gICAgPSB2YWx1ZTsKLSAgICBzZWxlY3RlZF8gPSBzZWxlY3RlZDsKLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIEdldCB0aGUgc3RyaW5nIHZhbHVlLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRWYWx1ZSgpCi0gIHsKLSAgICByZXR1cm4gdmFsdWVfOwotICB9Ci0gIAotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gR2V0IHRoZSBib29sZWFuIHZhbHVlIGZvciB0aGlzIHN0cmluZy4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzU2VsZWN0ZWQoKQotICB7Ci0gICAgcmV0dXJuIHNlbGVjdGVkXzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvc2VsZWN0aW9uL0Nob2ljZXNUb1N0cmluZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvc2VsZWN0aW9uL0Nob2ljZXNUb1N0cmluZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzMzYzZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL3NlbGVjdGlvbi9DaG9pY2VzVG9TdHJpbmcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5zZWxlY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLlRyYW5zZm9ybWVyOwotCi0vKioKLSAqIFRoaXMgdHJhbnNmb3JtZXIgY2xhc3Mgc2VsZWN0cyBhIHN0cmluZyBhdCBhIHBhcnRpY3VsYXIgbGV2ZWwKLSAqIGluIGEgU2VsZWN0aW9uTGlzdENob2ljZXMgY2xhc3MuCi0gKi8KLXB1YmxpYyBjbGFzcyBDaG9pY2VzVG9TdHJpbmcgaW1wbGVtZW50cyBUcmFuc2Zvcm1lcgotewotICBwcml2YXRlIGludCBsZXZlbF87Ci0gIAotICBwdWJsaWMgQ2hvaWNlc1RvU3RyaW5nKCBpbnQgbGV2ZWwgKQotICB7Ci0gICAgbGV2ZWxfID0gbGV2ZWw7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLlRyYW5zZm9ybWVyI3RyYW5zZm9ybShqYXZhLmxhbmcuT2JqZWN0KQotICAgKi8KLSAgcHVibGljIE9iamVjdCB0cmFuc2Zvcm0oIE9iamVjdCB2YWx1ZSApCi0gIHsKLSAgICBTZWxlY3Rpb25MaXN0Q2hvaWNlcyBjaG9pY2VzID0gKFNlbGVjdGlvbkxpc3RDaG9pY2VzKXZhbHVlOwotICAgIAotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBsZXZlbF87IGluZGV4KysgKQotICAgIHsKLSAgICAgIGNob2ljZXMgPSBjaG9pY2VzLmdldENob2ljZSgpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gY2hvaWNlcy5nZXRMaXN0KCkuZ2V0U2VsZWN0aW9uKCk7Ci0gIH0KLQotICBwdWJsaWMgU2VsZWN0aW9uTGlzdCB0cmFuc2Zvcm0oIFNlbGVjdGlvbkxpc3RDaG9pY2VzIGNob2ljZXMgKQotICB7Ci0gICAgcmV0dXJuIChTZWxlY3Rpb25MaXN0KXRyYW5zZm9ybSggKE9iamVjdCljaG9pY2VzICk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL3NlbGVjdGlvbi9EeW5hbWljTGlzdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvc2VsZWN0aW9uL0R5bmFtaWNMaXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2ZWM3MWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvc2VsZWN0aW9uL0R5bmFtaWNMaXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuc2VsZWN0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotLyoqCi0gKiBUaGlzIGlzIGEgRHluYW1pYyB2ZXJzaW9uIG9mIHRoZSBTZWxlY3Rpb25MaXN0Q2hvaWNlcyBjbGFzcy4KLSAqLwotcHVibGljIGNsYXNzIER5bmFtaWNMaXN0IAotewotICBwcml2YXRlIFZlY3RvciBzdHJpbmdMaXN0XyA9IG5ldyBWZWN0b3IoKTsKLSAgcHJpdmF0ZSBWZWN0b3IgZHluYW1pY0xpc3RWZWN0b3JMaXN0XyA9IG5ldyBWZWN0b3IoKTsKLSAgCi0gIC8qKgotICAgKiBBZGRzIGFuIGVudHJ5IGludG8gdGhlIGR5bmFtaWMgbGlzdC4KLSAgICogCi0gICAqIEBwYXJhbSB2YWx1ZXMgdGhlIHN0cmluZyB2YWx1ZXMgdGhhdCBsZWFkIHRvIHRoZSB0YXJnZXQuCi0gICAqIEBwYXJhbSB0YXJnZXQgdGhlIHRhcmdldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZCggU3RyaW5nW10gdmFsdWVzLCBPYmplY3QgdGFyZ2V0ICkKLSAgewotICAgIER5bmFtaWNMaXN0IGN1cnJlbnRMaXN0ID0gdGhpczsKLSAgICAKLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgdmFsdWVzLmxlbmd0aDsgaW5kZXgrKyApCi0gICAgewotICAgICAgU3RyaW5nIHZhbHVlICAgICAgPSB2YWx1ZXNbaW5kZXhdOwotICAgICAgaW50ICAgIGxlbmd0aCAgICAgPSBjdXJyZW50TGlzdC5zdHJpbmdMaXN0Xy5zaXplKCk7Ci0gICAgICBpbnQgICAgZm91bmRJbmRleCA9IC0xOwotICAgICAgCi0gICAgICAvLyBGaW5kIHRoZSBzdHJpbmcgaW4gdGhlIGN1cnJlbnQgbGlzdC4KLSAgICAgIGZvciggaW50IHNlYXJjaEluZGV4ID0gMDsgc2VhcmNoSW5kZXggPCBsZW5ndGg7IHNlYXJjaEluZGV4KysgKQotICAgICAgewotICAgICAgICBTdHJpbmcgc3RyaW5nID0gKFN0cmluZyljdXJyZW50TGlzdC5zdHJpbmdMaXN0Xy5lbGVtZW50QXQoIHNlYXJjaEluZGV4ICk7IAotICAgICAgICAKLSAgICAgICAgaWYoIHN0cmluZy5lcXVhbHMoIHZhbHVlICkgKSAKLSAgICAgICAgewotICAgICAgICAgIGZvdW5kSW5kZXggPSBzZWFyY2hJbmRleDsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgCi0gICAgICBpZiggZm91bmRJbmRleCA9PSAtMSApCi0gICAgICB7Ci0gICAgICAgIC8vIFdlIGhhdmUgYSBuZXcgc3RyaW5nIHNvIGFkZCBpdCB0byB0aGUgbGlzdC4KLSAgICAgICAgY3VycmVudExpc3Quc3RyaW5nTGlzdF8uYWRkKCB2YWx1ZSApOwotICAgICAgICBjdXJyZW50TGlzdC5keW5hbWljTGlzdFZlY3Rvckxpc3RfLmFkZCggbmV3IER5bmFtaWNMaXN0KCkgKTsKLSAgICAgICAgZm91bmRJbmRleCA9IGxlbmd0aDsKLSAgICAgIH0KLSAgICAgIAotICAgICAgY3VycmVudExpc3QgPSAoRHluYW1pY0xpc3QpY3VycmVudExpc3QuZHluYW1pY0xpc3RWZWN0b3JMaXN0Xy5lbGVtZW50QXQoIGZvdW5kSW5kZXggKTsgICAgICAgCi0gICAgfQotICAgIAotICAgIGN1cnJlbnRMaXN0LmR5bmFtaWNMaXN0VmVjdG9yTGlzdF8uYWRkKCB0YXJnZXQgKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgYSBTZWxlY3Rpb25MaXN0Q2hvaWNlcyBvYmplY3QgZnJvbSB0aGlzIER5bmFtaWNMaXN0Ci0gICAqIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBTZWxlY3Rpb25MaXN0Q2hvaWNlcyB0b0xpc3RDaG9pY2VzKCkKLSAgewotICAgIFNlbGVjdGlvbkxpc3QgbGlzdCAgID0gbmV3IFNlbGVjdGlvbkxpc3QoIChTdHJpbmdbXSlzdHJpbmdMaXN0Xy50b0FycmF5KCBuZXcgU3RyaW5nWzBdICksIDApOwotICAgIGludCAgICAgICAgICAgbGVuZ3RoID0gZHluYW1pY0xpc3RWZWN0b3JMaXN0Xy5zaXplKCk7Ci0gICAgVmVjdG9yICAgICAgICB2ZWN0b3IgPSBuZXcgVmVjdG9yKCk7IAotICAgIAotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKQotICAgIHsKLSAgICAgIE9iamVjdCBvYmogPSBkeW5hbWljTGlzdFZlY3Rvckxpc3RfLmVsZW1lbnRBdChpbmRleCk7Ci0gICAgICAKLSAgICAgIGlmKCBvYmogaW5zdGFuY2VvZiBEeW5hbWljTGlzdCApCi0gICAgICB7Ci0gICAgICAgIHZlY3Rvci5hZGQoICgoRHluYW1pY0xpc3Qpb2JqKS50b0xpc3RDaG9pY2VzKCkgKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgdmVjdG9yLmFkZCggb2JqICk7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBuZXcgU2VsZWN0aW9uTGlzdENob2ljZXMoIGxpc3QsIHZlY3RvciApOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9zZWxlY3Rpb24vU2VsZWN0aW9uTGlzdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvc2VsZWN0aW9uL1NlbGVjdGlvbkxpc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDA4NTc3My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9zZWxlY3Rpb24vU2VsZWN0aW9uTGlzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLnNlbGVjdGlvbjsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIHN0b3JlcyBhIGxpc3Qgc3RyaW5ncyBhbG9uZyB3aXRoIGEgc2VsZWN0aW9uSW5kZXggd2hpY2gKLSAqIHN0b3JlcyB0aGUgY3VycmVudCBzdHJpbmcgdGhhdCBzZWxlY3RlZC4gIFRoZXJlIGlzIGFsc28gYSBzZWxlY3Rpb24KLSAqIHZhbHVlLiAgSWYgdGhpcyB2YWx1ZSBpcyBvbmUgb2YgdGhlIHN0cmluZ3MgaW4gdGhlIHRoZSBzdHJpbmcgbGlzdAotICogdGhlbiBzZWxlY3Rpb25JbmRleCB3aWxsIGNvbnRhaW4gdGhlIGluZGV4IG9mIHRoaXMgc3RyaW5nLiAgSWYgaXQKLSAqIGlzIG5vdCBpbiB0aGUgbGlzdCB0aGVuIHRoZSBzZWxlY3Rpb25WYWx1ZSBzdHJpbmcgd2lsbCBjb250YWluIHRoaXMKLSAqIHZhbHVlIGFuZCBzZWxlY3Rpb25JbmRleCB3aWxsIGJlIHNldCB0byAtMS4gIFRoaXMgY2xhc3MgY2FuIGJlCi0gKiB1c2VkIHRvIHN0b3JlIHRoZSBzdGF0ZSBkYXRhIGZvciBhIENvbWJvIGJveC4KLSAqLwotcHVibGljIGNsYXNzIFNlbGVjdGlvbkxpc3QKLXsKLSAgcHJpdmF0ZSBpbnQgICAgICBzZWxlY3Rpb25JbmRleF87Ci0gIHByaXZhdGUgU3RyaW5nW10gbGlzdF87Ci0gIHByaXZhdGUgU3RyaW5nICAgc2VsZWN0aW9uVmFsdWVfOwotICAKLSAgcHVibGljIFNlbGVjdGlvbkxpc3QoIFN0cmluZ1tdIGxpc3QsIGludCBzZWxlY3Rpb25JbmRleCApCi0gIHsKLSAgICBsaXN0XyAgICAgICAgICAgPSBsaXN0OwotICAgIHNlbGVjdGlvbkluZGV4XyA9IHNlbGVjdGlvbkluZGV4OwotICB9Ci0gIAotICAvKioKLSAgICogU2V0cyB0aGUgc2VsZWN0aW9uIHZhbHVlIGZvciB0aGlzIG9iamVjdC4KLSAgICogCi0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25WYWx1ZSggU3RyaW5nIHZhbHVlICkKLSAgewotICAgIHNlbGVjdGlvblZhbHVlXyA9IHZhbHVlOyAgCi0gICAgc2VsZWN0aW9uSW5kZXhfID0gLTE7Ci0gICAgCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IGxpc3RfLmxlbmd0aDsgaW5kZXgrKyApCi0gICAgewotICAgICAgaWYoIHZhbHVlLmVxdWFscyggbGlzdF9baW5kZXhdICkgKQotICAgICAgewotICAgICAgICBzZWxlY3Rpb25JbmRleF8gPSBpbmRleDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICB9IAotICAKLSAgLyoKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBzdHJpbmcgbGlzdC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRMaXN0KCkKLSAgewotICAgIHJldHVybiBsaXN0XzsKLSAgfQotICAKLSAgLyoKLSAgICogU2V0cyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHN0cmluZyBpbiB0aGUgbGlzdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEluZGV4KCBpbnQgaW5kZXggKQotICB7Ci0gICAgc2VsZWN0aW9uSW5kZXhfID0gaW5kZXg7Ci0gICAgc2VsZWN0aW9uVmFsdWVfID0gbnVsbDsKLSAgfQotIAotICAvKgotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IHN0cmluZy4gIFRoZSB2YWx1ZQotICAgKiB3aWxsIGJlIC0xIGlmIHRoZSBzZWxlY3Rpb24gdmFsdWUgaXMgbm90IGluIHRoZSBzdHJpbmcgbGlzdC4KLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0SW5kZXgoKQotICB7Ci0gICAgcmV0dXJuIHNlbGVjdGlvbkluZGV4XzsgIAotICB9Ci0gIAotICAvKgotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGN1cnJlbnQgc3RyaW5nIHNlbGVjdGlvbiBmb3IgdGhpcyBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdGlvbigpCi0gIHsKLSAgICBpZiggc2VsZWN0aW9uVmFsdWVfICE9IG51bGwgKSByZXR1cm4gc2VsZWN0aW9uVmFsdWVfOwotICAgIAotICAgIGlmKCBzZWxlY3Rpb25JbmRleF8gPT0gLTEgfHwgc2VsZWN0aW9uSW5kZXhfID4gbGlzdF8ubGVuZ3RoLTEgKQotICAgIHsKLSAgICAgIHJldHVybiAiIjsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJldHVybiBsaXN0X1sgc2VsZWN0aW9uSW5kZXhfIF07Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS9zZWxlY3Rpb24vU2VsZWN0aW9uTGlzdENob2ljZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL3NlbGVjdGlvbi9TZWxlY3Rpb25MaXN0Q2hvaWNlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzIxMGJkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb3JlL3NlbGVjdGlvbi9TZWxlY3Rpb25MaXN0Q2hvaWNlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5zZWxlY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi0vKgotICogVGhpcyBjbGFzcyBjYW4gYmUgdXNlZCB0byBzdG9yZSBhIGhpZXJhcmNoeSBvZiBTZWxlY3Rpb25MaXN0Ci0gKiBvYmplY3RzLgotICovCi1wdWJsaWMgY2xhc3MgU2VsZWN0aW9uTGlzdENob2ljZXMKLXsKLSAgcHJpdmF0ZSBTZWxlY3Rpb25MaXN0IHNlbGVjdGlvbkxpc3RfOwotICBwcml2YXRlIFZlY3RvciAgICAgICAgY2hvaWNlc187Ci0gIHByaXZhdGUgU2VsZWN0aW9uTGlzdCBuZXdWYWx1ZVNlbGVjdGlvbkxpc3RfOwotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcGFyYW0gbGlzdCAgICAgVGhlIHNlbGVjdGlvbiBsaXN0LgotICAgKiBAcGFyYW0gY2hvaWNlcyAgVGhpcyBpcyBhIHZlY3RvciBvZiBTZWxlY3Rpb25MaXN0Q2hvaWVzIGFuZCBjYW4gYmUKLSAgICogICAgICAgICAgICAgICAgIG51bGwgaWYgdGhlcmUgYXJlIG5vIGNob2ljZXMuICBUaGlzIGluZGV4IG9mIGxpc3QKLSAgICogICAgICAgICAgICAgICAgIGlzIHVzZWQgdG8gaW5kZXggaW50byBjaG9pY2VzLiAgSWYgaW5kZXggaXMgLTEgdGhlbgotICAgKiAgICAgICAgICAgICAgICAgdGhlIG5ld1ZhbHVlU2VsZWN0aW9uTGlzdCBpcyB1c2VkLgotICAgKi8KLSAgcHVibGljIFNlbGVjdGlvbkxpc3RDaG9pY2VzKCBTZWxlY3Rpb25MaXN0IGxpc3QsIFZlY3RvciBjaG9pY2VzICkKLSAgewotICAgIHNlbGVjdGlvbkxpc3RfID0gbGlzdDsKLSAgICBjaG9pY2VzXyAgICAgICA9IGNob2ljZXM7Ci0gICAgCi0gICAgbmV3VmFsdWVTZWxlY3Rpb25MaXN0XyA9IG5ldyBTZWxlY3Rpb25MaXN0KCBuZXcgU3RyaW5nWzBdLCAtMSApOwotICB9Ci0gIAotICBwdWJsaWMgU2VsZWN0aW9uTGlzdENob2ljZXMoIFNlbGVjdGlvbkxpc3QgbGlzdCwgVmVjdG9yIGNob2ljZXMsIFNlbGVjdGlvbkxpc3QgbmV3TGlzdCApCi0gIHsKLSAgICB0aGlzKCBsaXN0LCBjaG9pY2VzICk7Ci0gICAgbmV3VmFsdWVTZWxlY3Rpb25MaXN0XyA9IG5ld0xpc3Q7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGN1cnJlbnQgU2VsZWN0aW9uIGxpc3QuCi0gICAqLwotICBwdWJsaWMgU2VsZWN0aW9uTGlzdCBnZXRMaXN0KCkKLSAgewotICAgIHJldHVybiBzZWxlY3Rpb25MaXN0XzsKLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGNob2ljZXMgZm9yIHRoaXMgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFZlY3RvciBnZXRDaG9pY2VzKCkKLSAgewotICAgIHJldHVybiBjaG9pY2VzXzsKLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcGFyYW0gbGV2ZWwgdGhlIGxldmVsIGluIHRoZSBoaWVyYXJjaHkgd2hlcmUgd2Ugd2FudCB0byBnZXQgdGhlIGNob2ljZXMuCi0gICAqIEByZXR1cm4gcmV0dXJucyBhIHZlY3RvciBvZiBTZWxlY3Rpb25MaXN0Q2hvaWNlcy4KLSAgICovCi0gIHB1YmxpYyBWZWN0b3IgZ2V0Q2hvaWNlc0F0TGV2ZWwoIGludCBsZXZlbCApCi0gIHsKLSAgICBTZWxlY3Rpb25MaXN0Q2hvaWNlcyBjaG9pY2VzID0gdGhpczsKLSAgICAKLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgbGV2ZWw7IGluZGV4KysgKQotICAgIHsKLSAgICAgIGNob2ljZXMgPSBjaG9pY2VzLmdldENob2ljZSgpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gY2hvaWNlcy5nZXRDaG9pY2VzKCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBjdXJyZW50IFNlbGVjdGlvbkxpc3RDaG9pY2UKLSAgICovCi0gIHB1YmxpYyBTZWxlY3Rpb25MaXN0Q2hvaWNlcyBnZXRDaG9pY2UoKQotICB7Ci0gICAgaW50ICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uSW5kZXggPSBzZWxlY3Rpb25MaXN0Xy5nZXRJbmRleCgpOwotICAgIFNlbGVjdGlvbkxpc3RDaG9pY2VzIHJlc3VsdCAgICAgICAgID0gbnVsbDsKLSAgICAKLSAgICBpZiggc2VsZWN0aW9uSW5kZXggPT0gLTEgKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IG5ldyBTZWxlY3Rpb25MaXN0Q2hvaWNlcyggbmV3VmFsdWVTZWxlY3Rpb25MaXN0XywgbnVsbCApOwotICAgIH0KLSAgICBlbHNlIGlmKCBjaG9pY2VzXyAhPSBudWxsICYmIGNob2ljZXNfLnNpemUoKSAhPSAwICkgCi0gICAgewotICAgICAgcmVzdWx0ID0gKFNlbGVjdGlvbkxpc3RDaG9pY2VzKWNob2ljZXNfLmVsZW1lbnRBdCggc2VsZWN0aW9uSW5kZXggKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcGFyYW0gaW5kZXggdGhlIGluZGV4IG9mIHRoZSBjaG9pY2Ugd2Ugd2FudC4KLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBTZWxlY3Rpb25MaXN0Q2hvaWNlIGF0IHRoZSBpbmRleCBzcGVjaWZpZWQuCi0gICAqLwotICBwdWJsaWMgU2VsZWN0aW9uTGlzdENob2ljZXMgZ2V0Q2hvaWNlKGludCBpbmRleCkKLSAgewotICAgIFNlbGVjdGlvbkxpc3RDaG9pY2VzIHJlc3VsdCA9IG51bGw7Ci0gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBnZXRMaXN0KCkuZ2V0TGlzdCgpLmxlbmd0aCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBuZXcgU2VsZWN0aW9uTGlzdENob2ljZXMoIG5ld1ZhbHVlU2VsZWN0aW9uTGlzdF8sIG51bGwgKTsgICAgICAKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJlc3VsdCA9IChTZWxlY3Rpb25MaXN0Q2hvaWNlcyljaG9pY2VzXy5lbGVtZW50QXQoIGluZGV4ICk7Ci0gICAgfQotICAgICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvcmUvdXJpL05hdGl2ZUZpbGVDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS91cmkvTmF0aXZlRmlsZUNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThhNTUwNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29yZS91cmkvTmF0aXZlRmlsZUNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUudXJpOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQudXJpLklVUkk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC51cmkuVVJJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBOYXRpdmVGaWxlQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIHByb3RlY3RlZCBTdHJpbmcgbmFtZTsKLQotICBwcm90ZWN0ZWQgU3RyaW5nIGRlc2NyaXB0aW9uOwotCi0gIHByb3RlY3RlZCBJVVJJW10gdXJpc1RvUmVhZDsKLQotICBwcm90ZWN0ZWQgSVVSSVtdIHVyaXNUb1dyaXRlOwotCi0gIHByb3RlY3RlZCBOYXRpdmVGaWxlQ29tbWFuZCAoKQotICB7Ci0gICAgdGhpcyhudWxsLG51bGwpOwotICB9Ci0KLSAgcHJvdGVjdGVkIE5hdGl2ZUZpbGVDb21tYW5kICggU3RyaW5nIG5hbWUsIFN0cmluZyBkZXNjcmlwdGlvbiApCi0gIHsKLSAgICB0aGlzLm5hbWUgPSBuYW1lOwotICAgIHRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSAoKQotICB7Ci0gICAgcmV0dXJuIG5hbWU7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uICgpCi0gIHsKLSAgICByZXR1cm4gZGVzY3JpcHRpb247Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRVUklzVG9SZWFkICggSVVSSVtdIHVyaXNUb1JlYWQgKQotICB7Ci0gICAgdGhpcy51cmlzVG9SZWFkID0gdXJpc1RvUmVhZDsKLSAgfQotCi0gIHB1YmxpYyBJVVJJW10gZ2V0VVJJc1RvUmVhZCAoKQotICB7Ci0gICAgcmV0dXJuIHVyaXNUb1JlYWQ7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRVUklzVG9Xcml0ZSAoIElVUklbXSB1cmlzVG9Xcml0ZSApCi0gIHsKLSAgICB0aGlzLnVyaXNUb1dyaXRlID0gdXJpc1RvV3JpdGU7Ci0gIH0KLQotICBwdWJsaWMgSVVSSVtdIGdldFVSSXNUb1dyaXRlICgpCi0gIHsKLSAgICByZXR1cm4gdXJpc1RvV3JpdGU7Ci0gIH0KLQotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlICggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApCi0gIHsKLSAgICBGaWxlW10gZmlsZXNUb1JlYWQgPSBnZXRGaWxlcyh1cmlzVG9SZWFkKTsKLSAgICBGaWxlW10gZmlsZXNUb1dyaXRlID0gZ2V0RmlsZXModXJpc1RvV3JpdGUpOwotICAgIHByZVByb2Nlc3MoZmlsZXNUb1JlYWQsZmlsZXNUb1dyaXRlKTsKLSAgICBJU3RhdHVzIHN0YXR1cyA9IGV4ZWN1dGUoZmlsZXNUb1JlYWQsZmlsZXNUb1dyaXRlKTsKLSAgICBwb3N0UHJvY2VzcyhmaWxlc1RvUmVhZCxmaWxlc1RvV3JpdGUpOwotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0KLQotICBwdWJsaWMgYWJzdHJhY3QgSVN0YXR1cyBleGVjdXRlICggRmlsZVtdIGZpbGVzVG9SZWFkLCBGaWxlW10gZmlsZXNUb1dyaXRlICk7Ci0KLSAgcHJpdmF0ZSB2b2lkIHByZVByb2Nlc3MgKCBGaWxlW10gZmlsZXNUb1JlYWQsIEZpbGVbXSBmaWxlc1RvV3JpdGUgKQotICB7Ci0gICAgLy8gVEJELgotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHBvc3RQcm9jZXNzICggRmlsZVtdIGZpbGVzVG9SZWFkLCBGaWxlW10gZmlsZXNUb1dyaXRlICkKLSAgewotICAgIC8vIFRCRC4KLSAgfQotCi0gIHByaXZhdGUgRmlsZVtdIGdldEZpbGVzICggSVVSSVtdIHVyaXMgKQotICB7Ci0gICAgTGlzdCBsaXN0ID0gbmV3IExpbmtlZExpc3QoKTsKLSAgICBpZiAodXJpcyAhPSBudWxsKQotICAgIHsKLSAgICAgIGZvciAoaW50IGk9MDsgaTx1cmlzLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICBpZiAodXJpc1tpXS5pc0F2YWlsYWJsZUFzRmlsZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgbGlzdC5hZGQodXJpc1tpXS5hc0ZpbGUoKSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoIChVUklFeGNlcHRpb24gZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiAoRmlsZVtdKWxpc3QudG9BcnJheShuZXcgRmlsZVswXSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLy5jbGFzc3BhdGggYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTczOTMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjQiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyOGM3YTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotYmluCi1idWlsZC54bWwKLXJ1bnRpbWUKLXRlbXAuZm9sZGVyCi1lbnZ1aS5qYXIKLUBkb3QKLXNyYy56aXAKLWphdmFDb21waWxlci4uLmFyZ3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLy5wcm9qZWN0IGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlYjBiMzcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWk8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODdhZWUxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLSNNb24gSmFuIDMwIDEwOjM3OjI4IEVTVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2JhZTg3NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotI01vbiBKYW4gMzAgMTA6NDA6MzAgRVNUIDIwMDYKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTEKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTEKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTAxMzAzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJVBMVUdJTl9OQU1FCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWk7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4yMDMucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkucGx1Z2luLkVudlVJUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlUExVR0lOX1BST1ZJREVSCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWk7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuY29tbW9uO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLmRpYWxvZzt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5lY2xpcHNlO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLnBsdWdpbjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5wcmVmZXJlbmNlczt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5yZWdpc3RyeTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMucG9wdXA7eC1pbnRlcm5hbDo9dHJ1ZQotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudjtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3M7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsMy40LjApIiwKLSBvcmcuZWNsaXBzZS51aS5pZGU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiCi1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9hYm91dC5odG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkYjM2ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9idWlsZC5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzRkN2U0OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotYmluLmluY2x1ZGVzID0gcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICAqLmphcixcCi0gICAgICAgICAgICAgICAuLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBpY29ucy8sXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbAotc291cmNlLi4gPSBzcmMvCi1vdXRwdXQuLiA9IGJpbi8KLXNyYy5pbmNsdWRlcyA9IHNjaGVtYS8KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL2ljb25zL2Z1bGwvb2JqMTYvYW50X2J1aWxkZmlsZS5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9pY29ucy9mdWxsL29iajE2L2FudF9idWlsZGZpbGUuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZGYzNDY5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL2ljb25zL2Z1bGwvb2JqMTYvYW50X2J1aWxkZmlsZS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9pY29ucy9mdWxsL3dpemJhbi9uZXdhbnRmaWxlc193aXoucG5nIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvaWNvbnMvZnVsbC93aXpiYW4vbmV3YW50ZmlsZXNfd2l6LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTYyM2M0Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9pY29ucy9mdWxsL3dpemJhbi9uZXdhbnRmaWxlc193aXoucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvcGx1Z2luLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWIxYzY4MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIwotIyBNZXNzYWdlcyBpbiBwbHVnaW4ueG1sLgotIwotUExVR0lOX05BTUU9RW52aXJvbm1lbnQgQ29tbWFuZCBGcmFtZXdvcmsgKEdVSSkKLVBMVUdJTl9QUk9WSURFUj1FY2xpcHNlLm9yZwotCi1XSURHRVRfUkVHSVNUUllfTkFNRT1XaWRnZXQgY29udHJpYnV0b3IgcmVnaXN0cnkKLQotUExVR0lOX1hQX0FOVF9XSVpBUkRfTkFNRT1BbnQgRmlsZXMKLVBMVUdJTl9YUF9BTlRfV0laQVJEX0RFU0M9Q3JlYXRlIEFudCBzY3JpcHQgYW5kIHByb3BlcnRpZXMgZmlsZXMgaW4gdGhlIHdvcmtzcGFjZS4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3BsdWdpbi54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDYzOTg1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotCi08cGx1Z2luPgotCi08ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkubmV3V2l6YXJkcyI+Ci0gICAgICA8d2l6YXJkCi0gICAgICAgICAgICBuYW1lPSIlUExVR0lOX1hQX0FOVF9XSVpBUkRfTkFNRSIKLSAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvb2JqMTYvYW50X2J1aWxkZmlsZS5naWYiCi0gICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2UuanN0LndzLnVpLm5ldyIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuZGlhbG9nLkFudEZpbGVJbXBvcnRXaXphcmQiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLkFudEZpbGVJbXBvcnRXaXphcmQiPgotICAgICAgICAgPGRlc2NyaXB0aW9uPgotICAgICAgICAgICAgJVBMVUdJTl9YUF9BTlRfV0laQVJEX0RFU0MKLSAgICAgICAgIDwvZGVzY3JpcHRpb24+Ci0gICAgICA8L3dpemFyZD4KLSAgIDwvZXh0ZW5zaW9uPgotCi0gICA8IS0tIFRoZSBmb2xsb3dpbmcgZXh0ZW5zaW9uIHBvaW50IGlzIGludGVybmFsIGFuZCBsaWtlbHkgdG8gYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSByZWxlYXNlLiAtLT4KLSAgIDxleHRlbnNpb24tcG9pbnQgaWQ9IndpZGdldFJlZ2lzdHJ5IiBuYW1lPSIlV0lER0VUX1JFR0lTVFJZX05BTUUiIHNjaGVtYT0ic2NoZW1hL3dpZGdldFJlZ2lzdHJ5LmV4c2QiLz4KLQotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zY2hlbWEvd2lkZ2V0UmVnaXN0cnkuZXhzZCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NjaGVtYS93aWRnZXRSZWdpc3RyeS5leHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTZjYzdjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NjaGVtYS93aWRnZXRSZWdpc3RyeS5leHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Ci08IS0tIFNjaGVtYSBmaWxlIHdyaXR0ZW4gYnkgUERFIC0tPgotPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aSI+Ci08YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2NoZW1hIHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpIiBpZD0id2lkZ2V0UmVnaXN0cnkiIG5hbWU9IldpZGdldCBSZWdpc3RyeSIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0id2lkZ2V0RmFjdG9yeSIvPgotICAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icG9pbnQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgYSBmdWxseSBxdWFsaWZpZWQgaWRlbnRpZmllciBvZiB0aGUgdGFyZ2V0IGV4dGVuc2lvbiBwb2ludAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGFuIG9wdGlvbmFsIGlkZW50aWZpZXIgb2YgdGhlIGV4dGVuc2lvbiBpbnN0YW5jZQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgYW4gb3B0aW9uYWwgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uIGluc3RhbmNlCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9IndpZGdldEZhY3RvcnkiPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjbGFzcyIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpbnNlcnRCZWZvcmVDb21tYW5kSWQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9InNpbmNlIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICZsdDtiJmd0O1RoaXMgZXh0ZW5zaW9uIHBvaW50IGlzIHBhcnQgb2YgYW4gaW50ZXJpbSBBUEkgdGhhdCBpcyBzdGlsbCB1bmRlciBkZXZlbG9wbWVudCBhbmQgZXhwZWN0ZWQgdG8gY2hhbmdlIHNpZ25pZmljYW50bHkgYmVmb3JlIHJlYWNoaW5nIHN0YWJpbGl0eS4gSXQgaXMgYmVpbmcgbWFkZSBhdmFpbGFibGUgYXQgdGhpcyBlYXJseSBzdGFnZSB0byBzb2xpY2l0IGZlZWRiYWNrIGZyb20gcGlvbmVlcmluZyBhZG9wdGVycyBvbiB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IGFueSBjb2RlIHRoYXQgdXNlcyB0aGlzIEFQSSB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgYmUgYnJva2VuIChyZXBlYXRlZGx5KSBhcyB0aGUgQVBJIGV2b2x2ZXMuJmx0Oy9iJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJleGFtcGxlcyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iYXBpSW5mbyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iaW1wbGVtZW50YXRpb24iLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImNvcHlyaWdodCIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuJmx0O2JyJmd0OwotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSAKLWF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyAKLXRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0ICZsdDthCi1ocmVmPSZxdW90O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJnF1b3Q7Jmd0O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJmx0Oy9hJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvRW52aXJvbm1lbnRVSS5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9FbnZpcm9ubWVudFVJLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjMGViZDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9FbnZpcm9ubWVudFVJLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSMgLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgMjAwNjA1MDkgICAxMTkyOTYgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1CVVRUT05fU0hPV19BTExfRElBTE9HUz0mU2hvdyBBbGwKLUJVVFRPTl9ISURFX0FMTF9ESUFMT0dTPSZIaWRlIEFsbAotQ0hFQ0tCT1hfRE9fTk9UX1NIT1dfRElBTE9HX0FHQUlOPURvIG5vdCBzaG93IG1lIHRoaXMgZGlhbG9nIGJveCBhZ2Fpbi4KLQotVE9PTFRJUF9QUEFEX1BBR0U9Q29udHJvbCB0byBzaG93L2hpZGUgdGhlIGRpYWxvZ3MgdGhhdCBhcHBlYXIgd2hlbiBhIHBvcC11cCBhY3Rpb24gaXMgZXhlY3V0ZWQuCi1UT09MVElQX0RPX05PVF9TSE9XX0RJQUxPR19BR0FJTj1UbyBhbGxvdyB0aGlzIGRpYWxvZyB0byBzaG93IGFnYWluLCBlbmFibGUgZnJvbSBwcmVmZXJlbmNlIC0gZGlhbG9ncy4KLVRPT0xUSVBfUFBBRF9CVVRUT05fU0hPV19BTEw9U2hvdyBhbGwgZGlhbG9ncy4KLVRPT0xUSVBfUFBBRF9CVVRUT05fSElERV9BTEw9SGlkZSBhbGwgZGlhbG9ncyBhbmQgZXhlY3V0ZSBwb3AtdXAgYWN0aW9ucy4KLQotV0laQVJEX1RJVExFX0FOVD1DcmVhdGUgQW50IEZpbGVzCi1XSVpBUkRfUEFHRV9USVRMRV9BTlQ9Q3JlYXRlIFdlYiBTZXJ2aWNlIEFudCBmaWxlcwotV0laQVJEX1BBR0VfREVTQ19BTlQ9U2VsZWN0IHdvcmtzcGFjZSBmb2xkZXIgZm9yIEFudCBzY3JpcHQgYW5kIHByb3BlcnRpZXMgZmlsZXMKLU1TR19TVEFUVVNfQ09QWUlOR19BTlRfRklMRVM9Q29weWluZyB3ZWIgc2VydmljZXMgQW50IGZpbGVzCi1NU0dfRVJSX0NPUFlJTkdfQU5UX0ZJTEVTPUVycm9yIGVuY291bnRlcmVkIGNvcHlpbmcgQW50IGZpbGVzCi1NU0dfV0FSTklOR19GSUxFX0VYSVNUUz1UaGUgZmlsZSB7MH0gZXhpc3RzLiAgRG8geW91IHdhbnQgdG8gb3ZlcndyaXRlPwotRElBTE9HX1RJVExFX09WRVJXUklURT1Db25maXJtIE92ZXJ3cml0ZQotCi1NU0dfRVJST1JfV0laQVJEX0lEX05PVF9GT1VORD1JV0FCMDAxM0UgQ291bGQgbm90IGZpbmQgd2l6YXJkIGlkOiB7MH0KLU1TR19FUlJPUl9PUEVSQVRJT05fVElNRURfT1VUPU9wZXJhdGlvbiB0aW1lZCBvdXQuCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL0Vudmlyb25tZW50VUlNZXNzYWdlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9FbnZpcm9ubWVudFVJTWVzc2FnZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODkzMWQ4NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL0Vudmlyb25tZW50VUlNZXNzYWdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTA5ICAgMTE5Mjk2IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotCi1wdWJsaWMgZmluYWwgY2xhc3MgRW52aXJvbm1lbnRVSU1lc3NhZ2VzIGV4dGVuZHMgTkxTIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuRW52aXJvbm1lbnRVSSI7Ly8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBFbnZpcm9ubWVudFVJTWVzc2FnZXMoKSB7Ci0JCS8vIERvIG5vdCBpbnN0YW50aWF0ZQotCX0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJVVFRPTl9TSE9XX0FMTF9ESUFMT0dTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJVVFRPTl9ISURFX0FMTF9ESUFMT0dTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIENIRUNLQk9YX0RPX05PVF9TSE9XX0RJQUxPR19BR0FJTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BQQURfUEFHRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX0RPX05PVF9TSE9XX0RJQUxPR19BR0FJTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BQQURfQlVUVE9OX1NIT1dfQUxMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFBBRF9CVVRUT05fSElERV9BTEw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1dJWkFSRF9JRF9OT1RfRk9VTkQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV0laQVJEX1RJVExFX0FOVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXSVpBUkRfUEFHRV9USVRMRV9BTlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV0laQVJEX1BBR0VfREVTQ19BTlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX1NUQVRVU19DT1BZSU5HX0FOVF9GSUxFUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJSX0NPUFlJTkdfQU5UX0ZJTEVTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19XQVJOSU5HX0ZJTEVfRVhJU1RTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIERJQUxPR19USVRMRV9PVkVSV1JJVEU7Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9PUEVSQVRJT05fVElNRURfT1VUOwotCi0Jc3RhdGljIHsKLQkJTkxTLmluaXRpYWxpemVNZXNzYWdlcyhCVU5ETEVfTkFNRSwgRW52aXJvbm1lbnRVSU1lc3NhZ2VzLmNsYXNzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2NvbW1vbi9UaW1lZE9wZXJhdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9jb21tb24vVGltZWRPcGVyYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODAxMmRjYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2NvbW1vbi9UaW1lZE9wZXJhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTc5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDUwNCAgIDExOTI5NiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA2MDgyMiAgIDE1NDc1MCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLmNvbW1vbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMub3BlcmF0aW9ucy5BYnN0cmFjdE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLm9wZXJhdGlvbnMuSVVuZG9Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMub3BlcmF0aW9ucy5JVW5kb2FibGVPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuRW52aXJvbm1lbnRVSU1lc3NhZ2VzOwotCi1wdWJsaWMgY2xhc3MgVGltZWRPcGVyYXRpb24gaW1wbGVtZW50cyBJVW5kb2FibGVPcGVyYXRpb24KLXsKLSAgcHJpdmF0ZSBBYnN0cmFjdE9wZXJhdGlvbiBvcGVyYXRpb247Ci0gIHByaXZhdGUgaW50ICAgICAgICAgICAgICAgdGltZW91dDsKLSAgcHJpdmF0ZSBJUHJvZ3Jlc3NNb25pdG9yICB0ZW1wTW9uaXRvcjsKLSAgcHJpdmF0ZSBJQWRhcHRhYmxlICAgICAgICB0ZW1wSW5mbzsKLSAgcHJpdmF0ZSBJU3RhdHVzICAgICAgICAgICByZXR1cm5TdGF0dXM7Ci0gIHByaXZhdGUgYm9vbGVhbiAgICAgICAgICAgb3BlcmF0aW9uQ29tcGxldGU7Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgdGltZU91dE1lc3NhZ2U7Ci0gIAotICBwdWJsaWMgVGltZWRPcGVyYXRpb24oIEFic3RyYWN0T3BlcmF0aW9uIG9wZXJhdGlvbiwgaW50IHRpbWVvdXQsIFN0cmluZyB0aW1lT3V0TWVzc2FnZSApCi0gIHsKLSAgICB0aGlzLm9wZXJhdGlvbiAgICAgID0gb3BlcmF0aW9uOwotICAgIHRoaXMudGltZW91dCAgICAgICAgPSB0aW1lb3V0OwotICAgIHRoaXMudGltZU91dE1lc3NhZ2UgPSB0aW1lT3V0TWVzc2FnZTsKLSAgfQotCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGluZm8pIAotICB7Ci0gICAgVGhyZWFkICBleGVjdXRlVGhyZWFkID0gbmV3IFRocmVhZCggbmV3IE9wZXJhdGlvblJ1bm5hYmxlKCkgKTsKLSAgICAKLSAgICByZXR1cm5TdGF0dXMgICAgICA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gICAgdGVtcE1vbml0b3IgICAgICAgPSBtb25pdG9yOwotICAgIHRlbXBJbmZvICAgICAgICAgID0gaW5mbzsKLSAgICBvcGVyYXRpb25Db21wbGV0ZSA9IGZhbHNlOwotICAgIGV4ZWN1dGVUaHJlYWQuc3RhcnQoKTsKLSAgICAKLSAgICBzeW5jaHJvbml6ZWQoIG9wZXJhdGlvbiApCi0gICAgewotICAgICAgd2hpbGUoICFvcGVyYXRpb25Db21wbGV0ZSApCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgb3BlcmF0aW9uLndhaXQodGltZW91dCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2goIEludGVycnVwdGVkRXhjZXB0aW9uIGV4YyApCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgbWVzc2FnZSAgICAgPSBleGMuZ2V0TWVzc2FnZSgpOwotICAgICAgICAgIFN0YXR1cyBlcnJvclN0YXR1cyA9IG5ldyBTdGF0dXMoIElTdGF0dXMuRVJST1IsImlkIiwgMCwgbWVzc2FnZSA9PSBudWxsID8gIiIgOiBtZXNzYWdlLCBleGMgKTsKLSAgICAgICAgICBleGVjdXRlVGhyZWFkLmludGVycnVwdCgpOwotICAgICAgICAgIHJldHVybiBlcnJvclN0YXR1czsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYoICFvcGVyYXRpb25Db21wbGV0ZSApCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBXZSB0aW1lZCBvdXQsIHNpbmNlIHRoZSBleGVjdXRpb24gdGhyZWFkIGhhc24ndCBzZXQgb3BlcmF0aW9uQ29tcGxldGUgCi0gICAgICAgICAgLy8gdG8gdHJ1ZS4KLSAgICAgICAgICBTdGF0dXMgIGVycm9yU3RhdHVzID0gbmV3IFN0YXR1cyggSVN0YXR1cy5FUlJPUiwiaWQiLCAwLCBFbnZpcm9ubWVudFVJTWVzc2FnZXMuTVNHX0VSUk9SX09QRVJBVElPTl9USU1FRF9PVVQsIG51bGwpOwotICAgICAgICAgIFNoZWxsICAgc2hlbGwgICAgICAgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldFNoZWxsKCk7Ci0gICAgICAgICAgYm9vbGVhbiB3YWl0TW9yZSAgICA9IE1lc3NhZ2VEaWFsb2cub3BlbkNvbmZpcm0oc2hlbGwsIEVudmlyb25tZW50VUlNZXNzYWdlcy5NU0dfRVJST1JfT1BFUkFUSU9OX1RJTUVEX09VVCwgdGltZU91dE1lc3NhZ2UgKTsKLSAgICAgICAgICAKLSAgICAgICAgICBpZiggIXdhaXRNb3JlICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBleGVjdXRlVGhyZWFkLmludGVycnVwdCgpOwotICAgICAgICAgICAgb3BlcmF0aW9uQ29tcGxldGUgPSB0cnVlOwotICAgICAgICAgICAgcmV0dXJuIGVycm9yU3RhdHVzOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBXZSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LiAgVGhlcmVmb3JlIHJldHVybiB0aGUgc3RhdHVzIHNldCBpbiB0aGUgZm9ya2VkCi0gICAgLy8gdGhyZWFkLgotICAgIHJldHVybiByZXR1cm5TdGF0dXM7Ci0gIH0KLQotICBwcml2YXRlIGNsYXNzIE9wZXJhdGlvblJ1bm5hYmxlIGltcGxlbWVudHMgUnVubmFibGUKLSAgewotICAgIHB1YmxpYyB2b2lkIHJ1bigpCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIHJldHVyblN0YXR1cyA9IG9wZXJhdGlvbi5leGVjdXRlKHRlbXBNb25pdG9yLCB0ZW1wSW5mbyk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCggVGhyb3dhYmxlIGV4YyApCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBtZXNzYWdlID0gZXhjLmdldE1lc3NhZ2UoKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVyblN0YXR1cyA9IG5ldyBTdGF0dXMoIElTdGF0dXMuRVJST1IsImlkIiwgMCwgbWVzc2FnZSA9PSBudWxsID8gIiIgOiBtZXNzYWdlLCBleGMgKTsKLSAgICAgIH0KLSAgICAgIGZpbmFsbHkKLSAgICAgIHsKLSAgICAgICAgc3luY2hyb25pemVkKCBvcGVyYXRpb24gKQotICAgICAgICB7Ci0gICAgICAgICAgb3BlcmF0aW9uQ29tcGxldGUgPSB0cnVlOwotICAgICAgICAgIG9wZXJhdGlvbi5ub3RpZnkoKTsKLSAgICAgICAgfSAgICAgICAgCi0gICAgICB9Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgSVN0YXR1cyByZWRvKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBpbmZvKSB0aHJvd3MgRXhlY3V0aW9uRXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4gb3BlcmF0aW9uLnJlZG8obW9uaXRvciwgaW5mbyk7Ci0gIH0KLQotICBwdWJsaWMgSVN0YXR1cyB1bmRvKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBpbmZvKSB0aHJvd3MgRXhlY3V0aW9uRXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4gb3BlcmF0aW9uLnVuZG8obW9uaXRvciwgaW5mbyk7Ci0gIH0KLSAgcHVibGljIElVbmRvQ29udGV4dFtdIGdldENvbnRleHRzKCkKLSAgewotICAgIHJldHVybiBvcGVyYXRpb24uZ2V0Q29udGV4dHMoKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGhhc0NvbnRleHQoSVVuZG9Db250ZXh0IGNvbnRleHQpCi0gIHsKLSAgICByZXR1cm4gb3BlcmF0aW9uLmhhc0NvbnRleHQoY29udGV4dCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBhZGRDb250ZXh0KElVbmRvQ29udGV4dCBjb250ZXh0KQotICB7Ci0gICAgb3BlcmF0aW9uLmFkZENvbnRleHQoY29udGV4dCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBjYW5FeGVjdXRlKCkKLSAgewotICAgIHJldHVybiBvcGVyYXRpb24uY2FuRXhlY3V0ZSgpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gY2FuUmVkbygpCi0gIHsKLSAgICByZXR1cm4gb3BlcmF0aW9uLmNhblJlZG8oKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGNhblVuZG8oKQotICB7Ci0gICAgcmV0dXJuIG9wZXJhdGlvbi5jYW5VbmRvKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkKLSAgewotICAgIG9wZXJhdGlvbi5kaXNwb3NlKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldExhYmVsKCkKLSAgewotICAgIHJldHVybiBvcGVyYXRpb24uZ2V0TGFiZWwoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlbW92ZUNvbnRleHQoSVVuZG9Db250ZXh0IGNvbnRleHQpCi0gIHsKLSAgICBvcGVyYXRpb24ucmVtb3ZlQ29udGV4dChjb250ZXh0KTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldExhYmVsKFN0cmluZyBuYW1lKQotICB7Ci0gICAgb3BlcmF0aW9uLnNldExhYmVsKG5hbWUpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2RpYWxvZy9BbnRGaWxlSW1wb3J0V2l6YXJkLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2RpYWxvZy9BbnRGaWxlSW1wb3J0V2l6YXJkLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjM2QxNTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9kaWFsb2cvQW50RmlsZUltcG9ydFdpemFyZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjc3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAzMTUgICAxMjg3MTEgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5kaWFsb2c7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLk1lc3NhZ2VCb3g7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSU5ld1dpemFyZDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0UmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5JU2V0U2VsZWN0aW9uVGFyZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb21tb24uRmlsZVJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlByb2dyZXNzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuVHJhbnNpZW50UmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5wbHVnaW4uRW52UGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5FbnZpcm9ubWVudFVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLnBsdWdpbi5FbnZVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklTdGF0dXNIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuTnVsbFN0YXR1c0hhbmRsZXI7Ci0KLXB1YmxpYyBjbGFzcyBBbnRGaWxlSW1wb3J0V2l6YXJkIGV4dGVuZHMgV2l6YXJkIGltcGxlbWVudHMgSU5ld1dpemFyZCB7Ci0KLQkvL3ByaXZhdGUgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGZDb25maWdFbGVtZW50OwotCXByaXZhdGUgQW50RmlsZUltcG9ydFdpemFyZFBhZ2UgbWFpblBhZ2U7Ci0JLyoqCi0gICAgICogVGhlIHdvcmtiZW5jaC4KLSAgICAgKi8KLSAgICBwcml2YXRlIElXb3JrYmVuY2ggd29ya2JlbmNoOwotCi0gICAgLyoqCi0gICAgICogVGhlIGN1cnJlbnQgc2VsZWN0aW9uLgotICAgICAqLwotICAgIHByb3RlY3RlZCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb247Ci0gICAgCi0JcHVibGljIEFudEZpbGVJbXBvcnRXaXphcmQoKQotCXsKLQkJc3VwZXIoKTsJCSAKLQkJc2V0V2luZG93VGl0bGUoRW52aXJvbm1lbnRVSU1lc3NhZ2VzLldJWkFSRF9USVRMRV9BTlQpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRXaW5kb3dUaXRsZShTdHJpbmcgbmV3VGl0bGUpIHsKLQkJc3VwZXIuc2V0V2luZG93VGl0bGUobmV3VGl0bGUpOwotCX0KLQkKLQkgcHVibGljIHZvaWQgYWRkUGFnZXMoKSB7Ci0JICAgICAgICBzdXBlci5hZGRQYWdlcygpOwkgICAgICAgIAotCSAgICAgICAgbWFpblBhZ2UgPSBuZXcgQW50RmlsZUltcG9ydFdpemFyZFBhZ2UoRW52aXJvbm1lbnRVSU1lc3NhZ2VzLldJWkFSRF9QQUdFX1RJVExFX0FOVCwgZ2V0U2VsZWN0aW9uKCkpOwotICAgICAgICAgICAgYWRkUGFnZShtYWluUGFnZSk7Ci0JICAgIH0KLQkKLQlwdWJsaWMgYm9vbGVhbiBwZXJmb3JtRmluaXNoKCkgewkKLQkJSVBhdGggZGVzdGluYXRpb24gPSBtYWluUGFnZS5nZXRQYXRoKCk7Ci0JCWlmIChkZXN0aW5hdGlvbiA9PSBudWxsKQotCQl7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0JCQkKLQkJZWxzZQotCQl7Ci0JCQkvL2p2aDogVE9ETzogYWRkIGV4dGVuc2lvbiBzbyBleHRlbmRlcnMgb2YgdGhlIGNvbW1hbmQgZnJhbWV3b3JrIGNhbiByZWdpc3RlciBwcm9wZXJ0aWVzIGZpbGVzIHRvIGltcG9ydAotCQkJLy8gIGhlcmUgd2UgcGljayB1cCBhbGwgcmVnaXN0ZXJlZCBBbnQgZmlsZXMgYW5kIGltcG9ydCAtIGFsc28gd291bGQgYmUgbmljZSB0byBhbGxvdyB1c2VyIHRvIGNob29zZSBhIHN1YnNldAotCQkJU3RyaW5nW10gc291cmNlRmlsZXMgPSBuZXcgU3RyaW5nW117ImFudC93c2dlbi54bWwiLCAiYW50L2F4aXNjbGllbnQucHJvcGVydGllcyIsICJhbnQvYXhpc3NlcnZpY2UucHJvcGVydGllcyJ9OyAvLyROT04tTkxTJAotCQkJaW50IGZpbGVjb3VudCA9IDA7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IHNvdXJjZUZpbGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJU3RyaW5nIGZpbGVTb3VyY2UgPSBzb3VyY2VGaWxlc1tpXTsKLQkJCQlTdHJpbmcgdGFyZ2V0RmlsZSA9IGZpbGVTb3VyY2U7Ci0JCQkJLy9zdHJpcCBhbnkgbGVhZGluZyBzZWdtZW50cyBvZmYgb2YgdGFyZ2V0RmlsZQotCQkJCWludCBmaWxlU3RhcnQgPSB0YXJnZXRGaWxlLmxhc3RJbmRleE9mKCIvIik7Ci0JCQkJaWYgKGZpbGVTdGFydCA+PSAwKQotCQkJCXsKLQkJCQkgIHRhcmdldEZpbGUgPSB0YXJnZXRGaWxlLnN1YnN0cmluZyhmaWxlU3RhcnQpOwotCQkJCX0KLQkJCQlQbHVnaW4gc291cmNlUGx1Z2luID0gRW52UGx1Z2luLmdldEluc3RhbmNlKCk7ICAKLQkJCQkvL2p2aDogVE9ETyAtIGFkZCByZWFsIHByb2dyZXNzIG1vbml0b3IgaW4gaGVyZS4uLgotCQkJCQkJCQkKLQkJCQlJU3RhdHVzIHN0YXR1cyA9IGNvcHlJRmlsZShzb3VyY2VQbHVnaW4sIGZpbGVTb3VyY2UsIGRlc3RpbmF0aW9uLCB0YXJnZXRGaWxlLCAoSVByb2dyZXNzTW9uaXRvciluZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCQlpZiAoc3RhdHVzID09IFN0YXR1cy5DQU5DRUxfU1RBVFVTKQotCQkJCXsKLQkJCQkJZmlsZWNvdW50Kys7Ci0JCQkJfQkJCQkJCQkJCi0JCQl9Ci0JCQlpZiAoZmlsZWNvdW50ID09IHNvdXJjZUZpbGVzLmxlbmd0aCkKLQkJCXsKLQkJCQlyZXR1cm4gZmFsc2U7ICAvL2Rvbid0IGNsb3NlIGlmIGFsbCBmaWxlcyB3ZXJlIG5vdCB3cml0dGVuIG91dCAtIGdpdmUgdXNlciBvcHBvcnR1bml0eSB0byBjaGFuZ2UgZGVzdGluYXRpb24KLQkJCX0KLQkJfQotCSAgICByZXR1cm4gdHJ1ZTsJCQotICB9CQotCQotCXByaXZhdGUgSVN0YXR1cyBjb3B5SUZpbGUoUGx1Z2luIHBsdWdpbiwgU3RyaW5nIHNvdXJjZSwgSVBhdGggdGFyZ2V0UGF0aCwgU3RyaW5nIHRhcmdldEZpbGUsIC8qSUVudmlyb25tZW50IGVudiwqLyBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKQotCXsKLQkgICAgCi0JICBpZiAocGx1Z2luICE9IG51bGwpCi0JICB7Ci0JICAgIElQYXRoIHRhcmdldCA9IHRhcmdldFBhdGguYXBwZW5kKG5ldyBQYXRoKHRhcmdldEZpbGUpKTsKLQkgICAgCi0JICAgIFByb2dyZXNzVXRpbHMucmVwb3J0KCBtb25pdG9yLCBFbnZpcm9ubWVudFVJTWVzc2FnZXMuTVNHX1NUQVRVU19DT1BZSU5HX0FOVF9GSUxFUyk7Ci0JICAgIHRyeQotCSAgICB7Ci0JICAgICAgIFJlc291cmNlQ29udGV4dCBjb250ZXh0ID0gbmV3IFRyYW5zaWVudFJlc291cmNlQ29udGV4dCgpOwotCSAgICAgICAvLyBjaGVjayB0byBzZWUgaWYgZmlsZSBleGlzdHMgYmVmb3JlIGNvcHkKLQkgICAgICAgSVJlc291cmNlIHJlc291cmNlID0gRmlsZVJlc291cmNlVXRpbHMuZmluZFJlc291cmNlKHRhcmdldCk7CSAgICAgCi0JICAgICAgIAotCSAgICAgICBpZiAocmVzb3VyY2UgIT0gbnVsbCkKLQkJCXsKLQkJCQlNZXNzYWdlQm94IG92ZXJ3cml0ZUJveCA9IG5ldyBNZXNzYWdlQm94KGdldFNoZWxsKCksIFNXVC5JQ09OX1FVRVNUSU9OfFNXVC5ZRVN8U1dULk5PKTsKLQkJCQlvdmVyd3JpdGVCb3guc2V0TWVzc2FnZShFbnZpcm9ubWVudFVJTWVzc2FnZXMuYmluZChFbnZpcm9ubWVudFVJTWVzc2FnZXMuTVNHX1dBUk5JTkdfRklMRV9FWElTVFMsIHRhcmdldC50b1N0cmluZygpKSk7CQkJCQotCQkJCW92ZXJ3cml0ZUJveC5zZXRUZXh0KEVudmlyb25tZW50VUlNZXNzYWdlcy5ESUFMT0dfVElUTEVfT1ZFUldSSVRFKTsKLQkJCQlpbnQgcmVzdWx0ID0gb3ZlcndyaXRlQm94Lm9wZW4oKTsKLQkJCQlpZiAocmVzdWx0ICE9IFNXVC5OTykKLQkJCQkJRmlsZVJlc291cmNlVXRpbHMuY3JlYXRlRmlsZShjb250ZXh0LCB0YXJnZXQsIHBsdWdpbi5vcGVuU3RyZWFtKG5ldyBQYXRoKHNvdXJjZSkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vbml0b3IsIChJU3RhdHVzSGFuZGxlciluZXcgTnVsbFN0YXR1c0hhbmRsZXIoKSk7Ci0JCQkJZWxzZSAKLQkJCQkJcmV0dXJuIFN0YXR1cy5DQU5DRUxfU1RBVFVTOwotCQkJfSAgICAgICAKLQkJCWVsc2UgCi0JCQl7Ci0JCQkJRmlsZVJlc291cmNlVXRpbHMuY3JlYXRlRmlsZShjb250ZXh0LCB0YXJnZXQsIHBsdWdpbi5vcGVuU3RyZWFtKG5ldyBQYXRoKHNvdXJjZSkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9uaXRvciwgKElTdGF0dXNIYW5kbGVyKW5ldyBOdWxsU3RhdHVzSGFuZGxlcigpKTsKLQkJCX0KLQkgICAgfQotCSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsJICAgIAkKLQkgICAgICByZXR1cm4gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoRW52aXJvbm1lbnRVSU1lc3NhZ2VzLk1TR19FUlJfQ09QWUlOR19BTlRfRklMRVMsIGUpOwotCSAgICB9Ci0JICB9CSAgCi0JICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQl9Ci0JCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgc2VsZWN0aW9uIHdoaWNoIHdhcyBwYXNzZWQgdG8gPGNvZGU+aW5pdDwvY29kZT4uCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIHRoZSBzZWxlY3Rpb24KLSAgICAgKi8KLSAgICBwdWJsaWMgSVN0cnVjdHVyZWRTZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCkgewotICAgICAgICByZXR1cm4gc2VsZWN0aW9uOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIHdvcmtiZW5jaCB3aGljaCB3YXMgcGFzc2VkIHRvIDxjb2RlPmluaXQ8L2NvZGU+LgotICAgICAqCi0gICAgICogQHJldHVybiB0aGUgd29ya2JlbmNoCi0gICAgICovCi0gICAgcHVibGljIElXb3JrYmVuY2ggZ2V0V29ya2JlbmNoKCkgewotICAgICAgICByZXR1cm4gd29ya2JlbmNoOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRoZSA8Y29kZT5CYXNpY05ld1Jlc291cmNlV2l6YXJkPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIAotICAgICAqIDxjb2RlPklXb3JrYmVuY2hXaXphcmQ8L2NvZGU+IG1ldGhvZCByZWNvcmRzIHRoZSBnaXZlbiB3b3JrYmVuY2ggYW5kCi0gICAgICogc2VsZWN0aW9uLCBhbmQgaW5pdGlhbGl6ZXMgdGhlIGRlZmF1bHQgYmFubmVyIGltYWdlIGZvciB0aGUgcGFnZXMKLSAgICAgKiBieSBjYWxsaW5nIDxjb2RlPmluaXRpYWxpemVEZWZhdWx0UGFnZUltYWdlRGVzY3JpcHRvcjwvY29kZT4uCi0gICAgICogU3ViY2xhc3NlcyBtYXkgZXh0ZW5kLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaCB3b3JrYmVuY2gsIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb24pIHsKLSAgICAgICAgdGhpcy53b3JrYmVuY2ggPSB3b3JrYmVuY2g7Ci0gICAgICAgIHRoaXMuc2VsZWN0aW9uID0gY3VycmVudFNlbGVjdGlvbjsKLQotICAgICAgICBpbml0aWFsaXplRGVmYXVsdFBhZ2VJbWFnZURlc2NyaXB0b3IoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBJbml0aWFsaXplcyB0aGUgZGVmYXVsdCBwYWdlIGltYWdlIGRlc2NyaXB0b3IgdG8gYW4gYXBwcm9wcmlhdGUgYmFubmVyLgotICAgICAqIEJ5IGNhbGxpbmcgPGNvZGU+c2V0RGVmYXVsdFBhZ2VJbWFnZURlc2NyaXB0b3I8L2NvZGU+LgotICAgICAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbWV0aG9kIHVzZXMgYSBnZW5lcmljIG5ldyB3aXphcmQgaW1hZ2UuCi0gICAgICogPHA+Ci0gICAgICogU3ViY2xhc3NlcyBtYXkgcmVpbXBsZW1lbnQuCi0gICAgICogPC9wPgotICAgICAqLwotICAgIHByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVEZWZhdWx0UGFnZUltYWdlRGVzY3JpcHRvcigpIHsKLSAgICAJSW1hZ2VEZXNjcmlwdG9yIGRlc2MgPSBFbnZVSVBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3IoImljb25zL2Z1bGwvd2l6YmFuL25ld2FudGZpbGVzX3dpei5wbmciKTsvLyROT04tTkxTLTEkCi0gICAgICAgIHNldERlZmF1bHRQYWdlSW1hZ2VEZXNjcmlwdG9yKGRlc2MpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNlbGVjdHMgYW5kIHJldmVhbHMgdGhlIG5ld2x5IGFkZGVkIHJlc291cmNlIGluIGFsbCBwYXJ0cwotICAgICAqIG9mIHRoZSBhY3RpdmUgd29ya2JlbmNoIHdpbmRvdydzIGFjdGl2ZSBwYWdlLgotICAgICAqCi0gICAgICogQHNlZSBJU2V0U2VsZWN0aW9uVGFyZ2V0Ci0gICAgICovCi0gICAgcHJvdGVjdGVkIHZvaWQgc2VsZWN0QW5kUmV2ZWFsKElSZXNvdXJjZSBuZXdSZXNvdXJjZSkgewotICAgICAgICBzZWxlY3RBbmRSZXZlYWwobmV3UmVzb3VyY2UsIGdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBBdHRlbXB0cyB0byBzZWxlY3QgYW5kIHJldmVhbCB0aGUgc3BlY2lmaWVkIHJlc291cmNlIGluIGFsbAotICAgICAqIHBhcnRzIHdpdGhpbiB0aGUgc3VwcGxpZWQgd29ya2JlbmNoIHdpbmRvdydzIGFjdGl2ZSBwYWdlLgotICAgICAqIDxwPgotICAgICAqIENoZWNrcyBhbGwgcGFydHMgaW4gdGhlIGFjdGl2ZSBwYWdlIHRvIHNlZSBpZiB0aGV5IGltcGxlbWVudCA8Y29kZT5JU2V0U2VsZWN0aW9uVGFyZ2V0PC9jb2RlPiwKLSAgICAgKiBlaXRoZXIgZGlyZWN0bHkgb3IgYXMgYW4gYWRhcHRlci4gSWYgc28sIHRlbGxzIHRoZSBwYXJ0IHRvIHNlbGVjdCBhbmQgcmV2ZWFsIHRoZQotICAgICAqIHNwZWNpZmllZCByZXNvdXJjZS4KLSAgICAgKiA8L3A+Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gcmVzb3VyY2UgdGhlIHJlc291cmNlIHRvIGJlIHNlbGVjdGVkIGFuZCByZXZlYWxlZAotICAgICAqIEBwYXJhbSB3aW5kb3cgdGhlIHdvcmtiZW5jaCB3aW5kb3cgdG8gc2VsZWN0IGFuZCByZXZlYWwgdGhlIHJlc291cmNlCi0gICAgICogCi0gICAgICogQHNlZSBJU2V0U2VsZWN0aW9uVGFyZ2V0Ci0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHNlbGVjdEFuZFJldmVhbChJUmVzb3VyY2UgcmVzb3VyY2UsCi0gICAgICAgICAgICBJV29ya2JlbmNoV2luZG93IHdpbmRvdykgewotICAgICAgICAvLyB2YWxpZGF0ZSB0aGUgaW5wdXQKLSAgICAgICAgaWYgKHdpbmRvdyA9PSBudWxsIHx8IHJlc291cmNlID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIElXb3JrYmVuY2hQYWdlIHBhZ2UgPSB3aW5kb3cuZ2V0QWN0aXZlUGFnZSgpOwotICAgICAgICBpZiAocGFnZSA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIGdldCBhbGwgdGhlIHZpZXcgYW5kIGVkaXRvciBwYXJ0cwotICAgICAgICBMaXN0IHBhcnRzID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICBJV29ya2JlbmNoUGFydFJlZmVyZW5jZSByZWZzW10gPSBwYWdlLmdldFZpZXdSZWZlcmVuY2VzKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVmcy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgSVdvcmtiZW5jaFBhcnQgcGFydCA9IHJlZnNbaV0uZ2V0UGFydChmYWxzZSk7Ci0gICAgICAgICAgICBpZiAocGFydCAhPSBudWxsKQotICAgICAgICAgICAgICAgIHBhcnRzLmFkZChwYXJ0KTsKLSAgICAgICAgfQotICAgICAgICByZWZzID0gcGFnZS5nZXRFZGl0b3JSZWZlcmVuY2VzKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVmcy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgaWYgKHJlZnNbaV0uZ2V0UGFydChmYWxzZSkgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICBwYXJ0cy5hZGQocmVmc1tpXS5nZXRQYXJ0KGZhbHNlKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBmaW5hbCBJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHJlc291cmNlKTsKLSAgICAgICAgSXRlcmF0b3IgaXRyID0gcGFydHMuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKGl0ci5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgIElXb3JrYmVuY2hQYXJ0IHBhcnQgPSAoSVdvcmtiZW5jaFBhcnQpIGl0ci5uZXh0KCk7Ci0KLSAgICAgICAgICAgIC8vIGdldCB0aGUgcGFydCdzIElTZXRTZWxlY3Rpb25UYXJnZXQgaW1wbGVtZW50YXRpb24KLSAgICAgICAgICAgIElTZXRTZWxlY3Rpb25UYXJnZXQgdGFyZ2V0ID0gbnVsbDsKLSAgICAgICAgICAgIGlmIChwYXJ0IGluc3RhbmNlb2YgSVNldFNlbGVjdGlvblRhcmdldCkKLSAgICAgICAgICAgICAgICB0YXJnZXQgPSAoSVNldFNlbGVjdGlvblRhcmdldCkgcGFydDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB0YXJnZXQgPSAoSVNldFNlbGVjdGlvblRhcmdldCkgcGFydAotICAgICAgICAgICAgICAgICAgICAgICAgLmdldEFkYXB0ZXIoSVNldFNlbGVjdGlvblRhcmdldC5jbGFzcyk7Ci0KLSAgICAgICAgICAgIGlmICh0YXJnZXQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIC8vIHNlbGVjdCBhbmQgcmV2ZWFsIHJlc291cmNlCi0gICAgICAgICAgICAgICAgZmluYWwgSVNldFNlbGVjdGlvblRhcmdldCBmaW5hbFRhcmdldCA9IHRhcmdldDsKLSAgICAgICAgICAgICAgICB3aW5kb3cuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxUYXJnZXQuc2VsZWN0UmV2ZWFsKHNlbGVjdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZGlhbG9nL0FudEZpbGVJbXBvcnRXaXphcmRQYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2RpYWxvZy9BbnRGaWxlSW1wb3J0V2l6YXJkUGFnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzUzYTNjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZGlhbG9nL0FudEZpbGVJbXBvcnRXaXphcmRQYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5kaWFsb2c7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUcmVlQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLldpemFyZFJlc291cmNlSW1wb3J0UGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuRW52aXJvbm1lbnRVSU1lc3NhZ2VzOwotCi1wdWJsaWMgY2xhc3MgQW50RmlsZUltcG9ydFdpemFyZFBhZ2UgZXh0ZW5kcyBXaXphcmRSZXNvdXJjZUltcG9ydFBhZ2V7Ci0JICAKLQlwdWJsaWMgQW50RmlsZUltcG9ydFdpemFyZFBhZ2UoU3RyaW5nIHBhZ2VOYW1lLAotCSAgICAgICAgICAgIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikgewotCSAgICAgICAgc3VwZXIoIldTQW50RmlsZXNQYWdlMSIsIHNlbGVjdGlvbik7Ly8kTk9OLU5MUy0xJAotCSAgICAgICAgc2V0VGl0bGUocGFnZU5hbWUpOwkgICAgICAgIAotCSAgICAgICAgc2V0RGVzY3JpcHRpb24oRW52aXJvbm1lbnRVSU1lc3NhZ2VzLldJWkFSRF9QQUdFX0RFU0NfQU5UKTsJICAgICAgICAKLQkgICAgfQotCQotCXByb3RlY3RlZCBJVHJlZUNvbnRlbnRQcm92aWRlciBnZXRGaWxlUHJvdmlkZXIoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQkKLQlwdWJsaWMgSVBhdGggZ2V0UGF0aCgpCi0JewotCQlyZXR1cm4gZ2V0Q29udGFpbmVyRnVsbFBhdGgoKTsKLQl9Ci0JCi0JCXByb3RlY3RlZCB2b2lkIGNyZWF0ZVNvdXJjZUdyb3VwKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJCS8vZG9uJ3QgbmVlZCBzb3VyY2UgZ3JvdXAKLQkJfQotCQotCXByb3RlY3RlZCBJVHJlZUNvbnRlbnRQcm92aWRlciBnZXRGb2xkZXJQcm92aWRlcigpIHsKLQkJIHJldHVybiBudWxsOwotCX0KLQkKLQlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVPcHRpb25zR3JvdXAoQ29tcG9zaXRlIHBhcmVudCkgewotICAgICAgICAvL2VtcHR5IC0gZG9uJ3Qgd2FudCBhbiBvcHRpb25zIGdyb3VwIAotICAgIH0KLQkKLQkKLQkKLX0KLQotCi0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZGlhbG9nL0Vycm9yRGlhbG9nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2RpYWxvZy9FcnJvckRpYWxvZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYmQxYzExLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZGlhbG9nL0Vycm9yRGlhbG9nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLmRpYWxvZzsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLQotCi0vKioKLSAqIEEgZGlhbG9nIHRvIGRpc3BsYXkgb25lIG9yIG1vcmUgZXJyb3JzIHRvIHRoZSB1c2VyLCBhcyBjb250YWluZWQgaW4gYW4KLSAqIDxjb2RlPlN0YXR1czwvY29kZT4gb2JqZWN0LiBJZiBhbiBlcnJvciBjb250YWlucyBhZGRpdGlvbmFsIGRldGFpbGVkCi0gKiBpbmZvcm1hdGlvbiB0aGVuIGEgRGV0YWlscyBidXR0b24gaXMgYXV0b21hdGljYWxseSBzdXBwbGllZCwgd2hpY2ggc2hvd3Mgb3IKLSAqIGhpZGVzIGFuIGVycm9yIGRldGFpbHMgdmlld2VyIHdoZW4gcHJlc3NlZCBieSB0aGUgdXNlci4KLSAqICAKLSAqLwotcHVibGljIGNsYXNzIEVycm9yRGlhbG9nIGV4dGVuZHMgTWVzc2FnZURpYWxvZwotewotCi0gIC8qKgotICAgKiBDcmVhdGVzIGFuIGVycm9yIGRpYWxvZy4gTm90ZSB0aGF0IHRoZSBkaWFsb2cgd2lsbCBoYXZlIG5vIHZpc3VhbAotICAgKiByZXByZXNlbnRhdGlvbiAobm8gd2lkZ2V0cykgdW50aWwgaXQgaXMgdG9sZCB0byBvcGVuLgotICAgKiA8cD4KLSAgICogTm9ybWFsbHkgb25lIHNob3VsZCB1c2UgPGNvZGU+b3BlbkVycm9yPC9jb2RlPiB0byBjcmVhdGUgYW5kIG9wZW4gb25lIG9mCi0gICAqIHRoZXNlLiBUaGlzIGNvbnN0cnVjdG9yIGlzIHVzZWZ1bCBvbmx5IGlmIHRoZSBlcnJvciBvYmplY3QgYmVpbmcgZGlzcGxheWVkCi0gICAqIGNvbnRhaW5zIGNoaWxkIGl0ZW1zIDxpdD5hbmQ8L2l0PiB5b3UgbmVlZCB0byBzcGVjaWZ5IGEgbWFzayB3aGljaCB3aWxsCi0gICAqIGJlIHVzZWQgdG8gZmlsdGVyIHRoZSBkaXNwbGF5aW5nIG9mIHRoZXNlIGNoaWxkcmVuLgotICAgKiA8L3A+Ci0gICAqIAotICAgKiBAcGFyYW0gcGFyZW50U2hlbGwKLSAgICogICAgICAgICAgICB0aGUgc2hlbGwgdW5kZXIgd2hpY2ggdG8gY3JlYXRlIHRoaXMgZGlhbG9nCi0gICAqIEBwYXJhbSBkaWFsb2dUaXRsZQotICAgKiAgICAgICAgICAgIHRoZSB0aXRsZSB0byB1c2UgZm9yIHRoaXMgZGlhbG9nLCBvciA8Y29kZT5udWxsPC9jb2RlPiB0bwotICAgKiAgICAgICAgICAgIGluZGljYXRlIHRoYXQgdGhlIGRlZmF1bHQgdGl0bGUgc2hvdWxkIGJlIHVzZWQKLSAgICogQHBhcmFtIG1lc3NhZ2UKLSAgICogICAgICAgICAgICB0aGUgbWVzc2FnZSB0byBzaG93IGluIHRoaXMgZGlhbG9nLCBvciA8Y29kZT5udWxsPC9jb2RlPiB0bwotICAgKiAgICAgICAgICAgIGluZGljYXRlIHRoYXQgdGhlIGVycm9yJ3MgbWVzc2FnZSBzaG91bGQgYmUgc2hvd24gYXMgdGhlCi0gICAqICAgICAgICAgICAgcHJpbWFyeSBtZXNzYWdlCi0gICAqIEBwYXJhbSBzdGF0dXMKLSAgICogICAgICAgICAgICB0aGUgZXJyb3IgdG8gc2hvdyB0byB0aGUgdXNlcgotICAgKiBAcGFyYW0gZGlzcGxheU1hc2sKLSAgICogICAgICAgICAgICB0aGUgbWFzayB0byB1c2UgdG8gZmlsdGVyIHRoZSBkaXNwbGF5aW5nIG9mIGNoaWxkIGl0ZW1zLCBhcyBwZXIKLSAgICogICAgICAgICAgICA8Y29kZT5TdGF0dXMubWF0Y2hlczwvY29kZT4KLSAgICovCi0gIHB1YmxpYyBFcnJvckRpYWxvZygKLSAgICBTaGVsbCBwYXJlbnRTaGVsbCwKLSAgICBTdHJpbmcgZGlhbG9nVGl0bGUsCi0gICAgU3RyaW5nIG1lc3NhZ2UsCi0gICAgSVN0YXR1cyBzdGF0dXMsCi0gICAgaW50IGRpc3BsYXlNYXNrKQotICB7Ci0gICAgc3VwZXIocGFyZW50U2hlbGwsIGRpYWxvZ1RpdGxlLCBtZXNzYWdlLCBzdGF0dXMsIGRpc3BsYXlNYXNrKTsKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykgVGhpcyBzaG91bGQgYWxzbyBiZSBvdmVyd3JpdHRlbiBNZXRob2QgZGVjbGFyZWQgb24gRGlhbG9nLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlQnV0dG9uc0ZvckJ1dHRvbkJhcihDb21wb3NpdGUgcGFyZW50KQotICB7Ci0gICAgLy8gY3JlYXRlIE9LIGFuZCBEZXRhaWxzIGJ1dHRvbnMKLSAgICBjcmVhdGVCdXR0b24oCi0gICAgICBwYXJlbnQsCi0gICAgICBTdGF0dXNEaWFsb2dDb25zdGFudHMuT0tfSUQsCi0gICAgICBJRGlhbG9nQ29uc3RhbnRzLk9LX0xBQkVMLAotICAgICAgdHJ1ZSk7Ci0gICAgaWYgKHN0YXR1cy5pc011bHRpU3RhdHVzKCkgfHwgc3RhdHVzLmdldEV4Y2VwdGlvbigpICE9IG51bGwgKQotICAgIHsKLSAgICAgIGRldGFpbHNCdXR0b24gPQotICAgICAgICBjcmVhdGVCdXR0b24oCi0gICAgICAgICAgcGFyZW50LAotICAgICAgICAgIFN0YXR1c0RpYWxvZ0NvbnN0YW50cy5ERVRBSUxTX0lELAotICAgICAgICAgIElEaWFsb2dDb25zdGFudHMuU0hPV19ERVRBSUxTX0xBQkVMLAotICAgICAgICAgIGZhbHNlKTsKLSAgICB9Ci0gIH0KLQotICAvKgotICAgKiBUaGlzIGlzIG9uZSBvZiB0aGUgZmV3IG1ldGhvZHMgdGhhdCBuZWVkcyB0byBiZSBvdmVyd3JpdHRlbiBieSB0aGUKLSAgICogc3ViY2xhc3Nlcy4gVGhlIGltYWdlIG5hbWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgRGlhbG9nIGNsYXNzCi0gICAqLwotICBwcm90ZWN0ZWQgSW1hZ2UgZ2V0RGlhbG9nSW1hZ2UoKQotICB7Ci0gICAgLy8gY3JlYXRlIGltYWdlCi0gICAgcmV0dXJuIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0RGlzcGxheSgpLmdldFN5c3RlbUltYWdlKFNXVC5JQ09OX0VSUk9SKTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2RpYWxvZy9JbmZvRGlhbG9nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2RpYWxvZy9JbmZvRGlhbG9nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxMDdkYjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9kaWFsb2cvSW5mb0RpYWxvZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5kaWFsb2c7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklEaWFsb2dDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci0KLQotLyoqCi0gKiBBIGRpYWxvZyB0byBkaXNwbGF5IG9uZSBvciBtb3JlIGVycm9ycyB0byB0aGUgdXNlciwgYXMgY29udGFpbmVkIGluIGFuCi0gKiA8Y29kZT5TdGF0dXM8L2NvZGU+IG9iamVjdC4gSWYgYW4gZXJyb3IgY29udGFpbnMgYWRkaXRpb25hbCBkZXRhaWxlZAotICogaW5mb3JtYXRpb24gdGhlbiBhIERldGFpbHMgYnV0dG9uIGlzIGF1dG9tYXRpY2FsbHkgc3VwcGxpZWQsIHdoaWNoIHNob3dzIG9yCi0gKiBoaWRlcyBhbiBlcnJvciBkZXRhaWxzIHZpZXdlciB3aGVuIHByZXNzZWQgYnkgdGhlIHVzZXIuCi0gKiAgCi0gKi8KLXB1YmxpYyBjbGFzcyBJbmZvRGlhbG9nIGV4dGVuZHMgTWVzc2FnZURpYWxvZwotewotICAvKioKLSAgICogQ3JlYXRlcyBhbiBlcnJvciBkaWFsb2cuIE5vdGUgdGhhdCB0aGUgZGlhbG9nIHdpbGwgaGF2ZSBubyB2aXN1YWwKLSAgICogcmVwcmVzZW50YXRpb24gKG5vIHdpZGdldHMpIHVudGlsIGl0IGlzIHRvbGQgdG8gb3Blbi4KLSAgICogPHA+Ci0gICAqIE5vcm1hbGx5IG9uZSBzaG91bGQgdXNlIDxjb2RlPm9wZW5FcnJvcjwvY29kZT4gdG8gY3JlYXRlIGFuZCBvcGVuIG9uZSBvZgotICAgKiB0aGVzZS4gVGhpcyBjb25zdHJ1Y3RvciBpcyB1c2VmdWwgb25seSBpZiB0aGUgZXJyb3Igb2JqZWN0IGJlaW5nIGRpc3BsYXllZAotICAgKiBjb250YWlucyBjaGlsZCBpdGVtcyA8aXQ+YW5kPC9pdD4geW91IG5lZWQgdG8gc3BlY2lmeSBhIG1hc2sgd2hpY2ggd2lsbAotICAgKiBiZSB1c2VkIHRvIGZpbHRlciB0aGUgZGlzcGxheWluZyBvZiB0aGVzZSBjaGlsZHJlbi4KLSAgICogPC9wPgotICAgKiAKLSAgICogQHBhcmFtIHBhcmVudFNoZWxsCi0gICAqICAgICAgICAgICAgdGhlIHNoZWxsIHVuZGVyIHdoaWNoIHRvIGNyZWF0ZSB0aGlzIGRpYWxvZwotICAgKiBAcGFyYW0gZGlhbG9nVGl0bGUKLSAgICogICAgICAgICAgICB0aGUgdGl0bGUgdG8gdXNlIGZvciB0aGlzIGRpYWxvZywgb3IgPGNvZGU+bnVsbDwvY29kZT4gdG8KLSAgICogICAgICAgICAgICBpbmRpY2F0ZSB0aGF0IHRoZSBkZWZhdWx0IHRpdGxlIHNob3VsZCBiZSB1c2VkCi0gICAqIEBwYXJhbSBtZXNzYWdlCi0gICAqICAgICAgICAgICAgdGhlIG1lc3NhZ2UgdG8gc2hvdyBpbiB0aGlzIGRpYWxvZywgb3IgPGNvZGU+bnVsbDwvY29kZT4gdG8KLSAgICogICAgICAgICAgICBpbmRpY2F0ZSB0aGF0IHRoZSBlcnJvcidzIG1lc3NhZ2Ugc2hvdWxkIGJlIHNob3duIGFzIHRoZQotICAgKiAgICAgICAgICAgIHByaW1hcnkgbWVzc2FnZQotICAgKiBAcGFyYW0gc3RhdHVzCi0gICAqICAgICAgICAgICAgdGhlIGVycm9yIHRvIHNob3cgdG8gdGhlIHVzZXIKLSAgICogQHBhcmFtIGRpc3BsYXlNYXNrCi0gICAqICAgICAgICAgICAgdGhlIG1hc2sgdG8gdXNlIHRvIGZpbHRlciB0aGUgZGlzcGxheWluZyBvZiBjaGlsZCBpdGVtcywgYXMgcGVyCi0gICAqICAgICAgICAgICAgPGNvZGU+U3RhdHVzLm1hdGNoZXM8L2NvZGU+Ci0gICAqLwotICBwdWJsaWMgSW5mb0RpYWxvZygKLSAgICBTaGVsbCBwYXJlbnRTaGVsbCwKLSAgICBTdHJpbmcgZGlhbG9nVGl0bGUsCi0gICAgU3RyaW5nIG1lc3NhZ2UsCi0gICAgSVN0YXR1cyBzdGF0dXMsCi0gICAgaW50IGRpc3BsYXlNYXNrKQotICB7Ci0gICAgc3VwZXIocGFyZW50U2hlbGwsIGRpYWxvZ1RpdGxlLCBtZXNzYWdlLCBzdGF0dXMsIGRpc3BsYXlNYXNrKTsKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykgVGhpcyBzaG91bGQgYWxzbyBiZSBvdmVyd3JpdHRlbiBNZXRob2QgZGVjbGFyZWQgb24gRGlhbG9nLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlQnV0dG9uc0ZvckJ1dHRvbkJhcihDb21wb3NpdGUgcGFyZW50KQotICB7Ci0gICAgLy8gY3JlYXRlIE9LIGFuZCBEZXRhaWxzIGJ1dHRvbnMKLSAgICBjcmVhdGVCdXR0b24oCi0gICAgICBwYXJlbnQsCi0gICAgICBTdGF0dXNEaWFsb2dDb25zdGFudHMuT0tfSUQsCi0gICAgICBJRGlhbG9nQ29uc3RhbnRzLk9LX0xBQkVMLAotICAgICAgdHJ1ZSk7Ci0gICAgaWYgKHN0YXR1cy5pc011bHRpU3RhdHVzKCkgKQotICAgIHsKLSAgICAgIGRldGFpbHNCdXR0b24gPQotICAgICAgICBjcmVhdGVCdXR0b24oCi0gICAgICAgICAgcGFyZW50LAotICAgICAgICAgIFN0YXR1c0RpYWxvZ0NvbnN0YW50cy5ERVRBSUxTX0lELAotICAgICAgICAgIElEaWFsb2dDb25zdGFudHMuU0hPV19ERVRBSUxTX0xBQkVMLAotICAgICAgICAgIGZhbHNlKTsKLSAgICB9Ci0gIH0KLQotICAvKgotICAgKiBUaGlzIGlzIG9uZSBvZiB0aGUgZmV3IG1ldGhvZHMgdGhhdCBuZWVkcyB0byBiZSBvdmVyd3JpdHRlbiBieSB0aGUKLSAgICogc3ViY2xhc3Nlcy4gVGhlIGltYWdlIG5hbWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgRGlhbG9nIGNsYXNzCi0gICAqLwotICBwcm90ZWN0ZWQgSW1hZ2UgZ2V0RGlhbG9nSW1hZ2UoKQotICB7Ci0gICAgLy8gY3JlYXRlIGltYWdlCi0gICAgcmV0dXJuIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0RGlzcGxheSgpLmdldFN5c3RlbUltYWdlKFNXVC5JQ09OX0lORk9STUFUSU9OKTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2RpYWxvZy9NZXNzYWdlRGlhbG9nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2RpYWxvZy9NZXNzYWdlRGlhbG9nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkYWY3MjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9kaWFsb2cvTWVzc2FnZURpYWxvZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTg1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDUwNCAgIDEyODk4NCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLmRpYWxvZzsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5KRmFjZVJlc291cmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Db2xvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29tbW9uLlN0cmluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuQ2hvaWNlOwotCi0KLS8qKgotICogQSBkaWFsb2cgdG8gZGlzcGxheSBvbmUgb3IgbW9yZSBlcnJvcnMgdG8gdGhlIHVzZXIsIGFzIGNvbnRhaW5lZCBpbiBhbgotICogPGNvZGU+U3RhdHVzPC9jb2RlPiBvYmplY3QuIElmIGFuIGVycm9yIGNvbnRhaW5zIGFkZGl0aW9uYWwgZGV0YWlsZWQKLSAqIGluZm9ybWF0aW9uIHRoZW4gYSBEZXRhaWxzIGJ1dHRvbiBpcyBhdXRvbWF0aWNhbGx5IHN1cHBsaWVkLCB3aGljaCBzaG93cyBvcgotICogaGlkZXMgYW4gZXJyb3IgZGV0YWlscyB2aWV3ZXIgd2hlbiBwcmVzc2VkIGJ5IHRoZSB1c2VyLgotICogIAotICovCi1wdWJsaWMgY2xhc3MgTWVzc2FnZURpYWxvZyBleHRlbmRzIERpYWxvZwotewotICBwcm90ZWN0ZWQgQ29tcG9zaXRlIHBhcmVudDsKLQotICAvKioKLSAgICogUmVzZXJ2ZSByb29tIGZvciB0aGlzIG1hbnkgbGlzdCBpdGVtcy4KLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IExJU1RfSVRFTV9DT1VOVCA9IDc7Ci0KLSAgLyoqCi0gICAqIFRoZSBEZXRhaWxzIGJ1dHRvbi4KLSAgICovCi0gIHByb3RlY3RlZCBCdXR0b24gZGV0YWlsc0J1dHRvbjsKLQotICAvKioKLSAgICogVGhlIHRpdGxlIG9mIHRoZSBkaWFsb2cuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIHRpdGxlOwotCi0gIC8qKgotICAgKiBUaGUgbWVzc2FnZSB0byBkaXNwbGF5LgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBtZXNzYWdlOwotCi0gIC8qKgotICAgKiBUaGUgU1dUIGxpc3QgY29udHJvbCB0aGF0IGRpc3BsYXlzIHRoZSBlcnJvciBkZXRhaWxzLgotICAgKi8KLSAgcHJvdGVjdGVkIExpc3QgbGlzdDsKLSAgcHJvdGVjdGVkIFRleHQgZGV0YWlsczsKLQotICAvKioKLSAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGVycm9yIGRldGFpbHMgdmlld2VyIGlzIGN1cnJlbnRseSBjcmVhdGVkLgotICAgKi8KLSAgcHJvdGVjdGVkIGJvb2xlYW4gbGlzdENyZWF0ZWQgPSBmYWxzZTsKLSAgcHJvdGVjdGVkIGJvb2xlYW4gZGV0YWlsc0NyZWF0ZWQgPSBmYWxzZTsKLQotICAvKioKLSAgICogRmlsdGVyIG1hc2sgZm9yIGRldGVybWluaW5nIHdoaWNoIHN0YXR1cyBpdGVtcyB0byBkaXNwbGF5LgotICAgKi8KLSAgcHJvdGVjdGVkIGludCBkaXNwbGF5TWFzayA9IDB4RkZGRjsKLQotICAvKioKLSAgICogVGhlIG1haW4gc3RhdHVzIG9iamVjdC4KLSAgICovCi0gIHByb3RlY3RlZCBJU3RhdHVzIHN0YXR1czsKLSAgCi0gIHByaXZhdGUgUG9pbnQgc2F2ZWRTaXplID0gbnVsbDsKLQotICAvKioKLSAgICogTGlzdCBvZiB0aGUgbWFpbiBlcnJvciBvYmplY3QncyBkZXRhaWxlZCBlcnJvcnMgKGVsZW1lbnQgdHlwZTogPGNvZGU+U3RhdHVzPC9jb2RlPikuCi0gICAqLwotICBwcm90ZWN0ZWQgamF2YS51dGlsLkxpc3Qgc3RhdHVzTGlzdDsKLSAgLyoqCi0gICAqIENyZWF0ZXMgYW4gZXJyb3IgZGlhbG9nLiBOb3RlIHRoYXQgdGhlIGRpYWxvZyB3aWxsIGhhdmUgbm8gdmlzdWFsCi0gICAqIHJlcHJlc2VudGF0aW9uIChubyB3aWRnZXRzKSB1bnRpbCBpdCBpcyB0b2xkIHRvIG9wZW4uCi0gICAqIDxwPgotICAgKiBOb3JtYWxseSBvbmUgc2hvdWxkIHVzZSA8Y29kZT5vcGVuRXJyb3I8L2NvZGU+IHRvIGNyZWF0ZSBhbmQgb3BlbiBvbmUgb2YKLSAgICogdGhlc2UuIFRoaXMgY29uc3RydWN0b3IgaXMgdXNlZnVsIG9ubHkgaWYgdGhlIGVycm9yIG9iamVjdCBiZWluZyBkaXNwbGF5ZWQKLSAgICogY29udGFpbnMgY2hpbGQgaXRlbXMgPGl0PmFuZDwvaXQ+IHlvdSBuZWVkIHRvIHNwZWNpZnkgYSBtYXNrIHdoaWNoIHdpbGwKLSAgICogYmUgdXNlZCB0byBmaWx0ZXIgdGhlIGRpc3BsYXlpbmcgb2YgdGhlc2UgY2hpbGRyZW4uCi0gICAqIDwvcD4KLSAgICogCi0gICAqIEBwYXJhbSBwYXJlbnRTaGVsbAotICAgKiAgICAgICAgICAgIHRoZSBzaGVsbCB1bmRlciB3aGljaCB0byBjcmVhdGUgdGhpcyBkaWFsb2cKLSAgICogQHBhcmFtIGRpYWxvZ1RpdGxlCi0gICAqICAgICAgICAgICAgdGhlIHRpdGxlIHRvIHVzZSBmb3IgdGhpcyBkaWFsb2csIG9yIDxjb2RlPm51bGw8L2NvZGU+IHRvCi0gICAqICAgICAgICAgICAgaW5kaWNhdGUgdGhhdCB0aGUgZGVmYXVsdCB0aXRsZSBzaG91bGQgYmUgdXNlZAotICAgKiBAcGFyYW0gbWVzc2FnZQotICAgKiAgICAgICAgICAgIHRoZSBtZXNzYWdlIHRvIHNob3cgaW4gdGhpcyBkaWFsb2csIG9yIDxjb2RlPm51bGw8L2NvZGU+IHRvCi0gICAqICAgICAgICAgICAgaW5kaWNhdGUgdGhhdCB0aGUgZXJyb3IncyBtZXNzYWdlIHNob3VsZCBiZSBzaG93biBhcyB0aGUKLSAgICogICAgICAgICAgICBwcmltYXJ5IG1lc3NhZ2UKLSAgICogQHBhcmFtIHN0YXR1cwotICAgKiAgICAgICAgICAgIHRoZSBlcnJvciB0byBzaG93IHRvIHRoZSB1c2VyCi0gICAqIEBwYXJhbSBkaXNwbGF5TWFzawotICAgKiAgICAgICAgICAgIHRoZSBtYXNrIHRvIHVzZSB0byBmaWx0ZXIgdGhlIGRpc3BsYXlpbmcgb2YgY2hpbGQgaXRlbXMsIGFzIHBlcgotICAgKiAgICAgICAgICAgIDxjb2RlPlN0YXR1cy5tYXRjaGVzPC9jb2RlPgotICAgKi8KLSAgcHVibGljIE1lc3NhZ2VEaWFsb2coCi0gICAgU2hlbGwgcGFyZW50U2hlbGwsCi0gICAgU3RyaW5nIGRpYWxvZ1RpdGxlLAotICAgIFN0cmluZyBtZXNzYWdlLAotICAgIElTdGF0dXMgc3RhdHVzLAotICAgIGludCBkaXNwbGF5TWFzaykKLSAgewotICAgIHN1cGVyKHBhcmVudFNoZWxsKTsKLSAgICAgIHRoaXMudGl0bGUgPSBkaWFsb2dUaXRsZSA9PSBudWxsID8gSkZhY2VSZXNvdXJjZXMuZ2V0U3RyaW5nKCJQcm9ibGVtX09jY3VycmVkIikgOiAvLyROT04tTkxTLTEkCi0gIGRpYWxvZ1RpdGxlOwotICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgPT0gbnVsbCA/IHN0YXR1cy5nZXRNZXNzYWdlKCkgOiBKRmFjZVJlc291cmNlcy5mb3JtYXQoIlJlYXNvbiIsIG5ldyBPYmplY3RbXSB7IG1lc3NhZ2UsIHN0YXR1cy5nZXRNZXNzYWdlKCl9KTsgLy8kTk9OLU5MUy0xJAotICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzOwotICAgIHN0YXR1c0xpc3QgPSBBcnJheXMuYXNMaXN0KHN0YXR1cy5nZXRDaGlsZHJlbigpKTsKLSAgICB0aGlzLmRpc3BsYXlNYXNrID0gZGlzcGxheU1hc2s7Ci0gICAgc2V0U2hlbGxTdHlsZShTV1QuRElBTE9HX1RSSU0gfCBTV1QuUkVTSVpFIHwgU1dULkFQUExJQ0FUSU9OX01PREFMKTsKLSAgfQotICAvKgotICAgKiAobm9uLUphdmFkb2MpIE1ldGhvZCBkZWNsYXJlZCBvbiBEaWFsb2cuIEhhbmRsZXMgdGhlIHByZXNzaW5nIG9mIHRoZSBPayBvcgotICAgKiBEZXRhaWxzIGJ1dHRvbiBpbiB0aGlzIGRpYWxvZy4gSWYgdGhlIE9rIGJ1dHRvbiB3YXMgcHJlc3NlZCB0aGVuIGNsb3NlCi0gICAqIHRoaXMgZGlhbG9nLiBJZiB0aGUgRGV0YWlscyBidXR0b24gd2FzIHByZXNzZWQgdGhlbiB0b2dnbGUgdGhlIGRpc3BsYXlpbmcKLSAgICogb2YgdGhlIGVycm9yIGRldGFpbHMgYXJlYS4gTm90ZSB0aGF0IHRoZSBEZXRhaWxzIGJ1dHRvbiB3aWxsIG9ubHkgYmUKLSAgICogdmlzaWJsZSBpZiB0aGUgZXJyb3IgYmVpbmcgZGlzcGxheWVkIHNwZWNpZmllcyBjaGlsZCBkZXRhaWxzLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgYnV0dG9uUHJlc3NlZChpbnQgaWQpCi0gIHsKLSAgICBpZiAoaWQgPT0gU3RhdHVzRGlhbG9nQ29uc3RhbnRzLkRFVEFJTFNfSUQpCi0gICAgeyAvLyB3YXMgdGhlIGRldGFpbHMgYnV0dG9uIHByZXNzZWQ/Ci0gICAgICB0b2dnbGVEZXRhaWxzQXJlYSgpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgc3VwZXIuYnV0dG9uUHJlc3NlZChpZCk7Ci0gICAgfQotICB9Ci0gIC8qCi0gICAqIChub24tSmF2YWRvYykgTWV0aG9kIGRlY2xhcmVkIGluIFdpbmRvdy4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGNvbmZpZ3VyZVNoZWxsKFNoZWxsIHNoZWxsKQotICB7Ci0gICAgc3VwZXIuY29uZmlndXJlU2hlbGwoc2hlbGwpOwotICAgIHNoZWxsLnNldFRleHQodGl0bGUpOwotICB9Ci0gIC8qCi0gICAqIChub24tSmF2YWRvYykgVGhpcyBzaG91bGQgYWxzbyBiZSBvdmVyd3JpdHRlbiBNZXRob2QgZGVjbGFyZWQgb24gRGlhbG9nLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlQnV0dG9uc0ZvckJ1dHRvbkJhcihDb21wb3NpdGUgcGFyZW50KQotICB7Ci0gICAgLy8gY3JlYXRlIE9LIGFuZCBEZXRhaWxzIGJ1dHRvbnMKLSAgICBjcmVhdGVCdXR0b24oCi0gICAgICBwYXJlbnQsCi0gICAgICBTdGF0dXNEaWFsb2dDb25zdGFudHMuT0tfSUQsCi0gICAgICBJRGlhbG9nQ29uc3RhbnRzLk9LX0xBQkVMLAotICAgICAgdHJ1ZSk7Ci0gICAgaWYgKHN0YXR1cy5pc011bHRpU3RhdHVzKCkgfHwgc3RhdHVzLmdldEV4Y2VwdGlvbigpICE9IG51bGwgKQotICAgIHsKLSAgICAgIGRldGFpbHNCdXR0b24gPQotICAgICAgICBjcmVhdGVCdXR0b24oCi0gICAgICAgICAgcGFyZW50LAotICAgICAgICAgIFN0YXR1c0RpYWxvZ0NvbnN0YW50cy5ERVRBSUxTX0lELAotICAgICAgICAgIElEaWFsb2dDb25zdGFudHMuU0hPV19ERVRBSUxTX0xBQkVMLAotICAgICAgICAgIGZhbHNlKTsKLSAgICB9Ci0gICAgCi0gICAgcGFyZW50LnNldExheW91dERhdGEoIG5ldyBHcmlkRGF0YSggR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMICkpOwotICB9Ci0KLSAgLyoKLSAgICogVGhpcyBpcyBvbmUgb2YgdGhlIGZldyBtZXRob2RzIHRoYXQgbmVlZHMgdG8gYmUgb3ZlcndyaXR0ZW4gYnkgdGhlCi0gICAqIHN1YmNsYXNzZXMuIFRoZSBpbWFnZSBuYW1lcyBjYW4gYmUgZm91bmQgaW4gdGhlIERpYWxvZyBjbGFzcwotICAgKi8KLSAgcHJvdGVjdGVkIEltYWdlIGdldERpYWxvZ0ltYWdlKCkKLSAgewotICAgIC8vIGNyZWF0ZSBpbWFnZQotICAgIHJldHVybiBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldERpc3BsYXkoKS5nZXRTeXN0ZW1JbWFnZShTV1QuSUNPTl9JTkZPUk1BVElPTik7Ci0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpIE1ldGhvZCBkZWNsYXJlZCBvbiBEaWFsb2cuIENyZWF0ZXMgYW5kIHJldHVybnMgdGhlIGNvbnRlbnRzCi0gICAqIG9mIHRoZSB1cHBlciBwYXJ0IG9mIHRoZSBkaWFsb2cgKGFib3ZlIHRoZSBidXR0b24gYmFyKS4KLSAgICovCi0gIHByb3RlY3RlZCBDb250cm9sIGNyZWF0ZURpYWxvZ0FyZWEoQ29tcG9zaXRlIHBhcmVudCkKLSAgewotICAgIHRoaXMucGFyZW50ID0gcGFyZW50OwotCi0gICAgLy8gY3JlYXRlIGNvbXBvc2l0ZQotICAgIENvbXBvc2l0ZSBjb21wb3NpdGUgPSAoQ29tcG9zaXRlKSBzdXBlci5jcmVhdGVEaWFsb2dBcmVhKHBhcmVudCk7Ci0gICAgQ29tcG9zaXRlIGltYWdlQW5kTGFiZWwgPSBuZXcgQ29tcG9zaXRlKGNvbXBvc2l0ZSwgU1dULk5PTkUpOwotICAgIEdyaWRMYXlvdXQgZ2wgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGdsLm51bUNvbHVtbnMgPSAyOwotICAgIGltYWdlQW5kTGFiZWwuc2V0TGF5b3V0KGdsKTsKLSAgICBpbWFnZUFuZExhYmVsLnNldExheW91dERhdGEoIG5ldyBHcmlkRGF0YSggR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMICkgKTsKLSAgICBjb21wb3NpdGUuc2V0TGF5b3V0RGF0YSggbmV3IEdyaWREYXRhKCBHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwgKSk7Ci0gICAgCi0gICAgLy8gY3JlYXRlIGltYWdlCi0gICAgSW1hZ2UgaW1hZ2UgPSBnZXREaWFsb2dJbWFnZSgpOwotICAgIGlmIChpbWFnZSAhPSBudWxsKQotICAgIHsKLSAgICAgIExhYmVsIGxhYmVsID0gbmV3IExhYmVsKGltYWdlQW5kTGFiZWwsIDApOwotICAgICAgaW1hZ2Uuc2V0QmFja2dyb3VuZChsYWJlbC5nZXRCYWNrZ3JvdW5kKCkpOwotICAgICAgbGFiZWwuc2V0SW1hZ2UoaW1hZ2UpOwotICAgICAgbGFiZWwuc2V0TGF5b3V0RGF0YSgKLSAgICAgICAgbmV3IEdyaWREYXRhKAotICAgICAgICAgIEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fQ0VOVEVSCi0gICAgICAgICAgICB8IEdyaWREYXRhLlZFUlRJQ0FMX0FMSUdOX0JFR0lOTklORykpOwotICAgIH0KLQotICAgIC8vIGNyZWF0ZSBtZXNzYWdlCi0gICAgaWYgKG1lc3NhZ2UgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBUZXh0IHRleHQgPSBuZXcgVGV4dChpbWFnZUFuZExhYmVsLCBTV1QuUkVBRF9PTkxZfFNXVC5XUkFQKTsKLSAgICAgIHRleHQuc2V0VGV4dChtZXNzYWdlKTsKLSAgICAgIEdyaWREYXRhIGRhdGEgPQotICAgICAgICBuZXcgR3JpZERhdGEoCi0gICAgICAgICAgR3JpZERhdGEuR1JBQl9IT1JJWk9OVEFMCi0gICAgICAgICAgICB8IEdyaWREYXRhLkdSQUJfVkVSVElDQUwKLSAgICAgICAgICAgIHwgR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMCi0gICAgICAgICAgICB8IEdyaWREYXRhLlZFUlRJQ0FMX0FMSUdOX0NFTlRFUik7Ci0gICAgICBkYXRhLndpZHRoSGludCA9Ci0gICAgICAgIGNvbnZlcnRIb3Jpem9udGFsRExVc1RvUGl4ZWxzKAotICAgICAgICAgIElEaWFsb2dDb25zdGFudHMuTUlOSU1VTV9NRVNTQUdFX0FSRUFfV0lEVEgpOwotICAgICAKLSAgICAgIHRleHQuc2V0TGF5b3V0RGF0YShkYXRhKTsKLSAgICAgIHRleHQuc2V0Rm9udChwYXJlbnQuZ2V0Rm9udCgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gY29tcG9zaXRlOwotICB9Ci0KLSAgcHJvdGVjdGVkIExpc3QgY3JlYXRlRHJvcERvd25MaXN0KENvbXBvc2l0ZSBwYXJlbnQpCi0gIHsKLSAgICAvLyBjcmVhdGUgdGhlIGxpc3QKLSAgICBsaXN0ID0gbmV3IExpc3QocGFyZW50LCBTV1QuQk9SREVSIHwgU1dULkhfU0NST0xMIHwgU1dULlZfU0NST0xMKTsKLQotICAgIC8vIGZpbGwgdGhlIGxpc3QKLSAgICBwb3B1bGF0ZUxpc3QobGlzdCk7Ci0KLSAgICBHcmlkRGF0YSBkYXRhID0KLSAgICAgIG5ldyBHcmlkRGF0YSgKLSAgICAgICAgR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMCi0gICAgICAgICAgfCBHcmlkRGF0YS5HUkFCX0hPUklaT05UQUwKLSAgICAgICAgICB8IEdyaWREYXRhLlZFUlRJQ0FMX0FMSUdOX0ZJTEwKLSAgICAgICAgICB8IEdyaWREYXRhLkdSQUJfVkVSVElDQUwpOwotICAgIGRhdGEuaGVpZ2h0SGludCA9IGxpc3QuZ2V0SXRlbUhlaWdodCgpICogTElTVF9JVEVNX0NPVU5UOwotICAgIGxpc3Quc2V0TGF5b3V0RGF0YShkYXRhKTsKLSAgICBsaXN0Q3JlYXRlZCA9IHRydWU7Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLSAgcHJvdGVjdGVkIFRleHQgY3JlYXRlRHJvcERvd25EZXRhaWxzKENvbXBvc2l0ZSBwYXJlbnQpCi0gIHsKLSAgICBkZXRhaWxzID0gbmV3IFRleHQocGFyZW50LCBTV1QuQk9SREVSIHwgU1dULkhfU0NST0xMIHwgU1dULlZfU0NST0xMIHwgU1dULlJFQURfT05MWSB8IFNXVC5XUkFQICk7Ci0gICAgLy9kZXRhaWxzLnNldEVkaXRhYmxlKGZhbHNlKTsKLSAgICBDb2xvciBjb2xvciA9IHBhcmVudC5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5nZXRTeXN0ZW1Db2xvciggU1dULkNPTE9SX1dISVRFICk7Ci0gICAgZGV0YWlscy5zZXRCYWNrZ3JvdW5kKGNvbG9yKTsKLSAgICBwb3B1bGF0ZURldGFpbHMoZGV0YWlscywgc3RhdHVzLCAwKTsKLSAgICBHcmlkRGF0YSBkYXRhID0KLSAgICAgIG5ldyBHcmlkRGF0YSgKLSAgICAgICAgR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMCi0gICAgICAgICAgfCBHcmlkRGF0YS5HUkFCX0hPUklaT05UQUwKLSAgICAgICAgICB8IEdyaWREYXRhLlZFUlRJQ0FMX0FMSUdOX0ZJTEwKLSAgICAgICAgICB8IEdyaWREYXRhLkdSQUJfVkVSVElDQUwpOwotICAgIAotICAgIGRldGFpbHMuc2V0TGF5b3V0RGF0YShkYXRhKTsKLSAgICBkZXRhaWxzLnNldFNlbGVjdGlvbigwKTsKLSAgICBkZXRhaWxzQ3JlYXRlZCA9IHRydWU7Ci0gICAgcmV0dXJuIGRldGFpbHM7Ci0gIH0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKSBNZXRob2QgZGVjbGFyZWQgb24gV2luZG93LgotICAgKi8KLSAgLyoqCi0gICAqIEV4dGVuZHMgPGNvZGU+V2luZG93Lm9wZW4oKTwvY29kZT4uIE9wZW5zIGFuIGVycm9yIGRpYWxvZyB0byBkaXNwbGF5Ci0gICAqIHRoZSBlcnJvci4gSWYgeW91IHNwZWNpZmllZCBhIG1hc2sgdG8gZmlsdGVyIHRoZSBkaXNwbGF5aW5nIG9mIHRoZXNlCi0gICAqIGNoaWxkcmVuLCB0aGUgZXJyb3IgZGlhbG9nIHdpbGwgb25seSBiZSBkaXNwbGF5ZWQgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lCi0gICAqIGNoaWxkIHN0YXR1cyBtYXRjaGluZyB0aGUgbWFzay4KLSAgICovCi0gIHB1YmxpYyBpbnQgb3BlbigpCi0gIHsKLSAgICBpZiAoc2hvdWxkRGlzcGxheShzdGF0dXMsIGRpc3BsYXlNYXNrKSkKLSAgICB7Ci0gICAgICByZXR1cm4gc3VwZXIub3BlbigpOwotICAgIH0KLSAgICByZXR1cm4gMDsKLSAgfQotICAvKioKLSAgICogVGhpcyBlc3NlbnRpYWxseSBkb2VzIHRoZSB3b3JrIG9mIGEgZmFjdG9yeSBPcGVucyBhbiBlcnJvciBkaWFsb2cgdG8KLSAgICogZGlzcGxheSB0aGUgZ2l2ZW4gZXJyb3IuIFVzZSB0aGlzIG1ldGhvZCBpZiB0aGUgZXJyb3Igb2JqZWN0IGJlaW5nCi0gICAqIGRpc3BsYXllZCBkb2VzIG5vdCBjb250YWluIGNoaWxkIGl0ZW1zLCBvciBpZiB5b3Ugd2lzaCB0byBkaXNwbGF5IGFsbCBzdWNoCi0gICAqIGl0ZW1zIHdpdGhvdXQgZmlsdGVyaW5nLgotICAgKiAKLSAgICogQHBhcmFtIHBhcmVudAotICAgKiAgICAgICAgICAgIHRoZSBwYXJlbnQgc2hlbGwgb2YgdGhlIGRpYWxvZywgb3IgPGNvZGU+bnVsbDwvY29kZT4gaWYgbm9uZQotICAgKiBAcGFyYW0gZGlhbG9nVGl0bGUKLSAgICogICAgICAgICAgICB0aGUgdGl0bGUgdG8gdXNlIGZvciB0aGlzIGRpYWxvZywgb3IgPGNvZGU+bnVsbDwvY29kZT4gdG8KLSAgICogICAgICAgICAgICBpbmRpY2F0ZSB0aGF0IHRoZSBkZWZhdWx0IHRpdGxlIHNob3VsZCBiZSB1c2VkCi0gICAqIEBwYXJhbSBtZXNzYWdlCi0gICAqICAgICAgICAgICAgdGhlIG1lc3NhZ2UgdG8gc2hvdyBpbiB0aGlzIGRpYWxvZywgb3IgPGNvZGU+bnVsbDwvY29kZT4gdG8KLSAgICogICAgICAgICAgICBpbmRpY2F0ZSB0aGF0IHRoZSBlcnJvcidzIG1lc3NhZ2Ugc2hvdWxkIGJlIHNob3duIGFzIHRoZQotICAgKiAgICAgICAgICAgIHByaW1hcnkgbWVzc2FnZQotICAgKiBAcGFyYW0gc3RhdHVzCi0gICAqICAgICAgICAgICAgdGhlIGVycm9yIHRvIHNob3cgdG8gdGhlIHVzZXIKLSAgICogQHJldHVybiB0aGUgY29kZSBvZiB0aGUgYnV0dG9uIHRoYXQgd2FzIHByZXNzZWQgdGhhdCByZXN1bHRlZCBpbiB0aGlzCi0gICAqICAgICAgICAgZGlhbG9nIGNsb3NpbmcuIFRoaXMgd2lsbCBiZSA8Y29kZT5EaWFsb2cuT0s8L2NvZGU+IGlmIHRoZSBPSwotICAgKiAgICAgICAgIGJ1dHRvbiB3YXMgcHJlc3NlZCwgb3IgPGNvZGU+RGlhbG9nLkNBTkNFTDwvY29kZT4gaWYgdGhpcwotICAgKiAgICAgICAgIGRpYWxvZydzIGNsb3NlIHdpbmRvdyBkZWNvcmF0aW9uIG9yIHRoZSBFU0Mga2V5IHdhcyB1c2VkLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBpbnQgb3Blbk1lc3NhZ2UoCi0gICAgU2hlbGwgcGFyZW50LAotICAgIFN0cmluZyBkaWFsb2dUaXRsZSwKLSAgICBTdHJpbmcgbWVzc2FnZSwKLSAgICBJU3RhdHVzIHN0YXR1cykKLSAgewotCi0gICAgc3dpdGNoIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSkKLSAgICB7Ci0gICAgICBjYXNlIElTdGF0dXMuSU5GTyA6Ci0gICAgICAgIHJldHVybiBvcGVuSW5mbygKLSAgICAgICAgICBwYXJlbnQsCi0gICAgICAgICAgZGlhbG9nVGl0bGUsCi0gICAgICAgICAgbWVzc2FnZSwKLSAgICAgICAgICBzdGF0dXMsCi0gICAgICAgICAgSVN0YXR1cy5PSyB8IElTdGF0dXMuSU5GTyB8IElTdGF0dXMuV0FSTklORyB8IElTdGF0dXMuRVJST1IpOwotICAgICAgY2FzZSBJU3RhdHVzLldBUk5JTkcgOgotICAgICAgICByZXR1cm4gb3Blbldhcm5pbmcoCi0gICAgICAgICAgcGFyZW50LAotICAgICAgICAgIGRpYWxvZ1RpdGxlLAotICAgICAgICAgIG1lc3NhZ2UsCi0gICAgICAgICAgc3RhdHVzLAotICAgICAgICAgIElTdGF0dXMuT0sgfCBJU3RhdHVzLklORk8gfCBJU3RhdHVzLldBUk5JTkcgfCBJU3RhdHVzLkVSUk9SKTsKLSAgICAgIGRlZmF1bHQgOgotICAgICAgICByZXR1cm4gb3BlbkVycm9yKAotICAgICAgICAgIHBhcmVudCwKLSAgICAgICAgICBkaWFsb2dUaXRsZSwKLSAgICAgICAgICBtZXNzYWdlLAotICAgICAgICAgIHN0YXR1cywKLSAgICAgICAgICBJU3RhdHVzLk9LIHwgSVN0YXR1cy5JTkZPIHwgSVN0YXR1cy5XQVJOSU5HIHwgSVN0YXR1cy5FUlJPUik7Ci0gICAgfQotCi0gIH0KLQotICBwdWJsaWMgc3RhdGljIGludCBvcGVuTWVzc2FnZSgKLSAgICBTaGVsbCBwYXJlbnQsCi0gICAgU3RyaW5nIGRpYWxvZ1RpdGxlLAotICAgIFN0cmluZyBtZXNzYWdlLAotICAgIElTdGF0dXMgc3RhdHVzLAotICAgIENob2ljZVtdIG9wdGlvbnMpCi0gIHsKLQotICAgIHJldHVybiBvcGVuT3B0aW9ucygKLSAgICAgIHBhcmVudCwKLSAgICAgIGRpYWxvZ1RpdGxlLAotICAgICAgbWVzc2FnZSwKLSAgICAgIHN0YXR1cywKLSAgICAgIElTdGF0dXMuT0sgfCBJU3RhdHVzLklORk8gfCBJU3RhdHVzLldBUk5JTkcgfCBJU3RhdHVzLkVSUk9SLAotICAgICAgb3B0aW9ucyk7Ci0gIH0KLQotICAvKioKLSAgICogT3BlbnMgYW4gZXJyb3IgZGlhbG9nIHRvIGRpc3BsYXkgdGhlIGdpdmVuIGVycm9yLiBVc2UgdGhpcyBtZXRob2QgaWYgdGhlCi0gICAqIGVycm9yIG9iamVjdCBiZWluZyBkaXNwbGF5ZWQgY29udGFpbnMgY2hpbGQgaXRlbXMgPGl0PmFuZDwvaXQ+IHlvdSB3aXNoCi0gICAqIHRvIHNwZWNpZnkgYSBtYXNrIHdoaWNoIHdpbGwgYmUgdXNlZCB0byBmaWx0ZXIgdGhlIGRpc3BsYXlpbmcgb2YgdGhlc2UKLSAgICogY2hpbGRyZW4uIFRoZSBlcnJvciBkaWFsb2cgd2lsbCBvbmx5IGJlIGRpc3BsYXllZCBpZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUKLSAgICogY2hpbGQgc3RhdHVzIG1hdGNoaW5nIHRoZSBtYXNrLgotICAgKiAKLSAgICogQHBhcmFtIHBhcmVudFNoZWxsCi0gICAqICAgICAgICAgICAgdGhlIHBhcmVudCBzaGVsbCBvZiB0aGUgZGlhbG9nLCBvciA8Y29kZT5udWxsPC9jb2RlPiBpZiBub25lCi0gICAqIEBwYXJhbSBkaWFsb2dUaXRsZQotICAgKiAgICAgICAgICAgIHRoZSB0aXRsZSB0byB1c2UgZm9yIHRoaXMgZGlhbG9nLCBvciA8Y29kZT5udWxsPC9jb2RlPiB0bwotICAgKiAgICAgICAgICAgIGluZGljYXRlIHRoYXQgdGhlIGRlZmF1bHQgdGl0bGUgc2hvdWxkIGJlIHVzZWQKLSAgICogQHBhcmFtIG1lc3NhZ2UKLSAgICogICAgICAgICAgICB0aGUgbWVzc2FnZSB0byBzaG93IGluIHRoaXMgZGlhbG9nLCBvciA8Y29kZT5udWxsPC9jb2RlPiB0bwotICAgKiAgICAgICAgICAgIGluZGljYXRlIHRoYXQgdGhlIGVycm9yJ3MgbWVzc2FnZSBzaG91bGQgYmUgc2hvd24gYXMgdGhlCi0gICAqICAgICAgICAgICAgcHJpbWFyeSBtZXNzYWdlCi0gICAqIEBwYXJhbSBzdGF0dXMKLSAgICogICAgICAgICAgICB0aGUgZXJyb3IgdG8gc2hvdyB0byB0aGUgdXNlcgotICAgKiBAcGFyYW0gZGlzcGxheU1hc2sKLSAgICogICAgICAgICAgICB0aGUgbWFzayB0byB1c2UgdG8gZmlsdGVyIHRoZSBkaXNwbGF5aW5nIG9mIGNoaWxkIGl0ZW1zLCBhcyBwZXIKLSAgICogICAgICAgICAgICA8Y29kZT5TdGF0dXMubWF0Y2hlczwvY29kZT4KLSAgICogQHJldHVybiB0aGUgY29kZSBvZiB0aGUgYnV0dG9uIHRoYXQgd2FzIHByZXNzZWQgdGhhdCByZXN1bHRlZCBpbiB0aGlzCi0gICAqICAgICAgICAgZGlhbG9nIGNsb3NpbmcuIFRoaXMgd2lsbCBiZSA8Y29kZT5EaWFsb2cuT0s8L2NvZGU+IGlmIHRoZSBPSwotICAgKiAgICAgICAgIGJ1dHRvbiB3YXMgcHJlc3NlZCwgb3IgPGNvZGU+RGlhbG9nLkNBTkNFTDwvY29kZT4gaWYgdGhpcwotICAgKiAgICAgICAgIGRpYWxvZydzIGNsb3NlIHdpbmRvdyBkZWNvcmF0aW9uIG9yIHRoZSBFU0Mga2V5IHdhcyB1c2VkLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBpbnQgb3BlbkVycm9yKAotICAgIFNoZWxsIHBhcmVudFNoZWxsLAotICAgIFN0cmluZyB0aXRsZSwKLSAgICBTdHJpbmcgbWVzc2FnZSwKLSAgICBJU3RhdHVzIHN0YXR1cywKLSAgICBpbnQgZGlzcGxheU1hc2spCi0gIHsKLSAgICBFcnJvckRpYWxvZyBkaWFsb2cgPQotICAgICAgbmV3IEVycm9yRGlhbG9nKHBhcmVudFNoZWxsLCB0aXRsZSwgbWVzc2FnZSwgc3RhdHVzLCBkaXNwbGF5TWFzayk7Ci0gICAgcmV0dXJuIGRpYWxvZy5vcGVuKCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGludCBvcGVuSW5mbygKLSAgICBTaGVsbCBwYXJlbnRTaGVsbCwKLSAgICBTdHJpbmcgdGl0bGUsCi0gICAgU3RyaW5nIG1lc3NhZ2UsCi0gICAgSVN0YXR1cyBzdGF0dXMsCi0gICAgaW50IGRpc3BsYXlNYXNrKQotICB7Ci0gICAgSW5mb0RpYWxvZyBkaWFsb2cgPQotICAgICAgbmV3IEluZm9EaWFsb2cocGFyZW50U2hlbGwsIHRpdGxlLCBtZXNzYWdlLCBzdGF0dXMsIGRpc3BsYXlNYXNrKTsKLSAgICByZXR1cm4gZGlhbG9nLm9wZW4oKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgaW50IG9wZW5XYXJuaW5nKAotICAgIFNoZWxsIHBhcmVudFNoZWxsLAotICAgIFN0cmluZyB0aXRsZSwKLSAgICBTdHJpbmcgbWVzc2FnZSwKLSAgICBJU3RhdHVzIHN0YXR1cywKLSAgICBpbnQgZGlzcGxheU1hc2spCi0gIHsKLSAgICBXYXJuaW5nRGlhbG9nIGRpYWxvZyA9Ci0gICAgICBuZXcgV2FybmluZ0RpYWxvZyhwYXJlbnRTaGVsbCwgdGl0bGUsIG1lc3NhZ2UsIHN0YXR1cywgZGlzcGxheU1hc2spOwotICAgIHJldHVybiBkaWFsb2cub3BlbigpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBpbnQgb3Blbk9wdGlvbnMoCi0gICAgU2hlbGwgcGFyZW50U2hlbGwsCi0gICAgU3RyaW5nIHRpdGxlLAotICAgIFN0cmluZyBtZXNzYWdlLAotICAgIElTdGF0dXMgc3RhdHVzLAotICAgIGludCBkaXNwbGF5TWFzaywKLSAgICBDaG9pY2VbXSBvcHRpb25zKQotICB7Ci0gICAgT3B0aW9uc0RpYWxvZyBkaWFsb2cgPQotICAgICAgbmV3IE9wdGlvbnNEaWFsb2coCi0gICAgICAgIHBhcmVudFNoZWxsLAotICAgICAgICB0aXRsZSwKLSAgICAgICAgbWVzc2FnZSwKLSAgICAgICAgc3RhdHVzLAotICAgICAgICBkaXNwbGF5TWFzaywKLSAgICAgICAgb3B0aW9ucyk7Ci0gICAgZGlhbG9nLm9wZW4oKTsKLSAgICByZXR1cm4gZGlhbG9nLmdldFJldHVybkNvZGUoKTsKLSAgfQotCi0gIC8qKgotICAgKiBQb3B1bGF0ZXMgdGhlIGxpc3QgdXNpbmcgdGhpcyBlcnJvciBkaWFsb2cncyBzdGF0dXMgb2JqZWN0LiBUaGlzIHdhbGtzIHRoZQotICAgKiBjaGlsZCBzdGF0aSBvZiB0aGUgc3RhdHVzIG9iamVjdCBhbmQgZGlzcGxheXMgdGhlbSBpbiBhIGxpc3QuIFRoZSBmb3JtYXQKLSAgICogZm9yIGVhY2ggZW50cnkgaXMgc3RhdHVzX3BhdGggOiBzdGF0dXNfbWVzc2FnZSBJZiB0aGUgc3RhdHVzJ3MgcGF0aCB3YXMKLSAgICogbnVsbCB0aGVuIGl0IChhbmQgdGhlIGNvbG9uKSBhcmUgb21pdHRlZC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBwb3B1bGF0ZUxpc3QoTGlzdCBsaXN0KQotICB7Ci0gICAgSXRlcmF0b3IgZW51bWVyYXRpb24gPSBzdGF0dXNMaXN0Lml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGVudW1lcmF0aW9uLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBJU3RhdHVzIGNoaWxkU3RhdHVzID0gKElTdGF0dXMpIGVudW1lcmF0aW9uLm5leHQoKTsKLSAgICAgIHBvcHVsYXRlTGlzdChsaXN0LCBjaGlsZFN0YXR1cywgMCk7Ci0gICAgfQotICB9Ci0gIHByaXZhdGUgdm9pZCBwb3B1bGF0ZUxpc3QoTGlzdCBsaXN0LCBJU3RhdHVzIHN0YXR1cywgaW50IG5lc3RpbmcpCi0gIHsKLSAgICBpZiAoIXN0YXR1cy5tYXRjaGVzKGRpc3BsYXlNYXNrKSkKLSAgICB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG5lc3Rpbmc7IGkrKykKLSAgICB7Ci0gICAgICBzYi5hcHBlbmQoIiAgIik7Ci0gICAgfQotICAgIHNiLmFwcGVuZChzdGF0dXMuZ2V0TWVzc2FnZSgpKTsKLSAgICBsaXN0LmFkZChzYi50b1N0cmluZygpKTsKLSAgICBJU3RhdHVzW10gY2hpbGRyZW4gPSBzdGF0dXMuZ2V0Q2hpbGRyZW4oKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIHBvcHVsYXRlTGlzdChsaXN0LCBjaGlsZHJlbltpXSwgbmVzdGluZyArIDEpOwotICAgIH0KLSAgfQotICBwcml2YXRlIHZvaWQgcG9wdWxhdGVEZXRhaWxzKFRleHQgdGV4dCwgSVN0YXR1cyBzdGF0dXMsIGludCBuZXN0aW5nKQotICB7Ci0gICAgaWYgKCFzdGF0dXMubWF0Y2hlcyhkaXNwbGF5TWFzaykpCi0gICAgewotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAgICAgCi0gICAgU3RyaW5nICAgIHRhYkNoYXJzICAgID0gU3RyaW5nVXRpbHMucmVwZWF0KCAnICcsIG5lc3RpbmcgKiAyICk7Ci0gICAgU3RyaW5nICAgIG1lc3NhZ2VMaW5lID0gdGFiQ2hhcnMgKyBzdGF0dXMuZ2V0TWVzc2FnZSgpICsgU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpOwotICAgIFRocm93YWJsZSBleGNlcHQgICAgICA9IHN0YXR1cy5nZXRFeGNlcHRpb24oKTsKLSAgICAKLSAgICB0ZXh0LmFwcGVuZCggbWVzc2FnZUxpbmUgKTsKLSAgICAKLSAgICBpZiggZXhjZXB0ICE9IG51bGwgKQotICAgIHsKLSAgICAgIFN0cmluZ1tdIHRyYWNlID0gU3RyaW5nVXRpbHMuZ2V0U3RhY2tUcmFjZSggZXhjZXB0ICk7Ci0gICAgICAKLSAgICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCB0cmFjZS5sZW5ndGg7IGluZGV4KysgKQotICAgICAgewotICAgICAgICB0ZXh0LmFwcGVuZCggdGFiQ2hhcnMgKyAiICAgICIgKyB0cmFjZVtpbmRleF0gKyBTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIikgKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgSVN0YXR1c1tdIGNoaWxkcmVuID0gc3RhdHVzLmdldENoaWxkcmVuKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBwb3B1bGF0ZURldGFpbHModGV4dCwgY2hpbGRyZW5baV0sIG5lc3RpbmcgKyAxKTsKLSAgICB9Ci0gIH0KLSAgLyoqCi0gICAqIFJldHVybnMgd2hldGhlciB0aGUgZ2l2ZW4gc3RhdHVzIG9iamVjdCBzaG91bGQgYmUgZGlzcGxheWVkLgotICAgKiAKLSAgICogQHBhcmFtIHN0YXR1cwotICAgKiAgICAgICAgICAgIGEgc3RhdHVzIG9iamVjdAotICAgKiBAcGFyYW0gbWFzawotICAgKiAgICAgICAgICAgIGEgbWFzayBhcyBwZXIgPGNvZGU+U3RhdHVzLm1hdGNoZXM8L2NvZGU+Ci0gICAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGdpdmVuIHN0YXR1cyBzaG91bGQgYmUgZGlzcGxheWVkLCBhbmQKLSAgICogICAgICAgICA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGJvb2xlYW4gc2hvdWxkRGlzcGxheShJU3RhdHVzIHN0YXR1cywgaW50IG1hc2spCi0gIHsKLSAgICBJU3RhdHVzW10gY2hpbGRyZW4gPSBzdGF0dXMuZ2V0Q2hpbGRyZW4oKTsKLSAgICBpZiAoY2hpbGRyZW4gPT0gbnVsbCB8fCBjaGlsZHJlbi5sZW5ndGggPT0gMCkKLSAgICB7Ci0gICAgICByZXR1cm4gc3RhdHVzLm1hdGNoZXMobWFzayk7Ci0gICAgfQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgaWYgKGNoaWxkcmVuW2ldLm1hdGNoZXMobWFzaykpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgLyoqCi0gICAqIFRvZ2dsZXMgdGhlIHVuZm9sZGluZyBvZiB0aGUgZGV0YWlscyBhcmVhLiBUaGlzIGlzIHRyaWdnZXJlZCBieSB0aGUgdXNlcgotICAgKiBwcmVzc2luZyB0aGUgZGV0YWlscyBidXR0b24uCi0gICAqLwotICBwcml2YXRlIHZvaWQgdG9nZ2xlRGV0YWlsc0FyZWEoKQotICB7Ci0gICAgUG9pbnQgd2luZG93U2l6ZSA9IGdldFNoZWxsKCkuZ2V0U2l6ZSgpOwotICAgIGludCAgIG5ld0hlaWdodCAgPSAtMTsKLSAgICAKLSAgICBpZiAoZGV0YWlsc0NyZWF0ZWQpCi0gICAgewotICAgICAgZGV0YWlscy5kaXNwb3NlKCk7Ci0gICAgICBkZXRhaWxzQ3JlYXRlZCA9IGZhbHNlOwotICAgICAgZGV0YWlsc0J1dHRvbi5zZXRUZXh0KElEaWFsb2dDb25zdGFudHMuU0hPV19ERVRBSUxTX0xBQkVMKTsKLSAgICAgIAotICAgICAgLy8gV2l0aG91dCB0aGUgZm9sbG93aW5nIGNvbXB1dGVTaXplIGNhbGwgdGhlIHNldFNpemUgY2FsbCBiZWxvdyB0aHJvd3MgYW4gYXJyYXkgb3V0IG9mIGJvdW5kcyBleGNlcHRpb24uCi0gICAgICAvLyBWZXJ5IHdlaXJkLgotICAgICAgZ2V0Q29udGVudHMoKS5jb21wdXRlU2l6ZShTV1QuREVGQVVMVCwgU1dULkRFRkFVTFQpOwotICAgICAgCi0gICAgICBuZXdIZWlnaHQgPSBzYXZlZFNpemUueTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGlmKCBzYXZlZFNpemUgPT0gbnVsbCApIHNhdmVkU2l6ZSA9IHdpbmRvd1NpemU7Ci0gICAgICAgIAotICAgICAgZGV0YWlscyA9IGNyZWF0ZURyb3BEb3duRGV0YWlscygoQ29tcG9zaXRlKSBnZXRDb250ZW50cygpKTsKLSAgICAgIGRldGFpbHNCdXR0b24uc2V0VGV4dChJRGlhbG9nQ29uc3RhbnRzLkhJREVfREVUQUlMU19MQUJFTCk7Ci0gICAgICBuZXdIZWlnaHQgPSBnZXRDb250ZW50cygpLmNvbXB1dGVTaXplKFNXVC5ERUZBVUxULCBTV1QuREVGQVVMVCkueTsKLSAgICAgIG5ld0hlaWdodCA9IG5ld0hlaWdodCA8IDI1MCA/IDI1MCA6IG5ld0hlaWdodDsKLSAgICB9Ci0KLSAgICBuZXdIZWlnaHQgPSBuZXdIZWlnaHQgPiA0MDAgPyA0MDAgOiBuZXdIZWlnaHQ7Ci0gICAgCi0gICAgZ2V0U2hlbGwoKS5zZXRTaXplKCBuZXcgUG9pbnQod2luZG93U2l6ZS54LCBuZXdIZWlnaHQpICk7Ci0gICAgcGFyZW50LmxheW91dCgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2RpYWxvZy9PcHRpb25zRGlhbG9nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2RpYWxvZy9PcHRpb25zRGlhbG9nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMTE3OWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9kaWFsb2cvT3B0aW9uc0RpYWxvZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuZGlhbG9nOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5JRGlhbG9nQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuQ2hvaWNlOwotCi0KLS8qKgotICogQSBkaWFsb2cgdG8gZGlzcGxheSBvbmUgb3IgbW9yZSBlcnJvcnMgdG8gdGhlIHVzZXIsIGFzIGNvbnRhaW5lZCBpbiBhbgotICogPGNvZGU+U3RhdHVzPC9jb2RlPiBvYmplY3QuIElmIGFuIGVycm9yIGNvbnRhaW5zIGFkZGl0aW9uYWwgZGV0YWlsZWQKLSAqIGluZm9ybWF0aW9uIHRoZW4gYSBEZXRhaWxzIGJ1dHRvbiBpcyBhdXRvbWF0aWNhbGx5IHN1cHBsaWVkLCB3aGljaCBzaG93cyBvcgotICogaGlkZXMgYW4gZXJyb3IgZGV0YWlscyB2aWV3ZXIgd2hlbiBwcmVzc2VkIGJ5IHRoZSB1c2VyLgotICogIAotICovCi1wdWJsaWMgY2xhc3MgT3B0aW9uc0RpYWxvZyBleHRlbmRzIE1lc3NhZ2VEaWFsb2cKLXsKLSAgcHJpdmF0ZSBDaG9pY2VbXSBjaG9pY2VzOwotICBwcml2YXRlIGludCByZXR1cm5Db2RlXzsKLQotICBwdWJsaWMgT3B0aW9uc0RpYWxvZygKLSAgICBTaGVsbCBwYXJlbnRTaGVsbCwKLSAgICBTdHJpbmcgZGlhbG9nVGl0bGUsCi0gICAgU3RyaW5nIG1lc3NhZ2UsCi0gICAgSVN0YXR1cyBzdGF0dXMsCi0gICAgaW50IGRpc3BsYXlNYXNrLAotICAgIENob2ljZVtdIGNob2ljZXMpCi0gIHsKLSAgICBzdXBlcihwYXJlbnRTaGVsbCwgZGlhbG9nVGl0bGUsIG1lc3NhZ2UsIHN0YXR1cywgZGlzcGxheU1hc2spOwotICAgIHRoaXMuY2hvaWNlcyA9IGNob2ljZXM7Ci0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpIFRoaXMgc2hvdWxkIGFsc28gYmUgb3ZlcndyaXR0ZW4gTWV0aG9kIGRlY2xhcmVkIG9uIERpYWxvZy4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGNyZWF0ZUJ1dHRvbnNGb3JCdXR0b25CYXIoQ29tcG9zaXRlIHBhcmVudCkKLSAgewotICAgIC8vIGNyZWF0ZSBhIGJ1dHRvbiBmb3IgZWFjaCBvcHRpb25zCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaG9pY2VzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGNyZWF0ZUJ1dHRvbihwYXJlbnQsIGNob2ljZXNbaV0uZ2V0U2hvcnRjdXQoKSwgY2hvaWNlc1tpXS5nZXRMYWJlbCgpLCB0cnVlKTsKLSAgICB9Ci0gICAgaWYgKHN0YXR1cy5pc011bHRpU3RhdHVzKCkgKQotICAgIHsKLSAgICAgIGRldGFpbHNCdXR0b24gPQotICAgICAgICBjcmVhdGVCdXR0b24oCi0gICAgICAgICAgcGFyZW50LAotICAgICAgICAgIFN0YXR1c0RpYWxvZ0NvbnN0YW50cy5ERVRBSUxTX0lELAotICAgICAgICAgIElEaWFsb2dDb25zdGFudHMuU0hPV19ERVRBSUxTX0xBQkVMLAotICAgICAgICAgIGZhbHNlKTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBidXR0b25QcmVzc2VkKGludCBpZCkKLSAgewotICAgIGlmIChpZCA9PSBTdGF0dXNEaWFsb2dDb25zdGFudHMuREVUQUlMU19JRCkKLSAgICAgIC8vIHdhcyB0aGUgRGV0YWlscyBidXR0b24gcHJlc3NlZD8KLSAgICAgIHN1cGVyLmJ1dHRvblByZXNzZWQoaWQpOwotICAgIGVsc2UKLSAgICB7Ci0gICAgICBzZXRSZXR1cm5Db2RlKGlkKTsKLSAgICAgIGNsb3NlKCk7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgc2V0UmV0dXJuQ29kZShpbnQgaWQpCi0gIHsKLSAgICByZXR1cm5Db2RlXyA9IGlkOwotICB9Ci0KLSAgcHVibGljIGludCBnZXRSZXR1cm5Db2RlKCkKLSAgewotICAgIHJldHVybiByZXR1cm5Db2RlXzsKLSAgfQotICAvKgotICAgKiBUaGlzIGlzIG9uZSBvZiB0aGUgZmV3IG1ldGhvZHMgdGhhdCBuZWVkcyB0byBiZSBvdmVyd3JpdHRlbiBieSB0aGUKLSAgICogc3ViY2xhc3Nlcy4gVGhlIGltYWdlIG5hbWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgRGlhbG9nIGNsYXNzCi0gICAqLwotICBwcm90ZWN0ZWQgSW1hZ2UgZ2V0RGlhbG9nSW1hZ2UoKQotICB7Ci0gICAgLy8gY3JlYXRlIGltYWdlCi0gICAgc3dpdGNoIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKSkKLSAgICB7Ci0gICAgICBjYXNlIElTdGF0dXMuSU5GTyA6Ci0gICAgICAgIHJldHVybiBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldERpc3BsYXkoKS5nZXRTeXN0ZW1JbWFnZShTV1QuSUNPTl9JTkZPUk1BVElPTik7Ci0gICAgICBjYXNlIElTdGF0dXMuV0FSTklORyA6Ci0gICAgICAgIHJldHVybiBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldERpc3BsYXkoKS5nZXRTeXN0ZW1JbWFnZShTV1QuSUNPTl9XQVJOSU5HKTsKLSAgICAgIGRlZmF1bHQgOgotICAgICAgICByZXR1cm4gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXREaXNwbGF5KCkuZ2V0U3lzdGVtSW1hZ2UoU1dULklDT05fRVJST1IpOwotICAgIH0KLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2RpYWxvZy9TdGF0dXNEaWFsb2dDb25zdGFudHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZGlhbG9nL1N0YXR1c0RpYWxvZ0NvbnN0YW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTU2Nzg4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZGlhbG9nL1N0YXR1c0RpYWxvZ0NvbnN0YW50cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuZGlhbG9nOwotCi0vKioKLSogQ29uc3RhbnRzIGZvciBzdGF0dXMgZGlhbG9ncwotKi8KLXB1YmxpYyBpbnRlcmZhY2UgU3RhdHVzRGlhbG9nQ29uc3RhbnRzIHsKLQotICAvKgotICAqIEJ1dHRvbiBJRCBmb3IgdGhlICJZZXMiIGJ1dHRvbgotICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBZRVNfSUQgPSAyOwotICAvKgotICAqIEJ1dHRvbiBJRCBmb3IgdGhlICJZZXMgdG8gYWxsIiBidXR0b24KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgWUVTX1RPX0FMTF9JRCA9IDQ7Ci0gIC8qCi0gICogQnV0dG9uIElEIGZvciB0aGUgIkNhbmNlbCIgYnV0dG9uCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENBTkNFTF9JRCA9IDE7Ci0gIC8qCi0gICogQnV0dG9uIElEIGZvciB0aGUgIk9LIiBidXR0b24KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT0tfSUQgPSAwOwotICAvKgotICAqIEJ1dHRvbiBJRCBmb3IgdGhlICJEZXRhaWxzIiBidXR0b24KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVUQUlMU19JRCA9IDEzOwotCi0gIC8qCi0gICogQnV0dG9uIGxhYmVsIGZvciB0aGUgIlllcyIgYnV0dG9uCi0gICovCi0gLy8gcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgWUVTX0xBQkVMID0gRW52aXJvbm1lbnRQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRNZXNzYWdlKCIlU1RBVFVTX0RJQUxPR19ZRVNfTEFCRUwiKTsKLSAgLyoKLSAgKiBCdXR0b24gbGFiZWwgZm9yIHRoZSAiWWVzIHRvIGFsbCIgYnV0dG9uCi0gICovCi0gLy8gcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgWUVTX1RPX0FMTF9MQUJFTCA9IEVudmlyb25tZW50UGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0TWVzc2FnZSgiJVNUQVRVU19ESUFMT0dfWUVTX1RPX0FMTF9MQUJFTCIpOwotICAvKgotICAqIEJ1dHRvbiBsYWJlbCBmb3IgdGhlICJDYW5jZWwiIGJ1dHRvbgotICAqLwotIC8vIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENBTkNFTF9MQUJFTCA9IEVudmlyb25tZW50UGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0TWVzc2FnZSgiJVNUQVRVU19ESUFMT0dfQ0FOQ0VMX0xBQkVMIik7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2RpYWxvZy9XYXJuaW5nRGlhbG9nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2RpYWxvZy9XYXJuaW5nRGlhbG9nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiNTY5NWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9kaWFsb2cvV2FybmluZ0RpYWxvZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuZGlhbG9nOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5JRGlhbG9nQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotCi0KLS8qKgotICogQSBkaWFsb2cgdG8gZGlzcGxheSBvbmUgb3IgbW9yZSBlcnJvcnMgdG8gdGhlIHVzZXIsIGFzIGNvbnRhaW5lZCBpbiBhbgotICogPGNvZGU+U3RhdHVzPC9jb2RlPiBvYmplY3QuIElmIGFuIGVycm9yIGNvbnRhaW5zIGFkZGl0aW9uYWwgZGV0YWlsZWQKLSAqIGluZm9ybWF0aW9uIHRoZW4gYSBEZXRhaWxzIGJ1dHRvbiBpcyBhdXRvbWF0aWNhbGx5IHN1cHBsaWVkLCB3aGljaCBzaG93cyBvcgotICogaGlkZXMgYW4gZXJyb3IgZGV0YWlscyB2aWV3ZXIgd2hlbiBwcmVzc2VkIGJ5IHRoZSB1c2VyLgotICogIAotICovCi1wdWJsaWMgY2xhc3MgV2FybmluZ0RpYWxvZyBleHRlbmRzIE1lc3NhZ2VEaWFsb2cKLXsKLSAgLyoqCi0gICAqIENyZWF0ZXMgYW4gZXJyb3IgZGlhbG9nLiBOb3RlIHRoYXQgdGhlIGRpYWxvZyB3aWxsIGhhdmUgbm8gdmlzdWFsCi0gICAqIHJlcHJlc2VudGF0aW9uIChubyB3aWRnZXRzKSB1bnRpbCBpdCBpcyB0b2xkIHRvIG9wZW4uCi0gICAqIDxwPgotICAgKiBOb3JtYWxseSBvbmUgc2hvdWxkIHVzZSA8Y29kZT5vcGVuRXJyb3I8L2NvZGU+IHRvIGNyZWF0ZSBhbmQgb3BlbiBvbmUgb2YKLSAgICogdGhlc2UuIFRoaXMgY29uc3RydWN0b3IgaXMgdXNlZnVsIG9ubHkgaWYgdGhlIGVycm9yIG9iamVjdCBiZWluZyBkaXNwbGF5ZWQKLSAgICogY29udGFpbnMgY2hpbGQgaXRlbXMgPGl0PmFuZDwvaXQ+IHlvdSBuZWVkIHRvIHNwZWNpZnkgYSBtYXNrIHdoaWNoIHdpbGwKLSAgICogYmUgdXNlZCB0byBmaWx0ZXIgdGhlIGRpc3BsYXlpbmcgb2YgdGhlc2UgY2hpbGRyZW4uCi0gICAqIDwvcD4KLSAgICogCi0gICAqIEBwYXJhbSBwYXJlbnRTaGVsbAotICAgKiAgICAgICAgICAgIHRoZSBzaGVsbCB1bmRlciB3aGljaCB0byBjcmVhdGUgdGhpcyBkaWFsb2cKLSAgICogQHBhcmFtIGRpYWxvZ1RpdGxlCi0gICAqICAgICAgICAgICAgdGhlIHRpdGxlIHRvIHVzZSBmb3IgdGhpcyBkaWFsb2csIG9yIDxjb2RlPm51bGw8L2NvZGU+IHRvCi0gICAqICAgICAgICAgICAgaW5kaWNhdGUgdGhhdCB0aGUgZGVmYXVsdCB0aXRsZSBzaG91bGQgYmUgdXNlZAotICAgKiBAcGFyYW0gbWVzc2FnZQotICAgKiAgICAgICAgICAgIHRoZSBtZXNzYWdlIHRvIHNob3cgaW4gdGhpcyBkaWFsb2csIG9yIDxjb2RlPm51bGw8L2NvZGU+IHRvCi0gICAqICAgICAgICAgICAgaW5kaWNhdGUgdGhhdCB0aGUgZXJyb3IncyBtZXNzYWdlIHNob3VsZCBiZSBzaG93biBhcyB0aGUKLSAgICogICAgICAgICAgICBwcmltYXJ5IG1lc3NhZ2UKLSAgICogQHBhcmFtIHN0YXR1cwotICAgKiAgICAgICAgICAgIHRoZSBlcnJvciB0byBzaG93IHRvIHRoZSB1c2VyCi0gICAqIEBwYXJhbSBkaXNwbGF5TWFzawotICAgKiAgICAgICAgICAgIHRoZSBtYXNrIHRvIHVzZSB0byBmaWx0ZXIgdGhlIGRpc3BsYXlpbmcgb2YgY2hpbGQgaXRlbXMsIGFzIHBlcgotICAgKiAgICAgICAgICAgIDxjb2RlPlN0YXR1cy5tYXRjaGVzPC9jb2RlPgotICAgKi8KLSAgcHVibGljIFdhcm5pbmdEaWFsb2coCi0gICAgU2hlbGwgcGFyZW50U2hlbGwsCi0gICAgU3RyaW5nIGRpYWxvZ1RpdGxlLAotICAgIFN0cmluZyBtZXNzYWdlLAotICAgIElTdGF0dXMgc3RhdHVzLAotICAgIGludCBkaXNwbGF5TWFzaykKLSAgewotICAgIHN1cGVyKHBhcmVudFNoZWxsLCBkaWFsb2dUaXRsZSwgbWVzc2FnZSwgc3RhdHVzLCBkaXNwbGF5TWFzayk7Ci0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpIFRoaXMgc2hvdWxkIGFsc28gYmUgb3ZlcndyaXR0ZW4gTWV0aG9kIGRlY2xhcmVkIG9uIERpYWxvZy4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGNyZWF0ZUJ1dHRvbnNGb3JCdXR0b25CYXIoQ29tcG9zaXRlIHBhcmVudCkKLSAgewotICAgIC8vIGNyZWF0ZSBPSywgQ2FuY2VsIGFuZCBEZXRhaWxzIGJ1dHRvbnMKLSAgICBjcmVhdGVCdXR0b24oCi0gICAgICBwYXJlbnQsCi0gICAgICBTdGF0dXNEaWFsb2dDb25zdGFudHMuT0tfSUQsCi0gICAgICBJRGlhbG9nQ29uc3RhbnRzLk9LX0xBQkVMLAotICAgICAgdHJ1ZSk7Ci0gICAgY3JlYXRlQnV0dG9uKAotICAgICAgcGFyZW50LAotICAgICAgU3RhdHVzRGlhbG9nQ29uc3RhbnRzLkNBTkNFTF9JRCwKLSAgICAgIElEaWFsb2dDb25zdGFudHMuQ0FOQ0VMX0xBQkVMLAotICAgICAgZmFsc2UpOwotICAgIGlmIChzdGF0dXMuaXNNdWx0aVN0YXR1cygpKQotICAgIHsKLSAgICAgIGRldGFpbHNCdXR0b24gPQotICAgICAgICBjcmVhdGVCdXR0b24oCi0gICAgICAgICAgcGFyZW50LAotICAgICAgICAgIFN0YXR1c0RpYWxvZ0NvbnN0YW50cy5ERVRBSUxTX0lELAotICAgICAgICAgIElEaWFsb2dDb25zdGFudHMuU0hPV19ERVRBSUxTX0xBQkVMLAotICAgICAgICAgIGZhbHNlKTsKLSAgICB9Ci0gIH0KLQotICAvKgotICAgKiBUaGlzIGlzIG9uZSBvZiB0aGUgZmV3IG1ldGhvZHMgdGhhdCBuZWVkcyB0byBiZSBvdmVyd3JpdHRlbiBieSB0aGUKLSAgICogc3ViY2xhc3Nlcy4gVGhlIGltYWdlIG5hbWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgRGlhbG9nIGNsYXNzCi0gICAqLwotICBwcm90ZWN0ZWQgSW1hZ2UgZ2V0RGlhbG9nSW1hZ2UoKQotICB7Ci0gICAgLy8gY3JlYXRlIGltYWdlCi0gICAgcmV0dXJuIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0RGlzcGxheSgpLmdldFN5c3RlbUltYWdlKFNXVC5JQ09OX1dBUk5JTkcpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZWNsaXBzZS9FY2xpcHNlU3RhdHVzSGFuZGxlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9lY2xpcHNlL0VjbGlwc2VTdGF0dXNIYW5kbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5Yzc2NDUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9lY2xpcHNlL0VjbGlwc2VTdGF0dXNIYW5kbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMzE0ICAgMTc2ODg2IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDcwNTAyICAgMTYyMjg3IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBTZXJ2ZXIgcHVibGlzaCBjYW5jZWwgYnV0dG9uIHVuYXZhaWxhYmxlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLmVjbGlwc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuRW52aXJvbm1lbnRDb3JlTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuQmFzZVN0YXR1c0hhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLmRpYWxvZy5NZXNzYWdlRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5kaWFsb2cuU3RhdHVzRGlhbG9nQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuQ2hvaWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuU3RhdHVzRXhjZXB0aW9uOwotCi0KLS8qKgotICogVGhpcyBpcyB0aGUgRWNsaXBzZSBVSSB2ZXJzaW9uIG9mIHRoZSBJU3RhdHVzSGFuZGxlcgotICovCi1wdWJsaWMgY2xhc3MgRWNsaXBzZVN0YXR1c0hhbmRsZXIgZXh0ZW5kcyBCYXNlU3RhdHVzSGFuZGxlcgotewotICBwcml2YXRlIFNoZWxsICAgc2hlbGwgICAgICAgPSBudWxsOwotICAgIAotICBwdWJsaWMgRWNsaXBzZVN0YXR1c0hhbmRsZXIoKQotICB7ICAKLSAgfQotICAKLSAgcHVibGljIEVjbGlwc2VTdGF0dXNIYW5kbGVyKCBTaGVsbCB0aGVTaGVsbCApCi0gIHsKLSAgICBzaGVsbCA9IHRoZVNoZWxsOyAgCi0gIH0KLSAgICAKLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuZW52LmNvbW1vbi5JU3RhdHVzSGFuZGxlciNyZXBvcnQob3JnLmVjbGlwc2UuZW52LmNvbW1vbi5TdGF0dXMsIG9yZy5lY2xpcHNlLmVudi5jb21tb24uQ2hvaWNlW10pCi0gICAqLwotICBwdWJsaWMgQ2hvaWNlIHJlcG9ydCggZmluYWwgSVN0YXR1cyBzdGF0dXMsIGZpbmFsIENob2ljZVtdIGNob2ljZXMpIAotICB7Ci0gICAgZmluYWwgaW50W10gcmVzdWx0ID0gbmV3IGludFsxXTsKLSAgICAKLSAgICBjaGVja1N0YXR1cyggc3RhdHVzICk7Ci0gICAgCi0gICAgUnVubmFibGUgcnVubmFibGUgPSBuZXcgUnVubmFibGUoKQotICAgIHsKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdFswXSA9Ci0gICAgICAgICAgTWVzc2FnZURpYWxvZy5vcGVuTWVzc2FnZSggZ2V0U2hlbGwoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnZpcm9ubWVudENvcmVNZXNzYWdlcy5USVRMRV9XQVJOSU5HLCAvL1RPRE86IFNob3VsZCBiZSBpbmZlcnJlZCBmcm9tIHN0YXR1cycgc2V2ZXJpdHkuCi0JCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLAotCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLAotCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvaWNlcyk7Ci0gICAgICB9Ci0gICAgfTsKLSAgICAKLSAgICBEaXNwbGF5LmdldERlZmF1bHQoKS5zeW5jRXhlYyggcnVubmFibGUgKTsKLSAgICAKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNob2ljZXMubGVuZ3RoOyBpKyspCi0gICAgIHsKLSAgICAgIGlmIChjaG9pY2VzW2ldLmdldFNob3J0Y3V0KCkgPT0gcmVzdWx0WzBdICkKLSAgICAgICAgcmV0dXJuIGNob2ljZXNbaV07Ci0gICAgfQotICAgIAotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuZW52LmNvbW1vbi5JU3RhdHVzSGFuZGxlciNyZXBvcnQob3JnLmVjbGlwc2UuZW52LmNvbW1vbi5TdGF0dXMpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZXBvcnQoSVN0YXR1cyBzdGF0dXMpIHRocm93cyBTdGF0dXNFeGNlcHRpb24KLSAgewotICAgIGJvb2xlYW4gdXNlck9rID0gZmFsc2U7Ci0gICAgCi0gICAgY2hlY2tTdGF0dXMoIHN0YXR1cyApOwotICAgIAotICAgIHN3aXRjaCAoc3RhdHVzLmdldFNldmVyaXR5KCkpCi0gICAgewotICAgICAgLy8gYW4gZXJyb3IgaGFzIGJlZW4gcmVwb3J0ZWQgYW5kIHdlIG5lZWQgdG8gc3RvcCBleGVjdXRpbmcgdGhlIGNvbW1pbmcKLSAgICAgIC8vIGNvbW1hbmRzCi0gICAgICBjYXNlIFN0YXR1cy5FUlJPUiA6Ci0gICAgICB7Ci0gICAgICAgIHVzZXJPayA9IHJlcG9ydEVycm9yU3RhdHVzKHN0YXR1cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBTdGF0dXMuV0FSTklORyA6Ci0gICAgICB7Ci0gICAgICAgIHVzZXJPayA9IHJlcG9ydFdhcm5pbmcoc3RhdHVzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9ICAgICAKLSAgICAgIGNhc2UgU3RhdHVzLklORk8gOgotICAgICAgewotICAgICAgICB1c2VyT2sgPSB0cnVlOwotICAgICAgICByZXBvcnRJbmZvKHN0YXR1cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICBpZiggIXVzZXJPayApIHRocm93IG5ldyBTdGF0dXNFeGNlcHRpb24oIHN0YXR1cyApOwotICB9Ci0gIAotICBwcml2YXRlIGJvb2xlYW4gcmVwb3J0V2FybmluZyggZmluYWwgSVN0YXR1cyBzdGF0dXMgKQotICB7Ci0gICAgZmluYWwgaW50IHVzZXJSZXNwb25zZVtdID0gbmV3IGludFsxXTsKLSAgICAKLSAgICBSdW5uYWJsZSBydW5uYWJsZSA9IG5ldyBSdW5uYWJsZSgpCi0gICAgewotICAgICAgcHVibGljIHZvaWQgcnVuKCkKLSAgICAgIHsKLSAgICAgICAgdXNlclJlc3BvbnNlWzBdID0KLSAgICAgICAgICBNZXNzYWdlRGlhbG9nLm9wZW5NZXNzYWdlKCBnZXRTaGVsbCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVudmlyb25tZW50Q29yZU1lc3NhZ2VzLlRJVExFX1dBUk5JTkcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMpOwotICAgICAgfQotICAgIH07Ci0gICAgCi0gICAgRGlzcGxheS5nZXREZWZhdWx0KCkuc3luY0V4ZWMoIHJ1bm5hYmxlICk7Ci0gICAgCi0gICAgcmV0dXJuICh1c2VyUmVzcG9uc2VbMF0gPT0gU3RhdHVzRGlhbG9nQ29uc3RhbnRzLk9LX0lEKTsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiByZXBvcnRFcnJvclN0YXR1cyhmaW5hbCBJU3RhdHVzIHN0YXR1cykKLSAgewotCS8vIG5vIG5lZWQgdG8gcmVwb3J0IGFuIGVtcHR5IG1lc3NhZ2Ugd2l0aCBubyBleGNlcHRpb24KLQlpZiAoIiIuZXF1YWxzKHN0YXR1cy5nZXRNZXNzYWdlKCkpICYmIHN0YXR1cy5nZXRFeGNlcHRpb24oKSA9PSBudWxsKQotCQlyZXR1cm4gZmFsc2U7Ci0JICAKLSAgICBSdW5uYWJsZSBydW5uYWJsZSA9IG5ldyBSdW5uYWJsZSgpCi0gICAgewotICAgICAgcHVibGljIHZvaWQgcnVuKCkKLSAgICAgIHsKLSAgICAgICAgTWVzc2FnZURpYWxvZy5vcGVuTWVzc2FnZSggZ2V0U2hlbGwoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW52aXJvbm1lbnRDb3JlTWVzc2FnZXMuVElUTEVfRVJST1IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyk7Ci0gICAgICB9Ci0gICAgfTsKLSAgICAKLSAgICBEaXNwbGF5LmdldERlZmF1bHQoKS5zeW5jRXhlYyggcnVubmFibGUgKTsKLSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgICAKLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLklTdGF0dXNIYW5kbGVyI3JlcG9ydEVycm9yKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXMpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZXBvcnRFcnJvcihJU3RhdHVzIHN0YXR1cykKLSAgewotICAgIGNoZWNrU3RhdHVzKCBzdGF0dXMgKTsKLSAgICByZXBvcnRFcnJvclN0YXR1cyggc3RhdHVzICk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5JU3RhdHVzSGFuZGxlciNyZXBvcnRJbmZvKG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXMpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZXBvcnRJbmZvKGZpbmFsIElTdGF0dXMgc3RhdHVzKQotICB7Ci0gICAgUnVubmFibGUgcnVubmFibGUgPSBuZXcgUnVubmFibGUoKQotICAgIHsKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpCi0gICAgICB7Ci0gICAgICAgIE1lc3NhZ2VEaWFsb2cub3Blbk1lc3NhZ2UoIGdldFNoZWxsKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVudmlyb25tZW50Q29yZU1lc3NhZ2VzLlRJVExFX0lORk8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyk7Ci0gICAgICB9Ci0gICAgfTsKLSAgICAKLSAgICBEaXNwbGF5LmdldERlZmF1bHQoKS5zeW5jRXhlYyggcnVubmFibGUgKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBTaGVsbCBnZXRTaGVsbCgpCi0gIHsKLSAgICBpZiggc2hlbGwgIT0gbnVsbCApIHJldHVybiBzaGVsbDsKLSAgICAKLSAgICBEaXNwbGF5IGRpc3BsYXkgPSBEaXNwbGF5LmdldERlZmF1bHQoKTsKLSAgICAKLSAgICByZXR1cm4gZGlzcGxheSA9PSBudWxsID8gbnVsbCA6IGRpc3BsYXkuZ2V0QWN0aXZlU2hlbGwoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9lY2xpcHNlL0Vudmlyb25tZW50VXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZWNsaXBzZS9FbnZpcm9ubWVudFV0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhMWRlMzcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9lY2xpcHNlL0Vudmlyb25tZW50VXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuZWNsaXBzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuVHJhbnNpZW50UmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkVjbGlwc2VFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLQotcHVibGljIGZpbmFsIGNsYXNzIEVudmlyb25tZW50VXRpbHMKLXsgICAgIAotICAvKioKLSAgICogCi0gICAqIEBwYXJhbSBlbnYgVGhpcyBzaG91bGQgYmUgYW4gRWNsaXBzZUVudmlyb25tZW50LgotICAgKiBAcmV0dXJuIFJldHVybnMgYSBSZXNvdXJjZUNvbnRleHQuCi0gICAqLyAKLSAgcHVibGljIHN0YXRpYyBSZXNvdXJjZUNvbnRleHQgZ2V0UmVzb3VyY2VDb250ZXh0KCBJRW52aXJvbm1lbnQgZW52ICkKLSAgewotICAgIFJlc291cmNlQ29udGV4dCBjb250ZXh0ID0gbnVsbDsKLSAgICAKLSAgICBpZiggZW52IGluc3RhbmNlb2YgRWNsaXBzZUVudmlyb25tZW50ICkKLSAgICB7Ci0gICAgICBjb250ZXh0ID0gKChFY2xpcHNlRW52aXJvbm1lbnQpZW52KS5nZXRSZXNvdXJjZUNvbnRleHQoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGNvbnRleHQgPSBuZXcgVHJhbnNpZW50UmVzb3VyY2VDb250ZXh0KCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBjb250ZXh0OwotICB9Ci0gIAotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZWNsaXBzZS9TV1RFbnZpcm9ubWVudE1hbmFnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvZWNsaXBzZS9TV1RFbnZpcm9ubWVudE1hbmFnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTkxMzJiYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL2VjbGlwc2UvU1dURW52aXJvbm1lbnRNYW5hZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlCi0gKiBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5lY2xpcHNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbnRleHQuUGVyc2lzdGVudFJlc291cmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5CYXNlRWNsaXBzZUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkVjbGlwc2VFbnZpcm9ubWVudDsKLQotcHVibGljIGNsYXNzIFNXVEVudmlyb25tZW50TWFuYWdlcgotewotICAvKioKLSAgICogUmV0dXJucyBhIG5ldyBpbnN0YW5jZSBvZiBhbiBJRW52aXJvbm1lbnQgZm9yIHRoZSBFY2xpcHNlIFNXVCBHVUkuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIEJhc2VFY2xpcHNlRW52aXJvbm1lbnQgZ2V0TmV3U1dURW52aXJvbm1lbnQoKQotICB7Ci0gICAgUGVyc2lzdGVudFJlc291cmNlQ29udGV4dCBjb250ZXh0ICAgICAgICA9IFBlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQuZ2V0SW5zdGFuY2UoKTsKLSAgICBFY2xpcHNlU3RhdHVzSGFuZGxlciAgICAgIGhhbmRsZXIgICAgICAgID0gbmV3IEVjbGlwc2VTdGF0dXNIYW5kbGVyKCk7Ci0gICAgRWNsaXBzZUVudmlyb25tZW50ICAgICAgICBlbnZpcm9ubWVudCAgICA9IG5ldyBFY2xpcHNlRW52aXJvbm1lbnQoIG51bGwsIGNvbnRleHQsIGhhbmRsZXIgKTsKLSAgICAKLSAgICByZXR1cm4gZW52aXJvbm1lbnQ7ICAKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9wbHVnaW4vRW52VUlQbHVnaW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvcGx1Z2luL0VudlVJUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjMTVkNjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9wbHVnaW4vRW52VUlQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLnBsdWdpbjsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIEVudlVJUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHsKLQotCS8vVGhlIHNoYXJlZCBpbnN0YW5jZS4KLQlwcml2YXRlIHN0YXRpYyBFbnZVSVBsdWdpbiBpbnN0YW5jZTsKLQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3Rvci4KLQkgKi8KLQlwdWJsaWMgRW52VUlQbHVnaW4oKSB7Ci0JCXN1cGVyKCk7Ci0JCWluc3RhbmNlID0gdGhpczsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBFbnZVSVBsdWdpbiBnZXRJbnN0YW5jZSgpIHsKLQkJcmV0dXJuIGluc3RhbmNlOwotCX0KLQkgcHVibGljIHN0YXRpYyBJbWFnZURlc2NyaXB0b3IgZ2V0SW1hZ2VEZXNjcmlwdG9yICggU3RyaW5nIG5hbWUgKQotCSAgewotCSAgICB0cnkKLQkgICAgewotCSAgICAgIFVSTCBpbnN0YWxsVVJMID0gaW5zdGFuY2UuZ2V0QnVuZGxlKCkuZ2V0RW50cnkoIi8iKTsKLQkgICAgICBVUkwgaW1hZ2VVUkwgPSBuZXcgVVJMKGluc3RhbGxVUkwsbmFtZSk7Ci0JICAgICAgcmV0dXJuIEltYWdlRGVzY3JpcHRvci5jcmVhdGVGcm9tVVJMKGltYWdlVVJMKTsKLQkgICAgfQotCSAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpCi0JICAgIHsKLQkgICAgICByZXR1cm4gbnVsbDsKLQkgICAgfQotCSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9wcmVmZXJlbmNlcy9BY3Rpb25EaWFsb2dzUHJlZmVyZW5jZVBhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvcHJlZmVyZW5jZXMvQWN0aW9uRGlhbG9nc1ByZWZlcmVuY2VQYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1ZTRhNzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS9wcmVmZXJlbmNlcy9BY3Rpb25EaWFsb2dzUHJlZmVyZW5jZVBhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNzI2ICAgMTUxODY2IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBQb3B1cCBEaWFsb2cgU2VsZWN0aW9uIHByZWZlcmVuY2VzIGRlZmF1bHRzIGluY29ycmVjdGx5IHRvIGhpZGUgYWxsCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLnByZWZlcmVuY2VzOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXhlY3V0YWJsZUV4dGVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLlByZWZlcmVuY2VQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb250ZXh0LlBlcnNpc3RlbnRBY3Rpb25EaWFsb2dzQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYucHJlZmVyZW5jZXMuQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLkVudmlyb25tZW50VUlNZXNzYWdlczsKLQotCi0vKioKLSAqIFRoaXMgY2xhc3MgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIGEgcG9wdXAgYWN0aW9ucyBwcmVmZXJlbmNlIHBhZ2UgZm9yIGEgCi0gKiBwYXJ0aWN1bGFyIGNhdGVnb3J5LiAgRm9yIGV4YW1wbGU6Ci0gKgotICogPHByZT4KLSAqICAmbHQ7ZXh0ZW5zaW9uCi0gKiAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnByZWZlcmVuY2VQYWdlcyImZ3Q7Ci0gKiAgICAgJmx0O3BhZ2UKLSAqICAgICAgICAgICBuYW1lPSIlUFJFRkVSRU5DRV9DQVRFR09SWV9ESUFMT0dTIgotICogICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5qc3Qud3MudWkucHJlZmVyZW5jZXMubmFtZSIKLSAqICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnByZWZlcmVuY2VzLkFjdGlvbkRpYWxvZ3NQcmVmZXJlbmNlUGFnZSIKLSAqICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0Lndzcy5wb3B1cC5jYXRlZ29yeSImZ3Q7Ci0gKiAgICAgJmx0Oy9wYWdlJmd0OwotICogKiA8L3ByZT4KLSAqIFRoaXMgZW50cnkgc3BlY2lmaWVzIHRoYXQgYWxsIHBvcHVwIGFjdGlvbnMgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZQotICogb3JnLmVjbGlwc2UuanN0Lndzcy5wb3B1cC5jYXRlZ29yeSB3aWxsIGJlIGRpc3BsYXllZCBvbiB0aGlzCi0gKiBwcmVmZXJlbmNlIHBhZ2UuCi0gKi8KLXB1YmxpYyBjbGFzcyBBY3Rpb25EaWFsb2dzUHJlZmVyZW5jZVBhZ2UgZXh0ZW5kcyBQcmVmZXJlbmNlUGFnZSBpbXBsZW1lbnRzIElXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZSwgTGlzdGVuZXIsIElFeGVjdXRhYmxlRXh0ZW5zaW9uCi17Ci0gIC8qQ09OVEVYVF9JRCBQUEFEMDAwMSBmb3IgdGhlIEFjdGlvbiBEaWFsb2dzIFByZWZlcmVuY2UgUGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFBBRF9QQUdFID0gIm9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS5QUEFEMDAwMSI7Ci0gIC8vCi0gIHByaXZhdGUgQnV0dG9uIHNob3dBbGw7Ci0gIC8qQ09OVEVYVF9JRCBQUEFEMDAwMiBmb3IgdGhlICBzaG93IGFsbCBjaGVjayBib3ggb24gdGhlIEFjdGlvbiBEaWFsb2dzIFByZWZlcmVuY2UgUGFnZSovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFBBRF9CVVRUT05fU0hPV19BTEwgPSAib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLlBQQUQwMDAyIjsKLSAgLy8KLSAgcHJpdmF0ZSBCdXR0b24gaGlkZUFsbDsKLSAgLypDT05URVhUX0lEIFBQQUQwMDAzIGZvciB0aGUgIGhpZGUgYWxsIGNoZWNrIGJveCBvbiB0aGUgQWN0aW9uIERpYWxvZ3MgUHJlZmVyZW5jZSBQYWdlKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QUEFEX0JVVFRPTl9ISURFX0FMTCA9ICJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkuUFBBRDAwMDMiOwotCi0gIHByaXZhdGUgSGFzaHRhYmxlIGNoZWNrQm94ZXNfOwotICBwcml2YXRlIFN0cmluZyAgICBjYXRlZ29yeUlkXzsKLSAgCi0gIHB1YmxpYyB2b2lkIHNldEluaXRpYWxpemF0aW9uRGF0YSggSUNvbmZpZ3VyYXRpb25FbGVtZW50IGNvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdCAgICAgICAgICAgICAgICBkYXRhICkKLSAgICB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotICB7Ci0gICAgY2F0ZWdvcnlJZF8gICA9IGNvbmZpZy5nZXRBdHRyaWJ1dGUoICJpZCIgKTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIHByZWZlcmVuY2UgcGFnZSBjb250cm9scyBvbiBkZW1hbmQuCi0gICAqICAgQHBhcmFtIHBhcmVudCAgdGhlIHBhcmVudCBmb3IgdGhlIHByZWZlcmVuY2UgcGFnZQotICAgKi8KLSAgcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlQ29udGVudHMoQ29tcG9zaXRlIHN1cGVycGFyZW50KQotICB7Ci0gICAKLSAgICBjaGVja0JveGVzXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBhZGRPcHRpb25hbERpYWxvZ3NDaGVja0JveGVzIChzdXBlcnBhcmVudCk7Ci0JbmV3IExhYmVsKHN1cGVycGFyZW50LCBTV1QuSE9SSVpPTlRBTCk7Ci0JCi0gICAgQ29tcG9zaXRlICAgcGFyZW50ID0gbmV3IENvbXBvc2l0ZSggc3VwZXJwYXJlbnQsIFNXVC5OT05FICk7CQotICAgIEdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBsYXlvdXQubnVtQ29sdW1ucyA9IDI7Ci0gICAgcGFyZW50LnNldExheW91dCggbGF5b3V0ICk7Ci0gICAgcGFyZW50LnNldFRvb2xUaXBUZXh0KEVudmlyb25tZW50VUlNZXNzYWdlcy5UT09MVElQX1BQQURfUEFHRSk7Ci0gICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChwYXJlbnQsIElORk9QT1BfUFBBRF9QQUdFICk7Ci0JCi0gICAgc2hvd0FsbCA9IG5ldyBCdXR0b24ocGFyZW50LCBTV1QuTk9ORSk7Ci0gICAgc2hvd0FsbC5zZXRUZXh0KEVudmlyb25tZW50VUlNZXNzYWdlcy5CVVRUT05fU0hPV19BTExfRElBTE9HUyk7Ci0gICAgc2hvd0FsbC5hZGRMaXN0ZW5lcihTV1QuU2VsZWN0aW9uLCB0aGlzKTsKLSAgICBzaG93QWxsLnNldFRvb2xUaXBUZXh0KEVudmlyb25tZW50VUlNZXNzYWdlcy5UT09MVElQX1BQQURfQlVUVE9OX1NIT1dfQUxMKTsKLSAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHNob3dBbGwsIElORk9QT1BfUFBBRF9CVVRUT05fU0hPV19BTEwgKTsKLSAgIAotICAgIGhpZGVBbGwgPSBuZXcgQnV0dG9uKHBhcmVudCwgU1dULk5PTkUpOwotICAgIGhpZGVBbGwuc2V0VGV4dChFbnZpcm9ubWVudFVJTWVzc2FnZXMuQlVUVE9OX0hJREVfQUxMX0RJQUxPR1MpOwotICAgIGhpZGVBbGwuYWRkTGlzdGVuZXIgKCBTV1QuU2VsZWN0aW9uLCB0aGlzKTsKLSAgICBoaWRlQWxsLnNldFRvb2xUaXBUZXh0KEVudmlyb25tZW50VUlNZXNzYWdlcy5UT09MVElQX1BQQURfQlVUVE9OX0hJREVfQUxMKTsKLSAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKGhpZGVBbGwsIElORk9QT1BfUFBBRF9CVVRUT05fSElERV9BTEwgKTsKLQotICAgIGluaXRpYWxpemVWYWx1ZXMoKTsKLSAgICBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZy5hcHBseURpYWxvZ0ZvbnQoc3VwZXJwYXJlbnQpOwotICAgIHJldHVybiBwYXJlbnQ7Ci0gIH0KLQotIHB1YmxpYyB2b2lkIGhhbmRsZUV2ZW50IChFdmVudCBldmVudCkgCi0gewotICAgIGlmIChzaG93QWxsID09IGV2ZW50LndpZGdldCkKLQkJaGFuZGxlU2hvd0FsbEV2ZW50KCk7Ci0gICAgCi0gICAgZWxzZSBpZiAoIGhpZGVBbGwgPT0gZXZlbnQud2lkZ2V0KQotICAgIAloYW5kbGVIaWRlQWxsRXZlbnQoKTsKLSB9Ci0KLSBwcml2YXRlIHZvaWQgaGFuZGxlU2hvd0FsbEV2ZW50ICgpCi0gewotICAgIEVudW1lcmF0aW9uIGUgPSBjaGVja0JveGVzXy5lbGVtZW50cygpOwotIAlmb3IgKGludCBpPTA7IGUuaGFzTW9yZUVsZW1lbnRzKCk7IGkrKykKLSAgICAJewotICAgIAkJQnV0dG9uIGRpYWxvZyA9IChCdXR0b24pIGUubmV4dEVsZW1lbnQoKTsKLSAgICAJCWRpYWxvZy5zZXRTZWxlY3Rpb24oIGZhbHNlICk7Ci0gICAgCX0gICAgICAgICAgICAgICAgICAgICAgCi0gfQotCi0gcHJpdmF0ZSB2b2lkIGhhbmRsZUhpZGVBbGxFdmVudCAoKQotIHsKLSAJRW51bWVyYXRpb24gZSA9IGNoZWNrQm94ZXNfLmVsZW1lbnRzKCk7Ci0gCWZvciAoaW50IGk9MDsgZS5oYXNNb3JlRWxlbWVudHMoKTsgaSsrKQotICAgIAl7Ci0gICAgCQlCdXR0b24gZGlhbG9nID0gKEJ1dHRvbikgZS5uZXh0RWxlbWVudCgpOwotICAgIAkJZGlhbG9nLnNldFNlbGVjdGlvbiggdHJ1ZSApOwotICAgIAl9Ci0gfQotIAotIHByaXZhdGUgdm9pZCBhZGRPcHRpb25hbERpYWxvZ3NDaGVja0JveGVzICggQ29tcG9zaXRlIHBhcmVudCkKLSAgewotICAgIFBlcnNpc3RlbnRBY3Rpb25EaWFsb2dzQ29udGV4dCBjb250ZXh0ID0gUGVyc2lzdGVudEFjdGlvbkRpYWxvZ3NDb250ZXh0LmdldEluc3RhbmNlKCk7Ci0gICAgQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGVbXSBkaWFsb2dzID0gY29udGV4dC5nZXREaWFsb2dzKCk7Ci0gICAgCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkaWFsb2dzLmxlbmd0aDsgaSsrKSAKLSAgICB7Ci0gICAgICBBY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZSBkaWFsb2cgICA9IGRpYWxvZ3NbaV07Ci0gICAgICBTdHJpbmcgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeSA9IGRpYWxvZy5nZXRDYXRlZ29yeSgpOwotICAgICAgCi0gICAgICBpZiggZGlhbG9nLmdldFNob3dDaGVja2JveCgpICYmICBjYXRlZ29yeSAhPSBudWxsICYmIGNhdGVnb3J5LmVxdWFscyggY2F0ZWdvcnlJZF8pICkKLSAgICAgIHsKLSAgICAJQnV0dG9uIGNoZWNrQm94ID0gY3JlYXRlQ2hlY2tCb3gocGFyZW50LCBkaWFsb2cuZ2V0TmFtZSgpKTsKLSAgICAJY2hlY2tCb3guc2V0VG9vbFRpcFRleHQoIGRpYWxvZy5nZXRUb29sdGlwKCkgKTsKLSAgICAJUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChjaGVja0JveCwgZGlhbG9nLmdldEluZm9wb3AoKSApOwotICAgIAljaGVja0JveGVzXy5wdXQoZGlhbG9nLmdldElkKCksIGNoZWNrQm94KTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0gIHByaXZhdGUgQnV0dG9uIGNyZWF0ZUNoZWNrQm94KCBDb21wb3NpdGUgcGFyZW50LCBTdHJpbmcgdGV4dCApCi0gIHsKLSAgICBCdXR0b24gYnV0dG9uID0gbmV3IEJ1dHRvbiggcGFyZW50LCBTV1QuQ0hFQ0sgKTsKLSAgICBidXR0b24uc2V0VGV4dCggdGV4dCApOwotICAgIHJldHVybiBidXR0b247Ci0gIH0KLQotICAvKioKLSAgICogRG9lcyBhbnl0aGluZyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgZGVmYXVsdCBidXR0b24gaGFzIGJlZW4gcHJlc3NlZC4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHBlcmZvcm1EZWZhdWx0cygpCi0gIHsKLSAgICBzdXBlci5wZXJmb3JtRGVmYXVsdHMoKTsKLSAgICBpbml0aWFsaXplRGVmYXVsdHMoKTsKLSAgfQotCi0gIC8qKgotICAgKiBEbyBhbnl0aGluZyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgT0sgYnV0dG9uIGhhcyBiZWVuIHByZXNzZWQuCi0gICAqICBAcmV0dXJuIHdoZXRoZXIgaXQgaXMgb2theSB0byBjbG9zZSB0aGUgcHJlZmVyZW5jZSBwYWdlCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwZXJmb3JtT2soKQotICB7Ci0gICAgc3RvcmVWYWx1ZXMoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHBlcmZvcm1BcHBseSgpCi0gIHsKLSAgICBwZXJmb3JtT2soKTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIElXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZQotICAgKi8KLSAgcHVibGljIHZvaWQgaW5pdChJV29ya2JlbmNoIHdvcmtiZW5jaCkgIHsgfQotCi0gIC8qKgotICAgKiBJbml0aWFsaXplcyBzdGF0ZXMgb2YgdGhlIGNvbnRyb2xzIHVzaW5nIGRlZmF1bHQgdmFsdWVzCi0gICAqIGluIHRoZSBwcmVmZXJlbmNlIHN0b3JlLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGluaXRpYWxpemVEZWZhdWx0cygpCi0gIHsKLSAgICBQZXJzaXN0ZW50QWN0aW9uRGlhbG9nc0NvbnRleHQgY29udGV4dCA9IFBlcnNpc3RlbnRBY3Rpb25EaWFsb2dzQ29udGV4dC5nZXRJbnN0YW5jZSgpOyAgCi0gICAgRW51bWVyYXRpb24gZSA9IGNoZWNrQm94ZXNfLmtleXMoKTsKLSAgICBmb3IgKGludCBpPTA7IGUuaGFzTW9yZUVsZW1lbnRzKCk7IGkrKykKLSAgICB7Ci0gICAgICBTdHJpbmcgaWQgPSAoU3RyaW5nKSBlLm5leHRFbGVtZW50KCk7ICAgICAgICAgICAgCQotICAgICAgQnV0dG9uIGRpYWxvZyA9IChCdXR0b24pIGNoZWNrQm94ZXNfLmdldChpZCk7Ci0gICAgICBkaWFsb2cuc2V0U2VsZWN0aW9uKGNvbnRleHQuZ2V0RGVmYXVsdEJvb2xlYW4oaWQpKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogSW5pdGlhbGl6ZXMgc3RhdGVzIG9mIHRoZSBjb250cm9scyBmcm9tIHRoZSBwcmVmZXJlbmNlcy4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBpbml0aWFsaXplVmFsdWVzKCkKLSAgewotICAgIFBlcnNpc3RlbnRBY3Rpb25EaWFsb2dzQ29udGV4dCBjb250ZXh0ID0gUGVyc2lzdGVudEFjdGlvbkRpYWxvZ3NDb250ZXh0LmdldEluc3RhbmNlKCk7Ci0gICAgRW51bWVyYXRpb24gZSA9IGNoZWNrQm94ZXNfLmtleXMoKTsKLSAgICBmb3IgKGludCBpPTA7IGUuaGFzTW9yZUVsZW1lbnRzKCk7IGkrKykKLSAgICB7Ci0gICAgICBTdHJpbmcgaWQgPSAoU3RyaW5nKSBlLm5leHRFbGVtZW50KCk7Ci0gICAgICBCdXR0b24gYnV0dG9uID0gKEJ1dHRvbikgY2hlY2tCb3hlc18uZ2V0KGlkKTsKLSAgICAgIGJ1dHRvbi5zZXRTZWxlY3Rpb24oY29udGV4dC5pc0FjdGlvbkRpYWxvZ0VuYWJsZWQoaWQpKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogU3RvcmVzIHRoZSB2YWx1ZXMgb2YgdGhlIGNvbnRyb2xzIGJhY2sgdG8gdGhlIHByZWZlcmVuY2Ugc3RvcmUuCi0gICAqLwotICBwcml2YXRlIHZvaWQgc3RvcmVWYWx1ZXMoKQotICB7Ci0gICAgUGVyc2lzdGVudEFjdGlvbkRpYWxvZ3NDb250ZXh0IGNvbnRleHQgPSBQZXJzaXN0ZW50QWN0aW9uRGlhbG9nc0NvbnRleHQuZ2V0SW5zdGFuY2UoKTsKLQotICAgIEVudW1lcmF0aW9uIGUgPSBjaGVja0JveGVzXy5rZXlzKCk7Ci0gICAgZm9yIChpbnQgaT0wOyBlLmhhc01vcmVFbGVtZW50cygpOyBpKyspCi0gICAgewotICAgICAgU3RyaW5nIGlkID0gKFN0cmluZykgZS5uZXh0RWxlbWVudCgpOwotICAgICAgY29udGV4dC5zZXRBY3Rpb25EaWFsb2dFbmFibGVkKGlkLCAoKEJ1dHRvbiljaGVja0JveGVzXy5nZXQoaWQpKS5nZXRTZWxlY3Rpb24oKSk7Ci0gICAgfQotICB9Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvcmVnaXN0cnkvV2lkZ2V0UmVnaXN0cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvcmVnaXN0cnkvV2lkZ2V0UmVnaXN0cnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFiNWIzMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3JlZ2lzdHJ5L1dpZGdldFJlZ2lzdHJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5yZWdpc3RyeTsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5OwotCi1wdWJsaWMgY2xhc3MgV2lkZ2V0UmVnaXN0cnkgCi17Ci0gIHByaXZhdGUgc3RhdGljIFdpZGdldFJlZ2lzdHJ5IHJlZ2lzdHJ5XzsKLSAgCi0gIHByaXZhdGUgSGFzaHRhYmxlIGVudHJpZXNfOwotICAKLSAgcHJpdmF0ZSBXaWRnZXRSZWdpc3RyeSgpCi0gIHsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBXaWRnZXRSZWdpc3RyeSBpbnN0YW5jZSgpCi0gIHsKLQlpZiAocmVnaXN0cnlfID09IG51bGwpCi0JewotCQlyZWdpc3RyeV8gPSBuZXcgV2lkZ2V0UmVnaXN0cnkoKTsKLQkJcmVnaXN0cnlfLmxvYWQoKTsKLQl9Ci0KLQlyZXR1cm4gcmVnaXN0cnlfOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpCi0gIHsKLSAgICByZWdpc3RyeV8gPSBudWxsOyAgCi0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHBhcmFtIGlkIHRoZSBtZXRob2RJZCB0aGF0IG1heSBoYXZlIFdpZGdldENvbnRyaWJ1dG9yIGFzc29jaWF0ZWQgd2l0aCBpdC4KLSAgICogQHJldHVybiByZXR1cm5zIGEgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5IGlmIG9uZSB3YXMgZGVmaW5lZCBpbiB0aGUgcmVnaXN0cnkuCi0gICAqIE90aGVyd2lzZSBudWxsIGlzIHJldHVybmVkLgotICAgKi8KLSAgcHVibGljIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSBnZXRGYWN0b3J5KCBTdHJpbmcgaWQgKQotICB7Ci0JSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5IGZhY3RvcnkgPSBudWxsOwotCUVudHJ5ICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeSAgID0gKEVudHJ5KWVudHJpZXNfLmdldCggaWQgKTsKLQkKLQlpZiggZW50cnkgIT0gbnVsbCApCi0JewotCSAgdHJ5Ci0JICB7Ci0JCWlmKCBlbnRyeS5mYWN0b3J5XyA9PSBudWxsICkKLQkJewotCQkgIGVudHJ5LmZhY3RvcnlfID0gKElOYW1lZFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSllbnRyeS5lbGVtZW50Xy5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKCAiY2xhc3MiICk7Ci0JCX0KLQkJCi0JCWZhY3RvcnkgPSBlbnRyeS5mYWN0b3J5XzsKLQkgIH0KLQkgIGNhdGNoKCBDb3JlRXhjZXB0aW9uIGV4YyApCi0JICB7Ci0JICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLQkgIH0KLQkgIGNhdGNoKCBUaHJvd2FibGUgZXhjICkKLQkgIHsKLQkJZXhjLnByaW50U3RhY2tUcmFjZSgpOwotCSAgfQotCX0KLQkKLQlyZXR1cm4gZmFjdG9yeTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGxvYWQoKQotICB7Ci0JSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gZWxlbWVudHMgPSBQbGF0Zm9ybS5nZXRFeHRlbnNpb25SZWdpc3RyeSgpLmdldENvbmZpZ3VyYXRpb25FbGVtZW50c0Zvcigib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldFJlZ2lzdHJ5Iik7Ci0JCi0JZW50cmllc18gPSBuZXcgSGFzaHRhYmxlKCk7Ci0JCi0JZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IGVsZW1lbnRzLmxlbmd0aDsgaW5kZXgrKyApCi0JewotCSAgLy8gSWYgdGhpcyBpcyBub3QgYW4gZWxlbWVudCB0aGF0IGtub3cgYWJvdXQgd2Ugd2lsbCBza2lwIGl0LgotCSAgaWYoICFlbGVtZW50c1tpbmRleF0uZ2V0TmFtZSgpLmVxdWFscygid2lkZ2V0RmFjdG9yeSIpICkgY29udGludWU7Ci0JICAKLQkgIEVudHJ5ICAgICAgICAgICAgICAgICBlbnRyeSAgICA9IG5ldyBFbnRyeSgpOwotCSAgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQgID0gZWxlbWVudHNbaW5kZXhdOwotCSAgU3RyaW5nICAgICAgICAgICAgICAgIGlkICAgICAgID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoICJpZCIgKTsKLQkgIFN0cmluZyAgICAgICAgICAgICAgICBtZXRob2RJZCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCAiaW5zZXJ0QmVmb3JlQ29tbWFuZElkIiApOwotCSAgCi0JICBlbnRyeS5lbGVtZW50XyA9IGVsZW1lbnQ7Ci0JICBlbnRyeS5pZF8gICAgICA9IGlkOwotCSAgCi0JICBlbnRyaWVzXy5wdXQoIG1ldGhvZElkLCBlbnRyeSApOwotCX0KLSAgfQotICAKLSAgcHJpdmF0ZSBjbGFzcyBFbnRyeQotICB7Ci0gICAgU3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgIGlkXzsKLQlJQ29uZmlndXJhdGlvbkVsZW1lbnQgICAgICAgICAgZWxlbWVudF87Ci0JSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5IGZhY3RvcnlfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvQWJzdHJhY3RTZWxlY3Rpb25EaWFsb2cuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9BYnN0cmFjdFNlbGVjdGlvbkRpYWxvZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDk0ZWNiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9BYnN0cmFjdFNlbGVjdGlvbkRpYWxvZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0U2VsZWN0aW9uRGlhbG9nIGV4dGVuZHMgU2ltcGxlRGlhbG9nIHsKLQkKLQlwdWJsaWMgQWJzdHJhY3RTZWxlY3Rpb25EaWFsb2coIFNoZWxsIHNoZWxsLCBQYWdlSW5mbyBwYWdlSW5mbykKLQl7Ci0JCXN1cGVyKHNoZWxsLCBwYWdlSW5mbyk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgY2FsbFNldHRlcnMoKSB7Ci0JCS8vIGV4dGVuZGVycyBzaG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRob2QKLQotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldERpc3BsYXlhYmxlU2VsZWN0aW9uU3RyaW5nKCkKLQl7Ci0JCXJldHVybiAiIjsKLQl9Ci0JCi0JcHVibGljIGFic3RyYWN0IElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGdldE9iamVjdFNlbGVjdGlvbigpOwotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvQ2FuRmluaXNoUmVnaXN0cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9DYW5GaW5pc2hSZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODY2NDA5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9DYW5GaW5pc2hSZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLkNvbmRpdGlvbjsKLQotLyoqCi0gKiBUaGlzIGlzIGFuIGludGVyZmFjZSBmb3IgYW4gYWJzdHJhY3QgY2FuIGZpbmlzaCByZWdpc3RyeS4KLSAqIFRoaXMgcmVnaXN0cnkgaXMgdXN1YWxseSBhc3NvY2lhdGUgd2l0aCBhbiBFY2xpcHNlIHdpemFyZC4gIFRoaXMKLSAqIHJlZ2lzdHJ5IGFsbG93IGNvbmRpdGlvbiBvYmplY3QgdG8gYmUgYWRkZWQgdG8gaXQgaW4gb3JkZXIgdG8KLSAqIGRldGVybWluZSBpZiB0aGUgd2l6YXJkIGNhbiBmaW5pc2ggb3Igbm90LgotICoKLSAqLwotcHVibGljIGludGVyZmFjZSBDYW5GaW5pc2hSZWdpc3RyeQotewotICAvKioKLSAgICogQWRkIGEgY29uZGl0aW9uIG9iamVjdCB0byB0aGUgcmVnaXN0cnkuCi0gICAqIEBwYXJhbSBjb25kaXRpb24gdGhlIGNvbmRpdGlvbi4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZENvbmRpdGlvbiggQ29uZGl0aW9uIGNvbmRpdGlvbiApOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL0NvbW1hbmRXaWRnZXRCaW5kaW5nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvQ29tbWFuZFdpZGdldEJpbmRpbmcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjFjZmMzMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvQ29tbWFuZFdpZGdldEJpbmRpbmcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnRGYWN0b3J5RmFjdG9yeTsKLQotCi1wdWJsaWMgaW50ZXJmYWNlIENvbW1hbmRXaWRnZXRCaW5kaW5nIGV4dGVuZHMgQ29tbWFuZEZyYWdtZW50RmFjdG9yeUZhY3RvcnkKLXsKLSAgLyoqCi0gICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgYnkgZXh0ZW5zaW9ucyB0byByZWdpc3RlciB0aGVpciB3aWRnZXRzIHdpdGgKLSAgICogQ29tbWFuZEZyYWdtZW50cwotICAgKiAKLSAgICogQHBhcmFtIHdpZGdldFJlZ2lzdHJ5Ci0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlcldpZGdldE1hcHBpbmdzKCBXaWRnZXRSZWdpc3RyeSB3aWRnZXRSZWdpc3RyeSApOwotICAKLSAgLyoqCi0gICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgYnkgZXh0ZW5pb25zIHRvIHJlZ2lzdGVyIHRoZSBkYXRhIG1hcHBpbmdzCi0gICAqIHRoYXQgdGhlaXIgd2lkZ2V0cyB1c2UuCi0gICAqIAotICAgKiBAcGFyYW0gZGF0YVJlZ2lzdHJ5Ci0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyggRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhUmVnaXN0cnkgKTsKLSAgCi0gIC8qKgotICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGJ5IGV4dGVuc2lvbnMgdG8gcmVnaXN0ZXIgY29uZGl0aW9uIG9iamVjdHMKLSAgICogdGhhdCBjb250cm9sIGlmIHRoZSB3aXphcmQgY2FuIGZpbmlzaCBvciBub3QuCi0gICAqIAotICAgKiBAcGFyYW0gY2FuRmluaXNoUmVnaXN0cnkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyQ2FuRmluaXNoKCBDYW5GaW5pc2hSZWdpc3RyeSBjYW5GaW5pc2hSZWdpc3RyeSApOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL0NvbW1hbmRXaWRnZXRCaW5kaW5nTGlzdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL0NvbW1hbmRXaWRnZXRCaW5kaW5nTGlzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzE5ODA3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9Db21tYW5kV2lkZ2V0QmluZGluZ0xpc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNlcXVlbmNlRnJhZ21lbnQ7Ci0KLQotcHVibGljIGNsYXNzIENvbW1hbmRXaWRnZXRCaW5kaW5nTGlzdCBpbXBsZW1lbnRzIENvbW1hbmRXaWRnZXRCaW5kaW5nCi17Ci0gIHByaXZhdGUgVmVjdG9yICAgICAgICAgICAgICAgICBiaW5kaW5nc187Ci0gIHByaXZhdGUgVmVjdG9yICAgICAgICAgICAgICAgICBmcmFnbWVudHNfOwotICBwcml2YXRlIENvbW1hbmRGcmFnbWVudEZhY3RvcnkgZmFjdG9yeV87Ci0gIAotICAvKioKLSAgICogVGhpcyBDb21tYW5kV2lkZ2V0QmluZGluZyBjb21iaW5lcyBhIGxpc3Qgb2YgQ29tbWFuZFdpZGdldEJpbmRpbmdzLgotICAgKiBUaGVyZSBzaG91bGQgYmUgdGhlIHNhbWUgbnVtYmVyIG9mIGVudHJpZXMgaW4gYm90aCB0aGUgYmluZGluZ3MKLSAgICogcGFyYW1ldGVyIGFuZCB0aGUgZnJhZ21lbnRzIHBhcmFtZXRlci4gIEVudHJpZXMgaW4gZWl0aGVyIG9mIHRoZQotICAgKiBiaW5kaW5ncyBmb3IgZnJhZ21lbnRzIHZlY3RvcnMgYXJlIGFsbG93ZWQgdG8gYmUgbnVsbC4KLSAgICogCi0gICAqIEBwYXJhbSBiaW5kaW5ncyAgIHRoZSBiaW5kaW5ncyB0byBjb21iaW5lLgotICAgKiBAcGFyYW0gZnJhZ21lbnRzICBUaGVzZSBmcmFnbWVudHMgd2lsbCBiZSBpbnRlcnNwZXJzZWQgd2l0aCB0aGUKLSAgICogICAgICAgICAgICAgICAgICAgZnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIGJpbmRpbmcuICBUaGUgZmlyc3QKLSAgICogICAgICAgICAgICAgICAgICAgZnJhZ21lbnQgd2lsbCBiZSBwdXQgYmVmb3JlIHRoZSBmcmFnbWVudCBmcm9tIHRoZQotICAgKiAgICAgICAgICAgICAgICAgICBmaXJzdCBiaW5kaW5nLiAgRm9sbG93aW5nIHRoaXMgd2lsbCBiZSB0aGUgc2Vjb25kCi0gICAqICAgICAgICAgICAgICAgICAgIGZyYWdtZW50IGZyb20gdGhlIGZyYWdtZW50cyB2ZWN0b3IgYW5kIHRoZW4gdGhlCi0gICAqICAgICAgICAgICAgICAgICAgIHNlY29uZCBmcmFnbWVudCBmcm9tIHRoZSBiaW5kaW5ncyB2ZWN0b3IsIGV0Yy4KLSAgICovCi0gIHB1YmxpYyBDb21tYW5kV2lkZ2V0QmluZGluZ0xpc3QoIFZlY3RvciBiaW5kaW5ncywgVmVjdG9yIGZyYWdtZW50cyApCi0gIHsKLSAgICBiaW5kaW5nc18gID0gYmluZGluZ3M7IAotICAgIGZyYWdtZW50c18gPSBmcmFnbWVudHM7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyNyZWdpc3RlckNhbkZpbmlzaChvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5DYW5GaW5pc2hSZWdpc3RyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyQ2FuRmluaXNoKENhbkZpbmlzaFJlZ2lzdHJ5IGNhbkZpbmlzaFJlZ2lzdHJ5KSAKLSAgewotICAgIGludCBsZW5ndGggPSBiaW5kaW5nc18uc2l6ZSgpOwotICAgIAotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKQotICAgIHsKLSAgICAgIENvbW1hbmRXaWRnZXRCaW5kaW5nIGJpbmRpbmcgPSAoQ29tbWFuZFdpZGdldEJpbmRpbmcpYmluZGluZ3NfLmVsZW1lbnRBdCggaW5kZXggKTsKLSAgICAgIAotICAgICAgaWYoIGJpbmRpbmcgIT0gbnVsbCApIGJpbmRpbmcucmVnaXN0ZXJDYW5GaW5pc2goIGNhbkZpbmlzaFJlZ2lzdHJ5ICk7Ci0gICAgfQotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmcjcmVnaXN0ZXJEYXRhTWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhTWFwcGluZ3MoRGF0YU1hcHBpbmdSZWdpc3RyeSBkYXRhUmVnaXN0cnkpIAotICB7Ci0gICAgaW50IGxlbmd0aCA9IGJpbmRpbmdzXy5zaXplKCk7Ci0gICAgCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApCi0gICAgewotICAgICAgQ29tbWFuZFdpZGdldEJpbmRpbmcgYmluZGluZyA9IChDb21tYW5kV2lkZ2V0QmluZGluZyliaW5kaW5nc18uZWxlbWVudEF0KCBpbmRleCApOwotICAgICAgaWYoIGJpbmRpbmcgIT0gbnVsbCApIGJpbmRpbmcucmVnaXN0ZXJEYXRhTWFwcGluZ3MoIGRhdGFSZWdpc3RyeSApOwotICAgIH0KLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS53aWRnZXRzLkNvbW1hbmRXaWRnZXRCaW5kaW5nI3JlZ2lzdGVyV2lkZ2V0TWFwcGluZ3Mob3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLndpZGdldHMuV2lkZ2V0UmVnaXN0cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlcldpZGdldE1hcHBpbmdzKFdpZGdldFJlZ2lzdHJ5IHdpZGdldFJlZ2lzdHJ5KSAKLSAgewotICAgIGludCBsZW5ndGggPSBiaW5kaW5nc18uc2l6ZSgpOwotICAgIAotICAgIGZvciggaW50IGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKQotICAgIHsKLSAgICAgIENvbW1hbmRXaWRnZXRCaW5kaW5nIGJpbmRpbmcgPSAoQ29tbWFuZFdpZGdldEJpbmRpbmcpYmluZGluZ3NfLmVsZW1lbnRBdCggaW5kZXggKTsKLSAgICAgIGlmKCBiaW5kaW5nICE9IG51bGwgKSBiaW5kaW5nLnJlZ2lzdGVyV2lkZ2V0TWFwcGluZ3MoIHdpZGdldFJlZ2lzdHJ5ICk7Ci0gICAgfQotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50RmFjdG9yeUZhY3RvcnkjY3JlYXRlKCkKLSAgICovCi0gIHB1YmxpYyBDb21tYW5kRnJhZ21lbnRGYWN0b3J5IGNyZWF0ZSgpIAotICB7Ci0gICAgaWYoIGZhY3RvcnlfID09IG51bGwgKQotICAgIHsKLSAgICAgIGZhY3RvcnlfID0gbmV3IENvbW1hbmRGcmFnbWVudEZhY3RvcnkoKQotICAgICAgICB7Ci0gICAgICAgICAgcHVibGljIENvbW1hbmRGcmFnbWVudCBjcmVhdGUoKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFNlcXVlbmNlRnJhZ21lbnQgZnJhZ21lbnRMaXN0ID0gbmV3IFNlcXVlbmNlRnJhZ21lbnQoKTsKLSAgICAgICAgICAgIGludCAgICAgICAgICAgICAgbGVuZ3RoICAgICAgID0gYmluZGluZ3NfLnNpemUoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCA9IChDb21tYW5kRnJhZ21lbnQpZnJhZ21lbnRzXy5lbGVtZW50QXQoIGluZGV4ICk7Ci0gICAgICAgICAgICAgIAotICAgICAgICAgICAgICBpZiggZnJhZ21lbnQgIT0gbnVsbCApCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmcmFnbWVudExpc3QuYWRkKCBmcmFnbWVudCApOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIAotICAgICAgICAgICAgICBDb21tYW5kV2lkZ2V0QmluZGluZyBiaW5kaW5nID0gKENvbW1hbmRXaWRnZXRCaW5kaW5nKWJpbmRpbmdzXy5lbGVtZW50QXQoIGluZGV4ICk7Ci0gICAgICAgICAgICAgIAotICAgICAgICAgICAgICBpZiggYmluZGluZyAhPSBudWxsICkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZyYWdtZW50TGlzdC5hZGQoIGJpbmRpbmcuY3JlYXRlKCkuY3JlYXRlKCkgKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICByZXR1cm4gZnJhZ21lbnRMaXN0OwotICAgICAgICAgIH0KLSAgICAgICAgfTsgCi0gICAgfQotICAgIAotICAgIHJldHVybiBmYWN0b3J5XzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL0N1cnJlbnRQYWdlQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL0N1cnJlbnRQYWdlQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzg1NWQ0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9DdXJyZW50UGFnZUNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuSVdpemFyZFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotCi0vKioKLSAqIFRoaXMgQ29tbWFuZCBjYW4gYmUgdXNlZCB0byBnZXQgdGhlIGN1cnJlbnQgcGFnZS4KLSAqIFVzZSBvZiB0aGlzIGNsYXNzIGlzIG5vdCByZWNvbW1lbmRlZC4KLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBDdXJyZW50UGFnZUNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbgotewotICBwcml2YXRlIFdpemFyZFBhZ2VNYW5hZ2VyIHBhZ2VNYW5hZ2VyXzsKLSAgCi0gIHB1YmxpYyBDdXJyZW50UGFnZUNvbW1hbmQoIFdpemFyZFBhZ2VNYW5hZ2VyIHBhZ2VNYW5hZ2VyICkKLSAgewotICAgIHBhZ2VNYW5hZ2VyXyA9IHBhZ2VNYW5hZ2VyOwotICB9Ci0gIAotICBwdWJsaWMgSVdpemFyZFBhZ2UgZ2V0Q3VycmVudFBhZ2UoKQotICB7Ci0gICAgcmV0dXJuIHBhZ2VNYW5hZ2VyXy5nZXRDdXJyZW50UGFnZSgpOwotICB9Ci0KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgaW5mbykgdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbgotICB7Ci0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9EYXRhT2JqZWN0Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL0RhdGFPYmplY3RDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0NTBhZDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL0RhdGFPYmplY3RDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3Jrcy5kYXRhbW9kZWwuQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb247Ci0KLQotLyoqCi0gKiBUaGlzIENvbW1hbmQgY2FuIGJlIHVzZSB0byBnZXQgdGhlIHJlc3VsdGluZyBkYXRhIG9iamVjdCBmb3IKLSAqIHRoaXMgd2l6YXJkLgotICoKLSAqLwotcHVibGljIGNsYXNzIERhdGFPYmplY3RDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLSAgcHJpdmF0ZSBPYmplY3QgZGF0YU9iamVjdF87Ci0gIAotICBwdWJsaWMgdm9pZCBzZXREYXRhT2JqZWN0KCBPYmplY3Qgb2JqZWN0ICkKLSAgewotICAgIGRhdGFPYmplY3RfID0gb2JqZWN0OwotICB9Ci0gIAotICBwdWJsaWMgT2JqZWN0IGdldERhdGFPYmplY3QoKQotICB7Ci0gICAgcmV0dXJuIGRhdGFPYmplY3RfOwotICB9Ci0KLSAgcHVibGljIElTdGF0dXMgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgaW5mbykgdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbgotICB7Ci0gICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9EaWFsb2dEYXRhRXZlbnRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvRGlhbG9nRGF0YUV2ZW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MmZkMTlkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9EaWFsb2dEYXRhRXZlbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHM7Ci0KLQotLyoqCi0gKiBEeW5hbWljIHdpemFyZCBpbXBsZW1lbnRhdGlvbnMgdGhhdCB3YW50IHRvIGNyZWF0ZSBkaWZmZXJlbnQKLSAqIGtpbmRzIG9mIHdpemFyZCBwYWdlcyBuZWVkIHRvIGltcGxlbWVudCB0aGlzIGludGVyZmFjZS4KLSAqIFRoZSBXaXphcmRQYWdlRmFjdG9yeSByZXR1cm5zIGEgY2xhc3Mgb2YgdGhpcyB0eXBlLgotICoKLSAqLwotcHVibGljIGludGVyZmFjZSBEaWFsb2dEYXRhRXZlbnRzCi17Ci0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBXaWRnZXREYXRhRXZlbnRzIG9iamVjdCBjcmVhdGVkIGJ5IHRoZSBhZGRDb250cm9scwotICAgKiBtZXRob2Qgb2YgYSBXaWRnZXRDb250cmlidXRvci4KLSAgICovCi0gIHB1YmxpYyBXaWRnZXREYXRhRXZlbnRzIGdldERhdGFFdmVudHMoKTsKLSAgCi0gIC8qKgotICAgKiBWYWxpZGF0ZXMgdGhhdCB0aGlzIHdpemFyZCBwYWdlIGlzIGNvbXBsZXRlLiAKLSAgICoKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZhbGlkYXRlUGFnZVRvU3RhdHVzKCk7Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9EeW5hbWljV2l6YXJkLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvRHluYW1pY1dpemFyZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNmE3YTIyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9EeW5hbWljV2l6YXJkLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjIzICAgMTI5MjMyIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDYwODIyICAgMTU0NzUwIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDcwNTI5ICAgMTg3NzgwIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0czsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXhlY3V0YWJsZUV4dGVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLklXaXphcmRQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JTmV3V2l6YXJkOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2g7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbnRleHQuUGVyc2lzdGVudFJlc291cmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uQ29uZGl0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YUZsb3dNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LlNlcXVlbmNlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuU2ltcGxlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuRWNsaXBzZUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5FbnZpcm9ubWVudFVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLmVjbGlwc2UuRWNsaXBzZVN0YXR1c0hhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLnJlZ2lzdHJ5LldpZGdldFJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci0KLQotLyoqCi0gKiBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gYWRkIGR5bmFtaWMgd2l6YXJkcyBpbnRvIEVjbGlwc2UuICBXaGVuIGFkZGluZwotICogYSBkeW5hbWljIHdpemFyZCBpbnRvIGVjbGlwc2UgdHdvIGVudHJpZXMgbmVlZCB0byBiZSBtYWRlIGluIHRoZSBwbHVnaW4ueG1sCi0gKiBmaWxlLiAgVGhpcyBmaXJzdCBlbnRyeSB0ZWxscyBFY2xpcHNlIHRoYXQgYSBuZXcgd2l6YXJkIHNob3VsZCBiZSBhZGRlZAotICogYW5kIGl0IHJlZmVyZW5jZXMgdGhpcyBjbGFzcy4gIFRoZSBzZWNvbmQgZW50cnkgc3BlY2lmaWVzIGRldGFpbGVkIGluZm9ybWF0aW9uCi0gKiB0aGF0IGlzIHNwZWNpZmljIHRvIHRoZSB3aXphcmQgdG8gYmUgYWRkZWQuICBUaGVzZSB0d28gcGx1Z2luLnhtbCBlbnRyaWVzCi0gKiBhcmUgbGlua2VkIHRvZ2V0aGVyIHZpYSB0aGVpciBpZCBhdHRyaWJ1dGVzLiAgRm9yIGV4YW1wbGUgaGVyZSBpcyBhbgotICogZW50cnkgdGhhdCByZWdpc3RlcnMgYSBuZXcgd2l6YXJkIHdpdGggZWNsaXBzZS4gIE5vdGUgdGhlIGNsYXNzIGF0dHJpYnV0ZQotICogcmVmZXJlbmNlcyB0aGlzIGNsYXNzLgotICogPHByZT4KLSAqICAgJmx0O2V4dGVuc2lvbgotICogICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5uZXdXaXphcmRzIiZndDsKLSAqICAgICAmbHQ7d2l6YXJkCi0gKiAgICAgICAgICAgbmFtZT0iJVBMVUdJTl9ORVdfV0laQVJEX05BTUVfV1NfQ0xJRU5UIgotICogICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3Rvb2wxNi9uZXdjbGllbnRfd2Vic2Vydl93aXouZ2lmIgotICogICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5qc3Qud3MudWkubmV3IgotICogICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5EeW5hbWljV2l6YXJkIgotICogICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5jbGllbnR3aXphcmQiJmd0OwotICogICAgICAgICZsdDtkZXNjcmlwdGlvbiZndDsKLSAqICAgICAgICAgICAlUExVR0lOX05FV19XSVpBUkRfREVTQ19XU19DTElFTlQKLSAqICAgICAgICAmbHQ7L2Rlc2NyaXB0aW9uJmd0OwotICogICAgICAgICZsdDtzZWxlY3Rpb24KLSAqICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlIiZndDsKLSAqICAgICAgICAmbHQ7L3NlbGVjdGlvbiZndDsKLSAqICAgICAmbHQ7L3dpemFyZCZndDsKLSAqICAgJmx0Oy9leHRlbnNpb24mZ3Q7Ci0gKgotICogPC9wcmU+Ci0gKiBIZXJlIGlzIHRoZSBkeW5hbWljV2l6YXJkIGVudHJ5IGZvciB0aGlzIHBhcnRpY3VsYXIgd2l6YXJkLiAgVGhpcyBpZCBhdHRyaWJ1dGVzCi0gKiBsaW5rIHRoZXNlIHR3byBlbnRyaWVzIHRvZ2V0aGVyLiAgVGhlIGNsYXNzIGF0dHJpYnV0ZSBtdXN0IHNwZWNpZnkgYSBjbGFzcyB0aGF0Ci0gKiBpbXBsZW1lbnRzIHRoZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5Db21tYW5kV2lkZ2V0QmluZGluZyBpbnRlcmZhY2UuICBUaGlzCi0gKiBpbnRlcmZhY2Ugc3BlY2lmaWVzIHdoYXQgdGhlIFVJIHNob3VsZCBsb29rIGxpa2UgYW5kIHRoZSBjb21tYW5kcyB0aGUgc2hvdWxkCi0gKiBiZSBleGVjdXRlZCBpbiB0aGUgd2l6YXJkLgotICogCi0gKiA8cHJlPgotICogICAmbHQ7ZXh0ZW5zaW9uCi0gKiAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5keW5hbWljV2l6YXJkIiZndDsKLSAqICAgICAmbHQ7ZHluYW1pY1dpemFyZAotICogICAgICAgICAgIGljb25iYW5uZXI9Imljb25zL2Z1bGwvd2l6YmFuL3dlYnNlcnZpY2VzY2xpZW50X3dpei5naWYiCi0gKiAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53aWRnZXRzLmJpbmRpbmcuQ2xpZW50V2lkZ2V0QmluZGluZyIKLSAqICAgICAgICAgICB0aXRsZT0iJVdJWkFSRF9USVRMRV9XU0MiCi0gKiAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS53aXphcmQuY2xpZW50LmNsaWVudHdpemFyZCImZ3Q7Ci0gKiAgICAgJmx0Oy9keW5hbWljV2l6YXJkJmd0OwotICogICAmbHQ7L2V4dGVuc2lvbiZndDsKLSAqIDwvcHJlPgotICoKLSAqLwotcHVibGljIGNsYXNzIER5bmFtaWNXaXphcmQgZXh0ZW5kcyBXaXphcmQgaW1wbGVtZW50cyBJTmV3V2l6YXJkLCBJRXhlY3V0YWJsZUV4dGVuc2lvbgotewotICBwcml2YXRlICAgU3RyaW5nICAgICAgICAgICAgICAgICAgaWNvbkJhbm5lck5hbWVfOwotICBwcml2YXRlICAgQnVuZGxlICAgICAgICAgICAgICAgICAgYnVuZGxlXzsKLSAgcHJpdmF0ZSAgIFNpbXBsZUNhbkZpbmlzaFJlZ2lzdHJ5IGNhbkZpbmlzaFJlZ2lzdHJ5XzsgCi0gIHByaXZhdGUgICBTdHJpbmcgICAgICAgICAgICAgICAgICB3aXphcmRUaXRsZV87Ci0gIHByaXZhdGUgICBEYXRhT2JqZWN0Q29tbWFuZCAgICAgICBkYXRhT2JqZWN0Q29tbWFuZF8gPSBudWxsOwotICBwcml2YXRlICAgV2l6YXJkUGFnZU1hbmFnZXIgICAgICAgcGFnZU1hbmFnZXJfOwotICAKLSAgcHJvdGVjdGVkIElDb25maWd1cmF0aW9uRWxlbWVudCAgIHdpemFyZEVsZW1lbnRfOwotICBwcm90ZWN0ZWQgSUNvbmZpZ3VyYXRpb25FbGVtZW50ICAgb3JpZ2luYWxFbGVtZW50XzsKLSAgcHJvdGVjdGVkIENvbW1hbmRXaWRnZXRCaW5kaW5nICAgIGNvbW1hbmRXaWRnZXRCaW5kaW5nXzsKLSAgCi0gIHB1YmxpYyBEeW5hbWljV2l6YXJkKCkKLSAgewotCXNldE5lZWRzUHJvZ3Jlc3NNb25pdG9yKHRydWUpOwotICB9Ci0gIAotICAvKioKLSAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIER5bmFtaWMgd2l6YXJkIGlzIGNyZWF0ZWQgYnkgZWNsaXBzZS4KLSAgICogV2UgbmVlZCB0byBmaW5kIGEgZHluYW1pY1dpemFyZCBleHRlbnNpb24gcG9pbnQgdGhhdCBtYXRjaGVzIHRoZSBpZAotICAgKiBmb3IgdGhpcyB3aXphcmQuICBPbmNlIHRoZSBleHRlbnNpb24gcG9pbnQgaXMgZm91bmQgaXQgd2lsbCBjb250YWluCi0gICAqIGEgcmVmZXJlbmNlIHRvIGEgQ29tbWFuZFdpZGdldEJpbmRpbmcgY2xhc3Mgd2hpY2ggZGVmaW5lcyB0aGUgd2lkZ2V0cyAKLSAgICogYW5kIGNvbW1hbmRzIGZvciB0aGlzIHdpemFyZC4KLSAgICogCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeGVjdXRhYmxlRXh0ZW5zaW9uI3NldEluaXRpYWxpemF0aW9uRGF0YShvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50LCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuT2JqZWN0KQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SW5pdGlhbGl6YXRpb25EYXRhKCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgY29uZmlnLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0ICAgICAgICAgICAgICAgIGRhdGEgKQotICAgIHRocm93cyBDb3JlRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgd2l6YXJkSWQgICA9IGNvbmZpZy5nZXRBdHRyaWJ1dGUoICJpZCIgKTsgLy8kTk9OLU5MUy0xJAotICAgIAotICAgIHNldEluaXRpYWxEYXRhKCB3aXphcmRJZCApOwotICAgIG9yaWdpbmFsRWxlbWVudF8gPSBjb25maWc7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgaWYgdGhlIER5bmFtaWMgV2l6YXJkIGlzIGJlaW5nCi0gICAqIGxhdW5jaGVkIHRocm91Z2ggc29tZSBvdGhlciBtZWNoYW5pc2Ugb3RoZXIgdGhhbiB0aGUgRWNsaXBzZSBOZXcgV2l6YXJkCi0gICAqIG1lY2hhbmlzbS4KLSAgICogCi0gICAqIEBwYXJhbSBiaW5kaW5nICAgICAgICB0aGUgY29tbWFuZCB3aWRnZXQgYmluZGluZyBmb3IgdGhpcyB3aXphcmQuCi0gICAqIEBwYXJhbSBkZXNjcmlwdG9yICAgICB0aGUgcGx1Z2luIGRlc2NyaXB0b3Igd2hlcmUgdGhlIGljb24gYmFubmVyIGlzCi0gICAqICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGVkLgotICAgKiBAcGFyYW0gaWNvbkJhbm5lclBhdGggdGhlIGljb24gYmFubmVyIHBhdGggZm9yIHRoaXMgd2l6YXJkLiAgVGhlIHBhdGgKLSAgICogICAgICAgICAgICAgICAgICAgICAgIGlzIHJlbGF0aXZlIHRvIHRoZSBwbHVnaW4gc3BlY2lmaWVkIGJ5IHRoZSAKLSAgICogICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IgcGFyYW1ldGVyLgotICAgKiBAcGFyYW0gd2l6YXJkVGl0bGUgICAgdGhlIHdpemFyZCB0aXRsZQotICAgKiAKLSAgICogQGRlcHJlY2F0ZWQgVXNlIGVpdGhlciBzZXRJbml0aWFsRGF0YSh3aXphcmRJZCkgb3IKLSAgICogICAgICAgICAgICAgICAgICAgICAgICBzZXRJbml0aWFsRGF0YSh3aXphcmRJZCwgYnVuZGxlLCBpY29uQmFubmVyUGF0aCwgd2l6YXJkVGl0bGUgKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SW5pdGlhbERhdGEoIENvbW1hbmRXaWRnZXRCaW5kaW5nIGJpbmRpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdW5kbGUgICAgICAgICAgICAgICBidW5kbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICAgICAgICBpY29uQmFubmVyUGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyAgICAgICAgICAgICAgIHdpemFyZFRpdGxlICkKLSAgewotICAgIGNvbW1hbmRXaWRnZXRCaW5kaW5nXyA9IGJpbmRpbmc7Ci0gICAgYnVuZGxlXyAgICAgICAgICAgICAgID0gYnVuZGxlOwotICAgIGljb25CYW5uZXJOYW1lXyAgICAgICA9IGljb25CYW5uZXJQYXRoOwotICAgIHdpemFyZFRpdGxlXyAgICAgICAgICA9IHdpemFyZFRpdGxlOwotICB9Ci0gIAotICAvKioKLSAgICogU2V0cyB0aGUgaW5pdGlhbCBkYXRhIGJhc2VkIG9uIHRoZSBkeW5hbWljIHdpemFyZCBpZC4KLSAgICogCi0gICAqIEBwYXJhbSB3aXphcmRJZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SW5pdGlhbERhdGEoIFN0cmluZyB3aXphcmRJZCApIHRocm93cyBDb3JlRXhjZXB0aW9uCi0gIHsKLSAgICBzZXRJbml0aWFsRGF0YSh3aXphcmRJZCwgbnVsbCwgbnVsbCwgbnVsbCApOwotICB9Ci0gIAotICAvKioKLSAgICogU2V0cyB0aGUgaW5pdGlhbCBkYXRhIGJhc2VkIG9uIHRoZSBkeW5hbWljIHdpemFyZCBpZC4KLSAgICogCi0gICAqIEBwYXJhbSB3aXphcmRJZCB0aGUgSUQgb2YgdGhlIHdpemFyZC4KLSAgICogQHBhcmFtIGJ1bmRsZSB0aGUgYnVuZGxlIHVzZWQgdG8gZmluZCBhbiBpY29uIGJhbm5lci4gIENhbiBiZSBudWxsIGlmCi0gICAqIG5vIGljb24gYmFubmVyIGlzIHNwZWNpZmllZC4KLSAgICogQHBhcmFtIGljb25CYW5uZXJQYXRoIHRoZSBwYXRoIHJlbGF0aXZlIHRvIHRoZSBidW5kbGUgc3BlY2lmaWVkLgotICAgKiBAcGFyYW0gd2l6YXJkVGl0bGUgdGhlIHRpdGxlIG9mIHRoZSB3aXphcmQuCi0gICAqIAotICAgKiBOb3RlOiBub3JtYWxseSB0aGUgd2l6YXJkIGFzc29jaWF0ZWQgd2l0aCBhIHdpemFyZElkIHdpbGwgaGF2ZSBhbgotICAgKiBpY29uIGJhbm5lciBhbmQgYSB0aXRsZS4gIFRoZSBwYXJhbWV0ZXJzIG9uIHRoaXMgbWV0aG9kIGFsbG93IHRoZSBjYWxsZXIKLSAgICogdG8gb3ZlcnJpZGUgdGhlc2UgdmFsdWVzLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SW5pdGlhbERhdGEoIFN0cmluZyB3aXphcmRJZCwgQnVuZGxlIGJ1bmRsZSwgU3RyaW5nIGljb25CYW5uZXJQYXRoLCBTdHJpbmcgd2l6YXJkVGl0bGUgKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotICB7Ci0gICAgSUV4dGVuc2lvblJlZ2lzdHJ5ICAgIHJlZ2lzdHJ5ICAgICAgPSBQbGF0Zm9ybS5nZXRFeHRlbnNpb25SZWdpc3RyeSgpOwotICAgIElFeHRlbnNpb25Qb2ludCAgICAgICBwb2ludCAgICAgICAgID0gcmVnaXN0cnkuZ2V0RXh0ZW5zaW9uUG9pbnQoIm9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5keW5hbWljV2l6YXJkIik7IC8vJE5PTi1OTFMtMSQKLSAgICBJRXh0ZW5zaW9uW10gICAgICAgICAgZXh0ZW5zaW9ucyAgICA9IHBvaW50LmdldEV4dGVuc2lvbnMoKTsKLSAgICAKLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgZXh0ZW5zaW9ucy5sZW5ndGg7IGluZGV4KyspIAotICAgIHsKLSAgICAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGVsZW1lbnRzID0gZXh0ZW5zaW9uc1tpbmRleF0uZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzKCk7Ci0gICAgICAKLSAgICAgIGlmKCBlbGVtZW50cy5sZW5ndGggPT0gMSAmJiBlbGVtZW50c1swXS5nZXROYW1lKCkuZXF1YWxzKCAiZHluYW1pY1dpemFyZCIpICkgIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIGlkID0gZWxlbWVudHNbMF0uZ2V0QXR0cmlidXRlKCAiaWQiICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgCi0gICAgICAgIGlmKCBpZCAhPSBudWxsICYmIGlkLmVxdWFscyggd2l6YXJkSWQgKSApCi0gICAgICAgIHsKLSAgICAgICAgICB3aXphcmRFbGVtZW50XyA9IGVsZW1lbnRzWzBdOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgICAgIAotICAgIGJ1bmRsZV8gICAgICAgICA9IGJ1bmRsZTsKLSAgICBpY29uQmFubmVyTmFtZV8gPSBpY29uQmFubmVyUGF0aDsKLSAgICB3aXphcmRUaXRsZV8gICAgPSB3aXphcmRUaXRsZTsKLSAgICAKLSAgICBpZiggd2l6YXJkRWxlbWVudF8gPT0gbnVsbCApCi0gICAgewotICAgICAgU3RhdHVzIHN0YXR1cyA9IG5ldyBTdGF0dXMoIFN0YXR1cy5FUlJPUiwgImlkIiwgMCwgTkxTLmJpbmQoRW52aXJvbm1lbnRVSU1lc3NhZ2VzLk1TR19FUlJPUl9XSVpBUkRfSURfTk9UX0ZPVU5ELCBuZXcgU3RyaW5nW117IHdpemFyZElkfSkgLCBudWxsICk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIHRocm93IG5ldyBDb3JlRXhjZXB0aW9uKCBzdGF0dXMgKTsKLSAgICB9Ci0gIH0KLSAgICAKLSAgLyoqCi0gICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgZWNsaXBzZSBmcmFtZXdvcmsgdG8gaW5pdGlhbGl6ZSB0aGUKLSAgICogd2l6YXJkLiAKLSAgICogCi0gICAqIE5vdGU6IGlmIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBwcm9ncmFtYXRpY2FsbHkoaWUuIG5vdCBieSB0aGUgZWNsaXBzZQotICAgKiBmcmFtZXdvcmsuKSBvbmUgb2YgdGhlIHNldEluaXRhbERhdGEgbWV0aG9kcyBuZWVkcyB0byBiZSBjYWxsZWQgYmVmb3JlIHRoaXMKLSAgICogbWV0aG9kIGlzIGludm9rZWQuCi0gICAqIAotICAgKiBAcGFyYW0gd29ya2JlbmNoIHRoZSBlY2xpcHNlIHdvcmtiZW5jaAotICAgKiBAcGFyYW0gc2VsZWN0aW9uIHRoZSBpbml0aWFsIHNlbGVjdGlvbiB0aGF0IHRoZSB1c2VyIGhhcyBtYWRlIHdpdGhpbgotICAgKiAgICAgICAgICAgICAgICAgIGVjbGlwc2UuCi0gICAqLwotICBwdWJsaWMgdm9pZCBpbml0ICggSVdvcmtiZW5jaCB3b3JrYmVuY2gsIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbiApCi0gIHsgICAgCi0gICAgUGVyc2lzdGVudFJlc291cmNlQ29udGV4dCBjb250ZXh0ICAgICAgICA9IFBlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQuZ2V0SW5zdGFuY2UoKTsKLSAgICBFY2xpcHNlU3RhdHVzSGFuZGxlciAgICAgIGhhbmRsZXIgICAgICAgID0gbmV3IEVjbGlwc2VTdGF0dXNIYW5kbGVyKCk7Ci0gICAgRWNsaXBzZUVudmlyb25tZW50ICAgICAgICBlbnZpcm9ubWVudCAgICA9IG5ldyBFY2xpcHNlRW52aXJvbm1lbnQoIG51bGwsIGNvbnRleHQsIGhhbmRsZXIgKTsKLSAgICAKLSAgICBEYXRhTWFwcGluZ1JlZ2lzdHJ5SW1wbCBkYXRhUmVnaXN0cnlfICAgPSBuZXcgRGF0YU1hcHBpbmdSZWdpc3RyeUltcGwoKTsKLSAgICBTaW1wbGVXaWRnZXRSZWdpc3RyeSAgICB3aWRnZXRSZWdpc3RyeV8gPSBuZXcgU2ltcGxlV2lkZ2V0UmVnaXN0cnkoKTsgIAotICAgIERhdGFGbG93TWFuYWdlciAgICAgICAgIGRhdGFNYW5hZ2VyICAgICA9IG5ldyBEYXRhRmxvd01hbmFnZXIoIGRhdGFSZWdpc3RyeV8sIGVudmlyb25tZW50ICk7Ci0gICAgCi0gICAgdHJ5Ci0gICAgewotICAgICAgaWYoIHdpemFyZEVsZW1lbnRfICE9IG51bGwgKQotICAgICAgewotICAgICAgICBpZiggY29tbWFuZFdpZGdldEJpbmRpbmdfID09IG51bGwgKQotICAgICAgICB7Ci0gICAgICAgICAgY29tbWFuZFdpZGdldEJpbmRpbmdfID0gKENvbW1hbmRXaWRnZXRCaW5kaW5nKXdpemFyZEVsZW1lbnRfLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oICJjbGFzcyIgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiggYnVuZGxlXyA9PSBudWxsICkKLSAgICAgICAgewotICAgICAgICAgIGJ1bmRsZV8gPSBQbGF0Zm9ybS5nZXRCdW5kbGUoIHdpemFyZEVsZW1lbnRfLmdldE5hbWVzcGFjZSgpICk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmKCBpY29uQmFubmVyTmFtZV8gPT0gbnVsbCApCi0gICAgICAgIHsKLSAgICAgICAgICBpY29uQmFubmVyTmFtZV8gPSB3aXphcmRFbGVtZW50Xy5nZXRBdHRyaWJ1dGUoICJpY29uYmFubmVyIiApOyAvLyROT04tTkxTLTEkCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmKCB3aXphcmRUaXRsZV8gPT0gbnVsbCApCi0gICAgICAgIHsKLSAgICAgICAgICB3aXphcmRUaXRsZV8gPSB3aXphcmRFbGVtZW50Xy5nZXRBdHRyaWJ1dGUoICJ0aXRsZSIgKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoKCBDb3JlRXhjZXB0aW9uIGV4YyApCi0gICAgewotICAgICAgZXhjLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLSAgICAKLQlkYXRhT2JqZWN0Q29tbWFuZF8gPSBuZXcgRGF0YU9iamVjdENvbW1hbmQoKTsKLSAgICBjYW5GaW5pc2hSZWdpc3RyeV8gPSBuZXcgU2ltcGxlQ2FuRmluaXNoUmVnaXN0cnkoKTsgCi0gICAgcGFnZU1hbmFnZXJfICAgICAgID0gbmV3IFdpemFyZFBhZ2VNYW5hZ2VyKCB3aWRnZXRSZWdpc3RyeV8sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0V2l6YXJkUGFnZUZhY3RvcnkoKSwgCi0JCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLAotCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YU1hbmFnZXIsCi0JCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCApOyAgCi0gICAgCi0gICAgcGFnZU1hbmFnZXJfLnNldFJvb3RGcmFnbWVudCggZ2V0Um9vdEZyYWdtZW50KCBzZWxlY3Rpb24sIHBhZ2VNYW5hZ2VyXyApICk7Ci0gICAgCi0gICAgY29tbWFuZFdpZGdldEJpbmRpbmdfLnJlZ2lzdGVyV2lkZ2V0TWFwcGluZ3MoIHdpZGdldFJlZ2lzdHJ5XyApOwotICAgIGNvbW1hbmRXaWRnZXRCaW5kaW5nXy5yZWdpc3RlckRhdGFNYXBwaW5ncyggZGF0YVJlZ2lzdHJ5XyApOwotICAgIGNvbW1hbmRXaWRnZXRCaW5kaW5nXy5yZWdpc3RlckNhbkZpbmlzaCggY2FuRmluaXNoUmVnaXN0cnlfICk7Ci0gICAgICAgIAotICAgIC8vIElmIGEgcGFnZSBpcyBub3QgY29tcGxldGUgZW5zdXJlIHRoYXQgY2FuRmluaXNoIGlzIGZhbHNlLgotICAgIENvbmRpdGlvbiBjYW5GaW5pc2ggPSBuZXcgQ29uZGl0aW9uKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIGV2YWx1YXRlKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJV2l6YXJkUGFnZSBjdXJyZW50UGFnZSA9IHBhZ2VNYW5hZ2VyXy5nZXRDdXJyZW50UGFnZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFBhZ2UgIT0gbnVsbCA/IGN1cnJlbnRQYWdlLmlzUGFnZUNvbXBsZXRlKCkgOiB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgfTsgCi0gICAgCi0gICAgY2FuRmluaXNoUmVnaXN0cnlfLmFkZCggY2FuRmluaXNoICk7Ci0gICAgCi0gICAgLy8gU2V0IHRoYXQgd2UgbmVlZCBhIHByb2dyZXNzIG1vbml0b3IuCi0gICAgc2V0TmVlZHNQcm9ncmVzc01vbml0b3IoIHRydWUgKTsKLSAgICAKLSAgICAvLyBFbnN1cmUgdGhhdCB0aGUgbmV4dC9iYWNrIGJ1dHRvbnMgYXJlIGVuYWJsZWQuCi0Jc2V0Rm9yY2VQcmV2aW91c0FuZE5leHRCdXR0b25zKCB0cnVlICk7Ci0gICAgCi0gICAgLy8gU2V0IHRoZSBpY29uIGJhbm5lciBpZiBzcGVjaWZpZWQuCi0gICAgaWYoIGljb25CYW5uZXJOYW1lXyAhPSBudWxsICYmIGljb25CYW5uZXJOYW1lXy5sZW5ndGgoKSA+IDAgKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBVUkwgaW5zdGFsbFVSTCAgICAgICAgPSBidW5kbGVfLmdldEVudHJ5KCIvIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgVVJMIGltYWdlVVJMICAgICAgICAgID0gbmV3IFVSTChpbnN0YWxsVVJMLCBpY29uQmFubmVyTmFtZV8gKTsKLSAgICAgICAgSW1hZ2VEZXNjcmlwdG9yIGltYWdlID0gSW1hZ2VEZXNjcmlwdG9yLmNyZWF0ZUZyb21VUkwoaW1hZ2VVUkwpOwotICAgICAgICAKLSAgICAgICAgaWYoIGltYWdlICE9IG51bGwgKQotICAgICAgICB7Ci0gICAgICAgICAgc2V0RGVmYXVsdFBhZ2VJbWFnZURlc2NyaXB0b3IoIGltYWdlICk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYoIHdpemFyZFRpdGxlXyAhPSBudWxsICYmIHdpemFyZFRpdGxlXy5sZW5ndGgoKSA+IDAgKQotICAgIHsKLSAgICAgIHNldFdpbmRvd1RpdGxlKCB3aXphcmRUaXRsZV8gKTsKLSAgICB9Ci0gIH0KLSAgCi0gIC8vIFN1YmNsYXNzZXMgY2FuIG92ZXJyaWRlIHRoaXMuCi0gIHByb3RlY3RlZCBXaXphcmRQYWdlRmFjdG9yeSBnZXRXaXphcmRQYWdlRmFjdG9yeSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFNpbXBsZVBhZ2VGYWN0b3J5KCk7Ci0gIH0KLSAgCi0gIC8qKgotICAqIFJldHVybnMgdHJ1ZSBpZiBhbGwgcGFnZXMgYXJlIGNvbXBsZXRlLgotICAqIEByZXR1cm4gVHJ1ZSBpZiBhbGwgcGFnZXMgYXJlIGNvbXBsZXRlLgotICAqLwotICBwdWJsaWMgYm9vbGVhbiBjYW5GaW5pc2ggKCkKLSAgewotICAJaW50ICAgICBsZW5ndGggPSBjYW5GaW5pc2hSZWdpc3RyeV8uc2l6ZSgpOwotICAJYm9vbGVhbiByZXN1bHQgPSB0cnVlOwotICAJCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApCi0gICAgewotICAgICAgQ29uZGl0aW9uIGNvbmRpdGlvbiA9IChDb25kaXRpb24pY2FuRmluaXNoUmVnaXN0cnlfLmVsZW1lbnRBdCggaW5kZXggKTsKLSAgICAKLSAgICAgIHJlc3VsdCA9IGNvbmRpdGlvbi5ldmFsdWF0ZSgpOwotICAgICAgCi0gICAgICBpZiggIXJlc3VsdCApIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgLyoqCi0gICAgKiBSZXR1cm5zIHRoZSBmaXJzdCBwYWdlIGZvciB0aGlzIHdpemFyZC4KLSAgICAqCi0gICAgKiBAcmV0dXJuIHRoZSBmaXJzdCBwYWdlIGZvciB0aGlzIHdpemFyZC4KLSAgKiovCi0gIHB1YmxpYyBJV2l6YXJkUGFnZSBnZXRTdGFydGluZ1BhZ2UoKQotICB7Ci0gICAgcmV0dXJuIHBhZ2VNYW5hZ2VyXy5nZXRTdGFydGluZ1BhZ2UoKTsKLSAgfQotCi0gIC8qKgotICAgICogUmV0dXJucyB0aGUgbmV4dCBwYWdlIGFmdGVyIHBhZ2UgYW5kCi0gICAgKiBydW5zIHRoZSBhcHByb3ByaWF0ZSB0YXNrcy4KLSAgICAqCi0gICAgKiBAcmV0dXJuIHRoZSBuZXh0IHBhZ2UgYWZ0ZXIgcGFnZS4KLSAgKiovCi0gIHB1YmxpYyBJV2l6YXJkUGFnZSBnZXROZXh0UGFnZSggSVdpemFyZFBhZ2UgcGFnZSApCi0gIHsgICAKLSAgICByZXR1cm4gcGFnZU1hbmFnZXJfLmdldE5leHRQYWdlKCk7Ci0gIH0KLSAgCi0gIC8qKgotICAqLwotICBwdWJsaWMgYm9vbGVhbiBwZXJmb3JtRmluaXNoICgpCi0gIHsgCi0gICAgYm9vbGVhbiByZXN1bHQgPSBwYWdlTWFuYWdlcl8ucGVyZm9ybUZpbmlzaCgpOwotICAgIAotICAgIGlmKCByZXN1bHQgKSBjbGVhbnVwKCk7Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiBVbmRvIGZyYWdtZW50cwotICAqLwotICBwdWJsaWMgYm9vbGVhbiBwZXJmb3JtQ2FuY2VsICgpCi0gIHsKLSAgCWJvb2xlYW4gcmVzdWx0ID0gcGFnZU1hbmFnZXJfLnBlcmZvcm1DYW5jZWwoKTsKLSAgCQotICAJaWYoIHJlc3VsdCApIGNsZWFudXAoKTsKLSAgCQotICAJcmV0dXJuIHJlc3VsdDsKLSAgfSAgCi0gICAgICAKLSAgcHVibGljIE9iamVjdCBnZXREYXRhT2JqZWN0KCkKLSAgewotICAgIHJldHVybiBkYXRhT2JqZWN0Q29tbWFuZF8uZ2V0RGF0YU9iamVjdCgpOyAgCi0gIH0KLSAgCi0gIHByb3RlY3RlZCBDb21tYW5kRnJhZ21lbnQgZ2V0Um9vdEZyYWdtZW50KCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24sIFdpemFyZFBhZ2VNYW5hZ2VyIHBhZ2VNYW5hZ2VyICkKLSAgewotICAgIFNlcXVlbmNlRnJhZ21lbnQgcm9vdCA9IG5ldyBTZXF1ZW5jZUZyYWdtZW50KCk7Ci0gICAgCi0gICAgcm9vdC5hZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggbmV3IFNlbGVjdGlvbkNvbW1hbmQoIHNlbGVjdGlvbiApLCAiIiApICk7IC8vJE5PTi1OTFMtMSQKLSAgICByb290LmFkZCggbmV3IFNpbXBsZUZyYWdtZW50KCBuZXcgQ3VycmVudFBhZ2VDb21tYW5kKCBwYWdlTWFuYWdlciApLCAiIiApICk7IC8vJE5PTi1OTFMtMSQKLSAgICByb290LmFkZCggY29tbWFuZFdpZGdldEJpbmRpbmdfLmNyZWF0ZSgpLmNyZWF0ZSgpICk7Ci0Jcm9vdC5hZGQoIG5ldyBTaW1wbGVGcmFnbWVudCggZGF0YU9iamVjdENvbW1hbmRfLCAiIiApKTsgLy8kTk9OLU5MUy0xJAotICAgIAotICAgIHJldHVybiByb290OwotICB9Ci0gIAotICBwcm90ZWN0ZWQgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGdldENvbmZpZ0VsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIHdpemFyZEVsZW1lbnRfOwotICB9Ci0gIAotICAvKioKLSAgICogVGhpcyBtZXRob2QgZnJlZXMgdXAgdGhlIG1lbW9yeSBoZWxkIGJ5IHRoaXMgb2JqZWN0LgotICAgKgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGNsZWFudXAoKQotICB7Ci0JICBpY29uQmFubmVyTmFtZV8gICAgICAgPSBudWxsOwotCSAgYnVuZGxlXyAgICAgICAgICAgICAgID0gbnVsbDsKLQkgIGNhbkZpbmlzaFJlZ2lzdHJ5XyAgICA9IG51bGw7IAotCSAgcGFnZU1hbmFnZXJfICAgICAgICAgID0gbnVsbDsKLQkgIHdpemFyZFRpdGxlXyAgICAgICAgICA9IG51bGw7Ci0JICBjb21tYW5kV2lkZ2V0QmluZGluZ18gPSBudWxsOwotCSAgV2lkZ2V0UmVnaXN0cnkuaW5pdGlhbGl6ZSgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9JTmFtZWRXaWRnZXRDb250cmlidXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNWJhZjMyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9JTmFtZWRXaWRnZXRDb250cmlidXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzOwotCi0KLXB1YmxpYyBpbnRlcmZhY2UgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3IgCi17Ci0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiByZXR1cm5zIHRoZSBXaWRnZXRDb250cmlidXRvciBmb3IgdGhpcyBOYW1lZCB3aWRnZXQuCi0gICAqLwotICBwdWJsaWMgV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5IGdldFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSgpOwotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIG5hbWUuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUgKCk7Ci0gIAotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyBhIGRlc2NyaXB0aW9uIHRoYXQgbWlnaHQgYmUgZGlzcGxheWVkIG9uCi0gICAqIGEgd2l6YXJkIHBhZ2UuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uICgpOwotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGl0bGUgdGhhdCBtYXkgYmUgZGlzcGxheWVkIG9uIAotICAgKiBhIHdpemFyZCBwYWdlLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRUaXRsZSgpOyAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxNGZmMDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL0lOYW1lZFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5OwotCi1wdWJsaWMgaW50ZXJmYWNlIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSAKLXsKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGZpcnN0IG5hbWVkIHdpZGdldC4KLSAgICovCi0gIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yIGdldEZpcnN0TmFtZWRXaWRnZXQoKTsKLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHBhcmFtIHdpZGdldENvbnRyaWJ1dG9yCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgbmV4dCBuYW1lZCB3aWRnZXQgYWZ0ZXIgdGhlIG9uZSBzcGVjaWZpZWQuCi0gICAqLwotICBJTmFtZWRXaWRnZXRDb250cmlidXRvciBnZXROZXh0TmFtZWRXaWRnZXQoIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yIHdpZGdldENvbnRyaWJ1dG9yICk7Ci0gIAotICAvKioKLSAgICogVGhpcyBtZXRob2QgaXMgdXNlZCBieSBleHRlbmlvbnMgdG8gcmVnaXN0ZXIgdGhlIGRhdGEgbWFwcGluZ3MKLSAgICogdGhhdCB0aGVpciB3aWRnZXRzIHVzZS4KLSAgICogCi0gICAqIEBwYXJhbSBkYXRhUmVnaXN0cnkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKCBEYXRhTWFwcGluZ1JlZ2lzdHJ5IGRhdGFSZWdpc3RyeSApOwotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9QYWdlSW5mby5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1BhZ2VJbmZvLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1ODQzNjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1BhZ2VJbmZvLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHM7Ci0KLQotCi1wdWJsaWMgY2xhc3MgUGFnZUluZm8gCi17Ci0gIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgICAgICAgIHBhZ2VOYW1lXzsKLSAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICAgICAgICAgcGFnZVRpdGxlXzsKLSAgcHJpdmF0ZSBXaWRnZXRDb250cmlidXRvckZhY3Rvcnkgd2lkZ2V0RmFjdG9yeV87Ci0gIAotICBwdWJsaWMgUGFnZUluZm8oIFN0cmluZyAgICAgICAgICAgICAgICAgICBwYWdlTmFtZSwKLSAgICAgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICAgICAgICAgICAgcGFnZVRpdGxlLAotICAgICAgICAgICAgICAgICAgIFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSB3aWRnZXRGYWN0b3J5ICkKLSAgewotICAgIHBhZ2VOYW1lXyAgICAgICA9IHBhZ2VOYW1lOwotICAgIHBhZ2VUaXRsZV8gICAgICA9IHBhZ2VUaXRsZTsKLSAgICB3aWRnZXRGYWN0b3J5XyAgPSB3aWRnZXRGYWN0b3J5OwotICB9ICAgCi0gIAotICBwdWJsaWMgU3RyaW5nIGdldFBhZ2VOYW1lKCkKLSAgewotICAgIHJldHVybiBwYWdlTmFtZV87Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UGFnZVRpdGxlKCkKLSAgewotICAgIHJldHVybiBwYWdlVGl0bGVfOwotICB9Ci0gIAotICBwdWJsaWMgV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5IGdldFdpZGdldEZhY3RvcnkoKQotICB7Ci0gICAgcmV0dXJuIHdpZGdldEZhY3RvcnlfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvUGFnZVdpemFyZERhdGFFdmVudHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9QYWdlV2l6YXJkRGF0YUV2ZW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZWI2NWYxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9QYWdlV2l6YXJkRGF0YUV2ZW50cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLklXaXphcmRQYWdlOwotCi0vKioKLSAqIER5bmFtaWMgd2l6YXJkIGltcGxlbWVudGF0aW9ucyB0aGF0IHdhbnQgdG8gY3JlYXRlIGRpZmZlcmVudAotICoga2luZHMgb2Ygd2l6YXJkIHBhZ2VzIG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgaW50ZXJmYWNlLgotICogVGhlIFdpemFyZFBhZ2VGYWN0b3J5IHJldHVybnMgYSBjbGFzcyBvZiB0aGlzIHR5cGUuCi0gKgotICovCi1wdWJsaWMgaW50ZXJmYWNlIFBhZ2VXaXphcmREYXRhRXZlbnRzIGV4dGVuZHMgSVdpemFyZFBhZ2UKLXsKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIFdpZGdldERhdGFFdmVudHMgb2JqZWN0IGNyZWF0ZWQgYnkgdGhlIGFkZENvbnRyb2xzCi0gICAqIG1ldGhvZCBvZiBhIFdpZGdldENvbnRyaWJ1dG9yLgotICAgKi8KLSAgcHVibGljIFdpZGdldERhdGFFdmVudHMgZ2V0RGF0YUV2ZW50cygpOwotICAKLSAgLyoqCi0gICAqIFZhbGlkYXRlcyB0aGF0IHRoaXMgd2l6YXJkIHBhZ2UgaXMgY29tcGxldGUuIAotICAgKgotICAgKi8KLSAgcHVibGljIHZvaWQgdmFsaWRhdGVQYWdlVG9TdGF0dXMoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9TZWxlY3Rpb25Db21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvU2VsZWN0aW9uQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjEzYmNjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9TZWxlY3Rpb25Db21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi0KLS8qKgotICogVGhpcyBTZWxlY3Rpb25Db21tYW5kIGlzIGV4ZWN1dGUgYXQgdGhlIHZlcnkgYmVnaW5uaW5nIG9mIHRoZQotICogZHluYW1pYyB3aXphcmQuICBDb21tYW5kcyBleGVjdXRlZCBpbiB0aGUgd2l6YXJkIHRoYXQgbmVlZAotICogdGhlIGluaXRpYWwgc2VsZWN0aW9uIGNhbiBnZXQgaXQgdGhyb3VnaCBhIGRhdGEgbWFwcGluZyBmcm9tIAotICogdGhpcyBjb21tYW5kIHRvIHRoZSBjb21tYW5kIHRoYXQgbmVlZHMgaXQuCi0gKgotICovCi1wdWJsaWMgY2xhc3MgU2VsZWN0aW9uQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIHByaXZhdGUgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uXzsKLSAgCi0gIHB1YmxpYyBTZWxlY3Rpb25Db21tYW5kKCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24gKQotICB7Ci0gICAgc2VsZWN0aW9uXyA9IHNlbGVjdGlvbjsgIAotICB9Ci0gIAotICBwdWJsaWMgSVN0cnVjdHVyZWRTZWxlY3Rpb24gZ2V0SW5pdGlhbFNlbGVjdGlvbigpCi0gIHsKLSAgICByZXR1cm4gc2VsZWN0aW9uXzsKLSAgfQotCi0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGluZm8pIHRocm93cyBFeGVjdXRpb25FeGNlcHRpb24KLSAgewotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvU2ltcGxlQ2FuRmluaXNoUmVnaXN0cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9TaW1wbGVDYW5GaW5pc2hSZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTk5ZGM2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9TaW1wbGVDYW5GaW5pc2hSZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5Db25kaXRpb247Ci0KLQotCi1wdWJsaWMgY2xhc3MgU2ltcGxlQ2FuRmluaXNoUmVnaXN0cnkgZXh0ZW5kcyBWZWN0b3IgaW1wbGVtZW50cyBDYW5GaW5pc2hSZWdpc3RyeQotewotCi0gIC8qKgotICAgKiBDb21tZW50IGZvciA8Y29kZT5zZXJpYWxWZXJzaW9uVUlEPC9jb2RlPgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMzI1NzI4NTgzNzg3MDc0MTMwNUw7Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmVudi53aWRnZXRzLkNhbkZpbmlzaFJlZ2lzdHJ5I2FkZENvbmRpdGlvbihvcmcuZWNsaXBzZS5lbnYuY29tbWFuZC5mcmFnbWVudC5Db25kaXRpb24pCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRDb25kaXRpb24oQ29uZGl0aW9uIGNvbmRpdGlvbikKLSAgewotICAgIGFkZCggY29uZGl0aW9uICk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9TaW1wbGVDb21tYW5kRW5naW5lTWFuYWdlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1NpbXBsZUNvbW1hbmRFbmdpbmVNYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2YWFhN2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1NpbXBsZUNvbW1hbmRFbmdpbmVNYW5hZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjIzICAgMTI5MjMyIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDcwMzE0ICAgMTc2ODg2IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDcwNzMwICAgMTk3MTQ0IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2ssIFBhc3MgcHJvZ3Jlc3MgbW9uaXRvciB0byB1bmRvIGNvbW1hbmRzLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzOwotCi1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLm9wZXJhdGlvbi5JUnVubmFibGVDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLm9wZXJhdGlvbi5JUnVubmFibGVXaXRoUHJvZ3Jlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhRmxvd01hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudEVuZ2luZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5GcmFnbWVudExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkJhc2VTdGF0dXNIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkVjbGlwc2VFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklMb2c7Ci0KLQotLyoqCi0gKiBUaGlzIGNsYXNzIG1hbmFnZXMgdGhlIGV4ZWN1dGlvbiBvZiBDb21tYW5kcyBpbiBhIGZsb3cgb2YgQ29tbWFuZEZyYWdtZW50cy4KLSAqIFRoZSBidWxrIG9mIHRoaXMgd29yayBpcyBkb25lIGJ5IHRoZSBDb21tYW5kRnJhZ21lbnRFbmdpbmUuICBUaGUgbWFpbiBqb2Igb2YKLSAqIHRoaXMgY2xhc3MgaXMgcnVuIHRoZSBmcmFnbWVudHMgaW4gYSBwYXJ0aWN1bGFyIHRyYW5zYWN0aW9uYWwgZW52aXJvbm1lbnQuCi0gKiBBIGZyYWdtZW50IGhhcyBhIG1ldGhvZCBjYWxsZWQgZG9Ob3RSdW5JblRyYW5zYWN0aW9uIHdoaWNoIGlzIHVzZWQgdG8gZGV0ZXJtaW5lCi0gKiBpZiBpdHMgY29tbWFuZHMgc2hvdWxkIGJlIHJ1biBpbiBhIHRyYW5zYWN0aW9uIG9yIG5vdC4gIElmIHRoaXMgbWV0aG9kIHJldHVybnMKLSAqIHRydWUoaWUuIG5vdCBpbiBhIHRyYW5zYWN0aW9uKSB0aGUgQ29tbWFuZHMgYXJlIHdyYXBwZWQgaW4gYSBJUnVubmFibGVXaXRoUHJvZ3Jlc3MuCi0gKiBJZiBmYWxzZSggaWUuIGluIGEgdHJhbnNhY3Rpb24gKSB0aGUgQ29tbWFuZHMgYXJlIHdyYXBwZWQgaW4gYSBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24uIAotICoKLSAqLwotcHVibGljIGNsYXNzIFNpbXBsZUNvbW1hbmRFbmdpbmVNYW5hZ2VyCi17Ci0gIHByb3RlY3RlZCBDb21tYW5kRnJhZ21lbnRFbmdpbmUgZW5naW5lXzsKLSAgcHJvdGVjdGVkIERhdGFGbG93TWFuYWdlciAgICAgICBkYXRhTWFuYWdlcl87Ci0gIHByb3RlY3RlZCAgIEVjbGlwc2VFbnZpcm9ubWVudCAgICBlbnZpcm9ubWVudF87Ci0gIAotICBwcml2YXRlICAgYm9vbGVhbiAgICAgICAgICAgICAgIGZvdW5kU3RvcF87Ci0gIHByaXZhdGUgICBib29sZWFuICAgICAgICAgICAgICAgZG9Ob3RSdW5JblRyYW5zYWN0aW9uXzsKLSAgCi0gIHB1YmxpYyBTaW1wbGVDb21tYW5kRW5naW5lTWFuYWdlciggRWNsaXBzZUVudmlyb25tZW50IGVudmlyb25tZW50LCBEYXRhRmxvd01hbmFnZXIgZGF0YU1hbmFnZXIgKQotICB7Ci0gICAgZW52aXJvbm1lbnRfID0gZW52aXJvbm1lbnQ7Ci0gICAgZGF0YU1hbmFnZXJfID0gZGF0YU1hbmFnZXI7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBTZXRzIHRoZSByb290IGZyYWdtZW50LiAgVGhlIGV4ZWN1dGlvbiBlbmdpbmUgd2lsbCBzdGFydCBleGVjdXRpbmcgY29tbWFuZHMKLSAgICogYXQgdGhlIGJlZ2lubmluZyBvZiB0aGlzIHJvb3QgZnJhZ21lbnQuCi0gICAqIAotICAgKiBAcGFyYW0gcm9vdCB0aGUgcm9vdCBmcmFnbWVudC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFJvb3RGcmFnbWVudCggQ29tbWFuZEZyYWdtZW50IHJvb3QgKQotICB7Ci0gIAllbmdpbmVfID0gbmV3IENvbW1hbmRGcmFnbWVudEVuZ2luZSggcm9vdCwgZGF0YU1hbmFnZXJfLCBlbnZpcm9ubWVudF8gKTsKLQkKLQkgIGVudmlyb25tZW50Xy5zZXRDb21tYW5kTWFuYWdlciggZW5naW5lXyApOwotICAJCi0gICAgZW5naW5lXy5zZXRQZWVrRnJhZ21lbnRMaXN0ZW5lciggCi0gICAgICBuZXcgRnJhZ21lbnRMaXN0ZW5lcigpCi0gICAgICB7Ci0gICAgICAgIHB1YmxpYyAgYm9vbGVhbiBub3RpZnkoIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCApCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gcGVla0ZyYWdtZW50KCBmcmFnbWVudCApOwotICAgICAgICB9Ci0gICAgICB9ICk7ICAKLSAgICAgICAgICAgICAgICAgIAotICAgIGVuZ2luZV8uc2V0TmV4dEZyYWdtZW50TGlzdGVuZXIoIAotICAgICAgbmV3IEZyYWdtZW50TGlzdGVuZXIoKQotICAgICAgewotICAgICAgICBwdWJsaWMgIGJvb2xlYW4gbm90aWZ5KCBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQgKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIG5leHRGcmFnbWVudCggZnJhZ21lbnQgKTsKLSAgICAgICAgfQotICAgICAgfSApOyAgCi0gICAgCi0gICAgZW5naW5lXy5zZXRBZnRlckV4ZWN1dGVGcmFnbWVudExpc3RlbmVyKCAKLSAgICAgICAgbmV3IEZyYWdtZW50TGlzdGVuZXIoKQotICAgICAgICB7Ci0gICAgICAgICAgcHVibGljICBib29sZWFuIG5vdGlmeSggQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50ICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWZ0ZXJFeGVjdXRlTmV4dEZyYWdtZW50KCBmcmFnbWVudCApOwotICAgICAgICAgIH0KLSAgICAgICAgfSApOyAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0JICBlbmdpbmVfLnNldFVuZG9GcmFnbWVudExpc3RlbmVyKAotICAgICAgbmV3IEZyYWdtZW50TGlzdGVuZXIoKQotICAgICAgewotICAgICAgICBwdWJsaWMgYm9vbGVhbiBub3RpZnkoIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCApCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gdW5kb0ZyYWdtZW50KCBmcmFnbWVudCApOwotICAgICAgICB9Ci0gICAgICB9ICk7ICAgICAgICAgICAgICAgCi0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBhZnRlckV4ZWN1dGVOZXh0RnJhZ21lbnQoIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCApCi0gIHsKLSAgICBib29sZWFuICAgICAgICAgICBjb250aW51ZUV4ZWN1dGUgPSB0cnVlOwotICAgIEJhc2VTdGF0dXNIYW5kbGVyIHN0YXR1c0hhbmRsZXIgICA9IChCYXNlU3RhdHVzSGFuZGxlcillbnZpcm9ubWVudF8uZ2V0U3RhdHVzSGFuZGxlcigpOwotICAgIElTdGF0dXMgICAgICAgICAgIGNvbW1hbmRTdGF0dXMgICA9IGVuZ2luZV8uZ2V0TGFzdFN0YXR1cygpOwotICAgIElTdGF0dXMgICAgICAgICAgIGhhbmRsZXJTdGF0dXMgICA9IHN0YXR1c0hhbmRsZXIuZ2V0U3RhdHVzKCk7Ci0gICAgCi0gICAgaWYoIGNvbW1hbmRTdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLkVSUk9SICYmCi0gICAgICAgIGhhbmRsZXJTdGF0dXMuZ2V0U2V2ZXJpdHkoKSAhPSBJU3RhdHVzLkVSUk9SICkKLSAgICB7Ci0gICAgICAvLyBUaGUgY29tbWFuZCByZXR1cm5lZCBhbiBlcnJvciBzdGF0dXMgZm9yIHRoZSBlbmdpbmUgdG8gc3RvcCwKLSAgICAgIC8vIGJ1dCB0aGUgc3RhdHVzIGhhbmRsZXIgZGlkIG5vdCBoYXZlIHJlcG9ydCBhbmQgZXJyb3IuCi0gICAgICAvLyBUaGVyZWZvcmUsIHdlIHdpbGwgcmVwb3J0IHRoaXMgc3RhdHVzIHJldHVybmVkIGJ5IHRoZSBjb21tYW5kCi0gICAgICAvLyBpZiB0aGVyZSBpcyBhIG1lc3NhZ2UgdG8gZGlzcGxheS4gIAotICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IGNvbW1hbmRTdGF0dXMuZ2V0TWVzc2FnZSgpOwotICAgICAgCi0gICAgICBpZiggZXJyb3JNZXNzYWdlICE9IG51bGwgJiYgZXJyb3JNZXNzYWdlLmxlbmd0aCgpID4gMCApCi0gICAgICB7Ci0gICAgICAgIHN0YXR1c0hhbmRsZXIucmVwb3J0RXJyb3IoIGNvbW1hbmRTdGF0dXMgKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiggY29tbWFuZFN0YXR1cy5nZXRTZXZlcml0eSgpICE9IElTdGF0dXMuRVJST1IgJiYKLSAgICAgICAgICAgICBoYW5kbGVyU3RhdHVzLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5FUlJPUiApCi0gICAgewotICAgICAgLy8gVGhlIGxhc3QgY29tbWFuZCBkaWRuJ3QgcmV0dXJuIGFuIGVycm9yLCBidXQgdGhlIHN0YXR1cyBoYW5kbGVyCi0gICAgICAvLyBkaWQgcmVwb3J0IGFuZCBlcnJvci4gIFRoZXJlZm9yZSwgd2Ugc2hvdWxkIHN0b3AuCi0gICAgICBjb250aW51ZUV4ZWN1dGUgPSBmYWxzZTsgICAKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGNvbnRpbnVlRXhlY3V0ZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRoZSBDb21tYW5kRnJhZ21lbnRFbmdpbmUgY2FsbHMgdGhpcyBtZXRob2Qgd2hlbiBpdCBpcyBwZWVraW5nIGZvcndhcmQKLSAgICogaW4gdGhlIGZyYWdtZW50cy4gIFdoZW4gcGVla2luZyBmb3J3YXJkIHRoZSBjb21tYW5kIHN0YWNrIHN0YXRlIGluIHRoZQotICAgKiBlbmdpbmUgaXMgbm90IGNoYW5nZXMuCi0gICAqIAotICAgKiAKLSAgICogQHBhcmFtIGZyYWdtZW50IHRoZSBmcmFnbWVudCB0aGF0IGl0IGlzIHBlZWtpbmcgYXQuCi0gICAqIEByZXR1cm4gSW5kaWNhdGVzIHdoZXRoZXIgcGVla2luZyBzaG91bGQgc3RvcCBvciBub3QuCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiBwZWVrRnJhZ21lbnQoIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCApCi0gIHsgICAgIAotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIAotICAvKioKLSAgICogVGhlIENvbW1hbmRGcmFnbWVudEVuZ2luZSBjYWxscyB0aGlzIG1ldGhvZCB3aGVuIGl0IGlzIG1vdmluZyBmb3J3YXJkCi0gICAqIGluIHRoZSBmcmFnbWVudHMuICAgV2hlbiBtb3ZpbmcgZm9yd2FyZCB0aGUgY29tbWFuZCBzdGFjayBzdGF0ZSBpcyBzYXZlZAotICAgKiBhdCBlYWNoIGZyYWdtZW50IGlzIHRyYXZlcnNlZC4KLSAgICogCi0gICAqIEBwYXJhbSBmcmFnbWVudCB0aGUgZnJhZ21lbnQgdGhhdCBpcyBiZWluZyB0cmF2ZXJzZWQuCi0gICAqIEByZXR1cm4gaW5kaWNhdGVzIGlmIHRoZSBmb3J3YXJkIHRyYXZlcnNhbCBzaG91bGQgY29udGludWUuICAKLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIG5leHRGcmFnbWVudCggQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50ICkKLSAgeyAgICAgCi0gICAgaWYoIGZyYWdtZW50LmRvTm90UnVuSW5UcmFuc2FjdGlvbigpICE9IGRvTm90UnVuSW5UcmFuc2FjdGlvbl8gKQotICAgIHsKLSAgICAgIC8vIFRoZSBmcmFnbWVudCBpcyByZXF1ZXN0aW5nIGEgZGlmZmVyZW50IHRyYW5zYWN0aW9uIGVudmlyb25tZW50IHRoYW4KLSAgICAgIC8vIHRoZSBvbmUgdGhhdCB3ZSBhcmUgaW4gc28gd2UgbXVzdCBzdG9wIGFuZCBjaGFuZ2UgZW52aXJvbm1lbnRzLgotICAgICAgZG9Ob3RSdW5JblRyYW5zYWN0aW9uXyA9IGZyYWdtZW50LmRvTm90UnVuSW5UcmFuc2FjdGlvbigpOwotICAgICAgZm91bmRTdG9wXyAgICAgICAgICAgICA9IGZhbHNlOyAgICAgIAotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZm91bmRTdG9wXzsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBmb3IgZWFjaCBmcmFnbWVudCB3aGVuIHRoZSBjb21tYW5kIGVuZ2luZSBpcyB1bndpbmRpbmcKLSAgICogaXRzIHN0YWNrIGR1cmluZyBhbiB1bmRvIG9wZXJhdGlvbi4KLSAgICogCi0gICAqIEBwYXJhbSBmcmFnbWVudCAgdGhlIGZyYWdtZW50IGJlaW5nIHVuZG9uZS4KLSAgICogQHJldHVybiByZXR1cm5zIHRydWUgaWYgdGhlIHVuZG8gcHJvY2VzcyBzaG91bGQgY29udGludWUuCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiB1bmRvRnJhZ21lbnQoIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCApCi0gIHsgIAkgIAkKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAgIAotICAvKioKLSAgICogVGhpcyBtZXRob2QgdW5kb2VzIHRoZSBjb21tYW5kcyB0aGF0IHdlcmUgZXhlY3V0ZWQgaW4gdGhlIHJ1bkZvcndhcmRUb05leHRTdG9wCi0gICAqIG1ldGhvZC4KLSAgICogQHBhcmFtIGNvbnRleHQgdGhlIHJ1bm5hYmxlIGNvbnRleHQuCi0gICAqIEByZXR1cm4gcmV0dXJucyBpZiBhbGwgY29tbWFuZHMgaGF2ZSBiZWVuIHVuZG9uZSBvciBub3QuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBydW5VbmRvVG9OZXh0U3RvcCggSVJ1bm5hYmxlQ29udGV4dCBjb250ZXh0ICkKLSAgewotICAgIGZpbmFsIGJvb2xlYW4gcmVzdWx0W10gPSBuZXcgYm9vbGVhbltde3RydWV9OwotICAgIAotICAgIElSdW5uYWJsZVdpdGhQcm9ncmVzcyB1bmRvT3BlcmF0aW9uIAotICAgICAgPSBuZXcgSVJ1bm5hYmxlV2l0aFByb2dyZXNzKCkKLSAgICAgICAgewotICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0WzBdID0gZW5naW5lXy51bmRvVG9MYXN0U3RvcChtb25pdG9yKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH07Ci0gICAgICAgIAotICAgIHRyeQotICAgIHsgICAgICAKLSAgICAgIGlmKCBjb250ZXh0ID09IG51bGwgKQotICAgICAgewotICAgICAgICAvLyBXZSBkb24ndCBoYXZlIGEgY29udGFpbmVyIHlldCBzbyBqdXN0IHJ1biB0aGUgb3BlcmF0aW9uLgotICAgICAgICB1bmRvT3BlcmF0aW9uLnJ1biggbnVsbCApOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBXZSBoYXZlIGEgY29udGFpbmVyIHdoZXJlIHRoaXMgb3BlcmF0aW9uIGNhbiBydW4gYW5kIGhhdmUKLSAgICAgICAgLy8gaXRzIHByb2dyZXNzIGRpc3BsYXllZC4KLSAgICAgICAgY29udGV4dC5ydW4oIGZhbHNlLCBmYWxzZSwgdW5kb09wZXJhdGlvbiApOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCggRXhjZXB0aW9uIGV4YyApCi0gICAgewotICAgICAgLy8gRm9yIG5vdyB3ZSB3aWxsIGlnbm9yZSBhbGwgZXhjZXB0aW9ucy4KLSAgICB9IAotICAgIAotICAgIHJldHVybiByZXN1bHRbMF07Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIGV4ZWN1dGVzIHRoZSBDb21tYW5kRnJhZ21lbnQgY29tbWFuZHMgaW4gdGhlIGNvbnRleHQgcHJvdmlkZWQuCi0gICAqIAotICAgKiBAcGFyYW0gY29udGV4dCB0aGUgY29udGV4dAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIHN0YXR1cyBvZiBleGVjdXRpbmcgdGhlIGNvbW1hbmRzLgotICAgKi8KLSAgcHVibGljIElTdGF0dXMgcnVuRm9yd2FyZFRvTmV4dFN0b3AoIElSdW5uYWJsZUNvbnRleHQgY29udGV4dCApCi0gIHsKLSAgICBJUnVubmFibGVXaXRoUHJvZ3Jlc3Mgb3BlcmF0aW9uID0gbnVsbDsKLSAgICAKLSAgCWRvTm90UnVuSW5UcmFuc2FjdGlvbl8gPSBmYWxzZTsKLSAgCQotICAJZG8KLSAgCXsKLSAgCSAgLy8gV2Ugd2lsbCBzdG9wIHVubGVzcyB3ZSBhcmUgY2hhbmdpbmcgdHJhbnNhY3Rpb24gbW9kZXMuCi0gICAgICBmb3VuZFN0b3BfID0gdHJ1ZTsKLSAgICAgIAotICAJICBpZiggZG9Ob3RSdW5JblRyYW5zYWN0aW9uXyApCi0gIAkgIHsKLSAgCSAgICBvcGVyYXRpb24gPSBnZXROb1RyYW5zYWN0aW9uT3BlcmF0aW9uKCk7Ci0gIAkgIH0KLSAgCSAgZWxzZQotICAJICB7Ci0gIAkgICAgb3BlcmF0aW9uID0gZ2V0VHJhbnNhY3Rpb25PcGVyYXRpb24oKTsKLSAgCSAgfQotICAJICAKLSAgIAkgIHRyeQotICAJICB7ICAJICAgCi0gIAkgICAgaWYoIGNvbnRleHQgPT0gbnVsbCApCi0gIAkgICAgewotICAJICAgCSAgLy8gV2UgZG9uJ3QgaGF2ZSBhIGNvbnRhaW5lciB5ZXQgc28ganVzdCBydW4gdGhlIG9wZXJhdGlvbi4KLSAgCSAgIAkgIG9wZXJhdGlvbi5ydW4oIG51bGwgKTsKLSAgCSAgICB9Ci0gIAkgICAgZWxzZQotICAJICAgIHsKLSAgCSAgIAkgIC8vIFdlIGhhdmUgYSBjb250YWluZXIgd2hlcmUgdGhpcyBvcGVyYXRpb24gY2FuIHJ1biBhbmQgaGF2ZQotICAJICAgCSAgLy8gaXRzIHByb2dyZXNzIGRpc3BsYXllZC4KLSAgCSAgICAgIGNvbnRleHQucnVuKCBmYWxzZSwgZmFsc2UsIG9wZXJhdGlvbiApOwotICAJICAgIH0KLSAgCSAgfQotICAJICBjYXRjaCggSW50ZXJydXB0ZWRFeGNlcHRpb24gZXhjICkKLSAgCSAgewotICAJICAgIC8vVE9ETyBzaG91bGQgbG9nIHRoZXNlIGV4Y2VwdGlvbnMuCi0gIAkgICAgZXhjLnByaW50U3RhY2tUcmFjZSgpOwotICAJICB9Ci0gIAkgIGNhdGNoKCBJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGV4YyApCi0gIAkgIHsKLSAgCSAgICAvL1RPRE8gc2hvdWxkIGxvZyB0aGVzZSBleGNlcHRpb25zLgotICAJICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLSAgCSAgfQotICAJfSAgCi0gIAl3aGlsZSggIWZvdW5kU3RvcF8gKTsgCi0gIAkKLSAgCXJldHVybiBlbmdpbmVfLmdldExhc3RTdGF0dXMoKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBJUnVubmFibGVXaXRoUHJvZ3Jlc3MgZ2V0VHJhbnNhY3Rpb25PcGVyYXRpb24oKQotICB7Ci0gICAgSVJ1bm5hYmxlV2l0aFByb2dyZXNzIG9wZXJhdGlvbiA9IG5ldyBJUnVubmFibGVXaXRoUHJvZ3Jlc3MoKQotICAgIHsKLSAgICAgIHB1YmxpYyB2b2lkIHJ1biggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkKLSAgICAgIHsKLSAgICAgICAgZW52aXJvbm1lbnRfLmdldExvZygpLmxvZyhJTG9nLklORk8sICJjb21tYW5kIiwgNTAwMiwgdGhpcywgImdldFRyYW5zYWN0aW9uT3BlcmF0aW9uIiwgIlN0YXJ0IG9mIHRyYW5zYWN0aW9uIik7Ci0gICAgICAgIAotICAgICAgICBCYXNlU3RhdHVzSGFuZGxlciBzdGF0dXNIYW5kbGVyID0gKEJhc2VTdGF0dXNIYW5kbGVyKWVudmlyb25tZW50Xy5nZXRTdGF0dXNIYW5kbGVyKCk7Ci0gICAgICAgIAotICAgICAgICBzdGF0dXNIYW5kbGVyLnJlc2V0U3RhdHVzKCk7Ci0gICAgICAgIGVuZ2luZV8ubW92ZUZvcndhcmRUb05leHRTdG9wKCBtb25pdG9yICk7Ci0gICAgICAgIAotICAgICAgICAKLSAgICAgICAgZW52aXJvbm1lbnRfLmdldExvZygpLmxvZyhJTG9nLklORk8sICJjb21tYW5kIiwgNTAwMywgdGhpcywgImdldFRyYW5zYWN0aW9uT3BlcmF0aW9uIiwgIkVuZCBvZiB0cmFuc2FjdGlvbiIpOwotICAgICAgfQotICAgIH07Ci0gICAgCi0gICAgcmV0dXJuIG9wZXJhdGlvbjsKLSAgfQotICAKLSAgcHJpdmF0ZSBJUnVubmFibGVXaXRoUHJvZ3Jlc3MgZ2V0Tm9UcmFuc2FjdGlvbk9wZXJhdGlvbigpCi0gIHsKLSAgICBJUnVubmFibGVXaXRoUHJvZ3Jlc3Mgb3BlcmF0aW9uID0gbmV3IElSdW5uYWJsZVdpdGhQcm9ncmVzcygpCi0gICAgewotICAgICAgcHVibGljIHZvaWQgcnVuKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKQotICAgICAgewotICAgICAgICBlbnZpcm9ubWVudF8uZ2V0TG9nKCkubG9nKElMb2cuSU5GTywgImNvbW1hbmQiLCA1MDg1LCB0aGlzLCAiZ2V0Tm9UcmFuc2FjdGlvbk9wZXJhdGlvbiIsICJTdGFydCBvZiBOT04gdHJhbnNhY3Rpb24iKTsKLSAgICAgICAgCi0gICAgICAgIEJhc2VTdGF0dXNIYW5kbGVyIHN0YXR1c0hhbmRsZXIgPSAoQmFzZVN0YXR1c0hhbmRsZXIpZW52aXJvbm1lbnRfLmdldFN0YXR1c0hhbmRsZXIoKTsKLSAgICAgICAgCi0gICAgICAgIHN0YXR1c0hhbmRsZXIucmVzZXRTdGF0dXMoKTsKLSAgICAgICAgZW5naW5lXy5tb3ZlRm9yd2FyZFRvTmV4dFN0b3AoIG1vbml0b3IgKTsKLSAgICAgICAgZW52aXJvbm1lbnRfLmdldExvZygpLmxvZyhJTG9nLklORk8sICJjb21tYW5kIiwgNTA4NiwgdGhpcywgImdldE5vVHJhbnNhY3Rpb25PcGVyYXRpb24iLCAiRW5kIG9mIE5PTiB0cmFuc2FjdGlvbiIpOwotICAgICAgfQotICAgIH07IAotICAgIAotICAgIHJldHVybiBvcGVyYXRpb247Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9TaW1wbGVEaWFsb2cuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9TaW1wbGVEaWFsb2cuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU4MzAxYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvU2ltcGxlRGlhbG9nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDE4ICAgMTM2MzM1IGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwNDE4ICAgMTM2NzU5IGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYxMTA2ICAgMTQyNTAwIGRhdmlkLnNjaG5laWRlckB1bmlzeXMuY29tIC0gRGF2aWQgU2NobmVpZGVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklEaWFsb2dDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgU2ltcGxlRGlhbG9nIGV4dGVuZHMgRGlhbG9nIGltcGxlbWVudHMgRGlhbG9nRGF0YUV2ZW50cwotewotICBwcml2YXRlICAgV2lkZ2V0Q29udHJpYnV0b3Igd2lkZ2V0XzsKLSAgcHJpdmF0ZSAgIFdpZGdldERhdGFFdmVudHMgIGRhdGFFdmVudHNfOwotICBwcml2YXRlICAgTGlzdGVuZXIgICAgICAgICAgc3RhdHVzTGlzdGVuZXJfOwotICBwcm90ZWN0ZWQgV2l6YXJkUGFnZU1hbmFnZXIgcGFnZU1hbmFnZXJfOyAgCi0gIHByaXZhdGUgVGV4dCBtZXNzYWdlVGV4dF87Ci0gIHByaXZhdGUgYm9vbGVhbiBva187Ci0gIAkKLSAgcHVibGljIFNpbXBsZURpYWxvZyggU2hlbGwgc2hlbGwsIFBhZ2VJbmZvIHBhZ2VJbmZvKQotICB7Ci0Jc3VwZXIoc2hlbGwpOwotCXdpZGdldF8gID0gcGFnZUluZm8uZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZSgpOwotICAJc3RhdHVzTGlzdGVuZXJfID0gbmV3IFN0YXR1c0xpc3RlbmVyKCk7Ci0gIH0gCSAKLSAgCi0gIENvbXBvc2l0ZSBwYXJlbnRfOwotICBwdWJsaWMgQ29udHJvbCBjcmVhdGVEaWFsb2dBcmVhKCBDb21wb3NpdGUgcGFyZW50ICkKLSAgewkKLQkgIHBhcmVudF8gPSBwYXJlbnQ7Ci0JQ29tcG9zaXRlIGNvbnRyb2wgPSAoQ29tcG9zaXRlKSBzdXBlci5jcmVhdGVEaWFsb2dBcmVhKHBhcmVudCk7Ci0JZGF0YUV2ZW50c18gPSB3aWRnZXRfLmFkZENvbnRyb2xzKCBjb250cm9sLCBzdGF0dXNMaXN0ZW5lcl8gKTsKLQkKLQkvL1RleHQgYXJlYSB0byBkaXNwbGF5IHZhbGlkYXRpb24gbWVzc2FnZXMKLQltZXNzYWdlVGV4dF8gPSBuZXcgVGV4dChwYXJlbnQsIFNXVC5XUkFQIHwgU1dULk1VTFRJIHwgU1dULlJFQURfT05MWSk7Ci0gICAgR3JpZERhdGEgZ3JpZGRhdGEgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMIHwgR3JpZERhdGEuR1JBQl9IT1JJWk9OVEFMKTsKLSAgICBncmlkZGF0YS5ob3Jpem9udGFsSW5kZW50ID0gMTA7Ci0gICAgbWVzc2FnZVRleHRfLnNldExheW91dERhdGEoIGdyaWRkYXRhICk7ICAgIAotICAgIHBhcmVudF8uc2V0Rm9jdXMoKTsKLSAgICAKLSAgICAvL0NhbGwgZXh0ZW5kZXJzIG92ZXJyaWRlIG9mIHRoZSBjYWxsU2V0dGVycyBtZXRob2QgdG8gaW50aWFsaXplIGFueSBkYXRhIGluIHdpZGdldAotICAgIGNhbGxTZXR0ZXJzKCk7ICAgCi0gICAgRGlhbG9nLmFwcGx5RGlhbG9nRm9udChwYXJlbnQpOwotICAgIHJldHVybiBjb250cm9sOwotICB9ICAKLSAgCi0gIC8vT3ZlcnJpZGUgb2YgRGlhbG9nLmNyZWF0ZUNvbnRlbnRzIHNvIHdlIGNhbiBhZmZlY3QgYnV0dG9uIGVuYWJsZW1lbnQgCi0gIHByb3RlY3RlZCBDb250cm9sIGNyZWF0ZUNvbnRlbnRzKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQlDb250cm9sIGMgPSBzdXBlci5jcmVhdGVDb250ZW50cyhwYXJlbnQpOwotCS8vZW5hYmxlIGNvbnRyb2xzIGZvciBpbml0aWFsIGVudHJ5IHRvIGRpYWxvZwotCXZhbGlkYXRlUGFnZVRvU3RhdHVzKCk7Ci0JcmV0dXJuIGM7Ci0gIH0KLQotICAvLyBFbmFibGUgb3IgZGlzYWJsZSBvayBidXR0b24gYmFzZWQgb24gc3RhdGUKLSAgcHJpdmF0ZSB2b2lkIGVuYWJsZU9rKGJvb2xlYW4gc3RhdGUpCi0gIHsKLQkgIEJ1dHRvbiBva0J1dHRvbiA9IGdldEJ1dHRvbihJRGlhbG9nQ29uc3RhbnRzLk9LX0lEKTsKLQkgIGlmIChva0J1dHRvbiAhPSBudWxsKQotCSAgICBva0J1dHRvbi5zZXRFbmFibGVkKHN0YXRlKTsKLSAgfQotICAKLSAgLy9JbXBsZW1lbnQgdGhpcyBtZXRob2QgdG8gY2FsbCBhbGwgc2V0dGVycyBvbiB0aGUgZGlhbG9nIHdpZGdldCBhZnRlciB0aGUgY29udHJvbHMgYXJlIGNyZWF0ZWQKLSAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgY2FsbFNldHRlcnMoKTsKLSAgCi0gIHB1YmxpYyBXaWRnZXREYXRhRXZlbnRzIGdldERhdGFFdmVudHMoKQotICB7Ci0gICAgcmV0dXJuIGRhdGFFdmVudHNfOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgV2lkZ2V0Q29udHJpYnV0b3IgZ2V0V2lkZ2V0KCkKLSAgewotCSAgcmV0dXJuIHdpZGdldF87Ci0gIH0KLSAgCi0gIC8vIHNldHMgbWVzc2FnZSBpbiBtZXNzYWdlIGFyZWEgYWJvdmUgT0sgYW5kIENhbmNlbCBidXR0b25zCi0gIHByaXZhdGUgdm9pZCBzZXRNZXNzYWdlKFN0cmluZyBtZXNzYWdlKQotICB7ICAKLQkgIGlmIChtZXNzYWdlID09IG51bGwpCi0JCSAgbWVzc2FnZVRleHRfLnNldFRleHQoIiIpOwkgICAgICAKLQkgIGVsc2UJCSAgCi0JICAgICAgbWVzc2FnZVRleHRfLnNldFRleHQobWVzc2FnZSk7Ci0gICAgICAvLyBmb3JjZSBhIHJlc2l6ZSBvZiB0aGUgcGFyZW50IGNvbXBvc2l0ZSBhbmQgd3JhcCBvZiB0aGUgdGV4dCBmaWVsZCBpZiBuZWNlc3NhcnkKLQkgIHBhcmVudF8ubGF5b3V0KCk7ICAKLSAgfQotICAJICAKLSAgCi0gIAotICBwdWJsaWMgdm9pZCB2YWxpZGF0ZVBhZ2VUb1N0YXR1cygpCi0gIHsKLSAgICBJU3RhdHVzIHN0YXR1cyAgPSB3aWRnZXRfLmdldFN0YXR1cygpOyAgICAKLSAgICAgICAgCi0gICAgaWYoIHN0YXR1cyAhPSBudWxsICkKLSAgICB7Ci0gICAgICBTdHJpbmcgbWVzc2FnZSA9IHN0YXR1cy5nZXRNZXNzYWdlKCk7Ci0gICAgICBpbnQgc2V2ZXJpdHkgPSBzdGF0dXMuZ2V0U2V2ZXJpdHkoKTsKLSAgICAgIAotICAgICAgLy8gZm9yIGVycm9yIGNvbmRpdGlvbiwgZGlzYWJsZSBvayBhbmQgcHJpbnQgbWVzc2FnZQotICAgICAgaWYoIHNldmVyaXR5ID09IElTdGF0dXMuRVJST1IgKQotICAgICAgeyAKLSAgICAgICAgaWYoIG1lc3NhZ2UubGVuZ3RoKCkgPT0gMCApCi0gICAgICAgIHsKLSAgICAgICAgICBzZXRNZXNzYWdlKCBudWxsKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBzZXRNZXNzYWdlKG1lc3NhZ2UpOwotICAgICAgICB9Ci0gICAgICAgIG9rXyA9IGZhbHNlOwotICAgICAgfQotICAgICAgLy8gZGlzcGxheSB3YXJuaW5nIGFuZCBpbmZvIG1lc3NhZ2VzIGJ1dCBzdGlsbCBlbmFibGUgT0sKLSAgICAgIGVsc2UgaWYgKHNldmVyaXR5ID09IElTdGF0dXMuV0FSTklORyB8IHNldmVyaXR5ID09IElTdGF0dXMuSU5GTykKLSAgICAgIHsKLSAgICAgICAgc2V0TWVzc2FnZShtZXNzYWdlKTsKLSAgICAgICAgb2tfID0gdHJ1ZTsgICAgICAgIAotICAgICAgfSAgICAgCi0gICAgICAvLyBubyBtZXNzYWdlIHRvIGRpc3BsYXkKLSAgICAgIGVsc2UgIAotICAgICAgewotICAgICAgICBzZXRNZXNzYWdlKCBudWxsKTsKLSAgICAgICAgb2tfID0gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gbnVsbCBzdGF0dXMgY2FzZQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBzZXRNZXNzYWdlKG51bGwpOwotICAgICAgb2tfID0gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgZW5hYmxlT2sob2tfKTsgICAgCi0gIH0KLSAgCi0gIHByaXZhdGUgY2xhc3MgU3RhdHVzTGlzdGVuZXIgaW1wbGVtZW50cyBMaXN0ZW5lcgotICB7Ci0JcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoIEV2ZW50IGV2dCApIAotCXsKLSAgICAgIHZhbGlkYXRlUGFnZVRvU3RhdHVzKCk7Ci0JfQotICB9Ci19ICAKLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1NpbXBsZVBhZ2VGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvU2ltcGxlUGFnZUZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTY5NGU3MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvU2ltcGxlUGFnZUZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0czsKLQotCi1wdWJsaWMgY2xhc3MgU2ltcGxlUGFnZUZhY3RvcnkgaW1wbGVtZW50cyBXaXphcmRQYWdlRmFjdG9yeQoteyAgIAotICBwdWJsaWMgUGFnZVdpemFyZERhdGFFdmVudHMgZ2V0UGFnZSggUGFnZUluZm8gcGFnZUluZm8sIFdpemFyZFBhZ2VNYW5hZ2VyIG1hbmFnZXIgKQotICB7Ci0gICAgcmV0dXJuIG5ldyBTaW1wbGVXaXphcmRQYWdlKCBwYWdlSW5mbywgbWFuYWdlciApOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvU2ltcGxlUG9wdXBQYWdlRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1NpbXBsZVBvcHVwUGFnZUZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjUzMzFkMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvU2ltcGxlUG9wdXBQYWdlRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzOwotCi0KLXB1YmxpYyBjbGFzcyBTaW1wbGVQb3B1cFBhZ2VGYWN0b3J5IGltcGxlbWVudHMgV2l6YXJkUGFnZUZhY3RvcnkKLXsgICAKLSAgcHJpdmF0ZSBTdHJpbmcgaWRfOwotICAKLSAgcHVibGljIFNpbXBsZVBvcHVwUGFnZUZhY3RvcnkoIFN0cmluZyBpZCApCi0gIHsKLSAgICBpZF8gPSBpZDsgIAotICB9Ci0gIAotICBwdWJsaWMgUGFnZVdpemFyZERhdGFFdmVudHMgZ2V0UGFnZSggUGFnZUluZm8gcGFnZUluZm8sIFdpemFyZFBhZ2VNYW5hZ2VyIG1hbmFnZXIgKQotICB7Ci0gICAgcmV0dXJuIG5ldyBTaW1wbGVQb3B1cFdpemFyZFBhZ2UoIHBhZ2VJbmZvLCBtYW5hZ2VyLCBpZF8gKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1NpbXBsZVBvcHVwV2l6YXJkUGFnZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1NpbXBsZVBvcHVwV2l6YXJkUGFnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzUwOWNhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9TaW1wbGVQb3B1cFdpemFyZFBhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDczMSAgIDEyMDM3OCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgRmllbGRzIG5vdCB2aXNpYmxlIGluIExhcmdlIGZvbnQgc2V0dGluZ3MKLSAqIDIwMDcwNTIyICAgMTg0MDA2IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb250ZXh0LlBlcnNpc3RlbnRBY3Rpb25EaWFsb2dzQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuRW52aXJvbm1lbnRVSU1lc3NhZ2VzOwotCi0KLQotcHVibGljIGNsYXNzIFNpbXBsZVBvcHVwV2l6YXJkUGFnZSBleHRlbmRzIFNpbXBsZVdpemFyZFBhZ2UKLXsgIAotICBwcml2YXRlIFN0cmluZyBpZF87Ci0gIAotICBwdWJsaWMgU2ltcGxlUG9wdXBXaXphcmRQYWdlKCBQYWdlSW5mbyBwYWdlSW5mbywgV2l6YXJkUGFnZU1hbmFnZXIgcGFnZU1hbmFnZXIsIFN0cmluZyBpZCApCi0gIHsKLSAgCXN1cGVyKCBwYWdlSW5mbywgcGFnZU1hbmFnZXIgKTsKLSAgCQotICAJaWRfID0gaWQ7Ci0gIH0gCSAgCi0gIAkKLSAgcHJvdGVjdGVkIENvbXBvc2l0ZSBpbnRlcm5hbENyZWF0ZUNvbnRyb2woIENvbXBvc2l0ZSBwYXJlbnQgKSAKLSAgeyAgCQotCUNvbXBvc2l0ZSBjb21wb3NpdGUgPSBzdXBlci5pbnRlcm5hbENyZWF0ZUNvbnRyb2wocGFyZW50KTsKLQkgIAotICAJZmluYWwgUGVyc2lzdGVudEFjdGlvbkRpYWxvZ3NDb250ZXh0IGNvbnRleHQgICA9IFBlcnNpc3RlbnRBY3Rpb25EaWFsb2dzQ29udGV4dC5nZXRJbnN0YW5jZSgpOwotICAJCi0gIAkvLyBJZiB0aGUgY3VycmVudCBwYWdlIGlzIG51bGwgdGhlbiB0aGlzIG11c3QgYmUgdGhlIGZpcnN0IHBhZ2UuCi0gIAlpZiggcGFnZU1hbmFnZXJfLmdldEN1cnJlbnRQYWdlKCkgPT0gbnVsbCAmJiBjb250ZXh0LnNob3dDaGVja2JveChpZF8pICkKLSAgCXsKLSAgICAgIGZpbmFsICBCdXR0b24gYnV0dG9uICA9IG5ldyBCdXR0b24oIGNvbXBvc2l0ZSwgU1dULkNIRUNLICk7Ci0gICAgICBTdHJpbmcgbGFiZWwgICA9IEVudmlyb25tZW50VUlNZXNzYWdlcy5DSEVDS0JPWF9ET19OT1RfU0hPV19ESUFMT0dfQUdBSU47Ci0gICAgICAKLSAgICAgIC8qQ09OVEVYVF9JRCBUV1AwMDAxIGZvciB0aGUgc2hvdy9oaWRlIGNoZWNrIGJveCovCi0gICAgICBTdHJpbmcgaW5mb3BvcCA9CSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkuVFdQMDAwMSI7Ci0gICAgICBTdHJpbmcgdG9vbHRpcCA9IEVudmlyb25tZW50VUlNZXNzYWdlcy5UT09MVElQX0RPX05PVF9TSE9XX0RJQUxPR19BR0FJTjsKLSAgICAgIAotICAgICAgYnV0dG9uLnNldFRleHQoIGxhYmVsICk7Ci0gICAgICBidXR0b24uc2V0VG9vbFRpcFRleHQoIHRvb2x0aXAgKTsKLSAgICAgIGJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lciggbmV3IFNlbGVjdGlvbkFkYXB0ZXIoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoIFNlbGVjdGlvbkV2ZW50IGV2dCApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5zZXRPYmplY3RBY3Rpb25EaWFsb2dFbmFibGVkKCBpZF8sIGJ1dHRvbi5nZXRTZWxlY3Rpb24oKSApOyAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgIGJ1dHRvbi5zZXRTZWxlY3Rpb24oIGZhbHNlICk7Ci0gICAgICAKLSAgICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoIGJ1dHRvbiwgaW5mb3BvcCApOyAgCQotICAJfQotICAJCi0gIAlyZXR1cm4gY29tcG9zaXRlOwotICB9ICAKLX0gIApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1NpbXBsZVdpZGdldENvbnRyaWJ1dG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvU2ltcGxlV2lkZ2V0Q29udHJpYnV0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTUyYzJmNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvU2ltcGxlV2lkZ2V0Q29udHJpYnV0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhTWFwcGluZ1JlZ2lzdHJ5OwotCi1wdWJsaWMgY2xhc3MgU2ltcGxlV2lkZ2V0Q29udHJpYnV0b3IgaW1wbGVtZW50cyBJTmFtZWRXaWRnZXRDb250cmlidXRvciAKLXsKLSAgICBwcml2YXRlIFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSBmYWN0b3J5XzsKLQlwcml2YXRlIFN0cmluZyAgICAgICAgICAgICAgICAgICBuYW1lXzsKLQlwcml2YXRlIFN0cmluZyAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbl87Ci0JcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICAgICAgICAgdGl0bGVfOwotCQotCXB1YmxpYyB2b2lkIHNldERlc2NyaXB0aW9uKFN0cmluZyBkZXNjcmlwdGlvbikgCi0JewotCQlkZXNjcmlwdGlvbl8gPSBkZXNjcmlwdGlvbjsKLQl9Ci0JCi0KLQlwdWJsaWMgdm9pZCBzZXRGYWN0b3J5KFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSBmYWN0b3J5KSAKLQl7Ci0JCWZhY3RvcnlfID0gZmFjdG9yeTsKLQl9Ci0JCi0KLQlwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKSAKLQl7Ci0JCW5hbWVfID0gbmFtZTsKLQl9Ci0JCi0KLQlwdWJsaWMgdm9pZCBzZXRUaXRsZShTdHJpbmcgdGl0bGUpIAotCXsKLQkJdGl0bGVfID0gdGl0bGU7Ci0JfQotCQotCi0JcHVibGljIFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSBnZXRXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKSAKLQl7Ci0JCXJldHVybiBmYWN0b3J5XzsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSAKLQl7Ci0JCXJldHVybiBuYW1lXzsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgCi0JewotCQlyZXR1cm4gZGVzY3JpcHRpb25fOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0VGl0bGUoKSAKLQl7Ci0JCXJldHVybiB0aXRsZV87Ci0JfQotCi0JLyoqCi0JICogU3Vic2NsYXNzZXJzIHNob3VsZCBvdmVycmlkZSB0aGlzIG1ldGhvZC4KLQkgKi8KLQlwdWJsaWMgdm9pZCByZWdpc3RlckRhdGFNYXBwaW5ncyhEYXRhTWFwcGluZ1JlZ2lzdHJ5IGRhdGFSZWdpc3RyeSkgCi0JewotCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1NpbXBsZVdpZGdldERhdGFDb250cmlidXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1NpbXBsZVdpZGdldERhdGFDb250cmlidXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjgwNmExLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9TaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLQotCi0vKioKLSAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSBzaW1wbGUgV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yIGNsYXNzIHRoYXQgY29uY3JldGUgCi0gKiBXaWRnZXREYXRhQ29udHJpYnV0b3JzIGNhbiBzdWJjbGFzcy4KLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBTaW1wbGVXaWRnZXREYXRhQ29udHJpYnV0b3IgaW1wbGVtZW50cyBXaWRnZXREYXRhQ29udHJpYnV0b3IKLXsgIAotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvciNhZGRDb250cm9scyhvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUsIG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3RlbmVyKQotICAgKi8KLSAgcHVibGljIFdpZGdldERhdGFFdmVudHMgYWRkQ29udHJvbHMoIENvbXBvc2l0ZSBwYXJlbnQsIExpc3RlbmVyIHN0YXR1c0xpc3RlbmVyKQotICB7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5XaWRnZXRDb250cmlidXRvciNnZXRTdGF0dXMoKQotICAgKi8KLSAgcHVibGljIElTdGF0dXMgZ2V0U3RhdHVzKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuV2lkZ2V0RGF0YUV2ZW50cyNleHRlcm5hbGl6ZSgpCi0gICAqLwotICBwdWJsaWMgdm9pZCBleHRlcm5hbGl6ZSgpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldERhdGFFdmVudHMjaW50ZXJuYWxpemUoKQotICAgKi8KLSAgcHVibGljIHZvaWQgaW50ZXJuYWxpemUoKQotICB7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9TaW1wbGVXaWRnZXRSZWdpc3RyeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1NpbXBsZVdpZGdldFJlZ2lzdHJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhNmZhZmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1NpbXBsZVdpZGdldFJlZ2lzdHJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotCi0KLQotcHVibGljIGNsYXNzIFNpbXBsZVdpZGdldFJlZ2lzdHJ5IGltcGxlbWVudHMgV2lkZ2V0UmVnaXN0cnkKLXsKLSAgcHJpdmF0ZSBIYXNodGFibGUgdGFibGVfID0gbmV3IEhhc2h0YWJsZSgpOwotICAKLSAgcHVibGljIHZvaWQgYWRkKCBTdHJpbmcgZnJhZ21lbnRJZCwKLSAgICAgICAgICAgICAgICAgICBTdHJpbmcgcGFnZU5hbWUsCi0gICAgICAgICAgICAgICAgICAgU3RyaW5nIHBhZ2VUaXRsZSwKLSAgICAgICAgICAgICAgICAgICBXaWRnZXRDb250cmlidXRvckZhY3Rvcnkgd2lkZ2V0RmFjdG9yeSApCi0gIHsKLSAgCVBhZ2VJbmZvIGVudHJ5ID0gbmV3IFBhZ2VJbmZvKCBwYWdlTmFtZSwgcGFnZVRpdGxlLCB3aWRnZXRGYWN0b3J5ICk7Ci0gIAl0YWJsZV8ucHV0KCBmcmFnbWVudElkLCBlbnRyeSApOwotICB9ICAgICAgICAgICAgICAgICAgIAotICAKLSAgcHVibGljIFBhZ2VJbmZvIGdldFBhZ2VJbmZvKCBTdHJpbmcgZnJhZ21lbnRJZCApCi0gIHsKLSAgICByZXR1cm4gKFBhZ2VJbmZvKXRhYmxlXy5nZXQoIGZyYWdtZW50SWQgKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1NpbXBsZVdpemFyZFBhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9TaW1wbGVXaXphcmRQYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2MjU5NjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1NpbXBsZVdpemFyZFBhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNzMxICAgMTIwMzc4IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBGaWVsZHMgbm90IHZpc2libGUgaW4gTGFyZ2UgZm9udCBzZXR0aW5ncwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLklXaXphcmRQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmRQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5TY3JvbGxlZENvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci0KLQotCi1wdWJsaWMgY2xhc3MgU2ltcGxlV2l6YXJkUGFnZSBleHRlbmRzIFdpemFyZFBhZ2UgaW1wbGVtZW50cyBQYWdlV2l6YXJkRGF0YUV2ZW50cwotewotICBwcml2YXRlICAgV2lkZ2V0Q29udHJpYnV0b3Igd2lkZ2V0XzsKLSAgcHJpdmF0ZSAgIFdpZGdldERhdGFFdmVudHMgIGRhdGFFdmVudHNfOwotICBwcml2YXRlICAgTGlzdGVuZXIgICAgICAgICAgc3RhdHVzTGlzdGVuZXJfOwotICBwcm90ZWN0ZWQgV2l6YXJkUGFnZU1hbmFnZXIgcGFnZU1hbmFnZXJfOwotICAJCi0gIHB1YmxpYyBTaW1wbGVXaXphcmRQYWdlKCBQYWdlSW5mbyBwYWdlSW5mbywgV2l6YXJkUGFnZU1hbmFnZXIgcGFnZU1hbmFnZXIgKQotICB7Ci0gIAlzdXBlciggIiIgKTsKLSAgCQotICAJc2V0VGl0bGUoIHBhZ2VJbmZvLmdldFBhZ2VOYW1lKCkgKTsKLSAgCXNldERlc2NyaXB0aW9uKCBwYWdlSW5mby5nZXRQYWdlVGl0bGUoKSk7Ci0gIAkgIAotICAJd2lkZ2V0XyAgICAgICAgID0gcGFnZUluZm8uZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZSgpOwotICAJc3RhdHVzTGlzdGVuZXJfID0gbmV3IFN0YXR1c0xpc3RlbmVyKCk7Ci0gIAlwYWdlTWFuYWdlcl8gICAgPSBwYWdlTWFuYWdlcjsKLSAgfSAJICAKLSAgCQotICBwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKCBDb21wb3NpdGUgcGFyZW50ICkgCi0gIHsJICAKLQlTY3JvbGxlZENvbXBvc2l0ZSBjb250cm9sID0gbmV3IFNjcm9sbGVkQ29tcG9zaXRlKCBwYXJlbnQsIFNXVC5WX1NDUk9MTCApOwkKLQlDb21wb3NpdGUgaW5uZXIgPSBpbnRlcm5hbENyZWF0ZUNvbnRyb2woY29udHJvbCk7Ci0JCi0JY29udHJvbC5zZXRFeHBhbmRIb3Jpem9udGFsKHRydWUpOwotICAJY29udHJvbC5zZXRFeHBhbmRWZXJ0aWNhbCh0cnVlKTsKLQljb250cm9sLnNldENvbnRlbnQoaW5uZXIpOyAgCQotICAgIGNvbnRyb2wuc2V0TWluU2l6ZShpbm5lci5jb21wdXRlU2l6ZShTV1QuREVGQVVMVCwgU1dULkRFRkFVTFQpKTsJCi0JCi0gICAgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5EaWFsb2cuYXBwbHlEaWFsb2dGb250KGNvbnRyb2wpOwotICAgIHNldENvbnRyb2woIGNvbnRyb2wgKTsKLSAgfQotCQotICBwcm90ZWN0ZWQgQ29tcG9zaXRlIGludGVybmFsQ3JlYXRlQ29udHJvbCggQ29tcG9zaXRlIHBhcmVudCApIHsKLQotCUNvbXBvc2l0ZSBjb250cm9sID0gbmV3IENvbXBvc2l0ZSggcGFyZW50LCBTV1QuTk9ORSApOwotCWNvbnRyb2wuc2V0TGF5b3V0KCBuZXcgR3JpZExheW91dCgpICk7Ci0gIAljb250cm9sLnNldExheW91dERhdGEoIG5ldyBHcmlkRGF0YSggR3JpZERhdGEuRklMTF9CT1RIICkpOwotCQotCWRhdGFFdmVudHNfID0gd2lkZ2V0Xy5hZGRDb250cm9scyggY29udHJvbCwgc3RhdHVzTGlzdGVuZXJfICk7CQotCQotCXJldHVybiBjb250cm9sOwotICB9Ci0gIAotICBwdWJsaWMgV2lkZ2V0RGF0YUV2ZW50cyBnZXREYXRhRXZlbnRzKCkKLSAgewotICAgIHJldHVybiBkYXRhRXZlbnRzXzsKLSAgfQotICAJICAKLSAgcHVibGljIHZvaWQgdmFsaWRhdGVQYWdlVG9TdGF0dXMoKQotICB7Ci0gICAgSVN0YXR1cyBzdGF0dXMgID0gd2lkZ2V0Xy5nZXRTdGF0dXMoKTsKLSAgICAKLSAgICBpZiggc3RhdHVzICE9IG51bGwgKQotICAgIHsKLSAgICAgIGlmKCBzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLkVSUk9SICkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIG1lc3NhZ2UgPSBzdGF0dXMuZ2V0TWVzc2FnZSgpOwotCi0gICAgICAgIGlmKCBtZXNzYWdlLmxlbmd0aCgpID09IDAgKQotICAgICAgICB7Ci0gICAgICAgICAgc2V0RXJyb3JNZXNzYWdlKCBudWxsICk7Ci0gICAgICAgICAgc2V0TWVzc2FnZSggZ2V0RGVzY3JpcHRpb24oKSApOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHNldEVycm9yTWVzc2FnZSggbWVzc2FnZSApOwotICAgICAgICB9Ci0gICAgICAgICAgCi0gICAgICAgIHNldFBhZ2VDb21wbGV0ZSggZmFsc2UgKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuV0FSTklORyApCi0gICAgICB7Ci0gICAgICAgIHNldEVycm9yTWVzc2FnZSggbnVsbCApOwotICAgICAgICBzZXRNZXNzYWdlKHN0YXR1cy5nZXRNZXNzYWdlKCksIElTdGF0dXMuV0FSTklORyApOwotICAgICAgICBzZXRQYWdlQ29tcGxldGUoIHRydWUgKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYoIHN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuSU5GTyApCi0gICAgICB7Ci0gICAgICAgIHNldEVycm9yTWVzc2FnZSggbnVsbCApOwotICAgICAgICBzZXRNZXNzYWdlKCBzdGF0dXMuZ2V0TWVzc2FnZSgpLCBJU3RhdHVzLklORk8gKTsKLSAgICAgICAgc2V0UGFnZUNvbXBsZXRlKCB0cnVlICk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHNldEVycm9yTWVzc2FnZSggbnVsbCApOwotICAgICAgICBzZXRNZXNzYWdlKCBnZXREZXNjcmlwdGlvbigpICk7Ci0gICAgICAgIHNldFBhZ2VDb21wbGV0ZSggdHJ1ZSApOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgc2V0RXJyb3JNZXNzYWdlKCBudWxsICk7Ci0gICAgICBzZXRNZXNzYWdlKCBnZXREZXNjcmlwdGlvbigpICk7Ci0gICAgICBzZXRQYWdlQ29tcGxldGUoIHRydWUgKTsKLSAgICB9Ci0gICAgCi0gICAgZ2V0Q29udGFpbmVyKCkudXBkYXRlQnV0dG9ucygpOwotICB9Ci0gICAgCi0gIHB1YmxpYyBib29sZWFuIGNhbkZsaXBUb05leHRQYWdlKCkgCi0gIHsKLQlyZXR1cm4gaXNQYWdlQ29tcGxldGUoKSAmJiBwYWdlTWFuYWdlcl8uaGFzTmV4dFBhZ2UoKTsKLSAgfQotCi0gIHB1YmxpYyBJV2l6YXJkUGFnZSBnZXROZXh0UGFnZSgpIAotICB7Ci0JcmV0dXJuIHBhZ2VNYW5hZ2VyXy5nZXROZXh0UGFnZSgpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRWaXNpYmxlKGJvb2xlYW4gdmFsdWUpIAotICB7Ci0gIAlwYWdlTWFuYWdlcl8uaGFuZGxlUGFnZVZpc2libGUoIHRoaXMsIHZhbHVlICk7Ci0gIAkKLSAgICBzdXBlci5zZXRWaXNpYmxlKHZhbHVlKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBjbGFzcyBTdGF0dXNMaXN0ZW5lciBpbXBsZW1lbnRzIExpc3RlbmVyCi0gIHsKLQlwdWJsaWMgdm9pZCBoYW5kbGVFdmVudCggRXZlbnQgZXZ0ICkgCi0JewotICAgICAgdmFsaWRhdGVQYWdlVG9TdGF0dXMoKTsKLQl9Ci0gIH0KLX0gIApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1dpZGdldEJpbmRpbmdUb1dpZGdldEZhY3RvcnlBZGFwdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvV2lkZ2V0QmluZGluZ1RvV2lkZ2V0RmFjdG9yeUFkYXB0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTUyZjdjOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvV2lkZ2V0QmluZGluZ1RvV2lkZ2V0RmFjdG9yeUFkYXB0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0czsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnk7Ci0KLXB1YmxpYyBjbGFzcyBXaWRnZXRCaW5kaW5nVG9XaWRnZXRGYWN0b3J5QWRhcHRlciAKLXsKLSAgcHJpdmF0ZSBIYXNodGFibGUgICAgICAgICAgICB3aWRnZXRDb250cmlidXRvcl87Ci0gIHByaXZhdGUgQ29tbWFuZFdpZGdldEJpbmRpbmcgYmluZGluZ187Ci0gIAotICBwdWJsaWMgV2lkZ2V0QmluZGluZ1RvV2lkZ2V0RmFjdG9yeUFkYXB0ZXIoIENvbW1hbmRXaWRnZXRCaW5kaW5nIGJpbmRpbmcgKQotICB7Ci0gICAgd2lkZ2V0Q29udHJpYnV0b3JfID0gbmV3IEhhc2h0YWJsZSgpOyAKLQliaW5kaW5nXyAgICAgICAgICAgPSBiaW5kaW5nOwotCQotCWJpbmRpbmcucmVnaXN0ZXJXaWRnZXRNYXBwaW5ncyggbmV3IE15V2lkZ2V0UmVnaXN0cnkoKSApOwotICB9Ci0gIAotICBwdWJsaWMgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3IgZ2V0V2lkZ2V0KCBTdHJpbmcgaWQgKQotICB7Ci0gICAgcmV0dXJuIChJTmFtZWRXaWRnZXRDb250cmlidXRvcil3aWRnZXRDb250cmlidXRvcl8uZ2V0KCBpZCApOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU1hcHBpbmdzKCBEYXRhTWFwcGluZ1JlZ2lzdHJ5IHJlZ2lzdHJ5ICkKLSAgewotICAgIGJpbmRpbmdfLnJlZ2lzdGVyRGF0YU1hcHBpbmdzKCByZWdpc3RyeSApOyAgCi0gIH0KLSAgCi0gIHByaXZhdGUgY2xhc3MgTXlXaWRnZXRSZWdpc3RyeSBpbXBsZW1lbnRzIFdpZGdldFJlZ2lzdHJ5Ci0gIHsKLQlwdWJsaWMgdm9pZCBhZGQoU3RyaW5nIGZyYWdtZW50SWQsIFN0cmluZyBwYWdlTmFtZSwgU3RyaW5nIHBhZ2VUaXRsZSwgV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5IHdpZGdldEZhY3RvcnkpIAotCXsKLQkgIFNpbXBsZVdpZGdldENvbnRyaWJ1dG9yIHdpZGdldCA9IG5ldyBTaW1wbGVXaWRnZXRDb250cmlidXRvcigpOwotCSAgd2lkZ2V0LnNldFRpdGxlKCBwYWdlTmFtZSApOwotCSAgd2lkZ2V0LnNldERlc2NyaXB0aW9uKCBwYWdlVGl0bGUgKTsKLQkgIHdpZGdldC5zZXRGYWN0b3J5KCBuZXcgTXlXaWRnZXRDb250cmlidXRvckZhY3RvcnkoIHdpZGdldEZhY3RvcnkgKSApOwotCSAgCi0JICB3aWRnZXRDb250cmlidXRvcl8ucHV0KCBmcmFnbWVudElkLCB3aWRnZXQgKTsKLQl9CSAgCi0gIH0KLSAgCi0gIHByaXZhdGUgY2xhc3MgTXlXaWRnZXRDb250cmlidXRvckZhY3RvcnkgaW1wbGVtZW50cyBXaWRnZXRDb250cmlidXRvckZhY3RvcnkKLSAgewotCXByaXZhdGUgV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5IGZhY3RvcnlfOwotCXByaXZhdGUgV2lkZ2V0Q29udHJpYnV0b3IgICAgICAgIHdpZGdldF87Ci0JCi0JcHVibGljIE15V2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5KCBXaWRnZXRDb250cmlidXRvckZhY3RvcnkgZmFjdG9yeSApCi0JewotCSAgZmFjdG9yeV8gPSBmYWN0b3J5OwkKLQl9Ci0JCi0JcHVibGljIFdpZGdldENvbnRyaWJ1dG9yIGNyZWF0ZSgpIAotCXsKLSAgICAgIGlmKCB3aWRnZXRfID09IG51bGwgKQotCSAgewotCSAgICB3aWRnZXRfID0gZmFjdG9yeV8uY3JlYXRlKCk7Ci0JICB9Ci0JICAKLQkgIHJldHVybiB3aWRnZXRfOwotCX0JICAKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1dpZGdldENvbnRyaWJ1dG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvV2lkZ2V0Q29udHJpYnV0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWM4YWZjNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvV2lkZ2V0Q29udHJpYnV0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLQotCi0vKioKLSAqIFRoaXMgaW50ZXJmYWNlIHByb3ZpZGVzIGEgd2F5IGZvciBkZXZlbG9wZXJzIHRvIGNyZWF0ZSB2YWxpZGF0YWJsZSB3aWRnZXRzCi0gKiB0aGF0IGNhbiBiZSB1c2VkIGluIG1hbnkgZGlmZmVyZW50IEVjbGlwc2UgVUkgY29udGV4dHMuIChpZS4gaW4gYSBXaW5kb3dzLCBEaWFnbG9ncywKLSAqIHdpemFyZCBwYWdlcywgZXRjKQotICoKLSAqIFRoZSBtYWluIGZ1bmN0aW9uYWxpdHkgdGhpcyBpbnRlcmZhY2UgaGFzIG92ZXIganVzdCBhIHJlZ3VsYXIgRWNsaXBzZSBDb21wb3NpdGUKLSAqIGlzIHRoYXQgaXQgcHJvdmlkZXMgYSBtZWNoYW5pc20gZm9yIHZhbGlkYXRpbmcgdGhlIFdpZGdldC4gIFdoZW4gdmFsaWRhdGluZwotICogdGhlcmUgYXJlIHR3byBhc3BlY3RzIHRvIGtlZXAgaW4gbWluZC4gIFRoZSBmaXJzdCBhc3BlY3QgZGVhbHMgd2l0aCBXSEVOIHZhbGlkYXRpb24KLSAqIG9jY3VycyBhbmQgdGhlIHNlY29uZCBhc3BlY3QgZGVhbHMgd2l0aCBXSEFUIHRvIGRvIGZvciBhIHZhbGlkYXRpb24gZXZlbnQuCi0gKiAKLSAqIFRoZSBmaXJzdCBhc3BlY3Qgb2YgdHJpZ2dlcmluZyB2YWxpZGF0aW9uIGV2ZW50cyBpcyBoYW5kbGVkIGJ5IHRoZSBzdGF0dXNMaXN0ZW5lcgotICogcGFyYW1ldGVyIG9mIHRoZSBhZGRDb250cm9scyBtZXRob2QuICBJZiBhIHBhcnRpY3VsYXIgY29udHJvbCB0aGF0IGlzIGNvbnRyaWJ1dGVkIGNhbgotICogYWZmZWN0IHRoZSB2YWxpZGl0eSBvZiB0aGlzIFdpZGdldENvbnRyaWJ1dG9yIHRoZW4gdGhlIHN0YXR1c0xpc3RlbmVyIG9iamVjdAotICogc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSBsaXN0ZW5lciBsaXN0IG9mIHRoYXQgY29udHJvbC4gIEZvciBleGFtcGxlLCBpZiB0aGUgdGV4dCBpbgotICogYSBUZXh0IHdpZGdldCBjYW4gYWZmZWN0IHRoZSB2YWxpZGl0eSBvZiB0aGlzIFdpZGdldENvbnRyaWJ1dG9yIHRoZW4geW91IHdvdWxkCi0gKiBhZGQgdGhlIHN0YXR1c0xpc3RlbmVyIHRvIHRoZSBUZXh0IHdpZGdldHMgTW9kaWZ5IGxpc3RlbmVyIGxpc3Q6Ci0gKiAKLSAqIAotICogICBUZXh0IHNvbWVUZXh0ID0gbmV3IFRleHQoIHBhcmVudCwgU1dULk5PTkUgKTsKLSAqICAgc29tZVRleHQuYWRkTGlzdGVuZXIoIFNXVC5Nb2RpZnksIHN0YXR1c0xpc3RlbmVyICk7Ci0gKiAKLSAqIE5vdGU6IGlmIHlvdSB3YW50IHRvIGZvcmNlIHZhbGlkYXRpb24gb2YgdGhpcyB3aWRnZXQgeW91IGNhbiBjYWxsCi0gKiAgICAgICB0aGUgc3RhdHVzTGlzdGVuZXIuaGFuZGxlRXZlbnQobnVsbCkgbWV0aG9kIGRpcmVjdGx5LiAgVGhpcwotICogICAgICAgaXMgbm90IHRoZSBwcmVmZXJlZCBtYXkgdG8gdHJpZ2dlciB2YWxpZGF0aW9uLCBob3dldmVyLgotICogICAgICAgCi0gKiBUaGUgc2Vjb25kIGFzcGVjdCBvZiB2YWxpYXRpb24gaXMgd2hhdCB0byBkbyB3aGVuIHRoZSB2YWxpZGF0aW9uIGV2ZW50IG9jY3Vycy4KLSAqIFRoaXMgaXMgaGFuZGxlZCBieSBnZXRTdGF0dXMgbWV0aG9kLiAgQW55IGNvZGUgdGhhdCBlbnN1cmVzIHRoYXQgdGhpcyB3aWRnZXQgaXMKLSAqIHZhbGlkIHNob3VsZCBiZSBwdXQgaW4gdGhlIGdldFN0YXR1cyBpbXBsZW1lbnRhdGlvbi4gCi0gKiAKLSAqIAotKi8KLXB1YmxpYyBpbnRlcmZhY2UgV2lkZ2V0Q29udHJpYnV0b3IgCi17Ci0gIC8qKgotICAgKiBUaGlzIG1ldGhvZCBzaG91bGQgYmUgdXNlZCB0byBpbXBsZW1lbnQgdGhlIFVJIGNvbnRyaWJ1dGlvbnMgZm9yIHRoaXMgd2lkZ2V0LgotICAgKiAKLSAgICogQHBhcmFtIHBhcmVudCBUaGUgY29tcG9zaXRlIHBhcmVudCB0aGF0IHN1YiB3aWRnZXRzIHNob3VsZCB1c2UuCi0gICAqIEBwYXJhbSBzdGF0dXNMaXN0ZW5lciBUaGlzIGxpc3RlbmVyIHNob3VsZCBiZSBhZGRlZCB0byBhbnkgd2lkZ2V0IHRoYXQgY2FuCi0gICAqICAgICAgICAgICAgICAgICAgICAgICBhZmZlY3QgdGhlIHZhbGlkaXR5IG9mIHRoaXMgV2lkZ2V0Q29udHJpYnV0b3IuCi0gICAqIEByZXR1cm4gcmV0dXJucyBhIFdpZGdldERhdGFFdmVudHMgb2JqZWN0LiAgVGhpcyBvYmplY3QgaXMgdXNlZCBieSB0aGUKLSAgICogICAgICAgICBmcmFtZXdvcmsgdG8gaW50ZXJuYWxpemUgYW5kIGV4dGVybmFsaXplIGRhdGEgZm9yIHRoaXMgd2lkZ2V0LgotICAgKi8KLSAgcHVibGljIFdpZGdldERhdGFFdmVudHMgYWRkQ29udHJvbHMoIENvbXBvc2l0ZSBwYXJlbnQsIExpc3RlbmVyIHN0YXR1c0xpc3RlbmVyICk7Ci0gIAotICAvKioKLSAgICogVGhpcyBtZXRob2Qgc2hvdWxkIGltcGxlbWVudCB2YWxpZGF0aW9uIGNvZGUgZm9yIHRoaXMgV2lkZ2V0Q29udHJpYnV0b3IuCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgYSBzdGF0dXMgb2JqZWN0IGluZGljYXRpbmcgdGhlIHZhbGlkaXR5IG9mIHRoaXMgd2lkZ2V0LgotICAgKiAgICAgICAgIElmIHRoZSBzdGF0dXMgc2V2ZXJpdHkgaXMgRVJST1IgdGhlbiB0aGlzIHdpZGdldCBpcyBjb25zaWRlcmVkIHRvCi0gICAqICAgICAgICAgYmUgaW52YWxpZC4gIEZvciBhbnkgb3RoZXIgc3RhdHVzIHNldmVyaXR5IG9yIGlmIHRoZSBzdGF0dXMgcmV0dXJuZWQKLSAgICogICAgICAgICBpcyBudWxsIHRoaXMgd2lkZ2V0IGlzIGNvbnNpZGVyZWQgdG8gYmUgdmFsaWQuCi0gICAqLwotICBwdWJsaWMgSVN0YXR1cyBnZXRTdGF0dXMoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9XaWRnZXRDb250cmlidXRvckZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9XaWRnZXRDb250cmlidXRvckZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI3ZWZjNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHM7Ci0KLS8qKgotICogVGhpcyBpbnRlcmZhY2UgcHJvdmlkZSBhIHdheSBmb3IgY3JlYXRpbmcgV2lkZ2V0Q29udHJpYnV0b3JzCi0gKgotICoKLSAqLwotcHVibGljIGludGVyZmFjZSBXaWRnZXRDb250cmlidXRvckZhY3RvcnkgCi17Ci0gIHB1YmxpYyBXaWRnZXRDb250cmlidXRvciBjcmVhdGUoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9XaWRnZXREYXRhQ29udHJpYnV0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9XaWRnZXREYXRhQ29udHJpYnV0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc4MWFjYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvV2lkZ2V0RGF0YUNvbnRyaWJ1dG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHM7Ci0KLS8qKgotICogVGhpcyBpbnRlcmZhY2UgaXMgYSBjb21iaW5hdGlvbiBvZiB0aGUgV2lkZ2V0Q29udHJpYnV0b3IgaW50ZXJmYWNlIGFuZAotICogdGhlIFdpZGdldERhdGFFdmVudHMgaW50ZXJmYWNlLgotICoKLSAqLwotcHVibGljIGludGVyZmFjZSBXaWRnZXREYXRhQ29udHJpYnV0b3IgZXh0ZW5kcyBXaWRnZXRDb250cmlidXRvciwgV2lkZ2V0RGF0YUV2ZW50cyAKLXsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9XaWRnZXREYXRhRXZlbnRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvV2lkZ2V0RGF0YUV2ZW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDFkOWY4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9XaWRnZXREYXRhRXZlbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHM7Ci0KLS8qKgotICogVGhpcyBpbnRlcmZhY2UgcHJvdmlkZXMgYSB3YXkgZm9yIGludGVybmFsaXppbmcgYW5kIGV4dGVybmFsaXppbmcgc3RhdGUKLSAqIGRhdGEgaW4gYSBXaWRnZXRDb250cmlidXRvci4gIFRoZSBpbnRlcm5hbGl6ZSBtZXRob2Qgd2lsbCBiZSBjYWxsZWQKLSAqIGJlZm9yZSB0aGUgd2lkZ2V0IGlzIGRpc3BsYXllZCBzbyB0aGF0IGl0IGNhbiBzZXQgdGhlIGRlZmF1bHQgZGF0YQotICogZm9yIHRoYXQgd2lkZ2V0LiAgVGhlIGV4dGVybmFsaXplIG1ldGhvZCBwcm92aWRlcyBhIHdheSBvZiBnZXR0aW5nIGRhdGEKLSAqIGZyb20gdGhlIHdpZGdldCBhZnRlciBpdCBpcyBkaXNwbGF5ZWQuCi0gKgotICovCi1wdWJsaWMgaW50ZXJmYWNlIFdpZGdldERhdGFFdmVudHMgCi17Ci0gIC8qKgotICAgKiBJbXBsZW1lbnRhdGlvbnMgc2hvdWxkIHNldCB3aWRnZXQgc3RhdGUgZGF0YSBoZXJlLgotICAgKgotICAgKi8KLSAgcHVibGljIHZvaWQgaW50ZXJuYWxpemUoKTsKLSAgCi0gIC8qKgotICAgKiBJbXBsZW1lbmF0aW9ucyBzaG91bGQgZ2V0IHdpZGdldCBzdGF0ZSBkYXRhIGhlcmUuCi0gICAqCi0gICAqLwotICBwdWJsaWMgdm9pZCBleHRlcm5hbGl6ZSgpOyAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvV2lkZ2V0UmVnaXN0cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9XaWRnZXRSZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTFiMThmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9XaWRnZXRSZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzOwotCi0vKioKLSAqIFRoaXMgaW50ZXJmYWNlIGRlZmluZXMgaG93IFdpZGdldENvbnRyaWJ1dG9ycyBhcmUgbWFkZSBrbm93biB0byB0aGUKLSAqIGR5bmFtaWMgd2l6YXJkIGZyYW1ld29yay4gIFRoaXMgd2lkZ2V0IHdpbGwgYmUgZGlzcGxheWVkIGFzIGEgd2l6YXJkIHBhZ2UKLSAqIHdpdGggdGhlIG5hbWUgYW5kIHRpdGxlIHNwZWNpZmllZCBpbiB0aGUgYWRkIG1ldGhvZC4gIFRoZSBmcmFnbWVudElkIGlzIAotICogdXNlZCB0byBhc3NvY2lhdGUgdGhpcyB3aWRnZXQgd2l0aCBhIHBhcnRpY3VsYXIgQ29tbWFuZEZyYWdtZW50LiAgV2hlbgotICogYSBDb21tYW5kRnJhZ21lbnQgd2l0aCB0aGlzIGZyYWdtZW50SWQgaXMgdHJhdmVyc2VkIHRoZSBjb3JyZXNwb25kaW5nCi0gKiBXaWRnZXRDb250cmlidXRvciB3aWxsIGJlIGRpc3BsYXllZC4KLSAqCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgV2lkZ2V0UmVnaXN0cnkKLXsKLSAgLyoqCi0gICAqIEFkZHMgYSBXaWRnZXRDb250cmlidXRvckZhY3RvcnkgdG8gdGhlIGZyYW1ld29yay4gIFRoaXMgZmFjdG9yeQotICAgKiBpcyB1c2VkIHRvIGdldCB0aGUgV2lkZ2V0Q29udHJpYnV0b3IuICBUaGlzIFdpZGdldENvbnRyaWJ1dG9yCi0gICAqIHdpbGwgYmUgdXNlZCB0byByZW5kZXIgdGhlIHdpemFyZCBwYWdlLgotICAgKiAKLSAgICogQHBhcmFtIGZyYWdtZW50SWQgdGhlIENvbW1hbmRGcmFnbWVudCBpZCB0aGF0IHRoaXMgV2lkZ2V0Q29udHJpYnV0b3IgaXMgYXNzb2NpYXRlZCB3aXRoLgotICAgKiBAcGFyYW0gcGFnZU5hbWUgdGhlIG5hbWUgb2YgdGhpcyB3aXphcmQgcGFnZS4KLSAgICogQHBhcmFtIHBhZ2VUaXRsZSB0aGUgdGl0bGUgb2YgdGhpcyB3aXphcmQgcGFnZS4KLSAgICogQHBhcmFtIHdpZGdldEZhY3RvcnkgdGhlIGZhY3Rvcnkgd2hpY2ggd2lsbCBjcmVhdGUgdGhlIFdpZGdldENvbnRyaWJ1dG9yLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkKCBTdHJpbmcgZnJhZ21lbnRJZCwKLQkJCQkgICBTdHJpbmcgcGFnZU5hbWUsCi0JCQkJICAgU3RyaW5nIHBhZ2VUaXRsZSwKLQkJCQkgICBXaWRnZXRDb250cmlidXRvckZhY3Rvcnkgd2lkZ2V0RmFjdG9yeSApOwotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9XaXphcmRQYWdlRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1dpemFyZFBhZ2VGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2YjY2NGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1dpemFyZFBhZ2VGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHM7Ci0KLQotLyoqCi0gKiAKLSAqCi0gKgotICoKLSAqLwotcHVibGljIGludGVyZmFjZSBXaXphcmRQYWdlRmFjdG9yeSAKLXsKLSAgcHVibGljIFBhZ2VXaXphcmREYXRhRXZlbnRzIGdldFBhZ2UoIFBhZ2VJbmZvIHBhZ2VJbmZvLCBXaXphcmRQYWdlTWFuYWdlciBtYW5hZ2VyICk7IAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi91aS93aWRnZXRzL1dpemFyZFBhZ2VNYW5hZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvV2l6YXJkUGFnZU1hbmFnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDY4ZWQ3ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvV2l6YXJkUGFnZU1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMjMgICAxMjkyMzIgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNjAzMTMgICAxMzA5NTggcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNzAzMTkgICAxNzU3MjEgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNzAzMjggICAxNzMzNDUgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgUGVlayBuZXh0IHBhZ2UgcHJvYmxlbQotICogMjAwNzA3MzAgICAxOTcxNDQgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29naywgUGFzcyBwcm9ncmVzcyBtb25pdG9yIHRvIHVuZG8gY29tbWFuZHMuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5TdGFjazsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5JV2l6YXJkOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5JV2l6YXJkQ29udGFpbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5JV2l6YXJkUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFGbG93TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuRWNsaXBzZUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5yZWdpc3RyeS5XaWRnZXRSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklMb2c7Ci0KLQotCi1wdWJsaWMgY2xhc3MgV2l6YXJkUGFnZU1hbmFnZXIgZXh0ZW5kcyBTaW1wbGVDb21tYW5kRW5naW5lTWFuYWdlcgotewotICBwcml2YXRlICAgV2l6YXJkUGFnZUZhY3RvcnkgICAgICBwYWdlRmFjdG9yeV87Ci0gIHByaXZhdGUgICBIYXNodGFibGUgICAgICAgICAgICAgIHBhZ2VUYWJsZV87Ci0gIHByaXZhdGUgICBJV2l6YXJkICAgICAgICAgICAgICAgIHdpemFyZF87Ci0gIHByb3RlY3RlZCBTaW1wbGVXaWRnZXRSZWdpc3RyeSAgIHJlZ2lzdHJ5XzsKLSAgCi0gIC8vIFRoZXNlIHZhcmlhYmxlcyBhcmUgdXNlZCBhbmQgc2V0IGJ5IG91ciBtZXRob2RzIHdoaWNoIGlzCi0gIC8vIHdoeSB0aGV5IGFyZSBub3QgaW5pdGlhbGl6ZWQgaW4gdGhlIGNvbnN0cnVjdG9yLgotICBwcml2YXRlIFBhZ2VXaXphcmREYXRhRXZlbnRzIGN1cnJlbnRQYWdlXzsKLSAgcHJpdmF0ZSBQYWdlV2l6YXJkRGF0YUV2ZW50cyBuZXh0UGFnZV87Ci0gIHByaXZhdGUgUGFnZVdpemFyZERhdGFFdmVudHMgbmV4dFBlZWtQYWdlXzsKLSAgcHJpdmF0ZSBQYWdlV2l6YXJkRGF0YUV2ZW50cyBmaXJzdFBhZ2VfOwotICBwcml2YXRlIENvbW1hbmRGcmFnbWVudCAgICAgIGxhc3RVbmRvRnJhZ21lbnRfOwotICBwcml2YXRlIGJvb2xlYW4gICAgICAgICAgICAgIGZpcnN0RnJhZ21lbnRfOwotICAKLSAgcHJpdmF0ZSBJTmFtZWRXaWRnZXRDb250cmlidXRvckZhY3Rvcnkgd2lkZ2V0RmFjdG9yeV87Ci0gIHByaXZhdGUgU3RhY2sgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZGdldFN0YWNrXzsKLSAgcHJpdmF0ZSBTdGFjayAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkZ2V0U3RhY2tTdGFja187Ci0gIHByaXZhdGUgSGFzaHRhYmxlICAgICAgICAgICAgICAgICAgICAgIHdpZGdldFRhYmxlXzsKLSAgcHJpdmF0ZSBXaWRnZXRSZWdpc3RyeSAgICAgICAgICAgICAgICAgd2lkZ2V0UmVnaXN0cnlfOwotICBwcml2YXRlIEhhc2h0YWJsZSAgICAgICAgICAgICAgICAgICAgICB3aWRnZXRGYWN0b3J5VGFibGVfOwotICAgIAotICBwdWJsaWMgV2l6YXJkUGFnZU1hbmFnZXIoIFNpbXBsZVdpZGdldFJlZ2lzdHJ5ICByZWdpc3RyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaXphcmRQYWdlRmFjdG9yeSAgICAgcGFnZUZhY3RvcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgSVdpemFyZCAgICAgICAgICAgICAgIHdpemFyZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhRmxvd01hbmFnZXIgICAgICAgZGF0YU1hbmFnZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRWNsaXBzZUVudmlyb25tZW50ICAgIGVudmlyb25tZW50ICkKLSAgeyAKLSAgICBzdXBlciggZW52aXJvbm1lbnQsIGRhdGFNYW5hZ2VyICk7ICAKLSAgICAKLSAgCXBhZ2VGYWN0b3J5XyAgICAgICAgPSBwYWdlRmFjdG9yeTsKLSAgCXBhZ2VUYWJsZV8gICAgICAgICAgPSBuZXcgSGFzaHRhYmxlKCk7ICAKLSAgCXJlZ2lzdHJ5XyAgICAgICAgICAgPSByZWdpc3RyeTsKLSAgCXdpemFyZF8gICAgICAgICAgICAgPSB3aXphcmQ7Ci0JICB3aWRnZXRUYWJsZV8gICAgICAgID0gbmV3IEhhc2h0YWJsZSgpOwotCSAgd2lkZ2V0RmFjdG9yeVRhYmxlXyA9IG5ldyBIYXNodGFibGUoKTsKLQkgIHdpZGdldFJlZ2lzdHJ5XyAgICAgPSBXaWRnZXRSZWdpc3RyeS5pbnN0YW5jZSgpOwotCSAgd2lkZ2V0U3RhY2tTdGFja18gICA9IG5ldyBTdGFjaygpOwotICB9Ci0gIAotICBwdWJsaWMgIElXaXphcmRQYWdlIGdldFN0YXJ0aW5nUGFnZSgpCi0gIHsKLSAgICBpZiggZmlyc3RQYWdlXyA9PSBudWxsICkKLSAgICB7Ci0gICAgICBmaXJzdFBhZ2VfID0gKFBhZ2VXaXphcmREYXRhRXZlbnRzKWdldE5leHRQYWdlKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmaXJzdFBhZ2VfOwotICB9Ci0gIAotICBwdWJsaWMgSVN0YXR1cyBydW5Gb3J3YXJkVG9OZXh0U3RvcCgpCi0gIHsgICAgCi0gIAlmaXJzdEZyYWdtZW50XyAgPSB0cnVlOwotICAJbmV4dFBhZ2VfICAgICAgID0gbnVsbDsKLSAgIAkKLSAgCXJldHVybiBzdXBlci5ydW5Gb3J3YXJkVG9OZXh0U3RvcCggZ2V0Q29udGFpbmVyKCkgKTsKLSAgfQotICAgIAotICBwcml2YXRlIElXaXphcmRDb250YWluZXIgZ2V0Q29udGFpbmVyKCkKLSAgewotICAgIElXaXphcmRDb250YWluZXIgY29udGFpbmVyID0gd2l6YXJkXy5nZXRDb250YWluZXIoKTsKLSAgICAKLSAgICBpZiggY29udGFpbmVyID09IG51bGwgfHwgY29udGFpbmVyLmdldEN1cnJlbnRQYWdlKCkgPT0gbnVsbCApCi0gICAgewotICAgICAgY29udGFpbmVyID0gbnVsbDsKLSAgICB9ICAgCi0gICAgCi0gICAgcmV0dXJuIGNvbnRhaW5lcjsKLSAgfQotICAKLSAgcHVibGljIElXaXphcmRQYWdlIGdldEN1cnJlbnRQYWdlKCkKLSAgewotICAgIHJldHVybiBjdXJyZW50UGFnZV87Ci0gIH0KLSAgICAKLSAgcHVibGljIGJvb2xlYW4gaGFzTmV4dFBhZ2UoKQotICB7CQotCSAKLSAgICBuZXh0UGVla1BhZ2VfID0gbnVsbDsKLSAgICAKLQl0cnkKLQl7Ci0gIAluZXh0UGVla1BhZ2VfID0gZ2V0TmV4dFBhZ2VJbkdyb3VwKCB3aWRnZXRGYWN0b3J5Xywgd2lkZ2V0U3RhY2tfLCBmYWxzZSApOwotCQkKLQkgIGlmKCBuZXh0UGVla1BhZ2VfID09IG51bGwgKQotCSAgewotCSAgICAvLyBJZiBhIHBhZ2UgaXMgZm91bmQgbmV4dFBhZ2VfIHdpbGwgYmUgc2V0IHRvIGl0cyB2YWx1ZSBpbiB0aGUgbWV0aG9kIGJlbG93LgotICAJICAgIGVuZ2luZV8ucGVla0ZvcndhcmRUb05leHRTdG9wKCk7Ci0JICB9Ci0JfQotCWNhdGNoKCBUaHJvd2FibGUgZXhjICkKLQl7Ci0JICBleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQotICAJCi0gICAgcmV0dXJuIG5leHRQZWVrUGFnZV8gIT0gbnVsbDsKLSAgfQotICAKLSAgcHVibGljIElXaXphcmRQYWdlIGdldE5leHRQYWdlKCkKLSAgeyAgCQotCXRyeQotCXsgICAgCi0gIAkvLyBOZWVkIHRvIGV4dGVybmFsaXplIHRoZSBkYXRhIGZvciB0aGUgY3VycmVudCBwYWdlIHNvIHRoYXQKLSAgCS8vIHdoZW4gd2UgbW92ZSBmb3J3YXJkIGJlbG93IHRoZSBkYXRhIGlzIGF2YWlsYWJsZS4KLSAgCWlmKCBjdXJyZW50UGFnZV8gIT0gbnVsbCApIGN1cnJlbnRQYWdlXy5nZXREYXRhRXZlbnRzKCkuZXh0ZXJuYWxpemUoKTsKLSAgCQotICAgIGlmKCBlbnZpcm9ubWVudF8uZ2V0TG9nKCkuaXNFbmFibGVkKCkgKQotICAgIHsKLSAgICAgIGVudmlyb25tZW50Xy5nZXRMb2coKS5sb2coSUxvZy5JTkZPLCAid3NfZHRfY21kX2VuZ2luZSIsIDUwMTAsIHRoaXMsICJDbWQgc3RhY2sgZHVtcDoiLCBlbmdpbmVfICk7Ci0gICAgfQotICAgIAotCSAgbmV4dFBhZ2VfID0gZ2V0TmV4dFBhZ2VJbkdyb3VwKCB3aWRnZXRGYWN0b3J5Xywgd2lkZ2V0U3RhY2tfLCB0cnVlICk7Ci0JCi0JICBpZiggbmV4dFBhZ2VfID09IG51bGwgKQotCSAgewotCSAgICB3aWRnZXRGYWN0b3J5XyA9IG51bGw7Ci0JICAgIHdpZGdldFN0YWNrXyAgID0gbnVsbDsKLQkJCi0gIAkgIElTdGF0dXMgc3RhdHVzID0gcnVuRm9yd2FyZFRvTmV4dFN0b3AoKTsKLSAgCQotICAJICBpZiggc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5FUlJPUiApCi0gIAkgIHsKLSAgCSAgICAvLyBBbiBlcnJvciBoYXMgb2NjdXJlZCBzbyB3ZSBuZWVkIHVuZG8gdG8gdGhlIHByZXZpb3VzIHN0b3AgcG9pbnQuCi0gIAkgICAgdW5kb1RvTGFzdFBhZ2UoKTsKLSAgCSAgfQotCSAgfQotCQotICAJaWYoIG5leHRQYWdlXyAhPSBudWxsICkgbmV4dFBhZ2VfLnNldFdpemFyZCggd2l6YXJkXyApOwotICAJICAJCi0gIAlyZXR1cm4gbmV4dFBhZ2VfOwotCX0KLQljYXRjaCggVGhyb3dhYmxlIGV4YyApCi0JewotCSAgZXhjLnByaW50U3RhY2tUcmFjZSgpOwkKLQl9Ci0JCi0JcmV0dXJuIG51bGw7Ci0gIH0KLSAgICAKLSAgcHVibGljIHZvaWQgaGFuZGxlUGFnZVZpc2libGUoIFBhZ2VXaXphcmREYXRhRXZlbnRzIHBhZ2UsIGJvb2xlYW4gaXNQYWdlVmlzaWJsZSApCi0gIHsKLSAgICBpZiggIWlzUGFnZVZpc2libGUgJiYgcGFnZSA9PSBmaXJzdFBhZ2VfICYmIHBhZ2UgPT0gY3VycmVudFBhZ2VfICkKLSAgICB7Ci0gICAgICAvLyBXZSBhcmUgbW92aW5nIGJhY2sgb25lIHBhZ2UgZnJvbSB0aGUgZmlyc3QgcGFnZS4gIFRoaXMgY2FuJ3QgaGFwcGVuIHdpdGggcG9wdXAgd2l6YXJkcwotICAgICAgLy8gc2luY2UgdGhlIHByZXZpb3VzIGJ1dHRvbiB3b3VsZCBiZSBncmV5ZWQgb3V0LiAgQnV0IHdoZW4gdGhlIG5ldyB3aXphcmQgbGF1bmNoZXMgdGhpcyB3aXphcmQKLSAgICAgIC8vIHRoZSBwcmV2aW91cyBidXR0b24gaXMgbm90IGdyZXllZCBvdXQgYW5kIGJyaW5ncyB0aGUgdXNlciBiYWNrIHRvIHRoZSBsaXN0IHdpemFyZHMgdG8gc2VsZWN0LgotICAgICAgLy8gVGhlcmVmb3JlLCB3ZSBtdXN0IHVud2luZCB0aGUgY29tbWFuZCBlbmdpbmUgYW5kIGdldCByZWFkeSBmb3IgdGhlIHVzZXIgdG8gaW52b2tlIHRoaXMgd2l6YXJkIAotICAgICAgLy8gYWdhaW4uICBXZSBhcmUgYXNzdW1pbmcgaGVyZSB0aGF0IHRoZSBmaXJzdCBwYWdlIGlzIG5ldmVyIHBhcnQgb2YgYSB3aWRnZXQgZ3JvdXAhCi0gIAkgIHVuZG9Ub0xhc3RQYWdlKCk7CSAgCi0gICAgICBjdXJyZW50UGFnZV8gPSBudWxsOwotICAgICAgZmlyc3RQYWdlXyAgID0gbnVsbDsKLSAgICB9Ci0gIAlpZiggY3VycmVudFBhZ2VfICE9IG51bGwgJiYgcGFnZSA9PSBjdXJyZW50UGFnZV8uZ2V0UHJldmlvdXNQYWdlKCkgJiYgaXNQYWdlVmlzaWJsZSApCi0gIAl7Ci0gIAkgIC8vIFdlIGFyZSBtb3ZpbmcgYmFjayBvbmUgcGFnZS4KLSAgCSAgLy8gTm90ZTogd2UgZG9uJ3QgaW50ZXJuYWxpemUgdGhlIHByZXZpb3VzIHBhZ2UgYW5kIHdlIGRvIG5vdCBleHRlcm5hbGl6ZSB0aGUgY3VycmVudCBwYWdlLgotICAJICAvLyAgICAgICB3ZSBhcmUgYmFzaWNhbGx5IGp1c3QgbGVhdmluZyB0aGUgY3VycmVudCBwYWdlIHdpdGhvdXQgcmV0cmlldmluZyBpdHMgc3RhdGUgYW5kCi0gIAkgIC8vICAgICAgIG1vdmluZyB0byB0aGUgcHJldmlvdXMgcGFnZSB3aGljaCBhbHJlYWR5IGhhcyBpdHMgc3RhdGUgc2V0LgotCQotCSAgICBpZiggd2lkZ2V0RmFjdG9yeV8gIT0gbnVsbCApCi0JICAgIHsKLQkJICAgIGlmKCB3aWRnZXRTdGFja18uc2l6ZSgpID4gMCApCi0JCSAgICB7Ci0JCSAgICAgIHdpZGdldFN0YWNrXy5wb3AoKTsKLQkJICAgIH0KLQkJCi0JCSAgICBpZiggd2lkZ2V0U3RhY2tfLnNpemUoKSA9PSAwICkKLQkJICAgIHsKLQkJICAgICAgd2lkZ2V0RmFjdG9yeV8gPSBudWxsOwotCQkgICAgICB3aWRnZXRTdGFja18gPSBudWxsOwotCQkgICAgICB3aWRnZXRTdGFja1N0YWNrXy5wb3AoKTsKLQkJICAgIH0KLQkgICAgfQotCSAgCi0JICAgIGlmKCB3aWRnZXRGYWN0b3J5XyA9PSBudWxsICkKLQkgICAgewotICAJICAgIHVuZG9Ub0xhc3RQYWdlKCk7Ci0JICAgIH0KLQkgIAotICAgICAgLy8gU2luY2Ugd2UgYXJlIG1vdmluZyBiYWNrd2FyZHMgd2UgbmVlZCB0byByZW1vdmUgdGhlCi0gICAgICAvLyBjdXJyZW50IHBhZ2Ugb2JqZWN0IGZyb20gdGhlIG1hcHBpbmcgdGFibGUuCi0gICAgICBkYXRhTWFuYWdlcl8udW5wcm9jZXNzKCBjdXJyZW50UGFnZV8uZ2V0RGF0YUV2ZW50cygpICk7Ci0gICAgICAKLSAgCSAgY3VycmVudFBhZ2VfID0gcGFnZTsKLSAgCX0JCi0gIAllbHNlIGlmKCBpc1BhZ2VWaXNpYmxlICkKLSAgCXsKLQkgICAgdHJ5Ci0JICAgIHsKLSAgCSAgICAvLyBXZSBhcmUgbW92aW5nIGZvcndhcmQgb25lIHBhZ2UuCi0gIAkgICAgV2lkZ2V0RGF0YUV2ZW50cyBkYXRhRXZlbnRzID0gcGFnZS5nZXREYXRhRXZlbnRzKCk7Ci0gIAkgIAotICAJICAgIGRhdGFNYW5hZ2VyXy5wcm9jZXNzKCBkYXRhRXZlbnRzICk7ICAvLyBQdXNoIG1vZGVsIGRhdGEgaW50byB0aGUgbmV3IHBhZ2UuCi0gIAkgICAgZGF0YUV2ZW50cy5pbnRlcm5hbGl6ZSgpOwotICAJICAKLSAgCSAgICBwYWdlLnZhbGlkYXRlUGFnZVRvU3RhdHVzKCk7ICAJICAKLQkgICAgfQotCSAgICBjYXRjaCggVGhyb3dhYmxlIGV4YyApCi0JICAgIHsKLQkJICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgfQotCSAgICBmaW5hbGx5Ci0JICAgIHsKLQkgIAkgIGlmKCBjdXJyZW50UGFnZV8gIT0gbnVsbCApIHBhZ2Uuc2V0UHJldmlvdXNQYWdlKCBjdXJyZW50UGFnZV8gKTsKLQkgICAgCSAgCi0JICAJICBjdXJyZW50UGFnZV8gPSBwYWdlOyAgCi0JICAgIH0KLSAgCX0KLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gcGVyZm9ybUZpbmlzaCgpCi0gIHsgCQotICAJLy8gV2UgbmVlZCB0byBzaW11bGF0ZSB0aGUgbmV4dCBidXR0b24gYmVpbmcgcHJlc3NlZCB1bnRpbCB0aGVyZSBhcmUgbm8gbW9yZSBwYWdlcy4KLSAgCS8vIElmIGFuIGVycm9yIG9jY3VycyB3ZSB3aWxsIHJldHVybiBmYWxzZSBhbmQgcmVzZXQgdGhlIGNvbW1hbmQgc3RhY2sgYmFjayBvdXIgb3JpZ2luYWwgc3RhdGUuCi0gIAlib29sZWFuICAgICAgICAgICAgICBkb25lT2sgICAgICAgICA9IHRydWU7Ci0gIAlQYWdlV2l6YXJkRGF0YUV2ZW50cyBzdGFydFBhZ2UgICAgICA9IGN1cnJlbnRQYWdlXzsKLSAgICBpbnQgICAgICAgICAgICAgICAgICBzdGFja1N0YWNrU2l6ZSA9IHdpZGdldFN0YWNrU3RhY2tfLnNpemUoKTsKLSAgICAKLSAgICBJTmFtZWRXaWRnZXRDb250cmlidXRvckZhY3RvcnkgY3VycmVudEZhY3RvcnkgPSB3aWRnZXRGYWN0b3J5XzsKLSAgCQotICAJLy8gRXh0ZXJuYWxpemUgdGhlIGN1cnJlbnQgcGFnZS4KLSAgCWN1cnJlbnRQYWdlXy5nZXREYXRhRXZlbnRzKCkuZXh0ZXJuYWxpemUoKTsKLSAgCQotICAJLy8gTG9vcCB0aHJvdWdoIHN1YnNlcXVlbnQgcGFnZXMuCi0gIAlkbwotICAJeyAgCSAgCi0gIAkgIElTdGF0dXMgc3RhdHVzID0gcnVuRm9yd2FyZFRvTmV4dFN0b3AoKTsJICAKLSAgCSAgCi0gIAkgIGlmKCBzdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLkVSUk9SICkKLSAgCSAgewotICAJICAJLy8gQW4gZXJyb3Igb2NjdXJlZCBpbiBvbmUgb2YgdGhlIGNvbW1hbmRzLgotICAJICAJZG9uZU9rID0gZmFsc2U7Ci0gIAkgIH0KLSAgCX0KLSAgCXdoaWxlKCBuZXh0UGFnZV8gIT0gbnVsbCAmJiBkb25lT2spOwotICAJCi0gIAlpZiggIWRvbmVPayApCi0gIAl7Ci0gIAkgIC8vIEFuIGVycm9yIG9jY3VyZWQsIHNvIHdlIG5lZWQgdG8gcmV0dXJuIHRoZSBjb21tYW5kIHN0YWNrIHRvIGl0J3MKLSAgCSAgLy8gb3JnaW5hbCBzdGF0ZS4KLSAgCSAgUGFnZVdpemFyZERhdGFFdmVudHMgcGFnZSA9IG51bGw7Ci0gIAkgIGJvb2xlYW4gICAgICAgICAgICAgIGRvbmUgPSBmYWxzZTsKLSAgCSAgCi0gIAkgIGRvCi0gIAkgIHsKLSAgCSAgICBkb25lID0gcnVuVW5kb1RvTmV4dFN0b3AoIGdldENvbnRhaW5lcigpICk7Ci0gIAkgICAgcGFnZSA9IGdldFBhZ2UoIGxhc3RVbmRvRnJhZ21lbnRfICk7Ci0gICAgICAgIAotICAgICAgICBpZiggcGFnZSA9PSBudWxsICYmIAotICAgICAgICAgICAgY3VycmVudEZhY3RvcnkgIT0gbnVsbCAmJiAKLSAgICAgICAgICAgIGxhc3RVbmRvRnJhZ21lbnRfICE9IG51bGwgJiYKLSAgICAgICAgICAgIGdldFdpZGdldEZhY3RvcnkoIGxhc3RVbmRvRnJhZ21lbnRfLmdldElkKCkgKSA9PSBjdXJyZW50RmFjdG9yeSApCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBUaGUgY3VycmVudCB3aWRnZXQgZmFjdG9yeSBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIGxhc3QgZnJhZ21lbnQgdGhhdCB3YXMgdW5kb25lLgotICAgICAgICAgIC8vIFRoZXJlZm9yZSwgd2UgYXJlIGJhY2sgdG8gd2hlcmUgd2Ugc3RhcnRlZC4KLSAgICAgICAgICBkb25lID0gdHJ1ZTsgICAgCi0gICAgICAgICAgCi0gICAgICAgICAgLy8gUmVzdG9yZSB0aGUgd2lkZ2V0U3RhY2tTdGFjayBiYWNrIHRvIHRoZSBzdGF0ZSBpdCB3YXMgaW4gYmVmb3JlCi0gICAgICAgICAgLy8gcnVubmluZyBmb3J3YXJkLgotICAgICAgICAgIHdpZGdldFN0YWNrU3RhY2tfLnNldFNpemUoIHN0YWNrU3RhY2tTaXplICk7Ci0gICAgICAgICAgCi0gICAgICAgICAgU3RhY2tFbnRyeSBlbnRyeSA9IChTdGFja0VudHJ5KXdpZGdldFN0YWNrU3RhY2tfLnBlZWsoKTsKLSAgICAgICAgICAKLSAgICAgICAgICB3aWRnZXRGYWN0b3J5XyA9IGVudHJ5LmZhY3RvcnlfOwotICAgICAgICAgIHdpZGdldFN0YWNrXyAgID0gZW50cnkuc3RhY2tfOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYoIHBhZ2UgIT0gbnVsbCApCi0gICAgICAgIHsKLSAgICAgICAgICB3aWRnZXRGYWN0b3J5XyA9IG51bGw7Ci0gICAgICAgICAgd2lkZ2V0U3RhY2tfID0gbnVsbDsKLSAgICAgICAgfQotICAJICB9Ci0gIAkgIHdoaWxlKCBwYWdlICE9IHN0YXJ0UGFnZSAmJiAhZG9uZSApOyAJICAKLSAgCX0KLSAgCQotICAJcmV0dXJuIGRvbmVPazsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gcGVyZm9ybUNhbmNlbCgpCi0gIHsKLSAgICBJV2l6YXJkQ29udGFpbmVyIGNvbnRhaW5lciA9IGdldENvbnRhaW5lcigpOwotICAgIAotICAJd2hpbGUoICFydW5VbmRvVG9OZXh0U3RvcCggY29udGFpbmVyICkgKXt9Ci0gIAkKLSAgCXJldHVybiB0cnVlOwotICB9Ci0gICAgCi0gIHByb3RlY3RlZCBib29sZWFuIHBlZWtGcmFnbWVudCggQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50ICkKLSAgeyAgICAgCQotICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGlzIGZyYWdtZW50IGlzIGluIG91ciBwYWdlIHRhYmxlLgotICAgIG5leHRQZWVrUGFnZV8gPSBnZXRQYWdlKCBmcmFnbWVudCApOwotICAgICAgICAgIAkKLQkgIGlmKCBuZXh0UGVla1BhZ2VfID09IG51bGwgKQotCSAgewotCSAgICBJTmFtZWRXaWRnZXRDb250cmlidXRvckZhY3RvcnkgZmFjdG9yeSA9IGdldFdpZGdldEZhY3RvcnkoIGZyYWdtZW50LmdldElkKCkgKTsKLQkgIAotCSAgICBpZiggZmFjdG9yeSAhPSBudWxsICkKLQkgICAgewotCQkgICAgbmV4dFBlZWtQYWdlXyA9IGdldE5leHRQYWdlSW5Hcm91cCggZmFjdG9yeSwgbnVsbCwgZmFsc2UgKTsgIAotCSAgICB9Ci0JICB9Ci0JCi0gICAgcmV0dXJuIG5leHRQZWVrUGFnZV8gPT0gbnVsbDsKLSAgfQotICAKLSAgcHJvdGVjdGVkIGJvb2xlYW4gbmV4dEZyYWdtZW50KCBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQgKQotICB7Ci0gICAgLy8gSWYgdGhlIHN1cGVyIGNsYXNzIG5leHRGcmFnbWVudCB3YW50IHVzIHRvIHN0b3AgdGhlbiB3ZSB3aWxsIHN0b3AgcmlnaHQgYXdheS4KLSAgICBpZiggIXN1cGVyLm5leHRGcmFnbWVudCggZnJhZ21lbnQgKSApIHJldHVybiBmYWxzZTsKLSAgICAKLSAgCS8vIFRoZSBmaXJzdCBmcmFnbWVudCBpcyBlaXRoZXIgYXQgdGhlIHN0YXJ0IG9mIHRoZSB3aXphcmQKLSAgCS8vIG9yIGl0IGlzIG9uIGEgd2l6YXJkIHBhZ2UuICBJbiBlaXRoZXIgY2FzZSB3ZSBkbyBub3Qgd2FudCAKLSAgCS8vIHRvIHN0b3AgaWYgYSBwYWdlIGlzIGZvdW5kLgotICAJaWYoIGZpcnN0RnJhZ21lbnRfICkKLSAgCXsKLSAgCSAgZmlyc3RGcmFnbWVudF8gPSBmYWxzZTsKLSAgCX0KLSAgCWVsc2UKLSAgCXsKLQkgICAgd2lkZ2V0RmFjdG9yeV8gPSBnZXRXaWRnZXRGYWN0b3J5KCBmcmFnbWVudC5nZXRJZCgpICk7Ci0JICAKLQkgICAgaWYoIHdpZGdldEZhY3RvcnlfICE9IG51bGwgKQotCSAgICB7Ci0JCSAgICB3aWRnZXRTdGFja18gPSBuZXcgU3RhY2soKTsKLSAgICAgICAgCi0gICAgICAgIG5leHRQYWdlXyA9IGdldE5leHRQYWdlSW5Hcm91cCggd2lkZ2V0RmFjdG9yeV8sIHdpZGdldFN0YWNrXywgdHJ1ZSApOwotCQkKLSAgICAgICAgaWYoIG5leHRQYWdlXyA9PSBudWxsICkKLSAgICAgICAgewotICAgICAgICAgIC8vIFdlIGZvdW5kIGEgd2lkZ2V0IGNvbnRyaWJ1dG9yIGZvciB0aGlzIGZyYWdtZW50LCBidXQgbm8gcGFnZSB3YXMgZGVsaXZlcmVkIGZvciBpdC4KLSAgICAgICAgICAvLyBXZSB3aWxsIHRoZXJlZm9yZSwgbm90IHB1dCBpdCBvbiBvdXIgc3RhY2sgb2Ygd2lkZ2V0IHN0YWNrcy4KLSAgICAgICAgICB3aWRnZXRTdGFja18gPSBudWxsOwotICAgICAgICAgIHdpZGdldEZhY3RvcnlfID0gbnVsbDsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLQkJICAgICAgU3RhY2tFbnRyeSBlbnRyeSA9IG5ldyBTdGFja0VudHJ5KCk7Ci0JCQotCQkgICAgICBlbnRyeS5mYWN0b3J5XyA9IHdpZGdldEZhY3RvcnlfOwotCQkgICAgICBlbnRyeS5zdGFja18gICA9IHdpZGdldFN0YWNrXzsKLQkJICAgICAgd2lkZ2V0U3RhY2tTdGFja18ucHVzaCggZW50cnkgKTsKLSAgICAgICAgfQotCSAgICB9Ci0JICAgIGVsc2UKLQkgICAgewotICAJICAgIG5leHRQYWdlXyA9IGdldFBhZ2UoIGZyYWdtZW50ICk7Ci0JICAgIH0KLSAgCX0gIAkgIAkKLSAgCQotICAgIHJldHVybiBuZXh0UGFnZV8gPT0gbnVsbDsKLSAgfQotICAKLSAgcHJvdGVjdGVkIGJvb2xlYW4gdW5kb0ZyYWdtZW50KCBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQgKQotICB7Ci0gIAlsYXN0VW5kb0ZyYWdtZW50XyA9IGZyYWdtZW50OwotICAJCi0gIAlyZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgCi0gIHByaXZhdGUgUGFnZVdpemFyZERhdGFFdmVudHMgZ2V0TmV4dFBhZ2VJbkdyb3VwKCBJTmFtZWRXaWRnZXRDb250cmlidXRvckZhY3RvcnkgZmFjdG9yeSwgU3RhY2sgd2lkZ2V0U3RhY2ssIGJvb2xlYW4gcHVzaE5ld1dpZGdldCApCi0gIHsKLQkgIFBhZ2VXaXphcmREYXRhRXZlbnRzIHBhZ2UgPSBudWxsOwotCQotCSAgaWYoIGZhY3RvcnkgIT0gbnVsbCApCi0JICB7CSAgCi0JICAgIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yIG5ld1dpZGdldCA9IG51bGw7Ci0JCSAgCi0JICAgIGlmKCB3aWRnZXRTdGFjayA9PSBudWxsIHx8IHdpZGdldFN0YWNrLnNpemUoKSA9PSAwICkKLQkgICAgewotCQkgICAgbmV3V2lkZ2V0ID0gZmFjdG9yeS5nZXRGaXJzdE5hbWVkV2lkZ2V0KCk7ICAgCi0JICAgIH0KLQkgICAgZWxzZQotCSAgICB7Ci0JCSAgICBJTmFtZWRXaWRnZXRDb250cmlidXRvciBjdXJyZW50V2lkZ2V0ID0gKElOYW1lZFdpZGdldENvbnRyaWJ1dG9yKXdpZGdldFN0YWNrLnBlZWsoKTsKLQkJICAgIG5ld1dpZGdldCA9IGZhY3RvcnkuZ2V0TmV4dE5hbWVkV2lkZ2V0KCBjdXJyZW50V2lkZ2V0ICk7IAotCSAgICB9Ci0JCSAgCi0JICAgIGlmKCBuZXdXaWRnZXQgIT0gbnVsbCApCi0JICAgIHsKLQkJICAgIHBhZ2UgPSBnZXRQYWdlKCBuZXdXaWRnZXQgKTsKLQkJCi0JCSAgICBpZiggcHVzaE5ld1dpZGdldCApCi0JCSAgICB7Ci0JCSAgICAgIHdpZGdldFN0YWNrLnB1c2goIG5ld1dpZGdldCApOwotCQkgICAgfQotCSAgICB9Ci0JICB9Ci0JCQotCSAgcmV0dXJuIHBhZ2U7ICAKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIHVuZG9Ub0xhc3RQYWdlKCkKLSAgewotICAgIGJvb2xlYW4gc3RhY2tFbXB0eSAgPSBmYWxzZTsKLQkgIGJvb2xlYW4gZG9uZVVuZG9pbmcgPSBmYWxzZTsKLSAgICAKLQkgIHdoaWxlKCAhZG9uZVVuZG9pbmcgKQotCSAgewotCSAgICBzdGFja0VtcHR5ID0gcnVuVW5kb1RvTmV4dFN0b3AoIGdldENvbnRhaW5lcigpICk7Ci0JICAKLQkgICAgSVdpemFyZFBhZ2UgcGFnZSA9IG51bGw7Ci0JICAKLQkgICAgaWYoIGxhc3RVbmRvRnJhZ21lbnRfICE9IG51bGwgKQotCSAgICB7Ci0JICAgICAgcGFnZSA9IGdldFBhZ2UoIGxhc3RVbmRvRnJhZ21lbnRfICk7Ci0JCQotCSAgICAgIGlmKCBwYWdlID09IG51bGwgKQotCSAgICAgIHsKLQkJICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIGEgZ3JvdXAgcGFnZSBmcmFnbWVudCB3YXMgZm91bmQuCi0JCSAgICAgIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSBmYWN0b3J5ID0gZ2V0V2lkZ2V0RmFjdG9yeSggbGFzdFVuZG9GcmFnbWVudF8uZ2V0SWQoKSApOwotCQkgIAotCQkgICAgICBpZiggZmFjdG9yeSAhPSBudWxsICYmICF3aWRnZXRTdGFja1N0YWNrXy5lbXB0eSgpICkKLQkJICAgICAgewotCQkgICAgICAgIFN0YWNrRW50cnkgZW50cnkgPSAoU3RhY2tFbnRyeSl3aWRnZXRTdGFja1N0YWNrXy5wZWVrKCk7Ci0JCQkKLSAgICAgICAgICAgIGlmKCBlbnRyeS5mYWN0b3J5XyA9PSBmYWN0b3J5ICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gV2UgZm91bmQgdGhlIGZhY3RvcnkgZm9yIHRoZSBlbnRyeSBhdCB0aGUgdG9wIG9mIHRoZSBzdGFjay4KLQkJICAgICAgICAgIHdpZGdldEZhY3RvcnlfID0gZW50cnkuZmFjdG9yeV87Ci0JCSAgICAgICAgICB3aWRnZXRTdGFja18gICA9IGVudHJ5LnN0YWNrXzsJCi0JCQkKLQkJICAgICAgICAgIGlmKCB3aWRnZXRTdGFja18gIT0gbnVsbCAmJiAhd2lkZ2V0U3RhY2tfLmVtcHR5KCkgKQotCQkgICAgICAgICAgewotCQkgICAgICAgICAgICBJTmFtZWRXaWRnZXRDb250cmlidXRvciBjdXJyZW50V2lkZ2V0ID0gKElOYW1lZFdpZGdldENvbnRyaWJ1dG9yKXdpZGdldFN0YWNrXy5wZWVrKCk7Ci0JCQkKLQkJICAgICAgICAgICAgcGFnZSA9IGdldFBhZ2UoIGN1cnJlbnRXaWRnZXQgKTsKLQkJICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQkJICAgICAgfQotCSAgICAgIH0KLQkgICAgfQotCSAgCi0JICAgIGRvbmVVbmRvaW5nID0gcGFnZSAhPSBudWxsIHx8IHN0YWNrRW1wdHk7Ci0JICB9Ci0gIH0KLSAgCi0gIHByaXZhdGUgUGFnZVdpemFyZERhdGFFdmVudHMgZ2V0UGFnZSggQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50ICkKLSAgewotICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGlzIGZyYWdtZW50IGlzIGluIG91ciBwYWdlIHRhYmxlLgotICAJUGFnZVdpemFyZERhdGFFdmVudHMgcGFnZSA9IChQYWdlV2l6YXJkRGF0YUV2ZW50cylwYWdlVGFibGVfLmdldCggZnJhZ21lbnQgKTsgCi0gIAlTdHJpbmcgICAgICBpZCAgID0gZnJhZ21lbnQuZ2V0SWQoKTsgICAgICAJCi0gICAgICAgICAgCQotICAgIGlmKCBwYWdlID09IG51bGwgJiYgaWQgIT0gbnVsbCApCi0gICAgewotICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoaXMgZnJhZ21lbnQgaWQgaXMgaW4gdGhlIHJlZ2lzdHJ5LgotICAgICAgUGFnZUluZm8gcGFnZUluZm8gPSByZWdpc3RyeV8uZ2V0UGFnZUluZm8oIGlkICk7ICAgICAgICAgIAkgIAotICAgICAgICAgICAgICAKLSAgICAgIGlmKCBwYWdlSW5mbyAhPSBudWxsICkKLSAgICAgIHsKLSAgICAgICAgcGFnZSA9IHBhZ2VGYWN0b3J5Xy5nZXRQYWdlKCBwYWdlSW5mbywgdGhpcyApOwotICAgICAgICBwYWdlVGFibGVfLnB1dCggZnJhZ21lbnQsIHBhZ2UgKTsgICAgICAgICAgICAJCi0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHBhZ2U7Ci0gIH0gICAgCi0gIAotICBwcml2YXRlIFBhZ2VXaXphcmREYXRhRXZlbnRzIGdldFBhZ2UoIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yIHdpZGdldCApCi0gIHsKLQkgIFBhZ2VXaXphcmREYXRhRXZlbnRzIHBhZ2UgPSAoUGFnZVdpemFyZERhdGFFdmVudHMpd2lkZ2V0VGFibGVfLmdldCggd2lkZ2V0ICk7Ci0KLQkgIGlmKCBwYWdlID09IG51bGwgKQotCSAgewotCSAgICBQYWdlSW5mbyBwYWdlSW5mbyA9IG5ldyBQYWdlSW5mbyh3aWRnZXQuZ2V0VGl0bGUoKSwgd2lkZ2V0LmdldERlc2NyaXB0aW9uKCksIHdpZGdldC5nZXRXaWRnZXRDb250cmlidXRvckZhY3RvcnkoKSApOwotCSAgCi0JICAgIHBhZ2UgPSBwYWdlRmFjdG9yeV8uZ2V0UGFnZSggcGFnZUluZm8sIHRoaXMgKTsKLQkgICAgd2lkZ2V0VGFibGVfLnB1dCggd2lkZ2V0LCBwYWdlICk7Ci0JICB9Ci0JCi0JICByZXR1cm4gcGFnZTsKLSAgfQotICAKLSAgcHJpdmF0ZSBJTmFtZWRXaWRnZXRDb250cmlidXRvckZhY3RvcnkgZ2V0V2lkZ2V0RmFjdG9yeSggU3RyaW5nIGlkICkKLSAgewotCSAgSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5IGZhY3RvcnkgPSAoSU5hbWVkV2lkZ2V0Q29udHJpYnV0b3JGYWN0b3J5KXdpZGdldEZhY3RvcnlUYWJsZV8uZ2V0KCBpZCApOwotCQotCSAgaWYoIGZhY3RvcnkgPT0gbnVsbCApCi0JICB7Ci0JICAgIC8vIFRoZSBmYWN0b3J5IGlzIG5vdCBpbiBvdXIgdGFibGUgc28gd2Ugd2lsbCB0cnkgdGhlIHJlZ2lzdHJ5LgotCSAgICBmYWN0b3J5ID0gd2lkZ2V0UmVnaXN0cnlfLmdldEZhY3RvcnkoIGlkICk7Ci0JICAKLQkgICAgaWYoIGZhY3RvcnkgIT0gbnVsbCApCi0JICAgIHsKLQkgICAgICB3aWRnZXRGYWN0b3J5VGFibGVfLnB1dCggaWQsIGZhY3RvcnkgKTsKLQkgICAgICBmYWN0b3J5LnJlZ2lzdGVyRGF0YU1hcHBpbmdzKCBkYXRhTWFuYWdlcl8uZ2V0TWFwcGluZ1JlZ2lzdHJ5KCkgKTsKLQkJICAgIGRhdGFNYW5hZ2VyXy5wcm9jZXNzKCBmYWN0b3J5ICk7Ci0JICAgIH0KLQkgIH0KLQkgIGVsc2UKLQkgIHsKLQkgICAgZGF0YU1hbmFnZXJfLnByb2Nlc3MoIGZhY3RvcnkgKTsKLQkgIH0KLQkKLQkgIHJldHVybiBmYWN0b3J5OwotICB9Ci0gIAotICBwcml2YXRlIGNsYXNzIFN0YWNrRW50cnkKLSAgewotICAgIElOYW1lZFdpZGdldENvbnRyaWJ1dG9yRmFjdG9yeSBmYWN0b3J5XzsKLQkgIFN0YWNrICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja187Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9wb3B1cC9EeW5hbWljUG9wdXBXaXphcmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvdWkvd2lkZ2V0cy9wb3B1cC9EeW5hbWljUG9wdXBXaXphcmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGExNzQ4Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3VpL3dpZGdldHMvcG9wdXAvRHluYW1pY1BvcHVwV2l6YXJkLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjIzICAgMTI5MjMyIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDYwNDE3ICAgMTM2NTk2IGpvYW5AY2EuaWJtLmNvbSAtIEpvYW4gSGFnZ2FydHkKLSAqIDIwMDYwNzMxICAgMTIwMzc4IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBGaWVsZHMgbm90IHZpc2libGUgaW4gTGFyZ2UgZm9udCBzZXR0aW5ncwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLnBvcHVwOwotCi1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuUHJvZ3Jlc3NNb25pdG9yRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLm9wZXJhdGlvbi5JUnVubmFibGVDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLm9wZXJhdGlvbi5JUnVubmFibGVXaXRoUHJvZ3Jlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmREaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkRlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29udGV4dC5QZXJzaXN0ZW50QWN0aW9uRGlhbG9nc0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbnRleHQuUGVyc2lzdGVudFJlc291cmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFGbG93TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkRhdGFNYXBwaW5nUmVnaXN0cnlJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5FY2xpcHNlRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLmVjbGlwc2UuRWNsaXBzZVN0YXR1c0hhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuRHluYW1pY1dpemFyZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5TaW1wbGVDb21tYW5kRW5naW5lTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5TaW1wbGVQb3B1cFBhZ2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpemFyZFBhZ2VGYWN0b3J5OwotCi0KLS8qKgotICogVGhpcyBjbGFzcyBpcyB1c2VkIHRvIHBvcHVwIGR5bmFtaWMgd2l6YXJkcy4gIFRoZSBwb3B1cE1lbnVzIGV4dGVuc2lvbiBpcyB1c2VkCi0gKiB0aGUgY29udHJpYnV0ZSBhIHBvcHVwIHRvIEVjbGlwc2UuICBUaGUgY2xhc3MgaW4gdGhlIGFjdGlvbiBlbGVtZW50IHNob3VsZCByZWZlcmVuY2UKLSAqIHRoaXMgRHluYW1pY1BvcHVwV2l6YXJkIGNsYXNzLiAgVGhpcyBpZCBhdHRyaWJ1dGUgaW4gdGhlIGFjdGlvbiBlbGVtZW50IHNob3VsZCBjb250YWluCi0gKiBhbiBpZCB0aGF0IHJlZmVyZW5jZXMgYSBkeW5hbWljV2l6YXJkIGV4dGVuc2lvbiBwb2ludC4gIFRoaXMgaXMgaG93IHRoZSBEeW5hbWljUG9wdXBXaXphcmQKLSAqIGNsYXNzIGtub3dzIHdoaWNoIHdpemFyZCB0byBkaXNwbGF5LgotICogICAKLSAqIE5vdGU6IHRoZSBpZCBhdHRyaWJ1dGUgaW4gdGhlIG9iamVjdENvbnRyaWJ1dGlvbiBlbGVtZW50IHJlZmVycyB0byBhbgotICogICAgICAgYWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGUgZXh0ZW5zaW9uIHBvaW50LiAgVGhlIGlkcyBpbiBvYmplY3RDb250cmlidXRpb24KLSAqICAgICAgIGVsZW1lbnQgYW5kIHRoZSBhY3Rpb24gZWxlbWVudCBuZWVkIG5vdCBiZSB0aGUgc2FtZSBhcyB0aGV5IGFyZSBpbiB0aGUKLSAqICAgICAgIGV4YW1wbGUgYmVsb3cuCi0gKgotICo8cHJlPgotICogICAmbHQ7ZXh0ZW5zaW9uCi0gKiAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wb3B1cE1lbnVzIiZndDsKLSAqJmx0OyEtLSBJRmlsZSAqLndzZGwgcG9wdXAgbWVudSAtLSZndDsKLSAqICAgICAmbHQ7b2JqZWN0Q29udHJpYnV0aW9uCi0gKiAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlIgotICogICAgICAgICAgIG5hbWVGaWx0ZXI9Iioud3NkbCIKLSAqICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuY2xpZW50d2l6YXJkIiZndDsKLSAqJmx0OyEtLSBXU0RMIFRvIEphdmEgQmVhbiBQcm94eSAtLSZndDsKLSAqICAgICAgICAmbHQ7YWN0aW9uCi0gKiAgICAgICAgICAgICAgbGFiZWw9IiVBQ1RJT05fR0VORVJBVEVfSkFWQV9QUk9YWSIKLSAqICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMucG9wdXAuRHluYW1pY1BvcHVwV2l6YXJkIgotICogICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJvcmcuZWNsaXBzZS5qc3Qud3MuYXRrLnVpLndlYnNlcnZpY2UuY2F0ZWdvcnkucG9wdXBNZW51L3BvcHVwQWN0aW9ucyIKLSAqICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuY2xpZW50d2l6YXJkIiZndDsKLSAqICAgICAgICAmbHQ7L2FjdGlvbiZndDsKLSAqICAgICAmbHQ7L29iamVjdENvbnRyaWJ1dGlvbiZndDsKLSAqICAmbHQ7L2V4dGVuc2lvbiZndDsKLSAqCi0gKiAgICZsdDtleHRlbnNpb24KLSAqICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmR5bmFtaWNXaXphcmQiJmd0OwotICogICAgICZsdDtkeW5hbWljV2l6YXJkCi0gKiAgICAgICAgICAgaWNvbmJhbm5lcj0iaWNvbnMvZnVsbC93aXpiYW4vd2Vic2VydmljZXNjbGllbnRfd2l6LmdpZiIKLSAqICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLndpZGdldHMuYmluZGluZy5DbGllbnRXaWRnZXRCaW5kaW5nIgotICogICAgICAgICAgIHRpdGxlPSIlV0laQVJEX1RJVExFX1dTQyIKLSAqICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuY2xpZW50d2l6YXJkIiZndDsKLSAqICAgICAmbHQ7L2R5bmFtaWNXaXphcmQmZ3Q7Ci0gKiAgJmx0Oy9leHRlbnNpb24mZ3Q7Ci0gKjwvcHJlPgotICoKLSAqLwotcHVibGljIGNsYXNzIER5bmFtaWNQb3B1cFdpemFyZCBleHRlbmRzIER5bmFtaWNXaXphcmQgaW1wbGVtZW50cyBJQWN0aW9uRGVsZWdhdGUKLXsKLSAgcHJpdmF0ZSBJU2VsZWN0aW9uIHNlbGVjdGlvbl87Ci0gIAotICBwdWJsaWMgRHluYW1pY1BvcHVwV2l6YXJkKCkKLSAgewotCXN1cGVyKCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5EeW5hbWljV2l6YXJkI2dldFdpemFyZFBhZ2VGYWN0b3J5KCkKLSAgICovCi0gIHByb3RlY3RlZCBXaXphcmRQYWdlRmFjdG9yeSBnZXRXaXphcmRQYWdlRmFjdG9yeSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFNpbXBsZVBvcHVwUGFnZUZhY3RvcnkoIGdldElkKCkgKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0SWQoKQotICB7Ci0gICAgcmV0dXJuICgoSUNvbmZpZ3VyYXRpb25FbGVtZW50KW9yaWdpbmFsRWxlbWVudF8uZ2V0UGFyZW50KCkpLmdldEF0dHJpYnV0ZSggImlkIiApOyAgCi0gIH0KLSAgCi0gIC8qKgotICAgKiBAc2VlIElBY3Rpb25EZWxlZ2F0ZSNydW4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJ1bihJQWN0aW9uIGFjdGlvbikgCi0gIHsKLSAgICBQZXJzaXN0ZW50QWN0aW9uRGlhbG9nc0NvbnRleHQgY29udGV4dCA9IFBlcnNpc3RlbnRBY3Rpb25EaWFsb2dzQ29udGV4dC5nZXRJbnN0YW5jZSgpOwotICAgIFN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICBpZCAgICAgID0gZ2V0SWQoKTsKLSAgICAKLQlpZiggY29udGV4dC5zaG93RGlhbG9nKGlkKSApCi0JewotCSAgLy8gTGF1bmNoIHRoZSB3aXphcmQuCi0JICBpbml0KCBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLCBnZXRTZWxlY3Rpb24oKSApOyAgCi0JICAgIAotCSAgV2l6YXJkRGlhbG9nIGRpYWxvZz0gbmV3IFdpemFyZERpYWxvZyhQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldFNoZWxsKCksIHRoaXMpOwotCSAgZGlhbG9nLmNyZWF0ZSgpOwotICAgIAotICAgIGlmKCBnZXRTdGFydGluZ1BhZ2UoKSAhPSBudWxsICkKLSAgICB7Ci0JICAgIGRpYWxvZy5vcGVuKCk7Ci0gICAgfQotCX0KLQllbHNlCi0JewotCSAgZmluYWwgUHJvZ3Jlc3NNb25pdG9yRGlhbG9nIG1vbml0b3IgPSBuZXcgUHJvZ3Jlc3NNb25pdG9yRGlhbG9nKFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0U2hlbGwoKSk7Ci0JICAKLQkgIHRyeQotCSAgewotCSAgICBtb25pdG9yLnJ1biggZmFsc2UsIGZhbHNlLCBuZXcgSVJ1bm5hYmxlV2l0aFByb2dyZXNzKCkKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1biggSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IgKQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkgICAgIHJ1bkhlYWRMZXNzKCBnZXRTZWxlY3Rpb24oKSwgbW9uaXRvciApOwotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSApOwotCSAgfQotCSAgY2F0Y2goIEludGVycnVwdGVkRXhjZXB0aW9uIGV4YyApCi0JICB7IAotCSAgfQotCSAgY2F0Y2goIEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gZXhjICkKLQkgIHsKLQkgIH0KLQl9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSdW5zIG9ubHkgdGhlIENvbW1hbmRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZHluYW1pYyB3aXphcmQuCi0gICAqIAotICAgKiBAcGFyYW0gc2VsZWN0aW9uIHRoZSBpbml0aWFsIHNlbGVjdGlvbiBmcm9tIHRoZSB1c2VyLgotICAgKiBAcGFyYW0gY29udGV4dCB0aGUgY29udGV4dCB0aGF0IHRoaXMgZXhlY3V0aW9uIHNob3VsZCB0YWtlIHBsYWNlIGluLiAgVGhpcwotICAgKiAgICAgICAgICAgICAgICBpcyB1c3VhbGx5IGEgcHJvZ3Jlc3MgY29udGV4dCBzbyB0aGF0IHRoZSB1c2VyIGNhbiBnZXQgZmVlZGJhY2sKLSAgICogICAgICAgICAgICAgICAgb24gaG93IGV4ZWN1dGlvbiBpcyBwcm9ncmVzc2luZy4gIFRoZSBjb250ZXh0IG1heSBiZSBudWxsLgotICAgKi8KLSAgcHVibGljIHZvaWQgcnVuSGVhZExlc3MoIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbiwgSVJ1bm5hYmxlQ29udGV4dCBjb250ZXh0ICkKLSAgewotCVBlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQgIHJlc291cmNlQ29udGV4dCA9IFBlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQuZ2V0SW5zdGFuY2UoKTsKLQlFY2xpcHNlU3RhdHVzSGFuZGxlciAgICAgICBoYW5kbGVyICAgICAgICAgPSBuZXcgRWNsaXBzZVN0YXR1c0hhbmRsZXIoKTsKLQlFY2xpcHNlRW52aXJvbm1lbnQgICAgICAgICBlbnZpcm9ubWVudCAgICAgPSBuZXcgRWNsaXBzZUVudmlyb25tZW50KCBudWxsLCByZXNvdXJjZUNvbnRleHQsIGhhbmRsZXIgKTsKLQkgICAgCi0JRGF0YU1hcHBpbmdSZWdpc3RyeUltcGwgICAgZGF0YVJlZ2lzdHJ5XyAgID0gbmV3IERhdGFNYXBwaW5nUmVnaXN0cnlJbXBsKCk7CSAgICAKLQlEYXRhRmxvd01hbmFnZXIgICAgICAgICAgICBkYXRhTWFuYWdlciAgICAgPSBuZXcgRGF0YUZsb3dNYW5hZ2VyKCBkYXRhUmVnaXN0cnlfLCBlbnZpcm9ubWVudCApOwotCVNpbXBsZUNvbW1hbmRFbmdpbmVNYW5hZ2VyIG1hbmFnZXIgICAgICAgICA9IG5ldyBTaW1wbGVDb21tYW5kRW5naW5lTWFuYWdlcihlbnZpcm9ubWVudCwgZGF0YU1hbmFnZXIgKTsKLQkKLSAgICB0cnkKLSAgICB7Ci0gICAgICBjb21tYW5kV2lkZ2V0QmluZGluZ18gPSAoQ29tbWFuZFdpZGdldEJpbmRpbmcpd2l6YXJkRWxlbWVudF8uY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbiggImNsYXNzIiApOwotICAgIH0KLSAgICBjYXRjaCggQ29yZUV4Y2VwdGlvbiBleGMgKQotICAgIHsKLSAgICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9Ci0JICAKLQljb21tYW5kV2lkZ2V0QmluZGluZ18ucmVnaXN0ZXJEYXRhTWFwcGluZ3MoIGRhdGFSZWdpc3RyeV8gKTsKLQkKLQlDb21tYW5kRnJhZ21lbnQgcm9vdEZyYWdtZW50ID0gZ2V0Um9vdEZyYWdtZW50KCBzZWxlY3Rpb24sIG51bGwgKTsKLQkKLQltYW5hZ2VyLnNldFJvb3RGcmFnbWVudCggcm9vdEZyYWdtZW50ICk7Ci0JbWFuYWdlci5ydW5Gb3J3YXJkVG9OZXh0U3RvcCggY29udGV4dCApOwotICB9Ci0gIAotICAvKioKLSAgICogQHNlZSBJQWN0aW9uRGVsZWdhdGUjc2VsZWN0aW9uQ2hhbmdlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChJQWN0aW9uIGFjdGlvbiwgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIAotICB7Ci0gICAgICBzZWxlY3Rpb25fID0gc2VsZWN0aW9uOwotICB9Ci0gIAotICBwcml2YXRlIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpCi0gIHsKLSAgICBJU3RydWN0dXJlZFNlbGVjdGlvbiByZXN1bHQgPSBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbigpOwotICAgIAotCWlmKCBzZWxlY3Rpb25fICE9IG51bGwpIAotCXsJCi0JICBpZiggc2VsZWN0aW9uXyBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uICkgCi0JICB7Ci0JICAgIHJlc3VsdCA9IChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb25fOwotCSAgfQotCX0KLQllbHNlIAotCXsKLQkgIElXb3JrYmVuY2hXaW5kb3cgd2luZG93ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKLQkgIAotCSAgaWYoIHdpbmRvdyAhPSBudWxsICkgCi0JICB7Ci0JCUlTZWxlY3Rpb24gc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvblNlcnZpY2UoKS5nZXRTZWxlY3Rpb24oKTsKLQkJCi0JCWlmKCBzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbiApIAotCQl7Ci0JCSAgcmVzdWx0ID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbjsKLQkJfQotCSAgfQotCX0KLQkKLQlyZXR1cm4gcmVzdWx0OwotICB9ICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52Ly5jbGFzc3BhdGggYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkY2U2MmI2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52Ly5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9ImFudC1zcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52Ly5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTkxODNhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52Ly5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi1iaW4KLWJ1aWxkLnhtbAotcnVudGltZQotdGVtcC5mb2xkZXIKLWVudi5qYXIKLUBkb3QKLXNyYy56aXAKLWVudnNyYy56aXAKLWphdmFDb21waWxlci5lbnYuamFyLmFyZ3MKLWphdmFDb21waWxlci5hbnQtbGliX2FudHRhc2tzLmphci5hcmdzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi8uZXh0ZXJuYWxUb29sQnVpbGRlcnMvYnVpbGQtYW50dGFza3MubGF1bmNoIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvLmV4dGVybmFsVG9vbEJ1aWxkZXJzL2J1aWxkLWFudHRhc2tzLmxhdW5jaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjgwZWU0MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi8uZXh0ZXJuYWxUb29sQnVpbGRlcnMvYnVpbGQtYW50dGFza3MubGF1bmNoCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxsYXVuY2hDb25maWd1cmF0aW9uIHR5cGU9Im9yZy5lY2xpcHNlLmFudC5BbnRMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Ci08c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UudWkuZXh0ZXJuYWx0b29scy5BVFRSX0xPQ0FUSU9OIiB2YWx1ZT0iJHt3b3Jrc3BhY2VfbG9jOi9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvYnVpbGQtYW50dGFza3MueG1sfSIvPgotPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuTUFJTl9UWVBFIiB2YWx1ZT0ib3JnLmVjbGlwc2UuYW50LmludGVybmFsLnVpLmFudHN1cHBvcnQuSW50ZXJuYWxBbnRSdW5uZXIiLz4KLTxib29sZWFuQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuZGVidWcudWkuQVRUUl9MQVVOQ0hfSU5fQkFDS0dST1VORCIgdmFsdWU9ImZhbHNlIi8+Ci08c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5QUk9KRUNUX0FUVFIiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYiLz4KLTxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiIHZhbHVlPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL2libS1zZGstamF2YTUtMjAwNjA5MTIiLz4KLTxib29sZWFuQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UudWkuZXh0ZXJuYWx0b29scy5BVFRSX1RSSUdHRVJTX0NPTkZJR1VSRUQiIHZhbHVlPSJ0cnVlIi8+Ci08c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5DTEFTU1BBVEhfUFJPVklERVIiIHZhbHVlPSJvcmcuZWNsaXBzZS5hbnQudWkuQW50Q2xhc3NwYXRoUHJvdmlkZXIiLz4KLTxib29sZWFuQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuYW50LnVpLkRFRkFVTFRfVk1fSU5TVEFMTCIgdmFsdWU9InRydWUiLz4KLTxsaXN0QXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuZGVidWcuY29yZS5NQVBQRURfUkVTT1VSQ0VfVFlQRVMiPgotPGxpc3RFbnRyeSB2YWx1ZT0iMSIvPgotPC9saXN0QXR0cmlidXRlPgotPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuU09VUkNFX1BBVEhfUFJPVklERVIiIHZhbHVlPSJvcmcuZWNsaXBzZS5hbnQudWkuQW50Q2xhc3NwYXRoUHJvdmlkZXIiLz4KLTxsaXN0QXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuZGVidWcuY29yZS5NQVBQRURfUkVTT1VSQ0VfUEFUSFMiPgotPGxpc3RFbnRyeSB2YWx1ZT0iL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9idWlsZC1hbnR0YXNrcy54bWwiLz4KLTwvbGlzdEF0dHJpYnV0ZT4KLTxib29sZWFuQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuZGVidWcuY29yZS5hcHBlbmRFbnZpcm9ubWVudFZhcmlhYmxlcyIgdmFsdWU9InRydWUiLz4KLTxzdHJpbmdBdHRyaWJ1dGUga2V5PSJwcm9jZXNzX2ZhY3RvcnlfaWQiIHZhbHVlPSJvcmcuZWNsaXBzZS5hbnQudWkucmVtb3RlQW50UHJvY2Vzc0ZhY3RvcnkiLz4KLTwvbGF1bmNoQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52Ly5wcm9qZWN0IGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxMjgxZDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnY8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnVpLmV4dGVybmFsdG9vbHMuRXh0ZXJuYWxUb29sQnVpbGRlcjwvbmFtZT4KLQkJCTx0cmlnZ2Vycz5mdWxsLGluY3JlbWVudGFsLDwvdHJpZ2dlcnM+Ci0JCQk8YXJndW1lbnRzPgotCQkJCTxkaWN0aW9uYXJ5PgotCQkJCQk8a2V5PkxhdW5jaENvbmZpZ0hhbmRsZTwva2V5PgotCQkJCQk8dmFsdWU+Jmx0O3Byb2plY3QmZ3Q7Ly5leHRlcm5hbFRvb2xCdWlsZGVycy9idWlsZC1hbnR0YXNrcy5sYXVuY2g8L3ZhbHVlPgotCQkJCTwvZGljdGlvbmFyeT4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTJmMjA1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1N1biBNYXkgMDcgMjM6MTQ6NTcgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy88cHJvamVjdD49SVNPLTg4NTktMQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTZjMWMxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLSNNb24gSmFuIDMwIDEwOjM3OjE1IEVTVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDZmMDlhYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEphbiAzMSAwMDoxNjo1NCBFU1QgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWludGVybmFsLmRlZmF1bHQuY29tcGxpYW5jZT1kZWZhdWx0CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDBmYWEwOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotI01vbiBKYW4gMzAgMTA6NDA6MzggRVNUIDIwMDYKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTEKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTEKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDk2ZTI3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtQ2xhc3NQYXRoOiBlbnYuamFyCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJVBMVUdJTl9OQU1FCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnY7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4yMDQucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYucGx1Z2luLkVudlBsdWdpbgotQnVuZGxlLVZlbmRvcjogJVBMVUdJTl9QUk9WSURFUgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52O3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmFudDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb21tYW5kbGluZTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb21tb247eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29udGV4dDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnBsdWdpbjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5wcmVmZXJlbmNlczt4LWludGVybmFsOj10cnVlCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcztidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDMuNC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50O2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAotIG9yZy5hcGFjaGUuYW50O2J1bmRsZS12ZXJzaW9uPSJbMS42LjUsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS5hbnQuY29yZTtidW5kbGUtdmVyc2lvbj0iWzMuMS4xMDAsMy4yLjApIgotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvYWJvdXQuaHRtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGIzNmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvYW50LWxpYi8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvYW50LWxpYi8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MGRiYzM5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L2FudC1saWIvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotYW50dGFza3MuamFyCi1hbnR0YXNrc3NyYy56aXAKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L2FudC1zcmMvd3MvYW50L3Rhc2svV2ViU2VydmljZUdlbmVyYXRpb25BbnRUYXNrLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9hbnQtc3JjL3dzL2FudC90YXNrL1dlYlNlcnZpY2VHZW5lcmF0aW9uQW50VGFzay5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMmI0MjE1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L2FudC1zcmMvd3MvYW50L3Rhc2svV2ViU2VydmljZUdlbmVyYXRpb25BbnRUYXNrLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA1MjIgICAxNzY5NDMgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIHdzLmFudC50YXNrOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQuQnVpbGRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQuUHJvamVjdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFudC5UYXNrOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5hbnQuQW50Q29udHJvbGxlcjsKLQotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VHZW5lcmF0aW9uQW50VGFzayBleHRlbmRzIFRhc2sgCi17CQotCQlwdWJsaWMgdm9pZCBleGVjdXRlKCkKLQkJewkJCQotCQkJLy9nZXQgcHJvcGVydGllcyBzZXQgaW4gdGhlIEFudCBmaWxlCi0JCQlQcm9qZWN0IHByb2ogPSBnZXRQcm9qZWN0KCk7Ci0gICAgICAKLSAgICAgIGlmKCBwcm9qICE9IG51bGwgKQotICAgICAgewotICAgICAgICAvL2NhbGwgdGhlIEFudENvbnRyb2xsZXIgdG8ga2ljayBvZmYgZ2VuZXJhdGlvbgotICAgIAkJQW50Q29udHJvbGxlciBjb250cm9sbGVyICAgPSBuZXcgQW50Q29udHJvbGxlcihwcm9qLmdldFByb3BlcnRpZXMoKSk7Ci0gICAgICAgIFN0cmluZyAgICAgICAgZXJyb3JNZXNzYWdlID0gY29udHJvbGxlci5nZXRFcnJvck1lc3NhZ2UoKTsKLSAgICAgICAgCi0gICAgICAgIGlmKCBlcnJvck1lc3NhZ2UgIT0gbnVsbCApCi0gICAgICAgIHsKLSAgICAgICAgICB0aHJvdyBuZXcgQnVpbGRFeGNlcHRpb24oIGVycm9yTWVzc2FnZSApOwotICAgICAgICB9Ci0gICAgICB9ICAgICAgICAgICAJCQotCQl9CQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L2FudC9heGlzY2xpZW50LnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9hbnQvYXhpc2NsaWVudC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODk2ZTFlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L2FudC9heGlzY2xpZW50LnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0hLS1TY2VuYXJpb1R5cGUgUkVRVUlSRUQuIERpZmZlcmVudGlhdGVzIGZyb20gInNlcnZpY2UiIHNjZW5hcmlvLiAgU2VlIGF4aXNzZXJ2aWNlLnByb3BlcnRpZXMuCi1TY2VuYXJpb1R5cGU9Y2xpZW50Ci0KLSEtLUluaXRpYWxTZWxlY3Rpb24gUkVRVUlSRUQuICBXb3Jrc3BhY2UgcmVsYXRpdmUgVVJJIHRvIHRoZSBpbnB1dCBXU0RMIG9yIEphdmEuCi1Jbml0aWFsU2VsZWN0aW9uPS9keW5hbWljV2ViUHJvamVjdE5hbWUvV2ViQ29udGVudC93c2RsL215U2VydmljZS53c2RsCi0KLSEtLVV0aWxpdHkgcHJvcGVydHkgdmFsdWVzIC0gdXNlIHRoZXNlIHRvIGxpc3QgdmFsdWVzIGZvciB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6Ci0hLS0gQ2xpZW50LlJ1bnRpbWVJZCwgQ2xpZW50LlNlcnZlcklkIAotTGlzdFJ1bnRpbWVzPXRydWUKLUxpc3RTZXJ2ZXJzPXRydWUKLSEtLSBWZXJib3NlIHdpbGwgbGlzdCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIGFzIHdlbGwgYXMgZXJyb3JzIGlmIHNldCB0byB0cnVlCi1WZXJib3NlPXRydWUKLQotIAotIS0tQ2xpZW50LlJ1bnRpbWVJZCAtIElEIG9mIHdlYiBzZXJ2aWNlIHJ1bnRpbWUgCi1DbGllbnQuUnVudGltZUlkPW9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLmF4aXNXZWJTZXJ2aWNlUlQKLSEtLUNsaWVudC5TZXJ2ZXJJZCAtIElEIG9mIHRhcmdldCBzZXJ2ZXIgCi1DbGllbnQuU2VydmVySWQ9b3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNTAKLQotIS0tQ2xpZW50UHJvamVjdE5hbWUgLSBuYW1lIG9mIENsaWVudCBwcm9qZWN0IC0gdGhpcyBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB0byBnaXZlIHRoZSBjbGllbnQgcHJvamVjdCBhIAotIS0tIGRpZmZlcmVudCBuYW1lIHRoYW4gdGhlIHByb2plY3QgY29udGFpbmluZyB0aGUgaW5pdGlhbCBzZWxlY3Rpb24KLSEtLUNsaWVudFByb2plY3ROYW1lPWNsaWVudFByb2plY3ROYW1lCi0KLSEtLUNsaWVudEVhclByb2plY3ROYW1lLSBuYW1lIG9mIENsaWVudCBFQVIgcHJvamVjdCAtIHNldCBvbmx5IGlmIGFwcGxpY2FibGUgZm9yIHNlbGVjdGVkIHNlcnZlciB0eXBlCi0hLS1DbGllbnRFYXJQcm9qZWN0TmFtZT1jbGllbnRFQVJQcm9qZWN0TmFtZQotCi0hLS1DbGllbnRDb21wb25lbnRUeXBlIC0gdHlwZSBvZiBDbGllbnQgcHJvamVjdCAtIHRoZSBmb2xsb3dpbmcgYXJlIHZhbGlkIEF4aXMgdGVtcGxhdGVzOiB0ZW1wbGF0ZS5qc3Qud2ViIGFuZCB0ZW1wbGF0ZS5qc3QudXRpbGl0eQotIS0tQ2xpZW50Q29tcG9uZW50VHlwZT10ZW1wbGF0ZS5qc3Qud2ViCi0KLSEtLSBDdXN0b21pemVDbGllbnRNYXBwaW5ncyAtIHNldCB0byB0cnVlIHRvIHN1cHBseSBwYWNrYWdlLW5hbWVzcGFjZSBtYXBwaW5ncyB0eXBlOiBib29sZWFuCi0hLS1DdXN0b21pemVDbGllbnRNYXBwaW5ncz1mYWxzZSAgCi0gICAgCi0hLS0gTWFwcGluZ3MgCi0hLS0gV29ya3NwYWNlIHJlbGF0aXZlIFVSSSB0byBwcm9wZXJ0eSBmaWxlIGNvbnRhaW5pbmcgbWFwcGluZ3MKLSEtLSBNYXBwaW5ncyBhcmUgdXNlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBwYWNrYWdlIG5hbWVzIG9mIHRoZSBnZW5lcmF0ZWQgSmF2YSBjbGFzc2VzLgotIS0tIE5lZWQgbm90IGJlIHNldCBpZiBDdXN0b21pemVDbGllbnRNYXBwaW5ncyBpcyBmYWxzZSAgCi0hLS0gVGhlIGNvbnRlbnQgb2YgdGhlIHByb3BlcnRpZXMgZmlsZSBtdXN0IGJlIG9mIHRoZSBmb3JtYXQgcGFja2FnZSA9IG5hbWVzcGFjZS4KLSEtLU1hcHBpbmdzPS90ZXN0UHJvai9tYXBwaW5ncy9tYXBwaW5ncy50eHQKLQotIS0tT3ZlcndyaXRlRmlsZXNFbmFibGVkIC0gc2V0IHRvIHRydWUgdG8gb3ZlcndyaXRlIGZpbGVzIHRoYXQgYWxyZWFkeSBleGlzdC4gdHlwZTpib29sZWFuIAotIS0tIG5vdGUgZm9yIG5vbi1pbnRlcmFjdGl2ZSBtb2RlIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhpcyBiZSBzZXQgdG8gdHJ1ZQotIS0tIE92ZXJ3cml0ZUZpbGVzRW5hYmxlZD10cnVlCi0KLSEtLUNyZWF0ZUZvbGRlcnNFbmFibGVkIC0gc2V0IHRvIHRydWUgY3JlYXRlIGZvbGRlcnMgbmVjZXNzYXJ5IGR1cmluZyBmaWxlIGdlbmVyYXRpb24gdHlwZTpib29sZWFuCi0hLS0gbm90ZSBmb3Igbm9uLWludGVyYWN0aXZlIG1vZGUgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGlzIGJlIHNldCB0byB0cnVlCi0hLS0gQ3JlYXRlRm9sZGVyc0VuYWJsZWQ9dHJ1ZQotCi0hLS1DaGVja291dEZpbGVzRW5hYmxlZCAtIHNldCB0byB0cnVlIHRvIGNoZWNrIG91dCBmaWxlcyB3aXRoIG5vIHdhcm5pbmcgdG8gdGhlIHVzZXIgdHlwZTpib29sZWFuCi0hLS0gbm90ZSBmb3Igbm9uLWludGVyYWN0aXZlIG1vZGUgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGlzIGJlIHNldCB0byB0cnVlCi0hLS0gQ2hlY2tvdXRGaWxlc0VuYWJsZWQ9dHJ1ZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvYW50L2F4aXNzZXJ2aWNlLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9hbnQvYXhpc3NlcnZpY2UucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ZhN2M5MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9hbnQvYXhpc3NlcnZpY2UucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSEtLSBTY2VuYXJpb1R5cGUgUkVRVUlSRUQuIERpZmZlcmVudGlhdGVzIGZyb20gImNsaWVudCIgc2NlbmFyaW8uICBTZWUgYXhpc2NsaWVudC5wcm9wZXJ0aWVzLgotU2NlbmFyaW9UeXBlPXNlcnZpY2UKLQotIS0tIEluaXRpYWxTZWxlY3Rpb24gUkVRVUlSRUQuICBXb3Jrc3BhY2UgcmVsYXRpdmUgVVJJIHRvIHRoZSBpbnB1dCBXU0RMIG9yIEphdmEKLUluaXRpYWxTZWxlY3Rpb249L2R5bmFtaWNXZWJQcm9qZWN0TmFtZS9XZWJDb250ZW50L215U2VydmljZS53c2RsCi0KLSEtLVV0aWxpdHkgcHJvcGVydHkgdmFsdWVzIC0gdXNlIHRoZXNlIHRvIGxpc3QgdmFsaWQgdmFsdWVzIGZvciB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6Ci0hLS0gU2VydmljZS5SdW50aW1lSWQsIFNlcnZpY2UuU2VydmVySWQgCi1MaXN0UnVudGltZXM9dHJ1ZQotTGlzdFNlcnZlcnM9dHJ1ZQotIS0tIFZlcmJvc2Ugd2lsbCBsaXN0IGluZm9ybWF0aW9uYWwgbWVzc2FnZXMgYXMgd2VsbCBhcyBlcnJvcnMgaWYgc2V0IHRvIHRydWUKLVZlcmJvc2U9dHJ1ZQotCi0hLS0gIFNlcnZpY2UuUnVudGltZUlkIC0gSUQgb2Ygd2ViIHNlcnZpY2UgcnVudGltZSAKLVNlcnZpY2UuUnVudGltZUlkPW9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLmF4aXNXZWJTZXJ2aWNlUlQKLSEtLSBTZXJ2aWNlLlNlcnZlcklkIC0gIElEIG9mIHRhcmdldCBzZXJ2ZXIgCi1TZXJ2aWNlLlNlcnZlcklkPW9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjUwCi0hLS0gU2VydmljZS5UeXBlSWQgLSAgIlRvcCBEb3duIEVKQiIgb3IgIkJvdHRvbSBVcCBFSkIiICAKLSEtLSBKYXZhIEJlYW4gaXMgZGVmYXVsdCBmb3IgYm90aCBUb3AgRG93biBhbmQgQm90dG9tIFVwCi0hLS0gU2VydmljZS5UeXBlSWQ9VG9wIERvd24gRUpCCi0KLSEtLSBTZXJ2aWNlUHJvamVjdE5hbWUgLSAhLS10eXBlOlN0cmluZyAtIG5hbWUgb2YgU2VydmljZSBwcm9qZWN0IC0gdGhpcyBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB0byBnaXZlIHRoZSBzZXJ2aWNlIHByb2plY3QgYSBkaWZmZXJlbnQgbmFtZSB0aGFuIHRoZSBwcm9qZWN0IGNvbnRhaW5pbmcgdGhlIGluaXRpYWwgc2VsZWN0aW9uLiAgdHlwZTogU3RyaW5nICAgIAotIS0tU2VydmljZVByb2plY3ROYW1lPXNlcnZpY2VQcm9qZWN0TmFtZQotIS0tIFNlcnZpY2VFYXJQcm9qZWN0TmFtZSAtICEtLXR5cGU6U3RyaW5nIC0gbmFtZSBvZiBTZXJ2aWNlIHByb2plY3QgLSB0aGlzIHByb3BlcnR5IGNhbiBiZSB1c2VkIHRvIGdpdmUgdGhlIHNlcnZpY2UgRUFSIHByb2plY3QgYSBkaWZmZXJlbnQgbmFtZSB0aGFuIHRoZSBwcm9qZWN0IGNvbnRhaW5pbmcgdGhlIGluaXRpYWwgc2VsZWN0aW9uLiAgdHlwZTogU3RyaW5nCi0hLS1TZXJ2aWNlRWFyUHJvamVjdE5hbWU9c2VydmljZUVhclByb2plY3ROYW1lCi0KLSEtLSBNYXBwaW5ncwotIS0tIFRvcCBkb3duIG9yIGJvdHRvbSB1cCBzY2VuYXJpby4gV29ya3NwYWNlIHJlbGF0aXZlIFVSSSB0byBwcm9wZXJ0eSBmaWxlIGNvbnRhaW5pbmcgbWFwcGluZ3MuCi0hLS0gVG9wIERvd246IE1hcHBpbmdzIGFyZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHBhY2thZ2UgbmFtZXMgb2YgdGhlIGdlbmVyYXRlZCBKYXZhIHRlbXBsYXRlIGNsYXNzZXMuCi0hLS0gVGhlIGNvbnRlbnQgb2YgdGhlIHByb3BlcnRpZXMgZmlsZSBtdXN0IGJlIG9mIHRoZSBmb3JtYXQgbmFtZXNwYWNlPXBhY2thZ2UgIAotIS0tIEJvdHRvbSBVcDogTWFwcGluZ3MgYXJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgbmFtZXNwYWNlIG5hbWVzIGluIHRoZSBnZW5lcmF0ZWQgV1NETC4KLSEtLSBUaGUgY29udGVudCBvZiB0aGUgcHJvcGVydGllcyBmaWxlIG11c3QgYmUgb2YgdGhlIGZvcm1hdCBwYWNrYWdlID0gbmFtZXNwYWNlIAotIS0tTWFwcGluZ3M9L3Rlc3RQcm9qL21hcHBpbmdzL21hcHBpbmdzLnR4dAotCi0hLS0gSmF2YU91dHB1dAotIS0tIFRvcCBkb3duIC0gU3RyaW5nOiB0aGUgd29ya3NwYWNlIHJlbGF0aXZlIFVSSSBmb3IgYSBKYXZhIHNvdXJjZSBmb2xkZXIgZm9yIHRoZSBnZW5lcmF0ZWQgSmF2YSBjb2RlIC0gbXVzdCBiZSBleGlzdGluZyB3b3Jrc3BhY2Ugc291cmNlIGZvbGRlcgotIS0tSmF2YU91dHB1dD0vcHJvamVjdE5hbWUvSmF2YVNvdXJjZQotCi0hLS0gTWV0aG9kcwotIS0tIEJvdHRvbSB1cCAtIHNwYWNlIGRlbGltaXRlZCBzdHJpbmcgb2YgbWV0aG9kIHNpZ25hdHVyZXMgKGkuZS4gbWV0aG9kMShwYXJtVHlwZTEpIG1ldGhvZDIocGFybVR5cGUyKSkgdG8gYmUgZXhwb3NlZCBpbiBvdXRwdXQgV1NETC4gIElmIG5vIGxpc3QgaXMgcHJvdmlkZWQsIGFsbCBtZXRob2RzIGFyZSBleHBvc2VkLgotIS0tIE1ldGhvZHM9Ci0KLSEtLSBTdHlsZQotIS0tIEJvdHRvbSB1cCAtIFN0cmluZzogb25lIG9mOiBSUEMsIERPQ1VNRU5ULCBXUkFQUEVECi0hLS1TdHlsZT1ET0NVTUVOVAotCi0hLS0gVXNlCi0hLS0gQm90dG9tIHVwIC0gU3RyaW5nOiBvbmUgb2Y6IExJVEVSQUwsIEVOQ09ERUQgCi0hLS1Vc2U9TElURVJBTAotCi0hLS1PdmVyd3JpdGVGaWxlc0VuYWJsZWQgLSBzZXQgdG8gdHJ1ZSB0byBvdmVyd3JpdGUgZmlsZXMgdGhhdCBhbHJlYWR5IGV4aXN0LiB0eXBlOmJvb2xlYW4gCi0hLS0gbm90ZSBmb3Igbm9uLWludGVyYWN0aXZlIG1vZGUgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGlzIGJlIHNldCB0byB0cnVlCi0hLS1PdmVyd3JpdGVGaWxlc0VuYWJsZWQ9dHJ1ZQotCi0hLS1DcmVhdGVGb2xkZXJzRW5hYmxlZCAtIHNldCB0byB0cnVlIGNyZWF0ZSBmb2xkZXJzIG5lY2Vzc2FyeSBkdXJpbmcgZmlsZSBnZW5lcmF0aW9uIHR5cGU6Ym9vbGVhbgotIS0tIG5vdGUgZm9yIG5vbi1pbnRlcmFjdGl2ZSBtb2RlIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhpcyBiZSBzZXQgdG8gdHJ1ZQotIS0tQ3JlYXRlRm9sZGVyc0VuYWJsZWQ9dHJ1ZQotCi0hLS1DaGVja291dEZpbGVzRW5hYmxlZCAtIHNldCB0byB0cnVlIHRvIGNoZWNrIG91dCBmaWxlcyB3aXRoIG5vIHdhcm5pbmcgdG8gdGhlIHVzZXIgdHlwZTpib29sZWFuCi0hLS0gbm90ZSBmb3Igbm9uLWludGVyYWN0aXZlIG1vZGUgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGlzIGJlIHNldCB0byB0cnVlCi0hLS1DaGVja291dEZpbGVzRW5hYmxlZD10cnVlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9hbnQvd3NhbnQuYmF0IGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvYW50L3dzYW50LmJhdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzE5MjliMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9hbnQvd3NhbnQuYmF0CisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotcmVtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLXJlbSAgQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotcmVtICBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi1yZW0gIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotcmVtICB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotcmVtICBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotcmVtIAotcmVtICBDb250cmlidXRvcnM6Ci1yZW0gICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLXJlbSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi1lY2hvIG9mZgotc2V0bG9jYWwKLQotUkVNICoqKioqKioqKioqIExvY2FsIGVudmFycyAqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQotUkVNIFRoZSBKUkUgamF2YS5leGUgdG8gYmUgdXNlZCBieSBBbnQuICBOb3RlOiBmb3IgV1RQIDIuMCB0aGUgSkRLIG5lZWRzIHRvIGJlIDEuNSBvciBoaWdoZXIuCi1zZXQgSkFWQUVYRT0iQzpcajJzZGsxLjQuMl8wN1xqcmVcYmluXGphdmEuZXhlIgotCi1SRU0gVGhlIEVjbGlwc2UgaW5zdGFsbCBkaXJlY3RvcnkuICBTb21lIEVjbGlwc2UgYmFzZWQgcHJvZHVjdHMgbWF5IHJlZmVyIHRvIHRoaXMgZGlyZWN0b3J5Ci1SRU0gYXMgdGhlIG5vbiBzaGFyZWQgZGlyZWN0b3J5Lgotc2V0IElOU1RBTExfRElSRUNUT1JZPWQ6XHd0cFxlY2xpcHNlCi0KLVJFTSBUaGUgc2hhcmVkIEVjbGlwc2UgZmVhdHVyZXMgZGlyZWN0b3J5LiAgU29tZSBFY2xpcHNlIGJhc2VkIHByb2R1Y3RzIG1heSBzcGxpdCB0aGVpciAKLVJFTSBkaXJlY3Rvcnkgc3RydWN0dXJlIGludG8gc2hhcmVkIGFuZCBub24gc2hhcmVkIGZvbGRlcnMuICBUaGUgdmFyaWFibGUgYmVsb3cgc2hvdWxkIGJlCi1SRU0gc2V0IHRvIHRoZSBzaGFyZWQgZGlyZWN0b3J5LiAgTm90ZTogYSBkZWZhdWx0IFdUUCBpbnN0YWxsYXRpb24gZG9lcyBub3Qgc3BsaXQgaXQncwotUkVNIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgc28gdGhlIElOU1RBTExfRElSRUNUT1JZIGFuZCB0aGUgU0hBUkVEX0RJUkVDVE9SWSBzaG91bGQgYmUgdGhlIHNhbWUuCi1zZXQgU0hBUkVEX0RJUkVDVE9SWT0lSU5TVEFMTF9ESVJFQ1RPUlklCi0KLVJFTSBUaGUgRWNsaXBzZSBFcXVpbm94IExhdW5jaGVyIGphci4gIFVzdWFsbHkgdGhpcyBwbHVnaW4gamFyIGZpbGUgaXMgbG9jYXRlZCBpbiB0aGUKLVJFTSBzaGFyZWQgcGx1Z2luIGRpcmVjdG9yeShpZS4gcGx1Z2luc1xvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyKi5qYXIgKQotc2V0IExBVU5DSEVSX0pBUj0iJVNIQVJFRF9ESVJFQ1RPUlklXHBsdWdpbnNcb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlcl8xLjAuMC52MjAwNzA2MDYuamFyIgotCi1SRU0gVGhlIGxvY2F0aW9uIG9mIHlvdXIgd29ya3NwYWNlCi1zZXQgV09SS1NQQUNFPUQ6XGJ1aWxkc1x3dHBfMjBfZ2FcZWNsaXBzZVx3b3Jrc3BhY2UKLQotUkVNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQotaWYgbm90IGV4aXN0ICVKQVZBRVhFJSBlY2hvIEVSUk9SOiBpbmNvcnJlY3QgamF2YS5leGU9JUpBVkFFWEUlLCBlZGl0IHRoaXMgZmlsZSBhbmQgY29ycmVjdCB0aGUgSkFWQUVYRSBlbnZhcgotaWYgbm90IGV4aXN0ICVKQVZBRVhFJSBnb3RvIGRvbmUKLQotaWYgbm90IGV4aXN0ICVMQVVOQ0hFUl9KQVIlIGVjaG8gRVJST1I6IGluY29ycmVjdCBsYXVuY2hlciBqYXI9JUxBVU5DSEVSX0pBUiUsIGVkaXQgdGhpcyBmaWxlIGFuZCBjb3JyZWN0IHRoZSBMQVVOQ0hFUl9KQVIgZW52YXIKLWlmIG5vdCBleGlzdCAlTEFVTkNIRVJfSkFSJSBnb3RvIGRvbmUKLQotOnJ1bgotQGVjaG8gb24KLSVKQVZBRVhFJSAtamFyICVMQVVOQ0hFUl9KQVIlIC1pbnN0YWxsICVJTlNUQUxMX0RJUkVDVE9SWSUgLWNvbmZpZ3VyYXRpb24gJUlOU1RBTExfRElSRUNUT1JZJVxjb25maWd1cmF0aW9uIC1hcHBsaWNhdGlvbiBvcmcuZWNsaXBzZS5hbnQuY29yZS5hbnRSdW5uZXIgLWRhdGEgJVdPUktTUEFDRSUgLWZpbGUgd3NnZW4ueG1sICUqID53c2dlbi50eHQgMj4mMQotCi06ZG9uZQotcGF1c2UKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L2FudC93c2FudC5zaCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L2FudC93c2FudC5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzAxYzE4Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9hbnQvd3NhbnQuc2gKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0jKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotIyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSMhL2Jpbi9zaAotc2V0ICt2Ci0KLSNTY3JpcHQgdG8gcnVuIFdlYlNlcnZpY2UgQW50IHRhc2tzIGluIGhlYWRsZXNzIEVjbGlwc2UgbW9kZQotCi1lY2hvICJTZXR0aW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyIKLQotIyBUaGUgSlJFIGphdmEuZXhlIHRvIGJlIHVzZWQgYnkgQW50LiAgTm90ZTogZm9yIFdUUCAyLjAgdGhlIEpESyBuZWVkcyB0byBiZSAxLjUgb3IgaGlnaGVyLgotSkFWQUVYRT0vaG9tZS90ZXN0ZXIvc3VuamRrL2oyc2RrMS41LjAvYmluL2phdmEKLSAgICAgICAKLSAgICAgICAKLSMgVGhlIEVjbGlwc2UgaW5zdGFsbCBkaXJlY3RvcnkuICBTb21lIEVjbGlwc2UgYmFzZWQgcHJvZHVjdHMgbWF5IHJlZmVyIHRvIHRoaXMgZGlyZWN0b3J5Ci0jIGFzIHRoZSBub24gc2hhcmVkIGRpcmVjdG9yeS4KLUlOU1RBTExfRElSRUNUT1JZPS93dHAvZWNsaXBzZQotCi0jIFRoZSBzaGFyZWQgRWNsaXBzZSBmZWF0dXJlcyBkaXJlY3RvcnkuICBTb21lIEVjbGlwc2UgYmFzZWQgcHJvZHVjdHMgbWF5IHNwbGl0IHRoZWlyIAotIyBkaXJlY3Rvcnkgc3RydWN0dXJlIGludG8gc2hhcmVkIGFuZCBub24gc2hhcmVkIGZvbGRlcnMuICBUaGUgdmFyaWFibGUgYmVsb3cgc2hvdWxkIGJlCi0jIHNldCB0byB0aGUgc2hhcmVkIGRpcmVjdG9yeS4gIE5vdGU6IGEgZGVmYXVsdCBXVFAgaW5zdGFsbGF0aW9uIGRvZXMgbm90IHNwbGl0IGl0J3MKLSMgZGlyZWN0b3J5IHN0cnVjdHVyZSBzbyB0aGUgSU5TVEFMTF9ESVJFQ1RPUlkgYW5kIHRoZSBTSEFSRURfRElSRUNUT1JZIHNob3VsZCBiZSB0aGUgc2FtZS4KLVNIQVJFRF9ESVJFQ1RPUlk9JElOU1RBTExfRElSRUNUT1JZCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotIyBUaGUgRWNsaXBzZSBFcXVpbm94IExhdW5jaGVyIGphci4gIFVzdWFsbHkgdGhpcyBwbHVnaW4gamFyIGZpbGUgaXMgbG9jYXRlZCBpbiB0aGUKLSMgc2hhcmVkIHBsdWdpbiBkaXJlY3RvcnkoaWUuIHBsdWdpbnMvb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlciouamFyICkKLUxBVU5DSEVSX0pBUj0kU0hBUkVEX0RJUkVDVE9SWS9wbHVnaW5zL29yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXJfMS4wLjAudjIwMDcwNjA2LmphcgotCi0KLSMgVGhlIGxvY2F0aW9uIG9mIHlvdXIgd29ya3NwYWNlCi1XT1JLU1BBQ0U9L2hvbWUvdGVzdGVyL3dvcmtzcGFjZV8xMTE2YgotCi1ydW4oKSB7Ci0gIHNldCAtdgotICAkSkFWQUVYRSAtamFyICRMQVVOQ0hFUl9KQVIgLWluc3RhbGwgJElOU1RBTExfRElSRUNUT1JZIC1jb25maWd1cmF0aW9uICRJTlNUQUxMX0RJUkVDVE9SWS9jb25maWd1cmF0aW9uIC1hcHBsaWNhdGlvbiBvcmcuZWNsaXBzZS5hbnQuY29yZS5hbnRSdW5uZXIgLWRhdGEgJFdPUktTUEFDRSAtZmlsZSB3c2dlbi54bWwgJGxzID4gd3NnZW4udHh0IDI+JjEKLX0KLQotaWYgWyAhIC1lICRKQVZBRVhFIF07IHRoZW4gCi0gIGVjaG8gIkVSUk9SOiBpbmNvcnJlY3QgamF2YS5leGU9JEpBVkFFWEUsIGVkaXQgdGhlIHNjcmlwdCBhbmQgY29ycmVjdCB0aGUgSkFWQUVYRSBlbnZpcm9ubWVudCB2YXJpYWJsZSI7Ci0gIGV4aXQgMTsKLWZpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLWlmIFsgISAtZSAkTEFVTkNIRVJfSkFSIF07IHRoZW4KLWVjaG8gIkVSUk9SOiBpbmNvcnJlY3QgbGF1bmNoZXI9JExBVU5DSEVSX0pBUiwgZWRpdCB0aGUgc2NyaXB0IGFuZCBjb3JyZWN0IHRoZSBMQVVOQ0hFUl9KQVIgZW52aXJvbm1lbnQgdmFyaWFibGUiOwotZXhpdCAxOwotZmkgIAotCi1ydW4KLWV4aXQgMApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvYW50L3dzZ2VuLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L2FudC93c2dlbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0N2E2YzcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvYW50L3dzZ2VuLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotCi08cHJvamVjdCBkZWZhdWx0PSJtYWluIiBiYXNlZGlyPSIuIj4KLQotPGVjaG8gbWVzc2FnZT0icHVsbGluZyBpbiBwcm9wZXJ0eSBmaWxlcyIvPgotPHByb3BlcnR5IGZpbGU9ImF4aXNzZXJ2aWNlLnByb3BlcnRpZXMiLz4KLQkKLTxlY2hvIG1lc3NhZ2U9ImNhbGxpbmcgdGhlIHdlYiBzZXJ2aWNlcyBnZW5lcmF0aW9uIGFudCB0YXNrOiB3c2dlbiIvPgotIDx0YXJnZXQgbmFtZT0ibWFpbiIgPgotICAJIDx3c2dlbi8+Ci0gIDwvdGFyZ2V0PgotICAKLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L2J1aWxkLWFudHRhc2tzLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L2J1aWxkLWFudHRhc2tzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWUxZWQ4OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9idWlsZC1hbnR0YXNrcy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3QgbmFtZT0iQnVpbGQgQW50IEVudmlyb25tZW50IHN1cHBvcnQgSkFSIiBkZWZhdWx0PSJidWlsZCIgYmFzZWRpcj0iLiI+Ci0KLQk8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXNjcmlwdGlvbj0iQ2xlYW5zLCBidWlsZHMgYW5kIHJlZnJlc2hlcyIgZGVwZW5kcz0iY2xlYW4sIGFudC1saWIvYW50dGFza3MuamFyIi8+Ci0KLQk8dGFyZ2V0IG5hbWU9ImluaXQiIGRlcGVuZHM9InByb3BlcnRpZXMiPgotCQk8cHJvcGVydHkgbmFtZT0idmVyc2lvbi5zdWZmaXgiIHZhbHVlPSJfMy4xLjAiLz4KLQkJPHByb3BlcnR5IG5hbWU9Im5ldy52ZXJzaW9uLnN1ZmZpeCIgdmFsdWU9Il8zLjIuMCIvPgotCQk8cHJvcGVydHkgbmFtZT0iYm9vdGNsYXNzcGF0aCIgdmFsdWU9IiIvPgotCQk8cHJvcGVydHkgbmFtZT0idGVtcC5mb2xkZXIiIHZhbHVlPSIke2Jhc2VkaXJ9L3RlbXAuZm9sZGVyIi8+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJidWlsZC5yZXN1bHQuZm9sZGVyIiB2YWx1ZT0iJHtiYXNlZGlyfSIvPgotCQk8cHJvcGVydHkgbmFtZT0id2luMzIuamFyIiB2YWx1ZT0iJHtlY2xpcHNlLmhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2Uuc3d0LndpbjMyLndpbjMyLng4NiR7dmVyc2lvbi5zdWZmaXh9LmphciIvPgotCQk8cHJvcGVydHkgbmFtZT0iZ3RrLmphciIgdmFsdWU9IiR7ZWNsaXBzZS5ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnN3dC5ndGsubGludXgueDg2JHt2ZXJzaW9uLnN1ZmZpeH0uamFyIi8+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJtb3RpZi5qYXIiIHZhbHVlPSIke2VjbGlwc2UuaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS5zd3QubW90aWYke3ZlcnNpb24uc3VmZml4fS5qYXIiLz4KLQkJPHByb3BlcnR5IG5hbWU9Im9zeC5qYXIiIHZhbHVlPSIke2VjbGlwc2UuaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS5zd3QuY2FyYm9uLm1hY29zeC5wcGMke3ZlcnNpb24uc3VmZml4fS5qYXIiLz4KLQkJPGF2YWlsYWJsZSBmaWxlPSIke3dpbjMyLmphcn0iIHByb3BlcnR5PSJzd3QuamFyIiB2YWx1ZT0iJHt3aW4zMi5qYXJ9Ii8+Ci0JCTxhdmFpbGFibGUgZmlsZT0iJHtndGsuamFyfSIgcHJvcGVydHk9InN3dC5qYXIiIHZhbHVlPSIke2d0ay5qYXJ9Ii8+Ci0JCTxhdmFpbGFibGUgZmlsZT0iJHttb3RpZi5qYXJ9IiBwcm9wZXJ0eT0ic3d0LmphciIgdmFsdWU9IiR7bW90aWYuamFyfSIvPgotCQk8YXZhaWxhYmxlIGZpbGU9IiR7b3N4Lmphcn0iIHByb3BlcnR5PSJzd3QuamFyIiB2YWx1ZT0iJHtvc3guamFyfSIvPgotCTwvdGFyZ2V0PgotCQotCTx0YXJnZXQgbmFtZT0icHJvcGVydGllcyIgaWY9ImVjbGlwc2UucnVubmluZyI+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJidWlsZC5jb21waWxlciIgdmFsdWU9Im9yZy5lY2xpcHNlLmpkdC5jb3JlLkpEVENvbXBpbGVyQWRhcHRlciIvPgotCTwvdGFyZ2V0PgotCQkKLQkJPHRhcmdldCBuYW1lPSJhbnQtbGliL2FudHRhc2tzLmphciIgZGVzY3JpcHRpb249ICJDcmVhdGVzIHRoZSBhbnRydW5uZXIuamFyIiBkZXBlbmRzPSJpbml0Ij4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJkZXN0ZGlyIiB2YWx1ZT0iJHt0ZW1wLmZvbGRlcn0vYW50LWxpYi9hbnR0YXNrcy5qYXIiLz4KLQkJCTxkZWxldGUgZGlyPSIke2Rlc3RkaXJ9Ii8+Ci0JCQk8bWtkaXIgZGlyPSIke2Rlc3RkaXJ9Ii8+Ci0JCQk8amF2YWMgZGVzdGRpcj0iJHtkZXN0ZGlyfSIgZmFpbG9uZXJyb3I9InRydWUiIHZlcmJvc2U9ImZhbHNlIiBkZWJ1Zz0ib24iIGluY2x1ZGVKYXZhUnVudGltZT0gInllcyIKLQkJCSAJYm9vdGNsYXNzcGF0aD0iJHtib290Y2xhc3NwYXRofSIKLQkJCSAJY2xhc3NwYXRoPSIke2Jhc2VkaXJ9L2JpbiI+Ci0JCQkJPHNyYyBwYXRoPSJhbnQtc3JjLyIvPgotCQkJPC9qYXZhYz4KLQkJCTxjb3B5IHRvZGlyPSIke2Rlc3RkaXJ9Ij4KLQkJCQk8ZmlsZXNldCBkaXI9ImFudC1zcmMvIiBleGNsdWRlcz0iKiovKi5qYXZhIi8+Ci0JCQk8L2NvcHk+Ci0JCQk8bWtkaXIgZGlyPSIke2J1aWxkLnJlc3VsdC5mb2xkZXJ9L2FudC1saWIiLz4KLQkJCTxqYXIgZGVzdGZpbGU9IiR7YnVpbGQucmVzdWx0LmZvbGRlcn0vYW50LWxpYi9hbnR0YXNrcy5qYXIiIGJhc2VkaXI9IiR7ZGVzdGRpcn0iLz4KLQkJCTxkZWxldGUgZGlyPSIke3RlbXAuZm9sZGVyfSIvPgotCQk8L3RhcmdldD4KLQotCQk8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXNjcmlwdGlvbj0iRGVsZXRlcyBwcmV2aW91cyBidWlsZCByZW1uYW50cyIgZGVwZW5kcz0iaW5pdCI+Ci0JCQk8ZGVsZXRlIGZpbGU9IiR7YnVpbGQucmVzdWx0LmZvbGRlcn0vYW50LWxpYi9hbnR0YXNrcy5qYXIiLz4KLQkJCTxkZWxldGUgZGlyPSIke3RlbXAuZm9sZGVyfSIvPgotCQk8L3RhcmdldD4KLQkKLQk8dGFyZ2V0IG5hbWU9InJlZnJlc2giPgotCTxlY2xpcHNlLkxvY2FsUmVmcmVzaCByZXNvdXJjZT0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52IiBkZXB0aD0iaW5maW5pdGUiLz4KLQk8L3RhcmdldD4KLQkKLQk8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9idWlsZC5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTE1NzA2YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotYmluLmluY2x1ZGVzID0gcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBlbnYuamFyLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIGFudC8sXAotICAgICAgICAgICAgICAgYW50LWxpYi9hbnR0YXNrcy5qYXIKLXNvdXJjZS5lbnYuamFyID0gc3JjLwotb3V0cHV0LmVudi5qYXIgPSBiaW4vCi1qYXJzLmNvbXBpbGUub3JkZXIgPSBlbnYuamFyLFwKLSAgICAgICAgICAgICAgICAgICAgIGFudC1saWIvYW50dGFza3MuamFyCi1zb3VyY2UuYW50LWxpYi9hbnR0YXNrcy5qYXIgPSBhbnQtc3JjLwotb3V0cHV0LmFudC1saWIvYW50dGFza3MuamFyID0gYmluLwotcm9vdC5wZXJtaXNzaW9ucy43NzcgPSBhbnQvCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9wbHVnaW4ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzdkM2NjYmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgTWVzc2FnZXMgaW4gcGx1Z2luLnhtbC4KLSMKLVBMVUdJTl9OQU1FPUVudmlyb25tZW50IENvbW1hbmQgRnJhbWV3b3JrIChoZWFkbGVzcykKLVBMVUdJTl9QUk9WSURFUj1FY2xpcHNlLm9yZwotCi1QTFVHSU5fWFBfRFlOQU1JQ19XSVpBUkQ9RHluYW1pYyBXaXphcmQKLVBMVUdJTl9YUF9QT1BVUF9ESUFMT0dTPU9wdGlvbmFsIFBvcC11cCBBY3Rpb24gRGlhbG9ncyBUeXBlcwotCi1YUF9hbnREYXRhTWFwcGluZz1BbnQgRW52aXJvbm1lbnQgcHJvcGVydHkgbWFwcGluZ3MKLVhQX2FudFNjZW5hcmlvPUFudCBFbnZpcm9ubWVudCBzY2VuYXJpb3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3BsdWdpbi54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTYyMjE2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotCi08cGx1Z2luPgotCi0gICA8IS0tIFRoZSBmb2xsb3dpbmcgZXh0ZW5zaW9uIHBvaW50IGlzIGludGVybmFsIGFuZCBsaWtlbHkgdG8gY2hhbmdlLiAtLT4KLSAgIDxleHRlbnNpb24tcG9pbnQKLSAgICAgIGlkPSJkeW5hbWljV2l6YXJkIgotICAgICAgbmFtZT0iJVBMVUdJTl9YUF9EWU5BTUlDX1dJWkFSRCIvPgotCi0gICA8IS0tIFRoZSBmb2xsb3dpbmcgZXh0ZW5zaW9uIHBvaW50IGlzIGludGVybmFsIGFuZCBsaWtlbHkgdG8gY2hhbmdlLiAtLT4gICAKLSAgIDxleHRlbnNpb24tcG9pbnQKLSAgICAgIGlkPSJhY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZSIKLSAgICAgIG5hbWU9IiVQTFVHSU5fWFBfUE9QVVBfRElBTE9HUyIvPgotCi0gICA8ZXh0ZW5zaW9uLXBvaW50IGlkPSJhbnREYXRhTWFwcGluZyIgbmFtZT0iJVhQX2FudERhdGFNYXBwaW5nIiBzY2hlbWE9InNjaGVtYS9hbnRkYXRhbWFwcGluZy5leHNkIi8+Ci0gICA8ZXh0ZW5zaW9uLXBvaW50IGlkPSJhbnRTY2VuYXJpbyIgbmFtZT0iJVhQX2FudFNjZW5hcmlvIiBzY2hlbWE9InNjaGVtYS9hbnRTY2VuYXJpby5leHNkIi8+Ci0gICAgIAotICAgPGV4dGVuc2lvbgotICAgICAgICAgaWQ9IndzZ2VuIgotICAgICAgICAgbmFtZT0id3NnZW4iCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuYW50LmNvcmUuYW50VGFza3MiPgotICAgICAgPGFudFRhc2sKLSAgICAgICAgICAgIGNsYXNzPSJ3cy5hbnQudGFzay5XZWJTZXJ2aWNlR2VuZXJhdGlvbkFudFRhc2siCi0gICAgICAgICAgICBlY2xpcHNlUnVudGltZT0idHJ1ZSIKLSAgICAgICAgICAgIGhlYWRsZXNzPSJ0cnVlIgotICAgICAgICAgICAgbGlicmFyeT0iYW50LWxpYi9hbnR0YXNrcy5qYXIiCi0gICAgICAgICAgICBuYW1lPSJ3c2dlbiIvPgotICAgPC9leHRlbnNpb24+IAotICAgICA8ZXh0ZW5zaW9uCi0gICAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5hbnQuY29yZS5leHRyYUNsYXNzcGF0aEVudHJpZXMiPgotICAgICAgICA8ZXh0cmFDbGFzc3BhdGhFbnRyeSBsaWJyYXJ5PSJhbnQtbGliL2FudHRhc2tzLmphciIvPgotICAgICA8L2V4dGVuc2lvbj4gICAgIAotCi08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NjaGVtYS9hbnRTY2VuYXJpby5leHNkIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc2NoZW1hL2FudFNjZW5hcmlvLmV4c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhYWZmNTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc2NoZW1hL2FudFNjZW5hcmlvLmV4c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KLTwhLS0gU2NoZW1hIGZpbGUgd3JpdHRlbiBieSBQREUgLS0+Ci08c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52Ij4KLTxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zY2hlbWEgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYiIGlkPSJhbnRTY2VuYXJpbyIgbmFtZT0iQW50IEVudmlyb25tZW50IFNjZW5hcmlvcyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iYW50U2NlbmFyaW8iLz4KLSAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGEgZnVsbHkgcXVhbGlmaWVkIGlkZW50aWZpZXIgb2YgdGhlIHRhcmdldCBleHRlbnNpb24gcG9pbnQKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhbiBvcHRpb25hbCBpZGVudGlmaWVyIG9mIHRoZSBleHRlbnNpb24gaW5zdGFuY2UKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGFuIG9wdGlvbmFsIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiBpbnN0YW5jZQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJhbnRTY2VuYXJpbyI+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InNjZW5hcmlvVHlwZSIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjbGFzcyIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0ic2luY2UiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgJmx0O2ImZ3Q7VGhpcyBleHRlbnNpb24gcG9pbnQgaXMgcGFydCBvZiBhbiBpbnRlcmltIEFQSSB0aGF0IGlzIHN0aWxsIHVuZGVyIGRldmVsb3BtZW50IGFuZCBleHBlY3RlZCB0byBjaGFuZ2Ugc2lnbmlmaWNhbnRseSBiZWZvcmUgcmVhY2hpbmcgc3RhYmlsaXR5LiBJdCBpcyBiZWluZyBtYWRlIGF2YWlsYWJsZSBhdCB0aGlzIGVhcmx5IHN0YWdlIHRvIHNvbGljaXQgZmVlZGJhY2sgZnJvbSBwaW9uZWVyaW5nIGFkb3B0ZXJzIG9uIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgYW55IGNvZGUgdGhhdCB1c2VzIHRoaXMgQVBJIHdpbGwgYWxtb3N0IGNlcnRhaW5seSBiZSBicm9rZW4gKHJlcGVhdGVkbHkpIGFzIHRoZSBBUEkgZXZvbHZlcy4mbHQ7L2ImZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImV4YW1wbGVzIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIAotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJhcGlJbmZvIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIAotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJpbXBsZW1lbnRhdGlvbiIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iY29weXJpZ2h0Ii8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4mbHQ7YnImZ3Q7Ci1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIAotYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIAotdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgJmx0O2EKLWhyZWY9JnF1b3Q7aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmcXVvdDsmZ3Q7aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmbHQ7L2EmZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc2NoZW1hL2FudGRhdGFtYXBwaW5nLmV4c2QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zY2hlbWEvYW50ZGF0YW1hcHBpbmcuZXhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDFlNzM5My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zY2hlbWEvYW50ZGF0YW1hcHBpbmcuZXhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEzMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgotPCEtLSBTY2hlbWEgZmlsZSB3cml0dGVuIGJ5IFBERSAtLT4KLTxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYiPgotPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNjaGVtYSBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudiIgaWQ9ImFudERhdGFNYXBwaW5nIiBuYW1lPSJBbnQgRW52aXJvbm1lbnQgUHJvcGVydHkgTWFwcGluZ3MiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxlbGVtZW50IG5hbWU9ImV4dGVuc2lvbiI+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9Im1hcCIgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icG9pbnQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgYSBmdWxseSBxdWFsaWZpZWQgaWRlbnRpZmllciBvZiB0aGUgdGFyZ2V0IGV4dGVuc2lvbiBwb2ludAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGFuIG9wdGlvbmFsIGlkZW50aWZpZXIgb2YgdGhlIGV4dGVuc2lvbiBpbnN0YW5jZQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgYW4gb3B0aW9uYWwgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uIGluc3RhbmNlCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9Im1hcCI+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImtleSIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJvcGVyYXRpb24iIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icHJvcGVydHkiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0idHJhbnNmb3JtIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InJlcXVpcmVkIiB0eXBlPSJib29sZWFuIiB1c2U9Im9wdGlvbmFsIiBkZWZhdWx0PSJmYWxzZSI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9InNpbmNlIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICZsdDtiJmd0O1RoaXMgZXh0ZW5zaW9uIHBvaW50IGlzIHBhcnQgb2YgYW4gaW50ZXJpbSBBUEkgdGhhdCBpcyBzdGlsbCB1bmRlciBkZXZlbG9wbWVudCBhbmQgZXhwZWN0ZWQgdG8gY2hhbmdlIHNpZ25pZmljYW50bHkgYmVmb3JlIHJlYWNoaW5nIHN0YWJpbGl0eS4gSXQgaXMgYmVpbmcgbWFkZSBhdmFpbGFibGUgYXQgdGhpcyBlYXJseSBzdGFnZSB0byBzb2xpY2l0IGZlZWRiYWNrIGZyb20gcGlvbmVlcmluZyBhZG9wdGVycyBvbiB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IGFueSBjb2RlIHRoYXQgdXNlcyB0aGlzIEFQSSB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgYmUgYnJva2VuIChyZXBlYXRlZGx5KSBhcyB0aGUgQVBJIGV2b2x2ZXMuJmx0Oy9iJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJleGFtcGxlcyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iYXBpSW5mbyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iaW1wbGVtZW50YXRpb24iLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImNvcHlyaWdodCIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuJmx0O2JyJmd0OwotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSAKLWF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyAKLXRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0ICZsdDthCi1ocmVmPSZxdW90O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJnF1b3Q7Jmd0O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJmx0Oy9hJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvRW52aXJvbm1lbnQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvRW52aXJvbm1lbnQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE1YzI1NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L0Vudmlyb25tZW50LnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSMgLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgMjAwNzA0MTggICAxNzcwMDUgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jCi0jIE1lc3NhZ2VzIGZvciBSZXNvdWNlVXRpbHMKLSMKLU1TR19FUlJPUl9QQVRIX05PVF9BQlNPTFVURT1JV0FCMDAwM0UgUGF0aCB7MH0gaXMgbm90IGFic29sdXRlIGZvciBjcmVhdGluZyBhIGZpbGUuCi1NU0dfRVJST1JfUEFUSF9FTVBUWT1JV0FCMDAwNEUgUGF0aCB7MH0gaXMgZW1wdHkgd2hpbGUgY3JlYXRpbmcgYSBmaWxlLgotTVNHX0VSUk9SX1BBVEhfTk9UX0ZPTERFUj1JV0FCMDAwNUUgUGF0aCB7MH0gaXMgbm90IGEgZm9sZGVyIGZvciBjcmVhdGluZyBhIGZpbGUuCi1NU0dfRVJST1JfRk9MREVSX0NSRUFUSU9OX0RJU0FCTEVEPUlXQUIwMDA3RSBGb2xkZXIgY3JlYXRpb24gaGFzIGJlZW4gZGlzYWJsZWQgZm9yIHBhcmVudCBmb2xkZXIgezB9IGFuZCBjaGlsZCB7MX0uCi1NU0dfRVJST1JfUkVTT1VSQ0VfTk9UX0ZPTERFUj1JV0FCMDAwOEUgUmVzb3VyY2UgezB9IGlzIG5vdCBhIGZvbGRlci4KLU1TR19XQVJOX0ZJTEVfT1ZFUldSSVRFX0RJU0FCTEVEPUlXQUIwMDA5VyBDYW5ub3Qgb3ZlcndyaXRlIGZpbGUgezF9IGluIGZvbGRlciB7MH0uCi1NU0dfRVJST1JfRklMRV9DSEVDS09VVF9ESVNBQkxFRD1JV0FCMDAxMEUgQ2Fubm90IGNoZWNrb3V0IGZpbGUgezF9IGluIGZvbGRlciB7MH0uCi1NU0dfRVJST1JfUkVTT1VSQ0VfTk9UX0ZJTEU9SVdBQjAwMTFFIFRoZSBmb2xsb3dpbmcgcGF0aCBpcyBub3QgYSByZXNvdXJjZTogezB9LgotTVNHX0VSUk9SX0ZPTERFUl9IQVNfQ0hJTERSRU49SVdBQjAwMTJFIENhbm5vdCBjcmVhdGUgZm9sZGVyOiB7MH0gdGhhdCBhbHJlYWR5IGhhcyBjaGlsZHJlbi4KLU1TR19FUlJPUl9JTz1JV0FCMDAwNkUgQW4gaW5wdXQvb3V0cHV0IGVycm9yIG9jY3VycmVkIHdoaWxlIHByb2Nlc3NpbmcgdGhlIHJlc291cmNlICJ7MH0iLgotTVNHX0VSUk9SX0ZJTEVfT1ZFUldSSVRFX0RJU0FCTEVEPUlXQUIwMTY0RSBDYW5ub3QgY3JlYXRlIHRoZSBmaWxlICJ7MX0iIHJlbGF0aXZlIHRvIHRoZSBwYXRoICJ7MH0iIGJlY2F1c2UgYXV0b21hdGljIGZpbGUgb3ZlcndyaXRpbmcgaGFzIG5vdCBiZWVuIGVuYWJsZWQuIERvIHlvdSB3YW50IHRvIGVuYWJsZSBpdCBmb3IgdGhpcyBmaWxlPwotTVNHX0VSUk9SX1VORVhQRUNURURfRVJST1I9SVdBQjAwMTRFIFVuZXhwZWN0ZWQgZXhjZXB0aW9uIG9jY3VycmVkLgotTVNHX0VSUk9SX0FOVF9EQVRBX1RSQU5TRk9STT1FeGNlcHRpb24gdHJhbnNmb3JtaW5nIEFudCBwcm9wZXJ0eSBrZXkgezB9IHVzaW5nIHRyYW5zZm9ybWF0aW9uIHsxfS4KLU1TR19FUlJPUl9BTlRfQ0FMTF9TRVRURVI9RXhjZXB0aW9uIGludm9raW5nIHNldHRlciBtZXRob2QgezB9IGZvciBBbnQgcHJvcGVydHkuCi1NU0dfRVJST1JfQU5UX0NNRF9GUkFHTUVOVD1FeGNlcHRpb24gcmV0cmlldmluZyBBbnQgY29tbWFuZCBmcmFnbWVudCBmcm9tIHJlZ2lzdHJ5LgotTVNHX0VSUk9SX0FOVF9TQ0VOQVJJT19UWVBFPUNhbm5vdCBkZXRlcm1pbmUgc2NlbmFyaW8gdHlwZS4gIFBsZWFzZSBlbnN1cmUgU2NlbmFyaW9UeXBlIEFudCBwcm9wZXJ0eSBpcyBzZXQuCi1NU0dfRVJST1JfQU5UX1JFUVVJUkVEX1BST1BFUlRZPVJlcXVpcmVkIHByb3BlcnR5IHswfSB3YXMgbm90IHNldCBpbiB0aGUgQW50IHByb3BlcnR5IGZpbGUuCi1NU0dfSU5GT19BTlRfX1BST1BFUlRZX0RFRkFVTFQ9UHJvcGVydHkgezB9IHdhcyBub3Qgc2V0IGluIHRoZSBBbnQgcHJvcGVydHkgZmlsZS4gIEEgZGVmYXVsdCB2YWx1ZSB3aWxsIGJlIHVzZWQuCi0KLUxBQkVMX1lFUz1ZZXMKLUxBQkVMX1lFU19UT19BTEw9WWVzIEFsbAotTEFCRUxfQ0FOQ0VMPUNhbmNlbAotCi0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9FbnZpcm9ubWVudE1lc3NhZ2VzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L0Vudmlyb25tZW50TWVzc2FnZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjY1NGYyZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L0Vudmlyb25tZW50TWVzc2FnZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnY7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotCi1wdWJsaWMgZmluYWwgY2xhc3MgRW52aXJvbm1lbnRNZXNzYWdlcyBleHRlbmRzIE5MUyB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSAib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LkVudmlyb25tZW50IjsvLyROT04tTkxTLTEkCi0KLQlwcml2YXRlIEVudmlyb25tZW50TWVzc2FnZXMoKSB7Ci0JCS8vIERvIG5vdCBpbnN0YW50aWF0ZQotCX0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9QQVRIX05PVF9BQlNPTFVURTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfUEFUSF9FTVBUWTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfUEFUSF9OT1RfRk9MREVSOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9GT0xERVJfQ1JFQVRJT05fRElTQUJMRUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1JFU09VUkNFX05PVF9GT0xERVI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX1dBUk5fRklMRV9PVkVSV1JJVEVfRElTQUJMRUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0ZJTEVfQ0hFQ0tPVVRfRElTQUJMRUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1JFU09VUkNFX05PVF9GSUxFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9GT0xERVJfSEFTX0NISUxEUkVOOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9JTzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfRklMRV9PVkVSV1JJVEVfRElTQUJMRUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1VORVhQRUNURURfRVJST1I7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0FOVF9EQVRBX1RSQU5TRk9STTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfQU5UX0NBTExfU0VUVEVSOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9BTlRfQ01EX0ZSQUdNRU5UOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9BTlRfU0NFTkFSSU9fVFlQRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfQU5UX1JFUVVJUkVEX1BST1BFUlRZOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19JTkZPX0FOVF9fUFJPUEVSVFlfREVGQVVMVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9ZRVM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfWUVTX1RPX0FMTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQUJFTF9DQU5DRUw7Ci0KLQlzdGF0aWMgewotCQlOTFMuaW5pdGlhbGl6ZU1lc3NhZ2VzKEJVTkRMRV9OQU1FLCBFbnZpcm9ubWVudE1lc3NhZ2VzLmNsYXNzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2FudC9BbnRDb250cm9sbGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2FudC9BbnRDb250cm9sbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2ZDI0YTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9hbnQvQW50Q29udHJvbGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDcyNiAgIDE1MTYxNCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA2MTAxMSAgIDE1OTI4MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgcHJvamVjdCBub3QgYXNzb2NpYXRlZCB0byBFQVIgd2hlbiB1c2luZyBhbnQgb24gY29tbWFuZC1saW5lCi0gKiAyMDA3MDUyMiAgIDE3Njk0MyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA3MDczMCAgIDE5NzE0NCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drLCBQYXNzIHByb2dyZXNzIG1vbml0b3IgdG8gdW5kbyBjb21tYW5kcy4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5hbnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuRW52aXJvbm1lbnRNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29udGV4dC5QZXJzaXN0ZW50UmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLkNvbW1hbmRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuVHJhbnNpZW50UmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YUZsb3dNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkZyYWdtZW50TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuQmFzZVN0YXR1c0hhbmRsZXI7Ci0KLS8qKgotICogCi0gKiBDZW50cmFsIHBvaW50IG9mIGNvbnRyb2wgZm9yIHdlYiBzZXJ2aWNlIEFudCB0YXNrcy4KLSAqIENvbnN0cnVjdHMgQW50IGVudmlyb25tZW50LCByb290IGZyYWdtZW50IGFuZCBjb21tYW5kIG1hbmFnZXIuICBTdGFydHMgZXhlY3V0aW9uIG9mIHRoZSBjb21tYW5kIHN0YWNrLgotICogCi0gKiBAYXV0aG9yIGpvYW4KLSAqCi0gKi8KLQotcHVibGljIGNsYXNzIEFudENvbnRyb2xsZXIgCi17CQotICAgcHJpdmF0ZSBBbnRPcGVyYXRpb25NYW5hZ2VyIG9wZXJhdGlvbk1hbmFnZXJfOwotICAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICAgIGVycm9yTWVzc2FnZV8gPSBudWxsOwotICAgcHJpdmF0ZSBBbnRFbnZpcm9ubWVudCAgICAgIGVudmlyb25tZW50XzsKLQkKLSAgIHB1YmxpYyBBbnRDb250cm9sbGVyKEhhc2h0YWJsZSBwcm9wZXJ0aWVzKQotICAgewotCSAgIC8vIGNvbnN0cnVjdCB0aGUgZW52aXJvbm1lbnQgLSBwYXNzaW5nIGluIHRoZSBwcm9wZXJ0eSB0YWJsZQkgICAKLQkgICAvLyAtLW1haW50YWlucyBsaW5rIHRvIHByb3BlcnR5IHRhYmxlIHBsdXMgYW55IG90aGVyIGVudmlyb25tZW50IHByb3BlcnRpZXMKLQkgICAvLyAtLWNvZGUgdG8gYWNjZXNzIGV4dGVuc2lvbiBwb2ludCBtYXBwaW5ncyBmb3Igb3BlcmF0aW9ucyB0byByZXRyaWV2ZSBkYXRhIGZyb20gcHJvcGVydHkgdGFibGUKLQkgICBUcmFuc2llbnRSZXNvdXJjZUNvbnRleHQgIHJlc291cmNlQ29udGV4dCA9IChUcmFuc2llbnRSZXNvdXJjZUNvbnRleHQpUGVyc2lzdGVudFJlc291cmNlQ29udGV4dC5nZXRJbnN0YW5jZSgpLmNvcHkoKTsKLQkgICBBbnRTdGF0dXNIYW5kbGVyICAgICAgICAgIGhhbmRsZXIgICAgICAgICA9IG5ldyBBbnRTdGF0dXNIYW5kbGVyKCk7Ci0gICAgIAotCSAgIGVudmlyb25tZW50XyA9IG5ldyBBbnRFbnZpcm9ubWVudCh0aGlzLCByZXNvdXJjZUNvbnRleHQsIGhhbmRsZXIsIHByb3BlcnRpZXMpOwotICAgICAgIAotCSAgIC8vIGNvbnN0cnVjdCBkYXRhIG1hbmFnZXIgZm9yIG1haW50YWluaW5nIHN0YXRlIGFjcm9zcyBvcGVyYXRpb25zCi0JICAgRGF0YUZsb3dNYW5hZ2VyIGRhdGFNYW5hZ2VyID0gbmV3IERhdGFGbG93TWFuYWdlciggbmV3IERhdGFNYXBwaW5nUmVnaXN0cnlJbXBsKCksIGVudmlyb25tZW50XyApOwotICAgICAgIAotCSAgIC8vICBzZXQgdXAgb3BlcmF0aW9uIGZyYWdtZW50cyAtIGNvbmRpdGlvbmFsIG9uIG9wdGlvbnMgYnkgdXNlci4uLiBzZXJ2aWNlIG9yIGNsaWVudAotCSAgIC8vICBhbHNvIG5lZWQgdG8gaW5pdGlhbGl6ZSB0aGUgInNlbGVjdGlvbiIgb3IgaW5wdXQgZmlsZSAoV1NETCwgSmF2YSkgaGVyZQotCSAgIAotCSAgIENvbW1hbmRGcmFnbWVudCByb290RnJhZ21lbnQgPSAgZW52aXJvbm1lbnRfLmdldFJvb3RDb21tYW5kRnJhZ21lbnQoKTsKLQkgICAKLQkgICBpZiAocm9vdEZyYWdtZW50ICE9IG51bGwpCi0JICAgewkJICAgCi0JICAgICAgIC8vY29uc3RydWN0IHRoZSBlbmdpbmUgLSBtYW5hZ2VzIGV4ZWN1dGlvbiBvZiBvcGVyYXRpb25zCi0JCSAgIGNyZWF0ZU9wZXJhdGlvbk1hbmFnZXIoIHJvb3RGcmFnbWVudCwgZGF0YU1hbmFnZXIsIGVudmlyb25tZW50XyApOwotCQkgICAKLQkJICAgRGF0YU1hcHBpbmdSZWdpc3RyeUltcGwgICAgZGF0YVJlZ2lzdHJ5XyAgID0gbmV3IERhdGFNYXBwaW5nUmVnaXN0cnlJbXBsKCk7Ci0JCSAgIHJvb3RGcmFnbWVudC5yZWdpc3RlckRhdGFNYXBwaW5ncyhkYXRhUmVnaXN0cnlfKTsJCSAgIAotCSAgIH0KLQkgICBlbHNlICAvL3Byb2JsZW0gZ2V0dGluZyB0aGUgcm9vdCBmcmFnbWVudCAtIHNjZW5hcmlvIHR5cGUgaXMgbGlrZWx5IG1pc3NpbmcKLQkgICB7Ci0gICAgICAgZXJyb3JNZXNzYWdlXyA9IEVudmlyb25tZW50TWVzc2FnZXMuTVNHX0VSUk9SX0FOVF9TQ0VOQVJJT19UWVBFOwotCQkgICBoYW5kbGVyLnJlcG9ydEVycm9yKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgIndzX2FudCIsIDk5OTksIGVycm9yTWVzc2FnZV8sIG51bGwpKTsKLQkJICAgcmV0dXJuOwotCSAgIH0KLQkgICAgICAKLQkgICAvL3JlYWR5IHRvIHN0YXJ0IHJ1bm5pbmcgb3BlcmF0aW9ucwotCSAgIElQcm9ncmVzc01vbml0b3IgbnVsbE1vbml0b3IgPSBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpOwotCSAgIAotIAkgICBvcGVyYXRpb25NYW5hZ2VyXy5tb3ZlRm9yd2FyZFRvTmV4dFN0b3AoIG51bGxNb25pdG9yICk7Ci0KLSAgICAgSVN0YXR1cyBsYXN0U3RhdHVzID0gb3BlcmF0aW9uTWFuYWdlcl8uZ2V0TGFzdFN0YXR1cygpOwotICAgICAKLSAJICAgaWYgKCAhbGFzdFN0YXR1cy5pc09LKCkgKSAKLSAgICAgewotICAgICAgIGVycm9yTWVzc2FnZV8gPSBsYXN0U3RhdHVzLmdldE1lc3NhZ2UoKTsKLSAJCSAgIG9wZXJhdGlvbk1hbmFnZXJfLnVuZG9Ub0xhc3RTdG9wKCBudWxsTW9uaXRvciApOwotICAgICB9Ci0gICB9Ci0gICAKLSAgIHB1YmxpYyBTdHJpbmcgZ2V0RXJyb3JNZXNzYWdlKCkKLSAgIHsKLSAgICAgcmV0dXJuIGVycm9yTWVzc2FnZV87ICAKLSAgIH0KLSAgIAotICAgcHJpdmF0ZSB2b2lkIGNyZWF0ZU9wZXJhdGlvbk1hbmFnZXIoQ29tbWFuZEZyYWdtZW50IGZyYWcsIERhdGFGbG93TWFuYWdlciBtZ3IsIEFudEVudmlyb25tZW50IGVudikKLSAgIHsJCSAgIAotCQkgICBvcGVyYXRpb25NYW5hZ2VyXyA9IG5ldyBBbnRPcGVyYXRpb25NYW5hZ2VyKGZyYWcsIG1nciwgZW52KTsJCQkKLQkKLQkJICAgb3BlcmF0aW9uTWFuYWdlcl8uc2V0UGVla0ZyYWdtZW50TGlzdGVuZXIoIAotCQkJCSAgICAgIG5ldyBGcmFnbWVudExpc3RlbmVyKCkKLQkJCQkgICAgICB7Ci0JCQkJICAgICAgICBwdWJsaWMgIGJvb2xlYW4gbm90aWZ5KCBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQgKQotCQkJCSAgICAgICAgewotCQkJCSAgICAgICAgICByZXR1cm4gcGVla0ZyYWdtZW50KCBmcmFnbWVudCApOwotCQkJCSAgICAgICAgfQotCQkJCSAgICAgIH0gKTsgIAotCQkJCSAgICAgICAgICAgICAgICAgIAotCQkgICBvcGVyYXRpb25NYW5hZ2VyXy5zZXROZXh0RnJhZ21lbnRMaXN0ZW5lciggCi0JCQkJICAgICAgbmV3IEZyYWdtZW50TGlzdGVuZXIoKQotCQkJCSAgICAgIHsKLQkJCQkgICAgICAgIHB1YmxpYyAgYm9vbGVhbiBub3RpZnkoIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCApCi0JCQkJICAgICAgICB7Ci0JCQkJICAgICAgICAgIHJldHVybiBuZXh0RnJhZ21lbnQoIGZyYWdtZW50ICk7Ci0JCQkJICAgICAgICB9Ci0JCQkJICAgICAgfSApOyAgCi0JCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotCQkgICBvcGVyYXRpb25NYW5hZ2VyXy5zZXRVbmRvRnJhZ21lbnRMaXN0ZW5lcigKLQkJCQkgICAgICBuZXcgRnJhZ21lbnRMaXN0ZW5lcigpCi0JCQkJICAgICAgewotCQkJCSAgICAgICAgcHVibGljIGJvb2xlYW4gbm90aWZ5KCBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQgKQotCQkJCSAgICAgICAgewotCQkJCSAgICAgICAgICByZXR1cm4gdW5kb0ZyYWdtZW50KCBmcmFnbWVudCApOwotCQkJCSAgICAgICAgfQotCQkJCSAgICAgIH0gKTsKLSAgICAgICAKLSAgICAgICBvcGVyYXRpb25NYW5hZ2VyXy5zZXRBZnRlckV4ZWN1dGVGcmFnbWVudExpc3RlbmVyKAotICAgICAgICAgICAgbmV3IEZyYWdtZW50TGlzdGVuZXIoKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBub3RpZnkoIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCApCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYWZ0ZXJFeGVjdXRlTmV4dEZyYWdtZW50KCBmcmFnbWVudCApOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9ICk7Ci0gICB9Ci0JCi0JcHJvdGVjdGVkIENvbW1hbmRNYW5hZ2VyIGdldE9wZXJhdGlvbk1hbmFnZXIoKQotCXsKLQkJcmV0dXJuIG9wZXJhdGlvbk1hbmFnZXJfOwotCX0KLQkKLQkvKioKLQkgICAqIFRoZSBDb21tYW5kRnJhZ21lbnRFbmdpbmUgY2FsbHMgdGhpcyBtZXRob2Qgd2hlbiBpdCBpcyBwZWVraW5nIGZvcndhcmQKLQkgICAqIGluIHRoZSBmcmFnbWVudHMuICBXaGVuIHBlZWtpbmcgZm9yd2FyZCB0aGUgY29tbWFuZCBzdGFjayBzdGF0ZSBpbiB0aGUKLQkgICAqIGVuZ2luZSBpcyBub3QgY2hhbmdlcy4KLQkgICAqIAotCSAgICogCi0JICAgKiBAcGFyYW0gZnJhZ21lbnQgdGhlIGZyYWdtZW50IHRoYXQgaXQgaXMgcGVla2luZyBhdC4KLQkgICAqIEByZXR1cm4gSW5kaWNhdGVzIHdoZXRoZXIgcGVla2luZyBzaG91bGQgc3RvcCBvciBub3QuCi0JICAgKi8KLQkgIHByb3RlY3RlZCBib29sZWFuIHBlZWtGcmFnbWVudCggQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50ICkKLQkgIHsgICAgIAotCSAgICByZXR1cm4gdHJ1ZTsKLQkgIH0KLQkgIAotCSAgLyoqCi0JICAgKiBUaGUgQ29tbWFuZEZyYWdtZW50RW5naW5lIGNhbGxzIHRoaXMgbWV0aG9kIHdoZW4gaXQgaXMgbW92aW5nIGZvcndhcmQKLQkgICAqIGluIHRoZSBmcmFnbWVudHMuICAgV2hlbiBtb3ZpbmcgZm9yd2FyZCB0aGUgY29tbWFuZCBzdGFjayBzdGF0ZSBpcyBzYXZlZAotCSAgICogYXQgZWFjaCBmcmFnbWVudCBpcyB0cmF2ZXJzZWQuCi0JICAgKiAKLQkgICAqIEBwYXJhbSBmcmFnbWVudCB0aGUgZnJhZ21lbnQgdGhhdCBpcyBiZWluZyB0cmF2ZXJzZWQuCi0JICAgKiBAcmV0dXJuIGluZGljYXRlcyBpZiB0aGUgZm9yd2FyZCB0cmF2ZXJzYWwgc2hvdWxkIGNvbnRpbnVlLiAgCi0JICAgKi8KLQkgIHByb3RlY3RlZCBib29sZWFuIG5leHRGcmFnbWVudCggQ29tbWFuZEZyYWdtZW50IGZyYWdtZW50ICkKLQkgIHsgICAgIAotCSAgICByZXR1cm4gdHJ1ZTsKLQkgIH0KLQkgIAotCSAgLyoqCi0JICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgZm9yIGVhY2ggZnJhZ21lbnQgd2hlbiB0aGUgY29tbWFuZCBlbmdpbmUgaXMgdW53aW5kaW5nCi0JICAgKiBpdHMgc3RhY2sgZHVyaW5nIGFuIHVuZG8gb3BlcmF0aW9uLgotCSAgICogCi0JICAgKiBAcGFyYW0gZnJhZ21lbnQgIHRoZSBmcmFnbWVudCBiZWluZyB1bmRvbmUuCi0JICAgKiBAcmV0dXJuIHJldHVybnMgdHJ1ZSBpZiB0aGUgdW5kbyBwcm9jZXNzIHNob3VsZCBjb250aW51ZS4KLQkgICAqLwotCSAgcHJvdGVjdGVkIGJvb2xlYW4gdW5kb0ZyYWdtZW50KCBDb21tYW5kRnJhZ21lbnQgZnJhZ21lbnQgKQotCSAgeyAgCSAgCQotCSAgICByZXR1cm4gdHJ1ZTsKLQkgIH0KLSAgICAKLSAgICBwcm90ZWN0ZWQgYm9vbGVhbiBhZnRlckV4ZWN1dGVOZXh0RnJhZ21lbnQoIENvbW1hbmRGcmFnbWVudCBmcmFnbWVudCApCi0gICAgewotICAgICAgYm9vbGVhbiAgICAgICAgICAgY29udGludWVFeGVjdXRlID0gdHJ1ZTsKLSAgICAgIEJhc2VTdGF0dXNIYW5kbGVyIHN0YXR1c0hhbmRsZXIgICA9IChCYXNlU3RhdHVzSGFuZGxlcillbnZpcm9ubWVudF8uZ2V0U3RhdHVzSGFuZGxlcigpOwotICAgICAgSVN0YXR1cyAgICAgICAgICAgY29tbWFuZFN0YXR1cyAgID0gb3BlcmF0aW9uTWFuYWdlcl8uZ2V0TGFzdFN0YXR1cygpOwotICAgICAgSVN0YXR1cyAgICAgICAgICAgaGFuZGxlclN0YXR1cyAgID0gc3RhdHVzSGFuZGxlci5nZXRTdGF0dXMoKTsKLSAgICAgIAotICAgICAgaWYoIGNvbW1hbmRTdGF0dXMuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLkVSUk9SICYmCi0gICAgICAgICAgaGFuZGxlclN0YXR1cy5nZXRTZXZlcml0eSgpICE9IElTdGF0dXMuRVJST1IgKQotICAgICAgewotICAgICAgICAvLyBUaGUgY29tbWFuZCByZXR1cm5lZCBhbiBlcnJvciBzdGF0dXMgZm9yIHRoZSBlbmdpbmUgdG8gc3RvcCwKLSAgICAgICAgLy8gYnV0IHRoZSBzdGF0dXMgaGFuZGxlciBkaWQgbm90IGhhdmUgcmVwb3J0IGFuZCBlcnJvci4KLSAgICAgICAgLy8gVGhlcmVmb3JlLCB3ZSB3aWxsIHJlcG9ydCB0aGlzIHN0YXR1cyByZXR1cm5lZCBieSB0aGUgY29tbWFuZAotICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIG1lc3NhZ2UgdG8gZGlzcGxheS4gIAotICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gY29tbWFuZFN0YXR1cy5nZXRNZXNzYWdlKCk7Ci0gICAgICAgIAotICAgICAgICBpZiggZXJyb3JNZXNzYWdlICE9IG51bGwgJiYgZXJyb3JNZXNzYWdlLmxlbmd0aCgpID4gMCApCi0gICAgICAgIHsKLSAgICAgICAgICBzdGF0dXNIYW5kbGVyLnJlcG9ydEVycm9yKCBjb21tYW5kU3RhdHVzICk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UgaWYoIGNvbW1hbmRTdGF0dXMuZ2V0U2V2ZXJpdHkoKSAhPSBJU3RhdHVzLkVSUk9SICYmCi0gICAgICAgICAgICAgICBoYW5kbGVyU3RhdHVzLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5FUlJPUiApCi0gICAgICB7Ci0gICAgICAgIC8vIFRoZSBsYXN0IGNvbW1hbmQgZGlkbid0IHJldHVybiBhbiBlcnJvciwgYnV0IHRoZSBzdGF0dXMgaGFuZGxlcgotICAgICAgICAvLyBkaWQgcmVwb3J0IGFuZCBlcnJvci4gIFRoZXJlZm9yZSwgd2Ugc2hvdWxkIHN0b3AuCi0gICAgICAgIGVycm9yTWVzc2FnZV8gPSBoYW5kbGVyU3RhdHVzLmdldE1lc3NhZ2UoKTsKLSAgICAgICAgY29udGludWVFeGVjdXRlID0gZmFsc2U7ICAgCi0gICAgICB9Ci0gICAgICAKLSAgICAgIHJldHVybiBjb250aW51ZUV4ZWN1dGU7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9hbnQvQW50RW52aXJvbm1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvYW50L0FudEVudmlyb25tZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiMTI1ZWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9hbnQvQW50RW52aXJvbm1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU4OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA1MjMgICAxMzM3MTQgam9hbkBjYS5pYm0uY29tIC0gSm9hbiBIYWdnYXJ0eQotICogMjAwNjA3MjYgICAxNTE2MTQgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNzAzMTQgICAxNzY4ODYgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5hbnQ7Ci0KLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5Db25zdHJ1Y3RvcjsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTW9kaWZpZXI7Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuRW52aXJvbm1lbnRNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5Db21tYW5kTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0LlRyYW5zaWVudFJlc291cmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkJlYW5Nb2RpZmllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5kYXRhLkNsYXNzRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5UcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuRWNsaXBzZUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLklFY2xpcHNlU3RhdHVzSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYucGx1Z2luLkVudlBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklMb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotLyoqCi0gKiAKLSAqIEFjY2VzcyB0byBzdGF0dXMgaGFuZGxlciwgbG9nLCByZXNvdXJjZSBjb250ZXh0IGFuZCBjb21tYW5kIG1hbmFnZXIuICAKLSAqIEluaXRpYWxpemVzIGRhdGEgZm9yIGNvbW1hbmRzIGZyb20gQW50IHByb3BlcnR5IGZpbGVzIGJhc2VkIG9uIGFudERhdGFNYXBwaW5nIGV4dGVuc2lvbnMuIAotICogCi0gKiBAYXV0aG9yIGpvYW4KLSAqCi0gKi8KLQotcHVibGljIGNsYXNzIEFudEVudmlyb25tZW50IGV4dGVuZHMgRWNsaXBzZUVudmlyb25tZW50ewotCQotCXByaXZhdGUgSGFzaHRhYmxlIGFudFByb3BlcnRpZXNfOwotCXByaXZhdGUgSGFzaHRhYmxlIG9wZXJhdGlvbkRhdGFSZWNvcmRfID0gbmV3IEhhc2h0YWJsZSgpOwotCXByaXZhdGUgYm9vbGVhbiBtYXBwaW5nQ29tcGxldGVfOwotCXByaXZhdGUgQ2xhc3NFbnRyeSBjbGFzc0VudHJ5OwkKLQkJCi0JLy8gZXh0ZW5zaW9uUG9pbnQgbmFtZXMgYW5kIG5hbWVzcGFjZQotCXByaXZhdGUgc3RhdGljIFN0cmluZyBNQVBQRVJfRVhUX1BUID0gImFudERhdGFNYXBwaW5nIjsgIC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgU0NFTkFSSU9fRVhUX1BUID0gImFudFNjZW5hcmlvIjsgIC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgRVhUX1BUX05BTUVTUEFDRSA9ICJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYiOyAvLy8vJE5PTi1OTFMtMSQKLQkKLQkvLyBhbnREYXRhTWFwcGluZyBleHRlbnNpb24gcG9pbnQgYXR0cmlidXRlcwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBNQVBQRVJfT1BFUkFUSU9OX0FUVFJJQlVURT0gIm9wZXJhdGlvbiI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUFQUEVSX0tFWV9BVFRSSUJVVEU9ICJrZXkiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE1BUFBFUl9QUk9QRVJUWV9BVFRSSUJVVEU9ICJwcm9wZXJ0eSI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUFQUEVSX1RSQU5TRk9STV9BVFRSSUJVVEU9ICJ0cmFuc2Zvcm0iOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE1BUFBFUl9SRVFVSVJFRF9BVFRSSUJVVEU9ICJyZXF1aXJlZCI7IC8vJE5PTi1OTFMtMSQKLQkJCi0JLy8gYW50U2NlbmFyaW8gZXh0ZW5zaW9uIHBvaW50IGF0dHJpYnV0ZXMKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0NFTkFSSU9fVFlQRV9BVFRSSUJVVEUgPSAic2NlbmFyaW9UeXBlIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTQ0VOQVJJT19DTEFTU19BVFRSSUJVVEUgPSAiY2xhc3MiOyAvLyROT04tTkxTLTEkCi0KLQkvLyBBbnQgcHJvcGVydHkgSURzCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFZFUkJPU0VfUFJPUEVSVFkgPSAiVmVyYm9zZSI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgT1ZFUldSSVRFX1BST1BFUlRZID0gIk92ZXJ3cml0ZUZpbGVzRW5hYmxlZCI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ1JFQVRFRk9MREVSX1BST1BFUlRZID0gIkNyZWF0ZUZvbGRlcnNFbmFibGVkIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDSEVDS09VVF9QUk9QRVJUWSA9ICJDaGVja291dEZpbGVzRW5hYmxlZCI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0NFTkFSSU9fVFlQRV9QUk9QRVJUWSA9ICJTY2VuYXJpb1R5cGUiOyAvLyROT04tTkxTLTEkCi0JCi0gICAgcHJpdmF0ZSBBbnRDb250cm9sbGVyIGNvbnRyb2xsZXJfOwotCQotCXB1YmxpYyBBbnRFbnZpcm9ubWVudChBbnRDb250cm9sbGVyIGNvbnRyb2xsZXIsIFRyYW5zaWVudFJlc291cmNlQ29udGV4dCBjb250ZXh0LCBJRWNsaXBzZVN0YXR1c0hhbmRsZXIgaGFuZGxlciwgSGFzaHRhYmxlIHByb3BlcnRpZXMpCi0JewotCSAgIHN1cGVyKGNvbnRyb2xsZXIuZ2V0T3BlcmF0aW9uTWFuYWdlcigpLCBjb250ZXh0LCBoYW5kbGVyKTsKLQkgICBhbnRQcm9wZXJ0aWVzXyA9IHByb3BlcnRpZXM7CQotCSAgIGNvbnRyb2xsZXJfID0gY29udHJvbGxlcjsJCi0JICAgc2V0Q29udGV4dCggY29udGV4dCApOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgc2V0Q29udGV4dChUcmFuc2llbnRSZXNvdXJjZUNvbnRleHQgY29udGV4dCkgCi0JewotCSAgQm9vbGVhbiBvdmVyd3JpdGVTZXQgICAgPSBnZXRCb29sZWFuUHJvcGVydHkoIE9WRVJXUklURV9QUk9QRVJUWSApOwotCSAgQm9vbGVhbiBjcmVhdGVmb2xkZXJTZXQgPSBnZXRCb29sZWFuUHJvcGVydHkoIENSRUFURUZPTERFUl9QUk9QRVJUWSApOwotCSAgQm9vbGVhbiBjaGVja291dFNldCAgICAgPSBnZXRCb29sZWFuUHJvcGVydHkoIENIRUNLT1VUX1BST1BFUlRZICk7Ci0JICAKLQkgIGlmKCBvdmVyd3JpdGVTZXQgIT0gbnVsbCApIGNvbnRleHQuc2V0T3ZlcndyaXRlRmlsZXNFbmFibGVkKCBvdmVyd3JpdGVTZXQuYm9vbGVhblZhbHVlKCkgKTsKLQkgIGlmKCBjcmVhdGVmb2xkZXJTZXQgIT0gbnVsbCApIGNvbnRleHQuc2V0Q3JlYXRlRm9sZGVyc0VuYWJsZWQoIGNyZWF0ZWZvbGRlclNldC5ib29sZWFuVmFsdWUoKSApOwotCSAgaWYoIGNoZWNrb3V0U2V0ICE9IG51bGwgKSBjb250ZXh0LnNldENoZWNrb3V0RmlsZXNFbmFibGVkKCBjaGVja291dFNldC5ib29sZWFuVmFsdWUoKSApOwotCX0KLQotCXB1YmxpYyBib29sZWFuIHZlcmJvc2UoKQotCXsKLQkgIEJvb2xlYW4gcmVzdWx0ID0gZ2V0Qm9vbGVhblByb3BlcnR5KCBWRVJCT1NFX1BST1BFUlRZICk7Ci0JICAKLQkgIHJldHVybiByZXN1bHQgPT0gbnVsbCA/IGZhbHNlIDogcmVzdWx0LmJvb2xlYW5WYWx1ZSgpOwotCX0KLQkKLQlwdWJsaWMgQm9vbGVhbiBnZXRCb29sZWFuUHJvcGVydHkoIFN0cmluZyBwcm9wZXJ0eSApCi0JewotCSAgU3RyaW5nICB2YWx1ZSAgPSBnZXRQcm9wZXJ0eSggcHJvcGVydHkgKTsJCi0JICBCb29sZWFuIHJlc3VsdCA9IG51bGw7Ci0JCSAgCi0JICBpZiggdmFsdWUgIT0gbnVsbCApCi0JICB7Ci0JCXZhbHVlID0gdmFsdWUudG9Mb3dlckNhc2UoKTsKLQkJcmVzdWx0ID0gbmV3IEJvb2xlYW4oIHZhbHVlLmVxdWFscyggInRydWUiKSApOwotCSAgfQotCSAgCi0JICByZXR1cm4gcmVzdWx0OwotCX0KLQkKLQkvLyByZXR1cm5zIFN0cmluZyBzaW5jZSB0aGUgcHJvcGVydHkgdGFibGUgYnVpbHQgYnkgQW50IGlzIHByb3BlcnR5IHZhbHVlIHBhaXJzIHdoZXJlIHRoZSB2YWx1ZSBpcyBhIFN0cmluZwotCXByaXZhdGUgU3RyaW5nIGdldFByb3BlcnR5KFN0cmluZyBrZXkpCi0JewotCQlPYmplY3QgcHJvcGVydHkgPSBhbnRQcm9wZXJ0aWVzXy5nZXQoa2V5KTsKLQkJaWYgKHByb3BlcnR5ICE9IG51bGwgJiYgKCFwcm9wZXJ0eS50b1N0cmluZygpLmVxdWFscygiIikpKQotCQkJcmV0dXJuIHByb3BlcnR5LnRvU3RyaW5nKCkudHJpbSgpOwotCQlyZXR1cm4gbnVsbDsKLQl9Ci0JCi0JLy8gY2FsbCBmcm9tIGVuZ2luZSBwcmlvciB0byBleGVjdXRpbmcgdGhlIG9wZXJhdGlvbiAKLQlwdWJsaWMgSVN0YXR1cyBpbml0T3BlcmF0aW9uRGF0YShBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiBvcCkKLQl7Ci0JCS8vY2hlY2sgdG8gc2VlIGlmIGRhdGEgaGFzIGFscmVhZHkgYmVlbiBwcmltZWQgZm9yIHRoaXMgb3BlcmF0aW9uIAotCQlTdHJpbmcgcXVhbGlmaWVkQ2xhc3NOYW1lID0gb3AuZ2V0Q2xhc3MoKS5nZXROYW1lKCk7Ci0JCWlmIChvcGVyYXRpb25EYXRhUmVjb3JkXy5nZXQocXVhbGlmaWVkQ2xhc3NOYW1lKSA9PSBudWxsKQotCQl7Ci0JCQljbGFzc0VudHJ5ID0gbmV3IENsYXNzRW50cnkoKTsKLQkJCQotCQkJdHJ5IHsKLQkJCQkvL2V4dGVuc2lvbiBsb29rdXAgZm9yIHRoZSBiZWFuIC0gbWF5IGJlIG1vcmUgdGhhbiBvbmUgcHJvcGVydHkgZm9yIGl0Ci0JCQkJRW51bWVyYXRpb24gb3BlcmF0aW9uRGF0YSA9IGdldE1hcHBpbmdFeHRlbnNpb25zKG9wKTsJCQkJCQotCQkJCWNsYXNzRW50cnkuc2V0dGVyTGlzdF89IGdldFNldHRlckxpc3Qob3ApOwkJCi0JCQkJd2hpbGUgKG9wZXJhdGlvbkRhdGEuaGFzTW9yZUVsZW1lbnRzKCkpCi0JCQkJewkJCQkKLQkJCQkJUHJvcGVydHlEYXRhSG9sZGVyIG1hcHBpbmcgPSAoUHJvcGVydHlEYXRhSG9sZGVyKW9wZXJhdGlvbkRhdGEubmV4dEVsZW1lbnQoKTsKLQkJCQkJCQotCQkJCQkgICAgbWFwcGluZ0NvbXBsZXRlXyA9IGZhbHNlOwotCQkJCQkJU3RyaW5nIHByb3BlcnR5ID0gbWFwcGluZy5wcm9wZXJ0eV87Ci0JCQkJCQlTdHJpbmcgc2V0dGVyTWV0aG9kTmFtZSA9IGNyZWF0ZVNldHRlck5hbWUocHJvcGVydHkpOwkJCi0JCQkJCQkJCQkJCQkKLQkJCQkJCWludCBzdGVwID0gMTsKLQkJCQkJCXdoaWxlICghbWFwcGluZ0NvbXBsZXRlXykKLQkJCQkJCXsJCQkJCQkJCi0JCQkJCQkgICBzd2l0Y2ggKHN0ZXApIHsKLQkJCQkJCQljYXNlIDE6Ci0JCQkJCQkJCW1hcHBpbmdDb21wbGV0ZV8gPSB0cmFuc2Zvcm1BbmRTZXQobWFwcGluZywgc2V0dGVyTWV0aG9kTmFtZSk7CQkJCQkJCQkKLQkJCQkJCQkJYnJlYWs7CQkJCQkJCQkKLQkJCQkJCQljYXNlIDI6Ci0JCQkJCQkJCW1hcHBpbmdDb21wbGV0ZV8gPSBjYWxsU2V0dGVyKG1hcHBpbmcub3BlcmF0aW9uXywgbWFwcGluZy52YWx1ZV8sIHNldHRlck1ldGhvZE5hbWUpOwotCQkJCQkJCQlicmVhazsKLQkJCQkJCQkJCi0JCQkJCQkJY2FzZSAzOgotCQkJCQkJCQltYXBwaW5nQ29tcGxldGVfID0gY2FsbFByaW1pdGl2ZVNldHRlcihtYXBwaW5nKTsKLQkJCQkJCQkJYnJlYWs7Ci0JCQkJCQkJCi0JCQkJCQkJY2FzZSA0OgotCQkJCQkJCQltYXBwaW5nQ29tcGxldGVfID0gY2FsbFNldHRlckNvbnN0cnVjdG9yKG1hcHBpbmcpOwotCQkJCQkJCQlicmVhazsKLQkJCQkJCQkJCi0JCQkJCQkJZGVmYXVsdDoKLQkJCQkJCQkJbWFwcGluZ0NvbXBsZXRlXyA9IHRydWU7Ci0JCQkJCQkJCWJyZWFrOwkJCQkJCQkJCi0JCQkJCQkJfQotCQkJCQkJICAgc3RlcCsrOwotCQkJCQkJfQkJCQkJCi0JCQkJICB9CQkJCQotICAgICAgICAgICAgICAgIC8vYWRkIG9wZXJhdGlvbiB0byB0aGUgcmVjb3JkIC0gbm8gbmVlZCB0byBpbml0aWFsaXplIGFnYWluLi4uCi0gICAgICAgICAgICAgICAgb3BlcmF0aW9uRGF0YVJlY29yZF8ucHV0KHF1YWxpZmllZENsYXNzTmFtZSwgIiIpOwotCQkJfQkJCQotCQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKQotCQkJewkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLQkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQotCQl9Ci0JCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgc2V0dGVyIG5hbWUgYmFzZWQgb24gdGhlIHByb3BlcnR5IHBhc3NlZCBpbi4gIElmIHRoZSAKLQkgKiBwcm9wZXJ0eSBoYXMgYW55IGxlYWRpbmcgcXVhbGlmaWVycyB0aGV5IGFyZSBzdHJpcHBlZCBvZmYuCi0JICogVGhlIHByb3BlcnR5IGlzIGNhcGl0YWxpemVkIGFuZCBzZXQgaXMgcHJlcGVuZGVkLgotCSAqIEBwYXJhbSBwcm9wZXJ0eSAgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRoYXQgcmVxdWlyZXMgYSBzZXR0ZXIuCi0JICogQHJldHVybgotCSAqLwkKLQlwcml2YXRlIFN0cmluZyBjcmVhdGVTZXR0ZXJOYW1lKFN0cmluZyBwcm9wZXJ0eSkKLQl7CQkKLQkJd2hpbGUgKHByb3BlcnR5LmluZGV4T2YoIi4iKT49MCkKLQkJewotCQkJcHJvcGVydHk9cHJvcGVydHkuc3Vic3RyaW5nKHByb3BlcnR5LmluZGV4T2YoIi4iKSsxKTsKLQkJfQkJIAotCQkgU3RyaW5nIGZpcnN0Q2hhciA9IHByb3BlcnR5LnN1YnN0cmluZygwLDEpOwotCQkgZmlyc3RDaGFyID0gZmlyc3RDaGFyLnRvVXBwZXJDYXNlKCk7Ci0JCSBwcm9wZXJ0eSA9IGZpcnN0Q2hhciArIHByb3BlcnR5LnN1YnN0cmluZygxKTsgIAotCQkgU3RyaW5nIHNldHRlck5hbWUgPSAic2V0IiArIHByb3BlcnR5OwkJIAotCQkgcmV0dXJuIHNldHRlck5hbWU7CQkgCi0JfQkKLQkKLQkgICAvKioKLQkgICAgKiBSZXRyaWV2ZXMgZXh0ZW5zaW9ucyBmb3IgdGhlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudiBhbnREYXRhTWFwcGluZwotCSAgICAqIGV4dGVuc2lvbiBwb2ludC4gIEV4dHJhY3RzIHRob3NlIHRoYXQgd2l0aCBjbGFzcyBhdHRyaWJ1dGUgdmFsdWVzIHRoYXQgbWF0Y2ggb3BlcmF0aW9uTmFtZS4KLQkgICAgKiBBbGwgbWFwcGluZ3MgYXJlIGNvbnZlcnRlZCB0byBQcm9wZXJ0eURhdGFIb2xkZXIgb2JqZWN0cy4KLQkgICAgKiBBbnkgbToxIEFudCBrZXkgdG8gcHJvcGVydHkgbWFwcGluZ3MgYXJlIGNvbGxlY3RlZCBpbnRvIGEga2V5LXZhbHVlIG1hcCB3aXRoaW4KLQkgICAgKiBhIHNpbmdsZSBQcm9wZXJ0eURhdGFIb2xkZXIuICAKLQkgICAgKiBAcGFyYW0gb3BlcmF0aW9uTmFtZSBUaGUgbmFtZSBvZiB0aGUgb3BlcmF0aW9uIHRoYXQgaXMgYmVpbmcgaW5pdGlhbGl6ZWQuCi0JICAgICogQHJldHVybiBBIGNvbGxlY3Rpb24gb2YgUHJvcGVydHlEYXRhSG9sZGVyIG9iamVjdHMuIFJldHVybnMgbnVsbCBpZiB0aGVyZSBhcmUgbm8gZXh0ZW5zaW9ucyBtYXRjaGluZyB0aGUgb3BlcmF0aW9uTmFtZS4KLQkgICAgKi8KLQkgICBwcml2YXRlIEVudW1lcmF0aW9uIGdldE1hcHBpbmdFeHRlbnNpb25zKEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIG9wZXJhdGlvbikgdGhyb3dzIENvcmVFeGNlcHRpb24KLQkgICB7CSAgIAkJICAgCi0JCSAgIFN0cmluZyBvcGVyYXRpb25OYW1lID0gb3BlcmF0aW9uLmdldENsYXNzKCkuZ2V0TmFtZSgpOwotCQkgICAvL2dvIHRvIGV4dCByZWdpc3RyeSBhbmQgZ2V0IGFsbCBhbnRNYXBwaW5nIGV4dGVuc2lvbnMKLQkJICAgSUV4dGVuc2lvblJlZ2lzdHJ5IHJlZyA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0JCSAgIElFeHRlbnNpb25Qb2ludCBleHRQdCA9IHJlZy5nZXRFeHRlbnNpb25Qb2ludChFWFRfUFRfTkFNRVNQQUNFLCBNQVBQRVJfRVhUX1BUKTsKLQkJICAgSGFzaHRhYmxlIGRhdGFUYWJsZSA9IG5ldyBIYXNodGFibGUoMjUpOwotCQkgICAKLQkJICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gZWxlbWVudHMgPSBleHRQdC5nZXRDb25maWd1cmF0aW9uRWxlbWVudHMoKTsKLQkJICAgCi0JCSAgIGZvciAoaW50IGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHsKLQkJCQotCQkJIElDb25maWd1cmF0aW9uRWxlbWVudCBjZSA9IGVsZW1lbnRzW2ldOwotCQkJIE9iamVjdCBvYmogPSBjZS5nZXRBdHRyaWJ1dGUoTUFQUEVSX09QRVJBVElPTl9BVFRSSUJVVEUpOwotCQkJIC8vIGxvb2sgZm9yIG1hcHBpbmdzIGZvciB0aGlzIG9wZXJhdGlvbgotCQkJIGlmIChvYmouZXF1YWxzKG9wZXJhdGlvbk5hbWUpKQotCQkJIHsJCQkJIAotCQkJCSBTdHJpbmcga2V5ID0gY2UuZ2V0QXR0cmlidXRlKE1BUFBFUl9LRVlfQVRUUklCVVRFKTsKLQkJCQkgU3RyaW5nIHZhbHVlID0gZ2V0UHJvcGVydHkoa2V5KTsKLQkJCQkgCi0JCQkJIC8vY2hlY2sgdG8gc2VlIGlmIHRoZSBwcm9wZXJ0eSBmb3IgdGhpcyBleHRlbnNpb24gaXMgYWxyZWFkeSBpbiB0aGUgZGF0YSB0YWJsZQotCQkJCSAvLyBpZiBzbywgdGhlcmUgaXMgYSBtOjEgbWFwcGluZwotCQkJCSBpZiAodmFsdWUgIT0gbnVsbCkgIC8vb25seSBkbyBhIG1hcHBpbmcgaWYgdGhlcmUgaXMgYW4gQW50IHByb3BlcnR5IHZhbHVlIHBhc3NlZCBpbi4uLgotCQkJCSB7Ci0JCQkJCi0JCQkJCSBTdHJpbmcgcHJvcGVydHkgPSBjZS5nZXRBdHRyaWJ1dGUoTUFQUEVSX1BST1BFUlRZX0FUVFJJQlVURSk7Ci0JCQkJCSBPYmplY3QgdHJhbnNmb3JtID0gbnVsbDsKLQkJCQkJIHRyeQotCQkJCQkgewotCQkJCQkJIC8vY2hlY2sgdG8gbWFrZSBzdXJlIHRoZXJlIGlzIGFuIHRyYW5zZm9ybSBhdHRyaWJ1dGUgcHJvdmlkZWQKLQkJCQkJCSAvLyAgaWYgc28sIGdldCB0aGUgY2xhc3MgdG8gZG8gdGhlIHRyYW5zZm9ybWF0aW9uCi0JCQkJCQkgaWYgKGNlLmdldEF0dHJpYnV0ZShNQVBQRVJfVFJBTlNGT1JNX0FUVFJJQlVURSkhPSBudWxsKQotCQkJCQkJCSB0cmFuc2Zvcm0gPSBjZS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKE1BUFBFUl9UUkFOU0ZPUk1fQVRUUklCVVRFKTsJIAotCQkJCQkgfQotCQkJCQkgY2F0Y2ggKENvcmVFeGNlcHRpb24gY2V4KSB7Ci0JCQkJCSAgIFN0YXR1cyBlcnJvclN0YXR1cyA9IG5ldyBTdGF0dXMoU3RhdHVzLkVSUk9SLCAid3NfYW50IiwgNTA5MiwgY2V4LmdldE1lc3NhZ2UoKSwgY2V4KTsKLQkJCQkJICAgZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKGVycm9yU3RhdHVzKTsKLQkJCQkJICAgZ2V0TG9nKCkubG9nKElMb2cuRVJST1IsICJ3c19hbnQiLCA1MDkyLCB0aGlzLCAiZ2V0TWFwcGluZ0V4dGVuc2lvbnMiLCBFbnZpcm9ubWVudE1lc3NhZ2VzLmJpbmQoRW52aXJvbm1lbnRNZXNzYWdlcy5NU0dfRVJST1JfQU5UX0RBVEFfVFJBTlNGT1JNLCBrZXksIHRyYW5zZm9ybSkpOwotCQkJCQkgICB0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihlcnJvclN0YXR1cyk7Ci0JCQkJCSB9Ci0JCQkJCSAKLQkJCQkJIGlmICh0cmFuc2Zvcm0gIT0gbnVsbCAmJiB0cmFuc2Zvcm0gaW5zdGFuY2VvZiBCZWFuTW9kaWZpZXIvKmRhdGFUYWJsZS5jb250YWluc0tleShwcm9wZXJ0eSkqLykKLQkJCQkJIHsKLQkJCQkJCSAvL2dldCB0aGUgUHJvcGVydHlEYXRhSG9sZGVyIGZyb20gdGhlIHRhYmxlCi0JCQkJCQkgUHJvcGVydHlEYXRhSG9sZGVyIGhvbGRlciA9IChQcm9wZXJ0eURhdGFIb2xkZXIpZGF0YVRhYmxlLmdldChwcm9wZXJ0eSk7Ci0JCQkJCQkgaWYgKGhvbGRlciA9PSBudWxsKQotCQkJCQkJIHsKLQkJCQkJCQkgaG9sZGVyID0gbmV3IFByb3BlcnR5RGF0YUhvbGRlcigpOwotCQkJCQkJCSBob2xkZXIua2V5XyA9ICIiOwotCQkJCQkJCSBob2xkZXIudmFsdWVfID0gIiI7CQotCQkJCQkJCSBob2xkZXIudHJhbnNmb3JtXyA9IHRyYW5zZm9ybTsKLQkJCQkJCQkgaG9sZGVyLm9wZXJhdGlvbl8gPSBvcGVyYXRpb247Ci0JCQkJCQkJIGhvbGRlci5wcm9wZXJ0eV8gPSBwcm9wZXJ0eTsKLQkJCQkJCQkgaG9sZGVyLm1hcF8gPSBuZXcgSGFzaE1hcCgpOwotCQkJCQkJCSBob2xkZXIubWFwXy5wdXQoa2V5LCB2YWx1ZSk7Ci0JCQkJCQkJIGRhdGFUYWJsZS5wdXQocHJvcGVydHksIGhvbGRlcik7Ci0JCQkJCQkgfQkJCQkJCSAKLQkJCQkJCSBlbHNlCi0JCQkJCQkgewkJCQkJCQotCQkJCQkJCWhvbGRlci5tYXBfLnB1dChrZXksIHZhbHVlKTsKLQkJCQkJCSB9CQkJCQkKLQkJCQkJIH0KLQkJCQkJIGVsc2UgIC8vcGxhaW4gcHJvcGVydHkgbWFwcGluZyBub3QgYSBiZWFuCi0JCQkJCSB7Ci0JCQkJCQkgUHJvcGVydHlEYXRhSG9sZGVyIGhvbGRlciA9IG5ldyBQcm9wZXJ0eURhdGFIb2xkZXIoKTsKLQkJCQkJCSBob2xkZXIub3BlcmF0aW9uXyA9IG9wZXJhdGlvbjsKLQkJCQkJCSBob2xkZXIua2V5XyA9IGtleTsKLQkJCQkJCSBob2xkZXIucHJvcGVydHlfID0gcHJvcGVydHk7Ci0JCQkJCQkgaG9sZGVyLnRyYW5zZm9ybV8gPSB0cmFuc2Zvcm07Ci0JCQkJCQkgaG9sZGVyLnZhbHVlXyA9IHZhbHVlOwotCQkJCQkJIGRhdGFUYWJsZS5wdXQocHJvcGVydHksIGhvbGRlcik7Ci0JCQkJCSB9CQkJIAotCQkJCSB9Ci0JCQkJIGVsc2UgaWYoY2UuZ2V0QXR0cmlidXRlKE1BUFBFUl9SRVFVSVJFRF9BVFRSSUJVVEUpIT1udWxsICYmIGNlLmdldEF0dHJpYnV0ZShNQVBQRVJfUkVRVUlSRURfQVRUUklCVVRFKS5lcXVhbHMoInRydWUiKSkKLQkJCQkgewkJCQkKLQkJCQkJIFN0cmluZyBtc2cgPSBFbnZpcm9ubWVudE1lc3NhZ2VzLmJpbmQoRW52aXJvbm1lbnRNZXNzYWdlcy5NU0dfRVJST1JfQU5UX1JFUVVJUkVEX1BST1BFUlRZLCBrZXkudG9TdHJpbmcoKSk7Ci0JCQkJCSBTdGF0dXMgc3RhdHVzT2JqID0gbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCAKLQkJCQkJCQkJRW52UGx1Z2luLklELAotCQkJCQkJCQlJU3RhdHVzLkVSUk9SLAotCQkJCQkJCQltc2csIAotCQkJCQkJCQludWxsKTsKLQkJCQkJIGdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXNPYmopOwotCSAgICAgICAgICAgICAgICAgZ2V0TG9nKCkubG9nKElMb2cuRVJST1IsICJ3c19hbnQiLCA5OTk5LCB0aGlzLCAiZ2V0TWFwcGluZ0V4dGVuc2lvbnMiLCBtc2cpOwkJCQkJIAotCQkJCSB9Ci0JCQkJIGVsc2UgaWYgKHZlcmJvc2UoKSkKLQkJCQkgewotCQkJCQkgU3RyaW5nIG1zZyA9IEVudmlyb25tZW50TWVzc2FnZXMuYmluZChFbnZpcm9ubWVudE1lc3NhZ2VzLk1TR19JTkZPX0FOVF9fUFJPUEVSVFlfREVGQVVMVCwga2V5LnRvU3RyaW5nKCkpOwotCQkJCQkgU3RhdHVzIHN0YXR1c09iaiA9IG5ldyBTdGF0dXMoSVN0YXR1cy5JTkZPLCAKLQkJCQkJCQkJRW52UGx1Z2luLklELAotCQkJCQkJCQlJU3RhdHVzLklORk8sCi0JCQkJCQkJCW1zZywgCi0JCQkJCQkJCW51bGwpOwotCQkJCQkgZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEluZm8oc3RhdHVzT2JqKTsKLQkJCQkJIGdldExvZygpLmxvZyhJTG9nLklORk8sICJ3c19hbnQiLCA5OTk5LCB0aGlzLCAiZ2V0TWFwcGluZ0V4dGVuc2lvbnMiLCBtc2cpOwkJCQkJIAotCQkJCSB9Ci0JCSAgICAgIH0gICAgCSAKLQkJICB9Ci0JCSAgIHJldHVybiBkYXRhVGFibGUuZWxlbWVudHMoKTsKLQkJfSAgICAgCi0JICAgCi0JICAgcHJpdmF0ZSBib29sZWFuIHRyYW5zZm9ybUFuZFNldChQcm9wZXJ0eURhdGFIb2xkZXIgbWFwcGluZywgU3RyaW5nIHNldHRlck1ldGhvZE5hbWUpCi0JICAgewotCQkJT2JqZWN0IHRyYW5zZm9ybSA9IG1hcHBpbmcudHJhbnNmb3JtXzsKLQkJCWlmICh0cmFuc2Zvcm0gIT0gbnVsbCkKLQkJCXsKLQkJCQkvLyBnZXQgdHJhbnNmb3JtIGNsYXNzICYgY3JlYXRlIHNldHRlciBwYXJhbWV0ZXJzCQkKLQkJCQl0cnkKLQkJCQl7Ci0JCQkJCS8vT2JqZWN0IGNsYXNzT2JqZWN0ID0gQ2xhc3MuZm9yTmFtZSh0cmFuc2Zvcm0pLm5ld0luc3RhbmNlKCk7Ci0JCQkJCU9iamVjdCBwYXJhbSA9IG5ldyBPYmplY3QoKTsKLQkJCQkJaWYgKHRyYW5zZm9ybSBpbnN0YW5jZW9mIFRyYW5zZm9ybWVyKQotCQkJCQl7Ci0JCQkJCQlUcmFuc2Zvcm1lciB0cmFuc2Zvcm1lciA9IChUcmFuc2Zvcm1lcil0cmFuc2Zvcm07CQkJCQkJCi0JCQkJCQkvLyB0cmFuc2Zvcm0gdGhlIHByb3BlcnR5IHZhbHVlCi0JCQkJCQlwYXJhbSA9IHRyYW5zZm9ybWVyLnRyYW5zZm9ybShtYXBwaW5nLnZhbHVlXyk7CQkJCQkJCi0JCQkJCX0KLQkJCQkJZWxzZSBpZiAobWFwcGluZy5tYXBfICE9IG51bGwgJiYgdHJhbnNmb3JtIGluc3RhbmNlb2YgQmVhbk1vZGlmaWVyKQotCQkJCQl7Ci0JCQkJCQkgIEJlYW5Nb2RpZmllciBtb2RpZmllciA9IChCZWFuTW9kaWZpZXIpdHJhbnNmb3JtOwkJCi0gICAgICAgICAgICAgICAgICAgICAgICAgIE1ldGhvZCBnZXR0ZXIgPSBnZXRHZXR0ZXJNZXRob2QobWFwcGluZyk7Ci0JCQkJCQkgIHBhcmFtID0gZ2V0dGVyLmludm9rZShtYXBwaW5nLm9wZXJhdGlvbl8sIG5ldyBPYmplY3RbXXt9KTsJCQkJCQkgIAotCQkJCQkJICBtb2RpZmllci5tb2RpZnkocGFyYW0sIG1hcHBpbmcubWFwXyk7Ci0JCQkJCX0JCQkJCQkJCQkJCQkKLQkJCQkJcmV0dXJuIGNhbGxTZXR0ZXIobWFwcGluZy5vcGVyYXRpb25fLCBwYXJhbSwgc2V0dGVyTWV0aG9kTmFtZSk7Ci0JCQkJCQotCQkJCX0KLQkJCQljYXRjaCAoRXhjZXB0aW9uIGV4YykKLQkJCQl7Ci0JCQkJCWdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihuZXcgU3RhdHVzKFN0YXR1cy5FUlJPUiwgIndzX2FudCIsIDUwOTMsIGV4Yy5nZXRNZXNzYWdlKCksIGV4YykpOwotICAgICAgICAgICAgICAgICAgICBnZXRMb2coKS5sb2coSUxvZy5FUlJPUiwgIndzX2FudCIsIDUwOTMsIHRoaXMsICJ0cmFuc2Zvcm1BbmRTZXQiLCBFbnZpcm9ubWVudE1lc3NhZ2VzLmJpbmQoRW52aXJvbm1lbnRNZXNzYWdlcy5NU0dfRVJST1JfQU5UX0RBVEFfVFJBTlNGT1JNLCBtYXBwaW5nLmtleV8sIG1hcHBpbmcudHJhbnNmb3JtXykpOwotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKGV4Yy5nZXRNZXNzYWdlKCkpOwotCQkJCX0JCQkJCi0JCQl9Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JICAgfQkgICAKLQkgICAKLQkgICBwcml2YXRlIFZlY3RvciBnZXRTZXR0ZXJMaXN0KE9iamVjdCBvcCkKLQkgICB7Ci0JCSAgIFZlY3RvciByZXN1bHQgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgICAgIE1ldGhvZFtdIG1ldGhvZHMgPSBvcC5nZXRDbGFzcygpLmdldE1ldGhvZHMoKTsJCSAgICAgCi0JCSAgICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IG1ldGhvZHMubGVuZ3RoOyBpbmRleCsrICkKLQkJICAgICB7Ci0JCSAgICAgICBNZXRob2QgIG1ldGhvZCAgICAgPSBtZXRob2RzW2luZGV4XTsKLQkJICAgICAgIGJvb2xlYW4gaXNQdWJsaWMgICA9IE1vZGlmaWVyLmlzUHVibGljKCBtZXRob2QuZ2V0TW9kaWZpZXJzKCkgKTsKLQkJICAgICAgIENsYXNzICAgcmV0dXJuVHlwZSA9IG1ldGhvZC5nZXRSZXR1cm5UeXBlKCk7Ci0JCSAgICAgCi0JCSAgICAgICBpZiggaXNQdWJsaWMgJiYgCi0JCSAgICAgICAgICAgcmV0dXJuVHlwZSA9PSBWb2lkLlRZUEUgJiYgCi0JCSAgICAgICAgICAgbWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCkubGVuZ3RoID09IDEgJiYKLQkJICAgICAgICAgICBtZXRob2QuZ2V0TmFtZSgpLnN0YXJ0c1dpdGgoICJzZXQiICkpCi0JCSAgICAgICB7Ci0JCSAgICAgICAgIG1ldGhvZC5zZXRBY2Nlc3NpYmxlKCB0cnVlICk7Ci0JCSAgICAgICAgIHJlc3VsdC5hZGQoIG1ldGhvZCApOwotCQkgICAgICAgfQotCQkgICAgIH0KLQkJCSAgICAgCi0JICAgICByZXR1cm4gcmVzdWx0OwotCSAgIH0KLQkgICAKLQkgICBwcml2YXRlIE1ldGhvZCBnZXRHZXR0ZXJNZXRob2QoUHJvcGVydHlEYXRhSG9sZGVyIG1hcHBpbmcpCi0JICAgewotCSAgICAgICBNZXRob2QgZ2V0dGVyRm91bmQgPSBudWxsOyAgICAgCi0KLQkgICAgICAgaWYgKGNsYXNzRW50cnkuZ2V0dGVyTGlzdF8gPT0gbnVsbCkKLQkgICAgICAgewotCSAgICAJICAgY2xhc3NFbnRyeS5nZXR0ZXJMaXN0XyA9IGdldEdldHRlckxpc3QobWFwcGluZy5vcGVyYXRpb25fKTsgIAotCSAgICAgICB9Ci0JICAgICAgIAotCSAgICAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgY2xhc3NFbnRyeS5nZXR0ZXJMaXN0Xy5zaXplKCk7IGluZGV4KysgKQotCSAgICAgICB7Ci0JICAgICAgICAgTWV0aG9kIGdldHRlciA9IChNZXRob2QpY2xhc3NFbnRyeS5nZXR0ZXJMaXN0Xy5lbGVtZW50QXQoIGluZGV4ICk7Ci0JICAgICAgICAgCi0JICAgICAgICAgaWYoIGdldHRlci5nZXROYW1lKCkuZXF1YWxzKCAiZ2V0IiArIG1hcHBpbmcucHJvcGVydHlfICkpCi0JICAgICAgICAgewotCSAgICAgICAgICAgIGdldHRlckZvdW5kID0gZ2V0dGVyOwotCSAgICAgICAgICAgIGJyZWFrOwotCSAgICAgICAgIH0gICAgICAgCi0JICAgICAgIH0KLQkgICAgICAgcmV0dXJuIGdldHRlckZvdW5kOwotCSAgIH0KLQkgICAKLQkgICBwcml2YXRlIFZlY3RvciBnZXRHZXR0ZXJMaXN0KCBPYmplY3Qgb2JqZWN0ICkKLQkgICB7Ci0JICAgICBWZWN0b3IgcmVzdWx0ID0gbmV3IFZlY3RvcigpOwkgICAgIAotCSAgICAgTWV0aG9kW10gbWV0aG9kcyA9IG9iamVjdC5nZXRDbGFzcygpLmdldE1ldGhvZHMoKTsKLQkgICAgIAotCSAgICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IG1ldGhvZHMubGVuZ3RoOyBpbmRleCsrICkKLQkgICAgIHsKLQkgICAgICAgTWV0aG9kICBtZXRob2QgICAgID0gbWV0aG9kc1tpbmRleF07Ci0JICAgICAgIGJvb2xlYW4gaXNQdWJsaWMgICA9IE1vZGlmaWVyLmlzUHVibGljKCBtZXRob2QuZ2V0TW9kaWZpZXJzKCkgKTsKLQkgICAgICAgQ2xhc3MgICByZXR1cm5UeXBlID0gbWV0aG9kLmdldFJldHVyblR5cGUoKTsKLQkgICAgIAotCSAgICAgICBpZiggaXNQdWJsaWMgJiYgCi0JICAgICAgICAgICByZXR1cm5UeXBlICE9IFZvaWQuVFlQRSAmJiAKLQkgICAgICAgICAgIG1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpLmxlbmd0aCA9PSAwICYmCi0JICAgICAgICAgICBtZXRob2QuZ2V0TmFtZSgpLnN0YXJ0c1dpdGgoICJnZXQiICkpCi0JICAgICAgIHsKLQkgICAgICAgICBtZXRob2Quc2V0QWNjZXNzaWJsZSggdHJ1ZSApOwotCSAgICAgICAgIHJlc3VsdC5hZGQoIG1ldGhvZCApOwotCSAgICAgICB9Ci0JICAgICB9Ci0JICAgICAKLQkgICAgIHJldHVybiByZXN1bHQ7Ci0JICAgfSAgIAotICAgICAgIAotCSAgIHByaXZhdGUgYm9vbGVhbiBjYWxsU2V0dGVyKEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIG9wLCBPYmplY3QgcGFyYW0sIFN0cmluZyBzZXR0ZXJNZXRob2ROYW1lKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCSAgIHsKLQkJICAgZm9yIChJdGVyYXRvciBpdGVyYXRvciA9IGNsYXNzRW50cnkuc2V0dGVyTGlzdF8uaXRlcmF0b3IoKTsgaXRlcmF0b3IuaGFzTmV4dCgpOykgCi0JCSAgIHsKLQkJCQlNZXRob2QgbWV0aG9kID0gKE1ldGhvZCkgaXRlcmF0b3IubmV4dCgpOwotCQkJCWlmIChtZXRob2QuZ2V0TmFtZSgpLmVxdWFscyhzZXR0ZXJNZXRob2ROYW1lKSkKLQkJCQl7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotCQkJICAgICAgIENsYXNzW10gcGFyYW1UeXBlcyA9IG1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpOwotCQkJICAgICAgIGlmIChwYXJhbVR5cGVzLmxlbmd0aCA9PSAxICYmIHBhcmFtICE9IG51bGwpCi0JCQkgICAgICAgewkJCSAgCi0JCQkgICAgICAgIAkgdHJ5ewkJCSAgICAgIAkJCQotCQkJICAgICAJCQkgbWV0aG9kLmludm9rZShvcCwgbmV3IE9iamVjdFtde3BhcmFtfSk7Ci0JCQkgICAgIAkJCSByZXR1cm4gdHJ1ZTsKLQkJCSAgICAgCQkgfQotCQkJICAgICAJCSBjYXRjaChFeGNlcHRpb24gY2V4KXsKLQkJCSAgICAgCQkJU3RhdHVzIGVycm9yU3RhdHVzID0gbmV3IFN0YXR1cyhTdGF0dXMuRVJST1IsICJ3c19hbnQiLCA1MDk0LCBjZXguZ2V0TWVzc2FnZSgpLCBjZXgpOwotCQkJICAgICAJCQlnZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3IoZXJyb3JTdGF0dXMpOwotCQkJICAgICAJCQlnZXRMb2coKS5sb2coSUxvZy5FUlJPUiwgIndzX2FudCIsIDUwOTQsIHRoaXMsICJjYWxsU2V0dGVyIiwgRW52aXJvbm1lbnRNZXNzYWdlcy5iaW5kKEVudmlyb25tZW50TWVzc2FnZXMuTVNHX0VSUk9SX0FOVF9DQUxMX1NFVFRFUiwgc2V0dGVyTWV0aG9kTmFtZSkpOwotCQkJICAgICAJCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihlcnJvclN0YXR1cyk7Ci0JCQkgICAgIAkJIH0KLQkJCSAgICAgICB9ICAKLQkJCQl9Ci0JCQl9Ci0JCSAgICByZXR1cm4gZmFsc2U7Ci0JICAgfQotCSAgIAotCQotCSAgIC8vIGxvb2sgZm9yIHNldHRlciB3aXRoIHByaW1pdGl2ZSB0eXBlIHBhcmFtZXRlciAtIGlmIGZpbmQgb25lLCBjb252ZXJ0IFN0cmluZyBwcm9wZXJ0eVZhbHVlIGFuZCBjYWxsIGl0Ci0JICAgcHJpdmF0ZSBib29sZWFuIGNhbGxQcmltaXRpdmVTZXR0ZXIoUHJvcGVydHlEYXRhSG9sZGVyIG1hcHBpbmcpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JICAgewkJCQotCQkJZm9yIChJdGVyYXRvciBpdGVyYXRvciA9IGNsYXNzRW50cnkuc2V0dGVyTGlzdF8uaXRlcmF0b3IoKTsgaXRlcmF0b3IuaGFzTmV4dCgpOykgewotCQkJCU1ldGhvZCBlbGVtZW50ID0gKE1ldGhvZCkgaXRlcmF0b3IubmV4dCgpOwotCQkJCUNsYXNzW10gcGFybVR5cGVzID0gZWxlbWVudC5nZXRQYXJhbWV0ZXJUeXBlcygpOwotCQkJCWlmIChwYXJtVHlwZXMubGVuZ3RoPT0xICYmIHBhcm1UeXBlc1swXS5pc1ByaW1pdGl2ZSgpKQotCQkJCXsJCQkJCQkJCQkJCi0JCQkJCUNsYXNzIHBhcm1UeXBlID0gcGFybVR5cGVzWzBdLmdldENsYXNzKCk7Ci0JCQkJCU9iamVjdCBzZXR0ZXJQYXJtID0gbnVsbDsKLQkJCQkJaWYgKHBhcm1UeXBlLmVxdWFscyhJbnRlZ2VyLmNsYXNzKSkKLQkJCQkJewotCQkJCQkJc2V0dGVyUGFybSA9IEludGVnZXIudmFsdWVPZihtYXBwaW5nLnZhbHVlXyk7Ci0JCQkJCX0KLQkJCQkJZWxzZSBpZiAocGFybVR5cGUuZXF1YWxzKEJvb2xlYW4uY2xhc3MpKQotCQkJCQl7Ci0JCQkJCQlzZXR0ZXJQYXJtID0gQm9vbGVhbi52YWx1ZU9mKG1hcHBpbmcudmFsdWVfKTsKLQkJCQkJfQotCQkJCQllbHNlIGlmIChwYXJtVHlwZS5lcXVhbHMoQ2hhcmFjdGVyLmNsYXNzKSAmJiBtYXBwaW5nLnZhbHVlXy5sZW5ndGgoKSA9PSAxKQotCQkJCQl7Ci0JCQkJCQlzZXR0ZXJQYXJtID0gbmV3IENoYXJhY3RlcihtYXBwaW5nLnZhbHVlXy5jaGFyQXQoMCkpOyAgCi0JCQkJCX0KLQkJCQkJZWxzZSBpZiAocGFybVR5cGUuZXF1YWxzKEJ5dGUuY2xhc3MpKQotCQkJCQl7Ci0JCQkJCQlzZXR0ZXJQYXJtID0gQnl0ZS52YWx1ZU9mKG1hcHBpbmcudmFsdWVfKTsKLQkJCQkJfQotCQkJCQllbHNlIGlmIChwYXJtVHlwZS5lcXVhbHMoU2hvcnQuY2xhc3MpKQotCQkJCQl7Ci0JCQkJCQlzZXR0ZXJQYXJtID0gU2hvcnQudmFsdWVPZihtYXBwaW5nLnZhbHVlXyk7Ci0JCQkJCX0KLQkJCQkJZWxzZSBpZiAocGFybVR5cGUuZXF1YWxzKExvbmcuY2xhc3MpKQotCQkJCQl7Ci0JCQkJCQlzZXR0ZXJQYXJtID0gTG9uZy52YWx1ZU9mKG1hcHBpbmcudmFsdWVfKTsKLQkJCQkJfQotCQkJCQllbHNlIGlmIChwYXJtVHlwZS5lcXVhbHMoRmxvYXQuY2xhc3MpKQotCQkJCQl7Ci0JCQkJCQlzZXR0ZXJQYXJtID0gRmxvYXQudmFsdWVPZihtYXBwaW5nLnZhbHVlXyk7Ci0JCQkJCX0KLQkJCQkJZWxzZSBpZiAocGFybVR5cGUuZXF1YWxzKERvdWJsZS5jbGFzcykpCi0JCQkJCXsKLQkJCQkJCXNldHRlclBhcm0gPSBEb3VibGUudmFsdWVPZihtYXBwaW5nLnZhbHVlXyk7Ci0JCQkJCX0KLQkJCQkJCQkJCQkJCQkJCi0JCQkJICAgIGlmIChzZXR0ZXJQYXJtICE9IG51bGwpCi0JCQkJICAgIHsJCi0JCQkJICAgIAl0cnkKLQkJCQkgICAgCXsKLQkJCQkgICAgCQllbGVtZW50Lmludm9rZShtYXBwaW5nLm9wZXJhdGlvbl8sIG5ldyBPYmplY3RbXXtzZXR0ZXJQYXJtfSk7Ci0JCQkJCSAgICAJcmV0dXJuIHRydWU7CQotCQkJCSAgICAJfQotCQkJCSAgICAJY2F0Y2goRXhjZXB0aW9uIGUpewotCQkJCSAgICAJCVN0YXR1cyBlcnJvclN0YXR1cyA9IG5ldyBTdGF0dXMoU3RhdHVzLkVSUk9SLCAid3NfYW50IiwgNTA5NSwgZS5nZXRNZXNzYWdlKCksIGUpOwotCQkJCSAgICAJCWdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihlcnJvclN0YXR1cyk7Ci0JCQkJICAgIAkJZ2V0TG9nKCkubG9nKElMb2cuRVJST1IsICJ3c19hbnQiLCA1MDk1LCB0aGlzLCAiY2FsbFByaW1pdGl2ZVNldHRlciIsIEVudmlyb25tZW50TWVzc2FnZXMuYmluZChFbnZpcm9ubWVudE1lc3NhZ2VzLk1TR19FUlJPUl9BTlRfQ0FMTF9TRVRURVIsIGVsZW1lbnQuZ2V0TmFtZSgpKSk7Ci0JCQkJICAgIAkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24oZXJyb3JTdGF0dXMpOwotCQkJCSAgICAJfQotCQkJCSAgICB9CQkJCi0JCQkJfQotCQkgICAgfSAgIAotCQkJcmV0dXJuIGZhbHNlOwotCSAgIH0KLQkJCi0JCS8vY2hlY2sgZm9yIHNldHRlciB3aXRoIHBhcmFtZXRlciB0eXBlIHRoYXQgdGFrZXMgYSBTdHJpbmcgdG8gY29uc3RydWN0Ci0JCS8vIGNvbnN0cnVjdCB0aGUgcGFyYW1ldGVyIHVzaW5nIFN0cmluZyAmIGNhbGwgdGhlIHNldHRlciAgCi0JICAgcHJpdmF0ZSBib29sZWFuIGNhbGxTZXR0ZXJDb25zdHJ1Y3RvcihQcm9wZXJ0eURhdGFIb2xkZXIgbWFwcGluZykgdGhyb3dzIENvcmVFeGNlcHRpb24KLQkgICB7CQotCQkJZm9yIChJdGVyYXRvciBpdGVyYXRvciA9IGNsYXNzRW50cnkuc2V0dGVyTGlzdF8uaXRlcmF0b3IoKTsgaXRlcmF0b3IuaGFzTmV4dCgpOykgewotCQkJCU1ldGhvZCBlbGVtZW50ID0gKE1ldGhvZCkgaXRlcmF0b3IubmV4dCgpOwotCQkJCUNsYXNzW10gcGFybVR5cGVzID0gZWxlbWVudC5nZXRQYXJhbWV0ZXJUeXBlcygpOwotCQkJCUNsYXNzW10gc3RyaW5nUGFybSA9IG5ldyBDbGFzc1tde1N0cmluZy5jbGFzc307Ci0JCQkJaWYgKHBhcm1UeXBlcy5sZW5ndGg9PTEpCi0JCQkJewotCQkJCQl0cnkKLQkJCQkJewkJCQotCQkJCQkJQ29uc3RydWN0b3IgY3RvciA9IHBhcm1UeXBlcy5nZXRDbGFzcygpLmdldENvbnN0cnVjdG9yKHN0cmluZ1Bhcm0pOwotCQkJCQkJT2JqZWN0IHBhcmFtZXRlciA9IGN0b3IubmV3SW5zdGFuY2UobmV3IE9iamVjdFtde21hcHBpbmcudmFsdWVffSk7Ci0JCQkJCQllbGVtZW50Lmludm9rZShtYXBwaW5nLm9wZXJhdGlvbl8sIG5ldyBPYmplY3RbXXtwYXJhbWV0ZXJ9KTsJCQkJCQkKLQkJCQkJfQotCQkJCQljYXRjaCAoRXhjZXB0aW9uIGV4YykKLQkJCQkJewotCQkJCQkJU3RhdHVzIGVycm9yU3RhdHVzID0gbmV3IFN0YXR1cyhTdGF0dXMuRVJST1IsICJ3c19hbnQiLCA1MDk2LCBleGMuZ2V0TWVzc2FnZSgpLCBleGMpOwotCQkJCQkJZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKGVycm9yU3RhdHVzKTsKLQkJCQkJCWdldExvZygpLmxvZyhJTG9nLkVSUk9SLCAid3NfYW50IiwgNTA5NiwgdGhpcywgImNhbGxTZXR0ZXJDb25zdHJ1Y3RvciIsIEVudmlyb25tZW50TWVzc2FnZXMuYmluZChFbnZpcm9ubWVudE1lc3NhZ2VzLk1TR19FUlJPUl9BTlRfQ0FMTF9TRVRURVIsIGVsZW1lbnQuZ2V0TmFtZSgpKSk7Ci0JCQkJCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihlcnJvclN0YXR1cyk7Ci0JCQkJCX0KLQkJCQl9Ci0JICAgICAgICB9CQkJCi0JCSAgIHJldHVybiBmYWxzZTsKLQkgICB9Ci0KLQkgICAvKioKLQkgICAgKiBSZXR1cm5zIGFuIG9iamVjdCB0aGF0IGhlbHBzIG1hbmFnZSBleGVjdXRpb24vdW5kb2luZyBvZiBDb21tYW5kcy4KLQkgICAgKi8KLQkgICBwdWJsaWMgQ29tbWFuZE1hbmFnZXIgZ2V0Q29tbWFuZE1hbmFnZXIgKCl7Ci0JCSAgIHJldHVybiBjb250cm9sbGVyXy5nZXRPcGVyYXRpb25NYW5hZ2VyKCk7Ci0JICAgfSAKLQkgICAKLQkgICBwdWJsaWMgQ29tbWFuZEZyYWdtZW50IGdldFJvb3RDb21tYW5kRnJhZ21lbnQoKSAKLSAgICAgICB7Ci0gICAgCSAgIAotICAgIAkgICAvL2xvb2sgdXAgdGhlIGNvbW1hbmRGcmFnbWVudCBpbiB0aGUgc2NlbmFyaW9SZWdpc3RyeSBleHRlbnNpb24gcG9pbnQgd2l0aCBhbiBJRCBjb3JyZXNwb25kaW5nIHRvIHRoZSBzY2VuYXJpbyBwcm9wZXJ0eSBpbiB0aGUgcHJvcGVydHl0YWJsZQotICAgIAkgICBTdHJpbmcgc2NlbmFyaW9Qcm9wZXJ0eSA9IChTdHJpbmcpZ2V0UHJvcGVydHkoU0NFTkFSSU9fVFlQRV9QUk9QRVJUWSk7Ci0gICAgCSAgIElFeHRlbnNpb25SZWdpc3RyeSByZWcgPSBQbGF0Zm9ybS5nZXRFeHRlbnNpb25SZWdpc3RyeSgpOwotCQkgICBJRXh0ZW5zaW9uUG9pbnQgZXh0UHQgPSByZWcuZ2V0RXh0ZW5zaW9uUG9pbnQoRVhUX1BUX05BTUVTUEFDRSwgU0NFTkFSSU9fRVhUX1BUKTsKLQkJICAgCi0JCSAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGVsZW1lbnRzID0gZXh0UHQuZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzKCk7Ci0JCSAgIAotCQkgICBmb3IgKGludCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7Ci0JCQkKLQkJCSBJQ29uZmlndXJhdGlvbkVsZW1lbnQgY29uZmlnRWxlbWVudCA9IGVsZW1lbnRzW2ldOwkJCSAKLQkJCSBpZiAoY29uZmlnRWxlbWVudC5nZXRBdHRyaWJ1dGUoU0NFTkFSSU9fVFlQRV9BVFRSSUJVVEUpLmVxdWFscyhzY2VuYXJpb1Byb3BlcnR5KSkKLQkJCSB7CQkJCSAKLQkJCQkgdHJ5Ci0JCQkJIHsJCQkJCSAKLQkJCQkJT2JqZWN0IG9iaiA9IGNvbmZpZ0VsZW1lbnQuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihTQ0VOQVJJT19DTEFTU19BVFRSSUJVVEUpOwotCQkKLQkJCQkJaWYgKG9iaiBpbnN0YW5jZW9mIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudCkKLQkJCQkJewotCQkJCQkJcmV0dXJuIChvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRnJhZ21lbnQpb2JqOwotCQkJCQl9Ci0JCQkJIH0KLQkJCQkgY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pCi0JCQkJIHsKLQkJCQkJIFN0YXR1cyBlcnJvclN0YXR1cyA9IG5ldyBTdGF0dXMoU3RhdHVzLkVSUk9SLCAid3NfYW50IiwgNTA5NywgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSwgZXhjZXB0aW9uKTsKLQkJCQkJIGdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihlcnJvclN0YXR1cyk7Ci0JCQkJCSBnZXRMb2coKS5sb2coSUxvZy5FUlJPUiwgIndzX2FudCIsIDUwOTcsIHRoaXMsICJnZXRSb290Q29tbWFuZEZyYWdtZW50IiwgRW52aXJvbm1lbnRNZXNzYWdlcy5NU0dfRVJST1JfQU5UX0NNRF9GUkFHTUVOVCk7CQkJCQkgCi0JCQkJIH0JCQkJIAotCQkJICB9ICAgIAkgICAKLSAgICAgICAgICAgfQotCQkgICByZXR1cm4gbnVsbDsKLSAgICAgICB9Ci0gIH0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvYW50L0FudE9wZXJhdGlvbk1hbmFnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvYW50L0FudE9wZXJhdGlvbk1hbmFnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDA0ZDA5Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2FudC9BbnRPcGVyYXRpb25NYW5hZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmFudDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZGF0YS5EYXRhRmxvd01hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmZyYWdtZW50LkNvbW1hbmRGcmFnbWVudEVuZ2luZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklMb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotLyoqCi0gKiBNYW5hZ2VzIHRoZSBleGVjdXRpb24gb2YgY29tbWFuZHMgaW4gdGhlIHJvb3QgZnJhZ21lbnQgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3Rvci4KLSAqIAotICogQGF1dGhvciBqb2FuCi0gKgotICovCQotCi1wdWJsaWMgY2xhc3MgQW50T3BlcmF0aW9uTWFuYWdlciBleHRlbmRzIENvbW1hbmRGcmFnbWVudEVuZ2luZQotewkKLQkgIHByaXZhdGUgQW50RW52aXJvbm1lbnQgZW52aXJvbm1lbnRfOwotCSAgCi0JICBwcm90ZWN0ZWQgSVN0YXR1cyBpbml0QmVmb3JlRXhlY3V0ZSggQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gb3BlcmF0aW9uICkKLSAgICB7ICAgICAgCi0gICAgICBlbnZpcm9ubWVudF8uZ2V0TG9nKCkubG9nKElMb2cuSU5GTywgIndzX2FudCIsIDUwOTgsIHRoaXMsICJpbml0QmVmb3JlRXhlY3V0ZSIsICJJbml0aWFsaXppbmcgZGF0YSBmb3I6ICIgKyBvcGVyYXRpb24uZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOwotICAgICAgSVN0YXR1cyBpbml0U3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICAgIHRyeQotICAgICAgewotICAgIAkgIGluaXRTdGF0dXMgPSBlbnZpcm9ubWVudF8uaW5pdE9wZXJhdGlvbkRhdGEoIG9wZXJhdGlvbiApOyAgCi0gICAgICB9Ci0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgCSB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsgIAotICAgICAgfSAgICAgICAgCi0gICAgICByZXR1cm4gaW5pdFN0YXR1czsKLSAgICB9Ci0KLSAgICAvKioKLQkgICAqIENyZWF0ZXMgYSBDb21tYW5kRnJhZ21lbnRFbmdpbmUuCi0JICAgKiAKLQkgICAqIEBwYXJhbSBzdGFydEZyYWdtZW50IHRoZSByb290IGZyYWdtZW50IHdoZXJlIHRyYXZlcnNhbCB3aWxsIGJlZ2luLgotCSAgICogQHBhcmFtIGRhdGFNYW5hZ2VyIHRoZSBkYXRhIG1hbmFnZXIgY29udGFpbmluZyBhbGwgb2YgdGhlIGRhdGEgbWFwcGluZ3MuCi0JICAgKiBAcGFyYW0gZW52aXJvbm1lbnQgdGhlIGVudmlyb25tZW50LgotCSAgICovCi0JICBwdWJsaWMgQW50T3BlcmF0aW9uTWFuYWdlciggQ29tbWFuZEZyYWdtZW50IHN0YXJ0RnJhZ21lbnQsIERhdGFGbG93TWFuYWdlciBkYXRhTWFuYWdlciwgQW50RW52aXJvbm1lbnQgZW52aXJvbm1lbnQgKQotCSAgewotICAgICAgc3VwZXIoIHN0YXJ0RnJhZ21lbnQsIGRhdGFNYW5hZ2VyLCBlbnZpcm9ubWVudCApOwotICAgICAgCi0JICAJZW52aXJvbm1lbnRfID0gZW52aXJvbm1lbnQ7Ci0JICB9IAotfQotCi0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9hbnQvQW50U3RhdHVzSGFuZGxlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9hbnQvQW50U3RhdHVzSGFuZGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMGVhNWM2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvYW50L0FudFN0YXR1c0hhbmRsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDMxNCAgIDE3Njg4NiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA3MDUyMiAgIDE3Njk0MyBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmFudDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkJhc2VTdGF0dXNIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuQ2hvaWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuU3RhdHVzRXhjZXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgQW50U3RhdHVzSGFuZGxlciBleHRlbmRzIEJhc2VTdGF0dXNIYW5kbGVyCi17Ci0KLQlwdWJsaWMgQ2hvaWNlIHJlcG9ydChJU3RhdHVzIHN0YXR1cywgQ2hvaWNlW10gY2hvaWNlcykgewotCQkvLyBUT0RPIAotCSAgY2hlY2tTdGF0dXMoc3RhdHVzKTsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIHZvaWQgcmVwb3J0KElTdGF0dXMgc3RhdHVzKSB0aHJvd3MgU3RhdHVzRXhjZXB0aW9uIHsKLQkJaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuRVJST1IpCi0JCQlyZXBvcnRFcnJvcihzdGF0dXMpOwotCQllbHNlCi0JCQlyZXBvcnRJbmZvKHN0YXR1cyk7Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCByZXBvcnRFcnJvcihJU3RhdHVzIHN0YXR1cykgewotCSAgY2hlY2tTdGF0dXMoc3RhdHVzKTsKLQkJU3lzdGVtLmVyci5wcmludGxuKHN0YXR1cy5nZXRNZXNzYWdlKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHJlcG9ydEluZm8oSVN0YXR1cyBzdGF0dXMpIHsJCi0JICBjaGVja1N0YXR1cyhzdGF0dXMpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oc3RhdHVzLmdldE1lc3NhZ2UoKSk7CQkKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvYW50L1Byb3BlcnR5RGF0YUhvbGRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9hbnQvUHJvcGVydHlEYXRhSG9sZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwOWFiNmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9hbnQvUHJvcGVydHlEYXRhSG9sZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5hbnQ7Ci0KLS8qKgotICogU2ltcGxlIGNsYXNzIHRvIGhvbGQgZGF0YSBtYXBwaW5nIGluZm9ybWF0aW9uIG9uY2UgcmV0cmlldmVkIGZyb20gQW50IHByb3BlcnR5IGZpbGUuCi0gKiBNYXAgaXMgdXNlZCBmb3IgbWFueSB0byBvbmUgbWFwcGluZ3MgaW52b2x2aW5nIG1hcHBpbmcgb2YgbXVsdGlwbGUgcHJvcGVydGllcyB0byBhIGJlYW4uCi0gKiBJbiB0aGlzIGNhc2UsIHRoZSBrZXlfIGFuZCB2YWx1ZV8gc2hvdWxkIGJlIHNldCB0byBhbiBlbXB0eSBzdHJpbmcgYW5kIGFsbCBrZXkgdmFsdWUgcGFpcnMKLSAqIGZvciBwcm9wZXJ0aWVzIHB1dCBpbnRvIHRoZSBtYXAgaW5zdGVhZC4gIFRoZSB0cmFuc2Zvcm1hdGlvbiBmb3IgdGhpcyBjYXNlIHdvdWxkIGJlIGEgbW9kaWZpZXIKLSAqIHdoaWNoIHdpbGwgc2V0IHRoZSBwcm9wZXJ0aWVzIG9udG8gdGhlIGJlYW4uCi0gKi8KLSAKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotcHVibGljIGNsYXNzIFByb3BlcnR5RGF0YUhvbGRlciB7Ci0JICAgcHVibGljIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIG9wZXJhdGlvbl87Ci0JICAgcHVibGljIE9iamVjdCB0cmFuc2Zvcm1fOwotCSAgIHB1YmxpYyBTdHJpbmcga2V5XzsKLQkgICBwdWJsaWMgU3RyaW5nIHByb3BlcnR5XzsKLQkgICBwdWJsaWMgU3RyaW5nIHZhbHVlXzsJCQotCSAgIHB1YmxpYyBNYXAgbWFwXzsKLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9hbnQvU3RyaW5nMkJvb2xlYW5UcmFuc2Zvcm1lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9hbnQvU3RyaW5nMkJvb2xlYW5UcmFuc2Zvcm1lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODNlNTRjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvYW50L1N0cmluZzJCb29sZWFuVHJhbnNmb3JtZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmFudDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuVHJhbnNmb3JtZXI7Ci0KLXB1YmxpYyBjbGFzcyBTdHJpbmcyQm9vbGVhblRyYW5zZm9ybWVyIGltcGxlbWVudHMgVHJhbnNmb3JtZXIgewotCi0JcHVibGljIE9iamVjdCB0cmFuc2Zvcm0oT2JqZWN0IHZhbHVlKSB7Ci0JCQlTdHJpbmcgc3RyID0gKFN0cmluZyl2YWx1ZTsKLQkJCXN0ciA9IHN0ci50b0xvd2VyQ2FzZSgpOwotCQkJaWYgKHN0ci5lcXVhbHMoInRydWUiKSkKLQkJCXsKLQkJCQlyZXR1cm4gbmV3IEJvb2xlYW4odHJ1ZSk7Ci0JCQl9Ci0JCQllbHNlIHJldHVybiBuZXcgQm9vbGVhbihmYWxzZSk7CQkKLQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb21tYW5kbGluZS9Db21tYW5kTGluZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb21tYW5kbGluZS9Db21tYW5kTGluZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTA5YmRiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29tbWFuZGxpbmUvQ29tbWFuZExpbmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg1NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbW1hbmRsaW5lOwotCi1pbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuQml0U2V0OwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb21tb24uU3RyaW5nVXRpbHM7Ci0KLQotLyoqCi0gICogPHA+VGhpcyBpcyBhIGdlbmVyaWMgY29tbWFuZCBsaW5lIHBhcnNpbmcgY2xhc3MuICBUaGUgcHJvZ3JhbW1lciBuZWVkIG9ubHkgc3BlY2lmeQotICAqIHRoZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlaXIgY29tbWFuZCBsaW5lKGllLiBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIGZsYWdzLCBldGMpCi0gICogYW5kIHRoaXMgY2xhc3Mgd2lsbCBwZXJmb3JtIHRoZSByZXN0IG9mIHRoZSBwYXJzaW5nIHdvcmsuICBBcyBhbiBhZGRlZCBib251cyB0aGlzCi0gICogY2xhc3Mgd2lsbCBhbHNvIGNyZWF0ZSBmb3JtYXRlZCBoZWxwIHRleHQgdGhhdCBkaXNwbGF5cyB0aGUgc3ludGF4IG9mIHRoaXMKLSAgKiBjb21tYW5kIGxpbmUuCi0gICoKLSAgKiA8cD5UaGUgbWFpbiBwYXJhbWV0ZXIgdG8gdGhlIENvbW1hbmRMaW5lIGNvbnN0cnVjdG9yIGlzIGEgdHdvIGRpbWVuc2lvbmFsIFN0cmluZwotICAqIGFycmF5LiAgVGhlcmUgYXJlIDUgY29sdW1ucyBpbiB0aGlzIGFycmF5IGFuZCBhcyBtYW55IHJvd3MgYXMgbmVlZGVkIGZvciBlYWNoCi0gICogZmxhZyBvciBwb3NpdGlvbmFsIHBhcmFtZXRlci4gIFRoZSBmaXZlIGNvbHVtbnMgYXJlOgotICAqCi0gICogPG9sPgotICAqIDxsaT5UaGUgbmFtZSBvZiB0aGUgZmxhZyhlZy4gImhlbHAiIG9yICJhIiwgZXRjKQotICAqICAgICBOb3RlOiBubyBkYXNoIHNob3VsZCBiZSBpbiB0aGUgbmFtZSBoZXJlLiAgVGhlIHVzZXIgd291bGQgc3BlY2lmeSAiLWhlbHAiIG9uIHRoZQotICAqICAgICAgICAgICBjb21tYW5kIGxpbmUgdGhvdWdoLgotICAqIDxsaT5UaGUgbmFtZSBvZiB0aGUgZmxhZyBwYXJhbWV0ZXIoaWYgYW55KQotICAqIDxsaT5BIHN0cmluZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhpcyBmbGFnIGNhbiBhcHBlYXIgbW9yZSB0aGFuIG9uY2Ugb24gdGhlCi0gICogICAgIGNvbW1hbmQgbGluZS4KLSAgKiA8bGk+QSBzdHJpbmcgaW5kaWNhdGluZyB3aGV0aGVyIHRoaXMgZmxhZyBtdXN0IGJlIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLgotICAqIDxsaT5BIGhlbHAgdGV4dCBzdHJpbmcgd2hpY2ggZGVzY3JpYmVzIHRoaXMgcGFydGljdWxhciBmbGFnIG9yIHBvc2l0aW9uYWwgcGFyYW1ldGVyLgotICAqIDwvb2w+Ci0gICoKLSAgKiA8cD5FYWNoIHJvdyBpbiB0aGUgc3RyaW5nIGFycmF5IGlzIGFzc29jaWF0ZSB3aXRoIGVpdGhlciBhIHBvc2l0aW9uYWwgcGFyYW1ldGVyCi0gICogb3Igd2l0aCBhIGZsYWcuICBGb3IgZXhhbXBsZSwgY29uc2lkZXIgdGhpcyBjb21tYW5kIGxpbmU6Ci0gICogPHVsPgotICAqIDxsaT5NeV9wcm9nIHJlcXVpcmVkX3Bhcm0xIC1hYiBwYXJtX2Zvcl9hYiByZXF1aXJlZF9wYXJtMiAtaGVscCBvcHRpb25hbF9wYXJtcwotICAqIDwvdWw+Ci0gICoKLSAgKiA8cD5JbiB0aGlzIGV4YW1wbGUgTXlfcHJvZyBpcyB0aGUgbmFtZSBvZiB0aGUgcHJvZ3JhbS4gIHJlcXVpcmVkX3Bhcm0xIGFuZAotICAqIHJlcXVpcmVkX3Bhcm0yIG11c3QgYmUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUuICBOb3RpY2UgdGhhdCB0aGV5IGRvIG5vdAotICAqIGhhdmUgdG8gYmUgYWRqYWNlbnQgdG8gZWFjaCBvdGhlciBvbiB0aGUgY29tbWFuZCBsaW5lLiBvcHRpb25hbF9wYXJtcyBtYXkgb3B0aW9uYWxseQotICAqIHNwZWNpZmllZC4gIG9wdGlvbmFsX3Bhcm1zIGNhbiBiZSAwIG9yIG1vcmUgcGFyYW1ldGVycy4gIFRoZXkgZG9lcyBub3QgbmVlZCB0byBiZQotICAqIGFkamFjZW50IHRvIHRoZSByZXF1aXJlZCBwYXJhbWV0ZXJzLCBidXQgdGhleSBkbyBuZWVkIHRvIGZvbGxvdyB0aGUgcmVxdWlyZWQKLSAgKiBwYXJhbWV0ZXJzLiBUd28gZmxhZ3MgYXJlIHNwZWNpZmllZCAiLWFiIiBhbmQgIi1oZWxwIi4gIFRoZSAiLWFiIiBmbGFnIGhhcyBhCi0gICogcGFyYW1ldGVyICJwYXJtX2Zvcl9hYiIgYXNzb2NpYXRlZCB3aXRoIGl0LiAgTm90ZTogYSBmbGFnIGNhbiBub3QgaGF2ZSBhbiBvcHRpb25hbAotICAqIHBhcmFtZXRlci4gKGllLiBhIGZsYWcgZWl0aGVyIG5ldmVyIGhhdmUgYSBwYXJhbWV0ZXIgb3IgaXQgYWx3YXlzIGhhcyBhIHBhcmFtZXRlcikKLSAgKiBJbiB0aGlzIGV4YW1wbGUsIHRoZSBmaXJzdCB0d28gcm93cyBpbiB0aGUgc3RyaW5nIGFycmF5IHdvdWxkIGRlc2NyaWJlIHJlcXVpcmVkX3Bhcm0xCi0gICogYW5kIHJlcXVpcmVkX3Bhcm0yLiAgVGhlIHRoaXJkIGVudHJ5IHdvdWxkIGRlc2NyaWJlIG9wdGlvbmFsX3Bhcm1zLiAgVGhlIGZvdXJ0aCBhbmQKLSAgKiBmaWZ0aCByb3dzIHdvdWxkIGRlc2NyaWJlICItYWIiIGFuZCAiLWhlbHAiLiAgRm9yIHRoaXMgY29tbWFuZCBsaW5lIHRoZSBzdHJpbmcgYXJyYXkKLSAgKiB3b3VsZCBsb29rIGxpa2UgdGhpczoKLSAgKgotICAqIDx1bD4KLSAgKiA8bGk+eyB7IENvbW1hbmRMaW5lLlBPU0lUSU9OQUwsICJwYXJtMSIsIENvbW1hbmRMaW5lLk5PX0RVUFMsCi0gICogICAgICAgQ29tbWFuZExpbmUuUkVRVUlSRUQsICJwYXJtMSBoZWxwIHRleHQiIH0sCi0gICogPGxpPnsgQ29tbWFuZExpbmUuUE9TSVRJT05BTCwgInBhcm0yIiwgQ29tbWFuZExpbmUuTk9fRFVQUywKLSAgKiAgICAgICBDb21tYW5kTGluZS5SRVFVSVJFRCwgInBhcm0yIGhlbHAgdGV4dCIgfSwKLSAgKiA8bGk+eyBDb21tYW5kTGluZS5QT1NJVElPTkFMLCAib3B0aW9uYWxfcGFybXMiLCBDb21tYW5kTGluZS5EVVBTX09LLAotICAqICAgICAgIENvbW1hbmRMaW5lLlJFUVVJUkVELCAib3B0aW9uYWwgaGVscCB0ZXh0IiB9LAotICAqIDxsaT57ICJhYiIsICJwYXJtX2Zvcl9hYiIsIENvbW1hbmRMaW5lLk5PX0RVUFMsCi0gICogICAgICAgQ29tbWFuZExpbmUuT1BUSU9OQUwsICJhYiBoZWxwIHRleHQiIH0sCi0gICogPGxpPnsgImhlbHAiLCBDb21tYW5kTGluZS5OT19QQVJNLCBDb21tYW5kTGluZS5OT19EVVBTLAotICAqICAgICAgIENvbW1hbmRMaW5lLk9QVElPTkFMLCAiZGlzcGxheXMgdGhpcyBoZWxwIHRleHQiIH0gfQotICAqIDwvdWw+Ci0gICoKLSAgKiA8cD5TdHJpbmcgYXJyYXkgcnVsZXM6Ci0gICoKLSAgKiA8b2w+Ci0gICogPGxpPlBvc2l0aW9uYWwgcm93cyBtdXN0IGFsd2F5cyBjb21lIGZpcnN0IGluIHRoZSBhcnJheS4gIFRoZXNlIHJvd3MgbXVzdAotICAqICAgICBoYXZlIGEgbmFtZSBzcGVjaWZpZWQgaW4gY29sdW1uIDIsIGV4Y2VwdCBmb3Igb25lIGNhc2UuICBJZiB5b3Ugd2FudCB0byBpbmRpY2F0ZSB0aGF0Ci0gICogICAgIHRoZXJlIGFyZSBubyBvcHRpb25hbCBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgeW91IHdvdWxkIHB1dCBDb21tYW5kTGluZS5OT19QQVJNCi0gICogICAgIGluIGNvbHVtbiAyIG9mIHRoZSBwb3NpdGlvbmFsIHJvdy4gIFlvdSB3b3VsZCBhbHNvIG5lZWQgdG8gcHV0IENvbW1hbmRMaW5lLk9QVElPTkFMCi0gICogICAgIGluIGNvbHVtbiA0IHNpbmNlIHRoaXMgcm93IGlzIGZvciBvcHRpb25hbCBwYXJhbWV0ZXJzKG9yIHRoZSBub24tZXhpc3RlbmNlIG9mCi0gICogICAgIG9wdGlvbmFsIHBhcmFtZXRlcnMgYXMgdGhlIGNhc2UgbWF5IGJlKQotICAqIDxsaT5PbmNlIGEgcG9zaXRpb25hbCByb3cgc3BlY2lmaWVzIHRoYXQgaXQgaXMgb3B0aW9uYWwsIG5vIGZ1cnRoZXIgcG9zaXRpb25hbCByb3dzCi0gICogICAgIG1heSBiZSBzcGVjaWZpZWQuCi0gICogPGxpPkF0IGxlYXN0IG9uZSBwb3NpdGlvbmFsIHJvdyBtdXN0IGJlIHNwZWNpZmllZCwgZXZlbiBpZiBpdCBpcyB0byBqdXN0IHRvIHNwZWNpZnkgdGhhdAotICAqICAgICB0aGVyZSBhcmUgbm8gb3B0aW9uYWwgcGFyYW1ldGVycy4KLSAgKiA8bGk+RmxhZyBuYW1lcyBtdXN0IGJlIGluIGxvd2VyIGNhc2UuICBOb3RlOiB0aGUgdXNlciBjYW4gc3BlY2lmeSB1cHBlciBvciBsb3dlciBjYXNlCi0gICogICAgIG9uIHRoZSBjb21tYW5kIGxpbmUuCi0gICogPGxpPklmIGEgZmxhZyBoYXMgYSBwYXJhbWV0ZXIgdGhlIG5hbWUgb2YgdGhlIHBhcmFtZXRlciBzaG91bGQgYmUgcHV0IGludG8gY29sdW1uIDIuCi0gICogICAgIG90aGVyd2lzZSBDb21tYW5kTGluZS5OT19QQVJNIHNob3VsZCBiZSBwdXQgaW4gY29sdW1uIDIuCi0gICogPGxpPklmIGEgZmxhZyBpcyBhbGxvd2VkIHRvIGFwcGVhciBtb3JlIHRoYW4gb25jZSBvbiB0aGUgY29tbWFuZCBsaW5lIHRoZW4KLSAgKiAgICAgQ29tbWFuZExpbmUuRFVQU19PSyBzaG91bGQgYmUgcHV0IGludG8gY29sdW1uIDMsIG90aGVyd2lzZSBDb21tYW5kTGluZS5OT19EVVBTCi0gICogICAgIHNob3VsZCBiZSBwdXQgaW50byBjb2x1bW4gMy4KLSAgKiA8bGk+SWYgYSBmbGFnIG11c3QgYmUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUgdGhlbiBDb21tYW5kTGluZS5SRVFVSVJFRCBzaG91bGQKLSAgKiAgICAgYmUgc3BlY2lmaWVkIGluIGNvbHVtbiA0LCBvdGhlcndpc2UgQ29tbWFuZExpbmUuT1BUSU9OQUwgc2hvdWxkIGJlIHNwZWNpZmllZC4KLSAgKiA8bGk+QSBoZWxwIGZsYWcgbXVzdCBiZSBzcGVjaWZpZWQuCi0gICogPGxpPlRoZSBzdHJpbmdzIHNwZWNpZmllZCBpbiB0aGUgZmxhZ3MgY29sdW1uLCB0aGUgcGFyYW1ldGVyIG5hbWUgY29sdW1uLCBhbmQgdGhlCi0gICogICAgIGhlbHAgY29sdW1uIGFyZSBhbHdheXMgdHJhbnNsYXRlZCB1c2luZyB0aGUgcmVzb3VyY2UgYnVuZGxlIHNwZWNpZmllZC4gIE9mCi0gICogICAgIGNvdXJzZSB0aGUgc3BlY2lhbCBzdHJpbmcgdmFsdWVzIHN1Y2ggYXMgUE9TSVRJT05BTCBhbmQgTk9fUEFSTSBhcmUgbm90Ci0gICogICAgIHRyYW5zbGF0ZWQuCi0gICogPC9vbD4KLSAgKgotICAqIDxwPiBGbGFnIG1hdGNoaW5nIHJ1bGVzOgotICAqIDxvbD4KLSAgKiA8bGk+VGhlIHBhcnNlciB3aWxsIGF0dGVtcHQgdG8gbWF0Y2ggYSB1c2VyIHNwZWNpZmllZCBmbGFnIHdpdGggdGhlIG1pbmltdW0gbnVtYmVyCi0gICogICAgIG9mIHByb2dyYW1tZXIgc3BlY2lmaWVkIGZsYWcgY2hhcmFjdGVycy4gIEZvciBleGFtcGxlLCBpZiB0aGUgcHJvZ3JhbW1lciBoYXMKLSAgKiAgICAgc3BlY2lmaWVkIHRoYXQgdGhlIGZsYWcgaXMgImhlbHAiIHRoZSB1c2VyIGNvdWxkIHNwZWNpZnkgIi1oIiwgIi1oZSIsICItaGVsIiwgb3IKLSAgKiAgICAgIi1oZWxwIi4gIElmIHRoZSBwcm9ncmFtbWVyIGhhcyBhbHNvIHNwZWNpZmllZCBhIGZsYWcgY2FsbGVkICJoZWxsbyIsIHRoZQotICAqICAgICB1c2VyIHdvdWxkIGdldCBhbiBlcnJvciBtZXNzYWdlIGZvciBzcGVjaWZpbmcgZWl0aGVyICItaCIsICItaGUiIG9yICItaGVsIiwgc2luY2UKLSAgKiAgICAgaXQgaXMgYW1iaWd1b3VzIHdoaWNoIGZsYWcgaXMgYmVpbmcgcmVmZXJlZCB0by4gIEJvdGggIi1oZWxsIiBhbmQgIi1oZWxsbyIKLSAgKiAgICAgd291bGQgYmUgb2sgZm9yIHRoZSB1c2VyIHRvIHNwZWNpZnkgdGhlIGhlbGxvIGZsYWcgb24gdGhlIGNvbW1hbmQgbGluZS4KLSAgKiA8bGk+SWYgYSBmbGFnIGhhcyBhIHBhcmFtZXRlciwgdGhlIHBhcmFtZXRlciBtYXkgYmUgaW1tZWRpYXRlbHkgYWRqYWNlbnQgdG8gdGhlIGZsYWcuCi0gICogICAgIEZvciBleGFtcGxlIGlmICJhYmNkIiBpcyBzcGVjaWZpZWQgYXMgYSBmbGFnIHdpdGggYSBwYXJhbWV0ZXIsIHRoZSB1c2VyIGNvdWxkCi0gICogICAgIHNwZWNpZnkgdGhlIGZvbGxvd2luZyBhc3N1bWluZyB0aGVyZSBhcmUgbm8gb3RoZXIgYW1iaWd1b3VzIGZsYWdzLiAiLWFiY2RwYXJtIiwKLSAgKiAgICAgIi1hYmNwYXJtIiwgIi1hYnBhcm0iLCBvciAiLWFwYXJtIiB3aGVyZSBwYXJtIGlzIHRoZSBwYXJhbWV0ZXIgZm9yIHRoZSBmbGFnLgotICAqICAgICAoT2YgY291cnNlIHRoZSB1c2VyIGNhbiBhbHdheXMgcHV0IGEgd2hpdGUgc3BhY2UgYmV0d2VlbiB0aGUgZmxhZyBhbmQgdGhlCi0gICogICAgIHBhcmFtZXRlci4pCi0gICogPGxpPklmIGEgZmxhZyBkb2VzIG5vdCBoYXZlIGEgcGFyYW1ldGVyIGFuZCBhIHBhcmFtZXRlciBpcyBhZGphY2VudCB0byBpdCB0aGVuIHRoaXMKLSAgKiAgICAgcGFyYW1ldGVyIGlzIGludGVycHJldGVkIGFzIGEgcG9zaXRpb25hbCBwYXJhbWV0ZXIuICBGb3IgZXhhbXBsZSBpZiAiYWJjYiIgaXMKLSAgKiAgICAgc3BlY2lmaWVkIGFzIGEgZmxhZyBhbmQgdGhlIHVzZXIgc3BlY2lmaWVzICItYWJoZWxsbyIsIHRoZW4gdGhlIGZpcnN0ICJhYiIgd2lsbCBiZQotICAqICAgICBpbnRlcnByZXRlZCBhcyB0aGUgZmxhZyBhbmQgImhlbGxvIiB3aWxsIGJlIGludGVycHJldGVkIGFzIGEgcG9zaXRpb25hbAotICAqICAgICBwYXJhbWV0ZXIuCi0gICogPC9vbD4KLSAgKgotICAqIEBhdXRob3IgUGV0ZXIgTW9vZ2sKLSAgKiBAZGF0ZSAgIEp1bHkgMTMsIDIwMDAKLSoqLwotCi1wdWJsaWMgY2xhc3MgQ29tbWFuZExpbmUKLXsKLSAgLy8gQ29uc3RhbnQgc3RyaW5ncyB0aGF0IHRoZSB1c2VyIHNob3VsZCB1c2UgaW4gdGhlaXIgZmxhZ3NfaW5mbyBpbnB1dCBhcnJheS4KLSAgLyoqCi0gICAgKiBTcGVjaWZpZXMgdGhhdCB0aGlzIGZsYWcgb3IgcG9zaXRpb25hbCBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQuCi0gICoqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRVFVSVJFRCAgID0gInJlcXVpcmVkIjsKLSAgLyoqCi0gICAgKiBTcGVjaWZpZXMgdGhhdCB0aGlzIGZsYWcgb3IgcG9zaXRpb25hbCBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwuCi0gICoqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBPUFRJT05BTCAgID0gIm9wdGlvbmFsIjsKLSAgLyoqCi0gICAgKiBTcGVjaWZpZXMgdGhhdCB0aGlzIGZsYWcgbWF5IGJlIHNwZWNpZmllZCBtb3JlIHRoYW4gb25jZSBvbiB0aGUgY29tbWFuZCBsaW5lLgotICAgICogTm90ZTogVGhpcyBzdHJpbmcgaGFzIG5vIG1lYW5pbmcgZm9yIHBvc2l0aW9uYWwgcGFyYW1ldGVycy4KLSAgKiovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERVUFNfT0sgICAgPSAiZHVwc19vayI7Ci0gIC8qKgotICAgICogU3BlY2lmaWVzIHRoYXQgdGhpcyBmbGFnIG1heSBub3QgYmUgc3BlY2lmaWVkIG1vcmUgdGhhbiBvbmNlIG9uIHRoZSBjb21tYW5kIGxpbmUuCi0gICAgKiBOb3RlOiBUaGlzIHN0cmluZyBoYXMgbm8gbWVhbmluZyBmb3IgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLgotICAqKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9fRFVQUyAgICA9ICJub19kdXBzIjsKLSAgLyoqCi0gICAgKiBTcGVjaWZpZXMgdGhhdCBhIHJvdyBpcyBhIHBvc2l0aW9uYWwgcGFyYW1ldGVyIHJvdy4KLSAgKiovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBPU0lUSU9OQUwgPSAiIjsKLSAgLyoqCi0gICAgKiBTcGVjaWZpZXMgdGhhdCBhIGZsYWcgaGFzIG5vIHBhcmFtZXRlci4gIEZvciBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgdGhpcwotICAgICogc3RyaW5nIGluZGljYXRlcyB0aGF0IHRoZXJlIGFyZSBubyBvcHRpb25hbCBwYXJhbWV0ZXJzLgotICAqKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9fUEFSTSAgICA9ICIiOwotICAKLSAgLyoqCi0gICAgKiBAcGFyYW0gZmxhZ3NfaW5mbyBUaGlzIHBhcmFtZXRlciBzcGVjaWZpZXMgdGhlIGNoYXJhY3RlcmlzdGljcyBvZiB0aGUKLSAgICAqICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgbGluZSBwYXJzZXIuICBTZWUgdGhlIGNsYXNzIGRlc2NyaXB0aW9uIGZvciBhCi0gICAgKiAgICAgICAgICAgICAgICAgICBkZWZpbml0aW9uIG9mIHdoYXQgdGhpcyBzdHJpbmcgYXJyYXkgc2hvdWxkIGxvb2sgbGlrZS4KLSAgICAqIEBwYXJhbSBoZWxwX2ZsYWcgIFRoaXMgc3RyaW5nIGluZGljYXRlcyB3aGljaCBmbGFnIGluIHRoZSBmbGFnc19pbmZvCi0gICAgKiAgICAgICAgICAgICAgICAgICBhcnJheSBpcyB0aGUgaGVscCBmbGFnLgotICAgICogQHBhcmFtIHRvb2xfbmFtZSAgVGhpcyBzdHJpbmcgaW5kaWNhdGVzIHRoZSBuYW1lIG9mIHRoZSB0b29sIHRoYXQgdGhpcwotICAgICogICAgICAgICAgICAgICAgICAgY29tbWFuZCBsaW5lIHBhcnNlciBpcyBiZWluZyB1c2VkIGZvci4gIFRoaXMgc3RyaW5nCi0gICAgKiAgICAgICAgICAgICAgICAgICBpcyBvbmx5IHVzZWQgd2hlbiBjcmVhdGluZyB0aGUgaGVscCB0ZXh0LgotICAqKi8KLSAgcHVibGljIENvbW1hbmRMaW5lKCBTdHJpbmdbXVtdICAgICBmbGFnc19pbmZvLAotICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICBoZWxwX2ZsYWcsCi0gICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyAgICAgICAgIHRvb2xfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VCdW5kbGUgZmxhZ01lc3NhZ2VzICkKLSAgICAgICAgICAgICAgICAgICAKLSAgICB0aHJvd3MgSW50ZXJuYWxFcnJvckV4YwotICB7Ci0gICAgdGhpcy5mbGFnc19pbmZvICAgPSBmbGFnc19pbmZvOwotICAgIHRoaXMuaGVscF9mbGFnICAgID0gaGVscF9mbGFnOwotICAgIHRoaXMudG9vbF9uYW1lICAgID0gdG9vbF9uYW1lOwotICAgIHRoaXMuZmxhZ01lc3NhZ2VzID0gZmxhZ01lc3NhZ2VzOwotICAgIAotICAgIG1lc3NhZ2VzID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKCAib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbW1hbmRsaW5lLmNvbW1hbmRsaW5lIiApOwotICAgIHZlcmlmeV9mbGFnc19pbmZvKCk7Ci0gIH0KLQotICAvKioKLSAgICAqIENhbGwgdGhpcyBtZXRob2QgdG8gcGFyc2UgYSBjb21tYW5kIGxpbmUuCi0gICAgKiBAcGFyYW0gYXJncyBUaGlzIGlzIHRoZSBzdHJpbmcgYXJyYXkgZnJvbSB0aGUgY29tbWFuZCBsaW5lLgotICAgICogQHRocm93cyBGbGFnX2Vycm9yIElmIHRoZSB1c2VyIGhhcyBzcGVjaWZpZWQgdGhlIGNvbW1hbmQgbGluZSBpbmNvcnJlY3RseQotICAgICogICAgICAgICAgICAgICAgICAgIGEgRmxhZ19lcnJvciBleGNlcHRpb24gd2lsbCBiZSB0aHJvd24uICBVc2UgZ2V0TWVzc2FnZQotICAgICogICAgICAgICAgICAgICAgICAgIHRvIGdldCBhIGRlc2NyaXB0aW9uIG9mIHRoZSB1c2VyIGVycm9yLgotICAgICoKLSAgICAqIEB0aHJvd3MgSGVscF9zcGVjaWZpZWQgSWYgdGhlIHVzZXIgc3BlY2lmaWVzIHRoZSBoZWxwIGZsYWcgdGhpcyBleGNlcHRpb24KLSAgICAqICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSB0aHJvd24uICBVc2UgZ2V0TWVzc2FnZSB0byBnZXQgYSBmdWxseQotICAgICogICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZWQgc3ludGF4IGRlc2NyaXB0aW9uIG9mIHRoaXMgY29tbWFuZCBsaW5lLgotICAqKi8KLSAgcHVibGljIHZvaWQgY2hlY2tfZmxhZ3MoIFN0cmluZ1tdIGFyZ3MgKSB0aHJvd3MgRmxhZ19lcnJvcgotICB7Ci0gICAgZmxhZ3Nfc3BlY2lmaWVkID0gbmV3IFZlY3RvcltmbGFnc19pbmZvLmxlbmd0aF07Ci0KLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgYXJncy5sZW5ndGg7IGluZGV4KysgKQotICAgIHsKLSAgICAgIGJvb2xlYW4gcHJvY2Vzc2VkX3RoZV9uZXh0X2FyZyA9IHByb2Nlc3NfYXJnKCBhcmdzLCBpbmRleCApOwotICAgICAgaWYoIHByb2Nlc3NlZF90aGVfbmV4dF9hcmcgPT0gdHJ1ZSApIGluZGV4Kys7Ci0gICAgfQotCi0gICAgLy8gSWYgaGVscCB3YXMgc3BlY2lmaWVkIHdlIHdpbGwgbm90IGNoZWNrIHRoZSByZWd1bGFyIHJ1bGVzLgotICAgIGlmKCAhZmxhZ19zcGVjaWZpZWQoIGhlbHBfZmxhZyApICkKLSAgICB7Ci0gICAgICAvLyBDaGVjayBmb3IgZmxhZ3MgYnJlYWtpbmcgdGhlIHJ1bGVzIHNwZWNpZmllZCBpbiBmbGFnc19pbmZvLgotICAgICAgY2hlY2tfcnVsZXMoKTsKLQotICAgICAgLy8gQ2FsbCBzdWJjbGFzc2VkIG1ldGhvZCB0byBzZWUgaWYgbW9yZSBwcm9jZXNzaW5nIGlzIHJlcXVpcmVkLgotICAgICAgbW9yZV9wcm9jZXNzaW5nKCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAgKiBUaGlzIG1ldGhvZCBpcyBmb3Igc3ViY2xhc3NlcyBvZiB0aGlzIGNsYXNzLiAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIGF0Ci0gICAgKiB0aGUgdmVyeSBlbmQgb2YgY2hlY2tfZmxhZ3MgbWV0aG9kLiAgSXQgaXMgaW50ZW5kZWQgdGhhdCBzdWJjbGFzc2VzIHdvdWxkCi0gICAgKiBwZXJmb3JtIGFkZGl0aW9uYWwgY29tbWFuZCBsaW5lIGNoZWNraW5nIGhlcmUuCi0gICoqLwotICBwcm90ZWN0ZWQgdm9pZCBtb3JlX3Byb2Nlc3NpbmcoKSB0aHJvd3MgRmxhZ19lcnJvciwgSW50ZXJuYWxFcnJvckV4YwotICB7Ci0gIH0KLQotICAvKioKLSAgICAqIE9uY2UgdGhlIGNvbW1hbmQgbGluZSBoYXMgYmVlbiBwYXJzZWQgYnkgY2FsbGluZyBjaGVja19mbGFncyBhCi0gICAgKiBjYWxsIGNhbiBiZSBtYWRlIHRvIHRoaXMgbWV0aG9kIHRvIGdldCB0aGUgcGFyYW1ldGVycyBmb3IgdGhpcyBmbGFnLgotICAgICogSWYgdGhlIGZsYWcgd2FzIG5vdCBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSBudWxsIHdpbGwgYmUgcmV0dXJuZWQuCi0gICAgKiBJZiB0aGUgZmxhZyB3YXMgc3BlY2lmaWVkLCBidXQgaGFzIG5vIHBhcmFtZXRlcnMgYSB2YWxpZCB2ZWN0b3Igd2lsbCBiZQotICAgICogcmV0dXJuZWQgY29udGFpbmluZyBhIG51bGwuCi0gICoqLwotICBwdWJsaWMgU3RyaW5nW10gZ2V0X2ZsYWdfcGFybXMoIFN0cmluZyBmbGFnICkKLSAgewotICAgIGludCAgICAgcm93ICAgICAgICA9IDA7Ci0gICAgYm9vbGVhbiBmbGFnX2ZvdW5kID0gZmFsc2U7Ci0KLSAgICB3aGlsZSggZmxhZ19mb3VuZCA9PSBmYWxzZSAmJiByb3cgPCBmbGFnc19pbmZvLmxlbmd0aCApCi0gICAgewotICAgICAgaWYoIGZsYWdzX2luZm9bcm93XVtGTEFHX0NPTF0uZXF1YWxzKCBmbGFnICkgKQotICAgICAgewotICAgICAgICBmbGFnX2ZvdW5kID0gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcm93Kys7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYoIGZsYWdfZm91bmQgPT0gdHJ1ZSApIAotICAgIHsKLSAgICAgIFZlY3RvciBwYXJtcyA9IGZsYWdzX3NwZWNpZmllZFtyb3ddOwotICAgICAgcmV0dXJuIHBhcm1zID09IG51bGwgPyBudWxsIDogKFN0cmluZ1tdKShwYXJtcy50b0FycmF5KCBuZXcgU3RyaW5nWzBdICkpOwotICAgIH0KLQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAgKiBDYWxsIHRoaXMgbWV0aG9kIHRvIGdldCBhbGwgb2YgdGhlIHBvc2l0aW9uYWwgcGFyYW1ldGVycy4KLSAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYm90aCB0aGUgcmVxdWlyZWQgcG9zaXRpb25hbHMgYW5kIHRoZQotICAgICogb3B0aW9uYWwgcG9zaXRpb25hbHMgaW4gdGhhdCBvcmRlci4gIElmIG5vIHBvc2l0aW9uYWwgcGFyYW1ldGVycwotICAgICogd2VyZSBzcGVjaWZpZWQgbnVsbCB3aWxsIGJlIHJldHVybmVkLgotICAqKi8KLSAgcHVibGljIFN0cmluZ1tdIGdldF9wb3NpdGlvbmFscygpCi0gIHsKLSAgICByZXR1cm4gKFN0cmluZ1tdKWZsYWdzX3NwZWNpZmllZFtQT1NJVElPTkFMX1JPV10udG9BcnJheSggbmV3IFN0cmluZ1swXSApOwotICB9Ci0KLSAgLyoqCi0gICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRydWUgaWYgdGhpcyBmbGFnIHdhcyBzcGVjaWZpZWQgYnkgdGhlIHVzZXIKLSAgICAqIG90aGVyd2lzZSBmYWxzZSBpcyByZXR1cm5lZC4KLSAgKiovCi0gIHB1YmxpYyBib29sZWFuIGZsYWdfc3BlY2lmaWVkKCBTdHJpbmcgZmxhZyApCi0gIHsKLSAgICByZXR1cm4gZ2V0X2ZsYWdfcGFybXMoIGZsYWcgKSAhPSBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGZ1bGx5IGZvcm1hdGVkIGhlbHAgdGV4dCBzeW50YXggZm9yIHRoaXMKLSAgICAqIGNvbW1hbmQgbGluZS4KLSAgKiovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0X2hlbHBfdGV4dCgpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgaGVscF90ZXh0ICA9IG5ldyBTdHJpbmdCdWZmZXIoNDAwKTsKLSAgICBpbnQgICAgICAgICAgaGVscF93aWR0aCA9IEhFTFBfTElORV9MRU4gLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAtICAgICAgICAgICAgICAvLyBibGFua3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLSAgICAgICAgICAgICAgLy8gZGFzaAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2ZsYWdfc2l6ZSAtICAvLyBmbGFnIGZpZWxkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0gICAgICAgICAgICAgIC8vIGJsYW5rCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbmFtZV9zaXplIC0gIC8vIG5hbWUgZmllbGQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE7ICAgICAgICAgICAgICAgLy8gYmxhbmsKLQotICAgIGhlbHBfdGV4dC5hcHBlbmQoIG1lc3NhZ2VzLmdldFN0cmluZyggRmxhZ01lc3NhZ2VzLlBBUlNFUl9JTkZPX1NZTlRBWCApICsKLSAgICAgICAgICAgICAgICAgICAgICAiOiAiICsgdG9vbF9uYW1lICsgIiAiICk7Ci0KLSAgICAvLyBEaXNwbGF5IHRoZSByZXF1aXJlZCBwb3NpdGlvbmFscyBpZiBhbnkuCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IHJlcXVpcmVkX3Bvc2l0aW9uYWxzOyBpbmRleCsrICkKLSAgICB7Ci0gICAgICBoZWxwX3RleHQuYXBwZW5kKCBmbGFnTWVzc2FnZXMuZ2V0U3RyaW5nKCBmbGFnc19pbmZvW2luZGV4XVtOQU1FX0NPTF0gKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAiICIgKTsKLSAgICB9Ci0KLSAgICBoZWxwX3RleHQuYXBwZW5kKCAiWyIgKyBtZXNzYWdlcy5nZXRTdHJpbmcoIEZsYWdNZXNzYWdlcy5QQVJTRVJfRkxBR1MgKSArCi0gICAgICAgICAgICAgICAgICAgICAgIl0gIiApOwotCi0gICAgaWYoIG9wdGlvbmFsX3Bvc2l0aW9uYWxzX2FsbG93ZWQgPT0gdHJ1ZSApCi0gICAgewotICAgICAgaGVscF90ZXh0LmFwcGVuZCggZmxhZ01lc3NhZ2VzLmdldFN0cmluZyggZmxhZ3NfaW5mb1tvcHRpb25hbF9saXN0X2luZGV4XVtOQU1FX0NPTF0gKSApOwotICAgIH0KLQotICAgIGhlbHBfdGV4dC5hcHBlbmQoICJcbiAgIiArIG1lc3NhZ2VzLmdldFN0cmluZyggRmxhZ01lc3NhZ2VzLlBBUlNFUl9JTkZPX1dIRVJFICkgKyAiXG4iICk7Ci0KLSAgICAvLyBDcmVhdGUgb25lIGxpbmUgb2YgZGVzY3JpcHRpb24gZm9yIGVhY2ggcGFyYW1ldGVyCi0gICAgZm9yKCBpbnQgcm93ID0gMDsgcm93IDwgZmxhZ3NfaW5mby5sZW5ndGg7IHJvdysrICkKLSAgICB7Ci0gICAgICBTdHJpbmcgY29sdW1uSWQgICA9IGZsYWdzX2luZm9bcm93XVtOQU1FX0NPTF07Ci0gICAgICBTdHJpbmcgY29sdW1uTmFtZSA9IGNvbHVtbklkID09IE5PX1BBUk0gPyAiIiA6IGZsYWdNZXNzYWdlcy5nZXRTdHJpbmcoIGNvbHVtbklkICk7Ci0KLSAgICAgIFN0cmluZyBmbGFnSWQgICAgID0gZmxhZ3NfaW5mb1tyb3ddW0ZMQUdfQ09MXTsKLSAgICAgIFN0cmluZyBmbGFnTmFtZSAgID0gZmxhZ0lkID09IFBPU0lUSU9OQUwgPyBQT1NJVElPTkFMIDogZmxhZ01lc3NhZ2VzLmdldFN0cmluZyhmbGFnSWQpOwotCi0gICAgICBpbnQgZmxhZ19wYWRkaW5nID0gbWF4X2ZsYWdfc2l6ZSAtIGZsYWdOYW1lLmxlbmd0aCgpOwotICAgICAgaW50IG5hbWVfcGFkZGluZyA9IG1heF9uYW1lX3NpemUgLSBjb2x1bW5OYW1lLmxlbmd0aCgpOwotCi0gICAgICAvLyBTa2lwIHRoaXMgcm93IGlmIHRoaXMgaXMgYSBtYXJrZXIgZm9yIG5vIG9wdGlvbmFsIHBvc2l0aW9uYWxzLgotICAgICAgaWYoIGZsYWdzX2luZm9bcm93XVtGTEFHX0NPTF0gPT0gUE9TSVRJT05BTCAmJgotICAgICAgICAgIGZsYWdzX2luZm9bcm93XVtOQU1FX0NPTF0gPT0gTk9fUEFSTSApIGNvbnRpbnVlOwotCi0gICAgICBpZiggZmxhZ05hbWUgPT0gUE9TSVRJT05BTCApCi0gICAgICB7Ci0gICAgICAgIGhlbHBfdGV4dC5hcHBlbmQoIGdldEJsYW5rcygzICkgKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgaGVscF90ZXh0LmFwcGVuZCggIiAgLSIgKyBmbGFnTmFtZSApOwotICAgICAgfQotCi0gICAgICBoZWxwX3RleHQuYXBwZW5kKCBnZXRCbGFua3MoIGZsYWdfcGFkZGluZyArIDEgKSApOwotICAgICAgaGVscF90ZXh0LmFwcGVuZCggY29sdW1uTmFtZSApOwotICAgICAgaGVscF90ZXh0LmFwcGVuZCggZ2V0QmxhbmtzKCBuYW1lX3BhZGRpbmcgKyAxICkgKTsKLQotICAgICAgU3RyaW5nICAgY29sdW1uSGVscCA9IGZsYWdNZXNzYWdlcy5nZXRTdHJpbmcoIGZsYWdzX2luZm9bcm93XVtIRUxQX0NPTF0gKTsKLSAgICAgIFN0cmluZ1tdIHNwbGl0X2hlbHBfdGV4dAotICAgICAgICA9IFN0cmluZ1V0aWxzLnNwbGl0dGVyKCBjb2x1bW5IZWxwLCBoZWxwX3dpZHRoICk7Ci0KLSAgICAgIGlmKCBzcGxpdF9oZWxwX3RleHQubGVuZ3RoID4gMCApCi0gICAgICAgIGhlbHBfdGV4dC5hcHBlbmQoIHNwbGl0X2hlbHBfdGV4dFswXSArICJcbiIgKTsKLSAgICAgIGVsc2UKLSAgICAgICAgaGVscF90ZXh0LmFwcGVuZCggIlxuIiApOwotCi0gICAgICBmb3IoIGludCBpbmRleCA9IDE7IGluZGV4IDwgc3BsaXRfaGVscF90ZXh0Lmxlbmd0aDsgaW5kZXgrKyApCi0gICAgICB7Ci0gICAgICAgIGhlbHBfdGV4dC5hcHBlbmQoIGdldEJsYW5rcyggSEVMUF9MSU5FX0xFTiAtIGhlbHBfd2lkdGggKSApOwotICAgICAgICBoZWxwX3RleHQuYXBwZW5kKCBzcGxpdF9oZWxwX3RleHRbaW5kZXhdICsgIlxuIiApOwotICAgICAgfQotICAgICAgCi0gICAgICBoZWxwX3RleHQuYXBwZW5kKCAiXG4iICk7Ci0gICAgfQotCi0gICAgcmV0dXJuICIiICsgaGVscF90ZXh0OwotICB9Ci0gIAotICAvKioKLSAgICogIFJldHVybiBhIHN0cmluZyB3aXRoIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGJsYW5rcy4KLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGdldEJsYW5rcyggaW50IGNvdW50ICkKLSAgewotICAJY2hhcltdIGJsYW5rcyA9IG5ldyBjaGFyW2NvdW50XTsKLSAgCUFycmF5cy5maWxsKCBibGFua3MsIDAsIGNvdW50LCAnICcgKTsKLSAgCQotICAJcmV0dXJuIG5ldyBTdHJpbmcoIGJsYW5rcyApOwotICB9Ci0KLSAgLyoqCi0gICAgKiBUaGlzIGNsYXNzIGlzIHRoZSBiYXNlIGZvciBhbGwgY29tbWFuZCBsaW5lIGV4Y2VwdGlvbiBjbGFzc2VzLgotICAqKi8KLSAgc3RhdGljIHB1YmxpYyBjbGFzcyBFcnJvckV4YyBleHRlbmRzIEV4Y2VwdGlvbgotICB7Ci0gIAkvKioKLQkgKiBDb21tZW50IGZvciA8Y29kZT5zZXJpYWxWZXJzaW9uVUlEPC9jb2RlPgotCSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDMyNTc1NjczMTcyNTk3OTM3MjBMOwotCi0JcHVibGljIEVycm9yRXhjKCBTdHJpbmcgbWVzc2FnZSwgU3RyaW5nW10gYXJncyApCi0gIAl7Ci0gIAkgIHN1cGVyKCBNZXNzYWdlRm9ybWF0LmZvcm1hdCggbWVzc2FnZSwgYXJncyApICk7Ci0gIAl9Ci0gIH0KLQotICAvKioKLSAgICAqIFRoaXMgY2xhc3Mgd2lsbCBiZSB0aHJvd24gd2hlbiBhbiBpbnRlcm5hbCBlcnJvciBpcyBkZXRlY3RlZC4KLSAgICAqIFRoaXMgdXN1YWxseSBoYXBwZW5zIGlmIHRoZSBmbGFnIGRlc2NyaXB0aW9uIGluZm9ybWF0aW9uIHdhcwotICAgICogc3BlY2lmaWVkIGluY29ycmVjdGx5LgotICAqKi8KLSAgc3RhdGljIHB1YmxpYyBjbGFzcyBJbnRlcm5hbEVycm9yRXhjIGV4dGVuZHMgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uCi0gIHsgIAkKLSAgCS8qKgotCSAqIENvbW1lbnQgZm9yIDxjb2RlPnNlcmlhbFZlcnNpb25VSUQ8L2NvZGU+Ci0JICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMzI1ODQxMDYyMTEzNjYxNDQ1MEw7Ci0KLQlwdWJsaWMgSW50ZXJuYWxFcnJvckV4YyggU3RyaW5nIG1lc3NhZ2UsIFN0cmluZ1tdIGFyZ3MgKQotICAJewotICAJICBzdXBlciggTWVzc2FnZUZvcm1hdC5mb3JtYXQoIG1lc3NhZ2UsIGFyZ3MgKSApOwotICAJfQotICAJCi0gIAlwdWJsaWMgSW50ZXJuYWxFcnJvckV4YyggU3RyaW5nIG1lc3NhZ2UgKQotICAJewotICAJICB0aGlzKCBtZXNzYWdlLCAoU3RyaW5nW10pbnVsbCApOwotICAJfQotICAJCi0gIAlwdWJsaWMgSW50ZXJuYWxFcnJvckV4YyggU3RyaW5nIG1lc3NhZ2UsIFN0cmluZyBhcmcgKQotICAJewotICAJICB0aGlzKCBtZXNzYWdlLCBuZXcgU3RyaW5nW117IGFyZyB9ICk7Ci0gIAl9Ci0gIH0KLQotICAvKioKLSAgICAqIFRoaXMgY2xhc3Mgd2lsbCBiZSB0aHJvd24gaWYgYSB1c2VyIGVycm9yIG9jY3VycyB3aGlsZSBwYXJzaW5nIHRoZSBjb21tYW5kIGxpbmUuCi0gICoqLwotICBzdGF0aWMgcHVibGljIGNsYXNzIEZsYWdfZXJyb3IgZXh0ZW5kcyBFcnJvckV4YwotICB7Ci0gICAgLyoqCi0JICogQ29tbWVudCBmb3IgPGNvZGU+c2VyaWFsVmVyc2lvblVJRDwvY29kZT4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAzODMyNjIxNzc2ODc3NjYzNTM3TDsKLQotCXB1YmxpYyBGbGFnX2Vycm9yKCBTdHJpbmcgbWVzc2FnZSwgU3RyaW5nW10gYXJncyApCi0gICAgewotICAgICAgc3VwZXIoIG1lc3NhZ2UsIGFyZ3MgKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRmxhZ19lcnJvciggU3RyaW5nIG1lc3NhZ2UsIFN0cmluZyBhcmcgKQotICAgIHsKLSAgICAgIHN1cGVyKCBtZXNzYWdlLCBuZXcgU3RyaW5nW117IGFyZyB9ICk7Ci0gICAgfQotCi0gICAgcHVibGljIEZsYWdfZXJyb3IoIFN0cmluZyBtZXNzYWdlICkKLSAgICB7Ci0gICAgICBzdXBlciggbWVzc2FnZSwgbnVsbCApOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgICogVHJpZXMgdG8gcHJvY2VzcyBhIHNpbmdsZSBmbGFnIG9uIHRoZSBjb21tYW5kIGxpbmUuCi0gICAgKiBAcGFyYW0gIGFyZ3MgICAgICBBbGwgdGhlIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzLgotICAgICogQHBhcmFtICBhcmdfaW5kZXggVGhpcyBpcyB0aGUgaW5kZXggb2YgdGhlIGFyZ3VtZW50IHRoYXQgaXMgdG8gYmUgcHJvY2Vzc2VkLgotICAgICogQHJldHVybiByZXR1cm5zIHRydWUgaWYgdGhlIGFyZ3VtZW50IHdlIGFyZSBwcm9jZXNzaW5nIGlzIGEgZmxhZyB0aGF0IGhhcyBhCi0gICAgKiAgICAgICAgIHBhcmFtZXRlciBhbmQgdGhlIHBhcmFtZXRlciBpcyBzcGVjaWZpZWQgaW4gdGhlIG5leHQgYXJndW1lbnQuCi0gICoqLwotICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc19hcmcoIFN0cmluZ1tdIGFyZ3MsIGludCBhcmdfaW5kZXggKSB0aHJvd3MgRmxhZ19lcnJvcgotICB7Ci0gICAgYm9vbGVhbiBwcm9jZXNzZWRfbmV4dF9hcmcgPSBmYWxzZTsKLQotICAgIGlmKCBhcmdzW2FyZ19pbmRleF0uY2hhckF0KDApID09ICctJyApCi0gICAgewotICAgICAgLy8gVGhpcyBpcyB0aGUgc3RhcnQgb2YgYSBmbGFnLgotICAgICAgaW50IGZsYWdfaW5kZXggPSAxOwotICAgICAgaW50IGluZm9faW5kZXggPSBnZXRfaW5mb19pbmRleCggYXJnc1thcmdfaW5kZXhdLCBmbGFnX2luZGV4ICk7Ci0gICAgICBpbnQgbWF4X2luZGV4ICA9IGdldF9tYXhfaW5kZXgoIGFyZ3NbYXJnX2luZGV4XSwgZmxhZ19pbmRleCwgaW5mb19pbmRleCApOwotCi0gICAgICBpZiggZmxhZ3NfaW5mb1tpbmZvX2luZGV4XVtOQU1FX0NPTF0gIT0gTk9fUEFSTSApCi0gICAgICB7Ci0gICAgICAgIC8vIFRoaXMgZmxhZyB0YWtlcyBhIHBhcmFtZXRlciBzbyBjaGVjayBpZiBpdCBpcyBzdHVjayB0byB0aGlzCi0gICAgICAgIC8vIGFyZy4KLSAgICAgICAgaWYoIG1heF9pbmRleCA8IGFyZ3NbYXJnX2luZGV4XS5sZW5ndGgoKSApCi0gICAgICAgIHsKLSAgICAgICAgICBhZGRfZmxhZ19wYXJtKCBpbmZvX2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbYXJnX2luZGV4XS5zdWJzdHJpbmcoIG1heF9pbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzW2FyZ19pbmRleF0ubGVuZ3RoKCkgKSApOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIC8vIFRoaXMgZmxhZyBoYXMgYSBwYXJhbWV0ZXIgYW5kIGl0IHdhc24ndCBzdHVjayB0byB0aGUgZmxhZywKLSAgICAgICAgICAvLyBzbyB3ZSB3aWxsIHRyeSB0byBnZXQgaXQgZnJvbSB0aGUgbmV4dCBhcmcuCi0gICAgICAgICAgaWYoIGFyZ19pbmRleCsxIDwgYXJncy5sZW5ndGggJiYKLSAgICAgICAgICAgICAgYXJnc1thcmdfaW5kZXgrMV0uY2hhckF0KDApICE9ICctJyApCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gV2UgZm91bmQgYW4gcGFyYW1ldGVyIGluIHRoZSBuZXh0IHN0cmluZyBzbyB3ZSB3aWxsIHVzZSB0aGlzCi0gICAgICAgICAgICAvLyBvbmUgYXMgYSBwYXJhbWV0ZXIgZm9yIHRoaXMgZmxhZy4gIE5vdGU6IGlmIHdhcyBubyBwYXJhbWV0ZXIKLSAgICAgICAgICAgIC8vIGFmdGVyIHRoZSBmbGFnIGF0IGFsbCwgdGhlIGVycm9yIHdpbGwgYmUgY2F1Z2h0IGluIHRoZQotICAgICAgICAgICAgLy8gY2hlY2tfcnVsZXMgbWV0aG9kLgotICAgICAgICAgICAgYWRkX2ZsYWdfcGFybSggaW5mb19pbmRleCwgYXJnc1thcmdfaW5kZXgrMV0gKTsKLSAgICAgICAgICAgIHByb2Nlc3NlZF9uZXh0X2FyZyA9IHRydWU7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBFcnJvciBtaXNzaW5nIHBhcmFtYXRlci4gVGhpcyBlcnJvciBpcyBjYXVnaHQgYnkgY2hlY2tfcnVsZXMuCi0gICAgICAgICAgICBhZGRfZmxhZ19wYXJtKCBpbmZvX2luZGV4LCBudWxsICk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIFRoZSBmbGFnIGRvZXMgbm90IGhhdmUgYSBwYXJhbWV0ZXIgc28gd2Ugd2lsbCBhZGQgYSBudWxsLgotICAgICAgICBhZGRfZmxhZ19wYXJtKCBpbmZvX2luZGV4LCBudWxsICk7Ci0KLSAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIGEgcG9zaXRpb25hbCBwYXJhbWV0ZXIgaXMgc3R1Y2sgdG8gdGhpcyBmbGFnLgotICAgICAgICBpZiggbWF4X2luZGV4IDwgYXJnc1thcmdfaW5kZXhdLmxlbmd0aCgpICkKLSAgICAgICAgewotICAgICAgICAgIGFkZF9wb3NpdGlvbmFsKCBhcmdzW2FyZ19pbmRleF0uc3Vic3RyaW5nKCBtYXhfaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbYXJnX2luZGV4XS5sZW5ndGgoKSApICk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIFRoaXMgaXMgYSBwb3NpdGlvbmFsIHBhcmFtZXRlci4KLSAgICAgIGFkZF9wb3NpdGlvbmFsKCBhcmdzW2FyZ19pbmRleF0gKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcHJvY2Vzc2VkX25leHRfYXJnOwotICB9Ci0KLSAgLyoqCi0gICAgKiBGaW5kcyB0aGUgcm93IGZvciB0aGUgZmxhZyB0aGF0IHVuaXF1ZWx5IG1hdGNoZWQgdGhpcyBmbGFnIHN0ci4KLSAgICAqIEByZXR1cm4gcmV0dXJucyB0aGUgZmxhZ3NfaW5mbyBpbmRleCBvZiB0aGUgbWF0Y2hpbmcgZmxhZy4KLSAgKiovCi0gIHByaXZhdGUgaW50IGdldF9pbmZvX2luZGV4KCBTdHJpbmcgZmxhZ19zdHIsIGludCBzdGFydF9pbmRleCApCi0gICAgdGhyb3dzIEZsYWdfZXJyb3IKLSAgewotICAgIC8vaW50IGluZm9fc3RhcnQgID0gMTsKLSAgICAvL2ludCBpbmZvX2VuZCAgICA9IGZsYWdzX2luZm8ubGVuZ3RoOwotICAgIGludCBpbmZvX2luZGV4OwotICAgIGludCBmb3VuZF9jb3VudCA9IDA7Ci0gICAgaW50IGluZm9fY29sX2luZGV4ID0gMDsKLSAgICBpbnQgbGFzdF9pbmZvX2luZGV4ID0gMDsKLQotICAgIEJpdFNldCBmbGFnc19yZWplY3RlZCA9IG5ldyBCaXRTZXQoKTsKLQotICAgIC8vIExvb3Agb3ZlciBlYWNoIGNoYXIgaW4gZmxhZ19zdHIuICBOb3RlOiB3ZSB3aWxsIHByb2JhYmx5IGJhaWwgZWFybHkuCi0gICAgZm9yKCBpbnQgZmxhZ19jb2xfaW5kZXggPSBzdGFydF9pbmRleDsgZmxhZ19jb2xfaW5kZXggPCBmbGFnX3N0ci5sZW5ndGgoKTsgZmxhZ19jb2xfaW5kZXgrKyApCi0gICAgewotICAgICAgLy8gTG9vcCBvdmVyIGVhY2ggZmxhZyBpbiBmbGFnX2luZm8KLSAgICAgIGZvciggaW5mb19pbmRleCA9IDA7IGluZm9faW5kZXggPCBmbGFnc19pbmZvLmxlbmd0aDsgaW5mb19pbmRleCsrICkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIGZsYWdJZCAgID0gZmxhZ3NfaW5mb1tpbmZvX2luZGV4XVtGTEFHX0NPTF07Ci0gICAgICAgIFN0cmluZyBmbGFnTmFtZSA9IGZsYWdJZCA9PSBQT1NJVElPTkFMID8gUE9TSVRJT05BTCA6IGZsYWdNZXNzYWdlcy5nZXRTdHJpbmcoIGZsYWdJZCApOwotCi0gICAgICAgIGlmKCBmbGFnc19yZWplY3RlZC5nZXQoIGluZm9faW5kZXggKSA9PSBmYWxzZSAmJgotICAgICAgICAgICAgaW5mb19jb2xfaW5kZXggPCBmbGFnTmFtZS5sZW5ndGgoKSAmJgotICAgICAgICAgICAgICBDaGFyYWN0ZXIudG9Mb3dlckNhc2UoZmxhZ19zdHIuY2hhckF0KGZsYWdfY29sX2luZGV4KSkgPT0KLSAgICAgICAgICAgICAgZmxhZ05hbWUuY2hhckF0KGluZm9fY29sX2luZGV4KSApCi0gICAgICAgIHsKLSAgICAgICAgICBmb3VuZF9jb3VudCsrOwotICAgICAgICAgIGxhc3RfaW5mb19pbmRleCA9IGluZm9faW5kZXg7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgZmxhZ3NfcmVqZWN0ZWQuc2V0KCBpbmZvX2luZGV4ICk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgaWYoIGZvdW5kX2NvdW50ID09IDEgKQotICAgICAgewotICAgICAgICAvLyBXZSBoYXZlIGEgbWF0Y2guCi0gICAgICAgIHJldHVybiBsYXN0X2luZm9faW5kZXg7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmKCBmb3VuZF9jb3VudCA9PSAwICkKLSAgICAgIHsKLSAgICAgICAgLy8gRmxhZyBub3QgZm91bmQgYXQgYWxsLgotICAgICAgICB0aHJvdyBuZXcgRmxhZ19lcnJvciggbWVzc2FnZXMuZ2V0U3RyaW5nKCBGbGFnTWVzc2FnZXMuUEFSU0VSX0VSUk9SX0ZMQUdfTk9UX0ZPVU5EICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnX3N0ci5zdWJzdHJpbmcoIHN0YXJ0X2luZGV4ICkgKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gTW9yZSB0aGFuIG9uZSBmbGFnIHdhcyBmb3VuZCB3aXRoIHRoaXMgY2hhciBzbyB3ZSB3aWxsIGdvIHRvIHRoZQotICAgICAgICAvLyBuZXh0IGNoYXIgdG8gdW5pcXVlbHkgbWF0Y2ggaXQuCi0gICAgICAgIGluZm9fY29sX2luZGV4Kys7Ci0gICAgICAgIC8vaW5mb19zdGFydCA9IGxhc3RfaW5mb19pbmRleCAtIGZvdW5kX2NvdW50ICsgMTsKLSAgICAgICAgLy9pbmZvX2VuZCAgID0gbGFzdF9pbmZvX2luZGV4ICsgMTsKLSAgICAgICAgZm91bmRfY291bnQgPSAwOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIFRoZSBvbmx5IHdheSB0byBnZXQgdG8gdGhpcyBjb2RlIGlzIGlmIHRoZSBsb29wIGV4aXRlZCB3aXRoCi0gICAgLy8gdGhlIGZvdW5kX2NvdW50IGdyZWF0ZXIgdGhhbiAxLiAgVGhlcmVmb3JlLCB0aGUgZmxhZyBzcGVjaWZpZWQgaXMKLSAgICAvLyBhbWJpZ3VvdXMuCi0gICAgdGhyb3cgbmV3IEZsYWdfZXJyb3IoIG1lc3NhZ2VzLmdldFN0cmluZyggRmxhZ01lc3NhZ2VzLlBBUlNFUl9FUlJPUl9BTUJJR1VPVVNfRkxBRyApLAotICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnX3N0ci5zdWJzdHJpbmcoIHN0YXJ0X2luZGV4KSApOwotICB9Ci0KLSAgLyoqCi0gICAgKiBUaGlzIG1ldGhvZCB0cmllcyB0byBtYXRjaCBhcyBtYW55IGNoYXJhY3RlcnMgYXMgcG9zc2libGUgb2YgdGhlIHVzZXIKLSAgICAqIHNwZWNpZmllZCBmbGFnIHdpdGggdGhlIG1hdGNoZWQgZmxhZyBzdHJpbmcuCi0gICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIHBvc2l0aW9uIG9mIHRoZSBsYXN0IG1hdGNoaW5nIGZsYWcgY2hhcmFyYWN0ZXIuCi0gICoqLwotICBwcml2YXRlIGludCBnZXRfbWF4X2luZGV4KCBTdHJpbmcgZmxhZ19zdHIsIGludCBmbGFnX3N0YXJ0LCBpbnQgaW5mb19pbmRleCApCi0gIHsKLSAgICBpbnQgZmxhZ19jb2xfaW5kZXggPSBmbGFnX3N0YXJ0OwotICAgIGludCBpbmZvX2NvbF9pbmRleCA9IDA7Ci0KLSAgICBTdHJpbmcgaW5mb19zdHIgPSBmbGFnTWVzc2FnZXMuZ2V0U3RyaW5nKCBmbGFnc19pbmZvW2luZm9faW5kZXhdW0ZMQUdfQ09MXSApOwotCi0gICAgd2hpbGUoIGZsYWdfY29sX2luZGV4IDwgZmxhZ19zdHIubGVuZ3RoKCkgJiYKLSAgICAgICAgICAgaW5mb19jb2xfaW5kZXggPCBpbmZvX3N0ci5sZW5ndGgoKSApCi0gICAgewotICAgICAgaWYoIENoYXJhY3Rlci50b0xvd2VyQ2FzZSggZmxhZ19zdHIuY2hhckF0KGZsYWdfY29sX2luZGV4KSApICE9Ci0gICAgICAgICAgaW5mb19zdHIuY2hhckF0KGluZm9fY29sX2luZGV4KSApCi0gICAgICAgIGJyZWFrOwotCi0gICAgICBmbGFnX2NvbF9pbmRleCsrOwotICAgICAgaW5mb19jb2xfaW5kZXgrKzsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmxhZ19jb2xfaW5kZXg7Ci0gIH0KLQotICAvKioKLSAgICAqIEFkZHMgYSBwb3NpdGlvbmFsIHBhcmFtZXRlciB0byBmbGFnc19zcGVjaWZpZWQuCi0gICoqLwotICBwcml2YXRlIHZvaWQgYWRkX3Bvc2l0aW9uYWwoIFN0cmluZyBwb3NpdGlvbmFsX3Bhcm0gKQotICB7Ci0gICAgaWYoIGZsYWdzX3NwZWNpZmllZFtQT1NJVElPTkFMX1JPV10gPT0gbnVsbCApCi0gICAgICBmbGFnc19zcGVjaWZpZWRbUE9TSVRJT05BTF9ST1ddID0gbmV3IFZlY3RvcigzKTsKLQotICAgIGZsYWdzX3NwZWNpZmllZFtQT1NJVElPTkFMX1JPV10uYWRkKCBwb3NpdGlvbmFsX3Bhcm0gKTsKLSAgfQotCi0gIC8qKgotICAgICogQWRkcyBhIGZsYWcgYW5kIGl0cyBwYXJhbWV0ZXIgdG8gZmxhZ3Nfc3BlY2lmaWVkLiAgSWYgb25seSB0aGUKLSAgICAqIGZsYWcgd2FzIHNwZWNpZmllZCwgdGhlbiBhIG51bGwgc2hvdWxkIGJlIHBhc3NlZCB0byBmbGFnX3Bhcm0uCi0gICoqLwotICBwcml2YXRlIHZvaWQgYWRkX2ZsYWdfcGFybSggaW50IGZsYWdfaW5kZXgsIFN0cmluZyBmbGFnX3Bhcm0gKQotICAgIHRocm93cyBGbGFnX2Vycm9yCi0gIHsKLSAgICBpZiggZmxhZ3NfaW5mb1tmbGFnX2luZGV4XVtEVVBfQ09MXSA9PSBOT19EVVBTICYmCi0gICAgICAgIGZsYWdzX3NwZWNpZmllZFtmbGFnX2luZGV4XSAhPSBudWxsICkKLSAgICAgIHRocm93IG5ldyBGbGFnX2Vycm9yKCBtZXNzYWdlcy5nZXRTdHJpbmcoIEZsYWdNZXNzYWdlcy5QQVJTRVJfRVJST1JfRFVQTElDQVRFX0ZMQUdTX05PVF9BTExPV0VEICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdNZXNzYWdlcy5nZXRTdHJpbmcoIGZsYWdzX2luZm9bZmxhZ19pbmRleF1bRkxBR19DT0xdICkgKTsKLQotICAgIGlmKCBmbGFnc19zcGVjaWZpZWRbZmxhZ19pbmRleF0gPT0gbnVsbCApCi0gICAgICBmbGFnc19zcGVjaWZpZWRbZmxhZ19pbmRleF0gPSBuZXcgVmVjdG9yKDMpOwotCi0gICAgZmxhZ3Nfc3BlY2lmaWVkW2ZsYWdfaW5kZXhdLmFkZCggZmxhZ19wYXJtICk7Ci0gIH0KLQotICAvKioKLSAgICAqIENoZWNrcyB0aGF0IHRoZSB1c2VyIGhhc24ndCBicm9rZW4gYW55IGNvbW1hbmQgbGluZSBydWxlcy4KLSAgKiovCi0gIHByaXZhdGUgdm9pZCBjaGVja19ydWxlcygpIHRocm93cyBGbGFnX2Vycm9yCi0gIHsKLSAgICAvLyBDaGVjayB0aGF0IGFsbCBvZiB0aGUgcmVxdWlyZWQgcG9zaXRpb25hbHMgd2VyZSBzcGVjaWZpZWQuCi0gICAgaW50IHBvc2l0aW9uYWxfY291bnQgPSAwOwotCi0gICAgaWYoIGZsYWdzX3NwZWNpZmllZFtQT1NJVElPTkFMX1JPV10gIT0gbnVsbCApCi0gICAgewotICAgICAgcG9zaXRpb25hbF9jb3VudCA9IGZsYWdzX3NwZWNpZmllZFtQT1NJVElPTkFMX1JPV10uc2l6ZSgpOwotICAgIH0KLQotICAgIGlmKCByZXF1aXJlZF9wb3NpdGlvbmFscyA+IHBvc2l0aW9uYWxfY291bnQgKQotICAgICAgdGhyb3cgbmV3IEZsYWdfZXJyb3IoIG1lc3NhZ2VzLmdldFN0cmluZyggRmxhZ01lc3NhZ2VzLlBBUlNFUl9FUlJPUl9NSVNTSU5HX1BPU0lUSU9OQUwgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ01lc3NhZ2VzLmdldFN0cmluZyggZmxhZ3NfaW5mb1tyZXF1aXJlZF9wb3NpdGlvbmFscy0xXVtOQU1FX0NPTF0gKSApOwotCi0gICAgZWxzZSBpZiggcmVxdWlyZWRfcG9zaXRpb25hbHMgPCBwb3NpdGlvbmFsX2NvdW50ICYmCi0gICAgICAgICAgICAgb3B0aW9uYWxfcG9zaXRpb25hbHNfYWxsb3dlZCA9PSBmYWxzZSApCi0gICAgICB0aHJvdyBuZXcgRmxhZ19lcnJvciggbWVzc2FnZXMuZ2V0U3RyaW5nKCBGbGFnTWVzc2FnZXMuUEFSU0VSX0VSUk9SX1RPT19NQU5ZX1BPU0lUSU9OQUxTICkgKTsKLQotICAgIGZvciggaW50IHJvdyA9IDA7IHJvdyA8IGZsYWdzX2luZm8ubGVuZ3RoOyByb3crKyApCi0gICAgewotICAgICAgaWYoIGZsYWdzX2luZm9bcm93XVtGTEFHX0NPTF0gPT0gUE9TSVRJT05BTCApIGNvbnRpbnVlOwotCi0gICAgICBpZiggZmxhZ3Nfc3BlY2lmaWVkW3Jvd10gPT0gbnVsbCAmJgotICAgICAgICAgIGZsYWdzX2luZm9bcm93XVtSRVFVSVJFRF9DT0xdID09IFJFUVVJUkVEICkKLSAgICAgICAgdGhyb3cgbmV3IEZsYWdfZXJyb3IoIG1lc3NhZ2VzLmdldFN0cmluZyggRmxhZ01lc3NhZ2VzLlBBUlNFUl9FUlJPUl9NSVNTSU5HX1JFUVVJUkVEX0ZMQUcgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnTWVzc2FnZXMuZ2V0U3RyaW5nKCBmbGFnc19pbmZvW3Jvd11bRkxBR19DT0xdICkgKTsKLQotICAgICAgaW50IHBhcm1fY291bnQgPSAwOwotCi0gICAgICBpZiggZmxhZ3Nfc3BlY2lmaWVkW3Jvd10gIT0gbnVsbCApIHBhcm1fY291bnQgPSBmbGFnc19zcGVjaWZpZWRbcm93XS5zaXplKCk7Ci0KLSAgICAgIC8vIENoZWNrIGZvciB0b28gbWFueSBmbGFnIHBhcmFtZXRlcnMuCi0gICAgICBpZiggZmxhZ3NfaW5mb1tyb3ddW0RVUF9DT0xdID09IE5PX0RVUFMgJiYgcGFybV9jb3VudCA+IDEgKQotICAgICAgICB0aHJvdyBuZXcgRmxhZ19lcnJvciggbWVzc2FnZXMuZ2V0U3RyaW5nKCBGbGFnTWVzc2FnZXMuUEFSU0VSX0VSUk9SX0RVUExJQ0FURV9GTEFHU19OT1RfQUxMT1dFRCApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdNZXNzYWdlcy5nZXRTdHJpbmcoIGZsYWdzX2luZm9bcm93XVtGTEFHX0NPTF0gKSApOwotCi0gICAgICAvLyBDaGVjayBmb3IgbWlzc2luZyBmbGFnIHBhcmFtZXRlci4KLSAgICAgIGlmKCBwYXJtX2NvdW50ID4gMCAmJiBmbGFnc19pbmZvW3Jvd11bTkFNRV9DT0xdICE9IE5PX1BBUk0gKQotICAgICAgewotICAgICAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgZmxhZ3Nfc3BlY2lmaWVkW3Jvd10uc2l6ZSgpOyBpbmRleCsrICkKLSAgICAgICAgewotICAgICAgICAgIGlmKCBmbGFnc19zcGVjaWZpZWRbcm93XS5lbGVtZW50QXQoaW5kZXgpID09IG51bGwgKQotICAgICAgICAgICAgdGhyb3cgbmV3IEZsYWdfZXJyb3IoIG1lc3NhZ2VzLmdldFN0cmluZyggRmxhZ01lc3NhZ2VzLlBBUlNFUl9FUlJPUl9NSVNTSU5HX0ZMQUdfUEFSQU1FVEVSICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFN0cmluZ1tdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGZsYWdNZXNzYWdlcy5nZXRTdHJpbmcoIGZsYWdzX2luZm9bcm93XVtGTEFHX0NPTF0gKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ01lc3NhZ2VzLmdldFN0cmluZyggZmxhZ3NfaW5mb1tyb3ddW05BTUVfQ09MXSApIH0gKTsKLQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAgKiBUaGlzIG1ldGhvZCB2ZXJpZmllcyB0aGF0IGEgcHJvcGVyIGZsYWdzX2luZm8gc3RyaW5nIGFycmF5IHdhcyBwYXNzZWQKLSAgICAqIHRvIHVzIGJ5IHRoZSBwcm9ncmFtbWVyLgotICAqKi8KLSAgcHJpdmF0ZSB2b2lkIHZlcmlmeV9mbGFnc19pbmZvKCkgdGhyb3dzIEludGVybmFsRXJyb3JFeGMKLSAgewotICAgIGJvb2xlYW4gZG9uZV9wb3NpdGlvbmFscyA9IGZhbHNlOwotICAgIGJvb2xlYW4gaGVscF9zcGVjaWZpZWQgICA9IGZhbHNlOwotCi0gICAgcmVxdWlyZWRfcG9zaXRpb25hbHMgPSAwOwotICAgIG9wdGlvbmFsX3Bvc2l0aW9uYWxzX2FsbG93ZWQgPSBmYWxzZTsKLSAgICBvcHRpb25hbF9saXN0X2luZGV4ID0gLTE7Ci0gICAgbWF4X2ZsYWdfc2l6ZSA9IDA7Ci0gICAgbWF4X25hbWVfc2l6ZSA9IDA7Ci0KLSAgICBpZiggZmxhZ3NfaW5mbyA9PSBudWxsIHx8IGZsYWdzX2luZm8ubGVuZ3RoID09IDAgKQotICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3JFeGMoIG1lc3NhZ2VzLmdldFN0cmluZyggRmxhZ01lc3NhZ2VzLlBBUlNFUl9FUlJPUl9OT19GTEFHU19EQVRBX1NQRUNJRklFRCAgKSApOwotCi0gICAgaWYoIGZsYWdzX2luZm9bUE9TSVRJT05BTF9ST1ddICE9IG51bGwgJiYKLSAgICAgICAgZmxhZ3NfaW5mb1tQT1NJVElPTkFMX1JPV10ubGVuZ3RoID4gMCAmJgotICAgICAgICBmbGFnc19pbmZvW1BPU0lUSU9OQUxfUk9XXVtGTEFHX0NPTF0gIT0gUE9TSVRJT05BTCApCi0gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvckV4YyggbWVzc2FnZXMuZ2V0U3RyaW5nKCBGbGFnTWVzc2FnZXMuUEFSU0VSX0VSUk9SX0ZJUlNUX0ZMQUdfTk9UX1BPU0lUSU9OQUwgKSApOwotCi0gICAgZm9yKCBpbnQgcm93ID0gMDsgcm93IDwgZmxhZ3NfaW5mby5sZW5ndGg7IHJvdysrICkKLSAgICB7Ci0gICAgICBpZiggZmxhZ3NfaW5mb1tyb3ddID09IG51bGwgKQotICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvckV4YyggbWVzc2FnZXMuZ2V0U3RyaW5nKCBGbGFnTWVzc2FnZXMuUEFSU0VSX0VSUk9SX05VTExfRkxBR19ST1cgKSApOwotCi0gICAgICBpZiggZmxhZ3NfaW5mb1tyb3ddLmxlbmd0aCAhPSA1ICkKLSAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3JFeGMoIG1lc3NhZ2VzLmdldFN0cmluZyggRmxhZ01lc3NhZ2VzLlBBUlNFUl9FUlJPUl9JTkNPUlJFQ1RfUk9XX1NJWkUgKSApOwotCi0gICAgICBpZiggZmxhZ3NfaW5mb1tyb3ddW0ZMQUdfQ09MXSA9PSBudWxsIHx8Ci0gICAgICAgICAgZmxhZ3NfaW5mb1tyb3ddW05BTUVfQ09MXSA9PSBudWxsIHx8Ci0gICAgICAgICAgZmxhZ3NfaW5mb1tyb3ddW0hFTFBfQ09MXSA9PSBudWxsICkKLSAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3JFeGMoIG1lc3NhZ2VzLmdldFN0cmluZyggRmxhZ01lc3NhZ2VzLlBBUlNFUl9FUlJPUl9OVUxMX0lOX1JPVyApICk7Ci0KLSAgICAgIGlmKCBmbGFnc19pbmZvW3Jvd11bRkxBR19DT0xdLmVxdWFscyggaGVscF9mbGFnICkgKSBoZWxwX3NwZWNpZmllZCA9IHRydWU7Ci0KLSAgICAgIFN0cmluZyBmbGFnSWQgICA9IGZsYWdzX2luZm9bcm93XVtGTEFHX0NPTF07Ci0gICAgICBTdHJpbmcgbmFtZUlkICAgPSBmbGFnc19pbmZvW3Jvd11bTkFNRV9DT0xdOwotCi0gICAgICBTdHJpbmcgZmxhZ19jb2wgPSBmbGFnSWQgPT0gUE9TSVRJT05BTCA/IFBPU0lUSU9OQUwgOiBmbGFnTWVzc2FnZXMuZ2V0U3RyaW5nKCBmbGFnSWQgKTsKLSAgICAgIFN0cmluZyBuYW1lX2NvbCA9IG5hbWVJZCA9PSBOT19QQVJNID8gTk9fUEFSTSA6IGZsYWdNZXNzYWdlcy5nZXRTdHJpbmcoIG5hbWVJZCApOwotCi0gICAgICBpZiggZmxhZ19jb2wubGVuZ3RoKCkgPiBtYXhfZmxhZ19zaXplICkKLSAgICAgICAgbWF4X2ZsYWdfc2l6ZSA9IGZsYWdfY29sLmxlbmd0aCgpOwotCi0gICAgICBpZiggbmFtZV9jb2wgIT0gTk9fUEFSTSAmJiBuYW1lX2NvbC5sZW5ndGgoKSA+IG1heF9uYW1lX3NpemUgKQotICAgICAgICBtYXhfbmFtZV9zaXplID0gbmFtZV9jb2wubGVuZ3RoKCk7Ci0KLSAgICAgIC8vIEVuc3VyZSB0aGF0IGZsYWdzIGFyZSBhbGwgaW4gbG93ZXJjYXNlLgotICAgICAgaWYoICFmbGFnX2NvbC5lcXVhbHMoIGZsYWdfY29sLnRvTG93ZXJDYXNlKCkgKSApCi0gICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yRXhjKCBtZXNzYWdlcy5nZXRTdHJpbmcoIEZsYWdNZXNzYWdlcy5QQVJTRVJfRVJST1JfRkxBR19OT1RfTE9XRVJDQVNFICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnX2NvbCApOwotCi0gICAgICAvLyBFbnN1cmUgdGhhdCBvbmx5IHRoZSBwcmVkZWZpbmVkIGR1cCBzdHJpbmdzIGFyZSB1c2VkLgotICAgICAgLy8gTm90ZTogaXQncyBvayB0byB1c2UgIT0gd2hlbiBjb21wYXJpbmcgY29uc3RhbnQgc3RyaW5ncyBsaXRlcmFscy4KLSAgICAgIGlmKCBmbGFnc19pbmZvW3Jvd11bRFVQX0NPTF0gPT0gbnVsbCB8fAotICAgICAgICAgICggZmxhZ3NfaW5mb1tyb3ddW0RVUF9DT0xdICE9IE5PX0RVUFMgJiYKLSAgICAgICAgICAgIGZsYWdzX2luZm9bcm93XVtEVVBfQ09MXSAhPSBEVVBTX09LICkgKQotICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvckV4YyggbWVzc2FnZXMuZ2V0U3RyaW5nKCBGbGFnTWVzc2FnZXMuUEFSU0VSX0VSUk9SX0lOQ09SUkVDVF9EVVBfU1RSSU5HICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnc19pbmZvW3Jvd11bRFVQX0NPTF0gKTsKLQotICAgICAgLy8gRW5zdXJlIHRoYXQgb25seSB0aGUgcHJlZGVmaW5lZCByZXF1aXJlZCBzdHJpbmdzIGFyZSB1c2VkLgotICAgICAgaWYoIGZsYWdzX2luZm9bcm93XVtSRVFVSVJFRF9DT0xdID09IG51bGwgfHwKLSAgICAgICAgICAoIGZsYWdzX2luZm9bcm93XVtSRVFVSVJFRF9DT0xdICE9IFJFUVVJUkVEICYmCi0gICAgICAgICAgICBmbGFnc19pbmZvW3Jvd11bUkVRVUlSRURfQ09MXSAhPSBPUFRJT05BTCApICkKLSAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3JFeGMoIG1lc3NhZ2VzLmdldFN0cmluZyggRmxhZ01lc3NhZ2VzLlBBUlNFUl9FUlJPUl9JTkNPUlJFQ1RfUkVRVUlSRURfU1RSSU5HICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnc19pbmZvW3Jvd11bUkVRVUlSRURfQ09MXSApOwotCi0gICAgICAvLyBDb3VudCB0aGUgbnVtYmVyIG9mIHJlcXVpcmVkIHBvc2l0aW9uYWxzLgotICAgICAgaWYoIGZsYWdzX2luZm9bcm93XVtGTEFHX0NPTF0gPT0gUE9TSVRJT05BTCApCi0gICAgICB7Ci0gICAgICAgIGlmKCBmbGFnc19pbmZvW3Jvd11bUkVRVUlSRURfQ09MXSA9PSBSRVFVSVJFRCApCi0gICAgICAgIHsKLSAgICAgICAgICBpZiggZmxhZ3NfaW5mb1tyb3ddW05BTUVfQ09MXSA9PSBOT19QQVJNICkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yRXhjKCBtZXNzYWdlcy5nZXRTdHJpbmcoIEZsYWdNZXNzYWdlcy5QQVJTRVJfRVJST1JfUkVRVUlSRURfUE9TSVRJT05BTF9ORUVEU19OQU1FICkgKTsKLQotICAgICAgICAgIHJlcXVpcmVkX3Bvc2l0aW9uYWxzKys7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiggZmxhZ3NfaW5mb1tyb3ddW05BTUVfQ09MXSAhPSBOT19QQVJNICkKLSAgICAgICAgewotICAgICAgICAgIC8vIFdlIHVzZSB0aGUgTkFNRV9DT0wgZmllbGQgZm9yIGFuIG9wdGlvbmFsIHBvc2l0aW9uYWwgdG8gZGVub3RlCi0gICAgICAgICAgLy8gd2hldGhlciBhZGRpdGlvbmFsIHBvc2l0aW9uYWxzIGFyZSBhbGxvd2VkIG9yIG5vdC4KLSAgICAgICAgICBvcHRpb25hbF9wb3NpdGlvbmFsc19hbGxvd2VkID0gdHJ1ZTsKLSAgICAgICAgICBvcHRpb25hbF9saXN0X2luZGV4ID0gcm93OwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8vIEVuc3VyZSB0aGF0IHBvc2l0aW9uYWxzIGFyZSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBpbmZvLgotICAgICAgaWYoIGZsYWdzX2luZm9bcm93XVtGTEFHX0NPTF0gIT0gUE9TSVRJT05BTCB8fAotICAgICAgICAgICggZG9uZV9wb3NpdGlvbmFscyA9PSBmYWxzZSAmJgotICAgICAgICAgICAgZmxhZ3NfaW5mb1tyb3ddW0ZMQUdfQ09MXSA9PSBQT1NJVElPTkFMICYmCi0gICAgICAgICAgICBmbGFnc19pbmZvW3Jvd11bUkVRVUlSRURfQ09MXSA9PSBPUFRJT05BTCApICkKLSAgICAgIHsKLSAgICAgICAgZG9uZV9wb3NpdGlvbmFscyA9IHRydWU7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmKCBkb25lX3Bvc2l0aW9uYWxzID09IHRydWUgKQotICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvckV4YyggbWVzc2FnZXMuZ2V0U3RyaW5nKCBGbGFnTWVzc2FnZXMuUEFSU0VSX0VSUk9SX1BPU0lUSU9OQUxfTk9UX0FUX0JFR0lOTklORyApICk7Ci0gICAgfQotCi0gICAgLy8gRW5zdXJlIHRoYXQgYSBoZWxwIGZsYWcgd2FzIHNwZWNpZmllZCBpbiB0aGUgaW5mbyBsaXN0LgotICAgIGlmKCBoZWxwX3NwZWNpZmllZCA9PSBmYWxzZSApCi0gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvckV4YyggbWVzc2FnZXMuZ2V0U3RyaW5nKCBGbGFnTWVzc2FnZXMuUEFSU0VSX0VSUk9SX0hFTFBfRkxBR19OT1RfU1BFQ0lGSUVEICkgKTsKLSAgfQotCi0gIC8qKgotICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBkdW1wIGludGVybmFsIGluZm9ybWF0aW9uIGFib3V0IGEgcGFyc2VkCi0gICAgKiBjb21tYW5kIGxpbmUuCi0gICoqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBiID0gbmV3IFN0cmluZ0J1ZmZlcigxMDApOwotCi0gICAgZm9yKCBpbnQgcm93ID0gMDsgcm93IDwgZmxhZ3NfaW5mby5sZW5ndGg7IHJvdysrICkKLSAgICB7Ci0gICAgICBiLmFwcGVuZCggIlxuIiApOwotCi0gICAgICBpZiggZmxhZ3NfaW5mb1tyb3ddW0ZMQUdfQ09MXSA9PSBQT1NJVElPTkFMICkKLSAgICAgICAgYi5hcHBlbmQoICJQb3NpdGlvbmFsOiIgKTsKLSAgICAgIGVsc2UKLSAgICAgICAgYi5hcHBlbmQoIGZsYWdNZXNzYWdlcy5nZXRTdHJpbmcoIGZsYWdzX2luZm9bcm93XVtGTEFHX0NPTF0gKSArICI6IiApOwotCi0KLSAgICAgIGlmKCBmbGFnc19zcGVjaWZpZWRbcm93XSA9PSBudWxsICkKLSAgICAgICAgYi5hcHBlbmQoICJubyBwYXJhbWV0ZXJzIiApOwotICAgICAgZWxzZQotICAgICAgICBmb3IoIGludCBwYXJtX2luZGV4ID0gMDsgcGFybV9pbmRleCA8IGZsYWdzX3NwZWNpZmllZFtyb3ddLnNpemUoKTsgcGFybV9pbmRleCsrICkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBwYXJtID0gKFN0cmluZylmbGFnc19zcGVjaWZpZWRbcm93XS5lbGVtZW50QXQocGFybV9pbmRleCk7Ci0gICAgICAgICAgYi5hcHBlbmQoIHBhcm0gKyAiOiIgKTsKLSAgICAgICAgfQotICAgICAgYi5hcHBlbmQoICJcbiIgKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gIiIrYjsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBGTEFHX0NPTCAgICAgPSAwOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTkFNRV9DT0wgICAgID0gMTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERVUF9DT0wgICAgICA9IDI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBSRVFVSVJFRF9DT0wgPSAzOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgSEVMUF9DT0wgICAgID0gNDsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUE9TSVRJT05BTF9ST1cgPSAwOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgSEVMUF9MSU5FX0xFTiAgPSA3NTsKLQotICBwcml2YXRlIFN0cmluZ1tdW10gZmxhZ3NfaW5mbzsKLSAgcHJpdmF0ZSBTdHJpbmcgICAgIGhlbHBfZmxhZzsKLSAgcHJpdmF0ZSBTdHJpbmcgICAgIHRvb2xfbmFtZTsKLSAgcHJpdmF0ZSBWZWN0b3JbXSAgIGZsYWdzX3NwZWNpZmllZDsKLSAgcHJpdmF0ZSBpbnQgICAgICAgIHJlcXVpcmVkX3Bvc2l0aW9uYWxzOwotICBwcml2YXRlIGJvb2xlYW4gICAgb3B0aW9uYWxfcG9zaXRpb25hbHNfYWxsb3dlZDsKLSAgcHJpdmF0ZSBpbnQgICAgICAgIG9wdGlvbmFsX2xpc3RfaW5kZXg7Ci0gIHByaXZhdGUgaW50ICAgICAgICBtYXhfZmxhZ19zaXplOwotICBwcml2YXRlIGludCAgICAgICAgbWF4X25hbWVfc2l6ZTsKLQotICBwcm90ZWN0ZWQgUmVzb3VyY2VCdW5kbGUgbWVzc2FnZXM7Ci0gIHByaXZhdGUgICBSZXNvdXJjZUJ1bmRsZSBmbGFnTWVzc2FnZXM7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvbW1hbmRsaW5lL0ZsYWdNZXNzYWdlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb21tYW5kbGluZS9GbGFnTWVzc2FnZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzg4NDE0Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvbW1hbmRsaW5lL0ZsYWdNZXNzYWdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb21tYW5kbGluZTsKLQotLyoqCi0gICogVGhpcyBjbGFzcyBpcyB1c2VkIHRvIHN0b3JlIGNvbnN0YW50IHN0cmluZyBlcnJvciBtZXNzYWdlcwotICAqIGdlbmVyYXRlZCBieSBDb21tYW5kTGluZS5qYXZhCi0gICoKLSAgKgotICAqIEBhdXRob3IgUGV0ZXIgTW9vZ2sKLSAgKiBAZGF0ZSAgIEp1bHkgMTMsIDIwMDAKLSAgKiBAc2VlICAgIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb21tYW5kbGluZS5Db21tYW5kTGluZQotKiovCi0KLXB1YmxpYyBmaW5hbCBjbGFzcyBGbGFnTWVzc2FnZXMKLXsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVJTRVJfRVJST1JfRkxBR19OT1RfRk9VTkQgPSAiUEFSU0VSX0VSUk9SX0ZMQUdfTk9UX0ZPVU5EIjsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVJTRVJfRVJST1JfQU1CSUdVT1VTX0ZMQUcgPSAiUEFSU0VSX0VSUk9SX0FNQklHVU9VU19GTEFHIjsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVJTRVJfRVJST1JfTUlTU0lOR19QT1NJVElPTkFMID0gIlBBUlNFUl9FUlJPUl9NSVNTSU5HX1BPU0lUSU9OQUwiOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUlNFUl9FUlJPUl9UT09fTUFOWV9QT1NJVElPTkFMUyA9ICJQQVJTRVJfRVJST1JfVE9PX01BTllfUE9TSVRJT05BTFMiOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUlNFUl9FUlJPUl9NSVNTSU5HX1JFUVVJUkVEX0ZMQUcgPSAiUEFSU0VSX0VSUk9SX01JU1NJTkdfUkVRVUlSRURfRkxBRyI7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSU0VSX0VSUk9SX0RVUExJQ0FURV9GTEFHU19OT1RfQUxMT1dFRCA9ICJQQVJTRVJfRVJST1JfRFVQTElDQVRFX0ZMQUdTX05PVF9BTExPV0VEIjsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVJTRVJfRVJST1JfTUlTU0lOR19GTEFHX1BBUkFNRVRFUiA9ICJQQVJTRVJfRVJST1JfTUlTU0lOR19GTEFHX1BBUkFNRVRFUiI7Ci0KLSAgLy8gRXJyb3IgaW50ZXJuYWwgZXJyb3IgbWVzc2FnZXMuCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUlNFUl9FUlJPUl9NRVNTQUdFX01JU1NJTkdfQVJHID0gIlBBUlNFUl9FUlJPUl9NRVNTQUdFX01JU1NJTkdfQVJHIjsKLQotICAvLyBJbnRlcm5hbCBjb21tYW5kIGxpbmUgZXJyb3IgbWVzc2FnZXMuCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUlNFUl9FUlJPUl9OT19GTEFHU19EQVRBX1NQRUNJRklFRCA9ICJQQVJTRVJfRVJST1JfTk9fRkxBR1NfREFUQV9TUEVDSUZJRUQiOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUlNFUl9FUlJPUl9GSVJTVF9GTEFHX05PVF9QT1NJVElPTkFMID0gIlBBUlNFUl9FUlJPUl9GSVJTVF9GTEFHX05PVF9QT1NJVElPTkFMIjsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVJTRVJfRVJST1JfTlVMTF9GTEFHX1JPVyA9ICJQQVJTRVJfRVJST1JfTlVMTF9GTEFHX1JPVyI7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSU0VSX0VSUk9SX0lOQ09SUkVDVF9ST1dfU0laRSA9ICJQQVJTRVJfRVJST1JfSU5DT1JSRUNUX1JPV19TSVpFIjsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVJTRVJfRVJST1JfTlVMTF9JTl9ST1cgPSAiUEFSU0VSX0VSUk9SX05VTExfSU5fUk9XIjsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVJTRVJfRVJST1JfSU5DT1JSRUNUX0RVUF9TVFJJTkcgPSAiUEFSU0VSX0VSUk9SX0lOQ09SUkVDVF9EVVBfU1RSSU5HIjsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVJTRVJfRVJST1JfSU5DT1JSRUNUX1JFUVVJUkVEX1NUUklORyA9ICJQQVJTRVJfRVJST1JfSU5DT1JSRUNUX1JFUVVJUkVEX1NUUklORyI7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSU0VSX0VSUk9SX1BPU0lUSU9OQUxfTk9UX0FUX0JFR0lOTklORyA9ICJQQVJTRVJfRVJST1JfUE9TSVRJT05BTF9OT1RfQVRfQkVHSU5OSU5HIjsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVJTRVJfRVJST1JfSEVMUF9GTEFHX05PVF9TUEVDSUZJRUQgPSAiUEFSU0VSX0VSUk9SX0hFTFBfRkxBR19OT1RfU1BFQ0lGSUVEIjsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVJTRVJfRVJST1JfRkxBR1NfTk9UX09SREVSRUQgPSAiUEFSU0VSX0VSUk9SX0ZMQUdTX05PVF9PUkRFUkVEIjsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVJTRVJfRVJST1JfRkxBR19OT1RfTE9XRVJDQVNFID0gIlBBUlNFUl9FUlJPUl9GTEFHX05PVF9MT1dFUkNBU0UiOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUlNFUl9FUlJPUl9SRVFVSVJFRF9QT1NJVElPTkFMX05FRURTX05BTUUgPSAiUEFSU0VSX0VSUk9SX1JFUVVJUkVEX1BPU0lUSU9OQUxfTkVFRFNfTkFNRSI7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSU0VSX0lORk9fU1lOVEFYID0gIlBBUlNFUl9TWU5UQVgiOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUlNFUl9GTEFHUyA9ICJQQVJTRVJfRkxBR1MiOwotICAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSU0VSX0lORk9fV0hFUkUgPSAiUEFSU0VSX1dIRVJFIjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29tbWFuZGxpbmUvY29tbWFuZGxpbmUucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29tbWFuZGxpbmUvY29tbWFuZGxpbmUucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzg1Mjk4MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvbW1hbmRsaW5lL2NvbW1hbmRsaW5lLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1QQVJTRVJfRVJST1JfRkxBR19OT1RfRk9VTkQ9SVdBQjAxMjNFIEZsYWcgLXswfSBpcyBub3QgdmFsaWQuCi1QQVJTRVJfRVJST1JfQU1CSUdVT1VTX0ZMQUc9SVdBQjAyODRFIEZsYWcgLXswfSBpcyBhbWJpZ3VvdXMuCi1QQVJTRVJfRVJST1JfTUlTU0lOR19QT1NJVElPTkFMPUlXQUIwMjg1RSBNaXNzaW5nIHswfSBwYXJhbWV0ZXIuCi1QQVJTRVJfRVJST1JfVE9PX01BTllfUE9TSVRJT05BTFM9SVdBQjAyODZFIFRvbyBtYW55IHBvc2l0aW9uYWwgcGFyYW1ldGVycyBzcGVjaWZpZWQuCi1QQVJTRVJfRVJST1JfTUlTU0lOR19SRVFVSVJFRF9GTEFHPUlXQUIwMjg4RSBGbGFnIC17MH0gaXMgbWlzc2luZy4KLVBBUlNFUl9FUlJPUl9EVVBMSUNBVEVfRkxBR1NfTk9UX0FMTE9XRUQ9SVdBQjAyOTNFIEZsYWcgLXswfSBoYXMgYmVlbiBzcGVjaWZpZWQgbW9yZSB0aGFuIG9uY2UuCi1QQVJTRVJfRVJST1JfTUlTU0lOR19GTEFHX1BBUkFNRVRFUj1JV0FCMDI5NEUgRmxhZyAtezB9IGlzIG1pc3NpbmcgcGFyYW1ldGVyIHsxfS4KLVBBUlNFUl9FUlJPUl9NRVNTQUdFX01JU1NJTkdfQVJHPUlXQUIwMzE5RSBFcnJvciBtZXNzYWdlIHswfSBpcyBtaXNzaW5nIGFuIGFyZ3VtZW50LgotUEFSU0VSX0VSUk9SX05PX0ZMQUdTX0RBVEFfU1BFQ0lGSUVEPUlXQUIwMzQ1RSBTcGVjaWZ5IGZsYWcgaW5mb3JtYXRpb24uCi1QQVJTRVJfRVJST1JfRklSU1RfRkxBR19OT1RfUE9TSVRJT05BTD1JV0FCMDM0NkUgVGhlIGZpcnN0IGZsYWcgbXVzdCBiZSBwb3NpdGlvbmFsLgotUEFSU0VSX0VSUk9SX05VTExfRkxBR19ST1c9SVdBQjAzNDdFIE51bGwgZmxhZyByb3cuCi1QQVJTRVJfRVJST1JfSU5DT1JSRUNUX1JPV19TSVpFPUlXQUIwMzQ4RSBGbGFnIHJvdyBtdXN0IGhhdmUgNSBzdHJpbmdzLgotUEFSU0VSX0VSUk9SX05VTExfSU5fUk9XPUlXQUIwMzQ5RSBGbGFnIGluZm9ybWF0aW9uIGNvbnRhaW5zIGEgbnVsbCBzdHJpbmcuCi1QQVJTRVJfRVJST1JfSU5DT1JSRUNUX0RVUF9TVFJJTkc9SVdBQjAzNTBFIER1cGxpY2F0ZSBzdHJpbmcgezB9IGlzIG5vdCB2YWxpZC4KLVBBUlNFUl9FUlJPUl9JTkNPUlJFQ1RfUkVRVUlSRURfU1RSSU5HPUlXQUIwMzUxRSBSZXF1aXJlZCBzdHJpbmcgezB9IGlzIG5vdCB2YWxpZC4KLVBBUlNFUl9FUlJPUl9QT1NJVElPTkFMX05PVF9BVF9CRUdJTk5JTkc9SVdBQjAzNTJFIFBvc2l0aW9uYWwgZmxhZyBpcyBub3QgYXQgdGhlIGJlZ2lubmluZy4KLVBBUlNFUl9FUlJPUl9IRUxQX0ZMQUdfTk9UX1NQRUNJRklFRD1JV0FCMDM1M0UgSGVscCBmbGFnIGlzIG5vdCBzcGVjaWZpZWQgaW4gaW5mb3JtYXRpb24gYXJyYXkuCi1QQVJTRVJfRVJST1JfRkxBR1NfTk9UX09SREVSRUQ9SVdBQjAzNTRFIEZsYWdzIGFyZSBub3QgaW4gbGV4aWNhbCBvcmRlci4KLVBBUlNFUl9FUlJPUl9GTEFHX05PVF9MT1dFUkNBU0U9SVdBQjAzNTVFIEZsYWcgezB9IGlzIG5vdCBsb3dlcmNhc2UuCi1QQVJTRVJfRVJST1JfUkVRVUlSRURfUE9TSVRJT05BTF9ORUVEU19OQU1FPUlXQUIwMzU2RSBSZXF1aXJlZCBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgbXVzdCBoYXZlIGEgbmFtZSBzcGVjaWZpZWQuCi1QQVJTRVJfU1lOVEFYPVN5bnRheAotUEFSU0VSX0ZMQUdTPUZsYWdzCi1QQVJTRVJfV0hFUkU9V2hlcmUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29tbW9uL0NsYXNzUGF0aC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb21tb24vQ2xhc3NQYXRoLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0OGE0YTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb21tb24vQ2xhc3NQYXRoLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbW1vbjsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLQotLyoqCi0gKiAKLSAqIFRoZSBjbGFzcyBwcm92aWRlcyBhbmQgZWFzeSB3YXkgdG8gYnVpbGQgY2xhc3NwYXRocy4KLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBDbGFzc1BhdGggCi17Ci0gIHByaXZhdGUgU3RyaW5nQnVmZmVyIHBhdGggPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gIAotICAvKioKLSAgICogCi0gICAqIEBwYXJhbSBuZXdQYXRoIGFwcGVuZHMgdGhpcyBuZXcgcGF0aCB0byB0aGUgZW5kIG9mIHRoZSBjbGFzc3BhdGguCi0gICAqLwotICBwdWJsaWMgdm9pZCBhcHBlbmRQYXRoKCBTdHJpbmcgbmV3UGF0aCApCi0gIHsKLSAgCS8vIE5vIHZhbHVlIHRvIHB1dCBvbiBwYXRoLCBzbyBqdXN0IHJldHVybgotICAJaWYoIG5ld1BhdGguZXF1YWxzKCAiIiApICkgcmV0dXJuOwotICAJCi0gIAkvLyBJZiB0aGlzIGlzIHRoZSBmaXJzdCBwYXRoIGluIHRoZSBzdHJpbmcgdGhlbiB3ZSBkb24ndCBuZWVkIGEgcGF0aAotICAJLy8gc2VwYXJhdG9yLgotICAJaWYoIHBhdGgubGVuZ3RoKCkgPT0gMCApCi0gIAl7Ci0gIAkgIHBhdGguYXBwZW5kKCBuZXdQYXRoICk7Ci0gIAl9Ci0gIAllbHNlCi0gIAl7Ci0gIAkgIHBhdGguYXBwZW5kKCBGaWxlLnBhdGhTZXBhcmF0b3JDaGFyICsgbmV3UGF0aCApOwotICAJfQotICB9Ci0gIAotICAvKioKLSAgICogVGhpcyBtZXRob2QgYXBwZW5kcyBhbGwgamFyIGFuZCB6aXAgZmlsZXMgaW4gYSBwYXJ0aWN1bGFyIGRpcmVjdG9yeSB0bwotICAgKiB0aGUgY2xhc3NwYXRoLgotICAgKiAKLSAgICogQHBhcmFtIGRpcmVjdG9yeSBzcGVjaWZpZXMgYSBkaXJlY3RvcnkgY29udGFpbnMgamFyIGFuZCB6aXAgZmlsZXMuCi0gICAqLwotICBwdWJsaWMgdm9pZCBhcHBlbmREaXIoIFN0cmluZyBkaXJlY3RvcnkgKQotICB7Ci0gIAlGaWxlIGRpciA9IG5ldyBGaWxlKCBkaXJlY3RvcnkgKTsKLSAgCQotICAJaWYoICFkaXIuaXNEaXJlY3RvcnkoKSApIHJldHVybjsKLSAgCQotICAJRmlsZVtdIGZpbGVzID0gZGlyLmxpc3RGaWxlcygpOwotICAJCi0gIAlmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgZmlsZXMubGVuZ3RoOyBpbmRleCsrICkKLSAgCXsKLSAgCSAgRmlsZSAgIGZpbGUgPSBmaWxlc1tpbmRleF07Ci0gIAkgIFN0cmluZyBuYW1lID0gZmlsZS5nZXROYW1lKCk7Ci0gIAkgIAotICAJICBpZiggZmlsZS5pc0ZpbGUoKSAmJgotICAJICAgICAgKCBuYW1lLmVuZHNXaXRoKCAiLmphciIgKSB8fAotICAJICAgICAgICBuYW1lLmVuZHNXaXRoKCAiLnppcCIgKSApICkKLSAgCSAgewotICAJICAJYXBwZW5kUGF0aCggZmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSApOwotICAJICB9Ci0gIAkgICAgICAgIAotICAJfQotICB9Ci0gIAotICAvKioKLSAgICogCi0gICAqIEBwYXJhbSBuZXdQYXRoIGFwcGVuZHMgYSBuZXcgY2xhc3NwYXRoIHRvIHRoZSBlbmQgb2YgdGhpcyBjbGFzc3BhdGguCi0gICAqLwotICBwdWJsaWMgdm9pZCBhcHBlbmRQYXRoKCBDbGFzc1BhdGggbmV3UGF0aCApCi0gIHsKLSAgCWFwcGVuZFBhdGgoIG5ld1BhdGgucGF0aC50b1N0cmluZygpICk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIGZ1bGwgc3RyaW5nIGNsYXNzcGF0aCB3aXRoIHNlcGFyYXRvcnMuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAJcmV0dXJuIHBhdGgudG9TdHJpbmcoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb21tb24vRmlsZVJlc291cmNlT3V0cHV0U3RyZWFtLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvbW1vbi9GaWxlUmVzb3VyY2VPdXRwdXRTdHJlYW0uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWJjNGE0MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvbW1vbi9GaWxlUmVzb3VyY2VPdXRwdXRTdHJlYW0uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbW1vbjsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29udGV4dC5SZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JU3RhdHVzSGFuZGxlcjsKLQotCi0KLS8qKgotKiBUaGlzIGNsYXNzIGRlZmluZXMgYW4gb3V0cHV0IHN0cmVhbSB0aGF0IHdyaXRlcyB0byBhbgotKiB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGUgSUZpbGV9LgotKi8KLXB1YmxpYyBjbGFzcyBGaWxlUmVzb3VyY2VPdXRwdXRTdHJlYW0gZXh0ZW5kcyBPdXRwdXRTdHJlYW0KLXsKLQotICBJUGF0aCAgICAgICAgICAgICAgICAgZkZpbGVQYXRoOwotICBSZXNvdXJjZUNvbnRleHQgICAgICAgZlJlc291cmNlQ29udGV4dDsgCi0gIElQcm9ncmVzc01vbml0b3IgICAgICAgZk1vbml0b3I7ICAgCi0gIElTdGF0dXNIYW5kbGVyICAgICAgICAgZlN0YXR1c0hhbmRsZXI7Ci0gIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBmQnl0ZUFycmF5T3V0cHV0U3RyZWFtOwotICBib29sZWFuICAgICAgICAgICAgICAgZk9wZW47Ci0KLSAgLyoqCi0gICogQ29uc3RydWN0cyBhbiBvdXRwdXQgc3RyZWFtIHRoYXQgY2FuIGJlIHVzZWQgdG8gd3JpdGUgdG8gdGhlCi0gICogZ2l2ZW4gPGNvZGU+ZmlsZTwvY29kZT4uIFRoZSB3b3Jrc3BhY2UgaXMgbmVpdGhlciBleGFtaW5lZCBub3IKLSAgKiBhbHRlcmVkIGR1cmluZyBjb25zdHJ1Y3Rpb24uIEFsbCByZXNvdXJjZSBjcmVhdGlvbiBpcyBkZWZlcnJlZAotICAqIHVudGlsIGxhdGVyIGluIHRoZSBzdHJlYW0ncyBsaWZlY3ljbGUsIHN1Y2ggYXMgZHVyaW5nIHdyaXRpbmcKLSAgKiBvciBjbG9zdXJlLgotICAqIDxiPk5vdGU6PC9iPiBUaGUgcHJlZmVycmVkIG1lY2hhbmlzbSBmb3IgY3JlYXRpbmcgYSBzdHJlYW0gdGhhdAotICAqIHdyaXRlcyB0byBhbiBJRmlsZSBpcyB0byBjYWxsIHRoZSBzdGF0aWMgZmFjdG9yeSBtZXRob2QKLSAgKiB7QGxpbmsgRmlsZVJlc291cmNlVXRpbHMjbmV3RmlsZU91dHB1dFN0cmVhbSBGaWxlUmVzb3VyY2VVdGlscy5uZXdGaWxlT3V0cHV0U3RyZWFtKCl9Ci0gICogYW5kIHdvcmsgd2l0aCB0aGUgcmVzdWx0aW5nIDxjb2RlPk91dHB1dFN0cmVhbTwvY29kZT4uCi0gICogRGlyZWN0IGNvbnN0cnVjdGlvbiBvZiBhIEZpbGVSZXNvdXJjZU91dHB1dFN0cmVhbSBpcyBub3QgcmVjb21tZW5kZWQuCi0gICogQHBhcmFtIGZpbGUgVGhlIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZSBJRmlsZX0KLSAgKiBoYW5kbGUgb2YgdGhlIGZpbGUgcmVzb3VyY2UgdG8gY3JlYXRlLiBUaGUgcHJvamVjdCBpbXBsaWVkIGJ5IHRoZQotICAqIHBhdGhuYW1lIG9mIHRoZSBmaWxlIG11c3QgYWxyZWFkeSBleGlzdCwKLSAgKiB0aGF0IGlzLCB0aGlzIG1ldGhvZCBjYW5ub3QgYmUgdXNlZCB0byBjcmVhdGUgcHJvamVjdHMuCi0gICogQHBhcmFtIHByb2dyZXNzTW9uaXRvciBUaGUgcHJvZ3Jlc3MgbW9uaXRvciBmb3IgdGhlIG9wZXJhdGlvbiwgb3IgbnVsbC4KLSAgKi8KLSAgcHVibGljIEZpbGVSZXNvdXJjZU91dHB1dFN0cmVhbSAoIAotICAJCQlSZXNvdXJjZUNvbnRleHQgcmVzb3VyY2VDb250ZXh0LCAKLSAgCQkJSVBhdGggICAgICAgICAgIGZpbGVQYXRoLCAKLSAgCQkJSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLAotICAJCQlJU3RhdHVzSGFuZGxlciAgIHN0YXR1c0hhbmRsZXIKLSAgCQkJKQotICB7Ci0gICAgZkZpbGVQYXRoID0gZmlsZVBhdGg7Ci0gICAgZlJlc291cmNlQ29udGV4dCA9IHJlc291cmNlQ29udGV4dDsKLSAgICBmTW9uaXRvciA9IG1vbml0b3I7Ci0gICAgZlN0YXR1c0hhbmRsZXIgPSBzdGF0dXNIYW5kbGVyOwotICAgIGZCeXRlQXJyYXlPdXRwdXRTdHJlYW0gPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7Ci0gICAgZk9wZW4gPSB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICogQ2xvc2VzIHRoZSBzdHJlYW0uCi0gICogQHRocm93cyBJT0V4Y2VwdGlvbiBJZiBhbiBlcnJvciBvY2N1cnMgd2hpbGUgY2xvc2luZyB0aGUgc3RyZWFtLgotICAqIEZvciBleGFtcGxlLCBpZiB0aGlzIHN0cmVhbSB3YXMgY29uc3RydWN0ZWQgd2l0aCBvdmVyd3JpdGVGaWxlID0gZmFsc2UKLSAgKiBhbmQgYSBmaWxlIG9mIHRoZSBzYW1lIG5hbWUgYWxyZWFkeSBleGlzdHMsIHRoZW4gYW4gSU9FeGNlcHRpb24gd2lsbAotICAqIGJlIHRocm93biBlaXRoZXIgbm93IG9yIGR1cmluZyBhbiBlYXJsaWVyIHtAbGluayAjd3JpdGUgd3JpdGV9LgotICAqLwotICBwdWJsaWMgdm9pZCBjbG9zZSAoKQotICB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotICAgIGlmICghZk9wZW4pIHJldHVybjsKLSAgICBmT3BlbiA9IGZhbHNlOwotICAgIGZCeXRlQXJyYXlPdXRwdXRTdHJlYW0uY2xvc2UoKTsKLSAgICBieXRlW10gYnVmZmVyID0gZkJ5dGVBcnJheU91dHB1dFN0cmVhbS50b0J5dGVBcnJheSgpOwotICAgIEJ5dGVBcnJheUlucHV0U3RyZWFtIHRlbXBJbnB1dFN0cmVhbSA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShidWZmZXIpOwotICAgIHRyeQotICAgIHsKLSAgICAgIEZpbGVSZXNvdXJjZVV0aWxzLmNyZWF0ZUZpbGUoZlJlc291cmNlQ29udGV4dCwgZkZpbGVQYXRoLCB0ZW1wSW5wdXRTdHJlYW0sIGZNb25pdG9yLCBmU3RhdHVzSGFuZGxlcik7Ci0gICAgfQotICAgIGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgKiBGbHVzaGVzIHRoZSBzdHJlYW0uIFRoaXMgZG9lcyBub3QgaW1wbHkgdGhlIEZpbGUgcmVzb3VyY2UKLSAgKiB3aWxsIGJlIGNyZWF0ZWQgb3IgYmVjb21lIHZpc2libGUgd2l0aGluIHRoZSB3b3JrYmVuY2guCi0gICogQHRocm93cyBJT0V4Y2VwdGlvbiBJZiBhbiBlcnJvciBvY2N1cnMuIEZvciBleGFtcGxlLCBpZiB0aGlzCi0gICogc3RyZWFtIHdhcyBjb25zdHJ1Y3RlZCB3aXRoIG92ZXJ3cml0ZUZpbGUgPSBmYWxzZSBhbmQgYSBmaWxlIG9mIHRoZQotICAqIHNhbWUgbmFtZSBhbHJlYWR5IGV4aXN0cywgdGhlbiBhbiBJT0V4Y2VwdGlvbiBtYXkgYmUgdGhyb3duIGF0Ci0gICogdGhpcyBwb2ludC4KLSAgKi8KLSAgcHVibGljIHZvaWQgZmx1c2ggKCkKLSAgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgICBmQnl0ZUFycmF5T3V0cHV0U3RyZWFtLmZsdXNoKCk7Ci0gIH0KLQotICAvKioKLSAgKiBXcml0ZXMgYWxsIGJ5dGVzIGZyb20gdGhlIGdpdmVuIGFycmF5IHRvIHRoZSBzdHJlYW0uCi0gICogQHBhcmFtIGIgVGhlIGFycmF5IG9mIGJ5dGVzIHRvIHdyaXRlLgotICAqIEB0aHJvd3MgSU9FeGNlcHRpb24gSWYgYW4gZXJyb3Igb2NjdXJzLiBGb3IgZXhhbXBsZSwgaWYgdGhpcwotICAqIHN0cmVhbSB3YXMgY29uc3RydWN0ZWQgd2l0aCBvdmVyd3JpdGVGaWxlID0gZmFsc2UgYW5kIGEgZmlsZSBvZiB0aGUKLSAgKiBzYW1lIG5hbWUgYWxyZWFkeSBleGlzdHMsIHRoZW4gYW4gSU9FeGNlcHRpb24gbWF5IGJlIHRocm93biBhdAotICAqIHRoaXMgcG9pbnQuCi0gICovCi0gIHB1YmxpYyB2b2lkIHdyaXRlICggYnl0ZVtdIGIgKQotICB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotICAgIGZCeXRlQXJyYXlPdXRwdXRTdHJlYW0ud3JpdGUoYik7Ci0gIH0KLQotICAvKioKLSAgKiBXcml0ZXMgYnl0ZXMgZnJvbSB0aGUgZ2l2ZW4gYXJyYXkgYmVnaW5uaW5nIGF0IHNvbWUgb2Zmc2V0Ci0gICogYW5kIGNvbnRpbnVpbmcgZm9yIHNvbWUgbnVtYmVyIG9mIGJ5dGVzIChsZW4pIHRvIHRoZSBzdHJlYW0uCi0gICogQHBhcmFtIGIgVGhlIGFycmF5IG9mIGJ5dGVzIHRvIHdyaXRlLgotICAqIEBwYXJhbSBvZmYgVGhlIG9mZnNldCBpbnRvIHRoZSBhcnJheSB0byBiZWdpbiB3cml0aW5nLgotICAqIEBwYXJhbSBsZW4gVGhlIG51bWJlciBvZiBieXRlcyB0byB3cml0ZS4KLSAgKiBAdGhyb3dzIElPRXhjZXB0aW9uIElmIGFuIGVycm9yIG9jY3Vycy4gRm9yIGV4YW1wbGUsIGlmIHRoaXMKLSAgKiBzdHJlYW0gd2FzIGNvbnN0cnVjdGVkIHdpdGggb3ZlcndyaXRlRmlsZSA9IGZhbHNlIGFuZCBhIGZpbGUgb2YgdGhlCi0gICogc2FtZSBuYW1lIGFscmVhZHkgZXhpc3RzLCB0aGVuIGFuIElPRXhjZXB0aW9uIG1heSBiZSB0aHJvd24gYXQKLSAgKiB0aGlzIHBvaW50LgotICAqLwotICBwdWJsaWMgdm9pZCB3cml0ZSAoIGJ5dGVbXSBiLCBpbnQgb2ZmLCBpbnQgbGVuICkKLSAgewotICAgIGZCeXRlQXJyYXlPdXRwdXRTdHJlYW0ud3JpdGUoYixvZmYsbGVuKTsKLSAgfQotCi0gIC8qKgotICAqIFdyaXRlcyBhIHNpbmdsZSBieXRlIHRvIHRoZSBzdHJlYW0uCi0gICogQHBhcmFtIGIgVGhlIGJ5dGUgdG8gd3JpdGUuCi0gICogQHRocm93cyBJT0V4Y2VwdGlvbiBJZiBhbiBlcnJvciBvY2N1cnMuIEZvciBleGFtcGxlLCBpZiB0aGlzCi0gICogc3RyZWFtIHdhcyBjb25zdHJ1Y3RlZCB3aXRoIG92ZXJ3cml0ZUZpbGUgPSBmYWxzZSBhbmQgYSBmaWxlIG9mIHRoZQotICAqIHNhbWUgbmFtZSBhbHJlYWR5IGV4aXN0cywgdGhlbiBhbiBJT0V4Y2VwdGlvbiBtYXkgYmUgdGhyb3duIGF0Ci0gICogdGhpcyBwb2ludC4KLSAgKi8KLSAgcHVibGljIHZvaWQgd3JpdGUgKCBpbnQgYiApCi0gIHsKLSAgICBmQnl0ZUFycmF5T3V0cHV0U3RyZWFtLndyaXRlKGIpOwotICB9Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29tbW9uL0ZpbGVSZXNvdXJjZVV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvbW1vbi9GaWxlUmVzb3VyY2VVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NGQxYjlkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29tbW9uL0ZpbGVSZXNvdXJjZVV0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMTEyICAgMTIxMTk5IGplc3BlckBzZWxza2FiZXQub3JnIC0gSmVzcGVyIE34bGxlcgotICogMjAwNzA4MTMgICAxODg5OTkgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb21tb247Ci0KLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LkVudmlyb25tZW50TWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLlN0YXR1c1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuQ2hvaWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSVN0YXR1c0hhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5TdGF0dXNFeGNlcHRpb247Ci0KLQotCi0vKioKLSogVGhpcyBjbGFzcyBjb250YWlucyB1c2VmdWwgbWV0aG9kcyBmb3Igd29ya2luZyB3aXRoIEVjbGlwc2UgcmVzb3VyY2VzLgotKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBGaWxlUmVzb3VyY2VVdGlscwotewotICAvLwotICAvLyBLZWVwcyB0aGUgSVdvcmtzcGFjZSBoYW5naW5nIGFyb3VuZC4gU2VlIGdldFdvcmtzcGFjZSgpLgotICAvLwotICBwcml2YXRlIHN0YXRpYyBJV29ya3NwYWNlIHdvcmtzcGFjZV8gPSBudWxsOwotICAvLwotICAvLyBLZWVwcyB0aGUgSVdvcmtzcGFjZVJvb3QgaGFuZ2luZyBhcm91bmQuIFNlZSBnZXRXb3Jrc3BhY2VSb290KCkuCi0gIC8vCi0gIHByaXZhdGUgc3RhdGljIElXb3Jrc3BhY2VSb290IHJvb3RfID0gbnVsbDsKLSAgCi0vLyAgcHJpdmF0ZSBzdGF0aWMgTWVzc2FnZVV0aWxzIG1zZ18gPSBuZXcgTWVzc2FnZVV0aWxzKCAib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbW1vbi5lbnZpcm9ubWVudCIsIG5ldyBGaWxlUmVzb3VyY2VVdGlscygpICk7Ci0KLQotIC8qKgotICAqIFJldHVybnMgdGhlIElXb3Jrc3BhY2VSb290IG9iamVjdC4KLSAgKiBAcmV0dXJuIFRoZSBJV29ya3NwYWNlUm9vdCBvYmplY3QuCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgSVdvcmtzcGFjZVJvb3QgZ2V0V29ya3NwYWNlUm9vdCAoKQotICB7Ci0gICAgaWYgKHJvb3RfID09IG51bGwpCi0gICAgewotICAgICAgcm9vdF8gPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotICAgIH0KLSAgICByZXR1cm4gcm9vdF87Ci0gIH0KLQotICAvKioKLQkgKiBSZXR1cm5zIHRoZSBJV29ya3NwYWNlIG9iamVjdC4KLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBJV29ya3NwYWNlIG9iamVjdC4KLQkgKi8KLSAgcHVibGljIHN0YXRpYyBJV29ya3NwYWNlIGdldFdvcmtzcGFjZSAoKQotICB7Ci0gICAgaWYgKHdvcmtzcGFjZV8gPT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAocm9vdF8gPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcm9vdF8gPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotICAgICAgfQotICAgICAgCi0gICAgICB3b3Jrc3BhY2VfID0gcm9vdF8uZ2V0V29ya3NwYWNlKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiB3b3Jrc3BhY2VfOwotICB9Ci0gIAotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyBhbiBhcnJheSBvZiB0aHJlZSBjb21tb24gY2hvaWNlcy4gKGllLiBZZXMsIHllcyBhbGwsIGFuZCBjYW5jZWwgKQotICAgKi8KLSAgcHVibGljIHN0YXRpYyBDaG9pY2VbXSBnZXRUaHJlZVN0YXRlRmlsZU9wdGlvbnMoKSAKLSAgewotICAgIFZlY3RvciBjaG9pY2VzID0gbmV3IFZlY3RvcigpOwotICAgIAotICAgIGNob2ljZXMuYWRkKG5ldyBDaG9pY2UoICdZJywgRW52aXJvbm1lbnRNZXNzYWdlcy5MQUJFTF9ZRVMpKTsKLSAgICBjaG9pY2VzLmFkZChuZXcgQ2hvaWNlKCAnQScsIEVudmlyb25tZW50TWVzc2FnZXMuTEFCRUxfWUVTX1RPX0FMTCkpOwotICAgIGNob2ljZXMuYWRkKG5ldyBDaG9pY2UoICdDJywgRW52aXJvbm1lbnRNZXNzYWdlcy5MQUJFTF9DQU5DRUwpKTsKLSAgICAKLSAgICByZXR1cm4gKENob2ljZVtdKWNob2ljZXMudG9BcnJheShuZXcgQ2hvaWNlW2Nob2ljZXMuc2l6ZSgpXSk7Ci0gIH0KLSAgCi0gIC8qKgotICAqIFJldHVybnMgYW4KLSAgKiB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlIElSZXNvdXJjZX0KLSAgKiBvZiB0aGUgZ2l2ZW4gYWJzb2x1dGUgcGF0aG5hbWUgb3IgbnVsbCBpZiBubyBzdWNoIHJlc291cmNlIGV4aXN0cy4KLSAgKiBAcGFyYW0gYWJzb2x1dGVQYXRobmFtZSBUaGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgcmVzb3VyY2UuCi0gICogQHJldHVybiBUaGUgPGNvZGU+SVJlc291cmNlPC9jb2RlPi4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBJUmVzb3VyY2UgZmluZFJlc291cmNlICggU3RyaW5nIGFic29sdXRlUGF0aG5hbWUgKQotICB7Ci0gICAgaWYgKGFic29sdXRlUGF0aG5hbWUgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZpbmRSZXNvdXJjZShuZXcgUGF0aChhYnNvbHV0ZVBhdGhuYW1lKSk7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIGFuCi0gICoge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZSBJUmVzb3VyY2V9Ci0gICogb2YgdGhlIGdpdmVuIGFic29sdXRlIHBhdGggb3IgbnVsbCBpZiBubyBzdWNoIHJlc291cmNlIGV4aXN0cy4KLSAgKiBAcGFyYW0gYWJzb2x1dGVQYXRoIFRoZSBhYnNvbHV0ZSA8Y29kZT5JUGF0aDwvY29kZT4gb2YgdGhlIHJlc291cmNlLgotICAqIEByZXR1cm4gVGhlIDxjb2RlPklSZXNvdXJjZTwvY29kZT4uCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgSVJlc291cmNlIGZpbmRSZXNvdXJjZSAoIElQYXRoIGFic29sdXRlUGF0aCApCi0gIHsKLSAgICBpZiAoYWJzb2x1dGVQYXRoID09IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBGaWxlUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2VSb290KCkuZmluZE1lbWJlcihhYnNvbHV0ZVBhdGgpOwotICB9Ci0gIAotICAvKioKLSAgICogQ29waWVzIGEgZmlsZSBmcm9tIGEgcGx1Z2luJ3MgaW5zdGFsbGF0aW9uIGxvY2F0aW9uCi0gICAqIHRvIGFuIEVjbGlwc2UgZm9sZGVyLgotICAgKiBAcGFyYW0gcGx1Z2luIFRoZSBwbHVnaW4gY29udGFpbmluZyB0aGUgZmlsZXMgdG8gY29weS4KLSAgICogTXVzdCBub3QgYmUgbnVsbC4KLSAgICogQHBhcmFtIHNvdXJjZVBhdGggVGhlIHBhdGgsIHJlbGF0aXZlIHRvIHRoZSA8Y29kZT5wbHVnaW48L2NvZGU+Ci0gICAqIGluc3RhbGwgbG9jYXRpb24sIGNvbnRhaW5pbmcgdGhlIGZpbGVzIHRvIGNvcHkuCi0gICAqIElmIG51bGwsIHRoZW4gdGhlIHBsdWdpbiBpbnN0YWxsIGxvY2F0aW9uIGlzIHRoZSBzb3VyY2UgcGF0aAotICAgKiAoaWUuIG51bGwgaXMgZXF1aXZhbGVudCB0byAiLiIpLgotICAgKiBAcGFyYW0gcGF0aG5hbWUgVGhlIHBhdGhuYW1lIG9mIHRoZSBmaWxlIHRvIGNvcHkuCi0gICAqIFRoZSBwYXRobmFtZSBpcyByZWxhdGl2ZSB0byB0aGUgPGNvZGU+cGx1Z2luIHNvdXJjZVBhdGg8L2NvZGU+LgotICAgKiBNdXN0IG5vdCBiZSBudWxsLgotICAgKiBAcGFyYW0gdGFyZ2V0UGF0aCBUaGUgYWJzb2x1dGUgRWNsaXBzZSBwYXRoIG9mIHRoZSBmb2xkZXIgdG8KLSAgICogd2hpY2ggdGhlIGZpbGUgd2lsbCBiZSBjb3BpZWQuIFRoZSByZWxhdGl2ZSBwYXRobmFtZSBvZiB0aGUKLSAgICogZmlsZSBpcyBwcmVzZXJ2ZWQuCi0gICAqIE11c3Qgbm90IGJlIG51bGwuCi0gICAqIEBwYXJhbSBjcmVhdGVGb2xkZXJzIFRoZSBpbnRlcm1lZGlhdGUgZm9sZGVyIGNyZWF0aW9uIHBvbGljeSwgb25lIG9mCi0gICAqIHtAbGluayAjQ1JFQVRFIENSRUFURX0gb3Ige0BsaW5rICNET05UX0NSRUFURSBET05UX0NSRUFURX0uCi0gICAqIDx1bD4KLSAgICogPGxpPjxjb2RlPkNSRUFURTwvY29kZT4gLQotICAgKiBJZiBhbnkgaW50ZXJtZWRpYXRlIGZvbGRlcnMgaW4gdGhlIGdpdmVuIDxjb2RlPmFic29sdXRlUGF0aDwvY29kZT4KLSAgICogZG8gbm90IGV4aXN0LCB0aGV5IHdpbGwgYmUgY3JlYXRlZC4KLSAgICogPGxpPjxjb2RlPkRPTlRfQ1JFQVRFPC9jb2RlPiAtCi0gICAqIElmIGFueSBpbnRlcm1lZGlhdGUgZm9sZGVycyBpbiB0aGUgZ2l2ZW4gPGNvZGU+YWJzb2x1dGVQYXRoPC9jb2RlPgotICAgKiBkbyBub3QgZXhpc3QsIHRoZSBtZXRob2Qgd2lsbCB0aHJvdyBhIDxjb2RlPkNvcmVFeGNlcHRpb248L2NvZGU+LgotICAgKiA8L3VsPgotICAgKiBAcGFyYW0gb3ZlcndyaXRlRmlsZSBUaGUgcG9saWN5IGZvciBleGlzdGluZyBmaWxlcywgb25lIG9mCi0gICAqIHtAbGluayAjT1ZFUldSSVRFIE9WRVJXUklURX0gb3Ige0BsaW5rICNET05UX09WRVJXUklURSBET05UX09WRVJXUklURX0uCi0gICAqIDx1bD4KLSAgICogPGxpPjxjb2RlPk9WRVJXUklURTwvY29kZT4gLQotICAgKiBJZiBhIHJlc291cmNlIG9mIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGdpdmVuCi0gICAqIDxjb2RlPmFic29sdXRlUGF0aDwvY29kZT4gYWxyZWFkeSBleGlzdHMgYW5kIGlzIGEgZmlsZSwKLSAgICogaXQgd2lsbCBiZSByZXBsYWNlZC4KLSAgICogSWYgdGhlIHJlc291cmNlIGFscmVhZHkgZXhpc3RzIGFuZCBpdCBpcyBub3QgYSBmaWxlLAotICAgKiB0aGVuIG5vIGZpbGUgd2lsbCBiZSBjcmVhdGVkIGFuZAotICAgKiBhIDxjb2RlPkNvcmVFeGNlcHRpb248L2NvZGU+IHdpbGwgYmUgdGhyb3duLgotICAgKiA8bGk+PGNvZGU+RE9OVF9PVkVSV1JJVEU8L2NvZGU+IC0KLSAgICogSWYgYW55IHJlc291cmNlIG9mIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGdpdmVuCi0gICAqIDxjb2RlPmFic29sdXRlUGF0aDwvY29kZT4gYWxyZWFkeSBleGlzdHMsCi0gICAqIHRoZW4gbm8gZmlsZSB3aWxsIGJlIGNyZWF0ZWQgYW5kCi0gICAqIGEgPGNvZGU+Q29yZUV4Y2VwdGlvbjwvY29kZT4gd2lsbCBiZSB0aHJvd24uCi0gICAqIDwvdWw+Ci0gICAqIEBwYXJhbSBwcm9ncmVzc01vbml0b3IgVGhlIHByb2dyZXNzIG1vbml0b3IgZm9yIHRoZSBvcGVyYXRpb24sIG9yIG51bGwuCi0gICAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbiBBbiBleGNlcHRpb24gY29udGFpbmluZyBhbgotICAgKiB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXMgSVN0YXR1c30KLSAgICogd2l0aCBhIHNldmVyaXR5IG9mIDxjb2RlPklTdGF0dXMuRVJST1I8L2NvZGU+IGFuZCBhCi0gICAqIGxvY2FsZS1zcGVjaWZpYyBkZXNjcmlwdGlvbiBvZiB0aGUgY2F1c2UuCi0gICAqLwotICAgc3RhdGljIHB1YmxpYyB2b2lkIGNvcHlGaWxlKCBSZXNvdXJjZUNvbnRleHQgcmVzb3VyY2VDb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbHVnaW4gcGx1Z2luLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUGF0aCBzb3VyY2VQYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUGF0aCBwYXRobmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVBhdGggdGFyZ2V0UGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElTdGF0dXNIYW5kbGVyIHN0YXR1c01vbml0b3IgKQotICAgICB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotICAgewotICAgICB0cnkKLSAgICAgewotICAgICAgIElQYXRoIHRhcmdldCA9IHRhcmdldFBhdGguYXBwZW5kKHBhdGhuYW1lKTsKLSAgICAgICBJUGF0aCBzb3VyY2UgPSBzb3VyY2VQYXRoID09IG51bGwgPyBwYXRobmFtZSA6IHNvdXJjZVBhdGguYXBwZW5kKHBhdGhuYW1lKTsKLSAgICAgICBJbnB1dFN0cmVhbSBpbnB1dCA9IHBsdWdpbi5vcGVuU3RyZWFtKHNvdXJjZSk7Ci0gICAgICAgY3JlYXRlRmlsZShyZXNvdXJjZUNvbnRleHQsIHRhcmdldCwgaW5wdXQsIHByb2dyZXNzTW9uaXRvciwgc3RhdHVzTW9uaXRvcik7Ci0gICAgIH0KLSAgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgIHsKLSAgICAgICB0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW52aXJvbm1lbnRNZXNzYWdlcy5NU0dfRVJST1JfSU8sZSkpOwotICAgICB9Ci0gICB9Ci0gICAKLSAgLyoqCi0gICAqIERlbGV0ZXMgYSBmaWxlIHVuZGVyIGEgY29udGFpbmVyLgotICAgKiBUaGUgY29udGFpbmVyIG11c3QgYWxyZWFkeSBleGlzdC4KLSAgICogQHBhcmFtIGZpbGUgLSB0aGUgSUZpbGUgdG8gYmUgZGVsZXRlZAotICAgKiBAcGFyYW0gcHJvZ3Jlc3NNb25pdG9yCi0gICAqIEBwYXJhbSBzdGF0dXNNb25pdG9yCi0gICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCBvciBpZiBpdCBleGlzdHMgYW5kIGlzIHN1Y2Nlc3NmdWxseSBkZWxldGVkLiBGYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZGVsZXRlRmlsZSggUmVzb3VyY2VDb250ZXh0IHJlc291cmNlQ29udGV4dCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRmlsZSBmaWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVN0YXR1c0hhbmRsZXIgc3RhdHVzTW9uaXRvcikKLSAgICB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotICB7Ci0gICAgaWYgKGZpbGUuZXhpc3RzKCkpCi0gICAgewotICAgICAgaWYgKCFyZXNvdXJjZUNvbnRleHQuaXNPdmVyd3JpdGVGaWxlc0VuYWJsZWQoKSkKLSAgICAgIHsKLSAgICAgICAgSVN0YXR1cyBzdGF0dXMgCi0gICAgICAgICAgPSBTdGF0dXNVdGlscy53YXJuaW5nU3RhdHVzKCBOTFMuYmluZChFbnZpcm9ubWVudE1lc3NhZ2VzLk1TR19FUlJPUl9GSUxFX09WRVJXUklURV9ESVNBQkxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdeyBmaWxlLmdldFBhcmVudCgpLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLmdldE5hbWUoKX0pICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgIAotICAgICAgICBDaG9pY2UgY2hvaWNlID0gc3RhdHVzTW9uaXRvci5yZXBvcnQoIHN0YXR1cywgZ2V0VGhyZWVTdGF0ZUZpbGVPcHRpb25zKCkgKTsKLSAgICAgICAgCi0gICAgICAgIGlmKCBjaG9pY2UuZ2V0U2hvcnRjdXQoKSA9PSAnQycgKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBpZiggY2hvaWNlLmdldFNob3J0Y3V0KCkgPT0gJ0EnICkgcmVzb3VyY2VDb250ZXh0LnNldE92ZXJ3cml0ZUZpbGVzRW5hYmxlZCh0cnVlKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgLy9XZSBoYXZlIHBlcm1pc3Npb24gdG8gb3ZlcndyaXRlIHNvIGNoZWNrIGlmIGZpbGUgaXMgcmVhZC1vbmx5Ci0gICAgICBpZiAoZmlsZS5pc1JlYWRPbmx5KCkpCi0gICAgICB7Ci0gICAgICAgIGlmICghcmVzb3VyY2VDb250ZXh0LmlzQ2hlY2tvdXRGaWxlc0VuYWJsZWQoKSkKLSAgICAgICAgewotICAgICAgICAgIElTdGF0dXMgc3RhdHVzIAotICAgICAgICAgICAgPSBTdGF0dXNVdGlscy53YXJuaW5nU3RhdHVzKCBOTFMuYmluZChFbnZpcm9ubWVudE1lc3NhZ2VzLk1TR19FUlJPUl9GSUxFX0NIRUNLT1VUX0RJU0FCTEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXXsgZmlsZS5nZXRQYXJlbnQoKS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLmdldE5hbWUoKX0pICk7Ci0gICAgICAgICAgCi0gICAgICAgICAgQ2hvaWNlIGNob2ljZSA9IHN0YXR1c01vbml0b3IucmVwb3J0KCBzdGF0dXMsIGdldFRocmVlU3RhdGVGaWxlT3B0aW9ucygpICk7Ci0gICAgICAgICAgCi0gICAgICAgICAgaWYoIGNob2ljZS5nZXRTaG9ydGN1dCgpID09ICdDJyApIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAKLSAgICAgICAgICBpZiggY2hvaWNlLmdldFNob3J0Y3V0KCkgPT0gJ0EnICkgcmVzb3VyY2VDb250ZXh0LnNldENoZWNrb3V0RmlsZXNFbmFibGVkKHRydWUpOyAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgSUZpbGVbXSBmaWxlcyA9IG5ldyBJRmlsZVsxXTsKLSAgICAgICAgZmlsZXNbMF0gPSBmaWxlOwotICAgICAgICBJU3RhdHVzIHN0YXR1cyA9IGdldFdvcmtzcGFjZSgpLnZhbGlkYXRlRWRpdChmaWxlcywgbnVsbCk7Ci0gICAgICAgIAotICAgICAgICBpZiggc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5FUlJPUiApCi0gICAgICAgIHsKLSAgICAgICAgICBzdGF0dXNNb25pdG9yLnJlcG9ydEVycm9yKCBzdGF0dXMgKTsKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIAotICAgICAgZmlsZS5kZWxldGUodHJ1ZSwgbnVsbCk7Ci0gICAgfQotICAgIC8vQXQgdGhpcyBwb2ludCwgZWl0aGVyIHRoZSBmaWxlIGRpZCBub3QgZXhpc3Qgb3Igd2Ugc3VjY2Vzc2Z1bGx5IGRlbGV0ZWQKLSAgICAvLyBpdC4gUmV0dXJuIHN1Y2Nlc3MuCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogRGVsZXRlcyBhIGZvbGRlciB1bmRlciBhIGNvbnRhaW5lci4KLSAgICogQHBhcmFtIGZvbGRlciAtIHRoZSBJRm9sZGVyIHRvIGJlIGRlbGV0ZWQKLSAgICogQHBhcmFtIHByb2dyZXNzTW9uaXRvcgotICAgKiBAcGFyYW0gc3RhdHVzTW9uaXRvcgotICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIGZvbGRlciBkb2VzIG5vdCBleGlzdCBvciBpZiBpdCBleGlzdHMgYW5kIGlzIHN1Y2Nlc3NmdWxseSBkZWxldGVkIGFsb25nIHdpdGggaXRzIG1lbWJlcnMuIEZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZGVsZXRlRm9sZGVyKCBSZXNvdXJjZUNvbnRleHQgcmVzb3VyY2VDb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUZvbGRlciBmb2xkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElTdGF0dXNIYW5kbGVyIHN0YXR1c01vbml0b3IgKQotICAgICB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotICAgewotICAgICBpZiAoIWZvbGRlci5leGlzdHMoKSkgcmV0dXJuIHRydWU7Ci0KLSAgICAgYm9vbGVhbiAgICAgZGVsZXRlZCAgID0gdHJ1ZTsKLSAgICAgSVJlc291cmNlW10gcmVzb3VyY2VzID0gZm9sZGVyLm1lbWJlcnMoKTsKLSAgICAgCi0gICAgIGZvciAoaW50IGk9MDsgaTxyZXNvdXJjZXMubGVuZ3RoOyBpKyspCi0gICAgIHsKLSAgICAgICBJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZXNbaV07Ci0gICAgICAgaWYgKHJlc291cmNlIGluc3RhbmNlb2YgSUZpbGUpCi0gICAgICAgewotICAgICAgICAgZGVsZXRlZCA9IGRlbGV0ZUZpbGUocmVzb3VyY2VDb250ZXh0LCAoSUZpbGUpcmVzb3VyY2UsIHByb2dyZXNzTW9uaXRvciwgc3RhdHVzTW9uaXRvcik7Ci0gICAgICAgfQotICAgICAgIGlmIChyZXNvdXJjZSBpbnN0YW5jZW9mIElGb2xkZXIpCi0gICAgICAgewotICAgICAgICAgZGVsZXRlZCA9IGRlbGV0ZUZvbGRlciggcmVzb3VyY2VDb250ZXh0LCAoSUZvbGRlcilyZXNvdXJjZSwgcHJvZ3Jlc3NNb25pdG9yLCBzdGF0dXNNb25pdG9yKTsKLSAgICAgICB9Ci0KLSAgICAgICBpZiggIWRlbGV0ZWQgKSBicmVhazsKLSAgICAgfQotICAgICAKLSAgICAgaWYoIGRlbGV0ZWQgKQotICAgICB7Ci0gICAgICAgZm9sZGVyLmRlbGV0ZSh0cnVlLCB0cnVlLCBudWxsKTsKLSAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgfQotICAgICBlbHNlCi0gICAgICAgcmV0dXJuIGZhbHNlOwotICAgfQotCi0gIC8qKgotICAqIENyZWF0ZXMgYSBmaWxlIG9mIHRoZSBnaXZlbiA8Y29kZT5hYnNvbHV0ZVBhdGg8L2NvZGU+Ci0gICogYW5kIHJldHVybnMgaXRzIGhhbmRsZSBhcyBhbiA8Y29kZT5JRmlsZTwvY29kZT4uCi0gICogSWYgdGhlIGZpbGUgY2Fubm90IGJlIGNyZWF0ZWQsIGEKLSAgKiA8Y29kZT5Db3JlRXhjZXB0aW9uPC9jb2RlPiBjb250YWluaW5nIGFuCi0gICogPGNvZGU+SVN0YXR1czwvY29kZT4gb2JqZWN0IGlzIHRocm93bi4KLSAgKiBAcGFyYW0gYWJzb2x1dGVQYXRoIFRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBmaWxlIHRvIGNyZWF0ZS4KLSAgKiBUaGUgcHJvamVjdCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYXRoIG11c3QgYWxyZWFkeSBleGlzdCwKLSAgKiB0aGF0IGlzLCB0aGlzIG1ldGhvZCBjYW5ub3QgYmUgdXNlZCB0byBjcmVhdGUgcHJvamVjdHMuCi0gICogQHBhcmFtIHByb2dyZXNzTW9uaXRvciBUaGUgcHJvZ3Jlc3MgbW9uaXRvciBmb3IgdGhlIG9wZXJhdGlvbiwgb3IgbnVsbC4KLSAgKiBAcmV0dXJuIFRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGUgSUZpbGV9Ci0gICogaGFuZGxlIG9mIHRoZSBmaWxlLgotICAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbiBBbiBleGNlcHRpb24gY29udGFpbmluZyBhbgotICAqIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1cyBJU3RhdHVzfQotICAqIHdpdGggYSBzZXZlcml0eSBvZiA8Y29kZT5JU3RhdHVzLkVSUk9SPC9jb2RlPiBhbmQgYQotICAqIGxvY2FsZS1zcGVjaWZpYyBkZXNjcmlwdGlvbiBvZiB0aGUgY2F1c2UuCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgSUZpbGUgY3JlYXRlRmlsZSAoCi0gICAgUmVzb3VyY2VDb250ZXh0IHJlc291cmNlQ29udGV4dCwKLSAgICBJUGF0aCAgICAgICAgICAgYWJzb2x1dGVQYXRoLAotICAgIElucHV0U3RyZWFtICAgICBpbnB1dFN0cmVhbSwKLSAgICBJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciwKLSAgICBJU3RhdHVzSGFuZGxlciAgIHN0YXR1c0hhbmRsZXIgKQotCi0gICAgdGhyb3dzIENvcmVFeGNlcHRpb24gCi0gIHsgICAgCi0gICAgaWYgKCFhYnNvbHV0ZVBhdGguaXNBYnNvbHV0ZSgpKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgIlJlc291cmNlVXRpbHMiLDAsTkxTLmJpbmQoRW52aXJvbm1lbnRNZXNzYWdlcy5NU0dfRVJST1JfUEFUSF9OT1RfQUJTT0xVVEUsbmV3IE9iamVjdFtdIHthYnNvbHV0ZVBhdGgudG9TdHJpbmcoKX0pLG51bGwpKTsKLSAgICB9Ci0gICAgaWYgKGFic29sdXRlUGF0aC5zZWdtZW50Q291bnQoKSA8IDEpCi0gICAgewotICAgICAgdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCJSZXNvdXJjZVV0aWxzIiwwLE5MUy5iaW5kKEVudmlyb25tZW50TWVzc2FnZXMuTVNHX0VSUk9SX1BBVEhfRU1QVFksbmV3IE9iamVjdFtdIHthYnNvbHV0ZVBhdGgudG9TdHJpbmcoKX0pLG51bGwpKTsKLSAgICB9Ci0gICAgaWYgKGFic29sdXRlUGF0aC5zZWdtZW50Q291bnQoKSA8IDIpCi0gICAgewotICAgICAgdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCJSZXNvdXJjZVV0aWxzIiwwLE5MUy5iaW5kKEVudmlyb25tZW50TWVzc2FnZXMuTVNHX0VSUk9SX1BBVEhfTk9UX0ZPTERFUixuZXcgT2JqZWN0W10ge2Fic29sdXRlUGF0aC50b1N0cmluZygpfSksbnVsbCkpOwotICAgIH0KLSAgICBJQ29udGFpbmVyIHBhcmVudCAgID0gbWFrZUZvbGRlclBhdGgocmVzb3VyY2VDb250ZXh0LCBhYnNvbHV0ZVBhdGgucmVtb3ZlTGFzdFNlZ21lbnRzKDEpLCBwcm9ncmVzc01vbml0b3IsIHN0YXR1c0hhbmRsZXIpOwotICAgIFN0cmluZyAgICAgZmlsZU5hbWUgPSBhYnNvbHV0ZVBhdGgubGFzdFNlZ21lbnQoKTsKLSAgICAKLSAgICByZXR1cm4gbWFrZUZpbGUocmVzb3VyY2VDb250ZXh0LCBwYXJlbnQsIGZpbGVOYW1lLCBpbnB1dFN0cmVhbSwgcHJvZ3Jlc3NNb25pdG9yLCBzdGF0dXNIYW5kbGVyKTsKLSAgfQotCi0gIC8qKgotICAqIENyZWF0ZXMgdW5kZXIgdGhlIGdpdmVuIDxjb2RlPnByb2plY3Q8L2NvZGU+Ci0gICogYSBmaWxlIG9mIHRoZSBnaXZlbiA8Y29kZT5yZWxhdGl2ZVBhdGg8L2NvZGU+Ci0gICogYW5kIHJldHVybnMgaXRzIGhhbmRsZSBhcyBhbiA8Y29kZT5JRmlsZTwvY29kZT4uCi0gICogSWYgdGhlIGZpbGUgY2Fubm90IGJlIGNyZWF0ZWQsIGEKLSAgKiA8Y29kZT5Db3JlRXhjZXB0aW9uPC9jb2RlPiBjb250YWluaW5nIGFuCi0gICogPGNvZGU+SVN0YXR1czwvY29kZT4gb2JqZWN0IGlzIHRocm93bi4KLSAgKiBAcGFyYW0gYWJzb2x1dGVQYXRoIFRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBmaWxlIHRvIGNyZWF0ZS4KLSAgKiBUaGUgcHJvamVjdCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYXRoIG11c3QgYWxyZWFkeSBleGlzdCwKLSAgKiB0aGF0IGlzLCB0aGlzIG1ldGhvZCBjYW5ub3QgYmUgdXNlZCB0byBjcmVhdGUgcHJvamVjdHMuCi0gICogQHBhcmFtIGNyZWF0ZUZvbGRlcnMgVGhlIGludGVybWVkaWF0ZSBmb2xkZXIgY3JlYXRpb24gcG9saWN5LCBvbmUgb2YKLSAgKiB7QGxpbmsgI0NSRUFURSBDUkVBVEV9IG9yIHtAbGluayAjRE9OVF9DUkVBVEUgRE9OVF9DUkVBVEV9LgotICAqIDx1bD4KLSAgKiA8bGk+PGNvZGU+Q1JFQVRFPC9jb2RlPiAtCi0gICogSWYgYW55IGludGVybWVkaWF0ZSBmb2xkZXJzIGluIHRoZSBnaXZlbiA8Y29kZT5hYnNvbHV0ZVBhdGg8L2NvZGU+Ci0gICogZG8gbm90IGV4aXN0LCB0aGV5IHdpbGwgYmUgY3JlYXRlZC4KLSAgKiA8bGk+PGNvZGU+RE9OVF9DUkVBVEU8L2NvZGU+IC0KLSAgKiBJZiBhbnkgaW50ZXJtZWRpYXRlIGZvbGRlcnMgaW4gdGhlIGdpdmVuIDxjb2RlPmFic29sdXRlUGF0aDwvY29kZT4KLSAgKiBkbyBub3QgZXhpc3QsIHRoZSBtZXRob2Qgd2lsbCB0aHJvdyBhIDxjb2RlPkNvcmVFeGNlcHRpb248L2NvZGU+LgotICAqIDwvdWw+Ci0gICogQHBhcmFtIG92ZXJ3cml0ZUZpbGUgVGhlIHBvbGljeSBmb3IgZXhpc3RpbmcgZmlsZXMsIG9uZSBvZgotICAqIHtAbGluayAjT1ZFUldSSVRFIE9WRVJXUklURX0gb3Ige0BsaW5rICNET05UX09WRVJXUklURSBET05UX09WRVJXUklURX0uCi0gICogPHVsPgotICAqIDxsaT48Y29kZT5PVkVSV1JJVEU8L2NvZGU+IC0KLSAgKiBJZiBhIHJlc291cmNlIG9mIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGdpdmVuCi0gICogPGNvZGU+YWJzb2x1dGVQYXRoPC9jb2RlPiBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgYSBmaWxlLAotICAqIGl0IHdpbGwgYmUgcmVwbGFjZWQuCi0gICogSWYgdGhlIHJlc291cmNlIGFscmVhZHkgZXhpc3RzIGFuZCBpdCBpcyBub3QgYSBmaWxlLAotICAqIHRoZW4gbm8gZmlsZSB3aWxsIGJlIGNyZWF0ZWQgYW5kCi0gICogYSA8Y29kZT5Db3JlRXhjZXB0aW9uPC9jb2RlPiB3aWxsIGJlIHRocm93bi4KLSAgKiA8bGk+PGNvZGU+RE9OVF9PVkVSV1JJVEU8L2NvZGU+IC0KLSAgKiBJZiBhbnkgcmVzb3VyY2Ugb2YgdGhlIHNhbWUgbmFtZSBhcyB0aGUgZ2l2ZW4KLSAgKiA8Y29kZT5hYnNvbHV0ZVBhdGg8L2NvZGU+IGFscmVhZHkgZXhpc3RzLAotICAqIHRoZW4gbm8gZmlsZSB3aWxsIGJlIGNyZWF0ZWQgYW5kCi0gICogYSA8Y29kZT5Db3JlRXhjZXB0aW9uPC9jb2RlPiB3aWxsIGJlIHRocm93bi4KLSAgKiA8L3VsPgotICAqIEBwYXJhbSBwcm9ncmVzc01vbml0b3IgVGhlIHByb2dyZXNzIG1vbml0b3IgZm9yIHRoZSBvcGVyYXRpb24sIG9yIG51bGwuCi0gICogQHJldHVybiBUaGUge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlIElGaWxlfQotICAqIGhhbmRsZSBvZiB0aGUgZmlsZS4KLSAgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24gQW4gZXhjZXB0aW9uIGNvbnRhaW5pbmcgYW4KLSAgKiB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXMgSVN0YXR1c30KLSAgKiB3aXRoIGEgc2V2ZXJpdHkgb2YgPGNvZGU+SVN0YXR1cy5FUlJPUjwvY29kZT4gYW5kIGEKLSAgKiBsb2NhbGUtc3BlY2lmaWMgZGVzY3JpcHRpb24gb2YgdGhlIGNhdXNlLgotICAqLwotICBwdWJsaWMgc3RhdGljIElGaWxlIGNyZWF0ZUZpbGUgKAotICAgIFJlc291cmNlQ29udGV4dCByZXNvdXJjZUNvbnRleHQsCi0gICAgSVByb2plY3QgICAgICAgIHByb2plY3QsCi0gICAgSVBhdGggICAgICAgICAgIHJlbGF0aXZlUGF0aCwKLSAgICBJbnB1dFN0cmVhbSAgICAgaW5wdXRTdHJlYW0sCi0gICAgSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IsCi0gICAgSVN0YXR1c0hhbmRsZXIgICBzdGF0dXNNb25pdG9yICkKLSAKLSAgICB0aHJvd3MgQ29yZUV4Y2VwdGlvbiAKLSAgewotICAgIElQYXRoIGFic29sdXRlUGF0aCA9IHByb2plY3QuZ2V0RnVsbFBhdGgoKS5hcHBlbmQocmVsYXRpdmVQYXRoKTsKLSAgICByZXR1cm4gY3JlYXRlRmlsZShyZXNvdXJjZUNvbnRleHQsIGFic29sdXRlUGF0aCwgaW5wdXRTdHJlYW0sIHByb2dyZXNzTW9uaXRvciwgc3RhdHVzTW9uaXRvcik7Ci0gIH0KLQotICAvKioKLSAgKiBDcmVhdGVzIGFuIG91dHB1dCBzdHJlYW0gdGhhdCBjYW4gYmUgdXNlZCB0byB3cml0ZSB0byB0aGUKLSAgKiBnaXZlbiA8Y29kZT5maWxlPC9jb2RlPi4gQWN0dWFsIGNoYW5nZXMgdG8gdGhlIHdvcmtzcGFjZQotICAqIG1heSBvY2N1ciBkdXJpbmcgY3JlYXRpb24gb2YgdGhlIHN0cmVhbSwgd2hpbGUgd3JpdGluZyB0bwotICAqIHRoZSBzdHJlYW0sIG9yIHdoZW4gdGhlIHN0cmVhbSBpcyBjbG9zZWQuCi0gICogQSA8Y29kZT5Db3JlRXhjZXB0aW9uPC9jb2RlPiBjb250YWluaW5nCi0gICogYW4gPGNvZGU+SVN0YXR1czwvY29kZT4gd2lsbCBiZSB0aHJvd24KLSAgKiBhdCBzb21lIHBvaW50IGluIHRoZSBsaWZlY3ljbGUgb2YgdGhlIHN0cmVhbQotICAqIGlmIHRoZSBmaWxlIHJlc291cmNlIGNhbm5vdCBiZSBjcmVhdGVkLgotICAqIEBwYXJhbSBmaWxlIFRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGUgSUZpbGV9Ci0gICogaGFuZGxlIG9mIHRoZSBmaWxlIHJlc291cmNlIHRvIGNyZWF0ZS4gVGhlIHByb2plY3QgaW1wbGllZCBieSB0aGUKLSAgKiBwYXRobmFtZSBvZiB0aGUgZmlsZSBtdXN0IGFscmVhZHkgZXhpc3QsCi0gICogdGhhdCBpcywgdGhpcyBtZXRob2QgY2Fubm90IGJlIHVzZWQgdG8gY3JlYXRlIHByb2plY3RzLgotICAqIEBwYXJhbSBwcm9ncmVzc01vbml0b3IgVGhlIHByb2dyZXNzIG1vbml0b3IgZm9yIHRoZSBvcGVyYXRpb24sIG9yIG51bGwuCi0gICogQHJldHVybiBBbiA8Y29kZT5PdXRwdXRTdHJlYW08L2NvZGU+IHRpZWQgdG8gdGhlIGZpbGUgcmVzb3VyY2UuCi0gICogQWN0dWFsIGNoZWNrcyBvZiBvciBjaGFuZ2VzIHRvIHRoZSB3b3Jrc3BhY2UgbWF5IG9jY3VyIGFzIGVhcmx5IGR1cmluZwotICAqIHN0cmVhbSBjcmVhdGlvbiwgY2xvc3VyZSwgb3IgYW55IHRpbWUgaW4gYmV0d2Vlbi4KLSAgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24gQW4gZXhjZXB0aW9uIGNvbnRhaW5pbmcgYW4KLSAgKiB7QGxpbmsgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXMgSVN0YXR1c30KLSAgKiB3aXRoIGEgc2V2ZXJpdHkgb2YgPGNvZGU+SVN0YXR1cy5FUlJPUjwvY29kZT4gYW5kIGEKLSAgKiBsb2NhbGUtc3BlY2lmaWMgZGVzY3JpcHRpb24gb2YgdGhlIGNhdXNlLgotICAqIFJlYXNvbnMgaW5jbHVkZToKLSAgKiA8b2w+Ci0gICogPGxpPlRoZSBwcm9qZWN0IG9mIHRoZSBnaXZlbiBmaWxlJ3MgcGF0aCBkb2VzIG5vdCBleGlzdC4KLSAgKiA8bGk+QSBub24tZmlsZSByZXNvdXJjZSBvZiB0aGUgc2FtZSBuYW1lIG9mIHRoZSBnaXZlbiBmaWxlCi0gICogYWxyZWFkeSBleGlzdHMuCi0gICogPGxpPkEgZmlsZSByZXNvdXJjZSBvZiB0aGUgc2FtZSBuYW1lIG9mIHRoZSBnaXZlbiBmaWxlCi0gICogYWxyZWFkeSBleGlzdHMsIGFuZCA8Y29kZT5vdmVyd3JpdGVGaWxlPC9jb2RlPiBpcyBmYWxzZS4KLSAgKiA8bGk+T25lIG9yIG1vcmUgaW50ZXJtZWRpYXRlIGZvbGRlcnMgdG8gdGhlIGdpdmVuIGZpbGUKLSAgKiBkbyBub3QgZXhpc3QsIGFuZCA8Y29kZT5jcmVhdGVGb2xkZXJzPC9jb2RlPiBpcyBmYWxzZS4KLSAgKiA8L29sPgotICAqLwotCi0gIHB1YmxpYyBzdGF0aWMgT3V0cHV0U3RyZWFtIG5ld0ZpbGVPdXRwdXRTdHJlYW0gKAotICAgICAgIFJlc291cmNlQ29udGV4dCAgY29udGV4dCwKLSAgICAgICBJUGF0aCAgICAgICAgICAgIGZpbGUsCi0gICAgICAgSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IsCi0gICAgICAgSVN0YXR1c0hhbmRsZXIgICAgc3RhdHVzSGFuZGxlciApCi0gCi0gIHsKLSAgICByZXR1cm4gbmV3IEZpbGVSZXNvdXJjZU91dHB1dFN0cmVhbShjb250ZXh0LCBmaWxlLCBwcm9ncmVzc01vbml0b3IsIHN0YXR1c0hhbmRsZXIpOwotICB9Ci0KLSAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIC8vIE5hdWdodHkgYml0cy4uLgotICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAvLwotICAvLyBDcmVhdGVzIGEgcGF0aCBvZiBmb2xkZXJzLgotICAvLyBEbyBub3QgY2FsbCB3aXRoIGFuIGFic29sdXRlUGF0aCBvZiBsZXNzIHRoYW4gb25lIHNlZ21lbnQuCi0gIC8vCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgcGF0aCBvZiBmb2xkZXJzLgotICAgKiBEbyBub3QgY2FsbCB3aXRoIGFuIGFic29sdXRlUGF0aCBvZiBsZXNzIHRoYW4gb25lIHNlZ21lbnQuCi0gICAqIEBwYXJhbSByZXNvdXJjZUNvbnRleHQgdGhlIHJlc291cmNlIGNvbnRleHQgZm9yIG1ha2luZyBmb2xkZXJzLgotICAgKiBAcGFyYW0gYWJzb2x1dGVQYXRoIHRoZSBwYXRoIG9mIGZvbGRlcnMgdGhhdCB3aWxsIGJlIGNyZWF0ZWQuCi0gICAqIEBwYXJhbSBwcm9ncmVzc01vbml0b3IgdGhlIHByb2dyZXNzIG1vbml0b3IgdG8gYmUgdXNlZC4KLSAgICogQHBhcmFtIHN0YXR1c0hhbmRsZXIgdGhlIHN0YXR1cyBoYW5kbGVyLgotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIElDb250YWluZXIgb2YgdGhlIGNyZWF0ZWQgZm9sZGVyLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBJQ29udGFpbmVyIG1ha2VGb2xkZXJQYXRoICgKLSAgICBSZXNvdXJjZUNvbnRleHQgIHJlc291cmNlQ29udGV4dCwKLSAgICBJUGF0aCAgICAgICAgICAgIGFic29sdXRlUGF0aCwKLSAgICBJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciwKLSAgICBJU3RhdHVzSGFuZGxlciAgICBzdGF0dXNIYW5kbGVyICkKLSAgCi0gICAgdGhyb3dzIENvcmVFeGNlcHRpb24KLSAgewotICAgIGlmIChhYnNvbHV0ZVBhdGguc2VnbWVudENvdW50KCkgPD0gMSkKLSAgICB7Ci0gICAgICByZXR1cm4gZ2V0V29ya3NwYWNlUm9vdCgpLmdldFByb2plY3QoYWJzb2x1dGVQYXRoLnNlZ21lbnQoMCkpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgSUNvbnRhaW5lciBwYXJlbnQgPSBtYWtlRm9sZGVyUGF0aChyZXNvdXJjZUNvbnRleHQsIGFic29sdXRlUGF0aC5yZW1vdmVMYXN0U2VnbWVudHMoMSksIHByb2dyZXNzTW9uaXRvciwgc3RhdHVzSGFuZGxlciApOwotICAgICAgU3RyaW5nIGZvbGRlck5hbWUgPSBhYnNvbHV0ZVBhdGgubGFzdFNlZ21lbnQoKTsKLSAgICAgIAotICAgICAgY2hlY2tQYXJlbnQoIHBhcmVudCwgYWJzb2x1dGVQYXRoICk7Ci0gICAgICByZXR1cm4gbWFrZUZvbGRlcihyZXNvdXJjZUNvbnRleHQsIHBhcmVudCxmb2xkZXJOYW1lLCBwcm9ncmVzc01vbml0b3IgLCBzdGF0dXNIYW5kbGVyICk7Ci0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIHN0YXRpYyB2b2lkIGNoZWNrUGFyZW50KCBJQ29udGFpbmVyIHBhcmVudCwgSVBhdGggYWJzb2x1dGVQYXRoICkgdGhyb3dzIENvcmVFeGNlcHRpb24KLSAgewotICAgIGlmKCBwYXJlbnQgPT0gbnVsbCApCi0gICAgewotICAgICAgLy8gVGhlIHBhcmVudCBpcyBudWxsLCBzbyB0aGVyZSBtdXN0IGhhdmUgYmVlbiBwcm9ibGVtcyBjcmVhdGluZyBpdC4gIFdlIHdpbGwgdGhyb3cKLSAgICAgIC8vIGEgQ29yZUV4Y2VwdGlvbiB3YXJuaW5nIGZvciB0aGlzIHByb2JsZW0uCi0gICAgICBJUGF0aCAgcGFyZW50UGF0aCA9IGFic29sdXRlUGF0aC5yZW1vdmVMYXN0U2VnbWVudHMoMSk7Ci0gICAgICBTdHJpbmcgZm9sZGVyUGF0aCA9IGFic29sdXRlUGF0aC5sYXN0U2VnbWVudCgpOwotICAgICAgdGhyb3cgbmV3IENvcmVFeGNlcHRpb24oIFN0YXR1c1V0aWxzLndhcm5pbmdTdGF0dXMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkxTLmJpbmQoRW52aXJvbm1lbnRNZXNzYWdlcy5NU0dfRVJST1JfRk9MREVSX0NSRUFUSU9OX0RJU0FCTEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXXsgcGFyZW50UGF0aC50b1N0cmluZygpLCBmb2xkZXJQYXRofSApICkgKTsKLSAgICB9ICAKLSAgfQotICAKLSAgLy8KLSAgLy8gQ3JlYXRlcyBhIGZvbGRlciB1bmRlciBhIGNvbnRhaW5lci4KLSAgLy8gVGhlIGNvbnRhaW5lciBtdXN0IGFscmVhZHkgZXhpc3QuCi0gIC8vCi0gcHJpdmF0ZSBzdGF0aWMgSUZvbGRlciBtYWtlRm9sZGVyICgKLSAgICBSZXNvdXJjZUNvbnRleHQgIHJlc291cmNlQ29udGV4dCwKLSAgICBJQ29udGFpbmVyICAgICAgIHBhcmVudCwKLSAgICBTdHJpbmcgICAgICAgICAgIGZvbGRlck5hbWUsCi0gICAgSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IsCi0gICAgSVN0YXR1c0hhbmRsZXIgICAgc3RhdHVzSGFuZGxlciApCi0gIAotICB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotICB7Ci0gICAgSVJlc291cmNlIGNoaWxkICA9IHBhcmVudC5maW5kTWVtYmVyKGZvbGRlck5hbWUpOwotICAgIENob2ljZSAgICByZXN1bHQgPSBudWxsOwotICAgIAotICAgIGlmKCBjaGlsZCA9PSBudWxsICkKLSAgICB7Ci0gICAgICBpZiAoIXJlc291cmNlQ29udGV4dC5pc0NyZWF0ZUZvbGRlcnNFbmFibGVkKCkpICAKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gc3RhdHVzSGFuZGxlci5yZXBvcnQoCi0gICAgICAgICAgICAgICAgU3RhdHVzVXRpbHMud2FybmluZ1N0YXR1cygKLSAgICAgICAgICAgICAgICAJCU5MUy5iaW5kKEVudmlyb25tZW50TWVzc2FnZXMuTVNHX0VSUk9SX0ZPTERFUl9DUkVBVElPTl9ESVNBQkxFRCwKLSAgICAgICAgCSAgICAgICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W117IHBhcmVudC5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksIGZvbGRlck5hbWV9ICkgKSwgCi0gICAgICAgICAgICAgICAgZ2V0VGhyZWVTdGF0ZUZpbGVPcHRpb25zKCkgKTsKLSAgICAgICAgCi0gICAgICAgIGlmKCByZXN1bHQgPT0gbnVsbCB8fCByZXN1bHQuZ2V0U2hvcnRjdXQoKSA9PSAnQycgKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiggcmVzdWx0LmdldFNob3J0Y3V0KCkgPT0gJ0EnICkKLSAgICAgICAgewotICAgICAgICAgIHJlc291cmNlQ29udGV4dC5zZXRDcmVhdGVGb2xkZXJzRW5hYmxlZCh0cnVlKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgCi0gICAgICBJRm9sZGVyIGZvbGRlciA9IHBhcmVudC5nZXRGb2xkZXIobmV3IFBhdGgoZm9sZGVyTmFtZSkpOwotICAgICAgZm9sZGVyLmNyZWF0ZSh0cnVlLHRydWUsbnVsbCk7Ci0gICAgICByZXR1cm4gZm9sZGVyOwotICAgIH0KLSAgICBlbHNlIGlmKCBjaGlsZC5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZPTERFUiApCi0gICAgewotICAgICAgcmV0dXJuIChJRm9sZGVyKWNoaWxkOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgdGhyb3cgbmV3IENvcmVFeGNlcHRpb24oCi0gICAgICAgIG5ldyBTdGF0dXMoIElTdGF0dXMuRVJST1IsIAotICAgICAgICAgICAgICAgICAgICAiUmVzb3VyY2VVdGlscyIsCi0gICAgICAgICAgICAgICAgICAgIDAsIAotICAgICAgICAgICAgICAgICAgICBOTFMuYmluZChFbnZpcm9ubWVudE1lc3NhZ2VzLk1TR19FUlJPUl9SRVNPVVJDRV9OT1RfRk9MREVSLAotCQkJCQkgICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXXsgcGFyZW50LmdldEZ1bGxQYXRoKCkuYXBwZW5kKGZvbGRlck5hbWUpLnRvU3RyaW5nKCkgfSksCi0JCQludWxsICkgKTsKLSAgICB9Ci0gIH0KLQotICAvLwotICAvLyBDcmVhdGVzIGEgZmlsZSB1bmRlciBhIGNvbnRhaW5lci4KLSAgLy8gVGhlIGNvbnRhaW5lciBtdXN0IGFscmVhZHkgZXhpc3QuCi0gIC8vCi0gcHJpdmF0ZSBzdGF0aWMgSUZpbGUgbWFrZUZpbGUgKAotICAgIFJlc291cmNlQ29udGV4dCAgcmVzb3VyY2VDb250ZXh0LAotICAgIElDb250YWluZXIgICAgICAgcGFyZW50LAotICAgIFN0cmluZyAgICAgICAgICAgZmlsZU5hbWUsCi0gICAgSW5wdXRTdHJlYW0gICAgICBpbnB1dFN0cmVhbSwKLSAgICBJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciwKLSAgICBJU3RhdHVzSGFuZGxlciAgICBzdGF0dXNIYW5kbGVyICkKLSAKLSAgICB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotICB7Ci0gICAgSVJlc291cmNlIGNoaWxkICA9IHBhcmVudC5maW5kTWVtYmVyKGZpbGVOYW1lKTsKLSAgICBDaG9pY2UgICAgcmVzdWx0ID0gbnVsbDsKLSAgICAKLSAgICBpZiggY2hpbGQgIT0gbnVsbCApCi0gICAgewotICAgICAgaWYoIGNoaWxkLmdldFR5cGUoKSA9PSBJUmVzb3VyY2UuRklMRSApCi0gICAgICB7Ci0gICAgICAgIGlmKCAhcmVzb3VyY2VDb250ZXh0LmlzT3ZlcndyaXRlRmlsZXNFbmFibGVkKCkgKSAgIAotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gc3RhdHVzSGFuZGxlci5yZXBvcnQoIAotICAgICAgICAgICAgICAgIFN0YXR1c1V0aWxzLndhcm5pbmdTdGF0dXMoIE5MUy5iaW5kKEVudmlyb25tZW50TWVzc2FnZXMuTVNHX0VSUk9SX0ZJTEVfT1ZFUldSSVRFX0RJU0FCTEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXSB7cGFyZW50LmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSxmaWxlTmFtZX0pICksCQkJCQkgIAkJICAgIAotICAgICAgICAgICAgICAgIGdldFRocmVlU3RhdGVGaWxlT3B0aW9ucygpICk7Ci0gICAgICAgICAgCi0gICAgICAgICAgaWYoIHJlc3VsdCA9PSBudWxsIHx8IHJlc3VsdC5nZXRTaG9ydGN1dCgpID09ICdDJyApCi0gICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UgaWYoIHJlc3VsdC5nZXRTaG9ydGN1dCgpID09ICdBJyApCi0gICAgICAgICAgewotICAgICAgICAgICAgcmVzb3VyY2VDb250ZXh0LnNldE92ZXJ3cml0ZUZpbGVzRW5hYmxlZCh0cnVlKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0JCi0gICAgICAgIAotICAgICAgICAvL1dlIGhhdmUgcGVybWlzc2lvbiB0byBvdmVyd3JpdGUgc28gY2hlY2sgaWYgZmlsZSBpcyByZWFkLW9ubHkKLSAgICAgICAgaWYoIGNoaWxkLmdldFJlc291cmNlQXR0cmlidXRlcygpLmlzUmVhZE9ubHkoKSApCi0gICAgICAgIHsKLSAgICAgICAgICBpZiggIXJlc291cmNlQ29udGV4dC5pc0NoZWNrb3V0RmlsZXNFbmFibGVkKCkgKSAKLSAgICAgICAgICB7ICAgICAgICAgICAgCi0gICAgICAgICAgICByZXN1bHQgPSBzdGF0dXNIYW5kbGVyLnJlcG9ydCggCi0gICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIE5MUy5iaW5kKEVudmlyb25tZW50TWVzc2FnZXMuTVNHX0VSUk9SX0ZJTEVfQ0hFQ0tPVVRfRElTQUJMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXXsgcGFyZW50LmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSxmaWxlTmFtZX0gKSApLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICBnZXRUaHJlZVN0YXRlRmlsZU9wdGlvbnMoKSApOwotICAgICAgICAgICAgCi0JCSAgICBpZiggcmVzdWx0ID09IG51bGwgfHwgcmVzdWx0LmdldFNob3J0Y3V0KCkgPT0gJ0MnICkKLQkJICAgIHsKLSAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0JCSAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmKCByZXN1bHQuZ2V0U2hvcnRjdXQoKSA9PSAnQScgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICByZXNvdXJjZUNvbnRleHQuc2V0Q2hlY2tvdXRGaWxlc0VuYWJsZWQodHJ1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgSUZpbGVbXSBmaWxlcyA9IG5ldyBJRmlsZVsxXTsKLSAgICAgICAgICBmaWxlc1swXSA9IChJRmlsZSljaGlsZDsKLSAgICAgICAgICAKLSAgICAgICAgICBJU3RhdHVzIHN0YXR1cyA9IGdldFdvcmtzcGFjZSgpLnZhbGlkYXRlRWRpdChmaWxlcyxudWxsKTsKLSAgICAgICAgICAKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBzdGF0dXNIYW5kbGVyLnJlcG9ydCggc3RhdHVzICk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoKCBTdGF0dXNFeGNlcHRpb24gZXhjICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvL0NoYW5nZSB0aGUgY29udGVudHMgb2YgdGhlIGV4aXN0aW5nIGZpbGUuCi0gICAgICAgIElGaWxlIGZpbGUgPSBwYXJlbnQuZ2V0RmlsZSggbmV3IFBhdGgoZmlsZU5hbWUpICk7Ci0gICAgICAgIGZpbGUuc2V0Q29udGVudHMoIGlucHV0U3RyZWFtLCB0cnVlLCB0cnVlLCBudWxsICk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gZmlsZTsKLSAgICAgIAotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbiggCi0gICAgICAgICAgbmV3IFN0YXR1cyggSVN0YXR1cy5FUlJPUiwKLSAgICAgICAgICAgICAgICAgICAgICAiUmVzb3VyY2VVdGlscyIsCi0gICAgICAgICAgICAgICAgICAgICAgMCwgCi0gICAgICAgICAgICAgICAgICAgICAgTkxTLmJpbmQoRW52aXJvbm1lbnRNZXNzYWdlcy5NU0dfRVJST1JfUkVTT1VSQ0VfTk9UX0ZJTEUsCi0JCQkJICAgICAgICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W10ge3BhcmVudC5nZXRGdWxsUGF0aCgpLmFwcGVuZChmaWxlTmFtZSl9KSwKLQkJCQkJICBudWxsICkgKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vQ3JlYXRlIGEgbmV3IGZpbGUuCi0gICAgICBJRmlsZSBmaWxlID0gcGFyZW50LmdldEZpbGUoIG5ldyBQYXRoKGZpbGVOYW1lKSApOwotICAgICAgZmlsZS5jcmVhdGUoIGlucHV0U3RyZWFtLCB0cnVlLCBudWxsKTsKLSAgICAgIAotICAgICAgcmV0dXJuIGZpbGU7Ci0gICAgfQotICB9Ci0KLSAKLSAvKioKLSAgICogQ3JlYXRlcyBhIGZpbGUgb2YgdGhlIGdpdmVuIDxjb2RlPmFic29sdXRlUGF0aDwvY29kZT4KLSAgICogYW5kIHJldHVybnMgaXRzIGhhbmRsZSBhcyBhbiA8Y29kZT5JRmlsZTwvY29kZT4uCi0gICAqIElmIHRoZSBmaWxlIGNhbm5vdCBiZSBjcmVhdGVkLCBhCi0gICAqIDxjb2RlPkNvcmVFeGNlcHRpb248L2NvZGU+IGNvbnRhaW5pbmcgYW4KLSAgICogPGNvZGU+SVN0YXR1czwvY29kZT4gb2JqZWN0IGlzIHRocm93bi4KLSAgICogQHBhcmFtIGFic29sdXRlUGF0aCBUaGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgZmlsZSB0byBjcmVhdGUuCi0gICAqIFRoZSBwcm9qZWN0IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhdGggbXVzdCBhbHJlYWR5IGV4aXN0LAotICAgKiB0aGF0IGlzLCB0aGlzIG1ldGhvZCBjYW5ub3QgYmUgdXNlZCB0byBjcmVhdGUgcHJvamVjdHMuCi0gICAqIEBwYXJhbSBwcm9ncmVzc01vbml0b3IgVGhlIHByb2dyZXNzIG1vbml0b3IgZm9yIHRoZSBvcGVyYXRpb24sIG9yIG51bGwuCi0gICAqIEByZXR1cm4gVGhlIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZSBJRmlsZX0KLSAgICogaGFuZGxlIG9mIHRoZSBmaWxlLgotICAgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24gQW4gZXhjZXB0aW9uIGNvbnRhaW5pbmcgYW4KLSAgICoge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzIElTdGF0dXN9Ci0gICAqIHdpdGggYSBzZXZlcml0eSBvZiA8Y29kZT5JU3RhdHVzLkVSUk9SPC9jb2RlPiBhbmQgYQotICAgKiBsb2NhbGUtc3BlY2lmaWMgZGVzY3JpcHRpb24gb2YgdGhlIGNhdXNlLgotICAgKi8KLSAgIHB1YmxpYyBzdGF0aWMgSUZpbGUgY3JlYXRlRmlsZUF0TG9jYXRpb24gKAotICAgICBSZXNvdXJjZUNvbnRleHQgcmVzb3VyY2VDb250ZXh0LAotICAgICBJUGF0aCAgICAgICAgICAgYWJzb2x1dGVQYXRoLAotICAgICBJbnB1dFN0cmVhbSAgICAgaW5wdXRTdHJlYW0sCi0gICAgIElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yLAotICAgICBJU3RhdHVzSGFuZGxlciAgIHN0YXR1c0hhbmRsZXIgKQotCi0gICAgIHRocm93cyBDb3JlRXhjZXB0aW9uIAotICAgeyAgICAKLSAgICAgaWYgKCFhYnNvbHV0ZVBhdGguaXNBYnNvbHV0ZSgpKQotICAgICB7Ci0gICAgICAgdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCAiUmVzb3VyY2VVdGlscyIsMCxOTFMuYmluZChFbnZpcm9ubWVudE1lc3NhZ2VzLk1TR19FUlJPUl9QQVRIX05PVF9BQlNPTFVURSxuZXcgT2JqZWN0W10ge2Fic29sdXRlUGF0aC50b1N0cmluZygpfSksbnVsbCkpOwotICAgICB9Ci0gICAgIGlmIChhYnNvbHV0ZVBhdGguc2VnbWVudENvdW50KCkgPCAxKQotICAgICB7Ci0gICAgICAgdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCJSZXNvdXJjZVV0aWxzIiwwLE5MUy5iaW5kKEVudmlyb25tZW50TWVzc2FnZXMuTVNHX0VSUk9SX1BBVEhfRU1QVFksbmV3IE9iamVjdFtdIHthYnNvbHV0ZVBhdGgudG9TdHJpbmcoKX0pLG51bGwpKTsKLSAgICAgfQotICAgICBpZiAoYWJzb2x1dGVQYXRoLnNlZ21lbnRDb3VudCgpIDwgMikKLSAgICAgewotICAgICAgIHRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwiUmVzb3VyY2VVdGlscyIsMCxOTFMuYmluZChFbnZpcm9ubWVudE1lc3NhZ2VzLk1TR19FUlJPUl9QQVRIX05PVF9GT0xERVIsbmV3IE9iamVjdFtdIHthYnNvbHV0ZVBhdGgudG9TdHJpbmcoKX0pLG51bGwpKTsKLSAgICAgfQotICAgICBJQ29udGFpbmVyIHBhcmVudCAgID0gbWFrZUZvbGRlclBhdGhBdExvY2F0aW9uKHJlc291cmNlQ29udGV4dCwgYWJzb2x1dGVQYXRoLnJlbW92ZUxhc3RTZWdtZW50cygxKSwgcHJvZ3Jlc3NNb25pdG9yLCBzdGF0dXNIYW5kbGVyKTsKLSAgICAgU3RyaW5nICAgICBmaWxlTmFtZSA9IGFic29sdXRlUGF0aC5sYXN0U2VnbWVudCgpOwotICAgICAKLSAgICAgY2hlY2tQYXJlbnQoIHBhcmVudCwgYWJzb2x1dGVQYXRoICk7Ci0gICAgIAotICAgICByZXR1cm4gbWFrZUZpbGUocmVzb3VyY2VDb250ZXh0LCBwYXJlbnQsIGZpbGVOYW1lLCBpbnB1dFN0cmVhbSwgcHJvZ3Jlc3NNb25pdG9yLCBzdGF0dXNIYW5kbGVyKTsKLSAgIH0KLQotLyoqCi0gICogQ3JlYXRlcyBhIHBhdGggb2YgZm9sZGVycyB1c2luZyBhYnNvbHV0ZSBmaWxlbmFtZXMuCi0gICogRG8gbm90IGNhbGwgd2l0aCBhbiBhYnNvbHV0ZVBhdGggb2YgbGVzcyB0aGFuIG9uZSBzZWdtZW50LgotICAqIEBwYXJhbSByZXNvdXJjZUNvbnRleHQgdGhlIHJlc291cmNlIGNvbnRleHQgZm9yIG1ha2luZyBmb2xkZXJzLgotICAqIEBwYXJhbSByZXNvdXJjZSB0aGUgcmVzb3VyY2UgdGhhdCB3aWxsIGJlIGNyZWF0ZWQuCi0gICogQHBhcmFtIHByb2dyZXNzTW9uaXRvciB0aGUgcHJvZ3Jlc3MgbW9uaXRvciB0byBiZSB1c2VkLgotICAqIEBwYXJhbSBzdGF0dXNIYW5kbGVyIHRoZSBzdGF0dXMgaGFuZGxlci4KLSAgKiBAcmV0dXJuIHJldHVybnMgdGhlIElDb250YWluZXIgb2YgdGhlIGNyZWF0ZWQgZm9sZGVyLgotICAqLwotIHB1YmxpYyBzdGF0aWMgSUNvbnRhaW5lciBtYWtlRm9sZGVyUGF0aEF0TG9jYXRpb24gKAotICAgUmVzb3VyY2VDb250ZXh0ICByZXNvdXJjZUNvbnRleHQsCi0gICBJQ29udGFpbmVyICAgICAgIHJlc291cmNlLAotICAgSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IsCi0gICBJU3RhdHVzSGFuZGxlciAgIHN0YXR1c0hhbmRsZXIgKQotIAotICAgdGhyb3dzIENvcmVFeGNlcHRpb24KLSAgIHsKLQkgaWYgKHJlc291cmNlLmV4aXN0cygpKQotCSB7Ci0JCSBpZiAocmVzb3VyY2UgaW5zdGFuY2VvZiBJQ29udGFpbmVyKQotCQkgewotCQkJIHJldHVybiAoSUNvbnRhaW5lcikgcmVzb3VyY2U7Ci0JCSB9Ci0JCSBlbHNlCi0JCSB7Ci0JCQkgdGhyb3cgbmV3IENvcmVFeGNlcHRpb24oCi0JCQkJCSBuZXcgU3RhdHVzKCBJU3RhdHVzLkVSUk9SLCAKLQkJCQkJCQkgIlJlc291cmNlVXRpbHMiLAotCQkJCQkJCSAwLCAKLQkJCQkJCQkgTkxTLmJpbmQoRW52aXJvbm1lbnRNZXNzYWdlcy5NU0dfRVJST1JfUkVTT1VSQ0VfTk9UX0ZPTERFUiwKLQkJCQkJCQkJCSBuZXcgT2JqZWN0W117IHJlc291cmNlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSB9KSwKLQkJCQkJCQkJCSBudWxsICkgKTsKLQkJIH0KLQkgfQotCSBlbHNlCi0JIHsKLQkJIElDb250YWluZXIgcGFyZW50ID0gbWFrZUZvbGRlclBhdGhBdExvY2F0aW9uKHJlc291cmNlQ29udGV4dCwgcmVzb3VyY2UuZ2V0UGFyZW50KCksIHByb2dyZXNzTW9uaXRvciwgc3RhdHVzSGFuZGxlciApOwotCQkgU3RyaW5nIGZvbGRlck5hbWUgPSByZXNvdXJjZS5nZXROYW1lKCk7Ci0JCSAKLQkJIHJldHVybiBtYWtlRm9sZGVyKHJlc291cmNlQ29udGV4dCwgcGFyZW50LCBmb2xkZXJOYW1lLCBwcm9ncmVzc01vbml0b3IgLCBzdGF0dXNIYW5kbGVyICk7Ci0JIH0KLSB9Ci0gCi0gLyoqCi0gICogQ3JlYXRlcyBhIHBhdGggb2YgZm9sZGVycy4KLSAgKiBEbyBub3QgY2FsbCB3aXRoIGFuIGFic29sdXRlUGF0aCBvZiBsZXNzIHRoYW4gb25lIHNlZ21lbnQuCi0gICogQHBhcmFtIHJlc291cmNlQ29udGV4dCB0aGUgcmVzb3VyY2UgY29udGV4dCBmb3IgbWFraW5nIGZvbGRlcnMuCi0gICogQHBhcmFtIGFic29sdXRlUGF0aCB0aGUgcGF0aCBvZiBmb2xkZXJzIHRoYXQgd2lsbCBiZSBjcmVhdGVkLgotICAqIEBwYXJhbSBwcm9ncmVzc01vbml0b3IgdGhlIHByb2dyZXNzIG1vbml0b3IgdG8gYmUgdXNlZC4KLSAgKiBAcGFyYW0gc3RhdHVzSGFuZGxlciB0aGUgc3RhdHVzIGhhbmRsZXIuCi0gICogQHJldHVybiByZXR1cm5zIHRoZSBJQ29udGFpbmVyIG9mIHRoZSBjcmVhdGVkIGZvbGRlci4KLSAgKi8KLSBwdWJsaWMgc3RhdGljIElDb250YWluZXIgbWFrZUZvbGRlclBhdGhBdExvY2F0aW9uICgKLSAgIFJlc291cmNlQ29udGV4dCAgcmVzb3VyY2VDb250ZXh0LAotICAgSVBhdGggICAgICAgICAgICBhYnNvbHV0ZVBhdGgsCi0gICBJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciwKLSAgIElTdGF0dXNIYW5kbGVyICAgIHN0YXR1c0hhbmRsZXIgKQotIAotICAgdGhyb3dzIENvcmVFeGNlcHRpb24KLSB7Ci0gCXJldHVybiBtYWtlRm9sZGVyUGF0aEF0TG9jYXRpb24ocmVzb3VyY2VDb250ZXh0LAotIAkJZ2V0V29ya3NwYWNlUm9vdCgpLmdldENvbnRhaW5lckZvckxvY2F0aW9uKGFic29sdXRlUGF0aCksCi0gCQlwcm9ncmVzc01vbml0b3IsIHN0YXR1c0hhbmRsZXIpOwotIH0KLSAKLSAKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb21tb24vU3RyaW5nVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29tbW9uL1N0cmluZ1V0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3NGVhOTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb21tb24vU3RyaW5nVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbW1vbjsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLS8qKgotICAqIFRoaXMgY2xhc3MgY29udGFpbnMgc29tZSB1c2VmdWwgc3RyaW5nIHV0aWxpdGllcyB0aGF0IGFyZSBub3QgcHJvdmlkZWQgYnkKLSAgKiBlaXRoZXIgU3RyaW5nIG9yIFN0cmluZ0J1ZmZlci4KLSAgKgotICAqIEBhdXRob3IgUGV0ZXIgTW9vZ2sKLSAgKiBAZGF0ZSAgIEp1bHkgMTMsIDIwMDAKLSoqLwotcHVibGljIGZpbmFsIGNsYXNzIFN0cmluZ1V0aWxzCi17Ci0gIC8qKgotICAqIFRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBsaW5lIHNlcGFyYXRvci4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkVXTElORSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKTsKLQotICBwcml2YXRlIFN0cmluZ1V0aWxzKCl7fTsKLQotICAvKioKLSAgICAqIFRoaXMgbWV0aG9kIHNwbGl0cyBhIHNpbmdsZSBsaW5lIG9mIHRleHQgaW50byBtdWx0aXBsZSBsaW5lcwotICAgICogYmFzZWQgb24gYSBtYXhpbXVtIGxpbmUgbGVuZ3RoLiAgVGhlIG1ldGhvZCB3aWxsIHRyeSB0byBmaXQgYXMKLSAgICAqIG1hbnkgd29yZHMgYXMgcG9zc2libGUgb250byBhIGxpbmUgd2l0aG91dCBleGNlZWRpbmcgdGhlIG1heGltdW0KLSAgICAqIGxpbmUgbGVuZ3RoLiAgTm90ZTogdGhlIG9ubHkgY2FzZSB3aGVyZSBhIGxpbmUgbWlnaHQgZXhjZWVkIHRoZQotICAgICogbWF4aW11bSBpcyBpZiBhIHNpbmdsZSB3b3JkIGlzIGxvbmdlciB0aGFuIHRoZSBtYXhpbXVtLgotICAgICogQHBhcmFtIHRleHQgYSBzaW5nbGUgbGluZSBhIHRleHQgdGhhdCBpcyB0byBiZSBzcGxpdC4KLSAgICAqIEBwYXJhbSBtYXhfbGVuZ3RoIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBlYWNoIHNwbGl0IGxpbmUuCi0gICAgKiBAcmV0dXJuIGEgc3RyaW5nIGFycmF5IG9mIHRoZSBzcGxpdCBsaW5lcy4KLSAgKiovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nW10gc3BsaXR0ZXIoIFN0cmluZyB0ZXh0LCBpbnQgbWF4X2xlbmd0aCApCi0gIHsKLSAgICBWZWN0b3IgICAgICAgICAgcmV0dXJuX3RleHQgPSBuZXcgVmVjdG9yKDIwKTsKLSAgICBTdHJpbmdbXSAgICAgICAgcmV0dXJuX3N0cjsKLSAgICBpbnQgICAgICAgICAgICAgaW5kZXggPSAwOwotCi0gICAgd2hpbGUoIGluZGV4IDwgdGV4dC5sZW5ndGgoKSApCi0gICAgewotICAgICAgU3RyaW5nIHN0ciA9IHRleHQuc3Vic3RyaW5nKCBpbmRleCwgTWF0aC5taW4oIG1heF9sZW5ndGggKyBpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0Lmxlbmd0aCgpICkgKTsKLSAgICAgIGludCBzcGFjZV9pbmRleCA9IHN0ci5sYXN0SW5kZXhPZiggIiAiICk7Ci0KLSAgICAgIGlmKCBpbmRleCArIHN0ci5sZW5ndGgoKSA8IHRleHQubGVuZ3RoKCkgJiYKLSAgICAgICAgICB0ZXh0LmNoYXJBdCggaW5kZXggKyBzdHIubGVuZ3RoKCkgLSAxICkgIT0gJyAnICYmCi0gICAgICAgICAgdGV4dC5jaGFyQXQoIGluZGV4ICsgc3RyLmxlbmd0aCgpICkgIT0gJyAnICYmCi0gICAgICAgICAgc3BhY2VfaW5kZXggIT0gLTEgKQotICAgICAgewotICAgICAgICByZXR1cm5fdGV4dC5hZGRFbGVtZW50KCBzdHIuc3Vic3RyaW5nKCAwLCBzcGFjZV9pbmRleCApICk7Ci0gICAgICAgIGluZGV4ICs9IHNwYWNlX2luZGV4ICsgMTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuX3RleHQuYWRkRWxlbWVudCggc3RyLnRyaW0oKSApOwotICAgICAgICBpbmRleCArPSBzdHIubGVuZ3RoKCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuX3N0ciA9IG5ldyBTdHJpbmdbcmV0dXJuX3RleHQuc2l6ZSgpXTsKLQotICAgIGZvciggaW5kZXggPSAwOyBpbmRleCA8IHJldHVybl90ZXh0LnNpemUoKTsgaW5kZXgrKyApCi0gICAgewotICAgICAgcmV0dXJuX3N0cltpbmRleF0gPSAoU3RyaW5nKShyZXR1cm5fdGV4dC5lbGVtZW50QXQoaW5kZXgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmV0dXJuX3N0cjsKLSAgfQotCi0gIC8qKgotICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHN0cmluZyB3aXRoIGEgcmVwZWF0ZWQgbnVtYmVyIG9mIGNoYXJhY3RlcnMuCi0gICAgKiBAcGFyYW0gdGhlX2NoYXIgdGhlIGNoYXJhY3RlciB0byBiZSByZXBlYXRlZC4KLSAgICAqIEBwYXJhbSBjb3VudCB0aGUgbnVtYmVyIG9mIHRpbWUgdGhpcyBjaGFyYWN0ZXIgc2hvdWxkIGJlIHJlcGVhdGVkLgotICAgICogQHJldHVybiB0aGUgcmVzdWx0aW5nIHN0cmluZyBvZiByZXBlYXRlZCBjaGFyYWN0ZXJzLgotICAqKi8KLSAgc3RhdGljIHB1YmxpYyBTdHJpbmcgcmVwZWF0KCBjaGFyIHRoZV9jaGFyLCBpbnQgY291bnQgKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoIGNvdW50ICk7Ci0KLSAgICBmb3IoIGludCBpbmRleCA9IDA7IGluZGV4IDwgY291bnQ7IGluZGV4KysgKQotICAgIHsKLSAgICAgIGJ1Zi5hcHBlbmQoIHRoZV9jaGFyICk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGJ1Zi50b1N0cmluZygpOwotICB9Ci0KLSAgLyoqCi0gICAgKiBUaGlzIG1ldGhvZCBmbGF0dGVucyBhbiBhcnJheSBvZiBhcmd1bWVudHMgdG8gYSBzdHJpbmcuCi0gICAgKiBUaGUgbWV0aG9kIHJlc3BlY3RzIGVtYmVkZGVkIHdoaXRlc3BhY2UgYW5kIHF1b3Rlcy4KLSAgICAqIDx1bD4KLSAgICAqIDxsaT5BbnkgYXJndW1lbnQgd2l0aCBlbWJlZGRlZCB3aGl0ZXNwYWNlIHdpbGwgYmUgZmxhdHRlbmVkIG91dAotICAgICogd2l0aCBlbmNsb3NpbmcgcXVvdGVzLiBGb3IgZXhhbXBsZSwgdGhlIHNpbmdsZSBhcmd1bWVudAotICAgICogPHU+SGVsbG8gV29ybGQ8L3U+Ci0gICAgKiB3aWxsIGJlIHJldHVybmVkIGFzCi0gICAgKiA8dT4iSGVsbG8gV29ybGQiPC91Pi4KLSAgICAqIDxsaT5BbnkgYXJndW1lbnQgd2l0aCBxdW90ZXMgd2lsbCBiZSBmbGF0dGVuZWQgb3V0IHdpdGggdGhlCi0gICAgKiBxdW90ZXMgZXNjYXBlZC4gRm9yIGV4YW1wbGUsIHRoZSBzaW5nbGUgYXJndW1lbnQKLSAgICAqIDx1PiJIYXBweSBkYXlzIjwvdT4KLSAgICAqIHdpbGwgYmUgcmV0dXJuZWQgYXMKLSAgICAqIDx1PlwiSGFwcHkgZGF5c1wiPC91Pi4KLSAgICAqIDwvdWw+Ci0gICAgKiBAcGFyYW0gYXJndW1lbnRzIFRoZSBhcnJheSBvZiBzdHJpbmdzIHRvIGZsYXR0ZW4uCi0gICAgKiBAcmV0dXJuIHRoZSBmbGF0dGVuZWQgc3RyaW5nLgotICAqLwotICBzdGF0aWMgcHVibGljIFN0cmluZyBmbGF0dGVuQXJndW1lbnRzICggU3RyaW5nW10gYXJndW1lbnRzICkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0KLSAgICBmb3IgKGludCBpPTA7IGk8YXJndW1lbnRzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIC8vCi0gICAgICAvLyBBcHBlbmQgYSBzZXBhcmF0b3IgKGV4Y2VwdCB0aGUgZmlyc3QgdGltZSkuCi0gICAgICAvLwotICAgICAgaWYgKGkgPiAwKSBidWYuYXBwZW5kKCcgJyk7Ci0KLSAgICAgIC8vCi0gICAgICAvLyBMb29rIGZvciB3aGl0ZXNwYWNlLgotICAgICAgLy8KLSAgICAgIGJvb2xlYW4gd2hpdGVzcGFjZSA9IGZhbHNlOwotICAgICAgY2hhcltdIGNoYXJzID0gYXJndW1lbnRzW2ldLnRvQ2hhckFycmF5KCk7Ci0gICAgICBmb3IgKGludCBqPTA7ICF3aGl0ZXNwYWNlICYmIGo8Y2hhcnMubGVuZ3RoOyBqKyspCi0gICAgICB7Ci0gICAgICAgIGlmIChDaGFyYWN0ZXIuaXNXaGl0ZXNwYWNlKGNoYXJzW2pdKSkKLSAgICAgICAgewotICAgICAgICAgIHdoaXRlc3BhY2UgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8vCi0gICAgICAvLyBBcHBlbmQgdGhlIGFyZ3VtZW50LCBxdW90ZWQgYXMgbmVjZXNzYXJ5LgotICAgICAgLy8KLSAgICAgIGlmICh3aGl0ZXNwYWNlKSBidWYuYXBwZW5kKCciJyk7Ci0gICAgICBmb3IgKGludCBqPTA7IGo8Y2hhcnMubGVuZ3RoOyBqKyspCi0gICAgICB7Ci0gICAgICAgIGlmIChjaGFyc1tqXSA9PSAnIicpIGJ1Zi5hcHBlbmQoJ1xcJyk7Ci0gICAgICAgIGJ1Zi5hcHBlbmQoY2hhcnNbal0pOwotICAgICAgfQotICAgICAgaWYgKHdoaXRlc3BhY2UpIGJ1Zi5hcHBlbmQoJyInKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYnVmLnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKioKLSAgICAqIFRoaXMgbWV0aG9kIHBhcnNlcyB3aGl0ZXNwYWNlLWRlbGltaXR0ZWQgZmlsZW5hbWVzIGZyb20KLSAgICAqIHRoZSBnaXZlbiA8Y29kZT5pbnB1dDwvY29kZT4gc3RyZWFtLiA8Yj5MaW1pdGF0aW9uOjwvYj4KLSAgICAqIFF1b3RlZCBmaWxlbmFtZXMgb3IgZmlsZW5hbWVzIHdpdGggZW1iZWRkZWQgd2hpdGVzcGFjZQotICAgICogYXJlIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLgotICAgICogQHBhcmFtIGlucHV0IFRoZSBpbnB1dCBzdHJlYW0uCi0gICAgKiBAcmV0dXJuIEFuIGVudW1lcmF0aW9uIG9mIGZpbGVuYW1lcyBmcm9tIHRoZSBzdHJlYW0uCi0gICovCi0gIHN0YXRpYyBwdWJsaWMgRW51bWVyYXRpb24gcGFyc2VGaWxlbmFtZXNGcm9tU3RyZWFtICggSW5wdXRTdHJlYW0gaW5wdXQgKQotICB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotICAgIFZlY3RvciBmaWxlbmFtZXMgPSBuZXcgVmVjdG9yKDY0LDY0KTsKLSAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbnVsbDsKLSAgICBieXRlIHN0YXRlID0gU1RBVEVfV1M7Ci0gICAgaW50IGljID0gaW5wdXQucmVhZCgpOwotICAgIHdoaWxlIChpYyA+PSAwKQotICAgIHsKLSAgICAgIGNoYXIgYyA9IChjaGFyKWljOwotICAgICAgc3dpdGNoIChzdGF0ZSkKLSAgICAgIHsKLSAgICAgICAgY2FzZSBTVEFURV9XUzoKLSAgICAgICAgICBpZiAoIUNoYXJhY3Rlci5pc1doaXRlc3BhY2UoYykpCi0gICAgICAgICAgewotICAgICAgICAgICAgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChjKTsKLSAgICAgICAgICAgIHN0YXRlID0gU1RBVEVfTldTOwotICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTVEFURV9OV1M6Ci0gICAgICAgICAgaWYgKCFDaGFyYWN0ZXIuaXNXaGl0ZXNwYWNlKGMpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoYyk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgZmlsZW5hbWUgPSBidWZmZXIudG9TdHJpbmcoKTsKLSAgICAgICAgICAgIGZpbGVuYW1lcy5hZGQoZmlsZW5hbWUpOwotICAgICAgICAgICAgYnVmZmVyID0gbnVsbDsKLSAgICAgICAgICAgIHN0YXRlID0gU1RBVEVfV1M7Ci0gICAgICAgICAgfQotICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgaWMgPSBpbnB1dC5yZWFkKCk7Ci0gICAgfQotICAgIHJldHVybiBmaWxlbmFtZXMuZWxlbWVudHMoKTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGJ5dGUgU1RBVEVfV1MgPSAwOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBieXRlIFNUQVRFX05XUyA9IDE7Ci0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRydWUgaXMgdGhlIHR5cGUgcGFzc2VkIGluIGlzIGEgcHJpbXRpdmUgamF2YSB0eXBlCi0gICogQHBhcmFtIGNsYXNzIG5hbWUgU3RyaW5nCi0gICogQHJldHVybiB0cnVlIGlzIHByaW1pdGl2ZSB0eXBlCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1ByaW1pdGl2ZVR5cGUoU3RyaW5nIHR5cGVOYW1lKSAKLSAgewotCi0gICAgaWYgKHR5cGVOYW1lLmVxdWFsc0lnbm9yZUNhc2UoImJvb2xlYW4iKSB8fAotICAgICAgdHlwZU5hbWUuZXF1YWxzSWdub3JlQ2FzZSgiYnl0ZSIpIHx8Ci0gICAgICB0eXBlTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJkb3VibGUiKSB8fAotICAgICAgdHlwZU5hbWUuZXF1YWxzSWdub3JlQ2FzZSgiZmxvYXQiKSB8fAotICAgICAgdHlwZU5hbWUuZXF1YWxzSWdub3JlQ2FzZSgiaW50IikgfHwKLSAgICAgIHR5cGVOYW1lLmVxdWFsc0lnbm9yZUNhc2UoImxvbmciKSB8fAotICAgICAgdHlwZU5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2hvcnQiKSB8fAotICAgICAgdHlwZU5hbWUuZXF1YWxzSWdub3JlQ2FzZSgiY2hhciIpKQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotCi0gIH0KLQotICAvKioKLSAgKiBUaGUgbWV0aG9kIHJlcGxhY2UgdGhlIGNoYXJhY3RlcnMgdGhhdCBhcmUgYWxsb3dlZCBpbiBVUklzCi0gICogYW5kIG5vdCBhbGxvd2VkIGluIEphdmEgY2xhc3MgbmFtZXMgdG8gYW4gdW5kZXJzY29yZSAoJ18nKQotICAqIEBwYXJhbSBVUkkgU3RyaW5nCi0gICogQHJldHVybiB2YWxpZCBKYXZhIGNsYXNzIG5hbWUgU3RyaW5nCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFVSSTJDbGFzc05hbWUoIFN0cmluZyB1cmkgKSB7Ci0gICAgU3RyaW5nIGNsYXNzTmFtZSA9IHVyaTsKLSAgICBmb3IgKCBpbnQgaSA9IDA7IGkgPCBVUklfU1lNQk9MUy5sZW5ndGg7IGkrKyApIHsKLSAgICAJY2xhc3NOYW1lID0gY2xhc3NOYW1lLnJlcGxhY2UgKCBVUklfU1lNQk9MU1tpXSwgVU5ERVJTQ09SRSApOwotICAgIH0KLSAgICByZXR1cm4gY2xhc3NOYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYW5kIGFycmF5IG9mIHN0cmluZ3MgY29udGFpbmluZyB0aGUgZXhjZXB0aW9uIHRyYWNlYmFjayBpbmZvcm1hdGlvbiBvZgotICAgKiBhIFRocm93YWJsZS4gIFRoaXMgaXMgdGhlIHNhbWUgdHJhY2ViYWNrIGRhdGEgdGhhdCBpcyBkaXNwbGF5ZWQgYnkgZXhjLnByaW50U3RhY2tUcmFjZSgpLgotICAgKiBAcGFyYW0gZXhjIHRoZSBleGNlcHRpb24KLSAgICogQHJldHVybiBhIHN0cmluZyBhcnJheSBvZiB0aGUgdHJhY2ViYWNrIGluZm9ybWF0aW9uLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmdbXSBnZXRTdGFja1RyYWNlKCBUaHJvd2FibGUgZXhjICkKLSAgewotICAgIFZlY3RvciAgICAgICBsaW5lcyAgICAgICAgPSBuZXcgVmVjdG9yKCk7Ci0gICAgU3RyaW5nV3JpdGVyIHN0cmluZ1dyaXRlciA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICBQcmludFdyaXRlciAgcHJpbnRXcml0ZXIgID0gbmV3IFByaW50V3JpdGVyKCBzdHJpbmdXcml0ZXIgKTsKLSAgICAKLSAgICBleGMucHJpbnRTdGFja1RyYWNlKCBwcmludFdyaXRlciApOwotICAgIAotICAgIHRyeQotICAgIHsKLSAgICAgIHByaW50V3JpdGVyLmNsb3NlKCk7Ci0gICAgICBzdHJpbmdXcml0ZXIuY2xvc2UoKTsKLSAgICB9Ci0gICAgY2F0Y2goIEV4Y2VwdGlvbiBuZXN0ZWRFeGMgKQotICAgIHsKLSAgICAgIHJldHVybiBuZXcgU3RyaW5nWzBdOwotICAgIH0KLSAgICAKLSAgICBTdHJpbmdSZWFkZXIgc3RyaW5nUmVhZGVyID0gbmV3IFN0cmluZ1JlYWRlciggc3RyaW5nV3JpdGVyLnRvU3RyaW5nKCkgKTsKLSAgICBCdWZmZXJlZFJlYWRlciByZWFkZXIgICAgID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKCBzdHJpbmdSZWFkZXIgKTsKLSAgICBTdHJpbmcgICAgICAgICBsaW5lICAgICAgID0gbnVsbDsKLSAgICAKLSAgICB0cnkKLSAgICB7Ci0gICAgICBsaW5lID0gcmVhZGVyLnJlYWRMaW5lKCk7Ci0gICAgCi0gICAgICB3aGlsZSggbGluZSAhPSBudWxsICkKLSAgICAgIHsKLSAgICAgICAgbGluZXMuYWRkKCBsaW5lLnRyaW0oKSApOwotICAgICAgICBsaW5lID0gcmVhZGVyLnJlYWRMaW5lKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoKCBFeGNlcHRpb24gbmVzdGVkRXhjICkKLSAgICB7Ci0gICAgICByZXR1cm4gbmV3IFN0cmluZ1swXTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIChTdHJpbmdbXSlsaW5lcy50b0FycmF5KCBuZXcgU3RyaW5nWzBdICk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXJbXSBVUklfU1lNQk9MUyA9IHsnLScsICd+JywgJyMnLCAnLycsICcuJ307Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXIgVU5ERVJTQ09SRSA9ICdfJzsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29tbW9uL1dhaXRGb3JBdXRvQnVpbGRDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvbW1vbi9XYWl0Rm9yQXV0b0J1aWxkQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkM2Q1MWVmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29tbW9uL1dhaXRGb3JBdXRvQnVpbGRDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbW1vbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi0KLXB1YmxpYyBjbGFzcyBXYWl0Rm9yQXV0b0J1aWxkQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uCi17Ci0gIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoIElQcm9ncmVzc01vbml0b3IgbW9udGl0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkgCi0gIHsKLSAgCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLSAgCQotCXRyeSAKLQl7Ci0JICBQbGF0Zm9ybS5nZXRKb2JNYW5hZ2VyKCkuam9pbihSZXNvdXJjZXNQbHVnaW4uRkFNSUxZX0FVVE9fQlVJTEQsIG51bGwpOwotCX0gCi0JY2F0Y2goIEludGVycnVwdGVkRXhjZXB0aW9uIGV4YyApIAotCXsKLQkgIC8vIFVJU3luY2hyb25pemVyLnN5bmNFeGVjIHNlZW1zIHRvIGludGVycnVwdCB0aGUgVUkgdHJlYWQgd2hlbiB0aGUgYXV0b2J1aWxkZXIgaXMgZG9uZS4gIE5vdCBzdXJlLCB3aHkuCi0JICAvLyBJJ20gYXNzdW1pbmcgaGVyZSB0aGF0IHRoZSBhdXRvYnVpbGRlciBoYXMgYWN0dWFsbHkgY29tcGxldGVkIGl0cyBzdHVmZi4JCi0JfQotCQkKLQlyZXR1cm4gc3RhdHVzOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvbnRleHQvQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGVSZWdpc3RyeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb250ZXh0L0FjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlUmVnaXN0cnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VkYTlkYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvbnRleHQvQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGVSZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDUyMiAgIDE4NDAwNiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29udGV4dDsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYucHJlZmVyZW5jZXMuQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGU7Ci0KLQotcHVibGljIGNsYXNzIEFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlUmVnaXN0cnkKLXsKLSAgcHJpdmF0ZSBWZWN0b3IgcHJlZmVyZW5jZXNfOwotICAKLSAgcHJpdmF0ZSBzdGF0aWMgQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGVSZWdpc3RyeSByZWdpc3RyeV87Ci0KLSAgcHJpdmF0ZSBBY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZVJlZ2lzdHJ5KCkKLSAgewotICAgIHByZWZlcmVuY2VzXyA9IG5ldyBWZWN0b3IoKTsKLSAgICAKLSAgICBsb2FkRGlhbG9nc1ByZWZlcmVuY2VzKCk7ICAKLSAgfQotICAKLSAgc3RhdGljIHB1YmxpYyBBY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZVJlZ2lzdHJ5IGdldEluc3RhbmNlKCkKLSAgewotICAgIGlmKCByZWdpc3RyeV8gPT0gbnVsbCApCi0gICAgewotICAgICAgcmVnaXN0cnlfID0gbmV3IEFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlUmVnaXN0cnkoKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlZ2lzdHJ5XzsKLSAgfQotICAKLSAgLy8KLSAgcHJpdmF0ZSB2b2lkIGxvYWREaWFsb2dzUHJlZmVyZW5jZXMgKCkKLSAgewotICAJSUV4dGVuc2lvblJlZ2lzdHJ5IHJlZyA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0gICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gY29uZmlnID0gcmVnLmdldENvbmZpZ3VyYXRpb25FbGVtZW50c0ZvciggIm9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlIik7Ci0gICAgCi0gICAgZm9yKGludCBpZHg9MDsgaWR4PGNvbmZpZy5sZW5ndGg7IGlkeCsrKSAKLSAgICB7Ci0gICAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnQgICAgICBlbGVtICAgPSBjb25maWdbaWR4XTsgICAgIAotICAgICAgQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGUgZGlhbG9nID0gbmV3IEFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlKCk7Ci0gICAgICAKLSAgICAgIGRpYWxvZy5zZXRJZCggZWxlbS5nZXRBdHRyaWJ1dGUoImlkIikgKTsKLSAgICAgIGRpYWxvZy5zZXROYW1lKCBlbGVtLmdldEF0dHJpYnV0ZSgibmFtZSIpICk7Ci0gICAgICBkaWFsb2cuc2V0SW5mb3BvcCggZWxlbS5nZXRBdHRyaWJ1dGUoImluZm9wb3AiKSApOwotICAgICAgZGlhbG9nLnNldFRvb2x0aXAoIGVsZW0uZ2V0QXR0cmlidXRlKCJ0b29sdGlwIikgKTsKLSAgICAgIGRpYWxvZy5zZXRDYXRlZ29yeSggZWxlbS5nZXRBdHRyaWJ1dGUoImNhdGVnb3J5IikgKTsKLSAgICAgIAotICAgICAgU3RyaW5nIHNob3dDaGVja2JveCA9IGVsZW0uZ2V0QXR0cmlidXRlKCAic2hvd2NoZWNrYm94IiApOwotICAgICAgU3RyaW5nIGFsd2F5c0hpZGUgICA9IGVsZW0uZ2V0QXR0cmlidXRlKCAiYWx3YXlzaGlkZSIgKTsKLSAgICAgIAotICAgICAgZGlhbG9nLnNldFNob3dDaGVja2JveCggc2hvd0NoZWNrYm94ID09IG51bGwgPyB0cnVlIDogc2hvd0NoZWNrYm94LmVxdWFscyggInRydWUiICkgKTsKLSAgICAgIGRpYWxvZy5zZXRBbHdheXNIaWRlKCBhbHdheXNIaWRlID09IG51bGwgPyBmYWxzZSA6IGFsd2F5c0hpZGUuZXF1YWxzKCAidHJ1ZSIgKSApOwotICAgICAgCi0gICAgICBzZXRPYmplY3RJZHMoIGVsZW0uZ2V0QXR0cmlidXRlKCAib2JqZWN0aWRzIiApLCBkaWFsb2cgKTsKLSAgICAgIAotICAgICAgcHJlZmVyZW5jZXNfLmFkZChkaWFsb2cpOyAgICAgICAgCi0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHNldE9iamVjdElkcyggU3RyaW5nIGlkTGlzdCwgQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGUgZGlhbG9nICkKLSAgewotICAgIGlmKCBpZExpc3QgIT0gbnVsbCApCi0gICAgewotICAgICAgU3RyaW5nW10gaWRzID0gaWRMaXN0LnNwbGl0KCAiICIgKTsKLSAgICAgIAotICAgICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IGlkcy5sZW5ndGg7IGluZGV4KysgKQotICAgICAgewotICAgICAgICBkaWFsb2cuYWRkT2JqZWN0SWQoIGlkc1tpbmRleF0gKTsgICAKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0gIC8qKgotICAqIFJldHVybnMgYWxsIHJlZ2lzdGVyZWQgPGNvZGU+V2ViU2VydmljZVR5cGU8L2NvZGU+IG9iamVjdHMuCi0gICogQHJldHVybiBBbGwgcmVnaXN0ZXJlZCA8Y29kZT5XZWJTZXJ2aWNlVHlwZTwvY29kZT4gb2JqZWN0cy4KLSAgKi8KLSAgcHVibGljIEFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlW10gZ2V0QWN0aW9uRGlhbG9nc1ByZWZyZW5jZXMgKCkKLSAgewotICAgIHJldHVybiAoQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGVbXSlwcmVmZXJlbmNlc18udG9BcnJheSggbmV3IEFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlWzBdKTsKLSAgfQotICAKLSAgcHVibGljIEFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlIGdldEFjdGlvbkRpYWxvZ3NQcmVmcmVuY2UoIFN0cmluZyBpZCApCi0gIHsKLSAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSBwcmVmZXJlbmNlc18uc2l6ZSgpOwotICAgIEFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlIHJlc3VsdCA9IG51bGw7Ci0gICAgCi0gICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApCi0gICAgewotICAgICAgQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGUgcHJlZmVyZW5jZSA9IChBY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZSlwcmVmZXJlbmNlc18uZWxlbWVudEF0KCBpbmRleCApOwotICAgICAgCi0gICAgICBpZiggcHJlZmVyZW5jZS5nZXRPYmplY3RJZHMoKS5jb250YWlucyggaWQgKSApCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IHByZWZlcmVuY2U7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvbnRleHQvUGVyc2lzdGVudEFjdGlvbkRpYWxvZ3NDb250ZXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvbnRleHQvUGVyc2lzdGVudEFjdGlvbkRpYWxvZ3NDb250ZXh0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkMmE2MWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb250ZXh0L1BlcnNpc3RlbnRBY3Rpb25EaWFsb2dzQ29udGV4dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDUyMiAgIDE4NDAwNiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbnRleHQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYucGx1Z2luLkVudlBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYucHJlZmVyZW5jZXMuQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGU7Ci0KLQotcHVibGljIGNsYXNzIFBlcnNpc3RlbnRBY3Rpb25EaWFsb2dzQ29udGV4dCBleHRlbmRzIFBlcnNpc3RlbnRDb250ZXh0Ci17Ci0gIHByaXZhdGUgQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGVSZWdpc3RyeSByZWdpc3RyeTsKLSAgCi0gIHByaXZhdGUgc3RhdGljIFBlcnNpc3RlbnRBY3Rpb25EaWFsb2dzQ29udGV4dCBpbnN0YW5jZV8gPSBudWxsOwotCi0gIHByaXZhdGUgUGVyc2lzdGVudEFjdGlvbkRpYWxvZ3NDb250ZXh0KCkKLSAgewotICAgIHN1cGVyKEVudlBsdWdpbi5nZXRJbnN0YW5jZSgpKTsKLSAgfQotICAKLSAgc3RhdGljIHB1YmxpYyBQZXJzaXN0ZW50QWN0aW9uRGlhbG9nc0NvbnRleHQgZ2V0SW5zdGFuY2UoKQotICB7Ci0gICAgaWYoIGluc3RhbmNlXyA9PSBudWxsICkKLSAgICB7Ci0gICAgICBpbnN0YW5jZV8gPSBuZXcgUGVyc2lzdGVudEFjdGlvbkRpYWxvZ3NDb250ZXh0KCk7Ci0gICAgICBpbnN0YW5jZV8ubG9hZCgpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gaW5zdGFuY2VfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgbG9hZCgpCi0gIHsKLSAgICByZWdpc3RyeSA9IEFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKTsKLSAgICBBY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZVtdIGRpYWxvZ3MgPSByZWdpc3RyeS5nZXRBY3Rpb25EaWFsb2dzUHJlZnJlbmNlcygpOwotICAKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGRpYWxvZ3MubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgc2V0RGVmYXVsdChkaWFsb2dzW2ldLmdldElkKCksIGZhbHNlKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGVbXSBnZXREaWFsb2dzKCkKLSAgewotICAgIHJldHVybiByZWdpc3RyeS5nZXRBY3Rpb25EaWFsb2dzUHJlZnJlbmNlcygpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0QWN0aW9uRGlhbG9nRW5hYmxlZChTdHJpbmcgaWQsIGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICBzZXRWYWx1ZShpZCwgdmFsdWUpOwotICB9Ci0KLSAgLy8gVGhpcyBtZXRob2QgaXMgdXN1YWxseSBjYWxsZWQgZnJvbSB0aGUgcG9wdXAgd2l6YXJkIHdpdGggdGhlIElkCi0gIC8vIG9mIHRoZSBPYmplY3RDb250cmlidXRpb24gZGVmaW5pbmcgdGhlIHBvcHVwLgotICBwdWJsaWMgdm9pZCBzZXRPYmplY3RBY3Rpb25EaWFsb2dFbmFibGVkKCBTdHJpbmcgaWQsIGJvb2xlYW4gdmFsdWUgKQotICB7Ci0gICAgLy8gTmVlZCB0byBmaXJzdCBmaW5kIHRoZSBkaWFsb2cgb2JqZWN0IHRoYXQgcmVmZXJlbmNlcyB0aGUgcG9wdXAuCi0gICAgQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGUgZGlhbG9nID0gcmVnaXN0cnkuZ2V0QWN0aW9uRGlhbG9nc1ByZWZyZW5jZSggaWQgKTsKLSAgICAKLSAgICBpZiggZGlhbG9nICE9IG51bGwgKQotICAgIHsKLSAgICAgIHNldEFjdGlvbkRpYWxvZ0VuYWJsZWQoIGRpYWxvZy5nZXRJZCgpLCB2YWx1ZSApOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gaXNBY3Rpb25EaWFsb2dFbmFibGVkKFN0cmluZyBpZCkKLSAgewotICAgIGlmIChpZCA9PSBudWxsKSByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZ2V0VmFsdWVBc0Jvb2xlYW4oaWQpOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBzaG93RGlhbG9nKCBTdHJpbmcgaWQgKQotICB7Ci0gICAgQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGUgZGlhbG9nID0gcmVnaXN0cnkuZ2V0QWN0aW9uRGlhbG9nc1ByZWZyZW5jZSggaWQgKTsgICAgCi0gICAKLSAgICAvLyBXZSBhcmUgdHJ5aW5nIHRvIGRldGVybWluZSBpZiB0aGUgcG9wdXAgd2l6YXJkIHNob3VsZCBiZSBkaXNwbGF5ZWQKLSAgICAvLyBvciBub3Qgd2l0aCB0aGlzIGxvZ2ljLiAgSWYgdGhlIGRpYWxvZyB2YXJpYWJsZSBpcyBudWxsIHRoZW4KLSAgICAvLyB0aGVyZSB3YXMgbm8gcG9wdXAgZXh0ZW5zaW9uIHBvaW50IHBvaW50IGRlZmluZWQgZm9yIHRoaXMgd2l6YXJkLiAgSW4KLSAgICAvLyB0aGlzIGNhc2Ugd2Ugd2lsbCBhc3N1bWUgdGhhdCB0aGUgcG9wdXAgc2hvdWxkIGFsd2F5cyBiZSBkaXNwbGF5ZWQuCi0gICAgLy8gSW4gdGhlIGNhc2Ugd2hlcmUgdGhlIGV4dGVuc2lvbiBzYXlzIHRoYXQgdGhlIHNob3cgY2hlY2sgYm94IGNvbnRyb2wKLSAgICAvLyBzaG91bGQgYmUgZGlzcGxheWVkIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgd2l6YXJkIHNob3VsZCBub3QgYWx3YXlzCi0gICAgLy8gYmUgaGlkZGVuLCBhcyB3ZWxsIHdlIG5lZWQgdG8gY2hlY2sgdGhlIGN1cnJlbnQgc2V0dGluZyBvZiB0aGUgY2hlY2sKLSAgICAvLyBib3ggdmlhIHRoZSBpc0FjdGlvbkRpYWxvZ0VuYWJsZWQgY2FsbC4gIElmIHRoZSBzaG93IGNoZWNrIGJveCBzdGF0ZQotICAgIC8vIGRlZmluZWQgaW4gdGhlIGV4dGVuc2lvbiBpcyBmYWxzZSwgYnV0IGFsd2F5cyBoaWRlIGlzIGFsc28gZmFsc2UgdGhlbgotICAgIC8vIHdlIHdpbGwgZGlzcGxheSB0aGUgcG9wIHdpemFyZC4KLSAgICByZXR1cm4gZGlhbG9nID09IG51bGwgfHwKLSAgICAgICAgICAgKCAoIGRpYWxvZy5nZXRTaG93Q2hlY2tib3goKSAmJiAKLSAgICAgICAgICAgICAgICFkaWFsb2cuZ2V0QWx3YXlzSGlkZSgpICYmIAotICAgICAgICAgICAgICAgIWlzQWN0aW9uRGlhbG9nRW5hYmxlZCggZGlhbG9nLmdldElkKCkpICkgfHwKLSAgICAgICAgICAgICAoICFkaWFsb2cuZ2V0U2hvd0NoZWNrYm94KCkgJiYgCi0gICAgICAgICAgICAgICAhZGlhbG9nLmdldEFsd2F5c0hpZGUoKSApICk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIHNob3dDaGVja2JveCggU3RyaW5nIGlkICkKLSAgewotICAgIEFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlIGRpYWxvZyA9IHJlZ2lzdHJ5LmdldEFjdGlvbkRpYWxvZ3NQcmVmcmVuY2UoIGlkICk7ICAgIAotICAgIAotICAgIHJldHVybiBkaWFsb2cgPT0gbnVsbCA/IGZhbHNlIDogZGlhbG9nLmdldFNob3dDaGVja2JveCgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2NvbnRleHQvUGVyc2lzdGVudENvbnRleHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29udGV4dC9QZXJzaXN0ZW50Q29udGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYWE1YmQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29udGV4dC9QZXJzaXN0ZW50Q29udGV4dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29udGV4dDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuQ29udGV4dDsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIGlzIHVzZWQgYXMgdGhlIGJhc2UgY2xhc3MgZm9yIHR5cGVzIHRoYXQgd2hhdCB0byBwZXJzaXN0IHByZWZlcmVuY2UKLSAqIGRhdGEgaW4gdGhlIHBsdWdpbiBwcmVmZXJlbmNlcyBhcmVhLgotICoKLSAqCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBQZXJzaXN0ZW50Q29udGV4dCBpbXBsZW1lbnRzIENvbnRleHQKLXsKLSBwcm90ZWN0ZWQgUHJlZmVyZW5jZXMgcHJlZmVyZW5jZXNfOwotIHByb3RlY3RlZCBQbHVnaW4gcGx1Z2luXzsKLQotIHB1YmxpYyBQZXJzaXN0ZW50Q29udGV4dCAoIFBsdWdpbiBwbHVnaW4pCi0gCXsKLSAJCXBsdWdpbl8gPSBwbHVnaW47Ci0gCSAgCXByZWZlcmVuY2VzXyA9IHBsdWdpbi5nZXRQbHVnaW5QcmVmZXJlbmNlcygpOwotIAl9Ci0KLSAvKioKLSAgKiBTZXRzIHRoZSBkZWZhdWx0IGZvciBhIGJvb2xlYW4gcHJlZmVyZW5jZS4KLSAgKiBAcGFyYW0gbmFtZSB0aGUgcHJlZmVyZW5jZSBuYW1lLgotICAqIEBwYXJhbSB2YWx1ZSB0aGUgcHJlZmVyZW5jZSB2YWx1ZS4KLSAgKi8KLSBwdWJsaWMgdm9pZCBzZXREZWZhdWx0IChTdHJpbmcgbmFtZSwgYm9vbGVhbiB2YWx1ZSkgewotIAlwcmVmZXJlbmNlc18uc2V0RGVmYXVsdChuYW1lLCB2YWx1ZSk7Ci0gCX0KLSAKLSAvKioKLSAgKiBTZXRzIHRoZSBkZWZhdWx0IGZvciBhIHN0cmluZyBwcmVmZXJlbmNlLgotICAqIEBwYXJhbSBuYW1lIHRoZSBwcmVmZXJlbmNlIG5hbWUuCi0gICogQHBhcmFtIHZhbHVlIHRoZSBwcmVmZXJlbmNlIHZhbHVlLgotICAqLwotIHB1YmxpYyB2b2lkIHNldERlZmF1bHQgKFN0cmluZyBuYW1lLCBTdHJpbmcgdmFsdWUpIHsKLSAJcHJlZmVyZW5jZXNfLnNldERlZmF1bHQobmFtZSx2YWx1ZSk7Ci0gCX0KLSAKLSAvKioKLSAgKiBTZXRzIHRoZSBkZWZhdWx0IGZvciBhIGludCBwcmVmZXJlbmNlLgotICAqIEBwYXJhbSBuYW1lIHRoZSBwcmVmZXJlbmNlIG5hbWUuCi0gICogQHBhcmFtIHZhbHVlIHRoZSBwcmVmZXJlbmNlIHZhbHVlLgotICAqLwotIHB1YmxpYyB2b2lkIHNldERlZmF1bHQgKFN0cmluZyBuYW1lLCBpbnQgdmFsdWUpIHsKLSAJcHJlZmVyZW5jZXNfLnNldERlZmF1bHQobmFtZSx2YWx1ZSk7Ci0gCX0KLSAKLSAvKioKLSAgKiBTZXRzIHRoZSB2YWx1ZSBmb3IgYSBzdHJpbmcgcHJlZmVyZW5jZS4KLSAgKiBAcGFyYW0gbmFtZSB0aGUgcHJlZmVyZW5jZSBuYW1lLgotICAqIEBwYXJhbSB2YWx1ZSB0aGUgcHJlZmVyZW5jZSB2YWx1ZS4KLSAgKi8KLSBwdWJsaWMgdm9pZCBzZXRWYWx1ZSAoU3RyaW5nIG5hbWUsIFN0cmluZyB2YWx1ZSkgewotIAlwcmVmZXJlbmNlc18uc2V0VmFsdWUobmFtZSx2YWx1ZSk7Ci0gCXBsdWdpbl8uc2F2ZVBsdWdpblByZWZlcmVuY2VzKCk7Ci0gCX0KLSAKLSAvKioKLSAgKiBTZXRzIHRoZSB2YWx1ZSBmb3IgYSBib29sZWFuIHByZWZlcmVuY2UuCi0gICogQHBhcmFtIG5hbWUgdGhlIHByZWZlcmVuY2UgbmFtZS4KLSAgKiBAcGFyYW0gdmFsdWUgdGhlIHByZWZlcmVuY2UgdmFsdWUuCi0gICovCi0gcHVibGljIHZvaWQgc2V0VmFsdWUgKFN0cmluZyBuYW1lLCBib29sZWFuIHZhbHVlKSB7Ci0gCXByZWZlcmVuY2VzXy5zZXRWYWx1ZShuYW1lLCB2YWx1ZSk7Ci0gCXBsdWdpbl8uc2F2ZVBsdWdpblByZWZlcmVuY2VzKCk7Ci0gCX0KLSAKLSAvKioKLSAgKiBTZXRzIHRoZSB2YWx1ZSBmb3IgYSBpbnQgcHJlZmVyZW5jZS4KLSAgKiBAcGFyYW0gbmFtZSB0aGUgcHJlZmVyZW5jZSBuYW1lLgotICAqIEBwYXJhbSB2YWx1ZSB0aGUgcHJlZmVyZW5jZSB2YWx1ZS4KLSAgKi8KLSBwdWJsaWMgdm9pZCBzZXRWYWx1ZSAoU3RyaW5nIG5hbWUsIGludCB2YWx1ZSkgewotIAlwcmVmZXJlbmNlc18uc2V0VmFsdWUobmFtZSwgdmFsdWUpOwotIAlwbHVnaW5fLnNhdmVQbHVnaW5QcmVmZXJlbmNlcygpOwotCX0KLQotIC8qKgotICAqIEdldHMgdGhlIHZhbHVlIGZvciBhIHN0cmluZyBwcmVmZXJlbmNlLgotICAqIEBwYXJhbSBuYW1lIHRoZSBwcmVmZXJlbmNlIG5hbWUuCi0gICogQHJldHVybiB0aGUgcHJlZmVyZW5jZSB2YWx1ZS4KLSAgKi8KLSBwdWJsaWMgU3RyaW5nIGdldFZhbHVlQXNTdHJpbmcgKCBTdHJpbmcgbmFtZSkgewotIAlyZXR1cm4gcHJlZmVyZW5jZXNfLmdldFN0cmluZyhuYW1lKTsKLSAJfQotIAotIC8qKgotICAqIEdldHMgdGhlIHZhbHVlIGZvciBhIGJvb2xlYW4gcHJlZmVyZW5jZS4KLSAgKiBAcGFyYW0gbmFtZSB0aGUgcHJlZmVyZW5jZSBuYW1lLgotICAqIEByZXR1cm4gdGhlIHByZWZlcmVuY2UgdmFsdWUuCi0gICovCi0gIHB1YmxpYyBib29sZWFuIGdldFZhbHVlQXNCb29sZWFuICggU3RyaW5nIG5hbWUpIHsKLSAJcmV0dXJuIHByZWZlcmVuY2VzXy5nZXRCb29sZWFuKG5hbWUpOwotIAl9Ci0gIAotICAvKioKLSAgICogR2V0cyB0aGUgdmFsdWUgZm9yIGEgaW50IHByZWZlcmVuY2UuCi0gICAqIEBwYXJhbSBuYW1lIHRoZSBwcmVmZXJlbmNlIG5hbWUuCi0gICAqIEByZXR1cm4gdGhlIHByZWZlcmVuY2UgdmFsdWUuCi0gICAqLwotIHB1YmxpYyBpbnQgZ2V0VmFsdWVBc0ludCggU3RyaW5nIG5hbWUpIHsKLSAJCXJldHVybiBwcmVmZXJlbmNlc18uZ2V0SW50KG5hbWUpOwotIAl9Ci0gCi0gLyoqCi0gICogR2V0cyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgYSBzdHJpbmcgcHJlZmVyZW5jZS4KLSAgKiBAcGFyYW0gbmFtZSB0aGUgcHJlZmVyZW5jZSBuYW1lLgotICAqIEByZXR1cm4gdGhlIGRlZmF1bHQgcHJlZmVyZW5jZSB2YWx1ZS4KLSAgKi8KLSBwdWJsaWMgU3RyaW5nIGdldERlZmF1bHRTdHJpbmcoU3RyaW5nIG5hbWUpCi0gewotIAlyZXR1cm4gcHJlZmVyZW5jZXNfLmdldERlZmF1bHRTdHJpbmcobmFtZSk7Ci0gfQotIAotIC8qKgotICAqIEdldHMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIGEgYm9vbGVhbiBwcmVmZXJlbmNlLgotICAqIEBwYXJhbSBuYW1lIHRoZSBwcmVmZXJlbmNlIG5hbWUuCi0gICogQHJldHVybiB0aGUgZGVmYXVsdCBwcmVmZXJlbmNlIHZhbHVlLgotICAqLwotIHB1YmxpYyBib29sZWFuIGdldERlZmF1bHRCb29sZWFuKFN0cmluZyBuYW1lKQotIHsKLSAJcmV0dXJuIHByZWZlcmVuY2VzXy5nZXREZWZhdWx0Qm9vbGVhbihuYW1lKTsKLSB9Ci0gCi0gLyoqCi0gICogR2V0cyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgYSBpbnQgcHJlZmVyZW5jZS4KLSAgKiBAcGFyYW0gbmFtZSB0aGUgcHJlZmVyZW5jZSBuYW1lLgotICAqIEByZXR1cm4gdGhlIGRlZmF1bHQgcHJlZmVyZW5jZSB2YWx1ZS4KLSAgKi8KLSBwdWJsaWMgaW50IGdldERlZmF1bHRJbnQoU3RyaW5nIG5hbWUpCi0gewotIAlyZXR1cm4gcHJlZmVyZW5jZXNfLmdldERlZmF1bHRJbnQobmFtZSk7Ci0gfQotIAotIC8qKgotICAqIFNldHMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIGEgc3RyaW5nIHByZWZlcmVuY2UgaWYgYSBkZWZhdWx0IHZhbHVlIGhhcwotICAqIG5vdCBhbHJlYWR5IGJlZW4gc2V0LgotICAqIEBwYXJhbSBuYW1lIHRoZSBwcmVmZXJlbmNlIG5hbWUuCi0gICogQHBhcmFtIHZhbHVlIHRoZSBkZWZhdWx0IHByZWZlcmVuY2UgdmFsdWUKLSAgKi8KLSBwdWJsaWMgdm9pZCBzZXREZWZhdWx0U3RyaW5nSWZOb0RlZmF1bHQoIFN0cmluZyBrZXksIFN0cmluZyB2YWx1ZSApCi0gewotICAgLy8gSWYgdGhlIGtleSBhbHJlYWR5IGhhcyBhIGRlZmF1bHQgdmFsdWUgd2UgZG9uJ3Qgd2FudCB0byBvdmVycmlkZSBpdC4KLSAgIGlmKCBwcmVmZXJlbmNlc18uZ2V0RGVmYXVsdFN0cmluZygga2V5ICkuZXF1YWxzKCIiKSApIAotICAgewotICAgICBwcmVmZXJlbmNlc18uc2V0RGVmYXVsdCgga2V5LCB2YWx1ZSApOwotICAgfQotIH0KLSAKLSAvKioKLSAgKiBTZXRzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciBhIGJvb2xlYW4gcHJlZmVyZW5jZSBpZiBhIGRlZmF1bHQgdmFsdWUgaGFzCi0gICogbm90IGFscmVhZHkgYmVlbiBzZXQuCi0gICogQHBhcmFtIG5hbWUgdGhlIHByZWZlcmVuY2UgbmFtZS4KLSAgKiBAcGFyYW0gdmFsdWUgdGhlIGRlZmF1bHQgcHJlZmVyZW5jZSB2YWx1ZQotICAqLwotIHB1YmxpYyB2b2lkIHNldERlZmF1bHRCb29sZWFuSWZOb0RlZmF1bHQoIFN0cmluZyBrZXksIGJvb2xlYW4gdmFsdWUgKQotIHsKLSAgIC8vIElmIHRoZSBrZXkgYWxyZWFkeSBoYXMgYSBkZWZhdWx0IHZhbHVlIHdlIGRvbid0IHdhbnQgdG8gb3ZlcnJpZGUgaXQuCi0gICBpZiggcHJlZmVyZW5jZXNfLmdldERlZmF1bHRTdHJpbmcoIGtleSApLmVxdWFscygiIikgKSAKLSAgIHsKLSAgICAgcHJlZmVyZW5jZXNfLnNldERlZmF1bHQoIGtleSwgdmFsdWUgKTsKLSAgIH0KLSB9Ci0gCi0gLyoqCi0gICogU2V0cyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgYSBpbnQgcHJlZmVyZW5jZSBpZiBhIGRlZmF1bHQgdmFsdWUgaGFzCi0gICogbm90IGFscmVhZHkgYmVlbiBzZXQuCi0gICogQHBhcmFtIG5hbWUgdGhlIHByZWZlcmVuY2UgbmFtZS4KLSAgKiBAcGFyYW0gdmFsdWUgdGhlIGRlZmF1bHQgcHJlZmVyZW5jZSB2YWx1ZQotICAqLwotIHB1YmxpYyB2b2lkIHNldERlZmF1bHRJbnRJZk5vRGVmYXVsdCggU3RyaW5nIGtleSwgaW50IHZhbHVlICkKLSB7Ci0gICAvLyBJZiB0aGUga2V5IGFscmVhZHkgaGFzIGEgZGVmYXVsdCB2YWx1ZSB3ZSBkb24ndCB3YW50IHRvIG92ZXJyaWRlIGl0LgotICAgaWYoIHByZWZlcmVuY2VzXy5nZXREZWZhdWx0U3RyaW5nKCBrZXkgKS5lcXVhbHMoIiIpICkgCi0gICB7Ci0gICAgIHByZWZlcmVuY2VzXy5zZXREZWZhdWx0KCBrZXksIHZhbHVlICk7Ci0gICB9Ci0gfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb250ZXh0L1BlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvY29udGV4dC9QZXJzaXN0ZW50UmVzb3VyY2VDb250ZXh0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyZmI0YmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9jb250ZXh0L1BlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29udGV4dDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VEZWZhdWx0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0LlRyYW5zaWVudFJlc291cmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYucGx1Z2luLkVudlBsdWdpbjsKLQotCi1wdWJsaWMgY2xhc3MgUGVyc2lzdGVudFJlc291cmNlQ29udGV4dCBleHRlbmRzIFBlcnNpc3RlbnRDb250ZXh0IGltcGxlbWVudHMgUmVzb3VyY2VDb250ZXh0Ci17Ci0gIHByaXZhdGUgc3RhdGljIFBlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQgY29udGV4dF8gPSBudWxsOwotICAKLSAgcHVibGljIHN0YXRpYyBQZXJzaXN0ZW50UmVzb3VyY2VDb250ZXh0IGdldEluc3RhbmNlKCkKLSAgewotICAgIGlmKCBjb250ZXh0XyA9PSBudWxsICkKLSAgICB7Ci0gICAgICBjb250ZXh0XyA9IG5ldyBQZXJzaXN0ZW50UmVzb3VyY2VDb250ZXh0KCk7Ci0gICAgICBjb250ZXh0Xy5sb2FkKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBjb250ZXh0XzsKLSAgfQotICAKLSAgcHJpdmF0ZSBQZXJzaXN0ZW50UmVzb3VyY2VDb250ZXh0KCkKLSAgewotICAgIHN1cGVyKEVudlBsdWdpbi5nZXRJbnN0YW5jZSgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGxvYWQoKQotICB7Ci0gICAgc2V0RGVmYXVsdChQUkVGRVJFTkNFX09WRVJXUklURSwgUmVzb3VyY2VEZWZhdWx0cwotICAgICAgICAuZ2V0T3ZlcndyaXRlRmlsZXNEZWZhdWx0KCkpOwotICAgIHNldERlZmF1bHQoUFJFRkVSRU5DRV9DUkVBVEVfRk9MREVSUywgUmVzb3VyY2VEZWZhdWx0cwotICAgICAgICAuZ2V0Q3JlYXRlRm9sZGVyc0RlZmF1bHQoKSk7Ci0gICAgc2V0RGVmYXVsdChQUkVGRVJFTkNFX0NIRUNLT1VULCBSZXNvdXJjZURlZmF1bHRzLmdldENoZWNrb3V0RmlsZXNEZWZhdWx0KCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0T3ZlcndyaXRlRmlsZXNFbmFibGVkKGJvb2xlYW4gZW5hYmxlKQotICB7Ci0gICAgc2V0VmFsdWUoUFJFRkVSRU5DRV9PVkVSV1JJVEUsIGVuYWJsZSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc092ZXJ3cml0ZUZpbGVzRW5hYmxlZCgpCi0gIHsKLSAgICByZXR1cm4gZ2V0VmFsdWVBc0Jvb2xlYW4oUFJFRkVSRU5DRV9PVkVSV1JJVEUpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0Q3JlYXRlRm9sZGVyc0VuYWJsZWQoYm9vbGVhbiBlbmFibGUpCi0gIHsKLSAgICBzZXRWYWx1ZShQUkVGRVJFTkNFX0NSRUFURV9GT0xERVJTLCBlbmFibGUpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNDcmVhdGVGb2xkZXJzRW5hYmxlZCgpCi0gIHsKLSAgICByZXR1cm4gZ2V0VmFsdWVBc0Jvb2xlYW4oUFJFRkVSRU5DRV9DUkVBVEVfRk9MREVSUyk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRDaGVja291dEZpbGVzRW5hYmxlZChib29sZWFuIGVuYWJsZSkKLSAgewotICAgIHNldFZhbHVlKFBSRUZFUkVOQ0VfQ0hFQ0tPVVQsIGVuYWJsZSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc0NoZWNrb3V0RmlsZXNFbmFibGVkKCkKLSAgewotICAgIHJldHVybiBnZXRWYWx1ZUFzQm9vbGVhbihQUkVGRVJFTkNFX0NIRUNLT1VUKTsKLSAgfQotCi0gIHB1YmxpYyBSZXNvdXJjZUNvbnRleHQgY29weSgpCi0gIHsKLSAgICBSZXNvdXJjZUNvbnRleHQgY2MgPSBuZXcgVHJhbnNpZW50UmVzb3VyY2VDb250ZXh0KCk7Ci0gICAgY2Muc2V0T3ZlcndyaXRlRmlsZXNFbmFibGVkKGlzT3ZlcndyaXRlRmlsZXNFbmFibGVkKCkpOwotICAgIGNjLnNldENyZWF0ZUZvbGRlcnNFbmFibGVkKGlzQ3JlYXRlRm9sZGVyc0VuYWJsZWQoKSk7Ci0gICAgY2Muc2V0Q2hlY2tvdXRGaWxlc0VuYWJsZWQoaXNDaGVja291dEZpbGVzRW5hYmxlZCgpKTsKLSAgICByZXR1cm4gY2M7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvZWNsaXBzZS9BY2N1bXVsYXRlU3RhdHVzSGFuZGxlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9lY2xpcHNlL0FjY3VtdWxhdGVTdGF0dXNIYW5kbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjMDMwZjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9lY2xpcHNlL0FjY3VtdWxhdGVTdGF0dXNIYW5kbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNTEwICAgMTgwNTY3IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5DaG9pY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5TdGF0dXNFeGNlcHRpb247Ci0KLXB1YmxpYyBjbGFzcyBBY2N1bXVsYXRlU3RhdHVzSGFuZGxlciBleHRlbmRzIEJhc2VTdGF0dXNIYW5kbGVyewotCi0JQXJyYXlMaXN0IHN0YXR1c0xpc3RfID0gbnVsbDsKLQlBcnJheUxpc3QgZXJyb3JMaXN0XyA9IG51bGw7Ci0JQXJyYXlMaXN0IHdhcm5pbmdMaXN0XyA9IG51bGw7Ci0JCi0JLyoqCi0JICogQ29uc3RydWN0b3IKLQkgKi8KLQlwdWJsaWMgQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXIoKXsKLQkJcmVzZXRTdGF0dXMoKTsKLQl9Ci0JCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIHJlbG9hZGluZyBzdGF0dXMgdmFsdWVzIGFuZCB1c2luZyB0aGUgdXRpbGl0eSBtZXRob2RzCi0JICovCi0JcHVibGljIEFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyKElTdGF0dXNbXSBzdGF0dXMpewotCQlyZXNldFN0YXR1cygpOwotCQlmb3IgKGludCBpPTA7aTxzdGF0dXMubGVuZ3RoO2krKykKLQkJCXN0YXR1c0xpc3RfLmFkZChzdGF0dXNbaV0pOwotCX0KLQkKLQlwdWJsaWMgSVN0YXR1cyBnZXRTdGF0dXMoKSB7Ci0JICAgIElTdGF0dXMgd29yc3RTdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCSAgICAKLQkgICAgLy8gRmluZCB0aGUgd29yc3QgZXJyb3Igc3RhdHVzIGNvZGUKLQkgICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IHN0YXR1c0xpc3RfLnNpemUoKTsgaW5kZXgrKyApCi0JICAgIHsKLQkgICAgICBJU3RhdHVzIHN0YXR1cyA9IChJU3RhdHVzKXN0YXR1c0xpc3RfLmdldCggaW5kZXggKTsKLQkgICAgICAKLQkgICAgICBpZiggc3RhdHVzLmdldFNldmVyaXR5KCkgPiB3b3JzdFN0YXR1cy5nZXRTZXZlcml0eSgpICkKLQkgICAgICB7Ci0JICAgICAgICB3b3JzdFN0YXR1cyA9IHN0YXR1czsKLQkgICAgICB9Ci0JICAgIH0KLQkgICAgCi0JICAgIHJldHVybiB3b3JzdFN0YXR1czsKLQl9Ci0KLQlwdWJsaWMgdm9pZCByZXNldFN0YXR1cygpIHsKLQkgICAgc3RhdHVzTGlzdF8gPSBuZXcgQXJyYXlMaXN0KCk7Ci0JICAgIGVycm9yTGlzdF8gPSBudWxsOwotCSAgICB3YXJuaW5nTGlzdF8gPSBudWxsOwotCX0KLQotCXB1YmxpYyB2b2lkIHJlcG9ydChJU3RhdHVzIHN0YXR1cykgdGhyb3dzIFN0YXR1c0V4Y2VwdGlvbiB7Ci0JCXN0YXR1c0xpc3RfLmFkZChzdGF0dXMpOwotCX0KLQotCXB1YmxpYyBDaG9pY2UgcmVwb3J0KElTdGF0dXMgc3RhdHVzLCBDaG9pY2VbXSBjaG9pY2VzKSB7Ci0JICAJQ2hvaWNlIHJlc3VsdCA9IG51bGw7Ci0JICAJCi0JICAJLy8gQWx3YXlzIHRha2UgdGhlIGZpcnN0IGNob2ljZSBpZiBhdmFpbGFibGUuCi0JICAgIGlmKCBjaG9pY2VzICE9IG51bGwgJiYgY2hvaWNlcy5sZW5ndGggPiAwICkKLQkgICAgewotCSAgICAJcmVzdWx0ID0gY2hvaWNlc1swXTsKLQkgICAgfQotCSAgICAKLQkgICAgc3RhdHVzTGlzdF8uYWRkKCBzdGF0dXMgKTsKLQkgICAgCi0JICAgIHJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHVibGljIHZvaWQgcmVwb3J0RXJyb3IoSVN0YXR1cyBzdGF0dXMpIHsKLQkJc3RhdHVzTGlzdF8uYWRkKHN0YXR1cyk7Ci0JfQotCi0JcHVibGljIHZvaWQgcmVwb3J0SW5mbyhJU3RhdHVzIHN0YXR1cykgewotCQlzdGF0dXNMaXN0Xy5hZGQoc3RhdHVzKTsKLQl9Ci0JCi0JLyoqCi0JICogRm9yIHVzZSBieSBhc3NlcnRpb24gbWV0aG9kcwotCSAqIEByZXR1cm4gSVN0YXR1c1tdCi0JICovCi0JcHVibGljIElTdGF0dXNbXSBnZXRBbGxSZXBvcnRzKCl7Ci0JCWlmIChzdGF0dXNMaXN0Xz09bnVsbCB8fCBzdGF0dXNMaXN0Xy5pc0VtcHR5KCkpewotCQkJcmV0dXJuIG5ldyBJU3RhdHVzW117U3RhdHVzLk9LX1NUQVRVU307Ci0JCX0KLQkJcmV0dXJuIChJU3RhdHVzW10pc3RhdHVzTGlzdF8udG9BcnJheShuZXcgSVN0YXR1c1swXSk7Ci0JfQotCQotCS8qKgotCSAqIEdldCBlcnJvciBzdGF0dXNlcyBvbmx5Ci0JICogQHJldHVybiBJU3RhdHVzW10KLQkgKi8KLQlwdWJsaWMgSVN0YXR1c1tdIGdldEVycm9yUmVwb3J0cygpewotCQlpZiAoZXJyb3JMaXN0Xz09bnVsbCkKLQkJCXNvcnRSZXBvcnRzKCk7Ci0JICAgIHJldHVybiAoSVN0YXR1c1tdKWVycm9yTGlzdF8udG9BcnJheShuZXcgSVN0YXR1c1swXSk7Ci0JfQotCQotCS8qKgotCSAqIEdldCB3YXJuaW5nIHN0YXR1c2VzIG9ubHkKLQkgKiBAcmV0dXJuIElTdGF0dXNbXQotCSAqLwotCXB1YmxpYyBJU3RhdHVzW10gZ2V0V2FybmluZ1JlcG9ydHMoKXsKLQkJaWYgKHdhcm5pbmdMaXN0Xz09bnVsbCkKLQkJCXNvcnRSZXBvcnRzKCk7Ci0JCXJldHVybiAoSVN0YXR1c1tdKXdhcm5pbmdMaXN0Xy50b0FycmF5KG5ldyBJU3RhdHVzWzBdKTsKLQl9Ci0JCi0JLyoqCi0JICogU29ydCBhbGwgc3RhdHVzIHJlcG9ydHMKLQkgKi8KLQlwcml2YXRlIHZvaWQgc29ydFJlcG9ydHMoKXsKLQkgICAgZXJyb3JMaXN0XyA9IG5ldyBBcnJheUxpc3QoKTsKLQkgICAgd2FybmluZ0xpc3RfID0gbmV3IEFycmF5TGlzdCgpOwotCSAgICAKLQkgICAgLy8gU29ydCBhY2NvcmRpbmcgdG8gZXJyb3Igc3RhdHVzIGNvZGUKLQkgICAgZm9yKCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IHN0YXR1c0xpc3RfLnNpemUoKTsgaW5kZXgrKyApCi0JICAgIHsKLQkgICAgICBJU3RhdHVzIHN0YXR1cyA9IChJU3RhdHVzKXN0YXR1c0xpc3RfLmdldChpbmRleCk7Ci0JICAgICAgCi0JICAgICAgaWYoIHN0YXR1cy5nZXRTZXZlcml0eSgpPT0gSVN0YXR1cy5FUlJPUil7Ci0JICAgICAgICBlcnJvckxpc3RfLmFkZChzdGF0dXMpOwotCSAgICAgIH0KLQkgICAgICBlbHNlIGlmIChzdGF0dXMuZ2V0U2V2ZXJpdHkoKT09SVN0YXR1cy5XQVJOSU5HKXsKLQkgICAgICAgIHdhcm5pbmdMaXN0Xy5hZGQoc3RhdHVzKTsKLQkgICAgICB9Ci0JICAgIH0KLQkgICAgCi0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvZWNsaXBzZS9CYXNlRWNsaXBzZUVudmlyb25tZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2VjbGlwc2UvQmFzZUVjbGlwc2VFbnZpcm9ubWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzBhNDMwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvZWNsaXBzZS9CYXNlRWNsaXBzZUVudmlyb25tZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0LlJlc291cmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLQotCi0vKioKLSAqIFRoaXMgaW50ZXJmYWNlIGFkZHMgcmVzb3VyY2VzIHRvIHRoZSBiYXNlIElFbnZpcm9ubWVudC4KLSAqLwotcHVibGljIGludGVyZmFjZSBCYXNlRWNsaXBzZUVudmlyb25tZW50IGV4dGVuZHMgSUVudmlyb25tZW50IAotewotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyBhIFJlc291cmNlQ29udGV4dCBvYmplY3QgZm9yIHRoaXMgZW52aXJvbm1lbnQuCi0gICAqLwkKLSAgcHVibGljIFJlc291cmNlQ29udGV4dCBnZXRSZXNvdXJjZUNvbnRleHQoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvZWNsaXBzZS9CYXNlU3RhdHVzSGFuZGxlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9lY2xpcHNlL0Jhc2VTdGF0dXNIYW5kbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5NTljNGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9lY2xpcHNlL0Jhc2VTdGF0dXNIYW5kbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzAzMTQgICAxNzY4ODYgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LkNob2ljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LlN0YXR1c0V4Y2VwdGlvbjsKLQotcHVibGljIGNsYXNzIEJhc2VTdGF0dXNIYW5kbGVyIGltcGxlbWVudHMgSUVjbGlwc2VTdGF0dXNIYW5kbGVyCi17Ci0gIHByaXZhdGUgSVN0YXR1cyB3b3JzdFN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0gIAotICBwdWJsaWMgSVN0YXR1cyBnZXRTdGF0dXMoKSAKLSAgewotCXJldHVybiB3b3JzdFN0YXR1czsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlc2V0U3RhdHVzKCkgCi0gIHsKLSAgICB3b3JzdFN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7CQkKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlcG9ydChJU3RhdHVzIHN0YXR1cykgdGhyb3dzIFN0YXR1c0V4Y2VwdGlvbiAKLSAgewotICAgIGNoZWNrU3RhdHVzKHN0YXR1cyk7Ci0gIH0KLQotICBwdWJsaWMgQ2hvaWNlIHJlcG9ydChJU3RhdHVzIHN0YXR1cywgQ2hvaWNlW10gY2hvaWNlcykgCi0gIHsKLQljaGVja1N0YXR1cyhzdGF0dXMpOwotCXJldHVybiBjaG9pY2VzID09IG51bGwgfHwgY2hvaWNlcy5sZW5ndGggPT0gMD8gbnVsbCA6IGNob2ljZXNbMF07Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZXBvcnRFcnJvcihJU3RhdHVzIHN0YXR1cykgCi0gIHsKLQljaGVja1N0YXR1cyhzdGF0dXMpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVwb3J0SW5mbyhJU3RhdHVzIHN0YXR1cykgCi0gIHsKLQljaGVja1N0YXR1cyhzdGF0dXMpOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgdm9pZCBjaGVja1N0YXR1cyggSVN0YXR1cyBzdGF0dXMgKQotICB7Ci0gICAgaWYoIHN0YXR1cy5nZXRTZXZlcml0eSgpID4gd29yc3RTdGF0dXMuZ2V0U2V2ZXJpdHkoKSApCi0gICAgewotICAgICAgd29yc3RTdGF0dXMgPSBzdGF0dXM7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2VjbGlwc2UvRWNsaXBzZUVudmlyb25tZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2VjbGlwc2UvRWNsaXBzZUVudmlyb25tZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4NjU1YjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9lY2xpcHNlL0VjbGlwc2VFbnZpcm9ubWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLkNvbW1hbmRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuUmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuRW52aXJvbm1lbnRTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklTdGF0dXNIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQudXJpLlNpbXBsZVVSSUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC51cmkuSVVSSUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC51cmkuSVVSSVNjaGVtZTsKLQotCi0vKioKLSAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBhbiBJRW52aXJvbm1lbnQgY2xhc3MgZm9yIHRoZSBFY2xpcHNlIElFbnZpcm9ubWVudC4KLSAqIFRoaXMgSUVudmlyb25tZW50IGN1cnJlbnRseSBzdXBwb3J0cyB0aGUgInBsYXRmb3JtIiBwcm90b2NvbCBhbmQgdGhlICJmaWxlIgotICogcHJvdG9jb2wuCi0gKgotICovCi1wdWJsaWMgY2xhc3MgRWNsaXBzZUVudmlyb25tZW50IGltcGxlbWVudHMgQmFzZUVjbGlwc2VFbnZpcm9ubWVudAotewotICBwcml2YXRlIENvbW1hbmRNYW5hZ2VyICAgY29tbWFuZE1hbmFnZXJfICA9IG51bGw7Ci0gIHByaXZhdGUgU2ltcGxlVVJJRmFjdG9yeSB1cmlGYWN0b3J5XyAgICAgID0gbnVsbDsKLSAgcHJpdmF0ZSBSZXNvdXJjZUNvbnRleHQgIHJlc291cmNlQ29udGV4dF8gPSBudWxsOwotICBwcml2YXRlIElTdGF0dXNIYW5kbGVyICAgIHN0YXR1c0hhbmRsZXJfICAgPSBudWxsOwotICBwcml2YXRlIElMb2cgICAgICAgICAgICAgIGxvZ2dlcl8gICAgICAgICAgPSBudWxsOwotICAKLSAgcHVibGljIEVjbGlwc2VFbnZpcm9ubWVudCggQ29tbWFuZE1hbmFnZXIgIGNvbW1hbmRNYW5hZ2VyLCAKLSAJCSAgICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZUNvbnRleHQgcmVzb3VyY2VDb250ZXh0LAotCQkJCQkJICAgICAgICAgICAgICAgICBJU3RhdHVzSGFuZGxlciAgIHN0YXR1c0hhbmRsZXIgKQotICB7Ci0gICAgSVVSSVNjaGVtZSBlY2xpcHNlU2NoZW1lID0gRW52aXJvbm1lbnRTZXJ2aWNlLmdldEVjbGlwc2VTY2hlbWUoKTsKLSAgICBJVVJJU2NoZW1lIGZpbGVTY2hlbWUgICAgPSBFbnZpcm9ubWVudFNlcnZpY2UuZ2V0RmlsZVNjaGVtZSgpOwotICAgIAotICAgIGNvbW1hbmRNYW5hZ2VyXyAgPSBjb21tYW5kTWFuYWdlcjsKLSAgICByZXNvdXJjZUNvbnRleHRfID0gcmVzb3VyY2VDb250ZXh0OwotICAgIHVyaUZhY3RvcnlfICAgICAgPSBuZXcgU2ltcGxlVVJJRmFjdG9yeSgpOwotICAgIHN0YXR1c0hhbmRsZXJfICAgPSBzdGF0dXNIYW5kbGVyOwotICAgIAotICAgIHVyaUZhY3RvcnlfLnJlZ2lzdGVyU2NoZW1lKCAicGxhdGZvcm0iLCBlY2xpcHNlU2NoZW1lICk7Ci0gICAgdXJpRmFjdG9yeV8ucmVnaXN0ZXJTY2hlbWUoICJmaWxlIiwgZmlsZVNjaGVtZSApOwotICB9Ci0gIAotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uSUVudmlyb25tZW50I2dldENvbW1hbmRNYW5hZ2VyKCkKLSAgICovCi0gIHB1YmxpYyBDb21tYW5kTWFuYWdlciBnZXRDb21tYW5kTWFuYWdlcigpCi0gIHsKLSAgICByZXR1cm4gY29tbWFuZE1hbmFnZXJfOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLklFbnZpcm9ubWVudCNnZXRMb2coKQotICAgKi8KLSAgcHVibGljIElMb2cgZ2V0TG9nKCkKLSAgewotCSAgaWYoIGxvZ2dlcl8gPT0gbnVsbCApCi0gICAgeyAgCi0gICAgICBsb2dnZXJfID0gRW52aXJvbm1lbnRTZXJ2aWNlLmdldEVjbGlwc2VMb2coKTsgCi0gICAgfTsKLQkKLSAgICByZXR1cm4gbG9nZ2VyXzsKLSAgfQotCi0gIC8qKgotICAgKiAKLSAgICogQHBhcmFtIGxvZ2dlciB0aGUgbmV3IGxvZ2dlciBmb3IgdGhpcyBlbnZpcm9ubWVudC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExvZyggSUxvZyBsb2dnZXIgKQotICB7Ci0JbG9nZ2VyXyA9IGxvZ2dlcjsgIAotICB9Ci0gICAKLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLklFbnZpcm9ubWVudCNnZXRTdGF0dXNIYW5kbGVyKCkKLSAgICovCi0gIHB1YmxpYyBJU3RhdHVzSGFuZGxlciBnZXRTdGF0dXNIYW5kbGVyKCkKLSAgewotICAgIHJldHVybiBzdGF0dXNIYW5kbGVyXzsKLSAgfQotCi0gIC8qKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLklFbnZpcm9ubWVudCNnZXRVUklGYWN0b3J5KCkKLSAgICovCi0gIHB1YmxpYyBJVVJJRmFjdG9yeSBnZXRVUklGYWN0b3J5KCkKLSAgewotICAgIHJldHVybiB1cmlGYWN0b3J5XzsKLSAgfQotCi0gIC8qKgotICAgKiBAcmV0dXJuIHJldHVybnMgYSBSZXNvdXJjZUNvbnRleHQgZm9yIHRoaXMgSUVudmlyb25tZW50LgotICAgKi8KLSAgcHVibGljIFJlc291cmNlQ29udGV4dCBnZXRSZXNvdXJjZUNvbnRleHQoKQotICB7Ci0gICAgcmV0dXJuIHJlc291cmNlQ29udGV4dF87Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENvbW1hbmRNYW5hZ2VyKCBDb21tYW5kTWFuYWdlciBtYW5hZ2VyICkKLSAgewotCWNvbW1hbmRNYW5hZ2VyXyA9IG1hbmFnZXI7ICAKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9lY2xpcHNlL0Vudmlyb25tZW50TWFuYWdlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9lY2xpcHNlL0Vudmlyb25tZW50TWFuYWdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTQyMTY1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvZWNsaXBzZS9FbnZpcm9ubWVudE1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDMxNCAgIDE3Njg4NiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29udGV4dC5QZXJzaXN0ZW50UmVzb3VyY2VDb250ZXh0OwotCi1wdWJsaWMgY2xhc3MgRW52aXJvbm1lbnRNYW5hZ2VyCi17Ci0gIC8qKgotICAgKiBSZXR1cm5zIGEgbmV3IGluc3RhbmNlIG9mIGFuIElFbnZpcm9ubWVudCBmb3IgdGhlIEVjbGlwc2Ugbm9uLUdVSS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgQmFzZUVjbGlwc2VFbnZpcm9ubWVudCBnZXROZXdFbnZpcm9ubWVudCgpCi0gIHsKLSAgICBQZXJzaXN0ZW50UmVzb3VyY2VDb250ZXh0IGNvbnRleHQgICAgICAgID0gUGVyc2lzdGVudFJlc291cmNlQ29udGV4dC5nZXRJbnN0YW5jZSgpOwotICAgIElFY2xpcHNlU3RhdHVzSGFuZGxlciAgICAgaGFuZGxlciAgICAgICAgPSBuZXcgQmFzZVN0YXR1c0hhbmRsZXIoKTsKLSAgICBFY2xpcHNlRW52aXJvbm1lbnQgICAgICAgIGVudmlyb25tZW50ICAgID0gbmV3IEVjbGlwc2VFbnZpcm9ubWVudCggbnVsbCwgY29udGV4dCwgaGFuZGxlciApOwotICAgIAotICAgIHJldHVybiBlbnZpcm9ubWVudDsgIAotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2VjbGlwc2UvSUVjbGlwc2VTdGF0dXNIYW5kbGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L2VjbGlwc2UvSUVjbGlwc2VTdGF0dXNIYW5kbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkODA5ODcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9lY2xpcHNlL0lFY2xpcHNlU3RhdHVzSGFuZGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMzE0ICAgMTc2ODg2IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSVN0YXR1c0hhbmRsZXI7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSUVjbGlwc2VTdGF0dXNIYW5kbGVyIGV4dGVuZHMgSVN0YXR1c0hhbmRsZXIKLXsKLSAgLyoqCi0gICAqIAotICAgKiBAcmV0dXJuIHJldHVybnMgdGhlIHdvcnN0IHN0YXR1cyB0aGF0IGhhcyBiZWVuIHJlcG9ydGVkLgotICAgKi8JCi0gIHB1YmxpYyBJU3RhdHVzIGdldFN0YXR1cygpOwotICAKLSAgLyoqCi0gICAqIFJlc2V0cyB0aGUgd29yc3Qgc3RhdHVzIHJlcG9ydGVkIHRvIGJlIE9LLgotICAgKgotICAgKi8KLSAgcHVibGljIHZvaWQgcmVzZXRTdGF0dXMoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvcGx1Z2luL0VudlBsdWdpbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9wbHVnaW4vRW52UGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5ZTEwNzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYvc3JjL29yZy9lY2xpcHNlL3dzdC9jb21tYW5kL2ludGVybmFsL2Vudi9wbHVnaW4vRW52UGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5wbHVnaW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotCi0vKioKLSAqIFRoZSBtYWluIHBsdWdpbiBjbGFzcyB0byBiZSB1c2VkIGluIHRoZSBkZXNrdG9wLgotICovCi1wdWJsaWMgY2xhc3MgRW52UGx1Z2luIGV4dGVuZHMgUGx1Z2luIHsKLQotCS8vVGhlIHNoYXJlZCBpbnN0YW5jZS4KLQlwcml2YXRlIHN0YXRpYyBFbnZQbHVnaW4gaW5zdGFuY2U7Ci0KLQkvKioKLQkgICogVGhlIGlkZW50aWZpZXIgb2YgdGhlIGRlc2NyaXB0b3Igb2YgdGhpcyBwbHVnaW4gaW4gcGx1Z2luLnhtbC4KLQkgICovCi0JICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRCA9ICJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYiOwkKLQkKLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIEVudlBsdWdpbigpIHsKLQkJc3VwZXIoKTsKLQkJaW5zdGFuY2UgPSB0aGlzOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIEVudlBsdWdpbiBnZXRJbnN0YW5jZSgpIHsKLQkJcmV0dXJuIGluc3RhbmNlOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvcHJlZmVyZW5jZXMvQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52L3NyYy9vcmcvZWNsaXBzZS93c3QvY29tbWFuZC9pbnRlcm5hbC9lbnYvcHJlZmVyZW5jZXMvQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmRmMWMxNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi9zcmMvb3JnL2VjbGlwc2Uvd3N0L2NvbW1hbmQvaW50ZXJuYWwvZW52L3ByZWZlcmVuY2VzL0FjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNTIyICAgMTg0MDA2IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYucHJlZmVyZW5jZXM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gZGVmaW5lIHByZWZlcmVuY2UgaWRzLiBJdCBjb3JyZXNwb25kcyB0byBpbmZvcm1hdGlvbgotICogc3BlY2lmaWVkIGJ5IGEgYWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGUgZXh0ZW5zaW9uIHBvaW50LgotICogRWFjaCBhY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZSBlbnRyeSB3aWxsIHJlc3VsdCBpbiBhbiBlbnRyeSBpbiB0aGUKLSAqIGFjdGlvbiBkaWFsb2dzIHByZWZlcmVuY2UgcGFnZSBpZiB0aGUgc2hvd2NoZWNrYm94IGZpZWxkIGlzIHRydWUuCi0gKiAgIAotICogSGVyZSBpcyBhbiBleGFtcGxlIG9mIHRoaXMgZXh0ZW5zaW9uIHBvaW50LgotICogCi0gKiA8cHJlPgotICAqICAgJmx0O2V4dGVuc2lvbgotICogICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5hY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZSImZ3Q7Ci0gKiAgICAgJmx0O2FjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlCi0gKiAgICAgICAgICAgc2hvd2NoZWNrYm94PSJ0cnVlIgotICogICAgICAgICAgIG5hbWU9IiVDSEVDS0JPWF9TSE9XX0dFTkVSQVRFX0pBVkFfUFJPWFlfRElBTE9HIgotICogICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5qc3Qud3NzLnBvcHVwLmNhdGVnb3J5IgotICogICAgICAgICAgIHRvb2x0aXA9IiVUT09MVElQX1BQQURfQ0hFQ0tCT1hfV1NETDJQUk9YWSIKLSAqICAgICAgICAgICBpbmZvcG9wPSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuUFBBRDAwMDQiCi0gKiAgICAgICAgICAgb2JqZWN0aWRzPSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5jbGllbnR3aXphcmQuZmlsZSIKLSAqICAgICAgICAgICBhbHdheXNoaWRlPSJmYWxzZSIKLSAqICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuY2xpZW50d2l6YXJkIiZndDsKLSAqICAgICAmbHQ7L2FjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlJmd0OwotICogPC9wcmU+Ci0gKgotICogVGhpcyBhY3Rpb25EaWFsb2dQcmVmZXJlbmNlVHlwZSBleHRlbnNpb24gcG9pbnQgaXMgYXNzb2NpYXRlZCB3aXRoIGFuIE9iamVjdENvbnRyaWJ1dGlvbgotICogZXh0ZW5zaW9uIHBvaW50LiAgRm9yIGV4YW1wbGU6IAotICogCi0gKiAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAqICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGUiCi0gKiAgICAgICAgICAgbmFtZUZpbHRlcj0iKi53c2RsIgotICogICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5jbGllbnR3aXphcmQuZmlsZSI+Ci0gKiA8IS0tIFdTREwgVG8gSmF2YSBCZWFuIFByb3h5IC0tPgotICogICAgICAgIDxhY3Rpb24KLSAqICAgICAgICAgICAgICBsYWJlbD0iJUFDVElPTl9HRU5FUkFURV9KQVZBX1BST1hZIgotICogICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkud2lkZ2V0cy5wb3B1cC5EeW5hbWljUG9wdXBXaXphcmQiCi0gKiAgICAgICAgICAgICAgbWVudWJhclBhdGg9Im9yZy5lY2xpcHNlLmpzdC53cy5hdGsudWkud2Vic2VydmljZS5jYXRlZ29yeS5wb3B1cE1lbnUvcG9wdXBBY3Rpb25zIgotICogICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5jbGllbnR3aXphcmQiPgotICogICAgICAgIDwvYWN0aW9uPgotICogICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPgotICoKLSAqIFRoZSBPYmplY3RDb250cmlidXRpb24gZW50cnkgaXMgbGlua2VkIHdpdGggdGhlIGFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlIGVudHJ5Ci0gKiB2aWEgdGhlIGlkIGF0dHJpYnV0ZSBvZiB0aGUgT2JqZWN0Q29udGlyYnV0aW9uIGFuZCB0aGUgaWQgYXR0cmlidXRlIG9mIGFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlLgotICogTm90ZTogdGhlIGlkIGluIHRoZSBhY3Rpb24gZW50cnkgaXMgYWx3YXlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZHluYW1pYyB3aXphcmQgdGhhdAotICogc2hvdWxkIGJlIHBvcHVwZWQgdXAuICBJbiB0aGUgZXhhbXBsZSBhYm92ZSB0aGUgT2JqZWN0aW9uQ29udHJpYnV0aW9uIGlkIGFuZCB0aGUKLSAqIGFjdGlvbiBpZHMgYXJlIHRoZSBzYW1lLCBidXQgdGhpcyBuZWVkIG5vdCBiZSB0aGUgY2FzZS4gIAotICovCi1wdWJsaWMgY2xhc3MgQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGUKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgIGlkXzsKLSAgcHJpdmF0ZSBTdHJpbmcgIG5hbWVfOwotICBwcml2YXRlIFN0cmluZyAgaW5mb3BvcF87Ci0gIHByaXZhdGUgU3RyaW5nICB0b29sdGlwXzsKLSAgcHJpdmF0ZSBib29sZWFuIHNob3dDaGVja2JveF87Ci0gIHByaXZhdGUgYm9vbGVhbiBhbHdheXNIaWRlXzsKLSAgcHJpdmF0ZSBTdHJpbmcgIGNhdGVnb3J5XzsKLSAgcHJpdmF0ZSBIYXNoU2V0IG9iamVjdElkc18gPSBuZXcgSGFzaFNldCgpOwotCi0gIHB1YmxpYyBIYXNoU2V0IGdldE9iamVjdElkcygpCi0gIHsKLSAgICByZXR1cm4gb2JqZWN0SWRzXzsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgYWRkT2JqZWN0SWQoIFN0cmluZyBpZCApCi0gIHsKLSAgICBvYmplY3RJZHNfLmFkZCggaWQgKTsgIAotICB9Ci0gIAotICAvKioKLSAgICogU2V0cyB0aGUgaWQgZm9yIHRoaXMgcG9wdXAgYWN0aW9uLiAgVGhpcyBpZCBsaW5rIHRoZSBhY3Rpb25EaWFsb2dQcmVmZXJlbmNlCi0gICAqIHdpdGggYW4gT2JqZWN0Q29udHJpYnV0aW9uLgotICAgKiBAcGFyYW0gaWQgdGhlIGlkLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SWQoU3RyaW5nIGlkKQotICB7Ci0gICAgaWRfID0gaWQ7Ci0gIH0KLQotICAvKioKLSAgICogR2V0cyB0aGUgaWQgZm9yIHRoaXMgcG9wdXAgYWN0aW9uLgotICAgKiBAcmV0dXJuIHRoZSBpZC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SWQoKQotICB7Ci0gICAgcmV0dXJuIGlkXzsKLSAgfQotCi0gIC8qKgotICAgKiBTZXRzIHRoZSBuYW1lIGZvciB0aGlzIHBvcHVwIGFjdGlvbi4gIFRoaXMgbmFtZSBpcyBkaXNwbGF5ZWQgb24gdGhlCi0gICAqIGRpYWxvZyBwcmVmZXJlbmNlcyBwYWdlIGFuZCBtdXN0IGJlIHRyYW5zbGF0ZWQuCi0gICAqIEBwYXJhbSBuYW1lIHRoZSBuYW1lIG9mIHRoZSBwb3B1cCBjaGVjayBib3guCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gICAgbmFtZV8gPSBuYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldHMgdGhlIGRpc3BsYXkgdmFsdWUgZm9yIHRoaXMgcG9wdXAgY2hlY2sgYm94LgotICAgKiBOb3RlOiB0aGlzIHZhbHVlIG1heSBiZSBudWxsIGlmIHRoZSBnZXRTaG93Q2hlY2tCb3ggbWV0aG9kIHJldHVybnMgZmFsc2UuCi0gICAqIEByZXR1cm4gdGhlIG5hbWUuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIG5hbWVfOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIGluZm8gcG9wIHZhbHVlIGZvciB0aGlzIHBvcHVwIGNoZWNrIGJveC4KLSAgICogQHBhcmFtIGluZm9wb3AKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEluZm9wb3AoU3RyaW5nIGluZm9wb3ApCi0gIHsKLSAgICBpbmZvcG9wXyA9IGluZm9wb3A7Ci0gIH0KLQotICAvKioKLSAgICogR2V0cyB0aGUgaW5mbyBwb3AgdmFsdWUgZm9yIHRoaXMgcG9wdXAgY2hlY2sgYm94LgotICAgKiBOb3RlOiB0aGlzIHZhbHVlIG1heSBiZSBudWxsIGlmIHRoZSBnZXRTaG93Q2hlY2tCb3ggbWV0aG9kIHJldHVybnMgZmFsc2UuCi0gICAqIAotICAgKiBAcmV0dXJuIHRoZSBpbmZvcG9wIHZhbHVlLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRJbmZvcG9wKCkKLSAgewotICAgIHJldHVybiBpbmZvcG9wXzsKLSAgfQotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB0b29sdGlwIHZhbHVlIGZvciB0aGlzIHBvcHVwIGNoZWNrIGJveC4KLSAgICogQHBhcmFtIHRvb2x0aXAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFRvb2x0aXAoU3RyaW5nIHRvb2x0aXApCi0gIHsKLSAgICB0b29sdGlwXyA9IHRvb2x0aXA7Ci0gIH0KLQotICAvKioKLSAgICogR2V0cyB0aGUgdG9vbHRpcCB2YWx1ZSBmb3IgdGhpcyBwb3B1cCBjaGVjayBib3guCi0gICAqIE5vdGU6IHRoaXMgdmFsdWUgbWF5IGJlIG51bGwgaWYgdGhlIGdldFNob3dDaGVja0JveCBtZXRob2QgcmV0dXJucyBmYWxzZS4KLSAgICogCi0gICAqIEByZXR1cm4gdGhlIHRvb2x0aXAgdmFsdWUuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFRvb2x0aXAoKQotICB7Ci0gICAgcmV0dXJuIHRvb2x0aXBfOwotICB9Ci0gIAotICAvKioKLSAgICogU2V0cyB0aGUgc2hvdyBjaGVjayBib3ggdmFsdWUgZm9yIHRoaXMgcG9wdXAuICBJZiB0aGUgdmFsdWUgaXMgdHJ1ZSB0aGVuCi0gICAqIHRoaXMgcG9wdXAgd2lsbCBhcHBlYXIgb24gYW4gYWN0aW9uIGRpYWxvZ3MgcHJlZmVyZW5jZSBwYWdlLiAgQWxzbyBpZiB0aGlzCi0gICAqIHZhbHVlIGlzIHRydWUgYW5kIHRoZSBhbHdheXMgaGlkZSB2YWx1ZSBpcyBmYWxzZSB0aGVuIGEgY2hlY2sgYm94IHdpbGwgYmUgZGlzcGxheWVkCi0gICAqIG9uIHRoZSBmaXJzdCBwYWdlIG9mIHRoaXMgcG9wdXAgd2hpY2ggYXNrcyB0aGUgdXNlciBpZiB0aGV5IHdhbnQgdGhlIHBvcHVwCi0gICAqIHRvIGJlIGRpc3BsYXllZCB0aGUgbmV4dCB0aW1lIGFyZSB0byBqdXN0IGV4ZWN1dGUgdGhlIHBvcHVwIGFjdGlvbi4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBzaG93IGNoZWNrIGJveCB2YWx1ZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNob3dDaGVja2JveCggYm9vbGVhbiB2YWx1ZSApCi0gIHsKLSAgICBzaG93Q2hlY2tib3hfID0gdmFsdWU7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXRzIHRoZSBzaG93IGNoZWNrIGJveCB2YWx1ZS4KLSAgICogQHJldHVybiB0aGUgc2hvdyBjaGVjayBib3ggdmFsdWUuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRTaG93Q2hlY2tib3goKQotICB7Ci0gICAgcmV0dXJuIHNob3dDaGVja2JveF87Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBTZXRzIHRoZSBhbHdheXMgaGlkZSB2YWx1ZS4gIFRoaXMgdmFsdWUgc3BlY2lmaWVzIHRoYXQgdGhlIHBvcHVwIHNob3VsZCBhbHdheXMKLSAgICogYmUgZXhlY3V0ZWQgd2l0aG91dCBicmluZ2luZyB1cCB0aGUgcG9wdXAgd2l6YXJkLgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIGFsd2F5cyBoaWRlIHZhbHVlLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0QWx3YXlzSGlkZSggYm9vbGVhbiB2YWx1ZSApCi0gIHsKLSAgICBhbHdheXNIaWRlXyA9IHZhbHVlOwotICB9Ci0gIAotICAvKioKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgYWx3YXlzIGhpZGUgdmFsdWUuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRBbHdheXNIaWRlKCkKLSAgewotICAgIHJldHVybiBhbHdheXNIaWRlXzsgCi0gIH0KLSAgCi0gIC8qKgotICAgKiBTZXRzIHRoZSBjYXRlZ29yeSBpZCBmb3IgcG9wdXAgYWN0aW9uLiAgQWxsIHBvcHVwIGFjdGlvbnMgd2l0aCB0aGUgc2FtZQotICAgKiBjYXRlZ29yeSBpZCB3aWxsIGJlIGdyb3VwZWQgdG9nZXRoZXIgb24gdGhlIHNhbWUgcG9wdXAgYWN0aW9uIHByZWZlcmVuY2UgcGFnZS4KLSAgICogQHBhcmFtIHZhbHVlIHRoZSBjYXRlZ29yeS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldENhdGVnb3J5KCBTdHJpbmcgdmFsdWUgKQotICB7Ci0gICAgY2F0ZWdvcnlfID0gdmFsdWU7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHJldHVybiB0aGUgY2F0ZWdvcnkgaWQuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldENhdGVnb3J5KCkKLSAgewotICAgIHJldHVybiBjYXRlZ29yeV87Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyLy5jbGFzc3BhdGggYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTkzY2U4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9IndzZXhwbG9yZXItcHJvcGVydGllcyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwYWFlM2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotYmluCi1idWlsZAotd2ViYXBwcwotdGVtcC5mb2xkZXIKLWJ1aWxkLnhtbAotKi53YXIKLWV4cGxvcmVyc3JjLnppcAotamF2YUNvbXBpbGVyLiouYXJncwotKi5qYXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyLy5wcm9qZWN0IGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2MjE5OTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXI8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTE2MTIyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLSNXZWQgSnVuIDA2IDE0OjMyOjM3IEVEVCAyMDA3Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotaW5zdGFuY2Uvb3JnLmVjbGlwc2UuY29yZS5uZXQvb3JnLmVjbGlwc2UuY29yZS5uZXQuaGFzTWlncmF0ZWQ9dHJ1ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5jbGVhbk91dHB1dEZvbGRlcj1jbGVhbgotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5kdXBsaWNhdGVSZXNvdXJjZVRhc2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5pbnZhbGlkQ2xhc3NwYXRoPWFib3J0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLnJlc291cmNlQ29weUV4Y2x1c2lvbkZpbHRlcj0qLmxhdW5jaAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2lyY3VsYXJDbGFzc3BhdGg9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5leGNsdXNpb25QYXR0ZXJucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGgubXVsdGlwbGVPdXRwdXRMb2NhdGlvbnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLm1heFByb2JsZW1QZXJVbml0PTEwMAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGF0aWJsZUpES0xldmVsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wbGV0ZUNsYXNzcGF0aD1lcnJvcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzMDBmNzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI0ZyaSBKdW4gMDMgMDA6MzI6MDIgRURUIDIwMDUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnRlcm5hbC5kZWZhdWx0LmNvbXBsaWFuY2U9ZGVmYXVsdApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjMWU5M2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSNNb24gSmFuIDMwIDEwOjQwOjA0IEVTVCAyMDA2Ci1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0xCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0xCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzA1ZTBlNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVQTFVHSU5fTkFNRQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMzA1LnF1YWxpZmllcgotQnVuZGxlLUNsYXNzUGF0aDogZXhwbG9yZXIuamFyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGx1Z2luLkV4cGxvcmVyUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlUExVR0lOX1BST1ZJREVSCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXI7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIuZmF2b3JpdGVzO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsdWdpbjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wb3B1cDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQ7eC1pbnRlcm5hbDo9dHJ1ZQotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXM7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmhlbHAuYXBwc2VydmVyO2J1bmRsZS12ZXJzaW9uPSJbMy4xLjEwMCwzLjIuMCkiLAotIG9yZy5lY2xpcHNlLnVpO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5lbWYuY29tbW9uO2J1bmRsZS12ZXJzaW9uPSJbMi4yLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS5lbWYuZWNvcmU7YnVuZGxlLXZlcnNpb249IlsyLjIuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLnhzZDtidW5kbGUtdmVyc2lvbj0iWzIuMi4wLDIuNC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52O2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3M7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAwLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlcjtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDAsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbDtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gamF2YXgud3NkbDtidW5kbGUtdmVyc2lvbj0iWzEuNC4wLDEuNS4wKSIsCi0gb3JnLmFwYWNoZS53c2lsNGo7YnVuZGxlLXZlcnNpb249IlsxLjAuMCwxLjEuMCkiLAotIG9yZy51ZGRpNGo7YnVuZGxlLXZlcnNpb249IlsyLjAuNCwyLjEuMCkiLAotIG9yZy5hcGFjaGUuYXhpcztidW5kbGUtdmVyc2lvbj0iWzEuNC4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MudWk7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQ7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAwLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlcjtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gY29tLmlibS5pY3U7YnVuZGxlLXZlcnNpb249IlszLjQuNCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53cy51aTtidW5kbGUtdmVyc2lvbj0iWzEuMC4yMDIsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS5lcXVpbm94Lmh0dHAuamV0dHksCi0gb3JnLmVjbGlwc2UuZXF1aW5veC5qc3AuamFzcGVyLnJlZ2lzdHJ5LAotIG9yZy5lY2xpcHNlLmVxdWlub3guaHR0cC5yZWdpc3RyeQotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQotSW1wb3J0LVBhY2thZ2U6IGphdmF4LnNlcnZsZXQ7dmVyc2lvbj0iMi40LjAiLAotIGphdmF4LnNlcnZsZXQuaHR0cDt2ZXJzaW9uPSIyLjQuMCIsCi0gb3JnLm9zZ2kuc2VydmljZS5odHRwO3ZlcnNpb249IjEuMi4wIgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvYWJvdXQuaHRtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGIzNmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvYnVpbGQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5MDZkZTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLXNvdXJjZS5leHBsb3Jlci5qYXIgPSBzcmMvLHdzZXhwbG9yZXItcHJvcGVydGllcy8KLWphcnMuY29tcGlsZS5vcmRlciA9IGV4cGxvcmVyLmphcgotICAgICAgICAgICAgICAgICAgICAgCi1vdXRwdXQud3NleHBsb3Jlci9XRUItSU5GL2xpYi93c2V4cGxvcmVyLmphciA9IGJpbi8KLWJpbi5pbmNsdWRlcyA9IHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgLixcCi0gICAgICAgICAgICAgICBleHBsb3Jlci5qYXIsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgcHJvcGVydGllcy8sXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgaWNvbnMvLFwKLSAgICAgICAgICAgICAgIHdzZXhwbG9yZXIvLFwKLSAgICAgICAgICAgICAgIHdzZXhwbG9yZXItcHJvcGVydGllcy8KLQotCi1jdXN0b21CdWlsZENhbGxiYWNrcz1idWlsZEpTUHMueG1sCi0KLQotc3JjLmluY2x1ZGVzID0gc2NoZW1hLwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvYnVpbGRKU1BzLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL2J1aWxkSlNQcy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkNGJhMzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvYnVpbGRKU1BzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIyOSArMCwwIEBACi0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotPCEtLSBBbnQgYnVpbGQgc2NyaXB0IGZvciBKU1BzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLTxwcm9qZWN0IG5hbWU9IkpTUCBCdWlsZCI+Ci0KLQk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQk8IS0tIFdvcmtzcGFjZSAoZGV2KSBidWlsZDsgY2FsbGVkIGFzIGFuIEFudCBidWlsZGVyICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQk8dGFyZ2V0IG5hbWU9ImJ1aWxkIj4KLQotCQk8IS0tIENvbnN0cnVjdCB0aGUgZnVsbCBjbGFzc3BhdGggLS0+Ci0JCTxwYXRoIGlkPSJleHBsb3Jlci5qYXIuY2xhc3NwYXRoIiA+Ci0JCQk8cGF0aGVsZW1lbnQgcGF0aD0iJHt0YXJnZXQuZm9sZGVyfSIvPgotCQkJPGRpcnNldCBkaXI9IiR7d29ya3NwYWNlX2xvY30iPgotCQkJCTxwYXR0ZXJuc2V0PgotCQkJCQk8aW5jbHVkZSBuYW1lPSJvcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvYmluIi8+Ci0JCQkJCQotCQkJCTwvcGF0dGVybnNldD4KLQkJCTwvZGlyc2V0PgotCQkJPGZpbGVzZXQgZGlyPSIke3RhcmdldF9ob21lfS9wbHVnaW5zIj4KLQkJCQk8cGF0dGVybnNldD4KLQkJCQkJPGluY2x1ZGUgbmFtZT0iamF2YXguc2VydmxldCouamFyIi8+Ci0JCQkJCTxpbmNsdWRlIG5hbWU9ImphdmF4LnNlcnZsZXQuanNwKi5qYXIiLz4KLQkJCQkJPGluY2x1ZGUgbmFtZT0ib3JnLmFwYWNoZS5hbnQqL2xpYi9hbnQuamFyIi8+Ci0JCQkJCTxpbmNsdWRlIG5hbWU9Im9yZy5hcGFjaGUuY29tbW9ucy5lbCouamFyIi8+Ci0JCQkJCTxpbmNsdWRlIG5hbWU9Im9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nKi5qYXIiLz4KLQkJCQkJPGluY2x1ZGUgbmFtZT0ib3JnLmFwYWNoZS5qYXNwZXIqLmphciIvPgotCQkJCQkKLQkJCQk8L3BhdHRlcm5zZXQ+Ci0JCQk8L2ZpbGVzZXQ+Ci0JCTwvcGF0aD4KLQotCQk8IS0tIENvbXBpbGUgdGhlIEpTUHMgLS0+Ci0JCTxhbnRjYWxsIHRhcmdldD0iY29tcGlsZSI+Ci0JCQk8cmVmZXJlbmNlIHJlZmlkPSJleHBsb3Jlci5qYXIuY2xhc3NwYXRoIi8+Ci0JCTwvYW50Y2FsbD4KLQkJCi0JPC90YXJnZXQ+Ci0KLQk8cHJvcGVydHkgbmFtZT0id3NleHBsb3JlckRpciIgdmFsdWU9IiR7YmFzZWRpcn0vd3NleHBsb3JlciIvPgotCQotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTwhLS0gQ29tcGlsZSB0aGUgSlNQcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTx0YXJnZXQgbmFtZT0iY29tcGlsZSI+Ci0JCQotCQk8IS0tIEludm9rZSBKYXNwZXIgY29tcGlsZXIgLS0+Ci0JCTxqYXZhCi0JCQljbGFzc25hbWU9Im9yZy5hcGFjaGUuamFzcGVyLkpzcEMiCi0JCQljbGFzc3BhdGhyZWY9ImV4cGxvcmVyLmphci5jbGFzc3BhdGgiCi0JCQlmb3JrPSJ0cnVlIgotCQkJZmFpbG9uZXJyb3I9InRydWUiPgotCQkJPGFyZyB2YWx1ZT0iLWNvbXBpbGUiLz4KLQkJCTxhcmcgdmFsdWU9Ii1kIi8+Ci0JCQk8YXJnIHZhbHVlPSIke3dzZXhwbG9yZXJEaXJ9IiAvPgotCQkJPGFyZyB2YWx1ZT0iLXAiLz4KLQkJCTxhcmcgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci5qc3AiLz4KLQkJCTxhcmcgdmFsdWU9Ii13ZWJhcHAiLz4KLQkJCTxhcmcgdmFsdWU9IiR7d3NleHBsb3JlckRpcn0iLz4KLQkJCTxhcmcgdmFsdWU9Ii1kaWUiLz4KLQkJCTxjbGFzc3BhdGg+Ci0JCQkJPHBhdGhlbGVtZW50IHBhdGg9IiR7dGFyZ2V0LmZvbGRlcn0iLz4KLQkJCQk8ZGlyc2V0IGRpcj0iJHtiYXNlZGlyfSI+Ci0JCQkJCQk8aW5jbHVkZSBuYW1lPSIqL0Bkb3QiIC8+Ci0JCQkJPC9kaXJzZXQ+Ci0JCQkJPGZpbGVzZXQgZGlyPSIke2Jhc2VkaXJ9Ij4KLQkJCQkJCTxpbmNsdWRlIG5hbWU9IioqLyouamFyIiAvPiAKLQkJCQk8L2ZpbGVzZXQ+Ci0JCQk8L2NsYXNzcGF0aD4KLQkJPC9qYXZhPgotCQkKLQk8L3RhcmdldD4KLQkKLQk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQk8IS0tIFN0ZXBzIHRvIGRvIGJlZm9yZSB0aGUgdGFyZ2V0IGJ1aWxkLmphcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tIEF2YWlsYWJsZSBwYXJhbWV0ZXJzIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tICAgYnVpbGQucmVzdWx0LmZvbGRlciAtIGZvbGRlciB0byBjb250YWluIHRoZSBidWlsZCByZXN1bHRzICAgICAgICAgICAtLT4KLQk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQk8dGFyZ2V0IG5hbWU9InByZS5idWlsZC5qYXJzIj4KLQk8L3RhcmdldD4KLQotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTwhLS0gU3RlcHMgdG8gZG8gYWZ0ZXIgdGhlIHRhcmdldCBidWlsZC5qYXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gQXZhaWxhYmxlIHBhcmFtZXRlcnMgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gICBidWlsZC5yZXN1bHQuZm9sZGVyIC0gZm9sZGVyIHRvIGNvbnRhaW4gdGhlIGJ1aWxkIHJlc3VsdHMgICAgICAgICAgIC0tPgotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTx0YXJnZXQgbmFtZT0icG9zdC5idWlsZC5qYXJzIj4KLQk8L3RhcmdldD4KLQkKLQk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQk8IS0tIFN0ZXBzIHRvIGRvIGJlZm9yZSB0aGUgdGFyZ2V0IGJ1aWxkLnNvdXJjZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tIEF2YWlsYWJsZSBwYXJhbWV0ZXJzIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tICAgYnVpbGQucmVzdWx0LmZvbGRlciAtIGZvbGRlciB0byBjb250YWluIHRoZSBidWlsZCByZXN1bHRzICAgICAgICAgICAtLT4KLQk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQk8dGFyZ2V0IG5hbWU9InByZS5idWlsZC5zb3VyY2VzIj4KLQk8L3RhcmdldD4KLQotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTwhLS0gU3RlcHMgdG8gZG8gYWZ0ZXIgdGhlIHRhcmdldCBidWlsZC5zb3VyY2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gQXZhaWxhYmxlIHBhcmFtZXRlcnMgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gICBidWlsZC5yZXN1bHQuZm9sZGVyIC0gZm9sZGVyIHRvIGNvbnRhaW4gdGhlIGJ1aWxkIHJlc3VsdHMgICAgICAgICAgIC0tPgotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTx0YXJnZXQgbmFtZT0icG9zdC5idWlsZC5zb3VyY2VzIj4KLQk8L3RhcmdldD4KLQotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTwhLS0gU3RlcHMgdG8gZG8gYmVmb3JlIHRoZSBjb21waWxhdGlvbiB0YXJnZXQgPG5hbWU+ICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gU3Vic3RpdHV0ZSAibmFtZSIgd2l0aCB0aGUgbmFtZSBvZiB0aGUgY29tcGlsYXRpb24gdGFyZ2V0LCBlZyBAZG90ICAgIC0tPgotCTwhLS0gQXZhaWxhYmxlIHBhcmFtZXRlcnMgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gICBzb3VyY2UuZm9sZGVybiA6IG4gPSAxIC4uLiBOLCB0aGUgc291cmNlIGZvbGRlcnMgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gICB0YXJnZXQuZm9sZGVyICA6IHdoZXJlIHRoZSByZXN1bHRzIG9mIHRoZSBjb21waWxhdGlvbiBnbyAgICAgICAgICAgIC0tPgotCTwhLS0gICA8bmFtZT4uY2xhc3NwYXRoIDogbmFtZSA9IG5hbWUgb2YgdGhlIGNvbXBpbGF0aW9uIHRhcmdldC4gQSAgICAgICAgIC0tPgotCTwhLS0gICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlIHRvIHRoZSBjbGFzc3BhdGggc3RydWN0dXJlLiAgICAgICAgICAgIC0tPgotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTx0YXJnZXQgbmFtZT0icHJlLmV4cGxvcmVyLmphciI+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQk8IS0tIFN0ZXBzIHRvIGRvIGR1cmluZyB0aGUgY29tcGlsYXRpb24gdGFyZ2V0IDxuYW1lPiwgYWZ0ZXIgdGhlIGNvbXBpbGUgICAtLT4KLQk8IS0tIGJ1dCBiZWZvcmUgamFyaW5nLiAgU3Vic3RpdHV0ZSAibmFtZSIgd2l0aCB0aGUgbmFtZSBvZiB0aGUgY29tcGlsYXRpb24tLT4KLQk8IS0tIHRhcmdldCwgZWcgQGRvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tIEF2YWlsYWJsZSBwYXJhbWV0ZXJzIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tICAgc291cmNlLmZvbGRlcm4gOiBuID0gMSAuLi4gTiwgdGhlIHNvdXJjZSBmb2xkZXJzICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tICAgdGFyZ2V0LmZvbGRlciAgOiB3aGVyZSB0aGUgcmVzdWx0cyBvZiB0aGUgY29tcGlsYXRpb24gZ28gICAgICAgICAgICAtLT4KLQk8IS0tICAgPG5hbWU+LmNsYXNzcGF0aCA6IG5hbWUgPSBuYW1lIG9mIHRoZSBjb21waWxhdGlvbiB0YXJnZXQuIEEgICAgICAgICAtLT4KLQk8IS0tICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZSB0byB0aGUgY2xhc3NwYXRoIHN0cnVjdHVyZS4gICAgICAgICAgICAtLT4KLQk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQk8dGFyZ2V0IG5hbWU9InBvc3QuY29tcGlsZS5leHBsb3Jlci5qYXIiPgotCQkKLQkJPCEtLSBDb21waWxlIHRoZSBKU1BzIC0tPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUiPgotCQkJPHJlZmVyZW5jZSByZWZpZD0iZXhwbG9yZXIuamFyLmNsYXNzcGF0aCIvPgotCQk8L2FudGNhbGw+Ci0JCQotCQk8IS0tIEpzcEMgYWx3YXlzIGdlbmVyYXRlcyAuamF2YSBmaWxlczsgZGVsZXRlIHRoZW0gLS0+Ci0JCTxkZWxldGU+Ci0JCQk8ZmlsZXNldCBkaXI9IiR7dGFyZ2V0LmZvbGRlcn0iIGluY2x1ZGVzPSIqKi8qLmphdmEiLz4KLQkJPC9kZWxldGU+Ci0KLQk8L3RhcmdldD4KLQkKLQk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQk8IS0tIFN0ZXBzIHRvIGRvIGFmdGVyIHRoZSBjb21waWxhdGlvbiB0YXJnZXQgPG5hbWU+ICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tIFN1YnN0aXR1dGUgIm5hbWUiIHdpdGggdGhlIG5hbWUgb2YgdGhlIGNvbXBpbGF0aW9uIHRhcmdldCwgZWcgQGRvdCAgICAtLT4KLQk8IS0tIEF2YWlsYWJsZSBwYXJhbWV0ZXJzIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tICAgamFyLmxvY2F0aW9uIC0gdGhlIGxvY2F0aW9uIG9mIHRoZSBjb21waWxhdGlvbiByZXN1bHRzICAgICAgICAgICAgICAtLT4KLQk8IS0tICAgPG5hbWU+LmNsYXNzcGF0aCA6IG5hbWUgPSBuYW1lIG9mIHRoZSBjb21waWxhdGlvbiB0YXJnZXQuIEEgICAgICAgICAtLT4KLQk8IS0tICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZSB0byB0aGUgY2xhc3NwYXRoIHN0cnVjdHVyZS4gICAgICAgICAgICAtLT4KLQk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQk8dGFyZ2V0IG5hbWU9InBvc3QuZXhwbG9yZXIuamFyIj4KLQk8L3RhcmdldD4KLQkKLQk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQk8IS0tIFN0ZXBzIHRvIGRvIGJlZm9yZSB0aGUgdGFyZ2V0IGdhdGhlci5iaW4ucGFydHMgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0JPCEtLSBBdmFpbGFibGUgcGFyYW1ldGVycyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0JPCEtLSAgIGJ1aWxkLnJlc3VsdC5mb2xkZXIgLSBmb2xkZXIgY29udGFpbmluZyB0aGUgYnVpbGQgcmVzdWx0cyAgICAgICAgICAgLS0+Ci0JPCEtLSAgIHRhcmdldC5mb2xkZXIgLSBkZXN0aW5hdGlvbiBmb2xkZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0JPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0JPHRhcmdldCBuYW1lPSJwcmUuZ2F0aGVyLmJpbi5wYXJ0cyI+Ci0JPC90YXJnZXQ+Ci0JCQotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTwhLS0gU3RlcHMgdG8gZG8gYWZ0ZXIgdGhlIHRhcmdldCBnYXRoZXIuYmluLnBhcnRzICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gQXZhaWxhYmxlIHBhcmFtZXRlcnMgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gICBidWlsZC5yZXN1bHQuZm9sZGVyIC0gZm9sZGVyIGNvbnRhaW5pbmcgdGhlIGJ1aWxkIHJlc3VsdHMgICAgICAgICAgIC0tPgotCTwhLS0gICB0YXJnZXQuZm9sZGVyIC0gZGVzdGluYXRpb24gZm9sZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTx0YXJnZXQgbmFtZT0icG9zdC5nYXRoZXIuYmluLnBhcnRzIj4KLQk8L3RhcmdldD4KLQotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTwhLS0gU3RlcHMgdG8gZG8gYmVmb3JlIHRoZSB0YXJnZXQgZ2F0aGVyLnNvdXJjZXMgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gQXZhaWxhYmxlIHBhcmFtZXRlcnMgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gICBkZXN0aW5hdGlvbi50ZW1wLmZvbGRlciAtIGRlc3RpbmF0aW9uIGZvbGRlciAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTx0YXJnZXQgbmFtZT0icHJlLmdhdGhlci5zb3VyY2VzIj4KLQk8L3RhcmdldD4KLQotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTwhLS0gU3RlcHMgdG8gZG8gYWZ0ZXIgdGhlIHRhcmdldCBnYXRoZXIuc291cmNlcyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gQXZhaWxhYmxlIHBhcmFtZXRlcnMgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gICBkZXN0aW5hdGlvbi50ZW1wLmZvbGRlciAtIGRlc3RpbmF0aW9uIGZvbGRlciAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTx0YXJnZXQgbmFtZT0icG9zdC5nYXRoZXIuc291cmNlcyI+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQk8IS0tIFN0ZXBzIHRvIGRvIGJlZm9yZSB0aGUgdGFyZ2V0IGdhdGhlci5sb2dzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tIEF2YWlsYWJsZSBwYXJhbWV0ZXJzIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tICAgZGVzdGluYXRpb24udGVtcC5mb2xkZXIgLSBkZXN0aW5hdGlvbiBmb2xkZXIgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQk8dGFyZ2V0IG5hbWU9InByZS5nYXRoZXIubG9ncyI+ICAgICAgICAKLQk8L3RhcmdldD4KLQotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTwhLS0gU3RlcHMgdG8gZG8gYWZ0ZXIgdGhlIHRhcmdldCBnYXRoZXIubG9ncyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gQXZhaWxhYmxlIHBhcmFtZXRlcnMgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gICBkZXN0aW5hdGlvbi50ZW1wLmZvbGRlciAtIGRlc3RpbmF0aW9uIGZvbGRlciAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCTx0YXJnZXQgbmFtZT0icG9zdC5nYXRoZXIubG9ncyI+ICAgICAgIAotCTwvdGFyZ2V0PgotCi0JPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0JPCEtLSBTdGVwcyB0byBkbyBiZWZvcmUgdGhlIHRhcmdldCBjbGVhbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0JPCEtLSBBdmFpbGFibGUgcGFyYW1ldGVycyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0JPCEtLSAgIGRlc3RpbmF0aW9uLnRlbXAuZm9sZGVyIC0gZGVzdGluYXRpb24gZm9sZGVyICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0JPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0JPHRhcmdldCBuYW1lPSJwcmUuY2xlYW4iPiAgICAgICAgICAgICAgCi0JPC90YXJnZXQ+Ci0KLQk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQk8IS0tIFN0ZXBzIHRvIGRvIGFmdGVyIHRoZSB0YXJnZXQgY2xlYW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tIEF2YWlsYWJsZSBwYXJhbWV0ZXJzIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tICAgcGx1Z2luLmRlc3RpbmF0aW9uIC0gZmluYWwgZGVzdGluYXRpb24gb2YgdGhlIGJ1aWxkICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tICAgYnVpbGQucmVzdWx0LmZvbGRlciAtIHJlc3VsdHMgb2YgdGhlIGNvbXBpbGF0aW9uICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tICAgdGVtcC5mb2xkZXIgLSB0ZW1wb3JhcnkgZm9sZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQk8dGFyZ2V0IG5hbWU9InBvc3QuY2xlYW4iPiAgICAgICAgICAgICAKLQk8L3RhcmdldD4KLQotCTx0YXJnZXQgbmFtZT0icHJlLndzZXhwbG9yZXItcHJvcGVydGllcy5qYXIiPiAgICAgICAgICAgICAgCi0JCTwvdGFyZ2V0PgotCTx0YXJnZXQgbmFtZT0icG9zdC53c2V4cGxvcmVyLXByb3BlcnRpZXMuamFyIj4gICAgICAgICAgICAgIAotCQkJPC90YXJnZXQ+Ci0JPHRhcmdldCBuYW1lPSJwb3N0LmNvbXBpbGUud3NleHBsb3Jlci1wcm9wZXJ0aWVzLmphciI+ICAgICAgICAgICAgICAKLQkJCTwvdGFyZ2V0PgotCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9pY29ucy9sYXVuY2hXU0UuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvaWNvbnMvbGF1bmNoV1NFLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWI0M2NhZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9pY29ucy9sYXVuY2hXU0UuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvcGx1Z2luLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjA5ODZkNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotIyAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyAyMDA3MDQxMyAgIDE3NjQ5MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFOiBNYWtlIG1lc3NhZ2UvdHJhbnNwb3J0IHN0YWNrIHBsdWdnYWJsZQotIyAyMDA3MDgyMCAgIDE5MTU4NSBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgTWVzc2FnZXMgaW4gcGx1Z2luLnhtbC4KLSMKLVBMVUdJTl9OQU1FPVdlYiBTZXJ2aWNlcyBFeHBsb3JlcgotUExVR0lOX1BST1ZJREVSPUVjbGlwc2Uub3JnCi0KLVhQX1dTRV9UUkFOU1BPUlRfUFJPVklERVI9V2ViIFNlcnZpY2VzIEV4cGxvcmVyIFRyYW5zcG9ydCBQcm92aWRlcgotU09BUF9UUkFOU1BPUlRfUFJPVklERVI9RGVmYXVsdCBTT0FQIFRyYW5zcG9ydCBQcm92aWRlcgotCi0jCi0jIE1lc3NhZ2VzIGZvciB0aGUgY2xpZW50IHR5cGUgZXh0ZW5zaW9uCi0jCi1XRUJTRVJWSUNFQ0xJRU5UVFlQRV9OQU1FX1dTRVhQTE9SRVI9U3R1Ymxlc3MgKFdlYiBTZXJ2aWNlcyBFeHBsb3JlcikKLVRBU0tfTEFCRUxfRVhQTE9SRV9XU0RMX1VTSU5HX1dTRT1FeHBsb3JlciBXU0RMIHVzaW5nIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlci4KLQotIwotIyBNZXNzYWdlcyBmb3IgdGhlIFdTRXhwbG9yZXIgdHlwZSBleHRlbnNpb24KLSMKLU1TR19FUlJPUl9MQVVOQ0hfV1NFWFBMT1JFUj1JV0FCMDM2NkUgVW5hYmxlIHRvIGxhdW5jaCBXZWIgU2VydmljZXMgRXhwbG9yZXIuCi1NU0dfRVJST1JfTE9BRF9MQVVOQ0hfT1BUSU9OUz1JV0FCMDM2N0UgVW5hYmxlIHRvIGxvYWQgbGF1bmNoIG9wdGlvbnMuCi1NU0dfQlJPS0VOX1ZNX0RPRVNfTk9UX1NVUFBPUlRfVVRGLTg9QnJva2VuIFZNIGRvZXMgbm90IHN1cHBvcnQgVVRGLTguCi0KLSMKLSMgTWVzc2FnZXMgZm9yIHBvcHVwIGFjdGlvbiAoVGVzdCB3aXRoIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcikKLSMKLVBPUFVQX1RFU1RfV1NETD1UZXN0IHdpdGggV2ViIFNlcnZpY2VzIEV4cGxvcmVyCi0KLSMKLSMgU09BUCB0cmFuc3BvcnQgbWVzc2FnZXMKLSMKLU1TR19FUlJPUl9VTlNVUFBPUlRFRF9CSU5ESU5HPXswfSBiaW5kaW5nIGlzIHVuc3VwcG9ydGVkLgotTVNHX0VSUk9SX1VOU1VQUE9SVEVEX1RSQU5TUE9SVD17MH0gdHJhbnNwb3J0IGlzIHVuc3VwcG9ydGVkLgotCi0jCi0jIFdlYlNlcnZpY2VQdWJsaXNoUGFnZQotIwotVE9PTFRJUF9MQVVOQ0hfV1NfRVhQTE9SRVI9TGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIKLUNPTU1BTkRfTEFVTkNIX1dTX0VYUExPUkVSPUxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyCi0KLSMKLSMgUG9wLXVwIGFjdGlvbnMKLSMKLU1FTlVfUlVOPSZSdW4KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvcGx1Z2luLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyYmY1NmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotCi08cGx1Z2luPgotICAgPGV4dGVuc2lvbi1wb2ludCBpZD0id3NlVHJhbnNwb3J0UHJvdmlkZXIiIG5hbWU9IiVYUF9XU0VfVFJBTlNQT1JUX1BST1ZJREVSIiBzY2hlbWE9InNjaGVtYS93c2VUcmFuc3BvcnRQcm92aWRlci5leHNkIi8+Ci0KLSAgICAKLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08IS0tIEV4dGVuc2lvbiBwb2ludDogRWNsaXBzZSBQb3B1cCBBY3Rpb24gKG9yZy5lY2xpcHNlLnVpLnBvcHVwTWVudXMpIC0tPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wb3B1cE1lbnVzIj4KLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZSIKLSAgICAgICAgICAgIG5hbWVGaWx0ZXI9Iioud3NkbCIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuYWN0aW9uLldTRExGaWxlTWVudS5maWxlLndzZGwiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVQT1BVUF9URVNUX1dTREwiCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBvcHVwLlBvcHVwVGVzdFdTREwiCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0ib3JnLmVjbGlwc2UuanN0LndzLmF0ay51aS53ZWJzZXJ2aWNlLmNhdGVnb3J5LnBvcHVwTWVudS9wb3B1cEFjdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBvcHVwLlBvcHVwVGVzdFdTREwiPgotICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4KLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExSZXNvdXJjZUltcGwiCi0gICAgICAgICAgICBuYW1lRmlsdGVyPSIqIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5hY3Rpb24uV1NETEZpbGVNZW51LndzZGxyZXMiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVQT1BVUF9URVNUX1dTREwiCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBvcHVwLlBvcHVwVGVzdFdTREwiCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0iYWRkaXRpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wb3B1cC5Qb3B1cFRlc3RXU0RMIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC9vYmplY3RDb250cmlidXRpb24+Ci0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZSIKLSAgICAgICAgICAgIG5hbWVGaWx0ZXI9IioiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLmFjdGlvbi5XU0RMRmlsZU1lbnUuc2VydmljZSI+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iJVBPUFVQX1RFU1RfV1NETCIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucG9wdXAuUG9wdXBUZXN0V1NETCIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJhZGRpdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBvcHVwLlBvcHVwVGVzdFdTREwiPgotICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4KLSAgIDwvZXh0ZW5zaW9uPgotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci53c2VUcmFuc3BvcnRQcm92aWRlciI+Ci0gICAgICA8c29hcFRyYW5zcG9ydFByb3ZpZGVyCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwudHJhbnNwb3J0LlNPQVBUcmFuc3BvcnRQcm92aWRlciIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIuc29hcFRyYW5zcG9ydFByb3ZpZGVyIgotICAgICAgICAgICAgbmFtZT0iJVNPQVBfVFJBTlNQT1JUX1BST1ZJREVSIgotICAgICAgICAgICAgbmFtZXNwYWNlVVJJPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIgotICAgICAgICAgICAgdHJhbnNwb3J0VVJJPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgIDwvZXh0ZW5zaW9uPgotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmVxdWlub3guaHR0cC5yZWdpc3RyeS5odHRwY29udGV4dHMiPgotICAgICAgPGh0dHBjb250ZXh0Ci0gICAgICAgICAgICBpZD0id3NlIj4KLSAgICAgICAgIDxyZXNvdXJjZS1tYXBwaW5nCi0gICAgICAgICAgICAgICBwYXRoPSIvd3NleHBsb3JlciI+Ci0gICAgICAgICA8L3Jlc291cmNlLW1hcHBpbmc+Ci0gICAgICA8L2h0dHBjb250ZXh0PgotICAgPC9leHRlbnNpb24+Ci0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuZXF1aW5veC5odHRwLnJlZ2lzdHJ5LnJlc291cmNlcyI+Ci0gICAgICA8cmVzb3VyY2UKLSAgICAgICAgICAgIGFsaWFzPSIvIgotICAgICAgICAgICAgYmFzZS1uYW1lPSIvIgotICAgICAgICAgICAgaHR0cGNvbnRleHRJZD0id3NlIj4KLSAgICAgIDwvcmVzb3VyY2U+Ci0gICAgICA8c2VydmljZVNlbGVjdG9yCi0gICAgICAgICAgICBmaWx0ZXI9IihvdGhlci5pbmZvPW9yZy5lY2xpcHNlLndzdC53cy5leHBsb3JlcikiPgotICAgICAgPC9zZXJ2aWNlU2VsZWN0b3I+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5lcXVpbm94Lmh0dHAucmVnaXN0cnkuc2VydmxldHMiPgotICAgICAgPHNlcnZsZXQKLSAgICAgICAgICAgIGFsaWFzPSIvKi5qc3AiCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuZXF1aW5veC5qc3AuamFzcGVyLnJlZ2lzdHJ5LkpTUEZhY3Rvcnk6LyIKLSAgICAgICAgICAgIGh0dHBjb250ZXh0SWQ9IndzZSI+Ci0gICAgICA8L3NlcnZsZXQ+Ci0gICAgICA8c2VydmljZVNlbGVjdG9yCi0gICAgICAgICAgICBmaWx0ZXI9IihvdGhlci5pbmZvPW9yZy5lY2xpcHNlLndzdC53cy5leHBsb3JlcikiPgotICAgICAgPC9zZXJ2aWNlU2VsZWN0b3I+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIAotICAgIDwhLS0gTWFpbiBNZW51IEFjdGlvbnMgLS0+Ci0KLSAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLmFjdGlvblNldHMiPgotCi0gICAgICA8YWN0aW9uU2V0Ci0gICAgICAgICAgICBsYWJlbD0iJUNPTU1BTkRfTEFVTkNIX1dTX0VYUExPUkVSIgotICAgICAgICAgICAgdmlzaWJsZT0idHJ1ZSIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIuZXhwbG9yZXIiPgotICAgICAgICAgPG1lbnUKLSAgICAgICAgICAgICAgIGxhYmVsPSIlTUVOVV9SVU4iCi0gICAgICAgICAgICAgICBwYXRoPSJhZGRpdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UudWkucnVuIj4KLSAgICAgICAgICAgIDxzZXBhcmF0b3IgbmFtZT0iZXhwbG9yZXIiPgotICAgICAgICAgICAgPC9zZXBhcmF0b3I+Ci0gICAgICAgICA8L21lbnU+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iJUNPTU1BTkRfTEFVTkNIX1dTX0VYUExPUkVSIgotICAgICAgICAgICAgICAgaWNvbj0iaWNvbnMvbGF1bmNoV1NFLmdpZiIKLSAgICAgICAgICAgICAgIHRvb2x0aXA9IiVUT09MVElQX0xBVU5DSF9XU19FWFBMT1JFUiIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIuYWN0aW9uLkxhdW5jaFdTRUFjdGlvbiIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJvcmcuZWNsaXBzZS51aS5ydW4vZXhwbG9yZXIiCi0gICAgICAgICAgICAgICB0b29sYmFyUGF0aD0iYWRkaXRpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5hY3Rpb24uTGF1bmNoV1NFQWN0aW9uIj4KLSAgICAgICAgPC9hY3Rpb24+Ci0gICAgIDwvYWN0aW9uU2V0PgotCi0gICA8L2V4dGVuc2lvbj4KLSAgIAotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9wcm9wZXJ0aWVzL2Zhdm9yaXRlc19kZWZhdWx0LndzaWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9wcm9wZXJ0aWVzL2Zhdm9yaXRlc19kZWZhdWx0LndzaWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxY2MwMTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvcHJvcGVydGllcy9mYXZvcml0ZXNfZGVmYXVsdC53c2lsCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxpbnNwZWN0aW9uIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDAxLzEwL2luc3BlY3Rpb24vIgotICB4bWxuczp3c2lsd3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwMS8xMC9pbnNwZWN0aW9uL3dzZGwvIgotICB4bWxuczp3c2lsdWRkaT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwMS8xMC9pbnNwZWN0aW9uL3VkZGkvIgotICB4bWxuczp1ZGRpPSJ1cm46dWRkaS1vcmc6YXBpIj4KLSAgPGFic3RyYWN0IHhtbDpsYW5nPSJlbi1VUyI+djVfMF8xXzA8L2Fic3RyYWN0PgotCi0gIDxsaW5rIHJlZmVyZW5jZWROYW1lc3BhY2U9InVybjp1ZGRpLW9yZzphcGkiPgotICAgIDxhYnN0cmFjdCB4bWw6bGFuZz0iZW4tVVMiPiVQVUJMSUNVRERJUkVHSVNUUllUWVBFX05BTUVfU0FQX1RFU1Q8L2Fic3RyYWN0PgotICAgIDxhYnN0cmFjdCB4bWw6bGFuZz0iZW4tVVMiPmh0dHA6Ly91ZGRpdGVzdC5zYXAuY29tL1VEREkvYXBpL2lucXVpcnkvPC9hYnN0cmFjdD4KLSAgICA8YWJzdHJhY3QgeG1sOmxhbmc9ImVuLVVTIj5odHRwczovL3VkZGl0ZXN0LnNhcC5jb20vVURESS9hcGkvcHVibGlzaC88L2Fic3RyYWN0PgotICAgIDxhYnN0cmFjdCB4bWw6bGFuZz0iZW4tVVMiPmh0dHA6Ly91ZGRpdGVzdC5zYXAuY29tLzwvYWJzdHJhY3Q+Ci0gIDwvbGluaz4KLQotICA8bGluayByZWZlcmVuY2VkTmFtZXNwYWNlPSJ1cm46dWRkaS1vcmc6YXBpIj4KLSAgICA8YWJzdHJhY3QgeG1sOmxhbmc9ImVuLVVTIj4lUFVCTElDVURESVJFR0lTVFJZVFlQRV9OQU1FX1NBUDwvYWJzdHJhY3Q+Ci0gICAgPGFic3RyYWN0IHhtbDpsYW5nPSJlbi1VUyI+aHR0cDovL3VkZGkuc2FwLmNvbS9VRERJL2FwaS9pbnF1aXJ5LzwvYWJzdHJhY3Q+Ci0gICAgPGFic3RyYWN0IHhtbDpsYW5nPSJlbi1VUyI+aHR0cHM6Ly91ZGRpLnNhcC5jb20vVURESS9hcGkvcHVibGlzaC88L2Fic3RyYWN0PgotICAgIDxhYnN0cmFjdCB4bWw6bGFuZz0iZW4tVVMiPmh0dHA6Ly91ZGRpLnNhcC5jb20vPC9hYnN0cmFjdD4KLSAgPC9saW5rPgotCi0gIDxsaW5rIHJlZmVyZW5jZWROYW1lc3BhY2U9InVybjp1ZGRpLW9yZzphcGkiPgotICAgIDxhYnN0cmFjdCB4bWw6bGFuZz0iZW4tVVMiPiVQVUJMSUNVRERJUkVHSVNUUllUWVBFX05BTUVfWE1FVEhPRFM8L2Fic3RyYWN0PgotICAgIDxhYnN0cmFjdCB4bWw6bGFuZz0iZW4tVVMiPmh0dHA6Ly91ZGRpLnhtZXRob2RzLm5ldC9pbnF1aXJlPC9hYnN0cmFjdD4KLSAgICA8YWJzdHJhY3QgeG1sOmxhbmc9ImVuLVVTIj5odHRwczovL3VkZGkueG1ldGhvZHMubmV0L3B1Ymxpc2g8L2Fic3RyYWN0PgotICAgIDxhYnN0cmFjdCB4bWw6bGFuZz0iZW4tVVMiPmh0dHA6Ly93d3cueG1ldGhvZHMubmV0L3ZlMi9SZWdpc3Rlci5wbz9ldmVudD1yZWdpc3Rlck9yZzwvYWJzdHJhY3Q+Ci0gIDwvbGluaz4KLQotIAotCi0gIDxsaW5rIHJlZmVyZW5jZWROYW1lc3BhY2U9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDEvMTAvaW5zcGVjdGlvbi8iIGxvY2F0aW9uPSJodHRwOi8vd3d3LnhtZXRob2RzLmNvbS9pbnNwZWN0aW9uLndzaWwiLz4KLTwvaW5zcGVjdGlvbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NjaGVtYS93c2VUcmFuc3BvcnRQcm92aWRlci5leHNkIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc2NoZW1hL3dzZVRyYW5zcG9ydFByb3ZpZGVyLmV4c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzMmVlZjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc2NoZW1hL3dzZVRyYW5zcG9ydFByb3ZpZGVyLmV4c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KLTwhLS0gU2NoZW1hIGZpbGUgd3JpdHRlbiBieSBQREUgLS0+Ci08c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0ib3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyIj4KLTxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zY2hlbWEgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIiIGlkPSJ3c2VUcmFuc3BvcnRQcm92aWRlciIgbmFtZT0iV2ViIFNlcnZpY2VzIEV4cGxvcmVyIFRyYW5zcG9ydCBQcm92aWRlciIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBbRW50ZXIgZGVzY3JpcHRpb24gb2YgdGhpcyBleHRlbnNpb24gcG9pbnQuXQotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPHNlcXVlbmNlIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzb2FwVHJhbnNwb3J0UHJvdmlkZXIiLz4KLSAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIEEgZnVsbHkgcXVhbGlmaWVkIGlkZW50aWZpZXIgb2YgdGhlIHRhcmdldCBleHRlbnNpb24gcG9pbnQKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBBbiBvcHRpb25hbCBpZGVudGlmaWVyIGZvciB0aGlzIGV4dGVuc2lvbiBpbnN0YW5jZQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgQW4gb3B0aW9uYWwgbmFtZSB0aGlzIGV4dGVuc2lvbiBpbnN0YW5jZQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcEluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUgdHJhbnNsYXRhYmxlPSJ0cnVlIi8+Ci0gICAgICAgICAgICAgICA8L2FwcEluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9InNvYXBUcmFuc3BvcnRQcm92aWRlciI+Ci0gICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgVGhpcyBleHRlbnNpb24gcG9pbnQgZW50cnkgYWxsb3dzIGFuIGV4dGVuZGVyIHRvIHBsdWcgaW4gYSBuZXcgZmFjdG9yeSBmb3IgY3JlYXRpbmcgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUFRyYW5zcG9ydCBpbnN0YW5jZXMuICBUaGUgSVNPQVBUcmFucG9ydCBpcyB1c2VkIGJ5IHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgZm9yIGludm9raW5nIHdlYiBzZXJ2aWNlcyBvcGVyYXRpb25zIHRoYXQgdXNlcyB0aGUgU09BUCBtZXNzYWdlIHByb3RvY29sLgotICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjbGFzcyIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGlzIGNsYXNzIG11c3QgaW1wbGVtZW50IHRoZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQVHJhbnNwb3J0UHJvdmlkZXIgaW50ZXJmYWNlLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcEluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUga2luZD0iamF2YSIgYmFzZWRPbj0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUFRyYW5zcG9ydFByb3ZpZGVyIi8+Ci0gICAgICAgICAgICAgICA8L2FwcEluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhpcyBpZCB1bmlxdWVseSBpZGVudGlmaWVzIHRoaXMgc29hcFRyYW5zcG9ydFByb3ZpZGVyIGVsZW1lbnQuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGUgbmFtZSBvZiB0aGlzIHNvYXBUcmFuc3BvcnRQcm92aWRlciBlbGVtZW50LgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcEluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUgdHJhbnNsYXRhYmxlPSJ0cnVlIi8+Ci0gICAgICAgICAgICAgICA8L2FwcEluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZXNwYWNlVVJJIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoZSBuYW1lc3BhY2UgVVJJIG9mIHRoZSBzb2FwOmJpbmRpbmcgZWxlbWVudCB0aGF0IHRoaXMgdHJhbnNwb3J0IHByb3ZpZGVyIGNsYWltcyBzdXBwb3J0IGZvci4gIEZvciBleGFtcGxlLCBpZiB0aGlzIHRyYW5zcG9ydCBwcm92aWRlciBzdXBwb3J0cyB0aGUgU09BUCAxLjEgYmluZGluZywgdGhlIHZhbHVlIG9mIHRoaXMgYXR0cmlidXRlIHdvdWxkIGJlIGh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8uICBJZiB1bnNwZWNpZmllZCwgdGhpcyB0cmFuc3BvcnQgcHJvdmlkZXIgY2xhaW1zIHN1cHBvcnQgZm9yIGFsbCBTT0FQIGJpbmRpbmdzLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InRyYW5zcG9ydFVSSSIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGUgdHJhbnNwb3J0IHByb3RvY29sIFVSSSBvZiB0aGUgc29hcDpiaW5kaW5nIGVsZW1lbnQgdGhhdCB0aGlzIHRyYW5zcG9ydCBwcm92aWRlciBjbGFpbXMgc3VwcG9ydCBmb3IuICBGb3IgZXhhbXBsZSwgaWYgdGhpcyB0cmFuc3BvcnQgcHJvdmlkZXIgc3VwcG9ydHMgU09BUCBvdmVyIEhUVFAsIHRoZSB2YWx1ZSBvZiB0aGlzIGF0dHJpYnV0ZSB3b3VsZCBiZSBodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAuICBJZiB1bnNwZWNpZmllZCwgdGhpcyB0cmFuc3BvcnQgcHJvdmlkZXIgY2xhaW1zIHN1cHBvcnQgZm9yIGFsbCB0cmFuc3BvcnQgcHJvdG9jb2xzLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJzaW5jZSIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAmbHQ7YiZndDtUaGlzIGV4dGVuc2lvbiBwb2ludCBpcyBwYXJ0IG9mIGFuIGludGVyaW0gQVBJIHRoYXQgaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnQgYW5kIGV4cGVjdGVkIHRvIGNoYW5nZSBzaWduaWZpY2FudGx5IGJlZm9yZSByZWFjaGluZyBzdGFiaWxpdHkuIEl0IGlzIGJlaW5nIG1hZGUgYXZhaWxhYmxlIGF0IHRoaXMgZWFybHkgc3RhZ2UgdG8gc29saWNpdCBmZWVkYmFjayBmcm9tIHBpb25lZXJpbmcgYWRvcHRlcnMgb24gdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBhbnkgY29kZSB0aGF0IHVzZXMgdGhpcyBBUEkgd2lsbCBhbG1vc3QgY2VydGFpbmx5IGJlIGJyb2tlbiAocmVwZWF0ZWRseSkgYXMgdGhlIEFQSSBldm9sdmVzLiZsdDsvYiZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iZXhhbXBsZXMiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgW0VudGVyIGV4dGVuc2lvbiBwb2ludCB1c2FnZSBleGFtcGxlIGhlcmUuXQotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJhcGlJbmZvIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFtFbnRlciBBUEkgaW5mb3JtYXRpb24gaGVyZS5dCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImltcGxlbWVudGF0aW9uIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFtFbnRlciBpbmZvcm1hdGlvbiBhYm91dCBzdXBwbGllZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGV4dGVuc2lvbiBwb2ludC5dCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImNvcHlyaWdodCIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuJmx0O2JyJmd0OwotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSAKLWF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyAKLXRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0ICZsdDthCi1ocmVmPSZxdW90O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJnF1b3Q7Jmd0O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJmx0Oy9hJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NlcnZsZXRhcGkvb3JnLmVjbGlwc2UuZXF1aW5veC5zZXJ2bGV0LmFwaV8xLjAuMC52MjAwNjAyMDYuamFyIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc2VydmxldGFwaS9vcmcuZWNsaXBzZS5lcXVpbm94LnNlcnZsZXQuYXBpXzEuMC4wLnYyMDA2MDIwNi5qYXIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkYWQ1NzcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc2VydmxldGFwaS9vcmcuZWNsaXBzZS5lcXVpbm94LnNlcnZsZXQuYXBpXzEuMC4wLnYyMDA2MDIwNi5qYXIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL0pldHR5UnVubmFibGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvSmV0dHlSdW5uYWJsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzc0MmM5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvSmV0dHlSdW5uYWJsZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuaGVscC5pbnRlcm5hbC5hcHBzZXJ2ZXIuQXBwc2VydmVyUGx1Z2luOwotCi0KLXB1YmxpYyBjbGFzcyBKZXR0eVJ1bm5hYmxlIHsKLQotCXByaXZhdGUgc3RhdGljIEpldHR5UnVubmFibGUgamV0dHlSdW5uYWJsZV87Ci0KLQlwcml2YXRlIEpldHR5UnVubmFibGUoKSB7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBKZXR0eVJ1bm5hYmxlIGdldEpldHR5UnVubmFibGUoKSB7Ci0JCWlmIChqZXR0eVJ1bm5hYmxlXyA9PSBudWxsKSB7Ci0JCQlqZXR0eVJ1bm5hYmxlXyA9IG5ldyBKZXR0eVJ1bm5hYmxlKCk7Ci0JCQlqZXR0eVJ1bm5hYmxlXy5pbml0KCk7Ci0JCX0KLQkJcmV0dXJuIGpldHR5UnVubmFibGVfOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzSmV0dHlTdGFydGVkKCkgewotCQl0cnkgewotCQkJcmV0dXJuIEFwcHNlcnZlclBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QXBwU2VydmVyKCkuaXNSdW5uaW5nKCk7Ci0JCX0gY2F0Y2ggKFRocm93YWJsZSB0KSB7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgaW50IGdldEpldHR5UG9ydCgpIHsKLQkJcmV0dXJuIFdlYmFwcE1hbmFnZXIuZ2V0UG9ydCgpOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0SmV0dHlIb3N0KCkgewotCQlyZXR1cm4gV2ViYXBwTWFuYWdlci5nZXRIb3N0KCk7Ci0JfQotCi0JCi0JcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0JCXRyeSB7Ci0JCQlXZWJhcHBNYW5hZ2VyLnN0YXJ0KCJ3c2UiKTsKLQkJfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvTGF1bmNoT3B0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL0xhdW5jaE9wdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjY2ZWRlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvTGF1bmNoT3B0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyOwotCi0vKioKLSAqIEBhdXRob3IgY2JyZWFsZXlAY2EuaWJtLmNvbQotICogCi0gKiBUaGlzIHNpbXBsZSBjbGFzcyBpcyB1c2VkIHRvIGhvbGQgYSBzaW5nbGUgV2ViIFNlcnZpY2VzCi0gKiBFeHBsb3JlciBsYXVuY2ggb3B0aW9uIHByb3BlcnR5IGFuZCBpdHMgdmFsdWUuIEFsbG93ZWQKLSAqIGxhdW5jaCBvcHRpb24gcHJvcGVydGllcyBhcmUgZGVmaW5lZCBieQotICogPGNvZGU+e0BsaW5rIExhdW5jaE9wdGlvbnN9PC9jb2RlPi4KLSAqLwotcHVibGljIGNsYXNzIExhdW5jaE9wdGlvbiB7Ci0JcHJpdmF0ZSBTdHJpbmcga2V5XzsKLQotCXByaXZhdGUgU3RyaW5nIG9wdGlvbl87Ci0KLQkvKgotCSAqIENvbnN0cnVjdHMgYSBuZXcgbGF1bmNoIG9wdGlvbiB3aXRoIHRoZSBnaXZlbgotCSAqIHByb3BlcnR5IG5hbWUgYW5kIHZhbHVlLiAKLQkgKi8KLQlwdWJsaWMgTGF1bmNoT3B0aW9uKFN0cmluZyBrZXksIFN0cmluZyBvcHRpb24pIHsKLQkJa2V5XyA9IGtleTsKLQkJb3B0aW9uXyA9IG9wdGlvbjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBwcm9wZXJ0eSBuYW1lIG9mIHRoaXMgbGF1bmNoIG9wdGlvbi4KLQkgKiBAcmV0dXJuIFRoZSBwcm9wZXJ0eSBuYW1lLgotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0S2V5KCkgewotCQlyZXR1cm4ga2V5XzsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZSBvZiB0aGlzIGxhdW5jaCBvcHRpb24uCi0JICogQHJldHVybiBUaGUgcHJvcGVydHkgdmFsdWUuCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRPcHRpb24oKSB7Ci0JCXJldHVybiBvcHRpb25fOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvTGF1bmNoT3B0aW9ucy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9MYXVuY2hPcHRpb25zLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5MmYwM2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9MYXVuY2hPcHRpb25zLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyOwotCi0vKioKLSAqIEBhdXRob3IgY2JyZWFsZXlAY2EuaWJtLmNvbQotICogCi0gKiBUaGlzIGNsYXNzIGRlZmluZXMgdGhlIHByb3BlcnR5IG5hbWVzIHVuZGVyc3Rvb2QgYnkgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcgotICogYW5kIHVzZWQgdG8gY29uZmlndXJlIGl0J3MgaW5pdGlhbCBhcHBlYXJhbmNlIGFuZCBiZWhhdmlvdXIgYXQgdGhlIHRpbWUgaXQgaXMKLSAqIGxhdW5jaGVkLgotICogQHNlZSBMYXVuY2hPcHRpb24KLSAqLwotcHVibGljIGNsYXNzIExhdW5jaE9wdGlvbnMgewotCS8vIEdlbmVyYWwgcHVycG9zZSBwcmVsb2FkIGNvbnN0YW50cwotCQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNUQVRFX0xPQ0FUSU9OID0gInN0YXRlTG9jYXRpb24iOwotCQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfRkFWT1JJVEVTX0xPQ0FUSU9OID0gImRlZmF1bHRGYXZvcml0ZXNMb2NhdGlvbiI7Ci0JCi0JLy8gV1NETCBQYWdlIHByZWxvYWQgY29uc3RhbnRzCi0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBXU0RMX1VSTCA9ICJ3c2RsIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFdFQl9TRVJWSUNFX0VORFBPSU5UID0gIndlYlNlcnZpY2VFbmRwb2ludCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTRVJWSUNFX1FOQU1FX1NUUklORyA9ICJzZXJ2aWNlUU5hbWVTdHJpbmciOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQklORElOR19OQU1FX1NUUklORyA9ICJiaW5kaW5nTmFtZVN0cmluZyI7Ci0KLQkvLyBVRERJIFBhZ2UgcHJlbG9hZCBjb25zdGFudHMKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElOUVVJUllfVVJMID0gImlucXVpcnkiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFVCTElTSF9VUkwgPSAicHVibGlzaCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTRVJWSUNFX05BTUUgPSAic2VydmljZU5hbWUiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VSVklDRV9LRVkgPSAic2VydmljZUtleSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDQVRFR09SSUVTX0RJUkVDVE9SWSA9ICJjYXRlZ29yaWVzRGlyZWN0b3J5IjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvTGF1bmNoV2l6YXJkUnVubmFibGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvTGF1bmNoV2l6YXJkUnVubmFibGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQ4YjY5Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL0xhdW5jaFdpemFyZFJ1bm5hYmxlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZERpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuRHluYW1pY1dpemFyZDsKLQotcHVibGljIGNsYXNzIExhdW5jaFdpemFyZFJ1bm5hYmxlIGV4dGVuZHMgVGhyZWFkIGltcGxlbWVudHMgUnVubmFibGUgewotCXByaXZhdGUgU3RyaW5nIGlkOwotCi0JcHJpdmF0ZSBTdHJpbmcgd3NkbFVSTDsKLQotCXByaXZhdGUgYm9vbGVhbiBmaW5pc2g7Ci0KLQlwdWJsaWMgTGF1bmNoV2l6YXJkUnVubmFibGUoU3RyaW5nIGlkLCBTdHJpbmcgd3NkbFVSTCkgewotCQl0aGlzLmlkID0gaWQ7Ci0JCXRoaXMud3NkbFVSTCA9ICh3c2RsVVJMICE9IG51bGwpID8gd3NkbFVSTCA6ICIiOwotCQlmaW5pc2ggPSBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc0ZpbmlzaCgpIHsKLQkJcmV0dXJuIGZpbmlzaDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCXRyeSB7Ci0JCQlEeW5hbWljV2l6YXJkIHdpemFyZCA9IG5ldyBEeW5hbWljV2l6YXJkKCk7Ci0JCQl3aXphcmQuc2V0SW5pdGlhbERhdGEoaWQpOwotCQkJSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsID0gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24od3NkbFVSTCk7Ci0JCQl3aXphcmQuaW5pdChudWxsLCBzZWwpOwotCQkJV2l6YXJkRGlhbG9nIHdkID0gbmV3IFdpemFyZERpYWxvZyhuZXcgU2hlbGwoRGlzcGxheS5nZXREZWZhdWx0KCksCi0JCQkJCVNXVC5BUFBMSUNBVElPTl9NT0RBTCksIHdpemFyZCk7Ci0JCQl3ZC5vcGVuKCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCX0gZmluYWxseSB7Ci0JCQlmaW5pc2ggPSB0cnVlOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9MYXVuY2hXaXphcmRUYXNrLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL0xhdW5jaFdpemFyZFRhc2suamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzAyMTUzNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL0xhdW5jaFdpemFyZFRhc2suamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci0KLXB1YmxpYyBjbGFzcyBMYXVuY2hXaXphcmRUYXNrIHsKLQkvLyBzaW5nbGV0b24KLQlwcml2YXRlIHN0YXRpYyBMYXVuY2hXaXphcmRUYXNrIHRhc2tfOwotCi0JLy8gdGhlIHNoZWxsIGZvciB0aGUgd2l6YXJkIHRvIGJlIGxhdW5jaGVkCi0JcHJpdmF0ZSBTaGVsbCBzaGVsbF87Ci0KLQkvLyB0aGUgTGF1bmNoV2l6YXJkUnVubmFibGUgdGhhdCBpcyBjdXJyZW50bHkgcnVubmluZwotCXByaXZhdGUgTGF1bmNoV2l6YXJkUnVubmFibGUgcnVubmFibGVfOwotCi0JcHJpdmF0ZSBMYXVuY2hXaXphcmRUYXNrKFNoZWxsIHNoZWxsKSB7Ci0JCXNoZWxsXyA9IHNoZWxsOwotCQlydW5uYWJsZV8gPSBudWxsOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgTGF1bmNoV2l6YXJkVGFzayBnZXRJbnN0YW5jZSgpIHsKLQkJaWYgKHRhc2tfID09IG51bGwpCi0JCQl0YXNrXyA9IG5ldyBMYXVuY2hXaXphcmRUYXNrKFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkKLQkJCQkJLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldFNoZWxsKCkpOwotCQlyZXR1cm4gdGFza187Ci0JfQotCi0JcHVibGljIHZvaWQgYXN5bmNFeGVjKFJ1bm5hYmxlIHJ1bm5hYmxlKSB0aHJvd3MgU1dURXhjZXB0aW9uIHsKLQkJc2hlbGxfLmdldERpc3BsYXkoKS5hc3luY0V4ZWMocnVubmFibGUpOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGNoZWNrQW5kQXN5bmNFeGVjKExhdW5jaFdpemFyZFJ1bm5hYmxlIHJ1bm5hYmxlKSB7Ci0JCXRyeSB7Ci0JCQlpZiAoIWdldElzRXhlY3V0aW5nKCkpIHsKLQkJCQlhc3luY0V4ZWMocnVubmFibGUpOwotCQkJCXJ1bm5hYmxlXyA9IHJ1bm5hYmxlOwotCQkJCXJldHVybiB0cnVlOwotCQkJfSBlbHNlCi0JCQkJcmV0dXJuIGZhbHNlOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gZ2V0SXNFeGVjdXRpbmcoKSB7Ci0JCWlmIChydW5uYWJsZV8gIT0gbnVsbCkgewotCQkJYm9vbGVhbiBpc0ZpbmlzaCA9IHJ1bm5hYmxlXy5pc0ZpbmlzaCgpOwotCQkJaWYgKGlzRmluaXNoKQotCQkJCXJ1bm5hYmxlXyA9IG51bGw7Ci0JCQlyZXR1cm4gIWlzRmluaXNoOwotCQl9IGVsc2UKLQkJCXJldHVybiBmYWxzZTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL1dTRXhwbG9yZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvV1NFeHBsb3Jlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDJjNGYwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvV1NFeHBsb3Jlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjg3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDcyMSAgIDE1MTQwOSBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFIGRvZXMgbm90IG9wZW4gaW4gZXh0ZXJuYWwgYnJvd3NlciBvbiBSSAotICogMjAwNjA4MDIgICAxNTA0Mjggc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA2MTIxOSAgIDE2ODYyMCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFIGRvZXMgbm90IG9wZW4gaW4gZXh0ZXJuYWwgYnJvd3NlciBvbiBMaW51eAotICogMjAwNzAyMjAgICAxNjg2MjAgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTRSBkb2VzIG5vdCBvcGVuIGluIGV4dGVybmFsIGJyb3dzZXIgb24gTGludXggKGNvbnQuKQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3JlcjsKLQotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEubmV0LlVSTENvbm5lY3Rpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMRW5jb2RlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2g7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuYnJvd3Nlci5JV2ViQnJvd3NlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5icm93c2VyLklXb3JrYmVuY2hCcm93c2VyU3VwcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGx1Z2luLkV4cGxvcmVyUGx1Z2luOwotCi1wdWJsaWMgY2xhc3MgV1NFeHBsb3JlciB7Ci0JcHJpdmF0ZSBzdGF0aWMgV1NFeHBsb3JlciBpbnN0YW5jZTsKLQotCXByaXZhdGUgc3RhdGljIGludCBsYXVuY2hPcHRpb25zS2V5XyA9IDA7Ci0KLQlwcml2YXRlIElXZWJCcm93c2VyIGludGVybmFsQnJvd3Nlcl8gPSBudWxsOwotCQotCXB1YmxpYyBXU0V4cGxvcmVyKCkgewotCX0KLQotCXB1YmxpYyBzdGF0aWMgV1NFeHBsb3JlciBnZXRJbnN0YW5jZSgpIHsKLQkJaWYgKGluc3RhbmNlID09IG51bGwpIHsKLQkJCWluc3RhbmNlID0gbmV3IFdTRXhwbG9yZXIoKTsKLQkJfQotCQlyZXR1cm4gaW5zdGFuY2U7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRDb250ZXh0TmFtZSgpIHsKLQkJcmV0dXJuICJ3c2V4cGxvcmVyIjsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFBhcmVudFBsdWdpbklEKCkgewotCQlyZXR1cm4gRXhwbG9yZXJQbHVnaW4uSUQ7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRXZWJBcHBMb2NhdGlvbigpIHsKLQkJcmV0dXJuICJ3c2V4cGxvcmVyIjsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFdlbGNvbWVVUkwoKSB7Ci0JCXJldHVybiAid3NleHBsb3Jlci5qc3AiOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0TGF1bmNoT3B0aW9uUmVnaXN0cnlVUkwoKSB7Ci0JCXJldHVybiAibGF1bmNoX29wdGlvbnNfcmVnaXN0cnkuanNwIjsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldEJhc2VVUkwoKSB7Ci0JCVN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJICAKLQkJCi0JCXNiLmFwcGVuZCgiaHR0cDovLyIpOyAKLQkJc2IuYXBwZW5kKEpldHR5UnVubmFibGUuZ2V0SmV0dHlSdW5uYWJsZSgpLmdldEpldHR5SG9zdCgpKTsgCi0JCXNiLmFwcGVuZCgiOiIpOwotCQlzYi5hcHBlbmQoSmV0dHlSdW5uYWJsZS5nZXRKZXR0eVJ1bm5hYmxlKCkuZ2V0SmV0dHlQb3J0KCkpOwotCQlzYi5hcHBlbmQoIi8iKTsKLQkJc2IuYXBwZW5kKCJ3c2UiKTsKLQkJc2IuYXBwZW5kKCIvIik7Ci0JCXNiLmFwcGVuZChnZXRDb250ZXh0TmFtZSgpKTsKLQkJc2IuYXBwZW5kKCIvIik7Ci0JCXJldHVybiBzYi50b1N0cmluZygpOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0TWV0YWRhdGFEaXJlY3RvcnkoKSB7Ci0JCS8vIDx3b3Jrc3BhY2U+Ly5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvIChub3RlCi0JCS8vIHRoZSB0cmFpbGluZyBzZXBhcmF0b3IpLgotCQlyZXR1cm4gRXhwbG9yZXJQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQbHVnaW5TdGF0ZUxvY2F0aW9uKCk7Ci0JfQotCi0JcHVibGljIElTdGF0dXMgbGF1bmNoKElXb3JrYmVuY2ggd2IsIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbCwKLQkJTGF1bmNoT3B0aW9uW10gb3B0aW9ucywgYm9vbGVhbiBmb3JjZUxhdW5jaE91dHNpZGVJREUpIHsKLQkJLy8gbGF1bmNoT3B0aW9uS2V5Ci0JCWludCBsYXVuY2hPcHRpb25LZXkgPSBnZXRMYXVuY2hPcHRpb25zS2V5KCk7Ci0JCS8vIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBVUkwKLQkJU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlzYi5hcHBlbmQoZ2V0QmFzZVVSTCgpKTsKLQkJc2IuYXBwZW5kKGdldFdlbGNvbWVVUkwoKSk7Ci0JCXNiLmFwcGVuZCgiPyIpOwotCQlpZiAob3B0aW9ucyAhPSBudWxsICYmIG9wdGlvbnMubGVuZ3RoID4gMCkgewotCQkJU3RyaW5nIGVuY29kZWRJRCA9IG51bGw7Ci0JCQl0cnkgewotCQkJCWVuY29kZWRJRCA9IFVSTEVuY29kZXIuZW5jb2RlKEV4cGxvcmVyUGx1Z2luLklELAotCQkJCQkJRXhwbG9yZXJQbHVnaW4uQ0hBUlNFVCk7Ci0JCQl9IGNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUpIHsKLQkJCQlyZXR1cm4gbmV3IFN0YXR1cygKLQkJCQkJCUlTdGF0dXMuRVJST1IsCi0JCQkJCQlFeHBsb3JlclBsdWdpbi5JRCwKLQkJCQkJCTAsCi0JCQkJCQlFeHBsb3JlclBsdWdpbgotCQkJCQkJCQkuZ2V0TWVzc2FnZSgiJU1TR19CUk9LRU5fVk1fRE9FU19OT1RfU1VQUE9SVF9VVEYtOCIpLAotCQkJCQkJZSk7Ci0JCQl9Ci0JCQlzYi5hcHBlbmQoZW5jb2RlZElEKTsKLQkJCXNiLmFwcGVuZCgiPSIpOwotCQkJc2IuYXBwZW5kKGxhdW5jaE9wdGlvbktleSk7Ci0JCX0KLQkJLy8gbGF1bmNoIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcgotCQl0cnkgewotCQkJSVdvcmtiZW5jaEJyb3dzZXJTdXBwb3J0IGJyb3dzZXJTdXBwb3J0ID0gRXhwbG9yZXJQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRXb3JrYmVuY2goKS5nZXRCcm93c2VyU3VwcG9ydCgpOwotCQkJSVdlYkJyb3dzZXIgYnJvd3NlciA9IG51bGw7Ci0JCQkKLQkJCWlmIChmb3JjZUxhdW5jaE91dHNpZGVJREUpIHsKLQkJCQkKLQkJCQkvLyBleHRlcm5hbCBicm93c2VyIHN1cHBvcnQgdXNlcyBzd3QgUHJvZ3JhbS5maW5kUHJvZ3JhbSgpIHRvIGxvY2F0ZSBhbiBhcHByb3ByaWF0ZSBicm93c2VyIGZvciBIVE1MIGZpbGVzCi0JCQkJLy8gY2VydGFpbiB2ZXJzaW9ucyBvZiBzd3QgUHJvZ3JhbSBjbGFzcyBuZWVkIHRvIGJlIHJ1biBmcm9tIHRoZSBVSSB0aHJlYWQsIG90aGVyd2lzZSBmaW5kUHJvZ3JhbSgpIGRvZXMgbm90Ci0JCQkJLy8gd29yayBwcm9wZXJseSAodGhpcyBhcHBsaWVzIHRvIExpbnV4IG9ubHkpLiAgVGhlIGNvZGUgYmVsb3cgaXMgdG8gd29ya2Fyb3VuZCB0aGlzIHByb2JsZW0uCi0JCQkJCi0JCQkJLy8gRGlzcGxheS5nZXRDdXJyZW50KCkgd2lsbCBiZSBudWxsIGlmIHRoaXMgaXMgbm90IHRoZSBVSSB0aHJlYWQKLQkJCQlpZiAoRGlzcGxheS5nZXRDdXJyZW50KCkgPT0gbnVsbCkgewotCQkJCQkKLQkJCQkJLy8gY3JlYXRlIGEgcnVubmFibGUgdG8gb3BlbiB0aGUgYnJvd3NlciwgcnVuIGl0IGluIHRoZSBVSSB0aHJlYWQKLQkJCQkJT3BlbkJyb3dzZXJSdW5uYWJsZSBydW5uYWJsZSA9IG5ldyBPcGVuQnJvd3NlclJ1bm5hYmxlKGJyb3dzZXJTdXBwb3J0LCBuZXcgVVJMKHNiLnRvU3RyaW5nKCkpKTsKLQkJCQkJRGlzcGxheS5nZXREZWZhdWx0KCkuc3luY0V4ZWMocnVubmFibGUpOwotCQkJCQkKLQkJCQkJaWYgKHJ1bm5hYmxlLmdldEV4Y2VwdGlvbigpICE9IG51bGwpCi0JCQkJCQl0aHJvdyBydW5uYWJsZS5nZXRFeGNlcHRpb24oKTsKLQkJCQl9Ci0JCQkJZWxzZSB7Ci0JCQkJCWJyb3dzZXIgPSBicm93c2VyU3VwcG9ydC5nZXRFeHRlcm5hbEJyb3dzZXIoKTsKLQkJCQkJYnJvd3Nlci5vcGVuVVJMKG5ldyBVUkwoc2IudG9TdHJpbmcoKSkpOwotCQkJCX0KLQkJCX0KLQkJCWVsc2UgewotCQkJCS8vIGJyb3dzZXJJZAotCQkJCVN0cmluZ0J1ZmZlciBicm93c2VySWQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCQkJYnJvd3NlcklkLmFwcGVuZChFeHBsb3JlclBsdWdpbi5JRCk7Ci0JCQkJYnJvd3NlcklkLmFwcGVuZChnZXRDb250ZXh0TmFtZSgpKTsKLQkJCQkKLQkJCQlpZiAoaW50ZXJuYWxCcm93c2VyXz09bnVsbCkKLQkJCQkJaW50ZXJuYWxCcm93c2VyXyA9IGJyb3dzZXJTdXBwb3J0LmNyZWF0ZUJyb3dzZXIoYnJvd3NlcklkLnRvU3RyaW5nKCkpOwotCQkJCWJyb3dzZXIgPSBpbnRlcm5hbEJyb3dzZXJfOwotCQkJCWJyb3dzZXIub3BlblVSTChuZXcgVVJMKHNiLnRvU3RyaW5nKCkpKTsKLQkJCX0KLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCXJldHVybiBuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIEV4cGxvcmVyUGx1Z2luLklELCAwLAotCQkJCQlFeHBsb3JlclBsdWdpbi5nZXRNZXNzYWdlKCIlTVNHX0VSUk9SX0xBVU5DSF9XU0VYUExPUkVSIiksCi0JCQkJCWUpOwotCQl9Ci0JCS8vIHJlZ2lzdGVyIGxhdW5jaCBvcHRpb25zCi0JCWlmIChvcHRpb25zICE9IG51bGwgJiYgb3B0aW9ucy5sZW5ndGggPiAwKSB7Ci0JCQl0cnkgewotCQkJCVN0cmluZ0J1ZmZlciBsYXVuY2hPcHRpb25zUmVnVVJMID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQkJCWxhdW5jaE9wdGlvbnNSZWdVUkwuYXBwZW5kKGdldEJhc2VVUkwoKSk7Ci0JCQkJbGF1bmNoT3B0aW9uc1JlZ1VSTC5hcHBlbmQoZ2V0TGF1bmNoT3B0aW9uUmVnaXN0cnlVUkwoKSk7Ci0JCQkJVVJMIHVybCA9IG5ldyBVUkwobGF1bmNoT3B0aW9uc1JlZ1VSTC50b1N0cmluZygpKTsKLQkJCQlVUkxDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKLQkJCQljb25uZWN0aW9uLnNldERvT3V0cHV0KHRydWUpOwotCQkJCVByaW50V3JpdGVyIG91dCA9IG5ldyBQcmludFdyaXRlcihjb25uZWN0aW9uLmdldE91dHB1dFN0cmVhbSgpKTsKLQkJCQlTdHJpbmdCdWZmZXIgcGFyYW1zID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQkJCVN0cmluZyBlbmNvZGVkSUQgPSBudWxsOwotCQkJCXRyeSB7Ci0JCQkJCWVuY29kZWRJRCA9IFVSTEVuY29kZXIuZW5jb2RlKEV4cGxvcmVyUGx1Z2luLklELAotCQkJCQkJCUV4cGxvcmVyUGx1Z2luLkNIQVJTRVQpOwotCQkJCX0gY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZSkgewotCQkJCQlyZXR1cm4gbmV3IFN0YXR1cygKLQkJCQkJCQlJU3RhdHVzLkVSUk9SLAotCQkJCQkJCUV4cGxvcmVyUGx1Z2luLklELAotCQkJCQkJCTAsCi0JCQkJCQkJRXhwbG9yZXJQbHVnaW4KLQkJCQkJCQkJCS5nZXRNZXNzYWdlKCIlTVNHX0JST0tFTl9WTV9ET0VTX05PVF9TVVBQT1JUX1VURi04IiksCi0JCQkJCQkJZSk7Ci0JCQkJfQotCQkJCXBhcmFtcy5hcHBlbmQoZW5jb2RlZElEKTsKLQkJCQlwYXJhbXMuYXBwZW5kKCI9Iik7Ci0JCQkJcGFyYW1zLmFwcGVuZChsYXVuY2hPcHRpb25LZXkpOwotCQkJCXBhcmFtcy5hcHBlbmQoIiYiKTsKLQkJCQlmb3IgKGludCBpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyBpKyspIHsKLQkJCQkJaWYgKG9wdGlvbnNbaV0gIT0gbnVsbCkgewotCQkJCQkJcGFyYW1zLmFwcGVuZChvcHRpb25zW2ldLmdldEtleSgpKTsKLQkJCQkJCXBhcmFtcy5hcHBlbmQoIj0iKTsKLQkJCQkJCVN0cmluZyBvcHRpb24gPSBudWxsOwotCQkJCQkJdHJ5IHsKLQkJCQkJCQlvcHRpb24gPSBVUkxFbmNvZGVyLmVuY29kZShvcHRpb25zW2ldLmdldE9wdGlvbigpLAotCQkJCQkJCQkJRXhwbG9yZXJQbHVnaW4uQ0hBUlNFVCk7Ci0JCQkJCQl9IGNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUpIHsKLQkJCQkJCQlyZXR1cm4gbmV3IFN0YXR1cygKLQkJCQkJCQkJCUlTdGF0dXMuRVJST1IsCi0JCQkJCQkJCQlFeHBsb3JlclBsdWdpbi5JRCwKLQkJCQkJCQkJCTAsCi0JCQkJCQkJCQlFeHBsb3JlclBsdWdpbgotCQkJCQkJCQkJCQkuZ2V0TWVzc2FnZSgiJU1TR19CUk9LRU5fVk1fRE9FU19OT1RfU1VQUE9SVF9VVEYtOCIpLAotCQkJCQkJCQkJZSk7Ci0JCQkJCQl9Ci0JCQkJCQlwYXJhbXMuYXBwZW5kKG9wdGlvbik7Ci0JCQkJCQlwYXJhbXMuYXBwZW5kKCImIik7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJb3V0LnByaW50KHBhcmFtcy50b1N0cmluZygpKTsKLQkJCQlvdXQuY2xvc2UoKTsKLQkJCQlvdXQgPSBudWxsOwotCQkJCUlucHV0U3RyZWFtIGlzID0gY29ubmVjdGlvbi5nZXRJbnB1dFN0cmVhbSgpOwotCQkJCWlzLmNsb3NlKCk7Ci0JCQkJaXMgPSBudWxsOwotCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQlyZXR1cm4gbmV3IFN0YXR1cyhJU3RhdHVzLldBUk5JTkcsIEV4cGxvcmVyUGx1Z2luLklELCAwLAotCQkJCQkJRXhwbG9yZXJQbHVnaW4KLQkJCQkJCQkJLmdldE1lc3NhZ2UoIiVNU0dfRVJST1JfTE9BRF9MQVVOQ0hfT1BUSU9OUyIpLAotCQkJCQkJZSk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIG5ldyBTdGF0dXMoSVN0YXR1cy5PSywgRXhwbG9yZXJQbHVnaW4uSUQsIDAsICIiLCBudWxsKTsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBpbnQgZ2V0TGF1bmNoT3B0aW9uc0tleSgpIHsKLQkJcmV0dXJuIGxhdW5jaE9wdGlvbnNLZXlfKys7Ci0JfQotCi0JcHVibGljIElTdGF0dXMgbGF1bmNoKElXb3JrYmVuY2ggd2IsIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbCwKLQkJCVN0cmluZ1tdIGlucXVpcnlVUkwsIFN0cmluZ1tdIHB1Ymxpc2hVUkwsCi0JCQlib29sZWFuIGZvcmNlTGF1bmNoT3V0c2lkZUlERSkgewotCQlpbnQgaW5xdWlyeVVSTE9wdGlvbkxlbmd0aCA9IChpbnF1aXJ5VVJMICE9IG51bGwpID8gaW5xdWlyeVVSTC5sZW5ndGgKLQkJCQk6IDA7Ci0JCWludCBwdWJsaXNoVVJMT3B0aW9uTGVuZ3RoID0gKHB1Ymxpc2hVUkwgIT0gbnVsbCkgPyBwdWJsaXNoVVJMLmxlbmd0aAotCQkJCTogMDsKLQkJTGF1bmNoT3B0aW9uW10gb3B0aW9ucyA9IG5ldyBMYXVuY2hPcHRpb25baW5xdWlyeVVSTE9wdGlvbkxlbmd0aAotCQkJCSsgcHVibGlzaFVSTE9wdGlvbkxlbmd0aF07Ci0JCWludCBpbmRleCA9IDA7Ci0JCWlmIChpbnF1aXJ5VVJMICE9IG51bGwpIHsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgaW5xdWlyeVVSTC5sZW5ndGg7IGkrKykgewotCQkJCW9wdGlvbnNbaW5kZXhdID0gbmV3IExhdW5jaE9wdGlvbihMYXVuY2hPcHRpb25zLklOUVVJUllfVVJMLAotCQkJCQkJaW5xdWlyeVVSTFtpXSk7Ci0JCQkJaW5kZXgrKzsKLQkJCX0KLQkJfQotCQlpZiAocHVibGlzaFVSTCAhPSBudWxsKSB7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IHB1Ymxpc2hVUkwubGVuZ3RoOyBpKyspIHsKLQkJCQlvcHRpb25zW2luZGV4XSA9IG5ldyBMYXVuY2hPcHRpb24oTGF1bmNoT3B0aW9ucy5QVUJMSVNIX1VSTCwKLQkJCQkJCXB1Ymxpc2hVUkxbaV0pOwotCQkJCWluZGV4Kys7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGxhdW5jaCh3Yiwgc2VsLCBvcHRpb25zLCBmb3JjZUxhdW5jaE91dHNpZGVJREUpOwotCX0KLX0KLQotLyoqCi0gKiBIZWxwZXIgY2xhc3MgZm9yIG9wZW5pbmcgYSBicm93c2VyIGFuZCBzdG9yaW5nIHRoZQotICogRXhjZXB0aW9uIHRocm93biBpZiBpdCB3YXMgdW5zdWNjZXNzZnVsLiAKLSAqLwotY2xhc3MgT3BlbkJyb3dzZXJSdW5uYWJsZSBpbXBsZW1lbnRzIFJ1bm5hYmxlIHsKLQkKLQlwcml2YXRlIElXb3JrYmVuY2hCcm93c2VyU3VwcG9ydCBicm93c2VyU3VwcG9ydDsKLQlwcml2YXRlIFVSTCB1cmw7Ci0JcHJpdmF0ZSBFeGNlcHRpb24gZXhjZXB0aW9uID0gbnVsbDsKLQkKLQlwdWJsaWMgT3BlbkJyb3dzZXJSdW5uYWJsZShJV29ya2JlbmNoQnJvd3NlclN1cHBvcnQgYnJvd3NlclN1cHBvcnQsIFVSTCB1cmwpIHsKLQkJdGhpcy5icm93c2VyU3VwcG9ydCA9IGJyb3dzZXJTdXBwb3J0OwotCQl0aGlzLnVybCA9IHVybDsKLQl9Ci0JCi0JcHVibGljIHZvaWQgcnVuKCkgewotCQl0cnkgewotCQkJYnJvd3NlclN1cHBvcnQuZ2V0RXh0ZXJuYWxCcm93c2VyKCkub3BlblVSTCh1cmwpOwkJCQotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJZXhjZXB0aW9uID0gZTsKLQkJfQotCX0KLQkKLQlwdWJsaWMgRXhjZXB0aW9uIGdldEV4Y2VwdGlvbigpIHsKLQkJcmV0dXJuIGV4Y2VwdGlvbjsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL1dTRXhwbG9yZXJDb250ZXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL1dTRXhwbG9yZXJDb250ZXh0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3N2RlNTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9XU0V4cGxvcmVyQ29udGV4dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3JlcjsKLQotcHVibGljIGZpbmFsIGNsYXNzIFdTRXhwbG9yZXJDb250ZXh0IHsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRCA9ICJvcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIiOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9XU0V4cGxvcmVyTGF1bmNoZXJDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL1dTRXhwbG9yZXJMYXVuY2hlckNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmJjNzY1YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL1dTRXhwbG9yZXJMYXVuY2hlckNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXI7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMRW5jb2RlcjsKLWltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotCi0vKioKLSAqIEBhdXRob3IgY2JyZWFsZXlAY2EuaWJtLmNvbQotICogCi0gKiBUaGlzIDxjb2RlPkNvbW1hbmQ8L2NvZGU+LCB3aGVuIGV4ZWN1dGVkLCBsYXVuY2hlcyB0aGUKLSAqIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlci4KLSAqLwotcHVibGljIGNsYXNzIFdTRXhwbG9yZXJMYXVuY2hlckNvbW1hbmQgZXh0ZW5kcyBBYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbiB7Ci0JcHJpdmF0ZSBib29sZWFuIGZvcmNlTGF1bmNoT3V0c2lkZUlERTsKLQotCXByaXZhdGUgTGF1bmNoT3B0aW9uW10gbGF1bmNoT3B0aW9uczsKLQotCXB1YmxpYyBXU0V4cGxvcmVyTGF1bmNoZXJDb21tYW5kKCkgewotCX0KLQotCXB1YmxpYyB2b2lkIHdyaXRlQ2F0ZWdvcnlJbmZvKFN0cmluZyBpbnF1aXJ5VVJMLCBTdHJpbmcgY2F0ZWdvcmllc0RpcmVjdG9yeSkgewotCQl0cnkgewotCQkJUHJvcGVydGllcyBwID0gbmV3IFByb3BlcnRpZXMoKTsKLQkJCXAuc2V0UHJvcGVydHkoTGF1bmNoT3B0aW9ucy5DQVRFR09SSUVTX0RJUkVDVE9SWSwKLQkJCQkJY2F0ZWdvcmllc0RpcmVjdG9yeSk7Ci0JCQlTdHJpbmdCdWZmZXIgcHJvcGVydGllc0ZpbGVOYW1lID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQkJcHJvcGVydGllc0ZpbGVOYW1lLmFwcGVuZChXU0V4cGxvcmVyLmdldEluc3RhbmNlKCkKLQkJCQkJLmdldE1ldGFkYXRhRGlyZWN0b3J5KCkpOwotCQkJRmlsZSBtZXRhZGF0YURpcmVjdG9yeUZpbGUgPSBuZXcgRmlsZShwcm9wZXJ0aWVzRmlsZU5hbWUudG9TdHJpbmcoKSk7Ci0JCQlpZiAoIW1ldGFkYXRhRGlyZWN0b3J5RmlsZS5leGlzdHMoKSkgewotCQkJCW1ldGFkYXRhRGlyZWN0b3J5RmlsZS5ta2RpcnMoKTsKLQkJCX0KLQkJCXByb3BlcnRpZXNGaWxlTmFtZS5hcHBlbmQoVVJMRW5jb2Rlci5lbmNvZGUoaW5xdWlyeVVSTCwiVVRGLTgiKSkuYXBwZW5kKAotCQkJCQkiLnByb3BlcnRpZXMiKTsKLQkJCUZpbGVPdXRwdXRTdHJlYW0gZm91dCA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKHByb3BlcnRpZXNGaWxlTmFtZQotCQkJCQkudG9TdHJpbmcoKSk7Ci0JCQlwLnN0b3JlKGZvdXQsIG51bGwpOwotCQkJZm91dC5jbG9zZSgpOwotCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCkgewotCQlyZXR1cm4gV1NFeHBsb3Jlci5nZXRJbnN0YW5jZSgpLmxhdW5jaChudWxsLCBudWxsLCBsYXVuY2hPcHRpb25zLAotCQkJCWZvcmNlTGF1bmNoT3V0c2lkZUlERSk7Ci0JfQotCi0JcHVibGljIElTdGF0dXMgZXhlY3V0ZSggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGFkYXB0YWJsZSApIAotICB7Ci0gICAgcmV0dXJuIGV4ZWN1dGUoKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gZm9yY2VMYXVuY2hPdXRzaWRlSURFCi0JICogICAgICAgICAgICBUaGUgZm9yY2VMYXVuY2hPdXRzaWRlSURFIHRvIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRGb3JjZUxhdW5jaE91dHNpZGVJREUoYm9vbGVhbiBmb3JjZUxhdW5jaE91dHNpZGVJREUpIHsKLQkJdGhpcy5mb3JjZUxhdW5jaE91dHNpZGVJREUgPSBmb3JjZUxhdW5jaE91dHNpZGVJREU7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGxhdW5jaE9wdGlvbnMKLQkgKiAgICAgICAgICAgIFRoZSBsYXVuY2hPcHRpb25zIHRvIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRMYXVuY2hPcHRpb25zKExhdW5jaE9wdGlvbltdIGxhdW5jaE9wdGlvbnMpIHsKLQkJdGhpcy5sYXVuY2hPcHRpb25zID0gbGF1bmNoT3B0aW9uczsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9XZWJhcHBNYW5hZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL1dlYmFwcE1hbmFnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ1MDc1Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL1dlYmFwcE1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyOwotCi1pbXBvcnQgamF2YS51dGlsLkRpY3Rpb25hcnk7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsKLWltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZXF1aW5veC5odHRwLmpldHR5LkpldHR5Q29uZmlndXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbHVnaW4uRXhwbG9yZXJQbHVnaW47Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5JbnZhbGlkU3ludGF4RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5TZXJ2aWNlUmVmZXJlbmNlOwotCi1wdWJsaWMgY2xhc3MgV2ViYXBwTWFuYWdlciB7Ci0KLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgaG9zdDsKLQlwcml2YXRlIHN0YXRpYyBpbnQgcG9ydCA9IC0xOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBBVVRPX1NFTEVDVF9KRVRUWV9QT1JUID0gMDsKLQkKLQlwdWJsaWMgc3RhdGljIHZvaWQgc3RhcnQoU3RyaW5nIHdlYmFwcE5hbWUpIHRocm93cyBFeGNlcHRpb24gewotCQlEaWN0aW9uYXJ5IGQgPSBuZXcgSGFzaHRhYmxlKCk7Ci0JCQotCQkKLQkJZC5wdXQoImh0dHAucG9ydCIsIG5ldyBJbnRlZ2VyKGdldFBvcnRQYXJhbWV0ZXIoKSkpOyAvLyROT04tTkxTLTEkCi0KLQkJLy8gc2V0IHRoZSBiYXNlIFVSTAotCQlkLnB1dCgiY29udGV4dC5wYXRoIiwgIi93c2UiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCWQucHV0KCJvdGhlci5pbmZvIiwgIm9yZy5lY2xpcHNlLndzdC53cy5leHBsb3JlciIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJCi0JCS8vIHN1cHByZXNzIEpldHR5IElORk8vREVCVUcgbWVzc2FnZXMgdG8gc3RkZXJyCi0JCUxvZ2dlci5nZXRMb2dnZXIoIm9yZy5tb3J0YmF5Iikuc2V0TGV2ZWwoTGV2ZWwuV0FSTklORyk7IC8vJE5PTi1OTFMtMSQJCi0KLQkJSmV0dHlDb25maWd1cmF0b3Iuc3RhcnRTZXJ2ZXIod2ViYXBwTmFtZSwgZCk7Ci0JCWNoZWNrQnVuZGxlKCk7Ci0JCQotCX0KLQkKLQkvKgotCSAqIEVuc3VyZXMgdGhhdCB0aGUgYnVuZGxlIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lIGFuZCB0aGUgaGlnaGVzdCBhdmFpbGFibGUKLQkgKiB2ZXJzaW9uIGlzIHN0YXJ0ZWQgYW5kIHJlYWRzIHRoZSBwb3J0IG51bWJlcgotCSAqLwotCXByaXZhdGUgc3RhdGljIHZvaWQgY2hlY2tCdW5kbGUoKSB0aHJvd3MgSW52YWxpZFN5bnRheEV4Y2VwdGlvbiwgQnVuZGxlRXhjZXB0aW9uIHsKLQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZSgib3JnLmVjbGlwc2UuZXF1aW5veC5odHRwLnJlZ2lzdHJ5Iik7IC8vJE5PTi1OTFMtMSRpZiAoYnVuZGxlICE9IG51bGwpIHsKLQkJaWYgKGJ1bmRsZS5nZXRTdGF0ZSgpID09IEJ1bmRsZS5SRVNPTFZFRCkgewotCQkJYnVuZGxlLnN0YXJ0KEJ1bmRsZS5TVEFSVF9UUkFOU0lFTlQpOwotCQl9Ci0JCWlmIChwb3J0ID09IC0xKSB7Ci0JCQkvLyBKZXR0eSBzZWxlY3RlZCBhIHBvcnQgbnVtYmVyIGZvciB1cwotCQkJU2VydmljZVJlZmVyZW5jZVtdIHJlZmVyZW5jZSA9IGJ1bmRsZS5nZXRCdW5kbGVDb250ZXh0KCkuZ2V0U2VydmljZVJlZmVyZW5jZXMoIm9yZy5vc2dpLnNlcnZpY2UuaHR0cC5IdHRwU2VydmljZSIsICIob3RoZXIuaW5mbz1vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIpIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJT2JqZWN0IGFzc2lnbmVkUG9ydCA9IHJlZmVyZW5jZVswXS5nZXRQcm9wZXJ0eSgiaHR0cC5wb3J0Iik7IC8vJE5PTi1OTFMtMSQKLQkJCXBvcnQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpYXNzaWduZWRQb3J0KTsKLQkJfQotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBzdG9wKFN0cmluZyB3ZWJhcHBOYW1lKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCXRyeSB7Ci0JCQlKZXR0eUNvbmZpZ3VyYXRvci5zdG9wU2VydmVyKHdlYmFwcE5hbWUpOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJLy9IZWxwQmFzZVBsdWdpbi5sb2dFcnJvcigiQW4gZXJyb3Igb2NjdXJlZCB3aGlsZSBzdG9wcGluZyB0aGUgaGVscCBzZXJ2ZXIiLCBlKTsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JfQotCi0JcHVibGljIHN0YXRpYyBpbnQgZ2V0UG9ydCgpIHsKLQkJcmV0dXJuIHBvcnQ7Ci0JfQotCi0JLyoKLQkgKiBHZXQgdGhlIHBvcnQgbnVtYmVyIHdoaWNoIHdpbGwgYmUgcGFzc2VkIHRvIEpldHR5Ci0JICovCi0JcHJpdmF0ZSBzdGF0aWMgaW50IGdldFBvcnRQYXJhbWV0ZXIoKSB7Ci0JCWlmIChwb3J0ID09IC0xKSB7IAotCQkJcmV0dXJuIEFVVE9fU0VMRUNUX0pFVFRZX1BPUlQ7Ci0JCX0KLQkJcmV0dXJuIHBvcnQ7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0SG9zdCgpIHsKLQkJaWYgKGhvc3QgPT0gbnVsbCkgewotCQkJU3RyaW5nIGhvc3RDb21tYW5kTGluZU92ZXJyaWRlID0gRXhwbG9yZXJQbHVnaW4uZ2V0QnVuZGxlQ29udGV4dCgpLmdldFByb3BlcnR5KCJzZXJ2ZXJfaG9zdCIpOyAvLyROT04tTkxTLTEkCi0JCQlpZiAoaG9zdENvbW1hbmRMaW5lT3ZlcnJpZGUgIT0gbnVsbCAmJiBob3N0Q29tbWFuZExpbmVPdmVycmlkZS50cmltKCkubGVuZ3RoKCkgPiAwKSB7Ci0JCQkJaG9zdCA9IGhvc3RDb21tYW5kTGluZU92ZXJyaWRlOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJaG9zdCA9ICIxMjcuMC4wLjEiOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0JCX0KLQkJcmV0dXJuIGhvc3Q7Ci0JfQotCQotCXByaXZhdGUgV2ViYXBwTWFuYWdlcigpIHsKLQl9Ci0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL2FjdGlvbi9MYXVuY2hXU0VBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvYWN0aW9uL0xhdW5jaFdTRUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YjMyNGY5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvYWN0aW9uL0xhdW5jaFdTRUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwODIwICAgMTkxNTg1IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIuYWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvd0FjdGlvbkRlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbnRleHQuVHJhbnNpZW50UmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkVjbGlwc2VFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkuZWNsaXBzZS5FY2xpcHNlU3RhdHVzSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIuTGF1bmNoT3B0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5MYXVuY2hPcHRpb25zOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5XU0V4cGxvcmVyTGF1bmNoZXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbHVnaW4uRXhwbG9yZXJQbHVnaW47Ci0KLQotcHVibGljIGNsYXNzIExhdW5jaFdTRUFjdGlvbiBpbXBsZW1lbnRzIElXb3JrYmVuY2hXaW5kb3dBY3Rpb25EZWxlZ2F0ZQotewotICBwdWJsaWMgdm9pZCBydW4oSUFjdGlvbiBhY3Rpb24pCi0gIHsKLSAgICBFY2xpcHNlU3RhdHVzSGFuZGxlciAgICAgICAgICAgICBoYW5kbGVyICAgICA9IG5ldyBFY2xpcHNlU3RhdHVzSGFuZGxlcigpOwotICAgIFRyYW5zaWVudFJlc291cmNlQ29udGV4dCAgICAgICAgIGNvbnRleHQgICAgID0gbmV3IFRyYW5zaWVudFJlc291cmNlQ29udGV4dCgpOwotICAgIEVjbGlwc2VFbnZpcm9ubWVudCAgICAgICAgICAgICAgIGVudmlyb25tZW50ID0gbmV3IEVjbGlwc2VFbnZpcm9ubWVudCggbnVsbCwgY29udGV4dCwgaGFuZGxlciApOyAKLSAgICBXU0V4cGxvcmVyTGF1bmNoZXJDb21tYW5kICAgICAgICBjbWQgICAgICAgICA9IG5ldyBXU0V4cGxvcmVyTGF1bmNoZXJDb21tYW5kKCk7Ci0gICAgCi0gICAgU3RyaW5nIHN0YXRlTG9jYXRpb24gPSBFeHBsb3JlclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFBsdWdpblN0YXRlTG9jYXRpb24oKTsKLQlTdHJpbmcgZGVmYXVsdEZhdm9yaXRlc0xvY2F0aW9uID0gRXhwbG9yZXJQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXREZWZhdWx0RmF2b3JpdGVzTG9jYXRpb24oKTsKLQlMYXVuY2hPcHRpb25bXSBsYXVuY2hPcHRpb25zID0gbmV3IExhdW5jaE9wdGlvbltdIHsKLQkJbmV3IExhdW5jaE9wdGlvbihMYXVuY2hPcHRpb25zLlNUQVRFX0xPQ0FUSU9OLHN0YXRlTG9jYXRpb24pLAotCQluZXcgTGF1bmNoT3B0aW9uKExhdW5jaE9wdGlvbnMuREVGQVVMVF9GQVZPUklURVNfTE9DQVRJT04sZGVmYXVsdEZhdm9yaXRlc0xvY2F0aW9uKQotCX07Ci0gICAgY21kLnNldExhdW5jaE9wdGlvbnMobGF1bmNoT3B0aW9ucyk7Ci0gICAgY21kLnNldEVudmlyb25tZW50KCBlbnZpcm9ubWVudCApOwotCSAgY21kLmV4ZWN1dGUoIG51bGwsIG51bGwgKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3dBY3Rpb25EZWxlZ2F0ZSNkaXNwb3NlKCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7ICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvd0FjdGlvbkRlbGVnYXRlI2luaXQob3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdykKLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaFdpbmRvdyB3aW5kb3cpIHsgIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS51aS5JQWN0aW9uRGVsZWdhdGUjc2VsZWN0aW9uQ2hhbmdlZChvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbiwgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChJQWN0aW9uIGFjdGlvbiwgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvZmF2b3JpdGVzL0Zhdm9yaXRlc1JlZ2lzdHJ5VHlwZURlZmF1bHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvZmF2b3JpdGVzL0Zhdm9yaXRlc1JlZ2lzdHJ5VHlwZURlZmF1bHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjA5YzgxNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL2Zhdm9yaXRlcy9GYXZvcml0ZXNSZWdpc3RyeVR5cGVEZWZhdWx0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIuZmF2b3JpdGVzOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuV1NJTERvY3VtZW50OwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5XU0lMRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbHVnaW4uRXhwbG9yZXJQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5mYXZvcml0ZXMuRmF2b3JpdGVzUmVnaXN0cnlUeXBlQWJzdHJhY3Q7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNSZWdpc3RyeVR5cGVEZWZhdWx0IGV4dGVuZHMgRmF2b3JpdGVzUmVnaXN0cnlUeXBlQWJzdHJhY3QgewotCXByaXZhdGUgc3RhdGljIFdTSUxEb2N1bWVudCB3c2lsRG9jXzsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZBVk9SSVRFU19ERUZBVUxUID0gInByb3BlcnRpZXMvZmF2b3JpdGVzX2RlZmF1bHQud3NpbCI7Ci0JCi0JcHJpdmF0ZSBTdHJpbmcgZGVmYXVsdEZhdm9yaXRlc18gPSBudWxsOwotCi0JcHVibGljIEZhdm9yaXRlc1JlZ2lzdHJ5VHlwZURlZmF1bHQoKSB7Ci0JCXN1cGVyKCk7Ci0JCXdzaWxEb2NfID0gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgRmF2b3JpdGVzUmVnaXN0cnlUeXBlRGVmYXVsdChTdHJpbmcgZGVmYXVsdEZhdm9yaXRlcykgewotCQlzdXBlcigpOwotCQl3c2lsRG9jXyA9IG51bGw7Ci0JCWRlZmF1bHRGYXZvcml0ZXNfID0gZGVmYXVsdEZhdm9yaXRlczsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFJlYWRMb2NhdGlvbigpIHsKLQkJU3RyaW5nQnVmZmVyIHJlYWRMb2NhdGlvbiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJaWYgKGRlZmF1bHRGYXZvcml0ZXNfID09IG51bGwpCi0JCXsKLQkJCXJlYWRMb2NhdGlvbi5hcHBlbmQoRXhwbG9yZXJQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQbHVnaW5JbnN0YWxsTG9jYXRpb24oKSk7Ci0JCQlyZWFkTG9jYXRpb24uYXBwZW5kKEZBVk9SSVRFU19ERUZBVUxUKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCXJlYWRMb2NhdGlvbi5hcHBlbmQoZGVmYXVsdEZhdm9yaXRlc18pOwotCQl9Ci0JCXJldHVybiByZWFkTG9jYXRpb24udG9TdHJpbmcoKTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFdyaXRlTG9jYXRpb24oKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXByb3RlY3RlZCBXU0lMRG9jdW1lbnQgZ2V0V1NJTERvY3VtZW50KCkgewotCQlpZiAod3NpbERvY18gPT0gbnVsbCkgewotCQkJd3NpbERvY18gPSBsb2FkV1NJTERvY3VtZW50KGdldFJlYWRMb2NhdGlvbigpLCB0cnVlKTsKLQkJCWdldEZhdm9yaXRlc1VERElSZWdpc3RyaWVzKCk7Ci0JCQkvKiBUT0RPOiBQdWJsaWMgcmVnaXN0cnkgc3RyaW5ncyBzaG91bGRuJ3QgYmUgaW4gcHJvcGVydGllcyAtIEFpbid0IGV4dGVuc2libGUuCi0JCQlmb3IgKGludCBpID0gMDsgaSA8IHJlZ2lzdHJpZXMubGVuZ3RoOyBpKyspIHsKLQkJCQlyZWdpc3RyaWVzW2ldLnNldE5hbWUoV1NQbHVnaW4uZ2V0UmVzb3VyY2VTdHJpbmcocmVnaXN0cmllc1tpXS5nZXROYW1lKCkpKTsKLQkJCX0KLQkJCSovCi0JCX0KLQkJcmV0dXJuIHdzaWxEb2NfOwotCX0KLQotCXB1YmxpYyBXU0lMRG9jdW1lbnQgZ2V0RmF2b3JpdGVzRGVmYXVsdCgpIHsKLQkJcmV0dXJuIGdldFdTSUxEb2N1bWVudCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHNhdmUoKSB0aHJvd3MgV1NJTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvZmF2b3JpdGVzL0Zhdm9yaXRlc1JlZ2lzdHJ5VHlwZVdTRS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9mYXZvcml0ZXMvRmF2b3JpdGVzUmVnaXN0cnlUeXBlV1NFLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhNzZhMWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9mYXZvcml0ZXMvRmF2b3JpdGVzUmVnaXN0cnlUeXBlV1NFLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIuZmF2b3JpdGVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLldTSUxEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGx1Z2luLkV4cGxvcmVyUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZmF2b3JpdGVzLkZhdm9yaXRlc1JlZ2lzdHJ5VHlwZUFic3RyYWN0OwotCi0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNSZWdpc3RyeVR5cGVXU0UgZXh0ZW5kcyBGYXZvcml0ZXNSZWdpc3RyeVR5cGVBYnN0cmFjdAotewotICBwcml2YXRlIHN0YXRpYyBXU0lMRG9jdW1lbnQgd3NpbERvY187Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZBVk9SSVRFU19XU0VYUExPUkVSID0gImZhdm9yaXRlcy53c2lsIjsKLSAgcHJpdmF0ZSBTdHJpbmcgZGVmYXVsdEZhdm9yaXRlc18gPSBudWxsOwotICBwcml2YXRlIFN0cmluZyBzdGF0ZUxvY2F0aW9uXyA9IG51bGw7Ci0gIAotICBwdWJsaWMgRmF2b3JpdGVzUmVnaXN0cnlUeXBlV1NFKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gICAgd3NpbERvY18gPSBudWxsOwotICB9Ci0gIAotICBwdWJsaWMgRmF2b3JpdGVzUmVnaXN0cnlUeXBlV1NFKFN0cmluZyBkZWZhdWx0RmF2b3JpdGVzLCBTdHJpbmcgc3RhdGVMb2NhdGlvbikgewotCXN1cGVyKCk7Ci0Jd3NpbERvY18gPSBudWxsOwotCWRlZmF1bHRGYXZvcml0ZXNfID0gZGVmYXVsdEZhdm9yaXRlczsKLQlzdGF0ZUxvY2F0aW9uXyA9IHN0YXRlTG9jYXRpb247Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFJlYWRMb2NhdGlvbigpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgcmVhZExvY2F0aW9uID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIHJlYWRMb2NhdGlvbi5hcHBlbmQoc3RhdGVMb2NhdGlvbl8gPT0gbnVsbCA/IEV4cGxvcmVyUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UGx1Z2luU3RhdGVMb2NhdGlvbigpIDogc3RhdGVMb2NhdGlvbl8pOwotICAgIHJlYWRMb2NhdGlvbi5hcHBlbmQoRkFWT1JJVEVTX1dTRVhQTE9SRVIpOwotICAgIHJldHVybiByZWFkTG9jYXRpb24udG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3JpdGVMb2NhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gZ2V0UmVhZExvY2F0aW9uKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgV1NJTERvY3VtZW50IGdldFdTSUxEb2N1bWVudCgpCi0gIHsKLSAgICBpZiAod3NpbERvY18gPT0gbnVsbCkKLSAgICB7Ci0gICAgICB3c2lsRG9jXyA9IGxvYWRXU0lMRG9jdW1lbnQoZ2V0UmVhZExvY2F0aW9uKCksIGZhbHNlKTsKLSAgICAgIGlmICh3c2lsRG9jXyA9PSBudWxsKQotICAgICAgewotICAgICAgICByZXN0b3JlRmF2b3JpdGVzRGVmYXVsdCgpOwotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIHNhdmUoKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gd3NpbERvY187Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZXN0b3JlRmF2b3JpdGVzRGVmYXVsdCgpCi0gIHsKLSAgICB3c2lsRG9jXyA9IChuZXcgRmF2b3JpdGVzUmVnaXN0cnlUeXBlRGVmYXVsdChkZWZhdWx0RmF2b3JpdGVzXykpLmdldFdTSUxEb2N1bWVudCgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyMDdmZTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyLkN1cnJlbnROb2RlU2VsZWN0aW9uVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS50cmFuc2Zvcm1lci5JVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuUGVyc3BlY3RpdmU7Ci0KLS8vIEFic3RyYWN0IGFjdGlvbiBjbGFzcyB1c2VkIGZvciBib3RoIExpbmsgYW5kIEZvcm0gYWN0aW9ucy4KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBY3Rpb24KLXsKLSAgcHJvdGVjdGVkIENvbnRyb2xsZXIgY29udHJvbGxlcl87Ci0gIHByb3RlY3RlZCBIYXNodGFibGUgcHJvcGVydHlUYWJsZV87Ci0gIHByb3RlY3RlZCBWZWN0b3IgcmVtb3ZlZFByb3BlcnRpZXNfOwotCi0gIHB1YmxpYyBBY3Rpb24oKQotICB7Ci0gICAgdGhpcyhudWxsKTsKLSAgfQotCi0gIHB1YmxpYyBBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgY29udHJvbGxlcl8gPSBjb250cm9sbGVyOwotICAgIHByb3BlcnR5VGFibGVfID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIHJlbW92ZWRQcm9wZXJ0aWVzXyA9IG5ldyBWZWN0b3IoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBDb250cm9sbGVyIGdldENvbnRyb2xsZXIoKQotICB7Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXJfOwotICB9Ci0KLSAgLyoqCi0gICogUmVhZCBwcm9wZXJ0aWVzIGZyb20gYW4gSHR0cFNlcnZsZXRSZXF1ZXN0IGFuZCBhZGQgdGhlbSB0byB0aGUgcHJvcGVydHkgdGFibGUuCi0gICogQHBhcmFtIEh0dHBTZXJ2bGV0UmVxdWVzdCBUaGUgSHR0cFNlcnZsZXRSZXF1ZXN0IGNvbnRhaW5pbmcgdGhlIGVtYmVkZGVkIHBhcmFtZXRlcnMuCi0gICogQHJldHVybiBib29sZWFuIFdoZXRoZXIgb3Igbm90IHRoZSBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwuCi0gICovCi0gIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIHBvcHVsYXRlUHJvcGVydHlUYWJsZShIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCk7Ci0KLSAgLyoqCi0gICogR2V0IHRoZSBwcm9wZXJ0eSB0YWJsZS4KLSAgKiBAcmV0dXJuIEhhc2h0YWJsZSBBIGhhc2h0YWJsZSBjb250YWluaW5nIHRoZSBwcm9wZXJ0aWVzIGZvciB0aGlzIGFjdGlvbi4KLSAgKi8KLSAgcHVibGljIGZpbmFsIEhhc2h0YWJsZSBnZXRQcm9wZXJ0eVRhYmxlKCkKLSAgewotICAgIHJldHVybiBwcm9wZXJ0eVRhYmxlXzsKLSAgfQotICAKLSAgLyoqCi0gICAqIFNldCB0aGUgcHJvcGVydHkgdGFibGUuCi0gICAqIEByZXR1cm4gdm9pZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UHJvcGVydHlUYWJsZShIYXNodGFibGUgcHJvcGVydHlUYWJsZSkKLSAgewotICAgcHJvcGVydHlUYWJsZV8gPSBwcm9wZXJ0eVRhYmxlOwotICB9Ci0gIAotICAvKioKLSAgICogQWRkIGEgcHJvcGVydHkgdG8gdGhlIHByb3BlcnR5IHRhYmxlLgotICAgKiBAcGFyYW0gdm9pZAotICAgKi8KLSAgcHVibGljIGZpbmFsIHZvaWQgYWRkUHJvcGVydHkoT2JqZWN0IGtleSwgT2JqZWN0IHZhbHVlKQotICB7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KGtleSwgdmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICogUmVtb3ZlIGEgcHJvcGVydHkgZnJvbSB0aGUgcHJvcGVydHkgdGFibGUuIFRyYWNrIHRoZSBkZWxldGlvbnMuCi0gICogQHBhcmFtIE9iamVjdCBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSBiZWluZyByZW1vdmVkLgotICAqLwotICBwdWJsaWMgZmluYWwgdm9pZCByZW1vdmVQcm9wZXJ0eShPYmplY3Qga2V5KQotICB7Ci0gICAgcHJvcGVydHlUYWJsZV8ucmVtb3ZlKGtleSk7Ci0gICAgcmVtb3ZlZFByb3BlcnRpZXNfLmFkZEVsZW1lbnQoa2V5KTsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZ1tdIGdldFByb3BlcnR5QXNTdHJpbmdBcnJheShPYmplY3Qga2V5KQotICB7Ci0gICAgT2JqZWN0IG9iamVjdCA9IHByb3BlcnR5VGFibGVfLmdldChrZXkpOwotICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBTdHJpbmdbXSkKLSAgICAgIHJldHVybiAoU3RyaW5nW10pb2JqZWN0OwotICAgIGVsc2UgaWYgKG9iamVjdCAhPSBudWxsKQotICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbXSB7b2JqZWN0LnRvU3RyaW5nKCl9OwotICAgIGVsc2UKLSAgICAgIHJldHVybiBuZXcgU3RyaW5nWzBdOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gZXhlY3V0ZSgpCi0gIHsKLSAgICByZXR1cm4gZXhlY3V0ZSh0cnVlKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIGV4ZWN1dGUoYm9vbGVhbiB1c2VBY3Rpb25FbmdpbmUpCi0gIHsKLSAgICBpZiAodXNlQWN0aW9uRW5naW5lKQotICAgICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldEFjdGlvbkVuZ2luZSgpLmV4ZWN1dGVBY3Rpb24odGhpcyk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIHJ1bigpOwotICB9Ci0KLSAgLy8gQWJzdHJhY3QgbWV0aG9kIGZvciBydW5uaW5nIHRoaXMgYWN0aW9uLgotICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBydW4oKTsKLSAgCi0gIC8qKgotICAqIFJldHVybiB0aGUgdHJhbnNmb3JtZXJzIHVzZWQgdG8gbm9ybWFsaXplIHRoZSBpbnB1dC9vdXRwdXQgcGFyYW1ldGVycyBmb3IgdGhpcyBhY3Rpb24KLSAgKiBAcmV0dXJuIElUcmFuc2Zvcm1lcltdCi0gICovCi0gIHB1YmxpYyBJVHJhbnNmb3JtZXJbXSBnZXRUcmFuc2Zvcm1lcnMoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBJVHJhbnNmb3JtZXJbXSB7bmV3IEN1cnJlbnROb2RlU2VsZWN0aW9uVHJhbnNmb3JtZXIoY29udHJvbGxlcl8pfTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlVW5leHBlY3RlZEV4Y2VwdGlvbihQZXJzcGVjdGl2ZSBwZXJzcGVjdGl2ZSxNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlLFN0cmluZyBleGNlcHRpb25OYW1lLFRocm93YWJsZSB0KQotICB7Ci0gICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UocGVyc3BlY3RpdmUuZ2V0Q29udHJvbGxlcigpLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGV4Y2VwdGlvbk5hbWUpOwotICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHQuZ2V0TWVzc2FnZSgpKTsKLSAgfSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvQ2hlY2tXb3JrYmVuY2hGaWxlUmVhZE9ubHlBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9DaGVja1dvcmtiZW5jaEZpbGVSZWFkT25seUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzgzMmY2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9DaGVja1dvcmtiZW5jaEZpbGVSZWFkT25seUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OwotCi1wdWJsaWMgY2xhc3MgQ2hlY2tXb3JrYmVuY2hGaWxlUmVhZE9ubHlBY3Rpb24gZXh0ZW5kcyBBY3Rpb24KLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGluaygpCi0gIHsKLSAgICByZXR1cm4gImFjdGlvbnMvQ2hlY2tXb3JrYmVuY2hGaWxlUmVhZE9ubHlBY3Rpb25KU1AuanNwIjsKLSAgfQotICAgIAotICBwdWJsaWMgYm9vbGVhbiBwb3B1bGF0ZVByb3BlcnR5VGFibGUoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpCi0gIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvQ2xlYXJOb2RlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvQ2xlYXJOb2RlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1M2ZkYzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL0NsZWFyTm9kZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwOTA2ICAgMTU2Mzk4IGplZmZsaXVAY2EuaWJtLmNvbSAtIEplZmZyZXkgTGl1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIENsZWFyTm9kZUFjdGlvbiBleHRlbmRzIE5vZGVBY3Rpb24KLXsKLSAgcHVibGljIENsZWFyTm9kZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIsTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyLG5vZGVNYW5hZ2VyKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBpbnQgbm9kZUlkID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgaWYgKCFpc1N0YWxlTm9kZShub2RlSWQpKQotICAgIHsKLSAgICAgIE5vZGUgbm9kZSA9IG5vZGVNYW5hZ2VyXy5nZXROb2RlKG5vZGVJZCk7Ci0gICAgICBUcmVlRWxlbWVudCBlbGVtZW50ID0gbm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgLy9lbGVtZW50LmRpc2Nvbm5lY3RBbGwoKTsKLSAgICAgIExpc3QgZWxlbWVudHMycmVtb3ZlID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgY29sbGVjdEVsZW1lbnRzMlJlbW92ZShlbGVtZW50LCBlbGVtZW50czJyZW1vdmUpOwotICAgICAgZm9yIChJdGVyYXRvciBpdCA9IGVsZW1lbnRzMnJlbW92ZS5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBUcmVlRWxlbWVudCBlID0gKFRyZWVFbGVtZW50KWl0Lm5leHQoKTsKLSAgICAgICAgZS5nZXRNb2RlbCgpLnJlbW92ZUVsZW1lbnQoZSk7Ci0gICAgICB9Ci0gICAgICBpZiAoZWxlbWVudC5nZXRNb2RlbCgpLmdldFJvb3RFbGVtZW50KCkgIT0gZWxlbWVudCkKLSAgICAgICAgbm9kZU1hbmFnZXJfLnJlbW92ZUZyb21Ob2RlVGFibGUobm9kZUlkKTsKLSAgICAgIC8vIERvIG5vdCBhZGQgdGhpcyB0byB0aGUgaGlzdG9yeS4KLSAgICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSBjb250cm9sbGVyXy5nZXRDdXJyZW50UGVyc3BlY3RpdmUoKS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19JTkZPX05PREVfQ0xFQVJFRCIsbm9kZS5nZXROb2RlTmFtZSgpKSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNvbGxlY3RFbGVtZW50czJSZW1vdmUoVHJlZUVsZW1lbnQgZWxlbWVudCwgTGlzdCBlbGVtZW50czJyZW1vdmUpCi0gIHsKLSAgICBpZiAoIWVsZW1lbnRzMnJlbW92ZS5jb250YWlucyhlbGVtZW50KSkKLSAgICB7Ci0gICAgICBpZiAoZWxlbWVudC5nZXRNb2RlbCgpLmdldFJvb3RFbGVtZW50KCkgIT0gZWxlbWVudCkKLSAgICAgICAgZWxlbWVudHMycmVtb3ZlLmFkZChlbGVtZW50KTsKLSAgICAgIEVudW1lcmF0aW9uIHJlbHMgPSBlbGVtZW50LmdldFJlbHMoKTsKLSAgICAgIHdoaWxlIChyZWxzLmhhc01vcmVFbGVtZW50cygpKQotICAgICAgewotICAgICAgICBSZWwgcmVsID0gKFJlbClyZWxzLm5leHRFbGVtZW50KCk7Ci0gICAgICAgIFN0cmluZyByZWxOYW1lID0gcmVsLmdldE5hbWUoKTsKLSAgICAgICAgaWYgKCFNb2RlbENvbnN0YW50cy5SRUxfT1dORVIuZXF1YWxzKHJlbE5hbWUpKQotICAgICAgICB7Ci0gICAgICAgICAgRW51bWVyYXRpb24gY2hpbGRyZW4gPSBlbGVtZW50LmdldEVsZW1lbnRzKHJlbC5nZXROYW1lKCkpOwotICAgICAgICAgIHdoaWxlIChjaGlsZHJlbi5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBjb2xsZWN0RWxlbWVudHMyUmVtb3ZlKChUcmVlRWxlbWVudCljaGlsZHJlbi5uZXh0RWxlbWVudCgpLCBlbGVtZW50czJyZW1vdmUpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGlua0Zvckhpc3RvcnkoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvLyBEZWxldGluZyBhIG5vZGUgZnJvbSB0aGUgdHJlZSByZXN1bHRzIGluIGNoYW5nZXMgdG8gdGhlIHRyZWV2aWV3IGFuZCBzdGF0dXMgY29udGVudHMuCi0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRWYXIoKTsKLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRUcmVlQ29udGVudFBhZ2UoKTsKLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyVmFyKCk7Ci0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclBhZ2UoKTsKLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRTdGF0dXNDb250ZW50VmFyKCk7Ci0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFBhZ2UoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9DbGVhclZpZXdFbGVtZW50QWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvQ2xlYXJWaWV3RWxlbWVudEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzU5OGQ2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9DbGVhclZpZXdFbGVtZW50QWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9uczsKLQotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVmlld1Rvb2w7Ci0KLS8vIEFic3RyYWN0IGFjdGlvbiBjbGFzcyB1c2VkIGZvciBib3RoIExpbmsgYW5kIEZvcm0gYWN0aW9ucy4KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBDbGVhclZpZXdFbGVtZW50QWN0aW9uIGV4dGVuZHMgTGlua0FjdGlvbgotewotICBwcml2YXRlIFN0cmluZyBsaXN0TWFuYWdlclJlbF87Ci0gIHByaXZhdGUgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXJfOwotICBwdWJsaWMgQ2xlYXJWaWV3RWxlbWVudEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIsTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsU3RyaW5nIGxpc3RNYW5hZ2VyUmVsKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgbm9kZU1hbmFnZXJfICA9IG5vZGVNYW5hZ2VyOwotICAgIGxpc3RNYW5hZ2VyUmVsXyA9IGxpc3RNYW5hZ2VyUmVsOwotICB9Ci0KLSAgLy8gLi4uanNwP3ZpZXdJZD0uLi4KLSAgcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gcHJvY2Vzc0xpbmtQYXJhbWV0ZXJzKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0KQotICB7Ci0gICAgU3RyaW5nIHZpZXdJZFN0cmluZyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5WSUVXSUQpOwotICAgIC8vIFBlcmZvcm0gZGF0YSB2YWxpZGF0aW9uLgotICAgIHRyeQotICAgIHsKLSAgICAgIEludGVnZXIucGFyc2VJbnQodmlld0lkU3RyaW5nKTsKLSAgICB9Ci0gICAgY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vIFZhbGlkYXRpb24gZmFpbGVkIQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLlZJRVdJRCx2aWV3SWRTdHJpbmcpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIGludCB2aWV3SWQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5WSUVXSUQpKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyXy5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBWaWV3VG9vbCB2aWV3VG9vbCA9IChWaWV3VG9vbClzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKTsKLSAgICBpZiAodmlld1Rvb2wuZ2V0VG9vbE1hbmFnZXIodmlld0lkKSA9PSBudWxsKQotICAgIHsKLSAgICAgIC8vIFN0YWxlIHZpZXcuCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIFRyZWVFbGVtZW50IGVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBMaXN0TWFuYWdlciBsaXN0TWFuYWdlciA9IChMaXN0TWFuYWdlcillbGVtZW50LmdldFByb3BlcnR5QXNPYmplY3QobGlzdE1hbmFnZXJSZWxfKTsKLSAgICBsaXN0TWFuYWdlci5yZW1vdmVFbGVtZW50V2l0aFZpZXdJZCh2aWV3SWQpOwotICAgIHZpZXdUb29sLmNsZWFyVmlld1Rvb2xNYW5hZ2VyKHZpZXdJZCk7Ci0gICAgc2VsZWN0ZWROb2RlLnNldFZpZXdJZChBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpOwotICAgIC8vIERvIG5vdCBhZGQgdGhpcyB0byB0aGUgaGlzdG9yeS4KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGlua0Zvckhpc3RvcnkoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKTsKLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyUGFnZSgpOwotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRWYXIoKTsKLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRTdGF0dXNDb250ZW50UGFnZSgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL0Zvcm1BY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9Gb3JtQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5NGQzMGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL0Zvcm1BY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkhUTUxVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEZvcm1BY3Rpb24gZXh0ZW5kcyBBY3Rpb24KLXsKLSAgcHVibGljIEZvcm1BY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYWJzdHJhY3QgYm9vbGVhbiBwcm9jZXNzUGFyc2VkUmVzdWx0cyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBwb3B1bGF0ZVByb3BlcnR5VGFibGUoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIgPSBuZXcgTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIoKTsKLSAgICAgIHBhcnNlci5wYXJzZVJlcXVlc3QocmVxdWVzdCxIVE1MVXRpbHMuVVRGOF9FTkNPRElORyk7Ci0gICAgICBnZXRTZWxlY3RlZEZvcm1Ub29sKCkuY2xlYXJFcnJvcnMoKTsKLSAgICAgIGJvb2xlYW4gcmVzdWx0ID0gcHJvY2Vzc1BhcnNlZFJlc3VsdHMocGFyc2VyKTsKLSAgICAgIHJlbW92ZWRQcm9wZXJ0aWVzXy5yZW1vdmVBbGxFbGVtZW50cygpOwotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgY2F0Y2ggKE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uIGUpCi0gICAgewotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFByb3BlcnR5VGFibGUoSGFzaHRhYmxlIHByb3BlcnR5VGFibGUpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBwcm9jZXNzUGFyc2VkUmVzdWx0cyhuZXcgTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIocHJvcGVydHlUYWJsZSkpOwotICAgIH0KLSAgICBjYXRjaCAoTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24gbWZkZSkKLSAgICB7Ci0gICAgfQotICAgIGZvciAoSXRlcmF0b3IgaXQgPSBwcm9wZXJ0eVRhYmxlLmtleVNldCgpLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgewotICAgICAgT2JqZWN0IGtleSA9IGl0Lm5leHQoKTsKLSAgICAgIEhhc2h0YWJsZSB0aGlzUHJvcGVydHlUYWJsZSA9IGdldFByb3BlcnR5VGFibGUoKTsKLSAgICAgIGlmICghdGhpc1Byb3BlcnR5VGFibGUuY29udGFpbnNLZXkoa2V5KSkKLSAgICAgICAgYWRkUHJvcGVydHkoa2V5LCBwcm9wZXJ0eVRhYmxlLmdldChrZXkpKTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBhZGRUb0hpc3RvcnkoaW50IHBlcnNwZWN0aXZlSWQsU3RyaW5nIHVybCkKLSAgewotICAgIGNvbnRyb2xsZXJfLmFkZFRvSGlzdG9yeShwZXJzcGVjdGl2ZUlkLHVybCk7Ci0gIH0KLQotICBwdWJsaWMgYWJzdHJhY3QgRm9ybVRvb2wgZ2V0U2VsZWN0ZWRGb3JtVG9vbCgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL0Zvcm1JbnB1dEV4Y2VwdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL0Zvcm1JbnB1dEV4Y2VwdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjJjY2E0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9Gb3JtSW5wdXRFeGNlcHRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zOwotCi0vLyBBIGNsYXNzIGZvciByZXBvcnRpbmcgZm9ybSBpbnB1dCBleGNlcHRpb25zLgotcHVibGljIGNsYXNzIEZvcm1JbnB1dEV4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbgotewotICAvKioKLQkgKiBDb21tZW50IGZvciA8Y29kZT5zZXJpYWxWZXJzaW9uVUlEPC9jb2RlPgotCSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDMyNTc4NDY2MDE2ODU5Mzg3NDJMOwotCi1wdWJsaWMgRm9ybUlucHV0RXhjZXB0aW9uKFN0cmluZyBtc2cpCi0gIHsKLSAgICBzdXBlcihtc2cpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkNzI0NWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL0ltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9uczsKLQotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtV3JpdGVyOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuZmFjdG9yeS5XU0RMRmFjdG9yeTsKLWltcG9ydCBqYXZheC53c2RsLnhtbC5XU0RMV3JpdGVyOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5XU0lMRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC53c2RsNGouV1NETEZhY3RvcnlJbXBsOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uIGV4dGVuZHMgTGlua0FjdGlvbgotewotICBwdWJsaWMgSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgLy8gb3MgaXMgdGhlIE91dHB1dFN0cmVhbSBvZiB0aGUgZmlsZSBpbiB0aGUgZmlsZSBzeXN0ZW0KLSAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gd3JpdGUoT3V0cHV0U3RyZWFtIG9zKTsKLQotICAvLyB0aGUgZGVmYXVsdCBuYW1lIGZvciB0aGUgZmlsZQotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldERlZmF1bHRGaWxlTmFtZSgpOwotCi0gIHB1YmxpYyBib29sZWFuIHdyaXRlV1NETERlZmluaXRpb24oT3V0cHV0U3RyZWFtIG9zLCBEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBXU0RMRmFjdG9yeSB3c2RsRmFjdG9yeSA9IG5ldyBXU0RMRmFjdG9yeUltcGwoKTsKLSAgICAgIFdTRExXcml0ZXIgd3NkbFdyaXRlciA9IHdzZGxGYWN0b3J5Lm5ld1dTRExXcml0ZXIoKTsKLSAgICAgIHdzZGxXcml0ZXIud3JpdGVXU0RMKGRlZmluaXRpb24sIG9zKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHdyaXRlV1NJTERvY3VtZW50KE91dHB1dFN0cmVhbSBvcywgV1NJTERvY3VtZW50IHdzaWxEb2MpCi0gIHsKLSAgICBPdXRwdXRTdHJlYW1Xcml0ZXIgb3N3ID0gbnVsbDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBvc3cgPSBuZXcgT3V0cHV0U3RyZWFtV3JpdGVyKG9zKTsKLSAgICAgIHdzaWxEb2Mud3JpdGUob3N3KTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBmaW5hbGx5Ci0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGlmIChvc3cgIT0gbnVsbCkKLSAgICAgICAgICBvc3cuY2xvc2UoKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSUQsIGludCB0b29sSUQsIGludCB2aWV3SUQsIGludCB2aWV3VG9vbElELCBTdHJpbmcganNwUGFnZSkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcihqc3BQYWdlKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPycpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQobm9kZUlEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5UT09MSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQodG9vbElEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5WSUVXSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQodmlld0lEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5WSUVXVE9PTElEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKHZpZXdUb29sSUQpOwotICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzTGlua1BhcmFtZXRlcnMoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpCi0gIHsKLSAgICBTdHJpbmcgbm9kZUlEID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgU3RyaW5nIHRvb2xJRCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5UT09MSUQpOwotICAgIFN0cmluZyB2aWV3SUQgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuVklFV0lEKTsKLSAgICBTdHJpbmcgdmlld1Rvb2xJRCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5WSUVXVE9PTElEKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRCk7Ci0gICAgICBJbnRlZ2VyLnBhcnNlSW50KHRvb2xJRCk7Ci0gICAgICBJbnRlZ2VyLnBhcnNlSW50KHZpZXdJRCk7Ci0gICAgICBJbnRlZ2VyLnBhcnNlSW50KHZpZXdUb29sSUQpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5OT0RFSUQsIG5vZGVJRCk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLlRPT0xJRCwgdG9vbElEKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuVklFV0lELCB2aWV3SUQpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5WSUVXVE9PTElELCB2aWV3VG9vbElEKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRWYXIoKTsKLQotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRQYWdlKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9JbXBvcnRUb1dvcmtiZW5jaEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTBjM2Y5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9JbXBvcnRUb1dvcmtiZW5jaEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDcyMSAgIDE0OTA3MCBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzLCB1cGRhdGUgdG8gcmVzcGVjdCBwcmVmZXJlbmNlcwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29udGV4dC5QZXJzaXN0ZW50UmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkVjbGlwc2VFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c2lsLkFkZFdTRExUb1dTSUxDb21tYW5kOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb24gZXh0ZW5kcyBGb3JtQWN0aW9uIHsKLSAgcHJpdmF0ZSBJV29ya3NwYWNlUm9vdCBpV29ya3NwYWNlUm9vdF87Ci0gIHByaXZhdGUgSVByb2plY3QgaVByb2plY3RfOwotICBwcml2YXRlIElSZXNvdXJjZSB0YXJnZXRGaWxlUmVzb3VyY2VfOwotCi0gICAgcHVibGljIEltcG9ydFRvV29ya2JlbmNoQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikgewotICAgICAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICAgICAgaVdvcmtzcGFjZVJvb3RfID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzUGFyc2VkUmVzdWx0cyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbiB7Ci0gICAgICAgIGdldFNlbGVjdGVkRm9ybVRvb2woKTsKLSAgICAgICAgTWVzc2FnZVF1ZXVlIG1zZ1F1ZXVlID0gY29udHJvbGxlcl8uZ2V0Q3VycmVudFBlcnNwZWN0aXZlKCkuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgICAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSB0cnVlOwotICAgICAgICBTdHJpbmcgd29ya2JlbmNoUHJvamVjdE5hbWUgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5XT1JLQkVOQ0hfUFJPSkVDVF9OQU1FKTsKLSAgICAgICAgaWYgKHdvcmtiZW5jaFByb2plY3ROYW1lID09IG51bGwgfHwgd29ya2JlbmNoUHJvamVjdE5hbWUubGVuZ3RoKCkgPD0gMCkgewotICAgICAgICAgICAgbXNnUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9XT1JLQkVOQ0hfUFJPSkVDVCIpKTsKLSAgICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBpUHJvamVjdF8gPSBpV29ya3NwYWNlUm9vdF8uZ2V0UHJvamVjdCh3b3JrYmVuY2hQcm9qZWN0TmFtZSk7Ci0gICAgICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLldPUktCRU5DSF9QUk9KRUNUX05BTUUsIHdvcmtiZW5jaFByb2plY3ROYW1lKTsKLSAgICAgICAgfQotICAgICAgICBTdHJpbmcgaW1wb3J0RmlsZSA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLklNUE9SVF9GSUxFKTsKLSAgICAgICAgaWYgKGltcG9ydEZpbGUgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5JTVBPUlRfRklMRSwgQWN0aW9uSW5wdXRzLklNUE9SVF9GSUxFKTsKLSAgICAgICAgICAgIFN0cmluZyBpbXBvcnRlZEZpbGVOYW1lID0gcGFyc2VyLmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuSU1QT1JURURfRklMRV9OQU1FKTsKLSAgICAgICAgICAgIGlmIChpbXBvcnRlZEZpbGVOYW1lID09IG51bGwgfHwgaW1wb3J0ZWRGaWxlTmFtZS5sZW5ndGgoKSA8PSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1zZ1F1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfRklMRV9OQU1FIikpOwotICAgICAgICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5JTVBPUlRFRF9GSUxFX05BTUUsIGltcG9ydGVkRmlsZU5hbWUpOwotICAgICAgICB9Ci0gICAgICAgIFN0cmluZyBpbXBvcnRUb1dTSUwgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5JTVBPUlRfVE9fV1NJTCk7Ci0gICAgICAgIGlmIChpbXBvcnRUb1dTSUwgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5JTVBPUlRfVE9fV1NJTCwgQWN0aW9uSW5wdXRzLklNUE9SVF9UT19XU0lMKTsKLSAgICAgICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuSU1QT1JURURfV1NETF9VUkwsIHBhcnNlci5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLklNUE9SVEVEX1dTRExfVVJMKSk7Ci0gICAgICAgICAgICBTdHJpbmcgd3NpbEZpbGVOYW1lID0gcGFyc2VyLmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuV1NJTF9GSUxFX05BTUUpOwotICAgICAgICAgICAgaWYgKHdzaWxGaWxlTmFtZSA9PSBudWxsIHx8IHdzaWxGaWxlTmFtZS5sZW5ndGgoKSA8PSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1zZ1F1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfV1NJTF9GSUxFX05BTUUiKSk7Ci0gICAgICAgICAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLldTSUxfRklMRV9OQU1FLCB3c2lsRmlsZU5hbWUpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpbXBvcnRGaWxlID09IG51bGwgJiYgaW1wb3J0VG9XU0lMID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1zZ1F1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PX0lNUE9SVF9PUFRJT05fU0VMRUNURUQiKSk7Ci0gICAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBpbnB1dHNWYWxpZDsKLSAgICB9Ci0KLSAgICBwcml2YXRlIE91dHB1dFN0cmVhbSBnZXRPdXRwdXRTdHJlYW0oU3RyaW5nIGRlZmF1bHRGaWxlTmFtZSkgdGhyb3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiB7Ci0gICAgICAgIEZpbGUgZmlsZSA9IG5ldyBGaWxlKGNvbnRyb2xsZXJfLmdldFNlcnZsZXRFbmdpbmVTdGF0ZUxvY2F0aW9uKCkgKyBkZWZhdWx0RmlsZU5hbWUpOwotICAgICAgICBGaWxlT3V0cHV0U3RyZWFtIGZvcyA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKGZpbGUpOwotICAgICAgICByZXR1cm4gZm9zOwotICAgIH0KLQotICAgIHByaXZhdGUgYm9vbGVhbiBpbXBvcnRUZW1wRmlsZVRvV2ViUHJvamVjdChTdHJpbmcgZGVmYXVsdEZpbGVOYW1lKSB0aHJvd3MgRmlsZU5vdEZvdW5kRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uCi0gICAgewotICAgICAgaWYgKHRhcmdldEZpbGVSZXNvdXJjZV8gIT0gbnVsbCAmJiB0YXJnZXRGaWxlUmVzb3VyY2VfLmdldFR5cGUoKSA9PSBJUmVzb3VyY2UuRklMRSkKLSAgICAgICAgdGFyZ2V0RmlsZVJlc291cmNlXy5kZWxldGUodHJ1ZSxuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQotICAgICAgU3RyaW5nIGltcG9ydGVkRmlsZU5hbWUgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuSU1QT1JURURfRklMRV9OQU1FKTsKLSAgICAgIEZpbGUgZmlsZSA9IG5ldyBGaWxlKGNvbnRyb2xsZXJfLmdldFNlcnZsZXRFbmdpbmVTdGF0ZUxvY2F0aW9uKCkrZGVmYXVsdEZpbGVOYW1lKTsKLSAgICAgIEJ1ZmZlcmVkSW5wdXRTdHJlYW0gYmlzID0gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0obmV3IEZpbGVJbnB1dFN0cmVhbShmaWxlKSk7Ci0KLSAgICAgIElGaWxlIGlGaWxlID0gaVByb2plY3RfLmdldEZpbGUoIi8iK2ltcG9ydGVkRmlsZU5hbWUpOwotICAgICAgaUZpbGUuY3JlYXRlKGJpcyx0cnVlLG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCi0gICAgICAvLyBSZW1vdmUgdGhlIHRlbXBvcmFyeSBmaWxlCi0gICAgICBmaWxlLmRlbGV0ZSgpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gZmlsZUV4aXN0cygpCi0gICAgewotICAgICAgU3RyaW5nIGltcG9ydGVkRmlsZU5hbWUgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuSU1QT1JURURfRklMRV9OQU1FKTsKLSAgICAgIGlmIChpbXBvcnRlZEZpbGVOYW1lICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRhcmdldEZpbGVSZXNvdXJjZV8gPSBpUHJvamVjdF8uZmluZE1lbWJlcihpbXBvcnRlZEZpbGVOYW1lKTsKLSAgICAgICAgcmV0dXJuICh0YXJnZXRGaWxlUmVzb3VyY2VfICE9IG51bGwgJiYgdGFyZ2V0RmlsZVJlc291cmNlXy5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZJTEUpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaXNUYXJnZXRGaWxlUmVzb3VyY2VSZWFkT25seSgpCi0gICAgewotICAgICAgcmV0dXJuIHRhcmdldEZpbGVSZXNvdXJjZV8uZ2V0UmVzb3VyY2VBdHRyaWJ1dGVzKCkuaXNSZWFkT25seSgpOwotICAgIH0KLQotICAgIAotICAgIHB1YmxpYyBib29sZWFuIGlzQ2hlY2tvdXRGaWxlc0VuYWJsZWQoKQotICAgIHsKLSAgICAJcmV0dXJuIFBlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQuZ2V0SW5zdGFuY2UoKS5pc0NoZWNrb3V0RmlsZXNFbmFibGVkKCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRXZWJTZXJ2aWNlUGx1Z2luRmlsZU1lc3NhZ2UoU3RyaW5nIG1lc3NhZ2VJZCkKLSAgICB7Ci0gICAgICBTdHJpbmcgaW1wb3J0ZWRGaWxlTmFtZSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5JTVBPUlRFRF9GSUxFX05BTUUpOwotICAgICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UobWVzc2FnZUlkLG5ldyBTdHJpbmdbXXtpUHJvamVjdF8uZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLGltcG9ydGVkRmlsZU5hbWV9KTsKLSAgICB9Ci0KLSAgICAKLSAgICBwdWJsaWMgYm9vbGVhbiBpc092ZXJ3cml0ZUZpbGVzRW5hYmxlZCgpCi0gICAgewotICAgIAlyZXR1cm4gUGVyc2lzdGVudFJlc291cmNlQ29udGV4dC5nZXRJbnN0YW5jZSgpLmlzT3ZlcndyaXRlRmlsZXNFbmFibGVkKCk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGVFZGl0KCkKLSAgICB7Ci0gICAgICBJRmlsZVtdIGZpbGVzID0gbmV3IElGaWxlWzFdOwotICAgICAgZmlsZXNbMF0gPSAoSUZpbGUpdGFyZ2V0RmlsZVJlc291cmNlXzsKLSAgICAgIElTdGF0dXMgc3RhdHVzID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnZhbGlkYXRlRWRpdChmaWxlcyxudWxsKTsKLSAgICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSBjb250cm9sbGVyXy5nZXRDdXJyZW50UGVyc3BlY3RpdmUoKS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHN0YXR1cy5nZXRNZXNzYWdlKCkpOwotICAgICAgcmV0dXJuIHN0YXR1cy5pc09LKCk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gcnVuKCkgewotICAgICAgICBNZXNzYWdlUXVldWUgbXNnUXVldWUgPSBjb250cm9sbGVyXy5nZXRDdXJyZW50UGVyc3BlY3RpdmUoKS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICAgICAgaWYgKHByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuSU1QT1JUX0ZJTEUpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uIGFjdGlvbiA9IG5ld0ltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbigpOwotICAgICAgICAgICAgICAgIGFjdGlvbi5ydW4oKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgZGVmYXVsdEZpbGVOYW1lID0gYWN0aW9uLmdldERlZmF1bHRGaWxlTmFtZSgpOwotICAgICAgICAgICAgICAgIGlmICghYWN0aW9uLndyaXRlKGdldE91dHB1dFN0cmVhbShkZWZhdWx0RmlsZU5hbWUpKSkgewotICAgICAgICAgICAgICAgICAgICBtc2dRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9XUklUSU5HX1RFTVBfRklMRV9UT19GUyIpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpbXBvcnRUZW1wRmlsZVRvV2ViUHJvamVjdChkZWZhdWx0RmlsZU5hbWUpOwotICAgICAgICAgICAgICAgIFN0cmluZyBpbXBvcnRlZEZpbGVOYW1lID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLklNUE9SVEVEX0ZJTEVfTkFNRSk7Ci0gICAgICAgICAgICAgICAgbXNnUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfSU5GT19JTVBPUlRfVE9fV09SS0JFTkNIX1NVQ0NFU1NGVUwiLCBpbXBvcnRlZEZpbGVOYW1lKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGZuZmUpIHsKLSAgICAgICAgICAgICAgICBtc2dRdWV1ZS5hZGRNZXNzYWdlKGZuZmUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkgewotICAgICAgICAgICAgICAgIG1zZ1F1ZXVlLmFkZE1lc3NhZ2UoY2UuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuSU1QT1JUX1RPX1dTSUwpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBwcm9qZWN0TmFtZSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5XT1JLQkVOQ0hfUFJPSkVDVF9OQU1FKTsKLSAgICAgICAgICAgIFN0cmluZyBpbXBvcnRlZFdTSUxGaWxlTmFtZSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5XU0lMX0ZJTEVfTkFNRSk7Ci0gICAgICAgICAgICBTdHJpbmcgd3NkbFVSTCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5JTVBPUlRFRF9XU0RMX1VSTCk7Ci0gICAgICAgICAgICBTdHJpbmdCdWZmZXIgd3NpbFBsYXRmb3JtVVJMID0gbmV3IFN0cmluZ0J1ZmZlcigicGxhdGZvcm06L3Jlc291cmNlLyIpOwotICAgICAgICAgICAgd3NpbFBsYXRmb3JtVVJMLmFwcGVuZChwcm9qZWN0TmFtZSk7Ci0gICAgICAgICAgICB3c2lsUGxhdGZvcm1VUkwuYXBwZW5kKCcvJyk7Ci0gICAgICAgICAgICB3c2lsUGxhdGZvcm1VUkwuYXBwZW5kKGltcG9ydGVkV1NJTEZpbGVOYW1lKTsKLSAgICAgICAgICAgIEFkZFdTRExUb1dTSUxDb21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkV1NETFRvV1NJTENvbW1hbmQoKTsKLSAgICAgICAgICAgIFN0cmluZ1tdIGFyZ3MgPSBuZXcgU3RyaW5nWzVdOwotICAgICAgICAgICAgYXJnc1swXSA9IEFkZFdTRExUb1dTSUxDb21tYW5kLkFSR19XU0lMOwotICAgICAgICAgICAgYXJnc1sxXSA9IHdzaWxQbGF0Zm9ybVVSTC50b1N0cmluZygpOwotICAgICAgICAgICAgYXJnc1syXSA9IEFkZFdTRExUb1dTSUxDb21tYW5kLkFSR19XU0RMOwotICAgICAgICAgICAgYXJnc1szXSA9IHdzZGxVUkw7Ci0gICAgICAgICAgICBhcmdzWzRdID0gQWRkV1NETFRvV1NJTENvbW1hbmQuQVJHX1JFU09MVkVfV1NETDsKLSAgICAgICAgICAgIGNvbW1hbmQuc2V0QXJndW1lbnRzKGFyZ3MpOwotICAgICAgICAgICAgSUVudmlyb25tZW50IGVudiA9IG5ldyBFY2xpcHNlRW52aXJvbm1lbnQobnVsbCwgbnVsbCwgbnVsbCk7Ci0gICAgICAgICAgICBjb21tYW5kLnNldEVudmlyb25tZW50KCBlbnYgKTsKLSAgICAgICAgICAgIGNvbW1hbmQuZXhlY3V0ZSggbnVsbCwgbnVsbCApOwotICAgICAgICAgICAgbXNnUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfSU5GT19JTVBPUlRfU0VSVklDRV9SRUZfVE9fV1NJTF9TVUNDRVNTRlVMIiwgaW1wb3J0ZWRXU0lMRmlsZU5hbWUpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRWYXIoKTsKLSAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRQYWdlKCk7Ci0gICAgcHVibGljIGFic3RyYWN0IEltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbiBuZXdJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24oKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9MYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTNhMzZiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9MYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIuTGF1bmNoV2l6YXJkUnVubmFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLkxhdW5jaFdpemFyZFRhc2s7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uIGV4dGVuZHMgRm9ybUFjdGlvbgotewotICBwdWJsaWMgTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgd2l6YXJkSUQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5XRUJfU0VSVklDRV9XSVpBUkQpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuV0VCX1NFUlZJQ0VfV0laQVJELCB3aXphcmRJRCk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBsYXVuY2hXaXphcmQoU3RyaW5nIHdzZGxVUkwpCi0gIHsKLSAgICBMYXVuY2hXaXphcmRUYXNrIHRhc2sgPSBMYXVuY2hXaXphcmRUYXNrLmdldEluc3RhbmNlKCk7Ci0gICAgaWYgKHRhc2suZ2V0SXNFeGVjdXRpbmcoKSkKLSAgICB7Ci0gICAgICBjb250cm9sbGVyXy5nZXRDdXJyZW50UGVyc3BlY3RpdmUoKS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9XSVpBUkRfQUxSRUFEWV9SVU5OSU5HIikpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpbnQgd2l6YXJkSUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5XRUJfU0VSVklDRV9XSVpBUkQpKTsKLSAgICBMYXVuY2hXaXphcmRSdW5uYWJsZSBydW5uYWJsZTsKLSAgICBpZiAod2l6YXJkSUQgPT0gQWN0aW9uSW5wdXRzLldFQl9TRVJWSUNFX0NMSUVOVF9XSVpBUkQpCi0gICAgICBydW5uYWJsZSA9IG5ldyBMYXVuY2hXaXphcmRSdW5uYWJsZSgib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuY2xpZW50d2l6YXJkIiwgd3NkbFVSTCk7Ci0gICAgZWxzZSBpZiAod2l6YXJkSUQgPT0gQWN0aW9uSW5wdXRzLldFQl9TRVJWSUNFX1NLRUxFVE9OX1dJWkFSRCkKLSAgICAgIHJ1bm5hYmxlID0gbmV3IExhdW5jaFdpemFyZFJ1bm5hYmxlKCJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZCIsIHdzZGxVUkwpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB0YXNrLmNoZWNrQW5kQXN5bmNFeGVjKHJ1bm5hYmxlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFZhcigpOwotCi0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFBhZ2UoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9MaW5rQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvTGlua0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjN2Y2NDRkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9MaW5rQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9uczsKLQotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci0KLS8vIEFic3RyYWN0IGNsYXNzIHJlcHJlc2VudGluZyB0aGUgYWN0aW9uIG9mIGNsaWNraW5nIGEgbGluay4gVGhlc2UgYWN0aW9ucwotLy8gbWF5IGNoYW5nZSB0aGUgaGlzdG9yeSBsaXN0LgotcHVibGljIGFic3RyYWN0IGNsYXNzIExpbmtBY3Rpb24gZXh0ZW5kcyBBY3Rpb24KLXsKLSAgcHJpdmF0ZSBib29sZWFuIGlzQWRkZWRUb0hpc3RvcnlfOwotICBwcml2YXRlIGJvb2xlYW4gaXNTdGFsZUJyZWFkQ3J1bWJfOwotCi0gIHB1YmxpYyBMaW5rQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIGlzQWRkZWRUb0hpc3RvcnlfID0gZmFsc2U7Ci0gICAgaXNTdGFsZUJyZWFkQ3J1bWJfID0gZmFsc2U7Ci0gIH0KLQotICAvLyBEZXRlcm1pbmUgaWYgdGhlIGFjdGlvbiB3YXMgc3VjY2Vzc2Z1bGx5IGFkZGVkIHRvIHRoaXMgaGlzdG9yeSBsaXN0LgotICAvLyBUaGlzIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIHJ1bigpIG1ldGhvZC4KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNBZGRlZFRvSGlzdG9yeSgpCi0gIHsKLSAgICByZXR1cm4gaXNBZGRlZFRvSGlzdG9yeV87Ci0gIH0KLQotICBwcm90ZWN0ZWQgYWJzdHJhY3QgYm9vbGVhbiBwcm9jZXNzTGlua1BhcmFtZXRlcnMoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpOwotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHBvcHVsYXRlUHJvcGVydHlUYWJsZShIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCkKLSAgewotICAgIFN0cmluZyBpc0hpc3RvcnlTdHJpbmcgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuSVNISVNUT1JZKTsKLSAgICBpZiAoaXNIaXN0b3J5U3RyaW5nICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLklTSElTVE9SWSxpc0hpc3RvcnlTdHJpbmcpOwotICAgIHJldHVybiBwcm9jZXNzTGlua1BhcmFtZXRlcnMocmVxdWVzdCk7Ci0gIH0KLQotICAvLyBBZGQgdGhlIGFjdGlvbidzIFVSTCB0byB0aGUgY29udHJvbGxlcidzIGhpc3RvcnkgbGlzdC4KLSAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgYWRkVG9IaXN0b3J5KGludCBwZXJzcGVjdGl2ZUlkLFN0cmluZyB1cmwpCi0gIHsKLSAgICBpZiAoIWlzSGlzdG9yeUFjdGlvbigpKQotICAgICAgaXNBZGRlZFRvSGlzdG9yeV8gPSBjb250cm9sbGVyXy5hZGRUb0hpc3RvcnkocGVyc3BlY3RpdmVJZCx1cmwpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNIaXN0b3J5QWN0aW9uKCkKLSAgewotICAgIHJldHVybiAocHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5JU0hJU1RPUlkpICE9IG51bGwpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0U3RhbGVCcmVhZENydW1iKCkKLSAgewotICAgIGlmIChpc0hpc3RvcnlBY3Rpb24oKSkKLSAgICB7Ci0gICAgICBpc1N0YWxlQnJlYWRDcnVtYl8gPSB0cnVlOwotICAgICAgY29udHJvbGxlcl8ucHJvY2Vzc1N0YWxlQnJlYWRDcnVtYigpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIGlzU3RhbGVCcmVhZENydW1iKCkKLSAgewotICAgIHJldHVybiBpc1N0YWxlQnJlYWRDcnVtYl87Ci0gIH0KLQotICAvLyBDYWxsIHRoaXMgd2hlbiBhIHN0YWxlIGJyZWFkY3J1bWIgaXMgZW5jb3VudGVyZWQgd2hpbGUgdHJhdmVyc2luZyBoaXN0b3J5IGNoYWluLgotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldE5leHRIaXN0b3J5QWN0aW9uTGluaygpCi0gIHsKLSAgICByZXR1cm4gUmV0cmlldmVIaXN0b3J5QWN0aW9uLmdldEFjdGlvbkxpbmsoY29udHJvbGxlcl8uZ2V0SGlzdG9yeURpcmVjdGlvbigpKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL05vZGVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9Ob2RlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiNDRhNjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL05vZGVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9uczsKLQotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgTm9kZUFjdGlvbiBleHRlbmRzIExpbmtBY3Rpb24KLXsKLSAgcHJvdGVjdGVkIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyXzsKLSAgcHJpdmF0ZSBib29sZWFuIHJlcXVpcmVzVHJlZVZpZXdSZWZyZXNoXzsKLSAgcHJpdmF0ZSBib29sZWFuIHJlcXVpcmVzTm9kZVNlbGVjdGlvbl87Ci0gIHByaXZhdGUgYm9vbGVhbiByZXF1aXJlc1ZpZXdTZWxlY3Rpb25fOwotICBwcml2YXRlIGJvb2xlYW4gcmVxdWlyZXNTdGF0dXNVcGRhdGVfOwotCi0gIHB1YmxpYyBOb2RlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcixOb2RlTWFuYWdlciBub2RlTWFuYWdlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIG5vZGVNYW5hZ2VyXyA9IG5vZGVNYW5hZ2VyOwotICAgIHJlcXVpcmVzVHJlZVZpZXdSZWZyZXNoXyA9IGZhbHNlOwotICAgIHJlcXVpcmVzTm9kZVNlbGVjdGlvbl8gPSBmYWxzZTsKLSAgICByZXF1aXJlc1ZpZXdTZWxlY3Rpb25fID0gZmFsc2U7Ci0gICAgcmVxdWlyZXNTdGF0dXNVcGRhdGVfID0gZmFsc2U7Ci0gIH0KLQotICAvLyAuLi5qc3A/bm9kZUlkPS4uLjwmaXNIaXN0b3J5PTE+Ci0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NMaW5rUGFyYW1ldGVycyhIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCkKLSAgewotICAgIFN0cmluZyBub2RlSWRTdHJpbmcgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICAvLyBQZXJmb3JtIGRhdGEgdmFsaWRhdGlvbi4KLSAgICB0cnkKLSAgICB7Ci0gICAgICBJbnRlZ2VyLnBhcnNlSW50KG5vZGVJZFN0cmluZyk7Ci0gICAgfQotICAgIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBWYWxpZGF0aW9uIGZhaWxlZCEKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5OT0RFSUQsbm9kZUlkU3RyaW5nKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCBib29sZWFuIGlzU3RhbGVOb2RlKGludCBub2RlSWQpCi0gIHsKLSAgICByZXR1cm4gKG5vZGVNYW5hZ2VyXy5nZXROb2RlKG5vZGVJZCkgPT0gbnVsbCk7Ci0gIH0KLQotICAvKioKLSAgKiBNYWtlIGEgbm9kZSB2aXNpYmxlLiBBIG5vZGUgaXMgdmlzaWJsZSB3aGVuIGFsbCBvZiBpdHMgYW5jZXN0b3JzIGFyZSBleHBhbmRlZC4KLSAgKiBAcGFyYW0gTm9kZSBUaGUgbm9kZSB0byBiZSBtYWRlIHZpc2libGUuCi0gICogQHJldHVybiBib29sZWFuIEluZGljYXRvciBmb3Igd2hldGhlciBvciBub3QgdGhlIHRyZWUgc3RydWN0dXJlIHdhcyBjaGFuZ2VkIChpLmUuIGV4cGFuZGVkIHRvIHNob3cgdGhlIG5vZGUgaW4gcXVlc3Rpb24pLgotICAqLwotICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBtYWtlTm9kZVZpc2libGUoTm9kZSBub2RlKQotICB7Ci0gICAgcmVxdWlyZXNUcmVlVmlld1JlZnJlc2hfID0gbm9kZS5nZXROb2RlTWFuYWdlcigpLm1ha2VOb2RlVmlzaWJsZShub2RlKTsKLSAgICByZXR1cm4gcmVxdWlyZXNUcmVlVmlld1JlZnJlc2hfOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ha2UgYSBub2RlIHZpc2libGUuIEEgbm9kZSBpcyB2aXNpYmxlIHdoZW4gYWxsIG9mIGl0cyBhbmNlc3RvcnMgYXJlIGV4cGFuZGVkLgotICAgKiBAcGFyYW0gTm9kZSBUaGUgbm9kZSB0byBiZSBtYWRlIHZpc2libGUuCi0gICAqIEByZXR1cm4gYm9vbGVhbiBJbmRpY2F0b3IgZm9yIHdoZXRoZXIgb3Igbm90IHRoZSB0cmVlIHN0cnVjdHVyZSB3YXMgY2hhbmdlZCAoaS5lLiBleHBhbmRlZCB0byBzaG93IHRoZSBub2RlIGluIHF1ZXN0aW9uKS4KLSAgICovCi0gICBwdWJsaWMgZmluYWwgdm9pZCBzZXRUcmVlUmVmcmVzaE5lZWRlZCgpCi0gICB7Ci0gICAgIHJlcXVpcmVzVHJlZVZpZXdSZWZyZXNoXyA9IHRydWU7Ci0gICAgIAotICAgfQotICAKLSAgLyoqCi0gICogU2VsZWN0IGEgbm9kZSB3aXRoIGlkIG5vZGVJZC4KLSAgKiBAcGFyYW0gaW50IFRoZSBpZCBvZiB0aGUgbm9kZSB0byBiZSBzZWxlY3RlZC4KLSAgKi8KLSAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgc2V0U2VsZWN0ZWROb2RlSWQoaW50IG5vZGVJZCkKLSAgewotICAgIGlmIChub2RlTWFuYWdlcl8uZ2V0U2VsZWN0ZWROb2RlSWQoKSAhPSBub2RlSWQpCi0gICAgewotICAgICAgcmVxdWlyZXNOb2RlU2VsZWN0aW9uXyA9IHRydWU7Ci0gICAgICBub2RlTWFuYWdlcl8uc2V0U2VsZWN0ZWROb2RlSWQobm9kZUlkKTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBzZXRTZWxlY3RlZFZpZXdJZChpbnQgdmlld0lkKQotICB7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlcl8uZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgaWYgKHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSAhPSB2aWV3SWQpCi0gICAgewotICAgICAgcmVxdWlyZXNWaWV3U2VsZWN0aW9uXyA9IHRydWU7Ci0gICAgICBzZWxlY3RlZE5vZGUuc2V0Vmlld0lkKHZpZXdJZCk7Ci0gICAgfQotICB9Ci0KLSAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHRoZSB0cmVldmlldyByZXF1aXJlcyByZWxvYWRpbmcgYXMgYSByZXN1bHQgb2YgdGhpcyBhY3Rpb24uCi0gIC8vIFJlbG9hZGluZyBpcyByZXF1aXJlZCB3aGVuIGJyYW5jaGVzIGFyZSBhZGRlZC9yZW1vdmVkLgotICBwdWJsaWMgYm9vbGVhbiByZXF1aXJlc1RyZWVWaWV3UmVmcmVzaCgpCi0gIHsKLSAgICByZXR1cm4gcmVxdWlyZXNUcmVlVmlld1JlZnJlc2hfOwotICB9Ci0KLSAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IGEgbmV3IG5vZGUgaGFzIGJlZW4gc2VsZWN0ZWQgYXMgYSByZXN1bHQgb2YgdGhlIGFjdGlvbi4KLSAgcHVibGljIGJvb2xlYW4gcmVxdWlyZXNOb2RlU2VsZWN0aW9uKCkKLSAgewotICAgIHJldHVybiByZXF1aXJlc05vZGVTZWxlY3Rpb25fOwotICB9Ci0KLSAgLy8gRGV0ZXJtaW5lIGlmIGEgbmV3IHZpZXcgZWxlbWVudCBpcyBzZWxlY3RlZC4KLSAgcHVibGljIGJvb2xlYW4gcmVxdWlyZXNWaWV3U2VsZWN0aW9uKCkKLSAgewotICAgIHJldHVybiByZXF1aXJlc1ZpZXdTZWxlY3Rpb25fOwotICB9Ci0KLSAgLy8gRGV0ZXJtaW5lIGlmIGFueSBzdGF0dXMgbWVzc2FnZXMgYXJvc2UgZnJvbSB0aGlzIGFjdGlvbi4KLSAgcHVibGljIGJvb2xlYW4gcmVxdWlyZXNTdGF0dXNVcGRhdGUoKQotICB7Ci0gICAgcmV0dXJuIHJlcXVpcmVzU3RhdHVzVXBkYXRlXzsKLSAgfQotCi0gIHByb3RlY3RlZCBhYnN0cmFjdCBTdHJpbmcgZ2V0QWN0aW9uTGlua0Zvckhpc3RvcnkoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9PcGVuQ2FsZW5kYXJCcm93c2VyQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvT3BlbkNhbGVuZGFyQnJvd3NlckFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDIyMTE5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9PcGVuQ2FsZW5kYXJCcm93c2VyQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9uczsKLQotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci0KLXB1YmxpYyBjbGFzcyBPcGVuQ2FsZW5kYXJCcm93c2VyQWN0aW9uIGV4dGVuZHMgQWN0aW9uCi17Ci0gIHB1YmxpYyBPcGVuQ2FsZW5kYXJCcm93c2VyQWN0aW9uKCkKLSAgewotICB9Ci0KLSAgLy8gY2FsZW5kYXJfYnJvd3Nlci5qc3A/c2Vzc2lvbklkPS4uLiZjYWxlbmRhclR5cGU9Li4uCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmsoU3RyaW5nIHNlc3Npb25JZCxpbnQgY2FsZW5kYXJUeXBlKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJjYWxlbmRhcl9icm93c2VyLmpzcD8iKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuU0VTU0lPTklEKS5hcHBlbmQoJz0nKS5hcHBlbmQoc2Vzc2lvbklkKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpLmFwcGVuZChBY3Rpb25JbnB1dHMuQ0FMRU5EQVJfVFlQRSkuYXBwZW5kKCc9JykuYXBwZW5kKGNhbGVuZGFyVHlwZSk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGlua0ZvckRhdGUoU3RyaW5nIHNlc3Npb25JZCkKLSAgewotICAgIHJldHVybiBnZXRBY3Rpb25MaW5rKHNlc3Npb25JZCxBY3Rpb25JbnB1dHMuQ0FMRU5EQVJfVFlQRV9EQVRFKTsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGlua0ZvckRhdGVUaW1lKFN0cmluZyBzZXNzaW9uSWQpCi0gIHsKLSAgICByZXR1cm4gZ2V0QWN0aW9uTGluayhzZXNzaW9uSWQsQWN0aW9uSW5wdXRzLkNBTEVOREFSX1RZUEVfREFURVRJTUUpOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rRm9yR1llYXJNb250aChTdHJpbmcgc2Vzc2lvbklkKQotICB7Ci0gICAgcmV0dXJuIGdldEFjdGlvbkxpbmsoc2Vzc2lvbklkLEFjdGlvbklucHV0cy5DQUxFTkRBUl9UWVBFX0dZRUFSTU9OVEgpOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rRm9yR0RheShTdHJpbmcgc2Vzc2lvbklkKQotICB7Ci0gICAgcmV0dXJuIGdldEFjdGlvbkxpbmsoc2Vzc2lvbklkLEFjdGlvbklucHV0cy5DQUxFTkRBUl9UWVBFX0dEQVkpOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rRm9yR01vbnRoRGF5KFN0cmluZyBzZXNzaW9uSWQpCi0gIHsKLSAgICByZXR1cm4gZ2V0QWN0aW9uTGluayhzZXNzaW9uSWQsQWN0aW9uSW5wdXRzLkNBTEVOREFSX1RZUEVfR01PTlRIREFZKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHBvcHVsYXRlUHJvcGVydHlUYWJsZShIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCkKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvT3BlbldTRExCcm93c2VyQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvT3BlbldTRExCcm93c2VyQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwNGNkODAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL09wZW5XU0RMQnJvd3NlckFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotCi1wdWJsaWMgY2xhc3MgT3BlbldTRExCcm93c2VyQWN0aW9uIGV4dGVuZHMgQWN0aW9uCi17Ci0gIHB1YmxpYyBPcGVuV1NETEJyb3dzZXJBY3Rpb24oKQotICB7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rKFN0cmluZyBzZXNzaW9uSWQsaW50IHdzZGxUeXBlKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ3c2RsX2Jyb3dzZXIuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpLmFwcGVuZCgnPScpLmFwcGVuZChzZXNzaW9uSWQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJykuYXBwZW5kKEFjdGlvbklucHV0cy5XU0RMX1RZUEUpLmFwcGVuZCgnPScpLmFwcGVuZCh3c2RsVHlwZSk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmtGb3JTZXJ2aWNlKFN0cmluZyBzZXNzaW9uSWQpCi0gIHsKLSAgICByZXR1cm4gZ2V0QWN0aW9uTGluayhzZXNzaW9uSWQsQWN0aW9uSW5wdXRzLldTRExfVFlQRV9TRVJWSUNFKTsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGlua0ZvclNlcnZpY2VJbnRlcmZhY2UoU3RyaW5nIHNlc3Npb25JZCkKLSAgewotICAgIHJldHVybiBnZXRBY3Rpb25MaW5rKHNlc3Npb25JZCxBY3Rpb25JbnB1dHMuV1NETF9UWVBFX1NFUlZJQ0VfSU5URVJGQUNFKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHBvcHVsYXRlUHJvcGVydHlUYWJsZShIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCkKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvUHJveHlMb2FkUGFnZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL1Byb3h5TG9hZFBhZ2VBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWVlOTMwOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvUHJveHlMb2FkUGFnZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotCi1wdWJsaWMgY2xhc3MgUHJveHlMb2FkUGFnZUFjdGlvbiBleHRlbmRzIEFjdGlvbgotewotICAvLyBHZXQgdGhlIGFjdGlvbiBnaXZlbiBhIHJlbGF0aXZlIHRhcmdldFBhZ2UgVVJMLiBlLmcuICJmb3Jtcy9Mb25nTG9hZGluZ0Zvcm0uanNwIgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rKFN0cmluZyB0YXJnZXRQYWdlKQotICB7Ci0gICAgcmV0dXJuIGdldEFjdGlvbkxpbmsobnVsbCx0YXJnZXRQYWdlKTsKLSAgfQotICAKLSAgLy8gR2V0IHRoZSBhY3Rpb24gZ2l2ZW4gYSBzZXNzaW9uSWQgYW5kIGEgcmVsYXRpdmUgdGFyZ2V0UGFnZSBVUkwuCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmsoU3RyaW5nIHNlc3Npb25JZCxTdHJpbmcgdGFyZ2V0UGFnZSkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigiZm9ybXMvUHJveHlMb2FkUGFnZS5qc3A/Iik7Ci0gICAgaWYgKHNlc3Npb25JZCAhPSBudWxsKQotICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlNFU1NJT05JRCkuYXBwZW5kKCc9JykuYXBwZW5kKHNlc3Npb25JZCkuYXBwZW5kKCcmJyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlRBUkdFVF9QQUdFKS5hcHBlbmQoJz0nKS5hcHBlbmQodGFyZ2V0UGFnZSk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gcG9wdWxhdGVQcm9wZXJ0eVRhYmxlKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0KQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL1Jlc2l6ZUZyYW1lc0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL1Jlc2l6ZUZyYW1lc0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NzcwNTBlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9SZXNpemVGcmFtZXNBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5IVE1MVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBSZXNpemVGcmFtZXNBY3Rpb24gZXh0ZW5kcyBBY3Rpb24KLXsKLSAgcHJvdGVjdGVkIENvbnRyb2xsZXIgY29udHJvbGxlcl87Ci0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgZnJhbWVOYW1lID0gcGFyc2VyLmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuRlJBTUVfTkFNRSk7Ci0gICAgaWYgKGZyYW1lTmFtZSAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5GUkFNRV9OQU1FLGZyYW1lTmFtZSk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBwcm9jZXNzT3RoZXJzKHBhcnNlcik7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBhYnN0cmFjdCBib29sZWFuIHByb2Nlc3NPdGhlcnMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci0gIAotICBwdWJsaWMgUmVzaXplRnJhbWVzQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIGNvbnRyb2xsZXJfID0gY29udHJvbGxlcjsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcG9wdWxhdGVQcm9wZXJ0eVRhYmxlKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0KQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyID0gbmV3IE11bHRpcGFydEZvcm1EYXRhUGFyc2VyKCk7Ci0gICAgICBwYXJzZXIucGFyc2VSZXF1ZXN0KHJlcXVlc3QsSFRNTFV0aWxzLlVURjhfRU5DT0RJTkcpOwotICAgICAgYm9vbGVhbiByZXN1bHQgPSBwcm9jZXNzUGFyc2VkUmVzdWx0cyhwYXJzZXIpOwotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgY2F0Y2ggKE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uIGUpCi0gICAgewotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9SZXRyaWV2ZUhpc3RvcnlBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9SZXRyaWV2ZUhpc3RvcnlBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQ5ZDIyYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvUmV0cmlldmVIaXN0b3J5QWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9uczsKLQotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkJyZWFkQ3J1bWI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci0KLXB1YmxpYyBjbGFzcyBSZXRyaWV2ZUhpc3RvcnlBY3Rpb24gZXh0ZW5kcyBMaW5rQWN0aW9uCi17Ci0gIHByaXZhdGUgQnJlYWRDcnVtYiBicmVhZENydW1iXzsKLQotICBwdWJsaWMgUmV0cmlldmVIaXN0b3J5QWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIGJyZWFkQ3J1bWJfID0gbnVsbDsKLSAgfQotCi0gIC8vIGFjdGlvbnMvUmV0cmlldmVIaXN0b3J5QWN0aW9uLmpzcD9qdW1wPTEgIC0gZm9yd2FyZCAgKEFjdGlvbklucHV0cy5KVU1QX0ZPUldBUkQpCi0gIC8vIGFjdGlvbnMvUmV0cmlldmVIaXN0b3J5QWN0aW9uLmpzcD9qdW1wPS0xIC0gYmFja3dhcmQgKEFjdGlvbklucHV0cy5KVU1QX0JBQ0spCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IGp1bXApCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoImFjdGlvbnMvUmV0cmlldmVIaXN0b3J5QWN0aW9uSlNQLmpzcD8iKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuSlVNUCkuYXBwZW5kKCc9JykuYXBwZW5kKGp1bXApOwotICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBwcm9jZXNzTGlua1BhcmFtZXRlcnMoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpCi0gIHsKLSAgICBTdHJpbmcganVtcFN0cmluZyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5KVU1QKTsKLSAgICAvLyBQZXJmb3JtIGRhdGEgdmFsaWRhdGlvbi4KLSAgICB0cnkKLSAgICB7Ci0gICAgICBJbnRlZ2VyLnBhcnNlSW50KGp1bXBTdHJpbmcpOwotICAgIH0KLSAgICBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gVmFsaWRhdGlvbiBmYWlsZWQhCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuSlVNUCxqdW1wU3RyaW5nKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBpbnQganVtcCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLkpVTVApKTsKLSAgICBzd2l0Y2ggKGp1bXApCi0gICAgewotICAgICAgY2FzZSBBY3Rpb25JbnB1dHMuSlVNUF9GT1JXQVJEOgotICAgICAgICBicmVhZENydW1iXyA9IGNvbnRyb2xsZXJfLmZvcndhcmQoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBjYXNlIEFjdGlvbklucHV0cy5KVU1QX0JBQ0s6Ci0gICAgICAgIGJyZWFkQ3J1bWJfID0gY29udHJvbGxlcl8uYmFjaygpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIEJyZWFkQ3J1bWIgZ2V0QnJlYWRDcnVtYigpCi0gIHsKLSAgICByZXR1cm4gYnJlYWRDcnVtYl87Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9TZWxlY3ROb2RlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvU2VsZWN0Tm9kZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjM4ZTg4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9TZWxlY3ROb2RlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyLklUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyLk5vZGVTZWxlY3Rpb25UcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBTZWxlY3ROb2RlQWN0aW9uIGV4dGVuZHMgTm9kZUFjdGlvbgotewotICBwcm90ZWN0ZWQgTm9kZSBzZWxlY3RlZE5vZGVfOwotCi0gIHB1YmxpYyBTZWxlY3ROb2RlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcixOb2RlTWFuYWdlciBub2RlTWFuYWdlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIsbm9kZU1hbmFnZXIpOwotICAgIHNlbGVjdGVkTm9kZV8gPSBudWxsOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgcGVyZm9ybUJhc2VBY3Rpb24oaW50IG5vZGVJZCkKLSAgewotICAgIHNldFNlbGVjdGVkTm9kZUlkKG5vZGVJZCk7Ci0gICAgc2VsZWN0ZWROb2RlXyA9IG5vZGVNYW5hZ2VyXy5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHBlcmZvcm1FeHRlbmRlZEFjdGlvbigpCi0gIHsKLQkgLy90aGUgZXh0ZW5kZWQgY2xhc3NlcyBjYW4gaW50ZXJqZWN0IGhlcmUgIAotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgaW50IG5vZGVJZCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgIGlmICghaXNTdGFsZU5vZGUobm9kZUlkKSkKLSAgICB7Ci0gICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgbm9kZSBpcyB2aXNpYmxlLgotICAgICAgbWFrZU5vZGVWaXNpYmxlKG5vZGVNYW5hZ2VyXy5nZXROb2RlKG5vZGVJZCkpOwotICAgICAgcGVyZm9ybUJhc2VBY3Rpb24obm9kZUlkKTsKLSAgICAgIHBlcmZvcm1FeHRlbmRlZEFjdGlvbigpOwotICAgICAgYWRkVG9IaXN0b3J5KGdldFBlcnNwZWN0aXZlSWQoKSxnZXRBY3Rpb25MaW5rRm9ySGlzdG9yeSgpKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBzZXRTdGFsZUJyZWFkQ3J1bWIoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgTm9kZSBnZXRTZWxlY3RlZE5vZGUoKQotICB7Ci0gICAgcmV0dXJuIHNlbGVjdGVkTm9kZV87Ci0gIH0KLSAgCi0gIHB1YmxpYyBJVHJhbnNmb3JtZXJbXSBnZXRUcmFuc2Zvcm1lcnMoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBJVHJhbnNmb3JtZXJbXSB7bmV3IE5vZGVTZWxlY3Rpb25UcmFuc2Zvcm1lcihjb250cm9sbGVyXyl9OwotICB9Ci0KLSAgLy8gU2VsZWN0aW5nIGEgbm9kZSBjaGFuZ2VzIHRoZSB0cmVldmlldyBjb250ZW50IGFuZCB0aGUgcHJvcGVydGllcyBjb250YWluZXIuCi0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRWYXIoKTsKLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRUcmVlQ29udGVudFBhZ2UoKTsKLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyVmFyKCk7Ci0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclBhZ2UoKTsKLSAgcHVibGljIGFic3RyYWN0IGludCBnZXRQZXJzcGVjdGl2ZUlkKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvU2VsZWN0Tm9kZVRvb2xBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9TZWxlY3ROb2RlVG9vbEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjZmZmU4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9TZWxlY3ROb2RlVG9vbEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9uczsKLQotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS50cmFuc2Zvcm1lci5DdXJyZW50Tm9kZVNlbGVjdGlvblRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUudHJhbnNmb3JtZXIuSVRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlZpZXdUb29sOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgU2VsZWN0Tm9kZVRvb2xBY3Rpb24gZXh0ZW5kcyBTZWxlY3ROb2RlQWN0aW9uCi17Ci0gIHByb3RlY3RlZCBOb2RlTWFuYWdlciBub2RlTWFuYWdlcl87Ci0gIHByb3RlY3RlZCBUb29sIHNlbGVjdGVkVG9vbF87Ci0KLSAgcHVibGljIFNlbGVjdE5vZGVUb29sQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcixOb2RlTWFuYWdlciBub2RlTWFuYWdlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIsbm9kZU1hbmFnZXIpOwotICAgIG5vZGVNYW5hZ2VyXyA9IG5vZGVNYW5hZ2VyOwotICAgIHNlbGVjdGVkVG9vbF8gPSBudWxsOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIE5vZGVNYW5hZ2VyIGdldE5vZGVNYW5hZ2VyKCkKLSAgewotICAgIHJldHVybiBub2RlTWFuYWdlcl87Ci0gIH0KLQotICAvLyAuLi5qc3A/bm9kZUlkPS4uLiZ0b29sSWQ9Li4uPCZ2aWV3SWQ9Li4uJnZpZXdUb29sSWQ9Li4uPjwmaXNIaXN0b3J5PTE+Ci0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NMaW5rUGFyYW1ldGVycyhIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCkKLSAgewotICAgIGJvb2xlYW4gcmVzdWx0ID0gc3VwZXIucHJvY2Vzc0xpbmtQYXJhbWV0ZXJzKHJlcXVlc3QpOwotICAgIFN0cmluZyB0b29sSWRTdHJpbmcgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuVE9PTElEKTsKLSAgICBTdHJpbmcgdmlld0lkU3RyaW5nID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLlZJRVdJRCk7Ci0gICAgU3RyaW5nIHZpZXdUb29sSWRTdHJpbmcgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuVklFV1RPT0xJRCk7Ci0KLSAgICAvLyBQZXJmb3JtIGRhdGEgdmFsaWRhdGlvbi4KLSAgICB0cnkKLSAgICB7Ci0gICAgICBJbnRlZ2VyLnBhcnNlSW50KHRvb2xJZFN0cmluZyk7Ci0gICAgfQotICAgIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBWYWxpZGF0aW9uIGZhaWxlZC4KLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5UT09MSUQsdG9vbElkU3RyaW5nKTsKLQotICAgIC8vIE9wdGlvbmFsIHByb3BlcnRpZXMKLSAgICB0cnkKLSAgICB7Ci0gICAgICBpbnQgdmlld0lkID0gSW50ZWdlci5wYXJzZUludCh2aWV3SWRTdHJpbmcpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5WSUVXSUQsdmlld0lkU3RyaW5nKTsKLSAgICAgIGlmICh2aWV3SWQgIT0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUKQotICAgICAgewotICAgICAgICBJbnRlZ2VyLnBhcnNlSW50KHZpZXdUb29sSWRTdHJpbmcpOwotICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLlZJRVdUT09MSUQsdmlld1Rvb2xJZFN0cmluZyk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgaW50IG5vZGVJZCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgIGlmICghaXNTdGFsZU5vZGUobm9kZUlkKSkKLSAgICB7Ci0gICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgbm9kZSBpcyB2aXNpYmxlLgotICAgICAgbWFrZU5vZGVWaXNpYmxlKG5vZGVNYW5hZ2VyXy5nZXROb2RlKG5vZGVJZCkpOwotICAgICAgc2V0U2VsZWN0ZWROb2RlSWQobm9kZUlkKTsKLSAgICAgIHNlbGVjdGVkTm9kZV8gPSBub2RlTWFuYWdlcl8uZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgICBpbnQgdG9vbElkID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuVE9PTElEKSk7Ci0gICAgICBUb29sTWFuYWdlciB0b29sTWFuYWdlciA9IHNlbGVjdGVkTm9kZV8uZ2V0VG9vbE1hbmFnZXIoKTsKLSAgICAgIHRvb2xNYW5hZ2VyLnNldFNlbGVjdGVkVG9vbElkKHRvb2xJZCk7Ci0gICAgICBzZWxlY3RlZFRvb2xfID0gdG9vbE1hbmFnZXIuZ2V0U2VsZWN0ZWRUb29sKCk7Ci0gICAgICBTdHJpbmcgdmlld0lkU3RyaW5nID0gKChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5WSUVXSUQpKTsKLSAgICAgIGlmICh2aWV3SWRTdHJpbmcgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgaW50IHZpZXdJZCA9IEludGVnZXIucGFyc2VJbnQodmlld0lkU3RyaW5nKTsKLSAgICAgICAgc2V0U2VsZWN0ZWRWaWV3SWQodmlld0lkKTsKLSAgICAgICAgaWYgKHZpZXdJZCAhPSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgdmlld1Rvb2xJZFN0cmluZyA9ICgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuVklFV1RPT0xJRCkpOwotICAgICAgICAgIFZpZXdUb29sIHZpZXdUb29sID0gKFZpZXdUb29sKXNlbGVjdGVkVG9vbF87Ci0gICAgICAgICAgaWYgKHZpZXdUb29sSWRTdHJpbmcgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgdmlld1Rvb2xJZCA9IEludGVnZXIucGFyc2VJbnQodmlld1Rvb2xJZFN0cmluZyk7Ci0gICAgICAgICAgICBUb29sTWFuYWdlciB2aWV3VG9vbE1hbmFnZXIgPSBzZWxlY3RlZE5vZGVfLmdldFZpZXdUb29sTWFuYWdlcigpOwotICAgICAgICAgICAgaWYgKHZpZXdUb29sTWFuYWdlciA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBpZiAoIWlzSGlzdG9yeUFjdGlvbigpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdmlld1Rvb2xNYW5hZ2VyID0gdmlld1Rvb2wuY3JlYXRlVG9vbE1hbmFnZXIodmlld0lkKTsKLSAgICAgICAgICAgICAgICB2aWV3VG9vbElkID0gdmlld1Rvb2xNYW5hZ2VyLmdldFNlbGVjdGVkVG9vbElkKCk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc2V0U3RhbGVCcmVhZENydW1iKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB2aWV3VG9vbE1hbmFnZXIuc2V0U2VsZWN0ZWRUb29sSWQodmlld1Rvb2xJZCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIHNldFNlbGVjdGVkVmlld0lkKEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCk7Ci0gICAgICBhZGRUb0hpc3RvcnkoZ2V0UGVyc3BlY3RpdmVJZCgpLGdldEFjdGlvbkxpbmtGb3JIaXN0b3J5KCkpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHNldFN0YWxlQnJlYWRDcnVtYigpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBJVHJhbnNmb3JtZXJbXSBnZXRUcmFuc2Zvcm1lcnMoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBJVHJhbnNmb3JtZXJbXSB7bmV3IEN1cnJlbnROb2RlU2VsZWN0aW9uVHJhbnNmb3JtZXIoY29udHJvbGxlcl8pfTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBUb29sIGdldFNlbGVjdGVkVmlld1Rvb2woKQotICB7Ci0gICAgaWYgKHByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuVklFV0lEKSAhPSBudWxsKQotICAgICAgcmV0dXJuIHNlbGVjdGVkTm9kZV8uZ2V0Vmlld1Rvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCk7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgVG9vbCBnZXRTZWxlY3RlZFRvb2woKQotICB7Ci0gICAgcmV0dXJuIHNlbGVjdGVkVG9vbF87Ci0gIH0KLQotICAvLyBTZWxlY3RpbmcgYSBub2RlIHRvb2wgdXBkYXRlcyB0aGUgcHJvcGVydGllcyBjb250ZW50LiBBbHNvLCBpbiB0aGUgZXZlbnQKLSAgLy8gb2YgYSBoaXN0b3J5IHN3aXRjaCwgbm9kZXMgbWF5IG5lZWQgdG8gYmUgc2VsZWN0ZWQgcmVzdWx0aW5nIGluIGNoYW5nZXMgdG8KLSAgLy8gYm90aCB0aGUgdHJlZXZpZXcgY29udGVudCBhbmQgdGhlIHByb3BlcnRpZXMgY29udGFpbmVyLiBUaGVzZSByZXF1aXJlbWVudHMgYXJlCi0gIC8vIGNvdmVyZWQgdGhyb3VnaCB0aGUgYmFzZSBjbGFzcy4KLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGVudFZhcigpOwotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFByb3BlcnRpZXNDb250ZW50UGFnZSgpOwotICBwdWJsaWMgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRWYXIoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRQYWdlKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotICBwdWJsaWMgYWJzdHJhY3QgaW50IGdldFBlcnNwZWN0aXZlSWQoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9TaG93UGVyc3BlY3RpdmVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9TaG93UGVyc3BlY3RpdmVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGE3NGZhMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvU2hvd1BlcnNwZWN0aXZlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9uczsKLQotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuSFRNTFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotCi1wdWJsaWMgY2xhc3MgU2hvd1BlcnNwZWN0aXZlQWN0aW9uIGV4dGVuZHMgTGlua0FjdGlvbgotewotICBwdWJsaWMgU2hvd1BlcnNwZWN0aXZlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgLy8gYWN0aW9ucy9zaG93X3BlcnNwZWN0aXZlLmpzcD9wZXJzcGVjdGl2ZT0wPCZpc0hpc3Rvcnk9MT4gLSBVRERJIChBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfVURESSkKLSAgLy8gYWN0aW9ucy9zaG93X3BlcnNwZWN0aXZlLmpzcD9wZXJzcGVjdGl2ZT0xPCZpc0hpc3Rvcnk9MT4gLSBXU0lMIChBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfV1NJTCkKLSAgLy8gYWN0aW9ucy9zaG93X3BlcnNwZWN0aXZlLmpzcD9wZXJzcGVjdGl2ZT0yPCZpc0hpc3Rvcnk9MT4gLSBXU0RMIChBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfV1NETCkKLSAgLy8gYWN0aW9ucy9zaG93X3BlcnNwZWN0aXZlLmpzcD9wZXJzcGVjdGl2ZT0zPCZpc0hpc3Rvcnk9MT4gLSBGYXZvcml0ZXMgKEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9GQVZPUklURVMpCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5ld1BlcnNwZWN0aXZlLGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigiYWN0aW9ucy9TaG93UGVyc3BlY3RpdmVBY3Rpb25KU1AuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5QRVJTUEVDVElWRSkuYXBwZW5kKCc9JykuYXBwZW5kKG5ld1BlcnNwZWN0aXZlKTsKLSAgICBpZiAoZm9ySGlzdG9yeSkKLSAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJykuYXBwZW5kKEFjdGlvbklucHV0cy5JU0hJU1RPUlkpLmFwcGVuZCgiPTEiKTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzUGFyc2VkUmVzdWx0cyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBmaW5hbCBib29sZWFuIHByb2Nlc3NMaW5rUGFyYW1ldGVycyhIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCkKLSAgewotICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0gICAgU3RyaW5nIHBlcnNwZWN0aXZlU3RyaW5nID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFKTsKLSAgICAvLyBQZXJmb3JtIGRhdGEgdmFsaWRhdGlvbi4KLSAgICB0cnkKLSAgICB7Ci0gICAgICBJbnRlZ2VyLnBhcnNlSW50KHBlcnNwZWN0aXZlU3RyaW5nKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkUscGVyc3BlY3RpdmVTdHJpbmcpOwotICAgICAgTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyID0gbmV3IE11bHRpcGFydEZvcm1EYXRhUGFyc2VyKCk7Ci0gICAgICBwYXJzZXIucGFyc2VSZXF1ZXN0KHJlcXVlc3QsSFRNTFV0aWxzLlVURjhfRU5DT0RJTkcpOwotICAgICAgcmVzdWx0ID0gcHJvY2Vzc1BhcnNlZFJlc3VsdHMocGFyc2VyKTsKLSAgICAgIHJlbW92ZWRQcm9wZXJ0aWVzXy5yZW1vdmVBbGxFbGVtZW50cygpOwotICAgIH0KLSAgICBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gVmFsaWRhdGlvbiBmYWlsZWQhIC0gVGhpcyBzaG91bGQgbm90IGhhcHBlbi4KLSAgICB9Ci0gICAgY2F0Y2ggKE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uIGUpCi0gICAgewotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIGludCBwZXJzcGVjdGl2ZSA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFKSk7Ci0gICAgY29udHJvbGxlcl8uc2V0Q3VycmVudFBlcnNwZWN0aXZlKHBlcnNwZWN0aXZlKTsKLSAgICBhZGRUb0hpc3RvcnkocGVyc3BlY3RpdmUsZ2V0QWN0aW9uTGluayhwZXJzcGVjdGl2ZSx0cnVlKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9Ub2dnbGVOb2RlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvVG9nZ2xlTm9kZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzA1YjQwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9Ub2dnbGVOb2RlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyLklUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyLk5vZGVJZFRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFRvZ2dsZU5vZGVBY3Rpb24gZXh0ZW5kcyBOb2RlQWN0aW9uCi17Ci0gIHByb3RlY3RlZCBOb2RlIHRvZ2dsZWROb2RlXzsKLSAgcHVibGljIFRvZ2dsZU5vZGVBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyLE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcixub2RlTWFuYWdlcik7Ci0gICAgdG9nZ2xlZE5vZGVfID0gbnVsbDsKLSAgfQotCi0gIC8vIFRvZ2dsZSB0aGUgY3VycmVudCBub2RlIGFuZCB1cGRhdGUgdGhlIHNlbGVjdGlvbiBpZmYgdGhlIGN1cnJlbnRseSBzZWxlY3RlZAotICAvLyBpcyBhIHJlbGF0ZWQgZGVzY2VuZGFudCBvZiBhIGNvbGxhcHNlZCBub2RlLgotICAvKioKLSAgKiBUb2dnbGUgdGhlIGN1cnJlbnQgbm9kZSBhbmQgdXBkYXRlIHRoZSBzZWxlY3Rpb24gaWZmIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQKLSAgKiBub2RlIGlzIGEgcmVsYXRlZCBkZXNjZW5kYW50IG9mIHRoZSBjdXJyZW50IG5vZGUgYW5kIHRoZSBjdXJyZW50IG5vZGUgaXMKLSAgKiBub3cgY29sbGFwc2VkIGFzIGEgcmVzdWx0IG9mIHRoaXMgYWN0aW9uLgotICAqCi0gICogQHBhcmFtIGludCBUaGUgbm9kZSBJRCBvZiB0aGUgbm9kZSBmb3Igd2hpY2ggdGhpcyBhY3Rpb24gYXBwbGllcyB0by4KLSAgKiBAcmV0dXJuIGJvb2xlYW4gSW5kaWNhdG9yIG9mIHdoZXRoZXIgb3Igbm90IGEgc2VsZWN0aW9uIGNoYW5nZSB3YXMgbmVjZXNzYXJ5LgotICAqLwotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBwZXJmb3JtQmFzZUFjdGlvbihpbnQgbm9kZUlkKQotICB7Ci0gICAgdG9nZ2xlZE5vZGVfID0gbm9kZU1hbmFnZXJfLmdldE5vZGUobm9kZUlkKTsKLSAgICBub2RlTWFuYWdlcl8uc2V0Rm9jdXNlZE5vZGVJZChub2RlSWQpOwotICAgIHRvZ2dsZWROb2RlXy5zZXRWaXNpYmlsaXR5T2ZDaGlsZHJlbighdG9nZ2xlZE5vZGVfLmlzT3BlbigpKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyXy5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBpZiAoc2VsZWN0ZWROb2RlICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKCFzZWxlY3RlZE5vZGUuaXNWaXNpYmxlKCkpCi0gICAgICB7Ci0gICAgICAgIHNldFNlbGVjdGVkTm9kZUlkKG5vZGVJZCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgaW50IG5vZGVJZCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgIGlmICghaXNTdGFsZU5vZGUobm9kZUlkKSkKLSAgICB7Ci0gICAgICBpZiAocGVyZm9ybUJhc2VBY3Rpb24obm9kZUlkKSkKLSAgICAgIHsKLSAgICAgICAgLy8gU2F2ZSB0aGUgc2VsZWN0aW9uIG9mIHRoZSB0b2dnbGUgbGluayBpbiB0aGUgaGlzdG9yeS4KLSAgICAgICAgYWRkVG9IaXN0b3J5KGdldFBlcnNwZWN0aXZlSWQoKSxnZXRBY3Rpb25MaW5rRm9ySGlzdG9yeSgpKTsKLSAgICAgIH0KLSAgICAgIC8vIERvIG5vdCBzYXZlIHRoZSB0b2dnbGUgaW4gaGlzdG9yeS4KLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBzZXRTdGFsZUJyZWFkQ3J1bWIoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgTm9kZSBnZXRUb2dnbGVkTm9kZSgpCi0gIHsKLSAgICByZXR1cm4gdG9nZ2xlZE5vZGVfOwotICB9Ci0KLSAgcHVibGljIElUcmFuc2Zvcm1lcltdIGdldFRyYW5zZm9ybWVycygpCi0gIHsKLSAgICByZXR1cm4gbmV3IElUcmFuc2Zvcm1lcltdIHtuZXcgTm9kZUlkVHJhbnNmb3JtZXIoY29udHJvbGxlcl8pfTsKLSAgfQotCi0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRWYXIoKTsKLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRUcmVlQ29udGVudFBhZ2UoKTsKLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyVmFyKCk7Ci0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclBhZ2UoKTsKLSAgcHVibGljIGFic3RyYWN0IGludCBnZXRQZXJzcGVjdGl2ZUlkKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvVmFsaWRhdGVFZGl0QWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvVmFsaWRhdGVFZGl0QWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwOTRmNTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL1ZhbGlkYXRlRWRpdEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OwotCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGVFZGl0QWN0aW9uIGV4dGVuZHMgQWN0aW9uCi17Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmsoKQotICB7Ci0gICAgcmV0dXJuICJhY3Rpb25zL1ZhbGlkYXRlRWRpdEFjdGlvbkpTUC5qc3AiOwotICB9Ci0gICAgCi0gIHB1YmxpYyBib29sZWFuIHBvcHVsYXRlUHJvcGVydHlUYWJsZShIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCkKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9XU0RMRmlsZU5hbWVIZWxwZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vYWN0aW9ucy9XU0RMRmlsZU5hbWVIZWxwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzYyNGYyNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvV1NETEZpbGVOYW1lSGVscGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9uczsKLQotcHVibGljIGNsYXNzIFdTRExGaWxlTmFtZUhlbHBlcgotewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgZGVmYXVsdF8gPSAidGVtcC53c2RsIjsKLSAgCi0gIC8qKgotICAqIEdpdmVuIGEgd3NkbCBwYXRoIChmaWxlLCBVUkwgZXRjLiksIGd1ZXNzIGF0IHRoZSBmaWxlIG5hbWUgYnkgbG9va2luZyBmb3IgdGhlIC53c2RsIGV4dGVuc2lvbiBhdCB0aGUgZW5kIG9mIHRoZQotICAqIHBhdGggYW5kIHRoZSBmaWxlIHRoYXQgaXQgYmVsb25ncyB0by4gSWYgdGhpcyBpcyBub3QgcG9zc2libGUsIHJldHVybiB0aGUgZGVmYXVsdCBkZWZpbmVkIGluIHRoaXMgY2xhc3MuCi0gICogQHBhcmFtIFN0cmluZyBUaGUgcGF0aCAoZmlsZSwgVVJMIGV0Yy4pIG9mIHRoaXMgV1NETCBmaWxlLgotICAqIEByZXR1cm4gU3RyaW5nIFRoZSBXU0RMIGZpbGUgbmFtZSBkZXRlcm1pbmVkIGJ5IHRoaXMgcm91dGluZS4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0V1NETEZpbGVOYW1lKFN0cmluZyB3c2RsUGF0aG5hbWUpCi0gIHsKLSAgICBpZiAod3NkbFBhdGhuYW1lICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKHdzZGxQYXRobmFtZS5lbmRzV2l0aCgiLndzZGwiKSkKLSAgICAgIHsKLSAgICAgICAgaW50IGxhc3RTZXBhcmF0b3JQb3MgPSBNYXRoLm1heCh3c2RsUGF0aG5hbWUubGFzdEluZGV4T2YoIi8iKSx3c2RsUGF0aG5hbWUubGFzdEluZGV4T2YoIlxcIikpOwotICAgICAgICBpZiAobGFzdFNlcGFyYXRvclBvcyA+IDApCi0gICAgICAgICAgcmV0dXJuIHdzZGxQYXRobmFtZS5zdWJzdHJpbmcobGFzdFNlcGFyYXRvclBvcysxLHdzZGxQYXRobmFtZS5sZW5ndGgoKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBkZWZhdWx0XzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9hY3Rpb25zL1dyaXRlV1NETFRvV29ya2JlbmNoQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvV3JpdGVXU0RMVG9Xb3JrYmVuY2hBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTEzNjliMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2FjdGlvbnMvV3JpdGVXU0RMVG9Xb3JrYmVuY2hBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKLQotcHVibGljIGNsYXNzIFdyaXRlV1NETFRvV29ya2JlbmNoQWN0aW9uIGV4dGVuZHMgQWN0aW9uCi17Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmsoKQotICB7Ci0gICAgcmV0dXJuICJhY3Rpb25zL1dyaXRlV1NETFRvV29ya2JlbmNoQWN0aW9uSlNQLmpzcCI7Ci0gIH0KLSAgICAKLSAgcHVibGljIGJvb2xlYW4gcG9wdWxhdGVQcm9wZXJ0eVRhYmxlKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0KQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9jb25zdGFudHMvQWN0aW9uSW5wdXRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2NvbnN0YW50cy9BY3Rpb25JbnB1dHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDU2MGNmMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2NvbnN0YW50cy9BY3Rpb25JbnB1dHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50czsKLQotcHVibGljIGNsYXNzIEFjdGlvbklucHV0cwotewotICAvLyBVUkwgcGFybSBmb3IgYWxsIGFjdGlvbnMgd2hpY2ggYXJlIGluIHRoZSBoaXN0b3J5IGxpc3QuCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElTSElTVE9SWSA9ICJpc0hpc3RvcnkiOwotCi0gIC8vIFV0aWxpdHkgY29uc3RhbnQgZm9yIHRyZWUgbm9kZSBpZGVudGlmaWNhdGlvbi4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9ERUlEID0gIm5vZGVJZCI7Ci0KLSAgLy8gVXRpbGl0eSBjb25zdGFudCBmb3IgdG9vbCBpZGVudGlmaWNhdGlvbi4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVE9PTElEID0gInRvb2xJZCI7Ci0KLSAgLy8gVXRpbGl0eSBjb25zdGFudCBmb3IgdmlldyBpZGVudGlmaWNhdGlvbi4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVklFV0lEID0gInZpZXdJZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFZJRVdJRF9ERUZBVUxUID0gLTE7Ci0KLSAgLy8gVXRpbGl0eSBjb25zdGFudCBmb3IgdmlldyB0b29sIGlkZW50aWZpY2F0aW9uLgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBWSUVXVE9PTElEID0gInZpZXdUb29sSWQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWSUVXVE9PTElEX0RFRkFVTFQgPSAtMTsKLQotICAvLyBVdGlsaXR5IGNvbnN0YW50cyBmb3IgdHJhbnNwb3J0IGNsYXNzZXMKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFJBTlNQT1JUX0NMQVNTX05BTUUgPSAib3JnLnVkZGk0ai5UcmFuc3BvcnRDbGFzc05hbWUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUUkFTUE9SVF9DTEFTUyA9ICJvcmcudWRkaTRqLnRyYW5zcG9ydC5BcGFjaGVBeGlzVHJhbnNwb3J0IjsKLSAgLy9wdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBWElTX1RSQU5TUE9SVF9DTEFTUyA9ICJvcmcudWRkaTRqLnRyYW5zcG9ydC5BcGFjaGVBeGlzVHJhbnNwb3J0IjsKLSAgLy9wdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTT0FQX1RSQU5TUE9SVF9DTEFTUyA9ICJvcmcudWRkaTRqLnRyYW5zcG9ydC5BcGFjaGVTT0FQVHJhbnNwb3J0IjsKLQotICAvLyBUb2dnbGVOb2RlQWN0aW9uIGFuZCBpdHMgZGVyaXZhdGl2ZXMuCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE9QRU4gPSAib3BlbiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRU5fTk9ERSA9IDE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENMT1NFX05PREUgPSAwOwotCi0gIC8vIFNob3dQZXJzcGVjdGl2ZUFjdGlvbgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQRVJTUEVDVElWRSA9ICJwZXJzcGVjdGl2ZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBFUlNQRUNUSVZFX1VEREkgPSAwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQRVJTUEVDVElWRV9XU0lMID0gMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUEVSU1BFQ1RJVkVfV1NETCA9IDI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBFUlNQRUNUSVZFX0ZBVk9SSVRFUyA9IDM7Ci0KLSAgLy8gUmV0cmlldmVIaXN0b3J5QWN0aW9uCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEpVTVAgPSAianVtcCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEpVTVBfRk9SV0FSRCA9IDE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEpVTVBfQkFDSyA9IC0xOwotCi0gIC8vIExhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgV0VCX1NFUlZJQ0VfV0laQVJEID0gIndlYlNlcnZpY2VXaXphcmQiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBXRUJfU0VSVklDRV9DTElFTlRfV0laQVJEID0gMDsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgV0VCX1NFUlZJQ0VfU0tFTEVUT05fV0laQVJEID0gMTsKLQotICAvLyBJbXBvcnRUb1dvcmtiZW5jaEFjdGlvbgotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBXT1JLQkVOQ0hfUFJPSkVDVF9OQU1FID0gIndvcmtiZW5jaFByb2plY3ROYW1lIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgSU1QT1JUX0ZJTEUgPSAiaW1wb3J0V1NETCI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIElNUE9SVEVEX0ZJTEVfTkFNRSA9ICJpbXBvcnRlZEZpbGVOYW1lIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgSU1QT1JUX1RPX1dTSUwgPSAiaW1wb3J0VG9XU0lMIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgV1NJTF9GSUxFX05BTUUgPSAiV1NJTEZpbGVOYW1lIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgSU1QT1JURURfV1NETF9VUkwgPSAiaW1wb3J0ZWRXc2RsVXJsIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgSU1QT1JUX0FDVElPTiA9ICJpbXBvcnRBY3Rpb24iOwotCi0gIC8vIFByb3h5TG9hZEFjdGlvbgotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBUQVJHRVRfUEFHRSA9ICJ0YXJnZXRQYWdlIjsKLQotICAvLyBTZXNzaW9uIElEIGZvciBwb3AgdXBzIHdob3NlIGJyb3dzZXJzIGNob29zZSB0byBpZ25vcmUgdGhlIHNlc3Npb24uCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFNFU1NJT05JRCA9ICJzSWQiOwotCi0gIC8vIFdTREwgQnJvd3NlcgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9KRUNUID0gInByb2plY3QiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDQVRFR09SWSA9ICJjYXRlZ29yeSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFdTRExfVFlQRSA9ICJ3c2RsVHlwZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdTRExfVFlQRV9TRVJWSUNFX0lOVEVSRkFDRSA9IDA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdTRExfVFlQRV9TRVJWSUNFID0gMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfV0VCUFJPSkVDVF9XU0RMX1VSTCA9ICJ3ZWJQcm9qZWN0V1NETFVSTCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0ZBVk9SSVRFX1dTRExfVVJMID0gImZhdm9yaXRlV1NETFVSTCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX1dTRExfVVJMID0gIndzZGxVUkwiOwotCi0gIC8vIENhbGVuZGFyIEJyb3dzZXIKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0FMRU5EQVJfVFlQRSA9ICJjYWxlbmRhclR5cGUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDQUxFTkRBUl9UWVBFX0RBVEUgPSAwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDQUxFTkRBUl9UWVBFX0RBVEVUSU1FID0gMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0FMRU5EQVJfVFlQRV9HWUVBUk1PTlRIID0gMjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0FMRU5EQVJfVFlQRV9HREFZID0gMzsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0FMRU5EQVJfVFlQRV9HTU9OVEhEQVkgPSA0OwotCi0gIC8vIFJlc2l6ZUZyYW1lQWN0aW9uCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZSQU1FX05BTUUgPSAiZnJhbWVOYW1lIjsKLQotICAvLyBPdGhlciBBY3Rpb25zCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENVUlJFTlRfVE9PTF9NQU5BR0VSID0gImN1cnJlbnRUb29sTWFuYWdlciI7Ci0gIAotICAvLyBBY3Rpb24gRW5naW5lCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFDVElPTl9FTkdJTkVfU0NFTkFSSU8gPSAiYWN0aW9uRW5naW5lU2NlbmFyaW8iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBQ1RJT05fRU5HSU5FX01PREUgPSAiYWN0aW9uRW5naW5lTW9kZSI7Ci0KLSAgLy8gTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTVVMVElQQVJUX0ZPUk1fREFUQV9QQVJTRVIgPSAibXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIiOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9jb25zdGFudHMvRnJhbWVOYW1lcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9jb25zdGFudHMvRnJhbWVOYW1lcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTg1Mzg3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vY29uc3RhbnRzL0ZyYW1lTmFtZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgRnJhbWVOYW1lcwotewotICAvLyB3c2V4cGxvcmVyLmpzcAotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBXSU5ET1dfTkFNRV9XU0VYUExPUkVSX0pTUCA9ICJ3c2V4cGxvcmVyLmpzcCI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBFUlNQRUNUSVZFX1dPUktBUkVBID0gInBlcnNwZWN0aXZlX3dvcmthcmVhIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUEVSU1BFQ1RJVkVfVE9PTEJBUiA9ICJwZXJzcGVjdGl2ZV90b29sYmFyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUEVSU1BFQ1RJVkVfQ09OVEVOVCA9ICJwZXJzcGVjdGl2ZV9jb250ZW50IjsKLSAgCi0gIC8vIFdTREwgQnJvd3NlcgotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBXU0RMX1RPT0xCQVIgPSAid3NkbF90b29sYmFyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgV1NETF9DT05URU5UID0gIndzZGxfY29udGVudCI7Ci0gIAotICAvLyBDYWxlbmRhciBCcm93c2VyCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIENBTEVOREFSX1RPT0xCQVIgPSAiY2FsZW5kYXJfdG9vbGJhciI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIENBTEVOREFSX0NPTlRFTlQgPSAiY2FsZW5kYXJfY29udGVudCI7ICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vY29uc3RhbnRzL01vZGVsQ29uc3RhbnRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2NvbnN0YW50cy9Nb2RlbENvbnN0YW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTg3ZGQyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vY29uc3RhbnRzL01vZGVsQ29uc3RhbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50czsKLQotcHVibGljIGNsYXNzIE1vZGVsQ29uc3RhbnRzCi17Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFTF9JRCA9ICJyZWxhdGlvbnNoaXBJZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFTF9MT0NBTE5BTUVfU0VQQVJBVE9SID0gIiMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRUxfT1dORVIgPSAib3duZXIiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRUxfQ0hJTERSRU4gPSAiY2hpbGRyZW4iOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9jb25zdGFudHMvVG9vbFR5cGVzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2NvbnN0YW50cy9Ub29sVHlwZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2I5MmNiNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2NvbnN0YW50cy9Ub29sVHlwZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHM7Ci0KLXB1YmxpYyBjbGFzcyBUb29sVHlwZXMKLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBieXRlIEZPUk0gPSAwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgQUNUSU9OID0gMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBieXRlIFZJRVcgPSAyOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9kYXRhbW9kZWwvTGlzdEVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZGF0YW1vZGVsL0xpc3RFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkZThjMjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9kYXRhbW9kZWwvTGlzdEVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLQotcHVibGljIGNsYXNzIExpc3RFbGVtZW50Ci17Ci0gIHByaXZhdGUgaW50IHZpZXdJZF87Ci0gIHByaXZhdGUgT2JqZWN0IG9iamVjdF87Ci0gIC8vIEZvciBzZWFyY2ggcGFyYW1ldGVyczogaW5mbyBvbiB0aGUgTm9kZSBhbmQgVmlld1Rvb2wgaG9sZGluZyB0aGlzIGVsZW1lbnQuCi0gIHByaXZhdGUgaW50IHRhcmdldE5vZGVJZF87Ci0gIHByaXZhdGUgaW50IHRhcmdldFRvb2xJZF87Ci0gIHByaXZhdGUgaW50IHRhcmdldFZpZXdJZF87Ci0KLSAgcHVibGljIExpc3RFbGVtZW50KE9iamVjdCBvYmplY3QpCi0gIHsKLSAgICBvYmplY3RfID0gb2JqZWN0OwotICAgIHZpZXdJZF8gPSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQ7Ci0gICAgdGFyZ2V0Tm9kZUlkXyA9IC0xOwotICAgIHRhcmdldFRvb2xJZF8gPSAtMTsKLSAgICB0YXJnZXRWaWV3SWRfID0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIE9iamVjdCBnZXRPYmplY3QoKQotICB7Ci0gICAgcmV0dXJuIG9iamVjdF87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRWaWV3SWQoaW50IHZpZXdJZCkKLSAgewotICAgIHZpZXdJZF8gPSB2aWV3SWQ7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgaW50IGdldFZpZXdJZCgpCi0gIHsKLSAgICByZXR1cm4gdmlld0lkXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldFRhcmdldFZpZXdUb29sSW5mbyhpbnQgbm9kZUlkLGludCB0b29sSWQsaW50IHZpZXdJZCkKLSAgewotICAgIHRhcmdldE5vZGVJZF8gPSBub2RlSWQ7Ci0gICAgdGFyZ2V0VG9vbElkXyA9IHRvb2xJZDsKLSAgICB0YXJnZXRWaWV3SWRfID0gdmlld0lkOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGludCBnZXRUYXJnZXROb2RlSWQoKQotICB7Ci0gICAgcmV0dXJuIHRhcmdldE5vZGVJZF87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgaW50IGdldFRhcmdldFRvb2xJZCgpCi0gIHsKLSAgICByZXR1cm4gdGFyZ2V0VG9vbElkXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBpbnQgZ2V0VGFyZ2V0Vmlld0lkKCkKLSAgewotICAgIHJldHVybiB0YXJnZXRWaWV3SWRfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICByZXR1cm4gZ2V0T2JqZWN0KCkudG9TdHJpbmcoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9kYXRhbW9kZWwvTGlzdE1hbmFnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZGF0YW1vZGVsL0xpc3RNYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4YTc4YWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9kYXRhbW9kZWwvTGlzdE1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotcHVibGljIGNsYXNzIExpc3RNYW5hZ2VyCi17Ci0gIHByaXZhdGUgaW50IG5leHRWaWV3SWRfOwotICBwcml2YXRlIFZlY3RvciBpdGVtc0xpc3RfOwotICBwcml2YXRlIEhhc2h0YWJsZSBpdGVtc1RhYmxlXzsKLQotICBwdWJsaWMgTGlzdE1hbmFnZXIoKQotICB7Ci0gICAgbmV4dFZpZXdJZF8gPSAwOwotICAgIGl0ZW1zTGlzdF8gPSBuZXcgVmVjdG9yKCk7Ci0gICAgaXRlbXNUYWJsZV8gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIHZvaWQgdXBkYXRlTWFuYWdlcihMaXN0RWxlbWVudCBlbGVtZW50KQotICB7Ci0gICAgaXRlbXNUYWJsZV8ucHV0KFN0cmluZy52YWx1ZU9mKG5leHRWaWV3SWRfKSxlbGVtZW50KTsKLSAgICBlbGVtZW50LnNldFZpZXdJZChuZXh0Vmlld0lkXyk7Ci0gICAgbmV4dFZpZXdJZF8rKzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGFkZChMaXN0RWxlbWVudCBlbGVtZW50KQotICB7Ci0gICAgaXRlbXNMaXN0Xy5hZGRFbGVtZW50KGVsZW1lbnQpOwotICAgIHVwZGF0ZU1hbmFnZXIoZWxlbWVudCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBhZGRXaXRoQ3VycmVudFZpZXdJZChMaXN0RWxlbWVudCBlbGVtZW50KQotICB7Ci0gICAgaXRlbXNMaXN0Xy5hZGRFbGVtZW50KGVsZW1lbnQpOwotICAgIGl0ZW1zVGFibGVfLnB1dChTdHJpbmcudmFsdWVPZihlbGVtZW50LmdldFZpZXdJZCgpKSxlbGVtZW50KTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBMaXN0RWxlbWVudCBlbGVtZW50QXQoaW50IGluZGV4KQotICB7Ci0gICAgcmV0dXJuIChMaXN0RWxlbWVudClpdGVtc0xpc3RfLmVsZW1lbnRBdChpbmRleCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgTGlzdEVsZW1lbnQgZ2V0RWxlbWVudFdpdGhWaWV3SWQoaW50IHZpZXdJZCkKLSAgewotICAgIHJldHVybiAoTGlzdEVsZW1lbnQpaXRlbXNUYWJsZV8uZ2V0KFN0cmluZy52YWx1ZU9mKHZpZXdJZCkpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgcmVtb3ZlRWxlbWVudFdpdGhWaWV3SWQoaW50IHZpZXdJZCkKLSAgewotICAgIGl0ZW1zVGFibGVfLnJlbW92ZShTdHJpbmcudmFsdWVPZih2aWV3SWQpKTsKLSAgICBmb3IgKGludCBpPTA7aTxpdGVtc0xpc3RfLnNpemUoKTtpKyspCi0gICAgewotICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSBlbGVtZW50QXQoaSk7Ci0gICAgICBpZiAobGlzdEVsZW1lbnQuZ2V0Vmlld0lkKCkgPT0gdmlld0lkKQotICAgICAgewotICAgICAgICBpdGVtc0xpc3RfLnJlbW92ZUVsZW1lbnRBdChpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgcmVtb3ZlRWxlbWVudEF0KGludCBpbmRleCkKLSAgewotICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KWVsZW1lbnRBdChpbmRleCk7Ci0gICAgaXRlbXNMaXN0Xy5yZW1vdmVFbGVtZW50QXQoaW5kZXgpOwotICAgIGl0ZW1zVGFibGVfLnJlbW92ZShTdHJpbmcudmFsdWVPZihsaXN0RWxlbWVudC5nZXRWaWV3SWQoKSkpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgaW5zZXJ0RWxlbWVudEF0KExpc3RFbGVtZW50IGVsZW1lbnQsaW50IGluZGV4KQotICB7Ci0gICAgaXRlbXNMaXN0Xy5pbnNlcnRFbGVtZW50QXQoZWxlbWVudCxpbmRleCk7Ci0gICAgdXBkYXRlTWFuYWdlcihlbGVtZW50KTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBFbnVtZXJhdGlvbiBnZXRMaXN0RWxlbWVudHMoKQotICB7Ci0gICAgcmV0dXJuIGl0ZW1zTGlzdF8uZWxlbWVudHMoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGNsZWFyKCkKLSAgewotICAgIGl0ZW1zTGlzdF8ucmVtb3ZlQWxsRWxlbWVudHMoKTsKLSAgICBpdGVtc1RhYmxlXy5jbGVhcigpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIExpc3RNYW5hZ2VyIGNvcHkoTGlzdE1hbmFnZXIgbmV3TGlzdE1hbmFnZXIpCi0gIHsKLSAgICBuZXdMaXN0TWFuYWdlci5jbGVhcigpOwotICAgIGZvciAoaW50IGk9MDtpPGl0ZW1zTGlzdF8uc2l6ZSgpO2krKykKLSAgICB7Ci0gICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudCllbGVtZW50QXQoaSk7Ci0gICAgICBMaXN0RWxlbWVudCBuZXdMaXN0RWxlbWVudCA9IG5ldyBMaXN0RWxlbWVudChsaXN0RWxlbWVudC5nZXRPYmplY3QoKSk7Ci0gICAgICBuZXdMaXN0RWxlbWVudC5zZXRWaWV3SWQobGlzdEVsZW1lbnQuZ2V0Vmlld0lkKCkpOwotICAgICAgbmV3TGlzdEVsZW1lbnQuc2V0VGFyZ2V0Vmlld1Rvb2xJbmZvKGxpc3RFbGVtZW50LmdldFRhcmdldE5vZGVJZCgpLGxpc3RFbGVtZW50LmdldFRhcmdldFRvb2xJZCgpLGxpc3RFbGVtZW50LmdldFRhcmdldFZpZXdJZCgpKTsKLSAgICAgIG5ld0xpc3RNYW5hZ2VyLmFkZFdpdGhDdXJyZW50Vmlld0lkKG5ld0xpc3RFbGVtZW50KTsKLSAgICB9Ci0gICAgbmV3TGlzdE1hbmFnZXIuc2V0TmV4dFZpZXdJZChuZXh0Vmlld0lkXyk7Ci0gICAgcmV0dXJuIG5ld0xpc3RNYW5hZ2VyOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0TmV4dFZpZXdJZChpbnQgbmV4dFZpZXdJZCkKLSAgewotICAgIG5leHRWaWV3SWRfID0gbmV4dFZpZXdJZDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBpbnQgZ2V0TmV4dFZpZXdJZCgpCi0gIHsKLSAgICByZXR1cm4gbmV4dFZpZXdJZF87Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZGF0YW1vZGVsL1RyZWVFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2RhdGFtb2RlbC9UcmVlRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNWQwOTgxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZGF0YW1vZGVsL1RyZWVFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5CYXNpY0VsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLQotcHVibGljIGNsYXNzIFRyZWVFbGVtZW50IGV4dGVuZHMgQmFzaWNFbGVtZW50Ci17Ci0gIHByaXZhdGUgU3RyaW5nIGtleV87Ci0KLSAgcHVibGljIFRyZWVFbGVtZW50KFN0cmluZyBuYW1lLE1vZGVsIG1vZGVsKQotICB7Ci0gICAgc3VwZXIobmFtZSxtb2RlbCk7Ci0gICAga2V5XyA9IG5hbWU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRLZXkoU3RyaW5nIGtleSkKLSAgewotICAgIGtleV8gPSBrZXk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEtleSgpCi0gIHsKLSAgICByZXR1cm4ga2V5XzsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGVxdWFscyhUcmVlRWxlbWVudCBlbGVtZW50KQotICB7Ci0gICAgaWYgKGtleV8gPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4ga2V5Xy5lcXVhbHMoZWxlbWVudC5nZXRLZXkoKSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZW5naW5lL0FjdGlvbkRhdGFQYXJzZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZW5naW5lL0FjdGlvbkRhdGFQYXJzZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTNhZjJiNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS9BY3Rpb25EYXRhUGFyc2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXI7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeTsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5GYWN0b3J5Q29uZmlndXJhdGlvbkVycm9yOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS5jb25zdGFudHMuQWN0aW9uRGF0YUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLmRhdGEuQWN0aW9uRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLmRhdGEuU2NlbmFyaW9EZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUuZGF0YS5UcmFuc2FjdGlvbkRlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLnczYy5kb20uQ0RBVEFTZWN0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkRPTUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLXB1YmxpYyBjbGFzcyBBY3Rpb25EYXRhUGFyc2VyCi17Ci0gIHByaXZhdGUgRG9jdW1lbnQgZG9jOwotCi0gIHB1YmxpYyBTY2VuYXJpb0Rlc2NyaXB0b3IgcGFyc2VTY2VuYXJpbyhFbGVtZW50IGUpCi0gIHsKLSAgICBTY2VuYXJpb0Rlc2NyaXB0b3Igc2NlbmFyaW9EZXNjcmlwdG9yID0gbmV3IFNjZW5hcmlvRGVzY3JpcHRvcigpOwotICAgIE5vZGVMaXN0IHRyYW5zYWN0aW9ucyA9IGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoQWN0aW9uRGF0YUNvbnN0YW50cy5FTEVNRU5UX1RSQU5TQUNUSU9OKTsKLSAgICBUcmFuc2FjdGlvbkRlc2NyaXB0b3JbXSB0cmFuc2FjdGlvbkRlc2NyaXB0b3JzID0gbmV3IFRyYW5zYWN0aW9uRGVzY3JpcHRvclt0cmFuc2FjdGlvbnMuZ2V0TGVuZ3RoKCldOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHJhbnNhY3Rpb25EZXNjcmlwdG9ycy5sZW5ndGg7IGkrKykKLSAgICAgIHRyYW5zYWN0aW9uRGVzY3JpcHRvcnNbaV0gPSBwYXJzZVRyYW5zYWN0aW9uKChFbGVtZW50KSB0cmFuc2FjdGlvbnMuaXRlbShpKSk7Ci0gICAgc2NlbmFyaW9EZXNjcmlwdG9yLnNldFRyYW5zYWN0aW9uRGVzY3JpcHRvcnModHJhbnNhY3Rpb25EZXNjcmlwdG9ycyk7Ci0gICAgcmV0dXJuIHNjZW5hcmlvRGVzY3JpcHRvcjsKLSAgfQotCi0gIHB1YmxpYyBUcmFuc2FjdGlvbkRlc2NyaXB0b3IgcGFyc2VUcmFuc2FjdGlvbihFbGVtZW50IGUpCi0gIHsKLSAgICBUcmFuc2FjdGlvbkRlc2NyaXB0b3IgdHJhbnNhY3Rpb25EZXNjcmlwdG9yID0gbmV3IFRyYW5zYWN0aW9uRGVzY3JpcHRvcigpOwotICAgIE5vZGVMaXN0IGFjdGlvbnMgPSBlLmdldEVsZW1lbnRzQnlUYWdOYW1lKEFjdGlvbkRhdGFDb25zdGFudHMuRUxFTUVOVF9BQ1RJT04pOwotICAgIEFjdGlvbkRlc2NyaXB0b3JbXSBhY3Rpb25EZXNjcmlwdG9ycyA9IG5ldyBBY3Rpb25EZXNjcmlwdG9yW2FjdGlvbnMuZ2V0TGVuZ3RoKCldOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWN0aW9uRGVzY3JpcHRvcnMubGVuZ3RoOyBpKyspCi0gICAgICBhY3Rpb25EZXNjcmlwdG9yc1tpXSA9IHBhcnNlQWN0aW9uKChFbGVtZW50KSBhY3Rpb25zLml0ZW0oaSkpOwotICAgIHRyYW5zYWN0aW9uRGVzY3JpcHRvci5zZXRBY3Rpb25EZXNjcmlwdG9ycyhhY3Rpb25EZXNjcmlwdG9ycyk7Ci0gICAgcmV0dXJuIHRyYW5zYWN0aW9uRGVzY3JpcHRvcjsKLSAgfQotCi0gIHB1YmxpYyBBY3Rpb25EZXNjcmlwdG9yIHBhcnNlQWN0aW9uKEVsZW1lbnQgZSkKLSAgewotICAgIEFjdGlvbkRlc2NyaXB0b3IgYWN0aW9uRGVzY3JpcHRvciA9IG5ldyBBY3Rpb25EZXNjcmlwdG9yKCk7Ci0gICAgYWN0aW9uRGVzY3JpcHRvci5zZXRJZChlLmdldEF0dHJpYnV0ZShBY3Rpb25EYXRhQ29uc3RhbnRzLkFUVFJfSUQpKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBhY3Rpb25EZXNjcmlwdG9yLnNldEF0dGVtcHRzKEludGVnZXIucGFyc2VJbnQoZS5nZXRBdHRyaWJ1dGUoQWN0aW9uRGF0YUNvbnN0YW50cy5BVFRSX0FUVEVNUFRTKSkpOwotICAgIH0KLSAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgewotICAgICAgYWN0aW9uRGVzY3JpcHRvci5zZXRBdHRlbXB0cygxKTsKLSAgICB9Ci0gICAgYWN0aW9uRGVzY3JpcHRvci5zZXRTdGF0dXNJZChlLmdldEF0dHJpYnV0ZShBY3Rpb25EYXRhQ29uc3RhbnRzLkFUVFJfU1RBVFVTX0lEKSk7Ci0gICAgSGFzaHRhYmxlIHByb3BlcnRpZXNUYWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBOb2RlTGlzdCBwcm9wZXJ0aWVzID0gZS5nZXRFbGVtZW50c0J5VGFnTmFtZShBY3Rpb25EYXRhQ29uc3RhbnRzLkVMRU1FTlRfUFJPUEVSVFkpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJvcGVydGllcy5nZXRMZW5ndGgoKTsgaSsrKQotICAgIHsKLSAgICAgIEVsZW1lbnQgcHJvcGVydHkgPSAoRWxlbWVudCkgcHJvcGVydGllcy5pdGVtKGkpOwotICAgICAgU3RyaW5nIG5hbWUgPSBwcm9wZXJ0eS5nZXRBdHRyaWJ1dGUoQWN0aW9uRGF0YUNvbnN0YW50cy5BVFRSX05BTUUpOwotICAgICAgTm9kZUxpc3QgdmFsdWVMaXN0ID0gcHJvcGVydHkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoQWN0aW9uRGF0YUNvbnN0YW50cy5FTEVNRU5UX1ZBTFVFKTsKLSAgICAgIGlmICh2YWx1ZUxpc3QuZ2V0TGVuZ3RoKCkgPiAxKQotICAgICAgewotICAgICAgICBTdHJpbmdbXSB2YWx1ZXMgPSBuZXcgU3RyaW5nW3ZhbHVlTGlzdC5nZXRMZW5ndGgoKV07Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgdmFsdWVzLmxlbmd0aDsgaisrKQotICAgICAgICB7Ci0gICAgICAgICAgRWxlbWVudCB2YWx1ZSA9IChFbGVtZW50KSB2YWx1ZUxpc3QuaXRlbShqKTsKLSAgICAgICAgICBOb2RlIHRleHROb2RlID0gdmFsdWUuZ2V0Rmlyc3RDaGlsZCgpOwotICAgICAgICAgIHZhbHVlc1tqXSA9ICh0ZXh0Tm9kZSAhPSBudWxsKSA/IHRleHROb2RlLmdldE5vZGVWYWx1ZSgpLnRyaW0oKSA6ICIiOwotICAgICAgICB9Ci0gICAgICAgIHByb3BlcnRpZXNUYWJsZS5wdXQobmFtZSwgdmFsdWVzKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgTm9kZSB0ZXh0Tm9kZSA9ICgoRWxlbWVudCkgdmFsdWVMaXN0Lml0ZW0oMCkpLmdldEZpcnN0Q2hpbGQoKTsKLSAgICAgICAgcHJvcGVydGllc1RhYmxlLnB1dChuYW1lLCAodGV4dE5vZGUgIT0gbnVsbCkgPyB0ZXh0Tm9kZS5nZXROb2RlVmFsdWUoKS50cmltKCkgOiAiIik7Ci0gICAgICB9Ci0gICAgfQotICAgIGFjdGlvbkRlc2NyaXB0b3Iuc2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzVGFibGUpOwotICAgIE5vZGVMaXN0IHN0YXR1c0xpc3QgPSBlLmdldEVsZW1lbnRzQnlUYWdOYW1lKEFjdGlvbkRhdGFDb25zdGFudHMuRUxFTUVOVF9TVEFUVVMpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RhdHVzTGlzdC5nZXRMZW5ndGgoKTsgaSsrKQotICAgIHsKLSAgICAgIEVsZW1lbnQgc3RhdHVzID0gKEVsZW1lbnQpc3RhdHVzTGlzdC5pdGVtKGkpOwotICAgICAgQ0RBVEFTZWN0aW9uIGNEYXRhID0gKENEQVRBU2VjdGlvbilzdGF0dXMuZ2V0Rmlyc3RDaGlsZCgpOwotICAgICAgYWN0aW9uRGVzY3JpcHRvci5hZGRTdGF0dXMoY0RhdGEuZ2V0RGF0YSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGFjdGlvbkRlc2NyaXB0b3I7Ci0gIH0KLQotICBwdWJsaWMgRWxlbWVudCB0b0VsZW1lbnQoU2NlbmFyaW9EZXNjcmlwdG9yIHNjZW5hcmlvRGVzY3JpcHRvcikKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIERvY3VtZW50IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTsKLSAgICAgIEVsZW1lbnQgc2NlbmFyaW9FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChBY3Rpb25EYXRhQ29uc3RhbnRzLkVMRU1FTlRfU0NFTkFSSU8pOwotICAgICAgVHJhbnNhY3Rpb25EZXNjcmlwdG9yW10gdHJhbnNhY3Rpb25EZXNjcmlwdG9ycyA9IHNjZW5hcmlvRGVzY3JpcHRvci5nZXRUcmFuc2FjdGlvbkRlc2NyaXB0b3JzKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRyYW5zYWN0aW9uRGVzY3JpcHRvcnMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIEVsZW1lbnQgdHJhbnNhY3Rpb25FbGVtZW50ID0gdG9FbGVtZW50KHRyYW5zYWN0aW9uRGVzY3JpcHRvcnNbaV0pOwotICAgICAgICBpZiAodHJhbnNhY3Rpb25FbGVtZW50ICE9IG51bGwpCi0gICAgICAgICAgc2NlbmFyaW9FbGVtZW50LmFwcGVuZENoaWxkKHRyYW5zYWN0aW9uRWxlbWVudCk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gc2NlbmFyaW9FbGVtZW50OwotICAgIH0KLSAgICBjYXRjaCAoRE9NRXhjZXB0aW9uIGRvbWUpCi0gICAgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIEVsZW1lbnQgdG9FbGVtZW50KFRyYW5zYWN0aW9uRGVzY3JpcHRvciB0cmFuc2FjdGlvbkRlc2NyaXB0b3IpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBEb2N1bWVudCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7Ci0gICAgICBFbGVtZW50IHRyYW5zYWN0aW9uRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoQWN0aW9uRGF0YUNvbnN0YW50cy5FTEVNRU5UX1RSQU5TQUNUSU9OKTsKLSAgICAgIEFjdGlvbkRlc2NyaXB0b3JbXSBhY3Rpb25EZXNjcmlwdG9ycyA9IHRyYW5zYWN0aW9uRGVzY3JpcHRvci5nZXRBY3Rpb25EZXNjcmlwdG9ycygpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhY3Rpb25EZXNjcmlwdG9ycy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgRWxlbWVudCBhY3Rpb25FbGVtZW50ID0gdG9FbGVtZW50KGFjdGlvbkRlc2NyaXB0b3JzW2ldKTsKLSAgICAgICAgaWYgKGFjdGlvbkVsZW1lbnQgIT0gbnVsbCkKLSAgICAgICAgICB0cmFuc2FjdGlvbkVsZW1lbnQuYXBwZW5kQ2hpbGQoYWN0aW9uRWxlbWVudCk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdHJhbnNhY3Rpb25FbGVtZW50OwotICAgIH0KLSAgICBjYXRjaCAoRE9NRXhjZXB0aW9uIGRvbWUpCi0gICAgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIEVsZW1lbnQgdG9FbGVtZW50KEFjdGlvbkRlc2NyaXB0b3IgYWN0aW9uRGVzY3JpcHRvcikKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIERvY3VtZW50IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTsKLSAgICAgIEVsZW1lbnQgYWN0aW9uRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoQWN0aW9uRGF0YUNvbnN0YW50cy5FTEVNRU5UX0FDVElPTik7Ci0gICAgICBhY3Rpb25FbGVtZW50LnNldEF0dHJpYnV0ZShBY3Rpb25EYXRhQ29uc3RhbnRzLkFUVFJfSUQsIGFjdGlvbkRlc2NyaXB0b3IuZ2V0SWQoKSk7Ci0gICAgICBhY3Rpb25FbGVtZW50LnNldEF0dHJpYnV0ZShBY3Rpb25EYXRhQ29uc3RhbnRzLkFUVFJfQVRURU1QVFMsIFN0cmluZy52YWx1ZU9mKGFjdGlvbkRlc2NyaXB0b3IuZ2V0QXR0ZW1wdHMoKSkpOwotICAgICAgU3RyaW5nIHN0YXR1c0lkID0gYWN0aW9uRGVzY3JpcHRvci5nZXRTdGF0dXNJZCgpOwotICAgICAgaWYgKHN0YXR1c0lkICE9IG51bGwpCi0gICAgICAgIGFjdGlvbkVsZW1lbnQuc2V0QXR0cmlidXRlKEFjdGlvbkRhdGFDb25zdGFudHMuQVRUUl9TVEFUVVNfSUQsIHN0YXR1c0lkKTsKLSAgICAgIEhhc2h0YWJsZSBwcm9wZXJ0aWVzID0gYWN0aW9uRGVzY3JpcHRvci5nZXRQcm9wZXJ0aWVzKCk7Ci0gICAgICBpZiAocHJvcGVydGllcyAhPSBudWxsKQotICAgICAgewotICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gcHJvcGVydGllcy5rZXlTZXQoKS5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgICAgICB7Ci0gICAgICAgICAgT2JqZWN0IGtleSA9IGl0Lm5leHQoKTsKLSAgICAgICAgICBPYmplY3QgdmFsdWUgPSBwcm9wZXJ0aWVzLmdldChrZXkpOwotICAgICAgICAgIE9iamVjdFtdIHZhbHVlczsKLSAgICAgICAgICBpZiAodmFsdWUuZ2V0Q2xhc3MoKS5pc0FycmF5KCkpCi0gICAgICAgICAgICB2YWx1ZXMgPSAoT2JqZWN0W10pdmFsdWU7Ci0gICAgICAgICAgZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBMaXN0KQotICAgICAgICAgICAgdmFsdWVzID0gKChMaXN0KXZhbHVlKS50b0FycmF5KCk7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFsdWVzID0gbmV3IE9iamVjdFtdIHt2YWx1ZX07Ci0gICAgICAgICAgYm9vbGVhbiBpc0FkZGVkID0gZmFsc2U7Ci0gICAgICAgICAgRWxlbWVudCBwcm9wZXJ0eUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KEFjdGlvbkRhdGFDb25zdGFudHMuRUxFTUVOVF9QUk9QRVJUWSk7Ci0gICAgICAgICAgcHJvcGVydHlFbGVtZW50LnNldEF0dHJpYnV0ZShBY3Rpb25EYXRhQ29uc3RhbnRzLkFUVFJfTkFNRSwga2V5LnRvU3RyaW5nKCkpOwotICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZXNbaV0gaW5zdGFuY2VvZiBTdHJpbmcpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEVsZW1lbnQgdmFsdWVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChBY3Rpb25EYXRhQ29uc3RhbnRzLkVMRU1FTlRfVkFMVUUpOwotICAgICAgICAgICAgICB2YWx1ZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodmFsdWVzW2ldLnRvU3RyaW5nKCkpKTsKLSAgICAgICAgICAgICAgcHJvcGVydHlFbGVtZW50LmFwcGVuZENoaWxkKHZhbHVlRWxlbWVudCk7Ci0gICAgICAgICAgICAgIGlzQWRkZWQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoaXNBZGRlZCkKLSAgICAgICAgICAgIGFjdGlvbkVsZW1lbnQuYXBwZW5kQ2hpbGQocHJvcGVydHlFbGVtZW50KTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgTGlzdCBzdGF0dXMgPSBhY3Rpb25EZXNjcmlwdG9yLmdldFN0YXR1cygpOwotICAgICAgaWYgKHN0YXR1cyAhPSBudWxsKQotICAgICAgewotICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gc3RhdHVzLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgICAgIHsKLSAgICAgICAgICBFbGVtZW50IHN0YXR1c0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KEFjdGlvbkRhdGFDb25zdGFudHMuRUxFTUVOVF9TVEFUVVMpOwotICAgICAgICAgIENEQVRBU2VjdGlvbiBjRGF0YSA9IGRvY3VtZW50LmNyZWF0ZUNEQVRBU2VjdGlvbihpdC5uZXh0KCkudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgc3RhdHVzRWxlbWVudC5hcHBlbmRDaGlsZChjRGF0YSk7Ci0gICAgICAgICAgYWN0aW9uRWxlbWVudC5hcHBlbmRDaGlsZChzdGF0dXNFbGVtZW50KTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgcmV0dXJuIGFjdGlvbkVsZW1lbnQ7Ci0gICAgfQotICAgIGNhdGNoIChET01FeGNlcHRpb24gZG9tZSkKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIERvY3VtZW50IGdldERvY3VtZW50KCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIGlmIChkb2MgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBmYWN0b3J5ID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotICAgICAgICBEb2N1bWVudEJ1aWxkZXIgYnVpbGRlciA9IGZhY3RvcnkubmV3RG9jdW1lbnRCdWlsZGVyKCk7Ci0gICAgICAgIGRvYyA9IGJ1aWxkZXIubmV3RG9jdW1lbnQoKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBkb2M7Ci0gICAgfQotICAgIGNhdGNoIChGYWN0b3J5Q29uZmlndXJhdGlvbkVycm9yIGZjZSkKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gICAgY2F0Y2ggKFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gcGNlKQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9lbmdpbmUvQWN0aW9uRW5naW5lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS9BY3Rpb25FbmdpbmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjAyZTJkYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS9BY3Rpb25FbmdpbmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZTsKLQotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuQ29uc3RydWN0b3I7Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5TaG93UGVyc3BlY3RpdmVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS5jb25zdGFudHMuQWN0aW9uRGF0YUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLmRhdGEuQWN0aW9uRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLmRhdGEuU2NlbmFyaW9EZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUuZGF0YS5UcmFuc2FjdGlvbkRlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS50cmFuc2Zvcm1lci5JVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci0KLXB1YmxpYyBjbGFzcyBBY3Rpb25FbmdpbmUKLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBieXRlIE1PREVfRElTQUJMRUQgPSAweDA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgYnl0ZSBNT0RFX1NUT1AgPSAweDE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgYnl0ZSBNT0RFX1JFQ09SRCA9IDB4MjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBieXRlIE1PREVfUExBWSA9IDB4MzsKLQotICBwcml2YXRlIENvbnRyb2xsZXIgY29udHJvbGxlcjsKLSAgcHJpdmF0ZSBieXRlIG1vZGU7Ci0gIHByaXZhdGUgVmVjdG9yIGFjdGlvbkRlc2NyaXB0b3JzOwotCi0gIHB1YmxpYyBBY3Rpb25FbmdpbmUoQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgdGhpcy5jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICBtb2RlID0gTU9ERV9ESVNBQkxFRDsKLSAgICBhY3Rpb25EZXNjcmlwdG9ycyA9IG5ldyBWZWN0b3IoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGV4ZWN1dGVTY2VuYXJpbyhTY2VuYXJpb0Rlc2NyaXB0b3Igc2NlbmFyaW9EZXNjcmlwdG9yKQotICB7Ci0gICAgVHJhbnNhY3Rpb25EZXNjcmlwdG9yW10gdHJhbnNhY3Rpb25EZXNjcmlwdG9ycyA9IHNjZW5hcmlvRGVzY3JpcHRvci5nZXRUcmFuc2FjdGlvbkRlc2NyaXB0b3JzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0cmFuc2FjdGlvbkRlc2NyaXB0b3JzLmxlbmd0aDsgaSsrKQotICAgICAgZXhlY3V0ZVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uRGVzY3JpcHRvcnNbaV0pOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZXhlY3V0ZVRyYW5zYWN0aW9uKFRyYW5zYWN0aW9uRGVzY3JpcHRvciB0cmFuc2FjdGlvbkRlc2NyaXB0b3IpCi0gIHsKLSAgICBib29sZWFuIHJlc3VsdCA9IHRydWU7Ci0gICAgQWN0aW9uRGVzY3JpcHRvcltdIGFjdGlvbkRlc2NyaXB0b3JzID0gdHJhbnNhY3Rpb25EZXNjcmlwdG9yLmdldEFjdGlvbkRlc2NyaXB0b3JzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhY3Rpb25EZXNjcmlwdG9ycy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpZiAocmVzdWx0KQotICAgICAgewotICAgICAgICBpZiAoIWV4ZWN1dGVBY3Rpb24oYWN0aW9uRGVzY3JpcHRvcnNbaV0pKQotICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICBhY3Rpb25EZXNjcmlwdG9yc1tpXS5zZXRTdGF0dXNJZChBY3Rpb25EYXRhQ29uc3RhbnRzLlZBTFVFX1NUQVRVU19JRF9VTkFUVEVNUFRFRCk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBleGVjdXRlQWN0aW9uKEFjdGlvbkRlc2NyaXB0b3IgYWN0aW9uRGVzY3JpcHRvcikKLSAgewotICAgIGludCBhdHRlbXB0cyA9IGFjdGlvbkRlc2NyaXB0b3IuZ2V0QXR0ZW1wdHMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGF0dGVtcHRzOyBpKyspCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIENsYXNzIGNsYXNzQWN0aW9uID0gQ2xhc3MuZm9yTmFtZShhY3Rpb25EZXNjcmlwdG9yLmdldElkKCkpOwotICAgICAgICBpZiAoQWN0aW9uLmNsYXNzLmlzQXNzaWduYWJsZUZyb20oY2xhc3NBY3Rpb24pKQotICAgICAgICB7Ci0gICAgICAgICAgQWN0aW9uIGFjdGlvbiA9IChBY3Rpb24pIG5ld0luc3RhbmNlKGNsYXNzQWN0aW9uKTsKLSAgICAgICAgICBpZiAoYWN0aW9uICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgSGFzaHRhYmxlIHByb3BlcnRpZXMgPSBhY3Rpb25EZXNjcmlwdG9yLmdldFByb3BlcnRpZXMoKTsKLSAgICAgICAgICAgIElUcmFuc2Zvcm1lcltdIHRyYW5zZm9ybWVycyA9IGFjdGlvbi5nZXRUcmFuc2Zvcm1lcnMoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgdHJhbnNmb3JtZXJzLmxlbmd0aDsgaisrKQotICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0gdHJhbnNmb3JtZXJzW2pdLmRlTm9ybWFsaXplKHByb3BlcnRpZXMpOwotICAgICAgICAgICAgYWN0aW9uLnNldFByb3BlcnR5VGFibGUocHJvcGVydGllcyk7Ci0gICAgICAgICAgICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5ydW4oKTsKLSAgICAgICAgICAgIC8vIFRPRE8gYWN0aW9uRGVzY3JpcHRvci5hZGRTdGF0dXMoYWN0aW9uLmdldFN0YXR1cygpKTsKLSAgICAgICAgICAgIGlmIChhY3Rpb25SZXN1bHQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGFjdGlvbkRlc2NyaXB0b3Iuc2V0U3RhdHVzSWQoQWN0aW9uRGF0YUNvbnN0YW50cy5WQUxVRV9TVEFUVVNfSURfUEFTU0VEKTsKLSAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRocm93IG5ldyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uKGFjdGlvbkRlc2NyaXB0b3IuZ2V0SWQoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGNuZmUpCi0gICAgICB7Ci0gICAgICAgIGNuZmUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICAgICAgY25mZS5wcmludFN0YWNrVHJhY2UobmV3IFByaW50V3JpdGVyKHN3KSk7Ci0gICAgICAgIGFjdGlvbkRlc2NyaXB0b3IuYWRkU3RhdHVzKHN3LmdldEJ1ZmZlcigpLnRvU3RyaW5nKCkpOwotICAgICAgfQotICAgICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgICAgewotICAgICAgICB0LnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgICAgIHQucHJpbnRTdGFja1RyYWNlKG5ldyBQcmludFdyaXRlcihzdykpOwotICAgICAgICBhY3Rpb25EZXNjcmlwdG9yLmFkZFN0YXR1cyhzdy5nZXRCdWZmZXIoKS50b1N0cmluZygpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgYWN0aW9uRGVzY3JpcHRvci5zZXRTdGF0dXNJZChBY3Rpb25EYXRhQ29uc3RhbnRzLlZBTFVFX1NUQVRVU19JRF9GQUlMRUQpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHByaXZhdGUgU2NlbmFyaW9EZXNjcmlwdG9yIG5ld1NjZW5hcmlvRGVzY3JpcHRvcigpCi0gIHsKLSAgICByZXR1cm4gbmV3IFNjZW5hcmlvRGVzY3JpcHRvcigpOwotICB9Ci0KLSAgcHJpdmF0ZSBUcmFuc2FjdGlvbkRlc2NyaXB0b3IgbmV3VHJhbnNhY3Rpb25EZXNjcmlwdG9yKCkKLSAgewotICAgIHJldHVybiBuZXcgVHJhbnNhY3Rpb25EZXNjcmlwdG9yKCk7Ci0gIH0KLQotICBwcml2YXRlIEFjdGlvbkRlc2NyaXB0b3IgbmV3QWN0aW9uRGVzY3JpcHRvcihBY3Rpb24gYWN0aW9uKQotICB7Ci0gICAgQWN0aW9uRGVzY3JpcHRvciBhY3Rpb25EZXNjcmlwdG9yID0gbmV3IEFjdGlvbkRlc2NyaXB0b3IoKTsKLSAgICBhY3Rpb25EZXNjcmlwdG9yLnNldElkKGFjdGlvbi5nZXRDbGFzcygpLmdldE5hbWUoKSk7Ci0gICAgSGFzaHRhYmxlIHByb3BlcnRpZXMgPSBuZXcgSGFzaHRhYmxlKGFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCkpOwotICAgIElUcmFuc2Zvcm1lcltdIHRyYW5zZm9ybWVycyA9IGFjdGlvbi5nZXRUcmFuc2Zvcm1lcnMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHRyYW5zZm9ybWVycy5sZW5ndGg7IGkrKykKLSAgICAgIHByb3BlcnRpZXMgPSB0cmFuc2Zvcm1lcnNbaV0ubm9ybWFsaXplKHByb3BlcnRpZXMpOwotICAgIGFjdGlvbkRlc2NyaXB0b3Iuc2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzKTsKLSAgICByZXR1cm4gYWN0aW9uRGVzY3JpcHRvcjsKLSAgfQotCi0gIHByaXZhdGUgT2JqZWN0IG5ld0luc3RhbmNlKENsYXNzIGMpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBpbnN0YW50aWF0ZXMgdGhlIGFjdGlvbiB1c2luZyB0aGUgY29uc3RydWN0b3IgdGhhdCB0YWtlcyBpbiBhCi0gICAgICAvLyBjb250cm9sbGVyIG9iamVjdAotICAgICAgQ29uc3RydWN0b3IgY29uc3RydWN0b3IgPSBjLmdldENvbnN0cnVjdG9yKG5ldyBDbGFzc1tde0NvbnRyb2xsZXIuY2xhc3N9KTsKLSAgICAgIHJldHVybiBjb25zdHJ1Y3Rvci5uZXdJbnN0YW5jZShuZXcgT2JqZWN0W117Y29udHJvbGxlcn0pOwotICAgIH0KLSAgICBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIG5zbWUpCi0gICAgewotICAgIH0KLSAgICBjYXRjaCAoSW5zdGFudGlhdGlvbkV4Y2VwdGlvbiBpZSkKLSAgICB7Ci0gICAgfQotICAgIGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGlhZSkKLSAgICB7Ci0gICAgfQotICAgIGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl0ZSkKLSAgICB7Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICB7Ci0gICAgfQotICAgIE9iamVjdCBpbnN0YW5jZSA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gaW5zdGFudGlhdGVzIHRoZSBhY3Rpb24gdXNpbmcgdGhlIGRlZmF1bHQgY29uc3RydWN0b3IKLSAgICAgIENvbnN0cnVjdG9yIGNvbnN0cnVjdG9yID0gYy5nZXRDb25zdHJ1Y3RvcihuZXcgQ2xhc3NbMF0pOwotICAgICAgaW5zdGFuY2UgPSBjb25zdHJ1Y3Rvci5uZXdJbnN0YW5jZShuZXcgT2JqZWN0WzBdKTsKLSAgICAgIE1ldGhvZCBtZXRob2QgPSBjLmdldE1ldGhvZCgic2V0Q29udHJvbGxlciIsIG5ldyBDbGFzc1tde0NvbnRyb2xsZXIuY2xhc3N9KTsKLSAgICAgIG1ldGhvZC5pbnZva2UoaW5zdGFuY2UsIG5ldyBPYmplY3RbXXtjb250cm9sbGVyfSk7Ci0gICAgfQotICAgIGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gbnNtZSkKLSAgICB7Ci0gICAgfQotICAgIGNhdGNoIChJbnN0YW50aWF0aW9uRXhjZXB0aW9uIGllKQotICAgIHsKLSAgICB9Ci0gICAgY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gaWFlKQotICAgIHsKLSAgICB9Ci0gICAgY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpYWUpCi0gICAgewotICAgIH0KLSAgICBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBpdGUpCi0gICAgewotICAgIH0KLSAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgewotICAgIH0KLSAgICByZXR1cm4gaW5zdGFuY2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyBieXRlIGdldE1vZGUoKQotICB7Ci0gICAgcmV0dXJuIG1vZGU7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldE1vZGUoYnl0ZSBtb2RlKQotICB7Ci0gICAgdGhpcy5tb2RlID0gbW9kZTsKLSAgICBpZiAobW9kZSA9PSBNT0RFX1JFQ09SRCkKLSAgICB7Ci0gICAgICBhY3Rpb25EZXNjcmlwdG9ycyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIFNob3dQZXJzcGVjdGl2ZUFjdGlvbiBzaG93UGVyc3BlY3RpdmVBY3Rpb24gPSBuZXcgU2hvd1BlcnNwZWN0aXZlQWN0aW9uKGNvbnRyb2xsZXIpOwotICAgICAgc2hvd1BlcnNwZWN0aXZlQWN0aW9uLmFkZFByb3BlcnR5KEFjdGlvbklucHV0cy5QRVJTUEVDVElWRSwgU3RyaW5nLnZhbHVlT2YoY29udHJvbGxlci5nZXRDdXJyZW50UGVyc3BlY3RpdmUoKS5nZXRQZXJzcGVjdGl2ZUlkKCkpKTsKLSAgICAgIGFjdGlvbkRlc2NyaXB0b3JzLmFkZChuZXdBY3Rpb25EZXNjcmlwdG9yKHNob3dQZXJzcGVjdGl2ZUFjdGlvbikpOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZXhlY3V0ZUFjdGlvbihBY3Rpb24gYWN0aW9uKQotICB7Ci0gICAgaWYgKG1vZGUgPT0gTU9ERV9SRUNPUkQpCi0gICAgewotICAgICAgQWN0aW9uRGVzY3JpcHRvciBhY3Rpb25EZXNjcmlwdG9yID0gbmV3QWN0aW9uRGVzY3JpcHRvcihhY3Rpb24pOwotICAgICAgYWN0aW9uRGVzY3JpcHRvcnMuYWRkKGFjdGlvbkRlc2NyaXB0b3IpOwotICAgIH0KLSAgICByZXR1cm4gYWN0aW9uLnJ1bigpOwotICB9Ci0gIAotICBwdWJsaWMgU2NlbmFyaW9EZXNjcmlwdG9yIGdldFNjZW5hcmlvKCkKLSAgewotICAgIFNjZW5hcmlvRGVzY3JpcHRvciBzY2VuYXJpb0Rlc2NyaXB0b3IgPSBuZXdTY2VuYXJpb0Rlc2NyaXB0b3IoKTsKLSAgICBUcmFuc2FjdGlvbkRlc2NyaXB0b3IgdHJhbnNhY3Rpb25EZXNjcmlwdG9yID0gbmV3VHJhbnNhY3Rpb25EZXNjcmlwdG9yKCk7Ci0gICAgQWN0aW9uRGVzY3JpcHRvcltdIGFjdGlvbkRlc2NyaXB0b3JBcnJheSA9IChBY3Rpb25EZXNjcmlwdG9yW10pYWN0aW9uRGVzY3JpcHRvcnMudG9BcnJheShuZXcgQWN0aW9uRGVzY3JpcHRvclswXSk7Ci0gICAgdHJhbnNhY3Rpb25EZXNjcmlwdG9yLnNldEFjdGlvbkRlc2NyaXB0b3JzKGFjdGlvbkRlc2NyaXB0b3JBcnJheSk7Ci0gICAgc2NlbmFyaW9EZXNjcmlwdG9yLnNldFRyYW5zYWN0aW9uRGVzY3JpcHRvcnMobmV3IFRyYW5zYWN0aW9uRGVzY3JpcHRvcltdIHt0cmFuc2FjdGlvbkRlc2NyaXB0b3J9KTsKLSAgICByZXR1cm4gc2NlbmFyaW9EZXNjcmlwdG9yOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS9jb25zdGFudHMvQWN0aW9uRGF0YUNvbnN0YW50cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9lbmdpbmUvY29uc3RhbnRzL0FjdGlvbkRhdGFDb25zdGFudHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Y3MTZkZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS9jb25zdGFudHMvQWN0aW9uRGF0YUNvbnN0YW50cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUuY29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgQWN0aW9uRGF0YUNvbnN0YW50cwotewotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX0lEID0gImlkIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9OQU1FID0gIm5hbWUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX0FUVEVNUFRTID0gImF0dGVtcHRzIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9TVEFUVVNfSUQgPSAic3RhdHVzSWQiOwotICAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTUVOVF9TQ0VOQVJJTyA9ICJzY2VuYXJpbyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1FTlRfVFJBTlNBQ1RJT04gPSAidHJhbnNhY3Rpb24iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNRU5UX0FDVElPTiA9ICJhY3Rpb24iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNRU5UX1BST1BFUlRZID0gInByb3BlcnR5IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTUVOVF9WQUxVRSA9ICJ2YWx1ZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1FTlRfU1RBVFVTID0gInN0YXR1cyI7Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBWQUxVRV9TVEFUVVNfSURfVU5BVFRFTVBURUQgPSAidW5hdHRlbXB0ZWQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBWQUxVRV9TVEFUVVNfSURfUEFTU0VEID0gInBhc3NlZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFZBTFVFX1NUQVRVU19JRF9GQUlMRUQgPSAiZmFpbGVkIjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZW5naW5lL2RhdGEvQWN0aW9uRGVzY3JpcHRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9lbmdpbmUvZGF0YS9BY3Rpb25EZXNjcmlwdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3YTYwMGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9lbmdpbmUvZGF0YS9BY3Rpb25EZXNjcmlwdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS5kYXRhOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1wdWJsaWMgY2xhc3MgQWN0aW9uRGVzY3JpcHRvcgotewotICBwcml2YXRlIFN0cmluZyBpZDsKLSAgcHJpdmF0ZSBIYXNodGFibGUgcHJvcGVydGllczsKLSAgcHJpdmF0ZSBpbnQgYXR0ZW1wdHM7Ci0gIHByaXZhdGUgU3RyaW5nIHN0YXR1c0lkOwotICBwcml2YXRlIExpc3Qgc3RhdHVzTGlzdDsKLSAgCi0gIHB1YmxpYyBBY3Rpb25EZXNjcmlwdG9yKCkKLSAgewotICAgIGF0dGVtcHRzID0gMTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SWQoKQotICB7Ci0gICAgcmV0dXJuIGlkOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRJZChTdHJpbmcgaWQpCi0gIHsKLSAgICB0aGlzLmlkID0gaWQ7Ci0gIH0KLQotICBwdWJsaWMgSGFzaHRhYmxlIGdldFByb3BlcnRpZXMoKQotICB7Ci0gICAgcmV0dXJuIHByb3BlcnRpZXM7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFByb3BlcnRpZXMoSGFzaHRhYmxlIHByb3BlcnRpZXMpCi0gIHsKLSAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzOwotICB9Ci0gIAotICBwdWJsaWMgaW50IGdldEF0dGVtcHRzKCkKLSAgewotICAJcmV0dXJuIGF0dGVtcHRzOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRBdHRlbXB0cyhpbnQgYXR0ZW1wdHMpCi0gIHsKLSAgCXRoaXMuYXR0ZW1wdHMgPSBhdHRlbXB0czsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRTdGF0dXNJZCgpCi0gIHsKLSAgICByZXR1cm4gc3RhdHVzSWQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFN0YXR1c0lkKFN0cmluZyBzdGF0dXNJZCkKLSAgewotICAgIHRoaXMuc3RhdHVzSWQgPSBzdGF0dXNJZDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgYWRkU3RhdHVzKE9iamVjdCBzdGF0dXMpCi0gIHsKLSAgICBpZiAoc3RhdHVzICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKHN0YXR1c0xpc3QgPT0gbnVsbCkKLSAgICAgICAgc3RhdHVzTGlzdCA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIHN0YXR1c0xpc3QuYWRkKHN0YXR1cyk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiByZW1vdmVTdGF0dXMoT2JqZWN0IHN0YXR1cykKLSAgewotICAgIGlmIChzdGF0dXMgIT0gbnVsbCAmJiBzdGF0dXNMaXN0ICE9IG51bGwpCi0gICAgICByZXR1cm4gc3RhdHVzTGlzdC5yZW1vdmUoc3RhdHVzKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyBMaXN0IGdldFN0YXR1cygpCi0gIHsKLSAgICByZXR1cm4gc3RhdHVzTGlzdDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9lbmdpbmUvZGF0YS9TY2VuYXJpb0Rlc2NyaXB0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZW5naW5lL2RhdGEvU2NlbmFyaW9EZXNjcmlwdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2ZTkyYWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9lbmdpbmUvZGF0YS9TY2VuYXJpb0Rlc2NyaXB0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLmRhdGE7Ci0KLXB1YmxpYyBjbGFzcyBTY2VuYXJpb0Rlc2NyaXB0b3IKLXsKLSAgcHJpdmF0ZSBUcmFuc2FjdGlvbkRlc2NyaXB0b3JbXSB0cmFuc2FjdGlvbkRlc2NyaXB0b3JzOwotCi0gIHB1YmxpYyBUcmFuc2FjdGlvbkRlc2NyaXB0b3JbXSBnZXRUcmFuc2FjdGlvbkRlc2NyaXB0b3JzKCkKLSAgewotICAgIHJldHVybiB0cmFuc2FjdGlvbkRlc2NyaXB0b3JzOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRUcmFuc2FjdGlvbkRlc2NyaXB0b3JzKFRyYW5zYWN0aW9uRGVzY3JpcHRvcltdIHRyYW5zYWN0aW9uRGVzY3JpcHRvcnMpCi0gIHsKLSAgICB0aGlzLnRyYW5zYWN0aW9uRGVzY3JpcHRvcnMgPSB0cmFuc2FjdGlvbkRlc2NyaXB0b3JzOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS9kYXRhL1RyYW5zYWN0aW9uRGVzY3JpcHRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9lbmdpbmUvZGF0YS9UcmFuc2FjdGlvbkRlc2NyaXB0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDkxN2ExMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS9kYXRhL1RyYW5zYWN0aW9uRGVzY3JpcHRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUuZGF0YTsKLQotcHVibGljIGNsYXNzIFRyYW5zYWN0aW9uRGVzY3JpcHRvcgotewotICBwcml2YXRlIEFjdGlvbkRlc2NyaXB0b3JbXSBhY3Rpb25EZXNjcmlwdG9yczsKLQotICBwdWJsaWMgQWN0aW9uRGVzY3JpcHRvcltdIGdldEFjdGlvbkRlc2NyaXB0b3JzKCkKLSAgewotICAgIHJldHVybiBhY3Rpb25EZXNjcmlwdG9yczsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0QWN0aW9uRGVzY3JpcHRvcnMoQWN0aW9uRGVzY3JpcHRvcltdIGFjdGlvbkRlc2NyaXB0b3JzKQotICB7Ci0gICAgdGhpcy5hY3Rpb25EZXNjcmlwdG9ycyA9IGFjdGlvbkRlc2NyaXB0b3JzOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS90cmFuc2Zvcm1lci9DdXJyZW50Tm9kZVNlbGVjdGlvblRyYW5zZm9ybWVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS90cmFuc2Zvcm1lci9DdXJyZW50Tm9kZVNlbGVjdGlvblRyYW5zZm9ybWVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5NjZlNmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9lbmdpbmUvdHJhbnNmb3JtZXIvQ3VycmVudE5vZGVTZWxlY3Rpb25UcmFuc2Zvcm1lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUudHJhbnNmb3JtZXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotCi1wdWJsaWMgY2xhc3MgQ3VycmVudE5vZGVTZWxlY3Rpb25UcmFuc2Zvcm1lciBpbXBsZW1lbnRzIElUcmFuc2Zvcm1lcgotewotICBwcm90ZWN0ZWQgQ29udHJvbGxlciBjb250cm9sbGVyOwotICBwcm90ZWN0ZWQgU3RyaW5nIGtleTsKLQotICBwdWJsaWMgQ3VycmVudE5vZGVTZWxlY3Rpb25UcmFuc2Zvcm1lcihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICB0aGlzKGNvbnRyb2xsZXIsIEFjdGlvbklucHV0cy5OT0RFSUQpOwotICB9Ci0KLSAgcHVibGljIEN1cnJlbnROb2RlU2VsZWN0aW9uVHJhbnNmb3JtZXIoQ29udHJvbGxlciBjb250cm9sbGVyLCBTdHJpbmcga2V5KQotICB7Ci0gICAgdGhpcy5jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICB0aGlzLmtleSA9IGtleTsKLSAgfQotCi0gIHB1YmxpYyBIYXNodGFibGUgbm9ybWFsaXplKEhhc2h0YWJsZSBwcm9wZXJ0aWVzKQotICB7Ci0gICAgcmV0dXJuIHByb3BlcnRpZXM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBIYXNodGFibGUgZGVOb3JtYWxpemUoSGFzaHRhYmxlIHByb3BlcnRpZXMpCi0gIHsKLSAgICBOb2RlIGN1cnJOb2RlID0gY29udHJvbGxlci5nZXRDdXJyZW50UGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIGlmIChjdXJyTm9kZSAhPSBudWxsKQotICAgICAgcHJvcGVydGllcy5wdXQoa2V5LCBTdHJpbmcudmFsdWVPZihjdXJyTm9kZS5nZXROb2RlSWQoKSkpOwotICAgIHJldHVybiBwcm9wZXJ0aWVzOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS90cmFuc2Zvcm1lci9JVHJhbnNmb3JtZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZW5naW5lL3RyYW5zZm9ybWVyL0lUcmFuc2Zvcm1lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDE2ZDMwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZW5naW5lL3RyYW5zZm9ybWVyL0lUcmFuc2Zvcm1lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUudHJhbnNmb3JtZXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotCi1wdWJsaWMgaW50ZXJmYWNlIElUcmFuc2Zvcm1lcgotewotICBwdWJsaWMgSGFzaHRhYmxlIG5vcm1hbGl6ZShIYXNodGFibGUgcHJvcGVydGllcyk7Ci0gIHB1YmxpYyBIYXNodGFibGUgZGVOb3JtYWxpemUoSGFzaHRhYmxlIHByb3BlcnRpZXMpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9lbmdpbmUvdHJhbnNmb3JtZXIvTWFzc05vZGVJZFRyYW5zZm9ybWVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS90cmFuc2Zvcm1lci9NYXNzTm9kZUlkVHJhbnNmb3JtZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWI3NGU4My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS90cmFuc2Zvcm1lci9NYXNzTm9kZUlkVHJhbnNmb3JtZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS50cmFuc2Zvcm1lcjsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLk1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotCi1wdWJsaWMgY2xhc3MgTWFzc05vZGVJZFRyYW5zZm9ybWVyIGV4dGVuZHMgTm9kZUlkVHJhbnNmb3JtZXIKLXsKLSAgcHJvdGVjdGVkIFN0cmluZyBtYXNzTm9kZUlkS2V5OwotCi0gIHB1YmxpYyBNYXNzTm9kZUlkVHJhbnNmb3JtZXIoQ29udHJvbGxlciBjb250cm9sbGVyLCBTdHJpbmcgbWFzc05vZGVJZEtleSkKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIHRoaXMubWFzc05vZGVJZEtleSA9IG1hc3NOb2RlSWRLZXk7Ci0gIH0KLQotICBwdWJsaWMgSGFzaHRhYmxlIG5vcm1hbGl6ZShIYXNodGFibGUgcHJvcGVydGllcykKLSAgewotICAgIGlmICghcHJvcGVydGllcy5jb250YWluc0tleShtYXNzTm9kZUlkS2V5KSkKLSAgICAgIHJldHVybiBzdXBlci5ub3JtYWxpemUocHJvcGVydGllcyk7Ci0gICAgT2JqZWN0IG9yaWdOb2RlSWQgPSBwcm9wZXJ0aWVzLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICBTdHJpbmdbXSBtYXNzTm9kZUlkcyA9IGdldFZhbHVlQXNTdHJpbmdBcnJheShwcm9wZXJ0aWVzLCBtYXNzTm9kZUlkS2V5KTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1hc3NOb2RlSWRzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIHByb3BlcnRpZXMucHV0KEFjdGlvbklucHV0cy5OT0RFSUQsIG1hc3NOb2RlSWRzW2ldKTsKLSAgICAgIHByb3BlcnRpZXMgPSBzdXBlci5ub3JtYWxpemUocHJvcGVydGllcyk7Ci0gICAgICBTdHJpbmdbXSByZWxzID0gZ2V0VmFsdWVBc1N0cmluZ0FycmF5KHByb3BlcnRpZXMsIE1vZGVsQ29uc3RhbnRzLlJFTF9JRCk7Ci0gICAgICBpZiAocmVscy5sZW5ndGggPiAwKQotICAgICAgewotICAgICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKE1vZGVsQ29uc3RhbnRzLlJFTF9JRCk7Ci0gICAgICAgIHNiLmFwcGVuZChNb2RlbENvbnN0YW50cy5SRUxfTE9DQUxOQU1FX1NFUEFSQVRPUik7Ci0gICAgICAgIHNiLmFwcGVuZChtYXNzTm9kZUlkc1tpXSk7Ci0gICAgICAgIHByb3BlcnRpZXMucHV0KHNiLnRvU3RyaW5nKCksIHJlbHMpOwotICAgICAgfQotICAgICAgcHJvcGVydGllcy5yZW1vdmUoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgICBwcm9wZXJ0aWVzLnJlbW92ZShNb2RlbENvbnN0YW50cy5SRUxfSUQpOwotICAgIH0KLSAgICBpZiAob3JpZ05vZGVJZCAhPSBudWxsKQotICAgICAgcHJvcGVydGllcy5wdXQoQWN0aW9uSW5wdXRzLk5PREVJRCwgb3JpZ05vZGVJZCk7Ci0gICAgcmV0dXJuIHByb3BlcnRpZXM7Ci0gIH0KLQotICBwdWJsaWMgSGFzaHRhYmxlIGRlTm9ybWFsaXplKEhhc2h0YWJsZSBwcm9wZXJ0aWVzKQotICB7Ci0gICAgaWYgKCFwcm9wZXJ0aWVzLmNvbnRhaW5zS2V5KG1hc3NOb2RlSWRLZXkpKQotICAgICAgcmV0dXJuIHN1cGVyLmRlTm9ybWFsaXplKHByb3BlcnRpZXMpOwotICAgIFZlY3RvciBtYXNzTm9kZUlkVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgIE9iamVjdCBvcmlnTm9kZUlkID0gcHJvcGVydGllcy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgcHJvcGVydGllcy5yZW1vdmUoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgU3RyaW5nW10gbWFzc05vZGVJZHMgPSBnZXRWYWx1ZUFzU3RyaW5nQXJyYXkocHJvcGVydGllcywgbWFzc05vZGVJZEtleSk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXNzTm9kZUlkcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKE1vZGVsQ29uc3RhbnRzLlJFTF9JRCk7Ci0gICAgICBzYi5hcHBlbmQoTW9kZWxDb25zdGFudHMuUkVMX0xPQ0FMTkFNRV9TRVBBUkFUT1IpOwotICAgICAgc2IuYXBwZW5kKG1hc3NOb2RlSWRzW2ldKTsKLSAgICAgIE9iamVjdCByZWxzID0gcHJvcGVydGllcy5nZXQoc2IudG9TdHJpbmcoKSk7Ci0gICAgICBpZiAocmVscyAhPSBudWxsKQotICAgICAgewotICAgICAgICBwcm9wZXJ0aWVzLnB1dChNb2RlbENvbnN0YW50cy5SRUxfSUQsIHJlbHMpOwotICAgICAgICBwcm9wZXJ0aWVzID0gc3VwZXIuZGVOb3JtYWxpemUocHJvcGVydGllcyk7Ci0gICAgICAgIE9iamVjdCBub2RlSWQgPSBwcm9wZXJ0aWVzLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICAgICAgaWYgKG5vZGVJZCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgbWFzc05vZGVJZFZlY3Rvci5hZGQobm9kZUlkKTsKLSAgICAgICAgICBwcm9wZXJ0aWVzLnJlbW92ZShBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICAgICAgfQotICAgICAgICBwcm9wZXJ0aWVzLnJlbW92ZShNb2RlbENvbnN0YW50cy5SRUxfSUQpOwotICAgICAgfQotICAgIH0KLSAgICBpZiAob3JpZ05vZGVJZCAhPSBudWxsKQotICAgICAgcHJvcGVydGllcy5wdXQoQWN0aW9uSW5wdXRzLk5PREVJRCwgb3JpZ05vZGVJZCk7Ci0gICAgaW50IHNpemUgPSBtYXNzTm9kZUlkVmVjdG9yLnNpemUoKTsKLSAgICBpZiAoc2l6ZSA9PSAxKQotICAgICAgcHJvcGVydGllcy5wdXQobWFzc05vZGVJZEtleSwgbWFzc05vZGVJZFZlY3Rvci5nZXQoMCkpOwotICAgIGVsc2UgaWYgKHNpemUgPiAxKQotICAgICAgcHJvcGVydGllcy5wdXQobWFzc05vZGVJZEtleSwgbWFzc05vZGVJZFZlY3Rvci50b0FycmF5KG5ldyBTdHJpbmdbMF0pKTsKLSAgICBlbHNlCi0gICAgICBwcm9wZXJ0aWVzLnJlbW92ZShtYXNzTm9kZUlkS2V5KTsKLSAgICByZXR1cm4gcHJvcGVydGllczsKLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nW10gZ2V0VmFsdWVBc1N0cmluZ0FycmF5KEhhc2h0YWJsZSBwcm9wZXJ0aWVzLCBTdHJpbmcga2V5KQotICB7Ci0gICAgT2JqZWN0IHZhbHVlcyA9IHByb3BlcnRpZXMuZ2V0KGtleSk7Ci0gICAgaWYgKHZhbHVlcyA9PSBudWxsKQotICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbMF07Ci0gICAgZWxzZSBpZiAodmFsdWVzIGluc3RhbmNlb2YgU3RyaW5nW10pCi0gICAgICByZXR1cm4gKFN0cmluZ1tdKXZhbHVlczsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gbmV3IFN0cmluZ1tdIHt2YWx1ZXMudG9TdHJpbmcoKX07Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZW5naW5lL3RyYW5zZm9ybWVyL011bHRpcGFydEZvcm1EYXRhUGFyc2VyVHJhbnNmb3JtZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZW5naW5lL3RyYW5zZm9ybWVyL011bHRpcGFydEZvcm1EYXRhUGFyc2VyVHJhbnNmb3JtZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzMyYzE2NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS90cmFuc2Zvcm1lci9NdWx0aXBhcnRGb3JtRGF0YVBhcnNlclRyYW5zZm9ybWVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS50cmFuc2Zvcm1lcjsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotCi1wdWJsaWMgY2xhc3MgTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXJUcmFuc2Zvcm1lciBpbXBsZW1lbnRzIElUcmFuc2Zvcm1lcgotewotICBwcm90ZWN0ZWQgQ29udHJvbGxlciBjb250cm9sbGVyOwotCi0gIHB1YmxpYyBNdWx0aXBhcnRGb3JtRGF0YVBhcnNlclRyYW5zZm9ybWVyKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHRoaXMuY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gIH0KLQotICBwdWJsaWMgSGFzaHRhYmxlIG5vcm1hbGl6ZShIYXNodGFibGUgcHJvcGVydGllcykKLSAgewotICAgIE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlciA9IChNdWx0aXBhcnRGb3JtRGF0YVBhcnNlcilwcm9wZXJ0aWVzLmdldChBY3Rpb25JbnB1dHMuTVVMVElQQVJUX0ZPUk1fREFUQV9QQVJTRVIpOwotICAgIFN0cmluZ1tdIGtleXM7Ci0gICAgdHJ5Ci0gICAgewotICAgICAga2V5cyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJOYW1lcygpOwotICAgIH0KLSAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgewotICAgICAga2V5cyA9IG5ldyBTdHJpbmdbMF07Ci0gICAgfQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBTdHJpbmdCdWZmZXIgbmV3S2V5ID0gbmV3IFN0cmluZ0J1ZmZlcihBY3Rpb25JbnB1dHMuTVVMVElQQVJUX0ZPUk1fREFUQV9QQVJTRVIpOwotICAgICAgbmV3S2V5LmFwcGVuZChrZXlzW2ldKTsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBwcm9wZXJ0aWVzLnB1dChuZXdLZXkudG9TdHJpbmcoKSwgcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhrZXlzW2ldKSk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgICB7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBwcm9wZXJ0aWVzOwotICB9Ci0gIAotICBwdWJsaWMgSGFzaHRhYmxlIGRlTm9ybWFsaXplKEhhc2h0YWJsZSBwcm9wZXJ0aWVzKQotICB7Ci0gICAgRW51bWVyYXRpb24gZSA9IHByb3BlcnRpZXMua2V5cygpOwotICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIE9iamVjdCBrZXkgPSBlLm5leHRFbGVtZW50KCk7Ci0gICAgICBpZiAoa2V5IGluc3RhbmNlb2YgU3RyaW5nKQotICAgICAgewotICAgICAgICBpZiAoKChTdHJpbmcpa2V5KS5zdGFydHNXaXRoKEFjdGlvbklucHV0cy5NVUxUSVBBUlRfRk9STV9EQVRBX1BBUlNFUikpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgcmVhbEtleSA9ICgoU3RyaW5nKWtleSkuc3Vic3RyaW5nKEFjdGlvbklucHV0cy5NVUxUSVBBUlRfRk9STV9EQVRBX1BBUlNFUi5sZW5ndGgoKSk7Ci0gICAgICAgICAgaWYgKCFwcm9wZXJ0aWVzLmNvbnRhaW5zS2V5KHJlYWxLZXkpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIE9iamVjdCB2YWx1ZSA9IHByb3BlcnRpZXMucmVtb3ZlKGtleSk7Ci0gICAgICAgICAgICBwcm9wZXJ0aWVzLnB1dChyZWFsS2V5LCB2YWx1ZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBwcm9wZXJ0aWVzOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS90cmFuc2Zvcm1lci9Ob2RlSWRUcmFuc2Zvcm1lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9lbmdpbmUvdHJhbnNmb3JtZXIvTm9kZUlkVHJhbnNmb3JtZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmE1NDEzYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS90cmFuc2Zvcm1lci9Ob2RlSWRUcmFuc2Zvcm1lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5SZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Nb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIE5vZGVJZFRyYW5zZm9ybWVyIGltcGxlbWVudHMgSVRyYW5zZm9ybWVyCi17Ci0gIHByb3RlY3RlZCBDb250cm9sbGVyIGNvbnRyb2xsZXI7Ci0KLSAgcHVibGljIE5vZGVJZFRyYW5zZm9ybWVyKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHRoaXMuY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gIH0KLQotICBwdWJsaWMgSGFzaHRhYmxlIG5vcm1hbGl6ZShIYXNodGFibGUgcHJvcGVydGllcykKLSAgewotICAgIFZlY3RvciByZWxzID0gbmV3IFZlY3RvcigpOwotICAgIHRyeQotICAgIHsKLSAgICAgIGludCBub2RlSWQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydGllcy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBjb250cm9sbGVyLmdldEN1cnJlbnRQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgICBOb2RlIHJvb3ROb2RlID0gbm9kZU1hbmFnZXIuZ2V0Um9vdE5vZGUoKTsKLSAgICAgIE5vZGUgbm9kZSA9IG5vZGVNYW5hZ2VyLmdldE5vZGUobm9kZUlkKTsKLSAgICAgIGludCBkZXB0aCA9IDA7Ci0gICAgICBpZiAobm9kZSAhPSBudWxsKQotICAgICAgICBkZXB0aCA9IG5vZGUuZ2V0Tm9kZURlcHRoKCk7Ci0gICAgICB3aGlsZSAocmVscy5zaXplKCkgPCBkZXB0aCAmJiBub2RlICE9IG51bGwgJiYgbm9kZSAhPSByb290Tm9kZSkKLSAgICAgIHsKLSAgICAgICAgTm9kZSBwYXJlbnROb2RlID0gbm9kZS5nZXRQYXJlbnQoKTsKLSAgICAgICAgRWxlbWVudCBlbGVtZW50ID0gbm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgICBSZWwgcmVsID0gZ2V0UmVsKHBhcmVudE5vZGUuZ2V0VHJlZUVsZW1lbnQoKSwgZWxlbWVudCk7Ci0gICAgICAgIFN0cmluZ0J1ZmZlciByZWxWYWx1ZSA9IG5ldyBTdHJpbmdCdWZmZXIocmVsLmdldE5hbWUoKSk7Ci0gICAgICAgIHJlbFZhbHVlLmFwcGVuZChNb2RlbENvbnN0YW50cy5SRUxfTE9DQUxOQU1FX1NFUEFSQVRPUik7Ci0gICAgICAgIHJlbFZhbHVlLmFwcGVuZChlbGVtZW50LmdldE5hbWUoKSk7Ci0gICAgICAgIHJlbHMuaW5zZXJ0RWxlbWVudEF0KHJlbFZhbHVlLnRvU3RyaW5nKCksIDApOwotICAgICAgICBub2RlID0gcGFyZW50Tm9kZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpCi0gICAgewotICAgIH0KLSAgICBpbnQgbnVtUmVsYXRpb25zaGlwcyA9IHJlbHMuc2l6ZSgpOwotICAgIGlmIChudW1SZWxhdGlvbnNoaXBzID09IDEpCi0gICAgICBwcm9wZXJ0aWVzLnB1dChNb2RlbENvbnN0YW50cy5SRUxfSUQsIHJlbHMuZ2V0KDApLnRvU3RyaW5nKCkpOwotICAgIGVsc2UgaWYgKG51bVJlbGF0aW9uc2hpcHMgPiAxKQotICAgICAgcHJvcGVydGllcy5wdXQoTW9kZWxDb25zdGFudHMuUkVMX0lELCAoU3RyaW5nW10pcmVscy50b0FycmF5KG5ldyBTdHJpbmdbMF0pKTsKLSAgICByZXR1cm4gcHJvcGVydGllczsKLSAgfQotCi0gIHByaXZhdGUgUmVsIGdldFJlbChFbGVtZW50IHNvdXJjZUVsZW1lbnQsIEVsZW1lbnQgdGFyZ2V0RWxlbWVudCkKLSAgewotICAgIEVudW1lcmF0aW9uIHJlbHMgPSBzb3VyY2VFbGVtZW50LmdldFJlbHMoKTsKLSAgICB3aGlsZSAocmVscy5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICB7Ci0gICAgICBSZWwgcmVsID0gKFJlbClyZWxzLm5leHRFbGVtZW50KCk7Ci0gICAgICBFbnVtZXJhdGlvbiB0YXJnZXRFbGVtZW50cyA9IHJlbC5nZXRUYXJnZXRFbGVtZW50cygpOwotICAgICAgd2hpbGUgKHRhcmdldEVsZW1lbnRzLmhhc01vcmVFbGVtZW50cygpKQotICAgICAgewotICAgICAgICBpZiAodGFyZ2V0RWxlbWVudHMubmV4dEVsZW1lbnQoKSA9PSB0YXJnZXRFbGVtZW50KQotICAgICAgICAgIHJldHVybiByZWw7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIEhhc2h0YWJsZSBkZU5vcm1hbGl6ZShIYXNodGFibGUgcHJvcGVydGllcykKLSAgewotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gY29udHJvbGxlci5nZXRDdXJyZW50UGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgbm9kZSA9IG5vZGVNYW5hZ2VyLmdldFJvb3ROb2RlKCk7Ci0gICAgT2JqZWN0IHZhbHVlID0gcHJvcGVydGllcy5nZXQoTW9kZWxDb25zdGFudHMuUkVMX0lEKTsKLSAgICBTdHJpbmdbXSByZWxhdGlvbnNoaXBzID0gbnVsbDsKLSAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBTdHJpbmdbXSkKLSAgICAgIHJlbGF0aW9uc2hpcHMgPSAoU3RyaW5nW10pdmFsdWU7Ci0gICAgZWxzZSBpZiAodmFsdWUgIT0gbnVsbCkKLSAgICAgIHJlbGF0aW9uc2hpcHMgPSBuZXcgU3RyaW5nW10ge3ZhbHVlLnRvU3RyaW5nKCl9OwotICAgIGlmIChyZWxhdGlvbnNoaXBzICE9IG51bGwpCi0gICAgewotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWxhdGlvbnNoaXBzLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICBpbnQgaW5kZXggPSByZWxhdGlvbnNoaXBzW2ldLmluZGV4T2YoTW9kZWxDb25zdGFudHMuUkVMX0xPQ0FMTkFNRV9TRVBBUkFUT1IpOwotICAgICAgICBpZiAoaW5kZXggPT0gLTEpCi0gICAgICAgICAgcmV0dXJuIGRlTm9ybWFsaXplQXNTZWxlY3RlZE5vZGUocHJvcGVydGllcyk7Ci0gICAgICAgIFN0cmluZyByZWwgPSAoaW5kZXggIT0gLTEpID8gcmVsYXRpb25zaGlwc1tpXS5zdWJzdHJpbmcoMCwgaW5kZXgpIDogcmVsYXRpb25zaGlwc1tpXTsKLSAgICAgICAgU3RyaW5nIGxvY2FsbmFtZSA9IChpbmRleCAhPSAtMSkgPyByZWxhdGlvbnNoaXBzW2ldLnN1YnN0cmluZyhpbmRleCArIDEsIHJlbGF0aW9uc2hpcHNbaV0ubGVuZ3RoKCkpIDogbnVsbDsKLSAgICAgICAgaWYgKGxvY2FsbmFtZSA9PSBudWxsKQotICAgICAgICAgIHJldHVybiBkZU5vcm1hbGl6ZUFzU2VsZWN0ZWROb2RlKHByb3BlcnRpZXMpOwotICAgICAgICBub2RlID0gZ2V0Tm9kZShub2RlLCByZWwsIGxvY2FsbmFtZSk7Ci0gICAgICAgIGlmIChub2RlID09IG51bGwpCi0gICAgICAgICAgcmV0dXJuIGRlTm9ybWFsaXplQXNTZWxlY3RlZE5vZGUocHJvcGVydGllcyk7Ci0gICAgICB9Ci0gICAgICBwcm9wZXJ0aWVzLnB1dChBY3Rpb25JbnB1dHMuTk9ERUlELCBTdHJpbmcudmFsdWVPZihub2RlLmdldE5vZGVJZCgpKSk7Ci0gICAgICByZXR1cm4gcHJvcGVydGllczsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGRlTm9ybWFsaXplQXNTZWxlY3RlZE5vZGUocHJvcGVydGllcyk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgSGFzaHRhYmxlIGRlTm9ybWFsaXplQXNTZWxlY3RlZE5vZGUoSGFzaHRhYmxlIHByb3BlcnRpZXMpCi0gIHsKLSAgICByZXR1cm4gKG5ldyBDdXJyZW50Tm9kZVNlbGVjdGlvblRyYW5zZm9ybWVyKGNvbnRyb2xsZXIpKS5kZU5vcm1hbGl6ZShwcm9wZXJ0aWVzKTsKLSAgfQotCi0gIHByaXZhdGUgTm9kZSBnZXROb2RlKE5vZGUgcGFyZW50LCBTdHJpbmcgcmVsLCBTdHJpbmcgbG9jYWxuYW1lKQotICB7Ci0gICAgRWxlbWVudCBwYXJlbnRFbGVtZW50ID0gcGFyZW50LmdldFRyZWVFbGVtZW50KCk7Ci0gICAgRW51bWVyYXRpb24gZSA9IHBhcmVudEVsZW1lbnQuZ2V0RWxlbWVudHMocmVsKTsKLSAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICB7Ci0gICAgICBFbGVtZW50IGVsZW1lbnQgPSAoRWxlbWVudCllLm5leHRFbGVtZW50KCk7Ci0gICAgICBpZiAobG9jYWxuYW1lLmVxdWFscyhlbGVtZW50LmdldE5hbWUoKSkpCi0gICAgICAgIHJldHVybiBwYXJlbnQuZ2V0Q2hpbGROb2RlKChUcmVlRWxlbWVudCllbGVtZW50KTsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZW5naW5lL3RyYW5zZm9ybWVyL05vZGVTZWxlY3Rpb25UcmFuc2Zvcm1lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9lbmdpbmUvdHJhbnNmb3JtZXIvTm9kZVNlbGVjdGlvblRyYW5zZm9ybWVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzZjU3ZWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9lbmdpbmUvdHJhbnNmb3JtZXIvTm9kZVNlbGVjdGlvblRyYW5zZm9ybWVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUudHJhbnNmb3JtZXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLk1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgTm9kZVNlbGVjdGlvblRyYW5zZm9ybWVyIGltcGxlbWVudHMgSVRyYW5zZm9ybWVyCi17Ci0gIHByb3RlY3RlZCBDb250cm9sbGVyIGNvbnRyb2xsZXI7Ci0KLSAgcHVibGljIE5vZGVTZWxlY3Rpb25UcmFuc2Zvcm1lcihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICB0aGlzLmNvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICB9Ci0KLSAgcHVibGljIEhhc2h0YWJsZSBub3JtYWxpemUoSGFzaHRhYmxlIHByb3BlcnRpZXMpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IGNvbnRyb2xsZXIuZ2V0Q3VycmVudFBlcnNwZWN0aXZlKCkuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICAgIE5vZGUgbmV4dE5vZGUgPSBub2RlTWFuYWdlci5nZXROb2RlKEludGVnZXIucGFyc2VJbnQoKFN0cmluZykgcHJvcGVydGllcy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpKTsKLSAgICAgIE5vZGUgY3Vyck5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICAgIGlmIChjdXJyTm9kZSA9PSBudWxsKQotICAgICAgICBjdXJyTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFJvb3ROb2RlKCk7Ci0gICAgICBWZWN0b3IgbmV4dFJlbHMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBWZWN0b3IgY3VyclJlbHMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICB3aGlsZSAobmV4dE5vZGUgIT0gbnVsbCAmJiBjdXJyTm9kZSAhPSBudWxsICYmICghaXNSb290RWxlbWVudChuZXh0Tm9kZS5nZXRUcmVlRWxlbWVudCgpKSB8fCAhaXNSb290RWxlbWVudChjdXJyTm9kZS5nZXRUcmVlRWxlbWVudCgpKSkgJiYgbmV4dE5vZGUgIT0gY3Vyck5vZGUpCi0gICAgICB7Ci0gICAgICAgIGlmIChuZXh0Tm9kZS5nZXROb2RlRGVwdGgoKSA+PSBjdXJyTm9kZS5nZXROb2RlRGVwdGgoKSkKLSAgICAgICAgewotICAgICAgICAgIE5vZGUgcGFyZW50Tm9kZSA9IG5leHROb2RlLmdldFBhcmVudCgpOwotICAgICAgICAgIEVsZW1lbnQgbmV4dEVsZW1lbnQgPSBuZXh0Tm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgICAgIFJlbCByZWwgPSBnZXRSZWwocGFyZW50Tm9kZS5nZXRUcmVlRWxlbWVudCgpLCBuZXh0RWxlbWVudCk7Ci0gICAgICAgICAgU3RyaW5nQnVmZmVyIHJlbFZhbHVlID0gbmV3IFN0cmluZ0J1ZmZlcihyZWwuZ2V0TmFtZSgpKTsKLSAgICAgICAgICByZWxWYWx1ZS5hcHBlbmQoTW9kZWxDb25zdGFudHMuUkVMX0xPQ0FMTkFNRV9TRVBBUkFUT1IpOwotICAgICAgICAgIHJlbFZhbHVlLmFwcGVuZChuZXh0RWxlbWVudC5nZXROYW1lKCkpOwotICAgICAgICAgIG5leHRSZWxzLmluc2VydEVsZW1lbnRBdChyZWxWYWx1ZS50b1N0cmluZygpLCAwKTsKLSAgICAgICAgICBuZXh0Tm9kZSA9IHBhcmVudE5vZGU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgTm9kZSBwYXJlbnROb2RlID0gY3Vyck5vZGUuZ2V0UGFyZW50KCk7Ci0gICAgICAgICAgRWxlbWVudCBwYXJlbnRFbGVtZW50ID0gcGFyZW50Tm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgICAgIFJlbCByZWwgPSBnZXRSZWwoY3Vyck5vZGUuZ2V0VHJlZUVsZW1lbnQoKSwgcGFyZW50RWxlbWVudCk7Ci0gICAgICAgICAgU3RyaW5nQnVmZmVyIHJlbFZhbHVlID0gbmV3IFN0cmluZ0J1ZmZlcihyZWwuZ2V0TmFtZSgpKTsKLSAgICAgICAgICByZWxWYWx1ZS5hcHBlbmQoTW9kZWxDb25zdGFudHMuUkVMX0xPQ0FMTkFNRV9TRVBBUkFUT1IpOwotICAgICAgICAgIHJlbFZhbHVlLmFwcGVuZChwYXJlbnRFbGVtZW50LmdldE5hbWUoKSk7Ci0gICAgICAgICAgY3VyclJlbHMuYWRkKHJlbFZhbHVlLnRvU3RyaW5nKCkpOwotICAgICAgICAgIGN1cnJOb2RlID0gcGFyZW50Tm9kZTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgY3VyclJlbHMuYWRkQWxsKG5leHRSZWxzKTsKLSAgICAgIGludCBudW1SZWxhdGlvbnNoaXBzID0gY3VyclJlbHMuc2l6ZSgpOwotICAgICAgaWYgKG51bVJlbGF0aW9uc2hpcHMgPT0gMSkKLSAgICAgICAgcHJvcGVydGllcy5wdXQoTW9kZWxDb25zdGFudHMuUkVMX0lELCBjdXJyUmVscy5nZXQoMCkudG9TdHJpbmcoKSk7Ci0gICAgICBlbHNlIGlmIChudW1SZWxhdGlvbnNoaXBzID4gMSkKLSAgICAgICAgcHJvcGVydGllcy5wdXQoTW9kZWxDb25zdGFudHMuUkVMX0lELCAoU3RyaW5nW10pIGN1cnJSZWxzLnRvQXJyYXkobmV3IFN0cmluZ1swXSkpOwotICAgIH0KLSAgICBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSkKLSAgICB7Ci0gICAgfQotICAgIHJldHVybiBwcm9wZXJ0aWVzOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGlzUm9vdEVsZW1lbnQoRWxlbWVudCBlKQotICB7Ci0gICAgcmV0dXJuIGUuZ2V0TW9kZWwoKS5nZXRSb290RWxlbWVudCgpID09IGU7Ci0gIH0KLQotICBwcml2YXRlIFJlbCBnZXRSZWwoRWxlbWVudCBzb3VyY2VFbGVtZW50LCBFbGVtZW50IHRhcmdldEVsZW1lbnQpCi0gIHsKLSAgICBFbnVtZXJhdGlvbiByZWxzID0gc291cmNlRWxlbWVudC5nZXRSZWxzKCk7Ci0gICAgd2hpbGUgKHJlbHMuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgewotICAgICAgUmVsIHJlbCA9IChSZWwpIHJlbHMubmV4dEVsZW1lbnQoKTsKLSAgICAgIEVudW1lcmF0aW9uIHRhcmdldEVsZW1lbnRzID0gcmVsLmdldFRhcmdldEVsZW1lbnRzKCk7Ci0gICAgICB3aGlsZSAodGFyZ2V0RWxlbWVudHMuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgICB7Ci0gICAgICAgIGlmICh0YXJnZXRFbGVtZW50cy5uZXh0RWxlbWVudCgpID09IHRhcmdldEVsZW1lbnQpCi0gICAgICAgICAgcmV0dXJuIHJlbDsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgSGFzaHRhYmxlIGRlTm9ybWFsaXplKEhhc2h0YWJsZSBwcm9wZXJ0aWVzKQotICB7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBjb250cm9sbGVyLmdldEN1cnJlbnRQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSByb290Tm9kZSA9IG5vZGVNYW5hZ2VyLmdldFJvb3ROb2RlKCk7Ci0gICAgTm9kZSBjdXJyTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIGlmIChjdXJyTm9kZSA9PSBudWxsKQotICAgICAgY3Vyck5vZGUgPSByb290Tm9kZTsKLSAgICBPYmplY3QgdmFsdWUgPSBwcm9wZXJ0aWVzLmdldChNb2RlbENvbnN0YW50cy5SRUxfSUQpOwotICAgIFN0cmluZ1tdIHJlbGF0aW9uc2hpcHMgPSBudWxsOwotICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZ1tdKQotICAgICAgcmVsYXRpb25zaGlwcyA9IChTdHJpbmdbXSkgdmFsdWU7Ci0gICAgZWxzZSBpZiAodmFsdWUgIT0gbnVsbCkKLSAgICAgIHJlbGF0aW9uc2hpcHMgPSBuZXcgU3RyaW5nW117dmFsdWUudG9TdHJpbmcoKX07Ci0gICAgaWYgKHJlbGF0aW9uc2hpcHMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBFbGVtZW50IGN1cnJFbGVtZW50ID0gY3Vyck5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVsYXRpb25zaGlwcy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgaW50IGluZGV4ID0gcmVsYXRpb25zaGlwc1tpXS5pbmRleE9mKE1vZGVsQ29uc3RhbnRzLlJFTF9MT0NBTE5BTUVfU0VQQVJBVE9SKTsKLSAgICAgICAgU3RyaW5nIHJlbCA9IChpbmRleCAhPSAtMSkgPyByZWxhdGlvbnNoaXBzW2ldLnN1YnN0cmluZygwLCBpbmRleCkgOiByZWxhdGlvbnNoaXBzW2ldOwotICAgICAgICBTdHJpbmcgbG9jYWxuYW1lID0gKGluZGV4ICE9IC0xKSA/IHJlbGF0aW9uc2hpcHNbaV0uc3Vic3RyaW5nKGluZGV4ICsgMSwgcmVsYXRpb25zaGlwc1tpXS5sZW5ndGgoKSkgOiBudWxsOwotICAgICAgICBFbnVtZXJhdGlvbiBlID0gY3VyckVsZW1lbnQuZ2V0RWxlbWVudHMocmVsKTsKLSAgICAgICAgRWxlbWVudCB0YXJnZXRFbGVtZW50ID0gbnVsbDsKLSAgICAgICAgaWYgKGxvY2FsbmFtZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgRWxlbWVudCBmaXJzdEVsZW1lbnQgPSBudWxsOwotICAgICAgICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIEVsZW1lbnQgbmV4dEVsZW1lbnQgPSAoRWxlbWVudCkgZS5uZXh0RWxlbWVudCgpOwotICAgICAgICAgICAgaWYgKGZpcnN0RWxlbWVudCA9PSBudWxsKQotICAgICAgICAgICAgICBmaXJzdEVsZW1lbnQgPSBuZXh0RWxlbWVudDsKLSAgICAgICAgICAgIGlmIChsb2NhbG5hbWUuZXF1YWxzKG5leHRFbGVtZW50LmdldE5hbWUoKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHRhcmdldEVsZW1lbnQgPSBuZXh0RWxlbWVudDsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmICh0YXJnZXRFbGVtZW50ID09IG51bGwpCi0gICAgICAgICAgICB0YXJnZXRFbGVtZW50ID0gZmlyc3RFbGVtZW50OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIGlmIChlLmhhc01vcmVFbGVtZW50cygpKQotICAgICAgICAgICAgdGFyZ2V0RWxlbWVudCA9IChFbGVtZW50KSBlLm5leHRFbGVtZW50KCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHRhcmdldEVsZW1lbnQgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGN1cnJFbGVtZW50ID0gKEVsZW1lbnQpIHRhcmdldEVsZW1lbnQ7Ci0gICAgICAgICAgTm9kZSBwYXJlbnROb2RlID0gY3Vyck5vZGUuZ2V0UGFyZW50KCk7Ci0gICAgICAgICAgaWYgKHBhcmVudE5vZGUgIT0gbnVsbCAmJiBwYXJlbnROb2RlLmdldFRyZWVFbGVtZW50KCkgPT0gY3VyckVsZW1lbnQpCi0gICAgICAgICAgICBjdXJyTm9kZSA9IHBhcmVudE5vZGU7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY3Vyck5vZGUgPSBjdXJyTm9kZS5nZXRDaGlsZE5vZGUoKFRyZWVFbGVtZW50KSBjdXJyRWxlbWVudCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcHJvcGVydGllcy5wdXQoQWN0aW9uSW5wdXRzLk5PREVJRCwgU3RyaW5nLnZhbHVlT2YoY3Vyck5vZGUuZ2V0Tm9kZUlkKCkpKTsKLSAgICByZXR1cm4gcHJvcGVydGllczsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9lbmdpbmUvdHJhbnNmb3JtZXIvVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS90cmFuc2Zvcm1lci9WaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDI2MWYyYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2VuZ2luZS90cmFuc2Zvcm1lci9WaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS50cmFuc2Zvcm1lcjsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lciBpbXBsZW1lbnRzIElUcmFuc2Zvcm1lcgotewotICBwcm90ZWN0ZWQgQ29udHJvbGxlciBjb250cm9sbGVyOwotICBwcm90ZWN0ZWQgU3RyaW5nIGxpc3RNYW5hZ2VyS2V5OwotICBwcm90ZWN0ZWQgU3RyaW5nIHZpZXdLZXk7Ci0KLSAgcHVibGljIFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lcihDb250cm9sbGVyIGNvbnRyb2xsZXIsIFN0cmluZyBsaXN0TWFuYWdlcktleSwgU3RyaW5nIHZpZXdLZXkpCi0gIHsKLSAgICB0aGlzLmNvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHRoaXMubGlzdE1hbmFnZXJLZXkgPSBsaXN0TWFuYWdlcktleTsKLSAgICB0aGlzLnZpZXdLZXkgPSB2aWV3S2V5OwotICB9Ci0KLSAgcHVibGljIEhhc2h0YWJsZSBub3JtYWxpemUoSGFzaHRhYmxlIHByb3BlcnRpZXMpCi0gIHsKLSAgICBWZWN0b3Igbm9ybWFsaXplZFZpZXdJZHMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBjb250cm9sbGVyLmdldEN1cnJlbnRQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSBjdXJyTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIFRyZWVFbGVtZW50IGN1cnJFbGVtZW50ID0gY3Vyck5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBPYmplY3QgbGlzdE1hbmFnZXJPYmogPSBjdXJyRWxlbWVudC5nZXRQcm9wZXJ0eUFzT2JqZWN0KGxpc3RNYW5hZ2VyS2V5KTsKLSAgICBpZiAobGlzdE1hbmFnZXJPYmogaW5zdGFuY2VvZiBMaXN0TWFuYWdlcikKLSAgICB7Ci0gICAgICBMaXN0TWFuYWdlciBsaXN0TWFuYWdlciA9IChMaXN0TWFuYWdlcikgbGlzdE1hbmFnZXJPYmo7Ci0gICAgICBTdHJpbmdbXSB2aWV3SWRzID0gZ2V0Vmlld1ZhbHVlcyhwcm9wZXJ0aWVzKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmlld0lkcy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSBudWxsOwotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIGxpc3RFbGVtZW50ID0gbGlzdE1hbmFnZXIuZ2V0RWxlbWVudFdpdGhWaWV3SWQoSW50ZWdlci5wYXJzZUludCh2aWV3SWRzW2ldKSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgICBpZiAobGlzdEVsZW1lbnQgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIE9iamVjdCBvYmplY3QgPSBsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICAgICBpZiAob2JqZWN0ICE9IG51bGwgJiYgb2JqZWN0IGluc3RhbmNlb2YgRWxlbWVudCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBFbGVtZW50IGVsZW1lbnQgPSAoRWxlbWVudCkgb2JqZWN0OwotICAgICAgICAgICAgbm9ybWFsaXplZFZpZXdJZHMuYWRkKGVsZW1lbnQuZ2V0TmFtZSgpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcHJvcGVydGllcy5wdXQodmlld0tleSwgbm9ybWFsaXplZFZpZXdJZHMudG9BcnJheShuZXcgU3RyaW5nWzBdKSk7Ci0gICAgcmV0dXJuIHByb3BlcnRpZXM7Ci0gIH0KLQotICBwdWJsaWMgSGFzaHRhYmxlIGRlTm9ybWFsaXplKEhhc2h0YWJsZSBwcm9wZXJ0aWVzKQotICB7Ci0gICAgVmVjdG9yIHZpZXdJZHMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgTm9kZSBjdXJyTm9kZSA9IGNvbnRyb2xsZXIuZ2V0Q3VycmVudFBlcnNwZWN0aXZlKCkuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBpZiAoY3Vyck5vZGUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBUcmVlRWxlbWVudCBjdXJyRWxlbWVudCA9IGN1cnJOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICBPYmplY3QgbGlzdE1hbmFnZXJPYmogPSBjdXJyRWxlbWVudC5nZXRQcm9wZXJ0eUFzT2JqZWN0KGxpc3RNYW5hZ2VyS2V5KTsKLSAgICAgIGlmIChsaXN0TWFuYWdlck9iaiBpbnN0YW5jZW9mIExpc3RNYW5hZ2VyKQotICAgICAgewotICAgICAgICBMaXN0TWFuYWdlciBsaXN0TWFuYWdlciA9IChMaXN0TWFuYWdlcikgbGlzdE1hbmFnZXJPYmo7Ci0gICAgICAgIFN0cmluZ1tdIG5vcm1hbGl6ZWRWaWV3SWRzID0gZ2V0Vmlld1ZhbHVlcyhwcm9wZXJ0aWVzKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBub3JtYWxpemVkVmlld0lkcy5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgIEVudW1lcmF0aW9uIGUgPSBsaXN0TWFuYWdlci5nZXRMaXN0RWxlbWVudHMoKTsKLSAgICAgICAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudCkgZS5uZXh0RWxlbWVudCgpOwotICAgICAgICAgICAgRWxlbWVudCBlbGVtZW50ID0gKEVsZW1lbnQpIGxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgICAgICAgaWYgKGVsZW1lbnQgIT0gbnVsbCAmJiBub3JtYWxpemVkVmlld0lkc1tpXS5lcXVhbHMoZWxlbWVudC5nZXROYW1lKCkpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICB2aWV3SWRzLmFkZChTdHJpbmcudmFsdWVPZihsaXN0RWxlbWVudC5nZXRWaWV3SWQoKSkpOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgaW50IHNpemUgPSB2aWV3SWRzLnNpemUoKTsKLSAgICBpZiAoc2l6ZSA9PSAxKQotICAgICAgcHJvcGVydGllcy5wdXQodmlld0tleSwgdmlld0lkcy5nZXQoMCkpOwotICAgIGVsc2UgaWYgKHNpemUgPiAxKQotICAgICAgcHJvcGVydGllcy5wdXQodmlld0tleSwgdmlld0lkcy50b0FycmF5KG5ldyBTdHJpbmdbMF0pKTsKLSAgICByZXR1cm4gcHJvcGVydGllczsKLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nW10gZ2V0Vmlld1ZhbHVlcyhIYXNodGFibGUgcHJvcGVydGllcykKLSAgewotICAgIE9iamVjdCB2aWV3VmFsdWVPYmogPSBwcm9wZXJ0aWVzLmdldCh2aWV3S2V5KTsKLSAgICBTdHJpbmdbXSB2aWV3VmFsdWVzOwotICAgIGlmICh2aWV3VmFsdWVPYmogPT0gbnVsbCkKLSAgICAgIHZpZXdWYWx1ZXMgPSBuZXcgU3RyaW5nWzBdOwotICAgIGVsc2UgaWYgKHZpZXdWYWx1ZU9iai5nZXRDbGFzcygpLmlzQXJyYXkoKSkKLSAgICAgIHZpZXdWYWx1ZXMgPSAoU3RyaW5nW10pIHZpZXdWYWx1ZU9iajsKLSAgICBlbHNlCi0gICAgICB2aWV3VmFsdWVzID0gbmV3IFN0cmluZ1tdeyhTdHJpbmcpIHZpZXdWYWx1ZU9ian07Ci0gICAgcmV0dXJuIHZpZXdWYWx1ZXM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvQWRkQnVzaW5lc3NUb1VERElQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9BZGRCdXNpbmVzc1RvVURESVBlcnNwZWN0aXZlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzYTI3ZTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9BZGRCdXNpbmVzc1RvVURESVBlcnNwZWN0aXZlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLkZhdm9yaXRlc1VERElCdXNpbmVzc0VsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS5GYXZvcml0ZXNQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5SZWdGaW5kQnVzaW5lc3NVVUlEQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLQotcHVibGljIGNsYXNzIEFkZEJ1c2luZXNzVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24gZXh0ZW5kcyBBZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbgotewotICBwdWJsaWMgQWRkQnVzaW5lc3NUb1VERElQZXJzcGVjdGl2ZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIGV4ZWN1dGVTaW5nbGVMaW5rQWN0aW9uKCkKLSAgewotICAgIGludCBub2RlSUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpIHByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IGZhdlBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXROb2RlKG5vZGVJRCk7Ci0gICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgRmF2b3JpdGVzVURESUJ1c2luZXNzRWxlbWVudCBidXNFbGVtZW50ID0gKEZhdm9yaXRlc1VERElCdXNpbmVzc0VsZW1lbnQpIHNlbGVjdGVkRWxlbWVudDsKLSAgICBTdHJpbmcgYnVzaW5lc3NOYW1lID0gYnVzRWxlbWVudC5nZXROYW1lKCk7Ci0gICAgU3RyaW5nIGlucXVpcnlBUEkgPSBidXNFbGVtZW50LmdldElucXVpcnlVUkwoKTsKLSAgICBTdHJpbmcgYnVzaW5lc3NLZXkgPSBidXNFbGVtZW50LmdldEJ1c2luZXNzS2V5KCk7Ci0gICAgLy8gY3JlYXRlIHRoZSByZWdpc3RyeSBpbiB0aGUgVURESSBwZXJzcGVjdGl2ZQotICAgIGlmICghY3JlYXRlUmVnaXN0cnlJblVERElQZXJzcGVjdGl2ZShpbnF1aXJ5QVBJLCBudWxsLCBpbnF1aXJ5QVBJLCBudWxsLCB0cnVlKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBSZWdGaW5kQnVzaW5lc3NVVUlEQWN0aW9uIGFjdGlvbiA9IG5ldyBSZWdGaW5kQnVzaW5lc3NVVUlEQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICBIYXNodGFibGUgcHJvcGVydHlUYWJsZSA9IGFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX0JVU0lORVNTX0tFWSwgYnVzaW5lc3NLZXkpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfTkFNRSwgYnVzaW5lc3NOYW1lKTsKLSAgICBpZiAoIWFjdGlvbi5ydW4oKSkKLSAgICB7Ci0gICAgICBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9BRERfVE9fVURESV9QRVJTUEVDVElWRSIsIGJ1c2luZXNzTmFtZSkpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpLnNldFZpc2liaWxpdHlPZkNoaWxkcmVuKHRydWUpOwotICAgIGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2UoZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fQUREX1RPX1VERElfUEVSU1BFQ1RJVkVfU1VDQ0VTU0ZVTCIsIGJ1c2luZXNzTmFtZSkpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL0FkZFJlZ2lzdHJ5VG9VRERJUGVyc3BlY3RpdmVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvQWRkUmVnaXN0cnlUb1VERElQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNGE2MTRmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvQWRkUmVnaXN0cnlUb1VERElQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzVURESVJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLkZhdm9yaXRlc1BlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIEFkZFJlZ2lzdHJ5VG9VRERJUGVyc3BlY3RpdmVBY3Rpb24gZXh0ZW5kcyBBZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbgotewotICBwdWJsaWMgQWRkUmVnaXN0cnlUb1VERElQZXJzcGVjdGl2ZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIGV4ZWN1dGVTaW5nbGVMaW5rQWN0aW9uKCkKLSAgewotICAgIGludCBub2RlSUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpIHByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gZmF2UGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldE5vZGUobm9kZUlEKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBGYXZvcml0ZXNVRERJUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoRmF2b3JpdGVzVURESVJlZ2lzdHJ5RWxlbWVudCkgc2VsZWN0ZWRFbGVtZW50OwotICAgIFN0cmluZyByZWdpc3RyeU5hbWUgPSByZWdFbGVtZW50LmdldE5hbWUoKTsKLSAgICBTdHJpbmcgaW5xdWlyeUFQSSA9IHJlZ0VsZW1lbnQuZ2V0SW5xdWlyeVVSTCgpOwotICAgIFN0cmluZyBwdWJsaXNoQVBJID0gcmVnRWxlbWVudC5nZXRQdWJsaXNoVVJMKCk7Ci0gICAgU3RyaW5nIHJlZ2lzdHJhdGlvblVSTCA9IHJlZ0VsZW1lbnQuZ2V0UmVnaXN0cmF0aW9uVVJMKCk7Ci0gICAgaWYgKCFjcmVhdGVSZWdpc3RyeUluVURESVBlcnNwZWN0aXZlKGlucXVpcnlBUEksIHB1Ymxpc2hBUEksIHJlZ2lzdHJ5TmFtZSwgcmVnaXN0cmF0aW9uVVJMLCBmYWxzZSkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuYWRkTWVzc2FnZShmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19BRERfVE9fVURESV9QRVJTUEVDVElWRV9TVUNDRVNTRlVMIiwgcmVnaXN0cnlOYW1lKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvQWRkU2VydmljZUludGVyZmFjZVRvVURESVBlcnNwZWN0aXZlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL0FkZFNlcnZpY2VJbnRlcmZhY2VUb1VERElQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZmZmODIxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvQWRkU2VydmljZUludGVyZmFjZVRvVURESVBlcnNwZWN0aXZlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLkZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLkZhdm9yaXRlc1BlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLlJlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlVVVJREFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci0KLXB1YmxpYyBjbGFzcyBBZGRTZXJ2aWNlSW50ZXJmYWNlVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24gZXh0ZW5kcyBBZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbgotewotICBwdWJsaWMgQWRkU2VydmljZUludGVyZmFjZVRvVURESVBlcnNwZWN0aXZlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gZXhlY3V0ZVNpbmdsZUxpbmtBY3Rpb24oKQotICB7Ci0gICAgaW50IG5vZGVJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZykgcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gZmF2UGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldE5vZGUobm9kZUlEKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUVsZW1lbnQgc2VySW50RWxlbWVudCA9IChGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUVsZW1lbnQpIHNlbGVjdGVkRWxlbWVudDsKLSAgICBTdHJpbmcgc2VySW50TmFtZSA9IHNlckludEVsZW1lbnQuZ2V0TmFtZSgpOwotICAgIFN0cmluZyBpbnF1aXJ5QVBJID0gc2VySW50RWxlbWVudC5nZXRJbnF1aXJ5VVJMKCk7Ci0gICAgU3RyaW5nIHNlckludEtleSA9IHNlckludEVsZW1lbnQuZ2V0U2VydmljZUludGVyZmFjZUtleSgpOwotICAgIC8vIGNyZWF0ZSB0aGUgcmVnaXN0cnkgaW4gdGhlIFVEREkgcGVyc3BlY3RpdmUKLSAgICBpZiAoIWNyZWF0ZVJlZ2lzdHJ5SW5VRERJUGVyc3BlY3RpdmUoaW5xdWlyeUFQSSwgbnVsbCwgaW5xdWlyeUFQSSwgbnVsbCwgdHJ1ZSkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VVVUlEQWN0aW9uIGFjdGlvbiA9IG5ldyBSZWdGaW5kU2VydmljZUludGVyZmFjZVVVSURBY3Rpb24oY29udHJvbGxlcl8pOwotICAgIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlID0gYWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9JTlRFUkZBQ0VfS0VZLCBzZXJJbnRLZXkpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfTkFNRSwgc2VySW50TmFtZSk7Ci0gICAgaWYgKCFhY3Rpb24ucnVuKCkpCi0gICAgewotICAgICAgZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuYWRkTWVzc2FnZShmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfQUREX1RPX1VERElfUEVSU1BFQ1RJVkUiLCBzZXJJbnROYW1lKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlKCkuc2V0VmlzaWJpbGl0eU9mQ2hpbGRyZW4odHJ1ZSk7Ci0gICAgZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuYWRkTWVzc2FnZShmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19BRERfVE9fVURESV9QRVJTUEVDVElWRV9TVUNDRVNTRlVMIiwgc2VySW50TmFtZSkpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL0FkZFNlcnZpY2VUb1VERElQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9BZGRTZXJ2aWNlVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzkyMzljMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL0FkZFNlcnZpY2VUb1VERElQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC5GYXZvcml0ZXNVRERJU2VydmljZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS5GYXZvcml0ZXNQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5SZWdGaW5kU2VydmljZVVVSURBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotCi1wdWJsaWMgY2xhc3MgQWRkU2VydmljZVRvVURESVBlcnNwZWN0aXZlQWN0aW9uIGV4dGVuZHMgQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24KLXsKLSAgcHVibGljIEFkZFNlcnZpY2VUb1VERElQZXJzcGVjdGl2ZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIGV4ZWN1dGVTaW5nbGVMaW5rQWN0aW9uKCkKLSAgewotICAgIGludCBub2RlSUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpIHByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IGZhdlBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXROb2RlKG5vZGVJRCk7Ci0gICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgRmF2b3JpdGVzVURESVNlcnZpY2VFbGVtZW50IHNlckVsZW1lbnQgPSAoRmF2b3JpdGVzVURESVNlcnZpY2VFbGVtZW50KSBzZWxlY3RlZEVsZW1lbnQ7Ci0gICAgU3RyaW5nIHNlcnZpY2VOYW1lID0gc2VyRWxlbWVudC5nZXROYW1lKCk7Ci0gICAgU3RyaW5nIGlucXVpcnlBUEkgPSBzZXJFbGVtZW50LmdldElucXVpcnlVUkwoKTsKLSAgICBTdHJpbmcgc2VydmljZUtleSA9IHNlckVsZW1lbnQuZ2V0U2VydmljZUtleSgpOwotICAgIC8vIGNyZWF0ZSB0aGUgcmVnaXN0cnkgaW4gdGhlIFVEREkgcGVyc3BlY3RpdmUKLSAgICBpZiAoIWNyZWF0ZVJlZ2lzdHJ5SW5VRERJUGVyc3BlY3RpdmUoaW5xdWlyeUFQSSwgbnVsbCwgaW5xdWlyeUFQSSwgbnVsbCwgdHJ1ZSkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgUmVnRmluZFNlcnZpY2VVVUlEQWN0aW9uIGFjdGlvbiA9IG5ldyBSZWdGaW5kU2VydmljZVVVSURBY3Rpb24oY29udHJvbGxlcl8pOwotICAgIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlID0gYWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9LRVksIHNlcnZpY2VLZXkpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfTkFNRSwgc2VydmljZU5hbWUpOwotICAgIGlmICghYWN0aW9uLnJ1bigpKQotICAgIHsKLSAgICAgIGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2UoZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0FERF9UT19VRERJX1BFUlNQRUNUSVZFIiwgc2VydmljZU5hbWUpKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKS5zZXRWaXNpYmlsaXR5T2ZDaGlsZHJlbih0cnVlKTsKLSAgICBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX0FERF9UT19VRERJX1BFUlNQRUNUSVZFX1NVQ0NFU1NGVUwiLCBzZXJ2aWNlTmFtZSkpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL0FkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL0FkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkODZiNmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9BZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9uczsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC5GYXZvcml0ZXNFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLkZhdm9yaXRlc0ZvbGRlckVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzVURESUJ1c2luZXNzRm9sZGVyRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC5GYXZvcml0ZXNVRERJUmVnaXN0cnlGb2xkZXJFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLkZhdm9yaXRlc1VERElTZXJ2aWNlRm9sZGVyRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC5GYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUZvbGRlckVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeUZvbGRlckVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuT3BlblJlZ2lzdHJ5QWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5DYXRlZ29yeU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuUmVnaXN0cnlOb2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElNYWluTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5VUkxVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5WYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teTsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEFkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uIGV4dGVuZHMgTXVsdGlwbGVMaW5rQWN0aW9uIHsKLSAgICBwdWJsaWMgQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJRCwgaW50IHRvb2xJRCwgaW50IHZpZXdJRCwgaW50IHZpZXdUb29sSUQpIHsKLSAgICAgICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJmYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNBZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbkpTUC5qc3A/Iik7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChub2RlSUQpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVE9PTElEKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQodG9vbElEKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdJRCk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKHZpZXdJRCk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5WSUVXVE9PTElEKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQodmlld1Rvb2xJRCk7Ci0gICAgICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QmFzZUFjdGlvbkxpbmsoKSB7Ci0gICAgICAgIHJldHVybiAiZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb25KU1AuanNwIjsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgYm9vbGVhbiBjcmVhdGVSZWdpc3RyeUluVURESVBlcnNwZWN0aXZlKFN0cmluZyBpbnF1aXJ5QVBJLCBTdHJpbmcgcHVibGlzaEFQSSwgU3RyaW5nIHJlZ2lzdHJ5TmFtZSwgU3RyaW5nIHJlZ2lzdHJhdGlvblVSTCwgYm9vbGVhbiB1c2VFeGlzdGluZykKLSAgICB7Ci0gICAgICByZXR1cm4gY3JlYXRlUmVnaXN0cnlJblVERElQZXJzcGVjdGl2ZShpbnF1aXJ5QVBJLCBwdWJsaXNoQVBJLCByZWdpc3RyeU5hbWUsIHJlZ2lzdHJhdGlvblVSTCwgbnVsbCwgbnVsbCwgbnVsbCwgdXNlRXhpc3RpbmcpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBib29sZWFuIGNyZWF0ZVJlZ2lzdHJ5SW5VRERJUGVyc3BlY3RpdmUoU3RyaW5nIGlucXVpcnlBUEksIFN0cmluZyBwdWJsaXNoQVBJLCBTdHJpbmcgcmVnaXN0cnlOYW1lLCBTdHJpbmcgcmVnaXN0cmF0aW9uVVJMLCBTdHJpbmcgZGVmYXVsdExvZ2luLCBTdHJpbmcgZGVmYXVsdFBhc3N3b3JkLCBUYXhvbm9teVtdIHRheG9ub21pZXMsIGJvb2xlYW4gdXNlRXhpc3RpbmcpIHsKLSAgICAgIFZlY3RvciByZWdpc3RyeU5vZGVzID0gZ2V0UmVnaXN0cnlOb2Rlc0J5SW5xdWlyeVVSTChpbnF1aXJ5QVBJKTsKLSAgICAgICAgaWYgKHJlZ2lzdHJ5Tm9kZXMgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGlmICh1c2VFeGlzdGluZykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBOb2RlIHJlZ2lzdHJ5Tm9kZSA9IChOb2RlKXJlZ2lzdHJ5Tm9kZXMuZWxlbWVudEF0KDApOwotICAgICAgICAgICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSByZWdpc3RyeU5vZGUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICAgICAgICAgIG5vZGVNYW5hZ2VyLnNldFNlbGVjdGVkTm9kZUlkKHJlZ2lzdHJ5Tm9kZS5nZXROb2RlSWQoKSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIG9wZW4gdGhlIHJlZ2lzdHJ5IGlmIGl0IGlzIG5vdCBhbHJlYWR5IG9wZW5lZCBpbiB0aGUgVURESSBwZXJzcGVjdGl2ZQotICAgICAgICBPcGVuUmVnaXN0cnlBY3Rpb24gb3BlblJlZ0FjdGlvbiA9IG5ldyBPcGVuUmVnaXN0cnlBY3Rpb24oY29udHJvbGxlcl8pOwotCi0gICAgICAgIC8vIHBvcHVsYXRlIHRoZSBwcm9wZXJ0eSB0YWJsZQotICAgICAgICBIYXNodGFibGUgcHJvcGVydHlUYWJsZSA9IG9wZW5SZWdBY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotICAgICAgICBpZiAoVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nKHJlZ2lzdHJ5TmFtZSkpCi0gICAgICAgICAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlJFR0lTVFJZX05BTUUscmVnaXN0cnlOYW1lKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmIChWYWxpZGF0b3IudmFsaWRhdGVVUkwoaW5xdWlyeUFQSSkpCi0gICAgICAgICAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLklOUVVJUllfVVJMLGlucXVpcnlBUEkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKFZhbGlkYXRvci52YWxpZGF0ZVVSTChwdWJsaXNoQVBJKSkKLSAgICAgICAgICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUFVCTElTSF9VUkwscHVibGlzaEFQSSk7Ci0KLSAgICAgICAgaWYgKFZhbGlkYXRvci52YWxpZGF0ZVVSTChyZWdpc3RyYXRpb25VUkwpKQotICAgICAgICAgICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5SRUdJU1RSQVRJT05fVVJMLHJlZ2lzdHJhdGlvblVSTCk7Ci0KLSAgICAgICAgaWYgKGRlZmF1bHRMb2dpbiAhPSBudWxsKQotICAgICAgICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuVURESV9VU0VSTkFNRSwgZGVmYXVsdExvZ2luKTsKLQotICAgICAgICBpZiAoZGVmYXVsdFBhc3N3b3JkICE9IG51bGwpCi0gICAgICAgICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5VRERJX1BBU1NXT1JELCBkZWZhdWx0UGFzc3dvcmQpOwotICAgICAgICAgICAgCi0gICAgICAgIC8vIElmIHVzZXItZGVmaW5lZCBjYXRlZ29yeSBtZXRhZGF0YSBleGlzdHMsIHNlYXJjaCBhbmQgbWFrZSB0aGUgYXNzb2NpYXRpb25zLgotICAgICAgICBTdHJpbmdCdWZmZXIgZGlyZWN0b3J5QnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICBGYXZvcml0ZXNVRERJUmVnaXN0cnlGb2xkZXJFbGVtZW50LmZvcm1DYXRlZ29yaWVzRGlyZWN0b3J5KGRpcmVjdG9yeUJ1ZmZlcixjb250cm9sbGVyXy5nZXRTZXJ2bGV0RW5naW5lU3RhdGVMb2NhdGlvbigpLHJlZ2lzdHJ5TmFtZSk7Ci0gICAgICAgIEZpbGUgY2F0ZWdvcmllc0RpcmVjdG9yeSA9IG5ldyBGaWxlKGRpcmVjdG9yeUJ1ZmZlci50b1N0cmluZygpKTsKLSAgICAgICAgRmlsZVtdIGNhdGVnb3J5RmlsZXMgPSBudWxsOwotICAgICAgICBpZiAoY2F0ZWdvcmllc0RpcmVjdG9yeS5leGlzdHMoKSkKLSAgICAgICAgewotICAgICAgICAgIGNhdGVnb3J5RmlsZXMgPSBjYXRlZ29yaWVzRGlyZWN0b3J5Lmxpc3RGaWxlcygpOwotICAgICAgICAgIGlmIChjYXRlZ29yeUZpbGVzLmxlbmd0aCA+IDApCi0gICAgICAgICAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLkNIRUNLX1VTRVJfREVGSU5FRF9DQVRFR09SSUVTLEJvb2xlYW4uVFJVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBydW4gdGhlIGFjdGlvbgotICAgICAgICBpZiAoIW9wZW5SZWdBY3Rpb24ucnVuKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBpZiAodGF4b25vbWllcyAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgSGFzaHRhYmxlIHRheG9ub215VGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgICAgICAgZm9yIChpbnQgaT0wOyBpPHRheG9ub21pZXMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgVGF4b25vbXkgdGF4b25vbXkgPSB0YXhvbm9taWVzW2ldOwotICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSB0YXhvbm9teS5nZXROYW1lKCk7Ci0gICAgICAgICAgICBTdHJpbmcgdG1vZGVsS2V5ID0gdGF4b25vbXkuZ2V0VG1vZGVsS2V5KCk7Ci0gICAgICAgICAgICBDYXRlZ29yeU1vZGVsIGNhdE1vZGVsID0gbmV3IENhdGVnb3J5TW9kZWwoKTsKLSAgICAgICAgICAgIGNhdE1vZGVsLnNldERpc3BsYXlOYW1lKG5hbWUpOwotICAgICAgICAgICAgY2F0TW9kZWwuc2V0Q2F0ZWdvcnlLZXkobmFtZSk7Ci0gICAgICAgICAgICBjYXRNb2RlbC5zZXRUTW9kZWxLZXkodG1vZGVsS2V5KTsKLSAgICAgICAgICAgIGNhdE1vZGVsLmxvYWRGcm9tVGF4b25vbXkodGF4b25vbXkpOwotICAgICAgICAgICAgdGF4b25vbXlUYWJsZS5wdXQodG1vZGVsS2V5LCBjYXRNb2RlbCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudCkoY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCkuZ2V0TmF2aWdhdG9yTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpLmdldFRyZWVFbGVtZW50KCkpOwotICAgICAgICAgIHJlZ0VsZW1lbnQuc2V0VXNlckRlZmluZWRDYXRlZ29yaWVzKHRheG9ub215VGFibGUpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoY2F0ZWdvcnlGaWxlcyAhPSBudWxsICYmIGNhdGVnb3J5RmlsZXMubGVuZ3RoID4gMCkKLSAgICAgICAgewotICAgICAgICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudCkoY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCkuZ2V0TmF2aWdhdG9yTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpLmdldFRyZWVFbGVtZW50KCkpOwotICAgICAgICAgIHJlZ0VsZW1lbnQuc2V0Q2hlY2tGb3JVc2VyRGVmaW5lZENhdGVnb3JpZXModHJ1ZSk7Ci0gICAgICAgICAgcmVnRWxlbWVudC5nZXRVc2VyRGVmaW5lZENhdGVnb3JpZXMoKTsKLSAgICAgICAgICBsaW5rQ2F0ZWdvcnlNb2RlbHNXaXRoU2F2ZWREYXRhKHJlZ2lzdHJ5TmFtZSxyZWdFbGVtZW50LmdldFVzZXJEZWZpbmVkQ2F0ZWdvcmllcygpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGZpbmFsIHZvaWQgbGlua0NhdGVnb3J5TW9kZWxzV2l0aFNhdmVkRGF0YShTdHJpbmcgcmVnaXN0cnlOYW1lLEVudW1lcmF0aW9uIHVzZXJEZWZpbmVkQ2F0ZWdvcmllcykKLSAgICB7Ci0gICAgICBTdHJpbmdCdWZmZXIgZGlyZWN0b3J5QnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgRmF2b3JpdGVzVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudC5mb3JtQ2F0ZWdvcmllc0RpcmVjdG9yeShkaXJlY3RvcnlCdWZmZXIsY29udHJvbGxlcl8uZ2V0U2VydmxldEVuZ2luZVN0YXRlTG9jYXRpb24oKSxyZWdpc3RyeU5hbWUpOwotICAgICAgbGlua0NhdGVnb3J5TW9kZWxzV2l0aFNhdmVkRGF0YSh1c2VyRGVmaW5lZENhdGVnb3JpZXMsZGlyZWN0b3J5QnVmZmVyLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgZmluYWwgdm9pZCBsaW5rQ2F0ZWdvcnlNb2RlbHNXaXRoU2F2ZWREYXRhKEVudW1lcmF0aW9uIHVzZXJEZWZpbmVkQ2F0ZWdvcmllcyxTdHJpbmcgY2F0ZWdvcmllc0RpcmVjdG9yeSkKLSAgICB7Ci0gICAgICBGaWxlIGNhdGVnb3JpZXNEaXJlY3RvcnlGaWxlID0gbmV3IEZpbGUoY2F0ZWdvcmllc0RpcmVjdG9yeSk7Ci0gICAgICBGaWxlW10gY2F0ZWdvcnlGaWxlcyA9IG51bGw7Ci0gICAgICBpZiAoY2F0ZWdvcmllc0RpcmVjdG9yeUZpbGUuZXhpc3RzKCkpCi0gICAgICB7Ci0gICAgICAgIGNhdGVnb3J5RmlsZXMgPSBjYXRlZ29yaWVzRGlyZWN0b3J5RmlsZS5saXN0RmlsZXMoKTsgCi0gICAgICAgIGlmICh1c2VyRGVmaW5lZENhdGVnb3JpZXMgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHdoaWxlICh1c2VyRGVmaW5lZENhdGVnb3JpZXMuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgQ2F0ZWdvcnlNb2RlbCBjYXRlZ29yeU1vZGVsID0gKENhdGVnb3J5TW9kZWwpdXNlckRlZmluZWRDYXRlZ29yaWVzLm5leHRFbGVtZW50KCk7Ci0gICAgICAgICAgICBTdHJpbmcgY2F0ZWdvcnlLZXkgPSBjYXRlZ29yeU1vZGVsLmdldENhdGVnb3J5S2V5KCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpPTA7aTxjYXRlZ29yeUZpbGVzLmxlbmd0aDtpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBjYXRlZ29yeVByb3BlcnRpZXNGaWxlTmFtZSA9IGNhdGVnb3J5RmlsZXNbaV0uZ2V0TmFtZSgpOwotICAgICAgICAgICAgICBpbnQgbGFzdERvdFBvcyA9IGNhdGVnb3J5UHJvcGVydGllc0ZpbGVOYW1lLmxhc3RJbmRleE9mKCIuIik7Ci0gICAgICAgICAgICAgIFN0cmluZyBkZWNvZGVkQ2F0ZWdvcnlQcm9wZXJ0aWVzRmlsZU5hbWVCYXNlID0gVVJMVXRpbHMuZGVjb2RlKGNhdGVnb3J5UHJvcGVydGllc0ZpbGVOYW1lLnN1YnN0cmluZygwLGxhc3REb3RQb3MpKTsKLSAgICAgICAgICAgICAgaWYgKGxhc3REb3RQb3MgPiAwICYmIGNhdGVnb3J5UHJvcGVydGllc0ZpbGVOYW1lLmVuZHNXaXRoKCIucHJvcGVydGllcyIpICYmIGNhdGVnb3J5S2V5LmVxdWFscyhkZWNvZGVkQ2F0ZWdvcnlQcm9wZXJ0aWVzRmlsZU5hbWVCYXNlKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNhdGVnb3J5TW9kZWwuc2V0RGVmYXVsdERhdGFGaWxlKGNhdGVnb3J5RmlsZXNbaV0uZ2V0QWJzb2x1dGVQYXRoKCkpOwotICAgICAgICAgICAgICAgIGNhdGVnb3J5TW9kZWwubG9hZEZyb21EZWxpbWl0ZXJGaWxlKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gICAgICAgICAgICAKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgVmVjdG9yIGdldFJlZ2lzdHJ5Tm9kZXNCeUlucXVpcnlVUkwoU3RyaW5nIGlucXVpcnlVUkwpCi0gICAgewotICAgICAgVmVjdG9yIHJlZ2lzdHJ5Tm9kZXMgPSBudWxsOwotICAgICAgTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlciA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgICAgIFVERElNYWluTm9kZSB1ZGRpTWFpbk5vZGUgPSAoVURESU1haW5Ob2RlKShuYXZpZ2F0b3JNYW5hZ2VyLmdldFJvb3ROb2RlKCkpOwotICAgICAgVmVjdG9yIGNoaWxkTm9kZXMgPSB1ZGRpTWFpbk5vZGUuZ2V0Q2hpbGROb2RlcygpOwotICAgICAgZm9yIChpbnQgaT0wO2k8Y2hpbGROb2Rlcy5zaXplKCk7aSsrKQotICAgICAgewotICAgICAgICBOb2RlIGNoaWxkTm9kZSA9IChOb2RlKWNoaWxkTm9kZXMuZWxlbWVudEF0KGkpOwotICAgICAgICBpZiAoY2hpbGROb2RlIGluc3RhbmNlb2YgUmVnaXN0cnlOb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KWNoaWxkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgICAgIFN0cmluZyBjdXJySW5xdWlyeVVSTCA9IHJlZ0VsZW1lbnQuZ2V0SW5xdWlyeVVSTCgpOwotICAgICAgICAgIGlmIChjdXJySW5xdWlyeVVSTCAhPSBudWxsICYmIGN1cnJJbnF1aXJ5VVJMLmVxdWFscyhpbnF1aXJ5VVJMKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocmVnaXN0cnlOb2RlcyA9PSBudWxsKQotICAgICAgICAgICAgICByZWdpc3RyeU5vZGVzID0gbmV3IFZlY3RvcigpOwotICAgICAgICAgICAgcmVnaXN0cnlOb2Rlcy5hZGRFbGVtZW50KGNoaWxkTm9kZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9ICAgICAgICAKLSAgICAgIH0KLSAgICAgIHJldHVybiByZWdpc3RyeU5vZGVzOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIEFkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uIG5ld0FjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpIHsKLSAgICAgICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gY29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlKCkuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgICAgRmF2b3JpdGVzRm9sZGVyRWxlbWVudCBmYXZvcml0ZXNGb2xkZXJFbGVtZW50ID0gbnVsbDsKLQotICAgICAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgRmF2b3JpdGVzRm9sZGVyRWxlbWVudCkgewotICAgICAgICAgICAgZmF2b3JpdGVzRm9sZGVyRWxlbWVudCA9IChGYXZvcml0ZXNGb2xkZXJFbGVtZW50KXNlbGVjdGVkRWxlbWVudDsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBGYXZvcml0ZXNFbGVtZW50KSB7Ci0gICAgICAgICAgICBmYXZvcml0ZXNGb2xkZXJFbGVtZW50ID0gKChGYXZvcml0ZXNFbGVtZW50KXNlbGVjdGVkRWxlbWVudCkuZ2V0UGFyZW50Rm9sZGVyRWxlbWVudCgpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyByZXR1cm4gYW4gaW5zdGFuY2Ugb2YgQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24gZGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mCi0gICAgICAgIC8vIGZhdm9yaXRlcyBmb2xkZXIgZWxlbWVudCBiZWluZyBzZWxlY3RlZC4KLSAgICAgICAgaWYgKGZhdm9yaXRlc0ZvbGRlckVsZW1lbnQgaW5zdGFuY2VvZiBGYXZvcml0ZXNVRERJUmVnaXN0cnlGb2xkZXJFbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuIG5ldyBBZGRSZWdpc3RyeVRvVURESVBlcnNwZWN0aXZlQWN0aW9uKGNvbnRyb2xsZXIpOwotICAgICAgICBlbHNlIGlmIChmYXZvcml0ZXNGb2xkZXJFbGVtZW50IGluc3RhbmNlb2YgRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeUZvbGRlckVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm4gbmV3IEFkZFVzZXJEZWZSZWdpc3RyeVRvVURESVBlcnNwZWN0aXZlQWN0aW9uKGNvbnRyb2xsZXIpOwotICAgICAgICBlbHNlIGlmIChmYXZvcml0ZXNGb2xkZXJFbGVtZW50IGluc3RhbmNlb2YgRmF2b3JpdGVzVURESUJ1c2luZXNzRm9sZGVyRWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybiBuZXcgQWRkQnVzaW5lc3NUb1VERElQZXJzcGVjdGl2ZUFjdGlvbihjb250cm9sbGVyKTsKLSAgICAgICAgZWxzZSBpZiAoZmF2b3JpdGVzRm9sZGVyRWxlbWVudCBpbnN0YW5jZW9mIEZhdm9yaXRlc1VERElTZXJ2aWNlRm9sZGVyRWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybiBuZXcgQWRkU2VydmljZVRvVURESVBlcnNwZWN0aXZlQWN0aW9uKGNvbnRyb2xsZXIpOwotICAgICAgICBlbHNlIGlmIChmYXZvcml0ZXNGb2xkZXJFbGVtZW50IGluc3RhbmNlb2YgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VGb2xkZXJFbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuIG5ldyBBZGRTZXJ2aWNlSW50ZXJmYWNlVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24oY29udHJvbGxlcik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvQWRkVXNlckRlZlJlZ2lzdHJ5VG9VRERJUGVyc3BlY3RpdmVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvQWRkVXNlckRlZlJlZ2lzdHJ5VG9VRERJUGVyc3BlY3RpdmVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzgwOTUzOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL0FkZFVzZXJEZWZSZWdpc3RyeVRvVURESVBlcnNwZWN0aXZlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC5GYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLkZhdm9yaXRlc1BlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215OwotCi1wdWJsaWMgY2xhc3MgQWRkVXNlckRlZlJlZ2lzdHJ5VG9VRERJUGVyc3BlY3RpdmVBY3Rpb24gZXh0ZW5kcyBBZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbgotewotICBwdWJsaWMgQWRkVXNlckRlZlJlZ2lzdHJ5VG9VRERJUGVyc3BlY3RpdmVBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBleGVjdXRlU2luZ2xlTGlua0FjdGlvbigpCi0gIHsKLSAgICBpbnQgbm9kZUlEID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gZmF2UGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldE5vZGUobm9kZUlEKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlFbGVtZW50KXNlbGVjdGVkRWxlbWVudDsKLSAgICBTdHJpbmcgcmVnaXN0cnlOYW1lID0gcmVnRWxlbWVudC5nZXROYW1lKCk7Ci0gICAgU3RyaW5nIGlucXVpcnlBUEkgPSByZWdFbGVtZW50LmdldElucXVpcnlVUkwoKTsKLSAgICBTdHJpbmcgcHVibGlzaEFQSSA9IHJlZ0VsZW1lbnQuZ2V0UHVibGlzaFVSTCgpOwotICAgIFN0cmluZyBkZWZhdWx0TG9naW4gPSByZWdFbGVtZW50LmdldERlZmF1bHRMb2dpbigpOwotICAgIFN0cmluZyBkZWZhdWx0UGFzc3dvcmQgPSByZWdFbGVtZW50LmdldERlZmF1bHRQYXNzd29yZCgpOwotICAgIFRheG9ub215W10gdGF4b25vbWllcyA9IHJlZ0VsZW1lbnQuZ2V0VGF4b25vbWllcygpOwotICAgIGlmICghY3JlYXRlUmVnaXN0cnlJblVERElQZXJzcGVjdGl2ZShpbnF1aXJ5QVBJLCBwdWJsaXNoQVBJLCByZWdpc3RyeU5hbWUsIG51bGwsIGRlZmF1bHRMb2dpbiwgZGVmYXVsdFBhc3N3b3JkLCB0YXhvbm9taWVzLCBmYWxzZSkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuYWRkTWVzc2FnZShmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19BRERfVE9fVURESV9QRVJTUEVDVElWRV9TVUNDRVNTRlVMIiwgcmVnaXN0cnlOYW1lKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvQWRkV1NJTFRvV1NJTFBlcnNwZWN0aXZlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL0FkZFdTSUxUb1dTSUxQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMWI1OGM5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvQWRkV1NJTFRvV1NJTFBlcnNwZWN0aXZlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLkZhdm9yaXRlc1dTSUxFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuRmF2b3JpdGVzUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuT3BlbldTSUxBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLldzaWxBY3Rpb25JbnB1dHM7Ci0KLXB1YmxpYyBjbGFzcyBBZGRXU0lMVG9XU0lMUGVyc3BlY3RpdmVBY3Rpb24gZXh0ZW5kcyBNdWx0aXBsZUxpbmtBY3Rpb24KLXsKLSAgcHVibGljIEFkZFdTSUxUb1dTSUxQZXJzcGVjdGl2ZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJRCwgaW50IHRvb2xJRCwgaW50IHZpZXdJRCwgaW50IHZpZXdUb29sSUQpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoImZhdm9yaXRlcy9hY3Rpb25zL0FkZFdTSUxUb1dTSUxQZXJzcGVjdGl2ZUFjdGlvbkpTUC5qc3A/Iik7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChub2RlSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlRPT0xJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCh0b29sSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCh2aWV3SUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdUT09MSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQodmlld1Rvb2xJRCk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEJhc2VBY3Rpb25MaW5rKCkKLSAgewotICAgIHJldHVybiAiZmF2b3JpdGVzL2FjdGlvbnMvQWRkV1NJTFRvV1NJTFBlcnNwZWN0aXZlQWN0aW9uSlNQLmpzcCI7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBleGVjdXRlU2luZ2xlTGlua0FjdGlvbigpCi0gIHsKLSAgICBpbnQgbm9kZUlEID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKSBwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IGZhdlBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXROb2RlKG5vZGVJRCk7Ci0gICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgRmF2b3JpdGVzV1NJTEVsZW1lbnQgd3NpbEVsZW1lbnQgPSAoRmF2b3JpdGVzV1NJTEVsZW1lbnQpIHNlbGVjdGVkRWxlbWVudDsKLSAgICBTdHJpbmcgd3NpbFVSTCA9IHdzaWxFbGVtZW50LmdldFdzaWxVcmwoKTsKLSAgICBPcGVuV1NJTEFjdGlvbiBvcGVuV1NJTEFjdGlvbiA9IG5ldyBPcGVuV1NJTEFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgSGFzaHRhYmxlIHByb3BlcnR5VGFibGUgPSBvcGVuV1NJTEFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoV3NpbEFjdGlvbklucHV0cy5XU0lMX1VSTCwgd3NpbFVSTCk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoV3NpbEFjdGlvbklucHV0cy5XU0lMX0lOU1BFQ1RJT05fVFlQRSwgU3RyaW5nLnZhbHVlT2YoV3NpbEFjdGlvbklucHV0cy5XU0lMX0RFVEFJTFMpKTsKLSAgICBib29sZWFuIGFjdGlvblJlc3VsdCA9IG9wZW5XU0lMQWN0aW9uLnJ1bigpOwotICAgIGlmIChhY3Rpb25SZXN1bHQpCi0gICAgICBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX0FERF9XU0lMX1RPX1dTSUxfUEVSU1BFQ1RJVkVfU1VDQ0VTU0ZVTCIsIHdzaWxVUkwpKTsKLSAgICBlbHNlCi0gICAgICBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9BRERfV1NJTF9UT19XU0lMX1BFUlNQRUNUSVZFIiwgd3NpbFVSTCkpOwotICAgIHJldHVybiBhY3Rpb25SZXN1bHQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGE1MjhkOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc0FkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC5GYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS5GYXZvcml0ZXNQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy5PcGVuV1NETEFjdGlvbjsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc0FkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uIGV4dGVuZHMgTXVsdGlwbGVMaW5rQWN0aW9uCi17Ci0gIHB1YmxpYyBGYXZvcml0ZXNBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJRCwgaW50IHRvb2xJRCwgaW50IHZpZXdJRCwgaW50IHZpZXdUb29sSUQpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoImZhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc0FkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uSlNQLmpzcD8iKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKG5vZGVJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVE9PTElEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKHRvb2xJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVklFV0lEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKHZpZXdJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVklFV1RPT0xJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCh2aWV3VG9vbElEKTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QmFzZUFjdGlvbkxpbmsoKQotICB7Ci0gICAgcmV0dXJuICJmYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbkpTUC5qc3AiOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gZXhlY3V0ZVNpbmdsZUxpbmtBY3Rpb24oKQotICB7Ci0gICAgaW50IG5vZGVJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZykgcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBmYXZQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0Tm9kZShub2RlSUQpOwotICAgIEZhdm9yaXRlc1dTRExTZXJ2aWNlRWxlbWVudCB3c2RsRWxlbWVudCA9IChGYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQpIHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIFN0cmluZyB3c2RsVXJsID0gd3NkbEVsZW1lbnQuZ2V0V3NkbFVybCgpOwotICAgIE9wZW5XU0RMQWN0aW9uIG9wZW5XU0RMQWN0aW9uID0gbmV3IE9wZW5XU0RMQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICBIYXNodGFibGUgcHJvcGVydHlUYWJsZSA9IG9wZW5XU0RMQWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV1NETF9VUkwsIHdzZGxVcmwpOwotICAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gb3BlbldTRExBY3Rpb24ucnVuKCk7Ci0gICAgaWYgKGFjdGlvblJlc3VsdCkKLSAgICAgIGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2UoZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fQUREX1dTRExfVE9fV1NETF9QRVJTUEVDVElWRV9TVUNDRVNTRlVMIiwgd3NkbFVybCkpOwotICAgIGVsc2UKLSAgICAgIGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2UoZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0FERF9XU0RMX1RPX1dTRExfUEVSU1BFQ1RJVkUiLCB3c2RsVXJsKSk7Ci0gICAgcmV0dXJuIGFjdGlvblJlc3VsdDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2YzFlM2QuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9uczsKLQotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5JbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuV1NETEZpbGVOYW1lSGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzV1NETFNlcnZpY2VFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuRmF2b3JpdGVzUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnV0aWwuVWRkaTRqSGVscGVyOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uIGV4dGVuZHMgSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uIHsKLQotICAgIHByaXZhdGUgRGVmaW5pdGlvbiBkZWZfOwotICAgIHByaXZhdGUgU3RyaW5nIHdzZGxGaWxlTmFtZV87Ci0KLSAgICBwdWJsaWMgRmF2b3JpdGVzSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikgewotICAgICAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSWQsaW50IHRvb2xJZCxpbnQgdmlld0lkLGludCB2aWV3VG9vbElkKQotICAgIHsKLSAgICAgIHJldHVybiBJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWQsdG9vbElkLHZpZXdJZCx2aWV3VG9vbElkLCJmYXZvcml0ZXMvYWN0aW9ucy9GYXZvcnRpZXNJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb25KU1AuanNwIik7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gd3JpdGUoT3V0cHV0U3RyZWFtIG9zKSB7Ci0gICAgICAgIGlmIChkZWZfICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiB3cml0ZVdTRExEZWZpbml0aW9uKG9zLCBkZWZfKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVmYXVsdEZpbGVOYW1lKCkgewotICAgICAgICByZXR1cm4gd3NkbEZpbGVOYW1lXzsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBydW4oKSB7Ci0gICAgICAgIGludCBub2RlSUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLQotICAgICAgICAvLyByZXR1cm4gZmFsc2UgaWYgbm9kZUlEID09IDAsIHRoYXQgaXMgdGhlIG1haW4gbm9kZQotICAgICAgICBpZiAobm9kZUlEID09IDApCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgICAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IGZhdlBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0Tm9kZShub2RlSUQpOwotICAgICAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLQotICAgICAgICBTdHJpbmcgd3NkbFVSTCA9ICgoRmF2b3JpdGVzV1NETFNlcnZpY2VFbGVtZW50KXNlbGVjdGVkRWxlbWVudCkuZ2V0V3NkbFVybCgpOwotICAgICAgICB3c2RsRmlsZU5hbWVfID0gV1NETEZpbGVOYW1lSGVscGVyLmdldFdTRExGaWxlTmFtZSh3c2RsVVJMKTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICBkZWZfID0gKG5ldyBVZGRpNGpIZWxwZXIoKSkuZ2V0V1NETERlZmluaXRpb24od3NkbFVSTCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKFRocm93YWJsZSB0KSB7Ci0gICAgICAgICAgICBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKHQuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRWYXIoKQotICAgIHsKLSAgICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpLmdldFN0YXR1c0NvbnRlbnRWYXIoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRQYWdlKCkKLSAgICB7Ci0gICAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKS5nZXRTdGF0dXNDb250ZW50UGFnZSgpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTNmNTFlNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc0ltcG9ydFRvV29ya2JlbmNoQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5JbXBvcnRUb1dvcmtiZW5jaEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLkZhdm9yaXRlc1BlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNJbXBvcnRUb1dvcmtiZW5jaEFjdGlvbiBleHRlbmRzIEltcG9ydFRvV29ya2JlbmNoQWN0aW9uIHsKLSAgICBwdWJsaWMgRmF2b3JpdGVzSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIH0KLQotICAgIHB1YmxpYyBGb3JtVG9vbCBnZXRTZWxlY3RlZEZvcm1Ub29sKCkgewotICAgICAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZvcml0ZXNQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgICAgIHJldHVybiAoRm9ybVRvb2wpZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpOwotICAgIH0KLQotICAgIHB1YmxpYyBJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24gbmV3SW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uKCkgewotICAgICAgICBGYXZvcml0ZXNJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24gYWN0aW9uID0gbmV3IEZhdm9yaXRlc0ltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgICAgIEhhc2h0YWJsZSB0YWJsZSA9IGFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0KLSAgICAgICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2b3JpdGVzUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgICAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IGZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0KLSAgICAgICAgdGFibGUucHV0KEFjdGlvbklucHV0cy5OT0RFSUQsIFN0cmluZy52YWx1ZU9mKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSkpOwotICAgICAgICB0YWJsZS5wdXQoQWN0aW9uSW5wdXRzLlZJRVdJRCwgU3RyaW5nLnZhbHVlT2Yoc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpKSk7Ci0KLSAgICAgICAgcmV0dXJuIGFjdGlvbjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRWYXIoKQotICAgIHsKLSAgICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpLmdldFN0YXR1c0NvbnRlbnRWYXIoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRQYWdlKCkKLSAgICB7Ci0gICAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKS5nZXRTdGF0dXNDb250ZW50UGFnZSgpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxNmZhN2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5MYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzV1NETFNlcnZpY2VFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuRmF2b3JpdGVzUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc0xhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24gZXh0ZW5kcyBMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uIHsKLQotICAgIHB1YmxpYyBGYXZvcml0ZXNMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikgewotICAgICAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIExhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24gbmV3QWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikgewotICAgICAgICByZXR1cm4gbmV3IEZhdm9yaXRlc0xhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24oY29udHJvbGxlcik7Ci0gICAgfQotCi0gICAgcHVibGljIEZvcm1Ub29sIGdldFNlbGVjdGVkRm9ybVRvb2woKSB7Ci0gICAgICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdm9yaXRlc1BlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICAgICAgcmV0dXJuIChGb3JtVG9vbClmYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gcnVuKCkgewotICAgICAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZvcml0ZXNQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICAgICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBGYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm4gbGF1bmNoV2l6YXJkKCgoRmF2b3JpdGVzV1NETFNlcnZpY2VFbGVtZW50KXNlbGVjdGVkRWxlbWVudCkuZ2V0V3NkbFVybCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRWYXIoKQotICAgIHsKLSAgICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpLmdldFN0YXR1c0NvbnRlbnRWYXIoKTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTdGF0dXNDb250ZW50UGFnZSgpCi0gICAgewotICAgICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCkuZ2V0U3RhdHVzQ29udGVudFBhZ2UoKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc1Jlc3RvcmVEZWZhdWx0RmF2b3JpdGVzQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc1Jlc3RvcmVEZWZhdWx0RmF2b3JpdGVzQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkMDUzMjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNSZXN0b3JlRGVmYXVsdEZhdm9yaXRlc0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkxpbmtBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC5GYXZvcml0ZXNGb2xkZXJFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLkZhdm9yaXRlc01haW5FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuRmF2b3JpdGVzUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzUmVzdG9yZURlZmF1bHRGYXZvcml0ZXNBY3Rpb24gZXh0ZW5kcyBMaW5rQWN0aW9uCi17Ci0gIHB1YmxpYyBGYXZvcml0ZXNSZXN0b3JlRGVmYXVsdEZhdm9yaXRlc0FjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJRCwgaW50IHRvb2xJRCwgaW50IHZpZXdJRCwgaW50IHZpZXdUb29sSUQpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoImZhdm9yaXRlcy9hY3Rpb25zL1Jlc3RvcmVEZWZhdWx0RmF2b3JpdGVzQ29uZmlybUpTUC5qc3AiKTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc0xpbmtQYXJhbWV0ZXJzKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0KQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gZmF2UGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIG1haW5Ob2RlID0gbm9kZU1hbmFnZXIuZ2V0Um9vdE5vZGUoKTsKLSAgICBGYXZvcml0ZXNNYWluRWxlbWVudCBtYWluRWxlbWVudCA9IChGYXZvcml0ZXNNYWluRWxlbWVudCltYWluTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gbWFpbkVsZW1lbnQucmVzdG9yZUZhdm9yaXRlc0RlZmF1bHQoKTsKLSAgICBpZiAoYWN0aW9uUmVzdWx0KQotICAgIHsKLSAgICAgIFZlY3RvciBmb2xkZXJOb2RlcyA9IG1haW5Ob2RlLmdldENoaWxkTm9kZXMoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZm9sZGVyTm9kZXMuc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIE5vZGUgZm9sZGVyTm9kZSA9IChOb2RlKWZvbGRlck5vZGVzLmVsZW1lbnRBdChpKTsKLSAgICAgICAgVHJlZUVsZW1lbnQgdHJlZUVsZW1lbnQgPSBmb2xkZXJOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICAgIGlmICh0cmVlRWxlbWVudCBpbnN0YW5jZW9mIEZhdm9yaXRlc0ZvbGRlckVsZW1lbnQpCi0gICAgICAgIHsKLSAgICAgICAgICBGYXZvcml0ZXNGb2xkZXJFbGVtZW50IGZvbGRlckVsZW1lbnQgPSAoRmF2b3JpdGVzRm9sZGVyRWxlbWVudCl0cmVlRWxlbWVudDsKLSAgICAgICAgICBmb2xkZXJFbGVtZW50LnJlbW92ZUFsbEZhdm9yaXRlcyhjb250cm9sbGVyXy5nZXRTZXJ2bGV0RW5naW5lU3RhdGVMb2NhdGlvbigpKTsKLSAgICAgICAgICBmb2xkZXJFbGVtZW50LmluaXQobWFpbkVsZW1lbnQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX0ZBVk9SSVRFU19SRVNUT1JFRF9UT19ERUZBVUxUIikpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9PUEVOX0ZBVk9SSVRFU19CQUNLVVAiKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc1RvZ2dsZU5vZGVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzVG9nZ2xlTm9kZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOGU5OTIzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzVG9nZ2xlTm9kZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuVG9nZ2xlTm9kZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLlRvb2xUeXBlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNUb2dnbGVOb2RlQWN0aW9uIGV4dGVuZHMgVG9nZ2xlTm9kZUFjdGlvbiB7Ci0gICAgcHVibGljIEZhdm9yaXRlc1RvZ2dsZU5vZGVBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRyb2xsZXIsIGNvbnRyb2xsZXIuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSWQsIGJvb2xlYW4gb3BlbikgewotICAgICAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoImZhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc1RvZ2dsZU5vZGVBY3Rpb25KU1AuanNwPyIpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQobm9kZUlkKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk9QRU4pOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgICAgICBpZiAob3BlbikKLSAgICAgICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5PUEVOX05PREUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuQ0xPU0VfTk9ERSk7Ci0gICAgICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rRm9ySGlzdG9yeSgpIHsKLSAgICAgICAgVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIgPSB0b2dnbGVkTm9kZV8uZ2V0VG9vbE1hbmFnZXIoKTsKLSAgICAgICAgVG9vbCBzZWxlY3RlZFRvb2wgPSB0b29sTWFuYWdlci5nZXRTZWxlY3RlZFRvb2woKTsKLSAgICAgICAgaW50IG5vZGVJZCA9IHRvZ2dsZWROb2RlXy5nZXROb2RlSWQoKTsKLSAgICAgICAgaW50IHRvb2xJZCA9IHNlbGVjdGVkVG9vbC5nZXRUb29sSWQoKTsKLSAgICAgICAgaW50IHZpZXdJZCA9IHRvZ2dsZWROb2RlXy5nZXRWaWV3SWQoKTsKLSAgICAgICAgaW50IHZpZXdUb29sSWQgPSB0b2dnbGVkTm9kZV8uZ2V0Vmlld1Rvb2xJZCgpOwotICAgICAgICBpZiAoc2VsZWN0ZWRUb29sLmdldFRvb2xUeXBlKCkgIT0gVG9vbFR5cGVzLkFDVElPTikKLSAgICAgICAgICAgIHJldHVybiBTZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlkLCB0b29sSWQsIHZpZXdJZCwgdmlld1Rvb2xJZCwgdHJ1ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBTZWxlY3RGYXZvcml0ZXNOb2RlQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlkLCB0cnVlKTsKLSAgICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUcmVlQ29udGVudFZhcigpCi0gIHsKLSAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKS5nZXRUcmVlQ29udGVudFZhcigpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUcmVlQ29udGVudFBhZ2UoKQotICB7Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCkuZ2V0VHJlZUNvbnRlbnRQYWdlKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKQotICB7Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCkuZ2V0UHJvcGVydGllc0NvbnRhaW5lclZhcigpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyUGFnZSgpCi0gIHsKLSAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKS5nZXRQcm9wZXJ0aWVzQ29udGFpbmVyUGFnZSgpOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgaW50IGdldFBlcnNwZWN0aXZlSWQoKQotICB7Ci0gICAgcmV0dXJuIEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9GQVZPUklURVM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvTXVsdGlwbGVMaW5rQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL011bHRpcGxlTGlua0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODBkZWZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvTXVsdGlwbGVMaW5rQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9uczsKLQotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuTGlua0FjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyLklUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyLk1hc3NOb2RlSWRUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy5GYXZvcml0ZXNBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBNdWx0aXBsZUxpbmtBY3Rpb24gZXh0ZW5kcyBMaW5rQWN0aW9uCi17Ci0gIHB1YmxpYyBNdWx0aXBsZUxpbmtBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzTGlua1BhcmFtZXRlcnMoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpCi0gIHsKLSAgICBTdHJpbmcgaXNNdWx0aXBsZUxpbmtBY3Rpb24gPSByZXF1ZXN0LmdldFBhcmFtZXRlcihGYXZvcml0ZXNBY3Rpb25JbnB1dHMuTVVMVElQTEVfTElOS19BQ1RJT04pOwotICAgIGlmIChpc011bHRpcGxlTGlua0FjdGlvbiAhPSBudWxsKQotICAgIHsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChGYXZvcml0ZXNBY3Rpb25JbnB1dHMuTVVMVElQTEVfTElOS19BQ1RJT04sIGlzTXVsdGlwbGVMaW5rQWN0aW9uKTsKLSAgICAgIHJldHVybiBwcm9jZXNzTXVsdGlwbGVMaW5rQWN0aW9uUGFyYW1ldGVycyhyZXF1ZXN0KTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHByb3BlcnR5VGFibGVfLnJlbW92ZShGYXZvcml0ZXNBY3Rpb25JbnB1dHMuTVVMVElQTEVfTElOS19BQ1RJT04pOwotICAgICAgU3RyaW5nIG5vZGVJRFN0cmluZyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgICAgU3RyaW5nIHRvb2xJRFN0cmluZyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5UT09MSUQpOwotICAgICAgU3RyaW5nIHZpZXdJRFN0cmluZyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5WSUVXSUQpOwotICAgICAgU3RyaW5nIHZpZXdUb29sSURTdHJpbmcgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuVklFV1RPT0xJRCk7Ci0gICAgICBpZiAobm9kZUlEU3RyaW5nICE9IG51bGwpCi0gICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuTk9ERUlELCBub2RlSURTdHJpbmcpOwotICAgICAgaWYgKHRvb2xJRFN0cmluZyAhPSBudWxsKQotICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLlRPT0xJRCwgdG9vbElEU3RyaW5nKTsKLSAgICAgIGlmICh2aWV3SURTdHJpbmcgIT0gbnVsbCkKLSAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5WSUVXSUQsIHZpZXdJRFN0cmluZyk7Ci0gICAgICBpZiAodmlld1Rvb2xJRFN0cmluZyAhPSBudWxsKQotICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLlZJRVdUT09MSUQsIHZpZXdUb29sSURTdHJpbmcpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc011bHRpcGxlTGlua0FjdGlvblBhcmFtZXRlcnMoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpCi0gIHsKLSAgICBTdHJpbmdbXSBtYXNzQWN0aW9uTm9kZUlEcyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyVmFsdWVzKEZhdm9yaXRlc0FjdGlvbklucHV0cy5NQVNTX0FDVElPTl9OT0RFX0lEKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoRmF2b3JpdGVzQWN0aW9uSW5wdXRzLk1BU1NfQUNUSU9OX05PREVfSUQsIG1hc3NBY3Rpb25Ob2RlSURzKTsKLSAgICBpZiAobWFzc0FjdGlvbk5vZGVJRHMubGVuZ3RoID09IDApCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgSVRyYW5zZm9ybWVyW10gZ2V0VHJhbnNmb3JtZXJzKCkKLSAgewotICAgIHJldHVybiBuZXcgSVRyYW5zZm9ybWVyW10ge25ldyBNYXNzTm9kZUlkVHJhbnNmb3JtZXIoY29udHJvbGxlcl8sIEZhdm9yaXRlc0FjdGlvbklucHV0cy5NQVNTX0FDVElPTl9OT0RFX0lEKX07Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc011bHRpcGxlTGlua0FjdGlvbigpCi0gIHsKLSAgICByZXR1cm4gcHJvcGVydHlUYWJsZV8uY29udGFpbnNLZXkoRmF2b3JpdGVzQWN0aW9uSW5wdXRzLk1VTFRJUExFX0xJTktfQUNUSU9OKTsKLSAgfQotCi0gIHByb3RlY3RlZCBTdHJpbmdbXSBnZXRNYXNzQWN0aW9uTm9kZUlkcygpCi0gIHsKLSAgICBPYmplY3Qgb2JqZWN0ID0gcHJvcGVydHlUYWJsZV8uZ2V0KEZhdm9yaXRlc0FjdGlvbklucHV0cy5NQVNTX0FDVElPTl9OT0RFX0lEKTsKLSAgICBpZiAob2JqZWN0ID09IG51bGwpCi0gICAgICByZXR1cm4gbmV3IFN0cmluZ1swXTsKLSAgICBlbHNlIGlmIChvYmplY3QuZ2V0Q2xhc3MoKS5pc0FycmF5KCkpCi0gICAgICByZXR1cm4gKFN0cmluZ1tdKW9iamVjdDsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gbmV3IFN0cmluZ1tdIHsoU3RyaW5nKW9iamVjdH07Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgcmV0dXJuIChpc011bHRpcGxlTGlua0FjdGlvbigpKSA/IGV4ZWN1dGVNdWx0aXBsZUxpbmtBY3Rpb24oKSA6IGV4ZWN1dGVTaW5nbGVMaW5rQWN0aW9uKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBleGVjdXRlTXVsdGlwbGVMaW5rQWN0aW9uKCkKLSAgewotICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0gICAgU3RyaW5nW10gbWFzc0FjdGlvbk5vZGVJRHMgPSBnZXRNYXNzQWN0aW9uTm9kZUlkcygpOwotICAgIGlmIChtYXNzQWN0aW9uTm9kZUlEcyAhPSBudWxsKQotICAgIHsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWFzc0FjdGlvbk5vZGVJRHMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuTk9ERUlELCBtYXNzQWN0aW9uTm9kZUlEc1tpXSk7Ci0gICAgICAgIGlmIChleGVjdXRlU2luZ2xlTGlua0FjdGlvbigpKQotICAgICAgICAgIHJlc3VsdCA9IHRydWU7Ci0gICAgICB9Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5yZW1vdmUoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYWJzdHJhY3QgYm9vbGVhbiBleGVjdXRlU2luZ2xlTGlua0FjdGlvbigpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9SZW1vdmVGYXZvcml0ZXNBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvUmVtb3ZlRmF2b3JpdGVzQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4YTMxODEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9SZW1vdmVGYXZvcml0ZXNBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuRmF2b3JpdGVzTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC5GYXZvcml0ZXNGb2xkZXJFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLkZhdm9yaXRlc01haW5FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuRmF2b3JpdGVzUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgUmVtb3ZlRmF2b3JpdGVzQWN0aW9uIGV4dGVuZHMgTXVsdGlwbGVMaW5rQWN0aW9uCi17Ci0gIHB1YmxpYyBSZW1vdmVGYXZvcml0ZXNBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSUQsIGludCB0b29sSUQsIGludCB2aWV3SUQsIGludCB2aWV3VG9vbElEKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJmYXZvcml0ZXMvYWN0aW9ucy9SZW1vdmVGYXZvcml0ZXNBY3Rpb25KU1AuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQobm9kZUlEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5UT09MSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQodG9vbElEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5WSUVXSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQodmlld0lEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5WSUVXVE9PTElEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKHZpZXdUb29sSUQpOwotICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRCYXNlQWN0aW9uTGluaygpCi0gIHsKLSAgICByZXR1cm4gImZhdm9yaXRlcy9hY3Rpb25zL1JlbW92ZUZhdm9yaXRlc0FjdGlvbkpTUC5qc3AiOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gZXhlY3V0ZVNpbmdsZUxpbmtBY3Rpb24oKQotICB7Ci0gICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gZmF2UGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBTdHJpbmcgbm9kZUlEU3RyaW5nID0gKFN0cmluZykgcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgIGludCBub2RlSUQ7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgbm9kZUlEID0gSW50ZWdlci5wYXJzZUludChub2RlSURTdHJpbmcpOwotICAgIH0KLSAgICBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSkKLSAgICB7Ci0gICAgICBub2RlSUQgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGVJZCgpOwotICAgIH0KLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldE5vZGUobm9kZUlEKTsKLSAgICBpZiAoc2VsZWN0ZWROb2RlID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgU3RyaW5nIHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5ID0gY29udHJvbGxlcl8uZ2V0U2VydmxldEVuZ2luZVN0YXRlTG9jYXRpb24oKTsKLSAgICBib29sZWFuIGFjdGlvblJlc3VsdDsKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgRmF2b3JpdGVzRWxlbWVudCkKLSAgICAgIGFjdGlvblJlc3VsdCA9ICgoRmF2b3JpdGVzRWxlbWVudCkgc2VsZWN0ZWRFbGVtZW50KS5nZXRQYXJlbnRGb2xkZXJFbGVtZW50KCkucmVtb3ZlRmF2b3JpdGVCeU5vZGVJRChub2RlSUQsIHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5KTsKLSAgICBlbHNlIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBGYXZvcml0ZXNGb2xkZXJFbGVtZW50KQotICAgICAgYWN0aW9uUmVzdWx0ID0gKChGYXZvcml0ZXNGb2xkZXJFbGVtZW50KSBzZWxlY3RlZEVsZW1lbnQpLnJlbW92ZUFsbEZhdm9yaXRlcyhwbHVnaW5NZXRhZGF0YURpcmVjdG9yeSk7Ci0gICAgZWxzZSBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgRmF2b3JpdGVzTWFpbkVsZW1lbnQpCi0gICAgewotICAgICAgRW51bWVyYXRpb24gZTsKLSAgICAgIEZhdm9yaXRlc01haW5FbGVtZW50IG1haW5FbGVtZW50ID0gKEZhdm9yaXRlc01haW5FbGVtZW50KSBzZWxlY3RlZEVsZW1lbnQ7Ci0gICAgICBlID0gbWFpbkVsZW1lbnQuZ2V0RWxlbWVudHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1dTSUxfRk9MREVSX05PREUpOwotICAgICAgYWN0aW9uUmVzdWx0ID0gKChGYXZvcml0ZXNGb2xkZXJFbGVtZW50KSBlLm5leHRFbGVtZW50KCkpLnJlbW92ZUFsbEZhdm9yaXRlcyhwbHVnaW5NZXRhZGF0YURpcmVjdG9yeSk7Ci0gICAgICBlID0gbWFpbkVsZW1lbnQuZ2V0RWxlbWVudHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1dTRExfU0VSVklDRV9GT0xERVJfTk9ERSk7Ci0gICAgICBhY3Rpb25SZXN1bHQgPSBhY3Rpb25SZXN1bHQgJiYgKChGYXZvcml0ZXNGb2xkZXJFbGVtZW50KSBlLm5leHRFbGVtZW50KCkpLnJlbW92ZUFsbEZhdm9yaXRlcyhwbHVnaW5NZXRhZGF0YURpcmVjdG9yeSk7Ci0gICAgICBlID0gbWFpbkVsZW1lbnQuZ2V0RWxlbWVudHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfU0VSVklDRV9GT0xERVJfTk9ERSk7Ci0gICAgICBhY3Rpb25SZXN1bHQgPSBhY3Rpb25SZXN1bHQgJiYgKChGYXZvcml0ZXNGb2xkZXJFbGVtZW50KSBlLm5leHRFbGVtZW50KCkpLnJlbW92ZUFsbEZhdm9yaXRlcyhwbHVnaW5NZXRhZGF0YURpcmVjdG9yeSk7Ci0gICAgICBlID0gbWFpbkVsZW1lbnQuZ2V0RWxlbWVudHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfQlVTSU5FU1NfRk9MREVSX05PREUpOwotICAgICAgYWN0aW9uUmVzdWx0ID0gYWN0aW9uUmVzdWx0ICYmICgoRmF2b3JpdGVzRm9sZGVyRWxlbWVudCkgZS5uZXh0RWxlbWVudCgpKS5yZW1vdmVBbGxGYXZvcml0ZXMocGx1Z2luTWV0YWRhdGFEaXJlY3RvcnkpOwotICAgICAgZSA9IG1haW5FbGVtZW50LmdldEVsZW1lbnRzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1NFUlZJQ0VfSU5URVJGQUNFX0ZPTERFUl9OT0RFKTsKLSAgICAgIGFjdGlvblJlc3VsdCA9IGFjdGlvblJlc3VsdCAmJiAoKEZhdm9yaXRlc0ZvbGRlckVsZW1lbnQpIGUubmV4dEVsZW1lbnQoKSkucmVtb3ZlQWxsRmF2b3JpdGVzKHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5KTsKLSAgICAgIGUgPSBtYWluRWxlbWVudC5nZXRFbGVtZW50cyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9SRUdJU1RSWV9GT0xERVJfTk9ERSk7Ci0gICAgICBhY3Rpb25SZXN1bHQgPSBhY3Rpb25SZXN1bHQgJiYgKChGYXZvcml0ZXNGb2xkZXJFbGVtZW50KSBlLm5leHRFbGVtZW50KCkpLnJlbW92ZUFsbEZhdm9yaXRlcyhwbHVnaW5NZXRhZGF0YURpcmVjdG9yeSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIGFjdGlvblJlc3VsdCA9IGZhbHNlOwotICAgIGlmIChhY3Rpb25SZXN1bHQpCi0gICAgICBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19JTkZPX05PREVfQ0xFQVJFRCIsIHNlbGVjdGVkTm9kZS5nZXROb2RlTmFtZSgpKSk7Ci0gICAgcmV0dXJuIGFjdGlvblJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRWYXIoKQotICB7Ci0gICAgcmV0dXJuICJmYXZOYXZpZ2F0b3JDb250ZW50IjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRQYWdlKCkKLSAgewotICAgIHJldHVybiAiZmF2b3JpdGVzL2Zhdl9uYXZpZ2F0b3JfY29udGVudC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyVmFyKCkKLSAgewotICAgIHJldHVybiAiZmF2UHJvcGVydGllc0NvbnRhaW5lciI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCkKLSAgewotICAgIHJldHVybiAiZmF2b3JpdGVzL2Zhdl9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTdGF0dXNDb250ZW50VmFyKCkKLSAgewotICAgIHJldHVybiAiZmF2U3RhdHVzQ29udGVudCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRQYWdlKCkKLSAgewotICAgIHJldHVybiAiZmF2b3JpdGVzL2Zhdl9zdGF0dXNfY29udGVudC5qc3AiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL1Jlc2l6ZUZhdm9yaXRlc0ZyYW1lc0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9SZXNpemVGYXZvcml0ZXNGcmFtZXNBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmM0YmUzMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL1Jlc2l6ZUZhdm9yaXRlc0ZyYW1lc0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLlJlc2l6ZUZyYW1lc0FjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy5GYXZvcml0ZXNBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuRmF2b3JpdGVzRnJhbWVOYW1lczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLkZhdm9yaXRlc1BlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotCi1wdWJsaWMgY2xhc3MgUmVzaXplRmF2b3JpdGVzRnJhbWVzQWN0aW9uIGV4dGVuZHMgUmVzaXplRnJhbWVzQWN0aW9uCi17Ci0gIHB1YmxpYyBSZXNpemVGYXZvcml0ZXNGcmFtZXNBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NPdGhlcnMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKEZhdm9yaXRlc0FjdGlvbklucHV0cy5GUkFNRVNFVF9DT0xTX1BFUlNQRUNUSVZFX0NPTlRFTlQpOwotICAgIFN0cmluZyBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzID0gcGFyc2VyLmdldFBhcmFtZXRlcihGYXZvcml0ZXNBY3Rpb25JbnB1dHMuRlJBTUVTRVRfUk9XU19BQ1RJT05TX0NPTlRBSU5FUik7Ci0gICAgaWYgKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyAhPSBudWxsICYmIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoRmF2b3JpdGVzQWN0aW9uSW5wdXRzLkZSQU1FU0VUX0NPTFNfUEVSU1BFQ1RJVkVfQ09OVEVOVCxwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEZhdm9yaXRlc0FjdGlvbklucHV0cy5GUkFNRVNFVF9ST1dTX0FDVElPTlNfQ09OVEFJTkVSLGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIC8vIFNhdmUgdGhlIGN1cnJlbnQgZnJhbWVzZXQgc2l6ZXMuCi0gICAgU3RyaW5nIGZyYW1lTmFtZSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5GUkFNRV9OQU1FKTsKLSAgICBTdHJpbmcgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoRmF2b3JpdGVzQWN0aW9uSW5wdXRzLkZSQU1FU0VUX0NPTFNfUEVSU1BFQ1RJVkVfQ09OVEVOVCk7Ci0gICAgU3RyaW5nIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChGYXZvcml0ZXNBY3Rpb25JbnB1dHMuRlJBTUVTRVRfUk9XU19BQ1RJT05TX0NPTlRBSU5FUik7Ci0gICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgIAotICAgIC8vIFNldCB0aGUgbmV3IGZyYW1lc2V0IHNpemVzLgotICAgIGlmIChmcmFtZU5hbWUuZXF1YWxzKEZhdm9yaXRlc0ZyYW1lTmFtZXMuTkFWSUdBVE9SX0NPTlRBSU5FUikpCi0gICAgewotICAgICAgZmF2UGVyc3BlY3RpdmUuc2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKTsKLSAgICAgIGZhdlBlcnNwZWN0aXZlLnNldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKTsKLSAgICAgIGlmIChwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMuc3RhcnRzV2l0aCgiMTAwJSIpKQotICAgICAgewotICAgICAgICAvLyBSZXN0b3JlLgotICAgICAgICBmYXZQZXJzcGVjdGl2ZS5zZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoZmF2UGVyc3BlY3RpdmUuZ2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIE1heGltaXplLgotICAgICAgICBmYXZQZXJzcGVjdGl2ZS5zZXRTYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyhwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMpOwotICAgICAgICBmYXZQZXJzcGVjdGl2ZS5zZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoIjEwMCUsMCUiKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAoZnJhbWVOYW1lLmVxdWFscyhGYXZvcml0ZXNGcmFtZU5hbWVzLlBST1BFUlRJRVNfQ09OVEFJTkVSKSkKLSAgICB7Ci0gICAgICBpZiAoYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cy5zdGFydHNXaXRoKCIxMDAlIikpCi0gICAgICB7Ci0gICAgICAgIGlmIChwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMuZW5kc1dpdGgoIjEwMCUiKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIFJlc3RvcmUuCi0gICAgICAgICAgZmF2UGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKGZhdlBlcnNwZWN0aXZlLmdldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCkpOwotICAgICAgICAgIGZhdlBlcnNwZWN0aXZlLnNldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoZmF2UGVyc3BlY3RpdmUuZ2V0U2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKCkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIC8vIE1heGltaXplLgotICAgICAgICAgIGZhdlBlcnNwZWN0aXZlLnNldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyk7Ci0gICAgICAgICAgZmF2UGVyc3BlY3RpdmUuc2V0U2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MpOwotICAgICAgICAgIGZhdlBlcnNwZWN0aXZlLnNldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygiMCUsMTAwJSIpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIE1heGltaXplLgotICAgICAgICBmYXZQZXJzcGVjdGl2ZS5zZXRTYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyk7Ci0gICAgICAgIGZhdlBlcnNwZWN0aXZlLnNldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoIjEwMCUsMCUiKTsKLSAgICAgICAgaWYgKCFwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMuZW5kc1dpdGgoIjEwMCUiKSkKLSAgICAgICAgewotICAgICAgICAgIGZhdlBlcnNwZWN0aXZlLnNldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyk7Ci0gICAgICAgICAgZmF2UGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCIwJSwxMDAlIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAoZnJhbWVOYW1lLmVxdWFscyhGYXZvcml0ZXNGcmFtZU5hbWVzLlNUQVRVU19DT05UQUlORVIpKQotICAgIHsKLSAgICAgIGlmIChhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzLmVuZHNXaXRoKCIxMDAlIikpCi0gICAgICB7Ci0gICAgICAgIGlmIChwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMuZW5kc1dpdGgoIjEwMCUiKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIFJlc3RvcmUuCi0gICAgICAgICAgZmF2UGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKGZhdlBlcnNwZWN0aXZlLmdldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCkpOwotICAgICAgICAgIGZhdlBlcnNwZWN0aXZlLnNldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoZmF2UGVyc3BlY3RpdmUuZ2V0U2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKCkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIC8vIE1heGltaXplLgotICAgICAgICAgIGZhdlBlcnNwZWN0aXZlLnNldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyk7Ci0gICAgICAgICAgZmF2UGVyc3BlY3RpdmUuc2V0U2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MpOwotICAgICAgICAgIGZhdlBlcnNwZWN0aXZlLnNldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygiMCUsMTAwJSIpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIE1heGltaXplLgotICAgICAgICBmYXZQZXJzcGVjdGl2ZS5zZXRTYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyk7Ci0gICAgICAgIGZhdlBlcnNwZWN0aXZlLnNldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoIjAlLDEwMCUiKTsKLSAgICAgICAgaWYgKCFwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMuZW5kc1dpdGgoIjEwMCUiKSkKLSAgICAgICAgewotICAgICAgICAgIGZhdlBlcnNwZWN0aXZlLnNldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyk7Ci0gICAgICAgICAgZmF2UGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCIwJSwxMDAlIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvU2VsZWN0RmF2b3JpdGVzTm9kZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9TZWxlY3RGYXZvcml0ZXNOb2RlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyOTc0NzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9TZWxlY3RGYXZvcml0ZXNOb2RlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuU2VsZWN0Tm9kZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLlRvb2xUeXBlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbDsKLQotcHVibGljIGNsYXNzIFNlbGVjdEZhdm9yaXRlc05vZGVBY3Rpb24gZXh0ZW5kcyBTZWxlY3ROb2RlQWN0aW9uCi17Ci0gICAgcHVibGljIFNlbGVjdEZhdm9yaXRlc05vZGVBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICAgIHsKLSAgICAgICAgc3VwZXIoY29udHJvbGxlciwgY29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCkpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJRCwgYm9vbGVhbiBrZWVwSGlzdG9yeSkKLSAgICB7Ci0gICAgICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigiZmF2b3JpdGVzL2FjdGlvbnMvU2VsZWN0RmF2b3JpdGVzTm9kZUFjdGlvbkpTUC5qc3A/Iik7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChub2RlSUQpOwotICAgICAgICBpZiAoa2VlcEhpc3RvcnkpIHsKLSAgICAgICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuSVNISVNUT1JZKTsKLSAgICAgICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCI9MSIpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIFN0cmluZyBnZXRBY3Rpb25MaW5rRm9ySGlzdG9yeSgpCi0gICAgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IGdldFNlbGVjdGVkTm9kZSgpOwotICAgICAgICBUb29sIHNlbGVjdGVkVG9vbCA9IHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpOwotICAgICAgICBpZiAoc2VsZWN0ZWRUb29sID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgZWxzZSBpZiAoc2VsZWN0ZWRUb29sLmdldFRvb2xUeXBlKCkgIT0gVG9vbFR5cGVzLkFDVElPTikKLSAgICAgICAgICAgIHJldHVybiBTZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBzZWxlY3RlZFRvb2wuZ2V0VG9vbElkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgdHJ1ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBnZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdHJ1ZSk7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUcmVlQ29udGVudFZhcigpIHsKLSAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCkuZ2V0VHJlZUNvbnRlbnRWYXIoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFRyZWVDb250ZW50UGFnZSgpIHsKLSAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCkuZ2V0VHJlZUNvbnRlbnRQYWdlKCk7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyVmFyKCkgewotICAgICAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKS5nZXRQcm9wZXJ0aWVzQ29udGFpbmVyVmFyKCk7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyUGFnZSgpIHsKLSAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCkuZ2V0UHJvcGVydGllc0NvbnRhaW5lclBhZ2UoKTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGZpbmFsIGludCBnZXRQZXJzcGVjdGl2ZUlkKCkKLSAgICB7Ci0gICAgICByZXR1cm4gQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX0ZBVk9SSVRFUzsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL1NlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTY3MjdjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLlNlbGVjdE5vZGVUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuVG9vbFR5cGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotCi1wdWJsaWMgY2xhc3MgU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbiBleHRlbmRzIFNlbGVjdE5vZGVUb29sQWN0aW9uCi17Ci0gICAgcHVibGljIFNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICAgIHsKLSAgICAgICAgc3VwZXIoY29udHJvbGxlciwgY29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCkpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJRCwgaW50IHRvb2xJRCwgaW50IHZpZXdJRCwgaW50IHZpZXdUb29sSUQsIGJvb2xlYW4ga2VlcEhpc3RvcnkpCi0gICAgewotICAgICAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoImZhdm9yaXRlcy9hY3Rpb25zL1NlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb25KU1AuanNwPyIpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQobm9kZUlEKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlRPT0xJRCk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKHRvb2xJRCk7Ci0gICAgICAgIGlmICh2aWV3SUQgIT0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUKSB7Ci0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgICAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdJRCk7Ci0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgICAgICAgICAgYWN0aW9uTGluay5hcHBlbmQodmlld0lEKTsKLSAgICAgICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVklFV1RPT0xJRCk7Ci0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgICAgICAgICAgYWN0aW9uTGluay5hcHBlbmQodmlld1Rvb2xJRCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGtlZXBIaXN0b3J5KSB7Ci0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgICAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLklTSElTVE9SWSk7Ci0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgiPTEiKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QWN0aW9uTGlua0Zvckhpc3RvcnkoKQotICAgIHsKLSAgICAgICAgaWYgKGdldFNlbGVjdGVkVG9vbCgpLmdldFRvb2xUeXBlKCkgIT0gVG9vbFR5cGVzLkFDVElPTikgewotICAgICAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBnZXRTZWxlY3RlZE5vZGUoKTsKLSAgICAgICAgICAgIHJldHVybiBnZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgZ2V0U2VsZWN0ZWRUb29sKCkuZ2V0VG9vbElkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgdHJ1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUcmVlQ29udGVudFZhcigpIHsKLSAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCkuZ2V0VHJlZUNvbnRlbnRWYXIoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFRyZWVDb250ZW50UGFnZSgpIHsKLSAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCkuZ2V0VHJlZUNvbnRlbnRQYWdlKCk7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyVmFyKCkgewotICAgICAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKS5nZXRQcm9wZXJ0aWVzQ29udGFpbmVyVmFyKCk7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyUGFnZSgpIHsKLSAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCkuZ2V0UHJvcGVydGllc0NvbnRhaW5lclBhZ2UoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250ZW50VmFyKCkgewotICAgICAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKS5nZXRQcm9wZXJ0aWVzQ29udGVudFZhcigpOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRlbnRQYWdlKCkgewotICAgICAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKS5nZXRQcm9wZXJ0aWVzQ29udGVudFBhZ2UoKTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGZpbmFsIGludCBnZXRQZXJzcGVjdGl2ZUlkKCkKLSAgICB7Ci0gICAgICByZXR1cm4gQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX0ZBVk9SSVRFUzsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL1NlbGVjdEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlOb2RlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9hY3Rpb25zL1NlbGVjdEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlOb2RlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0NjQ1OTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9TZWxlY3RGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Tm9kZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeUZvbGRlckVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci0KLXB1YmxpYyBjbGFzcyBTZWxlY3RGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Tm9kZUFjdGlvbiBleHRlbmRzIFNlbGVjdEZhdm9yaXRlc05vZGVBY3Rpb24KLXsKLSAgICBwdWJsaWMgU2VsZWN0RmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeU5vZGVBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICAgIHsKLSAgICAgICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgcGVyZm9ybUV4dGVuZGVkQWN0aW9uKCkKLSAgICB7Ci0gICAgCVRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAJKChGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudClzZWxlY3RlZEVsZW1lbnQpLnJlZnJlc2goKTsKLSAgICB9Ci0gICAgCi0gICAgCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlELCBib29sZWFuIGtlZXBIaXN0b3J5KQotICAgIHsKLSAgICAgICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJmYXZvcml0ZXMvYWN0aW9ucy9TZWxlY3RGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Tm9kZUFjdGlvbkpTUC5qc3A/Iik7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChub2RlSUQpOwotICAgICAgICBpZiAoa2VlcEhpc3RvcnkpIHsKLSAgICAgICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuSVNISVNUT1JZKTsKLSAgICAgICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCI9MSIpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gICAgfQotICAgIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9Td2l0Y2hQZXJzcGVjdGl2ZUZyb21GYXZvcml0ZXNBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2FjdGlvbnMvU3dpdGNoUGVyc3BlY3RpdmVGcm9tRmF2b3JpdGVzQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjZDkwOGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvYWN0aW9ucy9Td2l0Y2hQZXJzcGVjdGl2ZUZyb21GYXZvcml0ZXNBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLlNob3dQZXJzcGVjdGl2ZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy5GYXZvcml0ZXNBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS5GYXZvcml0ZXNQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLQotcHVibGljIGZpbmFsIGNsYXNzIFN3aXRjaFBlcnNwZWN0aXZlRnJvbUZhdm9yaXRlc0FjdGlvbiBleHRlbmRzIFNob3dQZXJzcGVjdGl2ZUFjdGlvbgotewotICBwdWJsaWMgU3dpdGNoUGVyc3BlY3RpdmVGcm9tRmF2b3JpdGVzQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzUGFyc2VkUmVzdWx0cyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoRmF2b3JpdGVzQWN0aW9uSW5wdXRzLkZSQU1FU0VUX0NPTFNfUEVSU1BFQ1RJVkVfQ09OVEVOVCk7Ci0gICAgU3RyaW5nIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKEZhdm9yaXRlc0FjdGlvbklucHV0cy5GUkFNRVNFVF9ST1dTX0FDVElPTlNfQ09OVEFJTkVSKTsKLSAgICBpZiAocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzICE9IG51bGwgJiYgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyAhPSBudWxsKQotICAgIHsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChGYXZvcml0ZXNBY3Rpb25JbnB1dHMuRlJBTUVTRVRfQ09MU19QRVJTUEVDVElWRV9DT05URU5ULHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoRmF2b3JpdGVzQWN0aW9uSW5wdXRzLkZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIsYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgU3RyaW5nIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEZhdm9yaXRlc0FjdGlvbklucHV0cy5GUkFNRVNFVF9DT0xTX1BFUlNQRUNUSVZFX0NPTlRFTlQpOwotICAgIFN0cmluZyBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoRmF2b3JpdGVzQWN0aW9uSW5wdXRzLkZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIpOwotICAgIAotICAgIC8vIFNhdmUgdGhlIGZyYW1lc2V0IHNpemVzIGlmZiBubyBmcmFtZSBpcyBtYXhpbWl6ZWQuCi0gICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgIGlmICghcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzLnN0YXJ0c1dpdGgoIjEwMCUiKSAmJiAhcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzLmVuZHNXaXRoKCIxMDAlIikpCi0gICAgICBmYXZQZXJzcGVjdGl2ZS5zZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKTsKLSAgICAgIAotICAgIGlmICghYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cy5zdGFydHNXaXRoKCIxMDAlIikgJiYgIWFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MuZW5kc1dpdGgoIjEwMCUiKSkKLSAgICAgIGZhdlBlcnNwZWN0aXZlLnNldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyk7Ci0gICAgICAKLSAgICByZXR1cm4gc3VwZXIucnVuKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldEZvcm1BY3Rpb25MaW5rKGludCB0YXJnZXRQZXJzcGVjdGl2ZUlkLGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBmb3JtTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoIndzZGwvYWN0aW9ucy9Td2l0Y2hQZXJzcGVjdGl2ZUZyb21XU0RMQWN0aW9uSlNQLmpzcD8iKTsKLSAgICBmb3JtTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFKS5hcHBlbmQoJz0nKS5hcHBlbmQodGFyZ2V0UGVyc3BlY3RpdmVJZCk7Ci0gICAgaWYgKGZvckhpc3RvcnkpCi0gICAgICBmb3JtTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoQWN0aW9uSW5wdXRzLklTSElTVE9SWSkuYXBwZW5kKCI9MSIpOyAgICAKLSAgICByZXR1cm4gZm9ybUxpbmsudG9TdHJpbmcoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvY29uc3RhbnRzL0Zhdm9yaXRlc0FjdGlvbklucHV0cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvY29uc3RhbnRzL0Zhdm9yaXRlc0FjdGlvbklucHV0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzRkMzdiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2NvbnN0YW50cy9GYXZvcml0ZXNBY3Rpb25JbnB1dHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzQWN0aW9uSW5wdXRzCi17Ci0gICAgLy8gbWFzcyBhY3Rpb25zCi0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTVVMVElQTEVfTElOS19BQ1RJT04gPSAibXVsdGlwbGVMaW5rQWN0aW9uIjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBNQVNTX0FDVElPTl9OT0RFX0lEID0gIm1hc3NBY3Rpb25Ob2RlSUQiOwotCi0gICAgLy8gcmVzaXplIGZhdm9yaXRlcyBmcmFtZXMgYWN0aW9uCi0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgRlJBTUVTRVRfQ09MU19QRVJTUEVDVElWRV9DT05URU5UID0gImZyYW1lc2V0Q29sc1BlcnNwZWN0aXZlQ29udGVudCI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgRlJBTUVTRVRfUk9XU19BQ1RJT05TX0NPTlRBSU5FUiA9ICJmcmFtZXNldFJvd3NBY3Rpb25zQ29udGFpbmVyIjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2NvbnN0YW50cy9GYXZvcml0ZXNGcmFtZU5hbWVzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9jb25zdGFudHMvRmF2b3JpdGVzRnJhbWVOYW1lcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjZjMjY5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2NvbnN0YW50cy9GYXZvcml0ZXNGcmFtZU5hbWVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50czsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc0ZyYW1lTmFtZXMKLXsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTkFWSUdBVE9SX0NPTlRBSU5FUiA9ICJmYXZfbmF2aWdhdG9yX2NvbnRhaW5lciI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE5BVklHQVRPUl9UT09MQkFSID0gImZhdl9uYXZpZ2F0b3JfdG9vbGJhciI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE5BVklHQVRPUl9DT05URU5UID0gImZhdl9uYXZpZ2F0b3JfY29udGVudCI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIEFDVElPTlNfQ09OVEFJTkVSID0gImZhdl9hY3Rpb25zX2NvbnRhaW5lciI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBST1BFUlRJRVNfQ09OVEFJTkVSID0gImZhdl9wcm9wZXJ0aWVzX2NvbnRhaW5lciI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBST1BFUlRJRVNfVE9PTEJBUiA9ICJmYXZfcHJvcGVydGllc190b29sYmFyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPUEVSVElFU19DT05URU5UID0gImZhdl9wcm9wZXJ0aWVzX2NvbnRlbnQiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBTVEFUVVNfQ09OVEFJTkVSID0gImZhdl9zdGF0dXNfY29udGFpbmVyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgU1RBVFVTX1RPT0xCQVIgPSAiZmF2X3N0YXR1c190b29sYmFyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgU1RBVFVTX0NPTlRFTlQgPSAiZmF2X3N0YXR1c19jb250ZW50IjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2NvbnN0YW50cy9GYXZvcml0ZXNNb2RlbENvbnN0YW50cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvY29uc3RhbnRzL0Zhdm9yaXRlc01vZGVsQ29uc3RhbnRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjZjBjMjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvY29uc3RhbnRzL0Zhdm9yaXRlc01vZGVsQ29uc3RhbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50czsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzIHsKLSAgICAvLyBSZWxhdGlvbnMKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBSRUxfV1NJTF9GT0xERVJfTk9ERSA9ICJyZWxXU0lMRm9sZGVyTm9kZSI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUkVMX1dTRExfU0VSVklDRV9GT0xERVJfTk9ERSA9ICJyZWxXU0RMU2VydmljZUZvbGRlck5vZGUiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFJFTF9VRERJX1NFUlZJQ0VfRk9MREVSX05PREUgPSAicmVsVURESVNlcnZpY2VGb2xkZXJOb2RlIjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBSRUxfVURESV9CVVNJTkVTU19GT0xERVJfTk9ERSA9ICJyZWxVRERJQnVzaW5lc3NGb2xkZXJOb2RlIjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBSRUxfVURESV9TRVJWSUNFX0lOVEVSRkFDRV9GT0xERVJfTk9ERSA9ICJyZWxVRERJU2VydmljZUludGVyZmFjZUZvbGRlck5vZGUiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFJFTF9VRERJX1JFR0lTVFJZX0ZPTERFUl9OT0RFID0gInJlbFVERElSZWdpc3RyeUZvbGVyTm9kZSI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUkVMX1VTRVJfREVGX1VERElfUkVHSVNUUllfRk9MREVSX05PREUgPSAicmVsVXNlckRlZlVERElSZWdpc3RyeUZvbGRlck5vZGUiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFJFTF9XU0lMX05PREUgPSAicmVsV1NJTE5vZGUiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFJFTF9XU0RMX1NFUlZJQ0VfTk9ERSA9ICJyZWxXU0RMU2VydmljZU5vZGUiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFJFTF9VRERJX1NFUlZJQ0VfTk9ERSA9ICJyZWxVRERJU2VydmljZU5vZGUiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFJFTF9VRERJX0JVU0lORVNTX05PREUgPSAicmVsVURESUJ1c2luZXNzTm9kZSI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUkVMX1VERElfU0VSVklDRV9JTlRFUkZBQ0VfTk9ERSA9ICJyZWxVRERJU2VydmljZUludGVyZmFjZU5vZGUiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFJFTF9VRERJX1JFR0lTVFJZX05PREUgPSAicmVsVURESVJlZ2lzdHJ5Tm9kZSI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUkVMX1VTRVJfREVGX1VERElfUkVHSVNUUllfTk9ERSA9ICJyZWxVc2VyRGVmVURESVJlZ2lzdHJ5Tm9kZSI7Ci0KLSAgICAvLyBQcm9wZXJ0aWVzCi0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPUF9QTFVHSU5fTUVUQURBVEFfRElSRUNUT1JZID0gInBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5IjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBQUk9QX1dTSUxfVVJMID0gIndzaWxVUkwiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBST1BfV1NETF9VUkwgPSAid3NkbFVSTCI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPUF9VRERJX1NFUlZJQ0VfTkFNRSA9ICJVRERJU2VydmljZU5hbWUiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBST1BfVURESV9TRVJWSUNFX0lOUVVJUllfQVBJID0gIlVERElTZXJ2aWNlSW5xdWlyeUFQSSI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPUF9VRERJX1NFUlZJQ0VfS0VZID0gIlVERElTZXJ2aWNlS2V5IjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBQUk9QX1VERElfQlVTSU5FU1NfTkFNRSA9ICJVRERJQnVzaW5lc3NOYW1lIjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBQUk9QX1VERElfQlVTSU5FU1NfSU5RVUlSWV9BUEkgPSAiVURESUJ1c2luZXNzSW5xdWlyeUFQSSI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPUF9VRERJX0JVU0lORVNTX0tFWSA9ICJVRERJQnVzaW5lc3NLZXkiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBST1BfVURESV9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FID0gIlVERElTZXJ2aWNlSW50ZXJmYWNlTmFtZSI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPUF9VRERJX1NFUlZJQ0VfSU5URVJGQUNFX0lOUVVJUllfQVBJID0gIlVERElTZXJ2aWNlSW50ZXJmYWNlSW5xdWlyeUFQSSI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPUF9VRERJX1NFUlZJQ0VfSU5URVJGQUNFX0tFWSA9ICJVRERJU2VydmljZUludGVyZmFjZUtleSI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPUF9VRERJX1JFR0lTVFJZX05BTUUgPSAiVURESVJlZ2lzdHJ5TmFtZSI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPUF9VRERJX1JFR0lTVFJZX0lOUVVJUllfQVBJID0gIlVERElSZWdpc3RyeUlucXVpcnlBUEkiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBST1BfVURESV9SRUdJU1RSWV9QVUJMSVNIX0FQSSA9ICJVRERJUmVnaXN0cnlQdWJsaXNoQVBJIjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBQUk9QX1VERElfUkVHSVNUUllfUkVHSVNUUkFUSU9OX1VSTCA9ICJVRERJUmVnaXN0cnlSZWdpc3RyYXRpb25VUkwiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBST1BfVURESV9SRUdJU1RSWV9DQVRFR09SSUVTX0VOVU0gPSAiVURESVJlZ2lzdHJ5Q2F0ZWdvcmllc0VudW0iOwotCi0gICAgLy8gTGlzdCBNYW5hZ2VycyBmb3IgRmF2b3JpdGVzCi0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTElTVF9NQU5BR0VSX1dTRExfU0VSVklDRVMgPSAid3NkbFNlcnZpY2VzIjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBMSVNUX01BTkFHRVJfVURESV9TRVJWSUNFUyA9ICJ1ZGRpU2VydmljZXMiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIExJU1RfTUFOQUdFUl9VRERJX0JVU0lORVNTID0gInVkZGlCdXNpbmVzcyI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTElTVF9NQU5BR0VSX1dTSUxfTElOS1MgPSAid3NpbExpbmtzIjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBMSVNUX01BTkFHRVJfVURESV9SRUdJU1RSWSA9ICJ1ZGRpUmVnaXN0cnkiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIExJU1RfTUFOQUdFUl9VRERJX1NFUlZJQ0VfSU5URVJGQUNFID0gInVkZGlTZXJ2aWNlSW50ZXJmYWNlIjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjY3N2QyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLQotLyoqCi0qIFRoZSBkYXRhIG1vZGVsIGVsZW1lbnQgdGhhdCByZXByZXNlbnRzIAotKiBhIFdTSUwgZG9jdW1lbnQKLSovCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzRWxlbWVudCBleHRlbmRzIFRyZWVFbGVtZW50IHsKLQotICBwdWJsaWMgRmF2b3JpdGVzRWxlbWVudChTdHJpbmcgbmFtZSwgTW9kZWwgbW9kZWwpIHsKLSAgICBzdXBlcihuYW1lLCBtb2RlbCk7Ci0gIH0KLQotICBwdWJsaWMgRmF2b3JpdGVzRm9sZGVyRWxlbWVudCBnZXRQYXJlbnRGb2xkZXJFbGVtZW50KCkgewotICAgIEVudW1lcmF0aW9uIGUgPSBnZXRFbGVtZW50cyhNb2RlbENvbnN0YW50cy5SRUxfT1dORVIpOwotICAgIGlmICghZS5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgIHJldHVybiBudWxsOwotICAgIGVsc2UKLSAgICAgIHJldHVybiAoRmF2b3JpdGVzRm9sZGVyRWxlbWVudCllLm5leHRFbGVtZW50KCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNGb2xkZXJFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzRm9sZGVyRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWI5YzBjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNGb2xkZXJFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci0KLS8qKgotKiBUaGUgZGF0YSBtb2RlbCBlbGVtZW50IHRoYXQgcmVwcmVzZW50cyAKLSogYSBXU0lMIGRvY3VtZW50Ci0qLwotcHVibGljIGFic3RyYWN0IGNsYXNzIEZhdm9yaXRlc0ZvbGRlckVsZW1lbnQgZXh0ZW5kcyBUcmVlRWxlbWVudAotewotICAgIHByb3RlY3RlZCBOb2RlTWFuYWdlciBub2RlTWFuYWdlcl87Ci0gICAgCi0gICAgcHVibGljIEZhdm9yaXRlc0ZvbGRlckVsZW1lbnQoU3RyaW5nIG5hbWUsIE1vZGVsIG1vZGVsLCBOb2RlTWFuYWdlciBub2RlTWFuYWdlcikgewotICAgICAgICBzdXBlcihuYW1lLCBtb2RlbCk7Ci0gICAgICAgIG5vZGVNYW5hZ2VyXyA9IG5vZGVNYW5hZ2VyOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBGYXZvcml0ZXNNYWluRWxlbWVudCBnZXRGYXZvcml0ZXNNYWluRWxlbWVudCgpIHsKLSAgICAgICAgcmV0dXJuIChGYXZvcml0ZXNNYWluRWxlbWVudClub2RlTWFuYWdlcl8uZ2V0Um9vdE5vZGUoKS5nZXRUcmVlRWxlbWVudCgpOwotICAgIH0KLQotICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGluaXQoRmF2b3JpdGVzTWFpbkVsZW1lbnQgZmF2TWFpbkVsZW1lbnQpOwotCi0gICAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gcmVtb3ZlRmF2b3JpdGVCeU5vZGVJRChpbnQgbm9kZUlELFN0cmluZyBwbHVnaW5NZXRhZGF0YURpcmVjdG9yeSk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiByZW1vdmVBbGxGYXZvcml0ZXMoU3RyaW5nIHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5KTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGFkZEZhdm9yaXRlKEhhc2h0YWJsZSB0YWJsZSk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBmYXZvcml0ZUV4aXN0cyhIYXNodGFibGUgdGFibGUpOwotCi0gICAgcHVibGljIGFic3RyYWN0IEVudW1lcmF0aW9uIGdldEFsbEZhdm9yaXRlcygpOwotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzTWFpbkVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNNYWluRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTllZWNkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNNYWluRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsOwotCi1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLkxpbms7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIuZmF2b3JpdGVzLkZhdm9yaXRlc1JlZ2lzdHJ5VHlwZVdTRTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLkZhdm9yaXRlc01vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuRmF2b3JpdGVzUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci0KLS8qKgotKiBUaGUgZGF0YSBtb2RlbCBlbGVtZW50IHRoYXQgcmVwcmVzZW50cyAKLSogYSBXU0lMIGRvY3VtZW50Ci0qLwotcHVibGljIGNsYXNzIEZhdm9yaXRlc01haW5FbGVtZW50IGV4dGVuZHMgVHJlZUVsZW1lbnQKLXsKLSAgcHJpdmF0ZSBDb250cm9sbGVyIGNvbnRyb2xsZXJfOwotICBwcml2YXRlIEZhdm9yaXRlc1JlZ2lzdHJ5VHlwZVdTRSBmYXZSZWdpc3RyeV87Ci0KLSAgcHVibGljIEZhdm9yaXRlc01haW5FbGVtZW50KFN0cmluZyBuYW1lLCBNb2RlbCBtb2RlbCwgQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIobmFtZSwgbW9kZWwpOwotICAgIGNvbnRyb2xsZXJfID0gY29udHJvbGxlcjsKLSAgICBmYXZSZWdpc3RyeV8gPSBuZXcgRmF2b3JpdGVzUmVnaXN0cnlUeXBlV1NFKAotCQkJY29udHJvbGxlci5nZXREZWZhdWx0RmF2b3JpdGVzTG9jYXRpb24oKSwKLQkJCWNvbnRyb2xsZXIuZ2V0U2VydmxldEVuZ2luZVN0YXRlTG9jYXRpb24oKQotCSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiByZXN0b3JlRmF2b3JpdGVzRGVmYXVsdCgpCi0gIHsKLSAgICBmYXZSZWdpc3RyeV8ucmVzdG9yZUZhdm9yaXRlc0RlZmF1bHQoKTsKLSAgICByZXR1cm4gc2F2ZUZhdm9yaXRlcygpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gc2F2ZUZhdm9yaXRlcygpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBmYXZSZWdpc3RyeV8uc2F2ZSgpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICB7Ci0gICAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgICBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9TQVZFX0ZBVk9SSVRFU19XU0lMIiwgZmF2UmVnaXN0cnlfLmdldFdyaXRlTG9jYXRpb24oKSkpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBMaW5rIGFkZFVERElSZWdpc3RyeShTdHJpbmcgcmVnaXN0cnlOYW1lLCBTdHJpbmcgaW5xdWlyeUFQSSwgU3RyaW5nIHB1Ymxpc2hBUEksIFN0cmluZyByZWdpc3RyYXRpb25VUkwpCi0gIHsKLSAgICByZXR1cm4gZmF2UmVnaXN0cnlfLmFkZFVERElSZWdpc3RyeShyZWdpc3RyeU5hbWUsIGlucXVpcnlBUEksIHB1Ymxpc2hBUEksIHJlZ2lzdHJhdGlvblVSTCk7Ci0gIH0KLQotICBwdWJsaWMgTGluayBhZGRVRERJQnVzaW5lc3MoU3RyaW5nIGJ1c2luZXNzTmFtZSwgU3RyaW5nIGlucXVpcnlBUEksIFN0cmluZyBidXNpbmVzc0tleSkKLSAgewotICAgIHJldHVybiBmYXZSZWdpc3RyeV8uYWRkVURESUJ1c2luZXNzKGJ1c2luZXNzTmFtZSwgaW5xdWlyeUFQSSwgYnVzaW5lc3NLZXkpOwotICB9Ci0KLSAgcHVibGljIFNlcnZpY2UgYWRkVURESVNlcnZpY2UoU3RyaW5nIHNlcnZpY2VOYW1lLCBTdHJpbmcgaW5xdWlyeUFQSSwgU3RyaW5nIHNlcnZpY2VLZXkpCi0gIHsKLSAgICByZXR1cm4gZmF2UmVnaXN0cnlfLmFkZFVERElTZXJ2aWNlKHNlcnZpY2VOYW1lLCBpbnF1aXJ5QVBJLCBzZXJ2aWNlS2V5KTsKLSAgfQotCi0gIHB1YmxpYyBTZXJ2aWNlIGFkZFVERElTZXJ2aWNlSW50ZXJmYWNlKFN0cmluZyBzZXJJbnROYW1lLCBTdHJpbmcgaW5xdWlyeUFQSSwgU3RyaW5nIHNlckludEtleSkKLSAgewotICAgIHJldHVybiBmYXZSZWdpc3RyeV8uYWRkVURESVNlcnZpY2VJbnRlcmZhY2Uoc2VySW50TmFtZSwgaW5xdWlyeUFQSSwgc2VySW50S2V5KTsKLSAgfQotCi0gIHB1YmxpYyBTZXJ2aWNlIGFkZFdTRExTZXJ2aWNlKFN0cmluZyB1cmwpCi0gIHsKLSAgICByZXR1cm4gZmF2UmVnaXN0cnlfLmFkZFdTRExTZXJ2aWNlKHVybCk7Ci0gIH0KLQotICBwdWJsaWMgTGluayBhZGRXU0lMTGluayhTdHJpbmcgdXJsKQotICB7Ci0gICAgcmV0dXJuIGZhdlJlZ2lzdHJ5Xy5hZGRXU0lMTGluayh1cmwpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcmVtb3ZlU2VydmljZShTZXJ2aWNlIHNlcnZpY2UpIHsKLSAgICBmYXZSZWdpc3RyeV8ucmVtb3ZlU2VydmljZShzZXJ2aWNlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJlbW92ZUxpbmsoTGluayBsaW5rKSB7Ci0gICAgZmF2UmVnaXN0cnlfLnJlbW92ZUxpbmsobGluayk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgTGlua1tdIGxvYWRVRERJUmVnaXN0cmllcygpCi0gIHsKLSAgICByZXR1cm4gZmF2UmVnaXN0cnlfLmxvYWRVRERJUmVnaXN0cmllcygpOwotICB9Ci0gICAgCi0gIHB1YmxpYyBMaW5rW10gbG9hZFVERElCdXNpbmVzc2VzKCkKLSAgewotICAgIHJldHVybiBmYXZSZWdpc3RyeV8ubG9hZFVERElCdXNpbmVzc2VzKCk7Ci0gIH0KLQotICBwdWJsaWMgU2VydmljZVtdIGxvYWRVRERJU2VydmljZXMoKQotICB7Ci0gICAgcmV0dXJuIGZhdlJlZ2lzdHJ5Xy5sb2FkVURESVNlcnZpY2VzKCk7Ci0gIH0KLQotICBwdWJsaWMgU2VydmljZVtdIGxvYWRVRERJU2VydmljZUludGVyZmFjZXMoKQotICB7Ci0gICAgcmV0dXJuIGZhdlJlZ2lzdHJ5Xy5sb2FkVURESVNlcnZpY2VJbnRlcmZhY2VzKCk7Ci0gIH0KLQotICBwdWJsaWMgU2VydmljZVtdIGxvYWRXU0RMU2VydmljZXMoKQotICB7Ci0gICAgcmV0dXJuIGZhdlJlZ2lzdHJ5Xy5sb2FkV1NETFNlcnZpY2VzKCk7Ci0gIH0KLQotICBwdWJsaWMgTGlua1tdIGxvYWRXU0lMcygpCi0gIHsKLSAgICByZXR1cm4gZmF2UmVnaXN0cnlfLmxvYWRXU0lMcygpOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgRmF2b3JpdGVzVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudCBnZXRGYXZvcml0ZXNVRERJUmVnaXN0cnlGb2xkZXJFbGVtZW50KCkKLSAgewotICAgIHJldHVybiAoRmF2b3JpdGVzVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudCkoZ2V0RWxlbWVudHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfUkVHSVNUUllfRk9MREVSX05PREUpLm5leHRFbGVtZW50KCkpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzVURESUJ1c2luZXNzRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1VERElCdXNpbmVzc0VsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjJkMTdmYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzVURESUJ1c2luZXNzRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWw7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuTGluazsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZmF2b3JpdGVzLkZhdm9yaXRlc1VERElCdXNpbmVzczsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1VERElCdXNpbmVzc0VsZW1lbnQgZXh0ZW5kcyBGYXZvcml0ZXNFbGVtZW50IHsKLQotICBwcml2YXRlIEZhdm9yaXRlc1VERElCdXNpbmVzcyB1ZGRpQnVzaW5lc3NfOwotCi0gIHB1YmxpYyBGYXZvcml0ZXNVRERJQnVzaW5lc3NFbGVtZW50KFN0cmluZyBuYW1lLCBNb2RlbCBtb2RlbCwgTGluayBsaW5rKSB7Ci0gICAgc3VwZXIobmFtZSwgbW9kZWwpOwotICAgIHVkZGlCdXNpbmVzc18gPSBuZXcgRmF2b3JpdGVzVURESUJ1c2luZXNzKCk7Ci0gICAgdWRkaUJ1c2luZXNzXy5zZXRMaW5rKGxpbmspOwotICB9Ci0KLSAgcHVibGljIExpbmsgZ2V0TGluaygpIHsKLSAgICByZXR1cm4gdWRkaUJ1c2luZXNzXy5nZXRMaW5rKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0gICAgcmV0dXJuIHVkZGlCdXNpbmVzc18uZ2V0TmFtZSgpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRJbnF1aXJ5VVJMKCkgewotICAgIHJldHVybiB1ZGRpQnVzaW5lc3NfLmdldElucXVpcnlVUkwoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0QnVzaW5lc3NLZXkoKSB7Ci0gICAgcmV0dXJuIHVkZGlCdXNpbmVzc18uZ2V0QnVzaW5lc3NLZXkoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgcmV0dXJuIGdldE5hbWUoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1VERElCdXNpbmVzc0ZvbGRlckVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNVRERJQnVzaW5lc3NGb2xkZXJFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxNGFiNGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1VERElCdXNpbmVzc0ZvbGRlckVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5MaW5rOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Nb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLkZhdm9yaXRlc01vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotLyoqCi0qIFRoZSBkYXRhIG1vZGVsIGVsZW1lbnQgdGhhdCByZXByZXNlbnRzIAotKiBhIFdTSUwgZG9jdW1lbnQKLSovCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzVURESUJ1c2luZXNzRm9sZGVyRWxlbWVudCBleHRlbmRzIEZhdm9yaXRlc0ZvbGRlckVsZW1lbnQKLXsKLSAgcHVibGljIEZhdm9yaXRlc1VERElCdXNpbmVzc0ZvbGRlckVsZW1lbnQoU3RyaW5nIG5hbWUsIE1vZGVsIG1vZGVsLCBOb2RlTWFuYWdlciBub2RlTWFuYWdlcikgewotICAgIHN1cGVyKG5hbWUsIG1vZGVsLCBub2RlTWFuYWdlcik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBpbml0KEZhdm9yaXRlc01haW5FbGVtZW50IGZhdk1haW5FbGVtZW50KSB7Ci0gICAgTGlua1tdIGxpbmtzID0gZmF2TWFpbkVsZW1lbnQubG9hZFVERElCdXNpbmVzc2VzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaW5rcy5sZW5ndGg7IGkrKykgewotICAgICAgTGluayBsaW5rID0gbGlua3NbaV07Ci0gICAgICBGYXZvcml0ZXNVRERJQnVzaW5lc3NFbGVtZW50IGZhdlVERElCdXNpbmVzc0VsZW1lbnQgPSBuZXcgRmF2b3JpdGVzVURESUJ1c2luZXNzRWxlbWVudCgobGluay5nZXRBYnN0cmFjdHMoKSlbMF0uZ2V0VGV4dCgpLCBnZXRNb2RlbCgpLCBsaW5rKTsKLSAgICAgIGNvbm5lY3QoZmF2VURESUJ1c2luZXNzRWxlbWVudCwgRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfQlVTSU5FU1NfTk9ERSwgTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBhZGRGYXZvcml0ZShIYXNodGFibGUgdGFibGUpIHsKLSAgICBTdHJpbmcgYnVzaW5lc3NOYW1lID0gKFN0cmluZyl0YWJsZS5nZXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX0JVU0lORVNTX05BTUUpOwotICAgIFN0cmluZyBpbnF1aXJ5QVBJID0gKFN0cmluZyl0YWJsZS5nZXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX0JVU0lORVNTX0lOUVVJUllfQVBJKTsKLSAgICBTdHJpbmcgYnVzaW5lc3NLZXkgPSAoU3RyaW5nKXRhYmxlLmdldChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfQlVTSU5FU1NfS0VZKTsKLSAgICBpZiAoYnVzaW5lc3NOYW1lID09IG51bGwgfHwgaW5xdWlyeUFQSSA9PSBudWxsIHx8IGJ1c2luZXNzS2V5ID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgRmF2b3JpdGVzVURESUJ1c2luZXNzRWxlbWVudCBlID0gZ2V0RmF2b3JpdGUoaW5xdWlyeUFQSSwgYnVzaW5lc3NLZXkpOwotICAgIGlmIChlICE9IG51bGwpCi0gICAgICByZW1vdmVGYXZvcml0ZShlKTsKLSAgICBGYXZvcml0ZXNNYWluRWxlbWVudCBmYXZNYWluRWxlbWVudCA9IGdldEZhdm9yaXRlc01haW5FbGVtZW50KCk7Ci0gICAgTGluayBsaW5rID0gZmF2TWFpbkVsZW1lbnQuYWRkVURESUJ1c2luZXNzKGJ1c2luZXNzTmFtZSwgaW5xdWlyeUFQSSwgYnVzaW5lc3NLZXkpOwotICAgIGJvb2xlYW4gc2F2ZWQgPSBmYXZNYWluRWxlbWVudC5zYXZlRmF2b3JpdGVzKCk7Ci0gICAgaWYgKHNhdmVkKSB7Ci0gICAgICBGYXZvcml0ZXNVRERJQnVzaW5lc3NFbGVtZW50IGZhdlVERElCdXNpbmVzc0VsZW1lbnQgPSBuZXcgRmF2b3JpdGVzVURESUJ1c2luZXNzRWxlbWVudChidXNpbmVzc05hbWUsIGdldE1vZGVsKCksIGxpbmspOwotICAgICAgY29ubmVjdChmYXZVRERJQnVzaW5lc3NFbGVtZW50LCBGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9CVVNJTkVTU19OT0RFLCBNb2RlbENvbnN0YW50cy5SRUxfT1dORVIpOwotICAgIH0KLSAgICByZXR1cm4gc2F2ZWQ7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBmYXZvcml0ZUV4aXN0cyhIYXNodGFibGUgdGFibGUpIHsKLSAgICBTdHJpbmcgaW5xdWlyeUFQSSA9IChTdHJpbmcpdGFibGUuZ2V0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9CVVNJTkVTU19JTlFVSVJZX0FQSSk7Ci0gICAgU3RyaW5nIGJ1c2luZXNzS2V5ID0gKFN0cmluZyl0YWJsZS5nZXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX0JVU0lORVNTX0tFWSk7Ci0gICAgaWYgKGlucXVpcnlBUEkgPT0gbnVsbCB8fCBidXNpbmVzc0tleSA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiAoZ2V0RmF2b3JpdGUoaW5xdWlyeUFQSSwgYnVzaW5lc3NLZXkpICE9IG51bGwpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcmVtb3ZlRmF2b3JpdGVCeU5vZGVJRChpbnQgbm9kZUlELFN0cmluZyBwbHVnaW5NZXRhZGF0YURpcmVjdG9yeSkgewotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXJfLmdldE5vZGUobm9kZUlEKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBGYXZvcml0ZXNNYWluRWxlbWVudCBmYXZNYWluRWxlbWVudCA9IGdldEZhdm9yaXRlc01haW5FbGVtZW50KCk7Ci0gICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEZhdm9yaXRlc1VERElCdXNpbmVzc0VsZW1lbnQpCi0gICAgICByZXR1cm4gKHJlbW92ZUZhdm9yaXRlKChGYXZvcml0ZXNVRERJQnVzaW5lc3NFbGVtZW50KXNlbGVjdGVkRWxlbWVudCkgJiYgZmF2TWFpbkVsZW1lbnQuc2F2ZUZhdm9yaXRlcygpKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gcmVtb3ZlRmF2b3JpdGUoRmF2b3JpdGVzVURESUJ1c2luZXNzRWxlbWVudCBlbGVtZW50KSB7Ci0gICAgTGluayBsaW5rID0gZWxlbWVudC5nZXRMaW5rKCk7Ci0gICAgRmF2b3JpdGVzTWFpbkVsZW1lbnQgZmF2TWFpbkVsZW1lbnQgPSBnZXRGYXZvcml0ZXNNYWluRWxlbWVudCgpOwotICAgIGlmIChmYXZNYWluRWxlbWVudC5yZW1vdmVMaW5rKGxpbmspKSB7Ci0gICAgICBlbGVtZW50LmRpc2Nvbm5lY3RBbGwoKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiByZW1vdmVBbGxGYXZvcml0ZXMoU3RyaW5nIHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5KSB7Ci0gICAgRmF2b3JpdGVzTWFpbkVsZW1lbnQgZmF2TWFpbkVsZW1lbnQgPSBnZXRGYXZvcml0ZXNNYWluRWxlbWVudCgpOwotICAgIEVudW1lcmF0aW9uIGUgPSBnZXRBbGxGYXZvcml0ZXMoKTsKLSAgICB3aGlsZShlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICBGYXZvcml0ZXNVRERJQnVzaW5lc3NFbGVtZW50IGZhdlVERElCdXNpbmVzc0VsZW1lbnQgPSAoRmF2b3JpdGVzVURESUJ1c2luZXNzRWxlbWVudCllLm5leHRFbGVtZW50KCk7Ci0gICAgICBMaW5rIGxpbmsgPSBmYXZVRERJQnVzaW5lc3NFbGVtZW50LmdldExpbmsoKTsKLSAgICAgIGZhdk1haW5FbGVtZW50LnJlbW92ZUxpbmsobGluayk7Ci0gICAgfQotICAgIGRpc2Nvbm5lY3RSZWwoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfQlVTSU5FU1NfTk9ERSk7Ci0gICAgcmV0dXJuIGZhdk1haW5FbGVtZW50LnNhdmVGYXZvcml0ZXMoKTsKLSAgfQotCi0gIHB1YmxpYyBFbnVtZXJhdGlvbiBnZXRBbGxGYXZvcml0ZXMoKSB7Ci0gICAgcmV0dXJuIGdldEVsZW1lbnRzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX0JVU0lORVNTX05PREUpOwotICB9Ci0KLSAgcHJpdmF0ZSBGYXZvcml0ZXNVRERJQnVzaW5lc3NFbGVtZW50IGdldEZhdm9yaXRlKFN0cmluZyBpbnF1aXJ5QVBJLCBTdHJpbmcgYnVzaW5lc3NLZXkpIHsKLSAgICBFbnVtZXJhdGlvbiBlID0gZ2V0QWxsRmF2b3JpdGVzKCk7Ci0gICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgIEZhdm9yaXRlc1VERElCdXNpbmVzc0VsZW1lbnQgYnVzRWxlbWVudCA9IChGYXZvcml0ZXNVRERJQnVzaW5lc3NFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICAgIGlmIChpbnF1aXJ5QVBJLmVxdWFscyhidXNFbGVtZW50LmdldElucXVpcnlVUkwoKSkgJiYKLSAgICAgICAgICBidXNpbmVzc0tleS5lcXVhbHMoYnVzRWxlbWVudC5nZXRCdXNpbmVzc0tleSgpKSkKLSAgICAgICAgcmV0dXJuIGJ1c0VsZW1lbnQ7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzVURESVJlZ2lzdHJ5RWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1VERElSZWdpc3RyeUVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjgzZjY2Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzVURESVJlZ2lzdHJ5RWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWw7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuTGluazsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZmF2b3JpdGVzLkZhdm9yaXRlc1VERElSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmZhdm9yaXRlcy5JRmF2b3JpdGVzVURESVJlZ2lzdHJ5OwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzVURESVJlZ2lzdHJ5RWxlbWVudCBleHRlbmRzIEZhdm9yaXRlc0VsZW1lbnQgewotCi0gIHByaXZhdGUgRmF2b3JpdGVzVURESVJlZ2lzdHJ5IHVkZGlSZWdfOwotCi0gIHB1YmxpYyBGYXZvcml0ZXNVRERJUmVnaXN0cnlFbGVtZW50KFN0cmluZyBuYW1lLCBNb2RlbCBtb2RlbCwgTGluayBsaW5rKSB7Ci0gICAgc3VwZXIobmFtZSwgbW9kZWwpOwotICAgIHVkZGlSZWdfID0gbmV3IEZhdm9yaXRlc1VERElSZWdpc3RyeSgpOwotICAgIHVkZGlSZWdfLnNldExpbmsobGluayk7Ci0gIH0KLQotICBwdWJsaWMgTGluayBnZXRMaW5rKCkgewotICAgIHJldHVybiB1ZGRpUmVnXy5nZXRMaW5rKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0gICAgcmV0dXJuIHVkZGlSZWdfLmdldE5hbWUoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5xdWlyeVVSTCgpIHsKLSAgICByZXR1cm4gdWRkaVJlZ18uZ2V0SW5xdWlyeVVSTCgpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRQdWJsaXNoVVJMKCkgewotICAgIHJldHVybiB1ZGRpUmVnXy5nZXRQdWJsaXNoVVJMKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFJlZ2lzdHJhdGlvblVSTCgpIHsKLSAgICByZXR1cm4gdWRkaVJlZ18uZ2V0UmVnaXN0cmF0aW9uVVJMKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotICAgIHJldHVybiBnZXROYW1lKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJRmF2b3JpdGVzVURESVJlZ2lzdHJ5IGdldElGYXZvcml0ZXNVRERJUmVnaXN0cnlJbnRlcmZhY2UoKQotICB7Ci0gICAgcmV0dXJuIHVkZGlSZWdfOwotICB9Ci19Ci0gIApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1VERElSZWdpc3RyeUZvbGRlckVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNVRERJUmVnaXN0cnlGb2xkZXJFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhOGZjYzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1VERElSZWdpc3RyeUZvbGRlckVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuTGluazsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy5GYXZvcml0ZXNNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLkNhdGVnb3J5TW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVVJMVXRpbHM7Ci0KLS8qKgotKiBUaGUgZGF0YSBtb2RlbCBlbGVtZW50IHRoYXQgcmVwcmVzZW50cyAKLSogYSBXU0lMIGRvY3VtZW50Ci0qLwotcHVibGljIGNsYXNzIEZhdm9yaXRlc1VERElSZWdpc3RyeUZvbGRlckVsZW1lbnQgZXh0ZW5kcyBGYXZvcml0ZXNGb2xkZXJFbGVtZW50Ci17Ci0gIHB1YmxpYyBGYXZvcml0ZXNVRERJUmVnaXN0cnlGb2xkZXJFbGVtZW50KFN0cmluZyBuYW1lLCBNb2RlbCBtb2RlbCwgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIpIHsKLSAgICBzdXBlcihuYW1lLCBtb2RlbCwgbm9kZU1hbmFnZXIpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgaW5pdChGYXZvcml0ZXNNYWluRWxlbWVudCBmYXZNYWluRWxlbWVudCkgewotICAgIExpbmtbXSBsaW5rcyA9IGZhdk1haW5FbGVtZW50LmxvYWRVRERJUmVnaXN0cmllcygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlua3MubGVuZ3RoOyBpKyspIHsKLSAgICAgIExpbmsgbGluayA9IGxpbmtzW2ldOwotICAgICAgRmF2b3JpdGVzVURESVJlZ2lzdHJ5RWxlbWVudCBmYXZVRERJUmVnc2l0cnlFbGVtZW50ID0gbmV3IEZhdm9yaXRlc1VERElSZWdpc3RyeUVsZW1lbnQoKGxpbmsuZ2V0QWJzdHJhY3RzKCkpWzBdLmdldFRleHQoKSwgZ2V0TW9kZWwoKSwgbGluayk7Ci0gICAgICBjb25uZWN0KGZhdlVERElSZWdzaXRyeUVsZW1lbnQsIEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1JFR0lTVFJZX05PREUsIE1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUik7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBhZGRGYXZvcml0ZShIYXNodGFibGUgdGFibGUpIHsKLSAgICBTdHJpbmcgcmVnaXN0cnlOYW1lID0gKFN0cmluZyl0YWJsZS5nZXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1JFR0lTVFJZX05BTUUpOwotICAgIFN0cmluZyBpbnF1aXJ5QVBJID0gKFN0cmluZyl0YWJsZS5nZXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1JFR0lTVFJZX0lOUVVJUllfQVBJKTsKLSAgICBTdHJpbmcgcHVibGlzaEFQSSA9IChTdHJpbmcpdGFibGUuZ2V0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9SRUdJU1RSWV9QVUJMSVNIX0FQSSk7Ci0gICAgU3RyaW5nIHJlZ2lzdHJhdGlvblVSTCA9IChTdHJpbmcpdGFibGUuZ2V0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9SRUdJU1RSWV9SRUdJU1RSQVRJT05fVVJMKTsKLSAgICBFbnVtZXJhdGlvbiB1c2VyRGVmaW5lZENhdGVnb3JpZXMgPSAoRW51bWVyYXRpb24pdGFibGUuZ2V0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9SRUdJU1RSWV9DQVRFR09SSUVTX0VOVU0pOwotICAgIC8vIFNhdmUgdGhlIGNhdGVnb3J5IGRhdGEgZmlyc3QgYW5kIHVuZG8gaWYgbmVjZXNzYXJ5LgotICAgIGlmICh1c2VyRGVmaW5lZENhdGVnb3JpZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgcGx1Z2luTWV0YWRhdGFEaXJlY3RvcnkgPSAoU3RyaW5nKXRhYmxlLmdldChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1BMVUdJTl9NRVRBREFUQV9ESVJFQ1RPUlkpOwotICAgICAgU3RyaW5nQnVmZmVyIGRpcmVjdG9yeUJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgIGZvcm1DYXRlZ29yaWVzRGlyZWN0b3J5KGRpcmVjdG9yeUJ1ZmZlcixwbHVnaW5NZXRhZGF0YURpcmVjdG9yeSxyZWdpc3RyeU5hbWUpOwotICAgICAgRmlsZSBjYXRlZ29yaWVzRGlyZWN0b3J5RmlsZSA9IG5ldyBGaWxlKGRpcmVjdG9yeUJ1ZmZlci50b1N0cmluZygpKTsKLSAgICAgIGNhdGVnb3JpZXNEaXJlY3RvcnlGaWxlLm1rZGlycygpOwotICAgICAgU3RyaW5nQnVmZmVyIGNhdGVnb3J5RmlsZU5hbWUgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICB3aGlsZSAodXNlckRlZmluZWRDYXRlZ29yaWVzLmhhc01vcmVFbGVtZW50cygpKQotICAgICAgewotICAgICAgICBDYXRlZ29yeU1vZGVsIGNhdGVnb3J5TW9kZWwgPSAoQ2F0ZWdvcnlNb2RlbCl1c2VyRGVmaW5lZENhdGVnb3JpZXMubmV4dEVsZW1lbnQoKTsgICAgICAgIAotICAgICAgICBjYXRlZ29yeUZpbGVOYW1lLnNldExlbmd0aCgwKTsKLSAgICAgICAgU3RyaW5nIGVuY29kZWRDYXRlZ29yeUtleSA9IFVSTFV0aWxzLmVuY29kZShjYXRlZ29yeU1vZGVsLmdldENhdGVnb3J5S2V5KCkpOwotICAgICAgICBjYXRlZ29yeUZpbGVOYW1lLmFwcGVuZChjYXRlZ29yaWVzRGlyZWN0b3J5RmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSkuYXBwZW5kKEZpbGUuc2VwYXJhdG9yQ2hhcikuYXBwZW5kKGVuY29kZWRDYXRlZ29yeUtleSkuYXBwZW5kKCIudHh0Iik7Ci0gICAgICAgIGJ5dGUgcmMgPSBjYXRlZ29yeU1vZGVsLnNhdmVEYXRhKGNhdGVnb3J5RmlsZU5hbWUudG9TdHJpbmcoKSk7Ci0gICAgICAgIGlmIChyYyAhPSBDYXRlZ29yeU1vZGVsLk9QRVJBVElPTl9TVUNDRVNTRlVMKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gRGVsZXRlIHRoZSBjYXRlZ29yeSBmaWxlIGlmIGl0IGV4aXN0cy4KLSAgICAgICAgICBGaWxlIGNhdGVnb3J5RmlsZSA9IG5ldyBGaWxlKGNhdGVnb3J5RmlsZU5hbWUudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgaWYgKGNhdGVnb3J5RmlsZS5leGlzdHMoKSkKLSAgICAgICAgICAgIGNhdGVnb3J5RmlsZS5kZWxldGUoKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2xlYW51cENhdGVnb3J5RGlyZWN0b3JpZXMoY2F0ZWdvcmllc0RpcmVjdG9yeUZpbGUpOwotICAgIH0KLSAgICBpZiAocmVnaXN0cnlOYW1lID09IG51bGwgfHwgaW5xdWlyeUFQSSA9PSBudWxsIHx8IHB1Ymxpc2hBUEkgPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBGYXZvcml0ZXNVRERJUmVnaXN0cnlFbGVtZW50IGUgPSBnZXRGYXZvcml0ZShyZWdpc3RyeU5hbWUpOwotICAgIGlmIChlICE9IG51bGwpCi0gICAgICByZW1vdmVGYXZvcml0ZShlKTsKLSAgICBGYXZvcml0ZXNNYWluRWxlbWVudCBmYXZNYWluRWxlbWVudCA9IGdldEZhdm9yaXRlc01haW5FbGVtZW50KCk7Ci0gICAgTGluayBsaW5rID0gZmF2TWFpbkVsZW1lbnQuYWRkVURESVJlZ2lzdHJ5KHJlZ2lzdHJ5TmFtZSwgaW5xdWlyeUFQSSwgcHVibGlzaEFQSSwgcmVnaXN0cmF0aW9uVVJMKTsKLSAgICBib29sZWFuIHNhdmVkID0gZmF2TWFpbkVsZW1lbnQuc2F2ZUZhdm9yaXRlcygpOwotICAgIGlmIChzYXZlZCkgewotICAgICAgRmF2b3JpdGVzVURESVJlZ2lzdHJ5RWxlbWVudCBmYXZVRERJUmVnc2l0cnlFbGVtZW50ID0gbmV3IEZhdm9yaXRlc1VERElSZWdpc3RyeUVsZW1lbnQocmVnaXN0cnlOYW1lLCBnZXRNb2RlbCgpLCBsaW5rKTsKLSAgICAgIGNvbm5lY3QoZmF2VURESVJlZ3NpdHJ5RWxlbWVudCwgRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfUkVHSVNUUllfTk9ERSwgTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICB9Ci0gICAgcmV0dXJuIHNhdmVkOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIHZvaWQgZm9ybUNhdGVnb3JpZXNEaXJlY3RvcnkoU3RyaW5nQnVmZmVyIGNhdGVnb3JpZXNEaXJlY3RvcnksU3RyaW5nIHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5LFN0cmluZyByZWdpc3RyeU5hbWUpCi0gIHsKLSAgICAvLyA8bWV0YWRhdGE+L3VkZGkvPHJlZ2lzdHJ5SWQ+L2NhdGVnb3JpZXMKLQlTdHJpbmcgZW5jb2RlZFJlZ2lzdHJ5TmFtZSA9IFVSTFV0aWxzLmVuY29kZShyZWdpc3RyeU5hbWUpOwotICAgIGNhdGVnb3JpZXNEaXJlY3RvcnkuYXBwZW5kKHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5KS5hcHBlbmQoInVkZGkiKS5hcHBlbmQoRmlsZS5zZXBhcmF0b3JDaGFyKS5hcHBlbmQoZW5jb2RlZFJlZ2lzdHJ5TmFtZSkuYXBwZW5kKEZpbGUuc2VwYXJhdG9yQ2hhcikuYXBwZW5kKCJjYXRlZ29yaWVzIik7ICAgIAotICB9Ci0gIAotICBwcml2YXRlIGZpbmFsIHZvaWQgY2xlYXJSZWdpc3RyeU1ldGFkYXRhKFN0cmluZyBwbHVnaW5NZXRhZGF0YURpcmVjdG9yeSxTdHJpbmcgcmVnaXN0cnlOYW1lKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGNhdGVnb3JpZXNEaXJlY3RvcnkgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgZm9ybUNhdGVnb3JpZXNEaXJlY3RvcnkoY2F0ZWdvcmllc0RpcmVjdG9yeSxwbHVnaW5NZXRhZGF0YURpcmVjdG9yeSxyZWdpc3RyeU5hbWUpOwotICAgIEZpbGUgY2F0ZWdvcmllc0RpcmVjdG9yeUZpbGUgPSBuZXcgRmlsZShjYXRlZ29yaWVzRGlyZWN0b3J5LnRvU3RyaW5nKCkpOwotICAgIEZpbGVbXSBjYXRlZ29yeUZpbGVzID0gY2F0ZWdvcmllc0RpcmVjdG9yeUZpbGUubGlzdEZpbGVzKCk7Ci0gICAgaWYgKGNhdGVnb3J5RmlsZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmb3IgKGludCBpPTA7aTxjYXRlZ29yeUZpbGVzLmxlbmd0aDtpKyspCi0gICAgICAgIGNhdGVnb3J5RmlsZXNbaV0uZGVsZXRlKCk7Ci0gICAgfQotICAgIGNsZWFudXBDYXRlZ29yeURpcmVjdG9yaWVzKGNhdGVnb3JpZXNEaXJlY3RvcnlGaWxlKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIGNsZWFudXBDYXRlZ29yeURpcmVjdG9yaWVzKEZpbGUgY2F0ZWdvcmllc0RpcmVjdG9yeUZpbGUpCi0gIHsKLSAgICAvLyBEZWxldGUgdGhlIGNhdGVnb3JpZXMgc3ViZGlyZWN0b3J5IGlmIGl0IGlzIGVtcHR5LgotICAgIFN0cmluZ1tdIGZpbGVMaXN0OwotICAgIGZpbGVMaXN0ID0gY2F0ZWdvcmllc0RpcmVjdG9yeUZpbGUubGlzdCgpOwotICAgIGlmIChmaWxlTGlzdCA9PSBudWxsIHx8IGZpbGVMaXN0Lmxlbmd0aCA9PSAwKQotICAgICAgY2F0ZWdvcmllc0RpcmVjdG9yeUZpbGUuZGVsZXRlKCk7Ci0gICAgLy8gRGVsZXRlIHRoZSA8cmVnaXN0cnlJZD4gc3ViZGlyZWN0b3J5IGlmIGl0IGlzIGVtcHR5LgotICAgIEZpbGUgcmVnaXN0cnlJZERpcmVjdG9yeUZpbGUgPSBjYXRlZ29yaWVzRGlyZWN0b3J5RmlsZS5nZXRQYXJlbnRGaWxlKCk7Ci0gICAgZmlsZUxpc3QgPSByZWdpc3RyeUlkRGlyZWN0b3J5RmlsZS5saXN0KCk7Ci0gICAgaWYgKGZpbGVMaXN0ID09IG51bGwgfHwgZmlsZUxpc3QubGVuZ3RoID09IDApCi0gICAgICByZWdpc3RyeUlkRGlyZWN0b3J5RmlsZS5kZWxldGUoKTsKLSAgICAvLyBEZWxldGUgdGhlIHVkZGkgc3ViZGlyZWN0b3J5IGlmIGl0IGlzIGVtcHR5LgotICAgIEZpbGUgdWRkaURpcmVjdG9yeUZpbGUgPSByZWdpc3RyeUlkRGlyZWN0b3J5RmlsZS5nZXRQYXJlbnRGaWxlKCk7Ci0gICAgZmlsZUxpc3QgPSB1ZGRpRGlyZWN0b3J5RmlsZS5saXN0KCk7Ci0gICAgaWYgKGZpbGVMaXN0ID09IG51bGwgfHwgZmlsZUxpc3QubGVuZ3RoID09IDApCi0gICAgICB1ZGRpRGlyZWN0b3J5RmlsZS5kZWxldGUoKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGZhdm9yaXRlRXhpc3RzKEhhc2h0YWJsZSB0YWJsZSkgewotICAgIFN0cmluZyByZWdpc3RyeU5hbWUgPSAoU3RyaW5nKXRhYmxlLmdldChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfUkVHSVNUUllfTkFNRSk7Ci0gICAgaWYgKHJlZ2lzdHJ5TmFtZSA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiAoZ2V0RmF2b3JpdGUocmVnaXN0cnlOYW1lKSAhPSBudWxsKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJlbW92ZUZhdm9yaXRlQnlOb2RlSUQoaW50IG5vZGVJRCxTdHJpbmcgcGx1Z2luTWV0YWRhdGFEaXJlY3RvcnkpIHsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyXy5nZXROb2RlKG5vZGVJRCk7Ci0gICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgRmF2b3JpdGVzTWFpbkVsZW1lbnQgZmF2TWFpbkVsZW1lbnQgPSBnZXRGYXZvcml0ZXNNYWluRWxlbWVudCgpOwotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBGYXZvcml0ZXNVRERJUmVnaXN0cnlFbGVtZW50KQotICAgIHsKLSAgICAgIGNsZWFyUmVnaXN0cnlNZXRhZGF0YShwbHVnaW5NZXRhZGF0YURpcmVjdG9yeSxzZWxlY3RlZEVsZW1lbnQuZ2V0TmFtZSgpKTsKLSAgICAgIGJvb2xlYW4gcmMgPSByZW1vdmVGYXZvcml0ZSgoRmF2b3JpdGVzVURESVJlZ2lzdHJ5RWxlbWVudClzZWxlY3RlZEVsZW1lbnQpOwotICAgICAgcmMgPSByYyAmJiBmYXZNYWluRWxlbWVudC5zYXZlRmF2b3JpdGVzKCk7Ci0gICAgICByZXR1cm4gcmM7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiByZW1vdmVGYXZvcml0ZShGYXZvcml0ZXNVRERJUmVnaXN0cnlFbGVtZW50IGVsZW1lbnQpIHsKLSAgICBMaW5rIGxpbmsgPSAoKEZhdm9yaXRlc1VERElSZWdpc3RyeUVsZW1lbnQpZWxlbWVudCkuZ2V0TGluaygpOwotICAgIEZhdm9yaXRlc01haW5FbGVtZW50IGZhdk1haW5FbGVtZW50ID0gZ2V0RmF2b3JpdGVzTWFpbkVsZW1lbnQoKTsKLSAgICBpZiAoZmF2TWFpbkVsZW1lbnQucmVtb3ZlTGluayhsaW5rKSkgewotICAgICAgZWxlbWVudC5kaXNjb25uZWN0QWxsKCk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcmVtb3ZlQWxsRmF2b3JpdGVzKFN0cmluZyBwbHVnaW5NZXRhZGF0YURpcmVjdG9yeSkgewotICAgIEZhdm9yaXRlc01haW5FbGVtZW50IGZhdk1haW5FbGVtZW50ID0gZ2V0RmF2b3JpdGVzTWFpbkVsZW1lbnQoKTsKLSAgICBFbnVtZXJhdGlvbiBlID0gZ2V0QWxsRmF2b3JpdGVzKCk7Ci0gICAgd2hpbGUoZS5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgRmF2b3JpdGVzVURESVJlZ2lzdHJ5RWxlbWVudCBmYXZVRERJUmVnaXN0cnlFbGVtZW50ID0gKEZhdm9yaXRlc1VERElSZWdpc3RyeUVsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgICAgY2xlYXJSZWdpc3RyeU1ldGFkYXRhKHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5LGZhdlVERElSZWdpc3RyeUVsZW1lbnQuZ2V0TmFtZSgpKTsKLSAgICAgIExpbmsgbGluayA9IGZhdlVERElSZWdpc3RyeUVsZW1lbnQuZ2V0TGluaygpOwotICAgICAgZmF2TWFpbkVsZW1lbnQucmVtb3ZlTGluayhsaW5rKTsKLSAgICB9Ci0gICAgZGlzY29ubmVjdFJlbChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9SRUdJU1RSWV9OT0RFKTsKLSAgICByZXR1cm4gZmF2TWFpbkVsZW1lbnQuc2F2ZUZhdm9yaXRlcygpOwotICB9Ci0KLSAgcHVibGljIEVudW1lcmF0aW9uIGdldEFsbEZhdm9yaXRlcygpIHsKLSAgICByZXR1cm4gZ2V0RWxlbWVudHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfUkVHSVNUUllfTk9ERSk7Ci0gIH0KLQotICBwcml2YXRlIEZhdm9yaXRlc1VERElSZWdpc3RyeUVsZW1lbnQgZ2V0RmF2b3JpdGUoU3RyaW5nIHJlZ2lzdHJ5TmFtZSkgewotICAgIEVudW1lcmF0aW9uIGUgPSBnZXRBbGxGYXZvcml0ZXMoKTsKLSAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgRmF2b3JpdGVzVURESVJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKEZhdm9yaXRlc1VERElSZWdpc3RyeUVsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgICAgaWYgKHJlZ2lzdHJ5TmFtZS5lcXVhbHMocmVnRWxlbWVudC5nZXROYW1lKCkpKQotICAgICAgICByZXR1cm4gcmVnRWxlbWVudDsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNVRERJU2VydmljZUVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNVRERJU2VydmljZUVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzAwYjM0ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzVURESVNlcnZpY2VFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbDsKLQotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5TZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5mYXZvcml0ZXMuRmF2b3JpdGVzVURESVNlcnZpY2U7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNVRERJU2VydmljZUVsZW1lbnQgZXh0ZW5kcyBGYXZvcml0ZXNFbGVtZW50IHsKLQotICBwcml2YXRlIEZhdm9yaXRlc1VERElTZXJ2aWNlIHVkZGlTZXJ2aWNlXzsKLQotICBwdWJsaWMgRmF2b3JpdGVzVURESVNlcnZpY2VFbGVtZW50KFN0cmluZyBuYW1lLCBNb2RlbCBtb2RlbCwgU2VydmljZSBzZXJ2aWNlKSB7Ci0gICAgc3VwZXIobmFtZSwgbW9kZWwpOwotICAgIHVkZGlTZXJ2aWNlXyA9IG5ldyBGYXZvcml0ZXNVRERJU2VydmljZSgpOwotICAgIHVkZGlTZXJ2aWNlXy5zZXRTZXJ2aWNlKHNlcnZpY2UpOwotICB9Ci0KLSAgcHVibGljIFNlcnZpY2UgZ2V0U2VydmljZSgpIHsKLSAgICByZXR1cm4gdWRkaVNlcnZpY2VfLmdldFNlcnZpY2UoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLSAgICByZXR1cm4gdWRkaVNlcnZpY2VfLmdldE5hbWUoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5xdWlyeVVSTCgpIHsKLSAgICByZXR1cm4gdWRkaVNlcnZpY2VfLmdldElucXVpcnlVUkwoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmljZUtleSgpIHsKLSAgICByZXR1cm4gdWRkaVNlcnZpY2VfLmdldFNlcnZpY2VLZXkoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgcmV0dXJuIGdldE5hbWUoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1VERElTZXJ2aWNlRm9sZGVyRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1VERElTZXJ2aWNlRm9sZGVyRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYWI0ZjkxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNVRERJU2VydmljZUZvbGRlckVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5TZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Nb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLkZhdm9yaXRlc01vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotLyoqCi0qIFRoZSBkYXRhIG1vZGVsIGVsZW1lbnQgdGhhdCByZXByZXNlbnRzIAotKiBhIFdTSUwgZG9jdW1lbnQKLSovCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzVURESVNlcnZpY2VGb2xkZXJFbGVtZW50IGV4dGVuZHMgRmF2b3JpdGVzRm9sZGVyRWxlbWVudAotewotCi0gIHB1YmxpYyBGYXZvcml0ZXNVRERJU2VydmljZUZvbGRlckVsZW1lbnQoU3RyaW5nIG5hbWUsIE1vZGVsIG1vZGVsLCBOb2RlTWFuYWdlciBub2RlTWFuYWdlcikgewotICAgIHN1cGVyKG5hbWUsIG1vZGVsLCBub2RlTWFuYWdlcik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBpbml0KEZhdm9yaXRlc01haW5FbGVtZW50IGZhdk1haW5FbGVtZW50KSB7Ci0gICAgU2VydmljZVtdIHNlcnZpY2VzID0gZmF2TWFpbkVsZW1lbnQubG9hZFVERElTZXJ2aWNlcygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VydmljZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgIFNlcnZpY2Ugc2VydmljZSA9IHNlcnZpY2VzW2ldOwotICAgICAgRmF2b3JpdGVzVURESVNlcnZpY2VFbGVtZW50IGZhdlVERElTZXJ2aWNlRWxlbWVudCA9IG5ldyBGYXZvcml0ZXNVRERJU2VydmljZUVsZW1lbnQoKHNlcnZpY2UuZ2V0U2VydmljZU5hbWVzKCkpWzBdLmdldFRleHQoKSwgZ2V0TW9kZWwoKSwgc2VydmljZSk7Ci0gICAgICBjb25uZWN0KGZhdlVERElTZXJ2aWNlRWxlbWVudCwgRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfU0VSVklDRV9OT0RFLCBNb2RlbENvbnN0YW50cy5SRUxfT1dORVIpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGFkZEZhdm9yaXRlKEhhc2h0YWJsZSB0YWJsZSkgewotICAgIFN0cmluZyBzZXJ2aWNlTmFtZSA9IChTdHJpbmcpdGFibGUuZ2V0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9TRVJWSUNFX05BTUUpOwotICAgIFN0cmluZyBpbnF1aXJ5QVBJID0gKFN0cmluZyl0YWJsZS5nZXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1NFUlZJQ0VfSU5RVUlSWV9BUEkpOwotICAgIFN0cmluZyBzZXJ2aWNlS2V5ID0gKFN0cmluZyl0YWJsZS5nZXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1NFUlZJQ0VfS0VZKTsKLSAgICBpZiAoc2VydmljZU5hbWUgPT0gbnVsbCB8fCBpbnF1aXJ5QVBJID09IG51bGwgfHwgc2VydmljZUtleSA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEZhdm9yaXRlc1VERElTZXJ2aWNlRWxlbWVudCBlID0gZ2V0RmF2b3JpdGUoaW5xdWlyeUFQSSwgc2VydmljZUtleSk7Ci0gICAgaWYgKGUgIT0gbnVsbCkKLSAgICAgIHJlbW92ZUZhdm9yaXRlKGUpOwotICAgIEZhdm9yaXRlc01haW5FbGVtZW50IGZhdk1haW5FbGVtZW50ID0gZ2V0RmF2b3JpdGVzTWFpbkVsZW1lbnQoKTsKLSAgICBTZXJ2aWNlIHNlcnZpY2UgPSBmYXZNYWluRWxlbWVudC5hZGRVRERJU2VydmljZShzZXJ2aWNlTmFtZSwgaW5xdWlyeUFQSSwgc2VydmljZUtleSk7Ci0gICAgYm9vbGVhbiBzYXZlZCA9IGZhdk1haW5FbGVtZW50LnNhdmVGYXZvcml0ZXMoKTsKLSAgICBpZiAoc2F2ZWQpIHsKLSAgICAgIEZhdm9yaXRlc1VERElTZXJ2aWNlRWxlbWVudCBmYXZVRERJU2VydmljZUVsZW1lbnQgPSBuZXcgRmF2b3JpdGVzVURESVNlcnZpY2VFbGVtZW50KHNlcnZpY2VOYW1lLCBnZXRNb2RlbCgpLCBzZXJ2aWNlKTsKLSAgICAgIGNvbm5lY3QoZmF2VURESVNlcnZpY2VFbGVtZW50LCBGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9TRVJWSUNFX05PREUsIE1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUik7Ci0gICAgfQotICAgIHJldHVybiBzYXZlZDsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGZhdm9yaXRlRXhpc3RzKEhhc2h0YWJsZSB0YWJsZSkgewotICAgIFN0cmluZyBpbnF1aXJ5QVBJID0gKFN0cmluZyl0YWJsZS5nZXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1NFUlZJQ0VfSU5RVUlSWV9BUEkpOwotICAgIFN0cmluZyBzZXJ2aWNlS2V5ID0gKFN0cmluZyl0YWJsZS5nZXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1NFUlZJQ0VfS0VZKTsKLSAgICBpZiAoaW5xdWlyeUFQSSA9PSBudWxsIHx8IHNlcnZpY2VLZXkgPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gKGdldEZhdm9yaXRlKGlucXVpcnlBUEksIHNlcnZpY2VLZXkpICE9IG51bGwpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcmVtb3ZlRmF2b3JpdGVCeU5vZGVJRChpbnQgbm9kZUlELFN0cmluZyBwbHVnaW5NZXRhZGF0YURpcmVjdG9yeSkgewotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXJfLmdldE5vZGUobm9kZUlEKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBGYXZvcml0ZXNNYWluRWxlbWVudCBmYXZNYWluRWxlbWVudCA9IGdldEZhdm9yaXRlc01haW5FbGVtZW50KCk7Ci0gICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEZhdm9yaXRlc1VERElTZXJ2aWNlRWxlbWVudCkKLSAgICAgIHJldHVybiAocmVtb3ZlRmF2b3JpdGUoKEZhdm9yaXRlc1VERElTZXJ2aWNlRWxlbWVudClzZWxlY3RlZEVsZW1lbnQpICYmIGZhdk1haW5FbGVtZW50LnNhdmVGYXZvcml0ZXMoKSk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIHJlbW92ZUZhdm9yaXRlKEZhdm9yaXRlc1VERElTZXJ2aWNlRWxlbWVudCBlbGVtZW50KSB7Ci0gICAgU2VydmljZSBzZXJ2aWNlID0gKChGYXZvcml0ZXNVRERJU2VydmljZUVsZW1lbnQpZWxlbWVudCkuZ2V0U2VydmljZSgpOwotICAgIEZhdm9yaXRlc01haW5FbGVtZW50IGZhdk1haW5FbGVtZW50ID0gZ2V0RmF2b3JpdGVzTWFpbkVsZW1lbnQoKTsKLSAgICBpZiAoZmF2TWFpbkVsZW1lbnQucmVtb3ZlU2VydmljZShzZXJ2aWNlKSkgewotICAgICAgZWxlbWVudC5kaXNjb25uZWN0QWxsKCk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcmVtb3ZlQWxsRmF2b3JpdGVzKFN0cmluZyBwbHVnaW5NZXRhZGF0YURpcmVjdG9yeSkgewotICAgIEZhdm9yaXRlc01haW5FbGVtZW50IGZhdk1haW5FbGVtZW50ID0gZ2V0RmF2b3JpdGVzTWFpbkVsZW1lbnQoKTsKLSAgICBFbnVtZXJhdGlvbiBlID0gZ2V0QWxsRmF2b3JpdGVzKCk7Ci0gICAgd2hpbGUoZS5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgRmF2b3JpdGVzVURESVNlcnZpY2VFbGVtZW50IGZhdlVERElTZXJ2aWNlRWxlbWVudCA9IChGYXZvcml0ZXNVRERJU2VydmljZUVsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgICAgU2VydmljZSBzZXJ2aWNlID0gZmF2VURESVNlcnZpY2VFbGVtZW50LmdldFNlcnZpY2UoKTsKLSAgICAgIGZhdk1haW5FbGVtZW50LnJlbW92ZVNlcnZpY2Uoc2VydmljZSk7Ci0gICAgfQotICAgIGRpc2Nvbm5lY3RSZWwoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfU0VSVklDRV9OT0RFKTsKLSAgICByZXR1cm4gZmF2TWFpbkVsZW1lbnQuc2F2ZUZhdm9yaXRlcygpOwotICB9Ci0KLSAgcHVibGljIEVudW1lcmF0aW9uIGdldEFsbEZhdm9yaXRlcygpIHsKLSAgICByZXR1cm4gZ2V0RWxlbWVudHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfU0VSVklDRV9OT0RFKTsKLSAgfQotCi0gIHByaXZhdGUgRmF2b3JpdGVzVURESVNlcnZpY2VFbGVtZW50IGdldEZhdm9yaXRlKFN0cmluZyBpbnF1aXJ5QVBJLCBTdHJpbmcgc2VydmljZUtleSkgewotICAgIEVudW1lcmF0aW9uIGUgPSBnZXRBbGxGYXZvcml0ZXMoKTsKLSAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgRmF2b3JpdGVzVURESVNlcnZpY2VFbGVtZW50IHNlckVsZW1lbnQgPSAoRmF2b3JpdGVzVURESVNlcnZpY2VFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICAgIGlmIChpbnF1aXJ5QVBJLmVxdWFscyhzZXJFbGVtZW50LmdldElucXVpcnlVUkwoKSkgJiYKLSAgICAgICAgICBzZXJ2aWNlS2V5LmVxdWFscyhzZXJFbGVtZW50LmdldFNlcnZpY2VLZXkoKSkpCi0gICAgICAgIHJldHVybiBzZXJFbGVtZW50OwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDliMmMwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsOwotCi1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmZhdm9yaXRlcy5GYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZTsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCBleHRlbmRzIEZhdm9yaXRlc0VsZW1lbnQgewotCi0gIHByaXZhdGUgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2UgdWRkaVNlckludF87Ci0KLSAgcHVibGljIEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudChTdHJpbmcgbmFtZSwgTW9kZWwgbW9kZWwsIFNlcnZpY2Ugc2VydmljZSkgewotICAgIHN1cGVyKG5hbWUsIG1vZGVsKTsKLSAgICB1ZGRpU2VySW50XyA9IG5ldyBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZSgpOwotICAgIHVkZGlTZXJJbnRfLnNldFNlcnZpY2Uoc2VydmljZSk7Ci0gIH0KLQotICBwdWJsaWMgU2VydmljZSBnZXRTZXJ2aWNlKCkgewotICAgIHJldHVybiB1ZGRpU2VySW50Xy5nZXRTZXJ2aWNlKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0gICAgcmV0dXJuIHVkZGlTZXJJbnRfLmdldE5hbWUoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5xdWlyeVVSTCgpIHsKLSAgICByZXR1cm4gdWRkaVNlckludF8uZ2V0SW5xdWlyeVVSTCgpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlSW50ZXJmYWNlS2V5KCkgewotICAgIHJldHVybiB1ZGRpU2VySW50Xy5nZXRTZXJ2aWNlSW50ZXJmYWNlS2V5KCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotICAgIHJldHVybiBnZXROYW1lKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUZvbGRlckVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUZvbGRlckVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWViNDlkYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VGb2xkZXJFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy5GYXZvcml0ZXNNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci0KLS8qKgotKiBUaGUgZGF0YSBtb2RlbCBlbGVtZW50IHRoYXQgcmVwcmVzZW50cyAKLSogYSBXU0lMIGRvY3VtZW50Ci0qLwotcHVibGljIGNsYXNzIEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRm9sZGVyRWxlbWVudCBleHRlbmRzIEZhdm9yaXRlc0ZvbGRlckVsZW1lbnQKLXsKLQotICBwdWJsaWMgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VGb2xkZXJFbGVtZW50KFN0cmluZyBuYW1lLCBNb2RlbCBtb2RlbCwgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIpIHsKLSAgICBzdXBlcihuYW1lLCBtb2RlbCwgbm9kZU1hbmFnZXIpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgaW5pdChGYXZvcml0ZXNNYWluRWxlbWVudCBmYXZNYWluRWxlbWVudCkgewotICAgIFNlcnZpY2VbXSBzZXJ2aWNlcyA9IGZhdk1haW5FbGVtZW50LmxvYWRVRERJU2VydmljZUludGVyZmFjZXMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNlcnZpY2VzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBTZXJ2aWNlIHNlcnZpY2UgPSBzZXJ2aWNlc1tpXTsKLSAgICAgIEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCBmYXZVRERJU2VySW50RWxlbWVudCA9IG5ldyBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUVsZW1lbnQoKHNlcnZpY2UuZ2V0U2VydmljZU5hbWVzKCkpWzBdLmdldFRleHQoKSwgZ2V0TW9kZWwoKSwgc2VydmljZSk7Ci0gICAgICBjb25uZWN0KGZhdlVERElTZXJJbnRFbGVtZW50LCBGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9TRVJWSUNFX0lOVEVSRkFDRV9OT0RFLCBNb2RlbENvbnN0YW50cy5SRUxfT1dORVIpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGFkZEZhdm9yaXRlKEhhc2h0YWJsZSB0YWJsZSkgewotICAgIFN0cmluZyBzZXJJbnROYW1lID0gKFN0cmluZyl0YWJsZS5nZXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUpOwotICAgIFN0cmluZyBpbnF1aXJ5QVBJID0gKFN0cmluZyl0YWJsZS5nZXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1NFUlZJQ0VfSU5URVJGQUNFX0lOUVVJUllfQVBJKTsKLSAgICBTdHJpbmcgc2VySW50S2V5ID0gKFN0cmluZyl0YWJsZS5nZXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1NFUlZJQ0VfSU5URVJGQUNFX0tFWSk7Ci0gICAgaWYgKHNlckludE5hbWUgPT0gbnVsbCB8fCBpbnF1aXJ5QVBJID09IG51bGwgfHwgc2VySW50S2V5ID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VFbGVtZW50IGUgPSBnZXRGYXZvcml0ZShpbnF1aXJ5QVBJLCBzZXJJbnRLZXkpOwotICAgIGlmIChlICE9IG51bGwpCi0gICAgICByZW1vdmVGYXZvcml0ZShlKTsKLSAgICBGYXZvcml0ZXNNYWluRWxlbWVudCBmYXZNYWluRWxlbWVudCA9IGdldEZhdm9yaXRlc01haW5FbGVtZW50KCk7Ci0gICAgU2VydmljZSBzZXJ2aWNlID0gZmF2TWFpbkVsZW1lbnQuYWRkVURESVNlcnZpY2VJbnRlcmZhY2Uoc2VySW50TmFtZSwgaW5xdWlyeUFQSSwgc2VySW50S2V5KTsKLSAgICBib29sZWFuIHNhdmVkID0gZmF2TWFpbkVsZW1lbnQuc2F2ZUZhdm9yaXRlcygpOwotICAgIGlmIChzYXZlZCkgewotICAgICAgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VFbGVtZW50IGZhdlVERElTZXJJbnRFbGVtZW50ID0gbmV3IEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudChzZXJJbnROYW1lLCBnZXRNb2RlbCgpLCBzZXJ2aWNlKTsKLSAgICAgIGNvbm5lY3QoZmF2VURESVNlckludEVsZW1lbnQsIEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1NFUlZJQ0VfSU5URVJGQUNFX05PREUsIE1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUik7Ci0gICAgfQotICAgIHJldHVybiBzYXZlZDsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGZhdm9yaXRlRXhpc3RzKEhhc2h0YWJsZSB0YWJsZSkgewotICAgIFN0cmluZyBpbnF1aXJ5QVBJID0gKFN0cmluZyl0YWJsZS5nZXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1NFUlZJQ0VfSU5URVJGQUNFX0lOUVVJUllfQVBJKTsKLSAgICBTdHJpbmcgc2VySW50S2V5ID0gKFN0cmluZyl0YWJsZS5nZXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1NFUlZJQ0VfSU5URVJGQUNFX0tFWSk7Ci0gICAgaWYgKGlucXVpcnlBUEkgPT0gbnVsbCB8fCBzZXJJbnRLZXkgPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gKGdldEZhdm9yaXRlKGlucXVpcnlBUEksIHNlckludEtleSkgIT0gbnVsbCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiByZW1vdmVGYXZvcml0ZUJ5Tm9kZUlEKGludCBub2RlSUQsU3RyaW5nIHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5KSB7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlcl8uZ2V0Tm9kZShub2RlSUQpOwotICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIEZhdm9yaXRlc01haW5FbGVtZW50IGZhdk1haW5FbGVtZW50ID0gZ2V0RmF2b3JpdGVzTWFpbkVsZW1lbnQoKTsKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KQotICAgICAgcmV0dXJuIChyZW1vdmVGYXZvcml0ZSgoRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KXNlbGVjdGVkRWxlbWVudCkgJiYgZmF2TWFpbkVsZW1lbnQuc2F2ZUZhdm9yaXRlcygpKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gcmVtb3ZlRmF2b3JpdGUoRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VFbGVtZW50IGVsZW1lbnQpIHsKLSAgICBTZXJ2aWNlIHNlcnZpY2UgPSAoKEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCllbGVtZW50KS5nZXRTZXJ2aWNlKCk7Ci0gICAgRmF2b3JpdGVzTWFpbkVsZW1lbnQgZmF2TWFpbkVsZW1lbnQgPSBnZXRGYXZvcml0ZXNNYWluRWxlbWVudCgpOwotICAgIGlmIChmYXZNYWluRWxlbWVudC5yZW1vdmVTZXJ2aWNlKHNlcnZpY2UpKSB7Ci0gICAgICBlbGVtZW50LmRpc2Nvbm5lY3RBbGwoKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiByZW1vdmVBbGxGYXZvcml0ZXMoU3RyaW5nIHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5KSB7Ci0gICAgRmF2b3JpdGVzTWFpbkVsZW1lbnQgZmF2TWFpbkVsZW1lbnQgPSBnZXRGYXZvcml0ZXNNYWluRWxlbWVudCgpOwotICAgIEVudW1lcmF0aW9uIGUgPSBnZXRBbGxGYXZvcml0ZXMoKTsKLSAgICB3aGlsZShlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUVsZW1lbnQgZmF2VURESVNlckludEVsZW1lbnQgPSAoRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICAgIFNlcnZpY2Ugc2VydmljZSA9IGZhdlVERElTZXJJbnRFbGVtZW50LmdldFNlcnZpY2UoKTsKLSAgICAgIGZhdk1haW5FbGVtZW50LnJlbW92ZVNlcnZpY2Uoc2VydmljZSk7Ci0gICAgfQotICAgIGRpc2Nvbm5lY3RSZWwoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfU0VSVklDRV9JTlRFUkZBQ0VfTk9ERSk7Ci0gICAgcmV0dXJuIGZhdk1haW5FbGVtZW50LnNhdmVGYXZvcml0ZXMoKTsKLSAgfQotCi0gIHB1YmxpYyBFbnVtZXJhdGlvbiBnZXRBbGxGYXZvcml0ZXMoKSB7Ci0gICAgcmV0dXJuIGdldEVsZW1lbnRzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1NFUlZJQ0VfSU5URVJGQUNFX05PREUpOwotICB9Ci0KLSAgcHJpdmF0ZSBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUVsZW1lbnQgZ2V0RmF2b3JpdGUoU3RyaW5nIGlucXVpcnlBUEksIFN0cmluZyBzZXJJbnRLZXkpIHsKLSAgICBFbnVtZXJhdGlvbiBlID0gZ2V0QWxsRmF2b3JpdGVzKCk7Ci0gICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgIEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCBzZXJJbnRFbGVtZW50ID0gKEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCllLm5leHRFbGVtZW50KCk7Ci0gICAgICBpZiAoaW5xdWlyeUFQSS5lcXVhbHMoc2VySW50RWxlbWVudC5nZXRJbnF1aXJ5VVJMKCkpICYmCi0gICAgICAgICAgIHNlckludEtleS5lcXVhbHMoc2VySW50RWxlbWVudC5nZXRTZXJ2aWNlSW50ZXJmYWNlS2V5KCkpKQotICAgICAgICByZXR1cm4gc2VySW50RWxlbWVudDsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5RWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3YTRkZTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDkxMiAgIDE0MTc5NiBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5yZWdpc3RyeS5JUmVnaXN0cnlNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5yZWdpc3RyeS5SZWdpc3RyeVNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnJlZ2lzdHJ5LlVERElSZWdpc3RyeVNlcnZpY2U7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5RWxlbWVudCBleHRlbmRzIEZhdm9yaXRlc0VsZW1lbnQKLXsKLSAgcHJpdmF0ZSBMaXN0IG5hbWVzOwotICBwcml2YXRlIExpc3QgZGVzY3M7Ci0gIHByaXZhdGUgU3RyaW5nIHZlcnNpb247Ci0gIHByaXZhdGUgU3RyaW5nIGRlZmF1bHRMb2dpbjsKLSAgcHJpdmF0ZSBTdHJpbmcgZGVmYXVsdFBhc3N3b3JkOwotICBwcml2YXRlIFN0cmluZyBpbnF1aXJ5VVJMOwotICBwcml2YXRlIFN0cmluZyBwdWJsaXNoVVJMOwotICBwcml2YXRlIFN0cmluZyBzZWN1cmVJbnF1aXJ5VVJMOwotICBwcml2YXRlIFN0cmluZyBzZWN1cmVQdWJsaXNoVVJMOwotICBwcml2YXRlIFRheG9ub215W10gdGF4b25vbWllczsKLQotICBwdWJsaWMgU3RyaW5nIGdldERlZmF1bHRMb2dpbigpCi0gIHsKLSAgICByZXR1cm4gZGVmYXVsdExvZ2luOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RGVmYXVsdExvZ2luKFN0cmluZyBkZWZhdWx0TG9naW4pCi0gIHsKLSAgICB0aGlzLmRlZmF1bHRMb2dpbiA9IGRlZmF1bHRMb2dpbjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RGVmYXVsdFBhc3N3b3JkKCkKLSAgewotICAgIHJldHVybiBkZWZhdWx0UGFzc3dvcmQ7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXREZWZhdWx0UGFzc3dvcmQoU3RyaW5nIGRlZmF1bHRQYXNzd29yZCkKLSAgewotICAgIHRoaXMuZGVmYXVsdFBhc3N3b3JkID0gZGVmYXVsdFBhc3N3b3JkOwotICB9Ci0KLSAgcHVibGljIFRheG9ub215W10gZ2V0VGF4b25vbWllcygpCi0gIHsKLSAgICByZXR1cm4gdGF4b25vbWllczsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFRheG9ub21pZXMoVGF4b25vbXlbXSB0YXhvbm9taWVzKQotICB7Ci0gICAgdGhpcy50YXhvbm9taWVzID0gdGF4b25vbWllczsKLSAgfQotCi0gIHB1YmxpYyBGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5RWxlbWVudChTdHJpbmcgbmFtZSwgTW9kZWwgbW9kZWwpCi0gIHsKLSAgICBzdXBlcihuYW1lLCBtb2RlbCk7Ci0gIH0KLQotICBwdWJsaWMgTGlzdCBnZXREZXNjcygpCi0gIHsKLSAgICByZXR1cm4gZGVzY3M7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXREZXNjcyhMaXN0IGRlc2NzKQotICB7Ci0gICAgdGhpcy5kZXNjcyA9IGRlc2NzOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRJbnF1aXJ5VVJMKCkKLSAgewotICAgIHJldHVybiBpbnF1aXJ5VVJMOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0SW5xdWlyeVVSTChTdHJpbmcgaW5xdWlyeVVSTCkKLSAgewotICAgIHRoaXMuaW5xdWlyeVVSTCA9IGlucXVpcnlVUkw7Ci0gIH0KLQotICBwdWJsaWMgTGlzdCBnZXROYW1lcygpCi0gIHsKLSAgICByZXR1cm4gbmFtZXM7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXROYW1lcyhMaXN0IG5hbWVzKQotICB7Ci0gICAgdGhpcy5uYW1lcyA9IG5hbWVzOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRQdWJsaXNoVVJMKCkKLSAgewotICAgIHJldHVybiBwdWJsaXNoVVJMOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0UHVibGlzaFVSTChTdHJpbmcgcHVibGlzaFVSTCkKLSAgewotICAgIHRoaXMucHVibGlzaFVSTCA9IHB1Ymxpc2hVUkw7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNlY3VyZUlucXVpcnlVUkwoKQotICB7Ci0gICAgcmV0dXJuIHNlY3VyZUlucXVpcnlVUkw7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRTZWN1cmVJbnF1aXJ5VVJMKFN0cmluZyBzZWN1cmVJbnF1aXJ5VVJMKQotICB7Ci0gICAgdGhpcy5zZWN1cmVJbnF1aXJ5VVJMID0gc2VjdXJlSW5xdWlyeVVSTDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VjdXJlUHVibGlzaFVSTCgpCi0gIHsKLSAgICByZXR1cm4gc2VjdXJlUHVibGlzaFVSTDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFNlY3VyZVB1Ymxpc2hVUkwoU3RyaW5nIHNlY3VyZVB1Ymxpc2hVUkwpCi0gIHsKLSAgICB0aGlzLnNlY3VyZVB1Ymxpc2hVUkwgPSBzZWN1cmVQdWJsaXNoVVJMOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRWZXJzaW9uKCkKLSAgewotICAgIHJldHVybiB2ZXJzaW9uOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0VmVyc2lvbihTdHJpbmcgdmVyc2lvbikKLSAgewotICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb247Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIHJldHVybiBnZXROYW1lKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHJlZnJlc2hNZXRhKCl7Ci0JICAgIAotCSAgICBSZWdpc3RyeVNlcnZpY2UgcmVnU2VydmljZSA9IFJlZ2lzdHJ5U2VydmljZS5pbnN0YW5jZSgpOwotCSAgICBJUmVnaXN0cnlNYW5hZ2VyIHJlZ01hbmFnZXIgPSByZWdTZXJ2aWNlLmdldERlZmF1bHRSZWdpc3RyeU1hbmFnZXIoKTsKLQkgICAgdHJ5Ci0JICAgIHsKLQkgICAgICAKLQkgICAgCQotCSAgICAgIHJlZ01hbmFnZXIucmVmcmVzaE1hbmFnZXIoKTsKLQkgICAgICBTdHJpbmdbXSByZWdVUklzID0gcmVnTWFuYWdlci5nZXRSZWdpc3RyeVVSSXMoKTsKLQkgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlZ1VSSXMubGVuZ3RoOyBpKyspCi0JICAgICAgewotCSAgICAgICAgUmVnaXN0cnkgcmVnID0gcmVnTWFuYWdlci5sb2FkUmVnaXN0cnkocmVnVVJJc1tpXSk7Ci0JICAgICAgICBpZiAocmVnIGluc3RhbmNlb2YgVURESVJlZ2lzdHJ5KQotCSAgICAgICAgewotCSAgICAgICAgICBVRERJUmVnaXN0cnkgdWRkaVJlZyA9IChVRERJUmVnaXN0cnkpcmVnOwotCSAgICAgICAgICBMaXN0IG5hbWVzID0gdWRkaVJlZy5nZXROYW1lKCk7Ci0JICAgICAgICAgIAotCSAgICAgICAgICBpZih1ZGRpUmVnLmdldERpc2NvdmVyeVVSTCgpLmVxdWFscyhnZXRJbnF1aXJ5VVJMKCkpKXsKLQkgICAgICAgICAgCi0JICAgICAgICAJICBzZXROYW1lcyhuYW1lcyk7Ci0JICAgICAgICAJICBzZXREZXNjcyh1ZGRpUmVnLmdldERlc2NyaXB0aW9uKCkpOwotCSAgICAgICAgCSAgc2V0VmVyc2lvbih1ZGRpUmVnLmdldFZlcnNpb24oKSk7Ci0JICAgICAgICAJICBzZXREZWZhdWx0TG9naW4odWRkaVJlZy5nZXREZWZhdWx0TG9naW4oKSk7Ci0JICAgICAgICAJICBzZXREZWZhdWx0UGFzc3dvcmQodWRkaVJlZy5nZXREZWZhdWx0UGFzc3dvcmQoKSk7Ci0JICAgICAgICAJICBzZXRJbnF1aXJ5VVJMKHVkZGlSZWcuZ2V0RGlzY292ZXJ5VVJMKCkpOwotCSAgICAgICAgCSAgc2V0UHVibGlzaFVSTCh1ZGRpUmVnLmdldFB1YmxpY2F0aW9uVVJMKCkpOwotCSAgICAgICAgCSAgc2V0U2VjdXJlSW5xdWlyeVVSTCh1ZGRpUmVnLmdldFNlY3VyZWREaXNjb3ZlcnlVUkwoKSk7Ci0JICAgICAgICAJICBzZXRTZWN1cmVQdWJsaXNoVVJMKHVkZGlSZWcuZ2V0U2VjdXJlZFB1YmxpY2F0aW9uVVJMKCkpOwotCSAgICAgICAgCSAgVGF4b25vbXlbXSB0YXhvbm9taWVzID0gcmVnTWFuYWdlci5sb2FkVGF4b25vbWllcyhVRERJUmVnaXN0cnlTZXJ2aWNlLmluc3RhbmNlKCkuZ2V0VGF4b25vbXlVUklzKHVkZGlSZWcpKTsKLQkgICAgICAgIAkgIHNldFRheG9ub21pZXModGF4b25vbWllcyk7Ci0JICAgICAgICAgIH0KLQkgICAgICAgIH0KLQkgICAgICB9Ci0JICAgIH0KLQkgICAgY2F0Y2ggKENvcmVFeGNlcHRpb24gY2UpCi0JICAgIHsKLQkgICAgICAvLyBUT0RPOiBCZXR0ZXIgZXJyb3IgcmVwb3J0aW5nCi0JICAgICAgY2UucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIH0gIAotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeUZvbGRlckVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTFhZDExLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA5MDYgICAxNDE3OTYgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Nb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy5GYXZvcml0ZXNNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5OYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnJlZ2lzdHJ5LklSZWdpc3RyeU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnJlZ2lzdHJ5LlJlZ2lzdHJ5U2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucmVnaXN0cnkuVURESVJlZ2lzdHJ5U2VydmljZTsKLQotLyoqCi0gKiBUaGUgZGF0YSBtb2RlbCBlbGVtZW50IHRoYXQgcmVwcmVzZW50cyBhIFdTSUwgZG9jdW1lbnQKLSAqLwotcHVibGljIGNsYXNzIEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlGb2xkZXJFbGVtZW50IGV4dGVuZHMgRmF2b3JpdGVzRm9sZGVyRWxlbWVudAotewotICBwdWJsaWMgRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeUZvbGRlckVsZW1lbnQoU3RyaW5nIG5hbWUsIE1vZGVsIG1vZGVsLCBOb2RlTWFuYWdlciBub2RlTWFuYWdlcikKLSAgewotICAgIHN1cGVyKG5hbWUsIG1vZGVsLCBub2RlTWFuYWdlcik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBpbml0KEZhdm9yaXRlc01haW5FbGVtZW50IGZhdk1haW5FbGVtZW50KQotICB7Ci0gICAgcmVmcmVzaCgpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVmcmVzaCgpewotCSAgICBkaXNjb25uZWN0UmVsKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VU0VSX0RFRl9VRERJX1JFR0lTVFJZX05PREUpOwotCSAgICBSZWdpc3RyeVNlcnZpY2UgcmVnU2VydmljZSA9IFJlZ2lzdHJ5U2VydmljZS5pbnN0YW5jZSgpOwotCSAgICBJUmVnaXN0cnlNYW5hZ2VyIHJlZ01hbmFnZXIgPSByZWdTZXJ2aWNlLmdldERlZmF1bHRSZWdpc3RyeU1hbmFnZXIoKTsKLQkgICAgdHJ5Ci0JICAgIHsKLQkgICAgICByZWdNYW5hZ2VyLnJlZnJlc2hNYW5hZ2VyKCk7Ci0JICAgICAgU3RyaW5nW10gcmVnVVJJcyA9IHJlZ01hbmFnZXIuZ2V0UmVnaXN0cnlVUklzKCk7Ci0JICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWdVUklzLmxlbmd0aDsgaSsrKQotCSAgICAgIHsKLQkgICAgICAgIFJlZ2lzdHJ5IHJlZyA9IHJlZ01hbmFnZXIubG9hZFJlZ2lzdHJ5KHJlZ1VSSXNbaV0pOwotCSAgICAgICAgaWYgKHJlZyBpbnN0YW5jZW9mIFVERElSZWdpc3RyeSkKLQkgICAgICAgIHsKLQkgICAgICAgICAgVURESVJlZ2lzdHJ5IHVkZGlSZWcgPSAoVURESVJlZ2lzdHJ5KXJlZzsKLQkgICAgICAgICAgTGlzdCBuYW1lcyA9IHVkZGlSZWcuZ2V0TmFtZSgpOwotCSAgICAgICAgICBTdHJpbmcgZGlzcGxheU5hbWUgPSBuYW1lcyAhPSBudWxsICYmICFuYW1lcy5pc0VtcHR5KCkgPyAoKE5hbWUpbmFtZXMuZ2V0KDApKS5nZXRWYWx1ZSgpIDogIiI7Ci0JICAgICAgICAgIEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlFbGVtZW50IGZhdlVzZXJEZWZVRERJUmVnRWxlbWVudCA9IG5ldyBGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5RWxlbWVudChkaXNwbGF5TmFtZSwgZ2V0TW9kZWwoKSk7Ci0JICAgICAgICAgIGZhdlVzZXJEZWZVRERJUmVnRWxlbWVudC5zZXROYW1lcyhuYW1lcyk7Ci0JICAgICAgICAgIGZhdlVzZXJEZWZVRERJUmVnRWxlbWVudC5zZXREZXNjcyh1ZGRpUmVnLmdldERlc2NyaXB0aW9uKCkpOwotCSAgICAgICAgICBmYXZVc2VyRGVmVURESVJlZ0VsZW1lbnQuc2V0VmVyc2lvbih1ZGRpUmVnLmdldFZlcnNpb24oKSk7Ci0JICAgICAgICAgIGZhdlVzZXJEZWZVRERJUmVnRWxlbWVudC5zZXREZWZhdWx0TG9naW4odWRkaVJlZy5nZXREZWZhdWx0TG9naW4oKSk7Ci0JICAgICAgICAgIGZhdlVzZXJEZWZVRERJUmVnRWxlbWVudC5zZXREZWZhdWx0UGFzc3dvcmQodWRkaVJlZy5nZXREZWZhdWx0UGFzc3dvcmQoKSk7Ci0JICAgICAgICAgIGZhdlVzZXJEZWZVRERJUmVnRWxlbWVudC5zZXRJbnF1aXJ5VVJMKHVkZGlSZWcuZ2V0RGlzY292ZXJ5VVJMKCkpOwotCSAgICAgICAgICBmYXZVc2VyRGVmVURESVJlZ0VsZW1lbnQuc2V0UHVibGlzaFVSTCh1ZGRpUmVnLmdldFB1YmxpY2F0aW9uVVJMKCkpOwotCSAgICAgICAgICBmYXZVc2VyRGVmVURESVJlZ0VsZW1lbnQuc2V0U2VjdXJlSW5xdWlyeVVSTCh1ZGRpUmVnLmdldFNlY3VyZWREaXNjb3ZlcnlVUkwoKSk7Ci0JICAgICAgICAgIGZhdlVzZXJEZWZVRERJUmVnRWxlbWVudC5zZXRTZWN1cmVQdWJsaXNoVVJMKHVkZGlSZWcuZ2V0U2VjdXJlZFB1YmxpY2F0aW9uVVJMKCkpOwotCSAgICAgICAgICBUYXhvbm9teVtdIHRheG9ub21pZXMgPSByZWdNYW5hZ2VyLmxvYWRUYXhvbm9taWVzKFVERElSZWdpc3RyeVNlcnZpY2UuaW5zdGFuY2UoKS5nZXRUYXhvbm9teVVSSXModWRkaVJlZykpOwotCSAgICAgICAgICBmYXZVc2VyRGVmVURESVJlZ0VsZW1lbnQuc2V0VGF4b25vbWllcyh0YXhvbm9taWVzKTsKLQkgICAgICAgICAgY29ubmVjdChmYXZVc2VyRGVmVURESVJlZ0VsZW1lbnQsIEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VU0VSX0RFRl9VRERJX1JFR0lTVFJZX05PREUsIE1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUik7Ci0JICAgICAgICB9Ci0JICAgICAgfQotCSAgICB9Ci0JICAgIGNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKQotCSAgICB7Ci0JICAgICAgLy8gVE9ETzogQmV0dGVyIGVycm9yIHJlcG9ydGluZwotCSAgICAgIGNlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICB9ICAKLSAgfQotICAKLSAgCi0gIHB1YmxpYyBib29sZWFuIGFkZEZhdm9yaXRlKEhhc2h0YWJsZSB0YWJsZSkKLSAgewotICAgIC8vIGRvIG5vdGhpbmcKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGZhdm9yaXRlRXhpc3RzKEhhc2h0YWJsZSB0YWJsZSkKLSAgewotICAgIC8vIGRvIG5vdGhpbmcKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJlbW92ZUZhdm9yaXRlQnlOb2RlSUQoaW50IG5vZGVJRCwgU3RyaW5nIHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5KQotICB7Ci0gICAgLy8gZG8gbm90aGluZwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcmVtb3ZlQWxsRmF2b3JpdGVzKFN0cmluZyBwbHVnaW5NZXRhZGF0YURpcmVjdG9yeSkKLSAgewotICAgIC8vIGRvIG5vdGhpbmcKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBFbnVtZXJhdGlvbiBnZXRBbGxGYXZvcml0ZXMoKQotICB7Ci0gICAgIHJldHVybiBnZXRFbGVtZW50cyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVVNFUl9ERUZfVURESV9SRUdJU1RSWV9OT0RFKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1dTRExTZXJ2aWNlRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1dTRExTZXJ2aWNlRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjJiYjZiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsOwotCi1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmZhdm9yaXRlcy5GYXZvcml0ZXNXU0RMOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzV1NETFNlcnZpY2VFbGVtZW50IGV4dGVuZHMgRmF2b3JpdGVzRWxlbWVudCB7Ci0KLSAgcHJpdmF0ZSBGYXZvcml0ZXNXU0RMIHdzZGxfOwotCi0gIHB1YmxpYyBGYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQoU3RyaW5nIG5hbWUsIE1vZGVsIG1vZGVsLCBTZXJ2aWNlIHNlcnZpY2UpIHsKLSAgICBzdXBlcihuYW1lLCBtb2RlbCk7Ci0gICAgd3NkbF8gPSBuZXcgRmF2b3JpdGVzV1NETCgpOwotICAgIHdzZGxfLnNldFNlcnZpY2Uoc2VydmljZSk7Ci0gIH0KLQotICBwdWJsaWMgU2VydmljZSBnZXRTZXJ2aWNlKCkgewotICAgIHJldHVybiB3c2RsXy5nZXRTZXJ2aWNlKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdzZGxVcmwoKSB7Ci0gICAgcmV0dXJuIHdzZGxfLmdldFdzZGxVcmwoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgcmV0dXJuIGdldFdzZGxVcmwoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1dTRExTZXJ2aWNlRm9sZGVyRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1dTRExTZXJ2aWNlRm9sZGVyRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjgzZjQ1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNXU0RMU2VydmljZUZvbGRlckVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5TZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Nb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLkZhdm9yaXRlc01vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1dTRExTZXJ2aWNlRm9sZGVyRWxlbWVudCBleHRlbmRzIEZhdm9yaXRlc0ZvbGRlckVsZW1lbnQKLXsKLQotICBwdWJsaWMgRmF2b3JpdGVzV1NETFNlcnZpY2VGb2xkZXJFbGVtZW50KFN0cmluZyBuYW1lLCBNb2RlbCBtb2RlbCwgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIpIHsKLSAgICBzdXBlcihuYW1lLCBtb2RlbCwgbm9kZU1hbmFnZXIpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgaW5pdChGYXZvcml0ZXNNYWluRWxlbWVudCBmYXZNYWluRWxlbWVudCkgewotICAgIFNlcnZpY2VbXSBzZXJ2aWNlcyA9IGZhdk1haW5FbGVtZW50LmxvYWRXU0RMU2VydmljZXMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNlcnZpY2VzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBTZXJ2aWNlIHNlcnZpY2UgPSBzZXJ2aWNlc1tpXTsKLSAgICAgIEZhdm9yaXRlc1dTRExTZXJ2aWNlRWxlbWVudCBmYXZXU0RMU2VydmljZUVsZW1lbnQgPSBuZXcgRmF2b3JpdGVzV1NETFNlcnZpY2VFbGVtZW50KChzZXJ2aWNlLmdldERlc2NyaXB0aW9ucygpKVswXS5nZXRMb2NhdGlvbigpLCBnZXRNb2RlbCgpLCBzZXJ2aWNlKTsKLSAgICAgIGNvbm5lY3QoZmF2V1NETFNlcnZpY2VFbGVtZW50LCBGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfV1NETF9TRVJWSUNFX05PREUsIE1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUik7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gYWRkRmF2b3JpdGUoSGFzaHRhYmxlIHRhYmxlKSB7Ci0gICAgU3RyaW5nIHdzZGxVUkwgPSAoU3RyaW5nKXRhYmxlLmdldChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1dTRExfVVJMKTsKLSAgICBpZiAod3NkbFVSTCA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEZhdm9yaXRlc1dTRExTZXJ2aWNlRWxlbWVudCBlID0gZ2V0RmF2b3JpdGUod3NkbFVSTCk7Ci0gICAgaWYgKGUgIT0gbnVsbCkKLSAgICAgIHJlbW92ZUZhdm9yaXRlKGUpOwotICAgIEZhdm9yaXRlc01haW5FbGVtZW50IGZhdk1haW5FbGVtZW50ID0gZ2V0RmF2b3JpdGVzTWFpbkVsZW1lbnQoKTsKLSAgICBTZXJ2aWNlIHNlcnZpY2UgPSBmYXZNYWluRWxlbWVudC5hZGRXU0RMU2VydmljZSh3c2RsVVJMKTsKLSAgICBib29sZWFuIHNhdmVkID0gZmF2TWFpbkVsZW1lbnQuc2F2ZUZhdm9yaXRlcygpOwotICAgIGlmIChzYXZlZCkgewotICAgICAgRmF2b3JpdGVzV1NETFNlcnZpY2VFbGVtZW50IGZhdldTRExTZXJ2aWNlRWxlbWVudCA9IG5ldyBGYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQod3NkbFVSTCwgZ2V0TW9kZWwoKSwgc2VydmljZSk7Ci0gICAgICBjb25uZWN0KGZhdldTRExTZXJ2aWNlRWxlbWVudCwgRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1dTRExfU0VSVklDRV9OT0RFLCBNb2RlbENvbnN0YW50cy5SRUxfT1dORVIpOwotICAgIH0KLSAgICByZXR1cm4gc2F2ZWQ7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBmYXZvcml0ZUV4aXN0cyhIYXNodGFibGUgdGFibGUpIHsKLSAgICBTdHJpbmcgd3NkbFVSTCA9IChTdHJpbmcpdGFibGUuZ2V0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfV1NETF9VUkwpOwotICAgIGlmICh3c2RsVVJMID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIChnZXRGYXZvcml0ZSh3c2RsVVJMKSAhPSBudWxsKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJlbW92ZUZhdm9yaXRlQnlOb2RlSUQoaW50IG5vZGVJRCxTdHJpbmcgcGx1Z2luTWV0YWRhdGFEaXJlY3RvcnkpIHsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyXy5nZXROb2RlKG5vZGVJRCk7Ci0gICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgRmF2b3JpdGVzTWFpbkVsZW1lbnQgZmF2TWFpbkVsZW1lbnQgPSBnZXRGYXZvcml0ZXNNYWluRWxlbWVudCgpOwotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBGYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQpCi0gICAgICByZXR1cm4gKHJlbW92ZUZhdm9yaXRlKChGYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50KSAmJiBmYXZNYWluRWxlbWVudC5zYXZlRmF2b3JpdGVzKCkpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIHJlbW92ZUZhdm9yaXRlKEZhdm9yaXRlc1dTRExTZXJ2aWNlRWxlbWVudCBlbGVtZW50KSB7Ci0gICAgU2VydmljZSBzZXJ2aWNlID0gKChGYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQpZWxlbWVudCkuZ2V0U2VydmljZSgpOwotICAgIEZhdm9yaXRlc01haW5FbGVtZW50IGZhdk1haW5FbGVtZW50ID0gZ2V0RmF2b3JpdGVzTWFpbkVsZW1lbnQoKTsKLSAgICBpZiAoZmF2TWFpbkVsZW1lbnQucmVtb3ZlU2VydmljZShzZXJ2aWNlKSkgewotICAgICAgZWxlbWVudC5kaXNjb25uZWN0QWxsKCk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcmVtb3ZlQWxsRmF2b3JpdGVzKFN0cmluZyBwbHVnaW5NZXRhZGF0YURpcmVjdG9yeSkgewotICAgIEZhdm9yaXRlc01haW5FbGVtZW50IGZhdk1haW5FbGVtZW50ID0gZ2V0RmF2b3JpdGVzTWFpbkVsZW1lbnQoKTsKLSAgICBFbnVtZXJhdGlvbiBlID0gZ2V0QWxsRmF2b3JpdGVzKCk7Ci0gICAgd2hpbGUoZS5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgRmF2b3JpdGVzV1NETFNlcnZpY2VFbGVtZW50IGZhdldTRExTZXJ2aWNlRWxlbWVudCA9IChGYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgICAgU2VydmljZSBzZXJ2aWNlID0gZmF2V1NETFNlcnZpY2VFbGVtZW50LmdldFNlcnZpY2UoKTsKLSAgICAgIGZhdk1haW5FbGVtZW50LnJlbW92ZVNlcnZpY2Uoc2VydmljZSk7Ci0gICAgfQotICAgIGRpc2Nvbm5lY3RSZWwoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1dTRExfU0VSVklDRV9OT0RFKTsKLSAgICByZXR1cm4gZmF2TWFpbkVsZW1lbnQuc2F2ZUZhdm9yaXRlcygpOwotICB9Ci0KLSAgcHVibGljIEVudW1lcmF0aW9uIGdldEFsbEZhdm9yaXRlcygpIHsKLSAgICByZXR1cm4gZ2V0RWxlbWVudHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1dTRExfU0VSVklDRV9OT0RFKTsKLSAgfQotCi0gIHByaXZhdGUgRmF2b3JpdGVzV1NETFNlcnZpY2VFbGVtZW50IGdldEZhdm9yaXRlKFN0cmluZyB3c2RsVXJsKSB7Ci0gICAgRW51bWVyYXRpb24gZSA9IGdldEFsbEZhdm9yaXRlcygpOwotICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICBGYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQgd3NkbEVsZW1lbnQgPSAoRmF2b3JpdGVzV1NETFNlcnZpY2VFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICAgIGlmICh3c2RsVXJsLmVxdWFscyh3c2RsRWxlbWVudC5nZXRXc2RsVXJsKCkpKQotICAgICAgICByZXR1cm4gd3NkbEVsZW1lbnQ7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzV1NJTEVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNXU0lMRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODBiNjA3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL2RhdGFtb2RlbC9GYXZvcml0ZXNXU0lMRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWw7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuTGluazsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZmF2b3JpdGVzLkZhdm9yaXRlc1dTSUw7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNXU0lMRWxlbWVudCBleHRlbmRzIEZhdm9yaXRlc0VsZW1lbnQgewotCi0gIHByaXZhdGUgRmF2b3JpdGVzV1NJTCB3c2lsXzsKLQotICBwdWJsaWMgRmF2b3JpdGVzV1NJTEVsZW1lbnQoU3RyaW5nIG5hbWUsIE1vZGVsIG1vZGVsLCBMaW5rIGxpbmspIHsKLSAgICBzdXBlcihuYW1lLCBtb2RlbCk7Ci0gICAgd3NpbF8gPSBuZXcgRmF2b3JpdGVzV1NJTCgpOwotICAgIHdzaWxfLnNldExpbmsobGluayk7Ci0gIH0KLQotICBwdWJsaWMgTGluayBnZXRMaW5rKCkgewotICAgIHJldHVybiB3c2lsXy5nZXRMaW5rKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdzaWxVcmwoKSB7Ci0gICAgcmV0dXJuIHdzaWxfLmdldFdzaWxVcmwoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgcmV0dXJuIGdldFdzaWxVcmwoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvZGF0YW1vZGVsL0Zhdm9yaXRlc1dTSUxGb2xkZXJFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzV1NJTEZvbGRlckVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmVhNDkzMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9kYXRhbW9kZWwvRmF2b3JpdGVzV1NJTEZvbGRlckVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5MaW5rOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Nb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLkZhdm9yaXRlc01vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1dTSUxGb2xkZXJFbGVtZW50IGV4dGVuZHMgRmF2b3JpdGVzRm9sZGVyRWxlbWVudCB7Ci0KLSAgcHVibGljIEZhdm9yaXRlc1dTSUxGb2xkZXJFbGVtZW50KFN0cmluZyBuYW1lLCBNb2RlbCBtb2RlbCwgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIpIHsKLSAgICBzdXBlcihuYW1lLCBtb2RlbCwgbm9kZU1hbmFnZXIpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgaW5pdChGYXZvcml0ZXNNYWluRWxlbWVudCBmYXZNYWluRWxlbWVudCkgewotICAgIExpbmtbXSBsaW5rcyA9IGZhdk1haW5FbGVtZW50LmxvYWRXU0lMcygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlua3MubGVuZ3RoOyBpKyspIHsKLSAgICAgIExpbmsgbGluayA9IGxpbmtzW2ldOwotICAgICAgRmF2b3JpdGVzV1NJTEVsZW1lbnQgZmF2V1NJTEVsZW1lbnQgPSBuZXcgRmF2b3JpdGVzV1NJTEVsZW1lbnQobGluay5nZXRMb2NhdGlvbigpLCBnZXRNb2RlbCgpLCBsaW5rKTsKLSAgICAgIGNvbm5lY3QoZmF2V1NJTEVsZW1lbnQsIEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9XU0lMX05PREUsIE1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUik7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gYWRkRmF2b3JpdGUoSGFzaHRhYmxlIHRhYmxlKSB7Ci0gICAgU3RyaW5nIHdzaWxVUkwgPSAoU3RyaW5nKXRhYmxlLmdldChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1dTSUxfVVJMKTsKLSAgICBpZiAod3NpbFVSTCA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEZhdm9yaXRlc1dTSUxFbGVtZW50IGUgPSBnZXRGYXZvcml0ZSh3c2lsVVJMKTsKLSAgICBpZiAoZSAhPSBudWxsKQotICAgICAgcmVtb3ZlRmF2b3JpdGUoZSk7Ci0gICAgRmF2b3JpdGVzTWFpbkVsZW1lbnQgZmF2TWFpbkVsZW1lbnQgPSBnZXRGYXZvcml0ZXNNYWluRWxlbWVudCgpOwotICAgIExpbmsgbGluayA9IGZhdk1haW5FbGVtZW50LmFkZFdTSUxMaW5rKHdzaWxVUkwpOwotICAgIGJvb2xlYW4gc2F2ZWQgPSBmYXZNYWluRWxlbWVudC5zYXZlRmF2b3JpdGVzKCk7Ci0gICAgaWYgKHNhdmVkKSB7Ci0gICAgICBGYXZvcml0ZXNXU0lMRWxlbWVudCBmYXZXU0lMRWxlbWVudCA9IG5ldyBGYXZvcml0ZXNXU0lMRWxlbWVudCh3c2lsVVJMLCBnZXRNb2RlbCgpLCBsaW5rKTsKLSAgICAgIGNvbm5lY3QoZmF2V1NJTEVsZW1lbnQsIEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9XU0lMX05PREUsIE1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUik7Ci0gICAgfQotICAgIHJldHVybiBzYXZlZDsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGZhdm9yaXRlRXhpc3RzKEhhc2h0YWJsZSB0YWJsZSkgewotICAgIFN0cmluZyB3c2lsVVJMID0gKFN0cmluZyl0YWJsZS5nZXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9XU0lMX1VSTCk7Ci0gICAgaWYgKHdzaWxVUkwgPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gKGdldEZhdm9yaXRlKHdzaWxVUkwpICE9IG51bGwpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcmVtb3ZlRmF2b3JpdGVCeU5vZGVJRChpbnQgbm9kZUlELFN0cmluZyBwbHVnaW5NZXRhZGF0YURpcmVjdG9yeSkgewotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXJfLmdldE5vZGUobm9kZUlEKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBGYXZvcml0ZXNNYWluRWxlbWVudCBmYXZNYWluRWxlbWVudCA9IGdldEZhdm9yaXRlc01haW5FbGVtZW50KCk7Ci0gICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEZhdm9yaXRlc1dTSUxFbGVtZW50KQotICAgICAgcmV0dXJuIChyZW1vdmVGYXZvcml0ZSgoRmF2b3JpdGVzV1NJTEVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50KSAmJiBmYXZNYWluRWxlbWVudC5zYXZlRmF2b3JpdGVzKCkpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiByZW1vdmVGYXZvcml0ZShGYXZvcml0ZXNXU0lMRWxlbWVudCBlbGVtZW50KSB7Ci0gICAgTGluayBsaW5rID0gZWxlbWVudC5nZXRMaW5rKCk7Ci0gICAgRmF2b3JpdGVzTWFpbkVsZW1lbnQgZmF2TWFpbkVsZW1lbnQgPSBnZXRGYXZvcml0ZXNNYWluRWxlbWVudCgpOwotICAgIGlmIChmYXZNYWluRWxlbWVudC5yZW1vdmVMaW5rKGxpbmspKSB7Ci0gICAgICBlbGVtZW50LmRpc2Nvbm5lY3RBbGwoKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiByZW1vdmVBbGxGYXZvcml0ZXMoU3RyaW5nIHBsdWdpbk1ldGFkYXRhRGlyZWN0b3J5KSB7Ci0gICAgRmF2b3JpdGVzTWFpbkVsZW1lbnQgZmF2TWFpbkVsZW1lbnQgPSBnZXRGYXZvcml0ZXNNYWluRWxlbWVudCgpOwotICAgIEVudW1lcmF0aW9uIGUgPSBnZXRBbGxGYXZvcml0ZXMoKTsKLSAgICB3aGlsZShlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICBGYXZvcml0ZXNXU0lMRWxlbWVudCBmYXZXU0lMRWxlbWVudCA9IChGYXZvcml0ZXNXU0lMRWxlbWVudCllLm5leHRFbGVtZW50KCk7Ci0gICAgICBMaW5rIGxpbmsgPSBmYXZXU0lMRWxlbWVudC5nZXRMaW5rKCk7Ci0gICAgICBmYXZNYWluRWxlbWVudC5yZW1vdmVMaW5rKGxpbmspOwotICAgIH0KLSAgICBkaXNjb25uZWN0UmVsKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9XU0lMX05PREUpOwotICAgIHJldHVybiBmYXZNYWluRWxlbWVudC5zYXZlRmF2b3JpdGVzKCk7Ci0gIH0KLQotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0QWxsRmF2b3JpdGVzKCkgewotICAgIHJldHVybiBnZXRFbGVtZW50cyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfV1NJTF9OT0RFKTsKLSAgfQotCi0gIHByaXZhdGUgRmF2b3JpdGVzV1NJTEVsZW1lbnQgZ2V0RmF2b3JpdGUoU3RyaW5nIHdzaWxVcmwpIHsKLSAgICBFbnVtZXJhdGlvbiBlID0gZ2V0QWxsRmF2b3JpdGVzKCk7Ci0gICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgIEZhdm9yaXRlc1dTSUxFbGVtZW50IHdzaWxFbGVtZW50ID0gKEZhdm9yaXRlc1dTSUxFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICAgIGlmICh3c2lsVXJsLmVxdWFscyh3c2lsRWxlbWVudC5nZXRXc2lsVXJsKCkpKQotICAgICAgICByZXR1cm4gd3NpbEVsZW1lbnQ7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9BZGRUb1VERElQZXJzcGVjdGl2ZVRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0FkZFRvVURESVBlcnNwZWN0aXZlVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OGExNzk3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0FkZFRvVURESVBlcnNwZWN0aXZlVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5BZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQWN0aW9uVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBBZGRUb1VERElQZXJzcGVjdGl2ZVRvb2wgZXh0ZW5kcyBBY3Rpb25Ub29sIHsKLQotICAgIHB1YmxpYyBBZGRUb1VERElQZXJzcGVjdGl2ZVRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJmYXZvcml0ZXMvaW1hZ2VzL2FkZF90b191ZGRpX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmIiwgImZhdm9yaXRlcy9pbWFnZXMvYWRkX3RvX3VkZGlfcGVyc3BlY3RpdmVfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0QWN0aW9uTGluaygpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9BZGRXU0lMVG9XU0lMUGVyc3BlY3RpdmVUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9BZGRXU0lMVG9XU0lMUGVyc3BlY3RpdmVUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyNDgxMmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvQWRkV1NJTFRvV1NJTFBlcnNwZWN0aXZlVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5BZGRXU0lMVG9XU0lMUGVyc3BlY3RpdmVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLlNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkFjdGlvblRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgQWRkV1NJTFRvV1NJTFBlcnNwZWN0aXZlVG9vbCBleHRlbmRzIEFjdGlvblRvb2wgewotCi0gICAgcHVibGljIEFkZFdTSUxUb1dTSUxQZXJzcGVjdGl2ZVRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJmYXZvcml0ZXMvaW1hZ2VzL2FkZF90b193c2lsX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmIiwgImZhdm9yaXRlcy9pbWFnZXMvYWRkX3RvX3dzaWxfcGVyc3BlY3RpdmVfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0QWN0aW9uTGluaygpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gQWRkV1NJTFRvV1NJTFBlcnNwZWN0aXZlQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCkpOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzQWRkVG9XU0RMUGVyc3BlY3RpdmVUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNBZGRUb1dTRExQZXJzcGVjdGl2ZVRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTEwMGZhYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNBZGRUb1dTRExQZXJzcGVjdGl2ZVRvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuRmF2b3JpdGVzQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLlNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkFkZFRvV1NETFBlcnNwZWN0aXZlVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNBZGRUb1dTRExQZXJzcGVjdGl2ZVRvb2wgZXh0ZW5kcyBBZGRUb1dTRExQZXJzcGVjdGl2ZVRvb2wgewotCi0gIHB1YmxpYyBGYXZvcml0ZXNBZGRUb1dTRExQZXJzcGVjdGl2ZVRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICBzdXBlcih0b29sTWFuYWdlcixhbHQpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgcmV0dXJuIFNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgZm9ySGlzdG9yeSk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoKSB7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgIHJldHVybiBGYXZvcml0ZXNBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzSW1wb3J0VG9GaWxlU3lzdGVtVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzSW1wb3J0VG9GaWxlU3lzdGVtVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzExMGM1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc0ltcG9ydFRvRmlsZVN5c3RlbVRvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5JbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLlNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkltcG9ydFRvRmlsZVN5c3RlbVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzSW1wb3J0VG9GaWxlU3lzdGVtVG9vbCBleHRlbmRzIEltcG9ydFRvRmlsZVN5c3RlbVRvb2wgewotCi0gICAgcHVibGljIEZhdm9yaXRlc0ltcG9ydFRvRmlsZVN5c3RlbVRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoKSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIEltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCJmYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb25KU1AuanNwIik7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNJbXBvcnRUb1dvcmtiZW5jaFRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc0ltcG9ydFRvV29ya2JlbmNoVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Y2FjOGYwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc0ltcG9ydFRvV29ya2JlbmNoVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5TZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5JbXBvcnRUb1dvcmtiZW5jaFRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzSW1wb3J0VG9Xb3JrYmVuY2hUb29sIGV4dGVuZHMgSW1wb3J0VG9Xb3JrYmVuY2hUb29sIHsKLQotICAgIHB1YmxpYyBGYXZvcml0ZXNJbXBvcnRUb1dvcmtiZW5jaFRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEZvcm1MaW5rKCkKLSAgICB7Ci0gICAgICByZXR1cm4gImZhdm9yaXRlcy9mb3Jtcy9GYXZvcml0ZXNJbXBvcnRUb1dvcmtiZW5jaEZvcm0uanNwIjsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzTGF1bmNoV2ViU2VydmljZVdpemFyZFRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTE5YjM1OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5TZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5MYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbCBleHRlbmRzIExhdW5jaFdlYlNlcnZpY2VXaXphcmRUb29sIHsKLQotICAgIHB1YmxpYyBGYXZvcml0ZXNMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0Rm9ybUxpbmsoKQotICAgIHsKLSAgICAgIHJldHVybiAiZmF2b3JpdGVzL2Zvcm1zL0Zhdm9yaXRlc0xhdW5jaFdlYlNlcnZpY2VXaXphcmRGb3JtLmpzcCI7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzTWFpbk5vZGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc01haW5Ob2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1NjAxMDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzTWFpbk5vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLk1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuRmF2b3JpdGVzTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzTWFpbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzVURESUJ1c2luZXNzRm9sZGVyRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC5GYXZvcml0ZXNVRERJUmVnaXN0cnlGb2xkZXJFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLkZhdm9yaXRlc1VERElTZXJ2aWNlRm9sZGVyRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC5GYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUZvbGRlckVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeUZvbGRlckVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzV1NETFNlcnZpY2VGb2xkZXJFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLkZhdm9yaXRlc1dTSUxGb2xkZXJFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc01haW5Ob2RlIGV4dGVuZHMgRmF2b3JpdGVzTmF2aWdhdG9yTm9kZSB7Ci0gICAgcHVibGljIEZhdm9yaXRlc01haW5Ob2RlKFRyZWVFbGVtZW50IHRyZWVFbGVtZW50LCBOb2RlTWFuYWdlciBub2RlTWFuYWdlcikgewotICAgICAgICBzdXBlcih0cmVlRWxlbWVudCwgbm9kZU1hbmFnZXIsIDEsICJpbWFnZXMvcm9vdF9tYWluLmdpZiIpOwotCi0gICAgICAgIC8vIENyZWF0ZSBVRERJIFJlZ2lzdHJ5IEZvbGRlciBOb2RlCi0gICAgICAgIEZhdm9yaXRlc1VERElSZWdpc3RyeUZvbGRlckVsZW1lbnQgZmF2VURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudCA9IG5ldyBGYXZvcml0ZXNVRERJUmVnaXN0cnlGb2xkZXJFbGVtZW50KGdldE1lc3NhZ2UoIkZBVk9SSVRFU19VRERJX1JFR0lTVFJJRVNfRk9MREVSX05PREUiKSwgdHJlZUVsZW1lbnQuZ2V0TW9kZWwoKSwgbm9kZU1hbmFnZXIpOwotICAgICAgICB0cmVlRWxlbWVudC5jb25uZWN0KGZhdlVERElSZWdpc3RyeUZvbGRlckVsZW1lbnQsIEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1JFR0lTVFJZX0ZPTERFUl9OT0RFLCBNb2RlbENvbnN0YW50cy5SRUxfT1dORVIpOwotICAgICAgICBGYXZvcml0ZXNVRERJUmVnaXN0cnlGb2xkZXJOb2RlIGZhdlVERElSZWdpc3RyeUZvbGRlck5vZGUgPSBuZXcgRmF2b3JpdGVzVURESVJlZ2lzdHJ5Rm9sZGVyTm9kZShmYXZVRERJUmVnaXN0cnlGb2xkZXJFbGVtZW50LCBub2RlTWFuYWdlciwgbm9kZURlcHRoXyArIDEpOwotICAgICAgICBhZGRDaGlsZChmYXZVRERJUmVnaXN0cnlGb2xkZXJOb2RlKTsKLSAgICAgICAgZmF2VURESVJlZ2lzdHJ5Rm9sZGVyTm9kZS5zZXRWaXNpYmlsaXR5T2ZDaGlsZHJlbihmYWxzZSk7Ci0gICAgICAgIGZhdlVERElSZWdpc3RyeUZvbGRlckVsZW1lbnQuaW5pdCgoRmF2b3JpdGVzTWFpbkVsZW1lbnQpdHJlZUVsZW1lbnQpOwotCi0gICAgICAgIC8vIENyZWF0ZSBVc2VyIGRlZmluZWQgVURESSBSZWdpc3RyeSBGb2xkZXIgTm9kZQotICAgICAgICBGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudCBmYXZVc2VyRGVmVURESUZvbGRlckVsZW1lbnQgPSBuZXcgRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeUZvbGRlckVsZW1lbnQoZ2V0TWVzc2FnZSgiRkFWT1JJVEVTX1VTRVJfREVGX1VERElfUkVHSVNUUklFU19GT0xERVJfTk9ERSIpLCB0cmVlRWxlbWVudC5nZXRNb2RlbCgpLCBub2RlTWFuYWdlcik7Ci0gICAgICAgIHRyZWVFbGVtZW50LmNvbm5lY3QoZmF2VXNlckRlZlVERElGb2xkZXJFbGVtZW50LCBGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVVNFUl9ERUZfVURESV9SRUdJU1RSWV9GT0xERVJfTk9ERSwgTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICAgICAgRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeUZvbGRlck5vZGUgZmF2VXNlckRlZlVERElGb2xkZXJOb2RlID0gbmV3IEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlGb2xkZXJOb2RlKGZhdlVzZXJEZWZVRERJRm9sZGVyRWxlbWVudCwgbm9kZU1hbmFnZXIsIG5vZGVEZXB0aF8gKyAxKTsKLSAgICAgICAgYWRkQ2hpbGQoZmF2VXNlckRlZlVERElGb2xkZXJOb2RlKTsKLSAgICAgICAgZmF2VXNlckRlZlVERElGb2xkZXJOb2RlLnNldFZpc2liaWxpdHlPZkNoaWxkcmVuKGZhbHNlKTsKLSAgICAgICAgZmF2VXNlckRlZlVERElGb2xkZXJFbGVtZW50LmluaXQoKEZhdm9yaXRlc01haW5FbGVtZW50KXRyZWVFbGVtZW50KTsKLQotICAgICAgICAvLyBDcmVhdGUgVURESSBCdXNpbmVzcyBGb2xkZXIgTm9kZQotICAgICAgICBGYXZvcml0ZXNVRERJQnVzaW5lc3NGb2xkZXJFbGVtZW50IGZhdlVERElCdXNpbmVzc0ZvbGRlckVsZW1lbnQgPSBuZXcgRmF2b3JpdGVzVURESUJ1c2luZXNzRm9sZGVyRWxlbWVudChnZXRNZXNzYWdlKCJGQVZPUklURVNfVURESV9CVVNJTkVTU0VTX0ZPTERFUl9OT0RFIiksIHRyZWVFbGVtZW50LmdldE1vZGVsKCksIG5vZGVNYW5hZ2VyKTsKLSAgICAgICAgdHJlZUVsZW1lbnQuY29ubmVjdChmYXZVRERJQnVzaW5lc3NGb2xkZXJFbGVtZW50LCBGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9CVVNJTkVTU19GT0xERVJfTk9ERSwgTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICAgICAgRmF2b3JpdGVzVURESUJ1c2luZXNzRm9sZGVyTm9kZSBmYXZVRERJQnVzaW5lc3NGb2xkZXJOb2RlID0gbmV3IEZhdm9yaXRlc1VERElCdXNpbmVzc0ZvbGRlck5vZGUoZmF2VURESUJ1c2luZXNzRm9sZGVyRWxlbWVudCwgbm9kZU1hbmFnZXIsIG5vZGVEZXB0aF8gKyAxKTsKLSAgICAgICAgYWRkQ2hpbGQoZmF2VURESUJ1c2luZXNzRm9sZGVyTm9kZSk7Ci0gICAgICAgIGZhdlVERElCdXNpbmVzc0ZvbGRlck5vZGUuc2V0VmlzaWJpbGl0eU9mQ2hpbGRyZW4oZmFsc2UpOwotICAgICAgICBmYXZVRERJQnVzaW5lc3NGb2xkZXJFbGVtZW50LmluaXQoKEZhdm9yaXRlc01haW5FbGVtZW50KXRyZWVFbGVtZW50KTsKLQotICAgICAgICAvLyBDcmVhdGUgVURESSBTZXJ2aWNlIEZvbGRlciBOb2RlCi0gICAgICAgIEZhdm9yaXRlc1VERElTZXJ2aWNlRm9sZGVyRWxlbWVudCBmYXZVRERJU2VydmljZUZvbGRlckVsZW1lbnQgPSBuZXcgRmF2b3JpdGVzVURESVNlcnZpY2VGb2xkZXJFbGVtZW50KGdldE1lc3NhZ2UoIkZBVk9SSVRFU19VRERJX1NFUlZJQ0VfRk9MREVSX05PREUiKSwgdHJlZUVsZW1lbnQuZ2V0TW9kZWwoKSwgbm9kZU1hbmFnZXIpOwotICAgICAgICB0cmVlRWxlbWVudC5jb25uZWN0KGZhdlVERElTZXJ2aWNlRm9sZGVyRWxlbWVudCwgRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfU0VSVklDRV9GT0xERVJfTk9ERSwgTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICAgICAgRmF2b3JpdGVzVURESVNlcnZpY2VGb2xkZXJOb2RlIGZhdlVERElTZXJ2aWNlRm9sZGVyTm9kZSA9IG5ldyBGYXZvcml0ZXNVRERJU2VydmljZUZvbGRlck5vZGUoZmF2VURESVNlcnZpY2VGb2xkZXJFbGVtZW50LCBub2RlTWFuYWdlciwgbm9kZURlcHRoXyArIDEpOwotICAgICAgICBhZGRDaGlsZChmYXZVRERJU2VydmljZUZvbGRlck5vZGUpOwotICAgICAgICBmYXZVRERJU2VydmljZUZvbGRlck5vZGUuc2V0VmlzaWJpbGl0eU9mQ2hpbGRyZW4oZmFsc2UpOwotICAgICAgICBmYXZVRERJU2VydmljZUZvbGRlckVsZW1lbnQuaW5pdCgoRmF2b3JpdGVzTWFpbkVsZW1lbnQpdHJlZUVsZW1lbnQpOwotCi0gICAgICAgIC8vIENyZWF0ZSBVRERJIFNlcnZpY2UgSW50ZXJmYWNlIEZvbGRlciBOb2RlCi0gICAgICAgIEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRm9sZGVyRWxlbWVudCBmYXZVRERJU2VydmljZUludGVyZmFjZUZvbGRlckVsZW1lbnQgPSBuZXcgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VGb2xkZXJFbGVtZW50KGdldE1lc3NhZ2UoIkZBVk9SSVRFU19VRERJX1NFUlZJQ0VfSU5URVJGQUNFU19GT0xERVJfTk9ERSIpLCB0cmVlRWxlbWVudC5nZXRNb2RlbCgpLCBub2RlTWFuYWdlcik7Ci0gICAgICAgIHRyZWVFbGVtZW50LmNvbm5lY3QoZmF2VURESVNlcnZpY2VJbnRlcmZhY2VGb2xkZXJFbGVtZW50LCBGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9TRVJWSUNFX0lOVEVSRkFDRV9GT0xERVJfTk9ERSwgTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICAgICAgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VGb2xkZXJOb2RlIGZhdlVERElTZXJ2aWNlSW50ZXJmYWNlRm9sZGVyTm9kZSA9IG5ldyBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUZvbGRlck5vZGUoZmF2VURESVNlcnZpY2VJbnRlcmZhY2VGb2xkZXJFbGVtZW50LCBub2RlTWFuYWdlciwgbm9kZURlcHRoXyArIDEpOwotICAgICAgICBhZGRDaGlsZChmYXZVRERJU2VydmljZUludGVyZmFjZUZvbGRlck5vZGUpOwotICAgICAgICBmYXZVRERJU2VydmljZUludGVyZmFjZUZvbGRlck5vZGUuc2V0VmlzaWJpbGl0eU9mQ2hpbGRyZW4oZmFsc2UpOwotICAgICAgICBmYXZVRERJU2VydmljZUludGVyZmFjZUZvbGRlckVsZW1lbnQuaW5pdCgoRmF2b3JpdGVzTWFpbkVsZW1lbnQpdHJlZUVsZW1lbnQpOwotCi0gICAgICAgIC8vIENyZWF0ZSBXU0lMIEZvbGRlciBOb2RlCi0gICAgICAgIEZhdm9yaXRlc1dTSUxGb2xkZXJFbGVtZW50IGZhdldTSUxGb2xkZXJFbGVtZW50ID0gbmV3IEZhdm9yaXRlc1dTSUxGb2xkZXJFbGVtZW50KGdldE1lc3NhZ2UoIkZBVk9SSVRFU19XU0lMX0ZPTERFUl9OT0RFIiksIHRyZWVFbGVtZW50LmdldE1vZGVsKCksIG5vZGVNYW5hZ2VyKTsKLSAgICAgICAgdHJlZUVsZW1lbnQuY29ubmVjdChmYXZXU0lMRm9sZGVyRWxlbWVudCwgRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1dTSUxfRk9MREVSX05PREUsIE1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUik7Ci0gICAgICAgIEZhdm9yaXRlc1dTSUxGb2xkZXJOb2RlIGZhdldTSUxGb2xkZXJOb2RlID0gbmV3IEZhdm9yaXRlc1dTSUxGb2xkZXJOb2RlKGZhdldTSUxGb2xkZXJFbGVtZW50LCBub2RlTWFuYWdlciwgbm9kZURlcHRoXyArIDEpOwotICAgICAgICBhZGRDaGlsZChmYXZXU0lMRm9sZGVyTm9kZSk7Ci0gICAgICAgIGZhdldTSUxGb2xkZXJOb2RlLnNldFZpc2liaWxpdHlPZkNoaWxkcmVuKGZhbHNlKTsKLSAgICAgICAgZmF2V1NJTEZvbGRlckVsZW1lbnQuaW5pdCgoRmF2b3JpdGVzTWFpbkVsZW1lbnQpdHJlZUVsZW1lbnQpOwotCi0gICAgICAgIC8vIENyZWF0ZSBXU0RMIFNlcnZpY2UgRm9sZGVyIE5vZGUKLSAgICAgICAgRmF2b3JpdGVzV1NETFNlcnZpY2VGb2xkZXJFbGVtZW50IGZhdldTRExTZXJ2aWNlRm9sZGVyRWxlbWVudCA9IG5ldyBGYXZvcml0ZXNXU0RMU2VydmljZUZvbGRlckVsZW1lbnQoZ2V0TWVzc2FnZSgiRkFWT1JJVEVTX1dTRExfU0VSVklDRV9GT0xERVJfTk9ERSIpLCB0cmVlRWxlbWVudC5nZXRNb2RlbCgpLCBub2RlTWFuYWdlcik7Ci0gICAgICAgIHRyZWVFbGVtZW50LmNvbm5lY3QoZmF2V1NETFNlcnZpY2VGb2xkZXJFbGVtZW50LCBGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfV1NETF9TRVJWSUNFX0ZPTERFUl9OT0RFLCBNb2RlbENvbnN0YW50cy5SRUxfT1dORVIpOwotICAgICAgICBGYXZvcml0ZXNXU0RMU2VydmljZUZvbGRlck5vZGUgZmF2V1NETFNlcnZpY2VGb2xkZXJOb2RlID0gbmV3IEZhdm9yaXRlc1dTRExTZXJ2aWNlRm9sZGVyTm9kZShmYXZXU0RMU2VydmljZUZvbGRlckVsZW1lbnQsIG5vZGVNYW5hZ2VyLCBub2RlRGVwdGhfICsgMSk7Ci0gICAgICAgIGFkZENoaWxkKGZhdldTRExTZXJ2aWNlRm9sZGVyTm9kZSk7Ci0gICAgICAgIGZhdldTRExTZXJ2aWNlRm9sZGVyTm9kZS5zZXRWaXNpYmlsaXR5T2ZDaGlsZHJlbihmYWxzZSk7Ci0gICAgICAgIGZhdldTRExTZXJ2aWNlRm9sZGVyRWxlbWVudC5pbml0KChGYXZvcml0ZXNNYWluRWxlbWVudCl0cmVlRWxlbWVudCk7Ci0KLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBpbml0VG9vbHMoKSB7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBTdHJpbmcgZ2V0TWVzc2FnZShTdHJpbmcgbXNnKSB7Ci0gICAgICAgIENvbnRyb2xsZXIgY29udHJvbGxlciA9IG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCk7Ci0gICAgICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgICAgICByZXR1cm4gZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZShtc2cpOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzTmF2aWdhdG9yRm9sZGVyTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzTmF2aWdhdG9yRm9sZGVyTm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzVkMGFjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc05hdmlnYXRvckZvbGRlck5vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5GYXZvcml0ZXNUb2dnbGVOb2RlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5TZWxlY3RGYXZvcml0ZXNOb2RlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb2xkZXJOb2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEZhdm9yaXRlc05hdmlnYXRvckZvbGRlck5vZGUgZXh0ZW5kcyBGb2xkZXJOb2RlIHsKLQotICAgIHB1YmxpYyBGYXZvcml0ZXNOYXZpZ2F0b3JGb2xkZXJOb2RlKFRyZWVFbGVtZW50IHRyZWVFbGVtZW50LCBOb2RlTWFuYWdlciBub2RlTWFuYWdlciwgaW50IG5vZGVEZXB0aCkgewotICAgICAgICBzdXBlcih0cmVlRWxlbWVudCwgbm9kZU1hbmFnZXIsIG5vZGVEZXB0aCk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIFN0cmluZyBnZXRUb2dnbGVOb2RlQWN0aW9uSHJlZigpIHsKLSAgICAgICAgcmV0dXJuIEZhdm9yaXRlc1RvZ2dsZU5vZGVBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWRfLGlzT3Blbl8pOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0TGlua0FjdGlvbkhyZWYoKSB7Ci0gICAgICAgIHJldHVybiBTZWxlY3RGYXZvcml0ZXNOb2RlQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlkXywgZmFsc2UpOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzTmF2aWdhdG9yTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzTmF2aWdhdG9yTm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjg3ZDY2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc05hdmlnYXRvck5vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5GYXZvcml0ZXNUb2dnbGVOb2RlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5TZWxlY3RGYXZvcml0ZXNOb2RlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEZhdm9yaXRlc05hdmlnYXRvck5vZGUgZXh0ZW5kcyBOb2RlIHsKLQotICAgIHB1YmxpYyBGYXZvcml0ZXNOYXZpZ2F0b3JOb2RlKFRyZWVFbGVtZW50IHRyZWVFbGVtZW50LCBOb2RlTWFuYWdlciBub2RlTWFuYWdlciwgaW50IG5vZGVEZXB0aCwgU3RyaW5nIGltYWdlUGF0aCkgewotICAgICAgICBzdXBlcih0cmVlRWxlbWVudCwgbm9kZU1hbmFnZXIsIG5vZGVEZXB0aCwgaW1hZ2VQYXRoKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRvZ2dsZU5vZGVBY3Rpb25IcmVmKCkgewotICAgICAgICByZXR1cm4gRmF2b3JpdGVzVG9nZ2xlTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZF8saXNPcGVuXyk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIFN0cmluZyBnZXRMaW5rQWN0aW9uSHJlZigpIHsKLSAgICAgICAgcmV0dXJuIFNlbGVjdEZhdm9yaXRlc05vZGVBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWRfLCBmYWxzZSk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNQZXJzcGVjdGl2ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzUGVyc3BlY3RpdmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGU0OThmOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNQZXJzcGVjdGl2ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuQmFzaWNNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuU3dpdGNoUGVyc3BlY3RpdmVGcm9tRmF2b3JpdGVzQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLkZhdm9yaXRlc01haW5FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHM7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBleHRlbmRzIFBlcnNwZWN0aXZlCi17Ci0gICAgcHJpdmF0ZSBCYXNpY01vZGVsIG1vZGVsXzsKLSAgICBwcml2YXRlIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyXzsKLSAgICBwcml2YXRlIFN0cmluZyBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfOwotICAgIHByaXZhdGUgU3RyaW5nIHNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXzsKLSAgICBwcml2YXRlIFN0cmluZyBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzXzsKLSAgICBwcml2YXRlIFN0cmluZyBzYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3NfOwotCi0gICAgcHVibGljIEZhdm9yaXRlc1BlcnNwZWN0aXZlKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgICB7Ci0gICAgICAgIHN1cGVyKCJmYXZvcml0ZXMiLGNvbnRyb2xsZXIpOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCB2b2lkIGluaXRQZXJzcGVjdGl2ZShTZXJ2bGV0Q29udGV4dCBhcHBsaWNhdGlvbikKLSAgICB7Ci0gICAgICAgIG1vZGVsXyA9IG5ldyBCYXNpY01vZGVsKCJGYXZvcml0ZXNNb2RlbCIpOwotICAgICAgICBGYXZvcml0ZXNNYWluRWxlbWVudCBmYXZvcml0ZXNNYWluRWxlbWVudCA9IG5ldyBGYXZvcml0ZXNNYWluRWxlbWVudChnZXRNZXNzYWdlKCJGQVZPUklURVNfTUFJTl9OT0RFIiksIG1vZGVsXywgY29udHJvbGxlcl8pOwotICAgICAgICBtb2RlbF8uc2V0Um9vdEVsZW1lbnQoZmF2b3JpdGVzTWFpbkVsZW1lbnQpOwotICAgICAgICBub2RlTWFuYWdlcl8gPSBuZXcgTm9kZU1hbmFnZXIoY29udHJvbGxlcl8pOwotICAgICAgICBGYXZvcml0ZXNNYWluTm9kZSBmYXZNYWluTm9kZSA9IG5ldyBGYXZvcml0ZXNNYWluTm9kZShmYXZvcml0ZXNNYWluRWxlbWVudCwgbm9kZU1hbmFnZXJfKTsKLSAgICAgICAgbm9kZU1hbmFnZXJfLnNldFJvb3ROb2RlKGZhdk1haW5Ob2RlKTsKLSAgICAgICAgCi0gICAgICAgIC8vIFN0YXJ0aW5nIGZyYW1lc2V0IHNpemVzLgotICAgICAgICBpZiAoIURpclV0aWxzLmlzUlRMKCkpCi0gICAgICAgICAgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXyA9ICIzMCUsKiI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfID0gIiosMzAlIjsKLSAgICAgICAgc2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfID0gcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXzsKLSAgICAgICAgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c18gPSAiNzUlLCoiOwotICAgICAgICBzYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3NfID0gYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c187ICAgICAgICAKLSAgICB9Ci0KLSAgICBwdWJsaWMgTm9kZU1hbmFnZXIgZ2V0Tm9kZU1hbmFnZXIoKSB7Ci0gICAgICAgIHJldHVybiBub2RlTWFuYWdlcl87Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRQZXJzcGVjdGl2ZUNvbnRlbnRQYWdlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAiZmF2b3JpdGVzL2Zhdl9wZXJzcGVjdGl2ZV9jb250ZW50LmpzcCI7Ci0gICAgfQotCi0gICAgcHVibGljIGludCBnZXRQZXJzcGVjdGl2ZUlkKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfRkFWT1JJVEVTOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0UGFuZXNGaWxlKCkgewotICAgICAgICByZXR1cm4gImZhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc1BhbmVzLmpzcCI7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBTdHJpbmcgZ2V0UHJvY2Vzc0ZyYW1lc2V0c0Zvcm0oKQotICAgIHsKLSAgICAgIHJldHVybiAiZmF2b3JpdGVzL2Zvcm1zL1Byb2Nlc3NGYXZvcml0ZXNGcmFtZXNldHNGb3JtLmpzcCI7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBTdHJpbmcgZ2V0RnJhbWVzZXRzRmlsZSgpCi0gICAgewotICAgICAgcmV0dXJuICJmYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNmcmFtZXNldHMuanNwIjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFRyZWVDb250ZW50VmFyKCkgewotICAgICAgICByZXR1cm4gImZhdk5hdmlnYXRvckNvbnRlbnQiOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRQYWdlKCkgewotICAgICAgICByZXR1cm4gImZhdm9yaXRlcy9mYXZfbmF2aWdhdG9yX2NvbnRlbnQuanNwIjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKSB7Ci0gICAgICAgIHJldHVybiAiZmF2UHJvcGVydGllc0NvbnRhaW5lciI7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyUGFnZSgpIHsKLSAgICAgICAgcmV0dXJuICJmYXZvcml0ZXMvZmF2X3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCI7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTdGF0dXNDb250ZW50VmFyKCkgewotICAgICAgICByZXR1cm4gImZhdlN0YXR1c0NvbnRlbnQiOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFBhZ2UoKSB7Ci0gICAgICAgIHJldHVybiAiZmF2b3JpdGVzL2Zhdl9zdGF0dXNfY29udGVudC5qc3AiOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRlbnRWYXIoKSB7Ci0gICAgICAgIHJldHVybiAiZmF2UHJvcGVydGllc0NvbnRlbnQiOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRlbnRQYWdlKCkgewotICAgICAgICByZXR1cm4gImZhdm9yaXRlcy9mYXZfcHJvcGVydGllc19jb250ZW50LmpzcCI7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKQotICAgIHsKLSAgICAgIHJldHVybiBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgZmluYWwgdm9pZCBzZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoU3RyaW5nIGNvbHMpCi0gICAgewotICAgICAgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXyA9IGNvbHM7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKQotICAgIHsKLSAgICAgIHJldHVybiBzYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29sc187Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBmaW5hbCB2b2lkIHNldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKFN0cmluZyBjb2xzKQotICAgIHsKLSAgICAgIHNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXyA9IGNvbHM7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpCi0gICAgewotICAgICAgcmV0dXJuIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3NfOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgZmluYWwgdm9pZCBzZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKFN0cmluZyByb3dzKQotICAgIHsKLSAgICAgIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3NfID0gcm93czsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoKQotICAgIHsKLSAgICAgIHJldHVybiBzYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3NfOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgZmluYWwgdm9pZCBzZXRTYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoU3RyaW5nIHJvd3MpCi0gICAgewotICAgICAgc2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzXyA9IHJvd3M7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3dpdGNoUGVyc3BlY3RpdmVGb3JtQWN0aW9uTGluayhpbnQgdGFyZ2V0UGVyc3BlY3RpdmVJZCxib29sZWFuIGZvckhpc3RvcnkpCi0gICAgewotICAgICAgcmV0dXJuIFN3aXRjaFBlcnNwZWN0aXZlRnJvbUZhdm9yaXRlc0FjdGlvbi5nZXRGb3JtQWN0aW9uTGluayh0YXJnZXRQZXJzcGVjdGl2ZUlkLGZvckhpc3RvcnkpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1Jlc3RvcmVEZWZhdWx0RmF2b3JpdGVzVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzUmVzdG9yZURlZmF1bHRGYXZvcml0ZXNUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyNmM2Y2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzUmVzdG9yZURlZmF1bHRGYXZvcml0ZXNUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLkZhdm9yaXRlc1Jlc3RvcmVEZWZhdWx0RmF2b3JpdGVzQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5TZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5BY3Rpb25Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1Jlc3RvcmVEZWZhdWx0RmF2b3JpdGVzVG9vbCBleHRlbmRzIEFjdGlvblRvb2wgewotICAgIHB1YmxpYyBGYXZvcml0ZXNSZXN0b3JlRGVmYXVsdEZhdm9yaXRlc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJpbWFnZXMvcmVmcmVzaF9lbmFibGVkLmdpZiIsICJpbWFnZXMvcmVmcmVzaF9oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKCkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBGYXZvcml0ZXNSZXN0b3JlRGVmYXVsdEZhdm9yaXRlc0FjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpKTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1NldERlZmF1bHRWaWV3VG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzU2V0RGVmYXVsdFZpZXdUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjZWM0ZjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzU2V0RGVmYXVsdFZpZXdUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLlNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNldERlZmF1bHRWaWV3VG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNTZXREZWZhdWx0Vmlld1Rvb2wgZXh0ZW5kcyBTZXREZWZhdWx0Vmlld1Rvb2wgewotICAgIHB1YmxpYyBGYXZvcml0ZXNTZXREZWZhdWx0Vmlld1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKSwgQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxULCBBY3Rpb25JbnB1dHMuVklFV1RPT0xJRF9ERUZBVUxULCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoKSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCwgQWN0aW9uSW5wdXRzLlZJRVdUT09MSURfREVGQVVMVCwgZmFsc2UpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VERElCdXNpbmVzc0RldGFpbHNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVRERJQnVzaW5lc3NEZXRhaWxzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzYxNTM2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VERElCdXNpbmVzc0RldGFpbHNUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLlNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1VERElCdXNpbmVzc0RldGFpbHNUb29sIGV4dGVuZHMgRm9ybVRvb2wgewotCi0gICAgcHVibGljIEZhdm9yaXRlc1VERElCdXNpbmVzc0RldGFpbHNUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAiaW1hZ2VzL2RldGFpbHNfZW5hYmxlZC5naWYiLCAiaW1hZ2VzL2RldGFpbHNfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0Rm9ybUxpbmsoKQotICAgIHsKLSAgICAgIHJldHVybiAiZmF2b3JpdGVzL2Zvcm1zL0Zhdm9yaXRlc1VERElCdXNpbmVzc0RldGFpbHNQYWdlLmpzcCI7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESUJ1c2luZXNzRm9sZGVyTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESUJ1c2luZXNzRm9sZGVyTm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjIyZmNlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VERElCdXNpbmVzc0ZvbGRlck5vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkVsZW1lbnRBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsQWRkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5SZWxSZW1vdmVFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLkZhdm9yaXRlc01vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1VERElCdXNpbmVzc0ZvbGRlck5vZGUgZXh0ZW5kcyBGYXZvcml0ZXNOYXZpZ2F0b3JGb2xkZXJOb2RlIHsKLSAgICBwdWJsaWMgRmF2b3JpdGVzVURESUJ1c2luZXNzRm9sZGVyTm9kZShUcmVlRWxlbWVudCB0cmVlRWxlbWVudCwgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsIGludCBub2RlRGVwdGgpIHsKLSAgICAgICAgc3VwZXIodHJlZUVsZW1lbnQsIG5vZGVNYW5hZ2VyLCBub2RlRGVwdGgpOwotICAgICAgICB0cmVlRWxlbWVudC5hZGRMaXN0ZW5lcihuZXcgRWxlbWVudEFkYXB0ZXIoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCByZWxBZGRlZChSZWxBZGRFdmVudCBldmVudCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyByZWwgPSBldmVudC5nZXRPdXRCb3VuZFJlbE5hbWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVsLmVxdWFscyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9CVVNJTkVTU19OT0RFKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGYXZvcml0ZXNVRERJQnVzaW5lc3NOb2RlIGZhdm9yaXRlc1VERElCdXNpbmVzc05vZGUgPSBuZXcgRmF2b3JpdGVzVURESUJ1c2luZXNzTm9kZSgoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0UGFyZW50RWxlbWVudCgpLCBub2RlTWFuYWdlcl8sIG5vZGVEZXB0aF8gKyAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkQ2hpbGQoZmF2b3JpdGVzVURESUJ1c2luZXNzTm9kZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCByZWxSZW1vdmVkKFJlbFJlbW92ZUV2ZW50IGV2ZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJlZUVsZW1lbnQgY2hpbGRFbGVtZW50ID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuZ2V0SW5Cb3VuZFJlbE5hbWUoKS5lcXVhbHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfQlVTSU5FU1NfTk9ERSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRFbGVtZW50ID0gKFRyZWVFbGVtZW50KWV2ZW50LmdldEluYm91bmRFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5nZXRPdXRCb3VuZFJlbE5hbWUoKS5lcXVhbHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfQlVTSU5FU1NfTk9ERSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRFbGVtZW50ID0gKFRyZWVFbGVtZW50KWV2ZW50LmdldE91dEJvdW5kRWxlbWVudCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVDaGlsZE5vZGUoY2hpbGRFbGVtZW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgaW5pdFRvb2xzKCkgewotICAgICAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCkuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICAgICAgbmV3IExpc3RGYXZvcml0ZVVERElCdXNpbmVzc1Rvb2wodG9vbE1hbmFnZXJfLCBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTElTVF9GQVZPUklURV9VRERJX0JVU0lORVNTIikpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VERElCdXNpbmVzc05vZGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VERElCdXNpbmVzc05vZGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2NjOGEyYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVRERJQnVzaW5lc3NOb2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNVRERJQnVzaW5lc3NOb2RlIGV4dGVuZHMgRmF2b3JpdGVzTmF2aWdhdG9yTm9kZSB7Ci0gICAgcHVibGljIEZhdm9yaXRlc1VERElCdXNpbmVzc05vZGUoVHJlZUVsZW1lbnQgdHJlZUVsZW1lbnQsIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyLCBpbnQgbm9kZURlcHRoKSB7Ci0gICAgICAgIHN1cGVyKHRyZWVFbGVtZW50LCBub2RlTWFuYWdlciwgbm9kZURlcHRoLCAiZmF2b3JpdGVzL2ltYWdlcy91ZGRpX2J1c2luZXNzX25vZGUuZ2lmIik7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgaW5pdFRvb2xzKCkgewotICAgICAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCkuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICAgICAgbmV3IEZhdm9yaXRlc1VERElCdXNpbmVzc0RldGFpbHNUb29sKHRvb2xNYW5hZ2VyXywgZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0ZBVk9SSVRFU19VRERJX0JVU0lORVNTX0RFVEFJTFMiKSk7Ci0gICAgICAgIG5ldyBBZGRUb1VERElQZXJzcGVjdGl2ZVRvb2wodG9vbE1hbmFnZXJfLCBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfQUREX1RPX1VERElfUEVSU1BFQ1RJVkUiKSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESVJlZ2lzdHJ5RGV0YWlsc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VERElSZWdpc3RyeURldGFpbHNUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzZjZjZDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESVJlZ2lzdHJ5RGV0YWlsc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzVURESVJlZ2lzdHJ5RGV0YWlsc1Rvb2wgZXh0ZW5kcyBGb3JtVG9vbCB7Ci0KLSAgICBwdWJsaWMgRmF2b3JpdGVzVURESVJlZ2lzdHJ5RGV0YWlsc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJpbWFnZXMvZGV0YWlsc19lbmFibGVkLmdpZiIsICJpbWFnZXMvZGV0YWlsc19oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRGb3JtTGluaygpCi0gICAgewotICAgICAgcmV0dXJuICJmYXZvcml0ZXMvZm9ybXMvRmF2b3JpdGVzVURESVJlZ2lzdHJ5RGV0YWlsc1BhZ2UuanNwIjsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVRERJUmVnaXN0cnlGb2xkZXJOb2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVRERJUmVnaXN0cnlGb2xkZXJOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0NjBhMTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESVJlZ2lzdHJ5Rm9sZGVyTm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkVsZW1lbnRBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsQWRkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5SZWxSZW1vdmVFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLkZhdm9yaXRlc01vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLkZhdm9yaXRlc1VERElSZWdpc3RyeUZvbGRlckVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzVURESVJlZ2lzdHJ5Rm9sZGVyTm9kZSBleHRlbmRzIEZhdm9yaXRlc05hdmlnYXRvckZvbGRlck5vZGUgewotICAgIHB1YmxpYyBGYXZvcml0ZXNVRERJUmVnaXN0cnlGb2xkZXJOb2RlKFRyZWVFbGVtZW50IHRyZWVFbGVtZW50LCBOb2RlTWFuYWdlciBub2RlTWFuYWdlciwgaW50IG5vZGVEZXB0aCkgewotICAgICAgICBzdXBlcih0cmVlRWxlbWVudCwgbm9kZU1hbmFnZXIsIG5vZGVEZXB0aCk7Ci0gICAgICAgIHRyZWVFbGVtZW50LmFkZExpc3RlbmVyKG5ldyBFbGVtZW50QWRhcHRlcigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJlbEFkZGVkKFJlbEFkZEV2ZW50IGV2ZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJlbCA9IGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWwuZXF1YWxzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1JFR0lTVFJZX05PREUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyZWVFbGVtZW50IHJlZ0VsZW1lbnQgPSAoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0UGFyZW50RWxlbWVudCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgaW1hZ2VQYXRoOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdCdWZmZXIgY2F0ZWdvcmllc0RpcmVjdG9yeSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmF2b3JpdGVzVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudC5mb3JtQ2F0ZWdvcmllc0RpcmVjdG9yeShjYXRlZ29yaWVzRGlyZWN0b3J5LG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCkuZ2V0U2VydmxldEVuZ2luZVN0YXRlTG9jYXRpb24oKSxyZWdFbGVtZW50LmdldE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGUgY2F0ZWdvcnlEaXJlY3RvcnlGaWxlID0gbmV3IEZpbGUoY2F0ZWdvcmllc0RpcmVjdG9yeS50b1N0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nW10gY2F0ZWdvcnlGaWxlcyA9IGNhdGVnb3J5RGlyZWN0b3J5RmlsZS5saXN0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYXRlZ29yeUZpbGVzICE9IG51bGwgJiYgY2F0ZWdvcnlGaWxlcy5sZW5ndGggPiAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlUGF0aCA9ICJmYXZvcml0ZXMvaW1hZ2VzL3VkZGlfcmVnaXN0cnlfY2F0X25vZGUuZ2lmIjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlUGF0aCA9ICJmYXZvcml0ZXMvaW1hZ2VzL3VkZGlfcmVnaXN0cnlfbm9kZS5naWYiOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGYXZvcml0ZXNVRERJUmVnaXN0cnlOb2RlIGZhdm9yaXRlc1VERElSZWdpc3RyeU5vZGUgPSBuZXcgRmF2b3JpdGVzVURESVJlZ2lzdHJ5Tm9kZShyZWdFbGVtZW50LCBub2RlTWFuYWdlcl8sIG5vZGVEZXB0aF8gKyAxLCBpbWFnZVBhdGgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRDaGlsZChmYXZvcml0ZXNVRERJUmVnaXN0cnlOb2RlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJlbFJlbW92ZWQoUmVsUmVtb3ZlRXZlbnQgZXZlbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmVlRWxlbWVudCBjaGlsZEVsZW1lbnQgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5nZXRJbkJvdW5kUmVsTmFtZSgpLmVxdWFscyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9SRUdJU1RSWV9OT0RFKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEVsZW1lbnQgPSAoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0SW5ib3VuZEVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpLmVxdWFscyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9SRUdJU1RSWV9OT0RFKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEVsZW1lbnQgPSAoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0T3V0Qm91bmRFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUNoaWxkTm9kZShjaGlsZEVsZW1lbnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBpbml0VG9vbHMoKSB7Ci0gICAgICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKS5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgICAgICBuZXcgTGlzdEZhdm9yaXRlVURESVJlZ2lzdHJ5VG9vbCh0b29sTWFuYWdlcl8sIGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9MSVNUX0ZBVk9SSVRFX1VERElfUkVHSVNUUlkiKSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESVJlZ2lzdHJ5Tm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESVJlZ2lzdHJ5Tm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOGYyODEzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VERElSZWdpc3RyeU5vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1VERElSZWdpc3RyeU5vZGUgZXh0ZW5kcyBGYXZvcml0ZXNOYXZpZ2F0b3JOb2RlIHsKLSAgICBwdWJsaWMgRmF2b3JpdGVzVURESVJlZ2lzdHJ5Tm9kZShUcmVlRWxlbWVudCB0cmVlRWxlbWVudCwgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsIGludCBub2RlRGVwdGgsU3RyaW5nIGltYWdlUGF0aCkgewotICAgICAgICBzdXBlcih0cmVlRWxlbWVudCwgbm9kZU1hbmFnZXIsIG5vZGVEZXB0aCwgaW1hZ2VQYXRoKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBpbml0VG9vbHMoKSB7Ci0gICAgICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKS5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgICAgICBuZXcgRmF2b3JpdGVzVURESVJlZ2lzdHJ5RGV0YWlsc1Rvb2wodG9vbE1hbmFnZXJfLCBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfRkFWT1JJVEVTX1VERElfUkVHSVNUUllfREVUQUlMUyIpKTsKLSAgICAgICAgbmV3IEFkZFRvVURESVBlcnNwZWN0aXZlVG9vbCh0b29sTWFuYWdlcl8sIGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9BRERfVE9fVURESV9QRVJTUEVDVElWRSIpKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVRERJU2VydmljZURldGFpbHNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVRERJU2VydmljZURldGFpbHNUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyNGY0ZTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESVNlcnZpY2VEZXRhaWxzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5TZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNVRERJU2VydmljZURldGFpbHNUb29sIGV4dGVuZHMgRm9ybVRvb2wgewotCi0gICAgcHVibGljIEZhdm9yaXRlc1VERElTZXJ2aWNlRGV0YWlsc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJpbWFnZXMvZGV0YWlsc19lbmFibGVkLmdpZiIsICJpbWFnZXMvZGV0YWlsc19oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRGb3JtTGluaygpCi0gICAgewotICAgICAgcmV0dXJuICJmYXZvcml0ZXMvZm9ybXMvRmF2b3JpdGVzVURESVNlcnZpY2VEZXRhaWxzUGFnZS5qc3AiOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VERElTZXJ2aWNlRm9sZGVyTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESVNlcnZpY2VGb2xkZXJOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzMTRkMjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESVNlcnZpY2VGb2xkZXJOb2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbEFkZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsUmVtb3ZlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy5GYXZvcml0ZXNNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNVRERJU2VydmljZUZvbGRlck5vZGUgZXh0ZW5kcyBGYXZvcml0ZXNOYXZpZ2F0b3JGb2xkZXJOb2RlIHsKLSAgICBwdWJsaWMgRmF2b3JpdGVzVURESVNlcnZpY2VGb2xkZXJOb2RlKFRyZWVFbGVtZW50IHRyZWVFbGVtZW50LCBOb2RlTWFuYWdlciBub2RlTWFuYWdlciwgaW50IG5vZGVEZXB0aCkgewotICAgICAgICBzdXBlcih0cmVlRWxlbWVudCwgbm9kZU1hbmFnZXIsIG5vZGVEZXB0aCk7Ci0gICAgICAgIHRyZWVFbGVtZW50LmFkZExpc3RlbmVyKG5ldyBFbGVtZW50QWRhcHRlcigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJlbEFkZGVkKFJlbEFkZEV2ZW50IGV2ZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJlbCA9IGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWwuZXF1YWxzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1NFUlZJQ0VfTk9ERSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmF2b3JpdGVzVURESVNlcnZpY2VOb2RlIGZhdm9yaXRlc1VERElTZXJ2aWNlTm9kZSA9IG5ldyBGYXZvcml0ZXNVRERJU2VydmljZU5vZGUoKFRyZWVFbGVtZW50KWV2ZW50LmdldFBhcmVudEVsZW1lbnQoKSwgbm9kZU1hbmFnZXJfLCBub2RlRGVwdGhfICsgMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZENoaWxkKGZhdm9yaXRlc1VERElTZXJ2aWNlTm9kZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCByZWxSZW1vdmVkKFJlbFJlbW92ZUV2ZW50IGV2ZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJlZUVsZW1lbnQgY2hpbGRFbGVtZW50ID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuZ2V0SW5Cb3VuZFJlbE5hbWUoKS5lcXVhbHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfU0VSVklDRV9OT0RFKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEVsZW1lbnQgPSAoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0SW5ib3VuZEVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpLmVxdWFscyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9TRVJWSUNFX05PREUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRWxlbWVudCA9IChUcmVlRWxlbWVudClldmVudC5nZXRPdXRCb3VuZEVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2hpbGROb2RlKGNoaWxkRWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGluaXRUb29scygpIHsKLSAgICAgICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgICAgIG5ldyBMaXN0RmF2b3JpdGVVRERJU2VydmljZVRvb2wodG9vbE1hbmFnZXJfLCBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTElTVF9GQVZPUklURV9VRERJX1NFUlZJQ0UiKSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjkyZTdiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzVG9vbCBleHRlbmRzIEZvcm1Ub29sIHsKLQotICAgIHB1YmxpYyBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZURldGFpbHNUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAiaW1hZ2VzL2RldGFpbHNfZW5hYmxlZC5naWYiLCAiaW1hZ2VzL2RldGFpbHNfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0Rm9ybUxpbmsoKQotICAgIHsKLSAgICAgIHJldHVybiAiZmF2b3JpdGVzL2Zvcm1zL0Zhdm9yaXRlc1VERElTZXJ2aWNlSW50RGV0YWlsc1BhZ2UuanNwIjsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUZvbGRlck5vZGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRm9sZGVyTm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4M2Y2NjcyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRm9sZGVyTm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuRWxlbWVudEFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5SZWxBZGRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbFJlbW92ZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuRmF2b3JpdGVzTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VGb2xkZXJOb2RlIGV4dGVuZHMgRmF2b3JpdGVzTmF2aWdhdG9yRm9sZGVyTm9kZSB7Ci0gICAgcHVibGljIEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRm9sZGVyTm9kZShUcmVlRWxlbWVudCB0cmVlRWxlbWVudCwgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsIGludCBub2RlRGVwdGgpIHsKLSAgICAgICAgc3VwZXIodHJlZUVsZW1lbnQsIG5vZGVNYW5hZ2VyLCBub2RlRGVwdGgpOwotICAgICAgICB0cmVlRWxlbWVudC5hZGRMaXN0ZW5lcihuZXcgRWxlbWVudEFkYXB0ZXIoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCByZWxBZGRlZChSZWxBZGRFdmVudCBldmVudCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyByZWwgPSBldmVudC5nZXRPdXRCb3VuZFJlbE5hbWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVsLmVxdWFscyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9TRVJWSUNFX0lOVEVSRkFDRV9OT0RFKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZU5vZGUgZmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VOb2RlID0gbmV3IEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlTm9kZSgoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0UGFyZW50RWxlbWVudCgpLCBub2RlTWFuYWdlcl8sIG5vZGVEZXB0aF8gKyAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkQ2hpbGQoZmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VOb2RlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJlbFJlbW92ZWQoUmVsUmVtb3ZlRXZlbnQgZXZlbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmVlRWxlbWVudCBjaGlsZEVsZW1lbnQgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5nZXRJbkJvdW5kUmVsTmFtZSgpLmVxdWFscyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9TRVJWSUNFX0lOVEVSRkFDRV9OT0RFKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEVsZW1lbnQgPSAoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0SW5ib3VuZEVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpLmVxdWFscyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9TRVJWSUNFX0lOVEVSRkFDRV9OT0RFKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEVsZW1lbnQgPSAoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0T3V0Qm91bmRFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUNoaWxkTm9kZShjaGlsZEVsZW1lbnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBpbml0VG9vbHMoKSB7Ci0gICAgICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKS5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgICAgICBuZXcgTGlzdEZhdm9yaXRlVURESVNlcnZpY2VJbnRlcmZhY2VUb29sKHRvb2xNYW5hZ2VyXywgZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0xJU1RfRkFWT1JJVEVfVURESV9TRVJWSUNFX0lOVEVSRkFDRSIpKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZU5vZGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlTm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjg2Y2NjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlTm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VOb2RlIGV4dGVuZHMgRmF2b3JpdGVzTmF2aWdhdG9yTm9kZSB7Ci0gICAgcHVibGljIEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlTm9kZShUcmVlRWxlbWVudCB0cmVlRWxlbWVudCwgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsIGludCBub2RlRGVwdGgpIHsKLSAgICAgICAgc3VwZXIodHJlZUVsZW1lbnQsIG5vZGVNYW5hZ2VyLCBub2RlRGVwdGgsICJmYXZvcml0ZXMvaW1hZ2VzL3VkZGlfc2VydmljZV9pbnRlcmZhY2Vfbm9kZS5naWYiKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBpbml0VG9vbHMoKSB7Ci0gICAgICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKS5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgICAgICBuZXcgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzVG9vbCh0b29sTWFuYWdlcl8sIGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9GQVZPUklURVNfVURESV9TRVJWSUNFX0lOVEVSRkFDRV9ERVRBSUxTIikpOwotICAgICAgICBuZXcgQWRkVG9VRERJUGVyc3BlY3RpdmVUb29sKHRvb2xNYW5hZ2VyXywgZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0FERF9UT19VRERJX1BFUlNQRUNUSVZFIikpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VERElTZXJ2aWNlTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESVNlcnZpY2VOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlYWI3N2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVURESVNlcnZpY2VOb2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNVRERJU2VydmljZU5vZGUgZXh0ZW5kcyBGYXZvcml0ZXNOYXZpZ2F0b3JOb2RlIHsKLSAgICBwdWJsaWMgRmF2b3JpdGVzVURESVNlcnZpY2VOb2RlKFRyZWVFbGVtZW50IHRyZWVFbGVtZW50LCBOb2RlTWFuYWdlciBub2RlTWFuYWdlciwgaW50IG5vZGVEZXB0aCkgewotICAgICAgICBzdXBlcih0cmVlRWxlbWVudCwgbm9kZU1hbmFnZXIsIG5vZGVEZXB0aCwgImZhdm9yaXRlcy9pbWFnZXMvdWRkaV9zZXJ2aWNlX25vZGUuZ2lmIik7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgaW5pdFRvb2xzKCkgewotICAgICAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCkuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICAgICAgbmV3IEZhdm9yaXRlc1VERElTZXJ2aWNlRGV0YWlsc1Rvb2wodG9vbE1hbmFnZXJfLCBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfRkFWT1JJVEVTX1VERElfU0VSVklDRV9ERVRBSUxTIikpOwotICAgICAgICBuZXcgQWRkVG9VRERJUGVyc3BlY3RpdmVUb29sKHRvb2xNYW5hZ2VyXywgZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0FERF9UT19VRERJX1BFUlNQRUNUSVZFIikpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlEZXRhaWxzVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeURldGFpbHNUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0OTU3MjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeURldGFpbHNUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5TZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5RGV0YWlsc1Rvb2wgZXh0ZW5kcyBGb3JtVG9vbAotewotICBwdWJsaWMgRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeURldGFpbHNUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KQotICB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsICJpbWFnZXMvZGV0YWlsc19lbmFibGVkLmdpZiIsICJpbWFnZXMvZGV0YWlsc19oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpCi0gIHsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgcmV0dXJuIFNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgZm9ySGlzdG9yeSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEZvcm1MaW5rKCkKLSAgewotICAgIHJldHVybiAiZmF2b3JpdGVzL2Zvcm1zL0Zhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlEZXRhaWxzUGFnZS5qc3AiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Rm9sZGVyTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeUZvbGRlck5vZGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzJmYzBlYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Rm9sZGVyTm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuRWxlbWVudEFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5SZWxBZGRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbFJlbW92ZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLlNlbGVjdEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlOb2RlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLkZhdm9yaXRlc01vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlGb2xkZXJOb2RlIGV4dGVuZHMgRmF2b3JpdGVzTmF2aWdhdG9yRm9sZGVyTm9kZQotewotICBwdWJsaWMgRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeUZvbGRlck5vZGUoVHJlZUVsZW1lbnQgdHJlZUVsZW1lbnQsIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyLCBpbnQgbm9kZURlcHRoKQotICB7Ci0gICAgc3VwZXIodHJlZUVsZW1lbnQsIG5vZGVNYW5hZ2VyLCBub2RlRGVwdGgpOwotICAgIHRyZWVFbGVtZW50LmFkZExpc3RlbmVyKG5ldyBFbGVtZW50QWRhcHRlcigpCi0gICAgewotICAgICAgcHVibGljIHZvaWQgcmVsQWRkZWQoUmVsQWRkRXZlbnQgZXZlbnQpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyByZWwgPSBldmVudC5nZXRPdXRCb3VuZFJlbE5hbWUoKTsKLSAgICAgICAgaWYgKHJlbC5lcXVhbHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VTRVJfREVGX1VERElfUkVHSVNUUllfTk9ERSkpCi0gICAgICAgIHsKLSAgICAgICAgICBUcmVlRWxlbWVudCByZWdFbGVtZW50ID0gKFRyZWVFbGVtZW50KWV2ZW50LmdldFBhcmVudEVsZW1lbnQoKTsKLSAgICAgICAgICBTdHJpbmcgaW1hZ2VQYXRoID0gImZhdm9yaXRlcy9pbWFnZXMvdWRkaV9yZWdpc3RyeV9ub2RlLmdpZiI7Ci0gICAgICAgICAgRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeU5vZGUgZmF2VXNlckRlZlVERElSZWdpc3RyeU5vZGUgPSBuZXcgRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeU5vZGUocmVnRWxlbWVudCwgbm9kZU1hbmFnZXJfLCBub2RlRGVwdGhfICsgMSwgaW1hZ2VQYXRoKTsKLSAgICAgICAgICBhZGRDaGlsZChmYXZVc2VyRGVmVURESVJlZ2lzdHJ5Tm9kZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgcHVibGljIHZvaWQgcmVsUmVtb3ZlZChSZWxSZW1vdmVFdmVudCBldmVudCkKLSAgICAgIHsKLSAgICAgICAgVHJlZUVsZW1lbnQgY2hpbGRFbGVtZW50ID0gbnVsbDsKLSAgICAgICAgaWYgKGV2ZW50LmdldEluQm91bmRSZWxOYW1lKCkuZXF1YWxzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VU0VSX0RFRl9VRERJX1JFR0lTVFJZX05PREUpKQotICAgICAgICB7Ci0gICAgICAgICAgY2hpbGRFbGVtZW50ID0gKFRyZWVFbGVtZW50KWV2ZW50LmdldEluYm91bmRFbGVtZW50KCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpLmVxdWFscyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVVNFUl9ERUZfVURESV9SRUdJU1RSWV9OT0RFKSkKLSAgICAgICAgewotICAgICAgICAgIGNoaWxkRWxlbWVudCA9IChUcmVlRWxlbWVudClldmVudC5nZXRPdXRCb3VuZEVsZW1lbnQoKTsKLSAgICAgICAgfQotICAgICAgICByZW1vdmVDaGlsZE5vZGUoY2hpbGRFbGVtZW50KTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGluaXRUb29scygpCi0gIHsKLSAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCkuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICBuZXcgTGlzdEZhdm9yaXRlVXNlckRlZlVERElSZWdpc3RyeVRvb2wodG9vbE1hbmFnZXJfLCBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTElTVF9GQVZPUklURV9VU0VSX0RFRl9VRERJX1JFR0lTVFJZIikpOwotICB9Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRMaW5rQWN0aW9uSHJlZigpIHsKLSAgICAgIHJldHVybiBTZWxlY3RGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Tm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZF8sIGZhbHNlKTsKLSAgfQotCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlOb2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Tm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjYxNzU2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlOb2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeU5vZGUgZXh0ZW5kcyBGYXZvcml0ZXNOYXZpZ2F0b3JOb2RlCi17Ci0gIHB1YmxpYyBGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Tm9kZShUcmVlRWxlbWVudCB0cmVlRWxlbWVudCwgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsIGludCBub2RlRGVwdGgsIFN0cmluZyBpbWFnZVBhdGgpCi0gIHsKLSAgICBzdXBlcih0cmVlRWxlbWVudCwgbm9kZU1hbmFnZXIsIG5vZGVEZXB0aCwgaW1hZ2VQYXRoKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGluaXRUb29scygpCi0gIHsKLSAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCkuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICBuZXcgRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeURldGFpbHNUb29sKHRvb2xNYW5hZ2VyXywgZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0ZBVk9SSVRFU19VU0VSX0RFRl9VRERJX1JFR0lTVFJZX0RFVEFJTFMiKSk7Ci0gICAgbmV3IEFkZFRvVURESVBlcnNwZWN0aXZlVG9vbCh0b29sTWFuYWdlcl8sIGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9BRERfVE9fVURESV9QRVJTUEVDVElWRSIpKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzV1NETERldGFpbHNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNXU0RMRGV0YWlsc1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQwZTUyZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNXU0RMRGV0YWlsc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzV1NETERldGFpbHNUb29sIGV4dGVuZHMgRm9ybVRvb2wgewotCi0gICAgcHVibGljIEZhdm9yaXRlc1dTRExEZXRhaWxzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgImltYWdlcy9kZXRhaWxzX2VuYWJsZWQuZ2lmIiwgImltYWdlcy9kZXRhaWxzX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEZvcm1MaW5rKCkKLSAgICB7Ci0gICAgICByZXR1cm4gImZhdm9yaXRlcy9mb3Jtcy9GYXZvcml0ZXNXU0RMRGV0YWlsc1BhZ2UuanNwIjsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNXU0RMU2VydmljZUZvbGRlck5vZGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1dTRExTZXJ2aWNlRm9sZGVyTm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MmY0OGRiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1dTRExTZXJ2aWNlRm9sZGVyTm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuRWxlbWVudEFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5SZWxBZGRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbFJlbW92ZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuRmF2b3JpdGVzTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzV1NETFNlcnZpY2VGb2xkZXJOb2RlIGV4dGVuZHMgRmF2b3JpdGVzTmF2aWdhdG9yRm9sZGVyTm9kZSB7Ci0gICAgcHVibGljIEZhdm9yaXRlc1dTRExTZXJ2aWNlRm9sZGVyTm9kZShUcmVlRWxlbWVudCB0cmVlRWxlbWVudCwgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsIGludCBub2RlRGVwdGgpIHsKLSAgICAgICAgc3VwZXIodHJlZUVsZW1lbnQsIG5vZGVNYW5hZ2VyLCBub2RlRGVwdGgpOwotICAgICAgICB0cmVlRWxlbWVudC5hZGRMaXN0ZW5lcihuZXcgRWxlbWVudEFkYXB0ZXIoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCByZWxBZGRlZChSZWxBZGRFdmVudCBldmVudCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyByZWwgPSBldmVudC5nZXRPdXRCb3VuZFJlbE5hbWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVsLmVxdWFscyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfV1NETF9TRVJWSUNFX05PREUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZhdm9yaXRlc1dTRExTZXJ2aWNlTm9kZSBmYXZvcml0ZXNXU0RMU2VydmljZU5vZGUgPSBuZXcgRmF2b3JpdGVzV1NETFNlcnZpY2VOb2RlKChUcmVlRWxlbWVudClldmVudC5nZXRQYXJlbnRFbGVtZW50KCksIG5vZGVNYW5hZ2VyXywgbm9kZURlcHRoXyArIDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRDaGlsZChmYXZvcml0ZXNXU0RMU2VydmljZU5vZGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcmVsUmVtb3ZlZChSZWxSZW1vdmVFdmVudCBldmVudCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyZWVFbGVtZW50IGNoaWxkRWxlbWVudCA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LmdldEluQm91bmRSZWxOYW1lKCkuZXF1YWxzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9XU0RMX1NFUlZJQ0VfTk9ERSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRFbGVtZW50ID0gKFRyZWVFbGVtZW50KWV2ZW50LmdldEluYm91bmRFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5nZXRPdXRCb3VuZFJlbE5hbWUoKS5lcXVhbHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1dTRExfU0VSVklDRV9OT0RFKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEVsZW1lbnQgPSAoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0T3V0Qm91bmRFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUNoaWxkTm9kZShjaGlsZEVsZW1lbnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBpbml0VG9vbHMoKSB7Ci0gICAgICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKS5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgICAgICBuZXcgTGlzdEZhdm9yaXRlV1NETFNlcnZpY2VUb29sKHRvb2xNYW5hZ2VyXywgZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0xJU1RfRkFWT1JJVEVfV1NETF9TRVJWSUNFIikpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1dTRExTZXJ2aWNlTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzV1NETFNlcnZpY2VOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjNDE2YTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzV1NETFNlcnZpY2VOb2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNXU0RMU2VydmljZU5vZGUgZXh0ZW5kcyBGYXZvcml0ZXNOYXZpZ2F0b3JOb2RlIHsKLSAgICBwdWJsaWMgRmF2b3JpdGVzV1NETFNlcnZpY2VOb2RlKFRyZWVFbGVtZW50IHRyZWVFbGVtZW50LCBOb2RlTWFuYWdlciBub2RlTWFuYWdlciwgaW50IG5vZGVEZXB0aCkgewotICAgICAgICBzdXBlcih0cmVlRWxlbWVudCwgbm9kZU1hbmFnZXIsIG5vZGVEZXB0aCwgImZhdm9yaXRlcy9pbWFnZXMvd3NkbF9zZXJ2aWNlX25vZGUuZ2lmIik7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgaW5pdFRvb2xzKCkgewotICAgICAgICBDb250cm9sbGVyIGNvbnRyb2xsZXIgPSBub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpOwotICAgICAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICAgICAgbmV3IEZhdm9yaXRlc1dTRExEZXRhaWxzVG9vbCh0b29sTWFuYWdlcl8sIGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9GQVZPUklURVNfV1NETF9ERVRBSUxTIikpOwotICAgICAgICBuZXcgRmF2b3JpdGVzSW1wb3J0VG9Xb3JrYmVuY2hUb29sKHRvb2xNYW5hZ2VyXywgY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfSU1QT1JUX1dTRExfVE9fV09SS0JFTkNIIikpOwotICAgICAgICBuZXcgRmF2b3JpdGVzSW1wb3J0VG9GaWxlU3lzdGVtVG9vbCh0b29sTWFuYWdlcl8sIGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1dTRExfSU1QT1JUX1RPX0ZTIikpOwotICAgICAgICBuZXcgRmF2b3JpdGVzTGF1bmNoV2ViU2VydmljZVdpemFyZFRvb2wodG9vbE1hbmFnZXJfLCBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9MQVVOQ0hfV0VCX1NFUlZJQ0VfV0laQVJEIikpOwotICAgICAgICBuZXcgRmF2b3JpdGVzQWRkVG9XU0RMUGVyc3BlY3RpdmVUb29sKHRvb2xNYW5hZ2VyXywgZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0FERF9XU0RMX1RPX1dTRExfUEVSU1BFQ1RJVkUiKSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzV1NJTERldGFpbHNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNXU0lMRGV0YWlsc1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTcwMmI4MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNXU0lMRGV0YWlsc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzV1NJTERldGFpbHNUb29sIGV4dGVuZHMgRm9ybVRvb2wgewotCi0gICAgcHVibGljIEZhdm9yaXRlc1dTSUxEZXRhaWxzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgImltYWdlcy9kZXRhaWxzX2VuYWJsZWQuZ2lmIiwgImltYWdlcy9kZXRhaWxzX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEZvcm1MaW5rKCkKLSAgICB7Ci0gICAgICByZXR1cm4gImZhdm9yaXRlcy9mb3Jtcy9GYXZvcml0ZXNXU0lMRGV0YWlsc1BhZ2UuanNwIjsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNXU0lMRm9sZGVyTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvRmF2b3JpdGVzV1NJTEZvbGRlck5vZGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWRmNDYxYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNXU0lMRm9sZGVyTm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuRWxlbWVudEFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5SZWxBZGRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbFJlbW92ZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuRmF2b3JpdGVzTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzV1NJTEZvbGRlck5vZGUgZXh0ZW5kcyBGYXZvcml0ZXNOYXZpZ2F0b3JGb2xkZXJOb2RlIHsKLSAgICBwdWJsaWMgRmF2b3JpdGVzV1NJTEZvbGRlck5vZGUoVHJlZUVsZW1lbnQgdHJlZUVsZW1lbnQsIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyLCBpbnQgbm9kZURlcHRoKSB7Ci0gICAgICAgIHN1cGVyKHRyZWVFbGVtZW50LCBub2RlTWFuYWdlciwgbm9kZURlcHRoKTsKLSAgICAgICAgdHJlZUVsZW1lbnQuYWRkTGlzdGVuZXIobmV3IEVsZW1lbnRBZGFwdGVyKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcmVsQWRkZWQoUmVsQWRkRXZlbnQgZXZlbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcmVsID0gZXZlbnQuZ2V0T3V0Qm91bmRSZWxOYW1lKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbC5lcXVhbHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1dTSUxfTk9ERSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmF2b3JpdGVzV1NJTE5vZGUgZmF2b3JpdGVzV1NJTE5vZGUgPSBuZXcgRmF2b3JpdGVzV1NJTE5vZGUoKFRyZWVFbGVtZW50KWV2ZW50LmdldFBhcmVudEVsZW1lbnQoKSwgbm9kZU1hbmFnZXJfLCBub2RlRGVwdGhfICsgMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZENoaWxkKGZhdm9yaXRlc1dTSUxOb2RlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJlbFJlbW92ZWQoUmVsUmVtb3ZlRXZlbnQgZXZlbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmVlRWxlbWVudCBjaGlsZEVsZW1lbnQgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5nZXRJbkJvdW5kUmVsTmFtZSgpLmVxdWFscyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfV1NJTF9OT0RFKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEVsZW1lbnQgPSAoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0SW5ib3VuZEVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpLmVxdWFscyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfV1NJTF9OT0RFKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEVsZW1lbnQgPSAoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0T3V0Qm91bmRFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUNoaWxkTm9kZShjaGlsZEVsZW1lbnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBpbml0VG9vbHMoKSB7Ci0gICAgICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKS5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgICAgICBuZXcgTGlzdEZhdm9yaXRlV1NJTFRvb2wodG9vbE1hbmFnZXJfLCBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTElTVF9GQVZPUklURV9XU0lMIikpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1dTSUxOb2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9GYXZvcml0ZXNXU0lMTm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOWYyZDE5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0Zhdm9yaXRlc1dTSUxOb2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNXU0lMTm9kZSBleHRlbmRzIEZhdm9yaXRlc05hdmlnYXRvck5vZGUgewotICAgIHB1YmxpYyBGYXZvcml0ZXNXU0lMTm9kZShUcmVlRWxlbWVudCB0cmVlRWxlbWVudCwgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsIGludCBub2RlRGVwdGgpIHsKLSAgICAgICAgc3VwZXIodHJlZUVsZW1lbnQsIG5vZGVNYW5hZ2VyLCBub2RlRGVwdGgsICJmYXZvcml0ZXMvaW1hZ2VzL3dzaWxfbm9kZS5naWYiKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBpbml0VG9vbHMoKSB7Ci0gICAgICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKS5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgICAgICBuZXcgRmF2b3JpdGVzV1NJTERldGFpbHNUb29sKHRvb2xNYW5hZ2VyXywgZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0ZBVk9SSVRFU19XU0lMX0RFVEFJTFMiKSk7Ci0gICAgICAgIG5ldyBBZGRXU0lMVG9XU0lMUGVyc3BlY3RpdmVUb29sKHRvb2xNYW5hZ2VyXywgZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0FERF9XU0lMX1RPX1dTSUxfUEVSU1BFQ1RJVkUiKSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvTGlzdEZhdm9yaXRlVURESUJ1c2luZXNzVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvTGlzdEZhdm9yaXRlVURESUJ1c2luZXNzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzFhOGZmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0xpc3RGYXZvcml0ZVVERElCdXNpbmVzc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgTGlzdEZhdm9yaXRlVURESUJ1c2luZXNzVG9vbCBleHRlbmRzIEZvcm1Ub29sIHsKLSAgICBwdWJsaWMgTGlzdEZhdm9yaXRlVURESUJ1c2luZXNzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgImZhdm9yaXRlcy9pbWFnZXMvbGlzdF9idXNpbmVzc19lbmFibGVkLmdpZiIsICJmYXZvcml0ZXMvaW1hZ2VzL2xpc3RfYnVzaW5lc3NfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Rm9ybUxpbmsoKSB7Ci0gICAgICAgIHJldHVybiAiZmF2b3JpdGVzL3ZpZXdzL0xpc3RGYXZvcml0ZVVERElCdXNpbmVzc1ZpZXcuanNwIjsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0xpc3RGYXZvcml0ZVVERElSZWdpc3RyeVRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0xpc3RGYXZvcml0ZVVERElSZWdpc3RyeVRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzBjZDE1Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9MaXN0RmF2b3JpdGVVRERJUmVnaXN0cnlUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLlNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIExpc3RGYXZvcml0ZVVERElSZWdpc3RyeVRvb2wgZXh0ZW5kcyBGb3JtVG9vbCB7Ci0gICAgcHVibGljIExpc3RGYXZvcml0ZVVERElSZWdpc3RyeVRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJmYXZvcml0ZXMvaW1hZ2VzL2xpc3RfcmVnaXN0cnlfZW5hYmxlZC5naWYiLCAiZmF2b3JpdGVzL2ltYWdlcy9saXN0X3JlZ2lzdHJ5X2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEZvcm1MaW5rKCkgewotICAgICAgICByZXR1cm4gImZhdm9yaXRlcy92aWV3cy9MaXN0RmF2b3JpdGVVRERJUmVnaXN0cnlWaWV3LmpzcCI7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9MaXN0RmF2b3JpdGVVRERJU2VydmljZUludGVyZmFjZVRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0xpc3RGYXZvcml0ZVVERElTZXJ2aWNlSW50ZXJmYWNlVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YWFmMjRmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0xpc3RGYXZvcml0ZVVERElTZXJ2aWNlSW50ZXJmYWNlVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5TZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBMaXN0RmF2b3JpdGVVRERJU2VydmljZUludGVyZmFjZVRvb2wgZXh0ZW5kcyBGb3JtVG9vbCB7Ci0gICAgcHVibGljIExpc3RGYXZvcml0ZVVERElTZXJ2aWNlSW50ZXJmYWNlVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgImZhdm9yaXRlcy9pbWFnZXMvbGlzdF9zZXJ2aWNlX2ludGVyZmFjZV9lbmFibGVkLmdpZiIsICJmYXZvcml0ZXMvaW1hZ2VzL2xpc3Rfc2VydmljZV9pbnRlcmZhY2VfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Rm9ybUxpbmsoKSB7Ci0gICAgICAgIHJldHVybiAiZmF2b3JpdGVzL3ZpZXdzL0xpc3RGYXZvcml0ZVVERElTZXJ2aWNlSW50ZXJmYWNlVmlldy5qc3AiOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvTGlzdEZhdm9yaXRlVURESVNlcnZpY2VUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9MaXN0RmF2b3JpdGVVRERJU2VydmljZVRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGY0OWMwZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9MaXN0RmF2b3JpdGVVRERJU2VydmljZVRvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgTGlzdEZhdm9yaXRlVURESVNlcnZpY2VUb29sIGV4dGVuZHMgRm9ybVRvb2wgewotICAgIHB1YmxpYyBMaXN0RmF2b3JpdGVVRERJU2VydmljZVRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJmYXZvcml0ZXMvaW1hZ2VzL2xpc3Rfc2VydmljZV9lbmFibGVkLmdpZiIsICJmYXZvcml0ZXMvaW1hZ2VzL2xpc3Rfc2VydmljZV9oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRGb3JtTGluaygpIHsKLSAgICAgICAgcmV0dXJuICJmYXZvcml0ZXMvdmlld3MvTGlzdEZhdm9yaXRlVURESVNlcnZpY2VWaWV3LmpzcCI7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9MaXN0RmF2b3JpdGVVc2VyRGVmVURESVJlZ2lzdHJ5VG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvTGlzdEZhdm9yaXRlVXNlckRlZlVERElSZWdpc3RyeVRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGFiOGM5NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9MaXN0RmF2b3JpdGVVc2VyRGVmVURESVJlZ2lzdHJ5VG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgTGlzdEZhdm9yaXRlVXNlckRlZlVERElSZWdpc3RyeVRvb2wgZXh0ZW5kcyBGb3JtVG9vbAotewotICBwdWJsaWMgTGlzdEZhdm9yaXRlVXNlckRlZlVERElSZWdpc3RyeVRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpCi0gIHsKLSAgICBzdXBlcih0b29sTWFuYWdlciwgImZhdm9yaXRlcy9pbWFnZXMvbGlzdF9yZWdpc3RyeV9lbmFibGVkLmdpZiIsICJmYXZvcml0ZXMvaW1hZ2VzL2xpc3RfcmVnaXN0cnlfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KQotICB7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgIHJldHVybiBTZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksIGZvckhpc3RvcnkpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRGb3JtTGluaygpCi0gIHsKLSAgICByZXR1cm4gImZhdm9yaXRlcy92aWV3cy9MaXN0RmF2b3JpdGVVc2VyRGVmVURESVJlZ2lzdHJ5Vmlldy5qc3AiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9MaXN0RmF2b3JpdGVXU0RMU2VydmljZVRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0xpc3RGYXZvcml0ZVdTRExTZXJ2aWNlVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYmYyMDgxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0xpc3RGYXZvcml0ZVdTRExTZXJ2aWNlVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5TZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBMaXN0RmF2b3JpdGVXU0RMU2VydmljZVRvb2wgZXh0ZW5kcyBGb3JtVG9vbCB7Ci0gICAgcHVibGljIExpc3RGYXZvcml0ZVdTRExTZXJ2aWNlVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgImZhdm9yaXRlcy9pbWFnZXMvbGlzdF93c2RsX2VuYWJsZWQuZ2lmIiwgImZhdm9yaXRlcy9pbWFnZXMvbGlzdF93c2RsX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEZvcm1MaW5rKCkgewotICAgICAgICByZXR1cm4gImZhdm9yaXRlcy92aWV3cy9MaXN0RmF2b3JpdGVXU0RMU2VydmljZVZpZXcuanNwIjsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0xpc3RGYXZvcml0ZVdTSUxUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL2Zhdm9yaXRlcy9wZXJzcGVjdGl2ZS9MaXN0RmF2b3JpdGVXU0lMVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzgzMjViLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL0xpc3RGYXZvcml0ZVdTSUxUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLlNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIExpc3RGYXZvcml0ZVdTSUxUb29sIGV4dGVuZHMgRm9ybVRvb2wgewotICAgIHB1YmxpYyBMaXN0RmF2b3JpdGVXU0lMVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgImZhdm9yaXRlcy9pbWFnZXMvbGlzdF9XU0lMX2VuYWJsZWQuZ2lmIiwgImZhdm9yaXRlcy9pbWFnZXMvbGlzdF9XU0lMX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEZvcm1MaW5rKCkgewotICAgICAgICByZXR1cm4gImZhdm9yaXRlcy92aWV3cy9MaXN0RmF2b3JpdGVXU0lMVmlldy5qc3AiOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvUmVtb3ZlRmF2b3JpdGVzVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9mYXZvcml0ZXMvcGVyc3BlY3RpdmUvUmVtb3ZlRmF2b3JpdGVzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzY3MmZhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vZmF2b3JpdGVzL3BlcnNwZWN0aXZlL1JlbW92ZUZhdm9yaXRlc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuUmVtb3ZlRmF2b3JpdGVzQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5TZWxlY3RGYXZvcml0ZXNUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5BY3Rpb25Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIFJlbW92ZUZhdm9yaXRlc1Rvb2wgZXh0ZW5kcyBBY3Rpb25Ub29sIHsKLQotICAgIHB1YmxpYyBSZW1vdmVGYXZvcml0ZXNUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAiaW1hZ2VzL2NsZWFyX2VuYWJsZWQuZ2lmIiwgImltYWdlcy9jbGVhcl9oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKCkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBSZW1vdmVGYXZvcml0ZXNBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL0FjdGlvblRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvQWN0aW9uVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzNlZGQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvQWN0aW9uVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Ub29sVHlwZXM7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBY3Rpb25Ub29sIGV4dGVuZHMgVG9vbAotewotICBwdWJsaWMgQWN0aW9uVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlcixTdHJpbmcgZW5hYmxlZEltYWdlTGluayxTdHJpbmcgaGlnaGxpZ2h0ZWRJbWFnZUxpbmssU3RyaW5nIGFsdCkKLSAgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLGVuYWJsZWRJbWFnZUxpbmssaGlnaGxpZ2h0ZWRJbWFnZUxpbmssYWx0LFRvb2xUeXBlcy5BQ1RJT04pOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRGb3JtTGluaygpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9BZGRUb1dTRExQZXJzcGVjdGl2ZVRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvQWRkVG9XU0RMUGVyc3BlY3RpdmVUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2M2Q0NDUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9BZGRUb1dTRExQZXJzcGVjdGl2ZVRvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZTsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEFkZFRvV1NETFBlcnNwZWN0aXZlVG9vbCBleHRlbmRzIEFjdGlvblRvb2wKLXsKLSAgcHVibGljIEFkZFRvV1NETFBlcnNwZWN0aXZlVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlcixTdHJpbmcgYWx0KQotICB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsImltYWdlcy9hZGRfdG9fd3NkbF9wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZiIsImltYWdlcy9hZGRfdG9fd3NkbF9wZXJzcGVjdGl2ZV9oaWdobGlnaHRlZC5naWYiLGFsdCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvQnJlYWRDcnVtYi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9CcmVhZENydW1iLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0OTdjMjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9CcmVhZENydW1iLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmU7Ci0KLS8vIEEgY2xhc3MgdXNlZCB0byByZXByZXNlbnQgYSBicm93ZXIgYnJlYWRjcnVtYi4gRWFjaCBicmVhZGNydW1iIGVuY2Fwc3VsYXRlcwotLy8gYSBuYXZpZ2F0ZWQgVVJMLgotcHVibGljIGNsYXNzIEJyZWFkQ3J1bWIKLXsKLSAgcHJpdmF0ZSBpbnQgcGVyc3BlY3RpdmVJZF87Ci0gIHByaXZhdGUgU3RyaW5nIHVybF87Ci0KLSAgcHVibGljIEJyZWFkQ3J1bWIoaW50IHBlcnNwZWN0aXZlSWQsU3RyaW5nIHVybCkKLSAgewotICAgIHBlcnNwZWN0aXZlSWRfID0gcGVyc3BlY3RpdmVJZDsKLSAgICB1cmxfID0gdXJsOwotICB9Ci0KLSAgLyoqCi0gICogR2V0IHRoZSBVUkwgYXNzb2NpYXRlZCB3aXRoIHRoaXMgYnJlYWRjcnVtYi4KLSAgKiBAcmV0dXJuIFN0cmluZyBUaGUgVVJMLgotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFVSTCgpCi0gIHsKLSAgICByZXR1cm4gdXJsXzsKLSAgfQotCi0gIC8qKgotICAqIEdldCB0aGUgSUQgb2YgdGhlIHBlcnNwZWN0aXZlIHdoZXJlIHRoaXMgYnJlYWRjcnVtYiBiZWxvbmdzLgotICAqIEByZXR1cm4gaW50IFRoZSBwZXJzcGVjdGl2ZUlEIGFzIGRlZmluZWQgaW4gQWN0aW9uSW5wdXRzLgotICAqLwotICBwdWJsaWMgaW50IGdldFBlcnNwZWN0aXZlSWQoKQotICB7Ci0gICAgcmV0dXJuIHBlcnNwZWN0aXZlSWRfOwotICB9Ci0KLSAgLyoqCi0gICogVGVzdCBlcXVhbGl0eSBiZXR3ZWVuIHRoaXMgYnJlYWRjcnVtYiBhbmQgYW5vdGhlci4gQm90aCB0aGUgVVJMcyBhbmQgcGVyc3BlY3RpdmUKLSAgKiBJRHMgbXVzdCBiZSBlcXVhbCBmb3IgdHdvIGJyZWFkY3J1bWJzIHRvIGJlIGVxdWFsLgotICAqIEBwYXJhbSBCcmVhZENydW1iIEEgYnJlYWRjcnVtYi4KLSAgKiBAcmV0dXJuIGJvb2xlYW4gVGhlIHJlc3VsdCBvZiB0aGUgZXF1YWxpdHkgdGVzdC4KLSAgKi8KLSAgcHVibGljIGJvb2xlYW4gZXF1YWxzKEJyZWFkQ3J1bWIgYikKLSAgewotICAgIHJldHVybiAoKHVybF8uZXF1YWxzKGIuZ2V0VVJMKCkpKSAmJiAocGVyc3BlY3RpdmVJZF8gPT0gYi5nZXRQZXJzcGVjdGl2ZUlkKCkpKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9Db250cm9sbGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL0NvbnRyb2xsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWE5Nzg3Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL0NvbnRyb2xsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUuQWN0aW9uRW5naW5lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuRmF2b3JpdGVzUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLldTRExQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5XU0lMUGVyc3BlY3RpdmU7Ci0KLXB1YmxpYyBjbGFzcyBDb250cm9sbGVyIGV4dGVuZHMgTWVzc2FnZVByb3ZpZGVyCi17Ci0gIHByaXZhdGUgU3RyaW5nIHNlc3Npb25JZF87Ci0gIHByaXZhdGUgU3RyaW5nIHN0YXRlTG9jYXRpb25fOwotICBwcml2YXRlIFN0cmluZyBkZWZhdWx0RmF2b3JpdGVzTG9jYXRpb25fOwotICBwcml2YXRlIFN0cmluZyBjb250ZXh0UGF0aF87Ci0gIHByaXZhdGUgaW50IGhpc3RvcnlEaXJlY3Rpb25fOwotICBwcml2YXRlIEhpc3RvcnkgaGlzdG9yeV87Ci0gIHByaXZhdGUgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZV87Ci0gIHByaXZhdGUgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZV87Ci0gIHByaXZhdGUgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZV87Ci0gIHByaXZhdGUgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2b3JpdGVzUGVyc3BlY3RpdmVfOwotICBwcml2YXRlIFBlcnNwZWN0aXZlIGN1cnJlbnRQZXJzcGVjdGl2ZV87Ci0gIHByaXZhdGUgYm9vbGVhbiBpc1BlcnNwZWN0aXZlQ29udGVudEJsYW5rXzsKLSAgcHJpdmF0ZSBBY3Rpb25FbmdpbmUgYWN0aW9uRW5naW5lOwotICAKLSAgLy8gV1NETCBCcm93c2VyCi0gIHByaXZhdGUgaW50IHdzZGxUeXBlXzsKLQotICBwdWJsaWMgQ29udHJvbGxlcigpCi0gIHsKLSAgICBzdXBlcigiZXhwbG9yZXIiKTsKLSAgICBjb250ZXh0UGF0aF8gPSBudWxsOwotCXN0YXRlTG9jYXRpb25fID0gbnVsbDsKLSAgICBoaXN0b3J5XyA9IG5ldyBIaXN0b3J5KCk7Ci0gICAgdWRkaVBlcnNwZWN0aXZlXyA9IG5ldyBVRERJUGVyc3BlY3RpdmUodGhpcyk7Ci0gICAgd3NpbFBlcnNwZWN0aXZlXyA9IG5ldyBXU0lMUGVyc3BlY3RpdmUodGhpcyk7Ci0gICAgd3NkbFBlcnNwZWN0aXZlXyA9IG5ldyBXU0RMUGVyc3BlY3RpdmUodGhpcyk7Ci0gICAgZmF2b3JpdGVzUGVyc3BlY3RpdmVfID0gbmV3IEZhdm9yaXRlc1BlcnNwZWN0aXZlKHRoaXMpOwotICAgIC8vIFNldCB0aGUgZGVmYXVsdCBwZXJzcGVjdGl2ZSB0byBVRERJLgotICAgIGN1cnJlbnRQZXJzcGVjdGl2ZV8gPSB1ZGRpUGVyc3BlY3RpdmVfOwotICAgIGhpc3RvcnlEaXJlY3Rpb25fID0gQWN0aW9uSW5wdXRzLkpVTVBfQkFDSzsKLSAgICB3c2RsVHlwZV8gPSBBY3Rpb25JbnB1dHMuV1NETF9UWVBFX1NFUlZJQ0VfSU5URVJGQUNFOwotICAgIGlzUGVyc3BlY3RpdmVDb250ZW50QmxhbmtfID0gdHJ1ZTsKLSAgICBhY3Rpb25FbmdpbmUgPSBuZXcgQWN0aW9uRW5naW5lKHRoaXMpOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRTdGF0ZUxvY2F0aW9uKFN0cmluZyBzdGF0ZUxvY2F0aW9uKQotICB7Ci0Jc3RhdGVMb2NhdGlvbl8gPSBzdGF0ZUxvY2F0aW9uOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0RGVmYXVsdEZhdm9yaXRlc0xvY2F0aW9uKFN0cmluZyBkZWZhdWx0RmF2b3JpdGVzTG9jYXRpb24pCi0gIHsKLQkgIGRlZmF1bHRGYXZvcml0ZXNMb2NhdGlvbl8gPSBkZWZhdWx0RmF2b3JpdGVzTG9jYXRpb247Ci0gIH0KLSAgCi0gIC8vIFRoaXMgbWV0aG9kIHNob3VsZCBiZSBjYWxsZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIENvbnRyb2xsZXIgYmVhbiBpcyBpbnN0YW50aWF0ZWQuCi0gIHByaXZhdGUgZmluYWwgdm9pZCBzZXRDb250ZXh0UGF0aChTdHJpbmcgY29udGV4dFBhdGgpCi0gIHsKLSAgICBpZiAoY29udGV4dFBhdGhfID09IG51bGwpCi0gICAgICBjb250ZXh0UGF0aF8gPSBjb250ZXh0UGF0aDsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQYXRoV2l0aENvbnRleHQoU3RyaW5nIHJlbGF0aXZlUGF0aCkKLSAgewotICAgIGlmIChyZWxhdGl2ZVBhdGggPT0gbnVsbCkKLSAgICAgIHJldHVybiByZWxhdGl2ZVBhdGg7Ci0gICAgU3RyaW5nQnVmZmVyIHBhdGggPSBuZXcgU3RyaW5nQnVmZmVyKHJlbGF0aXZlUGF0aCk7Ci0gICAgaWYgKGNvbnRleHRQYXRoXyAhPSBudWxsKQotICAgICAgcGF0aC5pbnNlcnQoMCwnLycpLmluc2VydCgwLGNvbnRleHRQYXRoXyk7Ci0gICAgcmV0dXJuIHBhdGgudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U2Vzc2lvbklkKCkKLSAgewotICAgIHJldHVybiBzZXNzaW9uSWRfOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldENvbnRleHRQYXRoKCkKLSAgewotICAgIHJldHVybiBjb250ZXh0UGF0aF87Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U2VydmxldEVuZ2luZVN0YXRlTG9jYXRpb24oKSB7Ci0JcmV0dXJuIHN0YXRlTG9jYXRpb25fOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldERlZmF1bHRGYXZvcml0ZXNMb2NhdGlvbiAoKSB7Ci0JcmV0dXJuIGRlZmF1bHRGYXZvcml0ZXNMb2NhdGlvbl87Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGluaXQoU3RyaW5nIHNlc3Npb25JZCxTZXJ2bGV0Q29udGV4dCBhcHBsaWNhdGlvbixTdHJpbmcgY29udGV4dFBhdGgpCi0gIHsKLSAgICBzZXNzaW9uSWRfID0gc2Vzc2lvbklkOwotICAgIHNldENvbnRleHRQYXRoKGNvbnRleHRQYXRoKTsKLSAgICB1ZGRpUGVyc3BlY3RpdmVfLmluaXRQZXJzcGVjdGl2ZShhcHBsaWNhdGlvbik7Ci0gICAgd3NpbFBlcnNwZWN0aXZlXy5pbml0UGVyc3BlY3RpdmUoYXBwbGljYXRpb24pOwotICAgIHdzZGxQZXJzcGVjdGl2ZV8uaW5pdFBlcnNwZWN0aXZlKGFwcGxpY2F0aW9uKTsKLSAgICBmYXZvcml0ZXNQZXJzcGVjdGl2ZV8uaW5pdFBlcnNwZWN0aXZlKGFwcGxpY2F0aW9uKTsKLSAgfQotCi0gIC8vIFNldHRlciBmb3IgdGhlIGN1cnJlbnQgcGVyc3BlY3RpdmUuCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldEN1cnJlbnRQZXJzcGVjdGl2ZShpbnQgcGVyc3BlY3RpdmUpCi0gIHsKLSAgICBzd2l0Y2ggKHBlcnNwZWN0aXZlKQotICAgIHsKLSAgICAgIGNhc2UgQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1VEREk6Ci0gICAgICAgIGN1cnJlbnRQZXJzcGVjdGl2ZV8gPSB1ZGRpUGVyc3BlY3RpdmVfOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1dTSUw6Ci0gICAgICAgIGN1cnJlbnRQZXJzcGVjdGl2ZV8gPSB3c2lsUGVyc3BlY3RpdmVfOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1dTREw6Ci0gICAgICAgIGN1cnJlbnRQZXJzcGVjdGl2ZV8gPSB3c2RsUGVyc3BlY3RpdmVfOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX0ZBVk9SSVRFUzoKLSAgICAgICAgY3VycmVudFBlcnNwZWN0aXZlXyA9IGZhdm9yaXRlc1BlcnNwZWN0aXZlXzsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgLy8gR2V0dGVyIGZvciB0aGUgY3VycmVudCBwZXJzcGVjdGl2ZS4KLSAgcHVibGljIGZpbmFsIFBlcnNwZWN0aXZlIGdldEN1cnJlbnRQZXJzcGVjdGl2ZSgpCi0gIHsKLSAgICByZXR1cm4gY3VycmVudFBlcnNwZWN0aXZlXzsKLSAgfQotCi0gIC8vIEdldHRlciBmb3IgdGhlIFVEREkgcGVyc3BlY3RpdmUuCi0gIHB1YmxpYyBmaW5hbCBVRERJUGVyc3BlY3RpdmUgZ2V0VURESVBlcnNwZWN0aXZlKCkKLSAgewotICAgIHJldHVybiB1ZGRpUGVyc3BlY3RpdmVfOwotICB9Ci0KLSAgLy8gR2V0dGVyIGZvciB0aGUgV1NJTCBwZXJzcGVjdGl2ZS4KLSAgcHVibGljIGZpbmFsIFdTSUxQZXJzcGVjdGl2ZSBnZXRXU0lMUGVyc3BlY3RpdmUoKQotICB7Ci0gICAgcmV0dXJuIHdzaWxQZXJzcGVjdGl2ZV87Ci0gIH0KLSAgCi0gIC8vIEdldHRlciBmb3IgdGhlIFdTREwgcGVyc3BlY3RpdmUuCi0gIHB1YmxpYyBmaW5hbCBXU0RMUGVyc3BlY3RpdmUgZ2V0V1NETFBlcnNwZWN0aXZlKCkKLSAgewotICAgIHJldHVybiB3c2RsUGVyc3BlY3RpdmVfOwotICB9Ci0KLSAgLy8gR2V0dGVyIGZvciB0aGUgRmF2b3JpdGVzIHBlcnNwZWN0aXZlLgotICBwdWJsaWMgZmluYWwgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKSB7Ci0gICAgcmV0dXJuIGZhdm9yaXRlc1BlcnNwZWN0aXZlXzsKLSAgfQotICAKLSAgLy8gR2V0dGVyIGZvciB0aGUgYWN0aW9uIGVuZ2luZQotICBwdWJsaWMgZmluYWwgQWN0aW9uRW5naW5lIGdldEFjdGlvbkVuZ2luZSgpIHsKLSAgICByZXR1cm4gYWN0aW9uRW5naW5lOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gYWRkVG9IaXN0b3J5KGludCBwZXJzcGVjdGl2ZUlkLFN0cmluZyB1cmwpCi0gIHsKLSAgICBpZiAodXJsICE9IG51bGwpCi0gICAgICByZXR1cm4gaGlzdG9yeV8uYWRkQnJlYWRDcnVtYihuZXcgQnJlYWRDcnVtYihwZXJzcGVjdGl2ZUlkLHVybCkpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8vIFdyYXBwZXIgZm9yIG1vdmluZyBmb3J3YXJkIGluIHRoZSBoaXN0b3J5IGxpc3QgYW5kIG9idGFpbmluZyB0aGUgYnJlYWRjcnVtYi4KLSAgcHVibGljIGZpbmFsIEJyZWFkQ3J1bWIgZm9yd2FyZCgpCi0gIHsKLSAgICBoaXN0b3J5RGlyZWN0aW9uXyA9IEFjdGlvbklucHV0cy5KVU1QX0ZPUldBUkQ7Ci0gICAgcmV0dXJuIGhpc3RvcnlfLmZvcndhcmQoKTsKLSAgfQotCi0gIC8vIFdyYXBwZXIgZm9yIG1vdmluZyBiYWNrIGluIHRoZSBoaXN0b3J5IGxpc3QgYW5kIG9idGFpbmluZyB0aGUgYnJlYWRjcnVtYi4KLSAgcHVibGljIGZpbmFsIEJyZWFkQ3J1bWIgYmFjaygpCi0gIHsKLSAgICBoaXN0b3J5RGlyZWN0aW9uXyA9IEFjdGlvbklucHV0cy5KVU1QX0JBQ0s7Ci0gICAgcmV0dXJuIGhpc3RvcnlfLmJhY2soKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBpbnQgZ2V0SGlzdG9yeURpcmVjdGlvbigpCi0gIHsKLSAgICByZXR1cm4gaGlzdG9yeURpcmVjdGlvbl87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBwcm9jZXNzU3RhbGVCcmVhZENydW1iKCkKLSAgewotICAgIGhpc3RvcnlfLnJlbW92ZUN1cnJlbnRCcmVhZENydW1iKCk7Ci0gIH0KLSAgCi0gIC8vIFdTREwgQnJvd3NlcgotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRXU0RMVHlwZShpbnQgd3NkbFR5cGUpCi0gIHsKLSAgICB3c2RsVHlwZV8gPSB3c2RsVHlwZTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBpbnQgZ2V0V1NETFR5cGUoKQotICB7Ci0gICAgcmV0dXJuIHdzZGxUeXBlXzsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNQZXJzcGVjdGl2ZUNvbnRlbnRCbGFuaygpCi0gIHsKLSAgICByZXR1cm4gaXNQZXJzcGVjdGl2ZUNvbnRlbnRCbGFua187Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGVuYWJsZVBlcnNwZWN0aXZlQ29udGVudEJsYW5rKGJvb2xlYW4gaXNQZXJzcGVjdGl2ZUNvbnRlbnRCbGFuaykKLSAgewotICAgIGlzUGVyc3BlY3RpdmVDb250ZW50QmxhbmtfID0gaXNQZXJzcGVjdGl2ZUNvbnRlbnRCbGFuazsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIHZvaWQgZHVtcEhpc3RvcnkoKQotICB7Ci0gICAgaGlzdG9yeV8uZHVtcCgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL0ZvbGRlck5vZGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvRm9sZGVyTm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYmEzOTE4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvRm9sZGVyTm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEZvbGRlck5vZGUgZXh0ZW5kcyBOb2RlCi17Ci0gIHB1YmxpYyBGb2xkZXJOb2RlKFRyZWVFbGVtZW50IGVsZW1lbnQsTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsaW50IG5vZGVEZXB0aCkKLSAgewotICAgIHN1cGVyKGVsZW1lbnQsbm9kZU1hbmFnZXIsbm9kZURlcHRoLCJpbWFnZXMvZm9sZGVyX2Nsb3NlZC5naWYiKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0T3BlbkltYWdlUGF0aCgpCi0gIHsKLSAgICByZXR1cm4gImltYWdlcy9mb2xkZXJfb3Blbi5naWYiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL0Zvcm1Ub29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL0Zvcm1Ub29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkMmY0N2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9Gb3JtVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Ub29sVHlwZXM7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBGb3JtVG9vbCBleHRlbmRzIFRvb2wgaW1wbGVtZW50cyBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UKLXsKLSAgcHJvdGVjdGVkIEZvcm1Ub29sUHJvcGVydGllcyBmb3JtVG9vbFByb3BlcnRpZXNfOwotCi0gIHB1YmxpYyBGb3JtVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlcixTdHJpbmcgZW5hYmxlZEltYWdlTGluayxTdHJpbmcgaGlnaGxpZ2h0ZWRJbWFnZUxpbmssU3RyaW5nIGFsdCkKLSAgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLGVuYWJsZWRJbWFnZUxpbmssaGlnaGxpZ2h0ZWRJbWFnZUxpbmssYWx0LFRvb2xUeXBlcy5GT1JNKTsKLSAgICBmb3JtVG9vbFByb3BlcnRpZXNfID0gbmV3IEZvcm1Ub29sUHJvcGVydGllcygpOwotICAgIGluaXREZWZhdWx0UHJvcGVydGllcygpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgaW5pdERlZmF1bHRQcm9wZXJ0aWVzKCkKLSAgewotICB9Ci0KLSAgcHVibGljIGZpbmFsIE9iamVjdCBnZXRQcm9wZXJ0eShPYmplY3Qga2V5KQotICB7Ci0gICAgcmV0dXJuIGZvcm1Ub29sUHJvcGVydGllc18uZ2V0UHJvcGVydHkoa2V5KTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldFByb3BlcnR5KE9iamVjdCBrZXksT2JqZWN0IHZhbHVlKQotICB7Ci0gICAgZm9ybVRvb2xQcm9wZXJ0aWVzXy5zZXRQcm9wZXJ0eShrZXksdmFsdWUpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgcmVtb3ZlUHJvcGVydHkoT2JqZWN0IGtleSkKLSAgewotICAgIGZvcm1Ub29sUHJvcGVydGllc18ucmVtb3ZlUHJvcGVydHkoa2V5KTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGNsZWFyUHJvcGVydHlUYWJsZSgpCi0gIHsKLSAgICBmb3JtVG9vbFByb3BlcnRpZXNfLmNsZWFyUHJvcGVydHlUYWJsZSgpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgdXBkYXRlUHJvcGVydHlUYWJsZShIYXNodGFibGUgbmV3UHJvcGVydHlUYWJsZSkKLSAgewotICAgIGZvcm1Ub29sUHJvcGVydGllc18udXBkYXRlUHJvcGVydHlUYWJsZShuZXdQcm9wZXJ0eVRhYmxlKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldFByb3BlcnR5VGFibGUoSGFzaHRhYmxlIG5ld1Byb3BlcnR5VGFibGUpCi0gIHsKLSAgICBmb3JtVG9vbFByb3BlcnRpZXNfLnNldFByb3BlcnR5VGFibGUobmV3UHJvcGVydHlUYWJsZSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBmbGFnRXJyb3IoT2JqZWN0IGlucHV0S2V5KQotICB7Ci0gICAgZm9ybVRvb2xQcm9wZXJ0aWVzXy5mbGFnRXJyb3IoaW5wdXRLZXkpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgZmxhZ1Jvd0Vycm9yKE9iamVjdCBpbnB1dEtleSxpbnQgcm93TnVtYmVyKQotICB7Ci0gICAgZm9ybVRvb2xQcm9wZXJ0aWVzXy5mbGFnUm93RXJyb3IoaW5wdXRLZXkscm93TnVtYmVyKTsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIHZvaWQgZmxhZ1Jvd0Vycm9yKE9iamVjdCBpbnB1dEtleSxPYmplY3Qgcm93SWQpCi0gIHsKLSAgICBmb3JtVG9vbFByb3BlcnRpZXNfLmZsYWdSb3dFcnJvcihpbnB1dEtleSxyb3dJZCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBjbGVhckVycm9ycygpCi0gIHsKLSAgICBmb3JtVG9vbFByb3BlcnRpZXNfLmNsZWFyRXJyb3JzKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBpc0lucHV0VmFsaWQoT2JqZWN0IGlucHV0S2V5KQotICB7Ci0gICAgcmV0dXJuIGZvcm1Ub29sUHJvcGVydGllc18uaXNJbnB1dFZhbGlkKGlucHV0S2V5KTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIGlzUm93SW5wdXRWYWxpZChPYmplY3QgaW5wdXRLZXksaW50IHJvd051bWJlcikKLSAgewotICAgIHJldHVybiBmb3JtVG9vbFByb3BlcnRpZXNfLmlzUm93SW5wdXRWYWxpZChpbnB1dEtleSxTdHJpbmcudmFsdWVPZihyb3dOdW1iZXIpKTsKLSAgfQotICAKLSAgLy8gVGhlIHJvdyBudW1iZXIgbWF5IGFsc28gYmUgcmVwcmVzZW50ZWQgYnkgYSB1bmlxdWUgb2JqZWN0IChlLmcuIFVVSUQpCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIGlzUm93SW5wdXRWYWxpZChPYmplY3QgaW5wdXRLZXksT2JqZWN0IHJvd0lkKQotICB7Ci0gICAgcmV0dXJuIGZvcm1Ub29sUHJvcGVydGllc18uaXNSb3dJbnB1dFZhbGlkKGlucHV0S2V5LHJvd0lkKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGluaygpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9Gb3JtVG9vbFByb3BlcnRpZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvRm9ybVRvb2xQcm9wZXJ0aWVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwY2Y3OWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9Gb3JtVG9vbFByb3BlcnRpZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLQotcHVibGljIGNsYXNzIEZvcm1Ub29sUHJvcGVydGllcyBpbXBsZW1lbnRzIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZQotewotICBwcml2YXRlIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlXzsKLSAgcHJpdmF0ZSBIYXNodGFibGUgZXJyYW50VmFsdWVzXzsKLQotICBwdWJsaWMgRm9ybVRvb2xQcm9wZXJ0aWVzKCkKLSAgewotICAgIHByb3BlcnR5VGFibGVfID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIGVycmFudFZhbHVlc18gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgT2JqZWN0IGdldFByb3BlcnR5KE9iamVjdCBrZXkpCi0gIHsKLSAgICByZXR1cm4gcHJvcGVydHlUYWJsZV8uZ2V0KGtleSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRQcm9wZXJ0eShPYmplY3Qga2V5LE9iamVjdCB2YWx1ZSkKLSAgewotICAgIHByb3BlcnR5VGFibGVfLnB1dChrZXksdmFsdWUpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgcmVtb3ZlUHJvcGVydHkoT2JqZWN0IGtleSkKLSAgewotICAgIHByb3BlcnR5VGFibGVfLnJlbW92ZShrZXkpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgY2xlYXJQcm9wZXJ0eVRhYmxlKCkKLSAgewotICAgIHByb3BlcnR5VGFibGVfLmNsZWFyKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCB1cGRhdGVQcm9wZXJ0eVRhYmxlKEhhc2h0YWJsZSBuZXdQcm9wZXJ0eVRhYmxlKQotICB7Ci0gICAgRW51bWVyYXRpb24gZSA9IG5ld1Byb3BlcnR5VGFibGUua2V5cygpOwotICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIFN0cmluZyBrZXkgPSAoU3RyaW5nKWUubmV4dEVsZW1lbnQoKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChrZXksbmV3UHJvcGVydHlUYWJsZS5nZXQoa2V5KSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0UHJvcGVydHlUYWJsZShIYXNodGFibGUgbmV3UHJvcGVydHlUYWJsZSkKLSAgewotICAgIGNsZWFyUHJvcGVydHlUYWJsZSgpOwotICAgIHVwZGF0ZVByb3BlcnR5VGFibGUobmV3UHJvcGVydHlUYWJsZSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBmbGFnRXJyb3IoT2JqZWN0IGlucHV0S2V5KQotICB7Ci0gICAgaWYgKGlzSW5wdXRWYWxpZChpbnB1dEtleSkpCi0gICAgICBlcnJhbnRWYWx1ZXNfLnB1dChpbnB1dEtleSxCb29sZWFuLlRSVUUpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgZmxhZ1Jvd0Vycm9yKE9iamVjdCBpbnB1dEtleSxpbnQgcm93TnVtYmVyKQotICB7Ci0gICAgZmxhZ1Jvd0Vycm9yKGlucHV0S2V5LFN0cmluZy52YWx1ZU9mKHJvd051bWJlcikpOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgdm9pZCBmbGFnUm93RXJyb3IoT2JqZWN0IGlucHV0S2V5LE9iamVjdCByb3dJZCkKLSAgewotICAgIE9iamVjdCBlcnJvck9iamVjdCA9IGVycmFudFZhbHVlc18uZ2V0KGlucHV0S2V5KTsKLSAgICBIYXNodGFibGUgcm93SGFzaDsKLSAgICBpZiAoZXJyb3JPYmplY3QgaW5zdGFuY2VvZiBIYXNodGFibGUpCi0gICAgICByb3dIYXNoID0gKEhhc2h0YWJsZSllcnJvck9iamVjdDsKLSAgICBlbHNlCi0gICAgICByb3dIYXNoID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIHJvd0hhc2gucHV0KHJvd0lkLEJvb2xlYW4uVFJVRSk7Ci0gICAgZXJyYW50VmFsdWVzXy5wdXQoaW5wdXRLZXkscm93SGFzaCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGNsZWFyRXJyb3JzKCkKLSAgewotICAgIGVycmFudFZhbHVlc18uY2xlYXIoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIGlzSW5wdXRWYWxpZChPYmplY3QgaW5wdXRLZXkpCi0gIHsKLSAgICByZXR1cm4gKGVycmFudFZhbHVlc18uZ2V0KGlucHV0S2V5KSA9PSBudWxsKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIGlzUm93SW5wdXRWYWxpZChPYmplY3QgaW5wdXRLZXksaW50IHJvd051bWJlcikKLSAgewotICAgIHJldHVybiBpc1Jvd0lucHV0VmFsaWQoaW5wdXRLZXksU3RyaW5nLnZhbHVlT2Yocm93TnVtYmVyKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIGlzUm93SW5wdXRWYWxpZChPYmplY3QgaW5wdXRLZXksT2JqZWN0IHJvd0lkKQotICB7Ci0gICAgSGFzaHRhYmxlIHJvd0hhc2ggPSAoSGFzaHRhYmxlKWVycmFudFZhbHVlc18uZ2V0KGlucHV0S2V5KTsKLSAgICBpZiAocm93SGFzaCA9PSBudWxsKQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIChyb3dIYXNoLmdldChyb3dJZCkgPT0gbnVsbCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL0Zvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzA3NDc5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotCi1wdWJsaWMgYWJzdHJhY3QgaW50ZXJmYWNlIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZQotewotICAvLyBHZXR0ZXIgYW5kIFNldHRlciBmb3IgYSBwcm9wZXJ0eS4KLSAgcHVibGljIGFic3RyYWN0IE9iamVjdCBnZXRQcm9wZXJ0eShPYmplY3Qga2V5KTsKLSAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0UHJvcGVydHkoT2JqZWN0IGtleSxPYmplY3QgdmFsdWUpOwotICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCByZW1vdmVQcm9wZXJ0eShPYmplY3Qga2V5KTsKLQotICAvLyBQcm9wZXJ0eSB0YWJsZSBvcGVyYXRvcnMuCi0gIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGNsZWFyUHJvcGVydHlUYWJsZSgpOwotICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCB1cGRhdGVQcm9wZXJ0eVRhYmxlKEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlKTsKLSAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0UHJvcGVydHlUYWJsZShIYXNodGFibGUgcHJvcGVydHlUYWJsZSk7Ci0KLSAgLy8gRXJyb3IgaGFuZGxpbmcuCi0gIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGZsYWdFcnJvcihPYmplY3QgaW5wdXRLZXkpOwotICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBmbGFnUm93RXJyb3IoT2JqZWN0IGlucHV0S2V5LGludCByb3dOdW1iZXIpOwotICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBmbGFnUm93RXJyb3IoT2JqZWN0IGlucHV0S2V5LE9iamVjdCByb3dJZCk7Ci0gIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGNsZWFyRXJyb3JzKCk7Ci0gIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGlzSW5wdXRWYWxpZChPYmplY3QgaW5wdXRLZXkpOwotICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBpc1Jvd0lucHV0VmFsaWQoT2JqZWN0IGlucHV0S2V5LGludCByb3dOdW1iZXIpOwotICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBpc1Jvd0lucHV0VmFsaWQoT2JqZWN0IGlucHV0S2V5LE9iamVjdCByb3dJZCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL0hpc3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvSGlzdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODAyZDQ1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvSGlzdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotLy8gQSBjbGFzcyByZXByZXNlbnRpbmcgYSBWZWN0b3Igb2YgYnJlYWRjcnVtYnMuIEEgcG9zaXRpb24gaW5kZXggaXMgdXNlZAotLy8gdG8gbmF2aWdhdGUgdGhyb3VnaCB0aGUgZGF0YSBzdHJ1Y3R1cmUuCi1wdWJsaWMgY2xhc3MgSGlzdG9yeQotewotICBwcml2YXRlIFZlY3RvciBpdGVtc187Ci0gIHByaXZhdGUgaW50IHBvc2l0aW9uXzsKLQotICBwdWJsaWMgSGlzdG9yeSgpCi0gIHsKLSAgICBpdGVtc18gPSBuZXcgVmVjdG9yKCk7Ci0gICAgcG9zaXRpb25fID0gLTE7Ci0gIH0KLQotICAvLyBBZGQgYSBuZXcgYnJlYWRjcnVtYiB0byB0aGUgaGlzdG9yeSBsaXN0LiBXaGVuIGFkZGluZyBhIG5ldyBicmVhZGNydW1iCi0gIC8vIHdpdGhpbiB0aGUgY3VycmVudCBsaXN0LCBhbGwgYnJlYWRjcnVtYnMgYWZ0ZXIgdGhlIG5ld2x5IGFkZGVkIG9uZSBhcmUKLSAgLy8gcmVtb3ZlZC4KLSAgcHVibGljIGJvb2xlYW4gYWRkQnJlYWRDcnVtYihCcmVhZENydW1iIGIpCi0gIHsKLSAgICBpbnQgbnVtYmVyT2ZJdGVtcyA9IGl0ZW1zXy5zaXplKCk7Ci0gICAgaWYgKG51bWJlck9mSXRlbXMgPT0gMCkKLSAgICB7Ci0gICAgICBwb3NpdGlvbl8rKzsKLSAgICAgIGl0ZW1zXy5hZGRFbGVtZW50KGIpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBCcmVhZENydW1iIGN1cnJlbnRCcmVhZENydW1iID0gKEJyZWFkQ3J1bWIpaXRlbXNfLmVsZW1lbnRBdChwb3NpdGlvbl8pOwotICAgICAgaWYgKCFjdXJyZW50QnJlYWRDcnVtYi5lcXVhbHMoYikpCi0gICAgICB7Ci0gICAgICAgIHBvc2l0aW9uXysrOwotICAgICAgICBpdGVtc18uaW5zZXJ0RWxlbWVudEF0KGIscG9zaXRpb25fKTsKLSAgICAgICAgZm9yIChpbnQgaT1pdGVtc18uc2l6ZSgpLTE7aT5wb3NpdGlvbl87aS0tKQotICAgICAgICAgIGl0ZW1zXy5yZW1vdmVFbGVtZW50QXQoaSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvLyBNb3ZlIGZvcndhcmQgd2l0aGluIHRoZSBoaXN0b3J5IGxpc3QgYW5kIG9idGFpbiB0aGUgYnJlYWRjcnVtYi4KLSAgcHVibGljIEJyZWFkQ3J1bWIgZm9yd2FyZCgpCi0gIHsKLSAgICBpZiAocG9zaXRpb25fIDwgaXRlbXNfLnNpemUoKS0xKQotICAgIHsKLSAgICAgIHBvc2l0aW9uXysrOwotICAgICAgQnJlYWRDcnVtYiBiID0gKEJyZWFkQ3J1bWIpaXRlbXNfLmVsZW1lbnRBdChwb3NpdGlvbl8pOwotICAgICAgcmV0dXJuIGI7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLy8gTW92ZSBiYWNrIHdpdGhpbiB0aGUgaGlzdG9yeSBsaXN0IGFuZCBvYnRhaW4gdGhlIGJyZWFkY3J1bWIuCi0gIHB1YmxpYyBCcmVhZENydW1iIGJhY2soKQotICB7Ci0gICAgaWYgKHBvc2l0aW9uXyA+IDApCi0gICAgewotICAgICAgcG9zaXRpb25fLS07Ci0gICAgICBCcmVhZENydW1iIGIgPSAoQnJlYWRDcnVtYilpdGVtc18uZWxlbWVudEF0KHBvc2l0aW9uXyk7Ci0gICAgICByZXR1cm4gYjsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZW1vdmVDdXJyZW50QnJlYWRDcnVtYigpCi0gIHsKLSAgICBpdGVtc18ucmVtb3ZlRWxlbWVudEF0KHBvc2l0aW9uXyk7Ci0gICAgaWYgKHBvc2l0aW9uXyA+IGl0ZW1zXy5zaXplKCktMSkKLSAgICAgIHBvc2l0aW9uXy0tOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBkdW1wKCkKLSAgewotICAgIGZvciAoaW50IGk9MDtpPGl0ZW1zXy5zaXplKCk7aSsrKQotICAgIHsKLSAgICAgIGl0ZW1zXy5lbGVtZW50QXQoaSk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL0ltcG9ydFRvRmlsZVN5c3RlbVRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvSW1wb3J0VG9GaWxlU3lzdGVtVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzkxYmMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvSW1wb3J0VG9GaWxlU3lzdGVtVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgSW1wb3J0VG9GaWxlU3lzdGVtVG9vbCBleHRlbmRzIEFjdGlvblRvb2wgewotICAgIHB1YmxpYyBJbXBvcnRUb0ZpbGVTeXN0ZW1Ub29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAiaW1hZ2VzL2ltcG9ydF9mc19lbmFibGVkLmdpZiIsICJpbWFnZXMvaW1wb3J0X2ZzX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL0ltcG9ydFRvV29ya2JlbmNoVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9JbXBvcnRUb1dvcmtiZW5jaFRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDhjM2VlZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL0ltcG9ydFRvV29ya2JlbmNoVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgSW1wb3J0VG9Xb3JrYmVuY2hUb29sIGV4dGVuZHMgRm9ybVRvb2wgewotICAgIHB1YmxpYyBJbXBvcnRUb1dvcmtiZW5jaFRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJpbWFnZXMvaW1wb3J0X3RvX3dvcmtiZW5jaF9lbmFibGVkLmdpZiIsICJpbWFnZXMvaW1wb3J0X3RvX3dvcmtiZW5jaF9oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Rm9ybUxpbmsoKSB7Ci0gICAgICAgIHJldHVybiAiZm9ybXMvSW1wb3J0VG9Xb3JrYmVuY2hGb3JtLmpzcCI7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL0xhdW5jaE9wdGlvbnNNYW5hZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL0xhdW5jaE9wdGlvbnNNYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjMjViODMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9MYXVuY2hPcHRpb25zTWFuYWdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLkxhdW5jaE9wdGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLldTRExQZXJzcGVjdGl2ZTsKLQotcHVibGljIGNsYXNzIExhdW5jaE9wdGlvbnNNYW5hZ2VyCi17Ci0gIHByaXZhdGUgc3RhdGljIExhdW5jaE9wdGlvbnNNYW5hZ2VyIGluc3RhbmNlXzsKLQotICBwcml2YXRlIEhhc2h0YWJsZSBvcHRpb25zVGFibGVfOwotCi0gIHByaXZhdGUgTGF1bmNoT3B0aW9uc01hbmFnZXIoKQotICB7Ci0gICAgb3B0aW9uc1RhYmxlXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgTGF1bmNoT3B0aW9uc01hbmFnZXIgZ2V0SW5zdGFuY2UoKQotICB7Ci0gICAgaWYgKGluc3RhbmNlXyA9PSBudWxsKQotICAgICAgaW5zdGFuY2VfID0gbmV3IExhdW5jaE9wdGlvbnNNYW5hZ2VyKCk7Ci0gICAgcmV0dXJuIGluc3RhbmNlXzsKLSAgfQotCi0gIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBtYW5hZ2UoU3RyaW5nIGtleSwgT2JqZWN0IHZhbHVlLCBTZXJ2bGV0Q29udGV4dCBhcHBsaWNhdGlvbikKLSAgewotICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZykKLSAgICAgIG1hbmFnZVNlc3Npb24oa2V5LCAoU3RyaW5nKXZhbHVlLCBhcHBsaWNhdGlvbik7Ci0gICAgZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBIYXNodGFibGUpCi0gICAgICBtYW5hZ2VPcHRpb25zKGtleSwgKEhhc2h0YWJsZSl2YWx1ZSwgYXBwbGljYXRpb24pOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIG1hbmFnZVNlc3Npb24oU3RyaW5nIGtleSwgU3RyaW5nIHNlc3Npb25JZCwgU2VydmxldENvbnRleHQgYXBwbGljYXRpb24pCi0gIHsKLSAgICBPYmplY3Qgb2JqID0gb3B0aW9uc1RhYmxlXy5yZW1vdmUoa2V5KTsKLSAgICBpZiAob2JqICE9IG51bGwgJiYgKG9iaiBpbnN0YW5jZW9mIEhhc2h0YWJsZSkpCi0gICAgICBsb2FkT3B0aW9ucyhzZXNzaW9uSWQsIChIYXNodGFibGUpb2JqLCBhcHBsaWNhdGlvbik7Ci0gICAgZWxzZQotICAgICAgb3B0aW9uc1RhYmxlXy5wdXQoa2V5LCBzZXNzaW9uSWQpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIG1hbmFnZU9wdGlvbnMoU3RyaW5nIGtleSwgSGFzaHRhYmxlIG9wdGlvbnMsIFNlcnZsZXRDb250ZXh0IGFwcGxpY2F0aW9uKQotICB7Ci0gICAgT2JqZWN0IG9iaiA9IG9wdGlvbnNUYWJsZV8ucmVtb3ZlKGtleSk7Ci0gICAgaWYgKG9iaiAhPSBudWxsICYmIChvYmogaW5zdGFuY2VvZiBTdHJpbmcpKQotICAgICAgbG9hZE9wdGlvbnMoKFN0cmluZylvYmosIG9wdGlvbnMsIGFwcGxpY2F0aW9uKTsKLSAgICBlbHNlCi0gICAgICBvcHRpb25zVGFibGVfLnB1dChrZXksIG9wdGlvbnMpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGxvYWRPcHRpb25zKFN0cmluZyBzZXNzaW9uSWQsIEhhc2h0YWJsZSBvcHRpb25zLCBTZXJ2bGV0Q29udGV4dCBhcHBsaWNhdGlvbikKLSAgewotICAgIEh0dHBTZXNzaW9uIGh0dHBTZXNzaW9uID0gKEh0dHBTZXNzaW9uKWFwcGxpY2F0aW9uLmdldEF0dHJpYnV0ZShzZXNzaW9uSWQpOwotICAgIGlmIChodHRwU2Vzc2lvbiAhPSBudWxsKQotICAgIHsKLSAgICAgIENvbnRyb2xsZXIgY29udHJvbGxlciA9IChDb250cm9sbGVyKWh0dHBTZXNzaW9uLmdldEF0dHJpYnV0ZSgiY29udHJvbGxlciIpOwotCSAgU3RyaW5nW10gc3RhdGVMb2NhdGlvbnMgPSAoU3RyaW5nW10pb3B0aW9ucy5nZXQoTGF1bmNoT3B0aW9ucy5TVEFURV9MT0NBVElPTik7Ci0JICBTdHJpbmdbXSBkZWZhdWx0RmF2b3JpdGVzTG9jYXRpb25zID0gKFN0cmluZ1tdKW9wdGlvbnMuZ2V0KExhdW5jaE9wdGlvbnMuREVGQVVMVF9GQVZPUklURVNfTE9DQVRJT04pOwotICAgICAgU3RyaW5nW10gaW5xdWlyeVVSTHMgPSAoU3RyaW5nW10pb3B0aW9ucy5nZXQoTGF1bmNoT3B0aW9ucy5JTlFVSVJZX1VSTCk7Ci0gICAgICBTdHJpbmdbXSBwdWJsaXNoVVJMcyA9IChTdHJpbmdbXSlvcHRpb25zLmdldChMYXVuY2hPcHRpb25zLlBVQkxJU0hfVVJMKTsKLSAgICAgIFN0cmluZ1tdIHNlcnZpY2VOYW1lcyA9IChTdHJpbmdbXSlvcHRpb25zLmdldChMYXVuY2hPcHRpb25zLlNFUlZJQ0VfTkFNRSk7Ci0gICAgICBTdHJpbmdbXSBzZXJ2aWNlS2V5cyA9IChTdHJpbmdbXSlvcHRpb25zLmdldChMYXVuY2hPcHRpb25zLlNFUlZJQ0VfS0VZKTsKLSAgICAgIFN0cmluZ1tdIHdzZGxVUkxzID0gKFN0cmluZ1tdKW9wdGlvbnMuZ2V0KExhdW5jaE9wdGlvbnMuV1NETF9VUkwpOwotICAgICAgU3RyaW5nW10gZW5kcG9pbnRzID0gKFN0cmluZ1tdKW9wdGlvbnMuZ2V0KExhdW5jaE9wdGlvbnMuV0VCX1NFUlZJQ0VfRU5EUE9JTlQpOwotICAgICAgU3RyaW5nW10gc2VydmljZVFOYW1lU3RyaW5ncyA9IChTdHJpbmdbXSlvcHRpb25zLmdldChMYXVuY2hPcHRpb25zLlNFUlZJQ0VfUU5BTUVfU1RSSU5HKTsKLSAgICAgIFN0cmluZ1tdIGJpbmRpbmdOYW1lU3RyaW5ncyA9IChTdHJpbmdbXSlvcHRpb25zLmdldChMYXVuY2hPcHRpb25zLkJJTkRJTkdfTkFNRV9TVFJJTkcpOwotCSAgU3RyaW5nIHN0YXRlTG9jYXRpb24gPSAoc3RhdGVMb2NhdGlvbnMgPT0gbnVsbCB8fCBzdGF0ZUxvY2F0aW9ucy5sZW5ndGggPT0gMCkgPyBudWxsIDogc3RhdGVMb2NhdGlvbnNbMF07Ci0JICBjb250cm9sbGVyLnNldFN0YXRlTG9jYXRpb24oc3RhdGVMb2NhdGlvbik7Ci0JICBTdHJpbmcgZGVmYXVsdEZhdm9yaXRlc0xvY2F0aW9uID0gKGRlZmF1bHRGYXZvcml0ZXNMb2NhdGlvbnMgPT0gbnVsbCB8fCBkZWZhdWx0RmF2b3JpdGVzTG9jYXRpb25zLmxlbmd0aCA9PSAwKSA/IG51bGwgOiBkZWZhdWx0RmF2b3JpdGVzTG9jYXRpb25zWzBdOwotCSAgY29udHJvbGxlci5zZXREZWZhdWx0RmF2b3JpdGVzTG9jYXRpb24oZGVmYXVsdEZhdm9yaXRlc0xvY2F0aW9uKTsKLSAgICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgICAgdWRkaVBlcnNwZWN0aXZlLnByZWxvYWRVRERJUmVnaXN0cmllcyhpbnF1aXJ5VVJMcywgcHVibGlzaFVSTHMpOwotICAgICAgdWRkaVBlcnNwZWN0aXZlLnByZWxvYWRTZXJ2aWNlcyhpbnF1aXJ5VVJMcyxzZXJ2aWNlTmFtZXMsc2VydmljZUtleXMpOwotICAgICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICAgICB3c2RsUGVyc3BlY3RpdmUucHJlbG9hZFdTREwod3NkbFVSTHMpOwotICAgICAgd3NkbFBlcnNwZWN0aXZlLnByZWxvYWRFbmRwb2ludHMod3NkbFVSTHMsIGVuZHBvaW50cyk7Ci0gICAgICB3c2RsUGVyc3BlY3RpdmUucHJlc2VsZWN0U2VydmljZU9yQmluZGluZyh3c2RsVVJMcyxzZXJ2aWNlUU5hbWVTdHJpbmdzLGJpbmRpbmdOYW1lU3RyaW5ncyk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL0xhdW5jaFdlYlNlcnZpY2VXaXphcmRUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL0xhdW5jaFdlYlNlcnZpY2VXaXphcmRUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1YjNkM2QuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9MYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgTGF1bmNoV2ViU2VydmljZVdpemFyZFRvb2wgZXh0ZW5kcyBGb3JtVG9vbCB7Ci0gICAgcHVibGljIExhdW5jaFdlYlNlcnZpY2VXaXphcmRUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAiaW1hZ2VzL2xhdW5jaF93c3dpemFyZF9lbmFibGVkLmdpZiIsICJpbWFnZXMvbGF1bmNoX3dzd2l6YXJkX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRGb3JtTGluaygpIHsKLSAgICAgICAgcmV0dXJuICJmb3Jtcy9MYXVuY2hXZWJTZXJ2aWNlV2l6YXJkRm9ybS5qc3AiOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9NZXNzYWdlQnVuZGxlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL01lc3NhZ2VCdW5kbGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNhNWQ1Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL01lc3NhZ2VCdW5kbGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotLyoqCi0qIEFuIG1lc3NhZ2UgYnVuZGxlIGlzIGEgY29sbGVjdGlvbiBvZiBtZXNzYWdlcyBkcmF3biBmcm9tIHNvbWUKLSogc2V0IG9mIHByb3BlcnRpZXMuCi0qLwotcHVibGljIGNsYXNzIE1lc3NhZ2VCdW5kbGUKLXsKLSAgcHJpdmF0ZSBSZXNvdXJjZUJ1bmRsZSBmUmVzb3VyY2VCdW5kbGU7Ci0KLSAgLyoqCi0gICogQ29uc3RydWN0cyBhIG5ldyBNZXNzYWdlQnVuZGxlIGZyb20gdGhlIGdpdmVuIFJlc291cmNlQnVuZGxlLgotICAqLwotICBwdWJsaWMgTWVzc2FnZUJ1bmRsZSAoIFJlc291cmNlQnVuZGxlIHJlc291cmNlQnVuZGxlICkKLSAgewotICAgIGZSZXNvdXJjZUJ1bmRsZSA9IHJlc291cmNlQnVuZGxlOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbWVzc2FnZSBpZGVudGlmaWVkIGJ5IG1lc3NhZ2VJZC4KLSAgKiBAcGFyYW0gbWVzc2FnZUlkIFRoZSBtZXNzYWdlIElELgotICAqIEByZXR1cm4gU3RyaW5nIFRoZSBtZXNzYWdlIHRleHQuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TWVzc2FnZSAoIFN0cmluZyBtZXNzYWdlSWQgKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgcmV0dXJuIGZSZXNvdXJjZUJ1bmRsZS5nZXRTdHJpbmcobWVzc2FnZUlkKTsKLSAgICB9Ci0gICAgY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJldHVybiBtZXNzYWdlSWQ7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbWVzc2FnZSBpZGVudGlmaWVkIGJ5IG1lc3NhZ2VJZC4KLSAgKiBAcGFyYW0gbWVzc2FnZUlkIFRoZSBtZXNzYWdlIElELgotICAqIEBwYXJhbSBzdWIgQSBzdWJzdGl0dXRpb24gdmFsdWUgZm9yICIlMSIgaW4gdGhlIG1lc3NhZ2UuCi0gICogQHJldHVybiBTdHJpbmcgVGhlIG1lc3NhZ2UgdGV4dC4KLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRNZXNzYWdlICggU3RyaW5nIG1lc3NhZ2VJZCwgU3RyaW5nIHN1YiApCi0gIHsKLSAgICBTdHJpbmdbXSBzID0ge3N1Yn07Ci0gICAgcmV0dXJuIGdldE1lc3NhZ2UobWVzc2FnZUlkLHMpOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbWVzc2FnZSBpZGVudGlmaWVkIGJ5IG1lc3NhZ2VJZC4KLSAgKiBAcGFyYW0gbWVzc2FnZUlkIFRoZSBtZXNzYWdlIElELgotICAqIEBwYXJhbSBzdWIgU3Vic3RpdHV0aW9uIHZhbHVlcyBmb3IgIiUxLi4lbiIgKHN1YlswXS4uc3ViW24tMV0pIGluCi0gICogdGhlIG1lc3NhZ2UuCi0gICogQHJldHVybiBTdHJpbmcgVGhlIG1lc3NhZ2UgdGV4dC4KLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRNZXNzYWdlICggU3RyaW5nIG1lc3NhZ2VJZCwgU3RyaW5nW10gc3ViICkKLSAgewotICAgIFN0cmluZyBtID0gZ2V0TWVzc2FnZShtZXNzYWdlSWQpOwotICAgIGludCBsZW4gPSBtLmxlbmd0aCgpOwotICAgIGludCBtYXggPSBzdWIubGVuZ3RoOwotICAgIFN0cmluZ0J1ZmZlciBiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIGludCBwb3MgPSAwOwotICAgIHdoaWxlIChwb3MgPj0gMCkKLSAgICB7Ci0gICAgICBpbnQgcGN0ID0gbS5pbmRleE9mKCclJyxwb3MpOwotICAgICAgaWYgKHBjdCA+PSAwKQotICAgICAgewotICAgICAgICBiLmFwcGVuZChtLnN1YnN0cmluZyhwb3MscGN0KSk7Ci0gICAgICAgIHBvcyA9IHBjdCArIDE7Ci0gICAgICAgIGlmIChwb3MgPCBsZW4pCi0gICAgICAgIHsKLSAgICAgICAgICBjaGFyIGQgPSBtLmNoYXJBdChwb3MpOwotICAgICAgICAgIGlmIChDaGFyYWN0ZXIuaXNEaWdpdChkKSAmJiBkICE9ICcwJykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgdiA9IEludGVnZXIucGFyc2VJbnQobmV3IENoYXJhY3RlcihkKS50b1N0cmluZygpKTsKLSAgICAgICAgICAgIGlmICh2IDw9IG1heCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgYi5hcHBlbmQoc3ViW3YtMV0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBiLmFwcGVuZCgnPycpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcG9zKys7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBiLmFwcGVuZCgnJScpOwotICAgICAgICAgICAgYi5hcHBlbmQoZCk7Ci0gICAgICAgICAgICBwb3MrKzsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgYi5hcHBlbmQoJyUnKTsKLSAgICAgICAgICBwb3MgPSAtMTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBiLmFwcGVuZChtLnN1YnN0cmluZyhwb3MpKTsKLSAgICAgICAgcG9zID0gLTE7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBiLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0UmVzb3VyY2VCdW5kbGUoKQotICB7Ci0gICAgcmV0dXJuIGZSZXNvdXJjZUJ1bmRsZTsKLSAgfQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL01lc3NhZ2VQcm92aWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9NZXNzYWdlUHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTA1MmU0ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL01lc3NhZ2VQcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci0KLS8vIEEgQ2xhc3Mgd2hpY2ggcHJvdmlkZXMgU3RyaW5nIG1lc3NhZ2VzLgotcHVibGljIGNsYXNzIE1lc3NhZ2VQcm92aWRlcgotewotICBwcm90ZWN0ZWQgTWVzc2FnZUJ1bmRsZSBtZXNzYWdlQnVuZGxlXzsKLSAgcHJpdmF0ZSBTdHJpbmcgbWVzc2FnZVByb3ZpZGVyTmFtZV87Ci0KLSAgcHVibGljIE1lc3NhZ2VQcm92aWRlcihTdHJpbmcgbWVzc2FnZUJ1bmRsZUZpbGVOYW1lKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gTG9hZCB0aGUgbWVzc2FnZSBidW5kbGUgZnJvbSB0aGUgV0VCLUlORlxjbGFzc2VzIHN1YmRpcmVjdG9yeS4KLSAgICAgIG1lc3NhZ2VQcm92aWRlck5hbWVfID0gbWVzc2FnZUJ1bmRsZUZpbGVOYW1lOwotICAgICAgbWVzc2FnZUJ1bmRsZV8gPSBuZXcgTWVzc2FnZUJ1bmRsZShSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUobWVzc2FnZUJ1bmRsZUZpbGVOYW1lKSk7Ci0gICAgfQotICAgIGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgCVN5c3RlbS5lcnIucHJpbnRsbigiQ291bGQgbm90IGxvYWQgIittZXNzYWdlQnVuZGxlRmlsZU5hbWUpOwotICAgIAllLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TWVzc2FnZShTdHJpbmcgbWVzc2FnZUlkKQotICB7Ci0gICAgcmV0dXJuIG1lc3NhZ2VCdW5kbGVfLmdldE1lc3NhZ2UobWVzc2FnZUlkKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TWVzc2FnZShTdHJpbmcgbWVzc2FnZUlkLFN0cmluZyBzdWIpCi0gIHsKLSAgICByZXR1cm4gbWVzc2FnZUJ1bmRsZV8uZ2V0TWVzc2FnZShtZXNzYWdlSWQsc3ViKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TWVzc2FnZShTdHJpbmcgbWVzc2FnZUlkLFN0cmluZ1tdIHN1YikKLSAgewotICAgIHJldHVybiBtZXNzYWdlQnVuZGxlXy5nZXRNZXNzYWdlKG1lc3NhZ2VJZCxzdWIpOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2VQcm92aWRlck5hbWUoKQotICB7Ci0gICAgcmV0dXJuIG1lc3NhZ2VQcm92aWRlck5hbWVfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL01lc3NhZ2VRdWV1ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9NZXNzYWdlUXVldWUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzM4MDhlZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL01lc3NhZ2VRdWV1ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuSFRNTFV0aWxzOwotCi1wdWJsaWMgY2xhc3MgTWVzc2FnZVF1ZXVlCi17Ci0gIHByb3RlY3RlZCBWZWN0b3IgbWVzc2FnZUxpc3RfOwotCi0gIHB1YmxpYyBNZXNzYWdlUXVldWUoKQotICB7Ci0gICAgbWVzc2FnZUxpc3RfID0gbmV3IFZlY3RvcigpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgYWRkTWVzc2FnZShTdHJpbmcgbWVzc2FnZSkKLSAgewotICAgIG1lc3NhZ2VMaXN0Xy5hZGRFbGVtZW50KG1lc3NhZ2UpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRNZXNzYWdlc0Zyb21MaXN0KCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBtZXNzYWdlcyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQotICAgIGlmIChtZXNzYWdlTGlzdF8uc2l6ZSgpPT0wKQotICAgICAgcmV0dXJuICIiOwotCi0gICAgRW51bWVyYXRpb24gZSA9IG1lc3NhZ2VMaXN0Xy5lbGVtZW50cygpOwotICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIFN0cmluZyB0aGlzTWVzc2FnZSA9IChTdHJpbmcpZS5uZXh0RWxlbWVudCgpOwotICAgICAgbWVzc2FnZXMuYXBwZW5kKHRoaXNNZXNzYWdlKTsKLSAgICAgIG1lc3NhZ2VzLmFwcGVuZChIVE1MVXRpbHMuTElORV9TRVBBUkFUT1IpOwotICAgIH0KLSAgICBtZXNzYWdlTGlzdF8ucmVtb3ZlQWxsRWxlbWVudHMoKTsKLSAgICByZXR1cm4gbWVzc2FnZXMudG9TdHJpbmcoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9Ob2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL05vZGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk5ZTIxMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL05vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuRnJhbWVOYW1lczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkhUTUxVdGlsczsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIE5vZGUKLXsKLSAgcHJvdGVjdGVkIFRyZWVFbGVtZW50IGVsZW1lbnRfOwotICBwcm90ZWN0ZWQgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXJfOwotICBwcm90ZWN0ZWQgaW50IG5vZGVJZF87Ci0gIHByb3RlY3RlZCBpbnQgbm9kZURlcHRoXzsKLSAgcHJvdGVjdGVkIFN0cmluZyBpbWFnZVBhdGhfOwotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc09wZW5fOwotICBwcm90ZWN0ZWQgVmVjdG9yIGNoaWxkTm9kZXNfOwotICBwcm90ZWN0ZWQgVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXJfOwotICBwcm90ZWN0ZWQgTm9kZSBwYXJlbnRfOwotICBwcml2YXRlIFN0cmluZyBhbmNob3JOYW1lXzsKLSAgcHJpdmF0ZSBpbnQgdmlld0lkXzsKLQotICBwdWJsaWMgTm9kZShUcmVlRWxlbWVudCBlbGVtZW50LE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyLGludCBub2RlRGVwdGgsU3RyaW5nIGltYWdlUGF0aCkKLSAgewotICAgIGVsZW1lbnRfID0gZWxlbWVudDsKLSAgICBub2RlTWFuYWdlcl8gPSBub2RlTWFuYWdlcjsKLSAgICBub2RlSWRfID0gbm9kZU1hbmFnZXIuYWRkVG9Ob2RlVGFibGUodGhpcyk7Ci0gICAgbm9kZURlcHRoXyA9IG5vZGVEZXB0aDsKLSAgICBDb250cm9sbGVyIGNvbnRyb2xsZXIgPSBub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpOwotICAgIGlmIChpbWFnZVBhdGggPT0gbnVsbCkKLSAgICAgIGltYWdlUGF0aF8gPSBjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChOb2RlTWFuYWdlci5QQVRIX1NQQUNFKTsKLSAgICBlbHNlCi0gICAgICBpbWFnZVBhdGhfID0gaW1hZ2VQYXRoOwotICAgIGlzT3Blbl8gPSB0cnVlOwotICAgIGNoaWxkTm9kZXNfID0gbmV3IFZlY3RvcigpOwotICAgIHRvb2xNYW5hZ2VyXyA9IG5ldyBUb29sTWFuYWdlcih0aGlzKTsKLSAgICBpbml0VG9vbHMoKTsKLSAgICBhbmNob3JOYW1lXyA9IChuZXcgU3RyaW5nQnVmZmVyKCJhY3Rpb24iKSkuYXBwZW5kKG5vZGVJZF8pLnRvU3RyaW5nKCk7Ci0gICAgcGFyZW50XyA9IG51bGw7Ci0gICAgdmlld0lkXyA9IEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVDsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIFRyZWVFbGVtZW50IGFzc29jaWF0ZWQgd2l0aCB0aGlzIG5vZGUuCi0gICogQHJldHVybiBUcmVlRWxlbWVudCBUaGUgZWxlbWVudCBhc3NvY2lhdGVkIHdpdGggdGhpcyBub2RlLgotICAqLwotICBwdWJsaWMgVHJlZUVsZW1lbnQgZ2V0VHJlZUVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIGVsZW1lbnRfOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgbm9kZS4KLSAgKiBAcmV0dXJuIFN0cmluZwotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5vZGVOYW1lKCkKLSAgewotICAgIHJldHVybiBlbGVtZW50Xy5nZXROYW1lKCk7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBOb2RlTWFuYWdlciBtYW5hZ2luZyB0aGlzIG5vZGUuCi0gICogQHJldHVybiBOb2RlTWFuYWdlcgotICAqLwotICBwdWJsaWMgTm9kZU1hbmFnZXIgZ2V0Tm9kZU1hbmFnZXIoKQotICB7Ci0gICAgcmV0dXJuIG5vZGVNYW5hZ2VyXzsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIGlkIG9mIHRoaXMgbm9kZS4KLSAgKiBAcmV0dXJuIGludAotICAqLwotICBwdWJsaWMgaW50IGdldE5vZGVJZCgpCi0gIHsKLSAgICByZXR1cm4gbm9kZUlkXzsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIGRlcHRoIGluIHRoZSB0cmVlIG9mIHRoaXMgbm9kZSByZWxhdGl2ZSB0byB0aGUgcm9vdCBub2RlCi0gICogQHJldHVybiBpbnQKLSAgKi8KLSAgcHVibGljIGludCBnZXROb2RlRGVwdGgoKQotICB7Ci0gICAgcmV0dXJuIG5vZGVEZXB0aF87Ci0gIH0KLQotICAvKioKLSAgKiBTZXQgdGhlIHBhdGggb2YgdGhlIGltYWdlIHJlcHJlc2VudGluZyB0aGlzIGNsYXNzIG9mIE5vZGUuCi0gICogQHBhcmFtIFN0cmluZyBUaGUgcGF0aC4KLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0SW1hZ2VQYXRoKFN0cmluZyBwYXRoKQotICB7Ci0gICAgaW1hZ2VQYXRoXyA9IHBhdGg7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGNoaWxkcmVuIG9mIHRoaXMgbm9kZSBhcmUgdmlzaWJsZS4gUmV0dXJucyBmYWxzZQotICAqIGlmIHRoZXkgYXJlIG5vdC4KLSAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNPcGVuKCkKLSAgewotICAgIHJldHVybiBpc09wZW5fOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNWaXNpYmxlKCkKLSAgewotICAgIE5vZGUgcGFyZW50Tm9kZSA9IHBhcmVudF87Ci0gICAgd2hpbGUgKHBhcmVudE5vZGUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoIXBhcmVudE5vZGUuaXNPcGVuKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIHBhcmVudE5vZGUgPSBwYXJlbnROb2RlLmdldFBhcmVudCgpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAqIFNldHMgdGhlIHZpc2liaWxpdHkgb2YgdGhpcyBub2RlJ3MgY2hpbGRyZW4gdG8gdGhlIHNwZWNpZmllZCB2YWx1ZS4KLSAgKiBVcGRhdGVzIHRoZSBOb2RlTWFuYWdlcidzIHJlY29yZCBvZiB0aGUgbWF4aW11bSBkZXB0aCB2aXNpYmxlIGluIHRoZSB0cmVlLgotICAqIEBwYXJhbSBib29sZWFuCi0gICovCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldFZpc2liaWxpdHlPZkNoaWxkcmVuKGJvb2xlYW4gb3BlbikKLSAgewotICAgIGlzT3Blbl8gPSBvcGVuOwotICAgIG5vZGVNYW5hZ2VyXy51cGRhdGVNYXhEZXB0aFZpc2libGUoKTsKLSAgfQotCi0gIC8qKgotICAqIEdldHMgdGhlIG1heGltdW0gZGVwdGggZGlzcGxheWVkIGluIHRoaXMgbm9kZSdzIGJyYW5jaCBvZiB0aGUgdHJlZQotICAqIFVzZWQgYnkgTm9kZU1hbmFnZXIgZm9yIGh0bWwgZGlzcGxheSBwdXJwb3Nlcy4KLSAgKiBAcmV0dXJuIGludAotICAqLwotICBwdWJsaWMgaW50IGdldE1heERlcHRoVmlzaWJsZSgpCi0gIHsKLSAgICBpZiAoIWlzT3Blbl8pCi0gICAgICByZXR1cm4gbm9kZURlcHRoXzsKLSAgICBlbHNlCi0gICAgewotICAgICAgaW50IGN1cnJlbnREZXB0aCA9IG5vZGVEZXB0aF87Ci0gICAgICBFbnVtZXJhdGlvbiBlID0gY2hpbGROb2Rlc18uZWxlbWVudHMoKTsKLSAgICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKQotICAgICAgewotICAgICAgICBOb2RlIHRoaXNOb2RlID0gKE5vZGUpZS5uZXh0RWxlbWVudCgpOwotICAgICAgICBpbnQgZGVwdGggPSB0aGlzTm9kZS5nZXRNYXhEZXB0aFZpc2libGUoKTsKLSAgICAgICAgaWYgKGRlcHRoPmN1cnJlbnREZXB0aCkKLSAgICAgICAgICBjdXJyZW50RGVwdGg9ZGVwdGg7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gY3VycmVudERlcHRoOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldFBhcmVudChOb2RlIG5vZGUpCi0gIHsKLSAgICBwYXJlbnRfID0gbm9kZTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBOb2RlIGdldFBhcmVudCgpCi0gIHsKLSAgICByZXR1cm4gcGFyZW50XzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldFZpZXdJZChpbnQgdmlld0lkKQotICB7Ci0gICAgdmlld0lkXyA9IHZpZXdJZDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBpbnQgZ2V0Vmlld0lkKCkKLSAgewotICAgIHJldHVybiB2aWV3SWRfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGludCBnZXRWaWV3VG9vbElkKCkKLSAgewotICAgIFRvb2xNYW5hZ2VyIHZpZXdUb29sTWFuYWdlciA9IGdldFZpZXdUb29sTWFuYWdlcigpOwotICAgIGlmICh2aWV3VG9vbE1hbmFnZXIgIT0gbnVsbCkKLSAgICAgIHJldHVybiB2aWV3VG9vbE1hbmFnZXIuZ2V0U2VsZWN0ZWRUb29sSWQoKTsKLSAgICByZXR1cm4gQWN0aW9uSW5wdXRzLlZJRVdUT09MSURfREVGQVVMVDsKLSAgfQotCi0gIC8qKgotICAqIEFkZHMgdGhlIHNwZWNpZmllZCBub2RlIGFzIGEgY2hpbGQgb2YgdGhpcyBub2RlLgotICAqIEBwYXJhbSBOb2RlIFRoZSBjaGlsZCBiZWluZyBhZGRlZC4KLSAgKiBAcmV0dXJuIGJvb2xlYW4gQWx3YXlzIHRydWUuCi0gICovCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIGFkZENoaWxkKE5vZGUgY2hpbGROb2RlKQotICB7Ci0gICAgY2hpbGROb2RlLnNldFBhcmVudCh0aGlzKTsKLSAgICBjaGlsZE5vZGVzXy5hZGRFbGVtZW50KGNoaWxkTm9kZSk7Ci0gICAgbm9kZU1hbmFnZXJfLnVwZGF0ZU1heERlcHRoVmlzaWJsZSgpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgY2hpbGQgbm9kZXMgb2YgdGhpcyBub2RlLiBJZiB0aGlzIG5vZGUgaGFzIG5vIGNoaWxkcmVuLCBhbgotICAqIGVtcHR5IHZlY3RvciBpcyByZXR1cm5lZC4KLSAgKiBAcmV0dXJuIFZlY3RvcgotICAqLwotICBwdWJsaWMgVmVjdG9yIGdldENoaWxkTm9kZXMoKQotICB7Ci0gICAgcmV0dXJuIGNoaWxkTm9kZXNfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIE5vZGUgZ2V0Q2hpbGROb2RlKFRyZWVFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBFbnVtZXJhdGlvbiBlID0gY2hpbGROb2Rlc18uZWxlbWVudHMoKTsKLSAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICB7Ci0gICAgICBOb2RlIHByZXNlbnROb2RlID0gKE5vZGUpZS5uZXh0RWxlbWVudCgpOwotICAgICAgaWYgKHByZXNlbnROb2RlLmdldFRyZWVFbGVtZW50KCkgPT0gZWxlbWVudCkKLSAgICAgICAgcmV0dXJuIHByZXNlbnROb2RlOwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHJlbW92ZUNoaWxkTm9kZXMoYm9vbGVhbiBpc0VudHJ5KQotICB7Ci0gICAgaW50IG51bWJlck9mQ2hpbGROb2RlcyA9IGNoaWxkTm9kZXNfLnNpemUoKTsKLSAgICBmb3IgKGludCBpPW51bWJlck9mQ2hpbGROb2Rlcy0xO2k+PTA7aS0tKQotICAgIHsKLSAgICAgIE5vZGUgY2hpbGROb2RlID0gKE5vZGUpY2hpbGROb2Rlc18uZWxlbWVudEF0KGkpOwotICAgICAgY2hpbGROb2RlLnJlbW92ZUNoaWxkTm9kZXMoZmFsc2UpOwotICAgICAgbm9kZU1hbmFnZXJfLnJlbW92ZUZyb21Ob2RlVGFibGUoY2hpbGROb2RlLmdldE5vZGVJZCgpKTsKLSAgICB9Ci0gICAgaWYgKG51bWJlck9mQ2hpbGROb2RlcyA+IDApCi0gICAgewotICAgICAgY2hpbGROb2Rlc18ucmVtb3ZlQWxsRWxlbWVudHMoKTsKLSAgICAgIGlmIChpc0VudHJ5KQotICAgICAgICBub2RlTWFuYWdlcl8udXBkYXRlTWF4RGVwdGhWaXNpYmxlKCk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcmVtb3ZlQ2hpbGROb2RlKFRyZWVFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBOb2RlIGNoaWxkTm9kZSA9IGdldENoaWxkTm9kZShlbGVtZW50KTsKLSAgICBpZiAoY2hpbGROb2RlICE9IG51bGwpCi0gICAgewotICAgICAgaW50IGNoaWxkTm9kZUlkID0gY2hpbGROb2RlLmdldE5vZGVJZCgpOwotICAgICAgaWYgKG5vZGVNYW5hZ2VyXy5nZXRTZWxlY3RlZE5vZGVJZCgpID09IGNoaWxkTm9kZUlkKQotICAgICAgICBub2RlTWFuYWdlcl8uc2V0U2VsZWN0ZWROb2RlSWQobm9kZUlkXyk7Ci0gICAgICBjaGlsZE5vZGVzXy5yZW1vdmVFbGVtZW50KGNoaWxkTm9kZSk7Ci0gICAgICBub2RlTWFuYWdlcl8ucmVtb3ZlRnJvbU5vZGVUYWJsZShjaGlsZE5vZGVJZCk7Ci0gICAgICBub2RlTWFuYWdlcl8udXBkYXRlTWF4RGVwdGhWaXNpYmxlKCk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICogR2V0IHRoZSBuYW1lIG9mIHRoZSBIVE1MIGFuY2hvciBhc3NvY2lhdGVkIHdpdGggdGhpcyBub2RlLgotICAqIEByZXR1cm4gU3RyaW5nIFRoZSBuYW1lIG9mIHRoZSBhbmNob3IuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0QW5jaG9yTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gYW5jaG9yTmFtZV87Ci0gIH0KLQotICBwdWJsaWMgVG9vbE1hbmFnZXIgZ2V0VG9vbE1hbmFnZXIoKQotICB7Ci0gICAgcmV0dXJuIHRvb2xNYW5hZ2VyXzsKLSAgfQotCi0gIHB1YmxpYyBUb29sTWFuYWdlciBnZXRWaWV3VG9vbE1hbmFnZXIoKQotICB7Ci0gICAgaWYgKHZpZXdJZF8gIT0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUKQotICAgIHsKLSAgICAgIFZpZXdUb29sIHZpZXdUb29sID0gKFZpZXdUb29sKXRvb2xNYW5hZ2VyXy5nZXRTZWxlY3RlZFRvb2woKTsKLSAgICAgIHJldHVybiB2aWV3VG9vbC5nZXRUb29sTWFuYWdlcih2aWV3SWRfKTsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHB1YmxpYyBUb29sTWFuYWdlciBnZXRDdXJyZW50VG9vbE1hbmFnZXIoKQotICB7Ci0gICAgVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIgPSBnZXRWaWV3VG9vbE1hbmFnZXIoKTsKLSAgICBpZiAodG9vbE1hbmFnZXIgPT0gbnVsbCkKLSAgICAgIHRvb2xNYW5hZ2VyID0gdG9vbE1hbmFnZXJfOwotICAgIHJldHVybiB0b29sTWFuYWdlcjsKLSAgfQotCi0gIHByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIGluaXRUb29scygpOwotCi0gIHByb3RlY3RlZCBhYnN0cmFjdCBTdHJpbmcgZ2V0VG9nZ2xlTm9kZUFjdGlvbkhyZWYoKTsKLQotICBwcm90ZWN0ZWQgU3RyaW5nIGdldFRvZ2dsZU5vZGVBY3Rpb25UYXJnZXQoKQotICB7Ci0gICAgcmV0dXJuIEZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUE7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBhZGRUb2dnbGUoSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSxTdHJpbmdCdWZmZXIgdHJlZVZpZXcsYm9vbGVhbiBpc0xhc3RDaGlsZCkKLSAgewotICAgIGlmIChub2RlRGVwdGhfICE9IDEpCi0gICAgewotICAgICAgdHJlZVZpZXcuYXBwZW5kKCIgICAgPHRkIGFsaWduPVwibGVmdFwiIHdpZHRoPTE2IGhlaWdodD0xNiBub3dyYXA+Iik7Ci0gICAgICBTdHJpbmcgdG9nZ2xlSW1hZ2VUYWc7Ci0gICAgICBpZiAoY2hpbGROb2Rlc18uc2l6ZSgpID4gMCkKLSAgICAgIHsKLSAgICAgICAgLy8gPGEgaHJlZj0iLi4uIiB0YXJnZXQ9Ii4uLiI+dG9nZ2xlSW1hZ2VUYWc8L2E+Ci0gICAgICAgIFN0cmluZyBocmVmID0gbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKS5nZXRQYXRoV2l0aENvbnRleHQoZ2V0VG9nZ2xlTm9kZUFjdGlvbkhyZWYoKSk7Ci0gICAgICAgIGlmIChpc09wZW5fKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIHRvZ2dsZUFsdCA9IG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCkuZ2V0TWVzc2FnZSgiQUxUX0NMT1NFIik7Ci0gICAgICAgICAgaWYgKGlzTGFzdENoaWxkKQotICAgICAgICAgICAgdG9nZ2xlSW1hZ2VUYWcgPSBIVE1MVXRpbHMuZ2V0SFRNTEltYWdlVGFnKHJlc3BvbnNlLG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCkuZ2V0UGF0aFdpdGhDb250ZXh0KE5vZGVNYW5hZ2VyLlBBVEhfTUlOVVNfTEFTVCksdG9nZ2xlQWx0LCIxNiIsIjE2IixudWxsKTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB0b2dnbGVJbWFnZVRhZyA9IEhUTUxVdGlscy5nZXRIVE1MSW1hZ2VUYWcocmVzcG9uc2Usbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKS5nZXRQYXRoV2l0aENvbnRleHQoTm9kZU1hbmFnZXIuUEFUSF9NSU5VU19OT1RMQVNUKSx0b2dnbGVBbHQsIjE2IiwiMTYiLG51bGwpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyB0b2dnbGVBbHQgPSBub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpLmdldE1lc3NhZ2UoIkFMVF9PUEVOIik7Ci0gICAgICAgICAgaWYgKGlzTGFzdENoaWxkKQotICAgICAgICAgICAgdG9nZ2xlSW1hZ2VUYWcgPSBIVE1MVXRpbHMuZ2V0SFRNTEltYWdlVGFnKHJlc3BvbnNlLG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCkuZ2V0UGF0aFdpdGhDb250ZXh0KE5vZGVNYW5hZ2VyLlBBVEhfUExVU19MQVNUKSx0b2dnbGVBbHQsIjE2IiwiMTYiLG51bGwpOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRvZ2dsZUltYWdlVGFnID0gSFRNTFV0aWxzLmdldEhUTUxJbWFnZVRhZyhyZXNwb25zZSxub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpLmdldFBhdGhXaXRoQ29udGV4dChOb2RlTWFuYWdlci5QQVRIX1BMVVNfTk9UTEFTVCksdG9nZ2xlQWx0LCIxNiIsIjE2IixudWxsKTsKLSAgICAgICAgfQotICAgICAgICBTdHJpbmcgbGlua1RhZyA9IEhUTUxVdGlscy5nZXRIVE1MTGlua1RhZyhyZXNwb25zZSxocmVmLGdldFRvZ2dsZU5vZGVBY3Rpb25UYXJnZXQoKSxTdHJpbmcudmFsdWVPZihub2RlSWRfKSx0b2dnbGVJbWFnZVRhZyxudWxsKTsKLSAgICAgICAgdHJlZVZpZXcuYXBwZW5kKGxpbmtUYWcpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyA8aW1nLi4uPgotICAgICAgICBpZiAoaXNMYXN0Q2hpbGQpCi0gICAgICAgICAgdG9nZ2xlSW1hZ2VUYWcgPSBIVE1MVXRpbHMuZ2V0SFRNTEltYWdlVGFnKHJlc3BvbnNlLG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCkuZ2V0UGF0aFdpdGhDb250ZXh0KE5vZGVNYW5hZ2VyLlBBVEhfTElORV9MQVNUKSwiIiwiMTYiLCIxNiIsbnVsbCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICB0b2dnbGVJbWFnZVRhZyA9IEhUTUxVdGlscy5nZXRIVE1MSW1hZ2VUYWcocmVzcG9uc2Usbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKS5nZXRQYXRoV2l0aENvbnRleHQoTm9kZU1hbmFnZXIuUEFUSF9MSU5FX05PVExBU1QpLCIiLCIxNiIsIjE2IixudWxsKTsKLSAgICAgICAgdHJlZVZpZXcuYXBwZW5kKHRvZ2dsZUltYWdlVGFnKTsKLSAgICAgIH0KLSAgICAgIHRyZWVWaWV3LmFwcGVuZCgiPC90ZD4iKS5hcHBlbmQoSFRNTFV0aWxzLkxJTkVfU0VQQVJBVE9SKTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgYWJzdHJhY3QgU3RyaW5nIGdldExpbmtBY3Rpb25IcmVmKCk7Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRMaW5rQWN0aW9uVGFyZ2V0KCkKLSAgewotICAgIHJldHVybiBGcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRPcGVuSW1hZ2VQYXRoKCkKLSAgewotICAgIHJldHVybiBpbWFnZVBhdGhfOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRDbG9zZWRJbWFnZVBhdGgoKQotICB7Ci0gICAgcmV0dXJuIGltYWdlUGF0aF87Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBhZGRIVE1MTGFiZWwoSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSxTdHJpbmdCdWZmZXIgdHJlZVZpZXcsYm9vbGVhbiBpc0xhc3RDaGlsZCkKLSAgewotICAgIC8vIDxhIGhyZWY9Ii4uLiIgdGFyZ2V0PSIuLi4iIG9uQ2xpY2s9InNlbGVjdE5vZGUoJy4uLicpIj48aW1nLi4uPjwvYT4KLSAgICBIYXNodGFibGUgYWRkaXRpb25hbEF0dHJpYnV0ZXMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgYWRkaXRpb25hbEF0dHJpYnV0ZXMucHV0KCJuYW1lIixhbmNob3JOYW1lXyk7Ci0gICAgU3RyaW5nIGltYWdlUGF0aCA9IChub2RlTWFuYWdlcl8uZ2V0U2VsZWN0ZWROb2RlSWQoKSA9PSBub2RlSWRfKT9nZXRPcGVuSW1hZ2VQYXRoKCk6Z2V0Q2xvc2VkSW1hZ2VQYXRoKCk7Ci0KLSAgICBTdHJpbmcgaW1hZ2VUYWcgPSBIVE1MVXRpbHMuZ2V0SFRNTEltYWdlVGFnKHJlc3BvbnNlLG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCkuZ2V0UGF0aFdpdGhDb250ZXh0KGltYWdlUGF0aCksIiIsIjE2IiwiMTYiLGFkZGl0aW9uYWxBdHRyaWJ1dGVzKTsKLSAgICBTdHJpbmcgYmFzZUhyZWYgPSBnZXRMaW5rQWN0aW9uSHJlZigpOwotICAgIFN0cmluZyBocmVmID0gKChiYXNlSHJlZiA9PSBudWxsKT9iYXNlSHJlZjpub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpLmdldFBhdGhXaXRoQ29udGV4dChiYXNlSHJlZikpOwotICAgIFN0cmluZyB0YXJnZXQgPSBnZXRMaW5rQWN0aW9uVGFyZ2V0KCk7Ci0gICAgYWRkaXRpb25hbEF0dHJpYnV0ZXMuY2xlYXIoKTsKLQotICAgIHRyZWVWaWV3LmFwcGVuZCgiICAgIDx0ZCBhbGlnbj1cImxlZnRcIiB3aWR0aD0xNiBoZWlnaHQ9MTYgbm93cmFwPiIpOwotICAgIGlmIChocmVmICE9IG51bGwpCi0gICAgICB0cmVlVmlldy5hcHBlbmQoSFRNTFV0aWxzLmdldEhUTUxMaW5rVGFnKHJlc3BvbnNlLGhyZWYsdGFyZ2V0LG51bGwsaW1hZ2VUYWcsYWRkaXRpb25hbEF0dHJpYnV0ZXMpKTsKLSAgICBlbHNlCi0gICAgICB0cmVlVmlldy5hcHBlbmQoaW1hZ2VUYWcpOwotICAgIHRyZWVWaWV3LmFwcGVuZCgiPC90ZD4iKS5hcHBlbmQoSFRNTFV0aWxzLkxJTkVfU0VQQVJBVE9SKTsKLSAgICB0cmVlVmlldy5hcHBlbmQoIiAgICA8dGQgYWxpZ249XCJsZWZ0XCIgd2lkdGg9MyBoZWlnaHQ9MTAgbm93cmFwPiIpLmFwcGVuZChIVE1MVXRpbHMuZ2V0SFRNTEltYWdlVGFnKHJlc3BvbnNlLG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCkuZ2V0UGF0aFdpdGhDb250ZXh0KE5vZGVNYW5hZ2VyLlBBVEhfU1BBQ0UpLCIiLCIzIiwiMTAiLG51bGwpKS5hcHBlbmQoIjwvdGQ+IikuYXBwZW5kKEhUTUxVdGlscy5MSU5FX1NFUEFSQVRPUik7Ci0KLSAgICAvLyA8YSBuYW1lPSIuLi4iIGhyZWY9Ii4uLiIgdGFyZ2V0PSIuLi4iPmxhYmVsPC9hPgotICAgIHRyZWVWaWV3LmFwcGVuZCgiICAgIDx0ZCBhbGlnbj1cImxlZnRcIiBub3dyYXA+IikuYXBwZW5kKEhUTUxVdGlscy5MSU5FX1NFUEFSQVRPUik7Ci0gICAgdHJlZVZpZXcuYXBwZW5kKCIgICAgICAiKTsKLSAgICBpZiAoaHJlZiAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyB0ZXh0QW5jaG9yQ2xhc3M7Ci0gICAgICBpZiAobm9kZU1hbmFnZXJfLmdldFNlbGVjdGVkTm9kZUlkKCkgPT0gbm9kZUlkXykKLSAgICAgICAgdGV4dEFuY2hvckNsYXNzPSJzZWxlY3RlZFRleHRBbmNob3IiOwotICAgICAgZWxzZQotICAgICAgICB0ZXh0QW5jaG9yQ2xhc3M9InVuc2VsZWN0ZWRUZXh0QW5jaG9yIjsKLSAgICAgIGFkZGl0aW9uYWxBdHRyaWJ1dGVzLnB1dCgiY2xhc3MiLHRleHRBbmNob3JDbGFzcyk7Ci0gICAgICB0cmVlVmlldy5hcHBlbmQoSFRNTFV0aWxzLmdldEhUTUxMaW5rVGFnKHJlc3BvbnNlLGhyZWYsdGFyZ2V0LGFuY2hvck5hbWVfLGdldE5vZGVOYW1lKCksYWRkaXRpb25hbEF0dHJpYnV0ZXMpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgdHJlZVZpZXcuYXBwZW5kKCI8c3Ryb25nPiIpLmFwcGVuZChnZXROb2RlTmFtZSgpKS5hcHBlbmQoIjwvc3Ryb25nPiIpOwotICAgIHRyZWVWaWV3LmFwcGVuZChIVE1MVXRpbHMuTElORV9TRVBBUkFUT1IpLmFwcGVuZCgiICAgIDwvdGQ+IikuYXBwZW5kKEhUTUxVdGlscy5MSU5FX1NFUEFSQVRPUik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZW5kZXJOb2RlKEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UsU3RyaW5nQnVmZmVyIHRyZWVWaWV3LFN0cmluZyBwcmVmaXhDb2x1bW5zLGJvb2xlYW4gaXNMYXN0Q2hpbGQpCi0gIHsKLSAgICBTdHJpbmcgc3BhY2VfMTZ4MTYgPSBIVE1MVXRpbHMuZ2V0SFRNTEltYWdlVGFnKHJlc3BvbnNlLG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCkuZ2V0UGF0aFdpdGhDb250ZXh0KE5vZGVNYW5hZ2VyLlBBVEhfU1BBQ0UpLCIiLCIxNiIsIjE2IixudWxsKTsKLSAgICBTdHJpbmcgbGluZV8xNngxNiA9IEhUTUxVdGlscy5nZXRIVE1MSW1hZ2VUYWcocmVzcG9uc2Usbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKS5nZXRQYXRoV2l0aENvbnRleHQoTm9kZU1hbmFnZXIuUEFUSF9MSU5FKSwiIiwiMTYiLCIxNiIsbnVsbCk7Ci0KLSAgICAvLyBVc2UgYm9yZGVyPTEgdG8gaGVscCB3aXRoIGRlYnVnZ2luZy4KLSAgICB0cmVlVmlldy5hcHBlbmQoIjx0YWJsZSBjZWxsc3BhY2luZz0wIGNlbGxwYWRkaW5nPTAgYm9yZGVyPTA+IikuYXBwZW5kKEhUTUxVdGlscy5MSU5FX1NFUEFSQVRPUik7Ci0gICAgdHJlZVZpZXcuYXBwZW5kKCIgIDx0cj4iKS5hcHBlbmQoSFRNTFV0aWxzLkxJTkVfU0VQQVJBVE9SKTsKLSAgICB0cmVlVmlldy5hcHBlbmQoIiAgICA8dGQgYWxpZ249XCJsZWZ0XCIgd2lkdGg9MTYgaGVpZ2h0PTE2IG5vd3JhcD4iKS5hcHBlbmQoc3BhY2VfMTZ4MTYpLmFwcGVuZCgiPC90ZD4iKS5hcHBlbmQoSFRNTFV0aWxzLkxJTkVfU0VQQVJBVE9SKTsKLSAgICBTdHJpbmdCdWZmZXIgbmV3UHJlZml4Q29sdW1ucyA9IG5ldyBTdHJpbmdCdWZmZXIocHJlZml4Q29sdW1ucyk7Ci0gICAgaWYgKG5vZGVEZXB0aF8gPj0gMikKLSAgICB7Ci0gICAgICBpZiAocHJlZml4Q29sdW1ucy5sZW5ndGgoKSA+IDApCi0gICAgICAgIHRyZWVWaWV3LmFwcGVuZChwcmVmaXhDb2x1bW5zKS5hcHBlbmQoSFRNTFV0aWxzLkxJTkVfU0VQQVJBVE9SKTsKLSAgICAgIC8vIGdlbmVyYXRlIGEgbmV3IHByZWZpeCBjb2x1bW5zLgotICAgICAgbmV3UHJlZml4Q29sdW1ucy5hcHBlbmQoIiAgICA8dGQgYWxpZ249XCJsZWZ0XCIgd2lkdGg9MTYgaGVpZ2h0PTE2IG5vd3JhcD4iKTsKLSAgICAgIGlmIChpc0xhc3RDaGlsZCkKLSAgICAgICAgbmV3UHJlZml4Q29sdW1ucy5hcHBlbmQoc3BhY2VfMTZ4MTYpOwotICAgICAgZWxzZQotICAgICAgICBuZXdQcmVmaXhDb2x1bW5zLmFwcGVuZChsaW5lXzE2eDE2KTsKLSAgICAgIG5ld1ByZWZpeENvbHVtbnMuYXBwZW5kKCI8L3RkPiIpLmFwcGVuZChIVE1MVXRpbHMuTElORV9TRVBBUkFUT1IpOwotICAgIH0KLSAgICBhZGRUb2dnbGUocmVzcG9uc2UsdHJlZVZpZXcsaXNMYXN0Q2hpbGQpOwotICAgIGFkZEhUTUxMYWJlbChyZXNwb25zZSx0cmVlVmlldyxpc0xhc3RDaGlsZCk7Ci0gICAgdHJlZVZpZXcuYXBwZW5kKCIgIDwvdHI+IikuYXBwZW5kKEhUTUxVdGlscy5MSU5FX1NFUEFSQVRPUik7Ci0gICAgdHJlZVZpZXcuYXBwZW5kKCI8L3RhYmxlPiIpLmFwcGVuZChIVE1MVXRpbHMuTElORV9TRVBBUkFUT1IpOwotICAgIGludCBudW1iZXJPZkNoaWxkTm9kZXMgPSBjaGlsZE5vZGVzXy5zaXplKCk7Ci0gICAgaWYgKG51bWJlck9mQ2hpbGROb2RlcyA+IDApCi0gICAgewotICAgICAgaWYgKGlzT3Blbl8pCi0gICAgICB7Ci0gICAgICAgIGZvciAoaW50IGk9MDtpPG51bWJlck9mQ2hpbGROb2Rlcy0xO2krKykKLSAgICAgICAgewotICAgICAgICAgIE5vZGUgY2hpbGROb2RlID0gKE5vZGUpY2hpbGROb2Rlc18uZWxlbWVudEF0KGkpOwotICAgICAgICAgIGNoaWxkTm9kZS5yZW5kZXJOb2RlKHJlc3BvbnNlLHRyZWVWaWV3LG5ld1ByZWZpeENvbHVtbnMudG9TdHJpbmcoKSxmYWxzZSk7Ci0gICAgICAgIH0KLSAgICAgICAgTm9kZSBsYXN0Q2hpbGROb2RlID0gKE5vZGUpY2hpbGROb2Rlc18uZWxlbWVudEF0KG51bWJlck9mQ2hpbGROb2Rlcy0xKTsKLSAgICAgICAgbGFzdENoaWxkTm9kZS5yZW5kZXJOb2RlKHJlc3BvbnNlLHRyZWVWaWV3LG5ld1ByZWZpeENvbHVtbnMudG9TdHJpbmcoKSx0cnVlKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvLyBGb3Igc29ydGluZyBwdXJwb3Nlcy4gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIHJldHVybiBnZXROb2RlTmFtZSgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL05vZGVNYW5hZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL05vZGVNYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxZDQ4YzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9Ob2RlTWFuYWdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjUzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2U7Ci0KLXB1YmxpYyBjbGFzcyBOb2RlTWFuYWdlcgotewotICAvLyBwYXRocyB0byBpY29uIGltYWdlcwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVRIX1BMVVNfTk9UTEFTVCA9ICJpbWFnZXMvcGx1c19ub3RsYXN0LmdpZiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBVEhfUExVU19MQVNUID0gImltYWdlcy9wbHVzX2xhc3QuZ2lmIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFUSF9NSU5VU19OT1RMQVNUID0gImltYWdlcy9taW51c19ub3RsYXN0LmdpZiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBVEhfTUlOVVNfTEFTVCA9ICJpbWFnZXMvbWludXNfbGFzdC5naWYiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVRIX0xJTkUgPSAiaW1hZ2VzL2xpbmUuZ2lmIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFUSF9MSU5FX05PVExBU1QgPSAiaW1hZ2VzL2xpbmVfbm90bGFzdC5naWYiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVRIX0xJTkVfTEFTVCA9ICJpbWFnZXMvbGluZV9sYXN0LmdpZiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBVEhfU1BBQ0UgPSAiaW1hZ2VzL3NwYWNlLmdpZiI7Ci0KLSAgcHJpdmF0ZSBDb250cm9sbGVyIGNvbnRyb2xsZXJfOwotICBwcml2YXRlIE5vZGUgcm9vdE5vZGVfOwotICBwcml2YXRlIEhhc2h0YWJsZSBub2RlVGFibGVfOwotICBwcml2YXRlIGludCBmb2N1c2VkTm9kZUlkXzsKLSAgcHJpdmF0ZSBpbnQgc2VsZWN0ZWROb2RlSWRfOwotICBwcml2YXRlIGludCBwcmV2aW91c1NlbGVjdGVkTm9kZUlkXzsKLSAgcHJpdmF0ZSBpbnQgbWF4RGVwdGhWaXNpYmxlXzsKLSAgcHJpdmF0ZSBpbnQgbmV4dElkXzsKLQotICBwdWJsaWMgTm9kZU1hbmFnZXIoQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgY29udHJvbGxlcl8gPSBjb250cm9sbGVyOwotICAgIHJvb3ROb2RlXyA9IG51bGw7Ci0gICAgbm9kZVRhYmxlXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBmb2N1c2VkTm9kZUlkXyA9IC0xOwotICAgIHNlbGVjdGVkTm9kZUlkXyA9IC0xOwotICAgIHByZXZpb3VzU2VsZWN0ZWROb2RlSWRfID0gLTE7Ci0gICAgbWF4RGVwdGhWaXNpYmxlXyA9IDE7Ci0gICAgbmV4dElkXyA9IDA7Ci0gIH0KLQotICAvKioKLSAgKiBIb29rIGZvciB0aGUgY29udHJvbGxlci4KLSAgKiBAcmV0dXJuIENvbnRyb2xsZXIgVGhlIHBlcnNwZWN0aXZlIGNvbnRyb2xsZXIuCi0gICovCi0gIHB1YmxpYyBDb250cm9sbGVyIGdldENvbnRyb2xsZXIoKQotICB7Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXJfOwotICB9Ci0KLSAgLyoqCi0gICogU2V0cyB0aGUgcm9vdCBub2RlIG9mIHRoZSB0cmVlLgotICAqIEBwYXJhbSByb290Tm9kZSBUaGUgbm9kZSBiZWluZyBkZXNpZ25hdGVkIGFzIHRoZSByb290IG5vZGUuCi0gICovCi0gIHB1YmxpYyB2b2lkIHNldFJvb3ROb2RlKE5vZGUgcm9vdE5vZGUpCi0gIHsKLSAgICByb290Tm9kZV8gPSByb290Tm9kZTsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIHJvb3Qgbm9kZSBvZiB0aGUgdHJlZSBtYW5hZ2VkIGJ5IHRoaXMgTm9kZU1hbmFnZXIuCi0gICogQHJldHVybiBOb2RlIFRoZSByb290IG5vZGUuCi0gICovCi0gIHB1YmxpYyBOb2RlIGdldFJvb3ROb2RlKCkKLSAgewotICAgIHJldHVybiByb290Tm9kZV87Ci0gIH0KLQotICAvKioKLSAgKiBAcGFyYW0gSW50ZWdlciBUaGUgaWQgb2YgdGhlIG5vZGUgYmVpbmcgYWRkZWQuCi0gICogQHBhcmFtIE5vZGUgVGhlIG5vZGUgYmVpbmcgYWRkZWQuCi0gICogQHJldHVybiBUaGUgbm9kZUlkIGFzc2lnbmVkIHRvIHRoaXMgbm9kZS4KLSAgKi8KLSAgcHVibGljIGludCBhZGRUb05vZGVUYWJsZShOb2RlIG5vZGUpCi0gIHsKLSAgICBpbnQgYXNzaWduZWROb2RlSWQgPSBuZXh0SWRfOwotICAgIG5vZGVUYWJsZV8ucHV0KFN0cmluZy52YWx1ZU9mKGFzc2lnbmVkTm9kZUlkKSxub2RlKTsKLSAgICBuZXh0SWRfKys7Ci0gICAgcmV0dXJuIGFzc2lnbmVkTm9kZUlkOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVtb3ZlRnJvbU5vZGVUYWJsZShpbnQgbm9kZUlkKQotICB7Ci0gICAgVmVjdG9yIG5vZGVzVG9SZW1vdmUgPSBuZXcgVmVjdG9yKCk7Ci0gICAgTm9kZSBub2RlID0gZ2V0Tm9kZShub2RlSWQpOwotICAgIGdhdGhlck5vZGVzVG9SZW1vdmUobm9kZXNUb1JlbW92ZSwgbm9kZSk7Ci0gICAgZm9yIChJdGVyYXRvciBpdCA9IG5vZGVzVG9SZW1vdmUuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykgewotICAgICAgbm9kZVRhYmxlXy5yZW1vdmUoU3RyaW5nLnZhbHVlT2YoKChOb2RlKWl0Lm5leHQoKSkuZ2V0Tm9kZUlkKCkpKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgZ2F0aGVyTm9kZXNUb1JlbW92ZShWZWN0b3Igbm9kZXNUb1JlbW92ZSwgTm9kZSBub2RlKSB7Ci0gICAgaWYgKG5vZGUgIT0gbnVsbCkgewotICAgICAgbm9kZXNUb1JlbW92ZS5hZGQobm9kZSk7Ci0gICAgICBWZWN0b3IgY2hpbGROb2RlcyA9IG5vZGUuZ2V0Q2hpbGROb2RlcygpOwotICAgICAgZm9yIChJdGVyYXRvciBpdCA9IGNoaWxkTm9kZXMuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykgewotICAgICAgICBnYXRoZXJOb2Rlc1RvUmVtb3ZlKG5vZGVzVG9SZW1vdmUsIChOb2RlKWl0Lm5leHQoKSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgZGVwdGggb2YgdGhlIGRlZXBlc3QgdmlzaWJsZSBub2RlIGluIHRoZSB0cmVlLgotICAqIEByZXR1cm4gaW50Ci0gICovCi0gIHB1YmxpYyBpbnQgZ2V0TWF4RGVwdGhWaXNpYmxlKCkKLSAgewotICAgIHJldHVybiBtYXhEZXB0aFZpc2libGVfOwotICB9Ci0KLSAgLyoqCi0gICogVXBkYXRlcyB0aGUgZGVwdGggb2YgdGhlIGRlZXBlc3QgdmlzaWJsZSBub2RlIGluIHRoZSB0cmVlLiBOb2RlcwotICAqIG11c3QgY2FsbCB0aGlzIHdoZW4gdGhlIHZpc2liaWxpdHkgb2YgdGhlaXIgY2hpbGRyZW4gY2hhbmdlcy4KLSAgKiAoZS5nLiBleHBhbmQvY29sbGFwc2Ugb2YgYSBwYXJlbnQgbm9kZSkuCi0gICovCi0gIHB1YmxpYyB2b2lkIHVwZGF0ZU1heERlcHRoVmlzaWJsZSgpCi0gIHsKLSAgICBpZiAocm9vdE5vZGVfICE9IG51bGwpCi0gICAgICBtYXhEZXB0aFZpc2libGVfID0gcm9vdE5vZGVfLmdldE1heERlcHRoVmlzaWJsZSgpOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbmV4dCBhdmFpbGFibGUgaWQgZm9yIGEgbmV3bHkgY3JlYXRlZCBub2RlLgotICAqIEByZXR1cm4gaW50Ci0gICovCi0gIHB1YmxpYyBpbnQgZ2V0TmV4dE5vZGVJZCgpCi0gIHsKLSAgICByZXR1cm4gbmV4dElkXzsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIGlkIG9mIHRoZSBjdXJyZW50bHkgZm9jdXNlZCBub2RlIGluIHRoZSB0cmVlLiBBIG5vZGUKLSAgKiBiZWNvbWVzIGZvY3VzZWQgd2hlbiBhbnkgb2YgdGhlIGZvbGxvd2luZyBldmVudHMgb2NjdXI6Ci0gICogMSkgVGhlIG5vZGUncyBpY29uIG9yIGltYWdlIGFyZSBzZWxlY3RlZCBieSBhIHVzZXIuCi0gICogMikgVGhlIG5vZGUncyBleHBhbmQvY29sbGFwc2UgaWNvbiBpcyBjbGlja2VkLgotICAqIDMpIFByb2dyYW1tYXRpY2FsbHkgc2V0IGJ5IHRoZSBwcm9ncmFtbWVyLgotICAqIFRoZSB0cmVldmlldyB3aWxsIGFsd2F5cyBzY3JvbGwgdG8gdGhlIGN1cnJlbnQgZm9jdXNlZCBub2RlIHdoZW4gbG9hZGVkLgotICAqIEByZXR1cm4gaW50IFRoZSBpZC4KLSAgKi8KLSAgcHVibGljIGludCBnZXRGb2N1c2VkTm9kZUlkKCkKLSAgewotICAgIHJldHVybiBmb2N1c2VkTm9kZUlkXzsKLSAgfQotCi0gIC8qKgotICAqIEFsbG93cyBtb2RpZmljYXRpb24gb2YgdGhlIGZvY3VzZWQgbm9kZS4KLSAgKiBAcGFyYW0gaW50IFRoZSBpZCBvZiB0aGUgbm9kZSB0aGF0IGlzIGluIGZvY3VzLgotICAqLwotICBwdWJsaWMgdm9pZCBzZXRGb2N1c2VkTm9kZUlkKGludCBub2RlSWQpCi0gIHsKLSAgICBmb2N1c2VkTm9kZUlkXyA9IG5vZGVJZDsKLSAgfQotCi0gIHB1YmxpYyBOb2RlIGdldEZvY3VzZWROb2RlKCkKLSAgewotICAgIHJldHVybiBnZXROb2RlKGZvY3VzZWROb2RlSWRfKTsKLSAgfQotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIGlkIG9mIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgbm9kZSBpbiB0aGUgdHJlZS4KLSAgKiBAcmV0dXJuIGludCBUaGUgaWQuCi0gICovCi0gIHB1YmxpYyBpbnQgZ2V0U2VsZWN0ZWROb2RlSWQoKQotICB7Ci0gICAgcmV0dXJuIHNlbGVjdGVkTm9kZUlkXzsKLSAgfQotCi0gIHB1YmxpYyBOb2RlIGdldFNlbGVjdGVkTm9kZSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0Tm9kZShzZWxlY3RlZE5vZGVJZF8pOwotICB9Ci0KLSAgLyoqCi0gICogUmV0cmlldmUgYSByZWZlcmVuY2UgdG8gYSBOb2RlIGluIHRoaXMgbWFuYWdlcidzIG5vZGUgdGFibGUuCi0gICogQHJldHVybiBOb2RlIFRoZSBub2RlLgotICAqLwotICBwdWJsaWMgTm9kZSBnZXROb2RlKGludCBub2RlSWQpCi0gIHsKLSAgICByZXR1cm4gKE5vZGUpbm9kZVRhYmxlXy5nZXQoU3RyaW5nLnZhbHVlT2Yobm9kZUlkKSk7Ci0gIH0KLQotICAvKioKLSAgKiBBbGxvd3MgbW9kaWZpY2F0aW9uIG9mIHRoZSBzZWxlY3RlZCBOb2RlLiBOb3RlIHRoYXQgc2V0dGluZyBhIG5vZGUgdG8gYmVjb21lCi0gICogc2VsZWN0ZWQgYXV0b21hdGljYWxseSBtYWtlcyBpdCB0aGUgZm9jdXNlZCBub2RlLiBIb3dldmVyLCB0aGlzIGlzIG9ubHkgYSBvbmUKLSAgKiB3YXkgcmVsYXRpb25zaGlwLgotICAqIEBwYXJhbSBpbnQgVGhlIGlkIG9mIHRoZSBub2RlIHRoYXQgaXMgYmVpbmcgc2VsZWN0ZWQuCi0gICovCi0gIHB1YmxpYyB2b2lkIHNldFNlbGVjdGVkTm9kZUlkKGludCBub2RlSWQpCi0gIHsKLSAgICBwcmV2aW91c1NlbGVjdGVkTm9kZUlkXyA9IHNlbGVjdGVkTm9kZUlkXzsKLSAgICBzZWxlY3RlZE5vZGVJZF8gPSBub2RlSWQ7Ci0gICAgc2V0Rm9jdXNlZE5vZGVJZChzZWxlY3RlZE5vZGVJZF8pOwotICB9Ci0KLSAgcHVibGljIGludCBnZXRQcmV2aW91c1NlbGVjdGVkTm9kZUlkKCkKLSAgewotICAgIHJldHVybiBwcmV2aW91c1NlbGVjdGVkTm9kZUlkXzsKLSAgfQotCi0gIHB1YmxpYyBOb2RlIGdldFByZXZpb3VzU2VsZWN0ZWROb2RlKCkKLSAgewotICAgIHJldHVybiAoTm9kZSlub2RlVGFibGVfLmdldChTdHJpbmcudmFsdWVPZihwcmV2aW91c1NlbGVjdGVkTm9kZUlkXykpOwotICB9Ci0KLSAgLyoqCi0gICogUmVuZGVyIHRoZSBIVE1MIHRyZWUgdmlldyBmb3IgdGhpcyBub2RlLgotICAqIEBwYXJhbSBIdHRwU2VydmxldFJlc3BvbnNlIEZvciBlbmNvZGluZyBVUkxzLgotICAqIEByZXR1cm4gU3RyaW5nIFRoZSBIVE1MIHJlcHJlc2VudGluZyB0aGUgdHJlZSB2aWV3LgotICAqLwotICBwdWJsaWMgU3RyaW5nIHJlbmRlclRyZWVWaWV3KEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgdHJlZVZpZXcgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgcm9vdE5vZGVfLnJlbmRlck5vZGUocmVzcG9uc2UsdHJlZVZpZXcsIiIsZmFsc2UpOwotICAgIHJldHVybiB0cmVlVmlldy50b1N0cmluZygpOwotICB9Ci0gIAotICAvKioKLSAgKiBNYWtlIHRoZSBwcm92aWRlZCBub2RlIGlzIHZpc2libGUgYnkgZW5zdXJpbmcgdGhhdCBpdHMgYW5jZXN0b3JzIGFyZSB2aXNpYmxlLgotICAqIEBwYXJhbSBOb2RlIFRoZSBub2RlIHRvIGJlIG1hZGUgdmlzaWJsZS4KLSAgKiBAcmV0dXJuIGJvb2xlYW4gSW5kaWNhdG9yIGZvciB3aGV0aGVyIG9yIG5vdCB0aGUgdHJlZXZpZXcgbmVlZHMgcmVmcmVzaGluZyAoaS5lLiBhbiBhbmNlc3RvciB3YXMgbm90IHZpc2libGUpLgotICAqLwotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBtYWtlTm9kZVZpc2libGUoTm9kZSBub2RlKQotICB7Ci0gICAgYm9vbGVhbiByZXF1aXJlc1RyZWVWaWV3UmVmcmVzaCA9IGZhbHNlOwotICAgIHdoaWxlICgobm9kZSA9IG5vZGUuZ2V0UGFyZW50KCkpICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKCFub2RlLmlzT3BlbigpKQotICAgICAgewotICAgICAgICByZXF1aXJlc1RyZWVWaWV3UmVmcmVzaCA9IHRydWU7Ci0gICAgICAgIG5vZGUuc2V0VmlzaWJpbGl0eU9mQ2hpbGRyZW4odHJ1ZSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXF1aXJlc1RyZWVWaWV3UmVmcmVzaDsKLSAgfQotICAKLSAgLyoqCi0gICogTWFrZSB0aGUgY3VycmVudGx5IHNlbGVjdGVkIG5vZGUgdmlzaWJsZSBieSBlbnN1cmluZyB0aGF0IGl0cyBhbmNlc3RvcnMgYXJlIHZpc2libGUuCi0gICovCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIG1ha2VTZWxlY3RlZE5vZGVWaXNpYmxlKCkKLSAgewotICAgIHJldHVybiBtYWtlTm9kZVZpc2libGUoZ2V0U2VsZWN0ZWROb2RlKCkpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL1BlcnNwZWN0aXZlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL1BlcnNwZWN0aXZlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1NWYxNGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9QZXJzcGVjdGl2ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBQZXJzcGVjdGl2ZSBleHRlbmRzIE1lc3NhZ2VQcm92aWRlcgotewotICBwcm90ZWN0ZWQgQ29udHJvbGxlciBjb250cm9sbGVyXzsKLSAgcHJvdGVjdGVkIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWVfOwotCi0gIHB1YmxpYyBQZXJzcGVjdGl2ZShTdHJpbmcgbWVzc2FnZUJ1bmRsZUZpbGVOYW1lLENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKG1lc3NhZ2VCdW5kbGVGaWxlTmFtZSk7Ci0gICAgY29udHJvbGxlcl8gPSBjb250cm9sbGVyOwotICAgIG1lc3NhZ2VRdWV1ZV8gPSBuZXcgTWVzc2FnZVF1ZXVlKCk7Ci0gIH0KLQotICBwdWJsaWMgTWVzc2FnZVF1ZXVlIGdldE1lc3NhZ2VRdWV1ZSgpCi0gIHsKLSAgICByZXR1cm4gbWVzc2FnZVF1ZXVlXzsKLSAgfQotCi0gIHB1YmxpYyBDb250cm9sbGVyIGdldENvbnRyb2xsZXIoKQotICB7Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXJfOwotICB9Ci0KLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRQYW5lc0ZpbGUoKTsKLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRGcmFtZXNldHNGaWxlKCk7Ci0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0UHJvY2Vzc0ZyYW1lc2V0c0Zvcm0oKTsKLQotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFRyZWVDb250ZW50VmFyKCk7Ci0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRQYWdlKCk7Ci0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclZhcigpOwotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCk7Ci0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFZhcigpOwotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRQYWdlKCk7Ci0KLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRTd2l0Y2hQZXJzcGVjdGl2ZUZvcm1BY3Rpb25MaW5rKGludCB0YXJnZXRQZXJzcGVjdGl2ZUlkLGJvb2xlYW4gZm9ySGlzdG9yeSk7Ci0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0UGVyc3BlY3RpdmVDb250ZW50UGFnZSgpOwotICBwdWJsaWMgYWJzdHJhY3QgaW50IGdldFBlcnNwZWN0aXZlSWQoKTsKLQotICAvLyBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBhZnRlciB0aGUgcGVyc3BlY3RpdmUgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGluc3RhbnRpYXRlZC4KLSAgcHVibGljIGFic3RyYWN0IHZvaWQgaW5pdFBlcnNwZWN0aXZlKFNlcnZsZXRDb250ZXh0IGFwcGxpY2F0aW9uKTsKLSAgCi0gIC8vIE5vZGUgbWFuYWdlciBmb3IgdGhlIG5hdmlnYXRvci90cmVlIGNvbnRlbnQgcGFnZQotICBwdWJsaWMgYWJzdHJhY3QgTm9kZU1hbmFnZXIgZ2V0Tm9kZU1hbmFnZXIoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvU2VjdGlvbkhlYWRlckluZm8uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvU2VjdGlvbkhlYWRlckluZm8uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDdlNWU0YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL1NlY3Rpb25IZWFkZXJJbmZvLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmU7Ci0KLXB1YmxpYyBjbGFzcyBTZWN0aW9uSGVhZGVySW5mbwotewotICBwcml2YXRlIFN0cmluZyBjb250YWluZXJJZF87Ci0gIHByaXZhdGUgYm9vbGVhbiBkeW5hbWljXzsKLSAgcHJpdmF0ZSBPYmplY3Qgb3RoZXJQcm9wZXJ0aWVzXzsKLQotICBwdWJsaWMgU2VjdGlvbkhlYWRlckluZm8oKQotICB7Ci0gICAgY2xlYXIoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGNsZWFyKCkKLSAgewotICAgIGNvbnRhaW5lcklkXyA9ICIiOwotICAgIGR5bmFtaWNfID0gdHJ1ZTsKLSAgICBvdGhlclByb3BlcnRpZXNfID0gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldENvbnRhaW5lcklkKFN0cmluZyBjb250YWluZXJJZCkKLSAgewotICAgIGNvbnRhaW5lcklkXyA9IGNvbnRhaW5lcklkOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRDb250YWluZXJJZCgpCi0gIHsKLSAgICByZXR1cm4gY29udGFpbmVySWRfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgZW5hYmxlRHluYW1pYyhib29sZWFuIGlzRW5hYmxlZCkKLSAgewotICAgIGR5bmFtaWNfID0gaXNFbmFibGVkOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNEeW5hbWljKCkKLSAgewotICAgIHJldHVybiBkeW5hbWljXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldE90aGVyUHJvcGVydGllcyhPYmplY3Qgb2JqZWN0KQotICB7Ci0gICAgb3RoZXJQcm9wZXJ0aWVzXyA9IG9iamVjdDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBPYmplY3QgZ2V0T3RoZXJQcm9wZXJ0aWVzKCkKLSAgewotICAgIHJldHVybiBvdGhlclByb3BlcnRpZXNfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL1NldERlZmF1bHRWaWV3VG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9TZXREZWZhdWx0Vmlld1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2M5MWI5NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL1NldERlZmF1bHRWaWV3VG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgU2V0RGVmYXVsdFZpZXdUb29sIGV4dGVuZHMgQWN0aW9uVG9vbAotewotICBwdWJsaWMgU2V0RGVmYXVsdFZpZXdUb29sKFRvb2xNYW5hZ2VyIHZpZXdUb29sTWFuYWdlcixTdHJpbmcgYWx0KQotICB7Ci0gICAgc3VwZXIodmlld1Rvb2xNYW5hZ2VyLCJpbWFnZXMvdG9wX2VuYWJsZWQuZ2lmIiwiaW1hZ2VzL3RvcF9oaWdobGlnaHRlZC5naWYiLGFsdCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vcGVyc3BlY3RpdmUvVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9Ub29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4YmZiOTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9Ub29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyNyAgIDEzNjQ0OSBicnVuc3NlbkB1cy5pYm0uY29tIC0gVmluY2UgQnJ1bnNzZW4gIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkZyYW1lTmFtZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuSFRNTFV0aWxzOwotCi0vLyBBIGNsYXNzIGZvciByZXByZXNlbnRpbmcgdG9vbGJhciB0b29scy4KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBUb29sCi17Ci0gIHByb3RlY3RlZCBUb29sTWFuYWdlciB0b29sTWFuYWdlcl87Ci0gIHByaXZhdGUgU3RyaW5nIGVuYWJsZWRJbWFnZUxpbmtfOwotICBwcml2YXRlIFN0cmluZyBoaWdobGlnaHRlZEltYWdlTGlua187Ci0gIHByaXZhdGUgU3RyaW5nIGFsdF87Ci0gIHByb3RlY3RlZCBpbnQgdG9vbElkXzsKLSAgcHJvdGVjdGVkIGJ5dGUgdG9vbFR5cGVfOwotCi0gIHB1YmxpYyBUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLFN0cmluZyBlbmFibGVkSW1hZ2VMaW5rLFN0cmluZyBoaWdobGlnaHRlZEltYWdlTGluayxTdHJpbmcgYWx0LGJ5dGUgdG9vbFR5cGUpCi0gIHsKLSAgICB0b29sTWFuYWdlcl8gPSB0b29sTWFuYWdlcjsKLSAgICBlbmFibGVkSW1hZ2VMaW5rXyA9IGVuYWJsZWRJbWFnZUxpbms7Ci0gICAgaGlnaGxpZ2h0ZWRJbWFnZUxpbmtfID0gaGlnaGxpZ2h0ZWRJbWFnZUxpbms7Ci0gICAgYWx0XyA9IGFsdDsKLSAgICB0b29sSWRfID0gdG9vbE1hbmFnZXJfLmFkZFRvb2wodGhpcyk7Ci0gICAgdG9vbFR5cGVfID0gdG9vbFR5cGU7Ci0gIH0KLQotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSk7Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uVGFyZ2V0KCkKLSAgewotICAgIHJldHVybiBGcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBOwotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIGdlbmVyYXRlT25Nb3VzZVZhbHVlKFN0cmluZ0J1ZmZlciB2YWx1ZSxIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlLFN0cmluZyBmdWxsSW1hZ2VMaW5rKQotICB7Ci0gICAgdmFsdWUuYXBwZW5kKCJzcmM9JyIpLmFwcGVuZChyZXNwb25zZS5lbmNvZGVVUkwoZnVsbEltYWdlTGluaykpLmFwcGVuZCgnXCcnKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgcmVuZGVyVG9vbChIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlLENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIEhhc2h0YWJsZSBqc0ltYWdlUHJvcGVydGllcyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBTdHJpbmdCdWZmZXIgcHJvcGVydHlWYWx1ZSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBTdHJpbmcgZnVsbEVuYWJsZWRJbWFnZUxpbmsgPSBjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChlbmFibGVkSW1hZ2VMaW5rXyk7Ci0gICAgZ2VuZXJhdGVPbk1vdXNlVmFsdWUocHJvcGVydHlWYWx1ZSxyZXNwb25zZSxmdWxsRW5hYmxlZEltYWdlTGluayk7Ci0gICAgaW50IHByb3BlcnR5VmFsdWVMZW5ndGggPSBwcm9wZXJ0eVZhbHVlLmxlbmd0aCgpOwotICAgIGpzSW1hZ2VQcm9wZXJ0aWVzLnB1dCgiY2xhc3MiLCJub3JtYWwiKTsKLSAgICBqc0ltYWdlUHJvcGVydGllcy5wdXQoIm9uTW91c2VPdXQiLHByb3BlcnR5VmFsdWUuYXBwZW5kKCI7bW91c2VvdXQodGhpcykiKS50b1N0cmluZygpKTsKLSAgICBwcm9wZXJ0eVZhbHVlLmRlbGV0ZShwcm9wZXJ0eVZhbHVlTGVuZ3RoLHByb3BlcnR5VmFsdWUubGVuZ3RoKCkpOwotICAgIGpzSW1hZ2VQcm9wZXJ0aWVzLnB1dCgib25Nb3VzZVVwIixwcm9wZXJ0eVZhbHVlLmFwcGVuZCgiO21vdXNldXAodGhpcykiKS50b1N0cmluZygpKTsKLSAgICBwcm9wZXJ0eVZhbHVlLnNldExlbmd0aCgwKTsKLSAgICBnZW5lcmF0ZU9uTW91c2VWYWx1ZShwcm9wZXJ0eVZhbHVlLHJlc3BvbnNlLGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGhpZ2hsaWdodGVkSW1hZ2VMaW5rXykpOwotICAgIHByb3BlcnR5VmFsdWVMZW5ndGggPSBwcm9wZXJ0eVZhbHVlLmxlbmd0aCgpOwotICAgIGpzSW1hZ2VQcm9wZXJ0aWVzLnB1dCgib25Nb3VzZU92ZXIiLHByb3BlcnR5VmFsdWUuYXBwZW5kKCI7bW91c2VvdmVyKHRoaXMpIikudG9TdHJpbmcoKSk7Ci0gICAgcHJvcGVydHlWYWx1ZS5kZWxldGUocHJvcGVydHlWYWx1ZUxlbmd0aCxwcm9wZXJ0eVZhbHVlLmxlbmd0aCgpKTsKLSAgICBqc0ltYWdlUHJvcGVydGllcy5wdXQoIm9uTW91c2VET3duIixwcm9wZXJ0eVZhbHVlLmFwcGVuZCgiO21vdXNlZG93bih0aGlzKSIpLnRvU3RyaW5nKCkpOwotCi0gICAgU3RyaW5nIGltYWdlVGFnID0gSFRNTFV0aWxzLmdldEhUTUxJbWFnZVRhZyhyZXNwb25zZSxmdWxsRW5hYmxlZEltYWdlTGluayxhbHRfLCIxNiIsIjE2Iixqc0ltYWdlUHJvcGVydGllcyk7Ci0gICAgcmV0dXJuIEhUTUxVdGlscy5nZXRIVE1MTGlua1RhZyhyZXNwb25zZSxjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihmYWxzZSkpLGdldFNlbGVjdFRvb2xBY3Rpb25UYXJnZXQoKSxudWxsLGltYWdlVGFnLG51bGwpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFRvb2xNYW5hZ2VyIGdldFRvb2xNYW5hZ2VyKCkKLSAgewotICAgIHJldHVybiB0b29sTWFuYWdlcl87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgaW50IGdldFRvb2xJZCgpCi0gIHsKLSAgICByZXR1cm4gdG9vbElkXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBieXRlIGdldFRvb2xUeXBlKCkKLSAgewotICAgIHJldHVybiB0b29sVHlwZV87Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0RW5hYmxlZEltYWdlTGluaygpCi0gIHsKLSAgICByZXR1cm4gZW5hYmxlZEltYWdlTGlua187Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0SGlnaGxpZ2h0ZWRJbWFnZUxpbmsoKQotICB7Ci0gICAgcmV0dXJuIGhpZ2hsaWdodGVkSW1hZ2VMaW5rXzsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRBbHRUZXh0KCkKLSAgewotICAgIHJldHVybiBhbHRfOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRBbHRUZXh0KFN0cmluZyBhbHQpCi0gIHsKLSAgCWFsdF8gPSBhbHQ7Ci0gIH0gIAotCi0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0Rm9ybUxpbmsoKTsKLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRBY3Rpb25MaW5rKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL1Rvb2xNYW5hZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL1Rvb2xNYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhYTkxYTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9Ub29sTWFuYWdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLXB1YmxpYyBjbGFzcyBUb29sTWFuYWdlcgotewotICBwcml2YXRlIFZlY3RvciB0b29sc187Ci0gIHByaXZhdGUgaW50IHNlbGVjdGVkVG9vbElkXzsKLSAgcHJpdmF0ZSBOb2RlIG5vZGVfOwotCi0gIHB1YmxpYyBUb29sTWFuYWdlcihOb2RlIG5vZGUpCi0gIHsKLSAgICB0b29sc18gPSBuZXcgVmVjdG9yKCk7Ci0gICAgc2VsZWN0ZWRUb29sSWRfID0gMDsKLSAgICBub2RlXyA9IG5vZGU7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgaW50IGdldFNlbGVjdGVkVG9vbElkKCkKLSAgewotICAgIHJldHVybiBzZWxlY3RlZFRvb2xJZF87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgaW50IHNldFNlbGVjdGVkVG9vbElkKGludCB0b29sSWQpCi0gIHsKLSAgICBpZiAodG9vbElkID49IDAgJiYgdG9vbElkIDwgdG9vbHNfLnNpemUoKSkKLSAgICAgIHNlbGVjdGVkVG9vbElkXyA9IHRvb2xJZDsKLSAgICByZXR1cm4gc2VsZWN0ZWRUb29sSWRfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGludCBhZGRUb29sKFRvb2wgdG9vbCkKLSAgewotICAgIHRvb2xzXy5hZGRFbGVtZW50KHRvb2wpOwotICAgIHJldHVybiB0b29sc18uc2l6ZSgpLTE7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgVG9vbCBnZXRUb29sKGludCB0b29sSWQpCi0gIHsKLSAgICBpZiAodG9vbElkID49MCAmJiB0b29sSWQgPCBnZXROdW1iZXJPZlRvb2xzKCkpCi0gICAgICByZXR1cm4gKFRvb2wpdG9vbHNfLmVsZW1lbnRBdCh0b29sSWQpOwotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgTGlzdCBnZXRUb29scygpCi0gIHsKLSAgICByZXR1cm4gdG9vbHNfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFRvb2wgZ2V0U2VsZWN0ZWRUb29sKCkKLSAgewotICAgIGlmIChzZWxlY3RlZFRvb2xJZF8gPj0wICYmIHNlbGVjdGVkVG9vbElkXyA8IGdldE51bWJlck9mVG9vbHMoKSkKLSAgICAgIHJldHVybiAoVG9vbCl0b29sc18uZWxlbWVudEF0KHNlbGVjdGVkVG9vbElkXyk7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgaW50IGdldE51bWJlck9mVG9vbHMoKQotICB7Ci0gICAgcmV0dXJuIHRvb2xzXy5zaXplKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgTm9kZSBnZXROb2RlKCkKLSAgewotICAgIHJldHVybiBub2RlXzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9UcmFuc3BvcnRQcm92aWRlclJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL1RyYW5zcG9ydFByb3ZpZGVyUmVnaXN0cnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNiOThkOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL1RyYW5zcG9ydFByb3ZpZGVyUmVnaXN0cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA0MTMgICAxNzY0OTMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTRTogTWFrZSBtZXNzYWdlL3RyYW5zcG9ydCBzdGFjayBwbHVnZ2FibGUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbHVnaW4uRXhwbG9yZXJQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUFRyYW5zcG9ydFByb3ZpZGVyOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgaXMgcmVzcG9uc2libGUgZm9yIGxvYWRpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcidzIHRyYW5zcG9ydCBwcm92aWRlcgotICogZXh0ZW5zaW9ucyBhbmQgaW5zdGFudGlhdGluZyB0aGVtIHdoZW4gbmVlZGVkLiAKLSAqLwotcHVibGljIGNsYXNzIFRyYW5zcG9ydFByb3ZpZGVyUmVnaXN0cnkgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBSRUZfVFJBTlNQT1JUX1BST1ZJREVSUyA9ICJUUkFOU1BPUlRfUFJPVklERVJTIjsJCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVEVOU0lPTl9OQU1FICAgICAgICAgICA9ICJ3c2VUcmFuc3BvcnRQcm92aWRlciI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNPQVBfVFJBTlNQT1JUX1BST1ZJREVSICA9ICJzb2FwVHJhbnNwb3J0UHJvdmlkZXIiOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FU1BBQ0VfVVJJICAgICAgICAgICAgPSAibmFtZXNwYWNlVVJJIjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFJBTlNQT1JUX1VSSSAgICAgICAgICAgID0gInRyYW5zcG9ydFVSSSI7Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgVHJhbnNwb3J0UHJvdmlkZXJSZWdpc3RyeSBpbnN0YW5jZSA9IG51bGw7Ci0JCi0JcHJpdmF0ZSBMaXN0IHByZWZlcnJlZElEcyAgICAgICAgPSBudWxsOyAKLQlwcml2YXRlIE1hcCBzb2FwUHJvdmlkZXJFbGVtZW50cyA9IG51bGw7Ci0JcHJpdmF0ZSBNYXAgc29hcFByb3ZpZGVyQ2FjaGUgICAgPSBudWxsOwotCQotCS8qKgotCSAqIFJldHVybnMgYSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBUcmFuc3BvcnRQcm92aWRlclJlZ2lzdHJ5LgotCSAqICAKLQkgKiBAcmV0dXJuIEFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MuCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgVHJhbnNwb3J0UHJvdmlkZXJSZWdpc3RyeSBnZXRJbnN0YW5jZSgpIHsKLQkJaWYgKGluc3RhbmNlID09IG51bGwpCi0JCQlpbnN0YW5jZSA9IG5ldyBUcmFuc3BvcnRQcm92aWRlclJlZ2lzdHJ5KCk7Ci0JCXJldHVybiBpbnN0YW5jZTsKLQl9Ci0JCi0JLyoKLQkgKiBDb25zdHJ1Y3Rvci4KLQkgKi8KLQlwcml2YXRlIFRyYW5zcG9ydFByb3ZpZGVyUmVnaXN0cnkoKSB7CQkKLQkJCi0JCS8vIGdldCB0aGUgcHJlZmVyZW5jZSB2YWx1ZQotCQlQcmVmZXJlbmNlcyBwcmVmZXJlbmNlcyA9IEV4cGxvcmVyUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKTsKLQkJU3RyaW5nIHRyYW5zcG9ydFByb3ZpZGVycyA9IHByZWZlcmVuY2VzLmdldFN0cmluZyhQUkVGX1RSQU5TUE9SVF9QUk9WSURFUlMpLnJlcGxhY2VBbGwoIlxccyIsICIiKTsKLQkJCi0JCS8vIHNwbGl0IGl0IGludG8gYSBsaXN0IG9mIHByZWZlcnJlZCB0cmFuc3BvcnQgcHJvdmlkZXIgSURzCi0JCWlmICh0cmFuc3BvcnRQcm92aWRlcnMubGVuZ3RoKCkgPT0gMCkKLQkJCXByZWZlcnJlZElEcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJZWxzZQkJCQotCQkJcHJlZmVycmVkSURzID0gQXJyYXlzLmFzTGlzdCh0cmFuc3BvcnRQcm92aWRlcnMuc3BsaXQoIiwiKSk7Ci0JCQotCQkvLyBub3cgZmluZCBhbGwgZXh0ZW5kZXJzCi0JCUlFeHRlbnNpb25SZWdpc3RyeSByZWdpc3RyeSA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0JICAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGNvbmZpZ3MgPSAKLQkgICAgCXJlZ2lzdHJ5LmdldENvbmZpZ3VyYXRpb25FbGVtZW50c0ZvcihFeHBsb3JlclBsdWdpbi5JRCwgRVhURU5TSU9OX05BTUUpOyAKLQotCSAgICAvLyBjdXJyZW50bHkgd2Ugb25seSBoYXZlIG9uZSB0eXBlIG9mIHByb3ZpZGVyczogU09BUCB0cmFuc3BvcnQgcHJvdmlkZXJzCi0JICAgIHNvYXBQcm92aWRlckVsZW1lbnRzID0gbmV3IEhhc2h0YWJsZSgpOwkgICAgCi0JICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29uZmlncy5sZW5ndGg7IGkrKykgewkgICAgCQkgICAgCQotICAgIAkJaWYgKFNPQVBfVFJBTlNQT1JUX1BST1ZJREVSLmVxdWFscyhjb25maWdzW2ldLmdldE5hbWUoKSkpIHsJICAgIAkJCQotICAgIAkJCVN0cmluZyBpZCA9IGNvbmZpZ3NbaV0uZ2V0QXR0cmlidXRlKCJpZCIpOwotICAgIAkJCXNvYXBQcm92aWRlckVsZW1lbnRzLnB1dChpZCwgY29uZmlnc1tpXSk7ICAgIAkJCSAgICAJCQkJCi0gICAgCQl9CSAgICAJCSAgICAJCi0JICAgIH0KLQkgICAgCi0JICAgIHNvYXBQcm92aWRlckNhY2hlID0gbmV3IEhhc2h0YWJsZSgpOwotCX0JCQotCQotCS8qCi0JICogRGV0ZXJtaW5lIGlmIHRoZSBVUklzIG1hdGNoLgotCSAqLwotCXByaXZhdGUgYm9vbGVhbiB1cmlNYXRjaChTdHJpbmcgcmVxdWlyZWQsIFN0cmluZyBzdXBwb3J0ZWQpIHsKLQkJCi0JCS8vIG5vdCBzcGVjaWZpZWQgbWVhbiBzdXBwb3J0IGV2ZXJ5dGhpbmcKLQkJaWYgKHN1cHBvcnRlZCA9PSBudWxsKQotCQkJcmV0dXJuIHRydWU7Ci0JCQkJCi0JCWlmICghcmVxdWlyZWQuZW5kc1dpdGgoIi8iKSkgIHJlcXVpcmVkICs9ICIvIjsKLQkJaWYgKCFzdXBwb3J0ZWQuZW5kc1dpdGgoIi8iKSkgc3VwcG9ydGVkICs9ICIvIjsKLQkJCi0JCXJldHVybiByZXF1aXJlZC5lcXVhbHMoc3VwcG9ydGVkKTsKLQl9Ci0JCi0JLyoKLQkgKiBDcmVhdGUgdGhlIGV4dGVuc2lvbiBmb3IgdGhlIGdpdmVuIGtleSwgYnV0IG9ubHkgaWYgaXQgc3VwcG9ydHMgdGhlIGJpbmRpbmcgbmFtZXNwYWNlIGFuZCB0cmFuc3BvcnQKLQkgKi8KLQlwcml2YXRlIElTT0FQVHJhbnNwb3J0UHJvdmlkZXIgY3JlYXRlRXh0ZW5zaW9uKE9iamVjdCBrZXksIFN0cmluZyBuYW1lc3BhY2VVUkksIFN0cmluZyB0cmFuc3BvcnRVUkkpIHsKLQkJCi0JCUlDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtZW50ID0gKElDb25maWd1cmF0aW9uRWxlbWVudCkgc29hcFByb3ZpZGVyRWxlbWVudHMuZ2V0KGtleSk7CQkJCQkJCi0JCWlmIChlbGVtZW50ID09IG51bGwpCi0JCQlyZXR1cm4gbnVsbDsKLQkJCi0JCWJvb2xlYW4gc3VwcG9ydHNOYW1lc3BhY2UgPSB1cmlNYXRjaChuYW1lc3BhY2VVUkksIGVsZW1lbnQuZ2V0QXR0cmlidXRlKE5BTUVTUEFDRV9VUkkpKTsKLQkJYm9vbGVhbiBzdXBwb3J0c1RyYW5zcG9ydCA9IHVyaU1hdGNoKHRyYW5zcG9ydFVSSSwgZWxlbWVudC5nZXRBdHRyaWJ1dGUoVFJBTlNQT1JUX1VSSSkpOwkJCQotCQkKLQkJaWYgKHN1cHBvcnRzTmFtZXNwYWNlICYmIHN1cHBvcnRzVHJhbnNwb3J0KSB7CQkJCi0JCQkKLQkJCVN0cmluZyBwcm92aWRlckNsYXNzSUQgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgiY2xhc3MiKTsKLQkJCU9iamVjdCBvYmogPSBudWxsOwotCQkJCi0JCQl0cnkgewotCQkJCS8vIGNoZWNrIGlmIHdlIGFscmVhZHkgaGF2ZSB0aGUgdHJhbnNwb3J0IHByb3ZpZGVyIGNhY2hlZCwKLQkJCQkvLyBpZiBub3QsIHRoZW4gY3JlYXRlIG9uZQotCQkJCXN5bmNocm9uaXplZCAoc29hcFByb3ZpZGVyQ2FjaGUpIHsKLQkJCQkJb2JqID0gc29hcFByb3ZpZGVyQ2FjaGUuZ2V0KHByb3ZpZGVyQ2xhc3NJRCk7IAkJCQkJCi0JCQkJCWlmIChvYmogPT0gbnVsbCkgewkJCQkJCi0JCQkJCQlvYmogPSBlbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oImNsYXNzIik7Ci0JCQkJCQlzb2FwUHJvdmlkZXJDYWNoZS5wdXQocHJvdmlkZXJDbGFzc0lELCBvYmopOwotCQkJCQl9CQkJCQkKLQkJCQl9Ci0JCQkJcmV0dXJuIChJU09BUFRyYW5zcG9ydFByb3ZpZGVyKSBvYmo7Ci0JCQl9Ci0JCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7fQkJCQkJCi0JCX0KLQkJCi0JCXJldHVybiBudWxsOwotCX0KLQkKLQkvKioKLQkgKiBHZXQgYW4gSVNPQVBUcmFuc3BvcnRQcm92aWRlciB0aGF0IHN1cHBvcnRzIHRoZSBiaW5kaW5nIG5hbWVzcGFjZSBhbmQgdHJhbnNwb3J0LiAgVGhpcyBtZXRob2Qgd2lsbAotCSAqIGZpcnN0IGxvb2sgZm9yIHByZWZlcnJlZCBJRHMgZGVmaW5lZCB1c2luZyB0aGUgVFJBTlNQT1JUX1BST1ZJREVSUyBwcmVmZXJlbmNlIGtleS4gIElmIGEgc3VpdGFibGUKLQkgKiBwcm92aWRlciBpcyBub3QgZm91bmQsIGl0IHdpbGwgdGhlbiBsb29rIGF0IGFsbCBvdGhlciBleHRlbmRlcnMgaW4gbm9uLWRldGVybWluaXN0aWMgb3JkZXIuCi0JICogCi0JICogQHBhcmFtIG5hbWVzcGFjZVVSSSBUaGUgYmluZGluZyBuYW1lc3BhY2UgVVJJCi0JICogQHBhcmFtIHRyYW5zcG9ydFVSSSBUaGUgYmluZGluZyB0cmFuc3BvcnQgVVJJCi0JICogCi0JICogQHJldHVybiBSZXR1cm5zIGEgc3VpdGFibGUgSVNPQVBUcmFucG9ydFByb3ZpZGVyIGZvciB0aGUgZ2l2ZW4gYmluZGluZyBpbmZvcm1hdGlvbiwgb3IgbnVsbAotCSAqIGlmIHRoZXJlJ3Mgbm8gbWF0Y2guCi0JICovCi0JcHVibGljIElTT0FQVHJhbnNwb3J0UHJvdmlkZXIgZ2V0U09BUFRyYW5zcG9ydFByb3ZpZGVyKFN0cmluZyBuYW1lc3BhY2VVUkksIFN0cmluZyB0cmFuc3BvcnRVUkkpIHsKLQkKLQkJSVNPQVBUcmFuc3BvcnRQcm92aWRlciBwcm92aWRlciA9IG51bGw7Ci0JCQotCQlJdGVyYXRvciBpdGVyID0gcHJlZmVycmVkSURzLml0ZXJhdG9yKCk7Ci0JCQotCQkvLyBjaGVjayBwcmVmZXJyZWQgSURzIGZpcnN0Ci0JCXdoaWxlIChpdGVyLmhhc05leHQoKSkgewotCQkJcHJvdmlkZXIgPSBjcmVhdGVFeHRlbnNpb24oaXRlci5uZXh0KCksIG5hbWVzcGFjZVVSSSwgdHJhbnNwb3J0VVJJKTsKLQkJCWlmIChwcm92aWRlciAhPSBudWxsKQotCQkJCXJldHVybiBwcm92aWRlcjsKLQkJfQotCQkKLQkJaXRlciA9IHNvYXBQcm92aWRlckVsZW1lbnRzLmtleVNldCgpLml0ZXJhdG9yKCk7Ci0JCQotCQkvLyBjaGVjayByZXN0IG9mIHRoZSBwcm92aWRlcnMKLQkJd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7Ci0JCQlPYmplY3Qga2V5ID0gaXRlci5uZXh0KCk7Ci0JCQotCQkJLy8gYWxyZWFkeSBjaGVja2VkIHRoZSBwcmVmZXJyZWQgSURzCi0JCQlpZiAocHJlZmVycmVkSURzLmNvbnRhaW5zKGtleSkpCi0JCQkJY29udGludWU7Ci0JCQkKLQkJCXByb3ZpZGVyID0gY3JlYXRlRXh0ZW5zaW9uKGtleSwgbmFtZXNwYWNlVVJJLCB0cmFuc3BvcnRVUkkpOwotCQkJaWYgKHByb3ZpZGVyICE9IG51bGwpCi0JCQkJcmV0dXJuIHByb3ZpZGVyOwkJCQotCQl9Ci0JCQotCQlyZXR1cm4gbnVsbDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL1ZpZXdUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3BlcnNwZWN0aXZlL1ZpZXdUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiNTk2MDcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS9wZXJzcGVjdGl2ZS9WaWV3VG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLlRvb2xUeXBlczsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFZpZXdUb29sIGV4dGVuZHMgRm9ybVRvb2wKLXsKLSAgcHJpdmF0ZSBIYXNodGFibGUgdmlld1Rvb2xNYW5hZ2Vyc187Ci0KLSAgcHVibGljIFZpZXdUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLFN0cmluZyBlbmFibGVkSW1hZ2VMaW5rLFN0cmluZyBoaWdobGlnaHRlZEltYWdlTGluayxTdHJpbmcgYWx0KQotICB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsZW5hYmxlZEltYWdlTGluayxoaWdobGlnaHRlZEltYWdlTGluayxhbHQpOwotICAgIHRvb2xUeXBlXyA9IFRvb2xUeXBlcy5WSUVXOwotICAgIHZpZXdUb29sTWFuYWdlcnNfID0gbmV3IEhhc2h0YWJsZSgpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgYWRkU2V0RGVmYXVsdFZpZXdUb29sKFRvb2xNYW5hZ2VyIHZpZXdUb29sTWFuYWdlcixpbnQgaW5kZXgpOwotICBwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCBhZGRUb29scyhUb29sTWFuYWdlciB2aWV3VG9vbE1hbmFnZXIsaW50IGluZGV4KTsKLQotICBwdWJsaWMgZmluYWwgVG9vbE1hbmFnZXIgY3JlYXRlVG9vbE1hbmFnZXIoaW50IHZpZXdJZCkKLSAgewotICAgIFRvb2xNYW5hZ2VyIHZpZXdUb29sTWFuYWdlciA9IG5ldyBUb29sTWFuYWdlcih0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpKTsKLSAgICBhZGRUb29scyh2aWV3VG9vbE1hbmFnZXIsdmlld0lkKTsKLSAgICBhZGRTZXREZWZhdWx0Vmlld1Rvb2wodmlld1Rvb2xNYW5hZ2VyLHZpZXdJZCk7Ci0gICAgdmlld1Rvb2xNYW5hZ2Vyc18ucHV0KFN0cmluZy52YWx1ZU9mKHZpZXdJZCksdmlld1Rvb2xNYW5hZ2VyKTsKLSAgICByZXR1cm4gdmlld1Rvb2xNYW5hZ2VyOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFRvb2xNYW5hZ2VyIGdldFRvb2xNYW5hZ2VyKGludCB2aWV3SWQpCi0gIHsKLSAgICByZXR1cm4gKFRvb2xNYW5hZ2VyKSh2aWV3VG9vbE1hbmFnZXJzXy5nZXQoU3RyaW5nLnZhbHVlT2Yodmlld0lkKSkpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgY2xlYXJWaWV3VG9vbE1hbmFnZXIoaW50IHZpZXdJZCkKLSAgewotICAgIHZpZXdUb29sTWFuYWdlcnNfLnJlbW92ZShTdHJpbmcudmFsdWVPZih2aWV3SWQpKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGNsZWFyVmlld1Rvb2xNYW5hZ2VycygpCi0gIHsKLSAgICB2aWV3VG9vbE1hbmFnZXJzXy5jbGVhcigpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9BZGRJdGVtc1RvRmF2b3JpdGVzQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9BZGRJdGVtc1RvRmF2b3JpdGVzQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjODdlNWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvQWRkSXRlbXNUb0Zhdm9yaXRlc0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotCi1wdWJsaWMgY2xhc3MgQWRkSXRlbXNUb0Zhdm9yaXRlc0FjdGlvbiBleHRlbmRzIFVERElQcm9wZXJ0aWVzRm9ybUFjdGlvbgotewotICBwdWJsaWMgQWRkSXRlbXNUb0Zhdm9yaXRlc0FjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc1BhcnNlZFJlc3VsdHMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIFN0cmluZ1tdIHNlbGVjdGVkTm9kZUlkcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgLy8gVGhlIGNsaWVudCBKYXZhc2NyaXB0IGVuZm9yY2VzIHRoZSBydWxlIHRoYXQgYXQgbGVhc3Qgb25lIGl0ZW0gd2FzIHNlbGVjdGVkIGJlZm9yZSB0aGUgZm9ybSBjYW4gYmUgc3VibWl0dGVkLgotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlNFTEVDVEVEX05PREVJRFMsc2VsZWN0ZWROb2RlSWRzKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFN0cmluZ1tdIHNlbGVjdGVkTm9kZUlkcyA9IChTdHJpbmdbXSlwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5TRUxFQ1RFRF9OT0RFSURTKTsKLSAgICBBZGRUb0Zhdm9yaXRlc0FjdGlvbiBhY3Rpb24gPSBuZXcgQWRkVG9GYXZvcml0ZXNBY3Rpb24oY29udHJvbGxlcl8pOwotICAgIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlID0gYWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICBmb3IgKGludCBpPTA7aTxzZWxlY3RlZE5vZGVJZHMubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICBwcm9wZXJ0eVRhYmxlLnB1dChBY3Rpb25JbnB1dHMuTk9ERUlELHNlbGVjdGVkTm9kZUlkc1tpXSk7Ci0gICAgICBpZiAoYWN0aW9uLmZhdm9yaXRlRXhpc3RzKCkpIHsKLSAgICAgICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgICAgICBOb2RlIG5vZGUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChzZWxlY3RlZE5vZGVJZHNbaV0pKTsKLSAgICAgICAgU3RyaW5nIG5vZGVOYW1lID0gbm9kZS5nZXROb2RlTmFtZSgpOwotICAgICAgICB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0ZBVk9SSVRFX0FMUkVBRFlfRVhJU1RTIixub2RlTmFtZSkpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICBhY3Rpb24ucnVuKCk7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9BZGRQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9BZGRQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5NmI3NjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvQWRkUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLkJ1c2luZXNzRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLk11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5WYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLnVkZGk0ai5VRERJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmFzc2VydGlvbi5QdWJsaXNoZXJBc3NlcnRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5idXNpbmVzcy5CdXNpbmVzc0VudGl0eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5EaXNwb3NpdGlvblJlcG9ydDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlJlc3VsdDsKLWltcG9ydCBvcmcudWRkaTRqLnRyYW5zcG9ydC5UcmFuc3BvcnRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLktleWVkUmVmZXJlbmNlOwotCi1wdWJsaWMgY2xhc3MgQWRkUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbiBleHRlbmRzIENvbW1vblB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24KLXsKLSAgcHVibGljIEFkZFB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBwcm9jZXNzUGFyc2VkUmVzdWx0cyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgaWYgKHJlZ2lzdHJ5Tm9kZV8gPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSB0cnVlOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIEZvcm1Ub29sIGZvcm1Ub29sID0gZ2V0U2VsZWN0ZWRGb3JtVG9vbCgpOwotCi0gICAgLy8gaWRzIGZyb20gdWRkaU9iamVjdHNfdGFibGUuanNwCi0gICAgU3RyaW5nW10gc2VsZWN0ZWRCdXNJZHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUFVCTElTSEVSX0FTU0VSVElPTlNfU0VMRUNURURfQlVTX0lEKTsKLSAgICBpZiAoc2VsZWN0ZWRCdXNJZHMgPT0gbnVsbCB8fCBzZWxlY3RlZEJ1c0lkcy5sZW5ndGggPT0gMCkgewotICAgICAgLy8gU3luY2hyb25pemUgY2xpZW50IHZpZXcgYW5kIHNlcnZlciBtb2RlbCAodWRkaU9iamVjdF90YWJsZS5qc3ApCi0gICAgICBzeW5jaHJvbml6ZVVERElPYmplY3RUYWJsZSgpOwotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5QVUJMSVNIRVJfQVNTRVJUSU9OU19TRUxFQ1RFRF9CVVNfSUQsIHNlbGVjdGVkQnVzSWRzKTsKLSAgICAgIC8vIFN5bmNocm9uaXplIGNsaWVudCB2aWV3IGFuZCBzZXJ2ZXIgbW9kZWwgKHVkZGlPYmplY3RfdGFibGUuanNwKQotICAgICAgc3luY2hyb25pemVVRERJT2JqZWN0VGFibGUoKTsKLSAgICB9Ci0KLSAgICBTdHJpbmdbXSBhc3NlcnRpb25UeXBlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5QVUJMSVNIRVJfQVNTRVJUSU9OU19UWVBFKTsKLSAgICBpZiAoYXNzZXJ0aW9uVHlwZXMgIT0gbnVsbCAmJiBhc3NlcnRpb25UeXBlcy5sZW5ndGggPiAwKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUFVCTElTSEVSX0FTU0VSVElPTlNfVFlQRSwgYXNzZXJ0aW9uVHlwZXMpOwotICAgIGVsc2UKLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0KLSAgICBTdHJpbmdbXSBkaXJlY3Rpb25zID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hFUl9BU1NFUlRJT05TX0RJUkVDVElPTik7Ci0gICAgaWYgKGRpcmVjdGlvbnMgIT0gbnVsbCAmJiBkaXJlY3Rpb25zLmxlbmd0aCA+IDApCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5QVUJMSVNIRVJfQVNTRVJUSU9OU19ESVJFQ1RJT04sIGRpcmVjdGlvbnMpOwotICAgIGVsc2UKLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0KLSAgICAvLyBpZiBub3QgeWV0IGxvZ2dlZCBpbiwgdmFsaWRhdGUgdGhlIHBhcmFtZXRlcnMgbmVlZGVkIHRvIGxvZyBpbgotICAgIGlmICghaXNMb2dnZWRJbl8pIHsKLSAgICAgIFN0cmluZyBwdWJsaXNoVVJMID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICAgIFN0cmluZyB1c2VySUQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICAgIFN0cmluZyBwYXNzd29yZCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCk7Ci0KLSAgICAgIGlmIChwdWJsaXNoVVJMICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMLHB1Ymxpc2hVUkwpOwotICAgICAgICBmb3JtVG9vbC5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMLHB1Ymxpc2hVUkwpOwotICAgICAgfQotICAKLSAgICAgIGlmICghVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nKHB1Ymxpc2hVUkwpKQotICAgICAgewotICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICBmb3JtVG9vbC5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9QVUJMSVNIX1VSTCIpKTsKLSAgICAgIH0KLQotICAgICAgaWYgKHVzZXJJRCAhPSBudWxsKQotICAgICAgewotICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQsdXNlcklEKTsKLSAgICAgICAgZm9ybVRvb2wuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQsdXNlcklEKTsKLSAgICAgIH0KLSAgCi0gICAgICBpZiAoIVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZyh1c2VySUQpKQotICAgICAgewotICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICBmb3JtVG9vbC5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfVVNFUklEIikpOwotICAgICAgfQotCi0gICAgICBpZiAocGFzc3dvcmQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQscGFzc3dvcmQpOwotICAgICAgICBmb3JtVG9vbC5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JELHBhc3N3b3JkKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gaW5wdXRzVmFsaWQ7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgaWYgKHJlZ2lzdHJ5Tm9kZV8gPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdpc3RyeUVsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ2lzdHJ5Tm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0KLSAgICAvLyBpZiBub3QgeWV0IGxvZ2dlZCBpbiwgbG9nIGluIGZpcnN0Ci0gICAgaWYgKCFpc0xvZ2dlZEluXykgewotICAgICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICAgIFN0cmluZyB1c2VySUQgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICAgICBTdHJpbmcgcGFzc3dvcmQgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEKTsKLQotICAgICAgdHJ5IHsKLSAgICAgICAgcmVnaXN0cnlFbGVtZW50LnBlcmZvcm1Mb2dpbihwdWJsaXNoVVJMLCB1c2VySUQsIHBhc3N3b3JkKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChUcmFuc3BvcnRFeGNlcHRpb24gdGUpIHsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJUcmFuc3BvcnRFeGNlcHRpb24iKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgY2F0Y2ggKFVERElFeGNlcHRpb24gdWRkaWUpIHsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJVRERJRXhjZXB0aW9uIik7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGllLnRvU3RyaW5nKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIG1lKSB7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiTWFsZm9ybWVkVVJMRXhjZXB0aW9uIik7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKG1lLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBVRERJUHJveHkgcHJveHkgPSByZWdpc3RyeUVsZW1lbnQuZ2V0UHJveHkoKTsKLSAgICByZWdpc3RyeUVsZW1lbnQuZ2V0VXNlcklkKCk7Ci0gICAgcmVnaXN0cnlFbGVtZW50LmdldENyZWQoKTsKLSAgICBCdXNpbmVzc0VsZW1lbnQgYnVzRWxlbWVudCA9IChCdXNpbmVzc0VsZW1lbnQpc2VsZWN0ZWRFbGVtZW50OwotCi0gICAgLy8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBpcyBhIG93bmVkIGJ1c2luZXNzCi0gICAgLy8gaWYgbm90LCB0aGUgQWRkUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbiBjYW5ub3QgYmUgcGVyZm9ybWVkCi0gICAgaWYgKCFpc0J1c2luZXNzT3duZWQoYnVzRWxlbWVudCkpIHsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT1RfT1dORURfQlVTSU5FU1MiKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICB0cnkgewotICAgICAgU3RyaW5nW10gYXNzZXJ0aW9uVHlwZXMgPSAoU3RyaW5nW10pcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUFVCTElTSEVSX0FTU0VSVElPTlNfVFlQRSk7Ci0gICAgICBTdHJpbmdbXSBkaXJlY3Rpb25zID0gKFN0cmluZ1tdKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hFUl9BU1NFUlRJT05TX0RJUkVDVElPTik7Ci0gICAgICBTdHJpbmcgdGhpc0J1c2luZXNzS2V5ID0gYnVzRWxlbWVudC5nZXRCdXNpbmVzc0VudGl0eSgpLmdldEJ1c2luZXNzS2V5KCk7Ci0KLSAgICAgIC8vIGdldCBhbGwgc2VsZWN0ZWQgYnVzaW5lc3NlcwotICAgICAgRm9ybVRvb2wgZm9ybVRvb2wgPSAoRm9ybVRvb2wpKHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKSk7Ci0gICAgICBTdHJpbmcgc3ViUXVlcnlLZXkgPSAoU3RyaW5nKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZKTsKLSAgICAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJID0gKChNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSlmb3JtVG9vbCkuZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHN1YlF1ZXJ5S2V5KTsKLSAgICAgIFZlY3RvciBzZWxlY3RlZEJ1c2luZXNzZXMgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRERfUFVCTElTSEVSX0FTU0VSVElPTlMpOwotICAgICAgRW51bWVyYXRpb24gZSA9IHNlbGVjdGVkQnVzaW5lc3Nlcy5lbGVtZW50cygpOwotICAgICAgaWYgKCFlLmhhc01vcmVFbGVtZW50cygpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgLy8gY3JlYXRlIGEgdmVjdG9yIG9mIHB1Ymxpc2hlciBhc3NlcnRpb25zIGJhc2VkIG9uIGFsbCB0aGUgc2VsZWN0ZWQgYnVzaW5lc3NlcwotICAgICAgVmVjdG9yIHB1YkFzc2VydGlvblZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGludCBpID0gMDsKLSAgICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICAgIExpc3RFbGVtZW50IGxlID0gKExpc3RFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgQnVzaW5lc3NFbnRpdHkgc3AgPSAoQnVzaW5lc3NFbnRpdHkpbGUuZ2V0T2JqZWN0KCk7Ci0gICAgICAgIEtleWVkUmVmZXJlbmNlIGtleWVkUmVmID0gbmV3IEtleWVkUmVmZXJlbmNlKGFzc2VydGlvblR5cGVzW2ldLCBhc3NlcnRpb25UeXBlc1tpXSwgVE1vZGVsLlJFTEFUSU9OU0hJUFNfVE1PREVMX0tFWSk7Ci0gICAgICAgIGlmIChJbnRlZ2VyLnBhcnNlSW50KGRpcmVjdGlvbnNbaV0pID09IFVERElBY3Rpb25JbnB1dHMuRElSRUNUSU9OX1RPKQotICAgICAgICAgIHB1YkFzc2VydGlvblZlY3Rvci5hZGQobmV3IFB1Ymxpc2hlckFzc2VydGlvbihzcC5nZXRCdXNpbmVzc0tleSgpLCB0aGlzQnVzaW5lc3NLZXksIGtleWVkUmVmKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBwdWJBc3NlcnRpb25WZWN0b3IuYWRkKG5ldyBQdWJsaXNoZXJBc3NlcnRpb24odGhpc0J1c2luZXNzS2V5LCBzcC5nZXRCdXNpbmVzc0tleSgpLCBrZXllZFJlZikpOwotICAgICAgICBpKys7Ci0gICAgICB9Ci0KLSAgICAgIC8vIHByb3h5LmFkZF9wdWJsaXNoZXJBc3NlcnRpb25zKC4uLikKLSAgICAgIERpc3Bvc2l0aW9uUmVwb3J0IHJlcG9ydCA9IHByb3h5LmFkZF9wdWJsaXNoZXJBc3NlcnRpb25zKHJlZ2lzdHJ5RWxlbWVudC5nZXRBdXRoSW5mb1N0cmluZygpLCBwdWJBc3NlcnRpb25WZWN0b3IpOwotCi0gICAgICAvLyByZWZyZXNoIHB1Ymxpc2hlciBhc3NlcnRpb25zIGlmZiBwcm94eSByZXBvcnRzIHN1Y2Nlc3MKLSAgICAgIGlmIChyZXBvcnQuc3VjY2VzcygpKSB7Ci0gICAgICAgIHNlbGVjdGVkQnVzaW5lc3Nlcy5yZW1vdmVBbGxFbGVtZW50cygpOwotICAgICAgICBTaG93UHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbiBzaG93UEFBY3Rpb24gPSBuZXcgU2hvd1B1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24oY29udHJvbGxlcl8pOwotICAgICAgICBIYXNodGFibGUgcHJvcGVydHlUYWJsZSA9IHNob3dQQUFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgICAgIE9iamVjdCBpZHMgPSBwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5QVUJMSVNIRVJfQVNTRVJUSU9OU19TRUxFQ1RFRF9CVVNfSUQpOwotICAgICAgICBpZiAoaWRzICE9IG51bGwpCi0gICAgICAgICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5QVUJMSVNIRVJfQVNTRVJUSU9OU19TRUxFQ1RFRF9CVVNfSUQsIGlkcyk7Ci0gICAgICAgIHNob3dQQUFjdGlvbi5ydW4oKTsKLSAgICAgIH0KLQotICAgICAgcmV0dXJuIHJlcG9ydC5zdWNjZXNzKCk7Ci0gICAgfQotICAgIGNhdGNoIChVRERJRXhjZXB0aW9uIHVkZGllKSB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJVRERJRXhjZXB0aW9uIik7Ci0gICAgICBEaXNwb3NpdGlvblJlcG9ydCByZXBvcnQgPSB1ZGRpZS5nZXREaXNwb3NpdGlvblJlcG9ydCgpOwotCSAgVmVjdG9yIHJlcG9ydEVyckluZm8gPSByZXBvcnQuZ2V0UmVzdWx0VmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlcG9ydEVyckluZm8uc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoKChSZXN1bHQpIHJlcG9ydEVyckluZm8uZ2V0KGkpKS5nZXRFcnJJbmZvKCkuZ2V0VGV4dCgpKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgY2F0Y2goRXhjZXB0aW9uIGUpIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIkV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvQWRkVG9GYXZvcml0ZXNBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0FkZFRvRmF2b3JpdGVzQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhYzMzZWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvQWRkVG9GYXZvcml0ZXNBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLkZhdm9yaXRlc01vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLkZhdm9yaXRlc0ZvbGRlckVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS5GYXZvcml0ZXNQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuQnVzaW5lc3NFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5DYXRlZ29yeU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlNlcnZpY2VFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5TZXJ2aWNlSW50ZXJmYWNlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5CdXNpbmVzc05vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuUmVnaXN0cnlOb2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlNlcnZpY2VJbnRlcmZhY2VOb2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlNlcnZpY2VOb2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLQotcHVibGljIGNsYXNzIEFkZFRvRmF2b3JpdGVzQWN0aW9uIGV4dGVuZHMgVURESU5vZGVBY3Rpb24KLXsKLSAgcHVibGljIEFkZFRvRmF2b3JpdGVzQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlkKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ1ZGRpL2FjdGlvbnMvQ2hlY2tGYXZvcml0ZUV4aXN0c0FjdGlvbkpTUC5qc3A/Iik7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCkuYXBwZW5kKCc9JykuYXBwZW5kKG5vZGVJZCk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJlZ2lzdHJ5RXhpc3RzKFN0cmluZyByZWdpc3RyeU5hbWUsTm9kZSByZWdpc3RyeU5vZGUpCi0gIHsKLSAgICByZWdpc3RyeU5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBIYXNodGFibGUgdGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9SRUdJU1RSWV9OQU1FLHJlZ2lzdHJ5TmFtZSk7Ci0gICAgcmV0dXJuIGZhdm9yaXRlRXhpc3RzKHRhYmxlLEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1JFR0lTVFJZX0ZPTERFUl9OT0RFKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIGJ1c2luZXNzRXhpc3RzKFN0cmluZyBidXNpbmVzc05hbWUsTm9kZSBidXNpbmVzc05vZGUpCi0gIHsKLSAgICBCdXNpbmVzc0VsZW1lbnQgYnVzRWxlbWVudCA9IChCdXNpbmVzc0VsZW1lbnQpYnVzaW5lc3NOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgU3RyaW5nIGJ1c2luZXNzS2V5ID0gYnVzRWxlbWVudC5nZXRCdXNpbmVzc0VudGl0eSgpLmdldEJ1c2luZXNzS2V5KCk7Ci0gICAgU3RyaW5nIGlucXVpcnlVUkwgPSByZWdFbGVtZW50LmdldElucXVpcnlVUkwoKTsKLSAgICBIYXNodGFibGUgdGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9CVVNJTkVTU19OQU1FLGJ1c2luZXNzTmFtZSk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9CVVNJTkVTU19JTlFVSVJZX0FQSSxpbnF1aXJ5VVJMKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX0JVU0lORVNTX0tFWSwgYnVzaW5lc3NLZXkpOwotICAgIHJldHVybiBmYXZvcml0ZUV4aXN0cyh0YWJsZSxGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9CVVNJTkVTU19GT0xERVJfTk9ERSk7Ci0gIH0KLQotICAgcHVibGljIGZpbmFsIGJvb2xlYW4gc2VydmljZUV4aXN0cyhTdHJpbmcgc2VydmljZU5hbWUsTm9kZSBzZXJ2aWNlTm9kZSkKLSAgewotICAgIFNlcnZpY2VFbGVtZW50IHNlcnZpY2VFbGVtZW50ID0gKFNlcnZpY2VFbGVtZW50KXNlcnZpY2VOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgU3RyaW5nIHNlcnZpY2VLZXkgPSBzZXJ2aWNlRWxlbWVudC5nZXRCdXNpbmVzc1NlcnZpY2UoKS5nZXRTZXJ2aWNlS2V5KCk7Ci0gICAgU3RyaW5nIGlucXVpcnlVUkwgPSByZWdFbGVtZW50LmdldElucXVpcnlVUkwoKTsKLSAgICBIYXNodGFibGUgdGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9TRVJWSUNFX05BTUUsc2VydmljZU5hbWUpOwotICAgIHRhYmxlLnB1dChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfU0VSVklDRV9JTlFVSVJZX0FQSSxpbnF1aXJ5VVJMKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1NFUlZJQ0VfS0VZLHNlcnZpY2VLZXkpOwotICAgIHJldHVybiBmYXZvcml0ZUV4aXN0cyh0YWJsZSxGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9TRVJWSUNFX0ZPTERFUl9OT0RFKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHNlcnZpY2VJbnRlcmZhY2VFeGlzdHMoU3RyaW5nIHNpTmFtZSxOb2RlIHNpTm9kZSkKLSAgewotICAgIFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50IHNpRWxlbWVudCA9IChTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudClzaU5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBTdHJpbmcgdE1vZGVsS2V5ID0gc2lFbGVtZW50LmdldFRNb2RlbCgpLmdldFRNb2RlbEtleSgpOwotICAgIFN0cmluZyBpbnF1aXJ5VVJMID0gcmVnRWxlbWVudC5nZXRJbnF1aXJ5VVJMKCk7Ci0gICAgSGFzaHRhYmxlIHRhYmxlID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIHRhYmxlLnB1dChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSxzaU5hbWUpOwotICAgIHRhYmxlLnB1dChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfU0VSVklDRV9JTlRFUkZBQ0VfSU5RVUlSWV9BUEksaW5xdWlyeVVSTCk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9TRVJWSUNFX0lOVEVSRkFDRV9LRVksdE1vZGVsS2V5KTsKLSAgICByZXR1cm4gZmF2b3JpdGVFeGlzdHModGFibGUsRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfU0VSVklDRV9JTlRFUkZBQ0VfRk9MREVSX05PREUpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gYWRkUmVnaXN0cnlUb0Zhdm9yaXRlcyhTdHJpbmcgcmVnaXN0cnlOYW1lLE5vZGUgcmVnaXN0cnlOb2RlKQotICB7Ci0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ2lzdHJ5Tm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIFN0cmluZyBpbnF1aXJ5VVJMID0gcmVnRWxlbWVudC5nZXRJbnF1aXJ5VVJMKCk7Ci0gICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSByZWdFbGVtZW50LmdldFB1Ymxpc2hVUkwoKTsKLSAgICBpZiAocHVibGlzaFVSTCA9PSBudWxsKQotICAgICAgcHVibGlzaFVSTCA9ICIiOwotICAgIEhhc2h0YWJsZSB0YWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1JFR0lTVFJZX1BVQkxJU0hfQVBJLHB1Ymxpc2hVUkwpOwotICAgIHRhYmxlLnB1dChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfUkVHSVNUUllfSU5RVUlSWV9BUEksaW5xdWlyeVVSTCk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9SRUdJU1RSWV9OQU1FLHJlZ2lzdHJ5TmFtZSk7Ci0gICAgRW51bWVyYXRpb24gdXNlckRlZmluZWRDYXRlZ29yaWVzRW51bSA9IHJlZ0VsZW1lbnQuZ2V0VXNlckRlZmluZWRDYXRlZ29yaWVzKCk7Ci0gICAgaWYgKHVzZXJEZWZpbmVkQ2F0ZWdvcmllc0VudW0gIT0gbnVsbCkKLSAgICB7Ci0gICAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1JFR0lTVFJZX0NBVEVHT1JJRVNfRU5VTSx1c2VyRGVmaW5lZENhdGVnb3JpZXNFbnVtKTsKLSAgICAgIHRhYmxlLnB1dChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1BMVUdJTl9NRVRBREFUQV9ESVJFQ1RPUlksY29udHJvbGxlcl8uZ2V0U2VydmxldEVuZ2luZVN0YXRlTG9jYXRpb24oKSk7Ci0gICAgfQotICAgIHJldHVybiBhZGRUb0Zhdm9yaXRlcyh0YWJsZSxGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9SRUdJU1RSWV9GT0xERVJfTk9ERSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBhZGRCdXNpbmVzc1RvRmF2b3JpdGVzKFN0cmluZyBidXNpbmVzc05hbWUsTm9kZSBidXNpbmVzc05vZGUpCi0gIHsKLSAgICBCdXNpbmVzc0VsZW1lbnQgYnVzRWxlbWVudCA9IChCdXNpbmVzc0VsZW1lbnQpYnVzaW5lc3NOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgU3RyaW5nIGJ1c2luZXNzS2V5ID0gYnVzRWxlbWVudC5nZXRCdXNpbmVzc0VudGl0eSgpLmdldEJ1c2luZXNzS2V5KCk7Ci0gICAgU3RyaW5nIGlucXVpcnlVUkwgPSByZWdFbGVtZW50LmdldElucXVpcnlVUkwoKTsKLSAgICBIYXNodGFibGUgdGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9CVVNJTkVTU19OQU1FLGJ1c2luZXNzTmFtZSk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9CVVNJTkVTU19JTlFVSVJZX0FQSSxpbnF1aXJ5VVJMKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX0JVU0lORVNTX0tFWSwgYnVzaW5lc3NLZXkpOwotICAgIHJldHVybiBhZGRUb0Zhdm9yaXRlcyh0YWJsZSxGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9CVVNJTkVTU19GT0xERVJfTk9ERSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIGFkZFNlcnZpY2VUb0Zhdm9yaXRlcyhTdHJpbmcgc2VydmljZU5hbWUsTm9kZSBzZXJ2aWNlTm9kZSkKLSAgewotICAgIFNlcnZpY2VFbGVtZW50IHNlcnZpY2VFbGVtZW50ID0gKFNlcnZpY2VFbGVtZW50KXNlcnZpY2VOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgU3RyaW5nIHNlcnZpY2VLZXkgPSBzZXJ2aWNlRWxlbWVudC5nZXRCdXNpbmVzc1NlcnZpY2UoKS5nZXRTZXJ2aWNlS2V5KCk7Ci0gICAgU3RyaW5nIGlucXVpcnlVUkwgPSByZWdFbGVtZW50LmdldElucXVpcnlVUkwoKTsKLSAgICBIYXNodGFibGUgdGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9TRVJWSUNFX05BTUUsc2VydmljZU5hbWUpOwotICAgIHRhYmxlLnB1dChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfU0VSVklDRV9JTlFVSVJZX0FQSSxpbnF1aXJ5VVJMKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1NFUlZJQ0VfS0VZLHNlcnZpY2VLZXkpOwotICAgIHJldHVybiBhZGRUb0Zhdm9yaXRlcyh0YWJsZSxGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9TRVJWSUNFX0ZPTERFUl9OT0RFKTsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gYWRkU2VydmljZUludGVyZmFjZVRvRmF2b3JpdGVzKFN0cmluZyBzaU5hbWUsTm9kZSBzaU5vZGUpCi0gIHsKLSAgICBTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCBzaUVsZW1lbnQgPSAoU2VydmljZUludGVyZmFjZUVsZW1lbnQpc2lOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgU3RyaW5nIHRNb2RlbEtleSA9IHNpRWxlbWVudC5nZXRUTW9kZWwoKS5nZXRUTW9kZWxLZXkoKTsKLSAgICBTdHJpbmcgaW5xdWlyeVVSTCA9IHJlZ0VsZW1lbnQuZ2V0SW5xdWlyeVVSTCgpOwotICAgIEhhc2h0YWJsZSB0YWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUsc2lOYW1lKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1NFUlZJQ0VfSU5URVJGQUNFX0lOUVVJUllfQVBJLGlucXVpcnlVUkwpOwotICAgIHRhYmxlLnB1dChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfU0VSVklDRV9JTlRFUkZBQ0VfS0VZLHRNb2RlbEtleSk7Ci0gICAgcmV0dXJuIGFkZFRvRmF2b3JpdGVzKHRhYmxlLEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1NFUlZJQ0VfSU5URVJGQUNFX0ZPTERFUl9OT0RFKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGZhdm9yaXRlRXhpc3RzKCkKLSAgewotICAgIGludCBub2RlSWQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBOb2RlIG5vZGUgPSBub2RlTWFuYWdlcl8uZ2V0Tm9kZShub2RlSWQpOwotICAgIFN0cmluZyBub2RlTmFtZSA9IG5vZGUuZ2V0Tm9kZU5hbWUoKTsKLSAgICBpZiAobm9kZSBpbnN0YW5jZW9mIFJlZ2lzdHJ5Tm9kZSkKLSAgICAgIHJldHVybiByZWdpc3RyeUV4aXN0cyhub2RlTmFtZSxub2RlKTsKLSAgICBlbHNlIGlmIChub2RlIGluc3RhbmNlb2YgQnVzaW5lc3NOb2RlKQotICAgICAgcmV0dXJuIGJ1c2luZXNzRXhpc3RzKG5vZGVOYW1lLG5vZGUpOwotICAgIGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBTZXJ2aWNlTm9kZSkKLSAgICAgIHJldHVybiBzZXJ2aWNlRXhpc3RzKG5vZGVOYW1lLG5vZGUpOwotICAgIGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBTZXJ2aWNlSW50ZXJmYWNlTm9kZSkKLSAgICAgIHJldHVybiBzZXJ2aWNlSW50ZXJmYWNlRXhpc3RzKG5vZGVOYW1lLG5vZGUpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBpbnQgbm9kZUlkID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgTm9kZSBub2RlID0gbm9kZU1hbmFnZXJfLmdldE5vZGUobm9kZUlkKTsKLSAgICBTdHJpbmcgbm9kZU5hbWUgPSBub2RlLmdldE5vZGVOYW1lKCk7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgYm9vbGVhbiBhZGRUb0Zhdm9yaXRlc1Jlc3VsdCA9IGZhbHNlOwotICAgIGlmIChub2RlIGluc3RhbmNlb2YgUmVnaXN0cnlOb2RlKQotICAgIHsKLSAgICAgIGFkZFRvRmF2b3JpdGVzUmVzdWx0ID0gYWRkUmVnaXN0cnlUb0Zhdm9yaXRlcyhub2RlTmFtZSxub2RlKTsKLSAgICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClub2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICBFbnVtZXJhdGlvbiBlID0gcmVnRWxlbWVudC5nZXRVc2VyRGVmaW5lZENhdGVnb3JpZXMoKTsKLSAgICAgIGlmIChlICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKQotICAgICAgICB7Ci0gICAgICAgICAgQ2F0ZWdvcnlNb2RlbCBjYXRlZ29yeU1vZGVsID0gKENhdGVnb3J5TW9kZWwpZS5uZXh0RWxlbWVudCgpOwotICAgICAgICAgIFRocm93YWJsZSBlcnJvckV4Y2VwdGlvbiA9IGNhdGVnb3J5TW9kZWwuZ2V0RXJyb3JFeGNlcHRpb24oKTsKLSAgICAgICAgICBpZiAoZXJyb3JFeGNlcHRpb24gIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmdbXSBhcmdzID0ge2NhdGVnb3J5TW9kZWwuZ2V0RGlzcGxheU5hbWUoKSxlcnJvckV4Y2VwdGlvbi5nZXRNZXNzYWdlKCl9OwotICAgICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9TQVZJTkdfQ0FURUdPUllfREFUQSIsYXJncykpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmIChub2RlIGluc3RhbmNlb2YgQnVzaW5lc3NOb2RlKQotICAgICAgYWRkVG9GYXZvcml0ZXNSZXN1bHQgPSBhZGRCdXNpbmVzc1RvRmF2b3JpdGVzKG5vZGVOYW1lLG5vZGUpOwotICAgIGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBTZXJ2aWNlTm9kZSkKLSAgICAgIGFkZFRvRmF2b3JpdGVzUmVzdWx0ID0gYWRkU2VydmljZVRvRmF2b3JpdGVzKG5vZGVOYW1lLG5vZGUpOwotICAgIGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBTZXJ2aWNlSW50ZXJmYWNlTm9kZSkKLSAgICAgIGFkZFRvRmF2b3JpdGVzUmVzdWx0ID0gYWRkU2VydmljZUludGVyZmFjZVRvRmF2b3JpdGVzKG5vZGVOYW1lLG5vZGUpOwotICAgIGlmIChhZGRUb0Zhdm9yaXRlc1Jlc3VsdCkKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19GQVZPUklURV9BRERFRCIsbm9kZU5hbWUpKTsKLSAgICBlbHNlCi0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0ZBVk9SSVRFX05PVF9BRERFRCIsbm9kZU5hbWUpKTsKLSAgICByZXR1cm4gYWRkVG9GYXZvcml0ZXNSZXN1bHQ7ICAgICAgCi0gIH0KLSAgCi0gIHByb3RlY3RlZCBib29sZWFuIGFkZFRvRmF2b3JpdGVzKEhhc2h0YWJsZSB0YWJsZSwgU3RyaW5nIHJlbCkKLSAgewotICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlTWFuYWdlciBmYXZOb2RlTWFuYWdlciA9IGZhdlBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgVHJlZUVsZW1lbnQgZmF2Um9vdEVsZW1lbnQgPSBmYXZOb2RlTWFuYWdlci5nZXRSb290Tm9kZSgpLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgRW51bWVyYXRpb24gZSA9IGZhdlJvb3RFbGVtZW50LmdldEVsZW1lbnRzKHJlbCk7Ci0gICAgaWYgKCFlLmhhc01vcmVFbGVtZW50cygpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEZhdm9yaXRlc0ZvbGRlckVsZW1lbnQgZmF2Rm9sZGVyRWxlbWVudCA9IChGYXZvcml0ZXNGb2xkZXJFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICByZXR1cm4gZmF2Rm9sZGVyRWxlbWVudC5hZGRGYXZvcml0ZSh0YWJsZSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBmYXZvcml0ZUV4aXN0cyhIYXNodGFibGUgdGFibGUsIFN0cmluZyByZWwpCi0gIHsKLSAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgZmF2Tm9kZU1hbmFnZXIgPSBmYXZQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIFRyZWVFbGVtZW50IGZhdlJvb3RFbGVtZW50ID0gZmF2Tm9kZU1hbmFnZXIuZ2V0Um9vdE5vZGUoKS5nZXRUcmVlRWxlbWVudCgpOwotICAgIEVudW1lcmF0aW9uIGUgPSBmYXZSb290RWxlbWVudC5nZXRFbGVtZW50cyhyZWwpOwotICAgIGlmICghZS5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBGYXZvcml0ZXNGb2xkZXJFbGVtZW50IGZhdkZvbGRlckVsZW1lbnQgPSAoRmF2b3JpdGVzRm9sZGVyRWxlbWVudCllLm5leHRFbGVtZW50KCk7Ci0gICAgcmV0dXJuIGZhdkZvbGRlckVsZW1lbnQuZmF2b3JpdGVFeGlzdHModGFibGUpOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmtGb3JIaXN0b3J5KCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9CdXNQdWJsaXNoU2VydmljZUFkdmFuY2VkQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9CdXNQdWJsaXNoU2VydmljZUFkdmFuY2VkQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4M2Q2ZjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvQnVzUHVibGlzaFNlcnZpY2VBZHZhbmNlZEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuQnVzaW5lc3NFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYnVzaW5lc3MuQnVzaW5lc3NFbnRpdHk7Ci0KLXB1YmxpYyBjbGFzcyBCdXNQdWJsaXNoU2VydmljZUFkdmFuY2VkQWN0aW9uIGV4dGVuZHMgUHVibGlzaEFjdGlvbgotewotICBwcml2YXRlIFJlZ1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRBY3Rpb24gcmVnUHVibGlzaFNlcnZpY2VBZHZhbmNlZEFjdGlvbl87Ci0gIHB1YmxpYyBCdXNQdWJsaXNoU2VydmljZUFkdmFuY2VkQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIHJlZ1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRBY3Rpb25fID0gbmV3IFJlZ1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRBY3Rpb24oY29udHJvbGxlcik7Ci0gICAgcHJvcGVydHlUYWJsZV8gPSByZWdQdWJsaXNoU2VydmljZUFkdmFuY2VkQWN0aW9uXy5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBwcm9jZXNzT3RoZXJzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcixGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSkgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBOb2RlIGJ1c2luZXNzTm9kZSA9IGdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpOwotICAgIEJ1c2luZXNzRWxlbWVudCBidXNpbmVzc0VsZW1lbnQgPSAoQnVzaW5lc3NFbGVtZW50KWJ1c2luZXNzTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIEJ1c2luZXNzRW50aXR5IGJ1c2luZXNzRW50aXR5ID0gYnVzaW5lc3NFbGVtZW50LmdldEJ1c2luZXNzRW50aXR5KCk7Ci0gICAgTGlzdEVsZW1lbnQgYnVzTGlzdEVsZW1lbnQgPSBuZXcgTGlzdEVsZW1lbnQoYnVzaW5lc3NFbnRpdHkpOwotICAgIFZlY3RvciBzZXJ2aWNlQnVzaW5lc3NDb3B5ID0gbmV3IFZlY3RvcigpOwotICAgIHNlcnZpY2VCdXNpbmVzc0NvcHkuYWRkRWxlbWVudChidXNMaXN0RWxlbWVudCk7Ci0gICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQlVTSU5FU1NfQ09QWSxzZXJ2aWNlQnVzaW5lc3NDb3B5KTsKLSAgICBib29sZWFuIHJlc3VsdCA9IHJlZ1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRBY3Rpb25fLnByb2Nlc3NPdGhlcnMocGFyc2VyLGZvcm1Ub29sUEkpOwotICAgIGlmICghcHJvcGVydHlUYWJsZV8uY29udGFpbnNLZXkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfUFJPVklERVIpKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX1BST1ZJREVSLGJ1c2luZXNzRW50aXR5KTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIHJldHVybiByZWdQdWJsaXNoU2VydmljZUFkdmFuY2VkQWN0aW9uXy5ydW4oKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvQnVzUHVibGlzaFNlcnZpY2VTaW1wbGVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0J1c1B1Ymxpc2hTZXJ2aWNlU2ltcGxlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxYzcwODguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvQnVzUHVibGlzaFNlcnZpY2VTaW1wbGVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLkJ1c2luZXNzRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJ1c2luZXNzLkJ1c2luZXNzRW50aXR5OwotCi1wdWJsaWMgY2xhc3MgQnVzUHVibGlzaFNlcnZpY2VTaW1wbGVBY3Rpb24gZXh0ZW5kcyBQdWJsaXNoQWN0aW9uCi17Ci0gIHByaXZhdGUgUmVnUHVibGlzaFNlcnZpY2VTaW1wbGVBY3Rpb24gcmVnUHVibGlzaFNlcnZpY2VTaW1wbGVBY3Rpb25fOwotCi0gIHB1YmxpYyBCdXNQdWJsaXNoU2VydmljZVNpbXBsZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICByZWdQdWJsaXNoU2VydmljZVNpbXBsZUFjdGlvbl8gPSBuZXcgUmVnUHVibGlzaFNlcnZpY2VTaW1wbGVBY3Rpb24oY29udHJvbGxlcik7Ci0gICAgcHJvcGVydHlUYWJsZV8gPSByZWdQdWJsaXNoU2VydmljZVNpbXBsZUFjdGlvbl8uZ2V0UHJvcGVydHlUYWJsZSgpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc090aGVycyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIsRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgTm9kZSBidXNpbmVzc05vZGUgPSBnZXRTZWxlY3RlZE5hdmlnYXRvck5vZGUoKTsKLSAgICBCdXNpbmVzc0VsZW1lbnQgYnVzaW5lc3NFbGVtZW50ID0gKEJ1c2luZXNzRWxlbWVudClidXNpbmVzc05vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBCdXNpbmVzc0VudGl0eSBidXNpbmVzc0VudGl0eSA9IGJ1c2luZXNzRWxlbWVudC5nZXRCdXNpbmVzc0VudGl0eSgpOwotICAgIExpc3RFbGVtZW50IGJ1c0xpc3RFbGVtZW50ID0gbmV3IExpc3RFbGVtZW50KGJ1c2luZXNzRW50aXR5KTsKLSAgICBWZWN0b3Igc2VydmljZUJ1c2luZXNzQ29weSA9IG5ldyBWZWN0b3IoKTsKLSAgICBzZXJ2aWNlQnVzaW5lc3NDb3B5LmFkZEVsZW1lbnQoYnVzTGlzdEVsZW1lbnQpOwotICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9CVVNJTkVTU19DT1BZLHNlcnZpY2VCdXNpbmVzc0NvcHkpOyAKLSAgICBib29sZWFuIHJlc3VsdCA9IHJlZ1B1Ymxpc2hTZXJ2aWNlU2ltcGxlQWN0aW9uXy5wcm9jZXNzT3RoZXJzKHBhcnNlcixmb3JtVG9vbFBJKTsKLSAgICBpZiAoIXByb3BlcnR5VGFibGVfLmNvbnRhaW5zS2V5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfU0VSVklDRV9QUk9WSURFUikpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9TRVJWSUNFX1BST1ZJREVSLGJ1c2luZXNzRW50aXR5KTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIHJldHVybiByZWdQdWJsaXNoU2VydmljZVNpbXBsZUFjdGlvbl8ucnVuKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0J1c2luZXNzR2V0U2VydmljZXNBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0J1c2luZXNzR2V0U2VydmljZXNBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE5NDU4YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9CdXNpbmVzc0dldFNlcnZpY2VzQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLkJ1c2luZXNzRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5CdXNpbmVzc05vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYnVzaW5lc3MuQnVzaW5lc3NFbnRpdHk7Ci0KLXB1YmxpYyBjbGFzcyBCdXNpbmVzc0dldFNlcnZpY2VzQWN0aW9uIGV4dGVuZHMgVURESU5vZGVBY3Rpb24KLXsKLSAgcHJpdmF0ZSBCdXNpbmVzc05vZGUgYnVzTm9kZV87Ci0gIHB1YmxpYyBCdXNpbmVzc0dldFNlcnZpY2VzQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIGJ1c05vZGVfID0gbnVsbDsKLSAgfQotCi0gIC8vIHVkZGkvYWN0aW9ucy9CdXNpbmVzc0dldFNlcnZpY2VzQWN0aW9uSlNQLmpzcD9ub2RlSWQ9Li4uCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJZCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigidWRkaS9hY3Rpb25zL0J1c2luZXNzR2V0U2VydmljZXNBY3Rpb25KU1AuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpLmFwcGVuZCgnPScpLmFwcGVuZChub2RlSWQpOwotICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiB2YWxpZGF0ZUJ1c2luZXNzKCkKLSAgewotICAgIGludCBidXNOb2RlSWQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBidXNOb2RlXyA9IChCdXNpbmVzc05vZGUpbm9kZU1hbmFnZXJfLmdldE5vZGUoYnVzTm9kZUlkKTsKLSAgICBCdXNpbmVzc0VsZW1lbnQgYnVzRWxlbWVudCA9IChCdXNpbmVzc0VsZW1lbnQpYnVzTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBSZWdGaW5kQnVzaW5lc3NVVUlEQWN0aW9uIHZlcmlmeUFjdGlvbiA9IG5ldyBSZWdGaW5kQnVzaW5lc3NVVUlEQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICBIYXNodGFibGUgcHJvcGVydHlUYWJsZSA9IHZlcmlmeUFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9PVkVSUklERV9BRERfUVVFUllfTk9ERSxCb29sZWFuLlRSVUUpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9CVVNJTkVTU19LRVksYnVzRWxlbWVudC5nZXRCdXNpbmVzc0VudGl0eSgpLmdldEJ1c2luZXNzS2V5KCkpOwotICAgIGJvb2xlYW4gcmVzdWx0ID0gdmVyaWZ5QWN0aW9uLnJ1bigpOwotICAgIGlmIChyZXN1bHQpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5MQVRFU1RfT0JKRUNULHByb3BlcnR5VGFibGUuZ2V0KFVERElBY3Rpb25JbnB1dHMuTEFURVNUX09CSkVDVCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rRm9ySGlzdG9yeSgpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgQnVzaW5lc3NFbnRpdHkgc3AgPSAoQnVzaW5lc3NFbnRpdHkpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuTEFURVNUX09CSkVDVCk7Ci0KLSAgICBSZWdGaW5kU2VydmljZXNBZHZhbmNlZEFjdGlvbiBhY3Rpb24gPSBuZXcgUmVnRmluZFNlcnZpY2VzQWR2YW5jZWRBY3Rpb24oY29udHJvbGxlcl8pOwotICAgIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlID0gYWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX05BTUUsdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk5PREVfTkFNRV9CVVNJTkVTU19TRVJWSUNFUyIsYnVzTm9kZV8uZ2V0Tm9kZU5hbWUoKSkpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX1BST1ZJREVSLHNwKTsgICAgCi0gICAgCi0gICAgTGlzdEVsZW1lbnQgYnVzaW5lc3NMaXN0RWxlbWVudCA9IG5ldyBMaXN0RWxlbWVudChzcCk7Ci0gICAgYnVzaW5lc3NMaXN0RWxlbWVudC5zZXRUYXJnZXRWaWV3VG9vbEluZm8oYnVzTm9kZV8uZ2V0Tm9kZUlkKCksYnVzTm9kZV8uZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLGJ1c05vZGVfLmdldFZpZXdJZCgpKTsKLSAgICBWZWN0b3IgYnVzaW5lc3NMaXN0VmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgIGJ1c2luZXNzTGlzdFZlY3Rvci5hZGRFbGVtZW50KGJ1c2luZXNzTGlzdEVsZW1lbnQpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9CVVNJTkVTUyxidXNpbmVzc0xpc3RWZWN0b3IpOwotICAgIAotICAgIAotICAgIHJldHVybiBhY3Rpb24ucnVuKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0NsZWFyTmF2aWdhdG9yRm9sZGVyTm9kZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvQ2xlYXJOYXZpZ2F0b3JGb2xkZXJOb2RlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkYmViODcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvQ2xlYXJOYXZpZ2F0b3JGb2xkZXJOb2RlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Nb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotCi1wdWJsaWMgY2xhc3MgQ2xlYXJOYXZpZ2F0b3JGb2xkZXJOb2RlQWN0aW9uIGV4dGVuZHMgQ2xlYXJOYXZpZ2F0b3JOb2RlQWN0aW9uCi17Ci0gIHB1YmxpYyBDbGVhck5hdmlnYXRvckZvbGRlck5vZGVBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICAvLyB1ZGRpL2FjdGlvbnMvQ2xlYXJOYXZpZ2F0b3JGb2xkZXJOb2RlQWN0aW9uLmpzcD9ub2RlSWQ9Li4uCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJZCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigidWRkaS9hY3Rpb25zL0NsZWFyTmF2aWdhdG9yRm9sZGVyTm9kZUFjdGlvbkpTUC5qc3A/Iik7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCkuYXBwZW5kKCc9JykuYXBwZW5kKG5vZGVJZCk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBpbnQgbm9kZUlkID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgaWYgKCFpc1N0YWxlTm9kZShub2RlSWQpKQotICAgIHsKLSAgICAgIE5vZGUgbm9kZSA9IG5vZGVNYW5hZ2VyXy5nZXROb2RlKG5vZGVJZCk7Ci0gICAgICBUcmVlRWxlbWVudCBlbGVtZW50ID0gbm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgZWxlbWVudC5kaXNjb25uZWN0UmVsKGVsZW1lbnQuZ2V0UHJvcGVydHlBc1N0cmluZyhNb2RlbENvbnN0YW50cy5SRUxfQ0hJTERSRU4pKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9DbGVhck5hdmlnYXRvck5vZGVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0NsZWFyTmF2aWdhdG9yTm9kZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYWY2M2U0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0NsZWFyTmF2aWdhdG9yTm9kZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkNsZWFyTm9kZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLQotcHVibGljIGNsYXNzIENsZWFyTmF2aWdhdG9yTm9kZUFjdGlvbiBleHRlbmRzIENsZWFyTm9kZUFjdGlvbgotewotICBwdWJsaWMgQ2xlYXJOYXZpZ2F0b3JOb2RlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIsY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCkpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuTk9ERUlELFN0cmluZy52YWx1ZU9mKGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCkuZ2V0TmF2aWdhdG9yTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZUlkKCkpKTsKLSAgfQotCi0gIC8vIHVkZGkvYWN0aW9ucy9DbGVhck5hdmlnYXRvck5vZGVBY3Rpb24uanNwP25vZGVJZD0uLi4KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlkKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ1ZGRpL2FjdGlvbnMvQ2xlYXJOYXZpZ2F0b3JOb2RlQWN0aW9uSlNQLmpzcD8iKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKS5hcHBlbmQoJz0nKS5hcHBlbmQobm9kZUlkKTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUcmVlQ29udGVudFZhcigpCi0gIHsKLSAgICByZXR1cm4gIm5hdmlnYXRvckNvbnRlbnQiOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUcmVlQ29udGVudFBhZ2UoKQotICB7Ci0gICAgcmV0dXJuICJ1ZGRpL25hdmlnYXRvcl9jb250ZW50LmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKQotICB7Ci0gICAgcmV0dXJuICJwcm9wZXJ0aWVzQ29udGFpbmVyIjsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclBhZ2UoKQotICB7Ci0gICAgcmV0dXJuICJ1ZGRpL3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRWYXIoKQotICB7Ci0gICAgcmV0dXJuICJzdGF0dXNDb250ZW50IjsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFBhZ2UoKQotICB7Ci0gICAgcmV0dXJuICJ1ZGRpL3N0YXR1c19jb250ZW50LmpzcCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0NsZWFyTmF2aWdhdG9yTm9kZXNBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0NsZWFyTmF2aWdhdG9yTm9kZXNBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTkyZTU2NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9DbGVhck5hdmlnYXRvck5vZGVzQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLQotcHVibGljIGNsYXNzIENsZWFyTmF2aWdhdG9yTm9kZXNBY3Rpb24gZXh0ZW5kcyBVRERJUHJvcGVydGllc0Zvcm1BY3Rpb24KLXsKLSAgcHVibGljIENsZWFyTmF2aWdhdG9yTm9kZXNBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmdbXSBzZWxlY3RlZE5vZGVJZHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgIGlmIChzZWxlY3RlZE5vZGVJZHMgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlNFTEVDVEVEX05PREVJRFMsc2VsZWN0ZWROb2RlSWRzKTsKLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNFTEVDVEVEX05PREVJRFMpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgU3RyaW5nW10gc2VsZWN0ZWROb2RlSWRzID0gKFN0cmluZ1tdKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlNFTEVDVEVEX05PREVJRFMpOwotICAgIGlmIChzZWxlY3RlZE5vZGVJZHMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBDbGVhck5hdmlnYXRvck5vZGVBY3Rpb24gYWN0aW9uID0gbmV3IENsZWFyTmF2aWdhdG9yTm9kZUFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgICBIYXNodGFibGUgcHJvcGVydHlUYWJsZSA9IGFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxzZWxlY3RlZE5vZGVJZHMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgcHJvcGVydHlUYWJsZS5wdXQoQWN0aW9uSW5wdXRzLk5PREVJRCxzZWxlY3RlZE5vZGVJZHNbaV0pOwotICAgICAgICBhY3Rpb24ucnVuKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9Db21tb25QdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9Db21tb25QdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3NDAzOTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvQ29tbW9uUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLkJ1c2luZXNzRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLk11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlJlZ2lzdHJ5Tm9kZTsKLWltcG9ydCBvcmcudWRkaTRqLmNsaWVudC5VRERJUHJveHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5CdXNpbmVzc0luZm87Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5SZWdpc3RlcmVkSW5mbzsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIENvbW1vblB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24gZXh0ZW5kcyBVRERJUHJvcGVydGllc0Zvcm1BY3Rpb24KLXsKLQotICBwcm90ZWN0ZWQgUmVnaXN0cnlOb2RlIHJlZ2lzdHJ5Tm9kZV87Ci0gIHByb3RlY3RlZCBib29sZWFuIGlzTG9nZ2VkSW5fOwotCi0gIHB1YmxpYyBDb21tb25QdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotCi0gICAgcmVnaXN0cnlOb2RlXyA9IGdldFJlZ2lzdHJ5Tm9kZSgpOwotICAgIGlmIChyZWdpc3RyeU5vZGVfICE9IG51bGwpCi0gICAgICBpc0xvZ2dlZEluXyA9ICgoUmVnaXN0cnlFbGVtZW50KXJlZ2lzdHJ5Tm9kZV8uZ2V0VHJlZUVsZW1lbnQoKSkuaXNMb2dnZWRJbigpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgc3luY2hyb25pemVVRERJT2JqZWN0VGFibGUoKSB7Ci0gICAgU3RyaW5nW10gc2VsZWN0ZWRCdXNJZHMgPSAoU3RyaW5nW10pcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUFVCTElTSEVSX0FTU0VSVElPTlNfU0VMRUNURURfQlVTX0lEKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpLmdldE5hdmlnYXRvck1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBGb3JtVG9vbCBmb3JtVG9vbCA9IChGb3JtVG9vbCkoc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpKTsKLSAgICBTdHJpbmcgc3ViUXVlcnlLZXkgPSAoU3RyaW5nKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZKTsKLSAgICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSA9ICgoTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UpZm9ybVRvb2wpLmdldEZvcm1Ub29sUHJvcGVydGllcyhzdWJRdWVyeUtleSk7Ci0gICAgVmVjdG9yIGJ1c2luZXNzVmVjdG9yID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQUREX1BVQkxJU0hFUl9BU1NFUlRJT05TKTsKLSAgICBMaXN0TWFuYWdlciBidXNpbmVzc0NvcHkgPSAoTGlzdE1hbmFnZXIpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FERF9QVUJMSVNIRVJfQVNTRVJUSU9OU19DT1BZKTsKLSAgICBpZiAoc2VsZWN0ZWRCdXNJZHMgPT0gbnVsbCB8fCBzZWxlY3RlZEJ1c0lkcy5sZW5ndGggPD0gMCkgewotICAgICAgYnVzaW5lc3NWZWN0b3IucmVtb3ZlQWxsRWxlbWVudHMoKTsKLSAgICAgIGJ1c2luZXNzQ29weS5jbGVhcigpOwotICAgIH0KLSAgICBFbnVtZXJhdGlvbiBlID0gYnVzaW5lc3NDb3B5LmdldExpc3RFbGVtZW50cygpOwotICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICBib29sZWFuIGlzSWRGb3VuZCA9IGZhbHNlOwotICAgICAgTGlzdEVsZW1lbnQgbGUgPSAoTGlzdEVsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgICAgaW50IGxpc3RFbGVtZW50Vmlld0lkID0gbGUuZ2V0Vmlld0lkKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNlbGVjdGVkQnVzSWRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIGlmIChsaXN0RWxlbWVudFZpZXdJZCA9PSBJbnRlZ2VyLnBhcnNlSW50KHNlbGVjdGVkQnVzSWRzW2ldKSkgewotICAgICAgICAgIGlzSWRGb3VuZCA9IHRydWU7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmICghaXNJZEZvdW5kKQotICAgICAgICBidXNpbmVzc1ZlY3Rvci5yZW1vdmUobGUpOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIGlzQnVzaW5lc3NPd25lZChCdXNpbmVzc0VsZW1lbnQgYnVzRWxlbWVudCkgewotICAgIGJvb2xlYW4gaXNCdXNpbmVzc093bmVkID0gZmFsc2U7Ci0gICAgU3RyaW5nIGlzQnVzaW5lc3NPd25lZFN0cmluZyA9IGJ1c0VsZW1lbnQuZ2V0UHJvcGVydHlBc1N0cmluZyhVRERJTW9kZWxDb25zdGFudHMuSVNfQlVTSU5FU1NfT1dORUQpOwotICAgIGlmIChpc0J1c2luZXNzT3duZWRTdHJpbmcgIT0gbnVsbCkgewotICAgICAgaXNCdXNpbmVzc093bmVkID0gQm9vbGVhbi52YWx1ZU9mKGlzQnVzaW5lc3NPd25lZFN0cmluZykuYm9vbGVhblZhbHVlKCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGlzTG9nZ2VkSW5fKSB7Ci0gICAgICB0cnkgewotICAgICAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnaXN0cnlOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgICBVRERJUHJveHkgcHJveHkgPSByZWdFbGVtZW50LmdldFByb3h5KCk7Ci0gICAgICAgIFJlZ2lzdGVyZWRJbmZvIHJpID0gcHJveHkuZ2V0X3JlZ2lzdGVyZWRJbmZvKHJlZ0VsZW1lbnQuZ2V0QXV0aEluZm9TdHJpbmcoKSk7Ci0gICAgICAgIFZlY3RvciBiZVZlY3RvciA9IHJpLmdldEJ1c2luZXNzSW5mb3MoKS5nZXRCdXNpbmVzc0luZm9WZWN0b3IoKTsKLSAgICAgICAgZm9yIChJdGVyYXRvciBpdCA9IGJlVmVjdG9yLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgICAgIHsgCi0gICAgICAgICAgQnVzaW5lc3NJbmZvIGJpID0gKEJ1c2luZXNzSW5mbylpdC5uZXh0KCk7Ci0gICAgICAgICAgaWYgKGJpLmdldEJ1c2luZXNzS2V5KCkuZXF1YWxzKGJ1c0VsZW1lbnQuZ2V0QnVzaW5lc3NFbnRpdHkoKS5nZXRCdXNpbmVzc0tleSgpKSkKLSAgICAgICAgICB7ICAKLSAgICAgICAgICAgIGlzQnVzaW5lc3NPd25lZCA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnVzRWxlbWVudC5zZXRQcm9wZXJ0eUFzU3RyaW5nKFVERElNb2RlbENvbnN0YW50cy5JU19CVVNJTkVTU19PV05FRCwgU3RyaW5nLnZhbHVlT2YoaXNCdXNpbmVzc093bmVkKSk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9Ci0gICAgfQotICAgIHJldHVybiBpc0J1c2luZXNzT3duZWQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0NvbXBsZXRlUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvQ29tcGxldGVQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxODRiNGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvQ29tcGxldGVQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5CdXNpbmVzc0VsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlB1Ymxpc2hlckFzc2VydGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVmFsaWRhdG9yOwotaW1wb3J0IG9yZy51ZGRpNGouVURESUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLmNsaWVudC5VRERJUHJveHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5Db21wbGV0aW9uU3RhdHVzOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuRGlzcG9zaXRpb25SZXBvcnQ7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5SZXN1bHQ7Ci1pbXBvcnQgb3JnLnVkZGk0ai50cmFuc3BvcnQuVHJhbnNwb3J0RXhjZXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgQ29tcGxldGVQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uIGV4dGVuZHMgQ29tbW9uUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbgotewotICBwdWJsaWMgQ29tcGxldGVQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gcHJvY2Vzc1BhcnNlZFJlc3VsdHMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIGlmIChyZWdpc3RyeU5vZGVfID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBib29sZWFuIGlucHV0c1ZhbGlkID0gdHJ1ZTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICBGb3JtVG9vbCBmb3JtVG9vbCA9IGdldFNlbGVjdGVkRm9ybVRvb2woKTsKLQotICAgIC8vIGlkcyBmcm9tIHVkZGlPYmplY3RzX3RhYmxlCi0gICAgU3RyaW5nW10gc2VsZWN0ZWRCdXNJZHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUFVCTElTSEVSX0FTU0VSVElPTlNfU0VMRUNURURfQlVTX0lEKTsKLSAgICBpZiAoc2VsZWN0ZWRCdXNJZHMgIT0gbnVsbCAmJiBzZWxlY3RlZEJ1c0lkcy5sZW5ndGggPiAwKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUFVCTElTSEVSX0FTU0VSVElPTlNfU0VMRUNURURfQlVTX0lELCBzZWxlY3RlZEJ1c0lkcyk7Ci0gICAgLy8gU3luY2hyb25pemUgY2xpZW50IHZpZXcgYW5kIHNlcnZlciBtb2RlbCAodWRkaU9iamVjdF90YWJsZS5qc3ApCi0gICAgc3luY2hyb25pemVVRERJT2JqZWN0VGFibGUoKTsKLQotICAgIC8vIGlmIG5vdCB5ZXQgbG9nZ2VkIGluLCB2YWxpZGF0ZSB0aGUgcGFyYW1ldGVycyBuZWVkZWQgdG8gbG9nIGluCi0gICAgaWYgKCFpc0xvZ2dlZEluXykgewotICAgICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgICAgU3RyaW5nIHVzZXJJRCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgICAgU3RyaW5nIHBhc3N3b3JkID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEKTsKLQotICAgICAgaWYgKHB1Ymxpc2hVUkwgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwscHVibGlzaFVSTCk7Ci0gICAgICAgIGZvcm1Ub29sLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwscHVibGlzaFVSTCk7Ci0gICAgICB9Ci0gIAotICAgICAgaWYgKCFWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmcocHVibGlzaFVSTCkpCi0gICAgICB7Ci0gICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIGZvcm1Ub29sLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX1BVQkxJU0hfVVJMIikpOwotICAgICAgfQotCi0gICAgICBpZiAodXNlcklEICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCx1c2VySUQpOwotICAgICAgICBmb3JtVG9vbC5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCx1c2VySUQpOwotICAgICAgfQotICAKLSAgICAgIGlmICghVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nKHVzZXJJRCkpCi0gICAgICB7Ci0gICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIGZvcm1Ub29sLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9VU0VSSUQiKSk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChwYXNzd29yZCAhPSBudWxsKQotICAgICAgewotICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCxwYXNzd29yZCk7Ci0gICAgICAgIGZvcm1Ub29sLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQscGFzc3dvcmQpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIGlkcyBmcm9tIHB1Ymxpc2hlciBhc3NlcnRpb24gdGFibGUKLSAgICBTdHJpbmdbXSBwdWJBc3NlcnRpb25zVmlld0lkcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5QVUJMSVNIRVJfQVNTRVJUSU9OU19WSUVXSUQpOwotICAgIGlmIChwdWJBc3NlcnRpb25zVmlld0lkcyA9PSBudWxsIHx8IHB1YkFzc2VydGlvbnNWaWV3SWRzLmxlbmd0aCA9PSAwKQotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICBlbHNlCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5QVUJMSVNIRVJfQVNTRVJUSU9OU19WSUVXSUQsIHB1YkFzc2VydGlvbnNWaWV3SWRzKTsKLQotICAgIHJldHVybiBpbnB1dHNWYWxpZDsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBpZiAocmVnaXN0cnlOb2RlXyA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ2lzdHJ5RWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnaXN0cnlOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLQotICAgIC8vIGlmIG5vdCB5ZXQgbG9nZ2VkIGluLCBsb2cgaW4gZmlyc3QKLSAgICBpZiAoIWlzTG9nZ2VkSW5fKSB7Ci0gICAgICBTdHJpbmcgcHVibGlzaFVSTCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgICAgU3RyaW5nIHVzZXJJRCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICAgIFN0cmluZyBwYXNzd29yZCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotCi0gICAgICB0cnkgewotICAgICAgICByZWdpc3RyeUVsZW1lbnQucGVyZm9ybUxvZ2luKHB1Ymxpc2hVUkwsIHVzZXJJRCwgcGFzc3dvcmQpOwotICAgICAgfQotICAgICAgY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiB0ZSkgewotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlRyYW5zcG9ydEV4Y2VwdGlvbiIpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh0ZS5nZXRNZXNzYWdlKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiB1ZGRpZSkgewotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlVERElFeGNlcHRpb24iKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaWUudG9TdHJpbmcoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gbWUpIHsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJNYWxmb3JtZWRVUkxFeGNlcHRpb24iKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UobWUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfSAgICAgIAotICAgIH0KLQotICAgIFVERElQcm94eSBwcm94eSA9IHJlZ2lzdHJ5RWxlbWVudC5nZXRQcm94eSgpOwotICAgIHJlZ2lzdHJ5RWxlbWVudC5nZXRVc2VySWQoKTsKLSAgICByZWdpc3RyeUVsZW1lbnQuZ2V0Q3JlZCgpOwotICAgIEJ1c2luZXNzRWxlbWVudCBidXNFbGVtZW50ID0gKEJ1c2luZXNzRWxlbWVudClzZWxlY3RlZEVsZW1lbnQ7Ci0gICAgTGlzdE1hbmFnZXIgcHViQXNzZXJ0aW9ucyA9IGJ1c0VsZW1lbnQuZ2V0UHVibGlzaGVyQXNzZXJ0aW9ucygpOwotCi0gICAgLy8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBpcyBhIG93bmVkIGJ1c2luZXNzCi0gICAgLy8gaWYgbm90LCB0aGUgQWRkUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbiBjYW5ub3QgYmUgcGVyZm9ybWVkCi0gICAgaWYgKCFpc0J1c2luZXNzT3duZWQoYnVzRWxlbWVudCkpIHsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT1RfT1dORURfQlVTSU5FU1MiKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICB0cnkgewotICAgICAgU3RyaW5nW10gcHViQXNzZXJ0aW9uVmlld0lkcyA9IChTdHJpbmdbXSlwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5QVUJMSVNIRVJfQVNTRVJUSU9OU19WSUVXSUQpOwotICAgICAgVmVjdG9yIHB1YkFzc2VydGlvblZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLQotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwdWJBc3NlcnRpb25WaWV3SWRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIGludCB2aWV3SUQgPSBJbnRlZ2VyLnBhcnNlSW50KHB1YkFzc2VydGlvblZpZXdJZHNbaV0pOwotICAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IHB1YkFzc2VydGlvbnMuZ2V0RWxlbWVudFdpdGhWaWV3SWQodmlld0lEKTsKLSAgICAgICAgUHVibGlzaGVyQXNzZXJ0aW9uRWxlbWVudCBwdWJBc3NlcnRpb25FbGVtZW50ID0gKFB1Ymxpc2hlckFzc2VydGlvbkVsZW1lbnQpbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgIGlmICghKHB1YkFzc2VydGlvbkVsZW1lbnQuZ2V0U3RhdHVzKCkuZXF1YWxzKENvbXBsZXRpb25TdGF0dXMuQ09NUExFVEUpKSkKLSAgICAgICAgICBwdWJBc3NlcnRpb25WZWN0b3IuYWRkKHB1YkFzc2VydGlvbkVsZW1lbnQuZ2V0UHVibGlzaGVyQXNzZXJ0aW9uKCkpOwotICAgICAgfQotCi0gICAgICBpZiAocHViQXNzZXJ0aW9uVmVjdG9yLnNpemUoKSA8PSAwKSB7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9fSU5DT01QTEVURV9BU1NFUlRJT05fU0VMRUNURUQiKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLQotICAgICAgRGlzcG9zaXRpb25SZXBvcnQgcmVwb3J0ID0gcHJveHkuYWRkX3B1Ymxpc2hlckFzc2VydGlvbnMocmVnaXN0cnlFbGVtZW50LmdldEF1dGhJbmZvU3RyaW5nKCksIHB1YkFzc2VydGlvblZlY3Rvcik7Ci0gICAgICAvL3JlcG9ydCBzdGF0dXMKLQkgIFZlY3RvciByZXBvcnRFcnJJbmZvID0gcmVwb3J0LmdldFJlc3VsdFZlY3RvcigpOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByZXBvcnRFcnJJbmZvLnNpemUoKTsgaisrKSB7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCgoUmVzdWx0KSByZXBvcnRFcnJJbmZvLmdldChqKSkuZ2V0RXJySW5mbygpLmdldFRleHQoKSk7Ci0gICAgICB9Ci0KLSAgICAgIFNob3dQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uIHNob3dQQUFjdGlvbiA9IG5ldyBTaG93UHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgICBIYXNodGFibGUgcHJvcGVydHlUYWJsZSA9IHNob3dQQUFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgICBPYmplY3QgaWRzID0gcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUFVCTElTSEVSX0FTU0VSVElPTlNfU0VMRUNURURfQlVTX0lEKTsKLSAgICAgIGlmIChpZHMgIT0gbnVsbCkKLSAgICAgICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5QVUJMSVNIRVJfQVNTRVJUSU9OU19TRUxFQ1RFRF9CVVNfSUQsIGlkcyk7Ci0gICAgICBzaG93UEFBY3Rpb24ucnVuKCk7Ci0KLSAgICAgIHJldHVybiByZXBvcnQuc3VjY2VzcygpOwotICAgIH0KLSAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiB1ZGRpZSkgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVURESUV4Y2VwdGlvbiIpOwotICAgICAgRGlzcG9zaXRpb25SZXBvcnQgcmVwb3J0ID0gdWRkaWUuZ2V0RGlzcG9zaXRpb25SZXBvcnQoKTsKLQkgIFZlY3RvciByZXBvcnRFcnJJbmZvID0gcmVwb3J0LmdldFJlc3VsdFZlY3RvcigpOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByZXBvcnRFcnJJbmZvLnNpemUoKTsgaisrKSB7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCgoUmVzdWx0KSByZXBvcnRFcnJJbmZvLmdldChqKSkuZ2V0RXJySW5mbygpLmdldFRleHQoKSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiRXhjZXB0aW9uIik7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9GaW5kQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9GaW5kQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2MzdmOGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvRmluZEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Nb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyLklUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlF1ZXJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUXVlcnlQYXJlbnRFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuUXVlcnlOb2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlJlZ2lzdHJ5Tm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5TdWJRdWVyeVRyYW5zZmVyVGFyZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5WYWxpZGF0b3I7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBGaW5kQWN0aW9uIGV4dGVuZHMgVURESVByb3BlcnRpZXNGb3JtQWN0aW9uCi17Ci0gIHByb3RlY3RlZCBRdWVyeUVsZW1lbnQgcXVlcnlFbGVtZW50XzsKLSAgcHJvdGVjdGVkIFN0cmluZyBzdWJRdWVyeUtleV87Ci0gIHByb3RlY3RlZCBib29sZWFuIGlzU3ViUXVlcnlHZXRfOwotICBwcm90ZWN0ZWQgU3RyaW5nIG5ld1N1YlF1ZXJ5XzsKLSAgcHJvdGVjdGVkIFN0cmluZyBuZXdTdWJRdWVyeUl0ZW1fOwotICBwcm90ZWN0ZWQgYm9vbGVhbiBzdWJRdWVyeUluaXRpYXRlZF87Ci0gIHByb3RlY3RlZCBSZWdpc3RyeU5vZGUgcmVnTm9kZV87Ci0gIHByaXZhdGUgYm9vbGVhbiBpc1JlZnJlc2hBY3Rpb25fOwotCi0gIHB1YmxpYyBGaW5kQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIHF1ZXJ5RWxlbWVudF8gPSBudWxsOwotICAgIHN1YlF1ZXJ5S2V5XyA9IG51bGw7Ci0gICAgaXNTdWJRdWVyeUdldF8gPSBmYWxzZTsKLSAgICBzdWJRdWVyeUluaXRpYXRlZF8gPSBmYWxzZTsKLSAgICByZWdOb2RlXyA9IGdldFJlZ2lzdHJ5Tm9kZSgpOwotICAgIGlzUmVmcmVzaEFjdGlvbl8gPSBmYWxzZTsKLSAgfQotCi0gIHByb3RlY3RlZCBhYnN0cmFjdCBib29sZWFuIHByb2Nlc3NPdGhlcnMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyLEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gcHJvY2Vzc1BhcnNlZFJlc3VsdHMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIC8vIFNldHVwIGZvciBNdWx0aXBhcnRGb3JtRGF0YVBhcnNlclRyYW5zZm9ybWVyCi0gICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5NVUxUSVBBUlRfRk9STV9EQVRBX1BBUlNFUiwgcGFyc2VyKTsKLQotICAgIG5ld1N1YlF1ZXJ5XyA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5ORVdfU1VCUVVFUllfSU5JVElBVEVEKTsKLSAgICBTdHJpbmcgaXNTdWJRdWVyeUdldFN0cmluZyA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9HRVQpOwotICAgIG5ld1N1YlF1ZXJ5SXRlbV8gPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuTkVXX1NVQlFVRVJZX1FVRVJZX0lURU0pOwotICAgIHN1YlF1ZXJ5S2V5XyA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVkpOwotICAgIFN0cmluZyBxdWVyeU5hbWUgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfTkFNRSk7Ci0KLSAgICAvLyBWYWxpZGF0ZSB0aGUgZGF0YS4KLSAgICBib29sZWFuIGlucHV0c1ZhbGlkID0gdHJ1ZTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLQotICAgIEZvcm1Ub29sIGZvcm1Ub29sID0gZ2V0U2VsZWN0ZWRGb3JtVG9vbCgpOwotICAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJID0gKChNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSlmb3JtVG9vbCkuZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHN1YlF1ZXJ5S2V5Xyk7Ci0gICAgZm9ybVRvb2xQSS5jbGVhckVycm9ycygpOwotCi0gICAgaWYgKG5ld1N1YlF1ZXJ5XyAhPSBudWxsICYmIG5ld1N1YlF1ZXJ5Xy5sZW5ndGgoKSA+IDApCi0gICAgICBzdWJRdWVyeUluaXRpYXRlZF8gPSB0cnVlOwotICAgIGVsc2UKLSAgICAgIHN1YlF1ZXJ5SW5pdGlhdGVkXyA9IGZhbHNlOwotICAgICAgCi0gICAgaWYgKGlzU3ViUXVlcnlHZXRTdHJpbmcgIT0gbnVsbCkKLSAgICAgIGlzU3ViUXVlcnlHZXRfID0gQm9vbGVhbi52YWx1ZU9mKGlzU3ViUXVlcnlHZXRTdHJpbmcpLmJvb2xlYW5WYWx1ZSgpOwotCi0gICAgaWYgKHF1ZXJ5TmFtZSAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfTkFNRSxxdWVyeU5hbWUpOwotCi0gICAgaWYgKCFWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmcocXVlcnlOYW1lKSAmJiAhc3ViUXVlcnlJbml0aWF0ZWRfKQotICAgIHsKLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICBmb3JtVG9vbFBJLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX05BTUUpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX1FVRVJZX05BTUUiKSk7Ci0gICAgfQotCi0gICAgaWYgKCFwcm9jZXNzT3RoZXJzKHBhcnNlcixmb3JtVG9vbFBJKSAmJiAhc3ViUXVlcnlJbml0aWF0ZWRfKQotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgIAotICAgIGZvciAoaW50IGk9MDtpPHJlbW92ZWRQcm9wZXJ0aWVzXy5zaXplKCk7aSsrKQotICAgICAgZm9ybVRvb2xQSS5yZW1vdmVQcm9wZXJ0eShyZW1vdmVkUHJvcGVydGllc18uZWxlbWVudEF0KGkpKTsKLSAgICBmb3JtVG9vbFBJLnVwZGF0ZVByb3BlcnR5VGFibGUocHJvcGVydHlUYWJsZV8pOwotICAgICAgCi0gICAgLy8gUHJvY2VzcyBhdXRoZW50aWNhdGlvbiBpbmZvcm1hdGlvbi4gSWYgdmFsaWQsIHRoZXNlIHNob3VsZCBiZSBzZXQgaW4gdGhlIGZvcm1Ub29sIChub3QgdGhlIGZvcm1Ub29sUEkpLgotICAgIFN0cmluZyBvd25lZENoZWNrZWQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfT1dORUQpOwotICAgIFN0cmluZyBwdWJsaXNoVVJMID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICBTdHJpbmcgdXNlcklkID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICAgU3RyaW5nIHBhc3N3b3JkID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEKTsKLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLQotICAgIGJvb2xlYW4gdmFsaWRhdGVBdXRoZW50aWNhdGlvbiA9IChvd25lZENoZWNrZWQgIT0gbnVsbCkgJiYgKCFyZWdFbGVtZW50LmlzTG9nZ2VkSW4oKSkgJiYgIW92ZXJyaWRlQXV0aGVudGljYXRpb25WYWxpZGF0aW9uKCk7Ci0KLSAgICBpZiAocHVibGlzaFVSTCAhPSBudWxsKQotICAgIHsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMLHB1Ymxpc2hVUkwpOwotICAgICAgZm9ybVRvb2wuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCxwdWJsaXNoVVJMKTsKLSAgICB9ICAgICAgCi0KLSAgICBpZiAoIXN1YlF1ZXJ5SW5pdGlhdGVkXyAmJiB2YWxpZGF0ZUF1dGhlbnRpY2F0aW9uICYmICFWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmcocHVibGlzaFVSTCkpCi0gICAgewotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgIGZvcm1Ub29sLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9QVUJMSVNIX1VSTCIpKTsKLSAgICB9Ci0KLSAgICBpZiAodXNlcklkICE9IG51bGwpCi0gICAgewotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklELHVzZXJJZCk7Ci0gICAgICBmb3JtVG9vbC5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCx1c2VySWQpOwotICAgIH0KLQotICAgIGlmICghc3ViUXVlcnlJbml0aWF0ZWRfICYmIHZhbGlkYXRlQXV0aGVudGljYXRpb24gJiYgIVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZyh1c2VySWQpKQotICAgIHsKLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICBmb3JtVG9vbC5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX1VTRVJJRCIpKTsKLSAgICB9Ci0KLSAgICBpZiAocGFzc3dvcmQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCxwYXNzd29yZCk7Ci0gICAgICBmb3JtVG9vbC5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JELHBhc3N3b3JkKTsKLSAgICB9ICAgICAgICAKLSAgICAgIAotICAgIHJldHVybiBpbnB1dHNWYWxpZDsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIG92ZXJyaWRlQXV0aGVudGljYXRpb25WYWxpZGF0aW9uKCkKLSAgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNTdWJRdWVyeUluaXRpYXRlZCgpCi0gIHsKLSAgICByZXR1cm4gc3ViUXVlcnlJbml0aWF0ZWRfOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBpc1N1YlF1ZXJ5R2V0KCkKLSAgewotICAgIHJldHVybiBpc1N1YlF1ZXJ5R2V0XzsKLSAgfSAgICAKLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN1YlF1ZXJ5S2V5KCkKLSAgewotICAgIHJldHVybiBzdWJRdWVyeUtleV87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldE5ld1N1YlF1ZXJ5KCkKLSAgewotICAgIHJldHVybiBuZXdTdWJRdWVyeV87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldE5ld1N1YlF1ZXJ5SXRlbSgpCi0gIHsKLSAgICByZXR1cm4gbmV3U3ViUXVlcnlJdGVtXzsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0UmVmcmVzaEFjdGlvbihib29sZWFuIGlzUmVmcmVzaEFjdGlvbikKLSAgewotICAgIGlzUmVmcmVzaEFjdGlvbl8gPSBpc1JlZnJlc2hBY3Rpb247Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIGlzUmVmcmVzaEFjdGlvbigpCi0gIHsKLSAgICByZXR1cm4gaXNSZWZyZXNoQWN0aW9uXzsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIGFkZFF1ZXJ5Tm9kZSgpCi0gIHsKLSAgICAvLyBJZiB0aGUgcXVlcnlFbGVtZW50IGFscmVhZHkgZXhpc3RzLCByZW1vdmUgaXQgZmlyc3QuCi0gICAgU3RyaW5nIHF1ZXJ5TmFtZSA9IHF1ZXJ5RWxlbWVudF8uZ2V0TmFtZSgpOwotICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgIFF1ZXJ5UGFyZW50RWxlbWVudCBxdWVyeVBhcmVudEVsZW1lbnQgPSByZWdFbGVtZW50LmdldFF1ZXJ5UGFyZW50RWxlbWVudCgpOwotICAgIEVudW1lcmF0aW9uIGUgPSBxdWVyeVBhcmVudEVsZW1lbnQuZ2V0UXVlcmllcygpOwotICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIFF1ZXJ5RWxlbWVudCBxZSA9IChRdWVyeUVsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgICAgaWYgKHFlLmdldE5hbWUoKS5lcXVhbHMocXVlcnlOYW1lKSkKLSAgICAgIHsKLSAgICAgICAgU3ViUXVlcnlUcmFuc2ZlclRhcmdldCBzdWJRdWVyeVRyYW5zZmVyVGFyZ2V0ID0gKFN1YlF1ZXJ5VHJhbnNmZXJUYXJnZXQpcWUuZ2V0UHJvcGVydHlBc09iamVjdChVRERJTW9kZWxDb25zdGFudHMuU1VCUVVFUllfVFJBTlNGRVJfVEFSR0VUKTsKLSAgICAgICAgaWYgKHN1YlF1ZXJ5VHJhbnNmZXJUYXJnZXQgIT0gbnVsbCAmJiAocWUuZ2V0UXVlcnlUeXBlKCkgPT0gcXVlcnlFbGVtZW50Xy5nZXRRdWVyeVR5cGUoKSkpCi0gICAgICAgICAgcXVlcnlFbGVtZW50Xy5zZXRQcm9wZXJ0eUFzT2JqZWN0KFVERElNb2RlbENvbnN0YW50cy5TVUJRVUVSWV9UUkFOU0ZFUl9UQVJHRVQsc3ViUXVlcnlUcmFuc2ZlclRhcmdldCk7Ci0gICAgICAgIHFlLmRpc2Nvbm5lY3RBbGwoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIGlmICghaXNSZWZyZXNoQWN0aW9uXykKLSAgICB7Ci0gICAgICAvLyBXZSBjYW4gbWFrZSBzYWZlIGFzc3VtcHRpb25zIGFib3V0IHRoZSBub2RlIHRoYXQgaXMgY3VycmVudGx5IHNlbGVjdGVkLgotICAgICAgaWYgKHN1YlF1ZXJ5S2V5XyAhPSBudWxsICYmIHN1YlF1ZXJ5S2V5Xy5sZW5ndGgoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBwYXJlbnRRdWVyeUtleTsKLSAgICAgICAgaW50IGxhc3RTZXBhcmF0b3JQb3MgPSBzdWJRdWVyeUtleV8ubGFzdEluZGV4T2YoJzonKTsKLSAgICAgICAgaWYgKGxhc3RTZXBhcmF0b3JQb3MgPT0gLTEpCi0gICAgICAgICAgcGFyZW50UXVlcnlLZXkgPSAiIjsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHBhcmVudFF1ZXJ5S2V5ID0gc3ViUXVlcnlLZXlfLnN1YnN0cmluZygwLGxhc3RTZXBhcmF0b3JQb3MpOwotICAgICAgICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgcGFyZW50Rm9ybVRvb2xQSSA9ICgoTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UpZ2V0U2VsZWN0ZWRGb3JtVG9vbCgpKS5nZXRGb3JtVG9vbFByb3BlcnRpZXMocGFyZW50UXVlcnlLZXkpOwotICAgICAgICBPYmplY3QgcXVlcnlJdGVtID0gcGFyZW50Rm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU0pOwotICAgICAgICBPYmplY3QgcXVlcnlTdHlsZUJ1cyA9IHBhcmVudEZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9CVVNJTkVTU0VTKTsKLSAgICAgICAgT2JqZWN0IHF1ZXJ5U3R5bGVTZXIgPSBwYXJlbnRGb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRVMpOwotICAgICAgICBPYmplY3QgcXVlcnlTdHlsZVNlckludCA9IHBhcmVudEZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFX0lOVEVSRkFDRVMpOwotICAgICAgICBIYXNodGFibGUgcGFyZW50UXVlcnlEYXRhID0gbmV3IEhhc2h0YWJsZSgpOwotICAgICAgICBpZiAocXVlcnlJdGVtICE9IG51bGwpCi0gICAgICAgICAgcGFyZW50UXVlcnlEYXRhLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU0sIHF1ZXJ5SXRlbSk7Ci0gICAgICAgIGlmIChxdWVyeVN0eWxlQnVzICE9IG51bGwpCi0gICAgICAgICAgcGFyZW50UXVlcnlEYXRhLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0JVU0lORVNTRVMsIHF1ZXJ5U3R5bGVCdXMpOwotICAgICAgICBpZiAocXVlcnlTdHlsZVNlciAhPSBudWxsKQotICAgICAgICAgIHBhcmVudFF1ZXJ5RGF0YS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFUywgcXVlcnlTdHlsZVNlcik7Ci0gICAgICAgIGlmIChxdWVyeVN0eWxlU2VySW50ICE9IG51bGwpCi0gICAgICAgICAgcGFyZW50UXVlcnlEYXRhLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VfSU5URVJGQUNFUywgcXVlcnlTdHlsZVNlckludCk7Ci0gICAgICAgIHF1ZXJ5RWxlbWVudF8uc2V0UHJvcGVydHlBc09iamVjdChVRERJTW9kZWxDb25zdGFudHMuU1VCUVVFUllfVFJBTlNGRVJfVEFSR0VULG5ldyBTdWJRdWVyeVRyYW5zZmVyVGFyZ2V0KGdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpLHN1YlF1ZXJ5S2V5XyxwYXJlbnRRdWVyeURhdGEpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcXVlcnlQYXJlbnRFbGVtZW50LmNvbm5lY3QocXVlcnlFbGVtZW50XyxVRERJTW9kZWxDb25zdGFudHMuUkVMX1FVRVJJRVMsTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICBRdWVyeU5vZGUgcXVlcnlOb2RlID0gKFF1ZXJ5Tm9kZSkocmVnTm9kZV8uZ2V0Q2hpbGROb2RlKHF1ZXJ5UGFyZW50RWxlbWVudCkuZ2V0Q2hpbGROb2RlKHF1ZXJ5RWxlbWVudF8pKTsKLSAgICBpbnQgbmV3U2VsZWN0ZWROb2RlSWQ7Ci0gICAgLy8gSWYgdGhlcmUgaXMgb25seSAxIHJlc3VsdCwgc2VsZWN0IHRoZSByZXN1bHQuIE90aGVyd2lzZSwgc2VsZWN0IHRoZSBxdWVyeSBub2RlIHRvIHByZXNlbnQgYSBzdW1tYXJ5LgotICAgIGlmIChxdWVyeU5vZGUuZ2V0Q2hpbGROb2RlcygpLnNpemUoKSA9PSAxICYmIChzdWJRdWVyeUtleV8gPT0gbnVsbCB8fCBzdWJRdWVyeUtleV8ubGVuZ3RoKCkgPT0gMCkpCi0gICAgICBuZXdTZWxlY3RlZE5vZGVJZCA9ICgoTm9kZSkocXVlcnlOb2RlLmdldENoaWxkTm9kZXMoKS5lbGVtZW50QXQoMCkpKS5nZXROb2RlSWQoKTsKLSAgICBlbHNlCi0gICAgICBuZXdTZWxlY3RlZE5vZGVJZCA9IHF1ZXJ5Tm9kZS5nZXROb2RlSWQoKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHJlZ05vZGVfLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgbm9kZU1hbmFnZXIuc2V0U2VsZWN0ZWROb2RlSWQobmV3U2VsZWN0ZWROb2RlSWQpOwotICAgIHF1ZXJ5Tm9kZS5zZXRGaW5kVG9vbFByb3BlcnRpZXModGhpcyk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBUb29sTWFuYWdlciB0b29sTWFuYWdlciA9IHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKTsKLSAgICBUb29sIHNlbGVjdGVkVG9vbCA9IHRvb2xNYW5hZ2VyLmdldFNlbGVjdGVkVG9vbCgpOwotICAgIGFkZFRvSGlzdG9yeShBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfVURESSxzZWxlY3RlZFRvb2wuZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYodHJ1ZSkpOwotICB9Ci0gIAotICBwdWJsaWMgSVRyYW5zZm9ybWVyW10gZ2V0VHJhbnNmb3JtZXJzKCkKLSAgewotICAgIElUcmFuc2Zvcm1lcltdIHBhcmVudFRyYW5zZm9ybWVycyA9IHN1cGVyLmdldFRyYW5zZm9ybWVycygpOwotICAgIElUcmFuc2Zvcm1lcltdIHRyYW5zZm9ybWVycyA9IG5ldyBJVHJhbnNmb3JtZXJbcGFyZW50VHJhbnNmb3JtZXJzLmxlbmd0aCArIDFdOwotICAgIFN5c3RlbS5hcnJheWNvcHkocGFyZW50VHJhbnNmb3JtZXJzLCAwLCB0cmFuc2Zvcm1lcnMsIDAsIHBhcmVudFRyYW5zZm9ybWVycy5sZW5ndGgpOwotICAgIHRyYW5zZm9ybWVyc1t0cmFuc2Zvcm1lcnMubGVuZ3RoIC0gMV0gPSBuZXcgTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXJUcmFuc2Zvcm1lcihjb250cm9sbGVyXyk7Ci0gICAgcmV0dXJuIHRyYW5zZm9ybWVyczsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvTG9naW5BZHZhbmNlZEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvTG9naW5BZHZhbmNlZEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDdlMGFiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0xvZ2luQWR2YW5jZWRBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCi0gKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLAotICogYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MjcgICAxMzY0NDkgYnJ1bnNzZW5AdXMuaWJtLmNvbSAtIFZpbmNlIEJydW5zc2VuCi0gKiAyMDA2MDQyNyAgIDEzNjQ0OSBjbGJ1c2hAdXMuaWJtLmNvbSAtIENocmlzdG9waGVyIEJ1c2ggIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgamF2YS5ybWkuQWxyZWFkeUJvdW5kRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuUmVnaXN0cnlOb2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLQotaW1wb3J0IG9yZy51ZGRpNGouVURESUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLmNsaWVudC5VRERJUHJveHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5idXNpbmVzcy5CdXNpbmVzc0VudGl0eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnNlcnZpY2UuQnVzaW5lc3NTZXJ2aWNlczsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5CdXNpbmVzc0luZm87Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5CdXNpbmVzc0luZm9zOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuUmVnaXN0ZXJlZEluZm87Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5UTW9kZWxJbmZvOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuVE1vZGVsSW5mb3M7Ci1pbXBvcnQgb3JnLnVkZGk0ai50cmFuc3BvcnQuVHJhbnNwb3J0RXhjZXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgTG9naW5BZHZhbmNlZEFjdGlvbiBleHRlbmRzIFB1Ymxpc2hBY3Rpb24gewotICAgcHVibGljIExvZ2luQWR2YW5jZWRBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU0sIFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTKSk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXwotICAgICAgICAgICAgLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0JVU0lORVNTRVMsIFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQURWQU5DRUQpKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX01BWF9TRUFSQ0hfU0VULCBTdHJpbmcKLSAgICAgICAgICAgIC52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfTUFYX1NFQVJDSF9TRVQpKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX01BWF9SRVNVTFRTLCBTdHJpbmcKLSAgICAgICAgICAgIC52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfTUFYX1JFU1VMVFMpKTsKLSAgIH0KLQotICAgcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gcHJvY2Vzc090aGVycyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIsIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJKQotICAgICAgICAgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uIHsKLSAgICAgIFN0cmluZyBvd25lZENoZWNrZWQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfT1dORUQpOwotCi0gICAgICAvLyBWYWxpZGF0ZSB0aGUgZGF0YS4KLSAgICAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSB0cnVlOwotICAgICAgaWYgKG93bmVkQ2hlY2tlZCAhPSBudWxsKQotICAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfT1dORUQsIG93bmVkQ2hlY2tlZCk7Ci0gICAgICBlbHNlCi0gICAgICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX09XTkVEKTsKLQotICAgICAgcmV0dXJuIGlucHV0c1ZhbGlkOwotICAgfQotICAgCi0gICBwcml2YXRlIGJvb2xlYW4gYXR0ZW1wdGluZ0RvdWJsZUxvZ2luKCl7Ci0JICAgU3RyaW5nIHVzZXJJZCA9IChTdHJpbmcpIHByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0JICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSAoU3RyaW5nKSBwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0JICAgTm9kZSByb290Tm9kZSA9IHJlZ05vZGVfLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Um9vdE5vZGUoKTsKLSAgICAgICBWZWN0b3IgYWxsTm9kZXMgPSByb290Tm9kZS5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICAgCi0gICAgICAgZm9yKGludCBrID0gMDsgayA8IGFsbE5vZGVzLnNpemUoKTsgaysrKXsKLSAgICAgIAkgTm9kZSBuID0gKE5vZGUpYWxsTm9kZXMuZ2V0KGspOwotICAgICAgCSBpZiAobiBpbnN0YW5jZW9mIFJlZ2lzdHJ5Tm9kZSl7Ci0gICAgICAJCSBSZWdpc3RyeUVsZW1lbnQgbXlFbGVtZW50ID0gKChSZWdpc3RyeUVsZW1lbnQpbi5nZXRUcmVlRWxlbWVudCgpKTsKLSAgICAgIAkJIGlmIChuLmdldE5vZGVJZCgpICE9IHJlZ05vZGVfLmdldE5vZGVJZCgpICYmIHB1Ymxpc2hVUkwuZXF1YWxzKG15RWxlbWVudC5nZXRQdWJsaXNoVVJMKCkpKQotICAgICAgCQkJIGlmKHVzZXJJZC5lcXVhbHMobXlFbGVtZW50LmdldFVzZXJJZCgpKSkKLSAgICAgIAkJCQkgcmV0dXJuIHRydWU7Ci0gICAgICAJIH0KLSAgICAgICB9Ci0gICAgICAgcmV0dXJuIGZhbHNlOwotICAgfQotICAgCi0gICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKSB7Ci0gICAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgICAgLy8gU3lzdGVtLm91dC5wcmludGxuKCIrKysrKyBUcnlpbmcgdG8gbG9naW4gKysrKysiKTsKLSAgICAgIHRyeSB7Ci0gICAgICAgICBib29sZWFuIHNob3VsZEFkZFF1ZXJ5Tm9kZSA9IChwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9PVkVSUklERV9BRERfUVVFUllfTk9ERSkgPT0gbnVsbCk7Ci0gICAgICAgICBTdHJpbmcgcHVibGlzaFVSTCA9IChTdHJpbmcpIHByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICAgICAgIFN0cmluZyB1c2VySWQgPSAoU3RyaW5nKSBwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgICAgICAgU3RyaW5nIHBhc3N3b3JkID0gKFN0cmluZykgcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotICAgICAgICAgaW50IG1heFJlc3VsdHMgPSAzMDA7Ci0gICAgICAgICAKLSAgICAgICAgIC8vIFRoZSBhY3Rpb24gY2FuIGJlIHJ1biB1bmRlciB0aGUgY29udGV4dCBvZiBlaXRoZXIgYSByZWdpc3RyeSBvciBhCi0gICAgICAgICAvLyBxdWVyeSBub2RlLgotICAgICAgICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KSByZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgICAgCi0gICAgICAgICAgICAgICAgIAotICAgICAgICAgaWYoYXR0ZW1wdGluZ0RvdWJsZUxvZ2luKCkpCi0gICAgICAgIAkgdGhyb3cgbmV3IEFscmVhZHlCb3VuZEV4Y2VwdGlvbih1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fTk9fTVVMVElQTEVfTE9HSU4iKSk7IAotICAgICAgICAgCi0gICAgICAgICBpZiAoIXJlZ0VsZW1lbnQuaXNMb2dnZWRJbigpKQotICAgICAgICAgICAgcmVnRWxlbWVudC5wZXJmb3JtTG9naW4ocHVibGlzaFVSTCwgdXNlcklkLCBwYXNzd29yZCk7Ci0KLSAgICAgICAgIFVERElQcm94eSBwcm94eSA9IHJlZ0VsZW1lbnQuZ2V0UHJveHkoKTsKLQotICAgICAgICAgQnVzaW5lc3NJbmZvcyBidXNJbmZvcyA9IG51bGw7Ci0gICAgICAgICBUTW9kZWxJbmZvcyB0bUluZm9zID0gbnVsbDsKLQotICAgICAgICAgUmVnaXN0ZXJlZEluZm8gcmkgPSBwcm94eS5nZXRfcmVnaXN0ZXJlZEluZm8ocmVnRWxlbWVudC5nZXRBdXRoSW5mb1N0cmluZygpKTsKLSAgICAgICAgIGJ1c0luZm9zID0gcmkuZ2V0QnVzaW5lc3NJbmZvcygpOwotICAgICAgICAgdG1JbmZvcyA9IHJpLmdldFRNb2RlbEluZm9zKCk7Ci0KLSAgICAgICAgIGludCBmaW5hbE51bWJlck9mQnVzaW5lc3NFbnRpdGllcyA9IE1hdGgubWluKG1heFJlc3VsdHMsIGJ1c0luZm9zLnNpemUoKSk7Ci0gICAgICAgICBWZWN0b3IgYnVzaW5lc3NLZXlzID0gbmV3IFZlY3RvcigpOwotICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaW5hbE51bWJlck9mQnVzaW5lc3NFbnRpdGllczsgaSsrKSB7Ci0gICAgICAgICAgICBCdXNpbmVzc0luZm8gYnVzSW5mbyA9IChCdXNpbmVzc0luZm8pIGJ1c0luZm9zLmdldChpKTsKLSAgICAgICAgICAgIGJ1c2luZXNzS2V5cy5hZGRFbGVtZW50KGJ1c0luZm8uZ2V0QnVzaW5lc3NLZXkoKSk7Ci0gICAgICAgICB9Ci0KLSAgICAgICAgIGlmIChmaW5hbE51bWJlck9mQnVzaW5lc3NFbnRpdGllcyA+IDApIHsKLSAgICAgICAgICAgIGlmIChzaG91bGRBZGRRdWVyeU5vZGUpIHsKLSAgICAgICAgICAgICAgIFZlY3RvciBiZVZlY3RvciA9IHByb3h5LmdldF9idXNpbmVzc0RldGFpbChidXNpbmVzc0tleXMpLmdldEJ1c2luZXNzRW50aXR5VmVjdG9yKCk7Ci0gICAgICAgICAgICAgICBCdXNpbmVzc0VudGl0eSBiZSA9IG51bGw7Ci0gICAgICAgICAgICAgICBCdXNpbmVzc1NlcnZpY2VzIGJzID0gbnVsbDsKLSAgICAgICAgICAgICAgIGludCBzaXplID0gYmVWZWN0b3Iuc2l6ZSgpOwotICAgICAgICAgICAgICAgaWYgKHNpemUgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgYmUgPSAoQnVzaW5lc3NFbnRpdHkpIGJlVmVjdG9yLmVsZW1lbnRBdChpKTsKLSAgICAgICAgICAgICAgICAgICAgIGFkZFB1Ymxpc2hlZEl0ZW1Ob2RlKGJlLCByZWdFbGVtZW50KTsKLSAgICAgICAgICAgICAgICAgICAgIGJzID0gYmUuZ2V0QnVzaW5lc3NTZXJ2aWNlcygpOwotICAgICAgICAgICAgICAgICAgICAgaWYgKGJzICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvciB2U2VydmljZXMgPSBicy5nZXRCdXNpbmVzc1NlcnZpY2VWZWN0b3IoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBzZXJ2aWNlcyA9IHZTZXJ2aWNlcy5zaXplKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHNlcnZpY2VzOyBqKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFB1Ymxpc2hlZEl0ZW1Ob2RlKGJzLmdldChqKSwgcmVnRWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBtZXNzYWdlUXVldWUKLSAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19CVVNJTkVTU0VTX0ZPVU5EIiwgU3RyaW5nLnZhbHVlT2Yoc2l6ZSkpKTsKLSAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgIH0KLQotICAgICAgICAgaW50IGZpbmFsTnVtYmVyT2ZUTW9kZWxzID0gTWF0aC5taW4obWF4UmVzdWx0cywgdG1JbmZvcy5zaXplKCkpOwotICAgICAgICAgVmVjdG9yIHRNb2RlbEtleXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpbmFsTnVtYmVyT2ZUTW9kZWxzOyBpKyspIHsKLSAgICAgICAgICAgIFRNb2RlbEluZm8gdG1JbmZvID0gKFRNb2RlbEluZm8pIHRtSW5mb3MuZ2V0KGkpOwotICAgICAgICAgICAgdE1vZGVsS2V5cy5hZGRFbGVtZW50KHRtSW5mby5nZXRUTW9kZWxLZXkoKSk7Ci0gICAgICAgICB9Ci0KLSAgICAgICAgIGlmIChmaW5hbE51bWJlck9mVE1vZGVscyA+IDApIHsKLSAgICAgICAgICAgIGlmIChzaG91bGRBZGRRdWVyeU5vZGUpIHsKLSAgICAgICAgICAgICAgIFZlY3RvciBmaW5hbFRNb2RlbFZlY3RvciA9IHByb3h5LmdldF90TW9kZWxEZXRhaWwodE1vZGVsS2V5cykuZ2V0VE1vZGVsVmVjdG9yKCk7Ci0KLSAgICAgICAgICAgICAgIGludCBzaXplID0gZmluYWxUTW9kZWxWZWN0b3Iuc2l6ZSgpOwotICAgICAgICAgICAgICAgaWYgKHNpemUgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICBUTW9kZWwgdG0gPSBudWxsOwotICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgIHRtID0gKFRNb2RlbCkgZmluYWxUTW9kZWxWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgICAgICAgICAgICAgICAgYWRkUHVibGlzaGVkSXRlbU5vZGUodG0sIHJlZ0VsZW1lbnQpOyAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX1NFUlZJQ0VfSU5URVJGQUNFU19GT1VORCIsIFN0cmluZwotICAgICAgICAgICAgICAgICAgICAgICAgLnZhbHVlT2Yoc2l6ZSkpKTsKLSAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgIH0KLQotICAgICAgICAgaW50IGlkID0gMTsKLSAgICAgICAgIFJlZ2lzdHJ5Tm9kZSByZWdOb2RlID0gZ2V0UmVnaXN0cnlOb2RlKCk7Ci0KLSAgICAgICAgIC8vIHdlIGFyZSBsb2dnZWQgaW4gc28gY2hhbmdlIHRoZSBsb2dpblRvb2wgdG8gYWN0IGFzIGEgbG9nb3V0VG9vbDsKLSAgICAgICAgIHJlZ05vZGUuZ2V0TG9naW5Ub29sKCkuc2V0QWx0VGV4dCh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0xPR09VVCIpKTsKLSAgICAgICAgIHJlZ05vZGUuZ2V0TG9naW5Ub29sKCkuc2V0VG9Mb2dvdXRMaW5rKCk7Ci0gICAgICAgICBTdHJpbmcgcmVnaXN0cnlOYW1lID0gcmVnRWxlbWVudC5nZXROYW1lKCk7Ci0gICAgICAgICBTdHJpbmdbXSBzID0gbmV3IFN0cmluZ1syXTsKLSAgICAgICAgIHNbMF0gPSByZWdpc3RyeU5hbWU7Ci0gICAgICAgICBzWzFdID0gdXNlcklkOwotICAgICAgICAgcmVnRWxlbWVudC5zZXROYW1lKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19MT0dHRURfSU5fTk9ERSIsIHMpKTsKLQotICAgICAgICAgaWYgKGZpbmFsTnVtYmVyT2ZCdXNpbmVzc0VudGl0aWVzID4gMCkgewotICAgICAgICAgICAgTm9kZSBwYmVOb2RlID0gcmVnTm9kZS5nZXRDaGlsZE5vZGUocmVnRWxlbWVudC5nZXRQdWJsaXNoZWRCdXNpbmVzc2VzRWxlbWVudCgpKTsKLSAgICAgICAgICAgIGlkID0gcGJlTm9kZS5nZXROb2RlSWQoKTsKLSAgICAgICAgIH0gZWxzZSBpZiAoZmluYWxOdW1iZXJPZlRNb2RlbHMgPiAwKSB7Ci0gICAgICAgICAgICBOb2RlIHBzaU5vZGUgPSByZWdOb2RlLmdldENoaWxkTm9kZShyZWdFbGVtZW50LmdldFB1Ymxpc2hlZFNlcnZpY2VJbnRlcmZhY2VzRWxlbWVudCgpKTsKLSAgICAgICAgICAgIGlkID0gcHNpTm9kZS5nZXROb2RlSWQoKTsKLSAgICAgICAgIH0gCi0gICAgICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oIk5vZGUgaWQgPSAiICsgaWQpOwotICAgICAgICAgdWRkaVBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuc2V0U2VsZWN0ZWROb2RlSWQoaWQpOwotICAgICAgICAgdWRkaVBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkubWFrZVNlbGVjdGVkTm9kZVZpc2libGUoKTsKLQotICAgICAgICAgaWYgKChmaW5hbE51bWJlck9mQnVzaW5lc3NFbnRpdGllcyA8IDEpICYmIChmaW5hbE51bWJlck9mVE1vZGVscyA8IDEpKQotICAgICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX05PX0JVU0lORVNTRVNfT1JfU0VSVklDRV9JTlRFUkZBQ0VTX0ZPVU5EIikpOwotCi0gICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0gY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJUcmFuc3BvcnRFeGNlcHRpb24iKTsKLSAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgIH0gY2F0Y2ggKFVERElFeGNlcHRpb24gZSkgewotICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVURESUV4Y2VwdGlvbiIpOwotICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS50b1N0cmluZygpKTsKLSAgICAgIH0gY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJNYWxmb3JtZWRVUkxFeGNlcHRpb24iKTsKLSAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgIH0gY2F0Y2ggKEFscmVhZHlCb3VuZEV4Y2VwdGlvbiBlKSB7Ci0gICAgCSBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAJIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJBbHJlYWR5Qm91bmRFeGNlcHRpb24iKTsKLSAgICAJIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgcmV0dXJuIGZhbHNlOwotICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0xvZ291dEFkdmFuY2VkQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9Mb2dvdXRBZHZhbmNlZEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzZkZjM5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL0xvZ291dEFkdmFuY2VkQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDI3ICAgMTM2NDQ5IGJydW5zc2VuQHVzLmlibS5jb20gLSBWaW5jZSBCcnVuc3NlbiAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy51ZGRpNGouVURESUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLnRyYW5zcG9ydC5UcmFuc3BvcnRFeGNlcHRpb247Ci0KLXB1YmxpYyBjbGFzcyBMb2dvdXRBZHZhbmNlZEFjdGlvbiBleHRlbmRzIFB1Ymxpc2hBY3Rpb24KLXsKLSAgcHVibGljIExvZ291dEFkdmFuY2VkQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIHJlZ05vZGVfLmdldExvZ2luVG9vbCgpLnNldFRvUmVnaXN0cnlMaW5rKCk7ICAgIAotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gcHJvY2Vzc090aGVycyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIsRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gVmFsaWRhdGUgdGhlIGRhdGEuCi0gICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHRydWU7Ci0gICAgcmV0dXJuIGlucHV0c1ZhbGlkOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIFRoZSBhY3Rpb24gY2FuIGJlIHJ1biB1bmRlciB0aGUgY29udGV4dCBvZiBlaXRoZXIgYSByZWdpc3RyeSBvciBhIHF1ZXJ5IG5vZGUuCi0gICAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgIGlmIChyZWdFbGVtZW50LmlzTG9nZ2VkSW4oKSkgewotICAgICAgICByZWdFbGVtZW50LnBlcmZvcm1Mb2dvdXQoKTsKLSAgICAgICAgcmVnRWxlbWVudC5yZW1vdmUoKTsKLSAgICAgICAgcmVnTm9kZV8uZ2V0Tm9kZU1hbmFnZXIoKS5zZXRTZWxlY3RlZE5vZGVJZCgwKTsgIAotICAgICAgfQotICAgICAgCi0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlRyYW5zcG9ydEV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlVERElFeGNlcHRpb24iKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUudG9TdHJpbmcoKSk7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvTWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9NYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjdhODZmMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9NYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM4MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIDIwMDcwNDE5ICAgMTgyODY0IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5CdXNpbmVzc0VsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5NdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5SZWdpc3RyeU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlZhbGlkYXRvcjsKLWltcG9ydCBvcmcudWRkaTRqLlVERElFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai5jbGllbnQuVURESVByb3h5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYnVzaW5lc3MuQnVzaW5lc3NFbnRpdHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5zZXJ2aWNlLkJ1c2luZXNzU2VydmljZTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnNlcnZpY2UuQnVzaW5lc3NTZXJ2aWNlczsKLWltcG9ydCBvcmcudWRkaTRqLnRyYW5zcG9ydC5UcmFuc3BvcnRFeGNlcHRpb247Ci0KLXB1YmxpYyBjbGFzcyBNYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNBY3Rpb24gZXh0ZW5kcyBVRERJUHJvcGVydGllc0Zvcm1BY3Rpb24KLXsKLSAgcHJvdGVjdGVkIFN0cmluZyBzdWJRdWVyeUtleV87Ci0gIHByb3RlY3RlZCBib29sZWFuIGlzU3ViUXVlcnlHZXRfOwotICBwcm90ZWN0ZWQgU3RyaW5nIG5ld1N1YlF1ZXJ5XzsKLSAgcHJvdGVjdGVkIFN0cmluZyBuZXdTdWJRdWVyeUl0ZW1fOwotICBwcm90ZWN0ZWQgYm9vbGVhbiBzdWJRdWVyeUluaXRpYXRlZF87Ci0gIHByb3RlY3RlZCBSZWdpc3RyeU5vZGUgcmVnTm9kZV87Ci0KLSAgcHVibGljIE1hbmFnZVJlZmVyZW5jZWRTZXJ2aWNlc0FjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICBzdWJRdWVyeUtleV8gPSBudWxsOwotICAgIGlzU3ViUXVlcnlHZXRfID0gZmFsc2U7Ci0gICAgc3ViUXVlcnlJbml0aWF0ZWRfID0gZmFsc2U7Ci0gICAgcmVnTm9kZV8gPSBnZXRSZWdpc3RyeU5vZGUoKTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCBib29sZWFuIHByb2Nlc3NQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBuZXdTdWJRdWVyeV8gPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuTkVXX1NVQlFVRVJZX0lOSVRJQVRFRCk7Ci0gICAgU3RyaW5nIGlzU3ViUXVlcnlHZXRTdHJpbmcgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfR0VUKTsKLSAgICBuZXdTdWJRdWVyeUl0ZW1fID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLk5FV19TVUJRVUVSWV9RVUVSWV9JVEVNKTsKLSAgICBzdWJRdWVyeUtleV8gPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZKTsKLSAgICBTdHJpbmdbXSByZWZlcmVuY2VkU2VydmljZXNDaGVja2JveGVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlJFRkVSRU5DRURfU0VSVklDRV9TRUxFQ1RfU1RBVEUpOwotICAgIFN0cmluZ1tdIHNlcnZpY2VOb2RlSWRzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLk5PREVJRF9TRVJWSUNFKTsKLSAgICBTdHJpbmcgb3BlcmF0aW9uID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLk1BTkFHRV9SRUZFUkVOQ0VEX1NFUlZJQ0VTX09QRVJBVElPTik7Ci0gICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgIFN0cmluZyB1c2VySWQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICBTdHJpbmcgcGFzc3dvcmQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotCi0gICAgLy8gVmFsaWRhdGUgdGhlIGRhdGEuCi0gICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHRydWU7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0KLSAgICBGb3JtVG9vbCBmb3JtVG9vbCA9IGdldFNlbGVjdGVkRm9ybVRvb2woKTsKLSAgICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSA9ICgoTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UpZm9ybVRvb2wpLmdldEZvcm1Ub29sUHJvcGVydGllcyhzdWJRdWVyeUtleV8pOwotICAgIGZvcm1Ub29sUEkuY2xlYXJFcnJvcnMoKTsKLQotICAgIGlmIChuZXdTdWJRdWVyeV8gIT0gbnVsbCAmJiBuZXdTdWJRdWVyeV8ubGVuZ3RoKCkgPiAwKQotICAgICAgc3ViUXVlcnlJbml0aWF0ZWRfID0gdHJ1ZTsKLSAgICBlbHNlCi0gICAgICBzdWJRdWVyeUluaXRpYXRlZF8gPSBmYWxzZTsKLQotICAgIGlmIChpc1N1YlF1ZXJ5R2V0U3RyaW5nICE9IG51bGwpCi0gICAgICBpc1N1YlF1ZXJ5R2V0XyA9IEJvb2xlYW4udmFsdWVPZihpc1N1YlF1ZXJ5R2V0U3RyaW5nKS5ib29sZWFuVmFsdWUoKTsKLQotICAgIGlmIChvcGVyYXRpb24gIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLk1BTkFHRV9SRUZFUkVOQ0VEX1NFUlZJQ0VTX09QRVJBVElPTixvcGVyYXRpb24pOwotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuTUFOQUdFX1JFRkVSRU5DRURfU0VSVklDRVNfT1BFUkFUSU9OKTsKLQotICAgIGlmIChyZWZlcmVuY2VkU2VydmljZXNDaGVja2JveGVzICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5SRUZFUkVOQ0VEX1NFUlZJQ0VfU0VMRUNUX1NUQVRFLHJlZmVyZW5jZWRTZXJ2aWNlc0NoZWNrYm94ZXMpOwotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUkVGRVJFTkNFRF9TRVJWSUNFX1NFTEVDVF9TVEFURSk7Ci0KLSAgICBpZiAoc2VydmljZU5vZGVJZHMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBWZWN0b3Igc2VydmljZXMgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TRVJWSUNFUyk7Ci0gICAgICBpZiAoc2VydmljZXMgPT0gbnVsbCkKLSAgICAgICAgc2VydmljZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBIYXNodGFibGUgcmVzdWx0SGFzaCA9IG5ldyBIYXNodGFibGUoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPHNlcnZpY2VOb2RlSWRzLmxlbmd0aDtpKyspCi0gICAgICAgIHJlc3VsdEhhc2gucHV0KHNlcnZpY2VOb2RlSWRzW2ldLEJvb2xlYW4uVFJVRSk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxzZXJ2aWNlcy5zaXplKCk7aSsrKQotICAgICAgewotICAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClzZXJ2aWNlcy5lbGVtZW50QXQoaSk7Ci0gICAgICAgIGlmIChyZXN1bHRIYXNoLmdldChTdHJpbmcudmFsdWVPZihsaXN0RWxlbWVudC5nZXRUYXJnZXROb2RlSWQoKSkpID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBzZXJ2aWNlcy5yZW1vdmVFbGVtZW50QXQoaSk7Ci0gICAgICAgICAgaS0tOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TRVJWSUNFUyxzZXJ2aWNlcyk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0VSVklDRVMpOwotCi0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgaWYgKCFyZWdFbGVtZW50LmlzTG9nZ2VkSW4oKSkKLSAgICB7Ci0gICAgICBpZiAocHVibGlzaFVSTCAhPSBudWxsKQotICAgICAgewotICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCxwdWJsaXNoVVJMKTsKLSAgICAgICAgZm9ybVRvb2wuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCxwdWJsaXNoVVJMKTsKLSAgICAgIH0KLQotICAgICAgaWYgKCFzdWJRdWVyeUluaXRpYXRlZF8gJiYgIVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZyhwdWJsaXNoVVJMKSkKLSAgICAgIHsKLSAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgZm9ybVRvb2wuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfUFVCTElTSF9VUkwiKSk7Ci0gICAgICB9Ci0KLSAgICAgIGlmICh1c2VySWQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklELHVzZXJJZCk7Ci0gICAgICAgIGZvcm1Ub29sLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklELHVzZXJJZCk7Ci0gICAgICB9Ci0KLSAgICAgIGlmICghc3ViUXVlcnlJbml0aWF0ZWRfICYmICFWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmcodXNlcklkKSkKLSAgICAgIHsKLSAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgZm9ybVRvb2wuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX1VTRVJJRCIpKTsKLSAgICAgIH0KLQotICAgICAgaWYgKHBhc3N3b3JkICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JELHBhc3N3b3JkKTsKLSAgICAgICAgZm9ybVRvb2wuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCxwYXNzd29yZCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaT0wO2k8cmVtb3ZlZFByb3BlcnRpZXNfLnNpemUoKTtpKyspCi0gICAgICBmb3JtVG9vbFBJLnJlbW92ZVByb3BlcnR5KHJlbW92ZWRQcm9wZXJ0aWVzXy5lbGVtZW50QXQoaSkpOwotICAgIGZvcm1Ub29sUEkudXBkYXRlUHJvcGVydHlUYWJsZShwcm9wZXJ0eVRhYmxlXyk7Ci0KLSAgICByZXR1cm4gaW5wdXRzVmFsaWQ7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgU3RyaW5nIG9wZXJhdGlvblN0cmluZyA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuTUFOQUdFX1JFRkVSRU5DRURfU0VSVklDRVNfT1BFUkFUSU9OKTsKLSAgICBpbnQgb3BlcmF0aW9uID0gSW50ZWdlci5wYXJzZUludChvcGVyYXRpb25TdHJpbmcpOwotICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgIEJ1c2luZXNzRWxlbWVudCBidXNFbGVtZW50ID0gKEJ1c2luZXNzRWxlbWVudCkoZ2V0U2VsZWN0ZWROYXZpZ2F0b3JOb2RlKCkuZ2V0VHJlZUVsZW1lbnQoKSk7Ci0gICAgRm9ybVRvb2wgZm9ybVRvb2wgPSBnZXRTZWxlY3RlZEZvcm1Ub29sKCk7Ci0gICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkgPSAoKE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlKWZvcm1Ub29sKS5nZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXlfKTsKLSAgICBWZWN0b3IgcmVmZXJlbmNlZFNlcnZpY2VzID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfUkVGRVJFTkNFRF9TRVJWSUNFUyk7Ci0gICAgYm9vbGVhbiBvcGVyYXRpb25SZXN1bHQgPSB0cnVlOwotICAgIHRyeQotICAgIHsKLSAgICAgIFN0cmluZyBwdWJsaXNoVVJMID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICAgICBTdHJpbmcgdXNlcklkID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgICAgU3RyaW5nIHBhc3N3b3JkID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCk7Ci0gICAgICBVRERJUHJveHkgcHJveHkgPSByZWdFbGVtZW50LmdldFByb3h5KCk7Ci0gICAgICBCdXNpbmVzc0VudGl0eSBjdXJyZW50U1AgPSBidXNFbGVtZW50LmdldEJ1c2luZXNzRW50aXR5KCk7Ci0gICAgICBCdXNpbmVzc0VudGl0eSBzcCA9IChCdXNpbmVzc0VudGl0eSlwcm94eS5nZXRfYnVzaW5lc3NEZXRhaWwoY3VycmVudFNQLmdldEJ1c2luZXNzS2V5KCkpLmdldEJ1c2luZXNzRW50aXR5VmVjdG9yKCkuZ2V0KDApOwotICAgICAgCi0gICAgICBpZiAoIXJlZ0VsZW1lbnQuaXNMb2dnZWRJbigpKQotICAgICAgICByZWdFbGVtZW50LnBlcmZvcm1Mb2dpbihwdWJsaXNoVVJMLHVzZXJJZCxwYXNzd29yZCk7Ci0gICAgICAgIAotICAgICAgSGFzaHRhYmxlIHNlcnZpY2VzSGFzaCA9IG5ldyBIYXNodGFibGUoKTsKLSAgICAgIFZlY3RvciBiYWNrdXBCdXNTZXJ2aWNlVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgc3dpdGNoIChvcGVyYXRpb24pCi0gICAgICB7Ci0gICAgICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5NQU5BR0VfUkVGRVJFTkNFRF9TRVJWSUNFU19PUEVSQVRJT05fQUREOgotICAgICAgICAgIFZlY3RvciBzZXJ2aWNlcyA9IChWZWN0b3IpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0VSVklDRVMpOyAgICAgICAgICAKLSAgICAgICAgICBmb3IgKGludCBpPTA7aTxzZXJ2aWNlcy5zaXplKCk7aSsrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIExpc3RFbGVtZW50IHNlcnZpY2VMaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClzZXJ2aWNlcy5lbGVtZW50QXQoaSk7Ci0gICAgICAgICAgICBCdXNpbmVzc1NlcnZpY2UgYnMgPSAoQnVzaW5lc3NTZXJ2aWNlKXNlcnZpY2VMaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICAgICAgIHNlcnZpY2VzSGFzaC5wdXQoYnMuZ2V0U2VydmljZUtleSgpLGJzKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgCi0gICAgICAgICAgLy8gU2F2ZSB0aGUgY3VycmVudCBsaXN0IG9mIEJ1c2luZXNzU2VydmljZXMgZm9yIHJvbGxiYWNrIG9wZXJhdGlvbnMuCi0gICAgICAgICAgYmFja3VwQW5kVXBkYXRlQnVzaW5lc3NTZXJ2aWNlcyhiYWNrdXBCdXNTZXJ2aWNlVmVjdG9yLHNwLHNlcnZpY2VzSGFzaCx0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgVmVjdG9yIGJlVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgICAgICAgYmVWZWN0b3IuYWRkKHNwKTsKLSAgICAgICAgICAgIHNwID0gKEJ1c2luZXNzRW50aXR5KXByb3h5LnNhdmVfYnVzaW5lc3MocmVnRWxlbWVudC5nZXRBdXRoSW5mb1N0cmluZygpLCBiZVZlY3RvcikuZ2V0QnVzaW5lc3NFbnRpdHlWZWN0b3IoKS5nZXQoMCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpPTA7aTxzZXJ2aWNlcy5zaXplKCk7aSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBMaXN0RWxlbWVudCBzZXJ2aWNlRWxlbWVudCA9IChMaXN0RWxlbWVudClzZXJ2aWNlcy5lbGVtZW50QXQoaSk7Ci0gICAgICAgICAgICAgIEJ1c2luZXNzU2VydmljZSBicyA9IChCdXNpbmVzc1NlcnZpY2Upc2VydmljZUVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgICAgICAgIFN0cmluZyBic05hbWUgPSBicy5nZXREZWZhdWx0TmFtZVN0cmluZygpOwotICAgICAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fU0VSVklDRV9SRUZFUkVOQ0VEIixic05hbWUpKTsKLSAgICAgICAgICAgICAgc2VydmljZXMucmVtb3ZlRWxlbWVudEF0KGkpOwotICAgICAgICAgICAgICBpLS07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoIChUcmFuc3BvcnRFeGNlcHRpb24gZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBSb2xsIGJhY2sgYW5kIHJlc3RvcmUgdGhlIG9sZCBsaXN0IG9mIHNlcnZpY2VzLgotICAgICAgICAgICAgcm9sbGJhY2tCdXNpbmVzc1NlcnZpY2VzKHNwLGJhY2t1cEJ1c1NlcnZpY2VWZWN0b3Isc2VydmljZXMsdWRkaVBlcnNwZWN0aXZlLG1lc3NhZ2VRdWV1ZSwiTVNHX0VSUk9SX1NFUlZJQ0VfTk9UX1JFRkVSRU5DRUQiKTsKLSAgICAgICAgICAgIGhhbmRsZVVuZXhwZWN0ZWRFeGNlcHRpb24odWRkaVBlcnNwZWN0aXZlLG1lc3NhZ2VRdWV1ZSwiVHJhbnNwb3J0RXhjZXB0aW9uIixlKTsKLSAgICAgICAgICAgIG9wZXJhdGlvblJlc3VsdCA9IGZhbHNlOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiBlKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFJvbGwgYmFjayBhbmQgcmVzdG9yZSB0aGUgb2xkIGxpc3Qgb2Ygc2VydmljZXMuCi0gICAgICAgICAgICByb2xsYmFja0J1c2luZXNzU2VydmljZXMoc3AsYmFja3VwQnVzU2VydmljZVZlY3RvcixzZXJ2aWNlcyx1ZGRpUGVyc3BlY3RpdmUsbWVzc2FnZVF1ZXVlLCJNU0dfRVJST1JfU0VSVklDRV9OT1RfUkVGRVJFTkNFRCIpOwotICAgICAgICAgICAgaWYoVURESUV4Y2VwdGlvbkhhbmRsZXIucmVxdWlyZXNSZXNldChlKSkKLSAgICAgICAgCQlyZWdFbGVtZW50LnNldERlZmF1bHRzKCk7Ci0gICAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0Q29udHJvbGxlcigpLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlVERElFeGNlcHRpb24iKTsKLSAgICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICBvcGVyYXRpb25SZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NFUlZJQ0VTLHNlcnZpY2VzKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLk1BTkFHRV9SRUZFUkVOQ0VEX1NFUlZJQ0VTX09QRVJBVElPTl9SRU1PVkU6Ci0gICAgICAgICAgU3RyaW5nW10gcmVmZXJlbmNlZFNlcnZpY2VzQ2hlY2tib3hlcyA9IChTdHJpbmdbXSlwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5SRUZFUkVOQ0VEX1NFUlZJQ0VfU0VMRUNUX1NUQVRFKTsKLSAgICAgICAgICBWZWN0b3Igc2VsZWN0ZWRSZWZlcmVuY2VkU2VydmljZVZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgICBmb3IgKGludCBpPTA7aTxyZWZlcmVuY2VkU2VydmljZXNDaGVja2JveGVzLmxlbmd0aDtpKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgYm9vbGVhbiBpc0NoZWNrZWQgPSBCb29sZWFuLnZhbHVlT2YocmVmZXJlbmNlZFNlcnZpY2VzQ2hlY2tib3hlc1tpXSkuYm9vbGVhblZhbHVlKCk7Ci0gICAgICAgICAgICBpZiAoaXNDaGVja2VkKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBMaXN0RWxlbWVudCByZWZlcmVuY2VkU2VydmljZUxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KXJlZmVyZW5jZWRTZXJ2aWNlcy5lbGVtZW50QXQoaSk7Ci0gICAgICAgICAgICAgIEJ1c2luZXNzU2VydmljZSBicyA9IChCdXNpbmVzc1NlcnZpY2UpcmVmZXJlbmNlZFNlcnZpY2VMaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICAgICAgICAgc2VydmljZXNIYXNoLnB1dChicy5nZXRTZXJ2aWNlS2V5KCksYnMpOwotICAgICAgICAgICAgICBzZWxlY3RlZFJlZmVyZW5jZWRTZXJ2aWNlVmVjdG9yLmFkZEVsZW1lbnQoYnMpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0gICAgICAgICAgCi0gICAgICAgICAgCi0gICAgICAgICAgLy8gU2F2ZSB0aGUgY3VycmVudCBsaXN0IG9mIGJ1c2luZXNzIHNlcnZpY2VzIGZvciByb2xsYmFjayBvcGVyYXRpb25zLgotICAgICAgICAgIGJhY2t1cEFuZFVwZGF0ZUJ1c2luZXNzU2VydmljZXMoYmFja3VwQnVzU2VydmljZVZlY3RvcixzcCxzZXJ2aWNlc0hhc2gsZmFsc2UpOwotICAgICAgICAgIAotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFZlY3RvciBiZVZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgICAgIGJlVmVjdG9yLmFkZChzcCk7Ci0gICAgICAgICAgICBzcCA9IChCdXNpbmVzc0VudGl0eSlwcm94eS5zYXZlX2J1c2luZXNzKHJlZ0VsZW1lbnQuZ2V0QXV0aEluZm9TdHJpbmcoKSwgYmVWZWN0b3IpLmdldEJ1c2luZXNzRW50aXR5VmVjdG9yKCkuZ2V0KDApOwotICAgICAgICAgICAgZm9yIChpbnQgaT0wO2k8c2VsZWN0ZWRSZWZlcmVuY2VkU2VydmljZVZlY3Rvci5zaXplKCk7aSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBCdXNpbmVzc1NlcnZpY2UgYnMgPSAoQnVzaW5lc3NTZXJ2aWNlKXNlbGVjdGVkUmVmZXJlbmNlZFNlcnZpY2VWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgICAgICAgICBTdHJpbmcgYnNOYW1lID0gYnMuZ2V0RGVmYXVsdE5hbWVTdHJpbmcoKTsKLSAgICAgICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX1NFUlZJQ0VfUkVGRVJFTkNFX1JFTU9WRUQiLGJzTmFtZSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIGUpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gUm9sbCBiYWNrIGFuZCByZXN0b3JlIHRoZSBvbGQgbGlzdCBvZiBzZXJ2aWNlcy4KLSAgICAgICAgICAgIHJvbGxiYWNrQnVzaW5lc3NTZXJ2aWNlcyhzcCxiYWNrdXBCdXNTZXJ2aWNlVmVjdG9yLHNlbGVjdGVkUmVmZXJlbmNlZFNlcnZpY2VWZWN0b3IsdWRkaVBlcnNwZWN0aXZlLG1lc3NhZ2VRdWV1ZSwiTVNHX0VSUk9SX1JFRkVSRU5DRV9OT1RfUkVNT1ZFRCIpOwotICAgICAgICAgICAgaGFuZGxlVW5leHBlY3RlZEV4Y2VwdGlvbih1ZGRpUGVyc3BlY3RpdmUsbWVzc2FnZVF1ZXVlLCJUcmFuc3BvcnRFeGNlcHRpb24iLGUpOwotICAgICAgICAgICAgb3BlcmF0aW9uUmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoIChVRERJRXhjZXB0aW9uIGUpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gUm9sbCBiYWNrIGFuZCByZXN0b3JlIHRoZSBvbGQgbGlzdCBvZiBzZXJ2aWNlcy4KLSAgICAgICAgICAgIHJvbGxiYWNrQnVzaW5lc3NTZXJ2aWNlcyhzcCxiYWNrdXBCdXNTZXJ2aWNlVmVjdG9yLHNlbGVjdGVkUmVmZXJlbmNlZFNlcnZpY2VWZWN0b3IsdWRkaVBlcnNwZWN0aXZlLG1lc3NhZ2VRdWV1ZSwiTVNHX0VSUk9SX1JFRkVSRU5DRV9OT1RfUkVNT1ZFRCIpOwotICAgICAgICAgICAgaWYoVURESUV4Y2VwdGlvbkhhbmRsZXIucmVxdWlyZXNSZXNldChlKSkKLSAgICAgICAgICAgIAlyZWdFbGVtZW50LnNldERlZmF1bHRzKCk7Ci0gICAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0Q29udHJvbGxlcigpLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlVERElFeGNlcHRpb24iKTsKLSAgICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICBvcGVyYXRpb25SZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgcmVmZXJlbmNlZCBzZXJ2aWNlcyBhcmUgcmVmcmVzaGVkIHdoZW4gdGhlIGZvcm0gcmVsb2Fkcy4KLSAgICAgIGZvcm1Ub29sUEkucmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9SRUZFUkVOQ0VEX1NFUlZJQ0VTKTsKLSAgICAgIGJ1c0VsZW1lbnQuc2V0QnVzaW5lc3NFbnRpdHkoc3ApOwotICAgICAgcmV0dXJuIG9wZXJhdGlvblJlc3VsdDsKLSAgICB9Ci0gICAgY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGhhbmRsZVVuZXhwZWN0ZWRFeGNlcHRpb24odWRkaVBlcnNwZWN0aXZlLG1lc3NhZ2VRdWV1ZSwiVHJhbnNwb3J0RXhjZXB0aW9uIixlKTsKLSAgICAgIG9wZXJhdGlvblJlc3VsdCA9IGZhbHNlOwotICAgIH0KLSAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAJaWYoVURESUV4Y2VwdGlvbkhhbmRsZXIucmVxdWlyZXNSZXNldChlKSkKLSAgICAJCXJlZ0VsZW1lbnQuc2V0RGVmYXVsdHMoKTsKLSAgICAJbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldENvbnRyb2xsZXIoKS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAJbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlVERElFeGNlcHRpb24iKTsKLSAgICAJbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS50b1N0cmluZygpKTsKLSAgICAJb3BlcmF0aW9uUmVzdWx0ID0gZmFsc2U7Ci0gICAgfQotICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBoYW5kbGVVbmV4cGVjdGVkRXhjZXB0aW9uKHVkZGlQZXJzcGVjdGl2ZSxtZXNzYWdlUXVldWUsIk1hbGZvcm1lZFVSTEV4Y2VwdGlvbiIsZSk7Ci0gICAgICBvcGVyYXRpb25SZXN1bHQgPSBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIG9wZXJhdGlvblJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIGlzU3ViUXVlcnlJbml0aWF0ZWQoKQotICB7Ci0gICAgcmV0dXJuIHN1YlF1ZXJ5SW5pdGlhdGVkXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIGlzU3ViUXVlcnlHZXQoKQotICB7Ci0gICAgcmV0dXJuIGlzU3ViUXVlcnlHZXRfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTdWJRdWVyeUtleSgpCi0gIHsKLSAgICByZXR1cm4gc3ViUXVlcnlLZXlfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXROZXdTdWJRdWVyeSgpCi0gIHsKLSAgICByZXR1cm4gbmV3U3ViUXVlcnlfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXROZXdTdWJRdWVyeUl0ZW0oKQotICB7Ci0gICAgcmV0dXJuIG5ld1N1YlF1ZXJ5SXRlbV87Ci0gIH0KLSAgCi0gIC8vIEJhY2t1cCB0aGUgYnVzaW5lc3Mgc2VydmljZXMgYW5kIHJlbW92ZSB0aG9zZSBpbiBzZXJ2aWNlSGFzaCBmcm9tIHRoZSBjdXJyZW50IGxpc3QuIFJldHVybiB0aGUgdXBkYXRlZCBsaXN0IG9mIGJ1c2luZXNzIHNlcnZpY2VzCi0gIHByaXZhdGUgZmluYWwgdm9pZCBiYWNrdXBBbmRVcGRhdGVCdXNpbmVzc1NlcnZpY2VzKFZlY3RvciBiYWNrdXBCdXNTZXJ2aWNlVmVjdG9yLEJ1c2luZXNzRW50aXR5IGJlLEhhc2h0YWJsZSBzZXJ2aWNlc0hhc2gsYm9vbGVhbiBpc0FkZCkKLSAgewotICAgIC8vIFNhdmUgdGhlIGN1cnJlbnQgbGlzdCBvZiBidXNpbmVzcyBzZXJ2aWNlcyBmb3Igcm9sbGJhY2sgb3BlcmF0aW9ucy4KLSAgICBCdXNpbmVzc1NlcnZpY2VzIGN1cnJlbnRCdXNTZXJ2aWNlcyA9IGJlLmdldEJ1c2luZXNzU2VydmljZXMoKTsKLSAgICBpZiAoY3VycmVudEJ1c1NlcnZpY2VzID09IG51bGwpCi0gICAgICBjdXJyZW50QnVzU2VydmljZXMgPSBuZXcgQnVzaW5lc3NTZXJ2aWNlcygpOwotICAgIFZlY3RvciBjdXJyZW50QnVzU2VydmljZVZlY3RvciA9IGN1cnJlbnRCdXNTZXJ2aWNlcy5nZXRCdXNpbmVzc1NlcnZpY2VWZWN0b3IoKTsKLSAgICBmb3IgKGludCBpPTA7aTxjdXJyZW50QnVzU2VydmljZVZlY3Rvci5zaXplKCk7aSsrKQotICAgIHsKLSAgICAgIEJ1c2luZXNzU2VydmljZSBjdXJyZW50QnVzU2VydmljZSA9IChCdXNpbmVzc1NlcnZpY2UpY3VycmVudEJ1c1NlcnZpY2VWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgYmFja3VwQnVzU2VydmljZVZlY3Rvci5hZGRFbGVtZW50KGN1cnJlbnRCdXNTZXJ2aWNlKTsKLSAgICAgIC8vIElmIHRoZSBjdXJyZW50IGJ1c2luZXNzIHNlcnZpY2UgaXMgYSBtZW1iZXIgb2YgdGhlIGxpc3QgdG8gYmUgcmVtb3ZlZC9hZGRlZCwgcmVtb3ZlIGl0IG5vdy4KLSAgICAgIGlmIChzZXJ2aWNlc0hhc2guZ2V0KGN1cnJlbnRCdXNTZXJ2aWNlLmdldFNlcnZpY2VLZXkoKSkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgY3VycmVudEJ1c1NlcnZpY2VWZWN0b3IucmVtb3ZlRWxlbWVudEF0KGkpOwotICAgICAgICBpLS07Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIGlmIChpc0FkZCkKLSAgICB7Ci0gICAgICBFbnVtZXJhdGlvbiBlID0gc2VydmljZXNIYXNoLmVsZW1lbnRzKCk7Ci0gICAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgICAgY3VycmVudEJ1c1NlcnZpY2VWZWN0b3IuYWRkRWxlbWVudCgoQnVzaW5lc3NTZXJ2aWNlKWUubmV4dEVsZW1lbnQoKSk7Ci0gICAgfQotICAgIGJlLnNldEJ1c2luZXNzU2VydmljZXMoY3VycmVudEJ1c1NlcnZpY2VzKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIHJvbGxiYWNrQnVzaW5lc3NTZXJ2aWNlcyhCdXNpbmVzc0VudGl0eSBiZSxWZWN0b3IgYmFja3VwQnVzU2VydmljZVZlY3RvcixWZWN0b3Igb3BlcmF0ZWRTZXJ2aWNlcyxQZXJzcGVjdGl2ZSBwZXJzcGVjdGl2ZSxNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlLFN0cmluZyBlcnJvck1lc3NhZ2VLZXkpCi0gIHsKLSAgICAvLyBSb2xsIGJhY2sgYW5kIHJlc3RvcmUgdGhlIG9sZCBsaXN0IG9mIHNlcnZpY2VzLgotICAgIGJlLmdldEJ1c2luZXNzU2VydmljZXMoKS5zZXRCdXNpbmVzc1NlcnZpY2VWZWN0b3IoYmFja3VwQnVzU2VydmljZVZlY3Rvcik7Ci0gICAgZm9yIChpbnQgaT0wO2k8b3BlcmF0ZWRTZXJ2aWNlcy5zaXplKCk7aSsrKQotICAgIHsKLSAgICAgIExpc3RFbGVtZW50IHNlcnZpY2VMaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClvcGVyYXRlZFNlcnZpY2VzLmVsZW1lbnRBdChpKTsKLSAgICAgIEJ1c2luZXNzU2VydmljZSBicyA9IChCdXNpbmVzc1NlcnZpY2Upc2VydmljZUxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgU3RyaW5nIGJzTmFtZSA9IGJzLmdldERlZmF1bHROYW1lU3RyaW5nKCk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShwZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKGVycm9yTWVzc2FnZUtleSxic05hbWUpKTsKLSAgICB9ICAgIAotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9PcGVuQ2F0ZWdvcnlCcm93c2VyQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9PcGVuQ2F0ZWdvcnlCcm93c2VyQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkY2Y4NGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvT3BlbkNhdGVnb3J5QnJvd3NlckFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotCi1wdWJsaWMgY2xhc3MgT3BlbkNhdGVnb3J5QnJvd3NlckFjdGlvbiBleHRlbmRzIEFjdGlvbgotewotICBwdWJsaWMgT3BlbkNhdGVnb3J5QnJvd3NlckFjdGlvbigpCi0gIHsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIHZvaWQgYWRkU2Vzc2lvbkFuZFRNb2RlbEtleShTdHJpbmdCdWZmZXIgcmVzdWx0LFN0cmluZyBzZXNzaW9uSWQsU3RyaW5nIGNhdGVnb3J5VE1vZGVsS2V5KQotICB7Ci0gICAgcmVzdWx0LmFwcGVuZChBY3Rpb25JbnB1dHMuU0VTU0lPTklEKS5hcHBlbmQoJz0nKS5hcHBlbmQoc2Vzc2lvbklkKS5hcHBlbmQoJyYnKS5hcHBlbmQoVURESUFjdGlvbklucHV0cy5DQVRFR09SWV9UTU9ERUxfS0VZKS5hcHBlbmQoJz0nKS5hcHBlbmQoY2F0ZWdvcnlUTW9kZWxLZXkpOwotICB9Ci0gIAotICAvLyB1ZGRpL2NhdGVnb3J5X2Jyb3dzZXIuanNwP3Nlc3Npb25JZD0uLi4mY2F0ZWdvcnlUTW9kZWxLZXk9Li4uCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmsoU3RyaW5nIHNlc3Npb25JZCxTdHJpbmcgY2F0ZWdvcnlUTW9kZWxLZXkpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoInVkZGkvY2F0ZWdvcnlfYnJvd3Nlci5qc3A/Iik7Ci0gICAgYWRkU2Vzc2lvbkFuZFRNb2RlbEtleShhY3Rpb25MaW5rLHNlc3Npb25JZCxjYXRlZ29yeVRNb2RlbEtleSk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0Q2F0ZWdvcnlDb250ZW50UGFnZShTdHJpbmcgc2Vzc2lvbklkLFN0cmluZyBjYXRlZ29yeVRNb2RlbEtleSkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigidWRkaS9jYXRlZ29yeV9jb250ZW50LmpzcD8iKTsKLSAgICBhZGRTZXNzaW9uQW5kVE1vZGVsS2V5KGFjdGlvbkxpbmssc2Vzc2lvbklkLGNhdGVnb3J5VE1vZGVsS2V5KTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRXaWxkQ2FyZEFjdGlvbkxpbmsoU3RyaW5nIHNlc3Npb25JZCkKLSAgewotICAgIHJldHVybiBnZXRBY3Rpb25MaW5rKHNlc3Npb25JZCwiJSIpOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBwb3B1bGF0ZVByb3BlcnR5VGFibGUoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpCi0gIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvT3BlblJlZ2lzdHJ5QWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9PcGVuUmVnaXN0cnlBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTI4OGM3ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9PcGVuUmVnaXN0cnlBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwOTEyICAgMTQxNzk2IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Nb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLkNhdGVnb3J5TW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuVURESU1haW5FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElNYWluTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVmFsaWRhdG9yOwotaW1wb3J0IG9yZy51ZGRpNGouVURESUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLmNsaWVudC5VRERJUHJveHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuVE1vZGVsRGV0YWlsOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuVE1vZGVsSW5mbzsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlRNb2RlbEluZm9zOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuVE1vZGVsTGlzdDsKLWltcG9ydCBvcmcudWRkaTRqLnRyYW5zcG9ydC5UcmFuc3BvcnRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkNhdGVnb3J5QmFnOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5LZXllZFJlZmVyZW5jZTsKLQotcHVibGljIGNsYXNzIE9wZW5SZWdpc3RyeUFjdGlvbiBleHRlbmRzIFVERElQcm9wZXJ0aWVzRm9ybUFjdGlvbgotewotICBwdWJsaWMgT3BlblJlZ2lzdHJ5QWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIC8vIFNlbGVjdCBVRERJIE1haW4uCi0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBwcm9jZXNzUGFyc2VkUmVzdWx0cyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIHJlZ2lzdHJ5TmFtZSA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5SRUdJU1RSWV9OQU1FKTsKLSAgICBTdHJpbmcgaW5xdWlyeVVSTCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5JTlFVSVJZX1VSTCk7Ci0gICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUFVCTElTSF9VUkwpOwotICAgIFN0cmluZyB1c2VybmFtZSA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5VRERJX1VTRVJOQU1FKTsKLSAgICBTdHJpbmcgcGFzc3dvcmQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuVURESV9QQVNTV09SRCk7Ci0gICAgU3RyaW5nIGNoZWNrVXNlckRlZmluZWRDYXRlZ29yaWVzQ2hlY2tlZCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5DSEVDS19VU0VSX0RFRklORURfQ0FURUdPUklFUyk7Ci0gICAgU3RyaW5nIGNhdGVnb3JpZXNEaXJlY3RvcnkgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuQ0FURUdPUklFU19ESVJFQ1RPUlkpOwotCi0gICAgLy8gVmFsaWRhdGUgdGhlIGRhdGEuCi0gICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHRydWU7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgRm9ybVRvb2wgZm9ybVRvb2wgPSBnZXRTZWxlY3RlZEZvcm1Ub29sKCk7Ci0gICAgaWYgKHJlZ2lzdHJ5TmFtZSAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUkVHSVNUUllfTkFNRSxyZWdpc3RyeU5hbWUpOwotCi0gICAgaWYgKCFWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmcocmVnaXN0cnlOYW1lKSkKLSAgICB7Ci0gICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgZm9ybVRvb2wuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUkVHSVNUUllfTkFNRSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfUkVHSVNUUllfTkFNRSIpKTsKLSAgICB9Ci0KLSAgICBpZiAoaW5xdWlyeVVSTCAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuSU5RVUlSWV9VUkwsaW5xdWlyeVVSTCk7Ci0gICAgaWYgKCFWYWxpZGF0b3IudmFsaWRhdGVVUkwoaW5xdWlyeVVSTCkpCi0gICAgewotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgIGZvcm1Ub29sLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLklOUVVJUllfVVJMKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9JTlFVSVJZX1VSTCIpKTsKLSAgICB9Ci0KLSAgICBpZiAocHVibGlzaFVSTCAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUFVCTElTSF9VUkwsIHB1Ymxpc2hVUkwpOwotICAgIAotICAgIGlmICh1c2VybmFtZSAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuVURESV9VU0VSTkFNRSwgdXNlcm5hbWUpOwotCi0gICAgaWYgKHBhc3N3b3JkICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5VRERJX1BBU1NXT1JELCBwYXNzd29yZCk7Ci0KLSAgICBpZiAoY2hlY2tVc2VyRGVmaW5lZENhdGVnb3JpZXNDaGVja2VkICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5DSEVDS19VU0VSX0RFRklORURfQ0FURUdPUklFUyxjaGVja1VzZXJEZWZpbmVkQ2F0ZWdvcmllc0NoZWNrZWQpOwotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuQ0hFQ0tfVVNFUl9ERUZJTkVEX0NBVEVHT1JJRVMpOwotICAgICAgCi0gICAgaWYgKGNhdGVnb3JpZXNEaXJlY3RvcnkgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLkNBVEVHT1JJRVNfRElSRUNUT1JZLGNhdGVnb3JpZXNEaXJlY3RvcnkpOwotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuQ0FURUdPUklFU19ESVJFQ1RPUlkpOwotCi0gICAgZm9ybVRvb2wudXBkYXRlUHJvcGVydHlUYWJsZShwcm9wZXJ0eVRhYmxlXyk7Ci0gICAgcmV0dXJuIGlucHV0c1ZhbGlkOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgZ2F0aGVyV1NVc2VyRGVmaW5lZENhdGVnb3JpZXMoVURESVByb3h5IHByb3h5LEhhc2h0YWJsZSBjYXRlZ29yeU1vZGVscykKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIENhdGVnb3J5QmFnIGNhdGVnb3J5QmFnID0gbmV3IENhdGVnb3J5QmFnKCk7Ci0gICAgICBjYXRlZ29yeUJhZy5hZGQobmV3IEtleWVkUmVmZXJlbmNlKCIiLCJjYXRlZ29yaXphdGlvbiIsVE1vZGVsLlRZUEVTX1RNT0RFTF9LRVkpKTsKLSAgICAgIFRNb2RlbExpc3QgdE1vZGVsTGlzdCA9IHByb3h5LmZpbmRfdE1vZGVsKCIlIixjYXRlZ29yeUJhZyxudWxsLG51bGwsMTAwKTsKLSAgICAgIFRNb2RlbEluZm9zIHRNb2RlbEluZm9zID0gdE1vZGVsTGlzdC5nZXRUTW9kZWxJbmZvcygpOwotICAgICAgVmVjdG9yIHRNb2RlbEtleVZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPHRNb2RlbEluZm9zLnNpemUoKTtpKyspCi0gICAgICB7Ci0gICAgICAgIFRNb2RlbEluZm8gdE1vZGVsSW5mbyA9IHRNb2RlbEluZm9zLmdldChpKTsKLSAgICAgICAgdE1vZGVsS2V5VmVjdG9yLmFkZEVsZW1lbnQodE1vZGVsSW5mby5nZXRUTW9kZWxLZXkoKSk7Ci0gICAgICB9Ci0gICAgICBUTW9kZWxEZXRhaWwgdE1vZGVsRGV0YWlsID0gcHJveHkuZ2V0X3RNb2RlbERldGFpbCh0TW9kZWxLZXlWZWN0b3IpOwotICAgICAgVmVjdG9yIHRNb2RlbFZlY3RvciA9IHRNb2RlbERldGFpbC5nZXRUTW9kZWxWZWN0b3IoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPHRNb2RlbFZlY3Rvci5zaXplKCk7aSsrKQotICAgICAgewotICAgICAgICBUTW9kZWwgdE1vZGVsID0gKFRNb2RlbCl0TW9kZWxWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgICBib29sZWFuIGNoZWNrZWQgPSBmYWxzZTsKLSAgICAgICAgU3RyaW5nIGRpc3BsYXlOYW1lID0gbnVsbDsKLSAgICAgICAgU3RyaW5nIGNhdGVnb3J5S2V5ID0gbnVsbDsKLSAgICAgICAgY2F0ZWdvcnlCYWcgPSB0TW9kZWwuZ2V0Q2F0ZWdvcnlCYWcoKTsKLSAgICAgICAgZm9yIChpbnQgaj0wO2o8Y2F0ZWdvcnlCYWcuc2l6ZSgpO2orKykKLSAgICAgICAgewotICAgICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gY2F0ZWdvcnlCYWcuZ2V0KGopOwotICAgICAgICAgIFN0cmluZyBrclRNb2RlbEtleSA9IGtyLmdldFRNb2RlbEtleSgpOwotICAgICAgICAgIGlmIChrclRNb2RlbEtleS5lcXVhbHNJZ25vcmVDYXNlKFRNb2RlbC5HRU5FUkFMX0tFWVdPUkRTX1RNT0RFTF9LRVkpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBrcktleU5hbWUgPSBrci5nZXRLZXlOYW1lKCk7Ci0gICAgICAgICAgICBpZiAoa3JLZXlOYW1lLmVxdWFscygidXJuOngtaWJtOnVkZGk6Y3VzdG9tVGF4b25vbXk6a2V5IikpCi0gICAgICAgICAgICAgIGNhdGVnb3J5S2V5ID0ga3IuZ2V0S2V5VmFsdWUoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGtyS2V5TmFtZS5lcXVhbHMoInVybjp4LWlibTp1ZGRpOmN1c3RvbVRheG9ub215OmRpc3BsYXlOYW1lIikpCi0gICAgICAgICAgICAgIGRpc3BsYXlOYW1lID0ga3IuZ2V0S2V5VmFsdWUoKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZiAoa3JUTW9kZWxLZXkuZXF1YWxzSWdub3JlQ2FzZShUTW9kZWwuVFlQRVNfVE1PREVMX0tFWSkpCi0gICAgICAgICAgICBjaGVja2VkID0ga3IuZ2V0S2V5VmFsdWUoKS5lcXVhbHMoImNoZWNrZWQiKTsgICAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgICBpZiAoY2F0ZWdvcnlLZXkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGlmIChkaXNwbGF5TmFtZSA9PSBudWxsKQotICAgICAgICAgICAgZGlzcGxheU5hbWUgPSB0TW9kZWwuZ2V0TmFtZVN0cmluZygpOwotICAgICAgICAgIENhdGVnb3J5TW9kZWwgY2F0ZWdvcnlNb2RlbCA9IG5ldyBDYXRlZ29yeU1vZGVsKCk7Ci0gICAgICAgICAgY2F0ZWdvcnlNb2RlbC5zZXRDYXRlZ29yeUtleShjYXRlZ29yeUtleSk7Ci0gICAgICAgICAgY2F0ZWdvcnlNb2RlbC5lbmFibGVDaGVja2VkKGNoZWNrZWQpOwotICAgICAgICAgIGNhdGVnb3J5TW9kZWwuc2V0RGlzcGxheU5hbWUoZGlzcGxheU5hbWUpOwotICAgICAgICAgIFN0cmluZyB0TW9kZWxLZXkgPSB0TW9kZWwuZ2V0VE1vZGVsS2V5KCk7Ci0gICAgICAgICAgY2F0ZWdvcnlNb2RlbC5zZXRUTW9kZWxLZXkodE1vZGVsS2V5KTsKLSAgICAgICAgICBjYXRlZ29yeU1vZGVscy5wdXQodE1vZGVsS2V5LGNhdGVnb3J5TW9kZWwpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChVRERJRXhjZXB0aW9uIGUpCi0gICAgewotICAgIH0KLSAgICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIGUpCi0gICAgewotICAgIH0KLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIFN0cmluZyByZWdpc3RyeU5hbWUgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlJFR0lTVFJZX05BTUUpOwotICAgICAgU3RyaW5nIGlucXVpcnlVUkwgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLklOUVVJUllfVVJMKTsKLSAgICAgIFN0cmluZyBwdWJsaXNoVVJMID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5QVUJMSVNIX1VSTCk7Ci0gICAgICBTdHJpbmcgcmVnaXN0cmF0aW9uVVJMID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5SRUdJU1RSQVRJT05fVVJMKTsKLSAgICAgIFN0cmluZyB1c2VybmFtZSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuVURESV9VU0VSTkFNRSk7Ci0gICAgICBTdHJpbmcgcGFzc3dvcmQgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlVERElfUEFTU1dPUkQpOwotICAgICAgYm9vbGVhbiBjaGVja0ZvclVzZXJEZWZpbmVkQ2F0ZWdvcmllc0NoZWNrZWQgPSAocHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuQ0hFQ0tfVVNFUl9ERUZJTkVEX0NBVEVHT1JJRVMpICE9IG51bGwpOwotICAgICAgU3RyaW5nIGNhdGVnb3JpZXNEaXJlY3RvcnkgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLkNBVEVHT1JJRVNfRElSRUNUT1JZKTsKLQotICAgICAgU3RyaW5nIHJlY29nbml6ZWRQdWJsaXNoVVJMID0gdWRkaVBlcnNwZWN0aXZlLmdldEtub3duUmVnaXN0cnlQdWJsaXNoVVJMKGlucXVpcnlVUkwpOwotICAgICAgU3RyaW5nIHJlY29nbml6ZWRSZWdpc3RyYXRpb25VUkwgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0S25vd25SZWdpc3RyeVJlZ2lzdHJhdGlvblVSTChpbnF1aXJ5VVJMKTsKLSAgICAgIAotICAgICAgaWYgKHB1Ymxpc2hVUkwgPT0gbnVsbCkKLSAgICAgICAgcHVibGlzaFVSTCA9IHJlY29nbml6ZWRQdWJsaXNoVVJMOwotICAgICAgaWYgKHJlZ2lzdHJhdGlvblVSTCA9PSBudWxsKQotICAgICAgICByZWdpc3RyYXRpb25VUkwgPSByZWNvZ25pemVkUmVnaXN0cmF0aW9uVVJMOwotICAgICAgICAKLSAgICAgIFVERElNYWluTm9kZSB1ZGRpTWFpbk5vZGUgPSAoVURESU1haW5Ob2RlKShjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCkuZ2V0Um9vdE5vZGUoKSk7Ci0gICAgICBVRERJTWFpbkVsZW1lbnQgdWRkaU1haW5FbGVtZW50ID0gKFVERElNYWluRWxlbWVudCl1ZGRpTWFpbk5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgIFByb3BlcnRpZXMgcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOwotICAgICAgcHJvcHMucHV0KEFjdGlvbklucHV0cy5UUkFOU1BPUlRfQ0xBU1NfTkFNRSwgQWN0aW9uSW5wdXRzLlRSQVNQT1JUX0NMQVNTKTsKLSAgICAgIFVERElQcm94eSBwcm94eSA9IG5ldyBVRERJUHJveHkocHJvcHMpOwotICAgICAgcHJveHkuc2V0SW5xdWlyeVVSTChuZXcgVVJMKGlucXVpcnlVUkwpKTsKLSAgICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdpc3RyeUVsZW1lbnQgPSBuZXcgUmVnaXN0cnlFbGVtZW50KHByb3h5LGlucXVpcnlVUkwscmVnaXN0cnlOYW1lLHVkZGlNYWluRWxlbWVudC5nZXRNb2RlbCgpKTsKLSAgICAgIC8vIFNldCByZWdpc3RyeSBlbGVtZW50J3MgcHVibGlzaCBVUkwgYW5kIHJlZ2lzdHJhdGlvbiBVUkwgcHJvdmlkZWQgYnkgZXh0ZXJuYWwgY2FsbGVycyAoZS5nLiBmYXZvcml0ZXMpLgotICAgICAgaWYgKHB1Ymxpc2hVUkwgIT0gbnVsbCkKLSAgICAgICAgcmVnaXN0cnlFbGVtZW50LnNldENhY2hlZFB1Ymxpc2hVUkwocHVibGlzaFVSTCk7Ci0gICAgICBpZiAocmVnaXN0cmF0aW9uVVJMICE9IG51bGwpCi0gICAgICAgIHJlZ2lzdHJ5RWxlbWVudC5zZXRSZWdpc3RyYXRpb25VUkwocmVnaXN0cmF0aW9uVVJMKTsKLSAgICAgIGlmICh1c2VybmFtZSAhPSBudWxsKQotICAgICAgCXJlZ2lzdHJ5RWxlbWVudC5zZXRVc2VySWQodXNlcm5hbWUpOwotICAgICAgaWYgKHBhc3N3b3JkICE9IG51bGwpCi0gICAgICAJcmVnaXN0cnlFbGVtZW50LnNldENyZWQocGFzc3dvcmQpOwotICAgICAgcmVnaXN0cnlFbGVtZW50LnNldENoZWNrRm9yVXNlckRlZmluZWRDYXRlZ29yaWVzKGNoZWNrRm9yVXNlckRlZmluZWRDYXRlZ29yaWVzQ2hlY2tlZCk7Ci0gICAgICBpZiAoY2hlY2tGb3JVc2VyRGVmaW5lZENhdGVnb3JpZXNDaGVja2VkKQotICAgICAgewotICAgICAgICBIYXNodGFibGUgY2F0ZWdvcnlNb2RlbHMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgICAgIGdhdGhlcldTVXNlckRlZmluZWRDYXRlZ29yaWVzKHByb3h5LGNhdGVnb3J5TW9kZWxzKTsKLSAgICAgICAgaWYgKGNhdGVnb3J5TW9kZWxzLnNpemUoKSA+IDApCi0gICAgICAgICAgcmVnaXN0cnlFbGVtZW50LnNldFVzZXJEZWZpbmVkQ2F0ZWdvcmllcyhjYXRlZ29yeU1vZGVscyk7Ci0gICAgICB9Ci0gICAgICByZWdpc3RyeUVsZW1lbnQuc2V0Q2F0ZWdvcmllc0RpcmVjdG9yeShjYXRlZ29yaWVzRGlyZWN0b3J5KTsKLSAgICAgIHVkZGlNYWluRWxlbWVudC5jb25uZWN0KHJlZ2lzdHJ5RWxlbWVudCxVRERJTW9kZWxDb25zdGFudHMuUkVMX1JFR0lTVFJJRVMsTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gdWRkaU1haW5Ob2RlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgICBpbnQgbmV3UmVnaXN0cnlOb2RlSWQgPSB1ZGRpTWFpbk5vZGUuZ2V0Q2hpbGROb2RlKHJlZ2lzdHJ5RWxlbWVudCkuZ2V0Tm9kZUlkKCk7Ci0gICAgICAvLyBTZWxlY3QgdGhlIG5ldyByZWdpc3RyeSBub2RlIGFuZCBhZGQgdGhlIHNlbGVjdCBhY3Rpb24gdG8gdGhlIGhpc3RvcnkuCi0gICAgICBub2RlTWFuYWdlci5zZXRTZWxlY3RlZE5vZGVJZChuZXdSZWdpc3RyeU5vZGVJZCk7Ci0gICAgICBOb2RlIHJlZ2lzdHJ5Tm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgICAgVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIgPSByZWdpc3RyeU5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCk7Ci0gICAgICBhZGRUb0hpc3RvcnkoQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1VEREksdG9vbE1hbmFnZXIuZ2V0U2VsZWN0ZWRUb29sKCkuZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYodHJ1ZSkpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX1JFR0lTVFJZX09QRU5FRCIsbmV3IFN0cmluZ1tde3JlZ2lzdHJ5TmFtZSxpbnF1aXJ5VVJMfSkpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJNYWxmb3JtZWRVUkxFeGNlcHRpb24iKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgIEZvcm1Ub29sIGZvcm1Ub29sID0gZ2V0U2VsZWN0ZWRGb3JtVG9vbCgpOwotICAgICAgZm9ybVRvb2wuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuSU5RVUlSWV9VUkwpOwotICAgIH0KLSAgICAvKgotICAgIGNhdGNoIChGb3JtSW5wdXRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICAgICovCi0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9QdWJsaXNoQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9QdWJsaXNoQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlMjliNjIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUHVibGlzaEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjM4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyLklUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLkJ1c2luZXNzRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUHVibGlzaGVkSXRlbXNFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlNlcnZpY2VFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5TZXJ2aWNlSW50ZXJmYWNlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5NdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5SZWdpc3RyeU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlZhbGlkYXRvcjsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJ1c2luZXNzLkJ1c2luZXNzRW50aXR5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuc2VydmljZS5CdXNpbmVzc1NlcnZpY2U7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgUHVibGlzaEFjdGlvbiBleHRlbmRzIFVERElQcm9wZXJ0aWVzRm9ybUFjdGlvbgotewotICBwcm90ZWN0ZWQgU3RyaW5nIHN1YlF1ZXJ5S2V5XzsKLSAgcHJvdGVjdGVkIGJvb2xlYW4gc3ViUXVlcnlJbml0aWF0ZWRfOwotICBwcm90ZWN0ZWQgU3RyaW5nIG5ld1N1YlF1ZXJ5XzsKLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNTdWJRdWVyeUdldF87Ci0gIHByb3RlY3RlZCBTdHJpbmcgbmV3U3ViUXVlcnlJdGVtXzsKLSAgcHJvdGVjdGVkIFJlZ2lzdHJ5Tm9kZSByZWdOb2RlXzsKLQotICBwdWJsaWMgUHVibGlzaEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICBzdWJRdWVyeUtleV8gPSBudWxsOwotICAgIGlzU3ViUXVlcnlHZXRfID0gZmFsc2U7Ci0gICAgc3ViUXVlcnlJbml0aWF0ZWRfID0gZmFsc2U7Ci0gICAgcmVnTm9kZV8gPSBnZXRSZWdpc3RyeU5vZGUoKTsKLSAgfQotCi0gIHByb3RlY3RlZCBhYnN0cmFjdCBib29sZWFuIHByb2Nlc3NPdGhlcnMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyLEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gcHJvY2Vzc1BhcnNlZFJlc3VsdHMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIC8vIFNldHVwIGZvciBNdWx0aXBhcnRGb3JtRGF0YVBhcnNlclRyYW5zZm9ybWVyCi0gICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5NVUxUSVBBUlRfRk9STV9EQVRBX1BBUlNFUiwgcGFyc2VyKTsKLSAKLSAgICBuZXdTdWJRdWVyeV8gPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuTkVXX1NVQlFVRVJZX0lOSVRJQVRFRCk7Ci0gICAgU3RyaW5nIGlzU3ViUXVlcnlHZXRTdHJpbmcgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfR0VUKTsKLSAgICBuZXdTdWJRdWVyeUl0ZW1fID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLk5FV19TVUJRVUVSWV9RVUVSWV9JVEVNKTsKLSAgICBzdWJRdWVyeUtleV8gPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZKTsKLQotICAgIC8vIFZhbGlkYXRlIHRoZSBkYXRhLgotICAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSB0cnVlOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIEZvcm1Ub29sIGZvcm1Ub29sID0gZ2V0U2VsZWN0ZWRGb3JtVG9vbCgpOwotICAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJID0gKChNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSlmb3JtVG9vbCkuZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHN1YlF1ZXJ5S2V5Xyk7Ci0gICAgZm9ybVRvb2xQSS5jbGVhckVycm9ycygpOwotCi0gICAgaWYgKG5ld1N1YlF1ZXJ5XyAhPSBudWxsICYmIG5ld1N1YlF1ZXJ5Xy5sZW5ndGgoKSA+IDApCi0gICAgICBzdWJRdWVyeUluaXRpYXRlZF8gPSB0cnVlOwotICAgIGVsc2UKLSAgICAgIHN1YlF1ZXJ5SW5pdGlhdGVkXyA9IGZhbHNlOwotCi0gICAgaWYgKGlzU3ViUXVlcnlHZXRTdHJpbmcgIT0gbnVsbCkKLSAgICAgIGlzU3ViUXVlcnlHZXRfID0gQm9vbGVhbi52YWx1ZU9mKGlzU3ViUXVlcnlHZXRTdHJpbmcpLmJvb2xlYW5WYWx1ZSgpOwotCi0gICAgaWYgKCFwcm9jZXNzT3RoZXJzKHBhcnNlcixmb3JtVG9vbFBJKSAmJiAhc3ViUXVlcnlJbml0aWF0ZWRfKQotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLQotICAgIGZvciAoaW50IGk9MDtpPHJlbW92ZWRQcm9wZXJ0aWVzXy5zaXplKCk7aSsrKQotICAgICAgZm9ybVRvb2xQSS5yZW1vdmVQcm9wZXJ0eShyZW1vdmVkUHJvcGVydGllc18uZWxlbWVudEF0KGkpKTsKLSAgICBmb3JtVG9vbFBJLnVwZGF0ZVByb3BlcnR5VGFibGUocHJvcGVydHlUYWJsZV8pOwotCi0gICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgIFN0cmluZyB1c2VySWQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICBTdHJpbmcgcGFzc3dvcmQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotCi0gICAgYm9vbGVhbiB2YWxpZGF0ZUF1dGhlbnRpY2F0aW9uID0gIXJlZ0VsZW1lbnQuaXNMb2dnZWRJbigpOwotCi0gICAgaWYgKHB1Ymxpc2hVUkwgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCxwdWJsaXNoVVJMKTsKLSAgICAgIGZvcm1Ub29sLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwscHVibGlzaFVSTCk7Ci0gICAgfQotCi0gICAgaWYgKCFzdWJRdWVyeUluaXRpYXRlZF8gJiYgdmFsaWRhdGVBdXRoZW50aWNhdGlvbiAmJiAhVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nKHB1Ymxpc2hVUkwpKQotICAgIHsKLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICBmb3JtVG9vbC5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfUFVCTElTSF9VUkwiKSk7Ci0gICAgfQotCi0gICAgaWYgKHVzZXJJZCAhPSBudWxsKQotICAgIHsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCx1c2VySWQpOwotICAgICAgZm9ybVRvb2wuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQsdXNlcklkKTsKLSAgICB9Ci0KLSAgICBpZiAoIXN1YlF1ZXJ5SW5pdGlhdGVkXyAmJiB2YWxpZGF0ZUF1dGhlbnRpY2F0aW9uICYmICFWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmcodXNlcklkKSkKLSAgICB7Ci0gICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgZm9ybVRvb2wuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9VU0VSSUQiKSk7Ci0gICAgfQotCi0gICAgaWYgKHBhc3N3b3JkICE9IG51bGwpCi0gICAgewotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQscGFzc3dvcmQpOwotICAgICAgZm9ybVRvb2wuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCxwYXNzd29yZCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGlucHV0c1ZhbGlkOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgYWRkUHVibGlzaGVkSXRlbU5vZGUoQnVzaW5lc3NFbnRpdHkgYmUsUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQpCi0gIHsKLSAgICBCdXNpbmVzc0VsZW1lbnQgYmVFbGVtZW50ID0gbmV3IEJ1c2luZXNzRWxlbWVudChiZSxyZWdFbGVtZW50LmdldE1vZGVsKCkpOwotICAgIFB1Ymxpc2hlZEl0ZW1zRWxlbWVudCBwdWJsaXNoZWRCdXNpbmVzc2VzRWxlbWVudCA9IHJlZ0VsZW1lbnQuZ2V0UHVibGlzaGVkQnVzaW5lc3Nlc0VsZW1lbnQoKTsKLSAgICBFbnVtZXJhdGlvbiBlID0gcHVibGlzaGVkQnVzaW5lc3Nlc0VsZW1lbnQuZ2V0SXRlbXMoKTsKLSAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICB7Ci0gICAgICBCdXNpbmVzc0VsZW1lbnQgZWxlbWVudCA9IChCdXNpbmVzc0VsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgICAgQnVzaW5lc3NFbnRpdHkgZWxlbWVudEJFID0gZWxlbWVudC5nZXRCdXNpbmVzc0VudGl0eSgpOwotICAgICAgaWYgKGVsZW1lbnRCRS5nZXRCdXNpbmVzc0tleSgpLmVxdWFscyhiZS5nZXRCdXNpbmVzc0tleSgpKSkKLSAgICAgIHsKLSAgICAgICAgZWxlbWVudC5kaXNjb25uZWN0QWxsKCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICBjb25uZWN0RWxlbWVudHMocHVibGlzaGVkQnVzaW5lc3Nlc0VsZW1lbnQsYmVFbGVtZW50KTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIGFkZFB1Ymxpc2hlZEl0ZW1Ob2RlKEJ1c2luZXNzU2VydmljZSBicyxSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCkKLSAgewotICAgIFNlcnZpY2VFbGVtZW50IHNFbGVtZW50ID0gbmV3IFNlcnZpY2VFbGVtZW50KGJzLHJlZ0VsZW1lbnQuZ2V0TW9kZWwoKSk7Ci0gICAgUHVibGlzaGVkSXRlbXNFbGVtZW50IHB1Ymxpc2hlZFNlcnZpY2VzRWxlbWVudCA9IHJlZ0VsZW1lbnQuZ2V0UHVibGlzaGVkU2VydmljZXNFbGVtZW50KCk7Ci0gICAgRW51bWVyYXRpb24gZSA9IHB1Ymxpc2hlZFNlcnZpY2VzRWxlbWVudC5nZXRJdGVtcygpOwotICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIFNlcnZpY2VFbGVtZW50IGVsZW1lbnQgPSAoU2VydmljZUVsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgICAgQnVzaW5lc3NTZXJ2aWNlIGVsZW1lbnRCUyA9IGVsZW1lbnQuZ2V0QnVzaW5lc3NTZXJ2aWNlKCk7Ci0gICAgICBpZiAoZWxlbWVudEJTLmdldFNlcnZpY2VLZXkoKS5lcXVhbHMoYnMuZ2V0U2VydmljZUtleSgpKSkKLSAgICAgIHsKLSAgICAgICAgZWxlbWVudC5kaXNjb25uZWN0QWxsKCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICBjb25uZWN0RWxlbWVudHMocHVibGlzaGVkU2VydmljZXNFbGVtZW50LHNFbGVtZW50KTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIGFkZFB1Ymxpc2hlZEl0ZW1Ob2RlKFRNb2RlbCB0TW9kZWwsUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQpCi0gIHsKLSAgICBTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCBzaUVsZW1lbnQgPSBuZXcgU2VydmljZUludGVyZmFjZUVsZW1lbnQodE1vZGVsLHJlZ0VsZW1lbnQuZ2V0TW9kZWwoKSk7Ci0gICAgUHVibGlzaGVkSXRlbXNFbGVtZW50IHB1Ymxpc2hlZFNlcnZpY2VJbnRlcmZhY2VzRWxlbWVudCA9IHJlZ0VsZW1lbnQuZ2V0UHVibGlzaGVkU2VydmljZUludGVyZmFjZXNFbGVtZW50KCk7Ci0gICAgRW51bWVyYXRpb24gZSA9IHB1Ymxpc2hlZFNlcnZpY2VJbnRlcmZhY2VzRWxlbWVudC5nZXRJdGVtcygpOwotICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50IGVsZW1lbnQgPSAoU2VydmljZUludGVyZmFjZUVsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgICAgVE1vZGVsIGVsZW1lbnRUTW9kZWwgPSBlbGVtZW50LmdldFRNb2RlbCgpOwotICAgICAgaWYgKHRNb2RlbC5nZXRUTW9kZWxLZXkoKS5lcXVhbHMoZWxlbWVudFRNb2RlbC5nZXRUTW9kZWxLZXkoKSkpCi0gICAgICB7Ci0gICAgICAgIGVsZW1lbnQuZGlzY29ubmVjdEFsbCgpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgY29ubmVjdEVsZW1lbnRzKHB1Ymxpc2hlZFNlcnZpY2VJbnRlcmZhY2VzRWxlbWVudCxzaUVsZW1lbnQpOwotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIGNvbm5lY3RFbGVtZW50cyhQdWJsaXNoZWRJdGVtc0VsZW1lbnQgcHVibGlzaGVkSXRlbXNFbGVtZW50LFRyZWVFbGVtZW50IGl0ZW1FbGVtZW50KQotICB7Ci0gICAgcHVibGlzaGVkSXRlbXNFbGVtZW50LmNvbm5lY3QoaXRlbUVsZW1lbnQsVURESU1vZGVsQ29uc3RhbnRzLlJFTF9QVUJMSVNIRURfSVRFTVMsTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICBpbnQgbmV3Tm9kZUlkID0gcmVnTm9kZV8uZ2V0Q2hpbGROb2RlKHB1Ymxpc2hlZEl0ZW1zRWxlbWVudCkuZ2V0Q2hpbGROb2RlKGl0ZW1FbGVtZW50KS5nZXROb2RlSWQoKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHJlZ05vZGVfLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgbm9kZU1hbmFnZXIuc2V0U2VsZWN0ZWROb2RlSWQobmV3Tm9kZUlkKTsKLSAgICBOb2RlIG5ld05vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBUb29sTWFuYWdlciB0b29sTWFuYWdlciA9IG5ld05vZGUuZ2V0VG9vbE1hbmFnZXIoKTsKLSAgICBUb29sIHNlbGVjdGVkVG9vbCA9IHRvb2xNYW5hZ2VyLmdldFNlbGVjdGVkVG9vbCgpOwotICAgIGFkZFRvSGlzdG9yeShBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfVURESSxzZWxlY3RlZFRvb2wuZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYodHJ1ZSkpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNTdWJRdWVyeUluaXRpYXRlZCgpCi0gIHsKLSAgICByZXR1cm4gc3ViUXVlcnlJbml0aWF0ZWRfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNTdWJRdWVyeUdldCgpCi0gIHsKLSAgICByZXR1cm4gaXNTdWJRdWVyeUdldF87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN1YlF1ZXJ5S2V5KCkKLSAgewotICAgIHJldHVybiBzdWJRdWVyeUtleV87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldE5ld1N1YlF1ZXJ5KCkKLSAgewotICAgIHJldHVybiBuZXdTdWJRdWVyeV87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldE5ld1N1YlF1ZXJ5SXRlbSgpCi0gIHsKLSAgICByZXR1cm4gbmV3U3ViUXVlcnlJdGVtXzsKLSAgfQotICAKLSAgcHVibGljIElUcmFuc2Zvcm1lcltdIGdldFRyYW5zZm9ybWVycygpCi0gIHsKLSAgICBJVHJhbnNmb3JtZXJbXSBwYXJlbnRUcmFuc2Zvcm1lcnMgPSBzdXBlci5nZXRUcmFuc2Zvcm1lcnMoKTsKLSAgICBJVHJhbnNmb3JtZXJbXSB0cmFuc2Zvcm1lcnMgPSBuZXcgSVRyYW5zZm9ybWVyW3BhcmVudFRyYW5zZm9ybWVycy5sZW5ndGggKyAxXTsKLSAgICBTeXN0ZW0uYXJyYXljb3B5KHBhcmVudFRyYW5zZm9ybWVycywgMCwgdHJhbnNmb3JtZXJzLCAwLCBwYXJlbnRUcmFuc2Zvcm1lcnMubGVuZ3RoKTsKLSAgICB0cmFuc2Zvcm1lcnNbdHJhbnNmb3JtZXJzLmxlbmd0aCAtIDFdID0gbmV3IE11bHRpcGFydEZvcm1EYXRhUGFyc2VyVHJhbnNmb3JtZXIoY29udHJvbGxlcl8pOwotICAgIHJldHVybiB0cmFuc2Zvcm1lcnM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZnJlc2hVRERJTm9kZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVmcmVzaFVERElOb2RlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjMWFkYTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVmcmVzaFVERElOb2RlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLk1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLkFkZFJlZ2lzdHJ5VG9VRERJUGVyc3BlY3RpdmVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuQnVzaW5lc3NFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlNlcnZpY2VFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5TZXJ2aWNlSW50ZXJmYWNlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5CdXNpbmVzc05vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuUHVibGlzaGVkSXRlbXNOb2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlF1ZXJ5Tm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5RdWVyeVBhcmVudE5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuUmVnaXN0cnlOb2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlNlcnZpY2VJbnRlcmZhY2VOb2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlNlcnZpY2VOb2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJ1c2luZXNzLkJ1c2luZXNzRW50aXR5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuc2VydmljZS5CdXNpbmVzc1NlcnZpY2U7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsOwotCi1wdWJsaWMgY2xhc3MgUmVmcmVzaFVERElOb2RlQWN0aW9uIGV4dGVuZHMgVURESU5vZGVBY3Rpb24KLXsKLSAgcHJpdmF0ZSBWZWN0b3Igc3RhbGVOb2Rlc187Ci0gIHB1YmxpYyBSZWZyZXNoVURESU5vZGVBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5OT0RFSUQsU3RyaW5nLnZhbHVlT2YoY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlSWQoKSkpOwotICAgIHN0YWxlTm9kZXNfID0gbmV3IFZlY3RvcigpOwotICB9Ci0KLSAgLy8gdWRkaS9hY3Rpb25zL1JlZnJlc2hVRERJTm9kZUFjdGlvbkpTUC5qc3A/bm9kZUlkPS4uLgotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSWQpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoInVkZGkvYWN0aW9ucy9SZWZyZXNoVURESU5vZGVBY3Rpb25KU1AuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpLmFwcGVuZCgnPScpLmFwcGVuZChub2RlSWQpOwotICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiB2ZXJpZnlOb2RlRGF0YSgpCi0gIHsKLSAgICBpbnQgbm9kZUlkID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgTm9kZSBub2RlID0gbm9kZU1hbmFnZXJfLmdldE5vZGUobm9kZUlkKTsKLSAgICBpZiAobm9kZSBpbnN0YW5jZW9mIEJ1c2luZXNzTm9kZSkKLSAgICAgIHJldHVybiByZWZyZXNoQnVzaW5lc3NFbGVtZW50KChCdXNpbmVzc05vZGUpbm9kZSk7Ci0gICAgZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIFNlcnZpY2VOb2RlKQotICAgICAgcmV0dXJuIHJlZnJlc2hTZXJ2aWNlRWxlbWVudCgoU2VydmljZU5vZGUpbm9kZSk7Ci0gICAgZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIFNlcnZpY2VJbnRlcmZhY2VOb2RlKQotICAgICAgcmV0dXJuIHJlZnJlc2hTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCgoU2VydmljZUludGVyZmFjZU5vZGUpbm9kZSk7Ci0gICAgZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIFF1ZXJ5Tm9kZSkKLSAgICB7Ci0gICAgICAvLyBOb3RoaW5nIHRvIHZlcmlmeQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGVsc2UgaWYgKG5vZGUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBSZWdpc3RyeU5vZGUKLSAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgUmVnaXN0cnlOb2RlKQotICAgICAgICByZWZyZXNoUmVnaXN0cnlFbGVtZW50KChSZWdpc3RyeU5vZGUpbm9kZSk7Ci0gICAgICAgIAotICAgICAgLy8gRm9sZGVyTm9kZXMKLSAgICAgIFZlY3RvciBjaGlsZE5vZGVzID0gbm9kZS5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICBWZWN0b3IgcmVmcmVzaEFjdGlvbnMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxjaGlsZE5vZGVzLnNpemUoKTtpKyspCi0gICAgICB7Ci0gICAgICAgIE5vZGUgY2hpbGROb2RlID0gKE5vZGUpY2hpbGROb2Rlcy5lbGVtZW50QXQoaSk7Ci0gICAgICAgIFJlZnJlc2hVRERJTm9kZUFjdGlvbiBhY3Rpb24gPSBuZXcgUmVmcmVzaFVERElOb2RlQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICAgICAgYWN0aW9uLnNldFN0YWxlTm9kZXMoc3RhbGVOb2Rlc18pOwotICAgICAgICBIYXNodGFibGUgcHJvcGVydHlUYWJsZSA9IGFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgICAgIFN0cmluZyBjaGlsZE5vZGVJZFN0cmluZyA9IFN0cmluZy52YWx1ZU9mKGNoaWxkTm9kZS5nZXROb2RlSWQoKSk7Ci0gICAgICAgIHByb3BlcnR5VGFibGUucHV0KEFjdGlvbklucHV0cy5OT0RFSUQsY2hpbGROb2RlSWRTdHJpbmcpOwotICAgICAgICBpZiAoIWFjdGlvbi52ZXJpZnlOb2RlRGF0YSgpKQotICAgICAgICAgIHN0YWxlTm9kZXNfLmFkZEVsZW1lbnQoY2hpbGROb2RlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHJlZnJlc2hBY3Rpb25zLmFkZEVsZW1lbnQoYWN0aW9uKTsKLSAgICAgIH0KLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLkxBVEVTVF9PQkpFQ1QscmVmcmVzaEFjdGlvbnMpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIAotICBwcml2YXRlIGZpbmFsIHZvaWQgcmVmcmVzaFJlZ2lzdHJ5RWxlbWVudChSZWdpc3RyeU5vZGUgcmVnTm9kZSkKLSAgewotICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgSGFzaHRhYmxlIHVzZXJEZWZpbmVkQ2F0ZWdvcmllcyA9IG51bGw7Ci0gICAgaWYgKHJlZ0VsZW1lbnQuZ2V0Q2hlY2tGb3JVc2VyRGVmaW5lZENhdGVnb3JpZXMoKSkKLSAgICB7Ci0gICAgICB1c2VyRGVmaW5lZENhdGVnb3JpZXMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgICBPcGVuUmVnaXN0cnlBY3Rpb24gb3BlblJlZ0FjdGlvbiA9IG5ldyBPcGVuUmVnaXN0cnlBY3Rpb24oY29udHJvbGxlcl8pOwotICAgICAgb3BlblJlZ0FjdGlvbi5nYXRoZXJXU1VzZXJEZWZpbmVkQ2F0ZWdvcmllcyhyZWdFbGVtZW50LmdldFByb3h5KCksdXNlckRlZmluZWRDYXRlZ29yaWVzKTsKLSAgICAgIGlmICghdXNlckRlZmluZWRDYXRlZ29yaWVzLmtleXMoKS5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgIHsKLSAgICAgICAgdXNlckRlZmluZWRDYXRlZ29yaWVzID0gbnVsbDsKLSAgICAgICAgcmVnTm9kZS5zZXRJbWFnZVBhdGgoUmVnaXN0cnlOb2RlLklNQUdFX1BBVEhfU1RBTkRBUkQpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBTdHJpbmcgY2F0ZWdvcmllc0RpcmVjdG9yeSA9IHJlZ0VsZW1lbnQuZ2V0Q2F0ZWdvcmllc0RpcmVjdG9yeSgpOwotICAgICAgICBBZGRSZWdpc3RyeVRvVURESVBlcnNwZWN0aXZlQWN0aW9uIGFkZEFjdGlvbiA9IG5ldyBBZGRSZWdpc3RyeVRvVURESVBlcnNwZWN0aXZlQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICAgICAgaWYgKGNhdGVnb3JpZXNEaXJlY3RvcnkgIT0gbnVsbCkKLSAgICAgICAgICBhZGRBY3Rpb24ubGlua0NhdGVnb3J5TW9kZWxzV2l0aFNhdmVkRGF0YSh1c2VyRGVmaW5lZENhdGVnb3JpZXMuZWxlbWVudHMoKSxjYXRlZ29yaWVzRGlyZWN0b3J5KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIGFkZEFjdGlvbi5saW5rQ2F0ZWdvcnlNb2RlbHNXaXRoU2F2ZWREYXRhKHJlZ0VsZW1lbnQuZ2V0TmFtZSgpLHVzZXJEZWZpbmVkQ2F0ZWdvcmllcy5lbGVtZW50cygpKTsKLSAgICAgICAgcmVnTm9kZS5zZXRJbWFnZVBhdGgoUmVnaXN0cnlOb2RlLklNQUdFX1BBVEhfV0lUSF9VU0VSX0RFRklORURfQ0FURUdPUklFUyk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJlZ0VsZW1lbnQuc2V0VXNlckRlZmluZWRDYXRlZ29yaWVzKHVzZXJEZWZpbmVkQ2F0ZWdvcmllcyk7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gcmVmcmVzaEJ1c2luZXNzRWxlbWVudChCdXNpbmVzc05vZGUgYnVzTm9kZSkKLSAgewotICAgIEJ1c2luZXNzRWxlbWVudCBidXNFbGVtZW50ID0gKEJ1c2luZXNzRWxlbWVudClidXNOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgU3RyaW5nIHV1aWRLZXkgPSBidXNFbGVtZW50LmdldEJ1c2luZXNzRW50aXR5KCkuZ2V0QnVzaW5lc3NLZXkoKTsKLSAgICBSZWdGaW5kQnVzaW5lc3NVVUlEQWN0aW9uIHZlcmlmeUFjdGlvbiA9IG5ldyBSZWdGaW5kQnVzaW5lc3NVVUlEQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICBIYXNodGFibGUgcHJvcGVydHlUYWJsZSA9IHZlcmlmeUFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX0JVU0lORVNTX0tFWSx1dWlkS2V5KTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlJFRlJFU0hfTk9ERSxidXNOb2RlKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX09WRVJSSURFX0FERF9RVUVSWV9OT0RFLEJvb2xlYW4uVFJVRSk7Ci0gICAgYm9vbGVhbiB2ZXJpZnlSZXN1bHQgPSB2ZXJpZnlBY3Rpb24ucnVuKCk7Ci0gICAgaWYgKHZlcmlmeVJlc3VsdCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLkxBVEVTVF9PQkpFQ1QsbmV3IEJ1c2luZXNzRWxlbWVudCgoQnVzaW5lc3NFbnRpdHkpcHJvcGVydHlUYWJsZS5nZXQoVURESUFjdGlvbklucHV0cy5MQVRFU1RfT0JKRUNUKSxidXNFbGVtZW50LmdldE1vZGVsKCkpKTsKLSAgICByZXR1cm4gdmVyaWZ5UmVzdWx0OwotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIHJlZnJlc2hTZXJ2aWNlRWxlbWVudChTZXJ2aWNlTm9kZSBzZXJ2aWNlTm9kZSkKLSAgewotICAgIFNlcnZpY2VFbGVtZW50IHNlcnZpY2VFbGVtZW50ID0gKFNlcnZpY2VFbGVtZW50KXNlcnZpY2VOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgU3RyaW5nIHV1aWRLZXkgPSBzZXJ2aWNlRWxlbWVudC5nZXRCdXNpbmVzc1NlcnZpY2UoKS5nZXRTZXJ2aWNlS2V5KCk7Ci0gICAgUmVnRmluZFNlcnZpY2VVVUlEQWN0aW9uIHZlcmlmeUFjdGlvbiA9IG5ldyBSZWdGaW5kU2VydmljZVVVSURBY3Rpb24oY29udHJvbGxlcl8pOwotICAgIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlID0gdmVyaWZ5QWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9LRVksdXVpZEtleSk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5SRUZSRVNIX05PREUsc2VydmljZU5vZGUpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfT1ZFUlJJREVfQUREX1FVRVJZX05PREUsQm9vbGVhbi5UUlVFKTsKLSAgICBib29sZWFuIHZlcmlmeVJlc3VsdCA9IHZlcmlmeUFjdGlvbi5ydW4oKTsKLSAgICBpZiAodmVyaWZ5UmVzdWx0KQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuTEFURVNUX09CSkVDVCxuZXcgU2VydmljZUVsZW1lbnQoKEJ1c2luZXNzU2VydmljZSlwcm9wZXJ0eVRhYmxlLmdldChVRERJQWN0aW9uSW5wdXRzLkxBVEVTVF9PQkpFQ1QpLHNlcnZpY2VFbGVtZW50LmdldE1vZGVsKCkpKTsKLSAgICByZXR1cm4gdmVyaWZ5UmVzdWx0OwotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIHJlZnJlc2hTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudChTZXJ2aWNlSW50ZXJmYWNlTm9kZSBzaU5vZGUpCi0gIHsKLSAgICBTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCBzaUVsZW1lbnQgPSAoU2VydmljZUludGVyZmFjZUVsZW1lbnQpc2lOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgU3RyaW5nIHV1aWRLZXkgPSBzaUVsZW1lbnQuZ2V0VE1vZGVsKCkuZ2V0VE1vZGVsS2V5KCk7Ci0gICAgUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VVVUlEQWN0aW9uIHZlcmlmeUFjdGlvbiA9IG5ldyBSZWdGaW5kU2VydmljZUludGVyZmFjZVVVSURBY3Rpb24oY29udHJvbGxlcl8pOwotICAgIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlID0gdmVyaWZ5QWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9JTlRFUkZBQ0VfS0VZLHV1aWRLZXkpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUkVGUkVTSF9OT0RFLHNpTm9kZSk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9PVkVSUklERV9BRERfUVVFUllfTk9ERSxCb29sZWFuLlRSVUUpOwotICAgIGJvb2xlYW4gdmVyaWZ5UmVzdWx0ID0gdmVyaWZ5QWN0aW9uLnJ1bigpOwotICAgIGlmICh2ZXJpZnlSZXN1bHQpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5MQVRFU1RfT0JKRUNULG5ldyBTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCgoVE1vZGVsKXByb3BlcnR5VGFibGUuZ2V0KFVERElBY3Rpb25JbnB1dHMuTEFURVNUX09CSkVDVCksc2lFbGVtZW50LmdldE1vZGVsKCkpKTsKLSAgICByZXR1cm4gdmVyaWZ5UmVzdWx0OwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgY29ubmVjdEVsZW1lbnRzKE5vZGUgcGFyZW50Tm9kZSxUcmVlRWxlbWVudCBuZXdFbGVtZW50KQotICB7Ci0gICAgVHJlZUVsZW1lbnQgcGFyZW50RWxlbWVudCA9IHBhcmVudE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBTdHJpbmcgcmVsID0gbnVsbDsKLSAgICBpZiAocGFyZW50Tm9kZSBpbnN0YW5jZW9mIFB1Ymxpc2hlZEl0ZW1zTm9kZSkKLSAgICAgIHJlbCA9IFVERElNb2RlbENvbnN0YW50cy5SRUxfUFVCTElTSEVEX0lURU1TOwotICAgIGVsc2UgaWYgKHBhcmVudE5vZGUgaW5zdGFuY2VvZiBRdWVyeU5vZGUpCi0gICAgICByZWwgPSBVRERJTW9kZWxDb25zdGFudHMuUkVMX1FVRVJZX1JFU1VMVFM7Ci0gICAgZWxzZSBpZiAocGFyZW50Tm9kZSBpbnN0YW5jZW9mIFF1ZXJ5UGFyZW50Tm9kZSkKLSAgICAgIHJlbCA9IFVERElNb2RlbENvbnN0YW50cy5SRUxfUVVFUklFUzsKLSAgICBwYXJlbnRFbGVtZW50LmNvbm5lY3QobmV3RWxlbWVudCxyZWwsTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICBOb2RlIG5ld05vZGUgPSBwYXJlbnROb2RlLmdldENoaWxkTm9kZShuZXdFbGVtZW50KTsKLSAgICBpbnQgbmV3Tm9kZUlkID0gbmV3Tm9kZS5nZXROb2RlSWQoKTsKLSAgICBub2RlTWFuYWdlcl8uc2V0U2VsZWN0ZWROb2RlSWQobmV3Tm9kZUlkKTsKLSAgICBUb29sTWFuYWdlciB0b29sTWFuYWdlciA9IG5ld05vZGUuZ2V0VG9vbE1hbmFnZXIoKTsKLSAgICBUb29sIHNlbGVjdGVkVG9vbCA9IHRvb2xNYW5hZ2VyLmdldFNlbGVjdGVkVG9vbCgpOwotICAgIGFkZFRvSGlzdG9yeShBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfVURESSxzZWxlY3RlZFRvb2wuZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYodHJ1ZSkpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rRm9ySGlzdG9yeSgpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICBpbnQgbm9kZUlkID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgaWYgKCFpc1N0YWxlTm9kZShub2RlSWQpKQotICAgIHsKLSAgICAgIE5vZGUgbm9kZSA9IG5vZGVNYW5hZ2VyXy5nZXROb2RlKG5vZGVJZCk7Ci0gICAgICBPYmplY3QgbGF0ZXN0T2JqZWN0ID0gcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuTEFURVNUX09CSkVDVCk7Ci0gICAgICBpZiAobGF0ZXN0T2JqZWN0ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGlmIChsYXRlc3RPYmplY3QgaW5zdGFuY2VvZiBWZWN0b3IpCi0gICAgICAgIHsKLSAgICAgICAgICBWZWN0b3IgcmVmcmVzaEFjdGlvbnMgPSAoVmVjdG9yKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLkxBVEVTVF9PQkpFQ1QpOwotICAgICAgICAgIGZvciAoaW50IGk9MDtpPHJlZnJlc2hBY3Rpb25zLnNpemUoKTtpKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgUmVmcmVzaFVERElOb2RlQWN0aW9uIHJlZnJlc2hBY3Rpb24gPSAoUmVmcmVzaFVERElOb2RlQWN0aW9uKXJlZnJlc2hBY3Rpb25zLmVsZW1lbnRBdChpKTsKLSAgICAgICAgICAgIHJlZnJlc2hBY3Rpb24ucnVuKCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIG5vZGVNYW5hZ2VyXy5zZXRTZWxlY3RlZE5vZGVJZChub2RlSWQpOyAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgVHJlZUVsZW1lbnQgb2xkRWxlbWVudCA9IG5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgICAgICBvbGRFbGVtZW50LmRpc2Nvbm5lY3RBbGwoKTsKLSAgICAgICAgICBjb25uZWN0RWxlbWVudHMobm9kZS5nZXRQYXJlbnQoKSwoVHJlZUVsZW1lbnQpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuTEFURVNUX09CSkVDVCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIFF1ZXJ5Tm9kZXMKLSAgICAgICAgUXVlcnlOb2RlIHF1ZXJ5Tm9kZSA9IChRdWVyeU5vZGUpbm9kZTsKLSAgICAgICAgRmluZEFjdGlvbiBmaW5kQWN0aW9uID0gcXVlcnlOb2RlLmdldEZpbmRBY3Rpb24oKTsKLSAgICAgICAgZmluZEFjdGlvbi5zZXRSZWZyZXNoQWN0aW9uKHRydWUpOwotICAgICAgICBpZiAoIWZpbmRBY3Rpb24ucnVuKCkpCi0gICAgICAgICAgcXVlcnlOb2RlLnJlbW92ZUNoaWxkTm9kZXModHJ1ZSk7Ci0gICAgICAgIGZpbmRBY3Rpb24uc2V0UmVmcmVzaEFjdGlvbihmYWxzZSk7Ci0gICAgICB9Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fTk9ERV9SRUZSRVNIRUQiLG5vZGUuZ2V0Tm9kZU5hbWUoKSkpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIFZlY3RvciBnZXRTdGFsZU5vZGVzKCkKLSAgewotICAgIHJldHVybiBzdGFsZU5vZGVzXzsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0U3RhbGVOb2RlcyhWZWN0b3Igc3RhbGVOb2RlcykKLSAgewotICAgIHN0YWxlTm9kZXNfID0gc3RhbGVOb2RlczsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVmcmVzaFVERElOb2Rlc0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVmcmVzaFVERElOb2Rlc0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTNjYWRjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZnJlc2hVRERJTm9kZXNBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotCi1wdWJsaWMgY2xhc3MgUmVmcmVzaFVERElOb2Rlc0FjdGlvbiBleHRlbmRzIFVERElQcm9wZXJ0aWVzRm9ybUFjdGlvbgotewotICBwcml2YXRlIFZlY3RvciBzdGFsZU5vZGVzXzsKLQotICBwdWJsaWMgUmVmcmVzaFVERElOb2Rlc0FjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICBzdGFsZU5vZGVzXyA9IG5ldyBWZWN0b3IoKTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmdbXSBzZWxlY3RlZE5vZGVJZHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgIC8vIFRoZSBjbGllbnQgSmF2YXNjcmlwdCBlbmZvcmNlcyB0aGUgcnVsZSB0aGF0IGF0IGxlYXN0IG9uZSBpdGVtIHdhcyBzZWxlY3RlZCBiZWZvcmUgdGhlIGZvcm0gY2FuIGJlIHN1Ym1pdHRlZC4KLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5TRUxFQ1RFRF9OT0RFSURTLHNlbGVjdGVkTm9kZUlkcyk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgaW50IGNvbGxlY3Rvck5vZGVJZCA9IGdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpLmdldE5vZGVJZCgpOwotICAgIFN0cmluZ1tdIHNlbGVjdGVkTm9kZUlkcyA9IChTdHJpbmdbXSlwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5TRUxFQ1RFRF9OT0RFSURTKTsKLSAgICBSZWZyZXNoVURESU5vZGVBY3Rpb24gYWN0aW9uID0gbmV3IFJlZnJlc2hVRERJTm9kZUFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgSGFzaHRhYmxlIHByb3BlcnR5VGFibGUgPSBhY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotICAgIGZvciAoaW50IGk9MDtpPHNlbGVjdGVkTm9kZUlkcy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIHByb3BlcnR5VGFibGUucHV0KEFjdGlvbklucHV0cy5OT0RFSUQsc2VsZWN0ZWROb2RlSWRzW2ldKTsKLSAgICAgIGlmIChhY3Rpb24udmVyaWZ5Tm9kZURhdGEoKSkKLSAgICAgICAgYWN0aW9uLnJ1bigpOwotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBpbnQgbm9kZUlkID0gSW50ZWdlci5wYXJzZUludChzZWxlY3RlZE5vZGVJZHNbaV0pOwotICAgICAgICBzdGFsZU5vZGVzXy5hZGRFbGVtZW50KG5hdmlnYXRvck1hbmFnZXIuZ2V0Tm9kZShub2RlSWQpKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT0RFX0RBVEFfVkFMSURBVElPTl9GQUlMRUQiLG5hdmlnYXRvck1hbmFnZXIuZ2V0Tm9kZShub2RlSWQpLmdldE5vZGVOYW1lKCkpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgbmF2aWdhdG9yTWFuYWdlci5zZXRTZWxlY3RlZE5vZGVJZChjb2xsZWN0b3JOb2RlSWQpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFZlY3RvciBnZXRTdGFsZU5vZGVzKCkKLSAgewotICAgIHJldHVybiBzdGFsZU5vZGVzXzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnRmluZEJ1c2luZXNzVVVJREFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnRmluZEJ1c2luZXNzVVVJREFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTMxNzI4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ0ZpbmRCdXNpbmVzc1VVSURBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5Gb3JtSW5wdXRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5RdWVyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVmFsaWRhdG9yOwotaW1wb3J0IG9yZy51ZGRpNGouVURESUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLmNsaWVudC5VRERJUHJveHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5idXNpbmVzcy5CdXNpbmVzc0VudGl0eTsKLWltcG9ydCBvcmcudWRkaTRqLnRyYW5zcG9ydC5UcmFuc3BvcnRFeGNlcHRpb247Ci0KLXB1YmxpYyBjbGFzcyBSZWdGaW5kQnVzaW5lc3NVVUlEQWN0aW9uIGV4dGVuZHMgRmluZEFjdGlvbgotewotICBwdWJsaWMgUmVnRmluZEJ1c2luZXNzVVVJREFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTKSk7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQlVTSU5FU1NFUyxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1VVSUQpKTsgICAgCi0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBwcm9jZXNzT3RoZXJzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcixGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSkgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgdXVpZEtleSA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX0tFWSk7Ci0KLSAgICAvLyBWYWxpZGF0ZSB0aGUgZGF0YS4KLSAgICBib29sZWFuIGlucHV0c1ZhbGlkID0gdHJ1ZTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICAKLSAgICBpZiAodXVpZEtleSAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9CVVNJTkVTU19LRVksdXVpZEtleSk7Ci0gICAgICAKLSAgICBpZiAoIXN1YlF1ZXJ5SW5pdGlhdGVkXyAmJiAhVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nKHV1aWRLZXkpKQotICAgIHsKLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICBmb3JtVG9vbFBJLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfQlVTSU5FU1NfS0VZKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9VVUlEX0tFWSIpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGlucHV0c1ZhbGlkOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIGJvb2xlYW4gc2hvdWxkQWRkUXVlcnlOb2RlID0gKHByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX09WRVJSSURFX0FERF9RVUVSWV9OT0RFKSA9PSBudWxsKTsgICAgICAKLSAgICAgIFN0cmluZyB1dWlkS2V5ID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX0JVU0lORVNTX0tFWSk7Ci0gICAgICAKLSAgICAgIC8vIFRoZSBhY3Rpb24gY2FuIGJlIHJ1biB1bmRlciB0aGUgY29udGV4dCBvZiBlaXRoZXIgYSByZWdpc3RyeSBvciBhIHF1ZXJ5IG5vZGUgb3IgZXZlbiBVRERJTWFpbk5vZGUuCi0gICAgICBpZiAocmVnTm9kZV8gPT0gbnVsbCkKLSAgICAgICAgcmVnTm9kZV8gPSBnZXRSZWdpc3RyeU5vZGUoKE5vZGUpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUkVGUkVTSF9OT0RFKSk7Ci0gICAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgIFVERElQcm94eSBwcm94eSA9IHJlZ0VsZW1lbnQuZ2V0UHJveHkoKTsKLSAgICAgIEJ1c2luZXNzRW50aXR5W10gYmVMaXN0ID0gbmV3IEJ1c2luZXNzRW50aXR5WzFdOwotICAgICAgVmVjdG9yIGJlVmVjdG9yID0gcHJveHkuZ2V0X2J1c2luZXNzRGV0YWlsKHV1aWRLZXkpLmdldEJ1c2luZXNzRW50aXR5VmVjdG9yKCk7Ci0gICAgICBpZiAoYmVWZWN0b3Iuc2l6ZSgpID4gMCkKLSAgICAgIHsKLSAgICAgICAgYmVWZWN0b3IudG9BcnJheShiZUxpc3QpOwotICAgICAgICBpZiAoc2hvdWxkQWRkUXVlcnlOb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIHF1ZXJ5TmFtZSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfTkFNRSk7Ci0gICAgICAgICAgcXVlcnlFbGVtZW50XyA9IG5ldyBRdWVyeUVsZW1lbnQoYmVMaXN0LHF1ZXJ5TmFtZSxyZWdFbGVtZW50LmdldE1vZGVsKCkpOwotICAgICAgICAgIGFkZFF1ZXJ5Tm9kZSgpOwotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19CVVNJTkVTU0VTX0ZPVU5EIixTdHJpbmcudmFsdWVPZihiZUxpc3QubGVuZ3RoKSkpOwotICAgICAgICB9Ci0gICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLkxBVEVTVF9PQkpFQ1QsYmVMaXN0WzBdKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIHRocm93IG5ldyBGb3JtSW5wdXRFeGNlcHRpb24odWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT19CVVNJTkVTU0VTX0ZPVU5EIikpOwotICAgIH0KLSAgICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVHJhbnNwb3J0RXhjZXB0aW9uIik7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICAgIGNhdGNoIChVRERJRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVURESUV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEZvcm1JbnB1dEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdGaW5kQnVzaW5lc3Nlc0FkdmFuY2VkQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdGaW5kQnVzaW5lc3Nlc0FkdmFuY2VkQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxYTU3NTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnRmluZEJ1c2luZXNzZXNBZHZhbmNlZEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzE1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5Gb3JtSW5wdXRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlF1ZXJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5WYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLnVkZGk0ai5VRERJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLk5hbWU7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5idXNpbmVzcy5CdXNpbmVzc0VudGl0eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5CdXNpbmVzc0luZm87Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5CdXNpbmVzc0luZm9zOwotaW1wb3J0IG9yZy51ZGRpNGoudHJhbnNwb3J0LlRyYW5zcG9ydEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuQ2F0ZWdvcnlCYWc7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkRpc2NvdmVyeVVSTDsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuRGlzY292ZXJ5VVJMczsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuRmluZFF1YWxpZmllcjsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuRmluZFF1YWxpZmllcnM7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLklkZW50aWZpZXJCYWc7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLktleWVkUmVmZXJlbmNlOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5UTW9kZWxCYWc7Ci0KLXB1YmxpYyBjbGFzcyBSZWdGaW5kQnVzaW5lc3Nlc0FkdmFuY2VkQWN0aW9uIGV4dGVuZHMgRmluZEFjdGlvbgotewotICBwdWJsaWMgUmVnRmluZEJ1c2luZXNzZXNBZHZhbmNlZEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTKSk7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQlVTSU5FU1NFUyxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0FEVkFOQ0VEKSk7ICAgIAotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX01BWF9TRUFSQ0hfU0VULFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfTUFYX1NFQVJDSF9TRVQpKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19NQVhfUkVTVUxUUyxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX01BWF9SRVNVTFRTKSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBwcm9jZXNzT3RoZXJzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcixGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSkgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgb3duZWRDaGVja2VkID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX09XTkVEKTsKLSAgICBTdHJpbmdbXSBsYW5ndWFnZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTkFNRV9MQU5HVUFHRSk7Ci0gICAgU3RyaW5nW10gbmFtZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTkFNRSk7Ci0gICAgU3RyaW5nW10gaWRUeXBlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9JREVOVElGSUVSX1RZUEUpOwotICAgIFN0cmluZ1tdIGlkS2V5TmFtZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfSURFTlRJRklFUl9LRVlfTkFNRSk7Ci0gICAgU3RyaW5nW10gaWRLZXlWYWx1ZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfSURFTlRJRklFUl9LRVlfVkFMVUUpOwotICAgIFN0cmluZ1tdIGNhdFR5cGVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0NBVEVHT1JZX1RZUEUpOwotICAgIFN0cmluZ1tdIGNhdEtleU5hbWVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0NBVEVHT1JZX0tFWV9OQU1FKTsKLSAgICBTdHJpbmdbXSBjYXRLZXlWYWx1ZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQ0FURUdPUllfS0VZX1ZBTFVFKTsKLSAgICBTdHJpbmdbXSBzaU5vZGVJZHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuTk9ERUlEX1NFUlZJQ0VfSU5URVJGQUNFKTsKLSAgICBTdHJpbmdbXSBkaXNjb3ZlcnlVUkxWYWx1ZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfRElTQ09WRVJZVVJMKTsKLSAgICBTdHJpbmdbXSBmaW5kUXVhbGlmaWVyVmFsdWVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0ZJTkRRVUFMSUZJRVIpOwotICAgIFN0cmluZyBtYXhTZWFyY2hTZXQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTUFYX1NFQVJDSF9TRVQpOwotICAgIFN0cmluZyBtYXhSZXN1bHRzID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX01BWF9SRVNVTFRTKTsKLQotICAgIC8vIFZhbGlkYXRlIHRoZSBkYXRhLgotICAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSB0cnVlOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIGdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpOwotICAgIGdldFJlZ2lzdHJ5Tm9kZSgpOwotICAgIHJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0KLSAgICBpZiAob3duZWRDaGVja2VkICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19PV05FRCxvd25lZENoZWNrZWQpOwotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfT1dORUQpOwotCi0gICAgaWYgKGxhbmd1YWdlcyAhPSBudWxsICYmIG5hbWVzICE9IG51bGwpCi0gICAgewotICAgICAgVmVjdG9yIG5hbWVWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxuYW1lcy5sZW5ndGg7aSsrKQotICAgICAgewotICAgICAgICBOYW1lIHVkZGk0ak5hbWU7Ci0gICAgICAgIGlmIChsYW5ndWFnZXNbaV0ubGVuZ3RoKCkgPiAwKQotICAgICAgICAgIHVkZGk0ak5hbWUgPSBuZXcgTmFtZShuYW1lc1tpXSxsYW5ndWFnZXNbaV0pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgdWRkaTRqTmFtZSA9IG5ldyBOYW1lKG5hbWVzW2ldKTsKLSAgICAgICAgbmFtZVZlY3Rvci5hZGRFbGVtZW50KHVkZGk0ak5hbWUpOwotICAgICAgfQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTkFNRVMsbmFtZVZlY3Rvcik7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTkFNRVMpOwotCi0gICAgaWYgKGlkVHlwZXMgIT0gbnVsbCAmJiBpZEtleU5hbWVzICE9IG51bGwgJiYgaWRLZXlWYWx1ZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJZGVudGlmaWVyQmFnIGlkQmFnID0gbmV3IElkZW50aWZpZXJCYWcoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPGlkS2V5TmFtZXMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSBuZXcgS2V5ZWRSZWZlcmVuY2UoaWRLZXlOYW1lc1tpXSxpZEtleVZhbHVlc1tpXSxpZFR5cGVzW2ldKTsKLSAgICAgICAgaWRCYWcuYWRkKGtyKTsKLSAgICAgIH0KLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0lERU5USUZJRVJTLGlkQmFnKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19JREVOVElGSUVSUyk7Ci0KLSAgICBpZiAoY2F0VHlwZXMgIT0gbnVsbCAmJiBjYXRLZXlOYW1lcyAhPSBudWxsICYmIGNhdEtleVZhbHVlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIENhdGVnb3J5QmFnIGNhdEJhZyA9IG5ldyBDYXRlZ29yeUJhZygpOwotICAgICAgZm9yIChpbnQgaT0wO2k8Y2F0VHlwZXMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSBuZXcgS2V5ZWRSZWZlcmVuY2UoY2F0S2V5TmFtZXNbaV0sY2F0S2V5VmFsdWVzW2ldLGNhdFR5cGVzW2ldKTsKLSAgICAgICAgY2F0QmFnLmFkZChrcik7Ci0gICAgICB9Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19DQVRFR09SSUVTLGNhdEJhZyk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfQ0FURUdPUklFUyk7Ci0KLSAgICBpZiAoc2lOb2RlSWRzICE9IG51bGwpCi0gICAgewotICAgICAgLy8gQWx0aG91Z2ggd2UgYWxyZWFkeSBoYXZlIHRoZSAic3VibWl0dGVkIiBkYXRhLCBkZWxldGlvbnMgb2NjdXIgb24gdGhlIGNsaWVudCBzaWRlIGFuZCB0aHVzIHRoZSBuZWVkIHRvIHRyYWNrIHRoaXMgdXNpbmcgaGlkZGVuIGZvcm0gZWxlbWVudHMuCi0gICAgICBWZWN0b3IgYnVzU2VydmljZUludGVyZmFjZXMgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19TRVJWSUNFX0lOVEVSRkFDRVMpOwotICAgICAgaWYgKGJ1c1NlcnZpY2VJbnRlcmZhY2VzID09IG51bGwpCi0gICAgICAgIGJ1c1NlcnZpY2VJbnRlcmZhY2VzID0gbmV3IFZlY3RvcigpOwotICAgICAgZWxzZQotICAgICAgICBidXNTZXJ2aWNlSW50ZXJmYWNlcy5yZW1vdmVBbGxFbGVtZW50cygpOwotICAgICAgVmVjdG9yIGJ1c1NlcnZpY2VJbnRlcmZhY2VzQ29weSA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX1NFUlZJQ0VfSU5URVJGQUNFU19DT1BZKTsKLSAgICAgIFZlY3RvciB0TW9kZWxLZXlTdHJpbmdWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBIYXNodGFibGUgcmVzdWx0SGFzaCA9IG5ldyBIYXNodGFibGUoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPHNpTm9kZUlkcy5sZW5ndGg7aSsrKQotICAgICAgICByZXN1bHRIYXNoLnB1dChzaU5vZGVJZHNbaV0sQm9vbGVhbi5UUlVFKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPGJ1c1NlcnZpY2VJbnRlcmZhY2VzQ29weS5zaXplKCk7aSsrKQotICAgICAgewotICAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClidXNTZXJ2aWNlSW50ZXJmYWNlc0NvcHkuZWxlbWVudEF0KGkpOwotICAgICAgICBpZiAocmVzdWx0SGFzaC5nZXQoU3RyaW5nLnZhbHVlT2YobGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Tm9kZUlkKCkpKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgYnVzU2VydmljZUludGVyZmFjZXMuYWRkRWxlbWVudChsaXN0RWxlbWVudCk7Ci0gICAgICAgICAgVE1vZGVsIHRNb2RlbCA9IChUTW9kZWwpbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgICAgdE1vZGVsS2V5U3RyaW5nVmVjdG9yLmFkZEVsZW1lbnQodE1vZGVsLmdldFRNb2RlbEtleSgpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgVE1vZGVsQmFnIHRNb2RlbEJhZyA9IG5ldyBUTW9kZWxCYWcodE1vZGVsS2V5U3RyaW5nVmVjdG9yKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX1NFUlZJQ0VfSU5URVJGQUNFUyxidXNTZXJ2aWNlSW50ZXJmYWNlcyk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19UTU9ERUxCQUcsdE1vZGVsQmFnKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfU0VSVklDRV9JTlRFUkZBQ0VTKTsKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfVE1PREVMQkFHKTsKLSAgICB9Ci0KLSAgICBpZiAoZGlzY292ZXJ5VVJMVmFsdWVzICE9IG51bGwpCi0gICAgewotICAgICAgRGlzY292ZXJ5VVJMcyBkaXNjb3ZlcnlVUkxzID0gbmV3IERpc2NvdmVyeVVSTHMoKTsKLSAgICAgIFZlY3RvciBkaXNjb3ZlcnlVUkxWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxkaXNjb3ZlcnlVUkxWYWx1ZXMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgRGlzY292ZXJ5VVJMIGRpc2NvdmVyeVVSTCA9IG5ldyBEaXNjb3ZlcnlVUkwoZGlzY292ZXJ5VVJMVmFsdWVzW2ldLCIiKTsKLSAgICAgICAgZGlzY292ZXJ5VVJMVmVjdG9yLmFkZEVsZW1lbnQoZGlzY292ZXJ5VVJMKTsKLSAgICAgIH0KLSAgICAgIGRpc2NvdmVyeVVSTHMuc2V0RGlzY292ZXJ5VVJMVmVjdG9yKGRpc2NvdmVyeVVSTFZlY3Rvcik7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ESVNDT1ZFUllVUkxTLGRpc2NvdmVyeVVSTHMpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RJU0NPVkVSWVVSTFMpOwotCi0gICAgaWYgKGZpbmRRdWFsaWZpZXJWYWx1ZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBGaW5kUXVhbGlmaWVycyBmaW5kUXVhbGlmaWVycyA9IG5ldyBGaW5kUXVhbGlmaWVycygpOwotICAgICAgVmVjdG9yIGZpbmRRdWFsaWZpZXJWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxmaW5kUXVhbGlmaWVyVmFsdWVzLmxlbmd0aDtpKyspCi0gICAgICB7Ci0gICAgICAgIEZpbmRRdWFsaWZpZXIgZmluZFF1YWxpZmllciA9IG5ldyBGaW5kUXVhbGlmaWVyKGZpbmRRdWFsaWZpZXJWYWx1ZXNbaV0pOwotICAgICAgICBmaW5kUXVhbGlmaWVyVmVjdG9yLmFkZEVsZW1lbnQoZmluZFF1YWxpZmllcik7Ci0gICAgICB9Ci0gICAgICBmaW5kUXVhbGlmaWVycy5zZXRGaW5kUXVhbGlmaWVyVmVjdG9yKGZpbmRRdWFsaWZpZXJWZWN0b3IpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfRklORFFVQUxJRklFUlMsZmluZFF1YWxpZmllcnMpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0ZJTkRRVUFMSUZJRVJTKTsKLQotICAgIGlmIChtYXhTZWFyY2hTZXQgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX01BWF9TRUFSQ0hfU0VULG1heFNlYXJjaFNldCk7Ci0gICAgaWYgKCFzdWJRdWVyeUluaXRpYXRlZF8gJiYgIVZhbGlkYXRvci52YWxpZGF0ZUludGVnZXIobWF4U2VhcmNoU2V0KSkKLSAgICB7Ci0gICAgICBmb3JtVG9vbFBJLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX01BWF9TRUFSQ0hfU0VUKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9NQVhfU0VBUkNIX1NFVCIpKTsKLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG1heFJlc3VsdHMgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX01BWF9SRVNVTFRTLG1heFJlc3VsdHMpOwotICAgIGlmICghc3ViUXVlcnlJbml0aWF0ZWRfICYmICFWYWxpZGF0b3IudmFsaWRhdGVJbnRlZ2VyKG1heFJlc3VsdHMpKQotICAgIHsKLSAgICAgIGZvcm1Ub29sUEkuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTUFYX1JFU1VMVFMpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX01BWF9SRVNVTFRTIikpOwotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIGlucHV0c1ZhbGlkOwotICB9Ci0KLSAgcHJpdmF0ZSBEaXNjb3ZlcnlVUkxzIGR1cERpc2NvdmVyeVVSTHMoRGlzY292ZXJ5VVJMcyBkaXNjb3ZlcnlVUkxzLCBTdHJpbmcgdXNlVHlwZSwgU3RyaW5nIGR1cFVzZVR5cGUpIHsKLSAgICBpZiAoZGlzY292ZXJ5VVJMcyA9PSBudWxsKQotICAgICAgcmV0dXJuIGRpc2NvdmVyeVVSTHM7Ci0gICAgVmVjdG9yIGRpc2NvdmVyeVVSTFZlY3RvciA9IGRpc2NvdmVyeVVSTHMuZ2V0RGlzY292ZXJ5VVJMVmVjdG9yKCk7Ci0gICAgaWYgKGRpc2NvdmVyeVVSTFZlY3RvciA9PSBudWxsKQotICAgICAgcmV0dXJuIGRpc2NvdmVyeVVSTHM7Ci0gICAgVmVjdG9yIG5ld0Rpc2NvdmVyeVVSTFZlY3RvciA9IG5ldyBWZWN0b3IoZGlzY292ZXJ5VVJMVmVjdG9yKTsKLSAgICBFbnVtZXJhdGlvbiBlID0gZGlzY292ZXJ5VVJMVmVjdG9yLmVsZW1lbnRzKCk7Ci0gICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgIERpc2NvdmVyeVVSTCBkaXNjb3ZlcnlVUkwgPSAoRGlzY292ZXJ5VVJMKWUubmV4dEVsZW1lbnQoKTsKLSAgICAgIGlmIChkaXNjb3ZlcnlVUkwuZ2V0VXNlVHlwZSgpLmVxdWFscyh1c2VUeXBlKSkgewotICAgICAgICBuZXdEaXNjb3ZlcnlVUkxWZWN0b3IuYWRkKG5ldyBEaXNjb3ZlcnlVUkwoZGlzY292ZXJ5VVJMLmdldFRleHQoKSwgZHVwVXNlVHlwZSkpOwotICAgICAgfQotICAgIH0KLSAgICBEaXNjb3ZlcnlVUkxzIG5ld0Rpc2NvdmVyeVVSTHMgPSBuZXcgRGlzY292ZXJ5VVJMcygpOwotICAgIG5ld0Rpc2NvdmVyeVVSTHMuc2V0RGlzY292ZXJ5VVJMVmVjdG9yKG5ld0Rpc2NvdmVyeVVSTFZlY3Rvcik7Ci0gICAgcmV0dXJuIG5ld0Rpc2NvdmVyeVVSTHM7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgYm9vbGVhbiBzaG91bGRBZGRRdWVyeU5vZGUgPSAocHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfT1ZFUlJJREVfQUREX1FVRVJZX05PREUpID09IG51bGwpOyAgICAgIAotICAgICAgRmluZFF1YWxpZmllcnMgZmluZFF1YWxpZmllcnMgPSAoRmluZFF1YWxpZmllcnMpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfRklORFFVQUxJRklFUlMpOwotICAgICAgVmVjdG9yIG5hbWVWZWN0b3IgPSAoVmVjdG9yKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX05BTUVTKTsKLSAgICAgIERpc2NvdmVyeVVSTHMgZGlzY292ZXJ5VVJMcyA9IChEaXNjb3ZlcnlVUkxzKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RJU0NPVkVSWVVSTFMpOwotICAgICAgSWRlbnRpZmllckJhZyBpZGVudGlmaWVyQmFnID0gKElkZW50aWZpZXJCYWcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfSURFTlRJRklFUlMpOwotICAgICAgQ2F0ZWdvcnlCYWcgY2F0ZWdvcnlCYWcgPSAoQ2F0ZWdvcnlCYWcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfQ0FURUdPUklFUyk7Ci0gICAgICBUTW9kZWxCYWcgdE1vZGVsQmFnID0gKFRNb2RlbEJhZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19UTU9ERUxCQUcpOwotICAgICAgYm9vbGVhbiBvd25lZCA9IChwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19PV05FRCkgIT0gbnVsbCk7Ci0gICAgICBTdHJpbmcgcHVibGlzaFVSTCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgICAgU3RyaW5nIHVzZXJJZCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICAgIFN0cmluZyBwYXNzd29yZCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotICAgICAgaW50IG1heFNlYXJjaFNldCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19NQVhfU0VBUkNIX1NFVCkpOwotICAgICAgaW50IG1heFJlc3VsdHMgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTUFYX1JFU1VMVFMpKTsKLQotICAgICAgLy8gVGhlIGFjdGlvbiBjYW4gYmUgcnVuIHVuZGVyIHRoZSBjb250ZXh0IG9mIGVpdGhlciBhIHJlZ2lzdHJ5IG9yIGEgcXVlcnkgbm9kZS4KLSAgICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgaWYgKG93bmVkICYmICFyZWdFbGVtZW50LmlzTG9nZ2VkSW4oKSkKLSAgICAgICAgcmVnRWxlbWVudC5wZXJmb3JtTG9naW4ocHVibGlzaFVSTCx1c2VySWQscGFzc3dvcmQpOwotCi0gICAgICBVRERJUHJveHkgcHJveHkgPSByZWdFbGVtZW50LmdldFByb3h5KCk7Ci0KLSAgICAgIEJ1c2luZXNzSW5mb3MgYnVzSW5mb3MgPSBudWxsOwotICAgICAgaWYgKG93bmVkKQotICAgICAgICBidXNJbmZvcyA9IHByb3h5LmdldF9yZWdpc3RlcmVkSW5mbyhyZWdFbGVtZW50LmdldEF1dGhJbmZvU3RyaW5nKCkpLmdldEJ1c2luZXNzSW5mb3MoKTsKLSAgICAgIGVsc2UKLSAgICAgICAgYnVzSW5mb3MgPSBwcm94eS5maW5kX2J1c2luZXNzKG5hbWVWZWN0b3IsIGR1cERpc2NvdmVyeVVSTHMoZGlzY292ZXJ5VVJMcywiIixVRERJQWN0aW9uSW5wdXRzLkRJU0NPVkVSWV9VUkxfVFlQRSksIGlkZW50aWZpZXJCYWcsIGNhdGVnb3J5QmFnLCB0TW9kZWxCYWcsIGZpbmRRdWFsaWZpZXJzLCBtYXhTZWFyY2hTZXQpLmdldEJ1c2luZXNzSW5mb3MoKTsKLSAgICAgIAotICAgICAgaW50IGZpbmFsTnVtYmVyT2ZCdXNpbmVzc0VudGl0aWVzID0gTWF0aC5taW4obWF4UmVzdWx0cywgYnVzSW5mb3Muc2l6ZSgpKTsKLSAgICAgIFZlY3RvciBidXNpbmVzc0tleXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpbmFsTnVtYmVyT2ZCdXNpbmVzc0VudGl0aWVzOyBpKyspCi0gICAgICB7Ci0gICAgICAgIEJ1c2luZXNzSW5mbyBidXNJbmZvID0gKEJ1c2luZXNzSW5mbylidXNJbmZvcy5nZXQoaSk7Ci0gICAgICAgIGJ1c2luZXNzS2V5cy5hZGRFbGVtZW50KGJ1c0luZm8uZ2V0QnVzaW5lc3NLZXkoKSk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChmaW5hbE51bWJlck9mQnVzaW5lc3NFbnRpdGllcyA+IDApCi0gICAgICB7Ci0gICAgICAgIGlmIChzaG91bGRBZGRRdWVyeU5vZGUpCi0gICAgICAgIHsKLSAgICAgICAgICBWZWN0b3IgYmVWZWN0b3IgPSBwcm94eS5nZXRfYnVzaW5lc3NEZXRhaWwoYnVzaW5lc3NLZXlzKS5nZXRCdXNpbmVzc0VudGl0eVZlY3RvcigpOwotICAgICAgICAgIEJ1c2luZXNzRW50aXR5W10gYmVMaXN0ID0gbmV3IEJ1c2luZXNzRW50aXR5W2JlVmVjdG9yLnNpemUoKV07Ci0gICAgICAgICAgYmVWZWN0b3IudG9BcnJheShiZUxpc3QpOwotICAgICAgICAgIFN0cmluZyBxdWVyeU5hbWUgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX05BTUUpOwotICAgICAgICAgIHF1ZXJ5RWxlbWVudF8gPSBuZXcgUXVlcnlFbGVtZW50KGJlTGlzdCxxdWVyeU5hbWUscmVnRWxlbWVudC5nZXRNb2RlbCgpKTsKLSAgICAgICAgICBhZGRRdWVyeU5vZGUoKTsKLSAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fQlVTSU5FU1NFU19GT1VORCIsU3RyaW5nLnZhbHVlT2YoYmVMaXN0Lmxlbmd0aCkpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgdGhyb3cgbmV3IEZvcm1JbnB1dEV4Y2VwdGlvbih1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PX0JVU0lORVNTRVNfRk9VTkQiKSk7Ci0gICAgfQotICAgIGNhdGNoIChUcmFuc3BvcnRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJUcmFuc3BvcnRFeGNlcHRpb24iKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFVERElFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJVRERJRXhjZXB0aW9uIik7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgICBjYXRjaCAoRm9ybUlucHV0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiTWFsZm9ybWVkVVJMRXhjZXB0aW9uIik7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnRmluZEJ1c2luZXNzZXNTaW1wbGVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ0ZpbmRCdXNpbmVzc2VzU2ltcGxlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhMzA0Y2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnRmluZEJ1c2luZXNzZXNTaW1wbGVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5Gb3JtSW5wdXRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5RdWVyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLnVkZGk0ai5VRERJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLk5hbWU7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5idXNpbmVzcy5CdXNpbmVzc0VudGl0eTsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLkJ1c2luZXNzSW5mbzsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLkJ1c2luZXNzSW5mb3M7Ci1pbXBvcnQgb3JnLnVkZGk0ai50cmFuc3BvcnQuVHJhbnNwb3J0RXhjZXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgUmVnRmluZEJ1c2luZXNzZXNTaW1wbGVBY3Rpb24gZXh0ZW5kcyBGaW5kQWN0aW9uCi17Ci0gIHB1YmxpYyBSZWdGaW5kQnVzaW5lc3Nlc1NpbXBsZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTKSk7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQlVTSU5FU1NFUyxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NJTVBMRSkpOyAgICAKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCBib29sZWFuIHByb2Nlc3NPdGhlcnMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyLEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyBuYW1lID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9CVVNJTkVTU19OQU1FKTsKLQotICAgIC8vIFZhbGlkYXRlIHRoZSBkYXRhLgotICAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSB0cnVlOwotCi0gICAgaWYgKG5hbWUgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9CVVNJTkVTU19OQU1FLG5hbWUpOwotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBUaGlzIHNob3VsZG4ndCBvY2N1ci4KLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiBpbnB1dHNWYWxpZDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBib29sZWFuIHNob3VsZEFkZFF1ZXJ5Tm9kZSA9IChwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9PVkVSUklERV9BRERfUVVFUllfTk9ERSkgPT0gbnVsbCk7Ci0gICAgICBTdHJpbmcgbmFtZSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX0JVU0lORVNTX05BTUUpOwotICAgICAgVmVjdG9yIG5hbWVWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBuYW1lVmVjdG9yLmFkZEVsZW1lbnQobmV3IE5hbWUobmFtZSkpOwotCi0gICAgICAvLyBUaGUgYWN0aW9uIGNhbiBiZSBydW4gdW5kZXIgdGhlIGNvbnRleHQgb2YgZWl0aGVyIGEgcmVnaXN0cnkgb3IgYSBxdWVyeSBub2RlLgotICAgICAgZ2V0U2VsZWN0ZWROYXZpZ2F0b3JOb2RlKCk7Ci0gICAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgIFVERElQcm94eSBwcm94eSA9IHJlZ0VsZW1lbnQuZ2V0UHJveHkoKTsKLSAgICAgIAotICAgICAgQnVzaW5lc3NJbmZvcyBidXNJbmZvcyA9IHByb3h5LmZpbmRfYnVzaW5lc3MobmFtZVZlY3RvciwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgVURESUFjdGlvbklucHV0cy5RVUVSWV9NQVhfU0VBUkNIX1NFVCkuZ2V0QnVzaW5lc3NJbmZvcygpOwotICAgICAgaW50IGZpbmFsTnVtYmVyT2ZCdXNpbmVzc0VudGl0aWVzID0gTWF0aC5taW4oVURESUFjdGlvbklucHV0cy5RVUVSWV9NQVhfUkVTVUxUUywgYnVzSW5mb3Muc2l6ZSgpKTsKLSAgICAgIFZlY3RvciBidXNpbmVzc0tleXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpbmFsTnVtYmVyT2ZCdXNpbmVzc0VudGl0aWVzOyBpKyspCi0gICAgICB7Ci0gICAgICAgIEJ1c2luZXNzSW5mbyBidXNJbmZvID0gYnVzSW5mb3MuZ2V0KGkpOwotICAgICAgICBidXNpbmVzc0tleXMuYWRkRWxlbWVudChidXNJbmZvLmdldEJ1c2luZXNzS2V5KCkpOwotICAgICAgfQotCi0gICAgICBpZiAoZmluYWxOdW1iZXJPZkJ1c2luZXNzRW50aXRpZXMgPiAwKQotICAgICAgewotICAgICAgICBpZiAoc2hvdWxkQWRkUXVlcnlOb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgVmVjdG9yIGJlVmVjdG9yID0gcHJveHkuZ2V0X2J1c2luZXNzRGV0YWlsKGJ1c2luZXNzS2V5cykuZ2V0QnVzaW5lc3NFbnRpdHlWZWN0b3IoKTsKLSAgICAgICAgICBCdXNpbmVzc0VudGl0eVtdIGJlTGlzdCA9IG5ldyBCdXNpbmVzc0VudGl0eVtiZVZlY3Rvci5zaXplKCldOwotICAgICAgICAgIGJlVmVjdG9yLnRvQXJyYXkoYmVMaXN0KTsKLSAgICAgICAgICBTdHJpbmcgcXVlcnlOYW1lID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9OQU1FKTsKLSAgICAgICAgICBxdWVyeUVsZW1lbnRfID0gbmV3IFF1ZXJ5RWxlbWVudChiZUxpc3QscXVlcnlOYW1lLHJlZ0VsZW1lbnQuZ2V0TW9kZWwoKSk7Ci0gICAgICAgICAgYWRkUXVlcnlOb2RlKCk7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX0JVU0lORVNTRVNfRk9VTkQiLFN0cmluZy52YWx1ZU9mKGJlTGlzdC5sZW5ndGgpKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIHRocm93IG5ldyBGb3JtSW5wdXRFeGNlcHRpb24odWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT19CVVNJTkVTU0VTX0ZPVU5EIikpOwotICAgIH0KLSAgICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVHJhbnNwb3J0RXhjZXB0aW9uIik7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICAgIGNhdGNoIChVRERJRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVURESUV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEZvcm1JbnB1dEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZUludGVyZmFjZVVVSURBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlVVVJREFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjViZDQzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlVVVJREFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkZvcm1JbnB1dEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlF1ZXJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5WYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLnVkZGk0ai5VRERJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5UTW9kZWxEZXRhaWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai50cmFuc3BvcnQuVHJhbnNwb3J0RXhjZXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VVVUlEQWN0aW9uIGV4dGVuZHMgRmluZEFjdGlvbgotewotICBwdWJsaWMgUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VVVUlEQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU0sU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUykpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VfSU5URVJGQUNFUyxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1VVSUQpKTsgICAgCi0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBwcm9jZXNzT3RoZXJzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcixGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSkgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgdXVpZEtleSA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX0tFWSk7Ci0gICAgLy8gVmFsaWRhdGUgdGhlIGRhdGEuCi0gICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHRydWU7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0KLSAgICBpZiAodXVpZEtleSAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9TRVJWSUNFX0lOVEVSRkFDRV9LRVksdXVpZEtleSk7Ci0KLSAgICBpZiAoIXN1YlF1ZXJ5SW5pdGlhdGVkXyAmJiAhVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nKHV1aWRLZXkpKQotICAgIHsKLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICBmb3JtVG9vbFBJLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9JTlRFUkZBQ0VfS0VZKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9VVUlEX0tFWSIpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGlucHV0c1ZhbGlkOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIGJvb2xlYW4gc2hvdWxkQWRkUXVlcnlOb2RlID0gKHByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX09WRVJSSURFX0FERF9RVUVSWV9OT0RFKSA9PSBudWxsKTsgICAgICAKLSAgICAgIFN0cmluZyB1dWlkS2V5ID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfSU5URVJGQUNFX0tFWSk7Ci0KLSAgICAgIC8vIFRoZSBhY3Rpb24gY2FuIGJlIHJ1biB1bmRlciB0aGUgY29udGV4dCBvZiBlaXRoZXIgYSByZWdpc3RyeSBvciBhIHF1ZXJ5IG5vZGUgb3IgZXZlbiBVRERJTWFpbk5vZGUuCi0gICAgICBpZiAocmVnTm9kZV8gPT0gbnVsbCkKLSAgICAgICAgcmVnTm9kZV8gPSBnZXRSZWdpc3RyeU5vZGUoKE5vZGUpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUkVGUkVTSF9OT0RFKSk7Ci0gICAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgIFVERElQcm94eSBwcm94eSA9IHJlZ0VsZW1lbnQuZ2V0UHJveHkoKTsKLSAgICAgIFRNb2RlbERldGFpbCB0TW9kZWxEZXRhaWwgPSBwcm94eS5nZXRfdE1vZGVsRGV0YWlsKHV1aWRLZXkpOwotICAgICAgVmVjdG9yIHRNb2RlbFZlY3RvciA9IHRNb2RlbERldGFpbC5nZXRUTW9kZWxWZWN0b3IoKTsKLSAgICAgIGlmICh0TW9kZWxWZWN0b3Iuc2l6ZSgpID4gMCkKLSAgICAgIHsKLSAgICAgICAgVE1vZGVsIHRNb2RlbCA9IChUTW9kZWwpdE1vZGVsVmVjdG9yLmVsZW1lbnRBdCgwKTsKLSAgICAgICAgaWYgKHNob3VsZEFkZFF1ZXJ5Tm9kZSkKLSAgICAgICAgewotICAgICAgICAgIFRNb2RlbFtdIHRNb2RlbEFycmF5ID0gbmV3IFRNb2RlbFsxXTsKLSAgICAgICAgICB0TW9kZWxBcnJheVswXSA9IHRNb2RlbDsKLSAgICAgICAgICBTdHJpbmcgcXVlcnlOYW1lID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9OQU1FKTsKLSAgICAgICAgICBxdWVyeUVsZW1lbnRfID0gbmV3IFF1ZXJ5RWxlbWVudCh0TW9kZWxBcnJheSxxdWVyeU5hbWUscmVnRWxlbWVudC5nZXRNb2RlbCgpKTsKLSAgICAgICAgICBhZGRRdWVyeU5vZGUoKTsKLSAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fU0VSVklDRV9JTlRFUkZBQ0VTX0ZPVU5EIixTdHJpbmcudmFsdWVPZih0TW9kZWxBcnJheS5sZW5ndGgpKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuTEFURVNUX09CSkVDVCx0TW9kZWwpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgdGhyb3cgbmV3IEZvcm1JbnB1dEV4Y2VwdGlvbih1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PX1NFUlZJQ0VfSU5URVJGQUNFU19GT1VORCIpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFVERElFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0Q29udHJvbGxlcigpLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlVERElFeGNlcHRpb24iKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUudG9TdHJpbmcoKSk7Ci0gICAgfQotICAgIGNhdGNoIChUcmFuc3BvcnRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBoYW5kbGVVbmV4cGVjdGVkRXhjZXB0aW9uKHVkZGlQZXJzcGVjdGl2ZSxtZXNzYWdlUXVldWUsIlRyYW5zcG9ydEV4Y2VwdGlvbiIsZSk7Ci0gICAgfQotICAgIGNhdGNoIChGb3JtSW5wdXRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3MWZkODQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkZvcm1JbnB1dEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUXVlcnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlZhbGlkYXRvcjsKLWltcG9ydCBvcmcudWRkaTRqLlVERElFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai5jbGllbnQuVURESVByb3h5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYmluZGluZy5CaW5kaW5nVGVtcGxhdGU7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5iaW5kaW5nLkJpbmRpbmdUZW1wbGF0ZXM7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5iaW5kaW5nLlRNb2RlbEluc3RhbmNlRGV0YWlsczsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJpbmRpbmcuVE1vZGVsSW5zdGFuY2VJbmZvOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuc2VydmljZS5CdXNpbmVzc1NlcnZpY2U7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuRGlzcG9zaXRpb25SZXBvcnQ7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5SZWdpc3RlcmVkSW5mbzsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlJlc3VsdDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlRNb2RlbERldGFpbDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlRNb2RlbEluZm87Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5UTW9kZWxJbmZvczsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlRNb2RlbExpc3Q7Ci1pbXBvcnQgb3JnLnVkZGk0ai50cmFuc3BvcnQuVHJhbnNwb3J0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5DYXRlZ29yeUJhZzsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuRmluZFF1YWxpZmllcjsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuRmluZFF1YWxpZmllcnM7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLklkZW50aWZpZXJCYWc7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLktleWVkUmVmZXJlbmNlOwotCi1wdWJsaWMgY2xhc3MgUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRBY3Rpb24gZXh0ZW5kcyBGaW5kQWN0aW9uCi17Ci0gIHB1YmxpYyBSZWdGaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVMpKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFX0lOVEVSRkFDRVMsU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9BRFZBTkNFRCkpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX01BWF9TRUFSQ0hfU0VULFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfTUFYX1NFQVJDSF9TRVQpKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9NQVhfUkVTVUxUUyxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX01BWF9SRVNVTFRTKSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBwcm9jZXNzT3RoZXJzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcixGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSkgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgdXNlU2VydmljZUNoZWNrZWQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfVVNFX1NFUlZJQ0UpOwotICAgIFN0cmluZ1tdIHNlcnZpY2VOb2RlSWRzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLk5PREVJRF9TRVJWSUNFKTsKLSAgICBTdHJpbmcgb3duZWRDaGVja2VkID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX09XTkVEKTsKLSAgICBTdHJpbmcgbmFtZSA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FKTsKLSAgICBTdHJpbmdbXSBpZFR5cGVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0lERU5USUZJRVJfVFlQRSk7Ci0gICAgU3RyaW5nW10gaWRLZXlOYW1lcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9JREVOVElGSUVSX0tFWV9OQU1FKTsKLSAgICBTdHJpbmdbXSBpZEtleVZhbHVlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9JREVOVElGSUVSX0tFWV9WQUxVRSk7Ci0gICAgU3RyaW5nW10gY2F0VHlwZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQ0FURUdPUllfVFlQRSk7Ci0gICAgU3RyaW5nW10gY2F0S2V5TmFtZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQ0FURUdPUllfS0VZX05BTUUpOwotICAgIFN0cmluZ1tdIGNhdEtleVZhbHVlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9DQVRFR09SWV9LRVlfVkFMVUUpOwotICAgIFN0cmluZ1tdIGZpbmRRdWFsaWZpZXJWYWx1ZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfRklORFFVQUxJRklFUik7Ci0gICAgU3RyaW5nIG1heFNlYXJjaFNldCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9NQVhfU0VBUkNIX1NFVCk7Ci0gICAgU3RyaW5nIG1heFJlc3VsdHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTUFYX1JFU1VMVFMpOwotCi0gICAgLy8gVmFsaWRhdGUgdGhlIGRhdGEuCi0gICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHRydWU7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLQotICAgIGlmICh1c2VTZXJ2aWNlQ2hlY2tlZCAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfVVNFX1NFUlZJQ0UsdXNlU2VydmljZUNoZWNrZWQpOwotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfVVNFX1NFUlZJQ0UpOwotICAgIAotICAgIGlmIChzZXJ2aWNlTm9kZUlkcyAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIEFsdGhvdWdoIHdlIGFscmVhZHkgaGF2ZSB0aGUgInN1Ym1pdHRlZCIgZGF0YSwgZGVsZXRpb25zIG9jY3VyIG9uIHRoZSBjbGllbnQgc2lkZSBhbmQgdGh1cyB0aGUgbmVlZCB0byB0cmFjayB0aGlzIHVzaW5nIGhpZGRlbiBmb3JtIGVsZW1lbnRzLgotICAgICAgVmVjdG9yIHNpU2VydmljZSA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1NFUlZJQ0UpOwotICAgICAgaWYgKHNpU2VydmljZSA9PSBudWxsKQotICAgICAgICBzaVNlcnZpY2UgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBlbHNlCi0gICAgICAgIHNpU2VydmljZS5yZW1vdmVBbGxFbGVtZW50cygpOwotICAgICAgVmVjdG9yIHNpU2VydmljZUNvcHkgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9TRVJWSUNFX0NPUFkpOwotICAgICAgLy8gVGhlIGJyb3dzZXIgd2lsbCBlbmZvcmNlIHRoZSBydWxlIG9mIGhhdmluZyBvbmx5IG9uZSBzZXJ2aWNlIGluIHRoaXMgbGlzdC4KLSAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KXNpU2VydmljZUNvcHkuZWxlbWVudEF0KDApOwotICAgICAgc2lTZXJ2aWNlLmFkZEVsZW1lbnQobGlzdEVsZW1lbnQpOwotICAgICAgQnVzaW5lc3NTZXJ2aWNlIGJzID0gKEJ1c2luZXNzU2VydmljZSlsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1NFUlZJQ0Usc2lTZXJ2aWNlKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0JVU0lORVNTX1NFUlZJQ0UsYnMpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9TRVJWSUNFKTsKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfQlVTSU5FU1NfU0VSVklDRSk7Ci0gICAgICBpZiAoIXN1YlF1ZXJ5SW5pdGlhdGVkXyAmJiB1c2VTZXJ2aWNlQ2hlY2tlZCAhPSBudWxsKQotICAgICAgewotICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICBmb3JtVG9vbFBJLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1NFUlZJQ0UpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfU0VSVklDRSIpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYgKG93bmVkQ2hlY2tlZCAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfT1dORUQsb3duZWRDaGVja2VkKTsKLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX09XTkVEKTsKLQotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FLG5hbWUpOwotCi0gICAgaWYgKGlkVHlwZXMgIT0gbnVsbCAmJiBpZEtleU5hbWVzICE9IG51bGwgJiYgaWRLZXlWYWx1ZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJZGVudGlmaWVyQmFnIGlkQmFnID0gbmV3IElkZW50aWZpZXJCYWcoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPGlkS2V5TmFtZXMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSBuZXcgS2V5ZWRSZWZlcmVuY2UoaWRLZXlOYW1lc1tpXSxpZEtleVZhbHVlc1tpXSxpZFR5cGVzW2ldKTsKLSAgICAgICAgaWRCYWcuYWRkKGtyKTsKLSAgICAgIH0KLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0lERU5USUZJRVJTLGlkQmFnKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9JREVOVElGSUVSUyk7Ci0KLSAgICBpZiAoY2F0VHlwZXMgIT0gbnVsbCAmJiBjYXRLZXlOYW1lcyAhPSBudWxsICYmIGNhdEtleVZhbHVlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIENhdGVnb3J5QmFnIGNhdEJhZyA9IG5ldyBDYXRlZ29yeUJhZygpOwotICAgICAgZm9yIChpbnQgaT0wO2k8Y2F0VHlwZXMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSBuZXcgS2V5ZWRSZWZlcmVuY2UoY2F0S2V5TmFtZXNbaV0sY2F0S2V5VmFsdWVzW2ldLGNhdFR5cGVzW2ldKTsKLSAgICAgICAgY2F0QmFnLmFkZChrcik7Ci0gICAgICB9Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9DQVRFR09SSUVTLGNhdEJhZyk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfQ0FURUdPUklFUyk7Ci0KLSAgICBpZiAoZmluZFF1YWxpZmllclZhbHVlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIEZpbmRRdWFsaWZpZXJzIGZpbmRRdWFsaWZpZXJzID0gbmV3IEZpbmRRdWFsaWZpZXJzKCk7Ci0gICAgICBWZWN0b3IgZmluZFF1YWxpZmllclZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPGZpbmRRdWFsaWZpZXJWYWx1ZXMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgRmluZFF1YWxpZmllciBmaW5kUXVhbGlmaWVyID0gbmV3IEZpbmRRdWFsaWZpZXIoZmluZFF1YWxpZmllclZhbHVlc1tpXSk7Ci0gICAgICAgIGZpbmRRdWFsaWZpZXJWZWN0b3IuYWRkRWxlbWVudChmaW5kUXVhbGlmaWVyKTsKLSAgICAgIH0KLSAgICAgIGZpbmRRdWFsaWZpZXJzLnNldEZpbmRRdWFsaWZpZXJWZWN0b3IoZmluZFF1YWxpZmllclZlY3Rvcik7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9GSU5EUVVBTElGSUVSUyxmaW5kUXVhbGlmaWVycyk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfRklORFFVQUxJRklFUlMpOwotCi0gICAgaWYgKG1heFNlYXJjaFNldCAhPSBudWxsKQotICAgIHsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX01BWF9TRUFSQ0hfU0VULG1heFNlYXJjaFNldCk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9NQVhfU0VBUkNIX1NFVCxtYXhTZWFyY2hTZXQpOwotICAgIH0KLSAgICBpZiAoIXN1YlF1ZXJ5SW5pdGlhdGVkXyAmJiAhVmFsaWRhdG9yLnZhbGlkYXRlSW50ZWdlcihtYXhTZWFyY2hTZXQpKQotICAgIHsKLSAgICAgIGZvcm1Ub29sUEkuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTUFYX1NFQVJDSF9TRVQpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX01BWF9TRUFSQ0hfU0VUIikpOwotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAobWF4UmVzdWx0cyAhPSBudWxsKQotICAgIHsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX01BWF9SRVNVTFRTLG1heFJlc3VsdHMpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTUFYX1JFU1VMVFMsbWF4UmVzdWx0cyk7Ci0gICAgfQotICAgIGlmICghc3ViUXVlcnlJbml0aWF0ZWRfICYmICFWYWxpZGF0b3IudmFsaWRhdGVJbnRlZ2VyKG1heFJlc3VsdHMpKQotICAgIHsKLSAgICAgIGZvcm1Ub29sUEkuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTUFYX1JFU1VMVFMpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX01BWF9SRVNVTFRTIikpOwotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIGlucHV0c1ZhbGlkOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBvdmVycmlkZUF1dGhlbnRpY2F0aW9uVmFsaWRhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gKHByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1VTRV9TRVJWSUNFKSAhPSBudWxsKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBib29sZWFuIHNob3VsZEFkZFF1ZXJ5Tm9kZSA9IChwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9PVkVSUklERV9BRERfUVVFUllfTk9ERSkgPT0gbnVsbCk7ICAgICAgCi0gICAgICBib29sZWFuIHVzZVNlcnZpY2UgPSAocHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfVVNFX1NFUlZJQ0UpICE9IG51bGwpOwotICAgICAgQnVzaW5lc3NTZXJ2aWNlIGJzID0gKEJ1c2luZXNzU2VydmljZSlwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9CVVNJTkVTU19TRVJWSUNFKTsKLSAgICAgIFN0cmluZyBuYW1lID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FKTsKLSAgICAgIEZpbmRRdWFsaWZpZXJzIGZpbmRRdWFsaWZpZXJzID0gKEZpbmRRdWFsaWZpZXJzKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0ZJTkRRVUFMSUZJRVJTKTsKLSAgICAgIElkZW50aWZpZXJCYWcgaWRlbnRpZmllckJhZyA9IChJZGVudGlmaWVyQmFnKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0lERU5USUZJRVJTKTsKLSAgICAgIENhdGVnb3J5QmFnIGNhdGVnb3J5QmFnID0gKENhdGVnb3J5QmFnKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0NBVEVHT1JJRVMpOwotICAgICAgYm9vbGVhbiBvd25lZCA9IChwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9PV05FRCkgIT0gbnVsbCk7Ci0gICAgICBTdHJpbmcgcHVibGlzaFVSTCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgICAgU3RyaW5nIHVzZXJJZCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICAgIFN0cmluZyBwYXNzd29yZCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotICAgICAgaW50IG1heFNlYXJjaFNldCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9NQVhfU0VBUkNIX1NFVCkpOwotICAgICAgaW50IG1heFJlc3VsdHMgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTUFYX1JFU1VMVFMpKTsKLQotICAgICAgLy8gVGhlIGFjdGlvbiBjYW4gYmUgcnVuIHVuZGVyIHRoZSBjb250ZXh0IG9mIGVpdGhlciBhIHJlZ2lzdHJ5IG9yIGEgcXVlcnkgbm9kZS4KLSAgICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgVURESVByb3h5IHByb3h5ID0gcmVnRWxlbWVudC5nZXRQcm94eSgpOwotICAgICAgVmVjdG9yIHRNb2RlbEtleVZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIAotICAgICAgaWYgKG93bmVkKQotICAgICAgewotICAgICAgICBpZiAoIXJlZ0VsZW1lbnQuaXNMb2dnZWRJbigpKQotICAgICAgICAgIHJlZ0VsZW1lbnQucGVyZm9ybUxvZ2luKHB1Ymxpc2hVUkwsdXNlcklkLHBhc3N3b3JkKTsKLSAgICAgICAgdE1vZGVsS2V5VmVjdG9yID0gZmluZEFsbE93bmVkVE1vZGVscyhwcm94eSwgcmVnRWxlbWVudC5nZXRBdXRoSW5mb1N0cmluZygpLCBtYXhSZXN1bHRzKTsKLSAgICAgIH0KLSAgICAgIGlmICh1c2VTZXJ2aWNlKQotICAgICAgewotICAgICAgICBCaW5kaW5nVGVtcGxhdGVzIGJpbmRpbmdUZW1wbGF0ZXMgPSBicy5nZXRCaW5kaW5nVGVtcGxhdGVzKCk7Ci0gICAgICAgIGJvb2xlYW4gZW5kU2VhcmNoID0gZmFsc2U7Ci0gICAgICAgIGlmIChiaW5kaW5nVGVtcGxhdGVzICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBmb3IgKGludCBpPTA7aTxiaW5kaW5nVGVtcGxhdGVzLnNpemUoKTtpKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgQmluZGluZ1RlbXBsYXRlIGJ0ID0gYmluZGluZ1RlbXBsYXRlcy5nZXQoaSk7Ci0gICAgICAgICAgICBUTW9kZWxJbnN0YW5jZURldGFpbHMgdE1vZGVsSW5zdGFuY2VEZXRhaWxzID0gYnQuZ2V0VE1vZGVsSW5zdGFuY2VEZXRhaWxzKCk7Ci0gICAgICAgICAgICBmb3IgKGludCBqPTA7ajx0TW9kZWxJbnN0YW5jZURldGFpbHMuc2l6ZSgpO2orKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgVE1vZGVsSW5zdGFuY2VJbmZvIHRNb2RlbEluc3RhbmNlSW5mbyA9IHRNb2RlbEluc3RhbmNlRGV0YWlscy5nZXQoaik7Ci0gICAgICAgICAgICAgIGlmICh0TW9kZWxLZXlWZWN0b3Iuc2l6ZSgpIDwgbWF4UmVzdWx0cykKLSAgICAgICAgICAgICAgICB0TW9kZWxLZXlWZWN0b3IuYWRkRWxlbWVudCh0TW9kZWxJbnN0YW5jZUluZm8uZ2V0VE1vZGVsS2V5KCkpOwotICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBlbmRTZWFyY2ggPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZW5kU2VhcmNoKQotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsgIAotICAgICAgICBUTW9kZWxMaXN0IHRNb2RlbExpc3QgPSBwcm94eS5maW5kX3RNb2RlbChuYW1lLGNhdGVnb3J5QmFnLGlkZW50aWZpZXJCYWcsZmluZFF1YWxpZmllcnMsbWF4U2VhcmNoU2V0KTsKLSAgICAgICAgVE1vZGVsSW5mb3MgdE1vZGVsSW5mb3MgPSB0TW9kZWxMaXN0LmdldFRNb2RlbEluZm9zKCk7Ci0gICAgICAgIGZvciAoaW50IGk9MDtpPHRNb2RlbEluZm9zLnNpemUoKTtpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBUTW9kZWxJbmZvIHRNb2RlbEluZm8gPSB0TW9kZWxJbmZvcy5nZXQoaSk7Ci0gICAgICAgICAgaWYgKHRNb2RlbEtleVZlY3Rvci5zaXplKCkgPCBtYXhSZXN1bHRzKQotICAgICAgICAgICAgdE1vZGVsS2V5VmVjdG9yLmFkZEVsZW1lbnQodE1vZGVsSW5mby5nZXRUTW9kZWxLZXkoKSk7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIAotICAgICAgaW50IGZpbmFsTnVtYmVyT2ZUTW9kZWxLZXlzID0gdE1vZGVsS2V5VmVjdG9yLnNpemUoKTsKLSAgICAgIGlmIChmaW5hbE51bWJlck9mVE1vZGVsS2V5cyA+IDApCi0gICAgICB7Ci0gICAgICAgIGlmIChzaG91bGRBZGRRdWVyeU5vZGUpCi0gICAgICAgIHsKLSAgICAgICAgICBWZWN0b3IgZmluYWxUTW9kZWxWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgICAgaW50IGN1cnJlbnRJbmRleCA9IDA7Ci0gICAgICAgICAgaW50IHdpbmRvd1NpemUgPSBmaW5hbE51bWJlck9mVE1vZGVsS2V5czsKLSAgICAgICAgICB3aGlsZSAoY3VycmVudEluZGV4IDwgdE1vZGVsS2V5VmVjdG9yLnNpemUoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgc3ViTGlzdFRvSW5kZXggPSBNYXRoLm1pbihjdXJyZW50SW5kZXgrd2luZG93U2l6ZSx0TW9kZWxLZXlWZWN0b3Iuc2l6ZSgpKTsKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBUTW9kZWxEZXRhaWwgdE1vZGVsRGV0YWlsID0gcHJveHkuZ2V0X3RNb2RlbERldGFpbChuZXcgVmVjdG9yKHRNb2RlbEtleVZlY3Rvci5zdWJMaXN0KGN1cnJlbnRJbmRleCxzdWJMaXN0VG9JbmRleCkpKTsKLSAgICAgICAgICAgICAgVmVjdG9yIHRNb2RlbFZlY3RvciA9IHRNb2RlbERldGFpbC5nZXRUTW9kZWxWZWN0b3IoKTsKLSAgICAgICAgICAgICAgZm9yIChpbnQgaT0wO2k8dE1vZGVsVmVjdG9yLnNpemUoKTtpKyspCi0gICAgICAgICAgICAgICAgZmluYWxUTW9kZWxWZWN0b3IuYWRkRWxlbWVudCh0TW9kZWxWZWN0b3IuZWxlbWVudEF0KGkpKTsKLSAgICAgICAgICAgICAgaWYgKHRNb2RlbERldGFpbC5nZXRUcnVuY2F0ZWRCb29sZWFuKCkpCi0gICAgICAgICAgICAgICAgd2luZG93U2l6ZSA9IHRNb2RlbFZlY3Rvci5zaXplKCk7Ci0gICAgICAgICAgICAgIGN1cnJlbnRJbmRleCArPSB3aW5kb3dTaXplOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKFVERElFeGNlcHRpb24gZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRGlzcG9zaXRpb25SZXBvcnQgZHIgPSBlLmdldERpc3Bvc2l0aW9uUmVwb3J0KCk7Ci0gICAgICAgICAgICAgIGlmICgoKFJlc3VsdCkgZHIuZ2V0UmVzdWx0VmVjdG9yKCkuZ2V0KDApKS5nZXRFcnJJbmZvKCkuZ2V0RXJyQ29kZSgpID09IERpc3Bvc2l0aW9uUmVwb3J0LkVfaW52YWxpZEtleVBhc3NlZCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN0cmluZyBlcnJJbmZvVGV4dCA9ICgoUmVzdWx0KSBkci5nZXRSZXN1bHRWZWN0b3IoKS5nZXQoMCkpLmdldEVyckluZm8oKS5nZXRUZXh0KCk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaT1jdXJyZW50SW5kZXg7aTxzdWJMaXN0VG9JbmRleDtpKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgU3RyaW5nIHRNb2RlbEtleSA9IChTdHJpbmcpdE1vZGVsS2V5VmVjdG9yLmVsZW1lbnRBdChpKTsKLSAgICAgICAgICAgICAgICAgIGlmIChlcnJJbmZvVGV4dC5pbmRleE9mKHRNb2RlbEtleSkgIT0gLTEgfHwgZXJySW5mb1RleHQuaW5kZXhPZih0TW9kZWxLZXkudG9VcHBlckNhc2UoKSkgIT0gLTEgfHwgZXJySW5mb1RleHQuaW5kZXhPZih0TW9kZWxLZXkudG9Mb3dlckNhc2UoKSkgIT0gLTEpCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHRNb2RlbEtleVZlY3Rvci5yZW1vdmVFbGVtZW50QXQoaSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdGhyb3cgZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChUcmFuc3BvcnRFeGNlcHRpb24gZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgdGhyb3cgZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgCi0gICAgICAgICAgaW50IGZpbmFsTnVtYmVyT2ZUTW9kZWxzID0gZmluYWxUTW9kZWxWZWN0b3Iuc2l6ZSgpOwotICAgICAgICAgIGlmIChmaW5hbE51bWJlck9mVE1vZGVscyA+IDApCi0gICAgICAgICAgewotICAgICAgICAgICAgVE1vZGVsW10gdE1vZGVsQXJyYXkgPSBuZXcgVE1vZGVsW2ZpbmFsTnVtYmVyT2ZUTW9kZWxzXTsKLSAgICAgICAgICAgIGZpbmFsVE1vZGVsVmVjdG9yLnRvQXJyYXkodE1vZGVsQXJyYXkpOwotICAgICAgICAgICAgU3RyaW5nIHF1ZXJ5TmFtZSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfTkFNRSk7Ci0gICAgICAgICAgICBxdWVyeUVsZW1lbnRfID0gbmV3IFF1ZXJ5RWxlbWVudCh0TW9kZWxBcnJheSxxdWVyeU5hbWUscmVnRWxlbWVudC5nZXRNb2RlbCgpKTsKLSAgICAgICAgICAgIGFkZFF1ZXJ5Tm9kZSgpOwotICAgICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX1NFUlZJQ0VfSU5URVJGQUNFU19GT1VORCIsU3RyaW5nLnZhbHVlT2YodE1vZGVsQXJyYXkubGVuZ3RoKSkpOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aHJvdyBuZXcgRm9ybUlucHV0RXhjZXB0aW9uKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9fU0VSVklDRV9JTlRFUkZBQ0VTX0ZPVU5EIikpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICB0aHJvdyBuZXcgRm9ybUlucHV0RXhjZXB0aW9uKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9fU0VSVklDRV9JTlRFUkZBQ0VTX0ZPVU5EIikpOwotICAgIH0KLSAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRDb250cm9sbGVyKCkuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVURESUV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGhhbmRsZVVuZXhwZWN0ZWRFeGNlcHRpb24odWRkaVBlcnNwZWN0aXZlLG1lc3NhZ2VRdWV1ZSwiVHJhbnNwb3J0RXhjZXB0aW9uIixlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGhhbmRsZVVuZXhwZWN0ZWRFeGNlcHRpb24odWRkaVBlcnNwZWN0aXZlLG1lc3NhZ2VRdWV1ZSwiTWFsZm9ybWVkVVJMRXhjZXB0aW9uIixlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEZvcm1JbnB1dEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICAvLyBDb3BpZWQgZGlyZWN0bHkgZnJvbSBVRERJV1NETFByb3h5J3MgZmluZEFsbFNlcnZpY2VJbnRlcmZhY2VzKCkgbWV0aG9kIHdpdGggbWlub3IgbW9kaWZpY2F0aW9ucy4gVGhlIGhhcmRjb2RlZCBzdHJpbmdzIHNob3VsZCBOT1QgYmUgdHJhbnNsYXRlZC4KLSAgcHJpdmF0ZSBmaW5hbCBWZWN0b3IgZmluZEFsbE93bmVkVE1vZGVscyhVRERJUHJveHkgcHJveHksIFN0cmluZyBhdXRoSW5mb1N0cmluZywgaW50IG1heFJlc3VsdHMpIHRocm93cyBVRERJRXhjZXB0aW9uLCBUcmFuc3BvcnRFeGNlcHRpb24KLSAgewotICAgIFJlZ2lzdGVyZWRJbmZvIHJlZ2lzdGVyZWRJbmZvID0gbnVsbDsKLQotICAgIC8vIEdldCB0aGUgY29tcGxldGUgbGlzdCBvZiBvd25lZCAocmVnaXN0ZXJlZCkgaW5mby4KLSAgICAvLyAoQSBSZWdpc3RlcmVkSW5mbyBjb25zaXN0cyBvZiBCdXNpbmVzc0luZm9zIGFuZCBUTW9kZWxJbmZvcy4KLSAgICAvLyBCdXNpbmVzc0luZm9zIGFsc28gY29udGFpbiBTZXJ2aWNlSW5mb3MuKQotICAgIHJlZ2lzdGVyZWRJbmZvID0gcHJveHkuZ2V0X3JlZ2lzdGVyZWRJbmZvKGF1dGhJbmZvU3RyaW5nKTsKLQotICAgIC8vQ3JlYXRlIGEgVmVjdG9yIHRvIGFkZCB0aGUgVE1vZGVsS2V5cyBmcm9tIHRoZSByZWdpc3RlcmVkSW5mby4KLSAgICBWZWN0b3IgdE1vZGVsS2V5TGlzdCA9IG5ldyBWZWN0b3IoKTsKLQotICAgIC8vR2V0IHRoZSBUTW9kZWxJbmZvcyBmcm9tIHRoZSByZWdpc3RlcmVkSW5mby4KLSAgICBUTW9kZWxJbmZvcyB0TW9kZWxJbmZvcyA9IHJlZ2lzdGVyZWRJbmZvLmdldFRNb2RlbEluZm9zKCk7Ci0KLSAgICAvL0dldCBhbGwgdGhlIFRNb2RlbEtleXMgZnJvbSB3aXRoaW4gdGhlIFRNb2RlbEluZm9zCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0TW9kZWxJbmZvcy5zaXplKCk7IGkrKykKLSAgICB7Ci0gICAgICBUTW9kZWxJbmZvIHRNb2RlbEluZm8gPSB0TW9kZWxJbmZvcy5nZXQoaSk7Ci0gICAgICBpZiAodE1vZGVsS2V5TGlzdC5zaXplKCkgPCBtYXhSZXN1bHRzKQotICAgICAgICB0TW9kZWxLZXlMaXN0LmFkZEVsZW1lbnQodE1vZGVsSW5mby5nZXRUTW9kZWxLZXkoKSk7Ci0gICAgICBlbHNlCi0gICAgICAgIGJyZWFrOwotICAgIH0gICAgCi0gICAgcmV0dXJuIHRNb2RlbEtleUxpc3Q7Ci0gIH0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VzU2ltcGxlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZUludGVyZmFjZXNTaW1wbGVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODhiZmVkNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZUludGVyZmFjZXNTaW1wbGVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5Gb3JtSW5wdXRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5RdWVyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLnVkZGk0ai5VRERJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5UTW9kZWxEZXRhaWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5UTW9kZWxJbmZvOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuVE1vZGVsSW5mb3M7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5UTW9kZWxMaXN0OwotaW1wb3J0IG9yZy51ZGRpNGoudHJhbnNwb3J0LlRyYW5zcG9ydEV4Y2VwdGlvbjsKLQotcHVibGljIGNsYXNzIFJlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlc1NpbXBsZUFjdGlvbiBleHRlbmRzIEZpbmRBY3Rpb24KLXsKLSAgcHVibGljIFJlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlc1NpbXBsZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVMpKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFX0lOVEVSRkFDRVMsU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TSU1QTEUpKTsgICAgCi0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBwcm9jZXNzT3RoZXJzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcixGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSkgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgbmFtZSA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSk7Ci0KLSAgICAvLyBWYWxpZGF0ZSB0aGUgZGF0YS4KLSAgICBib29sZWFuIGlucHV0c1ZhbGlkID0gdHJ1ZTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSxuYW1lKTsKLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgb2NjdXIuCi0gICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gaW5wdXRzVmFsaWQ7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgYm9vbGVhbiBzaG91bGRBZGRRdWVyeU5vZGUgPSAocHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfT1ZFUlJJREVfQUREX1FVRVJZX05PREUpID09IG51bGwpOyAgICAgIAotICAgICAgU3RyaW5nIG5hbWUgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FKTsKLSAgICAgIC8vIFRoZSBhY3Rpb24gY2FuIGJlIHJ1biB1bmRlciB0aGUgY29udGV4dCBvZiBlaXRoZXIgYSByZWdpc3RyeSBvciBhIHF1ZXJ5IG5vZGUuCi0gICAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgIFVERElQcm94eSBwcm94eSA9IHJlZ0VsZW1lbnQuZ2V0UHJveHkoKTsKLSAgICAgIFRNb2RlbExpc3QgdE1vZGVsTGlzdCA9IHByb3h5LmZpbmRfdE1vZGVsKG5hbWUsbnVsbCxudWxsLG51bGwsVURESUFjdGlvbklucHV0cy5RVUVSWV9NQVhfU0VBUkNIX1NFVCk7Ci0gICAgICBUTW9kZWxJbmZvcyB0TW9kZWxJbmZvcyA9IHRNb2RlbExpc3QuZ2V0VE1vZGVsSW5mb3MoKTsKLSAgICAgIFZlY3RvciB0TW9kZWxLZXlWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAKLSAgICAgIGZvciAoaW50IGk9MDtpPHRNb2RlbEluZm9zLnNpemUoKTtpKyspCi0gICAgICB7Ci0gICAgICAgIFRNb2RlbEluZm8gdE1vZGVsSW5mbyA9IHRNb2RlbEluZm9zLmdldChpKTsKLSAgICAgICAgaWYgKHRNb2RlbEtleVZlY3Rvci5zaXplKCkgPCBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX01BWF9SRVNVTFRTKQotICAgICAgICAgIHRNb2RlbEtleVZlY3Rvci5hZGRFbGVtZW50KHRNb2RlbEluZm8uZ2V0VE1vZGVsS2V5KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIGlmICh0TW9kZWxLZXlWZWN0b3Iuc2l6ZSgpID4gMCkKLSAgICAgIHsKLSAgICAgICAgaWYgKHNob3VsZEFkZFF1ZXJ5Tm9kZSkKLSAgICAgICAgewotICAgICAgICAgIFRNb2RlbERldGFpbCB0TW9kZWxEZXRhaWwgPSBwcm94eS5nZXRfdE1vZGVsRGV0YWlsKHRNb2RlbEtleVZlY3Rvcik7Ci0gICAgICAgICAgVmVjdG9yIHRNb2RlbFZlY3RvciA9IHRNb2RlbERldGFpbC5nZXRUTW9kZWxWZWN0b3IoKTsKLSAgICAgICAgICBUTW9kZWxbXSB0TW9kZWxBcnJheSA9IG5ldyBUTW9kZWxbdE1vZGVsVmVjdG9yLnNpemUoKV07Ci0gICAgICAgICAgdE1vZGVsVmVjdG9yLnRvQXJyYXkodE1vZGVsQXJyYXkpOwotICAgICAgICAgIFN0cmluZyBxdWVyeU5hbWUgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX05BTUUpOwotICAgICAgICAgIHF1ZXJ5RWxlbWVudF8gPSBuZXcgUXVlcnlFbGVtZW50KHRNb2RlbEFycmF5LHF1ZXJ5TmFtZSxyZWdFbGVtZW50LmdldE1vZGVsKCkpOwotICAgICAgICAgIGFkZFF1ZXJ5Tm9kZSgpOwotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19TRVJWSUNFX0lOVEVSRkFDRVNfRk9VTkQiLFN0cmluZy52YWx1ZU9mKHRNb2RlbEFycmF5Lmxlbmd0aCkpKTsgICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICB0aHJvdyBuZXcgRm9ybUlucHV0RXhjZXB0aW9uKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9fU0VSVklDRV9JTlRFUkZBQ0VTX0ZPVU5EIikpOwotICAgIH0KLSAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRDb250cm9sbGVyKCkuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVURESUV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGhhbmRsZVVuZXhwZWN0ZWRFeGNlcHRpb24odWRkaVBlcnNwZWN0aXZlLG1lc3NhZ2VRdWV1ZSwiVHJhbnNwb3J0RXhjZXB0aW9uIixlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEZvcm1JbnB1dEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZVVVSURBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlVVVJREFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NWVhNWQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlVVVJREFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkZvcm1JbnB1dEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlF1ZXJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5WYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLnVkZGk0ai5VRERJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnNlcnZpY2UuQnVzaW5lc3NTZXJ2aWNlOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuU2VydmljZURldGFpbDsKLWltcG9ydCBvcmcudWRkaTRqLnRyYW5zcG9ydC5UcmFuc3BvcnRFeGNlcHRpb247Ci0KLXB1YmxpYyBjbGFzcyBSZWdGaW5kU2VydmljZVVVSURBY3Rpb24gZXh0ZW5kcyBGaW5kQWN0aW9uCi17Ci0gIHB1YmxpYyBSZWdGaW5kU2VydmljZVVVSURBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTSxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVMpKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFUyxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1VVSUQpKTsgICAgCi0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBwcm9jZXNzT3RoZXJzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcixGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSkgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgdXVpZEtleSA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX0tFWSk7Ci0KLSAgICAvLyBWYWxpZGF0ZSB0aGUgZGF0YS4KLSAgICBib29sZWFuIGlucHV0c1ZhbGlkID0gdHJ1ZTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLQotICAgIGlmICh1dWlkS2V5ICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfS0VZLHV1aWRLZXkpOwotCi0gICAgaWYgKCFzdWJRdWVyeUluaXRpYXRlZF8gJiYgIVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZyh1dWlkS2V5KSkKLSAgICB7Ci0gICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgZm9ybVRvb2xQSS5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfS0VZKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9VVUlEX0tFWSIpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGlucHV0c1ZhbGlkOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIGJvb2xlYW4gc2hvdWxkQWRkUXVlcnlOb2RlID0gKHByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX09WRVJSSURFX0FERF9RVUVSWV9OT0RFKSA9PSBudWxsKTsKLSAgICAgIFN0cmluZyB1dWlkS2V5ID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfS0VZKTsKLQotICAgICAgLy8gVGhlIGFjdGlvbiBjYW4gYmUgcnVuIHVuZGVyIHRoZSBjb250ZXh0IG9mIGVpdGhlciBhIHJlZ2lzdHJ5IG9yIGEgcXVlcnkgbm9kZSBvciBldmVuIFVERElNYWluTm9kZS4KLSAgICAgIGlmIChyZWdOb2RlXyA9PSBudWxsKQotICAgICAgICByZWdOb2RlXyA9IGdldFJlZ2lzdHJ5Tm9kZSgoTm9kZSlwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5SRUZSRVNIX05PREUpKTsKLSAgICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgVURESVByb3h5IHByb3h5ID0gcmVnRWxlbWVudC5nZXRQcm94eSgpOwotICAgICAgQnVzaW5lc3NTZXJ2aWNlW10gYnNBcnJheSA9IG5ldyBCdXNpbmVzc1NlcnZpY2VbMV07Ci0gICAgICBTZXJ2aWNlRGV0YWlsIHNlcnZpY2VEZXRhaWwgPSBwcm94eS5nZXRfc2VydmljZURldGFpbCh1dWlkS2V5KTsKLSAgICAgIFZlY3RvciBic1ZlY3RvciA9IHNlcnZpY2VEZXRhaWwuZ2V0QnVzaW5lc3NTZXJ2aWNlVmVjdG9yKCk7Ci0gICAgICBpZiAoYnNWZWN0b3Iuc2l6ZSgpID4gMCkKLSAgICAgIHsKLSAgICAgICAgYnNWZWN0b3IudG9BcnJheShic0FycmF5KTsKLSAgICAgICAgaWYgKHNob3VsZEFkZFF1ZXJ5Tm9kZSkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBxdWVyeU5hbWUgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX05BTUUpOwotICAgICAgICAgIHF1ZXJ5RWxlbWVudF8gPSBuZXcgUXVlcnlFbGVtZW50KGJzQXJyYXkscXVlcnlOYW1lLHJlZ0VsZW1lbnQuZ2V0TW9kZWwoKSk7Ci0gICAgICAgICAgYWRkUXVlcnlOb2RlKCk7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX1NFUlZJQ0VTX0ZPVU5EIixTdHJpbmcudmFsdWVPZihic0FycmF5Lmxlbmd0aCkpKTsKLSAgICAgICAgfQotICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5MQVRFU1RfT0JKRUNULGJzQXJyYXlbMF0pOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgdGhyb3cgbmV3IEZvcm1JbnB1dEV4Y2VwdGlvbih1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PX1NFUlZJQ0VTX0ZPVU5EIikpOwotICAgIH0KLSAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRDb250cm9sbGVyKCkuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVURESUV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGhhbmRsZVVuZXhwZWN0ZWRFeGNlcHRpb24odWRkaVBlcnNwZWN0aXZlLG1lc3NhZ2VRdWV1ZSwiVHJhbnNwb3J0RXhjZXB0aW9uIixlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEZvcm1JbnB1dEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZXNBZHZhbmNlZEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VzQWR2YW5jZWRBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWI2ZDJjNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZXNBZHZhbmNlZEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5Gb3JtSW5wdXRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlF1ZXJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5WYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLnVkZGk0ai5VRERJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLk5hbWU7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5idXNpbmVzcy5CdXNpbmVzc0VudGl0eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnNlcnZpY2UuQnVzaW5lc3NTZXJ2aWNlOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLlRNb2RlbDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLkJ1c2luZXNzSW5mbzsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLkJ1c2luZXNzSW5mb3M7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5EaXNwb3NpdGlvblJlcG9ydDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlJlZ2lzdGVyZWRJbmZvOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuUmVzdWx0OwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuU2VydmljZURldGFpbDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlNlcnZpY2VJbmZvOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuU2VydmljZUluZm9zOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuU2VydmljZUxpc3Q7Ci1pbXBvcnQgb3JnLnVkZGk0ai50cmFuc3BvcnQuVHJhbnNwb3J0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5DYXRlZ29yeUJhZzsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuRmluZFF1YWxpZmllcjsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuRmluZFF1YWxpZmllcnM7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLktleWVkUmVmZXJlbmNlOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5UTW9kZWxCYWc7Ci0KLXB1YmxpYyBjbGFzcyBSZWdGaW5kU2VydmljZXNBZHZhbmNlZEFjdGlvbiBleHRlbmRzIEZpbmRBY3Rpb24KLXsKLSAgcHVibGljIFJlZ0ZpbmRTZXJ2aWNlc0FkdmFuY2VkQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU0sU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTKSk7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRVMsU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9BRFZBTkNFRCkpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTUFYX1NFQVJDSF9TRVQsU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9NQVhfU0VBUkNIX1NFVCkpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTUFYX1JFU1VMVFMsU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9NQVhfUkVTVUxUUykpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gcHJvY2Vzc090aGVycyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIsRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIG93bmVkQ2hlY2tlZCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9PV05FRCk7Ci0gICAgU3RyaW5nW10gYnVzTm9kZUlkcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5OT0RFSURfQlVTSU5FU1MpOwotICAgIFN0cmluZ1tdIGxhbmd1YWdlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9OQU1FX0xBTkdVQUdFKTsKLSAgICBTdHJpbmdbXSBuYW1lcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9OQU1FKTsKLSAgICBTdHJpbmdbXSBjYXRUeXBlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9DQVRFR09SWV9UWVBFKTsKLSAgICBTdHJpbmdbXSBjYXRLZXlOYW1lcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9DQVRFR09SWV9LRVlfTkFNRSk7Ci0gICAgU3RyaW5nW10gY2F0S2V5VmFsdWVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0NBVEVHT1JZX0tFWV9WQUxVRSk7Ci0gICAgU3RyaW5nW10gc2lOb2RlSWRzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLk5PREVJRF9TRVJWSUNFX0lOVEVSRkFDRSk7Ci0gICAgU3RyaW5nW10gZmluZFF1YWxpZmllclZhbHVlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9GSU5EUVVBTElGSUVSKTsKLSAgICBTdHJpbmcgbWF4U2VhcmNoU2V0ID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX01BWF9TRUFSQ0hfU0VUKTsKLSAgICBTdHJpbmcgbWF4UmVzdWx0cyA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9NQVhfUkVTVUxUUyk7Ci0KLSAgICAvLyBWYWxpZGF0ZSB0aGUgZGF0YS4KLSAgICBib29sZWFuIGlucHV0c1ZhbGlkID0gdHJ1ZTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICByZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotCi0gICAgaWYgKG93bmVkQ2hlY2tlZCAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9PV05FRCxvd25lZENoZWNrZWQpOwotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9PV05FRCk7Ci0KLSAgICBpZiAoYnVzTm9kZUlkcyAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIEFsdGhvdWdoIHdlIGFscmVhZHkgaGF2ZSB0aGUgInN1Ym1pdHRlZCIgZGF0YSwgZGVsZXRpb25zIG9jY3VyIG9uIHRoZSBjbGllbnQgc2lkZSBhbmQgdGh1cyB0aGUgbmVlZCB0byB0cmFjayB0aGlzIHVzaW5nIGhpZGRlbiBmb3JtIGVsZW1lbnRzLgotICAgICAgVmVjdG9yIHNlcnZpY2VCdXNpbmVzcyA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQlVTSU5FU1MpOwotICAgICAgaWYgKHNlcnZpY2VCdXNpbmVzcyA9PSBudWxsKQotICAgICAgICBzZXJ2aWNlQnVzaW5lc3MgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBlbHNlCi0gICAgICAgIHNlcnZpY2VCdXNpbmVzcy5yZW1vdmVBbGxFbGVtZW50cygpOwotICAgICAgVmVjdG9yIHNlcnZpY2VCdXNpbmVzc0NvcHkgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0JVU0lORVNTX0NPUFkpOwotICAgICAgLy8gVGhlIGJyb3dzZXIgd2lsbCBlbmZvcmNlIHRoZSBydWxlIG9mIGhhdmluZyBvbmx5IG9uZSBidXNpbmVzcyBpbiB0aGlzIGxpc3QuCi0gICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClzZXJ2aWNlQnVzaW5lc3NDb3B5LmVsZW1lbnRBdCgwKTsKLSAgICAgIHNlcnZpY2VCdXNpbmVzcy5hZGRFbGVtZW50KGxpc3RFbGVtZW50KTsKLSAgICAgIEJ1c2luZXNzRW50aXR5IHNwID0gKEJ1c2luZXNzRW50aXR5KWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9CVVNJTkVTUyxzZXJ2aWNlQnVzaW5lc3MpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX1BST1ZJREVSLHNwKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9CVVNJTkVTUyk7Ci0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9QUk9WSURFUik7Ci0gICAgfQotCi0gICAgaWYgKGxhbmd1YWdlcyAhPSBudWxsICYmIG5hbWVzICE9IG51bGwpCi0gICAgewotICAgICAgVmVjdG9yIG5hbWVWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxuYW1lcy5sZW5ndGg7aSsrKQotICAgICAgewotICAgICAgICBOYW1lIHVkZGk0ak5hbWU7Ci0gICAgICAgIGlmIChsYW5ndWFnZXNbaV0ubGVuZ3RoKCkgPiAwKQotICAgICAgICAgIHVkZGk0ak5hbWUgPSBuZXcgTmFtZShuYW1lc1tpXSxsYW5ndWFnZXNbaV0pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgdWRkaTRqTmFtZSA9IG5ldyBOYW1lKG5hbWVzW2ldKTsKLSAgICAgICAgbmFtZVZlY3Rvci5hZGRFbGVtZW50KHVkZGk0ak5hbWUpOwotICAgICAgfQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9OQU1FUyxuYW1lVmVjdG9yKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX05BTUVTKTsKLQotICAgIGlmIChjYXRUeXBlcyAhPSBudWxsICYmIGNhdEtleU5hbWVzICE9IG51bGwgJiYgY2F0S2V5VmFsdWVzICE9IG51bGwpCi0gICAgewotICAgICAgQ2F0ZWdvcnlCYWcgY2F0QmFnID0gbmV3IENhdGVnb3J5QmFnKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxjYXRUeXBlcy5sZW5ndGg7aSsrKQotICAgICAgewotICAgICAgICBLZXllZFJlZmVyZW5jZSBrciA9IG5ldyBLZXllZFJlZmVyZW5jZShjYXRLZXlOYW1lc1tpXSxjYXRLZXlWYWx1ZXNbaV0sY2F0VHlwZXNbaV0pOwotICAgICAgICBjYXRCYWcuYWRkKGtyKTsKLSAgICAgIH0KLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQ0FURUdPUklFUyxjYXRCYWcpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQ0FURUdPUklFUyk7Ci0KLSAgICBpZiAoc2lOb2RlSWRzICE9IG51bGwpCi0gICAgewotICAgICAgLy8gQWx0aG91Z2ggd2UgYWxyZWFkeSBoYXZlIHRoZSAic3VibWl0dGVkIiBkYXRhLCBkZWxldGlvbnMgb2NjdXIgb24gdGhlIGNsaWVudCBzaWRlIGFuZCB0aHVzIHRoZSBuZWVkIHRvIHRyYWNrIHRoaXMgdXNpbmcgaGlkZGVuIGZvcm0gZWxlbWVudHMuCi0gICAgICBWZWN0b3Igc2VydmljZVNlcnZpY2VJbnRlcmZhY2VzID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX0lOVEVSRkFDRVMpOwotICAgICAgaWYgKHNlcnZpY2VTZXJ2aWNlSW50ZXJmYWNlcyA9PSBudWxsKQotICAgICAgICBzZXJ2aWNlU2VydmljZUludGVyZmFjZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBlbHNlCi0gICAgICAgIHNlcnZpY2VTZXJ2aWNlSW50ZXJmYWNlcy5yZW1vdmVBbGxFbGVtZW50cygpOwotICAgICAgVmVjdG9yIHNlcnZpY2VTZXJ2aWNlSW50ZXJmYWNlc0NvcHkgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfSU5URVJGQUNFU19DT1BZKTsKLSAgICAgIFZlY3RvciB0TW9kZWxLZXlTdHJpbmdWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBIYXNodGFibGUgcmVzdWx0SGFzaCA9IG5ldyBIYXNodGFibGUoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPHNpTm9kZUlkcy5sZW5ndGg7aSsrKQotICAgICAgICByZXN1bHRIYXNoLnB1dChzaU5vZGVJZHNbaV0sQm9vbGVhbi5UUlVFKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPHNlcnZpY2VTZXJ2aWNlSW50ZXJmYWNlc0NvcHkuc2l6ZSgpO2krKykKLSAgICAgIHsKLSAgICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpc2VydmljZVNlcnZpY2VJbnRlcmZhY2VzQ29weS5lbGVtZW50QXQoaSk7Ci0gICAgICAgIGlmIChyZXN1bHRIYXNoLmdldChTdHJpbmcudmFsdWVPZihsaXN0RWxlbWVudC5nZXRUYXJnZXROb2RlSWQoKSkpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBzZXJ2aWNlU2VydmljZUludGVyZmFjZXMuYWRkRWxlbWVudChsaXN0RWxlbWVudCk7Ci0gICAgICAgICAgVE1vZGVsIHRNb2RlbCA9IChUTW9kZWwpbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgICAgdE1vZGVsS2V5U3RyaW5nVmVjdG9yLmFkZEVsZW1lbnQodE1vZGVsLmdldFRNb2RlbEtleSgpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgVE1vZGVsQmFnIHRNb2RlbEJhZyA9IG5ldyBUTW9kZWxCYWcodE1vZGVsS2V5U3RyaW5nVmVjdG9yKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9JTlRFUkZBQ0VTLHNlcnZpY2VTZXJ2aWNlSW50ZXJmYWNlcyk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1RNT0RFTEJBRyx0TW9kZWxCYWcpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfSU5URVJGQUNFUyk7Ci0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfVE1PREVMQkFHKTsKLSAgICB9Ci0KLSAgICBpZiAoZmluZFF1YWxpZmllclZhbHVlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIEZpbmRRdWFsaWZpZXJzIGZpbmRRdWFsaWZpZXJzID0gbmV3IEZpbmRRdWFsaWZpZXJzKCk7Ci0gICAgICBWZWN0b3IgZmluZFF1YWxpZmllclZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPGZpbmRRdWFsaWZpZXJWYWx1ZXMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgRmluZFF1YWxpZmllciBmaW5kUXVhbGlmaWVyID0gbmV3IEZpbmRRdWFsaWZpZXIoZmluZFF1YWxpZmllclZhbHVlc1tpXSk7Ci0gICAgICAgIGZpbmRRdWFsaWZpZXJWZWN0b3IuYWRkRWxlbWVudChmaW5kUXVhbGlmaWVyKTsKLSAgICAgIH0KLSAgICAgIGZpbmRRdWFsaWZpZXJzLnNldEZpbmRRdWFsaWZpZXJWZWN0b3IoZmluZFF1YWxpZmllclZlY3Rvcik7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0ZJTkRRVUFMSUZJRVJTLGZpbmRRdWFsaWZpZXJzKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0ZJTkRRVUFMSUZJRVJTKTsKLQotICAgIGlmIChtYXhTZWFyY2hTZXQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9NQVhfU0VBUkNIX1NFVCxtYXhTZWFyY2hTZXQpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9NQVhfU0VBUkNIX1NFVCxtYXhTZWFyY2hTZXQpOwotICAgIH0KLSAgICBpZiAoIXN1YlF1ZXJ5SW5pdGlhdGVkXyAmJiAhVmFsaWRhdG9yLnZhbGlkYXRlSW50ZWdlcihtYXhTZWFyY2hTZXQpKQotICAgIHsKLSAgICAgIGZvcm1Ub29sUEkuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9NQVhfU0VBUkNIX1NFVCk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfTUFYX1NFQVJDSF9TRVQiKSk7Ci0gICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgIH0KLQotICAgIGlmIChtYXhSZXN1bHRzICE9IG51bGwpCi0gICAgewotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTUFYX1JFU1VMVFMsbWF4UmVzdWx0cyk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX01BWF9SRVNVTFRTLG1heFJlc3VsdHMpOwotICAgIH0KLSAgICBpZiAoIXN1YlF1ZXJ5SW5pdGlhdGVkXyAmJiAhVmFsaWRhdG9yLnZhbGlkYXRlSW50ZWdlcihtYXhSZXN1bHRzKSkKLSAgICB7Ci0gICAgICBmb3JtVG9vbFBJLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTUFYX1JFU1VMVFMpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX01BWF9SRVNVTFRTIikpOwotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIGlucHV0c1ZhbGlkOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIGJvb2xlYW4gc2hvdWxkQWRkUXVlcnlOb2RlID0gKHByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX09WRVJSSURFX0FERF9RVUVSWV9OT0RFKSA9PSBudWxsKTsgICAgICAKLSAgICAgIEZpbmRRdWFsaWZpZXJzIGZpbmRRdWFsaWZpZXJzID0gKEZpbmRRdWFsaWZpZXJzKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfRklORFFVQUxJRklFUlMpOwotICAgICAgQnVzaW5lc3NFbnRpdHkgc3AgPSAoQnVzaW5lc3NFbnRpdHkpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX1BST1ZJREVSKTsKLSAgICAgIFZlY3RvciBuYW1lVmVjdG9yID0gKFZlY3Rvcilwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX05BTUVTKTsKLSAgICAgIENhdGVnb3J5QmFnIGNhdGVnb3J5QmFnID0gKENhdGVnb3J5QmFnKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQ0FURUdPUklFUyk7Ci0gICAgICBUTW9kZWxCYWcgdE1vZGVsQmFnID0gKFRNb2RlbEJhZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1RNT0RFTEJBRyk7Ci0gICAgICBib29sZWFuIG93bmVkID0gKHByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfT1dORUQpICE9IG51bGwpOwotICAgICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICAgIFN0cmluZyB1c2VySWQgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICAgICBTdHJpbmcgcGFzc3dvcmQgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEKTsKLSAgICAgIGludCBtYXhTZWFyY2hTZXQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9NQVhfU0VBUkNIX1NFVCkpOwotICAgICAgaW50IG1heFJlc3VsdHMgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9NQVhfUkVTVUxUUykpOwotCi0gICAgICAvLyBUaGUgYWN0aW9uIGNhbiBiZSBydW4gdW5kZXIgdGhlIGNvbnRleHQgb2YgZWl0aGVyIGEgcmVnaXN0cnkgb3IgYSBxdWVyeSBub2RlLgotICAgICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICBpZiAob3duZWQgJiYgIXJlZ0VsZW1lbnQuaXNMb2dnZWRJbigpKQotICAgICAgICByZWdFbGVtZW50LnBlcmZvcm1Mb2dpbihwdWJsaXNoVVJMLHVzZXJJZCxwYXNzd29yZCk7Ci0gICAgICAgIAotICAgICAgVURESVByb3h5IHByb3h5ID0gcmVnRWxlbWVudC5nZXRQcm94eSgpOwotICAgICAgU3RyaW5nIGJ1c2luZXNzS2V5OwotICAgICAgaWYgKHNwICE9IG51bGwpCi0gICAgICAgIGJ1c2luZXNzS2V5ID0gc3AuZ2V0QnVzaW5lc3NLZXkoKTsKLSAgICAgIGVsc2UKLSAgICAgICAgYnVzaW5lc3NLZXkgPSAiIjsKLQotICAgICAgaW50IGZpbmFsTnVtYmVyT2ZTZXJ2aWNlS2V5czsKLSAgICAgIFZlY3RvciBzZXJ2aWNlS2V5VmVjdG9yOwotICAgICAgaWYgKG93bmVkKQotICAgICAgewotICAgICAgICBzZXJ2aWNlS2V5VmVjdG9yID0gZmluZEFsbE93bmVkU2VydmljZXMocHJveHkscmVnRWxlbWVudC5nZXRBdXRoSW5mb1N0cmluZygpLGJ1c2luZXNzS2V5LG1heFJlc3VsdHMpOwotICAgICAgICBmaW5hbE51bWJlck9mU2VydmljZUtleXMgPSBzZXJ2aWNlS2V5VmVjdG9yLnNpemUoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgU2VydmljZUxpc3Qgc2VydmljZUxpc3QgPSBwcm94eS5maW5kX3NlcnZpY2UoYnVzaW5lc3NLZXksbmFtZVZlY3RvcixjYXRlZ29yeUJhZyx0TW9kZWxCYWcsZmluZFF1YWxpZmllcnMsbWF4U2VhcmNoU2V0KTsKLSAgICAgICAgU2VydmljZUluZm9zIHNJbmZvcyA9IHNlcnZpY2VMaXN0LmdldFNlcnZpY2VJbmZvcygpOwotICAgICAgICBmaW5hbE51bWJlck9mU2VydmljZUtleXMgPSBNYXRoLm1pbihtYXhSZXN1bHRzLHNJbmZvcy5zaXplKCkpOwotICAgICAgICBzZXJ2aWNlS2V5VmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgICBmb3IgKGludCBpPTA7aTxmaW5hbE51bWJlck9mU2VydmljZUtleXM7aSsrKQotICAgICAgICB7Ci0gICAgICAgICAgU2VydmljZUluZm8gc0luZm8gPSBzSW5mb3MuZ2V0KGkpOwotICAgICAgICAgIHNlcnZpY2VLZXlWZWN0b3IuYWRkRWxlbWVudChzSW5mby5nZXRTZXJ2aWNlS2V5KCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIGlmIChmaW5hbE51bWJlck9mU2VydmljZUtleXMgPiAwKQotICAgICAgeyAgICAgIAotICAgICAgICBpZiAoc2hvdWxkQWRkUXVlcnlOb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgVmVjdG9yIGZpbmFsQnVzU2VydmljZVZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgICBpbnQgY3VycmVudEluZGV4ID0gMDsKLSAgICAgICAgICBpbnQgd2luZG93U2l6ZSA9IGZpbmFsTnVtYmVyT2ZTZXJ2aWNlS2V5czsKLSAgICAgICAgICB3aGlsZSAoY3VycmVudEluZGV4IDwgc2VydmljZUtleVZlY3Rvci5zaXplKCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgaW50IHN1Ykxpc3RUb0luZGV4ID0gTWF0aC5taW4oY3VycmVudEluZGV4K3dpbmRvd1NpemUsc2VydmljZUtleVZlY3Rvci5zaXplKCkpOwotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFNlcnZpY2VEZXRhaWwgc2VydmljZURldGFpbCA9IHByb3h5LmdldF9zZXJ2aWNlRGV0YWlsKG5ldyBWZWN0b3Ioc2VydmljZUtleVZlY3Rvci5zdWJMaXN0KGN1cnJlbnRJbmRleCxzdWJMaXN0VG9JbmRleCkpKTsKLSAgICAgICAgICAgICAgVmVjdG9yIGJ1c1NlcnZpY2VWZWN0b3IgPSBzZXJ2aWNlRGV0YWlsLmdldEJ1c2luZXNzU2VydmljZVZlY3RvcigpOwotICAgICAgICAgICAgICBmb3IgKGludCBpPTA7aTxidXNTZXJ2aWNlVmVjdG9yLnNpemUoKTtpKyspCi0gICAgICAgICAgICAgICAgZmluYWxCdXNTZXJ2aWNlVmVjdG9yLmFkZEVsZW1lbnQoYnVzU2VydmljZVZlY3Rvci5lbGVtZW50QXQoaSkpOwotICAgICAgICAgICAgICBpZiAoc2VydmljZURldGFpbC5nZXRUcnVuY2F0ZWRCb29sZWFuKCkpCi0gICAgICAgICAgICAgICAgd2luZG93U2l6ZSA9IGJ1c1NlcnZpY2VWZWN0b3Iuc2l6ZSgpOwotICAgICAgICAgICAgICBjdXJyZW50SW5kZXggKz0gd2luZG93U2l6ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChVRERJRXhjZXB0aW9uIGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIERpc3Bvc2l0aW9uUmVwb3J0IGRyID0gZS5nZXREaXNwb3NpdGlvblJlcG9ydCgpOwotICAgICAgICAgICAgICBpZiAoKChSZXN1bHQpIGRyLmdldFJlc3VsdFZlY3RvcigpLmdldCgwKSkuZ2V0RXJySW5mbygpLmdldEVyckNvZGUoKSA9PSBEaXNwb3NpdGlvblJlcG9ydC5FX2ludmFsaWRLZXlQYXNzZWQpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgZXJySW5mb1RleHQgPSAoKFJlc3VsdCkgZHIuZ2V0UmVzdWx0VmVjdG9yKCkuZ2V0KDApKS5nZXRFcnJJbmZvKCkuZ2V0VGV4dCgpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGk9Y3VycmVudEluZGV4O2k8c3ViTGlzdFRvSW5kZXg7aSsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIFN0cmluZyBzZXJ2aWNlS2V5ID0gKFN0cmluZylzZXJ2aWNlS2V5VmVjdG9yLmVsZW1lbnRBdChpKTsKLSAgICAgICAgICAgICAgICAgIGlmIChlcnJJbmZvVGV4dC5pbmRleE9mKHNlcnZpY2VLZXkpICE9IC0xIHx8IGVyckluZm9UZXh0LmluZGV4T2Yoc2VydmljZUtleS50b1VwcGVyQ2FzZSgpKSAhPSAtMSB8fCBlcnJJbmZvVGV4dC5pbmRleE9mKHNlcnZpY2VLZXkudG9Mb3dlckNhc2UoKSkgIT0gLTEpCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHNlcnZpY2VLZXlWZWN0b3IucmVtb3ZlRWxlbWVudEF0KGkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHRocm93IGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHRocm93IGU7Ci0gICAgICAgICAgICB9ICAgICAgICAgICAgCi0gICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICAgIGludCBmaW5hbE51bWJlck9mQnVzaW5lc3NTZXJ2aWNlcyA9IGZpbmFsQnVzU2VydmljZVZlY3Rvci5zaXplKCk7Ci0gICAgICAgICAgaWYgKGZpbmFsTnVtYmVyT2ZCdXNpbmVzc1NlcnZpY2VzID4gMCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBCdXNpbmVzc1NlcnZpY2VbXSBic0FycmF5ID0gbmV3IEJ1c2luZXNzU2VydmljZVtmaW5hbE51bWJlck9mQnVzaW5lc3NTZXJ2aWNlc107Ci0gICAgICAgICAgICBmaW5hbEJ1c1NlcnZpY2VWZWN0b3IudG9BcnJheShic0FycmF5KTsKLSAgICAgICAgICAgIFN0cmluZyBxdWVyeU5hbWUgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX05BTUUpOwotICAgICAgICAgICAgcXVlcnlFbGVtZW50XyA9IG5ldyBRdWVyeUVsZW1lbnQoYnNBcnJheSxxdWVyeU5hbWUscmVnRWxlbWVudC5nZXRNb2RlbCgpKTsKLSAgICAgICAgICAgIGFkZFF1ZXJ5Tm9kZSgpOwotICAgICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX1NFUlZJQ0VTX0ZPVU5EIixTdHJpbmcudmFsdWVPZihic0FycmF5Lmxlbmd0aCkpKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhyb3cgbmV3IEZvcm1JbnB1dEV4Y2VwdGlvbih1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PX1NFUlZJQ0VTX0ZPVU5EIikpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICB0aHJvdyBuZXcgRm9ybUlucHV0RXhjZXB0aW9uKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9fU0VSVklDRVNfRk9VTkQiKSk7Ci0gICAgfSAgIAotICAgIGNhdGNoIChVRERJRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldENvbnRyb2xsZXIoKS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJVRERJRXhjZXB0aW9uIik7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgaGFuZGxlVW5leHBlY3RlZEV4Y2VwdGlvbih1ZGRpUGVyc3BlY3RpdmUsbWVzc2FnZVF1ZXVlLCJUcmFuc3BvcnRFeGNlcHRpb24iLGUpOwotICAgIH0gCi0gICAgY2F0Y2ggKEZvcm1JbnB1dEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGhhbmRsZVVuZXhwZWN0ZWRFeGNlcHRpb24odWRkaVBlcnNwZWN0aXZlLG1lc3NhZ2VRdWV1ZSwiTWFsZm9ybWVkVVJMRXhjZXB0aW9uIixlKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICAvLyBDb3BpZWQgZGlyZWN0bHkgZnJvbSBVRERJV1NETFByb3h5J3MgZmluZEFsbE93bmVkU2VydmljZXMoKSBtZXRob2Qgd2l0aCBtaW5vciBtb2RpZmljYXRpb25zLiBUaGUgaGFyZGNvZGVkIHN0cmluZ3Mgc2hvdWxkIE5PVCBiZSB0cmFuc2xhdGVkLgotICBwcml2YXRlIGZpbmFsIFZlY3RvciBmaW5kQWxsT3duZWRTZXJ2aWNlcyhVRERJUHJveHkgcHJveHksU3RyaW5nIGF1dGhJbmZvU3RyaW5nLFN0cmluZyBidXNpbmVzc0tleSxpbnQgbWF4UmVzdWx0cykgdGhyb3dzIFVERElFeGNlcHRpb24sIFRyYW5zcG9ydEV4Y2VwdGlvbgotICB7Ci0gICAgUmVnaXN0ZXJlZEluZm8gcmVnaXN0ZXJlZEluZm8gPSBudWxsOwotCi0gICAgLy8gR2V0IHRoZSBjb21wbGV0ZSBsaXN0IG9mIG93bmVkIChyZWdpc3RlcmVkKSBpbmZvLgotICAgIC8vIChBIFJlZ2lzdGVyZWRJbmZvIGNvbnNpc3RzIG9mIEJ1c2luZXNzSW5mb3MgYW5kIFRNb2RlbEluZm9zLgotICAgIC8vIEJ1c2luZXNzSW5mb3MgYWxzbyBjb250YWluIFNlcnZpY2VJbmZvcy4pCi0gICAgcmVnaXN0ZXJlZEluZm8gPSBwcm94eS5nZXRfcmVnaXN0ZXJlZEluZm8oYXV0aEluZm9TdHJpbmcpOwotCi0gICAgLy9DcmVhdGUgYSB2ZWN0b3IgdG8gYWRkIHRoZSBzZXJ2aWNlS2V5cyBmcm9tIHRoZSByZWdpc3RlcmVkSW5mbyB0by4KLSAgICBWZWN0b3Igc2VydmljZUtleUxpc3QgPSBuZXcgVmVjdG9yKCk7Ci0KLSAgICAvL0dldCB0aGUgYnVzaW5lc3NJbmZvcyBmcm9tIHRoZSByZWdpc3RlcmVkSW5mby4KLSAgICBCdXNpbmVzc0luZm9zIGJ1c2luZXNzSW5mb3MgPSByZWdpc3RlcmVkSW5mby5nZXRCdXNpbmVzc0luZm9zKCk7Ci0KLSAgICAvL0dldCBhbGwgdGhlIHNlcnZpY2VLZXlzIGZyb20gdGhlIHNlcnZpY2VJbmZvcyB3aXRoaW4gdGhlIGJ1c2luZXNzSW5mb3MsCi0gICAgLy9hbmQgYWRkIHRoZW0gdG8gdGhlIHNlcnZpY2VLZXlMaXN0LgotICAgIGJvb2xlYW4gZW5kU2VhcmNoID0gZmFsc2U7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBidXNpbmVzc0luZm9zLnNpemUoKTsgaSsrKQotICAgIHsKLSAgICAgIEJ1c2luZXNzSW5mbyBidXNpbmVzc0luZm8gPSBidXNpbmVzc0luZm9zLmdldChpKTsKLSAgICAgIFN0cmluZyBjdXJyZW50QnVzaW5lc3NLZXkgPSBidXNpbmVzc0luZm8uZ2V0QnVzaW5lc3NLZXkoKTsKLSAgICAgIGlmIChidXNpbmVzc0tleS5sZW5ndGgoKSA+IDAgJiYgY3VycmVudEJ1c2luZXNzS2V5LmVxdWFscyhidXNpbmVzc0tleSkpCi0gICAgICAgIGVuZFNlYXJjaCA9IHRydWU7Ci0gICAgICBTZXJ2aWNlSW5mb3Mgc2VydmljZUluZm9zID0gYnVzaW5lc3NJbmZvLmdldFNlcnZpY2VJbmZvcygpOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBzZXJ2aWNlSW5mb3Muc2l6ZSgpOyBqKyspCi0gICAgICB7Ci0gICAgICAgIFNlcnZpY2VJbmZvIHNlcnZpY2VJbmZvID0gc2VydmljZUluZm9zLmdldChqKTsKLSAgICAgICAgaWYgKHNlcnZpY2VJbmZvLmdldEJ1c2luZXNzS2V5KCkuZXF1YWxzKGN1cnJlbnRCdXNpbmVzc0tleSkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoc2VydmljZUtleUxpc3Quc2l6ZSgpIDwgbWF4UmVzdWx0cykKLSAgICAgICAgICAgIHNlcnZpY2VLZXlMaXN0LmFkZChzZXJ2aWNlSW5mby5nZXRTZXJ2aWNlS2V5KCkpOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBlbmRTZWFyY2ggPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAoZW5kU2VhcmNoKQotICAgICAgICBicmVhazsKLSAgICB9ICAgIAotICAgIHJldHVybiBzZXJ2aWNlS2V5TGlzdDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VzU2ltcGxlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZXNTaW1wbGVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDg1NzU0MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZXNTaW1wbGVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5Gb3JtSW5wdXRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5RdWVyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLnVkZGk0ai5VRERJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLk5hbWU7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5zZXJ2aWNlLkJ1c2luZXNzU2VydmljZTsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlNlcnZpY2VEZXRhaWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5TZXJ2aWNlSW5mbzsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlNlcnZpY2VJbmZvczsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlNlcnZpY2VMaXN0OwotaW1wb3J0IG9yZy51ZGRpNGoudHJhbnNwb3J0LlRyYW5zcG9ydEV4Y2VwdGlvbjsKLQotcHVibGljIGNsYXNzIFJlZ0ZpbmRTZXJ2aWNlc1NpbXBsZUFjdGlvbiBleHRlbmRzIEZpbmRBY3Rpb24KLXsKLSAgcHVibGljIFJlZ0ZpbmRTZXJ2aWNlc1NpbXBsZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUykpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VTLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0lNUExFKSk7ICAgIAotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gcHJvY2Vzc090aGVycyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIsRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIG5hbWUgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfTkFNRSk7Ci0KLSAgICAvLyBWYWxpZGF0ZSB0aGUgZGF0YS4KLSAgICBib29sZWFuIGlucHV0c1ZhbGlkID0gdHJ1ZTsKLQotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9OQU1FLG5hbWUpOwotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBUaGlzIHNob3VsZG4ndCBvY2N1ci4KLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiBpbnB1dHNWYWxpZDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBib29sZWFuIHNob3VsZEFkZFF1ZXJ5Tm9kZSA9IChwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9PVkVSUklERV9BRERfUVVFUllfTk9ERSkgPT0gbnVsbCk7Ci0gICAgICBTdHJpbmcgbmFtZSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfTkFNRSk7Ci0gICAgICBWZWN0b3IgbmFtZVZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIG5hbWVWZWN0b3IuYWRkRWxlbWVudChuZXcgTmFtZShuYW1lKSk7Ci0KLSAgICAgIC8vIFRoZSBhY3Rpb24gY2FuIGJlIHJ1biB1bmRlciB0aGUgY29udGV4dCBvZiBlaXRoZXIgYSByZWdpc3RyeSBvciBhIHF1ZXJ5IG5vZGUuCi0gICAgICBnZXRTZWxlY3RlZE5hdmlnYXRvck5vZGUoKTsKLSAgICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgVURESVByb3h5IHByb3h5ID0gcmVnRWxlbWVudC5nZXRQcm94eSgpOwotICAgICAgU2VydmljZUxpc3Qgc2VydmljZUxpc3QgPSBwcm94eS5maW5kX3NlcnZpY2UoIiIsbmFtZVZlY3RvcixudWxsLG51bGwsbnVsbCxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX01BWF9TRUFSQ0hfU0VUKTsKLSAgICAgIAotICAgICAgU2VydmljZUluZm9zIHNJbmZvcyA9IHNlcnZpY2VMaXN0LmdldFNlcnZpY2VJbmZvcygpOwotICAgICAgaW50IGZpbmFsTnVtYmVyT2ZCdXNpbmVzc1NlcnZpY2VzID0gTWF0aC5taW4oVURESUFjdGlvbklucHV0cy5RVUVSWV9NQVhfUkVTVUxUUyxzSW5mb3Muc2l6ZSgpKTsKLSAgICAgIFZlY3RvciBzZXJ2aWNlS2V5VmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgZm9yIChpbnQgaT0wO2k8ZmluYWxOdW1iZXJPZkJ1c2luZXNzU2VydmljZXM7aSsrKQotICAgICAgewotICAgICAgICBTZXJ2aWNlSW5mbyBzSW5mbyA9IHNJbmZvcy5nZXQoaSk7Ci0gICAgICAgIHNlcnZpY2VLZXlWZWN0b3IuYWRkRWxlbWVudChzSW5mby5nZXRTZXJ2aWNlS2V5KCkpOwotICAgICAgfQotICAgICAgICAKLSAgICAgIGlmIChmaW5hbE51bWJlck9mQnVzaW5lc3NTZXJ2aWNlcyA+IDApCi0gICAgICB7Ci0gICAgICAgIGlmIChzaG91bGRBZGRRdWVyeU5vZGUpCi0gICAgICAgIHsKLSAgICAgICAgICBTZXJ2aWNlRGV0YWlsIHNlcnZpY2VEZXRhaWwgPSBwcm94eS5nZXRfc2VydmljZURldGFpbChzZXJ2aWNlS2V5VmVjdG9yKTsKLSAgICAgICAgICBWZWN0b3IgYnVzaW5lc3NTZXJ2aWNlVmVjdG9yID0gc2VydmljZURldGFpbC5nZXRCdXNpbmVzc1NlcnZpY2VWZWN0b3IoKTsKLSAgICAgICAgICBTdHJpbmcgcXVlcnlOYW1lID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9OQU1FKTsKLSAgICAgICAgICBCdXNpbmVzc1NlcnZpY2VbXSBic0FycmF5ID0gbmV3IEJ1c2luZXNzU2VydmljZVtmaW5hbE51bWJlck9mQnVzaW5lc3NTZXJ2aWNlc107Ci0gICAgICAgICAgYnVzaW5lc3NTZXJ2aWNlVmVjdG9yLnRvQXJyYXkoYnNBcnJheSk7Ci0gICAgICAgICAgcXVlcnlFbGVtZW50XyA9IG5ldyBRdWVyeUVsZW1lbnQoYnNBcnJheSxxdWVyeU5hbWUscmVnRWxlbWVudC5nZXRNb2RlbCgpKTsKLSAgICAgICAgICBhZGRRdWVyeU5vZGUoKTsKLSAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fU0VSVklDRVNfRk9VTkQiLFN0cmluZy52YWx1ZU9mKGJzQXJyYXkubGVuZ3RoKSkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICB0aHJvdyBuZXcgRm9ybUlucHV0RXhjZXB0aW9uKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9fU0VSVklDRVNfRk9VTkQiKSk7Ci0gICAgfQotICAgIGNhdGNoIChVRERJRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldENvbnRyb2xsZXIoKS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJVRERJRXhjZXB0aW9uIik7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgaGFuZGxlVW5leHBlY3RlZEV4Y2VwdGlvbih1ZGRpUGVyc3BlY3RpdmUsbWVzc2FnZVF1ZXVlLCJUcmFuc3BvcnRFeGNlcHRpb24iLGUpOwotICAgIH0KLSAgICBjYXRjaCAoRm9ybUlucHV0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdQdWJsaXNoQnVzaW5lc3NBZHZhbmNlZEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzQwY2NkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlZhbGlkYXRvcjsKLWltcG9ydCBvcmcudWRkaTRqLlVERElFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai5jbGllbnQuVURESVByb3h5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5OYW1lOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYnVzaW5lc3MuQnVzaW5lc3NFbnRpdHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai50cmFuc3BvcnQuVHJhbnNwb3J0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5DYXRlZ29yeUJhZzsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuRGlzY292ZXJ5VVJMOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5EaXNjb3ZlcnlVUkxzOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5JZGVudGlmaWVyQmFnOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5LZXllZFJlZmVyZW5jZTsKLQotcHVibGljIGNsYXNzIFJlZ1B1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkQWN0aW9uIGV4dGVuZHMgUHVibGlzaEFjdGlvbgotewotICBwdWJsaWMgUmVnUHVibGlzaEJ1c2luZXNzQWR2YW5jZWRBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTSxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUykpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0JVU0lORVNTRVMsU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9BRFZBTkNFRCkpOyAgICAKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCBib29sZWFuIHByb2Nlc3NPdGhlcnMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyLEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIFN0cmluZ1tdIG5hbWVMYW5ndWFnZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTkFNRV9MQU5HVUFHRSk7Ci0gICAgU3RyaW5nW10gbmFtZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTkFNRSk7Ci0gICAgU3RyaW5nW10gZGVzY3JpcHRpb25MYW5ndWFnZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfREVTQ1JJUFRJT05fTEFOR1VBR0UpOwotICAgIFN0cmluZ1tdIGRlc2NyaXB0aW9ucyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9ERVNDUklQVElPTik7Ci0gICAgU3RyaW5nW10gaWRUeXBlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9JREVOVElGSUVSX1RZUEUpOwotICAgIFN0cmluZ1tdIGlkS2V5TmFtZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfSURFTlRJRklFUl9LRVlfTkFNRSk7Ci0gICAgU3RyaW5nW10gaWRLZXlWYWx1ZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfSURFTlRJRklFUl9LRVlfVkFMVUUpOwotICAgIFN0cmluZ1tdIGNhdFR5cGVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0NBVEVHT1JZX1RZUEUpOwotICAgIFN0cmluZ1tdIGNhdEtleU5hbWVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0NBVEVHT1JZX0tFWV9OQU1FKTsKLSAgICBTdHJpbmdbXSBjYXRLZXlWYWx1ZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQ0FURUdPUllfS0VZX1ZBTFVFKTsKLSAgICBTdHJpbmdbXSBkaXNjb3ZlcnlVUkxWYWx1ZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfRElTQ09WRVJZVVJMKTsKLQotICAgIC8vIFZhbGlkYXRlIHRoZSBkYXRhLgotICAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSB0cnVlOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotCi0gICAgSGFzaHRhYmxlIGxhbmd1YWdlSGFzaCA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBpZiAobmFtZUxhbmd1YWdlcyAhPSBudWxsICYmIG5hbWVzICE9IG51bGwpCi0gICAgewotICAgICAgVmVjdG9yIG5hbWVWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAvLyBVRERJJ3Mgc2F2ZSBBUEkgKEFwcGVuZGl4IEMgb2YgdGhlIFVEREkgVjIgUHJvZ3JhbW1lcnMgQVBJIFNwZWNpZmljYXRpb24pIHJlcXVpcmVzIHRoZSBmb2xsb3dpbmc6Ci0gICAgICAvLyAxKSBPbmx5IHRoZSBmaXJzdCByb3cgY2FuIGhhdmUgYSBibGFuayBsYW5ndWFnZS4KLSAgICAgIC8vIDIpIE9ubHkgMSBuYW1lIHBlciBsYW5ndWFnZS4KLSAgICAgIFN0cmluZ1tdIHBhcmFtZXRlcnMgPSBuZXcgU3RyaW5nWzJdOwotICAgICAgcGFyYW1ldGVyc1swXSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05BTUUiKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPG5hbWVzLmxlbmd0aDtpKyspCi0gICAgICB7Ci0gICAgICAgIHBhcmFtZXRlcnNbMV0gPSBTdHJpbmcudmFsdWVPZihpKzEpOwotICAgICAgICBOYW1lIHVkZGk0ak5hbWU7Ci0gICAgICAgIGlmIChuYW1lTGFuZ3VhZ2VzW2ldLmxlbmd0aCgpID4gMCkKLSAgICAgICAgICB1ZGRpNGpOYW1lID0gbmV3IE5hbWUobmFtZXNbaV0sbmFtZUxhbmd1YWdlc1tpXSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHVkZGk0ak5hbWUgPSBuZXcgTmFtZShuYW1lc1tpXSk7Ci0gICAgICAgICAgaWYgKGkgIT0gMCAmJiAhc3ViUXVlcnlJbml0aWF0ZWRfKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICBmb3JtVG9vbFBJLmZsYWdSb3dFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX05BTUVTLGkpOwotICAgICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9ST1dfQkxBTktfTEFOR1VBR0UiLHBhcmFtZXRlcnMpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGxhbmd1YWdlSGFzaC5nZXQobmFtZUxhbmd1YWdlc1tpXSkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgZm9ybVRvb2xQSS5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19OQU1FUyxpKTsKLSAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1JPV19EVVBMSUNBVEVfTEFOR1VBR0UiLHBhcmFtZXRlcnMpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgbGFuZ3VhZ2VIYXNoLnB1dChuYW1lTGFuZ3VhZ2VzW2ldLEJvb2xlYW4uVFJVRSk7Ci0gICAgICAgIGlmIChuYW1lc1tpXS50cmltKCkubGVuZ3RoKCkgPCAxKQotICAgICAgICB7Ci0gICAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICBmb3JtVG9vbFBJLmZsYWdSb3dFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX05BTUVTLGkpOwotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfUk9XX0lOVkFMSURfVEVYVCIscGFyYW1ldGVycykpOwotICAgICAgICB9Ci0gICAgICAgIG5hbWVWZWN0b3IuYWRkRWxlbWVudCh1ZGRpNGpOYW1lKTsKLSAgICAgIH0KLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX05BTUVTLG5hbWVWZWN0b3IpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19OQU1FUyk7Ci0gICAgICBpZiAoIXN1YlF1ZXJ5SW5pdGlhdGVkXykKLSAgICAgIHsKLSAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgZm9ybVRvb2xQSS5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19OQU1FUyk7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9fTkFNRVMiKSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGRlc2NyaXB0aW9uTGFuZ3VhZ2VzICE9IG51bGwgJiYgZGVzY3JpcHRpb25zICE9IG51bGwpCi0gICAgewotICAgICAgVmVjdG9yIGRlc2NyaXB0aW9uVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgU3RyaW5nW10gcGFyYW1ldGVycyA9IG5ldyBTdHJpbmdbMl07Ci0gICAgICBwYXJhbWV0ZXJzWzBdID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfREVTQ1JJUFRJT04iKTsKLSAgICAgIGxhbmd1YWdlSGFzaC5jbGVhcigpOwotICAgICAgZm9yIChpbnQgaT0wO2k8ZGVzY3JpcHRpb25zLmxlbmd0aDtpKyspCi0gICAgICB7Ci0gICAgICAgIHBhcmFtZXRlcnNbMV0gPSBTdHJpbmcudmFsdWVPZihpKzEpOwotICAgICAgICBEZXNjcmlwdGlvbiB1ZGRpNGpEZXNjcmlwdGlvbjsKLSAgICAgICAgaWYgKGRlc2NyaXB0aW9uTGFuZ3VhZ2VzW2ldLmxlbmd0aCgpID4gMCkKLSAgICAgICAgICB1ZGRpNGpEZXNjcmlwdGlvbiA9IG5ldyBEZXNjcmlwdGlvbihkZXNjcmlwdGlvbnNbaV0sZGVzY3JpcHRpb25MYW5ndWFnZXNbaV0pOwotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICB1ZGRpNGpEZXNjcmlwdGlvbiA9IG5ldyBEZXNjcmlwdGlvbihkZXNjcmlwdGlvbnNbaV0pOwotICAgICAgICAgIGlmIChpICE9IDAgJiYgIXN1YlF1ZXJ5SW5pdGlhdGVkXykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgZm9ybVRvb2xQSS5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ERVNDUklQVElPTlMsaSk7Ci0gICAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1JPV19CTEFOS19MQU5HVUFHRSIscGFyYW1ldGVycykpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAobGFuZ3VhZ2VIYXNoLmdldChkZXNjcmlwdGlvbkxhbmd1YWdlc1tpXSkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgZm9ybVRvb2xQSS5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ERVNDUklQVElPTlMsaSk7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9ST1dfRFVQTElDQVRFX0xBTkdVQUdFIixwYXJhbWV0ZXJzKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgIGxhbmd1YWdlSGFzaC5wdXQoZGVzY3JpcHRpb25MYW5ndWFnZXNbaV0sQm9vbGVhbi5UUlVFKTsKLSAgICAgICAgaWYgKGRlc2NyaXB0aW9uc1tpXS50cmltKCkubGVuZ3RoKCkgPCAxKQotICAgICAgICB7Ci0gICAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICBmb3JtVG9vbFBJLmZsYWdSb3dFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RFU0NSSVBUSU9OUyxpKTsKLSAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1JPV19JTlZBTElEX1RFWFQiLHBhcmFtZXRlcnMpKTsKLSAgICAgICAgfQotICAgICAgICBkZXNjcmlwdGlvblZlY3Rvci5hZGRFbGVtZW50KHVkZGk0akRlc2NyaXB0aW9uKTsKLSAgICAgIH0KLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RFU0NSSVBUSU9OUyxkZXNjcmlwdGlvblZlY3Rvcik7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfREVTQ1JJUFRJT05TKTsKLQotICAgIGlmIChpZFR5cGVzICE9IG51bGwgJiYgaWRLZXlOYW1lcyAhPSBudWxsICYmIGlkS2V5VmFsdWVzICE9IG51bGwpCi0gICAgewotICAgICAgSWRlbnRpZmllckJhZyBpZEJhZyA9IG5ldyBJZGVudGlmaWVyQmFnKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxpZEtleU5hbWVzLmxlbmd0aDtpKyspCi0gICAgICB7Ci0gICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gbmV3IEtleWVkUmVmZXJlbmNlKGlkS2V5TmFtZXNbaV0saWRLZXlWYWx1ZXNbaV0saWRUeXBlc1tpXSk7Ci0gICAgICAgIGlkQmFnLmFkZChrcik7Ci0gICAgICB9Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19JREVOVElGSUVSUyxpZEJhZyk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfSURFTlRJRklFUlMpOwotCi0gICAgaWYgKGNhdFR5cGVzICE9IG51bGwgJiYgY2F0S2V5TmFtZXMgIT0gbnVsbCAmJiBjYXRLZXlWYWx1ZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBDYXRlZ29yeUJhZyBjYXRCYWcgPSBuZXcgQ2F0ZWdvcnlCYWcoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPGNhdFR5cGVzLmxlbmd0aDtpKyspCi0gICAgICB7Ci0gICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gbmV3IEtleWVkUmVmZXJlbmNlKGNhdEtleU5hbWVzW2ldLGNhdEtleVZhbHVlc1tpXSxjYXRUeXBlc1tpXSk7Ci0gICAgICAgIGNhdEJhZy5hZGQoa3IpOwotICAgICAgfQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfQ0FURUdPUklFUyxjYXRCYWcpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0NBVEVHT1JJRVMpOwotICAgICAgCi0gICAgaWYgKGRpc2NvdmVyeVVSTFZhbHVlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIERpc2NvdmVyeVVSTHMgZGlzY292ZXJ5VVJMcyA9IG5ldyBEaXNjb3ZlcnlVUkxzKCk7Ci0gICAgICBTdHJpbmdbXSBwYXJhbWV0ZXJzID0gbmV3IFN0cmluZ1syXTsKLSAgICAgIHBhcmFtZXRlcnNbMF0gPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9ESVNDT1ZFUllVUkwiKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPGRpc2NvdmVyeVVSTFZhbHVlcy5sZW5ndGg7aSsrKQotICAgICAgewotICAgICAgICBwYXJhbWV0ZXJzWzFdID0gU3RyaW5nLnZhbHVlT2YoaSsxKTsKLSAgICAgICAgaWYgKCFzdWJRdWVyeUluaXRpYXRlZF8gJiYgIVZhbGlkYXRvci52YWxpZGF0ZVVSTChkaXNjb3ZlcnlVUkxWYWx1ZXNbaV0pKQotICAgICAgICB7Ci0gICAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICBmb3JtVG9vbFBJLmZsYWdSb3dFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RJU0NPVkVSWVVSTFMsaSk7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9ST1dfSU5WQUxJRF9URVhUIixwYXJhbWV0ZXJzKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZGlzY292ZXJ5VVJMcy5hZGQobmV3IERpc2NvdmVyeVVSTChkaXNjb3ZlcnlVUkxWYWx1ZXNbaV0sIiIpKTsKLSAgICAgIH0KLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RJU0NPVkVSWVVSTFMsZGlzY292ZXJ5VVJMcyk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfRElTQ09WRVJZVVJMUyk7ICAgICAgCi0KLSAgICByZXR1cm4gaW5wdXRzVmFsaWQ7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICAgIFN0cmluZyB1c2VySWQgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICAgICBTdHJpbmcgcGFzc3dvcmQgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEKTsKLSAgICAgIFZlY3RvciBuYW1lVmVjdG9yID0gKFZlY3Rvcilwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19OQU1FUyk7Ci0gICAgICBWZWN0b3IgZGVzY3JpcHRpb25WZWN0b3IgPSAoVmVjdG9yKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RFU0NSSVBUSU9OUyk7Ci0gICAgICBJZGVudGlmaWVyQmFnIGlkZW50aWZpZXJCYWcgPSAoSWRlbnRpZmllckJhZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19JREVOVElGSUVSUyk7Ci0gICAgICBDYXRlZ29yeUJhZyBjYXRlZ29yeUJhZyA9IChDYXRlZ29yeUJhZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19DQVRFR09SSUVTKTsKLSAgICAgIERpc2NvdmVyeVVSTHMgZGlzY292ZXJ5VVJMcyA9IChEaXNjb3ZlcnlVUkxzKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RJU0NPVkVSWVVSTFMpOwotCi0gICAgICAvLyBUaGUgYWN0aW9uIGNhbiBiZSBydW4gdW5kZXIgdGhlIGNvbnRleHQgb2YgZWl0aGVyIGEgcmVnaXN0cnkgb3IgYSBxdWVyeSBub2RlLgotICAgICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICBpZiAoIXJlZ0VsZW1lbnQuaXNMb2dnZWRJbigpKQotICAgICAgICByZWdFbGVtZW50LnBlcmZvcm1Mb2dpbihwdWJsaXNoVVJMLHVzZXJJZCxwYXNzd29yZCk7Ci0gICAgICBVRERJUHJveHkgcHJveHkgPSByZWdFbGVtZW50LmdldFByb3h5KCk7Ci0KLSAgICAgIEJ1c2luZXNzRW50aXR5IGJlID0gbmV3IEJ1c2luZXNzRW50aXR5KCk7Ci0gICAgICBiZS5zZXRCdXNpbmVzc0tleSgiIik7Ci0gICAgICBiZS5zZXROYW1lVmVjdG9yKG5hbWVWZWN0b3IpOwotICAgICAgYmUuc2V0RGVzY3JpcHRpb25WZWN0b3IoZGVzY3JpcHRpb25WZWN0b3IpOwotICAgICAgYmUuc2V0SWRlbnRpZmllckJhZyhpZGVudGlmaWVyQmFnKTsKLSAgICAgIGJlLnNldENhdGVnb3J5QmFnKGNhdGVnb3J5QmFnKTsKLSAgICAgIGJlLnNldERpc2NvdmVyeVVSTHMoZGlzY292ZXJ5VVJMcyk7Ci0gICAgICBWZWN0b3IgYmVWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBiZVZlY3Rvci5hZGQoYmUpOwotCi0gICAgICBiZSA9IChCdXNpbmVzc0VudGl0eSlwcm94eS5zYXZlX2J1c2luZXNzKHJlZ0VsZW1lbnQuZ2V0QXV0aEluZm9TdHJpbmcoKSwgYmVWZWN0b3IpLmdldEJ1c2luZXNzRW50aXR5VmVjdG9yKCkuZ2V0KDApOwotICAgICAgYWRkUHVibGlzaGVkSXRlbU5vZGUoYmUscmVnRWxlbWVudCk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fQlVTSU5FU1NfUFVCTElTSEVEIixiZS5nZXREZWZhdWx0TmFtZVN0cmluZygpKSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlRyYW5zcG9ydEV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlVERElFeGNlcHRpb24iKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUudG9TdHJpbmcoKSk7Ci0gICAgfQotICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJNYWxmb3JtZWRVUkxFeGNlcHRpb24iKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdQdWJsaXNoQnVzaW5lc3NTaW1wbGVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hCdXNpbmVzc1NpbXBsZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjE5OWI3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hCdXNpbmVzc1NpbXBsZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVmFsaWRhdG9yOwotaW1wb3J0IG9yZy51ZGRpNGouVURESUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLmNsaWVudC5VRERJUHJveHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5OYW1lOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYnVzaW5lc3MuQnVzaW5lc3NFbnRpdHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai50cmFuc3BvcnQuVHJhbnNwb3J0RXhjZXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgUmVnUHVibGlzaEJ1c2luZXNzU2ltcGxlQWN0aW9uIGV4dGVuZHMgUHVibGlzaEFjdGlvbgotewotICBwdWJsaWMgUmVnUHVibGlzaEJ1c2luZXNzU2ltcGxlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU0sU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVMpKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9CVVNJTkVTU0VTLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0lNUExFKSk7ICAgIAotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc090aGVycyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIsRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIG5hbWUgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX0JVU0lORVNTX05BTUUpOwotICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfQlVTSU5FU1NfREVTQ1JJUFRJT04pOwotCi0gICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHRydWU7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0KLSAgICBpZiAobmFtZSAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX0JVU0lORVNTX05BTUUsbmFtZSk7Ci0KLSAgICBpZiAoIXN1YlF1ZXJ5SW5pdGlhdGVkXyAmJiAhVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nKG5hbWUpKQotICAgIHsKLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICBmb3JtVG9vbFBJLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9CVVNJTkVTU19OQU1FKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9OQU1FIikpOwotICAgIH0KLQotICAgIGlmIChkZXNjcmlwdGlvbiAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX0JVU0lORVNTX0RFU0NSSVBUSU9OLGRlc2NyaXB0aW9uKTsKLQotICAgIHJldHVybiBpbnB1dHNWYWxpZDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBTdHJpbmcgcHVibGlzaFVSTCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgIFN0cmluZyB1c2VySWQgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICAgU3RyaW5nIHBhc3N3b3JkID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCk7Ci0gICAgU3RyaW5nIG5hbWUgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9CVVNJTkVTU19OQU1FKTsKLSAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9CVVNJTkVTU19ERVNDUklQVElPTik7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgVURESVByb3h5IHByb3h5ID0gcmVnRWxlbWVudC5nZXRQcm94eSgpOwotICAgICAgaWYgKCFyZWdFbGVtZW50LmlzTG9nZ2VkSW4oKSkKLSAgICAgICAgcmVnRWxlbWVudC5wZXJmb3JtTG9naW4ocHVibGlzaFVSTCx1c2VySWQscGFzc3dvcmQpOwotCi0gICAgICBCdXNpbmVzc0VudGl0eSBiZSA9IG5ldyBCdXNpbmVzc0VudGl0eSgpOwotICAgICAgYmUuc2V0QnVzaW5lc3NLZXkoIiIpOwotICAgICAgYmUuc2V0RGVmYXVsdE5hbWUobmV3IE5hbWUobmFtZSkpOwotICAgICAgYmUuc2V0RGVmYXVsdERlc2NyaXB0aW9uU3RyaW5nKGRlc2NyaXB0aW9uKTsKLSAgICAgIFZlY3RvciBiZVZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGJlVmVjdG9yLmFkZChiZSk7Ci0KLSAgICAgIGJlID0gKEJ1c2luZXNzRW50aXR5KXByb3h5LnNhdmVfYnVzaW5lc3MocmVnRWxlbWVudC5nZXRBdXRoSW5mb1N0cmluZygpLCBiZVZlY3RvcikuZ2V0QnVzaW5lc3NFbnRpdHlWZWN0b3IoKS5nZXQoMCk7Ci0gICAgICBhZGRQdWJsaXNoZWRJdGVtTm9kZShiZSxyZWdFbGVtZW50KTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19CVVNJTkVTU19QVUJMSVNIRUQiLGJlLmdldERlZmF1bHROYW1lU3RyaW5nKCkpKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVHJhbnNwb3J0RXhjZXB0aW9uIik7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICAgIGNhdGNoIChVRERJRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVURESUV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIk1hbGZvcm1lZFVSTEV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmQyNDFmNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdQdWJsaXNoU2VydmljZUFkdmFuY2VkQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNDE5IDE4Mjg2NCAgIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkudXRpbC5VZGRpNGpIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVmFsaWRhdG9yOwotaW1wb3J0IG9yZy51ZGRpNGouVURESUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLmNsaWVudC5VRERJUHJveHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5EZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLk5hbWU7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5idXNpbmVzcy5CdXNpbmVzc0VudGl0eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnNlcnZpY2UuQnVzaW5lc3NTZXJ2aWNlOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLlRNb2RlbDsKLWltcG9ydCBvcmcudWRkaTRqLnRyYW5zcG9ydC5UcmFuc3BvcnRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkNhdGVnb3J5QmFnOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5LZXllZFJlZmVyZW5jZTsKLQotcHVibGljIGNsYXNzIFJlZ1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRBY3Rpb24gZXh0ZW5kcyBQdWJsaXNoQWN0aW9uCi17Ci0gIHB1YmxpYyBSZWdQdWJsaXNoU2VydmljZUFkdmFuY2VkQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU0sU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTKSk7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRVMsU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9BRFZBTkNFRCkpOyAgICAKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCBib29sZWFuIHByb2Nlc3NPdGhlcnMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyLEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyBidXNOb2RlSWRzID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLk5PREVJRF9CVVNJTkVTUyk7Ci0gICAgU3RyaW5nW10gc2VySW50SWRzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLk5PREVJRF9TRVJWSUNFX0lOVEVSRkFDRSk7Ci0gICAgU3RyaW5nIHdzZGxVUkwgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XU0RMX1VSTCk7Ci0gICAgU3RyaW5nW10gbmFtZUxhbmd1YWdlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9OQU1FX0xBTkdVQUdFKTsKLSAgICBTdHJpbmdbXSBuYW1lcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9OQU1FKTsgICAgCi0gICAgU3RyaW5nW10gZGVzY3JpcHRpb25MYW5ndWFnZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfREVTQ1JJUFRJT05fTEFOR1VBR0UpOwotICAgIFN0cmluZ1tdIGRlc2NyaXB0aW9ucyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9ERVNDUklQVElPTik7Ci0gICAgU3RyaW5nW10gY2F0VHlwZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQ0FURUdPUllfVFlQRSk7Ci0gICAgU3RyaW5nW10gY2F0S2V5TmFtZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQ0FURUdPUllfS0VZX05BTUUpOwotICAgIFN0cmluZ1tdIGNhdEtleVZhbHVlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9DQVRFR09SWV9LRVlfVkFMVUUpOwotCi0gICAgLy8gVmFsaWRhdGUgdGhlIGRhdGEuCi0gICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHRydWU7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0KLSAgICBpZiAoYnVzTm9kZUlkcyAhPSBudWxsKQotICAgIHsKLSAgICAgIFZlY3RvciBzZXJ2aWNlQnVzaW5lc3MgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0JVU0lORVNTKTsKLSAgICAgIGlmIChzZXJ2aWNlQnVzaW5lc3MgPT0gbnVsbCkKLSAgICAgICAgc2VydmljZUJ1c2luZXNzID0gbmV3IFZlY3RvcigpOwotICAgICAgZWxzZQotICAgICAgICBzZXJ2aWNlQnVzaW5lc3MucmVtb3ZlQWxsRWxlbWVudHMoKTsKLSAgICAgIFZlY3RvciBzZXJ2aWNlQnVzaW5lc3NDb3B5ID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9CVVNJTkVTU19DT1BZKTsKLSAgICAgIC8vIFRoZSBicm93c2VyIHdpbGwgZW5mb3JjZSB0aGUgcnVsZSBvZiBoYXZpbmcgb25seSBvbmUgYnVzaW5lc3MgaW4gdGhpcyBsaXN0LgotICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpc2VydmljZUJ1c2luZXNzQ29weS5lbGVtZW50QXQoMCk7Ci0gICAgICBzZXJ2aWNlQnVzaW5lc3MuYWRkRWxlbWVudChsaXN0RWxlbWVudCk7Ci0gICAgICBCdXNpbmVzc0VudGl0eSBzcCA9IChCdXNpbmVzc0VudGl0eSlsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQlVTSU5FU1Msc2VydmljZUJ1c2luZXNzKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9QUk9WSURFUixzcCk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX0JVU0lORVNTX0tFWSxzcC5nZXRCdXNpbmVzc0tleSgpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9CVVNJTkVTUyk7Ci0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9QUk9WSURFUik7Ci0gICAgICBpZiAoIXN1YlF1ZXJ5SW5pdGlhdGVkXykKLSAgICAgIHsKLSAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgZm9ybVRvb2xQSS5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0JVU0lORVNTKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX0JVU0lORVNTIikpOwotICAgICAgfSAgICAgIAotICAgIH0KLSAgICAKLSAgICBpZiAoc2VySW50SWRzICE9IG51bGwgJiYgc2VySW50SWRzLmxlbmd0aCA+IDApCi0gICAgewotICAgICAgVmVjdG9yIHNlcnZpY2VJbnRlcmZhY2VzID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX0lOVEVSRkFDRVMpOwotICAgICAgaWYgKHNlcnZpY2VJbnRlcmZhY2VzID09IG51bGwpCi0gICAgICAgIHNlcnZpY2VJbnRlcmZhY2VzID0gbmV3IFZlY3RvcigpOwotICAgICAgZWxzZQotICAgICAgICBzZXJ2aWNlSW50ZXJmYWNlcy5yZW1vdmVBbGxFbGVtZW50cygpOwotICAgICAgVmVjdG9yIHNlcnZpY2VJbnRlcmZhY2VzQ29weSA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9JTlRFUkZBQ0VTX0NPUFkpOwotICAgICAgVmVjdG9yIHRtb2RlbHMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gc2VydmljZUludGVyZmFjZXNDb3B5Lml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KWl0Lm5leHQoKTsKLSAgICAgICAgaW50IHRhcmdldE5vZGVJZCA9IGxpc3RFbGVtZW50LmdldFRhcmdldE5vZGVJZCgpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNlckludElkcy5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICh0YXJnZXROb2RlSWQgPT0gSW50ZWdlci5wYXJzZUludChzZXJJbnRJZHNbaV0pKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBzZXJ2aWNlSW50ZXJmYWNlcy5hZGQobGlzdEVsZW1lbnQpOwotICAgICAgICAgICAgICB0bW9kZWxzLmFkZChsaXN0RWxlbWVudC5nZXRPYmplY3QoKSk7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfSU5URVJGQUNFUywgc2VydmljZUludGVyZmFjZXMpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9UTU9ERUwsIHRtb2RlbHMpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfSU5URVJGQUNFUyk7Ci0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfVE1PREVMKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKHdzZGxVUkwgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dTRExfVVJMLHdzZGxVUkwpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9XU0RMX1VSTCx3c2RsVVJMKTsKLSAgICB9Ci0KLSAgICBpZiAoIXN1YlF1ZXJ5SW5pdGlhdGVkXyAmJiAhVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nKHdzZGxVUkwpKQotICAgIHsKLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICBmb3JtVG9vbFBJLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfV1NETF9VUkwpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX1dTRExfVVJMIikpOwotICAgIH0KLQotICAgIEhhc2h0YWJsZSBsYW5ndWFnZUhhc2ggPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgaWYgKG5hbWVMYW5ndWFnZXMgIT0gbnVsbCAmJiBuYW1lcyAhPSBudWxsKQotICAgIHsKLSAgICAgIFZlY3RvciBuYW1lVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgLy8gVURESSdzIHNhdmUgQVBJIChBcHBlbmRpeCBDIG9mIHRoZSBVRERJIFYyIFByb2dyYW1tZXJzIEFQSSBTcGVjaWZpY2F0aW9uKSByZXF1aXJlcyB0aGUgZm9sbG93aW5nOgotICAgICAgLy8gMSkgT25seSB0aGUgZmlyc3Qgcm93IGNhbiBoYXZlIGEgYmxhbmsgbGFuZ3VhZ2UuCi0gICAgICAvLyAyKSBPbmx5IDEgbmFtZSBwZXIgbGFuZ3VhZ2UuCi0gICAgICBTdHJpbmdbXSBwYXJhbWV0ZXJzID0gbmV3IFN0cmluZ1syXTsKLSAgICAgIHBhcmFtZXRlcnNbMF0gPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9OQU1FIik7Ci0gICAgICBmb3IgKGludCBpPTA7aTxuYW1lcy5sZW5ndGg7aSsrKQotICAgICAgewotICAgICAgICBwYXJhbWV0ZXJzWzFdID0gU3RyaW5nLnZhbHVlT2YoaSsxKTsKLSAgICAgICAgTmFtZSB1ZGRpNGpOYW1lOwotICAgICAgICBpZiAobmFtZUxhbmd1YWdlc1tpXS5sZW5ndGgoKSA+IDApCi0gICAgICAgICAgdWRkaTRqTmFtZSA9IG5ldyBOYW1lKG5hbWVzW2ldLG5hbWVMYW5ndWFnZXNbaV0pOwotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICB1ZGRpNGpOYW1lID0gbmV3IE5hbWUobmFtZXNbaV0pOwotICAgICAgICAgIGlmIChpICE9IDAgJiYgIXN1YlF1ZXJ5SW5pdGlhdGVkXykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgZm9ybVRvb2xQSS5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX05BTUVTLGkpOwotICAgICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9ST1dfQkxBTktfTEFOR1VBR0UiLHBhcmFtZXRlcnMpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGxhbmd1YWdlSGFzaC5nZXQobmFtZUxhbmd1YWdlc1tpXSkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgZm9ybVRvb2xQSS5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX05BTUVTLGkpOwotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfUk9XX0RVUExJQ0FURV9MQU5HVUFHRSIscGFyYW1ldGVycykpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBsYW5ndWFnZUhhc2gucHV0KG5hbWVMYW5ndWFnZXNbaV0sQm9vbGVhbi5UUlVFKTsKLSAgICAgICAgaWYgKG5hbWVzW2ldLnRyaW0oKS5sZW5ndGgoKSA8IDEpCi0gICAgICAgIHsKLSAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgIGZvcm1Ub29sUEkuZmxhZ1Jvd0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9OQU1FUyxpKTsKLSAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1JPV19JTlZBTElEX1RFWFQiLHBhcmFtZXRlcnMpKTsKLSAgICAgICAgfQotICAgICAgICBuYW1lVmVjdG9yLmFkZEVsZW1lbnQodWRkaTRqTmFtZSk7Ci0gICAgICB9Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX05BTUVTLG5hbWVWZWN0b3IpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX05BTUVTKTsKLSAgICAgIGlmICghc3ViUXVlcnlJbml0aWF0ZWRfKQotICAgICAgewotICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICBmb3JtVG9vbFBJLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTkFNRVMpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PX05BTUVTIikpOwotICAgICAgfQotICAgIH0KLQotICAgIGlmIChkZXNjcmlwdGlvbkxhbmd1YWdlcyAhPSBudWxsICYmIGRlc2NyaXB0aW9ucyAhPSBudWxsKQotICAgIHsKLSAgICAgIFZlY3RvciBkZXNjcmlwdGlvblZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIFN0cmluZ1tdIHBhcmFtZXRlcnMgPSBuZXcgU3RyaW5nWzJdOwotICAgICAgcGFyYW1ldGVyc1swXSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0RFU0NSSVBUSU9OIik7Ci0gICAgICBsYW5ndWFnZUhhc2guY2xlYXIoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPGRlc2NyaXB0aW9ucy5sZW5ndGg7aSsrKQotICAgICAgewotICAgICAgICBwYXJhbWV0ZXJzWzFdID0gU3RyaW5nLnZhbHVlT2YoaSsxKTsKLSAgICAgICAgRGVzY3JpcHRpb24gdWRkaTRqRGVzY3JpcHRpb247Ci0gICAgICAgIGlmIChkZXNjcmlwdGlvbkxhbmd1YWdlc1tpXS5sZW5ndGgoKSA+IDApCi0gICAgICAgICAgdWRkaTRqRGVzY3JpcHRpb24gPSBuZXcgRGVzY3JpcHRpb24oZGVzY3JpcHRpb25zW2ldLGRlc2NyaXB0aW9uTGFuZ3VhZ2VzW2ldKTsKLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgdWRkaTRqRGVzY3JpcHRpb24gPSBuZXcgRGVzY3JpcHRpb24oZGVzY3JpcHRpb25zW2ldKTsKLSAgICAgICAgICBpZiAoaSAhPSAwICYmICFzdWJRdWVyeUluaXRpYXRlZF8pCi0gICAgICAgICAgewotICAgICAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGZvcm1Ub29sUEkuZmxhZ1Jvd0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9ERVNDUklQVElPTlMsaSk7Ci0gICAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1JPV19CTEFOS19MQU5HVUFHRSIscGFyYW1ldGVycykpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAobGFuZ3VhZ2VIYXNoLmdldChkZXNjcmlwdGlvbkxhbmd1YWdlc1tpXSkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgZm9ybVRvb2xQSS5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0RFU0NSSVBUSU9OUyxpKTsKLSAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1JPV19EVVBMSUNBVEVfTEFOR1VBR0UiLHBhcmFtZXRlcnMpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgbGFuZ3VhZ2VIYXNoLnB1dChkZXNjcmlwdGlvbkxhbmd1YWdlc1tpXSxCb29sZWFuLlRSVUUpOwotICAgICAgICBpZiAoZGVzY3JpcHRpb25zW2ldLnRyaW0oKS5sZW5ndGgoKSA8IDEpCi0gICAgICAgIHsKLSAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgIGZvcm1Ub29sUEkuZmxhZ1Jvd0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9ERVNDUklQVElPTlMsaSk7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9ST1dfSU5WQUxJRF9URVhUIixwYXJhbWV0ZXJzKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZGVzY3JpcHRpb25WZWN0b3IuYWRkRWxlbWVudCh1ZGRpNGpEZXNjcmlwdGlvbik7Ci0gICAgICB9Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0RFU0NSSVBUSU9OUyxkZXNjcmlwdGlvblZlY3Rvcik7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9ERVNDUklQVElPTlMpOwotCi0gICAgaWYgKGNhdFR5cGVzICE9IG51bGwgJiYgY2F0S2V5TmFtZXMgIT0gbnVsbCAmJiBjYXRLZXlWYWx1ZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBDYXRlZ29yeUJhZyBjYXRCYWcgPSBuZXcgQ2F0ZWdvcnlCYWcoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPGNhdFR5cGVzLmxlbmd0aDtpKyspCi0gICAgICB7Ci0gICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gbmV3IEtleWVkUmVmZXJlbmNlKGNhdEtleU5hbWVzW2ldLGNhdEtleVZhbHVlc1tpXSxjYXRUeXBlc1tpXSk7Ci0gICAgICAgIGNhdEJhZy5hZGQoa3IpOwotICAgICAgfQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9DQVRFR09SSUVTLGNhdEJhZyk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9DQVRFR09SSUVTKTsKLQotICAgIHJldHVybiBpbnB1dHNWYWxpZDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBTdHJpbmcgcHVibGlzaFVSTCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgICAgU3RyaW5nIHVzZXJJZCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICAgIFN0cmluZyBwYXNzd29yZCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotICAgICAgQnVzaW5lc3NFbnRpdHkgYmUgPSAoQnVzaW5lc3NFbnRpdHkpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX1BST1ZJREVSKTsKLSAgICAgIFN0cmluZyBidXNpbmVzc0tleSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9CVVNJTkVTU19LRVkpOwotICAgICAgVmVjdG9yIHRNb2RlbFZlY3RvciA9IChWZWN0b3IpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9UTU9ERUwpOwotICAgICAgU3RyaW5nIHdzZGxVUkwgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfV1NETF9VUkwpOwotICAgICAgVmVjdG9yIG5hbWVWZWN0b3IgPSAoVmVjdG9yKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTkFNRVMpOwotICAgICAgVmVjdG9yIGRlc2NyaXB0aW9uVmVjdG9yID0gKFZlY3Rvcilwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0RFU0NSSVBUSU9OUyk7Ci0gICAgICBDYXRlZ29yeUJhZyBjYXRlZ29yeUJhZyA9IChDYXRlZ29yeUJhZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0NBVEVHT1JJRVMpOwotCi0gICAgICAvLyBUaGUgYWN0aW9uIGNhbiBiZSBydW4gdW5kZXIgdGhlIGNvbnRleHQgb2YgZWl0aGVyIGEgcmVnaXN0cnkgb3IgYSBxdWVyeSBub2RlLgotICAgICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICBpZiAoIXJlZ0VsZW1lbnQuaXNMb2dnZWRJbigpKQotICAgICAgICByZWdFbGVtZW50LnBlcmZvcm1Mb2dpbihwdWJsaXNoVVJMLHVzZXJJZCxwYXNzd29yZCk7Ci0gICAgICBVRERJUHJveHkgcHJveHkgPSByZWdFbGVtZW50LmdldFByb3h5KCk7Ci0KLSAgICAgIFVkZGk0akhlbHBlciB1ZGRpNGpIZWxwZXIgPSBuZXcgVWRkaTRqSGVscGVyKCk7Ci0gICAgICBEZWZpbml0aW9uIGRlZiA9IHVkZGk0akhlbHBlci5nZXRXU0RMRGVmaW5pdGlvbih3c2RsVVJMKTsKLQotICAgICAgQnVzaW5lc3NTZXJ2aWNlIGJzOwotICAgICAgaWYgKHRNb2RlbFZlY3RvciAhPSBudWxsICYmIHRNb2RlbFZlY3Rvci5zaXplKCkgPiAwKQotICAgICAgICBicyA9IHVkZGk0akhlbHBlci5uZXdCdXNpbmVzc1NlcnZpY2Uod3NkbFVSTCwgZGVmLCAoVE1vZGVsW10pdE1vZGVsVmVjdG9yLnRvQXJyYXkobmV3IFRNb2RlbFswXSkpOwotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBSZWdQdWJsaXNoU2VydmljZUludGVyZmFjZVNpbXBsZUFjdGlvbiByZWdQdWJsaXNoU0lBY3Rpb24gPSBuZXcgUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTaW1wbGVBY3Rpb24oY29udHJvbGxlcl8pOwotICAgICAgICBpbnQgY3VycmVudE5vZGVJZCA9IGdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpLmdldE5vZGVJZCgpOwotICAgICAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHJlZ05vZGVfLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgICAgIFRNb2RlbFtdIHRNb2RlbHMgPSBudWxsOwotICAgICAgICBpZiAodWRkaTRqSGVscGVyLmlzTW9ub2xpdGhpY1dTREwoZGVmKSkKLSAgICAgICAgewotICAgICAgICAgIHRNb2RlbHMgPSBuZXcgVE1vZGVsWzFdOwotICAgICAgICAgIHRNb2RlbHNbMF0gPSB1ZGRpNGpIZWxwZXIubmV3VE1vZGVsKHdzZGxVUkwsIGRlZik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nW10gaW1wb3J0cyA9IHVkZGk0akhlbHBlci5nZXRJbXBvcnRzKGRlZiwgd3NkbFVSTCk7Ci0gICAgICAgICAgdE1vZGVscyA9IG5ldyBUTW9kZWxbaW1wb3J0cy5sZW5ndGhdOwotICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdE1vZGVscy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgIHRNb2RlbHNbaV0gPSB1ZGRpNGpIZWxwZXIubmV3VE1vZGVsKGltcG9ydHNbaV0pOwotICAgICAgICB9Ci0gICAgICAgIEhhc2h0YWJsZSB0TW9kZWxzVGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgICAgIGlmICh0TW9kZWxzICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBmb3IgKGludCBpPTA7aTx0TW9kZWxzLmxlbmd0aDtpKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHJlZ1B1Ymxpc2hTSUFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUodWRkaTRqSGVscGVyLmdldFdTREwodE1vZGVsc1tpXSksIHRNb2RlbHNbaV0pOwotICAgICAgICAgICAgaWYgKGlucHV0c1ZhbGlkKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICByZWdQdWJsaXNoU0lBY3Rpb24ucnVuKCk7Ci0gICAgICAgICAgICAgIE9iamVjdCBzYXZlZFRNb2RlbCA9IHJlZ1B1Ymxpc2hTSUFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCkuZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfT1VUUFVUX1NBVkVEX1RNT0RFTCk7Ci0gICAgICAgICAgICAgIGlmIChzYXZlZFRNb2RlbCAhPSBudWxsKQotICAgICAgICAgICAgICAgIHRNb2RlbHNUYWJsZS5wdXQoKChUTW9kZWwpc2F2ZWRUTW9kZWwpLmdldE5hbWVTdHJpbmcoKSwgc2F2ZWRUTW9kZWwpOwotICAgICAgICAgICAgICAvLyBSZXNlbGVjdCB0aGUgY3VycmVudCBub2RlLgotICAgICAgICAgICAgICBub2RlTWFuYWdlci5zZXRTZWxlY3RlZE5vZGVJZChjdXJyZW50Tm9kZUlkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnMgPSB1ZGRpNGpIZWxwZXIubmV3QnVzaW5lc3NTZXJ2aWNlKHdzZGxVUkwsIGRlZiwgdE1vZGVsc1RhYmxlKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgaWYgKGJlICE9IG51bGwpCi0gICAgICAgIGJzLnNldEJ1c2luZXNzS2V5KGJlLmdldEJ1c2luZXNzS2V5KCkpOwotICAgICAgZWxzZSBpZiAoYnVzaW5lc3NLZXkgIT0gbnVsbCkKLSAgICAgICAgYnMuc2V0QnVzaW5lc3NLZXkoYnVzaW5lc3NLZXkpOwotICAgICAgYnMuc2V0TmFtZVZlY3RvcihuYW1lVmVjdG9yKTsKLSAgICAgIGJzLnNldERlc2NyaXB0aW9uVmVjdG9yKGRlc2NyaXB0aW9uVmVjdG9yKTsKLSAgICAgIGJzLnNldENhdGVnb3J5QmFnKGNhdGVnb3J5QmFnKTsKLSAgICAgIFZlY3RvciBic1ZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGJzVmVjdG9yLmFkZChicyk7Ci0gICAgICByZWdFbGVtZW50LmhhbmRsZVByZUludm9jYXRpb24oYnMpOwotICAgICAgYnMgPSAoQnVzaW5lc3NTZXJ2aWNlKXByb3h5LnNhdmVfc2VydmljZShyZWdFbGVtZW50LmdldEF1dGhJbmZvU3RyaW5nKCksIGJzVmVjdG9yKS5nZXRCdXNpbmVzc1NlcnZpY2VWZWN0b3IoKS5nZXQoMCk7Ci0gICAgICBhZGRQdWJsaXNoZWRJdGVtTm9kZShicyxyZWdFbGVtZW50KTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19TRVJWSUNFX1BVQkxJU0hFRCIsYnMuZ2V0RGVmYXVsdE5hbWVTdHJpbmcoKSkpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGNhdGNoIChXU0RMRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiV1NETEV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVHJhbnNwb3J0RXhjZXB0aW9uIik7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICAgIGNhdGNoIChVRERJRXhjZXB0aW9uIGUpCi0gICAgewotICAgIAlpZihVRERJRXhjZXB0aW9uSGFuZGxlci5yZXF1aXJlc1Jlc2V0KGUpKXsKLSAgICAJCVJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgIAkJcmVnRWxlbWVudC5zZXREZWZhdWx0cygpOwotICAgIAl9Ci0gICAgCW1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgIAltZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVURESUV4Y2VwdGlvbiIpOwotICAgIAltZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiTWFsZm9ybWVkVVJMRXhjZXB0aW9uIik7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7ICAgICAgCi0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDFmNWM3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWRBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA0MTkgMTgyODY0ICAgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS51dGlsLlVkZGk0akhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5WYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLnVkZGk0ai5VRERJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLkRlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLlRNb2RlbDsKLWltcG9ydCBvcmcudWRkaTRqLnRyYW5zcG9ydC5UcmFuc3BvcnRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkNhdGVnb3J5QmFnOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5JZGVudGlmaWVyQmFnOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5LZXllZFJlZmVyZW5jZTsKLQotcHVibGljIGNsYXNzIFJlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWRBY3Rpb24gZXh0ZW5kcyBQdWJsaXNoQWN0aW9uCi17Ci0gIHB1YmxpYyBSZWdQdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU0sU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUykpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VfSU5URVJGQUNFUyxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0FEVkFOQ0VEKSk7ICAgIAotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gcHJvY2Vzc090aGVycyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIsRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIHdzZGxVUkwgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XU0RMX1VSTCk7Ci0gICAgU3RyaW5nIG5hbWUgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSk7Ci0gICAgU3RyaW5nW10gZGVzY3JpcHRpb25MYW5ndWFnZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfREVTQ1JJUFRJT05fTEFOR1VBR0UpOwotICAgIFN0cmluZ1tdIGRlc2NyaXB0aW9ucyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9ERVNDUklQVElPTik7Ci0gICAgU3RyaW5nW10gaWRUeXBlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9JREVOVElGSUVSX1RZUEUpOwotICAgIFN0cmluZ1tdIGlkS2V5TmFtZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfSURFTlRJRklFUl9LRVlfTkFNRSk7Ci0gICAgU3RyaW5nW10gaWRLZXlWYWx1ZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfSURFTlRJRklFUl9LRVlfVkFMVUUpOwotICAgIFN0cmluZ1tdIGNhdFR5cGVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0NBVEVHT1JZX1RZUEUpOwotICAgIFN0cmluZ1tdIGNhdEtleU5hbWVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0NBVEVHT1JZX0tFWV9OQU1FKTsKLSAgICBTdHJpbmdbXSBjYXRLZXlWYWx1ZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQ0FURUdPUllfS0VZX1ZBTFVFKTsKLQotICAgIC8vIFZhbGlkYXRlIHRoZSBkYXRhLgotICAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSB0cnVlOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotCi0gICAgSGFzaHRhYmxlIGxhbmd1YWdlSGFzaCA9IG5ldyBIYXNodGFibGUoKTsKLQotICAgIGlmICh3c2RsVVJMICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9XU0RMX1VSTCx3c2RsVVJMKTsKLQotICAgIGlmICghc3ViUXVlcnlJbml0aWF0ZWRfICYmICFWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmcod3NkbFVSTCkpCi0gICAgewotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgIGZvcm1Ub29sUEkuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfV1NETF9VUkwpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX1dTRExfVVJMIikpOwotICAgIH0KLQotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FLG5hbWUpOwotCi0gICAgaWYgKCFzdWJRdWVyeUluaXRpYXRlZF8gJiYgIVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZyhuYW1lKSkKLSAgICB7Ci0gICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgZm9ybVRvb2xQSS5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9OQU1FIikpOwotICAgIH0KLQotICAgIGlmIChkZXNjcmlwdGlvbkxhbmd1YWdlcyAhPSBudWxsICYmIGRlc2NyaXB0aW9ucyAhPSBudWxsKQotICAgIHsKLSAgICAgIFZlY3RvciBkZXNjcmlwdGlvblZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIFN0cmluZ1tdIHBhcmFtZXRlcnMgPSBuZXcgU3RyaW5nWzJdOwotICAgICAgcGFyYW1ldGVyc1swXSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0RFU0NSSVBUSU9OIik7Ci0gICAgICBsYW5ndWFnZUhhc2guY2xlYXIoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPGRlc2NyaXB0aW9ucy5sZW5ndGg7aSsrKQotICAgICAgewotICAgICAgICBwYXJhbWV0ZXJzWzFdID0gU3RyaW5nLnZhbHVlT2YoaSsxKTsKLSAgICAgICAgRGVzY3JpcHRpb24gdWRkaTRqRGVzY3JpcHRpb247Ci0gICAgICAgIGlmIChkZXNjcmlwdGlvbkxhbmd1YWdlc1tpXS5sZW5ndGgoKSA+IDApCi0gICAgICAgICAgdWRkaTRqRGVzY3JpcHRpb24gPSBuZXcgRGVzY3JpcHRpb24oZGVzY3JpcHRpb25zW2ldLGRlc2NyaXB0aW9uTGFuZ3VhZ2VzW2ldKTsKLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgdWRkaTRqRGVzY3JpcHRpb24gPSBuZXcgRGVzY3JpcHRpb24oZGVzY3JpcHRpb25zW2ldKTsKLSAgICAgICAgICBpZiAoaSAhPSAwICYmICFzdWJRdWVyeUluaXRpYXRlZF8pCi0gICAgICAgICAgewotICAgICAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGZvcm1Ub29sUEkuZmxhZ1Jvd0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfREVTQ1JJUFRJT05TLGkpOwotICAgICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9ST1dfQkxBTktfTEFOR1VBR0UiLHBhcmFtZXRlcnMpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGxhbmd1YWdlSGFzaC5nZXQoZGVzY3JpcHRpb25MYW5ndWFnZXNbaV0pICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgIGZvcm1Ub29sUEkuZmxhZ1Jvd0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfREVTQ1JJUFRJT05TLGkpOwotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfUk9XX0RVUExJQ0FURV9MQU5HVUFHRSIscGFyYW1ldGVycykpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBsYW5ndWFnZUhhc2gucHV0KGRlc2NyaXB0aW9uTGFuZ3VhZ2VzW2ldLEJvb2xlYW4uVFJVRSk7Ci0gICAgICAgIGlmIChkZXNjcmlwdGlvbnNbaV0udHJpbSgpLmxlbmd0aCgpIDwgMSkKLSAgICAgICAgewotICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgZm9ybVRvb2xQSS5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9ERVNDUklQVElPTlMsaSk7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9ST1dfSU5WQUxJRF9URVhUIixwYXJhbWV0ZXJzKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZGVzY3JpcHRpb25WZWN0b3IuYWRkRWxlbWVudCh1ZGRpNGpEZXNjcmlwdGlvbik7Ci0gICAgICB9Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9ERVNDUklQVElPTlMsZGVzY3JpcHRpb25WZWN0b3IpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0RFU0NSSVBUSU9OUyk7Ci0KLSAgICBpZiAoaWRUeXBlcyAhPSBudWxsICYmIGlkS2V5TmFtZXMgIT0gbnVsbCAmJiBpZEtleVZhbHVlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIElkZW50aWZpZXJCYWcgaWRCYWcgPSBuZXcgSWRlbnRpZmllckJhZygpOwotICAgICAgZm9yIChpbnQgaT0wO2k8aWRLZXlOYW1lcy5sZW5ndGg7aSsrKQotICAgICAgewotICAgICAgICBLZXllZFJlZmVyZW5jZSBrciA9IG5ldyBLZXllZFJlZmVyZW5jZShpZEtleU5hbWVzW2ldLGlkS2V5VmFsdWVzW2ldLGlkVHlwZXNbaV0pOwotICAgICAgICBpZEJhZy5hZGQoa3IpOwotICAgICAgfQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfSURFTlRJRklFUlMsaWRCYWcpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0lERU5USUZJRVJTKTsKLQotICAgIGlmIChjYXRUeXBlcyAhPSBudWxsICYmIGNhdEtleU5hbWVzICE9IG51bGwgJiYgY2F0S2V5VmFsdWVzICE9IG51bGwpCi0gICAgewotICAgICAgQ2F0ZWdvcnlCYWcgY2F0QmFnID0gbmV3IENhdGVnb3J5QmFnKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxjYXRUeXBlcy5sZW5ndGg7aSsrKQotICAgICAgewotICAgICAgICBLZXllZFJlZmVyZW5jZSBrciA9IG5ldyBLZXllZFJlZmVyZW5jZShjYXRLZXlOYW1lc1tpXSxjYXRLZXlWYWx1ZXNbaV0sY2F0VHlwZXNbaV0pOwotICAgICAgICBjYXRCYWcuYWRkKGtyKTsKLSAgICAgIH0KLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0NBVEVHT1JJRVMsY2F0QmFnKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9DQVRFR09SSUVTKTsKLQotICAgIHJldHVybiBpbnB1dHNWYWxpZDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBTdHJpbmcgcHVibGlzaFVSTCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgICAgU3RyaW5nIHVzZXJJZCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICAgIFN0cmluZyBwYXNzd29yZCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotICAgICAgU3RyaW5nIHdzZGxVUkwgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1dTRExfVVJMKTsKLSAgICAgIFN0cmluZyBuYW1lID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FKTsKLSAgICAgIFZlY3RvciBkZXNjcmlwdGlvblZlY3RvciA9IChWZWN0b3IpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfREVTQ1JJUFRJT05TKTsKLSAgICAgIElkZW50aWZpZXJCYWcgaWRlbnRpZmllckJhZyA9IChJZGVudGlmaWVyQmFnKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0lERU5USUZJRVJTKTsKLSAgICAgIENhdGVnb3J5QmFnIGNhdGVnb3J5QmFnID0gKENhdGVnb3J5QmFnKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0NBVEVHT1JJRVMpOwotCi0gICAgICAvLyBUaGUgYWN0aW9uIGNhbiBiZSBydW4gdW5kZXIgdGhlIGNvbnRleHQgb2YgZWl0aGVyIGEgcmVnaXN0cnkgb3IgYSBxdWVyeSBub2RlLgotICAgICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICBpZiAoIXJlZ0VsZW1lbnQuaXNMb2dnZWRJbigpKQotICAgICAgICByZWdFbGVtZW50LnBlcmZvcm1Mb2dpbihwdWJsaXNoVVJMLHVzZXJJZCxwYXNzd29yZCk7Ci0gICAgICBVRERJUHJveHkgcHJveHkgPSByZWdFbGVtZW50LmdldFByb3h5KCk7Ci0KLSAgICAgIFRNb2RlbCB0TW9kZWwgPSAobmV3IFVkZGk0akhlbHBlcigpKS5uZXdUTW9kZWwod3NkbFVSTCk7Ci0gICAgICB0TW9kZWwuc2V0TmFtZShuYW1lKTsKLSAgICAgIHRNb2RlbC5zZXREZXNjcmlwdGlvblZlY3RvcihkZXNjcmlwdGlvblZlY3Rvcik7Ci0gICAgICB0TW9kZWwuc2V0SWRlbnRpZmllckJhZyhpZGVudGlmaWVyQmFnKTsKLSAgICAgIAotICAgICAgLy8gVGhlIGNhdGVnb3J5IGJhZyBtYXkgY29udGFpbiB3c2RsU3BlYy4KLSAgICAgIENhdGVnb3J5QmFnIGRlZmF1bHRDYXRlZ29yeUJhZyA9IHRNb2RlbC5nZXRDYXRlZ29yeUJhZygpOwotICAgICAgVmVjdG9yIGRlZmF1bHRLZXllZFJlZmVyZW5jZVZlY3RvciA9IG51bGw7Ci0gICAgICBpZiAoZGVmYXVsdENhdGVnb3J5QmFnICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGlmIChjYXRlZ29yeUJhZyA9PSBudWxsKQotICAgICAgICAgIGNhdGVnb3J5QmFnID0gZGVmYXVsdENhdGVnb3J5QmFnOwotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBkZWZhdWx0S2V5ZWRSZWZlcmVuY2VWZWN0b3IgPSBkZWZhdWx0Q2F0ZWdvcnlCYWcuZ2V0S2V5ZWRSZWZlcmVuY2VWZWN0b3IoKTsKLSAgICAgICAgICBmb3IgKGludCBpPTA7aTxkZWZhdWx0S2V5ZWRSZWZlcmVuY2VWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBLZXllZFJlZmVyZW5jZSBrciA9IChLZXllZFJlZmVyZW5jZSlkZWZhdWx0S2V5ZWRSZWZlcmVuY2VWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgICAgICAgaWYgKGNhdGVnb3J5QmFnICE9IG51bGwpCi0gICAgICAgICAgICAgIGNhdGVnb3J5QmFnLmFkZChrcik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICB0TW9kZWwuc2V0Q2F0ZWdvcnlCYWcoY2F0ZWdvcnlCYWcpOwotCi0gICAgICBWZWN0b3IgdE1vZGVsVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgdE1vZGVsVmVjdG9yLmFkZCh0TW9kZWwpOwotICAgICAgdE1vZGVsID0gKFRNb2RlbClwcm94eS5zYXZlX3RNb2RlbChyZWdFbGVtZW50LmdldEF1dGhJbmZvU3RyaW5nKCksIHRNb2RlbFZlY3RvcikuZ2V0VE1vZGVsVmVjdG9yKCkuZ2V0KDApOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfT1VUUFVUX1NBVkVEX1RNT0RFTCwgdE1vZGVsKTsKLSAgICAgIGFkZFB1Ymxpc2hlZEl0ZW1Ob2RlKHRNb2RlbCxyZWdFbGVtZW50KTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19TRVJWSUNFX0lOVEVSRkFDRV9QVUJMSVNIRUQiLHRNb2RlbC5nZXROYW1lU3RyaW5nKCkpKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBjYXRjaCAoV1NETEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIldTRExFeGNlcHRpb24iKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlRyYW5zcG9ydEV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAJaWYoVURESUV4Y2VwdGlvbkhhbmRsZXIucmVxdWlyZXNSZXNldChlKSl7Ci0gICAgCQlSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAJCXJlZ0VsZW1lbnQuc2V0RGVmYXVsdHMoKTsKLSAgICAJfQotICAgIAltZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAJbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlVERElFeGNlcHRpb24iKTsKLSAgICAJbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIk1hbGZvcm1lZFVSTEV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdQdWJsaXNoU2VydmljZUludGVyZmFjZVNpbXBsZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTaW1wbGVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmE3ZmZlNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdQdWJsaXNoU2VydmljZUludGVyZmFjZVNpbXBsZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDQxOSAxODI4NjQgICBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS51dGlsLlVkZGk0akhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5WYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLnVkZGk0ai5VRERJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai50cmFuc3BvcnQuVHJhbnNwb3J0RXhjZXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTaW1wbGVBY3Rpb24gZXh0ZW5kcyBQdWJsaXNoQWN0aW9uCi17Ci0gIHB1YmxpYyBSZWdQdWJsaXNoU2VydmljZUludGVyZmFjZVNpbXBsZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVMpKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFX0lOVEVSRkFDRVMsU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TSU1QTEUpKTsgICAgCi0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzT3RoZXJzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcixGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSkgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgd3NkbFVSTCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dTRExfVVJMKTsKLSAgICBTdHJpbmcgbmFtZSA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSk7Ci0gICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9ERVNDUklQVElPTik7Ci0KLSAgICBib29sZWFuIGlucHV0c1ZhbGlkID0gdHJ1ZTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLQotICAgIGlmICh3c2RsVVJMICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9JTlRFUkZBQ0VfV1NETF9VUkwsd3NkbFVSTCk7Ci0KLSAgICBpZiAoIXN1YlF1ZXJ5SW5pdGlhdGVkXyAmJiAhVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nKHdzZGxVUkwpKQotICAgIHsKLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICBmb3JtVG9vbFBJLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9XU0RMX1VSTCk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfV1NETF9VUkwiKSk7Ci0gICAgfQotCi0gICAgaWYgKG5hbWUgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FLG5hbWUpOwotCi0gICAgaWYgKCFzdWJRdWVyeUluaXRpYXRlZF8gJiYgIVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZyhuYW1lKSkKLSAgICB7Ci0gICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgZm9ybVRvb2xQSS5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfTkFNRSIpKTsKLSAgICB9Ci0KLSAgICBpZiAoZGVzY3JpcHRpb24gIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9ERVNDUklQVElPTixkZXNjcmlwdGlvbik7Ci0KLSAgICByZXR1cm4gaW5wdXRzVmFsaWQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHBvcHVsYXRlUHJvcGVydHlUYWJsZShTdHJpbmcgd3NkbFVSTCwgVE1vZGVsIHRNb2RlbCkKLSAgewotICAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSB0cnVlOwotICAgIFN0cmluZyBuYW1lID0gdE1vZGVsLmdldE5hbWVTdHJpbmcoKTsKLSAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSB0TW9kZWwuZ2V0RGVmYXVsdERlc2NyaXB0aW9uU3RyaW5nKCk7Ci0gICAgaWYgKHdzZGxVUkwgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9XU0RMX1VSTCx3c2RsVVJMKTsKLSAgICBlbHNlCi0gICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgIAotICAgIGlmIChuYW1lICE9IG51bGwpIAotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUsbmFtZSk7Ci0gICAgZWxzZQotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAKLSAgICBpZiAoZGVzY3JpcHRpb24gIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9ERVNDUklQVElPTixkZXNjcmlwdGlvbik7Ci0gICAgZWxzZQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfSU5URVJGQUNFX0RFU0NSSVBUSU9OLCIiKTsKLSAgICByZXR1cm4gaW5wdXRzVmFsaWQ7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICBTdHJpbmcgdXNlcklkID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgIFN0cmluZyBwYXNzd29yZCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotICAgIFN0cmluZyB3c2RsVVJMID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9JTlRFUkZBQ0VfV1NETF9VUkwpOwotICAgIFN0cmluZyBuYW1lID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSk7Ci0gICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9JTlRFUkZBQ0VfREVTQ1JJUFRJT04pOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIFVERElQcm94eSBwcm94eSA9IHJlZ0VsZW1lbnQuZ2V0UHJveHkoKTsKLSAgICAgIGlmICghcmVnRWxlbWVudC5pc0xvZ2dlZEluKCkpCi0gICAgICAgIHJlZ0VsZW1lbnQucGVyZm9ybUxvZ2luKHB1Ymxpc2hVUkwsdXNlcklkLHBhc3N3b3JkKTsKLQotICAgICAgVE1vZGVsIHRNb2RlbCA9IChuZXcgVWRkaTRqSGVscGVyKCkpLm5ld1RNb2RlbCh3c2RsVVJMKTsKLSAgICAgIHRNb2RlbC5zZXROYW1lKG5hbWUpOwotICAgICAgdE1vZGVsLnNldERlZmF1bHREZXNjcmlwdGlvblN0cmluZyhkZXNjcmlwdGlvbik7Ci0KLSAgICAgIFZlY3RvciB0TW9kZWxWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICB0TW9kZWxWZWN0b3IuYWRkKHRNb2RlbCk7Ci0gICAgICB0TW9kZWwgPSAoVE1vZGVsKXByb3h5LnNhdmVfdE1vZGVsKHJlZ0VsZW1lbnQuZ2V0QXV0aEluZm9TdHJpbmcoKSwgdE1vZGVsVmVjdG9yKS5nZXRUTW9kZWxWZWN0b3IoKS5nZXQoMCk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9PVVRQVVRfU0FWRURfVE1PREVMLCB0TW9kZWwpOwotICAgICAgYWRkUHVibGlzaGVkSXRlbU5vZGUodE1vZGVsLHJlZ0VsZW1lbnQpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX1NFUlZJQ0VfSU5URVJGQUNFX1BVQkxJU0hFRCIsdE1vZGVsLmdldE5hbWVTdHJpbmcoKSkpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGNhdGNoIChXU0RMRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIldTRExFeGNlcHRpb24iKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJUcmFuc3BvcnRFeGNlcHRpb24iKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFVERElFeGNlcHRpb24gZSkKLSAgICB7ICAgCi0gICAgCWlmKFVERElFeGNlcHRpb25IYW5kbGVyLnJlcXVpcmVzUmVzZXQoZSkpCi0gICAgCQlyZWdFbGVtZW50LnNldERlZmF1bHRzKCk7Ci0gICAgCW1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgIAltZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVURESUV4Y2VwdGlvbiIpOwotICAgIAltZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIk1hbGZvcm1lZFVSTEV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdQdWJsaXNoU2VydmljZVNpbXBsZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVnUHVibGlzaFNlcnZpY2VTaW1wbGVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGFjNjYwOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZWdQdWJsaXNoU2VydmljZVNpbXBsZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDQxOSAxODI4NjQgICBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkudXRpbC5VZGRpNGpIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVmFsaWRhdG9yOwotaW1wb3J0IG9yZy51ZGRpNGouVURESUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLmNsaWVudC5VRERJUHJveHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5OYW1lOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYnVzaW5lc3MuQnVzaW5lc3NFbnRpdHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5zZXJ2aWNlLkJ1c2luZXNzU2VydmljZTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai50cmFuc3BvcnQuVHJhbnNwb3J0RXhjZXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgUmVnUHVibGlzaFNlcnZpY2VTaW1wbGVBY3Rpb24gZXh0ZW5kcyBQdWJsaXNoQWN0aW9uCi17Ci0gIHB1YmxpYyBSZWdQdWJsaXNoU2VydmljZVNpbXBsZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUykpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VTLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0lNUExFKSk7ICAgIAotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc090aGVycyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIsRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7ICAgIAotICAgIFN0cmluZyBidXNOb2RlSWRzID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLk5PREVJRF9CVVNJTkVTUyk7Ci0gICAgU3RyaW5nIHdzZGxVUkwgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XU0RMX1VSTCk7Ci0gICAgU3RyaW5nIG5hbWUgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfTkFNRSk7Ci0gICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0RFU0NSSVBUSU9OKTsKLQotICAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSB0cnVlOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotCi0gICAgaWYgKGJ1c05vZGVJZHMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBWZWN0b3Igc2VydmljZUJ1c2luZXNzID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfQlVTSU5FU1MpOwotICAgICAgaWYgKHNlcnZpY2VCdXNpbmVzcyA9PSBudWxsKQotICAgICAgICBzZXJ2aWNlQnVzaW5lc3MgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBlbHNlCi0gICAgICAgIHNlcnZpY2VCdXNpbmVzcy5yZW1vdmVBbGxFbGVtZW50cygpOwotICAgICAgVmVjdG9yIHNlcnZpY2VCdXNpbmVzc0NvcHkgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9CVVNJTkVTU19DT1BZKTsKLSAgICAgIC8vIFRoZSBicm93c2VyIHdpbGwgZW5mb3JjZSB0aGUgcnVsZSBvZiBoYXZpbmcgb25seSBvbmUgYnVzaW5lc3MgaW4gdGhpcyBsaXN0LgotICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpc2VydmljZUJ1c2luZXNzQ29weS5lbGVtZW50QXQoMCk7Ci0gICAgICBzZXJ2aWNlQnVzaW5lc3MuYWRkRWxlbWVudChsaXN0RWxlbWVudCk7Ci0gICAgICBCdXNpbmVzc0VudGl0eSBiZSA9IChCdXNpbmVzc0VudGl0eSlsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0JVU0lORVNTLHNlcnZpY2VCdXNpbmVzcyk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9TRVJWSUNFX1BST1ZJREVSLGJlKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfQlVTSU5FU1NfS0VZLGJlLmdldEJ1c2luZXNzS2V5KCkpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9CVVNJTkVTUyk7Ci0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX1NFUlZJQ0VfUFJPVklERVIpOwotICAgICAgaWYgKCFzdWJRdWVyeUluaXRpYXRlZF8pCi0gICAgICB7Ci0gICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIGZvcm1Ub29sUEkuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfQlVTSU5FU1MpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfQlVTSU5FU1MiKSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHdzZGxVUkwgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dTRExfVVJMLHdzZGxVUkwpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfV1NETF9VUkwsd3NkbFVSTCk7Ci0gICAgfQotCi0gICAgaWYgKCFzdWJRdWVyeUluaXRpYXRlZF8gJiYgIVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZyh3c2RsVVJMKSkKLSAgICB7Ci0gICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgZm9ybVRvb2xQSS5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9XU0RMX1VSTCk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfV1NETF9VUkwiKSk7Ci0gICAgfQotCi0gICAgaWYgKG5hbWUgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX05BTUUsbmFtZSk7Ci0KLSAgICBpZiAoIXN1YlF1ZXJ5SW5pdGlhdGVkXyAmJiAhVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nKG5hbWUpKQotICAgIHsKLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICBmb3JtVG9vbFBJLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX05BTUUpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX05BTUUiKSk7Ci0gICAgfQotCi0gICAgaWYgKGRlc2NyaXB0aW9uICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9ERVNDUklQVElPTixkZXNjcmlwdGlvbik7Ci0KLSAgICByZXR1cm4gaW5wdXRzVmFsaWQ7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICBTdHJpbmcgdXNlcklkID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgIFN0cmluZyBwYXNzd29yZCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotICAgIEJ1c2luZXNzRW50aXR5IGJlID0gKEJ1c2luZXNzRW50aXR5KXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX1NFUlZJQ0VfUFJPVklERVIpOwotICAgIFN0cmluZyBidXNpbmVzc0tleSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9CVVNJTkVTU19LRVkpOwotICAgIFN0cmluZyB3c2RsVVJMID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9XU0RMX1VSTCk7Ci0gICAgU3RyaW5nIG5hbWUgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX05BTUUpOwotICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfREVTQ1JJUFRJT04pOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIFVERElQcm94eSBwcm94eSA9IHJlZ0VsZW1lbnQuZ2V0UHJveHkoKTsKLSAgICAgIGlmICghcmVnRWxlbWVudC5pc0xvZ2dlZEluKCkpCi0gICAgICAgIHJlZ0VsZW1lbnQucGVyZm9ybUxvZ2luKHB1Ymxpc2hVUkwsdXNlcklkLHBhc3N3b3JkKTsKLSAgICAgIAotICAgICAgVWRkaTRqSGVscGVyIHVkZGk0akhlbHBlciA9IG5ldyBVZGRpNGpIZWxwZXIoKTsKLSAgICAgIERlZmluaXRpb24gZGVmID0gdWRkaTRqSGVscGVyLmdldFdTRExEZWZpbml0aW9uKHdzZGxVUkwpOwotICAgICAgUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTaW1wbGVBY3Rpb24gcmVnUHVibGlzaFNJQWN0aW9uID0gbmV3IFJlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2ltcGxlQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICAgIGludCBjdXJyZW50Tm9kZUlkID0gZ2V0U2VsZWN0ZWROYXZpZ2F0b3JOb2RlKCkuZ2V0Tm9kZUlkKCk7Ci0gICAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHJlZ05vZGVfLmdldE5vZGVNYW5hZ2VyKCk7Ci0KLSAgICAgIEhhc2h0YWJsZSB0TW9kZWxzVGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgICBUTW9kZWxbXSB0TW9kZWxzID0gbnVsbDsKLSAgICAgIGlmICh1ZGRpNGpIZWxwZXIuaXNNb25vbGl0aGljV1NETChkZWYpKQotICAgICAgewotICAgICAgICB0TW9kZWxzID0gbmV3IFRNb2RlbFsxXTsKLSAgICAgICAgdE1vZGVsc1swXSA9IHVkZGk0akhlbHBlci5uZXdUTW9kZWwod3NkbFVSTCwgZGVmKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nW10gaW1wb3J0cyA9IHVkZGk0akhlbHBlci5nZXRJbXBvcnRzKGRlZiwgd3NkbFVSTCk7Ci0gICAgICAgIHRNb2RlbHMgPSBuZXcgVE1vZGVsW2ltcG9ydHMubGVuZ3RoXTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0TW9kZWxzLmxlbmd0aDsgaSsrKQotICAgICAgICAgIHRNb2RlbHNbaV0gPSB1ZGRpNGpIZWxwZXIubmV3VE1vZGVsKGltcG9ydHNbaV0pOwotICAgICAgfQotCi0gICAgICBpZiAodE1vZGVscyAhPSBudWxsKQotICAgICAgewotICAgICAgICBmb3IgKGludCBpPTA7aTx0TW9kZWxzLmxlbmd0aDtpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBib29sZWFuIGlucHV0c1ZhbGlkID0gcmVnUHVibGlzaFNJQWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZSh1ZGRpNGpIZWxwZXIuZ2V0V1NETCh0TW9kZWxzW2ldKSwgdE1vZGVsc1tpXSk7Ci0gICAgICAgICAgaWYgKGlucHV0c1ZhbGlkKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJlZ1B1Ymxpc2hTSUFjdGlvbi5ydW4oKTsKLSAgICAgICAgICAgIE9iamVjdCBzYXZlZFRNb2RlbCA9IHJlZ1B1Ymxpc2hTSUFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCkuZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfT1VUUFVUX1NBVkVEX1RNT0RFTCk7Ci0gICAgICAgICAgICBpZiAoc2F2ZWRUTW9kZWwgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgdE1vZGVsc1RhYmxlLnB1dCgoKFRNb2RlbClzYXZlZFRNb2RlbCkuZ2V0TmFtZVN0cmluZygpLCBzYXZlZFRNb2RlbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBSZXNlbGVjdCB0aGUgY3VycmVudCBub2RlLgotICAgICAgICAgICAgbm9kZU1hbmFnZXIuc2V0U2VsZWN0ZWROb2RlSWQoY3VycmVudE5vZGVJZCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIEJ1c2luZXNzU2VydmljZSBicyA9IHVkZGk0akhlbHBlci5uZXdCdXNpbmVzc1NlcnZpY2Uod3NkbFVSTCwgZGVmLCB0TW9kZWxzVGFibGUpOwotICAgICAgaWYgKGJlICE9IG51bGwpCi0gICAgICAgIGJzLnNldEJ1c2luZXNzS2V5KGJlLmdldEJ1c2luZXNzS2V5KCkpOwotICAgICAgZWxzZSBpZiAoYnVzaW5lc3NLZXkgIT0gbnVsbCkKLSAgICAgICAgYnMuc2V0QnVzaW5lc3NLZXkoYnVzaW5lc3NLZXkpOwotICAgICAgYnMuc2V0RGVmYXVsdE5hbWUobmV3IE5hbWUobmFtZSkpOwotICAgICAgYnMuc2V0RGVmYXVsdERlc2NyaXB0aW9uU3RyaW5nKGRlc2NyaXB0aW9uKTsKLSAgICAgIFZlY3RvciBic1ZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGJzVmVjdG9yLmFkZChicyk7Ci0gICAgICByZWdFbGVtZW50LmhhbmRsZVByZUludm9jYXRpb24oYnMpOwotICAgICAgYnMgPSAoQnVzaW5lc3NTZXJ2aWNlKXByb3h5LnNhdmVfc2VydmljZShyZWdFbGVtZW50LmdldEF1dGhJbmZvU3RyaW5nKCksIGJzVmVjdG9yKS5nZXRCdXNpbmVzc1NlcnZpY2VWZWN0b3IoKS5nZXQoMCk7Ci0gICAgICBhZGRQdWJsaXNoZWRJdGVtTm9kZShicyxyZWdFbGVtZW50KTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19TRVJWSUNFX1BVQkxJU0hFRCIsYnMuZ2V0RGVmYXVsdE5hbWVTdHJpbmcoKSkpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGNhdGNoIChXU0RMRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiV1NETEV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVHJhbnNwb3J0RXhjZXB0aW9uIik7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICAgIGNhdGNoIChVRERJRXhjZXB0aW9uIGUpCi0gICAgewotICAgIAlpZihVRERJRXhjZXB0aW9uSGFuZGxlci5yZXF1aXJlc1Jlc2V0KGUpKQotICAgIAkJcmVnRWxlbWVudC5zZXREZWZhdWx0cygpOwotICAgIAltZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAJbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlVERElFeGNlcHRpb24iKTsKLSAgICAJbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIk1hbGZvcm1lZFVSTEV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZW1vdmVQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZW1vdmVQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmZWM0OTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVtb3ZlUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuQnVzaW5lc3NFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5QdWJsaXNoZXJBc3NlcnRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlZhbGlkYXRvcjsKLWltcG9ydCBvcmcudWRkaTRqLlVERElFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai5jbGllbnQuVURESVByb3h5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYXNzZXJ0aW9uLlB1Ymxpc2hlckFzc2VydGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLkNvbXBsZXRpb25TdGF0dXM7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5EaXNwb3NpdGlvblJlcG9ydDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlJlc3VsdDsKLWltcG9ydCBvcmcudWRkaTRqLnRyYW5zcG9ydC5UcmFuc3BvcnRFeGNlcHRpb247Ci0KLXB1YmxpYyBjbGFzcyBSZW1vdmVQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uIGV4dGVuZHMgQ29tbW9uUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbgotewotICBwdWJsaWMgUmVtb3ZlUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCBib29sZWFuIHByb2Nlc3NQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBpZiAocmVnaXN0cnlOb2RlXyA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHRydWU7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgRm9ybVRvb2wgZm9ybVRvb2wgPSBnZXRTZWxlY3RlZEZvcm1Ub29sKCk7Ci0KLSAgICAvLyBpZHMgZnJvbSB1ZGRpT2JqZWN0c190YWJsZQotICAgIFN0cmluZ1tdIHNlbGVjdGVkQnVzSWRzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hFUl9BU1NFUlRJT05TX1NFTEVDVEVEX0JVU19JRCk7Ci0gICAgaWYgKHNlbGVjdGVkQnVzSWRzICE9IG51bGwgJiYgc2VsZWN0ZWRCdXNJZHMubGVuZ3RoID4gMCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hFUl9BU1NFUlRJT05TX1NFTEVDVEVEX0JVU19JRCwgc2VsZWN0ZWRCdXNJZHMpOwotICAgIC8vIFN5bmNocm9uaXplIGNsaWVudCB2aWV3IGFuZCBzZXJ2ZXIgbW9kZWwgKHVkZGlPYmplY3RfdGFibGUuanNwKQotICAgIHN5bmNocm9uaXplVURESU9iamVjdFRhYmxlKCk7Ci0KLSAgICAvLyBpZiBub3QgeWV0IGxvZ2dlZCBpbiwgdmFsaWRhdGUgdGhlIHBhcmFtZXRlcnMgbmVlZGVkIHRvIGxvZyBpbgotICAgIGlmICghaXNMb2dnZWRJbl8pIHsKLSAgICAgIFN0cmluZyBwdWJsaXNoVVJMID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICAgIFN0cmluZyB1c2VySUQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICAgIFN0cmluZyBwYXNzd29yZCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCk7Ci0KLSAgICAgIGlmIChwdWJsaXNoVVJMICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMLHB1Ymxpc2hVUkwpOwotICAgICAgICBmb3JtVG9vbC5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMLHB1Ymxpc2hVUkwpOwotICAgICAgfQotICAKLSAgICAgIGlmICghVmFsaWRhdG9yLnZhbGlkYXRlVVJMKHB1Ymxpc2hVUkwpKQotICAgICAgewotICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICBmb3JtVG9vbC5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9QVUJMSVNIX1VSTCIpKTsKLSAgICAgIH0KLQotICAgICAgaWYgKHVzZXJJRCE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCx1c2VySUQpOwotICAgICAgICBmb3JtVG9vbC5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCx1c2VySUQpOwotICAgICAgfQotICAKLSAgICAgIGlmICghVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nKHVzZXJJRCkpCi0gICAgICB7Ci0gICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIGZvcm1Ub29sLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9VU0VSSUQiKSk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChwYXNzd29yZCAhPSBudWxsKQotICAgICAgewotICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCxwYXNzd29yZCk7Ci0gICAgICAgIGZvcm1Ub29sLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQscGFzc3dvcmQpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIGlkcyBmcm9tIHB1Ymxpc2hlciBhc3NlcnRpb24gdGFibGUKLSAgICBTdHJpbmdbXSBwdWJBc3NlcnRpb25zVmlld0lkcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5QVUJMSVNIRVJfQVNTRVJUSU9OU19WSUVXSUQpOwotICAgIGlmIChwdWJBc3NlcnRpb25zVmlld0lkcyA9PSBudWxsIHx8IHB1YkFzc2VydGlvbnNWaWV3SWRzLmxlbmd0aCA9PSAwKQotICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICBlbHNlCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5QVUJMSVNIRVJfQVNTRVJUSU9OU19WSUVXSUQsIHB1YkFzc2VydGlvbnNWaWV3SWRzKTsKLQotICAgIHJldHVybiBpbnB1dHNWYWxpZDsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBpZiAocmVnaXN0cnlOb2RlXyA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ2lzdHJ5RWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnaXN0cnlOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLQotICAgIGlmICghKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEJ1c2luZXNzRWxlbWVudCkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBpZiBub3QgeWV0IGxvZ2dlZCBpbiwgbG9nIGluIGZpcnN0Ci0gICAgaWYgKCFpc0xvZ2dlZEluXykgewotICAgICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICAgIFN0cmluZyB1c2VySUQgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICAgICBTdHJpbmcgcGFzc3dvcmQgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEKTsKLQotICAgICAgdHJ5IHsKLSAgICAgICAgcmVnaXN0cnlFbGVtZW50LnBlcmZvcm1Mb2dpbihwdWJsaXNoVVJMLCB1c2VySUQsIHBhc3N3b3JkKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChUcmFuc3BvcnRFeGNlcHRpb24gdGUpIHsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJUcmFuc3BvcnRFeGNlcHRpb24iKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgY2F0Y2ggKFVERElFeGNlcHRpb24gdWRkaWUpIHsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJVRERJRXhjZXB0aW9uIik7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGllLnRvU3RyaW5nKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIG1lKSB7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiTWFsZm9ybWVkVVJMRXhjZXB0aW9uIik7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKG1lLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0gICAgICAKLSAgICB9Ci0KLSAgICBVRERJUHJveHkgcHJveHkgPSByZWdpc3RyeUVsZW1lbnQuZ2V0UHJveHkoKTsKLSAgICByZWdpc3RyeUVsZW1lbnQuZ2V0VXNlcklkKCk7Ci0gICAgcmVnaXN0cnlFbGVtZW50LmdldENyZWQoKTsKLSAgICBCdXNpbmVzc0VsZW1lbnQgYnVzRWxlbWVudCA9IChCdXNpbmVzc0VsZW1lbnQpc2VsZWN0ZWRFbGVtZW50OwotICAgIExpc3RNYW5hZ2VyIHB1YkFzc2VydGlvbnMgPSBidXNFbGVtZW50LmdldFB1Ymxpc2hlckFzc2VydGlvbnMoKTsKLQotICAgIC8vIGRldGVybWluZSB3aGV0aGVyIHRoaXMgaXMgYSBvd25lZCBidXNpbmVzcwotICAgIC8vIGlmIG5vdCwgdGhlIEFkZFB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24gY2Fubm90IGJlIHBlcmZvcm1lZAotICAgIGlmICghaXNCdXNpbmVzc093bmVkKGJ1c0VsZW1lbnQpKSB7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9UX09XTkVEX0JVU0lORVNTIikpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgdHJ5IHsKLSAgICAgIFN0cmluZ1tdIHB1YkFzc2VydGlvblZpZXdJZHMgPSAoU3RyaW5nW10pcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUFVCTElTSEVSX0FTU0VSVElPTlNfVklFV0lEKTsKLSAgICAgIFZlY3RvciBwdWJBc3NlcnRpb25WZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBib29sZWFuIHJlZnJlc2hSZXF1aXJlZCA9IGZhbHNlOwotCi0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHB1YkFzc2VydGlvblZpZXdJZHMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgaW50IHZpZXdJRCA9IEludGVnZXIucGFyc2VJbnQocHViQXNzZXJ0aW9uVmlld0lkc1tpXSk7Ci0gICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gcHViQXNzZXJ0aW9ucy5nZXRFbGVtZW50V2l0aFZpZXdJZCh2aWV3SUQpOwotICAgICAgICBQdWJsaXNoZXJBc3NlcnRpb25FbGVtZW50IHB1YkFzc2VydGlvbkVsZW1lbnQgPSAoUHVibGlzaGVyQXNzZXJ0aW9uRWxlbWVudClsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICAgUHVibGlzaGVyQXNzZXJ0aW9uIHB1YkFzc2VydGlvbiA9IHB1YkFzc2VydGlvbkVsZW1lbnQuZ2V0UHVibGlzaGVyQXNzZXJ0aW9uKCk7Ci0gICAgICAgIHB1YkFzc2VydGlvblZlY3Rvci5hZGQocHViQXNzZXJ0aW9uKTsKLSAgICAgICAgaWYgKHB1YkFzc2VydGlvbkVsZW1lbnQuZ2V0U3RhdHVzKCkuZXF1YWxzKENvbXBsZXRpb25TdGF0dXMuQ09NUExFVEUpKQotICAgICAgICAgIHJlZnJlc2hSZXF1aXJlZCA9IHRydWU7Ci0gICAgICB9Ci0KLSAgICAgIERpc3Bvc2l0aW9uUmVwb3J0IHJlcG9ydCA9IHByb3h5LmRlbGV0ZV9wdWJsaXNoZXJBc3NlcnRpb25zKHJlZ2lzdHJ5RWxlbWVudC5nZXRBdXRoSW5mb1N0cmluZygpLCBwdWJBc3NlcnRpb25WZWN0b3IpOwotICAgICAgLy9yZXBvcnQgc3RhdHVzCi0JICBWZWN0b3IgcmVwb3J0RXJySW5mbyA9IHJlcG9ydC5nZXRSZXN1bHRWZWN0b3IoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVwb3J0RXJySW5mby5zaXplKCk7IGkrKykgewotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgoKFJlc3VsdCkgcmVwb3J0RXJySW5mby5nZXQoaSkpLmdldEVyckluZm8oKS5nZXRUZXh0KCkpOwotICAgICAgfQotCi0gICAgICAvLyByZWZyZXNoIGlzIHJlcXVpcmVkLCByZWZyZXNoIHRoZSB3aG9sZSBwdWJsaXNoZXIgYXNzZXJ0aW9uIHRhYmxlCi0gICAgICBpZiAocmVmcmVzaFJlcXVpcmVkKSB7Ci0gICAgICAgIFNob3dQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uIHNob3dQQUFjdGlvbiA9IG5ldyBTaG93UHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgICAgIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlID0gc2hvd1BBQWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICAgICAgT2JqZWN0IGlkcyA9IHByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hFUl9BU1NFUlRJT05TX1NFTEVDVEVEX0JVU19JRCk7Ci0gICAgICAgIGlmIChpZHMgIT0gbnVsbCkKLSAgICAgICAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hFUl9BU1NFUlRJT05TX1NFTEVDVEVEX0JVU19JRCwgaWRzKTsKLSAgICAgICAgc2hvd1BBQWN0aW9uLnJ1bigpOwotICAgICAgfQotICAgICAgLy8gcmVmcmVzaCBpcyBub3QgcmVxdWlyZWQsIGRlbGV0ZSB0aGUgc2VsZWN0ZWQgcHVibGlzaGVyIGFzc2VydGlvbiBlbGVtZW50cwotICAgICAgZWxzZSB7Ci0gICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgcHViQXNzZXJ0aW9uVmlld0lkcy5sZW5ndGg7IGsrKykgewotICAgICAgICAgIHB1YkFzc2VydGlvbnMucmVtb3ZlRWxlbWVudFdpdGhWaWV3SWQoSW50ZWdlci5wYXJzZUludChwdWJBc3NlcnRpb25WaWV3SWRzW2tdKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgcmV0dXJuIHJlcG9ydC5zdWNjZXNzKCk7Ci0gICAgfQotICAgIGNhdGNoIChVRERJRXhjZXB0aW9uIHVkZGllKSB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJVRERJRXhjZXB0aW9uIik7Ci0gICAgICBEaXNwb3NpdGlvblJlcG9ydCByZXBvcnQgPSB1ZGRpZS5nZXREaXNwb3NpdGlvblJlcG9ydCgpOwotCSAgVmVjdG9yIHJlcG9ydEVyckluZm8gPSByZXBvcnQuZ2V0UmVzdWx0VmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlcG9ydEVyckluZm8uc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoKChSZXN1bHQpIHJlcG9ydEVyckluZm8uZ2V0KGkpKS5nZXRFcnJJbmZvKCkuZ2V0VGV4dCgpKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJFeGNlcHRpb24iKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1JlbW92ZVN1YlF1ZXJ5SXRlbUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVtb3ZlU3ViUXVlcnlJdGVtQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5ODRlMjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvUmVtb3ZlU3ViUXVlcnlJdGVtQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotCi1wdWJsaWMgY2xhc3MgUmVtb3ZlU3ViUXVlcnlJdGVtQWN0aW9uIGV4dGVuZHMgQWN0aW9uCi17Ci0gIHByaXZhdGUgQ29udHJvbGxlciBjb250cm9sbGVyXzsKLSAgCi0gIHB1YmxpYyBSZW1vdmVTdWJRdWVyeUl0ZW1BY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgICBjb250cm9sbGVyXyA9IGNvbnRyb2xsZXI7Ci0gIH0KLSAgCi0gIC8vIHVkZGkvYWN0aW9ucy9SZW1vdmVTdWJRdWVyeUl0ZW1BY3Rpb25KU1AuanNwP3N1YlF1ZXJ5S2V5PS4uLiZzdWJRdWVyeUxpc3RLZXk9Li4uJnN1YlF1ZXJ5TGlzdEl0ZW1JZD0uLi4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGluayhTdHJpbmcgc3ViUXVlcnlLZXksU3RyaW5nIHN1YlF1ZXJ5TGlzdEtleSxpbnQgc3ViUXVlcnlMaXN0SXRlbUlkKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ1ZGRpL2FjdGlvbnMvUmVtb3ZlU3ViUXVlcnlJdGVtQWN0aW9uSlNQLmpzcD8iKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSkuYXBwZW5kKCc9JykuYXBwZW5kKHN1YlF1ZXJ5S2V5KTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpLmFwcGVuZChVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0xJU1RfS0VZKS5hcHBlbmQoJz0nKS5hcHBlbmQoc3ViUXVlcnlMaXN0S2V5KTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpLmFwcGVuZChVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0xJU1RfSVRFTUlEKS5hcHBlbmQoJz0nKS5hcHBlbmQoc3ViUXVlcnlMaXN0SXRlbUlkKTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBwb3B1bGF0ZVByb3BlcnR5VGFibGUoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpCi0gIHsKLSAgICBTdHJpbmcgc3ViUXVlcnlLZXkgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSk7Ci0gICAgU3RyaW5nIHN1YlF1ZXJ5TGlzdEtleSA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfTElTVF9LRVkpOwotICAgIFN0cmluZyBzdWJRdWVyeUxpc3RJdGVtSWQgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0xJU1RfSVRFTUlEKTsKLSAgICAKLSAgICBpZiAoc3ViUXVlcnlLZXkgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSxzdWJRdWVyeUtleSk7Ci0gICAgICAKLSAgICBpZiAoc3ViUXVlcnlMaXN0S2V5ICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9MSVNUX0tFWSxzdWJRdWVyeUxpc3RLZXkpOwotICAgICAgCi0gICAgaWYgKHN1YlF1ZXJ5TGlzdEl0ZW1JZCAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfTElTVF9JVEVNSUQsc3ViUXVlcnlMaXN0SXRlbUlkKTsKLSAgICAgIAotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9MSVNUX0tFWSk7Ci0gICAgaW50IHN1YlF1ZXJ5TGlzdEl0ZW1JZCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9MSVNUX0lURU1JRCkpOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgICBOb2RlIGN1cnJlbnROb2RlID0gbmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBGb3JtVG9vbCBmb3JtVG9vbCA9IChGb3JtVG9vbCkoY3VycmVudE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotICAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJID0gKChNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSlmb3JtVG9vbCkuZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZKSk7Ci0gICAgVmVjdG9yIGxpc3QgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9MSVNUX0tFWSkpOwotICAgIGxpc3QucmVtb3ZlRWxlbWVudEF0KHN1YlF1ZXJ5TGlzdEl0ZW1JZCk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1Jlc2l6ZVVERElGcmFtZXNBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1Jlc2l6ZVVERElGcmFtZXNBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWVkZTM4Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9SZXNpemVVRERJRnJhbWVzQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLlJlc2l6ZUZyYW1lc0FjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUZyYW1lTmFtZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotCi1wdWJsaWMgY2xhc3MgUmVzaXplVURESUZyYW1lc0FjdGlvbiBleHRlbmRzIFJlc2l6ZUZyYW1lc0FjdGlvbgotewotICBwdWJsaWMgUmVzaXplVURESUZyYW1lc0FjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc090aGVycyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5GUkFNRVNFVF9DT0xTX1BFUlNQRUNUSVZFX0NPTlRFTlQpOwotICAgIFN0cmluZyBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLkZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIpOwotICAgIGlmIChwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMgIT0gbnVsbCAmJiBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzICE9IG51bGwpCi0gICAgewotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuRlJBTUVTRVRfQ09MU19QRVJTUEVDVElWRV9DT05URU5ULHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5GUkFNRVNFVF9ST1dTX0FDVElPTlNfQ09OVEFJTkVSLGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIC8vIFNhdmUgdGhlIGN1cnJlbnQgZnJhbWVzZXQgc2l6ZXMuCi0gICAgU3RyaW5nIGZyYW1lTmFtZSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5GUkFNRV9OQU1FKTsKLSAgICBTdHJpbmcgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5GUkFNRVNFVF9DT0xTX1BFUlNQRUNUSVZFX0NPTlRFTlQpOwotICAgIFN0cmluZyBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5GUkFNRVNFVF9ST1dTX0FDVElPTlNfQ09OVEFJTkVSKTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgCi0gICAgLy8gU2V0IHRoZSBuZXcgZnJhbWVzZXQgc2l6ZXMuCi0gICAgaWYgKGZyYW1lTmFtZS5lcXVhbHMoVURESUZyYW1lTmFtZXMuTkFWSUdBVE9SX0NPTlRBSU5FUikpCi0gICAgewotICAgICAgdWRkaVBlcnNwZWN0aXZlLnNldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyk7Ci0gICAgICB1ZGRpUGVyc3BlY3RpdmUuc2V0U2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MpOwotICAgICAgaWYgKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scy5zdGFydHNXaXRoKCIxMDAlIikpCi0gICAgICB7Ci0gICAgICAgIC8vIFJlc3RvcmUuCi0gICAgICAgIHVkZGlQZXJzcGVjdGl2ZS5zZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHModWRkaVBlcnNwZWN0aXZlLmdldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCkpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBNYXhpbWl6ZS4KLSAgICAgICAgdWRkaVBlcnNwZWN0aXZlLnNldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyk7Ci0gICAgICAgIHVkZGlQZXJzcGVjdGl2ZS5zZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoIjEwMCUsMCUiKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAoZnJhbWVOYW1lLmVxdWFscyhVRERJRnJhbWVOYW1lcy5QUk9QRVJUSUVTX0NPTlRBSU5FUikpCi0gICAgewotICAgICAgaWYgKGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3Muc3RhcnRzV2l0aCgiMTAwJSIpKQotICAgICAgewotICAgICAgICBpZiAocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzLmVuZHNXaXRoKCIxMDAlIikpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBSZXN0b3JlLgotICAgICAgICAgIHVkZGlQZXJzcGVjdGl2ZS5zZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHModWRkaVBlcnNwZWN0aXZlLmdldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCkpOwotICAgICAgICAgIHVkZGlQZXJzcGVjdGl2ZS5zZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKHVkZGlQZXJzcGVjdGl2ZS5nZXRTYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgLy8gTWF4aW1pemUuCi0gICAgICAgICAgdWRkaVBlcnNwZWN0aXZlLnNldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyk7Ci0gICAgICAgICAgdWRkaVBlcnNwZWN0aXZlLnNldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKTsKLSAgICAgICAgICB1ZGRpUGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCIwJSwxMDAlIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gTWF4aW1pemUuCi0gICAgICAgIHVkZGlQZXJzcGVjdGl2ZS5zZXRTYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyk7Ci0gICAgICAgIHVkZGlQZXJzcGVjdGl2ZS5zZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKCIxMDAlLDAlIik7Ci0gICAgICAgIGlmICghcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzLmVuZHNXaXRoKCIxMDAlIikpCi0gICAgICAgIHsKLSAgICAgICAgICB1ZGRpUGVyc3BlY3RpdmUuc2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKTsKLSAgICAgICAgICB1ZGRpUGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCIwJSwxMDAlIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAoZnJhbWVOYW1lLmVxdWFscyhVRERJRnJhbWVOYW1lcy5TVEFUVVNfQ09OVEFJTkVSKSkKLSAgICB7Ci0gICAgICBpZiAoYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cy5lbmRzV2l0aCgiMTAwJSIpKQotICAgICAgewotICAgICAgICBpZiAocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzLmVuZHNXaXRoKCIxMDAlIikpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBSZXN0b3JlLgotICAgICAgICAgIHVkZGlQZXJzcGVjdGl2ZS5zZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHModWRkaVBlcnNwZWN0aXZlLmdldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCkpOwotICAgICAgICAgIHVkZGlQZXJzcGVjdGl2ZS5zZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKHVkZGlQZXJzcGVjdGl2ZS5nZXRTYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgLy8gTWF4aW1pemUuCi0gICAgICAgICAgdWRkaVBlcnNwZWN0aXZlLnNldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyk7Ci0gICAgICAgICAgdWRkaVBlcnNwZWN0aXZlLnNldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKTsKLSAgICAgICAgICB1ZGRpUGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCIwJSwxMDAlIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gTWF4aW1pemUuCi0gICAgICAgIHVkZGlQZXJzcGVjdGl2ZS5zZXRTYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyk7Ci0gICAgICAgIHVkZGlQZXJzcGVjdGl2ZS5zZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKCIwJSwxMDAlIik7Ci0gICAgICAgIGlmICghcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzLmVuZHNXaXRoKCIxMDAlIikpCi0gICAgICAgIHsKLSAgICAgICAgICB1ZGRpUGVyc3BlY3RpdmUuc2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKTsKLSAgICAgICAgICB1ZGRpUGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCIwJSwxMDAlIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1NlbGVjdENhdGVnb3J5Tm9kZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvU2VsZWN0Q2F0ZWdvcnlOb2RlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhMTY1ZjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvU2VsZWN0Q2F0ZWdvcnlOb2RlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuU2VsZWN0Tm9kZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLQotcHVibGljIGNsYXNzIFNlbGVjdENhdGVnb3J5Tm9kZUFjdGlvbiBleHRlbmRzIFNlbGVjdE5vZGVBY3Rpb24KLXsKLSAgcHVibGljIFNlbGVjdENhdGVnb3J5Tm9kZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyLGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCkuZ2V0Q2F0ZWdvcnlNYW5hZ2VyKCkpOwotICB9Ci0KLSAgLy8gdWRkaS9hY3Rpb25zL1NlbGVjdENhdGVnb3J5Tm9kZUFjdGlvbi5qc3A/c2Vzc2lvbklkPS4uLiZub2RlSWQ9Li4uCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoU3RyaW5nIHNlc3Npb25JZCxpbnQgbm9kZUlkKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ1ZGRpL2FjdGlvbnMvU2VsZWN0Q2F0ZWdvcnlOb2RlQWN0aW9uSlNQLmpzcD8iKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuU0VTU0lPTklEKS5hcHBlbmQoJz0nKS5hcHBlbmQoc2Vzc2lvbklkKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKS5hcHBlbmQoJz0nKS5hcHBlbmQobm9kZUlkKTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmtGb3JIaXN0b3J5KCkKLSAgewotICAgIC8vIERvIG5vdCBhZGQgdGhpcyBhY3Rpb24gdG8gdGhlIGhpc3RvcnkuCi0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBpbnQgbm9kZUlkID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgcGVyZm9ybUJhc2VBY3Rpb24obm9kZUlkKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRWYXIoKQotICB7Ci0gICAgcmV0dXJuICJjYXRlZ29yeUJyb3dzZXJXaW5kb3dDb250ZW50IjsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRQYWdlKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyVmFyKCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyUGFnZSgpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGludCBnZXRQZXJzcGVjdGl2ZUlkKCkKLSAgewotICAgIHJldHVybiBBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfVURESTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvU2VsZWN0RmluZFRvb2xBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1NlbGVjdEZpbmRUb29sQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmZTQ3NzQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvU2VsZWN0RmluZFRvb2xBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci0KLXB1YmxpYyBjbGFzcyBTZWxlY3RGaW5kVG9vbEFjdGlvbiBleHRlbmRzIFNlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uCi17Ci0gIHByb3RlY3RlZCBTdHJpbmcgc3ViUXVlcnlLZXlfOwotICBwcm90ZWN0ZWQgYm9vbGVhbiB0b29sTGlua0NoYW5nZWRfOwotCi0gIHB1YmxpYyBTZWxlY3RGaW5kVG9vbEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICBzdWJRdWVyeUtleV8gPSBudWxsOwotICAgIHRvb2xMaW5rQ2hhbmdlZF8gPSBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHByb2Nlc3NMaW5rUGFyYW1ldGVycyhIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCkKLSAgewotICAgIGJvb2xlYW4gcmVzdWx0ID0gc3VwZXIucHJvY2Vzc0xpbmtQYXJhbWV0ZXJzKHJlcXVlc3QpOwotICAgIHN1YlF1ZXJ5S2V5XyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZKTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgLy8gL3VkZGkvYWN0aW9ucy9TZWxlY3RGaW5kVG9vbEFjdGlvbi5qc3A/bm9kZUlkPS4uLiZ0b29sSWQ9Li4uPCZ2aWV3SWQ9Li4uJnZpZXdUb29sSWQ9Li4uPiZzdWJRdWVyeUtleT0uLi48JmlzSGlzdG9yeT0xPgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSWQsaW50IHRvb2xJZCxpbnQgdmlld0lkLGludCB2aWV3VG9vbElkLFN0cmluZyBzdWJRdWVyeUtleSxib29sZWFuIGZvckhpc3RvcnkpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoInVkZGkvYWN0aW9ucy9TZWxlY3RGaW5kVG9vbEFjdGlvbkpTUC5qc3A/Iik7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCkuYXBwZW5kKCc9JykuYXBwZW5kKG5vZGVJZCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoQWN0aW9uSW5wdXRzLlRPT0xJRCkuYXBwZW5kKCc9JykuYXBwZW5kKHRvb2xJZCk7Ci0gICAgaWYgKHZpZXdJZCAhPSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpCi0gICAgewotICAgICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdJRCkuYXBwZW5kKCc9JykuYXBwZW5kKHZpZXdJZCk7Ci0gICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpLmFwcGVuZChBY3Rpb25JbnB1dHMuVklFV1RPT0xJRCkuYXBwZW5kKCc9JykuYXBwZW5kKHZpZXdUb29sSWQpOwotICAgIH0KLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpLmFwcGVuZChVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSkuYXBwZW5kKCc9JykuYXBwZW5kKHN1YlF1ZXJ5S2V5KTsKLQotICAgIGlmIChmb3JIaXN0b3J5KQotICAgICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoQWN0aW9uSW5wdXRzLklTSElTVE9SWSkuYXBwZW5kKCI9MSIpOwotICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgaWYgKCFzdXBlci5ydW4oKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBGb3JtVG9vbCBmb3JtVG9vbCA9IChGb3JtVG9vbCkoc2VsZWN0ZWROb2RlXy5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKSk7Ci0gICAgU3RyaW5nIGN1cnJlbnRTdWJRdWVyeUtleSA9IChTdHJpbmcpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVkpOwotICAgIGlmIChzdWJRdWVyeUtleV8gIT0gbnVsbCAmJiAhc3ViUXVlcnlLZXlfLmVxdWFscyhjdXJyZW50U3ViUXVlcnlLZXkpKQotICAgIHsKLSAgICAgIHRvb2xMaW5rQ2hhbmdlZF8gPSB0cnVlOwotICAgICAgZm9ybVRvb2wuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVksc3ViUXVlcnlLZXlfKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiByZXF1aXJlc1ZpZXdTZWxlY3Rpb24oKQotICB7Ci0gICAgcmV0dXJuIHRvb2xMaW5rQ2hhbmdlZF87Ci0gIH0KLQotICBwcm90ZWN0ZWQgU3RyaW5nIGdldEFjdGlvbkxpbmtGb3JIaXN0b3J5KCkKLSAgewotICAgIGludCBub2RlSWQgPSBzZWxlY3RlZE5vZGVfLmdldE5vZGVJZCgpOwotICAgIGludCB0b29sSWQgPSBzZWxlY3RlZFRvb2xfLmdldFRvb2xJZCgpOwotICAgIGludCB2aWV3SWQgPSBzZWxlY3RlZE5vZGVfLmdldFZpZXdJZCgpOwotICAgIGludCB2aWV3VG9vbElkID0gc2VsZWN0ZWROb2RlXy5nZXRWaWV3VG9vbElkKCk7Ci0gICAgcmV0dXJuIGdldEFjdGlvbkxpbmsobm9kZUlkLHRvb2xJZCx2aWV3SWQsdmlld1Rvb2xJZCxzdWJRdWVyeUtleV8sdHJ1ZSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1NlbGVjdE5hdmlnYXRvck5vZGVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1NlbGVjdE5hdmlnYXRvck5vZGVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWNiZWUzOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9TZWxlY3ROYXZpZ2F0b3JOb2RlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuU2VsZWN0Tm9kZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLlRvb2xUeXBlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBTZWxlY3ROYXZpZ2F0b3JOb2RlQWN0aW9uIGV4dGVuZHMgU2VsZWN0Tm9kZUFjdGlvbgotewotICBwdWJsaWMgU2VsZWN0TmF2aWdhdG9yTm9kZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyLGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCkuZ2V0TmF2aWdhdG9yTWFuYWdlcigpKTsKLSAgfQotCi0gIC8vIHVkZGkvYWN0aW9ucy9TZWxlY3ROYXZpZ2F0b3JOb2RlQWN0aW9uLmpzcD9ub2RlSWQ9Li4uPCZpc0hpc3Rvcnk9MT4KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlkLGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigidWRkaS9hY3Rpb25zL1NlbGVjdE5hdmlnYXRvck5vZGVBY3Rpb25KU1AuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpLmFwcGVuZCgnPScpLmFwcGVuZChub2RlSWQpOwotICAgIGlmIChmb3JIaXN0b3J5KQotICAgICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoQWN0aW9uSW5wdXRzLklTSElTVE9SWSkuYXBwZW5kKCI9MSIpOwotICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEFjdGlvbkxpbmtGb3JIaXN0b3J5KCkKLSAgewotICAgIFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyID0gc2VsZWN0ZWROb2RlXy5nZXRUb29sTWFuYWdlcigpOwotICAgIFRvb2wgc2VsZWN0ZWRUb29sID0gdG9vbE1hbmFnZXIuZ2V0U2VsZWN0ZWRUb29sKCk7Ci0gICAgaW50IG5vZGVJZCA9IHNlbGVjdGVkTm9kZV8uZ2V0Tm9kZUlkKCk7Ci0gICAgc2VsZWN0ZWRUb29sLmdldFRvb2xJZCgpOwotICAgIHNlbGVjdGVkTm9kZV8uZ2V0Vmlld0lkKCk7Ci0gICAgc2VsZWN0ZWROb2RlXy5nZXRWaWV3VG9vbElkKCk7Ci0gICAgaWYgKHNlbGVjdGVkVG9vbC5nZXRUb29sVHlwZSgpICE9IFRvb2xUeXBlcy5BQ1RJT04pCi0gICAgICByZXR1cm4gc2VsZWN0ZWRUb29sLmdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKHRydWUpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBnZXRBY3Rpb25MaW5rKG5vZGVJZCx0cnVlKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRWYXIoKQotICB7Ci0gICAgcmV0dXJuICJuYXZpZ2F0b3JDb250ZW50IjsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRQYWdlKCkKLSAgewotICAgIHJldHVybiAidWRkaS9uYXZpZ2F0b3JfY29udGVudC5qc3AiOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyVmFyKCkKLSAgewotICAgIHJldHVybiAicHJvcGVydGllc0NvbnRhaW5lciI7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCkKLSAgewotICAgIHJldHVybiAidWRkaS9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgaW50IGdldFBlcnNwZWN0aXZlSWQoKQotICB7Ci0gICAgcmV0dXJuIEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9VRERJOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9TZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjg2ZTE1Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9TZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5TZWxlY3ROb2RlVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLQotcHVibGljIGNsYXNzIFNlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uIGV4dGVuZHMgU2VsZWN0Tm9kZVRvb2xBY3Rpb24KLXsKLSAgcHVibGljIFNlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIsIGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCkuZ2V0TmF2aWdhdG9yTWFuYWdlcigpKTsKLSAgfQotCi0gIC8vIC91ZGRpL2FjdGlvbnMvU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb24uanNwP25vZGVJZD0uLi4mdG9vbElkPS4uLjwmdmlld0lkPS4uLiZ2aWV3VG9vbElkPS4uLj48JmlzSGlzdG9yeT0xPgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSWQsaW50IHRvb2xJZCxpbnQgdmlld0lkLGludCB2aWV3VG9vbElkLGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigidWRkaS9hY3Rpb25zL1NlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uSlNQLmpzcD8iKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKS5hcHBlbmQoJz0nKS5hcHBlbmQobm9kZUlkKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpLmFwcGVuZChBY3Rpb25JbnB1dHMuVE9PTElEKS5hcHBlbmQoJz0nKS5hcHBlbmQodG9vbElkKTsKLSAgICBpZiAodmlld0lkICE9IEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCkKLSAgICB7Ci0gICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpLmFwcGVuZChBY3Rpb25JbnB1dHMuVklFV0lEKS5hcHBlbmQoJz0nKS5hcHBlbmQodmlld0lkKTsKLSAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJykuYXBwZW5kKEFjdGlvbklucHV0cy5WSUVXVE9PTElEKS5hcHBlbmQoJz0nKS5hcHBlbmQodmlld1Rvb2xJZCk7Ci0gICAgfQotICAgIGlmIChmb3JIaXN0b3J5KQotICAgICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoQWN0aW9uSW5wdXRzLklTSElTVE9SWSkuYXBwZW5kKCI9MSIpOwotICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgU3RyaW5nIGdldEFjdGlvbkxpbmtGb3JIaXN0b3J5KCkKLSAgewotICAgIGludCBub2RlSWQgPSBzZWxlY3RlZE5vZGVfLmdldE5vZGVJZCgpOwotICAgIGludCB0b29sSWQgPSBzZWxlY3RlZFRvb2xfLmdldFRvb2xJZCgpOwotICAgIGludCB2aWV3SWQgPSBzZWxlY3RlZE5vZGVfLmdldFZpZXdJZCgpOwotICAgIGludCB2aWV3VG9vbElkID0gc2VsZWN0ZWROb2RlXy5nZXRWaWV3VG9vbElkKCk7Ci0gICAgcmV0dXJuIGdldEFjdGlvbkxpbmsobm9kZUlkLHRvb2xJZCx2aWV3SWQsdmlld1Rvb2xJZCx0cnVlKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRWYXIoKQotICB7Ci0gICAgcmV0dXJuICJuYXZpZ2F0b3JDb250ZW50IjsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRQYWdlKCkKLSAgewotICAgIHJldHVybiAidWRkaS9uYXZpZ2F0b3JfY29udGVudC5qc3AiOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyVmFyKCkKLSAgewotICAgIHJldHVybiAicHJvcGVydGllc0NvbnRhaW5lciI7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCkKLSAgewotICAgIHJldHVybiAidWRkaS9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGVudFZhcigpCi0gIHsKLSAgICByZXR1cm4gInByb3BlcnRpZXNDb250ZW50IjsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRlbnRQYWdlKCkKLSAgewotICAgIHJldHVybiAidWRkaS9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIjsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGludCBnZXRQZXJzcGVjdGl2ZUlkKCkKLSAgewotICAgIHJldHVybiBBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfVURESTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvU2VsZWN0U3ViUXVlcnlJdGVtQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9TZWxlY3RTdWJRdWVyeUl0ZW1BY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTdiYjViZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9TZWxlY3RTdWJRdWVyeUl0ZW1BY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5WaWV3VG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5NdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJ1c2luZXNzLkJ1c2luZXNzRW50aXR5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuc2VydmljZS5CdXNpbmVzc1NlcnZpY2U7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsOwotCi1wdWJsaWMgY2xhc3MgU2VsZWN0U3ViUXVlcnlJdGVtQWN0aW9uIGV4dGVuZHMgU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb24KLXsKLSAgcHJpdmF0ZSBib29sZWFuIHJlcXVpcmVzVHJlZVZpZXdSZWZyZXNoXzsKLSAgcHJpdmF0ZSBib29sZWFuIHJlcXVpcmVzVmlld1NlbGVjdGlvbl87Ci0gIHByaXZhdGUgYm9vbGVhbiBuZXdVVUlEUXVlcnlDcmVhdGVkXzsKLSAgcHJpdmF0ZSBTdHJpbmcgaXRlbU5hbWVfOwotICBwdWJsaWMgU2VsZWN0U3ViUXVlcnlJdGVtQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIHJlcXVpcmVzVHJlZVZpZXdSZWZyZXNoXyA9IGZhbHNlOwotICAgIHJlcXVpcmVzVmlld1NlbGVjdGlvbl8gPSBmYWxzZTsKLSAgICBuZXdVVUlEUXVlcnlDcmVhdGVkXyA9IGZhbHNlOwotICAgIGl0ZW1OYW1lXyA9IG51bGw7Ci0gIH0KLQotICAvLyAvdWRkaS9hY3Rpb25zL1NlbGVjdFN1YlF1ZXJ5SXRlbUFjdGlvbi5qc3A/bm9kZUlkPS4uLiZ0b29sSWQ9Li4uPCZ2aWV3SWQ9Li4uPiZzdWJRdWVyeUtleT0uLi4mc3ViUXVlcnlMaXN0S2V5PS4uLiZzdWJRdWVyeUxpc3RJdGVtSWQ9Li4uJnF1ZXJ5SXRlbT0uLi48JmlzSGlzdG9yeT0xPgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSWQsaW50IHRvb2xJZCxpbnQgdmlld0lkLFN0cmluZyBzdWJRdWVyeUtleSxTdHJpbmcgc3ViUXVlcnlMaXN0S2V5LGludCBzdWJRdWVyeUxpc3RJdGVtSWQsaW50IHF1ZXJ5SXRlbSxib29sZWFuIGZvckhpc3RvcnkpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoInVkZGkvYWN0aW9ucy9TZWxlY3RTdWJRdWVyeUl0ZW1BY3Rpb25KU1AuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpLmFwcGVuZCgnPScpLmFwcGVuZChub2RlSWQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJykuYXBwZW5kKEFjdGlvbklucHV0cy5UT09MSUQpLmFwcGVuZCgnPScpLmFwcGVuZCh0b29sSWQpOwotICAgIGlmICh2aWV3SWQgIT0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUKQotICAgICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdJRCkuYXBwZW5kKCc9JykuYXBwZW5kKHZpZXdJZCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVkpLmFwcGVuZCgnPScpLmFwcGVuZChzdWJRdWVyeUtleSk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9MSVNUX0tFWSkuYXBwZW5kKCc9JykuYXBwZW5kKHN1YlF1ZXJ5TGlzdEtleSk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9MSVNUX0lURU1JRCkuYXBwZW5kKCc9JykuYXBwZW5kKHN1YlF1ZXJ5TGlzdEl0ZW1JZCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNKS5hcHBlbmQoJz0nKS5hcHBlbmQocXVlcnlJdGVtKTsKLQotICAgIGlmIChmb3JIaXN0b3J5KQotICAgICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoQWN0aW9uSW5wdXRzLklTSElTVE9SWSkuYXBwZW5kKCI9MSIpOwotICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTGlua1BhcmFtZXRlcnMoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpCi0gIHsKLSAgICBib29sZWFuIHJlc3VsdCA9IHN1cGVyLnByb2Nlc3NMaW5rUGFyYW1ldGVycyhyZXF1ZXN0KTsKLSAgICBTdHJpbmcgc3ViUXVlcnlLZXkgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSk7Ci0gICAgU3RyaW5nIHN1YlF1ZXJ5TGlzdEtleSA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfTElTVF9LRVkpOwotICAgIFN0cmluZyBzdWJRdWVyeUxpc3RJdGVtSWQgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0xJU1RfSVRFTUlEKTsKLSAgICBTdHJpbmcgcXVlcnlJdGVtU3RyaW5nID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNKTsKLQotICAgIGlmIChzdWJRdWVyeUtleSAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZLHN1YlF1ZXJ5S2V5KTsKLQotICAgIGlmIChzdWJRdWVyeUxpc3RLZXkgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0xJU1RfS0VZLHN1YlF1ZXJ5TGlzdEtleSk7Ci0KLSAgICBpZiAoc3ViUXVlcnlMaXN0SXRlbUlkICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9MSVNUX0lURU1JRCxzdWJRdWVyeUxpc3RJdGVtSWQpOwotCi0gICAgaWYgKHF1ZXJ5SXRlbVN0cmluZyAhPSBudWxsKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTSxxdWVyeUl0ZW1TdHJpbmcpOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gZmluZEJ5VVVJRCgpCi0gIHsKLSAgICBOb2RlIGN1cnJlbnROb2RlID0gbm9kZU1hbmFnZXJfLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIEZvcm1Ub29sIGZvcm1Ub29sID0gKEZvcm1Ub29sKShjdXJyZW50Tm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKSk7Ci0gICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkgPSAoKE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlKWZvcm1Ub29sKS5nZXRGb3JtVG9vbFByb3BlcnRpZXMoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVkpKTsKLSAgICBWZWN0b3IgbGlzdCA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eSgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0xJU1RfS0VZKSk7Ci0gICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpbGlzdC5lbGVtZW50QXQoSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0xJU1RfSVRFTUlEKSkpOwotICAgIGludCBxdWVyeUl0ZW0gPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTSkpOwotICAgIEZpbmRBY3Rpb24gZmluZEFjdGlvbiA9IG51bGw7Ci0gICAgU3RyaW5nIHV1aWRLZXkgPSBudWxsOwotICAgIFN0cmluZyB1dWlkS2V5VmFsdWUgPSBudWxsOwotICAgIHN3aXRjaCAocXVlcnlJdGVtKQotICAgIHsKLSAgICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVM6Ci0gICAgICAgIGZpbmRBY3Rpb24gPSBuZXcgUmVnRmluZEJ1c2luZXNzVVVJREFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgICAgIHV1aWRLZXkgPSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfQlVTSU5FU1NfS0VZOwotICAgICAgICBCdXNpbmVzc0VudGl0eSBzcCA9IChCdXNpbmVzc0VudGl0eSlsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICAgdXVpZEtleVZhbHVlID0gc3AuZ2V0QnVzaW5lc3NLZXkoKTsKLSAgICAgICAgaXRlbU5hbWVfID0gc3AuZ2V0RGVmYXVsdE5hbWVTdHJpbmcoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUzoKLSAgICAgICAgZmluZEFjdGlvbiA9IG5ldyBSZWdGaW5kU2VydmljZVVVSURBY3Rpb24oY29udHJvbGxlcl8pOwotICAgICAgICB1dWlkS2V5ID0gVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfS0VZOwotICAgICAgICBCdXNpbmVzc1NlcnZpY2UgYnMgPSAoQnVzaW5lc3NTZXJ2aWNlKWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgICB1dWlkS2V5VmFsdWUgPSBicy5nZXRTZXJ2aWNlS2V5KCk7Ci0gICAgICAgIGl0ZW1OYW1lXyA9IGJzLmdldERlZmF1bHROYW1lU3RyaW5nKCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTOgotICAgICAgZGVmYXVsdDoKLSAgICAgICAgZmluZEFjdGlvbiA9IG5ldyBSZWdGaW5kU2VydmljZUludGVyZmFjZVVVSURBY3Rpb24oY29udHJvbGxlcl8pOwotICAgICAgICB1dWlkS2V5ID0gVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfSU5URVJGQUNFX0tFWTsKLSAgICAgICAgVE1vZGVsIHRNb2RlbCA9IChUTW9kZWwpbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgIHV1aWRLZXlWYWx1ZSA9IHRNb2RlbC5nZXRUTW9kZWxLZXkoKTsKLSAgICAgICAgaXRlbU5hbWVfID0gdE1vZGVsLmdldE5hbWVTdHJpbmcoKTsKLSAgICB9Ci0gICAgSGFzaHRhYmxlIHByb3BlcnR5VGFibGUgPSBmaW5kQWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX05BTUUsdXVpZEtleVZhbHVlKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dCh1dWlkS2V5LHV1aWRLZXlWYWx1ZSk7Ci0gICAgYm9vbGVhbiByZXN1bHQgPSBmaW5kQWN0aW9uLnJ1bigpOwotICAgIGlmIChyZXN1bHQpCi0gICAgewotICAgICAgTm9kZSBpdGVtTm9kZSA9IG5vZGVNYW5hZ2VyXy5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICAgIGludCBub2RlSWQgPSBpdGVtTm9kZS5nZXROb2RlSWQoKTsKLSAgICAgIGludCB0b29sSWQgPSBpdGVtTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCk7Ci0gICAgICBpbnQgdmlld0lkID0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUOwotICAgICAgaW50IHZpZXdUb29sSWQgPSBBY3Rpb25JbnB1dHMuVklFV1RPT0xJRF9ERUZBVUxUOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5OT0RFSUQsU3RyaW5nLnZhbHVlT2Yobm9kZUlkKSk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLlRPT0xJRCxTdHJpbmcudmFsdWVPZih0b29sSWQpKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuVklFV0lELFN0cmluZy52YWx1ZU9mKHZpZXdJZCkpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5WSUVXVE9PTElELFN0cmluZy52YWx1ZU9mKHZpZXdUb29sSWQpKTsKLSAgICAgIHN1cGVyLnJ1bigpOwotICAgICAgcmVxdWlyZXNUcmVlVmlld1JlZnJlc2hfID0gdHJ1ZTsKLSAgICAgIHJlcXVpcmVzVmlld1NlbGVjdGlvbl8gPSB0cnVlOwotICAgICAgbmV3VVVJRFF1ZXJ5Q3JlYXRlZF8gPSB0cnVlOwotICAgICAgbGlzdEVsZW1lbnQuc2V0VGFyZ2V0Vmlld1Rvb2xJbmZvKG5vZGVJZCx0b29sSWQsdmlld0lkKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gVGhlIGl0ZW0gaXMgbm8gbG9uZ2VyIGluIHRoZSByZWdpc3RyeS4KLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEl0ZW1OYW1lKCkKLSAgewotICAgIHJldHVybiBpdGVtTmFtZV87Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLSAgICAvLyBHaXZlbiB0aGUgbm9kZUlkLCB0b29sSWQgYW5kIHZpZXdJZCwgY2hlY2sgaWYgdGhlIG5vZGUgb3IgdmlldyBpcyBzdGFsZS4KLSAgICBpbnQgbm9kZUlkID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgaW50IHRvb2xJZCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLlRPT0xJRCkpOwotICAgIGludCB2aWV3SWQgPSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQ7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgdmlld0lkID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuVklFV0lEKSk7Ci0gICAgfQotICAgIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgfQotICAgIGludCB2aWV3VG9vbElkID0gMDsKLSAgICBpZiAoIWlzU3RhbGVOb2RlKG5vZGVJZCkpCi0gICAgewotICAgICAgLy8gRW51c3JlIHRoZSBub2RlIGlzIHZpc2libGUuCi0gICAgICByZXF1aXJlc1RyZWVWaWV3UmVmcmVzaF8gPSBtYWtlTm9kZVZpc2libGUobm9kZU1hbmFnZXJfLmdldE5vZGUobm9kZUlkKSk7Ci0KLSAgICAgIE5vZGUgbm9kZSA9IG5vZGVNYW5hZ2VyXy5nZXROb2RlKG5vZGVJZCk7Ci0gICAgICBpZiAodmlld0lkICE9IEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCkKLSAgICAgIHsKLSAgICAgICAgVmlld1Rvb2wgdmlld1Rvb2wgPSAoVmlld1Rvb2wpKG5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRUb29sKHRvb2xJZCkpOwotICAgICAgICBUb29sTWFuYWdlciBlbGVtZW50VG9vbE1hbmFnZXIgPSB2aWV3VG9vbC5nZXRUb29sTWFuYWdlcih2aWV3SWQpOwotICAgICAgICBpZiAoZWxlbWVudFRvb2xNYW5hZ2VyICE9IG51bGwpCi0gICAgICAgICAgdmlld1Rvb2xJZCA9IGVsZW1lbnRUb29sTWFuYWdlci5nZXRTZWxlY3RlZFRvb2xJZCgpOwotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBTdGFsZSB2aWV3Ci0gICAgICAgICAgcmV0dXJuIGZpbmRCeVVVSUQoKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5WSUVXVE9PTElELFN0cmluZy52YWx1ZU9mKHZpZXdUb29sSWQpKTsKLSAgICAgIHJldHVybiBzdXBlci5ydW4oKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIFN0YWxlIG5vZGUKLSAgICAgIHJldHVybiBmaW5kQnlVVUlEKCk7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRBY3Rpb25MaW5rRm9ySGlzdG9yeSgpCi0gIHsKLSAgICBpbnQgbm9kZUlkID0gc2VsZWN0ZWROb2RlXy5nZXROb2RlSWQoKTsKLSAgICBpbnQgdG9vbElkID0gc2VsZWN0ZWRUb29sXy5nZXRUb29sSWQoKTsKLSAgICBpbnQgdmlld0lkID0gc2VsZWN0ZWROb2RlXy5nZXRWaWV3SWQoKTsKLSAgICBpbnQgdmlld1Rvb2xJZCA9IHNlbGVjdGVkTm9kZV8uZ2V0Vmlld1Rvb2xJZCgpOwotICAgIHJldHVybiBTZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZCx0b29sSWQsdmlld0lkLHZpZXdUb29sSWQsdHJ1ZSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiByZXF1aXJlc1RyZWVWaWV3UmVmcmVzaCgpCi0gIHsKLSAgICByZXR1cm4gc3VwZXIucmVxdWlyZXNUcmVlVmlld1JlZnJlc2goKXxyZXF1aXJlc1RyZWVWaWV3UmVmcmVzaF87Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiByZXF1aXJlc1ZpZXdTZWxlY3Rpb24oKQotICB7Ci0gICAgcmV0dXJuIHN1cGVyLnJlcXVpcmVzVmlld1NlbGVjdGlvbigpfHJlcXVpcmVzVmlld1NlbGVjdGlvbl87Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiByZXF1aXJlc1N0YXR1c1VwZGF0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3VVVJRFF1ZXJ5Q3JlYXRlZF87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRWYXIoKQotICB7Ci0gICAgcmV0dXJuICJzdGF0dXNDb250ZW50IjsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFBhZ2UoKQotICB7Ci0gICAgcmV0dXJuICJ1ZGRpL3N0YXR1c19jb250ZW50LmpzcCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1NlcnZpY2VHZXRCdXNpbmVzc0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvU2VydmljZUdldEJ1c2luZXNzQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5OTUzMDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvU2VydmljZUdldEJ1c2luZXNzQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5Ob2RlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5TZXJ2aWNlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5TZXJ2aWNlTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5zZXJ2aWNlLkJ1c2luZXNzU2VydmljZTsKLQotcHVibGljIGNsYXNzIFNlcnZpY2VHZXRCdXNpbmVzc0FjdGlvbiBleHRlbmRzIE5vZGVBY3Rpb24KLXsKLSAgcHJpdmF0ZSBTZXJ2aWNlTm9kZSBzZXJ2aWNlTm9kZV87Ci0gIHB1YmxpYyBTZXJ2aWNlR2V0QnVzaW5lc3NBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcixjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpLmdldE5hdmlnYXRvck1hbmFnZXIoKSk7Ci0gICAgc2VydmljZU5vZGVfID0gbnVsbDsKLSAgfQotCi0gIC8vIHVkZGkvYWN0aW9ucy9TZXJ2aWNlR2V0QnVzaW5lc3NBY3Rpb25KU1AuanNwP25vZGVJZD0uLi4KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlkKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ1ZGRpL2FjdGlvbnMvU2VydmljZUdldEJ1c2luZXNzQWN0aW9uSlNQLmpzcD8iKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKS5hcHBlbmQoJz0nKS5hcHBlbmQobm9kZUlkKTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gdmFsaWRhdGVTZXJ2aWNlKCkKLSAgewotICAgIGludCBzZXJ2aWNlTm9kZUlkID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgc2VydmljZU5vZGVfID0gKFNlcnZpY2VOb2RlKW5vZGVNYW5hZ2VyXy5nZXROb2RlKHNlcnZpY2VOb2RlSWQpOwotICAgIFNlcnZpY2VFbGVtZW50IHNlcnZpY2VFbGVtZW50ID0gKFNlcnZpY2VFbGVtZW50KXNlcnZpY2VOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgIFJlZ0ZpbmRTZXJ2aWNlVVVJREFjdGlvbiB2ZXJpZnlBY3Rpb24gPSBuZXcgUmVnRmluZFNlcnZpY2VVVUlEQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICBIYXNodGFibGUgcHJvcGVydHlUYWJsZSA9IHZlcmlmeUFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9PVkVSUklERV9BRERfUVVFUllfTk9ERSxCb29sZWFuLlRSVUUpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9TRVJWSUNFX0tFWSxzZXJ2aWNlRWxlbWVudC5nZXRCdXNpbmVzc1NlcnZpY2UoKS5nZXRTZXJ2aWNlS2V5KCkpOwotICAgIGJvb2xlYW4gcmVzdWx0ID0gdmVyaWZ5QWN0aW9uLnJ1bigpOwotICAgIGlmIChyZXN1bHQpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5MQVRFU1RfT0JKRUNULHByb3BlcnR5VGFibGUuZ2V0KFVERElBY3Rpb25JbnB1dHMuTEFURVNUX09CSkVDVCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmtGb3JIaXN0b3J5KCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBCdXNpbmVzc1NlcnZpY2UgYnMgPSAoQnVzaW5lc3NTZXJ2aWNlKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLkxBVEVTVF9PQkpFQ1QpOwotCi0gICAgUmVnRmluZEJ1c2luZXNzVVVJREFjdGlvbiBhY3Rpb24gPSBuZXcgUmVnRmluZEJ1c2luZXNzVVVJREFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgSGFzaHRhYmxlIHByb3BlcnR5VGFibGUgPSBhY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfTkFNRSx1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTk9ERV9OQU1FX1NFUlZJQ0VfQlVTSU5FU1MiLHNlcnZpY2VOb2RlXy5nZXROb2RlTmFtZSgpKSk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX0JVU0lORVNTX0tFWSxicy5nZXRCdXNpbmVzc0tleSgpKTsKLQotICAgIHJldHVybiBhY3Rpb24ucnVuKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1NlcnZpY2VHZXRTZXJ2aWNlSW50ZXJmYWNlc0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvU2VydmljZUdldFNlcnZpY2VJbnRlcmZhY2VzQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzNmVmMWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvU2VydmljZUdldFNlcnZpY2VJbnRlcmZhY2VzQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlNlcnZpY2VFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlNlcnZpY2VOb2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnNlcnZpY2UuQnVzaW5lc3NTZXJ2aWNlOwotCi1wdWJsaWMgY2xhc3MgU2VydmljZUdldFNlcnZpY2VJbnRlcmZhY2VzQWN0aW9uIGV4dGVuZHMgVURESU5vZGVBY3Rpb24KLXsKLSAgcHJpdmF0ZSBTZXJ2aWNlTm9kZSBzZXJ2aWNlTm9kZV87Ci0gIHB1YmxpYyBTZXJ2aWNlR2V0U2VydmljZUludGVyZmFjZXNBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgc2VydmljZU5vZGVfID0gbnVsbDsKLSAgfQotCi0gIC8vIHVkZGkvYWN0aW9ucy9TZXJ2aWNlR2V0U2VydmljZUludGVyZmFjZXNBY3Rpb25KU1AuanNwP25vZGVJZD0uLi4KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlkKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ1ZGRpL2FjdGlvbnMvU2VydmljZUdldFNlcnZpY2VJbnRlcmZhY2VzQWN0aW9uSlNQLmpzcD8iKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKS5hcHBlbmQoJz0nKS5hcHBlbmQobm9kZUlkKTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gdmFsaWRhdGVTZXJ2aWNlKCkKLSAgewotICAgIGludCBzZXJ2aWNlTm9kZUlkID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgc2VydmljZU5vZGVfID0gKFNlcnZpY2VOb2RlKW5vZGVNYW5hZ2VyXy5nZXROb2RlKHNlcnZpY2VOb2RlSWQpOwotICAgIFNlcnZpY2VFbGVtZW50IHNlcnZpY2VFbGVtZW50ID0gKFNlcnZpY2VFbGVtZW50KXNlcnZpY2VOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgIFJlZ0ZpbmRTZXJ2aWNlVVVJREFjdGlvbiB2ZXJpZnlBY3Rpb24gPSBuZXcgUmVnRmluZFNlcnZpY2VVVUlEQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICBIYXNodGFibGUgcHJvcGVydHlUYWJsZSA9IHZlcmlmeUFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9PVkVSUklERV9BRERfUVVFUllfTk9ERSxCb29sZWFuLlRSVUUpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9TRVJWSUNFX0tFWSxzZXJ2aWNlRWxlbWVudC5nZXRCdXNpbmVzc1NlcnZpY2UoKS5nZXRTZXJ2aWNlS2V5KCkpOwotICAgIGJvb2xlYW4gcmVzdWx0ID0gdmVyaWZ5QWN0aW9uLnJ1bigpOwotICAgIGlmIChyZXN1bHQpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5MQVRFU1RfT0JKRUNULHByb3BlcnR5VGFibGUuZ2V0KFVERElBY3Rpb25JbnB1dHMuTEFURVNUX09CSkVDVCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rRm9ySGlzdG9yeSgpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgQnVzaW5lc3NTZXJ2aWNlIGJzID0gKEJ1c2luZXNzU2VydmljZSlwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5MQVRFU1RfT0JKRUNUKTsKLSAgICBSZWdGaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZEFjdGlvbiBhY3Rpb24gPSBuZXcgUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRBY3Rpb24oY29udHJvbGxlcl8pOwotICAgIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlID0gYWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX05BTUUsdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk5PREVfTkFNRV9TRVJWSUNFX1NFUlZJQ0VfSU5URVJGQUNFUyIsc2VydmljZU5vZGVfLmdldE5vZGVOYW1lKCkpKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1VTRV9TRVJWSUNFLEJvb2xlYW4uVFJVRSk7Ci0gICAgTGlzdEVsZW1lbnQgc2VydmljZUxpc3RFbGVtZW50ID0gbmV3IExpc3RFbGVtZW50KGJzKTsKLSAgICBzZXJ2aWNlTGlzdEVsZW1lbnQuc2V0VGFyZ2V0Vmlld1Rvb2xJbmZvKHNlcnZpY2VOb2RlXy5nZXROb2RlSWQoKSxzZXJ2aWNlTm9kZV8uZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLHNlcnZpY2VOb2RlXy5nZXRWaWV3SWQoKSk7Ci0gICAgVmVjdG9yIHNlcnZpY2VMaXN0VmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgIHNlcnZpY2VMaXN0VmVjdG9yLmFkZEVsZW1lbnQoc2VydmljZUxpc3RFbGVtZW50KTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1NFUlZJQ0Usc2VydmljZUxpc3RWZWN0b3IpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfQlVTSU5FU1NfU0VSVklDRSxicyk7Ci0gICAgcmV0dXJuIGFjdGlvbi5ydW4oKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvU2VydmljZUludGVyZmFjZUdldEJ1c2luZXNzZXNBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1NlcnZpY2VJbnRlcmZhY2VHZXRCdXNpbmVzc2VzQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4M2I3MjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvU2VydmljZUludGVyZmFjZUdldEJ1c2luZXNzZXNBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuU2VydmljZUludGVyZmFjZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuU2VydmljZUludGVyZmFjZU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLlRNb2RlbDsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuVE1vZGVsQmFnOwotCi1wdWJsaWMgY2xhc3MgU2VydmljZUludGVyZmFjZUdldEJ1c2luZXNzZXNBY3Rpb24gZXh0ZW5kcyBVRERJTm9kZUFjdGlvbgotewotICBwcml2YXRlIFNlcnZpY2VJbnRlcmZhY2VOb2RlIHNpTm9kZV87Ci0gIHB1YmxpYyBTZXJ2aWNlSW50ZXJmYWNlR2V0QnVzaW5lc3Nlc0FjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICBzaU5vZGVfID0gbnVsbDsKLSAgfQotCi0gIC8vIHVkZGkvYWN0aW9ucy9TZXJ2aWNlSW50ZXJmYWNHZXRCdXNpbmVzc2VzQWN0aW9uSlNQLmpzcD9ub2RlSWQ9Li4uCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJZCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigidWRkaS9hY3Rpb25zL1NlcnZpY2VJbnRlcmZhY2VHZXRCdXNpbmVzc2VzQWN0aW9uSlNQLmpzcD8iKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKS5hcHBlbmQoJz0nKS5hcHBlbmQobm9kZUlkKTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gdmFsaWRhdGVTZXJ2aWNlSW50ZXJmYWNlKCkKLSAgewotICAgIGludCBzaU5vZGVJZCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgIHNpTm9kZV8gPSAoU2VydmljZUludGVyZmFjZU5vZGUpbm9kZU1hbmFnZXJfLmdldE5vZGUoc2lOb2RlSWQpOwotICAgIFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50IHNpRWxlbWVudCA9IChTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudClzaU5vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VVVUlEQWN0aW9uIHZlcmlmeUFjdGlvbiA9IG5ldyBSZWdGaW5kU2VydmljZUludGVyZmFjZVVVSURBY3Rpb24oY29udHJvbGxlcl8pOwotICAgIEhhc2h0YWJsZSBwcm9wZXJ0eVRhYmxlID0gdmVyaWZ5QWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX09WRVJSSURFX0FERF9RVUVSWV9OT0RFLEJvb2xlYW4uVFJVRSk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfSU5URVJGQUNFX0tFWSxzaUVsZW1lbnQuZ2V0VE1vZGVsKCkuZ2V0VE1vZGVsS2V5KCkpOwotICAgIGJvb2xlYW4gcmVzdWx0ID0gdmVyaWZ5QWN0aW9uLnJ1bigpOwotICAgIGlmIChyZXN1bHQpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5MQVRFU1RfT0JKRUNULHByb3BlcnR5VGFibGUuZ2V0KFVERElBY3Rpb25JbnB1dHMuTEFURVNUX09CSkVDVCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rRm9ySGlzdG9yeSgpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgVE1vZGVsIHRNb2RlbCA9IChUTW9kZWwpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuTEFURVNUX09CSkVDVCk7Ci0KLSAgICBSZWdGaW5kQnVzaW5lc3Nlc0FkdmFuY2VkQWN0aW9uIGFjdGlvbiA9IG5ldyBSZWdGaW5kQnVzaW5lc3Nlc0FkdmFuY2VkQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICBIYXNodGFibGUgcHJvcGVydHlUYWJsZSA9IGFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9OQU1FLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJOT0RFX05BTUVfU0lfQlVTSU5FU1NFUyIsc2lOb2RlXy5nZXROb2RlTmFtZSgpKSk7Ci0gICAgCi0gICAgTGlzdEVsZW1lbnQgc2lMaXN0RWxlbWVudCA9IG5ldyBMaXN0RWxlbWVudCh0TW9kZWwpOwotICAgIHNpTGlzdEVsZW1lbnQuc2V0VGFyZ2V0Vmlld1Rvb2xJbmZvKHNpTm9kZV8uZ2V0Tm9kZUlkKCksc2lOb2RlXy5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksc2lOb2RlXy5nZXRWaWV3SWQoKSk7Ci0gICAgVmVjdG9yIHNpTGlzdFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICBzaUxpc3RWZWN0b3IuYWRkRWxlbWVudChzaUxpc3RFbGVtZW50KTsKLSAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX1NFUlZJQ0VfSU5URVJGQUNFUyxzaUxpc3RWZWN0b3IpOwotICAgIAotICAgIFZlY3RvciB0TW9kZWxLZXlTdHJpbmdWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgdE1vZGVsS2V5U3RyaW5nVmVjdG9yLmFkZEVsZW1lbnQodE1vZGVsLmdldFRNb2RlbEtleSgpKTsKLSAgICBUTW9kZWxCYWcgdE1vZGVsQmFnID0gbmV3IFRNb2RlbEJhZyh0TW9kZWxLZXlTdHJpbmdWZWN0b3IpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfVE1PREVMQkFHLHRNb2RlbEJhZyk7Ci0gICAgCi0gICAgcmV0dXJuIGFjdGlvbi5ydW4oKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvU2VydmljZUludGVyZmFjZUdldFNlcnZpY2VzQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9TZXJ2aWNlSW50ZXJmYWNlR2V0U2VydmljZXNBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTUzYTQ3OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9TZXJ2aWNlSW50ZXJmYWNlR2V0U2VydmljZXNBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuU2VydmljZUludGVyZmFjZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuU2VydmljZUludGVyZmFjZU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLlRNb2RlbDsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuVE1vZGVsQmFnOwotCi1wdWJsaWMgY2xhc3MgU2VydmljZUludGVyZmFjZUdldFNlcnZpY2VzQWN0aW9uIGV4dGVuZHMgVURESU5vZGVBY3Rpb24KLXsKLSAgcHJpdmF0ZSBTZXJ2aWNlSW50ZXJmYWNlTm9kZSBzaU5vZGVfOwotICBwdWJsaWMgU2VydmljZUludGVyZmFjZUdldFNlcnZpY2VzQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIHNpTm9kZV8gPSBudWxsOwotICB9Ci0KLSAgLy8gdWRkaS9hY3Rpb25zL1NlcnZpY2VJbnRlcmZhY0dldFNlcnZpY2VzQWN0aW9uSlNQLmpzcD9ub2RlSWQ9Li4uCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJZCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigidWRkaS9hY3Rpb25zL1NlcnZpY2VJbnRlcmZhY2VHZXRTZXJ2aWNlc0FjdGlvbkpTUC5qc3A/Iik7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCkuYXBwZW5kKCc9JykuYXBwZW5kKG5vZGVJZCk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHZhbGlkYXRlU2VydmljZUludGVyZmFjZSgpCi0gIHsKLSAgICBpbnQgc2lOb2RlSWQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBzaU5vZGVfID0gKFNlcnZpY2VJbnRlcmZhY2VOb2RlKW5vZGVNYW5hZ2VyXy5nZXROb2RlKHNpTm9kZUlkKTsKLSAgICBTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCBzaUVsZW1lbnQgPSAoU2VydmljZUludGVyZmFjZUVsZW1lbnQpc2lOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgIFJlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlVVVJREFjdGlvbiB2ZXJpZnlBY3Rpb24gPSBuZXcgUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VVVUlEQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICBIYXNodGFibGUgcHJvcGVydHlUYWJsZSA9IHZlcmlmeUFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9PVkVSUklERV9BRERfUVVFUllfTk9ERSxCb29sZWFuLlRSVUUpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9TRVJWSUNFX0lOVEVSRkFDRV9LRVksc2lFbGVtZW50LmdldFRNb2RlbCgpLmdldFRNb2RlbEtleSgpKTsKLSAgICBib29sZWFuIHJlc3VsdCA9IHZlcmlmeUFjdGlvbi5ydW4oKTsKLSAgICBpZiAocmVzdWx0KQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuTEFURVNUX09CSkVDVCxwcm9wZXJ0eVRhYmxlLmdldChVRERJQWN0aW9uSW5wdXRzLkxBVEVTVF9PQkpFQ1QpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0gICAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGlua0Zvckhpc3RvcnkoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIFRNb2RlbCB0TW9kZWwgPSAoVE1vZGVsKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLkxBVEVTVF9PQkpFQ1QpOwotCi0gICAgUmVnRmluZFNlcnZpY2VzQWR2YW5jZWRBY3Rpb24gYWN0aW9uID0gbmV3IFJlZ0ZpbmRTZXJ2aWNlc0FkdmFuY2VkQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICBIYXNodGFibGUgcHJvcGVydHlUYWJsZSA9IGFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9OQU1FLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJOT0RFX05BTUVfU0lfU0VSVklDRVMiLHNpTm9kZV8uZ2V0Tm9kZU5hbWUoKSkpOwotICAgIAotICAgIExpc3RFbGVtZW50IHNpTGlzdEVsZW1lbnQgPSBuZXcgTGlzdEVsZW1lbnQodE1vZGVsKTsKLSAgICBzaUxpc3RFbGVtZW50LnNldFRhcmdldFZpZXdUb29sSW5mbyhzaU5vZGVfLmdldE5vZGVJZCgpLHNpTm9kZV8uZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLHNpTm9kZV8uZ2V0Vmlld0lkKCkpOwotICAgIFZlY3RvciBzaUxpc3RWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgc2lMaXN0VmVjdG9yLmFkZEVsZW1lbnQoc2lMaXN0RWxlbWVudCk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfSU5URVJGQUNFUyxzaUxpc3RWZWN0b3IpOwotICAgIAotICAgIFZlY3RvciB0TW9kZWxLZXlTdHJpbmdWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgdE1vZGVsS2V5U3RyaW5nVmVjdG9yLmFkZEVsZW1lbnQodE1vZGVsLmdldFRNb2RlbEtleSgpKTsKLSAgICBUTW9kZWxCYWcgdE1vZGVsQmFnID0gbmV3IFRNb2RlbEJhZyh0TW9kZWxLZXlTdHJpbmdWZWN0b3IpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9UTU9ERUxCQUcsdE1vZGVsQmFnKTsKLSAgICAKLSAgICByZXR1cm4gYWN0aW9uLnJ1bigpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9TaG93UHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvU2hvd1B1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWFiODY0My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9TaG93UHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDI1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuQnVzaW5lc3NFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5QdWJsaXNoZXJBc3NlcnRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlZhbGlkYXRvcjsKLWltcG9ydCBvcmcudWRkaTRqLlVERElFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai5jbGllbnQuVURESVByb3h5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYnVzaW5lc3MuQnVzaW5lc3NFbnRpdHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5Bc3NlcnRpb25TdGF0dXNJdGVtOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuQXNzZXJ0aW9uU3RhdHVzUmVwb3J0OwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuQ29tcGxldGlvblN0YXR1czsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLkRpc3Bvc2l0aW9uUmVwb3J0OwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuUmVsYXRlZEJ1c2luZXNzSW5mbzsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlJlbGF0ZWRCdXNpbmVzc2VzTGlzdDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlJlc3VsdDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlNoYXJlZFJlbGF0aW9uc2hpcHM7Ci1pbXBvcnQgb3JnLnVkZGk0ai50cmFuc3BvcnQuVHJhbnNwb3J0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5GaW5kUXVhbGlmaWVyczsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuS2V5ZWRSZWZlcmVuY2U7Ci0KLXB1YmxpYyBjbGFzcyBTaG93UHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbiBleHRlbmRzIENvbW1vblB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24KLXsKLQotICBwcm90ZWN0ZWQgU3RyaW5nIHN1YlF1ZXJ5S2V5XzsKLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNTdWJRdWVyeUdldF87Ci0gIHByb3RlY3RlZCBib29sZWFuIHN1YlF1ZXJ5SW5pdGlhdGVkXzsKLSAgcHJvdGVjdGVkIFN0cmluZyBuZXdTdWJRdWVyeV87Ci0gIHByb3RlY3RlZCBTdHJpbmcgbmV3U3ViUXVlcnlJdGVtXzsKLQotICBwdWJsaWMgU2hvd1B1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0KLSAgICBzdWJRdWVyeUtleV8gPSBudWxsOwotICAgIGlzU3ViUXVlcnlHZXRfID0gZmFsc2U7Ci0gICAgc3ViUXVlcnlJbml0aWF0ZWRfID0gZmFsc2U7Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBwcm9jZXNzUGFyc2VkUmVzdWx0cyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgaWYgKHJlZ2lzdHJ5Tm9kZV8gPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIGlkcyBmcm9tIHVkZGlPYmplY3RzX3RhYmxlCi0gICAgU3RyaW5nW10gc2VsZWN0ZWRCdXNJZHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUFVCTElTSEVSX0FTU0VSVElPTlNfU0VMRUNURURfQlVTX0lEKTsKLSAgICBpZiAoc2VsZWN0ZWRCdXNJZHMgIT0gbnVsbCAmJiBzZWxlY3RlZEJ1c0lkcy5sZW5ndGggPiAwKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUFVCTElTSEVSX0FTU0VSVElPTlNfU0VMRUNURURfQlVTX0lELCBzZWxlY3RlZEJ1c0lkcyk7Ci0KLSAgICBuZXdTdWJRdWVyeV8gPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuTkVXX1NVQlFVRVJZX0lOSVRJQVRFRCk7Ci0gICAgU3RyaW5nIGlzU3ViUXVlcnlHZXRTdHJpbmcgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfR0VUKTsKLSAgICBuZXdTdWJRdWVyeUl0ZW1fID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLk5FV19TVUJRVUVSWV9RVUVSWV9JVEVNKTsKLSAgICBzdWJRdWVyeUtleV8gPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZKTsKLQotICAgIC8vIFZhbGlkYXRlIHRoZSBkYXRhLgotICAgIGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIEZvcm1Ub29sIGZvcm1Ub29sID0gZ2V0U2VsZWN0ZWRGb3JtVG9vbCgpOwotICAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJID0gKChNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSlmb3JtVG9vbCkuZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHN1YlF1ZXJ5S2V5Xyk7Ci0gICAgZm9ybVRvb2xQSS5jbGVhckVycm9ycygpOwotCi0gICAgaWYgKG5ld1N1YlF1ZXJ5XyAhPSBudWxsICYmIG5ld1N1YlF1ZXJ5Xy5sZW5ndGgoKSA+IDApCi0gICAgICBzdWJRdWVyeUluaXRpYXRlZF8gPSB0cnVlOwotICAgIGVsc2UKLSAgICAgIHN1YlF1ZXJ5SW5pdGlhdGVkXyA9IGZhbHNlOwotCi0gICAgaWYgKGlzU3ViUXVlcnlHZXRTdHJpbmcgIT0gbnVsbCkKLSAgICAgIGlzU3ViUXVlcnlHZXRfID0gQm9vbGVhbi52YWx1ZU9mKGlzU3ViUXVlcnlHZXRTdHJpbmcpLmJvb2xlYW5WYWx1ZSgpOwotCi0gICAgLy8gaWYgbm90IHlldCBsb2dnZWQgaW4sIHZhbGlkYXRlIHRoZSBwYXJhbWV0ZXJzIG5lZWRlZCB0byBsb2cgaW4KLSAgICAvLyBOT1RFOiBUaGlzIGFjdGlvbiBkb2VzIE5PVCByZXF1aXJlIHRoZSB1c2VyIHRvIGJlIGxvZ2dlZCBpbi4KLSAgICBpZiAoIWlzTG9nZ2VkSW5fKSB7Ci0gICAgICBTdHJpbmcgcHVibGlzaFVSTCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICAgICBTdHJpbmcgdXNlcklEID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICAgICBTdHJpbmcgcGFzc3dvcmQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotCi0gICAgICBpZiAocHVibGlzaFVSTCAhPSBudWxsKQotICAgICAgewotICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCxwdWJsaXNoVVJMKTsKLSAgICAgICAgZm9ybVRvb2wuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCxwdWJsaXNoVVJMKTsKLSAgICAgIH0KLQotICAgICAgaWYgKHVzZXJJRCAhPSBudWxsKQotICAgICAgewotICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQsdXNlcklEKTsKLSAgICAgICAgZm9ybVRvb2wuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQsdXNlcklEKTsKLSAgICAgIH0KLQotICAgICAgaWYgKHBhc3N3b3JkICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JELHBhc3N3b3JkKTsKLSAgICAgICAgZm9ybVRvb2wuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCxwYXNzd29yZCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBpc1N1YlF1ZXJ5SW5pdGlhdGVkKCkKLSAgewotICAgIHJldHVybiBzdWJRdWVyeUluaXRpYXRlZF87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBpc1N1YlF1ZXJ5R2V0KCkKLSAgewotICAgIHJldHVybiBpc1N1YlF1ZXJ5R2V0XzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3ViUXVlcnlLZXkoKQotICB7Ci0gICAgcmV0dXJuIHN1YlF1ZXJ5S2V5XzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0TmV3U3ViUXVlcnkoKQotICB7Ci0gICAgcmV0dXJuIG5ld1N1YlF1ZXJ5XzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0TmV3U3ViUXVlcnlJdGVtKCkKLSAgewotICAgIHJldHVybiBuZXdTdWJRdWVyeUl0ZW1fOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIC8vIFN5bmNocm9uaXplIGNsaWVudCB2aWV3IGFuZCBzZXJ2ZXIgbW9kZWwgKHVkZGlPYmplY3RfdGFibGUuanNwKQotICAgIHN5bmNocm9uaXplVURESU9iamVjdFRhYmxlKCk7Ci0KLSAgICBpZiAocmVnaXN0cnlOb2RlXyA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ2lzdHJ5RWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnaXN0cnlOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLQotICAgIGlmICghKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEJ1c2luZXNzRWxlbWVudCkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBpZiBub3QgeWV0IGxvZ2dlZCBpbiwgbG9nIGluIGZpcnN0Ci0gICAgaWYgKCFpc0xvZ2dlZEluXykgewotICAgICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICAgIFN0cmluZyB1c2VySUQgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICAgICBTdHJpbmcgcGFzc3dvcmQgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEKTsKLQotICAgICAgdHJ5IHsKLSAgICAgICAgaWYgKFZhbGlkYXRvci52YWxpZGF0ZVVSTChwdWJsaXNoVVJMKSAmJgotICAgICAgICAgICAgVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nKHVzZXJJRCkgJiYKLSAgICAgICAgICAgIHBhc3N3b3JkICE9IG51bGwpIHsKLSAgICAgICAgICByZWdpc3RyeUVsZW1lbnQucGVyZm9ybUxvZ2luKHB1Ymxpc2hVUkwsIHVzZXJJRCwgcGFzc3dvcmQpOwotICAgICAgICAgIGlzTG9nZ2VkSW5fID0gcmVnaXN0cnlFbGVtZW50LmlzTG9nZ2VkSW4oKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiB0ZSkgewotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlRyYW5zcG9ydEV4Y2VwdGlvbiIpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh0ZS5nZXRNZXNzYWdlKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiB1ZGRpZSkgewotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlVERElFeGNlcHRpb24iKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaWUudG9TdHJpbmcoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gbWUpIHsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJNYWxmb3JtZWRVUkxFeGNlcHRpb24iKTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UobWUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfSAgICAgIAotICAgIH0KLQotICAgIC8vIHNob3cgYWxsIGFzc2VydGlvbiBpZmYgaXMgbG9nZ2VkIGluIGFuZCBidXNpbmVzcyBpcyBvd25lZAotICAgIC8vIGVsc2Ugc2hvdyBvbmx5IGNvbXBsZXRlZCBvbmVzCi0gICAgQnVzaW5lc3NFbGVtZW50IGJ1c0VsZW1lbnQgPSAoQnVzaW5lc3NFbGVtZW50KXNlbGVjdGVkRWxlbWVudDsKLSAgICBpZiAoaXNMb2dnZWRJbl8gJiYgaXNCdXNpbmVzc093bmVkKGJ1c0VsZW1lbnQpKQotICAgICAgcmV0dXJuIHNob3dQdWJsaXNoZXJBc3NlcnRpb25zRm9yT3duZWRCdXMoYnVzRWxlbWVudCk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIHNob3dQdWJsaXNoZXJBc3NlcnRpb25zRm9yTm9uT3duZWRCdXMoYnVzRWxlbWVudCk7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gc2hvd1B1Ymxpc2hlckFzc2VydGlvbnNGb3JPd25lZEJ1cyhCdXNpbmVzc0VsZW1lbnQgYnVzRWxlbWVudCkgewotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotCi0gICAgLy8gdHJ5IHRvIGdldCBhIGxpc3Qgb2YgYWxsIHB1Ymxpc2hlciBhc3NlcnRpb24gYmFzZWQgb24gdGhlIGN1cnJlbnQgcmVnaXN0cnkncyBhdXRoVG9rZW4KLSAgICBMaXN0TWFuYWdlciBsaXN0TWFuYWdlciA9IG5ldyBMaXN0TWFuYWdlcigpOwotICAgIEZvcm1Ub29sIGZvcm1Ub29sID0gZ2V0U2VsZWN0ZWRGb3JtVG9vbCgpOwotICAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJID0gKChNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSlmb3JtVG9vbCkuZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHN1YlF1ZXJ5S2V5Xyk7Ci0gICAgZm9ybVRvb2xQSS5yZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0VYSVNUSU5HX1BVQkxJU0hFUl9BU1NFUlRJT05TKTsKLSAgICBWZWN0b3IgcXVlcnlJbnB1dFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnaXN0cnlFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdpc3RyeU5vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgcmVnaXN0cnlFbGVtZW50LmdldFVzZXJJZCgpOwotICAgIHJlZ2lzdHJ5RWxlbWVudC5nZXRDcmVkKCk7Ci0KLSAgICAvLyBzaG93IGFsbCBwdWJsaXNoZXIgYXNzZXJ0aW9ucwotICAgIFVERElQcm94eSBwcm94eSA9ICgoUmVnaXN0cnlFbGVtZW50KXJlZ2lzdHJ5Tm9kZV8uZ2V0VHJlZUVsZW1lbnQoKSkuZ2V0UHJveHkoKTsKLSAgICBBc3NlcnRpb25TdGF0dXNSZXBvcnQgYXNzZXJ0aW9uUmVwb3J0OwotICAgIHRyeSB7Ci0gICAgICBhc3NlcnRpb25SZXBvcnQgPSBwcm94eS5nZXRfYXNzZXJ0aW9uU3RhdHVzUmVwb3J0KHJlZ2lzdHJ5RWxlbWVudC5nZXRBdXRoSW5mb1N0cmluZygpLCAoQ29tcGxldGlvblN0YXR1cyludWxsKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFVERElFeGNlcHRpb24gdWRkaWUpIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlVERElFeGNlcHRpb24iKTsKLSAgICAgIERpc3Bvc2l0aW9uUmVwb3J0IHJlcG9ydCA9IHVkZGllLmdldERpc3Bvc2l0aW9uUmVwb3J0KCk7Ci0JICBWZWN0b3IgcmVwb3J0RXJySW5mbyA9IHJlcG9ydC5nZXRSZXN1bHRWZWN0b3IoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVwb3J0RXJySW5mby5zaXplKCk7IGkrKykgewotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgoKFJlc3VsdCkgcmVwb3J0RXJySW5mby5nZXQoaSkpLmdldEVyckluZm8oKS5nZXRUZXh0KCkpOwotICAgICAgfQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGNvbnRyb2xsZXJfLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIkV4Y2VwdGlvbiIpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBWZWN0b3IgYXNzZXJ0aW9uVmVjdG9yID0gYXNzZXJ0aW9uUmVwb3J0LmdldEFzc2VydGlvblN0YXR1c0l0ZW1WZWN0b3IoKTsKLSAgICBWZWN0b3Igb3RoZXJCdXNpbmVzc0tleXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgVmVjdG9yIHB1YkFzc2VydGlvbkVsZW1lbnRzID0gbmV3IFZlY3RvcigpOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhc3NlcnRpb25WZWN0b3Iuc2l6ZSgpOyBpKyspIHsKLSAgICAgIEFzc2VydGlvblN0YXR1c0l0ZW0gYXNzZXJ0aW9uSXRlbSA9IChBc3NlcnRpb25TdGF0dXNJdGVtKWFzc2VydGlvblZlY3Rvci5lbGVtZW50QXQoaSk7Ci0gICAgICAvLyBkZXRlcm1pbmUgdGhlIGZyb20vdG8gYnVzaW5lc3Mga2V5cwotICAgICAgU3RyaW5nIGZyb21LZXkgPSBhc3NlcnRpb25JdGVtLmdldEZyb21LZXkoKS5nZXRUZXh0KCk7Ci0gICAgICBTdHJpbmcgdG9LZXkgPSBhc3NlcnRpb25JdGVtLmdldFRvS2V5KCkuZ2V0VGV4dCgpOwotICAgICAgU3RyaW5nIG93bmluZ0J1c2luZXNzS2V5ID0gYnVzRWxlbWVudC5nZXRCdXNpbmVzc0VudGl0eSgpLmdldEJ1c2luZXNzS2V5KCk7Ci0gICAgICAvLyBpZ25vcmUgdGhpcyBhc3NlcnRpb24gaWYgbmVpdGhlciB0aGUgZnJvbSBrZXkgbm9yIHRoZSB0byBrZXkgZXF1YWxzIHRvIHRoaXMgYnVzaW5lc3MncyBrZXkKLSAgICAgIGlmICghb3duaW5nQnVzaW5lc3NLZXkuZXF1YWxzKGZyb21LZXkpICYmICFvd25pbmdCdXNpbmVzc0tleS5lcXVhbHModG9LZXkpKQotICAgICAgICBjb250aW51ZTsKLSAgICAgIFN0cmluZyBvdGhlckJ1c2luZXNzS2V5ID0gKChvd25pbmdCdXNpbmVzc0tleS5lcXVhbHMoZnJvbUtleSkpID8gdG9LZXkgOiBmcm9tS2V5KTsKLSAgICAgIC8vIHJldHJpZXZlIHRoZSBpbmZvcm1hdGlvbiBvZiB0aGUgIm90aGVyIGJ1c2luZXNzIgotICAgICAgb3RoZXJCdXNpbmVzc0tleXMuYWRkKG90aGVyQnVzaW5lc3NLZXkpOwotCi0gICAgICAvLyByZXRyaWV2ZSB0aGUgc3RhdHVzIG9mIHRoZSBwdWJsaXNoZXIgYXNzZXJ0aW9uCi0gICAgICBTdHJpbmcgc3RhdHVzID0gYXNzZXJ0aW9uSXRlbS5nZXRDb21wbGV0aW9uU3RhdHVzKCkuZ2V0VGV4dCgpOwotICAgICAgS2V5ZWRSZWZlcmVuY2Uga2V5ZWRSZWYgPSBhc3NlcnRpb25JdGVtLmdldEtleWVkUmVmZXJlbmNlKCk7Ci0gICAgICBQdWJsaXNoZXJBc3NlcnRpb25FbGVtZW50IHB1YkFzc2VydGlvbkVsZW1lbnQgPSBuZXcgUHVibGlzaGVyQXNzZXJ0aW9uRWxlbWVudCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21LZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b0tleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmluZ0J1c2luZXNzS2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ZWRSZWYpOwotICAgICAgcHViQXNzZXJ0aW9uRWxlbWVudHMuYWRkKHB1YkFzc2VydGlvbkVsZW1lbnQpOwotICAgIH0KLSAgICBpZiAob3RoZXJCdXNpbmVzc0tleXMuc2l6ZSgpID4gMCkgewotICAgICAgVmVjdG9yIGJ1c0VudGl0aWVzOwotICAgICAgdHJ5IHsKLSAgICAgICAgYnVzRW50aXRpZXMgPSBwcm94eS5nZXRfYnVzaW5lc3NEZXRhaWwob3RoZXJCdXNpbmVzc0tleXMpLmdldEJ1c2luZXNzRW50aXR5VmVjdG9yKCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgIGJ1c0VudGl0aWVzID0gbmV3IFZlY3RvcigpOwotICAgICAgICBpZiAob3RoZXJCdXNpbmVzc0tleXMuc2l6ZSgpID4gMSkgewotICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgb3RoZXJCdXNpbmVzc0tleXMuc2l6ZSgpOyBqKyspIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgIGJ1c0VudGl0aWVzLmFkZChwcm94eS5nZXRfYnVzaW5lc3NEZXRhaWwoKFN0cmluZylvdGhlckJ1c2luZXNzS2V5cy5nZXQoaikpLmdldEJ1c2luZXNzRW50aXR5VmVjdG9yKCkuZ2V0KDApKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7Ci0gICAgICAgICAgICAgIHB1YkFzc2VydGlvbkVsZW1lbnRzLnJlbW92ZShqKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgIHB1YkFzc2VydGlvbkVsZW1lbnRzLnJlbW92ZSgwKTsKLSAgICAgIH0KLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgYnVzRW50aXRpZXMuc2l6ZSgpOyBqKyspIHsKLSAgICAgICAgQnVzaW5lc3NFbnRpdHkgYmUgPSAoQnVzaW5lc3NFbnRpdHkpYnVzRW50aXRpZXMuZ2V0KGopOwotICAgICAgICBQdWJsaXNoZXJBc3NlcnRpb25FbGVtZW50IHB1YkFzc2VydGlvbkVsZW1lbnQgPSAoUHVibGlzaGVyQXNzZXJ0aW9uRWxlbWVudClwdWJBc3NlcnRpb25FbGVtZW50cy5nZXQoaik7Ci0gICAgICAgIExpc3RFbGVtZW50IGxlID0gbmV3IExpc3RFbGVtZW50KGJlKTsKLSAgICAgICAgcXVlcnlJbnB1dFZlY3Rvci5hZGQobGUpOwotICAgICAgICBpbnQgc3ViUXVlcnlJdGVtSWQgPSBxdWVyeUlucHV0VmVjdG9yLmluZGV4T2YobGUpOwotICAgICAgICBwdWJBc3NlcnRpb25FbGVtZW50LnNldFNlcnZpY2VQcm92aWRlcihsZSk7Ci0gICAgICAgIHB1YkFzc2VydGlvbkVsZW1lbnQuc2V0U3ViUXVlcnlJdGVtSWQoc3ViUXVlcnlJdGVtSWQpOwotICAgICAgICBsaXN0TWFuYWdlci5hZGQobmV3IExpc3RFbGVtZW50KHB1YkFzc2VydGlvbkVsZW1lbnQpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgYnVzRWxlbWVudC5zZXRQdWJsaXNoZXJBc3NlcnRpb25zKGxpc3RNYW5hZ2VyKTsKLSAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfRVhJU1RJTkdfUFVCTElTSEVSX0FTU0VSVElPTlMsIHF1ZXJ5SW5wdXRWZWN0b3IpOwotICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19QVUJMSVNIRVJfQVNTRVJUSU9OU19SRUZSRVNIRUQiKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gc2hvd1B1Ymxpc2hlckFzc2VydGlvbnNGb3JOb25Pd25lZEJ1cyhCdXNpbmVzc0VsZW1lbnQgYnVzRWxlbWVudCkgewotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotCi0gICAgLy8gdHJ5IHRvIGdldCBhIGxpc3Qgb2YgcHVibGlzaGVyIGFzc2VydGlvbnMgYmFzZWQgb24gdGhlIGJ1c2luZXNzIGtleQotICAgIExpc3RNYW5hZ2VyIGxpc3RNYW5hZ2VyID0gbmV3IExpc3RNYW5hZ2VyKCk7Ci0gICAgRm9ybVRvb2wgZm9ybVRvb2wgPSBnZXRTZWxlY3RlZEZvcm1Ub29sKCk7Ci0gICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkgPSAoKE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlKWZvcm1Ub29sKS5nZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXlfKTsKLSAgICBmb3JtVG9vbFBJLnJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfRVhJU1RJTkdfUFVCTElTSEVSX0FTU0VSVElPTlMpOwotICAgIFZlY3RvciBxdWVyeUlucHV0VmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgIFVERElQcm94eSBwcm94eSA9ICgoUmVnaXN0cnlFbGVtZW50KXJlZ2lzdHJ5Tm9kZV8uZ2V0VHJlZUVsZW1lbnQoKSkuZ2V0UHJveHkoKTsKLSAgICBSZWxhdGVkQnVzaW5lc3Nlc0xpc3QgcmVsYXRlZEJ1c0xpc3Q7Ci0gICAgdHJ5IHsKLSAgICAgIHJlbGF0ZWRCdXNMaXN0ID0gcHJveHkuZmluZF9yZWxhdGVkQnVzaW5lc3NlcyhidXNFbGVtZW50LmdldEJ1c2luZXNzRW50aXR5KCkuZ2V0QnVzaW5lc3NLZXkoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChLZXllZFJlZmVyZW5jZSludWxsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZpbmRRdWFsaWZpZXJzKW51bGwpOwotICAgIH0KLSAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiB1ZGRpZSkgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVURESUV4Y2VwdGlvbiIpOwotICAgICAgRGlzcG9zaXRpb25SZXBvcnQgcmVwb3J0ID0gdWRkaWUuZ2V0RGlzcG9zaXRpb25SZXBvcnQoKTsKLQkgIFZlY3RvciByZXBvcnRFcnJJbmZvID0gcmVwb3J0LmdldFJlc3VsdFZlY3RvcigpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXBvcnRFcnJJbmZvLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCgoUmVzdWx0KSByZXBvcnRFcnJJbmZvLmdldChpKSkuZ2V0RXJySW5mbygpLmdldFRleHQoKSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiRXhjZXB0aW9uIik7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIFZlY3RvciByZWxhdGVkQnVzVmVjdG9yID0gcmVsYXRlZEJ1c0xpc3QuZ2V0UmVsYXRlZEJ1c2luZXNzSW5mb3MoKS5nZXRSZWxhdGVkQnVzaW5lc3NJbmZvVmVjdG9yKCk7Ci0gICAgVmVjdG9yIG90aGVyQnVzaW5lc3NLZXlzID0gbmV3IFZlY3RvcigpOwotICAgIFZlY3RvciBwdWJBc3NlcnRpb25FbGVtZW50cyA9IG5ldyBWZWN0b3IoKTsKLSAgICBmb3IgKGludCBpICA9IDA7IGkgPCByZWxhdGVkQnVzVmVjdG9yLnNpemUoKTsgaSsrKSB7Ci0gICAgICBSZWxhdGVkQnVzaW5lc3NJbmZvIHJlbGF0ZWRCdXNJbmZvID0gKFJlbGF0ZWRCdXNpbmVzc0luZm8pcmVsYXRlZEJ1c1ZlY3Rvci5lbGVtZW50QXQoaSk7Ci0gICAgICAvLyBkZXRlcm1pbmUgdGhlIGZyb20vdG8gYnVzaW5lc3Mga2V5cwotICAgICAgU3RyaW5nIGZyb21LZXk7Ci0gICAgICBTdHJpbmcgdG9LZXk7Ci0gICAgICBTdHJpbmcgb3duaW5nQnVzaW5lc3NLZXk7Ci0gICAgICBpZiAocmVsYXRlZEJ1c0luZm8uZ2V0RGVmYXVsdFNoYXJlZFJlbGF0aW9uc2hpcHMoKS5nZXREaXJlY3Rpb24oKS5lcXVhbHMoU2hhcmVkUmVsYXRpb25zaGlwcy5ESVJFQ1RJT05fRlJPTUtFWSkpIHsKLSAgICAgICAgZnJvbUtleSA9IGJ1c0VsZW1lbnQuZ2V0QnVzaW5lc3NFbnRpdHkoKS5nZXRCdXNpbmVzc0tleSgpOwotICAgICAgICB0b0tleSA9IHJlbGF0ZWRCdXNJbmZvLmdldEJ1c2luZXNzS2V5KCk7Ci0gICAgICAgIG93bmluZ0J1c2luZXNzS2V5ID0gZnJvbUtleTsKLSAgICAgICAgb3RoZXJCdXNpbmVzc0tleXMuYWRkKHRvS2V5KTsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICBmcm9tS2V5ID0gcmVsYXRlZEJ1c0luZm8uZ2V0QnVzaW5lc3NLZXkoKTsKLSAgICAgICAgdG9LZXkgPSBidXNFbGVtZW50LmdldEJ1c2luZXNzRW50aXR5KCkuZ2V0QnVzaW5lc3NLZXkoKTsKLSAgICAgICAgb3duaW5nQnVzaW5lc3NLZXkgPSB0b0tleTsKLSAgICAgICAgb3RoZXJCdXNpbmVzc0tleXMuYWRkKGZyb21LZXkpOwotICAgICAgfQotCi0gICAgICBWZWN0b3Iga2V5ZWRSZWZWZWN0b3IgPSByZWxhdGVkQnVzSW5mby5nZXREZWZhdWx0U2hhcmVkUmVsYXRpb25zaGlwcygpLmdldEtleWVkUmVmZXJlbmNlVmVjdG9yKCk7Ci0gICAgICBQdWJsaXNoZXJBc3NlcnRpb25FbGVtZW50W10gcHViQXNzZXJ0aW9uRWxlbWVudEFycmF5ID0gbmV3IFB1Ymxpc2hlckFzc2VydGlvbkVsZW1lbnRba2V5ZWRSZWZWZWN0b3Iuc2l6ZSgpXTsKLSAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwga2V5ZWRSZWZWZWN0b3Iuc2l6ZSgpOyBrKyspIHsKLSAgICAgICAgLy8gcmV0cmlldmUgdGhlIHN0YXR1cyBvZiB0aGUgcHVibGlzaGVyIGFzc2VydGlvbgotICAgICAgICBTdHJpbmcgc3RhdHVzID0gQ29tcGxldGlvblN0YXR1cy5DT01QTEVURTsKLSAgICAgICAgS2V5ZWRSZWZlcmVuY2Uga2V5ZWRSZWYgPSAoS2V5ZWRSZWZlcmVuY2Upa2V5ZWRSZWZWZWN0b3IuZWxlbWVudEF0KGspOwotICAgICAgICBQdWJsaXNoZXJBc3NlcnRpb25FbGVtZW50IHB1YkFzc2VydGlvbkVsZW1lbnQgPSBuZXcgUHVibGlzaGVyQXNzZXJ0aW9uRWxlbWVudCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbUtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9LZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmluZ0J1c2luZXNzS2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXllZFJlZik7Ci0gICAgICAgIHB1YkFzc2VydGlvbkVsZW1lbnRBcnJheVtrXSA9IHB1YkFzc2VydGlvbkVsZW1lbnQ7Ci0gICAgICB9Ci0gICAgICBwdWJBc3NlcnRpb25FbGVtZW50cy5hZGQocHViQXNzZXJ0aW9uRWxlbWVudEFycmF5KTsKLSAgICB9Ci0gICAgaWYgKG90aGVyQnVzaW5lc3NLZXlzLnNpemUoKSA+IDApIHsKLSAgICAgIFZlY3RvciBidXNFbnRpdGllczsKLSAgICAgIHRyeSB7Ci0gICAgICAgIGJ1c0VudGl0aWVzID0gcHJveHkuZ2V0X2J1c2luZXNzRGV0YWlsKG90aGVyQnVzaW5lc3NLZXlzKS5nZXRCdXNpbmVzc0VudGl0eVZlY3RvcigpOwotICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICBidXNFbnRpdGllcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgaWYgKG90aGVyQnVzaW5lc3NLZXlzLnNpemUoKSA+IDEpIHsKLSAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG90aGVyQnVzaW5lc3NLZXlzLnNpemUoKTsgaisrKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICBidXNFbnRpdGllcy5hZGQocHJveHkuZ2V0X2J1c2luZXNzRGV0YWlsKChTdHJpbmcpb3RoZXJCdXNpbmVzc0tleXMuZ2V0KGopKS5nZXRCdXNpbmVzc0VudGl0eVZlY3RvcigpLmdldCgwKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgewotICAgICAgICAgICAgICBwdWJBc3NlcnRpb25FbGVtZW50cy5yZW1vdmUoaik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBwdWJBc3NlcnRpb25FbGVtZW50cy5yZW1vdmUoMCk7Ci0gICAgICB9Ci0gICAgICBmb3IgKGludCBqICA9IDA7IGogPCBidXNFbnRpdGllcy5zaXplKCk7IGorKykgewotICAgICAgICBCdXNpbmVzc0VudGl0eSBiZSA9IChCdXNpbmVzc0VudGl0eSlidXNFbnRpdGllcy5nZXQoaik7Ci0gICAgICAgIExpc3RFbGVtZW50IGxlID0gbmV3IExpc3RFbGVtZW50KGJlKTsKLSAgICAgICAgcXVlcnlJbnB1dFZlY3Rvci5hZGQobGUpOwotICAgICAgICBpbnQgc3ViUXVlcnlJdGVtSWQgPSBxdWVyeUlucHV0VmVjdG9yLmluZGV4T2YobGUpOwotICAgICAgICBQdWJsaXNoZXJBc3NlcnRpb25FbGVtZW50W10gcHViQXNzZXJ0aW9uRWxlbWVudEFycmF5ID0gKFB1Ymxpc2hlckFzc2VydGlvbkVsZW1lbnRbXSlwdWJBc3NlcnRpb25FbGVtZW50cy5nZXQoaik7Ci0gICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgcHViQXNzZXJ0aW9uRWxlbWVudEFycmF5Lmxlbmd0aDsgaysrKSB7Ci0gICAgICAgICAgcHViQXNzZXJ0aW9uRWxlbWVudEFycmF5W2tdLnNldFNlcnZpY2VQcm92aWRlcihsZSk7Ci0gICAgICAgICAgcHViQXNzZXJ0aW9uRWxlbWVudEFycmF5W2tdLnNldFN1YlF1ZXJ5SXRlbUlkKHN1YlF1ZXJ5SXRlbUlkKTsKLSAgICAgICAgICBsaXN0TWFuYWdlci5hZGQobmV3IExpc3RFbGVtZW50KHB1YkFzc2VydGlvbkVsZW1lbnRBcnJheVtrXSkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGJ1c0VsZW1lbnQuc2V0UHVibGlzaGVyQXNzZXJ0aW9ucyhsaXN0TWFuYWdlcik7Ci0gICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0VYSVNUSU5HX1BVQkxJU0hFUl9BU1NFUlRJT05TLCBxdWVyeUlucHV0VmVjdG9yKTsKLSAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fUFVCTElTSEVSX0FTU0VSVElPTlNfUkVGUkVTSEVEIikpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9Td2l0Y2hQZXJzcGVjdGl2ZUZyb21VRERJQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9Td2l0Y2hQZXJzcGVjdGl2ZUZyb21VRERJQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5MDE5YjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvU3dpdGNoUGVyc3BlY3RpdmVGcm9tVURESUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLlNob3dQZXJzcGVjdGl2ZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBTd2l0Y2hQZXJzcGVjdGl2ZUZyb21VRERJQWN0aW9uIGV4dGVuZHMgU2hvd1BlcnNwZWN0aXZlQWN0aW9uCi17Ci0gIHB1YmxpYyBTd2l0Y2hQZXJzcGVjdGl2ZUZyb21VRERJQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzUGFyc2VkUmVzdWx0cyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5GUkFNRVNFVF9DT0xTX1BFUlNQRUNUSVZFX0NPTlRFTlQpOwotICAgIFN0cmluZyBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLkZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIpOwotICAgIGlmIChwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMgIT0gbnVsbCAmJiBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzICE9IG51bGwpCi0gICAgewotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuRlJBTUVTRVRfQ09MU19QRVJTUEVDVElWRV9DT05URU5ULHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5GUkFNRVNFVF9ST1dTX0FDVElPTlNfQ09OVEFJTkVSLGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFN0cmluZyBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLkZSQU1FU0VUX0NPTFNfUEVSU1BFQ1RJVkVfQ09OVEVOVCk7Ci0gICAgU3RyaW5nIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLkZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIpOwotICAgIAotICAgIC8vIFNhdmUgdGhlIGZyYW1lc2V0IHNpemVzIGlmZiBubyBmcmFtZSBpcyBtYXhpbWl6ZWQuCi0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIGlmICghcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzLnN0YXJ0c1dpdGgoIjEwMCUiKSAmJiAhcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzLmVuZHNXaXRoKCIxMDAlIikpCi0gICAgICB1ZGRpUGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyk7Ci0gICAgICAKLSAgICBpZiAoIWFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3Muc3RhcnRzV2l0aCgiMTAwJSIpICYmICFhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzLmVuZHNXaXRoKCIxMDAlIikpCi0gICAgICB1ZGRpUGVyc3BlY3RpdmUuc2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKTsKLSAgICAgIAotICAgIHJldHVybiBzdXBlci5ydW4oKTsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0Rm9ybUFjdGlvbkxpbmsoaW50IHRhcmdldFBlcnNwZWN0aXZlSWQsYm9vbGVhbiBmb3JIaXN0b3J5KQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGZvcm1MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigidWRkaS9hY3Rpb25zL1N3aXRjaFBlcnNwZWN0aXZlRnJvbVVERElBY3Rpb25KU1AuanNwPyIpOwotICAgIGZvcm1MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkUpLmFwcGVuZCgnPScpLmFwcGVuZCh0YXJnZXRQZXJzcGVjdGl2ZUlkKTsKLSAgICBpZiAoZm9ySGlzdG9yeSkKLSAgICAgIGZvcm1MaW5rLmFwcGVuZCgnJicpLmFwcGVuZChBY3Rpb25JbnB1dHMuSVNISVNUT1JZKS5hcHBlbmQoIj0xIik7Ci0gICAgcmV0dXJuIGZvcm1MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1RvZ2dsZUNhdGVnb3J5Tm9kZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVG9nZ2xlQ2F0ZWdvcnlOb2RlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxM2QzNjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVG9nZ2xlQ2F0ZWdvcnlOb2RlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuVG9nZ2xlTm9kZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci0KLXB1YmxpYyBjbGFzcyBUb2dnbGVDYXRlZ29yeU5vZGVBY3Rpb24gZXh0ZW5kcyBUb2dnbGVOb2RlQWN0aW9uCi17Ci0gIHB1YmxpYyBUb2dnbGVDYXRlZ29yeU5vZGVBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcixjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpLmdldENhdGVnb3J5TWFuYWdlcigpKTsKLSAgfQotCi0gIC8vIHVkZGkvYWN0aW9ucy9Ub2dnbGVOYXZpZ2F0b3JOb2RlQWN0aW9uLmpzcD9zSWQ9Li4uJm5vZGVJZD0uLi4mb3Blbj0uLi4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGluayhTdHJpbmcgc2Vzc2lvbklkLGludCBub2RlSWQsYm9vbGVhbiBvcGVuKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ1ZGRpL2FjdGlvbnMvVG9nZ2xlQ2F0ZWdvcnlOb2RlQWN0aW9uSlNQLmpzcD8iKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuU0VTU0lPTklEKS5hcHBlbmQoJz0nKS5hcHBlbmQoc2Vzc2lvbklkKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKS5hcHBlbmQoJz0nKS5hcHBlbmQobm9kZUlkKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpLmFwcGVuZChBY3Rpb25JbnB1dHMuT1BFTikuYXBwZW5kKCc9JykuYXBwZW5kKG9wZW4/QWN0aW9uSW5wdXRzLk9QRU5fTk9ERTpBY3Rpb25JbnB1dHMuQ0xPU0VfTk9ERSk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBpbnQgbm9kZUlkID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgcGVyZm9ybUJhc2VBY3Rpb24obm9kZUlkKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGlua0Zvckhpc3RvcnkoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFRyZWVDb250ZW50VmFyKCkKLSAgewotICAgIHJldHVybiAiY2F0ZWdvcnlCcm93c2VyV2luZG93Q29udGVudCI7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFRyZWVDb250ZW50UGFnZSgpCi0gIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgcmV0dXJuIE9wZW5DYXRlZ29yeUJyb3dzZXJBY3Rpb24uZ2V0Q2F0ZWdvcnlDb250ZW50UGFnZShjb250cm9sbGVyXy5nZXRTZXNzaW9uSWQoKSx1ZGRpUGVyc3BlY3RpdmUuZ2V0Q2F0ZWdvcnlUTW9kZWxLZXkoKSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFRyZWVDb250YWluZXJQYWdlKCkKLSAgewotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICByZXR1cm4gT3BlbkNhdGVnb3J5QnJvd3NlckFjdGlvbi5nZXRBY3Rpb25MaW5rKGNvbnRyb2xsZXJfLmdldFNlc3Npb25JZCgpLHVkZGlQZXJzcGVjdGl2ZS5nZXRDYXRlZ29yeVRNb2RlbEtleSgpKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclZhcigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclBhZ2UoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBpbnQgZ2V0UGVyc3BlY3RpdmVJZCgpCi0gIHsKLSAgICByZXR1cm4gQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1VEREk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1RvZ2dsZU5hdmlnYXRvck5vZGVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1RvZ2dsZU5hdmlnYXRvck5vZGVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTY2ZDU2NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9Ub2dnbGVOYXZpZ2F0b3JOb2RlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuVG9nZ2xlTm9kZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLlRvb2xUeXBlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBUb2dnbGVOYXZpZ2F0b3JOb2RlQWN0aW9uIGV4dGVuZHMgVG9nZ2xlTm9kZUFjdGlvbgotewotICBwdWJsaWMgVG9nZ2xlTmF2aWdhdG9yTm9kZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyLGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCkuZ2V0TmF2aWdhdG9yTWFuYWdlcigpKTsKLSAgfQotCi0gIC8vIHVkZGkvYWN0aW9ucy9Ub2dnbGVOYXZpZ2F0b3JOb2RlQWN0aW9uLmpzcD9ub2RlSWQ9Li4uJm9wZW49Li4uCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJZCxib29sZWFuIG9wZW4pCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoInVkZGkvYWN0aW9ucy9Ub2dnbGVOYXZpZ2F0b3JOb2RlQWN0aW9uSlNQLmpzcD8iKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKS5hcHBlbmQoJz0nKS5hcHBlbmQobm9kZUlkKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpLmFwcGVuZChBY3Rpb25JbnB1dHMuT1BFTikuYXBwZW5kKCc9JykuYXBwZW5kKG9wZW4/QWN0aW9uSW5wdXRzLk9QRU5fTk9ERTpBY3Rpb25JbnB1dHMuQ0xPU0VfTk9ERSk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8vIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBvbmx5IHRvIHNlbGVjdCB0aGUgdG9nZ2xlZCBub2RlIHdoZW4sIGF0IHRoZSB0aW1lIG9mCi0gIC8vIHRoZSBjb2xsYXBzZSBldmVudCwgYSBkZXNjZW5kYW50IG5vZGUgd2FzIHNlbGVjdGVkLgotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmtGb3JIaXN0b3J5KCkKLSAgewotICAgIFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyID0gdG9nZ2xlZE5vZGVfLmdldFRvb2xNYW5hZ2VyKCk7Ci0gICAgVG9vbCBzZWxlY3RlZFRvb2wgPSB0b29sTWFuYWdlci5nZXRTZWxlY3RlZFRvb2woKTsKLSAgICBpbnQgbm9kZUlkID0gdG9nZ2xlZE5vZGVfLmdldE5vZGVJZCgpOwotICAgIGludCB0b29sSWQgPSBzZWxlY3RlZFRvb2wuZ2V0VG9vbElkKCk7Ci0gICAgaW50IHZpZXdJZCA9IHRvZ2dsZWROb2RlXy5nZXRWaWV3SWQoKTsKLSAgICBpbnQgdmlld1Rvb2xJZCA9IHRvZ2dsZWROb2RlXy5nZXRWaWV3VG9vbElkKCk7Ci0gICAgaWYgKHNlbGVjdGVkVG9vbC5nZXRUb29sVHlwZSgpICE9IFRvb2xUeXBlcy5BQ1RJT04pCi0gICAgICByZXR1cm4gU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWQsdG9vbElkLHZpZXdJZCx2aWV3VG9vbElkLHRydWUpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBTZWxlY3ROYXZpZ2F0b3JOb2RlQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlkLHRydWUpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUcmVlQ29udGVudFZhcigpCi0gIHsKLSAgICByZXR1cm4gIm5hdmlnYXRvckNvbnRlbnQiOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUcmVlQ29udGVudFBhZ2UoKQotICB7Ci0gICAgcmV0dXJuICJ1ZGRpL25hdmlnYXRvcl9jb250ZW50LmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKQotICB7Ci0gICAgcmV0dXJuICJwcm9wZXJ0aWVzQ29udGFpbmVyIjsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclBhZ2UoKQotICB7Ci0gICAgcmV0dXJuICJ1ZGRpL3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCI7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBpbnQgZ2V0UGVyc3BlY3RpdmVJZCgpCi0gIHsKLSAgICByZXR1cm4gQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1VEREk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1RyYW5zZmVyU3ViUXVlcnlSZXN1bHRzQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9UcmFuc2ZlclN1YlF1ZXJ5UmVzdWx0c0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTYyOTMxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1RyYW5zZmVyU3ViUXVlcnlSZXN1bHRzQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESU1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5CdXNpbmVzc0VsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlNlcnZpY2VFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5TZXJ2aWNlSW50ZXJmYWNlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5NdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5TdWJRdWVyeVRyYW5zZmVyVGFyZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLQotcHVibGljIGNsYXNzIFRyYW5zZmVyU3ViUXVlcnlSZXN1bHRzQWN0aW9uIGV4dGVuZHMgVURESVByb3BlcnRpZXNGb3JtQWN0aW9uCi17Ci0gIHByaXZhdGUgTm9kZSB0YXJnZXROb2RlXzsKLSAgcHVibGljIFRyYW5zZmVyU3ViUXVlcnlSZXN1bHRzQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIHRhcmdldE5vZGVfID0gbnVsbDsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCBib29sZWFuIHByb2Nlc3NQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmdbXSBzZWxlY3RlZE5vZGVJZHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgIC8vIFRoZSBjbGllbnQgSmF2YXNjcmlwdCBlbmZvcmNlcyB0aGUgcnVsZSB0aGF0IGF0IGxlYXN0IG9uZSBpdGVtIHdhcyBzZWxlY3RlZCBiZWZvcmUgdGhlIGZvcm0gY2FuIGJlIHN1Ym1pdHRlZC4KLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5TRUxFQ1RFRF9OT0RFSURTLHNlbGVjdGVkTm9kZUlkcyk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rRm9yUmV0dXJuKCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigidWRkaS9hY3Rpb25zL1RyYW5zZmVyU3ViUXVlcnlSZXN1bHRzQWN0aW9uSlNQLmpzcD8iKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChVRERJQWN0aW9uSW5wdXRzLlNIT1dfUkVTVUxUU19UQVJHRVQpLmFwcGVuZCgiPTEiKTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgZW5hYmxlU2hvd1Jlc3VsdHNUYXJnZXQoKQotICB7Ci0gICAgLy8gVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgaWYgdGhlIHVzZXIgY2xpY2tzIG9uIHRoZSB0YXJnZXQgbGluayBvbiB0aGUgcXVlcnkgcmVzdWx0cyBwYWdlLiBJbnNlcnQgYSB6ZXJvIGVsZW1lbnQKLSAgICAvLyBhcnJheSBzbyB0aGF0IG5vIHJlc3VsdHMgYXJlIHRyYW5zZmVycmVkIGJ1dCB0aGUganVtcCBiYWNrIHRvIHRoZSBjb3JyZWN0IHF1ZXJ5IGFuZCBpdHMgaW5mbyBvY2N1cnMuCi0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuU0VMRUNURURfTk9ERUlEUyxuZXcgU3RyaW5nWzBdKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICAvLyBUcmFuc2ZlciB0aGUgcmVzdWx0cyBpbiB0aGlzIFF1ZXJ5IG5vZGUgaW50byB0aGUgcHJvcGVydHkgZXhwZWN0ZWQgYnkgdGhlIG9yaWdpbmF0aW5nIG5vZGUuCi0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLQotICAgIFN0cmluZ1tdIHNlbGVjdGVkTm9kZUlkcyA9IChTdHJpbmdbXSlwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5TRUxFQ1RFRF9OT0RFSURTKTsKLSAgICBOb2RlIGN1cnJlbnROb2RlID0gZ2V0U2VsZWN0ZWROYXZpZ2F0b3JOb2RlKCk7Ci0gICAgVHJlZUVsZW1lbnQgY3VycmVudEVsZW1lbnQgPSBjdXJyZW50Tm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIFN1YlF1ZXJ5VHJhbnNmZXJUYXJnZXQgdGFyZ2V0ID0gKFN1YlF1ZXJ5VHJhbnNmZXJUYXJnZXQpKGN1cnJlbnRFbGVtZW50LmdldFByb3BlcnR5QXNPYmplY3QoVURESU1vZGVsQ29uc3RhbnRzLlNVQlFVRVJZX1RSQU5TRkVSX1RBUkdFVCkpOwotICAgIFN0cmluZyBzdWJRdWVyeUtleSA9IHRhcmdldC5nZXRTdWJRdWVyeUtleSgpOwotICAgIFN0cmluZyB0YXJnZXRRdWVyeUtleTsKLQotICAgIGludCBsYXN0U2VwYXJhdG9yUG9zID0gc3ViUXVlcnlLZXkubGFzdEluZGV4T2YoJzonKTsKLSAgICBpZiAobGFzdFNlcGFyYXRvclBvcyA9PSAtMSkKLSAgICAgIHRhcmdldFF1ZXJ5S2V5ID0gIiI7Ci0gICAgZWxzZQotICAgICAgdGFyZ2V0UXVlcnlLZXkgPSBzdWJRdWVyeUtleS5zdWJzdHJpbmcoMCxsYXN0U2VwYXJhdG9yUG9zKTsKLQotICAgIFN0cmluZyB0YXJnZXRQcm9wZXJ0eSA9IHN1YlF1ZXJ5S2V5LnN1YnN0cmluZyhsYXN0U2VwYXJhdG9yUG9zKzEsc3ViUXVlcnlLZXkubGVuZ3RoKCkpOwotICAgIEZvcm1Ub29sIHRhcmdldEZvcm1Ub29sID0gdGFyZ2V0LmdldFRhcmdldEZvcm1Ub29sKCk7Ci0gICAgKChNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSl0YXJnZXRGb3JtVG9vbCkuZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHN1YlF1ZXJ5S2V5KTsKLSAgICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgdGFyZ2V0UXVlcnlGb3JtVG9vbFBJID0gKChNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSl0YXJnZXRGb3JtVG9vbCkuZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHRhcmdldFF1ZXJ5S2V5KTsKLSAgICBWZWN0b3IgdGFyZ2V0TGlzdCA9IChWZWN0b3IpdGFyZ2V0UXVlcnlGb3JtVG9vbFBJLmdldFByb3BlcnR5KHRhcmdldFByb3BlcnR5KTsKLSAgICBpZiAodGFyZ2V0TGlzdCA9PSBudWxsKQotICAgICAgdGFyZ2V0TGlzdCA9IG5ldyBWZWN0b3IoKTsKLQotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gY3VycmVudE5vZGUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBmb3IgKGludCBpPTA7aTxzZWxlY3RlZE5vZGVJZHMubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICBpbnQgc2VsZWN0ZWROb2RlSWQgPSBJbnRlZ2VyLnBhcnNlSW50KHNlbGVjdGVkTm9kZUlkc1tpXSk7Ci0gICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldE5vZGUoc2VsZWN0ZWROb2RlSWQpOwotICAgICAgVHJlZUVsZW1lbnQgdHJlZUVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgIE9iamVjdCBvYmplY3Q7Ci0gICAgICBpZiAodHJlZUVsZW1lbnQgaW5zdGFuY2VvZiBCdXNpbmVzc0VsZW1lbnQpCi0gICAgICAgIG9iamVjdCA9ICgoQnVzaW5lc3NFbGVtZW50KXRyZWVFbGVtZW50KS5nZXRCdXNpbmVzc0VudGl0eSgpOwotICAgICAgZWxzZSBpZiAodHJlZUVsZW1lbnQgaW5zdGFuY2VvZiBTZXJ2aWNlRWxlbWVudCkKLSAgICAgICAgb2JqZWN0ID0gKChTZXJ2aWNlRWxlbWVudCl0cmVlRWxlbWVudCkuZ2V0QnVzaW5lc3NTZXJ2aWNlKCk7Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIFNlcnZpY2UgaW50ZXJmYWNlCi0gICAgICAgIG9iamVjdCA9ICgoU2VydmljZUludGVyZmFjZUVsZW1lbnQpdHJlZUVsZW1lbnQpLmdldFRNb2RlbCgpOwotICAgICAgfQotICAgICAgTGlzdEVsZW1lbnQgdGFyZ2V0TGlzdEVsZW1lbnQgPSBuZXcgTGlzdEVsZW1lbnQob2JqZWN0KTsKLSAgICAgIHRhcmdldExpc3RFbGVtZW50LnNldFRhcmdldFZpZXdUb29sSW5mbyhzZWxlY3RlZE5vZGVJZCxzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSk7Ci0gICAgICBpZiAodGFyZ2V0UHJvcGVydHkuZXF1YWxzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfQlVTSU5FU1MpIHx8IHRhcmdldFByb3BlcnR5LmVxdWFscyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQlVTSU5FU1MpIHx8IHRhcmdldFByb3BlcnR5LmVxdWFscyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1NFUlZJQ0UpKQotICAgICAgewotICAgICAgICAvLyBDbGVhciB0aGUgbWFuYWdlciBzbyBhIHJlcGxhY2VtZW50IG9jY3Vycy4KLSAgICAgICAgdGFyZ2V0TGlzdC5yZW1vdmVBbGxFbGVtZW50cygpOwotICAgICAgfQotICAgICAgdGFyZ2V0TGlzdC5hZGRFbGVtZW50KHRhcmdldExpc3RFbGVtZW50KTsKLSAgICB9Ci0gICAgdGFyZ2V0UXVlcnlGb3JtVG9vbFBJLnNldFByb3BlcnR5KHRhcmdldFByb3BlcnR5LHRhcmdldExpc3QpOwotICAgIEhhc2h0YWJsZSBzYXZlZFBhcmVudFF1ZXJ5UHJvcGVydGllcyA9IHRhcmdldC5nZXRQYXJlbnRRdWVyeURhdGEoKTsKLSAgICBFbnVtZXJhdGlvbiBlID0gc2F2ZWRQYXJlbnRRdWVyeVByb3BlcnRpZXMua2V5cygpOwotICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIFN0cmluZyBrZXkgPSAoU3RyaW5nKWUubmV4dEVsZW1lbnQoKTsKLSAgICAgIHRhcmdldFF1ZXJ5Rm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShrZXksc2F2ZWRQYXJlbnRRdWVyeVByb3BlcnRpZXMuZ2V0KGtleSkpOwotICAgIH0KLQotICAgIC8vIFNlbGVjdCB0aGUgbm9kZSBhbmQgdGhlIGRhdGFzdHJ1Y3R1cmUgd2hpY2ggaXMgdGhlIHRhcmdldCBvZiB0aGUgc3VicXVlcnkuCi0gICAgaW50IHRhcmdldE5vZGVJZCA9IHRhcmdldC5nZXROb2RlSWQoKTsKLSAgICBpbnQgdGFyZ2V0VG9vbElkID0gdGFyZ2V0LmdldFRvb2xJZCgpOwotICAgIGludCB0YXJnZXRWaWV3SWQgPSB0YXJnZXQuZ2V0Vmlld0lkKCk7Ci0gICAgaW50IHRhcmdldFZpZXdUb29sSWQgPSB0YXJnZXQuZ2V0Vmlld1Rvb2xJZCgpOwotICAgIG5vZGVNYW5hZ2VyLnNldFNlbGVjdGVkTm9kZUlkKHRhcmdldE5vZGVJZCk7Ci0gICAgdGFyZ2V0Tm9kZV8gPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICB0YXJnZXROb2RlXy5nZXRUb29sTWFuYWdlcigpLnNldFNlbGVjdGVkVG9vbElkKHRhcmdldFRvb2xJZCk7Ci0gICAgdGFyZ2V0Tm9kZV8uc2V0Vmlld0lkKHRhcmdldFZpZXdJZCk7Ci0gICAgaWYgKHRhcmdldFZpZXdJZCAhPSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpCi0gICAgICB0YXJnZXROb2RlXy5nZXRWaWV3VG9vbE1hbmFnZXIoKS5zZXRTZWxlY3RlZFRvb2xJZCh0YXJnZXRWaWV3VG9vbElkKTsKLSAgICB0YXJnZXRGb3JtVG9vbC5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSx0YXJnZXRRdWVyeUtleSk7Ci0gICAgYWRkVG9IaXN0b3J5KEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9VRERJLFNlbGVjdEZpbmRUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsodGFyZ2V0Tm9kZUlkLHRhcmdldFRvb2xJZCx0YXJnZXRWaWV3SWQsdGFyZ2V0Vmlld1Rvb2xJZCx0YXJnZXRRdWVyeUtleSx0cnVlKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgTm9kZSBnZXRUYXJnZXROb2RlKCkKLSAgewotICAgIHJldHVybiB0YXJnZXROb2RlXzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVHJhbnNmZXJUb0FkZENhdGVnb3J5RGF0YUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVHJhbnNmZXJUb0FkZENhdGVnb3J5RGF0YUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MWI1MDgzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1RyYW5zZmVyVG9BZGRDYXRlZ29yeURhdGFBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLQotcHVibGljIGNsYXNzIFRyYW5zZmVyVG9BZGRDYXRlZ29yeURhdGFBY3Rpb24gZXh0ZW5kcyBBY3Rpb24KLXsKLSAgcHVibGljIFRyYW5zZmVyVG9BZGRDYXRlZ29yeURhdGFBY3Rpb24oKQotICB7Ci0gIH0KLQotICAvLyB1ZGRpL2FjdGlvbnMvVHJhbnNmZXJUb0FkZENhdGVnb3J5RGF0YUFjdGlvbkpTUC5qc3A/c2Vzc2lvbklkPS4uLiZjYXRlZ29yeVRNb2RlbEtleT0uLi4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGluayhTdHJpbmcgc2Vzc2lvbklkLFN0cmluZyBjYXRlZ29yeVRNb2RlbEtleSkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigidWRkaS9hY3Rpb25zL1RyYW5zZmVyVG9BZGRDYXRlZ29yeURhdGFBY3Rpb25KU1AuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpLmFwcGVuZCgnPScpLmFwcGVuZChzZXNzaW9uSWQpLmFwcGVuZCgnJicpLmFwcGVuZChVRERJQWN0aW9uSW5wdXRzLkNBVEVHT1JZX1RNT0RFTF9LRVkpLmFwcGVuZCgnPScpLmFwcGVuZChjYXRlZ29yeVRNb2RlbEtleSk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcG9wdWxhdGVQcm9wZXJ0eVRhYmxlKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0KQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VERElBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVURESUFkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5OWU4MWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVURESUFkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLldTRExFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuTGlua0FjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5TZXJ2aWNlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkudXRpbC5VZGRpNGpIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy5PcGVuV1NETEFjdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnNlcnZpY2UuQnVzaW5lc3NTZXJ2aWNlOwotCi1wdWJsaWMgY2xhc3MgVURESUFkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uIGV4dGVuZHMgTGlua0FjdGlvbgotewotICBwdWJsaWMgVURESUFkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlkLGludCB0b29sSWQsaW50IHZpZXdJZCxpbnQgdmlld1Rvb2xJZCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigidWRkaS9hY3Rpb25zL1VERElBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbkpTUC5qc3A/Iik7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChub2RlSWQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlRPT0xJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCh0b29sSWQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCh2aWV3SWQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdUT09MSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQodmlld1Rvb2xJZCk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NMaW5rUGFyYW1ldGVycyhIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCkKLSAgewotICAgIFN0cmluZyBub2RlSWRTdHJpbmcgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICAvLyBQZXJmb3JtIGRhdGEgdmFsaWRhdGlvbi4KLSAgICB0cnkKLSAgICB7Ci0gICAgICBJbnRlZ2VyLnBhcnNlSW50KG5vZGVJZFN0cmluZyk7Ci0gICAgfQotICAgIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBWYWxpZGF0aW9uIGZhaWxlZCEKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5OT0RFSUQsbm9kZUlkU3RyaW5nKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBpbnQgbm9kZUlkID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgIE5vZGUgbm9kZSA9IG5vZGVNYW5hZ2VyLmdldE5vZGUobm9kZUlkKTsKLSAgICBUcmVlRWxlbWVudCBlbGVtZW50ID0gbm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgU2VydmljZUVsZW1lbnQpCi0gICAgewotICAgICAgU2VydmljZUVsZW1lbnQgc2VydmljZUVsZW1lbnQgPSAoU2VydmljZUVsZW1lbnQpZWxlbWVudDsKLSAgICAgIEJ1c2luZXNzU2VydmljZSBicyA9IHNlcnZpY2VFbGVtZW50LmdldEJ1c2luZXNzU2VydmljZSgpOwotICAgICAgVWRkaTRqSGVscGVyIHVkZGk0akhlbHBlciA9IG5ldyBVZGRpNGpIZWxwZXIoKTsKLSAgICAgIFN0cmluZyB3c2RsVVJMID0gdWRkaTRqSGVscGVyLmdldFdTREwoYnMsIHNlcnZpY2VFbGVtZW50LmdldFJlZ2lzdHJ5RWxlbWVudCgpLmdldFByb3h5KCkpOwotICAgICAgaWYgKHdzZGxVUkwgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBEZWZpbml0aW9uIGRlZiA9IHVkZGk0akhlbHBlci5nZXRXU0RMRGVmaW5pdGlvbih3c2RsVVJMKTsKLSAgICAgICAgICBGaWxlIHRlbXBGaWxlID0gRmlsZS5jcmVhdGVUZW1wRmlsZSgidGVtcCIsIi53c2RsIik7Ci0gICAgICAgICAgVURESUltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb24gYWN0aW9uID0gbmV3IFVERElJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICAgICAgICBhY3Rpb24ud3JpdGVXU0RMRGVmaW5pdGlvbihuZXcgRmlsZU91dHB1dFN0cmVhbSh0ZW1wRmlsZSksZGVmKTsKLSAgICAgICAgICB3c2RsVVJMID0gdGVtcEZpbGUudG9VUkwoKS50b1N0cmluZygpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChXU0RMRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICB3c2RsVVJMID0gbnVsbDsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICB3c2RsVVJMID0gbnVsbDsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIHdzZGxVUkwgPSBudWxsOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAgIAotICAgICAgaWYgKHdzZGxVUkwgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgT3BlbldTRExBY3Rpb24gb3BlbldTRExBY3Rpb24gPSBuZXcgT3BlbldTRExBY3Rpb24oY29udHJvbGxlcl8pOwotICAgICAgICBIYXNodGFibGUgcHJvcGVydHlUYWJsZSA9IG9wZW5XU0RMQWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICAgICAgcHJvcGVydHlUYWJsZS5wdXQoQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dTRExfVVJMLHdzZGxVUkwpOwotICAgICAgICBib29sZWFuIGFjdGlvblJlc3VsdCA9IG9wZW5XU0RMQWN0aW9uLnJ1bigpOwotICAgICAgICBpZiAoYWN0aW9uUmVzdWx0KSB7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX1dTRExfQURERURfVE9fV1NETF9QRVJTUEVDVElWRSIsd3NkbFVSTCkpOwotICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfV1NETF9OT1RfQURERURfVE9fV1NETF9QRVJTUEVDVElWRSIpKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VERElFeGNlcHRpb25IYW5kbGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VRERJRXhjZXB0aW9uSGFuZGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZmZhODQyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VERElFeGNlcHRpb25IYW5kbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNDE5IDE4Mjg2NCAgIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy51ZGRpNGouVURESUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLkRpc3Bvc2l0aW9uUmVwb3J0OwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuUmVzdWx0OwotCi1wdWJsaWMgY2xhc3MgVURESUV4Y2VwdGlvbkhhbmRsZXIgewotCi0JcHVibGljIHN0YXRpYyBib29sZWFuIHJlcXVpcmVzUmVzZXQoVURESUV4Y2VwdGlvbiBlKXsKLQkJCi0gICAgCURpc3Bvc2l0aW9uUmVwb3J0IGRwID0gZS5nZXREaXNwb3NpdGlvblJlcG9ydCgpOwotICAgIAlWZWN0b3IgcnYgPSBkcC5nZXRSZXN1bHRWZWN0b3IoKTsKLSAgICAJZm9yKGludCBpID0gMDtpIDwgcnYuc2l6ZSgpO2krKyl7Ci0gICAgCQlSZXN1bHQgcmVzdWx0ID0gKFJlc3VsdClydi5nZXQoaSk7Ci0gICAgCQlpZihyZXN1bHQuZ2V0RXJybm8oKS5lcXVhbHMoIjEwMTQwIikpCi0gICAgCQkJIHJldHVybiB0cnVlOwotICAgIAl9Ci0gICAgCXJldHVybiBmYWxzZTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VRERJSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVURESUltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmJmZGQ2NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VRERJSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLldTRExGaWxlTmFtZUhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5TZXJ2aWNlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuU2VydmljZUludGVyZmFjZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkudXRpbC5VZGRpNGpIZWxwZXI7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5zZXJ2aWNlLkJ1c2luZXNzU2VydmljZTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci0KLXB1YmxpYyBjbGFzcyBVRERJSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbiBleHRlbmRzIEltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbgotewotICBwcml2YXRlIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyXzsKLSAgcHJpdmF0ZSBEZWZpbml0aW9uIGRlZl87Ci0gIHByaXZhdGUgU3RyaW5nIGRlZmF1bHRXU0RMRmlsZU5hbWVfOwotCi0gIHB1YmxpYyBVRERJSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICBub2RlTWFuYWdlcl8gPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgICBkZWZfID0gbnVsbDsKLSAgICBkZWZhdWx0V1NETEZpbGVOYW1lXyA9ICJ0ZW1wLndzZGwiOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlkLGludCB0b29sSWQsaW50IHZpZXdJZCxpbnQgdmlld1Rvb2xJZCkKLSAgewotICAgIHJldHVybiBJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWQsdG9vbElkLHZpZXdJZCx2aWV3VG9vbElkLCJ1ZGRpL2FjdGlvbnMvVURESUltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb25KU1AuanNwIik7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiB3cml0ZShPdXRwdXRTdHJlYW0gb3MpCi0gIHsKLSAgICByZXR1cm4gd3JpdGVXU0RMRGVmaW5pdGlvbihvcyxkZWZfKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0RGVmYXVsdEZpbGVOYW1lKCkKLSAgewotICAgIHJldHVybiBkZWZhdWx0V1NETEZpbGVOYW1lXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCkuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgaW50IG5vZGVJZCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgIE5vZGUgbm9kZSA9IG5vZGVNYW5hZ2VyXy5nZXROb2RlKG5vZGVJZCk7Ci0gICAgVWRkaTRqSGVscGVyIHVkZGk0akhlbHBlciA9IG5ldyBVZGRpNGpIZWxwZXIoKTsKLSAgICBTdHJpbmcgd3NkbFVybCA9IG51bGw7Ci0gICAgaWYgKG5vZGUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBUcmVlRWxlbWVudCBlbGVtZW50ID0gbm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBTZXJ2aWNlRWxlbWVudCkKLSAgICAgIHsKLSAgICAgICAgU2VydmljZUVsZW1lbnQgc2VydmljZUVsZW1lbnQgPSAoU2VydmljZUVsZW1lbnQpZWxlbWVudDsKLSAgICAgICAgQnVzaW5lc3NTZXJ2aWNlIGJzID0gc2VydmljZUVsZW1lbnQuZ2V0QnVzaW5lc3NTZXJ2aWNlKCk7Ci0gICAgICAgIHdzZGxVcmwgPSB1ZGRpNGpIZWxwZXIuZ2V0V1NETChicywgc2VydmljZUVsZW1lbnQuZ2V0UmVnaXN0cnlFbGVtZW50KCkuZ2V0UHJveHkoKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgU2VydmljZUludGVyZmFjZUVsZW1lbnQpCi0gICAgICB7Ci0gICAgICAgIFRNb2RlbCB0TW9kZWwgPSAoKFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KWVsZW1lbnQpLmdldFRNb2RlbCgpOwotICAgICAgICB3c2RsVXJsID0gdWRkaTRqSGVscGVyLmdldFdTREwodE1vZGVsKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHdzZGxVcmwgIT0gbnVsbCkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgZGVmXyA9IHVkZGk0akhlbHBlci5nZXRXU0RMRGVmaW5pdGlvbih3c2RsVXJsKTsKLSAgICAgICAgaWYgKGRlZl8gIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyB3c2RsUGF0aG5hbWU7Ci0gICAgICAgICAgaW50IGluZGV4ID0gd3NkbFVybC5pbmRleE9mKCcvJyk7Ci0gICAgICAgICAgaWYgKGluZGV4ICE9IC0xKQotICAgICAgICAgICAgd3NkbFBhdGhuYW1lID0gd3NkbFVybC5zdWJzdHJpbmcoaW5kZXgrMSwgd3NkbFVybC5sZW5ndGgoKSk7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgd3NkbFBhdGhuYW1lID0gd3NkbFVybDsKLSAgICAgICAgICBkZWZhdWx0V1NETEZpbGVOYW1lXyA9IFdTRExGaWxlTmFtZUhlbHBlci5nZXRXU0RMRmlsZU5hbWUod3NkbFBhdGhuYW1lKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICAgIHsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlcl8uZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1JFVFJJRVZJTkdfV1NETF9ET0MiKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFZhcigpCi0gIHsKLSAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCkuZ2V0U3RhdHVzQ29udGVudFZhcigpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTdGF0dXNDb250ZW50UGFnZSgpCi0gIHsKLSAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCkuZ2V0U3RhdHVzQ29udGVudFBhZ2UoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVURESUltcG9ydFdTRExUb1dvcmtiZW5jaEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVURESUltcG9ydFdTRExUb1dvcmtiZW5jaEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjgyM2Q5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VERElJbXBvcnRXU0RMVG9Xb3JrYmVuY2hBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5JbXBvcnRUb1dvcmtiZW5jaEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLQotcHVibGljIGNsYXNzIFVERElJbXBvcnRXU0RMVG9Xb3JrYmVuY2hBY3Rpb24gZXh0ZW5kcyBJbXBvcnRUb1dvcmtiZW5jaEFjdGlvbgotewotICBwdWJsaWMgVURESUltcG9ydFdTRExUb1dvcmtiZW5jaEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHB1YmxpYyBGb3JtVG9vbCBnZXRTZWxlY3RlZEZvcm1Ub29sKCkKLSAgewotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICByZXR1cm4gKEZvcm1Ub29sKXVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlKCkuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCk7Ci0gIH0KLQotICAgIHB1YmxpYyBJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24gbmV3SW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uKCkgewotICAgICAgICBVRERJSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbiBhY3Rpb24gPSBuZXcgVURESUltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb24oY29udHJvbGxlcl8pOwotICAgICAgICBIYXNodGFibGUgdGFibGUgPSBhY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotCi0gICAgICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICAgICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotCi0gICAgICAgIHRhYmxlLnB1dChBY3Rpb25JbnB1dHMuTk9ERUlELCBTdHJpbmcudmFsdWVPZihzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCkpKTsKLQotICAgICAgICByZXR1cm4gYWN0aW9uOwotICAgIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRWYXIoKQotICB7Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpLmdldFN0YXR1c0NvbnRlbnRWYXIoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFBhZ2UoKQotICB7Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpLmdldFN0YXR1c0NvbnRlbnRQYWdlKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VERElMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VRERJTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDk1Mjg0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VERElMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuU2VydmljZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlNlcnZpY2VJbnRlcmZhY2VFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS51dGlsLlVkZGk0akhlbHBlcjsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnNlcnZpY2UuQnVzaW5lc3NTZXJ2aWNlOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLlRNb2RlbDsKLQotcHVibGljIGNsYXNzIFVERElMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uIGV4dGVuZHMgTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbgotewotICBwdWJsaWMgVURESUxhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwdWJsaWMgRm9ybVRvb2wgZ2V0U2VsZWN0ZWRGb3JtVG9vbCgpCi0gIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgcmV0dXJuIChGb3JtVG9vbCl1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgICBOb2RlIG5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBUcmVlRWxlbWVudCBlbGVtZW50ID0gbm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIFVkZGk0akhlbHBlciB1ZGRpNGpIZWxwZXIgPSBuZXcgVWRkaTRqSGVscGVyKCk7Ci0gICAgU3RyaW5nIHdzZGxVcmwgPSBudWxsOwotICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgU2VydmljZUVsZW1lbnQpCi0gICAgewotICAgICAgU2VydmljZUVsZW1lbnQgc2VydmljZUVsZW1lbnQgPSAoU2VydmljZUVsZW1lbnQpZWxlbWVudDsKLSAgICAgIEJ1c2luZXNzU2VydmljZSBicyA9IHNlcnZpY2VFbGVtZW50LmdldEJ1c2luZXNzU2VydmljZSgpOwotICAgICAgd3NkbFVybCA9IHVkZGk0akhlbHBlci5nZXRXU0RMKGJzLCBzZXJ2aWNlRWxlbWVudC5nZXRSZWdpc3RyeUVsZW1lbnQoKS5nZXRQcm94eSgpKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KQotICAgIHsKLSAgICAgIFRNb2RlbCB0TW9kZWwgPSAoKFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KWVsZW1lbnQpLmdldFRNb2RlbCgpOwotICAgICAgd3NkbFVybCA9IHVkZGk0akhlbHBlci5nZXRXU0RMKHRNb2RlbCk7Ci0gICAgfQotCi0gICAgdHJ5Ci0gICAgewotICAgICAgaWYgKHdzZGxVcmwgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgRGVmaW5pdGlvbiBkZWYgPSB1ZGRpNGpIZWxwZXIuZ2V0V1NETERlZmluaXRpb24od3NkbFVybCk7Ci0gICAgICAgIEZpbGUgdGVtcEZpbGUgPSBGaWxlLmNyZWF0ZVRlbXBGaWxlKCJ0ZW1wIiwiLndzZGwiKTsKLSAgICAgICAgVURESUltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb24gYWN0aW9uID0gbmV3IFVERElJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICAgICAgYWN0aW9uLndyaXRlV1NETERlZmluaXRpb24obmV3IEZpbGVPdXRwdXRTdHJlYW0odGVtcEZpbGUpLGRlZik7Ci0gICAgICAgIHdzZGxVcmwgPSB0ZW1wRmlsZS50b1VSTCgpLnRvU3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiBsYXVuY2hXaXphcmQod3NkbFVybCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyXy5nZXRNZXNzYWdlKCJNU0dfRVJST1JfUkVUUklFVklOR19XU0RMX0RPQyIpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTdGF0dXNDb250ZW50VmFyKCkKLSAgewotICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKS5nZXRTdGF0dXNDb250ZW50VmFyKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRQYWdlKCkKLSAgewotICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKS5nZXRTdGF0dXNDb250ZW50UGFnZSgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VRERJTm9kZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVURESU5vZGVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWE1ODkyYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VRERJTm9kZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLk5vZGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuUmVnaXN0cnlOb2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElNYWluTm9kZTsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFVERElOb2RlQWN0aW9uIGV4dGVuZHMgTm9kZUFjdGlvbgotewotICBwcm90ZWN0ZWQgUmVnaXN0cnlOb2RlIHJlZ05vZGVfOwotICBwdWJsaWMgVURESU5vZGVBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcixjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpLmdldE5hdmlnYXRvck1hbmFnZXIoKSk7Ci0gICAgcmVnTm9kZV8gPSBnZXRSZWdpc3RyeU5vZGUoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBOb2RlIGdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpCi0gIHsKLSAgICBOb2RlIHNlbGVjdGVkTmF2aWdhdG9yTm9kZSA9IG5vZGVNYW5hZ2VyXy5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICByZXR1cm4gc2VsZWN0ZWROYXZpZ2F0b3JOb2RlOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFJlZ2lzdHJ5Tm9kZSBnZXRSZWdpc3RyeU5vZGUoKQotICB7Ci0gICAgVURESU1haW5Ob2RlIHVkZGlNYWluTm9kZSA9IChVRERJTWFpbk5vZGUpbm9kZU1hbmFnZXJfLmdldFJvb3ROb2RlKCk7Ci0gICAgcmV0dXJuIHVkZGlNYWluTm9kZS5nZXRSZWdpc3RyeU5vZGUoZ2V0U2VsZWN0ZWROYXZpZ2F0b3JOb2RlKCkpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VRERJUHJvcGVydGllc0Zvcm1BY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VERElQcm9wZXJ0aWVzRm9ybUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTgwMWRmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VERElQcm9wZXJ0aWVzRm9ybUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkZvcm1BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5SZWdpc3RyeU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESU1haW5Ob2RlOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgVURESVByb3BlcnRpZXNGb3JtQWN0aW9uIGV4dGVuZHMgRm9ybUFjdGlvbgotewotICBwcm90ZWN0ZWQgTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlcl87Ci0gIHB1YmxpYyBVRERJUHJvcGVydGllc0Zvcm1BY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgbmF2aWdhdG9yTWFuYWdlcl8gPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBOb2RlIGdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpCi0gIHsKLSAgICByZXR1cm4gbmF2aWdhdG9yTWFuYWdlcl8uZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgRm9ybVRvb2wgZ2V0U2VsZWN0ZWRGb3JtVG9vbCgpCi0gIHsKLSAgICByZXR1cm4gKEZvcm1Ub29sKShnZXRTZWxlY3RlZE5hdmlnYXRvck5vZGUoKS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgUmVnaXN0cnlOb2RlIGdldFJlZ2lzdHJ5Tm9kZSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0UmVnaXN0cnlOb2RlKGdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBSZWdpc3RyeU5vZGUgZ2V0UmVnaXN0cnlOb2RlKE5vZGUgcmVnaXN0cnlDaGlsZE5vZGUpCi0gIHsKLSAgICBVRERJTWFpbk5vZGUgdWRkaU1haW5Ob2RlID0gKFVERElNYWluTm9kZSluYXZpZ2F0b3JNYW5hZ2VyXy5nZXRSb290Tm9kZSgpOwotICAgIHJldHVybiB1ZGRpTWFpbk5vZGUuZ2V0UmVnaXN0cnlOb2RlKHJlZ2lzdHJ5Q2hpbGROb2RlKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVW5wdWJsaXNoQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VbnB1Ymxpc2hBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWRjMzdkMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VbnB1Ymxpc2hBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA0MTkgMTgyODY0ICAgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuQnVzaW5lc3NFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlNlcnZpY2VFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5TZXJ2aWNlSW50ZXJmYWNlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5SZWdpc3RyeU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlZhbGlkYXRvcjsKLWltcG9ydCBvcmcudWRkaTRqLlVERElFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai5jbGllbnQuVURESVByb3h5OwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuRGlzcG9zaXRpb25SZXBvcnQ7Ci1pbXBvcnQgb3JnLnVkZGk0ai50cmFuc3BvcnQuVHJhbnNwb3J0RXhjZXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgVW5wdWJsaXNoQWN0aW9uIGV4dGVuZHMgVURESVByb3BlcnRpZXNGb3JtQWN0aW9uCi17Ci0gIHByb3RlY3RlZCBSZWdpc3RyeU5vZGUgcmVnaXN0cnlOb2RlXzsKLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNMb2dnZWRJbl87Ci0KLSAgcHVibGljIFVucHVibGlzaEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICByZWdpc3RyeU5vZGVfID0gZ2V0UmVnaXN0cnlOb2RlKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBwcm9jZXNzUGFyc2VkUmVzdWx0cyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ2lzdHJ5Tm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICBGb3JtVG9vbCBmb3JtVG9vbCA9IGdldFNlbGVjdGVkRm9ybVRvb2woKTsKLQotICAgIC8vIGlmIG5vdCB5ZXQgbG9nZ2VkIGluLCB2YWxpZGF0ZSB0aGUgcGFyYW1ldGVycyBuZWVkZWQgdG8gbG9nIGluCi0gICAgaWYgKCFyZWdFbGVtZW50LmlzTG9nZ2VkSW4oKSkKLSAgICB7Ci0gICAgICBTdHJpbmcgcHVibGlzaFVSTCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICAgICBTdHJpbmcgdXNlcklkID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICAgICBTdHJpbmcgcGFzc3dvcmQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotCi0gICAgICBib29sZWFuIGlucHV0c1ZhbGlkID0gdHJ1ZTsKLSAgICAgIGlmIChwdWJsaXNoVVJMICE9IG51bGwpCi0gICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMLCBwdWJsaXNoVVJMKTsKLSAgICAgICAgCi0gICAgICBpZiAoIVZhbGlkYXRvci52YWxpZGF0ZVVSTChwdWJsaXNoVVJMKSkKLSAgICAgIHsKLSAgICAgICAgZm9ybVRvb2wuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfUFVCTElTSF9VUkwiKSk7Ci0gICAgICB9Ci0KLSAgICAgIGlmICh1c2VySWQgIT0gbnVsbCkKLSAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklELHVzZXJJZCk7Ci0gICAgICAgIAotICAgICAgaWYgKCFWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmcodXNlcklkKSkKLSAgICAgIHsKLSAgICAgICAgZm9ybVRvb2wuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX1VTRVJJRCIpKTsKLSAgICAgIH0KLQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQsIHBhc3N3b3JkKTsKLSAgICAgIAotICAgICAgZm9ybVRvb2wudXBkYXRlUHJvcGVydHlUYWJsZShwcm9wZXJ0eVRhYmxlXyk7Ci0KLSAgICAgIHJldHVybiBpbnB1dHNWYWxpZDsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLQotCVJlZ2lzdHJ5RWxlbWVudCByZWdpc3RyeUVsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ2lzdHJ5Tm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBpZiAoIXJlZ2lzdHJ5RWxlbWVudC5pc0xvZ2dlZEluKCkpCi0gICAgICB7Ci0gICAgICAgIC8vIGlmIG5vdCB5ZXQgbG9nZ2VkIGluLCBsb2cgaW4gZmlyc3QKLSAgICAgICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICAgICAgU3RyaW5nIHVzZXJJZCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICAgICAgU3RyaW5nIHBhc3N3b3JkID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCk7Ci0gICAgICAgIAotICAgICAgICByZWdpc3RyeUVsZW1lbnQucGVyZm9ybUxvZ2luKHB1Ymxpc2hVUkwsdXNlcklkLHBhc3N3b3JkKTsKLSAgICAgIH0KLQotICAgICAgU3RyaW5nIHNlbGVjdGVkRWxlbWVudEtleSA9IHNlbGVjdGVkRWxlbWVudC5nZXRLZXkoKTsKLSAgICAgIFN0cmluZyB1bnB1Ymxpc2hUeXBlTWVzc2FnZUtleSA9IG51bGw7Ci0gICAgICBVRERJUHJveHkgcHJveHkgPSByZWdpc3RyeUVsZW1lbnQuZ2V0UHJveHkoKTsKLSAgICAgIFN0cmluZyBhdXRoSW5mbyA9IHJlZ2lzdHJ5RWxlbWVudC5nZXRBdXRoSW5mb1N0cmluZygpOwotICAgICAgRGlzcG9zaXRpb25SZXBvcnQgZHIgPSBudWxsOwotICAgICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEJ1c2luZXNzRWxlbWVudCkKLSAgICAgIHsKLSAgICAgICAgdW5wdWJsaXNoVHlwZU1lc3NhZ2VLZXkgPSAiTVNHX0lORk9fQlVTSU5FU1NfVU5QVUJMSVNIRUQiOwotICAgICAgICBkciA9IHByb3h5LmRlbGV0ZV9idXNpbmVzcyhhdXRoSW5mbyxzZWxlY3RlZEVsZW1lbnRLZXkpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgU2VydmljZUVsZW1lbnQpCi0gICAgICB7Ci0gICAgICAgIHVucHVibGlzaFR5cGVNZXNzYWdlS2V5ID0gIk1TR19JTkZPX1NFUlZJQ0VfVU5QVUJMSVNIRUQiOwotICAgICAgICBkciA9IHByb3h5LmRlbGV0ZV9zZXJ2aWNlKGF1dGhJbmZvLHNlbGVjdGVkRWxlbWVudEtleSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCkKLSAgICAgIHsKLSAgICAgICAgdW5wdWJsaXNoVHlwZU1lc3NhZ2VLZXkgPSAiTVNHX0lORk9fU0VSVklDRV9JTlRFUkZBQ0VfVU5QVUJMSVNIRUQiOwotICAgICAgICBkciA9IHByb3h5LmRlbGV0ZV90TW9kZWwoYXV0aEluZm8sc2VsZWN0ZWRFbGVtZW50S2V5KTsKLSAgICAgIH0KLSAgICAgIGlmICghZHIuc3VjY2VzcygpKQotICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKGRyLnRvU3RyaW5nKCkpOwotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBzZWxlY3RlZEVsZW1lbnQuZGlzY29ubmVjdEFsbCgpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSh1bnB1Ymxpc2hUeXBlTWVzc2FnZUtleSxzZWxlY3RlZEVsZW1lbnQuZ2V0TmFtZSgpKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgaGFuZGxlVW5leHBlY3RlZEV4Y2VwdGlvbih1ZGRpUGVyc3BlY3RpdmUsbWVzc2FnZVF1ZXVlLCJUcmFuc3BvcnRFeGNlcHRpb24iLGUpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAJaWYoVURESUV4Y2VwdGlvbkhhbmRsZXIucmVxdWlyZXNSZXNldChlKSkKLSAgICAJCXJlZ2lzdHJ5RWxlbWVudC5zZXREZWZhdWx0cygpOwotICAgIAltZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0Q29udHJvbGxlcigpLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgIAltZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVURESUV4Y2VwdGlvbiIpOwotICAgIAltZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLnRvU3RyaW5nKCkpOwotICAgIAlyZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBoYW5kbGVVbmV4cGVjdGVkRXhjZXB0aW9uKHVkZGlQZXJzcGVjdGl2ZSxtZXNzYWdlUXVldWUsIk1hbGZvcm1lZFVSTEV4Y2VwdGlvbiIsZSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBoYW5kbGVVbmV4cGVjdGVkRXhjZXB0aW9uKHVkZGlQZXJzcGVjdGl2ZSwgbWVzc2FnZVF1ZXVlLCAiRXhjZXB0aW9uIiwgZSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VcGRhdGVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VwZGF0ZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MmU0NjZhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VwZGF0ZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLk1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyLklUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLkJ1c2luZXNzRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5TZXJ2aWNlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuU2VydmljZUludGVyZmFjZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuUHVibGlzaGVkSXRlbXNOb2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlJlZ2lzdHJ5Tm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVmFsaWRhdG9yOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYnVzaW5lc3MuQnVzaW5lc3NFbnRpdHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5zZXJ2aWNlLkJ1c2luZXNzU2VydmljZTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBVcGRhdGVBY3Rpb24gZXh0ZW5kcyBVRERJUHJvcGVydGllc0Zvcm1BY3Rpb24KLXsKLSAgcHJvdGVjdGVkIFJlZ2lzdHJ5Tm9kZSByZWdOb2RlXzsKLSAgcHJpdmF0ZSBib29sZWFuIHJlcXVpcmVzQXV0aGVudGljYXRpb25fOwotICBwdWJsaWMgVXBkYXRlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcixib29sZWFuIHJlcXVpcmVzQXV0aGVudGljYXRpb24pCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICByZWdOb2RlXyA9IGdldFJlZ2lzdHJ5Tm9kZSgpOwotICAgIHJlcXVpcmVzQXV0aGVudGljYXRpb25fID0gcmVxdWlyZXNBdXRoZW50aWNhdGlvbjsKLSAgfQotICAKLSAgcHJvdGVjdGVkIGFic3RyYWN0IGJvb2xlYW4gcHJvY2Vzc090aGVycyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIsRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLSAgCi0gIHByb3RlY3RlZCBmaW5hbCBib29sZWFuIHByb2Nlc3NQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBTZXR1cCBmb3IgTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXJUcmFuc2Zvcm1lcgotICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuTVVMVElQQVJUX0ZPUk1fREFUQV9QQVJTRVIsIHBhcnNlcik7Ci0KLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICBGb3JtVG9vbCBmb3JtVG9vbCA9IGdldFNlbGVjdGVkRm9ybVRvb2woKTsKLSAgICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSA9IGZvcm1Ub29sOwotICAgIGZvcm1Ub29sUEkuY2xlYXJFcnJvcnMoKTsKLSAgICBib29sZWFuIGlucHV0c1ZhbGlkID0gcHJvY2Vzc090aGVycyhwYXJzZXIsZm9ybVRvb2xQSSk7Ci0gICAgZm9yIChpbnQgaT0wO2k8cmVtb3ZlZFByb3BlcnRpZXNfLnNpemUoKTtpKyspCi0gICAgICBmb3JtVG9vbFBJLnJlbW92ZVByb3BlcnR5KHJlbW92ZWRQcm9wZXJ0aWVzXy5lbGVtZW50QXQoaSkpOwotICAgIGZvcm1Ub29sUEkudXBkYXRlUHJvcGVydHlUYWJsZShwcm9wZXJ0eVRhYmxlXyk7Ci0gICAgCi0gICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgIFN0cmluZyB1c2VySWQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICBTdHJpbmcgcGFzc3dvcmQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgIAotICAgIGJvb2xlYW4gdmFsaWRhdGVBdXRoZW50aWNhdGlvbiA9ICFyZWdFbGVtZW50LmlzTG9nZ2VkSW4oKSAmIHJlcXVpcmVzQXV0aGVudGljYXRpb25fOwotICAgIAotICAgIGlmIChwdWJsaXNoVVJMICE9IG51bGwpCi0gICAgewotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwscHVibGlzaFVSTCk7Ci0gICAgICBmb3JtVG9vbC5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMLHB1Ymxpc2hVUkwpOwotICAgIH0KLSAgICAKLSAgICBpZiAodmFsaWRhdGVBdXRoZW50aWNhdGlvbiAmJiAhVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nKHB1Ymxpc2hVUkwpKQotICAgIHsKLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICBmb3JtVG9vbC5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfUFVCTElTSF9VUkwiKSk7Ci0gICAgfQotICAgIAotICAgIGlmICh1c2VySWQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQsdXNlcklkKTsKLSAgICAgIGZvcm1Ub29sLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklELHVzZXJJZCk7Ci0gICAgfQotICAgIAotICAgIGlmICh2YWxpZGF0ZUF1dGhlbnRpY2F0aW9uICYmICFWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmcodXNlcklkKSkKLSAgICB7Ci0gICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgZm9ybVRvb2wuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9VU0VSSUQiKSk7Ci0gICAgfQotICAgIAotICAgIGlmIChwYXNzd29yZCAhPSBudWxsKQotICAgIHsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JELHBhc3N3b3JkKTsKLSAgICAgIGZvcm1Ub29sLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQscGFzc3dvcmQpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gaW5wdXRzVmFsaWQ7Ci0gIH0KLQotICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiByZWZyZXNoRnJvbVJlZ2lzdHJ5KCk7Ci0gIAotICBwcm90ZWN0ZWQgZmluYWwgdm9pZCByZWZyZXNoTm9kZShCdXNpbmVzc0VudGl0eSBiZSkKLSAgewotICAgIE5vZGUgbm9kZSA9IGdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpOwotICAgIE5vZGUgcGFyZW50Tm9kZSA9IG5vZGUuZ2V0UGFyZW50KCk7Ci0gICAgVHJlZUVsZW1lbnQgZWxlbWVudCA9IG5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBlbGVtZW50LmRpc2Nvbm5lY3RBbGwoKTsKLSAgICBCdXNpbmVzc0VsZW1lbnQgbmV3QnVzaW5lc3NFbGVtZW50ID0gbmV3IEJ1c2luZXNzRWxlbWVudChiZSxyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpLmdldE1vZGVsKCkpOwotICAgIGNvbm5lY3RFbGVtZW50cyhwYXJlbnROb2RlLG5ld0J1c2luZXNzRWxlbWVudCk7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIHJlZnJlc2hOb2RlKEJ1c2luZXNzU2VydmljZSBicykKLSAgewotICAgIE5vZGUgbm9kZSA9IGdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpOwotICAgIE5vZGUgcGFyZW50Tm9kZSA9IG5vZGUuZ2V0UGFyZW50KCk7Ci0gICAgVHJlZUVsZW1lbnQgZWxlbWVudCA9IG5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBlbGVtZW50LmRpc2Nvbm5lY3RBbGwoKTsKLSAgICBTZXJ2aWNlRWxlbWVudCBuZXdTZXJ2aWNlRWxlbWVudCA9IG5ldyBTZXJ2aWNlRWxlbWVudChicyxyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpLmdldE1vZGVsKCkpOwotICAgIGNvbm5lY3RFbGVtZW50cyhwYXJlbnROb2RlLG5ld1NlcnZpY2VFbGVtZW50KTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgcmVmcmVzaE5vZGUoVE1vZGVsIHRNb2RlbCkKLSAgewotICAgIE5vZGUgbm9kZSA9IGdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpOwotICAgIE5vZGUgcGFyZW50Tm9kZSA9IG5vZGUuZ2V0UGFyZW50KCk7Ci0gICAgVHJlZUVsZW1lbnQgZWxlbWVudCA9IG5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBlbGVtZW50LmRpc2Nvbm5lY3RBbGwoKTsKLSAgICBTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCBuZXdTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCA9IG5ldyBTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCh0TW9kZWwscmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKS5nZXRNb2RlbCgpKTsKLSAgICBjb25uZWN0RWxlbWVudHMocGFyZW50Tm9kZSxuZXdTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgZmluYWwgdm9pZCBjb25uZWN0RWxlbWVudHMoTm9kZSBwYXJlbnROb2RlLFRyZWVFbGVtZW50IG5ld0VsZW1lbnQpCi0gIHsKLSAgICBUcmVlRWxlbWVudCBwYXJlbnRFbGVtZW50ID0gcGFyZW50Tm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIFN0cmluZyByZWwgPSBudWxsOwotICAgIGlmIChwYXJlbnROb2RlIGluc3RhbmNlb2YgUHVibGlzaGVkSXRlbXNOb2RlKQotICAgICAgcmVsID0gVURESU1vZGVsQ29uc3RhbnRzLlJFTF9QVUJMSVNIRURfSVRFTVM7Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIFF1ZXJ5Tm9kZQotICAgICAgcmVsID0gVURESU1vZGVsQ29uc3RhbnRzLlJFTF9RVUVSWV9SRVNVTFRTOwotICAgIH0KLSAgICBwYXJlbnRFbGVtZW50LmNvbm5lY3QobmV3RWxlbWVudCxyZWwsTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICBOb2RlIG5ld05vZGUgPSBwYXJlbnROb2RlLmdldENoaWxkTm9kZShuZXdFbGVtZW50KTsKLSAgICBpbnQgbmV3Tm9kZUlkID0gbmV3Tm9kZS5nZXROb2RlSWQoKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHBhcmVudE5vZGUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBub2RlTWFuYWdlci5zZXRTZWxlY3RlZE5vZGVJZChuZXdOb2RlSWQpOwotICAgIFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyID0gbmV3Tm9kZS5nZXRUb29sTWFuYWdlcigpOwotICAgIFRvb2wgc2VsZWN0ZWRUb29sID0gdG9vbE1hbmFnZXIuZ2V0U2VsZWN0ZWRUb29sKCk7Ci0gICAgYWRkVG9IaXN0b3J5KEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9VRERJLHNlbGVjdGVkVG9vbC5nZXRTZWxlY3RUb29sQWN0aW9uSHJlZih0cnVlKSk7Ci0gIH0KLSAgICAKLSAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgcmVpbmRleExpc3RFbGVtZW50VmVjdG9yKFZlY3RvciB2KQotICB7Ci0gICAgZm9yIChpbnQgaT0wO2k8di5zaXplKCk7aSsrKQotICAgIHsKLSAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KXYuZWxlbWVudEF0KGkpOwotICAgICAgbGlzdEVsZW1lbnQuc2V0Vmlld0lkKGkpOwotICAgICAgLy8gdGFyZ2V0Vmlld0lkIGRldGVybWluZXMgd2hldGhlciBvciBub3QgYSBzdWNjZXNzZnVsbHkgdmFsaWRhdGVkIGxpc3QgZWxlbWVudCByZW1haW5zIGluIGVkaXQgc3RhdGUuCi0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgSVRyYW5zZm9ybWVyW10gZ2V0VHJhbnNmb3JtZXJzKCkKLSAgewotICAgIElUcmFuc2Zvcm1lcltdIHBhcmVudFRyYW5zZm9ybWVycyA9IHN1cGVyLmdldFRyYW5zZm9ybWVycygpOwotICAgIElUcmFuc2Zvcm1lcltdIHRyYW5zZm9ybWVycyA9IG5ldyBJVHJhbnNmb3JtZXJbcGFyZW50VHJhbnNmb3JtZXJzLmxlbmd0aCArIDFdOwotICAgIFN5c3RlbS5hcnJheWNvcHkocGFyZW50VHJhbnNmb3JtZXJzLCAwLCB0cmFuc2Zvcm1lcnMsIDAsIHBhcmVudFRyYW5zZm9ybWVycy5sZW5ndGgpOwotICAgIHRyYW5zZm9ybWVyc1t0cmFuc2Zvcm1lcnMubGVuZ3RoIC0gMV0gPSBuZXcgTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXJUcmFuc2Zvcm1lcihjb250cm9sbGVyXyk7Ci0gICAgcmV0dXJuIHRyYW5zZm9ybWVyczsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVXBkYXRlQnVzaW5lc3NBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VwZGF0ZUJ1c2luZXNzQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiNTFkMDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVXBkYXRlQnVzaW5lc3NBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQxNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNDE5IDE4Mjg2NCAgIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5VRERJUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVmFsaWRhdG9yOwotaW1wb3J0IG9yZy51ZGRpNGouVURESUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLmNsaWVudC5VRERJUHJveHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5EZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLk5hbWU7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5idXNpbmVzcy5CdXNpbmVzc0VudGl0eTsKLWltcG9ydCBvcmcudWRkaTRqLnRyYW5zcG9ydC5UcmFuc3BvcnRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkNhdGVnb3J5QmFnOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5EaXNjb3ZlcnlVUkw7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkRpc2NvdmVyeVVSTHM7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLklkZW50aWZpZXJCYWc7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLktleWVkUmVmZXJlbmNlOwotCi1wdWJsaWMgY2xhc3MgVXBkYXRlQnVzaW5lc3NBY3Rpb24gZXh0ZW5kcyBVcGRhdGVBY3Rpb24KLXsKLSAgcHJpdmF0ZSBib29sZWFuIGlzVXBkYXRlXzsKLSAgcHVibGljIFVwZGF0ZUJ1c2luZXNzQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIsdHJ1ZSk7Ci0gICAgaXNVcGRhdGVfID0gdHJ1ZTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc090aGVycyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIsRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIHV1aWRLZXkgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9CVVNJTkVTU19LRVkpOwotICAgIFN0cmluZ1tdIGRpc2NvdmVyeVVSTE1vZGlmaWVkU3RhdGVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLkRJU0NPVkVSWVVSTF9NT0RJRklFRCk7Ci0gICAgU3RyaW5nW10gZGlzY292ZXJ5VVJMVmlld0lkcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5ESVNDT1ZFUllVUkxfVklFV0lEKTsKLSAgICBTdHJpbmdbXSBkaXNjb3ZlcnlVUkxzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0RJU0NPVkVSWVVSTCk7Ci0gICAgU3RyaW5nW10gbmFtZU1vZGlmaWVkU3RhdGVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLk5BTUVfTU9ESUZJRUQpOwotICAgIFN0cmluZ1tdIG5hbWVWaWV3SWRzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLk5BTUVfVklFV0lEKTsKLSAgICBTdHJpbmdbXSBuYW1lTGFuZ3VhZ2VzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX05BTUVfTEFOR1VBR0UpOwotICAgIFN0cmluZ1tdIG5hbWVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX05BTUUpOwotICAgIFN0cmluZ1tdIGRlc2NyaXB0aW9uTW9kaWZpZWRTdGF0ZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuREVTQ1JJUFRJT05fTU9ESUZJRUQpOwotICAgIFN0cmluZ1tdIGRlc2NyaXB0aW9uVmlld0lkcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5ERVNDUklQVElPTl9WSUVXSUQpOwotICAgIFN0cmluZ1tdIGRlc2NyaXB0aW9uTGFuZ3VhZ2VzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0RFU0NSSVBUSU9OX0xBTkdVQUdFKTsKLSAgICBTdHJpbmdbXSBkZXNjcmlwdGlvbnMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfREVTQ1JJUFRJT04pOwotICAgIFN0cmluZ1tdIGlkTW9kaWZpZWRTdGF0ZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuSURFTlRJRklFUl9NT0RJRklFRCk7Ci0gICAgU3RyaW5nW10gaWRWaWV3SWRzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLklERU5USUZJRVJfVklFV0lEKTsKLSAgICBTdHJpbmdbXSBpZFR5cGVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0lERU5USUZJRVJfVFlQRSk7Ci0gICAgU3RyaW5nW10gaWRLZXlOYW1lcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9JREVOVElGSUVSX0tFWV9OQU1FKTsKLSAgICBTdHJpbmdbXSBpZEtleVZhbHVlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9JREVOVElGSUVSX0tFWV9WQUxVRSk7Ci0gICAgU3RyaW5nW10gY2F0TW9kaWZpZWRTdGF0ZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuQ0FURUdPUllfTU9ESUZJRUQpOwotICAgIFN0cmluZ1tdIGNhdFZpZXdJZHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuQ0FURUdPUllfVklFV0lEKTsKLSAgICBTdHJpbmdbXSBjYXRUeXBlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9DQVRFR09SWV9UWVBFKTsKLSAgICBTdHJpbmdbXSBjYXRLZXlOYW1lcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9DQVRFR09SWV9LRVlfTkFNRSk7Ci0gICAgU3RyaW5nW10gY2F0S2V5VmFsdWVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0NBVEVHT1JZX0tFWV9WQUxVRSk7Ci0gICAgCi0gICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHRydWU7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgCi0gICAgaWYgKHV1aWRLZXkgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfQlVTSU5FU1NfS0VZLHV1aWRLZXkpOwotICAgIAotICAgIAotICAgIGlmIChkaXNjb3ZlcnlVUkxNb2RpZmllZFN0YXRlcyAhPSBudWxsICYmIGRpc2NvdmVyeVVSTFZpZXdJZHMgIT0gbnVsbCAmJiBkaXNjb3ZlcnlVUkxzICE9IG51bGwpCi0gICAgewotICAgICAgVmVjdG9yIG9sZERpc2NvdmVyeVVSTExpc3RFbGVtZW50VmVjdG9yID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfRElTQ09WRVJZVVJMUyk7Ci0gICAgICBWZWN0b3IgbmV3RGlzY292ZXJ5VVJMTGlzdEVsZW1lbnRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBTdHJpbmdbXSBwYXJhbWV0ZXJzID0gbmV3IFN0cmluZ1syXTsKLSAgICAgIHBhcmFtZXRlcnNbMF0gPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9ESVNDT1ZFUllVUkwiKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPGRpc2NvdmVyeVVSTHMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgcGFyYW1ldGVyc1sxXSA9IFN0cmluZy52YWx1ZU9mKGkrMSk7Ci0gICAgICAgIERpc2NvdmVyeVVSTCBkaXNjb3ZlcnlVUkwgPSBuZXcgRGlzY292ZXJ5VVJMKGRpc2NvdmVyeVVSTHNbaV0sIiIpOwotICAgICAgICBpZiAoIVZhbGlkYXRvci52YWxpZGF0ZVVSTChkaXNjb3ZlcnlVUkxzW2ldKSkKLSAgICAgICAgewotICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgZm9ybVRvb2xQSS5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ESVNDT1ZFUllVUkxTLGkpOwotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfUk9XX0lOVkFMSURfVEVYVCIscGFyYW1ldGVycykpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpbnQgZGlzY292ZXJ5VVJMVmlld0lkID0gSW50ZWdlci5wYXJzZUludChkaXNjb3ZlcnlVUkxWaWV3SWRzW2ldKTsKLSAgICAgICAgYm9vbGVhbiBpc01vZGlmaWVkID0gQm9vbGVhbi52YWx1ZU9mKGRpc2NvdmVyeVVSTE1vZGlmaWVkU3RhdGVzW2ldKS5ib29sZWFuVmFsdWUoKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChkaXNjb3ZlcnlVUkxWaWV3SWQgPT0gLTEgfHwgaXNNb2RpZmllZCkKLSAgICAgICAgICBuZXdEaXNjb3ZlcnlVUkxMaXN0RWxlbWVudFZlY3Rvci5hZGRFbGVtZW50KG5ldyBMaXN0RWxlbWVudChkaXNjb3ZlcnlVUkwpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIG5ld0Rpc2NvdmVyeVVSTExpc3RFbGVtZW50VmVjdG9yLmFkZEVsZW1lbnQob2xkRGlzY292ZXJ5VVJMTGlzdEVsZW1lbnRWZWN0b3IuZWxlbWVudEF0KGRpc2NvdmVyeVVSTFZpZXdJZCkpOyAgICAgCi0gICAgICB9Ci0gICAgICByZWluZGV4TGlzdEVsZW1lbnRWZWN0b3IobmV3RGlzY292ZXJ5VVJMTGlzdEVsZW1lbnRWZWN0b3IpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfRElTQ09WRVJZVVJMUyxuZXdEaXNjb3ZlcnlVUkxMaXN0RWxlbWVudFZlY3Rvcik7ICAgICAgIAotICAgIH0KLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RJU0NPVkVSWVVSTFMpOwotICAgIAotICAgIEhhc2h0YWJsZSBsYW5ndWFnZUhhc2ggPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgaWYgKG5hbWVNb2RpZmllZFN0YXRlcyAhPSBudWxsICYmIG5hbWVWaWV3SWRzICE9IG51bGwgJiYgbmFtZUxhbmd1YWdlcyAhPSBudWxsICYmIG5hbWVzICE9IG51bGwpCi0gICAgewotICAgICAgVmVjdG9yIG9sZE5hbWVMaXN0RWxlbWVudFZlY3RvciA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX05BTUVTKTsKLSAgICAgIFZlY3RvciBuZXdOYW1lTGlzdEVsZW1lbnRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAvLyBVRERJJ3Mgc2F2ZSBBUEkgKEFwcGVuZGl4IEMgb2YgdGhlIFVEREkgVjIgUHJvZ3JhbW1lcnMgQVBJIFNwZWNpZmljYXRpb24pIHJlcXVpcmVzIHRoZSBmb2xsb3dpbmc6Ci0gICAgICAvLyAxKSBPbmx5IHRoZSBmaXJzdCByb3cgY2FuIGhhdmUgYSBibGFuayBsYW5ndWFnZS4KLSAgICAgIC8vIDIpIE9ubHkgMSBuYW1lIHBlciBsYW5ndWFnZS4KLSAgICAgIFN0cmluZ1tdIHBhcmFtZXRlcnMgPSBuZXcgU3RyaW5nWzJdOwotICAgICAgcGFyYW1ldGVyc1swXSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05BTUUiKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPG5hbWVzLmxlbmd0aDtpKyspCi0gICAgICB7Ci0gICAgICAgIHBhcmFtZXRlcnNbMV0gPSBTdHJpbmcudmFsdWVPZihpKzEpOwotICAgICAgICBOYW1lIHVkZGk0ak5hbWU7Ci0gICAgICAgIGlmIChuYW1lTGFuZ3VhZ2VzW2ldLmxlbmd0aCgpID4gMCkKLSAgICAgICAgICB1ZGRpNGpOYW1lID0gbmV3IE5hbWUobmFtZXNbaV0sbmFtZUxhbmd1YWdlc1tpXSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHVkZGk0ak5hbWUgPSBuZXcgTmFtZShuYW1lc1tpXSk7Ci0gICAgICAgICAgaWYgKGkgIT0gMCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgZm9ybVRvb2xQSS5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19OQU1FUyxpKTsKLSAgICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfUk9XX0JMQU5LX0xBTkdVQUdFIixwYXJhbWV0ZXJzKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChsYW5ndWFnZUhhc2guZ2V0KG5hbWVMYW5ndWFnZXNbaV0pICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgIGZvcm1Ub29sUEkuZmxhZ1Jvd0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTkFNRVMsaSk7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9ST1dfRFVQTElDQVRFX0xBTkdVQUdFIixwYXJhbWV0ZXJzKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgIGxhbmd1YWdlSGFzaC5wdXQobmFtZUxhbmd1YWdlc1tpXSxCb29sZWFuLlRSVUUpOwotICAgICAgICBpZiAoIVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZyhuYW1lc1tpXSkpCi0gICAgICAgIHsKLSAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgIGZvcm1Ub29sUEkuZmxhZ1Jvd0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTkFNRVMsaSk7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9ST1dfSU5WQUxJRF9URVhUIixwYXJhbWV0ZXJzKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGludCBuYW1lVmlld0lkID0gSW50ZWdlci5wYXJzZUludChuYW1lVmlld0lkc1tpXSk7Ci0gICAgICAgIGJvb2xlYW4gaXNNb2RpZmllZCA9IEJvb2xlYW4udmFsdWVPZihuYW1lTW9kaWZpZWRTdGF0ZXNbaV0pLmJvb2xlYW5WYWx1ZSgpOwotICAgICAgCi0gICAgICAgIGlmIChuYW1lVmlld0lkID09IC0xIHx8IGlzTW9kaWZpZWQpCi0gICAgICAgICAgbmV3TmFtZUxpc3RFbGVtZW50VmVjdG9yLmFkZEVsZW1lbnQobmV3IExpc3RFbGVtZW50KHVkZGk0ak5hbWUpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIG5ld05hbWVMaXN0RWxlbWVudFZlY3Rvci5hZGRFbGVtZW50KG9sZE5hbWVMaXN0RWxlbWVudFZlY3Rvci5lbGVtZW50QXQobmFtZVZpZXdJZCkpOwotICAgICAgfQotICAgICAgcmVpbmRleExpc3RFbGVtZW50VmVjdG9yKG5ld05hbWVMaXN0RWxlbWVudFZlY3Rvcik7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19OQU1FUyxuZXdOYW1lTGlzdEVsZW1lbnRWZWN0b3IpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19OQU1FUyk7Ci0gICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgZm9ybVRvb2xQSS5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19OQU1FUyk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PX05BTUVTIikpOwotICAgIH0KLSAgICAKLSAgICBpZiAoZGVzY3JpcHRpb25Nb2RpZmllZFN0YXRlcyAhPSBudWxsICYmIGRlc2NyaXB0aW9uVmlld0lkcyAhPSBudWxsICYmIGRlc2NyaXB0aW9uTGFuZ3VhZ2VzICE9IG51bGwgJiYgZGVzY3JpcHRpb25zICE9IG51bGwpCi0gICAgewotICAgICAgVmVjdG9yIG9sZERlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3IgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ERVNDUklQVElPTlMpOwotICAgICAgVmVjdG9yIG5ld0Rlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBTdHJpbmdbXSBwYXJhbWV0ZXJzID0gbmV3IFN0cmluZ1syXTsKLSAgICAgIHBhcmFtZXRlcnNbMF0gPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9ERVNDUklQVElPTiIpOwotICAgICAgbGFuZ3VhZ2VIYXNoLmNsZWFyKCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTxkZXNjcmlwdGlvbnMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgcGFyYW1ldGVyc1sxXSA9IFN0cmluZy52YWx1ZU9mKGkrMSk7Ci0gICAgICAgIERlc2NyaXB0aW9uIHVkZGk0akRlc2NyaXB0aW9uOwotICAgICAgICBpZiAoZGVzY3JpcHRpb25MYW5ndWFnZXNbaV0ubGVuZ3RoKCkgPiAwKQotICAgICAgICAgIHVkZGk0akRlc2NyaXB0aW9uID0gbmV3IERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uc1tpXSxkZXNjcmlwdGlvbkxhbmd1YWdlc1tpXSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHVkZGk0akRlc2NyaXB0aW9uID0gbmV3IERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uc1tpXSk7Ci0gICAgICAgICAgaWYgKGkgIT0gMCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgZm9ybVRvb2xQSS5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ERVNDUklQVElPTlMsaSk7Ci0gICAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1JPV19CTEFOS19MQU5HVUFHRSIscGFyYW1ldGVycykpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAobGFuZ3VhZ2VIYXNoLmdldChkZXNjcmlwdGlvbkxhbmd1YWdlc1tpXSkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgZm9ybVRvb2xQSS5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ERVNDUklQVElPTlMsaSk7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9ST1dfRFVQTElDQVRFX0xBTkdVQUdFIixwYXJhbWV0ZXJzKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgIGxhbmd1YWdlSGFzaC5wdXQoZGVzY3JpcHRpb25MYW5ndWFnZXNbaV0sQm9vbGVhbi5UUlVFKTsKLSAgICAgICAgaWYgKCFWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmcoZGVzY3JpcHRpb25zW2ldKSkKLSAgICAgICAgewotICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgZm9ybVRvb2xQSS5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ERVNDUklQVElPTlMsaSk7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9ST1dfSU5WQUxJRF9URVhUIixwYXJhbWV0ZXJzKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGludCBkZXNjcmlwdGlvblZpZXdJZCA9IEludGVnZXIucGFyc2VJbnQoZGVzY3JpcHRpb25WaWV3SWRzW2ldKTsKLSAgICAgICAgYm9vbGVhbiBpc01vZGlmaWVkID0gQm9vbGVhbi52YWx1ZU9mKGRlc2NyaXB0aW9uTW9kaWZpZWRTdGF0ZXNbaV0pLmJvb2xlYW5WYWx1ZSgpOwotICAgICAgCi0gICAgICAgIGlmIChkZXNjcmlwdGlvblZpZXdJZCA9PSAtMSB8fCBpc01vZGlmaWVkKQotICAgICAgICAgIG5ld0Rlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3IuYWRkRWxlbWVudChuZXcgTGlzdEVsZW1lbnQodWRkaTRqRGVzY3JpcHRpb24pKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIG5ld0Rlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3IuYWRkRWxlbWVudChvbGREZXNjcmlwdGlvbkxpc3RFbGVtZW50VmVjdG9yLmVsZW1lbnRBdChkZXNjcmlwdGlvblZpZXdJZCkpOwotICAgICAgfQotICAgICAgcmVpbmRleExpc3RFbGVtZW50VmVjdG9yKG5ld0Rlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3IpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfREVTQ1JJUFRJT05TLG5ld0Rlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3IpOyAgICAgIAotICAgIH0KLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RFU0NSSVBUSU9OUyk7Ci0gICAgICAKLSAgICBpZiAoaWRNb2RpZmllZFN0YXRlcyAhPSBudWxsICYmIGlkVmlld0lkcyAhPSBudWxsICYmIGlkVHlwZXMgIT0gbnVsbCAmJiBpZEtleU5hbWVzICE9IG51bGwgJiYgaWRLZXlWYWx1ZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBWZWN0b3Igb2xkSWRMaXN0RWxlbWVudFZlY3RvciA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0lERU5USUZJRVJTKTsKLSAgICAgIFZlY3RvciBuZXdJZExpc3RFbGVtZW50VmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgZm9yIChpbnQgaT0wO2k8aWRLZXlOYW1lcy5sZW5ndGg7aSsrKQotICAgICAgewotICAgICAgICBLZXllZFJlZmVyZW5jZSBrciA9IG5ldyBLZXllZFJlZmVyZW5jZShpZEtleU5hbWVzW2ldLGlkS2V5VmFsdWVzW2ldLGlkVHlwZXNbaV0pOwotICAgICAgICBpbnQgaWRWaWV3SWQgPSBJbnRlZ2VyLnBhcnNlSW50KGlkVmlld0lkc1tpXSk7Ci0gICAgICAgIGJvb2xlYW4gaXNNb2RpZmllZCA9IEJvb2xlYW4udmFsdWVPZihpZE1vZGlmaWVkU3RhdGVzW2ldKS5ib29sZWFuVmFsdWUoKTsKLSAgICAgICAgaWYgKGlkVmlld0lkID09IC0xIHx8IGlzTW9kaWZpZWQpCi0gICAgICAgICAgbmV3SWRMaXN0RWxlbWVudFZlY3Rvci5hZGRFbGVtZW50KG5ldyBMaXN0RWxlbWVudChrcikpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgbmV3SWRMaXN0RWxlbWVudFZlY3Rvci5hZGRFbGVtZW50KG9sZElkTGlzdEVsZW1lbnRWZWN0b3IuZWxlbWVudEF0KGlkVmlld0lkKSk7Ci0gICAgICB9Ci0gICAgICByZWluZGV4TGlzdEVsZW1lbnRWZWN0b3IobmV3SWRMaXN0RWxlbWVudFZlY3Rvcik7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19JREVOVElGSUVSUyxuZXdJZExpc3RFbGVtZW50VmVjdG9yKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19JREVOVElGSUVSUyk7Ci0gICAgICAKLSAgICBpZiAoY2F0TW9kaWZpZWRTdGF0ZXMgIT0gbnVsbCAmJiBjYXRWaWV3SWRzICE9IG51bGwgJiYgY2F0VHlwZXMgIT0gbnVsbCAmJiBjYXRLZXlOYW1lcyAhPSBudWxsICYmIGNhdEtleVZhbHVlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIFZlY3RvciBvbGRDYXRMaXN0RWxlbWVudFZlY3RvciA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0NBVEVHT1JJRVMpOwotICAgICAgVmVjdG9yIG5ld0NhdExpc3RFbGVtZW50VmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgZm9yIChpbnQgaT0wO2k8Y2F0VHlwZXMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSBuZXcgS2V5ZWRSZWZlcmVuY2UoY2F0S2V5TmFtZXNbaV0sY2F0S2V5VmFsdWVzW2ldLGNhdFR5cGVzW2ldKTsKLSAgICAgICAgaW50IGNhdFZpZXdJZCA9IEludGVnZXIucGFyc2VJbnQoY2F0Vmlld0lkc1tpXSk7Ci0gICAgICAgIGJvb2xlYW4gaXNNb2RpZmllZCA9IEJvb2xlYW4udmFsdWVPZihjYXRNb2RpZmllZFN0YXRlc1tpXSkuYm9vbGVhblZhbHVlKCk7Ci0gICAgICAgIGlmIChjYXRWaWV3SWQgPT0gLTEgfHwgaXNNb2RpZmllZCkKLSAgICAgICAgICBuZXdDYXRMaXN0RWxlbWVudFZlY3Rvci5hZGRFbGVtZW50KG5ldyBMaXN0RWxlbWVudChrcikpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgbmV3Q2F0TGlzdEVsZW1lbnRWZWN0b3IuYWRkRWxlbWVudChvbGRDYXRMaXN0RWxlbWVudFZlY3Rvci5lbGVtZW50QXQoY2F0Vmlld0lkKSk7Ci0gICAgICB9Ci0gICAgICByZWluZGV4TGlzdEVsZW1lbnRWZWN0b3IobmV3Q2F0TGlzdEVsZW1lbnRWZWN0b3IpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfQ0FURUdPUklFUyxuZXdDYXRMaXN0RWxlbWVudFZlY3Rvcik7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfQ0FURUdPUklFUyk7ICAgICAgICAgICAgCi0gICAgcmV0dXJuIGlucHV0c1ZhbGlkOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcmVmcmVzaEZyb21SZWdpc3RyeSgpCi0gIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIFN0cmluZyB1dWlkS2V5ID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX0JVU0lORVNTX0tFWSk7Ci0gICAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgIFVERElQcm94eSBwcm94eSA9IHJlZ0VsZW1lbnQuZ2V0UHJveHkoKTsKLSAgICAgIFZlY3RvciBiZVZlY3RvciA9IHByb3h5LmdldF9idXNpbmVzc0RldGFpbCh1dWlkS2V5KS5nZXRCdXNpbmVzc0VudGl0eVZlY3RvcigpOwotICAgICAgQnVzaW5lc3NFbnRpdHkgYmU7Ci0gICAgICBpZiAoYmVWZWN0b3Iuc2l6ZSgpID4gMCkKLSAgICAgICAgYmUgPSAoQnVzaW5lc3NFbnRpdHkpYmVWZWN0b3IuZ2V0KDApOwotICAgICAgZWxzZQotICAgICAgICBiZSA9IG51bGw7Ci0gICAgICBpZiAoYmUgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuTEFURVNUX09CSkVDVCxiZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gRmVlZGJhY2sgdmlhIEphdmFzY3JpcHQgcG9wdXBzLgotICAgIH0KLSAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vIEZlZWRiYWNrIHZpYSBKYXZhc2NyaXB0IHBvcHVwcy4KLSAgICB9Ci0gICAgaXNVcGRhdGVfID0gZmFsc2U7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gICAgCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBCdXNpbmVzc0VudGl0eSBiZSA9IChCdXNpbmVzc0VudGl0eSlwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5MQVRFU1RfT0JKRUNUKTsKLSAgICAgIFN0cmluZyBwdWJsaXNoVVJMID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICAgICBTdHJpbmcgdXNlcklkID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgICAgU3RyaW5nIHBhc3N3b3JkID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCk7Ci0gICAgICBWZWN0b3IgZGlzY292ZXJ5VVJMTGlzdEVsZW1lbnRWZWN0b3IgPSAoVmVjdG9yKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RJU0NPVkVSWVVSTFMpOwotICAgICAgVmVjdG9yIG5hbWVMaXN0RWxlbWVudFZlY3RvciA9IChWZWN0b3IpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTkFNRVMpOwotICAgICAgVmVjdG9yIGRlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3IgPSAoVmVjdG9yKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RFU0NSSVBUSU9OUyk7Ci0gICAgICBWZWN0b3IgaWRMaXN0RWxlbWVudFZlY3RvciA9IChWZWN0b3IpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfSURFTlRJRklFUlMpOwotICAgICAgVmVjdG9yIGNhdExpc3RFbGVtZW50VmVjdG9yID0gKFZlY3Rvcilwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19DQVRFR09SSUVTKTsKLSAgICAgIAotICAgICAgVmVjdG9yIGRpc2NvdmVyeVVSTFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGlmIChkaXNjb3ZlcnlVUkxMaXN0RWxlbWVudFZlY3RvciAhPSBudWxsKQotICAgICAgewotICAgICAgICBmb3IgKGludCBpPTA7aTxkaXNjb3ZlcnlVUkxMaXN0RWxlbWVudFZlY3Rvci5zaXplKCk7aSsrKQotICAgICAgICB7Ci0gICAgICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpZGlzY292ZXJ5VVJMTGlzdEVsZW1lbnRWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgICAgIERpc2NvdmVyeVVSTCBkaXNjb3ZlcnlVUkwgPSAoRGlzY292ZXJ5VVJMKWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgICAgIGRpc2NvdmVyeVVSTFZlY3Rvci5hZGRFbGVtZW50KGRpc2NvdmVyeVVSTCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgICAgCi0gICAgICBWZWN0b3IgbmFtZVZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPG5hbWVMaXN0RWxlbWVudFZlY3Rvci5zaXplKCk7aSsrKQotICAgICAgewotICAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudCluYW1lTGlzdEVsZW1lbnRWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgICBOYW1lIG5hbWUgPSAoTmFtZSlsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICAgbmFtZVZlY3Rvci5hZGRFbGVtZW50KG5hbWUpOwotICAgICAgfQotICAgICAgCi0gICAgICBWZWN0b3IgZGVzY3JpcHRpb25WZWN0b3IgPSBudWxsOwotICAgICAgaWYgKGRlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3IgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZGVzY3JpcHRpb25WZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgIGZvciAoaW50IGk9MDtpPGRlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgICAgewotICAgICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KWRlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgICAgIERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gKERlc2NyaXB0aW9uKWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgICAgIGRlc2NyaXB0aW9uVmVjdG9yLmFkZEVsZW1lbnQoZGVzY3JpcHRpb24pOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIElkZW50aWZpZXJCYWcgaWRCYWcgPSBudWxsOwotICAgICAgaWYgKGlkTGlzdEVsZW1lbnRWZWN0b3IgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgaWRCYWcgPSBuZXcgSWRlbnRpZmllckJhZygpOwotICAgICAgICBmb3IgKGludCBpPTA7aTxpZExpc3RFbGVtZW50VmVjdG9yLnNpemUoKTtpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClpZExpc3RFbGVtZW50VmVjdG9yLmVsZW1lbnRBdChpKTsKLSAgICAgICAgICBLZXllZFJlZmVyZW5jZSBrciA9IChLZXllZFJlZmVyZW5jZSlsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICAgICBpZEJhZy5hZGQoa3IpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIENhdGVnb3J5QmFnIGNhdEJhZyA9IG51bGw7Ci0gICAgICBpZiAoY2F0TGlzdEVsZW1lbnRWZWN0b3IgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgY2F0QmFnID0gbmV3IENhdGVnb3J5QmFnKCk7Ci0gICAgICAgIGZvciAoaW50IGk9MDtpPGNhdExpc3RFbGVtZW50VmVjdG9yLnNpemUoKTtpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudCljYXRMaXN0RWxlbWVudFZlY3Rvci5lbGVtZW50QXQoaSk7Ci0gICAgICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSAoS2V5ZWRSZWZlcmVuY2UpbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgICAgY2F0QmFnLmFkZChrcik7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgaWYgKGRpc2NvdmVyeVVSTFZlY3Rvci5zaXplKCkgPiAwKQotICAgICAgICBiZS5zZXREaXNjb3ZlcnlVUkxzKG5ldyBEaXNjb3ZlcnlVUkxzKGRpc2NvdmVyeVVSTFZlY3RvcikpOwotICAgICAgZWxzZQotICAgICAgICBiZS5zZXREaXNjb3ZlcnlVUkxzKG51bGwpOwotICAgICAgYmUuc2V0TmFtZVZlY3RvcihuYW1lVmVjdG9yKTsKLSAgICAgIGJlLnNldERlc2NyaXB0aW9uVmVjdG9yKGRlc2NyaXB0aW9uVmVjdG9yKTsKLSAgICAgIGJlLnNldElkZW50aWZpZXJCYWcoaWRCYWcpOwotICAgICAgYmUuc2V0Q2F0ZWdvcnlCYWcoY2F0QmFnKTsKLSAgICAgIAotICAgICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICBpZiAoIXJlZ0VsZW1lbnQuaXNMb2dnZWRJbigpKQotICAgICAgICByZWdFbGVtZW50LnBlcmZvcm1Mb2dpbihwdWJsaXNoVVJMLHVzZXJJZCxwYXNzd29yZCk7Ci0gICAgICBVRERJUHJveHkgcHJveHkgPSByZWdFbGVtZW50LmdldFByb3h5KCk7Ci0gICAgICBWZWN0b3IgYmVWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBiZVZlY3Rvci5hZGQoYmUpOwotICAgICAgYmUgPSAoQnVzaW5lc3NFbnRpdHkpcHJveHkuc2F2ZV9idXNpbmVzcyhyZWdFbGVtZW50LmdldEF1dGhJbmZvU3RyaW5nKCksIGJlVmVjdG9yKS5nZXRCdXNpbmVzc0VudGl0eVZlY3RvcigpLmdldCgwKTsKLSAgICAgIHJlZnJlc2hOb2RlKGJlKTsKLSAgICAgIGlmIChpc1VwZGF0ZV8pICAgICAgCi0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19CVVNJTkVTU19VUERBVEVEIixiZS5nZXREZWZhdWx0TmFtZVN0cmluZygpKSk7Ci0gICAgICBlbHNlCi0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19CVVNJTkVTU19QVUJMSVNIRUQiLGJlLmdldERlZmF1bHROYW1lU3RyaW5nKCkpKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgaGFuZGxlVW5leHBlY3RlZEV4Y2VwdGlvbih1ZGRpUGVyc3BlY3RpdmUsbWVzc2FnZVF1ZXVlLCJUcmFuc3BvcnRFeGNlcHRpb24iLGUpOwotICAgIH0KLSAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAJaWYoVURESUV4Y2VwdGlvbkhhbmRsZXIucmVxdWlyZXNSZXNldChlKSl7Ci0gICAgCQlSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAJCXJlZ0VsZW1lbnQuc2V0RGVmYXVsdHMoKTsKLSAgICAJfQkKLSAgICAJbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldENvbnRyb2xsZXIoKS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAJbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoIlVERElFeGNlcHRpb24iKTsKLSAgICAJbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoZS50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAJaGFuZGxlVW5leHBlY3RlZEV4Y2VwdGlvbih1ZGRpUGVyc3BlY3RpdmUsbWVzc2FnZVF1ZXVlLCJNYWxmb3JtZWRVUkxFeGNlcHRpb24iLGUpOwotICAgIH0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VcGRhdGVSZWdpc3RyeUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2FjdGlvbnMvVXBkYXRlUmVnaXN0cnlBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGY2ZjE3My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VcGRhdGVSZWdpc3RyeUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1JlYWRlcjsKLWltcG9ydCBqYXZhLnRleHQuUGFyc2VFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5DYXRlZ29yeU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuVURESVBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlZhbGlkYXRvcjsKLQotcHVibGljIGNsYXNzIFVwZGF0ZVJlZ2lzdHJ5QWN0aW9uIGV4dGVuZHMgVXBkYXRlQWN0aW9uCi17Ci0gIHB1YmxpYyBVcGRhdGVSZWdpc3RyeUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyLGZhbHNlKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc090aGVycyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIsRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIG5hbWVNb2RpZmllZFN0YXRlID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLk5BTUVfTU9ESUZJRUQpOwotICAgIFN0cmluZyBuYW1lID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1JFR0lTVFJZX05BTUUpOwotICAgIFN0cmluZ1tdIHVzZXJEZWZpbmVkQ2F0ZWdvcnlUTW9kZWxLZXlzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLkNBVEVHT1JZX1RNT0RFTF9LRVkpOwotICAgIFN0cmluZ1tdIHVzZXJEZWZpbmVkQ2F0ZWdvcnlEYXRhID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLkNBVEVHT1JZX0ZJTEVOQU1FKTsKLSAgICAKLSAgICBib29sZWFuIGlucHV0c1ZhbGlkID0gdHJ1ZTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICAKLSAgICBpZiAobmFtZU1vZGlmaWVkU3RhdGUgIT0gbnVsbCAmJiBuYW1lICE9IG51bGwpCi0gICAgewotICAgICAgYm9vbGVhbiBpc01vZGlmaWVkID0gQm9vbGVhbi52YWx1ZU9mKG5hbWVNb2RpZmllZFN0YXRlKS5ib29sZWFuVmFsdWUoKTsKLSAgICAgIFN0cmluZyBuZXdOYW1lOwotICAgICAgaWYgKGlzTW9kaWZpZWQpCi0gICAgICAgIG5ld05hbWUgPSBuYW1lOwotICAgICAgZWxzZQotICAgICAgICBuZXdOYW1lID0gKFN0cmluZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUkVHSVNUUllfTkFNRSk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9SRUdJU1RSWV9OQU1FLG5ld05hbWUpOwotICAgICAgaWYgKCFWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmcobmFtZSkpCi0gICAgICB7Ci0gICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIGZvcm1Ub29sUEkuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUkVHSVNUUllfTkFNRSk7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9OQU1FIikpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1JFR0lTVFJZX05BTUUpOwotICAgIAotICAgIGlmICh1c2VyRGVmaW5lZENhdGVnb3J5VE1vZGVsS2V5cyAhPSBudWxsICYmIHVzZXJEZWZpbmVkQ2F0ZWdvcnlEYXRhICE9IG51bGwpCi0gICAgewotICAgICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGVfLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICBmb3IgKGludCBpPTA7aTx1c2VyRGVmaW5lZENhdGVnb3J5VE1vZGVsS2V5cy5sZW5ndGg7aSsrKQotICAgICAgewotICAgICAgICBDYXRlZ29yeU1vZGVsIHVzZXJEZWZpbmVkQ2F0ZWdvcnkgPSByZWdFbGVtZW50LmdldFVzZXJEZWZpbmVkQ2F0ZWdvcnkodXNlckRlZmluZWRDYXRlZ29yeVRNb2RlbEtleXNbaV0pOwotLy8gICAgICBUT0RPOiBNb3ZlIFVERElQcmVmZXJlbmNlQ29udGV4dCBkb3duIHRvIG9yZy5lY2xpcHNlLndzdC53cyAKLS8vICAgICAgVURESVByZWZlcmVuY2VDb250ZXh0IGNvbnRleHQgPSBXZWJTZXJ2aWNlUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0VURESVByZWZlcmVuY2VDb250ZXh0KCk7ICAgICAgICAKLS8vICAgICAgdXNlckRlZmluZWRDYXRlZ29yeS5zZXRDb2x1bW5EZWxpbWl0ZXIoY29udGV4dC5nZXRVZGRpQ2F0RGF0YUNvbHVtbkRlbGltaXRlcigpKTsKLS8vICAgICAgdXNlckRlZmluZWRDYXRlZ29yeS5zZXRTdHJpbmdEZWxpbWl0ZXIoY29udGV4dC5nZXRVZGRpQ2F0RGF0YVN0cmluZ0RlbGltaXRlcigpKTsKLSAgICAgICAgdXNlckRlZmluZWRDYXRlZ29yeS5zZXRDb2x1bW5EZWxpbWl0ZXIoIiMiKTsKLSAgICAgICAgdXNlckRlZmluZWRDYXRlZ29yeS5zZXRTdHJpbmdEZWxpbWl0ZXIoIlwiIik7Ci0gICAgICAgIFN0cmluZyBkaXNwbGF5TmFtZSA9IHVzZXJEZWZpbmVkQ2F0ZWdvcnkuZ2V0RGlzcGxheU5hbWUoKTsKLSAgICAgICAgaWYgKHVzZXJEZWZpbmVkQ2F0ZWdvcnlEYXRhW2ldID09IG51bGwgfHwgdXNlckRlZmluZWRDYXRlZ29yeURhdGFbaV0ubGVuZ3RoKCkgPCAxKQotICAgICAgICB7Ci0gICAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfVVNFUl9ERUZJTkVEX0NBVEVHT1JZX0RBVEFfRklMRSIsZGlzcGxheU5hbWUpKTsKLSAgICAgICAgICBmb3JtVG9vbFBJLmZsYWdSb3dFcnJvcihVRERJQWN0aW9uSW5wdXRzLlVTRVJfREVGSU5FRF9DQVRFR09SSUVTLHVzZXJEZWZpbmVkQ2F0ZWdvcnlUTW9kZWxLZXlzW2ldKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBieXRlIHJjID0gdXNlckRlZmluZWRDYXRlZ29yeS5sb2FkRGF0YShuZXcgQnVmZmVyZWRSZWFkZXIobmV3IFN0cmluZ1JlYWRlcih1c2VyRGVmaW5lZENhdGVnb3J5RGF0YVtpXSkpKTsKLSAgICAgICAgICBzd2l0Y2ggKHJjKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgQ2F0ZWdvcnlNb2RlbC5PUEVSQVRJT05fU1VDQ0VTU0ZVTDoKLSAgICAgICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX1VTRVJfREVGSU5FRF9DQVRFR09SWV9EQVRBX0xPQURFRCIsZGlzcGxheU5hbWUpKTsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENhdGVnb3J5TW9kZWwuRVJST1JfRklMRToKLSAgICAgICAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgUGFyc2VFeGNlcHRpb24gcGUgPSAoUGFyc2VFeGNlcHRpb24pdXNlckRlZmluZWRDYXRlZ29yeS5nZXRFcnJvckV4Y2VwdGlvbigpOwotICAgICAgICAgICAgICBTdHJpbmdbXSBhcmdzMSA9IHtTdHJpbmcudmFsdWVPZihwZS5nZXRFcnJvck9mZnNldCgpKSxkaXNwbGF5TmFtZSxwZS5nZXRNZXNzYWdlKCksdXNlckRlZmluZWRDYXRlZ29yeS5nZXRDYXRlZ29yeUtleSgpfTsKLSAgICAgICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX1VTRVJfREVGSU5FRF9DQVRFR09SWV9EQVRBX0ZJTEVfRk9STUFUIixhcmdzMSkpOwotICAgICAgICAgICAgICBmb3JtVG9vbFBJLmZsYWdSb3dFcnJvcihVRERJQWN0aW9uSW5wdXRzLlVTRVJfREVGSU5FRF9DQVRFR09SSUVTLHVzZXJEZWZpbmVkQ2F0ZWdvcnlUTW9kZWxLZXlzW2ldKTsKLSAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQ2F0ZWdvcnlNb2RlbC5FUlJPUl9DQVRFR09SWV9LRVk6Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgICBTdHJpbmdbXSBhcmdzMiA9IHtkaXNwbGF5TmFtZSx1c2VyRGVmaW5lZENhdGVnb3J5LmdldEVycm9yRXhjZXB0aW9uKCkuZ2V0TWVzc2FnZSgpLHVzZXJEZWZpbmVkQ2F0ZWdvcnkuZ2V0Q2F0ZWdvcnlLZXkoKX07Ci0gICAgICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9VU0VSX0RFRklORURfQ0FURUdPUllfREFUQV9GSUxFX0tFWSIsYXJnczIpKTsKLSAgICAgICAgICAgICAgZm9ybVRvb2xQSS5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5VU0VSX0RFRklORURfQ0FURUdPUklFUyx1c2VyRGVmaW5lZENhdGVnb3J5VE1vZGVsS2V5c1tpXSk7ICAgICAgICAgICAgICAKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGlucHV0c1ZhbGlkOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcmVmcmVzaEZyb21SZWdpc3RyeSgpCi0gIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIFN0cmluZyBuYW1lID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9SRUdJU1RSWV9OQU1FKTsKLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICByZWdFbGVtZW50LnNldE5hbWUobmFtZSk7Ci0gICAgcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKS5zZXROYW1lKG5hbWUpOwotICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19SRUdJU1RSWV9VUERBVEVEIixuYW1lKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VwZGF0ZVNlcnZpY2VBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VwZGF0ZVNlcnZpY2VBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWFhYmZiNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VcGRhdGVTZXJ2aWNlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNDE5IDE4Mjg2NCAgIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlJlZ1B1Ymxpc2hUb29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS51dGlsLlVkZGk0akhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5WYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLnVkZGk0ai5VRERJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLkRlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuTmFtZTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJ1c2luZXNzLkJ1c2luZXNzRW50aXR5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuc2VydmljZS5CdXNpbmVzc1NlcnZpY2U7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuU2VydmljZURldGFpbDsKLWltcG9ydCBvcmcudWRkaTRqLnRyYW5zcG9ydC5UcmFuc3BvcnRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkNhdGVnb3J5QmFnOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5LZXllZFJlZmVyZW5jZTsKLQotcHVibGljIGNsYXNzIFVwZGF0ZVNlcnZpY2VBY3Rpb24gZXh0ZW5kcyBVcGRhdGVBY3Rpb24KLXsKLSAgcHJpdmF0ZSBib29sZWFuIGlzVXBkYXRlXzsKLSAgcHVibGljIFVwZGF0ZVNlcnZpY2VBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcix0cnVlKTsKLSAgICBpc1VwZGF0ZV8gPSB0cnVlOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc090aGVycyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIsRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIHV1aWRCdXNpbmVzc0tleSA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX0JVU0lORVNTX0tFWSk7Ci0gICAgU3RyaW5nIHV1aWRTZXJ2aWNlS2V5ID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9LRVkpOwotICAgIFN0cmluZyB3c2RsVVJMTW9kaWZpZWRTdGF0ZSA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5XU0RMX1VSTF9NT0RJRklFRCk7Ci0gICAgU3RyaW5nIHdzZGxVUkwgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9XU0RMX1VSTCk7Ci0gICAgU3RyaW5nW10gbmFtZU1vZGlmaWVkU3RhdGVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLk5BTUVfTU9ESUZJRUQpOwotICAgIFN0cmluZ1tdIG5hbWVWaWV3SWRzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLk5BTUVfVklFV0lEKTsKLSAgICBTdHJpbmdbXSBuYW1lTGFuZ3VhZ2VzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX05BTUVfTEFOR1VBR0UpOwotICAgIFN0cmluZ1tdIG5hbWVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX05BTUUpOwotICAgIFN0cmluZ1tdIGRlc2NyaXB0aW9uTW9kaWZpZWRTdGF0ZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuREVTQ1JJUFRJT05fTU9ESUZJRUQpOwotICAgIFN0cmluZ1tdIGRlc2NyaXB0aW9uVmlld0lkcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5ERVNDUklQVElPTl9WSUVXSUQpOwotICAgIFN0cmluZ1tdIGRlc2NyaXB0aW9uTGFuZ3VhZ2VzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0RFU0NSSVBUSU9OX0xBTkdVQUdFKTsKLSAgICBTdHJpbmdbXSBkZXNjcmlwdGlvbnMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfREVTQ1JJUFRJT04pOwotICAgIFN0cmluZ1tdIGNhdE1vZGlmaWVkU3RhdGVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLkNBVEVHT1JZX01PRElGSUVEKTsKLSAgICBTdHJpbmdbXSBjYXRWaWV3SWRzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLkNBVEVHT1JZX1ZJRVdJRCk7Ci0gICAgU3RyaW5nW10gY2F0VHlwZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQ0FURUdPUllfVFlQRSk7Ci0gICAgU3RyaW5nW10gY2F0S2V5TmFtZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQ0FURUdPUllfS0VZX05BTUUpOwotICAgIFN0cmluZ1tdIGNhdEtleVZhbHVlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9DQVRFR09SWV9LRVlfVkFMVUUpOwotCi0gICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHRydWU7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0KLSAgICBpZiAodXVpZEJ1c2luZXNzS2V5ICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX0JVU0lORVNTX0tFWSx1dWlkQnVzaW5lc3NLZXkpOwotCi0gICAgaWYgKHV1aWRTZXJ2aWNlS2V5ICE9IG51bGwpCi0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfS0VZLHV1aWRTZXJ2aWNlS2V5KTsKLQotICAgIGlmICh3c2RsVVJMTW9kaWZpZWRTdGF0ZSAhPSBudWxsICYmIHdzZGxVUkwgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBMaXN0RWxlbWVudCB3c2RsVVJMTGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfV1NETF9VUkwpOwotICAgICAgYm9vbGVhbiBpc01vZGlmaWVkID0gQm9vbGVhbi52YWx1ZU9mKHdzZGxVUkxNb2RpZmllZFN0YXRlKS5ib29sZWFuVmFsdWUoKTsKLSAgICAgIGlmIChpc01vZGlmaWVkKQotICAgICAgICB3c2RsVVJMTGlzdEVsZW1lbnQgPSBuZXcgTGlzdEVsZW1lbnQod3NkbFVSTCk7Ci0gICAgICBlbHNlCi0gICAgICAgIHdzZGxVUkwgPSAoU3RyaW5nKXdzZGxVUkxMaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfV1NETF9VUkwsd3NkbFVSTExpc3RFbGVtZW50KTsKLSAgICAgIGlmICghVmFsaWRhdG9yLnZhbGlkYXRlVVJMKHdzZGxVUkwpKQotICAgICAgewotICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICBmb3JtVG9vbFBJLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfV1NETF9VUkwpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfV1NETF9VUkwiKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9XU0RMX1VSTCk7Ci0KLSAgICBIYXNodGFibGUgbGFuZ3VhZ2VIYXNoID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIGlmIChuYW1lTW9kaWZpZWRTdGF0ZXMgIT0gbnVsbCAmJiBuYW1lVmlld0lkcyAhPSBudWxsICYmIG5hbWVMYW5ndWFnZXMgIT0gbnVsbCAmJiBuYW1lcyAhPSBudWxsKQotICAgIHsKLSAgICAgIFZlY3RvciBvbGROYW1lTGlzdEVsZW1lbnRWZWN0b3IgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX05BTUVTKTsKLSAgICAgIFZlY3RvciBuZXdOYW1lTGlzdEVsZW1lbnRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAvLyBVRERJJ3Mgc2F2ZSBBUEkgKEFwcGVuZGl4IEMgb2YgdGhlIFVEREkgVjIgUHJvZ3JhbW1lcnMgQVBJIFNwZWNpZmljYXRpb24pIHJlcXVpcmVzIHRoZSBmb2xsb3dpbmc6Ci0gICAgICAvLyAxKSBPbmx5IHRoZSBmaXJzdCByb3cgY2FuIGhhdmUgYSBibGFuayBsYW5ndWFnZS4KLSAgICAgIC8vIDIpIE9ubHkgMSBuYW1lIHBlciBsYW5ndWFnZS4KLSAgICAgIFN0cmluZ1tdIHBhcmFtZXRlcnMgPSBuZXcgU3RyaW5nWzJdOwotICAgICAgcGFyYW1ldGVyc1swXSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05BTUUiKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPG5hbWVzLmxlbmd0aDtpKyspCi0gICAgICB7Ci0gICAgICAgIHBhcmFtZXRlcnNbMV0gPSBTdHJpbmcudmFsdWVPZihpKzEpOwotICAgICAgICBOYW1lIHVkZGk0ak5hbWU7Ci0gICAgICAgIGlmIChuYW1lTGFuZ3VhZ2VzW2ldLmxlbmd0aCgpID4gMCkKLSAgICAgICAgICB1ZGRpNGpOYW1lID0gbmV3IE5hbWUobmFtZXNbaV0sbmFtZUxhbmd1YWdlc1tpXSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHVkZGk0ak5hbWUgPSBuZXcgTmFtZShuYW1lc1tpXSk7Ci0gICAgICAgICAgaWYgKGkgIT0gMCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgZm9ybVRvb2xQSS5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX05BTUVTLGkpOwotICAgICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9ST1dfQkxBTktfTEFOR1VBR0UiLHBhcmFtZXRlcnMpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGxhbmd1YWdlSGFzaC5nZXQobmFtZUxhbmd1YWdlc1tpXSkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgZm9ybVRvb2xQSS5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX05BTUVTLGkpOwotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfUk9XX0RVUExJQ0FURV9MQU5HVUFHRSIscGFyYW1ldGVycykpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBsYW5ndWFnZUhhc2gucHV0KG5hbWVMYW5ndWFnZXNbaV0sQm9vbGVhbi5UUlVFKTsKLSAgICAgICAgaWYgKCFWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmcobmFtZXNbaV0pKQotICAgICAgICB7Ci0gICAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICBmb3JtVG9vbFBJLmZsYWdSb3dFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTkFNRVMsaSk7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9ST1dfSU5WQUxJRF9URVhUIixwYXJhbWV0ZXJzKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgbmFtZVZpZXdJZCA9IEludGVnZXIucGFyc2VJbnQobmFtZVZpZXdJZHNbaV0pOwotICAgICAgICBib29sZWFuIGlzTW9kaWZpZWQgPSBCb29sZWFuLnZhbHVlT2YobmFtZU1vZGlmaWVkU3RhdGVzW2ldKS5ib29sZWFuVmFsdWUoKTsKLQotICAgICAgICBpZiAobmFtZVZpZXdJZCA9PSAtMSB8fCBpc01vZGlmaWVkKQotICAgICAgICAgIG5ld05hbWVMaXN0RWxlbWVudFZlY3Rvci5hZGRFbGVtZW50KG5ldyBMaXN0RWxlbWVudCh1ZGRpNGpOYW1lKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBuZXdOYW1lTGlzdEVsZW1lbnRWZWN0b3IuYWRkRWxlbWVudChvbGROYW1lTGlzdEVsZW1lbnRWZWN0b3IuZWxlbWVudEF0KG5hbWVWaWV3SWQpKTsKLSAgICAgIH0KLSAgICAgIHJlaW5kZXhMaXN0RWxlbWVudFZlY3RvcihuZXdOYW1lTGlzdEVsZW1lbnRWZWN0b3IpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9OQU1FUyxuZXdOYW1lTGlzdEVsZW1lbnRWZWN0b3IpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX05BTUVTKTsKLSAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICBmb3JtVG9vbFBJLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTkFNRVMpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT19OQU1FUyIpKTsKLSAgICB9Ci0KLSAgICBpZiAoZGVzY3JpcHRpb25Nb2RpZmllZFN0YXRlcyAhPSBudWxsICYmIGRlc2NyaXB0aW9uVmlld0lkcyAhPSBudWxsICYmIGRlc2NyaXB0aW9uTGFuZ3VhZ2VzICE9IG51bGwgJiYgZGVzY3JpcHRpb25zICE9IG51bGwpCi0gICAgewotICAgICAgVmVjdG9yIG9sZERlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3IgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0RFU0NSSVBUSU9OUyk7Ci0gICAgICBWZWN0b3IgbmV3RGVzY3JpcHRpb25MaXN0RWxlbWVudFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIFN0cmluZ1tdIHBhcmFtZXRlcnMgPSBuZXcgU3RyaW5nWzJdOwotICAgICAgcGFyYW1ldGVyc1swXSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0RFU0NSSVBUSU9OIik7Ci0gICAgICBsYW5ndWFnZUhhc2guY2xlYXIoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPGRlc2NyaXB0aW9ucy5sZW5ndGg7aSsrKQotICAgICAgewotICAgICAgICBwYXJhbWV0ZXJzWzFdID0gU3RyaW5nLnZhbHVlT2YoaSsxKTsKLSAgICAgICAgRGVzY3JpcHRpb24gdWRkaTRqRGVzY3JpcHRpb247Ci0gICAgICAgIGlmIChkZXNjcmlwdGlvbkxhbmd1YWdlc1tpXS5sZW5ndGgoKSA+IDApCi0gICAgICAgICAgdWRkaTRqRGVzY3JpcHRpb24gPSBuZXcgRGVzY3JpcHRpb24oZGVzY3JpcHRpb25zW2ldLGRlc2NyaXB0aW9uTGFuZ3VhZ2VzW2ldKTsKLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgdWRkaTRqRGVzY3JpcHRpb24gPSBuZXcgRGVzY3JpcHRpb24oZGVzY3JpcHRpb25zW2ldKTsKLSAgICAgICAgICBpZiAoaSAhPSAwKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICBmb3JtVG9vbFBJLmZsYWdSb3dFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfREVTQ1JJUFRJT05TLGkpOwotICAgICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9ST1dfQkxBTktfTEFOR1VBR0UiLHBhcmFtZXRlcnMpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGxhbmd1YWdlSGFzaC5nZXQoZGVzY3JpcHRpb25MYW5ndWFnZXNbaV0pICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgIGZvcm1Ub29sUEkuZmxhZ1Jvd0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9ERVNDUklQVElPTlMsaSk7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9ST1dfRFVQTElDQVRFX0xBTkdVQUdFIixwYXJhbWV0ZXJzKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgIGxhbmd1YWdlSGFzaC5wdXQoZGVzY3JpcHRpb25MYW5ndWFnZXNbaV0sQm9vbGVhbi5UUlVFKTsKLSAgICAgICAgaWYgKCFWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmcoZGVzY3JpcHRpb25zW2ldKSkKLSAgICAgICAgewotICAgICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgZm9ybVRvb2xQSS5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0RFU0NSSVBUSU9OUyxpKTsKLSAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1JPV19JTlZBTElEX1RFWFQiLHBhcmFtZXRlcnMpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGludCBkZXNjcmlwdGlvblZpZXdJZCA9IEludGVnZXIucGFyc2VJbnQoZGVzY3JpcHRpb25WaWV3SWRzW2ldKTsKLSAgICAgICAgYm9vbGVhbiBpc01vZGlmaWVkID0gQm9vbGVhbi52YWx1ZU9mKGRlc2NyaXB0aW9uTW9kaWZpZWRTdGF0ZXNbaV0pLmJvb2xlYW5WYWx1ZSgpOwotCi0gICAgICAgIGlmIChkZXNjcmlwdGlvblZpZXdJZCA9PSAtMSB8fCBpc01vZGlmaWVkKQotICAgICAgICAgIG5ld0Rlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3IuYWRkRWxlbWVudChuZXcgTGlzdEVsZW1lbnQodWRkaTRqRGVzY3JpcHRpb24pKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIG5ld0Rlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3IuYWRkRWxlbWVudChvbGREZXNjcmlwdGlvbkxpc3RFbGVtZW50VmVjdG9yLmVsZW1lbnRBdChkZXNjcmlwdGlvblZpZXdJZCkpOwotICAgICAgfQotICAgICAgcmVpbmRleExpc3RFbGVtZW50VmVjdG9yKG5ld0Rlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3IpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9ERVNDUklQVElPTlMsbmV3RGVzY3JpcHRpb25MaXN0RWxlbWVudFZlY3Rvcik7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9ERVNDUklQVElPTlMpOwotCi0gICAgaWYgKGNhdE1vZGlmaWVkU3RhdGVzICE9IG51bGwgJiYgY2F0Vmlld0lkcyAhPSBudWxsICYmIGNhdFR5cGVzICE9IG51bGwgJiYgY2F0S2V5TmFtZXMgIT0gbnVsbCAmJiBjYXRLZXlWYWx1ZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBWZWN0b3Igb2xkQ2F0TGlzdEVsZW1lbnRWZWN0b3IgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0NBVEVHT1JJRVMpOwotICAgICAgVmVjdG9yIG5ld0NhdExpc3RFbGVtZW50VmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgZm9yIChpbnQgaT0wO2k8Y2F0VHlwZXMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSBuZXcgS2V5ZWRSZWZlcmVuY2UoY2F0S2V5TmFtZXNbaV0sY2F0S2V5VmFsdWVzW2ldLGNhdFR5cGVzW2ldKTsKLSAgICAgICAgaW50IGNhdFZpZXdJZCA9IEludGVnZXIucGFyc2VJbnQoY2F0Vmlld0lkc1tpXSk7Ci0gICAgICAgIGJvb2xlYW4gaXNNb2RpZmllZCA9IEJvb2xlYW4udmFsdWVPZihjYXRNb2RpZmllZFN0YXRlc1tpXSkuYm9vbGVhblZhbHVlKCk7Ci0gICAgICAgIGlmIChjYXRWaWV3SWQgPT0gLTEgfHwgaXNNb2RpZmllZCkKLSAgICAgICAgICBuZXdDYXRMaXN0RWxlbWVudFZlY3Rvci5hZGRFbGVtZW50KG5ldyBMaXN0RWxlbWVudChrcikpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgbmV3Q2F0TGlzdEVsZW1lbnRWZWN0b3IuYWRkRWxlbWVudChvbGRDYXRMaXN0RWxlbWVudFZlY3Rvci5lbGVtZW50QXQoY2F0Vmlld0lkKSk7Ci0gICAgICB9Ci0gICAgICByZWluZGV4TGlzdEVsZW1lbnRWZWN0b3IobmV3Q2F0TGlzdEVsZW1lbnRWZWN0b3IpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9DQVRFR09SSUVTLG5ld0NhdExpc3RFbGVtZW50VmVjdG9yKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0NBVEVHT1JJRVMpOwotICAgIHJldHVybiBpbnB1dHNWYWxpZDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJlZnJlc2hCdXNpbmVzc0Zyb21SZWdpc3RyeSgpCi0gIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIFN0cmluZyB1dWlkQnVzaW5lc3NLZXkgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfQlVTSU5FU1NfS0VZKTsKLSAgICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgVURESVByb3h5IHByb3h5ID0gcmVnRWxlbWVudC5nZXRQcm94eSgpOwotICAgICAgVmVjdG9yIGJlVmVjdG9yID0gcHJveHkuZ2V0X2J1c2luZXNzRGV0YWlsKHV1aWRCdXNpbmVzc0tleSkuZ2V0QnVzaW5lc3NFbnRpdHlWZWN0b3IoKTsKLSAgICAgIEJ1c2luZXNzRW50aXR5IGJlOwotICAgICAgaWYgKGJlVmVjdG9yLnNpemUoKSA+IDApCi0gICAgICAgIGJlID0gKEJ1c2luZXNzRW50aXR5KWJlVmVjdG9yLmdldCgwKTsKLSAgICAgIGVsc2UKLSAgICAgICAgYmUgPSBudWxsOwotICAgICAgaWYgKGJlICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLkxBVEVTVF9CVVNJTkVTUyxiZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gRmVlZGJhY2sgdmlhIEphdmFzY3JpcHQgcG9wdXBzLgotICAgIH0KLSAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vIEZlZWRiYWNrIHZpYSBKYXZhc2NyaXB0IHBvcHVwcy4KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgYm9vbGVhbiByZWZyZXNoRnJvbVJlZ2lzdHJ5KCkKLSAgewotICAgIGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIFN0cmluZyB1dWlkU2VydmljZUtleSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9TRVJWSUNFX0tFWSk7Ci0gICAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgIFVERElQcm94eSBwcm94eSA9IHJlZ0VsZW1lbnQuZ2V0UHJveHkoKTsKLSAgICAgIFNlcnZpY2VEZXRhaWwgc2VydmljZURldGFpbCA9IHByb3h5LmdldF9zZXJ2aWNlRGV0YWlsKHV1aWRTZXJ2aWNlS2V5KTsKLSAgICAgIFZlY3RvciBidXNpbmVzc1NlcnZpY2VWZWN0b3IgPSBzZXJ2aWNlRGV0YWlsLmdldEJ1c2luZXNzU2VydmljZVZlY3RvcigpOwotICAgICAgaWYgKGJ1c2luZXNzU2VydmljZVZlY3Rvci5zaXplKCkgPiAwKQotICAgICAgewotICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5MQVRFU1RfT0JKRUNULGJ1c2luZXNzU2VydmljZVZlY3Rvci5lbGVtZW50QXQoMCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKFVERElFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBGZWVkYmFjayB2aWEgSmF2YXNjcmlwdCBwb3B1cHMuCi0gICAgfQotICAgIGNhdGNoIChUcmFuc3BvcnRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBGZWVkYmFjayB2aWEgSmF2YXNjcmlwdCBwb3B1cHMuCi0gICAgfQotICAgIGlzVXBkYXRlXyA9IGZhbHNlOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIFJlZ1B1Ymxpc2hUb29sIHNldHVwUmVnUHVibGlzaFRvb2woKQotICB7Ci0gICAgLy8gUHJlcGFyZSBmb3IgcmUtcHVibGlzaGluZyBhIG5vdy1zdGFsZSBzZXJ2aWNlIHdob3NlIGJ1c2luZXNzIGhhcyBhbHNvIGJlZW4gZWxpbWluYXRlZC4KLSAgICBSZWdQdWJsaXNoVG9vbCByZWdQdWJsaXNoVG9vbCA9IHJlZ05vZGVfLmdldFJlZ1B1Ymxpc2hUb29sKCk7Ci0gICAgcmVnUHVibGlzaFRvb2wuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVksIiIpOwotICAgIHJlZ1B1Ymxpc2hUb29sLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTSxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVMpKTsKLSAgICByZWdQdWJsaXNoVG9vbC5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VTLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQURWQU5DRUQpKTsKLSAgICAKLSAgICByZWdQdWJsaXNoVG9vbC5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfV1NETF9VUkwscHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9XU0RMX1VSTCkpOwotICAgIAotICAgIFZlY3RvciBuYW1lTGlzdEVsZW1lbnRWZWN0b3IgPSAoVmVjdG9yKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTkFNRVMpOwotICAgIFZlY3RvciBkZXNjcmlwdGlvbkxpc3RFbGVtZW50VmVjdG9yID0gKFZlY3Rvcilwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0RFU0NSSVBUSU9OUyk7Ci0gICAgVmVjdG9yIGNhdExpc3RFbGVtZW50VmVjdG9yID0gKFZlY3Rvcilwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0NBVEVHT1JJRVMpOwotICAgIAotICAgIFZlY3RvciBuYW1lVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgIGZvciAoaW50IGk9MDtpPG5hbWVMaXN0RWxlbWVudFZlY3Rvci5zaXplKCk7aSsrKQotICAgIHsKLSAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KW5hbWVMaXN0RWxlbWVudFZlY3Rvci5lbGVtZW50QXQoaSk7Ci0gICAgICBOYW1lIG5hbWUgPSAoTmFtZSlsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgIG5hbWVWZWN0b3IuYWRkRWxlbWVudChuYW1lKTsKLSAgICB9Ci0gICAgCi0gICAgVmVjdG9yIGRlc2NyaXB0aW9uVmVjdG9yID0gbnVsbDsKLSAgICBpZiAoZGVzY3JpcHRpb25MaXN0RWxlbWVudFZlY3RvciAhPSBudWxsKQotICAgIHsKLSAgICAgIGRlc2NyaXB0aW9uVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgZm9yIChpbnQgaT0wO2k8ZGVzY3JpcHRpb25MaXN0RWxlbWVudFZlY3Rvci5zaXplKCk7aSsrKQotICAgICAgewotICAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClkZXNjcmlwdGlvbkxpc3RFbGVtZW50VmVjdG9yLmVsZW1lbnRBdChpKTsKLSAgICAgICAgRGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSAoRGVzY3JpcHRpb24pbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgIGRlc2NyaXB0aW9uVmVjdG9yLmFkZEVsZW1lbnQoZGVzY3JpcHRpb24pOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgICByZWdQdWJsaXNoVG9vbC5yZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfREVTQ1JJUFRJT05TKTsKLSAgICAKLSAgICBDYXRlZ29yeUJhZyBjYXRCYWcgPSBudWxsOwotICAgIGlmIChjYXRMaXN0RWxlbWVudFZlY3RvciAhPSBudWxsKQotICAgIHsKLSAgICAgIGNhdEJhZyA9IG5ldyBDYXRlZ29yeUJhZygpOwotICAgICAgZm9yIChpbnQgaT0wO2k8Y2F0TGlzdEVsZW1lbnRWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgIHsKLSAgICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpY2F0TGlzdEVsZW1lbnRWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgICBLZXllZFJlZmVyZW5jZSBrciA9IChLZXllZFJlZmVyZW5jZSlsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICAgY2F0QmFnLmFkZChrcik7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlZ1B1Ymxpc2hUb29sLnJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9DQVRFR09SSUVTKTsKLSAgICAKLSAgICByZWdQdWJsaXNoVG9vbC5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTkFNRVMsbmFtZVZlY3Rvcik7Ci0gICAgaWYgKGRlc2NyaXB0aW9uVmVjdG9yICE9IG51bGwpCi0gICAgICByZWdQdWJsaXNoVG9vbC5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfREVTQ1JJUFRJT05TLGRlc2NyaXB0aW9uVmVjdG9yKTsKLSAgICBpZiAoY2F0QmFnICE9IG51bGwpCi0gICAgICByZWdQdWJsaXNoVG9vbC5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQ0FURUdPUklFUyxjYXRCYWcpOwotICAgIHJldHVybiByZWdQdWJsaXNoVG9vbDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsgICAgCi0gICAgdHJ5Ci0gICAgewotICAgICAgQnVzaW5lc3NFbnRpdHkgYmUgPSAoQnVzaW5lc3NFbnRpdHkpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuTEFURVNUX0JVU0lORVNTKTsKLSAgICAgIFN0cmluZyBwdWJsaXNoVVJMID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICAgICBTdHJpbmcgdXNlcklkID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgICAgU3RyaW5nIHBhc3N3b3JkID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCk7Ci0gICAgICBTdHJpbmcgdXVpZFNlcnZpY2VLZXkgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9LRVkpOwotICAgICAgTGlzdEVsZW1lbnQgd3NkbFVSTExpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfV1NETF9VUkwpOwotICAgICAgVmVjdG9yIG5hbWVMaXN0RWxlbWVudFZlY3RvciA9IChWZWN0b3IpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9OQU1FUyk7Ci0gICAgICBWZWN0b3IgZGVzY3JpcHRpb25MaXN0RWxlbWVudFZlY3RvciA9IChWZWN0b3IpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9ERVNDUklQVElPTlMpOwotICAgICAgVmVjdG9yIGNhdExpc3RFbGVtZW50VmVjdG9yID0gKFZlY3Rvcilwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0NBVEVHT1JJRVMpOwotCi0gICAgICBTdHJpbmcgd3NkbFVSTCA9IChTdHJpbmcpd3NkbFVSTExpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgICAgICAgCi0gICAgICBWZWN0b3IgbmFtZVZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPG5hbWVMaXN0RWxlbWVudFZlY3Rvci5zaXplKCk7aSsrKQotICAgICAgewotICAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudCluYW1lTGlzdEVsZW1lbnRWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgICBOYW1lIG5hbWUgPSAoTmFtZSlsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICAgbmFtZVZlY3Rvci5hZGRFbGVtZW50KG5hbWUpOwotICAgICAgfQotCi0gICAgICBWZWN0b3IgZGVzY3JpcHRpb25WZWN0b3IgPSBudWxsOwotICAgICAgaWYgKGRlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3IgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZGVzY3JpcHRpb25WZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgIGZvciAoaW50IGk9MDtpPGRlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgICAgewotICAgICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KWRlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgICAgIERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gKERlc2NyaXB0aW9uKWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgICAgIGRlc2NyaXB0aW9uVmVjdG9yLmFkZEVsZW1lbnQoZGVzY3JpcHRpb24pOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIENhdGVnb3J5QmFnIGNhdEJhZyA9IG51bGw7Ci0gICAgICBpZiAoY2F0TGlzdEVsZW1lbnRWZWN0b3IgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgY2F0QmFnID0gbmV3IENhdGVnb3J5QmFnKCk7Ci0gICAgICAgIGZvciAoaW50IGk9MDtpPGNhdExpc3RFbGVtZW50VmVjdG9yLnNpemUoKTtpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudCljYXRMaXN0RWxlbWVudFZlY3Rvci5lbGVtZW50QXQoaSk7Ci0gICAgICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSAoS2V5ZWRSZWZlcmVuY2UpbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgICAgY2F0QmFnLmFkZChrcik7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgaWYgKCFyZWdFbGVtZW50LmlzTG9nZ2VkSW4oKSkKLSAgICAgIAlyZWdFbGVtZW50LnBlcmZvcm1Mb2dpbihwdWJsaXNoVVJMLHVzZXJJZCxwYXNzd29yZCk7Ci0gICAgICBVRERJUHJveHkgcHJveHkgPSByZWdFbGVtZW50LmdldFByb3h5KCk7Ci0KLSAgICAgIC8vIE5vdGU6IFRoZSBKU1Agd2lsbCBwcmV2ZW50IHRoaXMgcm91dGluZSBmcm9tIGV4ZWN1dGluZyBpZiBiZSBpcyBudWxsLgotICAgICAgVWRkaTRqSGVscGVyIHVkZGk0akhlbHBlciA9IG5ldyBVZGRpNGpIZWxwZXIoKTsKLSAgICAgIERlZmluaXRpb24gZGVmID0gdWRkaTRqSGVscGVyLmdldFdTRExEZWZpbml0aW9uKHdzZGxVUkwpOwotICAgICAgCi0gICAgICAvLyBQdWJsaXNoL3VwZGF0ZSB0aGUgc2VydmljZSBpbnRlcmZhY2VzIGZpcnN0LgotICAgICAgUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTaW1wbGVBY3Rpb24gcmVnUHVibGlzaFNJQWN0aW9uID0gbmV3IFJlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2ltcGxlQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICAgIGludCBjdXJyZW50Tm9kZUlkID0gZ2V0U2VsZWN0ZWROYXZpZ2F0b3JOb2RlKCkuZ2V0Tm9kZUlkKCk7Ci0gICAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHJlZ05vZGVfLmdldE5vZGVNYW5hZ2VyKCk7Ci0KLSAgICAgIEhhc2h0YWJsZSB0TW9kZWxzVGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgICBUTW9kZWxbXSB0TW9kZWxzID0gbnVsbDsKLSAgICAgIGlmICh1ZGRpNGpIZWxwZXIuaXNNb25vbGl0aGljV1NETChkZWYpKQotICAgICAgewotICAgICAgCXRNb2RlbHMgPSBuZXcgVE1vZGVsWzFdOwotICAgICAgCXRNb2RlbHNbMF0gPSB1ZGRpNGpIZWxwZXIubmV3VE1vZGVsKHdzZGxVUkwsIGRlZik7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAJU3RyaW5nW10gaW1wb3J0cyA9IHVkZGk0akhlbHBlci5nZXRJbXBvcnRzKGRlZiwgd3NkbFVSTCk7Ci0gICAgICAJdE1vZGVscyA9IG5ldyBUTW9kZWxbaW1wb3J0cy5sZW5ndGhdOwotICAgICAgCWZvciAoaW50IGkgPSAwOyBpIDwgdE1vZGVscy5sZW5ndGg7IGkrKykKLSAgICAgIAkgIHRNb2RlbHNbaV0gPSB1ZGRpNGpIZWxwZXIubmV3VE1vZGVsKGltcG9ydHNbaV0pOwotICAgICAgfQotICAgICAgCi0gICAgICBpZiAodE1vZGVscyAhPSBudWxsKQotICAgICAgewotICAgICAgCWZvciAoaW50IGk9MDtpPHRNb2RlbHMubGVuZ3RoO2krKykKLSAgICAgIAl7Ci0gICAgICAJICBib29sZWFuIGlucHV0c1ZhbGlkID0gcmVnUHVibGlzaFNJQWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZSh1ZGRpNGpIZWxwZXIuZ2V0V1NETCh0TW9kZWxzW2ldKSwgdE1vZGVsc1tpXSk7Ci0gICAgICAJICBpZiAoaW5wdXRzVmFsaWQpCi0gICAgICAJICB7Ci0gICAgICAJICAgIHJlZ1B1Ymxpc2hTSUFjdGlvbi5ydW4oKTsKLSAgICAgIAkgICAgT2JqZWN0IHNhdmVkVE1vZGVsID0gcmVnUHVibGlzaFNJQWN0aW9uLmdldFByb3BlcnR5VGFibGUoKS5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9PVVRQVVRfU0FWRURfVE1PREVMKTsKLSAgICAgIAkgICAgaWYgKHNhdmVkVE1vZGVsICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAJICAgICAgdE1vZGVsc1RhYmxlLnB1dCgoKFRNb2RlbClzYXZlZFRNb2RlbCkuZ2V0TmFtZVN0cmluZygpLCBzYXZlZFRNb2RlbCk7Ci0gICAgICAJICAgIH0KLSAgICAgICAgICAgIC8vIFJlc2VsZWN0IHRoZSBjdXJyZW50IG5vZGUuCi0gICAgICAJICAgIG5vZGVNYW5hZ2VyLnNldFNlbGVjdGVkTm9kZUlkKGN1cnJlbnROb2RlSWQpOwotICAgICAgICAgIH0KLSAgICAgIAl9Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIEJ1c2luZXNzU2VydmljZSBidXNTZXJ2aWNlID0gdWRkaTRqSGVscGVyLm5ld0J1c2luZXNzU2VydmljZSh3c2RsVVJMLCBkZWYsIHRNb2RlbHNUYWJsZSk7Ci0gICAgICBpZiAoaXNVcGRhdGVfKQotICAgICAgICBidXNTZXJ2aWNlLnNldFNlcnZpY2VLZXkodXVpZFNlcnZpY2VLZXkpOwotICAgICAgYnVzU2VydmljZS5zZXRCdXNpbmVzc0tleShiZS5nZXRCdXNpbmVzc0tleSgpKTsKLSAgICAgIGJ1c1NlcnZpY2Uuc2V0TmFtZVZlY3RvcihuYW1lVmVjdG9yKTsKLSAgICAgIGJ1c1NlcnZpY2Uuc2V0RGVzY3JpcHRpb25WZWN0b3IoZGVzY3JpcHRpb25WZWN0b3IpOwotICAgICAgYnVzU2VydmljZS5zZXRDYXRlZ29yeUJhZyhjYXRCYWcpOwotICAgICAgcmVnRWxlbWVudC5oYW5kbGVQcmVJbnZvY2F0aW9uKGJ1c1NlcnZpY2UpOyAgICAgIAotICAgICAgVmVjdG9yIGJzVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgYnNWZWN0b3IuYWRkKGJ1c1NlcnZpY2UpOwotICAgICAgYnVzU2VydmljZSA9IChCdXNpbmVzc1NlcnZpY2UpcHJveHkuc2F2ZV9zZXJ2aWNlKHJlZ0VsZW1lbnQuZ2V0QXV0aEluZm9TdHJpbmcoKSwgYnNWZWN0b3IpLmdldEJ1c2luZXNzU2VydmljZVZlY3RvcigpLmdldCgwKTsKLSAgICAgIHJlZnJlc2hOb2RlKGJ1c1NlcnZpY2UpOwotICAgICAgaWYgKGlzVXBkYXRlXykKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX1NFUlZJQ0VfVVBEQVRFRCIsYnVzU2VydmljZS5nZXREZWZhdWx0TmFtZVN0cmluZygpKSk7Ci0gICAgICBlbHNlCi0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19TRVJWSUNFX1BVQkxJU0hFRCIsYnVzU2VydmljZS5nZXREZWZhdWx0TmFtZVN0cmluZygpKSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY2F0Y2ggKFdTRExFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBoYW5kbGVVbmV4cGVjdGVkRXhjZXB0aW9uKHVkZGlQZXJzcGVjdGl2ZSxtZXNzYWdlUXVldWUsIldTRExFeGNlcHRpb24iLGUpOwotICAgIH0KLSAgICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgaGFuZGxlVW5leHBlY3RlZEV4Y2VwdGlvbih1ZGRpUGVyc3BlY3RpdmUsbWVzc2FnZVF1ZXVlLCJUcmFuc3BvcnRFeGNlcHRpb24iLGUpOwotICAgIH0KLSAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAJaWYoVURESUV4Y2VwdGlvbkhhbmRsZXIucmVxdWlyZXNSZXNldChlKSkKLSAgICAJCXJlZ0VsZW1lbnQuc2V0RGVmYXVsdHMoKTsKLSAgICAgCW1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRDb250cm9sbGVyKCkuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1VORVhQRUNURUQiKSk7Ci0gICAgCW1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKCJVRERJRXhjZXB0aW9uIik7Ci0gICAgCW1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKGUudG9TdHJpbmcoKSk7Ci0gICAgfQotICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBoYW5kbGVVbmV4cGVjdGVkRXhjZXB0aW9uKHVkZGlQZXJzcGVjdGl2ZSxtZXNzYWdlUXVldWUsIk1hbGZvcm1lZFVSTEV4Y2VwdGlvbiIsZSk7Ci0gICAgfSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VwZGF0ZVNlcnZpY2VJbnRlcmZhY2VBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9hY3Rpb25zL1VwZGF0ZVNlcnZpY2VJbnRlcmZhY2VBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjg0NTZiMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvYWN0aW9ucy9VcGRhdGVTZXJ2aWNlSW50ZXJmYWNlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNDE5IDE4Mjg2NCAgIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS51dGlsLlVkZGk0akhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5WYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLnVkZGk0ai5VRERJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLkRlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLlRNb2RlbDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlRNb2RlbERldGFpbDsKLWltcG9ydCBvcmcudWRkaTRqLnRyYW5zcG9ydC5UcmFuc3BvcnRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkNhdGVnb3J5QmFnOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5JZGVudGlmaWVyQmFnOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5LZXllZFJlZmVyZW5jZTsKLQotcHVibGljIGNsYXNzIFVwZGF0ZVNlcnZpY2VJbnRlcmZhY2VBY3Rpb24gZXh0ZW5kcyBVcGRhdGVBY3Rpb24KLXsKLSAgcHJpdmF0ZSBib29sZWFuIGlzVXBkYXRlXzsKLSAgcHVibGljIFVwZGF0ZVNlcnZpY2VJbnRlcmZhY2VBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcix0cnVlKTsKLSAgICBpc1VwZGF0ZV8gPSB0cnVlOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzT3RoZXJzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcixGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSkgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgdXVpZEtleSA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfSU5URVJGQUNFX0tFWSk7Ci0gICAgU3RyaW5nIHdzZGxVUkxNb2RpZmllZFN0YXRlID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLldTRExfVVJMX01PRElGSUVEKTsKLSAgICBTdHJpbmcgd3NkbFVSTCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9XU0RMX1VSTCk7Ci0gICAgU3RyaW5nIG5hbWVNb2RpZmllZFN0YXRlID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLk5BTUVfTU9ESUZJRUQpOwotICAgIFN0cmluZyBuYW1lID0gcGFyc2VyLmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUpOwotICAgIFN0cmluZ1tdIGRlc2NyaXB0aW9uTW9kaWZpZWRTdGF0ZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuREVTQ1JJUFRJT05fTU9ESUZJRUQpOwotICAgIFN0cmluZ1tdIGRlc2NyaXB0aW9uVmlld0lkcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5ERVNDUklQVElPTl9WSUVXSUQpOwotICAgIFN0cmluZ1tdIGRlc2NyaXB0aW9uTGFuZ3VhZ2VzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0RFU0NSSVBUSU9OX0xBTkdVQUdFKTsKLSAgICBTdHJpbmdbXSBkZXNjcmlwdGlvbnMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfREVTQ1JJUFRJT04pOwotICAgIFN0cmluZ1tdIGlkTW9kaWZpZWRTdGF0ZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuSURFTlRJRklFUl9NT0RJRklFRCk7Ci0gICAgU3RyaW5nW10gaWRWaWV3SWRzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLklERU5USUZJRVJfVklFV0lEKTsKLSAgICBTdHJpbmdbXSBpZFR5cGVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0lERU5USUZJRVJfVFlQRSk7Ci0gICAgU3RyaW5nW10gaWRLZXlOYW1lcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9JREVOVElGSUVSX0tFWV9OQU1FKTsKLSAgICBTdHJpbmdbXSBpZEtleVZhbHVlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9JREVOVElGSUVSX0tFWV9WQUxVRSk7Ci0gICAgU3RyaW5nW10gY2F0TW9kaWZpZWRTdGF0ZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuQ0FURUdPUllfTU9ESUZJRUQpOwotICAgIFN0cmluZ1tdIGNhdFZpZXdJZHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFVERElBY3Rpb25JbnB1dHMuQ0FURUdPUllfVklFV0lEKTsKLSAgICBTdHJpbmdbXSBjYXRUeXBlcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9DQVRFR09SWV9UWVBFKTsKLSAgICBTdHJpbmdbXSBjYXRLZXlOYW1lcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9DQVRFR09SWV9LRVlfTkFNRSk7Ci0gICAgU3RyaW5nW10gY2F0S2V5VmFsdWVzID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0NBVEVHT1JZX0tFWV9WQUxVRSk7Ci0gICAgCi0gICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHRydWU7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgCi0gICAgaWYgKHV1aWRLZXkgIT0gbnVsbCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9JTlRFUkZBQ0VfS0VZLHV1aWRLZXkpOwotICAgIAotICAgIGlmICh3c2RsVVJMTW9kaWZpZWRTdGF0ZSAhPSBudWxsICYmIHdzZGxVUkwgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBMaXN0RWxlbWVudCB3c2RsVVJMTGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1dTRExfVVJMKTsgICAgICAKLSAgICAgIGJvb2xlYW4gaXNNb2RpZmllZCA9IEJvb2xlYW4udmFsdWVPZih3c2RsVVJMTW9kaWZpZWRTdGF0ZSkuYm9vbGVhblZhbHVlKCk7Ci0gICAgICBpZiAoaXNNb2RpZmllZCkKLSAgICAgICAgd3NkbFVSTExpc3RFbGVtZW50ID0gbmV3IExpc3RFbGVtZW50KHdzZGxVUkwpOwotICAgICAgZWxzZQotICAgICAgICB3c2RsVVJMID0gKFN0cmluZyl3c2RsVVJMTGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9XU0RMX1VSTCx3c2RsVVJMTGlzdEVsZW1lbnQpOwotICAgICAgaWYgKCFWYWxpZGF0b3IudmFsaWRhdGVVUkwod3NkbFVSTCkpCi0gICAgICB7Ci0gICAgICAgIGlucHV0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIGZvcm1Ub29sUEkuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfV1NETF9VUkwpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfV1NETF9VUkwiKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfV1NETF9VUkwpOwotICAgIAotICAgIGlmIChuYW1lTW9kaWZpZWRTdGF0ZSAhPSBudWxsICYmIG5hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBMaXN0RWxlbWVudCBuYW1lTGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUpOwotICAgICAgYm9vbGVhbiBpc01vZGlmaWVkID0gQm9vbGVhbi52YWx1ZU9mKG5hbWVNb2RpZmllZFN0YXRlKS5ib29sZWFuVmFsdWUoKTsKLSAgICAgIGlmIChpc01vZGlmaWVkKQotICAgICAgICBuYW1lTGlzdEVsZW1lbnQgPSBuZXcgTGlzdEVsZW1lbnQobmFtZSk7Ci0gICAgICBlbHNlCi0gICAgICAgIG5hbWUgPSAoU3RyaW5nKW5hbWVMaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUsbmFtZUxpc3RFbGVtZW50KTsKLSAgICAgIGlmICghVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nKG5hbWUpKQotICAgICAgewotICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICBmb3JtVG9vbFBJLmZsYWdFcnJvcihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUpOwotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfTkFNRSIpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FKTsKLSAgICAgIAotICAgIEhhc2h0YWJsZSBsYW5ndWFnZUhhc2ggPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgaWYgKGRlc2NyaXB0aW9uTW9kaWZpZWRTdGF0ZXMgIT0gbnVsbCAmJiBkZXNjcmlwdGlvblZpZXdJZHMgIT0gbnVsbCAmJiBkZXNjcmlwdGlvbkxhbmd1YWdlcyAhPSBudWxsICYmIGRlc2NyaXB0aW9ucyAhPSBudWxsKQotICAgIHsKLSAgICAgIFZlY3RvciBvbGREZXNjcmlwdGlvbkxpc3RFbGVtZW50VmVjdG9yID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfREVTQ1JJUFRJT05TKTsKLSAgICAgIFZlY3RvciBuZXdEZXNjcmlwdGlvbkxpc3RFbGVtZW50VmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgU3RyaW5nW10gcGFyYW1ldGVycyA9IG5ldyBTdHJpbmdbMl07Ci0gICAgICBwYXJhbWV0ZXJzWzBdID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfREVTQ1JJUFRJT04iKTsKLSAgICAgIGxhbmd1YWdlSGFzaC5jbGVhcigpOwotICAgICAgZm9yIChpbnQgaT0wO2k8ZGVzY3JpcHRpb25zLmxlbmd0aDtpKyspCi0gICAgICB7Ci0gICAgICAgIHBhcmFtZXRlcnNbMV0gPSBTdHJpbmcudmFsdWVPZihpKzEpOwotICAgICAgICBEZXNjcmlwdGlvbiB1ZGRpNGpEZXNjcmlwdGlvbjsKLSAgICAgICAgaWYgKGRlc2NyaXB0aW9uTGFuZ3VhZ2VzW2ldLmxlbmd0aCgpID4gMCkKLSAgICAgICAgICB1ZGRpNGpEZXNjcmlwdGlvbiA9IG5ldyBEZXNjcmlwdGlvbihkZXNjcmlwdGlvbnNbaV0sZGVzY3JpcHRpb25MYW5ndWFnZXNbaV0pOwotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICB1ZGRpNGpEZXNjcmlwdGlvbiA9IG5ldyBEZXNjcmlwdGlvbihkZXNjcmlwdGlvbnNbaV0pOwotICAgICAgICAgIGlmIChpICE9IDApCi0gICAgICAgICAgewotICAgICAgICAgICAgaW5wdXRzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGZvcm1Ub29sUEkuZmxhZ1Jvd0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfREVTQ1JJUFRJT05TLGkpOwotICAgICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9ST1dfQkxBTktfTEFOR1VBR0UiLHBhcmFtZXRlcnMpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGxhbmd1YWdlSGFzaC5nZXQoZGVzY3JpcHRpb25MYW5ndWFnZXNbaV0pICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgIGZvcm1Ub29sUEkuZmxhZ1Jvd0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfREVTQ1JJUFRJT05TLGkpOwotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfUk9XX0RVUExJQ0FURV9MQU5HVUFHRSIscGFyYW1ldGVycykpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBsYW5ndWFnZUhhc2gucHV0KGRlc2NyaXB0aW9uTGFuZ3VhZ2VzW2ldLEJvb2xlYW4uVFJVRSk7Ci0gICAgICAgIGlmICghVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nKGRlc2NyaXB0aW9uc1tpXSkpCi0gICAgICAgIHsKLSAgICAgICAgICBpbnB1dHNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgIGZvcm1Ub29sUEkuZmxhZ1Jvd0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfREVTQ1JJUFRJT05TLGkpOwotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfUk9XX0lOVkFMSURfVEVYVCIscGFyYW1ldGVycykpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpbnQgZGVzY3JpcHRpb25WaWV3SWQgPSBJbnRlZ2VyLnBhcnNlSW50KGRlc2NyaXB0aW9uVmlld0lkc1tpXSk7Ci0gICAgICAgIGJvb2xlYW4gaXNNb2RpZmllZCA9IEJvb2xlYW4udmFsdWVPZihkZXNjcmlwdGlvbk1vZGlmaWVkU3RhdGVzW2ldKS5ib29sZWFuVmFsdWUoKTsKLSAgICAgIAotICAgICAgICBpZiAoZGVzY3JpcHRpb25WaWV3SWQgPT0gLTEgfHwgaXNNb2RpZmllZCkKLSAgICAgICAgICBuZXdEZXNjcmlwdGlvbkxpc3RFbGVtZW50VmVjdG9yLmFkZEVsZW1lbnQobmV3IExpc3RFbGVtZW50KHVkZGk0akRlc2NyaXB0aW9uKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBuZXdEZXNjcmlwdGlvbkxpc3RFbGVtZW50VmVjdG9yLmFkZEVsZW1lbnQob2xkRGVzY3JpcHRpb25MaXN0RWxlbWVudFZlY3Rvci5lbGVtZW50QXQoZGVzY3JpcHRpb25WaWV3SWQpKTsKLSAgICAgIH0KLSAgICAgIHJlaW5kZXhMaXN0RWxlbWVudFZlY3RvcihuZXdEZXNjcmlwdGlvbkxpc3RFbGVtZW50VmVjdG9yKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0RFU0NSSVBUSU9OUyxuZXdEZXNjcmlwdGlvbkxpc3RFbGVtZW50VmVjdG9yKTsgICAgICAKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVtb3ZlUHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9ERVNDUklQVElPTlMpOwotICAgICAgCi0gICAgaWYgKGlkTW9kaWZpZWRTdGF0ZXMgIT0gbnVsbCAmJiBpZFZpZXdJZHMgIT0gbnVsbCAmJiBpZFR5cGVzICE9IG51bGwgJiYgaWRLZXlOYW1lcyAhPSBudWxsICYmIGlkS2V5VmFsdWVzICE9IG51bGwpCi0gICAgewotICAgICAgVmVjdG9yIG9sZElkTGlzdEVsZW1lbnRWZWN0b3IgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9JREVOVElGSUVSUyk7Ci0gICAgICBWZWN0b3IgbmV3SWRMaXN0RWxlbWVudFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPGlkS2V5TmFtZXMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSBuZXcgS2V5ZWRSZWZlcmVuY2UoaWRLZXlOYW1lc1tpXSxpZEtleVZhbHVlc1tpXSxpZFR5cGVzW2ldKTsKLSAgICAgICAgaW50IGlkVmlld0lkID0gSW50ZWdlci5wYXJzZUludChpZFZpZXdJZHNbaV0pOwotICAgICAgICBib29sZWFuIGlzTW9kaWZpZWQgPSBCb29sZWFuLnZhbHVlT2YoaWRNb2RpZmllZFN0YXRlc1tpXSkuYm9vbGVhblZhbHVlKCk7Ci0gICAgICAgIGlmIChpZFZpZXdJZCA9PSAtMSB8fCBpc01vZGlmaWVkKQotICAgICAgICAgIG5ld0lkTGlzdEVsZW1lbnRWZWN0b3IuYWRkRWxlbWVudChuZXcgTGlzdEVsZW1lbnQoa3IpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIG5ld0lkTGlzdEVsZW1lbnRWZWN0b3IuYWRkRWxlbWVudChvbGRJZExpc3RFbGVtZW50VmVjdG9yLmVsZW1lbnRBdChpZFZpZXdJZCkpOwotICAgICAgfQotICAgICAgcmVpbmRleExpc3RFbGVtZW50VmVjdG9yKG5ld0lkTGlzdEVsZW1lbnRWZWN0b3IpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfSURFTlRJRklFUlMsbmV3SWRMaXN0RWxlbWVudFZlY3Rvcik7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlbW92ZVByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfSURFTlRJRklFUlMpOwotICAgICAgCi0gICAgaWYgKGNhdE1vZGlmaWVkU3RhdGVzICE9IG51bGwgJiYgY2F0Vmlld0lkcyAhPSBudWxsICYmIGNhdFR5cGVzICE9IG51bGwgJiYgY2F0S2V5TmFtZXMgIT0gbnVsbCAmJiBjYXRLZXlWYWx1ZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBWZWN0b3Igb2xkQ2F0TGlzdEVsZW1lbnRWZWN0b3IgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9DQVRFR09SSUVTKTsKLSAgICAgIFZlY3RvciBuZXdDYXRMaXN0RWxlbWVudFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGZvciAoaW50IGk9MDtpPGNhdFR5cGVzLmxlbmd0aDtpKyspCi0gICAgICB7Ci0gICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gbmV3IEtleWVkUmVmZXJlbmNlKGNhdEtleU5hbWVzW2ldLGNhdEtleVZhbHVlc1tpXSxjYXRUeXBlc1tpXSk7Ci0gICAgICAgIGludCBjYXRWaWV3SWQgPSBJbnRlZ2VyLnBhcnNlSW50KGNhdFZpZXdJZHNbaV0pOwotICAgICAgICBib29sZWFuIGlzTW9kaWZpZWQgPSBCb29sZWFuLnZhbHVlT2YoY2F0TW9kaWZpZWRTdGF0ZXNbaV0pLmJvb2xlYW5WYWx1ZSgpOwotICAgICAgICBpZiAoY2F0Vmlld0lkID09IC0xIHx8IGlzTW9kaWZpZWQpCi0gICAgICAgICAgbmV3Q2F0TGlzdEVsZW1lbnRWZWN0b3IuYWRkRWxlbWVudChuZXcgTGlzdEVsZW1lbnQoa3IpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIG5ld0NhdExpc3RFbGVtZW50VmVjdG9yLmFkZEVsZW1lbnQob2xkQ2F0TGlzdEVsZW1lbnRWZWN0b3IuZWxlbWVudEF0KGNhdFZpZXdJZCkpOwotICAgICAgfQotICAgICAgcmVpbmRleExpc3RFbGVtZW50VmVjdG9yKG5ld0NhdExpc3RFbGVtZW50VmVjdG9yKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0NBVEVHT1JJRVMsbmV3Q2F0TGlzdEVsZW1lbnRWZWN0b3IpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZW1vdmVQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0NBVEVHT1JJRVMpOyAgICAgICAgICAgIAotICAgIHJldHVybiBpbnB1dHNWYWxpZDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJlZnJlc2hGcm9tUmVnaXN0cnkoKQotICB7Ci0gICAgY29udHJvbGxlcl8uZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgU3RyaW5nIHV1aWRLZXkgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9JTlRFUkZBQ0VfS0VZKTsKLSAgICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgVURESVByb3h5IHByb3h5ID0gcmVnRWxlbWVudC5nZXRQcm94eSgpOwotICAgICAgVE1vZGVsRGV0YWlsIHRNb2RlbERldGFpbCA9IHByb3h5LmdldF90TW9kZWxEZXRhaWwodXVpZEtleSk7Ci0gICAgICBWZWN0b3IgdE1vZGVsVmVjdG9yID0gdE1vZGVsRGV0YWlsLmdldFRNb2RlbFZlY3RvcigpOwotICAgICAgaWYgKHRNb2RlbFZlY3Rvci5zaXplKCkgPiAwKQotICAgICAgewotICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoVURESUFjdGlvbklucHV0cy5MQVRFU1RfT0JKRUNULHRNb2RlbFZlY3Rvci5lbGVtZW50QXQoMCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKFVERElFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBGZWVkYmFjayB2aWEgSmF2YXNjcmlwdCBwb3B1cHMuCi0gICAgfQotICAgIGNhdGNoIChUcmFuc3BvcnRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBGZWVkYmFjayB2aWEgSmF2YXNjcmlwdCBwb3B1cHMuCi0gICAgfQotICAgIGlzVXBkYXRlXyA9IGZhbHNlOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAgIAotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgU3RyaW5nIHV1aWRLZXkgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9JTlRFUkZBQ0VfS0VZKTsgICAgICAKLSAgICAgIFN0cmluZyBwdWJsaXNoVVJMID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICAgICBTdHJpbmcgdXNlcklkID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgICAgU3RyaW5nIHBhc3N3b3JkID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCk7Ci0gICAgICBMaXN0RWxlbWVudCB3c2RsVVJMTGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfV1NETF9VUkwpOwotICAgICAgTGlzdEVsZW1lbnQgbmFtZUxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUpOwotICAgICAgVmVjdG9yIGRlc2NyaXB0aW9uTGlzdEVsZW1lbnRWZWN0b3IgPSAoVmVjdG9yKXByb3BlcnR5VGFibGVfLmdldChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0RFU0NSSVBUSU9OUyk7Ci0gICAgICBWZWN0b3IgaWRMaXN0RWxlbWVudFZlY3RvciA9IChWZWN0b3IpcHJvcGVydHlUYWJsZV8uZ2V0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfSURFTlRJRklFUlMpOwotICAgICAgVmVjdG9yIGNhdExpc3RFbGVtZW50VmVjdG9yID0gKFZlY3Rvcilwcm9wZXJ0eVRhYmxlXy5nZXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9DQVRFR09SSUVTKTsKLSAgICAgIAotICAgICAgU3RyaW5nIHdzZGxVUkwgPSAoU3RyaW5nKXdzZGxVUkxMaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgIAotICAgICAgU3RyaW5nIG5hbWUgPSAoU3RyaW5nKW5hbWVMaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgIAotICAgICAgVmVjdG9yIGRlc2NyaXB0aW9uVmVjdG9yID0gbnVsbDsKLSAgICAgIGlmIChkZXNjcmlwdGlvbkxpc3RFbGVtZW50VmVjdG9yICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGRlc2NyaXB0aW9uVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgICBmb3IgKGludCBpPTA7aTxkZXNjcmlwdGlvbkxpc3RFbGVtZW50VmVjdG9yLnNpemUoKTtpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClkZXNjcmlwdGlvbkxpc3RFbGVtZW50VmVjdG9yLmVsZW1lbnRBdChpKTsKLSAgICAgICAgICBEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IChEZXNjcmlwdGlvbilsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICAgICBkZXNjcmlwdGlvblZlY3Rvci5hZGRFbGVtZW50KGRlc2NyaXB0aW9uKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgCi0gICAgICBJZGVudGlmaWVyQmFnIGlkQmFnID0gbnVsbDsKLSAgICAgIGlmIChpZExpc3RFbGVtZW50VmVjdG9yICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGlkQmFnID0gbmV3IElkZW50aWZpZXJCYWcoKTsKLSAgICAgICAgZm9yIChpbnQgaT0wO2k8aWRMaXN0RWxlbWVudFZlY3Rvci5zaXplKCk7aSsrKQotICAgICAgICB7Ci0gICAgICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpaWRMaXN0RWxlbWVudFZlY3Rvci5lbGVtZW50QXQoaSk7Ci0gICAgICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSAoS2V5ZWRSZWZlcmVuY2UpbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgICAgaWRCYWcuYWRkKGtyKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgCi0gICAgICBDYXRlZ29yeUJhZyBjYXRCYWcgPSBudWxsOwotICAgICAgaWYgKGNhdExpc3RFbGVtZW50VmVjdG9yICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGNhdEJhZyA9IG5ldyBDYXRlZ29yeUJhZygpOwotICAgICAgICBmb3IgKGludCBpPTA7aTxjYXRMaXN0RWxlbWVudFZlY3Rvci5zaXplKCk7aSsrKQotICAgICAgICB7Ci0gICAgICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpY2F0TGlzdEVsZW1lbnRWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gKEtleWVkUmVmZXJlbmNlKWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgICAgIGNhdEJhZy5hZGQoa3IpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIFRNb2RlbCB0TW9kZWwgPSAobmV3IFVkZGk0akhlbHBlcigpKS5uZXdUTW9kZWwod3NkbFVSTCk7Ci0gICAgICBpZiAoaXNVcGRhdGVfKQotICAgICAgICB0TW9kZWwuc2V0VE1vZGVsS2V5KHV1aWRLZXkpOwotICAgICAgdE1vZGVsLnNldE5hbWUobmFtZSk7ICAgICAgCi0gICAgICB0TW9kZWwuc2V0RGVzY3JpcHRpb25WZWN0b3IoZGVzY3JpcHRpb25WZWN0b3IpOwotICAgICAgdE1vZGVsLnNldElkZW50aWZpZXJCYWcoaWRCYWcpOwotICAgICAgdE1vZGVsLnNldENhdGVnb3J5QmFnKGNhdEJhZyk7Ci0gICAgICAKLSAgICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlXy5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgaWYgKCFyZWdFbGVtZW50LmlzTG9nZ2VkSW4oKSkKLSAgICAgICAgcmVnRWxlbWVudC5wZXJmb3JtTG9naW4ocHVibGlzaFVSTCx1c2VySWQscGFzc3dvcmQpOwotICAgICAgVURESVByb3h5IHByb3h5ID0gcmVnRWxlbWVudC5nZXRQcm94eSgpOwotICAgICAgVmVjdG9yIHRNb2RlbFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIHRNb2RlbFZlY3Rvci5hZGQodE1vZGVsKTsKLSAgICAgIHRNb2RlbCA9IChUTW9kZWwpcHJveHkuc2F2ZV90TW9kZWwocmVnRWxlbWVudC5nZXRBdXRoSW5mb1N0cmluZygpLCB0TW9kZWxWZWN0b3IpLmdldFRNb2RlbFZlY3RvcigpLmdldCgwKTsKLSAgICAgIHJlZnJlc2hOb2RlKHRNb2RlbCk7Ci0gICAgICBpZiAoaXNVcGRhdGVfKSAgICAgIAotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fU0VSVklDRV9JTlRFUkZBQ0VfVVBEQVRFRCIsdE1vZGVsLmdldE5hbWVTdHJpbmcoKSkpOwotICAgICAgZWxzZQotICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fU0VSVklDRV9JTlRFUkZBQ0VfUFVCTElTSEVEIix0TW9kZWwuZ2V0TmFtZVN0cmluZygpKSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY2F0Y2ggKFdTRExFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBoYW5kbGVVbmV4cGVjdGVkRXhjZXB0aW9uKHVkZGlQZXJzcGVjdGl2ZSxtZXNzYWdlUXVldWUsIldTRExFeGNlcHRpb24iLGUpOwotICAgIH0KLSAgICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgaGFuZGxlVW5leHBlY3RlZEV4Y2VwdGlvbih1ZGRpUGVyc3BlY3RpdmUsbWVzc2FnZVF1ZXVlLCJUcmFuc3BvcnRFeGNlcHRpb24iLGUpOwotICAgIH0KLSAgICBjYXRjaCAoVURESUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAJaWYoVURESUV4Y2VwdGlvbkhhbmRsZXIucmVxdWlyZXNSZXNldChlKSl7Ci0gICAgCQlSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZV8uZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAJCXJlZ0VsZW1lbnQuc2V0RGVmYXVsdHMoKTsKLSAgICAJfQotICAgIAltZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0Q29udHJvbGxlcigpLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgIAltZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgiVURESUV4Y2VwdGlvbiIpOwotICAgIAltZXNzYWdlUXVldWUuYWRkTWVzc2FnZShlLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgaGFuZGxlVW5leHBlY3RlZEV4Y2VwdGlvbih1ZGRpUGVyc3BlY3RpdmUsbWVzc2FnZVF1ZXVlLCJNYWxmb3JtZWRVUkxFeGNlcHRpb24iLGUpOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9jb25zdGFudHMvVURESUFjdGlvbklucHV0cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2NvbnN0YW50cy9VRERJQWN0aW9uSW5wdXRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0N2IyYjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2NvbnN0YW50cy9VRERJQWN0aW9uSW5wdXRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50czsKLQotcHVibGljIGNsYXNzIFVERElBY3Rpb25JbnB1dHMKLXsKLSAgLy8gT3BlblJlZ2lzdHJ5QWN0aW9uCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFR0lTVFJZX05BTUUgPSAicmVnaXN0cnlOYW1lIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5RVUlSWV9VUkwgPSAiaW5xdWlyeVVSTCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBVQkxJU0hfVVJMID0gInB1Ymxpc2hVUkwiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRUdJU1RSQVRJT05fVVJMID0gInJlZ2lzdHJhdGlvblVSTCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENIRUNLX1VTRVJfREVGSU5FRF9DQVRFR09SSUVTID0gImNoZWNrVXNlckRlZmluZWRDYXRlZ29yaWVzIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVURESV9VU0VSTkFNRSA9ICJ1ZGRpVXNlcm5hbWUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBVRERJX1BBU1NXT1JEID0gInVkZGlQYXNzd29yZCI7Ci0KLSAgLy8gRml4ZWQgYW5kIHVzZXItZGVmaW5lZCBjYXRlZ29yaWVzCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENBVEVHT1JJRVNfRElSRUNUT1JZID0gImNhdGVnb3JpZXNEaXJlY3RvcnkiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDQVRFR09SWV9UTU9ERUxfS0VZID0gImNhdGVnb3J5VE1vZGVsS2V5IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0FURUdPUllfRklMRU5BTUUgPSAiY2F0ZWdvcnlGaWxlTmFtZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFVTRVJfREVGSU5FRF9DQVRFR09SSUVTID0gInVzZXJEZWZpbmVkQ2F0ZWdvcmllcyI7Ci0KLSAgLy8gRGlzY292ZXJ5IFVSTCB1c2UgdHlwZQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBESVNDT1ZFUllfVVJMX1RZUEUgPSAiYnVzaW5lc3NFbnRpdHkiOwotCi0gIC8vIFJlc3VsdHMgKE5PREVJRCkKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9ERUlEX1NFUlZJQ0VfSU5URVJGQUNFID0gIm5vZGVJZF9TZXJ2aWNlSW50ZXJmYWNlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9ERUlEX1NFUlZJQ0UgPSAibm9kZUlkX1NlcnZpY2UiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOT0RFSURfQlVTSU5FU1MgPSAibm9kZUlkX0J1c2luZXNzIjsKLQotICAvLyBSZWdGaW5kLi5BY3Rpb25zL1JlZ1B1Ymxpc2guLkFjdGlvbnMKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfT1ZFUlJJREVfQUREX1FVRVJZX05PREUgPSAib3ZlcnJpZGVBZGRRdWVyeU5vZGUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9OQU1FID0gInF1ZXJ5TmFtZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lURU0gPSAicXVlcnlJdGVtIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUVVFUllfSVRFTV9RVUVSSUVTID0gLTE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFFVRVJZX0lURU1fQlVTSU5FU1NFUyA9IDA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFFVRVJZX0lURU1fU0VSVklDRVMgPSAxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBRVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUyA9IDI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFFVRVJZX1NUWUxFX1NJTVBMRSA9IDA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFFVRVJZX1NUWUxFX0FEVkFOQ0VEID0gMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUVVFUllfU1RZTEVfVVVJRCA9IDI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX09XTkVEID0gImFkdmFuY2VkT3duZWQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCA9ICJhZHZhbmNlZFB1Ymxpc2hVUkwiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQgPSAiYWR2YW5jZWRVc2VySWQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCA9ICJhZHZhbmNlZFBhc3N3b3JkIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfTkFNRV9MQU5HVUFHRSA9ICJhZHZhbmNlZE5hbWVMYW5ndWFnZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX05BTUUgPSAiYWR2YW5jZWROYW1lIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfSURFTlRJRklFUl9UWVBFID0gImFkdmFuY2VkSWRlbnRpZmllclR5cGUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9JREVOVElGSUVSX0tFWV9OQU1FID0gImFkdmFuY2VkSWRlbnRpZmllcktleU5hbWUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9JREVOVElGSUVSX0tFWV9WQUxVRSA9ICJhZHZhbmNlZElkZW50aWZpZXJLZXlWYWx1ZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX0NBVEVHT1JZX1RZUEUgPSAiYWR2YW5jZWRDYXRlZ29yeVR5cGUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9DQVRFR09SWV9LRVlfTkFNRSA9ICJhZHZhbmNlZENhdGVnb3J5S2V5TmFtZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX0NBVEVHT1JZX0tFWV9WQUxVRSA9ICJhZHZhbmNlZENhdGVnb3J5S2V5VmFsdWUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9ESVNDT1ZFUllVUkwgPSAiYWR2YW5jZWREaXNjb3ZlcnlVUkwiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9GSU5EUVVBTElGSUVSID0gImFkdmFuY2VkRmluZFF1YWxpZmllciI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NPUlRfQllfTkFNRSA9ICJhZHZhbmNlZFNvcnRCeU5hbWUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9TT1JUX0JZX0RBVEUgPSAiYWR2YW5jZWRTb3J0QnlEYXRlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfTUFYX1NFQVJDSF9TRVQgPSAiYWR2YW5jZWRNYXhTZWFyY2hTZXQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBRVUVSWV9NQVhfU0VBUkNIX1NFVCA9IDEwMDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfTUFYX1JFU1VMVFMgPSAiYWR2YW5jZWRNYXhSZXN1bHRzIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUVVFUllfTUFYX1JFU1VMVFMgPSAxMDsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9TVFlMRV9CVVNJTkVTU0VTID0gInF1ZXJ5U3R5bGVCdXNpbmVzc2VzIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfU0lNUExFX0JVU0lORVNTX05BTUUgPSAic2ltcGxlQnVzaW5lc3NOYW1lIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfT1dORUQgPSAiYWR2YW5jZWRCdXNpbmVzc093bmVkIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTkFNRVMgPSAiYWR2YW5jZWRCdXNpbmVzc05hbWVzIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfSURFTlRJRklFUlMgPSAiYWR2YW5jZWRCdXNpbmVzc0lkZW50aWZpZXJzIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfQ0FURUdPUklFUyA9ICJhZHZhbmNlZEJ1c2luZXNzQ2F0ZWdvcmllcyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RJU0NPVkVSWVVSTFMgPSAiYWR2YW5jZWRCdXNpbmVzc0Rpc2NvdmVyeVVSTHMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19TRVJWSUNFX0lOVEVSRkFDRVMgPSAiYWR2YW5jZWRCdXNpbmVzc1NlcnZpY2VJbnRlcmZhY2VzIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfU0VSVklDRV9JTlRFUkZBQ0VTX0NPUFkgPSAiYWR2YW5jZWRCdXNpbmVzc1NlcnZpY2VJbnRlcmZhY2VzQ29weSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX1RNT0RFTEJBRyA9ICJhZHZhbmNlZEJ1c2luZXNzVE1vZGVsQmFnIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfRklORFFVQUxJRklFUlMgPSAiYWR2YW5jZWRCdXNpbmVzc0ZpbmRRdWFsaWZpZXJzIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTUFYX1NFQVJDSF9TRVQgPSAiYWR2YW5jZWRCdXNpbmVzc01heFNlYXJjaFNldCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX01BWF9SRVNVTFRTID0gImFkdmFuY2VkQnVzaW5lc3NNYXhSZXN1bHRzIjsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9TVFlMRV9TRVJWSUNFUyA9ICJxdWVyeVN0eWxlU2VydmljZXMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9OQU1FID0gInNpbXBsZVNlcnZpY2VOYW1lIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9PV05FRCA9ICJhZHZhbmNlZFNlcnZpY2VPd25lZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQlVTSU5FU1MgPSAiYWR2YW5jZWRTZXJ2aWNlQnVzaW5lc3MiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0JVU0lORVNTX0NPUFkgPSAiYWR2YW5jZWRTZXJ2aWNlQnVzaW5lc3NDb3B5IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX1BST1ZJREVSID0gImFkdmFuY2VkU2VydmljZVNlcnZpY2VQcm92aWRlciI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTkFNRVMgPSAiYWR2YW5jZWRTZXJ2aWNlTmFtZXMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0NBVEVHT1JJRVMgPSAiYWR2YW5jZWRTZXJ2aWNlQ2F0ZWdvcmllcyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9JTlRFUkZBQ0VTID0gImFkdmFuY2VkU2VydmljZVNlcnZpY2VJbnRlcmZhY2VzIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX0lOVEVSRkFDRVNfQ09QWSA9ICJhZHZhbmNlZFNlcnZpY2VTZXJ2aWNlSW50ZXJmYWNlc0NvcHkiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1RNT0RFTCA9ICJhZHZhbmNlZFNlcnZpY2VUTW9kZWwiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1RNT0RFTEJBRyA9ICJhZHZhbmNlZFNlcnZpY2VUTW9kZWxCYWciOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0ZJTkRRVUFMSUZJRVJTID0gImFkdmFuY2VkU2VydmljZUZpbmRRdWFsaWZpZXJzIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9NQVhfU0VBUkNIX1NFVCA9ICJhZHZhbmNlZFNlcnZpY2VNYXhTZWFyY2hTZXQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX01BWF9SRVNVTFRTID0gImFkdmFuY2VkU2VydmljZU1heFJlc3VsdHMiOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX1NUWUxFX1NFUlZJQ0VfSU5URVJGQUNFUyA9ICJxdWVyeVN0eWxlU2VydmljZUludGVyZmFjZXMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSA9ICJzaW1wbGVTZXJ2aWNlSW50ZXJmYWNlTmFtZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1VTRV9TRVJWSUNFID0gImFkdmFuY2VkVXNlU2VydmljZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1NFUlZJQ0UgPSAiYWR2YW5jZWRTZXJ2aWNlSW50ZXJmYWNlU2VydmljZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1NFUlZJQ0VfQ09QWSA9ICJhZHZhbmNlZFNlcnZpY2VJbnRlcmZhY2VTZXJ2aWNlQ29weSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0JVU0lORVNTX1NFUlZJQ0UgPSAiYWR2YW5jZWRTZXJ2aWNlSW50ZXJmYWNlQnVzaW5lc3NTZXJ2aWNlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfT1dORUQgPSAiYWR2YW5jZWRTZXJ2aWNlSW50ZXJmYWNlT3duZWQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FID0gImFkdmFuY2VkU2VydmljZUludGVyZmFjZU5hbWUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9JREVOVElGSUVSUyA9ICJhZHZhbmNlZFNlcnZpY2VJbnRlcmZhY2VJZGVudGlmaWVycyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0NBVEVHT1JJRVMgPSAiYWR2YW5jZWRTZXJ2aWNlSW50ZXJmYWNlQ2F0ZWdvcmllcyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0ZJTkRRVUFMSUZJRVJTID0gImFkdmFuY2VkU2VydmljZUludGVyZmFjZUZpbmRRdWFsaWZpZXJzIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTUFYX1NFQVJDSF9TRVQgPSAiYWR2YW5jZWRTZXJ2aWNlSW50ZXJmYWNlTWF4U2VhcmNoU2V0IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTUFYX1JFU1VMVFMgPSAiYWR2YW5jZWRTZXJ2aWNlSW50ZXJmYWNlTWF4UmVzdWx0cyI7Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9SRUdJU1RSWV9OQU1FID0gImFkdmFuY2VkUmVnaXN0cnlOYW1lIjsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9VVUlEX0tFWSA9ICJ1dWlkS2V5IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfVVVJRF9CVVNJTkVTU19LRVkgPSAidXVpZEJ1c2luZXNzS2V5IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfVVVJRF9TRVJWSUNFX0tFWSA9ICJ1dWlkU2VydmljZUtleSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9JTlRFUkZBQ0VfS0VZID0gInV1aWRTZXJ2aWNlSW50ZXJmYWNlS2V5IjsKLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX09VVFBVVF9TQVZFRF9UTU9ERUwgPSAic2F2ZWRUTW9kZWwiOwotCi0gIC8vIFN1YiBRdWVyaWVzOgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTVUJRVUVSSUVTX1BST1BFUlRJRVMgPSAic3ViUXVlcmllc1Byb3BlcnRpZXMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTVUJRVUVSWV9LRVkgPSAic3ViUXVlcnlLZXkiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBORVdfU1VCUVVFUllfSU5JVElBVEVEID0gIm5ld1N1YlF1ZXJ5SW5pdGlhdGVkIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkVXX1NVQlFVRVJZX1FVRVJZX0lURU0gPSAibmV3U3ViUXVlcnlRdWVyeUl0ZW0iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTRUxFQ1RFRF9OT0RFSURTID0gInNlbGVjdGVkTm9kZUlkcyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNVQlFVRVJZX0xJU1RfS0VZID0gInN1YlF1ZXJ5TGlzdEtleSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNVQlFVRVJZX0xJU1RfSVRFTUlEID0gInN1YlF1ZXJ5TGlzdEl0ZW1JZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNIT1dfUkVTVUxUU19UQVJHRVQgPSAic2hvd1Jlc3VsdHNUYXJnZXQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTVUJRVUVSWV9HRVQgPSAic3ViUXVlcnlHZXQiOwotCi0gIC8vIFJlZ1B1Ymxpc2guLkFjdGlvbnMgKHNvbWUgY29uc3RhbnRzIGZyb20gdGhlIFJlZ0ZpbmQuLi5BY3Rpb25zIHdpbGwgYmUgcmV1c2VkLgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9TSU1QTEVfQlVTSU5FU1NfREVTQ1JJUFRJT04gPSAic2ltcGxlQnVzaW5lc3NEZXNjcmlwdGlvbiI7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfREVTQ1JJUFRJT05fTEFOR1VBR0UgPSAiYWR2YW5jZWREZXNjcmlwdGlvbkxhbmd1YWdlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQURWQU5DRURfREVTQ1JJUFRJT04gPSAiYWR2YW5jZWREZXNjcmlwdGlvbiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RFU0NSSVBUSU9OUyA9ICJhZHZhbmNlZEJ1c2luZXNzRGVzY3JpcHRpb25zIjsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9XU0RMX1VSTCA9ICJ3c2RsVVJMIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfSU5URVJGQUNFX1dTRExfVVJMID0gInNpbXBsZVNlcnZpY2VJbnRlcmZhY2VXU0RMVVJMIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfSU5URVJGQUNFX0RFU0NSSVBUSU9OID0gInNpbXBsZVNlcnZpY2VJbnRlcmZhY2VEZXNjcmlwdGlvbiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1dTRExfVVJMID0gImFkdmFuY2VkU2VydmljZUludGVyZmFjZVdTRExVUkwiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9ERVNDUklQVElPTlMgPSAiYWR2YW5jZWRTZXJ2aWNlSW50ZXJmYWNlRGVzY3JpcHRpb25zIjsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9CVVNJTkVTUyA9ICJzaW1wbGVTZXJ2aWNlQnVzaW5lc3MiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9CVVNJTkVTU19DT1BZID0gInNpbXBsZVNlcnZpY2VCdXNpbmVzc0NvcHkiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9TRVJWSUNFX1BST1ZJREVSID0gInNpbXBsZVNlcnZpY2VTZXJ2aWNlUHJvdmlkZXIiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9XU0RMX1VSTCA9ICJzaW1wbGVTZXJ2aWNlV1NETFVSTCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0RFU0NSSVBUSU9OID0gInNpbXBsZVNlcnZpY2VEZXNjcmlwdGlvbiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfV1NETF9VUkwgPSAiYWR2YW5jZWRTZXJ2aWNlV1NETFVSTCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfREVTQ1JJUFRJT05TID0gImFkdmFuY2VkU2VydmljZURlc2NyaXB0aW9ucyI7Ci0KLSAgLy8gV1NETCBCcm93c2VyCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBST0pFQ1QgPSAicHJvamVjdCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFdTRExfVFlQRSA9ICJ3c2RsVHlwZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdTRExfVFlQRV9TRVJWSUNFX0lOVEVSRkFDRSA9IDA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdTRExfVFlQRV9TRVJWSUNFID0gMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfV0VCUFJPSkVDVF9XU0RMX1VSTCA9ICJ3ZWJQcm9qZWN0V1NETFVSTCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX0ZBVk9SSVRFX1dTRExfVVJMID0gImZhdm9yaXRlV1NETFVSTCI7Ci0KLSAgLy8gRGV0YWlscwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBMQVRFU1RfT0JKRUNUID0gImxhdGVzdE9iamVjdCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERJU0NPVkVSWVVSTF9NT0RJRklFRCA9ICJkaXNjb3ZlcnlVUkxNb2RpZmllZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERJU0NPVkVSWVVSTF9WSUVXSUQgPSAiZGlzY292ZXJ5VVJMVmlld0lkIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRV9NT0RJRklFRCA9ICJuYW1lTW9kaWZpZWQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FX1ZJRVdJRCA9ICJidXNpbmVzc1ZpZXdJZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERFU0NSSVBUSU9OX01PRElGSUVEID0gImRlc2NyaXB0aW9uTW9kaWZpZWQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERVNDUklQVElPTl9WSUVXSUQgPSAiZGVzY3JpcHRpb25WaWV3SWQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJREVOVElGSUVSX01PRElGSUVEID0gImlkZW50aWZpZXJNb2RpZmllZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElERU5USUZJRVJfVklFV0lEID0gImlkZW50aWZpZXJWaWV3SWQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDQVRFR09SWV9NT0RJRklFRCA9ICJjYXRlZ29yeU1vZGlmaWVkIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0FURUdPUllfVklFV0lEID0gImNhdGVnb3J5Vmlld0lkIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgV1NETF9VUkxfTU9ESUZJRUQgPSAid3NkbFVSTE1vZGlmaWVkIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFVCTElTSF9BQ1RJT04gPSAicHVibGlzaEFjdGlvbiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIExBVEVTVF9CVVNJTkVTUyA9ICJsYXRlc3RCdXNpbmVzcyI7Ci0KLSAgLy8gUmVmcmVzaCBhY3Rpb24KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVGUkVTSF9OT0RFID0gInJlZnJlc2hOb2RlIjsKLQotICAvLyBNYW5hZ2UgUHVibGlzaGVyQXNzZXJ0aW9ucwotICAvLyAiVG8iIG1lYW5zIGZyb20gYW5vdGhlciBidXNpbmVzcyB0byBteSBvd25pbmcgYnVzaW5lc3MKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRElSRUNUSU9OX1RPID0gMDsKLSAgLy8gIkZyb20iIG1lYW5zIGZyb20gbXkgb3duaW5nIGJ1c2luZXNzIHRvIGFub3RoZXIgYnVzaW5lc3MKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRElSRUNUSU9OX0ZST00gPSAxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQVUJMSVNIRVJfQVNTRVJUSU9OU19WSUVXSUQgPSAicHVibGlzaGVyQXNzZXJ0aW9uc1ZpZXdJZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBVQkxJU0hFUl9BU1NFUlRJT05TX1NFTEVDVEVEX0JVU19JRCA9ICJwdWJsaXNoZXJBc3NlcnRpb25zU2VsZWN0ZWRCdXNJRCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBVQkxJU0hFUl9BU1NFUlRJT05TX0RJUkVDVElPTiA9ICJwdWJsaXNoZXJBc3NlcnRpb25zRGlyZWN0aW9uIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQUREX1BVQkxJU0hFUl9BU1NFUlRJT05TID0gInF1ZXJ5SW5wdXRBZGRQdWJsaXNoZXJBc3NlcnRpb25zIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfQUREX1BVQkxJU0hFUl9BU1NFUlRJT05TX0NPUFkgPSAicXVlcnlJbnB1dEFkZFB1Ymxpc2hlckFzc2VydGlvbnNDb3B5IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfSU5QVVRfRVhJU1RJTkdfUFVCTElTSEVSX0FTU0VSVElPTlMgPSAicXVlcnlJbnB1dEV4aXN0aW5nUHVibGlzaGVyQXNzZXJ0aW9ucyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBVQkxJU0hFUl9BU1NFUlRJT05TX1RZUEUgPSAicHVibGlzaGVyQXNzZXJ0aW9uc1R5cGUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQVUJMSVNIRVJfQVNTRVJUSU9OU19UWVBFX1BBUkVOVF9DSElMRCA9ICJwYXJlbnQtY2hpbGQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQVUJMSVNIRVJfQVNTRVJUSU9OU19UWVBFX1BFRVJfVE9fUEVFUiA9ICJwZWVyLXBlZXIiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQVUJMSVNIRVJfQVNTRVJUSU9OU19UWVBFX0lERU5USVRZID0gImlkZW50aXR5IjsKLQotICAvLyBNYW5hZ2UgUmVmZXJlbmNlZCBTZXJ2aWNlcwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9JTlBVVF9SRUZFUkVOQ0VEX1NFUlZJQ0VTID0gInJlZmVyZW5jZWRTZXJ2aWNlcyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0lOUFVUX1NFUlZJQ0VTID0gInNlcnZpY2VzIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUFOQUdFX1JFRkVSRU5DRURfU0VSVklDRVNfT1BFUkFUSU9OID0gIm1hbmFnZWRSZWZlcmVuY2VkU2VydmljZXNPcGVyYXRpb24iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQU5BR0VfUkVGRVJFTkNFRF9TRVJWSUNFU19PUEVSQVRJT05fQUREID0gMDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFOQUdFX1JFRkVSRU5DRURfU0VSVklDRVNfT1BFUkFUSU9OX1JFTU9WRSA9IDE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFRkVSRU5DRURfU0VSVklDRV9TRUxFQ1RfU1RBVEUgPSAicmVmZXJlbmNlZFNlcnZpY2VTZWxlY3RTdGF0ZSI7Ci0gIAotICAvLyBSZXNpemVVRERJRnJhbWVBY3Rpb24KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRlJBTUVTRVRfQ09MU19QRVJTUEVDVElWRV9DT05URU5UID0gImZyYW1lc2V0Q29sc1BlcnNwZWN0aXZlQ29udGVudCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIgPSAiZnJhbWVzZXRSb3dzQWN0aW9uc0NvbnRhaW5lciI7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvY29uc3RhbnRzL1VERElGcmFtZU5hbWVzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvY29uc3RhbnRzL1VERElGcmFtZU5hbWVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzZDBiNGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2NvbnN0YW50cy9VRERJRnJhbWVOYW1lcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgVURESUZyYW1lTmFtZXMKLXsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTkFWSUdBVE9SX0NPTlRBSU5FUiA9ICJ1ZGRpX25hdmlnYXRvcl9jb250YWluZXIiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBOQVZJR0FUT1JfVE9PTEJBUiA9ICJ1ZGRpX25hdmlnYXRvcl90b29sYmFyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTkFWSUdBVE9SX0NPTlRFTlQgPSAidWRkaV9uYXZpZ2F0b3JfY29udGVudCI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIEFDVElPTlNfQ09OVEFJTkVSID0gInVkZGlfYWN0aW9uc19jb250YWluZXIiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBQUk9QRVJUSUVTX0NPTlRBSU5FUiA9ICJ1ZGRpX3Byb3BlcnRpZXNfY29udGFpbmVyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPUEVSVElFU19UT09MQkFSID0gInVkZGlfcHJvcGVydGllc190b29sYmFyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPUEVSVElFU19DT05URU5UID0gInVkZGlfcHJvcGVydGllc19jb250ZW50IjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgU1RBVFVTX0NPTlRBSU5FUiA9ICJ1ZGRpX3N0YXR1c19jb250YWluZXIiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBTVEFUVVNfVE9PTEJBUiA9ICJ1ZGRpX3N0YXR1c190b29sYmFyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgU1RBVFVTX0NPTlRFTlQgPSAidWRkaV9zdGF0dXNfY29udGVudCI7Ci0KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgQ0FURUdPUklFU19XT1JLQVJFQSA9ICJjYXRlZ29yaWVzX3dvcmthcmVhIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgQ0FURUdPUklFU19UT09MQkFSID0gImNhdGVnb3JpZXNfdG9vbGJhciI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIENBVEVHT1JJRVNfQ09OVEVOVCA9ICJjYXRlZ29yaWVzX2NvbnRlbnQiOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2NvbnN0YW50cy9VRERJTW9kZWxDb25zdGFudHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9jb25zdGFudHMvVURESU1vZGVsQ29uc3RhbnRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlM2M5YTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2NvbnN0YW50cy9VRERJTW9kZWxDb25zdGFudHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50czsKLQotcHVibGljIGNsYXNzIFVERElNb2RlbENvbnN0YW50cwotewotICAvLyBSZWdpc3RyaWVzIHVuZGVyIFVERElNYWluLgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRUxfUkVHSVNUUklFUyA9ICJyZWdpc3RyaWVzIjsKLQotICAvLyBFeGVjdXRlZCBRdWVyaWVzIGZvbGRlciB1bmRlciBhIHJlZ2lzdHJ5LgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRUxfUVVFUklFU19QQVJFTlQgPSAicXVlcmllc1BhcmVudCI7Ci0KLSAgLy8gUHVibGlzaGVkIEJ1c2luZXNzZXMgZm9sZGVyIHVuZGVyIGEgcmVnaXN0cnkuCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFTF9QVUJMSVNIRURfQlVTSU5FU1NFU19QQVJFTlQgPSAicHVibGlzaGVkQnVzaW5lc3Nlc1BhcmVudCI7Ci0KLSAgLy8gUHVibGlzaGVkIFNlcnZpY2VzIGZvbGRlciB1bmRlciBhIHJlZ2lzdHJ5LgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRUxfUFVCTElTSEVEX1NFUlZJQ0VTX1BBUkVOVCA9ICJwdWJsaXNoZWRTZXJ2aWNlc1BhcmVudCI7Ci0KLSAgLy8gUHVibGlzaGVkIFNlcnZpY2UgaW50ZXJmYWNlcyBmb2xkZXIgdW5kZXIgYSByZWdpc3RyeS4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVMX1BVQkxJU0hFRF9TRVJWSUNFX0lOVEVSRkFDRVNfUEFSRU5UID0gInB1Ymxpc2hlZFNlcnZpY2VJbnRlcmZhY2VzUGFyZW50IjsKLQotICAvLyBRdWVyaWVzIHVuZGVyIHRoZSBRdWVyaWVzIGZvbGRlci4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVMX1FVRVJJRVMgPSAicXVlcmllcyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElOSVRJQUxfUkVTVUxUUyA9ICJpbml0aWFsUmVzdWx0cyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX1RZUEUgPSAicXVlcnlUeXBlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1VCUVVFUllfVFJBTlNGRVJfVEFSR0VUID0gInN1YlF1ZXJ5VHJhbnNmZXJUYXJnZXQiOwotCi0gIC8vIE9iamVjdHMgdW5kZXIgYSBRdWVyeSBub2RlLgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRUxfUVVFUllfUkVTVUxUUyA9ICJxdWVyeVJlc3VsdHMiOwotCi0gIC8vIENhdGVnb3JpZXMKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVMX1NVQkNBVEVHT1JJRVMgPSAic3ViQ2F0ZWdvcmllcyI7Ci0KLSAgLy8gUHVibGlzaGVkIGl0ZW1zIGluc2lkZSB0aGUgUHVibGlzaGVkIGl0ZW1zIGZvbGRlci4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVMX1BVQkxJU0hFRF9JVEVNUyA9ICJwdWJsaXNoZWRJdGVtcyI7Ci0KLSAgLy8gQnVzaW5lc3NlcwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJU19CVVNJTkVTU19PV05FRCA9ICJpc0J1c2luZXNzT3duZWQiOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2RhdGFtb2RlbC9BYnN0cmFjdFVERElFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvZGF0YW1vZGVsL0Fic3RyYWN0VURESUVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGNiNWQwMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvZGF0YW1vZGVsL0Fic3RyYWN0VURESUVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLk1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFVERElFbGVtZW50IGV4dGVuZHMgVHJlZUVsZW1lbnQKLXsKLSAgcHVibGljIEFic3RyYWN0VURESUVsZW1lbnQoU3RyaW5nIG5hbWUsIE1vZGVsIG1vZGVsKQotICB7Ci0gICAgc3VwZXIobmFtZSwgbW9kZWwpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFRyZWVFbGVtZW50IGdldFBhcmVudEVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIGdldFBhcmVudEVsZW1lbnQodGhpcyk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgVHJlZUVsZW1lbnQgZ2V0UGFyZW50RWxlbWVudChUcmVlRWxlbWVudCBjaGlsZCkKLSAgewotICAgIEVudW1lcmF0aW9uIGUgPSBjaGlsZC5nZXRFbGVtZW50cyhNb2RlbENvbnN0YW50cy5SRUxfT1dORVIpOwotICAgIGlmIChlLmhhc01vcmVFbGVtZW50cygpKQotICAgICAgcmV0dXJuIChUcmVlRWxlbWVudCllLm5leHRFbGVtZW50KCk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgUmVnaXN0cnlFbGVtZW50IGdldFJlZ2lzdHJ5RWxlbWVudCgpCi0gIHsKLSAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFJlZ2lzdHJ5RWxlbWVudCkKLSAgICAgIHJldHVybiAoUmVnaXN0cnlFbGVtZW50KXRoaXM7Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIFRyZWVFbGVtZW50IGNoaWxkRWxlbWVudCA9IHRoaXM7Ci0gICAgICBUcmVlRWxlbWVudCBwYXJlbnRFbGVtZW50ID0gZ2V0UGFyZW50RWxlbWVudChjaGlsZEVsZW1lbnQpOwotICAgICAgd2hpbGUgKHBhcmVudEVsZW1lbnQgIT0gbnVsbCAmJiBwYXJlbnRFbGVtZW50ICE9IGNoaWxkRWxlbWVudCkKLSAgICAgIHsKLSAgICAgICAgaWYgKHBhcmVudEVsZW1lbnQgaW5zdGFuY2VvZiBSZWdpc3RyeUVsZW1lbnQpCi0gICAgICAgICAgcmV0dXJuIChSZWdpc3RyeUVsZW1lbnQpcGFyZW50RWxlbWVudDsKLSAgICAgICAgY2hpbGRFbGVtZW50ID0gcGFyZW50RWxlbWVudDsKLSAgICAgICAgcGFyZW50RWxlbWVudCA9IGdldFBhcmVudEVsZW1lbnQoY2hpbGRFbGVtZW50KTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2RhdGFtb2RlbC9CdXNpbmVzc0VsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9kYXRhbW9kZWwvQnVzaW5lc3NFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxZTYxM2QuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2RhdGFtb2RlbC9CdXNpbmVzc0VsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5idXNpbmVzcy5CdXNpbmVzc0VudGl0eTsKLQotcHVibGljIGNsYXNzIEJ1c2luZXNzRWxlbWVudCBleHRlbmRzIEFic3RyYWN0VURESUVsZW1lbnQKLXsKLSAgcHJpdmF0ZSBCdXNpbmVzc0VudGl0eSBiZV87Ci0gIHByaXZhdGUgTGlzdE1hbmFnZXIgcHVibGlzaGVyQXNzZXJ0aW9uc187Ci0gIAotICBwdWJsaWMgQnVzaW5lc3NFbGVtZW50KEJ1c2luZXNzRW50aXR5IGJlLE1vZGVsIG1vZGVsKQotICB7Ci0gICAgc3VwZXIoYmUuZ2V0RGVmYXVsdE5hbWVTdHJpbmcoKSxtb2RlbCk7Ci0gICAgYmVfID0gYmU7Ci0gICAgc2V0S2V5KGJlXy5nZXRCdXNpbmVzc0tleSgpKTsKLSAgICBwdWJsaXNoZXJBc3NlcnRpb25zXyA9IG51bGw7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgQnVzaW5lc3NFbnRpdHkgZ2V0QnVzaW5lc3NFbnRpdHkoKQotICB7Ci0gICAgcmV0dXJuIGJlXzsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0QnVzaW5lc3NFbnRpdHkoQnVzaW5lc3NFbnRpdHkgYmUpCi0gIHsKLSAgICBiZV8gPSBiZTsKLSAgICBzZXRLZXkoYmVfLmdldEJ1c2luZXNzS2V5KCkpOwotICB9Ci0KLSAgcHVibGljIExpc3RNYW5hZ2VyIGdldFB1Ymxpc2hlckFzc2VydGlvbnMoKQotICB7Ci0gICAgcmV0dXJuIHB1Ymxpc2hlckFzc2VydGlvbnNfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0UHVibGlzaGVyQXNzZXJ0aW9ucyhMaXN0TWFuYWdlciBsaXN0TWFuYWdlcikKLSAgewotICAgIHB1Ymxpc2hlckFzc2VydGlvbnNfID0gbGlzdE1hbmFnZXI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9kYXRhbW9kZWwvQ2F0ZWdvcnlFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvZGF0YW1vZGVsL0NhdGVnb3J5RWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDdmM2ExLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9kYXRhbW9kZWwvQ2F0ZWdvcnlFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuS2V5ZWRSZWZlcmVuY2U7Ci0KLXB1YmxpYyBjbGFzcyBDYXRlZ29yeUVsZW1lbnQgZXh0ZW5kcyBBYnN0cmFjdFVERElFbGVtZW50Ci17Ci0gIHByaXZhdGUgS2V5ZWRSZWZlcmVuY2UgY2F0ZWdvcnlfOwotCi0gIHB1YmxpYyBDYXRlZ29yeUVsZW1lbnQoU3RyaW5nIG5hbWUsS2V5ZWRSZWZlcmVuY2UgY2F0ZWdvcnksTW9kZWwgbW9kZWwpCi0gIHsKLSAgICBzdXBlcihuYW1lLG1vZGVsKTsKLSAgICBjYXRlZ29yeV8gPSBjYXRlZ29yeTsKLSAgICBzYXZlQ2F0ZWdvcnlQcm9wZXJ0aWVzKCk7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIHZvaWQgc2F2ZUNhdGVnb3J5UHJvcGVydGllcygpCi0gIHsKLSAgICBpZiAoY2F0ZWdvcnlfICE9IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nIGtleU5hbWUgPSBjYXRlZ29yeV8uZ2V0S2V5TmFtZSgpOwotICAgICAgaWYgKGtleU5hbWUgIT0gbnVsbCkKLSAgICAgICAgc2V0TmFtZShrZXlOYW1lKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgS2V5ZWRSZWZlcmVuY2UgZ2V0Q2F0ZWdvcnkoKQotICB7Ci0gICAgcmV0dXJuIGNhdGVnb3J5XzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0TmFtZUZvclRyZWUoKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIG5hbWVGb3JUcmVlID0gbmV3IFN0cmluZ0J1ZmZlcigiWyIpOwotICAgIG5hbWVGb3JUcmVlLmFwcGVuZChjYXRlZ29yeV8uZ2V0S2V5VmFsdWUoKSkuYXBwZW5kKCJdICIpLmFwcGVuZChjYXRlZ29yeV8uZ2V0S2V5TmFtZSgpKTsKLSAgICByZXR1cm4gbmFtZUZvclRyZWUudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHVwZGF0ZUNhdGVnb3J5KFN0cmluZyBrZXlOYW1lLFN0cmluZyBrZXlWYWx1ZSxTdHJpbmcgdE1vZGVsS2V5KQotICB7Ci0gICAgY2F0ZWdvcnlfLnNldEtleU5hbWUoa2V5TmFtZSk7Ci0gICAgY2F0ZWdvcnlfLnNldEtleVZhbHVlKGtleVZhbHVlKTsKLSAgICBjYXRlZ29yeV8uc2V0VE1vZGVsS2V5KHRNb2RlbEtleSk7Ci0gICAgc2F2ZUNhdGVnb3J5UHJvcGVydGllcygpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvZGF0YW1vZGVsL0NhdGVnb3J5TW9kZWwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9kYXRhbW9kZWwvQ2F0ZWdvcnlNb2RlbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjk2NjU2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9kYXRhbW9kZWwvQ2F0ZWdvcnlNb2RlbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTY5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWw7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbVdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnRleHQuUGFyc2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkJhc2ljTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5IVE1MVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5DYXRlZ29yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215OwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5LZXllZFJlZmVyZW5jZTsKLQotcHVibGljIGNsYXNzIENhdGVnb3J5TW9kZWwgZXh0ZW5kcyBCYXNpY01vZGVsCi17Ci0gIHByaXZhdGUgU2VydmxldENvbnRleHQgYXBwbGljYXRpb25fOwotICBwcml2YXRlIFN0cmluZyBkZWZhdWx0RGF0YUZpbGVfOwotICBwcml2YXRlIEhhc2h0YWJsZSBjYXRlZ29yeUVsZW1lbnRzXzsKLSAgcHJpdmF0ZSBTdHJpbmcgY29sdW1uRGVsaW1pdGVyXzsKLSAgcHJpdmF0ZSBTdHJpbmcgc3RyaW5nRGVsaW1pdGVyXzsKLSAgcHJpdmF0ZSBTdHJpbmcgY2F0ZWdvcnlLZXlfOwotICBwcml2YXRlIGJvb2xlYW4gY2hlY2tlZF87Ci0gIHByaXZhdGUgU3RyaW5nIGRpc3BsYXlOYW1lXzsKLSAgcHJpdmF0ZSBTdHJpbmcgdE1vZGVsS2V5XzsKLSAgcHJpdmF0ZSBUaHJvd2FibGUgZXJyb3JFeGNlcHRpb25fOwotICAKLSAgLy8gUmV0dXJuIGNvZGVzIGZvciBsb2FkaW5nIGFuZCBzYXZpbmcgY2F0ZWdvcnkgZGF0YS4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBieXRlIE9QRVJBVElPTl9TVUNDRVNTRlVMID0gMHgwMDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBieXRlIEVSUk9SX0ZJTEUgPSAweDAxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgRVJST1JfU0VDVVJJVFkgPSAweDAyOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgRVJST1JfRU5DT0RJTkcgPSAweDAzOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgRVJST1JfSU8gPSAweDA0OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgRVJST1JfQ0FURUdPUllfS0VZID0gMHgwNTsKLSAgCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIGRlZmF1bHRDb2x1bW5EZWxpbWl0ZXJfID0gIiMiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBkZWZhdWx0U3RyaW5nRGVsaW1pdGVyXyA9ICJcIiI7Ci0gIAotICBwdWJsaWMgQ2F0ZWdvcnlNb2RlbCgpCi0gIHsKLSAgICBzdXBlcigiY2F0ZWdvcmllcyIpOwotICAgIGFwcGxpY2F0aW9uXyA9IG51bGw7Ci0JZGVmYXVsdERhdGFGaWxlXyA9IG51bGw7Ci0gICAgY29sdW1uRGVsaW1pdGVyXyA9IGRlZmF1bHRDb2x1bW5EZWxpbWl0ZXJfOwotICAgIHN0cmluZ0RlbGltaXRlcl8gPSBkZWZhdWx0U3RyaW5nRGVsaW1pdGVyXzsKLSAgICBjYXRlZ29yeUVsZW1lbnRzXyA9IG51bGw7Ci0gICAgY2F0ZWdvcnlLZXlfID0gbnVsbDsKLSAgICBjaGVja2VkXyA9IHRydWU7Ci0gICAgZGlzcGxheU5hbWVfID0gbnVsbDsKLSAgICB0TW9kZWxLZXlfID0gbnVsbDsKLSAgICBlcnJvckV4Y2VwdGlvbl8gPSBudWxsOwotICB9Ci0gIAotICAvKioKLSAgICogQ2F0ZWdvcnlNb2RlbHMgbG9hZCB0aGVpciBkYXRhIGZyb20gdGhlIGZpbGUgbmFtZWQgdmlhIHRoZQotICAgKiB7QGxpbmsgI3NldERlZmF1bHREYXRhRmlsZShTdHJpbmcpfSBtZXRob2QuIFRoZSBkYXRhIGZpbGUKLSAgICogbmFtZSBpcyBpbnRlcnByZXR0ZWQgYXMgZWl0aGVyIGEgcGh5c2ljYWwgcGF0aG5hbWUgb3IgYQotICAgKiBjb250ZXh0LXJvb3QgcmVsYXRpdmUgcGF0aG5hbWUgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlCi0gICAqIHNlcnZsZXQgY29udGV4dCBvciAiYXBwbGljYXRpb24iIGlzIG51bGwgKGRlZmF1bHQpIG9yIG5vdC4KLSAgICogQHBhcmFtIGFwcGxpY2F0aW9uIFRoZSBhcHBsaWNhdGlvbiBjb250ZXh0LCBudWxsIGJ5IGRlZmF1bHQuCi0gICAqIFZhbHVlIGNhbiBiZSB0aGUgU2VydmxldENvbnRleHQgb2YgdGhlIFdTRXhwbG9yZXIgb3IgbnVsbC4KLSAgICovCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldFNlcnZsZXRDb250ZXh0KFNlcnZsZXRDb250ZXh0IGFwcGxpY2F0aW9uKQotICB7Ci0JYXBwbGljYXRpb25fID0gYXBwbGljYXRpb247Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldERlZmF1bHREYXRhRmlsZShTdHJpbmcgZGVmYXVsdERhdGFGaWxlKQotICB7Ci0gICAgZGVmYXVsdERhdGFGaWxlXyA9IGRlZmF1bHREYXRhRmlsZTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldENhdGVnb3J5S2V5KFN0cmluZyBjYXRlZ29yeUtleSkKLSAgewotICAgIGNhdGVnb3J5S2V5XyA9IGNhdGVnb3J5S2V5OwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldENhdGVnb3J5S2V5KCkKLSAgewotICAgIHJldHVybiBjYXRlZ29yeUtleV87Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldENvbHVtbkRlbGltaXRlcihTdHJpbmcgY29sdW1uRGVsaW1pdGVyKQotICB7Ci0gICAgY29sdW1uRGVsaW1pdGVyXyA9IGNvbHVtbkRlbGltaXRlcjsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRDb2x1bW5EZWxpbWl0ZXIoKQotICB7Ci0gICAgcmV0dXJuIGNvbHVtbkRlbGltaXRlcl87Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldFN0cmluZ0RlbGltaXRlcihTdHJpbmcgc3RyaW5nRGVsaW1pdGVyKQotICB7Ci0gICAgc3RyaW5nRGVsaW1pdGVyXyA9IHN0cmluZ0RlbGltaXRlcjsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTdHJpbmdEZWxpbWl0ZXIoKQotICB7Ci0gICAgcmV0dXJuIHN0cmluZ0RlbGltaXRlcl87Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGVuYWJsZUNoZWNrZWQoYm9vbGVhbiBpc0NoZWNrZWQpCi0gIHsKLSAgICBjaGVja2VkXyA9IGlzQ2hlY2tlZDsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNDaGVja2VkKCkKLSAgewotICAgIHJldHVybiBjaGVja2VkXzsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0RGlzcGxheU5hbWUoU3RyaW5nIGRpc3BsYXlOYW1lKQotICB7Ci0gICAgZGlzcGxheU5hbWVfID0gZGlzcGxheU5hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0RGlzcGxheU5hbWUoKQotICB7Ci0gICAgcmV0dXJuIGRpc3BsYXlOYW1lXzsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0VE1vZGVsS2V5KFN0cmluZyB0TW9kZWxLZXkpCi0gIHsKLSAgICB0TW9kZWxLZXlfID0gdE1vZGVsS2V5OwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFRNb2RlbEtleSgpCi0gIHsKLSAgICByZXR1cm4gdE1vZGVsS2V5XzsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNEYXRhTG9hZGVkKCkKLSAgewotICAgIHJldHVybiAoY2F0ZWdvcnlFbGVtZW50c18gIT0gbnVsbCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBUaHJvd2FibGUgZ2V0RXJyb3JFeGNlcHRpb24oKQotICB7Ci0gICAgcmV0dXJuIGVycm9yRXhjZXB0aW9uXzsKLSAgfQotICAKLSAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIGlzRW5jbG9zZWRJblF1b3RlcyhTdHJpbmcgc3RyaW5nKQotICB7Ci0gICAgcmV0dXJuIHN0cmluZy5zdGFydHNXaXRoKCJcIiIpICYmIHN0cmluZy5lbmRzV2l0aCgiXCIiKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGxvYWRGcm9tVGF4b25vbXkoVGF4b25vbXkgdGF4b25vbXkpCi0gIHsKLSAgICBTdHJpbmcgbmFtZSA9IHRheG9ub215LmdldE5hbWUoKTsKLSAgICBDYXRlZ29yeUVsZW1lbnQgcm9vdCA9IG5ldyBDYXRlZ29yeUVsZW1lbnQobmFtZSxudWxsLHRoaXMpOwotICAgIHNldFJvb3RFbGVtZW50KHJvb3QpOwotICAgIGNhdGVnb3J5RWxlbWVudHNfID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIGZvciAoSXRlcmF0b3IgaXQgPSB0YXhvbm9teS5nZXRDYXRlZ29yeSgpLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgewotICAgICAgYWRkQ2F0ZWdvcnkocm9vdCwgKENhdGVnb3J5KWl0Lm5leHQoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGFkZENhdGVnb3J5KENhdGVnb3J5RWxlbWVudCBwYXJlbnQsIENhdGVnb3J5IGNhdGVnb3J5KQotICB7Ci0gICAgU3RyaW5nIGtleU5hbWUgPSBjYXRlZ29yeS5nZXROYW1lKCk7Ci0gICAgU3RyaW5nIGtleVZhbHVlID0gY2F0ZWdvcnkuZ2V0Q29kZSgpOwotICAgIENhdGVnb3J5RWxlbWVudCBjaGlsZCA9IG5ldyBDYXRlZ29yeUVsZW1lbnQoa2V5TmFtZSxuZXcgS2V5ZWRSZWZlcmVuY2Uoa2V5TmFtZSxrZXlWYWx1ZSx0TW9kZWxLZXlfKSx0aGlzKTsKLSAgICBwYXJlbnQuY29ubmVjdChjaGlsZCxVRERJTW9kZWxDb25zdGFudHMuUkVMX1NVQkNBVEVHT1JJRVMsTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICBjYXRlZ29yeUVsZW1lbnRzXy5wdXQoa2V5VmFsdWUsIGNoaWxkKTsgICAKLSAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gY2F0ZWdvcnkuZ2V0Q2F0ZWdvcnkoKS5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIGFkZENhdGVnb3J5KGNoaWxkLCAoQ2F0ZWdvcnkpaXQubmV4dCgpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYnl0ZSBsb2FkRnJvbURlZmF1bHREYXRhRmlsZSgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBpZiAoZGVmYXVsdERhdGFGaWxlXyA9PSBudWxsKQotICAgICAgICB0aHJvdyBuZXcgRmlsZU5vdEZvdW5kRXhjZXB0aW9uKCk7Ci0JICBCdWZmZXJlZFJlYWRlciBiciA9IG51bGw7Ci0JICBpZiAoYXBwbGljYXRpb25fID09IG51bGwpCi0JCWJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihuZXcgRmlsZUlucHV0U3RyZWFtKGRlZmF1bHREYXRhRmlsZV8pLEhUTUxVdGlscy5VVEY4X0VOQ09ESU5HKSk7Ci0JICBlbHNlCi0JICAgIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihhcHBsaWNhdGlvbl8uZ2V0UmVzb3VyY2VBc1N0cmVhbShkZWZhdWx0RGF0YUZpbGVfKSxIVE1MVXRpbHMuVVRGOF9FTkNPRElORykpOwotICAgICAgcmV0dXJuIGxvYWREYXRhKGJyKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGVycm9yRXhjZXB0aW9uXyA9IGU7Ci0gICAgICByZXR1cm4gRVJST1JfRklMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKFNlY3VyaXR5RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZXJyb3JFeGNlcHRpb25fID0gZTsKLSAgICAgIHJldHVybiBFUlJPUl9TRUNVUklUWTsKLSAgICB9Ci0gICAgY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBlcnJvckV4Y2VwdGlvbl8gPSBlOwotICAgICAgcmV0dXJuIEVSUk9SX0VOQ09ESU5HOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGJ5dGUgbG9hZEZyb21EZWxpbWl0ZXJGaWxlKCkKLSAgewotICAgIC8vIEdldCB0aGUgYXNzb2NpYXRlZCAucHJvcGVydGllcyBmaWxlIGFuZCBzZXQgdGhlIGRlbGltaXRlcnMuIFRoZSBkZWZhdWx0RGF0YUZpbGVfIGlzIHNldCB0byB0aGUgZGVsaW1pdGVyIGZpbGUgaW4gdGhpcyBjYXNlLgotICAgIC8vIFRoZSBwcm9wZXJ0aWVzIGZpbGUgY29udGFpbnMgdGhlIGZvbGxvd2luZyBrZXlzOgotICAgIC8vIHdzYWQuZGF0YUZpbGUgLSBsb2NhdGlvbiBvZiB0aGUgY2F0ZWdvcnkgZGF0YSBmaWxlLgotICAgIC8vIHdzYWQuY2hlY2tlZCAtIHdoZXRoZXIgb3Igbm90IHRoZSBjYXRlZ29yeSBpcyBjaGVja2VkLgotICAgIC8vIHdzYWQubmFtZSAtIHRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIGNhdGVnb3J5LgotICAgIC8vIGNvbHVtbi5kZWxpbWl0ZXIgLSB0aGUgZGVsaW1pdGVyIGNoYXJhY3RlciB1c2VkIGZvciBzZXBhcmF0aW5nIGNvbHVtbnMuCi0gICAgLy8gc3RyaW5nLmRlbGltaXRlciAtIHRoZSBkZWxpbWl0ZXIgY2hhcmFjdGVyIHVzZWQgdG8gZW5jYXBzdWxhdGUgZGF0YSBzdWNoIHRoYXQgY29sdW1uIGRlbGltaXRlciBjaGFyYWN0ZXJzIGFyZSB0cmVhdGVkIGFzIGRhdGEuCi0gICAgdHJ5Ci0gICAgewotICAgICAgUHJvcGVydGllcyBwID0gbmV3IFByb3BlcnRpZXMoKTsKLSAgICAgIElucHV0U3RyZWFtIGZpbiA9IG51bGw7Ci0JICBpZiAoYXBwbGljYXRpb25fID09IG51bGwpCi0JICAgIGZpbiA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oZGVmYXVsdERhdGFGaWxlXyk7Ci0JICBlbHNlCi0JCWZpbiA9IGFwcGxpY2F0aW9uXy5nZXRSZXNvdXJjZUFzU3RyZWFtKGRlZmF1bHREYXRhRmlsZV8pOwotICAgICAgcC5sb2FkKGZpbik7Ci0gICAgICBmaW4uY2xvc2UoKTsKLSAgICAgIGNvbHVtbkRlbGltaXRlcl8gPSBwLmdldFByb3BlcnR5KCJjb2x1bW4uZGVsaW1pdGVyIik7Ci0gICAgICBzdHJpbmdEZWxpbWl0ZXJfID0gcC5nZXRQcm9wZXJ0eSgic3RyaW5nLmRlbGltaXRlciIpOwotICAgICAgZGVmYXVsdERhdGFGaWxlXyA9IHAuZ2V0UHJvcGVydHkoIndzYWQuZGF0YUZpbGUiKTsKLSAgICAgIHJldHVybiBsb2FkRnJvbURlZmF1bHREYXRhRmlsZSgpOwotICAgIH0KLSAgICBjYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZXJyb3JFeGNlcHRpb25fID0gZTsKLSAgICAgIHJldHVybiBFUlJPUl9GSUxFOwotICAgIH0KLSAgICBjYXRjaCAoU2VjdXJpdHlFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBlcnJvckV4Y2VwdGlvbl8gPSBlOwotICAgICAgcmV0dXJuIEVSUk9SX1NFQ1VSSVRZOwotICAgIH0KLSAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBlcnJvckV4Y2VwdGlvbl8gPSBlOwotICAgICAgcmV0dXJuIEVSUk9SX0lPOwotICAgIH0gICAgICAgIAotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgYnl0ZSBsb2FkRGF0YShCdWZmZXJlZFJlYWRlciBicikKLSAgewotICAgIGVycm9yRXhjZXB0aW9uXyA9IG51bGw7Ci0gICAgQ2F0ZWdvcnlFbGVtZW50IHJvb3RFbGVtZW50ID0gbnVsbDsKLSAgICBjYXRlZ29yeUVsZW1lbnRzXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBieXRlIHJldHVybkNvZGUgPSBPUEVSQVRJT05fU1VDQ0VTU0ZVTDsKLSAgICBTdHJpbmcgbGluZSA9IG51bGw7Ci0gICAgaW50IGxpbmVOdW1iZXIgPSAwOwotICAgIHRyeQotICAgIHsKLSAgICAgIGNoYXIgY29sdW1uRGVsaW1pdGVyQ2hhciA9IGNvbHVtbkRlbGltaXRlcl8uY2hhckF0KDApOwotICAgICAgY2hhciBzdHJpbmdEZWxpbWl0ZXJDaGFyID0gc3RyaW5nRGVsaW1pdGVyXy5jaGFyQXQoMCk7Ci0gICAgICBWZWN0b3IgdmFsdWVzID0gbmV3IFZlY3RvcigpOwotICAgICAgd2hpbGUoKGxpbmUgPSBici5yZWFkTGluZSgpKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBsaW5lTnVtYmVyKys7Ci0gICAgICAgIC8vIElnbm9yZSBibGFuayBsaW5lcy4KLSAgICAgICAgaWYgKGxpbmUudHJpbSgpLmxlbmd0aCgpID09IDApCi0gICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGludCBpbmRleCA9IDA7Ci0gICAgICAgIGludCBsZW5ndGggPSBsaW5lLmxlbmd0aCgpOwotICAgICAgICBib29sZWFuIGluU3RyaW5nRGVsaW1pdGVycyA9IGZhbHNlOwotICAgICAgICB2YWx1ZXMucmVtb3ZlQWxsRWxlbWVudHMoKTsKLSAgICAgICAgU3RyaW5nQnVmZmVyIGN1cnJlbnRUb2tlbiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKQotICAgICAgICB7Ci0gICAgICAgICAgY2hhciBjdXJyZW50Q2hhciA9IGxpbmUuY2hhckF0KGluZGV4KTsKLSAgICAgICAgICBpZiAoaW5TdHJpbmdEZWxpbWl0ZXJzKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIEluIHF1b3RlIHNvIGlnbm9yaW5nIGRlbGltaXRlcnMKLSAgICAgICAgICAgIGlmIChjdXJyZW50Q2hhciA9PSBzdHJpbmdEZWxpbWl0ZXJDaGFyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBpZiAoaW5kZXggPCBsZW5ndGggLSAxKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gY3VycmVudENoYXIgY291bGQgYmUgYSBjbG9zaW5nIHN0cmluZyBkZWxpbWl0ZXIgb3IgZXNjYXBlCi0gICAgICAgICAgICAgICAgLy8gTmVlZCB0byBsb29rIGFoZWFkIHRvIGJlIHN1cmUuLi4KLSAgICAgICAgICAgICAgICBjaGFyIGZvbGxvd2luZ0NoYXIgPSBsaW5lLmNoYXJBdChpbmRleCArIDEpOwotICAgICAgICAgICAgICAgIGlmIChmb2xsb3dpbmdDaGFyID09IHN0cmluZ0RlbGltaXRlckNoYXIpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgLy8gVGhlcmUgaXMgYW4gZXNjYXBlZCBxdW90ZQotICAgICAgICAgICAgICAgICAgY3VycmVudFRva2VuLmFwcGVuZChzdHJpbmdEZWxpbWl0ZXJDaGFyKTsKLSAgICAgICAgICAgICAgICAgIC8vIGp1bXAgZm9yd2FyZCB0d28gY2hhcmFjdGVycy4KLSAgICAgICAgICAgICAgICAgIGluZGV4ICs9IDI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAvLyBUaGVyZSB3YXMgYSBjbG9zaW5nIHN0cmluZyBkZWxpbWl0ZXIuLi5qdW1wIGZvcndhcmQgdG8gdGhlIG5leHQgZGVsaW1pdGVyCi0gICAgICAgICAgICAgICAgICBpblN0cmluZ0RlbGltaXRlcnMgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgIC8vbG9vayBmb3IgdGhlIG5leHQgY29sdW1uIGRlbGltaXRlciBjaGFyYWN0ZXIKLSAgICAgICAgICAgICAgICAgIGludCBuZXh0RGVsaW1pdGVyID0gbGluZS5pbmRleE9mKGNvbHVtbkRlbGltaXRlckNoYXIsIGluZGV4KTsKLSAgICAgICAgICAgICAgICAgIGlmIChuZXh0RGVsaW1pdGVyID09IC0xKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAvLyBUaGVyZSB3ZXJlIG5vIG1vcmUgZGVsaW1pdGVycyBzbyBicmVhayBvdXQgb2YgdGhlIGxvb3AKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlcy5hZGRFbGVtZW50KGN1cnJlbnRUb2tlbi50b1N0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgLy92YWx1ZXNbdG9rZW5Db3VudCsrXSA9IGN1cnJlbnRUb2tlbi50b1N0cmluZygpOwotICAgICAgICAgICAgICAgICAgICBjdXJyZW50VG9rZW4uc2V0TGVuZ3RoKDApOwotICAgICAgICAgICAgICAgICAgICBpblN0cmluZ0RlbGltaXRlcnMgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBuZXh0RGVsaW1pdGVyICsgMTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgbGFzdCBjaGFyYWN0ZXIgYW5kIGl0J3MgYSBjbG9zaW5nIHN0cmluZyBkZWxpbWl0ZXIuCi0gICAgICAgICAgICAgICAgaW5kZXgrKzsKLSAgICAgICAgICAgICAgICBpblN0cmluZ0RlbGltaXRlcnMgPSBmYWxzZTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjdXJyZW50VG9rZW4uYXBwZW5kKGN1cnJlbnRDaGFyKTsKLSAgICAgICAgICAgICAgaW5kZXgrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZiAoY3VycmVudENoYXIgPT0gY29sdW1uRGVsaW1pdGVyQ2hhcikKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBUaGVyZSB3YXMgYSBkZWxpbWl0ZXIgb3V0c2lkZSBvZiBxdW90ZXMKLSAgICAgICAgICAgIHZhbHVlcy5hZGRFbGVtZW50KGN1cnJlbnRUb2tlbi50b1N0cmluZygpKTsKLSAgICAgICAgICAgIC8vdmFsdWVzW3Rva2VuQ291bnQrK10gPSBjdXJyZW50VG9rZW4udG9TdHJpbmcoKTsKLSAgICAgICAgICAgIGN1cnJlbnRUb2tlbi5zZXRMZW5ndGgoMCk7Ci0gICAgICAgICAgICBpbmRleCsrOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIGlmIChjdXJyZW50Q2hhciA9PSBzdHJpbmdEZWxpbWl0ZXJDaGFyKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIEEgcXVvdGUgYXBwZWFyaW5nIG91dHNpZGUgb2YgcXVvdGVzIG11c3QgYmUgYSBvcGVuaW5nIHF1b3RlCi0gICAgICAgICAgICBpblN0cmluZ0RlbGltaXRlcnMgPSB0cnVlOwotICAgICAgICAgICAgaW5kZXgrKzsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFRoZXJlIGlzIGEgbm9ybWFsIGNoYXIgb3V0c2lkZSBvZiBxdW90ZXMKLSAgICAgICAgICAgIGN1cnJlbnRUb2tlbi5hcHBlbmQoY3VycmVudENoYXIpOwotICAgICAgICAgICAgaW5kZXgrKzsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRXhwZWN0IHRva2VuIGNvdW50IHRvIGJlIHZhbHVlcy5sZW5ndGggLSAxIGF0IHRoaXMgcG9pbnQgaWYgZXZlcnl0aGluZyBpcyBvawotICAgICAgICBpZiAoaW5TdHJpbmdEZWxpbWl0ZXJzKQotICAgICAgICB7Ci0gICAgICAgICAgYnIuY2xvc2UoKTsKLSAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VFeGNlcHRpb24obGluZSxsaW5lTnVtYmVyKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gQWRkIHRoZSBmaW5hbCB0b2tlbi4KLSAgICAgICAgdmFsdWVzLmFkZEVsZW1lbnQoY3VycmVudFRva2VuLnRvU3RyaW5nKCkpOwotCi0gICAgICAgIC8vIDMgY29sdW1ucyBmb3JtYXQuIEZyb20gbGVmdCB0byByaWdodCwgdGhlc2UgYXJlOgotICAgICAgICAvLyAxKSBjYXRlZ29yeSdzIGtleSB2YWx1ZQotICAgICAgICAvLyAyKSBjYXRlZ29yeSdzIGtleSBuYW1lCi0gICAgICAgIC8vIDMpIGNhdGVnb3J5J3MgcGFyZW50IGtleSB2YWx1ZQotICAgICAgICAvLyBDb252ZXJ0IHRvIDQgY29sdW1ucyBmb3JtYXQuCi0gICAgICAgIGlmICh2YWx1ZXMuc2l6ZSgpID09IDMpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoY2F0ZWdvcnlLZXlfICE9IG51bGwpCi0gICAgICAgICAgICB2YWx1ZXMuaW5zZXJ0RWxlbWVudEF0KGNhdGVnb3J5S2V5XywgMCk7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFsdWVzLmluc2VydEVsZW1lbnRBdCh0TW9kZWxLZXlfLCAwKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIDQgY29sdW1ucyBmb3JtYXQuIEZyb20gbGVmdCB0byByaWdodCwgdGhlc2UgYXJlOgotICAgICAgICAvLyAxKSB0eXBlIG9mIGNhdGVnb3J5IChjYXRlZ29yeUtleSkKLSAgICAgICAgLy8gMikgY2F0ZWdvcnkncyBrZXkgdmFsdWUKLSAgICAgICAgLy8gMykgY2F0ZWdvcnkncyBrZXkgbmFtZQotICAgICAgICAvLyA0KSBjYXRlZ29yeSdzIHBhcmVudCBrZXkgdmFsdWUKLSAgICAgICAgaWYgKHZhbHVlcy5zaXplKCkgPT0gNCkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBjYXRlZ29yeUtleSA9IChTdHJpbmcpdmFsdWVzLmVsZW1lbnRBdCgwKTsKLSAgICAgICAgICBpZiAoY2F0ZWdvcnlLZXlfID09IG51bGwpCi0gICAgICAgICAgICBjYXRlZ29yeUtleV8gPSBjYXRlZ29yeUtleTsKLSAgICAgICAgICBlbHNlIGlmICghY2F0ZWdvcnlLZXlfLmVxdWFscyhjYXRlZ29yeUtleSkpCi0gICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKGNhdGVnb3J5S2V5KTsKLSAgICAgICAgICBTdHJpbmcga2V5VmFsdWUgPSAoU3RyaW5nKXZhbHVlcy5lbGVtZW50QXQoMSk7Ci0gICAgICAgICAgU3RyaW5nIGtleU5hbWUgPSAoU3RyaW5nKXZhbHVlcy5lbGVtZW50QXQoMik7Ci0gICAgICAgICAgU3RyaW5nIHBhcmVudEtleVZhbHVlID0gKFN0cmluZyl2YWx1ZXMuZWxlbWVudEF0KDMpOwotICAgICAgICAgIGlmIChyb290RWxlbWVudCA9PSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJvb3RFbGVtZW50ID0gbmV3IENhdGVnb3J5RWxlbWVudChkaXNwbGF5TmFtZV8sbnVsbCx0aGlzKTsKLSAgICAgICAgICAgIHNldFJvb3RFbGVtZW50KHJvb3RFbGVtZW50KTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGlzRW5jbG9zZWRJblF1b3RlcyhrZXlOYW1lKSkKLSAgICAgICAgICAgIGtleU5hbWUgPSBrZXlOYW1lLnN1YnN0cmluZygxLGtleU5hbWUubGVuZ3RoKCktMSk7Ci0gICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIENhdGVnb3J5RWxlbWVudCBhbHJlYWR5IGV4aXN0cy4gSWYgaXQgZG9lcywgcmVmcmVzaCB0aGUgQ2F0ZWdvcnkuCi0gICAgICAgICAgQ2F0ZWdvcnlFbGVtZW50IGNhdGVnb3J5RWxlbWVudCA9IChDYXRlZ29yeUVsZW1lbnQpY2F0ZWdvcnlFbGVtZW50c18uZ2V0KGtleVZhbHVlKTsKLSAgICAgICAgICBpZiAoY2F0ZWdvcnlFbGVtZW50ICE9IG51bGwpCi0gICAgICAgICAgICBjYXRlZ29yeUVsZW1lbnQudXBkYXRlQ2F0ZWdvcnkoa2V5TmFtZSxrZXlWYWx1ZSx0TW9kZWxLZXlfKTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYXRlZ29yeUVsZW1lbnQgPSBuZXcgQ2F0ZWdvcnlFbGVtZW50KGtleU5hbWUsbmV3IEtleWVkUmVmZXJlbmNlKGtleU5hbWUsa2V5VmFsdWUsdE1vZGVsS2V5XyksdGhpcyk7Ci0gICAgICAgICAgRWxlbWVudCBwYXJlbnRFbGVtZW50OwotICAgICAgICAgIGlmIChwYXJlbnRLZXlWYWx1ZS5lcXVhbHMoa2V5VmFsdWUpKQotICAgICAgICAgICAgcGFyZW50RWxlbWVudCA9IHJvb3RFbGVtZW50OwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBhcmVudEVsZW1lbnQgPSAoRWxlbWVudCljYXRlZ29yeUVsZW1lbnRzXy5nZXQocGFyZW50S2V5VmFsdWUpOwotICAgICAgICAgIGlmIChwYXJlbnRFbGVtZW50ID09IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgcGFyZW50RWxlbWVudCA9IG5ldyBDYXRlZ29yeUVsZW1lbnQoInRlbXAiLG5ldyBLZXllZFJlZmVyZW5jZSgiIixwYXJlbnRLZXlWYWx1ZSx0TW9kZWxLZXlfKSx0aGlzKTsKLSAgICAgICAgICAgIGNhdGVnb3J5RWxlbWVudHNfLnB1dChwYXJlbnRLZXlWYWx1ZSxwYXJlbnRFbGVtZW50KTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgcGFyZW50RWxlbWVudC5jb25uZWN0KGNhdGVnb3J5RWxlbWVudCxVRERJTW9kZWxDb25zdGFudHMuUkVMX1NVQkNBVEVHT1JJRVMsTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICAgICAgICBjYXRlZ29yeUVsZW1lbnRzXy5wdXQoa2V5VmFsdWUsY2F0ZWdvcnlFbGVtZW50KTsgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgYnIuY2xvc2UoKTsKLSAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VFeGNlcHRpb24obGluZSxsaW5lTnVtYmVyKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgYnIuY2xvc2UoKTsKLSAgICAgIHJldHVybiByZXR1cm5Db2RlOwotICAgIH0KLSAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBlcnJvckV4Y2VwdGlvbl8gPSBlOwotICAgICAgcmV0dXJuQ29kZSA9IEVSUk9SX0lPOwotICAgIH0KLSAgICBjYXRjaCAoUGFyc2VFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBlcnJvckV4Y2VwdGlvbl8gPSBlOwotICAgICAgcmV0dXJuQ29kZSA9IEVSUk9SX0ZJTEU7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBlcnJvckV4Y2VwdGlvbl8gPSBlOwotICAgICAgcmV0dXJuQ29kZSA9IEVSUk9SX0NBVEVHT1JZX0tFWTsKLSAgICB9Ci0gICAgY2F0ZWdvcnlFbGVtZW50c18gPSBudWxsOwotICAgIHJldHVybiByZXR1cm5Db2RlOwotICB9Ci0gIAotICBwcml2YXRlIGZpbmFsIHZvaWQgc2F2ZURhdGEoUHJpbnRXcml0ZXIgcHcsQ2F0ZWdvcnlFbGVtZW50IGNhdGVnb3J5RWxlbWVudCxDYXRlZ29yeUVsZW1lbnQgcGFyZW50RWxlbWVudCxib29sZWFuIGlzRmlyc3QpCi0gIHsKLSAgICAvLyBGaWxlIGZvcm1hdDoKLSAgICAvLyA8Y2F0ZWdvcnlLZXk+IzxrZXlWYWx1ZT4jPGtleU5hbWU+IzxwYXJlbnRLZXlWYWx1ZT4KLSAgICBLZXllZFJlZmVyZW5jZSBrciA9IGNhdGVnb3J5RWxlbWVudC5nZXRDYXRlZ29yeSgpOwotICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgbm90IHRoZSByb290IGVsZW1lbnQuCi0gICAgaWYgKGtyICE9IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nIGtleU5hbWUgPSBrci5nZXRLZXlOYW1lKCk7Ci0gICAgICBTdHJpbmcga2V5VmFsdWUgPSBrci5nZXRLZXlWYWx1ZSgpOwotICAgICAgU3RyaW5nIHBhcmVudEtleVZhbHVlOwotICAgICAgaWYgKHBhcmVudEVsZW1lbnQgPT0gbnVsbCkKLSAgICAgICAgcGFyZW50S2V5VmFsdWUgPSBrZXlWYWx1ZTsKLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgS2V5ZWRSZWZlcmVuY2UgcGFyZW50S3IgPSBwYXJlbnRFbGVtZW50LmdldENhdGVnb3J5KCk7Ci0gICAgICAgIC8vIENoZWNrIGlmIHRoZSBwYXJlbnQgaXMgdGhlIHJvb3QgZWxlbWVudC4KLSAgICAgICAgaWYgKHBhcmVudEtyID09IG51bGwpCi0gICAgICAgICAgcGFyZW50S2V5VmFsdWUgPSBrZXlWYWx1ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHBhcmVudEtleVZhbHVlID0gcGFyZW50S3IuZ2V0S2V5VmFsdWUoKTsKLSAgICAgIH0KLSAgICAgIGlmICghaXNGaXJzdCkKLSAgICAgICAgcHcucHJpbnRsbigpOwotICAgICAgZWxzZQotICAgICAgICBpc0ZpcnN0ID0gZmFsc2U7Ci0gICAgICBwdy5wcmludChtYW5nbGUoY2F0ZWdvcnlLZXlfKSk7Ci0gICAgICBwdy5wcmludChjb2x1bW5EZWxpbWl0ZXJfKTsKLSAgICAgIHB3LnByaW50KG1hbmdsZShrZXlWYWx1ZSkpOwotICAgICAgcHcucHJpbnQoY29sdW1uRGVsaW1pdGVyXyk7Ci0gICAgICBwdy5wcmludChtYW5nbGUoa2V5TmFtZSkpOwotICAgICAgcHcucHJpbnQoY29sdW1uRGVsaW1pdGVyXyk7Ci0gICAgICBwdy5wcmludChtYW5nbGUocGFyZW50S2V5VmFsdWUpKTsKLSAgICB9Ci0gICAgRW51bWVyYXRpb24gZSA9IGNhdGVnb3J5RWxlbWVudC5nZXRFbGVtZW50cyhVRERJTW9kZWxDb25zdGFudHMuUkVMX1NVQkNBVEVHT1JJRVMpOwotICAgIGlmIChlICE9IG51bGwpCi0gICAgewotICAgICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgICAgIHNhdmVEYXRhKHB3LChDYXRlZ29yeUVsZW1lbnQpZS5uZXh0RWxlbWVudCgpLGNhdGVnb3J5RWxlbWVudCxpc0ZpcnN0KTsKLSAgICB9Ci0gIH0KLSAgCi0gIC8vIE1hbmdsZSBhbiBpbnB1dCBzdHJpbmcgaWYgaXQgY29udGFpbnMgZGVmYXVsdCBjb2x1bW4gZGVsaW1pdGVyIGNoYXJhY3RlcnMgYnkgc3Vycm91bmRpbmcgaXQgd2l0aCB0aGUgc3RyaW5nIGRlbGltaXRlcnMuCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIG1hbmdsZShTdHJpbmcgaW5wdXQpCi0gIHsKLSAgICBpZiAoaW5wdXQgIT0gbnVsbCAmJiBpbnB1dC5pbmRleE9mKGNvbHVtbkRlbGltaXRlcl8pICE9IC0xKQotICAgIHsKLSAgICAgIFN0cmluZ0J1ZmZlciBzID0gbmV3IFN0cmluZ0J1ZmZlcihpbnB1dCk7Ci0gICAgICBzLmluc2VydCgwLHN0cmluZ0RlbGltaXRlcl8pLmFwcGVuZChzdHJpbmdEZWxpbWl0ZXJfKTsKLSAgICAgIHJldHVybiBzLnRvU3RyaW5nKCk7Ci0gICAgfQotICAgIHJldHVybiBpbnB1dDsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGJ5dGUgc2F2ZURhdGEoU3RyaW5nIGZpbGVOYW1lKQotICB7Ci0gICAgLy8gVGhlIGZpbGVOYW1lIHNob3VsZCBhbHJlYWR5IGJlIFVSTEVuY29kZWQuCi0gICAgYnl0ZSByZXR1cm5Db2RlID0gT1BFUkFUSU9OX1NVQ0NFU1NGVUw7Ci0gICAgZXJyb3JFeGNlcHRpb25fID0gbnVsbDsKLSAgICBpZiAoaXNEYXRhTG9hZGVkKCkpCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIobmV3IEZpbGVPdXRwdXRTdHJlYW0oZmlsZU5hbWUpLEhUTUxVdGlscy5VVEY4X0VOQ09ESU5HKSx0cnVlKTsKLSAgICAgICAgQ2F0ZWdvcnlFbGVtZW50IHJvb3RFbGVtZW50ID0gKENhdGVnb3J5RWxlbWVudClnZXRSb290RWxlbWVudCgpOwotICAgICAgICBzYXZlRGF0YShwdyxyb290RWxlbWVudCxudWxsLHRydWUpOwotICAgICAgICBwdy5mbHVzaCgpOwotICAgICAgICBwdy5jbG9zZSgpOwotICAgICAgICAvLyBTYXZlIHRoZSBwcm9wZXJ0aWVzIGZpbGUuCi0gICAgICAgIFByb3BlcnRpZXMgcCA9IG5ldyBQcm9wZXJ0aWVzKCk7Ci0gICAgICAgIHAuc2V0UHJvcGVydHkoIndzYWQuZGF0YUZpbGUiLGZpbGVOYW1lKTsKLSAgICAgICAgcC5zZXRQcm9wZXJ0eSgid3NhZC5jaGVja2VkIixTdHJpbmcudmFsdWVPZihjaGVja2VkXykpOwotICAgICAgICBwLnNldFByb3BlcnR5KCJ3c2FkLm5hbWUiLGRpc3BsYXlOYW1lXyk7Ci0gICAgICAgIHAuc2V0UHJvcGVydHkoImNvbHVtbi5kZWxpbWl0ZXIiLGNvbHVtbkRlbGltaXRlcl8pOwotICAgICAgICBwLnNldFByb3BlcnR5KCJzdHJpbmcuZGVsaW1pdGVyIixzdHJpbmdEZWxpbWl0ZXJfKTsKLSAgICAgICAgU3RyaW5nQnVmZmVyIHByb3BlcnRpZXNGaWxlTmFtZSA9IG5ldyBTdHJpbmdCdWZmZXIoZmlsZU5hbWUuc3Vic3RyaW5nKDAsZmlsZU5hbWUubGFzdEluZGV4T2YoJy4nKSkpOwotICAgICAgICBwcm9wZXJ0aWVzRmlsZU5hbWUuYXBwZW5kKCIucHJvcGVydGllcyIpOwotICAgICAgICBGaWxlT3V0cHV0U3RyZWFtIGZvdXQgPSBuZXcgRmlsZU91dHB1dFN0cmVhbShwcm9wZXJ0aWVzRmlsZU5hbWUudG9TdHJpbmcoKSk7Ci0gICAgICAgIHAuc3RvcmUoZm91dCxudWxsKTsKLSAgICAgICAgZm91dC5jbG9zZSgpOwotICAgICAgfQotICAgICAgY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICBlcnJvckV4Y2VwdGlvbl8gPSBlOwotICAgICAgICByZXR1cm5Db2RlID0gRVJST1JfRklMRTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChTZWN1cml0eUV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICBlcnJvckV4Y2VwdGlvbl8gPSBlOwotICAgICAgICByZXR1cm5Db2RlID0gRVJST1JfU0VDVVJJVFk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICBlcnJvckV4Y2VwdGlvbl8gPSBlOwotICAgICAgICByZXR1cm5Db2RlID0gRVJST1JfRU5DT0RJTkc7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgZXJyb3JFeGNlcHRpb25fID0gZTsKLSAgICAgICAgcmV0dXJuQ29kZSA9IEVSUk9SX0lPOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmV0dXJuQ29kZTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICByZXR1cm4gZGlzcGxheU5hbWVfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvZGF0YW1vZGVsL1B1Ymxpc2hlZEl0ZW1zRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2RhdGFtb2RlbC9QdWJsaXNoZWRJdGVtc0VsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzI3NWVmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvZGF0YW1vZGVsL1B1Ymxpc2hlZEl0ZW1zRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElNb2RlbENvbnN0YW50czsKLQotcHVibGljIGNsYXNzIFB1Ymxpc2hlZEl0ZW1zRWxlbWVudCBleHRlbmRzIEFic3RyYWN0VURESUVsZW1lbnQKLXsKLSAgcHVibGljIFB1Ymxpc2hlZEl0ZW1zRWxlbWVudChpbnQgdHlwZSxTdHJpbmcgbmFtZSxNb2RlbCBtb2RlbCkKLSAgewotICAgIHN1cGVyKG5hbWUsbW9kZWwpOwotICAgIHNldFByb3BlcnR5QXNTdHJpbmcoTW9kZWxDb25zdGFudHMuUkVMX0NISUxEUkVOLFVERElNb2RlbENvbnN0YW50cy5SRUxfUFVCTElTSEVEX0lURU1TKTsKLSAgICBzZXRQcm9wZXJ0eUFzU3RyaW5nKFVERElNb2RlbENvbnN0YW50cy5RVUVSWV9UWVBFLFN0cmluZy52YWx1ZU9mKHR5cGUpKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBpbnQgZ2V0VHlwZSgpCi0gIHsKLSAgICByZXR1cm4gSW50ZWdlci5wYXJzZUludChnZXRQcm9wZXJ0eUFzU3RyaW5nKFVERElNb2RlbENvbnN0YW50cy5RVUVSWV9UWVBFKSk7Ci0gIH0KLQotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0SXRlbXMoKQotICB7Ci0gICAgcmV0dXJuIGdldEVsZW1lbnRzKFVERElNb2RlbENvbnN0YW50cy5SRUxfUFVCTElTSEVEX0lURU1TKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2RhdGFtb2RlbC9QdWJsaXNoZXJBc3NlcnRpb25FbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvZGF0YW1vZGVsL1B1Ymxpc2hlckFzc2VydGlvbkVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTIzMmM4My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvZGF0YW1vZGVsL1B1Ymxpc2hlckFzc2VydGlvbkVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RFbGVtZW50OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYXNzZXJ0aW9uLlB1Ymxpc2hlckFzc2VydGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuS2V5ZWRSZWZlcmVuY2U7Ci0KLXB1YmxpYyBjbGFzcyBQdWJsaXNoZXJBc3NlcnRpb25FbGVtZW50IHsKLQotICAvLyBvd25pbmdCdXNpbmVzc0tleV8gaXMgdGhlIGtleSBvZiB0aGUgYnVzaW5lc3MgZWxlbWVudCB0aGF0IG93bnMgdGhpcwotICAvLyBwdWJsaXNoZXJBc3NlcnRpb25FbGVtZW50Ci0gIHByaXZhdGUgU3RyaW5nIGZyb21LZXlfOwotICBwcml2YXRlIFN0cmluZyB0b0tleV87Ci0gIHByaXZhdGUgU3RyaW5nIG93bmluZ0J1c2luZXNzS2V5XzsKLQotICAvLyB0aGUgb3RoZXIgYnVzaW5lc3MgdGhhdCB0aGUgY29udGFpbmluZyBidXNpbmVzcyBpcyBhc3NlcnRlZCBmcm9tIG9yIHRvCi0gIHByaXZhdGUgTGlzdEVsZW1lbnQgc3BfOwotICBwcml2YXRlIGludCBzdWJRdWVyeUl0ZW1JZF87Ci0KLSAgLy8gc3RhdHVzIG9mIHRoaXMgcHVibGlzaGVyQXNzZXJ0aW9uCi0gIHByaXZhdGUgU3RyaW5nIHN0YXR1c187Ci0gIHByaXZhdGUgS2V5ZWRSZWZlcmVuY2Uga2V5ZWRSZWZlcmVuY2VfOwotCi0gIHB1YmxpYyBQdWJsaXNoZXJBc3NlcnRpb25FbGVtZW50KFN0cmluZyBmcm9tS2V5LCBTdHJpbmcgdG9LZXksIFN0cmluZyBvd25pbmdCdXNpbmVzc0tleSwgTGlzdEVsZW1lbnQgc3AsIGludCBzdWJRdWVyeUl0ZW1JZCwgU3RyaW5nIHN0YXR1cywgS2V5ZWRSZWZlcmVuY2Uga2V5ZWRSZWYpIHsKLSAgICBmcm9tS2V5XyA9IGZyb21LZXk7Ci0gICAgdG9LZXlfID0gdG9LZXk7Ci0gICAgb3duaW5nQnVzaW5lc3NLZXlfID0gb3duaW5nQnVzaW5lc3NLZXk7Ci0gICAgc3BfID0gc3A7Ci0gICAgc3ViUXVlcnlJdGVtSWRfID0gc3ViUXVlcnlJdGVtSWQ7Ci0gICAgc3RhdHVzXyA9IHN0YXR1czsKLSAgICBrZXllZFJlZmVyZW5jZV8gPSBrZXllZFJlZjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEZyb21LZXkoU3RyaW5nIGZyb21LZXkpIHsKLSAgICBmcm9tS2V5XyA9IGZyb21LZXk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEZyb21LZXkoKSB7Ci0gICAgcmV0dXJuIGZyb21LZXlfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0VG9LZXkoU3RyaW5nIHRvS2V5KSB7Ci0gICAgdG9LZXlfID0gdG9LZXk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFRvS2V5KCkgewotICAgIHJldHVybiB0b0tleV87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRPd25pbmdCdXNpbmVzc0tleShTdHJpbmcga2V5KSB7Ci0gICAgb3duaW5nQnVzaW5lc3NLZXlfID0ga2V5OwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRPd25pbmdCdXNpbmVzc0tleSgpIHsKLSAgICByZXR1cm4gb3duaW5nQnVzaW5lc3NLZXlfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0U2VydmljZVByb3ZpZGVyKExpc3RFbGVtZW50IHNwKSB7Ci0gICAgc3BfID0gc3A7Ci0gIH0KLQotICBwdWJsaWMgTGlzdEVsZW1lbnQgZ2V0U2VydmljZVByb3ZpZGVyKCkgewotICAgIHJldHVybiBzcF87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRTdWJRdWVyeUl0ZW1JZChpbnQgaWQpIHsKLSAgICBzdWJRdWVyeUl0ZW1JZF8gPSBpZDsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0U3ViUXVlcnlJdGVtSWQoKSB7Ci0gICAgcmV0dXJuIHN1YlF1ZXJ5SXRlbUlkXzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFN0YXR1cyhTdHJpbmcgc3RhdHVzKSB7Ci0gICAgc3RhdHVzXyA9IHN0YXR1czsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U3RhdHVzKCkgewotICAgIHJldHVybiBzdGF0dXNfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0S2V5ZWRSZWYoS2V5ZWRSZWZlcmVuY2Uga2V5ZWRSZWYpIHsKLSAgICBrZXllZFJlZmVyZW5jZV8gPSBrZXllZFJlZjsKLSAgfQotCi0gIHB1YmxpYyBLZXllZFJlZmVyZW5jZSBnZXRLZXllZFJlZigpIHsKLSAgICByZXR1cm4ga2V5ZWRSZWZlcmVuY2VfOwotICB9Ci0KLSAgcHVibGljIFB1Ymxpc2hlckFzc2VydGlvbiBnZXRQdWJsaXNoZXJBc3NlcnRpb24oKSB7Ci0gICAgaWYgKGZyb21LZXlfID09IG51bGwgfHwKLSAgICAgICAgdG9LZXlfID09IG51bGwgfHwKLSAgICAgICAga2V5ZWRSZWZlcmVuY2VfID09IG51bGwpIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIFB1Ymxpc2hlckFzc2VydGlvbiBwdWJBc3NlcnRpb24gPSBuZXcgUHVibGlzaGVyQXNzZXJ0aW9uKGZyb21LZXlfLCB0b0tleV8sIGtleWVkUmVmZXJlbmNlXyk7Ci0gICAgcmV0dXJuIHB1YkFzc2VydGlvbjsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvZGF0YW1vZGVsL1F1ZXJ5RWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2RhdGFtb2RlbC9RdWVyeUVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQ2ZGU5MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvZGF0YW1vZGVsL1F1ZXJ5RWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLk1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5idXNpbmVzcy5CdXNpbmVzc0VudGl0eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnNlcnZpY2UuQnVzaW5lc3NTZXJ2aWNlOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLlRNb2RlbDsKLQotcHVibGljIGNsYXNzIFF1ZXJ5RWxlbWVudCBleHRlbmRzIEFic3RyYWN0VURESUVsZW1lbnQKLXsKLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIGluaXRRdWVyeVByb3BlcnRpZXMoaW50IGl0ZW1UeXBlLE9iamVjdFtdIHJlc3VsdHMpCi0gIHsKLSAgICBWZWN0b3IgcmVzdWx0c1ZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICBmb3IgKGludCBpPTA7aTxyZXN1bHRzLmxlbmd0aDtpKyspCi0gICAgICByZXN1bHRzVmVjdG9yLmFkZEVsZW1lbnQocmVzdWx0c1tpXSk7Ci0gICAgc2V0UHJvcGVydHlBc1N0cmluZyhNb2RlbENvbnN0YW50cy5SRUxfQ0hJTERSRU4sVURESU1vZGVsQ29uc3RhbnRzLlJFTF9RVUVSWV9SRVNVTFRTKTsKLSAgICBzZXRQcm9wZXJ0eUFzT2JqZWN0KFVERElNb2RlbENvbnN0YW50cy5JTklUSUFMX1JFU1VMVFMscmVzdWx0c1ZlY3Rvcik7Ci0gICAgc2V0UHJvcGVydHlBc1N0cmluZyhVRERJTW9kZWxDb25zdGFudHMuUVVFUllfVFlQRSxTdHJpbmcudmFsdWVPZihpdGVtVHlwZSkpOwotICB9Ci0gIAotICBwdWJsaWMgUXVlcnlFbGVtZW50KEJ1c2luZXNzRW50aXR5W10gc3BMaXN0LFN0cmluZyBuYW1lLE1vZGVsIG1vZGVsKQotICB7Ci0gICAgc3VwZXIobmFtZSxtb2RlbCk7Ci0gICAgaW5pdFF1ZXJ5UHJvcGVydGllcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUyxzcExpc3QpOwotICB9Ci0KLSAgcHVibGljIFF1ZXJ5RWxlbWVudChCdXNpbmVzc1NlcnZpY2VbXSBic0xpc3QsU3RyaW5nIG5hbWUsTW9kZWwgbW9kZWwpCi0gIHsKLSAgICBzdXBlcihuYW1lLG1vZGVsKTsKLSAgICBpbml0UXVlcnlQcm9wZXJ0aWVzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUyxic0xpc3QpOwotICB9Ci0KLSAgcHVibGljIFF1ZXJ5RWxlbWVudChUTW9kZWxbXSB0TW9kZWxMaXN0LFN0cmluZyBuYW1lLE1vZGVsIG1vZGVsKQotICB7Ci0gICAgc3VwZXIobmFtZSxtb2RlbCk7Ci0gICAgaW5pdFF1ZXJ5UHJvcGVydGllcyhVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTLHRNb2RlbExpc3QpOwotICB9Ci0KLSAgcHVibGljIGludCBnZXRRdWVyeVR5cGUoKQotICB7Ci0gICAgcmV0dXJuIEludGVnZXIucGFyc2VJbnQoZ2V0UHJvcGVydHlBc1N0cmluZyhVRERJTW9kZWxDb25zdGFudHMuUVVFUllfVFlQRSkpOwotICB9Ci0KLSAgcHVibGljIFF1ZXJ5UGFyZW50RWxlbWVudCBnZXRRdWVyeVBhcmVudEVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIChRdWVyeVBhcmVudEVsZW1lbnQpZ2V0UGFyZW50RWxlbWVudCgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvZGF0YW1vZGVsL1F1ZXJ5UGFyZW50RWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2RhdGFtb2RlbC9RdWVyeVBhcmVudEVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTI2ZjM3ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvZGF0YW1vZGVsL1F1ZXJ5UGFyZW50RWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElNb2RlbENvbnN0YW50czsKLQotcHVibGljIGNsYXNzIFF1ZXJ5UGFyZW50RWxlbWVudCBleHRlbmRzIEFic3RyYWN0VURESUVsZW1lbnQKLXsKLSAgcHVibGljIFF1ZXJ5UGFyZW50RWxlbWVudChTdHJpbmcgbmFtZSxNb2RlbCBtb2RlbCkKLSAgewotICAgIHN1cGVyKG5hbWUsbW9kZWwpOwotICAgIHNldFByb3BlcnR5QXNTdHJpbmcoTW9kZWxDb25zdGFudHMuUkVMX0NISUxEUkVOLFVERElNb2RlbENvbnN0YW50cy5SRUxfUVVFUklFUyk7Ci0gIH0KLQotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0UXVlcmllcygpCi0gIHsKLSAgICByZXR1cm4gZ2V0RWxlbWVudHMoVURESU1vZGVsQ29uc3RhbnRzLlJFTF9RVUVSSUVTKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2RhdGFtb2RlbC9SZWdpc3RyeUVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9kYXRhbW9kZWwvUmVnaXN0cnlFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyMDlmMmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2RhdGFtb2RlbC9SZWdpc3RyeUVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDI3ICAgMTM2NDQ5IGJydW5zc2VuQHVzLmlibS5jb20gLSBWaW5jZSBCcnVuc3NlbiAgCi0gKiAyMDA2MDkxMiAgIDE0MTc5NiBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKiAyMDA3MDQxOSAgIDE4Mjg2NCBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmRpc2NvdmVyeS5OZXRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucmVnaXN0cnkuSVJlZ2lzdHJ5TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucmVnaXN0cnkuUmVnaXN0cnlTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5yZWdpc3RyeS5VRERJUmVnaXN0cnlTZXJ2aWNlOwotaW1wb3J0IG9yZy51ZGRpNGouVURESUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLmNsaWVudC5VRERJUHJveHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5EZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnNlcnZpY2UuQnVzaW5lc3NTZXJ2aWNlOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuQXV0aFRva2VuOwotaW1wb3J0IG9yZy51ZGRpNGoudHJhbnNwb3J0LlRyYW5zcG9ydEV4Y2VwdGlvbjsKLQotcHVibGljIGNsYXNzIFJlZ2lzdHJ5RWxlbWVudCBleHRlbmRzIEFic3RyYWN0VURESUVsZW1lbnQKLXsKLSAgcHJpdmF0ZSBmaW5hbCBsb25nIEFVVEhfSU5GT19USU1FT1VUID0gMzAwMDAwMDsKLSAgcHJpdmF0ZSBVRERJUHJveHkgcHJveHlfOwotICBwcml2YXRlIGxvbmcgYXV0aFRva2VuVGltZXN0YW1wXzsKLSAgcHJpdmF0ZSBBdXRoVG9rZW4gYXV0aFRva2VuXzsKLSAgcHJpdmF0ZSBTdHJpbmcgaWRfOwotICBwcml2YXRlIFN0cmluZyBwYXNzd29yZF87Ci0gIHByaXZhdGUgU3RyaW5nIGlucXVpcnlVUkxfOwotICBwcml2YXRlIFN0cmluZyBwdWJsaXNoVVJMXzsKLSAgcHJpdmF0ZSBTdHJpbmcgY2FjaGVkUHVibGlzaFVSTF87Ci0gIHByaXZhdGUgU3RyaW5nIHJlZ2lzdHJhdGlvblVSTF87Ci0gIHByaXZhdGUgSGFzaHRhYmxlIHVzZXJEZWZpbmVkQ2F0ZWdvcmllc187Ci0gIHByaXZhdGUgYm9vbGVhbiBjaGVja0ZvclVzZXJEZWZpbmVkQ2F0ZWdvcmllc187Ci0gIHByaXZhdGUgU3RyaW5nIGNhdGVnb3JpZXNEaXJlY3RvcnlfOwotCi0gIHB1YmxpYyBSZWdpc3RyeUVsZW1lbnQoVURESVByb3h5IHByb3h5LCBTdHJpbmcgaW5xdWlyeVVSTCwgU3RyaW5nIG5hbWUsIE1vZGVsIG1vZGVsKQotICB7Ci0gICAgc3VwZXIobmFtZSwgbW9kZWwpOwotICAgIHByb3h5XyA9IHByb3h5OwotICAgIGlucXVpcnlVUkxfID0gaW5xdWlyeVVSTDsKLSAgICBwdWJsaXNoVVJMXyA9IG51bGw7Ci0gICAgYXV0aFRva2VuVGltZXN0YW1wXyA9IC0xOwotICAgIGF1dGhUb2tlbl8gPSBudWxsOwotICAgIGlkXyA9IG51bGw7Ci0gICAgcGFzc3dvcmRfID0gbnVsbDsKLSAgICBjYWNoZWRQdWJsaXNoVVJMXyA9IG51bGw7Ci0gICAgcmVnaXN0cmF0aW9uVVJMXyA9IG51bGw7Ci0gICAgdXNlckRlZmluZWRDYXRlZ29yaWVzXyA9IG51bGw7Ci0gICAgY2hlY2tGb3JVc2VyRGVmaW5lZENhdGVnb3JpZXNfID0gZmFsc2U7Ci0gICAgY2F0ZWdvcmllc0RpcmVjdG9yeV8gPSBudWxsOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFVERElQcm94eSBnZXRQcm94eSgpCi0gIHsKLSAgICByZXR1cm4gcHJveHlfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RGVmYXVsdHMoKQotICB7Ci0JICAKLQkgIGF1dGhUb2tlblRpbWVzdGFtcF8gPSAtMTsKLQkgIGF1dGhUb2tlbl8gPSBudWxsOwotCSAgY2FjaGVkUHVibGlzaFVSTF8gPSBudWxsOyAKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRJbnF1aXJ5VVJMKCkKLSAgewotICAgIHJldHVybiBpbnF1aXJ5VVJMXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBRdWVyeVBhcmVudEVsZW1lbnQgZ2V0UXVlcnlQYXJlbnRFbGVtZW50KCkKLSAgewotICAgIHJldHVybiAoUXVlcnlQYXJlbnRFbGVtZW50KSAoZ2V0RWxlbWVudHMoVURESU1vZGVsQ29uc3RhbnRzLlJFTF9RVUVSSUVTX1BBUkVOVCkubmV4dEVsZW1lbnQoKSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgUHVibGlzaGVkSXRlbXNFbGVtZW50IGdldFB1Ymxpc2hlZEJ1c2luZXNzZXNFbGVtZW50KCkKLSAgewotICAgIHJldHVybiAoUHVibGlzaGVkSXRlbXNFbGVtZW50KSAoZ2V0RWxlbWVudHMoVURESU1vZGVsQ29uc3RhbnRzLlJFTF9QVUJMSVNIRURfQlVTSU5FU1NFU19QQVJFTlQpLm5leHRFbGVtZW50KCkpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFB1Ymxpc2hlZEl0ZW1zRWxlbWVudCBnZXRQdWJsaXNoZWRTZXJ2aWNlc0VsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIChQdWJsaXNoZWRJdGVtc0VsZW1lbnQpIChnZXRFbGVtZW50cyhVRERJTW9kZWxDb25zdGFudHMuUkVMX1BVQkxJU0hFRF9TRVJWSUNFU19QQVJFTlQpLm5leHRFbGVtZW50KCkpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFB1Ymxpc2hlZEl0ZW1zRWxlbWVudCBnZXRQdWJsaXNoZWRTZXJ2aWNlSW50ZXJmYWNlc0VsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIChQdWJsaXNoZWRJdGVtc0VsZW1lbnQpIChnZXRFbGVtZW50cyhVRERJTW9kZWxDb25zdGFudHMuUkVMX1BVQkxJU0hFRF9TRVJWSUNFX0lOVEVSRkFDRVNfUEFSRU5UKS5uZXh0RWxlbWVudCgpKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHBlcmZvcm1Mb2dpbihTdHJpbmcgcHVibGlzaFVSTCwgU3RyaW5nIHVzZXJJZCwgU3RyaW5nIHBhc3N3b3JkKSB0aHJvd3MgVHJhbnNwb3J0RXhjZXB0aW9uLCBVRERJRXhjZXB0aW9uLCBNYWxmb3JtZWRVUkxFeGNlcHRpb24KLSAgewotICAgIHB1Ymxpc2hVUkxfID0gcHVibGlzaFVSTDsKLSAgICBwcm94eV8uc2V0UHVibGlzaFVSTChOZXRVdGlscy5jcmVhdGVVUkwocHVibGlzaFVSTCkpOwotICAgIGF1dGhUb2tlbl8gPSBwcm94eV8uZ2V0X2F1dGhUb2tlbih1c2VySWQsIHBhc3N3b3JkKTsKLSAgICBhdXRoVG9rZW5UaW1lc3RhbXBfID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0gICAgaWRfID0gdXNlcklkOwotICAgIHBhc3N3b3JkXyA9IHBhc3N3b3JkOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgcGVyZm9ybUxvZ291dCgpIHRocm93cyBUcmFuc3BvcnRFeGNlcHRpb24sIFVERElFeGNlcHRpb24KLSAgewotICAgIHByb3h5Xy5kaXNjYXJkX2F1dGhUb2tlbihhdXRoVG9rZW5fLmdldEF1dGhJbmZvU3RyaW5nKCkpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRBdXRoSW5mb1N0cmluZygpCi0gIHsKLSAgICBpZiAoIWlzTG9nZ2VkSW4oKSkKLSAgICAgIHJldHVybiBudWxsOwotICAgIGlmICgoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBhdXRoVG9rZW5UaW1lc3RhbXBfKSA+IEFVVEhfSU5GT19USU1FT1VUKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBhdXRoVG9rZW5fID0gcHJveHlfLmdldF9hdXRoVG9rZW4oaWRfLCBwYXNzd29yZF8pOwotICAgICAgICBhdXRoVG9rZW5UaW1lc3RhbXBfID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgICB7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBhdXRoVG9rZW5fLmdldEF1dGhJbmZvU3RyaW5nKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBpc0xvZ2dlZEluKCkKLSAgewotICAgIHJldHVybiBhdXRoVG9rZW5fICE9IG51bGw7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRDYWNoZWRQdWJsaXNoVVJMKFN0cmluZyBwdWJsaXNoVVJMKQotICB7Ci0gICAgY2FjaGVkUHVibGlzaFVSTF8gPSBwdWJsaXNoVVJMOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQdWJsaXNoVVJMKCkKLSAgewotICAgIGlmIChpc0xvZ2dlZEluKCkgJiYgcHVibGlzaFVSTF8gIT0gbnVsbCkKLSAgICAgIHJldHVybiBwdWJsaXNoVVJMXzsKLSAgICByZXR1cm4gY2FjaGVkUHVibGlzaFVSTF87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRSZWdpc3RyYXRpb25VUkwoU3RyaW5nIHJlZ2lzdHJhdGlvblVSTCkKLSAgewotICAgIHJlZ2lzdHJhdGlvblVSTF8gPSByZWdpc3RyYXRpb25VUkw7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFJlZ2lzdHJhdGlvblVSTCgpCi0gIHsKLSAgICByZXR1cm4gcmVnaXN0cmF0aW9uVVJMXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0VXNlcklkKCkKLSAgewotICAgIHJldHVybiBpZF87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRVc2VySWQoU3RyaW5nIHVzZXJJZCkKLSAgewotICAgIGlkXyA9IHVzZXJJZDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0Q3JlZCgpCi0gIHsKLSAgICByZXR1cm4gcGFzc3dvcmRfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0Q3JlZChTdHJpbmcgY3JlZCkKLSAgewotICAgIHBhc3N3b3JkXyA9IGNyZWQ7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRVc2VyRGVmaW5lZENhdGVnb3JpZXMoSGFzaHRhYmxlIHVzZXJEZWZpbmVkQ2F0ZWdvcmllcykKLSAgewotICAgIHVzZXJEZWZpbmVkQ2F0ZWdvcmllc18gPSB1c2VyRGVmaW5lZENhdGVnb3JpZXM7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgRW51bWVyYXRpb24gZ2V0VXNlckRlZmluZWRDYXRlZ29yaWVzKCkKLSAgewotICAgIGlmICh1c2VyRGVmaW5lZENhdGVnb3JpZXNfICE9IG51bGwpCi0gICAgICByZXR1cm4gdXNlckRlZmluZWRDYXRlZ29yaWVzXy5lbGVtZW50cygpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIENhdGVnb3J5TW9kZWwgZ2V0VXNlckRlZmluZWRDYXRlZ29yeShTdHJpbmcgdE1vZGVsS2V5KQotICB7Ci0gICAgcmV0dXJuIChDYXRlZ29yeU1vZGVsKSB1c2VyRGVmaW5lZENhdGVnb3JpZXNfLmdldCh0TW9kZWxLZXkpOwotICB9Ci0KLSAgLy8gU3BlY2lhbCBoYW5kbGVyIHRvIGJlIGludm9rZWQgYmVmb3JlIHNlbmRpbmcgYSBtZXNzYWdlIHRvIHRoZSByZWdpc3RyeS4KLSAgcHVibGljIGZpbmFsIHZvaWQgaGFuZGxlUHJlSW52b2NhdGlvbihCdXNpbmVzc1NlcnZpY2UgYnVzU2VydmljZSkKLSAgewotICAgIC8vIEZvciBYTWV0aG9kcywgYnVzaW5lc3Mgc2VydmljZXMgbXVzdCBjb250YWluIGEgZGVzY3JpcHRpb24gb2YgdGhlIGZvcm06Ci0gICAgLy8gSU1QTEVNRU5UQVRJT046IGlibXdzCi0gICAgaWYgKGdldElucXVpcnlVUkwoKS5lcXVhbHMoImh0dHA6Ly91ZGRpLnhtZXRob2RzLm5ldC9pbnF1aXJlIikpCi0gICAgewotICAgICAgVmVjdG9yIGRlc2NyaXB0aW9uVmVjdG9yID0gYnVzU2VydmljZS5nZXREZXNjcmlwdGlvblZlY3RvcigpOwotICAgICAgaWYgKGRlc2NyaXB0aW9uVmVjdG9yID09IG51bGwpCi0gICAgICAgIGRlc2NyaXB0aW9uVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgYm9vbGVhbiBjb250YWluc0ltcGxlbWVudGF0aW9uRGVzY3JpcHRpb24gPSBmYWxzZTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRpb25WZWN0b3Iuc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gKERlc2NyaXB0aW9uKSBkZXNjcmlwdGlvblZlY3Rvci5lbGVtZW50QXQoaSk7Ci0gICAgICAgIGlmIChkZXNjcmlwdGlvbi5nZXRUZXh0KCkuc3RhcnRzV2l0aCgiSU1QTEVNRU5UQVRJT046ICIpKQotICAgICAgICB7Ci0gICAgICAgICAgY29udGFpbnNJbXBsZW1lbnRhdGlvbkRlc2NyaXB0aW9uID0gdHJ1ZTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgaWYgKCFjb250YWluc0ltcGxlbWVudGF0aW9uRGVzY3JpcHRpb24pCi0gICAgICB7Ci0gICAgICAgIGRlc2NyaXB0aW9uVmVjdG9yLmFkZEVsZW1lbnQobmV3IERlc2NyaXB0aW9uKCJJTVBMRU1FTlRBVElPTjogaWJtd3MiKSk7Ci0gICAgICAgIGJ1c1NlcnZpY2Uuc2V0RGVzY3JpcHRpb25WZWN0b3IoZGVzY3JpcHRpb25WZWN0b3IpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldENoZWNrRm9yVXNlckRlZmluZWRDYXRlZ29yaWVzKGJvb2xlYW4gY2hlY2tGb3JVc2VyRGVmaW5lZENhdGVnb3JpZXMpCi0gIHsKLSAgICBjaGVja0ZvclVzZXJEZWZpbmVkQ2F0ZWdvcmllc18gPSBjaGVja0ZvclVzZXJEZWZpbmVkQ2F0ZWdvcmllczsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIGdldENoZWNrRm9yVXNlckRlZmluZWRDYXRlZ29yaWVzKCkKLSAgewotICAgIHJldHVybiBjaGVja0ZvclVzZXJEZWZpbmVkQ2F0ZWdvcmllc187Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRDYXRlZ29yaWVzRGlyZWN0b3J5KFN0cmluZyBkaXJlY3RvcnkpCi0gIHsKLSAgICBjYXRlZ29yaWVzRGlyZWN0b3J5XyA9IGRpcmVjdG9yeTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0Q2F0ZWdvcmllc0RpcmVjdG9yeSgpCi0gIHsKLSAgICByZXR1cm4gY2F0ZWdvcmllc0RpcmVjdG9yeV87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZWZyZXNoTWV0YSgpewotCSAgICAKLQkgIFJlZ2lzdHJ5U2VydmljZSByZWdTZXJ2aWNlID0gUmVnaXN0cnlTZXJ2aWNlLmluc3RhbmNlKCk7Ci0JICBJUmVnaXN0cnlNYW5hZ2VyIHJlZ01hbmFnZXIgPSByZWdTZXJ2aWNlLmdldERlZmF1bHRSZWdpc3RyeU1hbmFnZXIoKTsKLQkgIAotCSAgCi0JICB0cnkKLQkgIHsKLSAgICAJICByZWdNYW5hZ2VyLnJlZnJlc2hNYW5hZ2VyKCk7Ci0JCSAgU3RyaW5nW10gcmVnVVJJcyA9IHJlZ01hbmFnZXIuZ2V0UmVnaXN0cnlVUklzKCk7Ci0JCSAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWdVUklzLmxlbmd0aDsgaSsrKQotCQkgIHsKLQkJCSAgUmVnaXN0cnkgcmVnID0gcmVnTWFuYWdlci5sb2FkUmVnaXN0cnkocmVnVVJJc1tpXSk7Ci0JCQkgIGlmIChyZWcgaW5zdGFuY2VvZiBVRERJUmVnaXN0cnkpCi0JCQkgIHsKLQkJCQkgIFVERElSZWdpc3RyeSB1ZGRpUmVnID0gKFVERElSZWdpc3RyeSlyZWc7Ci0JCQkJICBpZih1ZGRpUmVnLmdldERpc2NvdmVyeVVSTCgpLmVxdWFscyhnZXRJbnF1aXJ5VVJMKCkpKXsKLQkJCQkJICAKLQkJCQkJICAKLQkJCQkJIAotCQkJCQkgIFRheG9ub215W10gdGF4b25vbWllcyA9IHJlZ01hbmFnZXIubG9hZFRheG9ub21pZXMoVURESVJlZ2lzdHJ5U2VydmljZS5pbnN0YW5jZSgpLmdldFRheG9ub215VVJJcyh1ZGRpUmVnKSk7Ci0JCQkJCSAgaWYgKHRheG9ub21pZXMgIT0gbnVsbCkKLQkJCQkgICAgICAgIHsKLQkJCQkgICAgICAgICAgSGFzaHRhYmxlIHRheG9ub215VGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0JCQkJICAgICAgICAgIGZvciAoaW50IGo9MDsgajx0YXhvbm9taWVzLmxlbmd0aDsgaisrKQotCQkJCSAgICAgICAgICB7Ci0JCQkJICAgICAgICAgICAgVGF4b25vbXkgdGF4b25vbXkgPSB0YXhvbm9taWVzW2pdOwotCQkJCSAgICAgICAgICAgIFN0cmluZyBuYW1lID0gdGF4b25vbXkuZ2V0TmFtZSgpOwotCQkJCSAgICAgICAgICAgIFN0cmluZyB0bW9kZWxLZXkgPSB0YXhvbm9teS5nZXRUbW9kZWxLZXkoKTsKLQkJCQkgICAgICAgICAgICBDYXRlZ29yeU1vZGVsIGNhdE1vZGVsID0gbmV3IENhdGVnb3J5TW9kZWwoKTsKLQkJCQkgICAgICAgICAgICBjYXRNb2RlbC5zZXREaXNwbGF5TmFtZShuYW1lKTsKLQkJCQkgICAgICAgICAgICBjYXRNb2RlbC5zZXRDYXRlZ29yeUtleShuYW1lKTsKLQkJCQkgICAgICAgICAgICBjYXRNb2RlbC5zZXRUTW9kZWxLZXkodG1vZGVsS2V5KTsKLQkJCQkgICAgICAgICAgICBjYXRNb2RlbC5sb2FkRnJvbVRheG9ub215KHRheG9ub215KTsKLQkJCQkgICAgICAgICAgICB0YXhvbm9teVRhYmxlLnB1dCh0bW9kZWxLZXksIGNhdE1vZGVsKTsKLQkJCQkgICAgICAgICAgfQotCQkJCSAgICAgICAgICAKLQkJCQkgICAgICAgICAgc2V0VXNlckRlZmluZWRDYXRlZ29yaWVzKHRheG9ub215VGFibGUpOwotCQkJCSAgICAgICAgfSAgIAotCQkJCSAgfQotCQkgIAotCQkJICB9Ci0JICAKLQkJICB9Ci0JICB9Y2F0Y2ggKENvcmVFeGNlcHRpb24gY2UpCi0JICB7Ci0JCSAgLy8gVE9ETzogQmV0dGVyIGVycm9yIHJlcG9ydGluZwotCQkgIGNlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgfSAgCi0gIH0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9kYXRhbW9kZWwvU2VydmljZUVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9kYXRhbW9kZWwvU2VydmljZUVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGYzN2NiYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvZGF0YW1vZGVsL1NlcnZpY2VFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnNlcnZpY2UuQnVzaW5lc3NTZXJ2aWNlOwotCi1wdWJsaWMgY2xhc3MgU2VydmljZUVsZW1lbnQgZXh0ZW5kcyBBYnN0cmFjdFVERElFbGVtZW50Ci17Ci0gIHByaXZhdGUgQnVzaW5lc3NTZXJ2aWNlIGJzXzsKLSAgCi0gIHB1YmxpYyBTZXJ2aWNlRWxlbWVudChCdXNpbmVzc1NlcnZpY2UgYnMsTW9kZWwgbW9kZWwpCi0gIHsKLSAgICBzdXBlcihicy5nZXREZWZhdWx0TmFtZVN0cmluZygpLG1vZGVsKTsKLSAgICBzZXRLZXkoYnMuZ2V0U2VydmljZUtleSgpKTsKLSAgICBic18gPSBiczsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIEJ1c2luZXNzU2VydmljZSBnZXRCdXNpbmVzc1NlcnZpY2UoKQotICB7Ci0gICAgcmV0dXJuIGJzXzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2RhdGFtb2RlbC9TZXJ2aWNlSW50ZXJmYWNlRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2RhdGFtb2RlbC9TZXJ2aWNlSW50ZXJmYWNlRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzJkODgxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9kYXRhbW9kZWwvU2VydmljZUludGVyZmFjZUVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLlRNb2RlbDsKLQotcHVibGljIGNsYXNzIFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50IGV4dGVuZHMgQWJzdHJhY3RVRERJRWxlbWVudAotewotICBwcml2YXRlIFRNb2RlbCB0TW9kZWxfOwotICAgIAotICBwdWJsaWMgU2VydmljZUludGVyZmFjZUVsZW1lbnQoVE1vZGVsIHRNb2RlbCxNb2RlbCBtb2RlbCkKLSAgewotICAgIHN1cGVyKHRNb2RlbC5nZXROYW1lU3RyaW5nKCksbW9kZWwpOwotICAgIHRNb2RlbF8gPSB0TW9kZWw7Ci0gICAgc2V0S2V5KHRNb2RlbC5nZXRUTW9kZWxLZXkoKSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgVE1vZGVsIGdldFRNb2RlbCgpCi0gIHsKLSAgICByZXR1cm4gdE1vZGVsXzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2RhdGFtb2RlbC9VRERJTWFpbkVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9kYXRhbW9kZWwvVURESU1haW5FbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzNzEyMDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL2RhdGFtb2RlbC9VRERJTWFpbkVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgVURESU1haW5FbGVtZW50IGV4dGVuZHMgVHJlZUVsZW1lbnQKLXsKLSAgcHJpdmF0ZSBIYXNodGFibGUgcmVnaXN0cnlOYW1lc187Ci0KLSAgcHVibGljIFVERElNYWluRWxlbWVudChTdHJpbmcgbmFtZSxNb2RlbCBtb2RlbCkKLSAgewotICAgIHN1cGVyKG5hbWUsbW9kZWwpOwotICAgIHJlZ2lzdHJ5TmFtZXNfID0gbmV3IEhhc2h0YWJsZSgpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gY29udGFpbnNSZWdpc3RyeU5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICByZXR1cm4gKHJlZ2lzdHJ5TmFtZXNfLmdldChuYW1lKSAhPSBudWxsKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGFkZFJlZ2lzdHJ5TmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgIHJlZ2lzdHJ5TmFtZXNfLnB1dChuYW1lLEJvb2xlYW4uVFJVRSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCByZW1vdmVSZWdpc3RyeU5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICByZWdpc3RyeU5hbWVzXy5yZW1vdmUobmFtZSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBjbGVhclJlZ2lzdHJ5TmFtZXMoKQotICB7Ci0gICAgcmVnaXN0cnlOYW1lc18uY2xlYXIoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL0FkZFRvRmF2b3JpdGVzVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL0FkZFRvRmF2b3JpdGVzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODUzYTQwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9BZGRUb0Zhdm9yaXRlc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkFjdGlvblRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuQWRkVG9GYXZvcml0ZXNBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5TZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIEFkZFRvRmF2b3JpdGVzVG9vbCBleHRlbmRzIEFjdGlvblRvb2wgewotICAgIHB1YmxpYyBBZGRUb0Zhdm9yaXRlc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJpbWFnZXMvZmF2b3JpdGVzX2VuYWJsZWQuZ2lmIiwgImltYWdlcy9mYXZvcml0ZXNfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoKSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIEFkZFRvRmF2b3JpdGVzQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpKTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9CdXNQdWJsaXNoU2VydmljZVRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9CdXNQdWJsaXNoU2VydmljZVRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWU3OTEwMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvQnVzUHVibGlzaFNlcnZpY2VUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5TZWxlY3RGaW5kVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgQnVzUHVibGlzaFNlcnZpY2VUb29sIGV4dGVuZHMgRm9ybVRvb2wgaW1wbGVtZW50cyBNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZQotewotICBwcml2YXRlIFJlZ0ZpbmRUb29sIHJlZ0ZpbmRUb29sXzsKLQotICBwdWJsaWMgQnVzUHVibGlzaFNlcnZpY2VUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLFN0cmluZyBhbHQpCi0gIHsKLSAgICBzdXBlcih0b29sTWFuYWdlciwidWRkaS9pbWFnZXMvcHVibGlzaF9zZXJ2aWNlX2VuYWJsZWQuZ2lmIiwidWRkaS9pbWFnZXMvcHVibGlzaF9zZXJ2aWNlX2hpZ2hsaWdodGVkLmdpZiIsYWx0KTsKLSAgICByZWdGaW5kVG9vbF8gPSBuZXcgUmVnRmluZFRvb2wobmV3IFRvb2xNYW5hZ2VyKHRvb2xNYW5hZ2VyLmdldE5vZGUoKSksICIiKTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIGluaXREZWZhdWx0UHJvcGVydGllcygpCi0gIHsKLSAgICB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Q29udHJvbGxlcigpLmdldFVERElQZXJzcGVjdGl2ZSgpOwotCi0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVksIiIpOwotCi0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUykpOwotICAgIFN0cmluZyBzaW1wbGVTdHlsZVN0cmluZyA9IFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0lNUExFKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VTLHNpbXBsZVN0eWxlU3RyaW5nKTsKLQotICAgIC8vIFJlZ1B1Ymxpc2hTZXJ2aWNlU2ltcGxlQWN0aW9uIGlucHV0cwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfV1NETF9VUkwsIiIpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfTkFNRSwiIik7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9ERVNDUklQVElPTiwiIik7Ci0KLSAgICAvLyBSZWdQdWJsaXNoU2VydmljZUFkdmFuY2VkQWN0aW9uIGlucHV0cwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9XU0RMX1VSTCwiIik7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBhZGRBdXRoZW50aWNhdGlvblByb3BlcnRpZXMoUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQpCi0gIHsKLSAgICBTdHJpbmcgcHVibGlzaFVSTCA9IHJlZ0VsZW1lbnQuZ2V0UHVibGlzaFVSTCgpOwotICAgIFN0cmluZyB1c2VySWQgPSByZWdFbGVtZW50LmdldFVzZXJJZCgpOwotICAgIFN0cmluZyBwYXNzd29yZCA9IHJlZ0VsZW1lbnQuZ2V0Q3JlZCgpOwotCi0gICAgaWYgKHB1Ymxpc2hVUkwgPT0gbnVsbCkKLSAgICAgIHB1Ymxpc2hVUkwgPSAiIjsKLSAgICBpZiAodXNlcklkID09IG51bGwpCi0gICAgICB1c2VySWQgPSAiIjsKLSAgICBpZiAocGFzc3dvcmQgPT0gbnVsbCkKLSAgICAgIHBhc3N3b3JkID0gIiI7Ci0KLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMLHB1Ymxpc2hVUkwpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklELHVzZXJJZCk7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCxwYXNzd29yZCk7Ci0gICAgcmVnRmluZFRvb2xfLmFkZEF1dGhlbnRpY2F0aW9uUHJvcGVydGllcyhyZWdFbGVtZW50KTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKE9iamVjdCBzdWJRdWVyeUtleU9iamVjdCkKLSAgewotICAgIC8vIEVtcHR5L05vbi1leGlzdGVudCBzdWJxdWVyeWtleSBpbXBsaWVzIHB1Ymxpc2ggZm9ybS4gQWxsIGVsc2UgaW1wbGllcyBxdWVyeSBmb3JtLgotICAgIFN0cmluZyBzdWJRdWVyeUtleSA9IChTdHJpbmcpc3ViUXVlcnlLZXlPYmplY3Q7Ci0gICAgaWYgKHN1YlF1ZXJ5S2V5ID09IG51bGwgfHwgc3ViUXVlcnlLZXkubGVuZ3RoKCkgPCAxKQotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIHJlZ0ZpbmRUb29sXy5nZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXlPYmplY3QpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpCi0gIHsKLSAgICBOb2RlIG5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgIFN0cmluZyBzdWJRdWVyeUtleSA9IChTdHJpbmcpZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVkpOwotICAgIHJldHVybiBTZWxlY3RGaW5kVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGUuZ2V0Tm9kZUlkKCksdG9vbElkXyxub2RlLmdldFZpZXdJZCgpLG5vZGUuZ2V0Vmlld1Rvb2xJZCgpLHN1YlF1ZXJ5S2V5LGZvckhpc3RvcnkpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRGb3JtTGluaygpCi0gIHsKLSAgICBPYmplY3Qgc3ViUXVlcnlLZXlPYmplY3QgPSBnZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSk7Ci0gICAgU3RyaW5nIHN1YlF1ZXJ5S2V5ID0gbnVsbDsKLSAgICBpZiAoc3ViUXVlcnlLZXlPYmplY3QgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBnZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJJRVNfUFJPUEVSVElFUyk7Ci0gICAgICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2Ugc3ViUXVlcnlQcm9wZXJ0aWVzID0gZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHN1YlF1ZXJ5S2V5T2JqZWN0KTsKLSAgICAgIE9iamVjdCBzdWJRdWVyeUdldE9iamVjdCA9IHN1YlF1ZXJ5UHJvcGVydGllcy5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0dFVCk7Ci0gICAgICBpZiAoc3ViUXVlcnlHZXRPYmplY3QgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgYm9vbGVhbiBpc1N1YlF1ZXJ5R2V0ID0gKChCb29sZWFuKXN1YlF1ZXJ5R2V0T2JqZWN0KS5ib29sZWFuVmFsdWUoKTsKLSAgICAgICAgaWYgKGlzU3ViUXVlcnlHZXQpCi0gICAgICAgICAgcmV0dXJuICJ1ZGRpL2Zvcm1zL0dldEZvcm0uanNwIjsKLSAgICAgIH0KLSAgICAgIHN1YlF1ZXJ5S2V5ID0gKFN0cmluZylzdWJRdWVyeUtleU9iamVjdDsKLSAgICB9Ci0gICAgICAKLSAgICBpZiAoc3ViUXVlcnlLZXkgPT0gbnVsbCB8fCBzdWJRdWVyeUtleS5sZW5ndGgoKSA8IDEpCi0gICAgICByZXR1cm4gInVkZGkvZm9ybXMvQnVzUHVibGlzaFNlcnZpY2VGb3JtLmpzcCI7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIHJlZ0ZpbmRUb29sXy5nZXRGb3JtTGluaygpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvQnVzaW5lc3NEZXRhaWxzVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL0J1c2luZXNzRGV0YWlsc1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmQxZjYzYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvQnVzaW5lc3NEZXRhaWxzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLlByb3h5TG9hZFBhZ2VBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5CdXNpbmVzc0VsZW1lbnQ7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5idXNpbmVzcy5CdXNpbmVzc0VudGl0eTsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuQ2F0ZWdvcnlCYWc7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkRpc2NvdmVyeVVSTHM7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLklkZW50aWZpZXJCYWc7Ci0KLXB1YmxpYyBjbGFzcyBCdXNpbmVzc0RldGFpbHNUb29sIGV4dGVuZHMgRGV0YWlsc1Rvb2wKLXsKLSAgcHVibGljIEJ1c2luZXNzRGV0YWlsc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsU3RyaW5nIGFsdCkKLSAgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLGFsdCxQcm94eUxvYWRQYWdlQWN0aW9uLmdldEFjdGlvbkxpbmsoInVkZGkvZm9ybXMvQnVzaW5lc3NEZXRhaWxzRm9ybS5qc3AiKSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBpbml0RGVmYXVsdFByb3BlcnRpZXMoKQotICB7Ci0gICAgY2xlYXJQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgQnVzaW5lc3NFbGVtZW50IGJ1c0VsZW1lbnQgPSAoQnVzaW5lc3NFbGVtZW50KSh0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpLmdldFRyZWVFbGVtZW50KCkpOwotICAgIEJ1c2luZXNzRW50aXR5IGJlID0gYnVzRWxlbWVudC5nZXRCdXNpbmVzc0VudGl0eSgpOwotCi0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX0JVU0lORVNTX0tFWSxiZS5nZXRCdXNpbmVzc0tleSgpKTsKLQotICAgIFZlY3RvciBuYW1lVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgIGNvcHlJbmRleFZlY3RvcihiZS5nZXROYW1lVmVjdG9yKCksbmFtZVZlY3Rvcik7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19OQU1FUyxuYW1lVmVjdG9yKTsKLQotICAgIFZlY3RvciBkZXNjcmlwdGlvblZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICBjb3B5SW5kZXhWZWN0b3IoYmUuZ2V0RGVzY3JpcHRpb25WZWN0b3IoKSxkZXNjcmlwdGlvblZlY3Rvcik7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ERVNDUklQVElPTlMsZGVzY3JpcHRpb25WZWN0b3IpOwotCi0gICAgSWRlbnRpZmllckJhZyBpZEJhZyA9IGJlLmdldElkZW50aWZpZXJCYWcoKTsKLSAgICBpZiAoaWRCYWcgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBWZWN0b3IgaWRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBjb3B5SW5kZXhWZWN0b3IoaWRCYWcuZ2V0S2V5ZWRSZWZlcmVuY2VWZWN0b3IoKSxpZFZlY3Rvcik7Ci0gICAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0lERU5USUZJRVJTLGlkVmVjdG9yKTsKLSAgICB9Ci0KLSAgICBDYXRlZ29yeUJhZyBjYXRCYWcgPSBiZS5nZXRDYXRlZ29yeUJhZygpOwotICAgIGlmIChjYXRCYWcgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBWZWN0b3IgY2F0VmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgY29weUluZGV4VmVjdG9yKGNhdEJhZy5nZXRLZXllZFJlZmVyZW5jZVZlY3RvcigpLGNhdFZlY3Rvcik7Ci0gICAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0NBVEVHT1JJRVMsY2F0VmVjdG9yKTsKLSAgICB9Ci0KLSAgICBEaXNjb3ZlcnlVUkxzIGRpc2NvdmVyeVVSTHMgPSBiZS5nZXREaXNjb3ZlcnlVUkxzKCk7Ci0gICAgaWYgKGRpc2NvdmVyeVVSTHMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBWZWN0b3IgZGlzY292ZXJ5VVJMVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgY29weUluZGV4VmVjdG9yKGRpc2NvdmVyeVVSTHMuZ2V0RGlzY292ZXJ5VVJMVmVjdG9yKCksZGlzY292ZXJ5VVJMVmVjdG9yKTsKLSAgICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfRElTQ09WRVJZVVJMUyxkaXNjb3ZlcnlVUkxWZWN0b3IpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL0J1c2luZXNzTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL0J1c2luZXNzTm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTZiYWU4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9CdXNpbmVzc05vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5CdXNpbmVzc0dldFNlcnZpY2VzQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBCdXNpbmVzc05vZGUgZXh0ZW5kcyBVRERJTmF2aWdhdG9yTm9kZQotewotICBwcml2YXRlIERldGFpbHNUb29sIGRldGFpbHNUb29sXzsKLSAgcHJpdmF0ZSBCdXNQdWJsaXNoU2VydmljZVRvb2wgcHVibGlzaFNlcnZpY2VUb29sXzsKLSAgcHJpdmF0ZSBNYW5hZ2VQdWJsaXNoZXJBc3NlcnRpb25zVG9vbCBtYW5hZ2VQdWJsaXNoZXJBc3NlcnRpb25zVG9vbF87Ci0gIHByaXZhdGUgTWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzVG9vbCBtYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNUb29sXzsKLSAgcHJpdmF0ZSBVbnB1Ymxpc2hUb29sIHVucHVibGlzaFRvb2xfOwotCi0gIHB1YmxpYyBCdXNpbmVzc05vZGUoVHJlZUVsZW1lbnQgZWxlbWVudCxOb2RlTWFuYWdlciBub2RlTWFuYWdlcixpbnQgbm9kZURlcHRoKQotICB7Ci0gICAgc3VwZXIoZWxlbWVudCxub2RlTWFuYWdlcixub2RlRGVwdGgsInVkZGkvaW1hZ2VzL2J1c2luZXNzX2hpZ2hsaWdodGVkLmdpZiIpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgaW5pdFRvb2xzKCkKLSAgewotICAgIENvbnRyb2xsZXIgY29udHJvbGxlciA9IG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCk7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgZGV0YWlsc1Rvb2xfID0gbmV3IEJ1c2luZXNzRGV0YWlsc1Rvb2wodG9vbE1hbmFnZXJfLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfQlVTSU5FU1NfREVUQUlMUyIpKTsKLSAgICBuZXcgR2V0U2VydmljZXNUb29sKHRvb2xNYW5hZ2VyXyx1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0dFVF9TRVJWSUNFUyIpLEJ1c2luZXNzR2V0U2VydmljZXNBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWRfKSk7ICAgIAotICAgIHB1Ymxpc2hTZXJ2aWNlVG9vbF8gPSBuZXcgQnVzUHVibGlzaFNlcnZpY2VUb29sKHRvb2xNYW5hZ2VyXyx1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1BVQkxJU0hfU0VSVklDRSIpKTsKLSAgICBtYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNUb29sXyA9IG5ldyBNYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNUb29sKHRvb2xNYW5hZ2VyXyx1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX01BTkFHRV9SRUZFUkVOQ0VEX1NFUlZJQ0VTIikpOwotICAgIG1hbmFnZVB1Ymxpc2hlckFzc2VydGlvbnNUb29sXyA9IG5ldyBNYW5hZ2VQdWJsaXNoZXJBc3NlcnRpb25zVG9vbCh0b29sTWFuYWdlcl8sdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9NQU5BR0VfUFVCTElTSEVSX0FTU0VSVElPTlMiKSk7Ci0gICAgbmV3IEFkZFRvRmF2b3JpdGVzVG9vbCh0b29sTWFuYWdlcl8sIHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfQUREX1RPX0ZBVk9SSVRFUyIpKTsKLSAgICB1bnB1Ymxpc2hUb29sXyA9IG5ldyBVbnB1Ymxpc2hUb29sKHRvb2xNYW5hZ2VyXywidWRkaS9pbWFnZXMvdW5wdWJsaXNoX2J1c19lbmFibGVkLmdpZiIsInVkZGkvaW1hZ2VzL3VucHVibGlzaF9idXNfaGlnaGxpZ2h0ZWQuZ2lmIix1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1VOUFVCTElTSF9CVVNJTkVTUyIpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZEF1dGhlbnRpY2F0aW9uUHJvcGVydGllcyhSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCkKLSAgewotICAgIGRldGFpbHNUb29sXy5hZGRBdXRoZW50aWNhdGlvblByb3BlcnRpZXMocmVnRWxlbWVudCk7Ci0gICAgcHVibGlzaFNlcnZpY2VUb29sXy5hZGRBdXRoZW50aWNhdGlvblByb3BlcnRpZXMocmVnRWxlbWVudCk7Ci0gICAgbWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzVG9vbF8uYWRkQXV0aGVudGljYXRpb25Qcm9wZXJ0aWVzKHJlZ0VsZW1lbnQpOwotICAgIG1hbmFnZVB1Ymxpc2hlckFzc2VydGlvbnNUb29sXy5hZGRBdXRoZW50aWNhdGlvblByb3BlcnRpZXMocmVnRWxlbWVudCk7Ci0gICAgdW5wdWJsaXNoVG9vbF8uYWRkQXV0aGVudGljYXRpb25Qcm9wZXJ0aWVzKHJlZ0VsZW1lbnQpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvQ2F0ZWdvcnlOb2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvQ2F0ZWdvcnlOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjN2ZlY2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL0NhdGVnb3J5Tm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5TZWxlY3RDYXRlZ29yeU5vZGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5Ub2dnbGVDYXRlZ29yeU5vZGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElGcmFtZU5hbWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLkNhdGVnb3J5RWxlbWVudDsKLQotcHVibGljIGNsYXNzIENhdGVnb3J5Tm9kZSBleHRlbmRzIE5vZGUKLXsKLSAgcHVibGljIENhdGVnb3J5Tm9kZShUcmVlRWxlbWVudCBlbGVtZW50LE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyLGludCBub2RlRGVwdGgpCi0gIHsKLSAgICBzdXBlcihlbGVtZW50LG5vZGVNYW5hZ2VyLG5vZGVEZXB0aCwidWRkaS9pbWFnZXMvY2F0ZWdvcnkuZ2lmIik7Ci0gICAgc2V0VmlzaWJpbGl0eU9mQ2hpbGRyZW4oZmFsc2UpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgY3JlYXRlQ2hpbGRyZW4oKQotICB7Ci0gICAgRW51bWVyYXRpb24gY2hpbGRyZW4gPSBlbGVtZW50Xy5nZXRFbGVtZW50cyhVRERJTW9kZWxDb25zdGFudHMuUkVMX1NVQkNBVEVHT1JJRVMpOwotICAgIGlmIChjaGlsZHJlbiAhPSBudWxsKQotICAgIHsKLSAgICAgIHdoaWxlIChjaGlsZHJlbi5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgIHsKLSAgICAgICAgQ2F0ZWdvcnlFbGVtZW50IGNhdGVnb3J5RWxlbWVudCA9IChDYXRlZ29yeUVsZW1lbnQpY2hpbGRyZW4ubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgQ2F0ZWdvcnlOb2RlIGNhdGVnb3J5Tm9kZSA9IG5ldyBDYXRlZ29yeU5vZGUoY2F0ZWdvcnlFbGVtZW50LG5vZGVNYW5hZ2VyXyxub2RlRGVwdGhfKzEpOwotICAgICAgICBhZGRDaGlsZChjYXRlZ29yeU5vZGUpOwotICAgICAgICBjYXRlZ29yeU5vZGUuY3JlYXRlQ2hpbGRyZW4oKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldE5vZGVOYW1lKCkKLSAgewotICAgIENhdGVnb3J5RWxlbWVudCBjYXRlZ29yeUVsZW1lbnQgPSAoQ2F0ZWdvcnlFbGVtZW50KWVsZW1lbnRfOwotICAgIHJldHVybiBjYXRlZ29yeUVsZW1lbnQuZ2V0TmFtZUZvclRyZWUoKTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgZ2V0VG9nZ2xlTm9kZUFjdGlvbkhyZWYoKQotICB7Ci0gICAgcmV0dXJuIFRvZ2dsZUNhdGVnb3J5Tm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKGdldE5vZGVNYW5hZ2VyKCkuZ2V0Q29udHJvbGxlcigpLmdldFNlc3Npb25JZCgpLG5vZGVJZF8saXNPcGVuXyk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIGdldExpbmtBY3Rpb25IcmVmKCkKLSAgewotICAgIHJldHVybiBTZWxlY3RDYXRlZ29yeU5vZGVBY3Rpb24uZ2V0QWN0aW9uTGluayhnZXROb2RlTWFuYWdlcigpLmdldENvbnRyb2xsZXIoKS5nZXRTZXNzaW9uSWQoKSxub2RlSWRfKTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgZ2V0VG9nZ2xlTm9kZUFjdGlvblRhcmdldCgpCi0gIHsKLSAgICByZXR1cm4gVURESUZyYW1lTmFtZXMuQ0FURUdPUklFU19XT1JLQVJFQTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgZ2V0TGlua0FjdGlvblRhcmdldCgpCi0gIHsKLSAgICByZXR1cm4gVURESUZyYW1lTmFtZXMuQ0FURUdPUklFU19XT1JLQVJFQTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIGluaXRUb29scygpCi0gIHsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL0RldGFpbHNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvRGV0YWlsc1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTFkNmM1Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvRGV0YWlsc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5TZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgRGV0YWlsc1Rvb2wgZXh0ZW5kcyBGb3JtVG9vbAotewotICBwcml2YXRlIFN0cmluZyBmb3JtTGlua187Ci0KLSAgcHVibGljIERldGFpbHNUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLFN0cmluZyBhbHQsU3RyaW5nIGZvcm1MaW5rKQotICB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsImltYWdlcy9kZXRhaWxzX2VuYWJsZWQuZ2lmIiwiaW1hZ2VzL2RldGFpbHNfaGlnaGxpZ2h0ZWQuZ2lmIixhbHQpOwotICAgIGZvcm1MaW5rXyA9IGZvcm1MaW5rOwotICB9Ci0KLSAgcHVibGljIHZvaWQgaW5pdERlZmF1bHRQcm9wZXJ0aWVzKCkKLSAgewotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpCi0gIHsKLSAgICBOb2RlIG5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgIHJldHVybiBTZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGUuZ2V0Tm9kZUlkKCksdG9vbElkXyxub2RlLmdldFZpZXdJZCgpLG5vZGUuZ2V0Vmlld1Rvb2xJZCgpLGZvckhpc3RvcnkpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRGb3JtTGluaygpCi0gIHsKLSAgICByZXR1cm4gZm9ybUxpbmtfOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgY29weUluZGV4VmVjdG9yKFZlY3RvciBzb3VyY2UsVmVjdG9yIGRlc3RpbmF0aW9uKQotICB7Ci0gICAgZGVzdGluYXRpb24ucmVtb3ZlQWxsRWxlbWVudHMoKTsKLSAgICBmb3IgKGludCBpPTA7aTxzb3VyY2Uuc2l6ZSgpO2krKykKLSAgICB7Ci0gICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IG5ldyBMaXN0RWxlbWVudChzb3VyY2UuZWxlbWVudEF0KGkpKTsKLSAgICAgIGxpc3RFbGVtZW50LnNldFZpZXdJZChpKTsKLSAgICAgIC8vIFRoZSBuZXh0IGl0ZW0gaW5kaWNhdGVzIHRoYXQgdGhpcyBlbGVtZW50IGlzIHRvIGJlIGluIG5vbi1lZGl0IHN0YXRlLgotICAgICAgbGlzdEVsZW1lbnQuc2V0VGFyZ2V0Vmlld1Rvb2xJbmZvKC0xLC0xLGkpOwotICAgICAgZGVzdGluYXRpb24uYWRkRWxlbWVudChsaXN0RWxlbWVudCk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgYWRkQXV0aGVudGljYXRpb25Qcm9wZXJ0aWVzKFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50KQotICB7Ci0gICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSByZWdFbGVtZW50LmdldFB1Ymxpc2hVUkwoKTsKLSAgICBTdHJpbmcgdXNlcklkID0gcmVnRWxlbWVudC5nZXRVc2VySWQoKTsKLSAgICBTdHJpbmcgcGFzc3dvcmQgPSByZWdFbGVtZW50LmdldENyZWQoKTsKLQotICAgIGlmIChwdWJsaXNoVVJMID09IG51bGwpCi0gICAgICBwdWJsaXNoVVJMID0gIiI7Ci0gICAgaWYgKHVzZXJJZCA9PSBudWxsKQotICAgICAgdXNlcklkID0gIiI7Ci0gICAgaWYgKHBhc3N3b3JkID09IG51bGwpCi0gICAgICBwYXNzd29yZCA9ICIiOwotCi0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCxwdWJsaXNoVVJMKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCx1c2VySWQpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQscGFzc3dvcmQpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvR2V0QnVzaW5lc3Nlc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9HZXRCdXNpbmVzc2VzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDg5MTE1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9HZXRCdXNpbmVzc2VzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQWN0aW9uVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5TZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIEdldEJ1c2luZXNzZXNUb29sIGV4dGVuZHMgQWN0aW9uVG9vbAotewotICBwcml2YXRlIFN0cmluZyBhY3Rpb25MaW5rXzsKLSAgcHVibGljIEdldEJ1c2luZXNzZXNUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLFN0cmluZyBlbmFibGVkSW1hZ2VQYXRoLFN0cmluZyBoaWdobGlnaHRlZEltYWdlUGF0aCxTdHJpbmcgYWx0LFN0cmluZyBhY3Rpb25MaW5rKQotICB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsZW5hYmxlZEltYWdlUGF0aCxoaWdobGlnaHRlZEltYWdlUGF0aCxhbHQpOwotICAgIGFjdGlvbkxpbmtfID0gYWN0aW9uTGluazsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KQotICB7Ci0gICAgTm9kZSBub2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICByZXR1cm4gU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlLmdldE5vZGVJZCgpLHRvb2xJZF8sbm9kZS5nZXRWaWV3SWQoKSxub2RlLmdldFZpZXdUb29sSWQoKSxmb3JIaXN0b3J5KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0QWN0aW9uTGluaygpCi0gIHsKLSAgICByZXR1cm4gYWN0aW9uTGlua187Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9HZXRTZXJ2aWNlSW50ZXJmYWNlc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9HZXRTZXJ2aWNlSW50ZXJmYWNlc1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjcxZjQ4YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvR2V0U2VydmljZUludGVyZmFjZXNUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5BY3Rpb25Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLlNlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgR2V0U2VydmljZUludGVyZmFjZXNUb29sIGV4dGVuZHMgQWN0aW9uVG9vbAotewotICBwcml2YXRlIFN0cmluZyBhY3Rpb25MaW5rXzsKLSAgcHVibGljIEdldFNlcnZpY2VJbnRlcmZhY2VzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlcixTdHJpbmcgYWx0LFN0cmluZyBhY3Rpb25MaW5rKQotICB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsInVkZGkvaW1hZ2VzL3NlcnZpY2VfaW50ZXJmYWNlc19jbG9zZWRfZW5hYmxlZC5naWYiLCJ1ZGRpL2ltYWdlcy9zZXJ2aWNlX2ludGVyZmFjZXNfY2xvc2VkX2hpZ2hsaWdodGVkLmdpZiIsYWx0KTsKLSAgICBhY3Rpb25MaW5rXyA9IGFjdGlvbkxpbms7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgewotICAgIE5vZGUgbm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgcmV0dXJuIFNlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZS5nZXROb2RlSWQoKSx0b29sSWRfLG5vZGUuZ2V0Vmlld0lkKCksbm9kZS5nZXRWaWV3VG9vbElkKCksZm9ySGlzdG9yeSk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoKQotICB7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmtfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvR2V0U2VydmljZXNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvR2V0U2VydmljZXNUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlNTY4NjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL0dldFNlcnZpY2VzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQWN0aW9uVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5TZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIEdldFNlcnZpY2VzVG9vbCBleHRlbmRzIEFjdGlvblRvb2wKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgYWN0aW9uTGlua187Ci0gIHB1YmxpYyBHZXRTZXJ2aWNlc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsU3RyaW5nIGFsdCxTdHJpbmcgYWN0aW9uTGluaykKLSAgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCJ1ZGRpL2ltYWdlcy9zZXJ2aWNlc19jbG9zZWRfZW5hYmxlZC5naWYiLCJ1ZGRpL2ltYWdlcy9zZXJ2aWNlc19jbG9zZWRfaGlnaGxpZ2h0ZWQuZ2lmIixhbHQpOwotICAgIGFjdGlvbkxpbmtfID0gYWN0aW9uTGluazsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KQotICB7Ci0gICAgTm9kZSBub2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICByZXR1cm4gU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlLmdldE5vZGVJZCgpLHRvb2xJZF8sbm9kZS5nZXRWaWV3SWQoKSxub2RlLmdldFZpZXdUb29sSWQoKSxmb3JIaXN0b3J5KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0QWN0aW9uTGluaygpCi0gIHsKLSAgICByZXR1cm4gYWN0aW9uTGlua187Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9JdGVtc1N1bW1hcnlUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvSXRlbXNTdW1tYXJ5VG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODA3YjhiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9JdGVtc1N1bW1hcnlUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLlByb3h5TG9hZFBhZ2VBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLlNlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlVSTFV0aWxzOwotCi1wdWJsaWMgY2xhc3MgSXRlbXNTdW1tYXJ5VG9vbCBleHRlbmRzIEZvcm1Ub29sCi17Ci0gIHByaXZhdGUgU3RyaW5nIGZvcm1MaW5rXzsKLQotICBwdWJsaWMgSXRlbXNTdW1tYXJ5VG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlcixTdHJpbmcgZW5hYmxlZEltYWdlLFN0cmluZyBoaWdobGlnaHRlZEltYWdlLFN0cmluZyBhbHQsaW50IHF1ZXJ5SXRlbSkKLSAgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLGVuYWJsZWRJbWFnZSxoaWdobGlnaHRlZEltYWdlLGFsdCk7Ci0gICAgU3RyaW5nQnVmZmVyIGZvcm1MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigidWRkaS9mb3Jtcy9JdGVtc1N1bW1hcnlGb3JtLmpzcD8iKTsKLSAgICBmb3JtTGluay5hcHBlbmQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNKS5hcHBlbmQoJz0nKS5hcHBlbmQocXVlcnlJdGVtKTsKLQlTdHJpbmcgZW5jb2RlZEZvcm1MaW5rID0gVVJMVXRpbHMuZW5jb2RlKGZvcm1MaW5rLnRvU3RyaW5nKCkpOwotICAgIGZvcm1MaW5rXyA9IFByb3h5TG9hZFBhZ2VBY3Rpb24uZ2V0QWN0aW9uTGluayhlbmNvZGVkRm9ybUxpbmspOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgaW5pdERlZmF1bHRQcm9wZXJ0aWVzKCkKLSAgewotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpCi0gIHsKLSAgICBOb2RlIG5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgIHJldHVybiBTZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGUuZ2V0Tm9kZUlkKCksdG9vbElkXyxub2RlLmdldFZpZXdJZCgpLG5vZGUuZ2V0Vmlld1Rvb2xJZCgpLGZvckhpc3RvcnkpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRGb3JtTGluaygpCi0gIHsKLSAgICByZXR1cm4gZm9ybUxpbmtfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvTG9naW5Ub29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvTG9naW5Ub29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzNmIyNTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL0xvZ2luVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyNyAgIDEzNjQ0OSBicnVuc3NlbkB1cy5pYm0uY29tIC0gVmluY2UgQnJ1bnNzZW4gIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLkZhdm9yaXRlc01vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuRmF2b3JpdGVzUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5TZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIExvZ2luVG9vbCBleHRlbmRzIEZvcm1Ub29sCi17Ci0gIHByaXZhdGUgQ29udHJvbGxlciBjb250cm9sbGVyXzsKLSAgcHJpdmF0ZSBTdHJpbmcgZm9ybUxpbmsgPSAidWRkaS9mb3Jtcy9Mb2dpblVkZGlGb3JtLmpzcCI7Ci0gIAotICBwdWJsaWMgTG9naW5Ub29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KQotICB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsInVkZGkvaW1hZ2VzL29wZW5fcmVnaXN0cnlfZW5hYmxlZC5naWYiLCJ1ZGRpL2ltYWdlcy9vcGVuX3JlZ2lzdHJ5X2hpZ2hsaWdodGVkLmdpZiIsYWx0KTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIGluaXREZWZhdWx0UHJvcGVydGllcygpCi0gIHsKLSAgICBjb250cm9sbGVyXyA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCkuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRDb250cm9sbGVyKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgewotICAgIE5vZGUgbm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgcmV0dXJuIFNlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZS5nZXROb2RlSWQoKSx0b29sSWRfLG5vZGUuZ2V0Vmlld0lkKCksbm9kZS5nZXRWaWV3VG9vbElkKCksZm9ySGlzdG9yeSk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEZvcm1MaW5rKCkKLSAgewotICAgIHJldHVybiBmb3JtTGluazsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0VG9Mb2dvdXRMaW5rKCkgCi0gIHsKLSAgCWZvcm1MaW5rID0gInVkZGkvYWN0aW9ucy9Mb2dvdXRBZHZhbmNlZEFjdGlvbkpTUC5qc3AiOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRUb1JlZ2lzdHJ5TGluaygpIAotICB7Ci0gIAlmb3JtTGluayA9ICIiOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgRW51bWVyYXRpb24gZ2V0RmF2b3JpdGVSZWdpc3RyeUVsZW1lbnRzKCkKLSAgewotICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlTWFuYWdlciBmYXZvcml0ZXNOb2RlTWFuYWdlciA9IGZhdlBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgVHJlZUVsZW1lbnQgZmF2b3JpdGVzTWFpbkVsZW1lbnQgPSBmYXZvcml0ZXNOb2RlTWFuYWdlci5nZXRSb290Tm9kZSgpLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgVHJlZUVsZW1lbnQgZmF2b3JpdGVSZWdpc3RyaWVzRWxlbWVudCA9IChUcmVlRWxlbWVudCkoZmF2b3JpdGVzTWFpbkVsZW1lbnQuZ2V0RWxlbWVudHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfUkVHSVNUUllfRk9MREVSX05PREUpLm5leHRFbGVtZW50KCkpOwotICAgIHJldHVybiBmYXZvcml0ZVJlZ2lzdHJpZXNFbGVtZW50LmdldEVsZW1lbnRzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1JFR0lTVFJZX05PREUpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvTWFuYWdlUHVibGlzaGVyQXNzZXJ0aW9uc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9NYW5hZ2VQdWJsaXNoZXJBc3NlcnRpb25zVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDU3ZDFlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9NYW5hZ2VQdWJsaXNoZXJBc3NlcnRpb25zVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuUHJveHlMb2FkUGFnZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5TZWxlY3RGaW5kVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgTWFuYWdlUHVibGlzaGVyQXNzZXJ0aW9uc1Rvb2wgZXh0ZW5kcyBGb3JtVG9vbCBpbXBsZW1lbnRzIE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlCi17Ci0gIFRvb2xNYW5hZ2VyIGludmlzaWJsZVRvb2xNYW5hZ2VyXzsKLSAgcHJpdmF0ZSBSZWdGaW5kVG9vbCByZWdGaW5kVG9vbF87Ci0KLSAgcHVibGljIE1hbmFnZVB1Ymxpc2hlckFzc2VydGlvbnNUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KQotICB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsICJ1ZGRpL2ltYWdlcy9wdWJsaXNoZXJfYXNzZXJ0aW9uc19lbmFibGVkLmdpZiIsICJ1ZGRpL2ltYWdlcy9wdWJsaXNoZXJfYXNzZXJ0aW9uc19oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIGludmlzaWJsZVRvb2xNYW5hZ2VyXyA9IG5ldyBUb29sTWFuYWdlcih0b29sTWFuYWdlci5nZXROb2RlKCkpOwotICAgIHJlZ0ZpbmRUb29sXyA9IG5ldyBSZWdGaW5kVG9vbChpbnZpc2libGVUb29sTWFuYWdlcl8sIiIpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgaW5pdERlZmF1bHRQcm9wZXJ0aWVzKCkKLSAgewotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZLCIiKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU0sU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVMpKTsKLSAgICBTdHJpbmcgc2ltcGxlU3R5bGVTdHJpbmcgPSBTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NJTVBMRSk7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9CVVNJTkVTU0VTLHNpbXBsZVN0eWxlU3RyaW5nKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VTLHNpbXBsZVN0eWxlU3RyaW5nKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VfSU5URVJGQUNFUyxzaW1wbGVTdHlsZVN0cmluZyk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGdldEZvcm1Ub29sUHJvcGVydGllcyhPYmplY3Qgc3ViUXVlcnlLZXlPYmplY3QpCi0gIHsKLSAgICAvLyBFbXB0eS9Ob24tZXhpc3RlbnQgc3VicXVlcnlrZXkgaW1wbGllcyBwdWJsaXNoIGZvcm0uIEFsbCBlbHNlIGltcGxpZXMgcXVlcnkgZm9ybS4KLSAgICBTdHJpbmcgc3ViUXVlcnlLZXkgPSAoU3RyaW5nKXN1YlF1ZXJ5S2V5T2JqZWN0OwotICAgIGlmIChzdWJRdWVyeUtleSA9PSBudWxsIHx8IHN1YlF1ZXJ5S2V5Lmxlbmd0aCgpIDwgMSkKLSAgICAgIHJldHVybiB0aGlzOwotICAgIGVsc2UKLSAgICAgIHJldHVybiByZWdGaW5kVG9vbF8uZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHN1YlF1ZXJ5S2V5T2JqZWN0KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KQotICB7Ci0gICAgTm9kZSBub2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICBTdHJpbmcgc3ViUXVlcnlLZXkgPSAoU3RyaW5nKWdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZKTsKLSAgICByZXR1cm4gU2VsZWN0RmluZFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlLmdldE5vZGVJZCgpLHRvb2xJZF8sbm9kZS5nZXRWaWV3SWQoKSxub2RlLmdldFZpZXdUb29sSWQoKSxzdWJRdWVyeUtleSxmb3JIaXN0b3J5KTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGFkZEF1dGhlbnRpY2F0aW9uUHJvcGVydGllcyhSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCkKLSAgewotICAgIFN0cmluZyBwdWJsaXNoVVJMID0gcmVnRWxlbWVudC5nZXRQdWJsaXNoVVJMKCk7Ci0gICAgU3RyaW5nIHVzZXJJZCA9IHJlZ0VsZW1lbnQuZ2V0VXNlcklkKCk7Ci0gICAgU3RyaW5nIHBhc3N3b3JkID0gcmVnRWxlbWVudC5nZXRDcmVkKCk7Ci0KLSAgICBpZiAocHVibGlzaFVSTCA9PSBudWxsKQotICAgICAgcHVibGlzaFVSTCA9ICIiOwotICAgIGlmICh1c2VySWQgPT0gbnVsbCkKLSAgICAgIHVzZXJJZCA9ICIiOwotICAgIGlmIChwYXNzd29yZCA9PSBudWxsKQotICAgICAgcGFzc3dvcmQgPSAiIjsKLQotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwscHVibGlzaFVSTCk7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQsdXNlcklkKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JELHBhc3N3b3JkKTsKLSAgICByZWdGaW5kVG9vbF8uYWRkQXV0aGVudGljYXRpb25Qcm9wZXJ0aWVzKHJlZ0VsZW1lbnQpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRGb3JtTGluaygpCi0gIHsKLSAgICBPYmplY3Qgc3ViUXVlcnlLZXlPYmplY3QgPSBnZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSk7Ci0gICAgU3RyaW5nIHN1YlF1ZXJ5S2V5ID0gbnVsbDsKLSAgICBpZiAoc3ViUXVlcnlLZXlPYmplY3QgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBnZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJJRVNfUFJPUEVSVElFUyk7Ci0gICAgICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2Ugc3ViUXVlcnlQcm9wZXJ0aWVzID0gZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHN1YlF1ZXJ5S2V5T2JqZWN0KTsKLSAgICAgIE9iamVjdCBzdWJRdWVyeUdldE9iamVjdCA9IHN1YlF1ZXJ5UHJvcGVydGllcy5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0dFVCk7Ci0gICAgICBpZiAoc3ViUXVlcnlHZXRPYmplY3QgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgYm9vbGVhbiBpc1N1YlF1ZXJ5R2V0ID0gKChCb29sZWFuKXN1YlF1ZXJ5R2V0T2JqZWN0KS5ib29sZWFuVmFsdWUoKTsKLSAgICAgICAgaWYgKGlzU3ViUXVlcnlHZXQpCi0gICAgICAgICAgcmV0dXJuICJ1ZGRpL2Zvcm1zL0dldEZvcm0uanNwIjsKLSAgICAgIH0KLSAgICAgIHN1YlF1ZXJ5S2V5ID0gKFN0cmluZylzdWJRdWVyeUtleU9iamVjdDsKLSAgICB9Ci0KLSAgICBpZiAoc3ViUXVlcnlLZXkgPT0gbnVsbCB8fCBzdWJRdWVyeUtleS5sZW5ndGgoKSA8IDEpCi0gICAgICByZXR1cm4gUHJveHlMb2FkUGFnZUFjdGlvbi5nZXRBY3Rpb25MaW5rKCJ1ZGRpL2Zvcm1zL01hbmFnZVB1Ymxpc2hlckFzc2VydGlvbnNGb3JtLmpzcCIpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiByZWdGaW5kVG9vbF8uZ2V0Rm9ybUxpbmsoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL01hbmFnZVJlZmVyZW5jZWRTZXJ2aWNlc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9NYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliNzg5ZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL01hbmFnZVJlZmVyZW5jZWRTZXJ2aWNlc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLlNlbGVjdEZpbmRUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBNYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNUb29sIGV4dGVuZHMgRm9ybVRvb2wgaW1wbGVtZW50cyBNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZQotewotICBUb29sTWFuYWdlciBpbnZpc2libGVUb29sTWFuYWdlcl87Ci0gIHByaXZhdGUgUmVnRmluZFRvb2wgcmVnRmluZFRvb2xfOwotCi0gIHB1YmxpYyBNYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KQotICB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsICJ1ZGRpL2ltYWdlcy9yZWZlcmVuY2VkX3NlcnZpY2VzX2VuYWJsZWQuZ2lmIiwgInVkZGkvaW1hZ2VzL3JlZmVyZW5jZWRfc2VydmljZXNfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICBpbnZpc2libGVUb29sTWFuYWdlcl8gPSBuZXcgVG9vbE1hbmFnZXIodG9vbE1hbmFnZXIuZ2V0Tm9kZSgpKTsKLSAgICByZWdGaW5kVG9vbF8gPSBuZXcgUmVnRmluZFRvb2woaW52aXNpYmxlVG9vbE1hbmFnZXJfLCIiKTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIGluaXREZWZhdWx0UHJvcGVydGllcygpCi0gIHsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSwiIik7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUykpOwotICAgIFN0cmluZyBzaW1wbGVTdHlsZVN0cmluZyA9IFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0lNUExFKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0JVU0lORVNTRVMsc2ltcGxlU3R5bGVTdHJpbmcpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRVMsc2ltcGxlU3R5bGVTdHJpbmcpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRV9JTlRFUkZBQ0VTLHNpbXBsZVN0eWxlU3RyaW5nKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKE9iamVjdCBzdWJRdWVyeUtleU9iamVjdCkKLSAgewotICAgIC8vIEVtcHR5L05vbi1leGlzdGVudCBzdWJxdWVyeWtleSBpbXBsaWVzIHB1Ymxpc2ggZm9ybS4gQWxsIGVsc2UgaW1wbGllcyBxdWVyeSBmb3JtLgotICAgIFN0cmluZyBzdWJRdWVyeUtleSA9IChTdHJpbmcpc3ViUXVlcnlLZXlPYmplY3Q7Ci0gICAgaWYgKHN1YlF1ZXJ5S2V5ID09IG51bGwgfHwgc3ViUXVlcnlLZXkubGVuZ3RoKCkgPCAxKQotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIHJlZ0ZpbmRUb29sXy5nZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXlPYmplY3QpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpCi0gIHsKLSAgICBOb2RlIG5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgIFN0cmluZyBzdWJRdWVyeUtleSA9IChTdHJpbmcpZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVkpOwotICAgIHJldHVybiBTZWxlY3RGaW5kVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGUuZ2V0Tm9kZUlkKCksdG9vbElkXyxub2RlLmdldFZpZXdJZCgpLG5vZGUuZ2V0Vmlld1Rvb2xJZCgpLHN1YlF1ZXJ5S2V5LGZvckhpc3RvcnkpOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgdm9pZCBhZGRBdXRoZW50aWNhdGlvblByb3BlcnRpZXMoUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQpCi0gIHsKLSAgICBTdHJpbmcgcHVibGlzaFVSTCA9IHJlZ0VsZW1lbnQuZ2V0UHVibGlzaFVSTCgpOwotICAgIFN0cmluZyB1c2VySWQgPSByZWdFbGVtZW50LmdldFVzZXJJZCgpOwotICAgIFN0cmluZyBwYXNzd29yZCA9IHJlZ0VsZW1lbnQuZ2V0Q3JlZCgpOwotICAgIAotICAgIGlmIChwdWJsaXNoVVJMID09IG51bGwpCi0gICAgICBwdWJsaXNoVVJMID0gIiI7Ci0gICAgaWYgKHVzZXJJZCA9PSBudWxsKQotICAgICAgdXNlcklkID0gIiI7Ci0gICAgaWYgKHBhc3N3b3JkID09IG51bGwpCi0gICAgICBwYXNzd29yZCA9ICIiOwotICAgICAgCi0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCxwdWJsaXNoVVJMKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCx1c2VySWQpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQscGFzc3dvcmQpOwotICAgIHJlZ0ZpbmRUb29sXy5hZGRBdXRoZW50aWNhdGlvblByb3BlcnRpZXMocmVnRWxlbWVudCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEZvcm1MaW5rKCkKLSAgewotICAgIE9iamVjdCBzdWJRdWVyeUtleU9iamVjdCA9IGdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZKTsKLSAgICBTdHJpbmcgc3ViUXVlcnlLZXkgPSBudWxsOwotICAgIGlmIChzdWJRdWVyeUtleU9iamVjdCAhPSBudWxsKQotICAgIHsKLSAgICAgIGdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUklFU19QUk9QRVJUSUVTKTsKLSAgICAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBzdWJRdWVyeVByb3BlcnRpZXMgPSBnZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXlPYmplY3QpOwotICAgICAgT2JqZWN0IHN1YlF1ZXJ5R2V0T2JqZWN0ID0gc3ViUXVlcnlQcm9wZXJ0aWVzLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfR0VUKTsKLSAgICAgIGlmIChzdWJRdWVyeUdldE9iamVjdCAhPSBudWxsKQotICAgICAgewotICAgICAgICBib29sZWFuIGlzU3ViUXVlcnlHZXQgPSAoKEJvb2xlYW4pc3ViUXVlcnlHZXRPYmplY3QpLmJvb2xlYW5WYWx1ZSgpOwotICAgICAgICBpZiAoaXNTdWJRdWVyeUdldCkKLSAgICAgICAgICByZXR1cm4gInVkZGkvZm9ybXMvR2V0Rm9ybS5qc3AiOwotICAgICAgfQotICAgICAgc3ViUXVlcnlLZXkgPSAoU3RyaW5nKXN1YlF1ZXJ5S2V5T2JqZWN0OwotICAgIH0KLQotICAgIGlmIChzdWJRdWVyeUtleSA9PSBudWxsIHx8IHN1YlF1ZXJ5S2V5Lmxlbmd0aCgpIDwgMSkKLSAgICAgIHJldHVybiAidWRkaS9mb3Jtcy9NYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNGb3JtLmpzcCI7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIHJlZ0ZpbmRUb29sXy5nZXRGb3JtTGluaygpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9NdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTBjODg3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9NdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotCi1wdWJsaWMgYWJzdHJhY3QgaW50ZXJmYWNlIE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlCi17Ci0gIHB1YmxpYyBhYnN0cmFjdCBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKE9iamVjdCBrZXkpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL09wZW5SZWdpc3RyeVRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9PcGVuUmVnaXN0cnlUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmMzBjOTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL09wZW5SZWdpc3RyeVRvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIyNCAgIDEyMjc1MiBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy5GYXZvcml0ZXNNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLkZhdm9yaXRlc1BlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci0KLXB1YmxpYyBjbGFzcyBPcGVuUmVnaXN0cnlUb29sIGV4dGVuZHMgRm9ybVRvb2wKLXsKLSAgcHJpdmF0ZSBDb250cm9sbGVyIGNvbnRyb2xsZXJfOwotICAKLSAgcHVibGljIE9wZW5SZWdpc3RyeVRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsU3RyaW5nIGFsdCkKLSAgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCJ1ZGRpL2ltYWdlcy9vcGVuX3JlZ2lzdHJ5X2VuYWJsZWQuZ2lmIiwidWRkaS9pbWFnZXMvb3Blbl9yZWdpc3RyeV9oaWdobGlnaHRlZC5naWYiLGFsdCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBpbml0RGVmYXVsdFByb3BlcnRpZXMoKQotICB7Ci0gICAgY29udHJvbGxlcl8gPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Q29udHJvbGxlcigpOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlJFR0lTVFJZX05BTUUsdWRkaVBlcnNwZWN0aXZlLmdldERlZmF1bHRVRERJUmVnaXN0cnkoKS5nZXROYW1lKCkpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuSU5RVUlSWV9VUkwsdWRkaVBlcnNwZWN0aXZlLmdldERlZmF1bHRVRERJUmVnaXN0cnkoKS5nZXRJbnF1aXJ5VVJMKCkpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpCi0gIHsKLSAgICBOb2RlIG5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgIHJldHVybiBTZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGUuZ2V0Tm9kZUlkKCksdG9vbElkXyxub2RlLmdldFZpZXdJZCgpLG5vZGUuZ2V0Vmlld1Rvb2xJZCgpLGZvckhpc3RvcnkpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRGb3JtTGluaygpCi0gIHsKLSAgICByZXR1cm4gInVkZGkvZm9ybXMvT3BlblJlZ2lzdHJ5Rm9ybS5qc3AiOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgRW51bWVyYXRpb24gZ2V0RmF2b3JpdGVSZWdpc3RyeUVsZW1lbnRzKCkKLSAgewotICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlTWFuYWdlciBmYXZvcml0ZXNOb2RlTWFuYWdlciA9IGZhdlBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgVHJlZUVsZW1lbnQgZmF2b3JpdGVzTWFpbkVsZW1lbnQgPSBmYXZvcml0ZXNOb2RlTWFuYWdlci5nZXRSb290Tm9kZSgpLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgVHJlZUVsZW1lbnQgZmF2b3JpdGVSZWdpc3RyaWVzRWxlbWVudCA9IChUcmVlRWxlbWVudCkoZmF2b3JpdGVzTWFpbkVsZW1lbnQuZ2V0RWxlbWVudHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfUkVHSVNUUllfRk9MREVSX05PREUpLm5leHRFbGVtZW50KCkpOwotICAgIHJldHVybiBmYXZvcml0ZVJlZ2lzdHJpZXNFbGVtZW50LmdldEVsZW1lbnRzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1JFR0lTVFJZX05PREUpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvUHVibGlzaGVkSXRlbXNOb2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvUHVibGlzaGVkSXRlbXNOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5OTA0ZWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1B1Ymxpc2hlZEl0ZW1zTm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbEFkZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsUmVtb3ZlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUHVibGlzaGVkSXRlbXNFbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgUHVibGlzaGVkSXRlbXNOb2RlIGV4dGVuZHMgVURESU5hdmlnYXRvckZvbGRlck5vZGUKLXsKLSAgcHVibGljIFB1Ymxpc2hlZEl0ZW1zTm9kZShUcmVlRWxlbWVudCBlbGVtZW50LE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyLGludCBub2RlRGVwdGgpCi0gIHsKLSAgICBzdXBlcihlbGVtZW50LG5vZGVNYW5hZ2VyLG5vZGVEZXB0aCk7Ci0gICAgZWxlbWVudC5hZGRMaXN0ZW5lcihuZXcgRWxlbWVudEFkYXB0ZXIoKQotICAgIHsKLSAgICAgIHB1YmxpYyB2b2lkIHJlbEFkZGVkKFJlbEFkZEV2ZW50IGV2ZW50KQotICAgICAgewotICAgICAgICBTdHJpbmcgcmVsID0gZXZlbnQuZ2V0T3V0Qm91bmRSZWxOYW1lKCk7Ci0gICAgICAgIGlmIChyZWwuZXF1YWxzKFVERElNb2RlbENvbnN0YW50cy5SRUxfUFVCTElTSEVEX0lURU1TKSkKLSAgICAgICAgewotICAgICAgICAgIFRyZWVFbGVtZW50IHRyZWVFbGVtZW50ID0gKFRyZWVFbGVtZW50KWV2ZW50LmdldFBhcmVudEVsZW1lbnQoKTsKLSAgICAgICAgICBjcmVhdGVDaGlsZE5vZGUodHJlZUVsZW1lbnQpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyB2b2lkIHJlbFJlbW92ZWQoUmVsUmVtb3ZlRXZlbnQgZXZlbnQpCi0gICAgICB7Ci0gICAgICAgIFRyZWVFbGVtZW50IHRyZWVFbGVtZW50ID0gbnVsbDsKLSAgICAgICAgaWYgKGV2ZW50LmdldEluQm91bmRSZWxOYW1lKCkuZXF1YWxzKFVERElNb2RlbENvbnN0YW50cy5SRUxfUFVCTElTSEVEX0lURU1TKSkKLSAgICAgICAgICB0cmVlRWxlbWVudCA9IChUcmVlRWxlbWVudClldmVudC5nZXRJbmJvdW5kRWxlbWVudCgpOwotICAgICAgICBlbHNlIGlmIChldmVudC5nZXRPdXRCb3VuZFJlbE5hbWUoKS5lcXVhbHMoVURESU1vZGVsQ29uc3RhbnRzLlJFTF9QVUJMSVNIRURfSVRFTVMpKQotICAgICAgICAgIHRyZWVFbGVtZW50ID0gKFRyZWVFbGVtZW50KWV2ZW50LmdldE91dEJvdW5kRWxlbWVudCgpOwotCi0gICAgICAgIGlmICh0cmVlRWxlbWVudCAhPSBudWxsKQotICAgICAgICAgIHJlbW92ZUNoaWxkTm9kZSh0cmVlRWxlbWVudCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIHZvaWQgY3JlYXRlQ2hpbGROb2RlKFRyZWVFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBQdWJsaXNoZWRJdGVtc0VsZW1lbnQgcHVibGlzaGVkSXRlbXNFbGVtZW50ID0gKFB1Ymxpc2hlZEl0ZW1zRWxlbWVudCllbGVtZW50XzsKLSAgICBOb2RlIGNoaWxkTm9kZSA9IG51bGw7Ci0gICAgc3dpdGNoIChwdWJsaXNoZWRJdGVtc0VsZW1lbnQuZ2V0VHlwZSgpKQotICAgIHsKLSAgICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVM6Ci0gICAgICAgIGNoaWxkTm9kZSA9IG5ldyBCdXNpbmVzc05vZGUoZWxlbWVudCxub2RlTWFuYWdlcl8sbm9kZURlcHRoXysxKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUzoKLSAgICAgICAgY2hpbGROb2RlID0gbmV3IFNlcnZpY2VOb2RlKGVsZW1lbnQsbm9kZU1hbmFnZXJfLG5vZGVEZXB0aF8rMSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTOgotICAgICAgICBjaGlsZE5vZGUgPSBuZXcgU2VydmljZUludGVyZmFjZU5vZGUoZWxlbWVudCxub2RlTWFuYWdlcl8sbm9kZURlcHRoXysxKTsKLSAgICB9Ci0gICAgaWYgKGNoaWxkTm9kZSAhPSBudWxsKQotICAgICAgYWRkQ2hpbGQoY2hpbGROb2RlKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgaW5pdFRvb2xzKCkKLSAgewotICAgIFB1Ymxpc2hlZEl0ZW1zRWxlbWVudCBwdWJsaXNoZWRJdGVtc0VsZW1lbnQgPSAoUHVibGlzaGVkSXRlbXNFbGVtZW50KWVsZW1lbnRfOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIGludCBwdWJsaXNoZWRJdGVtc1R5cGUgPSBwdWJsaXNoZWRJdGVtc0VsZW1lbnQuZ2V0VHlwZSgpOwotICAgIHN3aXRjaCAocHVibGlzaGVkSXRlbXNUeXBlKQotICAgIHsKLSAgICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVM6Ci0gICAgICAgIG5ldyBJdGVtc1N1bW1hcnlUb29sKHRvb2xNYW5hZ2VyXywidWRkaS9pbWFnZXMvYnVzaW5lc3Nlc19jbG9zZWRfZW5hYmxlZC5naWYiLCJ1ZGRpL2ltYWdlcy9idXNpbmVzc2VzX2Nsb3NlZF9oaWdobGlnaHRlZC5naWYiLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfU1VNTUFSWV9CVVNJTkVTU0VTIikscHVibGlzaGVkSXRlbXNUeXBlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUzoKLSAgICAgICAgbmV3IEl0ZW1zU3VtbWFyeVRvb2wodG9vbE1hbmFnZXJfLCJ1ZGRpL2ltYWdlcy9zZXJ2aWNlc19jbG9zZWRfZW5hYmxlZC5naWYiLCJ1ZGRpL2ltYWdlcy9zZXJ2aWNlc19jbG9zZWRfaGlnaGxpZ2h0ZWQuZ2lmIix1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1NVTU1BUllfU0VSVklDRVMiKSxwdWJsaXNoZWRJdGVtc1R5cGUpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUzoKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIG5ldyBJdGVtc1N1bW1hcnlUb29sKHRvb2xNYW5hZ2VyXywidWRkaS9pbWFnZXMvc2VydmljZV9pbnRlcmZhY2VzX2Nsb3NlZF9lbmFibGVkLmdpZiIsInVkZGkvaW1hZ2VzL3NlcnZpY2VfaW50ZXJmYWNlc19jbG9zZWRfaGlnaGxpZ2h0ZWQuZ2lmIix1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1NVTU1BUllfU0VSVklDRV9JTlRFUkZBQ0VTIikscHVibGlzaGVkSXRlbXNUeXBlKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0T3BlbkltYWdlUGF0aCgpCi0gIHsKLSAgICBQdWJsaXNoZWRJdGVtc0VsZW1lbnQgcHVibGlzaGVkSXRlbXNFbGVtZW50ID0gKFB1Ymxpc2hlZEl0ZW1zRWxlbWVudCllbGVtZW50XzsKLSAgICBpbnQgcHVibGlzaGVkSXRlbXNUeXBlID0gcHVibGlzaGVkSXRlbXNFbGVtZW50LmdldFR5cGUoKTsKLSAgICBzd2l0Y2ggKHB1Ymxpc2hlZEl0ZW1zVHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTOgotICAgICAgICByZXR1cm4gInVkZGkvaW1hZ2VzL2J1c2luZXNzZXNfb3Blbl9oaWdobGlnaHRlZC5naWYiOwotICAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVM6Ci0gICAgICAgIHJldHVybiAidWRkaS9pbWFnZXMvc2VydmljZXNfb3Blbl9oaWdobGlnaHRlZC5naWYiOwotICAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTOgotICAgICAgICByZXR1cm4gInVkZGkvaW1hZ2VzL3NlcnZpY2VfaW50ZXJmYWNlc19vcGVuX2hpZ2hsaWdodGVkLmdpZiI7Ci0gICAgfQotICAgIHJldHVybiBzdXBlci5nZXRPcGVuSW1hZ2VQYXRoKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q2xvc2VkSW1hZ2VQYXRoKCkKLSAgewotICAgIFB1Ymxpc2hlZEl0ZW1zRWxlbWVudCBwdWJsaXNoZWRJdGVtc0VsZW1lbnQgPSAoUHVibGlzaGVkSXRlbXNFbGVtZW50KWVsZW1lbnRfOwotICAgIGludCBwdWJsaXNoZWRJdGVtc1R5cGUgPSBwdWJsaXNoZWRJdGVtc0VsZW1lbnQuZ2V0VHlwZSgpOwotICAgIHN3aXRjaCAocHVibGlzaGVkSXRlbXNUeXBlKQotICAgIHsKLSAgICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVM6Ci0gICAgICAgIHJldHVybiAidWRkaS9pbWFnZXMvYnVzaW5lc3Nlc19jbG9zZWRfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTOgotICAgICAgICByZXR1cm4gInVkZGkvaW1hZ2VzL3NlcnZpY2VzX2Nsb3NlZF9oaWdobGlnaHRlZC5naWYiOwotICAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTOgotICAgICAgICByZXR1cm4gInVkZGkvaW1hZ2VzL3NlcnZpY2VfaW50ZXJmYWNlc19jbG9zZWRfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmdldENsb3NlZEltYWdlUGF0aCgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvUXVlcnlOb2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvUXVlcnlOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwMmI4Y2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1F1ZXJ5Tm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkVsZW1lbnRBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsQWRkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5SZWxSZW1vdmVFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLk1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLkZpbmRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuQnVzaW5lc3NFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlNlcnZpY2VFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5TZXJ2aWNlSW50ZXJmYWNlRWxlbWVudDsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJ1c2luZXNzLkJ1c2luZXNzRW50aXR5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuc2VydmljZS5CdXNpbmVzc1NlcnZpY2U7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsOwotCi1wdWJsaWMgY2xhc3MgUXVlcnlOb2RlIGV4dGVuZHMgVURESU5hdmlnYXRvck5vZGUKLXsKLSAgcHJpdmF0ZSBGb3JtVG9vbCByZWdGaW5kVG9vbF87Ci0gIHByaXZhdGUgRmluZEFjdGlvbiBmaW5kQWN0aW9uXzsKLSAgcHVibGljIFF1ZXJ5Tm9kZShUcmVlRWxlbWVudCBlbGVtZW50LE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyLGludCBub2RlRGVwdGgpCi0gIHsKLSAgICBzdXBlcihlbGVtZW50LG5vZGVNYW5hZ2VyLG5vZGVEZXB0aCwidWRkaS9pbWFnZXMvcXVlcnkuZ2lmIik7Ci0gICAgZWxlbWVudC5hZGRMaXN0ZW5lcihuZXcgRWxlbWVudEFkYXB0ZXIoKQotICAgIHsKLSAgICAgIHB1YmxpYyB2b2lkIHJlbEFkZGVkKFJlbEFkZEV2ZW50IGV2ZW50KQotICAgICAgewotICAgICAgICBTdHJpbmcgcmVsID0gZXZlbnQuZ2V0T3V0Qm91bmRSZWxOYW1lKCk7Ci0gICAgICAgIGlmIChyZWwuZXF1YWxzKFVERElNb2RlbENvbnN0YW50cy5SRUxfUVVFUllfUkVTVUxUUykpCi0gICAgICAgIHsKLSAgICAgICAgICBUcmVlRWxlbWVudCB0cmVlRWxlbWVudCA9IChUcmVlRWxlbWVudClldmVudC5nZXRQYXJlbnRFbGVtZW50KCk7Ci0gICAgICAgICAgY3JlYXRlQ2hpbGROb2RlKHRyZWVFbGVtZW50KTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBwdWJsaWMgdm9pZCByZWxSZW1vdmVkKFJlbFJlbW92ZUV2ZW50IGV2ZW50KQotICAgICAgewotICAgICAgICBUcmVlRWxlbWVudCB0cmVlRWxlbWVudCA9IG51bGw7Ci0gICAgICAgIGlmIChldmVudC5nZXRJbkJvdW5kUmVsTmFtZSgpLmVxdWFscyhVRERJTW9kZWxDb25zdGFudHMuUkVMX1FVRVJZX1JFU1VMVFMpKQotICAgICAgICAgIHRyZWVFbGVtZW50ID0gKFRyZWVFbGVtZW50KWV2ZW50LmdldEluYm91bmRFbGVtZW50KCk7Ci0gICAgICAgIGVsc2UgaWYgKGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpLmVxdWFscyhVRERJTW9kZWxDb25zdGFudHMuUkVMX1FVRVJZX1JFU1VMVFMpKQotICAgICAgICAgIHRyZWVFbGVtZW50ID0gKFRyZWVFbGVtZW50KWV2ZW50LmdldE91dEJvdW5kRWxlbWVudCgpOwotCi0gICAgICAgIGlmICh0cmVlRWxlbWVudCAhPSBudWxsKQotICAgICAgICAgIHJlbW92ZUNoaWxkTm9kZSh0cmVlRWxlbWVudCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gICAgY3JlYXRlQ2hpbGRyZW4oKTsKLSAgICBzZXRWaXNpYmlsaXR5T2ZDaGlsZHJlbihmYWxzZSk7Ci0gICAgZmluZEFjdGlvbl8gPSBudWxsOwotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIGNyZWF0ZUNoaWxkcmVuKCkKLSAgewotICAgIFZlY3RvciBpbml0aWFsUmVzdWx0cyA9IChWZWN0b3IpZWxlbWVudF8uZ2V0UHJvcGVydHlBc09iamVjdChVRERJTW9kZWxDb25zdGFudHMuSU5JVElBTF9SRVNVTFRTKTsKLSAgICBmb3IgKGludCBpPTA7aTxpbml0aWFsUmVzdWx0cy5zaXplKCk7aSsrKQotICAgIHsKLSAgICAgIE9iamVjdCBvYmplY3QgPSBpbml0aWFsUmVzdWx0cy5lbGVtZW50QXQoaSk7Ci0gICAgICBUcmVlRWxlbWVudCBjaGlsZEVsZW1lbnQgPSBudWxsOwotICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEJ1c2luZXNzRW50aXR5KQotICAgICAgICBjaGlsZEVsZW1lbnQgPSBuZXcgQnVzaW5lc3NFbGVtZW50KChCdXNpbmVzc0VudGl0eSlvYmplY3QsZWxlbWVudF8uZ2V0TW9kZWwoKSk7Ci0gICAgICBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBCdXNpbmVzc1NlcnZpY2UpCi0gICAgICAgIGNoaWxkRWxlbWVudCA9IG5ldyBTZXJ2aWNlRWxlbWVudCgoQnVzaW5lc3NTZXJ2aWNlKW9iamVjdCxlbGVtZW50Xy5nZXRNb2RlbCgpKTsKLSAgICAgIGVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFRNb2RlbCkKLSAgICAgICAgY2hpbGRFbGVtZW50ID0gbmV3IFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KChUTW9kZWwpb2JqZWN0LGVsZW1lbnRfLmdldE1vZGVsKCkpOwotICAgICAgaWYgKGNoaWxkRWxlbWVudCAhPSBudWxsKQotICAgICAgICBlbGVtZW50Xy5jb25uZWN0KGNoaWxkRWxlbWVudCxVRERJTW9kZWxDb25zdGFudHMuUkVMX1FVRVJZX1JFU1VMVFMsTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIHZvaWQgY3JlYXRlQ2hpbGROb2RlKFRyZWVFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBOb2RlIGNoaWxkTm9kZSA9IG51bGw7Ci0gICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBCdXNpbmVzc0VsZW1lbnQpCi0gICAgICBjaGlsZE5vZGUgPSBuZXcgQnVzaW5lc3NOb2RlKGVsZW1lbnQsbm9kZU1hbmFnZXJfLG5vZGVEZXB0aF8rMSk7Ci0gICAgZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFNlcnZpY2VFbGVtZW50KQotICAgICAgY2hpbGROb2RlID0gbmV3IFNlcnZpY2VOb2RlKGVsZW1lbnQsbm9kZU1hbmFnZXJfLG5vZGVEZXB0aF8rMSk7Ci0gICAgZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KQotICAgICAgY2hpbGROb2RlID0gbmV3IFNlcnZpY2VJbnRlcmZhY2VOb2RlKGVsZW1lbnQsbm9kZU1hbmFnZXJfLG5vZGVEZXB0aF8rMSk7Ci0gICAgaWYgKGNoaWxkTm9kZSAhPSBudWxsKQotICAgICAgYWRkQ2hpbGQoY2hpbGROb2RlKTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIGluaXRUb29scygpCi0gIHsKLSAgICBDb250cm9sbGVyIGNvbnRyb2xsZXIgPSBub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIG5ldyBSZXN1bHRzVG9vbCh0b29sTWFuYWdlcl8sY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfUkVTVUxUUyIpKTsKLSAgICByZWdGaW5kVG9vbF8gPSBuZXcgUmVnRmluZFRvb2wodG9vbE1hbmFnZXJfLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfRklORCIpKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldEZpbmRUb29sUHJvcGVydGllcyhGaW5kQWN0aW9uIGZpbmRBY3Rpb24pCi0gIHsKLSAgICBmaW5kQWN0aW9uXyA9IGZpbmRBY3Rpb247Ci0gICAgcmVnRmluZFRvb2xfLnVwZGF0ZVByb3BlcnR5VGFibGUoZmluZEFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgYWRkQXV0aGVudGljYXRpb25Qcm9wZXJ0aWVzKFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50KQotICB7Ci0gICAgKChSZWdGaW5kVG9vbClyZWdGaW5kVG9vbF8pLmFkZEF1dGhlbnRpY2F0aW9uUHJvcGVydGllcyhyZWdFbGVtZW50KTsKLSAgICBWZWN0b3IgY2hpbGROb2RlcyA9IGdldENoaWxkTm9kZXMoKTsKLSAgICBmb3IgKGludCBpPTA7aTxjaGlsZE5vZGVzLnNpemUoKTtpKyspCi0gICAgewotICAgICAgVURESU5hdmlnYXRvck5vZGUgbmF2aWdhdG9yTm9kZSA9IChVRERJTmF2aWdhdG9yTm9kZSljaGlsZE5vZGVzLmVsZW1lbnRBdChpKTsKLSAgICAgIG5hdmlnYXRvck5vZGUuYWRkQXV0aGVudGljYXRpb25Qcm9wZXJ0aWVzKHJlZ0VsZW1lbnQpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBGaW5kQWN0aW9uIGdldEZpbmRBY3Rpb24oKQotICB7Ci0gICAgcmV0dXJuIGZpbmRBY3Rpb25fOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvUXVlcnlQYXJlbnROb2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvUXVlcnlQYXJlbnROb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3ZjQyZDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1F1ZXJ5UGFyZW50Tm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkVsZW1lbnRBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsQWRkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5SZWxSZW1vdmVFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESU1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5RdWVyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLQotcHVibGljIGNsYXNzIFF1ZXJ5UGFyZW50Tm9kZSBleHRlbmRzIFVERElOYXZpZ2F0b3JGb2xkZXJOb2RlCi17Ci0gIHB1YmxpYyBRdWVyeVBhcmVudE5vZGUoVHJlZUVsZW1lbnQgZWxlbWVudCxOb2RlTWFuYWdlciBub2RlTWFuYWdlcixpbnQgbm9kZURlcHRoKQotICB7Ci0gICAgc3VwZXIoZWxlbWVudCxub2RlTWFuYWdlcixub2RlRGVwdGgpOwotICAgIGVsZW1lbnQuYWRkTGlzdGVuZXIobmV3IEVsZW1lbnRBZGFwdGVyKCkKLSAgICB7Ci0gICAgICBwdWJsaWMgdm9pZCByZWxBZGRlZChSZWxBZGRFdmVudCBldmVudCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHJlbCA9IGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpOwotICAgICAgICBpZiAocmVsLmVxdWFscyhVRERJTW9kZWxDb25zdGFudHMuUkVMX1FVRVJJRVMpKQotICAgICAgICB7Ci0gICAgICAgICAgUXVlcnlFbGVtZW50IHF1ZXJ5RWxlbWVudCA9IChRdWVyeUVsZW1lbnQpZXZlbnQuZ2V0UGFyZW50RWxlbWVudCgpOwotICAgICAgICAgIGNyZWF0ZUNoaWxkTm9kZShxdWVyeUVsZW1lbnQpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyB2b2lkIHJlbFJlbW92ZWQoUmVsUmVtb3ZlRXZlbnQgZXZlbnQpCi0gICAgICB7Ci0gICAgICAgIFF1ZXJ5RWxlbWVudCBxdWVyeUVsZW1lbnQgPSBudWxsOwotICAgICAgICBpZiAoZXZlbnQuZ2V0SW5Cb3VuZFJlbE5hbWUoKS5lcXVhbHMoVURESU1vZGVsQ29uc3RhbnRzLlJFTF9RVUVSSUVTKSkKLSAgICAgICAgICBxdWVyeUVsZW1lbnQgPSAoUXVlcnlFbGVtZW50KWV2ZW50LmdldEluYm91bmRFbGVtZW50KCk7Ci0gICAgICAgIGVsc2UgaWYgKGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpLmVxdWFscyhVRERJTW9kZWxDb25zdGFudHMuUkVMX1FVRVJJRVMpKQotICAgICAgICAgIHF1ZXJ5RWxlbWVudCA9IChRdWVyeUVsZW1lbnQpZXZlbnQuZ2V0T3V0Qm91bmRFbGVtZW50KCk7Ci0KLSAgICAgICAgaWYgKHF1ZXJ5RWxlbWVudCAhPSBudWxsKQotICAgICAgICAgIHJlbW92ZUNoaWxkTm9kZShxdWVyeUVsZW1lbnQpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIGNyZWF0ZUNoaWxkTm9kZShRdWVyeUVsZW1lbnQgZWxlbWVudCkKLSAgewotICAgIFF1ZXJ5Tm9kZSBxdWVyeU5vZGUgPSBuZXcgUXVlcnlOb2RlKGVsZW1lbnQsbm9kZU1hbmFnZXJfLG5vZGVEZXB0aF8rMSk7Ci0gICAgLy8gQWRkIHJlZ2lzdHJ5IGF1dGhlbnRpY2F0aW9uIHByb3BlcnRpZXMuCi0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KShnZXRQYXJlbnQoKS5nZXRUcmVlRWxlbWVudCgpKTsKLSAgICBxdWVyeU5vZGUuYWRkQXV0aGVudGljYXRpb25Qcm9wZXJ0aWVzKHJlZ0VsZW1lbnQpOwotICAgIGFkZENoaWxkKHF1ZXJ5Tm9kZSk7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIGluaXRUb29scygpCi0gIHsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKS5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBuZXcgSXRlbXNTdW1tYXJ5VG9vbCh0b29sTWFuYWdlcl8sInVkZGkvaW1hZ2VzL3F1ZXJpZXNfY2xvc2VkX2VuYWJsZWQuZ2lmIiwidWRkaS9pbWFnZXMvcXVlcmllc19jbG9zZWRfaGlnaGxpZ2h0ZWQuZ2lmIix1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1NVTU1BUllfUVVFUklFUyIpLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9RVUVSSUVTKTsKLSAgICBuZXcgSXRlbXNTdW1tYXJ5VG9vbCh0b29sTWFuYWdlcl8sInVkZGkvaW1hZ2VzL2J1c2luZXNzZXNfY2xvc2VkX2VuYWJsZWQuZ2lmIiwidWRkaS9pbWFnZXMvYnVzaW5lc3Nlc19jbG9zZWRfaGlnaGxpZ2h0ZWQuZ2lmIix1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1NVTU1BUllfQlVTSU5FU1NFUyIpLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTKTsKLSAgICBuZXcgSXRlbXNTdW1tYXJ5VG9vbCh0b29sTWFuYWdlcl8sInVkZGkvaW1hZ2VzL3NlcnZpY2VzX2Nsb3NlZF9lbmFibGVkLmdpZiIsInVkZGkvaW1hZ2VzL3NlcnZpY2VzX2Nsb3NlZF9oaWdobGlnaHRlZC5naWYiLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfU1VNTUFSWV9TRVJWSUNFUyIpLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUyk7Ci0gICAgbmV3IEl0ZW1zU3VtbWFyeVRvb2wodG9vbE1hbmFnZXJfLCJ1ZGRpL2ltYWdlcy9zZXJ2aWNlX2ludGVyZmFjZXNfY2xvc2VkX2VuYWJsZWQuZ2lmIiwidWRkaS9pbWFnZXMvc2VydmljZV9pbnRlcmZhY2VzX2Nsb3NlZF9oaWdobGlnaHRlZC5naWYiLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfU1VNTUFSWV9TRVJWSUNFX0lOVEVSRkFDRVMiKSxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTKTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRPcGVuSW1hZ2VQYXRoKCkKLSAgewotICAgIHJldHVybiAidWRkaS9pbWFnZXMvcXVlcmllc19vcGVuX2hpZ2hsaWdodGVkLmdpZiI7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q2xvc2VkSW1hZ2VQYXRoKCkKLSAgewotICAgIHJldHVybiAidWRkaS9pbWFnZXMvcXVlcmllc19jbG9zZWRfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1JlZnJlc2hUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvUmVmcmVzaFRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI4YTFiZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvUmVmcmVzaFRvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkFjdGlvblRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuUmVmcmVzaFVERElOb2RlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBSZWZyZXNoVG9vbCBleHRlbmRzIEFjdGlvblRvb2wKLXsKLSAgcHVibGljIFJlZnJlc2hUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLFN0cmluZyBhbHQpCi0gIHsKLSAgICBzdXBlcih0b29sTWFuYWdlciwiaW1hZ2VzL3JlZnJlc2hfZW5hYmxlZC5naWYiLCJpbWFnZXMvcmVmcmVzaF9oaWdobGlnaHRlZC5naWYiLGFsdCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgewotICAgIE5vZGUgbm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgcmV0dXJuIFNlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZS5nZXROb2RlSWQoKSx0b29sSWRfLG5vZGUuZ2V0Vmlld0lkKCksbm9kZS5nZXRWaWV3VG9vbElkKCksZm9ySGlzdG9yeSk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoKQotICB7Ci0gICAgcmV0dXJuIFJlZnJlc2hVRERJTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKHRvb2xNYW5hZ2VyXy5nZXROb2RlKCkuZ2V0Tm9kZUlkKCkpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvUmVnRmluZFRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9SZWdGaW5kVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDQ1MTY5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9SZWdGaW5kVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sUHJvcGVydGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLlNlbGVjdEZpbmRUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBSZWdGaW5kVG9vbCBleHRlbmRzIEZvcm1Ub29sIGltcGxlbWVudHMgTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UKLXsKLSAgcHVibGljIFJlZ0ZpbmRUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLFN0cmluZyBhbHQpCi0gIHsKLSAgICBzdXBlcih0b29sTWFuYWdlciwidWRkaS9pbWFnZXMvZmluZF9lbmFibGVkLmdpZiIsInVkZGkvaW1hZ2VzL2ZpbmRfaGlnaGxpZ2h0ZWQuZ2lmIixhbHQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgaW5pdERlZmF1bHRQcm9wZXJ0aWVzKCkKLSAgewotICAgIGluaXREZWZhdWx0UHJvcGVydGllcyh0aGlzKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSwiIik7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSSUVTX1BST1BFUlRJRVMsbmV3IEhhc2h0YWJsZSgpKTsKLSAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKS5nZXROb2RlTWFuYWdlcigpLmdldENvbnRyb2xsZXIoKS5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX05BTUUsdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkRFRkFVTFRfUVVFUllfTkFNRSIpKTsKLSAgfQotCi0gIHByaXZhdGUgZmluYWwgdm9pZCBpbml0RGVmYXVsdFByb3BlcnRpZXMoRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkpCi0gIHsKLSAgICB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Q29udHJvbGxlcigpLmdldFVERElQZXJzcGVjdGl2ZSgpOwotCi0gICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU0sU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVMpKTsKLSAgICBTdHJpbmcgc2ltcGxlU3R5bGVTdHJpbmcgPSBTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NJTVBMRSk7Ci0gICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0JVU0lORVNTRVMsc2ltcGxlU3R5bGVTdHJpbmcpOwotICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFUyxzaW1wbGVTdHlsZVN0cmluZyk7Ci0gICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VfSU5URVJGQUNFUyxzaW1wbGVTdHlsZVN0cmluZyk7Ci0KLSAgICBTdHJpbmcgbWF4U2VhcmNoU2V0ID0gU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9NQVhfU0VBUkNIX1NFVCk7Ci0gICAgU3RyaW5nIG1heFJlc3VsdHMgPSBTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX01BWF9SRVNVTFRTKTsKLQotICAgIC8vIFJlZ0ZpbmRCdXNpbmVzc2VzU2ltcGxlQWN0aW9uIGlucHV0cwotICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfQlVTSU5FU1NfTkFNRSwiIik7Ci0KLSAgICAvLyBSZWdGaW5kQnVzaW5lc3Nlc0FkdmFuY2VkQWN0aW9uIGlucHV0cwotICAgIC8vIFRoZSBhdXRoZW50aWNhdGlvbiBpbnB1dHMgbXVzdCBiZSBhZGRlZCBsYXRlciBhcyB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgYmVmb3JlIHdlIGNhbiBnZXQgYSB2YWxpZCBoYW5kbGUKLSAgICAvLyB0byB0aGUgUmVnaXN0cnlFbGVtZW50IGluIHRoZSBjYXNlIG9mIGEgcXVlcnkgbm9kZS4KLSAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTUFYX1NFQVJDSF9TRVQsbWF4U2VhcmNoU2V0KTsKLSAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTUFYX1JFU1VMVFMsbWF4UmVzdWx0cyk7Ci0KLSAgICAvLyBSZWdGaW5kU2VydmljZXNTaW1wbGVBY3Rpb24gaW5wdXRzCi0gICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX05BTUUsIiIpOwotCi0gICAgLy8gUmVnRmluZFNlcnZpY2VzQWR2YW5jZWRBY3Rpb24gaW5wdXRzCi0gICAgLy8gVGhlIGF1dGhlbnRpY2F0aW9uIGlucHV0cyBtdXN0IGJlIGFkZGVkIGxhdGVyIGFzIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBiZWZvcmUgd2UgY2FuIGdldCBhIHZhbGlkIGhhbmRsZQotICAgIC8vIHRvIHRoZSBSZWdpc3RyeUVsZW1lbnQgaW4gdGhlIGNhc2Ugb2YgYSBxdWVyeSBub2RlLgotICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX01BWF9TRUFSQ0hfU0VULG1heFNlYXJjaFNldCk7Ci0gICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTUFYX1JFU1VMVFMsbWF4UmVzdWx0cyk7Ci0KLSAgICAvLyBSZWdGaW5kU2VydmljZUludGVyZmFjZXNTaW1wbGVBY3Rpb24gaW5wdXRzCi0gICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FLCIiKTsKLQotICAgIC8vIFJlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkQWN0aW9uIGlucHV0cwotICAgIC8vIFRoZSBhdXRoZW50aWNhdGlvbiBpbnB1dHMgbXVzdCBiZSBhZGRlZCBsYXRlciBhcyB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgYmVmb3JlIHdlIGNhbiBnZXQgYSB2YWxpZCBoYW5kbGUKLSAgICAvLyB0byB0aGUgUmVnaXN0cnlFbGVtZW50IGluIHRoZSBjYXNlIG9mIGEgcXVlcnkgbm9kZS4KLSAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSwiIik7Ci0gICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX01BWF9TRUFSQ0hfU0VULG1heFNlYXJjaFNldCk7Ci0gICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX01BWF9SRVNVTFRTLG1heFJlc3VsdHMpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgYWRkQXV0aGVudGljYXRpb25Qcm9wZXJ0aWVzKFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50KQotICB7Ci0gICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSByZWdFbGVtZW50LmdldFB1Ymxpc2hVUkwoKTsKLSAgICBTdHJpbmcgdXNlcklkID0gcmVnRWxlbWVudC5nZXRVc2VySWQoKTsKLSAgICBTdHJpbmcgcGFzc3dvcmQgPSByZWdFbGVtZW50LmdldENyZWQoKTsKLQotICAgIGlmIChwdWJsaXNoVVJMID09IG51bGwpCi0gICAgICBwdWJsaXNoVVJMID0gIiI7Ci0gICAgaWYgKHVzZXJJZCA9PSBudWxsKQotICAgICAgdXNlcklkID0gIiI7Ci0gICAgaWYgKHBhc3N3b3JkID09IG51bGwpCi0gICAgICBwYXNzd29yZCA9ICIiOwotCi0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCxwdWJsaXNoVVJMKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCx1c2VySWQpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQscGFzc3dvcmQpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBnZXRGb3JtVG9vbFByb3BlcnRpZXMoT2JqZWN0IHN1YlF1ZXJ5S2V5T2JqZWN0KQotICB7Ci0gICAgU3RyaW5nIHN1YlF1ZXJ5S2V5ID0gKFN0cmluZylzdWJRdWVyeUtleU9iamVjdDsKLSAgICBpZiAoc3ViUXVlcnlLZXkgPT0gbnVsbCB8fCBzdWJRdWVyeUtleS5sZW5ndGgoKSA8IDEpCi0gICAgICByZXR1cm4gdGhpczsKLSAgICBIYXNodGFibGUgc3ViUXVlcmllc1Byb3BlcnRpZXMgPSAoSGFzaHRhYmxlKWdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUklFU19QUk9QRVJUSUVTKTsKLSAgICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2Ugc3ViUXVlcnlQcm9wZXJ0aWVzID0gKEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSlzdWJRdWVyaWVzUHJvcGVydGllcy5nZXQoc3ViUXVlcnlLZXkpOwotICAgIGlmIChzdWJRdWVyeVByb3BlcnRpZXMgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBzdWJRdWVyeVByb3BlcnRpZXMgPSBuZXcgRm9ybVRvb2xQcm9wZXJ0aWVzKCk7Ci0gICAgICBpbml0RGVmYXVsdFByb3BlcnRpZXMoc3ViUXVlcnlQcm9wZXJ0aWVzKTsKLSAgICAgIHN1YlF1ZXJpZXNQcm9wZXJ0aWVzLnB1dChzdWJRdWVyeUtleSxzdWJRdWVyeVByb3BlcnRpZXMpOwotICAgIH0KLSAgICByZXR1cm4gc3ViUXVlcnlQcm9wZXJ0aWVzOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpCi0gIHsKLSAgICBOb2RlIG5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgIFN0cmluZyBzdWJRdWVyeUtleSA9IChTdHJpbmcpZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVkpOwotICAgIHJldHVybiBTZWxlY3RGaW5kVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGUuZ2V0Tm9kZUlkKCksdG9vbElkXyxub2RlLmdldFZpZXdJZCgpLG5vZGUuZ2V0Vmlld1Rvb2xJZCgpLHN1YlF1ZXJ5S2V5LGZvckhpc3RvcnkpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRGb3JtTGluaygpCi0gIHsKLSAgICBPYmplY3Qgc3ViUXVlcnlLZXlPYmplY3QgPSBnZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSk7Ci0gICAgaWYgKHN1YlF1ZXJ5S2V5T2JqZWN0ICE9IG51bGwpCi0gICAgewotICAgICAgZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSSUVTX1BST1BFUlRJRVMpOwotICAgICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIHN1YlF1ZXJ5UHJvcGVydGllcyA9IGdldEZvcm1Ub29sUHJvcGVydGllcyhzdWJRdWVyeUtleU9iamVjdCk7Ci0gICAgICBPYmplY3Qgc3ViUXVlcnlHZXRPYmplY3QgPSBzdWJRdWVyeVByb3BlcnRpZXMuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9HRVQpOwotICAgICAgaWYgKHN1YlF1ZXJ5R2V0T2JqZWN0ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGJvb2xlYW4gaXNTdWJRdWVyeUdldCA9ICgoQm9vbGVhbilzdWJRdWVyeUdldE9iamVjdCkuYm9vbGVhblZhbHVlKCk7Ci0gICAgICAgIGlmIChpc1N1YlF1ZXJ5R2V0KQotICAgICAgICAgIHJldHVybiAidWRkaS9mb3Jtcy9HZXRGb3JtLmpzcCI7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiAidWRkaS9mb3Jtcy9SZWdGaW5kRm9ybS5qc3AiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvUmVnUHVibGlzaFRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9SZWdQdWJsaXNoVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMWIyZTdjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9SZWdQdWJsaXNoVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuU2VsZWN0RmluZFRvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLQotcHVibGljIGNsYXNzIFJlZ1B1Ymxpc2hUb29sIGV4dGVuZHMgRm9ybVRvb2wgaW1wbGVtZW50cyBNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZQotewotICBUb29sTWFuYWdlciBpbnZpc2libGVUb29sTWFuYWdlcl87Ci0gIHByaXZhdGUgUmVnRmluZFRvb2wgcmVnRmluZFRvb2xfOwotICBwdWJsaWMgUmVnUHVibGlzaFRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsU3RyaW5nIGFsdCkKLSAgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCJ1ZGRpL2ltYWdlcy9wdWJsaXNoX2VuYWJsZWQuZ2lmIiwidWRkaS9pbWFnZXMvcHVibGlzaF9oaWdobGlnaHRlZC5naWYiLGFsdCk7Ci0gICAgaW52aXNpYmxlVG9vbE1hbmFnZXJfID0gbmV3IFRvb2xNYW5hZ2VyKHRvb2xNYW5hZ2VyLmdldE5vZGUoKSk7Ci0gICAgcmVnRmluZFRvb2xfID0gbmV3IFJlZ0ZpbmRUb29sKGludmlzaWJsZVRvb2xNYW5hZ2VyXywiIik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBpbml0RGVmYXVsdFByb3BlcnRpZXMoKQotICB7Ci0gICAgdG9vbE1hbmFnZXJfLmdldE5vZGUoKS5nZXROb2RlTWFuYWdlcigpLmdldENvbnRyb2xsZXIoKS5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLQotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZLCIiKTsKLQotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTSxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUykpOwotICAgIFN0cmluZyBzaW1wbGVTdHlsZVN0cmluZyA9IFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0lNUExFKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0JVU0lORVNTRVMsc2ltcGxlU3R5bGVTdHJpbmcpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRVMsc2ltcGxlU3R5bGVTdHJpbmcpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRV9JTlRFUkZBQ0VTLHNpbXBsZVN0eWxlU3RyaW5nKTsKLQotICAgIC8vIFJlZ1B1Ymxpc2hCdXNpbmVzc1NpbXBsZUFjdGlvbiBpbnB1dHMKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9CVVNJTkVTU19OQU1FLCIiKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9CVVNJTkVTU19ERVNDUklQVElPTiwiIik7Ci0KLSAgICAvLyBSZWdQdWJsaXNoU2VydmljZVNpbXBsZUFjdGlvbiBpbnB1dHMKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX1dTRExfVVJMLCIiKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX05BTUUsIiIpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfREVTQ1JJUFRJT04sIiIpOwotCi0gICAgLy8gUmVnUHVibGlzaFNlcnZpY2VBZHZhbmNlZEFjdGlvbiBpbnB1dHMKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfV1NETF9VUkwsIiIpOwotCi0gICAgLy8gUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTaW1wbGVBY3Rpb24gaW5wdXRzCi0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9JTlRFUkZBQ0VfV1NETF9VUkwsIiIpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUsIiIpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfSU5URVJGQUNFX0RFU0NSSVBUSU9OLCIiKTsKLQotICAgIC8vIFJlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWRBY3Rpb24gaW5wdXRzCi0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9XU0RMX1VSTCwiIik7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FLCIiKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGFkZEF1dGhlbnRpY2F0aW9uUHJvcGVydGllcyhSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCkKLSAgewotICAgIFN0cmluZyBwdWJsaXNoVVJMID0gcmVnRWxlbWVudC5nZXRQdWJsaXNoVVJMKCk7Ci0gICAgU3RyaW5nIHVzZXJJZCA9IHJlZ0VsZW1lbnQuZ2V0VXNlcklkKCk7Ci0gICAgU3RyaW5nIHBhc3N3b3JkID0gcmVnRWxlbWVudC5nZXRDcmVkKCk7Ci0KLSAgICBpZiAocHVibGlzaFVSTCA9PSBudWxsKQotICAgICAgcHVibGlzaFVSTCA9ICIiOwotICAgIGlmICh1c2VySWQgPT0gbnVsbCkKLSAgICAgIHVzZXJJZCA9ICIiOwotICAgIGlmIChwYXNzd29yZCA9PSBudWxsKQotICAgICAgcGFzc3dvcmQgPSAiIjsKLQotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwscHVibGlzaFVSTCk7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQsdXNlcklkKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JELHBhc3N3b3JkKTsKLSAgICByZWdGaW5kVG9vbF8uYWRkQXV0aGVudGljYXRpb25Qcm9wZXJ0aWVzKHJlZ0VsZW1lbnQpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBnZXRGb3JtVG9vbFByb3BlcnRpZXMoT2JqZWN0IHN1YlF1ZXJ5S2V5T2JqZWN0KQotICB7Ci0gICAgLy8gRW1wdHkvTm9uLWV4aXN0ZW50IHN1YnF1ZXJ5a2V5IGltcGxpZXMgcHVibGlzaCBmb3JtLiBBbGwgZWxzZSBpbXBsaWVzIHF1ZXJ5IGZvcm0uCi0gICAgU3RyaW5nIHN1YlF1ZXJ5S2V5ID0gKFN0cmluZylzdWJRdWVyeUtleU9iamVjdDsKLSAgICBpZiAoc3ViUXVlcnlLZXkgPT0gbnVsbCB8fCBzdWJRdWVyeUtleS5sZW5ndGgoKSA8IDEpCi0gICAgICByZXR1cm4gdGhpczsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gcmVnRmluZFRvb2xfLmdldEZvcm1Ub29sUHJvcGVydGllcyhzdWJRdWVyeUtleU9iamVjdCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgewotICAgIE5vZGUgbm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgU3RyaW5nIHN1YlF1ZXJ5S2V5ID0gKFN0cmluZylnZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSk7Ci0gICAgcmV0dXJuIFNlbGVjdEZpbmRUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZS5nZXROb2RlSWQoKSx0b29sSWRfLG5vZGUuZ2V0Vmlld0lkKCksbm9kZS5nZXRWaWV3VG9vbElkKCksc3ViUXVlcnlLZXksZm9ySGlzdG9yeSk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEZvcm1MaW5rKCkKLSAgewotICAgIE9iamVjdCBzdWJRdWVyeUtleU9iamVjdCA9IGdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZKTsKLSAgICBTdHJpbmcgc3ViUXVlcnlLZXkgPSBudWxsOwotICAgIGlmIChzdWJRdWVyeUtleU9iamVjdCAhPSBudWxsKQotICAgIHsKLSAgICAgIGdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUklFU19QUk9QRVJUSUVTKTsKLSAgICAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBzdWJRdWVyeVByb3BlcnRpZXMgPSBnZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXlPYmplY3QpOwotICAgICAgT2JqZWN0IHN1YlF1ZXJ5R2V0T2JqZWN0ID0gc3ViUXVlcnlQcm9wZXJ0aWVzLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfR0VUKTsKLSAgICAgIGlmIChzdWJRdWVyeUdldE9iamVjdCAhPSBudWxsKQotICAgICAgewotICAgICAgICBib29sZWFuIGlzU3ViUXVlcnlHZXQgPSAoKEJvb2xlYW4pc3ViUXVlcnlHZXRPYmplY3QpLmJvb2xlYW5WYWx1ZSgpOwotICAgICAgICBpZiAoaXNTdWJRdWVyeUdldCkKLSAgICAgICAgICByZXR1cm4gInVkZGkvZm9ybXMvR2V0Rm9ybS5qc3AiOwotICAgICAgfQotICAgICAgc3ViUXVlcnlLZXkgPSAoU3RyaW5nKXN1YlF1ZXJ5S2V5T2JqZWN0OwotICAgIH0KLSAgICAgIAotICAgIGlmIChzdWJRdWVyeUtleSA9PSBudWxsIHx8IHN1YlF1ZXJ5S2V5Lmxlbmd0aCgpIDwgMSkKLSAgICAgIHJldHVybiAidWRkaS9mb3Jtcy9SZWdQdWJsaXNoRm9ybS5qc3AiOwotICAgIGVsc2UKLSAgICAgIHJldHVybiByZWdGaW5kVG9vbF8uZ2V0Rm9ybUxpbmsoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1JlZ2lzdHJ5RGV0YWlsc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9SZWdpc3RyeURldGFpbHNUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkOTc1OGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1JlZ2lzdHJ5RGV0YWlsc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuUHJveHlMb2FkUGFnZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLQotcHVibGljIGNsYXNzIFJlZ2lzdHJ5RGV0YWlsc1Rvb2wgZXh0ZW5kcyBEZXRhaWxzVG9vbAotewotICBwdWJsaWMgUmVnaXN0cnlEZXRhaWxzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlcixTdHJpbmcgYWx0KQotICB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsYWx0LFByb3h5TG9hZFBhZ2VBY3Rpb24uZ2V0QWN0aW9uTGluaygidWRkaS9mb3Jtcy9SZWdEZXRhaWxzRm9ybS5qc3AiKSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBpbml0RGVmYXVsdFByb3BlcnRpZXMoKQotICB7Ci0gICAgY2xlYXJQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgdG9vbE1hbmFnZXJfLmdldE5vZGUoKS5nZXROb2RlTWFuYWdlcigpLmdldENvbnRyb2xsZXIoKTsKLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpKHRvb2xNYW5hZ2VyXy5nZXROb2RlKCkuZ2V0VHJlZUVsZW1lbnQoKSk7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9SRUdJU1RSWV9OQU1FLHJlZ0VsZW1lbnQuZ2V0TmFtZSgpKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1JlZ2lzdHJ5Tm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1JlZ2lzdHJ5Tm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Mjg3ODQzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9SZWdpc3RyeU5vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDI3ICAgMTM2NDQ5IGJydW5zc2VuQHVzLmlibS5jb20gLSBWaW5jZSBCcnVuc3NlbiAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbEFkZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsUmVtb3ZlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Nb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESU1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5QdWJsaXNoZWRJdGVtc0VsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlF1ZXJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUXVlcnlQYXJlbnRFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBSZWdpc3RyeU5vZGUgZXh0ZW5kcyBVRERJTmF2aWdhdG9yTm9kZQotewotICBwcml2YXRlIFJlZ2lzdHJ5RGV0YWlsc1Rvb2wgcmVnRGV0YWlsc1Rvb2xfOwotICBwcml2YXRlIFJlZ1B1Ymxpc2hUb29sIHJlZ1B1Ymxpc2hUb29sXzsKLSAgcHJpdmF0ZSBMb2dpblRvb2wgbG9naW5Ub29sXzsKLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElNQUdFX1BBVEhfU1RBTkRBUkQgPSAidWRkaS9pbWFnZXMvcmVnaXN0cnkuZ2lmIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU1BR0VfUEFUSF9XSVRIX1VTRVJfREVGSU5FRF9DQVRFR09SSUVTID0gInVkZGkvaW1hZ2VzL3JlZ3N0cnljYXRfb2JqLmdpZiI7Ci0gIAotICBwdWJsaWMgUmVnaXN0cnlOb2RlKFRyZWVFbGVtZW50IGVsZW1lbnQsTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsaW50IG5vZGVEZXB0aCxTdHJpbmcgaW1hZ2VQYXRoKQotICB7Ci0gICAgc3VwZXIoZWxlbWVudCxub2RlTWFuYWdlcixub2RlRGVwdGgsaW1hZ2VQYXRoKTsKLSAgICBlbGVtZW50LmFkZExpc3RlbmVyKG5ldyBFbGVtZW50QWRhcHRlcigpCi0gICAgewotICAgICAgcHVibGljIHZvaWQgcmVsQWRkZWQoUmVsQWRkRXZlbnQgZXZlbnQpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyByZWwgPSBldmVudC5nZXRPdXRCb3VuZFJlbE5hbWUoKTsKLSAgICAgICAgaWYgKHJlbC5lcXVhbHMoVURESU1vZGVsQ29uc3RhbnRzLlJFTF9RVUVSSUVTX1BBUkVOVCkpCi0gICAgICAgIHsKLSAgICAgICAgICBRdWVyeVBhcmVudEVsZW1lbnQgcXVlcnlQYXJlbnRFbGVtZW50ID0gKFF1ZXJ5UGFyZW50RWxlbWVudClldmVudC5nZXRQYXJlbnRFbGVtZW50KCk7Ci0gICAgICAgICAgY3JlYXRlQ2hpbGROb2RlKHF1ZXJ5UGFyZW50RWxlbWVudCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoaXNQdWJsaXNoZWRJdGVtc1JlbChyZWwpKQotICAgICAgICB7Ci0gICAgICAgICAgUHVibGlzaGVkSXRlbXNFbGVtZW50IHB1Ymxpc2hlZEl0ZW1zRWxlbWVudCA9IChQdWJsaXNoZWRJdGVtc0VsZW1lbnQpZXZlbnQuZ2V0UGFyZW50RWxlbWVudCgpOwotICAgICAgICAgIGNyZWF0ZUNoaWxkTm9kZShwdWJsaXNoZWRJdGVtc0VsZW1lbnQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBwdWJsaWMgdm9pZCByZWxSZW1vdmVkKFJlbFJlbW92ZUV2ZW50IGV2ZW50KQotICAgICAgewotICAgICAgICBUcmVlRWxlbWVudCBjaGlsZEVsZW1lbnQgPSBudWxsOwotICAgICAgICBTdHJpbmcgaW5Cb3VuZFJlbE5hbWUgPSBldmVudC5nZXRJbkJvdW5kUmVsTmFtZSgpOwotICAgICAgICBTdHJpbmcgb3V0Qm91bmRSZWxOYW1lID0gZXZlbnQuZ2V0T3V0Qm91bmRSZWxOYW1lKCk7Ci0gICAgICAgIGlmIChpbkJvdW5kUmVsTmFtZS5lcXVhbHMoVURESU1vZGVsQ29uc3RhbnRzLlJFTF9RVUVSSUVTX1BBUkVOVCkgfHwgaXNQdWJsaXNoZWRJdGVtc1JlbChpbkJvdW5kUmVsTmFtZSkpCi0gICAgICAgICAgY2hpbGRFbGVtZW50ID0gKFRyZWVFbGVtZW50KWV2ZW50LmdldEluYm91bmRFbGVtZW50KCk7Ci0gICAgICAgIGVsc2UgaWYgKG91dEJvdW5kUmVsTmFtZS5lcXVhbHMoVURESU1vZGVsQ29uc3RhbnRzLlJFTF9RVUVSSUVTX1BBUkVOVCkgfHwgaXNQdWJsaXNoZWRJdGVtc1JlbChvdXRCb3VuZFJlbE5hbWUpKQotICAgICAgICAgIGNoaWxkRWxlbWVudCA9IChUcmVlRWxlbWVudClldmVudC5nZXRPdXRCb3VuZEVsZW1lbnQoKTsKLQotICAgICAgICBpZiAoY2hpbGRFbGVtZW50ICE9IG51bGwpCi0gICAgICAgICAgcmVtb3ZlQ2hpbGROb2RlKGNoaWxkRWxlbWVudCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCkuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgZWxlbWVudC5jb25uZWN0KG5ldyBRdWVyeVBhcmVudEVsZW1lbnQodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk5PREVfTkFNRV9RVUVSSUVTX0ZPTERFUiIpLGVsZW1lbnRfLmdldE1vZGVsKCkpLFVERElNb2RlbENvbnN0YW50cy5SRUxfUVVFUklFU19QQVJFTlQsTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICBlbGVtZW50LmNvbm5lY3QobmV3IFB1Ymxpc2hlZEl0ZW1zRWxlbWVudChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUyx1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTk9ERV9OQU1FX1BVQkxJU0hFRF9CVVNJTkVTU0VTX0ZPTERFUiIpLGVsZW1lbnRfLmdldE1vZGVsKCkpLFVERElNb2RlbENvbnN0YW50cy5SRUxfUFVCTElTSEVEX0JVU0lORVNTRVNfUEFSRU5ULE1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUik7Ci0gICAgZWxlbWVudC5jb25uZWN0KG5ldyBQdWJsaXNoZWRJdGVtc0VsZW1lbnQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJOT0RFX05BTUVfUFVCTElTSEVEX1NFUlZJQ0VTX0ZPTERFUiIpLGVsZW1lbnRfLmdldE1vZGVsKCkpLFVERElNb2RlbENvbnN0YW50cy5SRUxfUFVCTElTSEVEX1NFUlZJQ0VTX1BBUkVOVCxNb2RlbENvbnN0YW50cy5SRUxfT1dORVIpOwotICAgIGVsZW1lbnQuY29ubmVjdChuZXcgUHVibGlzaGVkSXRlbXNFbGVtZW50KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVMsdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk5PREVfTkFNRV9QVUJMSVNIRURfU0VSVklDRV9JTlRFUkZBQ0VTX0ZPTERFUiIpLGVsZW1lbnRfLmdldE1vZGVsKCkpLFVERElNb2RlbENvbnN0YW50cy5SRUxfUFVCTElTSEVEX1NFUlZJQ0VfSU5URVJGQUNFU19QQVJFTlQsTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICBzZXRWaXNpYmlsaXR5T2ZDaGlsZHJlbihmYWxzZSk7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gaXNQdWJsaXNoZWRJdGVtc1JlbChTdHJpbmcgcmVsKQotICB7Ci0gICAgcmV0dXJuIHJlbC5lcXVhbHMoVURESU1vZGVsQ29uc3RhbnRzLlJFTF9QVUJMSVNIRURfQlVTSU5FU1NFU19QQVJFTlQpIHx8IHJlbC5lcXVhbHMoVURESU1vZGVsQ29uc3RhbnRzLlJFTF9QVUJMSVNIRURfU0VSVklDRVNfUEFSRU5UKSB8fCByZWwuZXF1YWxzKFVERElNb2RlbENvbnN0YW50cy5SRUxfUFVCTElTSEVEX1NFUlZJQ0VfSU5URVJGQUNFU19QQVJFTlQpOwotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIGNyZWF0ZUNoaWxkTm9kZShRdWVyeVBhcmVudEVsZW1lbnQgcXVlcnlQYXJlbnRFbGVtZW50KQotICB7Ci0gICAgUXVlcnlQYXJlbnROb2RlIHF1ZXJ5UGFyZW50Tm9kZSA9IG5ldyBRdWVyeVBhcmVudE5vZGUocXVlcnlQYXJlbnRFbGVtZW50LG5vZGVNYW5hZ2VyXyxub2RlRGVwdGhfKzEpOwotICAgIGFkZENoaWxkKHF1ZXJ5UGFyZW50Tm9kZSk7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIHZvaWQgY3JlYXRlQ2hpbGROb2RlKFB1Ymxpc2hlZEl0ZW1zRWxlbWVudCBwdWJsaXNoZWRJdGVtc0VsZW1lbnQpCi0gIHsKLSAgICBQdWJsaXNoZWRJdGVtc05vZGUgcHVibGlzaGVkSXRlbXNOb2RlID0gbmV3IFB1Ymxpc2hlZEl0ZW1zTm9kZShwdWJsaXNoZWRJdGVtc0VsZW1lbnQsbm9kZU1hbmFnZXJfLG5vZGVEZXB0aF8rMSk7Ci0gICAgYWRkQ2hpbGQocHVibGlzaGVkSXRlbXNOb2RlKTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIGluaXRUb29scygpCi0gIHsKLSAgICBub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpOwotICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgIHJlZ0RldGFpbHNUb29sXyA9IG5ldyBSZWdpc3RyeURldGFpbHNUb29sKHRvb2xNYW5hZ2VyXyAsdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9SRUdJU1RSWV9ERVRBSUxTIikpOwotICAgIFJlZ0ZpbmRUb29sIHJlZ0ZpbmRUb29sID0gbmV3IFJlZ0ZpbmRUb29sKHRvb2xNYW5hZ2VyXyx1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0ZJTkQiKSk7Ci0gICAgcmVnUHVibGlzaFRvb2xfID0gbmV3IFJlZ1B1Ymxpc2hUb29sKHRvb2xNYW5hZ2VyXyx1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1BVQkxJU0giKSk7Ci0gICAgbG9naW5Ub29sXyA9IG5ldyBMb2dpblRvb2wodG9vbE1hbmFnZXJfLCB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0xPR0lOIikpOwotICAgIG5ldyBBZGRUb0Zhdm9yaXRlc1Rvb2wodG9vbE1hbmFnZXJfLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfQUREX1RPX0ZBVk9SSVRFUyIpKTsKLSAgICByZWdGaW5kVG9vbC5hZGRBdXRoZW50aWNhdGlvblByb3BlcnRpZXMoKFJlZ2lzdHJ5RWxlbWVudCllbGVtZW50Xyk7Ci0gICAgcmVnUHVibGlzaFRvb2xfLmFkZEF1dGhlbnRpY2F0aW9uUHJvcGVydGllcygoUmVnaXN0cnlFbGVtZW50KWVsZW1lbnRfKTsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIFJlZ2lzdHJ5RGV0YWlsc1Rvb2wgZ2V0UmVnRGV0YWlsc1Rvb2woKQotICB7Ci0gICAgcmV0dXJuIHJlZ0RldGFpbHNUb29sXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBSZWdQdWJsaXNoVG9vbCBnZXRSZWdQdWJsaXNoVG9vbCgpCi0gIHsKLSAgICByZXR1cm4gcmVnUHVibGlzaFRvb2xfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIExvZ2luVG9vbCBnZXRMb2dpblRvb2woKQotICB7Ci0gICAgcmV0dXJuIGxvZ2luVG9vbF87Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIHZvaWQgYWRkRGlzY292ZXJlZE5vZGVzKFZlY3RvciBhbGxOb2RlcyxOb2RlIHF1ZXJ5UGFyZW50Tm9kZSxpbnQgcXVlcnlUeXBlKQotICB7Ci0gICAgVmVjdG9yIHF1ZXJ5Tm9kZXMgPSBxdWVyeVBhcmVudE5vZGUuZ2V0Q2hpbGROb2RlcygpOwotICAgIGZvciAoaW50IGk9MDtpPHF1ZXJ5Tm9kZXMuc2l6ZSgpO2krKykKLSAgICB7Ci0gICAgICBRdWVyeU5vZGUgcXVlcnlOb2RlID0gKFF1ZXJ5Tm9kZSlxdWVyeU5vZGVzLmVsZW1lbnRBdChpKTsKLSAgICAgIFF1ZXJ5RWxlbWVudCBxdWVyeUVsZW1lbnQgPSAoUXVlcnlFbGVtZW50KXF1ZXJ5Tm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgaWYgKHF1ZXJ5VHlwZSA9PSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fUVVFUklFUykKLSAgICAgICAgYWxsTm9kZXMuYWRkRWxlbWVudChxdWVyeU5vZGUpOwotICAgICAgZWxzZSBpZiAocXVlcnlFbGVtZW50LmdldFF1ZXJ5VHlwZSgpID09IHF1ZXJ5VHlwZSkKLSAgICAgIHsKLSAgICAgICAgVmVjdG9yIGRpc2NvdmVyZWROb2RlcyA9IHF1ZXJ5Tm9kZS5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICAgIGZvciAoaW50IGo9MDtqPGRpc2NvdmVyZWROb2Rlcy5zaXplKCk7aisrKQotICAgICAgICAgIGFsbE5vZGVzLmFkZEVsZW1lbnQoZGlzY292ZXJlZE5vZGVzLmVsZW1lbnRBdChqKSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIGFkZFB1Ymxpc2hlZE5vZGVzKFZlY3RvciBhbGxOb2RlcyxOb2RlIHB1Ymxpc2hlZEl0ZW1zTm9kZSkKLSAgewotICAgIFZlY3RvciBpdGVtTm9kZXMgPSBwdWJsaXNoZWRJdGVtc05vZGUuZ2V0Q2hpbGROb2RlcygpOwotICAgIGZvciAoaW50IGk9MDtpPGl0ZW1Ob2Rlcy5zaXplKCk7aSsrKQotICAgICAgYWxsTm9kZXMuYWRkRWxlbWVudChpdGVtTm9kZXMuZWxlbWVudEF0KGkpKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGdldEFsbEJ1c2luZXNzTm9kZXMoVmVjdG9yIGFsbEJ1c2luZXNzTm9kZXMpCi0gIHsKLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpZWxlbWVudF87Ci0gICAgTm9kZSBxdWVyeVBhcmVudE5vZGUgPSBnZXRDaGlsZE5vZGUocmVnRWxlbWVudC5nZXRRdWVyeVBhcmVudEVsZW1lbnQoKSk7Ci0gICAgTm9kZSBwdWJsaXNoZWRCdXNpbmVzc2VzTm9kZSA9IGdldENoaWxkTm9kZShyZWdFbGVtZW50LmdldFB1Ymxpc2hlZEJ1c2luZXNzZXNFbGVtZW50KCkpOwotICAgIGFkZERpc2NvdmVyZWROb2RlcyhhbGxCdXNpbmVzc05vZGVzLHF1ZXJ5UGFyZW50Tm9kZSxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUyk7Ci0gICAgYWRkUHVibGlzaGVkTm9kZXMoYWxsQnVzaW5lc3NOb2RlcyxwdWJsaXNoZWRCdXNpbmVzc2VzTm9kZSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBnZXRBbGxTZXJ2aWNlTm9kZXMoVmVjdG9yIGFsbFNlcnZpY2VzTm9kZXMpCi0gIHsKLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpZWxlbWVudF87Ci0gICAgTm9kZSBxdWVyeVBhcmVudE5vZGUgPSBnZXRDaGlsZE5vZGUocmVnRWxlbWVudC5nZXRRdWVyeVBhcmVudEVsZW1lbnQoKSk7Ci0gICAgTm9kZSBwdWJsaXNoZWRTZXJ2aWNlc05vZGUgPSBnZXRDaGlsZE5vZGUocmVnRWxlbWVudC5nZXRQdWJsaXNoZWRTZXJ2aWNlc0VsZW1lbnQoKSk7Ci0gICAgYWRkRGlzY292ZXJlZE5vZGVzKGFsbFNlcnZpY2VzTm9kZXMscXVlcnlQYXJlbnROb2RlLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUyk7Ci0gICAgYWRkUHVibGlzaGVkTm9kZXMoYWxsU2VydmljZXNOb2RlcyxwdWJsaXNoZWRTZXJ2aWNlc05vZGUpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgZ2V0QWxsU2VydmljZUludGVyZmFjZU5vZGVzKFZlY3RvciBhbGxTZXJ2aWNlSW50ZXJmYWNlTm9kZXMpCi0gIHsKLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpZWxlbWVudF87Ci0gICAgTm9kZSBxdWVyeVBhcmVudE5vZGUgPSBnZXRDaGlsZE5vZGUocmVnRWxlbWVudC5nZXRRdWVyeVBhcmVudEVsZW1lbnQoKSk7Ci0gICAgTm9kZSBwdWJsaXNoZWRTZXJ2aWNlSW50ZXJmYWNlc05vZGUgPSBnZXRDaGlsZE5vZGUocmVnRWxlbWVudC5nZXRQdWJsaXNoZWRTZXJ2aWNlSW50ZXJmYWNlc0VsZW1lbnQoKSk7Ci0gICAgYWRkRGlzY292ZXJlZE5vZGVzKGFsbFNlcnZpY2VJbnRlcmZhY2VOb2RlcyxxdWVyeVBhcmVudE5vZGUsVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUyk7Ci0gICAgYWRkUHVibGlzaGVkTm9kZXMoYWxsU2VydmljZUludGVyZmFjZU5vZGVzLHB1Ymxpc2hlZFNlcnZpY2VJbnRlcmZhY2VzTm9kZSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBnZXRQdWJsaXNoZWRCdXNpbmVzc05vZGVzKFZlY3RvciBwdWJsaXNoZWRCdXNpbmVzc05vZGVzKQotICB7Ci0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KWVsZW1lbnRfOwotICAgIE5vZGUgcHVibGlzaGVkQnVzaW5lc3Nlc05vZGUgPSBnZXRDaGlsZE5vZGUocmVnRWxlbWVudC5nZXRQdWJsaXNoZWRCdXNpbmVzc2VzRWxlbWVudCgpKTsKLSAgICBhZGRQdWJsaXNoZWROb2RlcyhwdWJsaXNoZWRCdXNpbmVzc05vZGVzLHB1Ymxpc2hlZEJ1c2luZXNzZXNOb2RlKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGdldFB1Ymxpc2hlZFNlcnZpY2VOb2RlcyhWZWN0b3IgcHVibGlzaGVkU2VydmljZU5vZGVzKQotICB7Ci0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KWVsZW1lbnRfOwotICAgIE5vZGUgcHVibGlzaGVkU2VydmljZXNOb2RlID0gZ2V0Q2hpbGROb2RlKHJlZ0VsZW1lbnQuZ2V0UHVibGlzaGVkU2VydmljZXNFbGVtZW50KCkpOwotICAgIGFkZFB1Ymxpc2hlZE5vZGVzKHB1Ymxpc2hlZFNlcnZpY2VOb2RlcyxwdWJsaXNoZWRTZXJ2aWNlc05vZGUpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgZ2V0UHVibGlzaGVkU2VydmljZUludGVyZmFjZU5vZGVzKFZlY3RvciBwdWJsaXNoZWRTZXJ2aWNlSW50ZXJmYWNlTm9kZXMpCi0gIHsKLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpZWxlbWVudF87Ci0gICAgTm9kZSBwdWJsaXNoZWRTZXJ2aWNlSW50ZXJmYWNlc05vZGUgPSBnZXRDaGlsZE5vZGUocmVnRWxlbWVudC5nZXRQdWJsaXNoZWRTZXJ2aWNlSW50ZXJmYWNlc0VsZW1lbnQoKSk7Ci0gICAgYWRkUHVibGlzaGVkTm9kZXMocHVibGlzaGVkU2VydmljZUludGVyZmFjZU5vZGVzLHB1Ymxpc2hlZFNlcnZpY2VJbnRlcmZhY2VzTm9kZSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBnZXREaXNjb3ZlcmVkTm9kZXMoVmVjdG9yIGRpc2NvdmVyZWROb2RlcyxpbnQgcXVlcnlJdGVtKQotICB7Ci0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KWVsZW1lbnRfOwotICAgIE5vZGUgcXVlcnlQYXJlbnROb2RlID0gZ2V0Q2hpbGROb2RlKHJlZ0VsZW1lbnQuZ2V0UXVlcnlQYXJlbnRFbGVtZW50KCkpOwotICAgIGFkZERpc2NvdmVyZWROb2RlcyhkaXNjb3ZlcmVkTm9kZXMscXVlcnlQYXJlbnROb2RlLHF1ZXJ5SXRlbSk7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gaGFzUXVlcnlSZXN1bHRzKE5vZGUgcXVlcnlQYXJlbnROb2RlLGludCBxdWVyeVR5cGUpCi0gIHsKLSAgICBWZWN0b3IgcXVlcmllcyA9IHF1ZXJ5UGFyZW50Tm9kZS5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgZm9yIChpbnQgaT0wO2k8cXVlcmllcy5zaXplKCk7aSsrKQotICAgIHsKLSAgICAgIFF1ZXJ5Tm9kZSBxdWVyeU5vZGUgPSAoUXVlcnlOb2RlKXF1ZXJpZXMuZWxlbWVudEF0KGkpOwotICAgICAgaWYgKHF1ZXJ5Tm9kZS5nZXRDaGlsZE5vZGVzKCkuc2l6ZSgpID4gMCkKLSAgICAgIHsKLSAgICAgICAgUXVlcnlFbGVtZW50IHF1ZXJ5RWxlbWVudCA9IChRdWVyeUVsZW1lbnQpcXVlcnlOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICAgIGlmIChxdWVyeUVsZW1lbnQuZ2V0UXVlcnlUeXBlKCkgPT0gcXVlcnlUeXBlKQotICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBoYXNCdXNpbmVzcygpCi0gIHsKLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpZWxlbWVudF87Ci0gICAgTm9kZSBwdWJsaXNoZWRCdXNpbmVzc2VzTm9kZSA9IGdldENoaWxkTm9kZShyZWdFbGVtZW50LmdldFB1Ymxpc2hlZEJ1c2luZXNzZXNFbGVtZW50KCkpOwotICAgIGlmIChwdWJsaXNoZWRCdXNpbmVzc2VzTm9kZS5nZXRDaGlsZE5vZGVzKCkuc2l6ZSgpID4gMCkKLSAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBoYXNRdWVyeVJlc3VsdHMoZ2V0Q2hpbGROb2RlKHJlZ0VsZW1lbnQuZ2V0UXVlcnlQYXJlbnRFbGVtZW50KCkpLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIGhhc1NlcnZpY2UoKQotICB7Ci0gICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KWVsZW1lbnRfOwotICAgIE5vZGUgcHVibGlzaGVkU2VydmljZXNOb2RlID0gZ2V0Q2hpbGROb2RlKHJlZ0VsZW1lbnQuZ2V0UHVibGlzaGVkU2VydmljZXNFbGVtZW50KCkpOwotICAgIGlmIChwdWJsaXNoZWRTZXJ2aWNlc05vZGUuZ2V0Q2hpbGROb2RlcygpLnNpemUoKSA+IDApCi0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gaGFzUXVlcnlSZXN1bHRzKGdldENoaWxkTm9kZShyZWdFbGVtZW50LmdldFF1ZXJ5UGFyZW50RWxlbWVudCgpKSxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVMpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gaGFzU2VydmljZUludGVyZmFjZSgpCi0gIHsKLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpZWxlbWVudF87Ci0gICAgTm9kZSBwdWJsaXNoZWRTZXJ2aWNlSW50ZXJmYWNlc05vZGUgPSBnZXRDaGlsZE5vZGUocmVnRWxlbWVudC5nZXRQdWJsaXNoZWRTZXJ2aWNlSW50ZXJmYWNlc0VsZW1lbnQoKSk7Ci0gICAgaWYgKHB1Ymxpc2hlZFNlcnZpY2VJbnRlcmZhY2VzTm9kZS5nZXRDaGlsZE5vZGVzKCkuc2l6ZSgpID4gMCkKLSAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBoYXNRdWVyeVJlc3VsdHMoZ2V0Q2hpbGROb2RlKHJlZ0VsZW1lbnQuZ2V0UXVlcnlQYXJlbnRFbGVtZW50KCkpLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVMpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvUmVzdWx0c1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9SZXN1bHRzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjU3ZjZjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9SZXN1bHRzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5Qcm94eUxvYWRQYWdlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5TZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIFJlc3VsdHNUb29sIGV4dGVuZHMgRm9ybVRvb2wKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgZm9ybUxpbmtfOwotCi0gIHB1YmxpYyBSZXN1bHRzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlcixTdHJpbmcgYWx0KQotICB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsImltYWdlcy9kZXRhaWxzX2VuYWJsZWQuZ2lmIiwiaW1hZ2VzL2RldGFpbHNfaGlnaGxpZ2h0ZWQuZ2lmIixhbHQpOwotICAgIGZvcm1MaW5rXyA9IFByb3h5TG9hZFBhZ2VBY3Rpb24uZ2V0QWN0aW9uTGluaygidWRkaS9mb3Jtcy9SZXN1bHRzRm9ybS5qc3AiKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGluaXREZWZhdWx0UHJvcGVydGllcygpCi0gIHsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KQotICB7Ci0gICAgTm9kZSBub2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICByZXR1cm4gU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlLmdldE5vZGVJZCgpLHRvb2xJZF8sbm9kZS5nZXRWaWV3SWQoKSxub2RlLmdldFZpZXdUb29sSWQoKSxmb3JIaXN0b3J5KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Rm9ybUxpbmsoKQotICB7Ci0gICAgcmV0dXJuIGZvcm1MaW5rXzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1Jvb3RDYXRlZ29yeU5vZGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9Sb290Q2F0ZWdvcnlOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiMWMwY2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1Jvb3RDYXRlZ29yeU5vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLkNhdGVnb3J5RWxlbWVudDsKLQotcHVibGljIGNsYXNzIFJvb3RDYXRlZ29yeU5vZGUgZXh0ZW5kcyBOb2RlCi17Ci0gIHB1YmxpYyBSb290Q2F0ZWdvcnlOb2RlKFRyZWVFbGVtZW50IGVsZW1lbnQsTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIpCi0gIHsKLSAgICBzdXBlcihlbGVtZW50LG5vZGVNYW5hZ2VyLDEsImltYWdlcy9yb290X21haW4uZ2lmIik7Ci0gICAgc2V0VmlzaWJpbGl0eU9mQ2hpbGRyZW4odHJ1ZSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBjcmVhdGVDaGlsZHJlbigpCi0gIHsKLSAgICBFbnVtZXJhdGlvbiBjaGlsZHJlbiA9IGVsZW1lbnRfLmdldEVsZW1lbnRzKFVERElNb2RlbENvbnN0YW50cy5SRUxfU1VCQ0FURUdPUklFUyk7Ci0gICAgaWYgKGNoaWxkcmVuICE9IG51bGwpCi0gICAgewotICAgICAgd2hpbGUgKGNoaWxkcmVuLmhhc01vcmVFbGVtZW50cygpKQotICAgICAgewotICAgICAgICBDYXRlZ29yeUVsZW1lbnQgY2F0ZWdvcnlFbGVtZW50ID0gKENhdGVnb3J5RWxlbWVudCljaGlsZHJlbi5uZXh0RWxlbWVudCgpOwotICAgICAgICBDYXRlZ29yeU5vZGUgY2F0ZWdvcnlOb2RlID0gbmV3IENhdGVnb3J5Tm9kZShjYXRlZ29yeUVsZW1lbnQsbm9kZU1hbmFnZXJfLG5vZGVEZXB0aF8rMSk7Ci0gICAgICAgIGFkZENoaWxkKGNhdGVnb3J5Tm9kZSk7Ci0gICAgICAgIGNhdGVnb3J5Tm9kZS5jcmVhdGVDaGlsZHJlbigpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8vIFJvb3Qgbm9kZTogbm8gbmVlZCBmb3IgdG9nZ2xlIGFjdGlvbi4KLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBnZXRUb2dnbGVOb2RlQWN0aW9uSHJlZigpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgLy8gVGV4dCBvbmx5IG5vZGUuCi0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgZ2V0TGlua0FjdGlvbkhyZWYoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIGluaXRUb29scygpCi0gIHsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1NlcnZpY2VEZXRhaWxzVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1NlcnZpY2VEZXRhaWxzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTA2YmRlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9TZXJ2aWNlRGV0YWlsc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5Qcm94eUxvYWRQYWdlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5TZXJ2aWNlRWxlbWVudDsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnNlcnZpY2UuQnVzaW5lc3NTZXJ2aWNlOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5DYXRlZ29yeUJhZzsKLQotcHVibGljIGNsYXNzIFNlcnZpY2VEZXRhaWxzVG9vbCBleHRlbmRzIERldGFpbHNUb29sCi17Ci0gIHB1YmxpYyBTZXJ2aWNlRGV0YWlsc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsU3RyaW5nIGFsdCkKLSAgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLGFsdCxQcm94eUxvYWRQYWdlQWN0aW9uLmdldEFjdGlvbkxpbmsoInVkZGkvZm9ybXMvU2VydmljZURldGFpbHNGb3JtLmpzcCIpKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIGluaXREZWZhdWx0UHJvcGVydGllcygpCi0gIHsKLSAgICBjbGVhclByb3BlcnR5VGFibGUoKTsKLSAgICB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Q29udHJvbGxlcigpOwotICAgIFNlcnZpY2VFbGVtZW50IHNlcnZpY2VFbGVtZW50ID0gKFNlcnZpY2VFbGVtZW50KSh0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpLmdldFRyZWVFbGVtZW50KCkpOwotICAgIEJ1c2luZXNzU2VydmljZSBidXNTZXJ2aWNlID0gc2VydmljZUVsZW1lbnQuZ2V0QnVzaW5lc3NTZXJ2aWNlKCk7Ci0KLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9LRVksYnVzU2VydmljZS5nZXRTZXJ2aWNlS2V5KCkpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9CVVNJTkVTU19LRVksYnVzU2VydmljZS5nZXRCdXNpbmVzc0tleSgpKTsKLQotICAgIFZlY3RvciBuYW1lVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgIGNvcHlJbmRleFZlY3RvcihidXNTZXJ2aWNlLmdldE5hbWVWZWN0b3IoKSxuYW1lVmVjdG9yKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTkFNRVMsbmFtZVZlY3Rvcik7Ci0KLSAgICBWZWN0b3IgZGVzY3JpcHRpb25WZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgY29weUluZGV4VmVjdG9yKGJ1c1NlcnZpY2UuZ2V0RGVzY3JpcHRpb25WZWN0b3IoKSxkZXNjcmlwdGlvblZlY3Rvcik7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0RFU0NSSVBUSU9OUyxkZXNjcmlwdGlvblZlY3Rvcik7Ci0KLSAgICBDYXRlZ29yeUJhZyBjYXRCYWcgPSBidXNTZXJ2aWNlLmdldENhdGVnb3J5QmFnKCk7Ci0gICAgaWYgKGNhdEJhZyAhPSBudWxsKQotICAgIHsKLSAgICAgIFZlY3RvciBjYXRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBjb3B5SW5kZXhWZWN0b3IoY2F0QmFnLmdldEtleWVkUmVmZXJlbmNlVmVjdG9yKCksY2F0VmVjdG9yKTsKLSAgICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9DQVRFR09SSUVTLGNhdFZlY3Rvcik7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBhZGRBdXRoZW50aWNhdGlvblByb3BlcnRpZXMoUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQpCi0gIHsKLSAgICBTdHJpbmcgcHVibGlzaFVSTCA9IHJlZ0VsZW1lbnQuZ2V0UHVibGlzaFVSTCgpOwotICAgIFN0cmluZyB1c2VySWQgPSByZWdFbGVtZW50LmdldFVzZXJJZCgpOwotICAgIFN0cmluZyBwYXNzd29yZCA9IHJlZ0VsZW1lbnQuZ2V0Q3JlZCgpOwotCi0gICAgaWYgKHB1Ymxpc2hVUkwgPT0gbnVsbCkKLSAgICAgIHB1Ymxpc2hVUkwgPSAiIjsKLSAgICBpZiAodXNlcklkID09IG51bGwpCi0gICAgICB1c2VySWQgPSAiIjsKLSAgICBpZiAocGFzc3dvcmQgPT0gbnVsbCkKLSAgICAgIHBhc3N3b3JkID0gIiI7Ci0KLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMLHB1Ymxpc2hVUkwpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklELHVzZXJJZCk7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCxwYXNzd29yZCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9TZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9TZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzdjOTg0Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvU2VydmljZUludGVyZmFjZURldGFpbHNUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuUHJveHlMb2FkUGFnZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5TZXJ2aWNlSW50ZXJmYWNlRWxlbWVudDsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkNhdGVnb3J5QmFnOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5JZGVudGlmaWVyQmFnOwotCi1wdWJsaWMgY2xhc3MgU2VydmljZUludGVyZmFjZURldGFpbHNUb29sIGV4dGVuZHMgRGV0YWlsc1Rvb2wKLXsKLSAgcHVibGljIFNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlcixTdHJpbmcgYWx0KQotICB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsYWx0LFByb3h5TG9hZFBhZ2VBY3Rpb24uZ2V0QWN0aW9uTGluaygidWRkaS9mb3Jtcy9TZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc0Zvcm0uanNwIikpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgaW5pdERlZmF1bHRQcm9wZXJ0aWVzKCkKLSAgewotICAgIGNsZWFyUHJvcGVydHlUYWJsZSgpOwotICAgIHRvb2xNYW5hZ2VyXy5nZXROb2RlKCkuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRDb250cm9sbGVyKCk7Ci0gICAgU2VydmljZUludGVyZmFjZUVsZW1lbnQgc2lFbGVtZW50ID0gKFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KSh0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpLmdldFRyZWVFbGVtZW50KCkpOwotICAgIFRNb2RlbCB0TW9kZWwgPSBzaUVsZW1lbnQuZ2V0VE1vZGVsKCk7Ci0KLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9JTlRFUkZBQ0VfS0VZLHRNb2RlbC5nZXRUTW9kZWxLZXkoKSk7Ci0gICAgTGlzdEVsZW1lbnQgbmFtZUxpc3RFbGVtZW50ID0gbmV3IExpc3RFbGVtZW50KHRNb2RlbC5nZXROYW1lU3RyaW5nKCkpOwotICAgIG5hbWVMaXN0RWxlbWVudC5zZXRUYXJnZXRWaWV3VG9vbEluZm8oLTEsLTEsMCk7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FLG5hbWVMaXN0RWxlbWVudCk7Ci0KLSAgICBWZWN0b3IgZGVzY3JpcHRpb25WZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgY29weUluZGV4VmVjdG9yKHRNb2RlbC5nZXREZXNjcmlwdGlvblZlY3RvcigpLGRlc2NyaXB0aW9uVmVjdG9yKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0RFU0NSSVBUSU9OUyxkZXNjcmlwdGlvblZlY3Rvcik7Ci0KLSAgICBJZGVudGlmaWVyQmFnIGlkQmFnID0gdE1vZGVsLmdldElkZW50aWZpZXJCYWcoKTsKLSAgICBpZiAoaWRCYWcgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBWZWN0b3IgaWRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBjb3B5SW5kZXhWZWN0b3IoaWRCYWcuZ2V0S2V5ZWRSZWZlcmVuY2VWZWN0b3IoKSxpZFZlY3Rvcik7Ci0gICAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0lERU5USUZJRVJTLGlkVmVjdG9yKTsKLSAgICB9Ci0KLSAgICBDYXRlZ29yeUJhZyBjYXRCYWcgPSB0TW9kZWwuZ2V0Q2F0ZWdvcnlCYWcoKTsKLSAgICBpZiAoY2F0QmFnICE9IG51bGwpCi0gICAgewotICAgICAgVmVjdG9yIGNhdFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGNvcHlJbmRleFZlY3RvcihjYXRCYWcuZ2V0S2V5ZWRSZWZlcmVuY2VWZWN0b3IoKSxjYXRWZWN0b3IpOwotICAgICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9DQVRFR09SSUVTLGNhdFZlY3Rvcik7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgYWRkQXV0aGVudGljYXRpb25Qcm9wZXJ0aWVzKFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50KQotICB7Ci0gICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSByZWdFbGVtZW50LmdldFB1Ymxpc2hVUkwoKTsKLSAgICBTdHJpbmcgdXNlcklkID0gcmVnRWxlbWVudC5nZXRVc2VySWQoKTsKLSAgICBTdHJpbmcgcGFzc3dvcmQgPSByZWdFbGVtZW50LmdldENyZWQoKTsKLQotICAgIGlmIChwdWJsaXNoVVJMID09IG51bGwpCi0gICAgICBwdWJsaXNoVVJMID0gIiI7Ci0gICAgaWYgKHVzZXJJZCA9PSBudWxsKQotICAgICAgdXNlcklkID0gIiI7Ci0gICAgaWYgKHBhc3N3b3JkID09IG51bGwpCi0gICAgICBwYXNzd29yZCA9ICIiOwotCi0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCxwdWJsaXNoVVJMKTsKLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCx1c2VySWQpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQscGFzc3dvcmQpOwotICB9ICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9TZXJ2aWNlSW50ZXJmYWNlTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1NlcnZpY2VJbnRlcmZhY2VOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4OTM4ZjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1NlcnZpY2VJbnRlcmZhY2VOb2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5TZXJ2aWNlSW50ZXJmYWNlR2V0QnVzaW5lc3Nlc0FjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLlNlcnZpY2VJbnRlcmZhY2VHZXRTZXJ2aWNlc0FjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgU2VydmljZUludGVyZmFjZU5vZGUgZXh0ZW5kcyBVRERJTmF2aWdhdG9yTm9kZQotewotICBwcml2YXRlIERldGFpbHNUb29sIGRldGFpbHNUb29sXzsKLSAgcHJpdmF0ZSBVbnB1Ymxpc2hUb29sIHVucHVibGlzaFRvb2xfOwotICBwdWJsaWMgU2VydmljZUludGVyZmFjZU5vZGUoVHJlZUVsZW1lbnQgZWxlbWVudCxOb2RlTWFuYWdlciBub2RlTWFuYWdlcixpbnQgbm9kZURlcHRoKQotICB7Ci0gICAgc3VwZXIoZWxlbWVudCxub2RlTWFuYWdlcixub2RlRGVwdGgsInVkZGkvaW1hZ2VzL3NlcnZpY2VfaW50ZXJmYWNlX2hpZ2hsaWdodGVkLmdpZiIpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgaW5pdFRvb2xzKCkKLSAgewotICAgIENvbnRyb2xsZXIgY29udHJvbGxlciA9IG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCk7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgZGV0YWlsc1Rvb2xfID0gbmV3IFNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzVG9vbCh0b29sTWFuYWdlcl8sdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9TRVJWSUNFX0lOVEVSRkFDRV9ERVRBSUxTIikpOwotICAgIG5ldyBHZXRTZXJ2aWNlc1Rvb2wodG9vbE1hbmFnZXJfLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfR0VUX1NFUlZJQ0VTIiksU2VydmljZUludGVyZmFjZUdldFNlcnZpY2VzQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlkXykpOwotICAgIG5ldyBHZXRCdXNpbmVzc2VzVG9vbCh0b29sTWFuYWdlcl8sInVkZGkvaW1hZ2VzL2J1c2luZXNzZXNfY2xvc2VkX2VuYWJsZWQuZ2lmIiwidWRkaS9pbWFnZXMvYnVzaW5lc3Nlc19jbG9zZWRfaGlnaGxpZ2h0ZWQuZ2lmIix1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0dFVF9CVVNJTkVTU0VTIiksU2VydmljZUludGVyZmFjZUdldEJ1c2luZXNzZXNBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWRfKSk7Ci0gICAgbmV3IFVERElJbXBvcnRXU0RMVG9Xb3JrYmVuY2hUb29sKHRvb2xNYW5hZ2VyXyxjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9JTVBPUlRfV1NETF9UT19XT1JLQkVOQ0giKSk7Ci0gICAgbmV3IFVERElJbXBvcnRXU0RMVG9GaWxlU3lzdGVtVG9vbCh0b29sTWFuYWdlcl8sY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfV1NETF9JTVBPUlRfVE9fRlMiKSk7Ci0gICAgbmV3IFVERElMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbCh0b29sTWFuYWdlcl8sY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfTEFVTkNIX1dFQl9TRVJWSUNFX1dJWkFSRCIpKTsKLSAgICBuZXcgQWRkVG9GYXZvcml0ZXNUb29sKHRvb2xNYW5hZ2VyXywgdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9BRERfVE9fRkFWT1JJVEVTIikpOwotICAgIHVucHVibGlzaFRvb2xfID0gbmV3IFVucHVibGlzaFRvb2wodG9vbE1hbmFnZXJfLCJ1ZGRpL2ltYWdlcy91bnB1Ymxpc2hfc2VydmljZV9pbnRlcmZhY2VfZW5hYmxlZC5naWYiLCJ1ZGRpL2ltYWdlcy91bnB1Ymxpc2hfc2VydmljZV9pbnRlcmZhY2VfaGlnaGxpZ2h0ZWQuZ2lmIix1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1VOUFVCTElTSF9TRVJWSUNFX0lOVEVSRkFDRSIpKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgYWRkQXV0aGVudGljYXRpb25Qcm9wZXJ0aWVzKFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50KQotICB7Ci0gICAgZGV0YWlsc1Rvb2xfLmFkZEF1dGhlbnRpY2F0aW9uUHJvcGVydGllcyhyZWdFbGVtZW50KTsKLSAgICB1bnB1Ymxpc2hUb29sXy5hZGRBdXRoZW50aWNhdGlvblByb3BlcnRpZXMocmVnRWxlbWVudCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V1NETFVSTEZyb21EZXRhaWxzVG9vbCgpCi0gIHsKLSAgICBMaXN0RWxlbWVudCB3c2RsVVJMTGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpZGV0YWlsc1Rvb2xfLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfV1NETF9VUkwpOwotICAgIGlmICh3c2RsVVJMTGlzdEVsZW1lbnQgIT0gbnVsbCkKLSAgICAgIHJldHVybiAoU3RyaW5nKXdzZGxVUkxMaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gInRlbXAud3NkbCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9TZXJ2aWNlTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1NlcnZpY2VOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiZWFjNWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1NlcnZpY2VOb2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5TZXJ2aWNlR2V0QnVzaW5lc3NBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5TZXJ2aWNlR2V0U2VydmljZUludGVyZmFjZXNBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLlVERElBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudDsKLQotcHVibGljIGNsYXNzIFNlcnZpY2VOb2RlIGV4dGVuZHMgVURESU5hdmlnYXRvck5vZGUKLXsKLSAgcHJpdmF0ZSBEZXRhaWxzVG9vbCBkZXRhaWxzVG9vbF87Ci0gIHByaXZhdGUgVW5wdWJsaXNoVG9vbCB1bnB1Ymxpc2hUb29sXzsKLSAgcHVibGljIFNlcnZpY2VOb2RlKFRyZWVFbGVtZW50IGVsZW1lbnQsTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsaW50IG5vZGVEZXB0aCkKLSAgewotICAgIHN1cGVyKGVsZW1lbnQsbm9kZU1hbmFnZXIsbm9kZURlcHRoLCJ1ZGRpL2ltYWdlcy9zZXJ2aWNlX2hpZ2hsaWdodGVkLmdpZiIpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgaW5pdFRvb2xzKCkKLSAgewotICAgIENvbnRyb2xsZXIgY29udHJvbGxlciA9IG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCk7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgZGV0YWlsc1Rvb2xfID0gbmV3IFNlcnZpY2VEZXRhaWxzVG9vbCh0b29sTWFuYWdlcl8sdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9TRVJWSUNFX0RFVEFJTFMiKSk7Ci0gICAgbmV3IEdldEJ1c2luZXNzZXNUb29sKHRvb2xNYW5hZ2VyXywidWRkaS9pbWFnZXMvYnVzaW5lc3NfZW5hYmxlZC5naWYiLCJ1ZGRpL2ltYWdlcy9idXNpbmVzc19oaWdobGlnaHRlZC5naWYiLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfR0VUX0JVU0lORVNTIiksU2VydmljZUdldEJ1c2luZXNzQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlkXykpOwotICAgIG5ldyBHZXRTZXJ2aWNlSW50ZXJmYWNlc1Rvb2wodG9vbE1hbmFnZXJfLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfR0VUX1NFUlZJQ0VfSU5URVJGQUNFUyIpLFNlcnZpY2VHZXRTZXJ2aWNlSW50ZXJmYWNlc0FjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZF8pKTsKLSAgICBuZXcgVURESUltcG9ydFdTRExUb1dvcmtiZW5jaFRvb2wodG9vbE1hbmFnZXJfLGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0lNUE9SVF9XU0RMX1RPX1dPUktCRU5DSCIpKTsKLSAgICBuZXcgVURESUltcG9ydFdTRExUb0ZpbGVTeXN0ZW1Ub29sKHRvb2xNYW5hZ2VyXyxjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9XU0RMX0lNUE9SVF9UT19GUyIpKTsKLSAgICBuZXcgVURESUxhdW5jaFdlYlNlcnZpY2VXaXphcmRUb29sKHRvb2xNYW5hZ2VyXyxjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9MQVVOQ0hfV0VCX1NFUlZJQ0VfV0laQVJEIikpOwotICAgIG5ldyBVRERJQWRkVG9XU0RMUGVyc3BlY3RpdmVUb29sKHRvb2xNYW5hZ2VyXyx1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0FERF9UT19XU0RMX1BFUlNQRUNUSVZFIikpOwotICAgIG5ldyBBZGRUb0Zhdm9yaXRlc1Rvb2wodG9vbE1hbmFnZXJfLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfQUREX1RPX0ZBVk9SSVRFUyIpKTsKLSAgICB1bnB1Ymxpc2hUb29sXyA9IG5ldyBVbnB1Ymxpc2hUb29sKHRvb2xNYW5hZ2VyXywidWRkaS9pbWFnZXMvdW5wdWJsaXNoX3NlcnZpY2VfZW5hYmxlZC5naWYiLCJ1ZGRpL2ltYWdlcy91bnB1Ymxpc2hfc2VydmljZV9oaWdobGlnaHRlZC5naWYiLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfVU5QVUJMSVNIX1NFUlZJQ0UiKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGFkZEF1dGhlbnRpY2F0aW9uUHJvcGVydGllcyhSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCkKLSAgewotICAgIGRldGFpbHNUb29sXy5hZGRBdXRoZW50aWNhdGlvblByb3BlcnRpZXMocmVnRWxlbWVudCk7Ci0gICAgdW5wdWJsaXNoVG9vbF8uYWRkQXV0aGVudGljYXRpb25Qcm9wZXJ0aWVzKHJlZ0VsZW1lbnQpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXU0RMVVJMRnJvbURldGFpbHNUb29sKCkKLSAgewotICAgIExpc3RFbGVtZW50IHdzZGxVUkxMaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClkZXRhaWxzVG9vbF8uZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1dTRExfVVJMKTsKLSAgICBpZiAod3NkbFVSTExpc3RFbGVtZW50ICE9IG51bGwpCi0gICAgICByZXR1cm4gKFN0cmluZyl3c2RsVVJMTGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuICJ0ZW1wLndzZGwiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvU3ViUXVlcnlLZXlQcm9wZXJ0eS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1N1YlF1ZXJ5S2V5UHJvcGVydHkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmNhN2RkMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvU3ViUXVlcnlLZXlQcm9wZXJ0eS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmU7Ci0KLXB1YmxpYyBjbGFzcyBTdWJRdWVyeUtleVByb3BlcnR5Ci17Ci0gIHByaXZhdGUgU3RyaW5nIHN1YlF1ZXJ5S2V5XzsKLQotICBwdWJsaWMgU3ViUXVlcnlLZXlQcm9wZXJ0eSgpCi0gIHsKLSAgICBzdWJRdWVyeUtleV8gPSAiIjsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldFN1YlF1ZXJ5S2V5KFN0cmluZyBzdWJRdWVyeUtleSkKLSAgewotICAgIHN1YlF1ZXJ5S2V5XyA9IHN1YlF1ZXJ5S2V5OwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTdWJRdWVyeUtleSgpCi0gIHsKLSAgICByZXR1cm4gc3ViUXVlcnlLZXlfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvU3ViUXVlcnlUcmFuc2ZlclRhcmdldC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1N1YlF1ZXJ5VHJhbnNmZXJUYXJnZXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE5ZTYxOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvU3ViUXVlcnlUcmFuc2ZlclRhcmdldC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5WaWV3VG9vbDsKLQotcHVibGljIGNsYXNzIFN1YlF1ZXJ5VHJhbnNmZXJUYXJnZXQKLXsKLSAgcHJpdmF0ZSBpbnQgbm9kZUlkXzsKLSAgcHJpdmF0ZSBpbnQgdG9vbElkXzsKLSAgcHJpdmF0ZSBpbnQgdmlld0lkXzsKLSAgcHJpdmF0ZSBpbnQgdmlld1Rvb2xJZF87Ci0gIHByaXZhdGUgU3RyaW5nIHN1YlF1ZXJ5S2V5XzsKLSAgcHJpdmF0ZSBOb2RlTWFuYWdlciBub2RlTWFuYWdlcl87Ci0gIEhhc2h0YWJsZSBwYXJlbnRRdWVyeURhdGFfOwotCi0gIHB1YmxpYyBTdWJRdWVyeVRyYW5zZmVyVGFyZ2V0KE5vZGUgbm9kZSxTdHJpbmcgc3ViUXVlcnlLZXksSGFzaHRhYmxlIHBhcmVudFF1ZXJ5RGF0YSkKLSAgewotICAgIG5vZGVJZF8gPSBub2RlLmdldE5vZGVJZCgpOwotICAgIHRvb2xJZF8gPSBub2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKTsKLSAgICB2aWV3SWRfID0gbm9kZS5nZXRWaWV3SWQoKTsKLSAgICB2aWV3VG9vbElkXyA9IG5vZGUuZ2V0Vmlld1Rvb2xJZCgpOwotICAgIHN1YlF1ZXJ5S2V5XyA9IHN1YlF1ZXJ5S2V5OwotICAgIG5vZGVNYW5hZ2VyXyA9IG5vZGUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBwYXJlbnRRdWVyeURhdGFfID0gcGFyZW50UXVlcnlEYXRhOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGludCBnZXROb2RlSWQoKQotICB7Ci0gICAgcmV0dXJuIG5vZGVJZF87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgaW50IGdldFRvb2xJZCgpCi0gIHsKLSAgICByZXR1cm4gdG9vbElkXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBpbnQgZ2V0Vmlld0lkKCkKLSAgewotICAgIHJldHVybiB2aWV3SWRfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGludCBnZXRWaWV3VG9vbElkKCkKLSAgewotICAgIHJldHVybiB2aWV3VG9vbElkXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3ViUXVlcnlLZXkoKQotICB7Ci0gICAgcmV0dXJuIHN1YlF1ZXJ5S2V5XzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBGb3JtVG9vbCBnZXRUYXJnZXRGb3JtVG9vbCgpCi0gIHsKLSAgICBOb2RlIG5vZGUgPSBub2RlTWFuYWdlcl8uZ2V0Tm9kZShub2RlSWRfKTsKLSAgICBpZiAobm9kZSA9PSBudWxsKQotICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICBUb29sIHRvb2wgPSBub2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0VG9vbCh0b29sSWRfKTsKLQotICAgIGlmICh2aWV3SWRfICE9IEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCkKLSAgICB7Ci0gICAgICBWaWV3VG9vbCB2aWV3VG9vbCA9IChWaWV3VG9vbCl0b29sOwotICAgICAgVG9vbE1hbmFnZXIgdmlld1Rvb2xNYW5hZ2VyID0gdmlld1Rvb2wuZ2V0VG9vbE1hbmFnZXIodmlld0lkXyk7Ci0gICAgICBpZiAodmlld1Rvb2xNYW5hZ2VyICE9IG51bGwpCi0gICAgICAgIHRvb2wgPSB2aWV3VG9vbE1hbmFnZXIuZ2V0VG9vbCh2aWV3VG9vbElkXyk7Ci0gICAgICBlbHNlCi0gICAgICAgIHRvb2wgPSBudWxsOwotICAgIH0KLSAgICByZXR1cm4gKEZvcm1Ub29sKXRvb2w7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBIYXNodGFibGUgZ2V0UGFyZW50UXVlcnlEYXRhKCkKLSAgewotICAgIHJldHVybiBwYXJlbnRRdWVyeURhdGFfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvVURESUFkZFRvV1NETFBlcnNwZWN0aXZlVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1VERElBZGRUb1dTRExQZXJzcGVjdGl2ZVRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTllMmI2ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvVURESUFkZFRvV1NETFBlcnNwZWN0aXZlVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQWRkVG9XU0RMUGVyc3BlY3RpdmVUb29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLlNlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuVURESUFkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgVURESUFkZFRvV1NETFBlcnNwZWN0aXZlVG9vbCBleHRlbmRzIEFkZFRvV1NETFBlcnNwZWN0aXZlVG9vbCB7Ci0gIHB1YmxpYyBVRERJQWRkVG9XU0RMUGVyc3BlY3RpdmVUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsYWx0KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgIHJldHVybiBTZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0QWN0aW9uTGluaygpIHsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgcmV0dXJuIFVERElBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1VERElJbXBvcnRXU0RMVG9GaWxlU3lzdGVtVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1VERElJbXBvcnRXU0RMVG9GaWxlU3lzdGVtVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDg1YTAyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9VRERJSW1wb3J0V1NETFRvRmlsZVN5c3RlbVRvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkltcG9ydFRvRmlsZVN5c3RlbVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5VRERJSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbjsKLQotcHVibGljIGNsYXNzIFVERElJbXBvcnRXU0RMVG9GaWxlU3lzdGVtVG9vbCBleHRlbmRzIEltcG9ydFRvRmlsZVN5c3RlbVRvb2wKLXsKLSAgcHVibGljIFVERElJbXBvcnRXU0RMVG9GaWxlU3lzdGVtVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlcixTdHJpbmcgYWx0KQotICB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsYWx0KTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KQotICB7Ci0gICAgTm9kZSBub2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICByZXR1cm4gU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlLmdldE5vZGVJZCgpLHRvb2xJZF8sbm9kZS5nZXRWaWV3SWQoKSxub2RlLmdldFZpZXdUb29sSWQoKSxmb3JIaXN0b3J5KTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGluaygpCi0gIHsKLSAgICBOb2RlIG5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgIHJldHVybiBVRERJSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGUuZ2V0Tm9kZUlkKCksdG9vbElkXyxub2RlLmdldFZpZXdJZCgpLG5vZGUuZ2V0Vmlld1Rvb2xJZCgpKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1VERElJbXBvcnRXU0RMVG9Xb3JrYmVuY2hUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvVURESUltcG9ydFdTRExUb1dvcmtiZW5jaFRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTZjMzYyMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvVURESUltcG9ydFdTRExUb1dvcmtiZW5jaFRvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkltcG9ydFRvV29ya2JlbmNoVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5TZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIFVERElJbXBvcnRXU0RMVG9Xb3JrYmVuY2hUb29sIGV4dGVuZHMgSW1wb3J0VG9Xb3JrYmVuY2hUb29sCi17Ci0gIHB1YmxpYyBVRERJSW1wb3J0V1NETFRvV29ya2JlbmNoVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlcixTdHJpbmcgYWx0KQotICB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsYWx0KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KQotICB7Ci0gICAgTm9kZSBub2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICByZXR1cm4gU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlLmdldE5vZGVJZCgpLHRvb2xJZF8sbm9kZS5nZXRWaWV3SWQoKSxub2RlLmdldFZpZXdUb29sSWQoKSxmb3JIaXN0b3J5KTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0Rm9ybUxpbmsoKQotICB7Ci0gICAgcmV0dXJuICJ1ZGRpL2Zvcm1zL1VERElJbXBvcnRXU0RMVG9Xb3JrYmVuY2hGb3JtLmpzcCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9VRERJTGF1bmNoV2ViU2VydmljZVdpemFyZFRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9VRERJTGF1bmNoV2ViU2VydmljZVdpemFyZFRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Q3ZTM2Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvVURESUxhdW5jaFdlYlNlcnZpY2VXaXphcmRUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5MYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5TZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIFVERElMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbCBleHRlbmRzIExhdW5jaFdlYlNlcnZpY2VXaXphcmRUb29sCi17Ci0gIHB1YmxpYyBVRERJTGF1bmNoV2ViU2VydmljZVdpemFyZFRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsU3RyaW5nIGFsdCkKLSAgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLGFsdCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgewotICAgIE5vZGUgbm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgcmV0dXJuIFNlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZS5nZXROb2RlSWQoKSx0b29sSWRfLG5vZGUuZ2V0Vmlld0lkKCksbm9kZS5nZXRWaWV3VG9vbElkKCksZm9ySGlzdG9yeSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEZvcm1MaW5rKCkKLSAgewotICAgIHJldHVybiAidWRkaS9mb3Jtcy9VRERJTGF1bmNoV2ViU2VydmljZVdpemFyZEZvcm0uanNwIjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1VERElNYWluTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1VERElNYWluTm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzkwMDBkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9VRERJTWFpbk5vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkVsZW1lbnRBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsQWRkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5SZWxSZW1vdmVFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESU1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlVERElNYWluRWxlbWVudDsKLQotLy8gUm9vdCBub2RlIGZvciB0aGUgVURESSBOYXZpZ2F0b3IgVHJlZSBWaWV3Ci1wdWJsaWMgY2xhc3MgVURESU1haW5Ob2RlIGV4dGVuZHMgVURESU5hdmlnYXRvck5vZGUKLXsKLSAgcHVibGljIFVERElNYWluTm9kZShUcmVlRWxlbWVudCBlbGVtZW50LE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyKQotICB7Ci0gICAgc3VwZXIoZWxlbWVudCxub2RlTWFuYWdlciwxLCJpbWFnZXMvcm9vdF9tYWluLmdpZiIpOwotICAgIGVsZW1lbnQuYWRkTGlzdGVuZXIobmV3IEVsZW1lbnRBZGFwdGVyKCkKLSAgICB7Ci0gICAgICBwdWJsaWMgdm9pZCByZWxBZGRlZChSZWxBZGRFdmVudCBldmVudCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHJlbCA9IGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpOwotICAgICAgICBpZiAocmVsLmVxdWFscyhVRERJTW9kZWxDb25zdGFudHMuUkVMX1JFR0lTVFJJRVMpKQotICAgICAgICB7Ci0gICAgICAgICAgUmVnaXN0cnlFbGVtZW50IHJlZ2lzdHJ5RWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpZXZlbnQuZ2V0UGFyZW50RWxlbWVudCgpOwotICAgICAgICAgIFVERElNYWluRWxlbWVudCB1ZGRpTWFpbkVsZW1lbnQgPSAoVURESU1haW5FbGVtZW50KWVsZW1lbnRfOwotICAgICAgICAgIHVkZGlNYWluRWxlbWVudC5hZGRSZWdpc3RyeU5hbWUocmVnaXN0cnlFbGVtZW50LmdldE5hbWUoKSk7Ci0gICAgICAgICAgY3JlYXRlQ2hpbGROb2RlKHJlZ2lzdHJ5RWxlbWVudCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgcHVibGljIHZvaWQgcmVsUmVtb3ZlZChSZWxSZW1vdmVFdmVudCBldmVudCkKLSAgICAgIHsKLSAgICAgICAgUmVnaXN0cnlFbGVtZW50IGNoaWxkRWxlbWVudCA9IG51bGw7Ci0gICAgICAgIGlmIChldmVudC5nZXRJbkJvdW5kUmVsTmFtZSgpLmVxdWFscyhVRERJTW9kZWxDb25zdGFudHMuUkVMX1JFR0lTVFJJRVMpKQotICAgICAgICAgIGNoaWxkRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpZXZlbnQuZ2V0SW5ib3VuZEVsZW1lbnQoKTsKLSAgICAgICAgZWxzZSBpZiAoZXZlbnQuZ2V0T3V0Qm91bmRSZWxOYW1lKCkuZXF1YWxzKFVERElNb2RlbENvbnN0YW50cy5SRUxfUkVHSVNUUklFUykpCi0gICAgICAgICAgY2hpbGRFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClldmVudC5nZXRPdXRCb3VuZEVsZW1lbnQoKTsKLQotICAgICAgICBpZiAoY2hpbGRFbGVtZW50ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBVRERJTWFpbkVsZW1lbnQgdWRkaU1haW5FbGVtZW50ID0gKFVERElNYWluRWxlbWVudCllbGVtZW50XzsKLSAgICAgICAgICB1ZGRpTWFpbkVsZW1lbnQucmVtb3ZlUmVnaXN0cnlOYW1lKGNoaWxkRWxlbWVudC5nZXROYW1lKCkpOwotICAgICAgICAgIHJlbW92ZUNoaWxkTm9kZShjaGlsZEVsZW1lbnQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIHZvaWQgY3JlYXRlQ2hpbGROb2RlKFRyZWVFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpZWxlbWVudDsKLSAgICBFbnVtZXJhdGlvbiB1c2VyRGVmaW5lZENhdGVnb3JpZXMgPSByZWdFbGVtZW50LmdldFVzZXJEZWZpbmVkQ2F0ZWdvcmllcygpOwotICAgIFN0cmluZyBpbWFnZVBhdGg7Ci0gICAgaWYgKHVzZXJEZWZpbmVkQ2F0ZWdvcmllcyAhPSBudWxsICYmIHVzZXJEZWZpbmVkQ2F0ZWdvcmllcy5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgIGltYWdlUGF0aCA9IFJlZ2lzdHJ5Tm9kZS5JTUFHRV9QQVRIX1dJVEhfVVNFUl9ERUZJTkVEX0NBVEVHT1JJRVM7Ci0gICAgZWxzZQotICAgICAgaW1hZ2VQYXRoID0gUmVnaXN0cnlOb2RlLklNQUdFX1BBVEhfU1RBTkRBUkQ7Ci0gICAgCi0gICAgUmVnaXN0cnlOb2RlIHJlZ05vZGUgPSBuZXcgUmVnaXN0cnlOb2RlKGVsZW1lbnQsbm9kZU1hbmFnZXJfLG5vZGVEZXB0aF8rMSxpbWFnZVBhdGgpOwotICAgIGFkZENoaWxkKHJlZ05vZGUpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgaW5pdFRvb2xzKCkKLSAgewotICAgIENvbnRyb2xsZXIgY29udHJvbGxlciA9IG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCk7Ci0gICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICAgbmV3IE9wZW5SZWdpc3RyeVRvb2wodG9vbE1hbmFnZXJfLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfT1BFTl9SRUdJU1RSWSIpKTsKLSAgfQotICAKLSAgLy8gR2l2ZW4gYSBub2RlIHVuZGVyIGEgcGFydGljdWxhciByZWdpc3RyeSBub2RlLCBvYnRhaW4gdGhlIHJlZ2lzdHJ5IG5vZGUuCi0gIHB1YmxpYyBmaW5hbCBSZWdpc3RyeU5vZGUgZ2V0UmVnaXN0cnlOb2RlKE5vZGUgY3VycmVudE5vZGUpCi0gIHsKLSAgICBSZWdpc3RyeU5vZGUgcmVnTm9kZSA9IG51bGw7Ci0gICAgaWYgKGN1cnJlbnROb2RlIGluc3RhbmNlb2YgUmVnaXN0cnlOb2RlKQotICAgIHsKLSAgICAgIHJlZ05vZGUgPSAoUmVnaXN0cnlOb2RlKWN1cnJlbnROb2RlOwotICAgIH0KLSAgICBlbHNlIGlmIChjdXJyZW50Tm9kZSBpbnN0YW5jZW9mIFF1ZXJ5Tm9kZSkKLSAgICB7Ci0gICAgICAvLyBRdWVyeSAtPiBRdWVyeSBmb2xkZXIgLT4gUmVnaXN0cnkKLSAgICAgIHJlZ05vZGUgPSAoUmVnaXN0cnlOb2RlKShjdXJyZW50Tm9kZS5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGN1cnJlbnROb2RlIGluc3RhbmNlb2YgUXVlcnlQYXJlbnROb2RlIHx8IGN1cnJlbnROb2RlIGluc3RhbmNlb2YgUHVibGlzaGVkSXRlbXNOb2RlKQotICAgIHsKLSAgICAgIC8vIFF1ZXJ5IGZvbGRlciAtPiBSZWdpc3RyeQotICAgICAgcmVnTm9kZSA9IChSZWdpc3RyeU5vZGUpKGN1cnJlbnROb2RlLmdldFBhcmVudCgpKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoY3VycmVudE5vZGUgaW5zdGFuY2VvZiBCdXNpbmVzc05vZGUgfHwgY3VycmVudE5vZGUgaW5zdGFuY2VvZiBTZXJ2aWNlTm9kZSB8fCBjdXJyZW50Tm9kZSBpbnN0YW5jZW9mIFNlcnZpY2VJbnRlcmZhY2VOb2RlKQotICAgIHsKLSAgICAgIC8vIGl0ZW1Ob2RlIC0+IFB1Ymxpc2hlZCBJdGVtcyBmb2xkZXIgLT4gUmVnaXN0cnkKLSAgICAgIC8vIE9SOgotICAgICAgLy8gaXRlbU5vZGUgLT4gUXVlcnlOb2RlIC0+IFF1ZXJ5IGZvbGRlciAtPiBSZWdpc3RyeQotICAgICAgTm9kZSBwYXJlbnROb2RlID0gY3VycmVudE5vZGUuZ2V0UGFyZW50KCk7Ci0gICAgICBpZiAocGFyZW50Tm9kZSBpbnN0YW5jZW9mIFF1ZXJ5Tm9kZSkKLSAgICAgICAgcmVnTm9kZSA9IChSZWdpc3RyeU5vZGUpKHBhcmVudE5vZGUuZ2V0UGFyZW50KCkuZ2V0UGFyZW50KCkpOwotICAgICAgZWxzZQotICAgICAgICByZWdOb2RlID0gKFJlZ2lzdHJ5Tm9kZSlwYXJlbnROb2RlLmdldFBhcmVudCgpOwotICAgIH0KLSAgICByZXR1cm4gcmVnTm9kZTsgICAgCi0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9VRERJTmF2aWdhdG9yRm9sZGVyTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1VERElOYXZpZ2F0b3JGb2xkZXJOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3YzhjZDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3BlcnNwZWN0aXZlL1VERElOYXZpZ2F0b3JGb2xkZXJOb2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvbGRlck5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuU2VsZWN0TmF2aWdhdG9yTm9kZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLlRvZ2dsZU5hdmlnYXRvck5vZGVBY3Rpb247Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBVRERJTmF2aWdhdG9yRm9sZGVyTm9kZSBleHRlbmRzIEZvbGRlck5vZGUKLXsKLSAgcHVibGljIFVERElOYXZpZ2F0b3JGb2xkZXJOb2RlKFRyZWVFbGVtZW50IGVsZW1lbnQsTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsaW50IG5vZGVEZXB0aCkKLSAgewotICAgIHN1cGVyKGVsZW1lbnQsbm9kZU1hbmFnZXIsbm9kZURlcHRoKTsKLSAgfQotCi0gIC8vIHVkZGkvYWN0aW9ucy9Ub2dnbGVOYXZpZ2F0b3JOb2RlQWN0aW9uLmpzcD9ub2RlSWQ9Li4uCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0VG9nZ2xlTm9kZUFjdGlvbkhyZWYoKQotICB7Ci0gICAgcmV0dXJuIFRvZ2dsZU5hdmlnYXRvck5vZGVBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWRfLGlzT3Blbl8pOwotICB9Ci0KLSAgLy8gdWRkaS9hY3Rpb25zL1NlbGVjdE5hdmlnYXRvck5vZGVBY3Rpb24uanNwP25vZGVJZD0uLi4KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRMaW5rQWN0aW9uSHJlZigpCi0gIHsKLSAgICByZXR1cm4gU2VsZWN0TmF2aWdhdG9yTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZF8sZmFsc2UpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvVURESU5hdmlnYXRvck5vZGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9VRERJTmF2aWdhdG9yTm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZGUwNzI4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9VRERJTmF2aWdhdG9yTm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLlNlbGVjdE5hdmlnYXRvck5vZGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5Ub2dnbGVOYXZpZ2F0b3JOb2RlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBVRERJTmF2aWdhdG9yTm9kZSBleHRlbmRzIE5vZGUKLXsKLSAgcHVibGljIFVERElOYXZpZ2F0b3JOb2RlKFRyZWVFbGVtZW50IGVsZW1lbnQsTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsaW50IG5vZGVEZXB0aCxTdHJpbmcgaW1hZ2VQYXRoKQotICB7Ci0gICAgc3VwZXIoZWxlbWVudCxub2RlTWFuYWdlcixub2RlRGVwdGgsaW1hZ2VQYXRoKTsKLSAgfQotCi0gIC8vIHVkZGkvYWN0aW9ucy9Ub2dnbGVOYXZpZ2F0b3JOb2RlQWN0aW9uLmpzcD9ub2RlSWQ9Li4uCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0VG9nZ2xlTm9kZUFjdGlvbkhyZWYoKQotICB7Ci0gICAgcmV0dXJuIFRvZ2dsZU5hdmlnYXRvck5vZGVBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWRfLGlzT3Blbl8pOwotICB9Ci0KLSAgLy8gdWRkaS9hY3Rpb25zL1NlbGVjdE5hdmlnYXRvck5vZGVBY3Rpb24uanNwP25vZGVJZD0uLi4KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRMaW5rQWN0aW9uSHJlZigpCi0gIHsKLSAgICByZXR1cm4gU2VsZWN0TmF2aWdhdG9yTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZF8sZmFsc2UpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgYWRkQXV0aGVudGljYXRpb25Qcm9wZXJ0aWVzKFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50KQotICB7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9VRERJUGVyc3BlY3RpdmUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9VRERJUGVyc3BlY3RpdmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjdjYmRiNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvVURESVBlcnNwZWN0aXZlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjI0ICAgMTIyNzUyIGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5CYXNpY01vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLmZhdm9yaXRlcy5GYXZvcml0ZXNSZWdpc3RyeVR5cGVEZWZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLkFkZFJlZ2lzdHJ5VG9VRERJUGVyc3BlY3RpdmVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzTWFpbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzVURESVJlZ2lzdHJ5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC5GYXZvcml0ZXNVRERJUmVnaXN0cnlGb2xkZXJFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5PcGVuUmVnaXN0cnlBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5SZWdGaW5kU2VydmljZVVVSURBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5Td2l0Y2hQZXJzcGVjdGl2ZUZyb21VRERJQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5DYXRlZ29yeU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlVERElNYWluRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5VUkxVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5WYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5mYXZvcml0ZXMuSUZhdm9yaXRlc1VERElSZWdpc3RyeTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci0KLXB1YmxpYyBjbGFzcyBVRERJUGVyc3BlY3RpdmUgZXh0ZW5kcyBQZXJzcGVjdGl2ZQotewotICBwcml2YXRlIEhhc2h0YWJsZSBrbm93blJlZ2lzdHJpZXNfOwotICBwcml2YXRlIElGYXZvcml0ZXNVRERJUmVnaXN0cnkgZGVmYXVsdFVERElSZWdpc3RyeV87Ci0gIHByaXZhdGUgTW9kZWwgbmF2aWdhdG9yTW9kZWxfOwotICBwcml2YXRlIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXJfOwotICBwcml2YXRlIGludCB3c2RsVHlwZV87Ci0gIHByaXZhdGUgSGFzaHRhYmxlIGNhdGVnb3J5TWFuYWdlcnNfOwotICBTdHJpbmcgY2F0ZWdvcnlUTW9kZWxLZXlfOwotICAKLSAgLy8gV2luZG93IHNpemVzCi0gIHByaXZhdGUgU3RyaW5nIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29sc187Ci0gIHByaXZhdGUgU3RyaW5nIHNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXzsKLSAgcHJpdmF0ZSBTdHJpbmcgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c187Ci0gIHByaXZhdGUgU3RyaW5nIHNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c187Ci0KLSAgcHVibGljIFVERElQZXJzcGVjdGl2ZShDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcigidWRkaSIsY29udHJvbGxlcik7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBpbml0UGVyc3BlY3RpdmUoU2VydmxldENvbnRleHQgYXBwbGljYXRpb24pCi0gIHsKLSAgICBTdHJpbmcgZGVmYXVsdEZhdm9yaXRlcyA9IGNvbnRyb2xsZXJfLmdldERlZmF1bHRGYXZvcml0ZXNMb2NhdGlvbigpOwotCUZhdm9yaXRlc1JlZ2lzdHJ5VHlwZURlZmF1bHQgZmF2UmVnVHlwZURlZmF1bHQgPSBuZXcgRmF2b3JpdGVzUmVnaXN0cnlUeXBlRGVmYXVsdChkZWZhdWx0RmF2b3JpdGVzKTsKLSAgICBJRmF2b3JpdGVzVURESVJlZ2lzdHJ5W10gZmF2UmVnaXN0cmllc0RlZmF1bHQgPSBmYXZSZWdUeXBlRGVmYXVsdC5nZXRGYXZvcml0ZXNVRERJUmVnaXN0cmllcygpOwotICAgIGtub3duUmVnaXN0cmllc18gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgZm9yIChpbnQgaT0wO2k8ZmF2UmVnaXN0cmllc0RlZmF1bHQubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICBrbm93blJlZ2lzdHJpZXNfLnB1dChmYXZSZWdpc3RyaWVzRGVmYXVsdFtpXS5nZXRJbnF1aXJ5VVJMKCksZmF2UmVnaXN0cmllc0RlZmF1bHRbaV0pOwotICAgIH0KLSAgICBpZiAoZmF2UmVnaXN0cmllc0RlZmF1bHQubGVuZ3RoID4gMCkKLSAgICAgIGRlZmF1bHRVRERJUmVnaXN0cnlfID0gZmF2UmVnaXN0cmllc0RlZmF1bHRbMF07Ci0gICAgCi0gICAgbmF2aWdhdG9yTW9kZWxfID0gbmV3IEJhc2ljTW9kZWwoInVkZGlNb2RlbCIpOwotICAgIFVERElNYWluRWxlbWVudCB1ZGRpTWFpbkVsZW1lbnQgPSBuZXcgVURESU1haW5FbGVtZW50KGdldE1lc3NhZ2UoIk5PREVfTkFNRV9VRERJX01BSU4iKSxuYXZpZ2F0b3JNb2RlbF8pOwotICAgIG5hdmlnYXRvck1vZGVsXy5zZXRSb290RWxlbWVudCh1ZGRpTWFpbkVsZW1lbnQpOwotICAgIG5hdmlnYXRvck1hbmFnZXJfID0gbmV3IE5vZGVNYW5hZ2VyKGNvbnRyb2xsZXJfKTsKLSAgICBVRERJTWFpbk5vZGUgdWRkaU1haW5Ob2RlID0gbmV3IFVERElNYWluTm9kZSh1ZGRpTWFpbkVsZW1lbnQsbmF2aWdhdG9yTWFuYWdlcl8pOwotICAgIG5hdmlnYXRvck1hbmFnZXJfLnNldFJvb3ROb2RlKHVkZGlNYWluTm9kZSk7Ci0KLSAgICB3c2RsVHlwZV8gPSBVRERJQWN0aW9uSW5wdXRzLldTRExfVFlQRV9TRVJWSUNFX0lOVEVSRkFDRTsKLSAgICBjYXRlZ29yeU1hbmFnZXJzXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICAKLSAgICAvLyBJbml0aWFsaXplIHRoZSBkZWZhdWx0IGNhdGVnb3J5IG1vZGVscy4KLSAgICBpZiAoYXBwbGljYXRpb24uZ2V0QXR0cmlidXRlKCJjb21tb25DYXRlZ29yeU1vZGVscyIpID09IG51bGwpCi0gICAgewotICAgICAgc3luY2hyb25pemVkIChhcHBsaWNhdGlvbikKLSAgICAgIHsKLSAgICAgICAgaWYgKGFwcGxpY2F0aW9uLmdldEF0dHJpYnV0ZSgiY29tbW9uQ2F0ZWdvcnlNb2RlbHMiKSA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgSGFzaHRhYmxlIGNvbW1vbkNhdGVnb3J5TW9kZWxzID0gbmV3IEhhc2h0YWJsZSgpOwotCQkgIAotICAgICAgICAgIENhdGVnb3J5TW9kZWwgbmFpY3NNb2RlbCA9IG5ldyBDYXRlZ29yeU1vZGVsKCk7Ci0gICAgICAgICAgbmFpY3NNb2RlbC5zZXRTZXJ2bGV0Q29udGV4dChhcHBsaWNhdGlvbik7Ci0gICAgICAgICAgbmFpY3NNb2RlbC5zZXREZWZhdWx0RGF0YUZpbGUoIi91ZGRpL2RhdGEvbmFpY3MtZGF0YS50eHQiKTsKLSAgICAgICAgICBuYWljc01vZGVsLnNldERpc3BsYXlOYW1lKGdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0NBVEVHT1JZX05BSUNTIikpOwotICAgICAgICAgIG5haWNzTW9kZWwuc2V0VE1vZGVsS2V5KFRNb2RlbC5OQUlDU19UTU9ERUxfS0VZKTsKLSAgICAgICAgICBjb21tb25DYXRlZ29yeU1vZGVscy5wdXQoVE1vZGVsLk5BSUNTX1RNT0RFTF9LRVksbmFpY3NNb2RlbCk7Ci0gICAgICAgICAgCi0gICAgICAgICAgQ2F0ZWdvcnlNb2RlbCB1bnNwc2NNb2RlbCA9IG5ldyBDYXRlZ29yeU1vZGVsKCk7Ci0JCSAgdW5zcHNjTW9kZWwuc2V0U2VydmxldENvbnRleHQoYXBwbGljYXRpb24pOwotICAgICAgICAgIHVuc3BzY01vZGVsLnNldERlZmF1bHREYXRhRmlsZSgiL3VkZGkvZGF0YS91bnNwc2MtZGF0YS50eHQiKTsKLSAgICAgICAgICB1bnNwc2NNb2RlbC5zZXREaXNwbGF5TmFtZShnZXRNZXNzYWdlKCJGT1JNX09QVElPTl9DQVRFR09SWV9VTlNQU0NfNzMiKSk7Ci0gICAgICAgICAgdW5zcHNjTW9kZWwuc2V0VE1vZGVsS2V5KFRNb2RlbC5VTlNQU0NfNzNfVE1PREVMX0tFWSk7Ci0gICAgICAgICAgY29tbW9uQ2F0ZWdvcnlNb2RlbHMucHV0KFRNb2RlbC5VTlNQU0NfNzNfVE1PREVMX0tFWSx1bnNwc2NNb2RlbCk7Ci0gICAgICAgICAgCi0gICAgICAgICAgQ2F0ZWdvcnlNb2RlbCBnZW9Nb2RlbCA9IG5ldyBDYXRlZ29yeU1vZGVsKCk7Ci0JCSAgZ2VvTW9kZWwuc2V0U2VydmxldENvbnRleHQoYXBwbGljYXRpb24pOwotICAgICAgICAgIGdlb01vZGVsLnNldERlZmF1bHREYXRhRmlsZSgiL3VkZGkvZGF0YS9nZW8tZGF0YS50eHQiKTsKLSAgICAgICAgICBnZW9Nb2RlbC5zZXREaXNwbGF5TmFtZShnZXRNZXNzYWdlKCJGT1JNX09QVElPTl9DQVRFR09SWV9HRU8iKSk7Ci0gICAgICAgICAgZ2VvTW9kZWwuc2V0VE1vZGVsS2V5KFRNb2RlbC5JU09fQ0hfVE1PREVMX0tFWSk7Ci0gICAgICAgICAgY29tbW9uQ2F0ZWdvcnlNb2RlbHMucHV0KFRNb2RlbC5JU09fQ0hfVE1PREVMX0tFWSxnZW9Nb2RlbCk7Ci0gICAgICAgICAgCi0gICAgICAgICAgYXBwbGljYXRpb24uc2V0QXR0cmlidXRlKCJjb21tb25DYXRlZ29yeU1vZGVscyIsY29tbW9uQ2F0ZWdvcnlNb2RlbHMpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGVnb3J5VE1vZGVsS2V5XyA9IG51bGw7Ci0gICAgCi0gICAgLy8gU3RhcnRpbmcgZnJhbWVzZXQgc2l6ZXMuCi0gICAgaWYgKCFEaXJVdGlscy5pc1JUTCgpKQotICAgICAgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXyA9ICIzMCUsKiI7Ci0gICAgZWxzZQotICAgICAgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXyA9ICIqLDMwJSI7Ci0gICAgc2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfID0gcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXzsKLSAgICBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzXyA9ICI3NSUsKiI7Ci0gICAgc2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzXyA9IGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3NfOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgSGFzaHRhYmxlIGdldEtub3duUmVnaXN0cmllcygpCi0gIHsKLSAgICAvLyBXZSBtdXN0IGFsd2F5cyBxdWVyeSB0aGUgZmF2b3JpdGVzIHRvIHNlZSBpZiBhZGRpdGlvbmFsIHJlZ2lzdHJpZXMgd2VyZSBhZGRlZCBvdmVyIHRpbWUuIFRoaXMgcHJvcGVydHkgY2Fubm90IGJlIGNhY2hlZC4KLSAgICBGYXZvcml0ZXNNYWluRWxlbWVudCBmYXZNYWluRWxlbWVudCA9IChGYXZvcml0ZXNNYWluRWxlbWVudCkoY29udHJvbGxlcl8uZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpLmdldFJvb3ROb2RlKCkuZ2V0VHJlZUVsZW1lbnQoKSk7Ci0gICAgRmF2b3JpdGVzVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudCBmYXZSZWdGb2xkZXJFbGVtZW50ID0gZmF2TWFpbkVsZW1lbnQuZ2V0RmF2b3JpdGVzVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudCgpOwotICAgIEVudW1lcmF0aW9uIGUgPSBmYXZSZWdGb2xkZXJFbGVtZW50LmdldEFsbEZhdm9yaXRlcygpOwotICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIEZhdm9yaXRlc1VERElSZWdpc3RyeUVsZW1lbnQgZmF2UmVnRWxlbWVudCA9IChGYXZvcml0ZXNVRERJUmVnaXN0cnlFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICAgIFN0cmluZyBpbnF1aXJ5VVJMID0gZmF2UmVnRWxlbWVudC5nZXRJbnF1aXJ5VVJMKCk7Ci0gICAgICBpZiAoa25vd25SZWdpc3RyaWVzXy5nZXQoaW5xdWlyeVVSTCkgPT0gbnVsbCkKLSAgICAgICAga25vd25SZWdpc3RyaWVzXy5wdXQoaW5xdWlyeVVSTCxmYXZSZWdFbGVtZW50LmdldElGYXZvcml0ZXNVRERJUmVnaXN0cnlJbnRlcmZhY2UoKSk7Ci0gICAgfQotICAgIHJldHVybiBrbm93blJlZ2lzdHJpZXNfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRLbm93blJlZ2lzdHJ5UHVibGlzaFVSTChTdHJpbmcgaW5xdWlyeVVSTCkKLSAgewotICAgIElGYXZvcml0ZXNVRERJUmVnaXN0cnkga25vd25SZWdpc3RyeSA9IChJRmF2b3JpdGVzVURESVJlZ2lzdHJ5KWdldEtub3duUmVnaXN0cmllcygpLmdldChpbnF1aXJ5VVJMKTsKLSAgICBpZiAoa25vd25SZWdpc3RyeSAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyBwdWJsaXNoVVJMID0ga25vd25SZWdpc3RyeS5nZXRQdWJsaXNoVVJMKCk7Ci0gICAgICBpZiAoVmFsaWRhdG9yLnZhbGlkYXRlVVJMKHB1Ymxpc2hVUkwpKQotICAgICAgICByZXR1cm4gcHVibGlzaFVSTDsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEtub3duUmVnaXN0cnlSZWdpc3RyYXRpb25VUkwoU3RyaW5nIGlucXVpcnlVUkwpCi0gIHsKLSAgICBJRmF2b3JpdGVzVURESVJlZ2lzdHJ5IGtub3duUmVnaXN0cnkgPSAoSUZhdm9yaXRlc1VERElSZWdpc3RyeSlnZXRLbm93blJlZ2lzdHJpZXMoKS5nZXQoaW5xdWlyeVVSTCk7Ci0gICAgaWYgKGtub3duUmVnaXN0cnkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgcmVnaXN0cmF0aW9uVVJMID0ga25vd25SZWdpc3RyeS5nZXRSZWdpc3RyYXRpb25VUkwoKTsKLSAgICAgIGlmIChWYWxpZGF0b3IudmFsaWRhdGVVUkwocmVnaXN0cmF0aW9uVVJMKSkKLSAgICAgICAgcmV0dXJuIHJlZ2lzdHJhdGlvblVSTDsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7ICAgIAotICB9Ci0KLSAgcHVibGljIGZpbmFsIElGYXZvcml0ZXNVRERJUmVnaXN0cnkgZ2V0RGVmYXVsdFVERElSZWdpc3RyeSgpCi0gIHsKLSAgICByZXR1cm4gZGVmYXVsdFVERElSZWdpc3RyeV87Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHByZWxvYWRVRERJUmVnaXN0cmllcyhTdHJpbmdbXSBpbnF1aXJ5VVJMcywgU3RyaW5nW10gcHVibGlzaFVSTHMpCi0gIHsKLSAgICBpZiAoaW5xdWlyeVVSTHMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBIYXNodGFibGUga25vd25SZWdpc3RyaWVzID0gZ2V0S25vd25SZWdpc3RyaWVzKCk7Ci0gICAgICBTdHJpbmdCdWZmZXIgZGlyZWN0b3J5QnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnF1aXJ5VVJMcy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLQkJU3RyaW5nIGlucXVpcnlVUkwgPSBVUkxVdGlscy5kZWNvZGUoaW5xdWlyeVVSTHNbaV0pOwotICAgICAgICBTdHJpbmcgcHVibGlzaFVSTCA9IG51bGw7Ci0gICAgICAgIFN0cmluZyByZWdOYW1lID0gbnVsbDsKLSAgICAgICAgU3RyaW5nIHJlZ2lzdHJhdGlvblVSTCA9IG51bGw7Ci0gICAgICAgIC8vIGNvbnRpbnVlIHRvIHRoZSBuZXh0IHJlZ2lzdHJ5IGlmIGlucXVpcnlVUkwgZG9lcyBub3QgZXhpc3QKLSAgICAgICAgaWYgKCFWYWxpZGF0b3IudmFsaWRhdGVVUkwoaW5xdWlyeVVSTCkpCi0gICAgICAgICAgY29udGludWU7Ci0gICAgICAgIC8vIHBvcHVsYXRlIGFuZCBydW4gYW4gT3BlblJlZ2lzdHJ5QWN0aW9uCi0gICAgICAgIE9wZW5SZWdpc3RyeUFjdGlvbiBhY3Rpb24gPSBuZXcgT3BlblJlZ2lzdHJ5QWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICAgICAgSGFzaHRhYmxlIHByb3BlcnR5VGFibGUgPSBhY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotICAgICAgICBJRmF2b3JpdGVzVURESVJlZ2lzdHJ5IGtub3duUmVnaXN0cnkgPSAoSUZhdm9yaXRlc1VERElSZWdpc3RyeSlrbm93blJlZ2lzdHJpZXMuZ2V0KGlucXVpcnlVUkwpOwotICAgICAgICBib29sZWFuIGNoZWNrRm9yVXNlckRlZmluZWRDYXRlZ29yaWVzID0gZmFsc2U7Ci0gICAgICAgIEZpbGUgZGlyZWN0b3J5RmlsZSA9IG51bGw7Ci0gICAgICAgIGlmIChrbm93blJlZ2lzdHJ5ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBwdWJsaXNoVVJMID0ga25vd25SZWdpc3RyeS5nZXRQdWJsaXNoVVJMKCk7Ci0gICAgICAgICAgcmVnTmFtZSA9IGtub3duUmVnaXN0cnkuZ2V0TmFtZSgpOwotICAgICAgICAgIHJlZ2lzdHJhdGlvblVSTCA9IGtub3duUmVnaXN0cnkuZ2V0UmVnaXN0cmF0aW9uVVJMKCk7Ci0gICAgICAgICAgZGlyZWN0b3J5QnVmZmVyLnNldExlbmd0aCgwKTsKLSAgICAgICAgICBGYXZvcml0ZXNVRERJUmVnaXN0cnlGb2xkZXJFbGVtZW50LmZvcm1DYXRlZ29yaWVzRGlyZWN0b3J5KGRpcmVjdG9yeUJ1ZmZlcixjb250cm9sbGVyXy5nZXRTZXJ2bGV0RW5naW5lU3RhdGVMb2NhdGlvbigpLHJlZ05hbWUpOwotICAgICAgICAgIGRpcmVjdG9yeUZpbGUgPSBuZXcgRmlsZShkaXJlY3RvcnlCdWZmZXIudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgaWYgKGRpcmVjdG9yeUZpbGUuZXhpc3RzKCkgJiYgZGlyZWN0b3J5RmlsZS5saXN0RmlsZXMoKS5sZW5ndGggPiAwKQotICAgICAgICAgICAgY2hlY2tGb3JVc2VyRGVmaW5lZENhdGVnb3JpZXMgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChyZWdOYW1lID09IG51bGwpCi0gICAgICAgICAgcmVnTmFtZSA9IGlucXVpcnlVUkw7Ci0gICAgICAgIGlmIChwdWJsaXNoVVJMID09IG51bGwgJiYgcHVibGlzaFVSTHMgIT0gbnVsbCAmJiBpIDwgcHVibGlzaFVSTHMubGVuZ3RoICYmIHB1Ymxpc2hVUkxzW2ldICE9IG51bGwpIHsKLSAgICAgICAgICBwdWJsaXNoVVJMID0gVVJMVXRpbHMuZGVjb2RlKHB1Ymxpc2hVUkxzW2ldKTsKLSAgICAgICAgfSAgCi0gICAgICAgIC8vIHBvcHVsYXRlIHRoZSBhY3Rpb24KLSAgICAgICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5JTlFVSVJZX1VSTCwgaW5xdWlyeVVSTCk7Ci0gICAgICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUkVHSVNUUllfTkFNRSwgcmVnTmFtZSk7Ci0gICAgICAgIGlmIChWYWxpZGF0b3IudmFsaWRhdGVVUkwocHVibGlzaFVSTCkpCi0gICAgICAgICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5QVUJMSVNIX1VSTCwgcHVibGlzaFVSTCk7Ci0gICAgICAgIGlmIChWYWxpZGF0b3IudmFsaWRhdGVVUkwocmVnaXN0cmF0aW9uVVJMKSkKLSAgICAgICAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlJFR0lTVFJBVElPTl9VUkwsIHJlZ2lzdHJhdGlvblVSTCk7Ci0gICAgICAgICAgCi0gICAgICAgIC8vIENoZWNrIGlmIHByaXZhdGUgcmVnaXN0cnkgY2F0ZWdvcnkgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIGZvciB0aGlzIHJlZ2lzdHJ5LgotICAgICAgICBkaXJlY3RvcnlCdWZmZXIuc2V0TGVuZ3RoKDApOwotICAgICAgICBTdHJpbmcgZW5jb2RlZElucXVpcnlVUkwgPSBVUkxVdGlscy5lbmNvZGUoaW5xdWlyeVVSTCk7Ci0gICAgICAgIGRpcmVjdG9yeUJ1ZmZlci5hcHBlbmQoY29udHJvbGxlcl8uZ2V0U2VydmxldEVuZ2luZVN0YXRlTG9jYXRpb24oKSkuYXBwZW5kKGVuY29kZWRJbnF1aXJ5VVJMKS5hcHBlbmQoIi5wcm9wZXJ0aWVzIik7Ci0gICAgICAgIGRpcmVjdG9yeUZpbGUgPSBuZXcgRmlsZShkaXJlY3RvcnlCdWZmZXIudG9TdHJpbmcoKSk7Ci0gICAgICAgIGlmIChkaXJlY3RvcnlGaWxlLmV4aXN0cygpKQotICAgICAgICB7Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgUHJvcGVydGllcyBwID0gbmV3IFByb3BlcnRpZXMoKTsKLSAgICAgICAgICAgIEZpbGVJbnB1dFN0cmVhbSBmaW4gPSBuZXcgRmlsZUlucHV0U3RyZWFtKGRpcmVjdG9yeUZpbGUpOwotICAgICAgICAgICAgcC5sb2FkKGZpbik7Ci0gICAgICAgICAgICBmaW4uY2xvc2UoKTsKLSAgICAgICAgICAgIGRpcmVjdG9yeUZpbGUuZGVsZXRlKCk7Ci0gICAgICAgICAgICBTdHJpbmcgZGF0YURpcmVjdG9yeSA9IHAuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5DQVRFR09SSUVTX0RJUkVDVE9SWSk7Ci0gICAgICAgICAgICBpZiAoZGF0YURpcmVjdG9yeSAhPSBudWxsKQotICAgICAgICAgICAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLkNBVEVHT1JJRVNfRElSRUNUT1JZLGRhdGFEaXJlY3RvcnkpOwotICAgICAgICAgICAgY2hlY2tGb3JVc2VyRGVmaW5lZENhdGVnb3JpZXMgPSB0cnVlOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja0ZvclVzZXJEZWZpbmVkQ2F0ZWdvcmllcyA9IGZhbHNlOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChjaGVja0ZvclVzZXJEZWZpbmVkQ2F0ZWdvcmllcykKLSAgICAgICAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLkNIRUNLX1VTRVJfREVGSU5FRF9DQVRFR09SSUVTLEJvb2xlYW4uVFJVRSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBwcm9wZXJ0eVRhYmxlLnJlbW92ZShVRERJQWN0aW9uSW5wdXRzLkNIRUNLX1VTRVJfREVGSU5FRF9DQVRFR09SSUVTKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgLy8gcnVuIHRoZSBhY3Rpb24KLSAgICAgICAgYWN0aW9uLnJ1bigpOwotICAgICAgICAKLSAgICAgICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KShuYXZpZ2F0b3JNYW5hZ2VyXy5nZXRTZWxlY3RlZE5vZGUoKS5nZXRUcmVlRWxlbWVudCgpKTsKLSAgICAgICAgRW51bWVyYXRpb24gdXNlckRlZmluZWRDYXRlZ29yaWVzID0gcmVnRWxlbWVudC5nZXRVc2VyRGVmaW5lZENhdGVnb3JpZXMoKTsKLSAgICAgICAgaWYgKHVzZXJEZWZpbmVkQ2F0ZWdvcmllcyAhPSBudWxsICYmIHVzZXJEZWZpbmVkQ2F0ZWdvcmllcy5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgICAgewotICAgICAgICAgIEFkZFJlZ2lzdHJ5VG9VRERJUGVyc3BlY3RpdmVBY3Rpb24gYWN0aW9uMiA9IG5ldyBBZGRSZWdpc3RyeVRvVURESVBlcnNwZWN0aXZlQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICAgICAgICBTdHJpbmcgY2F0ZWdvcmllc0RpcmVjdG9yeSA9IHJlZ0VsZW1lbnQuZ2V0Q2F0ZWdvcmllc0RpcmVjdG9yeSgpOwotICAgICAgICAgIGlmIChjYXRlZ29yaWVzRGlyZWN0b3J5ICE9IG51bGwpCi0gICAgICAgICAgICBhY3Rpb24yLmxpbmtDYXRlZ29yeU1vZGVsc1dpdGhTYXZlZERhdGEodXNlckRlZmluZWRDYXRlZ29yaWVzLGNhdGVnb3JpZXNEaXJlY3RvcnkpOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFjdGlvbjIubGlua0NhdGVnb3J5TW9kZWxzV2l0aFNhdmVkRGF0YShyZWdFbGVtZW50LmdldE5hbWUoKSx1c2VyRGVmaW5lZENhdGVnb3JpZXMpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAoaW5xdWlyeVVSTHMubGVuZ3RoID4gMCkKLSAgICAgICAgY29udHJvbGxlcl8uc2V0Q3VycmVudFBlcnNwZWN0aXZlKEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9VRERJKTsKLSAgICB9Ci0gIH0KLSAgCi0gIC8vIFByZWNvbmRpdGlvbnM6IAotICAvLyBzZXJ2aWNlTmFtZXMgYW5kIHNlcnZpY2VLZXlzIGhhdmUgbGVuZ3RoID49IDEuCi0gIC8vIHJlZ05vZGUgIT0gbnVsbAotICBwcml2YXRlIGZpbmFsIHZvaWQgcHJlbG9hZFNlcnZpY2VzRm9yUmVnaXN0cnkoUmVnaXN0cnlOb2RlIHJlZ05vZGUsU3RyaW5nW10gc2VydmljZU5hbWVzLFN0cmluZ1tdIHNlcnZpY2VLZXlzKQotICB7Ci0gICAgaW50IHJlZ05vZGVJZCA9IHJlZ05vZGUuZ2V0Tm9kZUlkKCk7Ci0gICAgZm9yIChpbnQgaT0wO2k8c2VydmljZUtleXMubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICBuYXZpZ2F0b3JNYW5hZ2VyXy5zZXRTZWxlY3RlZE5vZGVJZChyZWdOb2RlSWQpOwotICAgICAgUmVnRmluZFNlcnZpY2VVVUlEQWN0aW9uIGFjdGlvbiA9IG5ldyBSZWdGaW5kU2VydmljZVVVSURBY3Rpb24oY29udHJvbGxlcl8pOwotICAgICAgSGFzaHRhYmxlIHByb3BlcnR5VGFibGUgPSBhY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotICAgICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9OQU1FLHNlcnZpY2VOYW1lc1tpXSk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9LRVksc2VydmljZUtleXNbaV0pOwotICAgICAgYWN0aW9uLnJ1bigpOwotICAgICAgbmF2aWdhdG9yTWFuYWdlcl8ubWFrZVNlbGVjdGVkTm9kZVZpc2libGUoKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHByZWxvYWRTZXJ2aWNlcyhTdHJpbmdbXSBpbnF1aXJ5VVJMcyxTdHJpbmdbXSBzZXJ2aWNlTmFtZXMsU3RyaW5nW10gc2VydmljZUtleXMpCi0gIHsKLSAgICAvLyBUaGUgYWxnb3JpdGhtIHdpbGwgc2VhcmNoIGZvciBlYWNoIHNlcnZpY2Uga2V5IGluIGVhY2ggaW5xdWlyeSBVUkwuCi0gICAgaWYgKHNlcnZpY2VLZXlzICE9IG51bGwgJiYgc2VydmljZU5hbWVzICE9IG51bGwgJiYgc2VydmljZU5hbWVzLmxlbmd0aCA9PSBzZXJ2aWNlS2V5cy5sZW5ndGgpCi0gICAgewotICAgICAgZm9yIChpbnQgaT0wO2k8c2VydmljZUtleXMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgaWYgKGlucXVpcnlVUkxzICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBFbGltaW5hdGUgZHVwbGljYXRlIGlucXVpcnkgVVJMcy4KLSAgICAgICAgICBIYXNodGFibGUgaW5xdWlyeVVSTHNIYXNoID0gbmV3IEhhc2h0YWJsZSgpOwotICAgICAgICAgIGZvciAoaW50IGo9MDtqPGlucXVpcnlVUkxzLmxlbmd0aDtqKyspCi0gICAgICAgICAgICBpbnF1aXJ5VVJMc0hhc2gucHV0KGlucXVpcnlVUkxzW2pdLEJvb2xlYW4uVFJVRSk7Ci0gICAgICAgICAgLy8gTG9vcCB0aHJvdWdoIGFsbCB0aGUgYXZhaWxhYmxlIHJlZ2lzdHJpZXMgYW5kIHVzZSB0aGVtIGlmIHBvc3NpYmxlLgotICAgICAgICAgIE5vZGUgdWRkaU1haW5Ob2RlID0gbmF2aWdhdG9yTWFuYWdlcl8uZ2V0Um9vdE5vZGUoKTsKLSAgICAgICAgICBWZWN0b3IgcmVnaXN0cnlOb2RlcyA9IHVkZGlNYWluTm9kZS5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICAgICAgZm9yIChpbnQgaz0wO2s8cmVnaXN0cnlOb2Rlcy5zaXplKCk7aysrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFJlZ2lzdHJ5Tm9kZSByZWdOb2RlID0gKFJlZ2lzdHJ5Tm9kZSlyZWdpc3RyeU5vZGVzLmVsZW1lbnRBdChrKTsKLSAgICAgICAgICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICAgICAgICBTdHJpbmcgZXhpc3RpbmdSZWdpc3RyeUlucXVpcnlVUkwgPSByZWdFbGVtZW50LmdldElucXVpcnlVUkwoKTsKLSAgICAgICAgICAgIGlmIChpbnF1aXJ5VVJMc0hhc2guZ2V0KGV4aXN0aW5nUmVnaXN0cnlJbnF1aXJ5VVJMKSAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBwcmVsb2FkU2VydmljZXNGb3JSZWdpc3RyeShyZWdOb2RlLHNlcnZpY2VOYW1lcyxzZXJ2aWNlS2V5cyk7Ci0gICAgICAgICAgICAgIGlucXVpcnlVUkxzSGFzaC5yZW1vdmUoZXhpc3RpbmdSZWdpc3RyeUlucXVpcnlVUkwpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBFbnVtZXJhdGlvbiBpbnF1aXJ5VVJMc0VudW0gPSBpbnF1aXJ5VVJMc0hhc2gua2V5cygpOwotICAgICAgICAgIHdoaWxlIChpbnF1aXJ5VVJMc0VudW0uaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIGlucXVpcnlVUkwgPSAoU3RyaW5nKWlucXVpcnlVUkxzRW51bS5uZXh0RWxlbWVudCgpOwotICAgICAgICAgICAgcHJlbG9hZFVERElSZWdpc3RyaWVzKG5ldyBTdHJpbmdbXSB7aW5xdWlyeVVSTH0sbnVsbCk7Ci0gICAgICAgICAgICBSZWdpc3RyeU5vZGUgcmVnTm9kZSA9IChSZWdpc3RyeU5vZGUpbmF2aWdhdG9yTWFuYWdlcl8uZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgICAgICAgICBwcmVsb2FkU2VydmljZXNGb3JSZWdpc3RyeShyZWdOb2RlLHNlcnZpY2VOYW1lcyxzZXJ2aWNlS2V5cyk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0Q2F0ZWdvcnlUTW9kZWxLZXkoU3RyaW5nIGNhdGVnb3J5VE1vZGVsS2V5KQotICB7Ci0gICAgY2F0ZWdvcnlUTW9kZWxLZXlfID0gY2F0ZWdvcnlUTW9kZWxLZXk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0Q2F0ZWdvcnlUTW9kZWxLZXkoKQotICB7Ci0gICAgcmV0dXJuIGNhdGVnb3J5VE1vZGVsS2V5XzsKLSAgfQotICAKLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIGluaXRDYXRlZ29yeUJyb3dzZXIoQ2F0ZWdvcnlNb2RlbCBjYXRlZ29yeU1vZGVsLE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyKQotICB7Ci0gICAgVHJlZUVsZW1lbnQgY2F0ZWdvcnlSb290RWxlbWVudCA9IChUcmVlRWxlbWVudCljYXRlZ29yeU1vZGVsLmdldFJvb3RFbGVtZW50KCk7Ci0gICAgUm9vdENhdGVnb3J5Tm9kZSByb290Q2F0ZWdvcnlOb2RlID0gbmV3IFJvb3RDYXRlZ29yeU5vZGUoY2F0ZWdvcnlSb290RWxlbWVudCxub2RlTWFuYWdlcik7Ci0gICAgbm9kZU1hbmFnZXIuc2V0Um9vdE5vZGUocm9vdENhdGVnb3J5Tm9kZSk7Ci0gICAgcm9vdENhdGVnb3J5Tm9kZS5jcmVhdGVDaGlsZHJlbigpOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgTm9kZU1hbmFnZXIgZ2V0Q2F0ZWdvcnlNYW5hZ2VyKCkKLSAgewotICAgIHJldHVybiAoTm9kZU1hbmFnZXIpY2F0ZWdvcnlNYW5hZ2Vyc18uZ2V0KGNhdGVnb3J5VE1vZGVsS2V5Xyk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBOb2RlTWFuYWdlciBnZXRDYXRlZ29yeU1hbmFnZXIoQ2F0ZWdvcnlNb2RlbCBjYXRlZ29yeU1vZGVsKQotICB7Ci0gICAgU3RyaW5nIHRNb2RlbEtleSA9IGNhdGVnb3J5TW9kZWwuZ2V0VE1vZGVsS2V5KCk7Ci0gICAgTm9kZU1hbmFnZXIgY2F0ZWdvcnlNYW5hZ2VyID0gKE5vZGVNYW5hZ2VyKWNhdGVnb3J5TWFuYWdlcnNfLmdldCh0TW9kZWxLZXkpOwotICAgIGlmIChjYXRlZ29yeU1hbmFnZXIgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBjYXRlZ29yeU1hbmFnZXIgPSBuZXcgTm9kZU1hbmFnZXIoY29udHJvbGxlcl8pOwotICAgICAgaW5pdENhdGVnb3J5QnJvd3NlcihjYXRlZ29yeU1vZGVsLGNhdGVnb3J5TWFuYWdlcik7Ci0gICAgICBjYXRlZ29yeU1hbmFnZXJzXy5wdXQodE1vZGVsS2V5LGNhdGVnb3J5TWFuYWdlcik7ICAgICAgCi0gICAgfQotICAgIHJldHVybiBjYXRlZ29yeU1hbmFnZXI7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgTm9kZU1hbmFnZXIgZ2V0TmF2aWdhdG9yTWFuYWdlcigpCi0gIHsKLSAgICByZXR1cm4gbmF2aWdhdG9yTWFuYWdlcl87Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBOb2RlTWFuYWdlciBnZXROb2RlTWFuYWdlcigpCi0gIHsKLSAgICByZXR1cm4gZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0V1NETFR5cGUoaW50IHdzZGxUeXBlKQotICB7Ci0gICAgd3NkbFR5cGVfID0gd3NkbFR5cGU7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgaW50IGdldFdTRExUeXBlKCkKLSAgewotICAgIHJldHVybiB3c2RsVHlwZV87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFBlcnNwZWN0aXZlQ29udGVudFBhZ2UoKQotICB7Ci0gICAgcmV0dXJuICJ1ZGRpL3VkZGlfcGVyc3BlY3RpdmVfY29udGVudC5qc3AiOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGludCBnZXRQZXJzcGVjdGl2ZUlkKCkKLSAgewotICAgIHJldHVybiBBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfVURESTsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRGcmFtZXNldHNGaWxlKCkKLSAgewotICAgIHJldHVybiAidWRkaS9zY3JpcHRzL3VkZGlmcmFtZXNldHMuanNwIjsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9jZXNzRnJhbWVzZXRzRm9ybSgpCi0gIHsKLSAgICByZXR1cm4gInVkZGkvZm9ybXMvUHJvY2Vzc1VERElGcmFtZXNldHNGb3JtLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFBhbmVzRmlsZSgpCi0gIHsKLSAgICByZXR1cm4gInVkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIjsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUcmVlQ29udGVudFZhcigpCi0gIHsKLSAgICByZXR1cm4gIm5hdmlnYXRvckNvbnRlbnQiOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUcmVlQ29udGVudFBhZ2UoKQotICB7Ci0gICAgcmV0dXJuICJ1ZGRpL25hdmlnYXRvcl9jb250ZW50LmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKQotICB7Ci0gICAgcmV0dXJuICJwcm9wZXJ0aWVzQ29udGFpbmVyIjsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclBhZ2UoKQotICB7Ci0gICAgcmV0dXJuICJ1ZGRpL3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRWYXIoKQotICB7Ci0gICAgcmV0dXJuICJzdGF0dXNDb250ZW50IjsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFBhZ2UoKQotICB7Ci0gICAgcmV0dXJuICJ1ZGRpL3N0YXR1c19jb250ZW50LmpzcCI7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U2F2ZVBlcnNwZWN0aXZlQWN0aW9uTGluaygpCi0gIHsKLSAgICAvL3JldHVybiBTYXZlVURESVBlcnNwZWN0aXZlQWN0aW9uLmdldEFjdGlvbkxpbmsoKTsKLSAgICByZXR1cm4gIiI7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCkKLSAgewotICAgIHJldHVybiBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoU3RyaW5nIGNvbHMpCi0gIHsKLSAgICBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfID0gY29sczsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoU3RyaW5nIGNvbHMpCi0gIHsKLSAgICBzYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29sc18gPSBjb2xzOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCkKLSAgewotICAgIHJldHVybiBzYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29sc187Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpCi0gIHsKLSAgICByZXR1cm4gYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c187Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoU3RyaW5nIHJvd3MpCi0gIHsKLSAgICBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzXyA9IHJvd3M7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhTdHJpbmcgcm93cykKLSAgewotICAgIHNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c18gPSByb3dzOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpCi0gIHsKLSAgICByZXR1cm4gc2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzXzsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTd2l0Y2hQZXJzcGVjdGl2ZUZvcm1BY3Rpb25MaW5rKGludCB0YXJnZXRQZXJzcGVjdGl2ZUlkLGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgewotICAgIHJldHVybiBTd2l0Y2hQZXJzcGVjdGl2ZUZyb21VRERJQWN0aW9uLmdldEZvcm1BY3Rpb25MaW5rKHRhcmdldFBlcnNwZWN0aXZlSWQsZm9ySGlzdG9yeSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9VbnB1Ymxpc2hUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3VkZGkvcGVyc3BlY3RpdmUvVW5wdWJsaXNoVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NzIyNzYyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS9wZXJzcGVjdGl2ZS9VbnB1Ymxpc2hUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy5TZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuUmVnaXN0cnlFbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgVW5wdWJsaXNoVG9vbCBleHRlbmRzIEZvcm1Ub29sCi17Ci0gIHB1YmxpYyBVbnB1Ymxpc2hUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgZW5hYmxlSW1hZ2UsIFN0cmluZyBoaWdobGlnaHRJbWFnZSwgU3RyaW5nIGFsdCkKLSAgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCBlbmFibGVJbWFnZSwgaGlnaGxpZ2h0SW1hZ2UsIGFsdCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgewotICAgIE5vZGUgbm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgcmV0dXJuIFNlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZS5nZXROb2RlSWQoKSx0b29sSWRfLG5vZGUuZ2V0Vmlld0lkKCksbm9kZS5nZXRWaWV3VG9vbElkKCksZm9ySGlzdG9yeSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBhZGRBdXRoZW50aWNhdGlvblByb3BlcnRpZXMoUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQpCi0gIHsKLSAgICBTdHJpbmcgcHVibGlzaFVSTCA9IHJlZ0VsZW1lbnQuZ2V0UHVibGlzaFVSTCgpOwotICAgIFN0cmluZyB1c2VySWQgPSByZWdFbGVtZW50LmdldFVzZXJJZCgpOwotICAgIFN0cmluZyBwYXNzd29yZCA9IHJlZ0VsZW1lbnQuZ2V0Q3JlZCgpOwotCi0gICAgaWYgKHB1Ymxpc2hVUkwgPT0gbnVsbCkKLSAgICAgIHB1Ymxpc2hVUkwgPSAiIjsKLSAgICBpZiAodXNlcklkID09IG51bGwpCi0gICAgICB1c2VySWQgPSAiIjsKLSAgICBpZiAocGFzc3dvcmQgPT0gbnVsbCkKLSAgICAgIHBhc3N3b3JkID0gIiI7Ci0KLSAgICBzZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMLHB1Ymxpc2hVUkwpOwotICAgIHNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklELHVzZXJJZCk7Ci0gICAgc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCxwYXNzd29yZCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEZvcm1MaW5rKCkKLSAgewotICAgIHJldHVybiAidWRkaS9mb3Jtcy9VbnB1Ymxpc2hGb3JtLmpzcCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdWRkaS91dGlsL1VkZGk0akhlbHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3V0aWwvVWRkaTRqSGVscGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhN2IyZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91ZGRpL3V0aWwvVWRkaTRqSGVscGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYxMDA0ICAgMTQ4MDUyIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkltcG9ydDsKLWltcG9ydCBqYXZheC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgamF2YXgud3NkbC5TZXJ2aWNlOwotaW1wb3J0IGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUEFkZHJlc3M7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEFkZHJlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5kaXNjb3ZlcnkuV2ViU2VydmljZXNQYXJzZXJFeHQ7Ci1pbXBvcnQgb3JnLnVkZGk0ai5VRERJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLk92ZXJ2aWV3RG9jOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuT3ZlcnZpZXdVUkw7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5iaW5kaW5nLkFjY2Vzc1BvaW50OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYmluZGluZy5CaW5kaW5nVGVtcGxhdGU7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5iaW5kaW5nLkJpbmRpbmdUZW1wbGF0ZXM7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5iaW5kaW5nLkluc3RhbmNlRGV0YWlsczsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJpbmRpbmcuVE1vZGVsSW5zdGFuY2VEZXRhaWxzOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYmluZGluZy5UTW9kZWxJbnN0YW5jZUluZm87Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5zZXJ2aWNlLkJ1c2luZXNzU2VydmljZTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5UTW9kZWxEZXRhaWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai50cmFuc3BvcnQuVHJhbnNwb3J0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5DYXRlZ29yeUJhZzsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuS2V5ZWRSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLnczYy5kb20uQ2hhcmFjdGVyRGF0YTsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLXB1YmxpYyBjbGFzcyBVZGRpNGpIZWxwZXIKLXsKLSAgcHVibGljIGZpbmFsIEtleWVkUmVmZXJlbmNlIGdldFdTRExLZXllZFJlZmVyZW5jZSgpCi0gIHsKLSAgICBLZXllZFJlZmVyZW5jZSBrZXlSZWYgPSBuZXcgS2V5ZWRSZWZlcmVuY2UoInR5cGVzIiwgIndzZGxTcGVjIik7Ci0gICAga2V5UmVmLnNldFRNb2RlbEtleSgiVVVJRDpDMUFDRjI2RC05NjcyLTQ0MDQtOUQ3MC0zOUI3NTZFNjJBQjQiKTsKLSAgICByZXR1cm4ga2V5UmVmOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFRNb2RlbCBuZXdUTW9kZWwoU3RyaW5nIHdzZGxVcmwpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4gbmV3VE1vZGVsKHdzZGxVcmwsIGdldFdTRExEZWZpbml0aW9uKHdzZGxVcmwpKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBUTW9kZWwgbmV3VE1vZGVsKFN0cmluZyB3c2RsVXJsLCBEZWZpbml0aW9uIGRlZikgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIFRNb2RlbCB0TW9kZWwgPSBuZXcgVE1vZGVsKCk7Ci0gICAgdE1vZGVsLnNldFRNb2RlbEtleSgiIik7Ci0gICAgdE1vZGVsLnNldE5hbWUoZGVmLmdldFRhcmdldE5hbWVzcGFjZSgpKTsKLSAgICB0TW9kZWwuc2V0RGVmYXVsdERlc2NyaXB0aW9uU3RyaW5nKCIiKTsKLSAgICBPdmVydmlld0RvYyBvdmVydmlld0RvYyA9IG5ldyBPdmVydmlld0RvYygpOwotICAgIG92ZXJ2aWV3RG9jLnNldE92ZXJ2aWV3VVJMKHdzZGxVcmwpOwotICAgIHRNb2RlbC5zZXRPdmVydmlld0RvYyhvdmVydmlld0RvYyk7Ci0gICAgQ2F0ZWdvcnlCYWcgY2F0QmFnID0gbmV3IENhdGVnb3J5QmFnKCk7Ci0gICAgVmVjdG9yIGtleVJlZlZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICBrZXlSZWZWZWN0b3IuYWRkKGdldFdTRExLZXllZFJlZmVyZW5jZSgpKTsKLSAgICBjYXRCYWcuc2V0S2V5ZWRSZWZlcmVuY2VWZWN0b3Ioa2V5UmVmVmVjdG9yKTsKLSAgICB0TW9kZWwuc2V0Q2F0ZWdvcnlCYWcoY2F0QmFnKTsKLSAgICByZXR1cm4gdE1vZGVsOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIEJ1c2luZXNzU2VydmljZSBuZXdCdXNpbmVzc1NlcnZpY2UoU3RyaW5nIHdzZGxVcmwsIEhhc2h0YWJsZSB0TW9kZWxzVGFibGUpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4gbmV3QnVzaW5lc3NTZXJ2aWNlKHdzZGxVcmwsIGdldFdTRExEZWZpbml0aW9uKHdzZGxVcmwpLCB0TW9kZWxzVGFibGUpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIEJ1c2luZXNzU2VydmljZSBuZXdCdXNpbmVzc1NlcnZpY2UoU3RyaW5nIHdzZGxVcmwsIERlZmluaXRpb24gZGVmLCBIYXNodGFibGUgdE1vZGVsc1RhYmxlKSB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgQnVzaW5lc3NTZXJ2aWNlIGJzID0gbmV3IEJ1c2luZXNzU2VydmljZSgpOwotICAgIGJzLnNldFNlcnZpY2VLZXkoIiIpOwotICAgIEJpbmRpbmdUZW1wbGF0ZXMgYmluZGluZ1RlbXBsYXRlcyA9IG5ldyBCaW5kaW5nVGVtcGxhdGVzKCk7Ci0gICAgVmVjdG9yIGJpbmRpbmdUZW1wbGF0ZVZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICBTZXJ2aWNlW10gc2VydmljZXMgPSAoU2VydmljZVtdKWRlZi5nZXRTZXJ2aWNlcygpLnZhbHVlcygpLnRvQXJyYXkobmV3IFNlcnZpY2VbMF0pOwotICAgIGlmIChzZXJ2aWNlcy5sZW5ndGggPiAwKQotICAgIHsKLSAgICAgIFBvcnRbXSBwb3J0cyA9IChQb3J0W10pc2VydmljZXNbMF0uZ2V0UG9ydHMoKS52YWx1ZXMoKS50b0FycmF5KG5ldyBQb3J0WzBdKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcG9ydHMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIFRNb2RlbEluc3RhbmNlRGV0YWlscyB0TW9kZWxEZXRhaWxzID0gbmV3IFRNb2RlbEluc3RhbmNlRGV0YWlscygpOwotICAgICAgICBWZWN0b3IgdE1vZGVsSW5mb1ZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgVE1vZGVsIHRNb2RlbCA9IChUTW9kZWwpdE1vZGVsc1RhYmxlLmdldChwb3J0c1tpXS5nZXRCaW5kaW5nKCkuZ2V0UG9ydFR5cGUoKS5nZXRRTmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpKTsKLSAgICAgICAgdE1vZGVsSW5mb1ZlY3Rvci5hZGQoY3JlYXRlVE1vZGVsSW5zdGFuY2VJbmZvKHdzZGxVcmwsIHBvcnRzW2ldLCB0TW9kZWwuZ2V0VE1vZGVsS2V5KCkpKTsKLSAgICAgICAgdE1vZGVsRGV0YWlscy5zZXRUTW9kZWxJbnN0YW5jZUluZm9WZWN0b3IodE1vZGVsSW5mb1ZlY3Rvcik7Ci0gICAgICAgIEJpbmRpbmdUZW1wbGF0ZSBiaW5kaW5nVGVtcGxhdGUgPSBuZXcgQmluZGluZ1RlbXBsYXRlKCk7Ci0gICAgICAgIGJpbmRpbmdUZW1wbGF0ZS5zZXREZWZhdWx0RGVzY3JpcHRpb25TdHJpbmcoY3JlYXRlRGVzY3JpcHRpb24ocG9ydHNbaV0pKTsKLSAgICAgICAgYmluZGluZ1RlbXBsYXRlLnNldEFjY2Vzc1BvaW50KGNyZWF0ZUFjY2Vzc1BvaW50KHBvcnRzW2ldKSk7Ci0gICAgICAgIGJpbmRpbmdUZW1wbGF0ZS5zZXRUTW9kZWxJbnN0YW5jZURldGFpbHModE1vZGVsRGV0YWlscyk7Ci0gICAgICAgIGJpbmRpbmdUZW1wbGF0ZS5zZXRCaW5kaW5nS2V5KCIiKTsKLSAgICAgICAgYmluZGluZ1RlbXBsYXRlVmVjdG9yLmFkZChiaW5kaW5nVGVtcGxhdGUpOwotICAgICAgfQotICAgIH0KLSAgICBiaW5kaW5nVGVtcGxhdGVzLnNldEJpbmRpbmdUZW1wbGF0ZVZlY3RvcihiaW5kaW5nVGVtcGxhdGVWZWN0b3IpOwotICAgIGJzLnNldEJpbmRpbmdUZW1wbGF0ZXMoYmluZGluZ1RlbXBsYXRlcyk7Ci0gICAgcmV0dXJuIGJzOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgQnVzaW5lc3NTZXJ2aWNlIG5ld0J1c2luZXNzU2VydmljZShTdHJpbmcgd3NkbFVybCwgRGVmaW5pdGlvbiBkZWYsIFRNb2RlbFtdIHRNb2RlbHMpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBCdXNpbmVzc1NlcnZpY2UgYnMgPSBuZXcgQnVzaW5lc3NTZXJ2aWNlKCk7Ci0gICAgYnMuc2V0U2VydmljZUtleSgiIik7Ci0gICAgQmluZGluZ1RlbXBsYXRlcyBiaW5kaW5nVGVtcGxhdGVzID0gbmV3IEJpbmRpbmdUZW1wbGF0ZXMoKTsKLSAgICBWZWN0b3IgYmluZGluZ1RlbXBsYXRlVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgIFNlcnZpY2VbXSBzZXJ2aWNlcyA9IChTZXJ2aWNlW10pZGVmLmdldFNlcnZpY2VzKCkudmFsdWVzKCkudG9BcnJheShuZXcgU2VydmljZVswXSk7Ci0gICAgaWYgKHNlcnZpY2VzLmxlbmd0aCA+IDApCi0gICAgewotICAgICAgUG9ydFtdIHBvcnRzID0gKFBvcnRbXSlzZXJ2aWNlc1swXS5nZXRQb3J0cygpLnZhbHVlcygpLnRvQXJyYXkobmV3IFBvcnRbMF0pOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwb3J0cy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCB0TW9kZWxzLmxlbmd0aDsgaisrKQotICAgICAgICB7Ci0gICAgICAgICAgVE1vZGVsSW5zdGFuY2VEZXRhaWxzIHRNb2RlbERldGFpbHMgPSBuZXcgVE1vZGVsSW5zdGFuY2VEZXRhaWxzKCk7Ci0gICAgICAgICAgVmVjdG9yIHRNb2RlbEluZm9WZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgICAgdE1vZGVsSW5mb1ZlY3Rvci5hZGQoY3JlYXRlVE1vZGVsSW5zdGFuY2VJbmZvKHdzZGxVcmwsIHBvcnRzW2ldLCB0TW9kZWxzW2pdLmdldFRNb2RlbEtleSgpKSk7Ci0gICAgICAgICAgdE1vZGVsRGV0YWlscy5zZXRUTW9kZWxJbnN0YW5jZUluZm9WZWN0b3IodE1vZGVsSW5mb1ZlY3Rvcik7Ci0gICAgICAgICAgQmluZGluZ1RlbXBsYXRlIGJpbmRpbmdUZW1wbGF0ZSA9IG5ldyBCaW5kaW5nVGVtcGxhdGUoKTsKLSAgICAgICAgICBiaW5kaW5nVGVtcGxhdGUuc2V0RGVmYXVsdERlc2NyaXB0aW9uU3RyaW5nKGNyZWF0ZURlc2NyaXB0aW9uKHBvcnRzW2ldKSk7Ci0gICAgICAgICAgYmluZGluZ1RlbXBsYXRlLnNldEFjY2Vzc1BvaW50KGNyZWF0ZUFjY2Vzc1BvaW50KHBvcnRzW2ldKSk7Ci0gICAgICAgICAgYmluZGluZ1RlbXBsYXRlLnNldFRNb2RlbEluc3RhbmNlRGV0YWlscyh0TW9kZWxEZXRhaWxzKTsKLSAgICAgICAgICBiaW5kaW5nVGVtcGxhdGUuc2V0QmluZGluZ0tleSgiIik7Ci0gICAgICAgICAgYmluZGluZ1RlbXBsYXRlVmVjdG9yLmFkZChiaW5kaW5nVGVtcGxhdGUpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGJpbmRpbmdUZW1wbGF0ZXMuc2V0QmluZGluZ1RlbXBsYXRlVmVjdG9yKGJpbmRpbmdUZW1wbGF0ZVZlY3Rvcik7Ci0gICAgYnMuc2V0QmluZGluZ1RlbXBsYXRlcyhiaW5kaW5nVGVtcGxhdGVzKTsKLSAgICByZXR1cm4gYnM7Ci0gIH0KLQotICBwdWJsaWMgRGVmaW5pdGlvbiBnZXRXU0RMRGVmaW5pdGlvbihTdHJpbmcgd3NkbFVybCkgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIFdlYlNlcnZpY2VzUGFyc2VyRXh0IHBhcnNlciA9IG5ldyBXZWJTZXJ2aWNlc1BhcnNlckV4dCgpOwotICAgICAgU3RyaW5nIHByb3h5U2V0ID0gU3lzdGVtLmdldFByb3BlcnR5KCJodHRwLnByb3h5U2V0Iik7Ci0gICAgICBpZiAocHJveHlTZXQgIT0gbnVsbCAmJiBwcm94eVNldC5lcXVhbHMoInRydWUiKSkKLSAgICAgIHsKLSAgICAgICAgcGFyc2VyLnNldEhUVFBCYXNpY0F1dGhVc2VybmFtZShTeXN0ZW0uZ2V0UHJvcGVydHkoImh0dHAucHJveHlVc2VyTmFtZSIpKTsKLSAgICAgICAgcGFyc2VyLnNldEhUVFBCYXNpY0F1dGhQYXNzd29yZChTeXN0ZW0uZ2V0UHJvcGVydHkoImh0dHAucHJveHlQYXNzd29yZCIpKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBwYXJzZXIuZ2V0V1NETERlZmluaXRpb25WZXJib3NlKHdzZGxVcmwpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTRExFeGNlcHRpb24oV1NETEV4Y2VwdGlvbi5QQVJTRVJfRVJST1IsIGUuZ2V0TWVzc2FnZSgpLCBlKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIFN0cmluZyBjcmVhdGVEZXNjcmlwdGlvbihQb3J0IHBvcnQpCi0gIHsKLSAgICBTdHJpbmcgZGVzYyA9IG51bGw7Ci0gICAgRWxlbWVudCBlID0gcG9ydC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpOwotICAgIGlmIChlICE9IG51bGwpCi0gICAgewotICAgICAgTm9kZSBub2RlID0gZS5nZXRGaXJzdENoaWxkKCk7Ci0gICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICB3aGlsZSAobm9kZSAhPSBudWxsKQotICAgICAgewotICAgICAgICBzd2l0Y2ggKG5vZGUuZ2V0Tm9kZVR5cGUoKSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgTm9kZS5URVhUX05PREU6Ci0gICAgICAgICAgY2FzZSBOb2RlLkNEQVRBX1NFQ1RJT05fTk9ERToKLSAgICAgICAgICAgIHNiLmFwcGVuZCgoKENoYXJhY3RlckRhdGEpbm9kZSkuZ2V0RGF0YSgpKTsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgbm9kZSA9IG5vZGUuZ2V0TmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBkZXNjID0gc2IudG9TdHJpbmcoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGRlc2M7Ci0gIH0KLSAgCi0gIHByaXZhdGUgZmluYWwgVE1vZGVsSW5zdGFuY2VJbmZvIGNyZWF0ZVRNb2RlbEluc3RhbmNlSW5mbyhTdHJpbmcgd3NkbFVybCwgUG9ydCBwb3J0LCBTdHJpbmcgdE1vZGVsS2V5KQotICB7Ci0gICAgSW5zdGFuY2VEZXRhaWxzIGRldGFpbHMgPSBuZXcgSW5zdGFuY2VEZXRhaWxzKCk7Ci0gICAgT3ZlcnZpZXdEb2Mgb3ZlcnZpZXdEb2MgPSBuZXcgT3ZlcnZpZXdEb2MoKTsKLSAgICBUTW9kZWxJbnN0YW5jZUluZm8gdE1vZGVsSW5mbyA9IG5ldyBUTW9kZWxJbnN0YW5jZUluZm8oKTsKLSAgICBTdHJpbmdCdWZmZXIgb3ZlcnZpZXdVUkxTdHJpbmcgPSBuZXcgU3RyaW5nQnVmZmVyKHdzZGxVcmwpOwotICAgIFN0cmluZyBwb3J0TmFtZSA9IHBvcnQuZ2V0TmFtZSgpOwotICAgIGlmIChwb3J0TmFtZSAhPSBudWxsKQotICAgIHsgIAotICAgICAgb3ZlcnZpZXdVUkxTdHJpbmcuYXBwZW5kKCIjIik7Ci0gICAgICBvdmVydmlld1VSTFN0cmluZy5hcHBlbmQocG9ydE5hbWUpOwotICAgIH0KLSAgICBvdmVydmlld0RvYy5zZXRPdmVydmlld1VSTChuZXcgT3ZlcnZpZXdVUkwob3ZlcnZpZXdVUkxTdHJpbmcudG9TdHJpbmcoKSkpOwotICAgIGRldGFpbHMuc2V0T3ZlcnZpZXdEb2Mob3ZlcnZpZXdEb2MpOwotICAgIHRNb2RlbEluZm8uc2V0SW5zdGFuY2VEZXRhaWxzKGRldGFpbHMpOwotICAgIGlmICh0TW9kZWxLZXkgIT0gbnVsbCkKLSAgICAgIHRNb2RlbEluZm8uc2V0VE1vZGVsS2V5KHRNb2RlbEtleSk7Ci0gICAgcmV0dXJuIHRNb2RlbEluZm87Ci0gIH0KLSAgCi0gIHByaXZhdGUgZmluYWwgQWNjZXNzUG9pbnQgY3JlYXRlQWNjZXNzUG9pbnQoUG9ydCBwb3J0KQotICB7Ci0gICAgQWNjZXNzUG9pbnQgYWNjZXNzUG9pbnQgPSBudWxsOwotICAgIExpc3QgbGlzdCA9IHBvcnQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgZm9yIChpbnQgaiA9IDA7IGogPCBsaXN0LnNpemUoKTsgaisrKQotICAgICB7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtZW50ID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWxpc3QuZ2V0KGopOwotICAgICAgaWYgKGV4dEVsZW1lbnQgaW5zdGFuY2VvZiBTT0FQQWRkcmVzcykKLSAgICAgICB7ICAKLSAgICAgICAgU3RyaW5nIGxvY2F0aW9uVVJJID0gKChTT0FQQWRkcmVzcylleHRFbGVtZW50KS5nZXRMb2NhdGlvblVSSSgpOwotICAgICAgICBhY2Nlc3NQb2ludCA9IG5ldyBBY2Nlc3NQb2ludChsb2NhdGlvblVSSSwgZ2V0VVJMVHlwZShsb2NhdGlvblVSSSkpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGV4dEVsZW1lbnQgaW5zdGFuY2VvZiBIVFRQQWRkcmVzcykKLSAgICAgICB7Ci0gICAgICAgIFN0cmluZyBsb2NhdGlvblVSSSA9ICgoSFRUUEFkZHJlc3MpZXh0RWxlbWVudCkuZ2V0TG9jYXRpb25VUkkoKTsKLSAgICAgICAgYWNjZXNzUG9pbnQgPSBuZXcgQWNjZXNzUG9pbnQobG9jYXRpb25VUkksIGdldFVSTFR5cGUobG9jYXRpb25VUkkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBhY2Nlc3NQb2ludDsKLSAgfQotICAKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgVVJMX1RZUEVfT1RIRVIgPSAib3RoZXIiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBVUkxfVFlQRVMgPSAiaHR0cCBodHRwcyBtYWlsIGZ0cCBmYXggcGhvbmUgb3RoZXIiOwotICAKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZ2V0VVJMVHlwZShTdHJpbmcgdXJsKQotICB7Ci0gICAgaW50IGkgPSB1cmwuaW5kZXhPZigiOiIpOwotICAgIFN0cmluZyB0eXBlOwotICAgIGlmIChpID09IC0xKQotICAgICAgdHlwZSA9IFVSTF9UWVBFX09USEVSOwotICAgIGVsc2UKLSAgICB7Ci0gICAgICB0eXBlID0gdXJsLnN1YnN0cmluZygwLCBpKTsKLSAgICAgIGlmICh0eXBlLmVxdWFscygiIikgfHwgVVJMX1RZUEVTLmluZGV4T2YodHlwZSkgPT0gLTEpCi0gICAgICAgIHR5cGUgPSBVUkxfVFlQRV9PVEhFUjsKLSAgICB9Ci0gICAgcmV0dXJuIHR5cGU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGlzTW9ub2xpdGhpY1dTREwoRGVmaW5pdGlvbiBkZWYpCi0gIHsKLSAgICByZXR1cm4gaGFzTWVzc2FnZShkZWYpICYmIGhhc1BvcnRUeXBlKGRlZikgJiYgaGFzQmluZGluZyhkZWYpICYmIGhhc1NlcnZpY2UoZGVmKTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gaXNTZXJ2aWNlSW1wbGVtZW50KERlZmluaXRpb24gZGVmKQotICB7Ci0gICAgcmV0dXJuIGhhc0ltcG9ydChkZWYpICYmIGhhc1NlcnZpY2UoZGVmKTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gaXNTZXJ2aWNlSW50ZXJmYWNlKERlZmluaXRpb24gZGVmKQotICB7Ci0gICAgcmV0dXJuIGhhc01lc3NhZ2UoZGVmKSAmJiBoYXNQb3J0VHlwZShkZWYpICYmIGhhc0JpbmRpbmcoZGVmKTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gaXNTZXJ2aWNlSW50ZXJmYWNlV2l0aEJpbmRpbmdzT25seShEZWZpbml0aW9uIGRlZikKLSAgewotICAgIHJldHVybiAhaGFzU2VydmljZShkZWYpICYmIGhhc0JpbmRpbmcoZGVmKTsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBoYXNNZXNzYWdlKERlZmluaXRpb24gZGVmKQotICB7Ci0gICAgZm9yKEl0ZXJhdG9yIGl0ID0gZGVmLmdldE1lc3NhZ2VzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICAgIGlmICghKChNZXNzYWdlKWl0Lm5leHQoKSkuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICBwcml2YXRlIGJvb2xlYW4gaGFzUG9ydFR5cGUoRGVmaW5pdGlvbiBkZWYpCi0gIHsKLSAgICBmb3IoSXRlcmF0b3IgaXQgPSBkZWYuZ2V0UG9ydFR5cGVzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICAgIGlmICghKChQb3J0VHlwZSlpdC5uZXh0KCkpLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgcHJpdmF0ZSBib29sZWFuIGhhc0JpbmRpbmcoRGVmaW5pdGlvbiBkZWYpCi0gIHsKLSAgICBmb3IoSXRlcmF0b3IgaXQgPSBkZWYuZ2V0QmluZGluZ3MoKS52YWx1ZXMoKS5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgICAgaWYgKCEoKEJpbmRpbmcpaXQubmV4dCgpKS5pc1VuZGVmaW5lZCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIHByaXZhdGUgYm9vbGVhbiBoYXNTZXJ2aWNlKERlZmluaXRpb24gZGVmKQotICB7Ci0gICAgcmV0dXJuICFkZWYuZ2V0U2VydmljZXMoKS5pc0VtcHR5KCk7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gaGFzSW1wb3J0KERlZmluaXRpb24gZGVmKQotICB7Ci0gICAgcmV0dXJuICFkZWYuZ2V0SW1wb3J0cygpLmlzRW1wdHkoKTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZ1tdIGdldEltcG9ydHMoRGVmaW5pdGlvbiBkZWYsIFN0cmluZyB3c2RsVXJsKQotICB7Ci0gIAotCSAgCi0JTWFwIGltcG9ydHNNYXAgPSBkZWYuZ2V0SW1wb3J0cygpOwotICAgIENvbGxlY3Rpb24gdmFsdWVzID0gaW1wb3J0c01hcC52YWx1ZXMoKTsKLSAgICBJdGVyYXRvciBpdCA9IHZhbHVlcy5pdGVyYXRvcigpOwotICAgIAotICAgIFZlY3RvciBpbXBvcnRzVmVjID0gbmV3IFZlY3RvcigpOyAgCi0gICAgZm9yKGludCBpID0wO2l0Lmhhc05leHQoKTtpKyspewotICAgIAlBcnJheUxpc3QgYUxpc3QgPSAoQXJyYXlMaXN0KWl0Lm5leHQoKTsKLSAgICAgICAgSXRlcmF0b3IgaXRJbXBvcnRzID0gYUxpc3QuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUoaXRJbXBvcnRzLmhhc05leHQoKSl7Ci0gICAgICAgIAlpbXBvcnRzVmVjLmFkZChpdEltcG9ydHMubmV4dCgpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBJbXBvcnQgaW1wb3J0c1tdID0gbmV3IEltcG9ydFtpbXBvcnRzVmVjLnNpemUoKV0gOwotICAgIEl0ZXJhdG9yIGl0VmVjID0gaW1wb3J0c1ZlYy5pdGVyYXRvcigpOwotICAgIGZvcihpbnQgaiA9IDA7aXRWZWMuaGFzTmV4dCgpO2orKyl7Ci0gICAgCWltcG9ydHNbal0gPSAoSW1wb3J0KWl0VmVjLm5leHQoKTsKLSAgICB9Ci0gICAgCi0gICAgCi0gICAgCi0gICAgU3RyaW5nW10gaW1wb3J0U3RyaW5ncyA9IG5ldyBTdHJpbmdbaW1wb3J0cy5sZW5ndGhdOwotICAgIFN0cmluZyBzOwotICAgIGlmICh3c2RsVXJsICE9IG51bGwgJiYgd3NkbFVybC5pbmRleE9mKCcvJykgIT0gLTEpCi0gICAgICBzID0gd3NkbFVybC5zdWJzdHJpbmcoMCwgd3NkbFVybC5sYXN0SW5kZXhPZignLycpKzEpOwotICAgIGVsc2UKLSAgICAgIHMgPSAiIjsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGltcG9ydFN0cmluZ3MubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgU3RyaW5nIGxvY2F0aW9uVVJJID0gaW1wb3J0c1tpXS5nZXRMb2NhdGlvblVSSSgpOwotICAgICAgaWYgKGxvY2F0aW9uVVJJLmluZGV4T2YoJzonKSAhPSAtMSkKLSAgICAgICAgc2IuYXBwZW5kKGxvY2F0aW9uVVJJKTsKLSAgICAgIGVsc2UKLSAgICAgICAgc2IuYXBwZW5kKHMpLmFwcGVuZChsb2NhdGlvblVSSSk7Ci0gICAgICBpbXBvcnRTdHJpbmdzW2ldID0gc2IudG9TdHJpbmcoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGltcG9ydFN0cmluZ3M7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdTREwoQnVzaW5lc3NTZXJ2aWNlIGJzLCBVRERJUHJveHkgcHJveHkpCi0gIHsKLSAgICBWZWN0b3IgYmluZGluZ1RlbXBsYXRlVmVjdG9yID0gYnMuZ2V0QmluZGluZ1RlbXBsYXRlcygpLmdldEJpbmRpbmdUZW1wbGF0ZVZlY3RvcigpOwotICAgIGlmIChiaW5kaW5nVGVtcGxhdGVWZWN0b3Iuc2l6ZSgpID4gMCkKLSAgICB7Ci0gICAgICBCaW5kaW5nVGVtcGxhdGUgYnQgPSAoQmluZGluZ1RlbXBsYXRlKWJpbmRpbmdUZW1wbGF0ZVZlY3Rvci5nZXQoMCk7Ci0gICAgICBUTW9kZWxJbnN0YW5jZURldGFpbHMgdE1vZGVsRGV0YWlscyA9IGJ0LmdldFRNb2RlbEluc3RhbmNlRGV0YWlscygpOwotICAgICAgaWYgKHRNb2RlbERldGFpbHMgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgVmVjdG9yIHRNb2RlbEluZm9WZWN0b3IgPSB0TW9kZWxEZXRhaWxzLmdldFRNb2RlbEluc3RhbmNlSW5mb1ZlY3RvcigpOwotICAgICAgICBpZiAodE1vZGVsSW5mb1ZlY3Rvci5zaXplKCkgPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgVE1vZGVsSW5zdGFuY2VJbmZvIHRNb2RlbEluZm8gPSAoVE1vZGVsSW5zdGFuY2VJbmZvKXRNb2RlbEluZm9WZWN0b3IuZ2V0KDApOwotICAgICAgICAgIEluc3RhbmNlRGV0YWlscyBkZXRhaWxzID0gdE1vZGVsSW5mby5nZXRJbnN0YW5jZURldGFpbHMoKTsKLSAgICAgICAgICBpZiAoZGV0YWlscyAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIE92ZXJ2aWV3RG9jIG92ZXJ2aWV3RG9jID0gZGV0YWlscy5nZXRPdmVydmlld0RvYygpOwotICAgICAgICAgICAgaWYgKG92ZXJ2aWV3RG9jICE9IG51bGwpCi0gICAgICAgICAgICAgIHJldHVybiBwYXJzZShvdmVydmlld0RvYy5nZXRPdmVydmlld1VSTFN0cmluZygpKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZiAocHJveHkgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgCVN0cmluZyB0TW9kZWxLZXkgPSB0TW9kZWxJbmZvLmdldFRNb2RlbEtleSgpOwotICAgICAgICAgIAlpZiAodE1vZGVsS2V5ICE9IG51bGwpCi0gICAgICAgICAgCXsKLSAgICAgICAgICAJICB0cnkKLQkJCSAgewotICAgICAgICAgIAkgICAgVE1vZGVsRGV0YWlsIHQgPSBwcm94eS5nZXRfdE1vZGVsRGV0YWlsKHRNb2RlbEtleSk7Ci0gICAgICAgICAgCSAgICBpZiAodCAhPSBudWxsKQotICAgICAgICAgIAkgICAgewotICAgICAgICAgICAgICAgICAgVmVjdG9yIHRNb2RlbFZlY3RvciA9IHQuZ2V0VE1vZGVsVmVjdG9yKCk7Ci0gICAgICAgICAgICAgICAgICBpZiAodE1vZGVsVmVjdG9yICE9IG51bGwgJiYgdE1vZGVsVmVjdG9yLnNpemUoKSA+IDApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRXU0RMKChUTW9kZWwpdE1vZGVsVmVjdG9yLmdldCgwKSk7Ci0gICAgICAgICAgCSAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAJICBjYXRjaCAoVURESUV4Y2VwdGlvbiB1ZGRpZSkKLQkJCSAgewotICAgICAgICAgIAkgIH0KLSAgICAgICAgICAJICBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIHRlKQotCQkJICB7Ci0gICAgICAgICAgCSAgfQotICAgICAgICAgIAl9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFdTREwoVE1vZGVsIHRNb2RlbCkKLSAgewotICAgIE92ZXJ2aWV3RG9jIG92ZXJ2aWV3RG9jID0gdE1vZGVsLmdldE92ZXJ2aWV3RG9jKCk7Ci0gICAgaWYgKG92ZXJ2aWV3RG9jICE9IG51bGwpCi0gICAgICByZXR1cm4gcGFyc2Uob3ZlcnZpZXdEb2MuZ2V0T3ZlcnZpZXdVUkxTdHJpbmcoKSk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIHBhcnNlKFN0cmluZyBzKQotICB7Ci0gICAgaWYgKHMgIT0gbnVsbCAmJiBzLmxlbmd0aCgpID4gMCkKLSAgICB7Ci0gICAgICBpbnQgaW5kZXggPSBzLmluZGV4T2YoJyMnKTsKLSAgICAgIGlmIChpbmRleCAhPSAtMSkKLSAgICAgICAgcmV0dXJuIHMuc3Vic3RyaW5nKDAsIGluZGV4KTsKLSAgICB9Ci0gICAgcmV0dXJuIHM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdXRpbC9Ccm93c2VyRGV0ZWN0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3V0aWwvQnJvd3NlckRldGVjdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzIwNTA0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdXRpbC9Ccm93c2VyRGV0ZWN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzAzMDUgICAxMTcwMzQgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBzaG91bGQgc3VwcG9ydCBTT0FQIEhlYWRlcnMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsOwotCi1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKLQotLyoqCi0gKiBIZWxwZXIgY2xhc3MgdXNlZCB0byBkZXRlY3QgdGhlIHR5cGUgb2YgYnJvd3NlciB1c2VkLiAKLSAqLwotcHVibGljIGNsYXNzIEJyb3dzZXJEZXRlY3QgewotCQotCS8qKgotCSAqIERldGVybWluZSBpZiBNaWNyb3NvZnQgSW50ZXJuZXQgRXhwbG9yZXIgaXMgdXNlZC4KLQkgKiAKLQkgKiBAcGFyYW0gcmVxdWVzdCBUaGUgSFRUUCByZXF1ZXN0LgotCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgY2xpZW50IGlzIGEgTWljcm9zb2Z0IEludGVybmV0IEV4cGxvcmVyIHdlYiBicm93c2VyLCBmYWxzZSBvdGhlcndpc2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIGlzTWljcm9zb2Z0SW50ZXJuZXRFeHBsb3JlcihIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCkgewotCQlTdHJpbmcgdXNlckFnZW50ID0gcmVxdWVzdC5nZXRIZWFkZXIoIlVzZXItQWdlbnQiKTsKLQkJCi0JCWlmICh1c2VyQWdlbnQgIT0gbnVsbCAmJiB1c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKCJtc2llIikgIT0gLTEpCi0JCQlyZXR1cm4gdHJ1ZTsKLQkJCi0JCXJldHVybiBmYWxzZTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3V0aWwvQ2hhckFycmF5V3JhcHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91dGlsL0NoYXJBcnJheVdyYXBwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDhmMDg1MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3V0aWwvQ2hhckFycmF5V3JhcHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWw7Ci0KLWltcG9ydCBqYXZhLmlvLkNoYXJBcnJheVdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlV3JhcHBlcjsKLQotcHVibGljIGNsYXNzIENoYXJBcnJheVdyYXBwZXIgZXh0ZW5kcyBIdHRwU2VydmxldFJlc3BvbnNlV3JhcHBlcgotewotCXByaXZhdGUgQ2hhckFycmF5V3JpdGVyIGNoYXJBcnJheVdyaXRlcl87Ci0JCi0JcHVibGljIENoYXJBcnJheVdyYXBwZXIoSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKLQl7Ci0JCXN1cGVyKHJlc3BvbnNlKTsKLQkgIGNoYXJBcnJheVdyaXRlcl8gPSBuZXcgQ2hhckFycmF5V3JpdGVyKCk7Ci0JfQotCQotCXB1YmxpYyBQcmludFdyaXRlciBnZXRXcml0ZXIoKQotCXsKLQkJcmV0dXJuIG5ldyBQcmludFdyaXRlcihjaGFyQXJyYXlXcml0ZXJfKTsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0JewotCQlyZXR1cm4gY2hhckFycmF5V3JpdGVyXy50b1N0cmluZygpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdXRpbC9EaXJVdGlscy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91dGlsL0RpclV0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiYThiYzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91dGlsL0RpclV0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLQotcHVibGljIGZpbmFsIGNsYXNzIERpclV0aWxzCi17Ci0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1JUTCgpCi0gIHsKLSAgICByZXR1cm4gInJ0bCIuZXF1YWxzKGdldERpcigpKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldERpcigpCi0gIHsKLSAgICBTdHJpbmcgcnRsID0gInJ0bCI7Ci0gICAgU3RyaW5nIGx0ciA9ICJsdHIiOwotCi0gICAgLy8gZnJvbSBzeXN0ZW0gcHJvcGVydHkKLSAgICBTdHJpbmcgb3JpZW50YXRpb24gPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImVjbGlwc2Uub3JpZW50YXRpb24iKTsgLy8kTk9OLU5MUy0xJAotICAgIGlmIChydGwuZXF1YWxzKG9yaWVudGF0aW9uKSkgLy8kTk9OLU5MUy0xJAotICAgICAgcmV0dXJuIHJ0bDsKLSAgICBlbHNlIGlmIChsdHIuZXF1YWxzKG9yaWVudGF0aW9uKSkgLy8kTk9OLU5MUy0xJAotICAgICAgcmV0dXJuIGx0cjsKLQotICAgIC8vIGZyb20gY29tbWFuZCBsaW5lCi0gICAgU3RyaW5nW10gYXJncyA9IFBsYXRmb3JtLmdldENvbW1hbmRMaW5lQXJncygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpZiAoIi1kaXIiLmVxdWFsc0lnbm9yZUNhc2UoYXJnc1tpXSkpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgaWYgKChpICsgMSkgPCBhcmdzLmxlbmd0aCAmJiAicnRsIi5lcXVhbHNJZ25vcmVDYXNlKGFyZ3NbaSArIDFdKSkgLy8kTk9OLU5MUy0xJAotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHJ0bDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbHRyOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIENoZWNrIGlmIHRoZSB1c2VyIHByb3BlcnR5IGlzIHNldC4gSWYgbm90IGRvIG5vdAotICAgIC8vIHJlbHkgb24gdGhlIHZtLgotICAgIGlmIChTeXN0ZW0uZ2V0UHJvcGVydHkoIm9zZ2kubmwudXNlciIpID09IG51bGwpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHJldHVybiBsdHI7Ci0KLSAgICAvLyBndWVzcyBmcm9tIGRlZmF1bHQgbG9jYWxlCi0gICAgU3RyaW5nIGxvY2FsZSA9IFBsYXRmb3JtLmdldE5MKCk7Ci0gICAgaWYgKGxvY2FsZSA9PSBudWxsKQotICAgIHsKLSAgICAgIGxvY2FsZSA9IExvY2FsZS5nZXREZWZhdWx0KCkudG9TdHJpbmcoKTsKLSAgICB9Ci0gICAgaWYgKGxvY2FsZS5zdGFydHNXaXRoKCJhciIpIHx8IGxvY2FsZS5zdGFydHNXaXRoKCJmYSIpIC8vJE5PTi1OTFMtMSQvLyROT04tTkxTLTIkCi0gICAgICAgIHx8IGxvY2FsZS5zdGFydHNXaXRoKCJoZSIpIHx8IGxvY2FsZS5zdGFydHNXaXRoKCJpdyIpIC8vJE5PTi1OTFMtMSQvLyROT04tTkxTLTIkCi0gICAgICAgIHx8IGxvY2FsZS5zdGFydHNXaXRoKCJ1ciIpKSAvLyROT04tTkxTLTEkCi0gICAgewotICAgICAgcmV0dXJuIHJ0bDsKLSAgICB9Ci0gICAgcmV0dXJuIGx0cjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91dGlsL0hUTUxVdGlscy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91dGlsL0hUTUxVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTRhYmJjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdXRpbC9IVE1MVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMjIgICAxMjc0NDMgamVzcGVyQHNlbHNrYWJldC5vcmcgLSBKZXNwZXIgUyBNb2xsZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2U7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBIVE1MVXRpbHMKLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVRGOF9FTkNPRElORyA9ICJVVEYtOCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIExJTkVfQlJFQUsgPSAiPGJyPiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIExJTkVfU0VQQVJBVE9SID0gU3lzdGVtLmdldFByb3BlcnRpZXMoKS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKTsKLQotICAvKioKLSAgKiBHZXQgdGhlIEhUTUwgdGFnIGZvciBhbiBpbWFnZS4KLSAgKiBAcmV0dXJuIFN0cmluZyBUaGUgSFRNTCB0YWcgZm9yIHRoaXMgaW1hZ2UuCi0gICogQHBhcmFtIEh0dHBTZXJ2bGV0UmVzcG9uc2UgVG8gZW5jb2RlIHRoZSBzcmMgYXR0cmlidXRlLgotICAqIEBwYXJhbSBTdHJpbmcgc3JjIGF0dHJpYnV0ZSBkZWZpbmluZyB0aGUgcGF0aCB0byB0aGUgaW1hZ2UgZmlsZS4gVGhpcyBtdXN0IGluY2x1ZGUgdGhlIGNvbnRleHQgcGF0aC4KLSAgKiBAcGFyYW0gU3RyaW5nIE9wdGlvbmFsIGFsdCB0ZXh0IHRvIGJlIGRpc3BsYXllZCB3aXRoIHRoZSBpbWFnZS4gU2V0IHRoaXMgdG8gbnVsbCB0byBkaXNhYmxlIHRoZSBhdHRyaWJ1dGUuCi0gICogQHBhcmFtIFN0cmluZyBPcHRpb25hbCB3aWR0aCBvZiB0aGUgcmVuZGVyZWQgaW1hZ2UuIFNldCB0aGlzIHRvIG51bGwgdG8gZGlzYWJsZSB0aGUgYXR0cmlidXRlLgotICAqIEBwYXJhbSBTdHJpbmcgT3B0aW9uYWwgaGVpZ2h0IG9mIHRoZSByZW5kZXJlZCBpbWFnLiBTZXQgdGhpcyB0byBudWxsIHRvIGRpc2FibGUgdGhlIGF0dHJpYnV0ZS4KLSAgKiBAcGFyYW0gSGFzaHRhYmxlIE9wdGlvbmFsIGtleS12YWx1ZSBwYWlycyBvZiBhZGRpdGlvbmFsIHN0cmluZ3MgdG8gYmUgYWRkZWQgYXMtaXMgdG8gdGhlIHRhZy4gU2V0IHRoaXMgdG8gbnVsbCB0byBkaXNhYmxlLgotICAqIEByZXR1cm4gU3RyaW5nIFRoZSBpbWFnZSB0YWcuCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldEhUTUxJbWFnZVRhZyhIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlLFN0cmluZyBzcmMsU3RyaW5nIGFsdCxTdHJpbmcgd2lkdGgsU3RyaW5nIGhlaWdodCxIYXNodGFibGUgYWRkaXRpb25hbEF0dHJpYnV0ZXMpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgdGFnID0gbmV3IFN0cmluZ0J1ZmZlcigiPGltZyBzcmM9XCIiKTsKLSAgICB0YWcuYXBwZW5kKHJlc3BvbnNlLmVuY29kZVVSTChzcmMpKS5hcHBlbmQoJ1wiJyk7Ci0gICAgaWYgKGFsdCAhPSBudWxsKQotICAgIHsKLSAgICAgIHRhZy5hcHBlbmQoIiBhbHQ9XCIiKS5hcHBlbmQoYWx0KS5hcHBlbmQoJ1wiJyk7Ci0gICAgICB0YWcuYXBwZW5kKCIgdGl0bGU9XCIiKS5hcHBlbmQoYWx0KS5hcHBlbmQoJ1wiJyk7Ci0gICAgfQotICAgIGlmICh3aWR0aCAhPSBudWxsKQotICAgICAgdGFnLmFwcGVuZCgiIHdpZHRoPSIpLmFwcGVuZCh3aWR0aCk7Ci0gICAgaWYgKGhlaWdodCAhPSBudWxsKQotICAgICAgdGFnLmFwcGVuZCgiIGhlaWdodD0iKS5hcHBlbmQoaGVpZ2h0KTsKLSAgICB0YWcuYXBwZW5kKCIgYm9yZGVyPTAiKTsKLSAgICBpZiAoYWRkaXRpb25hbEF0dHJpYnV0ZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBFbnVtZXJhdGlvbiBrZXlzID0gYWRkaXRpb25hbEF0dHJpYnV0ZXMua2V5cygpOwotICAgICAgd2hpbGUgKGtleXMuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBrZXkgPSAoU3RyaW5nKWtleXMubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgdGFnLmFwcGVuZCgnICcpLmFwcGVuZChrZXkpLmFwcGVuZCgiPVwiIikuYXBwZW5kKChTdHJpbmcpYWRkaXRpb25hbEF0dHJpYnV0ZXMuZ2V0KGtleSkpLmFwcGVuZCgnXCInKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgdGFnLmFwcGVuZCgnPicpOwotICAgIHJldHVybiB0YWcudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qKgotICAqIEdldCB0aGUgSFRNTCB0YWcgZm9yIHRoaXMgbGluay4gVGhlIGNvbXBsZXRlIHRhZyBjb25zaXN0cyBvZiB0aGUgb3BlbiB0YWcgPGE+IGZvbGxvd2VkIGJ5IGEgc3ViZWxlbWVudCBhbmQsIGZpbmFsbHksIGJ5IGFuIGVuZCB0YWcgPC9hPi4KLSAgKiBAcmV0dXJuIFN0cmluZyBUaGUgSFRNTCB0YWcgb2YgdGhlIGxpbmsuCi0gICogQHBhcmFtIEh0dHBTZXJ2bGV0UmVzcG9uc2UgVG8gZW5jb2RlIHRoZSBocmVmIGF0dHJpYnV0ZS4KLSAgKiBAcGFyYW0gU3RyaW5nIFRoZSBocmVmIGF0dHJpYnV0ZSBvZiB0aGUgbGluay4gVGhpcyBtdXN0IGluY2x1ZGUgdGhlIGNvbnRleHQgcGF0aC4KLSAgKiBAcGFyYW0gU3RyaW5nIHRhcmdldCBPcHRpb25hbCB0YXJnZXQgYXR0cmlidXRlIGZvciB0aGUgbGluay4gU2V0IHRoaXMgdG8gbnVsbCB0byBkaXNhYmxlIHRoZSBhdHRyaWJ1dGUuCi0gICogQHBhcmFtIFN0cmluZyBPcHRpb25hbCBuYW1lIGZvciB0aGUgbGluay4gU2V0IHRoaXMgdG8gbnVsbCB0byBkaXNhYmxlIHRoZSBhdHRyaWJ1dGUuCi0gICogQHBhcmFtIFN0cmluZyBUaGUgbGFiZWwgd2hpY2ggYWN0cyBhcyB0aGUgc3ViZWxlbWVudC4gaS5lLiA8YT5sYWJlbDwvYT4uCi0gICogQHBhcmFtIEhhc2h0YWJsZSBPcHRpb25hbCBrZXktdmFsdWUgcGFpcnMgb2YgYWRkaXRpb25hbCBzdHJpbmcgYXR0cmlidXRlcyB0byBiZSBhZGRlZCBhcy1pcyB0byB0aGUgb3BlbiB0YWcuIFNldCB0aGlzIHRvIG51bGwgdG8gZGlzYWJsZS4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0SFRNTExpbmtUYWcoSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSxTdHJpbmcgaHJlZixTdHJpbmcgdGFyZ2V0LFN0cmluZyBuYW1lLFN0cmluZyBsYWJlbCxIYXNodGFibGUgYWRkaXRpb25hbEF0dHJpYnV0ZXMpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgdGFnID0gbmV3IFN0cmluZ0J1ZmZlcigiPGEgaHJlZj1cIiIpOwotICAgIHRhZy5hcHBlbmQocmVzcG9uc2UuZW5jb2RlVVJMKGhyZWYpKS5hcHBlbmQoJ1wiJyk7Ci0gICAgaWYgKHRhcmdldCAhPSBudWxsKQotICAgICAgdGFnLmFwcGVuZCgiIHRhcmdldD1cIiIpLmFwcGVuZCh0YXJnZXQpLmFwcGVuZCgnXCInKTsKLSAgICBpZiAobmFtZSAhPSBudWxsKQotICAgICAgdGFnLmFwcGVuZCgiIG5hbWU9XCIiKS5hcHBlbmQobmFtZSkuYXBwZW5kKCdcIicpOwotICAgIGlmIChhZGRpdGlvbmFsQXR0cmlidXRlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIEVudW1lcmF0aW9uIGtleXMgPSBhZGRpdGlvbmFsQXR0cmlidXRlcy5rZXlzKCk7Ci0gICAgICB3aGlsZSAoa2V5cy5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIGtleSA9IChTdHJpbmcpa2V5cy5uZXh0RWxlbWVudCgpOwotICAgICAgICB0YWcuYXBwZW5kKCcgJykuYXBwZW5kKGtleSkuYXBwZW5kKCI9XCIiKS5hcHBlbmQoKFN0cmluZylhZGRpdGlvbmFsQXR0cmlidXRlcy5nZXQoa2V5KSkuYXBwZW5kKCdcIicpOwotICAgICAgfQotICAgIH0KLSAgICB0YWcuYXBwZW5kKCc+Jyk7Ci0gICAgdGFnLmFwcGVuZChsYWJlbCk7Ci0gICAgdGFnLmFwcGVuZCgiPC9hPiIpOwotICAgIHJldHVybiB0YWcudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qKgotICAqIEdldCB0aGUgSFRNTCB0YWcgZm9yIGEgcmVkIGFzdGVyaXN0LgotICAqIEByZXR1cm4gU3RyaW5nIFRoZSBIVE1MIHRhZyBmb3IgdGhlIHJlZCBhc3Rlcmlzay4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgcmVkQXN0ZXJpc2soKQotICB7Ci0gICAgcmV0dXJuICI8Zm9udCBjb2xvcj1cIiNmZjAwMDBcIj4qPC9mb250PiI7Ci0gIH0KLQotICAvKioKLSAgKiBHZXQgdGhlIEphdmFzY3JpcHQgbWFuZ2xlZCB2ZXJzaW9uIG9mIGEgZ2l2ZW4gaW5wdXQgU3RyaW5nLgotICAqIEByZXR1cm4gU3RyaW5nIFRoZSBKYXZhc2NyaXB0IG1hbmdsZWQgU3RyaW5nLgotICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBKU01hbmdsZShTdHJpbmcgaW5wdXQpCi0gIHsKLSAgICBpZiAoaW5wdXQgPT0gbnVsbCkKLSAgICAgIHJldHVybiAiIjsKLQotICAgIFN0cmluZ0J1ZmZlciBtYW5nbGVkT3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIGZvciAoaW50IGk9MDtpPGlucHV0Lmxlbmd0aCgpO2krKykKLSAgICB7Ci0gICAgICBjaGFyIGMgPSBpbnB1dC5jaGFyQXQoaSk7Ci0gICAgICBzd2l0Y2ggKGMpCi0gICAgICB7Ci0gICAgICAgIGNhc2UgJ1xuJzoKLSAgICAgICAgICBtYW5nbGVkT3V0cHV0LmFwcGVuZCgiXFxuIik7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ1xyJzoKLSAgICAgICAgICBtYW5nbGVkT3V0cHV0LmFwcGVuZCgiXFxyIik7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ1xcJzoKLSAgICAgICAgY2FzZSAnXCInOgotICAgICAgICBjYXNlICdcJyc6Ci0gICAgICAgICAgbWFuZ2xlZE91dHB1dC5hcHBlbmQoJ1xcJyk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgbWFuZ2xlZE91dHB1dC5hcHBlbmQoYyk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBtYW5nbGVkT3V0cHV0LnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTEVTU19USEFOID0gIjwiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTEVTU19USEFOX0hUTUxfRU5USVRZID0gIiZsdDsiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgR1JFQVRFUl9USEFOID0gIj4iOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgR1JFQVRFUl9USEFOX0hUTUxfRU5USVRZID0gIiZndDsiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1BBQ0UgPSAiICI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTUEFDRV9IVE1MX0VOVElUWSA9ICImbmJzcDsiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQU1QRVJTQU5EID0gIiYiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQU1QRVJTQU5EX0hUTUxfRU5USVRZID0gIiZhbXA7IjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFFVT1RBVElPTiA9ICJcIiI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBRVU9UQVRJT05fSFRNTF9FTlRJVFkgPSAiJnF1b3Q7IjsKLQotICAvKioKLSAgKiBSZXBsYWNlIHNwZWNpYWwgY2hhcmFjdGVycyB3aXRoIEhUTUwgZW50aXRpZXMgcmVwcmVzZW50aW5nIHRoZXNlIGNoYXJhY3RlcnMuCi0gICogTm90ZSB0aGF0IHRoaXMgd2lsbCBhbHNvIGNvbnZlcnQgbm9ybWFsIHNwYWNlcyBpbnRvIG5vbi1icmVha2luZyBzcGFjZXMsIHdoaWNoIG1heSBiZSBnb29kIGZvcgotICAqIHByZXNlbnRhdGlvbiBidXQgbm90IGZvciBlZGl0aW5nLgotICAqIAotICAqIEByZXR1cm4gU3RyaW5nIFRoZSBjb252ZXJ0ZWQgU3RyaW5nLiBOb3RlOiBPcmRlciBpcyBpbXBvcnRhbnQgc28gdGhhdCBjb3JyZWN0ZWQgZW50aXR5IHJlZmVyZW5jZXMgYXJlIG5vdCByZS1tYW5nbGVkLgotICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjaGFyYWN0ZXJzVG9IVE1MRW50aXRpZXMoU3RyaW5nIHMpIHsKLSAgICBzID0gc3RyaW5nUmVwbGFjZShzLCBBTVBFUlNBTkQsIEFNUEVSU0FORF9IVE1MX0VOVElUWSk7Ci0gICAgcyA9IHN0cmluZ1JlcGxhY2UocywgTEVTU19USEFOLCBMRVNTX1RIQU5fSFRNTF9FTlRJVFkpOwotICAgIHMgPSBzdHJpbmdSZXBsYWNlKHMsIEdSRUFURVJfVEhBTiwgR1JFQVRFUl9USEFOX0hUTUxfRU5USVRZKTsKLSAgICBzID0gc3RyaW5nUmVwbGFjZShzLCBTUEFDRSwgU1BBQ0VfSFRNTF9FTlRJVFkpOwotICAgIHMgPSBzdHJpbmdSZXBsYWNlKHMsIFFVT1RBVElPTiwgUVVPVEFUSU9OX0hUTUxfRU5USVRZKTsKLSAgICByZXR1cm4gczsKLSAgfQotCi0gIC8qKgotICAgKiBSZXBsYWNlIHNwZWNpYWwgY2hhcmFjdGVycyB3aXRoIEhUTUwgZW50aXRpZXMgcmVwcmVzZW50aW5nIHRoZXNlIGNoYXJhY3RlcnMKLSAgICogQHJldHVybiBTdHJpbmcgVGhlIGNvbnZlcnRlZCBTdHJpbmcuIE5vdGU6IE9yZGVyIGlzIGltcG9ydGFudCBzbyB0aGF0IGNvcnJlY3RlZCBlbnRpdHkgcmVmZXJlbmNlcyBhcmUgbm90IHJlLW1hbmdsZWQuCi0gICAqLwotICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzU3RyaWN0KFN0cmluZyBzKSB7Ci0gICAgIHMgPSBzdHJpbmdSZXBsYWNlKHMsIEFNUEVSU0FORCwgQU1QRVJTQU5EX0hUTUxfRU5USVRZKTsKLSAgICAgcyA9IHN0cmluZ1JlcGxhY2UocywgTEVTU19USEFOLCBMRVNTX1RIQU5fSFRNTF9FTlRJVFkpOwotICAgICBzID0gc3RyaW5nUmVwbGFjZShzLCBHUkVBVEVSX1RIQU4sIEdSRUFURVJfVEhBTl9IVE1MX0VOVElUWSk7Ci0gICAgIHMgPSBzdHJpbmdSZXBsYWNlKHMsIFFVT1RBVElPTiwgUVVPVEFUSU9OX0hUTUxfRU5USVRZKTsKLSAgICAgcmV0dXJuIHM7Ci0gICB9Ci0KLSAgLyoqCi0gICogUmVwbGFjZSBIVE1MIGNoYXJhY3RlciBlbnRpdGllcyB3aXRoIHRoZWlyIGFzc29jaWF0ZWQgY2hhcmFjdGVycy4KLSAgKiBAcmV0dXJuIFN0cmluZyBUaGUgY29udmVydGVkIFN0cmluZy4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgaHRtbEVudGl0aWVzVG9DaGFyYWN0ZXJzKFN0cmluZyBzKSB7Ci0gICAgcyA9IHN0cmluZ1JlcGxhY2UocywgTEVTU19USEFOX0hUTUxfRU5USVRZLCBMRVNTX1RIQU4pOwotICAgIHMgPSBzdHJpbmdSZXBsYWNlKHMsIEdSRUFURVJfVEhBTl9IVE1MX0VOVElUWSwgR1JFQVRFUl9USEFOKTsKLSAgICBzID0gc3RyaW5nUmVwbGFjZShzLCBTUEFDRV9IVE1MX0VOVElUWSwgU1BBQ0UpOwotICAgIHMgPSBzdHJpbmdSZXBsYWNlKHMsIEFNUEVSU0FORF9IVE1MX0VOVElUWSwgQU1QRVJTQU5EKTsKLSAgICBzID0gc3RyaW5nUmVwbGFjZShzLCBRVU9UQVRJT05fSFRNTF9FTlRJVFksIFFVT1RBVElPTik7Ci0gICAgcmV0dXJuIHM7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgc3RyaW5nUmVwbGFjZShTdHJpbmcgcywgU3RyaW5nIG9sZFN0cmluZywgU3RyaW5nIG5ld1N0cmluZykgewotICAgIFN0cmluZyBzQ29weSA9IHM7Ci0gICAgaW50IGZyb21JbmRleCA9IDA7Ci0gICAgaW50IG9sZFN0cmluZ0luZGV4ID0gc0NvcHkuaW5kZXhPZihvbGRTdHJpbmcsIGZyb21JbmRleCk7Ci0gICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIHdoaWxlIChvbGRTdHJpbmdJbmRleCAhPSAtMSkgewotICAgICAgc2Iuc2V0TGVuZ3RoKDApOwotICAgICAgc2IuYXBwZW5kKHNDb3B5LnN1YnN0cmluZygwLCBvbGRTdHJpbmdJbmRleCkpOwotICAgICAgc2IuYXBwZW5kKG5ld1N0cmluZyk7Ci0gICAgICBzYi5hcHBlbmQoc0NvcHkuc3Vic3RyaW5nKG9sZFN0cmluZ0luZGV4ICsgb2xkU3RyaW5nLmxlbmd0aCgpLCBzQ29weS5sZW5ndGgoKSkpOwotICAgICAgc0NvcHkgPSBzYi50b1N0cmluZygpOwotICAgICAgZnJvbUluZGV4ID0gb2xkU3RyaW5nSW5kZXggKyBuZXdTdHJpbmcubGVuZ3RoKCk7Ci0gICAgICBvbGRTdHJpbmdJbmRleCA9IHNDb3B5LmluZGV4T2Yob2xkU3RyaW5nLCBmcm9tSW5kZXgpOwotICAgIH0KLSAgICByZXR1cm4gc0NvcHk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdXRpbC9NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91dGlsL011bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1YjU5NTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91dGlsL011bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbDsKLQotcHVibGljIGZpbmFsIGNsYXNzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uIGV4dGVuZHMgVGhyb3dhYmxlCi17Ci0gIC8qKgotCSAqIENvbW1lbnQgZm9yIDxjb2RlPnNlcmlhbFZlcnNpb25VSUQ8L2NvZGU+Ci0JICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMzI1Nzg0NTQ3MjIyNzExMDk2MUw7Ci0KLXB1YmxpYyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbihTdHJpbmcgbWVzc2FnZSkKLSAgewotICAgIHN1cGVyKG1lc3NhZ2UpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3V0aWwvTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdXRpbC9NdWx0aXBhcnRGb3JtRGF0YVBhcnNlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDhlZGZmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdXRpbC9NdWx0aXBhcnRGb3JtRGF0YVBhcnNlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQ3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbDsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OwotCi1wdWJsaWMgZmluYWwgY2xhc3MgTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIKLXsKLSAgcHJpdmF0ZSBIYXNodGFibGUgcGFyYW1UYWJsZV87Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DT05URU5UX1RZUEUgICAgICAgID0gIkNvbnRlbnQtVHlwZSI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfTVVMVElQQVJUICAgICAgICAgICA9ICJtdWx0aXBhcnQiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0JPVU5EQVJZICAgICAgICAgICAgPSAiYm91bmRhcnk9IjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DT05URU5UX0RJU1BPU0lUSU9OID0gIkNvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YSI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfTkFNRSAgICAgICAgICAgICAgICA9ICJuYW1lPVwiIjsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBieXRlIFBBUlNFUl9TVEFURV9JTklUSUFMICAgICAgICAgPSAwOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBieXRlIFBBUlNFUl9TVEFURV9CT1VOREFSWSAgICAgICAgPSAxOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBieXRlIFBBUlNFUl9TVEFURV9QQVJBTUVURVIgICAgICAgPSAyOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBieXRlIFBBUlNFUl9TVEFURV9CTEFOSyAgICAgICAgICAgPSAzOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBieXRlIFBBUlNFUl9TVEFURV9EQVRBICAgICAgICAgICAgPSA0OwotCi0gIHByaXZhdGUgc3RhdGljIFN0cmluZyBwYXJzZXJTdGF0ZXNbXSA9IHsiaW5pdGlhbCIsImJvdW5kYXJ5IiwicGFyYW1ldGVyIG5hbWUiLCJibGFuayBsaW5lIiwiZGF0YSJ9OwotCi0gIHB1YmxpYyBNdWx0aXBhcnRGb3JtRGF0YVBhcnNlcigpCi0gIHsKLSAgfQotICAKLSAgcHVibGljIE11bHRpcGFydEZvcm1EYXRhUGFyc2VyKEhhc2h0YWJsZSBwYXJhbWV0ZXJzKQotICB7Ci0gICAgcGFyYW1UYWJsZV8gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgZm9yIChJdGVyYXRvciBpdCA9IHBhcmFtZXRlcnMua2V5U2V0KCkuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBPYmplY3Qga2V5ID0gaXQubmV4dCgpOwotICAgICAgT2JqZWN0IHZhbHVlID0gcGFyYW1ldGVycy5nZXQoa2V5KTsKLSAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIExpc3QpCi0gICAgICB7Ci0gICAgICAgIExpc3QgbGlzdCA9IChMaXN0KXZhbHVlOwotICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0MiA9IGxpc3QuaXRlcmF0b3IoKTsgaXQyLmhhc05leHQoKTspCi0gICAgICAgICAgc2F2ZURhdGEoa2V5LnRvU3RyaW5nKCksIGl0Mi5uZXh0KCkudG9TdHJpbmcoKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmICh2YWx1ZS5nZXRDbGFzcygpLmlzQXJyYXkoKSkKLSAgICAgIHsKLSAgICAgICAgT2JqZWN0W10gYXJyYXkgPSAoT2JqZWN0W10pdmFsdWU7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspCi0gICAgICAgICAgc2F2ZURhdGEoa2V5LnRvU3RyaW5nKCksIGFycmF5W2ldLnRvU3RyaW5nKCkpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBzYXZlRGF0YShrZXkudG9TdHJpbmcoKSwgdmFsdWUudG9TdHJpbmcoKSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFBhcnNlIGEgbXVsdGlwYXJ0L2Zvcm0tZGF0YSBlbmNvZGVkIHBvc3QgcmVxdWVzdCB3aXRoIGEgZ2l2ZW4gZW5jb2RpbmcuCi0gICAqIElmIHRoZSBlbmNvZGluZyBpcyBudWxsLCB1c2UgdGhlIHN5c3RlbSBkZWZhdWx0IGVuY29kaW5nLiB1dGYtOCBpcyBub3QgYQotICAgKiBiYWQgY2hvaWNlIGZvciB0aGUgZW5jb2RpbmcuCi0gICAqLwotICBwdWJsaWMgZmluYWwgdm9pZCBwYXJzZVJlcXVlc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsU3RyaW5nIGVuY29kaW5nKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIC8vIENvbnRlbnQtVHlwZSBoZWFkZXIgc2hvdWxkIGhhdmUgdGhlIGZvcm06Ci0gICAgLy8gbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9Li4uCi0gICAgLy8KLSAgICAvLyBSRkMyMDQ2IDUuMS4xIHBhZ2UgMTksIHBhcmFncmFwaCAyOgotICAgIC8vIFRoZSBDb250ZW50LVR5cGUgZmllbGQgZm9yIG11bHRpcGFydCBlbnRpdGllcyByZXF1aXJlcyBvbmUgcGFyYW1ldGVyLCAiYm91bmRhcnkiIChubyBxdW90ZXMpCi0gICAgU3RyaW5nIGNvbnRlbnRUeXBlID0gcmVxdWVzdC5nZXRIZWFkZXIoSEVBREVSX0NPTlRFTlRfVFlQRSk7Ci0gICAgaWYgKGNvbnRlbnRUeXBlID09IG51bGwgfHwgIWNvbnRlbnRUeXBlLnN0YXJ0c1dpdGgoSEVBREVSX01VTFRJUEFSVCkgfHwgY29udGVudFR5cGUuaW5kZXhPZihIRUFERVJfQk9VTkRBUlkpID09IC0xKQotICAgICAgdGhyb3cgbmV3IE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uKCJDb250ZW50LVR5cGUgaXMgbm90IG11bHRpcGFydC9mb3JtLWRhdGEiKTsKLQotICAgIC8vIFJGQzIwNDYgNS4xLjEgcGFnZSAxOSwgcGFyYWdyYXBoIDQ6Ci0gICAgLy8gVGhlIGJvdW5kYXJ5IHZhbHVlIG1heSBiZSBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGVzLiBTdHJpcCB0aGVzZSBpZiB0aGV5IGFyZSBwcmVzZW50LgotICAgIFN0cmluZyBib3VuZGFyeSA9IGNvbnRlbnRUeXBlLnN1YnN0cmluZyhjb250ZW50VHlwZS5pbmRleE9mKEhFQURFUl9CT1VOREFSWSkrSEVBREVSX0JPVU5EQVJZLmxlbmd0aCgpLGNvbnRlbnRUeXBlLmxlbmd0aCgpKTsKLSAgICBpZiAoYm91bmRhcnkuY2hhckF0KDApID09ICdcIicgJiYgYm91bmRhcnkuY2hhckF0KGJvdW5kYXJ5Lmxlbmd0aCgpLTEpID09ICdcIicpCi0gICAgICBib3VuZGFyeSA9IGJvdW5kYXJ5LnN1YnN0cmluZygxLGJvdW5kYXJ5Lmxlbmd0aCgpLTEpOwotCi0gICAgLy8gUkZDMjA0NiA1LjEuMSBwYWdlIDE5LCBwYXJhZ3JhcGggMjoKLSAgICAvLyBUaGUgYm91bmRhcnkgZGVsaW1pdGVyIGxpbmUgaXMgdGhlbiBkZWZpbmVkIGFzIGEgbGluZSBjb25zaXN0aW5nIGVudGlyZWx5Ci0gICAgLy8gb2YgdHdvIGh5cGhlbiBjaGFyYWN0ZXJzLgotICAgIFN0cmluZyBkZWxpbWl0ZXIgPSAiLS0iK2JvdW5kYXJ5OwotCi0gICAgaWYgKHBhcmFtVGFibGVfID09IG51bGwpCi0gICAgICBwYXJhbVRhYmxlXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBlbHNlCi0gICAgICBwYXJhbVRhYmxlXy5jbGVhcigpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgQnVmZmVyZWRSZWFkZXIgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKHJlcXVlc3QuZ2V0SW5wdXRTdHJlYW0oKSxlbmNvZGluZykpOwotICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOwotICAgICAgU3RyaW5nIHBhcmFtZXRlck5hbWUgPSBudWxsOwotICAgICAgU3RyaW5nQnVmZmVyIHBhcmFtZXRlclZhbHVlID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgYnl0ZSBjdXJyZW50UGFyc2VyU3RhdGUgPSBQQVJTRVJfU1RBVEVfSU5JVElBTDsKLSAgICAgIHdoaWxlICgobGluZSA9IGJyLnJlYWRMaW5lKCkpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIC8vIExpbmVzIGFwcGVhciBpbiB0aGUgZm9sbG93aW5nIHNlcXVlbmNlLgotICAgICAgICAvLyAxKSBib3VuZGFyeSBpbmRpY2F0aW5nIHRoZSBzdGFydCBvZiBhIG5ldyBwYXJhbWV0ZXIgYW5kIGVuZCBvZiBhIGRhdGEgc2VnbWVudC4KLSAgICAgICAgLy8gMikgQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSIuLi4iIC0gdGhlIG5hbWUgb2YgYSBuZXcgcGFyYW1ldGVyLgotICAgICAgICAvLyAzKSBhIGJsYW5rIGxpbmUKLSAgICAgICAgLy8gNCkgZGF0YQotICAgICAgICAvLwotICAgICAgICAvLyBGb3IgZWFjaCBwYXJhbWV0ZXIsIHRoZSBzZXF1ZW5jZSBpcyByZXBlYXRlZC4KLSAgICAgICAgaWYgKGxpbmUuc3RhcnRzV2l0aChkZWxpbWl0ZXIpKQotICAgICAgICB7Ci0gICAgICAgICAgYnl0ZVtdIGV4cGVjdGVkUGFyc2VyU3RhdGVzID0ge1BBUlNFUl9TVEFURV9JTklUSUFMLFBBUlNFUl9TVEFURV9EQVRBfTsKLSAgICAgICAgICBpZiAoaXNWYWxpZFBhcnNlclN0YXRlKGN1cnJlbnRQYXJzZXJTdGF0ZSxleHBlY3RlZFBhcnNlclN0YXRlcykpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gU2F2ZSBhbnkgY3VycmVudCBkYXRhIGFuZCBwcmVwYXJlIGZvciBhIG5ldyBwYXJhbWV0ZXIgbmFtZS4KLSAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJOYW1lICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHNhdmVEYXRhKHBhcmFtZXRlck5hbWUscGFyYW1ldGVyVmFsdWUudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICAgIHBhcmFtZXRlck5hbWUgPSBudWxsOwotICAgICAgICAgICAgICBwYXJhbWV0ZXJWYWx1ZS5zZXRMZW5ndGgoMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjdXJyZW50UGFyc2VyU3RhdGUgPSBQQVJTRVJfU1RBVEVfQk9VTkRBUlk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRocm93IG5ldyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbihnZXRQYXJzZXJFeGNlcHRpb25NZXNzYWdlKGN1cnJlbnRQYXJzZXJTdGF0ZSxleHBlY3RlZFBhcnNlclN0YXRlcykpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aChIRUFERVJfQ09OVEVOVF9ESVNQT1NJVElPTikpCi0gICAgICAgIHsKLSAgICAgICAgICBieXRlW10gZXhwZWN0ZWRQYXJzZXJTdGF0ZXMgPSB7UEFSU0VSX1NUQVRFX0JPVU5EQVJZfTsKLSAgICAgICAgICBpZiAoaXNWYWxpZFBhcnNlclN0YXRlKGN1cnJlbnRQYXJzZXJTdGF0ZSxleHBlY3RlZFBhcnNlclN0YXRlcykpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gT2J0YWluIHRoZSBwYXJhbWV0ZXIgbmFtZSB3aXRob3V0IHRoZSBzdXJyb3VuZGluZyBkb3VibGUgcXVvdGVzLiBBY2NvdW50cyBmb3IgUkZDIDE4NjcgdG9vLgotICAgICAgICAgICAgaW50IHBhcmFtZXRlck5hbWVTdGFydGluZ1Bvc2l0aW9uID0gbGluZS5pbmRleE9mKEhFQURFUl9OQU1FKStIRUFERVJfTkFNRS5sZW5ndGgoKTsKLSAgICAgICAgICAgIHBhcmFtZXRlck5hbWUgPSBsaW5lLnN1YnN0cmluZyhwYXJhbWV0ZXJOYW1lU3RhcnRpbmdQb3NpdGlvbiwrcGFyYW1ldGVyTmFtZVN0YXJ0aW5nUG9zaXRpb24rbGluZS5zdWJzdHJpbmcocGFyYW1ldGVyTmFtZVN0YXJ0aW5nUG9zaXRpb24pLmluZGV4T2YoJ1wiJykpOwotICAgICAgICAgICAgY3VycmVudFBhcnNlclN0YXRlID0gUEFSU0VSX1NUQVRFX1BBUkFNRVRFUjsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoY3VycmVudFBhcnNlclN0YXRlID09IFBBUlNFUl9TVEFURV9QQVJBTUVURVIpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBBIGJsYW5rIGxpbmUgc2hvdWxkIGZvbGxvdyB0aGUgUEFSQU1FVEVSLiBEaXNjYXJkIHRoZSBsaW5lIGFuZCBtb3ZlIG9uLgotICAgICAgICAgIGN1cnJlbnRQYXJzZXJTdGF0ZSA9IFBBUlNFUl9TVEFURV9CTEFOSzsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBFeHBlY3QgdGhlIGxpbmUgdG8gY29udGFpbiBkYXRhLgotICAgICAgICAgIGlmIChwYXJhbWV0ZXJWYWx1ZS5sZW5ndGgoKSA+IDApCi0gICAgICAgICAgICBwYXJhbWV0ZXJWYWx1ZS5hcHBlbmQoJ1xuJyk7Ci0gICAgICAgICAgcGFyYW1ldGVyVmFsdWUuYXBwZW5kKGxpbmUpOwotICAgICAgICAgIGN1cnJlbnRQYXJzZXJTdGF0ZSA9IFBBUlNFUl9TVEFURV9EQVRBOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24odC5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgICAvL2R1bXBQYXJhbVRhYmxlKCk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgYSByZXF1ZXN0IHBhcmFtZXRlciBhcyBhIFN0cmluZywgb3IgbnVsbCBpZiB0aGUgcGFyYW1ldGVyIGRvZXMgbm90IGV4aXN0LgotICAgKiBJZiB0aGUgcGFyYW1ldGVyIGhhcyBtdWx0aXBsZSB2YWx1ZXMsIG9ubHkgdGhlIGZpcnN0IHZhbHVlIGlzIHJldHVybmVkLiBVc2UgZ2V0UGFyYW1ldGVyVmFsdWVzKCkKLSAgICogZm9yIHBhcmFtZXRlcnMgd2l0aCBtdWx0aXBsZSB2YWx1ZXMuCi0gICAqLwotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFBhcmFtZXRlcihTdHJpbmcgcGFyYW1ldGVyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIGlmIChwYXJhbVRhYmxlXyA9PSBudWxsKQotICAgICAgdGhyb3cgbmV3IE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uKCJQYXJzZXIgY29udGFpbnMgbm8gcGFyc2VkIGRhdGEiKTsKLSAgICBWZWN0b3IgdmFsdWVzID0gKFZlY3RvcilwYXJhbVRhYmxlXy5nZXQocGFyYW1ldGVyKTsKLSAgICByZXR1cm4gKCh2YWx1ZXMgIT0gbnVsbCk/KChTdHJpbmcpdmFsdWVzLmVsZW1lbnRBdCgwKSk6bnVsbCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nW10gZ2V0UGFyYW1ldGVyVmFsdWVzKFN0cmluZyBwYXJhbWV0ZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgaWYgKHBhcmFtVGFibGVfID09IG51bGwpCi0gICAgICB0aHJvdyBuZXcgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24oIlBhcnNlciBjb250YWlucyBubyBwYXJzZWQgZGF0YSIpOwotICAgIFZlY3RvciB2YWx1ZXNWZWN0b3IgPSAoVmVjdG9yKXBhcmFtVGFibGVfLmdldChwYXJhbWV0ZXIpOwotICAgIGlmICh2YWx1ZXNWZWN0b3IgPT0gbnVsbCkKLSAgICAgIHJldHVybiBudWxsOwotICAgIFN0cmluZ1tdIHZhbHVlc0FycmF5ID0gbmV3IFN0cmluZ1t2YWx1ZXNWZWN0b3Iuc2l6ZSgpXTsKLSAgICBmb3IgKGludCBpPTA7aTx2YWx1ZXNBcnJheS5sZW5ndGg7aSsrKQotICAgICAgdmFsdWVzQXJyYXlbaV0gPSAoU3RyaW5nKXZhbHVlc1ZlY3Rvci5lbGVtZW50QXQoaSk7Ci0gICAgcmV0dXJuIHZhbHVlc0FycmF5OwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZ1tdIGdldFBhcmFtZXRlck5hbWVzKCkgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBpZiAocGFyYW1UYWJsZV8gPT0gbnVsbCkKLSAgICAgIHRocm93IG5ldyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbigiUGFyc2VyIGNvbnRhaW5zIG5vIHBhcnNlZCBkYXRhIik7Ci0KLSAgICBpbnQgc2l6ZSA9IHBhcmFtVGFibGVfLnNpemUoKTsKLSAgICBpZiAoc2l6ZSA9PSAwKQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgU3RyaW5nW10gbmFtZXMgPSBuZXcgU3RyaW5nW3NpemVdOwotICAgIEVudW1lcmF0aW9uIGtleXMgPSBwYXJhbVRhYmxlXy5rZXlzKCk7Ci0gICAgZm9yIChpbnQgaT0wO2k8c2l6ZTtpKyspCi0gICAgICBuYW1lc1tpXSA9IChTdHJpbmcpa2V5cy5uZXh0RWxlbWVudCgpOwotICAgIHJldHVybiBuYW1lczsKLSAgfQotCi0gIHByaXZhdGUgZmluYWwgdm9pZCBzYXZlRGF0YShTdHJpbmcgcGFyYW1ldGVyTmFtZSxTdHJpbmcgcGFyYW1ldGVyVmFsdWUpCi0gIHsKLSAgICBWZWN0b3IgdmFsdWVzID0gKFZlY3RvcilwYXJhbVRhYmxlXy5nZXQocGFyYW1ldGVyTmFtZSk7Ci0gICAgaWYgKHZhbHVlcyA9PSBudWxsKQotICAgICAgdmFsdWVzID0gbmV3IFZlY3RvcigpOwotICAgIHZhbHVlcy5hZGRFbGVtZW50KHBhcmFtZXRlclZhbHVlKTsKLSAgICBwYXJhbVRhYmxlXy5wdXQocGFyYW1ldGVyTmFtZSx2YWx1ZXMpOwotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIGlzVmFsaWRQYXJzZXJTdGF0ZShieXRlIGN1cnJlbnRTdGF0ZSxieXRlW10gZXhwZWN0ZWRTdGF0ZXMpCi0gIHsKLSAgICBib29sZWFuIHZhbGlkaXR5ID0gZmFsc2U7Ci0gICAgZm9yIChpbnQgaT0wO2k8ZXhwZWN0ZWRTdGF0ZXMubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICBpZiAoY3VycmVudFN0YXRlID09IGV4cGVjdGVkU3RhdGVzW2ldKQotICAgICAgewotICAgICAgICB2YWxpZGl0eSA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdmFsaWRpdHk7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIFN0cmluZyBnZXRQYXJzZXJFeGNlcHRpb25NZXNzYWdlKGJ5dGUgY3VycmVudFN0YXRlLGJ5dGVbXSBleHBlY3RlZFN0YXRlcykKLSAgewotICAgIFN0cmluZ0J1ZmZlciBtc2cgPSBuZXcgU3RyaW5nQnVmZmVyKCJQYXJzZXIgc3RhdGUgaW5jb25zaXN0ZW5jeSEiKTsKLSAgICBtc2cuYXBwZW5kKCdcbicpOwotICAgIG1zZy5hcHBlbmQoIkN1cnJlbnQgc3RhdGUgICAgOiAiKS5hcHBlbmQocGFyc2VyU3RhdGVzW2N1cnJlbnRTdGF0ZV0pLmFwcGVuZCgnXG4nKTsKLSAgICBtc2cuYXBwZW5kKCJFeHBlY3RlZCBzdGF0ZShzKTogIik7Ci0gICAgZm9yIChpbnQgaT0wO2k8ZXhwZWN0ZWRTdGF0ZXMubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICBtc2cuYXBwZW5kKHBhcnNlclN0YXRlc1tleHBlY3RlZFN0YXRlc1tpXV0pOwotICAgICAgaWYgKGkgIT0gZXhwZWN0ZWRTdGF0ZXMubGVuZ3RoLTEpCi0gICAgICAgIG1zZy5hcHBlbmQoIiwgIik7Ci0gICAgfQotICAgIG1zZy5hcHBlbmQoJ1xuJyk7Ci0gICAgcmV0dXJuIG1zZy50b1N0cmluZygpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3V0aWwvUXVpY2tTb3J0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3V0aWwvUXVpY2tTb3J0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwMThlZTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91dGlsL1F1aWNrU29ydC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjE3ICAgMTI3MTM4IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBjb20uaWJtLmljdS50ZXh0LkNvbGxhdG9yOwotCi1wdWJsaWMgY2xhc3MgUXVpY2tTb3J0Ci17Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgdm9pZCBzb3J0KE9iamVjdFtdIGEsaW50IGxvLGludCBoaSkKLSAgewotICAgIE9iamVjdCB0bXA7Ci0gICAgaW50IGkgPSBsbzsKLSAgICBpbnQgaiA9IGhpOwotICAgIE9iamVjdCB4ID0gYVsobG8raGkpLzJdOwotICAgIENvbGxhdG9yIGNvbGxhdG9yID0gQ29sbGF0b3IuZ2V0SW5zdGFuY2UoKTsKLQotICAgIGRvCi0gICAgewotICAgICAgd2hpbGUgKGNvbGxhdG9yLmNvbXBhcmUoYVtpXS50b1N0cmluZygpLHgudG9TdHJpbmcoKSkgPCAwKSBpKys7Ci0gICAgICB3aGlsZSAoY29sbGF0b3IuY29tcGFyZShhW2pdLnRvU3RyaW5nKCkseC50b1N0cmluZygpKSA+IDApIGotLTsKLSAgICAgIGlmIChpIDw9IGopCi0gICAgICB7Ci0gICAgICAgIHRtcCA9IGFbaV07Ci0gICAgICAgIGFbaV0gPSBhW2pdOwotICAgICAgICBhW2pdID0gdG1wOwotICAgICAgICBpKys7Ci0gICAgICAgIGotLTsKLSAgICAgIH0KLSAgICB9IHdoaWxlIChpIDw9IGopOwotCi0gICAgaWYgKGxvIDwgaikKLSAgICAgIHNvcnQoYSxsbyxqKTsKLSAgICBpZiAoaSA8IGhpKQotICAgICAgc29ydChhLGksaGkpOwotICB9Ci0KLSAgLyoKLSAgKiBUaGlzIG1ldGhvZCB3aWxsIHVzZSB0aGUgc2FtZSBhbGdvcml0aG0gYXMgYWJvdmUKLSAgKiB3aXRoIHRoZSBleGNlcHRpb24gdGhhdCBhbnkgbnVsbHMgd2lsbCBiZSBhdHRhY2hlZAotICAqIGF0IHRoZSBlbmQKLSAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCB2b2lkIHNvcnQoVmVjdG9yIHYpCi0gIHsKLSAgICAvLyBkbyBub3Qgc29ydCBpZiB2ZWN0b3IgY29udGFpbnMgbGVzcyB0aGFuIDIgZWxlbWVudHMKLSAgICBpZiAodi5zaXplKCkgPCAyKQotICAgICAgICByZXR1cm47Ci0gIAotICAgIC8vIHB1bGxzIG91dCB0aGUgbnVsbHMKLSAgICBWZWN0b3IgbnVsbHMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2LnNpemUoKTsgaSsrKSB7Ci0gICAgICBPYmplY3Qgb2JqID0gdi5lbGVtZW50QXQoaSk7Ci0gICAgICBpZiAob2JqID09IG51bGwgfHwgb2JqLnRvU3RyaW5nKCkgPT0gbnVsbCkgewotICAgICAgICBudWxscy5hZGQob2JqKTsKLSAgICAgICAgdi5yZW1vdmUoaSk7Ci0gICAgICAgIGktLTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBzb3J0IHRoZSBub3QgbnVsbCBvYmplY3RzCi0gICAgT2JqZWN0W10gb2JqcyA9IHYudG9BcnJheSgpOwotICAgIC8vIGRvIG5vdCBzb3J0IGlmIGFycmF5IGNvbnRhaW5zIGxlc3MgdGhhbiAyIG9iamVjdHMKLSAgICBpZiAob2Jqcy5sZW5ndGggPj0gMikKLSAgICAgICAgc29ydChvYmpzLCAwLCBvYmpzLmxlbmd0aC0xKTsKLQotICAgIC8vIHJlLWNvbnN0cnVjdCB0aGUgdmVjdG9yIGZyb20gdGhlIHNvcnRlZCBvYmplY3RzLCB0aGVuIHRoZSBudWxscwotICAgIHYuY2xlYXIoKTsKLSAgICBmb3IgKGludCBqID0gMDsgaiA8IG9ianMubGVuZ3RoOyBqKyspIHsKLSAgICAgICAgdi5hZGQob2Jqc1tqXSk7Ci0gICAgfQotICAgIHYuYWRkQWxsKG51bGxzKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91dGlsL1RyaW1GaWx0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdXRpbC9UcmltRmlsdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiODRmOWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91dGlsL1RyaW1GaWx0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbVdyaXRlcjsKLWltcG9ydCBqYXZheC5zZXJ2bGV0LkZpbHRlcjsKLWltcG9ydCBqYXZheC5zZXJ2bGV0LkZpbHRlckNoYWluOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuRmlsdGVyQ29uZmlnOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRSZXF1ZXN0OwotaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldFJlc3BvbnNlOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlOwotCi1wdWJsaWMgY2xhc3MgVHJpbUZpbHRlciBpbXBsZW1lbnRzIEZpbHRlcgotewotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBqYXZheC5zZXJ2bGV0LkZpbHRlciNpbml0KGphdmF4LnNlcnZsZXQuRmlsdGVyQ29uZmlnKQotICAgKi8KLSAgcHVibGljIHZvaWQgaW5pdChGaWx0ZXJDb25maWcgYXJnMCkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24KLSAgewotICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGphdmF4LnNlcnZsZXQuRmlsdGVyI2RvRmlsdGVyKGphdmF4LnNlcnZsZXQuU2VydmxldFJlcXVlc3QsIGphdmF4LnNlcnZsZXQuU2VydmxldFJlc3BvbnNlLCBqYXZheC5zZXJ2bGV0LkZpbHRlckNoYWluKQotICAgKi8KLSAgcHVibGljIHZvaWQgZG9GaWx0ZXIoU2VydmxldFJlcXVlc3QgcmVxLCBTZXJ2bGV0UmVzcG9uc2UgcmVzcCwgRmlsdGVyQ2hhaW4gZmMpIHRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbgotICB7Ci0gICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgIENoYXJBcnJheVdyYXBwZXIgcmVzcG9uc2VXcmFwcGVyID0gbmV3IENoYXJBcnJheVdyYXBwZXIoKEh0dHBTZXJ2bGV0UmVzcG9uc2UpcmVzcCk7Ci0gICAgLy8gSGFjayBmb3IgVG9tY2F0IHBlcmZvcm1hbmNlIHByb2JsZW0gd2l0aCBmaWx0ZXJzLgotICAgIE91dHB1dFN0cmVhbVdyaXRlciBvc3cgPSBuZXcgT3V0cHV0U3RyZWFtV3JpdGVyKHJlc3AuZ2V0T3V0cHV0U3RyZWFtKCksSFRNTFV0aWxzLlVURjhfRU5DT0RJTkcpOwotICAgIGZjLmRvRmlsdGVyKHJlcSxyZXNwb25zZVdyYXBwZXIpOwotICAgIFN0cmluZyByZXNwb25zZVN0cmluZyA9IHJlc3BvbnNlV3JhcHBlci50b1N0cmluZygpOwotICAgIG9zdy53cml0ZShyZXNwb25zZVN0cmluZy50cmltKCkpOwotICAgIG9zdy5jbG9zZSgpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGphdmF4LnNlcnZsZXQuRmlsdGVyI2Rlc3Ryb3koKQotICAgKi8KLSAgcHVibGljIHZvaWQgZGVzdHJveSgpCi0gIHsKLSAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0KLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3V0aWwvVVJMVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdXRpbC9VUkxVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzA3MGIzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdXRpbC9VUkxVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWw7Ci0KLWltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMRGVjb2RlcjsKLWltcG9ydCBqYXZhLm5ldC5VUkxFbmNvZGVyOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgY29udGFpbnMgdXRpbGl0eSBtZXRob2RzIGZvciBtYW5hZ2luZyBVUkxzCi0gKiBhcyB1c2VkIGJ5IHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgV2ViIGFwcGxpY2F0aW9uLgotICogQGF1dGhvciBjYnJlYWxleUBjYS5pYm0uY29tCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBVUkxVdGlscwotewotCS8qKgotCSAqIE9iamVjdHMgb2YgdGhpcyBjbGFzcyBzaG91bGQgbm90IGJlIGNvbnN0cnVjdGVkLgotCSAqLwotCXByaXZhdGUgVVJMVXRpbHMgKCkKLQl7Ci0JfQotCi0JLyoqCi0JICogVVRGLTgKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBVVEY4ID0gIlVURi04IjsKLQotCS8qKgotCSAqIEVxdWl2YWxlbnQgdG8ge0BsaW5rICNlbmNvZGUoU3RyaW5nLFN0cmluZyl9Ci0JICogd2l0aCBzZWNvbmQgcGFyYW1ldGVyIHNldCB0byB0aGUgIlVURi04IiBlbmNvZGluZy4KLQkgKiBAcGFyYW0gcyBUaGUgc3RyaW5nIHRvIGVuY29kZS4KLQkgKiBAcmV0dXJuIFRoZSBlbmNvZGVkIHN0cmluZy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBlbmNvZGUoU3RyaW5nIHMpCi0JewotCQlyZXR1cm4gZW5jb2RlKHMsVVRGOCk7Ci0JfQotCQotCS8qKgotCSAqIEVxdWl2YWxlbnQgdG8ge0BsaW5rIFVSTEVuY29kZXIjZW5jb2RlKFN0cmluZyxTdHJpbmcpfSwKLQkgKiBvbmx5IHRocm93cyBhbiB1bmNoZWNrZWQge0BsaW5rIFJ1bnRpbWVFeGNlcHRpb259IHdyYXBwZWQKLQkgKiBhcm91bmQgYW4ge0BsaW5rIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb259IGluc3RlYWQgb2YKLQkgKiBhbiB7QGxpbmsgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbn0uCi0JICogQHBhcmFtIHMgVGhlIHN0cmluZyB0byBlbmNvZGUuCi0JICogQHBhcmFtIGVuYyBUaGUgZW5jb2RpbmcgdG8gdXNlLgotCSAqIEByZXR1cm4gVGhlIGVuY29kZWQgc3RyaW5nLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGVuY29kZShTdHJpbmcgcywgU3RyaW5nIGVuYykKLQl7Ci0JCXRyeQotCQl7Ci0JCQlyZXR1cm4gVVJMRW5jb2Rlci5lbmNvZGUocyxlbmMpOwotCQl9Ci0JCWNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUpCi0JCXsKLQkJCS8vIFRPRE86IE1TR19CUk9LRU5fVk1fRE9FU19OT1RfU1VQUE9SVF9VVEYtOAotCQkJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIiVNU0dfQlJPS0VOX1ZNX0RPRVNfTk9UX1NVUFBPUlRfVVRGLTgiLGUpOwotCQl9Ci0JfQotCQotCS8qKgotCSAqIEVxdWl2YWxlbnQgdG8ge0BsaW5rICNkZWNvZGUoU3RyaW5nLFN0cmluZyl9Ci0JICogd2l0aCBzZWNvbmQgcGFyYW1ldGVyIHNldCB0byB0aGUgIlVURi04IiBlbmNvZGluZy4KLQkgKiBAcGFyYW0gcyBUaGUgc3RyaW5nIHRvIGRlY29kZS4KLQkgKiBAcmV0dXJuIFRoZSBkZWNvZGVkIHN0cmluZy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBkZWNvZGUoU3RyaW5nIHMpCi0JewotCQlyZXR1cm4gZGVjb2RlKHMsVVRGOCk7Ci0JfQotCQotCS8qKgotCSAqIEVxdWl2YWxlbnQgdG8ge0BsaW5rIFVSTEVuY29kZXIjZGVjb2RlKFN0cmluZyxTdHJpbmcpfSwKLQkgKiBvbmx5IHRocm93cyBhbiB1bmNoZWNrZWQge0BsaW5rIFJ1bnRpbWVFeGNlcHRpb259IHdyYXBwZWQKLQkgKiBhcm91bmQgYW4ge0BsaW5rIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb259IGluc3RlYWQgb2YKLQkgKiBhbiB7QGxpbmsgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbn0uCi0JICogQHBhcmFtIHMgVGhlIHN0cmluZyB0byBkZWNvZGUuCi0JICogQHBhcmFtIGVuYyBUaGUgZW5jb2RpbmcgdG8gdXNlLgotCSAqIEByZXR1cm4gVGhlIGRlY29kZWQgc3RyaW5nLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGRlY29kZShTdHJpbmcgcywgU3RyaW5nIGVuYykKLQl7Ci0JCXRyeQotCQl7Ci0JCQlyZXR1cm4gVVJMRGVjb2Rlci5kZWNvZGUocyxlbmMpOwotCQl9Ci0JCWNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUpCi0JCXsKLQkJCS8vIFRPRE86IE1TR19CUk9LRU5fVk1fRE9FU19OT1RfU1VQUE9SVF9VVEYtOAotCQkJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIiVNU0dfQlJPS0VOX1ZNX0RPRVNfTk9UX1NVUFBPUlRfVVRGLTgiLGUpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91dGlsL1ZhbGlkYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS91dGlsL1ZhbGlkYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjM4ZWEyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdXRpbC9WYWxpZGF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDYxMiAgIDE0MjI5MCBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbDsKLQotcHVibGljIGNsYXNzIFZhbGlkYXRvcgotewotICBwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gdmFsaWRhdGVTdHJpbmcoU3RyaW5nIGlucHV0KQotICB7Ci0gICAgcmV0dXJuICgoaW5wdXQgIT0gbnVsbCkgJiYgKGlucHV0LnRyaW0oKS5sZW5ndGgoKSA+IDApKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiB2YWxpZGF0ZVVSTChTdHJpbmcgaW5wdXQpCi0gIHsKLQkgIHJldHVybiAoaW5wdXQgIT0gbnVsbCAmJiBpbnB1dC5tYXRjaGVzKCJbYS16QS1aXFwrXFwtXFwuXSsrOi4qIikpOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gdmFsaWRhdGVJbnRlZ2VyKFN0cmluZyBpbnB1dCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIEludGVnZXIucGFyc2VJbnQoaW5wdXQpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3V0aWwvWE1MVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdXRpbC9YTUxVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YmQ1NjM5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vdXRpbC9YTUxVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbDsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlckZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLk91dHB1dEtleXM7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lcjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRmFjdG9yeTsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLmRvbS5ET01Tb3VyY2U7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5zdHJlYW0uU3RyZWFtUmVzdWx0OwotCi1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnRGcmFnbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKLQotcHVibGljIGZpbmFsIGNsYXNzIFhNTFV0aWxzCi17Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFVURjhfRU5DT0RJTkcgPSAiVVRGLTgiOyAKLQkKLSAgLyoqCi0gICAqIFNlcmlhbGl6ZSBhbiBYTUwgRWxlbWVudCBpbnRvIGEgU3RyaW5nLgotICAgKiBAcGFyYW0gZSBFbGVtZW50IHRvIGJlIHNlcmlhbGl6ZWQuCi0gICAqIEBwYXJhbSBvbWl0WE1MRGVjbGFyYXRpb24gYm9vbGVhbiByZXByZXNlbnRpbmcgd2hldGhlciBvciBub3QgdG8gb21pdCB0aGUgWE1MIGRlY2xhcmF0aW9uLgotICAgKiBAcmV0dXJuIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgWE1MIGRvY3VtZW50IGZyYWdtZW50LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgc2VyaWFsaXplKEVsZW1lbnQgZSxib29sZWFuIG9taXRYTUxEZWNsYXJhdGlvbikKLSAgewotICAgIGlmIChlICE9IG51bGwpCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0JCURPTVNvdXJjZSBkb21Tb3VyY2UgPSBuZXcgRE9NU291cmNlKGUpOwotCQlUcmFuc2Zvcm1lciBzZXJpYWxpemVyID0gVHJhbnNmb3JtZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3VHJhbnNmb3JtZXIoKTsKLQkJc2VyaWFsaXplci5zZXRPdXRwdXRQcm9wZXJ0eShPdXRwdXRLZXlzLk9NSVRfWE1MX0RFQ0xBUkFUSU9OLCAoKG9taXRYTUxEZWNsYXJhdGlvbikgPyAieWVzIiA6ICJubyIpKTsKLQkJc2VyaWFsaXplci5zZXRPdXRwdXRQcm9wZXJ0eShPdXRwdXRLZXlzLklOREVOVCwgInllcyIpOwotCQlzZXJpYWxpemVyLnNldE91dHB1dFByb3BlcnR5KE91dHB1dEtleXMuRU5DT0RJTkcsIFVURjhfRU5DT0RJTkcpOwotCQlzZXJpYWxpemVyLnNldE91dHB1dFByb3BlcnR5KCJ7aHR0cDovL3htbC5hcGFjaGUub3JnL3hzbHR9aW5kZW50LWFtb3VudCIsICIyIik7Ci0JCUJ5dGVBcnJheU91dHB1dFN0cmVhbSBiYW9zID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwotCQlzZXJpYWxpemVyLnRyYW5zZm9ybShkb21Tb3VyY2UsIG5ldwlTdHJlYW1SZXN1bHQoYmFvcykpOwotCQliYW9zLmNsb3NlKCk7Ci0JCXJldHVybiBuZXcgU3RyaW5nKGJhb3MudG9CeXRlQXJyYXkoKSwgVVRGOF9FTkNPRElORyk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgICB7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0gICAgCi0gIC8qKgotICAgKiBTZXJpYWxpemUgYW4gWE1MIEVsZW1lbnQgaW50byBhIFN0cmluZy4KLSAgICogQHBhcmFtIGRmIERvY3VtZW50RnJhZ21lbnQgdG8gYmUgc2VyaWFsaXplZC4KLSAgICogQHBhcmFtIG9taXRYTUxEZWNsYXJhdGlvbiBib29sZWFuIHJlcHJlc2VudGluZyB3aGV0aGVyIG9yIG5vdCB0byBvbWl0IHRoZSBYTUwgZGVjbGFyYXRpb24uCi0gICAqIEByZXR1cm4gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBYTUwgZG9jdW1lbnQgZnJhZ21lbnQuCi0gICAqLyAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIHNlcmlhbGl6ZShEb2N1bWVudEZyYWdtZW50IGRmLGJvb2xlYW4gb21pdFhNTERlY2xhcmF0aW9uKQotICB7Ci0gICAgaWYgKGRmICE9IG51bGwpCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0JCURPTVNvdXJjZSBkb21Tb3VyY2UgPSBuZXcgRE9NU291cmNlKGRmKTsKLQkJVHJhbnNmb3JtZXIgc2VyaWFsaXplciA9IFRyYW5zZm9ybWVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld1RyYW5zZm9ybWVyKCk7Ci0JCXNlcmlhbGl6ZXIuc2V0T3V0cHV0UHJvcGVydHkoT3V0cHV0S2V5cy5PTUlUX1hNTF9ERUNMQVJBVElPTiwgKChvbWl0WE1MRGVjbGFyYXRpb24pID8gInllcyIgOiAibm8iKSk7Ci0JCXNlcmlhbGl6ZXIuc2V0T3V0cHV0UHJvcGVydHkoT3V0cHV0S2V5cy5JTkRFTlQsICJ5ZXMiKTsKLQkJc2VyaWFsaXplci5zZXRPdXRwdXRQcm9wZXJ0eShPdXRwdXRLZXlzLkVOQ09ESU5HLCBVVEY4X0VOQ09ESU5HKTsKLQkJc2VyaWFsaXplci5zZXRPdXRwdXRQcm9wZXJ0eSgie2h0dHA6Ly94bWwuYXBhY2hlLm9yZy94c2x0fWluZGVudC1hbW91bnQiLCAiMiIpOwotCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gYmFvcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLQkJc2VyaWFsaXplci50cmFuc2Zvcm0oZG9tU291cmNlLCBuZXcJU3RyZWFtUmVzdWx0KGJhb3MpKTsKLQkJYmFvcy5jbG9zZSgpOwotCQlyZXR1cm4gbmV3IFN0cmluZyhiYW9zLnRvQnl0ZUFycmF5KCksIFVURjhfRU5DT0RJTkcpOwotICAgICAgfQotICAgICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgICAgewotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgLyoqCi0gICAqIENyZWF0ZSBhIG5ldyBYTUwgRG9jdW1lbnQuCi0gICAqIEBwYXJhbSBkb2NCdWlsZGVyIERvY3VtZW50QnVpbGRlci4gU2V0dGluZyB0aGlzIHRvIG51bGwgd2lsbCBjcmVhdGUgYSBuZXcgRG9jdW1lbnRCdWlsZGVyLgotICAgKiBAcmV0dXJuIERvY3VtZW50Ci0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIERvY3VtZW50IGNyZWF0ZU5ld0RvY3VtZW50KERvY3VtZW50QnVpbGRlciBkb2NCdWlsZGVyKSB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbgotICB7Ci0gICAgaWYgKGRvY0J1aWxkZXIgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5IGZhY3RvcnkgPSBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0gICAgICBmYWN0b3J5LnNldE5hbWVzcGFjZUF3YXJlKGZhbHNlKTsKLSAgICAgIGZhY3Rvcnkuc2V0VmFsaWRhdGluZyhmYWxzZSk7Ci0gICAgICBkb2NCdWlsZGVyID0gZmFjdG9yeS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKLSAgICB9Ci0gICAgRG9jdW1lbnQgZG9jID0gZG9jQnVpbGRlci5uZXdEb2N1bWVudCgpOwotICAgIHJldHVybiBkb2M7Ci0gIH0KLQotICAvKioKLSAgICogQ29udmVydCB0aGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIEVsZW1lbnQgaW50byBhbiBFbGVtZW50Ci0gICAqIEBwYXJhbSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gRWxlbWVudC4KLSAgICogQHJldHVybiBFbGVtZW50Ci0gICAqLwotICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgc3RyaW5nVG9FbGVtZW50KFN0cmluZyBzKSB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiwgU0FYRXhjZXB0aW9uLCBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0gICAgcmV0dXJuIHN0cmluZ1RvRWxlbWVudChzLCBmYWxzZSk7Ci0gIH0KLQotICAvKioKLSAgICogQ29udmVydCB0aGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIEVsZW1lbnQgaW50byBhbiBFbGVtZW50Ci0gICAqIEBwYXJhbSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gRWxlbWVudC4KLSAgICogQHBhcmFtIGJvb2xlYW4gc2V0IHdoZXRoZXIgdGhlIHJldHVybiBFbGVtZW50IHNob3VsZCBiZSBuYW1lc3BhY2UgYXdhcmUuCi0gICAqIEByZXR1cm4gRWxlbWVudAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBFbGVtZW50IHN0cmluZ1RvRWxlbWVudChTdHJpbmcgcywgYm9vbGVhbiBuYW1lc3BhY2VBd2FyZSkgdGhyb3dzIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24sIFNBWEV4Y2VwdGlvbiwgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24KLSAgewotICAgIHJldHVybiBieXRlQXJyYXlUb0VsZW1lbnQocy5nZXRCeXRlcyhVVEY4X0VOQ09ESU5HKSwgbmFtZXNwYWNlQXdhcmUpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbnZlcnQgdGhlIGJ5dGUgYXJyYXkgcmVwcmVzZW50YXRpb24gb2YgYW4gRWxlbWVudCBpbnRvIGFuIEVsZW1lbnQKLSAgICogQHBhcmFtIGJ5dGVbXSByZXByZXNlbnRhdGlvbiBvZiBhbiBFbGVtZW50LgotICAgKiBAcGFyYW0gYm9vbGVhbiBzZXQgd2hldGhlciB0aGUgcmV0dXJuIEVsZW1lbnQgc2hvdWxkIGJlIG5hbWVzcGFjZSBhd2FyZS4KLSAgICogQHJldHVybiBFbGVtZW50Ci0gICAqLwotICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgYnl0ZUFycmF5VG9FbGVtZW50KGJ5dGVbXSBiLCBib29sZWFuIG5hbWVzcGFjZUF3YXJlKSB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiwgU0FYRXhjZXB0aW9uLCBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbgotICB7Ci0gICAgRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBkb2NCdWlsZGVyRmFjdG9yeSA9IERvY3VtZW50QnVpbGRlckZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLSAgICBkb2NCdWlsZGVyRmFjdG9yeS5zZXROYW1lc3BhY2VBd2FyZShuYW1lc3BhY2VBd2FyZSk7Ci0gICAgZG9jQnVpbGRlckZhY3Rvcnkuc2V0VmFsaWRhdGluZyhmYWxzZSk7Ci0gICAgRG9jdW1lbnRCdWlsZGVyIGRvY0J1aWxkZXIgPSBkb2NCdWlsZGVyRmFjdG9yeS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKLSAgICBEb2N1bWVudCBkb2MgPSBkb2NCdWlsZGVyLnBhcnNlKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShiKSk7Ci0gICAgcmV0dXJuIGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvQ2xlYXJXU0RMQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9DbGVhcldTRExBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQ4MTRiNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9DbGVhcldTRExBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5DbGVhck5vZGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuV1NETE1haW5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLldTRExOb2RlOwotCi1wdWJsaWMgY2xhc3MgQ2xlYXJXU0RMQWN0aW9uIGV4dGVuZHMgQ2xlYXJOb2RlQWN0aW9uIHsKLQotICBwdWJsaWMgQ2xlYXJXU0RMQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikgewotICAgIHN1cGVyKGNvbnRyb2xsZXIsIGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCkuZ2V0Tm9kZU1hbmFnZXIoKSk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSUQpIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoIndzZGwvYWN0aW9ucy9DbGVhcldTRExBY3Rpb25KU1AuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQobm9kZUlEKTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc0xpbmtQYXJhbWV0ZXJzKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0KSB7Ci0gICAgU3RyaW5nIG5vZGVJRFN0cmluZyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgIGludCBub2RlSUQ7Ci0gICAgdHJ5IHsKLSAgICAgIG5vZGVJRCA9IEludGVnZXIucGFyc2VJbnQobm9kZUlEU3RyaW5nKTsKLSAgICB9Ci0gICAgY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpIHsKLSAgICAgIG5vZGVJRCA9IG5vZGVNYW5hZ2VyXy5nZXRTZWxlY3RlZE5vZGVJZCgpOwotICAgIH0KLSAgICBib29sZWFuIHBhcmFtVmFsaWQgPSBmYWxzZTsKLSAgICBOb2RlIG5vZGUgPSBub2RlTWFuYWdlcl8uZ2V0Tm9kZShub2RlSUQpOwotICAgIGlmIChub2RlIGluc3RhbmNlb2YgV1NETE1haW5Ob2RlKQotICAgICAgcGFyYW1WYWxpZCA9IHRydWU7Ci0gICAgZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIFdTRExOb2RlKQotICAgICAgcGFyYW1WYWxpZCA9IHRydWU7Ci0gICAgZWxzZSB7Ci0gICAgICB3aGlsZSAobm9kZSAhPSBudWxsICYmICEobm9kZSBpbnN0YW5jZW9mIFdTRExNYWluTm9kZSkpIHsKLSAgICAgICAgbm9kZSA9IG5vZGUuZ2V0UGFyZW50KCk7Ci0gICAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgV1NETE5vZGUpIHsKLSAgICAgICAgICBub2RlSUQgPSBub2RlLmdldE5vZGVJZCgpOwotICAgICAgICAgIHBhcmFtVmFsaWQgPSB0cnVlOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuTk9ERUlELCBTdHJpbmcudmFsdWVPZihub2RlSUQpKTsKLSAgICByZXR1cm4gcGFyYW1WYWxpZDsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpIHsKLSAgICBpZiAoc3VwZXIucnVuKCkpIHsKLSAgICAgIG5vZGVNYW5hZ2VyXy5zZXRTZWxlY3RlZE5vZGVJZChub2RlTWFuYWdlcl8uZ2V0Um9vdE5vZGUoKS5nZXROb2RlSWQoKSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRUcmVlQ29udGVudFZhcigpIHsKLSAgICByZXR1cm4gIndzZGxOYXZpZ2F0b3JDb250ZW50IjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRQYWdlKCkgewotICAgIHJldHVybiAid3NkbC93c2RsX25hdmlnYXRvcl9jb250ZW50LmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKSB7Ci0gICAgcmV0dXJuICJ3c2RsUHJvcGVydGllc0NvbnRhaW5lciI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCkgewotICAgIHJldHVybiAid3NkbC93c2RsX3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRWYXIoKSB7Ci0gICAgcmV0dXJuICJ3c2RsU3RhdHVzQ29udGVudCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRQYWdlKCkgewotICAgIHJldHVybiAid3NkbC93c2RsX3N0YXR1c19jb250ZW50LmpzcCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL0NyZWF0ZUluc3RhbmNlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9DcmVhdGVJbnN0YW5jZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWEwNzcwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL0NyZWF0ZUluc3RhbmNlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuRnJhZ21lbnRDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLldTRExPcGVyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNETWFwRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuSW52b2tlV1NETE9wZXJhdGlvblRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuV1NETFBlcnNwZWN0aXZlOwotCi1wdWJsaWMgY2xhc3MgQ3JlYXRlSW5zdGFuY2VBY3Rpb24gZXh0ZW5kcyBXU0RMUHJvcGVydGllc0Zvcm1BY3Rpb24KLXsKLSAgcHVibGljIENyZWF0ZUluc3RhbmNlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc1BhcnNlZFJlc3VsdHMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIHN1cGVyLnByb2Nlc3NQYXJzZWRSZXN1bHRzKHBhcnNlcik7Ci0gICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBJbnZva2VXU0RMT3BlcmF0aW9uVG9vbCBpbnZva2VXU0RMT3BlcmF0aW9uVG9vbCA9IChJbnZva2VXU0RMT3BlcmF0aW9uVG9vbCkoc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpKTsKLSAgICBXU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBJdGVyYXRvciBpdCA9IG9wZXJFbGVtZW50LmdldE9yZGVyZWRCb2R5UGFydHMoKS5pdGVyYXRvcigpOwotICAgIGJvb2xlYW4gcmVzdWx0c1ZhbGlkID0gdHJ1ZTsKLSAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIFBhcnQgcGFydCA9IChQYXJ0KWl0Lm5leHQoKTsKLSAgICAgIElYU0RGcmFnbWVudCBmcmFnID0gb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnQocGFydCk7Ci0gICAgICBpZiAoIWZyYWcucHJvY2Vzc1BhcmFtZXRlclZhbHVlcyhwYXJzZXIpKQotICAgICAgICByZXN1bHRzVmFsaWQgPSBmYWxzZTsKLSAgICB9Ci0gICAgU3RyaW5nIGZyYWdtZW50SUQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKEZyYWdtZW50Q29uc3RhbnRzLkZSQUdNRU5UX0lEKTsKLSAgICBpZiAoZnJhZ21lbnRJRCAhPSBudWxsICYmIGZyYWdtZW50SUQubGVuZ3RoKCkgPiAwKQotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEZyYWdtZW50Q29uc3RhbnRzLkZSQUdNRU5UX0lELCBmcmFnbWVudElEKTsKLSAgICBlbHNlCi0gICAgewotICAgICAgcHJvcGVydHlUYWJsZV8ucmVtb3ZlKEZyYWdtZW50Q29uc3RhbnRzLkZSQUdNRU5UX0lEKTsKLSAgICAgIHJlc3VsdHNWYWxpZCA9IGZhbHNlOwotICAgIH0KLSAgICBTdHJpbmcgbmFtZUFuY2hvcklEID0gcGFyc2VyLmdldFBhcmFtZXRlcihGcmFnbWVudENvbnN0YW50cy5OQU1FX0FOQ0hPUl9JRCk7Ci0gICAgaW52b2tlV1NETE9wZXJhdGlvblRvb2wuc2V0RnJhZ21lbnROYW1lQW5jaG9ySUQobmFtZUFuY2hvcklEKTsKLSAgICByZXR1cm4gcmVzdWx0c1ZhbGlkOwotICB9Ci0KLSAgcHVibGljIEZvcm1Ub29sIGdldFNlbGVjdGVkRm9ybVRvb2woKQotICB7Ci0gICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgIHJldHVybiAoRm9ybVRvb2wpd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlKCkuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBTdHJpbmcgZnJhZ21lbnRJRCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEZyYWdtZW50Q29uc3RhbnRzLkZSQUdNRU5UX0lEKTsKLSAgICBpZiAoZnJhZ21lbnRJRCAhPSBudWxsICYmIGZyYWdtZW50SUQubGVuZ3RoKCkgPiAwKQotICAgIHsKLSAgICAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgICAgV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICBJWFNERnJhZ21lbnQgZnJhZyA9IG9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnbWVudElEKTsKLSAgICAgIGlmICgoZnJhZyBpbnN0YW5jZW9mIElYU0RNYXBGcmFnbWVudCkgJiYgKChJWFNETWFwRnJhZ21lbnQpZnJhZykuY3JlYXRlSW5zdGFuY2UoKSAhPSBudWxsKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL0ludm9rZVdTRExIdHRwR2V0T3BlcmF0aW9uRm9ybUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvSW52b2tlV1NETEh0dHBHZXRPcGVyYXRpb25Gb3JtQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1NzlmMjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvSW52b2tlV1NETEh0dHBHZXRPcGVyYXRpb25Gb3JtQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkxDb25uZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuV1NETFBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZGlzY292ZXJ5Lk5ldFV0aWxzOwotCi1wdWJsaWMgY2xhc3MgSW52b2tlV1NETEh0dHBHZXRPcGVyYXRpb25Gb3JtQWN0aW9uIGV4dGVuZHMgSW52b2tlV1NETEh0dHBPcGVyYXRpb25Gb3JtQWN0aW9uCi17Ci0gIHB1YmxpYyBJbnZva2VXU0RMSHR0cEdldE9wZXJhdGlvbkZvcm1BY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLSAgICAKLSAgcHVibGljIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gd3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIFN0cmluZ0J1ZmZlciBlbmRQb2ludCA9IG5ldyBTdHJpbmdCdWZmZXIoZ2V0RW5kUG9pbnQoKSk7Ci0gICAgZW5kUG9pbnQuYXBwZW5kKCc/Jyk7Ci0gICAgYWRkUGFyYW1ldGVycyhlbmRQb2ludCk7Ci0gICAgU3RyaW5nIGVuZFBvaW50U3RyaW5nID0gZW5kUG9pbnQudG9TdHJpbmcoKTsKLSAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotICAgIHRyeQotICAgIHsKLSAgICAgIFVSTENvbm5lY3Rpb24gY29ubiA9IE5ldFV0aWxzLmdldFVSTENvbm5lY3Rpb24oZW5kUG9pbnRTdHJpbmcpOwotICAgICAgaWYgKGNvbm4gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcmVjb3JkSHR0cFJlc3BvbnNlKGNvbm4sbWVzc2FnZVF1ZXVlKTsKLSAgICAgICAgd3NkbFBlcnNwZWN0aXZlLnNldE9wZXJhdGlvbk5vZGUoZ2V0U2VsZWN0ZWROYXZpZ2F0b3JOb2RlKCkpOwotICAgICAgICByZXN1bHQgPSB0cnVlOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24od3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkFCTEVfVE9fQ09OTkVDVCIsZW5kUG9pbnRTdHJpbmcpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgaGFuZGxlVW5leHBlY3RlZEV4Y2VwdGlvbih3c2RsUGVyc3BlY3RpdmUsbWVzc2FnZVF1ZXVlLCJJT0V4Y2VwdGlvbiIsZSk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL0ludm9rZVdTRExIdHRwT3BlcmF0aW9uRm9ybUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvSW52b2tlV1NETEh0dHBPcGVyYXRpb25Gb3JtQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiNDE4NTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvSW52b2tlV1NETEh0dHBPcGVyYXRpb25Gb3JtQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKLWltcG9ydCBqYXZhLm5ldC5VUkxDb25uZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuV1NETEFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuV1NETE9wZXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC51dGlsLkhUVFBVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLkludm9rZVdTRExPcGVyYXRpb25Ub29sOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgSW52b2tlV1NETEh0dHBPcGVyYXRpb25Gb3JtQWN0aW9uIGV4dGVuZHMgV1NETFByb3BlcnRpZXNGb3JtQWN0aW9uCi17Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDT05URU5UX1RZUEVfQ0hBUlNFVEVRID0gImNoYXJzZXQ9IjsKLSAgCi0gIHB1YmxpYyBJbnZva2VXU0RMSHR0cE9wZXJhdGlvbkZvcm1BY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBzdXBlci5wcm9jZXNzUGFyc2VkUmVzdWx0cyhwYXJzZXIpOwotICAgIFN0cmluZyBlbmRQb2ludCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoV1NETEFjdGlvbklucHV0cy5FTkRfUE9JTlQpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gZ2V0U2VsZWN0ZWROYXZpZ2F0b3JOb2RlKCk7Ci0gICAgSW52b2tlV1NETE9wZXJhdGlvblRvb2wgaW52b2tlV1NETE9wZXJhdGlvblRvb2wgPSAoSW52b2tlV1NETE9wZXJhdGlvblRvb2wpKHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKSk7Ci0gICAgaW52b2tlV1NETE9wZXJhdGlvblRvb2wuc2V0RW5kUG9pbnQoZW5kUG9pbnQpOwotICAgIFdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KShzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKSk7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFdTRExBY3Rpb25JbnB1dHMuT1BFUkFUSU9OX0VMRU1FTlQsb3BlckVsZW1lbnQpOwotICAgIEl0ZXJhdG9yIGl0ID0gb3BlckVsZW1lbnQuZ2V0T3JkZXJlZEJvZHlQYXJ0cygpLml0ZXJhdG9yKCk7Ci0gICAgYm9vbGVhbiByZXN1bHRzVmFsaWQgPSB0cnVlOwotICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLSAgICAgIFBhcnQgcGFydCA9IChQYXJ0KWl0Lm5leHQoKTsKLSAgICAgIElGcmFnbWVudCBmcmFnID0gb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnQocGFydCk7Ci0gICAgICBpZiAoIWZyYWcucHJvY2Vzc1BhcmFtZXRlclZhbHVlcyhwYXJzZXIpKQotICAgICAgICByZXN1bHRzVmFsaWQgPSBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdHNWYWxpZDsKLSAgfSAgCi0gIAotICBwcm90ZWN0ZWQgU3RyaW5nIGdldEVuZFBvaW50KCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBlbmRQb2ludCA9IG5ldyBTdHJpbmdCdWZmZXIoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoV1NETEFjdGlvbklucHV0cy5FTkRfUE9JTlQpKTsKLSAgICBXU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClwcm9wZXJ0eVRhYmxlXy5nZXQoV1NETEFjdGlvbklucHV0cy5PUEVSQVRJT05fRUxFTUVOVCk7Ci0gICAgaWYgKGVuZFBvaW50LmNoYXJBdChlbmRQb2ludC5sZW5ndGgoKS0xKSAhPSAnLycpCi0gICAgICBlbmRQb2ludC5hcHBlbmQoJy8nKTsKLSAgICBlbmRQb2ludC5hcHBlbmQob3BlckVsZW1lbnQuZ2V0TmFtZSgpKTsKLSAgICByZXR1cm4gZW5kUG9pbnQudG9TdHJpbmcoKTsgICAgCi0gIH0KLSAgCi0gIHByb3RlY3RlZCB2b2lkIGFkZFBhcmFtZXRlcnMoU3RyaW5nQnVmZmVyIGJ1ZmZlcikKLSAgewotICAgIFdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXByb3BlcnR5VGFibGVfLmdldChXU0RMQWN0aW9uSW5wdXRzLk9QRVJBVElPTl9FTEVNRU5UKTsKLSAgICBJdGVyYXRvciBpdCA9IG9wZXJFbGVtZW50LmdldE9yZGVyZWRCb2R5UGFydHMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgewotICAgICAgUGFydCBwYXJ0ID0gKFBhcnQpaXQubmV4dCgpOwotICAgICAgSVhTREZyYWdtZW50IGZyYWcgPSBvcGVyRWxlbWVudC5nZXRGcmFnbWVudChwYXJ0KTsKLSAgICAgIGJ1ZmZlci5hcHBlbmQoSFRUUFV0aWwuZ2VuVVJMRW5jb2RlZFBhcmFtZXRlcnMoZnJhZykpOwotICAgICAgaWYgKGl0Lmhhc05leHQoKSkKLSAgICAgICAgYnVmZmVyLmFwcGVuZCgnJicpOwotICAgIH0KLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgcmVjb3JkSHR0cFJlc3BvbnNlKFVSTENvbm5lY3Rpb24gY29ubixNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotICAgIEJ1ZmZlcmVkUmVhZGVyIGJyID0gbnVsbDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBJbnB1dFN0cmVhbVJlYWRlciBpbiA9IG51bGw7Ci0gICAgICBTdHJpbmcgY29udGVudFR5cGUgPSBjb25uLmdldENvbnRlbnRUeXBlKCk7Ci0gICAgICBpZiAoY29udGVudFR5cGUgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgaW50IGNoYXJzZXRFcVBvcyA9IGNvbnRlbnRUeXBlLmluZGV4T2YoQ09OVEVOVF9UWVBFX0NIQVJTRVRFUSk7Ci0gICAgICAgIGlmIChjaGFyc2V0RXFQb3MgIT0gLTEpCi0gICAgICAgICAgaW4gPSBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoY29ubi5nZXRJbnB1dFN0cmVhbSgpLGNvbnRlbnRUeXBlLnN1YnN0cmluZyhjaGFyc2V0RXFQb3MrQ09OVEVOVF9UWVBFX0NIQVJTRVRFUS5sZW5ndGgoKSkpOwotICAgICAgfQotICAgICAgaWYgKGluID09IG51bGwpCi0gICAgICAgIGluID0gbmV3IElucHV0U3RyZWFtUmVhZGVyKGNvbm4uZ2V0SW5wdXRTdHJlYW0oKSk7Ci0gICAgICBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihpbik7Ci0gICAgICBTdHJpbmcgczsKLSAgICAgIHdoaWxlICgocyA9IGJyLnJlYWRMaW5lKCkpICE9IG51bGwpCi0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHMpOwotICAgICAgYnIuY2xvc2UoKTsKLSAgICAgIGJyID0gbnVsbDsKLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgaWYgKGJyICE9IG51bGwpCi0gICAgICAgIGJyLmNsb3NlKCk7Ci0gICAgICB0aHJvdyBlOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvSW52b2tlV1NETEh0dHBQb3N0T3BlcmF0aW9uRm9ybUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvSW52b2tlV1NETEh0dHBQb3N0T3BlcmF0aW9uRm9ybUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzExM2Y3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL0ludm9rZVdTRExIdHRwUG9zdE9wZXJhdGlvbkZvcm1BY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5uZXQuVVJMQ29ubmVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLldTRExQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmRpc2NvdmVyeS5OZXRVdGlsczsKLQotcHVibGljIGNsYXNzIEludm9rZVdTRExIdHRwUG9zdE9wZXJhdGlvbkZvcm1BY3Rpb24gZXh0ZW5kcyBJbnZva2VXU0RMSHR0cE9wZXJhdGlvbkZvcm1BY3Rpb24KLXsKLQotICBwdWJsaWMgSW52b2tlV1NETEh0dHBQb3N0T3BlcmF0aW9uRm9ybUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotICAgIFN0cmluZyBlbmRQb2ludFN0cmluZyA9IGdldEVuZFBvaW50KCk7Ci0gICAgVVJMQ29ubmVjdGlvbiBjb25uID0gTmV0VXRpbHMuZ2V0VVJMQ29ubmVjdGlvbihlbmRQb2ludFN0cmluZyk7Ci0gICAgaWYgKGNvbm4gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmdCdWZmZXIgcGFyYW1ldGVycyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgIGFkZFBhcmFtZXRlcnMocGFyYW1ldGVycyk7Ci0gICAgICBjb25uLnNldERvT3V0cHV0KHRydWUpOwotICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gbnVsbDsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBvdXQgPSBuZXcgUHJpbnRXcml0ZXIoY29ubi5nZXRPdXRwdXRTdHJlYW0oKSk7Ci0gICAgICAgIG91dC5wcmludChwYXJhbWV0ZXJzKTsKLSAgICAgICAgb3V0LmNsb3NlKCk7Ci0gICAgICAgIG91dCA9IG51bGw7Ci0gICAgICAgIHJlY29yZEh0dHBSZXNwb25zZShjb25uLG1lc3NhZ2VRdWV1ZSk7Ci0gICAgICAgIHdzZGxQZXJzcGVjdGl2ZS5zZXRPcGVyYXRpb25Ob2RlKGdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpKTsKLSAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICBoYW5kbGVVbmV4cGVjdGVkRXhjZXB0aW9uKHdzZGxQZXJzcGVjdGl2ZSxtZXNzYWdlUXVldWUsIklPRXhjZXB0aW9uIixlKTsKLSAgICAgIH0KLSAgICAgIGZpbmFsbHkKLSAgICAgIHsKLSAgICAgICAgaWYgKG91dCAhPSBudWxsKQotICAgICAgICAgIG91dC5jbG9zZSgpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgICBoYW5kbGVVbmV4cGVjdGVkRXhjZXB0aW9uKHdzZGxQZXJzcGVjdGl2ZSxtZXNzYWdlUXVldWUsIkV4Y2VwdGlvbiIsbmV3IElPRXhjZXB0aW9uKHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5BQkxFX1RPX0NPTk5FQ1QiLGVuZFBvaW50U3RyaW5nKSkpOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL0ludm9rZVdTRExTT0FQT3BlcmF0aW9uQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9JbnZva2VXU0RMU09BUE9wZXJhdGlvbkFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGFkM2I5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL0ludm9rZVdTRExTT0FQT3BlcmF0aW9uQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDMwNSAgIDExNzAzNCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHNob3VsZCBzdXBwb3J0IFNPQVAgSGVhZGVycwotICogMjAwNzA0MTMgICAxNzY0OTMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTRTogTWFrZSBtZXNzYWdlL3RyYW5zcG9ydCBzdGFjayBwbHVnZ2FibGUKLSAqIDIwMDcwNTEwICAgMTg2Mzc1IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBDb21waWxlIGVycm9ycyBpbiB3c3Qud3MuZXhwbG9yZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotCi1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2U7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLldTRExBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLldTRExNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuRW5kcG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLldTRExCaW5kaW5nRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuV1NETE9wZXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuSW52b2tlV1NETE9wZXJhdGlvblRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuV1NETFBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnV0aWwuU09BUE1lc3NhZ2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LkhUVFBUcmFuc3BvcnRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUE1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUFRyYW5zcG9ydFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuVHJhbnNwb3J0RXhjZXB0aW9uOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgSW52b2tlV1NETFNPQVBPcGVyYXRpb25BY3Rpb24gZXh0ZW5kcyBXU0RMUHJvcGVydGllc0Zvcm1BY3Rpb24KLXsKLSAgcHVibGljIEludm9rZVdTRExTT0FQT3BlcmF0aW9uQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc1BhcnNlZFJlc3VsdHMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIHN1cGVyLnByb2Nlc3NQYXJzZWRSZXN1bHRzKHBhcnNlcik7Ci0gICAgU3RyaW5nIGVuZFBvaW50ID0gcGFyc2VyLmdldFBhcmFtZXRlcihXU0RMQWN0aW9uSW5wdXRzLkVORF9QT0lOVCk7Ci0gICAgSW52b2tlV1NETE9wZXJhdGlvblRvb2wgaW52b2tlV1NETE9wZXJhdGlvblRvb2wgPSAoSW52b2tlV1NETE9wZXJhdGlvblRvb2wpKGdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpKTsKLSAgICBpbnZva2VXU0RMT3BlcmF0aW9uVG9vbC5zZXRFbmRQb2ludChlbmRQb2ludCk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyBhbiBJU09BUE1lc3NhZ2UgdG8gdXNlIGZvciB0aGUgY3VycmVudCBTT0FQIG9wZXJhdGlvbiBpbnZvY2F0aW9uLgotICAgKiAKLSAgICogQHBhcmFtIG9wZXJFbGVtZW50IFRoZSBvcGVyYXRpb24gZWxlbWVudCBmcm9tIHRoZSBXU0RMIG1vZGVsLgotICAgKiAKLSAgICogQHJldHVybiBBbiBJU09BUE1lc3NhZ2UsIG9yIG51bGwgaWYgYSBtZXNzYWdlIGNhbm5vdCBiZSBjb25zdHJ1Y3RlZC4KLSAgICovCi0gIHByb3RlY3RlZCBJU09BUE1lc3NhZ2UgZ2V0U09BUFJlcXVlc3RNZXNzYWdlKFdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50KSB7Ci0JICBJU09BUFRyYW5zcG9ydFByb3ZpZGVyIHByb3ZpZGVyID0gb3BlckVsZW1lbnQuZ2V0U09BUFRyYW5zcG9ydFByb3ZpZGVyKCk7Ci0JICBpZiAocHJvdmlkZXIgPT0gbnVsbCkKLQkJICByZXR1cm4gbnVsbDsJICAKLQkgIHJldHVybiBwcm92aWRlci5uZXdUcmFuc3BvcnQoKS5uZXdNZXNzYWdlKG9wZXJFbGVtZW50LmdldE1lc3NhZ2VDb250ZXh0KCkpOwotICB9Ci0gIAotICAvKioKLSAgICogUG9wdWxhdGUgdGhlIGdpdmVuIElTT0FQTWVzc2FnZSdzIGhlYWRlciB1c2luZyB0aGUgaW5wdXRzIGZyb20gV1NFCi0gICAqIAotICAgKiBAcGFyYW0gc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUgSGFzaHRhYmxlIGNvbnRhaW5pbmcgYSBtYXAgb2YgdGhlIG5hbWVzcGFjZSBVUklzIHRvIHByZWZpeGVzLgotICAgKiBAcGFyYW0gb3BlckVsZW1lbnQgV1NETE9wZXJhdGlvbkVsZW1lbnQgZW5jYXBzdWxhdGluZyB0aGUgV1NETCBvcGVyYXRpb24uCi0gICAqIEBwYXJhbSBzb2FwTWVzc2FnZSBUaGUgSVNPQVBNZXNzYWdlIHRvIHBvcHVsYXRlIAotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc2V0SGVhZGVyQ29udGVudChIYXNodGFibGUgc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUsIFdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50LCBJU09BUE1lc3NhZ2Ugc29hcE1lc3NhZ2UpCi0gICAgdGhyb3dzIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gewotICAgIFNPQVBNZXNzYWdlVXRpbHMuc2V0SGVhZGVyQ29udGVudEZyb21Nb2RlbChzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZSwgb3BlckVsZW1lbnQsIHNvYXBNZXNzYWdlKTsKLSAgfQotCi0gIC8qKgotICAgKiBQb3B1bGF0ZSB0aGUgZ2l2ZW4gSVNPQVBNZXNzYWdlJ3MgYm9keSB1c2luZyB0aGUgaW5wdXRzIGZyb20gV1NFCi0gICAqIAotICAgKiBAcGFyYW0gc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUgSGFzaHRhYmxlIGNvbnRhaW5pbmcgYSBtYXAgb2YgdGhlIG5hbWVzcGFjZSBVUklzIHRvIHByZWZpeGVzLgotICAgKiBAcGFyYW0gb3BlckVsZW1lbnQgV1NETE9wZXJhdGlvbkVsZW1lbnQgZW5jYXBzdWxhdGluZyB0aGUgV1NETCBvcGVyYXRpb24uCi0gICAqIEBwYXJhbSBzb2FwTWVzc2FnZSBUaGUgSVNPQVBNZXNzYWdlIHRvIHBvcHVsYXRlIAotICAgKi8gIAotICBwcm90ZWN0ZWQgdm9pZCBzZXRCb2R5Q29udGVudChIYXNodGFibGUgc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUsIFdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50LCBJU09BUE1lc3NhZ2Ugc29hcE1lc3NhZ2UpIAotICAgIHRocm93cyBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIHsKLQlTT0FQTWVzc2FnZVV0aWxzLnNldEJvZHlDb250ZW50RnJvbU1vZGVsKHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLCBvcGVyRWxlbWVudCwgc29hcE1lc3NhZ2UpOwotICB9ICAgICAgICAKLQotICBwdWJsaWMgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgU3RyaW5nIHNvYXBBZGRyZXNzTG9jYXRpb24gPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChXU0RMQWN0aW9uSW5wdXRzLkVORF9QT0lOVCk7Ci0gICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpZ2V0U2VsZWN0ZWROYXZpZ2F0b3JOb2RlKCkuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBXU0RMQmluZGluZ0VsZW1lbnQgYmluZGluZ0VsZW1lbnQgPSAoV1NETEJpbmRpbmdFbGVtZW50KW9wZXJFbGVtZW50LmdldFBhcmVudEVsZW1lbnQoKTsKLSAgICBvcGVyRWxlbWVudC5zZXRQcm9wZXJ0eUFzT2JqZWN0KFdTRExBY3Rpb25JbnB1dHMuU09BUF9SRVNQT05TRV9DQUNIRUQsIG5ldyBCb29sZWFuKGZhbHNlKSk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gR2VuZXJhdGUgdGhlIFNPQVAgZW52ZWxvcGUgYW5kIGl0cyBjaGlsZHJlbi4gV2UgbmVlZCB0byBjcmVhdGUgYSBET00gZWxlbWVudCB2ZXJzaW9uIHRvIGRpc3BsYXkgYW5kIHRoZSBvYmplY3QgdmVyc2lvbiB0byBleGVjdXRlLgotICAgICAgLy8gPFNPQVAtRU5WOkVudmVsb3BlCi0gICAgICAvLyAgICB4bWxuczpTT0FQLUVOVj0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8iCi0gICAgICAvLyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotICAgICAgLy8gICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0gICAgICAvLyAuLi4KLQotCSAgSVNPQVBNZXNzYWdlIHNvYXBNZXNzYWdlID0gZ2V0U09BUFJlcXVlc3RNZXNzYWdlKG9wZXJFbGVtZW50KTsKLQkgIGlmIChzb2FwTWVzc2FnZSA9PSBudWxsKQotCQkgIHRocm93IG5ldyBUcmFuc3BvcnRFeGNlcHRpb24od3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT19TVUlUQUJMRV9UUkFOU1BPUlQiKSk7Ci0JICAKLQkgIEhhc2h0YWJsZSBuYW1lc3BhY2VUYWJsZSA9IG5ldyBIYXNodGFibGUoc29hcE1lc3NhZ2UuZ2V0TmFtZXNwYWNlVGFibGUoKSk7CSAgCi0JICBzZXRIZWFkZXJDb250ZW50KG5hbWVzcGFjZVRhYmxlLCBvcGVyRWxlbWVudCwgc29hcE1lc3NhZ2UpOwotCSAgc2V0Qm9keUNvbnRlbnQobmFtZXNwYWNlVGFibGUsIG9wZXJFbGVtZW50LCBzb2FwTWVzc2FnZSk7ICAgICAgCi0JICBzb2FwTWVzc2FnZS5zZXROYW1lc3BhY2VUYWJsZShuYW1lc3BhY2VUYWJsZSk7Ci0KLQkgIC8vIHN0b3JlIHRoZSByZXF1ZXN0Ci0JICBvcGVyRWxlbWVudC5zZXRQcm9wZXJ0eUFzT2JqZWN0KFdTRExNb2RlbENvbnN0YW50cy5QUk9QX1NPQVBfUkVRVUVTVCwgc29hcE1lc3NhZ2UpOyAgCi0JICAKLQkgIC8vIEV4ZWN1dGUgdGhlIFNPQVAgb3BlcmF0aW9uLgotICAgICAgaWYgKHNvYXBBZGRyZXNzTG9jYXRpb24gIT0gbnVsbCkKLSAgICAgIHsgICAgCQotICAgIAlzb2FwTWVzc2FnZS5zZXRQcm9wZXJ0eShJU09BUE1lc3NhZ2UuUFJPUF9TT0FQX0FDVElPTiwgb3BlckVsZW1lbnQuZ2V0U29hcEFjdGlvbigpKTsKLSAgICAJU3RyaW5nW10gYXV0aFBhcmFtcyA9IHJldHJpZXZlQXV0aFBhcmFtcyhiaW5kaW5nRWxlbWVudCwgc29hcEFkZHJlc3NMb2NhdGlvbik7Ci0gICAgCQotICAgIAkvLyBpbnZva2UhCi0gICAgCUlTT0FQTWVzc2FnZSBzb2FwUmVzcG9uc2UgPSBvcGVyRWxlbWVudC5nZXRTT0FQVHJhbnNwb3J0UHJvdmlkZXIoKS5uZXdUcmFuc3BvcnQoKQotICAgIAkJLnNlbmQoc29hcEFkZHJlc3NMb2NhdGlvbiwgYXV0aFBhcmFtc1swXSwgYXV0aFBhcmFtc1sxXSwgc29hcE1lc3NhZ2UpOwotICAgIAkKLSAgICAJLy8gc3RvcmUgdGhlIHJlc3BvbnNlCi0gICAgCW9wZXJFbGVtZW50LnNldFByb3BlcnR5QXNPYmplY3QoV1NETE1vZGVsQ29uc3RhbnRzLlBST1BfU09BUF9SRVNQT05TRSwgc29hcFJlc3BvbnNlKTsKLSAgICAJCi0gICAgICAgIHdzZGxQZXJzcGVjdGl2ZS5zZXRPcGVyYXRpb25Ob2RlKGdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24od3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkFCTEVfVE9fQ09OTkVDVCIsc29hcEFkZHJlc3NMb2NhdGlvbikpOwotICAgIH0KLSAgICBjYXRjaCAoSFRUUFRyYW5zcG9ydEV4Y2VwdGlvbiBlKSB7Ci0gICAgICB0aHJvd0hUVFBUcmFuc3BvcnRFeGNlcHRpb24oYmluZGluZ0VsZW1lbnQsIHNvYXBBZGRyZXNzTG9jYXRpb24sIGUpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgIFRocm93YWJsZSB0ID0gZTsKLSAgICAgIGlmIChlIGluc3RhbmNlb2YgVHJhbnNwb3J0RXhjZXB0aW9uICYmIGUuZ2V0Q2F1c2UoKSAhPSBudWxsKQotICAgIAl0ID0gZS5nZXRDYXVzZSgpOwotICAgICAgaGFuZGxlVW5leHBlY3RlZEV4Y2VwdGlvbih3c2RsUGVyc3BlY3RpdmUsIG1lc3NhZ2VRdWV1ZSwgdC5nZXRDbGFzcygpLmdldE5hbWUoKSwgdCk7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIHRocm93SFRUUFRyYW5zcG9ydEV4Y2VwdGlvbihXU0RMQmluZGluZ0VsZW1lbnQgYmluZGluZ0VsZW1lbnQsIFN0cmluZyBlbmRwb2ludFN0cmluZywgSFRUUFRyYW5zcG9ydEV4Y2VwdGlvbiBodHRwVHJhbnNwb3J0RXhjZXB0aW9uKSB0aHJvd3MgSFRUUFRyYW5zcG9ydEV4Y2VwdGlvbgotICB7Ci0gICAgaWYgKGh0dHBUcmFuc3BvcnRFeGNlcHRpb24uZ2V0U3RhdHVzQ29kZSgpID09IEh0dHBTZXJ2bGV0UmVzcG9uc2UuU0NfVU5BVVRIT1JJWkVEKQotICAgIHsKLSAgICAgIEVuZHBvaW50IGVuZHBvaW50ID0gYmluZGluZ0VsZW1lbnQuZ2V0RW5kcG9pbnQoZW5kcG9pbnRTdHJpbmcpOwotICAgICAgaWYgKGVuZHBvaW50ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGVuZHBvaW50LnNldFJlcXVpcmVIVFRQQmFzaWNBdXRoKHRydWUpOwotICAgICAgICBlbmRwb2ludC5zZXRIdHRwQmFzaWNBdXRoVXNlcm5hbWUobnVsbCk7Ci0gICAgICAgIGVuZHBvaW50LnNldEh0dHBCYXNpY0F1dGhQYXNzd29yZChudWxsKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgdGhyb3cgaHR0cFRyYW5zcG9ydEV4Y2VwdGlvbjsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmdbXSByZXRyaWV2ZUF1dGhQYXJhbXMoV1NETEJpbmRpbmdFbGVtZW50IGJpbmRpbmdFbGVtZW50LCBTdHJpbmcgZW5kcG9pbnRTdHJpbmcpCi0gIHsKLQlTdHJpbmdbXSBhdXRoUGFyYW1zID0gbmV3IFN0cmluZ1tdIHsgbnVsbCwgbnVsbCB9OwotICAgIEVuZHBvaW50IGVuZHBvaW50ID0gYmluZGluZ0VsZW1lbnQuZ2V0RW5kcG9pbnQoZW5kcG9pbnRTdHJpbmcpOwotICAgIGlmIChlbmRwb2ludCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChlbmRwb2ludC5pc1JlcXVpcmVIVFRQQmFzaWNBdXRoKCkpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBodHRwQmFzaWNBdXRoVXNlcm5hbWUgPSBlbmRwb2ludC5nZXRIdHRwQmFzaWNBdXRoVXNlcm5hbWUoKTsKLSAgICAgICAgU3RyaW5nIGh0dHBCYXNpY0F1dGhQYXNzd29yZCA9IGVuZHBvaW50LmdldEh0dHBCYXNpY0F1dGhQYXNzd29yZCgpOwotICAgICAgICBpZiAoaHR0cEJhc2ljQXV0aFVzZXJuYW1lID09IG51bGwgfHwgaHR0cEJhc2ljQXV0aFBhc3N3b3JkID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBodHRwQmFzaWNBdXRoVXNlcm5hbWUgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChXU0RMQWN0aW9uSW5wdXRzLkhUVFBfQkFTSUNfQVVUSF9VU0VSTkFNRSk7Ci0gICAgICAgICAgaHR0cEJhc2ljQXV0aFBhc3N3b3JkID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoV1NETEFjdGlvbklucHV0cy5IVFRQX0JBU0lDX0FVVEhfUEFTU1dPUkQpOwotICAgICAgICAgIGVuZHBvaW50LnNldEh0dHBCYXNpY0F1dGhVc2VybmFtZShodHRwQmFzaWNBdXRoVXNlcm5hbWUpOwotICAgICAgICAgIGVuZHBvaW50LnNldEh0dHBCYXNpY0F1dGhQYXNzd29yZChodHRwQmFzaWNBdXRoUGFzc3dvcmQpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChodHRwQmFzaWNBdXRoVXNlcm5hbWUgIT0gbnVsbCAmJiBodHRwQmFzaWNBdXRoUGFzc3dvcmQgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGF1dGhQYXJhbXNbMF0gPSBodHRwQmFzaWNBdXRoVXNlcm5hbWU7Ci0gICAgICAgICAgYXV0aFBhcmFtc1sxXSA9IGh0dHBCYXNpY0F1dGhQYXNzd29yZDsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gYXV0aFBhcmFtczsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvSW52b2tlV1NETFNPQVBPcGVyYXRpb25Gb3JtQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9JbnZva2VXU0RMU09BUE9wZXJhdGlvbkZvcm1BY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTZiYjZkMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9JbnZva2VXU0RMU09BUE9wZXJhdGlvbkZvcm1BY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzAzMDUgICAxMTcwMzQgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBzaG91bGQgc3VwcG9ydCBTT0FQIEhlYWRlcnMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS50cmFuc2Zvcm1lci5JVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuRnJhZ21lbnRDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLldTRExPcGVyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS5XU0RMUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwudHJhbnNmb3JtZXIuRnJhZ21lbnRUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlcjsKLQotcHVibGljIGNsYXNzIEludm9rZVdTRExTT0FQT3BlcmF0aW9uRm9ybUFjdGlvbiBleHRlbmRzIEludm9rZVdTRExTT0FQT3BlcmF0aW9uQWN0aW9uCi17Ci0gIHB1YmxpYyBJbnZva2VXU0RMU09BUE9wZXJhdGlvbkZvcm1BY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzUGFyc2VkUmVzdWx0cyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgYm9vbGVhbiByZXN1bHRzVmFsaWQgPSB0cnVlOwotICAgIHN1cGVyLnByb2Nlc3NQYXJzZWRSZXN1bHRzKHBhcnNlcik7Ci0gICAgU3RyaW5nIHNvdXJjZUNvbnRlbnQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKEZyYWdtZW50Q29uc3RhbnRzLlNPVVJDRV9DT05URU5UKTsKLSAgICBpZiAoc291cmNlQ29udGVudCA9PSBudWxsKQotICAgIHsKLSAgICAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgICBXU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudCkgZ2V0U2VsZWN0ZWROYXZpZ2F0b3JOb2RlKCkuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgIAotICAgICAgLy8gdmFsaWRhdGUgaGVhZGVycwotICAgICAgSXRlcmF0b3IgaXQgPSBvcGVyRWxlbWVudC5nZXRTT0FQSGVhZGVycygpLml0ZXJhdG9yKCk7ICAgICAgCi0JICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBTT0FQSGVhZGVyIHNvYXBIZWFkZXIgPSAoU09BUEhlYWRlcikgaXQubmV4dCgpOyAgICAgICAgCi0gICAgICAgIElGcmFnbWVudCBmcmFnID0gb3BlckVsZW1lbnQuZ2V0SGVhZGVyRnJhZ21lbnQoc29hcEhlYWRlcik7Ci0gICAgICAgIGlmICghZnJhZy5wcm9jZXNzUGFyYW1ldGVyVmFsdWVzKHBhcnNlcikpCi0gICAgICAgIHsKLSAgICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSBzb2FwSGVhZGVyLmdldEVNZXNzYWdlKCk7Ci0gICAgICAgICAgUGFydCBwYXJ0ID0gc29hcEhlYWRlci5nZXRFUGFydCgpOyAgICAgICAgCQotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVkFMSURBVElOR19QQVJBTUVURVIiLCBtZXNzYWdlLmdldFFOYW1lKCkgKyAiICIgKyBwYXJ0LmdldE5hbWUoKSkpOwotICAgICAgICAgIHJlc3VsdHNWYWxpZCA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIC8vIHZhbGlkYXRlIGJvZHkKLSAgICAgIGl0ID0gb3BlckVsZW1lbnQuZ2V0T3JkZXJlZEJvZHlQYXJ0cygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBQYXJ0IHBhcnQgPSAoUGFydCkgaXQubmV4dCgpOwotICAgICAgICBJRnJhZ21lbnQgZnJhZyA9IG9wZXJFbGVtZW50LmdldEZyYWdtZW50KHBhcnQpOwotICAgICAgICBpZiAoIWZyYWcucHJvY2Vzc1BhcmFtZXRlclZhbHVlcyhwYXJzZXIpKQotICAgICAgICB7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2Uod3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9WQUxJREFUSU5HX1BBUkFNRVRFUiIsIHBhcnQuZ2V0TmFtZSgpKSk7Ci0gICAgICAgICAgcmVzdWx0c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdHNWYWxpZDsKLSAgfQotCi0gIHB1YmxpYyBJVHJhbnNmb3JtZXJbXSBnZXRUcmFuc2Zvcm1lcnMoKQotICB7Ci0gICAgSVRyYW5zZm9ybWVyW10gcGFyZW50VHJhbnNmb3JtZXJzID0gc3VwZXIuZ2V0VHJhbnNmb3JtZXJzKCk7Ci0gICAgSVRyYW5zZm9ybWVyW10gdHJhbnNmb3JtZXJzID0gbmV3IElUcmFuc2Zvcm1lcltwYXJlbnRUcmFuc2Zvcm1lcnMubGVuZ3RoICsgMV07Ci0gICAgU3lzdGVtLmFycmF5Y29weShwYXJlbnRUcmFuc2Zvcm1lcnMsIDAsIHRyYW5zZm9ybWVycywgMCwgcGFyZW50VHJhbnNmb3JtZXJzLmxlbmd0aCk7Ci0gICAgdHJhbnNmb3JtZXJzW3RyYW5zZm9ybWVycy5sZW5ndGggLSAxXSA9IG5ldyBGcmFnbWVudFRyYW5zZm9ybWVyKGNvbnRyb2xsZXJfKTsKLSAgICByZXR1cm4gdHJhbnNmb3JtZXJzOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvSW52b2tlV1NETFNPQVBPcGVyYXRpb25Tb3VyY2VBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL0ludm9rZVdTRExTT0FQT3BlcmF0aW9uU291cmNlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4NjcwYTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvSW52b2tlV1NETFNPQVBPcGVyYXRpb25Tb3VyY2VBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMzA1ICAgMTE3MDM0IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXZWIgU2VydmljZXMgRXhwbG9yZXIgc2hvdWxkIHN1cHBvcnQgU09BUCBIZWFkZXJzCi0gKiAyMDA3MDQxMyAgIDE3NjQ5MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFOiBNYWtlIG1lc3NhZ2UvdHJhbnNwb3J0IHN0YWNrIHBsdWdnYWJsZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuRnJhZ21lbnRDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLldTRExBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLldTRExNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuV1NETE9wZXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUE1lc3NhZ2U7Ci0KLXB1YmxpYyBjbGFzcyBJbnZva2VXU0RMU09BUE9wZXJhdGlvblNvdXJjZUFjdGlvbiBleHRlbmRzIEludm9rZVdTRExTT0FQT3BlcmF0aW9uQWN0aW9uCi17Ci0gIHByaXZhdGUgYm9vbGVhbiBuZXdGaWxlU2VsZWN0ZWRfOwotICBwcml2YXRlIGJvb2xlYW4gc2F2ZUFzU2VsZWN0ZWRfOwotICBwcml2YXRlIGJvb2xlYW4gaXNIZWFkZXJfOwotICAKLSAgcHVibGljIEludm9rZVdTRExTT0FQT3BlcmF0aW9uU291cmNlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgIG5ld0ZpbGVTZWxlY3RlZF8gPSBmYWxzZTsKLSAgICBzYXZlQXNTZWxlY3RlZF8gPSBmYWxzZTsKLSAgICBpc0hlYWRlcl8gPSBmYWxzZTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBzdXBlci5wcm9jZXNzUGFyc2VkUmVzdWx0cyhwYXJzZXIpOwotICAgIFdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KWdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgbmV3RmlsZVNlbGVjdGVkXyA9IGZhbHNlOwotICAgIHNhdmVBc1NlbGVjdGVkXyA9IGZhbHNlOwotICAgIGlzSGVhZGVyXyA9IGZhbHNlOwotICAgIC8qICB0cnkgYW5kIGNhdGNoIGlzIG5lZWRlZCBpZiB3ZSBhcmUgZG9pbmcgZnJhZ21lbnRpemF0aW9uLgotICAgIHRyeQotICAgIHsKLSAgICAqLwotICAgICAgU3RyaW5nIHN1Ym1pc3Npb25BY3Rpb24gPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFdTRExBY3Rpb25JbnB1dHMuU1VCTUlTU0lPTl9BQ1RJT04pOwotICAgICAgU3RyaW5nIHNvdXJjZUNvbnRlbnRzID0gcGFyc2VyLmdldFBhcmFtZXRlcihGcmFnbWVudENvbnN0YW50cy5TT1VSQ0VfQ09OVEVOVF9IRUFERVIpOwotICAgICAgaWYgKHNvdXJjZUNvbnRlbnRzICE9IG51bGwpCi0gICAgCW9wZXJFbGVtZW50LnNldFByb3BlcnR5QXNTdHJpbmcoV1NETE1vZGVsQ29uc3RhbnRzLlBST1BfU09VUkNFX0NPTlRFTlRfSEVBREVSLHNvdXJjZUNvbnRlbnRzKTsgIAotICAgICAgc291cmNlQ29udGVudHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKEZyYWdtZW50Q29uc3RhbnRzLlNPVVJDRV9DT05URU5UKTsKLSAgICAgIGlmIChzb3VyY2VDb250ZW50cyAhPSBudWxsKQotICAgICAgICBvcGVyRWxlbWVudC5zZXRQcm9wZXJ0eUFzU3RyaW5nKFdTRExNb2RlbENvbnN0YW50cy5QUk9QX1NPVVJDRV9DT05URU5ULHNvdXJjZUNvbnRlbnRzKTsKLSAgICAgIGlmIChXU0RMQWN0aW9uSW5wdXRzLlNVQk1JU1NJT05fQUNUSU9OX0JST1dTRV9GSUxFX0hFQURFUi5lcXVhbHMoc3VibWlzc2lvbkFjdGlvbikpCi0gICAgICB7Ci0gICAgCW5ld0ZpbGVTZWxlY3RlZF8gPSB0cnVlOwotICAgICAgICBTdHJpbmcgZmlsZUNvbnRlbnRzID0gcGFyc2VyLmdldFBhcmFtZXRlcihXU0RMQWN0aW9uSW5wdXRzLlNFTEVDVEVEX0ZJTEVfSEVBREVSKTsKLSAgICAgICAgaWYgKGZpbGVDb250ZW50cyAhPSBudWxsKQotICAgICAgICAgIG9wZXJFbGVtZW50LnNldFByb3BlcnR5QXNTdHJpbmcoV1NETE1vZGVsQ29uc3RhbnRzLlBST1BfU09VUkNFX0NPTlRFTlRfSEVBREVSLGZpbGVDb250ZW50cyk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChXU0RMQWN0aW9uSW5wdXRzLlNVQk1JU1NJT05fQUNUSU9OX0JST1dTRV9GSUxFLmVxdWFscyhzdWJtaXNzaW9uQWN0aW9uKSkKLSAgICAgIHsKLSAgICAgICAgbmV3RmlsZVNlbGVjdGVkXyA9IHRydWU7Ci0gICAgICAgIFN0cmluZyBmaWxlQ29udGVudHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFdTRExBY3Rpb25JbnB1dHMuU0VMRUNURURfRklMRSk7Ci0gICAgICAgIGlmIChmaWxlQ29udGVudHMgIT0gbnVsbCkKLSAgICAgICAgICBvcGVyRWxlbWVudC5zZXRQcm9wZXJ0eUFzU3RyaW5nKFdTRExNb2RlbENvbnN0YW50cy5QUk9QX1NPVVJDRV9DT05URU5ULGZpbGVDb250ZW50cyk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChXU0RMQWN0aW9uSW5wdXRzLlNVQk1JU1NJT05fQUNUSU9OX1NBVkVfQVNfSEVBREVSLmVxdWFscyhzdWJtaXNzaW9uQWN0aW9uKSkKLSAgICAgIHsKLSAgICAJc2F2ZUFzU2VsZWN0ZWRfID0gdHJ1ZTsKLSAgICAJaXNIZWFkZXJfID0gdHJ1ZTsKLSAgICAJcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChXU0RMQWN0aW9uSW5wdXRzLlNVQk1JU1NJT05fQUNUSU9OX1NBVkVfQVMuZXF1YWxzKHN1Ym1pc3Npb25BY3Rpb24pKQotICAgICAgewotICAgICAgICAvLyBTYXZlIEFzLi4uIGFjdGlvbgotICAgICAgICBzYXZlQXNTZWxlY3RlZF8gPSB0cnVlOyAgICAgIAotICAgIAlyZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgU3RyaW5nW10gbnNEZWNsYXJhdGlvbnMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKEZyYWdtZW50Q29uc3RhbnRzLlNPVVJDRV9DT05URU5UX05BTUVTUEFDRSk7Ci0gICAgICBpZiAobnNEZWNsYXJhdGlvbnMgIT0gbnVsbCkKLSAgICAgICAgb3BlckVsZW1lbnQuc2V0UHJvcGVydHlBc09iamVjdChXU0RMTW9kZWxDb25zdGFudHMuUFJPUF9TT1VSQ0VfQ09OVEVOVF9OQU1FU1BBQ0UsbnNEZWNsYXJhdGlvbnMpOyAgICAJCi0KLSAgICAgIHJldHVybiB0cnVlOwotICAgIC8qCi0gICAgfSAgICAgICAKLSAgICBjYXRjaCAoUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGhhbmRsZVVuZXhwZWN0ZWRFeGNlcHRpb24od3NkbFBlcnNwZWN0aXZlLG1lc3NhZ2VRdWV1ZSwiUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiIsZSk7Ci0gICAgfQotICAgIGNhdGNoIChTQVhFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBoYW5kbGVVbmV4cGVjdGVkRXhjZXB0aW9uKHdzZGxQZXJzcGVjdGl2ZSxtZXNzYWdlUXVldWUsIlNBWEV4Y2VwdGlvbiIsZSk7Ci0gICAgfQotICAgIGNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgaGFuZGxlVW5leHBlY3RlZEV4Y2VwdGlvbih3c2RsUGVyc3BlY3RpdmUsbWVzc2FnZVF1ZXVlLCJVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIixlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgaGFuZGxlVW5leHBlY3RlZEV4Y2VwdGlvbih3c2RsUGVyc3BlY3RpdmUsbWVzc2FnZVF1ZXVlLCJJT0V4Y2VwdGlvbiIsZSk7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgICAqLwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy5JbnZva2VXU0RMU09BUE9wZXJhdGlvbkFjdGlvbiNnZXRTT0FQUmVxdWVzdE1lc3NhZ2Uob3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLldTRExPcGVyYXRpb25FbGVtZW50KQotICAgKi8KLSAgcHJvdGVjdGVkIElTT0FQTWVzc2FnZSBnZXRTT0FQUmVxdWVzdE1lc3NhZ2UoV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQpIHsJICAKLQkgIHJldHVybiAoSVNPQVBNZXNzYWdlKSBvcGVyRWxlbWVudC5nZXRQcm9wZXJ0eUFzT2JqZWN0KFdTRExNb2RlbENvbnN0YW50cy5QUk9QX1NPQVBfUkVRVUVTVF9UTVApOwotICB9IAotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLkludm9rZVdTRExTT0FQT3BlcmF0aW9uQWN0aW9uI3NldEhlYWRlckNvbnRlbnQoamF2YS51dGlsLkhhc2h0YWJsZSwgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLldTRExPcGVyYXRpb25FbGVtZW50LCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQTWVzc2FnZSkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldEhlYWRlckNvbnRlbnQoSGFzaHRhYmxlIHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLCBXU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCwgSVNPQVBNZXNzYWdlIHNvYXBNZXNzYWdlKSB7CQotICAgCVN0cmluZyBoZWFkZXJDb250ZW50ID0gb3BlckVsZW1lbnQuZ2V0UHJvcGVydHlBc1N0cmluZyhXU0RMTW9kZWxDb25zdGFudHMuUFJPUF9TT1VSQ0VfQ09OVEVOVF9IRUFERVIpOwotICAgIG9wZXJFbGVtZW50LmdldFNPQVBUcmFuc3BvcnRQcm92aWRlcigpLm5ld1RyYW5zcG9ydCgpLm5ld0Rlc2VyaWFsaXplcigpCi0gICAgCS5kZXNlcmlhbGl6ZShJU09BUE1lc3NhZ2UuSEVBREVSX0NPTlRFTlQsIGhlYWRlckNvbnRlbnQsIHNvYXBNZXNzYWdlKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuSW52b2tlV1NETFNPQVBPcGVyYXRpb25BY3Rpb24jc2V0Qm9keUNvbnRlbnQoamF2YS51dGlsLkhhc2h0YWJsZSwgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLldTRExPcGVyYXRpb25FbGVtZW50LCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQTWVzc2FnZSkKLSAgICovIAotICBwcm90ZWN0ZWQgdm9pZCBzZXRCb2R5Q29udGVudChIYXNodGFibGUgc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUsIFdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50LCBJU09BUE1lc3NhZ2Ugc29hcE1lc3NhZ2UpIHsKLSAgICBTdHJpbmcgYm9keUNvbnRlbnQgPSBvcGVyRWxlbWVudC5nZXRQcm9wZXJ0eUFzU3RyaW5nKFdTRExNb2RlbENvbnN0YW50cy5QUk9QX1NPVVJDRV9DT05URU5UKTsgICAgCi0gICAgb3BlckVsZW1lbnQuZ2V0U09BUFRyYW5zcG9ydFByb3ZpZGVyKCkubmV3VHJhbnNwb3J0KCkubmV3RGVzZXJpYWxpemVyKCkKLSAgICAJLmRlc2VyaWFsaXplKElTT0FQTWVzc2FnZS5CT0RZX0NPTlRFTlQsIGJvZHlDb250ZW50LCBzb2FwTWVzc2FnZSk7ICAgICAgICAKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHdhc05ld0ZpbGVTZWxlY3RlZCgpCi0gIHsKLSAgICByZXR1cm4gbmV3RmlsZVNlbGVjdGVkXzsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gd2FzU2F2ZUFzU2VsZWN0ZWQoKQotICB7Ci0gICAgcmV0dXJuIHNhdmVBc1NlbGVjdGVkXzsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXREZWZhdWx0U2F2ZUFzRmlsZU5hbWUoKQotICB7Ci0gICAgV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpKGdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpLmdldFRyZWVFbGVtZW50KCkpOwotICAgIHJldHVybiAobmV3IFN0cmluZ0J1ZmZlcihvcGVyRWxlbWVudC5nZXRPcGVyYXRpb24oKS5nZXROYW1lKCkpKS5hcHBlbmQoIi50eHQiKS50b1N0cmluZygpOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgdm9pZCB3cml0ZVNvdXJjZUNvbnRlbnQoT3V0cHV0U3RyZWFtIG9zKQotICB7Ci0gICAgV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpKGdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpLmdldFRyZWVFbGVtZW50KCkpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKG9zKTsKLSAgICBpZiAoaXNIZWFkZXJfKQotICAgICAgcHcucHJpbnRsbihvcGVyRWxlbWVudC5nZXRQcm9wZXJ0eUFzU3RyaW5nKFdTRExNb2RlbENvbnN0YW50cy5QUk9QX1NPVVJDRV9DT05URU5UX0hFQURFUikpOwotICAgIGVsc2UKLSAgIAkgIHB3LnByaW50bG4ob3BlckVsZW1lbnQuZ2V0UHJvcGVydHlBc1N0cmluZyhXU0RMTW9kZWxDb25zdGFudHMuUFJPUF9TT1VSQ0VfQ09OVEVOVCkpOwotICAgIHB3LmNsb3NlKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL09wZW5XU0RMQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9PcGVuV1NETEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTQyMmUyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL09wZW5XU0RMQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLldTRExNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuV1NETFBlcnNwZWN0aXZlOwotCi1wdWJsaWMgY2xhc3MgT3BlbldTRExBY3Rpb24gZXh0ZW5kcyBXU0RMUHJvcGVydGllc0Zvcm1BY3Rpb24gewotCi0gIHB1YmxpYyBPcGVuV1NETEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uIHsKLSAgICBTdHJpbmcgd3NkbFVybCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dTRExfVVJMKTsKLSAgICBGb3JtVG9vbCBmb3JtVG9vbCA9IGdldFNlbGVjdGVkRm9ybVRvb2woKTsKLSAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dTRExfVVJMLCB3c2RsVXJsKTsKLSAgICBmb3JtVG9vbC51cGRhdGVQcm9wZXJ0eVRhYmxlKHByb3BlcnR5VGFibGVfKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpIHsKLSAgICBTdHJpbmcgd3NkbFVybCA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XU0RMX1VSTCk7Ci0gICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHJvb3ROb2RlID0gbm9kZU1hbmFnZXIuZ2V0Um9vdE5vZGUoKTsKLSAgICBUcmVlRWxlbWVudCByb290RWxlbWVudCA9IHJvb3ROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0KLSAgICAvLyBjcmVhdGUgYSBXU0RMRWxlbWVudCByZXByZXNlbnRpbmcgdGhlIFdTREwKLSAgICBXU0RMRWxlbWVudCB3c2RsRWxlbWVudCA9IG5ldyBXU0RMRWxlbWVudCh3c2RsVXJsLCByb290RWxlbWVudC5nZXRNb2RlbCgpLCB3c2RsVXJsKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBvcGVuIFdTREwKLSAgICAgIFZlY3RvciBlcnJvck1lc3NhZ2VzID0gd3NkbEVsZW1lbnQubG9hZFdTREwoKTsKLSAgICAgIGlmIChlcnJvck1lc3NhZ2VzLnNpemUoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfWFNEX1ZBTElEQVRJT04iKSk7Ci0gICAgICAgIGZvciAoaW50IGk9MDtpPGVycm9yTWVzc2FnZXMuc2l6ZSgpO2krKykKLSAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSgoU3RyaW5nKWVycm9yTWVzc2FnZXMuZWxlbWVudEF0KGkpKTsKLSAgICAgIH0gICAgICAgICAgICAKLSAgICB9Ci0gICAgY2F0Y2ggKFdTRExFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX09QRU5fV1NETCIsd3NkbFVybCkpOyAgICAgICAgICAKLSAgICAgIGhhbmRsZVVuZXhwZWN0ZWRFeGNlcHRpb24od3NkbFBlcnNwZWN0aXZlLG1lc3NhZ2VRdWV1ZSwiV1NETEV4Y2VwdGlvbiIsZSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJvb3RFbGVtZW50LmNvbm5lY3Qod3NkbEVsZW1lbnQsV1NETE1vZGVsQ29uc3RhbnRzLlJFTF9XU0RMLCBNb2RlbENvbnN0YW50cy5SRUxfT1dORVIpOwotCi0gICAgLy8gYnVpbGQgdGhlIGRhdGFtb2RlbCBmb3IgdGhpcyBXU0RMRWxlbWVudAotICAgIHdzZGxFbGVtZW50LmJ1aWxkTW9kZWwoKTsKLQotICAgIC8vIElmIHRoZXJlIGlzIG1vcmUgdGhhbiAxIHNlcnZpY2Ugbm9kZSwgc2VsZWN0IHRoZSBXU0RMIG5vZGUuIElmIHRoZXJlIGlzIG1vcmUgdGhhbiAxIGJpbmRpbmcgbm9kZSwgc2VsZWN0IHRoZSBzZXJ2aWNlIG5vZGUuCi0gICAgLy8gSWYgdGhlcmUgaXMganVzdCB0aGUgb25lIHNlcnZpY2UgYW5kIGJpbmRpbmcgbm9kZSwgc2VsZWN0IHRoZSBiaW5kaW5nIG5vZGUuCi0gICAgLy8gc2VsZWN0IHRoZSBuZXcgV1NETCBub2RlCi0gICAgTm9kZSB3c2RsTm9kZSA9IHJvb3ROb2RlLmdldENoaWxkTm9kZSh3c2RsRWxlbWVudCk7Ci0gICAgVmVjdG9yIHNlcnZpY2VOb2RlcyA9IHdzZGxOb2RlLmdldENoaWxkTm9kZXMoKTsKLSAgICBpbnQgbmV3U2VsZWN0ZWROb2RlSWQgPSB3c2RsTm9kZS5nZXROb2RlSWQoKTsKLSAgICBpZiAoc2VydmljZU5vZGVzLnNpemUoKSA9PSAxKQotICAgIHsKLSAgICAgIE5vZGUgc2VydmljZU5vZGUgPSAoTm9kZSlzZXJ2aWNlTm9kZXMuZWxlbWVudEF0KDApOwotICAgICAgVmVjdG9yIGJpbmRpbmdOb2RlcyA9IHNlcnZpY2VOb2RlLmdldENoaWxkTm9kZXMoKTsKLSAgICAgIGlmIChiaW5kaW5nTm9kZXMuc2l6ZSgpID09IDEpCi0gICAgICB7Ci0gICAgICAgIE5vZGUgYmluZGluZ05vZGUgPSAoTm9kZSliaW5kaW5nTm9kZXMuZWxlbWVudEF0KDApOwotICAgICAgICBuZXdTZWxlY3RlZE5vZGVJZCA9IGJpbmRpbmdOb2RlLmdldE5vZGVJZCgpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICBuZXdTZWxlY3RlZE5vZGVJZCA9IHNlcnZpY2VOb2RlLmdldE5vZGVJZCgpOwotICAgIH0KLSAgICBub2RlTWFuYWdlci5zZXRTZWxlY3RlZE5vZGVJZChuZXdTZWxlY3RlZE5vZGVJZCk7Ci0gICAgbm9kZU1hbmFnZXIubWFrZU5vZGVWaXNpYmxlKG5vZGVNYW5hZ2VyLmdldE5vZGUobmV3U2VsZWN0ZWROb2RlSWQpKTsKLSAgICBhZGRUb0hpc3RvcnkoQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1dTREwsU2VsZWN0V1NETFByb3BlcnRpZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsobmV3U2VsZWN0ZWROb2RlSWQsIDAsIEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCwgQWN0aW9uSW5wdXRzLlZJRVdUT09MSURfREVGQVVMVCwgdHJ1ZSkpOwotICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19PUEVOX1dTRExfU1VDQ0VTU0ZVTCIsIHdzZGxVcmwpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvT3BlblhTREluZm9EaWFsb2dBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL09wZW5YU0RJbmZvRGlhbG9nQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViZGQ4NDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvT3BlblhTREluZm9EaWFsb2dBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuV1NETEFjdGlvbklucHV0czsKLQotcHVibGljIGNsYXNzIE9wZW5YU0RJbmZvRGlhbG9nQWN0aW9uIGV4dGVuZHMgQWN0aW9uCi17Ci0gIHB1YmxpYyBPcGVuWFNESW5mb0RpYWxvZ0FjdGlvbigpCi0gIHsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmsoU3RyaW5nIHNlc3Npb25JZCxpbnQgbm9kZUlkLFN0cmluZyBmcmFnSWQpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoIndzZGwvZnJhZ21lbnQvWFNESW5mb0RpYWxvZy5qc3A/Iik7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlNFU1NJT05JRCkuYXBwZW5kKCc9JykuYXBwZW5kKHNlc3Npb25JZCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCkuYXBwZW5kKCc9JykuYXBwZW5kKG5vZGVJZCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoV1NETEFjdGlvbklucHV0cy5GUkFHTUVOVF9JRCkuYXBwZW5kKCc9JykuYXBwZW5kKGZyYWdJZCk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHBvcHVsYXRlUHJvcGVydHlUYWJsZShIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCkKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9SZWZyZXNoV1NETEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvUmVmcmVzaFdTRExBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTgyOGQ4Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9SZWZyZXNoV1NETEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5MaW5rQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS5XU0RMTWFpbk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuV1NETE5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuV1NETFBlcnNwZWN0aXZlOwotCi1wdWJsaWMgY2xhc3MgUmVmcmVzaFdTRExBY3Rpb24gZXh0ZW5kcyBMaW5rQWN0aW9uIHsKLQotICBwdWJsaWMgUmVmcmVzaFdTRExBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSUQsIGludCB0b29sSUQsIGludCB2aWV3SUQsIGludCB2aWV3VG9vbElEKSB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ3c2RsL2FjdGlvbnMvV1NETFJlZnJlc2hBY3Rpb25KU1AuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQobm9kZUlEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5UT09MSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQodG9vbElEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5WSUVXSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQodmlld0lEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5WSUVXVE9PTElEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKHZpZXdUb29sSUQpOwotICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzTGlua1BhcmFtZXRlcnMoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpIHsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IGNvbnRyb2xsZXJfLmdldFdTRExQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgU3RyaW5nIG5vZGVJRFN0cmluZyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgIGludCBub2RlSUQ7Ci0gICAgdHJ5IHsKLSAgICAgIG5vZGVJRCA9IEludGVnZXIucGFyc2VJbnQobm9kZUlEU3RyaW5nKTsKLSAgICB9Ci0gICAgY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpIHsKLSAgICAgIG5vZGVJRCA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZUlkKCk7Ci0gICAgfQotICAgIE5vZGUgbm9kZSA9IG5vZGVNYW5hZ2VyLmdldE5vZGUobm9kZUlEKTsKLSAgICB3aGlsZSAobm9kZSAhPSBudWxsICYmICEobm9kZSBpbnN0YW5jZW9mIFdTRExNYWluTm9kZSkpIHsKLSAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgV1NETE5vZGUpIHsKLSAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5OT0RFSUQsIFN0cmluZy52YWx1ZU9mKG5vZGUuZ2V0Tm9kZUlkKCkpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBub2RlID0gbm9kZS5nZXRQYXJlbnQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcnVuKCkgewotICAgIGludCBub2RlSUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgd3NkbE5vZGUgPSBub2RlTWFuYWdlci5nZXROb2RlKG5vZGVJRCk7Ci0gICAgV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQgPSAoV1NETEVsZW1lbnQpd3NkbE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb25Db3B5ID0gd3NkbEVsZW1lbnQuZ2V0RGVmaW5pdGlvbigpOwotICAgIFZlY3RvciBzY2hlbWFMaXN0Q29weSA9IHdzZGxFbGVtZW50LmdldFNjaGVtYUxpc3QoKTsKLSAgICB3c2RsRWxlbWVudC5zZXREZWZpbml0aW9uKG51bGwpOwotICAgIHdzZGxFbGVtZW50LnNldFNjaGVtYUxpc3QobmV3IFZlY3RvcigpKTsKLSAgICBpbnQgc2VsZWN0ZWROb2RlSUQgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKS5nZXROb2RlSWQoKTsKLQotICAgIHRyeSB7Ci0gICAgICAvLyBvcGVuIFdTREwKLSAgICAgIFZlY3RvciBlcnJvck1lc3NhZ2VzID0gd3NkbEVsZW1lbnQubG9hZFdTREwoKTsKLSAgICAgIGlmIChlcnJvck1lc3NhZ2VzLnNpemUoKSA+IDApIHsKLSAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2Uod3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9YU0RfVkFMSURBVElPTiIpKTsKLSAgICAgICAgZm9yIChpbnQgaT0wO2k8ZXJyb3JNZXNzYWdlcy5zaXplKCk7aSsrKQotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKChTdHJpbmcpZXJyb3JNZXNzYWdlcy5lbGVtZW50QXQoaSkpOwotICAgICAgfSAgICAgICAgICAgIAotICAgIH0KLSAgICBjYXRjaCAoV1NETEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfT1BFTl9XU0RMIix3c2RsRWxlbWVudC5nZXRXc2RsVXJsKCkpKTsgICAgICAgICAgCi0gICAgICBoYW5kbGVVbmV4cGVjdGVkRXhjZXB0aW9uKHdzZGxQZXJzcGVjdGl2ZSxtZXNzYWdlUXVldWUsIldTRExFeGNlcHRpb24iLGUpOwotICAgICAgd3NkbEVsZW1lbnQuc2V0RGVmaW5pdGlvbihkZWZpbml0aW9uQ29weSk7Ci0gICAgICB3c2RsRWxlbWVudC5zZXRTY2hlbWFMaXN0KHNjaGVtYUxpc3RDb3B5KTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBidWlsZCB0aGUgZGF0YW1vZGVsIGZvciB0aGlzIFdTRExFbGVtZW50Ci0gICAgd3NkbEVsZW1lbnQuYnVpbGRNb2RlbCgpOwotCi0gICAgLy8gU2VsZWN0IGEgbmV3IG5vZGUgaWYgdGhlIHByZXZpb3VzIHNlbGVjdGVkIG5vZGUgbm8gbG9uZ2VyIGV4aXN0cwotICAgIC8vIElmIHRoZXJlIGlzIG1vcmUgdGhhbiAxIHNlcnZpY2Ugbm9kZSwgc2VsZWN0IHRoZSBXU0RMIG5vZGUuIElmIHRoZXJlIGlzIG1vcmUgdGhhbiAxIGJpbmRpbmcgbm9kZSwgc2VsZWN0IHRoZSBzZXJ2aWNlIG5vZGUuCi0gICAgLy8gSWYgdGhlcmUgaXMganVzdCB0aGUgb25lIHNlcnZpY2UgYW5kIGJpbmRpbmcgbm9kZSwgc2VsZWN0IHRoZSBiaW5kaW5nIG5vZGUuCi0gICAgTm9kZSBub2RlID0gbm9kZU1hbmFnZXIuZ2V0Tm9kZShzZWxlY3RlZE5vZGVJRCk7Ci0gICAgaWYgKG5vZGUgPT0gbnVsbCkgewotICAgICAgc2VsZWN0ZWROb2RlSUQgPSB3c2RsTm9kZS5nZXROb2RlSWQoKTsKLSAgICAgIFZlY3RvciBzZXJ2aWNlTm9kZXMgPSB3c2RsTm9kZS5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICBpZiAoc2VydmljZU5vZGVzLnNpemUoKSA9PSAxKQotICAgICAgewotICAgICAgICBOb2RlIHNlcnZpY2VOb2RlID0gKE5vZGUpc2VydmljZU5vZGVzLmVsZW1lbnRBdCgwKTsKLSAgICAgICAgVmVjdG9yIGJpbmRpbmdOb2RlcyA9IHNlcnZpY2VOb2RlLmdldENoaWxkTm9kZXMoKTsKLSAgICAgICAgaWYgKGJpbmRpbmdOb2Rlcy5zaXplKCkgPT0gMSkKLSAgICAgICAgewotICAgICAgICAgIE5vZGUgYmluZGluZ05vZGUgPSAoTm9kZSliaW5kaW5nTm9kZXMuZWxlbWVudEF0KDApOwotICAgICAgICAgIHNlbGVjdGVkTm9kZUlEID0gYmluZGluZ05vZGUuZ2V0Tm9kZUlkKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgIHNlbGVjdGVkTm9kZUlEID0gc2VydmljZU5vZGUuZ2V0Tm9kZUlkKCk7Ci0gICAgICB9Ci0gICAgICBub2RlTWFuYWdlci5zZXRTZWxlY3RlZE5vZGVJZChzZWxlY3RlZE5vZGVJRCk7Ci0gICAgICBub2RlTWFuYWdlci5tYWtlTm9kZVZpc2libGUobm9kZU1hbmFnZXIuZ2V0Tm9kZShzZWxlY3RlZE5vZGVJRCkpOwotICAgIH0KLSAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fUkVGUkVTSF9XU0RMX1NVQ0NFU1NGVUwiLCB3c2RsRWxlbWVudC5nZXRXc2RsVXJsKCkpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvUmVzaXplV1NETEZyYW1lc0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvUmVzaXplV1NETEZyYW1lc0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNGNhMTU0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL1Jlc2l6ZVdTRExGcmFtZXNBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuUmVzaXplRnJhbWVzQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5XU0RMQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5XU0RMRnJhbWVOYW1lczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS5XU0RMUGVyc3BlY3RpdmU7Ci0KLXB1YmxpYyBjbGFzcyBSZXNpemVXU0RMRnJhbWVzQWN0aW9uIGV4dGVuZHMgUmVzaXplRnJhbWVzQWN0aW9uCi17Ci0gIHB1YmxpYyBSZXNpemVXU0RMRnJhbWVzQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzT3RoZXJzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzID0gcGFyc2VyLmdldFBhcmFtZXRlcihXU0RMQWN0aW9uSW5wdXRzLkZSQU1FU0VUX0NPTFNfUEVSU1BFQ1RJVkVfQ09OVEVOVCk7Ci0gICAgU3RyaW5nIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFdTRExBY3Rpb25JbnB1dHMuRlJBTUVTRVRfUk9XU19BQ1RJT05TX0NPTlRBSU5FUik7Ci0gICAgaWYgKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyAhPSBudWxsICYmIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoV1NETEFjdGlvbklucHV0cy5GUkFNRVNFVF9DT0xTX1BFUlNQRUNUSVZFX0NPTlRFTlQscGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChXU0RMQWN0aW9uSW5wdXRzLkZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIsYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgLy8gU2F2ZSB0aGUgY3VycmVudCBmcmFtZXNldCBzaXplcy4KLSAgICBTdHJpbmcgZnJhbWVOYW1lID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLkZSQU1FX05BTUUpOwotICAgIFN0cmluZyBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChXU0RMQWN0aW9uSW5wdXRzLkZSQU1FU0VUX0NPTFNfUEVSU1BFQ1RJVkVfQ09OVEVOVCk7Ci0gICAgU3RyaW5nIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MgPSAoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChXU0RMQWN0aW9uSW5wdXRzLkZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIpOwotICAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgICAKLSAgICAvLyBTZXQgdGhlIG5ldyBmcmFtZXNldCBzaXplcy4KLSAgICBpZiAoZnJhbWVOYW1lLmVxdWFscyhXU0RMRnJhbWVOYW1lcy5XU0RMX05BVklHQVRPUl9DT05UQUlORVIpKQotICAgIHsKLSAgICAgIHdzZGxQZXJzcGVjdGl2ZS5zZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MpOwotICAgICAgd3NkbFBlcnNwZWN0aXZlLnNldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKTsKLSAgICAgIGlmIChwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMuc3RhcnRzV2l0aCgiMTAwJSIpKQotICAgICAgewotICAgICAgICAvLyBSZXN0b3JlLgotICAgICAgICB3c2RsUGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKHdzZGxQZXJzcGVjdGl2ZS5nZXRTYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gTWF4aW1pemUuCi0gICAgICAgIHdzZGxQZXJzcGVjdGl2ZS5zZXRTYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyhwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMpOwotICAgICAgICB3c2RsUGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCIxMDAlLDAlIik7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKGZyYW1lTmFtZS5lcXVhbHMoV1NETEZyYW1lTmFtZXMuV1NETF9QUk9QRVJUSUVTX0NPTlRBSU5FUikpCi0gICAgewotICAgICAgaWYgKGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3Muc3RhcnRzV2l0aCgiMTAwJSIpKQotICAgICAgewotICAgICAgICBpZiAocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzLmVuZHNXaXRoKCIxMDAlIikpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBSZXN0b3JlLgotICAgICAgICAgIHdzZGxQZXJzcGVjdGl2ZS5zZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMod3NkbFBlcnNwZWN0aXZlLmdldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCkpOwotICAgICAgICAgIHdzZGxQZXJzcGVjdGl2ZS5zZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKHdzZGxQZXJzcGVjdGl2ZS5nZXRTYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgLy8gTWF4aW1pemUuCi0gICAgICAgICAgd3NkbFBlcnNwZWN0aXZlLnNldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyk7Ci0gICAgICAgICAgd3NkbFBlcnNwZWN0aXZlLnNldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKTsKLSAgICAgICAgICB3c2RsUGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCIwJSwxMDAlIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gTWF4aW1pemUuCi0gICAgICAgIHdzZGxQZXJzcGVjdGl2ZS5zZXRTYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyk7Ci0gICAgICAgIHdzZGxQZXJzcGVjdGl2ZS5zZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKCIxMDAlLDAlIik7Ci0gICAgICAgIGlmICghcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzLmVuZHNXaXRoKCIxMDAlIikpCi0gICAgICAgIHsKLSAgICAgICAgICB3c2RsUGVyc3BlY3RpdmUuc2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKTsKLSAgICAgICAgICB3c2RsUGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCIwJSwxMDAlIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAoZnJhbWVOYW1lLmVxdWFscyhXU0RMRnJhbWVOYW1lcy5XU0RMX1NUQVRVU19DT05UQUlORVIpKQotICAgIHsKLSAgICAgIGlmIChhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzLmVuZHNXaXRoKCIxMDAlIikpCi0gICAgICB7Ci0gICAgICAgIGlmIChwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMuZW5kc1dpdGgoIjEwMCUiKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIFJlc3RvcmUuCi0gICAgICAgICAgd3NkbFBlcnNwZWN0aXZlLnNldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyh3c2RsUGVyc3BlY3RpdmUuZ2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKSk7Ci0gICAgICAgICAgd3NkbFBlcnNwZWN0aXZlLnNldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3Mod3NkbFBlcnNwZWN0aXZlLmdldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBNYXhpbWl6ZS4KLSAgICAgICAgICB3c2RsUGVyc3BlY3RpdmUuc2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKTsKLSAgICAgICAgICB3c2RsUGVyc3BlY3RpdmUuc2V0U2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MpOwotICAgICAgICAgIHdzZGxQZXJzcGVjdGl2ZS5zZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoIjAlLDEwMCUiKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBNYXhpbWl6ZS4KLSAgICAgICAgd3NkbFBlcnNwZWN0aXZlLnNldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKTsKLSAgICAgICAgd3NkbFBlcnNwZWN0aXZlLnNldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoIjAlLDEwMCUiKTsKLSAgICAgICAgaWYgKCFwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMuZW5kc1dpdGgoIjEwMCUiKSkKLSAgICAgICAgewotICAgICAgICAgIHdzZGxQZXJzcGVjdGl2ZS5zZXRTYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyhwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMpOwotICAgICAgICAgIHdzZGxQZXJzcGVjdGl2ZS5zZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoIjAlLDEwMCUiKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvU2VsZWN0V1NETE5hdmlnYXRvck5vZGVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL1NlbGVjdFdTRExOYXZpZ2F0b3JOb2RlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4NzVmMTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvU2VsZWN0V1NETE5hdmlnYXRvck5vZGVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5TZWxlY3ROb2RlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuVG9vbFR5cGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIFNlbGVjdFdTRExOYXZpZ2F0b3JOb2RlQWN0aW9uIGV4dGVuZHMgU2VsZWN0Tm9kZUFjdGlvbgotewotCi0gICAgcHVibGljIFNlbGVjdFdTRExOYXZpZ2F0b3JOb2RlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgICB7Ci0gICAgICAgIHN1cGVyKGNvbnRyb2xsZXIsY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSUQsIGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgICB7Ci0gICAgICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigid3NkbC9hY3Rpb25zL1NlbGVjdFdTRExOYXZpZ2F0b3JOb2RlQWN0aW9uSlNQLmpzcD8iKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCkuYXBwZW5kKCc9JykuYXBwZW5kKG5vZGVJRCk7Ci0gICAgICAgIGlmIChmb3JIaXN0b3J5KQotICAgICAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoQWN0aW9uSW5wdXRzLklTSElTVE9SWSkuYXBwZW5kKCI9MSIpOwotICAgICAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QWN0aW9uTGlua0Zvckhpc3RvcnkoKQotICAgIHsKLSAgICAgIFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyID0gc2VsZWN0ZWROb2RlXy5nZXRUb29sTWFuYWdlcigpOwotICAgICAgVG9vbCBzZWxlY3RlZFRvb2wgPSB0b29sTWFuYWdlci5nZXRTZWxlY3RlZFRvb2woKTsKLSAgICAgIGludCBub2RlSWQgPSBzZWxlY3RlZE5vZGVfLmdldE5vZGVJZCgpOwotICAgICAgCi0gICAgICBpZiAoc2VsZWN0ZWRUb29sLmdldFRvb2xUeXBlKCkgIT0gVG9vbFR5cGVzLkFDVElPTikKLSAgICAgICAgcmV0dXJuIHNlbGVjdGVkVG9vbC5nZXRTZWxlY3RUb29sQWN0aW9uSHJlZih0cnVlKTsKLSAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIGdldEFjdGlvbkxpbmsobm9kZUlkLHRydWUpOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRWYXIoKSB7Ci0gICAgICAgIHJldHVybiAid3NkbE5hdmlnYXRvckNvbnRlbnQiOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRQYWdlKCkgewotICAgICAgICByZXR1cm4gIndzZGwvd3NkbF9uYXZpZ2F0b3JfY29udGVudC5qc3AiOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclZhcigpIHsKLSAgICAgICAgcmV0dXJuICJ3c2RsUHJvcGVydGllc0NvbnRhaW5lciI7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyUGFnZSgpIHsKLSAgICAgICAgcmV0dXJuICJ3c2RsL3dzZGxfcHJvcGVydGllc19jb250YWluZXIuanNwIjsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGZpbmFsIGludCBnZXRQZXJzcGVjdGl2ZUlkKCkKLSAgICB7Ci0gICAgICByZXR1cm4gQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1dTREw7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvU2VsZWN0V1NETFByb3BlcnRpZXNUb29sQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9TZWxlY3RXU0RMUHJvcGVydGllc1Rvb2xBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE1NjA4OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9TZWxlY3RXU0RMUHJvcGVydGllc1Rvb2xBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuU2VsZWN0Tm9kZVRvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci0KLXB1YmxpYyBjbGFzcyBTZWxlY3RXU0RMUHJvcGVydGllc1Rvb2xBY3Rpb24gZXh0ZW5kcyBTZWxlY3ROb2RlVG9vbEFjdGlvbgotewotCi0gICAgcHVibGljIFNlbGVjdFdTRExQcm9wZXJ0aWVzVG9vbEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gICAgewotICAgICAgICBzdXBlcihjb250cm9sbGVyLCBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCkpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJRCwgaW50IHRvb2xJRCwgaW50IHZpZXdJRCwgaW50IHZpZXdUb29sSUQsIGJvb2xlYW4ga2VlcEhpc3RvcnkpCi0gICAgewotICAgICAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoIndzZGwvYWN0aW9ucy9TZWxlY3RXU0RMUHJvcGVydGllc1Rvb2xBY3Rpb25KU1AuanNwPyIpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQobm9kZUlEKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlRPT0xJRCk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKHRvb2xJRCk7Ci0gICAgICAgIGlmICh2aWV3SUQgIT0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUKSB7Ci0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgICAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdJRCk7Ci0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgICAgICAgICAgYWN0aW9uTGluay5hcHBlbmQodmlld0lEKTsKLSAgICAgICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVklFV1RPT0xJRCk7Ci0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgICAgICAgICAgYWN0aW9uTGluay5hcHBlbmQodmlld1Rvb2xJRCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGtlZXBIaXN0b3J5KSB7Ci0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgICAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLklTSElTVE9SWSk7Ci0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgiPTEiKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QWN0aW9uTGlua0Zvckhpc3RvcnkoKQotICAgIHsKLSAgICAgICAgaW50IG5vZGVJZCA9IHNlbGVjdGVkTm9kZV8uZ2V0Tm9kZUlkKCk7Ci0gICAgICAgIGludCB0b29sSWQgPSBzZWxlY3RlZFRvb2xfLmdldFRvb2xJZCgpOwotICAgICAgICBpbnQgdmlld0lkID0gc2VsZWN0ZWROb2RlXy5nZXRWaWV3SWQoKTsKLSAgICAgICAgaW50IHZpZXdUb29sSWQgPSBzZWxlY3RlZE5vZGVfLmdldFZpZXdUb29sSWQoKTsKLSAgICAgICAgcmV0dXJuIGdldEFjdGlvbkxpbmsobm9kZUlkLHRvb2xJZCx2aWV3SWQsdmlld1Rvb2xJZCx0cnVlKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFRyZWVDb250ZW50VmFyKCkgewotICAgICAgICByZXR1cm4gIndzZGxOYXZpZ2F0b3JDb250ZW50IjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFRyZWVDb250ZW50UGFnZSgpIHsKLSAgICAgICAgcmV0dXJuICJ3c2RsL3dzZGxfbmF2aWdhdG9yX2NvbnRlbnQuanNwIjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKSB7Ci0gICAgICAgIHJldHVybiAid3NkbFByb3BlcnRpZXNDb250YWluZXIiOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclBhZ2UoKSB7Ci0gICAgICAgIHJldHVybiAid3NkbC93c2RsX3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCI7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGVudFZhcigpIHsKLSAgICAgICAgcmV0dXJuICJ3c2RsUHJvcGVydGllc0NvbnRlbnQiOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRlbnRQYWdlKCkgewotICAgICAgICByZXR1cm4gIndzZGwvd3NkbF9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIjsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGZpbmFsIGludCBnZXRQZXJzcGVjdGl2ZUlkKCkKLSAgICB7Ci0gICAgICByZXR1cm4gQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1dTREw7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvU3dpdGNoUGVyc3BlY3RpdmVGcm9tV1NETEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvU3dpdGNoUGVyc3BlY3RpdmVGcm9tV1NETEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTViYzNiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL1N3aXRjaFBlcnNwZWN0aXZlRnJvbVdTRExBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5TaG93UGVyc3BlY3RpdmVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLldTRExBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuV1NETFBlcnNwZWN0aXZlOwotCi1wdWJsaWMgZmluYWwgY2xhc3MgU3dpdGNoUGVyc3BlY3RpdmVGcm9tV1NETEFjdGlvbiBleHRlbmRzIFNob3dQZXJzcGVjdGl2ZUFjdGlvbgotewotICBwdWJsaWMgU3dpdGNoUGVyc3BlY3RpdmVGcm9tV1NETEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc1BhcnNlZFJlc3VsdHMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFdTRExBY3Rpb25JbnB1dHMuRlJBTUVTRVRfQ09MU19QRVJTUEVDVElWRV9DT05URU5UKTsKLSAgICBTdHJpbmcgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoV1NETEFjdGlvbklucHV0cy5GUkFNRVNFVF9ST1dTX0FDVElPTlNfQ09OVEFJTkVSKTsKLSAgICBpZiAocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzICE9IG51bGwgJiYgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyAhPSBudWxsKQotICAgIHsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChXU0RMQWN0aW9uSW5wdXRzLkZSQU1FU0VUX0NPTFNfUEVSU1BFQ1RJVkVfQ09OVEVOVCxwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFdTRExBY3Rpb25JbnB1dHMuRlJBTUVTRVRfUk9XU19BQ1RJT05TX0NPTlRBSU5FUixhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBTdHJpbmcgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoV1NETEFjdGlvbklucHV0cy5GUkFNRVNFVF9DT0xTX1BFUlNQRUNUSVZFX0NPTlRFTlQpOwotICAgIFN0cmluZyBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoV1NETEFjdGlvbklucHV0cy5GUkFNRVNFVF9ST1dTX0FDVElPTlNfQ09OVEFJTkVSKTsKLSAgICAKLSAgICAvLyBTYXZlIHRoZSBmcmFtZXNldCBzaXplcyBpZmYgbm8gZnJhbWUgaXMgbWF4aW1pemVkLgotICAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgICBpZiAoIXBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scy5zdGFydHNXaXRoKCIxMDAlIikgJiYgIXBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scy5lbmRzV2l0aCgiMTAwJSIpKQotICAgICAgd3NkbFBlcnNwZWN0aXZlLnNldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyhwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMpOwotICAgICAgCi0gICAgaWYgKCFhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzLnN0YXJ0c1dpdGgoIjEwMCUiKSAmJiAhYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cy5lbmRzV2l0aCgiMTAwJSIpKQotICAgICAgd3NkbFBlcnNwZWN0aXZlLnNldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyk7Ci0gICAgICAKLSAgICByZXR1cm4gc3VwZXIucnVuKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldEZvcm1BY3Rpb25MaW5rKGludCB0YXJnZXRQZXJzcGVjdGl2ZUlkLGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBmb3JtTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoIndzZGwvYWN0aW9ucy9Td2l0Y2hQZXJzcGVjdGl2ZUZyb21XU0RMQWN0aW9uSlNQLmpzcD8iKTsKLSAgICBmb3JtTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFKS5hcHBlbmQoJz0nKS5hcHBlbmQodGFyZ2V0UGVyc3BlY3RpdmVJZCk7Ci0gICAgaWYgKGZvckhpc3RvcnkpCi0gICAgICBmb3JtTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoQWN0aW9uSW5wdXRzLklTSElTVE9SWSkuYXBwZW5kKCI9MSIpOyAgICAKLSAgICByZXR1cm4gZm9ybUxpbmsudG9TdHJpbmcoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvU3luY2hyb25pemVGcmFnbWVudFZpZXdzQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9TeW5jaHJvbml6ZUZyYWdtZW50Vmlld3NBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQzM2U5MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9TeW5jaHJvbml6ZUZyYWdtZW50Vmlld3NBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMzA1ICAgMTE3MDM0IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXZWIgU2VydmljZXMgRXhwbG9yZXIgc2hvdWxkIHN1cHBvcnQgU09BUCBIZWFkZXJzCi0gKiAyMDA3MDQxMyAgIDE3NjQ5MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFOiBNYWtlIG1lc3NhZ2UvdHJhbnNwb3J0IHN0YWNrIHBsdWdnYWJsZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5GcmFnbWVudENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuV1NETE1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC5XU0RMT3BlcmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNERnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5TT0FQSGVhZGVyV3JhcHBlckZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLkludm9rZVdTRExPcGVyYXRpb25Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnV0aWwuU09BUE1lc3NhZ2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlcjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgU3luY2hyb25pemVGcmFnbWVudFZpZXdzQWN0aW9uIGV4dGVuZHMgV1NETFByb3BlcnRpZXNGb3JtQWN0aW9uCi17Ci0gIHB1YmxpYyBTeW5jaHJvbml6ZUZyYWdtZW50Vmlld3NBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzUGFyc2VkUmVzdWx0cyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgc3VwZXIucHJvY2Vzc1BhcnNlZFJlc3VsdHMocGFyc2VyKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IGdldFNlbGVjdGVkTmF2aWdhdG9yTm9kZSgpOwotICAgIFdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIAotICAgIEludm9rZVdTRExPcGVyYXRpb25Ub29sIGludm9rZVdTRExPcGVyYXRpb25Ub29sID0gKEludm9rZVdTRExPcGVyYXRpb25Ub29sKShzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotICAgIFN0cmluZyB2aWV3SUQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKEZyYWdtZW50Q29uc3RhbnRzLkZSQUdNRU5UX1ZJRVdfSUQpOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChGcmFnbWVudENvbnN0YW50cy5GUkFHTUVOVF9WSUVXX0lELCB2aWV3SUQpOwotICAgIGlmICh2aWV3SUQuZXF1YWxzKEZyYWdtZW50Q29uc3RhbnRzLkZSQUdNRU5UX1ZJRVdfU1dJVENIX0ZPUk1fVE9fU09VUkNFKSkKLSAgICB7Ci0gICAgICBpbnZva2VXU0RMT3BlcmF0aW9uVG9vbC5zZXRGcmFnbWVudFZpZXdJRChGcmFnbWVudENvbnN0YW50cy5GUkFHTUVOVF9WSUVXX1NXSVRDSF9GT1JNX1RPX1NPVVJDRSk7Ci0gICAgICBvcGVyRWxlbWVudC5zZXRQcm9wZXJ0eUFzT2JqZWN0KFdTRExNb2RlbENvbnN0YW50cy5QUk9QX1NPVVJDRV9DT05URU5UX05BTUVTUEFDRSwgbnVsbCk7Ci0gICAgICAKLSAgICAgIHJldHVybiBwcm9jZXNzRm9ybVZpZXdQYXJzZWRSZXN1bHRzSGVhZGVyKHBhcnNlciwgb3BlckVsZW1lbnQpICYJCS8vIG5lZWQgdG8gcHJvY2VzcyBib3RoIGhlYWRlciBhbmQgYm9keSAKLSAgICAgICAgICAgICBwcm9jZXNzRm9ybVZpZXdQYXJzZWRSZXN1bHRzKHBhcnNlciwgb3BlckVsZW1lbnQpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgaW52b2tlV1NETE9wZXJhdGlvblRvb2wuc2V0RnJhZ21lbnRWaWV3SUQoRnJhZ21lbnRDb25zdGFudHMuRlJBR01FTlRfVklFV19TV0lUQ0hfU09VUkNFX1RPX0ZPUk0pOwotICAgICAgU3RyaW5nW10gbnNEZWNsYXJhdGlvbnMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKEZyYWdtZW50Q29uc3RhbnRzLlNPVVJDRV9DT05URU5UX05BTUVTUEFDRSk7ICAgIAotICAgICAgaWYgKG5zRGVjbGFyYXRpb25zICE9IG51bGwpCi0gICAgICAgIG9wZXJFbGVtZW50LnNldFByb3BlcnR5QXNPYmplY3QoV1NETE1vZGVsQ29uc3RhbnRzLlBST1BfU09VUkNFX0NPTlRFTlRfTkFNRVNQQUNFLG5zRGVjbGFyYXRpb25zKTsKLSAgICAgIAotICAgICAgSVNPQVBNZXNzYWdlIHNvYXBNZXNzYWdlID0gKElTT0FQTWVzc2FnZSkgb3BlckVsZW1lbnQuZ2V0UHJvcGVydHlBc09iamVjdChXU0RMTW9kZWxDb25zdGFudHMuUFJPUF9TT0FQX1JFUVVFU1RfVE1QKTsKLSAgICAgIGJvb2xlYW4gcmMgPSBwcm9jZXNzU291cmNlVmlld1BhcnNlZFJlc3VsdHNIZWFkZXIocGFyc2VyLCBvcGVyRWxlbWVudCwgc29hcE1lc3NhZ2UpICYJLy8gbmVlZCB0byBwcm9jZXNzIGJvdGggaGVhZGVyIGFuZCBib2R5Ci0JCSAJCSAgIHByb2Nlc3NTb3VyY2VWaWV3UGFyc2VkUmVzdWx0cyhwYXJzZXIsIG9wZXJFbGVtZW50LCBzb2FwTWVzc2FnZSk7IAotICAgICAgb3BlckVsZW1lbnQuc2V0UHJvcGVydHlBc09iamVjdChXU0RMTW9kZWxDb25zdGFudHMuUFJPUF9TT0FQX1JFUVVFU1RfVE1QLCBudWxsKTsKLSAgICAgIAotICAgICAgcmV0dXJuIHJjOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBwcm9jZXNzRm9ybVZpZXdQYXJzZWRSZXN1bHRzSGVhZGVyKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlciwgV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7IAotCW9wZXJFbGVtZW50LnNldFByb3BlcnR5QXNPYmplY3QoV1NETE1vZGVsQ29uc3RhbnRzLlBST1BfU09VUkNFX0NPTlRFTlRfSEVBREVSLCBudWxsKTsJCi0JYm9vbGVhbiByZXN1bHRzVmFsaWQgPSB0cnVlOwotCSAgICAKLQlJdGVyYXRvciBpdCA9IG9wZXJFbGVtZW50LmdldFNPQVBIZWFkZXJzKCkuaXRlcmF0b3IoKTsKLQl3aGlsZSAoaXQuaGFzTmV4dCgpKQotCXsKLQkgIFNPQVBIZWFkZXIgc29hcEhlYWRlciA9IChTT0FQSGVhZGVyKSBpdC5uZXh0KCk7ICAgICAgICAKLQkgIElYU0RGcmFnbWVudCBmcmFnID0gb3BlckVsZW1lbnQuZ2V0SGVhZGVyRnJhZ21lbnQoc29hcEhlYWRlcik7Ci0JICBpZiAoIWZyYWcucHJvY2Vzc1BhcmFtZXRlclZhbHVlcyhwYXJzZXIpKQotICAgICAgICByZXN1bHRzVmFsaWQgPSBmYWxzZTsKLQl9Ci0JaWYgKHJlc3VsdHNWYWxpZCkKLQkgIG9wZXJFbGVtZW50LnNldFByb3BlcnR5QXNTdHJpbmcoV1NETE1vZGVsQ29uc3RhbnRzLlBST1BfU09VUkNFX0NPTlRFTlRfSEVBREVSLG51bGwpOwotICAgIHJldHVybiByZXN1bHRzVmFsaWQ7Ci0gIH0KLSAgCi0gIHByaXZhdGUgYm9vbGVhbiBwcm9jZXNzRm9ybVZpZXdQYXJzZWRSZXN1bHRzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlciwgV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgb3BlckVsZW1lbnQuc2V0UHJvcGVydHlBc09iamVjdChXU0RMTW9kZWxDb25zdGFudHMuUFJPUF9TT1VSQ0VfQ09OVEVOVCwgbnVsbCk7Ci0gICAgYm9vbGVhbiByZXN1bHRzVmFsaWQgPSB0cnVlOwotCQotICAgIEl0ZXJhdG9yIGl0ID0gb3BlckVsZW1lbnQuZ2V0T3JkZXJlZEJvZHlQYXJ0cygpLml0ZXJhdG9yKCk7ICAgIAotICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgewotICAgICAgUGFydCBwYXJ0ID0gKFBhcnQpaXQubmV4dCgpOwotICAgICAgSVhTREZyYWdtZW50IGZyYWcgPSBvcGVyRWxlbWVudC5nZXRGcmFnbWVudChwYXJ0KTsKLSAgICAgIGlmICghZnJhZy5wcm9jZXNzUGFyYW1ldGVyVmFsdWVzKHBhcnNlcikpCi0gICAgICAgIHJlc3VsdHNWYWxpZCA9IGZhbHNlOwotICAgIH0KLSAgICBpZiAocmVzdWx0c1ZhbGlkKQotICAgICAgb3BlckVsZW1lbnQuc2V0UHJvcGVydHlBc1N0cmluZyhXU0RMTW9kZWxDb25zdGFudHMuUFJPUF9TT1VSQ0VfQ09OVEVOVCxudWxsKTsKLSAgICByZXR1cm4gcmVzdWx0c1ZhbGlkOwotICB9Ci0gIAotICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc1NvdXJjZVZpZXdQYXJzZWRSZXN1bHRzSGVhZGVyKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlciwgV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQsIElTT0FQTWVzc2FnZSBzb2FwTWVzc2FnZSkgCi0gIAl0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24gewotCSAgCi0gICAgU3RyaW5nIHNvdXJjZUNvbnRlbnQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKEZyYWdtZW50Q29uc3RhbnRzLlNPVVJDRV9DT05URU5UX0hFQURFUik7Ci0gICAgaWYgKHNvdXJjZUNvbnRlbnQgIT0gbnVsbCkKLSAgICAgIG9wZXJFbGVtZW50LnNldFByb3BlcnR5QXNTdHJpbmcoV1NETE1vZGVsQ29uc3RhbnRzLlBST1BfU09VUkNFX0NPTlRFTlRfSEVBREVSLCBzb3VyY2VDb250ZW50KTsgICAgCi0gICAgICAgICAgIAotICAgIEl0ZXJhdG9yIGl0ID0gb3BlckVsZW1lbnQuZ2V0U09BUEhlYWRlcnMoKS5pdGVyYXRvcigpOwotICAgIGlmICghaXQuaGFzTmV4dCgpKQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgdHJ5Ci0gICAgewotICAgICAgb3BlckVsZW1lbnQuZ2V0U09BUFRyYW5zcG9ydFByb3ZpZGVyKCkubmV3VHJhbnNwb3J0KCkubmV3RGVzZXJpYWxpemVyKCkKLSAgICAgIAkuZGVzZXJpYWxpemUoSVNPQVBNZXNzYWdlLkhFQURFUl9DT05URU5ULCBzb3VyY2VDb250ZW50LCBzb2FwTWVzc2FnZSk7ICAKLSAgICAJCi0gICAgICBFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMgPSBzb2FwTWVzc2FnZS5nZXRIZWFkZXJDb250ZW50KCk7Ci0gICAgICBNYXAgbmFtZXNwYWNlVGFibGUgPSBzb2FwTWVzc2FnZS5nZXROYW1lc3BhY2VUYWJsZSgpOwotICAgICAgCi0gICAgICBib29sZWFuIHNvdXJjZUVsZW1lbnRzVmFsaWQgPSB0cnVlOwotICAgICAgaW50IHN0YXJ0ID0gMDsKLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkgJiYgc3RhcnQgPCBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGgpCi0gICAgICB7Ci0gICAgICAgIFNPQVBIZWFkZXIgc29hcEhlYWRlciA9IChTT0FQSGVhZGVyKWl0Lm5leHQoKTsKLSAgICAgICAgU09BUEhlYWRlcldyYXBwZXJGcmFnbWVudCBmcmFnID0gKFNPQVBIZWFkZXJXcmFwcGVyRnJhZ21lbnQpIG9wZXJFbGVtZW50LmdldEhlYWRlckZyYWdtZW50KHNvYXBIZWFkZXIpOwotICAgICAgICAKLSAgICAgICAgaW50IHBvcyA9IFNPQVBNZXNzYWdlVXRpbHMuZmluZEZpcnN0TWF0Y2hpbmdFbGVtZW50KAotICAgICAgICAJCXNvYXBIZWFkZXIuZ2V0RVBhcnQoKSwKLQkJCQlpbnN0YW5jZURvY3VtZW50cywKLQkJCQluYW1lc3BhY2VUYWJsZSwKLQkJCQlmcmFnLmdldE5hbWUoKSwKLQkJCQlzdGFydCk7Ci0JCQkKLQkJaWYgKHBvcyA9PSAtMSkKLQkJCWNvbnRpbnVlOwotCQkJCi0JCUVsZW1lbnQgZWxlbWVudCA9IGluc3RhbmNlRG9jdW1lbnRzW3Bvc107Ci0JCXN0YXJ0ID0gcG9zICsgMTsJCQkKLSAgICAgICAgCi0gICAgICAgIGlmICghZnJhZy5zZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudChlbGVtZW50LCBuYW1lc3BhY2VUYWJsZSkpCi0gICAgICAgICAgc291cmNlRWxlbWVudHNWYWxpZCA9IGZhbHNlOwotICAgICAgfQotICAgICAgcmV0dXJuIHNvdXJjZUVsZW1lbnRzVmFsaWQ7Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSAgICAKLSAgfQotICAKLSAgcHJpdmF0ZSBib29sZWFuIHByb2Nlc3NTb3VyY2VWaWV3UGFyc2VkUmVzdWx0cyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIsIFdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50LCBJU09BUE1lc3NhZ2Ugc29hcE1lc3NhZ2UpCi0gIAl0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24gewotCSAgCi0gICAgU3RyaW5nIHNvdXJjZUNvbnRlbnQgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKEZyYWdtZW50Q29uc3RhbnRzLlNPVVJDRV9DT05URU5UKTsKLSAgICBpZiAoc291cmNlQ29udGVudCAhPSBudWxsKQotICAgICAgb3BlckVsZW1lbnQuc2V0UHJvcGVydHlBc1N0cmluZyhXU0RMTW9kZWxDb25zdGFudHMuUFJPUF9TT1VSQ0VfQ09OVEVOVCwgc291cmNlQ29udGVudCk7Ci0gICAgCi0gICAgSXRlcmF0b3IgaXQgPSBvcGVyRWxlbWVudC5nZXRPcmRlcmVkQm9keVBhcnRzKCkuaXRlcmF0b3IoKTsgICAgCi0gICAgCi0gICAgdHJ5Ci0gICAgewotICAgICAgb3BlckVsZW1lbnQuZ2V0U09BUFRyYW5zcG9ydFByb3ZpZGVyKCkubmV3VHJhbnNwb3J0KCkubmV3RGVzZXJpYWxpemVyKCkKLSAgICAgIAkuZGVzZXJpYWxpemUoSVNPQVBNZXNzYWdlLkJPRFlfQ09OVEVOVCwgc291cmNlQ29udGVudCwgc29hcE1lc3NhZ2UpOyAgICAgIAkKLSAgICAJCi0gICAgICBFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMgPSBzb2FwTWVzc2FnZS5nZXRCb2R5Q29udGVudCgpOwotICAgICAgCi0gICAgICBib29sZWFuIHNvdXJjZUVsZW1lbnRzVmFsaWQgPSB0cnVlOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgUGFydCBwYXJ0ID0gKFBhcnQpaXQubmV4dCgpOwotICAgICAgICBJWFNERnJhZ21lbnQgZnJhZyA9IG9wZXJFbGVtZW50LmdldEZyYWdtZW50KHBhcnQpOwotICAgICAgICBpZiAoIWZyYWcuc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKGluc3RhbmNlRG9jdW1lbnRzKSkKLSAgICAgICAgICBzb3VyY2VFbGVtZW50c1ZhbGlkID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gc291cmNlRWxlbWVudHNWYWxpZDsKLSAgICB9Ci0gICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBydW4oKSB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9Ub2dnbGVXU0RMTmF2aWdhdG9yTm9kZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvVG9nZ2xlV1NETE5hdmlnYXRvck5vZGVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQ4Y2Q5Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9Ub2dnbGVXU0RMTmF2aWdhdG9yTm9kZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLlRvZ2dsZU5vZGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Ub29sVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgVG9nZ2xlV1NETE5hdmlnYXRvck5vZGVBY3Rpb24gZXh0ZW5kcyBUb2dnbGVOb2RlQWN0aW9uCi17Ci0gIHB1YmxpYyBUb2dnbGVXU0RMTmF2aWdhdG9yTm9kZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyLGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCkuZ2V0Tm9kZU1hbmFnZXIoKSk7Ci0gIH0KLQotICAvLyB1ZGRpL2FjdGlvbnMvVG9nZ2xlTmF2aWdhdG9yTm9kZUFjdGlvbi5qc3A/bm9kZUlkPS4uLiZvcGVuPS4uLgotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSWQsYm9vbGVhbiBvcGVuKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ3c2RsL2FjdGlvbnMvVG9nZ2xlV1NETE5hdmlnYXRvck5vZGVBY3Rpb25KU1AuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpLmFwcGVuZCgnPScpLmFwcGVuZChub2RlSWQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJykuYXBwZW5kKEFjdGlvbklucHV0cy5PUEVOKS5hcHBlbmQoJz0nKS5hcHBlbmQob3Blbj9BY3Rpb25JbnB1dHMuT1BFTl9OT0RFOkFjdGlvbklucHV0cy5DTE9TRV9OT0RFKTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0KLSAgLy8gVGhpcyBzaG91bGQgYmUgY2FsbGVkIG9ubHkgdG8gc2VsZWN0IHRoZSB0b2dnbGVkIG5vZGUgd2hlbiwgYXQgdGhlIHRpbWUgb2YKLSAgLy8gdGhlIGNvbGxhcHNlIGV2ZW50LCBhIGRlc2NlbmRhbnQgbm9kZSB3YXMgc2VsZWN0ZWQuCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGlua0Zvckhpc3RvcnkoKQotICB7Ci0gICAgVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIgPSB0b2dnbGVkTm9kZV8uZ2V0VG9vbE1hbmFnZXIoKTsKLSAgICBUb29sIHNlbGVjdGVkVG9vbCA9IHRvb2xNYW5hZ2VyLmdldFNlbGVjdGVkVG9vbCgpOwotICAgIGludCBub2RlSWQgPSB0b2dnbGVkTm9kZV8uZ2V0Tm9kZUlkKCk7Ci0gICAgaW50IHRvb2xJZCA9IHNlbGVjdGVkVG9vbC5nZXRUb29sSWQoKTsKLSAgICBpbnQgdmlld0lkID0gdG9nZ2xlZE5vZGVfLmdldFZpZXdJZCgpOwotICAgIGludCB2aWV3VG9vbElkID0gdG9nZ2xlZE5vZGVfLmdldFZpZXdUb29sSWQoKTsKLSAgICBpZiAoc2VsZWN0ZWRUb29sLmdldFRvb2xUeXBlKCkgIT0gVG9vbFR5cGVzLkFDVElPTikKLSAgICAgIHJldHVybiBTZWxlY3RXU0RMUHJvcGVydGllc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWQsdG9vbElkLHZpZXdJZCx2aWV3VG9vbElkLHRydWUpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBTZWxlY3RXU0RMTmF2aWdhdG9yTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZCx0cnVlKTsKLSAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUcmVlQ29udGVudFZhcigpCi0gICAgewotICAgICAgcmV0dXJuICJ3c2RsTmF2aWdhdG9yQ29udGVudCI7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUcmVlQ29udGVudFBhZ2UoKQotICAgIHsKLSAgICAgIHJldHVybiAid3NkbC93c2RsX25hdmlnYXRvcl9jb250ZW50LmpzcCI7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyVmFyKCkKLSAgICB7Ci0gICAgICByZXR1cm4gIndzZGxQcm9wZXJ0aWVzQ29udGFpbmVyIjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCkKLSAgICB7Ci0gICAgICByZXR1cm4gIndzZGwvd3NkbF9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgZmluYWwgaW50IGdldFBlcnNwZWN0aXZlSWQoKQotICAgIHsKLSAgICAgIHJldHVybiBBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfV1NETDsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9VcGRhdGVXU0RMQmluZGluZ0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvVXBkYXRlV1NETEJpbmRpbmdBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGVlNjY1Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9VcGRhdGVXU0RMQmluZGluZ0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuV1NETEFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuV1NETEJpbmRpbmdFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLkludm9rZVdTRExPcGVyYXRpb25Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLldTRExCaW5kaW5nTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS5XU0RMUGVyc3BlY3RpdmU7Ci0KLXB1YmxpYyBjbGFzcyBVcGRhdGVXU0RMQmluZGluZ0FjdGlvbiBleHRlbmRzIFdTRExQcm9wZXJ0aWVzRm9ybUFjdGlvbgotewotICBwdWJsaWMgVXBkYXRlV1NETEJpbmRpbmdBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzUGFyc2VkUmVzdWx0cyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nW10gbm9kZUlkcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgaWYgKG5vZGVJZHMgPT0gbnVsbCkKLSAgICAgIG5vZGVJZHMgPSBuZXcgU3RyaW5nWzBdOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuTk9ERUlELCBub2RlSWRzKTsKLSAgICBTdHJpbmdbXSBlbmRwb2ludHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKFdTRExBY3Rpb25JbnB1dHMuRU5EX1BPSU5UKTsKLSAgICBpZiAoZW5kcG9pbnRzID09IG51bGwpCi0gICAgICBlbmRwb2ludHMgPSBuZXcgU3RyaW5nWzBdOwotICAgIHByb3BlcnR5VGFibGVfLnB1dChXU0RMQWN0aW9uSW5wdXRzLkVORF9QT0lOVCwgZW5kcG9pbnRzKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBTdHJpbmdbXSBub2RlSWRzID0gZ2V0UHJvcGVydHlBc1N0cmluZ0FycmF5KEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgIFN0cmluZ1tdIGVuZHBvaW50cyA9IGdldFByb3BlcnR5QXNTdHJpbmdBcnJheShXU0RMQWN0aW9uSW5wdXRzLkVORF9QT0lOVCk7Ci0gICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBub2RlSWRzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBOb2RlIGJpbmRpbmdOb2RlID0gbm9kZU1hbmFnZXIuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJZHNbaV0pKTsKLSAgICAgICAgaWYgKGJpbmRpbmdOb2RlIGluc3RhbmNlb2YgV1NETEJpbmRpbmdOb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgV1NETEJpbmRpbmdFbGVtZW50IGJpbmRpbmdFbGVtZW50ID0gKFdTRExCaW5kaW5nRWxlbWVudCliaW5kaW5nTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgICAgIFN0cmluZ1tdIGVuZHBvaW50c0NvcHkgPSBlbmRwb2ludHM7Ci0gICAgICAgICAgYmluZGluZ0VsZW1lbnQuc2V0RW5kUG9pbnRzKGVuZHBvaW50c0NvcHkpOwotICAgICAgICAgIGlmIChlbmRwb2ludHNDb3B5Lmxlbmd0aCA8PSAwKQotICAgICAgICAgICAgZW5kcG9pbnRzQ29weSA9IGJpbmRpbmdFbGVtZW50LmdldEVuZFBvaW50cygpOwotICAgICAgICAgIGlmIChlbmRwb2ludHNDb3B5Lmxlbmd0aCA+IDApCi0gICAgICAgICAgewotICAgICAgICAgICAgVmVjdG9yIG9wZXJhdGlvbk5vZGVzID0gYmluZGluZ05vZGUuZ2V0Q2hpbGROb2RlcygpOwotICAgICAgICAgICAgZm9yIChJdGVyYXRvciBpdCA9IG9wZXJhdGlvbk5vZGVzLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIE5vZGUgb3BlcmF0aW9uTm9kZSA9IChOb2RlKWl0Lm5leHQoKTsKLSAgICAgICAgICAgICAgTGlzdCB0b29scyA9IG9wZXJhdGlvbk5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0VG9vbHMoKTsKLSAgICAgICAgICAgICAgZm9yIChJdGVyYXRvciB0b29sc0l0ZXJhdG9yID0gdG9vbHMuaXRlcmF0b3IoKTsgdG9vbHNJdGVyYXRvci5oYXNOZXh0KCk7KQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgVG9vbCB0b29sID0gKFRvb2wpdG9vbHNJdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRvb2wgaW5zdGFuY2VvZiBJbnZva2VXU0RMT3BlcmF0aW9uVG9vbCkKLSAgICAgICAgICAgICAgICAgICgoSW52b2tlV1NETE9wZXJhdGlvblRvb2wpdG9vbCkuc2V0RW5kUG9pbnQoZW5kcG9pbnRzQ29weVswXSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKQotICAgICAgewotICAgICAgfQotICAgIH0KLSAgICBNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlID0gd3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpOwotICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19VUERBVEVfV1NETF9CSU5ESU5HX1NVQ0NFU1NGVUwiKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL1dTRExBZGRUb0Zhdm9yaXRlc0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvV1NETEFkZFRvRmF2b3JpdGVzQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyMmNiYWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvV1NETEFkZFRvRmF2b3JpdGVzQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5MaW5rQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuRmF2b3JpdGVzTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuRmF2b3JpdGVzRm9sZGVyRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLkZhdm9yaXRlc1BlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuV1NETFBlcnNwZWN0aXZlOwotCi1wdWJsaWMgY2xhc3MgV1NETEFkZFRvRmF2b3JpdGVzQWN0aW9uIGV4dGVuZHMgTGlua0FjdGlvbiB7Ci0gIHB1YmxpYyBXU0RMQWRkVG9GYXZvcml0ZXNBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzTGlua1BhcmFtZXRlcnMoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpIHsKLSAgICBTdHJpbmcgbm9kZUlEID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgdHJ5IHsKLSAgICAgIEludGVnZXIucGFyc2VJbnQobm9kZUlEKTsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuTk9ERUlELCBub2RlSUQpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJRCkgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigid3NkbC9hY3Rpb25zL1dTRExDaGVja0Zhdm9yaXRlRXhpc3RzQWN0aW9uSlNQLmpzcD8iKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKG5vZGVJRCk7Ci0gICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGZhdm9yaXRlRXhpc3RzKCkgewotICAgIFN0cmluZyB3c2RsVXJsID0gZ2V0V3NkbFVybCgpOwotICAgIEhhc2h0YWJsZSB0YWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9XU0RMX1VSTCwgd3NkbFVybCk7Ci0gICAgRmF2b3JpdGVzRm9sZGVyRWxlbWVudCBmYXZGb2xkZXJFbGVtZW50ID0gZ2V0RmF2V1NETEZvbGRlckVsZW1lbnQoKTsKLSAgICByZXR1cm4gZmF2Rm9sZGVyRWxlbWVudC5mYXZvcml0ZUV4aXN0cyh0YWJsZSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBydW4oKSB7Ci0gICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgIFN0cmluZyB3c2RsVXJsID0gZ2V0V3NkbFVybCgpOwotICAgIEhhc2h0YWJsZSB0YWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9XU0RMX1VSTCwgd3NkbFVybCk7Ci0gICAgRmF2b3JpdGVzRm9sZGVyRWxlbWVudCBmYXZGb2xkZXJFbGVtZW50ID0gZ2V0RmF2V1NETEZvbGRlckVsZW1lbnQoKTsKLSAgICBpZiAoZmF2Rm9sZGVyRWxlbWVudC5hZGRGYXZvcml0ZSh0YWJsZSkpIHsKLSAgICAgIHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19BRERfVE9fRkFWT1JJVEVTX1NVQ0NFU1NGVUwiLCB3c2RsVXJsKSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICB3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuYWRkTWVzc2FnZSh3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0FERF9UT19GQVZPUklURVMiLCB3c2RsVXJsKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0V3NkbFVybCgpIHsKLSAgICBTdHJpbmcgbm9kZUlEID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIHdzZGxOb2RlTWFuYWdlciA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIFdTRExFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IChXU0RMRWxlbWVudCl3c2RsTm9kZU1hbmFnZXIuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRCkpLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgcmV0dXJuIHNlbGVjdGVkRWxlbWVudC5nZXRXc2RsVXJsKCk7Ci0gIH0KLQotICBwcml2YXRlIEZhdm9yaXRlc0ZvbGRlckVsZW1lbnQgZ2V0RmF2V1NETEZvbGRlckVsZW1lbnQoKSB7Ci0gICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIGZhdk5vZGVNYW5hZ2VyID0gZmF2UGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBUcmVlRWxlbWVudCBmYXZSb290RWxlbWVudCA9IGZhdk5vZGVNYW5hZ2VyLmdldFJvb3ROb2RlKCkuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBFbnVtZXJhdGlvbiBlID0gZmF2Um9vdEVsZW1lbnQuZ2V0RWxlbWVudHMoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1dTRExfU0VSVklDRV9GT0xERVJfTk9ERSk7Ci0gICAgcmV0dXJuIChGYXZvcml0ZXNGb2xkZXJFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvV1NETEltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9hY3Rpb25zL1dTRExJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmN2NlMzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvV1NETEltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLldTRExGaWxlTmFtZUhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLldTRExQZXJzcGVjdGl2ZTsKLQotcHVibGljIGNsYXNzIFdTRExJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uIGV4dGVuZHMgSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uIHsKLSAgcHJpdmF0ZSBEZWZpbml0aW9uIGRlZmluaXRpb25fOwotICBwcml2YXRlIFN0cmluZyBkZWZhdWx0V1NETEZpbGVOYW1lXzsKLQotICBwdWJsaWMgV1NETEltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgZGVmaW5pdGlvbl8gPSBudWxsOwotICAgIGRlZmF1bHRXU0RMRmlsZU5hbWVfID0gInRlbXAud3NkbCI7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSWQsaW50IHRvb2xJZCxpbnQgdmlld0lkLGludCB2aWV3VG9vbElkKSB7Ci0gICAgcmV0dXJuIEltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZCx0b29sSWQsdmlld0lkLHZpZXdUb29sSWQsIndzZGwvYWN0aW9ucy9XU0RMSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbkpTUC5qc3AiKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHdyaXRlKE91dHB1dFN0cmVhbSBvcykgewotICAgIHJldHVybiB3cml0ZVdTRExEZWZpbml0aW9uKG9zLCBkZWZpbml0aW9uXyk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldERlZmF1bHRGaWxlTmFtZSgpIHsKLSAgICByZXR1cm4gZGVmYXVsdFdTRExGaWxlTmFtZV87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBydW4oKSB7Ci0gICAgaW50IG5vZGVJRDsKLSAgICB0cnkgewotICAgICAgbm9kZUlEID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgfQotICAgIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSBub2RlID0gbm9kZU1hbmFnZXIuZ2V0Tm9kZShub2RlSUQpOwotICAgIFdTRExFbGVtZW50IHdzZGxFbGVtZW50ID0gKFdTRExFbGVtZW50KW5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBkZWZpbml0aW9uXyA9IHdzZGxFbGVtZW50LmdldERlZmluaXRpb24oKTsKLSAgICBkZWZhdWx0V1NETEZpbGVOYW1lXyA9IFdTRExGaWxlTmFtZUhlbHBlci5nZXRXU0RMRmlsZU5hbWUod3NkbEVsZW1lbnQuZ2V0V3NkbFVybCgpKTsKLSAgICByZXR1cm4gKGRlZmluaXRpb25fICE9IG51bGwpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTdGF0dXNDb250ZW50VmFyKCkgewotICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRXU0RMUGVyc3BlY3RpdmUoKS5nZXRTdGF0dXNDb250ZW50VmFyKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRQYWdlKCkgewotICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRXU0RMUGVyc3BlY3RpdmUoKS5nZXRTdGF0dXNDb250ZW50UGFnZSgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9XU0RMSW1wb3J0V1NETFRvV29ya2JlbmNoQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9XU0RMSW1wb3J0V1NETFRvV29ya2JlbmNoQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2NTJjNDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvV1NETEltcG9ydFdTRExUb1dvcmtiZW5jaEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkltcG9ydFRvV29ya2JlbmNoQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuV1NETFBlcnNwZWN0aXZlOwotCi1wdWJsaWMgY2xhc3MgV1NETEltcG9ydFdTRExUb1dvcmtiZW5jaEFjdGlvbiBleHRlbmRzIEltcG9ydFRvV29ya2JlbmNoQWN0aW9uIHsKLSAgcHVibGljIFdTRExJbXBvcnRXU0RMVG9Xb3JrYmVuY2hBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwdWJsaWMgRm9ybVRvb2wgZ2V0U2VsZWN0ZWRGb3JtVG9vbCgpIHsKLSAgICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICAgcmV0dXJuIChGb3JtVG9vbCl3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKTsKLSAgfQotCi0gIHB1YmxpYyBJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24gbmV3SW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uKCkgewotICAgIFdTRExJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uIGFjdGlvbiA9IG5ldyBXU0RMSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgSGFzaHRhYmxlIHRhYmxlID0gYWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIHRhYmxlLnB1dChBY3Rpb25JbnB1dHMuTk9ERUlELCBTdHJpbmcudmFsdWVPZihzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCkpKTsKLSAgICByZXR1cm4gYWN0aW9uOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTdGF0dXNDb250ZW50VmFyKCkgewotICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRXU0RMUGVyc3BlY3RpdmUoKS5nZXRTdGF0dXNDb250ZW50VmFyKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRQYWdlKCkgewotICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRXU0RMUGVyc3BlY3RpdmUoKS5nZXRTdGF0dXNDb250ZW50UGFnZSgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9XU0RMTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvV1NETExhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE5NWVlZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9XU0RMTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkxhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuV1NETFBlcnNwZWN0aXZlOwotCi1wdWJsaWMgY2xhc3MgV1NETExhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24gZXh0ZW5kcyBMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uIHsKLQotICBwdWJsaWMgV1NETExhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwdWJsaWMgRm9ybVRvb2wgZ2V0U2VsZWN0ZWRGb3JtVG9vbCgpIHsKLSAgICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICAgcmV0dXJuIChGb3JtVG9vbCl3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpIHsKLSAgICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIG5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBXU0RMRWxlbWVudCBlbGVtZW50ID0gKFdTRExFbGVtZW50KW5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICByZXR1cm4gbGF1bmNoV2l6YXJkKGVsZW1lbnQuZ2V0V3NkbFVybCgpKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFZhcigpIHsKLSAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0V1NETFBlcnNwZWN0aXZlKCkuZ2V0U3RhdHVzQ29udGVudFZhcigpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTdGF0dXNDb250ZW50UGFnZSgpIHsKLSAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0V1NETFBlcnNwZWN0aXZlKCkuZ2V0U3RhdHVzQ29udGVudFBhZ2UoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2FjdGlvbnMvV1NETFByb3BlcnRpZXNGb3JtQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9XU0RMUHJvcGVydGllc0Zvcm1BY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQ4MDgxZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvYWN0aW9ucy9XU0RMUHJvcGVydGllc0Zvcm1BY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuRm9ybUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgV1NETFByb3BlcnRpZXNGb3JtQWN0aW9uIGV4dGVuZHMgRm9ybUFjdGlvbgotewotICBwcm90ZWN0ZWQgTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlcl87Ci0gIHB1YmxpYyBXU0RMUHJvcGVydGllc0Zvcm1BY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgbmF2aWdhdG9yTWFuYWdlcl8gPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzUGFyc2VkUmVzdWx0cyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nW10ga2V5cyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJOYW1lcygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBTdHJpbmdbXSB2YWx1ZXMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKGtleXNbaV0pOwotICAgICAgaWYgKHZhbHVlcyAhPSBudWxsKQotICAgICAgewotICAgICAgICBpZiAodmFsdWVzLmxlbmd0aCA9PSAxKQotICAgICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChrZXlzW2ldLCB2YWx1ZXNbMF0pOwotICAgICAgICBlbHNlIGlmICh2YWx1ZXMubGVuZ3RoID4gMSkKLSAgICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoa2V5c1tpXSwgdmFsdWVzKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgTm9kZSBnZXRTZWxlY3RlZE5hdmlnYXRvck5vZGUoKQotICB7Ci0gICAgcmV0dXJuIG5hdmlnYXRvck1hbmFnZXJfLmdldFNlbGVjdGVkTm9kZSgpOwotICB9Ci0KLSAgcHVibGljIEZvcm1Ub29sIGdldFNlbGVjdGVkRm9ybVRvb2woKQotICB7Ci0gICAgcmV0dXJuIChGb3JtVG9vbCkoZ2V0U2VsZWN0ZWROYXZpZ2F0b3JOb2RlKCkuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvY29uc3RhbnRzL0JpbmRpbmdUeXBlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2NvbnN0YW50cy9CaW5kaW5nVHlwZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjlkZGEzZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvY29uc3RhbnRzL0JpbmRpbmdUeXBlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgQmluZGluZ1R5cGVzCi17Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVOU1VQUE9SVEVEID0gLTE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNPQVAgPSAwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBIVFRQX0dFVCA9IDE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEhUVFBfUE9TVCA9IDI7Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIVFRQX1ZFUkJfR0VUID0gIkdFVCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhUVFBfVkVSQl9QT1NUID0gIlBPU1QiOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2NvbnN0YW50cy9GcmFnbWVudENvbnN0YW50cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2NvbnN0YW50cy9GcmFnbWVudENvbnN0YW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDJjMjBhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9jb25zdGFudHMvRnJhZ21lbnRDb25zdGFudHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzAzMDUgICAxMTcwMzQgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBzaG91bGQgc3VwcG9ydCBTT0FQIEhlYWRlcnMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHM7Ci0KLXB1YmxpYyBjbGFzcyBGcmFnbWVudENvbnN0YW50cwotewotICAvLyBYU0QgbWluT2NjdXJzIGFuZCBtYXhPY2N1cnMKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVGQVVMVF9NSU5fT0NDVVJTID0gMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVGQVVMVF9NQVhfT0NDVVJTID0gMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVU5CT1VOREVEID0gLTE7Ci0KLSAgLy8gV1NETCBzdHlsZQotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVFlMRV9ET0NVTUVOVCA9IDA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUWUxFX1JQQyA9IDE7Ci0KLSAgLy8gV1NETCBFbmNvZGluZyBzdHlsZXMKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRU5DT0RJTkdfTElURVJBTCA9IDA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVOQ09ESU5HX1NPQVAgPSAxOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFTkNPRElOR19VUkwgPSAyOyAvLyBIVFRQIEdldC9Qb3N0Ci0KLSAgLy8gSURzIHVzZWQgYnkgdGhlIGZyYWdtZW50IG1vZGVsCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEX1NFUEVSQVRPUiA9ICI6OiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElOUFVUX0lEID0gIjo6aW5wdXQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBPVVRQVVRfSUQgPSAiOjpvdXRwdXQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUQUJMRV9JRCA9ICI6OnRhYmxlSUQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGUkFHTUVOVF9JRCA9ICI6OmZyYWdtZW50SUQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FX0FOQ0hPUl9JRCA9ICI6Om5hbWVBbmNob3JJRCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZSQUdNRU5UX1ZJRVdfSUQgPSAiOjpmcmFnbWVudFZpZXdJRCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFhTRF9BVE9NSUNfRU5VTV9JRCA9ICI6OnhzZEF0b21pY0VudW1JRCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFhTRF9BTExfR1JPVVBfSUQgPSAiOjp4c2RBbGxHcm91cElEIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSVF9UT0tFTiA9ICJeIjsKLQotICAvLyBGcmFnbWVudCB2aWV3IElEcwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGUkFHTUVOVF9WSUVXX1NXSVRDSF9GT1JNX1RPX1NPVVJDRSA9ICI6OmZyYWdtZW50Vmlld1N3aXRjaEZvcm1Ub1NvdXJjZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZSQUdNRU5UX1ZJRVdfU1dJVENIX1NPVVJDRV9UT19GT1JNID0gIjo6ZnJhZ21lbnRWaWV3U3dpdGNoU291cmNlVG9Gb3JtIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU09VUkNFX0NPTlRFTlRfSEVBREVSID0gIjo6c291cmNlQ29udGVudEhlYWRlciI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNPVVJDRV9DT05URU5UID0gIjo6c291cmNlQ29udGVudCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNPVVJDRV9DT05URU5UX05BTUVTUEFDRSA9ICI6OnNvdXJjZUNvbnRlbnROUyI7Ci0KLSAgLy8gQWN0aW9uIGlucHV0IGNvbnN0YW50cwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FX0FOQ0hPUiA9ICJuYW1lQW5jaG9yIjsKLQotICAvLyBOYW1lc3BhY2VzIGNvbnRhbnRzCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFVSSV9YU0QgPSAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBVUklfU09BUCA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFVSSV9TT0FQX0VOViA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFVSSV9XU0RMID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVJJX1hTSSA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNPQVBfRU5DX0FSUkFZX1RZUEUgPSAiYXJyYXlUeXBlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNJX1RZUEUgPSAidHlwZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFOQU1FX1BSRUZJWCA9ICJxIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUU5BTUVfTE9DQUxfTkFNRV9BUlJBWV9UWVBFID0gImFycmF5VHlwZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFOQU1FX0xPQ0FMX05BTUVfQVJSQVkgPSAiQXJyYXkiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDT0xPTiA9ICI6IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUU5BTUVfTE9DQUxfTkFNRV9IRUFERVIgPSAiSGVhZGVyIjsgIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRTkFNRV9MT0NBTF9OQU1FX0JPRFkgPSAiQm9keSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFOQU1FX0xPQ0FMX05BTUVfRkFVTFQgPSAiRmF1bHQiOwotCi0gIC8vIExpc3QKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTElTVF9TRVBFUkFUT1IgPSAiICI7Ci0KLSAgLy8gU09BUC1FTkM6QXJyYXkKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTEVGVF9TUVVBUkVfQlJBQ0tFVCA9ICJbIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUklHSFRfU1FVQVJFX0JSQUNLRVQgPSAiXSI7Ci0KLSAgLy8gWFNERGVmYXVsdEZyYWdtZW50Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJPT1RfRUxFTUVOVF9TVEFSVF9UQUcgPSAiPHJvb3Q+IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUk9PVF9FTEVNRU5UX0VORF9UQUcgPSAiPC9yb290PiI7Ci0KLSAgLy8gTmFtZXNwYWNlIFVSSXMuCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX1VSSV9YTUxOUyA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX1VSSV9TT0FQX0VOViA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX1VSSV9TT0FQX0VOQyA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX1VSSV8xOTk5X1NDSEVNQV9YU0kgPSAiaHR0cDovL3d3dy53My5vcmcvMTk5OS9YTUxTY2hlbWEtaW5zdGFuY2UiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOU19VUklfMTk5OV9TQ0hFTUFfWFNEID0gImh0dHA6Ly93d3cudzMub3JnLzE5OTkvWE1MU2NoZW1hIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfVVJJXzIwMDBfU0NIRU1BX1hTSSA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzEwL1hNTFNjaGVtYS1pbnN0YW5jZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX1VSSV8yMDAwX1NDSEVNQV9YU0QgPSAiaHR0cDovL3d3dy53My5vcmcvMjAwMC8xMC9YTUxTY2hlbWEiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOU19VUklfMjAwMV9TQ0hFTUFfWFNJID0gImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfVVJJXzIwMDFfU0NIRU1BX1hTRCA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX1VSSV9DVVJSRU5UX1NDSEVNQV9YU0kgPSBOU19VUklfMjAwMV9TQ0hFTUFfWFNJOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOU19VUklfQ1VSUkVOVF9TQ0hFTUFfWFNEID0gTlNfVVJJXzIwMDFfU0NIRU1BX1hTRDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfVVJJX1hNTF9TT0FQID0gImh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX1VSSV9YTUxfU09BUF9ERVBMT1lNRU5UID0gImh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcC9kZXBsb3ltZW50IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfVVJJX0xJVEVSQUxfWE1MID0gImh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcC9saXRlcmFseG1sIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfVVJJX1hNSV9FTkMgPSAiaHR0cDovL3d3dy5pYm0uY29tL25hbWVzcGFjZXMveG1pIjsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvY29uc3RhbnRzL1dTRExBY3Rpb25JbnB1dHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9jb25zdGFudHMvV1NETEFjdGlvbklucHV0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzU0YjhkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9jb25zdGFudHMvV1NETEFjdGlvbklucHV0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDMwNSAgIDExNzAzNCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHNob3VsZCBzdXBwb3J0IFNPQVAgSGVhZGVycwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50czsKLQotcHVibGljIGNsYXNzIFdTRExBY3Rpb25JbnB1dHMKLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRlJBTUVTRVRfQ09MU19QRVJTUEVDVElWRV9DT05URU5UID0gImZyYW1lc2V0Q29sc1BlcnNwZWN0aXZlQ29udGVudCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIgPSAiZnJhbWVzZXRSb3dzQWN0aW9uc0NvbnRhaW5lciI7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VTU0lPTl9JRCA9ICJzZXNzaW9uSUQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGUkFHTUVOVF9JRCA9ICJmcmFnbWVudElEIjsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTT0FQX0VOVkVMT1BFX1RZUEUgPSAic29hcEVudmVsb3BlVHlwZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNPQVBfRU5WRUxPUEVfVFlQRV9SRVFVRVNUID0gMDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU09BUF9FTlZFTE9QRV9UWVBFX1JFU1BPTlNFID0gMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU09BUF9SRVNQT05TRV9DQUNIRUQgPSAic29hcFJlc3BvbnNlQ2FjaGVkIjsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTVUJNSVNTSU9OX0FDVElPTiA9ICJzdWJtaXNzaW9uQWN0aW9uIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1VCTUlTU0lPTl9BQ1RJT05fRk9STSA9ICJzdWJtaXNzaW9uQWN0aW9uRm9ybSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNVQk1JU1NJT05fQUNUSU9OX0JST1dTRV9GSUxFX0hFQURFUiA9ICJzdWJtaXNzaW9uQWN0aW9uQnJvd3NlRmlsZUhlYWRlciI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNVQk1JU1NJT05fQUNUSU9OX0JST1dTRV9GSUxFID0gInN1Ym1pc3Npb25BY3Rpb25Ccm93c2VGaWxlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1VCTUlTU0lPTl9BQ1RJT05fU0FWRV9BU19IRUFERVIgPSAic3VibWlzc2lvbkFjdGlvblNhdmVBc0hlYWRlciI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNVQk1JU1NJT05fQUNUSU9OX1NBVkVfQVMgPSAic3VibWlzc2lvbkFjdGlvblNhdmVBcyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNFTEVDVEVEX0ZJTEVfSEVBREVSID0gInNlbGVjdGVkRmlsZUhlYWRlciI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNFTEVDVEVEX0ZJTEUgPSAic2VsZWN0ZWRGaWxlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgT1BFUkFUSU9OX0VMRU1FTlQgPSAib3BlcmF0aW9uRWxlbWVudCI7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRU5EX1BPSU5UID0gIjo6ZW5kUG9pbnQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIVFRQX0JBU0lDX0FVVEhfVVNFUk5BTUUgPSAiaHR0cEJhc2ljQXV0aFVzZXJuYW1lIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSFRUUF9CQVNJQ19BVVRIX1BBU1NXT1JEID0gImh0dHBCYXNpY0F1dGhQYXNzd29yZCI7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvY29uc3RhbnRzL1dTRExGcmFtZU5hbWVzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvY29uc3RhbnRzL1dTRExGcmFtZU5hbWVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjOTYwYzcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2NvbnN0YW50cy9XU0RMRnJhbWVOYW1lcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgV1NETEZyYW1lTmFtZXMKLXsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgV1NETF9OQVZJR0FUT1JfQ09OVEFJTkVSID0gIndzZGxfbmF2aWdhdG9yX2NvbnRhaW5lciI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFdTRExfTkFWSUdBVE9SX1RPT0xCQVIgPSAid3NkbF9uYXZpZ2F0b3JfdG9vbGJhciI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFdTRExfTkFWSUdBVE9SX0NPTlRFTlQgPSAid3NkbF9uYXZpZ2F0b3JfY29udGVudCI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFdTRExfQUNUSU9OU19DT05UQUlORVIgPSAid3NkbF9hY3Rpb25zX2NvbnRhaW5lciI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFdTRExfUFJPUEVSVElFU19DT05UQUlORVIgPSAid3NkbF9wcm9wZXJ0aWVzX2NvbnRhaW5lciI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFdTRExfUFJPUEVSVElFU19UT09MQkFSID0gIndzZGxfcHJvcGVydGllc190b29sYmFyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgV1NETF9QUk9QRVJUSUVTX0NPTlRFTlQgPSAid3NkbF9wcm9wZXJ0aWVzX2NvbnRlbnQiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBXU0RMX1NUQVRVU19DT05UQUlORVIgPSAid3NkbF9zdGF0dXNfY29udGFpbmVyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgV1NETF9TVEFUVVNfVE9PTEJBUiA9ICJ3c2RsX3N0YXR1c190b29sYmFyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgV1NETF9TVEFUVVNfQ09OVEVOVCA9ICJ3c2RsX3N0YXR1c19jb250ZW50IjsKLQotICAvLyBYU0QgSW5mbyBEaWFsb2cKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgWFNEX0lORk9fVE9PTEJBUiA9ICJ4c2RfaW5mb190b29sYmFyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgWFNEX0lORk9fQ09OVEVOVCA9ICJ4c2RfaW5mb19jb250ZW50IjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9jb25zdGFudHMvV1NETE1vZGVsQ29uc3RhbnRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvY29uc3RhbnRzL1dTRExNb2RlbENvbnN0YW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOWI5ZmJhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9jb25zdGFudHMvV1NETE1vZGVsQ29uc3RhbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMzA1ICAgMTE3MDM0IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXZWIgU2VydmljZXMgRXhwbG9yZXIgc2hvdWxkIHN1cHBvcnQgU09BUCBIZWFkZXJzCi0gKiAyMDA3MDQxMyAgIDE3NjQ5MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFOiBNYWtlIG1lc3NhZ2UvdHJhbnNwb3J0IHN0YWNrIHBsdWdnYWJsZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgV1NETE1vZGVsQ29uc3RhbnRzCi17Ci0gICAgLy8gUmVsYXRpb24KLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBSRUxfV1NETCA9ICJyZWxXU0RMIjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBSRUxfV1NETF9TRVJWSUNFID0gInJlbFdTRExTZXJ2aWNlIjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBSRUxfV1NETF9CSU5ESU5HID0gInJlbFdTRExCaW5kaW5nIjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBSRUxfV1NETF9PUEVSQVRJT04gPSAicmVsV1NETE9wZXJhdGlvbiI7Ci0KLSAgICAvLyBEb2N1bWVudGF0aW9uCi0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPUF9ET0NVTUVOVEFUSU9OID0gInByb3BEb2N1bWVudGF0aW9uIjsKLQotICAgIC8vIFNvdXJjZSBDb250ZW50Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPUF9TT1VSQ0VfQ09OVEVOVF9IRUFERVIgPSAicHJvcFNvdXJjZUNvbnRlbnRIZWFkZXIiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBST1BfU09VUkNFX0NPTlRFTlQgPSAicHJvcFNvdXJjZUNvbnRlbnQiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBST1BfU09VUkNFX0NPTlRFTlRfTkFNRVNQQUNFID0gInByb3BTb3VyY2VDb250ZW50TlMiOwotICAgIAotICAgIC8vIFRyYW5zcG9ydAotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBST1BfU09BUF9SRVFVRVNUX1RNUCA9ICJwcm9wU09BUFJlcXVlc3RUbXAiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBST1BfU09BUF9SRVFVRVNUID0gInByb3BTT0FQUmVxdWVzdCI7ICAgIAotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBST1BfU09BUF9SRVNQT05TRSA9ICJwcm9wU09BUFJlc3BvbnNlIjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9kYXRhbW9kZWwvRW5kcG9pbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9kYXRhbW9kZWwvRW5kcG9pbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGVkN2QxNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZGF0YW1vZGVsL0VuZHBvaW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsOwotCi1wdWJsaWMgY2xhc3MgRW5kcG9pbnQKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgZW5kcG9pbnQ7Ci0gIHByaXZhdGUgYm9vbGVhbiByZXF1aXJlSFRUUEJhc2ljQXV0aDsKLSAgcHJpdmF0ZSBTdHJpbmcgaHR0cEJhc2ljQXV0aFVzZXJuYW1lOwotICBwcml2YXRlIFN0cmluZyBodHRwQmFzaWNBdXRoUGFzc3dvcmQ7Ci0gIAotICBwdWJsaWMgRW5kcG9pbnQoKQotICB7Ci0gICAgZW5kcG9pbnQgPSBudWxsOwotICAgIHJlcXVpcmVIVFRQQmFzaWNBdXRoID0gZmFsc2U7Ci0gICAgaHR0cEJhc2ljQXV0aFVzZXJuYW1lID0gbnVsbDsKLSAgICBodHRwQmFzaWNBdXRoUGFzc3dvcmQgPSBudWxsOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRFbmRwb2ludCgpCi0gIHsKLSAgICByZXR1cm4gZW5kcG9pbnQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEVuZHBvaW50KFN0cmluZyBlbmRwb2ludCkKLSAgewotICAgIHRoaXMuZW5kcG9pbnQgPSBlbmRwb2ludDsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gaXNSZXF1aXJlSFRUUEJhc2ljQXV0aCgpCi0gIHsKLSAgICByZXR1cm4gcmVxdWlyZUhUVFBCYXNpY0F1dGg7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFJlcXVpcmVIVFRQQmFzaWNBdXRoKGJvb2xlYW4gcmVxdWlyZUhUVFBCYXNpY0F1dGgpCi0gIHsKLSAgICB0aGlzLnJlcXVpcmVIVFRQQmFzaWNBdXRoID0gcmVxdWlyZUhUVFBCYXNpY0F1dGg7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SHR0cEJhc2ljQXV0aFVzZXJuYW1lKCkKLSAgewotICAgIHJldHVybiBodHRwQmFzaWNBdXRoVXNlcm5hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEh0dHBCYXNpY0F1dGhVc2VybmFtZShTdHJpbmcgaHR0cEJhc2ljQXV0aFVzZXJuYW1lKQotICB7Ci0gICAgdGhpcy5odHRwQmFzaWNBdXRoVXNlcm5hbWUgPSBodHRwQmFzaWNBdXRoVXNlcm5hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SHR0cEJhc2ljQXV0aFBhc3N3b3JkKCkKLSAgewotICAgIHJldHVybiBodHRwQmFzaWNBdXRoUGFzc3dvcmQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEh0dHBCYXNpY0F1dGhQYXNzd29yZChTdHJpbmcgaHR0cEJhc2ljQXV0aFBhc3N3b3JkKQotICB7Ci0gICAgdGhpcy5odHRwQmFzaWNBdXRoUGFzc3dvcmQgPSBodHRwQmFzaWNBdXRoUGFzc3dvcmQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9kYXRhbW9kZWwvV1NETEJpbmRpbmdFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZGF0YW1vZGVsL1dTRExCaW5kaW5nRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNTk3ODg4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9kYXRhbW9kZWwvV1NETEJpbmRpbmdFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5JbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLk91dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZzsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Nb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuQmluZGluZ1R5cGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5XU0RMTW9kZWxDb25zdGFudHM7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMQmluZGluZ0VsZW1lbnQgZXh0ZW5kcyBXU0RMQ29tbW9uRWxlbWVudAotewotICBwcml2YXRlIGludCBiaW5kaW5nVHlwZV87Ci0gIHByaXZhdGUgQmluZGluZyBiaW5kaW5nXzsKLSAgcHJpdmF0ZSBFeHRlbnNpYmlsaXR5RWxlbWVudCBiaW5kaW5nRXh0ZW5zaWJpbGl0eUVsZW1lbnRfOwotICBwcml2YXRlIFZlY3RvciBlbmRQb2ludHNfOwotCi0gIHByaXZhdGUgZmluYWwgdm9pZCBzZXRCaW5kaW5nRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKQotICB7Ci0gICAgYmluZGluZ0V4dGVuc2liaWxpdHlFbGVtZW50XyA9IG51bGw7Ci0gICAgYmluZGluZ1R5cGVfID0gQmluZGluZ1R5cGVzLlVOU1VQUE9SVEVEOwotICAgIExpc3QgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzID0gYmluZGluZ18uZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gZXh0ZW5zaWJpbGl0eUVsZW1lbnRzLml0ZXJhdG9yKCk7aS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGUgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpaS5uZXh0KCk7Ci0gICAgICBpZiAoZSBpbnN0YW5jZW9mIEhUVFBCaW5kaW5nKQotICAgICAgewotICAgICAgICBIVFRQQmluZGluZyBiaW5kaW5nID0gKEhUVFBCaW5kaW5nKWU7Ci0gICAgICAgIFN0cmluZyB2ZXJiID0gYmluZGluZy5nZXRWZXJiKCk7Ci0gICAgICAgIGlmIChCaW5kaW5nVHlwZXMuSFRUUF9WRVJCX0dFVC5lcXVhbHModmVyYikpCi0gICAgICAgICAgYmluZGluZ1R5cGVfID0gQmluZGluZ1R5cGVzLkhUVFBfR0VUOwotICAgICAgICBlbHNlIGlmIChCaW5kaW5nVHlwZXMuSFRUUF9WRVJCX1BPU1QuZXF1YWxzKHZlcmIpKQotICAgICAgICAgIGJpbmRpbmdUeXBlXyA9IEJpbmRpbmdUeXBlcy5IVFRQX1BPU1Q7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChlIGluc3RhbmNlb2YgU09BUEJpbmRpbmcpCi0gICAgICAgIGJpbmRpbmdUeXBlXyA9IEJpbmRpbmdUeXBlcy5TT0FQOwotICAgICAgaWYgKGJpbmRpbmdUeXBlXyAhPSBCaW5kaW5nVHlwZXMuVU5TVVBQT1JURUQpCi0gICAgICB7Ci0gICAgICAgIGJpbmRpbmdFeHRlbnNpYmlsaXR5RWxlbWVudF8gPSBlOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBXU0RMQmluZGluZ0VsZW1lbnQoU3RyaW5nIG5hbWUsIE1vZGVsIG1vZGVsLCBCaW5kaW5nIGJpbmRpbmcpCi0gIHsKLSAgICBzdXBlcihuYW1lLCBtb2RlbCk7Ci0gICAgc2V0QmluZGluZyhiaW5kaW5nKTsKLSAgICBlbmRQb2ludHNfID0gbmV3IFZlY3RvcigpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0QmluZGluZyhCaW5kaW5nIGJpbmRpbmcpIHsKLSAgICBiaW5kaW5nXyA9IGJpbmRpbmc7Ci0gICAgc2V0RG9jdW1lbnRhdGlvbihiaW5kaW5nLmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotICAgIHNldEJpbmRpbmdFeHRlbnNpYmlsaXR5RWxlbWVudCgpOwotICB9Ci0KLSAgcHVibGljIEJpbmRpbmcgZ2V0QmluZGluZygpIHsKLSAgICByZXR1cm4gYmluZGluZ187Ci0gIH0KLSAgCi0gIHB1YmxpYyBFeHRlbnNpYmlsaXR5RWxlbWVudCBnZXRCaW5kaW5nRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIGJpbmRpbmdFeHRlbnNpYmlsaXR5RWxlbWVudF87Ci0gIH0KLSAgCi0gIHB1YmxpYyBpbnQgZ2V0QmluZGluZ1R5cGUoKQotICB7Ci0gICAgcmV0dXJuIGJpbmRpbmdUeXBlXzsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCByZXNldEVuZFBvaW50cygpCi0gIHsKLSAgICBXU0RMU2VydmljZUVsZW1lbnQgc2VydmljZUVsZW1lbnQgPSAoV1NETFNlcnZpY2VFbGVtZW50KWdldFBhcmVudEVsZW1lbnQoKTsKLSAgICBTdHJpbmcgZml4ZWRFbmRwb2ludFN0cmluZyA9IHNlcnZpY2VFbGVtZW50LmdldEFkZHJlc3NMb2NhdGlvbihiaW5kaW5nXyk7Ci0gICAgRW5kcG9pbnQgZml4ZWRFbmRwb2ludCA9IGdldEVuZHBvaW50KGZpeGVkRW5kcG9pbnRTdHJpbmcpOwotICAgIGlmIChmaXhlZEVuZHBvaW50ID09IG51bGwpCi0gICAgewotICAgICAgZml4ZWRFbmRwb2ludCA9IG5ldyBFbmRwb2ludCgpOwotICAgICAgZml4ZWRFbmRwb2ludC5zZXRFbmRwb2ludChmaXhlZEVuZHBvaW50U3RyaW5nKTsKLSAgICB9Ci0gICAgZW5kUG9pbnRzXy5jbGVhcigpOwotICAgIGVuZFBvaW50c18uYWRkKGZpeGVkRW5kcG9pbnQpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZ1tdIGdldEVuZFBvaW50cygpCi0gIHsKLSAgICBTdHJpbmdbXSBlbmRQb2ludHMgPSBuZXcgU3RyaW5nW2VuZFBvaW50c18uc2l6ZSgpXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGVuZFBvaW50cy5sZW5ndGg7IGkrKykKLSAgICAgIGVuZFBvaW50c1tpXSA9ICgoRW5kcG9pbnQpZW5kUG9pbnRzXy5nZXQoaSkpLmdldEVuZHBvaW50KCk7Ci0gICAgcmV0dXJuIGVuZFBvaW50czsKLSAgfQotICAKLSAgcHVibGljIEVuZHBvaW50IGdldEVuZHBvaW50KFN0cmluZyBlbmRwb2ludFN0cmluZykKLSAgewotICAgIGlmIChlbmRwb2ludFN0cmluZyAhPSBudWxsICYmIGVuZHBvaW50U3RyaW5nLmxlbmd0aCgpID4gMCkKLSAgICB7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gZW5kUG9pbnRzXy5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBFbmRwb2ludCBlbmRwb2ludCA9IChFbmRwb2ludClpdC5uZXh0KCk7Ci0gICAgICAgIGlmIChlbmRwb2ludFN0cmluZy5lcXVhbHMoZW5kcG9pbnQuZ2V0RW5kcG9pbnQoKSkpCi0gICAgICAgICAgcmV0dXJuIGVuZHBvaW50OwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEVuZFBvaW50cyhTdHJpbmdbXSBlbmRwb2ludHMpCi0gIHsKLSAgICBWZWN0b3IgZW5kcG9pbnRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbmRwb2ludHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgRW5kcG9pbnQgZW5kcG9pbnQgPSBnZXRFbmRwb2ludChlbmRwb2ludHNbaV0pOwotICAgICAgaWYgKGVuZHBvaW50ID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGVuZHBvaW50ID0gbmV3IEVuZHBvaW50KCk7Ci0gICAgICAgIGVuZHBvaW50LnNldEVuZHBvaW50KGVuZHBvaW50c1tpXSk7Ci0gICAgICB9Ci0gICAgICBlbmRwb2ludFZlY3Rvci5hZGQoZW5kcG9pbnQpOwotICAgIH0KLSAgICByZXNldEVuZFBvaW50cygpOwotICAgIGVuZFBvaW50c18uYWRkQWxsKGVuZHBvaW50VmVjdG9yKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZEVuZFBvaW50KFN0cmluZyBlbmRwb2ludFN0cmluZykKLSAgewotICAgIGlmIChlbmRwb2ludFN0cmluZyAhPSBudWxsICYmIGVuZHBvaW50U3RyaW5nLmxlbmd0aCgpID4gMCkKLSAgICB7Ci0gICAgICBFbmRwb2ludCBlbmRwb2ludCA9IG5ldyBFbmRwb2ludCgpOwotICAgICAgZW5kcG9pbnQuc2V0RW5kcG9pbnQoZW5kcG9pbnRTdHJpbmcpOwotICAgICAgZW5kUG9pbnRzXy5hZGQoZW5kcG9pbnQpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlbW92ZUVuZFBvaW50KFN0cmluZyBlbmRwb2ludFN0cmluZykKLSAgewotICAgIGlmIChlbmRwb2ludFN0cmluZyAhPSBudWxsICYmIGVuZHBvaW50U3RyaW5nLmxlbmd0aCgpID4gMCkKLSAgICB7Ci0gICAgICBXU0RMU2VydmljZUVsZW1lbnQgc2VydmljZUVsZW1lbnQgPSAoV1NETFNlcnZpY2VFbGVtZW50KWdldFBhcmVudEVsZW1lbnQoKTsKLSAgICAgIFN0cmluZyBmaXhlZEVuZHBvaW50U3RyaW5nID0gc2VydmljZUVsZW1lbnQuZ2V0QWRkcmVzc0xvY2F0aW9uKGJpbmRpbmdfKTsKLSAgICAgIGlmIChmaXhlZEVuZHBvaW50U3RyaW5nID09IG51bGwgfHwgIWZpeGVkRW5kcG9pbnRTdHJpbmcuZXF1YWxzKGVuZHBvaW50U3RyaW5nKSkKLSAgICAgIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbmRQb2ludHNfLnNpemUoKTsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKGVuZHBvaW50U3RyaW5nLmVxdWFscygoKEVuZHBvaW50KWVuZFBvaW50c18uZ2V0KGkpKS5nZXRFbmRwb2ludCgpKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBlbmRQb2ludHNfLnJlbW92ZShpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIGJ1aWxkTW9kZWwoKSB7Ci0gICAgcmVzZXRFbmRQb2ludHMoKTsKLSAgICBpZiAoYmluZGluZ18gIT0gbnVsbCkgewotICAgICAgUG9ydFR5cGUgcHQgPSBiaW5kaW5nXy5nZXRQb3J0VHlwZSgpOwotICAgICAgaWYgKHB0ICE9IG51bGwpIHsKLSAgICAgICAgTGlzdCBvcGVyYXRpb25zID0gcHQuZ2V0T3BlcmF0aW9ucygpOwotICAgICAgICBIYXNoTWFwIG9wZXJhdGlvbnNNYXAgPSBuZXcgSGFzaE1hcCgpOwotICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gb3BlcmF0aW9ucy5pdGVyYXRvcigpO2l0Lmhhc05leHQoKTspIHsKLSAgICAgICAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gKE9wZXJhdGlvbilpdC5uZXh0KCk7Ci0gICAgICAgICAgb3BlcmF0aW9uc01hcC5wdXQoY3JlYXRlT3BlcmF0aW9uVW5pcXVlTmFtZShvcGVyYXRpb24pLCBvcGVyYXRpb24pOwotICAgICAgICB9Ci0gICAgICAgIFdTRExPcGVyYXRpb25FbGVtZW50W10gd3NkbE9wZXJhdGlvbkVsZW1lbnRzID0gbmV3IFdTRExPcGVyYXRpb25FbGVtZW50W2dldE51bWJlck9mRWxlbWVudHMoV1NETE1vZGVsQ29uc3RhbnRzLlJFTF9XU0RMX09QRVJBVElPTildOwotICAgICAgICBFbnVtZXJhdGlvbiBlID0gZ2V0RWxlbWVudHMoV1NETE1vZGVsQ29uc3RhbnRzLlJFTF9XU0RMX09QRVJBVElPTik7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgd3NkbE9wZXJhdGlvbkVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgd3NkbE9wZXJhdGlvbkVsZW1lbnRzW2ldID0gKFdTRExPcGVyYXRpb25FbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHdzZGxPcGVyYXRpb25FbGVtZW50cy5sZW5ndGg7IGorKykgewotICAgICAgICAgIFN0cmluZyBvcGVyYXRpb25OYW1lID0gY3JlYXRlT3BlcmF0aW9uVW5pcXVlTmFtZSh3c2RsT3BlcmF0aW9uRWxlbWVudHNbal0uZ2V0T3BlcmF0aW9uKCkpOwotICAgICAgICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSAoT3BlcmF0aW9uKW9wZXJhdGlvbnNNYXAuZ2V0KG9wZXJhdGlvbk5hbWUpOwotICAgICAgICAgIGlmIChvcGVyYXRpb24gIT0gbnVsbCkgewotICAgICAgICAgICAgb3BlcmF0aW9uc01hcC5yZW1vdmUob3BlcmF0aW9uTmFtZSk7Ci0gICAgICAgICAgICB3c2RsT3BlcmF0aW9uRWxlbWVudHNbal0uc2V0T3BlcmF0aW9uKHRoaXMsIG9wZXJhdGlvbik7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRpc2Nvbm5lY3Qod3NkbE9wZXJhdGlvbkVsZW1lbnRzW2pdLCBXU0RMTW9kZWxDb25zdGFudHMuUkVMX1dTRExfT1BFUkFUSU9OKTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gb3BlcmF0aW9uc01hcC52YWx1ZXMoKS5pdGVyYXRvcigpO2l0Lmhhc05leHQoKTspIHsKLSAgICAgICAgICBPcGVyYXRpb24gb3BlciA9IChPcGVyYXRpb24paXQubmV4dCgpOwotICAgICAgICAgIFdTRExPcGVyYXRpb25FbGVtZW50IHdzZGxPcGVyYXRpb25FbGVtZW50ID0gbmV3IFdTRExPcGVyYXRpb25FbGVtZW50KG9wZXIuZ2V0TmFtZSgpLCB0aGlzLCBvcGVyKTsKLSAgICAgICAgICBjb25uZWN0KHdzZGxPcGVyYXRpb25FbGVtZW50LFdTRExNb2RlbENvbnN0YW50cy5SRUxfV1NETF9PUEVSQVRJT04sTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIGNyZWF0ZU9wZXJhdGlvblVuaXF1ZU5hbWUoT3BlcmF0aW9uIG9wZXJhdGlvbikKLSAgewotICAgIFN0cmluZ0J1ZmZlciBuYW1lID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIG5hbWUuYXBwZW5kKG9wZXJhdGlvbi5nZXROYW1lKCkpOwotICAgIElucHV0IGlucHV0TXNnID0gb3BlcmF0aW9uLmdldElucHV0KCk7Ci0gICAgaWYgKGlucHV0TXNnICE9IG51bGwpCi0gICAgewotICAgICAgUU5hbWUgcW5hbWUgPSBpbnB1dE1zZy5nZXRNZXNzYWdlKCkuZ2V0UU5hbWUoKTsKLSAgICAgIG5hbWUuYXBwZW5kKHFuYW1lLmdldE5hbWVzcGFjZVVSSSgpKTsKLSAgICAgIG5hbWUuYXBwZW5kKCI6Iik7Ci0gICAgICBuYW1lLmFwcGVuZChxbmFtZS5nZXRMb2NhbFBhcnQoKSk7Ci0gICAgfQotICAgIE91dHB1dCBvdXRwdXRNc2cgPSBvcGVyYXRpb24uZ2V0T3V0cHV0KCk7Ci0gICAgaWYgKG91dHB1dE1zZyAhPSBudWxsKQotICAgIHsKLSAgICAgIFFOYW1lIHFuYW1lID0gb3V0cHV0TXNnLmdldE1lc3NhZ2UoKS5nZXRRTmFtZSgpOwotICAgICAgbmFtZS5hcHBlbmQocW5hbWUuZ2V0TmFtZXNwYWNlVVJJKCkpOwotICAgICAgbmFtZS5hcHBlbmQoIjoiKTsKLSAgICAgIG5hbWUuYXBwZW5kKHFuYW1lLmdldExvY2FsUGFydCgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIG5hbWUudG9TdHJpbmcoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2RhdGFtb2RlbC9XU0RMQ29tbW9uRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2RhdGFtb2RlbC9XU0RMQ29tbW9uRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNThjYTNiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9kYXRhbW9kZWwvV1NETENvbW1vbkVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWw7Ci0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Nb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlhNTFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5XU0RMTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnRGcmFnbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi1wdWJsaWMgY2xhc3MgV1NETENvbW1vbkVsZW1lbnQgZXh0ZW5kcyBUcmVlRWxlbWVudAotewotCi0gIHB1YmxpYyBXU0RMQ29tbW9uRWxlbWVudChTdHJpbmcgbmFtZSwgTW9kZWwgbW9kZWwpIHsKLSAgICBzdXBlcihuYW1lLCBtb2RlbCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgVHJlZUVsZW1lbnQgZ2V0UGFyZW50RWxlbWVudCgpIHsKLSAgICAgIHJldHVybiAoVHJlZUVsZW1lbnQpZ2V0RWxlbWVudHMoTW9kZWxDb25zdGFudHMuUkVMX09XTkVSKS5uZXh0RWxlbWVudCgpOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBzZXREb2N1bWVudGF0aW9uKE5vZGUgZG9jdW1lbnRhdGlvbkVsZW1lbnQpCi0gIHsKLSAgICBTdHJpbmcgZG9jdW1lbnRhdGlvbiA9ICIiOwotICAgIHRyeQotICAgIHsKLSAgICAgIGlmIChkb2N1bWVudGF0aW9uRWxlbWVudCAhPSBudWxsKQotICAgICAgewotICAgICAgICBEb2N1bWVudCBkb2MgPSBYTUxVdGlscy5jcmVhdGVOZXdEb2N1bWVudChudWxsKTsKLSAgICAgICAgRG9jdW1lbnRGcmFnbWVudCBkZiA9IGRvYy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Ci0gICAgICAgIE5vZGVMaXN0IGRvY3VtZW50YXRpb25Ob2RlcyA9IGRvY3VtZW50YXRpb25FbGVtZW50LmdldENoaWxkTm9kZXMoKTsKLSAgICAgICAgZm9yIChpbnQgaT0wO2k8ZG9jdW1lbnRhdGlvbk5vZGVzLmdldExlbmd0aCgpO2krKykKLSAgICAgICAgICBkZi5hcHBlbmRDaGlsZChkb2MuaW1wb3J0Tm9kZShkb2N1bWVudGF0aW9uTm9kZXMuaXRlbShpKSx0cnVlKSk7Ci0gICAgICAgIGRvY3VtZW50YXRpb24gPSBYTUxVdGlscy5zZXJpYWxpemUoZGYsdHJ1ZSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGUpCi0gICAgewotICAgIH0KLSAgICBzZXRQcm9wZXJ0eUFzU3RyaW5nKFdTRExNb2RlbENvbnN0YW50cy5QUk9QX0RPQ1VNRU5UQVRJT04sZG9jdW1lbnRhdGlvbik7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9kYXRhbW9kZWwvV1NETEVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9kYXRhbW9kZWwvV1NETEVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzUzMGE0My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZGF0YW1vZGVsL1dTRExFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNzE3ICAgMTQ2NzA3IG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbgotICogMjAwNzAxMjQgICAxNjc0ODcgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSSTsKLWltcG9ydCBqYXZhLm5ldC5VUklTeW50YXhFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdEl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkltcG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgamF2YXgud3NkbC5UeXBlczsKLWltcG9ydCBqYXZheC53c2RsLldTRExFeGNlcHRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VTZXRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIuaW50ZXJuYWwudXRpbC5VUklFbmNvZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5jb21tb24uSFRUUFV0aWxpdHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLk1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuRnJhZ21lbnRDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLldTRExNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmRpc2NvdmVyeS5OZXRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmRpc2NvdmVyeS5XZWJTZXJ2aWNlc1BhcnNlckV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRERpYWdub3N0aWM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRERpYWdub3N0aWNTZXZlcml0eTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWFEaXJlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLmltcGwuWFNEU2NoZW1hSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QudXRpbC5YU0RQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLnV0aWwuWFNEUmVzb3VyY2VGYWN0b3J5SW1wbDsKLQotcHVibGljIGNsYXNzIFdTRExFbGVtZW50IGV4dGVuZHMgV1NETENvbW1vbkVsZW1lbnQKLXsKLQotICBwcml2YXRlIFN0cmluZyB3c2RsVXJsXzsKLSAgcHJpdmF0ZSBEZWZpbml0aW9uIGRlZmluaXRpb25fOwotICBwcml2YXRlIFZlY3RvciBzY2hlbWFMaXN0XzsKLSAgcHJpdmF0ZSBWZWN0b3Igc2NoZW1hVVJJXzsKLQotICBwcml2YXRlIHN0YXRpYyBWZWN0b3IgdzNTY2hlbWFRTmFtZUxpc3RfOwotICBwcml2YXRlIHN0YXRpYyBWZWN0b3IgY29uc3RhbnRTY2hlbWFMaXN0XzsKLSAgCi0gIC8vQSBSZXNvdXJjZVNldCBmb3IgYWxsIHNjaGVtYXMgaW4gdGhpcyBXU0RMCi0gIHByaXZhdGUgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQ7Ci0KLSAgc3RhdGljCi0gIHsKLSAgICAvLyB3MyBzY2hlbWEgVVJJIGxpc3Q6Ci0gICAgLy8gaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEKLSAgICAvLyBodHRwOi8vd3d3LnczLm9yZy8yMDAwLzEwL1hNTFNjaGVtYQotICAgIC8vIGh0dHA6Ly93d3cudzMub3JnLzE5OTkvWE1MU2NoZW1hCi0gICAgdzNTY2hlbWFRTmFtZUxpc3RfID0gbmV3IFZlY3RvcigpOwotICAgIHczU2NoZW1hUU5hbWVMaXN0Xy5hZGRFbGVtZW50KG5ldyBRTmFtZShGcmFnbWVudENvbnN0YW50cy5OU19VUklfQ1VSUkVOVF9TQ0hFTUFfWFNELCJzY2hlbWEiKSk7Ci0gICAgdzNTY2hlbWFRTmFtZUxpc3RfLmFkZEVsZW1lbnQobmV3IFFOYW1lKEZyYWdtZW50Q29uc3RhbnRzLk5TX1VSSV8yMDAwX1NDSEVNQV9YU0QsInNjaGVtYSIpKTsKLSAgICB3M1NjaGVtYVFOYW1lTGlzdF8uYWRkRWxlbWVudChuZXcgUU5hbWUoRnJhZ21lbnRDb25zdGFudHMuTlNfVVJJXzE5OTlfU0NIRU1BX1hTRCwic2NoZW1hIikpOwotCi0gICAgLy8gQ29uc3RhbnQgc2NoZW1hIFVSSSBsaXN0OgotICAgIC8vIGh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hCi0gICAgLy8gaHR0cDovL3d3dy53My5vcmcvMjAwMC8xMC9YTUxTY2hlbWEKLSAgICAvLyBodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hNTFNjaGVtYQotICAgIC8vIGh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvCi0gICAgLy8gaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8KLSAgICBjb25zdGFudFNjaGVtYUxpc3RfID0gbmV3IFZlY3RvcigpOwotICAgIGNvbnN0YW50U2NoZW1hTGlzdF8uYWRkRWxlbWVudChYU0RTY2hlbWFJbXBsLmdldFNjaGVtYUZvclNjaGVtYShGcmFnbWVudENvbnN0YW50cy5OU19VUklfQ1VSUkVOVF9TQ0hFTUFfWFNEKSk7Ci0gICAgY29uc3RhbnRTY2hlbWFMaXN0Xy5hZGRFbGVtZW50KFhTRFNjaGVtYUltcGwuZ2V0U2NoZW1hRm9yU2NoZW1hKEZyYWdtZW50Q29uc3RhbnRzLk5TX1VSSV8yMDAwX1NDSEVNQV9YU0QpKTsKLSAgICBjb25zdGFudFNjaGVtYUxpc3RfLmFkZEVsZW1lbnQoWFNEU2NoZW1hSW1wbC5nZXRTY2hlbWFGb3JTY2hlbWEoRnJhZ21lbnRDb25zdGFudHMuTlNfVVJJXzE5OTlfU0NIRU1BX1hTRCkpOwotICAgIGNvbnN0YW50U2NoZW1hTGlzdF8uYWRkRWxlbWVudChYU0RTY2hlbWFJbXBsLmdldFNjaGVtYUZvclNjaGVtYShGcmFnbWVudENvbnN0YW50cy5OU19VUklfU09BUF9FTkMpKTsKLSAgICBjb25zdGFudFNjaGVtYUxpc3RfLmFkZEVsZW1lbnQoWFNEU2NoZW1hSW1wbC5nZXRTY2hlbWFGb3JTY2hlbWEoRnJhZ21lbnRDb25zdGFudHMuVVJJX1dTREwpKTsKLSAgfQotCi0gIHB1YmxpYyBXU0RMRWxlbWVudChTdHJpbmcgbmFtZSwgTW9kZWwgbW9kZWwsIFN0cmluZyB3c2RsVXJsKQotICB7Ci0gICAgc3VwZXIobmFtZSwgbW9kZWwpOwotICAgIHNldFdzZGxVcmwod3NkbFVybCk7Ci0gICAgZGVmaW5pdGlvbl8gPSBudWxsOwotICAgIHNjaGVtYUxpc3RfID0gbmV3IFZlY3RvcigpOwotCXNjaGVtYVVSSV8gPSBuZXcgVmVjdG9yKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRXc2RsVXJsKFN0cmluZyB3c2RsVXJsKSB7Ci0JICBIVFRQVXRpbGl0eSBodHRwID0gbmV3IEhUVFBVdGlsaXR5KCk7Ci0JICB3c2RsVXJsXyA9IGh0dHAuaGFuZGxlUmVkaXJlY3Qod3NkbFVybCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdzZGxVcmwoKSB7Ci0gICAgcmV0dXJuIHdzZGxVcmxfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0U2NoZW1hTGlzdChWZWN0b3Igc2NoZW1hTGlzdCkKLSAgewotICAgIHNjaGVtYUxpc3RfID0gc2NoZW1hTGlzdDsKLSAgfQotCi0gIHB1YmxpYyBWZWN0b3IgZ2V0U2NoZW1hTGlzdCgpCi0gIHsKLSAgICByZXR1cm4gc2NoZW1hTGlzdF87Ci0gIH0KLSAgCi0gIHByaXZhdGUgZmluYWwgRGVmaW5pdGlvbiBsb2FkV1NETChTdHJpbmcgd3NkbFVSTCkgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIFdlYlNlcnZpY2VzUGFyc2VyIHBhcnNlciA9IG5ldyBXZWJTZXJ2aWNlc1BhcnNlckV4dCgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIHJldHVybiBwYXJzZXIuZ2V0V1NETERlZmluaXRpb25WZXJib3NlKHdzZGxVUkwpOwotICAgIH0KLSAgICBjYXRjaCAoV1NETEV4Y2VwdGlvbiB3c2RsZSkKLSAgICB7Ci0gICAgICB0aHJvdyB3c2RsZTsKLSAgICB9Ci0gICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgIHsKLSAgICAgIHRocm93IG5ldyBXU0RMRXhjZXB0aW9uKFdTRExFeGNlcHRpb24uT1RIRVJfRVJST1IgLCB0LmdldE1lc3NhZ2UoKSwgdCk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIFZlY3RvciBsb2FkV1NETCgpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLQkgIAotCS8vCVJlZ2lzdGVyIHRoZSBhcHByb3ByaWF0ZSByZXNvdXJjZSBmYWN0b3J5IHRvIGhhbmRsZSBhbGwgZmlsZSBleHRlbnRpb25zLgotCXJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOwotCXJlc291cmNlU2V0LmdldFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5KCkuZ2V0RXh0ZW5zaW9uVG9GYWN0b3J5TWFwKCkucHV0KFJlc291cmNlLkZhY3RvcnkuUmVnaXN0cnkuREVGQVVMVF9FWFRFTlNJT04sbmV3IFhTRFJlc291cmNlRmFjdG9yeUltcGwoKSk7ICAgIAkJCi0JLy9SZWdpc3RlciB0aGUgcGFja2FnZSB0byBlbnN1cmUgaXQgaXMgYXZhaWxhYmxlIGR1cmluZyBsb2FkaW5nLgotCXJlc291cmNlU2V0LmdldFBhY2thZ2VSZWdpc3RyeSgpLnB1dChYU0RQYWNrYWdlLmVOU19VUkksWFNEUGFja2FnZS5lSU5TVEFOQ0UpOwkKLQkgIAotCSAgCi0gICAgVmVjdG9yIGVycm9yTWVzc2FnZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgZGVmaW5pdGlvbl8gPSBsb2FkV1NETCh3c2RsVXJsXyk7Ci0gICAgCi0gICAgCi0gICAgaWYgKGRlZmluaXRpb25fICE9IG51bGwpCi0gICAgewotICAgICAgc2V0RG9jdW1lbnRhdGlvbihkZWZpbml0aW9uXy5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLSAgICAgIGdhdGhlclNjaGVtYXMoZGVmaW5pdGlvbl8sIHdzZGxVcmxfKTsKLSAgICAgIC8vIFZhbGlkYXRlIHRoZSBzY2hlbWFzLgotICAgICAgZm9yIChpbnQgaT0wO2k8c2NoZW1hTGlzdF8uc2l6ZSgpO2krKykKLSAgICAgIHsKLSAgICAgICAgWFNEU2NoZW1hIHhzZFNjaGVtYSA9IChYU0RTY2hlbWEpc2NoZW1hTGlzdF8uZWxlbWVudEF0KGkpOwotICAgICAgICB4c2RTY2hlbWEudmFsaWRhdGUoKTsKLSAgICAgICAgRUxpc3QgZXJyb3JzID0geHNkU2NoZW1hLmdldEFsbERpYWdub3N0aWNzKCk7Ci0gICAgICAgIGlmICghZXJyb3JzLmlzRW1wdHkoKSkKLSAgICAgICAgewotICAgICAgICAgIGZvciAoTGlzdEl0ZXJhdG9yIGxpID0gZXJyb3JzLmxpc3RJdGVyYXRvcigpO2xpLmhhc05leHQoKTspCi0gICAgICAgICAgewotICAgICAgICAgICAgWFNERGlhZ25vc3RpYyB4ZCA9IChYU0REaWFnbm9zdGljKWxpLm5leHQoKTsKLSAgICAgICAgICAgIFN0cmluZyBtc2cgPSB4ZC5nZXRNZXNzYWdlKCk7Ci0gICAgICAgICAgICAvLyBkbyBub3QgcmVwb3J0IGxvdyBzZXZlcml0eSBkaWFnbm9zdGljcyBvciBlcnJvbmVvdXMgYXJyYXkgcmVmZXJlbmNlIGVycm9ycy4KLSAgICAgICAgICAgIGlmICh4ZC5nZXRTZXZlcml0eSgpLmdldFZhbHVlKCkgPT0gWFNERGlhZ25vc3RpY1NldmVyaXR5LkZBVEFMX0xJVEVSQUwuZ2V0VmFsdWUoKSB8fCAobXNnICE9IG51bGwgJiYgbXNnLmxlbmd0aCgpID4gMCAmJiBtc2cudG9Mb3dlckNhc2UoKS5pbmRleE9mKCIjYXJyYXkiKSAhPSAtMSkpCi0gICAgICAgICAgICAgIGxpLnJlbW92ZSgpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBpZiAobXNnICE9IG51bGwgJiYgbXNnLmxlbmd0aCgpID4gMCkKLSAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2VzLmFkZEVsZW1lbnQoeGQuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgZm9yIChpbnQgaT0wO2k8Y29uc3RhbnRTY2hlbWFMaXN0Xy5zaXplKCk7aSsrKQotICAgICAgICBzY2hlbWFMaXN0Xy5hZGRFbGVtZW50KGNvbnN0YW50U2NoZW1hTGlzdF8uZWxlbWVudEF0KGkpKTsKLSAgICAgIAotCX0KLSAgICByZXR1cm4gZXJyb3JNZXNzYWdlczsKLSAgfQotCi0gIHByaXZhdGUgZmluYWwgdm9pZCBnYXRoZXJTY2hlbWFzKERlZmluaXRpb24gZGVmaW5pdGlvbiwgU3RyaW5nIGRlZmluaXRpb25VUkwpCi0gIHsKLSAgICBUeXBlcyB0eXBlcyA9IGRlZmluaXRpb24uZ2V0VHlwZXMoKTsKLSAgICBpZiAodHlwZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBMaXN0IGV4dFR5cGVzID0gdHlwZXMuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICBpZiAoZXh0VHlwZXMgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZm9yIChpbnQgaT0wO2k8ZXh0VHlwZXMuc2l6ZSgpO2krKykKLSAgICAgICAgewotICAgICAgICAgIFhTRFNjaGVtYSB4c2RTY2hlbWEgPSBudWxsOwotICAgICAgICAgIE9iamVjdCBvYmogPSBleHRUeXBlcy5nZXQoaSk7Ci0gICAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQgc2NoZW1hRWxlbWVudCA9IChVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpb2JqOwotICAgICAgICAgICAgaWYgKGlzVzNTY2hlbWFFbGVtZW50VHlwZShzY2hlbWFFbGVtZW50LmdldEVsZW1lbnRUeXBlKCkpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICB4c2RTY2hlbWEgPSBYU0RTY2hlbWFJbXBsLmNyZWF0ZVNjaGVtYShzY2hlbWFFbGVtZW50LmdldEVsZW1lbnQoKSk7Ci0JCQkgIGlmKCFjaGVja1NjaGVtYVVSSShkZWZpbml0aW9uVVJMKSl7Ci0JCQkJICBzY2hlbWFMaXN0Xy5hZGRFbGVtZW50KHhzZFNjaGVtYSk7Ci0JCQkJICBnYXRoZXJTY2hlbWFEaXJlY3RpdmUoeHNkU2NoZW1hLCBkZWZpbml0aW9uVVJMKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgIAl9Ci0gICAgICAgICAgfSAJCi0gICAgICAgICAgZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCBzY2hlbWFFbGVtZW50ID0gKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50SW1wbClvYmo7Ci0gICAgICAgICAgICB4c2RTY2hlbWEgPSBYU0RTY2hlbWFJbXBsLmNyZWF0ZVNjaGVtYShzY2hlbWFFbGVtZW50LmdldEVsZW1lbnQoKSk7Ci0JCQlpZighY2hlY2tTY2hlbWFVUkkoZGVmaW5pdGlvblVSTCkpewotCQkJCXNjaGVtYUxpc3RfLmFkZEVsZW1lbnQoeHNkU2NoZW1hKTsKLQkJCQlnYXRoZXJTY2hlbWFEaXJlY3RpdmUoeHNkU2NoZW1hLCBkZWZpbml0aW9uVVJMKTsKLQkJCX0KLQkJICB9Ci0gICAgICAgICAgCi0gICAgICAgICAgaWYgKHhzZFNjaGVtYSAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgCSAgLy9XZSBuZWVkIHRvIGFkZCB0aGUgc2NoZW1hIHRvIGEgUmVzb3VyY2UgaW4gYSBSZXNvdXJjZSBzZXQgZm9yIHByb3BlciB2YWxpZGF0aW9uCi0gICAgICAgIAkgIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkkgdXJpID0gb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSS5jcmVhdGVVUkkoZGVmaW5pdGlvblVSTCk7ICAgIAkJCi0gICAgICAgIAkgIFJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuY3JlYXRlUmVzb3VyY2UodXJpKTsKLSAgICAgICAgCSAgLy9BZGQgdGhlIFNjaGVtYSB0byB0aGUgcmVzb3VyY2UKLSAgICAgICAgCSAgcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5hZGQoeHNkU2NoZW1hKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgTWFwIGltcG9ydHMgPSBkZWZpbml0aW9uLmdldEltcG9ydHMoKTsKLSAgICBpZiAoaW1wb3J0cyAhPSBudWxsKQotICAgICAgZ2F0aGVySW1wb3J0ZWRTY2hlbWFzKGRlZmluaXRpb24saW1wb3J0cyk7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIHZvaWQgZ2F0aGVyU2NoZW1hRGlyZWN0aXZlKFhTRFNjaGVtYSB4c2RTY2hlbWEsIFN0cmluZyB4c2RTY2hlbWFVUkwpCi0gIHsKLSAgICBpZiAoeHNkU2NoZW1hICE9IG51bGwpCi0gICAgewotICAgICAgRUxpc3QgeHNkU2NoZW1hQ29udGVudHMgPSB4c2RTY2hlbWEuZ2V0Q29udGVudHMoKTsKLSAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSB4c2RTY2hlbWFDb250ZW50cy5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBPYmplY3QgY29udGVudCA9IGl0Lm5leHQoKTsKLSAgICAgICAgaWYgKGNvbnRlbnQgaW5zdGFuY2VvZiBYU0RTY2hlbWFEaXJlY3RpdmUpCi0gICAgICAgIHsKLSAgICAgICAgICBYU0RTY2hlbWFEaXJlY3RpdmUgeHNkU2NoZW1hRGlyZWN0aXZlID0gKFhTRFNjaGVtYURpcmVjdGl2ZSljb250ZW50OwotICAgICAgICAgIFN0cmluZ0J1ZmZlciB4c2RTY2hlbWFEaXJlY3RpdmVVUkwgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgICAgU3RyaW5nIHhzZFNjaGVtYURpcmVjdGl2ZUxvY2F0aW9uID0geHNkU2NoZW1hRGlyZWN0aXZlLmdldFNjaGVtYUxvY2F0aW9uKCk7Ci0gICAgICAgICAgaWYgKHhzZFNjaGVtYURpcmVjdGl2ZUxvY2F0aW9uICE9IG51bGwgJiYgeHNkU2NoZW1hRGlyZWN0aXZlTG9jYXRpb24uaW5kZXhPZignOicpID09IC0xICYmIHhzZFNjaGVtYVVSTCAhPSBudWxsICYmIHhzZFNjaGVtYVVSTC5pbmRleE9mKCc6JykgIT0gLTEpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gcmVsYXRpdmUgVVJMCi0gICAgICAgICAgICBpbnQgaW5kZXggPSB4c2RTY2hlbWFVUkwubGFzdEluZGV4T2YoJy8nKTsKLSAgICAgICAgICAgIGlmIChpbmRleCAhPSAtMSkKLSAgICAgICAgICAgICAgeHNkU2NoZW1hRGlyZWN0aXZlVVJMLmFwcGVuZCh4c2RTY2hlbWFVUkwuc3Vic3RyaW5nKDAsIGluZGV4KzEpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgeHNkU2NoZW1hRGlyZWN0aXZlVVJMLmFwcGVuZCh4c2RTY2hlbWFVUkwpOwotICAgICAgICAgICAgICB4c2RTY2hlbWFEaXJlY3RpdmVVUkwuYXBwZW5kKCcvJyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIHhzZFNjaGVtYURpcmVjdGl2ZVVSTC5hcHBlbmQoeHNkU2NoZW1hRGlyZWN0aXZlTG9jYXRpb24pOwotICAgICAgICAgIC8vIHJlc29sdmUgc2NoZW1hIGRpcmVjdGl2ZQotICAgICAgICAgIFhTRFNjaGVtYSByZXNvbHZlZFNjaGVtYSA9IHhzZFNjaGVtYURpcmVjdGl2ZS5nZXRSZXNvbHZlZFNjaGVtYSgpOwotICAgICAgICAgIGlmIChyZXNvbHZlZFNjaGVtYSA9PSBudWxsICYmIHhzZFNjaGVtYURpcmVjdGl2ZVVSTC5sZW5ndGgoKSA+IDApCi0gICAgICAgICAgICByZXNvbHZlZFNjaGVtYSA9IGdldFNjaGVtYSh4c2RTY2hlbWFEaXJlY3RpdmVVUkwudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgaWYgKHJlc29sdmVkU2NoZW1hICE9IG51bGwpCi0gICAgICAgICAgewotCQkJaWYoIWNoZWNrU2NoZW1hVVJJKHhzZFNjaGVtYURpcmVjdGl2ZVVSTC50b1N0cmluZygpKSl7Ci0JCQkJc2NoZW1hTGlzdF8uYWRkRWxlbWVudChyZXNvbHZlZFNjaGVtYSk7Ci0JCQkJZ2F0aGVyU2NoZW1hRGlyZWN0aXZlKHJlc29sdmVkU2NoZW1hLCB4c2RTY2hlbWFEaXJlY3RpdmVVUkwudG9TdHJpbmcoKSk7Ci0gICAgICAJCX0KLSAgICAgIAkgIH0KLSAgICAgICAgfQotCSAgfQotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBjaGVja1NjaGVtYVVSSShTdHJpbmcgc2NoZW1hVVJJKXsKLQkgIAlib29sZWFuIGZvdW5kID0gZmFsc2U7Ci0JICAJIAkKLQkJCi0JCXNjaGVtYVVSSSA9IG5vcm1hbGl6ZShzY2hlbWFVUkkpOyAKLQkJaWYoc2NoZW1hVVJJLmVxdWFscyhub3JtYWxpemUod3NkbFVybF8pKSlyZXR1cm4gZmFsc2U7Ci0JCUVudW1lcmF0aW9uIGUgPSBzY2hlbWFVUklfLmVsZW1lbnRzKCk7Ci0JCXdoaWxlKGUuaGFzTW9yZUVsZW1lbnRzKCkpewotCQkJU3RyaW5nIHVyaSA9IChTdHJpbmcpZS5uZXh0RWxlbWVudCgpOwkKLQkJCWlmKHNjaGVtYVVSSS5lcXVhbHModXJpKSl7IAotCQkJCWZvdW5kID0gdHJ1ZTsKLQkJCQlicmVhazsKLQkJCX0JCi0JCX0KLQkJCi0JICAgIGlmICghZm91bmQpewotCSAgICAJc2NoZW1hVVJJXy5hZGRFbGVtZW50KHNjaGVtYVVSSSk7Ci0JICAgIH0KLQkgICAgcmV0dXJuIGZvdW5kOwotCSAgCi0JICB9Ci0JICAKLSAgcHJpdmF0ZSBTdHJpbmcgbm9ybWFsaXplKFN0cmluZyB1cmkgKQotICB7Ci0JICB0cnkgewotCQkgIFN0cmluZyBlbmNvZGVkVVJJID0gVVJJRW5jb2Rlci5lbmNvZGUodXJpLCJVVEYtOCIpOwotCQkgIFVSSSBub3JtYWxpemVkVVJJID0gbmV3IFVSSShlbmNvZGVkVVJJKTsKLQkJICBub3JtYWxpemVkVVJJID0gbm9ybWFsaXplZFVSSS5ub3JtYWxpemUoKTsKLQkJICByZXR1cm4gbm9ybWFsaXplZFVSSS50b1N0cmluZygpOwotCSAgfSBjYXRjaCAoVVJJU3ludGF4RXhjZXB0aW9uIGUpIHsKLQkJICByZXR1cm4gdXJpOwotCSAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBlKSB7Ci0JCSAgcmV0dXJuIHVyaTsKLQkgIH0KLSAgfQotICAKLSAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIGlzVzNTY2hlbWFFbGVtZW50VHlwZShRTmFtZSBxbmFtZSkKLSAgewotICAgIGZvciAoaW50IGk9MDtpPHczU2NoZW1hUU5hbWVMaXN0Xy5zaXplKCk7aSsrKQotICAgIHsKLSAgICAgIFFOYW1lIHczU2NoZW1hUU5hbWUgPSAoUU5hbWUpdzNTY2hlbWFRTmFtZUxpc3RfLmVsZW1lbnRBdChpKTsKLSAgICAgIGlmICh3M1NjaGVtYVFOYW1lLmVxdWFscyhxbmFtZSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIHZvaWQgZ2F0aGVySW1wb3J0ZWRTY2hlbWFzKERlZmluaXRpb24gZGVmaW5pdGlvbixNYXAgaW1wb3J0cykKLSAgewotICAgIGZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSBpbXBvcnRzLmtleVNldCgpLml0ZXJhdG9yKCk7aXRlcmF0b3IuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBMaXN0IGltcG9ydExpc3QgPSAoTGlzdClpbXBvcnRzLmdldChpdGVyYXRvci5uZXh0KCkpOwotICAgICAgZm9yIChpbnQgaT0wO2k8aW1wb3J0TGlzdC5zaXplKCk7aSsrKQotICAgICAgewotICAgICAgICBJbXBvcnQgaW1wID0gKEltcG9ydClpbXBvcnRMaXN0LmdldChpKTsKLSAgICAgICAgU3RyaW5nQnVmZmVyIGxvY1VSSSA9IG5ldyBTdHJpbmdCdWZmZXIoaW1wLmdldExvY2F0aW9uVVJJKCkpOwotICAgICAgICBpZiAoIVZhbGlkYXRvci52YWxpZGF0ZVVSTChsb2NVUkkudG9TdHJpbmcoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgYmFzZSA9IGRlZmluaXRpb24uZ2V0RG9jdW1lbnRCYXNlVVJJKCk7Ci0gICAgICAgICAgbG9jVVJJLmluc2VydCgwLGJhc2Uuc3Vic3RyaW5nKDAsYmFzZS5sYXN0SW5kZXhPZignLycpKzEpKTsKLSAgICAgICAgfQotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIERlZmluaXRpb24gaW1wb3J0RGVmID0gbG9hZFdTREwobG9jVVJJLnRvU3RyaW5nKCkpOwotICAgICAgICAgIGdhdGhlclNjaGVtYXMoaW1wb3J0RGVmLCBsb2NVUkkudG9TdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKFdTRExFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIC8vIE1heSBiZSBhbiBYU0QgZmlsZS4KLSAgICAgICAgICBnYXRoZXJTY2hlbWEobG9jVVJJLnRvU3RyaW5nKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIGdhdGhlclNjaGVtYShTdHJpbmcgbG9jVVJJKQotICB7Ci0gICAgWFNEU2NoZW1hIHhzZFNjaGVtYSA9IGdldFNjaGVtYShsb2NVUkkpOwotICAgIGlmICh4c2RTY2hlbWEgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBzY2hlbWFMaXN0Xy5hZGRFbGVtZW50KHhzZFNjaGVtYSk7Ci0gICAgICBnYXRoZXJTY2hlbWFEaXJlY3RpdmUoeHNkU2NoZW1hLCBsb2NVUkkpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgZmluYWwgWFNEU2NoZW1hIGdldFNjaGVtYShTdHJpbmcgbG9jVVJJKQotICB7Ci0gICAgWFNEU2NoZW1hIHhzZFNjaGVtYSA9IFhTRFNjaGVtYUltcGwuZ2V0U2NoZW1hRm9yU2NoZW1hKGxvY1VSSSk7Ci0gICAgaWYgKHhzZFNjaGVtYSA9PSBudWxsKQotICAgIHsKLSAgICAgIFhTRFBhcnNlciBwID0gbmV3IFhTRFBhcnNlcigpOwotICAgICAgSW5wdXRTdHJlYW0gaXMgPSBOZXRVdGlscy5nZXRVUkxJbnB1dFN0cmVhbShsb2NVUkkpOwotICAgICAgaWYgKGlzICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHAucGFyc2UoaXMpOwotICAgICAgICB4c2RTY2hlbWEgPSBwLmdldFNjaGVtYSgpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4geHNkU2NoZW1hOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RGVmaW5pdGlvbihEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICBkZWZpbml0aW9uXyA9IGRlZmluaXRpb247Ci0gIH0KLQotICBwdWJsaWMgRGVmaW5pdGlvbiBnZXREZWZpbml0aW9uKCkKLSAgewotICAgIHJldHVybiBkZWZpbml0aW9uXzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGJ1aWxkTW9kZWwoKSB7Ci0gICAgaWYgKGRlZmluaXRpb25fICE9IG51bGwpIHsKLSAgICAgIE1hcCBzZXJ2aWNlcyA9IG5ldyBIYXNoTWFwKGRlZmluaXRpb25fLmdldFNlcnZpY2VzKCkpOwotICAgICAgV1NETFNlcnZpY2VFbGVtZW50W10gd3NkbFNlcnZpY2VFbGVtZW50cyA9IG5ldyBXU0RMU2VydmljZUVsZW1lbnRbZ2V0TnVtYmVyT2ZFbGVtZW50cyhXU0RMTW9kZWxDb25zdGFudHMuUkVMX1dTRExfU0VSVklDRSldOwotICAgICAgRW51bWVyYXRpb24gZSA9IGdldEVsZW1lbnRzKFdTRExNb2RlbENvbnN0YW50cy5SRUxfV1NETF9TRVJWSUNFKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgd3NkbFNlcnZpY2VFbGVtZW50cy5sZW5ndGg7IGkrKykgewotICAgICAgICB3c2RsU2VydmljZUVsZW1lbnRzW2ldID0gKFdTRExTZXJ2aWNlRWxlbWVudCllLm5leHRFbGVtZW50KCk7Ci0gICAgICB9Ci0gICAgICBmb3IgKGludCBqID0gMDsgaiA8IHdzZGxTZXJ2aWNlRWxlbWVudHMubGVuZ3RoOyBqKyspIHsKLSAgICAgICAgUU5hbWUgcW5hbWUgPSB3c2RsU2VydmljZUVsZW1lbnRzW2pdLmdldFNlcnZpY2UoKS5nZXRRTmFtZSgpOwotICAgICAgICBTZXJ2aWNlIHNlcnZpY2UgPSAoU2VydmljZSlzZXJ2aWNlcy5nZXQocW5hbWUpOwotICAgICAgICBpZiAoc2VydmljZSAhPSBudWxsKSB7Ci0gICAgICAgICAgc2VydmljZXMucmVtb3ZlKHFuYW1lKTsKLSAgICAgICAgICB3c2RsU2VydmljZUVsZW1lbnRzW2pdLnNldFNlcnZpY2Uoc2VydmljZSk7Ci0gICAgICAgICAgd3NkbFNlcnZpY2VFbGVtZW50c1tqXS5idWlsZE1vZGVsKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgIGRpc2Nvbm5lY3Qod3NkbFNlcnZpY2VFbGVtZW50c1tqXSwgV1NETE1vZGVsQ29uc3RhbnRzLlJFTF9XU0RMX1NFUlZJQ0UpOwotICAgICAgfQotICAgICAgZm9yIChJdGVyYXRvciBpdCA9IHNlcnZpY2VzLnZhbHVlcygpLml0ZXJhdG9yKCk7aXQuaGFzTmV4dCgpOykgewotICAgICAgICBTZXJ2aWNlIHNlcnZpY2UgPSAoU2VydmljZSlpdC5uZXh0KCk7Ci0gICAgICAgIFdTRExTZXJ2aWNlRWxlbWVudCB3c2RsU2VydmljZUVsZW1lbnQgPSBuZXcgV1NETFNlcnZpY2VFbGVtZW50KHNlcnZpY2UuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSwgZ2V0TW9kZWwoKSwgc2VydmljZSk7Ci0gICAgICAgIGNvbm5lY3Qod3NkbFNlcnZpY2VFbGVtZW50LFdTRExNb2RlbENvbnN0YW50cy5SRUxfV1NETF9TRVJWSUNFLE1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUik7Ci0gICAgICAgIHdzZGxTZXJ2aWNlRWxlbWVudC5idWlsZE1vZGVsKCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZGF0YW1vZGVsL1dTRExPcGVyYXRpb25FbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZGF0YW1vZGVsL1dTRExPcGVyYXRpb25FbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0MjgyYWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2RhdGFtb2RlbC9XU0RMT3BlcmF0aW9uRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzAzMDUgICAxMTcwMzQgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBzaG91bGQgc3VwcG9ydCBTT0FQIEhlYWRlcnMKLSAqIDIwMDcwNDEzICAgMTc2NDkzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0U6IE1ha2UgbWVzc2FnZS90cmFuc3BvcnQgc3RhY2sgcGx1Z2dhYmxlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5QYXJ0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keTsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5UcmFuc3BvcnRQcm92aWRlclJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5CaW5kaW5nVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLkZyYWdtZW50Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLlNPQVBIZWFkZXJXcmFwcGVyRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwueHNkLldTRExQYXJ0c1RvWFNEVHlwZU1hcHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQVHJhbnNwb3J0UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5NZXNzYWdlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETmFtZWRDb21wb25lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMT3BlcmF0aW9uRWxlbWVudCBleHRlbmRzIFdTRExDb21tb25FbGVtZW50Ci17Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9UWVBFX1NPQVAgPSAwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fVFlQRV9IVFRQX0dFVCA9IDE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9UWVBFX0hUVFBfUE9TVCA9IDI7Ci0KLSAgcHJpdmF0ZSBpbnQgb3BlcmF0aW9uVHlwZV87Ci0gIHByaXZhdGUgT3BlcmF0aW9uIG9wZXJhdGlvbl87Ci0gIHByaXZhdGUgV1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyIHdzZGxQYXJ0c1RvWHNkVHlwZU1hcHBlcl87Ci0gIHByaXZhdGUgWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgZnJhZ0NvbnRyb2xsZXJfOwotICBwcml2YXRlIGJvb2xlYW4gaXNEb2N1bWVudFN0eWxlXzsKLSAgcHJpdmF0ZSBib29sZWFuIGlzVXNlTGl0ZXJhbF87Ci0gIHByaXZhdGUgU3RyaW5nIHNvYXBBY3Rpb25fOwotICBwcml2YXRlIFN0cmluZyBlbmNvZGluZ1N0eWxlXzsKLSAgcHJpdmF0ZSBTdHJpbmcgZW5jb2RpbmdOYW1lc3BhY2VfOwotCi0gIHByaXZhdGUgTWFwIGhlYWRlckNhY2hlOwotICAKLSAgcHJpdmF0ZSBNZXNzYWdlQ29udGV4dCBtZXNzYWdlQ29udGV4dCA9IG51bGw7Ci0gIHByaXZhdGUgSVNPQVBUcmFuc3BvcnRQcm92aWRlciBzb2FwVHJhbnNwb3J0UHJvdmlkZXIgPSBudWxsOyAgCi0gIAotICBwcml2YXRlIGZpbmFsIHZvaWQgZ2F0aGVyU29hcEluZm9ybWF0aW9uKFdTRExCaW5kaW5nRWxlbWVudCBiaW5kaW5nRWxlbWVudCxTT0FQQmluZGluZyBzb2FwQmluZGluZykKLSAgewotICAgIC8vIEluaXRpYWxpemUgZGVmYXVsdHMuCi0gICAgaXNEb2N1bWVudFN0eWxlXyA9IHRydWU7Ci0gICAgc29hcEFjdGlvbl8gPSAiIjsKLSAgICBpc1VzZUxpdGVyYWxfID0gdHJ1ZTsKLSAgICBlbmNvZGluZ1N0eWxlXyA9IG51bGw7Ci0gICAgZW5jb2RpbmdOYW1lc3BhY2VfID0gbnVsbDsKLQotICAgIGlmIChzb2FwQmluZGluZyAhPSBudWxsKQotICAgICAgaXNEb2N1bWVudFN0eWxlXyA9ICJkb2N1bWVudCIuZXF1YWxzKHNvYXBCaW5kaW5nLmdldFN0eWxlKCkpOwotICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IGdldEJpbmRpbmdPcGVyYXRpb24oYmluZGluZ0VsZW1lbnQpOwotICAgIFNPQVBPcGVyYXRpb24gc29hcE9wZXJhdGlvbiA9IG51bGw7Ci0gICAgCi0gICAgZm9yIChJdGVyYXRvciBpID0gYmluZGluZ09wZXJhdGlvbi5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpO2kuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBlID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWkubmV4dCgpOwotICAgICAgaWYgKGUgaW5zdGFuY2VvZiBTT0FQT3BlcmF0aW9uKQotICAgICAgewotICAgICAgICBzb2FwT3BlcmF0aW9uID0gKFNPQVBPcGVyYXRpb24pZTsKLSAgICAgICAgc29hcEFjdGlvbl8gPSBzb2FwT3BlcmF0aW9uLmdldFNvYXBBY3Rpb25VUkkoKTsKLSAgICAgICAgU3RyaW5nIHN0eWxlID0gc29hcE9wZXJhdGlvbi5nZXRTdHlsZSgpOwotICAgICAgICBpZiAoc3R5bGUgIT0gbnVsbCkKLSAgICAgICAgICBpc0RvY3VtZW50U3R5bGVfID0gc3R5bGUuZXF1YWxzKCJkb2N1bWVudCIpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBCaW5kaW5nSW5wdXQgYmluZGluZ0lucHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nSW5wdXQoKTsKLSAgICBTT0FQQm9keSBzb2FwQm9keSA9IG51bGw7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gYmluZGluZ0lucHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7aS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGUgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpaS5uZXh0KCk7Ci0gICAgICBpZiAoZSBpbnN0YW5jZW9mIFNPQVBCb2R5KQotICAgICAgewotICAgICAgICBzb2FwQm9keSA9IChTT0FQQm9keSllOwotICAgICAgICBpc1VzZUxpdGVyYWxfID0gImxpdGVyYWwiLmVxdWFscyhzb2FwQm9keS5nZXRVc2UoKSk7Ci0gICAgICAgIGlmICghaXNVc2VMaXRlcmFsXykKLSAgICAgICAgewotICAgICAgICAgIC8vIEVuY29kZWQuCi0gICAgICAgICAgZm9yIChJdGVyYXRvciBqID0gc29hcEJvZHkuZ2V0RW5jb2RpbmdTdHlsZXMoKS5pdGVyYXRvcigpO2ouaGFzTmV4dCgpOykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBlbmNvZGluZ1N0eWxlXyA9IChTdHJpbmcpai5uZXh0KCk7Ci0gICAgICAgICAgICBlbmNvZGluZ05hbWVzcGFjZV8gPSBzb2FwQm9keS5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgV1NETE9wZXJhdGlvbkVsZW1lbnQoU3RyaW5nIG5hbWUsV1NETEJpbmRpbmdFbGVtZW50IGJpbmRpbmdFbGVtZW50LE9wZXJhdGlvbiBvcGVyYXRpb24pCi0gIHsKLSAgICBzdXBlcihuYW1lLCBiaW5kaW5nRWxlbWVudC5nZXRNb2RlbCgpKTsKLSAgICAvLyBTZXQgdGhlIGRlZmF1bHQgb3BlcmF0aW9uIHR5cGUgdG8gYmUgU09BUC4KLSAgICBzZXRPcGVyYXRpb24oYmluZGluZ0VsZW1lbnQsb3BlcmF0aW9uKTsKLSAgfQotCi0gIHByaXZhdGUgRGVmaW5pdGlvbiBnZXREZWZpbml0aW9uKFdTRExCaW5kaW5nRWxlbWVudCBiaW5kaW5nRWxlbWVudCkgewotCSAgV1NETFNlcnZpY2VFbGVtZW50IHNlcnZpY2VFbGVtZW50ID0gKFdTRExTZXJ2aWNlRWxlbWVudCkgYmluZGluZ0VsZW1lbnQuZ2V0UGFyZW50RWxlbWVudCgpOwotICAgICAgV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQgPSAoV1NETEVsZW1lbnQpIHNlcnZpY2VFbGVtZW50LmdldFBhcmVudEVsZW1lbnQoKTsKLSAgICAgIHJldHVybiB3c2RsRWxlbWVudC5nZXREZWZpbml0aW9uKCk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBzZXRNZXNzYWdlQ29udGV4dChXU0RMQmluZGluZ0VsZW1lbnQgYmluZGluZ0VsZW1lbnQpIHsKLQkgIG1lc3NhZ2VDb250ZXh0ID0gbmV3IE1lc3NhZ2VDb250ZXh0KCk7Ci0JICBtZXNzYWdlQ29udGV4dC5zZXREZWZpbml0aW9uKGdldERlZmluaXRpb24oYmluZGluZ0VsZW1lbnQpKTsKLQkgIG1lc3NhZ2VDb250ZXh0LnNldEJpbmRpbmdPcGVyYXRpb24oZ2V0QmluZGluZ09wZXJhdGlvbihiaW5kaW5nRWxlbWVudCkpOwotCSAgbWVzc2FnZUNvbnRleHQuc2V0QmluZGluZ1Byb3RvY29sKGJpbmRpbmdFbGVtZW50LmdldEJpbmRpbmdFeHRlbnNpYmlsaXR5RWxlbWVudCgpKTsKLQkgIG1lc3NhZ2VDb250ZXh0LnNldERvY3VtZW50U3R5bGUoaXNEb2N1bWVudFN0eWxlXyk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBNZXNzYWdlQ29udGV4dCBnZXRNZXNzYWdlQ29udGV4dCgpIHsKLQkgIHJldHVybiBtZXNzYWdlQ29udGV4dDsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIHNldFNPQVBUcmFuc3BvcnRQcm92aWRlcihTT0FQQmluZGluZyBzb2FwQmluZGluZykgewotCSAgCSAgCi0JICBTdHJpbmcgbmFtZXNwYWNlVVJJID0gc29hcEJpbmRpbmcuZ2V0RWxlbWVudFR5cGUoKS5nZXROYW1lc3BhY2VVUkkoKTsKLQkgIFN0cmluZyB0cmFuc3BvcnRVUkkgPSBzb2FwQmluZGluZy5nZXRUcmFuc3BvcnRVUkkoKTsKLQkgIAkgIAotCSAgc29hcFRyYW5zcG9ydFByb3ZpZGVyID0gVHJhbnNwb3J0UHJvdmlkZXJSZWdpc3RyeS5nZXRJbnN0YW5jZSgpCi0JICAJLmdldFNPQVBUcmFuc3BvcnRQcm92aWRlcihuYW1lc3BhY2VVUkksIHRyYW5zcG9ydFVSSSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJU09BUFRyYW5zcG9ydFByb3ZpZGVyIGdldFNPQVBUcmFuc3BvcnRQcm92aWRlcigpIHsKLQkgIHJldHVybiBzb2FwVHJhbnNwb3J0UHJvdmlkZXI7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldE9wZXJhdGlvbihXU0RMQmluZGluZ0VsZW1lbnQgYmluZGluZ0VsZW1lbnQsT3BlcmF0aW9uIG9wZXJhdGlvbikgewotICAgIG9wZXJhdGlvbl8gPSBvcGVyYXRpb247Ci0gICAgc2V0RG9jdW1lbnRhdGlvbihvcGVyYXRpb24uZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgZnJhZ0NvbnRyb2xsZXJfID0gbnVsbDsKLSAgICB3c2RsUGFydHNUb1hzZFR5cGVNYXBwZXJfID0gbnVsbDsKLSAgICBvcGVyYXRpb25UeXBlXyA9IGJpbmRpbmdFbGVtZW50LmdldEJpbmRpbmdUeXBlKCk7Ci0gICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgYmluZGluZ0V4dGVuc2liaWxpdHlFbGVtZW50ID0gYmluZGluZ0VsZW1lbnQuZ2V0QmluZGluZ0V4dGVuc2liaWxpdHlFbGVtZW50KCk7Ci0gICAgc3dpdGNoIChvcGVyYXRpb25UeXBlXykKLSAgICB7Ci0gICAgICBjYXNlIEJpbmRpbmdUeXBlcy5TT0FQOgotICAgICAgICBnYXRoZXJTb2FwSW5mb3JtYXRpb24oYmluZGluZ0VsZW1lbnQsKFNPQVBCaW5kaW5nKWJpbmRpbmdFeHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gICAgICAgIHNldE1lc3NhZ2VDb250ZXh0KGJpbmRpbmdFbGVtZW50KTsKLSAgICAgICAgc2V0U09BUFRyYW5zcG9ydFByb3ZpZGVyKChTT0FQQmluZGluZykgYmluZGluZ0V4dGVuc2liaWxpdHlFbGVtZW50KTsKLSAgICAgICAgaGVhZGVyQ2FjaGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgICBjYXNlIEJpbmRpbmdUeXBlcy5IVFRQX0dFVDoKLSAgICAgIGNhc2UgQmluZGluZ1R5cGVzLkhUVFBfUE9TVDoKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBPcGVyYXRpb24gZ2V0T3BlcmF0aW9uKCkgewotICAgIHJldHVybiBvcGVyYXRpb25fOwotICB9Ci0KLSAgcHVibGljIEJpbmRpbmdPcGVyYXRpb24gZ2V0QmluZGluZ09wZXJhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gZ2V0QmluZGluZ09wZXJhdGlvbigoV1NETEJpbmRpbmdFbGVtZW50KWdldFBhcmVudEVsZW1lbnQoKSk7Ci0gIH0KLQotICBwcml2YXRlIEJpbmRpbmdPcGVyYXRpb24gZ2V0QmluZGluZ09wZXJhdGlvbihXU0RMQmluZGluZ0VsZW1lbnQgYmluZGluZ0VsZW1lbnQpCi0gIHsKLSAgICBCaW5kaW5nIGJpbmRpbmcgPSBiaW5kaW5nRWxlbWVudC5nZXRCaW5kaW5nKCk7Ci0gICAgU3RyaW5nIG9wZXJhdGlvbklucHV0TmFtZSA9IG51bGw7Ci0gICAgU3RyaW5nIG9wZXJhdGlvbk91dHB1dE5hbWUgPSBudWxsOwotICAgIElucHV0IG9wZXJhdGlvbklucHV0ID0gb3BlcmF0aW9uXy5nZXRJbnB1dCgpOwotICAgIE91dHB1dCBvcGVyYXRpb25PdXRwdXQgPSBvcGVyYXRpb25fLmdldE91dHB1dCgpOwotICAgIGlmIChvcGVyYXRpb25JbnB1dCAhPSBudWxsKQotICAgICAgb3BlcmF0aW9uSW5wdXROYW1lID0gb3BlcmF0aW9uSW5wdXQuZ2V0TmFtZSgpOwotICAgIGlmIChvcGVyYXRpb25PdXRwdXQgIT0gbnVsbCkKLSAgICAgIG9wZXJhdGlvbk91dHB1dE5hbWUgPSBvcGVyYXRpb25PdXRwdXQuZ2V0TmFtZSgpOwotICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IGJpbmRpbmcuZ2V0QmluZGluZ09wZXJhdGlvbihvcGVyYXRpb25fLmdldE5hbWUoKSxvcGVyYXRpb25JbnB1dE5hbWUsb3BlcmF0aW9uT3V0cHV0TmFtZSk7Ci0gICAgaWYgKGJpbmRpbmdPcGVyYXRpb24gPT0gbnVsbCkKLSAgICAgIGJpbmRpbmdPcGVyYXRpb24gPSBiaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb24ob3BlcmF0aW9uXy5nZXROYW1lKCksbnVsbCxudWxsKTsKLSAgICByZXR1cm4gYmluZGluZ09wZXJhdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm4gYSBsaXN0IG9mIGlucHV0IGhlYWRlcnMuCi0gICAqIAotICAgKiBAcmV0dXJuIEEgTGlzdAotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0U09BUEhlYWRlcnMoKSB7Ci0JICByZXR1cm4gZ2V0U09BUEhlYWRlcnModHJ1ZSk7Ci0gIH0KLQkgIAotICAvKioKLSAgICogUmV0dXJuIGEgbGlzdCBvZiBoZWFkZXJzLgotICAgKiAKLSAgICogQHBhcmFtIGlzSW5wdXQgSWYgdHJ1ZSwgcmV0dXJucyB0aGUgaW5wdXQgaGVhZGVycy4gIElmIGZhbHNlLCByZXR1cm5zIHRoZSBvdXRwdXQgaGVhZGVycy4KLSAgICogQHJldHVybiBBIExpc3QKLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldFNPQVBIZWFkZXJzKGJvb2xlYW4gaXNJbnB1dCkgewotCSAgTGlzdCBoZWFkZXJzID0gbmV3IFZlY3RvcigpOwotCQotICAgICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gZ2V0QmluZGluZ09wZXJhdGlvbigpOwotCSAgTGlzdCBleHRlbnNpYmlsaXR5RWxlbWVudHMgPSBpc0lucHV0ID8KLQkJCWJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkgOiAKLQkJCWJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ091dHB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwkgIAkgIAotCSAgCi0JICBmb3IgKEl0ZXJhdG9yIGl0ID0gZXh0ZW5zaWJpbGl0eUVsZW1lbnRzLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspIHsKLQkgICAgICAKLQkJICBFeHRlbnNpYmlsaXR5RWxlbWVudCBlID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBpdC5uZXh0KCk7Ci0JICAgICAgCi0JICAgICAgaWYgKGUgaW5zdGFuY2VvZiBTT0FQSGVhZGVyICYmICFoZWFkZXJzLmNvbnRhaW5zKGUpKQkgICAgCSAKLSAgICAJCSAgaGVhZGVycy5hZGQoZSk7Ci0JICB9ICAgCi0JICAKLQkgIHJldHVybiBoZWFkZXJzOwotICB9ICAKLSAgCi0gIHB1YmxpYyBMaXN0IGdldE9yZGVyZWRCb2R5UGFydHMoKQotICB7Ci0gICAgTGlzdCBwYXJ0cyA9IG5ldyBWZWN0b3Iob3BlcmF0aW9uXy5nZXRJbnB1dCgpLmdldE1lc3NhZ2UoKS5nZXRPcmRlcmVkUGFydHMob3BlcmF0aW9uXy5nZXRQYXJhbWV0ZXJPcmRlcmluZygpKSk7Ci0gICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gZ2V0QmluZGluZ09wZXJhdGlvbigpOwotICAgIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpOwotICAgIGZvciAoSXRlcmF0b3IgaXQgPSBiaW5kaW5nSW5wdXQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBlID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWl0Lm5leHQoKTsKLSAgICAgIGlmIChlIGluc3RhbmNlb2YgU09BUEJvZHkpCi0gICAgICB7Ci0gICAgICAgIFNPQVBCb2R5IHNvYXBCb2R5ID0gKFNPQVBCb2R5KWU7Ci0gICAgICAgIExpc3QgYm9keVBhcnRzID0gc29hcEJvZHkuZ2V0UGFydHMoKTsKLSAgICAgICAgaWYgKGJvZHlQYXJ0cyAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJ0cy5zaXplKCk7IGkrKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBQYXJ0IHBhcnQgPSAoUGFydClwYXJ0cy5nZXQoaSk7Ci0gICAgICAgICAgICBpZiAoIWJvZHlQYXJ0cy5jb250YWlucyhwYXJ0KSAmJiAhYm9keVBhcnRzLmNvbnRhaW5zKHBhcnQuZ2V0TmFtZSgpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgcGFydHMucmVtb3ZlKGkpOwotICAgICAgICAgICAgICBpLS07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcGFydHM7Ci0gIH0KLQotICBwcml2YXRlIFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGdldFhTRFRvRnJhZ21lbnRDb250cm9sbGVyKCkgewotICAgIGlmIChmcmFnQ29udHJvbGxlcl8gPT0gbnVsbCkgewotICAgICAgZnJhZ0NvbnRyb2xsZXJfID0gbmV3IFhTRFRvRnJhZ21lbnRDb250cm9sbGVyKCk7Ci0gICAgICBmcmFnQ29udHJvbGxlcl8uc2V0V1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyKHdzZGxQYXJ0c1RvWHNkVHlwZU1hcHBlcl8pOwotICAgIH0KLSAgICByZXR1cm4gZnJhZ0NvbnRyb2xsZXJfOwotICB9Ci0KLSAgcHJpdmF0ZSBYU0ROYW1lZENvbXBvbmVudCBnZXRTY2hlbWEoUGFydCBwYXJ0LCBTdHJpbmcgaWQpIHsKLSAgICBpZiAod3NkbFBhcnRzVG9Yc2RUeXBlTWFwcGVyXyA9PSBudWxsKSB7Ci0gICAgICB3c2RsUGFydHNUb1hzZFR5cGVNYXBwZXJfID0gbmV3IFdTRExQYXJ0c1RvWFNEVHlwZU1hcHBlcigpOwotICAgICAgV1NETEJpbmRpbmdFbGVtZW50IGJpbmRpbmdFbGVtZW50ID0gKFdTRExCaW5kaW5nRWxlbWVudClnZXRQYXJlbnRFbGVtZW50KCk7Ci0gICAgICBXU0RMU2VydmljZUVsZW1lbnQgc2VydmljZUVsZW1lbnQgPSAoV1NETFNlcnZpY2VFbGVtZW50KWJpbmRpbmdFbGVtZW50LmdldFBhcmVudEVsZW1lbnQoKTsKLSAgICAgIFdTRExFbGVtZW50IHdzZGxFbGVtZW50ID0gKFdTRExFbGVtZW50KXNlcnZpY2VFbGVtZW50LmdldFBhcmVudEVsZW1lbnQoKTsKLSAgICAgIHdzZGxQYXJ0c1RvWHNkVHlwZU1hcHBlcl8uYWRkU2NoZW1hcyh3c2RsRWxlbWVudC5nZXRTY2hlbWFMaXN0KCkpOwotICAgIH0KLSAgICByZXR1cm4gd3NkbFBhcnRzVG9Yc2RUeXBlTWFwcGVyXy5nZXRYU0RUeXBlKHBhcnQsIGlkKTsKLSAgfQotCi0gIHB1YmxpYyBJWFNERnJhZ21lbnQgZ2V0SGVhZGVyRnJhZ21lbnQoU09BUEhlYWRlciBzb2FwSGVhZGVyKSB7Ci0JcmV0dXJuIGdldEhlYWRlckZyYWdtZW50KHNvYXBIZWFkZXIsIHRydWUpOwotICB9Ci0gIAotICBwdWJsaWMgSVhTREZyYWdtZW50IGdldEhlYWRlckZyYWdtZW50KFNPQVBIZWFkZXIgc29hcEhlYWRlciwgYm9vbGVhbiBpc0lucHV0KSB7Ci0JU3RyaW5nQnVmZmVyIGlkID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCVBhcnQgcGFydCA9IHNvYXBIZWFkZXIuZ2V0RVBhcnQoKTsKLQlpZiAoaXNJbnB1dCkKLQkgIGlkLmFwcGVuZChGcmFnbWVudENvbnN0YW50cy5JTlBVVF9JRCkuYXBwZW5kKHNvYXBIZWFkZXIuZ2V0TWVzc2FnZSgpKS5hcHBlbmQoRnJhZ21lbnRDb25zdGFudHMuUEFSVF9UT0tFTik7Ci0JZWxzZQotCSAgaWQuYXBwZW5kKEZyYWdtZW50Q29uc3RhbnRzLk9VVFBVVF9JRCkuYXBwZW5kKHNvYXBIZWFkZXIuZ2V0TWVzc2FnZSgpKS5hcHBlbmQoRnJhZ21lbnRDb25zdGFudHMuUEFSVF9UT0tFTik7Ci0JCi0JcmV0dXJuIGdldEZyYWdtZW50KHBhcnQsIGlkLCB0cnVlLCBpc0lucHV0KTsgLy8gb25seSB3cmFwIGlucHV0IGhlYWRlciBmcmFnbWVudHMKLSAgfQotICAKLSAgcHVibGljIElYU0RGcmFnbWVudCBnZXRGcmFnbWVudChQYXJ0IHBhcnQpIHsKLSAgICByZXR1cm4gZ2V0RnJhZ21lbnQocGFydCwgdHJ1ZSk7Ci0gIH0KLQotICBwdWJsaWMgSVhTREZyYWdtZW50IGdldEZyYWdtZW50KFBhcnQgcGFydCwgYm9vbGVhbiBpc0lucHV0KSB7Ci0gICAgU3RyaW5nQnVmZmVyIGlkID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIGlmIChpc0lucHV0KQotICAgICAgaWQuYXBwZW5kKEZyYWdtZW50Q29uc3RhbnRzLklOUFVUX0lEKTsKLSAgICBlbHNlCi0gICAgICBpZC5hcHBlbmQoRnJhZ21lbnRDb25zdGFudHMuT1VUUFVUX0lEKTsKLQotCXJldHVybiBnZXRGcmFnbWVudChwYXJ0LCBpZCwgZmFsc2UsIGZhbHNlKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBJWFNERnJhZ21lbnQgZ2V0RnJhZ21lbnQoUGFydCBwYXJ0LCBTdHJpbmdCdWZmZXIgaWQsIGJvb2xlYW4gaXNIZWFkZXIsIGJvb2xlYW4gdXNlU09BUEhlYWRlcldyYXBwZXIpIHsKLSAgICBTdHJpbmcgcGFydE5hbWUgPSBwYXJ0LmdldE5hbWUoKTsKLSAgICBpZC5hcHBlbmQocGFydE5hbWUpOwotICAgIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZyA9IG5ldyBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotICAgIGNvbmZpZy5zZXRJc1dTRExQYXJ0KHRydWUpOwotICAgIGNvbmZpZy5zZXRXU0RMUGFydE5hbWUocGFydE5hbWUpOwotICAgIGNvbmZpZy5zZXRYU0RDb21wb25lbnQoZ2V0U2NoZW1hKHBhcnQsIGlkLnRvU3RyaW5nKCkpKTsKLSAgICBpZiAoaXNEb2N1bWVudFN0eWxlKCkgfHwgaXNIZWFkZXIpCi0gICAgICBjb25maWcuc2V0U3R5bGUoRnJhZ21lbnRDb25zdGFudHMuU1RZTEVfRE9DVU1FTlQpOwotICAgIGVsc2UKLSAgICAgIGNvbmZpZy5zZXRTdHlsZShGcmFnbWVudENvbnN0YW50cy5TVFlMRV9SUEMpOwotICAgIGlmIChvcGVyYXRpb25UeXBlXyA9PSBCaW5kaW5nVHlwZXMuU09BUCkKLSAgICB7Ci0gICAgICBpZiAoIWlzVXNlTGl0ZXJhbF8pCi0gICAgICAgIGNvbmZpZy5zZXRQYXJ0RW5jb2RpbmcoRnJhZ21lbnRDb25zdGFudHMuRU5DT0RJTkdfU09BUCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIGNvbmZpZy5zZXRQYXJ0RW5jb2RpbmcoRnJhZ21lbnRDb25zdGFudHMuRU5DT0RJTkdfVVJMKTsKLSAgICBJWFNERnJhZ21lbnQgZnJhZ21lbnQgPSBnZXRYU0RUb0ZyYWdtZW50Q29udHJvbGxlcigpLmdldEZyYWdtZW50KGNvbmZpZywgaWQudG9TdHJpbmcoKSwgcGFydC5nZXROYW1lKCkpOwotICAgICAKLSAgICAvLyBsZXQncyBzZWUgaWYgdGhlcmUncyBhIGNvcnJlc3BvbmRpbmcgd3JhcHBlciBmb3IgdGhpcyBmcmFnbWVudAotICAgIGlmICh1c2VTT0FQSGVhZGVyV3JhcHBlciAmJiAhKGZyYWdtZW50IGluc3RhbmNlb2YgU09BUEhlYWRlcldyYXBwZXJGcmFnbWVudCkpIHsKLSAgICAJU09BUEhlYWRlcldyYXBwZXJGcmFnbWVudCB3cmFwcGVyID0gKFNPQVBIZWFkZXJXcmFwcGVyRnJhZ21lbnQpIGhlYWRlckNhY2hlLmdldChmcmFnbWVudC5nZXRJRCgpKTsKLSAgICAJCi0gICAgCS8vIG5vIHdyYXBwZXIsIGxldCdzIHdyYXAgaXQKLSAgICAJaWYgKHdyYXBwZXIgPT0gbnVsbCkgewotICAgIAkJd3JhcHBlciA9IG5ldyBTT0FQSGVhZGVyV3JhcHBlckZyYWdtZW50KGZyYWdtZW50KTsgICAgCQkKLSAgICAJCWhlYWRlckNhY2hlLnB1dChmcmFnbWVudC5nZXRJRCgpLCB3cmFwcGVyKTsKLSAgICAJCQotICAgIAkJLy8gYWxzbyBwdXQgdGhpcyB3cmFwcGVyIGZyYWdtZW50IGluIHRoZSBtYXN0ZXIgY2FjaGUKLSAgICAJCWdldFhTRFRvRnJhZ21lbnRDb250cm9sbGVyKCkuYWRkVG9DYWNoZSh3cmFwcGVyLmdldElEKCksIHdyYXBwZXIpOwotICAgIAl9Ci0gICAgCQotICAgIAlyZXR1cm4gd3JhcHBlcjsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZyYWdtZW50OwotICB9Ci0KLSAgcHVibGljIElYU0RGcmFnbWVudCBnZXRGcmFnbWVudEJ5SUQoU3RyaW5nIGlkKSB7Ci0gICAgcmV0dXJuIGdldFhTRFRvRnJhZ21lbnRDb250cm9sbGVyKCkuZ2V0Q2FjaGVkRnJhZ21lbnQoaWQpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVtb3ZlQWxsRnJhZ21lbnQoKSB7Ci0gICAgZ2V0WFNEVG9GcmFnbWVudENvbnRyb2xsZXIoKS5lbXB0eUNhY2hlKCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc0RvY3VtZW50U3R5bGUoKQotICB7Ci0gICAgcmV0dXJuIGlzRG9jdW1lbnRTdHlsZV87Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNvYXBBY3Rpb24oKQotICB7Ci0gICAgcmV0dXJuIHNvYXBBY3Rpb25fOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNVc2VMaXRlcmFsKCkKLSAgewotICAgIHJldHVybiBpc1VzZUxpdGVyYWxfOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRFbmNvZGluZ1N0eWxlKCkKLSAgewotICAgIHJldHVybiBlbmNvZGluZ1N0eWxlXzsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RW5jb2RpbmdOYW1lc3BhY2UoKQotICB7Ci0gICAgcmV0dXJuIGVuY29kaW5nTmFtZXNwYWNlXzsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0T3BlcmF0aW9uVHlwZSgpCi0gIHsKLSAgICByZXR1cm4gb3BlcmF0aW9uVHlwZV87Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9kYXRhbW9kZWwvV1NETFNlcnZpY2VFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZGF0YW1vZGVsL1dTRExTZXJ2aWNlRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjlhZDhhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9kYXRhbW9kZWwvV1NETFNlcnZpY2VFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0OwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUEFkZHJlc3M7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEFkZHJlc3M7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLldTRExNb2RlbENvbnN0YW50czsKLQotcHVibGljIGNsYXNzIFdTRExTZXJ2aWNlRWxlbWVudCBleHRlbmRzIFdTRExDb21tb25FbGVtZW50Ci17Ci0KLSAgcHJpdmF0ZSBTZXJ2aWNlIHNlcnZpY2VfOwotCi0gIHB1YmxpYyBXU0RMU2VydmljZUVsZW1lbnQoU3RyaW5nIG5hbWUsIE1vZGVsIG1vZGVsLCBTZXJ2aWNlIHNlcnZpY2UpCi0gIHsKLSAgICBzdXBlcihuYW1lLCBtb2RlbCk7Ci0gICAgc2V0U2VydmljZShzZXJ2aWNlKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U2VydmljZShTZXJ2aWNlIHNlcnZpY2UpIHsKLSAgICBzZXJ2aWNlXyA9IHNlcnZpY2U7Ci0gICAgc2V0RG9jdW1lbnRhdGlvbihzZXJ2aWNlLmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotICB9Ci0KLSAgcHVibGljIFNlcnZpY2UgZ2V0U2VydmljZSgpIHsKLSAgICByZXR1cm4gc2VydmljZV87Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0QWRkcmVzc0xvY2F0aW9uKEJpbmRpbmcgYmluZGluZykKLSAgewotICAgIE1hcCBwb3J0cyA9IHNlcnZpY2VfLmdldFBvcnRzKCk7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gcG9ydHMudmFsdWVzKCkuaXRlcmF0b3IoKTtpLmhhc05leHQoKTspCi0gICAgewotICAgICAgUG9ydCBwb3J0ID0gKFBvcnQpaS5uZXh0KCk7Ci0gICAgICBpZiAocG9ydC5nZXRCaW5kaW5nKCkuZ2V0UU5hbWUoKS5lcXVhbHMoYmluZGluZy5nZXRRTmFtZSgpKSkKLSAgICAgIHsKLSAgICAgICAgTGlzdCBleHRlbnNpYmlsaXR5RWxlbWVudHMgPSBwb3J0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgICBmb3IgKEl0ZXJhdG9yIGogPSBleHRlbnNpYmlsaXR5RWxlbWVudHMuaXRlcmF0b3IoKTtqLmhhc05leHQoKTspCi0gICAgICAgIHsKLSAgICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBlbGVtZW50ID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWoubmV4dCgpOwotICAgICAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgU09BUEFkZHJlc3MpCi0gICAgICAgICAgewotICAgICAgICAgICAgU09BUEFkZHJlc3Mgc29hcEFkZHJlc3MgPSAoU09BUEFkZHJlc3MpZWxlbWVudDsKLSAgICAgICAgICAgIHJldHVybiBzb2FwQWRkcmVzcy5nZXRMb2NhdGlvblVSSSgpOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRUUEFkZHJlc3MpCi0gICAgICAgICAgewotICAgICAgICAgICAgSFRUUEFkZHJlc3MgaHR0cEFkZHJlc3MgPSAoSFRUUEFkZHJlc3MpZWxlbWVudDsKLSAgICAgICAgICAgIHJldHVybiBodHRwQWRkcmVzcy5nZXRMb2NhdGlvblVSSSgpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGJ1aWxkTW9kZWwoKSB7Ci0gICAgaWYgKHNlcnZpY2VfICE9IG51bGwpIHsKLSAgICAgIE1hcCBwb3J0cyA9IHNlcnZpY2VfLmdldFBvcnRzKCk7Ci0gICAgICBNYXAgYmluZGluZ3MgPSBuZXcgSGFzaE1hcCgpOwotICAgICAgZm9yIChJdGVyYXRvciBpdCA9IHBvcnRzLnZhbHVlcygpLml0ZXJhdG9yKCk7aXQuaGFzTmV4dCgpOykgewotICAgICAgICBQb3J0IHBvcnQgPSAoUG9ydClpdC5uZXh0KCk7Ci0gICAgICAgIEJpbmRpbmcgYmluZGluZyA9IHBvcnQuZ2V0QmluZGluZygpOwotICAgICAgICBpZiAoYmluZGluZy5nZXRQb3J0VHlwZSgpID09IG51bGwpCi0gICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBiaW5kaW5ncy5wdXQoYmluZGluZy5nZXRRTmFtZSgpLCBiaW5kaW5nKTsKLSAgICAgIH0KLSAgICAgIFdTRExCaW5kaW5nRWxlbWVudFtdIHdzZGxCaW5kaW5nRWxlbWVudHMgPSBuZXcgV1NETEJpbmRpbmdFbGVtZW50W2dldE51bWJlck9mRWxlbWVudHMoV1NETE1vZGVsQ29uc3RhbnRzLlJFTF9XU0RMX0JJTkRJTkcpXTsKLSAgICAgIEVudW1lcmF0aW9uIGUgPSBnZXRFbGVtZW50cyhXU0RMTW9kZWxDb25zdGFudHMuUkVMX1dTRExfQklORElORyk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHdzZGxCaW5kaW5nRWxlbWVudHMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgd3NkbEJpbmRpbmdFbGVtZW50c1tpXSA9IChXU0RMQmluZGluZ0VsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgICAgfQotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCB3c2RsQmluZGluZ0VsZW1lbnRzLmxlbmd0aDsgaisrKSB7Ci0gICAgICAgIFFOYW1lIHFuYW1lID0gd3NkbEJpbmRpbmdFbGVtZW50c1tqXS5nZXRCaW5kaW5nKCkuZ2V0UU5hbWUoKTsKLSAgICAgICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpYmluZGluZ3MuZ2V0KHFuYW1lKTsKLSAgICAgICAgaWYgKGJpbmRpbmcgIT0gbnVsbCkgewotICAgICAgICAgIGJpbmRpbmdzLnJlbW92ZShxbmFtZSk7Ci0gICAgICAgICAgd3NkbEJpbmRpbmdFbGVtZW50c1tqXS5zZXRCaW5kaW5nKGJpbmRpbmcpOwotICAgICAgICAgIHdzZGxCaW5kaW5nRWxlbWVudHNbal0uYnVpbGRNb2RlbCgpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBkaXNjb25uZWN0KHdzZGxCaW5kaW5nRWxlbWVudHNbal0sIFdTRExNb2RlbENvbnN0YW50cy5SRUxfV1NETF9CSU5ESU5HKTsKLSAgICAgIH0KLSAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBiaW5kaW5ncy52YWx1ZXMoKS5pdGVyYXRvcigpO2l0Lmhhc05leHQoKTspIHsKLSAgICAgICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpaXQubmV4dCgpOwotICAgICAgICBXU0RMQmluZGluZ0VsZW1lbnQgd3NkbEJpbmRpbmdFbGVtZW50ID0gbmV3IFdTRExCaW5kaW5nRWxlbWVudChiaW5kaW5nLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCksIGdldE1vZGVsKCksIGJpbmRpbmcpOwotICAgICAgICBjb25uZWN0KHdzZGxCaW5kaW5nRWxlbWVudCxXU0RMTW9kZWxDb25zdGFudHMuUkVMX1dTRExfQklORElORyxNb2RlbENvbnN0YW50cy5SRUxfT1dORVIpOwotICAgICAgICB3c2RsQmluZGluZ0VsZW1lbnQuYnVpbGRNb2RlbCgpOwotICAgICAgfQotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZGUyODBjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudDsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSUZyYWdtZW50IHsKLSAgcHVibGljIHZvaWQgc2V0SUQoU3RyaW5nIGlkKTsKLSAgcHVibGljIFN0cmluZyBnZXRJRCgpOwotCi0gIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpOwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKTsKLQotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzUGFyYW1ldGVyVmFsdWVzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotCi0gIHB1YmxpYyB2b2lkIHNldFBhcmFtZXRlclZhbHVlcyhTdHJpbmcgcGFyYW1LZXksIFN0cmluZ1tdIHBhcmFtcyk7Ci0gICAgcHVibGljIHZvaWQgc2V0UGFyYW1ldGVyVmFsdWVzKFN0cmluZyBwYXJhbUtleSwgVmVjdG9yIHBhcmFtcyk7Ci0gIHB1YmxpYyBTdHJpbmdbXSBnZXRQYXJhbWV0ZXJWYWx1ZXMoU3RyaW5nIHBhcmFtS2V5KTsKLSAgcHVibGljIFN0cmluZyBnZXRQYXJhbWV0ZXJWYWx1ZShTdHJpbmcgcGFyYW1LZXksIGludCBwYXJhbUluZGV4KTsKLQotICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZUFsbFBhcmFtZXRlclZhbHVlcygpOwotICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZVBhcmFtZXRlclZhbHVlcyhTdHJpbmcgcGFyYW1LZXkpOwotICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZVBhcmFtZXRlclZhbHVlKFN0cmluZyBwYXJhbUtleSwgaW50IHBhcmFtSW5kZXgpOwotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5mb3JtYXRpb25GcmFnbWVudCgpOwotICBwdWJsaWMgU3RyaW5nIGdldFdyaXRlRnJhZ21lbnQoKTsKLSAgcHVibGljIFN0cmluZyBnZXRSZWFkRnJhZ21lbnQoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JU09BUEVuY0FycmF5RnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JU09BUEVuY0FycmF5RnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWVmYTZkZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVNPQVBFbmNBcnJheUZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQ7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSVNPQVBFbmNBcnJheUZyYWdtZW50IGV4dGVuZHMgSVhTREdyb3VwU2VxRnJhZ21lbnQgewotICBwdWJsaWMgU3RyaW5nIGNyZWF0ZVNPQVBFbmNBcnJheUluc3RhbmNlKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVNPQVBFbmNvZGluZ1dyYXBwZXJGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lTT0FQRW5jb2RpbmdXcmFwcGVyRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTg2NTBjZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVNPQVBFbmNvZGluZ1dyYXBwZXJGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50OwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLQotcHVibGljIGludGVyZmFjZSBJU09BUEVuY29kaW5nV3JhcHBlckZyYWdtZW50IGV4dGVuZHMgSVhTRERlbGVnYXRpb25GcmFnbWVudAotewotICBwdWJsaWMgdm9pZCBzZXRVUklSZWZlcmVuY2VzKEhhc2h0YWJsZSB1cmlSZWZlcmVuY2VzKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNEQXR0cmlidXRlRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNEQXR0cmlidXRlRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODhmMjNjZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVhTREF0dHJpYnV0ZUZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0vKioKLSogPGNvcHlyaWdodD4KLSoKLSogTGljZW5zZWQgTWF0ZXJpYWwgLSBQcm9wZXJ0eSBvZiBJQk0KLSogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwMiAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0qIFVTIEdvdmVybm1lbnQgVXNlcnMgUmVzdHJpY3RlZCBSaWdodHMgLSBVc2UsIGR1cGxpY2F0aW9uIG9yIGRpc2Nsb3N1cmUKLSogcmVzdHJpY3RlZCBieSBHU0EgQURQIFNjaGVkdWxlIENvbnRyYWN0IHdpdGggSUJNIENvcnAuCi0qCi0qIDwvY29weXJpZ2h0PgotKgotKiBGaWxlIHBsdWdpbnMvY29tLmlibS5ldG9vbHMud2Vic2VydmljZS5leHBsb3Jlci93c2V4cGxvcmVyL3NyYy9jb20vaWJtL2V0b29scy93ZWJzZXJ2aWNlL2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvSVhTREVsZW1lbnRGcmFnbWVudC5qYXZhLCB3c2EuZXRvb2xzLndzLmV4cGxvcmVyLCBsdW5hci01LjEuMiwgMjAwMzEyMzFhIDEKLSogVmVyc2lvbiAxLjEgMDMvMDIvMjggMTU6MjY6MDUKLSovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50OwotCi1wdWJsaWMgaW50ZXJmYWNlIElYU0RBdHRyaWJ1dGVGcmFnbWVudCBleHRlbmRzIElYU0REZWxlZ2F0aW9uRnJhZ21lbnQgewotICAKLSAgCi0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0RDb21wbGV4RnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNEQ29tcGxleEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2MWZmYzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0RDb21wbGV4RnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudDsKLQotcHVibGljIGludGVyZmFjZSBJWFNEQ29tcGxleEZyYWdtZW50IGV4dGVuZHMgSVhTRE1hcEZyYWdtZW50IHsKLSAgcHVibGljIFN0cmluZyBjcmVhdGVDb21wbGV4SW5zdGFuY2UoKTsKLSAgcHVibGljIElYU0RBdHRyaWJ1dGVGcmFnbWVudFtdIGdldEFsbEF0dHJpYnV0ZUZyYWdtZW50cygpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0REZWxlZ2F0aW9uRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNERGVsZWdhdGlvbkZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzNTUzNTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0REZWxlZ2F0aW9uRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudDsKLQotcHVibGljIGludGVyZmFjZSBJWFNERGVsZWdhdGlvbkZyYWdtZW50IGV4dGVuZHMgSVhTREZyYWdtZW50IHsKLSAgcHVibGljIHZvaWQgc2V0WFNERGVsZWdhdGlvbkZyYWdtZW50KElYU0RGcmFnbWVudCB4c2RGcmFnbWVudCk7Ci0gIHB1YmxpYyBJWFNERnJhZ21lbnQgZ2V0WFNERGVsZWdhdGlvbkZyYWdtZW50KCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVhTREVsZW1lbnRGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0RFbGVtZW50RnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThjYWU3Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVhTREVsZW1lbnRGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50OwotCi1wdWJsaWMgaW50ZXJmYWNlIElYU0RFbGVtZW50RnJhZ21lbnQgZXh0ZW5kcyBJWFNERGVsZWdhdGlvbkZyYWdtZW50IHsKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgTklMID0gIm5pbFZhbHVlIjsgIAotICBwdWJsaWMgc3RhdGljIFN0cmluZyBOSUxfVkFMVUUgPSAibmlsIjsgCi0gIAotICBwdWJsaWMgaW50IGdldE1pbk9jY3VycygpOwotICBwdWJsaWMgaW50IGdldE1heE9jY3VycygpOwotICBwdWJsaWMgYm9vbGVhbiBpc05pbGxhYmxlKCk7Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0TmlsSUQoKTsKLSAgcHVibGljIGJvb2xlYW4gaXNOaWwoKTsKLSAgCi0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0RGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0RGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGE1NTUzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNERnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLQotCi1wdWJsaWMgaW50ZXJmYWNlIElYU0RGcmFnbWVudCBleHRlbmRzIElGcmFnbWVudCB7Ci0gIHB1YmxpYyB2b2lkIHNldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZyk7Ci0gIHB1YmxpYyBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBnZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotCi0gIHB1YmxpYyB2b2lkIHNldFhTRFR5cGVEZWZpbml0aW9uKFhTRFR5cGVEZWZpbml0aW9uIHR5cGVEZWYpOwotICBwdWJsaWMgWFNEVHlwZURlZmluaXRpb24gZ2V0WFNEVHlwZURlZmluaXRpb24oKTsKLSAgcHVibGljIEVsZW1lbnQgc2V0QXR0cmlidXRlc09uSW5zdGFuY2VEb2N1bWVudHMoRWxlbWVudCBpbnN0YW5jZURvY3VtZW50LFN0cmluZyBuYW1lKTsKLSAgcHVibGljIGJvb2xlYW4gc2V0QXR0cmlidXRlUGFyYW1zRnJvbUluc3RhbmNlRG9jdW1lbnRzIChOb2RlIGF0dHJpYnV0ZSk7Ci0gIHB1YmxpYyBib29sZWFuIHNldFBhcmFtZXRlclZhbHVlc0Zyb21JbnN0YW5jZURvY3VtZW50cyhFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMpOwotICBwdWJsaWMgRWxlbWVudFtdIGdlbkluc3RhbmNlRG9jdW1lbnRzRnJvbVBhcmFtZXRlclZhbHVlcyhib29sZWFuIGdlblhTSVR5cGUsIEhhc2h0YWJsZSBuYW1lc3BhY2VUYWJsZSwgRG9jdW1lbnQgZG9jKTsKLQotICBwdWJsaWMgU3RyaW5nIGdlbklEKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVhTREdyb3VwQWxsRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNER3JvdXBBbGxGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMmFlZTU4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNER3JvdXBBbGxGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50OwotCi1wdWJsaWMgaW50ZXJmYWNlIElYU0RHcm91cEFsbEZyYWdtZW50IGV4dGVuZHMgSVhTREdyb3VwRnJhZ21lbnQgewotICBwdWJsaWMgU3RyaW5nIGdldEdyb3VwQWxsSW5zdGFuY2UoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNER3JvdXBDaG9pY2VGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0RHcm91cENob2ljZUZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0MTA5MjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0RHcm91cENob2ljZUZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEUGFydGljbGU7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSVhTREdyb3VwQ2hvaWNlRnJhZ21lbnQgZXh0ZW5kcyBJWFNER3JvdXBGcmFnbWVudCB7Ci0gIHB1YmxpYyBYU0RQYXJ0aWNsZVtdIGdldENob2ljZXMoKTsKLSAgcHVibGljIFN0cmluZyBjcmVhdGVHcm91cENob2ljZUluc3RhbmNlKGludCBjaG9pY2VJbmRleCk7Ci0gIHB1YmxpYyBpbnQgZ2V0Q2hvaWNlSW5kZXgoU3RyaW5nIGdyb3VwSUQpOwotICBwdWJsaWMgdm9pZCBzZXRDaG9pY2VJbmRleChTdHJpbmcgZ3JvdXBJRCwgaW50IGNob2ljZUluZGV4KTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9JWFNER3JvdXBGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0RHcm91cEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0NDQ4MzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0RHcm91cEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETW9kZWxHcm91cDsKLQotcHVibGljIGludGVyZmFjZSBJWFNER3JvdXBGcmFnbWVudCBleHRlbmRzIElYU0RNYXBGcmFnbWVudCB7Ci0gIHB1YmxpYyB2b2lkIHNldFhTRE1vZGVsR3JvdXAoWFNETW9kZWxHcm91cCB4c2RNb2RlbEdyb3VwKTsKLSAgcHVibGljIFhTRE1vZGVsR3JvdXAgZ2V0WFNETW9kZWxHcm91cCgpOwotCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRHcm91cElEcygpOwotICBwdWJsaWMgU3RyaW5nW10gZ2V0R3JvdXBNZW1iZXJJRHMoU3RyaW5nIGdyb3VwSUQpOwotICBwdWJsaWMgSVhTREZyYWdtZW50W10gZ2V0R3JvdXBNZW1iZXJGcmFnbWVudHMoU3RyaW5nIGdyb3VwSUQpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0RHcm91cFNlcUZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVhTREdyb3VwU2VxRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGY1OGZhYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVhTREdyb3VwU2VxRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudDsKLQotcHVibGljIGludGVyZmFjZSBJWFNER3JvdXBTZXFGcmFnbWVudCBleHRlbmRzIElYU0RHcm91cEZyYWdtZW50IHsKLSAgcHVibGljIFN0cmluZyBjcmVhdGVHcm91cFNlcUluc3RhbmNlKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVhTRE1hcEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVhTRE1hcEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1MWU0MDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0RNYXBGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50OwotCi1wdWJsaWMgaW50ZXJmYWNlIElYU0RNYXBGcmFnbWVudCBleHRlbmRzIElYU0RGcmFnbWVudCB7Ci0gIHB1YmxpYyB2b2lkIHNldFhTRFRvRnJhZ21lbnRDb250cm9sbGVyKFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGNvbnRyb2xsZXIpOwotICBwdWJsaWMgWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgZ2V0WFNEVG9GcmFnbWVudENvbnRyb2xsZXIoKTsKLQotICBwdWJsaWMgU3RyaW5nIGNyZWF0ZUluc3RhbmNlKCk7Ci0KLSAgcHVibGljIFN0cmluZ1tdIGdldEZyYWdtZW50c09yZGVyKCk7Ci0gIHB1YmxpYyBJWFNERnJhZ21lbnQgZ2V0RnJhZ21lbnQoU3RyaW5nIGlkKTsKLSAgcHVibGljIElYU0RGcmFnbWVudFtdIGdldEZyYWdtZW50cyhTdHJpbmdbXSBpZHMpOwotICBwdWJsaWMgSVhTREZyYWdtZW50W10gZ2V0QWxsRnJhZ21lbnRzKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVhTRFNpbXBsZUF0b21pY0ZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVhTRFNpbXBsZUF0b21pY0ZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2NThkNWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0RTaW1wbGVBdG9taWNGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50OwotCi1wdWJsaWMgaW50ZXJmYWNlIElYU0RTaW1wbGVBdG9taWNGcmFnbWVudCBleHRlbmRzIElYU0RGcmFnbWVudCB7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVhTRFNpbXBsZUxpc3RGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0RTaW1wbGVMaXN0RnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmFiMzgwOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVhTRFNpbXBsZUxpc3RGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50OwotCi1wdWJsaWMgaW50ZXJmYWNlIElYU0RTaW1wbGVMaXN0RnJhZ21lbnQgZXh0ZW5kcyBJWFNETWFwRnJhZ21lbnQgewotICBwdWJsaWMgU3RyaW5nIGNyZWF0ZUxpc3RJbnN0YW5jZSgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L0lYU0RTaW1wbGVVbmlvbkZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVhTRFNpbXBsZVVuaW9uRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzdkY2FkOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvSVhTRFNpbXBsZVVuaW9uRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTaW1wbGVUeXBlRGVmaW5pdGlvbjsKLQotcHVibGljIGludGVyZmFjZSBJWFNEU2ltcGxlVW5pb25GcmFnbWVudCBleHRlbmRzIElYU0RNYXBGcmFnbWVudCB7Ci0gIHB1YmxpYyBYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbltdIGdldE1lbWJlclR5cGVEZWZpbml0aW9ucygpOwotICBwdWJsaWMgU3RyaW5nIGNyZWF0ZVVuaW9uSW5zdGFuY2UoaW50IG1lbWJlclR5cGVJbmRleCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvWFNEQXR0cmlidXRlVXNlVG9GcmFnbWVudE1hcHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L1hTREF0dHJpYnV0ZVVzZVRvRnJhZ21lbnRNYXBwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWJlMTBlZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvWFNEQXR0cmlidXRlVXNlVG9GcmFnbWVudE1hcHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotLyoqCi0qIDxjb3B5cmlnaHQ+Ci0qCi0qIExpY2Vuc2VkIE1hdGVyaWFsIC0gUHJvcGVydHkgb2YgSUJNCi0qIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDIgLSBBbGwgUmlnaHRzIFJlc2VydmVkLgotKiBVUyBHb3Zlcm5tZW50IFVzZXJzIFJlc3RyaWN0ZWQgUmlnaHRzIC0gVXNlLCBkdXBsaWNhdGlvbiBvciBkaXNjbG9zdXJlCi0qIHJlc3RyaWN0ZWQgYnkgR1NBIEFEUCBTY2hlZHVsZSBDb250cmFjdCB3aXRoIElCTSBDb3JwLgotKgotKiA8L2NvcHlyaWdodD4KLSoKLSogRmlsZSBwbHVnaW5zL2NvbS5pYm0uZXRvb2xzLndlYnNlcnZpY2UuZXhwbG9yZXIvd3NleHBsb3Jlci9zcmMvY29tL2libS9ldG9vbHMvd2Vic2VydmljZS9leHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTREVsZW1lbnREZWNsYXJhdGlvblRvRnJhZ21lbnRNYXBwZXIuamF2YSwgd3NhLmV0b29scy53cy5leHBsb3JlciwgbHVuYXItNS4xLjIsIDIwMDMxMjMxYSAyCi0qIFZlcnNpb24gMS4yIDAzLzA2LzA1IDE0OjE3OjQ0Ci0qLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuWFNEQXR0cmlidXRlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwueHNkLldTRExQYXJ0c1RvWFNEVHlwZU1hcHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQXR0cmlidXRlRGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREF0dHJpYnV0ZVVzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RUeXBlRGVmaW5pdGlvbjsKLQotcHVibGljIGNsYXNzIFhTREF0dHJpYnV0ZVVzZVRvRnJhZ21lbnRNYXBwZXIgZXh0ZW5kcyBYU0RUb0ZyYWdtZW50TWFwcGVyIHsKLSAgcHVibGljIFhTREF0dHJpYnV0ZVVzZVRvRnJhZ21lbnRNYXBwZXIoWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgY29udHJvbGxlciwgV1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyIHdzZGxUb1hTRE1hcHBlcikgewotICAgIHN1cGVyKGNvbnRyb2xsZXIsIHdzZGxUb1hTRE1hcHBlcik7Ci0gIH0KLQotICBwdWJsaWMgSVhTREZyYWdtZW50IGdldEZyYWdtZW50KFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSkgewotICAgCVhTREF0dHJpYnV0ZVVzZSBhdHRyaWJ1dGUgPSAoWFNEQXR0cmlidXRlVXNlKWNvbmZpZy5nZXRYU0RDb21wb25lbnQoKTsKLSAgICBpZiAoYXR0cmlidXRlICE9IG51bGwgJiYgYXR0cmlidXRlLmdldEF0dHJpYnV0ZURlY2xhcmF0aW9uKCkgIT0gbnVsbCkgewotICAgCSAgWFNEQXR0cmlidXRlRGVjbGFyYXRpb24gcmVzb2x2ZWRBdHRyaWJ1dGUgPSByZXNvbHZlWFNEQXR0cmlidXRlRGVjbGFyYXRpb24oYXR0cmlidXRlLmdldEF0dHJpYnV0ZURlY2xhcmF0aW9uKCkpOwotICAgICAgWFNEVHlwZURlZmluaXRpb24gdHlwZURlZiA9IGdldFhTRFR5cGVEZWZpbml0aW9uKHJlc29sdmVkQXR0cmlidXRlKTsKLSAgICAgIElYU0RBdHRyaWJ1dGVGcmFnbWVudCBhdHRyaWJ1dGVGcmFnID0gbmV3IFhTREF0dHJpYnV0ZUZyYWdtZW50KGlkLCByZXNvbHZlZEF0dHJpYnV0ZS5nZXROYW1lKCksIGNvbmZpZyk7Ci0gICAgICBhdHRyaWJ1dGVGcmFnLnNldFhTRFR5cGVEZWZpbml0aW9uKHR5cGVEZWYpOwotICAgICAgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gYXR0cmlidXRlVHlwZUNvbmZpZyA9IG5ldyBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotICAgICAgYXR0cmlidXRlVHlwZUNvbmZpZy5zZXRYU0RDb21wb25lbnQodHlwZURlZik7Ci0gICAgICBhdHRyaWJ1dGVUeXBlQ29uZmlnLnNldFN0eWxlKGNvbmZpZy5nZXRTdHlsZSgpKTsKLSAgICAgIGF0dHJpYnV0ZVR5cGVDb25maWcuc2V0UGFydEVuY29kaW5nKGNvbmZpZy5nZXRQYXJ0RW5jb2RpbmcoKSk7Ci0gICAgICBhdHRyaWJ1dGVUeXBlQ29uZmlnLnNldFdTRExQYXJ0TmFtZShjb25maWcuZ2V0V1NETFBhcnROYW1lKCkpOwotICAgICAgSVhTREZyYWdtZW50IHhzZEZyYWdtZW50ID0gZ2V0Q29udHJvbGxlcigpLmdldEZyYWdtZW50KGF0dHJpYnV0ZVR5cGVDb25maWcsIGF0dHJpYnV0ZUZyYWcuZ2VuSUQoKSwgcmVzb2x2ZWRBdHRyaWJ1dGUuZ2V0TmFtZSgpKTsKLSAgICAgIGF0dHJpYnV0ZUZyYWcuc2V0WFNERGVsZWdhdGlvbkZyYWdtZW50KHhzZEZyYWdtZW50KTsKLSAgICAgIHJldHVybiBhdHRyaWJ1dGVGcmFnOwotICAgIH0KLSAgICByZXR1cm4gZ2V0WFNERGVmYXVsdEZyYWdtZW50KGNvbmZpZywgaWQsIG5hbWUpOwotICB9Ci0KLSAgcHJpdmF0ZSBYU0RBdHRyaWJ1dGVEZWNsYXJhdGlvbiByZXNvbHZlWFNEQXR0cmlidXRlRGVjbGFyYXRpb24oWFNEQXR0cmlidXRlRGVjbGFyYXRpb24gYXR0cmlidXRlKSB7Ci0gICAgLy8gcG9ydCB0byBvcmcuZWNsaXBzZS54c2QKLSAgICBpZiAoYXR0cmlidXRlLmdldFJlc29sdmVkQXR0cmlidXRlRGVjbGFyYXRpb24oKSAhPSBudWxsKQotICAgIHsKLSAgICAgIFhTREF0dHJpYnV0ZURlY2xhcmF0aW9uIHJlc29sdmVkQXR0cmlidXRlID0gYXR0cmlidXRlLmdldFJlc29sdmVkQXR0cmlidXRlRGVjbGFyYXRpb24oKTsKLSAgICAgIGlmICghaXNDb21wb25lbnRSZXNvbHZhYmxlKHJlc29sdmVkQXR0cmlidXRlKSkKLSAgICAgIHsKLSAgICAgICAgWFNEQ29tcG9uZW50IHJlc29sdmVkQ29tcG9uZW50ID0gZ2V0V1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyKCkucmVzb2x2ZVhTRE5hbWVkQ29tcG9uZW50KHJlc29sdmVkQXR0cmlidXRlKTsKLSAgICAgICAgaWYgKHJlc29sdmVkQ29tcG9uZW50ICE9IG51bGwgJiYgKHJlc29sdmVkQ29tcG9uZW50IGluc3RhbmNlb2YgWFNEQXR0cmlidXRlRGVjbGFyYXRpb24pKQotICAgICAgICAgIHJlc29sdmVkQXR0cmlidXRlID0gKFhTREF0dHJpYnV0ZURlY2xhcmF0aW9uKXJlc29sdmVkQ29tcG9uZW50OwotICAgICAgfQotICAgICAgcmV0dXJuIHJlc29sdmVkQXR0cmlidXRlOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gYXR0cmlidXRlOwotICB9Ci0KLSAgcHJpdmF0ZSBYU0RUeXBlRGVmaW5pdGlvbiBnZXRYU0RUeXBlRGVmaW5pdGlvbihYU0RBdHRyaWJ1dGVEZWNsYXJhdGlvbiBhdHRyaWJ1dGUpIHsKLSAgICAvLyBwb3J0IHRvIG9yZy5lY2xpcHNlLnhzZAotICAgIGlmIChhdHRyaWJ1dGUuZ2V0VHlwZURlZmluaXRpb24oKSAhPSBudWxsKQotICAgICAgcmV0dXJuIGF0dHJpYnV0ZS5nZXRUeXBlRGVmaW5pdGlvbigpOwotICAgIC8vIHBvcnQgdG8gb3JnLmVjbGlwc2UueHNkCi0gICAgZWxzZSBpZiAoYXR0cmlidXRlLmdldEFub255bW91c1R5cGVEZWZpbml0aW9uKCkgIT0gbnVsbCkKLSAgICAgIHJldHVybiBhdHRyaWJ1dGUuZ2V0QW5vbnltb3VzVHlwZURlZmluaXRpb24oKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9YU0RDb21wbGV4VHlwZVRvRnJhZ21lbnRNYXBwZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9YU0RDb21wbGV4VHlwZVRvRnJhZ21lbnRNYXBwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQ4OWEyOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvWFNEQ29tcGxleFR5cGVUb0ZyYWdtZW50TWFwcGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLlhTRENvbXBsZXhGaXhGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLlhTRENvbXBsZXhSYW5nZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuWFNEQ29tcGxleFNpbXBsZUNvbnRlbnRGaXhGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLlhTRENvbXBsZXhTaW1wbGVDb250ZW50UmFuZ2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC51dGlsLlhTRFR5cGVEZWZpbml0aW9uVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC54c2QuV1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wbGV4VHlwZUNvbnRlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29udGVudFR5cGVDYXRlZ29yeTsKLQotcHVibGljIGNsYXNzIFhTRENvbXBsZXhUeXBlVG9GcmFnbWVudE1hcHBlciBleHRlbmRzIFhTRFRvRnJhZ21lbnRNYXBwZXIgewotICBwdWJsaWMgWFNEQ29tcGxleFR5cGVUb0ZyYWdtZW50TWFwcGVyKFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGNvbnRyb2xsZXIsIFdTRExQYXJ0c1RvWFNEVHlwZU1hcHBlciB3c2RsVG9YU0RNYXBwZXIpIHsKLSAgICBzdXBlcihjb250cm9sbGVyLCB3c2RsVG9YU0RNYXBwZXIpOwotICB9Ci0KLSAgcHVibGljIElYU0RGcmFnbWVudCBnZXRGcmFnbWVudChYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFN0cmluZyBpZCwgU3RyaW5nIG5hbWUpIHsKLSAgICBYU0RDb21wbGV4VHlwZURlZmluaXRpb24gY29tcGxleFR5cGUgPSAoWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKWNvbmZpZy5nZXRYU0RDb21wb25lbnQoKTsKLSAgICBpbnQgY2F0ZWdvcnkgPSBjb21wbGV4VHlwZS5nZXRDb250ZW50VHlwZUNhdGVnb3J5KCkuZ2V0VmFsdWUoKTsKLSAgICBpZiAoY29tcGxleFR5cGUgIT0gbnVsbCAmJiBjb21wbGV4VHlwZS5pc01peGVkKCkpCi0gICAgICByZXR1cm4gZ2V0WFNERGVmYXVsdEZyYWdtZW50KGNvbmZpZywgaWQsIG5hbWUpOwotICAgIFhTRENvbXBsZXhUeXBlQ29udGVudCBjb21wbGV4VHlwZUNvbnRlbnQgPSBYU0RUeXBlRGVmaW5pdGlvblV0aWwuZ2V0WFNEQ29tcGxleFR5cGVDb250ZW50KGNvbXBsZXhUeXBlKTsKLSAgICBpZiAoY29tcGxleFR5cGVDb250ZW50ICE9IG51bGwpCi0gICAgICByZXR1cm4gZ2V0WFNEQ29tcGxleEZyYWdtZW50KGNhdGVnb3J5LGNvbmZpZywgaWQsIG5hbWUpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBnZXRYU0RFbXB0eUZyYWdtZW50KGNvbmZpZywgaWQsIG5hbWUpOwotICB9Ci0KLSAgcHJpdmF0ZSBJWFNERnJhZ21lbnQgZ2V0WFNEQ29tcGxleEZyYWdtZW50KGludCBjYXRlZ29yeSxYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFN0cmluZyBpZCwgU3RyaW5nIG5hbWUpIHsKLSAgICBpbnQgbWluT2NjdXJzID0gY29uZmlnLmdldE1pbk9jY3VycygpOwotICAgIGludCBtYXhPY2N1cnMgPSBjb25maWcuZ2V0TWF4T2NjdXJzKCk7Ci0gICAgaWYgKG1pbk9jY3VycyA9PSBtYXhPY2N1cnMpCi0gICAgICBpZihjYXRlZ29yeSA9PSBYU0RDb250ZW50VHlwZUNhdGVnb3J5LlNJTVBMRSl7Ci0gICAgICAJcmV0dXJuIG5ldyBYU0RDb21wbGV4U2ltcGxlQ29udGVudEZpeEZyYWdtZW50KGlkLCBuYW1lLCBjb25maWcsIGdldENvbnRyb2xsZXIoKSk7Ci0gICAgICAgIAotICAgICAgfQotICAgICAgZWxzZQkKLSAgICAgIAlyZXR1cm4gbmV3IFhTRENvbXBsZXhGaXhGcmFnbWVudChpZCwgbmFtZSwgY29uZmlnLCBnZXRDb250cm9sbGVyKCkpOwotICAgIGVsc2UgCi0gICAgCWlmKGNhdGVnb3J5ID09IFhTRENvbnRlbnRUeXBlQ2F0ZWdvcnkuU0lNUExFKQotICAgIAkgIHJldHVybiBuZXcgWFNEQ29tcGxleFNpbXBsZUNvbnRlbnRSYW5nZUZyYWdtZW50KGlkLCBuYW1lLCBjb25maWcsIGdldENvbnRyb2xsZXIoKSk7Ci0gICAgCWVsc2UKLSAgICAgICAgICByZXR1cm4gbmV3IFhTRENvbXBsZXhSYW5nZUZyYWdtZW50KGlkLCBuYW1lLCBjb25maWcsIGdldENvbnRyb2xsZXIoKSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9YU0RFbGVtZW50RGVjbGFyYXRpb25Ub0ZyYWdtZW50TWFwcGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvWFNERWxlbWVudERlY2xhcmF0aW9uVG9GcmFnbWVudE1hcHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjRkNmEwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9YU0RFbGVtZW50RGVjbGFyYXRpb25Ub0ZyYWdtZW50TWFwcGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDQwNCAgIDE4MTA2NSBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFIGRvZXMgbm90IGhhbmRsZSB0eXBlcyByZWZlcmVuY2VkIGFjcm9zcyBpbmxpbmUgc2NoZW1hcwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLkZyYWdtZW50Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuWFNERWxlbWVudEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnhzZC5XU0RMUGFydHNUb1hTRFR5cGVNYXBwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29uY3JldGVDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEUGFydGljbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFR5cGVEZWZpbml0aW9uOwotCi0KLXB1YmxpYyBjbGFzcyBYU0RFbGVtZW50RGVjbGFyYXRpb25Ub0ZyYWdtZW50TWFwcGVyIGV4dGVuZHMgWFNEVG9GcmFnbWVudE1hcHBlciB7Ci0gIHB1YmxpYyBYU0RFbGVtZW50RGVjbGFyYXRpb25Ub0ZyYWdtZW50TWFwcGVyKFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGNvbnRyb2xsZXIsIFdTRExQYXJ0c1RvWFNEVHlwZU1hcHBlciB3c2RsVG9YU0RNYXBwZXIpIHsKLSAgICBzdXBlcihjb250cm9sbGVyLCB3c2RsVG9YU0RNYXBwZXIpOwotICB9Ci0KLSAgcHVibGljIElYU0RGcmFnbWVudCBnZXRGcmFnbWVudChYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFN0cmluZyBpZCwgU3RyaW5nIG5hbWUpIHsKLSAgICBYU0RFbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudCA9IChYU0RFbGVtZW50RGVjbGFyYXRpb24pY29uZmlnLmdldFhTRENvbXBvbmVudCgpOwotICAgIGlmIChlbGVtZW50ICE9IG51bGwpIHsKLSAgICAgIFhTREVsZW1lbnREZWNsYXJhdGlvbiByZXNvbHZlZEVsZW1lbnQgPSByZXNvbHZlWFNERWxlbWVudERlY2xhcmF0aW9uKGVsZW1lbnQpOwotICAgICAgWFNEVHlwZURlZmluaXRpb24gdHlwZURlZiA9IHJlc29sdmVYU0RUeXBlRGVmaW5pdGlvbihnZXRYU0RUeXBlRGVmaW5pdGlvbihyZXNvbHZlZEVsZW1lbnQpKTsKLSAgICAgIGlmICh0eXBlRGVmICE9IG51bGwpIHsKLSAgICAgICAgaW50IG1pbk9jY3VycyA9IEZyYWdtZW50Q29uc3RhbnRzLkRFRkFVTFRfTUlOX09DQ1VSUzsKLSAgICAgICAgaW50IG1heE9jY3VycyA9IEZyYWdtZW50Q29uc3RhbnRzLkRFRkFVTFRfTUFYX09DQ1VSUzsKLSAgICAgICAgWFNEQ29uY3JldGVDb21wb25lbnQgY29uY3JldGVDb21wb25lbnQgPSBlbGVtZW50LmdldENvbnRhaW5lcigpOwotICAgICAgICBpZiAoY29uY3JldGVDb21wb25lbnQgIT0gbnVsbCAmJiBjb25jcmV0ZUNvbXBvbmVudCBpbnN0YW5jZW9mIFhTRFBhcnRpY2xlKSB7Ci0gICAgICAgICAgWFNEUGFydGljbGUgcGFydGljbGUgPSAoWFNEUGFydGljbGUpY29uY3JldGVDb21wb25lbnQ7Ci0gICAgICAgICAgaWYgKHBhcnRpY2xlLmlzU2V0TWluT2NjdXJzKCkpCi0gICAgICAgICAgICBtaW5PY2N1cnMgPSBwYXJ0aWNsZS5nZXRNaW5PY2N1cnMoKTsKLSAgICAgICAgICBpZiAocGFydGljbGUuaXNTZXRNYXhPY2N1cnMoKSkKLSAgICAgICAgICAgIG1heE9jY3VycyA9IHBhcnRpY2xlLmdldE1heE9jY3VycygpOwotICAgICAgICB9Ci0gICAgICAgIGNvbmZpZy5zZXRNaW5PY2N1cnMobWluT2NjdXJzKTsKLSAgICAgICAgY29uZmlnLnNldE1heE9jY3VycyhtYXhPY2N1cnMpOwotICAgICAgICBJWFNERWxlbWVudEZyYWdtZW50IGVsZW1lbnRGcmFnID0gbmV3IFhTREVsZW1lbnRGcmFnbWVudChpZCwgcmVzb2x2ZWRFbGVtZW50LmdldE5hbWUoKSwgY29uZmlnKTsKLSAgICAgICAgZWxlbWVudEZyYWcuc2V0WFNEVHlwZURlZmluaXRpb24odHlwZURlZik7Ci0gICAgICAgIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGVsZW1lbnRUeXBlQ29uZmlnID0gbmV3IFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci0gICAgICAgIGVsZW1lbnRUeXBlQ29uZmlnLnNldFhTRENvbXBvbmVudCh0eXBlRGVmKTsKLSAgICAgICAgZWxlbWVudFR5cGVDb25maWcuc2V0TWluT2NjdXJzKG1pbk9jY3Vycyk7Ci0gICAgICAgIGVsZW1lbnRUeXBlQ29uZmlnLnNldE1heE9jY3VycyhtYXhPY2N1cnMpOwotICAgICAgICBlbGVtZW50VHlwZUNvbmZpZy5zZXRTdHlsZShjb25maWcuZ2V0U3R5bGUoKSk7Ci0gICAgICAgIGVsZW1lbnRUeXBlQ29uZmlnLnNldFBhcnRFbmNvZGluZyhjb25maWcuZ2V0UGFydEVuY29kaW5nKCkpOwotICAgICAgICBlbGVtZW50VHlwZUNvbmZpZy5zZXRXU0RMUGFydE5hbWUoY29uZmlnLmdldFdTRExQYXJ0TmFtZSgpKTsKLSAgICAgICAgSVhTREZyYWdtZW50IHhzZEZyYWdtZW50ID0gZ2V0Q29udHJvbGxlcigpLmdldEZyYWdtZW50KGVsZW1lbnRUeXBlQ29uZmlnLCBlbGVtZW50RnJhZy5nZW5JRCgpLCByZXNvbHZlZEVsZW1lbnQuZ2V0TmFtZSgpKTsKLSAgICAgICAgZWxlbWVudEZyYWcuc2V0WFNERGVsZWdhdGlvbkZyYWdtZW50KHhzZEZyYWdtZW50KTsKLSAgICAgICAgcmV0dXJuIGVsZW1lbnRGcmFnOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZ2V0WFNERGVmYXVsdEZyYWdtZW50KGNvbmZpZywgaWQsIG5hbWUpOwotICB9Ci0KLSAgcHJpdmF0ZSBYU0RFbGVtZW50RGVjbGFyYXRpb24gcmVzb2x2ZVhTREVsZW1lbnREZWNsYXJhdGlvbihYU0RFbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudCkgewotICAgIC8vIHBvcnQgdG8gb3JnLmVjbGlwc2UueHNkCi0gICAgaWYgKGVsZW1lbnQuZ2V0UmVzb2x2ZWRFbGVtZW50RGVjbGFyYXRpb24oKSAhPSBudWxsKQotICAgIHsKLSAgICAgIFhTREVsZW1lbnREZWNsYXJhdGlvbiByZXNvbHZlZEVsZW1lbnQgPSBlbGVtZW50LmdldFJlc29sdmVkRWxlbWVudERlY2xhcmF0aW9uKCk7Ci0gICAgICBpZiAoIWlzQ29tcG9uZW50UmVzb2x2YWJsZShyZXNvbHZlZEVsZW1lbnQpKQotICAgICAgewotICAgICAgICBYU0RDb21wb25lbnQgcmVzb2x2ZWRDb21wb25lbnQgPSBnZXRXU0RMUGFydHNUb1hTRFR5cGVNYXBwZXIoKS5yZXNvbHZlWFNETmFtZWRDb21wb25lbnQocmVzb2x2ZWRFbGVtZW50KTsKLSAgICAgICAgaWYgKHJlc29sdmVkQ29tcG9uZW50ICE9IG51bGwgJiYgKHJlc29sdmVkQ29tcG9uZW50IGluc3RhbmNlb2YgWFNERWxlbWVudERlY2xhcmF0aW9uKSkKLSAgICAgICAgICByZXNvbHZlZEVsZW1lbnQgPSAoWFNERWxlbWVudERlY2xhcmF0aW9uKXJlc29sdmVkQ29tcG9uZW50OwotICAgICAgfQotICAgICAgcmV0dXJuIHJlc29sdmVkRWxlbWVudDsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGVsZW1lbnQ7Ci0gIH0KLSAgCi0gIHByaXZhdGUgWFNEVHlwZURlZmluaXRpb24gcmVzb2x2ZVhTRFR5cGVEZWZpbml0aW9uKFhTRFR5cGVEZWZpbml0aW9uIHR5cGVEZWYpIHsKLQkgIAotCSAgaWYgKCFpc0NvbXBvbmVudFJlc29sdmFibGUodHlwZURlZikpIHsKLQkJICBYU0RDb21wb25lbnQgcmVzb2x2ZWRDb21wb25lbnQgPSBnZXRXU0RMUGFydHNUb1hTRFR5cGVNYXBwZXIoKS5yZXNvbHZlWFNETmFtZWRDb21wb25lbnQodHlwZURlZik7Ci0JCSAgaWYgKHJlc29sdmVkQ29tcG9uZW50IGluc3RhbmNlb2YgWFNEVHlwZURlZmluaXRpb24pCi0JCQkgIHJldHVybiAoWFNEVHlwZURlZmluaXRpb24pIHJlc29sdmVkQ29tcG9uZW50OwotCSAgfQotCSAgCi0JICByZXR1cm4gdHlwZURlZjsKLSAgfQotCi0gIHByaXZhdGUgWFNEVHlwZURlZmluaXRpb24gZ2V0WFNEVHlwZURlZmluaXRpb24oWFNERWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnQpIHsKLSAgICAvLyBwb3J0IHRvIG9yZy5lY2xpcHNlLnhzZAotICAgIGlmIChlbGVtZW50LmdldFR5cGVEZWZpbml0aW9uKCkgIT0gbnVsbCkKLSAgICAgIHJldHVybiBlbGVtZW50LmdldFR5cGVEZWZpbml0aW9uKCk7Ci0gICAgLy8gcG9ydCB0byBvcmcuZWNsaXBzZS54c2QKLSAgICBlbHNlIGlmIChlbGVtZW50LmdldEFub255bW91c1R5cGVEZWZpbml0aW9uKCkgIT0gbnVsbCkKLSAgICAgIHJldHVybiBlbGVtZW50LmdldEFub255bW91c1R5cGVEZWZpbml0aW9uKCk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvWFNETGl0ZXJhbFhNTEVuY29kaW5nVG9GcmFnbWVudE1hcHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L1hTRExpdGVyYWxYTUxFbmNvZGluZ1RvRnJhZ21lbnRNYXBwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQwMmQ5Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvWFNETGl0ZXJhbFhNTEVuY29kaW5nVG9GcmFnbWVudE1hcHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwueHNkLldTRExQYXJ0c1RvWFNEVHlwZU1hcHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQXR0cmlidXRlVXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wbGV4VHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RQYXJ0aWNsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEUGFydGljbGVDb250ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTaW1wbGVUeXBlRGVmaW5pdGlvbjsKLQotcHVibGljIGNsYXNzIFhTRExpdGVyYWxYTUxFbmNvZGluZ1RvRnJhZ21lbnRNYXBwZXIgZXh0ZW5kcyBYU0RUb0ZyYWdtZW50TWFwcGVyIHsKLSAgcHJpdmF0ZSBYU0RTaW1wbGVUeXBlVG9GcmFnbWVudE1hcHBlciB4c2RTaW1wbGVNYXBwZXJfOwotICBwcml2YXRlIFhTRENvbXBsZXhUeXBlVG9GcmFnbWVudE1hcHBlciB4c2RDb21wbGV4TWFwcGVyXzsKLSAgcHJpdmF0ZSBYU0RFbGVtZW50RGVjbGFyYXRpb25Ub0ZyYWdtZW50TWFwcGVyIHhzZEVsZW1lbnRNYXBwZXJfOwotICBwcml2YXRlIFhTREF0dHJpYnV0ZVVzZVRvRnJhZ21lbnRNYXBwZXIgeHNkQXR0cmlidXRlTWFwcGVyXzsKLSAgcHJpdmF0ZSBYU0RQYXJ0aWNsZVRvRnJhZ21lbnRNYXBwZXIgeHNkUGFydGljbGVNYXBwZXJfOwotCi0gIHB1YmxpYyBYU0RMaXRlcmFsWE1MRW5jb2RpbmdUb0ZyYWdtZW50TWFwcGVyKFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGNvbnRyb2xsZXIsIFdTRExQYXJ0c1RvWFNEVHlwZU1hcHBlciB3c2RsVG9YU0RNYXBwZXIpIHsKLSAgICBzdXBlcihjb250cm9sbGVyLCB3c2RsVG9YU0RNYXBwZXIpOwotICAgIHhzZFNpbXBsZU1hcHBlcl8gPSBudWxsOwotICAgIHhzZENvbXBsZXhNYXBwZXJfID0gbnVsbDsKLSAgICB4c2RFbGVtZW50TWFwcGVyXyA9IG51bGw7Ci0gICAgeHNkQXR0cmlidXRlTWFwcGVyXyA9IG51bGw7Ci0gICAgeHNkUGFydGljbGVNYXBwZXJfPSBudWxsOwotICB9Ci0KLSAgcHJpdmF0ZSBYU0RTaW1wbGVUeXBlVG9GcmFnbWVudE1hcHBlciBnZXRYU0RTaW1wbGVNYXBwZXIoKSB7Ci0gICAgaWYgKHhzZFNpbXBsZU1hcHBlcl8gPT0gbnVsbCkKLSAgICAgIHhzZFNpbXBsZU1hcHBlcl8gPSBuZXcgWFNEU2ltcGxlVHlwZVRvRnJhZ21lbnRNYXBwZXIoZ2V0Q29udHJvbGxlcigpLCBnZXRXU0RMUGFydHNUb1hTRFR5cGVNYXBwZXIoKSk7Ci0gICAgcmV0dXJuIHhzZFNpbXBsZU1hcHBlcl87Ci0gIH0KLQotICBwcml2YXRlIFhTRENvbXBsZXhUeXBlVG9GcmFnbWVudE1hcHBlciBnZXRYU0RDb21wbGV4TWFwcGVyKCkgewotICAgIGlmICh4c2RDb21wbGV4TWFwcGVyXyA9PSBudWxsKQotICAgICAgeHNkQ29tcGxleE1hcHBlcl8gPSBuZXcgWFNEQ29tcGxleFR5cGVUb0ZyYWdtZW50TWFwcGVyKGdldENvbnRyb2xsZXIoKSwgZ2V0V1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyKCkpOwotICAgIHJldHVybiB4c2RDb21wbGV4TWFwcGVyXzsKLSAgfQotCi0gIHByaXZhdGUgWFNERWxlbWVudERlY2xhcmF0aW9uVG9GcmFnbWVudE1hcHBlciBnZXRYU0RFbGVtZW50TWFwcGVyKCkgewotICAgIGlmICh4c2RFbGVtZW50TWFwcGVyXyA9PSBudWxsKQotICAgICAgeHNkRWxlbWVudE1hcHBlcl8gPSBuZXcgWFNERWxlbWVudERlY2xhcmF0aW9uVG9GcmFnbWVudE1hcHBlcihnZXRDb250cm9sbGVyKCksIGdldFdTRExQYXJ0c1RvWFNEVHlwZU1hcHBlcigpKTsKLSAgICByZXR1cm4geHNkRWxlbWVudE1hcHBlcl87Ci0gIH0KLQotICBwcml2YXRlIFhTREF0dHJpYnV0ZVVzZVRvRnJhZ21lbnRNYXBwZXIgZ2V0WFNEQXR0cmlidXRlTWFwcGVyKCkgewotICAgIGlmICh4c2RBdHRyaWJ1dGVNYXBwZXJfID09IG51bGwpCi0gICAgICB4c2RBdHRyaWJ1dGVNYXBwZXJfID0gbmV3IFhTREF0dHJpYnV0ZVVzZVRvRnJhZ21lbnRNYXBwZXIoZ2V0Q29udHJvbGxlcigpLCBnZXRXU0RMUGFydHNUb1hTRFR5cGVNYXBwZXIoKSk7Ci0gICAgcmV0dXJuIHhzZEF0dHJpYnV0ZU1hcHBlcl87Ci0gIH0KLSAgCi0gIHByaXZhdGUgWFNEUGFydGljbGVUb0ZyYWdtZW50TWFwcGVyIGdldFhTRFBhcnRpY2xlTWFwcGVyKCkgewotICAgIGlmICh4c2RQYXJ0aWNsZU1hcHBlcl8gPT0gbnVsbCkKLSAgICAgIHhzZFBhcnRpY2xlTWFwcGVyXyA9IG5ldyBYU0RQYXJ0aWNsZVRvRnJhZ21lbnRNYXBwZXIoZ2V0Q29udHJvbGxlcigpLCBnZXRXU0RMUGFydHNUb1hTRFR5cGVNYXBwZXIoKSk7Ci0gICAgcmV0dXJuIHhzZFBhcnRpY2xlTWFwcGVyXzsKLSAgfQotCi0gIHB1YmxpYyBJWFNERnJhZ21lbnQgZ2V0RnJhZ21lbnQoWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBTdHJpbmcgaWQsIFN0cmluZyBuYW1lKSB7Ci0gICAgY29uZmlnID0gcmVzb2x2ZVhTRENvbXBvbmVudChjb25maWcpOwotICAgIFhTRENvbXBvbmVudCBjb21wb25lbnQgPSBjb25maWcuZ2V0WFNEQ29tcG9uZW50KCk7Ci0gICAgaWYgKCFpc0NvbXBvbmVudFJlc29sdmFibGUoY29tcG9uZW50KSkKLSAgICAgIHJldHVybiBnZXRYU0REZWZhdWx0RnJhZ21lbnQoY29uZmlnLCBpZCwgbmFtZSk7Ci0gICAgZWxzZSBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgWFNERWxlbWVudERlY2xhcmF0aW9uKQotICAgICAgcmV0dXJuIGdldFhTREVsZW1lbnRNYXBwZXIoKS5nZXRGcmFnbWVudChjb25maWcsIGlkLCBuYW1lKTsKLSAgICBlbHNlIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbikKLSAgICAgIHJldHVybiBnZXRYU0RTaW1wbGVNYXBwZXIoKS5nZXRGcmFnbWVudChjb25maWcsIGlkLCBuYW1lKTsKLSAgICBlbHNlIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBYU0RDb21wbGV4VHlwZURlZmluaXRpb24pCi0gICAgICByZXR1cm4gZ2V0WFNEQ29tcGxleE1hcHBlcigpLmdldEZyYWdtZW50KGNvbmZpZywgaWQsIG5hbWUpOwotICAgIGVsc2UgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIFhTRFBhcnRpY2xlKQotICAgICAgcmV0dXJuIGdldFhTRFBhcnRpY2xlTWFwcGVyKCkuZ2V0RnJhZ21lbnQoY29uZmlnLCBpZCwgbmFtZSk7Ci0gICAgZWxzZSBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgWFNEUGFydGljbGVDb250ZW50KQotICAgICAgcmV0dXJuIGdldFhTRFBhcnRpY2xlTWFwcGVyKCkuZ2V0RnJhZ21lbnQoY29uZmlnLCBpZCwgbmFtZSk7Ci0gICAgZWxzZSBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgWFNEQXR0cmlidXRlVXNlKQotICAgICAgcmV0dXJuIGdldFhTREF0dHJpYnV0ZU1hcHBlcigpLmdldEZyYWdtZW50KGNvbmZpZywgaWQsIG5hbWUpOwkKLSAgICBlbHNlCi0gICAgICByZXR1cm4gZ2V0WFNERGVmYXVsdEZyYWdtZW50KGNvbmZpZywgaWQsIG5hbWUpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvWFNEUGFydGljbGVUb0ZyYWdtZW50TWFwcGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvWFNEUGFydGljbGVUb0ZyYWdtZW50TWFwcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0YzY3OTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L1hTRFBhcnRpY2xlVG9GcmFnbWVudE1hcHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5GcmFnbWVudENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLlhTREdyb3VwQWxsRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5YU0RHcm91cENob2ljZUZpeEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuWFNER3JvdXBDaG9pY2VSYW5nZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuWFNER3JvdXBTZXFGaXhGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLlhTREdyb3VwU2VxUmFuZ2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC54c2QuV1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbXBvc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbmNyZXRlQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RNb2RlbEdyb3VwOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RNb2RlbEdyb3VwRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEUGFydGljbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFBhcnRpY2xlQ29udGVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEV2lsZGNhcmQ7Ci0KLQotcHVibGljIGNsYXNzIFhTRFBhcnRpY2xlVG9GcmFnbWVudE1hcHBlciBleHRlbmRzIFhTRFRvRnJhZ21lbnRNYXBwZXIgewotICBwdWJsaWMgWFNEUGFydGljbGVUb0ZyYWdtZW50TWFwcGVyKFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGNvbnRyb2xsZXIsIFdTRExQYXJ0c1RvWFNEVHlwZU1hcHBlciB3c2RsVG9YU0RNYXBwZXIpIHsKLSAgICBzdXBlcihjb250cm9sbGVyLCB3c2RsVG9YU0RNYXBwZXIpOwotICB9Ci0KLSAgcHVibGljIElYU0RGcmFnbWVudCBnZXRGcmFnbWVudChYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFN0cmluZyBpZCwgU3RyaW5nIG5hbWUpIHsKLSAgICBYU0RDb21wb25lbnQgY29tcG9uZW50ID0gY29uZmlnLmdldFhTRENvbXBvbmVudCgpOwotICAgIFhTRFBhcnRpY2xlQ29udGVudCB4c2RQYXJ0aWNsZUNvbnRlbnQ7Ci0gICAgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIFhTRFBhcnRpY2xlKQotICAgICAgeHNkUGFydGljbGVDb250ZW50ID0gKChYU0RQYXJ0aWNsZSljb21wb25lbnQpLmdldENvbnRlbnQoKTsKLSAgICBlbHNlIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBYU0RQYXJ0aWNsZUNvbnRlbnQpCi0gICAgICB4c2RQYXJ0aWNsZUNvbnRlbnQgPSAoWFNEUGFydGljbGVDb250ZW50KWNvbXBvbmVudDsKLSAgICBlbHNlCi0gICAgICB4c2RQYXJ0aWNsZUNvbnRlbnQgPSBudWxsOwotICAgIGlmICh4c2RQYXJ0aWNsZUNvbnRlbnQgIT0gbnVsbCkgewotICAgICAgaWYgKHhzZFBhcnRpY2xlQ29udGVudCBpbnN0YW5jZW9mIFhTRE1vZGVsR3JvdXBEZWZpbml0aW9uKQotICAgICAgICByZXR1cm4gZ2V0WFNETW9kZWxHcm91cERlZkZyYWdtZW50KGNvbmZpZywgaWQsIG5hbWUsIChYU0RNb2RlbEdyb3VwRGVmaW5pdGlvbil4c2RQYXJ0aWNsZUNvbnRlbnQpOwotICAgICAgZWxzZSBpZiAoeHNkUGFydGljbGVDb250ZW50IGluc3RhbmNlb2YgWFNETW9kZWxHcm91cCkKLSAgICAgICAgcmV0dXJuIGdldFhTRE1vZGVsR3JvdXBGcmFnbWVudChjb25maWcsIGlkLCBuYW1lLCAoWFNETW9kZWxHcm91cCl4c2RQYXJ0aWNsZUNvbnRlbnQpOwotICAgICAgZWxzZSBpZiAoeHNkUGFydGljbGVDb250ZW50IGluc3RhbmNlb2YgWFNEV2lsZGNhcmQpCi0gICAgICAgIHJldHVybiBnZXRYU0RXaWxkY2FyZEZyYWdtZW50KGNvbmZpZywgaWQsIG5hbWUsIChYU0RXaWxkY2FyZCl4c2RQYXJ0aWNsZUNvbnRlbnQpOwotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gZ2V0WFNERGVmYXVsdEZyYWdtZW50KGNvbmZpZywgaWQsIG5hbWUpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gZ2V0WFNERGVmYXVsdEZyYWdtZW50KGNvbmZpZywgaWQsIG5hbWUpOwotICB9Ci0KLSAgcHJpdmF0ZSBJWFNERnJhZ21lbnQgZ2V0WFNETW9kZWxHcm91cERlZkZyYWdtZW50KFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNETW9kZWxHcm91cERlZmluaXRpb24geHNkTW9kZWxHcm91cERlZikgewotICAgIFhTRE1vZGVsR3JvdXBEZWZpbml0aW9uIHJlc29sdmVkWFNETW9kZWxHcm91cERlZiA9IHhzZE1vZGVsR3JvdXBEZWY7Ci0gICAgaWYgKHhzZE1vZGVsR3JvdXBEZWYuaXNNb2RlbEdyb3VwRGVmaW5pdGlvblJlZmVyZW5jZSgpKQotICAgICAgcmVzb2x2ZWRYU0RNb2RlbEdyb3VwRGVmID0geHNkTW9kZWxHcm91cERlZi5nZXRSZXNvbHZlZE1vZGVsR3JvdXBEZWZpbml0aW9uKCk7Ci0gICAgWFNETW9kZWxHcm91cCB4c2RNb2RlbEdyb3VwID0gcmVzb2x2ZWRYU0RNb2RlbEdyb3VwRGVmLmdldE1vZGVsR3JvdXAoKTsKLSAgICBpZiAoeHNkTW9kZWxHcm91cCA9PSBudWxsKQotICAgICAgcmV0dXJuIGdldFhTRERlZmF1bHRGcmFnbWVudChjb25maWcsIGlkLCBuYW1lKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gZ2V0WFNETW9kZWxHcm91cEZyYWdtZW50KGNvbmZpZywgaWQsIG5hbWUsIHhzZE1vZGVsR3JvdXApOwotICB9Ci0KLSAgcHJpdmF0ZSBJWFNERnJhZ21lbnQgZ2V0WFNETW9kZWxHcm91cEZyYWdtZW50KFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNETW9kZWxHcm91cCB4c2RNb2RlbEdyb3VwKSB7Ci0gICAgaW50IG1pbk9jY3VycyA9IEZyYWdtZW50Q29uc3RhbnRzLkRFRkFVTFRfTUlOX09DQ1VSUzsKLSAgICBpbnQgbWF4T2NjdXJzID0gRnJhZ21lbnRDb25zdGFudHMuREVGQVVMVF9NQVhfT0NDVVJTOwotICAgIFhTRENvbmNyZXRlQ29tcG9uZW50IGNvbmNyZXRlQ29tcG9uZW50ID0geHNkTW9kZWxHcm91cC5nZXRDb250YWluZXIoKTsKLSAgICBpZiAoY29uY3JldGVDb21wb25lbnQgIT0gbnVsbCAmJiBjb25jcmV0ZUNvbXBvbmVudCBpbnN0YW5jZW9mIFhTRFBhcnRpY2xlKSB7Ci0gICAgICBYU0RQYXJ0aWNsZSBwYXJ0aWNsZSA9IChYU0RQYXJ0aWNsZSljb25jcmV0ZUNvbXBvbmVudDsKLSAgICAgIGlmIChwYXJ0aWNsZS5pc1NldE1pbk9jY3VycygpKQotICAgICAgICBtaW5PY2N1cnMgPSBwYXJ0aWNsZS5nZXRNaW5PY2N1cnMoKTsKLSAgICAgIGlmIChwYXJ0aWNsZS5pc1NldE1heE9jY3VycygpKQotICAgICAgICBtYXhPY2N1cnMgPSBwYXJ0aWNsZS5nZXRNYXhPY2N1cnMoKTsKLSAgICB9Ci0gICAgY29uZmlnLnNldE1pbk9jY3VycyhtaW5PY2N1cnMpOwotICAgIGNvbmZpZy5zZXRNYXhPY2N1cnMobWF4T2NjdXJzKTsKLSAgICAKLSAgICBzd2l0Y2ggKHhzZE1vZGVsR3JvdXAuZ2V0Q29tcG9zaXRvcigpLmdldFZhbHVlKCkpIHsKLSAgICAgIGNhc2UgWFNEQ29tcG9zaXRvci5TRVFVRU5DRTogCi0gICAgICAgIGlmIChtaW5PY2N1cnMgPT0gbWF4T2NjdXJzKQotICAgICAgICAgIHJldHVybiBuZXcgWFNER3JvdXBTZXFGaXhGcmFnbWVudChpZCwgbmFtZSwgY29uZmlnLCBnZXRDb250cm9sbGVyKCksIHhzZE1vZGVsR3JvdXApOwotICAgICAgICBlbHNlCi0gICAgICAgICAgcmV0dXJuIG5ldyBYU0RHcm91cFNlcVJhbmdlRnJhZ21lbnQoaWQsIG5hbWUsIGNvbmZpZywgZ2V0Q29udHJvbGxlcigpLCB4c2RNb2RlbEdyb3VwKTsKLSAgICAgIGNhc2UgWFNEQ29tcG9zaXRvci5DSE9JQ0U6Ci0gICAgICAgIGlmIChtaW5PY2N1cnMgPT0gbWF4T2NjdXJzKQotICAgICAgICAgIHJldHVybiBuZXcgWFNER3JvdXBDaG9pY2VGaXhGcmFnbWVudChpZCwgbmFtZSwgY29uZmlnLCBnZXRDb250cm9sbGVyKCksIHhzZE1vZGVsR3JvdXApOwotICAgICAgICBlbHNlCi0gICAgICAgICAgcmV0dXJuIG5ldyBYU0RHcm91cENob2ljZVJhbmdlRnJhZ21lbnQoaWQsIG5hbWUsIGNvbmZpZywgZ2V0Q29udHJvbGxlcigpLCB4c2RNb2RlbEdyb3VwKTsKLSAgICAgIGNhc2UgWFNEQ29tcG9zaXRvci5BTEw6Ci0gICAgICAgIHJldHVybiBuZXcgWFNER3JvdXBBbGxGcmFnbWVudChpZCwgbmFtZSwgY29uZmlnLCBnZXRDb250cm9sbGVyKCksIHhzZE1vZGVsR3JvdXApOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGdldFhTRERlZmF1bHRGcmFnbWVudChjb25maWcsIGlkLCBuYW1lKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIElYU0RGcmFnbWVudCBnZXRYU0RXaWxkY2FyZEZyYWdtZW50KFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEV2lsZGNhcmQgeHNkUGFydGljbGVDb250ZW50KSB7Ci0gICAgcmV0dXJuIGdldFhTRERlZmF1bHRGcmFnbWVudChjb25maWcsIGlkLCBuYW1lKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L1hTRFNPQVBFbmNvZGluZ1RvRnJhZ21lbnRNYXBwZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9YU0RTT0FQRW5jb2RpbmdUb0ZyYWdtZW50TWFwcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5MWQxOTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L1hTRFNPQVBFbmNvZGluZ1RvRnJhZ21lbnRNYXBwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLkZyYWdtZW50Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuU09BUEVuY0FycmF5Rml4RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5TT0FQRW5jQXJyYXlSYW5nZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuU09BUEVuY29kaW5nV3JhcHBlckZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LnV0aWwuWFNEVHlwZURlZmluaXRpb25VdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnhzZC5XU0RMUGFydHNUb1hTRFR5cGVNYXBwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREF0dHJpYnV0ZUdyb3VwQ29udGVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29tcGxleFR5cGVDb250ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wbGV4VHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETW9kZWxHcm91cDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEUGFydGljbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFBhcnRpY2xlQ29udGVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIFhTRFNPQVBFbmNvZGluZ1RvRnJhZ21lbnRNYXBwZXIgZXh0ZW5kcyBYU0RUb0ZyYWdtZW50TWFwcGVyIHsKLSAgcHJpdmF0ZSBYU0RMaXRlcmFsWE1MRW5jb2RpbmdUb0ZyYWdtZW50TWFwcGVyIHhzZExpdGVyYWxNYXBwZXJfOwotICBwcml2YXRlIFhTRENvbXBsZXhUeXBlVG9GcmFnbWVudE1hcHBlciB4c2RDb21wbGV4TWFwcGVyXzsKLQotICBwdWJsaWMgWFNEU09BUEVuY29kaW5nVG9GcmFnbWVudE1hcHBlcihYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBjb250cm9sbGVyLCBXU0RMUGFydHNUb1hTRFR5cGVNYXBwZXIgd3NkbFRvWFNETWFwcGVyKSB7Ci0gICAgc3VwZXIoY29udHJvbGxlciwgd3NkbFRvWFNETWFwcGVyKTsKLSAgICB4c2RMaXRlcmFsTWFwcGVyXyA9IG51bGw7Ci0gICAgeHNkQ29tcGxleE1hcHBlcl8gPSBudWxsOwotICB9Ci0KLSAgcHJpdmF0ZSBYU0RMaXRlcmFsWE1MRW5jb2RpbmdUb0ZyYWdtZW50TWFwcGVyIGdldFhTRExpdGVyYWxNYXBwZXIoKSB7Ci0gICAgaWYgKHhzZExpdGVyYWxNYXBwZXJfID09IG51bGwpCi0gICAgICB4c2RMaXRlcmFsTWFwcGVyXyA9IG5ldyBYU0RMaXRlcmFsWE1MRW5jb2RpbmdUb0ZyYWdtZW50TWFwcGVyKGdldENvbnRyb2xsZXIoKSwgZ2V0V1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyKCkpOwotICAgIHJldHVybiB4c2RMaXRlcmFsTWFwcGVyXzsKLSAgfQotCi0gIHByaXZhdGUgWFNEQ29tcGxleFR5cGVUb0ZyYWdtZW50TWFwcGVyIGdldFhTRENvbXBsZXhNYXBwZXIoKSB7Ci0gICAgaWYgKHhzZENvbXBsZXhNYXBwZXJfID09IG51bGwpCi0gICAgICB4c2RDb21wbGV4TWFwcGVyXyA9IG5ldyBYU0RDb21wbGV4VHlwZVRvRnJhZ21lbnRNYXBwZXIoZ2V0Q29udHJvbGxlcigpLCBnZXRXU0RMUGFydHNUb1hTRFR5cGVNYXBwZXIoKSk7Ci0gICAgIHJldHVybiB4c2RDb21wbGV4TWFwcGVyXzsKLSAgfQotCi0gIHB1YmxpYyBJWFNERnJhZ21lbnQgZ2V0RnJhZ21lbnQoWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBTdHJpbmcgaWQsIFN0cmluZyBuYW1lKSB7Ci0gICAgaWYgKGNvbmZpZy5nZXRJc1dTRExQYXJ0KCkpIHsKLSAgICAgIElTT0FQRW5jb2RpbmdXcmFwcGVyRnJhZ21lbnQgd3JhcHBlckZyYWdtZW50ID0gbmV3IFNPQVBFbmNvZGluZ1dyYXBwZXJGcmFnbWVudChpZCwgbmFtZSwgbnVsbCk7Ci0gICAgICBTdHJpbmcgZGVsZWdhdGlvbkZyYWdJZCA9IHdyYXBwZXJGcmFnbWVudC5nZW5JRCgpOwotICAgICAgSVhTREZyYWdtZW50IGRlbGVnYXRpb25GcmFnbWVudCA9IGdldEZyYWdtZW50RGVsZWdhdGUoY29uZmlnLCBkZWxlZ2F0aW9uRnJhZ0lkLCBuYW1lKTsKLSAgICAgIHdyYXBwZXJGcmFnbWVudC5zZXRYU0REZWxlZ2F0aW9uRnJhZ21lbnQoZGVsZWdhdGlvbkZyYWdtZW50KTsKLSAgICAgIGdldENvbnRyb2xsZXIoKS5hZGRUb0NhY2hlKGRlbGVnYXRpb25GcmFnSWQsIGRlbGVnYXRpb25GcmFnbWVudCk7Ci0gICAgICByZXR1cm4gd3JhcHBlckZyYWdtZW50OwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gZ2V0RnJhZ21lbnREZWxlZ2F0ZShjb25maWcsIGlkLCBuYW1lKTsKLSAgfQotCi0gIHB1YmxpYyBJWFNERnJhZ21lbnQgZ2V0RnJhZ21lbnREZWxlZ2F0ZShYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFN0cmluZyBpZCwgU3RyaW5nIG5hbWUpIHsKLSAgICBjb25maWcgPSByZXNvbHZlWFNEQ29tcG9uZW50KGNvbmZpZyk7Ci0gICAgWFNEQ29tcG9uZW50IGNvbXBvbmVudCA9IGNvbmZpZy5nZXRYU0RDb21wb25lbnQoKTsKLSAgICBpZiAoIWlzQ29tcG9uZW50UmVzb2x2YWJsZShjb21wb25lbnQpKQotICAgICAgcmV0dXJuIGdldFhTRERlZmF1bHRGcmFnbWVudChjb25maWcsIGlkLCBuYW1lKTsKLSAgICBlbHNlIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBYU0RDb21wbGV4VHlwZURlZmluaXRpb24pIHsKLSAgICAgIFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiBjb21wbGV4VHlwZSA9IChYU0RDb21wbGV4VHlwZURlZmluaXRpb24pY29tcG9uZW50OwotICAgICAgaWYgKFhTRFR5cGVEZWZpbml0aW9uVXRpbC5pc1NvYXBFbmNBcnJheShjb21wbGV4VHlwZSkpCi0gICAgICAgIHJldHVybiBnZXRTT0FQRW5jQXJyYXlGcmFnbWVudChjb25maWcsIGlkLCBuYW1lLCBjb21wbGV4VHlwZSk7Ci0gICAgICBlbHNlCi0gICAgICAgIHJldHVybiBnZXRYU0RDb21wbGV4TWFwcGVyKCkuZ2V0RnJhZ21lbnQoY29uZmlnLCBpZCwgbmFtZSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJldHVybiBnZXRYU0RMaXRlcmFsTWFwcGVyKCkuZ2V0RnJhZ21lbnQoY29uZmlnLCBpZCwgbmFtZSk7Ci0gIH0KLQotICBwcml2YXRlIElYU0RGcmFnbWVudCBnZXRTT0FQRW5jQXJyYXlGcmFnbWVudChYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiBjb21wbGV4VHlwZSkgewotICAgIEVMaXN0IHhzZEF0dHJDb250ZW50cyA9IGNvbXBsZXhUeXBlLmdldEF0dHJpYnV0ZUNvbnRlbnRzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB4c2RBdHRyQ29udGVudHMuc2l6ZSgpOyBpKyspIHsKLSAgICAgIFN0cmluZyBzb2FwRW5jQXJyYXlUeXBlTmFtZXNwYWNlVVJJID0gbnVsbDsKLSAgICAgIFN0cmluZyBzb2FwRW5jQXJyYXlUeXBlTG9jYWxOYW1lID0gbnVsbDsKLSAgICAgIGludCBzb2FwRW5jQXJyYXlEaW1lbnNpb24gPSAwOwotICAgICAgWFNEQXR0cmlidXRlR3JvdXBDb250ZW50IHhzZEF0dHJDb250ZW50ID0gKFhTREF0dHJpYnV0ZUdyb3VwQ29udGVudCl4c2RBdHRyQ29udGVudHMuZ2V0KGkpOwotICAgICAgRWxlbWVudCBlbGVtZW50ID0geHNkQXR0ckNvbnRlbnQuZ2V0RWxlbWVudCgpOwotICAgICAgU3RyaW5nIGFycmF5VHlwZUF0dHIgPSBlbGVtZW50LmdldEF0dHJpYnV0ZU5TKEZyYWdtZW50Q29uc3RhbnRzLlVSSV9XU0RMLCBGcmFnbWVudENvbnN0YW50cy5RTkFNRV9MT0NBTF9OQU1FX0FSUkFZX1RZUEUpOwotICAgICAgaWYgKGFycmF5VHlwZUF0dHIgIT0gbnVsbCAmJiBhcnJheVR5cGVBdHRyLmxlbmd0aCgpID4gMCkgewotICAgICAgICBpbnQgY29sb24gPSBhcnJheVR5cGVBdHRyLmluZGV4T2YoRnJhZ21lbnRDb25zdGFudHMuQ09MT04pOwotICAgICAgICBTdHJpbmcgbnNQcmVmaXggPSAoY29sb24gPiAwKSA/IGFycmF5VHlwZUF0dHIuc3Vic3RyaW5nKDAsIGNvbG9uKSA6IG51bGw7Ci0gICAgICAgIHNvYXBFbmNBcnJheVR5cGVOYW1lc3BhY2VVUkkgPSAoU3RyaW5nKXhzZEF0dHJDb250ZW50LmdldFNjaGVtYSgpLmdldFFOYW1lUHJlZml4VG9OYW1lc3BhY2VNYXAoKS5nZXQobnNQcmVmaXgpOwotICAgICAgICBpbnQgZGltZW5zaW9uSW5kZXggPSBhcnJheVR5cGVBdHRyLmluZGV4T2YoRnJhZ21lbnRDb25zdGFudHMuTEVGVF9TUVVBUkVfQlJBQ0tFVCk7Ci0gICAgICAgIHNvYXBFbmNBcnJheVR5cGVMb2NhbE5hbWUgPSBhcnJheVR5cGVBdHRyLnN1YnN0cmluZyhjb2xvbiArIDEsIGRpbWVuc2lvbkluZGV4KTsKLSAgICAgICAgU3RyaW5nIGRpbWVuc2lvblN0cmluZyA9IGFycmF5VHlwZUF0dHIuc3Vic3RyaW5nKGRpbWVuc2lvbkluZGV4LCBhcnJheVR5cGVBdHRyLmxlbmd0aCgpKTsKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBkaW1lbnNpb25TdHJpbmcubGVuZ3RoKCkgLSAxOyBqKyspIHsKLSAgICAgICAgICBpZiAoZGltZW5zaW9uU3RyaW5nLmNoYXJBdChqKSA9PSBGcmFnbWVudENvbnN0YW50cy5MRUZUX1NRVUFSRV9CUkFDS0VULmNoYXJBdCgwKSAmJiBkaW1lbnNpb25TdHJpbmcuY2hhckF0KGogKyAxKSA9PSBGcmFnbWVudENvbnN0YW50cy5SSUdIVF9TUVVBUkVfQlJBQ0tFVC5jaGFyQXQoMCkpIHsKLSAgICAgICAgICAgIHNvYXBFbmNBcnJheURpbWVuc2lvbisrOwotICAgICAgICAgICAgaisrOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHNvYXBFbmNBcnJheURpbWVuc2lvbiA9IDA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmIChzb2FwRW5jQXJyYXlUeXBlTmFtZXNwYWNlVVJJICE9IG51bGwgJiYgc29hcEVuY0FycmF5VHlwZUxvY2FsTmFtZSAhPSBudWxsICYmIHNvYXBFbmNBcnJheURpbWVuc2lvbiA9PSAxKSB7Ci0gICAgICAgIFhTRENvbXBvbmVudCBzb2FwRW5jQXJyYXlUeXBlID0gZ2V0V1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyKCkuZ2V0WFNEVHlwZUZyb21TY2hlbWEoc29hcEVuY0FycmF5VHlwZU5hbWVzcGFjZVVSSSwgc29hcEVuY0FycmF5VHlwZUxvY2FsTmFtZSwgZmFsc2UpOwotICAgICAgICBpZiAoc29hcEVuY0FycmF5VHlwZSAhPSBudWxsICYmIHNvYXBFbmNBcnJheVR5cGUgaW5zdGFuY2VvZiBYU0RUeXBlRGVmaW5pdGlvbikgewotICAgICAgICAgIFhTRE1vZGVsR3JvdXAgc2VxdWVuY2UgPSBudWxsOwotICAgICAgICAgIFhTRENvbXBsZXhUeXBlQ29udGVudCBjb21wbGV4VHlwZUNvbnRlbnQgPSBYU0RUeXBlRGVmaW5pdGlvblV0aWwuZ2V0WFNEQ29tcGxleFR5cGVDb250ZW50KGNvbXBsZXhUeXBlKTsKLSAgICAgICAgICBpZiAoY29tcGxleFR5cGVDb250ZW50ICE9IG51bGwgJiYgKGNvbXBsZXhUeXBlQ29udGVudCBpbnN0YW5jZW9mIFhTRFBhcnRpY2xlKSkgewotICAgICAgICAgICAgWFNEUGFydGljbGVDb250ZW50IHhzZFBhcnRpY2xlQ29udGVudCA9ICgoWFNEUGFydGljbGUpY29tcGxleFR5cGVDb250ZW50KS5nZXRDb250ZW50KCk7Ci0gICAgICAgICAgICBpZiAoeHNkUGFydGljbGVDb250ZW50IGluc3RhbmNlb2YgWFNETW9kZWxHcm91cCkKLSAgICAgICAgICAgICAgc2VxdWVuY2UgPSAoWFNETW9kZWxHcm91cCl4c2RQYXJ0aWNsZUNvbnRlbnQ7Ci0gICAgICAgICAgfQotICAgICAgICAgIElTT0FQRW5jQXJyYXlGcmFnbWVudCBmcmFnOwotICAgICAgICAgIGlmIChjb25maWcuZ2V0TWluT2NjdXJzKCkgPT0gY29uZmlnLmdldE1heE9jY3VycygpKQotICAgICAgICAgICAgZnJhZyA9IG5ldyBTT0FQRW5jQXJyYXlGaXhGcmFnbWVudChpZCwgbmFtZSwgY29uZmlnLCBnZXRDb250cm9sbGVyKCksIHNlcXVlbmNlKTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBmcmFnID0gbmV3IFNPQVBFbmNBcnJheVJhbmdlRnJhZ21lbnQoaWQsIG5hbWUsIGNvbmZpZywgZ2V0Q29udHJvbGxlcigpLCBzZXF1ZW5jZSk7Ci0gICAgICAgICAgZnJhZy5zZXRYU0RUeXBlRGVmaW5pdGlvbigoWFNEVHlwZURlZmluaXRpb24pc29hcEVuY0FycmF5VHlwZSk7Ci0gICAgICAgICAgcmV0dXJuIGZyYWc7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGdldFhTRENvbXBsZXhNYXBwZXIoKS5nZXRGcmFnbWVudChjb25maWcsIGlkLCBuYW1lKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZVR5cGVUb0ZyYWdtZW50TWFwcGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlVHlwZVRvRnJhZ21lbnRNYXBwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWE5N2YyNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlVHlwZVRvRnJhZ21lbnRNYXBwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLkZyYWdtZW50Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuWFNEU2ltcGxlQXRvbWljRGF0ZVRpbWVGaXhGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLlhTRFNpbXBsZUF0b21pY0RhdGVUaW1lUmFuZ2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLlhTRFNpbXBsZUF0b21pY0VudW1GaXhGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLlhTRFNpbXBsZUF0b21pY0VudW1SYW5nZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuWFNEU2ltcGxlQXRvbWljRml4RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5YU0RTaW1wbGVBdG9taWNGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLlhTRFNpbXBsZUF0b21pY1JhbmdlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5YU0RTaW1wbGVMaXN0Rml4RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5YU0RTaW1wbGVMaXN0UmFuZ2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLlhTRFNpbXBsZVVuaW9uRml4RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5YU0RTaW1wbGVVbmlvblJhbmdlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQudXRpbC5PcHRpb25WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQudXRpbC5YU0RUeXBlRGVmaW5pdGlvblV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwueHNkLldTRExQYXJ0c1RvWFNEVHlwZU1hcHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2ltcGxlVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFZhcmlldHk7Ci0KLXB1YmxpYyBjbGFzcyBYU0RTaW1wbGVUeXBlVG9GcmFnbWVudE1hcHBlciBleHRlbmRzIFhTRFRvRnJhZ21lbnRNYXBwZXIgewotICBwdWJsaWMgWFNEU2ltcGxlVHlwZVRvRnJhZ21lbnRNYXBwZXIoWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgY29udHJvbGxlciwgV1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyIHdzZGxUb1hTRE1hcHBlcikgewotICAgIHN1cGVyKGNvbnRyb2xsZXIsIHdzZGxUb1hTRE1hcHBlcik7Ci0gIH0KLQotICBwdWJsaWMgSVhTREZyYWdtZW50IGdldEZyYWdtZW50KFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSkgewotICAgIFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uIHNpbXBsZVR5cGUgPSAoWFNEU2ltcGxlVHlwZURlZmluaXRpb24pY29uZmlnLmdldFhTRENvbXBvbmVudCgpOwotICAgIGlmIChzaW1wbGVUeXBlICE9IG51bGwgJiYgc2ltcGxlVHlwZS5nZXRWYXJpZXR5KCkgIT0gbnVsbCkgewotICAgICAgc3dpdGNoIChzaW1wbGVUeXBlLmdldFZhcmlldHkoKS5nZXRWYWx1ZSgpKSB7Ci0gICAgICAgIGNhc2UgWFNEVmFyaWV0eS5BVE9NSUM6Ci0gICAgICAgICAgcmV0dXJuIGdldFhTRFNpbXBsZUF0b21pY0ZyYWdtZW50KGNvbmZpZywgaWQsIG5hbWUpOwotICAgICAgICBjYXNlIFhTRFZhcmlldHkuTElTVDoKLSAgICAgICAgICByZXR1cm4gZ2V0WFNEU2ltcGxlTGlzdEZyYWdtZW50KGNvbmZpZywgaWQsIG5hbWUpOwotICAgICAgICBjYXNlIFhTRFZhcmlldHkuVU5JT046Ci0gICAgICAgICAgcmV0dXJuIGdldFhTRFNpbXBsZVVuaW9uRnJhZ21lbnQoY29uZmlnLCBpZCwgbmFtZSk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgcmV0dXJuIGdldFhTRERlZmF1bHRGcmFnbWVudChjb25maWcsIGlkLCBuYW1lKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGdldFhTRERlZmF1bHRGcmFnbWVudChjb25maWcsIGlkLCBuYW1lKTsKLSAgfQotCi0gIHByaXZhdGUgSVhTREZyYWdtZW50IGdldFhTRFNpbXBsZUF0b21pY0ZyYWdtZW50KFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSkgewotICAgIGJvb2xlYW4gaXNGaXhlZCA9ICgoY29uZmlnLmdldE1pbk9jY3VycygpID09IGNvbmZpZy5nZXRNYXhPY2N1cnMoKSkgJiYgY29uZmlnLmdldE1heE9jY3VycygpICE9IEZyYWdtZW50Q29uc3RhbnRzLlVOQk9VTkRFRCk7Ci0gICAgWFNEU2ltcGxlVHlwZURlZmluaXRpb24geHNkU2ltcGxlVHlwZURlZiA9IChYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbiljb25maWcuZ2V0WFNEQ29tcG9uZW50KCk7Ci0gICAgWFNEU2ltcGxlVHlwZURlZmluaXRpb24geHNkQmFzZVNpbXBsZVR5cGVEZWYgPSAoWFNEU2ltcGxlVHlwZURlZmluaXRpb24pWFNEVHlwZURlZmluaXRpb25VdGlsLnJlc29sdmVUb1hTREJ1aWx0SW5UeXBlRGVmaW5pdGlvbih4c2RTaW1wbGVUeXBlRGVmKTsKLSAgICBTdHJpbmcgYmFzZVNpbXBsZVR5cGVEZWZOUyA9IG51bGw7Ci0gICAgU3RyaW5nIGJhc2VTaW1wbGVUeXBlRGVmTmFtZSA9IG51bGw7Ci0gICAgaWYgKHhzZEJhc2VTaW1wbGVUeXBlRGVmICE9IG51bGwpCi0gICAgewotICAgICAgYmFzZVNpbXBsZVR5cGVEZWZOUyA9IHhzZEJhc2VTaW1wbGVUeXBlRGVmLmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgICAgYmFzZVNpbXBsZVR5cGVEZWZOYW1lID0geHNkQmFzZVNpbXBsZVR5cGVEZWYuZ2V0TmFtZSgpOwotICAgIH0KLSAgICBib29sZWFuIGlzRW51bSA9IGlzU2ltcGxlVHlwZUVudW1lcmF0aW9uKHhzZFNpbXBsZVR5cGVEZWYpOwotICAgIGlmIChGcmFnbWVudENvbnN0YW50cy5VUklfWFNELmVxdWFscyhiYXNlU2ltcGxlVHlwZURlZk5TKSkKLSAgICB7Ci0gICAgICBpZiAoYmFzZVNpbXBsZVR5cGVEZWZOYW1lLmVxdWFscygiZGF0ZSIpKQotICAgICAgICByZXR1cm4gZ2V0WFNEU2ltcGxlRGF0ZVRpbWVGcmFnbWVudChpZCwgbmFtZSwgY29uZmlnLCBBY3Rpb25JbnB1dHMuQ0FMRU5EQVJfVFlQRV9EQVRFLHhzZFNpbXBsZVR5cGVEZWYsaXNFbnVtLGlzRml4ZWQpOwotICAgICAgZWxzZSBpZiAoYmFzZVNpbXBsZVR5cGVEZWZOYW1lLmVxdWFscygiZGF0ZVRpbWUiKSkKLSAgICAgICAgcmV0dXJuIGdldFhTRFNpbXBsZURhdGVUaW1lRnJhZ21lbnQoaWQsIG5hbWUsIGNvbmZpZywgQWN0aW9uSW5wdXRzLkNBTEVOREFSX1RZUEVfREFURVRJTUUseHNkU2ltcGxlVHlwZURlZixpc0VudW0saXNGaXhlZCk7Ci0gICAgICBlbHNlIGlmIChiYXNlU2ltcGxlVHlwZURlZk5hbWUuZXF1YWxzKCJnWWVhck1vbnRoIikpCi0gICAgICAgIHJldHVybiBnZXRYU0RTaW1wbGVEYXRlVGltZUZyYWdtZW50KGlkLCBuYW1lLCBjb25maWcsIEFjdGlvbklucHV0cy5DQUxFTkRBUl9UWVBFX0dZRUFSTU9OVEgseHNkU2ltcGxlVHlwZURlZixpc0VudW0saXNGaXhlZCk7Ci0gICAgICBlbHNlIGlmIChiYXNlU2ltcGxlVHlwZURlZk5hbWUuZXF1YWxzKCJnTW9udGhEYXkiKSkKLSAgICAgICAgcmV0dXJuIGdldFhTRFNpbXBsZURhdGVUaW1lRnJhZ21lbnQoaWQsIG5hbWUsIGNvbmZpZywgQWN0aW9uSW5wdXRzLkNBTEVOREFSX1RZUEVfR01PTlRIREFZLHhzZFNpbXBsZVR5cGVEZWYsaXNFbnVtLGlzRml4ZWQpOwotICAgICAgZWxzZSBpZiAoYmFzZVNpbXBsZVR5cGVEZWZOYW1lLmVxdWFscygiZ0RheSIpKQotICAgICAgICByZXR1cm4gZ2V0WFNEU2ltcGxlR0RheUZyYWdtZW50KGlkLCBuYW1lLCBjb25maWcsIHhzZFNpbXBsZVR5cGVEZWYsaXNFbnVtLGlzRml4ZWQpOyAgICAgICAgCi0gICAgICBlbHNlIGlmIChiYXNlU2ltcGxlVHlwZURlZk5hbWUuZXF1YWxzKCJib29sZWFuIikpCi0gICAgICAgIHJldHVybiBnZXRYU0RTaW1wbGVCb29sZWFuRnJhZ21lbnQoaWQsIG5hbWUsIGNvbmZpZywgeHNkU2ltcGxlVHlwZURlZixpc0VudW0saXNGaXhlZCk7Ci0gICAgfQotCi0gICAgaWYgKGlzRW51bSkKLSAgICB7Ci0gICAgICBpZiAoaXNGaXhlZCkKLSAgICAgICAgcmV0dXJuIG5ldyBYU0RTaW1wbGVBdG9taWNFbnVtRml4RnJhZ21lbnQoaWQsIG5hbWUsIGNvbmZpZywgeHNkU2ltcGxlVHlwZURlZi5nZXRFbnVtZXJhdGlvbkZhY2V0cygpKTsKLSAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIG5ldyBYU0RTaW1wbGVBdG9taWNFbnVtUmFuZ2VGcmFnbWVudChpZCwgbmFtZSwgY29uZmlnLCB4c2RTaW1wbGVUeXBlRGVmLmdldEVudW1lcmF0aW9uRmFjZXRzKCkpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgaWYgKGlzRml4ZWQpCi0gICAgICAgIHJldHVybiBuZXcgWFNEU2ltcGxlQXRvbWljRml4RnJhZ21lbnQoaWQsIG5hbWUsIGNvbmZpZyk7Ci0gICAgICBlbHNlCi0gICAgICAgIHJldHVybiBuZXcgWFNEU2ltcGxlQXRvbWljUmFuZ2VGcmFnbWVudChpZCwgbmFtZSwgY29uZmlnKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIFhTRFNpbXBsZUF0b21pY0ZyYWdtZW50IGdldFhTRFNpbXBsZURhdGVUaW1lRnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBpbnQgY2FsZW5kYXJUeXBlLFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uIHhzZERhdGVUaW1lVHlwZSxib29sZWFuIGlzRW51bSxib29sZWFuIGlzRml4ZWQpCi0gIHsKLSAgICBpZiAoaXNFbnVtKQotICAgIHsKLSAgICAgIGlmIChpc0ZpeGVkKQotICAgICAgICByZXR1cm4gbmV3IFhTRFNpbXBsZUF0b21pY0VudW1GaXhGcmFnbWVudChpZCwgbmFtZSwgY29uZmlnLCB4c2REYXRlVGltZVR5cGUuZ2V0RW51bWVyYXRpb25GYWNldHMoKSk7Ci0gICAgICBlbHNlCi0gICAgICAgIHJldHVybiBuZXcgWFNEU2ltcGxlQXRvbWljRW51bVJhbmdlRnJhZ21lbnQoaWQsIG5hbWUsIGNvbmZpZywgeHNkRGF0ZVRpbWVUeXBlLmdldEVudW1lcmF0aW9uRmFjZXRzKCkpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgaWYgKGlzRml4ZWQpCi0gICAgICAgIHJldHVybiBuZXcgWFNEU2ltcGxlQXRvbWljRGF0ZVRpbWVGaXhGcmFnbWVudChpZCwgbmFtZSwgY29uZmlnLCBjYWxlbmRhclR5cGUpOwotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gbmV3IFhTRFNpbXBsZUF0b21pY0RhdGVUaW1lUmFuZ2VGcmFnbWVudChpZCwgbmFtZSwgY29uZmlnLCBjYWxlbmRhclR5cGUpOwotICAgIH0KLSAgfQotICAKLSAgcHJpdmF0ZSBYU0RTaW1wbGVBdG9taWNGcmFnbWVudCBnZXRYU0RTaW1wbGVHRGF5RnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbiB4c2REYXRlVGltZVR5cGUsYm9vbGVhbiBpc0VudW0sYm9vbGVhbiBpc0ZpeGVkKQotICB7Ci0gICAgaWYgKGlzRW51bSkKLSAgICAgIHJldHVybiBudWxsOwotICAgIE9wdGlvblZlY3RvciBvcHRpb25WZWN0b3IgPSBuZXcgT3B0aW9uVmVjdG9yKCk7Ci0gICAgU3RyaW5nQnVmZmVyIHZhbHVlID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIGZvciAoaW50IGk9MTtpPD0zMTtpKyspCi0gICAgewotICAgICAgdmFsdWUuc2V0TGVuZ3RoKDApOwotICAgICAgdmFsdWUuYXBwZW5kKCItLS0iKTsKLSAgICAgIGlmIChpPDEwKQotICAgICAgICB2YWx1ZS5hcHBlbmQoMCk7Ci0gICAgICB2YWx1ZS5hcHBlbmQoaSk7Ci0gICAgICBvcHRpb25WZWN0b3IuYWRkT3B0aW9uKFN0cmluZy52YWx1ZU9mKGkpLHZhbHVlLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgICBpZiAoaXNGaXhlZCkKLSAgICAgIHJldHVybiBuZXcgWFNEU2ltcGxlQXRvbWljRW51bUZpeEZyYWdtZW50KGlkLCBuYW1lLCBjb25maWcsIG9wdGlvblZlY3Rvcik7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIG5ldyBYU0RTaW1wbGVBdG9taWNFbnVtUmFuZ2VGcmFnbWVudChpZCwgbmFtZSwgY29uZmlnLCBvcHRpb25WZWN0b3IpOwotICB9Ci0KLSAgcHJpdmF0ZSBYU0RTaW1wbGVBdG9taWNGcmFnbWVudCBnZXRYU0RTaW1wbGVCb29sZWFuRnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbiB4c2RCb29sZWFuVHlwZSxib29sZWFuIGlzRW51bSxib29sZWFuIGlzRml4ZWQpCi0gIHsKLSAgICBpZiAoaXNFbnVtKQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgT3B0aW9uVmVjdG9yIG9wdGlvblZlY3RvciA9IG5ldyBPcHRpb25WZWN0b3IoKTsKLSAgICBvcHRpb25WZWN0b3IuYWRkT3B0aW9uKCJ0cnVlIiwidHJ1ZSIpOwotICAgIG9wdGlvblZlY3Rvci5hZGRPcHRpb24oImZhbHNlIiwiZmFsc2UiKTsKLSAgICBpZiAoaXNGaXhlZCkKLSAgICAgIHJldHVybiBuZXcgWFNEU2ltcGxlQXRvbWljRW51bUZpeEZyYWdtZW50KGlkLCBuYW1lLCBjb25maWcsIG9wdGlvblZlY3Rvcik7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIG5ldyBYU0RTaW1wbGVBdG9taWNFbnVtUmFuZ2VGcmFnbWVudChpZCwgbmFtZSwgY29uZmlnLCBvcHRpb25WZWN0b3IpOwotICB9Ci0KLSAgcHJpdmF0ZSBJWFNERnJhZ21lbnQgZ2V0WFNEU2ltcGxlTGlzdEZyYWdtZW50KFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSkgewotICAgIAotICAgIGJvb2xlYW4gaXNGaXhlZCA9ICgoY29uZmlnLmdldE1pbk9jY3VycygpID09IGNvbmZpZy5nZXRNYXhPY2N1cnMoKSkgJiYgY29uZmlnLmdldE1heE9jY3VycygpICE9IEZyYWdtZW50Q29uc3RhbnRzLlVOQk9VTkRFRCk7Ci0gICAgaWYgKGlzRml4ZWQpCi0gICAgICByZXR1cm4gbmV3IFhTRFNpbXBsZUxpc3RGaXhGcmFnbWVudChpZCwgbmFtZSwgY29uZmlnLCBnZXRDb250cm9sbGVyKCkpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBuZXcgWFNEU2ltcGxlTGlzdFJhbmdlRnJhZ21lbnQoaWQsIG5hbWUsIGNvbmZpZywgZ2V0Q29udHJvbGxlcigpKTsKLSAgfQotCi0gIHByaXZhdGUgSVhTREZyYWdtZW50IGdldFhTRFNpbXBsZVVuaW9uRnJhZ21lbnQoWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBTdHJpbmcgaWQsIFN0cmluZyBuYW1lKSB7Ci0gICAgCi0gICAgYm9vbGVhbiBpc0ZpeGVkID0gKChjb25maWcuZ2V0TWluT2NjdXJzKCkgPT0gY29uZmlnLmdldE1heE9jY3VycygpKSAmJiBjb25maWcuZ2V0TWF4T2NjdXJzKCkgIT0gRnJhZ21lbnRDb25zdGFudHMuVU5CT1VOREVEKTsKLSAgICBpZiAoaXNGaXhlZCkKLSAgICAgIHJldHVybiBuZXcgWFNEU2ltcGxlVW5pb25GaXhGcmFnbWVudChpZCwgbmFtZSwgY29uZmlnLCBnZXRDb250cm9sbGVyKCkpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBuZXcgWFNEU2ltcGxlVW5pb25SYW5nZUZyYWdtZW50KGlkLCBuYW1lLCBjb25maWcsIGdldENvbnRyb2xsZXIoKSk7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gaXNTaW1wbGVUeXBlRW51bWVyYXRpb24oWFNEU2ltcGxlVHlwZURlZmluaXRpb24gc2ltcGxlVHlwZSkgewotICAgIEVMaXN0IGUgPSBzaW1wbGVUeXBlLmdldEVudW1lcmF0aW9uRmFjZXRzKCk7Ci0gICAgcmV0dXJuIChlICE9IG51bGwgJiYgZS5zaXplKCkgPiAwKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L1hTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGMzMjUwZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5GcmFnbWVudENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29tcG9uZW50OwotCi1wdWJsaWMgY2xhc3MgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gewotICBwcml2YXRlIFhTRENvbXBvbmVudCBjb21wb25lbnRfOwotICBwcml2YXRlIGludCBtaW5PY2N1cnNfOwotICBwcml2YXRlIGludCBtYXhPY2N1cnNfOwotICBwcml2YXRlIGludCBzdHlsZV87Ci0gIHByaXZhdGUgaW50IHBhcnRFbmNvZGluZ187Ci0gIHByaXZhdGUgYm9vbGVhbiBpc1dTRExQYXJ0XzsKLSAgcHJpdmF0ZSBTdHJpbmcgd3NkbFBhcnROYW1lXzsKLQotICBwdWJsaWMgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKSB7Ci0gICAgY29tcG9uZW50XyA9IG51bGw7Ci0gICAgbWluT2NjdXJzXyA9IEZyYWdtZW50Q29uc3RhbnRzLkRFRkFVTFRfTUlOX09DQ1VSUzsKLSAgICBtYXhPY2N1cnNfID0gRnJhZ21lbnRDb25zdGFudHMuREVGQVVMVF9NQVhfT0NDVVJTOwotICAgIHN0eWxlXyA9IEZyYWdtZW50Q29uc3RhbnRzLlNUWUxFX0RPQ1VNRU5UOwotICAgIHBhcnRFbmNvZGluZ18gPSBGcmFnbWVudENvbnN0YW50cy5FTkNPRElOR19MSVRFUkFMOwotICAgIGlzV1NETFBhcnRfID0gZmFsc2U7Ci0gICAgd3NkbFBhcnROYW1lXyA9IG51bGw7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRYU0RDb21wb25lbnQoWFNEQ29tcG9uZW50IGNvbXBvbmVudCkgewotICAgIGNvbXBvbmVudF8gPSBjb21wb25lbnQ7Ci0gIH0KLQotICBwdWJsaWMgWFNEQ29tcG9uZW50IGdldFhTRENvbXBvbmVudCgpIHsKLSAgICByZXR1cm4gY29tcG9uZW50XzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldE1pbk9jY3VycyhpbnQgbWluT2NjdXJzKSB7Ci0gICAgbWluT2NjdXJzXyA9IG1pbk9jY3VyczsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0TWluT2NjdXJzKCkgewotICAgIHJldHVybiBtaW5PY2N1cnNfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0TWF4T2NjdXJzKGludCBtYXhPY2N1cnMpIHsKLSAgICBtYXhPY2N1cnNfID0gbWF4T2NjdXJzOwotICB9Ci0KLSAgcHVibGljIGludCBnZXRNYXhPY2N1cnMoKSB7Ci0gICAgcmV0dXJuIG1heE9jY3Vyc187Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFN0eWxlKGludCBzdHlsZSkgewotICAgIHN0eWxlXyA9IHN0eWxlOwotICB9Ci0gIAotICBwdWJsaWMgaW50IGdldFN0eWxlKCkgewotICAgIHJldHVybiBzdHlsZV87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRQYXJ0RW5jb2RpbmcoaW50IHBhcnRFbmNvZGluZykgewotICAgIHBhcnRFbmNvZGluZ18gPSBwYXJ0RW5jb2Rpbmc7Ci0gIH0KLQotICBwdWJsaWMgaW50IGdldFBhcnRFbmNvZGluZygpIHsKLSAgICByZXR1cm4gcGFydEVuY29kaW5nXzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldElzV1NETFBhcnQoYm9vbGVhbiBpc1dTRExQYXJ0KSB7Ci0gICAgaXNXU0RMUGFydF8gPSBpc1dTRExQYXJ0OwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZ2V0SXNXU0RMUGFydCgpIHsKLSAgICByZXR1cm4gaXNXU0RMUGFydF87Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldFdTRExQYXJ0TmFtZShTdHJpbmcgd3NkbFBhcnROYW1lKSB7Ci0gICAgd3NkbFBhcnROYW1lXyA9IHdzZGxQYXJ0TmFtZTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRXU0RMUGFydE5hbWUoKSB7Ci0gICAgcmV0dXJuIHdzZGxQYXJ0TmFtZV87Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9YU0RUb0ZyYWdtZW50Q29udHJvbGxlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L1hTRFRvRnJhZ21lbnRDb250cm9sbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwYzU3ZDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L1hTRFRvRnJhZ21lbnRDb250cm9sbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5GcmFnbWVudENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC54c2QuV1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyOwotCi1wdWJsaWMgY2xhc3MgWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgewotICBwcml2YXRlIFdTRExQYXJ0c1RvWFNEVHlwZU1hcHBlciB3c2RsVG9YU0RNYXBwZXJfOwotICBwcml2YXRlIFhTRExpdGVyYWxYTUxFbmNvZGluZ1RvRnJhZ21lbnRNYXBwZXIgeHNkTGl0ZXJhbE1hcHBlcl87Ci0gIHByaXZhdGUgWFNEU09BUEVuY29kaW5nVG9GcmFnbWVudE1hcHBlciB4c2RTb2FwTWFwcGVyXzsKLSAgcHJpdmF0ZSBIYXNodGFibGUgeHNkVG9GcmFnbWVudENhY2hlXzsKLQotICBwdWJsaWMgWFNEVG9GcmFnbWVudENvbnRyb2xsZXIoKSB7Ci0gICAgd3NkbFRvWFNETWFwcGVyXyA9IG51bGw7Ci0gICAgeHNkTGl0ZXJhbE1hcHBlcl8gPSBudWxsOwotICAgIHhzZFNvYXBNYXBwZXJfID0gbnVsbDsKLSAgICB4c2RUb0ZyYWdtZW50Q2FjaGVfID0gbmV3IEhhc2h0YWJsZSgpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0V1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyKFdTRExQYXJ0c1RvWFNEVHlwZU1hcHBlciB3c2RsVG9YU0RNYXBwZXIpIHsKLSAgICB3c2RsVG9YU0RNYXBwZXJfID0gd3NkbFRvWFNETWFwcGVyOwotICB9Ci0KLSAgcHVibGljIFdTRExQYXJ0c1RvWFNEVHlwZU1hcHBlciBnZXRXU0RMUGFydHNUb1hTRFR5cGVNYXBwZXIoKSB7Ci0gICAgcmV0dXJuIHdzZGxUb1hTRE1hcHBlcl87Ci0gIH0KLQotICBwcml2YXRlIFhTRExpdGVyYWxYTUxFbmNvZGluZ1RvRnJhZ21lbnRNYXBwZXIgZ2V0WFNETGl0ZXJhbE1hcHBlcigpIHsKLSAgICBpZiAoeHNkTGl0ZXJhbE1hcHBlcl8gPT0gbnVsbCkKLSAgICAgIHhzZExpdGVyYWxNYXBwZXJfID0gbmV3IFhTRExpdGVyYWxYTUxFbmNvZGluZ1RvRnJhZ21lbnRNYXBwZXIodGhpcywgd3NkbFRvWFNETWFwcGVyXyk7Ci0gICAgcmV0dXJuIHhzZExpdGVyYWxNYXBwZXJfOwotICB9Ci0KLSAgcHJpdmF0ZSBYU0RTT0FQRW5jb2RpbmdUb0ZyYWdtZW50TWFwcGVyIGdldFhTRFNPQVBNYXBwZXIoKSB7Ci0gICAgaWYgKHhzZFNvYXBNYXBwZXJfID09IG51bGwpCi0gICAgICB4c2RTb2FwTWFwcGVyXyA9IG5ldyBYU0RTT0FQRW5jb2RpbmdUb0ZyYWdtZW50TWFwcGVyKHRoaXMsIHdzZGxUb1hTRE1hcHBlcl8pOwotICAgIHJldHVybiB4c2RTb2FwTWFwcGVyXzsKLSAgfQotCi0gIHB1YmxpYyBJWFNERnJhZ21lbnQgZ2V0RnJhZ21lbnQoWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBTdHJpbmcgaWQsIFN0cmluZyBuYW1lKSB7Ci0gICAgSVhTREZyYWdtZW50IGZyYWcgPSBnZXRDYWNoZWRGcmFnbWVudChpZCk7Ci0gICAgaWYgKGZyYWcgIT0gbnVsbCkKLSAgICAgIHJldHVybiBmcmFnOwotICAgIGZyYWcgPSBnZXROZXdGcmFnbWVudChjb25maWcsIGlkLCBuYW1lKTsKLSAgICBpZiAoZnJhZyAhPSBudWxsKQotICAgICAgYWRkVG9DYWNoZShpZCwgZnJhZyk7Ci0gICAgcmV0dXJuIGZyYWc7Ci0gIH0KLQotICBwdWJsaWMgSVhTREZyYWdtZW50IGdldENhY2hlZEZyYWdtZW50KFN0cmluZyBpZCkgewotICAgIHJldHVybiAoSVhTREZyYWdtZW50KXhzZFRvRnJhZ21lbnRDYWNoZV8uZ2V0KGlkKTsKLSAgfQotCi0gIHB1YmxpYyBJWFNERnJhZ21lbnQgZ2V0TmV3RnJhZ21lbnQoWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBTdHJpbmcgaWQsIFN0cmluZyBuYW1lKSB7Ci0gICAgc3dpdGNoIChjb25maWcuZ2V0UGFydEVuY29kaW5nKCkpCi0gICAgewotICAgICAgY2FzZSBGcmFnbWVudENvbnN0YW50cy5FTkNPRElOR19TT0FQOgotICAgICAgICByZXR1cm4gZ2V0WFNEU09BUE1hcHBlcigpLmdldEZyYWdtZW50KGNvbmZpZyxpZCxuYW1lKTsgICAgICAKLSAgICAgIGNhc2UgRnJhZ21lbnRDb25zdGFudHMuRU5DT0RJTkdfTElURVJBTDoKLSAgICAgIGNhc2UgRnJhZ21lbnRDb25zdGFudHMuRU5DT0RJTkdfVVJMOgotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGdldFhTRExpdGVyYWxNYXBwZXIoKS5nZXRGcmFnbWVudChjb25maWcsaWQsbmFtZSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgYWRkVG9DYWNoZShTdHJpbmcgaWQsIElYU0RGcmFnbWVudCBmcmFnKSB7Ci0gICAgeHNkVG9GcmFnbWVudENhY2hlXy5wdXQoaWQsIGZyYWcpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVtb3ZlRnJvbUNhY2hlKFN0cmluZyBpZCkgewotICAgIHhzZFRvRnJhZ21lbnRDYWNoZV8ucmVtb3ZlKGlkKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGVtcHR5Q2FjaGUoKSB7Ci0gICAgeHNkVG9GcmFnbWVudENhY2hlXy5jbGVhcigpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvWFNEVG9GcmFnbWVudE1hcHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L1hTRFRvRnJhZ21lbnRNYXBwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWM2NGY2ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvWFNEVG9GcmFnbWVudE1hcHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5YU0REZWZhdWx0RnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5YU0RFbXB0eUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnhzZC5XU0RMUGFydHNUb1hTRFR5cGVNYXBwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETmFtZWRDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFhTRFRvRnJhZ21lbnRNYXBwZXIgewotICBwcml2YXRlIFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGNvbnRyb2xsZXJfOwotICBwcml2YXRlIFdTRExQYXJ0c1RvWFNEVHlwZU1hcHBlciB3c2RsVG9YU0RNYXBwZXJfOwotCi0gIHB1YmxpYyBYU0RUb0ZyYWdtZW50TWFwcGVyKFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGNvbnRyb2xsZXIsIFdTRExQYXJ0c1RvWFNEVHlwZU1hcHBlciB3c2RsVG9YU0RNYXBwZXIpIHsKLSAgICBjb250cm9sbGVyXyA9IGNvbnRyb2xsZXI7Ci0gICAgd3NkbFRvWFNETWFwcGVyXyA9IHdzZGxUb1hTRE1hcHBlcjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldENvbnRyb2xsZXIoWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgY29udHJvbGxlcikgewotICAgIGNvbnRyb2xsZXJfID0gY29udHJvbGxlcjsKLSAgfQotCi0gIHB1YmxpYyBYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBnZXRDb250cm9sbGVyKCkgewotICAgIHJldHVybiBjb250cm9sbGVyXzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFdTRExQYXJ0c1RvWFNEVHlwZU1hcHBlcihXU0RMUGFydHNUb1hTRFR5cGVNYXBwZXIgd3NkbFRvWFNETWFwcGVyKSB7Ci0gICAgd3NkbFRvWFNETWFwcGVyXyA9IHdzZGxUb1hTRE1hcHBlcjsKLSAgfQotCi0gIHB1YmxpYyBXU0RMUGFydHNUb1hTRFR5cGVNYXBwZXIgZ2V0V1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyKCkgewotICAgIHJldHVybiB3c2RsVG9YU0RNYXBwZXJfOwotICB9Ci0KLSAgcHJvdGVjdGVkIElYU0RGcmFnbWVudCBnZXRYU0REZWZhdWx0RnJhZ21lbnQoWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBTdHJpbmcgaWQsIFN0cmluZyBuYW1lKSB7Ci0gICAgcmV0dXJuIG5ldyBYU0REZWZhdWx0RnJhZ21lbnQoaWQsIG5hbWUsIGNvbmZpZyk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgSVhTREZyYWdtZW50IGdldFhTREVtcHR5RnJhZ21lbnQoWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBTdHJpbmcgaWQsIFN0cmluZyBuYW1lKSB7Ci0gICAgcmV0dXJuIG5ldyBYU0RFbXB0eUZyYWdtZW50KGlkLCBuYW1lLCBjb25maWcpOwotICB9Ci0KLSAgcHVibGljIGFic3RyYWN0IElYU0RGcmFnbWVudCBnZXRGcmFnbWVudChYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFN0cmluZyBpZCwgU3RyaW5nIG5hbWUpOwotCi0gIHByb3RlY3RlZCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiByZXNvbHZlWFNEQ29tcG9uZW50KFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZykKLSAgewotICAgIFhTRENvbXBvbmVudCBjb21wb25lbnQgPSBjb25maWcuZ2V0WFNEQ29tcG9uZW50KCk7Ci0gICAgaWYgKCFpc0NvbXBvbmVudFJlc29sdmFibGUoY29tcG9uZW50KSAmJiAoY29tcG9uZW50IGluc3RhbmNlb2YgWFNETmFtZWRDb21wb25lbnQpKQotICAgIHsKLSAgICAgIFhTRENvbXBvbmVudCByZXNvbHZlZENvbXBvbmVudCA9IGdldFdTRExQYXJ0c1RvWFNEVHlwZU1hcHBlcigpLnJlc29sdmVYU0ROYW1lZENvbXBvbmVudCgoWFNETmFtZWRDb21wb25lbnQpY29tcG9uZW50KTsKLSAgICAgIGlmIChyZXNvbHZlZENvbXBvbmVudCAhPSBudWxsKQotICAgICAgICBjb25maWcuc2V0WFNEQ29tcG9uZW50KHJlc29sdmVkQ29tcG9uZW50KTsKLSAgICB9Ci0gICAgcmV0dXJuIGNvbmZpZzsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIGlzQ29tcG9uZW50UmVzb2x2YWJsZShYU0RDb21wb25lbnQgY29tcG9uZW50KQotICB7Ci0gICAgaWYgKGNvbXBvbmVudCA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBjb21wb25lbnQuZ2V0U2NoZW1hKCk7Ci0gICAgaWYgKHNjaGVtYSA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChzY2hlbWEuZ2V0VGFyZ2V0TmFtZXNwYWNlKCkgPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL0ZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkNWUzMjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSUZyYWdtZW50OwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgRnJhZ21lbnQgaW1wbGVtZW50cyBJRnJhZ21lbnQgewotICBwcml2YXRlIFN0cmluZyBpZF87Ci0gIHByaXZhdGUgU3RyaW5nIG5hbWVfOwotICBwcml2YXRlIEhhc2h0YWJsZSBwYXJhbXNfOwotCi0gIHB1YmxpYyBGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lKSB7Ci0gICAgaWRfID0gaWQ7Ci0gICAgbmFtZV8gPSBuYW1lOwotICAgIHBhcmFtc18gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRJRChTdHJpbmcgaWQpIHsKLSAgICBpZF8gPSBpZDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SUQoKSB7Ci0gICAgcmV0dXJuIGlkXzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpIHsKLSAgICBuYW1lXyA9IG5hbWU7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0gICAgcmV0dXJuIG5hbWVfOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc1BhcmFtZXRlclZhbHVlcyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbiB7Ci0gICAgU3RyaW5nW10gcGFyYW1zID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhnZXRJRCgpKTsKLSAgICBzZXRQYXJhbWV0ZXJWYWx1ZXMoZ2V0SUQoKSwgcGFyYW1zKTsKLSAgICByZXR1cm4gdmFsaWRhdGVBbGxQYXJhbWV0ZXJWYWx1ZXMoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFBhcmFtZXRlclZhbHVlcyhTdHJpbmcgcGFyYW1LZXksIFN0cmluZ1tdIHBhcmFtcykgewotICAgIGlmIChwYXJhbXMgPT0gbnVsbCkKLSAgICAgIHBhcmFtc18ucmVtb3ZlKHBhcmFtS2V5KTsKLSAgICBlbHNlCi0gICAgICBwYXJhbXNfLnB1dChwYXJhbUtleSwgcGFyYW1zKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFBhcmFtZXRlclZhbHVlcyhTdHJpbmcgcGFyYW1LZXksIFZlY3RvciBwYXJhbXMpIHsKLSAgICBpZiAocGFyYW1zID09IG51bGwpCi0gICAgICBwYXJhbXNfLnJlbW92ZShwYXJhbUtleSk7Ci0gICAgZWxzZSB7Ci0gICAgICBTdHJpbmdbXSBwYXJhbXNBcnJheSA9IG5ldyBTdHJpbmdbcGFyYW1zLnNpemUoKV07Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhcmFtc0FycmF5Lmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIHBhcmFtc0FycmF5W2ldID0gcGFyYW1zLmdldChpKS50b1N0cmluZygpOwotICAgICAgfQotICAgICAgc2V0UGFyYW1ldGVyVmFsdWVzKHBhcmFtS2V5LCBwYXJhbXNBcnJheSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIFN0cmluZ1tdIGdldFBhcmFtZXRlclZhbHVlcyhTdHJpbmcgcGFyYW1LZXkpIHsKLSAgICByZXR1cm4gKFN0cmluZ1tdKXBhcmFtc18uZ2V0KHBhcmFtS2V5KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UGFyYW1ldGVyVmFsdWUoU3RyaW5nIHBhcmFtS2V5LCBpbnQgcGFyYW1JbmRleCkgewotICAgIFN0cmluZ1tdIHBhcmFtcyA9IGdldFBhcmFtZXRlclZhbHVlcyhwYXJhbUtleSk7Ci0gICAgaWYgKHBhcmFtcyAhPSBudWxsICYmIHBhcmFtSW5kZXggPCBwYXJhbXMubGVuZ3RoKQotICAgICAgcmV0dXJuIHBhcmFtc1twYXJhbUluZGV4XTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHZhbGlkYXRlQWxsUGFyYW1ldGVyVmFsdWVzKCkgewotICAgIEVudW1lcmF0aW9uIHBhcmFtS2V5cyA9IHBhcmFtc18ua2V5cygpOwotICAgIHdoaWxlIChwYXJhbUtleXMgIT0gbnVsbCAmJiBwYXJhbUtleXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgIGlmICghdmFsaWRhdGVQYXJhbWV0ZXJWYWx1ZXMoKFN0cmluZylwYXJhbUtleXMubmV4dEVsZW1lbnQoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZVBhcmFtZXRlclZhbHVlcyhTdHJpbmcgcGFyYW1LZXkpIHsKLSAgICBTdHJpbmdbXSBwYXJhbXMgPSBnZXRQYXJhbWV0ZXJWYWx1ZXMocGFyYW1LZXkpOwotICAgIGZvciAoaW50IGkgPSAwOyBwYXJhbXMgIT0gbnVsbCAmJiBpIDwgcGFyYW1zLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBpZiAoIXZhbGlkYXRlUGFyYW1ldGVyVmFsdWUocGFyYW1LZXksIGkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1NPQVBFbmNBcnJheUZpeEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9TT0FQRW5jQXJyYXlGaXhGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjFmZTgxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1NPQVBFbmNBcnJheUZpeEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RNb2RlbEdyb3VwOwotCi1wdWJsaWMgY2xhc3MgU09BUEVuY0FycmF5Rml4RnJhZ21lbnQgZXh0ZW5kcyBTT0FQRW5jQXJyYXlGcmFnbWVudCB7Ci0gIHB1YmxpYyBTT0FQRW5jQXJyYXlGaXhGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGNvbnRyb2xsZXIsIFhTRE1vZGVsR3JvdXAgeHNkTW9kZWxHcm91cCkgewotICAgIHN1cGVyKGlkLCBuYW1lLCBjb25maWcsIGNvbnRyb2xsZXIsIHhzZE1vZGVsR3JvdXApOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRJbmZvcm1hdGlvbkZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNERGVmYXVsdEluZm9GcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRSZWFkRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9TT0FQRW5jQXJyYXlSRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3JpdGVGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1NPQVBFbmNBcnJheUZpeFdGcmFnbWVudEpTUC5qc3AiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9TT0FQRW5jQXJyYXlGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvU09BUEVuY0FycmF5RnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmYwM2RkMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9TT0FQRW5jQXJyYXlGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuRnJhZ21lbnRDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSVNPQVBFbmNBcnJheUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RNb2RlbEdyb3VwOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RQYXJ0aWNsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEUGFydGljbGVDb250ZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFNPQVBFbmNBcnJheUZyYWdtZW50IGV4dGVuZHMgWFNER3JvdXBTZXFGcmFnbWVudCBpbXBsZW1lbnRzIElTT0FQRW5jQXJyYXlGcmFnbWVudAotewotICBwdWJsaWMgU09BUEVuY0FycmF5RnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBjb250cm9sbGVyLCBYU0RNb2RlbEdyb3VwIHhzZE1vZGVsR3JvdXApCi0gIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnLCBjb250cm9sbGVyLCB4c2RNb2RlbEdyb3VwKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHNldFBhcmFtZXRlclZhbHVlc0Zyb21JbnN0YW5jZURvY3VtZW50cyhFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMpCi0gIHsKLSAgICBFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHNDb3B5ID0gZ2V0SW5zdGFuY2VEb2N1bWVudHNCeVRhZ05hbWUoaW5zdGFuY2VEb2N1bWVudHMsIGdldE5hbWUoKSk7Ci0gICAgcmVtb3ZlR3JvdXBJRHMoKTsKLSAgICBib29sZWFuIHBhcmFtc1ZhbGlkID0gaW50ZXJuYWxFcXVhbHMoaW5zdGFuY2VEb2N1bWVudHNDb3B5LCBpbnN0YW5jZURvY3VtZW50cyk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YW5jZURvY3VtZW50c0NvcHkubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgSVhTREZyYWdtZW50IHNvYXBFbmNBcnJheVR5cGVGcmFnID0gKGdldEdyb3VwTWVtYmVyRnJhZ21lbnRzKGNyZWF0ZVNPQVBFbmNBcnJheUluc3RhbmNlKCkpKVswXTsKLSAgICAgIFZlY3RvciBpbnN0YW5jZXNWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBOb2RlTGlzdCBubCA9IGluc3RhbmNlRG9jdW1lbnRzQ29weVtpXS5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICBmb3IgKGludCBqID0gMDsgaiA8IG5sLmdldExlbmd0aCgpOyBqKyspCi0gICAgICB7Ci0gICAgICAgIE5vZGUgbm9kZSA9IG5sLml0ZW0oaik7Ci0gICAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgRWxlbWVudCkKLSAgICAgICAgICBpbnN0YW5jZXNWZWN0b3IuYWRkKG5vZGUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgcGFyYW1zVmFsaWQgPSBmYWxzZTsKLSAgICAgIH0KLSAgICAgIEVsZW1lbnRbXSBjaGlsZEluc3RhbmNlRG9jdW1lbnRzID0gbmV3IEVsZW1lbnRbaW5zdGFuY2VzVmVjdG9yLnNpemUoKV07Ci0gICAgICBpbnN0YW5jZXNWZWN0b3IuY29weUludG8oY2hpbGRJbnN0YW5jZURvY3VtZW50cyk7Ci0gICAgICBpZiAoIXNvYXBFbmNBcnJheVR5cGVGcmFnLnNldFBhcmFtZXRlclZhbHVlc0Zyb21JbnN0YW5jZURvY3VtZW50cyhzZXRFbGVtZW50c1RhZ05hbWUoY2hpbGRJbnN0YW5jZURvY3VtZW50cywgc29hcEVuY0FycmF5VHlwZUZyYWcuZ2V0TmFtZSgpKSkpCi0gICAgICAgIHBhcmFtc1ZhbGlkID0gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiBwYXJhbXNWYWxpZDsKLSAgfQotCi0gIHB1YmxpYyBFbGVtZW50W10gZ2VuSW5zdGFuY2VEb2N1bWVudHNGcm9tUGFyYW1ldGVyVmFsdWVzKGJvb2xlYW4gZ2VuWFNJVHlwZSwgSGFzaHRhYmxlIG5hbWVzcGFjZVRhYmxlLCBEb2N1bWVudCBkb2MpCi0gIHsKLSAgICBTdHJpbmdbXSBncm91cElEcyA9IGdldEdyb3VwSURzKCk7Ci0gICAgRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnQgPSBuZXcgRWxlbWVudFtncm91cElEcy5sZW5ndGhdOwotICAgIFN0cmluZ0J1ZmZlciBhdHRyTmFtZSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBTdHJpbmdCdWZmZXIgYXR0clZhbHVlID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotLy8gICAgU3RyaW5nQnVmZmVyIGF0dHJBcnJheVR5cGVOYW1lID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotLy8gICAgU3RyaW5nQnVmZmVyIGF0dHJBcnJheVR5cGVWYWx1ZSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGluc3RhbmNlRG9jdW1lbnQubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgaW50IG51bUluc3RhbmNlcyA9IDA7Ci0gICAgICBpbnN0YW5jZURvY3VtZW50W2ldID0gZG9jLmNyZWF0ZUVsZW1lbnQoZ2V0SW5zdGFuY2VEb2N1bWVudFRhZ05hbWUobmFtZXNwYWNlVGFibGUpKTsKLSAgICAgIElYU0RGcmFnbWVudCBmcmFnbWVudCA9IChnZXRHcm91cE1lbWJlckZyYWdtZW50cyhncm91cElEc1tpXSkpWzBdOwotICAgICAgRWxlbWVudFtdIGZyYWdtZW50SW5zdGFuY2VEb2N1bWVudHMgPSBmcmFnbWVudC5nZW5JbnN0YW5jZURvY3VtZW50c0Zyb21QYXJhbWV0ZXJWYWx1ZXMoZ2VuWFNJVHlwZSwgbmFtZXNwYWNlVGFibGUsIGRvYyk7Ci0gICAgICBmb3IgKGludCBqID0gMDsgaiA8IGZyYWdtZW50SW5zdGFuY2VEb2N1bWVudHMubGVuZ3RoOyBqKyspCi0gICAgICB7Ci0gICAgICAgIGlmIChmcmFnbWVudEluc3RhbmNlRG9jdW1lbnRzW2pdICE9IG51bGwpCi0gICAgICAgICAgaW5zdGFuY2VEb2N1bWVudFtpXS5hcHBlbmRDaGlsZChmcmFnbWVudEluc3RhbmNlRG9jdW1lbnRzW2pdKTsKLSAgICAgICAgbnVtSW5zdGFuY2VzKys7Ci0gICAgICB9Ci0gICAgICBTdHJpbmcgc29hcFVSSSA9IEZyYWdtZW50Q29uc3RhbnRzLlVSSV9TT0FQOwotICAgICAgU3RyaW5nIHNvYXBQcmVmaXggPSBnZXRQcmVmaXhGcm9tTmFtZXNwYWNlVVJJKHNvYXBVUkksIG5hbWVzcGFjZVRhYmxlKTsKLSAgICAgIFN0cmluZyBzb2FwRW5jQXJyYXlUeXBlVVJJID0gZ2V0WFNEVHlwZURlZmluaXRpb24oKS5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLSAgICAgIFN0cmluZyBzb2FwRW5jQXJyYXlUeXBlUHJlZml4ID0gZ2V0UHJlZml4RnJvbU5hbWVzcGFjZVVSSShzb2FwRW5jQXJyYXlUeXBlVVJJLCBuYW1lc3BhY2VUYWJsZSk7Ci0gICAgICAvLyBTZXQgdGhlIGFycmF5VHlwZSBhdHRyaWJ1dGUKLSAgICAgIGF0dHJOYW1lLnNldExlbmd0aCgwKTsKLSAgICAgIGF0dHJOYW1lLnNldExlbmd0aCgwKTsKLSAgICAgIGF0dHJOYW1lLmFwcGVuZChzb2FwUHJlZml4KTsKLSAgICAgIGF0dHJOYW1lLmFwcGVuZChGcmFnbWVudENvbnN0YW50cy5DT0xPTik7Ci0gICAgICBhdHRyTmFtZS5hcHBlbmQoRnJhZ21lbnRDb25zdGFudHMuU09BUF9FTkNfQVJSQVlfVFlQRSk7Ci0gICAgICBhdHRyVmFsdWUuc2V0TGVuZ3RoKDApOwotICAgICAgYXR0clZhbHVlLmFwcGVuZChzb2FwRW5jQXJyYXlUeXBlUHJlZml4KTsKLSAgICAgIGF0dHJWYWx1ZS5hcHBlbmQoRnJhZ21lbnRDb25zdGFudHMuQ09MT04pOwotICAgICAgYXR0clZhbHVlLmFwcGVuZChnZXRYU0RUeXBlRGVmaW5pdGlvbigpLmdldE5hbWUoKSk7Ci0gICAgICBhdHRyVmFsdWUuYXBwZW5kKEZyYWdtZW50Q29uc3RhbnRzLkxFRlRfU1FVQVJFX0JSQUNLRVQpOwotICAgICAgYXR0clZhbHVlLmFwcGVuZChudW1JbnN0YW5jZXMpOwotICAgICAgYXR0clZhbHVlLmFwcGVuZChGcmFnbWVudENvbnN0YW50cy5SSUdIVF9TUVVBUkVfQlJBQ0tFVCk7Ci0gICAgICBpbnN0YW5jZURvY3VtZW50W2ldLnNldEF0dHJpYnV0ZShhdHRyTmFtZS50b1N0cmluZygpLCBhdHRyVmFsdWUudG9TdHJpbmcoKSk7Ci0gICAgfQotICAgIGlmIChnZW5YU0lUeXBlKQotICAgIHsKLS8vCSAgVE9ETzogVXNlZCB0byBjYWxsIHRoZSBwbHVnaW4ncyBpZ25vcmVTY2hlbWFGb3JTT0FQQXJyYXlzKCltZXRob2QuCi0JICBib29sZWFuIGlnbm9yZVNjaGVtYUZvclNPQVBBcnJheXMgPSB0cnVlOwotICAgICAgaWYgKGlnbm9yZVNjaGVtYUZvclNPQVBBcnJheXMpCi0gICAgICB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFuY2VEb2N1bWVudC5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyB4c2lVUkkgPSBGcmFnbWVudENvbnN0YW50cy5VUklfWFNJOwotICAgICAgICAgIFN0cmluZyB4c2lQcmVmaXggPSBnZXRQcmVmaXhGcm9tTmFtZXNwYWNlVVJJKHhzaVVSSSwgbmFtZXNwYWNlVGFibGUpOwotICAgICAgICAgIFN0cmluZyB4c2lUeXBlVVJJID0gRnJhZ21lbnRDb25zdGFudHMuVVJJX1NPQVA7Ci0gICAgICAgICAgU3RyaW5nIHhzaVR5cGVQcmVmaXggPSBnZXRQcmVmaXhGcm9tTmFtZXNwYWNlVVJJKHhzaVR5cGVVUkksIG5hbWVzcGFjZVRhYmxlKTsKLSAgICAgICAgICBhdHRyTmFtZS5zZXRMZW5ndGgoMCk7Ci0gICAgICAgICAgYXR0ck5hbWUuYXBwZW5kKHhzaVByZWZpeCkuYXBwZW5kKEZyYWdtZW50Q29uc3RhbnRzLkNPTE9OKS5hcHBlbmQoRnJhZ21lbnRDb25zdGFudHMuWFNJX1RZUEUpOwotICAgICAgICAgIGF0dHJWYWx1ZS5zZXRMZW5ndGgoMCk7Ci0gICAgICAgICAgYXR0clZhbHVlLmFwcGVuZCh4c2lUeXBlUHJlZml4KS5hcHBlbmQoRnJhZ21lbnRDb25zdGFudHMuQ09MT04pOwotICAgICAgICAgIGF0dHJWYWx1ZS5hcHBlbmQoRnJhZ21lbnRDb25zdGFudHMuUU5BTUVfTE9DQUxfTkFNRV9BUlJBWSk7Ci0gICAgICAgICAgaW5zdGFuY2VEb2N1bWVudFtpXS5zZXRBdHRyaWJ1dGUoYXR0ck5hbWUudG9TdHJpbmcoKSwgYXR0clZhbHVlLnRvU3RyaW5nKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIHJldHVybiBhZGRYU0lUeXBlKGluc3RhbmNlRG9jdW1lbnQsIG5hbWVzcGFjZVRhYmxlKTsKLSAgICB9Ci0gICAgcmV0dXJuIGluc3RhbmNlRG9jdW1lbnQ7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGNyZWF0ZVNPQVBFbmNBcnJheUluc3RhbmNlKCkKLSAgewotICAgIGlmIChnZXRYU0RUeXBlRGVmaW5pdGlvbigpICE9IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nIGdyb3VwSUQgPSBnZW5JRCgpOwotICAgICAgU3RyaW5nW10gZ3JvdXBNZW1iZXJJRCA9IHtnZW5JRCgpfTsKLSAgICAgIGludCBtaW5PY2N1cnMgPSAwOwotICAgICAgaW50IG1heE9jY3VycyA9IEZyYWdtZW50Q29uc3RhbnRzLlVOQk9VTkRFRDsKLSAgICAgIFhTREVsZW1lbnREZWNsYXJhdGlvbiBlbGVtZW50RGVjbCA9IG51bGw7Ci0gICAgICBpZiAoZ2V0WFNETW9kZWxHcm91cCgpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIFhTRFBhcnRpY2xlIGdyb3VwT3duZXIgPSAoWFNEUGFydGljbGUpZ2V0WFNETW9kZWxHcm91cCgpLmdldENvbnRhaW5lcigpOwotICAgICAgICBpbnQgZ3JvdXBNaW4gPSBncm91cE93bmVyLmdldE1pbk9jY3VycygpOwotICAgICAgICBpbnQgZ3JvdXBNYXggPSBncm91cE93bmVyLmdldE1heE9jY3VycygpOwotICAgICAgICBpbnQgZWxlbWVudE1pbiA9IDA7Ci0gICAgICAgIGludCBlbGVtZW50TWF4ID0gRnJhZ21lbnRDb25zdGFudHMuVU5CT1VOREVEOwotICAgICAgICBFTGlzdCB4c2RQYXJ0aWNsZXMgPSBnZXRYU0RNb2RlbEdyb3VwKCkuZ2V0UGFydGljbGVzKCk7Ci0gICAgICAgIGlmICh4c2RQYXJ0aWNsZXMuc2l6ZSgpID4gMCkKLSAgICAgICAgewotICAgICAgICAgIFhTRFBhcnRpY2xlQ29udGVudCB4c2RQYXJ0aWNsZUNvbnRlbnQgPSAoKFhTRFBhcnRpY2xlKXhzZFBhcnRpY2xlcy5nZXQoMCkpLmdldENvbnRlbnQoKTsKLSAgICAgICAgICBpZiAoeHNkUGFydGljbGVDb250ZW50IGluc3RhbmNlb2YgWFNERWxlbWVudERlY2xhcmF0aW9uKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGVsZW1lbnREZWNsID0gKFhTREVsZW1lbnREZWNsYXJhdGlvbil4c2RQYXJ0aWNsZUNvbnRlbnQ7Ci0gICAgICAgICAgICBYU0RQYXJ0aWNsZSBlbGVtZW50T3duZXIgPSAoWFNEUGFydGljbGUpZWxlbWVudERlY2wuZ2V0Q29udGFpbmVyKCk7Ci0gICAgICAgICAgICBlbGVtZW50TWluID0gZWxlbWVudE93bmVyLmdldE1pbk9jY3VycygpOwotICAgICAgICAgICAgZWxlbWVudE1heCA9IGVsZW1lbnRPd25lci5nZXRNYXhPY2N1cnMoKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGdyb3VwTWluID49IDAgJiYgZWxlbWVudE1pbiA+PSAwKQotICAgICAgICAgIG1pbk9jY3VycyA9IGdyb3VwTWluICogZWxlbWVudE1pbjsKLSAgICAgICAgaWYgKGdyb3VwTWF4ID49IDAgJiYgZ3JvdXBNYXggIT0gRnJhZ21lbnRDb25zdGFudHMuVU5CT1VOREVEICYmIGVsZW1lbnRNYXggPj0gMCAmJiBlbGVtZW50TWF4ICE9IEZyYWdtZW50Q29uc3RhbnRzLlVOQk9VTkRFRCkKLSAgICAgICAgICBtYXhPY2N1cnMgPSBncm91cE1heCAqIGVsZW1lbnRNYXg7Ci0gICAgICB9Ci0gICAgICBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB0aGlzQ29uZmlnID0gZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLSAgICAgIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IG5ldyBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotICAgICAgeHNkQ29uZmlnLnNldFhTRENvbXBvbmVudChnZXRYU0RUeXBlRGVmaW5pdGlvbigpKTsKLSAgICAgIHhzZENvbmZpZy5zZXRNaW5PY2N1cnMobWluT2NjdXJzKTsKLSAgICAgIHhzZENvbmZpZy5zZXRNYXhPY2N1cnMobWF4T2NjdXJzKTsKLSAgICAgIHhzZENvbmZpZy5zZXRTdHlsZSh0aGlzQ29uZmlnLmdldFN0eWxlKCkpOwotICAgICAgeHNkQ29uZmlnLnNldFBhcnRFbmNvZGluZyh0aGlzQ29uZmlnLmdldFBhcnRFbmNvZGluZygpKTsKLSAgICAgIHhzZENvbmZpZy5zZXRXU0RMUGFydE5hbWUodGhpc0NvbmZpZy5nZXRXU0RMUGFydE5hbWUoKSk7Ci0gICAgICBTdHJpbmcgbmFtZSA9IChlbGVtZW50RGVjbCAhPSBudWxsKSA/IGVsZW1lbnREZWNsLmdldE5hbWUoKSA6IGdldFhTRFR5cGVEZWZpbml0aW9uKCkuZ2V0TmFtZSgpOwotICAgICAgSVhTREZyYWdtZW50IGZyYWcgPSBnZXRYU0RUb0ZyYWdtZW50Q29udHJvbGxlcigpLmdldEZyYWdtZW50KHhzZENvbmZpZywgZ3JvdXBNZW1iZXJJRFswXSwgbmFtZSk7Ci0gICAgICBhZGRGcmFnbWVudChncm91cE1lbWJlcklEWzBdLCBmcmFnKTsKLSAgICAgIHNldEdyb3VwTWVtYmVySURzKGdyb3VwSUQsIGdyb3VwTWVtYmVySUQpOwotICAgICAgcmV0dXJuIGdyb3VwSUQ7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBjcmVhdGVHcm91cFNlcUluc3RhbmNlKCkKLSAgewotICAgIHJldHVybiBjcmVhdGVTT0FQRW5jQXJyYXlJbnN0YW5jZSgpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBjcmVhdGVJbnN0YW5jZSgpCi0gIHsKLSAgICByZXR1cm4gY3JlYXRlU09BUEVuY0FycmF5SW5zdGFuY2UoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvU09BUEVuY0FycmF5UmFuZ2VGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvU09BUEVuY0FycmF5UmFuZ2VGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjU2N2VlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1NPQVBFbmNBcnJheVJhbmdlRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE1vZGVsR3JvdXA7Ci0KLXB1YmxpYyBjbGFzcyBTT0FQRW5jQXJyYXlSYW5nZUZyYWdtZW50IGV4dGVuZHMgU09BUEVuY0FycmF5RnJhZ21lbnQgewotICBwdWJsaWMgU09BUEVuY0FycmF5UmFuZ2VGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGNvbnRyb2xsZXIsIFhTRE1vZGVsR3JvdXAgeHNkTW9kZWxHcm91cCkgewotICAgIHN1cGVyKGlkLCBuYW1lLCBjb25maWcsIGNvbnRyb2xsZXIsIHhzZE1vZGVsR3JvdXApOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRJbmZvcm1hdGlvbkZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNERGVmYXVsdEluZm9GcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRSZWFkRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9TT0FQRW5jQXJyYXlSRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3JpdGVGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1NPQVBFbmNBcnJheVJhbmdlV0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1NPQVBFbmNvZGluZ1dyYXBwZXJGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvU09BUEVuY29kaW5nV3JhcHBlckZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkOTNlMjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvU09BUEVuY29kaW5nV3JhcHBlckZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSVNPQVBFbmNvZGluZ1dyYXBwZXJGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi1wdWJsaWMgY2xhc3MgU09BUEVuY29kaW5nV3JhcHBlckZyYWdtZW50IGV4dGVuZHMgWFNERGVsZWdhdGlvbkZyYWdtZW50IGltcGxlbWVudHMgSVNPQVBFbmNvZGluZ1dyYXBwZXJGcmFnbWVudAotewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSUQgPSAiaWQiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSFJFRiA9ICJocmVmIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBPVU5EID0gIiMiOwotCi0gIHByaXZhdGUgSGFzaHRhYmxlIHVyaVJlZmVyZW5jZVRhYmxlXzsKLQotICBwdWJsaWMgU09BUEVuY29kaW5nV3JhcHBlckZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZykKLSAgewotICAgIHN1cGVyKGlkLCBuYW1lLCBudWxsKTsKLSAgICB1cmlSZWZlcmVuY2VUYWJsZV8gPSBudWxsOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnKQotICB7Ci0gICAgZ2V0WFNERGVsZWdhdGlvbkZyYWdtZW50KCkuc2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oY29uZmlnKTsKLSAgfQotCi0gIHB1YmxpYyBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBnZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gZ2V0WFNERGVsZWdhdGlvbkZyYWdtZW50KCkuZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFhTRFR5cGVEZWZpbml0aW9uKFhTRFR5cGVEZWZpbml0aW9uIHR5cGVEZWYpCi0gIHsKLSAgICBnZXRYU0REZWxlZ2F0aW9uRnJhZ21lbnQoKS5zZXRYU0RUeXBlRGVmaW5pdGlvbih0eXBlRGVmKTsKLSAgfQotCi0gIHB1YmxpYyBYU0RUeXBlRGVmaW5pdGlvbiBnZXRYU0RUeXBlRGVmaW5pdGlvbigpCi0gIHsKLSAgICByZXR1cm4gZ2V0WFNERGVsZWdhdGlvbkZyYWdtZW50KCkuZ2V0WFNEVHlwZURlZmluaXRpb24oKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHNldFBhcmFtZXRlclZhbHVlc0Zyb21JbnN0YW5jZURvY3VtZW50cyhFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMpCi0gIHsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGluc3RhbmNlRG9jdW1lbnRzLmxlbmd0aDsgaSsrKQotICAgICAgaW5zdGFuY2VEb2N1bWVudHNbaV0gPSByZXNvbHZlVVJJUmVmZXJlbmNlcyh1cmlSZWZlcmVuY2VUYWJsZV8sIGluc3RhbmNlRG9jdW1lbnRzW2ldKTsKLSAgICByZXR1cm4gZ2V0WFNERGVsZWdhdGlvbkZyYWdtZW50KCkuc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKGluc3RhbmNlRG9jdW1lbnRzKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFVSSVJlZmVyZW5jZXMoSGFzaHRhYmxlIHVyaVJlZmVyZW5jZXMpCi0gIHsKLSAgICB1cmlSZWZlcmVuY2VUYWJsZV8gPSB1cmlSZWZlcmVuY2VzOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBIYXNodGFibGUgcGFyc2VVUklSZWZlcmVuY2VzKEVsZW1lbnQgZWxlbWVudCwgYm9vbGVhbiBvdmVyd3JpdGVzKQotICB7Ci0gICAgSGFzaHRhYmxlIHVyaVJlZmVyZW5jZXMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgcGFyc2VVUklSZWZlcmVuY2VzKHVyaVJlZmVyZW5jZXMsIGVsZW1lbnQsIG92ZXJ3cml0ZXMpOwotICAgIHJldHVybiB1cmlSZWZlcmVuY2VzOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBwYXJzZVVSSVJlZmVyZW5jZXMoSGFzaHRhYmxlIHVyaVJlZmVyZW5jZXMsIEVsZW1lbnQgZWxlbWVudCwgYm9vbGVhbiBvdmVyd3JpdGVzKQotICB7Ci0gICAgYm9vbGVhbiByZXNvbHZlZCA9IHRydWU7Ci0gICAgaWYgKGVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBVUklSZWZlcmVuY2UgcmVmID0gbnVsbDsKLSAgICAgIFN0cmluZyBpZCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKElEKTsKLSAgICAgIHJlc29sdmVkID0gIWVsZW1lbnQuaGFzQXR0cmlidXRlKEhSRUYpOwotICAgICAgaWYgKGlkICE9IG51bGwgJiYgaWQubGVuZ3RoKCkgPiAwICYmIChvdmVyd3JpdGVzIHx8ICF1cmlSZWZlcmVuY2VzLmNvbnRhaW5zKGlkKSkpCi0gICAgICB7Ci0gICAgICAgIHJlZiA9IG5ldyBVUklSZWZlcmVuY2UoZWxlbWVudCwgdHJ1ZSk7Ci0gICAgICAgIHVyaVJlZmVyZW5jZXMucHV0KGlkLCByZWYpOwotICAgICAgfQotICAgICAgTm9kZUxpc3QgbmwgPSBlbGVtZW50LmdldENoaWxkTm9kZXMoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmwuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgTm9kZSBub2RlID0gbmwuaXRlbShpKTsKLSAgICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50KQotICAgICAgICAgIHJlc29sdmVkID0gcGFyc2VVUklSZWZlcmVuY2VzKHVyaVJlZmVyZW5jZXMsIChFbGVtZW50KW5vZGUsIG92ZXJ3cml0ZXMpICYmIHJlc29sdmVkOwotICAgICAgfQotICAgICAgaWYgKHJlZiAhPSBudWxsKQotICAgICAgICByZWYuc2V0UmVzb2x2ZWQocmVzb2x2ZWQpOwotICAgIH0KLSAgICByZXR1cm4gcmVzb2x2ZWQ7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgcmVzb2x2ZVVSSVJlZmVyZW5jZXMoSGFzaHRhYmxlIHVyaVJlZmVyZW5jZXMsIEVsZW1lbnQgZWxlbWVudCkKLSAgewotICAgIGlmICh1cmlSZWZlcmVuY2VzICE9IG51bGwgJiYgIXVyaVJlZmVyZW5jZXMuaXNFbXB0eSgpKQotICAgICAgcmV0dXJuIHJlc29sdmVVUklSZWZlcmVuY2VzKHVyaVJlZmVyZW5jZXMsIGVsZW1lbnQuZ2V0T3duZXJEb2N1bWVudCgpLCBlbGVtZW50LCBuZXcgVmVjdG9yKCkpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBlbGVtZW50OwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgRWxlbWVudCByZXNvbHZlVVJJUmVmZXJlbmNlcyhIYXNodGFibGUgdXJpUmVmZXJlbmNlcywgRG9jdW1lbnQgZG9jLCBFbGVtZW50IGVsZW1lbnQsIFZlY3RvciB1c2VkSWRzKQotICB7Ci0gICAgU3RyaW5nIGhyZWYgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShIUkVGKTsKLSAgICBFbGVtZW50IHJlc29sdmVkRWxlbWVudCA9IGVsZW1lbnQ7Ci0gICAgYm9vbGVhbiByZXNvbHZlZCA9IGZhbHNlOwotICAgIGlmIChocmVmICE9IG51bGwgJiYgaHJlZi5sZW5ndGgoKSA+IDApCi0gICAgewotICAgICAgVVJJUmVmZXJlbmNlIHJlZiA9IG51bGw7Ci0gICAgICBpZiAoaHJlZi5pbmRleE9mKFBPVU5EKSAhPSAtMSkKLSAgICAgICAgaHJlZiA9IGhyZWYuc3Vic3RyaW5nKDEsIGhyZWYubGVuZ3RoKCkpOwotICAgICAgaWYgKCF1c2VkSWRzLmNvbnRhaW5zKGhyZWYpKQotICAgICAgewotICAgICAgICByZWYgPSAoVVJJUmVmZXJlbmNlKXVyaVJlZmVyZW5jZXMuZ2V0KGhyZWYpOwotICAgICAgICBpZiAocmVmICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICB1c2VkSWRzLmFkZChocmVmKTsKLSAgICAgICAgICBFbGVtZW50IGVsZW1lbnRSZWYgPSByZWYuZ2V0UmVmRWxlbWVudCgpOwotICAgICAgICAgIHJlc29sdmVkID0gcmVmLmdldFJlc29sdmVkKCk7Ci0gICAgICAgICAgcmVzb2x2ZWRFbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoZWxlbWVudC5nZXRUYWdOYW1lKCkpOwotICAgICAgICAgIE5vZGVMaXN0IG5sID0gZWxlbWVudFJlZi5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBubC5nZXRMZW5ndGgoKTsgaSsrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIE5vZGUgbm9kZSA9IG5sLml0ZW0oaSk7Ci0gICAgICAgICAgICBpZiAobm9kZSAhPSBudWxsKQotICAgICAgICAgICAgICByZXNvbHZlZEVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jLmltcG9ydE5vZGUobm9kZSwgdHJ1ZSkpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBpZiAoIXJlc29sdmVkKQotICAgIHsKLSAgICAgIE5vZGVMaXN0IG5sID0gcmVzb2x2ZWRFbGVtZW50LmdldENoaWxkTm9kZXMoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmwuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgTm9kZSBub2RlID0gbmwuaXRlbShpKTsKLSAgICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50KQotICAgICAgICB7Ci0gICAgICAgICAgRWxlbWVudCBjaGlsZCA9IHJlc29sdmVVUklSZWZlcmVuY2VzKHVyaVJlZmVyZW5jZXMsIHJlc29sdmVkRWxlbWVudC5nZXRPd25lckRvY3VtZW50KCksIChFbGVtZW50KW5vZGUsIHVzZWRJZHMpOwotCQkgIGlmIChjaGlsZCAhPSBub2RlKQotICAgICAgICAgICAgcmVzb2x2ZWRFbGVtZW50LnJlcGxhY2VDaGlsZChjaGlsZCwgbm9kZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGhyZWYgIT0gbnVsbCkKLSAgICAgIHVzZWRJZHMucmVtb3ZlKGhyZWYpOwotICAgIHJldHVybiByZXNvbHZlZEVsZW1lbnQ7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBjbGFzcyBVUklSZWZlcmVuY2UKLSAgewotICAgIHByaXZhdGUgRWxlbWVudCByZWZfOwotICAgIHByaXZhdGUgYm9vbGVhbiByZXNvbHZlZF87Ci0KLSAgICBwdWJsaWMgVVJJUmVmZXJlbmNlKEVsZW1lbnQgcmVmLCBib29sZWFuIHJlc29sdmVkKQotICAgIHsKLSAgICAgIHJlZl8gPSByZWY7Ci0gICAgICByZXNvbHZlZF8gPSByZXNvbHZlZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRWxlbWVudCBnZXRSZWZFbGVtZW50KCkKLSAgICB7Ci0gICAgICByZXR1cm4gcmVmXzsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRSZWZFbGVtZW50KEVsZW1lbnQgcmVmKQotICAgIHsKLSAgICAgIHJlZl8gPSByZWY7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gZ2V0UmVzb2x2ZWQoKQotICAgIHsKLSAgICAgIHJldHVybiByZXNvbHZlZF87Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0UmVzb2x2ZWQoYm9vbGVhbiByZXNvbHZlZCkKLSAgICB7Ci0gICAgICByZXNvbHZlZF8gPSByZXNvbHZlZDsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1NPQVBIZWFkZXJXcmFwcGVyRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1NPQVBIZWFkZXJXcmFwcGVyRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2E5MmM5Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9TT0FQSGVhZGVyV3JhcHBlckZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyODcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMzA1ICAgMTE3MDM0IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXZWIgU2VydmljZXMgRXhwbG9yZXIgc2hvdWxkIHN1cHBvcnQgU09BUCBIZWFkZXJzCi0gKiAyMDA3MDQxMyAgIDE3NjQ5MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFOiBNYWtlIG1lc3NhZ2UvdHJhbnNwb3J0IHN0YWNrIHBsdWdnYWJsZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbDsKLQotaW1wb3J0IGphdmEubmV0LlVSSTsKLWltcG9ydCBqYXZhLm5ldC5VUklTeW50YXhFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuRnJhZ21lbnRDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSVhTREZyYWdtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLS8qKgotICogQSBTT0FQIGhlYWRlciBmcmFnbWVudCwgd2hpY2ggaXMgYSB3cmFwcGVyIGFyb3VuZCB0aGUgZnJhZ21lbnQgdGhhdCByZXByZXNlbnRzIHRoZSBTT0FQIGhlYWRlciBjb250ZW50LiAgCi0gKi8KLXB1YmxpYyBjbGFzcyBTT0FQSGVhZGVyV3JhcHBlckZyYWdtZW50IGV4dGVuZHMgWFNERGVsZWdhdGlvbkZyYWdtZW50IHsKLQkKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTVVTVF9VTkRFUlNUQU5EID0gIm11c3RVbmRlcnN0YW5kIjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUNUT1IgICAgICAgICAgID0gImFjdG9yIjsKLQkKLQlwcml2YXRlIGJvb2xlYW4gbXVzdFVuZGVyc3RhbmQgPSBmYWxzZTsJIAotCXByaXZhdGUgU3RyaW5nICBhY3RvciAgICAgICAgICA9ICIiOwotCXByaXZhdGUgYm9vbGVhbiB2YWxpZEFjdG9yICAgICA9IHRydWU7Ci0JCi0JLyoqCi0JICogQ29uc3RydWN0b3IuCi0JICogCi0JICogQHBhcmFtIGZyYWdtZW50IFRoZSBmcmFnbWVudCB0aGF0IHRoaXMgU09BUCBoZWFkZXIgZnJhZ21lbnQgd3JhcHMgYXJvdW5kLgotCSAqLwotCXB1YmxpYyBTT0FQSGVhZGVyV3JhcHBlckZyYWdtZW50KElYU0RGcmFnbWVudCBmcmFnbWVudCkgewotCQlzdXBlcihmcmFnbWVudC5nZW5JRCgpLCBmcmFnbWVudC5nZXROYW1lKCksIG51bGwpOwkgICAgCi0JCXNldFhTRERlbGVnYXRpb25GcmFnbWVudChmcmFnbWVudCk7Ci0JfQotCQotCS8qCi0JICogUmV0cmlldmVzIHRoZSBmaXJzdCBlbGVtZW50IGZyb20gYSBzdHJpbmcgYXJyYXkuCi0JICovCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0Rmlyc3RFbGVtZW50KFN0cmluZ1tdIHN0cmluZ0FycmF5KSB7Ci0JCWlmIChzdHJpbmdBcnJheSA9PSBudWxsIHx8IHN0cmluZ0FycmF5Lmxlbmd0aCA9PSAwKQotCQkJcmV0dXJuIG51bGw7Ci0JCXJldHVybiBzdHJpbmdBcnJheVswXTsJCSAKLQl9Ci0JCi0JLyoKLQkgKiBSZXRyaWV2ZXMgdGhlIGZpcnN0IGVsZW1lbnQgZnJvbSBhIHZlY3Rvci4KLQkgKi8KLQlwcml2YXRlIFN0cmluZyBnZXRGaXJzdEVsZW1lbnQoVmVjdG9yIHZlY3RvcikgewotCQlpZiAodmVjdG9yID09IG51bGwgfHwgdmVjdG9yLmlzRW1wdHkoKSkKLQkJCXJldHVybiBudWxsOwotCQkgCi0JCU9iamVjdCBvYmogPSB2ZWN0b3IuZmlyc3RFbGVtZW50KCk7Ci0JCWlmICghKG9iaiBpbnN0YW5jZW9mIFN0cmluZykpCi0JCQlyZXR1cm4gbnVsbDsKLQkJIAotCQlyZXR1cm4gKFN0cmluZykgb2JqOwotCX0KLQkKLQkvKgotCSAqIFNldHMgdGhlIG11c3RVbmRlcnN0YW5kIHZhbHVlLiBBbnkgbm9uLWVtcHR5IHN0cmluZyAoZXhjZXB0ICIwIikKLQkgKiB0cmFuc2xhdGVzIHRvIGEgbXVzdFVuZGVyc3RhbmQgdmFsdWUgb2YgdHJ1ZS4KLQkgKi8KLQlwcml2YXRlIHZvaWQgc2V0TXVzdFVuZGVyc3RhbmQoU3RyaW5nIHBhcmFtKSB7Ci0JCW11c3RVbmRlcnN0YW5kID0gKHBhcmFtICE9IG51bGwgJiYgIXBhcmFtLmVxdWFscygiMCIpKTsKLQl9Ci0JCi0JLyoKLQkgKiBTZXRzIHRoZSBhY3RvciB2YWx1ZS4gIEFsc28gc2V0cyB0aGUgZmxhZyBmb3IgdmFsaWRBY3Rvci4KLQkgKi8KLQlwcml2YXRlIHZvaWQgc2V0QWN0b3IoU3RyaW5nIHBhcmFtKSB7Ci0JCWlmIChwYXJhbSA9PSBudWxsIHx8IHBhcmFtLmxlbmd0aCgpID09IDApCi0JCQlhY3RvciA9ICIiOwotCQllbHNlIHsKLQkJCWFjdG9yID0gcGFyYW07Ci0JCQl0cnkgewotCQkJCW5ldyBVUkkoYWN0b3IpOwotCQkJfQotCQkJY2F0Y2ggKFVSSVN5bnRheEV4Y2VwdGlvbiBlKSB7Ci0JCQkJdmFsaWRBY3RvciA9IGZhbHNlOwotCQkJCXJldHVybjsKLQkJCX0KLQkJfQkJIAotCQkgCi0JCXZhbGlkQWN0b3IgPSB0cnVlOwotCX0JIAotCQotICAgIC8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuWFNERGVsZWdhdGlvbkZyYWdtZW50I3Byb2Nlc3NQYXJhbWV0ZXJWYWx1ZXMob3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIpCi0JICovCi0JcHVibGljIGJvb2xlYW4gcHJvY2Vzc1BhcmFtZXRlclZhbHVlcyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbiB7Ci0JCi0JCXNldE11c3RVbmRlcnN0YW5kKHBhcnNlci5nZXRQYXJhbWV0ZXIoZ2V0TXVzdFVuZGVyc3RhbmRJRCgpKSk7Ci0JICAgIHNldEFjdG9yKHBhcnNlci5nZXRQYXJhbWV0ZXIoZ2V0QWN0b3JJRCgpKSk7Ci0KLQkJLy8gbXVzdFVuZGVyc3RhbmQgaXMgZWl0aGVyIHNldCBvciB1bnNldCwgbm8gZnVydGhlciB2YWxpZGF0aW9uIG5lY2Vzc2FyeQotCQkvLyBvbmx5IG5lZWQgdG8gdmFsaWRhdGUgYWN0b3IgVVJJCi0JCXJldHVybiBzdXBlci5wcm9jZXNzUGFyYW1ldGVyVmFsdWVzKHBhcnNlcikgJiYgdmFsaWRhdGVBY3RvcigpOwkJCSAJCSAKLQl9Ci0JCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuWFNERGVsZWdhdGlvbkZyYWdtZW50I3NldFBhcmFtZXRlclZhbHVlcyhqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nW10pCi0JICovCi0JcHVibGljIHZvaWQgc2V0UGFyYW1ldGVyVmFsdWVzKFN0cmluZyBwYXJhbUtleSwgU3RyaW5nW10gcGFyYW1zKSB7Ci0JCWlmIChnZXRNdXN0VW5kZXJzdGFuZElEKCkuZXF1YWxzKHBhcmFtS2V5KSkKLQkJCXNldE11c3RVbmRlcnN0YW5kKGdldEZpcnN0RWxlbWVudChwYXJhbXMpKTsKLQkJZWxzZSBpZiAoZ2V0QWN0b3JJRCgpLmVxdWFscyhwYXJhbUtleSkpCi0JCQlzZXRBY3RvcihnZXRGaXJzdEVsZW1lbnQocGFyYW1zKSk7Ci0JCWVsc2UKLQkJCXN1cGVyLnNldFBhcmFtZXRlclZhbHVlcyhwYXJhbUtleSwgcGFyYW1zKTsJCSAKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5YU0REZWxlZ2F0aW9uRnJhZ21lbnQjc2V0UGFyYW1ldGVyVmFsdWVzKGphdmEubGFuZy5TdHJpbmcsIGphdmEudXRpbC5WZWN0b3IpCi0JICovCi0JcHVibGljIHZvaWQgc2V0UGFyYW1ldGVyVmFsdWVzKFN0cmluZyBwYXJhbUtleSwgVmVjdG9yIHBhcmFtcykgewotCQlpZiAoZ2V0TXVzdFVuZGVyc3RhbmRJRCgpLmVxdWFscyhwYXJhbUtleSkpCi0JCQlzZXRNdXN0VW5kZXJzdGFuZChnZXRGaXJzdEVsZW1lbnQocGFyYW1zKSk7Ci0JCWVsc2UgaWYgKGdldEFjdG9ySUQoKS5lcXVhbHMocGFyYW1LZXkpKQotCQkJc2V0QWN0b3IoZ2V0Rmlyc3RFbGVtZW50KHBhcmFtcykpOwotCQllbHNlCi0JCQlzdXBlci5zZXRQYXJhbWV0ZXJWYWx1ZXMocGFyYW1LZXksIHBhcmFtcyk7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuWFNERGVsZWdhdGlvbkZyYWdtZW50I2dldFBhcmFtZXRlclZhbHVlcyhqYXZhLmxhbmcuU3RyaW5nKQotCSAqLwotCXB1YmxpYyBTdHJpbmdbXSBnZXRQYXJhbWV0ZXJWYWx1ZXMoU3RyaW5nIHBhcmFtS2V5KSB7Ci0JCWlmIChnZXRNdXN0VW5kZXJzdGFuZElEKCkuZXF1YWxzKHBhcmFtS2V5KSkKLQkJCXJldHVybiBuZXcgU3RyaW5nW10geyBtdXN0VW5kZXJzdGFuZCA/ICIxIiA6ICIwIiB9OwotCQllbHNlIGlmIChnZXRBY3RvcklEKCkuZXF1YWxzKHBhcmFtS2V5KSkKLQkJCXJldHVybiBuZXcgU3RyaW5nW10geyBhY3RvciB9OwotCQllbHNlCi0JCQlyZXR1cm4gc3VwZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKHBhcmFtS2V5KTsJCSAKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5YU0REZWxlZ2F0aW9uRnJhZ21lbnQjZ2V0UGFyYW1ldGVyVmFsdWUoamF2YS5sYW5nLlN0cmluZywgaW50KQotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0UGFyYW1ldGVyVmFsdWUoU3RyaW5nIHBhcmFtS2V5LCBpbnQgcGFyYW1JbmRleCkgewotCQlyZXR1cm4gZ2V0UGFyYW1ldGVyVmFsdWVzKHBhcmFtS2V5KVtwYXJhbUluZGV4XTsKLQl9CSAKLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLlhTRERlbGVnYXRpb25GcmFnbWVudCN2YWxpZGF0ZUFsbFBhcmFtZXRlclZhbHVlcygpCi0JICovCi0JcHVibGljIGJvb2xlYW4gdmFsaWRhdGVBbGxQYXJhbWV0ZXJWYWx1ZXMoKSB7Ci0JCXJldHVybiBzdXBlci52YWxpZGF0ZUFsbFBhcmFtZXRlclZhbHVlcygpICYmIHZhbGlkYXRlQWN0b3IoKTsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5YU0REZWxlZ2F0aW9uRnJhZ21lbnQjdmFsaWRhdGVQYXJhbWV0ZXJWYWx1ZXMoamF2YS5sYW5nLlN0cmluZykKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZVBhcmFtZXRlclZhbHVlcyhTdHJpbmcgcGFyYW1LZXkpIHsKLQkJaWYgKGdldE11c3RVbmRlcnN0YW5kSUQoKS5lcXVhbHMocGFyYW1LZXkpKQotCQkJcmV0dXJuIHRydWU7Ci0JCWVsc2UgaWYgKGdldEFjdG9ySUQoKS5lcXVhbHMocGFyYW1LZXkpKQotCQkJcmV0dXJuIHZhbGlkYXRlQWN0b3IoKTsKLQkJZWxzZQotCQkJcmV0dXJuIHN1cGVyLnZhbGlkYXRlUGFyYW1ldGVyVmFsdWVzKHBhcmFtS2V5KTsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5YU0REZWxlZ2F0aW9uRnJhZ21lbnQjdmFsaWRhdGVQYXJhbWV0ZXJWYWx1ZShqYXZhLmxhbmcuU3RyaW5nLCBpbnQpCi0JICovCi0JcHVibGljIGJvb2xlYW4gdmFsaWRhdGVQYXJhbWV0ZXJWYWx1ZShTdHJpbmcgcGFyYW1LZXksIGludCBwYXJhbUluZGV4KSB7Ci0JCWlmIChnZXRNdXN0VW5kZXJzdGFuZElEKCkuZXF1YWxzKHBhcmFtS2V5KSkKLQkJCXJldHVybiB0cnVlOwotCQllbHNlIGlmIChnZXRBY3RvcklEKCkuZXF1YWxzKHBhcmFtS2V5KSkKLQkJCXJldHVybiB2YWxpZGF0ZUFjdG9yKCk7Ci0JCWVsc2UKLQkJCXJldHVybiBzdXBlci52YWxpZGF0ZVBhcmFtZXRlclZhbHVlKHBhcmFtS2V5LCBwYXJhbUluZGV4KTsKLQl9Ci0JCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWVzIGZvciB0aGlzIFNPQVAgaGVhZGVyIGdpdmVuIGFuIGluc3RhbmNlIGRvY3VtZW50IGFuZCBhIG5hbWVzcGFjZSB0YWJsZS4KLQkgKiAKLQkgKiBAcGFyYW0gaW5zdGFuY2VEb2N1bWVudCBUaGUgaW5zdGFuY2UgZG9jdW1lbnQuCi0JICogQHBhcmFtIG5hbWVzcGFjZVRhYmxlIFRoZSBuYW1lc3BhY2UgdGFibGUuCi0JICogCi0JICogQHJldHVybiBUcnVlIGlmIGFsbCB2YWx1ZXMgZXh0cmFjdGVkIGZyb20gdGhlIGluc3RhbmNlIGRvY3VtZW50IGFyZSB2YWxpZC4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBzZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudChFbGVtZW50IGluc3RhbmNlRG9jdW1lbnQsIE1hcCBuYW1lc3BhY2VUYWJsZSkgewotCi0JCWJvb2xlYW4gdmFsaWQgPSBzZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMobmV3IEVsZW1lbnRbXSB7IGluc3RhbmNlRG9jdW1lbnQgfSk7CQkKLQkJIAotCQlTdHJpbmcgcHJlZml4ID0gbmFtZXNwYWNlVGFibGUuZ2V0KEZyYWdtZW50Q29uc3RhbnRzLk5TX1VSSV9TT0FQX0VOVikgKyBGcmFnbWVudENvbnN0YW50cy5DT0xPTjsKLQkJIAotCQlTdHJpbmcgbXVzdFVuZGVyc3RhbmRWYWx1ZSA9IGluc3RhbmNlRG9jdW1lbnQuZ2V0QXR0cmlidXRlKHByZWZpeCArIE1VU1RfVU5ERVJTVEFORCk7Ci0JCWlmICgiIi5lcXVhbHMobXVzdFVuZGVyc3RhbmRWYWx1ZSkpCi0JCQltdXN0VW5kZXJzdGFuZCA9IGZhbHNlOwotCQllbHNlIGlmICgiMCIuZXF1YWxzKG11c3RVbmRlcnN0YW5kVmFsdWUpIHx8ICIxIi5lcXVhbHMobXVzdFVuZGVyc3RhbmRWYWx1ZSkpCi0JCQlzZXRNdXN0VW5kZXJzdGFuZChtdXN0VW5kZXJzdGFuZFZhbHVlKTsKLQkJZWxzZQotCQkJdmFsaWQgPSBmYWxzZTsKLQkJIAotCQlzZXRBY3RvcihpbnN0YW5jZURvY3VtZW50LmdldEF0dHJpYnV0ZShwcmVmaXggKyBBQ1RPUikpOwotCQkgCi0JCXJldHVybiB2YWxpZCAmJiB2YWxpZGF0ZUFjdG9yKCk7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuWFNERGVsZWdhdGlvbkZyYWdtZW50I2dlbkluc3RhbmNlRG9jdW1lbnRzRnJvbVBhcmFtZXRlclZhbHVlcyhib29sZWFuLCBqYXZhLnV0aWwuSGFzaHRhYmxlLCBvcmcudzNjLmRvbS5Eb2N1bWVudCkKLQkgKi8KLQlwdWJsaWMgRWxlbWVudFtdIGdlbkluc3RhbmNlRG9jdW1lbnRzRnJvbVBhcmFtZXRlclZhbHVlcyhib29sZWFuIGdlblhTSVR5cGUsIEhhc2h0YWJsZSBuYW1lc3BhY2VUYWJsZSwgRG9jdW1lbnQgZG9jKSB7Ci0JCUVsZW1lbnRbXSBlbGVtZW50cyA9IHN1cGVyLmdlbkluc3RhbmNlRG9jdW1lbnRzRnJvbVBhcmFtZXRlclZhbHVlcyhnZW5YU0lUeXBlLCBuYW1lc3BhY2VUYWJsZSwgZG9jKTsKLQkJIAotCQlpZiAoZWxlbWVudHMubGVuZ3RoID09IDApCi0JCQlyZXR1cm4gZWxlbWVudHM7Ci0JCSAKLQkJU3RyaW5nIHByZWZpeCA9IGdldFByZWZpeEZyb21OYW1lc3BhY2VVUkkoRnJhZ21lbnRDb25zdGFudHMuTlNfVVJJX1NPQVBfRU5WLCBuYW1lc3BhY2VUYWJsZSkgKyBGcmFnbWVudENvbnN0YW50cy5DT0xPTjsKLQkJIAotCQlmb3IgKGludCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7CQkJIAkJCSAJCQkJIAotCQkJCi0JCQlpZiAobXVzdFVuZGVyc3RhbmQpCi0JCQkJZWxlbWVudHNbaV0uc2V0QXR0cmlidXRlKHByZWZpeCArIE1VU1RfVU5ERVJTVEFORCwgIjEiKTsKLQotCQkJaWYgKGFjdG9yLmxlbmd0aCgpID4gMCkKLQkJCQllbGVtZW50c1tpXS5zZXRBdHRyaWJ1dGUocHJlZml4ICsgQUNUT1IsIGFjdG9yKTsKLQkJfQotCQkgCi0JCXJldHVybiBlbGVtZW50czsKLQl9Ci0JIAotCS8qKgotCSAqIENvbnZlbmllbmNlIG1ldGhvZCBmb3IgZ2V0dGluZyBmb3IgdGhlIG11c3RVbmRlcnN0YW5kIHZhbHVlCi0JICogQHJldHVybiBUaGUgbXVzdFVuZGVyc3RhbmQgdmFsdWUsIHRydWUgaWYgbXVzdFVuZGVyc3RhbmQ9IjEiLCBmYWxzZSBvdGhlcndpc2UuCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNNdXN0VW5kZXJzdGFuZCgpIHsKLQkJcmV0dXJuIG11c3RVbmRlcnN0YW5kOwotCX0KLQkgCi0JLyoqCi0JICogQ29udmVuaWVuY2UgbWV0aG9kIGZvciBnZXR0aW5nIHRoZSBhY3RvciB2YWx1ZQotCSAqIEByZXR1cm4gVGhlIGFjdG9yIHZhbHVlCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRBY3RvcigpIHsKLQkJcmV0dXJuIGFjdG9yOwotCX0KLQkKLQkvKioKLQkgKiBEZXRlcm1pbmVzIGlmIHRoZSBhY3RvciB2YWx1ZSBpcyBhIHZhbGlkIFVSSS4KLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhlIGFjdG9yIHZhbHVlIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuCi0JICovCi0JcHVibGljIGJvb2xlYW4gdmFsaWRhdGVBY3RvcigpIHsJCSAKLQkJcmV0dXJuIHZhbGlkQWN0b3I7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIElEIG9mIHRoZSBtdXN0VW5kZXJzdGFuZCBpbnB1dCBlbGVtZW50Ci0JICogQHJldHVybiBUaGUgSUQgb2YgdGhlIG11c3RVbmRlcnN0YW5kIGlucHV0IGVsZW1lbnQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldE11c3RVbmRlcnN0YW5kSUQoKSB7Ci0JCXJldHVybiBnZXRJRCgpICsgRnJhZ21lbnRDb25zdGFudHMuSURfU0VQRVJBVE9SICsgTVVTVF9VTkRFUlNUQU5EOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBJRCBvZiB0aGUgYWN0b3IgaW5wdXQgZWxlbWVudAotCSAqIEByZXR1cm4gVGhlIElEIG9mIHRoZSBhY3RvciBpbnB1dCBlbGVtZW50Ci0JICovCi0JcHVibGljIFN0cmluZyBnZXRBY3RvcklEKCkgewotCQlyZXR1cm4gZ2V0SUQoKSArIEZyYWdtZW50Q29uc3RhbnRzLklEX1NFUEVSQVRPUiArIEFDVE9SOwotCX0KLQkgCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC5YU0REZWxlZ2F0aW9uRnJhZ21lbnQjZ2V0V3JpdGVGcmFnbWVudCgpCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRXcml0ZUZyYWdtZW50KCkgewotCQlyZXR1cm4gIi93c2RsL2ZyYWdtZW50L1NPQVBIZWFkZXJXcmFwcGVyV0ZyYWdtZW50SlNQLmpzcCI7Ci0JfQkJIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEQXR0cmlidXRlRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTREF0dHJpYnV0ZUZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlNTM5YTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEQXR0cmlidXRlRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4MyArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiAKLSAqIExpY2Vuc2VkIE1hdGVyaWFsIC0gUHJvcGVydHkgb2YgSUJNIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDIgLSBBbGwgUmlnaHRzCi0gKiBSZXNlcnZlZC4gVVMgR292ZXJubWVudCBVc2VycyBSZXN0cmljdGVkIFJpZ2h0cyAtIFVzZSwgZHVwbGljYXRpb24gb3IKLSAqIGRpc2Nsb3N1cmUgcmVzdHJpY3RlZCBieSBHU0EgQURQIFNjaGVkdWxlIENvbnRyYWN0IHdpdGggSUJNIENvcnAuCi0gKiAKLSAqIDwvY29weXJpZ2h0PgotICogCi0gKiBGaWxlCi0gKiBwbHVnaW5zL2NvbS5pYm0uZXRvb2xzLndlYnNlcnZpY2UuZXhwbG9yZXIvd3NleHBsb3Jlci9zcmMvY29tL2libS9ldG9vbHMvd2Vic2VydmljZS9leHBsb3Jlci93c2RsL2ZyYWdtZW50L0ltcGwvWFNERWxlbWVudEZyYWdtZW50LmphdmEsCi0gKiB3c2EuZXRvb2xzLndzLmV4cGxvcmVyLCBsdW5hci01LjEuMiwgMjAwMzEyMzFhIDUgVmVyc2lvbiAxLjUgMDMvMDkvMjQKLSAqIDE0OjMwOjM4Ci0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5GcmFnbWVudENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNEQXR0cmlidXRlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSVhTREZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RBdHRyaWJ1dGVEZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQXR0cmlidXRlVXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RGb3JtOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotcHVibGljIGNsYXNzIFhTREF0dHJpYnV0ZUZyYWdtZW50IGV4dGVuZHMgWFNERGVsZWdhdGlvbkZyYWdtZW50IGltcGxlbWVudHMgSVhTREF0dHJpYnV0ZUZyYWdtZW50Ci17Ci0gICAKLSAgCi0gIHB1YmxpYyBYU0RBdHRyaWJ1dGVGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcpCi0gIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnKTsKLSAgICAKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHByb2Nlc3NQYXJhbWV0ZXJWYWx1ZXMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIElYU0RGcmFnbWVudCBhdHRyaWJ1dGVUeXBlRnJhZ21lbnQgPSBnZXRYU0REZWxlZ2F0aW9uRnJhZ21lbnQoKTsKLSAgICAJCi0gICAgaWYgKCFhdHRyaWJ1dGVUeXBlRnJhZ21lbnQucHJvY2Vzc1BhcmFtZXRlclZhbHVlcyhwYXJzZXIpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZUFsbFBhcmFtZXRlclZhbHVlcygpCi0gIHsKLSAgICBJWFNERnJhZ21lbnQgYXR0cmlidXRlVHlwZUZyYWdtZW50ID0gZ2V0WFNERGVsZWdhdGlvbkZyYWdtZW50KCk7Ci0gICAgaWYgKCFhdHRyaWJ1dGVUeXBlRnJhZ21lbnQudmFsaWRhdGVBbGxQYXJhbWV0ZXJWYWx1ZXMoKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHZhbGlkYXRlUGFyYW1ldGVyVmFsdWVzKFN0cmluZyBwYXJhbUtleSkKLSAgewotICAgIFN0cmluZ1tdIHBhcmFtcyA9IGdldFBhcmFtZXRlclZhbHVlcyhwYXJhbUtleSk7Ci0gICAgaWYgKHBhcmFtcyAhPSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZ2V0WFNERGVsZWdhdGlvbkZyYWdtZW50KCkudmFsaWRhdGVQYXJhbWV0ZXJWYWx1ZXMocGFyYW1LZXkpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGVQYXJhbWV0ZXJWYWx1ZShTdHJpbmcgcGFyYW1LZXksIGludCBwYXJhbUluZGV4KQotICB7Ci0gICAgaWYgKCFnZXRYU0REZWxlZ2F0aW9uRnJhZ21lbnQoKS52YWxpZGF0ZVBhcmFtZXRlclZhbHVlKHBhcmFtS2V5LCBwYXJhbUluZGV4KSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZykKLSAgewotICAgIHN1cGVyLnNldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKGNvbmZpZyk7Ci0gICAgCi0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBzZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMoRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzKQotICB7Ci0gICAgRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzQ29weSA9IGluc3RhbmNlRG9jdW1lbnRzOwotICAgIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZyA9IGdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci0gICAgU3RyaW5nIHdzZGxQYXJ0TmFtZSA9IGNvbmZpZy5nZXRXU0RMUGFydE5hbWUoKTsKLSAgICBOb2RlTGlzdCBubCA9IGluc3RhbmNlRG9jdW1lbnRzQ29weVswXS5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgIAotICAgIAotICAgIAotICAgIGlmIChjb25maWcuZ2V0SXNXU0RMUGFydCgpICYmIGNvbmZpZy5nZXRTdHlsZSgpID09IEZyYWdtZW50Q29uc3RhbnRzLlNUWUxFX1JQQyAmJiB3c2RsUGFydE5hbWUgIT0gbnVsbCAmJiB3c2RsUGFydE5hbWUubGVuZ3RoKCkgPiAwICYmIGluc3RhbmNlRG9jdW1lbnRzQ29weS5sZW5ndGggPT0gMSAmJiB3c2RsUGFydE5hbWUuZXF1YWxzKGluc3RhbmNlRG9jdW1lbnRzQ29weVswXS5nZXRUYWdOYW1lKCkpKQotICAgIHsKLSAgICAgIFZlY3RvciBjaGlsZEVsZW1lbnRzID0gbmV3IFZlY3RvcigpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBubC5nZXRMZW5ndGgoKTsgaSsrKQotICAgICAgewotICAgICAgICBOb2RlIG5vZGUgPSBubC5pdGVtKGkpOwotICAgICAgICBpZiAobm9kZS5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFKXsKLSAgICAgICAgICBjaGlsZEVsZW1lbnRzLmFkZChub2RlKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgaW5zdGFuY2VEb2N1bWVudHNDb3B5ID0gKEVsZW1lbnRbXSljaGlsZEVsZW1lbnRzLnRvQXJyYXkobmV3IEVsZW1lbnRbMF0pOwotICAgIH0KLSAgICBJWFNERnJhZ21lbnQgYXR0cmlidXRlVHlwZUZyYWdtZW50ID0gZ2V0WFNERGVsZWdhdGlvbkZyYWdtZW50KCk7Ci0gICAgaW5zdGFuY2VEb2N1bWVudHNDb3B5ID0gZ2V0SW5zdGFuY2VEb2N1bWVudHNCeVRhZ05hbWUoaW5zdGFuY2VEb2N1bWVudHNDb3B5LCBnZXROYW1lKCkpOwotICAgIHJldHVybiBhdHRyaWJ1dGVUeXBlRnJhZ21lbnQuc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKHNldEVsZW1lbnRzVGFnTmFtZShpbnN0YW5jZURvY3VtZW50c0NvcHksIGF0dHJpYnV0ZVR5cGVGcmFnbWVudC5nZXROYW1lKCkpKTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIGlzSW5zdGFuY2VOYW1lc3BhY2VRdWFsaWZpZWQoKQotICB7Ci0gICAgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnID0gZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLSAgICBpZiAoY29uZmlnLmdldFBhcnRFbmNvZGluZygpID09IEZyYWdtZW50Q29uc3RhbnRzLkVOQ09ESU5HX0xJVEVSQUwpCi0gICAgewotICAgICAgWFNEQXR0cmlidXRlVXNlIHhzZEF0dHJpYnV0ZVVzZSA9IChYU0RBdHRyaWJ1dGVVc2UpY29uZmlnLmdldFhTRENvbXBvbmVudCgpOwotICAgICAgWFNEQXR0cmlidXRlRGVjbGFyYXRpb24geHNkQXR0cmlidXRlID0gKFhTREF0dHJpYnV0ZURlY2xhcmF0aW9uKXhzZEF0dHJpYnV0ZVVzZS5nZXRBdHRyaWJ1dGVEZWNsYXJhdGlvbigpOwotICAgICAgaWYgKHhzZEF0dHJpYnV0ZS5pc0dsb2JhbCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgaWYgKHhzZEF0dHJpYnV0ZS5pc1NldEZvcm0oKSkKLSAgICAgICAgICByZXR1cm4gKHhzZEF0dHJpYnV0ZS5nZXRGb3JtKCkuZ2V0VmFsdWUoKSA9PSBYU0RGb3JtLlFVQUxJRklFRCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICByZXR1cm4gKHhzZEF0dHJpYnV0ZS5nZXRTY2hlbWEoKS5nZXRBdHRyaWJ1dGVGb3JtRGVmYXVsdCgpLmdldFZhbHVlKCkgPT0gWFNERm9ybS5RVUFMSUZJRUQpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwcm90ZWN0ZWQgU3RyaW5nIGdldEluc3RhbmNlRG9jdW1lbnRUYWdOYW1lKEhhc2h0YWJsZSBuYW1lc3BhY2VUYWJsZSkKLSAgewotICAgIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZyA9IGdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci0gICAgWFNEQXR0cmlidXRlVXNlIHhzZEF0dHJpYnV0ZVVzZSA9IChYU0RBdHRyaWJ1dGVVc2UpY29uZmlnLmdldFhTRENvbXBvbmVudCgpOwotICAgIFhTREF0dHJpYnV0ZURlY2xhcmF0aW9uIHhzZEF0dHJpYnV0ZSA9IHhzZEF0dHJpYnV0ZVVzZS5nZXRBdHRyaWJ1dGVEZWNsYXJhdGlvbigpOwotICAgIAotICAgIFN0cmluZ0J1ZmZlciB0YWdOYW1lID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIGlmIChpc0luc3RhbmNlTmFtZXNwYWNlUXVhbGlmaWVkKCkpCi0gICAgewotICAgICAgU3RyaW5nIG5zVVJJID0gbnVsbDsKLSAgICAgIC8vIHBvcnQgdG8gb3JnLmVjbGlwc2UueHNkCi0gICAgICBpZiAoeHNkQXR0cmlidXRlLmdldFJlc29sdmVkQXR0cmlidXRlRGVjbGFyYXRpb24oKSAhPSBudWxsKQotICAgICAgICBuc1VSSSA9IHhzZEF0dHJpYnV0ZS5nZXRSZXNvbHZlZEF0dHJpYnV0ZURlY2xhcmF0aW9uKCkuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgICBlbHNlCi0gICAgICAgIG5zVVJJID0geHNkQXR0cmlidXRlLmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgICAgaWYgKG5zVVJJICE9IG51bGwgJiYgbnNVUkkubGVuZ3RoKCkgPiAwKQotICAgICAgewotICAgICAgICBTdHJpbmcgcHJlZml4ID0gZ2V0UHJlZml4RnJvbU5hbWVzcGFjZVVSSShuc1VSSSwgbmFtZXNwYWNlVGFibGUpOwotICAgICAgICB0YWdOYW1lLmFwcGVuZChwcmVmaXgpOwotICAgICAgICB0YWdOYW1lLmFwcGVuZChGcmFnbWVudENvbnN0YW50cy5DT0xPTik7Ci0gICAgICB9Ci0gICAgfQotICAgIFN0cmluZyB4c2RBdHRyaWJ1dGVOYW1lID0geHNkQXR0cmlidXRlLmdldE5hbWUoKTsKLSAgICBpZiAoeHNkQXR0cmlidXRlTmFtZSA9PSBudWxsIHx8IHhzZEF0dHJpYnV0ZU5hbWUubGVuZ3RoKCkgPD0gMCkKLSAgICB7Ci0gICAgICAvLyBwb3J0IHRvIG9yZy5lY2xpcHNlLnhzZAotICAgICAgaWYgKHhzZEF0dHJpYnV0ZS5nZXRSZXNvbHZlZEF0dHJpYnV0ZURlY2xhcmF0aW9uKCkgIT0gbnVsbCkKLSAgICAgIAl4c2RBdHRyaWJ1dGVOYW1lID0geHNkQXR0cmlidXRlLmdldFJlc29sdmVkQXR0cmlidXRlRGVjbGFyYXRpb24oKS5nZXROYW1lKCk7Ci0gICAgICBlbHNlCi0gICAgICAJeHNkQXR0cmlidXRlTmFtZSA9IGdldE5hbWUoKTsKLSAgICB9Ci0gICAgdGFnTmFtZS5hcHBlbmQoeHNkQXR0cmlidXRlTmFtZSk7Ci0gICAgcmV0dXJuIHRhZ05hbWUudG9TdHJpbmcoKTsKLSAgfQotCi0gIAotCi0gIAotICBwdWJsaWMgU3RyaW5nIGdldEluZm9ybWF0aW9uRnJhZ21lbnQoKQotICB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0REZWZhdWx0SW5mb0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFJlYWRGcmFnbWVudCgpCi0gIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRERlbGVnYXRlRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3JpdGVGcmFnbWVudCgpCi0gIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRERlbGVnYXRlRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RDb21wbGV4Rml4RnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRENvbXBsZXhGaXhGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMmNmNWQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRENvbXBsZXhGaXhGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29udHJvbGxlcjsKLQotcHVibGljIGNsYXNzIFhTRENvbXBsZXhGaXhGcmFnbWVudCBleHRlbmRzIFhTRENvbXBsZXhGcmFnbWVudCB7Ci0gIHB1YmxpYyBYU0RDb21wbGV4Rml4RnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZywgY29udHJvbGxlcik7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEluZm9ybWF0aW9uRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0REZWZhdWx0SW5mb0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFJlYWRGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRENvbXBsZXhSRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3JpdGVGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRENvbXBsZXhGaXhXRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEQ29tcGxleEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RDb21wbGV4RnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDVmYWNiNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RDb21wbGV4RnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMzA1ICAgMTE3MDM0IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXZWIgU2VydmljZXMgRXhwbG9yZXIgc2hvdWxkIHN1cHBvcnQgU09BUCBIZWFkZXJzCi0gKiAyMDA3MDUxNiAgIDE4NTU5NiBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIG1pc2ludGVycHJldHMgcmVzcG9uc2UgbWVzc2FnZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RBdHRyaWJ1dGVGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNEQ29tcGxleEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC51dGlsLlhTRFR5cGVEZWZpbml0aW9uVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQXR0cmlidXRlR3JvdXBEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RBdHRyaWJ1dGVVc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbXBsZXhGaW5hbDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29tcGxleFR5cGVDb250ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wbGV4VHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE1vZGVsR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE1vZGVsR3JvdXBEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0ROYW1lZENvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEUGFydGljbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFBhcnRpY2xlQ29udGVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFhTRENvbXBsZXhGcmFnbWVudCBleHRlbmRzIFhTRE1hcEZyYWdtZW50IGltcGxlbWVudHMgSVhTRENvbXBsZXhGcmFnbWVudAotewotICBwdWJsaWMgWFNEQ29tcGxleEZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGlkLCBuYW1lLCBjb25maWcsIGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cykKLSAgewotICAgIEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50c0NvcHkgPSBnZXRJbnN0YW5jZURvY3VtZW50c0J5VGFnTmFtZShpbnN0YW5jZURvY3VtZW50cywgZ2V0TmFtZSgpKTsKLSAgICBib29sZWFuIHBhcmFtc1ZhbGlkID0gaW50ZXJuYWxFcXVhbHMoaW5zdGFuY2VEb2N1bWVudHNDb3B5LCBpbnN0YW5jZURvY3VtZW50cyk7Ci0gICAgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uIGNvbXBsZXhUeXBlID0gKFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbilnZXRYU0RUeXBlRGVmaW5pdGlvbigpOwotICAgIFhTRENvbXBsZXhUeXBlQ29udGVudCBjb21wbGV4VHlwZUNvbnRlbnQgPSBYU0RUeXBlRGVmaW5pdGlvblV0aWwuZ2V0WFNEQ29tcGxleFR5cGVDb250ZW50KGNvbXBsZXhUeXBlKTsKLSAgICBpZiAoY29tcGxleFR5cGVDb250ZW50IGluc3RhbmNlb2YgWFNEVHlwZURlZmluaXRpb24pCi0gICAgICBzZXRQYXJhbXNGb3JYU0RUeXBlRGVmKGluc3RhbmNlRG9jdW1lbnRzQ29weSk7Ci0gICAgZWxzZQotICAgICAgc2V0UGFyYW1zRm9yWFNEUGFydGljbGUoaW5zdGFuY2VEb2N1bWVudHNDb3B5KTsgCi0gICAgcmV0dXJuIHNldFBhcmFtc0ZvckF0dHJpYnV0ZXMoaW5zdGFuY2VEb2N1bWVudHNDb3B5KSAmJiBwYXJhbXNWYWxpZDsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBzZXRQYXJhbXNGb3JBdHRyaWJ1dGVzKEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cyl7Ci0gIAlib29sZWFuIHBhcmFtc1ZhbGlkID0gdHJ1ZTsKLSAgCQotICAJU3RyaW5nW10gZnJhZ21lbnRzT3JkZXIgPSBnZXRGcmFnbWVudHNPcmRlcigpOwotICAJSVhTREF0dHJpYnV0ZUZyYWdtZW50W10gYXR0cmlidXRlRnJhZ21lbnRzID0gZ2V0QWxsQXR0cmlidXRlRnJhZ21lbnRzKCk7Ci0gIAlmb3IgKGludCBpID0gMDsgaSA8IGluc3RhbmNlRG9jdW1lbnRzLmxlbmd0aDsgaSsrKXsKLSAgCSAgCi0gIAkgIGlmIChpID49IGZyYWdtZW50c09yZGVyLmxlbmd0aCkgYnJlYWs7Ci0gIAkgIFN0cmluZyBmcmFnbWVudElEID0gZnJhZ21lbnRzT3JkZXJbaV07Ci0KLSAgCSAgZm9yIChpbnQgayA9IDA7IGsgPCBhdHRyaWJ1dGVGcmFnbWVudHMubGVuZ3RoOyBrKyspewotICAJCWlmKGF0dHJpYnV0ZUZyYWdtZW50c1trXS5nZXRJRCgpLnN0YXJ0c1dpdGgoZnJhZ21lbnRJRCkpewotICAJCSAgTmFtZWROb2RlTWFwIG5vZGVNYXAgPSBpbnN0YW5jZURvY3VtZW50c1tpXS5nZXRBdHRyaWJ1dGVzKCk7Ci0gIAkgIAkgIFN0cmluZyBuYW1lID0gKChYU0RBdHRyaWJ1dGVVc2UpYXR0cmlidXRlRnJhZ21lbnRzW2tdLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCkuZ2V0WFNEQ29tcG9uZW50KCkpLmdldEF0dHJpYnV0ZURlY2xhcmF0aW9uKCkuZ2V0TmFtZSgpOwotICAJICAgICAgcGFyYW1zVmFsaWQgPSBhdHRyaWJ1dGVGcmFnbWVudHNba10uZ2V0WFNERGVsZWdhdGlvbkZyYWdtZW50KCkuc2V0QXR0cmlidXRlUGFyYW1zRnJvbUluc3RhbmNlRG9jdW1lbnRzKG5vZGVNYXAuZ2V0TmFtZWRJdGVtKG5hbWUpKTsKLSAgCQl9Ci0gICAgICB9Ci0gIAl9Ci0gICAgcmV0dXJuIHBhcmFtc1ZhbGlkOwotICB9Ci0gIAotICBwcml2YXRlIGJvb2xlYW4gc2V0UGFyYW1zRm9yWFNEVHlwZURlZihFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMpCi0gIHsKLSAgICBib29sZWFuIHBhcmFtc1ZhbGlkID0gdHJ1ZTsKLSAgICByZW1vdmVBbGxGcmFnbWVudHMoKTsKLSAgICByZW1vdmVBbGxBdHRyaWJ1dGVGcmFnbWVudHMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGluc3RhbmNlRG9jdW1lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBJWFNERnJhZ21lbnQgY2hpbGRGcmFnID0gZ2V0RnJhZ21lbnQoY3JlYXRlSW5zdGFuY2UoKSk7Ci0gICAgICBFbGVtZW50W10gY2hpbGRJbnN0YW5jZURvY3VtZW50cyA9IG5ldyBFbGVtZW50WzFdOwotICAgICAgY2hpbGRJbnN0YW5jZURvY3VtZW50c1swXSA9IGluc3RhbmNlRG9jdW1lbnRzW2ldOwotICAgICAgaWYgKCFjaGlsZEZyYWcuc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKHNldEVsZW1lbnRzVGFnTmFtZShjaGlsZEluc3RhbmNlRG9jdW1lbnRzLCBjaGlsZEZyYWcuZ2V0TmFtZSgpKSkpCi0gICAgICAgIHBhcmFtc1ZhbGlkID0gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiBwYXJhbXNWYWxpZDsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBzZXRQYXJhbXNGb3JYU0RQYXJ0aWNsZShFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMpCi0gIHsKLSAgICBib29sZWFuIHBhcmFtc1ZhbGlkID0gdHJ1ZTsKLSAgICByZW1vdmVBbGxGcmFnbWVudHMoKTsKLSAgICByZW1vdmVBbGxBdHRyaWJ1dGVGcmFnbWVudHMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGluc3RhbmNlRG9jdW1lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBJWFNERnJhZ21lbnQgY2hpbGRGcmFnID0gZ2V0RnJhZ21lbnQoY3JlYXRlSW5zdGFuY2UoKSk7Ci0gICAgICBWZWN0b3IgaW5zdGFuY2VzVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgTm9kZUxpc3QgbmwgPSBpbnN0YW5jZURvY3VtZW50c1tpXS5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICBmb3IgKGludCBqID0gMDsgaiA8IG5sLmdldExlbmd0aCgpOyBqKyspCi0gICAgICB7Ci0gICAgICAgIE5vZGUgbm9kZSA9IG5sLml0ZW0oaik7Ci0gICAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgRWxlbWVudCkKLSAgICAgICAgICBpbnN0YW5jZXNWZWN0b3IuYWRkKG5vZGUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgcGFyYW1zVmFsaWQgPSBmYWxzZTsKLSAgICAgIH0KLSAgICAgIEVsZW1lbnRbXSBjaGlsZEluc3RhbmNlRG9jdW1lbnRzID0gbmV3IEVsZW1lbnRbaW5zdGFuY2VzVmVjdG9yLnNpemUoKV07Ci0gICAgICBpbnN0YW5jZXNWZWN0b3IuY29weUludG8oY2hpbGRJbnN0YW5jZURvY3VtZW50cyk7Ci0gICAgICBpZiAoIWNoaWxkRnJhZy5zZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMoY2hpbGRJbnN0YW5jZURvY3VtZW50cykpCi0gICAgICAgIHBhcmFtc1ZhbGlkID0gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiBwYXJhbXNWYWxpZDsKLSAgfQotCi0gIHB1YmxpYyBFbGVtZW50W10gZ2VuSW5zdGFuY2VEb2N1bWVudHNGcm9tUGFyYW1ldGVyVmFsdWVzKGJvb2xlYW4gZ2VuWFNJVHlwZSwgSGFzaHRhYmxlIG5hbWVzcGFjZVRhYmxlLCBEb2N1bWVudCBkb2MpCi0gIHsKLSAgICBYU0RDb21wbGV4VHlwZURlZmluaXRpb24gY29tcGxleFR5cGUgPSAoWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKWdldFhTRFR5cGVEZWZpbml0aW9uKCk7Ci0gICAgWFNEQ29tcGxleFR5cGVDb250ZW50IGNvbXBsZXhUeXBlQ29udGVudCA9IFhTRFR5cGVEZWZpbml0aW9uVXRpbC5nZXRYU0RDb21wbGV4VHlwZUNvbnRlbnQoY29tcGxleFR5cGUpOwotICAgIEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50czsKLSAgICBTdHJpbmcgdGFnTmFtZSA9IGdldEluc3RhbmNlRG9jdW1lbnRUYWdOYW1lKG5hbWVzcGFjZVRhYmxlKTsKLSAgICBpZiAoY29tcGxleFR5cGVDb250ZW50IGluc3RhbmNlb2YgWFNEVHlwZURlZmluaXRpb24pCi0gICAgICBpbnN0YW5jZURvY3VtZW50cyA9IGdlbkluc3RhbmNlc0ZvclhTRFR5cGVEZWYoZ2VuWFNJVHlwZSwgbmFtZXNwYWNlVGFibGUsIHRhZ05hbWUsIGRvYyk7Ci0gICAgZWxzZQotICAgICAgaW5zdGFuY2VEb2N1bWVudHMgPSBnZW5JbnN0YW5jZXNGb3JYU0RQYXJ0aWNsZShnZW5YU0lUeXBlLCBuYW1lc3BhY2VUYWJsZSwgdGFnTmFtZSwgZG9jKTsKLSAgICAgIGlmKGdlblhTSVR5cGUpIGFkZFhTSVR5cGUoaW5zdGFuY2VEb2N1bWVudHMsIG5hbWVzcGFjZVRhYmxlKTsKLSAgICAgIGluc3RhbmNlRG9jdW1lbnRzID0gYWRkQXR0cmlidXRlcyhpbnN0YW5jZURvY3VtZW50cyk7Ci0JcmV0dXJuIGluc3RhbmNlRG9jdW1lbnRzOwotICB9Ci0KLSAgcHJpdmF0ZSBFbGVtZW50W10gYWRkQXR0cmlidXRlcyhFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMpewotICAJCi0JU3RyaW5nW10gZnJhZ21lbnRzT3JkZXIgPSBnZXRGcmFnbWVudHNPcmRlcigpOwotICAJSVhTREF0dHJpYnV0ZUZyYWdtZW50W10gYXR0cmlidXRlRnJhZ21lbnRzID0gZ2V0QWxsQXR0cmlidXRlRnJhZ21lbnRzKCk7Ci0gIAlmb3IgKGludCBpID0gMDtpPCBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGg7aSsrKXsKLQotICAJICBpZiAoaSA+PSBmcmFnbWVudHNPcmRlci5sZW5ndGgpIGJyZWFrOwotICAgCSAgU3RyaW5nIGZyYWdtZW50SUQgPSBmcmFnbWVudHNPcmRlcltpXTsKLSAgCQkKLSAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgYXR0cmlidXRlRnJhZ21lbnRzLmxlbmd0aDsgaysrKXsKLSAgICAJaWYoYXR0cmlidXRlRnJhZ21lbnRzW2tdLmdldElEKCkuc3RhcnRzV2l0aChmcmFnbWVudElEKSl7Ci0gICAgCSAgU3RyaW5nIG5hbWUgPSAoKFhTREF0dHJpYnV0ZVVzZSlhdHRyaWJ1dGVGcmFnbWVudHNba10uZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKS5nZXRYU0RDb21wb25lbnQoKSkuZ2V0QXR0cmlidXRlRGVjbGFyYXRpb24oKS5nZXROYW1lKCk7Ci0gICAgCSAgYXR0cmlidXRlRnJhZ21lbnRzW2tdLmdldFhTRERlbGVnYXRpb25GcmFnbWVudCgpLnNldEF0dHJpYnV0ZXNPbkluc3RhbmNlRG9jdW1lbnRzKGluc3RhbmNlRG9jdW1lbnRzW2ldLG5hbWUpOwotICAgIAl9Ci0gICAgICB9Ci0gICAJfQotICAgCXJldHVybiBpbnN0YW5jZURvY3VtZW50czsKLSAgfQotICAKLSAgcHJpdmF0ZSBFbGVtZW50W10gZ2VuSW5zdGFuY2VzRm9yWFNEVHlwZURlZihib29sZWFuIGdlblhTSVR5cGUsIEhhc2h0YWJsZSBuYW1lc3BhY2VUYWJsZSwgU3RyaW5nIHRhZ05hbWUsIERvY3VtZW50IGRvYykKLSAgewotICAgIElYU0RGcmFnbWVudFtdIGZyYWdtZW50cyA9IGdldEFsbEZyYWdtZW50cygpOwotICAgIFZlY3RvciBpbnN0YW5jZURvY3VtZW50c0NvcHkgPSBuZXcgVmVjdG9yKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcmFnbWVudHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgRWxlbWVudFtdIGZyYWdtZW50SW5zdGFuY2VzID0gZnJhZ21lbnRzW2ldLmdlbkluc3RhbmNlRG9jdW1lbnRzRnJvbVBhcmFtZXRlclZhbHVlcyhnZW5YU0lUeXBlLCBuYW1lc3BhY2VUYWJsZSwgZG9jKTsKLSAgICAgIGlmIChmcmFnbWVudEluc3RhbmNlcy5sZW5ndGggPiAwKQotICAgICAgICBpbnN0YW5jZURvY3VtZW50c0NvcHkuYWRkKGZyYWdtZW50SW5zdGFuY2VzWzBdKTsKLSAgICB9Ci0gICAgRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzID0gbmV3IEVsZW1lbnRbaW5zdGFuY2VEb2N1bWVudHNDb3B5LnNpemUoKV07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpbnN0YW5jZURvY3VtZW50c1tpXSA9IChFbGVtZW50KWluc3RhbmNlRG9jdW1lbnRzQ29weS5nZXQoaSk7Ci0gICAgfQotICAgIHJldHVybiBzZXRFbGVtZW50c1RhZ05hbWUoaW5zdGFuY2VEb2N1bWVudHMsIHRhZ05hbWUpOwotICB9Ci0KLSAgcHJpdmF0ZSBFbGVtZW50W10gZ2VuSW5zdGFuY2VzRm9yWFNEUGFydGljbGUoYm9vbGVhbiBnZW5YU0lUeXBlLCBIYXNodGFibGUgbmFtZXNwYWNlVGFibGUsIFN0cmluZyB0YWdOYW1lLCBEb2N1bWVudCBkb2MpCi0gIHsKLSAgICBJWFNERnJhZ21lbnRbXSBjaGlsZEZyYWdzID0gZ2V0QWxsRnJhZ21lbnRzKCk7Ci0gICAgRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzID0gbmV3IEVsZW1lbnRbY2hpbGRGcmFncy5sZW5ndGhdOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFuY2VEb2N1bWVudHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgRWxlbWVudFtdIGNoaWxkSW5zdGFuY2VzID0gY2hpbGRGcmFnc1tpXS5nZW5JbnN0YW5jZURvY3VtZW50c0Zyb21QYXJhbWV0ZXJWYWx1ZXMoZ2VuWFNJVHlwZSwgbmFtZXNwYWNlVGFibGUsIGRvYyk7Ci0gICAgICBFbGVtZW50IGluc3RhbmNlRG9jdW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgY2hpbGRJbnN0YW5jZXMubGVuZ3RoOyBqKyspCi0gICAgICB7Ci0gICAgICAgIGlmIChjaGlsZEluc3RhbmNlc1tqXSAhPSBudWxsKQotICAgICAgICAgIGluc3RhbmNlRG9jdW1lbnQuYXBwZW5kQ2hpbGQoY2hpbGRJbnN0YW5jZXNbal0pOwotICAgICAgfQotICAgICAgaW5zdGFuY2VEb2N1bWVudHNbaV0gPSBpbnN0YW5jZURvY3VtZW50OwotICAgIH0KLSAgICByZXR1cm4gaW5zdGFuY2VEb2N1bWVudHM7Ci0gIH0KLQotICBwcml2YXRlIFhTRE1vZGVsR3JvdXAgZ2V0WFNETW9kZWxHcm91cChYU0RQYXJ0aWNsZSB4c2RQYXJ0aWNsZSkKLSAgewotICAgIGlmICh4c2RQYXJ0aWNsZSAhPSBudWxsKQotICAgIHsKLSAgICAgIFhTRFBhcnRpY2xlQ29udGVudCB4c2RQYXJ0aWNsZUNvbnRlbnQgPSB4c2RQYXJ0aWNsZS5nZXRDb250ZW50KCk7Ci0gICAgICBpZiAoeHNkUGFydGljbGVDb250ZW50ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGlmICh4c2RQYXJ0aWNsZUNvbnRlbnQgaW5zdGFuY2VvZiBYU0RNb2RlbEdyb3VwRGVmaW5pdGlvbikKLSAgICAgICAgewotICAgICAgICAgIFhTRE1vZGVsR3JvdXBEZWZpbml0aW9uIHhzZE1vZGVsR3JvdXBEZWYgPSAoWFNETW9kZWxHcm91cERlZmluaXRpb24peHNkUGFydGljbGVDb250ZW50OwotICAgICAgICAgIGlmICh4c2RNb2RlbEdyb3VwRGVmLmlzTW9kZWxHcm91cERlZmluaXRpb25SZWZlcmVuY2UoKSkKLSAgICAgICAgICAgIHhzZE1vZGVsR3JvdXBEZWYgPSB4c2RNb2RlbEdyb3VwRGVmLmdldFJlc29sdmVkTW9kZWxHcm91cERlZmluaXRpb24oKTsKLSAgICAgICAgICByZXR1cm4geHNkTW9kZWxHcm91cERlZi5nZXRNb2RlbEdyb3VwKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoeHNkUGFydGljbGVDb250ZW50IGluc3RhbmNlb2YgWFNETW9kZWxHcm91cCkKLSAgICAgICAgICByZXR1cm4gKFhTRE1vZGVsR3JvdXApeHNkUGFydGljbGVDb250ZW50OwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHByaXZhdGUgTGlzdCBnZXRJbmhlcml0ZWRQYXJ0aWNsZXMoWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uIGNvbXBsZXhUeXBlKQotICB7Ci0gICAgVmVjdG9yIHYgPSBuZXcgVmVjdG9yKCk7Ci0gICAgaWYgKGNvbXBsZXhUeXBlLmdldERlcml2YXRpb25NZXRob2QoKS5nZXRWYWx1ZSgpID09IFhTRENvbXBsZXhGaW5hbC5FWFRFTlNJT04pCi0gICAgewotICAgICAgWFNEVHlwZURlZmluaXRpb24gZXh0VHlwZSA9IGNvbXBsZXhUeXBlLmdldEJhc2VUeXBlKCk7Ci0gICAgICBpZiAoZXh0VHlwZSAhPSBudWxsICYmICEoZXh0VHlwZSBpbnN0YW5jZW9mIFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbikpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBleHRUeXBlLmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgICAgICBTdHJpbmcgbG9jYWxuYW1lID0gZXh0VHlwZS5nZXROYW1lKCk7Ci0gICAgICAgIGlmIChuYW1lc3BhY2UgIT0gbnVsbCAmJiBsb2NhbG5hbWUgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIFhTRE5hbWVkQ29tcG9uZW50IHhzZE5hbWVkQ29tcCA9IGdldFhTRFRvRnJhZ21lbnRDb250cm9sbGVyKCkuZ2V0V1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyKCkuZ2V0WFNEVHlwZUZyb21TY2hlbWEobmFtZXNwYWNlLCBsb2NhbG5hbWUsIGZhbHNlKTsKLSAgICAgICAgICBpZiAoeHNkTmFtZWRDb21wIGluc3RhbmNlb2YgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGV4dFR5cGUgPSAoWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKXhzZE5hbWVkQ29tcDsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmIChleHRUeXBlICE9IG51bGwgJiYgZXh0VHlwZSAhPSBjb21wbGV4VHlwZSAmJiBleHRUeXBlIGluc3RhbmNlb2YgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKQotICAgICAgewotICAgICAgICBYU0RDb21wbGV4VHlwZUNvbnRlbnQgZXh0VHlwZUNvbnRlbnQgPSBYU0RUeXBlRGVmaW5pdGlvblV0aWwuZ2V0WFNEQ29tcGxleFR5cGVDb250ZW50KChYU0RDb21wbGV4VHlwZURlZmluaXRpb24pZXh0VHlwZSk7Ci0gICAgICAgIGlmIChleHRUeXBlQ29udGVudCBpbnN0YW5jZW9mIFhTRFBhcnRpY2xlKQotICAgICAgICB7Ci0gICAgICAgICAgWFNETW9kZWxHcm91cCB4c2RNb2RlbEdyb3VwID0gZ2V0WFNETW9kZWxHcm91cCgoWFNEUGFydGljbGUpZXh0VHlwZUNvbnRlbnQpOwotICAgICAgICAgIGlmICh4c2RNb2RlbEdyb3VwICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgdi5hZGRBbGwoZ2V0SW5oZXJpdGVkUGFydGljbGVzKChYU0RDb21wbGV4VHlwZURlZmluaXRpb24pZXh0VHlwZSkpOwotICAgICAgICAgICAgdi5hZGRBbGwoeHNkTW9kZWxHcm91cC5nZXRQYXJ0aWNsZXMoKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiB2OwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGdhdGhlckluaGVyaXRlZFBhcnRpY2xlcyhYU0RDb21wbGV4VHlwZURlZmluaXRpb24gY29tcGxleFR5cGUpCi0gIHsKLSAgICBpZiAoY29tcGxleFR5cGUuZ2V0RGVyaXZhdGlvbk1ldGhvZCgpLmdldFZhbHVlKCkgPT0gWFNEQ29tcGxleEZpbmFsLkVYVEVOU0lPTikKLSAgICB7Ci0gICAgICBYU0RDb21wbGV4VHlwZUNvbnRlbnQgY29tcGxleFR5cGVDb250ZW50ID0gWFNEVHlwZURlZmluaXRpb25VdGlsLmdldFhTRENvbXBsZXhUeXBlQ29udGVudChjb21wbGV4VHlwZSk7Ci0gICAgICBpZiAoY29tcGxleFR5cGVDb250ZW50IGluc3RhbmNlb2YgWFNEUGFydGljbGUpCi0gICAgICB7Ci0gICAgICAgIFhTRE1vZGVsR3JvdXAgeHNkTW9kZWxHcm91cCA9IGdldFhTRE1vZGVsR3JvdXAoKFhTRFBhcnRpY2xlKWNvbXBsZXhUeXBlQ29udGVudCk7Ci0gICAgICAgIGlmICh4c2RNb2RlbEdyb3VwICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBMaXN0IGluaGVyaXRlZFBhcnRpY2xlcyA9IGdldEluaGVyaXRlZFBhcnRpY2xlcyhjb21wbGV4VHlwZSk7Ci0gICAgICAgICAgTGlzdCBwYXJ0aWNsZXMgPSB4c2RNb2RlbEdyb3VwLmdldFBhcnRpY2xlcygpOwotICAgICAgICAgIHBhcnRpY2xlcy5hZGRBbGwoMCwgaW5oZXJpdGVkUGFydGljbGVzKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIAotICAKLSAgcHVibGljIElYU0RBdHRyaWJ1dGVGcmFnbWVudFtdIGdldEFsbEF0dHJpYnV0ZUZyYWdtZW50cygpCi0gIHsKLSAgCXJldHVybiBzdXBlci5nZXRBbGxBdHRyaWJ1dGVGcmFnbWVudHMoKTsJCQotICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgY3JlYXRlQXR0cmlidXRlRnJhZ21lbnRzKFN0cmluZyBjb21wbGV4Q2hpbGRJRCkKLSAgewotICAJWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uIGNvbXBsZXhUeXBlID0gKFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbilnZXRYU0RUeXBlRGVmaW5pdGlvbigpOwotICAJRUxpc3QgYXRDb250ZW50TGlzdCA9IGNvbXBsZXhUeXBlLmdldEF0dHJpYnV0ZUNvbnRlbnRzKCk7Ci0gIAlJdGVyYXRvciBpdGVyYXRvciA9IGF0Q29udGVudExpc3QuaXRlcmF0b3IoKTsKLSAgCXdoaWxlKGl0ZXJhdG9yLmhhc05leHQoKSl7Ci0gIAkgIE9iamVjdCBvYmplY3QgPSAoT2JqZWN0KWl0ZXJhdG9yLm5leHQoKTsKLSAgCSAgaWYob2JqZWN0IGluc3RhbmNlb2YgWFNEQXR0cmlidXRlR3JvdXBEZWZpbml0aW9uKXsKLSAgCQlYU0RBdHRyaWJ1dGVHcm91cERlZmluaXRpb24geHNkQUdEID0gKFhTREF0dHJpYnV0ZUdyb3VwRGVmaW5pdGlvbilvYmplY3Q7Ci0gIAkJWFNEQXR0cmlidXRlR3JvdXBEZWZpbml0aW9uIHJlc29sdmVkID0geHNkQUdELmdldFJlc29sdmVkQXR0cmlidXRlR3JvdXBEZWZpbml0aW9uKCk7Ci0gIAkJRUxpc3QgYUxpc3QgPSByZXNvbHZlZC5nZXRDb250ZW50cygpOwotICAJCUl0ZXJhdG9yIGl0ZXJhdG9yMiA9IGFMaXN0Lml0ZXJhdG9yKCk7Ci0gIAkJd2hpbGUoaXRlcmF0b3IyLmhhc05leHQoKSl7Ci0gIAkJCWNyZWF0ZUF0dHJpYnV0ZUhlbHBlcigoWFNEQXR0cmlidXRlVXNlKWl0ZXJhdG9yMi5uZXh0KCksY29tcGxleENoaWxkSUQpOwotICAJCX0KLSAgCSAgfQotICAJICBlbHNlewotICAJICAgIFhTREF0dHJpYnV0ZVVzZSBhdHRVc2UgPSAgKFhTREF0dHJpYnV0ZVVzZSlvYmplY3Q7Ci0gIAkgICAgY3JlYXRlQXR0cmlidXRlSGVscGVyKGF0dFVzZSxjb21wbGV4Q2hpbGRJRCk7Ci0gIAkgIH0KLSAgCSAgCi0gIAl9Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBjcmVhdGVBdHRyaWJ1dGVIZWxwZXIoWFNEQXR0cmlidXRlVXNlIGF0dFVzZSxTdHJpbmcgY29tcGxleENoaWxkSUQpewotCSAgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gdGhpc0NvbmZpZyA9IGdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci0gICAgICBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSBuZXcgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLSAgICAgIHhzZENvbmZpZy5zZXRYU0RDb21wb25lbnQoYXR0VXNlKTsKLSAgICAgIHhzZENvbmZpZy5zZXRTdHlsZSh0aGlzQ29uZmlnLmdldFN0eWxlKCkpOwotICAgICAgeHNkQ29uZmlnLnNldFBhcnRFbmNvZGluZyh0aGlzQ29uZmlnLmdldFBhcnRFbmNvZGluZygpKTsKLSAgICAgIHhzZENvbmZpZy5zZXRXU0RMUGFydE5hbWUodGhpc0NvbmZpZy5nZXRXU0RMUGFydE5hbWUoKSk7Ci0gICAgICBTdHJpbmcgbmV3SUQgPSBnZW5JRCgpOwotICAgICAgYWRkQXR0cmlidXRlRnJhZ21lbnQoY29tcGxleENoaWxkSUQgKyBuZXdJRCwgZ2V0WFNEVG9GcmFnbWVudENvbnRyb2xsZXIoKS5nZXRGcmFnbWVudCh4c2RDb25maWcsY29tcGxleENoaWxkSUQgKyBuZXdJRCwgY29tcGxleENoaWxkSUQgKyBuZXdJRCkpOwotICAJICAKLSAgfQotICAKLSAgCi0gIHB1YmxpYyBTdHJpbmcgY3JlYXRlQ29tcGxleEluc3RhbmNlKCkKLSAgewotICAgIFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiBjb21wbGV4VHlwZSA9IChYU0RDb21wbGV4VHlwZURlZmluaXRpb24pZ2V0WFNEVHlwZURlZmluaXRpb24oKTsKLSAgICBnYXRoZXJJbmhlcml0ZWRQYXJ0aWNsZXMoY29tcGxleFR5cGUpOwotICAgIFhTRENvbXBsZXhUeXBlQ29udGVudCBjb21wbGV4VHlwZUNvbnRlbnQgPSBYU0RUeXBlRGVmaW5pdGlvblV0aWwuZ2V0WFNEQ29tcGxleFR5cGVDb250ZW50KGNvbXBsZXhUeXBlKTsKLSAgICBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB0aGlzQ29uZmlnID0gZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLSAgICBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSBuZXcgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLSAgICB4c2RDb25maWcuc2V0WFNEQ29tcG9uZW50KGNvbXBsZXhUeXBlQ29udGVudCk7Ci0gICAgeHNkQ29uZmlnLnNldFN0eWxlKHRoaXNDb25maWcuZ2V0U3R5bGUoKSk7Ci0gICAgeHNkQ29uZmlnLnNldFBhcnRFbmNvZGluZyh0aGlzQ29uZmlnLmdldFBhcnRFbmNvZGluZygpKTsKLSAgICB4c2RDb25maWcuc2V0V1NETFBhcnROYW1lKHRoaXNDb25maWcuZ2V0V1NETFBhcnROYW1lKCkpOwotICAgIFN0cmluZyBuZXdJRCA9IGdlbklEKCk7Ci0gICAgYWRkRnJhZ21lbnQobmV3SUQsIGdldFhTRFRvRnJhZ21lbnRDb250cm9sbGVyKCkuZ2V0RnJhZ21lbnQoeHNkQ29uZmlnLCBuZXdJRCwgZ2V0TmFtZSgpKSk7Ci0gICAgY3JlYXRlQXR0cmlidXRlRnJhZ21lbnRzKG5ld0lEKTsKLSAgICByZXR1cm4gbmV3SUQ7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGNyZWF0ZUluc3RhbmNlKCkKLSAgewotICAgIHJldHVybiBjcmVhdGVDb21wbGV4SW5zdGFuY2UoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEQ29tcGxleFJhbmdlRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRENvbXBsZXhSYW5nZUZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2OWJkOGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEQ29tcGxleFJhbmdlRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbnRyb2xsZXI7Ci0KLXB1YmxpYyBjbGFzcyBYU0RDb21wbGV4UmFuZ2VGcmFnbWVudCBleHRlbmRzIFhTRENvbXBsZXhGcmFnbWVudCB7Ci0gIHB1YmxpYyBYU0RDb21wbGV4UmFuZ2VGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGNvbnRyb2xsZXIpIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnLCBjb250cm9sbGVyKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5mb3JtYXRpb25GcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRERlZmF1bHRJbmZvRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVhZEZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNEQ29tcGxleFJGcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXcml0ZUZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNEQ29tcGxleFJhbmdlV0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRENvbXBsZXhTaW1wbGVDb250ZW50Rml4RnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRENvbXBsZXhTaW1wbGVDb250ZW50Rml4RnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmM1YTMzMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RDb21wbGV4U2ltcGxlQ29udGVudEZpeEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODQgKzAsMCBAQAotLyoqCi0qIDxjb3B5cmlnaHQ+Ci0qCi0qIExpY2Vuc2VkIE1hdGVyaWFsIC0gUHJvcGVydHkgb2YgSUJNCi0qIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDIgLSBBbGwgUmlnaHRzIFJlc2VydmVkLgotKiBVUyBHb3Zlcm5tZW50IFVzZXJzIFJlc3RyaWN0ZWQgUmlnaHRzIC0gVXNlLCBkdXBsaWNhdGlvbiBvciBkaXNjbG9zdXJlCi0qIHJlc3RyaWN0ZWQgYnkgR1NBIEFEUCBTY2hlZHVsZSBDb250cmFjdCB3aXRoIElCTSBDb3JwLgotKgotKiA8L2NvcHlyaWdodD4KLSoKLSogRmlsZSBwbHVnaW5zL2NvbS5pYm0uZXRvb2xzLndlYnNlcnZpY2UuZXhwbG9yZXIvd3NleHBsb3Jlci9zcmMvY29tL2libS9ldG9vbHMvd2Vic2VydmljZS9leHBsb3Jlci93c2RsL2ZyYWdtZW50L0ltcGwvWFNEQ29tcGxleEZpeEZyYWdtZW50LmphdmEsIHdzYS5ldG9vbHMud3MuZXhwbG9yZXIsIGx1bmFyLTUuMS4yIDEKLSogVmVyc2lvbiAxLjEgMDMvMDIvMjggMTU6MjU6MTUKLSovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNEQXR0cmlidXRlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSVhTREZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LnV0aWwuWFNEVHlwZURlZmluaXRpb25VdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RBdHRyaWJ1dGVVc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbXBsZXhUeXBlQ29udGVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi1wdWJsaWMgY2xhc3MgWFNEQ29tcGxleFNpbXBsZUNvbnRlbnRGaXhGcmFnbWVudCBleHRlbmRzIFhTRENvbXBsZXhGcmFnbWVudCB7Ci0gIHB1YmxpYyBYU0RDb21wbGV4U2ltcGxlQ29udGVudEZpeEZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgY29udHJvbGxlcikgewotICAgIHN1cGVyKGlkLCBuYW1lLCBjb25maWcsIGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgCi0gIAotICAKLSAgCi0gIHB1YmxpYyBib29sZWFuIHNldFBhcmFtZXRlclZhbHVlc0Zyb21JbnN0YW5jZURvY3VtZW50cyhFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMpIHsKLSAgICBFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHNDb3B5ID0gZ2V0SW5zdGFuY2VEb2N1bWVudHNCeVRhZ05hbWUoaW5zdGFuY2VEb2N1bWVudHMsIGdldE5hbWUoKSk7Ci0gICAgYm9vbGVhbiBwYXJhbXNWYWxpZCA9IGludGVybmFsRXF1YWxzKGluc3RhbmNlRG9jdW1lbnRzQ29weSwgaW5zdGFuY2VEb2N1bWVudHMpOwotICAgIFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiBjb21wbGV4VHlwZSA9IChYU0RDb21wbGV4VHlwZURlZmluaXRpb24pZ2V0WFNEVHlwZURlZmluaXRpb24oKTsKLSAgICBYU0RDb21wbGV4VHlwZUNvbnRlbnQgY29tcGxleFR5cGVDb250ZW50ID0gWFNEVHlwZURlZmluaXRpb25VdGlsLmdldFhTRENvbXBsZXhUeXBlQ29udGVudChjb21wbGV4VHlwZSk7Ci0gICAgaWYgKGNvbXBsZXhUeXBlQ29udGVudCBpbnN0YW5jZW9mIFhTRFR5cGVEZWZpbml0aW9uKQotICAgICAgcmV0dXJuIHNldFBhcmFtc0ZvclhTRFR5cGVEZWYoaW5zdGFuY2VEb2N1bWVudHNDb3B5KSAmJiBwYXJhbXNWYWxpZDsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gc2V0UGFyYW1zRm9yWFNEUGFydGljbGUoaW5zdGFuY2VEb2N1bWVudHNDb3B5KSAmJiBwYXJhbXNWYWxpZDsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBzZXRQYXJhbXNGb3JBdHRyaWJ1dGVzKEVsZW1lbnQgaW5zdGFuY2VEb2N1bWVudCxJWFNERnJhZ21lbnQgZnJhZyl7Ci0gIAlib29sZWFuIHBhcmFtc1ZhbGlkID0gdHJ1ZTsKLSAgCQotICAJSVhTREF0dHJpYnV0ZUZyYWdtZW50W10gYXR0cmlidXRlRnJhZ21lbnRzID0gZ2V0QWxsQXR0cmlidXRlRnJhZ21lbnRzKCk7Ci0gIAlmb3IgKGludCBpID0gMDsgaSA8IGF0dHJpYnV0ZUZyYWdtZW50cy5sZW5ndGg7IGkrKyl7Ci0gIAkgIGlmKGF0dHJpYnV0ZUZyYWdtZW50c1tpXS5nZXRJRCgpLnN0YXJ0c1dpdGgoZnJhZy5nZXRJRCgpKSl7ICAKLSAgCSAgCSAgTmFtZWROb2RlTWFwIG5vZGVNYXAgPSBpbnN0YW5jZURvY3VtZW50LmdldEF0dHJpYnV0ZXMoKTsJCi0gIAkgICAgICBTdHJpbmcgbmFtZSA9ICgoWFNEQXR0cmlidXRlVXNlKWF0dHJpYnV0ZUZyYWdtZW50c1tpXS5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpLmdldFhTRENvbXBvbmVudCgpKS5nZXRBdHRyaWJ1dGVEZWNsYXJhdGlvbigpLmdldE5hbWUoKTsKLSAgCSAgICAgIHBhcmFtc1ZhbGlkID0gYXR0cmlidXRlRnJhZ21lbnRzW2ldLmdldFhTRERlbGVnYXRpb25GcmFnbWVudCgpLnNldEF0dHJpYnV0ZVBhcmFtc0Zyb21JbnN0YW5jZURvY3VtZW50cyhub2RlTWFwLmdldE5hbWVkSXRlbShuYW1lKSk7CQotICAgICAgfQotICAJfQotICAgIHJldHVybiBwYXJhbXNWYWxpZDsKLSAgfQotICAKLSAgcHJpdmF0ZSBib29sZWFuIHNldFBhcmFtc0ZvclhTRFR5cGVEZWYoRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzKQotICB7Ci0gICAgYm9vbGVhbiBwYXJhbXNWYWxpZCA9IHRydWU7Ci0gICAgcmVtb3ZlQWxsRnJhZ21lbnRzKCk7Ci0gICAgcmVtb3ZlQWxsQXR0cmlidXRlRnJhZ21lbnRzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGg7IGkrKykgewotICAgICAgSVhTREZyYWdtZW50IGNoaWxkRnJhZyA9IGdldEZyYWdtZW50KGNyZWF0ZUluc3RhbmNlKCkpOwotICAgICAgRWxlbWVudFtdIGNoaWxkSW5zdGFuY2VEb2N1bWVudHMgPSBuZXcgRWxlbWVudFsxXTsKLSAgICAgIGNoaWxkSW5zdGFuY2VEb2N1bWVudHNbMF0gPSBpbnN0YW5jZURvY3VtZW50c1tpXTsKLSAgICAgIGlmICghY2hpbGRGcmFnLnNldFBhcmFtZXRlclZhbHVlc0Zyb21JbnN0YW5jZURvY3VtZW50cyhzZXRFbGVtZW50c1RhZ05hbWUoY2hpbGRJbnN0YW5jZURvY3VtZW50cywgY2hpbGRGcmFnLmdldE5hbWUoKSkpKQotICAgICAgICBwYXJhbXNWYWxpZCA9IGZhbHNlOwotICAgICAgc2V0UGFyYW1zRm9yQXR0cmlidXRlcyhjaGlsZEluc3RhbmNlRG9jdW1lbnRzWzBdLGNoaWxkRnJhZyk7Ci0gICAgfQotICAgIHJldHVybiBwYXJhbXNWYWxpZDsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBzZXRQYXJhbXNGb3JYU0RQYXJ0aWNsZShFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMpIHsKLSAgICBib29sZWFuIHBhcmFtc1ZhbGlkID0gdHJ1ZTsKLSAgICByZW1vdmVBbGxGcmFnbWVudHMoKTsKLSAgICByZW1vdmVBbGxBdHRyaWJ1dGVGcmFnbWVudHMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGluc3RhbmNlRG9jdW1lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBJWFNERnJhZ21lbnQgY2hpbGRGcmFnID0gZ2V0RnJhZ21lbnQoY3JlYXRlSW5zdGFuY2UoKSk7Ci0gICAgICBWZWN0b3IgaW5zdGFuY2VzVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgCi0gICAgICBOb2RlTGlzdCBubCA9IGluc3RhbmNlRG9jdW1lbnRzW2ldLmdldENoaWxkTm9kZXMoKTsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbmwuZ2V0TGVuZ3RoKCk7IGorKykgewotICAgICAgICBOb2RlIG5vZGUgPSBubC5pdGVtKGopOwotICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQpCi0gICAgICAgICAgaW5zdGFuY2VzVmVjdG9yLmFkZChub2RlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHBhcmFtc1ZhbGlkID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBFbGVtZW50W10gY2hpbGRJbnN0YW5jZURvY3VtZW50cyA9IG5ldyBFbGVtZW50W2luc3RhbmNlc1ZlY3Rvci5zaXplKCldOwotICAgICAgaW5zdGFuY2VzVmVjdG9yLmNvcHlJbnRvKGNoaWxkSW5zdGFuY2VEb2N1bWVudHMpOwotICAgICAgaWYgKCFjaGlsZEZyYWcuc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKGNoaWxkSW5zdGFuY2VEb2N1bWVudHMpKQotICAgICAgICBwYXJhbXNWYWxpZCA9IGZhbHNlOwotICAgICAgc2V0UGFyYW1zRm9yQXR0cmlidXRlcyhjaGlsZEluc3RhbmNlRG9jdW1lbnRzW2ldLGNoaWxkRnJhZyk7Ci0gICAgCi0gICAgfQotICAgIHJldHVybiBwYXJhbXNWYWxpZDsKLSAgfQotCi0gIHB1YmxpYyBFbGVtZW50W10gZ2VuSW5zdGFuY2VEb2N1bWVudHNGcm9tUGFyYW1ldGVyVmFsdWVzKGJvb2xlYW4gZ2VuWFNJVHlwZSwgSGFzaHRhYmxlIG5hbWVzcGFjZVRhYmxlLERvY3VtZW50IGRvYykgewotICAgIFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiBjb21wbGV4VHlwZSA9IChYU0RDb21wbGV4VHlwZURlZmluaXRpb24pZ2V0WFNEVHlwZURlZmluaXRpb24oKTsKLSAgICBYU0RDb21wbGV4VHlwZUNvbnRlbnQgY29tcGxleFR5cGVDb250ZW50ID0gWFNEVHlwZURlZmluaXRpb25VdGlsLmdldFhTRENvbXBsZXhUeXBlQ29udGVudChjb21wbGV4VHlwZSk7Ci0gICAgRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzOwotICAgIFN0cmluZyB0YWdOYW1lID0gZ2V0SW5zdGFuY2VEb2N1bWVudFRhZ05hbWUobmFtZXNwYWNlVGFibGUpOwotICAgIGlmIChjb21wbGV4VHlwZUNvbnRlbnQgaW5zdGFuY2VvZiBYU0RUeXBlRGVmaW5pdGlvbikKLSAgICAgIGluc3RhbmNlRG9jdW1lbnRzID0gZ2VuSW5zdGFuY2VzRm9yWFNEVHlwZURlZihnZW5YU0lUeXBlLCBuYW1lc3BhY2VUYWJsZSwgdGFnTmFtZSxkb2MpOwotICAgIGVsc2UKLSAgICAgIGluc3RhbmNlRG9jdW1lbnRzID0gZ2VuSW5zdGFuY2VzRm9yWFNEUGFydGljbGUoZ2VuWFNJVHlwZSwgbmFtZXNwYWNlVGFibGUsIHRhZ05hbWUsZG9jKTsKLSAgICAgIGlmKGdlblhTSVR5cGUpIGFkZFhTSVR5cGUoaW5zdGFuY2VEb2N1bWVudHMsIG5hbWVzcGFjZVRhYmxlKTsKLSAgCXJldHVybiBpbnN0YW5jZURvY3VtZW50czsKLSAgfQotCi0gIHByaXZhdGUgRWxlbWVudCBhZGRBdHRyaWJ1dGVzKEVsZW1lbnQgaW5zdGFuY2VEb2N1bWVudCwgSVhTREZyYWdtZW50IGZyYWdtZW50LCBIYXNodGFibGUgbmFtZXNwYWNlVGFibGUgKXsKLSAgCQotICAJSVhTREF0dHJpYnV0ZUZyYWdtZW50W10gYXR0cmlidXRlRnJhZ21lbnRzID0gZ2V0QWxsQXR0cmlidXRlRnJhZ21lbnRzKCk7Ci0gICAgZm9yIChpbnQgayA9IDA7IGsgPCBhdHRyaWJ1dGVGcmFnbWVudHMubGVuZ3RoOyBrKyspewotICAgICAgaWYoYXR0cmlidXRlRnJhZ21lbnRzW2tdLmdldElEKCkuc3RhcnRzV2l0aChmcmFnbWVudC5nZXRJRCgpKSl7Ci0gICAgICAgIFN0cmluZyBuYW1lID0gKChYU0RBdHRyaWJ1dGVVc2UpYXR0cmlidXRlRnJhZ21lbnRzW2tdLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCkuZ2V0WFNEQ29tcG9uZW50KCkpLmdldEF0dHJpYnV0ZURlY2xhcmF0aW9uKCkuZ2V0TmFtZSgpOwotICAgICAgICBhdHRyaWJ1dGVGcmFnbWVudHNba10uZ2V0WFNERGVsZWdhdGlvbkZyYWdtZW50KCkuc2V0QXR0cmlidXRlc09uSW5zdGFuY2VEb2N1bWVudHMoaW5zdGFuY2VEb2N1bWVudCxuYW1lKTsJCi0gICAgICB9Ci0gICAgfQotICAgCQotICAgCXJldHVybiBpbnN0YW5jZURvY3VtZW50OwotICB9Ci0gIAotICBwcml2YXRlIEVsZW1lbnRbXSBnZW5JbnN0YW5jZXNGb3JYU0RUeXBlRGVmKGJvb2xlYW4gZ2VuWFNJVHlwZSwgSGFzaHRhYmxlIG5hbWVzcGFjZVRhYmxlLCBTdHJpbmcgdGFnTmFtZSxEb2N1bWVudCBkb2MpCi0gIHsKLSAgICBJWFNERnJhZ21lbnRbXSBmcmFnbWVudHMgPSBnZXRBbGxGcmFnbWVudHMoKTsKLSAgICBWZWN0b3IgaW5zdGFuY2VEb2N1bWVudHNDb3B5ID0gbmV3IFZlY3RvcigpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnJhZ21lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBFbGVtZW50W10gZnJhZ21lbnRJbnN0YW5jZXMgPSBmcmFnbWVudHNbaV0uZ2VuSW5zdGFuY2VEb2N1bWVudHNGcm9tUGFyYW1ldGVyVmFsdWVzKGdlblhTSVR5cGUsIG5hbWVzcGFjZVRhYmxlLGRvYyk7Ci0gICAgICBpZiAoZnJhZ21lbnRJbnN0YW5jZXMubGVuZ3RoID4gMCl7Ci0gICAgICAJZnJhZ21lbnRJbnN0YW5jZXNbMF0gPSBhZGRBdHRyaWJ1dGVzKGZyYWdtZW50SW5zdGFuY2VzWzBdLGZyYWdtZW50c1tpXSxuYW1lc3BhY2VUYWJsZSk7Ci0gICAgICAgIGluc3RhbmNlRG9jdW1lbnRzQ29weS5hZGQoZnJhZ21lbnRJbnN0YW5jZXNbMF0pOwotICAgICAgfQotICAgIH0KLSAgICBFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMgPSBuZXcgRWxlbWVudFtpbnN0YW5jZURvY3VtZW50c0NvcHkuc2l6ZSgpXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGluc3RhbmNlRG9jdW1lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBpbnN0YW5jZURvY3VtZW50c1tpXSA9IChFbGVtZW50KWluc3RhbmNlRG9jdW1lbnRzQ29weS5nZXQoaSk7Ci0gICAgfQotICAgIHJldHVybiBzZXRFbGVtZW50c1RhZ05hbWUoaW5zdGFuY2VEb2N1bWVudHMsIHRhZ05hbWUpOwotICB9Ci0KLSAgcHJpdmF0ZSBFbGVtZW50W10gZ2VuSW5zdGFuY2VzRm9yWFNEUGFydGljbGUoYm9vbGVhbiBnZW5YU0lUeXBlLCBIYXNodGFibGUgbmFtZXNwYWNlVGFibGUsIFN0cmluZyB0YWdOYW1lLERvY3VtZW50IGRvYykgewotICAgIElYU0RGcmFnbWVudFtdIGNoaWxkRnJhZ3MgPSBnZXRBbGxGcmFnbWVudHMoKTsKLSAgICBFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMgPSBuZXcgRWxlbWVudFtjaGlsZEZyYWdzLmxlbmd0aF07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGg7IGkrKykgewotICAgICAgICBFbGVtZW50W10gY2hpbGRJbnN0YW5jZXMgPSBjaGlsZEZyYWdzW2ldLmdlbkluc3RhbmNlRG9jdW1lbnRzRnJvbVBhcmFtZXRlclZhbHVlcyhnZW5YU0lUeXBlLCBuYW1lc3BhY2VUYWJsZSxkb2MpOwotICAgICAgICAKLSAgICAgICAgRWxlbWVudCBpbnN0YW5jZURvY3VtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgY2hpbGRJbnN0YW5jZXMubGVuZ3RoOyBqKyspIHsKLSAgICAgICAgICBpZiAoY2hpbGRJbnN0YW5jZXNbal0gIT0gbnVsbCl7Ci0gICAgICAgICAgCWFkZEF0dHJpYnV0ZXMoY2hpbGRJbnN0YW5jZXNbal0sY2hpbGRGcmFnc1tpXSxuYW1lc3BhY2VUYWJsZSk7IAotICAgICAgICAgIAlpbnN0YW5jZURvY3VtZW50LmFwcGVuZENoaWxkKGRvYy5pbXBvcnROb2RlKGNoaWxkSW5zdGFuY2VzW2pdLCB0cnVlKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGluc3RhbmNlRG9jdW1lbnRzW2ldID0gaW5zdGFuY2VEb2N1bWVudDsKLSAgICAgIH0KLSAgICByZXR1cm4gaW5zdGFuY2VEb2N1bWVudHM7Ci0gIH0KLQotICAKLSAgcHVibGljIFN0cmluZyBnZXRJbmZvcm1hdGlvbkZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNERGVmYXVsdEluZm9GcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRSZWFkRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RDb21wbGV4U2ltcGxlQ29udGVudFJGcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXcml0ZUZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNEQ29tcGxleFNpbXBsZUNvbnRlbnRGaXhXRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEQ29tcGxleFNpbXBsZUNvbnRlbnRSYW5nZUZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RDb21wbGV4U2ltcGxlQ29udGVudFJhbmdlRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA5YmI4OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RDb21wbGV4U2ltcGxlQ29udGVudFJhbmdlRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4MiArMCwwIEBACi0vKioKLSogPGNvcHlyaWdodD4KLSoKLSogTGljZW5zZWQgTWF0ZXJpYWwgLSBQcm9wZXJ0eSBvZiBJQk0KLSogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwMiAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0qIFVTIEdvdmVybm1lbnQgVXNlcnMgUmVzdHJpY3RlZCBSaWdodHMgLSBVc2UsIGR1cGxpY2F0aW9uIG9yIGRpc2Nsb3N1cmUKLSogcmVzdHJpY3RlZCBieSBHU0EgQURQIFNjaGVkdWxlIENvbnRyYWN0IHdpdGggSUJNIENvcnAuCi0qCi0qIDwvY29weXJpZ2h0PgotKgotKiBGaWxlIHBsdWdpbnMvY29tLmlibS5ldG9vbHMud2Vic2VydmljZS5leHBsb3Jlci93c2V4cGxvcmVyL3NyYy9jb20vaWJtL2V0b29scy93ZWJzZXJ2aWNlL2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvSW1wbC9YU0RDb21wbGV4UmFuZ2VGcmFnbWVudC5qYXZhLCB3c2EuZXRvb2xzLndzLmV4cGxvcmVyLCBsdW5hci01LjEuMiAxCi0qIFZlcnNpb24gMS4xIDAzLzAyLzI4IDE1OjI1OjE4Ci0qLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSVhTREF0dHJpYnV0ZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC51dGlsLlhTRFR5cGVEZWZpbml0aW9uVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQXR0cmlidXRlVXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wbGV4VHlwZUNvbnRlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotcHVibGljIGNsYXNzIFhTRENvbXBsZXhTaW1wbGVDb250ZW50UmFuZ2VGcmFnbWVudCBleHRlbmRzIFhTRENvbXBsZXhTaW1wbGVDb250ZW50Rml4RnJhZ21lbnQgewotICBwdWJsaWMgWFNEQ29tcGxleFNpbXBsZUNvbnRlbnRSYW5nZUZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgY29udHJvbGxlcikgewotICAgIHN1cGVyKGlkLCBuYW1lLCBjb25maWcsIGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cykgewotICAgIEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50c0NvcHkgPSBnZXRJbnN0YW5jZURvY3VtZW50c0J5VGFnTmFtZShpbnN0YW5jZURvY3VtZW50cywgZ2V0TmFtZSgpKTsKLSAgICBib29sZWFuIHBhcmFtc1ZhbGlkID0gaW50ZXJuYWxFcXVhbHMoaW5zdGFuY2VEb2N1bWVudHNDb3B5LCBpbnN0YW5jZURvY3VtZW50cyk7Ci0gICAgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uIGNvbXBsZXhUeXBlID0gKFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbilnZXRYU0RUeXBlRGVmaW5pdGlvbigpOwotICAgIFhTRENvbXBsZXhUeXBlQ29udGVudCBjb21wbGV4VHlwZUNvbnRlbnQgPSBYU0RUeXBlRGVmaW5pdGlvblV0aWwuZ2V0WFNEQ29tcGxleFR5cGVDb250ZW50KGNvbXBsZXhUeXBlKTsKLSAgICBpZiAoY29tcGxleFR5cGVDb250ZW50IGluc3RhbmNlb2YgWFNEVHlwZURlZmluaXRpb24pCi0gICAgICByZXR1cm4gc2V0UGFyYW1zRm9yWFNEVHlwZURlZihpbnN0YW5jZURvY3VtZW50c0NvcHkpICYmIHBhcmFtc1ZhbGlkOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBzZXRQYXJhbXNGb3JYU0RQYXJ0aWNsZShpbnN0YW5jZURvY3VtZW50c0NvcHkpICYmIHBhcmFtc1ZhbGlkOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIHNldFBhcmFtc0ZvckF0dHJpYnV0ZXMoRWxlbWVudCBpbnN0YW5jZURvY3VtZW50LElYU0RGcmFnbWVudCBmcmFnKXsKLSAgCWJvb2xlYW4gcGFyYW1zVmFsaWQgPSB0cnVlOwotICAJCi0gIAlJWFNEQXR0cmlidXRlRnJhZ21lbnRbXSBhdHRyaWJ1dGVGcmFnbWVudHMgPSBnZXRBbGxBdHRyaWJ1dGVGcmFnbWVudHMoKTsKLSAgCWZvciAoaW50IGkgPSAwOyBpIDwgYXR0cmlidXRlRnJhZ21lbnRzLmxlbmd0aDsgaSsrKXsKLSAgCSAgaWYoYXR0cmlidXRlRnJhZ21lbnRzW2ldLmdldElEKCkuc3RhcnRzV2l0aChmcmFnLmdldElEKCkpKXsgIAotICAJICAJICBOYW1lZE5vZGVNYXAgbm9kZU1hcCA9IGluc3RhbmNlRG9jdW1lbnQuZ2V0QXR0cmlidXRlcygpOwkKLSAgCSAgICAgIFN0cmluZyBuYW1lID0gKChYU0RBdHRyaWJ1dGVVc2UpYXR0cmlidXRlRnJhZ21lbnRzW2ldLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCkuZ2V0WFNEQ29tcG9uZW50KCkpLmdldEF0dHJpYnV0ZURlY2xhcmF0aW9uKCkuZ2V0TmFtZSgpOwotICAJICAgICAgcGFyYW1zVmFsaWQgPSBhdHRyaWJ1dGVGcmFnbWVudHNbaV0uZ2V0WFNERGVsZWdhdGlvbkZyYWdtZW50KCkuc2V0QXR0cmlidXRlUGFyYW1zRnJvbUluc3RhbmNlRG9jdW1lbnRzKG5vZGVNYXAuZ2V0TmFtZWRJdGVtKG5hbWUpKTsJCi0gICAgICB9Ci0gIAl9Ci0gICAgcmV0dXJuIHBhcmFtc1ZhbGlkOwotICB9Ci0gIAotICBwcml2YXRlIGJvb2xlYW4gc2V0UGFyYW1zRm9yWFNEVHlwZURlZihFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMpCi0gIHsKLSAgICBib29sZWFuIHBhcmFtc1ZhbGlkID0gdHJ1ZTsKLSAgICByZW1vdmVBbGxGcmFnbWVudHMoKTsKLSAgICByZW1vdmVBbGxBdHRyaWJ1dGVGcmFnbWVudHMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGluc3RhbmNlRG9jdW1lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBJWFNERnJhZ21lbnQgY2hpbGRGcmFnID0gZ2V0RnJhZ21lbnQoY3JlYXRlSW5zdGFuY2UoKSk7Ci0gICAgICBFbGVtZW50W10gY2hpbGRJbnN0YW5jZURvY3VtZW50cyA9IG5ldyBFbGVtZW50WzFdOwotICAgICAgY2hpbGRJbnN0YW5jZURvY3VtZW50c1swXSA9IGluc3RhbmNlRG9jdW1lbnRzW2ldOwotICAgICAgaWYgKCFjaGlsZEZyYWcuc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKHNldEVsZW1lbnRzVGFnTmFtZShjaGlsZEluc3RhbmNlRG9jdW1lbnRzLCBjaGlsZEZyYWcuZ2V0TmFtZSgpKSkpCi0gICAgICAgIHBhcmFtc1ZhbGlkID0gZmFsc2U7Ci0gICAgICBzZXRQYXJhbXNGb3JBdHRyaWJ1dGVzKGNoaWxkSW5zdGFuY2VEb2N1bWVudHNbMF0sY2hpbGRGcmFnKTsKLSAgICB9Ci0gICAgcmV0dXJuIHBhcmFtc1ZhbGlkOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIHNldFBhcmFtc0ZvclhTRFBhcnRpY2xlKEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cykgewotICAgIGJvb2xlYW4gcGFyYW1zVmFsaWQgPSB0cnVlOwotICAgIHJlbW92ZUFsbEZyYWdtZW50cygpOwotICAgIHJlbW92ZUFsbEF0dHJpYnV0ZUZyYWdtZW50cygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFuY2VEb2N1bWVudHMubGVuZ3RoOyBpKyspIHsKLSAgICAgIElYU0RGcmFnbWVudCBjaGlsZEZyYWcgPSBnZXRGcmFnbWVudChjcmVhdGVJbnN0YW5jZSgpKTsKLSAgICAgIFZlY3RvciBpbnN0YW5jZXNWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAKLSAgICAgIE5vZGVMaXN0IG5sID0gaW5zdGFuY2VEb2N1bWVudHNbaV0uZ2V0Q2hpbGROb2RlcygpOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBubC5nZXRMZW5ndGgoKTsgaisrKSB7Ci0gICAgICAgIE5vZGUgbm9kZSA9IG5sLml0ZW0oaik7Ci0gICAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgRWxlbWVudCkKLSAgICAgICAgICBpbnN0YW5jZXNWZWN0b3IuYWRkKG5vZGUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgcGFyYW1zVmFsaWQgPSBmYWxzZTsKLSAgICAgIH0KLSAgICAgIEVsZW1lbnRbXSBjaGlsZEluc3RhbmNlRG9jdW1lbnRzID0gbmV3IEVsZW1lbnRbaW5zdGFuY2VzVmVjdG9yLnNpemUoKV07Ci0gICAgICBpbnN0YW5jZXNWZWN0b3IuY29weUludG8oY2hpbGRJbnN0YW5jZURvY3VtZW50cyk7Ci0gICAgICBpZiAoIWNoaWxkRnJhZy5zZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMoY2hpbGRJbnN0YW5jZURvY3VtZW50cykpCi0gICAgICAgIHBhcmFtc1ZhbGlkID0gZmFsc2U7Ci0gICAgICBzZXRQYXJhbXNGb3JBdHRyaWJ1dGVzKGNoaWxkSW5zdGFuY2VEb2N1bWVudHNbaV0sY2hpbGRGcmFnKTsKLSAgICAKLSAgICB9Ci0gICAgcmV0dXJuIHBhcmFtc1ZhbGlkOwotICB9Ci0KLSAgcHVibGljIEVsZW1lbnRbXSBnZW5JbnN0YW5jZURvY3VtZW50c0Zyb21QYXJhbWV0ZXJWYWx1ZXMoYm9vbGVhbiBnZW5YU0lUeXBlLCBIYXNodGFibGUgbmFtZXNwYWNlVGFibGUsRG9jdW1lbnQgZG9jKSB7Ci0gICAgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uIGNvbXBsZXhUeXBlID0gKFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbilnZXRYU0RUeXBlRGVmaW5pdGlvbigpOwotICAgIFhTRENvbXBsZXhUeXBlQ29udGVudCBjb21wbGV4VHlwZUNvbnRlbnQgPSBYU0RUeXBlRGVmaW5pdGlvblV0aWwuZ2V0WFNEQ29tcGxleFR5cGVDb250ZW50KGNvbXBsZXhUeXBlKTsKLSAgICBFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHM7Ci0gICAgU3RyaW5nIHRhZ05hbWUgPSBnZXRJbnN0YW5jZURvY3VtZW50VGFnTmFtZShuYW1lc3BhY2VUYWJsZSk7Ci0gICAgaWYgKGNvbXBsZXhUeXBlQ29udGVudCBpbnN0YW5jZW9mIFhTRFR5cGVEZWZpbml0aW9uKQotICAgICAgaW5zdGFuY2VEb2N1bWVudHMgPSBnZW5JbnN0YW5jZXNGb3JYU0RUeXBlRGVmKGdlblhTSVR5cGUsIG5hbWVzcGFjZVRhYmxlLCB0YWdOYW1lLCBkb2MpOwotICAgIGVsc2UKLSAgICAgIGluc3RhbmNlRG9jdW1lbnRzID0gZ2VuSW5zdGFuY2VzRm9yWFNEUGFydGljbGUoZ2VuWFNJVHlwZSwgbmFtZXNwYWNlVGFibGUsIHRhZ05hbWUsIGRvYyk7Ci0gICAgICBpZihnZW5YU0lUeXBlKSBhZGRYU0lUeXBlKGluc3RhbmNlRG9jdW1lbnRzLCBuYW1lc3BhY2VUYWJsZSk7Ci0gIAlyZXR1cm4gaW5zdGFuY2VEb2N1bWVudHM7Ci0gIH0KLQotICBwcml2YXRlIEVsZW1lbnQgYWRkQXR0cmlidXRlcyhFbGVtZW50IGluc3RhbmNlRG9jdW1lbnQsIElYU0RGcmFnbWVudCBmcmFnbWVudCwgSGFzaHRhYmxlIG5hbWVzcGFjZVRhYmxlICl7Ci0gIAkKLSAgCUlYU0RBdHRyaWJ1dGVGcmFnbWVudFtdIGF0dHJpYnV0ZUZyYWdtZW50cyA9IGdldEFsbEF0dHJpYnV0ZUZyYWdtZW50cygpOwotICAgIGZvciAoaW50IGsgPSAwOyBrIDwgYXR0cmlidXRlRnJhZ21lbnRzLmxlbmd0aDsgaysrKXsKLSAgICAgIGlmKGF0dHJpYnV0ZUZyYWdtZW50c1trXS5nZXRJRCgpLnN0YXJ0c1dpdGgoZnJhZ21lbnQuZ2V0SUQoKSkpewotICAgICAgICBTdHJpbmcgbmFtZSA9ICgoWFNEQXR0cmlidXRlVXNlKWF0dHJpYnV0ZUZyYWdtZW50c1trXS5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpLmdldFhTRENvbXBvbmVudCgpKS5nZXRBdHRyaWJ1dGVEZWNsYXJhdGlvbigpLmdldE5hbWUoKTsKLSAgICAgICAgYXR0cmlidXRlRnJhZ21lbnRzW2tdLmdldFhTRERlbGVnYXRpb25GcmFnbWVudCgpLnNldEF0dHJpYnV0ZXNPbkluc3RhbmNlRG9jdW1lbnRzKGluc3RhbmNlRG9jdW1lbnQsbmFtZSk7CQotICAgICAgfQotICAgIH0KLSAgIAkKLSAgIAlyZXR1cm4gaW5zdGFuY2VEb2N1bWVudDsKLSAgfQotICAKLSAgcHJpdmF0ZSBFbGVtZW50W10gZ2VuSW5zdGFuY2VzRm9yWFNEVHlwZURlZihib29sZWFuIGdlblhTSVR5cGUsIEhhc2h0YWJsZSBuYW1lc3BhY2VUYWJsZSwgU3RyaW5nIHRhZ05hbWUsRG9jdW1lbnQgZG9jKQotICB7Ci0gICAgSVhTREZyYWdtZW50W10gZnJhZ21lbnRzID0gZ2V0QWxsRnJhZ21lbnRzKCk7Ci0gICAgVmVjdG9yIGluc3RhbmNlRG9jdW1lbnRzQ29weSA9IG5ldyBWZWN0b3IoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGZyYWdtZW50cy5sZW5ndGg7IGkrKykgewotICAgICAgRWxlbWVudFtdIGZyYWdtZW50SW5zdGFuY2VzID0gZnJhZ21lbnRzW2ldLmdlbkluc3RhbmNlRG9jdW1lbnRzRnJvbVBhcmFtZXRlclZhbHVlcyhnZW5YU0lUeXBlLCBuYW1lc3BhY2VUYWJsZSxkb2MpOwotICAgICAgaWYgKGZyYWdtZW50SW5zdGFuY2VzLmxlbmd0aCA+IDApewotICAgICAgCWZyYWdtZW50SW5zdGFuY2VzWzBdID0gYWRkQXR0cmlidXRlcyhmcmFnbWVudEluc3RhbmNlc1swXSxmcmFnbWVudHNbaV0sbmFtZXNwYWNlVGFibGUpOwotICAgICAgICBpbnN0YW5jZURvY3VtZW50c0NvcHkuYWRkKGZyYWdtZW50SW5zdGFuY2VzWzBdKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzID0gbmV3IEVsZW1lbnRbaW5zdGFuY2VEb2N1bWVudHNDb3B5LnNpemUoKV07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGg7IGkrKykgewotICAgICAgaW5zdGFuY2VEb2N1bWVudHNbaV0gPSAoRWxlbWVudClpbnN0YW5jZURvY3VtZW50c0NvcHkuZ2V0KGkpOwotICAgIH0KLSAgICByZXR1cm4gc2V0RWxlbWVudHNUYWdOYW1lKGluc3RhbmNlRG9jdW1lbnRzLCB0YWdOYW1lKTsKLSAgfQotCi0gIHByaXZhdGUgRWxlbWVudFtdIGdlbkluc3RhbmNlc0ZvclhTRFBhcnRpY2xlKGJvb2xlYW4gZ2VuWFNJVHlwZSwgSGFzaHRhYmxlIG5hbWVzcGFjZVRhYmxlLCBTdHJpbmcgdGFnTmFtZSxEb2N1bWVudCBkb2MpIHsKLSAgICBJWFNERnJhZ21lbnRbXSBjaGlsZEZyYWdzID0gZ2V0QWxsRnJhZ21lbnRzKCk7Ci0gICAgRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzID0gbmV3IEVsZW1lbnRbY2hpbGRGcmFncy5sZW5ndGhdOwotICAgIAotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGg7IGkrKykgewotICAgICAgICBFbGVtZW50W10gY2hpbGRJbnN0YW5jZXMgPSBjaGlsZEZyYWdzW2ldLmdlbkluc3RhbmNlRG9jdW1lbnRzRnJvbVBhcmFtZXRlclZhbHVlcyhnZW5YU0lUeXBlLCBuYW1lc3BhY2VUYWJsZSwgZG9jKTsKLSAgICAgICAgCi0gICAgICAgIEVsZW1lbnQgaW5zdGFuY2VEb2N1bWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KHRhZ05hbWUpOwotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGNoaWxkSW5zdGFuY2VzLmxlbmd0aDsgaisrKSB7Ci0gICAgICAgICAgaWYgKGNoaWxkSW5zdGFuY2VzW2pdICE9IG51bGwpewotICAgICAgICAgIAlhZGRBdHRyaWJ1dGVzKGNoaWxkSW5zdGFuY2VzW2pdLGNoaWxkRnJhZ3NbaV0sbmFtZXNwYWNlVGFibGUpOyAKLSAgICAgICAgICAJaW5zdGFuY2VEb2N1bWVudC5hcHBlbmRDaGlsZChkb2MuaW1wb3J0Tm9kZShjaGlsZEluc3RhbmNlc1tqXSwgdHJ1ZSkpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpbnN0YW5jZURvY3VtZW50c1tpXSA9IGluc3RhbmNlRG9jdW1lbnQ7Ci0gICAgICB9Ci0gICAgcmV0dXJuIGluc3RhbmNlRG9jdW1lbnRzOwotICB9Ci0KLSAgCi0gIAotICBwdWJsaWMgU3RyaW5nIGdldEluZm9ybWF0aW9uRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0REZWZhdWx0SW5mb0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFJlYWRGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRENvbXBsZXhTaW1wbGVDb250ZW50UkZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdyaXRlRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RDb21wbGV4U2ltcGxlQ29udGVudFJhbmdlV0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRERlZmF1bHRGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNERGVmYXVsdEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1OWJkMGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNERGVmYXVsdEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLkZyYWdtZW50Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotcHVibGljIGNsYXNzIFhTRERlZmF1bHRGcmFnbWVudCBleHRlbmRzIFhTREZyYWdtZW50IHsKLSAgcHVibGljIFhTRERlZmF1bHRGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcpIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHByb2Nlc3NQYXJhbWV0ZXJWYWx1ZXMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24gewotICAgIFN0cmluZ1tdIHBhcmFtID0gbmV3IFN0cmluZ1sxXTsKLSAgICBwYXJhbVswXSA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoZ2V0SUQoKSk7Ci0gICAgc2V0UGFyYW1ldGVyVmFsdWVzKGdldElEKCksIHBhcmFtKTsKLSAgICByZXR1cm4gaXNFbGVtZW50KGFkZFJvb3RFbGVtZW50KHBhcmFtWzBdKSk7Ci0gIH0KLQotICBwcml2YXRlIFN0cmluZyBhZGRSb290RWxlbWVudChTdHJpbmcgZWxlbWVudCkgewotICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBzYi5hcHBlbmQoRnJhZ21lbnRDb25zdGFudHMuUk9PVF9FTEVNRU5UX1NUQVJUX1RBRyk7Ci0gICAgc2IuYXBwZW5kKGVsZW1lbnQpOwotICAgIHNiLmFwcGVuZChGcmFnbWVudENvbnN0YW50cy5ST09UX0VMRU1FTlRfRU5EX1RBRyk7Ci0gICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gaXNFbGVtZW50KFN0cmluZyBlbGVtZW50U3RyaW5nKSB7Ci0gICAgdHJ5IHsKLSAgICAgIHJldHVybiAoWE1MVXRpbHMuc3RyaW5nVG9FbGVtZW50KGVsZW1lbnRTdHJpbmcpICE9IG51bGwpOwotICAgIH0KLSAgICBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZUFsbFBhcmFtZXRlclZhbHVlcygpIHsKLSAgICBTdHJpbmcgcGFyYW0gPSBnZXRQYXJhbWV0ZXJWYWx1ZShnZXRJRCgpLCAwKTsKLSAgICByZXR1cm4gKHBhcmFtID09IG51bGwgfHwgaXNFbGVtZW50KGFkZFJvb3RFbGVtZW50KHBhcmFtKSkpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGVQYXJhbWV0ZXJWYWx1ZXMoU3RyaW5nIHBhcmFtS2V5KSB7Ci0gICAgU3RyaW5nIHBhcmFtID0gZ2V0UGFyYW1ldGVyVmFsdWUoZ2V0SUQoKSwgMCk7Ci0gICAgcmV0dXJuIChwYXJhbSA9PSBudWxsIHx8IGlzRWxlbWVudChhZGRSb290RWxlbWVudChwYXJhbSkpKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHZhbGlkYXRlUGFyYW1ldGVyVmFsdWUoU3RyaW5nIHBhcmFtS2V5LCBpbnQgcGFyYW1JbmRleCkgewotICAgIFN0cmluZyBwYXJhbSA9IGdldFBhcmFtZXRlclZhbHVlKGdldElEKCksIDApOwotICAgIHJldHVybiAocGFyYW0gPT0gbnVsbCB8fCBpc0VsZW1lbnQoYWRkUm9vdEVsZW1lbnQocGFyYW0pKSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBzZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMoRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzKSB7Ci0gICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIGJvb2xlYW4gcGFyYW1WYWxpZCA9IHRydWU7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGg7IGkrKykgewotICAgICAgU3RyaW5nIGluc3RhbmNlU3RyaW5nID0gWE1MVXRpbHMuc2VyaWFsaXplKGluc3RhbmNlRG9jdW1lbnRzW2ldLCB0cnVlKTsKLSAgICAgIGlmIChpbnN0YW5jZVN0cmluZyAhPSBudWxsICYmIGluc3RhbmNlU3RyaW5nLmxlbmd0aCgpID4gMCkKLSAgICAgICAgc2IuYXBwZW5kKGluc3RhbmNlU3RyaW5nKTsKLSAgICAgIGVsc2UKLSAgICAgICAgcGFyYW1WYWxpZCA9IGZhbHNlOwotICAgIH0KLSAgICBTdHJpbmdbXSBwYXJhbSA9IHtzYi50b1N0cmluZygpfTsKLSAgICBzZXRQYXJhbWV0ZXJWYWx1ZXMoZ2V0SUQoKSwgcGFyYW0pOwotICAgIHJldHVybiBwYXJhbVZhbGlkOwotICB9Ci0KLSAgcHVibGljIEVsZW1lbnRbXSBnZW5JbnN0YW5jZURvY3VtZW50c0Zyb21QYXJhbWV0ZXJWYWx1ZXMoYm9vbGVhbiBnZW5YU0lUeXBlLCBIYXNodGFibGUgbmFtZXNwYWNlVGFibGUsIERvY3VtZW50IGRvYykgewotICAgIFN0cmluZyBwYXJhbSA9IGdldFBhcmFtZXRlclZhbHVlKGdldElEKCksIDApOwotICAgIGlmIChwYXJhbSA9PSBudWxsKQotICAgICAgcmV0dXJuIG5ldyBFbGVtZW50WzBdOwotICAgIEVsZW1lbnQgcm9vdDsKLSAgICB0cnkgewotICAgICAgcm9vdCA9IChFbGVtZW50KWRvYy5pbXBvcnROb2RlKFhNTFV0aWxzLnN0cmluZ1RvRWxlbWVudChhZGRSb290RWxlbWVudChwYXJhbSkpLCB0cnVlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFRocm93YWJsZSB0KSB7Ci0gICAgICByZXR1cm4gbmV3IEVsZW1lbnRbMF07Ci0gICAgfQotICAgIE5vZGVMaXN0IG5sID0gcm9vdC5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgVmVjdG9yIGluc3RhbmNlRG9jdW1lbnRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBubC5nZXRMZW5ndGgoKTsgaSsrKSB7Ci0gICAgICBOb2RlIG5vZGUgPSBubC5pdGVtKGkpOwotICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50KQotICAgICAgICBpbnN0YW5jZURvY3VtZW50VmVjdG9yLmFkZChub2RlKTsKLSAgICB9Ci0gICAgRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzID0gbmV3IEVsZW1lbnRbaW5zdGFuY2VEb2N1bWVudFZlY3Rvci5zaXplKCldOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFuY2VEb2N1bWVudHMubGVuZ3RoOyBpKyspIHsKLSAgICAgIGluc3RhbmNlRG9jdW1lbnRzW2ldID0gKEVsZW1lbnQpaW5zdGFuY2VEb2N1bWVudFZlY3Rvci5nZXQoaSk7Ci0gICAgfQotICAgIHJldHVybiBpbnN0YW5jZURvY3VtZW50czsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5mb3JtYXRpb25GcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRERlZmF1bHRJbmZvRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVhZEZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNERGVmYXVsdFJGcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXcml0ZUZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNERGVmYXVsdFdGcmFnbWVudEpTUC5qc3AiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0REZWxlZ2F0aW9uRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRERlbGVnYXRpb25GcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjYzMmE4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRERlbGVnYXRpb25GcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0REZWxlZ2F0aW9uRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSVhTREZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBYU0REZWxlZ2F0aW9uRnJhZ21lbnQgZXh0ZW5kcyBYU0RGcmFnbWVudCBpbXBsZW1lbnRzIElYU0REZWxlZ2F0aW9uRnJhZ21lbnQKLXsKLSAgcHJpdmF0ZSBJWFNERnJhZ21lbnQgeHNkRnJhZ21lbnRfOwotCi0gIHB1YmxpYyBYU0REZWxlZ2F0aW9uRnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnKQotICB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZyk7Ci0gICAgeHNkRnJhZ21lbnRfID0gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpIHsKLSAgICBzdXBlci5zZXROYW1lKG5hbWUpOwotICAgIGlmICh4c2RGcmFnbWVudF8gIT0gbnVsbCkKLSAgICAgIHhzZEZyYWdtZW50Xy5zZXROYW1lKG5hbWUpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc1BhcmFtZXRlclZhbHVlcyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgcmV0dXJuIHhzZEZyYWdtZW50Xy5wcm9jZXNzUGFyYW1ldGVyVmFsdWVzKHBhcnNlcik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRQYXJhbWV0ZXJWYWx1ZXMoU3RyaW5nIHBhcmFtS2V5LCBTdHJpbmdbXSBwYXJhbXMpCi0gIHsKLSAgICB4c2RGcmFnbWVudF8uc2V0UGFyYW1ldGVyVmFsdWVzKHBhcmFtS2V5LCBwYXJhbXMpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0UGFyYW1ldGVyVmFsdWVzKFN0cmluZyBwYXJhbUtleSwgVmVjdG9yIHBhcmFtcykKLSAgewotICAgIHhzZEZyYWdtZW50Xy5zZXRQYXJhbWV0ZXJWYWx1ZXMocGFyYW1LZXksIHBhcmFtcyk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nW10gZ2V0UGFyYW1ldGVyVmFsdWVzKFN0cmluZyBwYXJhbUtleSkKLSAgewotICAgIHJldHVybiB4c2RGcmFnbWVudF8uZ2V0UGFyYW1ldGVyVmFsdWVzKHBhcmFtS2V5KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UGFyYW1ldGVyVmFsdWUoU3RyaW5nIHBhcmFtS2V5LCBpbnQgcGFyYW1JbmRleCkKLSAgewotICAgIHJldHVybiB4c2RGcmFnbWVudF8uZ2V0UGFyYW1ldGVyVmFsdWUocGFyYW1LZXksIHBhcmFtSW5kZXgpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGVBbGxQYXJhbWV0ZXJWYWx1ZXMoKQotICB7Ci0gICAgcmV0dXJuIHhzZEZyYWdtZW50Xy52YWxpZGF0ZUFsbFBhcmFtZXRlclZhbHVlcygpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGVQYXJhbWV0ZXJWYWx1ZXMoU3RyaW5nIHBhcmFtS2V5KQotICB7Ci0gICAgcmV0dXJuIHhzZEZyYWdtZW50Xy52YWxpZGF0ZVBhcmFtZXRlclZhbHVlcyhwYXJhbUtleSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZVBhcmFtZXRlclZhbHVlKFN0cmluZyBwYXJhbUtleSwgaW50IHBhcmFtSW5kZXgpCi0gIHsKLSAgICByZXR1cm4geHNkRnJhZ21lbnRfLnZhbGlkYXRlUGFyYW1ldGVyVmFsdWUocGFyYW1LZXksIHBhcmFtSW5kZXgpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cykKLSAgewotICAgIHJldHVybiB4c2RGcmFnbWVudF8uc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKGluc3RhbmNlRG9jdW1lbnRzKTsKLSAgfQotCi0gIHB1YmxpYyBFbGVtZW50W10gZ2VuSW5zdGFuY2VEb2N1bWVudHNGcm9tUGFyYW1ldGVyVmFsdWVzKGJvb2xlYW4gZ2VuWFNJVHlwZSwgSGFzaHRhYmxlIG5hbWVzcGFjZVRhYmxlLCBEb2N1bWVudCBkb2MpCi0gIHsKLSAgICByZXR1cm4geHNkRnJhZ21lbnRfLmdlbkluc3RhbmNlRG9jdW1lbnRzRnJvbVBhcmFtZXRlclZhbHVlcyhnZW5YU0lUeXBlLCBuYW1lc3BhY2VUYWJsZSwgZG9jKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5mb3JtYXRpb25GcmFnbWVudCgpCi0gIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRERlZmF1bHRJbmZvRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVhZEZyYWdtZW50KCkKLSAgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNERGVsZWdhdGlvblJGcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXcml0ZUZyYWdtZW50KCkKLSAgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNERGVsZWdhdGlvbldGcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0WFNERGVsZWdhdGlvbkZyYWdtZW50KElYU0RGcmFnbWVudCB4c2RGcmFnbWVudCkKLSAgewotICAgIHhzZEZyYWdtZW50XyA9IHhzZEZyYWdtZW50OwotICB9Ci0KLSAgcHVibGljIElYU0RGcmFnbWVudCBnZXRYU0REZWxlZ2F0aW9uRnJhZ21lbnQoKQotICB7Ci0gICAgcmV0dXJuIHhzZEZyYWdtZW50XzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNERWxlbWVudEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RFbGVtZW50RnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQ3YTU2ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RFbGVtZW50RnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAxMTkgICAxMjM1MzkgamVzcGVyQHNlbHNrYWJldC5vcmcgLSBKZXNwZXIgTfhsbGVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuRnJhZ21lbnRDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSVhTREVsZW1lbnRGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNERnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERm9ybTsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLXB1YmxpYyBjbGFzcyBYU0RFbGVtZW50RnJhZ21lbnQgZXh0ZW5kcyBYU0REZWxlZ2F0aW9uRnJhZ21lbnQgaW1wbGVtZW50cyBJWFNERWxlbWVudEZyYWdtZW50Ci17Ci0gIHByaXZhdGUgaW50IG1pbk9jY3Vyc187Ci0gIHByaXZhdGUgaW50IG1heE9jY3Vyc187Ci0gIHByaXZhdGUgYm9vbGVhbiBpc05pbF87Ci0gCi0gIAotICBwdWJsaWMgWFNERWxlbWVudEZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZykKLSAgewotICAgIHN1cGVyKGlkLCBuYW1lLCBjb25maWcpOwotICAgIGlmIChjb25maWcgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBtaW5PY2N1cnNfID0gY29uZmlnLmdldE1pbk9jY3VycygpOwotICAgICAgbWF4T2NjdXJzXyA9IGNvbmZpZy5nZXRNYXhPY2N1cnMoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIG1pbk9jY3Vyc18gPSBGcmFnbWVudENvbnN0YW50cy5ERUZBVUxUX01JTl9PQ0NVUlM7Ci0gICAgICBtYXhPY2N1cnNfID0gRnJhZ21lbnRDb25zdGFudHMuREVGQVVMVF9NQVhfT0NDVVJTOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHByb2Nlc3NQYXJhbWV0ZXJWYWx1ZXMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIElYU0RGcmFnbWVudCBlbGVtZW50VHlwZUZyYWdtZW50ID0gZ2V0WFNERGVsZWdhdGlvbkZyYWdtZW50KCk7Ci0gICAgc2V0SXNOaWwocGFyc2VyKTsKLSAgICBpZihpc05pbF8pcmV0dXJuIHRydWU7Ci0gICAgCQotICAgIGlmICghZWxlbWVudFR5cGVGcmFnbWVudC5wcm9jZXNzUGFyYW1ldGVyVmFsdWVzKHBhcnNlcikpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgU3RyaW5nW10gcGFyYW1zID0gZ2V0UGFyYW1ldGVyVmFsdWVzKGVsZW1lbnRUeXBlRnJhZ21lbnQuZ2V0SUQoKSk7Ci0gICAgaWYgKHBhcmFtcyAhPSBudWxsICYmICF3aXRoaW5SYW5nZShwYXJhbXMubGVuZ3RoKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHNldElzTmlsKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgbmlsID0gcGFyc2VyLmdldFBhcmFtZXRlcihnZXROaWxJRCgpKTsKLSAgICBpZihuaWwgIT0gbnVsbCkgaXNOaWxfID0gdHJ1ZTsKLSAgICBlbHNlIGlzTmlsXyA9IGZhbHNlOwotICAgIHJldHVybiBpc05pbF87Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIHZhbGlkYXRlQWxsUGFyYW1ldGVyVmFsdWVzKCkKLSAgewotICAgIElYU0RGcmFnbWVudCBlbGVtZW50VHlwZUZyYWdtZW50ID0gZ2V0WFNERGVsZWdhdGlvbkZyYWdtZW50KCk7Ci0gICAgU3RyaW5nW10gcGFyYW1zID0gZ2V0UGFyYW1ldGVyVmFsdWVzKGVsZW1lbnRUeXBlRnJhZ21lbnQuZ2V0SUQoKSk7Ci0gICAgaWYgKHBhcmFtcyAhPSBudWxsICYmICF3aXRoaW5SYW5nZShwYXJhbXMubGVuZ3RoKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWVsZW1lbnRUeXBlRnJhZ21lbnQudmFsaWRhdGVBbGxQYXJhbWV0ZXJWYWx1ZXMoKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHZhbGlkYXRlUGFyYW1ldGVyVmFsdWVzKFN0cmluZyBwYXJhbUtleSkKLSAgewotICAgIFN0cmluZ1tdIHBhcmFtcyA9IGdldFBhcmFtZXRlclZhbHVlcyhwYXJhbUtleSk7Ci0gICAgaWYgKHBhcmFtcyAhPSBudWxsICYmICF3aXRoaW5SYW5nZShwYXJhbXMubGVuZ3RoKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWdldFhTRERlbGVnYXRpb25GcmFnbWVudCgpLnZhbGlkYXRlUGFyYW1ldGVyVmFsdWVzKHBhcmFtS2V5KSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHZhbGlkYXRlUGFyYW1ldGVyVmFsdWUoU3RyaW5nIHBhcmFtS2V5LCBpbnQgcGFyYW1JbmRleCkKLSAgewotICAgIGlmICghd2l0aGluUmFuZ2UocGFyYW1JbmRleCArIDEpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFhTREVsZW1lbnREZWNsYXJhdGlvbiB4c2RFbGVtZW50ID0gKFhTREVsZW1lbnREZWNsYXJhdGlvbilnZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpLmdldFhTRENvbXBvbmVudCgpOwotICAgIFN0cmluZyBwYXJhbSA9IGdldFBhcmFtZXRlclZhbHVlKHBhcmFtS2V5LCBwYXJhbUluZGV4KTsKLSAgICBpZiAocGFyYW0gIT0gbnVsbCAmJiBwYXJhbS5sZW5ndGgoKSA8PSAwICYmICF4c2RFbGVtZW50LmlzTmlsbGFibGUoKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWdldFhTRERlbGVnYXRpb25GcmFnbWVudCgpLnZhbGlkYXRlUGFyYW1ldGVyVmFsdWUocGFyYW1LZXksIHBhcmFtSW5kZXgpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnKQotICB7Ci0gICAgc3VwZXIuc2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oY29uZmlnKTsKLSAgICBtaW5PY2N1cnNfID0gY29uZmlnLmdldE1pbk9jY3VycygpOwotICAgIG1heE9jY3Vyc18gPSBjb25maWcuZ2V0TWF4T2NjdXJzKCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBzZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMoRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzKQotICB7Ci0gICAgRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzQ29weSA9IGluc3RhbmNlRG9jdW1lbnRzOwotICAgIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZyA9IGdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci0gICAgU3RyaW5nIHdzZGxQYXJ0TmFtZSA9IGNvbmZpZy5nZXRXU0RMUGFydE5hbWUoKTsKLSAgICBOb2RlTGlzdCBubCA9IGluc3RhbmNlRG9jdW1lbnRzQ29weVswXS5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgCi0gICAgaWYoaW5zdGFuY2VEb2N1bWVudHNDb3B5WzBdLmhhc0F0dHJpYnV0ZShYU0lfTklMX0FUVFJJQlVURSkpewotICAgICAgU3RyaW5nIG5pbCA9IGluc3RhbmNlRG9jdW1lbnRzQ29weVswXS5nZXRBdHRyaWJ1dGUoWFNJX05JTF9BVFRSSUJVVEUpOwotICAgICAgaWYobmlsLmVxdWFscyhUUlVFKSkgaXNOaWxfID0gdHJ1ZTsgCi0gICAgfSAgCi0gICAgCi0gICAgCi0gICAgaWYgKGNvbmZpZy5nZXRJc1dTRExQYXJ0KCkgJiYgY29uZmlnLmdldFN0eWxlKCkgPT0gRnJhZ21lbnRDb25zdGFudHMuU1RZTEVfUlBDICYmIHdzZGxQYXJ0TmFtZSAhPSBudWxsICYmIHdzZGxQYXJ0TmFtZS5sZW5ndGgoKSA+IDAgJiYgaW5zdGFuY2VEb2N1bWVudHNDb3B5Lmxlbmd0aCA9PSAxICYmIHdzZGxQYXJ0TmFtZS5lcXVhbHMoaW5zdGFuY2VEb2N1bWVudHNDb3B5WzBdLmdldFRhZ05hbWUoKSkpCi0gICAgewotICAgICAgVmVjdG9yIGNoaWxkRWxlbWVudHMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5sLmdldExlbmd0aCgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIE5vZGUgbm9kZSA9IG5sLml0ZW0oaSk7Ci0gICAgICAgIGlmIChub2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpCi0gICAgICAgICAgY2hpbGRFbGVtZW50cy5hZGQobm9kZSk7Ci0gICAgICB9Ci0gICAgICBpbnN0YW5jZURvY3VtZW50c0NvcHkgPSAoRWxlbWVudFtdKWNoaWxkRWxlbWVudHMudG9BcnJheShuZXcgRWxlbWVudFswXSk7Ci0gICAgfQotICAgIElYU0RGcmFnbWVudCBlbGVtZW50VHlwZUZyYWdtZW50ID0gZ2V0WFNERGVsZWdhdGlvbkZyYWdtZW50KCk7Ci0gICAgaW5zdGFuY2VEb2N1bWVudHNDb3B5ID0gZ2V0SW5zdGFuY2VEb2N1bWVudHNCeVRhZ05hbWUoaW5zdGFuY2VEb2N1bWVudHNDb3B5LCBnZXROYW1lKCkpOwotICAgIHJldHVybiBlbGVtZW50VHlwZUZyYWdtZW50LnNldFBhcmFtZXRlclZhbHVlc0Zyb21JbnN0YW5jZURvY3VtZW50cyhzZXRFbGVtZW50c1RhZ05hbWUoaW5zdGFuY2VEb2N1bWVudHNDb3B5LCBlbGVtZW50VHlwZUZyYWdtZW50LmdldE5hbWUoKSkpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgWFNJX05JTF9BVFRSSUJVVEUgPSAieHNpOm5pbCI7Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFRSVUUgPSAidHJ1ZSI7Ci0gIHB1YmxpYyBFbGVtZW50W10gZ2VuSW5zdGFuY2VEb2N1bWVudHNGcm9tUGFyYW1ldGVyVmFsdWVzKGJvb2xlYW4gZ2VuWFNJVHlwZSwgSGFzaHRhYmxlIG5hbWVzcGFjZVRhYmxlLCBEb2N1bWVudCBkb2MpCi0gIHsKLSAgCQotICAJRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzID0gZ2V0WFNERGVsZWdhdGlvbkZyYWdtZW50KCkuZ2VuSW5zdGFuY2VEb2N1bWVudHNGcm9tUGFyYW1ldGVyVmFsdWVzKGdlblhTSVR5cGUsIG5hbWVzcGFjZVRhYmxlLCBkb2MpOwotICAgIGlmKGlzTmlsXyl7IAotICAgICAgZm9yKGludCBqPTA7aiA8IGluc3RhbmNlRG9jdW1lbnRzLmxlbmd0aDtqKyspeyAgCi0gICAgICAJaW5zdGFuY2VEb2N1bWVudHNbal0uc2V0QXR0cmlidXRlKFhTSV9OSUxfQVRUUklCVVRFLFRSVUUpOwotICAgICAgCU5vZGVMaXN0IG5vZGVMaXN0ID0gaW5zdGFuY2VEb2N1bWVudHNbal0uZ2V0Q2hpbGROb2RlcygpOyAKLSAgICAgICAgaW50IGxlbmd0aCA9IG5vZGVMaXN0LmdldExlbmd0aCgpOwotICAgICAgICBmb3IoaW50IGkgPTA7aSA8IGxlbmd0aDtpKyspewotICAgICAgICAgIGluc3RhbmNlRG9jdW1lbnRzW2pdLnJlbW92ZUNoaWxkKG5vZGVMaXN0Lml0ZW0oMCkpOwotICAgICAgICB9Ci0gICAgICB9ICAKLSAgICB9Ci0gICAgaW5zdGFuY2VEb2N1bWVudHMgPSBzZXRFbGVtZW50c1RhZ05hbWUoaW5zdGFuY2VEb2N1bWVudHMsIGdldEluc3RhbmNlRG9jdW1lbnRUYWdOYW1lKG5hbWVzcGFjZVRhYmxlKSk7Ci0gICAgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnID0gZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLSAgICBTdHJpbmcgd3NkbFBhcnROYW1lID0gY29uZmlnLmdldFdTRExQYXJ0TmFtZSgpOwotICAgIGlmIChjb25maWcuZ2V0SXNXU0RMUGFydCgpICYmIGNvbmZpZy5nZXRTdHlsZSgpID09IEZyYWdtZW50Q29uc3RhbnRzLlNUWUxFX1JQQyAmJiB3c2RsUGFydE5hbWUgIT0gbnVsbCAmJiB3c2RsUGFydE5hbWUubGVuZ3RoKCkgPiAwKQotICAgIHsKLSAgICAgIEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50c0NvcHkgPSBpbnN0YW5jZURvY3VtZW50czsKLSAgICAgIGluc3RhbmNlRG9jdW1lbnRzID0gbmV3IEVsZW1lbnRbMV07Ci0gICAgICBpbnN0YW5jZURvY3VtZW50c1swXSA9IGRvYy5jcmVhdGVFbGVtZW50KHdzZGxQYXJ0TmFtZSk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGluc3RhbmNlRG9jdW1lbnRzQ29weS5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgaWYgKGluc3RhbmNlRG9jdW1lbnRzQ29weVtpXSAhPSBudWxsKQotICAgICAgICAgIGluc3RhbmNlRG9jdW1lbnRzWzBdLmFwcGVuZENoaWxkKGluc3RhbmNlRG9jdW1lbnRzQ29weVtpXSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBpbnN0YW5jZURvY3VtZW50czsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIGlzSW5zdGFuY2VOYW1lc3BhY2VRdWFsaWZpZWQoKQotICB7Ci0gICAgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnID0gZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLSAgICBpZiAoY29uZmlnLmdldFBhcnRFbmNvZGluZygpID09IEZyYWdtZW50Q29uc3RhbnRzLkVOQ09ESU5HX0xJVEVSQUwpCi0gICAgewotICAgICAgWFNERWxlbWVudERlY2xhcmF0aW9uIHhzZEVsZW1lbnQgPSAoWFNERWxlbWVudERlY2xhcmF0aW9uKWNvbmZpZy5nZXRYU0RDb21wb25lbnQoKTsKLSAgICAgIC8vIFRyeSB0byByZXNvbHZlIHRoZSBlbGVtZW50LCBzaW5jZSBhbiBlbGVtZW50IHdpdGggYSByZWYgY2FuIG5ldmVyIGJlIGdsb2JhbAotICAgICAgaWYgKHhzZEVsZW1lbnQuZ2V0UmVzb2x2ZWRFbGVtZW50RGVjbGFyYXRpb24oKSAhPSBudWxsKQotICAgICAgICB4c2RFbGVtZW50ID0geHNkRWxlbWVudC5nZXRSZXNvbHZlZEVsZW1lbnREZWNsYXJhdGlvbigpOwotICAgICAgCi0gICAgICBpZiAoeHNkRWxlbWVudC5pc0dsb2JhbCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgaWYgKHhzZEVsZW1lbnQuaXNTZXRGb3JtKCkpCi0gICAgICAgICAgcmV0dXJuICh4c2RFbGVtZW50LmdldEZvcm0oKS5nZXRWYWx1ZSgpID09IFhTREZvcm0uUVVBTElGSUVEKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHJldHVybiAoeHNkRWxlbWVudC5nZXRTY2hlbWEoKS5nZXRFbGVtZW50Rm9ybURlZmF1bHQoKS5nZXRWYWx1ZSgpID09IFhTREZvcm0uUVVBTElGSUVEKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRJbnN0YW5jZURvY3VtZW50VGFnTmFtZShIYXNodGFibGUgbmFtZXNwYWNlVGFibGUpCi0gIHsKLSAgICBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcgPSBnZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotICAgIFhTREVsZW1lbnREZWNsYXJhdGlvbiB4c2RFbGVtZW50ID0gKFhTREVsZW1lbnREZWNsYXJhdGlvbiljb25maWcuZ2V0WFNEQ29tcG9uZW50KCk7Ci0gICAgU3RyaW5nQnVmZmVyIHRhZ05hbWUgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgaWYgKGlzSW5zdGFuY2VOYW1lc3BhY2VRdWFsaWZpZWQoKSkKLSAgICB7Ci0gICAgICBTdHJpbmcgbnNVUkkgPSBudWxsOwotICAgICAgLy8gcG9ydCB0byBvcmcuZWNsaXBzZS54c2QKLSAgICAgIGlmICh4c2RFbGVtZW50LmdldFJlc29sdmVkRWxlbWVudERlY2xhcmF0aW9uKCkgIT0gbnVsbCkKLSAgICAgICAgbnNVUkkgPSB4c2RFbGVtZW50LmdldFJlc29sdmVkRWxlbWVudERlY2xhcmF0aW9uKCkuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgICBlbHNlCi0gICAgICAgIG5zVVJJID0geHNkRWxlbWVudC5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLSAgICAgIGlmIChuc1VSSSAhPSBudWxsICYmIG5zVVJJLmxlbmd0aCgpID4gMCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHByZWZpeCA9IGdldFByZWZpeEZyb21OYW1lc3BhY2VVUkkobnNVUkksIG5hbWVzcGFjZVRhYmxlKTsKLSAgICAgICAgdGFnTmFtZS5hcHBlbmQocHJlZml4KTsKLSAgICAgICAgdGFnTmFtZS5hcHBlbmQoRnJhZ21lbnRDb25zdGFudHMuQ09MT04pOwotICAgICAgfQotICAgIH0KLSAgICBTdHJpbmcgeHNkRWxlbWVudE5hbWUgPSB4c2RFbGVtZW50LmdldE5hbWUoKTsKLSAgICBpZiAoeHNkRWxlbWVudE5hbWUgPT0gbnVsbCB8fCB4c2RFbGVtZW50TmFtZS5sZW5ndGgoKSA8PSAwKQotICAgIHsKLSAgICAgIC8vIHBvcnQgdG8gb3JnLmVjbGlwc2UueHNkCi0gICAgICBpZiAoeHNkRWxlbWVudC5nZXRSZXNvbHZlZEVsZW1lbnREZWNsYXJhdGlvbigpICE9IG51bGwpCi0gICAgICAgIHhzZEVsZW1lbnROYW1lID0geHNkRWxlbWVudC5nZXRSZXNvbHZlZEVsZW1lbnREZWNsYXJhdGlvbigpLmdldE5hbWUoKTsKLSAgICAgIGVsc2UKLSAgICAgICAgeHNkRWxlbWVudE5hbWUgPSBnZXROYW1lKCk7Ci0gICAgfQotICAgIHRhZ05hbWUuYXBwZW5kKHhzZEVsZW1lbnROYW1lKTsKLSAgICByZXR1cm4gdGFnTmFtZS50b1N0cmluZygpOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIHdpdGhpblJhbmdlKGludCBzaXplKQotICB7Ci0gICAgaWYgKHNpemUgPCBtaW5PY2N1cnNfKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtYXhPY2N1cnNfICE9IEZyYWdtZW50Q29uc3RhbnRzLlVOQk9VTkRFRCAmJiBzaXplID4gbWF4T2NjdXJzXykKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldE1pbk9jY3VycyhpbnQgbWluT2NjdXJzKQotICB7Ci0gICAgbWluT2NjdXJzXyA9IG1pbk9jY3VyczsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0TWluT2NjdXJzKCkKLSAgewotICAgIHJldHVybiBtaW5PY2N1cnNfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0TWF4T2NjdXJzKGludCBtYXhPY2N1cnMpCi0gIHsKLSAgICBtYXhPY2N1cnNfID0gbWF4T2NjdXJzOwotICB9Ci0KLSAgcHVibGljIGludCBnZXRNYXhPY2N1cnMoKQotICB7Ci0gICAgcmV0dXJuIG1heE9jY3Vyc187Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGlzTmlsbGFibGUoKQotICB7Ci0gIAlpZihnZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpLmdldFhTRENvbXBvbmVudCgpLmdldEVsZW1lbnQoKS5nZXRBdHRyaWJ1dGUoIm5pbGxhYmxlIikuZXF1YWxzKCJ0cnVlIikpCi0gIAkgIHJldHVybiB0cnVlOwotICAJcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBpc05pbCgpCi0gIHsKLSAgCXJldHVybiBpc05pbF87Ci0gIH0KLSAgCi0gIAotICBwdWJsaWMgU3RyaW5nIGdldE5pbElEKCkKLSAgewotICAJcmV0dXJuIGdldElEKCkgKyBJWFNERWxlbWVudEZyYWdtZW50Lk5JTDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5mb3JtYXRpb25GcmFnbWVudCgpCi0gIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRERlZmF1bHRJbmZvRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVhZEZyYWdtZW50KCkKLSAgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNERWxlbWVudFJGcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXcml0ZUZyYWdtZW50KCkKLSAgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNERWxlbWVudFdGcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTREVtcHR5RnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTREVtcHR5RnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWEyMjU4ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RFbXB0eUZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5GcmFnbWVudENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLXB1YmxpYyBjbGFzcyBYU0RFbXB0eUZyYWdtZW50IGV4dGVuZHMgWFNERnJhZ21lbnQgewotICBwcml2YXRlIGludCBvY2N1cmFuY2VfOwotCi0gIHB1YmxpYyBYU0RFbXB0eUZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZykgewotICAgIHN1cGVyKGlkLCBuYW1lLCBjb25maWcpOwotICAgIG9jY3VyYW5jZV8gPSAwOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc1BhcmFtZXRlclZhbHVlcyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbiB7Ci0gICAgU3RyaW5nIG9jY3VyYW5jZSA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoZ2V0SUQoKSk7Ci0gICAgdHJ5IHsKLSAgICAgIG9jY3VyYW5jZV8gPSBJbnRlZ2VyLnBhcnNlSW50KG9jY3VyYW5jZSk7Ci0gICAgICByZXR1cm4gdmFsaWRhdGVBbGxQYXJhbWV0ZXJWYWx1ZXMoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFRocm93YWJsZSB0KSB7Ci0gICAgICBvY2N1cmFuY2VfID0gLTE7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0UGFyYW1ldGVyVmFsdWVzKFN0cmluZyBwYXJhbUtleSwgU3RyaW5nW10gcGFyYW1zKSB7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRQYXJhbWV0ZXJWYWx1ZXMoU3RyaW5nIHBhcmFtS2V5LCBWZWN0b3IgcGFyYW1zKSB7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nW10gZ2V0UGFyYW1ldGVyVmFsdWVzKFN0cmluZyBwYXJhbUtleSkgewotICAgIGlmIChvY2N1cmFuY2VfIDwgMCkKLSAgICAgIHJldHVybiBudWxsOwotICAgIGVsc2UgewotICAgICAgU3RyaW5nW10gcGFyYW1zID0gbmV3IFN0cmluZ1tvY2N1cmFuY2VfXTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIHBhcmFtc1tpXSA9ICIiOwotICAgICAgfQotICAgICAgcmV0dXJuIHBhcmFtczsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFBhcmFtZXRlclZhbHVlKFN0cmluZyBwYXJhbUtleSwgaW50IHBhcmFtSW5kZXgpIHsKLSAgICBpZiAocGFyYW1JbmRleCA+PSAwICYmIHBhcmFtSW5kZXggPCBvY2N1cmFuY2VfKQotICAgICAgcmV0dXJuICIiOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGVBbGxQYXJhbWV0ZXJWYWx1ZXMoKSB7Ci0gICAgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLSAgICBpbnQgbWluID0geHNkQ29uZmlnLmdldE1pbk9jY3VycygpOwotICAgIGludCBtYXggPSB4c2RDb25maWcuZ2V0TWF4T2NjdXJzKCk7Ci0gICAgcmV0dXJuIChvY2N1cmFuY2VfID49IDAgJiYgb2NjdXJhbmNlXyA+PSBtaW4gJiYgKG1heCA9PSBGcmFnbWVudENvbnN0YW50cy5VTkJPVU5ERUQgfHwgb2NjdXJhbmNlXyA8PSBtYXgpKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHZhbGlkYXRlUGFyYW1ldGVyVmFsdWVzKFN0cmluZyBwYXJhbUtleSkgewotICAgIHJldHVybiB2YWxpZGF0ZUFsbFBhcmFtZXRlclZhbHVlcygpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGVQYXJhbWV0ZXJWYWx1ZShTdHJpbmcgcGFyYW1LZXksIGludCBwYXJhbUluZGV4KSB7Ci0gICAgcmV0dXJuIHZhbGlkYXRlQWxsUGFyYW1ldGVyVmFsdWVzKCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBzZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMoRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzKSB7Ci0gICAgRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzQ29weSA9IGdldEluc3RhbmNlRG9jdW1lbnRzQnlUYWdOYW1lKGluc3RhbmNlRG9jdW1lbnRzLCBnZXROYW1lKCkpOwotICAgIGJvb2xlYW4gcGFyYW1zVmFsaWQgPSB0cnVlOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFuY2VEb2N1bWVudHNDb3B5Lmxlbmd0aDsgaSsrKSB7Ci0gICAgICBOb2RlTGlzdCBub2RlTGlzdCA9IGluc3RhbmNlRG9jdW1lbnRzQ29weVtpXS5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICBpZiAobm9kZUxpc3QuZ2V0TGVuZ3RoKCkgPiAxKQotICAgICAgICBwYXJhbXNWYWxpZCA9IGZhbHNlOwotICAgICAgZWxzZSBpZiAobm9kZUxpc3QuZ2V0TGVuZ3RoKCkgIT0gMCkgewotICAgICAgICBOb2RlIG5vZGUgPSBub2RlTGlzdC5pdGVtKDApOwotICAgICAgICBpZiAobm9kZS5nZXROb2RlVHlwZSgpICE9IE5vZGUuVEVYVF9OT0RFIHx8ICFpc1doaXRlc3BhY2Uobm9kZS5nZXROb2RlVmFsdWUoKSkpCi0gICAgICAgICAgcGFyYW1zVmFsaWQgPSBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgb2NjdXJhbmNlXyA9IGluc3RhbmNlRG9jdW1lbnRzQ29weS5sZW5ndGg7Ci0gICAgcmV0dXJuIHBhcmFtc1ZhbGlkICYmIHZhbGlkYXRlQWxsUGFyYW1ldGVyVmFsdWVzKCk7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gaXNXaGl0ZXNwYWNlKFN0cmluZyBzKSB7Ci0gICAgY2hhcltdIGNoYXJzID0gcy50b0NoYXJBcnJheSgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hhcnMubGVuZ3RoOyBpKyspIHsKLSAgICAgIGlmICghQ2hhcmFjdGVyLmlzV2hpdGVzcGFjZShjaGFyc1tpXSkgfHwgIUNoYXJhY3Rlci5pc1NwYWNlQ2hhcihjaGFyc1tpXSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEluZm9ybWF0aW9uRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0REZWZhdWx0SW5mb0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdyaXRlRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RFbXB0eVdGcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRSZWFkRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RFbXB0eVJGcmFnbWVudEpTUC5qc3AiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNERnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWIxOGE5OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDQxMyAgIDE3NjQ5MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFOiBNYWtlIG1lc3NhZ2UvdHJhbnNwb3J0IHN0YWNrIHBsdWdnYWJsZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLkZyYWdtZW50Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RGb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0ROYW1lZENvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBYU0RGcmFnbWVudCBleHRlbmRzIEZyYWdtZW50IGltcGxlbWVudHMgSVhTREZyYWdtZW50Ci17Ci0gIHByaXZhdGUgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnXzsKLSAgcHJpdmF0ZSBYU0RUeXBlRGVmaW5pdGlvbiB0eXBlRGVmXzsKLSAgcHJpdmF0ZSBpbnQgc2VlZF87Ci0KLSAgcHVibGljIFhTREZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZykKLSAgewotICAgIHN1cGVyKGlkLCBuYW1lKTsKLSAgICBjb25maWdfID0gY29uZmlnOwotICAgIGlmIChjb25maWdfICE9IG51bGwpCi0gICAgewotICAgICAgWFNEQ29tcG9uZW50IGNvbXBvbmVudCA9IGNvbmZpZy5nZXRYU0RDb21wb25lbnQoKTsKLSAgICAgIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBYU0RUeXBlRGVmaW5pdGlvbikKLSAgICAgICAgdHlwZURlZl8gPSAoWFNEVHlwZURlZmluaXRpb24pY29tcG9uZW50OwotICAgICAgZWxzZQotICAgICAgICB0eXBlRGVmXyA9IG51bGw7Ci0gICAgfQotICAgIHNlZWRfID0gMDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZykKLSAgewotICAgIGNvbmZpZ18gPSBjb25maWc7Ci0gICAgaWYgKGNvbmZpZ18gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBYU0RDb21wb25lbnQgY29tcG9uZW50ID0gY29uZmlnLmdldFhTRENvbXBvbmVudCgpOwotICAgICAgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIFhTRFR5cGVEZWZpbml0aW9uKQotICAgICAgICBzZXRYU0RUeXBlRGVmaW5pdGlvbigoWFNEVHlwZURlZmluaXRpb24pY29tcG9uZW50KTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIGNvbmZpZ187Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRYU0RUeXBlRGVmaW5pdGlvbihYU0RUeXBlRGVmaW5pdGlvbiB0eXBlRGVmKQotICB7Ci0gICAgdHlwZURlZl8gPSB0eXBlRGVmOwotICB9Ci0KLSAgcHVibGljIFhTRFR5cGVEZWZpbml0aW9uIGdldFhTRFR5cGVEZWZpbml0aW9uKCkKLSAgewotICAgIHJldHVybiB0eXBlRGVmXzsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHNldFBhcmFtZXRlclZhbHVlc0Zyb21JbnN0YW5jZURvY3VtZW50cyhFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMpCi0gIHsKLSAgICBFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHNDb3B5ID0gZ2V0SW5zdGFuY2VEb2N1bWVudHNCeVRhZ05hbWUoaW5zdGFuY2VEb2N1bWVudHMsIGdldE5hbWUoKSk7Ci0gICAgU3RyaW5nW10gcGFyYW1zID0gbmV3IFN0cmluZ1tpbnN0YW5jZURvY3VtZW50c0NvcHkubGVuZ3RoXTsKLSAgICBib29sZWFuIHBhcmFtc1ZhbGlkID0gaW50ZXJuYWxFcXVhbHMoaW5zdGFuY2VEb2N1bWVudHNDb3B5LCBpbnN0YW5jZURvY3VtZW50cyk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YW5jZURvY3VtZW50c0NvcHkubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgcGFyYW1zW2ldID0gIiI7Ci0gICAgICBOb2RlTGlzdCBub2RlTGlzdCA9IGluc3RhbmNlRG9jdW1lbnRzQ29weVtpXS5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICBpZiAobm9kZUxpc3QuZ2V0TGVuZ3RoKCkgPiAwKQotICAgICAgewotICAgICAgICBOb2RlIG5vZGUgPSBub2RlTGlzdC5pdGVtKDApOwotICAgICAgICBpZiAobm9kZUxpc3QuZ2V0TGVuZ3RoKCkgPiAxKQotICAgICAgICAgIHBhcmFtc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIGlmIChub2RlLmdldE5vZGVUeXBlKCkgIT0gTm9kZS5URVhUX05PREUpCi0gICAgICAgICAgcGFyYW1zVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHBhcmFtc1tpXSA9IG5vZGUuZ2V0Tm9kZVZhbHVlKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIHBhcmFtc1ZhbGlkID0gZmFsc2U7Ci0gICAgfQotICAgIHNldFBhcmFtZXRlclZhbHVlcyhnZXRJRCgpLCBwYXJhbXMpOwotICAgIHJldHVybiBwYXJhbXNWYWxpZCAmJiB2YWxpZGF0ZUFsbFBhcmFtZXRlclZhbHVlcygpOwotICB9Ci0KLSAgcHJvdGVjdGVkIEVsZW1lbnRbXSBnZXRJbnN0YW5jZURvY3VtZW50c0J5VGFnTmFtZShFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMsIFN0cmluZyB0YWdOYW1lKQotICB7Ci0gICAgaWYgKGluc3RhbmNlRG9jdW1lbnRzID09IG51bGwpCi0gICAgICByZXR1cm4gbmV3IEVsZW1lbnRbMF07Ci0gICAgVmVjdG9yIGluc3RhbmNlc0NvcHkgPSBuZXcgVmVjdG9yKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpZiAoaW5zdGFuY2VEb2N1bWVudHNbaV0gPT0gbnVsbCkKLSAgICAgICAgY29udGludWU7Ci0gICAgICBTdHJpbmcgaW5zdGFuY2VUYWdOYW1lID0gdHJpbVByZWZpeChpbnN0YW5jZURvY3VtZW50c1tpXS5nZXRUYWdOYW1lKCkpOwotICAgICAgaWYgKGluc3RhbmNlVGFnTmFtZS5lcXVhbHModGFnTmFtZSkpCi0gICAgICAgIGluc3RhbmNlc0NvcHkuYWRkKGluc3RhbmNlRG9jdW1lbnRzW2ldKTsKLSAgICB9Ci0gICAgRWxlbWVudFtdIGluc3RhbmNlcyA9IG5ldyBFbGVtZW50W2luc3RhbmNlc0NvcHkuc2l6ZSgpXTsKLSAgICBpbnN0YW5jZXNDb3B5LmNvcHlJbnRvKGluc3RhbmNlcyk7Ci0gICAgcmV0dXJuIGluc3RhbmNlczsKLSAgfQotCi0gIHByb3RlY3RlZCBTdHJpbmcgdHJpbVByZWZpeChTdHJpbmcgcykKLSAgewotICAgIFN0cmluZyBzQ29weSA9IG5ldyBTdHJpbmcocyk7Ci0gICAgaW50IGNvbG9uSW5kZXggPSBzQ29weS5pbmRleE9mKEZyYWdtZW50Q29uc3RhbnRzLkNPTE9OKTsKLSAgICBpZiAoY29sb25JbmRleCAhPSAtMSAmJiBjb2xvbkluZGV4ICsgMSA8IHNDb3B5Lmxlbmd0aCgpICYmICEoKFN0cmluZy52YWx1ZU9mKHNDb3B5LmNoYXJBdChjb2xvbkluZGV4ICsgMSkpKS5lcXVhbHMoRnJhZ21lbnRDb25zdGFudHMuQ09MT04pKSkKLSAgICAgIHNDb3B5ID0gc0NvcHkuc3Vic3RyaW5nKGNvbG9uSW5kZXggKyAxLCBzQ29weS5sZW5ndGgoKSk7Ci0gICAgcmV0dXJuIHNDb3B5OwotICB9Ci0KLSAgcHVibGljIEVsZW1lbnRbXSBnZW5JbnN0YW5jZURvY3VtZW50c0Zvck5pbChib29sZWFuIGdlblhTSVR5cGUsIEhhc2h0YWJsZSBuYW1lc3BhY2VUYWJsZSxEb2N1bWVudCBkb2MpewotICAJRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzID0gbmV3IEVsZW1lbnRbMV07Ci0gICAgU3RyaW5nIHRhZ05hbWUgPSBnZXRJbnN0YW5jZURvY3VtZW50VGFnTmFtZShuYW1lc3BhY2VUYWJsZSk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGluc3RhbmNlRG9jdW1lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIEVsZW1lbnQgaW5zdGFuY2VEb2N1bWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KHRhZ05hbWUpOwotICAgICAgICBpbnN0YW5jZURvY3VtZW50c1tpXSA9IGluc3RhbmNlRG9jdW1lbnQ7Ci0gICAgICB9Ci0gICAgcmV0dXJuIChnZW5YU0lUeXBlID8gYWRkWFNJVHlwZShpbnN0YW5jZURvY3VtZW50cywgbmFtZXNwYWNlVGFibGUpIDogaW5zdGFuY2VEb2N1bWVudHMpOwotICAJCi0gIH0KLSAgCi0gIHB1YmxpYyBFbGVtZW50W10gZ2VuSW5zdGFuY2VEb2N1bWVudHNGcm9tUGFyYW1ldGVyVmFsdWVzKGJvb2xlYW4gZ2VuWFNJVHlwZSwgSGFzaHRhYmxlIG5hbWVzcGFjZVRhYmxlLERvY3VtZW50IGRvYykgewotICAgIFN0cmluZ1tdIHBhcmFtcyA9IGdldFBhcmFtZXRlclZhbHVlcyhnZXRJRCgpKTsKLSAgICBpZiAocGFyYW1zID09IG51bGwpCi0gICAgICByZXR1cm4gbmV3IEVsZW1lbnRbMF07Ci0gICAgRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzID0gbmV3IEVsZW1lbnRbcGFyYW1zLmxlbmd0aF07Ci0gICAgU3RyaW5nIHRhZ05hbWUgPSBnZXRJbnN0YW5jZURvY3VtZW50VGFnTmFtZShuYW1lc3BhY2VUYWJsZSk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBFbGVtZW50IGluc3RhbmNlRG9jdW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTsKLSAgICAgIE5vZGUgdGV4dE5vZGUgPSBkb2MuY3JlYXRlVGV4dE5vZGUocGFyYW1zW2ldKTsKLSAgICAgIGluc3RhbmNlRG9jdW1lbnQuYXBwZW5kQ2hpbGQodGV4dE5vZGUpOwotICAgICAgaW5zdGFuY2VEb2N1bWVudHNbaV0gPSBpbnN0YW5jZURvY3VtZW50OwotICAgIH0KLSAgICByZXR1cm4gKGdlblhTSVR5cGUgPyBhZGRYU0lUeXBlKGluc3RhbmNlRG9jdW1lbnRzLCBuYW1lc3BhY2VUYWJsZSkgOiBpbnN0YW5jZURvY3VtZW50cyk7Ci0gIH0KLQotICBwdWJsaWMgRWxlbWVudCBzZXRBdHRyaWJ1dGVzT25JbnN0YW5jZURvY3VtZW50cyhFbGVtZW50IGluc3RhbmNlRG9jdW1lbnQsU3RyaW5nIGF0dE5hbWUpewotICAJU3RyaW5nW10gcGFyYW1zID0gZ2V0UGFyYW1ldGVyVmFsdWVzKGdldElEKCkpOwotICAgIGlmIChwYXJhbXMgPT0gbnVsbCkKLSAgICAgIHJldHVybiBpbnN0YW5jZURvY3VtZW50OwotICAgIGlmIChpc0F0dHJpYnV0ZUluc3RhbmNlTmFtZXNwYWNlUXVhbGlmaWVkKCkpewotICAgICAgaW5zdGFuY2VEb2N1bWVudC5zZXRBdHRyaWJ1dGVOUyhjb25maWdfLmdldFhTRENvbXBvbmVudCgpLmdldFNjaGVtYSgpLmdldFRhcmdldE5hbWVzcGFjZSgpLGF0dE5hbWUscGFyYW1zWzBdKTsKLSAgICAgIAotICAgIH0KLSAgICBlbHNlIGluc3RhbmNlRG9jdW1lbnQuc2V0QXR0cmlidXRlKGF0dE5hbWUscGFyYW1zWzBdKTsKLSAgICAKLSAgICByZXR1cm4gaW5zdGFuY2VEb2N1bWVudDsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gc2V0QXR0cmlidXRlUGFyYW1zRnJvbUluc3RhbmNlRG9jdW1lbnRzKE5vZGUgYXR0cmlidXRlKXsKLSAgCVN0cmluZ1tdIHBhcmFtcyA9IG5ldyBTdHJpbmdbMV07Ci0gIAlwYXJhbXNbMF0gPSBhdHRyaWJ1dGUuZ2V0Tm9kZVZhbHVlKCk7IAotICAJc2V0UGFyYW1ldGVyVmFsdWVzKGdldElEKCksIHBhcmFtcyk7Ci0gICAgcmV0dXJuIHZhbGlkYXRlQWxsUGFyYW1ldGVyVmFsdWVzKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2VuSUQoKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIG5ld0lEID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIG5ld0lELmFwcGVuZChnZXRJRCgpKTsKLSAgICBuZXdJRC5hcHBlbmQoRnJhZ21lbnRDb25zdGFudHMuSURfU0VQRVJBVE9SKTsKLSAgICBuZXdJRC5hcHBlbmQoc2VlZF8rKyk7Ci0gICAgcmV0dXJuIG5ld0lELnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc0luc3RhbmNlTmFtZXNwYWNlUXVhbGlmaWVkKCkKLSAgewotICAgIFhTRFNjaGVtYSB4c2RTY2hlbWEgPSBjb25maWdfLmdldFhTRENvbXBvbmVudCgpLmdldFNjaGVtYSgpOwotICAgIHJldHVybiAoIWNvbmZpZ18uZ2V0SXNXU0RMUGFydCgpICYmIGNvbmZpZ18uZ2V0UGFydEVuY29kaW5nKCkgPT0gRnJhZ21lbnRDb25zdGFudHMuRU5DT0RJTkdfTElURVJBTCAmJiB4c2RTY2hlbWEuZ2V0RWxlbWVudEZvcm1EZWZhdWx0KCkuZ2V0VmFsdWUoKSA9PSBYU0RGb3JtLlFVQUxJRklFRCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc0F0dHJpYnV0ZUluc3RhbmNlTmFtZXNwYWNlUXVhbGlmaWVkKCkgewotICAJWFNEU2NoZW1hIHhzZFNjaGVtYSA9IGNvbmZpZ18uZ2V0WFNEQ29tcG9uZW50KCkuZ2V0U2NoZW1hKCk7Ci0gICAgCi0gICAgcmV0dXJuICghY29uZmlnXy5nZXRJc1dTRExQYXJ0KCkgJiYKLSAgICAgICAgICAgICAgICBjb25maWdfLmdldFBhcnRFbmNvZGluZygpID09IEZyYWdtZW50Q29uc3RhbnRzLkVOQ09ESU5HX0xJVEVSQUwgJiYKLSAgICAgICAgICAgICAgICB4c2RTY2hlbWEuZ2V0QXR0cmlidXRlRm9ybURlZmF1bHQoKS5nZXRWYWx1ZSgpID09IFhTREZvcm0uUVVBTElGSUVEKTsKLQotICB9Ci0KLSAKLSAgCi0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0SW5zdGFuY2VEb2N1bWVudFRhZ05hbWUoSGFzaHRhYmxlIG5hbWVzcGFjZVRhYmxlKSB7Ci0gICAgU3RyaW5nQnVmZmVyIHRhZ05hbWUgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgaWYgKGlzSW5zdGFuY2VOYW1lc3BhY2VRdWFsaWZpZWQoKSkKLSAgICB7Ci0gICAgICBTdHJpbmcgbnNVUkkgPSBjb25maWdfLmdldFhTRENvbXBvbmVudCgpLmdldFNjaGVtYSgpLmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgICAgU3RyaW5nIHByZWZpeCA9IGdldFByZWZpeEZyb21OYW1lc3BhY2VVUkkobnNVUkksIG5hbWVzcGFjZVRhYmxlKTsKLSAgICAgIHRhZ05hbWUuYXBwZW5kKHByZWZpeCk7Ci0gICAgICB0YWdOYW1lLmFwcGVuZChGcmFnbWVudENvbnN0YW50cy5DT0xPTik7Ci0gICAgfQotICAgIHRhZ05hbWUuYXBwZW5kKGdldE5hbWUoKSk7Ci0gICAgcmV0dXJuIHRhZ05hbWUudG9TdHJpbmcoKTsKLSAgfQotCi0gIHByb3RlY3RlZCBFbGVtZW50W10gYWRkWFNJVHlwZShFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMsIEhhc2h0YWJsZSBuYW1lc3BhY2VUYWJsZSkKLSAgewotICAgIFhTRENvbXBvbmVudCB4c2RDb21wb25lbnQgPSBjb25maWdfLmdldFhTRENvbXBvbmVudCgpOwotICAgIGlmIChpbnN0YW5jZURvY3VtZW50cyAhPSBudWxsICYmICh4c2RDb21wb25lbnQgaW5zdGFuY2VvZiBYU0ROYW1lZENvbXBvbmVudCkpCi0gICAgewotICAgICAgU3RyaW5nIHhzZENvbXBvbmVudE5hbWUgPSAoKFhTRE5hbWVkQ29tcG9uZW50KXhzZENvbXBvbmVudCkuZ2V0TmFtZSgpOwotICAgICAgaWYgKHhzZENvbXBvbmVudE5hbWUgIT0gbnVsbCAmJiB4c2RDb21wb25lbnROYW1lLmxlbmd0aCgpID4gMCkKLSAgICAgIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgIGlmIChpbnN0YW5jZURvY3VtZW50c1tpXSA9PSBudWxsKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgU3RyaW5nIHhzaVVSSSA9IEZyYWdtZW50Q29uc3RhbnRzLlVSSV9YU0k7Ci0gICAgICAgICAgU3RyaW5nIHhzaVByZWZpeCA9IGdldFByZWZpeEZyb21OYW1lc3BhY2VVUkkoeHNpVVJJLCBuYW1lc3BhY2VUYWJsZSk7Ci0gICAgICAgICAgU3RyaW5nIHhzaVR5cGVVUkkgPSB4c2RDb21wb25lbnQuZ2V0U2NoZW1hKCkuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgICAgICAgU3RyaW5nIHhzaVR5cGVQcmVmaXggPSBnZXRQcmVmaXhGcm9tTmFtZXNwYWNlVVJJKHhzaVR5cGVVUkksIG5hbWVzcGFjZVRhYmxlKTsKLSAgICAgICAgICA7Ci0gICAgICAgICAgU3RyaW5nQnVmZmVyIGF0dHJOYW1lID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICAgIGF0dHJOYW1lLmFwcGVuZCh4c2lQcmVmaXgpOwotICAgICAgICAgIGF0dHJOYW1lLmFwcGVuZChGcmFnbWVudENvbnN0YW50cy5DT0xPTik7Ci0gICAgICAgICAgYXR0ck5hbWUuYXBwZW5kKEZyYWdtZW50Q29uc3RhbnRzLlhTSV9UWVBFKTsKLSAgICAgICAgICBTdHJpbmdCdWZmZXIgYXR0clZhbHVlID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICAgIGF0dHJWYWx1ZS5hcHBlbmQoeHNpVHlwZVByZWZpeCk7Ci0gICAgICAgICAgYXR0clZhbHVlLmFwcGVuZChGcmFnbWVudENvbnN0YW50cy5DT0xPTik7Ci0gICAgICAgICAgYXR0clZhbHVlLmFwcGVuZCh4c2RDb21wb25lbnROYW1lKTsKLSAgICAgICAgICBpbnN0YW5jZURvY3VtZW50c1tpXS5zZXRBdHRyaWJ1dGUoYXR0ck5hbWUudG9TdHJpbmcoKSwgYXR0clZhbHVlLnRvU3RyaW5nKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBpbnN0YW5jZURvY3VtZW50czsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHZhbGlkYXRlQWxsUGFyYW1ldGVyVmFsdWVzKCkKLSAgewotICAgIGlmICghc3VwZXIudmFsaWRhdGVBbGxQYXJhbWV0ZXJWYWx1ZXMoKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBTdHJpbmdbXSBwYXJhbXMgPSBnZXRQYXJhbWV0ZXJWYWx1ZXMoZ2V0SUQoKSk7Ci0gICAgaW50IGxlbmd0aCA9IChwYXJhbXMgIT0gbnVsbCkgPyBwYXJhbXMubGVuZ3RoIDogMDsKLSAgICBpbnQgbWluID0gY29uZmlnXy5nZXRNaW5PY2N1cnMoKTsKLSAgICBpbnQgbWF4ID0gY29uZmlnXy5nZXRNYXhPY2N1cnMoKTsKLSAgICByZXR1cm4gKGxlbmd0aCA+PSBtaW4gJiYgKG1heCA9PSBGcmFnbWVudENvbnN0YW50cy5VTkJPVU5ERUQgfHwgbGVuZ3RoIDw9IG1heCkpOwotICB9Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRQcmVmaXhGcm9tTmFtZXNwYWNlVVJJKFN0cmluZyBuc1VSSSwgSGFzaHRhYmxlIG5hbWVzcGFjZVRhYmxlKQotICB7Ci0gICAgU3RyaW5nIHByZWZpeCA9IChTdHJpbmcpbmFtZXNwYWNlVGFibGUuZ2V0KG5zVVJJKTsKLSAgICBpbnQgaSA9IDA7Ci0gICAgd2hpbGUgKHByZWZpeCA9PSBudWxsIHx8IHByZWZpeC5sZW5ndGgoKSA8PSAwKQotICAgIHsKLSAgICAgIFN0cmluZ0J1ZmZlciBwcmVmaXhDb3B5ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgcHJlZml4Q29weS5hcHBlbmQoRnJhZ21lbnRDb25zdGFudHMuUU5BTUVfUFJFRklYKTsKLSAgICAgIHByZWZpeENvcHkuYXBwZW5kKFN0cmluZy52YWx1ZU9mKGkpKTsKLSAgICAgIGkrKzsKLSAgICAgIGlmICghbmFtZXNwYWNlVGFibGUuY29udGFpbnMocHJlZml4Q29weS50b1N0cmluZygpKSkKLSAgICAgIHsKLSAgICAgICAgbmFtZXNwYWNlVGFibGUucHV0KG5zVVJJLCBwcmVmaXhDb3B5LnRvU3RyaW5nKCkpOwotICAgICAgICBwcmVmaXggPSBwcmVmaXhDb3B5LnRvU3RyaW5nKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBwcmVmaXg7Ci0gIH0KLQotICBwcm90ZWN0ZWQgRWxlbWVudCBzZXRFbGVtZW50VGFnTmFtZShFbGVtZW50IGUsIFN0cmluZyB0YWdOYW1lKQotICB7Ci0gICAgaWYgKCFlLmdldFRhZ05hbWUoKS5lcXVhbHModGFnTmFtZSkpCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIERvY3VtZW50IGRvYyA9IGUuZ2V0T3duZXJEb2N1bWVudCgpOwotICAgICAgICBOb2RlTGlzdCBjaGlsZHJlbiA9IGUuZ2V0Q2hpbGROb2RlcygpOwotICAgICAgICBOYW1lZE5vZGVNYXAgYXR0cmlidXRlcyA9IGUuZ2V0QXR0cmlidXRlcygpOwotICAgICAgICBFbGVtZW50IGVDb3B5ID0gZG9jLmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRyZW4uZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICAgICAgewotICAgICAgICAgIE5vZGUgY2hpbGQgPSBjaGlsZHJlbi5pdGVtKGkpOwotICAgICAgICAgIGlmIChjaGlsZCAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgCSAgZUNvcHkuYXBwZW5kQ2hpbGQoY2hpbGQuY2xvbmVOb2RlKHRydWUpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBhdHRyaWJ1dGVzLmdldExlbmd0aCgpOyBqKyspCi0gICAgICAgIHsKLSAgICAgICAgICBOb2RlIGF0dHIgPSBhdHRyaWJ1dGVzLml0ZW0oaik7Ci0gICAgICAgICAgaWYgKGF0dHIgIT0gbnVsbCAmJiAoYXR0ciBpbnN0YW5jZW9mIEF0dHIpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIEF0dHIgYXR0cmlidXRlID0gKEF0dHIpYXR0cjsKLSAgICAgICAgICAgIGVDb3B5LnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUuZ2V0TmFtZSgpLCBhdHRyaWJ1dGUuZ2V0VmFsdWUoKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBlQ29weTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKQotICAgICAgewotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZTsKLSAgfQotCi0gIHByb3RlY3RlZCBFbGVtZW50W10gc2V0RWxlbWVudHNUYWdOYW1lKEVsZW1lbnRbXSBlLCBTdHJpbmcgdGFnTmFtZSkKLSAgewotICAgIEVsZW1lbnRbXSBlQ29weSA9IG5ldyBFbGVtZW50W2UubGVuZ3RoXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGVDb3B5Lmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGVDb3B5W2ldID0gc2V0RWxlbWVudFRhZ05hbWUoZVtpXSwgdGFnTmFtZSk7Ci0gICAgfQotICAgIHJldHVybiBlQ29weTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIGludGVybmFsRXF1YWxzKEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50c0NvcHksIEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cykKLSAgewotICAgIGlmICghY29uZmlnXy5nZXRJc1dTRExQYXJ0KCkpCi0gICAgewotICAgICAgaW50IGxlbmd0aCA9IChpbnN0YW5jZURvY3VtZW50cyAhPSBudWxsKSA/IGluc3RhbmNlRG9jdW1lbnRzLmxlbmd0aCA6IDA7Ci0gICAgICBpbnQgbGVuZ3RoQ29weSA9IChpbnN0YW5jZURvY3VtZW50c0NvcHkgIT0gbnVsbCkgPyBpbnN0YW5jZURvY3VtZW50c0NvcHkubGVuZ3RoIDogMDsKLSAgICAgIHJldHVybiAobGVuZ3RoID09IGxlbmd0aENvcHkpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNER3JvdXBBbGxGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNER3JvdXBBbGxGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NmRkODk2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTREdyb3VwQWxsRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbDsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSVhTREZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RHcm91cEFsbEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RNb2RlbEdyb3VwOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBYU0RHcm91cEFsbEZyYWdtZW50IGV4dGVuZHMgWFNER3JvdXBGcmFnbWVudCBpbXBsZW1lbnRzIElYU0RHcm91cEFsbEZyYWdtZW50IHsKLSAgcHJpdmF0ZSBTdHJpbmcgZ3JvdXBJRF87Ci0KLSAgcHVibGljIFhTREdyb3VwQWxsRnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBjb250cm9sbGVyLCBYU0RNb2RlbEdyb3VwIHhzZE1vZGVsR3JvdXApIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnLCBjb250cm9sbGVyLCB4c2RNb2RlbEdyb3VwKTsKLSAgICBncm91cElEXyA9IG51bGw7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzUGFyYW1ldGVyVmFsdWVzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uIHsKLSAgICBTdHJpbmcgZ3JvdXBJRCA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoZ2V0SUQoKSk7Ci0gICAgaWYgKGdyb3VwSURfICE9IG51bGwgJiYgZ3JvdXBJRCAhPSBudWxsICYmIGdyb3VwSURfLmVxdWFscyhncm91cElEKSkgewotICAgICAgc2V0R3JvdXBNZW1iZXJJRHNPcmRlcmluZyhwYXJzZXIuZ2V0UGFyYW1ldGVyVmFsdWVzKGdyb3VwSURfKSk7Ci0gICAgICBib29sZWFuIHZhbHVlc1ZhbGlkID0gdHJ1ZTsKLSAgICAgIElYU0RGcmFnbWVudFtdIGdyb3VwTWVtYmVyRnJhZ21lbnRzID0gZ2V0R3JvdXBNZW1iZXJGcmFnbWVudHMoZ3JvdXBJRF8pOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBncm91cE1lbWJlckZyYWdtZW50cy5sZW5ndGg7IGkrKykgewotICAgICAgICBpZiAoZ3JvdXBNZW1iZXJGcmFnbWVudHNbaV0gIT0gbnVsbCAmJiAhZ3JvdXBNZW1iZXJGcmFnbWVudHNbaV0ucHJvY2Vzc1BhcmFtZXRlclZhbHVlcyhwYXJzZXIpKQotICAgICAgICAgIHZhbHVlc1ZhbGlkID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdmFsdWVzVmFsaWQ7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgZ3JvdXBJRF8gPSBudWxsOwotICAgICAgcmVtb3ZlR3JvdXBJRHMoKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHNldFBhcmFtZXRlclZhbHVlc0Zyb21JbnN0YW5jZURvY3VtZW50cyhFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMpIHsKLSAgICByZW1vdmVHcm91cElEcygpOwotICAgIGJvb2xlYW4gcGFyYW1zVmFsaWQgPSB0cnVlOwotICAgIGlmIChpbnN0YW5jZURvY3VtZW50cyAhPSBudWxsICYmIGluc3RhbmNlRG9jdW1lbnRzLmxlbmd0aCA+IDApIHsKLSAgICAgIGdyb3VwSURfID0gY3JlYXRlSW5zdGFuY2UoKTsKLSAgICAgIElYU0RGcmFnbWVudFtdIGdyb3VwTWVtYmVyRnJhZ3MgPSBnZXRHcm91cE1lbWJlckZyYWdtZW50cyhncm91cElEXyk7Ci0gICAgICBTdHJpbmdbXSBncm91cE1lbWJlcklEc09yZGVyID0gbmV3IFN0cmluZ1tncm91cE1lbWJlckZyYWdzLmxlbmd0aF07Ci0gICAgICBpbnQgb3JkZXJJbmRleCA9IDA7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGluc3RhbmNlRG9jdW1lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIGJvb2xlYW4gcGFyYW1zQXNzaWduZWQgPSBmYWxzZTsKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBncm91cE1lbWJlckZyYWdzLmxlbmd0aDsgaisrKSB7Ci0gICAgICAgICAgaWYgKGdyb3VwTWVtYmVyRnJhZ3Nbal0gIT0gbnVsbCAmJiBncm91cE1lbWJlckZyYWdzW2pdLmdldE5hbWUoKS5lcXVhbHModHJpbVByZWZpeChpbnN0YW5jZURvY3VtZW50c1tpXS5nZXRUYWdOYW1lKCkpKSkgewotICAgICAgICAgICAgRWxlbWVudFtdIGNoaWxkSW5zdGFuY2UgPSB7aW5zdGFuY2VEb2N1bWVudHNbaV19OwotICAgICAgICAgICAgaWYgKCFncm91cE1lbWJlckZyYWdzW2pdLnNldFBhcmFtZXRlclZhbHVlc0Zyb21JbnN0YW5jZURvY3VtZW50cyhjaGlsZEluc3RhbmNlKSkKLSAgICAgICAgICAgICAgcGFyYW1zVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGdyb3VwTWVtYmVySURzT3JkZXJbb3JkZXJJbmRleF0gPSBncm91cE1lbWJlckZyYWdzW2pdLmdldElEKCk7Ci0gICAgICAgICAgICBvcmRlckluZGV4Kys7Ci0gICAgICAgICAgICBwYXJhbXNBc3NpZ25lZCA9IHRydWU7Ci0gICAgICAgICAgICBncm91cE1lbWJlckZyYWdzW2pdID0gbnVsbDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoIXBhcmFtc0Fzc2lnbmVkKQotICAgICAgICAgIHBhcmFtc1ZhbGlkID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBmb3IgKGludCBrID0gMDsgayA8IGdyb3VwTWVtYmVyRnJhZ3MubGVuZ3RoOyBrKyspIHsKLSAgICAgICAgaWYgKGdyb3VwTWVtYmVyRnJhZ3Nba10gIT0gbnVsbCkgewotICAgICAgICAgIGdyb3VwTWVtYmVySURzT3JkZXJbb3JkZXJJbmRleF0gPSBncm91cE1lbWJlckZyYWdzW2tdLmdldElEKCk7Ci0gICAgICAgICAgb3JkZXJJbmRleCsrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBzZXRHcm91cE1lbWJlcklEc09yZGVyaW5nKGdyb3VwTWVtYmVySURzT3JkZXIpOwotICAgIH0KLSAgICByZXR1cm4gcGFyYW1zVmFsaWQ7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEdyb3VwQWxsSW5zdGFuY2UoKSB7Ci0gICAgaWYgKGdyb3VwSURfID09IG51bGwpCi0gICAgICBncm91cElEXyA9IGNyZWF0ZUdyb3VwSW5zdGFuY2UoKTsKLSAgICByZXR1cm4gZ3JvdXBJRF87Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGNyZWF0ZUluc3RhbmNlKCkgewotICAgIHJldHVybiBnZXRHcm91cEFsbEluc3RhbmNlKCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBzZXRHcm91cE1lbWJlcklEc09yZGVyaW5nKFN0cmluZ1tdIGdyb3VwTWVtYmVySURzKSB7Ci0gICAgaWYgKGdyb3VwTWVtYmVySURzID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgU3RyaW5nW10gZXhpc3RpbmdHcm91cE1lbWJlcklEcyA9IGdldEdyb3VwTWVtYmVySURzKGdyb3VwSURfKTsKLSAgICBpZiAoZXhpc3RpbmdHcm91cE1lbWJlcklEcy5sZW5ndGggIT0gZ3JvdXBNZW1iZXJJRHMubGVuZ3RoKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFZlY3RvciBleGlzdGluZ0dyb3VwTWVtYmVySURzVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZXhpc3RpbmdHcm91cE1lbWJlcklEcy5sZW5ndGg7IGkrKykgewotICAgICAgZXhpc3RpbmdHcm91cE1lbWJlcklEc1ZlY3Rvci5hZGQoZXhpc3RpbmdHcm91cE1lbWJlcklEc1tpXSk7Ci0gICAgfQotICAgIGZvciAoaW50IGogPSAwOyBqIDwgZ3JvdXBNZW1iZXJJRHMubGVuZ3RoOyBqKyspIHsKLSAgICAgIGlmICghZXhpc3RpbmdHcm91cE1lbWJlcklEc1ZlY3Rvci5yZW1vdmUoZ3JvdXBNZW1iZXJJRHNbal0pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmIChzZXRGcmFnbWVudHNPcmRlcihncm91cE1lbWJlcklEcykpIHsKLSAgICAgIHNldEdyb3VwTWVtYmVySURzKGdyb3VwSURfLCBncm91cE1lbWJlcklEcyk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gbW92ZVVwR3JvdXBNZW1iZXJJRChTdHJpbmcgZ3JvdXBNZW1iZXJJRCkgewotICAgIFN0cmluZ1tdIGdyb3VwTWVtYmVySURzID0gZ2V0R3JvdXBNZW1iZXJJRHMoZ3JvdXBJRF8pOwotICAgIGlmIChncm91cE1lbWJlcklELmVxdWFscyhncm91cE1lbWJlcklEc1swXSkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZm9yIChpbnQgaSA9IDE7IGkgPCBncm91cE1lbWJlcklEcy5sZW5ndGg7IGkrKykgewotICAgICAgaWYgKGdyb3VwTWVtYmVySUQuZXF1YWxzKGdyb3VwTWVtYmVySURzW2ldKSkgewotICAgICAgICBncm91cE1lbWJlcklEc1tpXSA9IGdyb3VwTWVtYmVySURzW2kgLSAxXTsKLSAgICAgICAgZ3JvdXBNZW1iZXJJRHNbaSAtIDFdID0gZ3JvdXBNZW1iZXJJRDsKLSAgICAgICAgaWYgKHNldEZyYWdtZW50c09yZGVyKGdyb3VwTWVtYmVySURzKSkgewotICAgICAgICAgIHNldEdyb3VwTWVtYmVySURzKGdyb3VwSURfLCBncm91cE1lbWJlcklEcyk7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gbW92ZURvd25Hcm91cE1lbWJlcklEKFN0cmluZyBncm91cE1lbWJlcklEKSB7Ci0gICAgU3RyaW5nW10gZ3JvdXBNZW1iZXJJRHMgPSBnZXRHcm91cE1lbWJlcklEcyhncm91cElEXyk7Ci0gICAgaWYgKGdyb3VwTWVtYmVySUQuZXF1YWxzKGdyb3VwTWVtYmVySURzW2dyb3VwTWVtYmVySURzLmxlbmd0aCAtIDFdKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGdyb3VwTWVtYmVySURzLmxlbmd0aCAtIDE7IGkrKykgewotICAgICAgaWYgKGdyb3VwTWVtYmVySUQuZXF1YWxzKGdyb3VwTWVtYmVySURzW2ldKSkgewotICAgICAgICBncm91cE1lbWJlcklEc1tpXSA9IGdyb3VwTWVtYmVySURzW2kgKyAxXTsKLSAgICAgICAgZ3JvdXBNZW1iZXJJRHNbaSArIDFdID0gZ3JvdXBNZW1iZXJJRDsKLSAgICAgICAgaWYgKHNldEZyYWdtZW50c09yZGVyKGdyb3VwTWVtYmVySURzKSkgewotICAgICAgICAgIHNldEdyb3VwTWVtYmVySURzKGdyb3VwSURfLCBncm91cE1lbWJlcklEcyk7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRJbmZvcm1hdGlvbkZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNERGVmYXVsdEluZm9GcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRSZWFkRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RHcm91cFJGcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXcml0ZUZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBBbGxXRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNER3JvdXBDaG9pY2VGaXhGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNER3JvdXBDaG9pY2VGaXhGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzI0ZTMwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTREdyb3VwQ2hvaWNlRml4RnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE1vZGVsR3JvdXA7Ci0KLXB1YmxpYyBjbGFzcyBYU0RHcm91cENob2ljZUZpeEZyYWdtZW50IGV4dGVuZHMgWFNER3JvdXBDaG9pY2VGcmFnbWVudCB7Ci0gIHB1YmxpYyBYU0RHcm91cENob2ljZUZpeEZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgY29udHJvbGxlciwgWFNETW9kZWxHcm91cCB4c2RNb2RlbEdyb3VwKSB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZywgY29udHJvbGxlciwgeHNkTW9kZWxHcm91cCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEluZm9ybWF0aW9uRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0REZWZhdWx0SW5mb0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFJlYWRGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTREdyb3VwQ2hvaWNlUkZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdyaXRlRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RHcm91cENob2ljZUZpeFdGcmFnbWVudEpTUC5qc3AiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RHcm91cENob2ljZUZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RHcm91cENob2ljZUZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzYWRmMDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNER3JvdXBDaG9pY2VGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuRnJhZ21lbnRDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSVhTREZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RHcm91cENob2ljZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RNb2RlbEdyb3VwOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RQYXJ0aWNsZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgWFNER3JvdXBDaG9pY2VGcmFnbWVudCBleHRlbmRzIFhTREdyb3VwRnJhZ21lbnQgaW1wbGVtZW50cyBJWFNER3JvdXBDaG9pY2VGcmFnbWVudCB7Ci0gIHByaXZhdGUgWFNEUGFydGljbGVbXSBjaG9pY2VzXzsKLSAgcHJpdmF0ZSBIYXNodGFibGUgY2hvaWNlSW5kZXhlc187Ci0KLSAgcHVibGljIFhTREdyb3VwQ2hvaWNlRnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBjb250cm9sbGVyLCBYU0RNb2RlbEdyb3VwIHhzZE1vZGVsR3JvdXApIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnLCBjb250cm9sbGVyLCB4c2RNb2RlbEdyb3VwKTsKLSAgICBjaG9pY2VzXyA9IG51bGw7Ci0gICAgY2hvaWNlSW5kZXhlc18gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzUGFyYW1ldGVyVmFsdWVzKE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlcikgdGhyb3dzIE11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uIHsKLSAgICBzdXBlci5wcm9jZXNzUGFyYW1ldGVyVmFsdWVzKHBhcnNlcik7Ci0gICAgU3RyaW5nW10gZ3JvdXBJRHMgPSBnZXRHcm91cElEcygpOwotICAgIGNob2ljZUluZGV4ZXNfLmNsZWFyKCk7Ci0gICAgYm9vbGVhbiBwYXJhbXNWYWxpZCA9IHRydWU7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBncm91cElEcy5sZW5ndGg7IGkrKykgewotICAgICAgU3RyaW5nIHNlbGVjdGVkQ2hvaWNlRnJhZ0lEID0gcGFyc2VyLmdldFBhcmFtZXRlcihncm91cElEc1tpXSk7Ci0gICAgICBpbnQgY2hvaWNlSW5kZXggPSAwOwotICAgICAgSVhTREZyYWdtZW50W10gY2hvaWNlRnJhZ3MgPSBnZXRHcm91cE1lbWJlckZyYWdtZW50cyhncm91cElEc1tpXSk7Ci0gICAgICBmb3IgKGludCBqID0gMDsgaiA8IGNob2ljZUZyYWdzLmxlbmd0aDsgaisrKSB7Ci0gICAgICAgIGlmIChjaG9pY2VGcmFnc1tqXS5nZXRJRCgpLmVxdWFscyhzZWxlY3RlZENob2ljZUZyYWdJRCkpIHsKLSAgICAgICAgICBjaG9pY2VJbmRleCA9IGo7Ci0gICAgICAgICAgcGFyYW1zVmFsaWQgPSAocGFyYW1zVmFsaWQgJiYgY2hvaWNlRnJhZ3Nbal0udmFsaWRhdGVBbGxQYXJhbWV0ZXJWYWx1ZXMoKSk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHNldENob2ljZUluZGV4KGdyb3VwSURzW2ldLCBjaG9pY2VJbmRleCk7Ci0gICAgfQotICAgIHJldHVybiBwYXJhbXNWYWxpZDsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHNldFBhcmFtZXRlclZhbHVlc0Zyb21JbnN0YW5jZURvY3VtZW50cyhFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMpIHsKLSAgICByZW1vdmVHcm91cElEcygpOwotICAgIGNob2ljZUluZGV4ZXNfLmNsZWFyKCk7Ci0gICAgYm9vbGVhbiBwYXJhbXNWYWxpZCA9IHRydWU7Ci0gICAgaWYgKGluc3RhbmNlRG9jdW1lbnRzICE9IG51bGwpIHsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFuY2VEb2N1bWVudHMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgU3RyaW5nIGdyb3VwSUQgPSBjcmVhdGVHcm91cENob2ljZUluc3RhbmNlKDApOwotICAgICAgICBJWFNERnJhZ21lbnRbXSBjaG9pY2VGcmFncyA9IGdldEdyb3VwTWVtYmVyRnJhZ21lbnRzKGdyb3VwSUQpOwotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGNob2ljZUZyYWdzLmxlbmd0aDsgaisrKSB7Ci0gICAgICAgICAgaWYgKGNob2ljZUZyYWdzW2pdLmdldE5hbWUoKS5lcXVhbHModHJpbVByZWZpeChpbnN0YW5jZURvY3VtZW50c1tpXS5nZXRUYWdOYW1lKCkpKSkgewotICAgICAgICAgICAgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gY2hvaWNlRnJhZ3Nbal0uZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLSAgICAgICAgICAgIEVsZW1lbnRbXSBjaGlsZEluc3RhbmNlcyA9IGdldEluc3RhbmNlRG9jdW1lbnRQYXJ0aXRpb24oaW5zdGFuY2VEb2N1bWVudHMsIGksIHhzZENvbmZpZy5nZXRNaW5PY2N1cnMoKSwgeHNkQ29uZmlnLmdldE1heE9jY3VycygpKTsKLSAgICAgICAgICAgIGlmICghY2hvaWNlRnJhZ3Nbal0uc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKGNoaWxkSW5zdGFuY2VzKSkKLSAgICAgICAgICAgICAgcGFyYW1zVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIHNldENob2ljZUluZGV4KGdyb3VwSUQsIGopOwotICAgICAgICAgICAgaWYgKGNoaWxkSW5zdGFuY2VzLmxlbmd0aCA+IDApCi0gICAgICAgICAgICAgIGkgPSBpICsgY2hpbGRJbnN0YW5jZXMubGVuZ3RoIC0gMTsgLy8gbWludXMgMSBiZWNhdXNlIHRoZXJlJ3MgYW4gaSsrIGluIHRoZSBvdXRlciBmb3IgbG9vcAotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBwYXJhbXNWYWxpZDsKLSAgfQotCi0gIHByaXZhdGUgRWxlbWVudFtdIGdldEluc3RhbmNlRG9jdW1lbnRQYXJ0aXRpb24oRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzLCBpbnQgc3RhcnQsIGludCBtaW5TaXplLCBpbnQgbWF4U2l6ZSkgewotICAgIFN0cmluZyB0YWdOYW1lID0gaW5zdGFuY2VEb2N1bWVudHNbc3RhcnRdLmdldFRhZ05hbWUoKTsKLSAgICBpbnQgc2l6ZSA9IDE7Ci0gICAgZm9yIChpbnQgaSA9IHN0YXJ0ICsgMTsgaSA8IGluc3RhbmNlRG9jdW1lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBpZiAoaW5zdGFuY2VEb2N1bWVudHNbaV0uZ2V0VGFnTmFtZSgpLmVxdWFscyh0YWdOYW1lKSkKLSAgICAgICAgc2l6ZSsrOwotICAgICAgZWxzZQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgaWYgKG1heFNpemUgIT0gRnJhZ21lbnRDb25zdGFudHMuVU5CT1VOREVEICYmIHNpemUgPiBtYXhTaXplKSB7Ci0gICAgICBzaXplID0gc2l6ZSAtIG1pblNpemU7Ci0gICAgICBpZiAoc2l6ZSA+IG1heFNpemUpCi0gICAgICAgIHNpemUgPSBtYXhTaXplOwotICAgIH0KLSAgICBFbGVtZW50W10gc3Vic2V0ID0gbmV3IEVsZW1lbnRbc2l6ZV07Ci0gICAgZm9yIChpbnQgaiA9IDA7IGogPCBzdWJzZXQubGVuZ3RoOyBqKyspIHsKLSAgICAgIHN1YnNldFtqXSA9IGluc3RhbmNlRG9jdW1lbnRzW3N0YXJ0ICsgal07Ci0gICAgfQotICAgIHJldHVybiBzdWJzZXQ7Ci0gIH0KLQotICBwdWJsaWMgRWxlbWVudFtdIGdlbkluc3RhbmNlRG9jdW1lbnRzRnJvbVBhcmFtZXRlclZhbHVlcyhib29sZWFuIGdlblhTSVR5cGUsIEhhc2h0YWJsZSBuYW1lc3BhY2VUYWJsZSwgRG9jdW1lbnQgZG9jKSB7Ci0gICAgVmVjdG9yIGluc3RhbmNlRG9jdW1lbnRzQ29weSA9IG5ldyBWZWN0b3IoKTsKLSAgICBTdHJpbmdbXSBncm91cElEcyA9IGdldEdyb3VwSURzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBncm91cElEcy5sZW5ndGg7IGkrKykgewotICAgICAgSVhTREZyYWdtZW50W10gY2hvaWNlRnJhZ3MgPSBnZXRHcm91cE1lbWJlckZyYWdtZW50cyhncm91cElEc1tpXSk7Ci0gICAgICBpbnQgY2hvaWNlSW5kZXggPSBnZXRDaG9pY2VJbmRleChncm91cElEc1tpXSk7Ci0gICAgICBFbGVtZW50W10gY2hvaWNlRnJhZ0luc3RhbmNlcyA9IGNob2ljZUZyYWdzW2Nob2ljZUluZGV4XS5nZW5JbnN0YW5jZURvY3VtZW50c0Zyb21QYXJhbWV0ZXJWYWx1ZXMoZ2VuWFNJVHlwZSwgbmFtZXNwYWNlVGFibGUsIGRvYyk7Ci0gICAgICBmb3IgKGludCBqID0gMDsgaiA8IGNob2ljZUZyYWdJbnN0YW5jZXMubGVuZ3RoOyBqKyspIHsKLSAgICAgICAgaW5zdGFuY2VEb2N1bWVudHNDb3B5LmFkZChjaG9pY2VGcmFnSW5zdGFuY2VzW2pdKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzID0gbmV3IEVsZW1lbnRbaW5zdGFuY2VEb2N1bWVudHNDb3B5LnNpemUoKV07Ci0gICAgaW5zdGFuY2VEb2N1bWVudHNDb3B5LmNvcHlJbnRvKGluc3RhbmNlRG9jdW1lbnRzKTsKLSAgICByZXR1cm4gaW5zdGFuY2VEb2N1bWVudHM7Ci0gIH0KLQotICBwdWJsaWMgWFNEUGFydGljbGVbXSBnZXRDaG9pY2VzKCkgewotICAgIGlmIChjaG9pY2VzXyA9PSBudWxsKSB7Ci0gICAgICBFTGlzdCBwYXJ0aWNsZXMgPSBnZXRYU0RNb2RlbEdyb3VwKCkuZ2V0UGFydGljbGVzKCk7Ci0gICAgICBjaG9pY2VzXyA9IG5ldyBYU0RQYXJ0aWNsZVtwYXJ0aWNsZXMuc2l6ZSgpXTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hvaWNlc18ubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgY2hvaWNlc19baV0gPSAoWFNEUGFydGljbGUpcGFydGljbGVzLmdldChpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGNob2ljZXNfOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBjcmVhdGVHcm91cENob2ljZUluc3RhbmNlKGludCBjaG9pY2VJbmRleCkgewotICAgIGdldENob2ljZXMoKTsKLSAgICBpZiAoY2hvaWNlSW5kZXggPCAwIHx8IGNob2ljZUluZGV4ID4gY2hvaWNlc18ubGVuZ3RoIC0gMSkKLSAgICAgIHJldHVybiBudWxsOwotICAgIFN0cmluZyBncm91cElEID0gY3JlYXRlR3JvdXBJbnN0YW5jZSgpOwotICAgIHNldENob2ljZUluZGV4KGdyb3VwSUQsIGNob2ljZUluZGV4KTsKLSAgICByZXR1cm4gZ3JvdXBJRDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgY3JlYXRlSW5zdGFuY2UoKSB7Ci0gICAgcmV0dXJuIGNyZWF0ZUdyb3VwQ2hvaWNlSW5zdGFuY2UoMCk7Ci0gIH0KLQotICBwdWJsaWMgaW50IGdldENob2ljZUluZGV4KFN0cmluZyBncm91cElEKSB7Ci0gICAgSW50ZWdlciBpbmRleCA9IChJbnRlZ2VyKWNob2ljZUluZGV4ZXNfLmdldChncm91cElEKTsKLSAgICBpZiAoaW5kZXggIT0gbnVsbCkKLSAgICAgIHJldHVybiBpbmRleC5pbnRWYWx1ZSgpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiAwOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0Q2hvaWNlSW5kZXgoU3RyaW5nIGdyb3VwSUQsIGludCBjaG9pY2VJbmRleCkgewotICAgIGNob2ljZUluZGV4ZXNfLnB1dChncm91cElELCBuZXcgSW50ZWdlcihjaG9pY2VJbmRleCkpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGVBbGxQYXJhbWV0ZXJWYWx1ZXMoKQotICB7Ci0gICAgU3RyaW5nW10gZ3JvdXBJRHMgPSBnZXRHcm91cElEcygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZ3JvdXBJRHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgaW50IHNlbGVjdGlvbkluZGV4ID0gZ2V0Q2hvaWNlSW5kZXgoZ3JvdXBJRHNbaV0pOwotICAgICAgaWYgKCFnZXRHcm91cE1lbWJlckZyYWdtZW50cyhncm91cElEc1tpXSlbc2VsZWN0aW9uSW5kZXhdLnZhbGlkYXRlQWxsUGFyYW1ldGVyVmFsdWVzKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTREdyb3VwQ2hvaWNlUmFuZ2VGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNER3JvdXBDaG9pY2VSYW5nZUZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0MGUxNGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNER3JvdXBDaG9pY2VSYW5nZUZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RNb2RlbEdyb3VwOwotCi1wdWJsaWMgY2xhc3MgWFNER3JvdXBDaG9pY2VSYW5nZUZyYWdtZW50IGV4dGVuZHMgWFNER3JvdXBDaG9pY2VGcmFnbWVudCB7Ci0gIHB1YmxpYyBYU0RHcm91cENob2ljZVJhbmdlRnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBjb250cm9sbGVyLCBYU0RNb2RlbEdyb3VwIHhzZE1vZGVsR3JvdXApIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnLCBjb250cm9sbGVyLCB4c2RNb2RlbEdyb3VwKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5mb3JtYXRpb25GcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRERlZmF1bHRJbmZvRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVhZEZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBDaG9pY2VSRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3JpdGVGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTREdyb3VwQ2hvaWNlUmFuZ2VXRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNER3JvdXBGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNER3JvdXBGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZGE0MTMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTREdyb3VwRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbDsKLQotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuRnJhZ21lbnRDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSVhTREZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RHcm91cEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE1vZGVsR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFBhcnRpY2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RQYXJ0aWNsZUNvbnRlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFdpbGRjYXJkOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBYU0RHcm91cEZyYWdtZW50IGV4dGVuZHMgWFNETWFwRnJhZ21lbnQgaW1wbGVtZW50cyBJWFNER3JvdXBGcmFnbWVudCB7Ci0gIHByaXZhdGUgWFNETW9kZWxHcm91cCB4c2RNb2RlbEdyb3VwXzsKLSAgcHJpdmF0ZSBWZWN0b3IgZ3JvdXBJRHNPcmRlcl87Ci0gIHByaXZhdGUgSGFzaHRhYmxlIGdyb3VwSURzXzsKLSAgCi0gIHB1YmxpYyBYU0RHcm91cEZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgY29udHJvbGxlciwgWFNETW9kZWxHcm91cCB4c2RNb2RlbEdyb3VwKSB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZywgY29udHJvbGxlcik7Ci0gICAgeHNkTW9kZWxHcm91cF8gPSB4c2RNb2RlbEdyb3VwOwotICAgIGdyb3VwSURzT3JkZXJfID0gbmV3IFZlY3RvcigpOwotICAgIGdyb3VwSURzXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHByb2Nlc3NQYXJhbWV0ZXJWYWx1ZXMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24gewotICAgIGJvb2xlYW4gdmFsdWVzVmFsaWQgPSB0cnVlOwotICAgIFN0cmluZ1tdIHBhcmFtcyA9IHBhcnNlci5nZXRQYXJhbWV0ZXJWYWx1ZXMoZ2V0SUQoKSk7Ci0gICAgVmVjdG9yIGZyYWdzID0gbmV3IFZlY3RvcigpOwotICAgIFZlY3RvciBncm91cElEc09yZGVyQ29weSA9IG5ldyBWZWN0b3IoKTsKLSAgICBIYXNodGFibGUgZ3JvdXBJRHNDb3B5ID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIGZvciAoaW50IGkgPSAwOyBwYXJhbXMgIT0gbnVsbCAmJiBpIDwgcGFyYW1zLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBpZiAocGFyYW1zW2ldICE9IG51bGwpIHsKLSAgICAgICAgZ3JvdXBJRHNPcmRlckNvcHkuYWRkKHBhcmFtc1tpXSk7Ci0gICAgICAgIGdyb3VwSURzQ29weS5wdXQocGFyYW1zW2ldLCBnZXRHcm91cE1lbWJlcklEcyhwYXJhbXNbaV0pKTsKLSAgICAgICAgSVhTREZyYWdtZW50W10gZ3JvdXBNZW1iZXJGcmFnbWVudHMgPSBnZXRHcm91cE1lbWJlckZyYWdtZW50cyhwYXJhbXNbaV0pOwotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGdyb3VwTWVtYmVyRnJhZ21lbnRzLmxlbmd0aDsgaisrKSB7Ci0gICAgICAgICAgaWYgKGdyb3VwTWVtYmVyRnJhZ21lbnRzW2pdICE9IG51bGwpIHsKLSAgICAgICAgICAgIGZyYWdzLmFkZChncm91cE1lbWJlckZyYWdtZW50c1tqXSk7Ci0gICAgICAgICAgICBpZiAoIWdyb3VwTWVtYmVyRnJhZ21lbnRzW2pdLnByb2Nlc3NQYXJhbWV0ZXJWYWx1ZXMocGFyc2VyKSkKLSAgICAgICAgICAgICAgdmFsdWVzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgZ3JvdXBJRHNPcmRlcl8gPSBncm91cElEc09yZGVyQ29weTsKLSAgICBncm91cElEc18gPSBncm91cElEc0NvcHk7Ci0gICAgcmVtb3ZlQWxsRnJhZ21lbnRzKCk7Ci0gICAgYWRkRnJhZ21lbnRzKGZyYWdzKTsKLSAgICByZXR1cm4gdmFsdWVzVmFsaWQ7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBzZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMoRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzKSB7Ci0gICAgcmVtb3ZlR3JvdXBJRHMoKTsKLSAgICBib29sZWFuIHBhcmFtc1ZhbGlkID0gdHJ1ZTsKLSAgICBTdHJpbmcgcHJldkdyb3VwSUQgPSBudWxsOwotICAgIFN0cmluZyBjdXJyR3JvdXBJRCA9IG51bGw7Ci0gICAgaW50IGdyb3VwTWVtYmVySW5kZXggPSAwOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFuY2VEb2N1bWVudHMubGVuZ3RoOyApIHsKLSAgICAgIGlmIChjdXJyR3JvdXBJRCA9PSBudWxsKSB7Ci0gICAgICAgIFN0cmluZyBuZXdHcm91cElEID0gY3JlYXRlSW5zdGFuY2UoKTsKLSAgICAgICAgcHJldkdyb3VwSUQgPSBjdXJyR3JvdXBJRDsKLSAgICAgICAgY3Vyckdyb3VwSUQgPSBuZXdHcm91cElEOwotICAgICAgfQotICAgICAgRWxlbWVudFtdIGluc3RhbmNlUGFydGl0aW9uID0gbnVsbDsKLSAgICAgIGludCBqID0gZ3JvdXBNZW1iZXJJbmRleDsKLSAgICAgIGJvb2xlYW4gcGFyYW1zQXNzaWduZWQgPSBmYWxzZTsKLSAgICAgIGludCB3aWxkY2FyZEZyYWdJbmRleCA9IC0xOwotICAgICAgZG8gewotICAgICAgICBJWFNERnJhZ21lbnRbXSBncm91cE1lbWJlckZyYWdzID0gZ2V0R3JvdXBNZW1iZXJGcmFnbWVudHMoY3Vyckdyb3VwSUQpOwotICAgICAgICBYU0RDb21wb25lbnQgeHNkQ29tcG9uZW50ID0gZ3JvdXBNZW1iZXJGcmFnc1tqXS5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpLmdldFhTRENvbXBvbmVudCgpOwotICAgICAgICBpZiAoeHNkQ29tcG9uZW50IGluc3RhbmNlb2YgWFNEV2lsZGNhcmQpIHsKLSAgICAgICAgICBpZiAod2lsZGNhcmRGcmFnSW5kZXggPCAwKQotICAgICAgICAgICAgd2lsZGNhcmRGcmFnSW5kZXggPSBqOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGdyb3VwTWVtYmVyRnJhZ3Nbal0uZ2V0TmFtZSgpLmVxdWFscyh0cmltUHJlZml4KGluc3RhbmNlRG9jdW1lbnRzW2ldLmdldFRhZ05hbWUoKSkpKSB7Ci0gICAgICAgICAgaW5zdGFuY2VQYXJ0aXRpb24gPSBnZXRJbnN0YW5jZURvY3VtZW50UGFydGl0aW9uKGluc3RhbmNlRG9jdW1lbnRzLCBpLCBncm91cE1lbWJlckZyYWdzW2pdLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCkuZ2V0TWF4T2NjdXJzKCkpOwotICAgICAgICAgIGlmICghZ3JvdXBNZW1iZXJGcmFnc1tqXS5zZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMoaW5zdGFuY2VQYXJ0aXRpb24pKQotICAgICAgICAgICAgcGFyYW1zVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICBwYXJhbXNBc3NpZ25lZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZihncm91cE1lbWJlckZyYWdzW2pdIGluc3RhbmNlb2YgWFNER3JvdXBGcmFnbWVudCkgewotICAgICAgICAJZ3JvdXBNZW1iZXJGcmFnc1tqXS5zZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMoaW5zdGFuY2VEb2N1bWVudHMpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoaiA9PSBncm91cE1lbWJlckZyYWdzLmxlbmd0aCAtIDEpIHsKLSAgICAgICAgICBqID0gMDsKLSAgICAgICAgICBTdHJpbmcgbmV3R3JvdXBJRDsKLSAgICAgICAgICBpZiAoIXBhcmFtc0Fzc2lnbmVkKQotICAgICAgICAgICAgbmV3R3JvdXBJRCA9IGNyZWF0ZUluc3RhbmNlKCk7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgbmV3R3JvdXBJRCA9IG51bGw7Ci0gICAgICAgICAgcHJldkdyb3VwSUQgPSBjdXJyR3JvdXBJRDsKLSAgICAgICAgICBjdXJyR3JvdXBJRCA9IG5ld0dyb3VwSUQ7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgIGorKzsKLSAgICAgIH0gd2hpbGUgKCFwYXJhbXNBc3NpZ25lZCAmJiBqICE9IGdyb3VwTWVtYmVySW5kZXgpOwotICAgICAgZ3JvdXBNZW1iZXJJbmRleCA9IGo7Ci0gICAgICBpZiAoIXBhcmFtc0Fzc2lnbmVkKSB7Ci0gICAgICAgIGluc3RhbmNlUGFydGl0aW9uID0gZ2V0SW5zdGFuY2VEb2N1bWVudFBhcnRpdGlvbihpbnN0YW5jZURvY3VtZW50cywgaSwgRnJhZ21lbnRDb25zdGFudHMuVU5CT1VOREVEKTsKLSAgICAgICAgaWYgKHdpbGRjYXJkRnJhZ0luZGV4ID49IDApIHsKLSAgICAgICAgICBpZiAod2lsZGNhcmRGcmFnSW5kZXggPj0gZ3JvdXBNZW1iZXJJbmRleCkgewotICAgICAgICAgICAgcmVtb3ZlR3JvdXBJRChjdXJyR3JvdXBJRCk7Ci0gICAgICAgICAgICBjdXJyR3JvdXBJRCA9IHByZXZHcm91cElEOwotICAgICAgICAgIH0KLSAgICAgICAgICBncm91cE1lbWJlckluZGV4ID0gd2lsZGNhcmRGcmFnSW5kZXg7Ci0gICAgICAgICAgSVhTREZyYWdtZW50W10gZ3JvdXBNZW1iZXJGcmFncyA9IGdldEdyb3VwTWVtYmVyRnJhZ21lbnRzKGN1cnJHcm91cElEKTsKLSAgICAgICAgICBpZiAoIWdyb3VwTWVtYmVyRnJhZ3Nbd2lsZGNhcmRGcmFnSW5kZXhdLnNldFBhcmFtZXRlclZhbHVlc0Zyb21JbnN0YW5jZURvY3VtZW50cyhpbnN0YW5jZVBhcnRpdGlvbikpCi0gICAgICAgICAgICBwYXJhbXNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgIHBhcmFtc0Fzc2lnbmVkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChjdXJyR3JvdXBJRCAhPSBudWxsICYmIChwcmV2R3JvdXBJRCA9PSBudWxsIHx8ICFjdXJyR3JvdXBJRC5lcXVhbHMocHJldkdyb3VwSUQpKSkgewotICAgICAgICAgIHBhcmFtc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgcmVtb3ZlR3JvdXBJRChjdXJyR3JvdXBJRCk7Ci0gICAgICAgICAgY3Vyckdyb3VwSUQgPSBwcmV2R3JvdXBJRDsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgaSA9IGkgKyBpbnN0YW5jZVBhcnRpdGlvbi5sZW5ndGg7Ci0gICAgfQotICAgIHJldHVybiBwYXJhbXNWYWxpZDsKLSAgfQotCi0gIHByaXZhdGUgRWxlbWVudFtdIGdldEluc3RhbmNlRG9jdW1lbnRQYXJ0aXRpb24oRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzLCBpbnQgc3RhcnQsIGludCBtYXhTaXplKSB7Ci0gICAgU3RyaW5nIHRhZ05hbWUgPSBpbnN0YW5jZURvY3VtZW50c1tzdGFydF0uZ2V0VGFnTmFtZSgpOwotICAgIGludCBzaXplID0gMTsKLSAgICBmb3IgKGludCBpID0gc3RhcnQgKyAxOyBpIDwgaW5zdGFuY2VEb2N1bWVudHMubGVuZ3RoOyBpKyspIHsKLSAgICAgIGlmIChtYXhTaXplICE9IEZyYWdtZW50Q29uc3RhbnRzLlVOQk9VTkRFRCAmJiBzaXplID49IG1heFNpemUpCi0gICAgICAgIGJyZWFrOwotICAgICAgZWxzZSBpZiAoaW5zdGFuY2VEb2N1bWVudHNbaV0uZ2V0VGFnTmFtZSgpLmVxdWFscyh0YWdOYW1lKSkKLSAgICAgICAgc2l6ZSsrOwotICAgICAgZWxzZQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgRWxlbWVudFtdIHN1YnNldCA9IG5ldyBFbGVtZW50W3NpemVdOwotICAgIGZvciAoaW50IGogPSAwOyBqIDwgc3Vic2V0Lmxlbmd0aDsgaisrKSB7Ci0gICAgICBzdWJzZXRbal0gPSBpbnN0YW5jZURvY3VtZW50c1tzdGFydCArIGpdOwotICAgIH0KLSAgICByZXR1cm4gc3Vic2V0OwotICB9Ci0KLSAgcHVibGljIEVsZW1lbnRbXSBnZW5JbnN0YW5jZURvY3VtZW50c0Zyb21QYXJhbWV0ZXJWYWx1ZXMoYm9vbGVhbiBnZW5YU0lUeXBlLCBIYXNodGFibGUgbmFtZXNwYWNlVGFibGUsIERvY3VtZW50IGRvYykgewotICAgIElYU0RGcmFnbWVudFtdIGdyb3VwTWVtYmVyRnJhZ21lbnRzID0gZ2V0QWxsRnJhZ21lbnRzKCk7Ci0gICAgVmVjdG9yIGluc3RhbmNlRG9jdW1lbnRzQ29weSA9IG5ldyBWZWN0b3IoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGdyb3VwTWVtYmVyRnJhZ21lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBFbGVtZW50W10gZnJhZ21lbnRJbnN0YW5jZXMgPSBncm91cE1lbWJlckZyYWdtZW50c1tpXS5nZW5JbnN0YW5jZURvY3VtZW50c0Zyb21QYXJhbWV0ZXJWYWx1ZXMoZ2VuWFNJVHlwZSwgbmFtZXNwYWNlVGFibGUsIGRvYyk7Ci0gICAgICBmb3IgKGludCBqID0gMDsgaiA8IGZyYWdtZW50SW5zdGFuY2VzLmxlbmd0aDsgaisrKSB7Ci0gICAgICAgIGluc3RhbmNlRG9jdW1lbnRzQ29weS5hZGQoZnJhZ21lbnRJbnN0YW5jZXNbal0pOwotICAgICAgfQotICAgIH0KLSAgICBFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMgPSBuZXcgRWxlbWVudFtpbnN0YW5jZURvY3VtZW50c0NvcHkuc2l6ZSgpXTsKLSAgICBmb3IgKGludCBrID0gMDsgayA8IGluc3RhbmNlRG9jdW1lbnRzLmxlbmd0aDsgaysrKSB7Ci0gICAgICBpbnN0YW5jZURvY3VtZW50c1trXSA9IChFbGVtZW50KWluc3RhbmNlRG9jdW1lbnRzQ29weS5nZXQoayk7Ci0gICAgfQotICAgIHJldHVybiBpbnN0YW5jZURvY3VtZW50czsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFhTRE1vZGVsR3JvdXAoWFNETW9kZWxHcm91cCB4c2RNb2RlbEdyb3VwKSB7Ci0gICAgeHNkTW9kZWxHcm91cF8gPSB4c2RNb2RlbEdyb3VwOwotICB9Ci0KLSAgcHVibGljIFhTRE1vZGVsR3JvdXAgZ2V0WFNETW9kZWxHcm91cCgpIHsKLSAgICByZXR1cm4geHNkTW9kZWxHcm91cF87Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nW10gZ2V0R3JvdXBJRHMoKSB7Ci0gICAgU3RyaW5nW10gZ3JvdXBJRHMgPSBuZXcgU3RyaW5nW2dyb3VwSURzT3JkZXJfLnNpemUoKV07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBncm91cElEcy5sZW5ndGg7IGkrKykgewotICAgICAgZ3JvdXBJRHNbaV0gPSAoU3RyaW5nKWdyb3VwSURzT3JkZXJfLmdldChpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGdyb3VwSURzOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgcmVtb3ZlR3JvdXBJRHMoKSB7Ci0gICAgcmVtb3ZlQWxsRnJhZ21lbnRzKCk7Ci0gICAgZ3JvdXBJRHNPcmRlcl8uY2xlYXIoKTsKLSAgICBncm91cElEc18uY2xlYXIoKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHJlbW92ZUdyb3VwSUQoU3RyaW5nIGdyb3VwSUQpIHsKLSAgICBTdHJpbmdbXSBtZW1iZXJGcmFnSURzID0gZ2V0R3JvdXBNZW1iZXJJRHMoZ3JvdXBJRCk7Ci0gICAgcmVtb3ZlRnJhZ21lbnRzKG1lbWJlckZyYWdJRHMpOwotICAgIGdyb3VwSURzT3JkZXJfLnJlbW92ZShncm91cElEKTsKLSAgICBncm91cElEc18ucmVtb3ZlKGdyb3VwSUQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgc2V0R3JvdXBNZW1iZXJJRHMoU3RyaW5nIGdyb3VwSUQsIFN0cmluZ1tdIGdyb3VwTWVtYmVySURzKSB7Ci0gICAgaWYgKGdyb3VwSUQgIT0gbnVsbCkgewotICAgICAgaWYgKCFncm91cElEc09yZGVyXy5jb250YWlucyhncm91cElEKSkKLSAgICAgICAgZ3JvdXBJRHNPcmRlcl8uYWRkKGdyb3VwSUQpOwotICAgICAgaWYgKGdyb3VwTWVtYmVySURzICE9IG51bGwpCi0gICAgICAgIGdyb3VwSURzXy5wdXQoZ3JvdXBJRCwgZ3JvdXBNZW1iZXJJRHMpOwotICAgICAgZWxzZQotICAgICAgICBncm91cElEc18ucHV0KGdyb3VwSUQsIG5ldyBTdHJpbmdbMF0pOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHNldEdyb3VwTWVtYmVyRnJhZ21lbnRzKFN0cmluZyBncm91cElELCBJWFNERnJhZ21lbnRbXSBncm91cE1lbWJlckZyYWdtZW50cykgewotICAgIGFkZEZyYWdtZW50cyhncm91cE1lbWJlckZyYWdtZW50cyk7Ci0gICAgU3RyaW5nW10gaWRzID0gbmV3IFN0cmluZ1tncm91cE1lbWJlckZyYWdtZW50cy5sZW5ndGhdOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBpZHNbaV0gPSBncm91cE1lbWJlckZyYWdtZW50c1tpXS5nZXRJRCgpOwotICAgIH0KLSAgICBzZXRHcm91cE1lbWJlcklEcyhncm91cElELCBpZHMpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZ1tdIGdldEdyb3VwTWVtYmVySURzKFN0cmluZyBncm91cElEKSB7Ci0gICAgaWYgKGdyb3VwSUQgIT0gbnVsbCkgewotICAgICAgU3RyaW5nW10gZ3JvdXBNZW1iZXJJRHMgPSAoU3RyaW5nW10pZ3JvdXBJRHNfLmdldChncm91cElEKTsKLSAgICAgIGlmIChncm91cE1lbWJlcklEcyAhPSBudWxsKQotICAgICAgICByZXR1cm4gZ3JvdXBNZW1iZXJJRHM7Ci0gICAgfQotICAgIHJldHVybiBuZXcgU3RyaW5nWzBdOwotICB9Ci0KLSAgcHVibGljIElYU0RGcmFnbWVudFtdIGdldEdyb3VwTWVtYmVyRnJhZ21lbnRzKFN0cmluZyBncm91cElEKSB7Ci0gICAgU3RyaW5nW10gZ3JvdXBNZW1iZXJJRHMgPSBnZXRHcm91cE1lbWJlcklEcyhncm91cElEKTsKLSAgICBJWFNERnJhZ21lbnRbXSBncm91cE1lbWJlckZyYWdtZW50cyA9IG5ldyBJWFNERnJhZ21lbnRbZ3JvdXBNZW1iZXJJRHMubGVuZ3RoXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGdyb3VwTWVtYmVyRnJhZ21lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBncm91cE1lbWJlckZyYWdtZW50c1tpXSA9IGdldEZyYWdtZW50KGdyb3VwTWVtYmVySURzW2ldKTsKLSAgICB9Ci0gICAgcmV0dXJuIGdyb3VwTWVtYmVyRnJhZ21lbnRzOwotICB9Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyBjcmVhdGVHcm91cEluc3RhbmNlKCkgewotICAgIFN0cmluZyBncm91cElEID0gZ2VuSUQoKTsKLSAgICBFTGlzdCBwYXJ0aWNsZXMgPSBnZXRYU0RNb2RlbEdyb3VwKCkuZ2V0UGFydGljbGVzKCk7Ci0gICAgU3RyaW5nW10gZ3JvdXBNZW1iZXJJRHMgPSBuZXcgU3RyaW5nW3BhcnRpY2xlcy5zaXplKCldOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGFydGljbGVzLnNpemUoKTsgaSsrKSB7Ci0gICAgICBYU0RQYXJ0aWNsZSB4c2RQYXJ0aWNsZSA9IChYU0RQYXJ0aWNsZSlwYXJ0aWNsZXMuZ2V0KGkpOwotICAgICAgWFNEUGFydGljbGVDb250ZW50IHhzZFBhcnRpY2xlQ29udGVudCA9IHhzZFBhcnRpY2xlLmdldENvbnRlbnQoKTsKLSAgICAgIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHRoaXNDb25maWcgPSBnZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotICAgICAgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gbmV3IFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci0gICAgICBpZiAoeHNkUGFydGljbGVDb250ZW50IGluc3RhbmNlb2YgWFNEQ29tcG9uZW50KQotICAgICAgICB4c2RDb25maWcuc2V0WFNEQ29tcG9uZW50KChYU0RDb21wb25lbnQpeHNkUGFydGljbGVDb250ZW50KTsKLSAgICAgIGVsc2UKLSAgICAgICAgeHNkQ29uZmlnLnNldFhTRENvbXBvbmVudChudWxsKTsKLSAgICAgIHhzZENvbmZpZy5zZXRTdHlsZSh0aGlzQ29uZmlnLmdldFN0eWxlKCkpOwotICAgICAgeHNkQ29uZmlnLnNldFBhcnRFbmNvZGluZyh0aGlzQ29uZmlnLmdldFBhcnRFbmNvZGluZygpKTsKLSAgICAgIHhzZENvbmZpZy5zZXRXU0RMUGFydE5hbWUodGhpc0NvbmZpZy5nZXRXU0RMUGFydE5hbWUoKSk7Ci0gICAgICBncm91cE1lbWJlcklEc1tpXSA9IGdlbklEKCk7Ci0gICAgICBhZGRGcmFnbWVudChncm91cE1lbWJlcklEc1tpXSwgZ2V0WFNEVG9GcmFnbWVudENvbnRyb2xsZXIoKS5nZXRGcmFnbWVudCh4c2RDb25maWcsIGdyb3VwTWVtYmVySURzW2ldLCBncm91cE1lbWJlcklEc1tpXSkpOwotICAgIH0KLSAgICBzZXRHcm91cE1lbWJlcklEcyhncm91cElELCBncm91cE1lbWJlcklEcyk7Ci0gICAgcmV0dXJuIGdyb3VwSUQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTREdyb3VwU2VxRml4RnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTREdyb3VwU2VxRml4RnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2IwNzk4NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RHcm91cFNlcUZpeEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RNb2RlbEdyb3VwOwotCi1wdWJsaWMgY2xhc3MgWFNER3JvdXBTZXFGaXhGcmFnbWVudCBleHRlbmRzIFhTREdyb3VwU2VxRnJhZ21lbnQgewotICBwdWJsaWMgWFNER3JvdXBTZXFGaXhGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGNvbnRyb2xsZXIsIFhTRE1vZGVsR3JvdXAgeHNkTW9kZWxHcm91cCkgewotICAgIHN1cGVyKGlkLCBuYW1lLCBjb25maWcsIGNvbnRyb2xsZXIsIHhzZE1vZGVsR3JvdXApOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRJbmZvcm1hdGlvbkZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNERGVmYXVsdEluZm9GcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRSZWFkRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RHcm91cFJGcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXcml0ZUZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBTZXFGaXhXRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNER3JvdXBTZXFGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNER3JvdXBTZXFGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDliNjYxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTREdyb3VwU2VxRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSVhTREdyb3VwU2VxRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE1vZGVsR3JvdXA7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBYU0RHcm91cFNlcUZyYWdtZW50IGV4dGVuZHMgWFNER3JvdXBGcmFnbWVudCBpbXBsZW1lbnRzIElYU0RHcm91cFNlcUZyYWdtZW50IHsKLSAgcHVibGljIFhTREdyb3VwU2VxRnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBjb250cm9sbGVyLCBYU0RNb2RlbEdyb3VwIHhzZE1vZGVsR3JvdXApIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnLCBjb250cm9sbGVyLCB4c2RNb2RlbEdyb3VwKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgY3JlYXRlR3JvdXBTZXFJbnN0YW5jZSgpIHsKLSAgICByZXR1cm4gY3JlYXRlR3JvdXBJbnN0YW5jZSgpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBjcmVhdGVJbnN0YW5jZSgpIHsKLSAgICByZXR1cm4gY3JlYXRlR3JvdXBTZXFJbnN0YW5jZSgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RHcm91cFNlcVJhbmdlRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTREdyb3VwU2VxUmFuZ2VGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzJkOTcyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTREdyb3VwU2VxUmFuZ2VGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETW9kZWxHcm91cDsKLQotcHVibGljIGNsYXNzIFhTREdyb3VwU2VxUmFuZ2VGcmFnbWVudCBleHRlbmRzIFhTREdyb3VwU2VxRnJhZ21lbnQgewotICBwdWJsaWMgWFNER3JvdXBTZXFSYW5nZUZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgY29udHJvbGxlciwgWFNETW9kZWxHcm91cCB4c2RNb2RlbEdyb3VwKSB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZywgY29udHJvbGxlciwgeHNkTW9kZWxHcm91cCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEluZm9ybWF0aW9uRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0REZWZhdWx0SW5mb0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFJlYWRGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTREdyb3VwUkZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdyaXRlRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RHcm91cFNlcVJhbmdlV0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRE1hcEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RNYXBGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzNhMDhkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRE1hcEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyODkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNEQXR0cmlidXRlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSVhTREZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RNYXBGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29udHJvbGxlcjsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFhTRE1hcEZyYWdtZW50IGV4dGVuZHMgWFNERnJhZ21lbnQgaW1wbGVtZW50cyBJWFNETWFwRnJhZ21lbnQgewotICBwcml2YXRlIFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGNvbnRyb2xsZXJfOwotICBwcml2YXRlIFZlY3RvciBmcmFnbWVudHNPcmRlcl87Ci0gIHByaXZhdGUgSGFzaHRhYmxlIGZyYWdtZW50c187Ci0gIHByaXZhdGUgSGFzaHRhYmxlIGF0dHJpYnV0ZUZyYWdtZW50c187Ci0KLSAgcHVibGljIFhTRE1hcEZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgY29udHJvbGxlcikgewotICAgIHN1cGVyKGlkLCBuYW1lLCBjb25maWcpOwotICAgIGNvbnRyb2xsZXJfID0gY29udHJvbGxlcjsKLSAgICBmcmFnbWVudHNPcmRlcl8gPSBuZXcgVmVjdG9yKCk7Ci0gICAgZnJhZ21lbnRzXyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBhdHRyaWJ1dGVGcmFnbWVudHNfID0gbmV3IEhhc2h0YWJsZSgpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc1BhcmFtZXRlclZhbHVlcyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbiB7Ci0gICAgYm9vbGVhbiB2YWx1ZXNWYWxpZCA9IHRydWU7Ci0gICAgU3RyaW5nW10gcGFyYW1zID0gcGFyc2VyLmdldFBhcmFtZXRlclZhbHVlcyhnZXRJRCgpKTsKLSAgICBWZWN0b3IgZnJhZ3MgPSBuZXcgVmVjdG9yKCk7Ci0gICAgVmVjdG9yIGF0dGZyYWdzID0gbmV3IFZlY3RvcigpOwotICAgIGlmIChwYXJhbXMgIT0gbnVsbCkgewotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJhbXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgaWYgKHBhcmFtc1tpXSAhPSBudWxsKSB7Ci0gICAgICAgICAgSVhTREZyYWdtZW50IGZyYWcgPSBnZXRGcmFnbWVudChwYXJhbXNbaV0pOwotICAgICAgICAgIGlmIChmcmFnICE9IG51bGwpIHsKLSAgICAgICAgICAgIGZyYWdzLmFkZChmcmFnKTsKLSAgICAgICAgICAgIGlmICghZnJhZy5wcm9jZXNzUGFyYW1ldGVyVmFsdWVzKHBhcnNlcikpCi0gICAgICAgICAgICAgIHZhbHVlc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UgewotICAgICAgICAgIAlJWFNEQXR0cmlidXRlRnJhZ21lbnQgYWZyYWcgPSBnZXRBdHRyaWJ1dGVGcmFnbWVudChwYXJhbXNbaV0pOwotICAgICAgICAgIAlpZiAoYWZyYWcgIT0gbnVsbCkgewotICAgICAgICAgIAkgIGF0dGZyYWdzLmFkZChhZnJhZyk7Ci0gICAgICAgICAgICAgIGlmICghYWZyYWcucHJvY2Vzc1BhcmFtZXRlclZhbHVlcyhwYXJzZXIpKQotICAgICAgICAgICAgICAgICB2YWx1ZXNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgfSAgCi0gICAgICAgICAgCi0gICAgICAgICAgfQotICAgICAgICAgIAkKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZW1vdmVBbGxGcmFnbWVudHMoKTsKLSAgICByZW1vdmVBbGxBdHRyaWJ1dGVGcmFnbWVudHMoKTsKLSAgICBhZGRBdHRyaWJ1dGVGcmFnbWVudHMoYXR0ZnJhZ3MpOwotICAgIGFkZEZyYWdtZW50cyhmcmFncyk7Ci0gICAgcmV0dXJuIHZhbHVlc1ZhbGlkOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0UGFyYW1ldGVyVmFsdWVzKFN0cmluZyBwYXJhbUtleSwgU3RyaW5nW10gcGFyYW1zKSB7Ci0gICAgSVhTREZyYWdtZW50IGZyYWcgPSBnZXRGcmFnbWVudChwYXJhbUtleSk7Ci0gICAgaWYgKGZyYWcgIT0gbnVsbCkKLSAgICAgIGZyYWcuc2V0UGFyYW1ldGVyVmFsdWVzKHBhcmFtS2V5LCBwYXJhbXMpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZ1tdIGdldFBhcmFtZXRlclZhbHVlcyhTdHJpbmcgcGFyYW1LZXkpIHsKLSAgICBJWFNERnJhZ21lbnQgZnJhZyA9IGdldEZyYWdtZW50KHBhcmFtS2V5KTsKLSAgICByZXR1cm4gKGZyYWcgIT0gbnVsbCkgPyBmcmFnLmdldFBhcmFtZXRlclZhbHVlcyhwYXJhbUtleSkgOiBudWxsOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGVBbGxQYXJhbWV0ZXJWYWx1ZXMoKSB7Ci0gICAgSVhTREZyYWdtZW50W10gZnJhZ21lbnRzID0gZ2V0QWxsRnJhZ21lbnRzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcmFnbWVudHMubGVuZ3RoOyBpKyspIHsKLSAgICAgIGlmICghZnJhZ21lbnRzW2ldLnZhbGlkYXRlQWxsUGFyYW1ldGVyVmFsdWVzKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZVBhcmFtZXRlclZhbHVlcyhTdHJpbmcgcGFyYW1LZXkpIHsKLSAgICBJWFNERnJhZ21lbnQgZnJhZyA9IGdldEZyYWdtZW50KHBhcmFtS2V5KTsKLSAgICByZXR1cm4gKGZyYWcgIT0gbnVsbCkgPyBmcmFnLnZhbGlkYXRlUGFyYW1ldGVyVmFsdWVzKHBhcmFtS2V5KSA6IHRydWU7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZVBhcmFtZXRlclZhbHVlKFN0cmluZyBwYXJhbUtleSwgaW50IHBhcmFtSW5kZXgpIHsKLSAgICBJWFNERnJhZ21lbnQgZnJhZyA9IGdldEZyYWdtZW50KHBhcmFtS2V5KTsKLSAgICByZXR1cm4gKGZyYWcgIT0gbnVsbCkgPyBmcmFnLnZhbGlkYXRlUGFyYW1ldGVyVmFsdWUocGFyYW1LZXksIHBhcmFtSW5kZXgpIDogdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFhTRFRvRnJhZ21lbnRDb250cm9sbGVyKFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGNvbnRyb2xsZXIpIHsKLSAgICBjb250cm9sbGVyXyA9IGNvbnRyb2xsZXI7Ci0gIH0KLQotICBwdWJsaWMgWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgZ2V0WFNEVG9GcmFnbWVudENvbnRyb2xsZXIoKSB7Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXJfOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgYWRkRnJhZ21lbnQoU3RyaW5nIGlkLCBJWFNERnJhZ21lbnQgZnJhZykgewotICAgIGFkZEZyYWdtZW50KGlkLCBmcmFnLCB0cnVlKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGFkZEZyYWdtZW50cyhTdHJpbmdbXSBpZCwgSVhTREZyYWdtZW50W10gZnJhZ3MpIHsKLSAgICBhZGRGcmFnbWVudHMoaWQsIGZyYWdzLCB0cnVlKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGFkZEZyYWdtZW50KElYU0RGcmFnbWVudCBmcmFnKSB7Ci0gICAgYWRkRnJhZ21lbnQoZnJhZywgdHJ1ZSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBhZGRGcmFnbWVudHMoSVhTREZyYWdtZW50W10gZnJhZ3MpIHsKLSAgICBhZGRGcmFnbWVudHMoZnJhZ3MsIHRydWUpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgYWRkRnJhZ21lbnRzKFZlY3RvciBmcmFncykgewotICAgIGFkZEZyYWdtZW50cyhmcmFncywgdHJ1ZSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBhZGRGcmFnbWVudChTdHJpbmcgaWQsIElYU0RGcmFnbWVudCBmcmFnLCBib29sZWFuIGFkZFRvQ29udHJvbGxlcikgewotICAgIGZyYWdtZW50c09yZGVyXy5hZGQoaWQpOwotICAgIGZyYWdtZW50c18ucHV0KGlkLCBmcmFnKTsKLSAgICBjb250cm9sbGVyXy5hZGRUb0NhY2hlKGlkLCBmcmFnKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgYWRkQXR0cmlidXRlRnJhZ21lbnQoU3RyaW5nIGlkLCBJWFNERnJhZ21lbnQgZnJhZykgewotICAgIGF0dHJpYnV0ZUZyYWdtZW50c18ucHV0KGlkLCBmcmFnKTsKLSAgICBjb250cm9sbGVyXy5hZGRUb0NhY2hlKGlkLCBmcmFnKTsKLSAgfQotICAKLSAgcHVibGljIElYU0RBdHRyaWJ1dGVGcmFnbWVudFtdIGdldEFsbEF0dHJpYnV0ZUZyYWdtZW50cygpIHsKLSAgICBJWFNEQXR0cmlidXRlRnJhZ21lbnRbXSBmcmFnbWVudHMgPSBuZXcgWFNEQXR0cmlidXRlRnJhZ21lbnRbYXR0cmlidXRlRnJhZ21lbnRzXy5zaXplKCldOwotICAgIEl0ZXJhdG9yIGl0ID0gYXR0cmlidXRlRnJhZ21lbnRzXy52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgIGludCBpID0gMDsKLSAgICB3aGlsZShpdC5oYXNOZXh0KCkpewotICAgICAgZnJhZ21lbnRzW2ldID0gKElYU0RBdHRyaWJ1dGVGcmFnbWVudClpdC5uZXh0KCk7Ci0gICAgICBpKys7IAotICAgIH0KLSAgICByZXR1cm4gZnJhZ21lbnRzOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgdm9pZCBhZGRGcmFnbWVudHMoU3RyaW5nW10gaWQsIElYU0RGcmFnbWVudFtdIGZyYWdzLCBib29sZWFuIGFkZFRvQ29udHJvbGxlcikgewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaWQubGVuZ3RoICYmIGkgPCBmcmFncy5sZW5ndGg7IGkrKykgewotICAgICAgYWRkRnJhZ21lbnQoaWRbaV0sIGZyYWdzW2ldLCBhZGRUb0NvbnRyb2xsZXIpOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGFkZEZyYWdtZW50KElYU0RGcmFnbWVudCBmcmFnLCBib29sZWFuIGFkZFRvQ29udHJvbGxlcikgewotICAgIGFkZEZyYWdtZW50KGZyYWcuZ2V0SUQoKSwgZnJhZywgYWRkVG9Db250cm9sbGVyKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGFkZEZyYWdtZW50cyhJWFNERnJhZ21lbnRbXSBmcmFncywgYm9vbGVhbiBhZGRUb0NvbnRyb2xsZXIpIHsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGZyYWdzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBhZGRGcmFnbWVudChmcmFnc1tpXS5nZXRJRCgpLCBmcmFnc1tpXSwgYWRkVG9Db250cm9sbGVyKTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBhZGRGcmFnbWVudHMoVmVjdG9yIGZyYWdzLCBib29sZWFuIGFkZFRvQ29udHJvbGxlcikgewotICAgIEl0ZXJhdG9yIGl0ID0gZnJhZ3MuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0gICAgICBPYmplY3Qgb2JqID0gaXQubmV4dCgpOwotICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIElYU0RGcmFnbWVudCkgewotICAgICAgICBJWFNERnJhZ21lbnQgZnJhZyA9IChJWFNERnJhZ21lbnQpb2JqOwotICAgICAgICBhZGRGcmFnbWVudChmcmFnLmdldElEKCksIGZyYWcsIGFkZFRvQ29udHJvbGxlcik7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgYWRkQXR0cmlidXRlRnJhZ21lbnRzKFZlY3RvciBmcmFncykgewotICAgIEl0ZXJhdG9yIGl0ID0gZnJhZ3MuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0gICAgICBPYmplY3Qgb2JqID0gaXQubmV4dCgpOwotICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIElYU0RBdHRyaWJ1dGVGcmFnbWVudCkgewotICAgICAgICBJWFNEQXR0cmlidXRlRnJhZ21lbnQgZnJhZyA9IChJWFNEQXR0cmlidXRlRnJhZ21lbnQpb2JqOwotICAgICAgICBhZGRBdHRyaWJ1dGVGcmFnbWVudChmcmFnLmdldElEKCksIGZyYWcpOwotICAgICAgfQotICAgIH0KLSAgfQotICAKLSAgcHVibGljIFN0cmluZ1tdIGdldEZyYWdtZW50c09yZGVyKCkgewotICAgIFN0cmluZ1tdIGZyYWdtZW50c09yZGVyID0gbmV3IFN0cmluZ1tmcmFnbWVudHNPcmRlcl8uc2l6ZSgpXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGZyYWdtZW50c09yZGVyLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBmcmFnbWVudHNPcmRlcltpXSA9IChTdHJpbmcpZnJhZ21lbnRzT3JkZXJfLmdldChpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZyYWdtZW50c09yZGVyOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gc2V0RnJhZ21lbnRzT3JkZXIoU3RyaW5nW10gZnJhZ21lbnRzT3JkZXIpIHsKLSAgICBpZiAoZnJhZ21lbnRzT3JkZXIubGVuZ3RoICE9IGZyYWdtZW50c09yZGVyXy5zaXplKCkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgVmVjdG9yIGZyYWdtZW50c09yZGVyQ29weSA9IG5ldyBWZWN0b3IoZnJhZ21lbnRzT3JkZXJfKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGZyYWdtZW50c09yZGVyLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBpZiAoIWZyYWdtZW50c09yZGVyQ29weS5yZW1vdmUoZnJhZ21lbnRzT3JkZXJbaV0pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGZyYWdtZW50c09yZGVyXy5jbGVhcigpOwotICAgIGZvciAoaW50IGogPSAwOyBqIDwgZnJhZ21lbnRzT3JkZXIubGVuZ3RoOyBqKyspIHsKLSAgICAgIGZyYWdtZW50c09yZGVyXy5hZGQoZnJhZ21lbnRzT3JkZXJbal0pOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBJWFNEQXR0cmlidXRlRnJhZ21lbnQgZ2V0QXR0cmlidXRlRnJhZ21lbnQoU3RyaW5nIGlkKSB7Ci0gICAgcmV0dXJuIChJWFNEQXR0cmlidXRlRnJhZ21lbnQpYXR0cmlidXRlRnJhZ21lbnRzXy5nZXQoaWQpOwotICB9Ci0gIAotICBwdWJsaWMgSVhTREZyYWdtZW50IGdldEZyYWdtZW50KFN0cmluZyBpZCkgewotICAgIHJldHVybiAoSVhTREZyYWdtZW50KWZyYWdtZW50c18uZ2V0KGlkKTsKLSAgfQotCi0gIHB1YmxpYyBJWFNERnJhZ21lbnRbXSBnZXRGcmFnbWVudHMoU3RyaW5nW10gaWRzKSB7Ci0gICAgSVhTREZyYWdtZW50W10gZnJhZ3MgPSBuZXcgSVhTREZyYWdtZW50W2lkcy5sZW5ndGhdOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnJhZ3MubGVuZ3RoOyBpKyspIHsKLSAgICAgIGZyYWdzW2ldID0gZ2V0RnJhZ21lbnQoaWRzW2ldKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZyYWdzOwotICB9Ci0KLSAgcHVibGljIElYU0RGcmFnbWVudFtdIGdldEFsbEZyYWdtZW50cygpIHsKLSAgICBJWFNERnJhZ21lbnRbXSBmcmFnbWVudHMgPSBuZXcgSVhTREZyYWdtZW50W2ZyYWdtZW50c09yZGVyXy5zaXplKCldOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnJhZ21lbnRzT3JkZXJfLnNpemUoKTsgaSsrKSB7Ci0gICAgICBmcmFnbWVudHNbaV0gPSBnZXRGcmFnbWVudCgoU3RyaW5nKWZyYWdtZW50c09yZGVyXy5nZXQoaSkpOwotICAgIH0KLSAgICByZXR1cm4gZnJhZ21lbnRzOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgcmVtb3ZlRnJhZ21lbnQoU3RyaW5nIGlkKSB7Ci0gICAgcmVtb3ZlRnJhZ21lbnQoaWQsIHRydWUpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgcmVtb3ZlRnJhZ21lbnRzKFN0cmluZ1tdIGlkcykgewotICAgIHJlbW92ZUZyYWdtZW50cyhpZHMsIHRydWUpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgcmVtb3ZlQWxsRnJhZ21lbnRzKCkgewotICAgIHJlbW92ZUFsbEZyYWdtZW50cyh0cnVlKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHJlbW92ZUZyYWdtZW50KFN0cmluZyBpZCwgYm9vbGVhbiByZW1vdmVGcm9tQ29udHJvbGxlcikgewotICAgIGZyYWdtZW50c09yZGVyXy5yZW1vdmUoaWQpOwotICAgIGZyYWdtZW50c18ucmVtb3ZlKGlkKTsKLSAgICBpZiAocmVtb3ZlRnJvbUNvbnRyb2xsZXIpCi0gICAgICBjb250cm9sbGVyXy5yZW1vdmVGcm9tQ2FjaGUoaWQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgcmVtb3ZlRnJhZ21lbnRzKFN0cmluZ1tdIGlkcywgYm9vbGVhbiByZW1vdmVGcm9tQ29udHJvbGxlcikgewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICByZW1vdmVGcmFnbWVudChpZHNbaV0sIHJlbW92ZUZyb21Db250cm9sbGVyKTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCByZW1vdmVBbGxGcmFnbWVudHMoYm9vbGVhbiByZW1vdmVGcm9tQ29udHJvbGxlcikgewotICAgIGlmIChyZW1vdmVGcm9tQ29udHJvbGxlcikKLSAgICB7Ci0gICAgICBFbnVtZXJhdGlvbiBpZHMgPSBmcmFnbWVudHNfLmtleXMoKTsKLSAgICAgIHdoaWxlIChpZHMuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBpZCA9IChTdHJpbmcpaWRzLm5leHRFbGVtZW50KCk7Ci0gICAgICAgIGNvbnRyb2xsZXJfLnJlbW92ZUZyb21DYWNoZShpZCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGZyYWdtZW50c09yZGVyXy5jbGVhcigpOwotICAgIGZyYWdtZW50c18uY2xlYXIoKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgcmVtb3ZlQWxsQXR0cmlidXRlRnJhZ21lbnRzKCkgewotICAgICAgRW51bWVyYXRpb24gaWRzID0gYXR0cmlidXRlRnJhZ21lbnRzXy5rZXlzKCk7Ci0gICAgICB3aGlsZSAoaWRzLmhhc01vcmVFbGVtZW50cygpKQotICAgICAgewotICAgICAgICBTdHJpbmcgaWQgPSAoU3RyaW5nKWlkcy5uZXh0RWxlbWVudCgpOwotICAgICAgICBjb250cm9sbGVyXy5yZW1vdmVGcm9tQ2FjaGUoaWQpOwotICAgICAgfQotICAgIAotICAgICAgYXR0cmlidXRlRnJhZ21lbnRzXy5jbGVhcigpOwotICB9Ci0gIAotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRFNpbXBsZUF0b21pY0RhdGVUaW1lRml4RnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRFNpbXBsZUF0b21pY0RhdGVUaW1lRml4RnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTU3OWM2YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVBdG9taWNEYXRlVGltZUZpeEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uOwotCi1wdWJsaWMgY2xhc3MgWFNEU2ltcGxlQXRvbWljRGF0ZVRpbWVGaXhGcmFnbWVudCBleHRlbmRzIFhTRFNpbXBsZUF0b21pY0ZpeEZyYWdtZW50IHsKLSAgcHJpdmF0ZSBpbnQgY2FsZW5kYXJUeXBlXzsKLSAgcHVibGljIFhTRFNpbXBsZUF0b21pY0RhdGVUaW1lRml4RnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBpbnQgY2FsZW5kYXJUeXBlKSB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZyk7Ci0gICAgY2FsZW5kYXJUeXBlXyA9IGNhbGVuZGFyVHlwZTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRXcml0ZUZyYWdtZW50KCkgewotICAgIFN0cmluZ0J1ZmZlciBmcmFnbWVudExpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVBdG9taWNEYXRlVGltZUZpeFdGcmFnbWVudEpTUC5qc3A/Iik7Ci0gICAgZnJhZ21lbnRMaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuQ0FMRU5EQVJfVFlQRSkuYXBwZW5kKCc9JykuYXBwZW5kKGNhbGVuZGFyVHlwZV8pOwotICAgIHJldHVybiBmcmFnbWVudExpbmsudG9TdHJpbmcoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlQXRvbWljRGF0ZVRpbWVSYW5nZUZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVBdG9taWNEYXRlVGltZVJhbmdlRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTdjZTIyZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVBdG9taWNEYXRlVGltZVJhbmdlRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci0KLXB1YmxpYyBjbGFzcyBYU0RTaW1wbGVBdG9taWNEYXRlVGltZVJhbmdlRnJhZ21lbnQgZXh0ZW5kcyBYU0RTaW1wbGVBdG9taWNSYW5nZUZyYWdtZW50IHsKLSAgcHJpdmF0ZSBpbnQgY2FsZW5kYXJUeXBlXzsKLSAgcHVibGljIFhTRFNpbXBsZUF0b21pY0RhdGVUaW1lUmFuZ2VGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIGludCBjYWxlbmRhclR5cGUpIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnKTsKLSAgICBjYWxlbmRhclR5cGVfID0gY2FsZW5kYXJUeXBlOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXcml0ZUZyYWdtZW50KCkgewotICAgIFN0cmluZ0J1ZmZlciBmcmFnbWVudExpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVBdG9taWNEYXRlVGltZVJhbmdlV0ZyYWdtZW50SlNQLmpzcD8iKTsKLSAgICBmcmFnbWVudExpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5DQUxFTkRBUl9UWVBFKS5hcHBlbmQoJz0nKS5hcHBlbmQoY2FsZW5kYXJUeXBlXyk7Ci0gICAgcmV0dXJuIGZyYWdtZW50TGluay50b1N0cmluZygpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVBdG9taWNFbnVtRml4RnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRFNpbXBsZUF0b21pY0VudW1GaXhGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YmEzZTkyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRFNpbXBsZUF0b21pY0VudW1GaXhGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQudXRpbC5PcHRpb25WZWN0b3I7Ci0KLXB1YmxpYyBjbGFzcyBYU0RTaW1wbGVBdG9taWNFbnVtRml4RnJhZ21lbnQgZXh0ZW5kcyBYU0RTaW1wbGVBdG9taWNFbnVtRnJhZ21lbnQgewotICBwdWJsaWMgWFNEU2ltcGxlQXRvbWljRW51bUZpeEZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgRUxpc3QgZWxpc3QpIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnLCBlbGlzdCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBYU0RTaW1wbGVBdG9taWNFbnVtRml4RnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBPcHRpb25WZWN0b3IgdikKLSAgewotICAgIHN1cGVyKGlkLCBuYW1lLCBjb25maWcsIHYpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRJbmZvcm1hdGlvbkZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlQXRvbWljSW5mb0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFJlYWRGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY1JGcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXcml0ZUZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlQXRvbWljRW51bUZpeFdGcmFnbWVudEpTUC5qc3AiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVBdG9taWNFbnVtRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRFNpbXBsZUF0b21pY0VudW1GcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZGU5ZThlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRFNpbXBsZUF0b21pY0VudW1GcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQudXRpbC5PcHRpb25WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVudW1lcmF0aW9uRmFjZXQ7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBYU0RTaW1wbGVBdG9taWNFbnVtRnJhZ21lbnQgZXh0ZW5kcyBYU0RTaW1wbGVBdG9taWNGcmFnbWVudCB7Ci0gIHByaXZhdGUgT3B0aW9uVmVjdG9yIG9wdGlvblZlY3Rvcl87Ci0gIHB1YmxpYyBYU0RTaW1wbGVBdG9taWNFbnVtRnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBFTGlzdCBlbGlzdCkgewotICAgIHN1cGVyKGlkLCBuYW1lLCBjb25maWcpOwotICAgIG9wdGlvblZlY3Rvcl8gPSBuZXcgT3B0aW9uVmVjdG9yKCk7Ci0gICAgZm9yIChpbnQgaT0wO2k8ZWxpc3Quc2l6ZSgpO2krKykKLSAgICB7Ci0gICAgICBTdHJpbmcgZW51bVZhbHVlID0gKChYU0RFbnVtZXJhdGlvbkZhY2V0KWVsaXN0LmdldChpKSkuZ2V0TGV4aWNhbFZhbHVlKCk7Ci0gICAgICBvcHRpb25WZWN0b3JfLmFkZE9wdGlvbihlbnVtVmFsdWUsZW51bVZhbHVlKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBYU0RTaW1wbGVBdG9taWNFbnVtRnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBPcHRpb25WZWN0b3IgdikKLSAgewotICAgIHN1cGVyKGlkLCBuYW1lLCBjb25maWcpOwotICAgIG9wdGlvblZlY3Rvcl8gPSBuZXcgT3B0aW9uVmVjdG9yKCk7Ci0gICAgZm9yIChpbnQgaT0wO2k8di5zaXplKCk7aSsrKQotICAgICAgb3B0aW9uVmVjdG9yXy5hZGRPcHRpb24odi5nZXREaXNwbGF5VmFsdWUoaSksdi5nZXRWYWx1ZShpKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBPcHRpb25WZWN0b3IgZ2V0T3B0aW9uVmVjdG9yKCkKLSAgewotICAgIHJldHVybiBvcHRpb25WZWN0b3JfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVBdG9taWNFbnVtUmFuZ2VGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlQXRvbWljRW51bVJhbmdlRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGRlNThmMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVBdG9taWNFbnVtUmFuZ2VGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQudXRpbC5PcHRpb25WZWN0b3I7Ci0KLXB1YmxpYyBjbGFzcyBYU0RTaW1wbGVBdG9taWNFbnVtUmFuZ2VGcmFnbWVudCBleHRlbmRzIFhTRFNpbXBsZUF0b21pY0VudW1GcmFnbWVudCB7Ci0gIHB1YmxpYyBYU0RTaW1wbGVBdG9taWNFbnVtUmFuZ2VGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIEVMaXN0IGVsaXN0KSB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZywgZWxpc3QpOwotICB9Ci0gIAotICBwdWJsaWMgWFNEU2ltcGxlQXRvbWljRW51bVJhbmdlRnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBPcHRpb25WZWN0b3IgdikKLSAgewotICAgIHN1cGVyKGlkLCBuYW1lLCBjb25maWcsIHYpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRJbmZvcm1hdGlvbkZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlQXRvbWljSW5mb0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFJlYWRGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY1JGcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXcml0ZUZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlQXRvbWljRW51bVJhbmdlV0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRFNpbXBsZUF0b21pY0ZpeEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVBdG9taWNGaXhGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjg1NjhjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRFNpbXBsZUF0b21pY0ZpeEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uOwotCi1wdWJsaWMgY2xhc3MgWFNEU2ltcGxlQXRvbWljRml4RnJhZ21lbnQgZXh0ZW5kcyBYU0RTaW1wbGVBdG9taWNGcmFnbWVudCB7Ci0gIHB1YmxpYyBYU0RTaW1wbGVBdG9taWNGaXhGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcpIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5mb3JtYXRpb25GcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY0luZm9GcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRSZWFkRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVBdG9taWNSRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3JpdGVGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY0ZpeFdGcmFnbWVudEpTUC5qc3AiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVBdG9taWNGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlQXRvbWljRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGFhNDEwZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVBdG9taWNGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNEU2ltcGxlQXRvbWljRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNpbXBsZVR5cGVEZWZpbml0aW9uOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgWFNEU2ltcGxlQXRvbWljRnJhZ21lbnQgZXh0ZW5kcyBYU0RGcmFnbWVudCBpbXBsZW1lbnRzIElYU0RTaW1wbGVBdG9taWNGcmFnbWVudCB7Ci0gIHB1YmxpYyBYU0RTaW1wbGVBdG9taWNGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcpIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHZhbGlkYXRlUGFyYW1ldGVyVmFsdWUoU3RyaW5nIHBhcmFtS2V5LCBpbnQgcGFyYW1JbmRleCkgewotICAgIFN0cmluZyBwYXJhbSA9IGdldFBhcmFtZXRlclZhbHVlKHBhcmFtS2V5LCBwYXJhbUluZGV4KTsKLSAgICBpZiAocGFyYW0gIT0gbnVsbCAmJiAhKChYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbilnZXRYU0RUeXBlRGVmaW5pdGlvbigpKS5pc1ZhbGlkTGl0ZXJhbChwYXJhbSkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRFNpbXBsZUF0b21pY1JhbmdlRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRFNpbXBsZUF0b21pY1JhbmdlRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTU3NTgwMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVBdG9taWNSYW5nZUZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uOwotCi1wdWJsaWMgY2xhc3MgWFNEU2ltcGxlQXRvbWljUmFuZ2VGcmFnbWVudCBleHRlbmRzIFhTRFNpbXBsZUF0b21pY0ZyYWdtZW50IHsKLSAgcHVibGljIFhTRFNpbXBsZUF0b21pY1JhbmdlRnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnKSB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZyk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEluZm9ybWF0aW9uRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVBdG9taWNJbmZvRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVhZEZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlQXRvbWljUkZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdyaXRlRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVBdG9taWNSYW5nZVdGcmFnbWVudEpTUC5qc3AiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVMaXN0Rml4RnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRFNpbXBsZUxpc3RGaXhGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTMzNjZmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRFNpbXBsZUxpc3RGaXhGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29udHJvbGxlcjsKLQotcHVibGljIGNsYXNzIFhTRFNpbXBsZUxpc3RGaXhGcmFnbWVudCBleHRlbmRzIFhTRFNpbXBsZUxpc3RGcmFnbWVudCB7Ci0gIHB1YmxpYyBYU0RTaW1wbGVMaXN0Rml4RnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZywgY29udHJvbGxlcik7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEluZm9ybWF0aW9uRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0REZWZhdWx0SW5mb0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFJlYWRGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUxpc3RSRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V3JpdGVGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUxpc3RGaXhXRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVMaXN0RnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRFNpbXBsZUxpc3RGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNmM2NjYxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRFNpbXBsZUxpc3RGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIxNyAgIDEyNzEzOCBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLkZyYWdtZW50Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNEU2ltcGxlTGlzdEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LlhTRFRvRnJhZ21lbnRDb250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RMZW5ndGhGYWNldDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETWF4TGVuZ3RoRmFjZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE1pbkxlbmd0aEZhY2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTaW1wbGVUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci1pbXBvcnQgY29tLmlibS5pY3UudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBYU0RTaW1wbGVMaXN0RnJhZ21lbnQgZXh0ZW5kcyBYU0RNYXBGcmFnbWVudCBpbXBsZW1lbnRzIElYU0RTaW1wbGVMaXN0RnJhZ21lbnQKLXsKLSAgcHVibGljIFhTRFNpbXBsZUxpc3RGcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnLCBjb250cm9sbGVyKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlci5zZXROYW1lKG5hbWUpOwotICAgIElYU0RGcmFnbWVudFtdIGZyYWdtZW50cyA9IGdldEFsbEZyYWdtZW50cygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnJhZ21lbnRzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGZyYWdtZW50c1tpXS5zZXROYW1lKG5hbWUpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHNldFBhcmFtZXRlclZhbHVlc0Zyb21JbnN0YW5jZURvY3VtZW50cyhFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMpCi0gIHsKLSAgICBFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHNDb3B5ID0gZ2V0SW5zdGFuY2VEb2N1bWVudHNCeVRhZ05hbWUoaW5zdGFuY2VEb2N1bWVudHMsIGdldE5hbWUoKSk7Ci0gICAgU3RyaW5nW10gcGFyYW1zID0gbmV3IFN0cmluZ1tpbnN0YW5jZURvY3VtZW50c0NvcHkubGVuZ3RoXTsKLSAgICBib29sZWFuIHBhcmFtc1ZhbGlkID0gaW50ZXJuYWxFcXVhbHMoaW5zdGFuY2VEb2N1bWVudHNDb3B5LCBpbnN0YW5jZURvY3VtZW50cyk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YW5jZURvY3VtZW50c0NvcHkubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgcGFyYW1zW2ldID0gIiI7Ci0gICAgICBOb2RlTGlzdCBub2RlTGlzdCA9IGluc3RhbmNlRG9jdW1lbnRzQ29weVtpXS5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICBpZiAobm9kZUxpc3QuZ2V0TGVuZ3RoKCkgPiAwKQotICAgICAgewotICAgICAgICBOb2RlIG5vZGUgPSBub2RlTGlzdC5pdGVtKDApOwotICAgICAgICBpZiAobm9kZUxpc3QuZ2V0TGVuZ3RoKCkgPiAxKQotICAgICAgICAgIHBhcmFtc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIGlmIChub2RlLmdldE5vZGVUeXBlKCkgIT0gTm9kZS5URVhUX05PREUpCi0gICAgICAgICAgcGFyYW1zVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHBhcmFtc1tpXSA9IG5vZGUuZ2V0Tm9kZVZhbHVlKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIHBhcmFtc1ZhbGlkID0gZmFsc2U7Ci0gICAgfQotICAgIHJlbW92ZUFsbEZyYWdtZW50cygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIElYU0RGcmFnbWVudCBjaGlsZEZyYWcgPSBnZXRGcmFnbWVudChjcmVhdGVMaXN0SW5zdGFuY2UoKSk7Ci0gICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHBhcmFtc1tpXS50cmltKCkpOwotICAgICAgU3RyaW5nW10gY2hpbGRQYXJhbXMgPSBuZXcgU3RyaW5nW3N0LmNvdW50VG9rZW5zKCldOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjaGlsZFBhcmFtcy5sZW5ndGg7IGorKykKLSAgICAgIHsKLSAgICAgICAgY2hpbGRQYXJhbXNbal0gPSBzdC5uZXh0VG9rZW4oKTsKLSAgICAgIH0KLSAgICAgIGNoaWxkRnJhZy5zZXRQYXJhbWV0ZXJWYWx1ZXMoY2hpbGRGcmFnLmdldElEKCksIGNoaWxkUGFyYW1zKTsKLSAgICAgIHBhcmFtc1ZhbGlkID0gcGFyYW1zVmFsaWQgJiYgY2hpbGRGcmFnLnZhbGlkYXRlQWxsUGFyYW1ldGVyVmFsdWVzKCk7Ci0gICAgfQotICAgIHJldHVybiBwYXJhbXNWYWxpZDsKLSAgfQotCi0gIHB1YmxpYyBFbGVtZW50W10gZ2VuSW5zdGFuY2VEb2N1bWVudHNGcm9tUGFyYW1ldGVyVmFsdWVzKGJvb2xlYW4gZ2VuWFNJVHlwZSwgSGFzaHRhYmxlIG5hbWVzcGFjZVRhYmxlLCBEb2N1bWVudCBkb2MpCi0gIHsKLSAgICBJWFNERnJhZ21lbnRbXSBmcmFnbWVudHMgPSBnZXRBbGxGcmFnbWVudHMoKTsKLSAgICBFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMgPSBuZXcgRWxlbWVudFtmcmFnbWVudHMubGVuZ3RoXTsKLSAgICBTdHJpbmcgdGFnTmFtZSA9IGdldEluc3RhbmNlRG9jdW1lbnRUYWdOYW1lKG5hbWVzcGFjZVRhYmxlKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGZyYWdtZW50cy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBFbGVtZW50IGluc3RhbmNlRG9jdW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTsKLSAgICAgIFN0cmluZ0J1ZmZlciBsaXN0VmFsdWUgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICBTdHJpbmdbXSBwYXJhbXMgPSBmcmFnbWVudHNbaV0uZ2V0UGFyYW1ldGVyVmFsdWVzKGZyYWdtZW50c1tpXS5nZXRJRCgpKTsKLSAgICAgIGZvciAoaW50IGogPSAwOyBwYXJhbXMgIT0gbnVsbCAmJiBqIDwgcGFyYW1zLmxlbmd0aDsgaisrKQotICAgICAgewotICAgICAgICBpZiAoaiAhPSAwKQotICAgICAgICAgIGxpc3RWYWx1ZS5hcHBlbmQoRnJhZ21lbnRDb25zdGFudHMuTElTVF9TRVBFUkFUT1IpOwotICAgICAgICBsaXN0VmFsdWUuYXBwZW5kKHBhcmFtc1tqXSk7Ci0gICAgICB9Ci0gICAgICBOb2RlIHRleHROb2RlID0gZG9jLmNyZWF0ZVRleHROb2RlKGxpc3RWYWx1ZS50b1N0cmluZygpKTsKLSAgICAgIGluc3RhbmNlRG9jdW1lbnQuYXBwZW5kQ2hpbGQodGV4dE5vZGUpOwotICAgICAgaW5zdGFuY2VEb2N1bWVudHNbaV0gPSBpbnN0YW5jZURvY3VtZW50OwotICAgIH0KLSAgICByZXR1cm4gKGdlblhTSVR5cGUgPyBhZGRYU0lUeXBlKGluc3RhbmNlRG9jdW1lbnRzLCBuYW1lc3BhY2VUYWJsZSkgOiBpbnN0YW5jZURvY3VtZW50cyk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGNyZWF0ZUxpc3RJbnN0YW5jZSgpCi0gIHsKLSAgICBTdHJpbmcgbmV3SUQgPSBnZW5JRCgpOwotICAgIFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uIHNpbXBsZVR5cGUgPSAoWFNEU2ltcGxlVHlwZURlZmluaXRpb24pZ2V0WFNEVHlwZURlZmluaXRpb24oKTsKLSAgICBpbnQgbWluID0gMDsKLSAgICBpbnQgbWF4ID0gRnJhZ21lbnRDb25zdGFudHMuVU5CT1VOREVEOwotICAgIFhTRExlbmd0aEZhY2V0IHhzZExlbmd0aEZhY2V0ID0gc2ltcGxlVHlwZS5nZXRMZW5ndGhGYWNldCgpOwotICAgIC8vIHBvcnQgdG8gb3JnLmVjbGlwc2UueHNkCi0gICAgaWYgKHhzZExlbmd0aEZhY2V0ICE9IG51bGwpCi0gICAgewotICAgICAgbWluID0geHNkTGVuZ3RoRmFjZXQuZ2V0VmFsdWUoKTsKLSAgICAgIG1heCA9IHhzZExlbmd0aEZhY2V0LmdldFZhbHVlKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBYU0RNaW5MZW5ndGhGYWNldCB4c2RNaW5MZW5ndGhGYWNldCA9IHNpbXBsZVR5cGUuZ2V0TWluTGVuZ3RoRmFjZXQoKTsKLSAgICAgIFhTRE1heExlbmd0aEZhY2V0IHhzZE1heExlbmd0aEZhY2V0ID0gc2ltcGxlVHlwZS5nZXRNYXhMZW5ndGhGYWNldCgpOwotICAgICAgLy8gcG9ydCB0byBvcmcuZWNsaXBzZS54c2QKLSAgICAgIGlmICh4c2RNaW5MZW5ndGhGYWNldCAhPSBudWxsKQotICAgICAgICBtaW4gPSB4c2RNaW5MZW5ndGhGYWNldC5nZXRWYWx1ZSgpOwotICAgICAgaWYgKHhzZE1heExlbmd0aEZhY2V0ICE9IG51bGwpCi0gICAgICAgIG1heCA9IHhzZE1heExlbmd0aEZhY2V0LmdldFZhbHVlKCk7Ci0gICAgfQotICAgIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHRoaXNDb25maWcgPSBnZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotICAgIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IG5ldyBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotICAgIHhzZENvbmZpZy5zZXRYU0RDb21wb25lbnQoc2ltcGxlVHlwZS5nZXRJdGVtVHlwZURlZmluaXRpb24oKSk7Ci0gICAgeHNkQ29uZmlnLnNldFN0eWxlKHRoaXNDb25maWcuZ2V0U3R5bGUoKSk7Ci0gICAgeHNkQ29uZmlnLnNldFBhcnRFbmNvZGluZyh0aGlzQ29uZmlnLmdldFBhcnRFbmNvZGluZygpKTsKLSAgICB4c2RDb25maWcuc2V0V1NETFBhcnROYW1lKHRoaXNDb25maWcuZ2V0V1NETFBhcnROYW1lKCkpOwotICAgIHhzZENvbmZpZy5zZXRNaW5PY2N1cnMobWluKTsKLSAgICB4c2RDb25maWcuc2V0TWF4T2NjdXJzKG1heCk7Ci0gICAgSVhTREZyYWdtZW50IGZyYWcgPSBnZXRYU0RUb0ZyYWdtZW50Q29udHJvbGxlcigpLmdldEZyYWdtZW50KHhzZENvbmZpZywgbmV3SUQsIGdldE5hbWUoKSk7Ci0gICAgZnJhZy5zZXRJRChuZXdJRCk7Ci0gICAgZnJhZy5zZXROYW1lKGdldE5hbWUoKSk7Ci0gICAgYWRkRnJhZ21lbnQobmV3SUQsIGZyYWcpOwotICAgIHJldHVybiBuZXdJRDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgY3JlYXRlSW5zdGFuY2UoKQotICB7Ci0gICAgcmV0dXJuIGNyZWF0ZUxpc3RJbnN0YW5jZSgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVMaXN0UmFuZ2VGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlTGlzdFJhbmdlRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTE4NTg0Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVMaXN0UmFuZ2VGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29udHJvbGxlcjsKLQotcHVibGljIGNsYXNzIFhTRFNpbXBsZUxpc3RSYW5nZUZyYWdtZW50IGV4dGVuZHMgWFNEU2ltcGxlTGlzdEZyYWdtZW50IHsKLSAgcHVibGljIFhTRFNpbXBsZUxpc3RSYW5nZUZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgY29udHJvbGxlcikgewotICAgIHN1cGVyKGlkLCBuYW1lLCBjb25maWcsIGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRJbmZvcm1hdGlvbkZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNERGVmYXVsdEluZm9GcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRSZWFkRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVMaXN0UkZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdyaXRlRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVMaXN0UmFuZ2VXRnJhZ21lbnRKU1AuanNwIjsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVVbmlvbkZpeEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVVbmlvbkZpeEZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczMmM5M2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlVW5pb25GaXhGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29udHJvbGxlcjsKLQotcHVibGljIGNsYXNzIFhTRFNpbXBsZVVuaW9uRml4RnJhZ21lbnQgZXh0ZW5kcyBYU0RTaW1wbGVVbmlvbkZyYWdtZW50IHsKLSAgcHVibGljIFhTRFNpbXBsZVVuaW9uRml4RnJhZ21lbnQoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24gY29uZmlnLCBYU0RUb0ZyYWdtZW50Q29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgc3VwZXIoaWQsIG5hbWUsIGNvbmZpZywgY29udHJvbGxlcik7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEluZm9ybWF0aW9uRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0REZWZhdWx0SW5mb0ZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFJlYWRGcmFnbWVudCgpIHsKLSAgICByZXR1cm4gIi93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZVVuaW9uUkZyYWdtZW50SlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdyaXRlRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVVbmlvbkZpeFdGcmFnbWVudEpTUC5qc3AiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVVbmlvbkZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVVbmlvbkZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2ZmM4MTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L2ltcGwvWFNEU2ltcGxlVW5pb25GcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNEU2ltcGxlVW5pb25GcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2ltcGxlVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFhTRFNpbXBsZVVuaW9uRnJhZ21lbnQgZXh0ZW5kcyBYU0RNYXBGcmFnbWVudCBpbXBsZW1lbnRzIElYU0RTaW1wbGVVbmlvbkZyYWdtZW50IHsKLSAgcHJpdmF0ZSBYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbltdIG1lbWJlclR5cGVzXzsKLQotICBwdWJsaWMgWFNEU2ltcGxlVW5pb25GcmFnbWVudChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiBjb25maWcsIFhTRFRvRnJhZ21lbnRDb250cm9sbGVyIGNvbnRyb2xsZXIpIHsKLSAgICBzdXBlcihpZCwgbmFtZSwgY29uZmlnLCBjb250cm9sbGVyKTsKLSAgICBtZW1iZXJUeXBlc18gPSBudWxsOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkgewotICAgIHN1cGVyLnNldE5hbWUobmFtZSk7Ci0gICAgSVhTREZyYWdtZW50W10gZnJhZ21lbnRzID0gZ2V0QWxsRnJhZ21lbnRzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcmFnbWVudHMubGVuZ3RoOyBpKyspIHsKLSAgICAgIGZyYWdtZW50c1tpXS5zZXROYW1lKG5hbWUpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHNldFBhcmFtZXRlclZhbHVlc0Zyb21JbnN0YW5jZURvY3VtZW50cyhFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMpIHsKLSAgICBFbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHNDb3B5ID0gZ2V0SW5zdGFuY2VEb2N1bWVudHNCeVRhZ05hbWUoaW5zdGFuY2VEb2N1bWVudHMsIGdldE5hbWUoKSk7Ci0gICAgaW50IG51bVR5cGVzID0gZ2V0TWVtYmVyVHlwZURlZmluaXRpb25zKCkubGVuZ3RoOwotICAgIGJvb2xlYW4gcGFyYW1zVmFsaWQgPSBpbnRlcm5hbEVxdWFscyhpbnN0YW5jZURvY3VtZW50c0NvcHksIGluc3RhbmNlRG9jdW1lbnRzKTsKLSAgICBWZWN0b3IgbWVtYmVyRnJhZ21lbnRzID0gbmV3IFZlY3RvcigpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFuY2VEb2N1bWVudHNDb3B5Lmxlbmd0aDsgaSsrKSB7Ci0gICAgICBJWFNERnJhZ21lbnQgY29tcGF0aWJsZUZyYWcgPSBudWxsOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBudW1UeXBlczsgaisrKSB7Ci0gICAgICAgIElYU0RGcmFnbWVudCBtZW1iZXJGcmFnID0gZ2V0RnJhZ21lbnQoY3JlYXRlVW5pb25JbnN0YW5jZShqKSk7Ci0gICAgICAgIEVsZW1lbnRbXSBtZW1iZXJJbnN0YW5jZURvY3VtZW50ID0gbmV3IEVsZW1lbnRbMV07Ci0gICAgICAgIG1lbWJlckluc3RhbmNlRG9jdW1lbnRbMF0gPSBzZXRFbGVtZW50VGFnTmFtZShpbnN0YW5jZURvY3VtZW50c0NvcHlbaV0sIG1lbWJlckZyYWcuZ2V0TmFtZSgpKTsKLSAgICAgICAgaWYgKG1lbWJlckZyYWcuc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKG1lbWJlckluc3RhbmNlRG9jdW1lbnQpKSB7Ci0gICAgICAgICAgaWYgKG1lbWJlckZyYWcudmFsaWRhdGVBbGxQYXJhbWV0ZXJWYWx1ZXMoKSkgewotICAgICAgICAgICAgY29tcGF0aWJsZUZyYWcgPSBtZW1iZXJGcmFnOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UgaWYgKGNvbXBhdGlibGVGcmFnID09IG51bGwpCi0gICAgICAgICAgICBjb21wYXRpYmxlRnJhZyA9IG1lbWJlckZyYWc7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmIChjb21wYXRpYmxlRnJhZyAhPSBudWxsKQotICAgICAgICBtZW1iZXJGcmFnbWVudHMuYWRkKGNvbXBhdGlibGVGcmFnKTsKLSAgICAgIGVsc2UKLSAgICAgICAgcGFyYW1zVmFsaWQgPSBmYWxzZTsKLSAgICB9Ci0gICAgcmVtb3ZlQWxsRnJhZ21lbnRzKCk7Ci0gICAgYWRkRnJhZ21lbnRzKG1lbWJlckZyYWdtZW50cyk7Ci0gICAgcmV0dXJuIHBhcmFtc1ZhbGlkOwotICB9Ci0KLSAgcHVibGljIEVsZW1lbnRbXSBnZW5JbnN0YW5jZURvY3VtZW50c0Zyb21QYXJhbWV0ZXJWYWx1ZXMoYm9vbGVhbiBnZW5YU0lUeXBlLCBIYXNodGFibGUgbmFtZXNwYWNlVGFibGUsIERvY3VtZW50IGRvYykgewotICAgIElYU0RGcmFnbWVudFtdIGZyYWdtZW50cyA9IGdldEFsbEZyYWdtZW50cygpOwotICAgIFZlY3RvciBpbnN0YW5jZURvY3VtZW50c0NvcHkgPSBuZXcgVmVjdG9yKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcmFnbWVudHMubGVuZ3RoOyBpKyspIHsKLSAgICAgIEVsZW1lbnRbXSBmcmFnbWVudEluc3RhbmNlcyA9IGZyYWdtZW50c1tpXS5nZW5JbnN0YW5jZURvY3VtZW50c0Zyb21QYXJhbWV0ZXJWYWx1ZXMoZ2VuWFNJVHlwZSwgbmFtZXNwYWNlVGFibGUsIGRvYyk7Ci0gICAgICBpZiAoZnJhZ21lbnRJbnN0YW5jZXMubGVuZ3RoID4gMCkKLSAgICAgICAgaW5zdGFuY2VEb2N1bWVudHNDb3B5LmFkZChmcmFnbWVudEluc3RhbmNlc1swXSk7Ci0gICAgfQotICAgIEVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cyA9IG5ldyBFbGVtZW50W2luc3RhbmNlRG9jdW1lbnRzQ29weS5zaXplKCldOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFuY2VEb2N1bWVudHMubGVuZ3RoOyBpKyspIHsKLSAgICAgIGluc3RhbmNlRG9jdW1lbnRzW2ldID0gKEVsZW1lbnQpaW5zdGFuY2VEb2N1bWVudHNDb3B5LmdldChpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHNldEVsZW1lbnRzVGFnTmFtZShpbnN0YW5jZURvY3VtZW50cywgZ2V0SW5zdGFuY2VEb2N1bWVudFRhZ05hbWUobmFtZXNwYWNlVGFibGUpKTsKLSAgfQotCi0gIHB1YmxpYyBYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbltdIGdldE1lbWJlclR5cGVEZWZpbml0aW9ucygpIHsKLSAgICBpZiAobWVtYmVyVHlwZXNfID09IG51bGwpIHsKLSAgICAgIEVMaXN0IG1lbWJlclR5cGVzID0gKChYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbilnZXRYU0RUeXBlRGVmaW5pdGlvbigpKS5nZXRNZW1iZXJUeXBlRGVmaW5pdGlvbnMoKTsKLSAgICAgIG1lbWJlclR5cGVzXyA9IG5ldyBYU0RTaW1wbGVUeXBlRGVmaW5pdGlvblttZW1iZXJUeXBlcy5zaXplKCldOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtZW1iZXJUeXBlc18ubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgbWVtYmVyVHlwZXNfW2ldID0gKFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uKW1lbWJlclR5cGVzLmdldChpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG1lbWJlclR5cGVzXzsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgY3JlYXRlVW5pb25JbnN0YW5jZShpbnQgbWVtYmVyVHlwZUluZGV4KSB7Ci0gICAgZ2V0TWVtYmVyVHlwZURlZmluaXRpb25zKCk7Ci0gICAgaWYgKG1lbWJlclR5cGVJbmRleCA8IDAgfHwgbWVtYmVyVHlwZUluZGV4ID4gbWVtYmVyVHlwZXNfLmxlbmd0aCAtIDEpCi0gICAgICByZXR1cm4gbnVsbDsKLSAgICBTdHJpbmcgbmV3SUQgPSBnZW5JRCgpOwotICAgIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHRoaXNDb25maWcgPSBnZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotICAgIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IG5ldyBYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotICAgIHhzZENvbmZpZy5zZXRYU0RDb21wb25lbnQobWVtYmVyVHlwZXNfW21lbWJlclR5cGVJbmRleF0pOwotICAgIHhzZENvbmZpZy5zZXRTdHlsZSh0aGlzQ29uZmlnLmdldFN0eWxlKCkpOwotICAgIHhzZENvbmZpZy5zZXRQYXJ0RW5jb2RpbmcodGhpc0NvbmZpZy5nZXRQYXJ0RW5jb2RpbmcoKSk7Ci0gICAgeHNkQ29uZmlnLnNldFdTRExQYXJ0TmFtZSh0aGlzQ29uZmlnLmdldFdTRExQYXJ0TmFtZSgpKTsKLSAgICBJWFNERnJhZ21lbnQgZnJhZyA9IGdldFhTRFRvRnJhZ21lbnRDb250cm9sbGVyKCkuZ2V0RnJhZ21lbnQoeHNkQ29uZmlnLCBuZXdJRCwgZ2V0TmFtZSgpKTsKLSAgICBmcmFnLnNldElEKG5ld0lEKTsKLSAgICBmcmFnLnNldE5hbWUoZ2V0TmFtZSgpKTsKLSAgICBhZGRGcmFnbWVudChuZXdJRCwgZnJhZyk7Ci0gICAgcmV0dXJuIG5ld0lEOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBjcmVhdGVJbnN0YW5jZSgpIHsKLSAgICByZXR1cm4gY3JlYXRlVW5pb25JbnN0YW5jZSgwKTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvaW1wbC9YU0RTaW1wbGVVbmlvblJhbmdlRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRFNpbXBsZVVuaW9uUmFuZ2VGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDg0YjZkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC9pbXBsL1hTRFNpbXBsZVVuaW9uUmFuZ2VGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5YU0RUb0ZyYWdtZW50Q29udHJvbGxlcjsKLQotcHVibGljIGNsYXNzIFhTRFNpbXBsZVVuaW9uUmFuZ2VGcmFnbWVudCBleHRlbmRzIFhTRFNpbXBsZVVuaW9uRnJhZ21lbnQgewotICBwdWJsaWMgWFNEU2ltcGxlVW5pb25SYW5nZUZyYWdtZW50KFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIGNvbmZpZywgWFNEVG9GcmFnbWVudENvbnRyb2xsZXIgY29udHJvbGxlcikgewotICAgIHN1cGVyKGlkLCBuYW1lLCBjb25maWcsIGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRJbmZvcm1hdGlvbkZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNERGVmYXVsdEluZm9GcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRSZWFkRnJhZ21lbnQoKSB7Ci0gICAgcmV0dXJuICIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVVbmlvblJGcmFnbWVudEpTUC5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXcml0ZUZyYWdtZW50KCkgewotICAgIHJldHVybiAiL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlVW5pb25SYW5nZVdGcmFnbWVudEpTUC5qc3AiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvdXRpbC9IVFRQVXRpbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L3V0aWwvSFRUUFV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzk2NWM4Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvdXRpbC9IVFRQVXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUuYXhpcy5Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVVJMVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLkZyYWdtZW50Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNEU2ltcGxlQXRvbWljRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuSVhTRFNpbXBsZUxpc3RGcmFnbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgSFRUUFV0aWwKLXsKLSAgcHJpdmF0ZSBIVFRQVXRpbCgpCi0gIHsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdlblVSTEVuY29kZWRQYXJhbWV0ZXJzKElYU0RGcmFnbWVudCBmcmFnbWVudCkKLSAgewotICAgIGlmIChmcmFnbWVudCBpbnN0YW5jZW9mIElYU0RTaW1wbGVMaXN0RnJhZ21lbnQpCi0gICAgICByZXR1cm4gZ2VuVVJMRW5jb2RlZFBhcmFtc0Zyb21MaXN0RnJhZ21lbnQoKElYU0RTaW1wbGVMaXN0RnJhZ21lbnQpZnJhZ21lbnQpOwotICAgIGVsc2UgaWYgKGZyYWdtZW50IGluc3RhbmNlb2YgSVhTRFNpbXBsZUF0b21pY0ZyYWdtZW50KQotICAgICAgcmV0dXJuIGdlblVSTEVuY29kZWRQYXJhbXNGcm9tQXRvbWljRnJhZ21lbnQoKElYU0RTaW1wbGVBdG9taWNGcmFnbWVudClmcmFnbWVudCk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGdlblVSTEVuY29kZWRYTUxQYXJhbWV0ZXJzKGZyYWdtZW50KTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIFN0cmluZyBnZW5VUkxFbmNvZGVkUGFyYW1zRnJvbUF0b21pY0ZyYWdtZW50KElYU0RTaW1wbGVBdG9taWNGcmFnbWVudCBmcmFnbWVudCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciB1cmxFbmNvZGVkUGFyYW0gPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgU3RyaW5nW10gcGFyYW1zID0gZnJhZ21lbnQuZ2V0UGFyYW1ldGVyVmFsdWVzKGZyYWdtZW50LmdldElEKCkpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIHVybEVuY29kZWRQYXJhbS5hcHBlbmQoVVJMVXRpbHMuZW5jb2RlKGZyYWdtZW50LmdldE5hbWUoKSkpOwotICAgICAgdXJsRW5jb2RlZFBhcmFtLmFwcGVuZCgiPSIpOwotICAgICAgdXJsRW5jb2RlZFBhcmFtLmFwcGVuZChVUkxVdGlscy5lbmNvZGUocGFyYW1zW2ldKSk7Ci0gICAgICBpZiAoaSA8IHBhcmFtcy5sZW5ndGggLSAxKQotICAgICAgICB1cmxFbmNvZGVkUGFyYW0uYXBwZW5kKCImIik7Ci0gICAgfQotICAgIHJldHVybiB1cmxFbmNvZGVkUGFyYW0udG9TdHJpbmcoKTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIFN0cmluZyBnZW5VUkxFbmNvZGVkUGFyYW1zRnJvbUxpc3RGcmFnbWVudChJWFNEU2ltcGxlTGlzdEZyYWdtZW50IGZyYWdtZW50KQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIHVybEVuY29kZWRQYXJhbSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBJWFNERnJhZ21lbnRbXSBjaGlsZEZyYWdzID0gZnJhZ21lbnQuZ2V0QWxsRnJhZ21lbnRzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZEZyYWdzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIHVybEVuY29kZWRQYXJhbS5hcHBlbmQoVVJMVXRpbHMuZW5jb2RlKGZyYWdtZW50LmdldE5hbWUoKSkpOwotICAgICAgdXJsRW5jb2RlZFBhcmFtLmFwcGVuZCgiPSIpOwotICAgICAgU3RyaW5nW10gcGFyYW1zID0gY2hpbGRGcmFnc1tpXS5nZXRQYXJhbWV0ZXJWYWx1ZXMoY2hpbGRGcmFnc1tpXS5nZXRJRCgpKTsKLSAgICAgIFN0cmluZ0J1ZmZlciBwYXJhbUJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcGFyYW1zLmxlbmd0aDsgaisrKQotICAgICAgewotICAgICAgICBwYXJhbUJ1ZmZlci5hcHBlbmQocGFyYW1zW2pdKTsKLSAgICAgICAgaWYgKGogPCBwYXJhbXMubGVuZ3RoIC0gMSkKLSAgICAgICAgICBwYXJhbUJ1ZmZlci5hcHBlbmQoRnJhZ21lbnRDb25zdGFudHMuTElTVF9TRVBFUkFUT1IpOwotICAgICAgfQotICAgICAgdXJsRW5jb2RlZFBhcmFtLmFwcGVuZChVUkxVdGlscy5lbmNvZGUocGFyYW1CdWZmZXIudG9TdHJpbmcoKSkpOwotICAgICAgaWYgKGkgPCBjaGlsZEZyYWdzLmxlbmd0aCAtIDEpCi0gICAgICAgIHVybEVuY29kZWRQYXJhbS5hcHBlbmQoIiYiKTsKLSAgICB9Ci0gICAgcmV0dXJuIHVybEVuY29kZWRQYXJhbS50b1N0cmluZygpOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdlblVSTEVuY29kZWRYTUxQYXJhbWV0ZXJzKElYU0RGcmFnbWVudCBmcmFnbWVudCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciB1cmxFbmNvZGVkUGFyYW0gPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgSGFzaHRhYmxlIHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLnB1dChDb25zdGFudHMuVVJJX1NPQVAxMV9FTlYsIENvbnN0YW50cy5OU19QUkVGSVhfU09BUF9FTlYpOwotICAgIHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLnB1dChDb25zdGFudHMuVVJJXzIwMDFfU0NIRU1BX1hTSSwgQ29uc3RhbnRzLk5TX1BSRUZJWF9TQ0hFTUFfWFNJKTsKLSAgICBzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZS5wdXQoQ29uc3RhbnRzLlVSSV8yMDAxX1NDSEVNQV9YU0QsIENvbnN0YW50cy5OU19QUkVGSVhfU0NIRU1BX1hTRCk7Ci0gICAgRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzID0gbmV3IEVsZW1lbnRbMF07Ci0gICAgdHJ5Ci0gICAgewotICAgICAgaW5zdGFuY2VEb2N1bWVudHMgPSBmcmFnbWVudC5nZW5JbnN0YW5jZURvY3VtZW50c0Zyb21QYXJhbWV0ZXJWYWx1ZXModHJ1ZSwgc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUsIFhNTFV0aWxzLmNyZWF0ZU5ld0RvY3VtZW50KG51bGwpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gcGNlKQotICAgIHsKLSAgICB9Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YW5jZURvY3VtZW50cy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICB1cmxFbmNvZGVkUGFyYW0uYXBwZW5kKFVSTFV0aWxzLmVuY29kZShmcmFnbWVudC5nZXROYW1lKCkpKTsKLSAgICAgIHVybEVuY29kZWRQYXJhbS5hcHBlbmQoIj0iKTsKLSAgICAgIHVybEVuY29kZWRQYXJhbS5hcHBlbmQoVVJMVXRpbHMuZW5jb2RlKFhNTFV0aWxzLnNlcmlhbGl6ZShpbnN0YW5jZURvY3VtZW50c1tpXSwgdHJ1ZSkpKTsKLSAgICAgIGlmIChpIDwgaW5zdGFuY2VEb2N1bWVudHMubGVuZ3RoIC0gMSkKLSAgICAgICAgdXJsRW5jb2RlZFBhcmFtLmFwcGVuZCgiJiIpOwotICAgIH0KLSAgICByZXR1cm4gdXJsRW5jb2RlZFBhcmFtLnRvU3RyaW5nKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9mcmFnbWVudC91dGlsL09wdGlvblZlY3Rvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L3V0aWwvT3B0aW9uVmVjdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3YWU1YjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L3V0aWwvT3B0aW9uVmVjdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQudXRpbDsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLXB1YmxpYyBjbGFzcyBPcHRpb25WZWN0b3IKLXsKLSAgcHJpdmF0ZSBWZWN0b3Igb3B0aW9uc187Ci0gIAotICBwdWJsaWMgT3B0aW9uVmVjdG9yKCkKLSAgewotICAgIG9wdGlvbnNfID0gbmV3IFZlY3RvcigpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBhZGRPcHRpb24oU3RyaW5nIGRpc3BsYXlWYWx1ZSxTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBvcHRpb25zXy5hZGRFbGVtZW50KG5ldyBPcHRpb24oZGlzcGxheVZhbHVlLHZhbHVlKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RGlzcGxheVZhbHVlKGludCBwb3NpdGlvbikKLSAgewotICAgIE9wdGlvbiBvcHRpb24gPSAoT3B0aW9uKW9wdGlvbnNfLmVsZW1lbnRBdChwb3NpdGlvbik7Ci0gICAgcmV0dXJuIG9wdGlvbi5nZXREaXNwbGF5VmFsdWUoKTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRWYWx1ZShpbnQgcG9zaXRpb24pCi0gIHsKLSAgICBPcHRpb24gb3B0aW9uID0gKE9wdGlvbilvcHRpb25zXy5lbGVtZW50QXQocG9zaXRpb24pOwotICAgIHJldHVybiBvcHRpb24uZ2V0VmFsdWUoKTsKLSAgfQotICAKLSAgcHVibGljIGludCBzaXplKCkKLSAgewotICAgIHJldHVybiBvcHRpb25zXy5zaXplKCk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgZmluYWwgY2xhc3MgT3B0aW9uCi0gIHsKLSAgICBwcml2YXRlIFN0cmluZyBkaXNwbGF5VmFsdWVfOwotICAgIHByaXZhdGUgU3RyaW5nIHZhbHVlXzsKLSAgICBwdWJsaWMgT3B0aW9uKFN0cmluZyBkaXNwbGF5VmFsdWUsU3RyaW5nIHZhbHVlKQotICAgIHsKLSAgICAgIGRpc3BsYXlWYWx1ZV8gPSBkaXNwbGF5VmFsdWU7Ci0gICAgICB2YWx1ZV8gPSB2YWx1ZTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXREaXNwbGF5VmFsdWUoKQotICAgIHsKLSAgICAgIHJldHVybiBkaXNwbGF5VmFsdWVfOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFZhbHVlKCkKLSAgICB7Ci0gICAgICByZXR1cm4gdmFsdWVfOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL2ZyYWdtZW50L3V0aWwvWFNEVHlwZURlZmluaXRpb25VdGlsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvdXRpbC9YU0RUeXBlRGVmaW5pdGlvblV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM1OWUxOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvZnJhZ21lbnQvdXRpbC9YU0RUeXBlRGVmaW5pdGlvblV0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQudXRpbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5GcmFnbWVudENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29tcGxleFR5cGVDb250ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wbGV4VHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFR5cGVEZWZpbml0aW9uOwotCi1wdWJsaWMgY2xhc3MgWFNEVHlwZURlZmluaXRpb25VdGlsIHsKLSAgcHJpdmF0ZSBYU0RUeXBlRGVmaW5pdGlvblV0aWwoKSB7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNYU0RCdWlsdEluVHlwZURlZmluaXRpb24oWFNEVHlwZURlZmluaXRpb24gdHlwZSkgewotICAgIGlmICh0eXBlID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgU3RyaW5nIG5zID0gdHlwZS5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLSAgICByZXR1cm4gKG5zICE9IG51bGwgJiYgbnMuZXF1YWxzKEZyYWdtZW50Q29uc3RhbnRzLlVSSV9YU0QpKTsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzUm9vdFR5cGVEZWZpbml0aW9uKFhTRFR5cGVEZWZpbml0aW9uIHR5cGUpIHsKLSAgICBpZiAodHlwZSA9PSBudWxsKQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgWFNEVHlwZURlZmluaXRpb24gYmFzZVR5cGUgPSB0eXBlLmdldEJhc2VUeXBlKCk7Ci0gICAgaWYgKGJhc2VUeXBlID09IG51bGwpCi0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICBTdHJpbmcgdHlwZU5TID0gdHlwZS5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLSAgICBTdHJpbmcgYmFzZVR5cGVOUyA9IGJhc2VUeXBlLmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgIFN0cmluZyB0eXBlTmFtZSA9IHR5cGUuZ2V0TmFtZSgpOwotICAgIFN0cmluZyBiYXNlVHlwZU5hbWUgPSBiYXNlVHlwZS5nZXROYW1lKCk7Ci0gICAgYm9vbGVhbiBzYW1lTlM7Ci0gICAgYm9vbGVhbiBzYW1lTmFtZTsKLSAgICBpZiAodHlwZU5TID09IG51bGwgJiYgYmFzZVR5cGVOUyA9PSBudWxsKQotICAgICAgc2FtZU5TID0gdHJ1ZTsKLSAgICBlbHNlIGlmICh0eXBlTlMgIT0gbnVsbCAmJiBiYXNlVHlwZU5TICE9IG51bGwgJiYgdHlwZU5TLmVxdWFscyhiYXNlVHlwZU5TKSkKLSAgICAgIHNhbWVOUyA9IHRydWU7Ci0gICAgZWxzZQotICAgICAgc2FtZU5TID0gZmFsc2U7Ci0gICAgaWYgKHR5cGVOYW1lID09IG51bGwgJiYgYmFzZVR5cGVOYW1lID09IG51bGwpCi0gICAgICBzYW1lTmFtZSA9IHRydWU7Ci0gICAgZWxzZSBpZiAodHlwZU5hbWUgIT0gbnVsbCAmJiBiYXNlVHlwZU5hbWUgIT0gbnVsbCAmJiB0eXBlTmFtZS5lcXVhbHMoYmFzZVR5cGVOYW1lKSkKLSAgICAgIHNhbWVOYW1lID0gdHJ1ZTsKLSAgICBlbHNlCi0gICAgICBzYW1lTmFtZSA9IGZhbHNlOwotICAgIHJldHVybiAoc2FtZU5TICYmIHNhbWVOYW1lKTsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBYU0RUeXBlRGVmaW5pdGlvbiByZXNvbHZlVG9YU0RCdWlsdEluVHlwZURlZmluaXRpb24oWFNEVHlwZURlZmluaXRpb24gdHlwZSkgewotICAgIGlmICh0eXBlID09IG51bGwpCi0gICAgICByZXR1cm4gbnVsbDsKLSAgICBYU0RUeXBlRGVmaW5pdGlvbiBjdXJyVHlwZSA9IHR5cGU7Ci0gICAgd2hpbGUgKCFpc1hTREJ1aWx0SW5UeXBlRGVmaW5pdGlvbihjdXJyVHlwZSkpIHsKLSAgICAgIGlmIChpc1Jvb3RUeXBlRGVmaW5pdGlvbihjdXJyVHlwZSkpCi0gICAgICAgIHJldHVybiBudWxsOwotICAgICAgY3VyclR5cGUgPSBjdXJyVHlwZS5nZXRCYXNlVHlwZSgpOwotICAgIH0KLSAgICByZXR1cm4gY3VyclR5cGU7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNTb2FwRW5jQXJyYXkoWFNEVHlwZURlZmluaXRpb24gdHlwZSkgewotICAgIFhTRFR5cGVEZWZpbml0aW9uIGN1cnJUeXBlID0gdHlwZTsKLSAgICBpZiAoY3VyclR5cGUgIT0gbnVsbCkKLSAgICB3aGlsZShjdXJyVHlwZSAhPSBudWxsKSB7Ci0gICAgICBTdHJpbmcgbnMgPSBjdXJyVHlwZS5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLSAgICAgIFN0cmluZyBuYW1lID0gY3VyclR5cGUuZ2V0TmFtZSgpOwotICAgICAgaWYgKEZyYWdtZW50Q29uc3RhbnRzLlVSSV9TT0FQLmVxdWFscyhucykgJiYgRnJhZ21lbnRDb25zdGFudHMuUU5BTUVfTE9DQUxfTkFNRV9BUlJBWS5lcXVhbHMobmFtZSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgZWxzZSBpZiAoaXNSb290VHlwZURlZmluaXRpb24oY3VyclR5cGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICBlbHNlCi0gICAgICAgIGN1cnJUeXBlID0gY3VyclR5cGUuZ2V0QmFzZVR5cGUoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGNvbXBsZXggdHlwZSBjb250ZW50IGdpdmVuIGEgY29tcGxleCB0eXBlLgotICAgKiBJZiBjb21wbGV4VHlwZSBpcyBhIHVzZXIgZGVmaW5lZCB0eXBlOgotICAgKiAgIFRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIHRoZSB1c2VyIGRlZmluZWQgY29tcGxleCBjb250ZW50IG9mIHRoaXMgdHlwZSBvciB0aGUgY29udGVudCBvZiB0aGUgZXh0ZW5kZWQKLSAgICogICBvciBkZXJpdmVkIHR5cGUgaWZmIHRoZSBleHRlbmRlZCBvciBkZXJpdmVkIHR5cGUgaXMgbm90IGEgYnVpbHQtaW4gWFNEIHR5cGUgKGZvciBleGFtcGxlLCB4c2Q6YW55VHlwZSkuCi0gICAqIElmIGNvbXBsZXhUeXBlIGlzIGEgYnVpbHQtaW4gWFNEIHR5cGU6Ci0gICAqICAgSXQgd2lsbCByZXR1cm4gdGhlIGNvbXBsZXggY29udGVudCBvZiB0aGlzIGJ1aWx0LWluIFhTRCBjb21wbGV4IHR5cGUuICBJdCB3aWxsIG5vdCByZXR1cm4gdGhlCi0gICAqICAgY29tcGxleCBjb250ZW50IG9mIGl0cyBleHRlbmRlZCBvciBkZXJpdmVkIHR5cGUuCi0gICAqIEBwYXJhbSBjb21wbGV4VHlwZSBYU0RDb21wbGV4VHlwZURlZmluaXRpb24gY29tcGxleCB0eXBlLgotICAgKiBAcmV0dXJuIFhTRENvbXBsZXhUeXBlQ29udGVudCBYU0RDb21wbGV4VHlwZUNvbnRlbnQgdGhlIHJlc29sdmVkIGNvbXBsZXggdHlwZSBjb250ZW50LgotICAqKi8KLSAgcHVibGljIHN0YXRpYyBYU0RDb21wbGV4VHlwZUNvbnRlbnQgZ2V0WFNEQ29tcGxleFR5cGVDb250ZW50KFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiBjb21wbGV4VHlwZSkKLSAgewotICAgIGlmICghaXNYU0RCdWlsdEluVHlwZURlZmluaXRpb24oY29tcGxleFR5cGUpKQotICAgIHsKLSAgICAgIFhTRFR5cGVEZWZpbml0aW9uIHR5cGUgPSBjb21wbGV4VHlwZTsKLSAgICAgIHdoaWxlICghaXNYU0RCdWlsdEluVHlwZURlZmluaXRpb24odHlwZSkgJiYgKHR5cGUgaW5zdGFuY2VvZiBYU0RDb21wbGV4VHlwZURlZmluaXRpb24pKQotICAgICAgewotICAgICAgICBYU0RDb21wbGV4VHlwZUNvbnRlbnQgY29tcGxleFR5cGVDb250ZW50ID0gKChYU0RDb21wbGV4VHlwZURlZmluaXRpb24pdHlwZSkuZ2V0Q29udGVudCgpOwotICAgICAgICBpZiAoY29tcGxleFR5cGVDb250ZW50ICE9IG51bGwpCi0gICAgICAgICAgcmV0dXJuIGNvbXBsZXhUeXBlQ29udGVudDsKLSAgICAgICAgaWYgKGlzUm9vdFR5cGVEZWZpbml0aW9uKHR5cGUpKQotICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB0eXBlID0gdHlwZS5nZXRCYXNlVHlwZSgpOwotICAgICAgfQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJldHVybiBjb21wbGV4VHlwZS5nZXRDb250ZW50KCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9EZXRhaWxzVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL0RldGFpbHNUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwZjM4ZWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL0RldGFpbHNUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy5TZWxlY3RXU0RMUHJvcGVydGllc1Rvb2xBY3Rpb247Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBEZXRhaWxzVG9vbCBleHRlbmRzIEZvcm1Ub29sIHsKLQotICBwdWJsaWMgU3RyaW5nIGZvcm1MaW5rXzsKLQotICBwdWJsaWMgRGV0YWlsc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQsIFN0cmluZyBmb3JtTGluaykgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAiaW1hZ2VzL2RldGFpbHNfZW5hYmxlZC5naWYiLCAiaW1hZ2VzL2RldGFpbHNfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICBmb3JtTGlua18gPSBmb3JtTGluazsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGluaXREZWZhdWx0UHJvcGVydGllcygpIHsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgIHJldHVybiBTZWxlY3RXU0RMUHJvcGVydGllc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgZm9ySGlzdG9yeSk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEZvcm1MaW5rKCkgewotICAgIHJldHVybiBmb3JtTGlua187Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9JbnZva2VXU0RMT3BlcmF0aW9uVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL0ludm9rZVdTRExPcGVyYXRpb25Ub29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmOTQ2OTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL0ludm9rZVdTRExPcGVyYXRpb25Ub29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy5TZWxlY3RXU0RMUHJvcGVydGllc1Rvb2xBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLkZyYWdtZW50Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC5XU0RMT3BlcmF0aW9uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIEludm9rZVdTRExPcGVyYXRpb25Ub29sIGV4dGVuZHMgRm9ybVRvb2wgewotCi0gIHByaXZhdGUgU3RyaW5nIGZyYWdtZW50Vmlld0lEXzsKLSAgcHJpdmF0ZSBTdHJpbmcgZnJhZ21lbnROYW1lQW5jaG9ySURfOwotICBwcml2YXRlIFN0cmluZyBlbmRQb2ludF87Ci0KLSAgcHVibGljIEludm9rZVdTRExPcGVyYXRpb25Ub29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsICJ3c2RsL2ltYWdlcy9pbnZva2Vfd3NkbF9vcGVyYXRpb25fZW5hYmxlZC5naWYiLCAid3NkbC9pbWFnZXMvaW52b2tlX3dzZGxfb3BlcmF0aW9uX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgZnJhZ21lbnRWaWV3SURfID0gRnJhZ21lbnRDb25zdGFudHMuRlJBR01FTlRfVklFV19TV0lUQ0hfU09VUkNFX1RPX0ZPUk07Ci0gICAgZnJhZ21lbnROYW1lQW5jaG9ySURfID0gbnVsbDsKLSAgICBlbmRQb2ludF8gPSBudWxsOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgaW5pdERlZmF1bHRQcm9wZXJ0aWVzKCkgewotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgcmV0dXJuIFNlbGVjdFdTRExQcm9wZXJ0aWVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Rm9ybUxpbmsoKSB7Ci0gICAgU3RyaW5nQnVmZmVyIGZvcm1MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIGZvcm1MaW5rLmFwcGVuZCgid3NkbC9mb3Jtcy9JbnZva2VXU0RMT3BlcmF0aW9uRm9ybS5qc3AiKTsKLSAgICBTdHJpbmcgbmFtZUFuY2hvcklEID0gZ2V0RnJhZ21lbnROYW1lQW5jaG9ySUQoKTsKLSAgICBpZiAobmFtZUFuY2hvcklEICE9IG51bGwgJiYgbmFtZUFuY2hvcklELmxlbmd0aCgpID4gMCkgewotICAgICAgZm9ybUxpbmsuYXBwZW5kKCIjIik7Ci0gICAgICBmb3JtTGluay5hcHBlbmQobmFtZUFuY2hvcklEKTsKLSAgICAgIHNldEZyYWdtZW50TmFtZUFuY2hvcklEKG51bGwpOwotICAgIH0KLSAgICByZXR1cm4gZm9ybUxpbmsudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Rm9ybUFjdGlvbkxpbmsoaW50IG9wZXJhdGlvblR5cGUsU3RyaW5nIGZyYWdtZW50Vmlld0lEKQotICB7Ci0gICAgc3dpdGNoIChvcGVyYXRpb25UeXBlKQotICAgIHsKLSAgICAgIGNhc2UgV1NETE9wZXJhdGlvbkVsZW1lbnQuT1BFUkFUSU9OX1RZUEVfU09BUDoKLSAgICAgICAgaWYgKGZyYWdtZW50Vmlld0lELmVxdWFscyhGcmFnbWVudENvbnN0YW50cy5GUkFHTUVOVF9WSUVXX1NXSVRDSF9GT1JNX1RPX1NPVVJDRSkpCi0gICAgICAgICAgcmV0dXJuICJ3c2RsL2FjdGlvbnMvSW52b2tlV1NETFNPQVBPcGVyYXRpb25Tb3VyY2VBY3Rpb25KU1AuanNwIjsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHJldHVybiAid3NkbC9hY3Rpb25zL0ludm9rZVdTRExTT0FQT3BlcmF0aW9uRm9ybUFjdGlvbkpTUC5qc3AiOwotICAgICAgY2FzZSBXU0RMT3BlcmF0aW9uRWxlbWVudC5PUEVSQVRJT05fVFlQRV9IVFRQX0dFVDoKLSAgICAgICAgcmV0dXJuICJ3c2RsL2FjdGlvbnMvSW52b2tlV1NETEh0dHBHZXRPcGVyYXRpb25Gb3JtQWN0aW9uSlNQLmpzcCI7Ci0gICAgICBjYXNlIFdTRExPcGVyYXRpb25FbGVtZW50Lk9QRVJBVElPTl9UWVBFX0hUVFBfUE9TVDoKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAid3NkbC9hY3Rpb25zL0ludm9rZVdTRExIdHRwUG9zdE9wZXJhdGlvbkZvcm1BY3Rpb25KU1AuanNwIjsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEZyYWdtZW50Vmlld0lEKCkgewotICAgIHJldHVybiBmcmFnbWVudFZpZXdJRF87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRGcmFnbWVudFZpZXdJRChTdHJpbmcgZnJhZ21lbnRWaWV3SUQpIHsKLSAgICBmcmFnbWVudFZpZXdJRF8gPSBmcmFnbWVudFZpZXdJRDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RnJhZ21lbnROYW1lQW5jaG9ySUQoKSB7Ci0gICAgcmV0dXJuIGZyYWdtZW50TmFtZUFuY2hvcklEXzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEZyYWdtZW50TmFtZUFuY2hvcklEKFN0cmluZyBmcmFnbWVudE5hbWVBbmNob3JJRCkgewotICAgIGZyYWdtZW50TmFtZUFuY2hvcklEXyA9IGZyYWdtZW50TmFtZUFuY2hvcklEOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRFbmRQb2ludCgpCi0gIHsKLSAgICByZXR1cm4gZW5kUG9pbnRfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RW5kUG9pbnQoU3RyaW5nIGVuZFBvaW50KQotICB7Ci0gICAgZW5kUG9pbnRfID0gZW5kUG9pbnQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9PcGVuV1NETFRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9PcGVuV1NETFRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzY4YzFmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvT3BlbldTRExUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy5TZWxlY3RXU0RMUHJvcGVydGllc1Rvb2xBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBPcGVuV1NETFRvb2wgZXh0ZW5kcyBGb3JtVG9vbCB7Ci0KLSAgICBwdWJsaWMgT3BlbldTRExUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAid3NkbC9pbWFnZXMvb3Blbl93c2RsX2VuYWJsZWQuZ2lmIiwgIndzZGwvaW1hZ2VzL29wZW5fd3NkbF9oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGluaXREZWZhdWx0UHJvcGVydGllcygpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RXU0RMUHJvcGVydGllc1Rvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRGb3JtTGluaygpIHsKLSAgICAgICAgcmV0dXJuICJ3c2RsL2Zvcm1zL09wZW5XU0RMRm9ybS5qc3AiOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1NPQVBNZXNzYWdlUXVldWUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9TT0FQTWVzc2FnZVF1ZXVlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0ZjBhZmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1NPQVBNZXNzYWdlUXVldWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotCi1wdWJsaWMgY2xhc3MgU09BUE1lc3NhZ2VRdWV1ZSBleHRlbmRzIE1lc3NhZ2VRdWV1ZQotewotICBwcml2YXRlIFZlY3RvciBjYWNoZWRNZXNzYWdlTGlzdF87Ci0KLSAgcHVibGljIFNPQVBNZXNzYWdlUXVldWUoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgICBjYWNoZWRNZXNzYWdlTGlzdF8gPSBuZXcgVmVjdG9yKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBjbGVhcigpCi0gIHsKLSAgICBjYWNoZWRNZXNzYWdlTGlzdF8ucmVtb3ZlQWxsRWxlbWVudHMoKTsKLSAgICBtZXNzYWdlTGlzdF8ucmVtb3ZlQWxsRWxlbWVudHMoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TWVzc2FnZXNGcm9tTGlzdCgpCi0gIHsKLSAgICBpZiAobWVzc2FnZUxpc3RfLnNpemUoKSA9PSAwKQotICAgICAgY29weU1lc3NhZ2VzKGNhY2hlZE1lc3NhZ2VMaXN0XyxtZXNzYWdlTGlzdF8pOwotICAgIGVsc2UKLSAgICAgIGNvcHlNZXNzYWdlcyhtZXNzYWdlTGlzdF8sY2FjaGVkTWVzc2FnZUxpc3RfKTsKLSAgICByZXR1cm4gc3VwZXIuZ2V0TWVzc2FnZXNGcm9tTGlzdCgpOwotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCB2b2lkIGNvcHlNZXNzYWdlcyhWZWN0b3Igc291cmNlTGlzdCxWZWN0b3IgZGVzdExpc3QpCi0gIHsKLSAgICBmb3IgKGludCBpPTA7aTxzb3VyY2VMaXN0LnNpemUoKTtpKyspCi0gICAgICBkZXN0TGlzdC5hZGRFbGVtZW50KHNvdXJjZUxpc3QuZWxlbWVudEF0KGkpKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1dTRExBZGRUb0Zhdm9yaXRlc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMQWRkVG9GYXZvcml0ZXNUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlOWIwMDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1dTRExBZGRUb0Zhdm9yaXRlc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkFjdGlvblRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuU2VsZWN0V1NETFByb3BlcnRpZXNUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuV1NETEFkZFRvRmF2b3JpdGVzQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgV1NETEFkZFRvRmF2b3JpdGVzVG9vbCBleHRlbmRzIEFjdGlvblRvb2wgewotICBwdWJsaWMgV1NETEFkZFRvRmF2b3JpdGVzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAiaW1hZ2VzL2Zhdm9yaXRlc19lbmFibGVkLmdpZiIsICJpbWFnZXMvZmF2b3JpdGVzX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICByZXR1cm4gU2VsZWN0V1NETFByb3BlcnRpZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksIGZvckhpc3RvcnkpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKCkgewotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICByZXR1cm4gV1NETEFkZFRvRmF2b3JpdGVzQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1dTRExCaW5kaW5nRGV0YWlsc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMQmluZGluZ0RldGFpbHNUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5MDQ3OTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1dTRExCaW5kaW5nRGV0YWlsc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgV1NETEJpbmRpbmdEZXRhaWxzVG9vbCBleHRlbmRzIERldGFpbHNUb29sIHsKLQotICBwdWJsaWMgV1NETEJpbmRpbmdEZXRhaWxzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCBhbHQsICJ3c2RsL2Zvcm1zL1dTRExCaW5kaW5nRGV0YWlsc0Zvcm0uanNwIik7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMQmluZGluZ05vZGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMQmluZGluZ05vZGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJmYzA5My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETEJpbmRpbmdOb2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuRWxlbWVudEFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5SZWxBZGRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbFJlbW92ZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5XU0RMTW9kZWxDb25zdGFudHM7Ci0KLS8vIFdTREwgYmluZGluZyBub2RlIGZvciB0aGUgV1NETCBOYXZpZ2F0b3IgVHJlZSBWaWV3Ci1wdWJsaWMgY2xhc3MgV1NETEJpbmRpbmdOb2RlIGV4dGVuZHMgV1NETE5hdmlnYXRvck5vZGUKLXsKLSAgcHVibGljIFdTRExCaW5kaW5nTm9kZShUcmVlRWxlbWVudCBlbGVtZW50LE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyLGludCBub2RlRGVwdGgpCi0gIHsKLSAgICBzdXBlcihlbGVtZW50LG5vZGVNYW5hZ2VyLG5vZGVEZXB0aCwid3NkbC9pbWFnZXMvd3NkbF9iaW5kaW5nX25vZGUuZ2lmIik7Ci0gICAgZWxlbWVudC5hZGRMaXN0ZW5lcihuZXcgRWxlbWVudEFkYXB0ZXIoKQotICAgIHsKLSAgICAgIHB1YmxpYyB2b2lkIHJlbEFkZGVkKFJlbEFkZEV2ZW50IGV2ZW50KQotICAgICAgewotICAgICAgICBTdHJpbmcgcmVsID0gZXZlbnQuZ2V0T3V0Qm91bmRSZWxOYW1lKCk7Ci0gICAgICAgIGlmIChyZWwuZXF1YWxzKFdTRExNb2RlbENvbnN0YW50cy5SRUxfV1NETF9PUEVSQVRJT04pKSB7Ci0gICAgICAgICAgV1NETE9wZXJhdGlvbk5vZGUgd3NkbE9wZXJhdGlvbk5vZGUgPSBuZXcgV1NETE9wZXJhdGlvbk5vZGUoKFRyZWVFbGVtZW50KWV2ZW50LmdldFBhcmVudEVsZW1lbnQoKSwgbm9kZU1hbmFnZXJfLCBub2RlRGVwdGhfICsgMSk7Ci0gICAgICAgICAgYWRkQ2hpbGQod3NkbE9wZXJhdGlvbk5vZGUpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyB2b2lkIHJlbFJlbW92ZWQoUmVsUmVtb3ZlRXZlbnQgZXZlbnQpCi0gICAgICB7Ci0gICAgICAgIFRyZWVFbGVtZW50IGNoaWxkRWxlbWVudCA9IG51bGw7Ci0gICAgICAgIGlmIChldmVudC5nZXRJbkJvdW5kUmVsTmFtZSgpLmVxdWFscyhXU0RMTW9kZWxDb25zdGFudHMuUkVMX1dTRExfT1BFUkFUSU9OKSkgewotICAgICAgICAgIGNoaWxkRWxlbWVudCA9IChUcmVlRWxlbWVudClldmVudC5nZXRJbmJvdW5kRWxlbWVudCgpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChldmVudC5nZXRPdXRCb3VuZFJlbE5hbWUoKS5lcXVhbHMoV1NETE1vZGVsQ29uc3RhbnRzLlJFTF9XU0RMX09QRVJBVElPTikpIHsKLSAgICAgICAgICBjaGlsZEVsZW1lbnQgPSAoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0T3V0Qm91bmRFbGVtZW50KCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmVtb3ZlQ2hpbGROb2RlKGNoaWxkRWxlbWVudCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gICAgc2V0VmlzaWJpbGl0eU9mQ2hpbGRyZW4oZmFsc2UpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgaW5pdFRvb2xzKCkKLSAgewotICAgIENvbnRyb2xsZXIgY29udHJvbGxlciA9IG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCk7Ci0gICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICAgbmV3IFdTRExCaW5kaW5nRGV0YWlsc1Rvb2wodG9vbE1hbmFnZXJfLCB3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1dTRExfQklORElOR19ERVRBSUxTIikpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMRGV0YWlsc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMRGV0YWlsc1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmFhODEwMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETERldGFpbHNUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIFdTRExEZXRhaWxzVG9vbCBleHRlbmRzIERldGFpbHNUb29sIHsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGT1JNX1ZJRVdfSUQgPSAwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTT1VSQ0VfVklFV19JRCA9IDE7Ci0KLSAgcHJpdmF0ZSBpbnQgdmlld0lkXzsKLQotICBwdWJsaWMgV1NETERldGFpbHNUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsIGFsdCwgIndzZGwvZm9ybXMvV1NETERldGFpbHNGb3JtLmpzcCIpOwotICAgIHZpZXdJZF8gPSBGT1JNX1ZJRVdfSUQ7Ci0gIH0KLQotICBwdWJsaWMgaW50IGdldFZpZXdJZCgpIHsKLSAgICByZXR1cm4gdmlld0lkXzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFZpZXdJZChpbnQgdmlld0lkKSB7Ci0gICAgaWYgKHZpZXdJZCA9PSBGT1JNX1ZJRVdfSUQgfHwgdmlld0lkID09IFNPVVJDRV9WSUVXX0lEKQotICAgICAgdmlld0lkXyA9IHZpZXdJZDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRvZ2dsZVZpZXdJZCgpIHsKLSAgICBpZiAodmlld0lkXyA9PSBGT1JNX1ZJRVdfSUQpCi0gICAgICB2aWV3SWRfID0gU09VUkNFX1ZJRVdfSUQ7Ci0gICAgZWxzZQotICAgICAgdmlld0lkXyA9IEZPUk1fVklFV19JRDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1dTRExJbXBvcnRXU0RMVG9GaWxlU3lzdGVtVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1dTRExJbXBvcnRXU0RMVG9GaWxlU3lzdGVtVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjM3ZDkxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMSW1wb3J0V1NETFRvRmlsZVN5c3RlbVRvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkltcG9ydFRvRmlsZVN5c3RlbVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuU2VsZWN0V1NETFByb3BlcnRpZXNUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuV1NETEltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBXU0RMSW1wb3J0V1NETFRvRmlsZVN5c3RlbVRvb2wgZXh0ZW5kcyBJbXBvcnRUb0ZpbGVTeXN0ZW1Ub29sIHsKLSAgcHVibGljIFdTRExJbXBvcnRXU0RMVG9GaWxlU3lzdGVtVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlcixTdHJpbmcgYWx0KSB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsYWx0KTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgTm9kZSBub2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICByZXR1cm4gU2VsZWN0V1NETFByb3BlcnRpZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZS5nZXROb2RlSWQoKSx0b29sSWRfLG5vZGUuZ2V0Vmlld0lkKCksbm9kZS5nZXRWaWV3VG9vbElkKCksZm9ySGlzdG9yeSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEFjdGlvbkxpbmsoKSB7Ci0gICAgTm9kZSBub2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICByZXR1cm4gV1NETEltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlLmdldE5vZGVJZCgpLHRvb2xJZF8sbm9kZS5nZXRWaWV3SWQoKSxub2RlLmdldFZpZXdUb29sSWQoKSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMSW1wb3J0V1NETFRvV29ya2JlbmNoVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1dTRExJbXBvcnRXU0RMVG9Xb3JrYmVuY2hUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzODUyNDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1dTRExJbXBvcnRXU0RMVG9Xb3JrYmVuY2hUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5JbXBvcnRUb1dvcmtiZW5jaFRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuU2VsZWN0V1NETFByb3BlcnRpZXNUb29sQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgV1NETEltcG9ydFdTRExUb1dvcmtiZW5jaFRvb2wgZXh0ZW5kcyBJbXBvcnRUb1dvcmtiZW5jaFRvb2wgewotICBwdWJsaWMgV1NETEltcG9ydFdTRExUb1dvcmtiZW5jaFRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsU3RyaW5nIGFsdCkgewotICAgIHN1cGVyKHRvb2xNYW5hZ2VyLGFsdCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgIE5vZGUgbm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgcmV0dXJuIFNlbGVjdFdTRExQcm9wZXJ0aWVzVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGUuZ2V0Tm9kZUlkKCksdG9vbElkXyxub2RlLmdldFZpZXdJZCgpLG5vZGUuZ2V0Vmlld1Rvb2xJZCgpLGZvckhpc3RvcnkpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRGb3JtTGluaygpIHsKLSAgICByZXR1cm4gIndzZGwvZm9ybXMvV1NETEltcG9ydFdTRExUb1dvcmtiZW5jaEZvcm0uanNwIjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1dTRExMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1dTRExMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjNlM2JlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMTGF1bmNoV2ViU2VydmljZVdpemFyZFRvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkxhdW5jaFdlYlNlcnZpY2VXaXphcmRUb29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLlNlbGVjdFdTRExQcm9wZXJ0aWVzVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIFdTRExMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbCBleHRlbmRzIExhdW5jaFdlYlNlcnZpY2VXaXphcmRUb29sIHsKLSAgcHVibGljIFdTRExMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlcixTdHJpbmcgYWx0KSB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsYWx0KTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgTm9kZSBub2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICByZXR1cm4gU2VsZWN0V1NETFByb3BlcnRpZXNUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZS5nZXROb2RlSWQoKSx0b29sSWRfLG5vZGUuZ2V0Vmlld0lkKCksbm9kZS5nZXRWaWV3VG9vbElkKCksZm9ySGlzdG9yeSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEZvcm1MaW5rKCkgewotICAgIHJldHVybiAid3NkbC9mb3Jtcy9XU0RMTGF1bmNoV2ViU2VydmljZVdpemFyZEZvcm0uanNwIjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1dTRExNYWluTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1dTRExNYWluTm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODc3M2YyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMTWFpbk5vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbEFkZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsUmVtb3ZlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLldTRExNb2RlbENvbnN0YW50czsKLQotLy8gUm9vdCBub2RlIGZvciB0aGUgV1NETCBOYXZpZ2F0b3IgVHJlZSBWaWV3Ci1wdWJsaWMgY2xhc3MgV1NETE1haW5Ob2RlIGV4dGVuZHMgV1NETE5hdmlnYXRvck5vZGUKLXsKLSAgcHVibGljIFdTRExNYWluTm9kZShUcmVlRWxlbWVudCBlbGVtZW50LE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyKQotICB7Ci0gICAgc3VwZXIoZWxlbWVudCxub2RlTWFuYWdlciwxLCJpbWFnZXMvcm9vdF9tYWluLmdpZiIpOwotICAgIGVsZW1lbnQuYWRkTGlzdGVuZXIobmV3IEVsZW1lbnRBZGFwdGVyKCkKLSAgICB7Ci0gICAgICBwdWJsaWMgdm9pZCByZWxBZGRlZChSZWxBZGRFdmVudCBldmVudCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHJlbCA9IGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpOwotICAgICAgICBpZiAocmVsLmVxdWFscyhXU0RMTW9kZWxDb25zdGFudHMuUkVMX1dTREwpKSB7Ci0gICAgICAgICAgV1NETE5vZGUgd3NkbE5vZGUgPSBuZXcgV1NETE5vZGUoKFRyZWVFbGVtZW50KWV2ZW50LmdldFBhcmVudEVsZW1lbnQoKSwgbm9kZU1hbmFnZXJfLCBub2RlRGVwdGhfICsgMSk7Ci0gICAgICAgICAgYWRkQ2hpbGQod3NkbE5vZGUpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyB2b2lkIHJlbFJlbW92ZWQoUmVsUmVtb3ZlRXZlbnQgZXZlbnQpCi0gICAgICB7Ci0gICAgICAgIFRyZWVFbGVtZW50IGNoaWxkRWxlbWVudCA9IG51bGw7Ci0gICAgICAgIGlmIChldmVudC5nZXRJbkJvdW5kUmVsTmFtZSgpLmVxdWFscyhXU0RMTW9kZWxDb25zdGFudHMuUkVMX1dTREwpKSB7Ci0gICAgICAgICAgY2hpbGRFbGVtZW50ID0gKFRyZWVFbGVtZW50KWV2ZW50LmdldEluYm91bmRFbGVtZW50KCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpLmVxdWFscyhXU0RMTW9kZWxDb25zdGFudHMuUkVMX1dTREwpKSB7Ci0gICAgICAgICAgY2hpbGRFbGVtZW50ID0gKFRyZWVFbGVtZW50KWV2ZW50LmdldE91dEJvdW5kRWxlbWVudCgpOwotICAgICAgICB9Ci0gICAgICAgIHJlbW92ZUNoaWxkTm9kZShjaGlsZEVsZW1lbnQpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgaW5pdFRvb2xzKCkKLSAgewotICAgIENvbnRyb2xsZXIgY29udHJvbGxlciA9IG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCk7Ci0gICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICAgbmV3IE9wZW5XU0RMVG9vbCh0b29sTWFuYWdlcl8sIHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfT1BFTl9XU0RMIikpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMTmF2aWdhdG9yTm9kZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1dTRExOYXZpZ2F0b3JOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViNzU4MGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1dTRExOYXZpZ2F0b3JOb2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuU2VsZWN0V1NETE5hdmlnYXRvck5vZGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy5Ub2dnbGVXU0RMTmF2aWdhdG9yTm9kZUFjdGlvbjsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFdTRExOYXZpZ2F0b3JOb2RlIGV4dGVuZHMgTm9kZQotewotICBwdWJsaWMgV1NETE5hdmlnYXRvck5vZGUoVHJlZUVsZW1lbnQgZWxlbWVudCxOb2RlTWFuYWdlciBub2RlTWFuYWdlcixpbnQgbm9kZURlcHRoLFN0cmluZyBpbWFnZVBhdGgpCi0gIHsKLSAgICBzdXBlcihlbGVtZW50LG5vZGVNYW5hZ2VyLG5vZGVEZXB0aCxpbWFnZVBhdGgpOwotICB9Ci0KLSAgLy8gd3NkbC9hY3Rpb25zL1RvZ2dsZVdTRExOYXZpZ2F0b3JOb2RlQWN0aW9uLmpzcD9ub2RlSWQ9Li4uCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0VG9nZ2xlTm9kZUFjdGlvbkhyZWYoKQotICB7Ci0gICAgcmV0dXJuIFRvZ2dsZVdTRExOYXZpZ2F0b3JOb2RlQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlkXyxpc09wZW5fKTsKLSAgfQotCi0gIC8vIHdzZGwvYWN0aW9ucy9TZWxlY3RXU0RMTmF2aWdhdG9yTm9kZUFjdGlvbi5qc3A/bm9kZUlkPS4uLgotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldExpbmtBY3Rpb25IcmVmKCkKLSAgewotICAgIHJldHVybiBTZWxlY3RXU0RMTmF2aWdhdG9yTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZF8sZmFsc2UpOwotICB9IAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1dTRExOb2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETE5vZGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWYxMjc0Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETE5vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5FbGVtZW50QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLlJlbEFkZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsUmVtb3ZlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLldTRExNb2RlbENvbnN0YW50czsKLQotLy8gV1NETCBub2RlIGZvciB0aGUgV1NETCBOYXZpZ2F0b3IgVHJlZSBWaWV3Ci1wdWJsaWMgY2xhc3MgV1NETE5vZGUgZXh0ZW5kcyBXU0RMTmF2aWdhdG9yTm9kZQotewotICBwdWJsaWMgV1NETE5vZGUoVHJlZUVsZW1lbnQgZWxlbWVudCxOb2RlTWFuYWdlciBub2RlTWFuYWdlcixpbnQgbm9kZURlcHRoKQotICB7Ci0gICAgc3VwZXIoZWxlbWVudCxub2RlTWFuYWdlcixub2RlRGVwdGgsImltYWdlcy93c2RsLmdpZiIpOwotICAgIGVsZW1lbnQuYWRkTGlzdGVuZXIobmV3IEVsZW1lbnRBZGFwdGVyKCkKLSAgICB7Ci0gICAgICBwdWJsaWMgdm9pZCByZWxBZGRlZChSZWxBZGRFdmVudCBldmVudCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHJlbCA9IGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpOwotICAgICAgICBpZiAocmVsLmVxdWFscyhXU0RMTW9kZWxDb25zdGFudHMuUkVMX1dTRExfU0VSVklDRSkpIHsKLSAgICAgICAgICBXU0RMU2VydmljZU5vZGUgd3NkbFNlcnZpY2VOb2RlID0gbmV3IFdTRExTZXJ2aWNlTm9kZSgoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0UGFyZW50RWxlbWVudCgpLCBub2RlTWFuYWdlcl8sIG5vZGVEZXB0aF8gKyAxKTsKLSAgICAgICAgICBhZGRDaGlsZCh3c2RsU2VydmljZU5vZGUpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyB2b2lkIHJlbFJlbW92ZWQoUmVsUmVtb3ZlRXZlbnQgZXZlbnQpCi0gICAgICB7Ci0gICAgICAgIFRyZWVFbGVtZW50IGNoaWxkRWxlbWVudCA9IG51bGw7Ci0gICAgICAgIGlmIChldmVudC5nZXRJbkJvdW5kUmVsTmFtZSgpLmVxdWFscyhXU0RMTW9kZWxDb25zdGFudHMuUkVMX1dTRExfU0VSVklDRSkpIHsKLSAgICAgICAgICBjaGlsZEVsZW1lbnQgPSAoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0SW5ib3VuZEVsZW1lbnQoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZXZlbnQuZ2V0T3V0Qm91bmRSZWxOYW1lKCkuZXF1YWxzKFdTRExNb2RlbENvbnN0YW50cy5SRUxfV1NETF9TRVJWSUNFKSkgewotICAgICAgICAgIGNoaWxkRWxlbWVudCA9IChUcmVlRWxlbWVudClldmVudC5nZXRPdXRCb3VuZEVsZW1lbnQoKTsKLSAgICAgICAgfQotICAgICAgICByZW1vdmVDaGlsZE5vZGUoY2hpbGRFbGVtZW50KTsKLSAgICAgIH0KLSAgICB9KTsKLSAgICBzZXRWaXNpYmlsaXR5T2ZDaGlsZHJlbihmYWxzZSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBpbml0VG9vbHMoKQotICB7Ci0gICAgQ29udHJvbGxlciBjb250cm9sbGVyID0gbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKTsKLSAgICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgICBuZXcgV1NETERldGFpbHNUb29sKHRvb2xNYW5hZ2VyXywgd3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9XU0RMX0RFVEFJTFMiKSk7Ci0gICAgbmV3IFdTRExJbXBvcnRXU0RMVG9Xb3JrYmVuY2hUb29sKHRvb2xNYW5hZ2VyXywgY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfSU1QT1JUX1dTRExfVE9fV09SS0JFTkNIIikpOwotICAgIG5ldyBXU0RMSW1wb3J0V1NETFRvRmlsZVN5c3RlbVRvb2wodG9vbE1hbmFnZXJfLCBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9XU0RMX0lNUE9SVF9UT19GUyIpKTsKLSAgICBuZXcgV1NETExhdW5jaFdlYlNlcnZpY2VXaXphcmRUb29sKHRvb2xNYW5hZ2VyXywgY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfTEFVTkNIX1dFQl9TRVJWSUNFX1dJWkFSRCIpKTsKLSAgICBuZXcgV1NETEFkZFRvRmF2b3JpdGVzVG9vbCh0b29sTWFuYWdlcl8sIHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfQUREX1dTRExfVE9fRkFWT1JJVEVTIikpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETE9wZXJhdGlvbk5vZGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMT3BlcmF0aW9uTm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzhlM2MwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMT3BlcmF0aW9uTm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkVsZW1lbnRBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsQWRkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5SZWxSZW1vdmVFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotLy8gV1NETCBvcGVyYXRpb24gbm9kZSBmb3IgdGhlIFdTREwgTmF2aWdhdG9yIFRyZWUgVmlldwotcHVibGljIGNsYXNzIFdTRExPcGVyYXRpb25Ob2RlIGV4dGVuZHMgV1NETE5hdmlnYXRvck5vZGUKLXsKLSAgcHVibGljIFdTRExPcGVyYXRpb25Ob2RlKFRyZWVFbGVtZW50IGVsZW1lbnQsTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsaW50IG5vZGVEZXB0aCkKLSAgewotICAgIHN1cGVyKGVsZW1lbnQsbm9kZU1hbmFnZXIsbm9kZURlcHRoLCJ3c2RsL2ltYWdlcy93c2RsX29wZXJhdGlvbl9ub2RlLmdpZiIpOwotICAgIGVsZW1lbnQuYWRkTGlzdGVuZXIobmV3IEVsZW1lbnRBZGFwdGVyKCkKLSAgICB7Ci0gICAgICBwdWJsaWMgdm9pZCByZWxBZGRlZChSZWxBZGRFdmVudCBldmVudCkKLSAgICAgIHsKLSAgICAgIH0KLQotICAgICAgcHVibGljIHZvaWQgcmVsUmVtb3ZlZChSZWxSZW1vdmVFdmVudCBldmVudCkKLSAgICAgIHsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIGluaXRUb29scygpCi0gIHsKLSAgICBDb250cm9sbGVyIGNvbnRyb2xsZXIgPSBub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpOwotICAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgIG5ldyBJbnZva2VXU0RMT3BlcmF0aW9uVG9vbCh0b29sTWFuYWdlcl8sIHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfSU5WT0tFX1dTRExfT1BFUkFUSU9OIikpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMUGVyc3BlY3RpdmUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMUGVyc3BlY3RpdmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzYxYmQ4NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETFBlcnNwZWN0aXZlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FY29yZVBhY2thZ2VJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLlJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkJhc2ljTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlVSTFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuT3BlbldTRExBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy5Td2l0Y2hQZXJzcGVjdGl2ZUZyb21XU0RMQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuVXBkYXRlV1NETEJpbmRpbmdBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLkJpbmRpbmdUeXBlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuV1NETEFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuV1NETEJpbmRpbmdFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC5XU0RMU2VydmljZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLmltcGwuWFNEUGFja2FnZUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLnV0aWwuWFNEUmVzb3VyY2VGYWN0b3J5SW1wbDsKLQotcHVibGljIGNsYXNzIFdTRExQZXJzcGVjdGl2ZSBleHRlbmRzIFBlcnNwZWN0aXZlCi17Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUQVRVU19DT05URU5UX0RFRkFVTFQgPSAwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVEFUVVNfQ09OVEVOVF9SRVNVTFRfRk9STSA9IDE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUQVRVU19DT05URU5UX1JFU1VMVF9TT1VSQ0UgPSAyOwotCi0gIHByaXZhdGUgQmFzaWNNb2RlbCBtb2RlbF87Ci0gIHByaXZhdGUgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXJfOwotICBwcml2YXRlIFN0cmluZyBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfOwotICBwcml2YXRlIFN0cmluZyBzYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29sc187Ci0gIHByaXZhdGUgU3RyaW5nIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3NfOwotICBwcml2YXRlIFN0cmluZyBzYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3NfOwotICBwcml2YXRlIGludCBzdGF0dXNDb250ZW50VHlwZV87Ci0KLSAgcHJpdmF0ZSBTT0FQTWVzc2FnZVF1ZXVlIHNvYXBSZXF1ZXN0UXVldWVfOwotICBwcml2YXRlIFNPQVBNZXNzYWdlUXVldWUgc29hcFJlc3BvbnNlUXVldWVfOwotICBwcml2YXRlIE5vZGUgb3BlcmF0aW9uTm9kZV87Ci0KLSAgc3RhdGljCi0gIHsKLSAgICAvLyBJbml0aWFsaXplIHRoZSBYU0Qgc3Vic3lzdGVtLgotICAgIChuZXcgUmVzb3VyY2VGYWN0b3J5UmVnaXN0cnlJbXBsKCkpLmdldEV4dGVuc2lvblRvRmFjdG9yeU1hcCgpLnB1dCgieHNkIixuZXcgWFNEUmVzb3VyY2VGYWN0b3J5SW1wbCgpKTsKLSAgICAvLyBwb3J0IHRvIG9yZy5lY2xpcHNlLnhzZAotICAgIC8vIEluaXQuaW5pdCgpOwotICAgIEVjb3JlUGFja2FnZUltcGwuaW5pdCgpOwotICAgIFhTRFBhY2thZ2VJbXBsLmluaXQoKTsKLSAgfQotCi0gIHB1YmxpYyBXU0RMUGVyc3BlY3RpdmUoQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoIndzZGwiLGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgaW5pdFBlcnNwZWN0aXZlKFNlcnZsZXRDb250ZXh0IGFwcGxpY2F0aW9uKQotICB7Ci0gICAgbW9kZWxfID0gbmV3IEJhc2ljTW9kZWwoIndzZGxNb2RlbCIpOwotICAgIFRyZWVFbGVtZW50IHRyZWVFbGVtZW50ID0gbmV3IFRyZWVFbGVtZW50KGdldE1lc3NhZ2UoIk5PREVfTkFNRV9XU0RMX01BSU4iKSwgbW9kZWxfKTsKLSAgICBtb2RlbF8uc2V0Um9vdEVsZW1lbnQodHJlZUVsZW1lbnQpOwotICAgIG5vZGVNYW5hZ2VyXyA9IG5ldyBOb2RlTWFuYWdlcihjb250cm9sbGVyXyk7Ci0gICAgV1NETE1haW5Ob2RlIHdzZGxNYWluTm9kZSA9IG5ldyBXU0RMTWFpbk5vZGUodHJlZUVsZW1lbnQsIG5vZGVNYW5hZ2VyXyk7Ci0gICAgbm9kZU1hbmFnZXJfLnNldFJvb3ROb2RlKHdzZGxNYWluTm9kZSk7Ci0KLSAgICAvLyBTdGFydGluZyBmcmFtZXNldCBzaXplcy4KLSAgICBpZiAoIURpclV0aWxzLmlzUlRMKCkpCi0gICAgICBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfID0gIjMwJSwqIjsKLSAgICBlbHNlCi0gICAgICBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfID0gIiosMzAlIjsKLSAgICBzYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29sc18gPSBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfOwotICAgIGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3NfID0gIjc1JSwqIjsKLSAgICBzYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3NfID0gYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c187Ci0KLSAgICAvLyBNZXNzYWdlIHN0YXR1cyBwYW5lCi0gICAgc3RhdHVzQ29udGVudFR5cGVfID0gU1RBVFVTX0NPTlRFTlRfREVGQVVMVDsKLSAgICBzb2FwUmVxdWVzdFF1ZXVlXyA9IG5ldyBTT0FQTWVzc2FnZVF1ZXVlKCk7Ci0gICAgc29hcFJlc3BvbnNlUXVldWVfID0gbmV3IFNPQVBNZXNzYWdlUXVldWUoKTsKLSAgICBvcGVyYXRpb25Ob2RlXyA9IG51bGw7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBwcmVsb2FkV1NETChTdHJpbmdbXSB3c2RsVVJMcykgewotICAgIGlmICh3c2RsVVJMcyAhPSBudWxsKSB7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHdzZGxVUkxzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIE9wZW5XU0RMQWN0aW9uIG9wZW5XU0RMQWN0aW9uID0gbmV3IE9wZW5XU0RMQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICAgICAgSGFzaHRhYmxlIHByb3BlcnR5VGFibGUgPSBvcGVuV1NETEFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgICAgIFN0cmluZyBkZWNvZGVkV1NETFVSTCA9IFVSTFV0aWxzLmRlY29kZSh3c2RsVVJMc1tpXSk7Ci0gICAgICAgIHByb3BlcnR5VGFibGUucHV0KEFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XU0RMX1VSTCwgZGVjb2RlZFdTRExVUkwpOwotICAgICAgICBvcGVuV1NETEFjdGlvbi5ydW4oKTsKLSAgICAgIH0KLSAgICAgIGlmICh3c2RsVVJMcy5sZW5ndGggPiAwKQotICAgICAgICBjb250cm9sbGVyXy5zZXRDdXJyZW50UGVyc3BlY3RpdmUoQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1dTREwpOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIGZpbmFsIHZvaWQgcHJlbG9hZEVuZHBvaW50cyhTdHJpbmdbXSB3c2RsVVJMcywgU3RyaW5nW10gZW5kcG9pbnRzKQotICB7Ci0gICAgaWYgKHdzZGxVUkxzICE9IG51bGwgJiYgd3NkbFVSTHMubGVuZ3RoID4gMCAmJiBlbmRwb2ludHMgIT0gbnVsbCAmJiBlbmRwb2ludHMubGVuZ3RoID4gMCkKLSAgICB7Ci0gICAgICBTdHJpbmcgd3NkbFVSTCA9IHdzZGxVUkxzWzBdOwotICAgICAgVmVjdG9yIHdzZGxOb2RlcyA9IG5vZGVNYW5hZ2VyXy5nZXRSb290Tm9kZSgpLmdldENoaWxkTm9kZXMoKTsKLSAgICAgIGZvciAoSXRlcmF0b3Igd3NkbE5vZGVzSXRlcmF0b3IgPSB3c2RsTm9kZXMuaXRlcmF0b3IoKTsgd3NkbE5vZGVzSXRlcmF0b3IuaGFzTmV4dCgpOykKLSAgICAgIHsKLSAgICAgICAgTm9kZSB3c2RsTm9kZSA9IChOb2RlKXdzZGxOb2Rlc0l0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgaWYgKHdzZGxOb2RlLmdldE5vZGVOYW1lKCkuZXF1YWxzKHdzZGxVUkwpKQotICAgICAgICB7Ci0gICAgICAgICAgVmVjdG9yIHNlcnZpY2VOb2RlcyA9IHdzZGxOb2RlLmdldENoaWxkTm9kZXMoKTsKLSAgICAgICAgICBmb3IgKEl0ZXJhdG9yIHNlcnZpY2VOb2Rlc0l0ZXJhdG9yID0gc2VydmljZU5vZGVzLml0ZXJhdG9yKCk7IHNlcnZpY2VOb2Rlc0l0ZXJhdG9yLmhhc05leHQoKTspCi0gICAgICAgICAgewotICAgICAgICAgICAgTm9kZSBzZXJ2aWNlTm9kZSA9IChOb2RlKXNlcnZpY2VOb2Rlc0l0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgICAgIFZlY3RvciBiaW5kaW5nTm9kZXMgPSBzZXJ2aWNlTm9kZS5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICAgICAgICBTdHJpbmdbXSBub2RlSWRzID0gbmV3IFN0cmluZ1tiaW5kaW5nTm9kZXMuc2l6ZSgpXTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbm9kZUlkcy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgbm9kZUlkc1tpXSA9IFN0cmluZy52YWx1ZU9mKCgoTm9kZSliaW5kaW5nTm9kZXMuZ2V0KGkpKS5nZXROb2RlSWQoKSk7Ci0gICAgICAgICAgICBVcGRhdGVXU0RMQmluZGluZ0FjdGlvbiBhY3Rpb24gPSBuZXcgVXBkYXRlV1NETEJpbmRpbmdBY3Rpb24oY29udHJvbGxlcl8pOwotICAgICAgICAgICAgSGFzaHRhYmxlIHByb3BlcnR5VGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgICAgICAgICBwcm9wZXJ0eVRhYmxlLnB1dChBY3Rpb25JbnB1dHMuTk9ERUlELCBub2RlSWRzKTsKLSAgICAgICAgICAgIHByb3BlcnR5VGFibGUucHV0KFdTRExBY3Rpb25JbnB1dHMuRU5EX1BPSU5ULCBlbmRwb2ludHMpOwotICAgICAgICAgICAgYWN0aW9uLnNldFByb3BlcnR5VGFibGUocHJvcGVydHlUYWJsZSk7Ci0gICAgICAgICAgICBhY3Rpb24uZXhlY3V0ZShmYWxzZSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotICAKLSAgcHVibGljIGZpbmFsIHZvaWQgcHJlc2VsZWN0U2VydmljZU9yQmluZGluZyhTdHJpbmdbXSB3c2RsVVJMcyxTdHJpbmdbXSBzZXJ2aWNlUU5hbWVTdHJpbmdzLFN0cmluZ1tdIGJpbmRpbmdOYW1lU3RyaW5ncykKLSAgewotICAgIGlmICh3c2RsVVJMcyAhPSBudWxsICYmIHdzZGxVUkxzLmxlbmd0aCA+IDApCi0gICAgewotICAgICAgU3RyaW5nIHdzZGxVUkwgPSB3c2RsVVJMc1swXTsKLSAgICAgIGlmIChzZXJ2aWNlUU5hbWVTdHJpbmdzICE9IG51bGwgJiYgc2VydmljZVFOYW1lU3RyaW5ncy5sZW5ndGggPiAwKQotICAgICAgICBwcmVzZWxlY3RTZXJ2aWNlKHdzZGxVUkwsc2VydmljZVFOYW1lU3RyaW5nc1swXSk7Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGlmIChiaW5kaW5nTmFtZVN0cmluZ3MgIT0gbnVsbCAmJiBiaW5kaW5nTmFtZVN0cmluZ3MubGVuZ3RoID4gMCkKLSAgICAgICAgICBwcmVzZWxlY3RCaW5kaW5nKHdzZGxVUkwsYmluZGluZ05hbWVTdHJpbmdzWzBdKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0gIHByaXZhdGUgZmluYWwgdm9pZCBwcmVzZWxlY3RTZXJ2aWNlKFN0cmluZyB3c2RsVVJMLFN0cmluZyBzZXJ2aWNlUU5hbWVTdHJpbmcpCi0gIHsKLSAgICBWZWN0b3Igd3NkbE5vZGVzID0gbm9kZU1hbmFnZXJfLmdldFJvb3ROb2RlKCkuZ2V0Q2hpbGROb2RlcygpOwotICAgIGZvciAoaW50IGk9MDtpPHdzZGxOb2Rlcy5zaXplKCk7aSsrKQotICAgIHsKLSAgICAgIE5vZGUgd3NkbE5vZGUgPSAoTm9kZSl3c2RsTm9kZXMuZWxlbWVudEF0KGkpOwotICAgICAgaWYgKHdzZGxOb2RlLmdldE5vZGVOYW1lKCkuZXF1YWxzKHdzZGxVUkwpKQotICAgICAgewotICAgICAgICBWZWN0b3Igc2VydmljZU5vZGVzID0gd3NkbE5vZGUuZ2V0Q2hpbGROb2RlcygpOwotICAgICAgICBmb3IgKGludCBqPTA7ajxzZXJ2aWNlTm9kZXMuc2l6ZSgpO2orKykKLSAgICAgICAgewotICAgICAgICAgIE5vZGUgc2VydmljZU5vZGUgPSAoTm9kZSlzZXJ2aWNlTm9kZXMuZWxlbWVudEF0KGopOwotICAgICAgICAgIFdTRExTZXJ2aWNlRWxlbWVudCBzZXJ2aWNlRWxlbWVudCA9IChXU0RMU2VydmljZUVsZW1lbnQpc2VydmljZU5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgICAgICBTZXJ2aWNlIHNlcnZpY2UgPSBzZXJ2aWNlRWxlbWVudC5nZXRTZXJ2aWNlKCk7Ci0gICAgICAgICAgaWYgKHNlcnZpY2UuZ2V0UU5hbWUoKS50b1N0cmluZygpLmVxdWFscyhzZXJ2aWNlUU5hbWVTdHJpbmcpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG5vZGVNYW5hZ2VyXy5zZXRTZWxlY3RlZE5vZGVJZChzZXJ2aWNlTm9kZS5nZXROb2RlSWQoKSk7Ci0gICAgICAgICAgICBub2RlTWFuYWdlcl8ubWFrZVNlbGVjdGVkTm9kZVZpc2libGUoKTsKLSAgICAgICAgICAgIGNvbnRyb2xsZXJfLnNldEN1cnJlbnRQZXJzcGVjdGl2ZShBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfV1NETCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIGZpbmFsIHZvaWQgcHJlc2VsZWN0QmluZGluZyhTdHJpbmcgd3NkbFVSTCxTdHJpbmcgYmluZGluZ05hbWVTdHJpbmcpCi0gIHsKLSAgICBWZWN0b3Igd3NkbE5vZGVzID0gbm9kZU1hbmFnZXJfLmdldFJvb3ROb2RlKCkuZ2V0Q2hpbGROb2RlcygpOwotICAgIGZvciAoaW50IGk9MDtpPHdzZGxOb2Rlcy5zaXplKCk7aSsrKQotICAgIHsKLSAgICAgIE5vZGUgd3NkbE5vZGUgPSAoTm9kZSl3c2RsTm9kZXMuZWxlbWVudEF0KGkpOwotICAgICAgaWYgKHdzZGxOb2RlLmdldE5vZGVOYW1lKCkuZXF1YWxzKHdzZGxVUkwpKQotICAgICAgewotICAgICAgICBWZWN0b3Igc2VydmljZU5vZGVzID0gd3NkbE5vZGUuZ2V0Q2hpbGROb2RlcygpOwotICAgICAgICBmb3IgKGludCBqPTA7ajxzZXJ2aWNlTm9kZXMuc2l6ZSgpO2orKykKLSAgICAgICAgewotICAgICAgICAgIE5vZGUgc2VydmljZU5vZGUgPSAoTm9kZSlzZXJ2aWNlTm9kZXMuZWxlbWVudEF0KGopOwotICAgICAgICAgIFZlY3RvciBiaW5kaW5nTm9kZXMgPSBzZXJ2aWNlTm9kZS5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICAgICAgZm9yIChpbnQgaz0wO2s8YmluZGluZ05vZGVzLnNpemUoKTtrKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgTm9kZSBiaW5kaW5nTm9kZSA9IChOb2RlKWJpbmRpbmdOb2Rlcy5lbGVtZW50QXQoayk7Ci0gICAgICAgICAgICBXU0RMQmluZGluZ0VsZW1lbnQgYmluZGluZ0VsZW1lbnQgPSAoV1NETEJpbmRpbmdFbGVtZW50KWJpbmRpbmdOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICAgICAgICBpZiAoYmluZGluZ0VsZW1lbnQuZ2V0QmluZGluZygpLmdldFFOYW1lKCkudG9TdHJpbmcoKS5lcXVhbHMoYmluZGluZ05hbWVTdHJpbmcpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBub2RlTWFuYWdlcl8uc2V0U2VsZWN0ZWROb2RlSWQoYmluZGluZ05vZGUuZ2V0Tm9kZUlkKCkpOwotICAgICAgICAgICAgICBub2RlTWFuYWdlcl8ubWFrZVNlbGVjdGVkTm9kZVZpc2libGUoKTsKLSAgICAgICAgICAgICAgY29udHJvbGxlcl8uc2V0Q3VycmVudFBlcnNwZWN0aXZlKEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9XU0RMKTsKLSAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfSAgICAgICAgICAKLSAgICAgIH0KLSAgICB9ICAgIAotICB9Ci0KLSAgcHVibGljIE5vZGVNYW5hZ2VyIGdldE5vZGVNYW5hZ2VyKCkKLSAgewotICAgIHJldHVybiBub2RlTWFuYWdlcl87Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFBlcnNwZWN0aXZlQ29udGVudFBhZ2UoKQotICB7Ci0gICAgcmV0dXJuICJ3c2RsL3dzZGxfcGVyc3BlY3RpdmVfY29udGVudC5qc3AiOwotICB9Ci0KLSAgcHVibGljIGludCBnZXRQZXJzcGVjdGl2ZUlkKCkKLSAgewotICAgIHJldHVybiBBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfV1NETDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UGFuZXNGaWxlKCkKLSAgewotICAgIHJldHVybiAid3NkbC9zY3JpcHRzL3dzZGxwYW5lcy5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRGcmFtZXNldHNGaWxlKCkKLSAgewotICAgIHJldHVybiAid3NkbC9zY3JpcHRzL3dzZGxmcmFtZXNldHMuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UHJvY2Vzc0ZyYW1lc2V0c0Zvcm0oKQotICB7Ci0gICAgcmV0dXJuICJ3c2RsL2Zvcm1zL1Byb2Nlc3NXU0RMRnJhbWVzZXRzRm9ybS5qc3AiOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRUcmVlQ29udGVudFZhcigpCi0gIHsKLSAgICByZXR1cm4gIndzZGxOYXZpZ2F0b3JDb250ZW50IjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRQYWdlKCkKLSAgewotICAgIHJldHVybiAid3NkbC93c2RsX25hdmlnYXRvcl9jb250ZW50LmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKQotICB7Ci0gICAgcmV0dXJuICJ3c2RsUHJvcGVydGllc0NvbnRhaW5lciI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCkKLSAgewotICAgIHJldHVybiAid3NkbC93c2RsX3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRWYXIoKQotICB7Ci0gICAgcmV0dXJuICJ3c2RsU3RhdHVzQ29udGVudCI7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRQYWdlKCkKLSAgewotICAgIHJldHVybiAid3NkbC93c2RsX3N0YXR1c19jb250ZW50LmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpCi0gIHsKLSAgICByZXR1cm4gcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyhTdHJpbmcgY29scykKLSAgewotICAgIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29sc18gPSBjb2xzOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoU3RyaW5nIGNvbHMpCi0gIHsKLSAgICBzYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29sc18gPSBjb2xzOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpCi0gIHsKLSAgICByZXR1cm4gc2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKCkKLSAgewotICAgIHJldHVybiBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHNldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoU3RyaW5nIHJvd3MpCi0gIHsKLSAgICBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzXyA9IHJvd3M7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRTYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoU3RyaW5nIHJvd3MpCi0gIHsKLSAgICBzYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3NfID0gcm93czsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKCkKLSAgewotICAgIHJldHVybiBzYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3NfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTd2l0Y2hQZXJzcGVjdGl2ZUZvcm1BY3Rpb25MaW5rKGludCB0YXJnZXRQZXJzcGVjdGl2ZUlkLGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgewotICAgIHJldHVybiBTd2l0Y2hQZXJzcGVjdGl2ZUZyb21XU0RMQWN0aW9uLmdldEZvcm1BY3Rpb25MaW5rKHRhcmdldFBlcnNwZWN0aXZlSWQsZm9ySGlzdG9yeSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgaW50IGdldFN0YXR1c0NvbnRlbnRUeXBlKCkKLSAgewotICAgIHJldHVybiBzdGF0dXNDb250ZW50VHlwZV87Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgdm9pZCBzZXRTdGF0dXNDb250ZW50VHlwZShpbnQgc3RhdHVzQ29udGVudFR5cGUpCi0gIHsKLSAgICBzdGF0dXNDb250ZW50VHlwZV8gPSBzdGF0dXNDb250ZW50VHlwZTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTT0FQTWVzc2FnZVF1ZXVlIGdldFNPQVBSZXF1ZXN0UXVldWUoKQotICB7Ci0gICAgcmV0dXJuIHNvYXBSZXF1ZXN0UXVldWVfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFNPQVBNZXNzYWdlUXVldWUgZ2V0U09BUFJlc3BvbnNlUXVldWUoKQotICB7Ci0gICAgcmV0dXJuIHNvYXBSZXNwb25zZVF1ZXVlXzsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBOb2RlIGdldE9wZXJhdGlvbk5vZGUoKQotICB7Ci0gICAgcmV0dXJuIG9wZXJhdGlvbk5vZGVfOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIHZvaWQgc2V0T3BlcmF0aW9uTm9kZShOb2RlIG9wZXJhdGlvbk5vZGUpCi0gIHsKLSAgICBvcGVyYXRpb25Ob2RlXyA9IG9wZXJhdGlvbk5vZGU7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFNPQVBFbnZlbG9wZVhNTExpbmsoaW50IHNvYXBFbnZlbG9wZVR5cGUpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgbGluayA9IG5ldyBTdHJpbmdCdWZmZXIoIndzZGwvc29hcF9lbnZlbG9wZV94bWwuanNwPyIpOwotICAgIGxpbmsuYXBwZW5kKFdTRExBY3Rpb25JbnB1dHMuU09BUF9FTlZFTE9QRV9UWVBFKS5hcHBlbmQoJz0nKS5hcHBlbmQoc29hcEVudmVsb3BlVHlwZSk7Ci0gICAgcmV0dXJuIGxpbmsudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0QmluZGluZ1R5cGVTdHJpbmcoaW50IGJpbmRpbmdUeXBlKQotICB7Ci0gICAgc3dpdGNoIChiaW5kaW5nVHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIEJpbmRpbmdUeXBlcy5TT0FQOgotICAgICAgICByZXR1cm4gZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9CSU5ESU5HX1RZUEVfU09BUCIpOwotICAgICAgY2FzZSBCaW5kaW5nVHlwZXMuSFRUUF9HRVQ6Ci0gICAgICAgIHJldHVybiBnZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0JJTkRJTkdfVFlQRV9IVFRQX0dFVCIpOwotICAgICAgY2FzZSBCaW5kaW5nVHlwZXMuSFRUUF9QT1NUOgotICAgICAgICByZXR1cm4gZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9CSU5ESU5HX1RZUEVfSFRUUF9QT1NUIik7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9CSU5ESU5HX1RZUEVfVU5TVVBQT1JURUQiKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMU2VydmljZURldGFpbHNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETFNlcnZpY2VEZXRhaWxzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzFmZWYyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC9wZXJzcGVjdGl2ZS9XU0RMU2VydmljZURldGFpbHNUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIFdTRExTZXJ2aWNlRGV0YWlsc1Rvb2wgZXh0ZW5kcyBEZXRhaWxzVG9vbCB7Ci0KLSAgcHVibGljIFdTRExTZXJ2aWNlRGV0YWlsc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICBzdXBlcih0b29sTWFuYWdlciwgYWx0LCAid3NkbC9mb3Jtcy9XU0RMU2VydmljZURldGFpbHNGb3JtLmpzcCIpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETFNlcnZpY2VOb2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvcGVyc3BlY3RpdmUvV1NETFNlcnZpY2VOb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1NjIzMDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3BlcnNwZWN0aXZlL1dTRExTZXJ2aWNlTm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkVsZW1lbnRBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsQWRkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5SZWxSZW1vdmVFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuV1NETE1vZGVsQ29uc3RhbnRzOwotCi0vLyBXU0RMIHNlcnZpY2Ugbm9kZSBmb3IgdGhlIFdTREwgTmF2aWdhdG9yIFRyZWUgVmlldwotcHVibGljIGNsYXNzIFdTRExTZXJ2aWNlTm9kZSBleHRlbmRzIFdTRExOYXZpZ2F0b3JOb2RlCi17Ci0gIHB1YmxpYyBXU0RMU2VydmljZU5vZGUoVHJlZUVsZW1lbnQgZWxlbWVudCxOb2RlTWFuYWdlciBub2RlTWFuYWdlcixpbnQgbm9kZURlcHRoKQotICB7Ci0gICAgc3VwZXIoZWxlbWVudCxub2RlTWFuYWdlcixub2RlRGVwdGgsIndzZGwvaW1hZ2VzL3dzZGxfc2VydmljZV9ub2RlLmdpZiIpOwotICAgIGVsZW1lbnQuYWRkTGlzdGVuZXIobmV3IEVsZW1lbnRBZGFwdGVyKCkKLSAgICB7Ci0gICAgICBwdWJsaWMgdm9pZCByZWxBZGRlZChSZWxBZGRFdmVudCBldmVudCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHJlbCA9IGV2ZW50LmdldE91dEJvdW5kUmVsTmFtZSgpOwotICAgICAgICBpZiAocmVsLmVxdWFscyhXU0RMTW9kZWxDb25zdGFudHMuUkVMX1dTRExfQklORElORykpIHsKLSAgICAgICAgICBXU0RMQmluZGluZ05vZGUgd3NkbEJpbmRpbmdOb2RlID0gbmV3IFdTRExCaW5kaW5nTm9kZSgoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0UGFyZW50RWxlbWVudCgpLCBub2RlTWFuYWdlcl8sIG5vZGVEZXB0aF8gKyAxKTsKLSAgICAgICAgICBhZGRDaGlsZCh3c2RsQmluZGluZ05vZGUpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyB2b2lkIHJlbFJlbW92ZWQoUmVsUmVtb3ZlRXZlbnQgZXZlbnQpCi0gICAgICB7Ci0gICAgICAgIFRyZWVFbGVtZW50IGNoaWxkRWxlbWVudCA9IG51bGw7Ci0gICAgICAgIGlmIChldmVudC5nZXRJbkJvdW5kUmVsTmFtZSgpLmVxdWFscyhXU0RMTW9kZWxDb25zdGFudHMuUkVMX1dTRExfQklORElORykpIHsKLSAgICAgICAgICBjaGlsZEVsZW1lbnQgPSAoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0SW5ib3VuZEVsZW1lbnQoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZXZlbnQuZ2V0T3V0Qm91bmRSZWxOYW1lKCkuZXF1YWxzKFdTRExNb2RlbENvbnN0YW50cy5SRUxfV1NETF9CSU5ESU5HKSkgewotICAgICAgICAgIGNoaWxkRWxlbWVudCA9IChUcmVlRWxlbWVudClldmVudC5nZXRPdXRCb3VuZEVsZW1lbnQoKTsKLSAgICAgICAgfQotICAgICAgICByZW1vdmVDaGlsZE5vZGUoY2hpbGRFbGVtZW50KTsKLSAgICAgIH0KLSAgICB9KTsKLSAgICBzZXRWaXNpYmlsaXR5T2ZDaGlsZHJlbihmYWxzZSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBpbml0VG9vbHMoKQotICB7Ci0gICAgQ29udHJvbGxlciBjb250cm9sbGVyID0gbm9kZU1hbmFnZXJfLmdldENvbnRyb2xsZXIoKTsKLSAgICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgICBuZXcgV1NETFNlcnZpY2VEZXRhaWxzVG9vbCh0b29sTWFuYWdlcl8sIHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfV1NETF9TRVJWSUNFX0RFVEFJTFMiKSk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3RyYW5zZm9ybWVyL0ZyYWdtZW50VHJhbnNmb3JtZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC90cmFuc2Zvcm1lci9GcmFnbWVudFRyYW5zZm9ybWVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzZGU2OTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3RyYW5zZm9ybWVyL0ZyYWdtZW50VHJhbnNmb3JtZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC50cmFuc2Zvcm1lcjsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgamF2YXgud3NkbC5QYXJ0OwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS50cmFuc2Zvcm1lci5JVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLkZyYWdtZW50Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC5XU0RMT3BlcmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5JWFNERnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi1wdWJsaWMgY2xhc3MgRnJhZ21lbnRUcmFuc2Zvcm1lciBpbXBsZW1lbnRzIElUcmFuc2Zvcm1lcgotewotICBwcm90ZWN0ZWQgQ29udHJvbGxlciBjb250cm9sbGVyOwotCi0gIHB1YmxpYyBGcmFnbWVudFRyYW5zZm9ybWVyKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHRoaXMuY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gIH0KLQotICBwdWJsaWMgSGFzaHRhYmxlIG5vcm1hbGl6ZShIYXNodGFibGUgcHJvcGVydGllcykKLSAgewotICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBzYi5hcHBlbmQoIjxyb290PiIpOwotICAgIFdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KWNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCkuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKS5nZXRUcmVlRWxlbWVudCgpOwotICAgIEl0ZXJhdG9yIGl0ID0gb3BlckVsZW1lbnQuZ2V0T3JkZXJlZEJvZHlQYXJ0cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBQYXJ0IHBhcnQgPSAoUGFydClpdC5uZXh0KCk7Ci0gICAgICBJWFNERnJhZ21lbnQgZnJhZyA9IChJWFNERnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnQocGFydCk7Ci0gICAgICBFbGVtZW50W10gZWxlbWVudHMgPSBuZXcgRWxlbWVudFswXTsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBlbGVtZW50cyA9IGZyYWcuZ2VuSW5zdGFuY2VEb2N1bWVudHNGcm9tUGFyYW1ldGVyVmFsdWVzKCFvcGVyRWxlbWVudC5pc1VzZUxpdGVyYWwoKSwgbmV3IEhhc2h0YWJsZSgpLCBYTUxVdGlscy5jcmVhdGVOZXdEb2N1bWVudChudWxsKSk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBwY2UpCi0gICAgICB7Ci0gICAgICB9Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKQotICAgICAgICBzYi5hcHBlbmQoWE1MVXRpbHMuc2VyaWFsaXplKGVsZW1lbnRzW2ldLCB0cnVlKSk7Ci0gICAgfQotICAgIHNiLmFwcGVuZCgiPC9yb290PiIpOwotICAgIHByb3BlcnRpZXMucHV0KEZyYWdtZW50Q29uc3RhbnRzLlNPVVJDRV9DT05URU5ULCBzYi50b1N0cmluZygpKTsKLSAgICByZXR1cm4gcHJvcGVydGllczsKLSAgfQotCi0gIHB1YmxpYyBIYXNodGFibGUgZGVOb3JtYWxpemUoSGFzaHRhYmxlIHByb3BlcnRpZXMpCi0gIHsKLSAgICBTdHJpbmcgc291cmNlID0gKFN0cmluZykgcHJvcGVydGllcy5nZXQoRnJhZ21lbnRDb25zdGFudHMuU09VUkNFX0NPTlRFTlQpOwotICAgIGlmIChzb3VyY2UgIT0gbnVsbCkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgRWxlbWVudCByb290ID0gWE1MVXRpbHMuc3RyaW5nVG9FbGVtZW50KHNvdXJjZSk7Ci0gICAgICAgIGlmIChyb290ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBOb2RlTGlzdCBjaGlsZE5vZGVzID0gcm9vdC5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICAgICAgVmVjdG9yIGNoaWxkcmVuVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGROb2Rlcy5nZXRMZW5ndGgoKTsgaSsrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIE5vZGUgY2hpbGQgPSBjaGlsZE5vZGVzLml0ZW0oaSk7Ci0gICAgICAgICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBFbGVtZW50KQotICAgICAgICAgICAgICBjaGlsZHJlblZlY3Rvci5hZGQoY2hpbGQpOwotICAgICAgICAgIH0KLSAgICAgICAgICBFbGVtZW50W10gY2hpbGRyZW4gPSAoRWxlbWVudFtdKWNoaWxkcmVuVmVjdG9yLnRvQXJyYXkobmV3IEVsZW1lbnRbMF0pOwotICAgICAgICAgIFdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlKCkuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgICAgICBJdGVyYXRvciBpdCA9IG9wZXJFbGVtZW50LmdldE9yZGVyZWRCb2R5UGFydHMoKS5pdGVyYXRvcigpOwotICAgICAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgUGFydCBwYXJ0ID0gKFBhcnQpaXQubmV4dCgpOwotICAgICAgICAgICAgSVhTREZyYWdtZW50IGZyYWcgPSAoSVhTREZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50KHBhcnQpOwotICAgICAgICAgICAgZnJhZy5zZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMoY2hpbGRyZW4pOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgICAgewotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcHJvcGVydGllczsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3RyYW5zcG9ydC9DaHVua2VkSW5wdXRTdHJlYW0uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC90cmFuc3BvcnQvQ2h1bmtlZElucHV0U3RyZWFtLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlYTI4YTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3RyYW5zcG9ydC9DaHVua2VkSW5wdXRTdHJlYW0uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC50cmFuc3BvcnQ7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbHRlcklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLQotcHVibGljIGNsYXNzIENodW5rZWRJbnB1dFN0cmVhbSBleHRlbmRzIEZpbHRlcklucHV0U3RyZWFtCi17Ci0gIHByb3RlY3RlZCBsb25nIGNodW5rU2l6ZSA9IDBsOwotICBwcm90ZWN0ZWQgdm9sYXRpbGUgYm9vbGVhbiBjbG9zZWQgPSBmYWxzZTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IG1heENoYXJMb25nID0gKExvbmcudG9IZXhTdHJpbmcoTG9uZy5NQVhfVkFMVUUpKS50b1N0cmluZygpLmxlbmd0aCgpOwotCi0gIHByaXZhdGUgQ2h1bmtlZElucHV0U3RyZWFtKCkKLSAgewotICAgIHN1cGVyKG51bGwpOwotICB9Ci0KLSAgcHVibGljIENodW5rZWRJbnB1dFN0cmVhbShJbnB1dFN0cmVhbSBpcykKLSAgewotICAgIHN1cGVyKGlzKTsKLSAgfQotCi0gIHB1YmxpYyBpbnQgcmVhZCgpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgYnl0ZVtdIGQgPSBuZXcgYnl0ZVsxXTsKLSAgICBpbnQgcmMgPSByZWFkKGQsIDAsIDEpOwotICAgIHJldHVybiByYyA+IDAgPyAoZFswXSAmIDB4RkYpIDogcmM7Ci0gIH0KLQotICBwdWJsaWMgaW50IHJlYWQoYnl0ZVtdIGIpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgcmV0dXJuIHJlYWQoYiwgMCwgYi5sZW5ndGgpOwotICB9Ci0KLSAgcHVibGljIHN5bmNocm9uaXplZCBpbnQgcmVhZChieXRlW10gYiwgaW50IG9mZiwgaW50IGxlbikgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgICBpZiAoY2xvc2VkKQotICAgICAgcmV0dXJuIC0xOwotCi0gICAgaW50IHRvdGFscmVhZCA9IDA7Ci0gICAgaW50IGJ5dGVzcmVhZCA9IDA7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgZG8KLSAgICAgIHsKLSAgICAgICAgaWYgKGNodW5rU2l6ZSA8IDFMKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKDBsID09IGdldENodW5rZWQoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodG90YWxyZWFkID09IDApCi0gICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgcmV0dXJuIHRvdGFscmVhZDsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnl0ZXNyZWFkID0gaW4ucmVhZChiLCBvZmYgKyB0b3RhbHJlYWQsIE1hdGgubWluKGxlbiAtIHRvdGFscmVhZCwgKGludCkgTWF0aC5taW4oY2h1bmtTaXplLCBJbnRlZ2VyLk1BWF9WQUxVRSkpKTsKLSAgICAgICAgaWYgKGJ5dGVzcmVhZCA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICB0b3RhbHJlYWQgKz0gYnl0ZXNyZWFkOwotICAgICAgICAgIGNodW5rU2l6ZSAtPSBieXRlc3JlYWQ7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHdoaWxlIChsZW4gLSB0b3RhbHJlYWQgPiAwICYmIGJ5dGVzcmVhZCA+IC0xKTsKLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgY2xvc2VkID0gdHJ1ZTsKLSAgICAgIHRocm93IGU7Ci0gICAgfQotICAgIHJldHVybiB0b3RhbHJlYWQ7Ci0gIH0KLQotICBwdWJsaWMgbG9uZyBza2lwKGZpbmFsIGxvbmcgbikgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgICBpZiAoY2xvc2VkKQotICAgICAgcmV0dXJuIDA7Ci0gICAgbG9uZyBza2lwcGVkID0gMGw7Ci0gICAgYnl0ZVtdIGIgPSBuZXcgYnl0ZVsxMDI0XTsKLSAgICBpbnQgYnJlYWQgPSAtMTsKLSAgICBkbwotICAgIHsKLSAgICAgIGJyZWFkID0gcmVhZChiLCAwLCBiLmxlbmd0aCk7Ci0gICAgICBpZiAoYnJlYWQgPiAwKQotICAgICAgICBza2lwcGVkICs9IGJyZWFkOwotICAgIH0KLSAgICB3aGlsZSAoYnJlYWQgIT0gLTEgJiYgc2tpcHBlZCA8IG4pOwotICAgIHJldHVybiBza2lwcGVkOwotICB9Ci0KLSAgcHVibGljIGludCBhdmFpbGFibGUoKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotICAgIGlmIChjbG9zZWQpCi0gICAgICByZXR1cm4gMDsKLSAgICBpbnQgcmMgPSAoaW50KSBNYXRoLm1pbihjaHVua1NpemUsIEludGVnZXIuTUFYX1ZBTFVFKTsKLSAgICByZXR1cm4gTWF0aC5taW4ocmMsIGluLmF2YWlsYWJsZSgpKTsKLSAgfQotCi0gIHByb3RlY3RlZCBsb25nIGdldENodW5rZWQoKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotICAgIC8vU3RyaW5nQnVmZmVyIGJ1Zj0gbmV3IFN0cmluZ0J1ZmZlcigxMDI0KTsKLSAgICBieXRlW10gYnVmID0gbmV3IGJ5dGVbbWF4Q2hhckxvbmcgKyAyXTsKLSAgICBpbnQgYnVmc3ogPSAwOwotICAgIGNodW5rU2l6ZSA9IC0xTDsKLSAgICBpbnQgYyA9IC0xOwotICAgIGRvCi0gICAgewotICAgICAgYyA9IGluLnJlYWQoKTsKLSAgICAgIGlmIChjID4gLTEpCi0gICAgICB7Ci0gICAgICAgIGlmIChjICE9ICdccicgJiYgYyAhPSAnXG4nICYmIGMgIT0gJyAnICYmIGMgIT0gJ1x0JykKLSAgICAgICAgewotICAgICAgICAgIGJ1ZltidWZzeisrXSA9ICgoYnl0ZSkgYyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgd2hpbGUgKGMgPiAtMSAmJiAoYyAhPSAnXG4nIHx8IGJ1ZnN6ID09IDApICYmIGJ1ZnN6IDwgYnVmLmxlbmd0aCk7Ci0gICAgaWYgKGMgPCAwKQotICAgIHsKLSAgICAgIGNsb3NlZCA9IHRydWU7Ci0gICAgfQotICAgIFN0cmluZyBzYnVmID0gbmV3IFN0cmluZyhidWYsIDAsIGJ1ZnN6KTsKLSAgICBpZiAoYnVmc3ogPiBtYXhDaGFyTG9uZykKLSAgICB7Ci0gICAgICBjbG9zZWQgPSB0cnVlOwotICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJDaHVua2VkIGlucHV0IHN0cmVhbSBmYWlsZWQgdG8gcmVjZWl2ZSB2YWxpZCBjaHVuayBzaXplOiIgKyBzYnVmKTsKLSAgICB9Ci0gICAgdHJ5Ci0gICAgewotICAgICAgY2h1bmtTaXplID0gTG9uZy5wYXJzZUxvbmcoc2J1ZiwgMTYpOwotICAgIH0KLSAgICBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5lKQotICAgIHsKLSAgICAgIGNsb3NlZCA9IHRydWU7Ci0gICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIiciICsgc2J1ZiArICInICIgKyBuZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgICBpZiAoY2h1bmtTaXplIDwgMUwpCi0gICAgICBjbG9zZWQgPSB0cnVlOwotICAgIGlmIChjaHVua1NpemUgIT0gMEwgJiYgYyA8IDApCi0gICAgewotICAgICAgLy9JZiBjaHVuayBzaXplIGlzIHplcm8gdHJ5IGFuZCBiZSB0b2xlcmFudCB0aGF0IHRoZXJlIG1heWJlIG5vIGNyIG9yIGxmCi0gICAgICAvLyBhdCB0aGUgZW5kLgotICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJIVFRQIENodW5rZWQgc3RyZWFtIGNsb3NlZCBpbiBtaWRkbGUgb2YgY2h1bmsuIik7Ci0gICAgfQotICAgIGlmIChjaHVua1NpemUgPCAwTCkKLSAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbigiSFRUUCBDaHVuayBzaXplIHJlY2VpdmVkICIgKyBjaHVua1NpemUgKyAiIGlzIGxlc3MgdGhhbiB6ZXJvLiIpOwotICAgIHJldHVybiBjaHVua1NpemU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBjbG9zZSgpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgc3luY2hyb25pemVkICh0aGlzKQotICAgIHsKLSAgICAgIGlmIChjbG9zZWQpCi0gICAgICAgIHJldHVybjsKLSAgICAgIGNsb3NlZCA9IHRydWU7Ci0gICAgfQotICAgIGJ5dGVbXSBiID0gbmV3IGJ5dGVbMTAyNF07Ci0gICAgaW50IGJyZWFkID0gLTE7Ci0gICAgZG8KLSAgICB7Ci0gICAgICBicmVhZCA9IHJlYWQoYiwgMCwgYi5sZW5ndGgpOwotICAgIH0KLSAgICB3aGlsZSAoYnJlYWQgIT0gLTEpOwotICB9Ci0KLSAgLyoKLSAgICogcHVibGljIHZvaWQgbWFyayhpbnQgcmVhZGxpbWl0KQotICAgKiB7Ci0gICAqIH0KLSAgICovCi0KLSAgcHVibGljIHZvaWQgcmVzZXQoKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbigiRG9uJ3Qgc3VwcG9ydCBtYXJrZWQgc3RyZWFtcyIpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gbWFya1N1cHBvcnRlZCgpCi0gIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC90cmFuc3BvcnQvSFRUUFJlc3BvbnNlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvdHJhbnNwb3J0L0hUVFBSZXNwb25zZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Y2ZlMGNhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC90cmFuc3BvcnQvSFRUUFJlc3BvbnNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwudHJhbnNwb3J0OwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1wdWJsaWMgY2xhc3MgSFRUUFJlc3BvbnNlCi17Ci0gIHByaXZhdGUgYm9vbGVhbiBzdGF0dXNTZXQ7Ci0gIHByaXZhdGUgaW50IHN0YXR1c0NvZGU7Ci0gIHByaXZhdGUgU3RyaW5nIHN0YXR1c01lc3NhZ2U7Ci0gIHByaXZhdGUgSGFzaHRhYmxlIGhlYWRlcnM7Ci0gIHByaXZhdGUgYnl0ZVtdIHBheWxvYWQ7Ci0KLSAgcHVibGljIEhUVFBSZXNwb25zZSgpCi0gIHsKLSAgICByZXNldCgpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVzZXQoKQotICB7Ci0gICAgc3RhdHVzU2V0ID0gZmFsc2U7Ci0gICAgc3RhdHVzQ29kZSA9IC0xOwotICAgIHN0YXR1c01lc3NhZ2UgPSBudWxsOwotICAgIGlmIChoZWFkZXJzICE9IG51bGwpCi0gICAgICBoZWFkZXJzLmNsZWFyKCk7Ci0gICAgZWxzZQotICAgICAgaGVhZGVycyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBwYXlsb2FkID0gbmV3IGJ5dGVbMF07Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc1N0YXR1c1NldCgpCi0gIHsKLSAgICByZXR1cm4gc3RhdHVzU2V0OwotICB9Ci0KLSAgcHVibGljIGludCBnZXRTdGF0dXNDb2RlKCkKLSAgewotICAgIHJldHVybiBzdGF0dXNDb2RlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0U3RhdHVzQ29kZShpbnQgc3RhdHVzQ29kZSkKLSAgewotICAgIHN0YXR1c1NldCA9IHRydWU7Ci0gICAgdGhpcy5zdGF0dXNDb2RlID0gc3RhdHVzQ29kZTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U3RhdHVzTWVzc2FnZSgpCi0gIHsKLSAgICByZXR1cm4gc3RhdHVzTWVzc2FnZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFN0YXR1c01lc3NhZ2UoU3RyaW5nIHN0YXR1c01lc3NhZ2UpCi0gIHsKLSAgICB0aGlzLnN0YXR1c01lc3NhZ2UgPSBzdGF0dXNNZXNzYWdlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgYWRkSGVhZGVyKFN0cmluZyBrZXksIFN0cmluZyB2YWx1ZSkKLSAgewotICAgIGhlYWRlcnMucHV0KGtleSwgdmFsdWUpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRIZWFkZXIoU3RyaW5nIGtleSkKLSAgewotICAgIHJldHVybiAoU3RyaW5nKSBoZWFkZXJzLmdldChrZXkpOwotICB9Ci0KLSAgcHVibGljIE1hcCBnZXRIZWFkZXJzKCkKLSAgewotICAgIHJldHVybiBoZWFkZXJzOwotICB9Ci0KLSAgcHVibGljIGJ5dGVbXSBnZXRQYXlsb2FkKCkKLSAgewotICAgIHJldHVybiBwYXlsb2FkOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0UGF5bG9hZChieXRlW10gcGF5bG9hZCkKLSAgewotICAgIHRoaXMucGF5bG9hZCA9IHBheWxvYWQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC90cmFuc3BvcnQvSFRUUFRyYW5zcG9ydC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3RyYW5zcG9ydC9IVFRQVHJhbnNwb3J0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1MjdkMTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3RyYW5zcG9ydC9IVFRQVHJhbnNwb3J0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDEzMSAgIDEyNTc3NyBqZXNwZXJAc2Vsc2thYmV0Lm9yZyAtIEplc3BlciBTIE1vbGxlcgotICogMjAwNjAyMjIgICAxMTgwMTkgYW5keXpoYWlAY2EuaWJtLmNvbSAtIEFuZHkgWmhhaQotICogMjAwNjAyMjIgICAxMjg1NjQgamVzcGVyQHNlbHNrYWJldC5vcmcgLSBKZXNwZXIgUyBNb2xsZXIKLSAqIDIwMDYwODIzICAgIDk5MDM0IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0Ugc3VwcG9ydCBmb3IgYmFzaWMtYXV0aGVudGljYXRpbmcgZmlyZXdhbGxzCi0gKiAyMDA3MDQxMyAgIDE3NjQ5MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFOiBNYWtlIG1lc3NhZ2UvdHJhbnNwb3J0IHN0YWNrIHBsdWdnYWJsZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnRyYW5zcG9ydDsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5ldC5Tb2NrZXQ7Ci1pbXBvcnQgamF2YS5uZXQuU29ja2V0VGltZW91dEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS5uZXQuVW5rbm93bkhvc3RFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZheC5uZXQuc3NsLlNTTFNvY2tldEZhY3Rvcnk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5YTUxVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LkhUVFBUcmFuc3BvcnRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBzdW4ubWlzYy5CQVNFNjRFbmNvZGVyOwotCi1wdWJsaWMgY2xhc3MgSFRUUFRyYW5zcG9ydAotewotICBwcml2YXRlIGZpbmFsIFN0cmluZyBTWVNfUFJPUF9IVFRQU19QUk9YWV9IT1NUID0gImh0dHBzLnByb3h5SG9zdCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFNZU19QUk9QX0hUVFBTX1BST1hZX1BPUlQgPSAiaHR0cHMucHJveHlQb3J0IjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgU1lTX1BST1BfSFRUUFNfTk9OX1BST1hZX0hPU1RTID0gImh0dHBzLm5vblByb3h5SG9zdHMiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBTWVNfUFJPUF9IVFRQX1BST1hZX0hPU1QgPSAiaHR0cC5wcm94eUhvc3QiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBTWVNfUFJPUF9IVFRQX1BST1hZX1BPUlQgPSAiaHR0cC5wcm94eVBvcnQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBTWVNfUFJPUF9IVFRQX1BST1hZX1VTRVJfTkFNRSA9ICJodHRwLnByb3h5VXNlck5hbWUiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBTWVNfUFJPUF9IVFRQX1BST1hZX1BBU1NXT1JEID0gImh0dHAucHJveHlQYXNzd29yZCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFNZU19QUk9QX0hUVFBfTk9OX1BST1hZX0hPU1RTID0gImh0dHAubm9uUHJveHlIb3N0cyI7Ci0gIAotICBwcml2YXRlIGZpbmFsIFN0cmluZyBIVFRQX01FVEhPRCA9ICJQT1NUIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSFRUUF9DT05ORUNUID0gIkNPTk5FQ1QiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBIVFRQX1ZFUlNJT05fMV8wID0gIkhUVFAvMS4wIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSFRUUF9WRVJTSU9OID0gIkhUVFAvMS4xIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSFRUUF9IRUFERVJfU09BUF9BQ1RJT04gPSAiU09BUEFjdGlvbiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhUVFBfSEVBREVSX0FVVEggPSAiQXV0aG9yaXphdGlvbiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhUVFBfSEVBREVSX1dXV19BVVRIID0gIldXVy1BdXRoZW50aWNhdGUiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBIVFRQX0hFQURFUl9QUk9YWV9BVVRIID0gIlByb3h5LWF1dGhvcml6YXRpb24iOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBIVFRQX0hFQURFUl9DT09LSUUgPSAiQ29va2llIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSFRUUF9IRUFERVJfQ09PS0lFMiA9ICJDb29raWUyIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSFRUUF9IRUFERVJfSE9TVCA9ICJIb3N0IjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSFRUUF9IRUFERVJfQ09OVEVOVF9UWVBFID0gIkNvbnRlbnQtVHlwZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhUVFBfSEVBREVSX0NPTlRFTlRfTEVOR1RIID0gIkNvbnRlbnQtTGVuZ3RoIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSFRUUF9IRUFERVJfQUNDRVBUID0gIkFjY2VwdCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEhUVFBfSEVBREVSX1VTRVJfQUdFTlQgPSAiVXNlci1BZ2VudCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEhUVFBfSEVBREVSX0NBQ0hFX0NPTlRST0wgPSAiQ2FjaGUtQ29udHJvbCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEhUVFBfSEVBREVSX1BSQUdNQSA9ICJQcmFnbWEiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBIVFRQX0hFQURFUl9UUkFOU0ZFUl9FTkNPREVJTkcgPSAiVHJhbnNmZXItRW5jb2RpbmciOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBIVFRQX0hFQURFUl9DT05ORUNUSU9OID0gIkNvbm5lY3Rpb24iOwotICAKLSAgcHJpdmF0ZSBmaW5hbCBpbnQgSFRUUF9DT0RFX0NPTlRJTlVFID0gMTAwOwotICBwcml2YXRlIGZpbmFsIGludCBIVFRQX0NPREVfT0sgPSAyMDA7Ci0gIHByaXZhdGUgZmluYWwgaW50IEhUVFBfQ09ERV9FWENFUFRJT04gPSAzMDA7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSUJNX1dFQl9TRVJWSUNFU19FWFBMT1JFUiA9ICJJQk0gV2ViIFNlcnZpY2VzIEV4cGxvcmVyIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgVEVYVF9YTUwgPSAidGV4dC94bWwiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBDT05URU5UX1RZUEVfVkFMVUUgPSAidGV4dC94bWw7IGNoYXJzZXQ9dXRmLTgiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBBQ0NFUFRfVkFMVUUgPSAiYXBwbGljYXRpb24vc29hcCt4bWwsIGFwcGxpY2F0aW9uL2RpbWUsIG11bHRpcGFydC9yZWxhdGVkLCB0ZXh0LyoiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBCQVNJQyA9ICJCYXNpYyI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIE5PX0NBQ0hFID0gIm5vLWNhY2hlIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgQ0hVTktFRCA9ICJjaHVua2VkIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgQ0xPU0UgPSAiY2xvc2UiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBIVFRQUyA9ICJodHRwcyI7Ci0gIHByaXZhdGUgZmluYWwgY2hhciBRVU9URSA9ICdcIic7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgY2hhciBDT0xPTiA9ICc6JzsKLSAgcHJpdmF0ZSBmaW5hbCBjaGFyIFNQQUNFID0gJyAnOwotICBwcml2YXRlIGZpbmFsIGNoYXIgVEFCID0gJ1x0JzsKLSAgcHJpdmF0ZSBmaW5hbCBjaGFyIFIgPSAnXHInOwotICBwcml2YXRlIGZpbmFsIGNoYXIgTiA9ICdcbic7Ci0gIHByaXZhdGUgZmluYWwgY2hhciBST09UID0gJy8nOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBORVdfTElORSA9ICJcclxuIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgRU1QVFlfU1RSSU5HID0gIiI7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBpbnQgREVGQVVMVF9IVFRQX1BPUlQgPSA4MDsKLSAgcHJpdmF0ZSBmaW5hbCBpbnQgREVGQVVMVF9IVFRQU19QT1JUID0gNDQzOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBERUZBVUxUX1NPQVBfRU5DT0RJTkcgPSAiVVRGLTgiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBERUZBVUxUX0hUVFBfSEVBREVSX0VOQ09ESU5HID0gImlzby04ODU5LTEiOwotICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gREVGQVVMVF9DQVNFX1NFTlNJVElWRV9GT1JfSE9TVF9OQU1FID0gZmFsc2U7Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgaHR0cEJhc2ljQXV0aFVzZXJuYW1lOwotICBwcml2YXRlIFN0cmluZyBodHRwQmFzaWNBdXRoUGFzc3dvcmQ7Ci0gIHByaXZhdGUgYm9vbGVhbiBtYWludGFpblNlc3Npb24gPSBmYWxzZTsKLSAgcHJpdmF0ZSBTdHJpbmcgY29va2llOwotICBwcml2YXRlIFN0cmluZyBjb29raWUyOwotICBwcml2YXRlIEhUVFBSZXNwb25zZSBodHRwUmVzcG9uc2U7Ci0KLSAgcHVibGljIFN0cmluZyBnZXRIdHRwQmFzaWNBdXRoVXNlcm5hbWUoKQotICB7Ci0gICAgcmV0dXJuIGh0dHBCYXNpY0F1dGhVc2VybmFtZTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0SHR0cEJhc2ljQXV0aFVzZXJuYW1lKFN0cmluZyBodHRwQmFzaWNBdXRoVXNlcm5hbWUpCi0gIHsKLSAgICB0aGlzLmh0dHBCYXNpY0F1dGhVc2VybmFtZSA9IGh0dHBCYXNpY0F1dGhVc2VybmFtZTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRIdHRwQmFzaWNBdXRoUGFzc3dvcmQoKQotICB7Ci0gICAgcmV0dXJuIGh0dHBCYXNpY0F1dGhQYXNzd29yZDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0SHR0cEJhc2ljQXV0aFBhc3N3b3JkKFN0cmluZyBodHRwQmFzaWNBdXRoUGFzc3dvcmQpCi0gIHsKLSAgICB0aGlzLmh0dHBCYXNpY0F1dGhQYXNzd29yZCA9IGh0dHBCYXNpY0F1dGhQYXNzd29yZDsKLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIGdldE1ldGhvZChVUkwgdXJsKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcihIVFRQX01FVEhPRCk7Ci0gICAgc2IuYXBwZW5kKFNQQUNFKTsKLSAgICBTdHJpbmcgcHJvdG9jb2wgPSB1cmwuZ2V0UHJvdG9jb2woKTsKLSAgICBTdHJpbmcgaHR0cFByb3h5SG9zdCA9IFN5c3RlbS5nZXRQcm9wZXJ0eShTWVNfUFJPUF9IVFRQX1BST1hZX0hPU1QpOwotICAgIFN0cmluZyBodHRwc1Byb3h5SG9zdCA9IFN5c3RlbS5nZXRQcm9wZXJ0eShTWVNfUFJPUF9IVFRQU19QUk9YWV9IT1NUKTsKLSAgICBpZiAocHJvdG9jb2wuZXF1YWxzSWdub3JlQ2FzZSgiaHR0cCIpICYmIGh0dHBQcm94eUhvc3QgIT0gbnVsbCAmJiBodHRwUHJveHlIb3N0Lmxlbmd0aCgpID4gMCkKLSAgICB7Ci0gICAgICBzYi5hcHBlbmQodXJsLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgICBlbHNlIGlmIChwcm90b2NvbC5lcXVhbHNJZ25vcmVDYXNlKCJodHRwcyIpICYmIGh0dHBzUHJveHlIb3N0ICE9IG51bGwgJiYgaHR0cHNQcm94eUhvc3QubGVuZ3RoKCkgPiAwKQotICAgIHsKLSAgICAgIHNiLmFwcGVuZCh1cmwudG9TdHJpbmcoKSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBTdHJpbmcgZmlsZSA9IHVybC5nZXRGaWxlKCk7Ci0gICAgICBpZiAoZmlsZSAhPSBudWxsICYmIGZpbGUubGVuZ3RoKCkgPiAwKQotICAgICAgICBzYi5hcHBlbmQoZmlsZSk7Ci0gICAgICBlbHNlCi0gICAgICAgIHNiLmFwcGVuZChST09UKTsKLSAgICB9Ci0gICAgc2IuYXBwZW5kKFNQQUNFKTsKLSAgICBzYi5hcHBlbmQoSFRUUF9WRVJTSU9OKTsKLSAgICBzYi5hcHBlbmQoTkVXX0xJTkUpOwotICAgIHJldHVybiBzYi50b1N0cmluZygpOwotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0SG9zdChVUkwgdXJsKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcihIVFRQX0hFQURFUl9IT1NUKTsKLSAgICBzYi5hcHBlbmQoQ09MT04pOwotICAgIHNiLmFwcGVuZChTUEFDRSk7Ci0gICAgc2IuYXBwZW5kKHVybC5nZXRIb3N0KCkpOwotICAgIHNiLmFwcGVuZChDT0xPTik7Ci0gICAgaW50IHBvcnQgPSB1cmwuZ2V0UG9ydCgpOwotICAgIGlmIChwb3J0ID4gMCkKLSAgICAgIHNiLmFwcGVuZChTdHJpbmcudmFsdWVPZihwb3J0KSk7Ci0gICAgZWxzZSBpZiAodXJsLmdldFByb3RvY29sKCkuZXF1YWxzSWdub3JlQ2FzZShIVFRQUykpCi0gICAgICBzYi5hcHBlbmQoREVGQVVMVF9IVFRQU19QT1JUKTsKLSAgICBlbHNlCi0gICAgICBzYi5hcHBlbmQoREVGQVVMVF9IVFRQX1BPUlQpOwotICAgIHNiLmFwcGVuZChORVdfTElORSk7Ci0gICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGdldENvbnRlbnRUeXBlKCkKLSAgewotICAgIHJldHVybiBnZXRIVFRQSGVhZGVyKEhUVFBfSEVBREVSX0NPTlRFTlRfVFlQRSwgQ09OVEVOVF9UWVBFX1ZBTFVFKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0Q29udGVudExlbmd0aChieXRlW10gcGF5bG9hZEFzQnl0ZXMpCi0gIHsKLSAgICByZXR1cm4gZ2V0SFRUUEhlYWRlcihIVFRQX0hFQURFUl9DT05URU5UX0xFTkdUSCwgU3RyaW5nLnZhbHVlT2YocGF5bG9hZEFzQnl0ZXMubGVuZ3RoKSk7Ci0gIH0KLQotICBwcml2YXRlIFN0cmluZyBnZXRTT0FQQWN0aW9uKFN0cmluZyBzb2FwQWN0aW9uKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcihIVFRQX0hFQURFUl9TT0FQX0FDVElPTik7Ci0gICAgc2IuYXBwZW5kKENPTE9OKTsKLSAgICBzYi5hcHBlbmQoU1BBQ0UpOwotICAgIHNiLmFwcGVuZChRVU9URSk7Ci0gICAgaWYgKHNvYXBBY3Rpb24gIT0gbnVsbCkKLSAgICAgIHNiLmFwcGVuZChzb2FwQWN0aW9uKTsKLSAgICBzYi5hcHBlbmQoUVVPVEUpOwotICAgIHNiLmFwcGVuZChORVdfTElORSk7Ci0gICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGdldENvb2tpZSgpCi0gIHsKLSAgICBpZiAobWFpbnRhaW5TZXNzaW9uKQotICAgICAgcmV0dXJuIGdldEhUVFBIZWFkZXIoSFRUUF9IRUFERVJfQ09PS0lFLCBjb29raWUpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBFTVBUWV9TVFJJTkc7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGdldENvb2tpZTIoKQotICB7Ci0gICAgaWYgKG1haW50YWluU2Vzc2lvbikKLSAgICAgIHJldHVybiBnZXRIVFRQSGVhZGVyKEhUVFBfSEVBREVSX0NPT0tJRTIsIGNvb2tpZTIpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBFTVBUWV9TVFJJTkc7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGdldFdXV0F1dGhlbnRpY2F0aW9uKCkKLSAgewotICAgIGlmIChodHRwQmFzaWNBdXRoVXNlcm5hbWUgIT0gbnVsbCAmJiBodHRwQmFzaWNBdXRoUGFzc3dvcmQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKGh0dHBCYXNpY0F1dGhVc2VybmFtZSk7Ci0gICAgICBzYi5hcHBlbmQoQ09MT04pOwotICAgICAgc2IuYXBwZW5kKGh0dHBCYXNpY0F1dGhQYXNzd29yZCk7Ci0gICAgICBCQVNFNjRFbmNvZGVyIGVuY29kZXIgPSBuZXcgQkFTRTY0RW5jb2RlcigpOwotICAgICAgU3RyaW5nIGVuY29kZWRVc2VyTmFtZVBhc3N3b3JkID0gZW5jb2Rlci5lbmNvZGUoc2IudG9TdHJpbmcoKS5nZXRCeXRlcygpKTsKLSAgICAgIHNiLnNldExlbmd0aCgwKTsKLSAgICAgIHNiLmFwcGVuZChIVFRQX0hFQURFUl9BVVRIKTsKLSAgICAgIHNiLmFwcGVuZChDT0xPTik7Ci0gICAgICBzYi5hcHBlbmQoU1BBQ0UpOwotICAgICAgc2IuYXBwZW5kKEJBU0lDKTsKLSAgICAgIHNiLmFwcGVuZChTUEFDRSk7Ci0gICAgICBzYi5hcHBlbmQoZW5jb2RlZFVzZXJOYW1lUGFzc3dvcmQpOwotICAgICAgc2IuYXBwZW5kKE5FV19MSU5FKTsKLSAgICAgIHJldHVybiBzYi50b1N0cmluZygpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gRU1QVFlfU1RSSU5HOwotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBnZXRQcm94eUF1dGhlbnRpY2F0aW9uKCkKLSAgewotICAgIFN0cmluZyBwcm94eVVzZXJOYW1lID0gU3lzdGVtLmdldFByb3BlcnR5KFNZU19QUk9QX0hUVFBfUFJPWFlfVVNFUl9OQU1FKTsKLSAgICBTdHJpbmcgcHJveHlQYXNzd29yZCA9IFN5c3RlbS5nZXRQcm9wZXJ0eShTWVNfUFJPUF9IVFRQX1BST1hZX1BBU1NXT1JEKTsKLSAgICBpZiAocHJveHlVc2VyTmFtZSAhPSBudWxsICYmIHByb3h5UGFzc3dvcmQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKHByb3h5VXNlck5hbWUpOwotICAgICAgc2IuYXBwZW5kKENPTE9OKTsKLSAgICAgIHNiLmFwcGVuZChwcm94eVBhc3N3b3JkKTsKLSAgICAgIEJBU0U2NEVuY29kZXIgZW5jb2RlciA9IG5ldyBCQVNFNjRFbmNvZGVyKCk7Ci0gICAgICBTdHJpbmcgZW5jb2RlZFVzZXJOYW1lUGFzc3dvcmQgPSBlbmNvZGVyLmVuY29kZShzYi50b1N0cmluZygpLmdldEJ5dGVzKCkpOwotICAgICAgc2Iuc2V0TGVuZ3RoKDApOwotICAgICAgc2IuYXBwZW5kKEhUVFBfSEVBREVSX1BST1hZX0FVVEgpOwotICAgICAgc2IuYXBwZW5kKENPTE9OKTsKLSAgICAgIHNiLmFwcGVuZChTUEFDRSk7Ci0gICAgICBzYi5hcHBlbmQoQkFTSUMpOwotICAgICAgc2IuYXBwZW5kKFNQQUNFKTsKLSAgICAgIHNiLmFwcGVuZChlbmNvZGVkVXNlck5hbWVQYXNzd29yZCk7Ci0gICAgICBzYi5hcHBlbmQoTkVXX0xJTkUpOwotICAgICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJldHVybiBFTVBUWV9TVFJJTkc7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGdldEFjY2VwdCgpCi0gIHsKLSAgICByZXR1cm4gZ2V0SFRUUEhlYWRlcihIVFRQX0hFQURFUl9BQ0NFUFQsIEFDQ0VQVF9WQUxVRSk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGdldFVzZXJBZ2VudCgpCi0gIHsKLSAgICByZXR1cm4gZ2V0SFRUUEhlYWRlcihIVFRQX0hFQURFUl9VU0VSX0FHRU5ULCBJQk1fV0VCX1NFUlZJQ0VTX0VYUExPUkVSKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0Q2FjaGVDb250cm9sKCkKLSAgewotICAgIHJldHVybiBnZXRIVFRQSGVhZGVyKEhUVFBfSEVBREVSX0NBQ0hFX0NPTlRST0wsIE5PX0NBQ0hFKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0UHJhZ21hKCkKLSAgewotICAgIHJldHVybiBnZXRIVFRQSGVhZGVyKEhUVFBfSEVBREVSX1BSQUdNQSwgTk9fQ0FDSEUpOwotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBnZXRDb25uZWN0aW9uKCkKLSAgewotICAgIHJldHVybiBnZXRIVFRQSGVhZGVyKEhUVFBfSEVBREVSX0NPTk5FQ1RJT04sIENMT1NFKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0SFRUUEhlYWRlcihTdHJpbmcga2V5LCBTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBpZiAodmFsdWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKGtleSk7Ci0gICAgICBzYi5hcHBlbmQoQ09MT04pOwotICAgICAgc2IuYXBwZW5kKFNQQUNFKTsKLSAgICAgIHNiLmFwcGVuZCh2YWx1ZSk7Ci0gICAgICBzYi5hcHBlbmQoTkVXX0xJTkUpOwotICAgICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJldHVybiBFTVBUWV9TVFJJTkc7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZW5kKFVSTCB1cmwsIFN0cmluZyBzb2FwQWN0aW9uLCBTdHJpbmcgcGF5bG9hZCkgdGhyb3dzIFVua25vd25Ib3N0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbgotICB7Ci0gICAgYnl0ZVtdIHBheWxvYWRBc1VURjggPSBwYXlsb2FkLmdldEJ5dGVzKERFRkFVTFRfU09BUF9FTkNPRElORyk7Ci0gICAgICAgCi0gICAgU3RyaW5nQnVmZmVyIGh0dHBIZWFkZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgaHR0cEhlYWRlci5hcHBlbmQoZ2V0TWV0aG9kKHVybCkpOwotICAgIGh0dHBIZWFkZXIuYXBwZW5kKGdldEhvc3QodXJsKSk7Ci0gICAgaHR0cEhlYWRlci5hcHBlbmQoZ2V0Q29udGVudFR5cGUoKSk7Ci0gICAgaHR0cEhlYWRlci5hcHBlbmQoZ2V0Q29udGVudExlbmd0aChwYXlsb2FkQXNVVEY4KSk7Ci0gICAgaHR0cEhlYWRlci5hcHBlbmQoZ2V0QWNjZXB0KCkpOwotICAgIGh0dHBIZWFkZXIuYXBwZW5kKGdldFVzZXJBZ2VudCgpKTsKLSAgICBodHRwSGVhZGVyLmFwcGVuZChnZXRDYWNoZUNvbnRyb2woKSk7Ci0gICAgaHR0cEhlYWRlci5hcHBlbmQoZ2V0UHJhZ21hKCkpOwotICAgIGh0dHBIZWFkZXIuYXBwZW5kKGdldFNPQVBBY3Rpb24oc29hcEFjdGlvbikpOwotICAgIGh0dHBIZWFkZXIuYXBwZW5kKGdldFdXV0F1dGhlbnRpY2F0aW9uKCkpOwotICAgIGh0dHBIZWFkZXIuYXBwZW5kKGdldFByb3h5QXV0aGVudGljYXRpb24oKSk7Ci0gICAgaHR0cEhlYWRlci5hcHBlbmQoZ2V0Q29va2llKCkpOwotICAgIGh0dHBIZWFkZXIuYXBwZW5kKGdldENvb2tpZTIoKSk7Ci0gICAgaHR0cEhlYWRlci5hcHBlbmQoZ2V0Q29ubmVjdGlvbigpKTsKLSAgICBodHRwSGVhZGVyLmFwcGVuZChORVdfTElORSk7IC8vIG5ldyBsaW5lIGJldHdlZW4gdGhlIEhUVFAgaGVhZGVyIGFuZCB0aGUgcGF5bG9hZAotICAgIFNvY2tldCBzb2NrZXQgPSBidWlsZFNvY2tldCh1cmwpOwotICAgIElucHV0U3RyZWFtIGlzID0gc29ja2V0LmdldElucHV0U3RyZWFtKCk7Ci0gICAgT3V0cHV0U3RyZWFtIG9zID0gc29ja2V0LmdldE91dHB1dFN0cmVhbSgpOwotICAgIG9zLndyaXRlKGh0dHBIZWFkZXIudG9TdHJpbmcoKS5nZXRCeXRlcyhERUZBVUxUX0hUVFBfSEVBREVSX0VOQ09ESU5HKSk7Ci0gICAgb3Mud3JpdGUocGF5bG9hZEFzVVRGOCk7Ci0gICAgb3MuZmx1c2goKTsKLSAgICBodHRwUmVzcG9uc2UgPSBuZXcgSFRUUFJlc3BvbnNlKCk7Ci0gICAgcmVhZEhUVFBSZXNwb25zZUhlYWRlcihpcywgaHR0cFJlc3BvbnNlKTsKLSAgICBpbnQgY29kZSA9IGh0dHBSZXNwb25zZS5nZXRTdGF0dXNDb2RlKCk7Ci0gICAgaWYgKGNvZGUgPT0gSFRUUF9DT0RFX0NPTlRJTlVFKQotICAgIHsKLSAgICAgIGh0dHBSZXNwb25zZS5yZXNldCgpOwotICAgICAgcmVhZEhUVFBSZXNwb25zZUhlYWRlcihpcywgaHR0cFJlc3BvbnNlKTsKLSAgICB9Ci0gICAgcmVhZEhUVFBSZXNwb25zZVBheWxvYWQoaXMsIGh0dHBSZXNwb25zZSk7Ci0gICAgb3MuY2xvc2UoKTsKLSAgICBpcy5jbG9zZSgpOwotICAgIHNvY2tldC5jbG9zZSgpOwotICAgIGNvZGUgPSBodHRwUmVzcG9uc2UuZ2V0U3RhdHVzQ29kZSgpOwotICAgIFN0cmluZyBjb250ZW50VHlwZSA9IGh0dHBSZXNwb25zZS5nZXRIZWFkZXIoSFRUUF9IRUFERVJfQ09OVEVOVF9UWVBFLnRvTG93ZXJDYXNlKCkpOwotICAgIGlmIChjb2RlID49IEhUVFBfQ09ERV9FWENFUFRJT04gJiYgKGNvbnRlbnRUeXBlID09IG51bGwgfHwgY29udGVudFR5cGUudG9Mb3dlckNhc2UoKS5pbmRleE9mKFRFWFRfWE1MLnRvTG93ZXJDYXNlKCkpID09IC0xKSkKLSAgICAgIHRocm93IG5ldyBIVFRQVHJhbnNwb3J0RXhjZXB0aW9uKGNvZGUsIGh0dHBSZXNwb25zZS5nZXRTdGF0dXNNZXNzYWdlKCksIGh0dHBSZXNwb25zZS5nZXRIZWFkZXJzKCkpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHJlYWRIVFRQUmVzcG9uc2VIZWFkZXIoSW5wdXRTdHJlYW0gaXMsIEhUVFBSZXNwb25zZSByZXNwKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotICAgIGJ5dGUgYiA9IDA7Ci0gICAgaW50IGxlbiA9IDA7Ci0gICAgaW50IGNvbG9uSW5kZXggPSAtMTsKLSAgICBTdHJpbmcga2V5OwotICAgIFN0cmluZyB2YWx1ZTsKLSAgICBib29sZWFuIHJlYWRUb29NdWNoID0gZmFsc2U7Ci0gICAgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJhb3M7Ci0gICAgZm9yIChiYW9zID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSg0MDk2KTs7KQotICAgIHsKLSAgICAgIGlmICghcmVhZFRvb011Y2gpCi0gICAgICAgIGIgPSAoYnl0ZSlpcy5yZWFkKCk7Ci0gICAgICBpZiAoYiA9PSAtMSkKLSAgICAgICAgYnJlYWs7Ci0gICAgICByZWFkVG9vTXVjaCA9IGZhbHNlOwotICAgICAgaWYgKChiICE9IFIpICYmIChiICE9IE4pKQotICAgICAgewotICAgICAgICBpZiAoKGIgPT0gQ09MT04pICYmIChjb2xvbkluZGV4ID09IC0xKSkKLSAgICAgICAgICBjb2xvbkluZGV4ID0gbGVuOwotICAgICAgICBsZW4rKzsKLSAgICAgICAgYmFvcy53cml0ZShiKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGIgPT0gUikKLSAgICAgICAgY29udGludWU7Ci0gICAgICBlbHNlIC8vIGIgPT0gTgotICAgICAgewotICAgICAgICBpZiAobGVuID09IDApCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGIgPSAoYnl0ZSlpcy5yZWFkKCk7Ci0gICAgICAgIHJlYWRUb29NdWNoID0gdHJ1ZTsKLSAgICAgICAgLy8gQSBzcGFjZSBvciB0YWIgYXQgdGhlIGJlZ2luaW5nIG9mIGEgbGluZSBtZWFucyB0aGUgaGVhZGVyIGNvbnRpbnVlcy4KLSAgICAgICAgaWYgKChiID09IFNQQUNFKSB8fCAoYiA9PSBUQUIpKQotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBiYW9zLmNsb3NlKCk7Ci0gICAgICAgIGJ5dGVbXSBiQXJyYXkgPSBiYW9zLnRvQnl0ZUFycmF5KCk7Ci0gICAgICAgIGJhb3MucmVzZXQoKTsKLSAgICAgICAgaWYgKGNvbG9uSW5kZXggIT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICBrZXkgPSBuZXcgU3RyaW5nKGJBcnJheSwgMCwgY29sb25JbmRleCwgREVGQVVMVF9IVFRQX0hFQURFUl9FTkNPRElORyk7Ci0gICAgICAgICAgdmFsdWUgPSBuZXcgU3RyaW5nKGJBcnJheSwgY29sb25JbmRleCArIDEsIGxlbiAtIDEgLSBjb2xvbkluZGV4LCBERUZBVUxUX0hUVFBfSEVBREVSX0VOQ09ESU5HKTsKLSAgICAgICAgICBjb2xvbkluZGV4ID0gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAga2V5ID0gbmV3IFN0cmluZyhiQXJyYXksIDAsIGxlbiwgREVGQVVMVF9IVFRQX0hFQURFUl9FTkNPRElORyk7Ci0gICAgICAgICAgdmFsdWUgPSBFTVBUWV9TVFJJTkc7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFyZXNwLmlzU3RhdHVzU2V0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBSZWFkZXIgc3RhdHVzIGNvZGUKLSAgICAgICAgICBpbnQgc3RhcnQgPSBrZXkuaW5kZXhPZihTUEFDRSkgKyAxOwotICAgICAgICAgIFN0cmluZyBzID0ga2V5LnN1YnN0cmluZyhzdGFydCkudHJpbSgpOwotICAgICAgICAgIGludCBlbmQgPSBzLmluZGV4T2YoU1BBQ0UpOwotICAgICAgICAgIGlmIChlbmQgIT0gLTEpCi0gICAgICAgICAgICBzID0gcy5zdWJzdHJpbmcoMCwgZW5kKTsKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXNwLnNldFN0YXR1c0NvZGUoSW50ZWdlci5wYXJzZUludChzKSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJlc3Auc2V0U3RhdHVzQ29kZSgtMSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIHJlc3Auc2V0U3RhdHVzTWVzc2FnZShrZXkuc3Vic3RyaW5nKHN0YXJ0ICsgZW5kICsgMSkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICByZXNwLmFkZEhlYWRlcihrZXkudG9Mb3dlckNhc2UoKS50cmltKCksIHZhbHVlLnRyaW0oKSk7Ci0gICAgICAgIGxlbiA9IDA7Ci0gICAgICB9Ci0gICAgfQotICAgIGJhb3MuY2xvc2UoKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCByZWFkSFRUUFJlc3BvbnNlUGF5bG9hZChJbnB1dFN0cmVhbSBpcywgSFRUUFJlc3BvbnNlIHJlc3ApIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJhb3MgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgYnl0ZSBiID0gKGJ5dGUpaXMucmVhZCgpOwotICAgICAgd2hpbGUgKGIgIT0gLTEpCi0gICAgICB7Ci0gICAgICAgIGJhb3Mud3JpdGUoYik7Ci0gICAgICAgIGIgPSAoYnl0ZSlpcy5yZWFkKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChTb2NrZXRUaW1lb3V0RXhjZXB0aW9uIHN0ZSkKLSAgICB7Ci0gICAgfQotICAgIGJhb3MuY2xvc2UoKTsKLSAgICByZXNwLnNldFBheWxvYWQoYmFvcy50b0J5dGVBcnJheSgpKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZWNlaXZlcyB0aGUgYnl0ZXMgZnJvbSB0aGUgbGFzdCB3ZWIgc2VydmljZSBpbnZvY2F0aW9uLiAgVGhpcyBpcyB1c2VkIGJ5IFdTRSdzIGRlZmF1bHQKLSAgICogU09BUCB0cmFuc3BvcnQuCi0gICAqIAotICAgKiBAcmV0dXJuIEEgYnl0ZSBhcnJheS4KLSAgICogQHRocm93cyBJT0V4Y2VwdGlvbgotICAgKi8KLSAgYnl0ZVtdIHJlY2VpdmVCeXRlcygpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgaWYgKGh0dHBSZXNwb25zZSAhPSBudWxsKQotICAgIHsKLSAgICAgICAgYnl0ZVtdIHBheWxvYWQgPSBodHRwUmVzcG9uc2UuZ2V0UGF5bG9hZCgpOwotICAgICAgICBpZiAoQ0hVTktFRC5lcXVhbHNJZ25vcmVDYXNlKGh0dHBSZXNwb25zZS5nZXRIZWFkZXIoSFRUUF9IRUFERVJfVFJBTlNGRVJfRU5DT0RFSU5HLnRvTG93ZXJDYXNlKCkpKSkKLSAgICAgICAgewotICAgICAgICAgIEJ5dGVBcnJheUlucHV0U3RyZWFtIGJhaXMgPSBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0ocGF5bG9hZCk7Ci0gICAgICAgICAgQ2h1bmtlZElucHV0U3RyZWFtIGNpcyA9IG5ldyBDaHVua2VkSW5wdXRTdHJlYW0oYmFpcyk7Ci0gICAgICAgICAgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJhb3MgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7Ci0gICAgICAgICAgYnl0ZSBiOwotICAgICAgICAgIHdoaWxlICgoYiA9IChieXRlKWNpcy5yZWFkKCkpICE9IC0xKQotICAgICAgICAgICAgYmFvcy53cml0ZShiKTsKLSAgICAgICAgICBiYW9zLmNsb3NlKCk7Ci0gICAgICAgICAgY2lzLmNsb3NlKCk7Ci0gICAgICAgICAgYmFpcy5jbG9zZSgpOwotICAgICAgICAgIHJldHVybiBiYW9zLnRvQnl0ZUFycmF5KCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHBheWxvYWQ7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkIGFmdGVyIFdTRSBzd3RpY2hlcyB0byB1c2luZyBhIHBsdWdnYWJsZSB0cmFuc3BvcnQgdmlhIGVuaGFuY2VtZW50IDE3NjQ5My4KLSAgICogVGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBvZiB0aGlzIG1ldGhvZCBpcyByZWZhY3RvcmVkIHRvIHRoZSByZWNlaXZlQnl0ZXMoKSBtZXRob2QuIAotICAgKiAKLSAgICogQGRlcHJlY2F0ZWQKLSAgICovCi0gIHB1YmxpYyBCdWZmZXJlZFJlYWRlciByZWNlaXZlKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIGJ5dGVbXSBwYXlsb2FkID0gcmVjZWl2ZUJ5dGVzKCk7Ci0gICAgICBpZiAocGF5bG9hZCAhPSBudWxsKSB7Ci0gICAgCUVsZW1lbnQgc29hcEVudmVsb3BlID0gWE1MVXRpbHMuYnl0ZUFycmF5VG9FbGVtZW50KHBheWxvYWQsIGZhbHNlKTsKLSAgICAgICAgLy8gcmVtb3ZlIFhNTCBuYW1lc3BhY2UgZGVjbGFyYXRpb24KLSAgICAgICAgaWYgKHNvYXBFbnZlbG9wZSAhPSBudWxsKQotICAgICAgICAgIHJldHVybiBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShYTUxVdGlscy5zZXJpYWxpemUoc29hcEVudmVsb3BlLCB0cnVlKS5nZXRCeXRlcyhERUZBVUxUX1NPQVBfRU5DT0RJTkcpKSwgREVGQVVMVF9TT0FQX0VOQ09ESU5HKSk7IAotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgewotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBIYXNodGFibGUgZ2V0SGVhZGVycygpCi0gIHsKLSAgICBIYXNodGFibGUgaGVhZGVycyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBpZiAoaHR0cFJlc3BvbnNlICE9IG51bGwpCi0gICAgICBoZWFkZXJzLnB1dEFsbChodHRwUmVzcG9uc2UuZ2V0SGVhZGVycygpKTsKLSAgICByZXR1cm4gaGVhZGVyczsKLSAgfQotCi0gIC8qKgotICAgKiBCdWlsZHMgdGhlIGZpcnN0IGxpbmUgb2YgYSBjb25uZWN0aW9uIHJlcXVlc3QgdG8gdGhlIHByb3h5IHNlcnZlcgotICAgKiAKLSAgICogQHBhcmFtIHVybCBUaGUgVVJMIHRoYXQgd2Ugd2FudCB0byB1bHRpbWF0ZWx5IGNvbm5lY3QgdG8uCi0gICAqIEByZXR1cm4gQSBzdHJpbmcgb2YgdGhlIGZvcm0gIkNPTk5FQ1QgJmx0O2hvc3RuYW1lJmd0OzombHQ7cG9ydCZndDsgSFRUUC8xLjAiLgotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmdCdWZmZXIgZ2V0Q29ubmVjdE1ldGhvZChVUkwgdXJsKSB7Ci0JCi0JICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKEhUVFBfQ09OTkVDVCk7Ci0JICBzYi5hcHBlbmQoU1BBQ0UpOwkgIAotCSAgc2IuYXBwZW5kKHVybC5nZXRIb3N0KCkpOwotCSAgc2IuYXBwZW5kKENPTE9OKTsKLQkgIHNiLmFwcGVuZCh1cmwuZ2V0UG9ydCgpKTsKLQkgIHNiLmFwcGVuZChTUEFDRSk7Ci0JICBzYi5hcHBlbmQoSFRUUF9WRVJTSU9OXzFfMCk7Ci0JICBzYi5hcHBlbmQoTkVXX0xJTkUpOwotCSAgcmV0dXJuIHNiOwotICB9Ci0gIAotICAvKioKLSAgICogQ29uc3RydWN0IGEgc29ja2V0IHRvIHRoZSBwcm94eSBzZXJ2ZXIgd2hpY2ggYmUgdXNlZCB0byB0dW5uZWwgdGhyb3VnaC4KLSAgICogCi0gICAqIEBwYXJhbSB1cmwgVGhlIFVSTCB0aGF0IHdlIHdhbnQgdG8gdWx0aW1hdGVseSBjb25uZWN0IHRvLgotICAgKiBAcGFyYW0gcHJveHlIb3N0IFRoZSBwcm94eSBob3N0LgotICAgKiBAcGFyYW0gcHJveHlQb3J0IFRoZSBwcm94eSBwb3J0LgotICAgKiBAcmV0dXJuIEEgY29ubmVjdGVkIHNvY2tldCB0byB0aGUgcHJveHkgc2VydmVyLiAKLSAgICogQHRocm93cyBJT0V4Y2VwdGlvbiAKLSAgICovCi0gIHByaXZhdGUgU29ja2V0IGJ1aWxkVHVubmVsU29ja2V0KFVSTCB1cmwsIFN0cmluZyBwcm94eUhvc3QsIGludCBwcm94eVBvcnQpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0KLQkgIFN0cmluZ0J1ZmZlciBodHRwSGVhZGVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCSAgaHR0cEhlYWRlci5hcHBlbmQoZ2V0Q29ubmVjdE1ldGhvZCh1cmwpKTsKLQkgIGh0dHBIZWFkZXIuYXBwZW5kKGdldFByb3h5QXV0aGVudGljYXRpb24oKSk7ICAgICAgIAotCSAgaHR0cEhlYWRlci5hcHBlbmQoTkVXX0xJTkUpOwotICAgIAotCSAgU29ja2V0IHR1bm5lbCA9IG5ldyBTb2NrZXQocHJveHlIb3N0LCBwcm94eVBvcnQpOwotICAgIAotCSAgSW5wdXRTdHJlYW0gIGlzID0gdHVubmVsLmdldElucHV0U3RyZWFtKCk7Ci0JICBPdXRwdXRTdHJlYW0gb3MgPSB0dW5uZWwuZ2V0T3V0cHV0U3RyZWFtKCk7Ci0gICAgCi0JICBvcy53cml0ZShodHRwSGVhZGVyLnRvU3RyaW5nKCkuZ2V0Qnl0ZXMoREVGQVVMVF9IVFRQX0hFQURFUl9FTkNPRElORykpOyAgICAgICAgCi0JICBvcy5mbHVzaCgpOwotICAgIAotCSAgSFRUUFJlc3BvbnNlIGh0dHBSZXNwb25zZSA9IG5ldyBIVFRQUmVzcG9uc2UoKTsKLQkgIHJlYWRIVFRQUmVzcG9uc2VIZWFkZXIoaXMsIGh0dHBSZXNwb25zZSk7Ci0gICAgCi0JICBpbnQgY29kZSA9IGh0dHBSZXNwb25zZS5nZXRTdGF0dXNDb2RlKCk7Ci0KLQkgIC8vIGVuc3VyZSB3ZSBhcmUgc3VjY2Vzc2Z1bGx5IGNvbm5lY3RlZCB0byB0aGUgcHJveHkKLQkgIGlmIChjb2RlICE9IEhUVFBfQ09ERV9PSykKLQkJICB0aHJvdyBuZXcgSFRUUFRyYW5zcG9ydEV4Y2VwdGlvbihjb2RlLCBodHRwUmVzcG9uc2UuZ2V0U3RhdHVzTWVzc2FnZSgpLCBodHRwUmVzcG9uc2UuZ2V0SGVhZGVycygpKTsKLQkgIAotCSAgcmV0dXJuIHR1bm5lbDsKLSAgfQotICAKLSAgcHJpdmF0ZSBTb2NrZXQgYnVpbGRTb2NrZXQoVVJMIHVybCkgdGhyb3dzIFVua25vd25Ib3N0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbgotICB7Ci0gICAgU29ja2V0IHMgPSBudWxsOwotICAgIFN0cmluZyBob3N0ID0gdXJsLmdldEhvc3QoKTsKLSAgICBpbnQgcG9ydCA9IHVybC5nZXRQb3J0KCk7Ci0gICAgU3RyaW5nIHByb3h5SG9zdCA9IFN5c3RlbS5nZXRQcm9wZXJ0eShTWVNfUFJPUF9IVFRQX1BST1hZX0hPU1QpOwotICAgIGludCBwcm94eVBvcnQgPSBJbnRlZ2VyLmdldEludGVnZXIoU1lTX1BST1BfSFRUUF9QUk9YWV9QT1JULCBERUZBVUxUX0hUVFBfUE9SVCkuaW50VmFsdWUoKTsKLSAgICAKLSAgICBTdHJpbmcgbm9uUHJveHlIb3N0cyA9IFN5c3RlbS5nZXRQcm9wZXJ0eShTWVNfUFJPUF9IVFRQX05PTl9QUk9YWV9IT1NUUyk7Ci0KLSAgICAvLyAgU3RyaW5nIHByb3h5VXNlck5hbWUgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoU1lTX1BST1BfSFRUUF9QUk9YWV9VU0VSX05BTUUpOwotICAgIC8vICBTdHJpbmcgcHJveHlQYXNzd29yZCA9IFN5c3RlbS5nZXRQcm9wZXJ0eShTWVNfUFJPUF9IVFRQX1BST1hZX1BBU1NXT1JEKTsKLSAgICBpZiAodXJsLmdldFByb3RvY29sKCkuZXF1YWxzSWdub3JlQ2FzZShIVFRQUykpCi0gICAgewotICAgICAgcHJveHlIb3N0ID0gU3lzdGVtLmdldFByb3BlcnR5KFNZU19QUk9QX0hUVFBTX1BST1hZX0hPU1QpOwotICAgICAgcHJveHlQb3J0ID0gSW50ZWdlci5nZXRJbnRlZ2VyKFNZU19QUk9QX0hUVFBTX1BST1hZX1BPUlQsIERFRkFVTFRfSFRUUFNfUE9SVCkuaW50VmFsdWUoKTsKLSAgICAgIG5vblByb3h5SG9zdHMgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoU1lTX1BST1BfSFRUUFNfTk9OX1BST1hZX0hPU1RTKTsKLQotICAgICAgaWYgKHByb3h5SG9zdCAhPSBudWxsICYmIHByb3h5SG9zdC5sZW5ndGgoKSA+IDAgJiYgIWlzSG9zdEluTm9uUHJveHlIb3N0cyhob3N0LCBub25Qcm94eUhvc3RzLCBERUZBVUxUX0NBU0VfU0VOU0lUSVZFX0ZPUl9IT1NUX05BTUUpKQotICAgICAgewotICAgICAgICAvLyBTU0wgd2l0aCBwcm94eSBzZXJ2ZXIKLSAgICAgICAgU29ja2V0IHR1bm5lbCA9IGJ1aWxkVHVubmVsU29ja2V0KHVybCwgcHJveHlIb3N0LCBwcm94eVBvcnQpOyAgICAgICAKLSAgICAgICAgcyA9ICgoU1NMU29ja2V0RmFjdG9yeSkgU1NMU29ja2V0RmFjdG9yeS5nZXREZWZhdWx0KCkpLmNyZWF0ZVNvY2tldCh0dW5uZWwsIGhvc3QsIHBvcnQsIHRydWUpOyAgICAJICAKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgcyA9IFNTTFNvY2tldEZhY3RvcnkuZ2V0RGVmYXVsdCgpLmNyZWF0ZVNvY2tldChob3N0LCAocG9ydCA+IDAgPyBwb3J0IDogREVGQVVMVF9IVFRQU19QT1JUKSk7Ci0gICAgICAvLyBSZW1vdmluZyBkZXBlbmRlbmN5IG9uIHNvYXAuamFyCi0gICAgICAvLyAgcyA9IFNTTFV0aWxzLmJ1aWxkU1NMU29ja2V0KGhvc3QsIChwb3J0ID4gMCA/IHBvcnQgOiBERUZBVUxUX0hUVFBTX1BPUlQpLCBwcm94eUhvc3QsIHByb3h5UG9ydCk7Ci0gICAgICAvLyBUT0RPOgotICAgICAgLy8gQnVpbGQgYW4gU1NMIHNvY2tldCB0aGF0IHN1cHBvcnRzIHByb3h5VXNlciBhbmQgcHJveHlQYXNzd29yZCwKLSAgICAgIC8vIGFzIGRlbW9uc3RyYXRlZCBpbiB0aGUgZm9sbG93aW5nIChvcmlnaW5hbCkgbGluZSBvZiBjb2RlOgotICAgICAgLy8gIHMgPSBTU0xVdGlscy5idWlsZFNTTFNvY2tldChob3N0LCAocG9ydCA+IDAgPyBwb3J0IDogREVGQVVMVF9IVFRQU19QT1JUKSwgcHJveHlIb3N0LCBwcm94eVBvcnQsIHByb3h5VXNlck5hbWUsIHByb3h5UGFzc3dvcmQpOwotICAgIH0KLSAgICBlbHNlIGlmIChwcm94eUhvc3QgIT0gbnVsbCAmJiBwcm94eUhvc3QubGVuZ3RoKCkgPiAwICYmICFpc0hvc3RJbk5vblByb3h5SG9zdHMoaG9zdCwgbm9uUHJveHlIb3N0cywgREVGQVVMVF9DQVNFX1NFTlNJVElWRV9GT1JfSE9TVF9OQU1FKSkKLSAgICAgIHMgPSBuZXcgU29ja2V0KHByb3h5SG9zdCwgcHJveHlQb3J0KTsKLSAgICBlbHNlCi0gICAgICBzID0gbmV3IFNvY2tldChob3N0LCAocG9ydCA+IDAgPyBwb3J0IDogREVGQVVMVF9IVFRQX1BPUlQpKTsKLSAgICByZXR1cm4gczsKLSAgfQotICAKLSAgcHJpdmF0ZSBib29sZWFuIGlzSG9zdEluTm9uUHJveHlIb3N0cyhTdHJpbmcgaG9zdCwgU3RyaW5nIG5vblByb3h5SG9zdHMsIGJvb2xlYW4gY2FzZVNlbnNpdGl2ZSkKLSAgewotICAJaWYgKGNhc2VTZW5zaXRpdmUpIHJldHVybiBob3N0Lm1hdGNoZXMoY3JlYXRlUGF0dGVybkZyb21TdHJpbmcobm9uUHJveHlIb3N0cykpOwotICAJZWxzZSByZXR1cm4gaG9zdC50b0xvd2VyQ2FzZSgpLm1hdGNoZXMoY3JlYXRlUGF0dGVybkZyb21TdHJpbmcobm9uUHJveHlIb3N0cy50b0xvd2VyQ2FzZSgpKSk7ICAKLSAgfQotICAKLSAgLyoKLSAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBnZW5lcmF0ZSBhIHZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgYSAKLSAgICogbm9ybWFsIGphdmEgU3RyaW5nIHVzZWQgaW4gdGhlIHByb3h5IG1lY2hhbmlzbS4gCi0gICAqIEZvciBleGFtcGxlLCB0aGUgaHR0cC5ub25Qcm94eUhvc3RzIGNvbnRhaW5zIGZvbGxvd2luZyBTdHJpbmc6IAotICAgKiAiMTkyLjE2OC4yLip8bG9jYWxob3N0fCouaWJtLmNvbSIgLiBJdCB3b3VsZCBiZSAKLSAgICogdHJhbnNmb3JtZWQgaW50bzogIjE5MlwuMTY4XC4yXC5cdyp8bG9jYWxob3N0fFx3KlwuaWJtXC5jb20iCi0gICAqIFRodXMsIGZvbGxvd2luZyBob3N0IHN0cmluZyB3b3VsZCBtYXRjaCBhYm92ZSBwYXR0ZXJuOgotICAgKiAxOTIuMTY4LjIuNSAxOTIuMTY4LjIuIDE5Mi4xNjguMi42NjYgMTkyLjE2OC4yLncKLSAgICogbG9jYWxob3N0Ci0gICAqIHRvcm9sYWIuaWJtLmNvbSAuaWJtLmNvbSAxMjMuaWJtLmNvbQotICAgKiAKLSAgICogVHdvIHRyYW5zZm9ybWF0aW9ucyBhcmUgZG9uZToKLSAgICogMS4gcmVwbGFjZSBhbGwgIi4iIGludG8gIlwuIiBBcyBpbiByZWd1bGFyIGV4cHJlc3Npb24sICcuJyByZXByZXNlbnRzIAotICAgKiAgICBhbnkgY2hhcmF0ZXIuICAiXC4nIHJlcHJlc2VudHMgdGhlIHJlYWwgY2hhcmFjdGVyICcuJwotICAgKiAyLiBJbiBvcmRlciB0byBnZXQgdGhlIHJlYWwgbWVhbmluZyBvZiAiKiIgdXNlZCBpbiBwcm9wZXJ0eSAKLSAgICogICAgaHR0cC5ub25Qcm94eUhvc3RzLCAiXHcqIiBpcyB1c2VkIHRvIHJlcGxhY2UgIioiCi0gICAqICAgICJcdyIgcmVwcmVzZW50IGEgd29yZCBjaGFyYWN0ZXI6IFthLXpBLVpfMC05XQotICAgKiAgICAKLSAgICogUmVzdHJpY3Rpb246Ci0gICAqIFRoZSB2YWxpZGl0eSBvZiBhZGRyZXNzIGlzIG5vdCBjaGVja2VkLiAKLSAgICogKDE5Mi4xNjguMi41NTUgYW5kIDE5Mi4xNjguMi5jb20gYXJlIE9LKQotICAgKiAKLSAgICogVE9ETyBjaGVjayB3aGV0aGVyICogb2NjdXJzIGluIGFkZHJlc3Mgb3IgaG9zdG5hbWUuCi0gICAqIGlmIGl0IG9jY3V1cyBpbiBhZGRyZXNzIHJlcHJlc2VudGF0aW9uLCByZXBsYWNlICIqIiB3aXRoICJcZCoiCi0gICAqIGFuZCBjaGVjazogdmFsdWUgPCAyNTYgPwotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgY3JlYXRlUGF0dGVybkZyb21TdHJpbmcoU3RyaW5nIHN0cikgCi0gIHsKLSAgICAvKiBUaGlzIGlzIHRoZSBzYW1lIGFzIGZvbGxvd2luZyBtb3JlIHVuZGVyc3RhbmRhYmxlIHdheToKLQkgKiByZXR1cm4gc3RyLnJlcGxhY2UoIi4iLCAiXFwuIikucmVwbGFjZSgiKiIsICJcXHcqIik7Ci0JICogQnV0LCByZXBsYWNlKENoYXJTZXF1ZW5jZSB0YXJnZXQsIENoYXJTZXF1ZW5jZSByZXBsYWNlbWVudCkgY2FuIG9ubHkgYmUgCi0JICogc3VwcG9ydGVkIGFmdGVyIGoyc2UgMS41LCBvbiB0aGUgb3RoZXIgaGFuZCwgCi0JICogcmVwbGFjZUFsbChTdHJpbmcgcmVnZXgsIFN0cmluZyByZXBsYWNlbWVudCkgY2FuIGJlIHN1cHBvcnRlZCBiZWZvcmUgCi0JICogajJzZSAxLjUuCi0JICovCi0gICAgcmV0dXJuIHN0ciA9PSBudWxsID8gbnVsbCA6IHN0ci5yZXBsYWNlQWxsKCJcXC4iLCAiXFwuIikucmVwbGFjZUFsbCgiXFwqIiwgIlxcdyoiKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3RyYW5zcG9ydC9TT0FQTWVzc2FnZVByb2Nlc3Nvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3RyYW5zcG9ydC9TT0FQTWVzc2FnZVByb2Nlc3Nvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZGVmMzE4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC90cmFuc3BvcnQvU09BUE1lc3NhZ2VQcm9jZXNzb3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ5NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA0MTMgICAxNzY0OTMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTRTogTWFrZSBtZXNzYWdlL3RyYW5zcG9ydCBzdGFjayBwbHVnZ2FibGUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC50cmFuc3BvcnQ7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHk7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5hcGFjaGUuYXhpcy5Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwudXRpbC5Tb2FwSGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSURlc2VyaWFsaXplcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTZXJpYWxpemVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuTWVzc2FnZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5UcmFuc3BvcnRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGltcGxlbWVudGF0aW9uIGZvciBXU0UgZGVmYXVsdCBTT0FQIHRyYW5zcG9ydCdzIElTZXJpYWxpemVyIGFuZCBJRGVzZXJpYWxpemVyLgotICovCi1wdWJsaWMgY2xhc3MgU09BUE1lc3NhZ2VQcm9jZXNzb3IgaW1wbGVtZW50cyBJU2VyaWFsaXplciwgSURlc2VyaWFsaXplciB7Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIExJVEVSQUwgPSAibGl0ZXJhbCI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfU09BUF9FTkNPRElORyA9ICJVVEYtOCI7CQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBMSU5FX1NFUEFSQVRPUiA9IFN5c3RlbS5nZXRQcm9wZXJ0aWVzKCkuZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIik7Ci0JCi0JLyoKLQkgKiBDb25zdHJ1Y3Rvci4KLQkgKi8KLQlTT0FQTWVzc2FnZVByb2Nlc3NvcigpIHt9Ci0JCi0JLyoKLQkgKiBKb2luIHRoZSBlbmNvZGluZ1N0eWxlcyBpbnRvIGEgc3BhY2Ugc2VwYXJhdGVkIHN0cmluZwotCSAqLwotCXByaXZhdGUgU3RyaW5nIGpvaW5FbmNvZGluZ1N0eWxlcyhMaXN0IGxpc3QpIHsKLQkJCi0JCWlmIChsaXN0LmlzRW1wdHkoKSkKLQkJCXJldHVybiBudWxsOwotCQkKLQkJU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQkKLQkJSXRlcmF0b3IgaXRlciA9IGxpc3QuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKQotCQkJc2IuYXBwZW5kKCIgIikuYXBwZW5kKGl0ZXIubmV4dCgpKTsKLQkJCi0JCXJldHVybiBzYi5zdWJzdHJpbmcoMSkudG9TdHJpbmcoKTsKLQl9Ci0JCi0JLyoKLQkgKiBSZXRyaWV2ZXMgdGhlIGVuY29kaW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIGJpbmRpbmcgZm9yIHRoZSBzZWxlY3RlZCBvcGVyYXRpb24uCi0JICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIG9ubHkgZm9yIFJQQyBzdHlsZSBiaW5kaW5ncy4gIFR3byBwaWVjZXMgb2YgaW5mb3JtYXRpb24gYXJlIHJldHVybmVkOiAgCi0JICogSWYgdGhlIHVzZSBpcyBlbmNvZGVkLCB0aGlzIG1ldGhvZCByZXR1cm5zIHRoZSBlbmNvZGluZyBuYW1lc3BhY2UgaW4gZWxlbWVudCBbMF0gYW5kIHRoZSAKLQkgKiBlbmNvZGluZyBzdHlsZShzKSBpbiBlbGVtZW50IFsxXS4gIElmIHRoZSB1c2UgaXMgbGl0ZXJhbCwgdGhlbiBib3RoIHZhbHVlcyB3aWxsIGJlIG51bGwuCi0JICovCi0JcHJpdmF0ZSBTdHJpbmdbXSBnZXRFbmNvZGluZ0luZm8oTWVzc2FnZUNvbnRleHQgY29udGV4dCkgewotCQkKLQkJU3RyaW5nW10gaW5mbyA9IG5ldyBTdHJpbmdbXSB7IG51bGwsIG51bGwgfTsKLQkJCi0JCUl0ZXJhdG9yIGl0ZXIgPSBjb250ZXh0LmdldEJpbmRpbmdPcGVyYXRpb24oKS5nZXRCaW5kaW5nSW5wdXQoKQotCQkJLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0JCQkJCi0JCS8vIGxvb2sgZm9yIHRoZSBzb2FwYmluZDpib2R5IGV4dGVuc2lsaWJpdHkgZWxlbWVudAotCQl3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKLQkJCUV4dGVuc2liaWxpdHlFbGVtZW50IGUgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGl0ZXIubmV4dCgpOwkJCQotCQkJaWYgKCEoZSBpbnN0YW5jZW9mIFNPQVBCb2R5KSkKLQkJCQljb250aW51ZTsKLQkJCQotCQkJU09BUEJvZHkgc29hcEJvZHkgPSAoU09BUEJvZHkpIGU7Ci0JCQkKLQkJCS8vIHVzZT0iZW5jb2RlZCIKLQkJCWlmICghTElURVJBTC5lcXVhbHMoc29hcEJvZHkuZ2V0VXNlKCkpKSB7Ci0JCQkJaW5mb1swXSA9IHNvYXBCb2R5LmdldE5hbWVzcGFjZVVSSSgpOwotCQkJCWluZm9bMV0gPSBqb2luRW5jb2RpbmdTdHlsZXMoc29hcEJvZHkuZ2V0RW5jb2RpbmdTdHlsZXMoKSk7Ci0JCQl9Ci0JCQkJCQotCQkJYnJlYWs7Ci0JCX0KLQkJCi0JCS8vIG5hbWVzcGFjZSBub3Qgc3BlY2lmaWVkIG9uIHRoZSBzb2FwYmluZDpib2R5IGVsZW1lbnQsIHVzZSB0aGUgZGVmaW5pdGlvbidzCi0JCWlmIChpbmZvWzBdID09IG51bGwpCi0JCQlpbmZvWzBdID0gY29udGV4dC5nZXREZWZpbml0aW9uKCkuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0JCQotCQlyZXR1cm4gaW5mbzsKLQl9Ci0JCi0JLyoKLSAgICAgKiBXUy1JOiBJbiBhIHJwYy1saXRlcmFsIFNPQVAgYmluZGluZywgdGhlIHNlcmlhbGl6ZWQgY2hpbGQgZWxlbWVudCBvZiB0aGUgCi0gICAgICogc29hcDpCb2R5IGVsZW1lbnQgY29uc2lzdHMgb2YgYSB3cmFwcGVyIGVsZW1lbnQsIHdob3NlIG5hbWVzcGFjZSBpcyB0aGUgdmFsdWUgCi0gICAgICogb2YgdGhlIG5hbWVzcGFjZSBhdHRyaWJ1dGUgb2YgdGhlIHNvYXBiaW5kOmJvZHkgZWxlbWVudCBhbmQgd2hvc2UgbG9jYWwgbmFtZSBpcyAKLSAgICAgKiBlaXRoZXIgdGhlIG5hbWUgb2YgdGhlIG9wZXJhdGlvbiBvciB0aGUgbmFtZSBvZiB0aGUgb3BlcmF0aW9uIHN1ZmZpeGVkIAotICAgICAqIHdpdGggIlJlc3BvbnNlIi4gVGhlIG5hbWVzcGFjZSBhdHRyaWJ1dGUgaXMgcmVxdWlyZWQsIGFzIG9wcG9zZWQgdG8gYmVpbmcgCi0gICAgICogb3B0aW9uYWwsIHRvIGVuc3VyZSB0aGF0IHRoZSBjaGlsZHJlbiBvZiB0aGUgc29hcDpCb2R5IGVsZW1lbnQgYXJlIG5hbWVzcGFjZS0KLSAgICAgKiBxdWFsaWZpZWQuCi0gICAgICovCi0JcHJpdmF0ZSBFbGVtZW50IGNyZWF0ZVJQQ1dyYXBwZXIoRG9jdW1lbnQgZG9jdW1lbnQsIE1lc3NhZ2VDb250ZXh0IGNvbnRleHQsIEhhc2h0YWJsZSBuYW1lc3BhY2VUYWJsZSkgewotCQkKLQkJU3RyaW5nIGVuY29kaW5nTmFtZXNwYWNlVVJJID0gZ2V0RW5jb2RpbmdJbmZvKGNvbnRleHQpWzBdOwotCQkKLQkJcmV0dXJuIFNvYXBIZWxwZXIuY3JlYXRlUlBDV3JhcHBlckVsZW1lbnQoCi0JCQkJZG9jdW1lbnQsIAotCQkJCW5hbWVzcGFjZVRhYmxlLCAKLQkJCQllbmNvZGluZ05hbWVzcGFjZVVSSSwgCi0JCQkJY29udGV4dC5nZXRCaW5kaW5nT3BlcmF0aW9uKCkuZ2V0T3BlcmF0aW9uKCkuZ2V0TmFtZSgpLAotCQkJCW51bGwpOwotCX0KLQkKLQkvKgotCSAqIEluaXRpYWxpemVzIHRoZSBjb250ZW50cyBvZiBuZXcgSVNPQVBNZXNzYWdlLgotCSAqLwotCXZvaWQgaW5pdE1lc3NhZ2UoSVNPQVBNZXNzYWdlIG1lc3NhZ2UpIHRocm93cyBUcmFuc3BvcnRFeGNlcHRpb24gewotCQotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBYTUxVdGlscy5jcmVhdGVOZXdEb2N1bWVudChudWxsKTsKLQkJCQotCQkJSGFzaHRhYmxlIG5hbWVzcGFjZVRhYmxlID0gbmV3IEhhc2h0YWJsZSgpOwotCQkJU29hcEhlbHBlci5hZGREZWZhdWx0U29hcEVudmVsb3BlTmFtZXNwYWNlcyhuYW1lc3BhY2VUYWJsZSk7Ci0JCQkKLQkJCW1lc3NhZ2Uuc2V0RW52ZWxvcGUoU29hcEhlbHBlci5jcmVhdGVTb2FwRW52ZWxvcGVFbGVtZW50KGRvY3VtZW50LCBuYW1lc3BhY2VUYWJsZSkpOwotCQkJbWVzc2FnZS5zZXRIZWFkZXIoU29hcEhlbHBlci5jcmVhdGVTb2FwSGVhZGVyRWxlbWVudChkb2N1bWVudCkpOwotCQkJCi0JCQlFbGVtZW50IGJvZHkgPSBTb2FwSGVscGVyLmNyZWF0ZVNvYXBCb2R5RWxlbWVudChkb2N1bWVudCk7Ci0JCQlpZiAoIW1lc3NhZ2UuZ2V0TWVzc2FnZUNvbnRleHQoKS5pc0RvY3VtZW50U3R5bGUoKSkgewotCQkJCUVsZW1lbnQgcnBjV3JhcHBlciA9IGNyZWF0ZVJQQ1dyYXBwZXIoZG9jdW1lbnQsIG1lc3NhZ2UuZ2V0TWVzc2FnZUNvbnRleHQoKSwgbmFtZXNwYWNlVGFibGUpOwotCQkJCWJvZHkuYXBwZW5kQ2hpbGQocnBjV3JhcHBlcik7Ci0JCQl9CQkJCi0JCQltZXNzYWdlLnNldEJvZHkoYm9keSk7CQkJCi0JCQkKLQkJCW1lc3NhZ2Uuc2V0TmFtZXNwYWNlVGFibGUobmFtZXNwYWNlVGFibGUpOwotCQl9Ci0JCWNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IG5ldyBUcmFuc3BvcnRFeGNlcHRpb24oZSk7Ci0JCX0JCQotCX0KLQkKLQkvKgotCSAqIFJldHVybnMgdGhlIGZpcnN0IGVsZW1lbnQgd2l0aCB0aGUgZ2l2ZW4gbG9jYWwgbmFtZSBmcm9tIHRoZSBzb2FwIGVudmVsb3BlIG5hbWVzcGFjZQotCSAqIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIG9uIGVsZW1lbnRzIHRoYXQgYXJlIG5vdCBuYW1lc3BhY2UgYXdhcmUsIGJ1dCB3ZSBoYXZlIHRvIGdpdmUKLQkgKiBpdCBhIG5hbWVzcGFjZSB0YWJsZSB0byBsb29rIHVwIHByZWZpeGVzLgotCSAqLwotCXByaXZhdGUgRWxlbWVudCBnZXRTT0FQRWxlbWVudChFbGVtZW50IHJvb3QsIFN0cmluZyBsb2NhbE5hbWUsIE1hcCBuYW1lc3BhY2VUYWJsZSkgewotCQlTdHJpbmcgcHJlZml4ID0gKFN0cmluZykgbmFtZXNwYWNlVGFibGUuZ2V0KENvbnN0YW50cy5VUklfU09BUDExX0VOVik7Ci0JCWlmIChwcmVmaXggPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCQkKLQkJTm9kZUxpc3QgbGlzdCA9IHJvb3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUocHJlZml4ICsgIjoiICsgbG9jYWxOYW1lKTsKLQkJaWYgKGxpc3QuZ2V0TGVuZ3RoKCkgPT0gMCkKLQkJCXJldHVybiBudWxsOwotCQkKLQkJcmV0dXJuIChFbGVtZW50KSBsaXN0Lml0ZW0oMCk7Ci0JfQotCQotCS8qCi0JICogUmV0dXJucyB0aGUgZmlyc3QgZWxlbWVudCB3aXRoIHRoZSBnaXZlbiBsb2NhbCBuYW1lIGZyb20gdGhlIHNvYXAgZW52ZWxvcGUgbmFtZXNwYWNlLgotCSAqIFRoaXMgdmVyc2lvbiBhc3N1bWUgdGhlIGVsZW1lbnRzIGFyZSBuYW1lc3BhY2UgYXdhcmUuCi0JICovCi0JcHJpdmF0ZSBFbGVtZW50IGdldFNPQVBFbGVtZW50TlMoRWxlbWVudCByb290LCBTdHJpbmcgbG9jYWxOYW1lKSB7Ci0JCU5vZGVMaXN0IGxpc3QgPSByb290LmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoQ29uc3RhbnRzLlVSSV9TT0FQMTFfRU5WLCBsb2NhbE5hbWUpOwotCQlpZiAobGlzdC5nZXRMZW5ndGgoKSA9PSAwKQotCQkJcmV0dXJuIG51bGw7CQkKLQkKLQkJcmV0dXJuIChFbGVtZW50KSBsaXN0Lml0ZW0oMCk7Ci0JfQotCQotCS8qCi0JICogQ29udmVydCBhIE5vZGVMaXN0IHRvIGEgdmVjdG9yIG9mIGVsZW1lbnRzLCBub2RlcyB3aGljaCBhcmUgbm90IGVsZW1lbnRzIGFyZSBza2lwcGVkLgotCSAqLwotCXByaXZhdGUgVmVjdG9yIHRvRWxlbWVudFZlY3RvcihOb2RlTGlzdCBub2RlcykgewotCQkKLQkJVmVjdG9yIHZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLQkJCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgbm9kZXMuZ2V0TGVuZ3RoKCk7IGkrKykgewotCQkJTm9kZSBub2RlID0gbm9kZXMuaXRlbShpKTsKLQkJCWlmIChub2RlIGluc3RhbmNlb2YgRWxlbWVudCkKLQkJICAgIAl2ZWN0b3IuYWRkKG5vZGUpOwkJICAgIAotCQl9Ci0JCQotCQlyZXR1cm4gdmVjdG9yOwkKLQl9Ci0JCi0JLyoKLQkgKiBDb252ZXJ0IGEgTm9kZUxpc3QgdG8gYW4gYXJyYXkgb2YgZWxlbWVudHMsIG5vZGVzIHdoaWNoIGFyZSBub3QgZWxlbWVudHMgYXJlIHNraXBwZWQuCi0JICovCi0JcHJpdmF0ZSBFbGVtZW50W10gdG9FbGVtZW50QXJyYXkoTm9kZUxpc3Qgbm9kZXMpIHsKLQkJVmVjdG9yIHZlY3RvciA9IHRvRWxlbWVudFZlY3Rvcihub2Rlcyk7Ci0JCUVsZW1lbnRbXSBlbGVtZW50cyA9IG5ldyBFbGVtZW50W3ZlY3Rvci5zaXplKCldOwotCQl2ZWN0b3IuY29weUludG8oZWxlbWVudHMpOwotCQlyZXR1cm4gZWxlbWVudHM7Ci0JfQotCQotCS8vIFNlcmlhbGl6ZSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8JCi0JCi0JLyoKLQkgKiBhZGRzIHRoZSBlbmNvZGluZyBzdHlsZSBhdHRyaWJ1dGUgdG8gdGhlIGVhY2ggZWxlbWVudCBpbiB0aGUgZ2l2ZW4gYXJyYXkuCi0JICogbm9vcCBpZiBlbmNvZGluZ1N0eWxlIGlzIG51bGwKLQkgKi8KLQlwcml2YXRlIHZvaWQgYWRkRW5jb2RpbmdTdHlsZShFbGVtZW50W10gZWxlbWVudHMsIFN0cmluZyBlbmNvZGluZ1N0eWxlKSB7Ci0JCQkJCi0JCS8vIGVuY29kaW5nU3R5bGUgaXMgbm9uLW51bGwgb25seSBpZiB1c2U9ImVuY29kZWQiCi0JCWlmIChlbGVtZW50cyA9PSBudWxsIHx8IGVuY29kaW5nU3R5bGUgPT0gbnVsbCkKLQkJCXJldHVybjsKLQkJCi0JCWZvciAoaW50IGk9MDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7Ci0JICAgICAgICBpZiAoZWxlbWVudHNbaV0gPT0gbnVsbCkKLQkgICAgICAgIAljb250aW51ZTsKLQkgICAgCWVsZW1lbnRzW2ldLnNldEF0dHJpYnV0ZSgKLQkgICAgCQkJQ29uc3RhbnRzLk5TX1BSRUZJWF9TT0FQX0VOViArICI6IiArIENvbnN0YW50cy5BVFRSX0VOQ09ESU5HX1NUWUxFLCBlbmNvZGluZ1N0eWxlKTsJCQkKLQkJfQotCX0KLQkKLQkvKgotCSAqIFNlcmlhbGl6ZSBhbiBhcnJheSBvZiBlbGVtZW50cwotCSAqLwotCXByaXZhdGUgU3RyaW5nIHNlcmlhbGl6ZUVsZW1lbnRzKEVsZW1lbnRbXSBlbGVtZW50cykgewotCQotCQlTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQkKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykgewotCQkJCQkKLQkJCVN0cmluZyBzZXJpYWxpemVkRnJhZ21lbnQgPSBYTUxVdGlscy5zZXJpYWxpemUoZWxlbWVudHNbaV0sIHRydWUpOwotCQkJaWYgKHNlcmlhbGl6ZWRGcmFnbWVudCA9PSBudWxsKSB7Ci0JCQkJLy8gT24gU29tZSBKUkUncyAoU3VuIGphdmEgNSkgZWxlbWVudHMgd2l0aCBhbiBhdHRyaWJ1dGUgd2l0aCB0aGUgeHNpCi0JCQkJLy8gcHJlZml4IGRvIG5vdCBzZXJpYWxpemUgcHJvcGVybHkgYmVjYXVzZSB0aGUgbmFtZXNwYWNlIGNhbiBub3QKLQkJCQkvLyBiZSBmb3VuZCBzbyB0aGUgc3RyaW5nIHJldHVybmVkIGNvbWVzIGJhY2sgYXMgbnVsbC4gVG8gd29ya2Fyb3VuZAotCQkJCS8vIHRoaXMgcHJvYmxlbSB0cnkgYWRkaW5nIGluIHRoZSBuYW1lc3BhY2UgZGVjbGFyYXRpb24gYXR0cmlidXRlCi0JCQkJLy8gYW5kIHJldHJ5IHRoZSBzZXJpYWxpemF0aW9uIChidWcgMTQ0ODI0KQkJCSAKLQkJCQllbGVtZW50c1tpXS5zZXRBdHRyaWJ1dGUoInhtbG5zOnhzaSIsIENvbnN0YW50cy5VUklfMjAwMV9TQ0hFTUFfWFNJKTsKLQkJCQlzZXJpYWxpemVkRnJhZ21lbnQgPSBYTUxVdGlscy5zZXJpYWxpemUoZWxlbWVudHNbaV0sIHRydWUpOwotCQkJfQotCQkJCi0JCQlidWZmZXIuYXBwZW5kKHNlcmlhbGl6ZWRGcmFnbWVudCk7Ci0JCQlidWZmZXIuYXBwZW5kKExJTkVfU0VQQVJBVE9SKTsKLQkJfQotCQkKLQkJcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwotCX0KLQotCS8qCi0JICogRGV0ZXJtaW5lcyBpZiB0aGUgZ2l2ZW4gbWVzc2FnZSBpcyBhIHJlcXVlc3QgbWVzc2FnZSB1c2luZyBSUEMgc3R5bGUKLQkgKi8KLQlwcml2YXRlIGJvb2xlYW4gaXNSUENSZXF1ZXN0KElTT0FQTWVzc2FnZSBtZXNzYWdlKSB7Ci0JCXJldHVybiAKLQkJCSFtZXNzYWdlLmdldE1lc3NhZ2VDb250ZXh0KCkuaXNEb2N1bWVudFN0eWxlKCkgJiYJCQkJCQkJLy8gcnBjIHN0eWxlCi0JCQkhQm9vbGVhbi5UUlVFLmVxdWFscyhtZXNzYWdlLmdldFByb3BlcnR5KFNPQVBUcmFuc3BvcnQuUFJPUF9SRUFEX09OTFkpKTsJLy8gbm90IHJlYWQtb25seQotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTZXJpYWxpemVyI3NlcmlhbGl6ZShpbnQsIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBNZXNzYWdlKQotCSAqLwotCXB1YmxpYyBTdHJpbmcgc2VyaWFsaXplKGludCBwYXJ0LCBJU09BUE1lc3NhZ2UgbWVzc2FnZSkgdGhyb3dzIFRyYW5zcG9ydEV4Y2VwdGlvbiB7Ci0KLQkJc3dpdGNoIChwYXJ0KSB7Ci0JCQljYXNlIElTT0FQTWVzc2FnZS5FTlZFTE9QRToKLQkJCQlFbGVtZW50IGVudmVsb3BlID0gbWVzc2FnZS5nZXRFbnZlbG9wZSh0cnVlKTsKLQkJCQkKLQkJCQlpZiAoaXNSUENSZXF1ZXN0KG1lc3NhZ2UpKSB7CQkJCQkKLQkJCQkJRWxlbWVudCBib2R5ID0gZ2V0U09BUEVsZW1lbnROUyhlbnZlbG9wZSwgQ29uc3RhbnRzLkVMRU1fQk9EWSk7Ci0JCQkJCWlmIChib2R5ID09IG51bGwpCi0JCQkJCQlib2R5ID0gZ2V0U09BUEVsZW1lbnQoZW52ZWxvcGUsIENvbnN0YW50cy5FTEVNX0JPRFksIG1lc3NhZ2UuZ2V0TmFtZXNwYWNlVGFibGUoKSk7Ci0JCQkJCQotCQkJCQlpZiAoYm9keSAhPSBudWxsKSB7Ci0JCQkJCQlFbGVtZW50W10gYm9keUNvbnRlbnQgPSB0b0VsZW1lbnRBcnJheShib2R5LmdldEZpcnN0Q2hpbGQoKS5nZXRDaGlsZE5vZGVzKCkpOwotCQkJCQkJYWRkRW5jb2RpbmdTdHlsZShib2R5Q29udGVudCwgZ2V0RW5jb2RpbmdJbmZvKG1lc3NhZ2UuZ2V0TWVzc2FnZUNvbnRleHQoKSlbMV0pOwotCQkJCQl9Ci0JCQkJfQotCQkJCQotCQkJCVN0cmluZyB4bWwgPSBYTUxVdGlscy5zZXJpYWxpemUoZW52ZWxvcGUsIHRydWUpOwotCQkJCWlmICh4bWwgPT0gbnVsbCkKLQkJCQkJeG1sID0gbmV3IFN0cmluZygoYnl0ZVtdKSBtZXNzYWdlLmdldFByb3BlcnR5KFNPQVBUcmFuc3BvcnQuUFJPUF9SQVdfQllURVMpKTsKLQkJCQkKLQkJCQlyZXR1cm4geG1sOwotCQkJCQotCQkJY2FzZSBJU09BUE1lc3NhZ2UuSEVBREVSX0NPTlRFTlQ6Ci0JCQkJcmV0dXJuIHNlcmlhbGl6ZUVsZW1lbnRzKG1lc3NhZ2UuZ2V0SGVhZGVyQ29udGVudCgpKTsKLQkJCQkKLQkJCWNhc2UgSVNPQVBNZXNzYWdlLkJPRFlfQ09OVEVOVDoJCQkJCi0JCQkJRWxlbWVudFtdIGJvZHlDb250ZW50ID0gbWVzc2FnZS5nZXRCb2R5Q29udGVudCgpOwotCQkJCQotCQkJCWlmIChpc1JQQ1JlcXVlc3QobWVzc2FnZSkpCi0JCQkJCWFkZEVuY29kaW5nU3R5bGUoYm9keUNvbnRlbnQsIGdldEVuY29kaW5nSW5mbyhtZXNzYWdlLmdldE1lc3NhZ2VDb250ZXh0KCkpWzFdKTsKLQkJCQkKLQkJCQlyZXR1cm4gc2VyaWFsaXplRWxlbWVudHMoYm9keUNvbnRlbnQpOwotCQl9Ci0JCQotCQlyZXR1cm4gIiI7Ci0JfQotCQotCS8vIERlc2VyaWFsaXplIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8JCQotCQkKLQkvKgotCSAqIFJldHJpZXZlIHRoZSBzb2FwIGhlYWRlciBmcm9tIHRoZSBlbnZlbG9wZSBhbmQgcG9wdWxhdGUgdGhlIGdpdmVuIG1lc3NhZ2UKLQkgKi8KLQlwcml2YXRlIHZvaWQgcHJvY2Vzc0hlYWRlcihFbGVtZW50IGVudmVsb3BlLCBJU09BUE1lc3NhZ2UgbWVzc2FnZSkgewotCQkKLQkJRWxlbWVudCBoZWFkZXIgPSBnZXRTT0FQRWxlbWVudE5TKGVudmVsb3BlLCBDb25zdGFudHMuRUxFTV9IRUFERVIpOwotCQlpZiAoaGVhZGVyID09IG51bGwpCi0JCQlyZXR1cm47Ci0JCQotCQltZXNzYWdlLnNldEhlYWRlcihoZWFkZXIpOwotCQltZXNzYWdlLnNldEhlYWRlckNvbnRlbnQodG9FbGVtZW50QXJyYXkoaGVhZGVyLmdldENoaWxkTm9kZXMoKSkpOwotCX0KLQkKLQkvKgotCSAqIEhBQ0sgLSBUaGUgcm9vdCBlbGVtZW50IHRhZyBuYW1lIG9mIHRoZSBpbnN0YW5jZSBkb2N1bWVudAotCSAqIGlzIGFtYmlndW91cy4gIEl0IGxhbmRzIG9uIGEgdmVyeSBncmV5IGFyZWEgYmV0d2VlbiB0aGUgU09BUAotCSAqIHNwZWMgYW5kIHRoZSBXU0RMIHNwZWMuICBUaGUgdHdvIHNwZWNzIGRvIG5vdCBleHBsaWNpdGx5IGRlZmluZQotCSAqIHRoYXQgdGhlIHJvb3QgZWxlbWVudCB0YWcgbmFtZSBtdXN0IG1hdGNoIHRoZSBuYW1lIG9mIHRoZQotCSAqIFdTREwgcGFydC4gIFRoZSBoYWNrIGlzIHRvIHRyZWF0IGVsZW1lbnRzIHdpdGggZGlmZmVyZW50IHRhZyBuYW1lcwotCSAqIGFzIGluc3RhbmNlcyBvZiB0aGUgV1NETCBwYXJ0LgotCSAqLwotCXByaXZhdGUgRWxlbWVudFtdIGZpeFNPQVBSZXNwb25zZShOb2RlTGlzdCBpbnN0YW5jZUxpc3QsIE1lc3NhZ2VDb250ZXh0IGNvbnRleHQpIHsKLQkJCi0JCVZlY3RvciBpbnN0YW5jZVZlY3RvciA9IHRvRWxlbWVudFZlY3RvcihpbnN0YW5jZUxpc3QpOwkJCi0JCUVsZW1lbnRbXSBpbnN0YW5jZURvY3VtZW50cyA9IG5ldyBFbGVtZW50W2luc3RhbmNlVmVjdG9yLnNpemUoKV07Ci0JCQotCQlPcGVyYXRpb24gb3BlciA9IGNvbnRleHQuZ2V0QmluZGluZ09wZXJhdGlvbigpLmdldE9wZXJhdGlvbigpOwkJCi0JCU1hcCBwYXJ0c01hcCA9IG9wZXIuZ2V0T3V0cHV0KCkuZ2V0TWVzc2FnZSgpLmdldFBhcnRzKCk7Ci0JCQotCQlpZiAocGFydHNNYXAuc2l6ZSgpID09IDEpIHsKLQkJCUl0ZXJhdG9yIGl0ID0gcGFydHNNYXAudmFsdWVzKCkuaXRlcmF0b3IoKTsKLQkJCVBhcnQgcGFydCA9IChQYXJ0KSBpdC5uZXh0KCk7Ci0JCQkKLQkJCVN0cmluZyBmcmFnTmFtZTsKLQkJCWlmIChwYXJ0LmdldEVsZW1lbnROYW1lKCkgIT0gbnVsbCkKLQkJCQlmcmFnTmFtZSA9IHBhcnQuZ2V0RWxlbWVudE5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLQkJCWVsc2UKLQkJCQlmcmFnTmFtZSA9IHBhcnQuZ2V0TmFtZSgpOwotCQkgICAgCi0JCSAgICBmb3IgKGludCBpID0gMDsgaSA8IGluc3RhbmNlVmVjdG9yLnNpemUoKTsgaSsrKSB7Ci0JCSAgICAJRWxlbWVudCBlbGVtZW50ID0gKEVsZW1lbnQpIGluc3RhbmNlVmVjdG9yLmdldChpKTsKLQkJICAgIAkKLQkJICAgIAlpZiAoIWVsZW1lbnQuZ2V0VGFnTmFtZSgpLmVxdWFscyhmcmFnTmFtZSkpIHsKLQkJICAgIAkJRG9jdW1lbnQgZG9jID0gZWxlbWVudC5nZXRPd25lckRvY3VtZW50KCk7Ci0JCSAgICAJCU5vZGVMaXN0IGNoaWxkcmVuID0gZWxlbWVudC5nZXRDaGlsZE5vZGVzKCk7Ci0JCSAgICAJCU5hbWVkTm9kZU1hcCBhdHRyaWJ1dGVzID0gZWxlbWVudC5nZXRBdHRyaWJ1dGVzKCk7Ci0JCSAgICAJCWVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudChmcmFnTmFtZSk7Ci0JCSAgICAJCQotCQkgICAgCQlmb3IgKGludCBqID0gMDsgaiA8IGNoaWxkcmVuLmdldExlbmd0aCgpOyBqKyspIHsKLQkJICAgIAkJCWlmIChjaGlsZHJlbi5pdGVtKGopICE9IG51bGwpIHsKLQkJICAgIAkJCQllbGVtZW50LmFwcGVuZENoaWxkKGNoaWxkcmVuLml0ZW0oaikpOwotCQkJCSAgICAgICAgICAgIC8vIFdoZW4geW91IGFwcGVuZCBhIG5vZGUgZnJvbSBvbmUgZWxlbWVudCB0byBhbm90aGVyLAotCQkJCSAgICAgICAgICAgIC8vIHRoZSBvcmlnaW5hbCBlbGVtZW50IHdpbGwgbG9zZSBpdHMgcmVmZXJlbmNlIHRvIHRoaXMgbm9kZSwKLQkJCQkgICAgICAgICAgICAvLyB0aGVyZWZvcmUsIHRoZSBzaXplIG9mIHRoZSBub2RlIGxpc3Qgd2lsbCBkZWNyZWFzZSBieSAxLgotCQkJCSAgICAgICAgICAgIGotLTsKLQkJICAgIAkJCX0KLQkJICAgIAkJfQotCQkgICAgCQkKLQkJICAgIAkJZm9yIChpbnQgaiA9IDA7IGogPCBhdHRyaWJ1dGVzLmdldExlbmd0aCgpOyBqKyspIHsKLQkJICAgIAkJCU9iamVjdCBhdHRyID0gYXR0cmlidXRlcy5pdGVtKGopOwotCQkgICAgCQkJaWYgKGF0dHIgIT0gbnVsbCAmJiAoYXR0ciBpbnN0YW5jZW9mIEF0dHIpKSB7Ci0JCSAgICAJCQkJQXR0ciBhdHRyaWJ1dGUgPSAoQXR0cilhdHRyOwotCQkgICAgCQkJCWVsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZS5nZXROYW1lKCksIGF0dHJpYnV0ZS5nZXRWYWx1ZSgpKTsKLQkJICAgIAkJCX0KLQkJICAgIAkJfQotCQkgICAgCX0KLQkJICAgIAlpbnN0YW5jZURvY3VtZW50c1tpXSA9IGVsZW1lbnQ7Ci0JCSAgICB9Ci0JCX0KLQkJZWxzZQotCQkJaW5zdGFuY2VWZWN0b3IuY29weUludG8oaW5zdGFuY2VEb2N1bWVudHMpOwotCQkKLQkJcmV0dXJuIGluc3RhbmNlRG9jdW1lbnRzOwotCX0KLQkKLQkvKgotCSAqIFJldHJpZXZlIHRoZSBzb2FwIGhlYWRlciBmcm9tIHRoZSBlbnZlbG9wZSBhbmQgcG9wdWxhdGUgdGhlIGdpdmVuIG1lc3NhZ2UKLQkgKi8KLQlwcml2YXRlIHZvaWQgcHJvY2Vzc0JvZHkoRWxlbWVudCBlbnZlbG9wZSwgSVNPQVBNZXNzYWdlIG1lc3NhZ2UpIHsKLQkJCi0JCUVsZW1lbnQgYm9keSA9IGdldFNPQVBFbGVtZW50TlMoZW52ZWxvcGUsIENvbnN0YW50cy5FTEVNX0JPRFkpOwotCQlpZiAoYm9keSA9PSBudWxsKQotCQkJcmV0dXJuOwkJCQkKLQkJCi0JCW1lc3NhZ2Uuc2V0Qm9keShib2R5KTsKLQkJCi0JCS8vIGNoZWNrIGZvciBzb2FwIGZhdWx0Ci0JCUVsZW1lbnQgZmF1bHQgPSBnZXRTT0FQRWxlbWVudE5TKGJvZHksIENvbnN0YW50cy5FTEVNX0ZBVUxUKTsKLQkgICAgaWYgKGZhdWx0ICE9IG51bGwpIHsKLQkgICAgCW1lc3NhZ2Uuc2V0RmF1bHQoZmF1bHQpOwotCSAgICAJcmV0dXJuOwotCSAgICB9Ci0JICAgICAgICAJICAgICAgICAKLQkgICAgTm9kZUxpc3QgaW5zdGFuY2VMaXN0OwotCSAgICAKLQkgICAgaWYgKG1lc3NhZ2UuZ2V0TWVzc2FnZUNvbnRleHQoKS5pc0RvY3VtZW50U3R5bGUoKSkKLQkgICAgCWluc3RhbmNlTGlzdCA9IGJvZHkuZ2V0Q2hpbGROb2RlcygpOwotCSAgICBlbHNlIHsKLQkgICAgICAgIE5vZGVMaXN0IHJwY1dyYXBwZXIgPSBib2R5LmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoIioiLCAKLQkgICAgICAgIAkJbWVzc2FnZS5nZXRNZXNzYWdlQ29udGV4dCgpLmdldEJpbmRpbmdPcGVyYXRpb24oKS5nZXRPcGVyYXRpb24oKS5nZXRPdXRwdXQoKS5nZXRNZXNzYWdlKCkuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSk7Ci0KLQkgICAgICAgIC8qCi0JICAgICAgICAqIEhBQ0sgLSBTb21lIG9mIHRoZSB3ZWIgc2VydmljZXMgb3V0IG9uIHRoZSBpbnRlcm5ldCBkbyBub3QKLQkgICAgICAgICogc2V0IHRoZWlyIFJQQyB3cmFwcGVyIHByb3Blcmx5LiAgSXQgc2hvdWxkIGJlIHNldCB0byB0aGUgb3V0cHV0Ci0JICAgICAgICAqIG1lc3NhZ2UgbmFtZSBvZiB0aGUgc2VsZWN0ZWQgb3BlcmF0aW9uLiAgVGhlIGhhY2sgaXMgdG8KLQkgICAgICAgICogYXNzdW1lIHRoZSBmaXJzdCBlbGVtZW50IGluc2lkZSB0aGUgYm9keSBlbGVtZW50IGlzIHRoZQotCSAgICAgICAgKiBSUEMgd3JhcHBlci4KLQkgICAgICAgICovCi0JICAgICAgICBpZiAocnBjV3JhcHBlci5nZXRMZW5ndGgoKSA8PSAwKQotCSAgICAgICAgCXJwY1dyYXBwZXIgPSBib2R5LmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoIioiLCAiKiIpOwotCi0JICAgICAgICBpZiAocnBjV3JhcHBlci5nZXRMZW5ndGgoKSA+IDApCi0JICAgICAgICAJaW5zdGFuY2VMaXN0ID0gcnBjV3JhcHBlci5pdGVtKDApLmdldENoaWxkTm9kZXMoKTsKLQkgICAgICAgIGVsc2UKLQkgICAgICAgIAlyZXR1cm47Ci0JICAgIH0KLQkgICAgCi0JICAgIG1lc3NhZ2Uuc2V0Qm9keUNvbnRlbnQoZml4U09BUFJlc3BvbnNlKGluc3RhbmNlTGlzdCwgbWVzc2FnZS5nZXRNZXNzYWdlQ29udGV4dCgpKSk7Ci0JfQotCQotCS8qCi0JICogRGVzZXJpYWxpemUgdGhlIGJ5dGUgYXJyYXkgaW50byB0aGUgZ2l2ZW4gc29hcCBtZXNzYWdlLiAgVGhlIHBhcnQgcGFyYW1ldGVycyB0ZWxscwotCSAqIHRoZSBtZXRob2Qgd2hldGhlciB0aGUgaW5wdXQgaXMgdGhlIHdob2xlIGVudmVsb3Agb3IganVzdCB0aGUgY29udGVudHMgb2YgdGhlCi0JICogaGVhZGVyIG9yIGJvZHkuIAotCSAqLwotCXZvaWQgZGVzZXJpYWxpemUoaW50IHBhcnQsIGJ5dGVbXSB4bWwsIElTT0FQTWVzc2FnZSBtZXNzYWdlKSB0aHJvd3MJCQotCQlQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uLAotCQlTQVhFeGNlcHRpb24sCi0JCUlPRXhjZXB0aW9uIHsKLQkJCi0JCUVsZW1lbnQgcm9vdCA9IFhNTFV0aWxzLmJ5dGVBcnJheVRvRWxlbWVudCh4bWwsIHRydWUpOwkJCi0JCQotCQlzd2l0Y2ggKHBhcnQpIHsKLQkJCWNhc2UgSVNPQVBNZXNzYWdlLkVOVkVMT1BFOgkJCQkgCi0JCQkJbWVzc2FnZS5zZXRFbnZlbG9wZShyb290KTsKLQkJCQlwcm9jZXNzSGVhZGVyKHJvb3QsIG1lc3NhZ2UpOwotCQkJCXByb2Nlc3NCb2R5KHJvb3QsIG1lc3NhZ2UpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBJU09BUE1lc3NhZ2UuSEVBREVSX0NPTlRFTlQ6Ci0JCQkJbWVzc2FnZS5zZXRIZWFkZXJDb250ZW50KHRvRWxlbWVudEFycmF5KHJvb3QuZ2V0Q2hpbGROb2RlcygpKSk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIElTT0FQTWVzc2FnZS5CT0RZX0NPTlRFTlQ6Ci0JCQkJbWVzc2FnZS5zZXRCb2R5Q29udGVudCh0b0VsZW1lbnRBcnJheShyb290LmdldENoaWxkTm9kZXMoKSkpOwotCQkJCWJyZWFrOwotCQl9Ci0JfQotCQotCS8qCi0JICogVGFjayBvbiBhIHJvb3QgZWxlbWVudCB0aGUgc3RyaW5nIHdoaWNoIHJlcHJlc2VudHMgYSBzZXJpZXMgb2YgZWxlbWVudHMuCi0JICogVGhpcyBpcyBuZWVkZWQgdG8gZGVzZXJpYWxpemUgdGhlIHN0cmluZy4KLQkgKi8KLQlwcml2YXRlIFN0cmluZyBhZGRSb290RWxlbWVudChTdHJpbmcgeG1sLCBNYXAgbmFtZXNwYWNlVGFibGUpIHsKLQkJU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCSAgICBzYi5hcHBlbmQoIjxyb290Iik7Ci0JICAgIAotCSAgICBJdGVyYXRvciBpdGVyID0gbmFtZXNwYWNlVGFibGUua2V5U2V0KCkuaXRlcmF0b3IoKTsKLQkgICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7Ci0JICAgIAlPYmplY3QgdXJpID0gaXRlci5uZXh0KCk7Ci0JICAgIAlPYmplY3QgcHJlZml4ID0gbmFtZXNwYWNlVGFibGUuZ2V0KHVyaSk7Ci0JICAgIAlzYi5hcHBlbmQoIiAiKS5hcHBlbmQoInhtbG5zOiIpLmFwcGVuZChwcmVmaXgpLmFwcGVuZCgiPVwiIikuYXBwZW5kKHVyaSkuYXBwZW5kKCJcIiIpOwotCSAgICB9CSAgICAKLQkgICAgCi0JICAgIHNiLmFwcGVuZCgiPiIpLmFwcGVuZCh4bWwpLmFwcGVuZCgiPC9yb290PiIpOwotCSAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JRGVzZXJpYWxpemVyI2Rlc2VyaWFsaXplKGludCwgamF2YS5sYW5nLlN0cmluZywgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUE1lc3NhZ2UpCi0JICovCi0JcHVibGljIHZvaWQgZGVzZXJpYWxpemUoaW50IHBhcnQsIFN0cmluZyB4bWwsIElTT0FQTWVzc2FnZSBtZXNzYWdlKSB0aHJvd3MgVHJhbnNwb3J0RXhjZXB0aW9uIHsKLQkJCi0JCWlmIChwYXJ0ICE9IElTT0FQTWVzc2FnZS5FTlZFTE9QRSkKLQkJCXhtbCA9IGFkZFJvb3RFbGVtZW50KHhtbCwgbWVzc2FnZS5nZXROYW1lc3BhY2VUYWJsZSgpKTsKLQkJCi0JCXRyeSB7Ci0JCQlkZXNlcmlhbGl6ZShwYXJ0LCB4bWwuZ2V0Qnl0ZXMoREVGQVVMVF9TT0FQX0VOQ09ESU5HKSwgbWVzc2FnZSk7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBuZXcgVHJhbnNwb3J0RXhjZXB0aW9uKGUpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3RyYW5zcG9ydC9TT0FQVHJhbnNwb3J0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvdHJhbnNwb3J0L1NPQVBUcmFuc3BvcnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjE0OTJiNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvdHJhbnNwb3J0L1NPQVBUcmFuc3BvcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA0MTMgICAxNzY0OTMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTRTogTWFrZSBtZXNzYWdlL3RyYW5zcG9ydCBzdGFjayBwbHVnZ2FibGUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC50cmFuc3BvcnQ7Ci0KLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmc7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLmF4aXMuQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbHVnaW4uRXhwbG9yZXJQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JRGVzZXJpYWxpemVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBNZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBUcmFuc3BvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU2VyaWFsaXplcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0Lk1lc3NhZ2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuU09BUE1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5UcmFuc3BvcnRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5kaXNjb3ZlcnkuTmV0VXRpbHM7Ci0KLS8qKgotICogV1NFJ3MgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBJU09BUFRyYW5zcG9ydAotICovCi1wdWJsaWMgY2xhc3MgU09BUFRyYW5zcG9ydCBpbXBsZW1lbnRzIElTT0FQVHJhbnNwb3J0IHsKLQotCXN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPUF9SRUFEX09OTFkgPSAicHJvcF9yZWFkX29ubHkiOwotCXN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPUF9SQVdfQllURVMgPSAicHJvcF9yYXdfYnl0ZXMiOwotCQotCS8qCi0JICogQ29uc3RydWN0b3IuCi0JICovCi0JU09BUFRyYW5zcG9ydCgpIHt9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQVHJhbnNwb3J0I25ld1NlcmlhbGl6ZXIoKQotCSAqLwotCXB1YmxpYyBJU2VyaWFsaXplciBuZXdTZXJpYWxpemVyKCkgewkJCi0JCXJldHVybiBuZXcgU09BUE1lc3NhZ2VQcm9jZXNzb3IoKTsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUFRyYW5zcG9ydCNuZXdEZXNlcmlhbGl6ZXIoKQotCSAqLwotCXB1YmxpYyBJRGVzZXJpYWxpemVyIG5ld0Rlc2VyaWFsaXplcigpIHsKLQkJcmV0dXJuIG5ldyBTT0FQTWVzc2FnZVByb2Nlc3NvcigpOwotCX0KLQotCS8qCi0JICogQ2hlY2sgaWYgdGhlIGJpbmRpbmcgaXMgc3VwcG9ydGVkCi0JICovCi0JcHJpdmF0ZSB2b2lkIGNoZWNrQmluZGluZyhFeHRlbnNpYmlsaXR5RWxlbWVudCBiaW5kaW5nKSB0aHJvd3MgVHJhbnNwb3J0RXhjZXB0aW9uIHsKLQkJCi0JCVN0cmluZyBiaW5kaW5nVVJJID0gYmluZGluZy5nZXRFbGVtZW50VHlwZSgpLmdldE5hbWVzcGFjZVVSSSgpOwotCQkKLQkJLy8gbG9va2luZyBmb3IgU09BUCAxLjEgYmluZGluZwotCQlpZiAoIShiaW5kaW5nIGluc3RhbmNlb2YgU09BUEJpbmRpbmcpIHx8Ci0JCQkhQ29uc3RhbnRzLlVSSV9XU0RMMTFfU09BUC5lcXVhbHMoYmluZGluZ1VSSSkpCi0JCQl0aHJvdyBuZXcgVHJhbnNwb3J0RXhjZXB0aW9uKEV4cGxvcmVyUGx1Z2luLmdldE1lc3NhZ2UoIiVNU0dfRVJST1JfVU5TVVBQT1JURURfQklORElORyIsIG5ldyBTdHJpbmdbXSB7IGJpbmRpbmdVUkkgfSkpOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQVHJhbnNwb3J0I25ld01lc3NhZ2Uob3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5NZXNzYWdlQ29udGV4dCkKLQkgKi8KLQlwdWJsaWMgSVNPQVBNZXNzYWdlIG5ld01lc3NhZ2UoTWVzc2FnZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIFRyYW5zcG9ydEV4Y2VwdGlvbiB7Ci0JCQotCQljaGVja0JpbmRpbmcoY29udGV4dC5nZXRCaW5kaW5nUHJvdG9jb2woKSk7Ci0JCQotCQlTT0FQTWVzc2FnZVByb2Nlc3NvciBwcm9jZXNzb3IgPSBuZXcgU09BUE1lc3NhZ2VQcm9jZXNzb3IoKTsKLQkJSVNPQVBNZXNzYWdlIG1lc3NhZ2UgPSBuZXcgU09BUE1lc3NhZ2UoY29udGV4dCwgcHJvY2Vzc29yKTsKLQkJcHJvY2Vzc29yLmluaXRNZXNzYWdlKG1lc3NhZ2UpOwkJCQotCQlyZXR1cm4gbWVzc2FnZTsJCQkJCi0JfQotCQotCS8qCi0JICogQ2hlY2sgaWYgdGhlIG1lc3NhZ2UgdXNlcyBhIGJpbmRpbmcgYW5kIHRyYW5zcG9ydCB0aGF0IHdlIHN1cHBvcnQuCi0JICovCi0JcHJpdmF0ZSB2b2lkIGNoZWNrTWVzc2FnZShJU09BUE1lc3NhZ2UgbWVzc2FnZSkgdGhyb3dzIFRyYW5zcG9ydEV4Y2VwdGlvbiB7Ci0JCQotCQlFeHRlbnNpYmlsaXR5RWxlbWVudCBiaW5kaW5nID0gbWVzc2FnZS5nZXRNZXNzYWdlQ29udGV4dCgpLmdldEJpbmRpbmdQcm90b2NvbCgpOyAKLQkJY2hlY2tCaW5kaW5nKGJpbmRpbmcpOwotCQkKLQkJU09BUEJpbmRpbmcgc29hcEJpbmRpbmcgPSAoU09BUEJpbmRpbmcpIGJpbmRpbmc7IAotCQkJCi0JCWlmICghQ29uc3RhbnRzLlVSSV9TT0FQMTFfSFRUUC5lcXVhbHMoc29hcEJpbmRpbmcuZ2V0VHJhbnNwb3J0VVJJKCkpKQotCQkJdGhyb3cgbmV3IFRyYW5zcG9ydEV4Y2VwdGlvbihFeHBsb3JlclBsdWdpbi5nZXRNZXNzYWdlKCIlTVNHX0VSUk9SX1VOU1VQUE9SVEVEX1RSQU5TUE9SVCIsIG5ldyBTdHJpbmdbXSB7IHNvYXBCaW5kaW5nLmdldFRyYW5zcG9ydFVSSSgpIH0pKTsKLQl9Ci0JCQotCS8qCi0JICogQ3JlYXRlIGFuIEhUVFBUcmFuc3BvcnQgZm9yIGludGVybmFsIHVzZS4KLQkgKi8KLQlwcml2YXRlIEhUVFBUcmFuc3BvcnQgY3JlYXRlSW50ZXJuYWxUcmFuc3BvcnQoU3RyaW5nIHVzZXJuYW1lLCBTdHJpbmcgcGFzc3dvcmQpIHsKLQotCQlIVFRQVHJhbnNwb3J0IGludGVybmFsVHJhbnNwb3J0ID0gbmV3IEhUVFBUcmFuc3BvcnQoKTsKLQkJICAgIAotCQlpZiAodXNlcm5hbWUgIT0gbnVsbCAmJiBwYXNzd29yZCAhPSBudWxsKSB7Ci0JCQlpbnRlcm5hbFRyYW5zcG9ydC5zZXRIdHRwQmFzaWNBdXRoVXNlcm5hbWUodXNlcm5hbWUpOwotCQkJaW50ZXJuYWxUcmFuc3BvcnQuc2V0SHR0cEJhc2ljQXV0aFBhc3N3b3JkKHBhc3N3b3JkKTsKLQkJfQotCQkKLQkJcmV0dXJuIGludGVybmFsVHJhbnNwb3J0OwotCX0JCi0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUFRyYW5zcG9ydCNzZW5kKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcsIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBNZXNzYWdlKQotCSAqLwotCXB1YmxpYyBJU09BUE1lc3NhZ2Ugc2VuZChTdHJpbmcgdXJsLCBTdHJpbmcgdXNlcm5hbWUsIFN0cmluZyBwYXNzd29yZCwgSVNPQVBNZXNzYWdlIG1lc3NhZ2UpIHRocm93cyBUcmFuc3BvcnRFeGNlcHRpb24gewotCQkKLQkJY2hlY2tNZXNzYWdlKG1lc3NhZ2UpOwkJCQotCQkJCQkJCQkKLQkJdHJ5IHsKLQkJCUhUVFBUcmFuc3BvcnQgaW50ZXJuYWxUcmFuc3BvcnQgPSBjcmVhdGVJbnRlcm5hbFRyYW5zcG9ydCh1c2VybmFtZSwgcGFzc3dvcmQpOwotCQkJaW50ZXJuYWxUcmFuc3BvcnQuc2VuZChOZXRVdGlscy5jcmVhdGVVUkwodXJsKSwgKFN0cmluZykgbWVzc2FnZS5nZXRQcm9wZXJ0eShJU09BUE1lc3NhZ2UuUFJPUF9TT0FQX0FDVElPTiksIG1lc3NhZ2UudG9YTUwoKSk7Ci0JCQkKLQkJCVNPQVBNZXNzYWdlUHJvY2Vzc29yIHByb2Nlc3NvciA9IG5ldyBTT0FQTWVzc2FnZVByb2Nlc3NvcigpOwotCQkJSVNPQVBNZXNzYWdlIHJlcGx5ID0gbmV3IFNPQVBNZXNzYWdlKG1lc3NhZ2UuZ2V0TWVzc2FnZUNvbnRleHQoKSwgcHJvY2Vzc29yKTsKLQkJCXJlcGx5LnNldFByb3BlcnR5KFBST1BfUkVBRF9PTkxZLCBCb29sZWFuLlRSVUUpOwotCQkJCi0JCQlieXRlW10gcmF3Qnl0ZXMgPSBpbnRlcm5hbFRyYW5zcG9ydC5yZWNlaXZlQnl0ZXMoKTsKLQkJCQotCQkJdHJ5IHsgCi0JCQkJcHJvY2Vzc29yLmRlc2VyaWFsaXplKElTT0FQTWVzc2FnZS5FTlZFTE9QRSwgcmF3Qnl0ZXMsIHJlcGx5KTsKLQkJCX0KLQkJCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCS8vIGlmIGVycm9yIG9jY3VycyBkdXJpbmcgZGVzZXJpYWxpemF0aW9uLCB3ZSB3YW50IHRvIHNhdmUgYSBjb3B5IG9mIHRoZSBhY3R1YWwgcmF3IGJ5dGVzCi0JCQkJcmVwbHkuc2V0UHJvcGVydHkoUFJPUF9SQVdfQllURVMsIHJhd0J5dGVzKTsKLQkJCX0KLQkJCQkJCi0JCQlyZXR1cm4gcmVwbHk7Ci0JCX0KLQkJY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBlOwotCSAgICB9Ci0JICAgIGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICAJdGhyb3cgbmV3IFRyYW5zcG9ydEV4Y2VwdGlvbihlKTsKLQkgICAgfQkJCQotCX0JCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3RyYW5zcG9ydC9TT0FQVHJhbnNwb3J0UHJvdmlkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC90cmFuc3BvcnQvU09BUFRyYW5zcG9ydFByb3ZpZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3M2M1MjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3RyYW5zcG9ydC9TT0FQVHJhbnNwb3J0UHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDQxMyAgIDE3NjQ5MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFOiBNYWtlIG1lc3NhZ2UvdHJhbnNwb3J0IHN0YWNrIHBsdWdnYWJsZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnRyYW5zcG9ydDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBUcmFuc3BvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUFRyYW5zcG9ydFByb3ZpZGVyOwotCi0vKioKLSAqIFdTRSdzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZm9yIElTT0FQVHJhbnNwb3J0UHJvdmlkZXIuCi0gKi8KLXB1YmxpYyBjbGFzcyBTT0FQVHJhbnNwb3J0UHJvdmlkZXIgaW1wbGVtZW50cyBJU09BUFRyYW5zcG9ydFByb3ZpZGVyIHsJCi0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUFRyYW5zcG9ydFByb3ZpZGVyI25ld1RyYW5zcG9ydCgpCi0JICovCi0JcHVibGljIElTT0FQVHJhbnNwb3J0IG5ld1RyYW5zcG9ydCgpIHsKLQkJcmV0dXJuIG5ldyBTT0FQVHJhbnNwb3J0KCk7CQkKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvdXRpbC9TT0FQTWVzc2FnZVV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvdXRpbC9TT0FQTWVzc2FnZVV0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiNGVkN2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2RsL3V0aWwvU09BUE1lc3NhZ2VVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDQxMyAgIDE3NjQ5MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFOiBNYWtlIG1lc3NhZ2UvdHJhbnNwb3J0IHN0YWNrIHBsdWdnYWJsZQotICogMjAwNzA1MTAgICAxODYzNzUgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIENvbXBpbGUgZXJyb3JzIGluIHdzdC53cy5leHBsb3JlcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5XU0RMTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLldTRExPcGVyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LklYU0RGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlcjsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgaGFzIHNvbWUgY29tbW9uIHJvdXRpbmVzIHVzZWQgYnkgdGhlIFdlYiBTZXJ2aWNlcyBleHBsb3JlciB0byB3b3JrIHdpdGggSVNPQVBNZXNzYWdlcy4KLSAqLwotcHVibGljIGNsYXNzIFNPQVBNZXNzYWdlVXRpbHMgewotCQotCS8qKgotCSAqIERlY29kZXMgbmFtZXNwYWNlIGRlY2xhcmF0aW9ucyB0aGF0IGhhdmUgYmVlbiBlbmNvZGVkIGJ5IFdTRSBpbnRvIHRoZSBvcGVyYXRpb24gZWxlbWVudCBvZiB0aGUgV1NETCBtb2RlbC4KLQkgKiBUaGUgZGVjb2RlZCBkZWNsYXJhdGlvbnMgd2lsbCBiZSBhZGRlZCB0byB0aGUgZ2l2ZW4gbmFtZXNwYWNlIHRhYmxlLgotCSAqICAKLQkgKiBAcGFyYW0gc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUgVGhlIG5hbWVzcGFjZSB0YWJsZSB0byBwb3B1bGF0ZS4KLQkgKiBAcGFyYW0gb3BlckVsZW1lbnQgVGhlIG9wZXJhdGlvbiBlbGVtZW50IHdpdGggdGhlIGVuY29kZWQgbmFtZXNwYWNlIGRlY2xhcmF0aW9ucy4KLQkgKiBAcmV0dXJuIFRydWUgaWYgbmV3IG5hbWVzcGFjZSBkZWNsYXJhdGlvbnMgYXJlIGZvdW5kIGFuZCBhZGRlZCB0byB0aGUgbmFtZXNwYWNlIHRhYmxlLCBmYWxzZSBvdGhlcndpc2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGRlY29kZU5hbWVzcGFjZVRhYmxlKEhhc2h0YWJsZSBzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZSwgV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQpIHsKLQkJCQotCQlib29sZWFuIHVwZGF0ZWQgPSBmYWxzZTsKLQotCQlTdHJpbmdbXSBuc0RlY2xhcmF0aW9ucyA9IChTdHJpbmdbXSkgb3BlckVsZW1lbnQuZ2V0UHJvcGVydHlBc09iamVjdChXU0RMTW9kZWxDb25zdGFudHMuUFJPUF9TT1VSQ0VfQ09OVEVOVF9OQU1FU1BBQ0UpOwotCQlpZiAobnNEZWNsYXJhdGlvbnMgPT0gbnVsbCkKLQkJCXJldHVybiBmYWxzZTsKLQotCQkvLyBlYWNoIG5hbWVzcGFjZSBkZWNsYXJhdGlvbiBpcyBkZWNvZGVkIGludG8gMiBwYXJ0czogdGhlIHByZWZpeCAKLQkJLy8gaW4gZWxlbWVudCBbMF0gYW5kIHRoZSBuYW1lc3BhY2UgdXJpIGluIGVsZW1lbnQgWzFdLgotCQlmb3IgKGludCBpID0gMDsgaSA8IG5zRGVjbGFyYXRpb25zLmxlbmd0aDsgaSsrKSB7Ci0JCQlTdHJpbmdbXSBwcmVmaXhfbnMgPSBTb2FwSGVscGVyLmRlY29kZU5hbWVzcGFjZURlY2xhcmF0aW9uKG5zRGVjbGFyYXRpb25zW2ldKTsKLQkJCQotCQkJLy8gY2hlY2sgaWYgdGhlIG5hbWVzcGFjZSB1cmkgaXMgYWxyZWFkeSBhIGtleSBpbiB0aGUgbmFtZXNwYWNlIHRhYmxlCi0JCQkvLyBpZiBpdCBpcywgZG9uJ3QgYWRkIGl0Ci0JCQlpZiAoIXNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLmNvbnRhaW5zS2V5KHByZWZpeF9uc1sxXSkpIHsKLQkJCSAgICBzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZS5wdXQocHJlZml4X25zWzFdLCBwcmVmaXhfbnNbMF0pOwotCQkJICAgIHVwZGF0ZWQgPSB0cnVlOwotCQkJfQotCQl9Ci0JCQotCQlyZXR1cm4gdXBkYXRlZDsKLQl9Ci0KLQkvKioKLQkgKiBQb3B1bGF0ZSB0aGUgaGVhZGVyIGNvbnRlbnQgb2YgdGhlIGdpdmVuIElTT0FQTWVzc2FnZSB1c2luZyB0aGUgdmFsdWVzIGZyb20gV1NFJ3MgZnJhZ21lbnQgbW9kZWwKLQkgKiAKLQkgKiBAcGFyYW0gc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUgQSBuYW1lc3BhY2UgdGFibGUgdG8gdXNlIGR1cmluZyB0aGlzIG9wZXJhdGlvbi4KLQkgKiBAcGFyYW0gb3BlckVsZW1lbnQgQWNjZXNzIFdTRSdzIGZyYWdtZW50cyB2aWEgdGhpcyBvcGVyYXRpb24gZWxlbWVudC4gCi0JICogQHBhcmFtIHNvYXBNZXNzYWdlIFRoZSBJU09BUE1lc3NhZ2UgdG8gcG9wdWxhdGUuCi0JICogQHRocm93cyBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIHNldEhlYWRlckNvbnRlbnRGcm9tTW9kZWwoSGFzaHRhYmxlIHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLCBXU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCwgSVNPQVBNZXNzYWdlIHNvYXBNZXNzYWdlKQotCQl0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiB7Ci0JICAgIAotCQlWZWN0b3IgaGVhZGVyRW50cmllcyA9IG5ldyBWZWN0b3IoKTsKLQkgICAgCi0JICAgIEl0ZXJhdG9yIGl0ID0gb3BlckVsZW1lbnQuZ2V0U09BUEhlYWRlcnMoKS5pdGVyYXRvcigpOwotCSAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0JICAgIAlTT0FQSGVhZGVyIHNvYXBIZWFkZXIgPSAoU09BUEhlYWRlcikgaXQubmV4dCgpOwotCSAgICAJYm9vbGVhbiBpc1VzZUxpdGVyYWwgPSAibGl0ZXJhbCIuZXF1YWxzKHNvYXBIZWFkZXIuZ2V0VXNlKCkpOyAgICAgICAgICAgCi0JICAgIAlJWFNERnJhZ21lbnQgZnJhZyA9IChJWFNERnJhZ21lbnQpIG9wZXJFbGVtZW50LmdldEhlYWRlckZyYWdtZW50KHNvYXBIZWFkZXIpOwotCSAgICAJRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzID0gZnJhZy5nZW5JbnN0YW5jZURvY3VtZW50c0Zyb21QYXJhbWV0ZXJWYWx1ZXMoCi0JICAgIAkJCSFpc1VzZUxpdGVyYWwsIHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLCBzb2FwTWVzc2FnZS5nZXRFbnZlbG9wZShmYWxzZSkuZ2V0T3duZXJEb2N1bWVudCgpKTsKLQkgICAgCWZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFuY2VEb2N1bWVudHMubGVuZ3RoOyBpKyspIHsKLQkgICAgCQlpZiAoaW5zdGFuY2VEb2N1bWVudHNbaV0gPT0gbnVsbCkKLQkgICAgCQkJY29udGludWU7Ci0JICAgIAkJaGVhZGVyRW50cmllcy5hZGRFbGVtZW50KGluc3RhbmNlRG9jdW1lbnRzW2ldKTsKLQkgICAgCX0KLQkgICAgfQotCi0JICAgIEVsZW1lbnRbXSBoZWFkZXJDb250ZW50ID0gbmV3IEVsZW1lbnRbaGVhZGVyRW50cmllcy5zaXplKCldOwotCSAgICBoZWFkZXJFbnRyaWVzLmNvcHlJbnRvKGhlYWRlckNvbnRlbnQpOwotCSAgICAKLQkgICAgc29hcE1lc3NhZ2Uuc2V0SGVhZGVyQ29udGVudChoZWFkZXJDb250ZW50KTsKLQl9Ci0KLQkvKioKLQkgKiBQb3B1bGF0ZSB0aGUgYm9keSBjb250ZW50IG9mIHRoZSBnaXZlbiBJU09BUE1lc3NhZ2UgdXNpbmcgdGhlIHZhbHVlcyBmcm9tIFdTRSdzIGZyYWdtZW50IG1vZGVsCi0JICogCi0JICogQHBhcmFtIHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlIEEgbmFtZXNwYWNlIHRhYmxlIHRvIHVzZSBkdXJpbmcgdGhpcyBvcGVyYXRpb24uCi0JICogQHBhcmFtIG9wZXJFbGVtZW50IEFjY2VzcyBXU0UncyBmcmFnbWVudHMgdmlhIHRoaXMgb3BlcmF0aW9uIGVsZW1lbnQuIAotCSAqIEBwYXJhbSBzb2FwTWVzc2FnZSBUaGUgSVNPQVBNZXNzYWdlIHRvIHBvcHVsYXRlLgotCSAqIEB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyBzdGF0aWMgdm9pZCBzZXRCb2R5Q29udGVudEZyb21Nb2RlbChIYXNodGFibGUgc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUsIFdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50LCBJU09BUE1lc3NhZ2Ugc29hcE1lc3NhZ2UpCi0JCXRocm93cyBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIHsKLQkJCi0JICAgIFZlY3RvciBib2R5RW50cmllcyA9IG5ldyBWZWN0b3IoKTsKLQkgICAgYm9vbGVhbiBpc1VzZUxpdGVyYWwgPSBvcGVyRWxlbWVudC5pc1VzZUxpdGVyYWwoKTsKLQotCSAgICBJdGVyYXRvciBpdCA9IG9wZXJFbGVtZW50LmdldE9yZGVyZWRCb2R5UGFydHMoKS5pdGVyYXRvcigpOwotCSAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0JICAgIAlQYXJ0IHBhcnQgPSAoUGFydClpdC5uZXh0KCk7Ci0JICAgIAlJWFNERnJhZ21lbnQgZnJhZyA9IChJWFNERnJhZ21lbnQpIG9wZXJFbGVtZW50LmdldEZyYWdtZW50KHBhcnQpOwotCSAgICAJRWxlbWVudFtdIGluc3RhbmNlRG9jdW1lbnRzID0gZnJhZy5nZW5JbnN0YW5jZURvY3VtZW50c0Zyb21QYXJhbWV0ZXJWYWx1ZXMoCi0JICAgIAkJCSAhaXNVc2VMaXRlcmFsLCBzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZSwgc29hcE1lc3NhZ2UuZ2V0RW52ZWxvcGUoZmFsc2UpLmdldE93bmVyRG9jdW1lbnQoKSk7Ci0JICAgIAlmb3IgKGludCBpID0gMDsgaSA8IGluc3RhbmNlRG9jdW1lbnRzLmxlbmd0aDsgaSsrKSB7Ci0JICAgIAkJaWYgKGluc3RhbmNlRG9jdW1lbnRzW2ldID09IG51bGwpCi0JICAgIAkJCWNvbnRpbnVlOwotCSAgICAJCWJvZHlFbnRyaWVzLmFkZEVsZW1lbnQoaW5zdGFuY2VEb2N1bWVudHNbaV0pOwotCSAgICAJfQotCSAgICB9Ci0KLQkgICAgRWxlbWVudFtdIGJvZHlDb250ZW50ID0gbmV3IEVsZW1lbnRbYm9keUVudHJpZXMuc2l6ZSgpXTsKLQkgICAgYm9keUVudHJpZXMuY29weUludG8oYm9keUNvbnRlbnQpOwotCSAgICAKLQkgICAgc29hcE1lc3NhZ2Uuc2V0Qm9keUNvbnRlbnQoYm9keUNvbnRlbnQpOwotCX0KLQkKLQkvKgotCSAqIElmIHRoZSBhdHRyaWJ1dGUgaXMgYSBuYW1lc3BhY2UgZGVjbGFyYXRpb24sIHRoZSBuYW1lc3BhY2UgcHJlZml4IGlzIHJldHVybmVkLgotCSAqIE90aGVyd2lzZSBudWxsIGlzIHJldHVybmVkLgotCSAqLwotCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXROU1ByZWZpeChBdHRyIGF0dHJpYnV0ZSkgewotCQlTdHJpbmcgbmFtZSA9IGF0dHJpYnV0ZS5nZXROYW1lKCk7Ci0JCWlmIChuYW1lLnN0YXJ0c1dpdGgoInhtbG5zOiIpKQotCQkJcmV0dXJuIG5hbWUuc3Vic3RyaW5nKDYpOwotCQlyZXR1cm4gbnVsbDsKLQl9Ci0JCi0JLyoKLQkgKiBsb29rdXAgdGhlIHByZWZpeCBvZiB0aGUgbmFtZXNwYWNlVVJJLCBhc3N1bWluZyB0aGF0IGl0IGlzIGRlY2xhcmVkIG9uIHRoZSBlbGVtZW50IGl0c2VsZgotCSAqLwotCXByaXZhdGUgc3RhdGljIFN0cmluZyBsb29rdXBQcmVmaXgoRWxlbWVudCBlbGVtZW50LCBTdHJpbmcgbmFtZXNwYWNlVVJJKSB7Ci0JCQotCQlOYW1lZE5vZGVNYXAgYXR0cmlidXRlcyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlcygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGF0dHJpYnV0ZXMuZ2V0TGVuZ3RoKCk7IGkrKykgewotCQkJQXR0ciBhdHRyaWJ1dGUgPSAoQXR0cikgYXR0cmlidXRlcy5pdGVtKGkpOwotCQkJU3RyaW5nIHByZWZpeCA9IGdldE5TUHJlZml4KGF0dHJpYnV0ZSk7Ci0JCQlpZiAocHJlZml4ICE9IG51bGwgJiYgYXR0cmlidXRlLmdldFZhbHVlKCkuZXF1YWxzKG5hbWVzcGFjZVVSSSkpCi0JCQkJcmV0dXJuIHByZWZpeDsKLQkJfQkJCi0JCQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0JCi0JLyoqCi0JICogR2l2ZW4gYW4gYXJyYXkgb2YgZWxlbWVudHMsIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgZWxlbWVudCB0aGF0IG1hdGNoZXMKLQkgKiB0aGUgZ2l2ZW4gUGFydC4gIEEgbWF0Y2ggaXMgZGV0ZXJtaW5lZCBieSBjb21wYXJpbmcgdGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lcyBvZiB0aGUgUGFydCBhbmQgRWxlbWVudHMuCi0JICogCi0JICogQHBhcmFtIHBhcnQgVGhlIFBhcnQgCi0JICogQHBhcmFtIGVsZW1lbnRzIFRoZSBhcnJheSBvZiBFbGVtZW50cwotCSAqIEBwYXJhbSBuYW1lc3BhY2VUYWJsZSBBIG5hbWVzcGFjZSB0YWJsZSBmb3IgbG9va2luZyB1cCBuYW1lc3BhY2UgcHJlZml4ZXMuCi0JICogQHBhcmFtIGZyYWdOYW1lIE5hbWUgb2YgdGhlIFBhcnQncyBmcmFnbWVudCAoZXNzZW50aWFsbHkgdGhlIFBhcnQncyBsb2NhbCBuYW1lKS4KLQkgKiBAcGFyYW0gc3RhcnQgVGhlIGluZGV4IHRvIGJlZ2luIHRoZSBzZWFyY2guCi0JICogQHJldHVybiBUaGUgaW5kZXggb2YgdGhlIGZpcnN0IG1hdGNoaW5nIGVsZW1lbnQsIG9yIC0xIGlmIG5vIG1hdGNoIGlzIGZvdW5kLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgaW50IGZpbmRGaXJzdE1hdGNoaW5nRWxlbWVudChQYXJ0IHBhcnQsIEVsZW1lbnRbXSBlbGVtZW50cywgTWFwIG5hbWVzcGFjZVRhYmxlLCBTdHJpbmcgZnJhZ05hbWUsIGludCBzdGFydCkgewotCQkKLQkJU3RyaW5nIG5hbWVzcGFjZVVSSSA9IG51bGw7Ci0JCVN0cmluZyBwcmVmaXggPSBudWxsOwotCQkKLQkJLy8gdHJ5IHRvIGdldCB0aGUgcHJlZml4Ci0JCWlmIChwYXJ0LmdldEVsZW1lbnROYW1lKCkgIT0gbnVsbCkgewotCQkJbmFtZXNwYWNlVVJJID0gcGFydC5nZXRFbGVtZW50TmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpOwotCQkJcHJlZml4ID0gKFN0cmluZykgbmFtZXNwYWNlVGFibGUuZ2V0KG5hbWVzcGFjZVVSSSk7CQkJCQkKLQkJfQotCQkKLQkJZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHsJCQkKLQkJCUVsZW1lbnQgZWxlbWVudCA9IGVsZW1lbnRzW2ldOwotCQkJU3RyaW5nIG5hbWUgPSBlbGVtZW50LmdldFRhZ05hbWUoKTsKLQkJCQotCQkJLy8gdHJ5IHRvIGdldCBwcmVmaXggYWdhaW4sIHRoZSBuYW1lc3BhY2UgZGVjbGFyYXRpb24gY2FuIGJlIGRpcmVjdGx5IG9uIHRoZSBlbGVtZW50Ci0JCQlpZiAocHJlZml4ID09IG51bGwgJiYgbmFtZXNwYWNlVVJJICE9IG51bGwgJiYgZWxlbWVudC5oYXNBdHRyaWJ1dGVzKCkpCi0JCQkJcHJlZml4ID0gbG9va3VwUHJlZml4KGVsZW1lbnQsIG5hbWVzcGFjZVVSSSk7Ci0JCQkKLQkJCWlmIChwcmVmaXggPT0gbnVsbCAmJiBuYW1lLmVxdWFscyhmcmFnTmFtZSkpCi0JCQkJcmV0dXJuIGk7Ci0JCQllbHNlIGlmIChwcmVmaXggIT0gbnVsbCAmJiBuYW1lLmVxdWFscyhwcmVmaXggKyAiOiIgKyBmcmFnTmFtZSkpCi0JCQkJcmV0dXJuIGk7Ci0JCX0KLQkJCQkKLQkJcmV0dXJuIC0xOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC91dGlsL1NvYXBIZWxwZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC91dGlsL1NvYXBIZWxwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZjODM0Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwvdXRpbC9Tb2FwSGVscGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDMwNSAgIDExNzAzNCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHNob3VsZCBzdXBwb3J0IFNPQVAgSGVhZGVycwotICogMjAwNzA0MTMgICAxNzY0OTMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTRTogTWFrZSBtZXNzYWdlL3RyYW5zcG9ydCBzdGFjayBwbHVnZ2FibGUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuYXBhY2hlLmF4aXMuQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlVSTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBTb2FwSGVscGVyCi17Ci0gIHByaXZhdGUgc3RhdGljIEhhc2h0YWJsZSBkZWZhdWx0U29hcEVudmVsb3BlTmFtZXNwYWNlc18gPSBudWxsOwotICAKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgdm9pZCBpbml0RGVmYXVsdFNvYXBFbnZlbG9wZU5hbWVzcGFjZXMoKQotICB7Ci0gICAgZGVmYXVsdFNvYXBFbnZlbG9wZU5hbWVzcGFjZXNfID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIGRlZmF1bHRTb2FwRW52ZWxvcGVOYW1lc3BhY2VzXy5wdXQoQ29uc3RhbnRzLlVSSV9TT0FQMTFfRU5WLENvbnN0YW50cy5OU19QUkVGSVhfU09BUF9FTlYpOwotICAgIGRlZmF1bHRTb2FwRW52ZWxvcGVOYW1lc3BhY2VzXy5wdXQoQ29uc3RhbnRzLlVSSV8yMDAxX1NDSEVNQV9YU0ksQ29uc3RhbnRzLk5TX1BSRUZJWF9TQ0hFTUFfWFNJKTsKLSAgICBkZWZhdWx0U29hcEVudmVsb3BlTmFtZXNwYWNlc18ucHV0KENvbnN0YW50cy5VUklfMjAwMV9TQ0hFTUFfWFNELENvbnN0YW50cy5OU19QUkVGSVhfU0NIRU1BX1hTRCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgdm9pZCBhZGREZWZhdWx0U29hcEVudmVsb3BlTmFtZXNwYWNlcyhIYXNodGFibGUgc29hcEVudmVsb3BlTmFtZXNwYWNlcykKLSAgewotICAgIGlmIChkZWZhdWx0U29hcEVudmVsb3BlTmFtZXNwYWNlc18gPT0gbnVsbCkKLSAgICAgIGluaXREZWZhdWx0U29hcEVudmVsb3BlTmFtZXNwYWNlcygpOwotICAgIEVudW1lcmF0aW9uIGRlZmF1bHRTb2FwRW52ZWxvcGVOYW1lc3BhY2VVUklzID0gZGVmYXVsdFNvYXBFbnZlbG9wZU5hbWVzcGFjZXNfLmtleXMoKTsKLSAgICB3aGlsZSAoZGVmYXVsdFNvYXBFbnZlbG9wZU5hbWVzcGFjZVVSSXMuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgewotICAgICAgU3RyaW5nIGRlZmF1bHRTb2FwRW52ZWxvcGVOYW1lc3BhY2VVUkkgPSAoU3RyaW5nKWRlZmF1bHRTb2FwRW52ZWxvcGVOYW1lc3BhY2VVUklzLm5leHRFbGVtZW50KCk7Ci0gICAgICBzb2FwRW52ZWxvcGVOYW1lc3BhY2VzLnB1dChkZWZhdWx0U29hcEVudmVsb3BlTmFtZXNwYWNlVVJJLChTdHJpbmcpZGVmYXVsdFNvYXBFbnZlbG9wZU5hbWVzcGFjZXNfLmdldChkZWZhdWx0U29hcEVudmVsb3BlTmFtZXNwYWNlVVJJKSk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gaXNEZWZhdWx0U29hcEVudmVsb3BlTmFtZXNwYWNlKFN0cmluZyBuYW1lc3BhY2VVUkksU3RyaW5nIG5hbWVzcGFjZVByZWZpeCkKLSAgewotICAgIGlmIChkZWZhdWx0U29hcEVudmVsb3BlTmFtZXNwYWNlc18gPT0gbnVsbCkKLSAgICAgIGluaXREZWZhdWx0U29hcEVudmVsb3BlTmFtZXNwYWNlcygpOwotICAgIGlmIChkZWZhdWx0U29hcEVudmVsb3BlTmFtZXNwYWNlc18uZ2V0KG5hbWVzcGFjZVVSSSkgIT0gbnVsbCkKLSAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLSAgfSAgCi0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIEVsZW1lbnQgY3JlYXRlU29hcEVudmVsb3BlRWxlbWVudChEb2N1bWVudCBkb2MsSGFzaHRhYmxlIHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlKQotICB7Ci0gICAgRWxlbWVudCBzb2FwRW52ZWxvcGVFbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoInNvYXBlbnY6RW52ZWxvcGUiKTsKLSAgICBFbnVtZXJhdGlvbiBlID0gc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUua2V5cygpOwotICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIFN0cmluZyBzb2FwRW52ZWxvcGVOYW1lc3BhY2VVUkkgPSAoU3RyaW5nKWUubmV4dEVsZW1lbnQoKTsKLSAgICAgIFN0cmluZ0J1ZmZlciBzb2FwRW52ZWxvcGVOYW1lc3BhY2VBdHRyID0gbmV3IFN0cmluZ0J1ZmZlcigieG1sbnM6Iik7Ci0gICAgICBzb2FwRW52ZWxvcGVOYW1lc3BhY2VBdHRyLmFwcGVuZCgoU3RyaW5nKXNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLmdldChzb2FwRW52ZWxvcGVOYW1lc3BhY2VVUkkpKTsKLSAgICAgIHNvYXBFbnZlbG9wZUVsZW1lbnQuc2V0QXR0cmlidXRlKHNvYXBFbnZlbG9wZU5hbWVzcGFjZUF0dHIudG9TdHJpbmcoKSxzb2FwRW52ZWxvcGVOYW1lc3BhY2VVUkkpOyAgICAgIAotICAgIH0gICAgCi0gICAgcmV0dXJuIHNvYXBFbnZlbG9wZUVsZW1lbnQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgRWxlbWVudCBjcmVhdGVTb2FwSGVhZGVyRWxlbWVudChEb2N1bWVudCBkb2MpCi0gIHsKLSAgICByZXR1cm4gZG9jLmNyZWF0ZUVsZW1lbnQoInNvYXBlbnY6SGVhZGVyIik7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgRWxlbWVudCBjcmVhdGVTb2FwQm9keUVsZW1lbnQoRG9jdW1lbnQgZG9jKQotICB7Ci0gICAgcmV0dXJuIGRvYy5jcmVhdGVFbGVtZW50KCJzb2FwZW52OkJvZHkiKTsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBFbGVtZW50IGNyZWF0ZVJQQ1dyYXBwZXJFbGVtZW50KERvY3VtZW50IGRvYyxIYXNodGFibGUgc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUsU3RyaW5nIGVuY29kaW5nTmFtZXNwYWNlVVJJLFN0cmluZyBvcGVyYXRpb25OYW1lLCBTdHJpbmcgZW5jb2RpbmdTdHlsZSkKLSAgewotICAgIGludCBuc0lkID0gMDsKLSAgICBTdHJpbmdCdWZmZXIgd3JhcHBlckVsZW1lbnROYW1lID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIFN0cmluZyBlbmNvZGluZ05hbWVzcGFjZVByZWZpeCA9IChTdHJpbmcpc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUuZ2V0KGVuY29kaW5nTmFtZXNwYWNlVVJJKTsKLSAgICBpZiAoZW5jb2RpbmdOYW1lc3BhY2VQcmVmaXggIT0gbnVsbCkKLSAgICAgIHdyYXBwZXJFbGVtZW50TmFtZS5hcHBlbmQoZW5jb2RpbmdOYW1lc3BhY2VQcmVmaXgpOwotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBMb29wIHVudGlsIHdlIGdlbmVyYXRlIGEgdW5pcXVlIHByZWZpeC4KLSAgICAgIGRvCi0gICAgICB7Ci0gICAgICAgIHdyYXBwZXJFbGVtZW50TmFtZS5zZXRMZW5ndGgoMCk7Ci0gICAgICAgIHdyYXBwZXJFbGVtZW50TmFtZS5hcHBlbmQoIm5zIikuYXBwZW5kKG5zSWQpOwotICAgICAgICBpZiAoIXNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLmNvbnRhaW5zVmFsdWUod3JhcHBlckVsZW1lbnROYW1lLnRvU3RyaW5nKCkpKQotICAgICAgICAgIGJyZWFrOwotICAgICAgICBuc0lkKys7Ci0gICAgICB9IHdoaWxlICh0cnVlKTsKLSAgICAgIAotICAgICAgLy8gbmVlZCB0byBlbnN1cmUgd2hhdGV2ZXIgcHJlZml4IHdlIGNob29zZSBpcyBhZGRlZCB0byB0aGUgbmFtZXNwYWNlIHRhYmxlCi0gICAgICAvLyBzbyB0aGF0IGl0IHdpbGwgbm90IGJlIHJldXNlZCBsYXRlZCBvbgotICAgICAgc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUucHV0KGVuY29kaW5nTmFtZXNwYWNlVVJJLCB3cmFwcGVyRWxlbWVudE5hbWUudG9TdHJpbmcoKSk7Ci0gICAgfSAgICAKLSAgICBTdHJpbmcgd3JhcHBlckVsZW1lbnROYW1lUHJlZml4ID0gd3JhcHBlckVsZW1lbnROYW1lLnRvU3RyaW5nKCk7Ci0gICAgd3JhcHBlckVsZW1lbnROYW1lLmFwcGVuZCgnOicpLmFwcGVuZChvcGVyYXRpb25OYW1lKTsKLSAgICBFbGVtZW50IHdyYXBwZXJFbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQod3JhcHBlckVsZW1lbnROYW1lLnRvU3RyaW5nKCkpOwotICAgIFN0cmluZ0J1ZmZlciBuYW1lc3BhY2VBdHRyTmFtZSA9IG5ldyBTdHJpbmdCdWZmZXIoInhtbG5zOiIpOwotICAgIG5hbWVzcGFjZUF0dHJOYW1lLmFwcGVuZCh3cmFwcGVyRWxlbWVudE5hbWVQcmVmaXgpOwotICAgIHdyYXBwZXJFbGVtZW50LnNldEF0dHJpYnV0ZShuYW1lc3BhY2VBdHRyTmFtZS50b1N0cmluZygpLGVuY29kaW5nTmFtZXNwYWNlVVJJKTsKLSAgICBpZiAoZW5jb2RpbmdTdHlsZSAhPSBudWxsKQotICAgICAgd3JhcHBlckVsZW1lbnQuc2V0QXR0cmlidXRlKCJzb2FwZW52OmVuY29kaW5nU3R5bGUiLGVuY29kaW5nU3R5bGUpOwotICAgIHJldHVybiB3cmFwcGVyRWxlbWVudDsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGVuY29kZU5hbWVzcGFjZURlY2xhcmF0aW9uKFN0cmluZyBwcmVmaXgsIFN0cmluZyB1cmkpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgc2IuYXBwZW5kKHByZWZpeCk7Ci0gICAgc2IuYXBwZW5kKCIgIik7Ci0gICAgc2IuYXBwZW5kKHVyaSk7Ci0gICAgU3RyaW5nIHJlc3VsdCA9IFVSTFV0aWxzLmVuY29kZShzYi50b1N0cmluZygpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBkZWNvZGVOYW1lc3BhY2VEZWNsYXJhdGlvbihTdHJpbmcgcykKLSAgewotICAgIFN0cmluZyBzQ29weSA9IFVSTFV0aWxzLmRlY29kZShzKTsKLSAgICBpbnQgaW5kZXggPSBzQ29weS5pbmRleE9mKCIgIik7Ci0gICAgU3RyaW5nW10gbnNEZWNsID0gbmV3IFN0cmluZ1syXTsKLSAgICBpZiAoaW5kZXggIT0gLTEpCi0gICAgewotICAgICAgbnNEZWNsWzBdID0gc0NvcHkuc3Vic3RyaW5nKDAsIGluZGV4KTsKLSAgICAgIG5zRGVjbFsxXSA9IHNDb3B5LnN1YnN0cmluZyhpbmRleCsxLCBzQ29weS5sZW5ndGgoKSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBuc0RlY2xbMF0gPSBudWxsOwotICAgICAgbnNEZWNsWzFdID0gc0NvcHk7Ci0gICAgfQotICAgIHJldHVybiBuc0RlY2w7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC94c2QvV1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzZGwveHNkL1dTRExQYXJ0c1RvWFNEVHlwZU1hcHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzlkYzQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NkbC94c2QvV1NETFBhcnRzVG9YU0RUeXBlTWFwcGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnhzZDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgamF2YXgud3NkbC5QYXJ0OwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RNb2RlbEdyb3VwRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETmFtZWRDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEVHlwZURlZmluaXRpb247Ci0KLXB1YmxpYyBjbGFzcyBXU0RMUGFydHNUb1hTRFR5cGVNYXBwZXIKLXsKLSAgcHJpdmF0ZSBmaW5hbCBjaGFyIFBPVU5EID0gJyMnOwotICBwcml2YXRlIFZlY3RvciB4c2RTY2hlbWFMaXN0XzsKLSAgcHJpdmF0ZSBIYXNodGFibGUgcGFydFRvWFNEQ2FjaGVfOwotCi0gIHB1YmxpYyBXU0RMUGFydHNUb1hTRFR5cGVNYXBwZXIoKSB7Ci0gICAgeHNkU2NoZW1hTGlzdF8gPSBuZXcgVmVjdG9yKCk7Ci0gICAgcGFydFRvWFNEQ2FjaGVfID0gbmV3IEhhc2h0YWJsZSgpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgYWRkU2NoZW1hcyhWZWN0b3Igc2NoZW1hTGlzdCkgewotICAgIGZvciAoaW50IGk9MDtpPHNjaGVtYUxpc3Quc2l6ZSgpO2krKykgewotICAgICAgT2JqZWN0IHNjaGVtYSA9IHNjaGVtYUxpc3QuZWxlbWVudEF0KGkpOwotICAgICAgaWYgKHNjaGVtYSAhPSBudWxsKQotICAgICAgICB4c2RTY2hlbWFMaXN0Xy5hZGRFbGVtZW50KHNjaGVtYSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIFhTRE5hbWVkQ29tcG9uZW50IGdldFhTRFR5cGUoUGFydCBwYXJ0LCBTdHJpbmcgaWQpIHsKLSAgICBYU0ROYW1lZENvbXBvbmVudCBjb21wb25lbnQgPSBnZXRYU0RUeXBlRnJvbUNhY2hlKGlkKTsKLSAgICBpZiAoY29tcG9uZW50ICE9IG51bGwpCi0gICAgICByZXR1cm4gY29tcG9uZW50OwotICAgIGNvbXBvbmVudCA9IGdldFhTRFR5cGVGcm9tU2NoZW1hKHBhcnQpOwotICAgIGlmIChjb21wb25lbnQgIT0gbnVsbCkKLSAgICAgIGFkZFRvQ2FjaGUoaWQsIGNvbXBvbmVudCk7Ci0gICAgcmV0dXJuIGNvbXBvbmVudDsKLSAgfQotCi0gIHB1YmxpYyBYU0ROYW1lZENvbXBvbmVudCBnZXRYU0RUeXBlRnJvbUNhY2hlKFN0cmluZyBpZCkgewotICAgIHJldHVybiAoWFNETmFtZWRDb21wb25lbnQpcGFydFRvWFNEQ2FjaGVfLmdldChpZCk7Ci0gIH0KLQotICBwdWJsaWMgWFNETmFtZWRDb21wb25lbnQgZ2V0WFNEVHlwZUZyb21TY2hlbWEoUGFydCBwYXJ0KSB7Ci0gICAgYm9vbGVhbiBpc0VsZW1lbnREZWNsYXJhdGlvbiA9IChwYXJ0LmdldFR5cGVOYW1lKCkgPT0gbnVsbCk7Ci0gICAgUU5hbWUgcU5hbWUgPSBpc0VsZW1lbnREZWNsYXJhdGlvbiA/IHBhcnQuZ2V0RWxlbWVudE5hbWUoKSA6IHBhcnQuZ2V0VHlwZU5hbWUoKTsKLSAgICByZXR1cm4gZ2V0WFNEVHlwZUZyb21TY2hlbWEocU5hbWUuZ2V0TmFtZXNwYWNlVVJJKCksIHFOYW1lLmdldExvY2FsUGFydCgpLCBpc0VsZW1lbnREZWNsYXJhdGlvbik7Ci0gIH0KLQotICBwdWJsaWMgWFNETmFtZWRDb21wb25lbnQgZ2V0WFNEVHlwZUZyb21TY2hlbWEoU3RyaW5nIG5hbWVzcGFjZVVSSSwgU3RyaW5nIGxvY2FsTmFtZSwgYm9vbGVhbiBpc0VsZW1lbnREZWNsYXJhdGlvbikgewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgeHNkU2NoZW1hTGlzdF8uc2l6ZSgpOyBpKyspIHsKLSAgICAgIFhTRFNjaGVtYSB4c2RTY2hlbWEgPSAoWFNEU2NoZW1hKXhzZFNjaGVtYUxpc3RfLmVsZW1lbnRBdChpKTsKLSAgICAgIFZlY3RvciBjb21wb25lbnRzID0gbmV3IFZlY3RvcigpOwotICAgICAgaWYgKGlzRWxlbWVudERlY2xhcmF0aW9uKQotICAgICAgICBjb21wb25lbnRzLmFkZEFsbCh4c2RTY2hlbWEuZ2V0RWxlbWVudERlY2xhcmF0aW9ucygpKTsKLSAgICAgIGVsc2UKLSAgICAgICAgY29tcG9uZW50cy5hZGRBbGwoeHNkU2NoZW1hLmdldFR5cGVEZWZpbml0aW9ucygpKTsKLSAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBjb21wb25lbnRzLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTsgKSB7Ci0gICAgICAgIFhTRE5hbWVkQ29tcG9uZW50IGNvbXBvbmVudCAgPSAoWFNETmFtZWRDb21wb25lbnQpaXQubmV4dCgpOwotICAgICAgICBTdHJpbmcgY29tcE5TVVJJID0gY29tcG9uZW50LmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgICAgICBTdHJpbmcgY29tcExvY2FsbmFtZSA9IGNvbXBvbmVudC5nZXROYW1lKCk7Ci0gICAgICAgIGlmIChjb21wTlNVUkkgIT0gbnVsbCAmJiBjb21wTG9jYWxuYW1lICE9IG51bGwgJiYgY29tcE5TVVJJLmVxdWFscyhuYW1lc3BhY2VVUkkpICYmIGNvbXBMb2NhbG5hbWUuZXF1YWxzKGxvY2FsTmFtZSkpCi0gICAgICAgICAgcmV0dXJuIGNvbXBvbmVudDsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgWFNETmFtZWRDb21wb25lbnQgcmVzb2x2ZVhTRE5hbWVkQ29tcG9uZW50KFhTRE5hbWVkQ29tcG9uZW50IGNvbXBvbmVudCkKLSAgewotICAgIGlmIChjb21wb25lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgdXJpID0gY29tcG9uZW50LmdldFVSSSgpOwotICAgICAgU3RyaW5nIHFuYW1lID0gY29tcG9uZW50LmdldFFOYW1lKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHhzZFNjaGVtYUxpc3RfLnNpemUoKTsgaSsrKQotICAgICAgewotICAgICAgICBYU0RTY2hlbWEgeHNkU2NoZW1hID0gKFhTRFNjaGVtYSl4c2RTY2hlbWFMaXN0Xy5lbGVtZW50QXQoaSk7Ci0gICAgICAgIGlmICh4c2RTY2hlbWEgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyB0YXJnZXROUyA9IHhzZFNjaGVtYS5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLSAgICAgICAgICBpZiAodGFyZ2V0TlMgIT0gbnVsbCAmJiB0YXJnZXROUy5lcXVhbHModHJpbVFOYW1lKHVyaSwgcW5hbWUpKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBYU0ROYW1lZENvbXBvbmVudCByZXNvbHZlZENvbXBvbmVudCA9IG51bGw7Ci0gICAgICAgICAgICBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgWFNEVHlwZURlZmluaXRpb24pCi0gICAgICAgICAgICAgIHJlc29sdmVkQ29tcG9uZW50ID0geHNkU2NoZW1hLnJlc29sdmVUeXBlRGVmaW5pdGlvbihxbmFtZSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBYU0RFbGVtZW50RGVjbGFyYXRpb24pCi0gICAgICAgICAgICAgIHJlc29sdmVkQ29tcG9uZW50ID0geHNkU2NoZW1hLnJlc29sdmVFbGVtZW50RGVjbGFyYXRpb24ocW5hbWUpOwotICAgICAgICAgICAgZWxzZSBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgWFNETW9kZWxHcm91cERlZmluaXRpb24pCi0gICAgICAgICAgICAgIHJlc29sdmVkQ29tcG9uZW50ID0geHNkU2NoZW1hLnJlc29sdmVNb2RlbEdyb3VwRGVmaW5pdGlvbihxbmFtZSk7Ci0gICAgICAgICAgICBpZiAoaXNDb21wb25lbnRSZXNvbHZhYmxlKHJlc29sdmVkQ29tcG9uZW50KSkKLSAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVkQ29tcG9uZW50OwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIHRyaW1RTmFtZShTdHJpbmcgdXJpLCBTdHJpbmcgcW5hbWUpCi0gIHsKLSAgICBpbnQgaW5kZXggPSB1cmkuaW5kZXhPZihxbmFtZSk7Ci0gICAgaWYgKGluZGV4ICE9IC0xKQotICAgIHsKLSAgICAgIFN0cmluZyBucyA9IHVyaS5zdWJzdHJpbmcoMCwgaW5kZXgpOwotICAgICAgaWYgKG5zLmNoYXJBdChpbmRleC0xKSA9PSBQT1VORCkKLSAgICAgICAgcmV0dXJuIG5zLnN1YnN0cmluZygwLCBpbmRleC0xKTsKLSAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIG5zOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gdXJpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGFkZFRvQ2FjaGUoU3RyaW5nIGlkLCBYU0ROYW1lZENvbXBvbmVudCBjb21wb25lbnQpIHsKLSAgICBwYXJ0VG9YU0RDYWNoZV8ucHV0KGlkLGNvbXBvbmVudCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc0NvbXBvbmVudFJlc29sdmFibGUoWFNEQ29tcG9uZW50IGNvbXBvbmVudCkKLSAgewotICAgIGlmIChjb21wb25lbnQgPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gY29tcG9uZW50LmdldFNjaGVtYSgpOwotICAgIGlmIChzY2hlbWEgPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoc2NoZW1hLmdldFRhcmdldE5hbWVzcGFjZSgpID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL0FkZEJ1c2luZXNzVG9GYXZvcml0ZXNBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL0FkZEJ1c2luZXNzVG9GYXZvcml0ZXNBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWI2ZDZmOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9BZGRCdXNpbmVzc1RvRmF2b3JpdGVzQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS50cmFuc2Zvcm1lci5JVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuRmF2b3JpdGVzTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLldzaWxNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuV3NpbEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLldzaWxVZGRpQnVzaW5lc3NFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLldTSUxQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC50cmFuc2Zvcm1lci5XU0lMVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyOwotCi1wdWJsaWMgY2xhc3MgQWRkQnVzaW5lc3NUb0Zhdm9yaXRlc0FjdGlvbiBleHRlbmRzIEFkZFRvRmF2b3JpdGVzQWN0aW9uCi17Ci0gIHB1YmxpYyBBZGRCdXNpbmVzc1RvRmF2b3JpdGVzQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZmF2b3JpdGVFeGlzdHMoKQotICB7Ci0gICAgaW50IG5vZGVJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZykgcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBpbnQgdmlld0lEID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKSBwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLlZJRVdJRCkpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXJfLmdldE5vZGUobm9kZUlEKTsKLSAgICBXc2lsRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSAoV3NpbEVsZW1lbnQpIHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIE9iamVjdCBvYmogPSBzZWxlY3RlZEVsZW1lbnQuZ2V0QWxsVURESUxpbmtzKCkuZ2V0RWxlbWVudFdpdGhWaWV3SWQodmlld0lEKS5nZXRPYmplY3QoKTsKLSAgICBXc2lsVWRkaUJ1c2luZXNzRWxlbWVudCB3c2lsVWRkaUJ1c2luZXNzRWxlbWVudCA9IChXc2lsVWRkaUJ1c2luZXNzRWxlbWVudCkgb2JqOwotICAgIFN0cmluZyBidXNpbmVzc05hbWUgPSB3c2lsVWRkaUJ1c2luZXNzRWxlbWVudC5nZXROYW1lKCk7Ci0gICAgU3RyaW5nIGlucXVpcnlBUEkgPSB3c2lsVWRkaUJ1c2luZXNzRWxlbWVudC5nZXRVRERJTGlua0lucXVpcnlBUEkoKTsKLSAgICBTdHJpbmcgYnVzaW5lc3NLZXkgPSB3c2lsVWRkaUJ1c2luZXNzRWxlbWVudC5nZXRVRERJTGlua0J1c2luZXNzS2V5KCk7Ci0gICAgaWYgKGJ1c2luZXNzTmFtZSA9PSBudWxsKQotICAgICAgYnVzaW5lc3NOYW1lID0gYnVzaW5lc3NLZXk7Ci0gICAgSGFzaHRhYmxlIHRhYmxlID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIHRhYmxlLnB1dChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfQlVTSU5FU1NfTkFNRSwgYnVzaW5lc3NOYW1lKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX0JVU0lORVNTX0lOUVVJUllfQVBJLCBpbnF1aXJ5QVBJKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX0JVU0lORVNTX0tFWSwgYnVzaW5lc3NLZXkpOwotICAgIHJldHVybiBmYXZvcml0ZUV4aXN0cyh0YWJsZSwgRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1VERElfQlVTSU5FU1NfRk9MREVSX05PREUpOwotICB9Ci0KLSAgcHVibGljIElUcmFuc2Zvcm1lcltdIGdldFRyYW5zZm9ybWVycygpCi0gIHsKLSAgICBJVHJhbnNmb3JtZXJbXSBwYXJlbnRUcmFuc2Zvcm1lcnMgPSBzdXBlci5nZXRUcmFuc2Zvcm1lcnMoKTsKLSAgICBJVHJhbnNmb3JtZXJbXSB0cmFuc2Zvcm1lcnMgPSBuZXcgSVRyYW5zZm9ybWVyW3BhcmVudFRyYW5zZm9ybWVycy5sZW5ndGgrMV07Ci0gICAgU3lzdGVtLmFycmF5Y29weShwYXJlbnRUcmFuc2Zvcm1lcnMsIDAsIHRyYW5zZm9ybWVycywgMCwgcGFyZW50VHJhbnNmb3JtZXJzLmxlbmd0aCk7Ci0gICAgdHJhbnNmb3JtZXJzW3RyYW5zZm9ybWVycy5sZW5ndGgtMV0gPSBuZXcgV1NJTFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lcihjb250cm9sbGVyXywgV3NpbE1vZGVsQ29uc3RhbnRzLkxJU1RfTUFOQUdFUl9VRERJX0xJTktTLCBBY3Rpb25JbnB1dHMuVklFV0lELCBXU0lMVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyLlVERElfQlVTSU5FU1MpOwotICAgIHJldHVybiB0cmFuc2Zvcm1lcnM7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBleGVjdXRlU2luZ2xlTGlua0FjdGlvbigpCi0gIHsKLSAgICBpbnQgbm9kZUlEID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKSBwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgIGludCB2aWV3SUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpIHByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuVklFV0lEKSk7Ci0gICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXJfLmdldE5vZGUobm9kZUlEKTsKLSAgICBXc2lsRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSAoV3NpbEVsZW1lbnQpIHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIE9iamVjdCBvYmogPSBzZWxlY3RlZEVsZW1lbnQuZ2V0QWxsVURESUxpbmtzKCkuZ2V0RWxlbWVudFdpdGhWaWV3SWQodmlld0lEKS5nZXRPYmplY3QoKTsKLSAgICBXc2lsVWRkaUJ1c2luZXNzRWxlbWVudCB3c2lsVWRkaUJ1c2luZXNzRWxlbWVudCA9IChXc2lsVWRkaUJ1c2luZXNzRWxlbWVudCkgb2JqOwotICAgIFN0cmluZyBidXNpbmVzc05hbWUgPSB3c2lsVWRkaUJ1c2luZXNzRWxlbWVudC5nZXROYW1lKCk7Ci0gICAgU3RyaW5nIGlucXVpcnlBUEkgPSB3c2lsVWRkaUJ1c2luZXNzRWxlbWVudC5nZXRVRERJTGlua0lucXVpcnlBUEkoKTsKLSAgICBTdHJpbmcgYnVzaW5lc3NLZXkgPSB3c2lsVWRkaUJ1c2luZXNzRWxlbWVudC5nZXRVRERJTGlua0J1c2luZXNzS2V5KCk7Ci0gICAgaWYgKGJ1c2luZXNzTmFtZSA9PSBudWxsKQotICAgICAgYnVzaW5lc3NOYW1lID0gYnVzaW5lc3NLZXk7Ci0gICAgSGFzaHRhYmxlIHRhYmxlID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIHRhYmxlLnB1dChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfQlVTSU5FU1NfTkFNRSwgYnVzaW5lc3NOYW1lKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX0JVU0lORVNTX0lOUVVJUllfQVBJLCBpbnF1aXJ5QVBJKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX0JVU0lORVNTX0tFWSwgYnVzaW5lc3NLZXkpOwotICAgIGlmIChpc011bHRpcGxlTGlua0FjdGlvbigpICYmIGZhdm9yaXRlRXhpc3RzKHRhYmxlLCBGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9CVVNJTkVTU19GT0xERVJfTk9ERSkpCi0gICAgewotICAgICAgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2Uod3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9GQVZPUklURVNfQUxSRUFEWV9FWElTVFMiLCBidXNpbmVzc05hbWUpKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKGFkZFRvRmF2b3JpdGVzKHRhYmxlLCBGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9CVVNJTkVTU19GT0xERVJfTk9ERSkpCi0gICAgewotICAgICAgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2Uod3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX0FERF9UT19GQVZPUklURVNfU1VDQ0VTU0ZVTCIsIGJ1c2luZXNzTmFtZSkpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuYWRkTWVzc2FnZSh3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0FERF9UT19GQVZPUklURVMiLCBidXNpbmVzc05hbWUpKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL0FkZEJ1c2luZXNzVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL0FkZEJ1c2luZXNzVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjg1NTEyNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9BZGRCdXNpbmVzc1RvVURESVBlcnNwZWN0aXZlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUudHJhbnNmb3JtZXIuSVRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuUmVnRmluZEJ1c2luZXNzVVVJREFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuVURESUFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuV3NpbE1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC5Xc2lsRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuV3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuV1NJTFBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnRyYW5zZm9ybWVyLldTSUxWaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXI7Ci0KLXB1YmxpYyBjbGFzcyBBZGRCdXNpbmVzc1RvVURESVBlcnNwZWN0aXZlQWN0aW9uIGV4dGVuZHMgQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24KLXsKLSAgcHVibGljIEFkZEJ1c2luZXNzVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwdWJsaWMgSVRyYW5zZm9ybWVyW10gZ2V0VHJhbnNmb3JtZXJzKCkKLSAgewotICAgIElUcmFuc2Zvcm1lcltdIHBhcmVudFRyYW5zZm9ybWVycyA9IHN1cGVyLmdldFRyYW5zZm9ybWVycygpOwotICAgIElUcmFuc2Zvcm1lcltdIHRyYW5zZm9ybWVycyA9IG5ldyBJVHJhbnNmb3JtZXJbcGFyZW50VHJhbnNmb3JtZXJzLmxlbmd0aCsxXTsKLSAgICBTeXN0ZW0uYXJyYXljb3B5KHBhcmVudFRyYW5zZm9ybWVycywgMCwgdHJhbnNmb3JtZXJzLCAwLCBwYXJlbnRUcmFuc2Zvcm1lcnMubGVuZ3RoKTsKLSAgICB0cmFuc2Zvcm1lcnNbdHJhbnNmb3JtZXJzLmxlbmd0aC0xXSA9IG5ldyBXU0lMVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyKGNvbnRyb2xsZXJfLCBXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1VERElfTElOS1MsIEFjdGlvbklucHV0cy5WSUVXSUQsIFdTSUxWaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXIuVURESV9CVVNJTkVTUyk7Ci0gICAgcmV0dXJuIHRyYW5zZm9ybWVyczsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGV4ZWN1dGVTaW5nbGVMaW5rQWN0aW9uKCkKLSAgewotICAgIGludCBub2RlSUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpIHByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgaW50IHZpZXdJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZykgcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5WSUVXSUQpKTsKLSAgICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKG5vZGVJRCk7Ci0gICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgU3RyaW5nIGlucXVpcnlVUkwgPSBudWxsOwotICAgIFN0cmluZyBidXNpbmVzc0tleSA9IG51bGw7Ci0gICAgU3RyaW5nIGJ1c2luZXNzTmFtZSA9IG51bGw7Ci0gICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIFdzaWxFbGVtZW50KQotICAgIHsKLSAgICAgIExpc3RFbGVtZW50IGxlID0gKChXc2lsRWxlbWVudCkgc2VsZWN0ZWRFbGVtZW50KS5nZXRBbGxVRERJTGlua3MoKS5nZXRFbGVtZW50V2l0aFZpZXdJZCh2aWV3SUQpOwotICAgICAgV3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQgd3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQgPSAoV3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQpIGxlLmdldE9iamVjdCgpOwotICAgICAgaW5xdWlyeVVSTCA9IHdzaWxVZGRpQnVzaW5lc3NFbGVtZW50LmdldFVERElMaW5rSW5xdWlyeUFQSSgpOwotICAgICAgYnVzaW5lc3NLZXkgPSB3c2lsVWRkaUJ1c2luZXNzRWxlbWVudC5nZXRVRERJTGlua0J1c2luZXNzS2V5KCk7Ci0gICAgICBidXNpbmVzc05hbWUgPSB3c2lsVWRkaUJ1c2luZXNzRWxlbWVudC5nZXROYW1lKCk7Ci0gICAgICBpZiAoYnVzaW5lc3NOYW1lID09IG51bGwpCi0gICAgICAgIGJ1c2luZXNzTmFtZSA9IGJ1c2luZXNzS2V5OwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgLy8gcmV0dXJuIGZhbHNlIGlmIHVuYWJsZSB0byBmaW5kIG9yIGNyZWF0ZSBhIHJlZ2lzdHJ5IG5vZGUvZWxlbWVudCBpbiB0aGUKLSAgICAvLyBVRERJIHBlcnNwZWN0aXZlCi0gICAgaWYgKCFjcmVhdGVSZWdpc3RyeUluVURESVBlcnNwZWN0aXZlKGlucXVpcnlVUkwsIG51bGwsIGlucXVpcnlVUkwpKQotICAgIHsKLSAgICAgIHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfQUREX1RPX1VERElfUEVSU1BFQ1RJVkUiLCBidXNpbmVzc05hbWUpKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgLy8gcHJlcGFyZSB0aGUgYWN0aW9uCi0gICAgUmVnRmluZEJ1c2luZXNzVVVJREFjdGlvbiBhY3Rpb24gPSBuZXcgUmVnRmluZEJ1c2luZXNzVVVJREFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgLy8gcG9wdWxhdGUgcHJvcGVydHkgdGFibGUKLSAgICBIYXNodGFibGUgcHJvcGVydHlUYWJsZSA9IGFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX0JVU0lORVNTX0tFWSwgYnVzaW5lc3NLZXkpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfTkFNRSwgYnVzaW5lc3NOYW1lKTsKLSAgICAvLyBydW4gdGhlIGFjdGlvbgotICAgIGlmICghYWN0aW9uLnJ1bigpKQotICAgIHsKLSAgICAgIHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfQlVTSU5FU1NfTk9UX0ZPVU5EIiwgYnVzaW5lc3NOYW1lKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuYWRkTWVzc2FnZSh3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fQUREX1RPX1VERElfUEVSU1BFQ1RJVkVfU1VDQ0VTU0ZVTCIsIGJ1c2luZXNzTmFtZSkpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9BZGRTZXJ2aWNlVG9GYXZvcml0ZXNBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL0FkZFNlcnZpY2VUb0Zhdm9yaXRlc0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZmU1ZjJhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL0FkZFNlcnZpY2VUb0Zhdm9yaXRlc0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUudHJhbnNmb3JtZXIuSVRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLkZhdm9yaXRlc01vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy5Xc2lsTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLldzaWxFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC5Xc2lsVWRkaVNlcnZpY2VFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLldTSUxQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC50cmFuc2Zvcm1lci5XU0lMVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyOwotCi1wdWJsaWMgY2xhc3MgQWRkU2VydmljZVRvRmF2b3JpdGVzQWN0aW9uIGV4dGVuZHMgQWRkVG9GYXZvcml0ZXNBY3Rpb24KLXsKLSAgcHVibGljIEFkZFNlcnZpY2VUb0Zhdm9yaXRlc0FjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGZhdm9yaXRlRXhpc3RzKCkKLSAgewotICAgIGludCBub2RlSUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpIHByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgaW50IHZpZXdJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZykgcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5WSUVXSUQpKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyXy5nZXROb2RlKG5vZGVJRCk7Ci0gICAgV3NpbEVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gKFdzaWxFbGVtZW50KSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBPYmplY3Qgb2JqID0gc2VsZWN0ZWRFbGVtZW50LmdldEFsbFVERElTZXJ2aWNlcygpLmdldEVsZW1lbnRXaXRoVmlld0lkKHZpZXdJRCkuZ2V0T2JqZWN0KCk7Ci0gICAgV3NpbFVkZGlTZXJ2aWNlRWxlbWVudCB3c2lsVWRkaVNlcnZpY2VFbGVtZW50ID0gKFdzaWxVZGRpU2VydmljZUVsZW1lbnQpIG9iajsKLSAgICBTdHJpbmcgc2VydmljZU5hbWUgPSB3c2lsVWRkaVNlcnZpY2VFbGVtZW50LmdldE5hbWUoKTsKLSAgICBTdHJpbmcgaW5xdWlyeUFQSSA9IHdzaWxVZGRpU2VydmljZUVsZW1lbnQuZ2V0VURESVNlcnZpY2VJbnF1aXJ5QVBJKCk7Ci0gICAgU3RyaW5nIHNlcnZpY2VLZXkgPSB3c2lsVWRkaVNlcnZpY2VFbGVtZW50LmdldFVERElTZXJ2aWNlS2V5KCk7Ci0gICAgaWYgKHNlcnZpY2VOYW1lID09IG51bGwpCi0gICAgICBzZXJ2aWNlTmFtZSA9IHNlcnZpY2VLZXk7Ci0gICAgSGFzaHRhYmxlIHRhYmxlID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIHRhYmxlLnB1dChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfU0VSVklDRV9OQU1FLCBzZXJ2aWNlTmFtZSk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9TRVJWSUNFX0lOUVVJUllfQVBJLCBpbnF1aXJ5QVBJKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1NFUlZJQ0VfS0VZLCBzZXJ2aWNlS2V5KTsKLSAgICByZXR1cm4gZmF2b3JpdGVFeGlzdHModGFibGUsIEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1NFUlZJQ0VfRk9MREVSX05PREUpOwotICB9Ci0KLSAgcHVibGljIElUcmFuc2Zvcm1lcltdIGdldFRyYW5zZm9ybWVycygpCi0gIHsKLSAgICBJVHJhbnNmb3JtZXJbXSBwYXJlbnRUcmFuc2Zvcm1lcnMgPSBzdXBlci5nZXRUcmFuc2Zvcm1lcnMoKTsKLSAgICBJVHJhbnNmb3JtZXJbXSB0cmFuc2Zvcm1lcnMgPSBuZXcgSVRyYW5zZm9ybWVyW3BhcmVudFRyYW5zZm9ybWVycy5sZW5ndGgrMV07Ci0gICAgU3lzdGVtLmFycmF5Y29weShwYXJlbnRUcmFuc2Zvcm1lcnMsIDAsIHRyYW5zZm9ybWVycywgMCwgcGFyZW50VHJhbnNmb3JtZXJzLmxlbmd0aCk7Ci0gICAgdHJhbnNmb3JtZXJzW3RyYW5zZm9ybWVycy5sZW5ndGgtMV0gPSBuZXcgV1NJTFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lcihjb250cm9sbGVyXywgV3NpbE1vZGVsQ29uc3RhbnRzLkxJU1RfTUFOQUdFUl9VRERJX1NFUlZJQ0VTLCBBY3Rpb25JbnB1dHMuVklFV0lELCBXU0lMVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyLlVERElfU0VSVklDRSk7Ci0gICAgcmV0dXJuIHRyYW5zZm9ybWVyczsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGV4ZWN1dGVTaW5nbGVMaW5rQWN0aW9uKCkKLSAgewotICAgIGludCBub2RlSUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpIHByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgaW50IHZpZXdJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZykgcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5WSUVXSUQpKTsKLSAgICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlcl8uZ2V0Tm9kZShub2RlSUQpOwotICAgIFdzaWxFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IChXc2lsRWxlbWVudCkgc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgT2JqZWN0IG9iaiA9IHNlbGVjdGVkRWxlbWVudC5nZXRBbGxVRERJU2VydmljZXMoKS5nZXRFbGVtZW50V2l0aFZpZXdJZCh2aWV3SUQpLmdldE9iamVjdCgpOwotICAgIFdzaWxVZGRpU2VydmljZUVsZW1lbnQgd3NpbFVkZGlTZXJ2aWNlRWxlbWVudCA9IChXc2lsVWRkaVNlcnZpY2VFbGVtZW50KSBvYmo7Ci0gICAgU3RyaW5nIHNlcnZpY2VOYW1lID0gd3NpbFVkZGlTZXJ2aWNlRWxlbWVudC5nZXROYW1lKCk7Ci0gICAgU3RyaW5nIGlucXVpcnlBUEkgPSB3c2lsVWRkaVNlcnZpY2VFbGVtZW50LmdldFVERElTZXJ2aWNlSW5xdWlyeUFQSSgpOwotICAgIFN0cmluZyBzZXJ2aWNlS2V5ID0gd3NpbFVkZGlTZXJ2aWNlRWxlbWVudC5nZXRVRERJU2VydmljZUtleSgpOwotICAgIGlmIChzZXJ2aWNlTmFtZSA9PSBudWxsKQotICAgICAgc2VydmljZU5hbWUgPSBzZXJ2aWNlS2V5OwotICAgIEhhc2h0YWJsZSB0YWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9VRERJX1NFUlZJQ0VfTkFNRSwgc2VydmljZU5hbWUpOwotICAgIHRhYmxlLnB1dChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1VERElfU0VSVklDRV9JTlFVSVJZX0FQSSwgaW5xdWlyeUFQSSk7Ci0gICAgdGFibGUucHV0KEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlBST1BfVURESV9TRVJWSUNFX0tFWSwgc2VydmljZUtleSk7Ci0gICAgaWYgKGlzTXVsdGlwbGVMaW5rQWN0aW9uKCkgJiYgZmF2b3JpdGVFeGlzdHModGFibGUsIEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9VRERJX1NFUlZJQ0VfRk9MREVSX05PREUpKQotICAgIHsKLSAgICAgIHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfRkFWT1JJVEVTX0FMUkVBRFlfRVhJU1RTIiwgc2VydmljZU5hbWUpKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKGFkZFRvRmF2b3JpdGVzKHRhYmxlLCBGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfVURESV9TRVJWSUNFX0ZPTERFUl9OT0RFKSkKLSAgICB7Ci0gICAgICB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuYWRkTWVzc2FnZSh3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fQUREX1RPX0ZBVk9SSVRFU19TVUNDRVNTRlVMIiwgc2VydmljZU5hbWUpKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2Uod3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9BRERfVE9fRkFWT1JJVEVTIiwgc2VydmljZU5hbWUpKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL0FkZFNlcnZpY2VUb1VERElQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvQWRkU2VydmljZVRvVURESVBlcnNwZWN0aXZlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiODZkYzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvQWRkU2VydmljZVRvVURESVBlcnNwZWN0aXZlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUudHJhbnNmb3JtZXIuSVRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuUmVnRmluZFNlcnZpY2VVVUlEQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy5Xc2lsTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLldzaWxFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC5Xc2lsVWRkaVNlcnZpY2VFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLldTSUxQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC50cmFuc2Zvcm1lci5XU0lMVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyOwotCi1wdWJsaWMgY2xhc3MgQWRkU2VydmljZVRvVURESVBlcnNwZWN0aXZlQWN0aW9uIGV4dGVuZHMgQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24KLXsKLSAgcHVibGljIEFkZFNlcnZpY2VUb1VERElQZXJzcGVjdGl2ZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHB1YmxpYyBJVHJhbnNmb3JtZXJbXSBnZXRUcmFuc2Zvcm1lcnMoKQotICB7Ci0gICAgSVRyYW5zZm9ybWVyW10gcGFyZW50VHJhbnNmb3JtZXJzID0gc3VwZXIuZ2V0VHJhbnNmb3JtZXJzKCk7Ci0gICAgSVRyYW5zZm9ybWVyW10gdHJhbnNmb3JtZXJzID0gbmV3IElUcmFuc2Zvcm1lcltwYXJlbnRUcmFuc2Zvcm1lcnMubGVuZ3RoKzFdOwotICAgIFN5c3RlbS5hcnJheWNvcHkocGFyZW50VHJhbnNmb3JtZXJzLCAwLCB0cmFuc2Zvcm1lcnMsIDAsIHBhcmVudFRyYW5zZm9ybWVycy5sZW5ndGgpOwotICAgIHRyYW5zZm9ybWVyc1t0cmFuc2Zvcm1lcnMubGVuZ3RoLTFdID0gbmV3IFdTSUxWaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXIoY29udHJvbGxlcl8sIFdzaWxNb2RlbENvbnN0YW50cy5MSVNUX01BTkFHRVJfVURESV9TRVJWSUNFUywgQWN0aW9uSW5wdXRzLlZJRVdJRCwgV1NJTFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lci5VRERJX1NFUlZJQ0UpOwotICAgIHJldHVybiB0cmFuc2Zvcm1lcnM7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBleGVjdXRlU2luZ2xlTGlua0FjdGlvbigpCi0gIHsKLSAgICBpbnQgbm9kZUlEID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKSBwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgIGludCB2aWV3SUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpIHByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuVklFV0lEKSk7Ci0gICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gd3NpbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShub2RlSUQpOwotICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIFN0cmluZyBpbnF1aXJ5VVJMID0gbnVsbDsKLSAgICBTdHJpbmcgc2VydmljZUtleSA9IG51bGw7Ci0gICAgU3RyaW5nIHNlcnZpY2VOYW1lID0gbnVsbDsKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgV3NpbEVsZW1lbnQpCi0gICAgewotICAgICAgTGlzdEVsZW1lbnQgbGUgPSAoKFdzaWxFbGVtZW50KSBzZWxlY3RlZEVsZW1lbnQpLmdldEFsbFVERElTZXJ2aWNlcygpLmdldEVsZW1lbnRXaXRoVmlld0lkKHZpZXdJRCk7Ci0gICAgICBXc2lsVWRkaVNlcnZpY2VFbGVtZW50IHdzaWxVZGRpU2VydmljZUVsZW1lbnQgPSAoV3NpbFVkZGlTZXJ2aWNlRWxlbWVudCkgbGUuZ2V0T2JqZWN0KCk7Ci0gICAgICBpbnF1aXJ5VVJMID0gd3NpbFVkZGlTZXJ2aWNlRWxlbWVudC5nZXRVRERJU2VydmljZUlucXVpcnlBUEkoKTsKLSAgICAgIHNlcnZpY2VLZXkgPSB3c2lsVWRkaVNlcnZpY2VFbGVtZW50LmdldFVERElTZXJ2aWNlS2V5KCk7Ci0gICAgICBzZXJ2aWNlTmFtZSA9IHdzaWxVZGRpU2VydmljZUVsZW1lbnQuZ2V0TmFtZSgpOwotICAgICAgaWYgKHNlcnZpY2VOYW1lID09IG51bGwpCi0gICAgICAgIHNlcnZpY2VOYW1lID0gc2VydmljZUtleTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8vIHJldHVybiBmYWxzZSBpZiB1bmFibGUgdG8gZmluZCBvciBjcmVhdGUgYSByZWdpc3RyeSBub2RlL2VsZW1lbnQgaW4gdGhlCi0gICAgLy8gVURESSBwZXJzcGVjdGl2ZQotICAgIGlmICghY3JlYXRlUmVnaXN0cnlJblVERElQZXJzcGVjdGl2ZShpbnF1aXJ5VVJMLCBudWxsLCBpbnF1aXJ5VVJMKSkKLSAgICB7Ci0gICAgICB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuYWRkTWVzc2FnZSh3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0FERF9UT19VRERJX1BFUlNQRUNUSVZFIiwgc2VydmljZU5hbWUpKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgLy8gcHJlcGFyZSB0aGUgYWN0aW9uCi0gICAgUmVnRmluZFNlcnZpY2VVVUlEQWN0aW9uIGFjdGlvbiA9IG5ldyBSZWdGaW5kU2VydmljZVVVSURBY3Rpb24oY29udHJvbGxlcl8pOwotICAgIC8vIHBvcHVsYXRlIHByb3BlcnR5IHRhYmxlCi0gICAgSGFzaHRhYmxlIHByb3BlcnR5VGFibGUgPSBhY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotICAgIHByb3BlcnR5VGFibGUucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9TRVJWSUNFX0tFWSwgc2VydmljZUtleSk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9OQU1FLCBzZXJ2aWNlTmFtZSk7Ci0gICAgLy8gcnVuIHRoZSBhY3Rpb24KLSAgICBpZiAoIWFjdGlvbi5ydW4oKSkKLSAgICB7Ci0gICAgICB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuYWRkTWVzc2FnZSh3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1NFUlZJQ0VfTk9UX0ZPVU5EIiwgc2VydmljZU5hbWUpKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19BRERfVE9fVURESV9QRVJTUEVDVElWRV9TVUNDRVNTRlVMIiwgc2VydmljZU5hbWUpKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvQWRkVG9GYXZvcml0ZXNBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL0FkZFRvRmF2b3JpdGVzQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0OGIyOTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvQWRkVG9GYXZvcml0ZXNBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLkZhdm9yaXRlc0ZvbGRlckVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS5GYXZvcml0ZXNQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuTGlzdFVERElCdXNpbmVzc1Rvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuTGlzdFVERElTZXJ2aWNlc1Rvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuTGlzdFdTRExTZXJ2aWNlc1Rvb2w7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBZGRUb0Zhdm9yaXRlc0FjdGlvbiBleHRlbmRzIE11bHRpcGxlTGlua0FjdGlvbiB7Ci0gICAgcHJvdGVjdGVkIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyXzsKLQotICAgIHB1YmxpYyBBZGRUb0Zhdm9yaXRlc0FjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gICAgewotICAgICAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICAgICAgbm9kZU1hbmFnZXJfID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJRCwgaW50IHRvb2xJRCwgaW50IHZpZXdJRCwgaW50IHZpZXdUb29sSUQpCi0gICAgewotICAgICAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoIndzaWwvYWN0aW9ucy9Xc2lsQ2hlY2tGYXZvcml0ZUV4aXN0c0FjdGlvbkpTUC5qc3A/Iik7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChub2RlSUQpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVE9PTElEKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQodG9vbElEKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdJRCk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKHZpZXdJRCk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5WSUVXVE9PTElEKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQodmlld1Rvb2xJRCk7Ci0gICAgICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QmFzZUFjdGlvbkxpbmsoKSB7Ci0gICAgICAgIHJldHVybiAid3NpbC9hY3Rpb25zL1dzaWxDaGVja0Zhdm9yaXRlRXhpc3RzQWN0aW9uSlNQLmpzcCI7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBBZGRUb0Zhdm9yaXRlc0FjdGlvbiBuZXdBY3Rpb24oSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIENvbnRyb2xsZXIgY29udHJvbGxlcikgewotICAgICAgU3RyaW5nIG5vZGVJRCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBjb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgICBUb29sIHNlbGVjdGVkVG9vbCA9IG5vZGVNYW5hZ2VyLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQpKS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpOwotICAgICAgaWYgKHNlbGVjdGVkVG9vbCBpbnN0YW5jZW9mIExpc3RXU0RMU2VydmljZXNUb29sKQotICAgICAgICByZXR1cm4gbmV3IEFkZFdTRExTZXJ2aWNlVG9GYXZvcml0ZXNBY3Rpb24oY29udHJvbGxlcik7Ci0gICAgICBlbHNlIGlmIChzZWxlY3RlZFRvb2wgaW5zdGFuY2VvZiBMaXN0VURESVNlcnZpY2VzVG9vbCkKLSAgICAgICAgcmV0dXJuIG5ldyBBZGRTZXJ2aWNlVG9GYXZvcml0ZXNBY3Rpb24oY29udHJvbGxlcik7Ci0gICAgICBlbHNlIGlmIChzZWxlY3RlZFRvb2wgaW5zdGFuY2VvZiBMaXN0VURESUJ1c2luZXNzVG9vbCkKLSAgICAgICAgcmV0dXJuIG5ldyBBZGRCdXNpbmVzc1RvRmF2b3JpdGVzQWN0aW9uKGNvbnRyb2xsZXIpOwotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gbmV3IEFkZFdTSUxUb0Zhdm9yaXRlc0FjdGlvbihjb250cm9sbGVyKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgYm9vbGVhbiBhZGRUb0Zhdm9yaXRlcyhIYXNodGFibGUgdGFibGUsIFN0cmluZyByZWwpIHsKLSAgICAgICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgICAgICBOb2RlTWFuYWdlciBmYXZOb2RlTWFuYWdlciA9IGZhdlBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgICAgIFRyZWVFbGVtZW50IGZhdlJvb3RFbGVtZW50ID0gZmF2Tm9kZU1hbmFnZXIuZ2V0Um9vdE5vZGUoKS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgICBFbnVtZXJhdGlvbiBlID0gZmF2Um9vdEVsZW1lbnQuZ2V0RWxlbWVudHMocmVsKTsKLSAgICAgICAgaWYgKCFlLmhhc01vcmVFbGVtZW50cygpKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgIEZhdm9yaXRlc0ZvbGRlckVsZW1lbnQgZmF2Rm9sZGVyRWxlbWVudCA9IChGYXZvcml0ZXNGb2xkZXJFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgcmV0dXJuIGZhdkZvbGRlckVsZW1lbnQuYWRkRmF2b3JpdGUodGFibGUpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBib29sZWFuIGZhdm9yaXRlRXhpc3RzKEhhc2h0YWJsZSB0YWJsZSwgU3RyaW5nIHJlbCkgewotICAgICAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgICAgIE5vZGVNYW5hZ2VyIGZhdk5vZGVNYW5hZ2VyID0gZmF2UGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICAgICAgVHJlZUVsZW1lbnQgZmF2Um9vdEVsZW1lbnQgPSBmYXZOb2RlTWFuYWdlci5nZXRSb290Tm9kZSgpLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICAgIEVudW1lcmF0aW9uIGUgPSBmYXZSb290RWxlbWVudC5nZXRFbGVtZW50cyhyZWwpOwotICAgICAgICBpZiAoIWUuaGFzTW9yZUVsZW1lbnRzKCkpIHJldHVybiBmYWxzZTsKLSAgICAgICAgRmF2b3JpdGVzRm9sZGVyRWxlbWVudCBmYXZGb2xkZXJFbGVtZW50ID0gKEZhdm9yaXRlc0ZvbGRlckVsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgICAgICByZXR1cm4gZmF2Rm9sZGVyRWxlbWVudC5mYXZvcml0ZUV4aXN0cyh0YWJsZSk7Ci0gICAgfQotCi0gICAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gZmF2b3JpdGVFeGlzdHMoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL0FkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9BZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDAxNzExLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL0FkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuT3BlblJlZ2lzdHJ5QWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy5VRERJQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuUmVnaXN0cnlOb2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlVERElNYWluTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5WYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuTGlzdFVERElCdXNpbmVzc1Rvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuTGlzdFVERElTZXJ2aWNlc1Rvb2w7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbiBleHRlbmRzIE11bHRpcGxlTGlua0FjdGlvbgotewotICBwdWJsaWMgQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSUQsIGludCB0b29sSUQsIGludCB2aWV3SUQsIGludCB2aWV3VG9vbElEKQotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ3c2lsL2FjdGlvbnMvV3NpbEFkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uSlNQLmpzcD8iKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKG5vZGVJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVE9PTElEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKHRvb2xJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVklFV0lEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKHZpZXdJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVklFV1RPT0xJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCh2aWV3VG9vbElEKTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QmFzZUFjdGlvbkxpbmsoKQotICB7Ci0gICAgcmV0dXJuICJ3c2lsL2FjdGlvbnMvV3NpbEFkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uSlNQLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIEFjdGlvbiBuZXdBY3Rpb24oSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIFN0cmluZyBub2RlSUQgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCkuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBUb29sIHNlbGVjdGVkVG9vbCA9IG5vZGVNYW5hZ2VyLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQpKS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpOwotICAgIGlmIChzZWxlY3RlZFRvb2wgaW5zdGFuY2VvZiBMaXN0VURESVNlcnZpY2VzVG9vbCkKLSAgICAgIHJldHVybiBuZXcgQWRkU2VydmljZVRvVURESVBlcnNwZWN0aXZlQWN0aW9uKGNvbnRyb2xsZXIpOwotICAgIGVsc2UgaWYgKHNlbGVjdGVkVG9vbCBpbnN0YW5jZW9mIExpc3RVRERJQnVzaW5lc3NUb29sKQotICAgICAgcmV0dXJuIG5ldyBBZGRCdXNpbmVzc1RvVURESVBlcnNwZWN0aXZlQWN0aW9uKGNvbnRyb2xsZXIpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBuZXcgTnVsbEFjdGlvbigpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gY3JlYXRlUmVnaXN0cnlJblVERElQZXJzcGVjdGl2ZShTdHJpbmcgaW5xdWlyeUFQSSwgU3RyaW5nIHB1Ymxpc2hBUEksIFN0cmluZyByZWdpc3RyeU5hbWUpCi0gIHsKLSAgICBWZWN0b3IgcmVnaXN0cnlOb2RlcyA9IGdldFJlZ2lzdHJ5Tm9kZXNCeUlucXVpcnlVUkwoaW5xdWlyeUFQSSk7Ci0gICAgaWYgKHJlZ2lzdHJ5Tm9kZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBBbHdheXMgYXR0ZW1wdCB0byB1c2UgYW4gZXhpc3RpbmcgcmVnaXN0cnkuCi0gICAgICBOb2RlIHJlZ2lzdHJ5Tm9kZSA9IChOb2RlKSByZWdpc3RyeU5vZGVzLmVsZW1lbnRBdCgwKTsKLSAgICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gcmVnaXN0cnlOb2RlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgICBub2RlTWFuYWdlci5zZXRTZWxlY3RlZE5vZGVJZChyZWdpc3RyeU5vZGUuZ2V0Tm9kZUlkKCkpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIC8vIG9wZW4gdGhlIHJlZ2lzdHJ5IGlmIGl0IGlzIG5vdCBhbHJlYWR5IG9wZW5lZCBpbiB0aGUgVURESSBwZXJzcGVjdGl2ZQotICAgIE9wZW5SZWdpc3RyeUFjdGlvbiBvcGVuUmVnQWN0aW9uID0gbmV3IE9wZW5SZWdpc3RyeUFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgLy8gcG9wdWxhdGUgdGhlIHByb3BlcnR5IHRhYmxlCi0gICAgSGFzaHRhYmxlIHByb3BlcnR5VGFibGUgPSBvcGVuUmVnQWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLSAgICBpZiAoVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nKHJlZ2lzdHJ5TmFtZSkpCi0gICAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLlJFR0lTVFJZX05BTUUsIHJlZ2lzdHJ5TmFtZSk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChWYWxpZGF0b3IudmFsaWRhdGVVUkwoaW5xdWlyeUFQSSkpCi0gICAgICBwcm9wZXJ0eVRhYmxlLnB1dChVRERJQWN0aW9uSW5wdXRzLklOUVVJUllfVVJMLCBpbnF1aXJ5QVBJKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgLy8gcnVuIHRoZSBhY3Rpb24KLSAgICBpZiAoIW9wZW5SZWdBY3Rpb24ucnVuKCkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwcm90ZWN0ZWQgVmVjdG9yIGdldFJlZ2lzdHJ5Tm9kZXNCeUlucXVpcnlVUkwoU3RyaW5nIGlucXVpcnlVUkwpCi0gIHsKLSAgICBWZWN0b3IgcmVnaXN0cnlOb2RlcyA9IG51bGw7Ci0gICAgTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlciA9IGNvbnRyb2xsZXJfLmdldFVERElQZXJzcGVjdGl2ZSgpLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgICBVRERJTWFpbk5vZGUgdWRkaU1haW5Ob2RlID0gKFVERElNYWluTm9kZSkgKG5hdmlnYXRvck1hbmFnZXIuZ2V0Um9vdE5vZGUoKSk7Ci0gICAgVmVjdG9yIGNoaWxkTm9kZXMgPSB1ZGRpTWFpbk5vZGUuZ2V0Q2hpbGROb2RlcygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGROb2Rlcy5zaXplKCk7IGkrKykKLSAgICB7Ci0gICAgICBOb2RlIGNoaWxkTm9kZSA9IChOb2RlKSBjaGlsZE5vZGVzLmVsZW1lbnRBdChpKTsKLSAgICAgIGlmIChjaGlsZE5vZGUgaW5zdGFuY2VvZiBSZWdpc3RyeU5vZGUpCi0gICAgICB7Ci0gICAgICAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudCkgY2hpbGROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICAgIGlmIChyZWdFbGVtZW50LmdldElucXVpcnlVUkwoKS5lcXVhbHMoaW5xdWlyeVVSTCkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAocmVnaXN0cnlOb2RlcyA9PSBudWxsKQotICAgICAgICAgICAgcmVnaXN0cnlOb2RlcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgICByZWdpc3RyeU5vZGVzLmFkZEVsZW1lbnQoY2hpbGROb2RlKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVnaXN0cnlOb2RlczsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvQWRkV1NETFNlcnZpY2VUb0Zhdm9yaXRlc0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvQWRkV1NETFNlcnZpY2VUb0Zhdm9yaXRlc0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmQxYzhhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL0FkZFdTRExTZXJ2aWNlVG9GYXZvcml0ZXNBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyLklUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy5GYXZvcml0ZXNNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuV3NpbE1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC5Xc2lsRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuV3NpbFdzZGxTZXJ2aWNlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5XU0lMUGVyc3BlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwudHJhbnNmb3JtZXIuV1NJTFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lcjsKLQotcHVibGljIGNsYXNzIEFkZFdTRExTZXJ2aWNlVG9GYXZvcml0ZXNBY3Rpb24gZXh0ZW5kcyBBZGRUb0Zhdm9yaXRlc0FjdGlvbgotewotICBwdWJsaWMgQWRkV1NETFNlcnZpY2VUb0Zhdm9yaXRlc0FjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGZhdm9yaXRlRXhpc3RzKCkKLSAgewotICAgIFN0cmluZyB3c2RsVVJMID0gZ2V0V3NkbFVybCgpOwotICAgIEhhc2h0YWJsZSB0YWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9XU0RMX1VSTCwgd3NkbFVSTCk7Ci0gICAgcmV0dXJuIGZhdm9yaXRlRXhpc3RzKHRhYmxlLCBGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfV1NETF9TRVJWSUNFX0ZPTERFUl9OT0RFKTsKLSAgfQotCi0gIHB1YmxpYyBJVHJhbnNmb3JtZXJbXSBnZXRUcmFuc2Zvcm1lcnMoKQotICB7Ci0gICAgSVRyYW5zZm9ybWVyW10gcGFyZW50VHJhbnNmb3JtZXJzID0gc3VwZXIuZ2V0VHJhbnNmb3JtZXJzKCk7Ci0gICAgSVRyYW5zZm9ybWVyW10gdHJhbnNmb3JtZXJzID0gbmV3IElUcmFuc2Zvcm1lcltwYXJlbnRUcmFuc2Zvcm1lcnMubGVuZ3RoKzFdOwotICAgIFN5c3RlbS5hcnJheWNvcHkocGFyZW50VHJhbnNmb3JtZXJzLCAwLCB0cmFuc2Zvcm1lcnMsIDAsIHBhcmVudFRyYW5zZm9ybWVycy5sZW5ndGgpOwotICAgIHRyYW5zZm9ybWVyc1t0cmFuc2Zvcm1lcnMubGVuZ3RoLTFdID0gbmV3IFdTSUxWaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXIoY29udHJvbGxlcl8sIFdzaWxNb2RlbENvbnN0YW50cy5MSVNUX01BTkFHRVJfV1NETF9TRVJWSUNFUywgQWN0aW9uSW5wdXRzLlZJRVdJRCwgV1NJTFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lci5XU0RMX1NFUlZJQ0UpOwotICAgIHJldHVybiB0cmFuc2Zvcm1lcnM7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBleGVjdXRlU2luZ2xlTGlua0FjdGlvbigpCi0gIHsKLSAgICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0gICAgU3RyaW5nIHdzZGxVUkwgPSBnZXRXc2RsVXJsKCk7Ci0gICAgSGFzaHRhYmxlIHRhYmxlID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIHRhYmxlLnB1dChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1dTRExfVVJMLCB3c2RsVVJMKTsKLSAgICBpZiAoaXNNdWx0aXBsZUxpbmtBY3Rpb24oKSAmJiBmYXZvcml0ZUV4aXN0cyh0YWJsZSwgRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1dTRExfU0VSVklDRV9GT0xERVJfTk9ERSkpCi0gICAgewotICAgICAgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2Uod3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9GQVZPUklURVNfQUxSRUFEWV9FWElTVFMiLCB3c2RsVVJMKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmIChhZGRUb0Zhdm9yaXRlcyh0YWJsZSwgRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1dTRExfU0VSVklDRV9GT0xERVJfTk9ERSkpCi0gICAgewotICAgICAgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2Uod3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX0FERF9UT19GQVZPUklURVNfU1VDQ0VTU0ZVTCIsIHdzZGxVUkwpKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2Uod3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9BRERfVE9fRkFWT1JJVEVTIiwgd3NkbFVSTCkpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIGdldFdzZGxVcmwoKQotICB7Ci0gICAgaW50IG5vZGVJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZykgcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBpbnQgdmlld0lEID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKSBwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLlZJRVdJRCkpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXJfLmdldE5vZGUobm9kZUlEKTsKLSAgICBXc2lsRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSAoV3NpbEVsZW1lbnQpIHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIFdzaWxXc2RsU2VydmljZUVsZW1lbnQgd3NpbFdzZGxTZXJ2aWNlRWxlbWVudDsKLSAgICBPYmplY3Qgb2JqID0gc2VsZWN0ZWRFbGVtZW50LmdldEFsbFdTRExTZXJ2aWNlcygpLmdldEVsZW1lbnRXaXRoVmlld0lkKHZpZXdJRCkuZ2V0T2JqZWN0KCk7Ci0gICAgd3NpbFdzZGxTZXJ2aWNlRWxlbWVudCA9IChXc2lsV3NkbFNlcnZpY2VFbGVtZW50KSBvYmo7Ci0gICAgcmV0dXJuIHdzaWxXc2RsU2VydmljZUVsZW1lbnQuZ2V0V1NETFNlcnZpY2VVUkwoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvQWRkV1NJTFRvRmF2b3JpdGVzQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9BZGRXU0lMVG9GYXZvcml0ZXNBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2E5MTQyZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9BZGRXU0lMVG9GYXZvcml0ZXNBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy5GYXZvcml0ZXNNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuV3NpbEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuV1NJTFBlcnNwZWN0aXZlOwotCi1wdWJsaWMgY2xhc3MgQWRkV1NJTFRvRmF2b3JpdGVzQWN0aW9uIGV4dGVuZHMgQWRkVG9GYXZvcml0ZXNBY3Rpb24KLXsKLSAgcHVibGljIEFkZFdTSUxUb0Zhdm9yaXRlc0FjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGZhdm9yaXRlRXhpc3RzKCkKLSAgewotICAgIFN0cmluZyB3c2lsVVJMID0gZ2V0V3NpbFVybCgpOwotICAgIEhhc2h0YWJsZSB0YWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLSAgICB0YWJsZS5wdXQoRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUFJPUF9XU0lMX1VSTCwgd3NpbFVSTCk7Ci0gICAgcmV0dXJuIGZhdm9yaXRlRXhpc3RzKHRhYmxlLCBGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfV1NJTF9GT0xERVJfTk9ERSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBleGVjdXRlU2luZ2xlTGlua0FjdGlvbigpCi0gIHsKLSAgICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0gICAgU3RyaW5nIHdzaWxVUkwgPSBnZXRXc2lsVXJsKCk7Ci0gICAgSGFzaHRhYmxlIHRhYmxlID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIHRhYmxlLnB1dChGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5QUk9QX1dTSUxfVVJMLCB3c2lsVVJMKTsKLSAgICBpZiAoaXNNdWx0aXBsZUxpbmtBY3Rpb24oKSAmJiBmYXZvcml0ZUV4aXN0cyh0YWJsZSwgRmF2b3JpdGVzTW9kZWxDb25zdGFudHMuUkVMX1dTSUxfRk9MREVSX05PREUpKQotICAgIHsKLSAgICAgIHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfRkFWT1JJVEVTX0FMUkVBRFlfRVhJU1RTIiwgd3NpbFVSTCkpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoYWRkVG9GYXZvcml0ZXModGFibGUsIEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9XU0lMX0ZPTERFUl9OT0RFKSkKLSAgICB7Ci0gICAgICB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuYWRkTWVzc2FnZSh3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fQUREX1RPX0ZBVk9SSVRFU19TVUNDRVNTRlVMIiwgd3NpbFVSTCkpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuYWRkTWVzc2FnZSh3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0FERF9UT19GQVZPUklURVMiLCB3c2lsVVJMKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0V3NpbFVybCgpCi0gIHsKLSAgICBpbnQgbm9kZUlEID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKSBwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXJfLmdldE5vZGUobm9kZUlEKTsKLSAgICBXc2lsRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSAoV3NpbEVsZW1lbnQpIHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIHJldHVybiBzZWxlY3RlZEVsZW1lbnQuZ2V0V3NpbFVybCgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9DbGVhcldTSUxBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL0NsZWFyV1NJTEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWFmYTM4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL0NsZWFyV1NJTEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5DbGVhck5vZGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci0KLXB1YmxpYyBjbGFzcyBDbGVhcldTSUxBY3Rpb24gZXh0ZW5kcyBDbGVhck5vZGVBY3Rpb24gewotCi0gICAgcHVibGljIENsZWFyV1NJTEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gICAgewotICAgICAgICBzdXBlcihjb250cm9sbGVyLCBjb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCkpOwotICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLk5PREVJRCwgU3RyaW5nLnZhbHVlT2YoY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZUlkKCkpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSUQpCi0gICAgewotICAgICAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoIndzaWwvYWN0aW9ucy9DbGVhcldTSUxBY3Rpb25KU1AuanNwPyIpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQobm9kZUlEKTsKLSAgICAgICAgcmV0dXJuIGFjdGlvbkxpbmsudG9TdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFRyZWVDb250ZW50VmFyKCkgewotICAgICAgICByZXR1cm4gIndzaWxOYXZpZ2F0b3JDb250ZW50IjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFRyZWVDb250ZW50UGFnZSgpIHsKLSAgICAgICAgcmV0dXJuICJ3c2lsL3dzaWxfbmF2aWdhdG9yX2NvbnRlbnQuanNwIjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKSB7Ci0gICAgICAgIHJldHVybiAid3NpbFByb3BlcnRpZXNDb250YWluZXIiOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclBhZ2UoKSB7Ci0gICAgICAgIHJldHVybiAid3NpbC93c2lsX3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCI7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTdGF0dXNDb250ZW50VmFyKCkgewotICAgICAgICByZXR1cm4gIndzaWxTdGF0dXNDb250ZW50IjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRQYWdlKCkgewotICAgICAgICByZXR1cm4gIndzaWwvd3NpbF9zdGF0dXNfY29udGVudC5qc3AiOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkY2MwZGMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL0ltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9uczsKLQotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5JbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuV1NETEZpbGVOYW1lSGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkudXRpbC5VZGRpNGpIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLldzaWxFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC5Xc2lsVWRkaVNlcnZpY2VFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC5Xc2lsV3NkbFNlcnZpY2VFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLkxpc3RVRERJU2VydmljZXNUb29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLkxpc3RXU0RMU2VydmljZXNUb29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLldTSUxQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcudWRkaTRqLmNsaWVudC5VRERJUHJveHk7Ci0KLXB1YmxpYyBjbGFzcyBJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uIGV4dGVuZHMgSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uCi17Ci0gIHByaXZhdGUgRGVmaW5pdGlvbiBkZWZfOwotICBwcml2YXRlIFN0cmluZyB3c2RsRmlsZU5hbWVfOwotICBwcml2YXRlIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyXzsKLQotICBwdWJsaWMgSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICBub2RlTWFuYWdlcl8gPSBjb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSWQsIGludCB0b29sSWQsIGludCB2aWV3SWQsIGludCB2aWV3VG9vbElkKQotICB7Ci0gICAgcmV0dXJuIEltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZCwgdG9vbElkLCB2aWV3SWQsIHZpZXdUb29sSWQsICJ3c2lsL2FjdGlvbnMvSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbkpTUC5qc3AiKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHdyaXRlKE91dHB1dFN0cmVhbSBvcykKLSAgewotICAgIGlmIChkZWZfICE9IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIHdyaXRlV1NETERlZmluaXRpb24ob3MsIGRlZl8pOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RGVmYXVsdEZpbGVOYW1lKCkKLSAgewotICAgIHJldHVybiB3c2RsRmlsZU5hbWVfOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGdldFdTRExGcm9tVVJMKCkKLSAgewotICAgIGludCBub2RlSUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBpbnQgdmlld0lEID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuVklFV0lEKSk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlcl8uZ2V0Tm9kZShub2RlSUQpOwotICAgIFdzaWxFbGVtZW50IHdzaWxFbGVtZW50ID0gKFdzaWxFbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIExpc3RNYW5hZ2VyIHdzaWxTZXJ2aWNlcyA9IHdzaWxFbGVtZW50LmdldEFsbFdTRExTZXJ2aWNlcygpOwotICAgIExpc3RFbGVtZW50IGxlID0gd3NpbFNlcnZpY2VzLmdldEVsZW1lbnRXaXRoVmlld0lkKHZpZXdJRCk7Ci0gICAgV3NpbFdzZGxTZXJ2aWNlRWxlbWVudCBzZXJ2aWNlID0gKFdzaWxXc2RsU2VydmljZUVsZW1lbnQpbGUuZ2V0T2JqZWN0KCk7Ci0gICAgU3RyaW5nIHdzZGxVUkwgPSBzZXJ2aWNlLmdldFdTRExTZXJ2aWNlVVJMKCk7Ci0gICAgd3NkbEZpbGVOYW1lXyA9IFdTRExGaWxlTmFtZUhlbHBlci5nZXRXU0RMRmlsZU5hbWUod3NkbFVSTCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgZGVmXyA9IChuZXcgVWRkaTRqSGVscGVyKCkpLmdldFdTRExEZWZpbml0aW9uKHdzZGxVUkwpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotICAgICAgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmFkZE1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBnZXRXU0RMRnJvbVVERElSZWdpc3RyeSgpCi0gIHsKLSAgICBpbnQgbm9kZUlEID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSk7Ci0gICAgaW50IHZpZXdJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLlZJRVdJRCkpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXJfLmdldE5vZGUobm9kZUlEKTsKLSAgICBXc2lsRWxlbWVudCB3c2lsRWxlbWVudCA9IChXc2lsRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBMaXN0TWFuYWdlciB3c2lsU2VydmljZXMgPSB3c2lsRWxlbWVudC5nZXRBbGxVRERJU2VydmljZXMoKTsKLSAgICBMaXN0RWxlbWVudCBsZSA9IHdzaWxTZXJ2aWNlcy5nZXRFbGVtZW50V2l0aFZpZXdJZCh2aWV3SUQpOwotICAgIFdzaWxVZGRpU2VydmljZUVsZW1lbnQgc2VydmljZSA9IChXc2lsVWRkaVNlcnZpY2VFbGVtZW50KWxlLmdldE9iamVjdCgpOwotICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgICB3c2RsRmlsZU5hbWVfID0gc2VydmljZS5nZXROYW1lKCkgKyAiLndzZGwiOwotICAgIFVkZGk0akhlbHBlciB1ZGRpNGpIZWxwZXIgPSBuZXcgVWRkaTRqSGVscGVyKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgVURESVByb3h5IHByb3h5ID0gbnVsbDsKLSAgICAgIFN0cmluZyBpbnF1aXJ5VVJMID0gc2VydmljZS5nZXRVRERJU2VydmljZUlucXVpcnlBUEkoKTsKLSAgICAgIGlmIChpbnF1aXJ5VVJMICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHByb3h5ID0gbmV3IFVERElQcm94eSgpOwotICAgICAgICBwcm94eS5zZXRJbnF1aXJ5VVJMKGlucXVpcnlVUkwpOwotICAgICAgfQotICAgICAgZGVmXyA9IHVkZGk0akhlbHBlci5nZXRXU0RMRGVmaW5pdGlvbih1ZGRpNGpIZWxwZXIuZ2V0V1NETChzZXJ2aWNlLmdldFNlcnZpY2VEZWZpbml0aW9uKCksIHByb3h5KSk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyB0aGUgd3NkbCByZXByZXNlbnRpbmcgdGhpcyBzZXJ2aWNlIGlzIHVucmVhY2hhYmxlIHRocm91Z2ggdGhlIFVEREkKLSAgICAgIC8vIHJlZ2lzdHJ5LiBXZSB3aWxsIHRyeSB1c2luZyB0aGUgZGlzY292ZXJ5IFVSTCBpbnN0ZWFkLgotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGRlZl8gPSB1ZGRpNGpIZWxwZXIuZ2V0V1NETERlZmluaXRpb24oc2VydmljZS5nZXRVRERJU2VydmljZURpc2NvdmVyeVVSTCgpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGUyKQotICAgICAgewotICAgICAgfQotICAgICAgLy8gaWYgdGhlIGRpc2NvdmVyeVVSTCBhbHNvIGZhaWxzLCByZXR1cm4gYW4gZXJyb3IKLSAgICAgIHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgaW50IG5vZGVJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXJfLmdldE5vZGUobm9kZUlEKTsKLSAgICBUb29sIHNlbGVjdGVkVG9vbCA9IHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpOwotICAgIGlmIChzZWxlY3RlZFRvb2wgaW5zdGFuY2VvZiBMaXN0V1NETFNlcnZpY2VzVG9vbCkKLSAgICAgIHJldHVybiBnZXRXU0RMRnJvbVVSTCgpOwotICAgIGVsc2UgaWYgKHNlbGVjdGVkVG9vbCBpbnN0YW5jZW9mIExpc3RVRERJU2VydmljZXNUb29sKQotICAgICAgcmV0dXJuIGdldFdTRExGcm9tVURESVJlZ2lzdHJ5KCk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTdGF0dXNDb250ZW50VmFyKCkKLSAgewotICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXRTdGF0dXNDb250ZW50VmFyKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRQYWdlKCkKLSAgewotICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXRTdGF0dXNDb250ZW50UGFnZSgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9JbXBvcnRXU0lMVG9GaWxlU3lzdGVtQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9JbXBvcnRXU0lMVG9GaWxlU3lzdGVtQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxNzViY2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvSW1wb3J0V1NJTFRvRmlsZVN5c3RlbUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9uczsKLQotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5XU0lMRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC5Xc2lsRWxlbWVudDsKLQotcHVibGljIGNsYXNzIEltcG9ydFdTSUxUb0ZpbGVTeXN0ZW1BY3Rpb24gZXh0ZW5kcyBJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24gewotICAgIHByaXZhdGUgV1NJTERvY3VtZW50IHdzaWxEb2NfOwotICAgIHByaXZhdGUgV3NpbEVsZW1lbnQgd3NpbEVsZW1lbnRfOwotICAgIHByaXZhdGUgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXJfOwotCi0gICAgcHVibGljIEltcG9ydFdTSUxUb0ZpbGVTeXN0ZW1BY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICAgICAgICBub2RlTWFuYWdlcl8gPSBjb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlkLGludCB0b29sSWQsaW50IHZpZXdJZCxpbnQgdmlld1Rvb2xJZCkKLSAgICB7Ci0gICAgICByZXR1cm4gSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlkLHRvb2xJZCx2aWV3SWQsdmlld1Rvb2xJZCwid3NpbC9hY3Rpb25zL0ltcG9ydFdTSUxUb0ZpbGVTeXN0ZW1BY3Rpb25KU1AuanNwIik7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gd3JpdGUoT3V0cHV0U3RyZWFtIG9zKSB7Ci0gICAgICAgIGlmICh3c2lsRG9jXyAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gd3JpdGVXU0lMRG9jdW1lbnQob3MsIHdzaWxEb2NfKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVmYXVsdEZpbGVOYW1lKCkgewotICAgICAgICBTdHJpbmcgd3NpbEZpbGVOYW1lID0gd3NpbEVsZW1lbnRfLmdldFdzaWxVcmwoKTsKLSAgICAgICAgcmV0dXJuIHdzaWxGaWxlTmFtZS5zdWJzdHJpbmcod3NpbEZpbGVOYW1lLmxhc3RJbmRleE9mKCcvJykgKyAxLCB3c2lsRmlsZU5hbWUubGVuZ3RoKCkpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHJ1bigpIHsKLSAgICAgICAgaW50IG5vZGVJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotCi0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXJfLmdldE5vZGUobm9kZUlEKTsKLSAgICAgICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBXc2lsRWxlbWVudCkgewotICAgICAgICAgICAgd3NpbEVsZW1lbnRfID0gKFdzaWxFbGVtZW50KXNlbGVjdGVkRWxlbWVudDsKLSAgICAgICAgICAgIHdzaWxEb2NfID0gKChXc2lsRWxlbWVudClzZWxlY3RlZEVsZW1lbnQpLmdldFdTSUxEb2N1bWVudCgpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRWYXIoKQotICAgIHsKLSAgICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXRTdGF0dXNDb250ZW50VmFyKCk7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTdGF0dXNDb250ZW50UGFnZSgpCi0gICAgewotICAgICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldFdTSUxQZXJzcGVjdGl2ZSgpLmdldFN0YXR1c0NvbnRlbnRQYWdlKCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvTXVsdGlwbGVMaW5rQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9NdWx0aXBsZUxpbmtBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjY0YzQ5YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9NdWx0aXBsZUxpbmtBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9uczsKLQotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuTGlua0FjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuV3NpbEFjdGlvbklucHV0czsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIE11bHRpcGxlTGlua0FjdGlvbiBleHRlbmRzIExpbmtBY3Rpb24KLXsKLSAgcHVibGljIE11bHRpcGxlTGlua0FjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NMaW5rUGFyYW1ldGVycyhIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCkKLSAgewotICAgIFN0cmluZyBpc011bHRpcGxlTGlua0FjdGlvbiA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKFdzaWxBY3Rpb25JbnB1dHMuTVVMVElQTEVfTElOS19BQ1RJT04pOwotICAgIGlmIChpc011bHRpcGxlTGlua0FjdGlvbiAhPSBudWxsKQotICAgIHsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChXc2lsQWN0aW9uSW5wdXRzLk1VTFRJUExFX0xJTktfQUNUSU9OLCBpc011bHRpcGxlTGlua0FjdGlvbik7Ci0gICAgICByZXR1cm4gcHJvY2Vzc011bHRpcGxlTGlua0FjdGlvblBhcmFtZXRlcnMocmVxdWVzdCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5yZW1vdmUoV3NpbEFjdGlvbklucHV0cy5NVUxUSVBMRV9MSU5LX0FDVElPTik7Ci0gICAgICBTdHJpbmcgbm9kZUlEU3RyaW5nID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgICBTdHJpbmcgdG9vbElEU3RyaW5nID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLlRPT0xJRCk7Ci0gICAgICBTdHJpbmcgdmlld0lEU3RyaW5nID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLlZJRVdJRCk7Ci0gICAgICBTdHJpbmcgdmlld1Rvb2xJRFN0cmluZyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5WSUVXVE9PTElEKTsKLSAgICAgIGlmIChub2RlSURTdHJpbmcgIT0gbnVsbCkKLSAgICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5OT0RFSUQsIG5vZGVJRFN0cmluZyk7Ci0gICAgICBpZiAodG9vbElEU3RyaW5nICE9IG51bGwpCi0gICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuVE9PTElELCB0b29sSURTdHJpbmcpOwotICAgICAgaWYgKHZpZXdJRFN0cmluZyAhPSBudWxsKQotICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLlZJRVdJRCwgdmlld0lEU3RyaW5nKTsKLSAgICAgIGlmICh2aWV3VG9vbElEU3RyaW5nICE9IG51bGwpCi0gICAgICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuVklFV1RPT0xJRCwgdmlld1Rvb2xJRFN0cmluZyk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzTXVsdGlwbGVMaW5rQWN0aW9uUGFyYW1ldGVycyhIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCkKLSAgewotICAgIFN0cmluZyBub2RlSUQgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICBTdHJpbmdbXSB2aWV3SURzID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXJWYWx1ZXMoQWN0aW9uSW5wdXRzLlZJRVdJRCk7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5OT0RFSUQsIG5vZGVJRCk7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KEFjdGlvbklucHV0cy5WSUVXSUQsIHZpZXdJRHMpOwotICAgIGlmICh2aWV3SURzLmxlbmd0aCA9PSAwKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGVsc2UKLSAgICAgIHJldHVybiB0cnVlOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc011bHRpcGxlTGlua0FjdGlvbigpCi0gIHsKLSAgICByZXR1cm4gcHJvcGVydHlUYWJsZV8uY29udGFpbnNLZXkoV3NpbEFjdGlvbklucHV0cy5NVUxUSVBMRV9MSU5LX0FDVElPTik7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBTdHJpbmdbXSBnZXRWaWV3SWRzKCkKLSAgewotICAgIE9iamVjdCBvYmplY3QgPSBwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLlZJRVdJRCk7Ci0gICAgaWYgKG9iamVjdCA9PSBudWxsKQotICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbMF07Ci0gICAgZWxzZSBpZiAob2JqZWN0LmdldENsYXNzKCkuaXNBcnJheSgpKQotICAgICAgcmV0dXJuIChTdHJpbmdbXSlvYmplY3Q7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbXSB7KFN0cmluZylvYmplY3R9OwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIHJldHVybiAoaXNNdWx0aXBsZUxpbmtBY3Rpb24oKSkgPyBleGVjdXRlTXVsdGlwbGVMaW5rQWN0aW9uKCkgOiBleGVjdXRlU2luZ2xlTGlua0FjdGlvbigpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gZXhlY3V0ZU11bHRpcGxlTGlua0FjdGlvbigpCi0gIHsKLSAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotICAgIFN0cmluZ1tdIHZpZXdJZHMgPSBnZXRWaWV3SWRzKCk7Ci0gICAgaWYgKHZpZXdJZHMgIT0gbnVsbCAmJiB2aWV3SWRzLmxlbmd0aCA+IDApCi0gICAgewotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2aWV3SWRzLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoQWN0aW9uSW5wdXRzLlZJRVdJRCwgdmlld0lkc1tpXSk7Ci0gICAgICAgIGlmIChleGVjdXRlU2luZ2xlTGlua0FjdGlvbigpKQotICAgICAgICAgIHJlc3VsdCA9IHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIHByb3BlcnR5VGFibGVfLnB1dChBY3Rpb25JbnB1dHMuVklFV0lELCB2aWV3SWRzKTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHJvdGVjdGVkIGFic3RyYWN0IGJvb2xlYW4gZXhlY3V0ZVNpbmdsZUxpbmtBY3Rpb24oKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL051bGxBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL051bGxBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzhjZjU2NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9OdWxsQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5BY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBOdWxsQWN0aW9uIGV4dGVuZHMgQWN0aW9uCi17Ci0gIHB1YmxpYyBOdWxsQWN0aW9uKCkKLSAgewotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcG9wdWxhdGVQcm9wZXJ0eVRhYmxlKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0KQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBydW4oKQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL09wZW5XU0lMQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9PcGVuV1NJTEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTNmZTRiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL09wZW5XU0lMQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLldTSUxEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5Gb3JtQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLk11bHRpcGFydEZvcm1EYXRhUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy5Xc2lsQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy5Xc2lsTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLldzaWxFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLldTSUxQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmRpc2NvdmVyeS5XZWJTZXJ2aWNlc1BhcnNlckV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZUVudGl0eTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci0KLXB1YmxpYyBjbGFzcyBPcGVuV1NJTEFjdGlvbiBleHRlbmRzIEZvcm1BY3Rpb24KLXsKLQotICBwdWJsaWMgT3BlbldTSUxBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzUGFyc2VkUmVzdWx0cyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIHdzaWxVUkwgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFdzaWxBY3Rpb25JbnB1dHMuV1NJTF9VUkwpOwotICAgIFN0cmluZyBpbnNwZWN0aW9uVHlwZSA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoV3NpbEFjdGlvbklucHV0cy5XU0lMX0lOU1BFQ1RJT05fVFlQRSk7Ci0gICAgRm9ybVRvb2wgZm9ybVRvb2wgPSBnZXRTZWxlY3RlZEZvcm1Ub29sKCk7Ci0gICAgcHJvcGVydHlUYWJsZV8ucHV0KFdzaWxBY3Rpb25JbnB1dHMuV1NJTF9VUkwsIHdzaWxVUkwpOwotICAgIGlmIChpbnNwZWN0aW9uVHlwZSAhPSBudWxsICYmIGluc3BlY3Rpb25UeXBlLmxlbmd0aCgpID4gMCkKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChXc2lsQWN0aW9uSW5wdXRzLldTSUxfSU5TUEVDVElPTl9UWVBFLCBpbnNwZWN0aW9uVHlwZSk7Ci0gICAgZm9ybVRvb2wudXBkYXRlUHJvcGVydHlUYWJsZShwcm9wZXJ0eVRhYmxlXyk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgRm9ybVRvb2wgZ2V0U2VsZWN0ZWRGb3JtVG9vbCgpCi0gIHsKLSAgICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0gICAgcmV0dXJuIChGb3JtVG9vbCl3c2lsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIFN0cmluZyB3c2lsVVJMID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoV3NpbEFjdGlvbklucHV0cy5XU0lMX1VSTCk7Ci0gICAgaW50IGluc3BlY3Rpb25UeXBlID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKXByb3BlcnR5VGFibGVfLmdldChXc2lsQWN0aW9uSW5wdXRzLldTSUxfSU5TUEVDVElPTl9UWVBFKSk7Ci0gICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtc2dRdWV1ZSA9IHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHdzaWxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgcm9vdE5vZGUgPSBub2RlTWFuYWdlci5nZXRSb290Tm9kZSgpOwotICAgIFRyZWVFbGVtZW50IHJvb3QgPSByb290Tm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIFdzaWxFbGVtZW50IHdzaWxFbGVtZW50ID0gZ2V0T3BlbmVkV1NJTChyb290LCB3c2lsVVJMKTsKLSAgICBpZiAod3NpbEVsZW1lbnQgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBXZWJTZXJ2aWNlc1BhcnNlckV4dCBwYXJzZXIgPSBuZXcgV2ViU2VydmljZXNQYXJzZXJFeHQod3NpbFVSTCk7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgcGFyc2VyLnBhcnNlKFdlYlNlcnZpY2VzUGFyc2VyLlBBUlNFX05PTkUpOwotICAgICAgICBXZWJTZXJ2aWNlRW50aXR5IHdzRW50aXR5ID0gcGFyc2VyLmdldFdlYlNlcnZpY2VFbnRpdHlCeVVSSSh3c2lsVVJMKTsKLSAgICAgICAgaW50IHR5cGUgPSB3c0VudGl0eS5nZXRUeXBlKCk7Ci0gICAgICAgIGlmICh0eXBlID09IFdlYlNlcnZpY2VFbnRpdHkuVFlQRV9IVE1MKQotICAgICAgICAgIHJldHVybiBvcGVuSFRNTCh3c0VudGl0eS5nZXRDaGlsZHJlbigpLCBpbnNwZWN0aW9uVHlwZSk7Ci0gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gV2ViU2VydmljZUVudGl0eS5UWVBFX1dTSUwpCi0gICAgICAgICAgcmV0dXJuIG9wZW5XU0lMKHdzaWxVUkwsIHBhcnNlci5nZXRXU0lMRG9jdW1lbnQod3NpbFVSTCksIGluc3BlY3Rpb25UeXBlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIG1zZ1F1ZXVlLmFkZE1lc3NhZ2Uod3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9JTlZBTElEX1dTSUxfVVJMIiwgd3NpbFVSTCkpOwotICAgICAgfQotICAgICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgICAgewotICAgICAgICBtc2dRdWV1ZS5hZGRNZXNzYWdlKHQuZ2V0TWVzc2FnZSgpKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHByZXNlbGVjdFdTSUxOb2RlKG5vZGVNYW5hZ2VyLCByb290Tm9kZS5nZXRDaGlsZE5vZGUod3NpbEVsZW1lbnQpLmdldE5vZGVJZCgpLCBpbnNwZWN0aW9uVHlwZSk7Ci0gICAgICBtc2dRdWV1ZS5hZGRNZXNzYWdlKHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfV1NJTF9BTFJFQURZX09QRU5FRCIsIHdzaWxVUkwpKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBvcGVuSFRNTChMaXN0IHdzaWxzLCBpbnQgaW5zcGVjdGlvblR5cGUpCi0gIHsKLSAgICBpbnQgbm9kZUlkID0gLTE7Ci0gICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtc2dRdWV1ZSA9IHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHdzaWxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgcm9vdE5vZGUgPSBub2RlTWFuYWdlci5nZXRSb290Tm9kZSgpOwotICAgIFRyZWVFbGVtZW50IHJvb3QgPSByb290Tm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIGZvciAoSXRlcmF0b3IgaXQgPSB3c2lscy5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIFdlYlNlcnZpY2VFbnRpdHkgd3NpbEVudGl0eSA9IChXZWJTZXJ2aWNlRW50aXR5KWl0Lm5leHQoKTsKLSAgICAgIFN0cmluZyB3c2lsVVJMID0gd3NpbEVudGl0eS5nZXRVUkkoKTsKLSAgICAgIFdzaWxFbGVtZW50IHdzaWxFbGVtZW50ID0gZ2V0T3BlbmVkV1NJTChyb290LCB3c2lsVVJMKTsKLSAgICAgIGlmICh3c2lsRWxlbWVudCA9PSBudWxsKQotICAgICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIFdTSUxEb2N1bWVudCB3c2lsRG9jID0gV1NJTERvY3VtZW50Lm5ld0luc3RhbmNlKCk7Ci0gICAgICAgICAgd3NpbERvYy5yZWFkKHdzaWxVUkwpOwotICAgICAgICAgIHdzaWxFbGVtZW50ID0gbmV3IFdzaWxFbGVtZW50KHdzaWxVUkwsIHJvb3QuZ2V0TW9kZWwoKSwgd3NpbERvYywgd3NpbFVSTCk7Ci0gICAgICAgICAgcm9vdC5jb25uZWN0KHdzaWxFbGVtZW50LCBXc2lsTW9kZWxDb25zdGFudHMuUkVMX1dTSUwsIE1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUik7Ci0gICAgICAgICAgbm9kZUlkID0gcm9vdE5vZGUuZ2V0Q2hpbGROb2RlKHdzaWxFbGVtZW50KS5nZXROb2RlSWQoKTsKLSAgICAgICAgICBtc2dRdWV1ZS5hZGRNZXNzYWdlKHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19PUEVOX1dTSUxfU1VDQ0VTU0ZVTCIsIHdzaWxVUkwpKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgICAgIHsKLSAgICAgICAgICBtc2dRdWV1ZS5hZGRNZXNzYWdlKHQuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBtc2dRdWV1ZS5hZGRNZXNzYWdlKHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfV1NJTF9BTFJFQURZX09QRU5FRCIsIHdzaWxVUkwpKTsKLSAgICAgICAgbm9kZUlkID0gcm9vdE5vZGUuZ2V0Q2hpbGROb2RlKHdzaWxFbGVtZW50KS5nZXROb2RlSWQoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKG5vZGVJZCAhPSAtMSkKLSAgICB7Ci0gICAgICBwcmVzZWxlY3RXU0lMTm9kZShub2RlTWFuYWdlciwgbm9kZUlkLCBpbnNwZWN0aW9uVHlwZSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIG9wZW5XU0lMKFN0cmluZyB3c2lsVVJMLCBXU0lMRG9jdW1lbnQgd3NpbERvYywgaW50IGluc3BlY3Rpb25UeXBlKQotICB7Ci0gICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtc2dRdWV1ZSA9IHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHdzaWxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgcm9vdE5vZGUgPSBub2RlTWFuYWdlci5nZXRSb290Tm9kZSgpOwotICAgIFRyZWVFbGVtZW50IHJvb3QgPSByb290Tm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIFdzaWxFbGVtZW50IHdzaWxFbGVtZW50ID0gbmV3IFdzaWxFbGVtZW50KHdzaWxVUkwsIHJvb3QuZ2V0TW9kZWwoKSwgd3NpbERvYywgd3NpbFVSTCk7Ci0gICAgcm9vdC5jb25uZWN0KHdzaWxFbGVtZW50LCBXc2lsTW9kZWxDb25zdGFudHMuUkVMX1dTSUwsIE1vZGVsQ29uc3RhbnRzLlJFTF9PV05FUik7Ci0gICAgaW50IG5vZGVJZCA9IHJvb3ROb2RlLmdldENoaWxkTm9kZSh3c2lsRWxlbWVudCkuZ2V0Tm9kZUlkKCk7Ci0gICAgbXNnUXVldWUuYWRkTWVzc2FnZSh3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fT1BFTl9XU0lMX1NVQ0NFU1NGVUwiLCB3c2lsVVJMKSk7Ci0gICAgcHJlc2VsZWN0V1NJTE5vZGUobm9kZU1hbmFnZXIsIG5vZGVJZCwgaW5zcGVjdGlvblR5cGUpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHByZXNlbGVjdFdTSUxOb2RlKE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyLCBpbnQgbm9kZUlkLCBpbnQgaW5zcGVjdGlvblR5cGUpCi0gIHsKLSAgICBub2RlTWFuYWdlci5zZXRTZWxlY3RlZE5vZGVJZChub2RlSWQpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0Tm9kZShub2RlSWQpOwotICAgIHNlbGVjdGVkTm9kZS5zZXRWaWV3SWQoQWN0aW9uSW5wdXRzLlZJRVdUT09MSURfREVGQVVMVCk7Ci0gICAgVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIgPSBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKTsKLSAgICB0b29sTWFuYWdlci5zZXRTZWxlY3RlZFRvb2xJZChpbnNwZWN0aW9uVHlwZSk7Ci0gICAgYWRkVG9IaXN0b3J5KEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9XU0lMLCBTZWxlY3RXU0lMVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZCwgaW5zcGVjdGlvblR5cGUsIEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCwgQWN0aW9uSW5wdXRzLlZJRVdUT09MSURfREVGQVVMVCwgdHJ1ZSkpOyAgICAgICAgCi0gIH0KLQotICBwcml2YXRlIFdzaWxFbGVtZW50IGdldE9wZW5lZFdTSUwoVHJlZUVsZW1lbnQgcm9vdCwgU3RyaW5nIHdzaWxVUkwpCi0gIHsKLSAgICBFbnVtZXJhdGlvbiBlID0gcm9vdC5nZXRFbGVtZW50cyhXc2lsTW9kZWxDb25zdGFudHMuUkVMX1dTSUwpOwotICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIFdzaWxFbGVtZW50IHdzaWxFbGVtZW50ID0gKFdzaWxFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICAgIGlmICh3c2lsRWxlbWVudC5nZXRXc2lsVXJsKCkuZXF1YWxzKHdzaWxVUkwpKQotICAgICAgICByZXR1cm4gd3NpbEVsZW1lbnQ7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9PcGVuV1NJTExpbmtBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL09wZW5XU0lMTGlua0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MGRiNmViLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL09wZW5XU0lMTGlua0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyLklUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLldzaWxBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLldzaWxNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuV3NpbEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLldzaWxXc2lsTGlua0VsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuV1NJTFBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnRyYW5zZm9ybWVyLldTSUxWaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXI7Ci0KLXB1YmxpYyBjbGFzcyBPcGVuV1NJTExpbmtBY3Rpb24gZXh0ZW5kcyBNdWx0aXBsZUxpbmtBY3Rpb24KLXsKLSAgcHVibGljIE9wZW5XU0lMTGlua0FjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJRCwgaW50IHRvb2xJRCwgaW50IHZpZXdJRCwgaW50IHZpZXdUb29sSUQpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoIndzaWwvYWN0aW9ucy9PcGVuV1NJTExpbmtBY3Rpb25KU1AuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQobm9kZUlEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5UT09MSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQodG9vbElEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5WSUVXSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQodmlld0lEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5WSUVXVE9PTElEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKHZpZXdUb29sSUQpOwotICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRCYXNlQWN0aW9uTGluaygpCi0gIHsKLSAgICByZXR1cm4gIndzaWwvYWN0aW9ucy9PcGVuV1NJTExpbmtBY3Rpb25KU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBJVHJhbnNmb3JtZXJbXSBnZXRUcmFuc2Zvcm1lcnMoKQotICB7Ci0gICAgSVRyYW5zZm9ybWVyW10gcGFyZW50VHJhbnNmb3JtZXJzID0gc3VwZXIuZ2V0VHJhbnNmb3JtZXJzKCk7Ci0gICAgSVRyYW5zZm9ybWVyW10gdHJhbnNmb3JtZXJzID0gbmV3IElUcmFuc2Zvcm1lcltwYXJlbnRUcmFuc2Zvcm1lcnMubGVuZ3RoKzFdOwotICAgIFN5c3RlbS5hcnJheWNvcHkocGFyZW50VHJhbnNmb3JtZXJzLCAwLCB0cmFuc2Zvcm1lcnMsIDAsIHBhcmVudFRyYW5zZm9ybWVycy5sZW5ndGgpOwotICAgIHRyYW5zZm9ybWVyc1t0cmFuc2Zvcm1lcnMubGVuZ3RoLTFdID0gbmV3IFdTSUxWaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXIoY29udHJvbGxlcl8sIFdzaWxNb2RlbENvbnN0YW50cy5MSVNUX01BTkFHRVJfV1NJTF9MSU5LUywgQWN0aW9uSW5wdXRzLlZJRVdJRCwgV1NJTFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lci5XU0lMX0xJTkspOwotICAgIHJldHVybiB0cmFuc2Zvcm1lcnM7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBleGVjdXRlU2luZ2xlTGlua0FjdGlvbigpCi0gIHsKLSAgICBpbnQgbm9kZUlEID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKSBwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgIGludCB2aWV3SUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpIHByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuVklFV0lEKSk7Ci0gICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gd3NpbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXROb2RlKG5vZGVJRCk7Ci0gICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgaWYgKCEoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgV3NpbEVsZW1lbnQpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIExpc3RFbGVtZW50IGxlID0gKChXc2lsRWxlbWVudCkgc2VsZWN0ZWRFbGVtZW50KS5nZXRBbGxXU0lMTGlua3MoKS5nZXRFbGVtZW50V2l0aFZpZXdJZCh2aWV3SUQpOwotICAgIFdzaWxXc2lsTGlua0VsZW1lbnQgbGluayA9IChXc2lsV3NpbExpbmtFbGVtZW50KSBsZS5nZXRPYmplY3QoKTsKLSAgICBTdHJpbmcgd3NpbFVSTCA9IGxpbmsuZ2V0V1NJTExpbmtMb2NhdGlvbigpOwotICAgIC8vIHBvcHVsYXRlIGFuZCBydW4gdGhlIE9wZW5XU0lMQWN0aW9uCi0gICAgT3BlbldTSUxBY3Rpb24gYWN0aW9uID0gbmV3IE9wZW5XU0lMQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICBIYXNodGFibGUgdGFibGUgPSBhY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpOwotICAgIHRhYmxlLnB1dChXc2lsQWN0aW9uSW5wdXRzLldTSUxfVVJMLCB3c2lsVVJMKTsKLSAgICB0YWJsZS5wdXQoV3NpbEFjdGlvbklucHV0cy5XU0lMX0lOU1BFQ1RJT05fVFlQRSwgU3RyaW5nLnZhbHVlT2YoV3NpbEFjdGlvbklucHV0cy5XU0lMX0RFVEFJTFMpKTsKLSAgICByZXR1cm4gYWN0aW9uLnJ1bigpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9SZWZyZXNoQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9SZWZyZXNoQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiNjBlYTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvUmVmcmVzaEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuTGlzdFVERElCdXNpbmVzc1Rvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuTGlzdFVERElTZXJ2aWNlc1Rvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuV3NpbE5vZGU7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBSZWZyZXNoQWN0aW9uIGV4dGVuZHMgTXVsdGlwbGVMaW5rQWN0aW9uCi17Ci0gIHByb3RlY3RlZCBOb2RlTWFuYWdlciBub2RlTWFuYWdlcl87Ci0KLSAgcHVibGljIFJlZnJlc2hBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgbm9kZU1hbmFnZXJfID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBBY3Rpb24gbmV3QWN0aW9uKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCkuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBTdHJpbmcgbm9kZUlEU3RyaW5nID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLk5PREVJRCk7Ci0gICAgU3RyaW5nIHZpZXdJRFN0cmluZyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5WSUVXSUQpOwotICAgIGludCBub2RlSUQ7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgbm9kZUlEID0gSW50ZWdlci5wYXJzZUludChub2RlSURTdHJpbmcpOwotICAgIH0KLSAgICBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSkKLSAgICB7Ci0gICAgICBub2RlSUQgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGVJZCgpOwotICAgIH0KLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCkuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKG5vZGVJRCk7Ci0gICAgaWYgKHNlbGVjdGVkTm9kZSA9PSBudWxsIHx8ICEoc2VsZWN0ZWROb2RlIGluc3RhbmNlb2YgV3NpbE5vZGUpKQotICAgICAgcmV0dXJuIG5ldyBOdWxsQWN0aW9uKCk7Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIFRvb2wgc2VsZWN0ZWRUb29sID0gc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCk7Ci0gICAgICBSZWZyZXNoQWN0aW9uIGFjdGlvbjsKLSAgICAgIGlmICh2aWV3SURTdHJpbmcgPT0gbnVsbCkKLSAgICAgICAgYWN0aW9uID0gbmV3IFJlZnJlc2hXU0lMQWN0aW9uKGNvbnRyb2xsZXIpOwotICAgICAgZWxzZSBpZiAoc2VsZWN0ZWRUb29sIGluc3RhbmNlb2YgTGlzdFVERElTZXJ2aWNlc1Rvb2wpCi0gICAgICAgIGFjdGlvbiA9IG5ldyBSZWZyZXNoVURESVNlcnZpY2VBY3Rpb24oY29udHJvbGxlcik7Ci0gICAgICBlbHNlIGlmIChzZWxlY3RlZFRvb2wgaW5zdGFuY2VvZiBMaXN0VURESUJ1c2luZXNzVG9vbCkKLSAgICAgICAgYWN0aW9uID0gbmV3IFJlZnJlc2hVRERJQnVzaW5lc3NBY3Rpb24oY29udHJvbGxlcik7Ci0gICAgICBlbHNlCi0gICAgICAgIHJldHVybiBuZXcgTnVsbEFjdGlvbigpOwotICAgICAgYWN0aW9uLmdldFByb3BlcnR5VGFibGUoKS5wdXQoQWN0aW9uSW5wdXRzLk5PREVJRCwgU3RyaW5nLnZhbHVlT2Yobm9kZUlEKSk7Ci0gICAgICByZXR1cm4gYWN0aW9uOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJRCwgaW50IHRvb2xJRCwgaW50IHZpZXdJRCwgaW50IHZpZXdUb29sSUQpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoIndzaWwvYWN0aW9ucy9SZWZyZXNoQWN0aW9uSlNQLmpzcD8iKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKG5vZGVJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVE9PTElEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKHRvb2xJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVklFV0lEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKHZpZXdJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVklFV1RPT0xJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCh2aWV3VG9vbElEKTsKLSAgICByZXR1cm4gYWN0aW9uTGluay50b1N0cmluZygpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QmFzZUFjdGlvbkxpbmsoKQotICB7Ci0gICAgcmV0dXJuICJ3c2lsL2FjdGlvbnMvUmVmcmVzaEFjdGlvbkpTUC5qc3AiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9SZWZyZXNoVURESUJ1c2luZXNzQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9SZWZyZXNoVURESUJ1c2luZXNzQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkOGUzZTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvUmVmcmVzaFVERElCdXNpbmVzc0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmVuZ2luZS50cmFuc2Zvcm1lci5JVHJhbnNmb3JtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk1lc3NhZ2VRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuV3NpbE1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC5Xc2lsRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuV3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuV1NJTFBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnRyYW5zZm9ybWVyLldTSUxWaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXI7Ci0KLXB1YmxpYyBjbGFzcyBSZWZyZXNoVURESUJ1c2luZXNzQWN0aW9uIGV4dGVuZHMgUmVmcmVzaEFjdGlvbgotewotICBwdWJsaWMgUmVmcmVzaFVERElCdXNpbmVzc0FjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHB1YmxpYyBJVHJhbnNmb3JtZXJbXSBnZXRUcmFuc2Zvcm1lcnMoKQotICB7Ci0gICAgSVRyYW5zZm9ybWVyW10gcGFyZW50VHJhbnNmb3JtZXJzID0gc3VwZXIuZ2V0VHJhbnNmb3JtZXJzKCk7Ci0gICAgSVRyYW5zZm9ybWVyW10gdHJhbnNmb3JtZXJzID0gbmV3IElUcmFuc2Zvcm1lcltwYXJlbnRUcmFuc2Zvcm1lcnMubGVuZ3RoKzFdOwotICAgIFN5c3RlbS5hcnJheWNvcHkocGFyZW50VHJhbnNmb3JtZXJzLCAwLCB0cmFuc2Zvcm1lcnMsIDAsIHBhcmVudFRyYW5zZm9ybWVycy5sZW5ndGgpOwotICAgIHRyYW5zZm9ybWVyc1t0cmFuc2Zvcm1lcnMubGVuZ3RoLTFdID0gbmV3IFdTSUxWaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXIoY29udHJvbGxlcl8sIFdzaWxNb2RlbENvbnN0YW50cy5MSVNUX01BTkFHRVJfVURESV9MSU5LUywgQWN0aW9uSW5wdXRzLlZJRVdJRCwgV1NJTFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lci5VRERJX0JVU0lORVNTKTsKLSAgICByZXR1cm4gdHJhbnNmb3JtZXJzOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIHJldHVybiBleGVjdXRlU2luZ2xlTGlua0FjdGlvbigpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gZXhlY3V0ZU11bHRpcGxlTGlua0FjdGlvbigpCi0gIHsKLSAgICByZXR1cm4gZXhlY3V0ZVNpbmdsZUxpbmtBY3Rpb24oKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGV4ZWN1dGVTaW5nbGVMaW5rQWN0aW9uKCkKLSAgewotICAgIGJvb2xlYW4gcmVzdWx0ID0gdHJ1ZTsKLSAgICBpbnQgbm9kZUlEID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKSBwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXJfLmdldE5vZGUobm9kZUlEKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0gICAgTWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZSA9IHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKTsKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgV3NpbEVsZW1lbnQpCi0gICAgewotICAgICAgV3NpbEVsZW1lbnQgd3NpbEVsZW1lbnQgPSAoV3NpbEVsZW1lbnQpIHNlbGVjdGVkRWxlbWVudDsKLSAgICAgIExpc3RNYW5hZ2VyIGxtID0gd3NpbEVsZW1lbnQuZ2V0QWxsVURESUxpbmtzKCk7Ci0gICAgICBWZWN0b3IgdWRkaUJ1c2luZXNzRWxlbWVudHMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBTdHJpbmdbXSB2aWV3SURzID0gZ2V0Vmlld0lkcygpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2aWV3SURzLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICBpbnQgdmlld0lEID0gSW50ZWdlci5wYXJzZUludCh2aWV3SURzW2ldKTsKLSAgICAgICAgV3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQgdWRkaUJ1c2luZXNzRWxlbWVudCA9IChXc2lsVWRkaUJ1c2luZXNzRWxlbWVudCkgbG0uZ2V0RWxlbWVudFdpdGhWaWV3SWQodmlld0lEKS5nZXRPYmplY3QoKTsKLSAgICAgICAgdWRkaUJ1c2luZXNzRWxlbWVudHMuYWRkKHVkZGlCdXNpbmVzc0VsZW1lbnQpOwotICAgICAgfQotICAgICAgd3NpbEVsZW1lbnQucmVmcmVzaFNlcnZpY2VQcm92aWRlcnNGcm9tUmVnaXN0cnkodWRkaUJ1c2luZXNzRWxlbWVudHMpOwotICAgICAgZm9yIChJdGVyYXRvciBpdCA9IHVkZGlCdXNpbmVzc0VsZW1lbnRzLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIFdzaWxVZGRpQnVzaW5lc3NFbGVtZW50IHVkZGlCdXNpbmVzc0VsZW1lbnQgPSAoV3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQpIGl0Lm5leHQoKTsKLSAgICAgICAgU3RyaW5nIG5hbWUgPSB1ZGRpQnVzaW5lc3NFbGVtZW50LmdldE5hbWUoKTsKLSAgICAgICAgaWYgKG5hbWUgPT0gbnVsbCB8fCBuYW1lLmxlbmd0aCgpIDw9IDApCi0gICAgICAgICAgbmFtZSA9IHVkZGlCdXNpbmVzc0VsZW1lbnQuZ2V0VURESUxpbmtCdXNpbmVzc0tleSgpOwotICAgICAgICBpZiAodWRkaUJ1c2luZXNzRWxlbWVudC5nZXRTZXJ2aWNlUHJvdmlkZXIoKSAhPSBudWxsKQotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19SRUZSRVNIX1NVQ0NFU1NGVUwiLCBuYW1lKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIG1lc3NhZ2VRdWV1ZS5hZGRNZXNzYWdlKHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfQlVTSU5FU1NfTk9UX0ZPVU5EIiwgbmFtZSkpOwotICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlc3VsdCA9IGZhbHNlOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1JlZnJlc2hVRERJU2VydmljZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvUmVmcmVzaFVERElTZXJ2aWNlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2Mzc3YWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvUmVmcmVzaFVERElTZXJ2aWNlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLnRyYW5zZm9ybWVyLklUcmFuc2Zvcm1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTWVzc2FnZVF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy5Xc2lsTW9kZWxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLldzaWxFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC5Xc2lsVWRkaVNlcnZpY2VFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLldTSUxQZXJzcGVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC50cmFuc2Zvcm1lci5XU0lMVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyOwotCi1wdWJsaWMgY2xhc3MgUmVmcmVzaFVERElTZXJ2aWNlQWN0aW9uIGV4dGVuZHMgUmVmcmVzaEFjdGlvbgotewotICBwdWJsaWMgUmVmcmVzaFVERElTZXJ2aWNlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHVibGljIElUcmFuc2Zvcm1lcltdIGdldFRyYW5zZm9ybWVycygpCi0gIHsKLSAgICBJVHJhbnNmb3JtZXJbXSBwYXJlbnRUcmFuc2Zvcm1lcnMgPSBzdXBlci5nZXRUcmFuc2Zvcm1lcnMoKTsKLSAgICBJVHJhbnNmb3JtZXJbXSB0cmFuc2Zvcm1lcnMgPSBuZXcgSVRyYW5zZm9ybWVyW3BhcmVudFRyYW5zZm9ybWVycy5sZW5ndGgrMV07Ci0gICAgU3lzdGVtLmFycmF5Y29weShwYXJlbnRUcmFuc2Zvcm1lcnMsIDAsIHRyYW5zZm9ybWVycywgMCwgcGFyZW50VHJhbnNmb3JtZXJzLmxlbmd0aCk7Ci0gICAgdHJhbnNmb3JtZXJzW3RyYW5zZm9ybWVycy5sZW5ndGgtMV0gPSBuZXcgV1NJTFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lcihjb250cm9sbGVyXywgV3NpbE1vZGVsQ29uc3RhbnRzLkxJU1RfTUFOQUdFUl9VRERJX1NFUlZJQ0VTLCBBY3Rpb25JbnB1dHMuVklFV0lELCBXU0lMVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyLlVERElfU0VSVklDRSk7Ci0gICAgcmV0dXJuIHRyYW5zZm9ybWVyczsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJ1bigpCi0gIHsKLSAgICByZXR1cm4gZXhlY3V0ZVNpbmdsZUxpbmtBY3Rpb24oKTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIGV4ZWN1dGVNdWx0aXBsZUxpbmtBY3Rpb24oKQotICB7Ci0gICAgcmV0dXJuIGV4ZWN1dGVTaW5nbGVMaW5rQWN0aW9uKCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBleGVjdXRlU2luZ2xlTGlua0FjdGlvbigpCi0gIHsKLSAgICBib29sZWFuIHJlc3VsdCA9IHRydWU7Ci0gICAgaW50IG5vZGVJRCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZykgcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyXy5nZXROb2RlKG5vZGVJRCk7Ci0gICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIFdzaWxFbGVtZW50KQotICAgIHsKLSAgICAgIFdzaWxFbGVtZW50IHdzaWxFbGVtZW50ID0gKFdzaWxFbGVtZW50KSBzZWxlY3RlZEVsZW1lbnQ7Ci0gICAgICBMaXN0TWFuYWdlciBsbSA9IHdzaWxFbGVtZW50LmdldEFsbFVERElTZXJ2aWNlcygpOwotICAgICAgVmVjdG9yIHVkZGlTZXJ2aWNlRWxlbWVudHMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBTdHJpbmdbXSB2aWV3SURzID0gZ2V0Vmlld0lkcygpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2aWV3SURzLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICBpbnQgdmlld0lEID0gSW50ZWdlci5wYXJzZUludCh2aWV3SURzW2ldKTsKLSAgICAgICAgV3NpbFVkZGlTZXJ2aWNlRWxlbWVudCB1ZGRpU2VydmljZUVsZW1lbnQgPSAoV3NpbFVkZGlTZXJ2aWNlRWxlbWVudCkgbG0uZ2V0RWxlbWVudFdpdGhWaWV3SWQodmlld0lEKS5nZXRPYmplY3QoKTsKLSAgICAgICAgdWRkaVNlcnZpY2VFbGVtZW50cy5hZGQodWRkaVNlcnZpY2VFbGVtZW50KTsKLSAgICAgIH0KLSAgICAgIHdzaWxFbGVtZW50LnJlZnJlc2hTZXJ2aWNlRGVmaW5pdGlvbnNGcm9tUmVnaXN0cnkodWRkaVNlcnZpY2VFbGVtZW50cyk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gdWRkaVNlcnZpY2VFbGVtZW50cy5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBXc2lsVWRkaVNlcnZpY2VFbGVtZW50IHVkZGlTZXJ2aWNlRWxlbWVudCA9IChXc2lsVWRkaVNlcnZpY2VFbGVtZW50KSBpdC5uZXh0KCk7Ci0gICAgICAgIFN0cmluZyBuYW1lID0gdWRkaVNlcnZpY2VFbGVtZW50LmdldE5hbWUoKTsKLSAgICAgICAgaWYgKG5hbWUgPT0gbnVsbCB8fCBuYW1lLmxlbmd0aCgpIDw9IDApCi0gICAgICAgICAgbmFtZSA9IHVkZGlTZXJ2aWNlRWxlbWVudC5nZXRVRERJU2VydmljZUtleSgpOwotICAgICAgICBpZiAodWRkaVNlcnZpY2VFbGVtZW50LmdldFNlcnZpY2VEZWZpbml0aW9uKCkgIT0gbnVsbCkKLSAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fUkVGUkVTSF9TVUNDRVNTRlVMIiwgbmFtZSkpOwotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZSh3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1NFUlZJQ0VfTk9UX0ZPVU5EIiwgbmFtZSkpOwotICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlc3VsdCA9IGZhbHNlOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1JlZnJlc2hXU0lMQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9SZWZyZXNoV1NJTEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTExYmQ4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1JlZnJlc2hXU0lMQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLldzaWxFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLldTSUxQZXJzcGVjdGl2ZTsKLQotcHVibGljIGNsYXNzIFJlZnJlc2hXU0lMQWN0aW9uIGV4dGVuZHMgUmVmcmVzaEFjdGlvbgotewotICBwdWJsaWMgUmVmcmVzaFdTSUxBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlcik7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBleGVjdXRlU2luZ2xlTGlua0FjdGlvbigpCi0gIHsKLSAgICBpbnQgbm9kZUlEID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKSBwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXJfLmdldE5vZGUobm9kZUlEKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0gICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIFdzaWxFbGVtZW50KQotICAgIHsKLSAgICAgIFN0cmluZyB3c2lsVVJMID0gKChXc2lsRWxlbWVudCkgc2VsZWN0ZWRFbGVtZW50KS5nZXRXc2lsVXJsKCk7Ci0gICAgICBpZiAoKChXc2lsRWxlbWVudCkgc2VsZWN0ZWRFbGVtZW50KS5yZWZyZXNoKCkpCi0gICAgICB7Ci0gICAgICAgIHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19SRUZSRVNIX1NVQ0NFU1NGVUwiLCB3c2lsVVJMKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuYWRkTWVzc2FnZSh3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1dTSUxfTk9UX0ZPVU5EIiwgd3NpbFVSTCkpOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1Jlc2l6ZVdTSUxGcmFtZXNBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1Jlc2l6ZVdTSUxGcmFtZXNBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWUwZGJmOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9SZXNpemVXU0lMRnJhbWVzQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLlJlc2l6ZUZyYW1lc0FjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuV3NpbEFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuV3NpbEZyYW1lTmFtZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuV1NJTFBlcnNwZWN0aXZlOwotCi1wdWJsaWMgY2xhc3MgUmVzaXplV1NJTEZyYW1lc0FjdGlvbiBleHRlbmRzIFJlc2l6ZUZyYW1lc0FjdGlvbgotewotICBwdWJsaWMgUmVzaXplV1NJTEZyYW1lc0FjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc090aGVycyhNdWx0aXBhcnRGb3JtRGF0YVBhcnNlciBwYXJzZXIpIHRocm93cyBNdWx0aXBhcnRGb3JtRGF0YUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoV3NpbEFjdGlvbklucHV0cy5GUkFNRVNFVF9DT0xTX1BFUlNQRUNUSVZFX0NPTlRFTlQpOwotICAgIFN0cmluZyBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzID0gcGFyc2VyLmdldFBhcmFtZXRlcihXc2lsQWN0aW9uSW5wdXRzLkZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIpOwotICAgIGlmIChwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMgIT0gbnVsbCAmJiBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzICE9IG51bGwpCi0gICAgewotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFdzaWxBY3Rpb25JbnB1dHMuRlJBTUVTRVRfQ09MU19QRVJTUEVDVElWRV9DT05URU5ULHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyk7Ci0gICAgICBwcm9wZXJ0eVRhYmxlXy5wdXQoV3NpbEFjdGlvbklucHV0cy5GUkFNRVNFVF9ST1dTX0FDVElPTlNfQ09OVEFJTkVSLGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgcHVibGljIGZpbmFsIGJvb2xlYW4gcnVuKCkKLSAgewotICAgIC8vIFNhdmUgdGhlIGN1cnJlbnQgZnJhbWVzZXQgc2l6ZXMuCi0gICAgU3RyaW5nIGZyYW1lTmFtZSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZV8uZ2V0KEFjdGlvbklucHV0cy5GUkFNRV9OQU1FKTsKLSAgICBTdHJpbmcgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoV3NpbEFjdGlvbklucHV0cy5GUkFNRVNFVF9DT0xTX1BFUlNQRUNUSVZFX0NPTlRFTlQpOwotICAgIFN0cmluZyBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoV3NpbEFjdGlvbklucHV0cy5GUkFNRVNFVF9ST1dTX0FDVElPTlNfQ09OVEFJTkVSKTsKLSAgICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0gICAgCi0gICAgLy8gU2V0IHRoZSBuZXcgZnJhbWVzZXQgc2l6ZXMuCi0gICAgaWYgKGZyYW1lTmFtZS5lcXVhbHMoV3NpbEZyYW1lTmFtZXMuV1NJTF9OQVZJR0FUT1JfQ09OVEFJTkVSKSkKLSAgICB7Ci0gICAgICB3c2lsUGVyc3BlY3RpdmUuc2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKTsKLSAgICAgIHdzaWxQZXJzcGVjdGl2ZS5zZXRTYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyk7Ci0gICAgICBpZiAocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzLnN0YXJ0c1dpdGgoIjEwMCUiKSkKLSAgICAgIHsKLSAgICAgICAgLy8gUmVzdG9yZS4KLSAgICAgICAgd3NpbFBlcnNwZWN0aXZlLnNldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyh3c2lsUGVyc3BlY3RpdmUuZ2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIE1heGltaXplLgotICAgICAgICB3c2lsUGVyc3BlY3RpdmUuc2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKTsKLSAgICAgICAgd3NpbFBlcnNwZWN0aXZlLnNldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygiMTAwJSwwJSIpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmIChmcmFtZU5hbWUuZXF1YWxzKFdzaWxGcmFtZU5hbWVzLldTSUxfUFJPUEVSVElFU19DT05UQUlORVIpKQotICAgIHsKLSAgICAgIGlmIChhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzLnN0YXJ0c1dpdGgoIjEwMCUiKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scy5lbmRzV2l0aCgiMTAwJSIpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gUmVzdG9yZS4KLSAgICAgICAgICB3c2lsUGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKHdzaWxQZXJzcGVjdGl2ZS5nZXRTYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpKTsKLSAgICAgICAgICB3c2lsUGVyc3BlY3RpdmUuc2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyh3c2lsUGVyc3BlY3RpdmUuZ2V0U2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKCkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIC8vIE1heGltaXplLgotICAgICAgICAgIHdzaWxQZXJzcGVjdGl2ZS5zZXRTYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyhwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMpOwotICAgICAgICAgIHdzaWxQZXJzcGVjdGl2ZS5zZXRTYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyk7Ci0gICAgICAgICAgd3NpbFBlcnNwZWN0aXZlLnNldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygiMCUsMTAwJSIpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIE1heGltaXplLgotICAgICAgICB3c2lsUGVyc3BlY3RpdmUuc2V0U2F2ZWRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKGFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MpOwotICAgICAgICB3c2lsUGVyc3BlY3RpdmUuc2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygiMTAwJSwwJSIpOwotICAgICAgICBpZiAoIXBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scy5lbmRzV2l0aCgiMTAwJSIpKQotICAgICAgICB7Ci0gICAgICAgICAgd3NpbFBlcnNwZWN0aXZlLnNldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyk7Ci0gICAgICAgICAgd3NpbFBlcnNwZWN0aXZlLnNldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygiMCUsMTAwJSIpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKGZyYW1lTmFtZS5lcXVhbHMoV3NpbEZyYW1lTmFtZXMuV1NJTF9TVEFUVVNfQ09OVEFJTkVSKSkKLSAgICB7Ci0gICAgICBpZiAoYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cy5lbmRzV2l0aCgiMTAwJSIpKQotICAgICAgewotICAgICAgICBpZiAocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzLmVuZHNXaXRoKCIxMDAlIikpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBSZXN0b3JlLgotICAgICAgICAgIHdzaWxQZXJzcGVjdGl2ZS5zZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMod3NpbFBlcnNwZWN0aXZlLmdldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCkpOwotICAgICAgICAgIHdzaWxQZXJzcGVjdGl2ZS5zZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKHdzaWxQZXJzcGVjdGl2ZS5nZXRTYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgLy8gTWF4aW1pemUuCi0gICAgICAgICAgd3NpbFBlcnNwZWN0aXZlLnNldFNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyk7Ci0gICAgICAgICAgd3NpbFBlcnNwZWN0aXZlLnNldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKTsKLSAgICAgICAgICB3c2lsUGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCIwJSwxMDAlIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gTWF4aW1pemUuCi0gICAgICAgIHdzaWxQZXJzcGVjdGl2ZS5zZXRTYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyk7Ci0gICAgICAgIHdzaWxQZXJzcGVjdGl2ZS5zZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKCIwJSwxMDAlIik7Ci0gICAgICAgIGlmICghcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzLmVuZHNXaXRoKCIxMDAlIikpCi0gICAgICAgIHsKLSAgICAgICAgICB3c2lsUGVyc3BlY3RpdmUuc2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKTsKLSAgICAgICAgICB3c2lsUGVyc3BlY3RpdmUuc2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCIwJSwxMDAlIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1NlbGVjdFdTSUxOb2RlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9TZWxlY3RXU0lMTm9kZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODg1ODg2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1NlbGVjdFdTSUxOb2RlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLlNlbGVjdE5vZGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5Ub29sVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2w7Ci0KLXB1YmxpYyBjbGFzcyBTZWxlY3RXU0lMTm9kZUFjdGlvbiBleHRlbmRzIFNlbGVjdE5vZGVBY3Rpb24KLXsKLSAgICBwdWJsaWMgU2VsZWN0V1NJTE5vZGVBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICAgIHsKLSAgICAgICAgc3VwZXIoY29udHJvbGxlciwgY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKGludCBub2RlSUQsIGJvb2xlYW4ga2VlcEhpc3RvcnkpCi0gICAgewotICAgICAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoIndzaWwvYWN0aW9ucy9TZWxlY3RXU0lMTm9kZUFjdGlvbkpTUC5qc3A/Iik7Ci0gICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChub2RlSUQpOwotICAgICAgICBpZiAoa2VlcEhpc3RvcnkpIHsKLSAgICAgICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCcmJyk7Ci0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuSVNISVNUT1JZKTsKLSAgICAgICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKCI9MSIpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIFN0cmluZyBnZXRBY3Rpb25MaW5rRm9ySGlzdG9yeSgpCi0gICAgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IGdldFNlbGVjdGVkTm9kZSgpOwotICAgICAgICBUb29sIHNlbGVjdGVkVG9vbCA9IHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpOwotICAgICAgICBpZiAoc2VsZWN0ZWRUb29sLmdldFRvb2xUeXBlKCkgIT0gVG9vbFR5cGVzLkFDVElPTikKLSAgICAgICAgICAgIHJldHVybiBTZWxlY3RXU0lMVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgc2VsZWN0ZWRUb29sLmdldFRvb2xJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksIHRydWUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRydWUpOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRWYXIoKSB7Ci0gICAgICAgIHJldHVybiAid3NpbE5hdmlnYXRvckNvbnRlbnQiOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRQYWdlKCkgewotICAgICAgICByZXR1cm4gIndzaWwvd3NpbF9uYXZpZ2F0b3JfY29udGVudC5qc3AiOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclZhcigpIHsKLSAgICAgICAgcmV0dXJuICJ3c2lsUHJvcGVydGllc0NvbnRhaW5lciI7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyUGFnZSgpIHsKLSAgICAgICAgcmV0dXJuICJ3c2lsL3dzaWxfcHJvcGVydGllc19jb250YWluZXIuanNwIjsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGZpbmFsIGludCBnZXRQZXJzcGVjdGl2ZUlkKCkKLSAgICB7Ci0gICAgICByZXR1cm4gQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1dTSUw7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvU2VsZWN0V1NJTFRvb2xBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1NlbGVjdFdTSUxUb29sQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0NzgyNmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvU2VsZWN0V1NJTFRvb2xBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLlNlbGVjdE5vZGVUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuVG9vbFR5cGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUudHJhbnNmb3JtZXIuSVRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5WaWV3VG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC50cmFuc2Zvcm1lci5XU0lMVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyOwotCi1wdWJsaWMgY2xhc3MgU2VsZWN0V1NJTFRvb2xBY3Rpb24gZXh0ZW5kcyBTZWxlY3ROb2RlVG9vbEFjdGlvbgotewotICBwdWJsaWMgU2VsZWN0V1NJTFRvb2xBY3Rpb24oQ29udHJvbGxlciBjb250cm9sbGVyKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlciwgY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpKTsKLSAgfQotCi0gIHB1YmxpYyBJVHJhbnNmb3JtZXJbXSBnZXRUcmFuc2Zvcm1lcnMoKQotICB7Ci0gICAgSVRyYW5zZm9ybWVyW10gcGFyZW50VHJhbnNmb3JtZXJzID0gc3VwZXIuZ2V0VHJhbnNmb3JtZXJzKCk7Ci0gICAgSVRyYW5zZm9ybWVyW10gdHJhbnNmb3JtZXJzID0gbmV3IElUcmFuc2Zvcm1lcltwYXJlbnRUcmFuc2Zvcm1lcnMubGVuZ3RoICsgMV07Ci0gICAgU3lzdGVtLmFycmF5Y29weShwYXJlbnRUcmFuc2Zvcm1lcnMsIDAsIHRyYW5zZm9ybWVycywgMCwgcGFyZW50VHJhbnNmb3JtZXJzLmxlbmd0aCk7Ci0gICAgdHJhbnNmb3JtZXJzW3RyYW5zZm9ybWVycy5sZW5ndGggLSAxXSA9IG5ldyBXU0lMVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyKGNvbnRyb2xsZXJfKTsKLSAgICByZXR1cm4gdHJhbnNmb3JtZXJzOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlELCBpbnQgdG9vbElELCBpbnQgdmlld0lELCBpbnQgdmlld1Rvb2xJRCwgYm9vbGVhbiBrZWVwSGlzdG9yeSkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBhY3Rpb25MaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigid3NpbC9hY3Rpb25zL1NlbGVjdFdTSUxUb29sQWN0aW9uSlNQLmpzcD8iKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKG5vZGVJRCk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuVE9PTElEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKHRvb2xJRCk7Ci0gICAgaWYgKHZpZXdJRCAhPSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpCi0gICAgewotICAgICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5WSUVXSUQpOwotICAgICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKHZpZXdJRCk7Ci0gICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlZJRVdUT09MSUQpOwotICAgICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKHZpZXdUb29sSUQpOwotICAgIH0KLSAgICBpZiAoa2VlcEhpc3RvcnkpCi0gICAgewotICAgICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5JU0hJU1RPUlkpOwotICAgICAgYWN0aW9uTGluay5hcHBlbmQoIj0xIik7Ci0gICAgfQotICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgU3RyaW5nIGdldEFjdGlvbkxpbmtGb3JIaXN0b3J5KCkKLSAgewotICAgIGJvb2xlYW4ga2VlcEhpc3RvcnkgPSBmYWxzZTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IGdldFNlbGVjdGVkTm9kZSgpOwotICAgIFRvb2wgc2VsZWN0ZWRUb29sID0gZ2V0U2VsZWN0ZWRUb29sKCk7Ci0gICAgaW50IHRvb2xUeXBlID0gZ2V0U2VsZWN0ZWRUb29sKCkuZ2V0VG9vbFR5cGUoKTsKLSAgICBpZiAodG9vbFR5cGUgPT0gVG9vbFR5cGVzLkZPUk0pCi0gICAgICBrZWVwSGlzdG9yeSA9IHRydWU7Ci0gICAgZWxzZSBpZiAodG9vbFR5cGUgPT0gVG9vbFR5cGVzLlZJRVcpCi0gICAgewotICAgICAgaW50IHZpZXdJRCA9IHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKTsKLSAgICAgIGlmICh2aWV3SUQgPT0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUKQotICAgICAgICBrZWVwSGlzdG9yeSA9IHRydWU7Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGlmICgoKFZpZXdUb29sKSBzZWxlY3RlZFRvb2wpLmdldFRvb2xNYW5hZ2VyKHZpZXdJRCkuZ2V0VG9vbChzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpKS5nZXRUb29sVHlwZSgpICE9IFRvb2xUeXBlcy5BQ1RJT04pCi0gICAgICAgICAga2VlcEhpc3RvcnkgPSB0cnVlOwotICAgICAgfQotICAgIH0KLSAgICBpZiAoa2VlcEhpc3RvcnkpCi0gICAgewotICAgICAgcmV0dXJuIGdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBzZWxlY3RlZFRvb2wuZ2V0VG9vbElkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgdHJ1ZSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUcmVlQ29udGVudFZhcigpCi0gIHsKLSAgICByZXR1cm4gIndzaWxOYXZpZ2F0b3JDb250ZW50IjsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0VHJlZUNvbnRlbnRQYWdlKCkKLSAgewotICAgIHJldHVybiAid3NpbC93c2lsX25hdmlnYXRvcl9jb250ZW50LmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKQotICB7Ci0gICAgcmV0dXJuICJ3c2lsUHJvcGVydGllc0NvbnRhaW5lciI7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCkKLSAgewotICAgIHJldHVybiAid3NpbC93c2lsX3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCI7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250ZW50VmFyKCkKLSAgewotICAgIHJldHVybiAid3NpbFByb3BlcnRpZXNDb250ZW50IjsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRlbnRQYWdlKCkKLSAgewotICAgIHJldHVybiAid3NpbC93c2lsX3Byb3BlcnRpZXNfY29udGVudC5qc3AiOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIGludCBnZXRQZXJzcGVjdGl2ZUlkKCkKLSAgewotICAgIHJldHVybiBBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfV1NJTDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvU3dpdGNoUGVyc3BlY3RpdmVGcm9tV1NJTEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvU3dpdGNoUGVyc3BlY3RpdmVGcm9tV1NJTEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMmIzMDk4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1N3aXRjaFBlcnNwZWN0aXZlRnJvbVdTSUxBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5TaG93UGVyc3BlY3RpdmVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLldzaWxBY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuV1NJTFBlcnNwZWN0aXZlOwotCi1wdWJsaWMgZmluYWwgY2xhc3MgU3dpdGNoUGVyc3BlY3RpdmVGcm9tV1NJTEFjdGlvbiBleHRlbmRzIFNob3dQZXJzcGVjdGl2ZUFjdGlvbgotewotICBwdWJsaWMgU3dpdGNoUGVyc3BlY3RpdmVGcm9tV1NJTEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc1BhcnNlZFJlc3VsdHMoTXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgcGFyc2VyKSB0aHJvd3MgTXVsdGlwYXJ0Rm9ybURhdGFFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMgPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKFdzaWxBY3Rpb25JbnB1dHMuRlJBTUVTRVRfQ09MU19QRVJTUEVDVElWRV9DT05URU5UKTsKLSAgICBTdHJpbmcgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyA9IHBhcnNlci5nZXRQYXJhbWV0ZXIoV3NpbEFjdGlvbklucHV0cy5GUkFNRVNFVF9ST1dTX0FDVElPTlNfQ09OVEFJTkVSKTsKLSAgICBpZiAocGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzICE9IG51bGwgJiYgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyAhPSBudWxsKQotICAgIHsKLSAgICAgIHByb3BlcnR5VGFibGVfLnB1dChXc2lsQWN0aW9uSW5wdXRzLkZSQU1FU0VUX0NPTFNfUEVSU1BFQ1RJVkVfQ09OVEVOVCxwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMpOwotICAgICAgcHJvcGVydHlUYWJsZV8ucHV0KFdzaWxBY3Rpb25JbnB1dHMuRlJBTUVTRVRfUk9XU19BQ1RJT05TX0NPTlRBSU5FUixhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIHJ1bigpCi0gIHsKLSAgICBTdHJpbmcgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoV3NpbEFjdGlvbklucHV0cy5GUkFNRVNFVF9DT0xTX1BFUlNQRUNUSVZFX0NPTlRFTlQpOwotICAgIFN0cmluZyBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlXy5nZXQoV3NpbEFjdGlvbklucHV0cy5GUkFNRVNFVF9ST1dTX0FDVElPTlNfQ09OVEFJTkVSKTsKLSAgICAKLSAgICAvLyBTYXZlIHRoZSBmcmFtZXNldCBzaXplcyBpZmYgbm8gZnJhbWUgaXMgbWF4aW1pemVkLgotICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgICBpZiAoIXBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scy5zdGFydHNXaXRoKCIxMDAlIikgJiYgIXBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scy5lbmRzV2l0aCgiMTAwJSIpKQotICAgICAgd3NpbFBlcnNwZWN0aXZlLnNldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyhwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMpOwotICAgICAgCi0gICAgaWYgKCFhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzLnN0YXJ0c1dpdGgoIjEwMCUiKSAmJiAhYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cy5lbmRzV2l0aCgiMTAwJSIpKQotICAgICAgd3NpbFBlcnNwZWN0aXZlLnNldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyk7Ci0gICAgICAKLSAgICByZXR1cm4gc3VwZXIucnVuKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldEZvcm1BY3Rpb25MaW5rKGludCB0YXJnZXRQZXJzcGVjdGl2ZUlkLGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBmb3JtTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoIndzaWwvYWN0aW9ucy9Td2l0Y2hQZXJzcGVjdGl2ZUZyb21XU0lMQWN0aW9uSlNQLmpzcD8iKTsKLSAgICBmb3JtTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFKS5hcHBlbmQoJz0nKS5hcHBlbmQodGFyZ2V0UGVyc3BlY3RpdmVJZCk7Ci0gICAgaWYgKGZvckhpc3RvcnkpCi0gICAgICBmb3JtTGluay5hcHBlbmQoJyYnKS5hcHBlbmQoQWN0aW9uSW5wdXRzLklTSElTVE9SWSkuYXBwZW5kKCI9MSIpOwotICAgIHJldHVybiBmb3JtTGluay50b1N0cmluZygpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9XU0lMSW1wb3J0V1NJTFRvV29ya2JlbmNoQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9XU0lMSW1wb3J0V1NJTFRvV29ya2JlbmNoQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiOWRlMzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvV1NJTEltcG9ydFdTSUxUb1dvcmtiZW5jaEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkltcG9ydFRvV29ya2JlbmNoQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuV1NJTFBlcnNwZWN0aXZlOwotCi1wdWJsaWMgY2xhc3MgV1NJTEltcG9ydFdTSUxUb1dvcmtiZW5jaEFjdGlvbiBleHRlbmRzIEltcG9ydFRvV29ya2JlbmNoQWN0aW9uCi17Ci0gIHB1YmxpYyBXU0lMSW1wb3J0V1NJTFRvV29ya2JlbmNoQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHN1cGVyKGNvbnRyb2xsZXIpOwotICB9Ci0KLSAgcHVibGljIEZvcm1Ub29sIGdldFNlbGVjdGVkRm9ybVRvb2woKQotICB7Ci0gICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotICAgIHJldHVybiAoRm9ybVRvb2wpd3NpbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlKCkuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKTsKLSAgfQotCi0gIHB1YmxpYyBJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24gbmV3SW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uKCkKLSAgewotICAgIEltcG9ydFdTSUxUb0ZpbGVTeXN0ZW1BY3Rpb24gYWN0aW9uID0gbmV3IEltcG9ydFdTSUxUb0ZpbGVTeXN0ZW1BY3Rpb24oY29udHJvbGxlcl8pOwotICAgIEhhc2h0YWJsZSB0YWJsZSA9IGFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gd3NpbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICB0YWJsZS5wdXQoQWN0aW9uSW5wdXRzLk5PREVJRCwgU3RyaW5nLnZhbHVlT2Yoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpKSk7Ci0gICAgcmV0dXJuIGFjdGlvbjsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFZhcigpCi0gIHsKLSAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCkuZ2V0U3RhdHVzQ29udGVudFZhcigpOwotICB9Ci0gICAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFBhZ2UoKQotICB7Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldFdTSUxQZXJzcGVjdGl2ZSgpLmdldFN0YXR1c0NvbnRlbnRQYWdlKCk7Ci0gIH0gICAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9Xc2lsQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1dzaWxBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NWFkNDg5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1dzaWxBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUudHJhbnNmb3JtZXIuSVRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuT3BlbldTRExBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLldzaWxNb2RlbENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuV3NpbEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLldzaWxXc2RsU2VydmljZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuV1NJTFBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnRyYW5zZm9ybWVyLldTSUxWaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXI7Ci0KLXB1YmxpYyBjbGFzcyBXc2lsQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb24gZXh0ZW5kcyBNdWx0aXBsZUxpbmtBY3Rpb24KLXsKLSAgcHVibGljIFdzaWxBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gIHsKLSAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoaW50IG5vZGVJRCwgaW50IHRvb2xJRCwgaW50IHZpZXdJRCwgaW50IHZpZXdUb29sSUQpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYWN0aW9uTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoIndzaWwvYWN0aW9ucy9Xc2lsQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb25KU1AuanNwPyIpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQobm9kZUlEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5UT09MSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQodG9vbElEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5WSUVXSUQpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKCc9Jyk7Ci0gICAgYWN0aW9uTGluay5hcHBlbmQodmlld0lEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnJicpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5WSUVXVE9PTElEKTsKLSAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgIGFjdGlvbkxpbmsuYXBwZW5kKHZpZXdUb29sSUQpOwotICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRCYXNlQWN0aW9uTGluaygpCi0gIHsKLSAgICByZXR1cm4gIndzaWwvYWN0aW9ucy9Xc2lsQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb25KU1AuanNwIjsKLSAgfQotCi0gIHB1YmxpYyBJVHJhbnNmb3JtZXJbXSBnZXRUcmFuc2Zvcm1lcnMoKQotICB7Ci0gICAgSVRyYW5zZm9ybWVyW10gcGFyZW50VHJhbnNmb3JtZXJzID0gc3VwZXIuZ2V0VHJhbnNmb3JtZXJzKCk7Ci0gICAgSVRyYW5zZm9ybWVyW10gdHJhbnNmb3JtZXJzID0gbmV3IElUcmFuc2Zvcm1lcltwYXJlbnRUcmFuc2Zvcm1lcnMubGVuZ3RoKzFdOwotICAgIFN5c3RlbS5hcnJheWNvcHkocGFyZW50VHJhbnNmb3JtZXJzLCAwLCB0cmFuc2Zvcm1lcnMsIDAsIHBhcmVudFRyYW5zZm9ybWVycy5sZW5ndGgpOwotICAgIHRyYW5zZm9ybWVyc1t0cmFuc2Zvcm1lcnMubGVuZ3RoLTFdID0gbmV3IFdTSUxWaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXIoY29udHJvbGxlcl8sIFdzaWxNb2RlbENvbnN0YW50cy5MSVNUX01BTkFHRVJfV1NETF9TRVJWSUNFUywgQWN0aW9uSW5wdXRzLlZJRVdJRCwgV1NJTFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lci5XU0RMX1NFUlZJQ0UpOwotICAgIHJldHVybiB0cmFuc2Zvcm1lcnM7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBleGVjdXRlU2luZ2xlTGlua0FjdGlvbigpCi0gIHsKLSAgICBpbnQgbm9kZUlEID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKSBwcm9wZXJ0eVRhYmxlXy5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgIGludCB2aWV3SUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpIHByb3BlcnR5VGFibGVfLmdldChBY3Rpb25JbnB1dHMuVklFV0lEKSk7Ci0gICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXJfLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gd3NpbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShub2RlSUQpOwotICAgIFdzaWxFbGVtZW50IHdzaWxFbGVtZW50ID0gKFdzaWxFbGVtZW50KSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBXc2lsV3NkbFNlcnZpY2VFbGVtZW50IHdzaWxXc2RsU2VydmljZUVsZW1lbnQgPSAoV3NpbFdzZGxTZXJ2aWNlRWxlbWVudCkgd3NpbEVsZW1lbnQuZ2V0QWxsV1NETFNlcnZpY2VzKCkuZ2V0RWxlbWVudFdpdGhWaWV3SWQodmlld0lEKS5nZXRPYmplY3QoKTsKLSAgICBTdHJpbmcgd3NkbFVybCA9IHdzaWxXc2RsU2VydmljZUVsZW1lbnQuZ2V0V1NETFNlcnZpY2VVUkwoKTsKLSAgICBPcGVuV1NETEFjdGlvbiBvcGVuV1NETEFjdGlvbiA9IG5ldyBPcGVuV1NETEFjdGlvbihjb250cm9sbGVyXyk7Ci0gICAgSGFzaHRhYmxlIHByb3BlcnR5VGFibGUgPSBvcGVuV1NETEFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgcHJvcGVydHlUYWJsZS5wdXQoQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dTRExfVVJMLCB3c2RsVXJsKTsKLSAgICBib29sZWFuIGFjdGlvblJlc3VsdCA9IG9wZW5XU0RMQWN0aW9uLnJ1bigpOwotICAgIGlmIChhY3Rpb25SZXN1bHQpCi0gICAgICB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuYWRkTWVzc2FnZSh3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0lORk9fQUREX1dTRExfVE9fV1NETF9QRVJTUEVDVElWRV9TVUNDRVNTRlVMIiwgd3NkbFVybCkpOwotICAgIGVsc2UKLSAgICAgIHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5hZGRNZXNzYWdlKHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfQUREX1dTRExfVE9fV1NETF9QRVJTUEVDVElWRSIsIHdzZGxVcmwpKTsKLSAgICByZXR1cm4gYWN0aW9uUmVzdWx0OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9Xc2lsSW1wb3J0V1NETFRvV29ya2JlbmNoQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9Xc2lsSW1wb3J0V1NETFRvV29ya2JlbmNoQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxZWFmOTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvV3NpbEltcG9ydFdTRExUb1dvcmtiZW5jaEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkltcG9ydFRvV29ya2JlbmNoQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuV1NJTFBlcnNwZWN0aXZlOwotCi1wdWJsaWMgY2xhc3MgV3NpbEltcG9ydFdTRExUb1dvcmtiZW5jaEFjdGlvbiBleHRlbmRzIEltcG9ydFRvV29ya2JlbmNoQWN0aW9uIHsKLSAgICBwdWJsaWMgV3NpbEltcG9ydFdTRExUb1dvcmtiZW5jaEFjdGlvbihDb250cm9sbGVyIGNvbnRyb2xsZXIpIHsKLSAgICAgICAgc3VwZXIoY29udHJvbGxlcik7Ci0gICAgfQotCi0gICAgcHVibGljIEZvcm1Ub29sIGdldFNlbGVjdGVkRm9ybVRvb2woKSB7Ci0gICAgICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgICAgICAgcmV0dXJuIChGb3JtVG9vbCl3c2lsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpOwotICAgIH0KLQotICAgIHB1YmxpYyBJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24gbmV3SW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uKCkgewotICAgICAgICBJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uIGFjdGlvbiA9IG5ldyBJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uKGNvbnRyb2xsZXJfKTsKLSAgICAgICAgSGFzaHRhYmxlIHRhYmxlID0gYWN0aW9uLmdldFByb3BlcnR5VGFibGUoKTsKLQotICAgICAgICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0gICAgICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gd3NpbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0KLSAgICAgICAgdGFibGUucHV0KEFjdGlvbklucHV0cy5OT0RFSUQsIFN0cmluZy52YWx1ZU9mKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSkpOwotICAgICAgICB0YWJsZS5wdXQoQWN0aW9uSW5wdXRzLlRPT0xJRCwgU3RyaW5nLnZhbHVlT2Yoc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKSkpOwotICAgICAgICB0YWJsZS5wdXQoQWN0aW9uSW5wdXRzLlZJRVdJRCwgU3RyaW5nLnZhbHVlT2Yoc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpKSk7Ci0KLSAgICAgICAgcmV0dXJuIGFjdGlvbjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRWYXIoKQotICAgIHsKLSAgICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXRTdGF0dXNDb250ZW50VmFyKCk7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0U3RhdHVzQ29udGVudFBhZ2UoKQotICAgIHsKLSAgICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXRTdGF0dXNDb250ZW50UGFnZSgpOwotICAgIH0gICAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9Xc2lsTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvV3NpbExhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VhMWE3My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvYWN0aW9ucy9Xc2lsTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkxhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLldzaWxFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC5Xc2lsVWRkaVNlcnZpY2VFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC5Xc2lsV3NkbFNlcnZpY2VFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLkxpc3RVRERJU2VydmljZXNUb29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLkxpc3RXU0RMU2VydmljZXNUb29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLldTSUxQZXJzcGVjdGl2ZTsKLQotcHVibGljIGNsYXNzIFdzaWxMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uIGV4dGVuZHMgTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbiB7Ci0gICAgcHVibGljIFdzaWxMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikgewotICAgICAgICBzdXBlcihjb250cm9sbGVyKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIExhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24gbmV3QWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikgewotICAgICAgICByZXR1cm4gbmV3IFdzaWxMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uKGNvbnRyb2xsZXIpOwotICAgIH0KLQotICAgIHB1YmxpYyBGb3JtVG9vbCBnZXRTZWxlY3RlZEZvcm1Ub29sKCkgewotICAgICAgICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0gICAgICAgIHJldHVybiAoRm9ybVRvb2wpd3NpbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlKCkuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBydW4oKSB7Ci0gICAgICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyXy5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgICAgICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICAgICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICAgIFRvb2wgc2VsZWN0ZWRUb29sID0gc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCk7Ci0gICAgICAgIGludCB2aWV3SUQgPSBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCk7Ci0KLSAgICAgICAgTGlzdEVsZW1lbnQgbGUgPSBudWxsOwotICAgICAgICBTdHJpbmcgdXJsID0gbnVsbDsKLSAgICAgICAgaWYgKHNlbGVjdGVkVG9vbCBpbnN0YW5jZW9mIExpc3RXU0RMU2VydmljZXNUb29sKSB7Ci0gICAgICAgICAgICBsZSA9ICgoV3NpbEVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50KS5nZXRBbGxXU0RMU2VydmljZXMoKS5nZXRFbGVtZW50V2l0aFZpZXdJZCh2aWV3SUQpOwotICAgICAgICAgICAgdXJsID0gKChXc2lsV3NkbFNlcnZpY2VFbGVtZW50KWxlLmdldE9iamVjdCgpKS5nZXRXU0RMU2VydmljZVVSTCgpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHNlbGVjdGVkVG9vbCBpbnN0YW5jZW9mIExpc3RVRERJU2VydmljZXNUb29sKSB7Ci0gICAgICAgICAgICBsZSA9ICgoV3NpbEVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50KS5nZXRBbGxVRERJU2VydmljZXMoKS5nZXRFbGVtZW50V2l0aFZpZXdJZCh2aWV3SUQpOwotICAgICAgICAgICAgdXJsID0gKChXc2lsVWRkaVNlcnZpY2VFbGVtZW50KWxlLmdldE9iamVjdCgpKS5nZXRXc2RsVXJsKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gbGF1bmNoV2l6YXJkKHVybCk7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTdGF0dXNDb250ZW50VmFyKCkKLSAgICB7Ci0gICAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCkuZ2V0U3RhdHVzQ29udGVudFZhcigpOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRQYWdlKCkKLSAgICB7Ci0gICAgICByZXR1cm4gY29udHJvbGxlcl8uZ2V0V1NJTFBlcnNwZWN0aXZlKCkuZ2V0U3RhdHVzQ29udGVudFBhZ2UoKTsKLSAgICB9ICAgIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvV3NpbFRvZ2dsZU5vZGVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9hY3Rpb25zL1dzaWxUb2dnbGVOb2RlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzNGQ5MjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2FjdGlvbnMvV3NpbFRvZ2dsZU5vZGVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5Ub2dnbGVOb2RlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuVG9vbFR5cGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIFdzaWxUb2dnbGVOb2RlQWN0aW9uIGV4dGVuZHMgVG9nZ2xlTm9kZUFjdGlvbiB7Ci0gICAgcHVibGljIFdzaWxUb2dnbGVOb2RlQWN0aW9uKENvbnRyb2xsZXIgY29udHJvbGxlcikgewotICAgICAgICBzdXBlcihjb250cm9sbGVyLCBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCkuZ2V0Tm9kZU1hbmFnZXIoKSk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QWN0aW9uTGluayhpbnQgbm9kZUlkLCBib29sZWFuIG9wZW4pIHsKLSAgICAgICAgU3RyaW5nQnVmZmVyIGFjdGlvbkxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ3c2lsL2FjdGlvbnMvV3NpbFRvZ2dsZU5vZGVBY3Rpb25KU1AuanNwPyIpOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJz0nKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQobm9kZUlkKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoJyYnKTsKLSAgICAgICAgYWN0aW9uTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLk9QRU4pOwotICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZCgnPScpOwotICAgICAgICBpZiAob3BlbikKLSAgICAgICAgICAgIGFjdGlvbkxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5PUEVOX05PREUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhY3Rpb25MaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuQ0xPU0VfTk9ERSk7Ci0gICAgICAgIHJldHVybiBhY3Rpb25MaW5rLnRvU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25MaW5rRm9ySGlzdG9yeSgpIHsKLSAgICAgICAgVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIgPSB0b2dnbGVkTm9kZV8uZ2V0VG9vbE1hbmFnZXIoKTsKLSAgICAgICAgVG9vbCBzZWxlY3RlZFRvb2wgPSB0b29sTWFuYWdlci5nZXRTZWxlY3RlZFRvb2woKTsKLSAgICAgICAgaW50IG5vZGVJZCA9IHRvZ2dsZWROb2RlXy5nZXROb2RlSWQoKTsKLSAgICAgICAgaW50IHRvb2xJZCA9IHNlbGVjdGVkVG9vbC5nZXRUb29sSWQoKTsKLSAgICAgICAgaW50IHZpZXdJZCA9IHRvZ2dsZWROb2RlXy5nZXRWaWV3SWQoKTsKLSAgICAgICAgaW50IHZpZXdUb29sSWQgPSB0b2dnbGVkTm9kZV8uZ2V0Vmlld1Rvb2xJZCgpOwotICAgICAgICBpZiAoc2VsZWN0ZWRUb29sLmdldFRvb2xUeXBlKCkgIT0gVG9vbFR5cGVzLkFDVElPTikKLSAgICAgICAgICAgIHJldHVybiBTZWxlY3RXU0lMVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZCwgdG9vbElkLCB2aWV3SWQsIHZpZXdUb29sSWQsIHRydWUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gU2VsZWN0V1NJTE5vZGVBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWQsIHRydWUpOwotICAgIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFRyZWVDb250ZW50VmFyKCkKLSAgewotICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXRUcmVlQ29udGVudFZhcigpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRUcmVlQ29udGVudFBhZ2UoKQotICB7Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXJfLmdldFdTSUxQZXJzcGVjdGl2ZSgpLmdldFRyZWVDb250ZW50UGFnZSgpOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQcm9wZXJ0aWVzQ29udGFpbmVyVmFyKCkKLSAgewotICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXRQcm9wZXJ0aWVzQ29udGFpbmVyVmFyKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCkKLSAgewotICAgIHJldHVybiBjb250cm9sbGVyXy5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXRQcm9wZXJ0aWVzQ29udGFpbmVyUGFnZSgpOwotICB9Ci0gIAotICBwdWJsaWMgZmluYWwgaW50IGdldFBlcnNwZWN0aXZlSWQoKQotICB7Ci0gICAgcmV0dXJuIEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9XU0lMOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvY29uc3RhbnRzL1dzaWxBY3Rpb25JbnB1dHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9jb25zdGFudHMvV3NpbEFjdGlvbklucHV0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjU5OTE2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9jb25zdGFudHMvV3NpbEFjdGlvbklucHV0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgV3NpbEFjdGlvbklucHV0cwotewotICAgIC8vIG9wZW4gV1NJTCBmb3JtCi0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgV1NJTF9VUkwgPSAid3NpbFVSTCI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgV1NJTF9JTlNQRUNUSU9OX1RZUEUgPSAid3NpbEluc3BlY3Rpb25UeXBlIjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBXU0lMX0RFVEFJTFMgPSAwOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFdTRExfU0VSVklDRVMgPSAxOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFVERElfU0VSVklDRVMgPSAyOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFVERElfQlVTSU5FU1NFUyA9IDM7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgV1NJTF9MSU5LUyA9IDQ7Ci0KLSAgICAvLyBtYXNzIGFjdGlvbgotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE1VTFRJUExFX0xJTktfQUNUSU9OID0gIm11bHRpcGxlTGlua0FjdGlvbiI7Ci0KLSAgICAvLyByZXNpemUgV1NJTCBmcmFtZXMgYWN0aW9uCi0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgRlJBTUVTRVRfQ09MU19QRVJTUEVDVElWRV9DT05URU5UID0gImZyYW1lc2V0Q29sc1BlcnNwZWN0aXZlQ29udGVudCI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgRlJBTUVTRVRfUk9XU19BQ1RJT05TX0NPTlRBSU5FUiA9ICJmcmFtZXNldFJvd3NBY3Rpb25zQ29udGFpbmVyIjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9jb25zdGFudHMvV3NpbEZyYW1lTmFtZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9jb25zdGFudHMvV3NpbEZyYW1lTmFtZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzczNWEyMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvY29uc3RhbnRzL1dzaWxGcmFtZU5hbWVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHM7Ci0KLXB1YmxpYyBjbGFzcyBXc2lsRnJhbWVOYW1lcwotewotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBXU0lMX05BVklHQVRPUl9DT05UQUlORVIgPSAid3NpbF9uYXZpZ2F0b3JfY29udGFpbmVyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgV1NJTF9OQVZJR0FUT1JfVE9PTEJBUiA9ICJ3c2lsX25hdmlnYXRvcl90b29sYmFyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgV1NJTF9OQVZJR0FUT1JfQ09OVEVOVCA9ICJ3c2lsX25hdmlnYXRvcl9jb250ZW50IjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgV1NJTF9BQ1RJT05TX0NPTlRBSU5FUiA9ICJ3c2lsX2FjdGlvbnNfY29udGFpbmVyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgV1NJTF9QUk9QRVJUSUVTX0NPTlRBSU5FUiA9ICJ3c2lsX3Byb3BlcnRpZXNfY29udGFpbmVyIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgV1NJTF9QUk9QRVJUSUVTX1RPT0xCQVIgPSAid3NpbF9wcm9wZXJ0aWVzX3Rvb2xiYXIiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBXU0lMX1BST1BFUlRJRVNfQ09OVEVOVCA9ICJ3c2lsX3Byb3BlcnRpZXNfY29udGVudCI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFdTSUxfU1RBVFVTX0NPTlRBSU5FUiA9ICJ3c2lsX3N0YXR1c19jb250YWluZXIiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBXU0lMX1NUQVRVU19UT09MQkFSID0gIndzaWxfc3RhdHVzX3Rvb2xiYXIiOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBXU0lMX1NUQVRVU19DT05URU5UID0gIndzaWxfc3RhdHVzX2NvbnRlbnQiOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2NvbnN0YW50cy9Xc2lsTW9kZWxDb25zdGFudHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9jb25zdGFudHMvV3NpbE1vZGVsQ29uc3RhbnRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhYThmYTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2NvbnN0YW50cy9Xc2lsTW9kZWxDb25zdGFudHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50czsKLQotcHVibGljIGNsYXNzIFdzaWxNb2RlbENvbnN0YW50cwotewotICAgIC8vIFJlbGF0aW9uCi0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUkVMX1dTSUwgPSAicmVsV1NJTCI7Ci0KLSAgICAvLyBMaXN0IE1hbmFnZXJzIGZvciBXc2lsRWxlbWVudAotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIExJU1RfTUFOQUdFUl9XU0RMX1NFUlZJQ0VTID0gIndzZGxTZXJ2aWNlcyI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTElTVF9NQU5BR0VSX1VERElfU0VSVklDRVMgPSAidWRkaVNlcnZpY2VzIjsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBMSVNUX01BTkFHRVJfVURESV9MSU5LUyA9ICJ1ZGRpTGlua3MiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIExJU1RfTUFOQUdFUl9XU0lMX0xJTktTID0gIndzaWxMaW5rcyI7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvZGF0YW1vZGVsL1dzaWxDb21tb25FbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvZGF0YW1vZGVsL1dzaWxDb21tb25FbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0ZTAxYWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2RhdGFtb2RlbC9Xc2lsQ29tbW9uRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuQmFzaWNFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci0KLXB1YmxpYyBjbGFzcyBXc2lsQ29tbW9uRWxlbWVudCBleHRlbmRzIEJhc2ljRWxlbWVudAotewotICBwcml2YXRlIFN0cmluZyBiYXNlV3NpbFVSTDsKLSAgcHJpdmF0ZSBTdHJpbmcgcmVsYXRpdmVVUklCYXNlOwotCi0gIHB1YmxpYyBXc2lsQ29tbW9uRWxlbWVudChTdHJpbmcgbmFtZSwgTW9kZWwgbW9kZWwpCi0gIHsKLSAgICBzdXBlcihuYW1lLCBtb2RlbCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0QmFzZVdzaWxVUkwoKQotICB7Ci0gICAgcmV0dXJuIGJhc2VXc2lsVVJMOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRCYXNlV3NpbFVSTChTdHJpbmcgYmFzZVdzaWxVUkwpCi0gIHsKLSAgICB0aGlzLmJhc2VXc2lsVVJMID0gYmFzZVdzaWxVUkw7Ci0gIH0KLSAgCi0gIHByaXZhdGUgZmluYWwgY2hhciBGV0RfU0xBU0ggPSAnLyc7Ci0gIHByaXZhdGUgZmluYWwgY2hhciBCV0RfU0xBU0ggPSAnXFwnOwotICBwcml2YXRlIGZpbmFsIGNoYXIgUFJPVE9DT0xfSU5ESUNBVE9SID0gJzonOwotICAKLSAgcHVibGljIFN0cmluZyBtYWtlQWJzb2x1dGUoU3RyaW5nIHVyaSkKLSAgewotICAgIGlmIChiYXNlV3NpbFVSTCAhPSBudWxsICYmIHVyaSAhPSBudWxsICYmIHVyaS5pbmRleE9mKFBST1RPQ09MX0lORElDQVRPUikgPT0gLTEpCi0gICAgewotICAgICAgaWYgKHJlbGF0aXZlVVJJQmFzZSA9PSBudWxsKQotICAgICAgewotICAgICAgICByZWxhdGl2ZVVSSUJhc2UgPSBiYXNlV3NpbFVSTC5yZXBsYWNlKEJXRF9TTEFTSCwgRldEX1NMQVNIKTsKLSAgICAgICAgaW50IGluZGV4ID0gcmVsYXRpdmVVUklCYXNlLmxhc3RJbmRleE9mKEZXRF9TTEFTSCk7Ci0gICAgICAgIHJlbGF0aXZlVVJJQmFzZSA9IGJhc2VXc2lsVVJMLnN1YnN0cmluZygwLCBpbmRleCArIDEpOwotICAgICAgfQotICAgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcihyZWxhdGl2ZVVSSUJhc2UpOwotICAgICAgc2IuYXBwZW5kKHVyaSk7Ci0gICAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHVyaTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2RhdGFtb2RlbC9Xc2lsRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2RhdGFtb2RlbC9Xc2lsRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzQ3NjEzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9kYXRhbW9kZWwvV3NpbEVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsOwotCi1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5BYnN0cmFjdDsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLkluc3BlY3Rpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLkxpbms7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLldTSUxEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuTGlzdEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5MaXN0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuV3NpbE1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJ1c2luZXNzLkJ1c2luZXNzRW50aXR5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuc2VydmljZS5CdXNpbmVzc1NlcnZpY2U7Ci0KLS8qKgotICogVGhlIGRhdGEgbW9kZWwgZWxlbWVudCB0aGF0IHJlcHJlc2VudHMgYSBXU0lMIGRvY3VtZW50Ci0gKi8KLXB1YmxpYyBjbGFzcyBXc2lsRWxlbWVudCBleHRlbmRzIFRyZWVFbGVtZW50Ci17Ci0gIHByaXZhdGUgV1NJTERvY3VtZW50IHdzaWxEb2NfOwotICBwcml2YXRlIFN0cmluZyB0aGlzV3NpbFVybF87Ci0gIC8qKiAqKioqKioqKioqKioqKioqKiogTmFtZXNwYWNlICoqKioqKioqKiogKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUVTUEFDRV9XU0RMID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUVTUEFDRV9VRERJX1YxID0gInVybjp1ZGRpLW9yZzphcGkiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRVNQQUNFX1VERElfVjIgPSAidXJuOnVkZGktb3JnOmFwaV92MiI7Ci0gIC8vcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUVTUEFDRV9VRERJX0JJTkRJTkcgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwMS8xMC9pbnNwZWN0aW9uL3VkZGkvIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUVTUEFDRV9XU0lMX0lOU1BFQ1RJT04gPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwMS8xMC9pbnNwZWN0aW9uLyI7Ci0gIC8qKiAqKioqKioqKioqKioqKioqKiogUmVscyAqKioqKioqKioqKioqKioqICovCi0gIC8vIFJlbGF0aW9uIGZvciBhIFdTSUwgZG91Y21lbnQgYW5kIGl0cyBsaW5rIG5vZGVzCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFTF9XU0lMX0xJTksgPSAid3NpbCBsaW5rIG5vZGVzIjsKLQotICBwdWJsaWMgV3NpbEVsZW1lbnQoU3RyaW5nIG5hbWUsIE1vZGVsIG1vZGVsLCBXU0lMRG9jdW1lbnQgd3NpbERvY3VtZW50LCBTdHJpbmcgd3NpbFVSTCkKLSAgewotICAgIHN1cGVyKG5hbWUsIG1vZGVsKTsKLSAgICB3c2lsRG9jXyA9IHdzaWxEb2N1bWVudDsKLSAgICB0aGlzV3NpbFVybF8gPSB3c2lsVVJMOwotICAgIExpc3RNYW5hZ2VyIHdzZGxTZXJ2aWNlc18gPSBudWxsOwotICAgIExpc3RNYW5hZ2VyIHVkZGlTZXJ2aWNlc18gPSBudWxsOwotICAgIExpc3RNYW5hZ2VyIHdzaWxMaW5rc18gPSBudWxsOwotICAgIExpc3RNYW5hZ2VyIHVkZGlMaW5rc18gPSBudWxsOwotICAgIHNldFByb3BlcnR5QXNPYmplY3QoV3NpbE1vZGVsQ29uc3RhbnRzLkxJU1RfTUFOQUdFUl9XU0RMX1NFUlZJQ0VTLCB3c2RsU2VydmljZXNfKTsKLSAgICBzZXRQcm9wZXJ0eUFzT2JqZWN0KFdzaWxNb2RlbENvbnN0YW50cy5MSVNUX01BTkFHRVJfVURESV9TRVJWSUNFUywgdWRkaVNlcnZpY2VzXyk7Ci0gICAgc2V0UHJvcGVydHlBc09iamVjdChXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1VERElfTElOS1MsIHdzaWxMaW5rc18pOwotICAgIHNldFByb3BlcnR5QXNPYmplY3QoV3NpbE1vZGVsQ29uc3RhbnRzLkxJU1RfTUFOQUdFUl9XU0lMX0xJTktTLCB1ZGRpTGlua3NfKTsKLSAgfQotCi0gIC8qCi0gICAqIFJlZnJlc2ggdGhlIFdTSUwgZG9jdW1lbnQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIHJlZnJlc2goKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgV1NJTERvY3VtZW50IG5ld1dTSUxEb2MgPSBXU0lMRG9jdW1lbnQubmV3SW5zdGFuY2UoKTsKLSAgICAgIG5ld1dTSUxEb2MucmVhZChnZXRXc2lsVXJsKCkpOwotICAgICAgd3NpbERvY18gPSBuZXdXU0lMRG9jOwotICAgICAgTGlzdE1hbmFnZXIgd3NkbFNlcnZpY2VzXyA9IG51bGw7Ci0gICAgICBMaXN0TWFuYWdlciB1ZGRpU2VydmljZXNfID0gbnVsbDsKLSAgICAgIExpc3RNYW5hZ2VyIHdzaWxMaW5rc18gPSBudWxsOwotICAgICAgTGlzdE1hbmFnZXIgdWRkaUxpbmtzXyA9IG51bGw7Ci0gICAgICBzZXRQcm9wZXJ0eUFzT2JqZWN0KFdzaWxNb2RlbENvbnN0YW50cy5MSVNUX01BTkFHRVJfV1NETF9TRVJWSUNFUywgd3NkbFNlcnZpY2VzXyk7Ci0gICAgICBzZXRQcm9wZXJ0eUFzT2JqZWN0KFdzaWxNb2RlbENvbnN0YW50cy5MSVNUX01BTkFHRVJfVURESV9TRVJWSUNFUywgdWRkaVNlcnZpY2VzXyk7Ci0gICAgICBzZXRQcm9wZXJ0eUFzT2JqZWN0KFdzaWxNb2RlbENvbnN0YW50cy5MSVNUX01BTkFHRVJfVURESV9MSU5LUywgd3NpbExpbmtzXyk7Ci0gICAgICBzZXRQcm9wZXJ0eUFzT2JqZWN0KFdzaWxNb2RlbENvbnN0YW50cy5MSVNUX01BTkFHRVJfV1NJTF9MSU5LUywgdWRkaUxpbmtzXyk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICAvKgotICAgKiBSZXR1cm5zIHRoZSBXU0lMJ3MgVVJMCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFdzaWxVcmwoKQotICB7Ci0gICAgcmV0dXJuIHRoaXNXc2lsVXJsXzsKLSAgfQotCi0gIC8qCi0gICAqIFJldHVybnMgdGhlIFdTSUwgZG9jdW1lbnQKLSAgICovCi0gIHB1YmxpYyBXU0lMRG9jdW1lbnQgZ2V0V1NJTERvY3VtZW50KCkKLSAgewotICAgIHJldHVybiB3c2lsRG9jXzsKLSAgfQotCi0gIC8qCi0gICAqIFJldHVybnMgYWxsIGFic3RyYWN0IGxhbmd1YWdlcwotICAgKi8KLSAgcHVibGljIFZlY3RvciBnZXRXU0lMQWJzdHJhY3RMYW5ncygpCi0gIHsKLSAgICBWZWN0b3IgdiA9IG5ldyBWZWN0b3IoKTsKLSAgICBBYnN0cmFjdFtdIGFic3RyYWN0cyA9IHdzaWxEb2NfLmdldEluc3BlY3Rpb24oKS5nZXRBYnN0cmFjdHMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGFic3RyYWN0cy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICB2LmFkZChhYnN0cmFjdHNbaV0uZ2V0TGFuZygpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHY7Ci0gIH0KLQotICAvKgotICAgKiBSZXR1cm5zIGFsbCBhYnN0cmFjdHMKLSAgICovCi0gIHB1YmxpYyBWZWN0b3IgZ2V0V1NJTEFic3RyYWN0cygpCi0gIHsKLSAgICBWZWN0b3IgdiA9IG5ldyBWZWN0b3IoKTsKLSAgICBBYnN0cmFjdFtdIGFic3RyYWN0cyA9IHdzaWxEb2NfLmdldEluc3BlY3Rpb24oKS5nZXRBYnN0cmFjdHMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGFic3RyYWN0cy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICB2LmFkZChhYnN0cmFjdHNbaV0uZ2V0VGV4dCgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHY7Ci0gIH0KLQotICBwdWJsaWMgTGlzdE1hbmFnZXIgZ2V0QWxsV1NETFNlcnZpY2VzKCkKLSAgewotICAgIExpc3RNYW5hZ2VyIHdzZGxTZXJ2aWNlc18gPSAoTGlzdE1hbmFnZXIpIGdldFByb3BlcnR5QXNPYmplY3QoV3NpbE1vZGVsQ29uc3RhbnRzLkxJU1RfTUFOQUdFUl9XU0RMX1NFUlZJQ0VTKTsKLSAgICBpZiAod3NkbFNlcnZpY2VzXyA9PSBudWxsKQotICAgIHsKLSAgICAgIGluaXRBbGxXU0RMU2VydmljZXMoKTsKLSAgICAgIHdzZGxTZXJ2aWNlc18gPSAoTGlzdE1hbmFnZXIpIGdldFByb3BlcnR5QXNPYmplY3QoV3NpbE1vZGVsQ29uc3RhbnRzLkxJU1RfTUFOQUdFUl9XU0RMX1NFUlZJQ0VTKTsKLSAgICB9Ci0gICAgcmV0dXJuIHdzZGxTZXJ2aWNlc187Ci0gIH0KLQotICBwdWJsaWMgTGlzdE1hbmFnZXIgZ2V0QWxsVURESVNlcnZpY2VzKCkKLSAgewotICAgIExpc3RNYW5hZ2VyIHVkZGlTZXJ2aWNlc18gPSAoTGlzdE1hbmFnZXIpIGdldFByb3BlcnR5QXNPYmplY3QoV3NpbE1vZGVsQ29uc3RhbnRzLkxJU1RfTUFOQUdFUl9VRERJX1NFUlZJQ0VTKTsKLSAgICBpZiAodWRkaVNlcnZpY2VzXyA9PSBudWxsKQotICAgIHsKLSAgICAgIGluaXRBbGxVRERJU2VydmljZXMoKTsKLSAgICAgIHVkZGlTZXJ2aWNlc18gPSAoTGlzdE1hbmFnZXIpIGdldFByb3BlcnR5QXNPYmplY3QoV3NpbE1vZGVsQ29uc3RhbnRzLkxJU1RfTUFOQUdFUl9VRERJX1NFUlZJQ0VTKTsKLSAgICB9Ci0gICAgcmV0dXJuIHVkZGlTZXJ2aWNlc187Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgaW5pdEFsbFdTRExTZXJ2aWNlcygpCi0gIHsKLSAgICBMaXN0TWFuYWdlciB3c2RsU2VydmljZXNfID0gbmV3IExpc3RNYW5hZ2VyKCk7Ci0gICAgSW5zcGVjdGlvbiBpbnNwZWN0aW9uID0gd3NpbERvY18uZ2V0SW5zcGVjdGlvbigpOwotICAgIFNlcnZpY2VbXSBzZXJ2aWNlTGlzdCA9IGluc3BlY3Rpb24uZ2V0U2VydmljZXMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNlcnZpY2VMaXN0Lmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIC8vIHNraXAgYW55IHNlcnZpY2Ugd2l0aG91dCBhIHdzZGwgbmFtZXNwYWNlCi0gICAgICAvLyBhbmQgaW52YWxpZCBkZXNjcmlwdGlvbnMKLSAgICAgIERlc2NyaXB0aW9uW10gZGVzY0xpc3QgPSBzZXJ2aWNlTGlzdFtpXS5nZXREZXNjcmlwdGlvbnMoKTsKLSAgICAgIGlmIChkZXNjTGlzdC5sZW5ndGggPCAxKQotICAgICAgICBjb250aW51ZTsKLSAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBkZXNjTGlzdFswXS5nZXRSZWZlcmVuY2VkTmFtZXNwYWNlKCk7Ci0gICAgICBpZiAobmFtZXNwYWNlID09IG51bGwpCi0gICAgICAgIGNvbnRpbnVlOwotICAgICAgZWxzZSBpZiAobmFtZXNwYWNlLmVxdWFscyhOQU1FU1BBQ0VfV1NETCkpCi0gICAgICB7Ci0gICAgICAgIFdzaWxXc2RsU2VydmljZUVsZW1lbnQgd3NkbFNlcnZpY2VFbGVtZW50ID0gbmV3IFdzaWxXc2RsU2VydmljZUVsZW1lbnQobmFtZXNwYWNlLCBnZXRNb2RlbCgpLCBzZXJ2aWNlTGlzdFtpXSk7Ci0gICAgICAgIHdzZGxTZXJ2aWNlRWxlbWVudC5zZXRCYXNlV3NpbFVSTChnZXRXc2lsVXJsKCkpOwotICAgICAgICBpZiAod3NkbFNlcnZpY2VFbGVtZW50LnZhbGlkYXRlV1NETFNlcnZpY2UoKSkKLSAgICAgICAgewotICAgICAgICAgIHdzZGxTZXJ2aWNlRWxlbWVudC5zZXROYW1lKHdzZGxTZXJ2aWNlRWxlbWVudC5nZXRXU0RMU2VydmljZVVSTCgpKTsKLSAgICAgICAgICB3c2RsU2VydmljZXNfLmFkZChuZXcgTGlzdEVsZW1lbnQod3NkbFNlcnZpY2VFbGVtZW50KSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgc2V0UHJvcGVydHlBc09iamVjdChXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1dTRExfU0VSVklDRVMsIHdzZGxTZXJ2aWNlc18pOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGluaXRBbGxVRERJU2VydmljZXMoKQotICB7Ci0gICAgTGlzdE1hbmFnZXIgdWRkaVNlcnZpY2VzXyA9IG5ldyBMaXN0TWFuYWdlcigpOwotICAgIEluc3BlY3Rpb24gaW5zcGVjdGlvbiA9IHdzaWxEb2NfLmdldEluc3BlY3Rpb24oKTsKLSAgICBTZXJ2aWNlW10gc2VydmljZUxpc3QgPSBpbnNwZWN0aW9uLmdldFNlcnZpY2VzKCk7Ci0gICAgVmVjdG9yIHVkZGlTZXJ2aWNlRWxlbWVudHMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZXJ2aWNlTGlzdC5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICAvLyBza2lwIGFueSBzZXJ2aWNlIHdpdGhvdXQgYSB3c2RsIG5hbWVzcGFjZQotICAgICAgLy8gYW5kIGludmFsaWQgZGVzY3JpcHRpb25zCi0gICAgICBEZXNjcmlwdGlvbltdIGRlc2NMaXN0ID0gc2VydmljZUxpc3RbaV0uZ2V0RGVzY3JpcHRpb25zKCk7Ci0gICAgICBpZiAoZGVzY0xpc3QubGVuZ3RoIDwgMSkKLSAgICAgICAgY29udGludWU7Ci0gICAgICBTdHJpbmcgbmFtZXNwYWNlID0gZGVzY0xpc3RbMF0uZ2V0UmVmZXJlbmNlZE5hbWVzcGFjZSgpOwotICAgICAgaWYgKG5hbWVzcGFjZSA9PSBudWxsKQotICAgICAgICBjb250aW51ZTsKLSAgICAgIGVsc2UgaWYgKChuYW1lc3BhY2UuZXF1YWxzKE5BTUVTUEFDRV9VRERJX1YxKSB8fCBuYW1lc3BhY2UuZXF1YWxzKE5BTUVTUEFDRV9VRERJX1YyKSkpCi0gICAgICB7Ci0gICAgICAgIFdzaWxVZGRpU2VydmljZUVsZW1lbnQgdWRkaVNlcnZpY2VFbGVtZW50ID0gbmV3IFdzaWxVZGRpU2VydmljZUVsZW1lbnQobmFtZXNwYWNlLCBnZXRNb2RlbCgpLCBzZXJ2aWNlTGlzdFtpXSk7Ci0gICAgICAgIHVkZGlTZXJ2aWNlRWxlbWVudC5zZXRCYXNlV3NpbFVSTChnZXRXc2lsVXJsKCkpOwotICAgICAgICBpZiAodWRkaVNlcnZpY2VFbGVtZW50LnZhbGlkYXRlVURESVNlcnZpY2UoKSkKLSAgICAgICAgewotICAgICAgICAgIHVkZGlTZXJ2aWNlRWxlbWVudC5zZXROYW1lKHVkZGlTZXJ2aWNlRWxlbWVudC5nZXROYW1lKCkpOwotICAgICAgICAgIHVkZGlTZXJ2aWNlRWxlbWVudHMuYWRkKHVkZGlTZXJ2aWNlRWxlbWVudCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmVmcmVzaFNlcnZpY2VEZWZpbml0aW9uc0Zyb21SZWdpc3RyeSh1ZGRpU2VydmljZUVsZW1lbnRzKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gdWRkaVNlcnZpY2VFbGVtZW50cy5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIHVkZGlTZXJ2aWNlc18uYWRkKG5ldyBMaXN0RWxlbWVudChpdC5uZXh0KCkpKTsKLSAgICB9Ci0gICAgc2V0UHJvcGVydHlBc09iamVjdChXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1VERElfU0VSVklDRVMsIHVkZGlTZXJ2aWNlc18pOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVmcmVzaFNlcnZpY2VEZWZpbml0aW9uc0Zyb21SZWdpc3RyeShWZWN0b3IgdWRkaVNlcnZpY2VFbGVtZW50cykKLSAgewotICAgIEhhc2hNYXAgaW5xdWlyeUFQSVRvU2VydmljZXMgPSBuZXcgSGFzaE1hcCgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdWRkaVNlcnZpY2VFbGVtZW50cy5zaXplKCk7IGkrKykKLSAgICB7Ci0gICAgICBXc2lsVWRkaVNlcnZpY2VFbGVtZW50IHVkZGlTZXJ2aWNlRWxlbWVudCA9IChXc2lsVWRkaVNlcnZpY2VFbGVtZW50KSB1ZGRpU2VydmljZUVsZW1lbnRzLmdldChpKTsKLSAgICAgIFN0cmluZyBpbnF1aXJ5QVBJID0gdWRkaVNlcnZpY2VFbGVtZW50LmdldFVERElTZXJ2aWNlSW5xdWlyeUFQSSgpOwotICAgICAgaWYgKFZhbGlkYXRvci52YWxpZGF0ZVVSTChpbnF1aXJ5QVBJKSkKLSAgICAgIHsKLSAgICAgICAgVmVjdG9yIHNlcnZpY2VzID0gKFZlY3RvcikgaW5xdWlyeUFQSVRvU2VydmljZXMuZ2V0KGlucXVpcnlBUEkpOwotICAgICAgICBpZiAoc2VydmljZXMgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHNlcnZpY2VzID0gbmV3IFZlY3RvcigpOwotICAgICAgICAgIGlucXVpcnlBUElUb1NlcnZpY2VzLnB1dChpbnF1aXJ5QVBJLCBzZXJ2aWNlcyk7Ci0gICAgICAgIH0KLSAgICAgICAgc2VydmljZXMuYWRkKHVkZGlTZXJ2aWNlRWxlbWVudCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIHVkZGlTZXJ2aWNlRWxlbWVudC5zZXRTZXJ2aWNlRGVmaW5pdGlvbihudWxsKTsKLSAgICB9Ci0gICAgZm9yIChJdGVyYXRvciBpdCA9IGlucXVpcnlBUElUb1NlcnZpY2VzLmtleVNldCgpLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgewotICAgICAgU3RyaW5nIGlucXVpcnlBUEkgPSAoU3RyaW5nKSBpdC5uZXh0KCk7Ci0gICAgICBWZWN0b3Igc2VydmljZXMgPSAoVmVjdG9yKSBpbnF1aXJ5QVBJVG9TZXJ2aWNlcy5nZXQoaW5xdWlyeUFQSSk7Ci0gICAgICBVRERJUHJveHkgcHJveHk7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgUHJvcGVydGllcyBwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7Ci0gICAgICAgIHByb3BzLnB1dChBY3Rpb25JbnB1dHMuVFJBTlNQT1JUX0NMQVNTX05BTUUsIEFjdGlvbklucHV0cy5UUkFTUE9SVF9DTEFTUyk7Ci0gICAgICAgIHByb3h5ID0gbmV3IFVERElQcm94eShwcm9wcyk7Ci0gICAgICAgIHByb3h5LnNldElucXVpcnlVUkwobmV3IFVSTChpbnF1aXJ5QVBJKSk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgICB7Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgc2VydmljZXMuc2l6ZSgpOyBqKyspCi0gICAgICAgIHsKLSAgICAgICAgICBXc2lsVWRkaVNlcnZpY2VFbGVtZW50IHVkZGlTZXJ2aWNlRWxlbWVudCA9IChXc2lsVWRkaVNlcnZpY2VFbGVtZW50KSBzZXJ2aWNlcy5nZXQoaik7Ci0gICAgICAgICAgdWRkaVNlcnZpY2VFbGVtZW50LnNldFNlcnZpY2VEZWZpbml0aW9uKG51bGwpOwotICAgICAgICB9Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotICAgICAgVmVjdG9yIHNlcnZpY2VLZXlzID0gbmV3IFZlY3RvcigpOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBzZXJ2aWNlcy5zaXplKCk7IGorKykKLSAgICAgIHsKLSAgICAgICAgc2VydmljZUtleXMuYWRkKCgoV3NpbFVkZGlTZXJ2aWNlRWxlbWVudCkgc2VydmljZXMuZ2V0KGopKS5nZXRVRERJU2VydmljZUtleSgpKTsKLSAgICAgIH0KLSAgICAgIFZlY3RvciBidXNpbmVzc1NlcnZpY2VzOwotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGJ1c2luZXNzU2VydmljZXMgPSBwcm94eS5nZXRfc2VydmljZURldGFpbChzZXJ2aWNlS2V5cykuZ2V0QnVzaW5lc3NTZXJ2aWNlVmVjdG9yKCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KQotICAgICAgewotICAgICAgICBidXNpbmVzc1NlcnZpY2VzID0gbmV3IFZlY3RvcigpOwotICAgICAgICBpZiAoc2VydmljZUtleXMuc2l6ZSgpID4gMSkKLSAgICAgICAgewotICAgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgc2VydmljZUtleXMuc2l6ZSgpOyBrKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGJ1c2luZXNzU2VydmljZXMuYWRkKChCdXNpbmVzc1NlcnZpY2UpIHByb3h5LmdldF9zZXJ2aWNlRGV0YWlsKChTdHJpbmcpIHNlcnZpY2VLZXlzLmdldChrKSkuZ2V0QnVzaW5lc3NTZXJ2aWNlVmVjdG9yKCkuZ2V0KDApKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBidXNpbmVzc1NlcnZpY2VzLmFkZChudWxsKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgIGJ1c2luZXNzU2VydmljZXMuYWRkKG51bGwpOwotICAgICAgfQotICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBzZXJ2aWNlcy5zaXplKCk7IGsrKykKLSAgICAgIHsKLSAgICAgICAgQnVzaW5lc3NTZXJ2aWNlIGJzID0gKEJ1c2luZXNzU2VydmljZSkgYnVzaW5lc3NTZXJ2aWNlcy5nZXQoayk7Ci0gICAgICAgIFdzaWxVZGRpU2VydmljZUVsZW1lbnQgdWRkaVNlcnZpY2VFbGVtZW50ID0gKFdzaWxVZGRpU2VydmljZUVsZW1lbnQpIHNlcnZpY2VzLmdldChrKTsKLSAgICAgICAgdWRkaVNlcnZpY2VFbGVtZW50LnNldFNlcnZpY2VEZWZpbml0aW9uKGJzKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgTGlzdE1hbmFnZXIgZ2V0QWxsV1NJTExpbmtzKCkKLSAgewotICAgIExpc3RNYW5hZ2VyIHdzaWxMaW5rc18gPSAoTGlzdE1hbmFnZXIpIGdldFByb3BlcnR5QXNPYmplY3QoV3NpbE1vZGVsQ29uc3RhbnRzLkxJU1RfTUFOQUdFUl9XU0lMX0xJTktTKTsKLSAgICBpZiAod3NpbExpbmtzXyA9PSBudWxsKQotICAgIHsKLSAgICAgIGluaXRBbGxXU0lMTGlua3MoKTsKLSAgICAgIHdzaWxMaW5rc18gPSAoTGlzdE1hbmFnZXIpIGdldFByb3BlcnR5QXNPYmplY3QoV3NpbE1vZGVsQ29uc3RhbnRzLkxJU1RfTUFOQUdFUl9XU0lMX0xJTktTKTsKLSAgICB9Ci0gICAgcmV0dXJuIHdzaWxMaW5rc187Ci0gIH0KLQotICBwdWJsaWMgTGlzdE1hbmFnZXIgZ2V0QWxsVURESUxpbmtzKCkKLSAgewotICAgIExpc3RNYW5hZ2VyIHVkZGlMaW5rc18gPSAoTGlzdE1hbmFnZXIpIGdldFByb3BlcnR5QXNPYmplY3QoV3NpbE1vZGVsQ29uc3RhbnRzLkxJU1RfTUFOQUdFUl9VRERJX0xJTktTKTsKLSAgICBpZiAodWRkaUxpbmtzXyA9PSBudWxsKQotICAgIHsKLSAgICAgIGluaXRBbGxVRERJTGlua3MoKTsKLSAgICAgIHVkZGlMaW5rc18gPSAoTGlzdE1hbmFnZXIpIGdldFByb3BlcnR5QXNPYmplY3QoV3NpbE1vZGVsQ29uc3RhbnRzLkxJU1RfTUFOQUdFUl9VRERJX0xJTktTKTsKLSAgICB9Ci0gICAgcmV0dXJuIHVkZGlMaW5rc187Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgaW5pdEFsbFVERElMaW5rcygpCi0gIHsKLSAgICBMaXN0TWFuYWdlciB1ZGRpTGlua3NfID0gbmV3IExpc3RNYW5hZ2VyKCk7Ci0gICAgSW5zcGVjdGlvbiBpbnNwZWN0aW9uID0gd3NpbERvY18uZ2V0SW5zcGVjdGlvbigpOwotICAgIExpbmtbXSBsaW5rTGlzdCA9IGluc3BlY3Rpb24uZ2V0TGlua3MoKTsKLSAgICBWZWN0b3IgdWRkaUJ1c2luZXNzRWxlbWVudHMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaW5rTGlzdC5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICAvLyBwcm9jZXNzIGFueSBsaW5rcyB3aXRoIFVEREkgbmFtZXNwYWNlCi0gICAgICBTdHJpbmcgbmFtZXNwYWNlID0gbGlua0xpc3RbaV0uZ2V0UmVmZXJlbmNlZE5hbWVzcGFjZSgpOwotICAgICAgaWYgKG5hbWVzcGFjZSA9PSBudWxsKQotICAgICAgICBjb250aW51ZTsKLSAgICAgIGVsc2UgaWYgKChuYW1lc3BhY2UuZXF1YWxzKE5BTUVTUEFDRV9VRERJX1YxKSB8fCBuYW1lc3BhY2UuZXF1YWxzKE5BTUVTUEFDRV9VRERJX1YyKSkpCi0gICAgICB7Ci0gICAgICAgIFdzaWxVZGRpQnVzaW5lc3NFbGVtZW50IHVkZGlCdXNpbmVzc0VsZW1lbnQgPSBuZXcgV3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQobmFtZXNwYWNlLCBnZXRNb2RlbCgpLCBsaW5rTGlzdFtpXSk7Ci0gICAgICAgIHVkZGlCdXNpbmVzc0VsZW1lbnQuc2V0QmFzZVdzaWxVUkwoZ2V0V3NpbFVybCgpKTsKLSAgICAgICAgaWYgKHVkZGlCdXNpbmVzc0VsZW1lbnQudmFsaWRhdGVVRERJTGluaygpKQotICAgICAgICB7Ci0gICAgICAgICAgdWRkaUJ1c2luZXNzRWxlbWVudC5zZXROYW1lKHVkZGlCdXNpbmVzc0VsZW1lbnQuZ2V0TmFtZSgpKTsKLSAgICAgICAgICB1ZGRpQnVzaW5lc3NFbGVtZW50cy5hZGQodWRkaUJ1c2luZXNzRWxlbWVudCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmVmcmVzaFNlcnZpY2VQcm92aWRlcnNGcm9tUmVnaXN0cnkodWRkaUJ1c2luZXNzRWxlbWVudHMpOwotICAgIGZvciAoSXRlcmF0b3IgaXQgPSB1ZGRpQnVzaW5lc3NFbGVtZW50cy5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIHVkZGlMaW5rc18uYWRkKG5ldyBMaXN0RWxlbWVudChpdC5uZXh0KCkpKTsKLSAgICB9Ci0gICAgc2V0UHJvcGVydHlBc09iamVjdChXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1VERElfTElOS1MsIHVkZGlMaW5rc18pOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVmcmVzaFNlcnZpY2VQcm92aWRlcnNGcm9tUmVnaXN0cnkoVmVjdG9yIHVkZGlCdXNpbmVzc0VsZW1lbnRzKQotICB7Ci0gICAgSGFzaE1hcCBpbnF1aXJ5QVBJVG9CdXNpbmVzc2VzID0gbmV3IEhhc2hNYXAoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHVkZGlCdXNpbmVzc0VsZW1lbnRzLnNpemUoKTsgaSsrKQotICAgIHsKLSAgICAgIFdzaWxVZGRpQnVzaW5lc3NFbGVtZW50IHVkZGlCdXNpbmVzc0VsZW1lbnQgPSAoV3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQpIHVkZGlCdXNpbmVzc0VsZW1lbnRzLmdldChpKTsKLSAgICAgIFN0cmluZyBpbnF1aXJ5QVBJID0gdWRkaUJ1c2luZXNzRWxlbWVudC5nZXRVRERJTGlua0lucXVpcnlBUEkoKTsKLSAgICAgIGlmIChWYWxpZGF0b3IudmFsaWRhdGVVUkwoaW5xdWlyeUFQSSkpCi0gICAgICB7Ci0gICAgICAgIFZlY3RvciBidXNpbmVzc2VzID0gKFZlY3RvcikgaW5xdWlyeUFQSVRvQnVzaW5lc3Nlcy5nZXQoaW5xdWlyeUFQSSk7Ci0gICAgICAgIGlmIChidXNpbmVzc2VzID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBidXNpbmVzc2VzID0gbmV3IFZlY3RvcigpOwotICAgICAgICAgIGlucXVpcnlBUElUb0J1c2luZXNzZXMucHV0KGlucXVpcnlBUEksIGJ1c2luZXNzZXMpOwotICAgICAgICB9Ci0gICAgICAgIGJ1c2luZXNzZXMuYWRkKHVkZGlCdXNpbmVzc0VsZW1lbnQpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICB1ZGRpQnVzaW5lc3NFbGVtZW50LnNldFNlcnZpY2VQcm92aWRlcihudWxsKTsKLSAgICB9Ci0gICAgZm9yIChJdGVyYXRvciBpdCA9IGlucXVpcnlBUElUb0J1c2luZXNzZXMua2V5U2V0KCkuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBTdHJpbmcgaW5xdWlyeUFQSSA9IChTdHJpbmcpIGl0Lm5leHQoKTsKLSAgICAgIFZlY3RvciBidXNpbmVzc2VzID0gKFZlY3RvcikgaW5xdWlyeUFQSVRvQnVzaW5lc3Nlcy5nZXQoaW5xdWlyeUFQSSk7Ci0gICAgICBVRERJUHJveHkgcHJveHk7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgUHJvcGVydGllcyBwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7Ci0gICAgICAgIHByb3BzLnB1dChBY3Rpb25JbnB1dHMuVFJBTlNQT1JUX0NMQVNTX05BTUUsIEFjdGlvbklucHV0cy5UUkFTUE9SVF9DTEFTUyk7Ci0gICAgICAgIHByb3h5ID0gbmV3IFVERElQcm94eShwcm9wcyk7Ci0gICAgICAgIHByb3h5LnNldElucXVpcnlVUkwobmV3IFVSTChpbnF1aXJ5QVBJKSk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgYnVzaW5lc3Nlcy5zaXplKCk7IGorKykKLSAgICAgICAgewotICAgICAgICAgIFdzaWxVZGRpQnVzaW5lc3NFbGVtZW50IHVkZGlCdXNpbmVzc0VsZW1lbnQgPSAoV3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQpIGJ1c2luZXNzZXMuZ2V0KGopOwotICAgICAgICAgIHVkZGlCdXNpbmVzc0VsZW1lbnQuc2V0U2VydmljZVByb3ZpZGVyKG51bGwpOwotICAgICAgICB9Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotICAgICAgVmVjdG9yIGJ1c2luZXNzS2V5cyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgYnVzaW5lc3Nlcy5zaXplKCk7IGorKykKLSAgICAgIHsKLSAgICAgICAgYnVzaW5lc3NLZXlzLmFkZCgoKFdzaWxVZGRpQnVzaW5lc3NFbGVtZW50KSBidXNpbmVzc2VzLmdldChqKSkuZ2V0VURESUxpbmtCdXNpbmVzc0tleSgpKTsKLSAgICAgIH0KLSAgICAgIFZlY3RvciBidXNpbmVzc0VudGl0aWVzOwotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGJ1c2luZXNzRW50aXRpZXMgPSBwcm94eS5nZXRfYnVzaW5lc3NEZXRhaWwoYnVzaW5lc3NLZXlzKS5nZXRCdXNpbmVzc0VudGl0eVZlY3RvcigpOwotICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleCkKLSAgICAgIHsKLSAgICAgICAgYnVzaW5lc3NFbnRpdGllcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgaWYgKGJ1c2luZXNzS2V5cy5zaXplKCkgPiAxKQotICAgICAgICB7Ci0gICAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBidXNpbmVzc0tleXMuc2l6ZSgpOyBrKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGJ1c2luZXNzRW50aXRpZXMuYWRkKChCdXNpbmVzc0VudGl0eSkgcHJveHkuZ2V0X2J1c2luZXNzRGV0YWlsKChTdHJpbmcpIGJ1c2luZXNzS2V5cy5nZXQoaykpLmdldEJ1c2luZXNzRW50aXR5VmVjdG9yKCkuZ2V0KDApKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBidXNpbmVzc0VudGl0aWVzLmFkZChudWxsKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgIGJ1c2luZXNzRW50aXRpZXMuYWRkKG51bGwpOwotICAgICAgfQotICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBidXNpbmVzc2VzLnNpemUoKTsgaysrKQotICAgICAgewotICAgICAgICBCdXNpbmVzc0VudGl0eSBiZSA9IChCdXNpbmVzc0VudGl0eSkgYnVzaW5lc3NFbnRpdGllcy5nZXQoayk7Ci0gICAgICAgIFdzaWxVZGRpQnVzaW5lc3NFbGVtZW50IHVkZGlCdXNpbmVzc0VsZW1lbnQgPSAoV3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQpIGJ1c2luZXNzZXMuZ2V0KGspOwotICAgICAgICB1ZGRpQnVzaW5lc3NFbGVtZW50LnNldFNlcnZpY2VQcm92aWRlcihiZSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGluaXRBbGxXU0lMTGlua3MoKQotICB7Ci0gICAgTGlzdE1hbmFnZXIgd3NpbExpbmtzXyA9IG5ldyBMaXN0TWFuYWdlcigpOwotICAgIEluc3BlY3Rpb24gaW5zcGVjdGlvbiA9IHdzaWxEb2NfLmdldEluc3BlY3Rpb24oKTsKLSAgICBMaW5rW10gbGlua0xpc3QgPSBpbnNwZWN0aW9uLmdldExpbmtzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaW5rTGlzdC5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICAvLyBwcm9jZXNzIGFueSBsaW5rcyB3aXRoIFVEREkgbmFtZXNwYWNlCi0gICAgICBTdHJpbmcgbmFtZXNwYWNlID0gbGlua0xpc3RbaV0uZ2V0UmVmZXJlbmNlZE5hbWVzcGFjZSgpOwotICAgICAgaWYgKG5hbWVzcGFjZSA9PSBudWxsKQotICAgICAgICBjb250aW51ZTsKLSAgICAgIGVsc2UgaWYgKG5hbWVzcGFjZS5lcXVhbHMoTkFNRVNQQUNFX1dTSUxfSU5TUEVDVElPTikpCi0gICAgICB7Ci0gICAgICAgIFdzaWxXc2lsTGlua0VsZW1lbnQgd3NpbExpbmtFbGVtZW50ID0gbmV3IFdzaWxXc2lsTGlua0VsZW1lbnQobmFtZXNwYWNlLCBnZXRNb2RlbCgpLCBsaW5rTGlzdFtpXSk7Ci0gICAgICAgIHdzaWxMaW5rRWxlbWVudC5zZXRCYXNlV3NpbFVSTChnZXRXc2lsVXJsKCkpOwotICAgICAgICBpZiAod3NpbExpbmtFbGVtZW50LnZhbGlkYXRlV1NJTExpbmsoKSkKLSAgICAgICAgewotICAgICAgICAgIHdzaWxMaW5rRWxlbWVudC5zZXROYW1lKHdzaWxMaW5rRWxlbWVudC5nZXRXU0lMTGlua0xvY2F0aW9uKCkpOwotICAgICAgICAgIHdzaWxMaW5rc18uYWRkKG5ldyBMaXN0RWxlbWVudCh3c2lsTGlua0VsZW1lbnQpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBzZXRQcm9wZXJ0eUFzT2JqZWN0KFdzaWxNb2RlbENvbnN0YW50cy5MSVNUX01BTkFHRVJfV1NJTF9MSU5LUywgd3NpbExpbmtzXyk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9kYXRhbW9kZWwvV3NpbExpbmtFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvZGF0YW1vZGVsL1dzaWxMaW5rRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NmI1OTRlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9kYXRhbW9kZWwvV3NpbExpbmtFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuQWJzdHJhY3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLkxpbms7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLQotLyoqCi0qIFRoZSBkYXRhIG1vZGVsIGVsZW1lbnQgdGhhdCByZXByZXNlbnRzIAotKiBhIFdTSUwgTGluawotKi8KLXB1YmxpYyBjbGFzcyBXc2lsTGlua0VsZW1lbnQgZXh0ZW5kcyBXc2lsQ29tbW9uRWxlbWVudAotewotICBwcm90ZWN0ZWQgTGluayBsaW5rXzsKLQotICBwdWJsaWMgV3NpbExpbmtFbGVtZW50KFN0cmluZyBuYW1lLCBNb2RlbCBtb2RlbCwgTGluayBsaW5rKQotICB7Ci0gICAgc3VwZXIobmFtZSwgbW9kZWwpOwotICAgIGxpbmtfID0gbGluazsKLSAgfQotCi0gIHB1YmxpYyBWZWN0b3IgZ2V0TGlua0Fic3RyYWN0TGFuZ3MoKQotICB7Ci0gICAgVmVjdG9yIHYgPSBuZXcgVmVjdG9yKCk7Ci0gICAgQWJzdHJhY3RbXSBhYnN0cmFjdHMgPSBsaW5rXy5nZXRBYnN0cmFjdHMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGFic3RyYWN0cy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICB2LmFkZChhYnN0cmFjdHNbaV0uZ2V0TGFuZygpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHY7Ci0gIH0KLQotICBwdWJsaWMgVmVjdG9yIGdldExpbmtBYnN0cmFjdHMoKQotICB7Ci0gICAgVmVjdG9yIHYgPSBuZXcgVmVjdG9yKCk7Ci0gICAgQWJzdHJhY3RbXSBhYnN0cmFjdHMgPSBsaW5rXy5nZXRBYnN0cmFjdHMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGFic3RyYWN0cy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICB2LmFkZChhYnN0cmFjdHNbaV0uZ2V0VGV4dCgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHY7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9kYXRhbW9kZWwvV3NpbFNlcnZpY2VFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvZGF0YW1vZGVsL1dzaWxTZXJ2aWNlRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODkzNWQzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9kYXRhbW9kZWwvV3NpbFNlcnZpY2VFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuQWJzdHJhY3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLlNlcnZpY2VOYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci0KLS8qKgotKiBUaGUgZGF0YSBtb2RlbCBlbGVtZW50IHRoYXQgcmVwcmVzZW50cyAKLSogYSBXU0lMIFNlcnZpY2UKLSovCi1wdWJsaWMgY2xhc3MgV3NpbFNlcnZpY2VFbGVtZW50IGV4dGVuZHMgV3NpbENvbW1vbkVsZW1lbnQKLXsKLSAgICBwcm90ZWN0ZWQgU2VydmljZSBzZXJ2aWNlXzsKLQotICAgIHB1YmxpYyBXc2lsU2VydmljZUVsZW1lbnQoU3RyaW5nIG5hbWUsIE1vZGVsIG1vZGVsLCBTZXJ2aWNlIHNlcnZpY2UpIHsKLSAgICAgICAgc3VwZXIobmFtZSwgbW9kZWwpOwotICAgICAgICBzZXJ2aWNlXyA9IHNlcnZpY2U7Ci0gICAgfQotCi0gICAgcHVibGljIFZlY3RvciBnZXRTZXJ2aWNlTmFtZUxhbmdzKCkgewotICAgICAgICBWZWN0b3IgdiA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgU2VydmljZU5hbWVbXSBzZXJ2aWNlTmFtZXMgPSBzZXJ2aWNlXy5nZXRTZXJ2aWNlTmFtZXMoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZXJ2aWNlTmFtZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIHYuYWRkKHNlcnZpY2VOYW1lc1tpXS5nZXRMYW5nKCkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB2OwotICAgIH0KLQotICAgIHB1YmxpYyBWZWN0b3IgZ2V0U2VydmljZU5hbWVzKCkgewotICAgICAgICBWZWN0b3IgdiA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgU2VydmljZU5hbWVbXSBzZXJ2aWNlTmFtZXMgPSBzZXJ2aWNlXy5nZXRTZXJ2aWNlTmFtZXMoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZXJ2aWNlTmFtZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIHYuYWRkKHNlcnZpY2VOYW1lc1tpXS5nZXRUZXh0KCkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB2OwotICAgIH0KLQotICAgIHB1YmxpYyBWZWN0b3IgZ2V0U2VydmljZUFic3RyYWN0TGFuZ3MoKSB7Ci0gICAgICAgIFZlY3RvciB2ID0gbmV3IFZlY3RvcigpOwotICAgICAgICBBYnN0cmFjdFtdIGFic3RyYWN0cyA9IHNlcnZpY2VfLmdldEFic3RyYWN0cygpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFic3RyYWN0cy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgdi5hZGQoYWJzdHJhY3RzW2ldLmdldExhbmcoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHY7Ci0gICAgfQotCi0gICAgcHVibGljIFZlY3RvciBnZXRTZXJ2aWNlQWJzdHJhY3RzKCkgewotICAgICAgICBWZWN0b3IgdiA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgQWJzdHJhY3RbXSBhYnN0cmFjdHMgPSBzZXJ2aWNlXy5nZXRBYnN0cmFjdHMoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhYnN0cmFjdHMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIHYuYWRkKGFic3RyYWN0c1tpXS5nZXRUZXh0KCkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB2OwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9kYXRhbW9kZWwvV3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9kYXRhbW9kZWwvV3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjNlNTAwMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvZGF0YW1vZGVsL1dzaWxVZGRpQnVzaW5lc3NFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWw7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuTGluazsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuZXh0ZW5zaW9uLkV4dGVuc2lvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLmV4dGVuc2lvbi51ZGRpLkJ1c2luZXNzRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5WYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5idXNpbmVzcy5CdXNpbmVzc0VudGl0eTsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuRGlzY292ZXJ5VVJMOwotCi0vKioKLSogVGhlIGRhdGEgbW9kZWwgZWxlbWVudCB0aGF0IHJlcHJlc2VudHMgCi0qIGEgVURESSBzZXJ2aWNlIGluIGEgV1NJTCBkb2N1bWVudAotKi8KLXB1YmxpYyBjbGFzcyBXc2lsVWRkaUJ1c2luZXNzRWxlbWVudCBleHRlbmRzIFdzaWxMaW5rRWxlbWVudAotewotICAgIHByaXZhdGUgQnVzaW5lc3NFbnRpdHkgYnVzRW50aXR5XzsKLQotICAgIHB1YmxpYyBXc2lsVWRkaUJ1c2luZXNzRWxlbWVudChTdHJpbmcgbmFtZSwgTW9kZWwgbW9kZWwsIExpbmsgbGluaykgewotICAgICAgICBzdXBlcihuYW1lLCBtb2RlbCwgbGluayk7Ci0gICAgICAgIGJ1c0VudGl0eV8gPSBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VQcm92aWRlcihCdXNpbmVzc0VudGl0eSBiZSkgewotICAgICAgYnVzRW50aXR5XyA9IGJlOwotICAgIH0KLQotICAgIHB1YmxpYyBCdXNpbmVzc0VudGl0eSBnZXRTZXJ2aWNlUHJvdmlkZXIoKSB7Ci0gICAgICAgIHJldHVybiBidXNFbnRpdHlfOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLSAgICAgICAgcmV0dXJuIChidXNFbnRpdHlfICA9PSBudWxsKSA/IG51bGwgOiBidXNFbnRpdHlfLmdldERlZmF1bHROYW1lU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIChidXNFbnRpdHlfID09IG51bGwpID8gbnVsbCA6IGJ1c0VudGl0eV8uZ2V0RGVmYXVsdERlc2NyaXB0aW9uU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRVRERJTGlua0lucXVpcnlBUEkoKSB7Ci0gICAgICAgIEJ1c2luZXNzRGVzY3JpcHRpb24gYmQgPSBnZXRWYWxpZFVERElCdXNpbmVzc0Rlc2NyaXB0aW9uKCk7Ci0gICAgICAgIHJldHVybiAoYmQgPT0gbnVsbCkgPyBudWxsIDogYmQuZ2V0TG9jYXRpb24oKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFVERElMaW5rQnVzaW5lc3NLZXkoKSB7Ci0gICAgICAgIEJ1c2luZXNzRGVzY3JpcHRpb24gYmQgPSBnZXRWYWxpZFVERElCdXNpbmVzc0Rlc2NyaXB0aW9uKCk7Ci0gICAgICAgIHJldHVybiAoYmQgPT0gbnVsbCkgPyBudWxsIDogYmQuZ2V0QnVzaW5lc3NLZXkoKS5nZXRUZXh0KCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRVRERJTGlua0Rpc2NvdmVyeVVSTCgpIHsKLSAgICAgICAgQnVzaW5lc3NEZXNjcmlwdGlvbiBiZCA9IGdldFZhbGlkVURESUJ1c2luZXNzRGVzY3JpcHRpb24oKTsKLSAgICAgICAgaWYgKGJkID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBEaXNjb3ZlcnlVUkwgZGlzY292ZXJ5VVJMID0gYmQuZ2V0RGlzY292ZXJ5VVJMKCk7Ci0gICAgICAgICAgICByZXR1cm4gKGRpc2NvdmVyeVVSTCA9PSBudWxsKSA/IG51bGwgOiBkaXNjb3ZlcnlVUkwuZ2V0VGV4dCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGVVRERJTGluaygpIHsKLSAgICAgICAgQnVzaW5lc3NEZXNjcmlwdGlvbiBiZCA9IGdldFZhbGlkVURESUJ1c2luZXNzRGVzY3JpcHRpb24oKTsKLSAgICAgICAgcmV0dXJuIChiZCAhPSBudWxsKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIEJ1c2luZXNzRGVzY3JpcHRpb24gZ2V0VmFsaWRVRERJQnVzaW5lc3NEZXNjcmlwdGlvbigpIHsKLSAgICAgICAgRXh0ZW5zaW9uRWxlbWVudCBleHRFbGVtZW50ID0gbGlua18uZ2V0RXh0ZW5zaW9uRWxlbWVudCgpOwotICAgICAgICAvLyBUaGUgZXh0ZW5zaW9uIGVsZW1lbnQgb2YgYSBVRERJIGxpbmsKLSAgICAgICAgLy8gbXVzdCBiZSBhIEJ1c2luZXNzRGVzY3JpcHRpb24gZWxlbWVudAotICAgICAgICBpZiAoIShleHRFbGVtZW50IGluc3RhbmNlb2YgQnVzaW5lc3NEZXNjcmlwdGlvbikpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgLy8gQSB2YWxpZCBCdXNpbmVzc0Rlc2NyaXB0aW9uIG11c3QgaGF2ZSBhbiBpbnF1aXJ5IEFQSQotICAgICAgICBTdHJpbmcgaW5xdWlyeUFQSSA9ICgoQnVzaW5lc3NEZXNjcmlwdGlvbilleHRFbGVtZW50KS5nZXRMb2NhdGlvbigpOwotICAgICAgICBpZiAoIVZhbGlkYXRvci52YWxpZGF0ZVVSTChpbnF1aXJ5QVBJKSkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAvLyBBIHZhbGlkIEJ1c2luZXNzRGVzY3JpcHRpb24gbXVzdCBoYXZlIGEgYnVzaW5lc3Mga2V5Ci0gICAgICAgIFN0cmluZyBidXNpbmVzc0tleSA9ICgoQnVzaW5lc3NEZXNjcmlwdGlvbilleHRFbGVtZW50KS5nZXRCdXNpbmVzc0tleSgpLmdldFRleHQoKTsKLSAgICAgICAgaWYgKGJ1c2luZXNzS2V5ID09IG51bGwgfHwgYnVzaW5lc3NLZXkubGVuZ3RoKCkgPD0gMCkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICByZXR1cm4gKEJ1c2luZXNzRGVzY3JpcHRpb24pZXh0RWxlbWVudDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotICAgICAgICByZXR1cm4gZ2V0TmFtZSgpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9kYXRhbW9kZWwvV3NpbFVkZGlTZXJ2aWNlRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2RhdGFtb2RlbC9Xc2lsVWRkaVNlcnZpY2VFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0MThkYzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2RhdGFtb2RlbC9Xc2lsVWRkaVNlcnZpY2VFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsOwotCi1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLkRlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5TZXJ2aWNlOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5leHRlbnNpb24uRXh0ZW5zaW9uRWxlbWVudDsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuZXh0ZW5zaW9uLnVkZGkuU2VydmljZURlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkudXRpbC5VZGRpNGpIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVmFsaWRhdG9yOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuc2VydmljZS5CdXNpbmVzc1NlcnZpY2U7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkRpc2NvdmVyeVVSTDsKLQotLyoqCi0qIFRoZSBkYXRhIG1vZGVsIGVsZW1lbnQgdGhhdCByZXByZXNlbnRzIAotKiBhIFVEREkgc2VydmljZSBpbiBhIFdTSUwgZG9jdW1lbnQKLSovCi1wdWJsaWMgY2xhc3MgV3NpbFVkZGlTZXJ2aWNlRWxlbWVudCBleHRlbmRzIFdzaWxTZXJ2aWNlRWxlbWVudAotewotICAgIHByaXZhdGUgQnVzaW5lc3NTZXJ2aWNlIGJ1c1NlcnZpY2VfOwotCi0gICAgcHVibGljIFdzaWxVZGRpU2VydmljZUVsZW1lbnQoU3RyaW5nIG5hbWUsIE1vZGVsIG1vZGVsLCBTZXJ2aWNlIHNlcnZpY2UpIHsKLSAgICAgICAgc3VwZXIobmFtZSwgbW9kZWwsIHNlcnZpY2UpOwotICAgICAgICBidXNTZXJ2aWNlXyA9IG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0U2VydmljZURlZmluaXRpb24oQnVzaW5lc3NTZXJ2aWNlIGJ1c1NlcnZpY2UpIHsKLSAgICAgICAgYnVzU2VydmljZV8gPSBidXNTZXJ2aWNlOwotICAgIH0KLQotICAgIHB1YmxpYyBCdXNpbmVzc1NlcnZpY2UgZ2V0U2VydmljZURlZmluaXRpb24oKSB7Ci0gICAgICAgIHJldHVybiBidXNTZXJ2aWNlXzsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0gICAgICAgIHJldHVybiAoYnVzU2VydmljZV8gPT0gbnVsbCkgPyBudWxsIDogYnVzU2VydmljZV8uZ2V0RGVmYXVsdE5hbWVTdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgewotICAgICAgICByZXR1cm4gKGJ1c1NlcnZpY2VfID09IG51bGwpID8gbnVsbCA6IGJ1c1NlcnZpY2VfLmdldERlZmF1bHREZXNjcmlwdGlvblN0cmluZygpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VURESVNlcnZpY2VJbnF1aXJ5QVBJKCkgewotICAgICAgICBTZXJ2aWNlRGVzY3JpcHRpb24gc2QgPSBnZXRWYWxpZFVERElTZXJ2aWNlRGVzY3JpcHRpb24oKTsKLSAgICAgICAgcmV0dXJuIChzZCA9PSBudWxsKSA/IG51bGwgOiBzZC5nZXRMb2NhdGlvbigpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VURESVNlcnZpY2VLZXkoKSB7Ci0gICAgICAgIFNlcnZpY2VEZXNjcmlwdGlvbiBzZCA9IGdldFZhbGlkVURESVNlcnZpY2VEZXNjcmlwdGlvbigpOwotICAgICAgICByZXR1cm4gKHNkID09IG51bGwpID8gbnVsbCA6IHNkLmdldFNlcnZpY2VLZXkoKS5nZXRUZXh0KCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRVRERJU2VydmljZURpc2NvdmVyeVVSTCgpIHsKLSAgICAgICAgU2VydmljZURlc2NyaXB0aW9uIHNkID0gZ2V0VmFsaWRVRERJU2VydmljZURlc2NyaXB0aW9uKCk7Ci0gICAgICAgIGlmIChzZCA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgRGlzY292ZXJ5VVJMIGRpc2NvdmVyeVVSTCA9IHNkLmdldERpc2NvdmVyeVVSTCgpOwotICAgICAgICAgICAgcmV0dXJuIChkaXNjb3ZlcnlVUkwgPT0gbnVsbCkgPyBudWxsIDogZGlzY292ZXJ5VVJMLmdldFRleHQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgU2VydmljZURlc2NyaXB0aW9uIGdldFZhbGlkVURESVNlcnZpY2VEZXNjcmlwdGlvbigpIHsKLSAgICAgICAgRGVzY3JpcHRpb25bXSBkZXNjTGlzdCA9IHNlcnZpY2VfLmdldERlc2NyaXB0aW9ucygpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NMaXN0Lmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBFeHRlbnNpb25FbGVtZW50IGV4dEVsZW1lbnQgPSBkZXNjTGlzdFtpXS5nZXRFeHRlbnNpb25FbGVtZW50KCk7Ci0gICAgICAgICAgICAvLyBUaGUgZXh0ZW5zaW9uIGVsZW1lbnQgb2YgYSBVRERJIHNlcnZpY2UgZGVzY3JpcHRpb24KLSAgICAgICAgICAgIC8vIG11c3QgYmUgYSBTZXJ2aWNlRGVzY3JpcHRpb24gZWxlbWVudAotICAgICAgICAgICAgaWYgKCEoZXh0RWxlbWVudCBpbnN0YW5jZW9mIFNlcnZpY2VEZXNjcmlwdGlvbikpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAvLyBBIHZhbGlkIFNlcnZpY2VEZXNjcmlwdGlvbiBtdXN0IGhhdmUgYW4gaW5xdWlyeSBBUEkKLSAgICAgICAgICAgIGlmICghVmFsaWRhdG9yLnZhbGlkYXRlVVJMKCgoU2VydmljZURlc2NyaXB0aW9uKWV4dEVsZW1lbnQpLmdldExvY2F0aW9uKCkpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgLy8gQSB2YWxpZCBTZXJ2aWNlRGVzY3JpcHRpb24gbXVzdCBoYXZlIGEgc2VydmljZSBrZXkKLSAgICAgICAgICAgIFN0cmluZyBzZXJ2aWNlS2V5ID0gKChTZXJ2aWNlRGVzY3JpcHRpb24pZXh0RWxlbWVudCkuZ2V0U2VydmljZUtleSgpLmdldFRleHQoKTsKLSAgICAgICAgICAgIGlmIChzZXJ2aWNlS2V5ID09IG51bGwgfHwgc2VydmljZUtleS5sZW5ndGgoKSA8PSAwKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgcmV0dXJuIChTZXJ2aWNlRGVzY3JpcHRpb24pZXh0RWxlbWVudDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZVVERElTZXJ2aWNlKCkgewotICAgICAgICBTZXJ2aWNlRGVzY3JpcHRpb24gc2QgPSBnZXRWYWxpZFVERElTZXJ2aWNlRGVzY3JpcHRpb24oKTsKLSAgICAgICAgcmV0dXJuIChzZCAhPSBudWxsKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFdzZGxVcmwoKSB7Ci0gICAgICAgIHJldHVybiAobmV3IFVkZGk0akhlbHBlcigpKS5nZXRXU0RMKGdldFNlcnZpY2VEZWZpbml0aW9uKCksIG51bGwpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgICAgIHJldHVybiBnZXROYW1lKCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2RhdGFtb2RlbC9Xc2lsV3NkbFNlcnZpY2VFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvZGF0YW1vZGVsL1dzaWxXc2RsU2VydmljZUVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNiYWQzMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvZGF0YW1vZGVsL1dzaWxXc2RsU2VydmljZUVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5EZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuU2VydmljZTsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuZXh0ZW5zaW9uLkV4dGVuc2lvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLmV4dGVuc2lvbi53c2RsLkltcGxlbWVudGVkQmluZGluZzsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuZXh0ZW5zaW9uLndzZGwuUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5leHRlbnNpb24ud3NkbC5SZWZlcmVuY2VkU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLk1vZGVsOwotCi0vKioKLSogVGhlIGRhdGEgbW9kZWwgZWxlbWVudCB0aGF0IHJlcHJlc2VudHMgCi0qIGEgV1NETCBzZXJ2aWNlIGluIGEgV1NJTCBkb2N1bWVudAotKi8KLXB1YmxpYyBjbGFzcyBXc2lsV3NkbFNlcnZpY2VFbGVtZW50IGV4dGVuZHMgV3NpbFNlcnZpY2VFbGVtZW50Ci17Ci0gICAgcHVibGljIFdzaWxXc2RsU2VydmljZUVsZW1lbnQoU3RyaW5nIG5hbWUsIE1vZGVsIG1vZGVsLCBTZXJ2aWNlIHNlcnZpY2UpIHsKLSAgICAgICAgc3VwZXIobmFtZSwgbW9kZWwsIHNlcnZpY2UpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0V1NETFNlcnZpY2VVUkwoKSB7Ci0gICAgICAgIERlc2NyaXB0aW9uIGRlc2MgPSBnZXRWYWxpZFdTRExEZXNjcmlwdGlvbigpOwotICAgICAgICByZXR1cm4gKGRlc2MgPT0gbnVsbCkgPyBudWxsIDogbWFrZUFic29sdXRlKGRlc2MuZ2V0TG9jYXRpb24oKSk7Ci0gICAgfQotCi0gICAgcHVibGljIFZlY3RvciBnZXRXU0RMQmluZGluZygpIHsKLSAgICAgICAgVmVjdG9yIHYgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgIERlc2NyaXB0aW9uW10gZGVzY0xpc3QgPSBzZXJ2aWNlXy5nZXREZXNjcmlwdGlvbnMoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjTGlzdC5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgRXh0ZW5zaW9uRWxlbWVudCBleHRFbGVtZW50ID0gZGVzY0xpc3RbaV0uZ2V0RXh0ZW5zaW9uRWxlbWVudCgpOwotICAgICAgICAgICAgaWYgKGV4dEVsZW1lbnQgIT0gbnVsbCAmJiBleHRFbGVtZW50IGluc3RhbmNlb2YgUmVmZXJlbmNlKSB7Ci0gICAgICAgICAgICAgICAgUmVmZXJlbmNlZFNlcnZpY2UgcmVmU2VydmljZSA9ICgoUmVmZXJlbmNlKWV4dEVsZW1lbnQpLmdldFJlZmVyZW5jZWRTZXJ2aWNlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlZlNlcnZpY2UgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICB2LmFkZChyZWZTZXJ2aWNlLmdldFJlZmVyZW5jZWRTZXJ2aWNlTmFtZSgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgSW1wbGVtZW50ZWRCaW5kaW5nW10gaW1wbEJpbmRpbmdMaXN0ID0gKChSZWZlcmVuY2UpZXh0RWxlbWVudCkuZ2V0SW1wbGVtZW50ZWRCaW5kaW5ncygpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgaW1wbEJpbmRpbmdMaXN0Lmxlbmd0aDsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgIHYuYWRkKGltcGxCaW5kaW5nTGlzdFtqXS5nZXRCaW5kaW5nTmFtZSgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHY7Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgRGVzY3JpcHRpb24gZ2V0VmFsaWRXU0RMRGVzY3JpcHRpb24oKSB7Ci0gICAgICAgIERlc2NyaXB0aW9uW10gZGVzY0xpc3QgPSBzZXJ2aWNlXy5nZXREZXNjcmlwdGlvbnMoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjTGlzdC5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgLy8gc2tpcCB0aGlzIGRlc2NyaXB0aW9uIGlmIHRoZSBsb2NhdGlvaW4gYXR0cmlidXRlIGlzIGEgbWFsZm9ybWVkIFVSTAotICAgICAgICAgICAgU3RyaW5nIGxvY2F0aW9uID0gZGVzY0xpc3RbaV0uZ2V0TG9jYXRpb24oKTsKLSAgICAgICAgICAgIGlmIChsb2NhdGlvbiA9PSBudWxsIHx8IGxvY2F0aW9uLmxlbmd0aCgpIDw9IDApCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAvLyBza2lwIHRoaXMgZGVzY3JpcHRpb24gaWYgdGhlIGV4dGVuc2lvbiBlbGVtZW50IGluZGljYXRlcwotICAgICAgICAgICAgLy8gdGhhdCB0aGUgZGVzY3JpcHRpb24ncyBsb2NhdGlvbiBjb250YWlucyBvbmx5IHRoZSB3c2RsIGJpbmRpbmcKLSAgICAgICAgICAgIEV4dGVuc2lvbkVsZW1lbnQgZXh0RWxlbWVudCA9IGRlc2NMaXN0W2ldLmdldEV4dGVuc2lvbkVsZW1lbnQoKTsKLSAgICAgICAgICAgIGlmIChleHRFbGVtZW50ICE9IG51bGwgJiYgZXh0RWxlbWVudCBpbnN0YW5jZW9mIFJlZmVyZW5jZSkgewotICAgICAgICAgICAgICAgIEJvb2xlYW4gZW5kcG9pbnRQcmVzZW50ID0gKChSZWZlcmVuY2UpZXh0RWxlbWVudCkuZ2V0RW5kcG9pbnRQcmVzZW50KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGVuZHBvaW50UHJlc2VudCAhPSBudWxsICYmIGVuZHBvaW50UHJlc2VudC5ib29sZWFuVmFsdWUoKSA9PSBmYWxzZSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBhIHZhbGlkIGRlc2NyaXB0aW9uIGlzIGZvdW5kCi0gICAgICAgICAgICByZXR1cm4gZGVzY0xpc3RbaV07Ci0gICAgICAgIH0KLSAgICAgICAgLy8gbm8gdmFsaWQgZGVzY3JpcHRpb24gaXMgZm91bmQgZm9yIHRoaXMgc2VydmljZQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZVdTRExTZXJ2aWNlKCkgewotICAgICAgICBEZXNjcmlwdGlvbiBkZXNjID0gZ2V0VmFsaWRXU0RMRGVzY3JpcHRpb24oKTsKLSAgICAgICAgcmV0dXJuIChkZXNjICE9IG51bGwpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgICAgIHJldHVybiBnZXRXU0RMU2VydmljZVVSTCgpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9kYXRhbW9kZWwvV3NpbFdzaWxMaW5rRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2RhdGFtb2RlbC9Xc2lsV3NpbExpbmtFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5NGE1NzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL2RhdGFtb2RlbC9Xc2lsV3NpbExpbmtFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsOwotCi1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLkxpbms7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5Nb2RlbDsKLQotLyoqCi0qIFRoZSBkYXRhIG1vZGVsIGVsZW1lbnQgdGhhdCByZXByZXNlbnRzIAotKiBhIFdTSUwgbGluayBpbiBhIFdTSUwgZG9jdW1lbnQKLSovCi1wdWJsaWMgY2xhc3MgV3NpbFdzaWxMaW5rRWxlbWVudCBleHRlbmRzIFdzaWxMaW5rRWxlbWVudAotewotICBwdWJsaWMgV3NpbFdzaWxMaW5rRWxlbWVudChTdHJpbmcgbmFtZSwgTW9kZWwgbW9kZWwsIExpbmsgbGluaykKLSAgewotICAgIHN1cGVyKG5hbWUsIG1vZGVsLCBsaW5rKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V1NJTExpbmtMb2NhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gbWFrZUFic29sdXRlKGxpbmtfLmdldExvY2F0aW9uKCkpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGVXU0lMTGluaygpCi0gIHsKLSAgICByZXR1cm4gKGxpbmtfLmdldExvY2F0aW9uKCkgIT0gbnVsbCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIHJldHVybiBnZXRXU0lMTGlua0xvY2F0aW9uKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9BZGRCdXNpbmVzc1RvRmF2b3JpdGVzVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL0FkZEJ1c2luZXNzVG9GYXZvcml0ZXNUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3YjUzMjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL0FkZEJ1c2luZXNzVG9GYXZvcml0ZXNUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5BY3Rpb25Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLkFkZFRvRmF2b3JpdGVzQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuU2VsZWN0V1NJTFRvb2xBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBBZGRCdXNpbmVzc1RvRmF2b3JpdGVzVG9vbCBleHRlbmRzIEFjdGlvblRvb2wgewotICAgIHB1YmxpYyBBZGRCdXNpbmVzc1RvRmF2b3JpdGVzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgImltYWdlcy9mYXZvcml0ZXNfZW5hYmxlZC5naWYiLCAiaW1hZ2VzL2Zhdm9yaXRlc19oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdFdTSUxUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHRvb2xJZF8sIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0QWN0aW9uTGluaygpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gQWRkVG9GYXZvcml0ZXNBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgdG9vbElkXyk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL0FkZEJ1c2luZXNzVG9VRERJUGVyc3BlY3RpdmVUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvQWRkQnVzaW5lc3NUb1VERElQZXJzcGVjdGl2ZVRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjRmMmQ1OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvQWRkQnVzaW5lc3NUb1VERElQZXJzcGVjdGl2ZVRvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkFjdGlvblRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuQWRkQnVzaW5lc3NUb1VERElQZXJzcGVjdGl2ZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlNlbGVjdFdTSUxUb29sQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgQWRkQnVzaW5lc3NUb1VERElQZXJzcGVjdGl2ZVRvb2wgZXh0ZW5kcyBBY3Rpb25Ub29sIHsKLSAgICBwdWJsaWMgQWRkQnVzaW5lc3NUb1VERElQZXJzcGVjdGl2ZVRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJ3c2lsL2ltYWdlcy9hZGRfdG9fVURESV9wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZiIsICJ3c2lsL2ltYWdlcy9hZGRfdG9fVURESV9wZXJzcGVjdGl2ZV9oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdFdTSUxUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHRvb2xJZF8sIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0QWN0aW9uTGluaygpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gQWRkQnVzaW5lc3NUb1VERElQZXJzcGVjdGl2ZUFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCB0b29sSWRfKTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9BZGRTZXJ2aWNlVG9GYXZvcml0ZXNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvQWRkU2VydmljZVRvRmF2b3JpdGVzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTllM2U1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9BZGRTZXJ2aWNlVG9GYXZvcml0ZXNUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5BY3Rpb25Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLkFkZFRvRmF2b3JpdGVzQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuU2VsZWN0V1NJTFRvb2xBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBBZGRTZXJ2aWNlVG9GYXZvcml0ZXNUb29sIGV4dGVuZHMgQWN0aW9uVG9vbCB7Ci0gICAgcHVibGljIEFkZFNlcnZpY2VUb0Zhdm9yaXRlc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJpbWFnZXMvZmF2b3JpdGVzX2VuYWJsZWQuZ2lmIiwgImltYWdlcy9mYXZvcml0ZXNfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RXU0lMVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCB0b29sSWRfLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoKSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIEFkZFRvRmF2b3JpdGVzQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHRvb2xJZF8pOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL0FkZFNlcnZpY2VUb1VERElQZXJzcGVjdGl2ZVRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9BZGRTZXJ2aWNlVG9VRERJUGVyc3BlY3RpdmVUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5OGJlYjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL0FkZFNlcnZpY2VUb1VERElQZXJzcGVjdGl2ZVRvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkFjdGlvblRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuQWRkU2VydmljZVRvVURESVBlcnNwZWN0aXZlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuU2VsZWN0V1NJTFRvb2xBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBBZGRTZXJ2aWNlVG9VRERJUGVyc3BlY3RpdmVUb29sIGV4dGVuZHMgQWN0aW9uVG9vbCB7Ci0gICAgcHVibGljIEFkZFNlcnZpY2VUb1VERElQZXJzcGVjdGl2ZVRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJ3c2lsL2ltYWdlcy9hZGRfdG9fVURESV9wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZiIsICJ3c2lsL2ltYWdlcy9hZGRfdG9fVURESV9wZXJzcGVjdGl2ZV9oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdFdTSUxUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHRvb2xJZF8sIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0QWN0aW9uTGluaygpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gQWRkU2VydmljZVRvVURESVBlcnNwZWN0aXZlQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHRvb2xJZF8pOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL0FkZFdTRExTZXJ2aWNlVG9GYXZvcml0ZXNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvQWRkV1NETFNlcnZpY2VUb0Zhdm9yaXRlc1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTlkMGE0Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvQWRkV1NETFNlcnZpY2VUb0Zhdm9yaXRlc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkFjdGlvblRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuQWRkVG9GYXZvcml0ZXNBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5TZWxlY3RXU0lMVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIEFkZFdTRExTZXJ2aWNlVG9GYXZvcml0ZXNUb29sIGV4dGVuZHMgQWN0aW9uVG9vbCB7Ci0gICAgcHVibGljIEFkZFdTRExTZXJ2aWNlVG9GYXZvcml0ZXNUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAiaW1hZ2VzL2Zhdm9yaXRlc19lbmFibGVkLmdpZiIsICJpbWFnZXMvZmF2b3JpdGVzX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgdG9vbElkXywgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKCkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBBZGRUb0Zhdm9yaXRlc0FjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCB0b29sSWRfKTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9BZGRXU0lMVG9GYXZvcml0ZXNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvQWRkV1NJTFRvRmF2b3JpdGVzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTgwYWQwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9BZGRXU0lMVG9GYXZvcml0ZXNUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5BY3Rpb25Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLkFkZFRvRmF2b3JpdGVzQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuU2VsZWN0V1NJTFRvb2xBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBBZGRXU0lMVG9GYXZvcml0ZXNUb29sIGV4dGVuZHMgQWN0aW9uVG9vbCB7Ci0gICAgcHVibGljIEFkZFdTSUxUb0Zhdm9yaXRlc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJpbWFnZXMvZmF2b3JpdGVzX2VuYWJsZWQuZ2lmIiwgImltYWdlcy9mYXZvcml0ZXNfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RXU0lMVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoKSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIEFkZFRvRmF2b3JpdGVzQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQsIEFjdGlvbklucHV0cy5WSUVXVE9PTElEX0RFRkFVTFQpOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL0NsZWFyV1NJTFRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9DbGVhcldTSUxUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzNTgwZmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL0NsZWFyV1NJTFRvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkFjdGlvblRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuQ2xlYXJXU0lMQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuU2VsZWN0V1NJTFRvb2xBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBDbGVhcldTSUxUb29sIGV4dGVuZHMgQWN0aW9uVG9vbCB7Ci0gICAgcHVibGljIENsZWFyV1NJTFRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJpbWFnZXMvY2xlYXJfZW5hYmxlZC5naWYiLCAiaW1hZ2VzL2NsZWFyX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKCkgewotICAgICAgICByZXR1cm4gQ2xlYXJXU0lMQWN0aW9uLmdldEFjdGlvbkxpbmsodG9vbE1hbmFnZXJfLmdldE5vZGUoKS5nZXROb2RlSWQoKSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL0ltcG9ydFdTRExUb0ZpbGVTeXN0ZW1Ub29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvSW1wb3J0V1NETFRvRmlsZVN5c3RlbVRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDZmMzg2Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvSW1wb3J0V1NETFRvRmlsZVN5c3RlbVRvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkltcG9ydFRvRmlsZVN5c3RlbVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlNlbGVjdFdTSUxUb29sQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgSW1wb3J0V1NETFRvRmlsZVN5c3RlbVRvb2wgZXh0ZW5kcyBJbXBvcnRUb0ZpbGVTeXN0ZW1Ub29sIHsKLSAgICBwdWJsaWMgSW1wb3J0V1NETFRvRmlsZVN5c3RlbVRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgdG9vbElkXywgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKCkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHRvb2xJZF8pOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL0ltcG9ydFdTSUxUb0ZpbGVTeXN0ZW1Ub29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvSW1wb3J0V1NJTFRvRmlsZVN5c3RlbVRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGFjYTJkMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvSW1wb3J0V1NJTFRvRmlsZVN5c3RlbVRvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkltcG9ydFRvRmlsZVN5c3RlbVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuSW1wb3J0V1NJTFRvRmlsZVN5c3RlbUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlNlbGVjdFdTSUxUb29sQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgSW1wb3J0V1NJTFRvRmlsZVN5c3RlbVRvb2wgZXh0ZW5kcyBJbXBvcnRUb0ZpbGVTeXN0ZW1Ub29sIHsKLSAgICBwdWJsaWMgSW1wb3J0V1NJTFRvRmlsZVN5c3RlbVRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKCkgewotICAgICAgICByZXR1cm4gSW1wb3J0V1NJTFRvRmlsZVN5c3RlbUFjdGlvbi5nZXRBY3Rpb25MaW5rKHRvb2xNYW5hZ2VyXy5nZXROb2RlKCkuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCwgQWN0aW9uSW5wdXRzLlZJRVdUT09MSURfREVGQVVMVCk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvTGlzdFVERElCdXNpbmVzc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9MaXN0VURESUJ1c2luZXNzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYmVlNTZkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9MaXN0VURESUJ1c2luZXNzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5Qcm94eUxvYWRQYWdlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVmlld1Rvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5TZWxlY3RXU0lMVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIExpc3RVRERJQnVzaW5lc3NUb29sIGV4dGVuZHMgVmlld1Rvb2wgewotICAgIHB1YmxpYyBMaXN0VURESUJ1c2luZXNzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgIndzaWwvaW1hZ2VzL2xpc3RfYnVzaW5lc3NfZW5hYmxlZC5naWYiLCAid3NpbC9pbWFnZXMvbGlzdF9idXNpbmVzc19oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdFdTSUxUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGFkZFNldERlZmF1bHRWaWV3VG9vbChUb29sTWFuYWdlciB2aWV3VG9vbE1hbmFnZXIsIGludCBpbmRleCkgewotICAgICAgICBuZXcgV3NpbFNldERlZmF1bHRWaWV3VG9vbCh2aWV3VG9vbE1hbmFnZXIsICB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Q29udHJvbGxlcigpLmdldE1lc3NhZ2UoIkFMVF9CQUNLX1RPX1RPUCIpKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBhZGRUb29scyhUb29sTWFuYWdlciB2aWV3VG9vbE1hbmFnZXIsIGludCBpbmRleCkgewotICAgICAgICBuZXcgVWRkaUJ1c2luZXNzRGV0YWlsc1Rvb2wodmlld1Rvb2xNYW5hZ2VyLCB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Q29udHJvbGxlcigpLmdldFdTSUxQZXJzcGVjdGl2ZSgpLmdldE1lc3NhZ2UoIkFMVF9VRERJX0xJTktfREVUQUlMUyIpKTsKLSAgICAgICAgbmV3IEFkZEJ1c2luZXNzVG9VRERJUGVyc3BlY3RpdmVUb29sKHZpZXdUb29sTWFuYWdlciwgdG9vbE1hbmFnZXJfLmdldE5vZGUoKS5nZXROb2RlTWFuYWdlcigpLmdldENvbnRyb2xsZXIoKS5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXRNZXNzYWdlKCJBTFRfQUREX0JVU0lORVNTX1RPX1VERElfUEVSU1BFQ1RJVkUiKSk7Ci0gICAgICAgIG5ldyBBZGRCdXNpbmVzc1RvRmF2b3JpdGVzVG9vbCh2aWV3VG9vbE1hbmFnZXIsIHRvb2xNYW5hZ2VyXy5nZXROb2RlKCkuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRDb250cm9sbGVyKCkuZ2V0V1NJTFBlcnNwZWN0aXZlKCkuZ2V0TWVzc2FnZSgiQUxUX0FERF9VRERJX0JVU0lORVNTX1RPX0ZBVk9SSVRFUyIpKTsKLSAgICAgICAgbmV3IFJlZnJlc2hVRERJQnVzaW5lc3NUb29sKHZpZXdUb29sTWFuYWdlciwgdG9vbE1hbmFnZXJfLmdldE5vZGUoKS5nZXROb2RlTWFuYWdlcigpLmdldENvbnRyb2xsZXIoKS5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXRNZXNzYWdlKCJBTFRfUkVGUkVTSF9VRERJX0JVU0lORVNTIikpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Rm9ybUxpbmsoKSB7Ci0gICAgICAgIHJldHVybiBQcm94eUxvYWRQYWdlQWN0aW9uLmdldEFjdGlvbkxpbmsoIndzaWwvdmlld3MvVWRkaUJ1c2luZXNzVmlldy5qc3AiKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvTGlzdFVERElTZXJ2aWNlc1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9MaXN0VURESVNlcnZpY2VzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YmIwNjk1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9MaXN0VURESVNlcnZpY2VzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5Qcm94eUxvYWRQYWdlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVmlld1Rvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5TZWxlY3RXU0lMVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIExpc3RVRERJU2VydmljZXNUb29sIGV4dGVuZHMgVmlld1Rvb2wgewotICAgIHB1YmxpYyBMaXN0VURESVNlcnZpY2VzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgIndzaWwvaW1hZ2VzL2xpc3RfVURESV9zZXJ2aWNlX2VuYWJsZWQuZ2lmIiwgIndzaWwvaW1hZ2VzL2xpc3RfVURESV9zZXJ2aWNlX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgYWRkU2V0RGVmYXVsdFZpZXdUb29sKFRvb2xNYW5hZ2VyIHZpZXdUb29sTWFuYWdlciwgaW50IGluZGV4KSB7Ci0gICAgICAgIG5ldyBXc2lsU2V0RGVmYXVsdFZpZXdUb29sKHZpZXdUb29sTWFuYWdlciwgIHRvb2xNYW5hZ2VyXy5nZXROb2RlKCkuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRDb250cm9sbGVyKCkuZ2V0TWVzc2FnZSgiQUxUX0JBQ0tfVE9fVE9QIikpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGFkZFRvb2xzKFRvb2xNYW5hZ2VyIHZpZXdUb29sTWFuYWdlciwgaW50IGluZGV4KSB7Ci0gICAgICAgIENvbnRyb2xsZXIgY29udHJvbGxlciA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCkuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRDb250cm9sbGVyKCk7Ci0gICAgICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotICAgICAgICBuZXcgVWRkaVNlcnZpY2VEZXRhaWxzVG9vbCh2aWV3VG9vbE1hbmFnZXIsIHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfV1NJTF9TRVJWSUNFX0RFVEFJTFMiKSk7Ci0gICAgICAgIG5ldyBXc2lsSW1wb3J0V1NETFRvV29ya2JlbmNoVG9vbCh2aWV3VG9vbE1hbmFnZXIsIGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0lNUE9SVF9XU0RMX1RPX1dPUktCRU5DSCIpKTsKLSAgICAgICAgbmV3IEltcG9ydFdTRExUb0ZpbGVTeXN0ZW1Ub29sKHZpZXdUb29sTWFuYWdlciwgY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfV1NETF9JTVBPUlRfVE9fRlMiKSk7Ci0gICAgICAgIG5ldyBXc2lsTGF1bmNoV2ViU2VydmljZVdpemFyZFRvb2wodmlld1Rvb2xNYW5hZ2VyLCBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9MQVVOQ0hfV0VCX1NFUlZJQ0VfV0laQVJEIikpOwotICAgICAgICBuZXcgQWRkU2VydmljZVRvVURESVBlcnNwZWN0aXZlVG9vbCh2aWV3VG9vbE1hbmFnZXIsIHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfQUREX1NFUlZJQ0VfVE9fVURESV9QRVJTUEVDVElWRSIpKTsKLSAgICAgICAgbmV3IEFkZFNlcnZpY2VUb0Zhdm9yaXRlc1Rvb2wodmlld1Rvb2xNYW5hZ2VyLCB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0FERF9TRVJWSUNFX1RPX0ZBVk9SSVRFUyIpKTsKLSAgICAgICAgbmV3IFJlZnJlc2hVRERJU2VydmljZVRvb2wodmlld1Rvb2xNYW5hZ2VyLCB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1JFRlJFU0hfVURESV9TRVJWSUNFIikpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Rm9ybUxpbmsoKSB7Ci0gICAgICAgIHJldHVybiBQcm94eUxvYWRQYWdlQWN0aW9uLmdldEFjdGlvbkxpbmsoIndzaWwvdmlld3MvVWRkaVNlcnZpY2VzVmlldy5qc3AiKTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9MaXN0V1NETFNlcnZpY2VzVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL0xpc3RXU0RMU2VydmljZXNUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2YjllZDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL0xpc3RXU0RMU2VydmljZXNUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVmlld1Rvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5TZWxlY3RXU0lMVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIExpc3RXU0RMU2VydmljZXNUb29sIGV4dGVuZHMgVmlld1Rvb2wgewotICAgIHB1YmxpYyBMaXN0V1NETFNlcnZpY2VzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgIndzaWwvaW1hZ2VzL2xpc3RfV1NETF9zZXJ2aWNlX2VuYWJsZWQuZ2lmIiwgIndzaWwvaW1hZ2VzL2xpc3RfV1NETF9zZXJ2aWNlX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgYWRkU2V0RGVmYXVsdFZpZXdUb29sKFRvb2xNYW5hZ2VyIHZpZXdUb29sTWFuYWdlciwgaW50IGluZGV4KSB7Ci0gICAgICAgIG5ldyBXc2lsU2V0RGVmYXVsdFZpZXdUb29sKHZpZXdUb29sTWFuYWdlciwgIHRvb2xNYW5hZ2VyXy5nZXROb2RlKCkuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRDb250cm9sbGVyKCkuZ2V0TWVzc2FnZSgiQUxUX0JBQ0tfVE9fVE9QIikpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGFkZFRvb2xzKFRvb2xNYW5hZ2VyIHZpZXdUb29sTWFuYWdlciwgaW50IGluZGV4KSB7Ci0gICAgICAgIENvbnRyb2xsZXIgY29udHJvbGxlciA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCkuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRDb250cm9sbGVyKCk7Ci0gICAgICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotICAgICAgICBuZXcgV3NkbFNlcnZpY2VEZXRhaWxzVG9vbCh2aWV3VG9vbE1hbmFnZXIsIHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfV1NJTF9TRVJWSUNFX0RFVEFJTFMiKSk7Ci0gICAgICAgIG5ldyBXc2lsSW1wb3J0V1NETFRvV29ya2JlbmNoVG9vbCh2aWV3VG9vbE1hbmFnZXIsIGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0lNUE9SVF9XU0RMX1RPX1dPUktCRU5DSCIpKTsKLSAgICAgICAgbmV3IEltcG9ydFdTRExUb0ZpbGVTeXN0ZW1Ub29sKHZpZXdUb29sTWFuYWdlciwgY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfV1NETF9JTVBPUlRfVE9fRlMiKSk7Ci0gICAgICAgIG5ldyBXc2lsTGF1bmNoV2ViU2VydmljZVdpemFyZFRvb2wodmlld1Rvb2xNYW5hZ2VyLCBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9MQVVOQ0hfV0VCX1NFUlZJQ0VfV0laQVJEIikpOwotICAgICAgICBuZXcgV3NpbEFkZFRvV1NETFBlcnNwZWN0aXZlVG9vbCh2aWV3VG9vbE1hbmFnZXIsIHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfQUREX1dTRExfVE9fV1NETF9QRVJTUEVDVElWRSIpKTsKLSAgICAgICAgbmV3IEFkZFdTRExTZXJ2aWNlVG9GYXZvcml0ZXNUb29sKHZpZXdUb29sTWFuYWdlciwgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9BRERfV1NETF9TRVJWSUNFX1RPX0ZBVk9SSVRFUyIpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEZvcm1MaW5rKCkgewotICAgICAgICByZXR1cm4gIndzaWwvdmlld3MvV3NkbFNlcnZpY2VzVmlldy5qc3AiOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9MaXN0V1NJTExpbmtzVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL0xpc3RXU0lMTGlua3NUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0NWI4MmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL0xpc3RXU0lMTGlua3NUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVmlld1Rvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5TZWxlY3RXU0lMVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIExpc3RXU0lMTGlua3NUb29sIGV4dGVuZHMgVmlld1Rvb2wgewotICAgIHB1YmxpYyBMaXN0V1NJTExpbmtzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgIndzaWwvaW1hZ2VzL2xpc3RfV1NJTF9lbmFibGVkLmdpZiIsICJ3c2lsL2ltYWdlcy9saXN0X1dTSUxfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RXU0lMVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgdG9vbElkXywgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xJZCgpLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBhZGRTZXREZWZhdWx0Vmlld1Rvb2woVG9vbE1hbmFnZXIgdmlld1Rvb2xNYW5hZ2VyLCBpbnQgaW5kZXgpIHsKLSAgICAgICAgbmV3IFdzaWxTZXREZWZhdWx0Vmlld1Rvb2wodmlld1Rvb2xNYW5hZ2VyLCAgdG9vbE1hbmFnZXJfLmdldE5vZGUoKS5nZXROb2RlTWFuYWdlcigpLmdldENvbnRyb2xsZXIoKS5nZXRNZXNzYWdlKCJBTFRfQkFDS19UT19UT1AiKSk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgYWRkVG9vbHMoVG9vbE1hbmFnZXIgdmlld1Rvb2xNYW5hZ2VyLCBpbnQgaW5kZXgpIHsKLSAgICAgICAgbmV3IFdzaWxMaW5rRGV0YWlsc1Rvb2wodmlld1Rvb2xNYW5hZ2VyLCB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Q29udHJvbGxlcigpLmdldFdTSUxQZXJzcGVjdGl2ZSgpLmdldE1lc3NhZ2UoIkFMVF9XU0lMX0xJTktfREVUQUlMUyIpKTsKLSAgICAgICAgbmV3IE9wZW5XU0lMTGlua1Rvb2wodmlld1Rvb2xNYW5hZ2VyLCB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Q29udHJvbGxlcigpLmdldFdTSUxQZXJzcGVjdGl2ZSgpLmdldE1lc3NhZ2UoIkFMVF9PUEVOX1dTSUxfTElOSyIpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEZvcm1MaW5rKCkgewotICAgICAgICByZXR1cm4gIndzaWwvdmlld3MvV3NpbExpbmtzVmlldy5qc3AiOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9PcGVuV1NJTExpbmtUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvT3BlbldTSUxMaW5rVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTUxY2VlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9PcGVuV1NJTExpbmtUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5BY3Rpb25Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLk9wZW5XU0lMTGlua0FjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlNlbGVjdFdTSUxUb29sQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgT3BlbldTSUxMaW5rVG9vbCBleHRlbmRzIEFjdGlvblRvb2wgewotICAgIHB1YmxpYyBPcGVuV1NJTExpbmtUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAid3NpbC9pbWFnZXMvb3Blbl93c2lsX2VuYWJsZWQuZ2lmIiwgIndzaWwvaW1hZ2VzL29wZW5fd3NpbF9oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdFdTSUxUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHRvb2xJZF8sIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0QWN0aW9uTGluaygpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gT3BlbldTSUxMaW5rQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHRvb2xJZF8pOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL09wZW5XU0lMVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL09wZW5XU0lMVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTkxYTQ3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9PcGVuV1NJTFRvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlNlbGVjdFdTSUxUb29sQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgT3BlbldTSUxUb29sIGV4dGVuZHMgRm9ybVRvb2wgewotICAgIHB1YmxpYyBPcGVuV1NJTFRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJ3c2lsL2ltYWdlcy9vcGVuX3dzaWxfZW5hYmxlZC5naWYiLCAid3NpbC9pbWFnZXMvb3Blbl93c2lsX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgaW5pdERlZmF1bHRQcm9wZXJ0aWVzKCkgewotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdFdTSUxUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Rm9ybUxpbmsoKSB7Ci0gICAgICAgIHJldHVybiAid3NpbC9mb3Jtcy9PcGVuV1NJTEZvcm0uanNwIjsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9SZWZyZXNoVURESUJ1c2luZXNzVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1JlZnJlc2hVRERJQnVzaW5lc3NUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2ZjczYjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1JlZnJlc2hVRERJQnVzaW5lc3NUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5BY3Rpb25Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlJlZnJlc2hBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5TZWxlY3RXU0lMVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIFJlZnJlc2hVRERJQnVzaW5lc3NUb29sIGV4dGVuZHMgQWN0aW9uVG9vbCB7Ci0gICAgcHVibGljIFJlZnJlc2hVRERJQnVzaW5lc3NUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAiaW1hZ2VzL3JlZnJlc2hfZW5hYmxlZC5naWYiLCAiaW1hZ2VzL3JlZnJlc2hfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RXU0lMVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCB0b29sSWRfLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEFjdGlvbkxpbmsoKSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFJlZnJlc2hBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgdG9vbElkXyk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvUmVmcmVzaFVERElTZXJ2aWNlVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1JlZnJlc2hVRERJU2VydmljZVRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjhjODJhNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvUmVmcmVzaFVERElTZXJ2aWNlVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQWN0aW9uVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5SZWZyZXNoQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuU2VsZWN0V1NJTFRvb2xBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBSZWZyZXNoVURESVNlcnZpY2VUb29sIGV4dGVuZHMgQWN0aW9uVG9vbCB7Ci0gICAgcHVibGljIFJlZnJlc2hVRERJU2VydmljZVRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJpbWFnZXMvcmVmcmVzaF9lbmFibGVkLmdpZiIsICJpbWFnZXMvcmVmcmVzaF9oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdFdTSUxUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHRvb2xJZF8sIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0QWN0aW9uTGluaygpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gUmVmcmVzaEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCB0b29sSWRfKTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9SZWZyZXNoV1NJTFRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9SZWZyZXNoV1NJTFRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmNlOGE1MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvUmVmcmVzaFdTSUxUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuQWN0aW9uSW5wdXRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5BY3Rpb25Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlJlZnJlc2hBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5TZWxlY3RXU0lMVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIFJlZnJlc2hXU0lMVG9vbCBleHRlbmRzIEFjdGlvblRvb2wgewotICAgIHB1YmxpYyBSZWZyZXNoV1NJTFRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJpbWFnZXMvcmVmcmVzaF9lbmFibGVkLmdpZiIsICJpbWFnZXMvcmVmcmVzaF9oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdFdTSUxUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCB0b29sSWRfLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbElkKCksIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0QWN0aW9uTGluaygpIHsKLSAgICAgICAgcmV0dXJuIFJlZnJlc2hBY3Rpb24uZ2V0QWN0aW9uTGluayh0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpLmdldE5vZGVJZCgpLCB0b29sSWRfLCBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQsIEFjdGlvbklucHV0cy5WSUVXVE9PTElEX0RFRkFVTFQpOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1VkZGlCdXNpbmVzc0RldGFpbHNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvVWRkaUJ1c2luZXNzRGV0YWlsc1Rvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTY0NjExYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvVWRkaUJ1c2luZXNzRGV0YWlsc1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlNlbGVjdFdTSUxUb29sQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgVWRkaUJ1c2luZXNzRGV0YWlsc1Rvb2wgZXh0ZW5kcyBGb3JtVG9vbCB7Ci0gICAgcHVibGljIFVkZGlCdXNpbmVzc0RldGFpbHNUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCAiaW1hZ2VzL2RldGFpbHNfZW5hYmxlZC5naWYiLCAiaW1hZ2VzL2RldGFpbHNfaGlnaGxpZ2h0ZWQuZ2lmIiwgYWx0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkgewotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgICAgIHJldHVybiBTZWxlY3RXU0lMVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpLCB0b29sSWRfLCBmb3JIaXN0b3J5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEZvcm1MaW5rKCkgewotICAgICAgICByZXR1cm4gIndzaWwvZm9ybXMvVWRkaUJ1c2luZXNzRGV0YWlsc1BhZ2UuanNwIjsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9VZGRpU2VydmljZURldGFpbHNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvVWRkaVNlcnZpY2VEZXRhaWxzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDQwMDMyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9VZGRpU2VydmljZURldGFpbHNUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5TZWxlY3RXU0lMVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIFVkZGlTZXJ2aWNlRGV0YWlsc1Rvb2wgZXh0ZW5kcyBGb3JtVG9vbCB7Ci0gICAgcHVibGljIFVkZGlTZXJ2aWNlRGV0YWlsc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJpbWFnZXMvZGV0YWlsc19lbmFibGVkLmdpZiIsICJpbWFnZXMvZGV0YWlsc19oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdFdTSUxUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHRvb2xJZF8sIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Rm9ybUxpbmsoKSB7Ci0gICAgICAgIHJldHVybiAid3NpbC9mb3Jtcy9VZGRpU2VydmljZURldGFpbHNQYWdlLmpzcCI7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvV1NJTEltcG9ydFdTSUxUb1dvcmtiZW5jaFRvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9XU0lMSW1wb3J0V1NJTFRvV29ya2JlbmNoVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTc3ZDBjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9XU0lMSW1wb3J0V1NJTFRvV29ya2JlbmNoVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuSW1wb3J0VG9Xb3JrYmVuY2hUb29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlNlbGVjdFdTSUxUb29sQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgV1NJTEltcG9ydFdTSUxUb1dvcmtiZW5jaFRvb2wgZXh0ZW5kcyBJbXBvcnRUb1dvcmtiZW5jaFRvb2wKLXsKLSAgcHVibGljIFdTSUxJbXBvcnRXU0lMVG9Xb3JrYmVuY2hUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KQotICB7Ci0gICAgc3VwZXIodG9vbE1hbmFnZXIsIGFsdCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgewotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICByZXR1cm4gU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgZm9ySGlzdG9yeSk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldEZvcm1MaW5rKCkKLSAgewotICAgIHJldHVybiAid3NpbC9mb3Jtcy9XU0lMSW1wb3J0V1NJTFRvV29ya2JlbmNoRm9ybS5qc3AiOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvV1NJTFBlcnNwZWN0aXZlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvV1NJTFBlcnNwZWN0aXZlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhZTgxZjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1dTSUxQZXJzcGVjdGl2ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkJhc2ljTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlBlcnNwZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuU3dpdGNoUGVyc3BlY3RpdmVGcm9tV1NJTEFjdGlvbjsKLQotcHVibGljIGNsYXNzIFdTSUxQZXJzcGVjdGl2ZSBleHRlbmRzIFBlcnNwZWN0aXZlCi17Ci0gICAgcHJpdmF0ZSBCYXNpY01vZGVsIG1vZGVsXzsKLSAgICBwcml2YXRlIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyXzsKLSAgICBwcml2YXRlIFN0cmluZyBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfOwotICAgIHByaXZhdGUgU3RyaW5nIHNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXzsKLSAgICBwcml2YXRlIFN0cmluZyBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzXzsKLSAgICBwcml2YXRlIFN0cmluZyBzYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3NfOwotCi0gICAgcHVibGljIFdTSUxQZXJzcGVjdGl2ZShDb250cm9sbGVyIGNvbnRyb2xsZXIpCi0gICAgewotICAgICAgICBzdXBlcigid3NpbCIsY29udHJvbGxlcik7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIHZvaWQgaW5pdFBlcnNwZWN0aXZlKFNlcnZsZXRDb250ZXh0IGFwcGxpY2F0aW9uKQotICAgIHsKLSAgICAgICAgbW9kZWxfID0gbmV3IEJhc2ljTW9kZWwoIldzaWxNb2RlbCIpOwotICAgICAgICBUcmVlRWxlbWVudCB0cmVlRWxlbWVudCA9IG5ldyBUcmVlRWxlbWVudChnZXRNZXNzYWdlKCJXU0lMX01BSU5fTk9ERSIpLCBtb2RlbF8pOwotICAgICAgICBtb2RlbF8uc2V0Um9vdEVsZW1lbnQodHJlZUVsZW1lbnQpOwotICAgICAgICBub2RlTWFuYWdlcl8gPSBuZXcgTm9kZU1hbmFnZXIoY29udHJvbGxlcl8pOwotICAgICAgICBXc2lsTWFpbk5vZGUgd3NpbE1haW5Ob2RlID0gbmV3IFdzaWxNYWluTm9kZSh0cmVlRWxlbWVudCwgbm9kZU1hbmFnZXJfKTsKLSAgICAgICAgbm9kZU1hbmFnZXJfLnNldFJvb3ROb2RlKHdzaWxNYWluTm9kZSk7Ci0KLSAgICAgICAgLy8gU3RhcnRpbmcgZnJhbWVzZXQgc2l6ZXMuCi0gICAgICAgIGlmICghRGlyVXRpbHMuaXNSVEwoKSkKLSAgICAgICAgICBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfID0gIjMwJSwqIjsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29sc18gPSAiKiwzMCUiOwotICAgICAgICBzYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29sc18gPSBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfOwotICAgICAgICBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzXyA9ICI3NSUsKiI7Ci0gICAgICAgIHNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c18gPSBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzXzsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTm9kZU1hbmFnZXIgZ2V0Tm9kZU1hbmFnZXIoKSB7Ci0gICAgICAgIHJldHVybiBub2RlTWFuYWdlcl87Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRQZXJzcGVjdGl2ZUNvbnRlbnRQYWdlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAid3NpbC93c2lsX3BlcnNwZWN0aXZlX2NvbnRlbnQuanNwIjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGdldFBlcnNwZWN0aXZlSWQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9XU0lMOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0UGFuZXNGaWxlKCkgewotICAgICAgICByZXR1cm4gIndzaWwvc2NyaXB0cy93c2lsUGFuZXMuanNwIjsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIFN0cmluZyBnZXRGcmFtZXNldHNGaWxlKCkKLSAgICB7Ci0gICAgICByZXR1cm4gIndzaWwvc2NyaXB0cy93c2lsZnJhbWVzZXRzLmpzcCI7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBTdHJpbmcgZ2V0UHJvY2Vzc0ZyYW1lc2V0c0Zvcm0oKQotICAgIHsKLSAgICAgIHJldHVybiAid3NpbC9mb3Jtcy9Qcm9jZXNzV1NJTEZyYW1lc2V0c0Zvcm0uanNwIjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFRyZWVDb250ZW50VmFyKCkgewotICAgICAgICByZXR1cm4gIndzaWxOYXZpZ2F0b3JDb250ZW50IjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFRyZWVDb250ZW50UGFnZSgpIHsKLSAgICAgICAgcmV0dXJuICJ3c2lsL3dzaWxfbmF2aWdhdG9yX2NvbnRlbnQuanNwIjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFByb3BlcnRpZXNDb250YWluZXJWYXIoKSB7Ci0gICAgICAgIHJldHVybiAid3NpbFByb3BlcnRpZXNDb250YWluZXIiOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydGllc0NvbnRhaW5lclBhZ2UoKSB7Ci0gICAgICAgIHJldHVybiAid3NpbC93c2lsX3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCI7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTdGF0dXNDb250ZW50VmFyKCkgewotICAgICAgICByZXR1cm4gIndzaWxTdGF0dXNDb250ZW50IjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFN0YXR1c0NvbnRlbnRQYWdlKCkgewotICAgICAgICByZXR1cm4gIndzaWwvd3NpbF9zdGF0dXNfY29udGVudC5qc3AiOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpCi0gICAgewotICAgICAgcmV0dXJuIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29sc187Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBmaW5hbCB2b2lkIHNldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scyhTdHJpbmcgY29scykKLSAgICB7Ci0gICAgICBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfID0gY29sczsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTYXZlZFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpCi0gICAgewotICAgICAgcmV0dXJuIHNhdmVkUGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzXzsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGZpbmFsIHZvaWQgc2V0U2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoU3RyaW5nIGNvbHMpCi0gICAgewotICAgICAgc2F2ZWRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHNfID0gY29sczsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKCkKLSAgICB7Ci0gICAgICByZXR1cm4gYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c187Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBmaW5hbCB2b2lkIHNldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoU3RyaW5nIHJvd3MpCi0gICAgewotICAgICAgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c18gPSByb3dzOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpCi0gICAgewotICAgICAgcmV0dXJuIHNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93c187Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBmaW5hbCB2b2lkIHNldFNhdmVkQWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cyhTdHJpbmcgcm93cykKLSAgICB7Ci0gICAgICBzYXZlZEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3NfID0gcm93czsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRTd2l0Y2hQZXJzcGVjdGl2ZUZvcm1BY3Rpb25MaW5rKGludCB0YXJnZXRQZXJzcGVjdGl2ZUlkLGJvb2xlYW4gZm9ySGlzdG9yeSkKLSAgICB7Ci0gICAgICByZXR1cm4gU3dpdGNoUGVyc3BlY3RpdmVGcm9tV1NJTEFjdGlvbi5nZXRGb3JtQWN0aW9uTGluayh0YXJnZXRQZXJzcGVjdGl2ZUlkLGZvckhpc3RvcnkpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9Xc2RsU2VydmljZURldGFpbHNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvV3NkbFNlcnZpY2VEZXRhaWxzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMzU5MjJjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9Xc2RsU2VydmljZURldGFpbHNUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5TZWxlY3RXU0lMVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIFdzZGxTZXJ2aWNlRGV0YWlsc1Rvb2wgZXh0ZW5kcyBGb3JtVG9vbCB7Ci0gICAgcHVibGljIFdzZGxTZXJ2aWNlRGV0YWlsc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJpbWFnZXMvZGV0YWlsc19lbmFibGVkLmdpZiIsICJpbWFnZXMvZGV0YWlsc19oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdFdTSUxUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHRvb2xJZF8sIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Rm9ybUxpbmsoKSB7Ci0gICAgICAgIHJldHVybiAid3NpbC9mb3Jtcy9Xc2RsU2VydmljZURldGFpbHNQYWdlLmpzcCI7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvV3NpbEFkZFRvV1NETFBlcnNwZWN0aXZlVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1dzaWxBZGRUb1dTRExQZXJzcGVjdGl2ZVRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGZhMGZkYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvV3NpbEFkZFRvV1NETFBlcnNwZWN0aXZlVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQWRkVG9XU0RMUGVyc3BlY3RpdmVUb29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlNlbGVjdFdTSUxUb29sQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuV3NpbEFkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgV3NpbEFkZFRvV1NETFBlcnNwZWN0aXZlVG9vbCBleHRlbmRzIEFkZFRvV1NETFBlcnNwZWN0aXZlVG9vbCB7Ci0KLSAgcHVibGljIFdzaWxBZGRUb1dTRExQZXJzcGVjdGl2ZVRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICBzdXBlcih0b29sTWFuYWdlcixhbHQpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IHRvb2xNYW5hZ2VyXy5nZXROb2RlKCk7Ci0gICAgcmV0dXJuIFNlbGVjdFdTSUxUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHRvb2xJZF8sIGZvckhpc3RvcnkpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRBY3Rpb25MaW5rKCkgewotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICByZXR1cm4gV3NpbEFkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHRvb2xJZF8pOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvV3NpbERldGFpbHNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvV3NpbERldGFpbHNUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjNGQ0MDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1dzaWxEZXRhaWxzVG9vbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlRvb2xNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuU2VsZWN0V1NJTFRvb2xBY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBXc2lsRGV0YWlsc1Rvb2wgZXh0ZW5kcyBGb3JtVG9vbCB7Ci0gICAgcHVibGljIFdzaWxEZXRhaWxzVG9vbChUb29sTWFuYWdlciB0b29sTWFuYWdlciwgU3RyaW5nIGFsdCkgewotICAgICAgICBzdXBlcih0b29sTWFuYWdlciwgImltYWdlcy9kZXRhaWxzX2VuYWJsZWQuZ2lmIiwgImltYWdlcy9kZXRhaWxzX2hpZ2hsaWdodGVkLmdpZiIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHRvb2xJZF8sIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKSwgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRGb3JtTGluaygpIHsKLSAgICAgICAgcmV0dXJuICJ3c2lsL2Zvcm1zL1dzaWxEZXRhaWxzUGFnZS5qc3AiOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1dzaWxJbXBvcnRXU0RMVG9Xb3JrYmVuY2hUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvV3NpbEltcG9ydFdTRExUb1dvcmtiZW5jaFRvb2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGIxZWRhNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvV3NpbEltcG9ydFdTRExUb1dvcmtiZW5jaFRvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkltcG9ydFRvV29ya2JlbmNoVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5TZWxlY3RXU0lMVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIFdzaWxJbXBvcnRXU0RMVG9Xb3JrYmVuY2hUb29sIGV4dGVuZHMgSW1wb3J0VG9Xb3JrYmVuY2hUb29sIHsKLSAgICBwdWJsaWMgV3NpbEltcG9ydFdTRExUb1dvcmtiZW5jaFRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgdG9vbElkXywgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRGb3JtTGluaygpCi0gICAgewotICAgICAgcmV0dXJuICJ3c2lsL2Zvcm1zL1dzaWxJbXBvcnRXU0RMVG9Xb3JrYmVuY2hGb3JtLmpzcCI7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1dzaWxMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1dzaWxMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzVkNzVkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9Xc2lsTGF1bmNoV2ViU2VydmljZVdpemFyZFRvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkxhdW5jaFdlYlNlcnZpY2VXaXphcmRUb29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlNlbGVjdFdTSUxUb29sQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgV3NpbExhdW5jaFdlYlNlcnZpY2VXaXphcmRUb29sIGV4dGVuZHMgTGF1bmNoV2ViU2VydmljZVdpemFyZFRvb2wgewotICAgIHB1YmxpYyBXc2lsTGF1bmNoV2ViU2VydmljZVdpemFyZFRvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsIGFsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWxlY3RUb29sQWN0aW9uSHJlZihib29sZWFuIGZvckhpc3RvcnkpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSwgdG9vbElkXywgZm9ySGlzdG9yeSk7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRGb3JtTGluaygpCi0gICAgewotICAgICAgcmV0dXJuICJ3c2lsL2Zvcm1zL1dzaWxMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkRm9ybS5qc3AiOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9Xc2lsTGlua0RldGFpbHNUb29sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvV3NpbExpbmtEZXRhaWxzVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDc4MTk3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9Xc2lsTGlua0RldGFpbHNUb29sLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Gb3JtVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5TZWxlY3RXU0lMVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIFdzaWxMaW5rRGV0YWlsc1Rvb2wgZXh0ZW5kcyBGb3JtVG9vbCB7Ci0gICAgcHVibGljIFdzaWxMaW5rRGV0YWlsc1Rvb2woVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIsIFN0cmluZyBhbHQpIHsKLSAgICAgICAgc3VwZXIodG9vbE1hbmFnZXIsICJpbWFnZXMvZGV0YWlsc19lbmFibGVkLmdpZiIsICJpbWFnZXMvZGV0YWlsc19oaWdobGlnaHRlZC5naWYiLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdFdTSUxUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCksIHRvb2xJZF8sIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Rm9ybUxpbmsoKSB7Ci0gICAgICAgIHJldHVybiAid3NpbC9mb3Jtcy9Xc2lsTGlua0RldGFpbHNQYWdlLmpzcCI7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvV3NpbE1haW5Ob2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvV3NpbE1haW5Ob2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1N2Q1YzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1dzaWxNYWluTm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsLkVsZW1lbnRBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWwuUmVsQWRkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbC5SZWxSZW1vdmVFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuV3NpbE1vZGVsQ29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgV3NpbE1haW5Ob2RlIGV4dGVuZHMgV3NpbE5hdmlnYXRvck5vZGUgewotCi0gICAgcHVibGljIFdzaWxNYWluTm9kZShUcmVlRWxlbWVudCB0cmVlRWxlbWVudCwgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIpIHsKLSAgICAgICAgc3VwZXIodHJlZUVsZW1lbnQsIG5vZGVNYW5hZ2VyLCAxLCAiaW1hZ2VzL3Jvb3RfbWFpbi5naWYiKTsKLSAgICAgICAgdHJlZUVsZW1lbnQuYWRkTGlzdGVuZXIobmV3IEVsZW1lbnRBZGFwdGVyKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcmVsQWRkZWQoUmVsQWRkRXZlbnQgZXZlbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcmVsID0gZXZlbnQuZ2V0T3V0Qm91bmRSZWxOYW1lKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbC5lcXVhbHMoV3NpbE1vZGVsQ29uc3RhbnRzLlJFTF9XU0lMKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXc2lsTm9kZSB3c2lsTm9kZSA9IG5ldyBXc2lsTm9kZSgoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0UGFyZW50RWxlbWVudCgpLCBub2RlTWFuYWdlcl8sIG5vZGVEZXB0aF8gKyAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkQ2hpbGQod3NpbE5vZGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcmVsUmVtb3ZlZChSZWxSZW1vdmVFdmVudCBldmVudCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyZWVFbGVtZW50IGNoaWxkRWxlbWVudCA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LmdldEluQm91bmRSZWxOYW1lKCkuZXF1YWxzKFdzaWxNb2RlbENvbnN0YW50cy5SRUxfV1NJTCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRFbGVtZW50ID0gKFRyZWVFbGVtZW50KWV2ZW50LmdldEluYm91bmRFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5nZXRPdXRCb3VuZFJlbE5hbWUoKS5lcXVhbHMoV3NpbE1vZGVsQ29uc3RhbnRzLlJFTF9XU0lMKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEVsZW1lbnQgPSAoVHJlZUVsZW1lbnQpZXZlbnQuZ2V0T3V0Qm91bmRFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUNoaWxkTm9kZShjaGlsZEVsZW1lbnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBpbml0VG9vbHMoKSB7Ci0gICAgICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBub2RlTWFuYWdlcl8uZ2V0Q29udHJvbGxlcigpLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotICAgICAgICBuZXcgT3BlbldTSUxUb29sKHRvb2xNYW5hZ2VyXywgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9PUEVOX1dTSUwiKSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1dzaWxOYXZpZ2F0b3JOb2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvV3NpbE5hdmlnYXRvck5vZGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDdjMzRkNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvV3NpbE5hdmlnYXRvck5vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC5UcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5TZWxlY3RXU0lMTm9kZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLldzaWxUb2dnbGVOb2RlQWN0aW9uOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgV3NpbE5hdmlnYXRvck5vZGUgZXh0ZW5kcyBOb2RlIHsKLQotICAgIHB1YmxpYyBXc2lsTmF2aWdhdG9yTm9kZShUcmVlRWxlbWVudCB0cmVlRWxlbWVudCwgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIsIGludCBub2RlRGVwdGgsIFN0cmluZyBpbWFnZVBhdGgpIHsKLSAgICAgICAgc3VwZXIodHJlZUVsZW1lbnQsIG5vZGVNYW5hZ2VyLCBub2RlRGVwdGgsIGltYWdlUGF0aCk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIFN0cmluZyBnZXRUb2dnbGVOb2RlQWN0aW9uSHJlZigpIHsKLSAgICAgICAgcmV0dXJuIFdzaWxUb2dnbGVOb2RlQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlkXyxpc09wZW5fKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldExpbmtBY3Rpb25IcmVmKCkgewotICAgICAgICByZXR1cm4gU2VsZWN0V1NJTE5vZGVBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWRfLCBmYWxzZSk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvcGVyc3BlY3RpdmUvV3NpbE5vZGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9Xc2lsTm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjY0NTllLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9Xc2lsTm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIFdzaWxOb2RlIGV4dGVuZHMgV3NpbE5hdmlnYXRvck5vZGUgewotCi0gICAgcHVibGljIFdzaWxOb2RlKFRyZWVFbGVtZW50IHRyZWVFbGVtZW50LCBOb2RlTWFuYWdlciBub2RlTWFuYWdlciwgaW50IG5vZGVEZXB0aCkgewotICAgICAgICBzdXBlcih0cmVlRWxlbWVudCwgbm9kZU1hbmFnZXIsIG5vZGVEZXB0aCwgIndzaWwvaW1hZ2VzL3dzaWxfbm9kZS5naWYiKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBpbml0VG9vbHMoKSB7Ci0gICAgICAgIENvbnRyb2xsZXIgY29udHJvbGxlciA9IG5vZGVNYW5hZ2VyXy5nZXRDb250cm9sbGVyKCk7Ci0gICAgICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotICAgICAgICBuZXcgV3NpbERldGFpbHNUb29sKHRvb2xNYW5hZ2VyXywgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9XU0lMX0RFVEFJTFMiKSk7Ci0gICAgICAgIG5ldyBMaXN0V1NETFNlcnZpY2VzVG9vbCh0b29sTWFuYWdlcl8sIHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTElTVF9XU0RMX1NFUlZJQ0VTIikpOwotICAgICAgICBuZXcgTGlzdFVERElTZXJ2aWNlc1Rvb2wodG9vbE1hbmFnZXJfLCB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0xJU1RfVURESV9TRVJWSUNFUyIpKTsKLSAgICAgICAgbmV3IExpc3RVRERJQnVzaW5lc3NUb29sKHRvb2xNYW5hZ2VyXywgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9MSVNUX1VERElfTElOS1MiKSk7Ci0gICAgICAgIG5ldyBMaXN0V1NJTExpbmtzVG9vbCh0b29sTWFuYWdlcl8sIHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTElTVF9XU0lMX0xJTktTIikpOwotICAgICAgICBuZXcgV1NJTEltcG9ydFdTSUxUb1dvcmtiZW5jaFRvb2wodG9vbE1hbmFnZXJfLCB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQVRMX0lNUE9SVF9XU0lMX1RPX1dPUktCRU5DSCIpKTsKLSAgICAgICAgbmV3IEltcG9ydFdTSUxUb0ZpbGVTeXN0ZW1Ub29sKHRvb2xNYW5hZ2VyXywgY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfV1NJTF9JTVBPUlRfVE9fRlMiKSk7Ci0gICAgICAgIG5ldyBBZGRXU0lMVG9GYXZvcml0ZXNUb29sKHRvb2xNYW5hZ2VyXywgd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9BRERfV1NJTF9UT19GQVZPUklURVMiKSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1dzaWxTZXREZWZhdWx0Vmlld1Rvb2wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC9wZXJzcGVjdGl2ZS9Xc2lsU2V0RGVmYXVsdFZpZXdUb29sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3YzExMzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbGF0Zm9ybS93c2lsL3BlcnNwZWN0aXZlL1dzaWxTZXREZWZhdWx0Vmlld1Rvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNldERlZmF1bHRWaWV3VG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuVG9vbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5TZWxlY3RXU0lMVG9vbEFjdGlvbjsKLQotcHVibGljIGNsYXNzIFdzaWxTZXREZWZhdWx0Vmlld1Rvb2wgZXh0ZW5kcyBTZXREZWZhdWx0Vmlld1Rvb2wgewotICAgIHB1YmxpYyBXc2lsU2V0RGVmYXVsdFZpZXdUb29sKFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyLCBTdHJpbmcgYWx0KSB7Ci0gICAgICAgIHN1cGVyKHRvb2xNYW5hZ2VyLCBhbHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoYm9vbGVhbiBmb3JIaXN0b3J5KSB7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gdG9vbE1hbmFnZXJfLmdldE5vZGUoKTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdFdTSUxUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLCBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQsIEFjdGlvbklucHV0cy5WSUVXVE9PTElEX0RFRkFVTFQsIGZvckhpc3RvcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0QWN0aW9uTGluaygpIHsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB0b29sTWFuYWdlcl8uZ2V0Tm9kZSgpOwotICAgICAgICByZXR1cm4gU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCwgQWN0aW9uSW5wdXRzLlZJRVdUT09MSURfREVGQVVMVCwgZmFsc2UpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC90cmFuc2Zvcm1lci9XU0lMVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsYXRmb3JtL3dzaWwvdHJhbnNmb3JtZXIvV1NJTFZpZXdTZWxlY3Rpb25UcmFuc2Zvcm1lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjVmYTJlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcGxhdGZvcm0vd3NpbC90cmFuc2Zvcm1lci9XU0lMVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnRyYW5zZm9ybWVyOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkFjdGlvbklucHV0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUudHJhbnNmb3JtZXIuVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ub29sTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuV3NpbE1vZGVsQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC5Xc2lsRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5MaXN0VURESUJ1c2luZXNzVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5MaXN0VURESVNlcnZpY2VzVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5MaXN0V1NETFNlcnZpY2VzVG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5MaXN0V1NJTExpbmtzVG9vbDsKLQotcHVibGljIGNsYXNzIFdTSUxWaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXIgZXh0ZW5kcyBWaWV3U2VsZWN0aW9uVHJhbnNmb3JtZXIKLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBieXRlIE5PTkUgPSAwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgV1NETF9TRVJWSUNFID0gMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBieXRlIFVERElfU0VSVklDRSA9IDI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgYnl0ZSBVRERJX0JVU0lORVNTID0gMzsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBieXRlIFdTSUxfTElOSyA9IDQ7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgYnl0ZSBGUk9NX1RPT0xJRCA9IDU7Ci0gIHByaXZhdGUgYnl0ZSB0eXBlOwotCi0gIHB1YmxpYyBXU0lMVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyKENvbnRyb2xsZXIgY29udHJvbGxlcikKLSAgewotICAgIHRoaXMoY29udHJvbGxlciwgIiIsIEFjdGlvbklucHV0cy5WSUVXSUQsIEZST01fVE9PTElEKTsKLSAgfQotCi0gIHB1YmxpYyBXU0lMVmlld1NlbGVjdGlvblRyYW5zZm9ybWVyKENvbnRyb2xsZXIgY29udHJvbGxlciwgU3RyaW5nIGxpc3RNYW5hZ2VyS2V5LCBTdHJpbmcgdmlld0tleSwgYnl0ZSB0eXBlKQotICB7Ci0gICAgc3VwZXIoY29udHJvbGxlciwgbGlzdE1hbmFnZXJLZXksIHZpZXdLZXkpOwotICAgIHRoaXMudHlwZSA9IHR5cGU7Ci0gIH0KLQotICBwdWJsaWMgSGFzaHRhYmxlIG5vcm1hbGl6ZShIYXNodGFibGUgcHJvcGVydGllcykKLSAgewotICAgIGlmICh0eXBlID09IEZST01fVE9PTElEKQotICAgIHsKLSAgICAgIE5vZGUgY3Vyck5vZGUgPSBjb250cm9sbGVyLmdldEN1cnJlbnRQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgICBpZiAoY3Vyck5vZGUgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBpbnQgdG9vbElkID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKSBwcm9wZXJ0aWVzLmdldChBY3Rpb25JbnB1dHMuVE9PTElEKSk7Ci0gICAgICAgICAgVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXIgPSBjdXJyTm9kZS5nZXRUb29sTWFuYWdlcigpOwotICAgICAgICAgIFRvb2wgdG9vbCA9IHRvb2xNYW5hZ2VyLmdldFRvb2wodG9vbElkKTsKLSAgICAgICAgICBpZiAodG9vbCBpbnN0YW5jZW9mIExpc3RXU0RMU2VydmljZXNUb29sKQotICAgICAgICAgICAgbGlzdE1hbmFnZXJLZXkgPSBXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1dTRExfU0VSVklDRVM7Ci0gICAgICAgICAgZWxzZSBpZiAodG9vbCBpbnN0YW5jZW9mIExpc3RVRERJU2VydmljZXNUb29sKQotICAgICAgICAgICAgbGlzdE1hbmFnZXJLZXkgPSBXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1VERElfU0VSVklDRVM7Ci0gICAgICAgICAgZWxzZSBpZiAodG9vbCBpbnN0YW5jZW9mIExpc3RVRERJQnVzaW5lc3NUb29sKQotICAgICAgICAgICAgbGlzdE1hbmFnZXJLZXkgPSBXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1VERElfTElOS1M7Ci0gICAgICAgICAgZWxzZSBpZiAodG9vbCBpbnN0YW5jZW9mIExpc3RXU0lMTGlua3NUb29sKQotICAgICAgICAgICAgbGlzdE1hbmFnZXJLZXkgPSBXc2lsTW9kZWxDb25zdGFudHMuTElTVF9NQU5BR0VSX1dTSUxfTElOS1M7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gc3VwZXIubm9ybWFsaXplKHByb3BlcnRpZXMpOwotICB9Ci0KLSAgcHVibGljIEhhc2h0YWJsZSBkZU5vcm1hbGl6ZShIYXNodGFibGUgcHJvcGVydGllcykKLSAgewotICAgIE5vZGUgY3Vyck5vZGUgPSBjb250cm9sbGVyLmdldEN1cnJlbnRQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgaWYgKGN1cnJOb2RlICE9IG51bGwpCi0gICAgewotICAgICAgVHJlZUVsZW1lbnQgY3VyckVsZW1lbnQgPSBjdXJyTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgaWYgKGN1cnJFbGVtZW50IGluc3RhbmNlb2YgV3NpbEVsZW1lbnQpCi0gICAgICB7Ci0gICAgICAgIFdzaWxFbGVtZW50IHdzaWxFbGVtZW50ID0gKFdzaWxFbGVtZW50KSBjdXJyRWxlbWVudDsKLSAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBXU0RMX1NFUlZJQ0UgOgotICAgICAgICAgICAgd3NpbEVsZW1lbnQuZ2V0QWxsV1NETFNlcnZpY2VzKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIFVERElfU0VSVklDRSA6Ci0gICAgICAgICAgICB3c2lsRWxlbWVudC5nZXRBbGxVRERJU2VydmljZXMoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgVURESV9CVVNJTkVTUyA6Ci0gICAgICAgICAgICB3c2lsRWxlbWVudC5nZXRBbGxVRERJTGlua3MoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgV1NJTF9MSU5LIDoKLSAgICAgICAgICAgIHdzaWxFbGVtZW50LmdldEFsbFdTSUxMaW5rcygpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBGUk9NX1RPT0xJRCA6Ci0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgaW50IHRvb2xJZCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZykgcHJvcGVydGllcy5nZXQoQWN0aW9uSW5wdXRzLlRPT0xJRCkpOwotICAgICAgICAgICAgICBUb29sTWFuYWdlciB0b29sTWFuYWdlciA9IGN1cnJOb2RlLmdldFRvb2xNYW5hZ2VyKCk7Ci0gICAgICAgICAgICAgIFRvb2wgdG9vbCA9IHRvb2xNYW5hZ2VyLmdldFRvb2wodG9vbElkKTsKLSAgICAgICAgICAgICAgaWYgKHRvb2wgaW5zdGFuY2VvZiBMaXN0V1NETFNlcnZpY2VzVG9vbCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGxpc3RNYW5hZ2VyS2V5ID0gV3NpbE1vZGVsQ29uc3RhbnRzLkxJU1RfTUFOQUdFUl9XU0RMX1NFUlZJQ0VTOwotICAgICAgICAgICAgICAgIHdzaWxFbGVtZW50LmdldEFsbFdTRExTZXJ2aWNlcygpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGVsc2UgaWYgKHRvb2wgaW5zdGFuY2VvZiBMaXN0VURESVNlcnZpY2VzVG9vbCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGxpc3RNYW5hZ2VyS2V5ID0gV3NpbE1vZGVsQ29uc3RhbnRzLkxJU1RfTUFOQUdFUl9VRERJX1NFUlZJQ0VTOwotICAgICAgICAgICAgICAgIHdzaWxFbGVtZW50LmdldEFsbFVERElTZXJ2aWNlcygpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGVsc2UgaWYgKHRvb2wgaW5zdGFuY2VvZiBMaXN0VURESUJ1c2luZXNzVG9vbCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGxpc3RNYW5hZ2VyS2V5ID0gV3NpbE1vZGVsQ29uc3RhbnRzLkxJU1RfTUFOQUdFUl9VRERJX0xJTktTOwotICAgICAgICAgICAgICAgIHdzaWxFbGVtZW50LmdldEFsbFVERElMaW5rcygpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGVsc2UgaWYgKHRvb2wgaW5zdGFuY2VvZiBMaXN0V1NJTExpbmtzVG9vbCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGxpc3RNYW5hZ2VyS2V5ID0gV3NpbE1vZGVsQ29uc3RhbnRzLkxJU1RfTUFOQUdFUl9XU0lMX0xJTktTOwotICAgICAgICAgICAgICAgIHdzaWxFbGVtZW50LmdldEFsbFdTSUxMaW5rcygpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQgOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLmRlTm9ybWFsaXplKHByb3BlcnRpZXMpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsdWdpbi9FeHBsb3JlclBsdWdpbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci9wbHVnaW4vRXhwbG9yZXJQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzdjM2U2ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BsdWdpbi9FeHBsb3JlclBsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTk0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGx1Z2luOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIuTGF1bmNoV2l6YXJkVGFzazsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIuZmF2b3JpdGVzLkZhdm9yaXRlc1JlZ2lzdHJ5VHlwZURlZmF1bHQ7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7Ci0KLQotLyoqCi0gKiBUaGlzIGlzIHRoZSBwbHVnaW4gY2xhc3MgZm9yIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIuCi0gKi8KLXB1YmxpYyBjbGFzcyBFeHBsb3JlclBsdWdpbiBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4KLXsKLSAgLyoqCi0gICAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBkZXNjcmlwdG9yIG9mIHRoaXMgcGx1Z2luIGluIHBsdWdpbi54bWwuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRCA9ICJvcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDSEFSU0VUID0gIlVURi04IjsKLSAgCi0gIC8qKgotICAgKiBUaGUgcmVmZXJlbmNlIHRvIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBwbHVnaW4uCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBFeHBsb3JlclBsdWdpbiBpbnN0YW5jZV87Ci0gIHByaXZhdGUgQnVuZGxlQ29udGV4dCBjb250ZXh0OwotICAvKioKLSAgICogQ29uc3RydWN0cyBhIHJ1bnRpbWUgcGx1Z2luIG9iamVjdCBmb3IgdGhpcyBwbHVnaW4uIFRoZSAicGx1Z2luIiBlbGVtZW50Ci0gICAqIGluIHBsdWdpbi54bWwgc2hvdWxkIGluY2x1ZGUgdGhlIGF0dHJpYnV0ZSBjbGFzcyA9Ci0gICAqICJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGx1Z2luLkV4cGxvcmVyUGx1Z2luIi4KLSAgICogCi0gICAqIEBwYXJhbSBkZXNjcmlwdG9yCi0gICAqICAgICAgICAgICAgVGhlIGRlc2NyaXB0b3Igb2YgdGhpcyBwbHVnaW4uCi0gICAqLwotICBwdWJsaWMgRXhwbG9yZXJQbHVnaW4oKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgICBpbnN0YW5jZV8gPSB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGlzIHBsdWdpbi4gRXF1aXZhbGVudCB0byBjYWxsaW5nCi0gICAqIChFeHBsb3JlclBsdWdpbilQbGF0Zm9ybS5nZXRQbHVnaW4oIm9yZy5lY2xpcHNlLndzdC53cy5leHBsb3JlciIpOwotICAgKiAKLSAgICogQHJldHVybiBUaGUgRXhwbG9yZXJQbHVnaW4gc2luZ2xldG9uLgotICAgKi8KLSAgc3RhdGljIHB1YmxpYyBFeHBsb3JlclBsdWdpbiBnZXRJbnN0YW5jZSgpCi0gIHsKLSAgICByZXR1cm4gaW5zdGFuY2VfOwotICB9Ci0KLSAgLyoqCi0gICAqIENhbGxlZCBvbmNlIGJ5IHRoZSBwbGF0Zm9ybSB3aGVuIHRoaXMgcGx1Z2luIGlzIGZpcnN0IGxvYWRlZC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgYnVuZGxlKSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICBzdXBlci5zdGFydChidW5kbGUpOwotICAgIC8vIGluaXQgdGhlIHNoZWxsIG9mIExhdW5jaFdpemFyZFRhc2sKLSAgICB0aGlzLmNvbnRleHQgPSBidW5kbGU7Ci0gICAgTGF1bmNoV2l6YXJkVGFzay5nZXRJbnN0YW5jZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIENhbGxlZCBvbmNlIGJ5IHRoZSBwbGF0Zm9ybSB3aGVuIHRoaXMgcGx1Z2luIGlzIHVubG9hZGVkLgotICAgKi8KLSAgcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGJ1bmRsZSkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgc3VwZXIuc3RvcChidW5kbGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1lc3NhZ2Ugc3RyaW5nIGlkZW50aWZpZWQgYnkgdGhlIGdpdmVuIGtleSBmcm9tIHRoZQotICAgKiBwbHVnaW4ucHJvcGVydGllcyBmaWxlIGZvciB0aGUgYXBwcm9wcmlhdGUgbG9jYWxlLgotICAgKiAKLSAgICogQHBhcmFtIGtleQotICAgKiAgICAgICAgICAgIFRoZSBtZXNzYWdlIGtleSBzdHJpbmcgcHJlZml4ZWQgYnkgYSAiJSIgc3ltYm9sLiBUaGF0IGlzLCB0aGUKLSAgICogICAgICAgICAgICBzdHJpbmcgcGFzc2VkIGluIG11c3QgYmUgb2YgdGhlIGZvcm0gIiVLRVkiIHdoZXJlIHRoZQotICAgKiAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzIGZpbGUgY29udGFpbnMgYSBsaW5lIG9mIHRoZSBmb3JtOiAiS0VZID0KLSAgICogICAgICAgICAgICB2YWx1ZSIuCi0gICAqIEByZXR1cm4gVGhlIGxvY2FsZS1zcGVjaWZpYyBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0TWVzc2FnZShTdHJpbmcga2V5KQotICB7Ci0gICAgcmV0dXJuIFBsYXRmb3JtLmdldFJlc291cmNlU3RyaW5nKGluc3RhbmNlXy5nZXRCdW5kbGUoKSwga2V5KTsgCi0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbWVzc2FnZSBzdHJpbmcgaWRlbnRpZmllZCBieSB0aGUgZ2l2ZW4ga2V5IGZyb20gdGhlCi0gICAqIHBsdWdpbi5wcm9wZXJ0aWVzIGZpbGUgZm9yIHRoZSBhcHByb3ByaWF0ZSBsb2NhbGUuIFN1YnN0aXR1dGlvbiBzZXF1ZW5jZXMKLSAgICogaW4gdGhlIG1lc3NhZ2Ugc3RyaW5nIGFyZSByZXBsYWNlZCBieSB0aGUgZ2l2ZW4gYXJyYXkgb2Ygc3Vic3RpdHV0aW9uCi0gICAqIG9iamVjdHMgKHdoaWNoIGFyZSBtb3N0IGZyZXF1ZW50bHkgc3RyaW5ncykuIFNlZSBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdAotICAgKiBmb3IgZnVydGhlciBkZXRhaWxzIG9uIHN1YnN0aXR1dGlvbi4KLSAgICogCi0gICAqIEBwYXJhbSBrZXkKLSAgICogICAgICAgICAgICBUaGUgbWVzc2FnZSBrZXkgc3RyaW5nIHByZWZpeGVkIGJ5IGEgIiUiIHN5bWJvbC4gVGhhdCBpcywgdGhlCi0gICAqICAgICAgICAgICAgc3RyaW5nIHBhc3NlZCBpbiBtdXN0IGJlIG9mIHRoZSBmb3JtICIlS0VZIiB3aGVyZSB0aGUKLSAgICogICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyBmaWxlIGNvbnRhaW5zIGEgbGluZSBvZiB0aGUgZm9ybTogIktFWSA9Ci0gICAqICAgICAgICAgICAgdmFsdWUiLgotICAgKiBAcGFyYW0gYXJncwotICAgKiAgICAgICAgICAgIFRoZSBzdWJzdGl0dXRpb24gdmFsdWVzIGZvciB0aGUgbWVzc2FnZSBhcyByZXF1aXJlZCBieSB0aGUKLSAgICogICAgICAgICAgICBtZXNzYWdlIGluIHBsdWdpbi5wcm9wZXJ0aWVzIGFuZCBieSB0aGUgcnVsZXMgb2YgY2xhc3MKLSAgICogICAgICAgICAgICBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdC4KLSAgICogQHJldHVybiBUaGUgbG9jYWxlLXNwZWNpZmljIG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRNZXNzYWdlKFN0cmluZyBrZXksIE9iamVjdFtdIGFyZ3MpCi0gIHsKLSAgICByZXR1cm4gTWVzc2FnZUZvcm1hdC5mb3JtYXQoZ2V0TWVzc2FnZShrZXkpLCBhcmdzKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIGFuIGltYWdlIGRlc2NyaXB0b3IgZm9yIHRoZSBuYW1lZCByZXNvdXJjZSBhcyByZWxhdGl2ZSB0byB0aGUKLSAgICogcGx1Z2luIGluc3RhbGwgbG9jYXRpb24uCi0gICAqIAotICAgKiBAcmV0dXJuIEFuIGltYWdlIGRlc2NyaXB0b3IsIHBvc3NpYmx5IG51bGwuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIEltYWdlRGVzY3JpcHRvciBnZXRJbWFnZURlc2NyaXB0b3IoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBVUkwgaW5zdGFsbFVSTCA9IGluc3RhbmNlXy5nZXRCdW5kbGUoKS5nZXRFbnRyeSgiLyIpOwotICAgICAgVVJMIGltYWdlVVJMID0gbmV3IFVSTChpbnN0YWxsVVJMLCBuYW1lKTsKLSAgICAgIHJldHVybiBJbWFnZURlc2NyaXB0b3IuY3JlYXRlRnJvbVVSTChpbWFnZVVSTCk7Ci0gICAgfQotICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogU2VlIElQbHVnaW5IZWxwZXIuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRNc2dMb2dnZXJDb25maWcoSGFzaHRhYmxlIG1zZ0xvZ2dlckNvbmZpZykKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIFNlZSBJUGx1Z2luSGVscGVyLgotICAgKi8KLSAgcHVibGljIEhhc2h0YWJsZSBnZXRNc2dMb2dnZXJDb25maWcoUGx1Z2luIHBsdWdpbikKLSAgewotICAgIHJldHVybiBuZXcgSGFzaHRhYmxlKCk7Ci0gIH0KLQotICAvKioKLSAgICogU2VlIElQbHVnaW5IZWxwZXIuCi0gICAqLwotICBwdWJsaWMgSGFzaHRhYmxlIGdldE1zZ0xvZ2dlckNvbmZpZygpCi0gIHsKLSAgICByZXR1cm4gZ2V0TXNnTG9nZ2VyQ29uZmlnKHRoaXMpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRQbHVnaW5TdGF0ZUxvY2F0aW9uKCkKLSAgewotICAgIHJldHVybiBQbGF0Zm9ybS5nZXRQbHVnaW5TdGF0ZUxvY2F0aW9uKHRoaXMpLmFkZFRyYWlsaW5nU2VwYXJhdG9yKCkudG9PU1N0cmluZygpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXREZWZhdWx0RmF2b3JpdGVzTG9jYXRpb24oKQotICB7Ci0JLy8gVE9ETzogZ2V0UGx1Z2luSW5zdGFsbExvY2F0aW9uIGNhbiByZXR1cm4gbnVsbCBhbmQgY2F1c2UgdHJvdWJsZSBmb3IgdGhlIFdTRSdzIGZhdm91cml0ZXMgbWVjaGFuaXNtLiA4OTEwMSBzaG91bGQgY29ycmVjdCB0aGlzLgotCXJldHVybiBnZXRQbHVnaW5JbnN0YWxsTG9jYXRpb24oKStGYXZvcml0ZXNSZWdpc3RyeVR5cGVEZWZhdWx0LkZBVk9SSVRFU19ERUZBVUxUOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFBsdWdpbkluc3RhbGxMb2NhdGlvbigpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICByZXR1cm4gUGxhdGZvcm0ucmVzb2x2ZShpbnN0YW5jZV8uZ2V0QnVuZGxlKCkuZ2V0RW50cnkoIi8iKSkuZ2V0RmlsZSgpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIEJ1bmRsZUNvbnRleHQgZ2V0QnVuZGxlQ29udGV4dCgpIHsKLQkJcmV0dXJuIGdldEluc3RhbmNlKCkuY29udGV4dDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3BvcHVwL1BvcHVwVGVzdFdTREwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcG9wdXAvUG9wdXBUZXN0V1NETC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODJiNThmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvcG9wdXAvUG9wdXBUZXN0V1NETC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDYwNiAgIDEwNTA2OSBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24KLSAqIDIwMDYwODAzICAgMTUyNzkwIG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbgotICogMjAwNzAzMjcgICAxNzIzMzkga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucG9wdXA7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkRlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIuTGF1bmNoT3B0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5MYXVuY2hPcHRpb25zOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5XU0V4cGxvcmVyTGF1bmNoZXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbHVnaW4uRXhwbG9yZXJQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vbml0b3IuR2V0TW9uaXRvckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VzUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS51dGlscy5BZGFwdGVyVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlNlcnZpY2VJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETFJlc291cmNlSW1wbDsKLQotcHVibGljIGNsYXNzIFBvcHVwVGVzdFdTREwgZXh0ZW5kcyBBY3Rpb24gaW1wbGVtZW50cyBJQWN0aW9uRGVsZWdhdGUKLXsKLSAgcHVibGljIFBvcHVwVGVzdFdTREwoKQotICB7Ci0gICAgc3VwZXIoRXhwbG9yZXJQbHVnaW4uZ2V0TWVzc2FnZSgiJVBPUFVQX1RFU1RfV1NETCIpKTsKLSAgfQotCi0gIHByb3RlY3RlZCBJU3RydWN0dXJlZFNlbGVjdGlvbiBnZXRXb3JrYmVuY2hTZWxlY3Rpb24oKQotICB7Ci0gICAgSVdvcmtiZW5jaFdpbmRvdyB3aW5kb3cgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOwotICAgIGlmICh3aW5kb3cgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb25TZXJ2aWNlKCkuZ2V0U2VsZWN0aW9uKCk7Ci0gICAgICBpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pCi0gICAgICAgIHJldHVybiAoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uOwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJ1bigpCi0gIHsKLQlTdHJpbmcgc3RhdGVMb2NhdGlvbiA9IEV4cGxvcmVyUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UGx1Z2luU3RhdGVMb2NhdGlvbigpOwotCVN0cmluZyBkZWZhdWx0RmF2b3JpdGVzTG9jYXRpb24gPSBFeHBsb3JlclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldERlZmF1bHRGYXZvcml0ZXNMb2NhdGlvbigpOwotICAJV1NFeHBsb3JlckxhdW5jaGVyQ29tbWFuZCBjb21tYW5kID0gbmV3IFdTRXhwbG9yZXJMYXVuY2hlckNvbW1hbmQoKTsKLSAgICBjb21tYW5kLnNldEZvcmNlTGF1bmNoT3V0c2lkZUlERShmYWxzZSk7Ci0gICAgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uID0gZ2V0V29ya2JlbmNoU2VsZWN0aW9uKCk7Ci0gICAgVmVjdG9yIGxhdW5jaE9wdGlvbnMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgaWYgKHNlbGVjdGlvbiAhPSBudWxsKQotICAgIHsKLSAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBzZWxlY3Rpb24uaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHdzZGxVUkwgPSBudWxsOwotICAgICAgICBPYmplY3Qgb2JqZWN0ID0gaXQubmV4dCgpOwotICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgSVJlc291cmNlKQotICAgICAgICB7Ci0gICAgICAgIAlGaWxlIHdzZGxGaWxlID0gKChJUmVzb3VyY2Upb2JqZWN0KS5nZXRMb2NhdGlvbigpLnRvRmlsZSgpOwotICAgICAgICAJdHJ5Ci0gICAgICAgIAl7Ci0gICAgICAgIAkJd3NkbFVSTCA9IHdzZGxGaWxlLnRvVVJMKCkudG9TdHJpbmcoKTsKLSAgICAgICAgCX0KLSAgICAgICAgCWNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gbXVybGUpCi0gICAgICAgIAl7Ci0gICAgICAgIAkJd3NkbFVSTCA9IHdzZGxGaWxlLnRvU3RyaW5nKCk7Ci0gICAgICAgIAl9Ci0gICAgICAgIH0gZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgU2VydmljZUltcGwpCi0gICAgICAgIHsKLSAgICAgICAgCVNlcnZpY2VJbXBsIHNlcnZpY2VJbXBsID0gKFNlcnZpY2VJbXBsKW9iamVjdDsgICAgICAgICAgCi0gICAgICAgIAlEZWZpbml0aW9uIGRlZmluaXRpb24gPSBzZXJ2aWNlSW1wbC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7ICAgICAgICAKLSAgICAgICAgCXdzZGxVUkwgPSBkZWZpbml0aW9uLmdldExvY2F0aW9uKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgV1NETFJlc291cmNlSW1wbCkKLSAgICAgICAgewotICAgICAgICAJV1NETFJlc291cmNlSW1wbCBXU0RMUkltcGwgPSAoV1NETFJlc291cmNlSW1wbClvYmplY3Q7Ci0gICAgICAgIAlEZWZpbml0aW9uIGRlZmluaXRpb24gPSBXU0RMUkltcGwuZ2V0RGVmaW5pdGlvbigpOwotICAgICAgICAJd3NkbFVSTCA9IGRlZmluaXRpb24uZ2V0TG9jYXRpb24oKTsKLSAgICAgICAgfSBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBTdHJpbmcpIHsKLSAgICAgICAgCXdzZGxVUkwgPSAoU3RyaW5nKSBvYmplY3Q7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgIAkvLyBPYmplY3QgaXMgbm90IGFueSB0eXBlcyB3ZSByZWNvZ25pemVkLCB3c2RsVVJMIGlzIHN0aWxsIG51bGwuCi0gICAgICAgICAgCS8vIFRyeSBsb29raW5nIHVwIGFuIGFkYXB0ZXIgZm9yIHRoZSBvYmplY3QuCi0gICAgICAgIAkvLyBJZiBmb3VuZCwgdXBkYXRlIHdzZGxVUkwgY29udGFpbnMgdGhlIGFkYXB0ZWQgV1NETCBzdHJpbmcuICAKLSAgICAgICAgCS8vIElmIG5vdCBmb3VuZCwgd3NkbFVSTCB3b3VsZCBzdGlsbCBiZSBudWxsLgotICAgICAgICAJd3NkbFVSTCA9IEFkYXB0ZXJVdGlscy5nZXRBZGFwdGVkV1NETChvYmplY3QpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgIGFkZExhdW5jaE9wdGlvbnMobGF1bmNoT3B0aW9ucywgd3NkbFVSTCwgc3RhdGVMb2NhdGlvbiwgZGVmYXVsdEZhdm9yaXRlc0xvY2F0aW9uKTsgICAgICAgIAotICAgICAgfQotICAgIH0KLSAgICBjb21tYW5kLnNldExhdW5jaE9wdGlvbnMoKExhdW5jaE9wdGlvbltdKWxhdW5jaE9wdGlvbnMudG9BcnJheShuZXcgTGF1bmNoT3B0aW9uWzBdKSk7Ci0gICAgY29tbWFuZC5leGVjdXRlKCk7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IGFuZCBhZGQgdGhlIFdFQl9TRVJWSUNFX0VORFBPSU5ULCBXU0RMX1VSTCwgU1RBVEVfTE9DQVRJSU9OIGFuZCAKLSAgICogREVGQVVMVF9GQVZPUklURVNfTE9DQVRJT04gTGF1bmNoT3B0aW9ucyB0byB0aGUgbGF1bmNoT3B0aW9ucyB2ZWN0b3IKLSAgICogCi0gICAqIEBwYXJhbSBsYXVuY2hPcHRpb25zIC0gdmVjdG9yIG9mIGxhdW5jaE9wdGlvbnMgdG8gYWRkIHRvCi0gICAqIEBwYXJhbSB3c2RsVVJMCi0gICAqIEBwYXJhbSBzdGF0ZUxvY2F0aW9uCi0gICAqIEBwYXJhbSBkZWZhdWx0RmF2b3JpdGVzTG9jYXRpb24KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGFkZExhdW5jaE9wdGlvbnMoVmVjdG9yIGxhdW5jaE9wdGlvbnMsIFN0cmluZyB3c2RsVVJMLCBTdHJpbmcgc3RhdGVMb2NhdGlvbiwgU3RyaW5nIGRlZmF1bHRGYXZvcml0ZXNMb2NhdGlvbikKLSAgewotCSAgR2V0TW9uaXRvckNvbW1hbmQgZ2V0TW9uaXRvckNtZCA9IG5ldyBHZXRNb25pdG9yQ29tbWFuZCgpOwotICAgICAgZ2V0TW9uaXRvckNtZC5zZXRNb25pdG9yU2VydmljZSh0cnVlKTsKLSAgICAgIGdldE1vbml0b3JDbWQuc2V0Q3JlYXRlKGZhbHNlKTsKLSAgICAgIGdldE1vbml0b3JDbWQuc2V0V2ViU2VydmljZXNQYXJzZXIobmV3IFdlYlNlcnZpY2VzUGFyc2VyKCkpOwotICAgICAgZ2V0TW9uaXRvckNtZC5zZXRXc2RsVVJJKHdzZGxVUkwpOwotICAgICAgZ2V0TW9uaXRvckNtZC5leGVjdXRlKG51bGwsIG51bGwpOwotICAgICAgTGlzdCBlbmRwb2ludHMgPSBnZXRNb25pdG9yQ21kLmdldEVuZHBvaW50cygpOwotICAgICAgZm9yIChJdGVyYXRvciBlbmRwb2ludHNJdCA9IGVuZHBvaW50cy5pdGVyYXRvcigpOyBlbmRwb2ludHNJdC5oYXNOZXh0KCk7KQotICAgICAgewotICAgIAkgIGxhdW5jaE9wdGlvbnMuYWRkKG5ldyBMYXVuY2hPcHRpb24oTGF1bmNoT3B0aW9ucy5XRUJfU0VSVklDRV9FTkRQT0lOVCwgKFN0cmluZyllbmRwb2ludHNJdC5uZXh0KCkpKTsKLSAgICAgIH0KLSAgICAgIGxhdW5jaE9wdGlvbnMuYWRkKG5ldyBMYXVuY2hPcHRpb24oTGF1bmNoT3B0aW9ucy5XU0RMX1VSTCwgd3NkbFVSTCkpOwotCSAgbGF1bmNoT3B0aW9ucy5hZGQobmV3IExhdW5jaE9wdGlvbihMYXVuY2hPcHRpb25zLlNUQVRFX0xPQ0FUSU9OLHN0YXRlTG9jYXRpb24pKTsKLQkgIGxhdW5jaE9wdGlvbnMuYWRkKG5ldyBMYXVuY2hPcHRpb24oTGF1bmNoT3B0aW9ucy5ERUZBVUxUX0ZBVk9SSVRFU19MT0NBVElPTixkZWZhdWx0RmF2b3JpdGVzTG9jYXRpb24pKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgcnVuKElBY3Rpb24gYWN0aW9uKQotICB7Ci0gICAgcnVuKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKElBY3Rpb24gYWN0aW9uLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikKLSAgewotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci90cmFuc3BvcnQvSFRUUFRyYW5zcG9ydEV4Y2VwdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci90cmFuc3BvcnQvSFRUUFRyYW5zcG9ydEV4Y2VwdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDI0YzM1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvdHJhbnNwb3J0L0hUVFBUcmFuc3BvcnRFeGNlcHRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDQxMyAgIDE3NjQ5MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFOiBNYWtlIG1lc3NhZ2UvdHJhbnNwb3J0IHN0YWNrIHBsdWdnYWJsZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi0vKioKLSAqIEEgdHlwZSBvZiBUcmFuc3BvcnRFeGNlcHRpb24gdGhhdCBjYW4gYmUgdGhyb3duIHdoZW4gdGhlIHRyYW5zcG9ydCBwcm90b2NvbAotICogaXMgSFRUUC4gIFRoZSBzdGF0dXMgY29kZSBvZiB0aGUgSFRUUCByZXNwb25zZSBpcyBjYXB0dXJlZCBpbiB0aGlzCi0gKiBleGNlcHRpb24gYW5kIHBhc3NlZCB1cCB0byB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLgotICovCi1wdWJsaWMgY2xhc3MgSFRUUFRyYW5zcG9ydEV4Y2VwdGlvbiBleHRlbmRzIFRyYW5zcG9ydEV4Y2VwdGlvbiB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSA4Mjc3MTgwNzMxNzk4ODU4ODc3TDsKLQkKLQlwcml2YXRlIGludCBzdGF0dXNDb2RlOwotCXByaXZhdGUgTWFwIGhlYWRlcnM7Ci0JCi0JLyoqCi0JICogQ29uc3RydWN0b3IuCi0JICogCi0JICogQHBhcmFtIHN0YXR1c0NvZGUgVGhlIEhUVFAgc3RhdHVzIGNvZGUuCi0JICogQHBhcmFtIG1lc3NhZ2UgQSBtZXNzYWdlIGFib3V0IHRoZSBwcm9ibGVtIHRoYXQgb2NjdXJyZWQuCi0JICogQHBhcmFtIGhlYWRlcnMgQSBtYXAgb2YgdGhlIEhUVFAgaGVhZGVycy4KLQkgKi8KLQlwdWJsaWMgSFRUUFRyYW5zcG9ydEV4Y2VwdGlvbihpbnQgc3RhdHVzQ29kZSwgU3RyaW5nIG1lc3NhZ2UsIE1hcCBoZWFkZXJzKSB7Ci0JCXN1cGVyKG1lc3NhZ2UpOwotCQl0aGlzLnN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlOwotCQl0aGlzLmhlYWRlcnMgPSBoZWFkZXJzOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBIVFRQIHN0YXR1cyBjb2RlIHVzZWQgdG8gY3JlYXRlIHRoaXMgZXhjZXB0aW9uLgotCSAqIAotCSAqIEByZXR1cm4gVGhlIEhUVFAgc3RhdHVzIGNvZGUuCi0JICovCi0JcHVibGljIGludCBnZXRTdGF0dXNDb2RlKCkgewotCQlyZXR1cm4gc3RhdHVzQ29kZTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0cmlldmUgdGhlIEhUVFAgaGVhZGVyIGZvciB0aGUgZ2l2ZW4ga2V5Ci0JICogCi0JICogQHBhcmFtIGtleSBUaGUga2V5IHZhbHVlLgotCSAqIEByZXR1cm4gVGhlIEhUVFAgaGVhZGVyIHZhbHVlIGZvciBrZXksIG9yIG51bGwgaWYgdGhlcmUgaXMgbm8gc3VjaCBoZWFkZXIuCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRIZWFkZXIoU3RyaW5nIGtleSkgewotCSAgICBPYmplY3QgdmFsdWUgPSBoZWFkZXJzLmdldChrZXkpOwotCSAgICBpZiAodmFsdWUgIT0gbnVsbCkKLQkgICAgCXJldHVybiB2YWx1ZS50b1N0cmluZygpOwotCSAgICBlbHNlCi0JICAgIAlyZXR1cm4gbnVsbDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3RyYW5zcG9ydC9JRGVzZXJpYWxpemVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3RyYW5zcG9ydC9JRGVzZXJpYWxpemVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0OGEyMGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci90cmFuc3BvcnQvSURlc2VyaWFsaXplci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNDEzICAgMTc2NDkzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0U6IE1ha2UgbWVzc2FnZS90cmFuc3BvcnQgc3RhY2sgcGx1Z2dhYmxlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydDsKLQotLyoqCi0gKiBUaGUgSURlc2VyaWFsaXplciBpcyByZXNwb25zaWJsZSBmb3IgdGFraW5nIGFuIFhNTCBzdHJpbmcgYW5kIGRlc2VyaWFsaXppbmcgaXQKLSAqIGludG8gdmFsdWVzIHRvIHBvcHVsYXRlIGFuIElTT0FQTWVzc2FnZS4KLSAqLwotcHVibGljIGludGVyZmFjZSBJRGVzZXJpYWxpemVyIHsKLQkKLQkvKioKLQkgKiBEZXNlcmlhbGl6ZSB0aGUgWE1MIHN0cmluZyBpbnRvIHRoZSBJU09BUE1lc3NhZ2UuICBUaGUgcGFydCBwYXJhbWV0ZXIgdGVsbHMgdGhlIG1ldGhvZAotCSAqIHdoaWNoIHBhcnQgb2YgdGhlIG1lc3NhZ2UgKHRoZSBlbnZlbG9wZSBvciB0aGUgY29udGVudHMgb2YgdGhlIGhlYWRlciBvciBib2R5KSB0aGUgWE1MCi0JICogc3RyaW5nIHJlcHJlc2VudHMuICBOb3RlIHRoYXQgImNvbnRlbnRzIiByZWZlcnMgdG8gdGhlIGxpc3Qgb2YgZWxlbWVudHMgaW5zaWRlIHRoZSBoZWFkZXIKLQkgKiBvciBib2R5LCBhbmQgbm90IHRoZSBoZWFkZXIgb3IgYm9keSBlbGVtZW50IGl0c2VsZi4KLQkgKiAKLQkgKiBAcGFyYW0gcGFydCBPbmUgb2Yge0BsaW5rIElTT0FQTWVzc2FnZSNFTlZFTE9QRX0sIHtAbGluayBJU09BUE1lc3NhZ2UjSEVBREVSX0NPTlRFTlR9LCBvcgotCSAqIHtAbGluayBJU09BUE1lc3NhZ2UjQk9EWV9DT05URU5UfS4KLQkgKiBAcGFyYW0geG1sIFRoZSBYTUwgc3RyaW5nIHRvIGRlc2VyaWFsaXplLgotCSAqIEBwYXJhbSBtZXNzYWdlIFRoZSBJU09BUE1lc3NhZ2UgdG8gZGVzZXJpYWxpemUgaW50by4KLQkgKiBAdGhyb3dzIFRyYW5zcG9ydEV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIGRlc2VyaWFsaXplKGludCBwYXJ0LCBTdHJpbmcgeG1sLCBJU09BUE1lc3NhZ2UgbWVzc2FnZSkgdGhyb3dzIFRyYW5zcG9ydEV4Y2VwdGlvbjsJCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci90cmFuc3BvcnQvSVNPQVBNZXNzYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3RyYW5zcG9ydC9JU09BUE1lc3NhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmNkMGFkNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3RyYW5zcG9ydC9JU09BUE1lc3NhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA0MTMgICAxNzY0OTMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTRTogTWFrZSBtZXNzYWdlL3RyYW5zcG9ydCBzdGFjayBwbHVnZ2FibGUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0OwotCi1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLS8qKgotICogVGhlIElTT0FQTWVzc2FnZSByZXByZXNlbnRzIGEgU09BUCBtZXNzYWdlIGluIGEgd2ViIHNlcnZpY2UgaW52b2NhdGlvbiBtYWRlIGJ5IHRoZQotICogV2ViIFNlcnZpY2VzIEV4cGxvcmVyJ3MgdHJhbnNwb3J0IHN0YWNrLgotICogPGJyLz4KLSAqIDxici8+Ci0gKiBUaGUgc2V0dGVycyBvZiBJU09BUE1lc3NhZ2UgYXJlIGNhbGxlZCBieSBXZWIgU2VydmljZXMgRXhwbG9yZXIgdG8gcG9wdWxhdGUgdGhlCi0gKiBtZXNzYWdlIGJlZm9yZSBzZW5kaW5nLiAgV1NFIGRvZXMgbm90IGd1YXJhbnRlZSB0aGF0IGFsbCBtZXNzYWdlIGVsZW1lbnRzIGl0IHNldHMKLSAqIHdpbGwgaGF2ZSB0aGUgc2FtZSBvd25lciBkb2N1bWVudC4KLSAqLwotcHVibGljIGludGVyZmFjZSBJU09BUE1lc3NhZ2UgewotCi0JLyoqCi0JICogSVNPQVBNZXNzYWdlIGRlZmluZXMgdGhpcyBwcm9wZXJ0eSBmb3Igc3RvcmluZyB0aGUgU09BUCBhY3Rpb24gdmFsdWUgaW4KLQkgKiBhIHdlYiBzZXJ2aWNlIGludm9jYXRpb24uICBUaGlzIHByb3BlcnR5IHdpbGwgYmUgc2V0IGJ5IFdlYiBTZXJ2aWNlcyBFeHBsb3JlcgotCSAqIHByaW9yIHRvIHBhc3NpbmcgdGhlIG1lc3NhZ2UgdG8ge0BsaW5rIElTT0FQVHJhbnNwb3J0I3NlbmQoU3RyaW5nLCBTdHJpbmcsIFN0cmluZywgSVNPQVBNZXNzYWdlKX0KLQkgKi8KLQlTdHJpbmcgUFJPUF9TT0FQX0FDVElPTiA9ICJwcm9wX3NvYXBfYWN0aW9uIjsKLQkKLQkvKioKLQkgKiBUaGlzIHZhbHVlIGlzIHVzZWQgd2hlbiBzZXJpYWxpemluZyBhbmQgZGVzZXJpYWxpemluZyBhIG1lc3NhZ2UuICBJdCBpbmRpY2F0ZXMgdGhlIG9wZXJhdGlvbgotCSAqIGlzIHdvcmtpbmcgd2l0aCB0aGUgZW50aXJlIFNPQVAgZW52ZWxvcGUgZWxlbWVudC4gCi0JICovCi0JaW50IEVOVkVMT1BFID0gMDsKLQkKLQkvKioKLQkgKiBUaGlzIHZhbHVlIGlzIHVzZWQgd2hlbiBzZXJpYWxpemluZyBhbmQgZGVzZXJpYWxpemluZyBhIG1lc3NhZ2UuICBJdCBpbmRpY2F0ZXMgdGhlIG9wZXJhdGlvbgotCSAqIGlzIHdvcmtpbmcgd2l0aCB0aGUgZWxlbWVudHMgaW5zaWRlIHRoZSBTT0FQIGhlYWRlciBlbGVtZW50LgotCSAqLwotCWludCBIRUFERVJfQ09OVEVOVCA9IDE7Ci0JCi0JLyoqCi0JICogVGhpcyB2YWx1ZSBpcyB1c2VkIHdoZW4gc2VyaWFsaXppbmcgYW5kIGRlc2VyaWFsaXppbmcgYSBtZXNzYWdlLiAgSXQgaW5kaWNhdGVzIHRoZSBvcGVyYXRpb24KLQkgKiBpcyB3b3JraW5nIHdpdGggdGhlIGVsZW1lbnRzIGluc2lkZSB0aGUgU09BUCBib2R5IGVsZW1lbnQuCi0JICovCi0JaW50IEJPRFlfQ09OVEVOVCA9IDI7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBNZXNzYWdlQ29udGV4dCBhc3NvY2lhdGVkIHdpdGggdGhpcyBtZXNzYWdlLiAgVGhlIE1lc3NhZ2VDb250ZXh0IGlzIGNyZWF0ZWQKLQkgKiBieSB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGFuZCBwYXNzZWQgdG8gdGhlIHRyYW5zcG9ydCBzdGFjayBkdXJpbmcgbWVzc2FnZSBjcmVhdGlvbi4gIAotCSAqIEltcGxlbWVudGVycyBvZiBJU09BUE1lc3NhZ2Ugc2hvdWxkIHN0b3JlIGEgcmVmZXJlbmNlIHRvIHRoZSBNZXNzYWdlQ29udGV4dC4KLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBNZXNzYWdlQ29udGV4dCBlbmNhc3VsYXRpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHdlYiBzZXJ2aWNlIG9wZXJhdGlvbi4gCi0JICogQHNlZSBJU09BUFRyYW5zcG9ydCNuZXdNZXNzYWdlKE1lc3NhZ2VDb250ZXh0KQotCSAqLwotCXB1YmxpYyBNZXNzYWdlQ29udGV4dCBnZXRNZXNzYWdlQ29udGV4dCgpOwotCi0JLyoqCi0JICogU2V0cyBhIHByb3BlcnR5IGluIHRoaXMgSVNPQVBNZXNzYWdlLgotCSAqIAotCSAqIEBwYXJhbSBrZXkgVGhlIGtleSAobmFtZSkgb2YgdGhlIHByb3BlcnR5Ci0JICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkuCi0JICovCi0JcHVibGljIHZvaWQgc2V0UHJvcGVydHkoU3RyaW5nIGtleSwgT2JqZWN0IHZhbHVlKTsKLQotCS8qKgotCSAqIFJldHJpZXZlcyBhIHByb3BlcnR5IGZyb20gdGhpcyBJU09BUE1lc3NhZ2UuCi0JICogCi0JICogQHBhcmFtIGtleSBUaGUga2V5IChuYW1lKSBvZiB0aGUgcHJvcGVydHkgdG8gcmV0cmlldmUuCi0JICogQHJldHVybiBUaGUgdmFsdWUgYXNzb2ljYXRlZCB3aXRoIHRoZSBnaXZlbiBrZXksIG9yIG51bGwgaWYgdGhlcmUncyBubyBzdWNoIHByb3BlcnR5LgotCSAqLwotCXB1YmxpYyBPYmplY3QgZ2V0UHJvcGVydHkoU3RyaW5nIGtleSk7Ci0KLQkvKioKLQkgKiBUaGUgbmFtZXNwYWNlIHRhYmxlIGhvbGRzIHRoZSBuYW1lc3BhY2UgZGVjbGFyYWlvbnMgdGhhdCBhcmUgb24gdGhlIGVudmVsb3BlIGVsZW1lbnQKLQkgKiBvZiB0aGUgU09BUCBtZXNzYWdlLiAgVGhlIHRhYmxlJ3Mga2V5cyBhcmUgdGhlIG5hbWVzcGFjZSBVUklzIGFuZCB0aGUgdmFsdWVzIGFyZSB0aGUKLQkgKiBhc3NvY2lhdGVkIG5hbWVzcGFjZSBwcmVmaXhlcy4KLQkgKiA8YnIvPgotCSAqIDxici8+Ci0JICogVGhlIGVmZmVjdCBvZiBjYWxsaW5nIHRoaXMgbWV0aG9kIGlzIHRoYXQgdGhlIGRlY2xhcmF0aW9ucyBpbiB0aGUgbmFtZXNwYWNlIHRhYmxlCi0JICogYXJndW1lbnQgc2hvdWxkIGFkZCB0byBvciByZXBsYWNlIHRoZSBkZWNsYXJhdGlvbnMgb24gdGhlIGVudmVsb3BlLiAgVGhpcyBBUEkgZG9lcwotCSAqIG5vdCBzcGVjaWZ5IHdoYXQgaGFwcGVucyB0byBleGlzdGluZyBkZWNsYXJhdGlvbnMgb24gdGhlIGVudmVsb3BlIHdoaWNoIGFyZSBub3QKLQkgKiBpbiB0aGUgbmFtZXNwYWNlIHRhYmxlIHBhc3NlZCBpbi4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZXNwYWNlVGFibGUgVGhlIG5hbWVzcGFjZSB0YWJsZQotCSAqLwotCXB1YmxpYyB2b2lkIHNldE5hbWVzcGFjZVRhYmxlKE1hcCBuYW1lc3BhY2VUYWJsZSk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGEgdGFibGUgb2YgdGhlIG5hbWVzcGFjZSBkZWNsYXJhdGlvbnMgdGhhdCBhcmUgb24gdGhlIGVudmVsb3BlIGVsZW1lbnQgb2YgdGhlCi0JICogU09BUCBtZXNzYWdlLiAgVGhlIHRhYmxlJ3Mga2V5cyBhcmUgdGhlIG5hbWVzcGFjZSBVUklzIGFuZCB0aGUgdmFsdWVzIGFyZSB0aGUKLQkgKiBhc3NvY2lhdGVkIG5hbWVzcGFjZSBwcmVmaXhlcy4KLQkgKiA8YnIvPgotCSAqIDxici8+Ci0JICogVGhlIG5hbWVzcGFjZSB0YWJsZSByZXR1cm5lZCBieSB0aGlzIG1ldGhvZCBtYXkgYmUgbW9kaWZpZWQgYnkgdGhlIFdlYiBTZXJ2aWNlcwotCSAqIEV4cGxvcmVyIGFuZCBsYXRlciB1cGRhdGVkIGJhY2sgdG8gdGhlIG1lc3NhZ2UgdmlhIHRoZSBzZXROYW1lc2FwY2VUYWJsZSgpIG1ldGhvZC4KLQkgKiAKLQkgKiBAcmV0dXJuIEEgdGFibGUgb2YgbmFtZXNwYWNlIFVSSXMgdG8gcHJlZml4ZXMgb24gdGhlIFNPQVAgZW52ZWxvcGUuCi0JICovCi0JcHVibGljIE1hcCBnZXROYW1lc3BhY2VUYWJsZSgpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgZW52ZWxvcGUgZWxlbWVudCBvZiB0aGlzIG1lc3NhZ2UuCi0JICogCi0JICogQHBhcmFtIGVudmVsb3BlIFRoZSBlbnZlbG9wZSBlbGVtZW50LgotCSAqLwotCXB1YmxpYyB2b2lkIHNldEVudmVsb3BlKEVsZW1lbnQgZW52ZWxvcGUpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZW52ZWxvcGUgZWxlbWVudCBvZiB0aGlzIG1lc3NhZ2UuICBUaGUgZGVlcCBwYXJhbWV0ZXIgZGljdGF0ZXMgd2hldGhlcgotCSAqIHRoZSBtZXRob2QgcmV0dXJucyB0aGUgd2hvbGUgZW52ZWxvcGUgd2l0aCBhbGwgaXRzIGRlc2NlbmRhbnRzIG9yIGp1c3QgdGhlIGVudmVsb3BlIAotCSAqIGVsZW1lbnQgaXRzZWxmLgotCSAqIAotCSAqIEBwYXJhbSBkZWVwIElmIHRydWUsIHRoZSBlbnZlbG9wZSBhbmQgaXRzIGRlc2NlbmRhbnRzIGFyZSByZXR1cm5lZCwgb3RoZXJ3aXNlIG9ubHkKLQkgKiB0aGUgZW52ZWxvcGUgZWxlbWVudCBpdHNlbGYgaXMgcmV0dXJuZWQuCi0JICogQHJldHVybiBBbiBlbGVtZW50LgotCSAqLwotCXB1YmxpYyBFbGVtZW50IGdldEVudmVsb3BlKGJvb2xlYW4gZGVlcCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBoZWFkZXIgZWxlbWVudCBvZiB0aGlzIG1lc3NhZ2UuCi0JICogCi0JICogQHBhcmFtIGhlYWRlciBUaGUgaGVhZGVyIGVsZW1lbnQuCi0JICovCi0JcHVibGljIHZvaWQgc2V0SGVhZGVyKEVsZW1lbnQgaGVhZGVyKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGhlYWRlciBlbGVtZW50IG9mIHRoaXMgbWVzc2FnZS4gIFRoZSBkZWVwIHBhcmFtZXRlciBkaWN0YXRlcyB3aGV0aGVyCi0JICogdGhlIG1ldGhvZCByZXR1cm5zIHRoZSB3aG9sZSBoZWFkZXIgd2l0aCBhbGwgaXRzIGRlc2NlbmRhbnRzIG9yIGp1c3QgdGhlIGhlYWRlciAKLQkgKiBlbGVtZW50IGl0c2VsZi4KLQkgKiAKLQkgKiBAcGFyYW0gZGVlcCBJZiB0cnVlLCB0aGUgaGVhZGVyIGFuZCBpdHMgZGVzY2VuZGFudHMgYXJlIHJldHVybmVkLCBvdGhlcndpc2Ugb25seQotCSAqIHRoZSBoZWFkZXIgZWxlbWVudCBpdHNlbGYgaXMgcmV0dXJuZWQuCi0JICogQHJldHVybiBBbiBlbGVtZW50LgotCSAqLwotCXB1YmxpYyBFbGVtZW50IGdldEhlYWRlcihib29sZWFuIGRlZXApOwotCi0JLyoqCi0JICogU2V0cyBhbiBhcnJheSBvZiBlbGVtZW50cyB0aGF0IGdvZXMgaW50byB0aGUgbWVzc2FnZSdzIGhlYWRlci4KLQkgKiAKLQkgKiBAcGFyYW0gaGVhZGVyQ29udGVudCBBbiBhcnJheSBvZiBlbGVtZW50cy4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRIZWFkZXJDb250ZW50KEVsZW1lbnRbXSBoZWFkZXJDb250ZW50KTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGFycmF5IG9mIGVsZW1lbnRzIHRoYXQgYXJlIGluc2lkZSB0aGUgbWVzc2FnZSdzIGhlYWRlci4KLQkgKiAKLQkgKiBAcmV0dXJuIEFuIGFycmF5IG9mIGVsZW1lbnRzLgotCSAqLwotCXB1YmxpYyBFbGVtZW50W10gZ2V0SGVhZGVyQ29udGVudCgpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgYm9keSBlbGVtZW50IG9mIHRoaXMgbWVzc2FnZS4gIEZvciBhbiBSUEMgc3R5bGUgbWVzc2FnZSwgdGhlIGZpcnN0IGNoaWxkCi0JICogZWxlbWVudCBvZiB0aGUgYm9keSBzaG91bGQgYmUgdGhlIFJQQyB3cmFwcGVyIGVsZW1lbnQuCi0JICogCi0JICogQHBhcmFtIGJvZHkgVGhlIGJvZHkgZWxlbWVudC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRCb2R5KEVsZW1lbnQgYm9keSk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBib2R5IG9mIHRoaXMgbWVzc2FnZS4gIFRoZSBkZWVwIHBhcmFtZXRlciBkaWN0YXRlcyB3aGV0aGVyCi0JICogdGhlIG1ldGhvZCByZXR1cm5zIHRoZSB3aG9sZSBib2R5IHdpdGggYWxsIGl0cyBkZXNjZW5kYW50cyBlbGVtZW50cyBvciBqdXN0IHRoZQotCSAqIGJvZHkuICBGb3IgYW4gUlBDIHN0eWxlIG1lc3NhZ2UsIHRoZSBmaXJzdCBjaGlsZCBlbGVtZW50IG9mIHRoZSAKLQkgKiBib2R5IHNob3VsZCBiZSB0aGUgUlBDIHdyYXBwZXIgZWxlbWVudCwgcmVnYXJkbGVzcyBvZiB0aGUgdmFsdWUgb2YgdGhlIGRlZXAKLQkgKiBwYXJhbWV0ZXIuCi0JICogCi0JICogQHBhcmFtIGRlZXAgSWYgdHJ1ZSwgdGhlIGJvZHkgYW5kIGl0cyBkZXNjZW5kYW50cyBhcmUgcmV0dXJuZWQsIG90aGVyd2lzZSBvbmx5Ci0JICogdGhlIGJvZHkgKGFuZCB0aGUgUlBDIHdyYXBwZXIgZWxlbWVudCBpZiB0aGUgbWVzc2FnZSBpcyBSUEMgc3R5bGUpIGlzIHJldHVybmVkLgotCSAqIEByZXR1cm4gQW4gZWxlbWVudC4KLQkgKi8JCi0JcHVibGljIEVsZW1lbnQgZ2V0Qm9keShib29sZWFuIGRlZXApOwotCi0JLyoqCi0JICogU2V0cyBhbiBhcnJheSBvZiBlbGVtZW50cyB0aGF0IGdvZXMgaW50byB0aGUgbWVzc2FnZSdzIGJvZHkuICBGb3IgYW4gUlBDIHN0eWxlCi0JICogbWVzc2FnZSwgdGhlIGJvZHkgY29udGVudHMgYXJlIHRoZSBlbGVtZW50cyBpbnNpZGUgdGhlIFJQQyB3cmFwcGVyIGVsZW1lbnQuCi0JICogCi0JICogQHBhcmFtIGJvZHlDb250ZW50IEFuIGFycmF5IG9mIGVsZW1lbnRzLgotCSAqLwotCXB1YmxpYyB2b2lkIHNldEJvZHlDb250ZW50KEVsZW1lbnRbXSBib2R5Q29udGVudCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBhcnJheSBvZiBlbGVtZW50cyB0aGF0IGFyZSBpbnNpZGUgdGhlIG1lc3NhZ2UncyBib2R5LiAgRm9yIGFuIFJQQyBzdHlsZQotCSAqIG1lc3NhZ2UsIHRoZSBib2R5IGNvbnRlbnRzIGFyZSB0aGUgZWxlbWVudHMgaW5zaWRlIHRoZSBSUEMgd3JhcHBlciBlbGVtZW50LgotCSAqIAotCSAqIEByZXR1cm4gQW4gYXJyYXkgb2YgZWxlbWVudHMuCi0JICovCi0JcHVibGljIEVsZW1lbnRbXSBnZXRCb2R5Q29udGVudCgpOwotCi0JLyoqCi0JICogU2V0IHRoZSBmYXVsdCBlbGVtZW50IGZvciB0aGlzIG1lc3NhZ2UsIGlmIGFueS4KLQkgKiAKLQkgKiBAcGFyYW0gZmF1bHQgQSBmYXVsdCBlbGVtZW50LgotCSAqLwotCXB1YmxpYyB2b2lkIHNldEZhdWx0KEVsZW1lbnQgZmF1bHQpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZmF1bHQgZWxlbWVudCwgaWYgYW55LgotCSAqIAotCSAqIEByZXR1cm4gVGhlIGZhdWx0IGVsZW1lbnQgb3IgbnVsbCBpZiBubyBmYXVsdCBoYXMgb2NjdXJyZWQuCi0JICovCi0JcHVibGljIEVsZW1lbnQgZ2V0RmF1bHQoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIFhNTCBzZXJpYWxpemVkIGZvcm0gb2YgdGhpcyBJU09BUE1lc3NhZ2UuCi0JICogCi0JICogQHJldHVybiBBbiBYTUwgc3RyaW5nLgotCSAqIEBzZWUgSVNlcmlhbGl6ZXIKLQkgKiBAdGhyb3dzIFRyYW5zcG9ydEV4Y2VwdGlvbiAKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHRvWE1MKCkgdGhyb3dzIFRyYW5zcG9ydEV4Y2VwdGlvbjsKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci90cmFuc3BvcnQvSVNPQVBUcmFuc3BvcnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvdHJhbnNwb3J0L0lTT0FQVHJhbnNwb3J0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkMmEzZjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci90cmFuc3BvcnQvSVNPQVBUcmFuc3BvcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDQxMyAgIDE3NjQ5MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFOiBNYWtlIG1lc3NhZ2UvdHJhbnNwb3J0IHN0YWNrIHBsdWdnYWJsZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQ7Ci0KLS8qKgotICogVGhlIElTT0FQVHJhbnNwb3J0IGlzIHRoZSBjb3JlIHBpZWNlIG9mIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgdHJhbnNwb3J0IHN0YWNrLgotICogSXQgaXMgcmVzcG9uc2libGUgZm9yIGludm9raW5nIHRoZSB3ZWIgc2VydmljZSBhbmQgaXQgYWxzbyBhY3RzIGFzIHRoZSBmYWN0b3J5IGZvcgotICogY3JlYXRpbmcgSVNlcmlhbGllciwgSURlc2VyaWFsaXplciwgYW5kIElTT0FQTWVzc2FnZSBpbnN0YW5jZXMgd2hpY2ggbWFrZSB1cCB0aGUKLSAqIHJlc3Qgb2YgdGhlIFdTRSB0cmFuc3BvcnQuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSVNPQVBUcmFuc3BvcnQgewkJCi0KLQkvKioKLQkgKiBGYWN0b3J5IG1ldGhvZCBmb3IgSVNlcmlhbGl6ZXIuCi0JICogCi0JICogQHJldHVybiBBbiBpbnN0YW5jZSBvZiBJU2VyaWFsaXplci4KLQkgKi8KLQlwdWJsaWMgSVNlcmlhbGl6ZXIgbmV3U2VyaWFsaXplcigpOwotCQotCS8qKgotCSAqIEZhY3RvcnkgbWV0aG9kIGZvciBJRGVzZXJpYWxpemVyLgotCSAqIAotCSAqIEByZXR1cm4gQW4gaW5zdGFuY2Ugb2YgSURlc2VyaWFsaXplci4KLQkgKi8KLQlwdWJsaWMgSURlc2VyaWFsaXplciBuZXdEZXNlcmlhbGl6ZXIoKTsKLQkKLQkvKioKLQkgKiBGYWN0b3J5IG1ldGhvZCBmb3IgSVNPQVBNZXNzYWdlLgotCSAqIAotCSAqIEBwYXJhbSBjb250ZXh0IE1lc3NhZ2VDb250ZXh0IGVuY2Fwc3VsYXRpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHdlYiBzZXJ2aWNlIG9wZXJhdGlvbi4KLQkgKiBAcmV0dXJuIEFuIGluc3RhbmNlIG9mIElTT0FQTWVzc2FnZS4KLQkgKiBAdGhyb3dzIFRyYW5zcG9ydEV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyBJU09BUE1lc3NhZ2UgbmV3TWVzc2FnZShNZXNzYWdlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgVHJhbnNwb3J0RXhjZXB0aW9uOwotCQotCS8qKgotCSAqIEludm9rZXMgdGhlIHdlYiBzZXJ2aWNlIG9wZXJhdGlvbiBieSBzZW5kaW5nIHRoZSBTT0FQIG1lc3NhZ2UsIHRoZW4gcGFyc2luZyB0aGUgcmVzdWx0cwotCSAqIGludG8gYSByZXNwb25zZSBJU09BUE1lc3NhZ2UuCi0JICogCi0JICogQHBhcmFtIHVybCBUaGUgZW5kcG9pbnQgVVJMLgotCSAqIEBwYXJhbSB1c2VybmFtZSBVc2VybmFtZSB0byB1c2UgZm9yIGJhc2ljIGF1dGggcHJvdGVjdGVkIGVuZHBvaW50cy4gIFNldCB0byBudWxsIGlmIG5vdCByZXF1aXJlZC4gIAotCSAqIEBwYXJhbSBwYXNzd29yZCBQYXNzd29yZCB0byB1c2UgZm9yIGJhc2ljIGF1dGggcHJvdGVjdGVkIGVuZHBvaW50cy4gIFNldCB0byBudWxsIGlmIG5vdCByZXF1aXJlZC4KLQkgKiBAcGFyYW0gbWVzc2FnZSBUaGUgU09BUCByZXF1ZXN0IG1lc3NhZ2UuCi0JICogQHJldHVybiBBbiBJU09BUE1lc2FnZSByZXByZXNlbnRpbmcgdGhlIHJlc3BvbnNlIGZyb20gdGhlIHdlYiBzZXJ2aWNlIGludm9jYXRpb24uCi0JICogQHRocm93cyBUcmFuc3BvcnRFeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgSVNPQVBNZXNzYWdlIHNlbmQoU3RyaW5nIHVybCwgU3RyaW5nIHVzZXJuYW1lLCBTdHJpbmcgcGFzc3dvcmQsIElTT0FQTWVzc2FnZSBtZXNzYWdlKSB0aHJvd3MgVHJhbnNwb3J0RXhjZXB0aW9uOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci90cmFuc3BvcnQvSVNPQVBUcmFuc3BvcnRQcm92aWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci90cmFuc3BvcnQvSVNPQVBUcmFuc3BvcnRQcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZGUzZGMyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvdHJhbnNwb3J0L0lTT0FQVHJhbnNwb3J0UHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDQxMyAgIDE3NjQ5MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFOiBNYWtlIG1lc3NhZ2UvdHJhbnNwb3J0IHN0YWNrIHBsdWdnYWJsZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQ7Ci0KLS8qKgotICogSVNPQVBUcmFuc3BvcnRQcm92aWRlciBpcyBhIGZhY3RvcnkgZm9yIGNyZWF0aW5nIElTT0FQVHJhbnNwb3J0IG9iamVjdHMuCi0gKiBBbnlvbmUgd2hvIHdpc2hlcyB0byBleHRlbmQgdGhlIG9yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci53c2VUcmFuc3BvcnRQcm92aWRlcgotICogZXh0ZW5zaW9uLXBvaW50IG11c3QgcHJvdmlkZSBhbiBpbXBsZW1lbnRhdGlvbiBmb3IgdGhpcyBpbnRlcmZhY2UuIAotICovCi1wdWJsaWMgaW50ZXJmYWNlIElTT0FQVHJhbnNwb3J0UHJvdmlkZXIgewotCi0JLyoqCi0JICogTWV0aG9kIGZvciBvYnRhaW5pbmcgYSBuZXcgSVNPQVBUcmFuc3BvcnQgZnJvbSB0aGlzIHByb3ZpZGVyLgotCSAqIFRoaXMgbWV0aG9kIHNob3VsZCBuZXZlciByZXR1cm4gbnVsbC4KLQkgKiAKLQkgKiBAcmV0dXJuIEEgbmV3IElTT0FQVHJhbnNwb3J0IG9iamVjdC4KLQkgKi8KLQlwdWJsaWMgSVNPQVBUcmFuc3BvcnQgbmV3VHJhbnNwb3J0KCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3RyYW5zcG9ydC9JU2VyaWFsaXplci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci90cmFuc3BvcnQvSVNlcmlhbGl6ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWRiNjlmYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3RyYW5zcG9ydC9JU2VyaWFsaXplci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNDEzICAgMTc2NDkzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0U6IE1ha2UgbWVzc2FnZS90cmFuc3BvcnQgc3RhY2sgcGx1Z2dhYmxlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydDsKLQotLyoqCi0gKiBUaGUgSVNlcmlhbGl6ZXIgaXMgcmVzcG9uc2libGUgZm9yIHRha2luZyBhbiBJU09BUE1lc3NhZ2UgYW5kIHNlcmlhbGl6aW5nIGl0Ci0gKiBpbnRvIGFuIFhNTCBzdHJpbmcuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSVNlcmlhbGl6ZXIgewotCi0JLyoqCi0JICogU2VyaWFsaXplIHRoZSBJU09BUE1lc3NhZ2UgaW50byBhbiBYTUwgc3RyaW5nLiAgVGhlIHBhcnQgcGFyYW1ldGVyIHRlbGxzIHRoZSBtZXRob2QKLQkgKiB3aGljaCBwYXJ0IG9mIHRoZSBtZXNzYWdlICh0aGUgZW52ZWxvcGUgb3IgdGhlIGNvbnRlbnRzIG9mIHRoZSBoZWFkZXIgb3IgYm9keSkgdG8KLQkgKiBzZXJpYWxpemUuICBOb3RlIHRoYXQgImNvbnRlbnRzIiByZWZlcnMgdG8gdGhlIGxpc3Qgb2YgZWxlbWVudHMgaW5zaWRlIHRoZSBoZWFkZXIKLQkgKiBvciBib2R5LCBhbmQgbm90IHRoZSBoZWFkZXIgb3IgYm9keSBlbGVtZW50IGl0c2VsZi4KLQkgKiAKLQkgKiBAcGFyYW0gcGFydCBPbmUgb2Yge0BsaW5rIElTT0FQTWVzc2FnZSNFTlZFTE9QRX0sIHtAbGluayBJU09BUE1lc3NhZ2UjSEVBREVSX0NPTlRFTlR9LCBvcgotCSAqIHtAbGluayBJU09BUE1lc3NhZ2UjQk9EWV9DT05URU5UfS4KLQkgKiBAcGFyYW0gbWVzc2FnZSBUaGUgSVNPQVBNZXNzYWdlIHRvIHNlcmlhbGl6ZS4KLQkgKiBAcmV0dXJuIEFuIFhNTCBzdHJpbmcuIAotCSAqIEB0aHJvd3MgVHJhbnNwb3J0RXhjZXB0aW9uCi0JICovCi0JcHVibGljIFN0cmluZyBzZXJpYWxpemUoaW50IHBhcnQsIElTT0FQTWVzc2FnZSBtZXNzYWdlKSB0aHJvd3MgVHJhbnNwb3J0RXhjZXB0aW9uOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci90cmFuc3BvcnQvTWVzc2FnZUNvbnRleHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvdHJhbnNwb3J0L01lc3NhZ2VDb250ZXh0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlMzI3Y2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci90cmFuc3BvcnQvTWVzc2FnZUNvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA0MTMgICAxNzY0OTMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTRTogTWFrZSBtZXNzYWdlL3RyYW5zcG9ydCBzdGFjayBwbHVnZ2FibGUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0OwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0KLS8qKgotICogQSBNZXNzYWdlQ29udGV4dCBvYmplY3QgaG9sZHMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1lc3NhZ2UgdGhhdCBpcyB0byBiZQotICogc2VudCBvbiBhIHdlYiBzZXJ2aWNlIGludm9jYXRpb24uICBUaGlzIGluZm9ybWF0aW9uIGlzIHBhc3NlZCB0byB0aGUKLSAqIElTT0FQVHJhbnNwb3J0IHNvIHRoYXQgaXQgY2FuIGNvbnN0cnVjdCBhbiBhcHByb3ByaWF0ZSBJU09BUE1lc3NhZ2UgdG8KLSAqIGhhbmRsZSB0aGUgaW52b2NhdGlvbi4KLSAqLwotcHVibGljIGNsYXNzIE1lc3NhZ2VDb250ZXh0IHsKLQkKLQlwcml2YXRlIERlZmluaXRpb24gZGVmaW5pdGlvbjsKLQlwcml2YXRlIEV4dGVuc2liaWxpdHlFbGVtZW50IGJpbmRpbmdQcm90b2NvbDsKLQlwcml2YXRlIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbjsJCi0JcHJpdmF0ZSBib29sZWFuIGRvY3VtZW50U3R5bGU7CQkJCi0JCi0JLyoqCi0JICogU2V0cyBhIHJlZmVyZW5jZSB0byB0aGUgV1NETCBkZWZpbml0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBkZWZpbml0aW9uIFRoZSBXU0RMIGRlZmluaXRpb24uCi0JICovCi0JcHVibGljIHZvaWQgc2V0RGVmaW5pdGlvbihEZWZpbml0aW9uIGRlZmluaXRpb24pIHsKLQkJdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgV1NETCBkZWZpbml0aW9uLgotCSAqIAotCSAqIEByZXR1cm4gVGhlIFdTREwgZGVmaW5pdGlvbi4KLQkgKi8KLQlwdWJsaWMgRGVmaW5pdGlvbiBnZXREZWZpbml0aW9uKCkgewotCQlyZXR1cm4gZGVmaW5pdGlvbjsKLQl9Ci0JCi0JLyoqCi0JICogU2V0cyBhIHJlZmVyZW5jZSB0byB0aGUgYmluZGluZyBleHRlbnNpYmlsaXR5IGVsZW1lbnQgaW4gdGhlIFdTREwgZG9jdW1lbnQuCi0JICogRm9yIGEgd2ViIHNlcnZpY2UgdGhhdCB1c2VzIHRoZSBTT0FQIHByb3RvY29sLCB0aGlzIHdpbGwgYmUgYW4gaW5zdGFuY2Ugb2YKLQkgKiBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZwotCSAqIAotCSAqIEBwYXJhbSBiaW5kaW5nUHJvdG9jb2wgVGhlIGJpbmRpbmcgZXh0ZW5zaWJpbGl0eSBlbGVtZW50LgotCSAqLwotCXB1YmxpYyB2b2lkIHNldEJpbmRpbmdQcm90b2NvbChFeHRlbnNpYmlsaXR5RWxlbWVudCBiaW5kaW5nUHJvdG9jb2wpIHsKLQkJdGhpcy5iaW5kaW5nUHJvdG9jb2wgPSBiaW5kaW5nUHJvdG9jb2w7CQkKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgYmluZGluZyBleHRlbnNpYmlsaXR5IGVsZW1lbnQuCi0JICogCi0JICogQHJldHVybiBUaGUgYmluZGluZyBleHRlbnNpYmlsaXR5IGVsZW1lbnQuCi0JICovCi0JcHVibGljIEV4dGVuc2liaWxpdHlFbGVtZW50IGdldEJpbmRpbmdQcm90b2NvbCgpIHsKLQkJcmV0dXJuIGJpbmRpbmdQcm90b2NvbDsKLQl9Ci0JCi0JLyoqCi0JICogU2V0cyBhIHJlZmVyZW5jZSB0byB0aGUgYmluZGluZyBvcGVyYXRpb24gZWxlbWVudCBpbiB0aGUgV1NETCBkb2N1bWVudC4KLQkgKiAKLQkgKiBAcGFyYW0gYmluZGluZ09wZXJhdGlvbiBUaGUgYmluZGluZyBvcGVyYXRpb24gZWxlbWVudC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRCaW5kaW5nT3BlcmF0aW9uKEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbikgewotCQl0aGlzLmJpbmRpbmdPcGVyYXRpb24gPSBiaW5kaW5nT3BlcmF0aW9uOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBiaW5kaW5nIG9wZXJhdGlvbiBlbGVtZW50LgotCSAqIAotCSAqIEByZXR1cm4gVGhlIGJpbmRpbmcgb3BlcmF0aW9uIGVsZW1lbnQuCi0JICovCi0JcHVibGljIEJpbmRpbmdPcGVyYXRpb24gZ2V0QmluZGluZ09wZXJhdGlvbigpIHsKLQkJcmV0dXJuIGJpbmRpbmdPcGVyYXRpb247Ci0JfQkJCi0JCQotCS8qKgotCSAqIFNldHMgdGhlIGZsYWcgb24gd2hldGhlciB0aGUgbWVzc2FnZSBjcmVhdGVkIGZyb20gdGhpcyBNZXNzYWdlQ29udGV4dAotCSAqIGlzIGRvY3VtZW50IHN0eWxlIG9yIG5vdC4KLQkgKiAKLQkgKiBAcGFyYW0gZG9jdW1lbnRTdHlsZSBUcnVlIGZvciBkb2N1bWVudCBzdHlsZSwgZmFsc2Ugb3RoZXJ3aXNlLgotCSAqLwotCXB1YmxpYyB2b2lkIHNldERvY3VtZW50U3R5bGUoYm9vbGVhbiBkb2N1bWVudFN0eWxlKSB7Ci0JCXRoaXMuZG9jdW1lbnRTdHlsZSA9IGRvY3VtZW50U3R5bGU7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIGRvY3VtZW50IHN0eWxlIHByb3BlcnR5LgotCSAqIAotCSAqIEByZXR1cm4gVGhlIGRvY3VtZW50IHN0eWxlIHByb3BlcnR5LgotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzRG9jdW1lbnRTdHlsZSgpIHsKLQkJcmV0dXJuIGRvY3VtZW50U3R5bGU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci90cmFuc3BvcnQvU09BUE1lc3NhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXhwbG9yZXIvdHJhbnNwb3J0L1NPQVBNZXNzYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5YTQxZjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci90cmFuc3BvcnQvU09BUE1lc3NhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA0MTMgICAxNzY0OTMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTRTogTWFrZSBtZXNzYWdlL3RyYW5zcG9ydCBzdGFjayBwbHVnZ2FibGUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0OwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotLyoqCi0gKiBUaGlzIGlzIGEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgSVNPQVBNZXNzYWdlIGludGVyZmFjZSB0aGF0IGV4dGVuZGVycyBvZiB0aGUgV2ViCi0gKiBTZXJ2aWNlcyBFeHBsb3JlciB0cmFuc3BvcnQgY2FuIHVzZSBpZiB0aGV5IGRvIG5vdCB3aXNoIHRvIGltcGxlbWVudCB0aGVpciBvd24gbWVzc2FnZS4gIAotICogVGhpcyBjbGFzcyBpcyAgaW1wbGVtZW50ZWQgYXMgYSBjb2xsZWN0aW9uIG9mIGxvb3NlIHBpZWNlcyBvZiB0aGUgU09BUCBtZXNzYWdlLCBhbmQgZWFjaCAKLSAqIHBpZWNlIG11c3QgYmUgc2V0IGluZGl2aWR1YWxseSAoZm9yIGV4YW1wbGUsIHNldHRpbmcgdGhlIGVudmVsb3BlIGVsZW1lbnQgd2lsbCBub3QgCi0gKiBhdXRvbWF0aWNhbGx5IHBvcHVsYXRlIHRoZSBoZWFkZXIgb3IgYm9keSBlbGVtZW50cykuCi0gKiA8YnIvPgotICogPGJyLz4KLSAqIFRoaXMgY2xhc3MgZG9lcyBub3Qga25vdyBob3cgdG8gc2VyaWFsaXplIGl0c2VsZi4gIEl0IGRlcGVuZHMgb24gYW4gSVNlcmlhbGl6ZXIgcHJvdmlkZWQgYnkKLSAqIHRoZSB0cmFuc3BvcnQgZXh0ZW5kZXIuIAotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgU09BUE1lc3NhZ2UgaW1wbGVtZW50cyBJU09BUE1lc3NhZ2UgewotCQotCXByaXZhdGUgTWVzc2FnZUNvbnRleHQgY29udGV4dDsKLQlwcml2YXRlIElTZXJpYWxpemVyIHNlcmlhbGl6ZXI7Ci0JCQotCXByaXZhdGUgTWFwIHByb3BlcnRpZXMgPSBuZXcgSGFzaHRhYmxlKCk7CQotCQotCXByaXZhdGUgRWxlbWVudCBlbnZlbG9wZSA9IG51bGw7Ci0JCi0JcHJpdmF0ZSBFbGVtZW50IGhlYWRlciA9IG51bGw7Ci0JcHJpdmF0ZSBFbGVtZW50W10gaGVhZGVyQ29udGVudCA9IG51bGw7Ci0JCi0JcHJpdmF0ZSBFbGVtZW50IGJvZHkgPSBudWxsOwotCXByaXZhdGUgRWxlbWVudFtdIGJvZHlDb250ZW50ID0gbnVsbDsJCi0JCQotCXByaXZhdGUgRWxlbWVudCBmYXVsdCA9IG51bGw7Ci0JCQotCXByaXZhdGUgU3RyaW5nIHhtbCA9IG51bGw7Ci0JCi0JLyoqCi0JICogQ29uc3RydWN0b3IuCi0JICogCi0JICogQHBhcmFtIGNvbnRleHQgVGhlIE1lc3NhZ2VDb250ZXh0LgotCSAqIEBwYXJhbSBzZXJpYWxpemVyIEFuIElTZXJpYWxpemVyIHRvIHVzZSB0byBzZXJpYWxpemUgdGhpcyBtZXNzYWdlLgotCSAqLwotCXB1YmxpYyBTT0FQTWVzc2FnZShNZXNzYWdlQ29udGV4dCBjb250ZXh0LCBJU2VyaWFsaXplciBzZXJpYWxpemVyKSB7Ci0JCXRoaXMuY29udGV4dCA9IGNvbnRleHQ7Ci0JCXRoaXMuc2VyaWFsaXplciA9IHNlcmlhbGl6ZXI7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBNZXNzYWdlI2dldE1lc3NhZ2VDb250ZXh0KCkKLQkgKi8KLQlwdWJsaWMgTWVzc2FnZUNvbnRleHQgZ2V0TWVzc2FnZUNvbnRleHQoKSB7Ci0JCXJldHVybiBjb250ZXh0OwotCX0KLQkJCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUE1lc3NhZ2Ujc2V0UHJvcGVydHkoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLk9iamVjdCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRQcm9wZXJ0eShTdHJpbmcga2V5LCBPYmplY3QgdmFsdWUpIHsKLQkJcHJvcGVydGllcy5wdXQoa2V5LCB2YWx1ZSk7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBNZXNzYWdlI2dldFByb3BlcnR5KGphdmEubGFuZy5TdHJpbmcpCi0JICovCi0JcHVibGljIE9iamVjdCBnZXRQcm9wZXJ0eShTdHJpbmcga2V5KSB7Ci0JCXJldHVybiBwcm9wZXJ0aWVzLmdldChrZXkpOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQTWVzc2FnZSNzZXROYW1lc3BhY2VUYWJsZShqYXZhLnV0aWwuTWFwKQotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBzZXROYW1lc3BhY2VUYWJsZShNYXAgbmFtZXNwYWNlVGFibGUpIHsKLQkJaWYgKG5hbWVzcGFjZVRhYmxlID09IG51bGwgfHwgZW52ZWxvcGUgPT0gbnVsbCkKLQkJCXJldHVybjsKLQkKLQkJSXRlcmF0b3IgaXRlciA9IG5hbWVzcGFjZVRhYmxlLmVudHJ5U2V0KCkuaXRlcmF0b3IoKTsKLQkJCi0JCXdoaWxlIChpdGVyLmhhc05leHQoKSkgewotCQkJTWFwLkVudHJ5IGVudHJ5ID0gKE1hcC5FbnRyeSkgaXRlci5uZXh0KCk7Ci0JCQlTdHJpbmcgbmFtZSA9ICJ4bWxuczoiICsgZW50cnkuZ2V0VmFsdWUoKTsJCQkKLQkJCWVudmVsb3BlLnNldEF0dHJpYnV0ZShuYW1lLCBlbnRyeS5nZXRLZXkoKS50b1N0cmluZygpKTsJCQkKLQkJfQotCQkKLQkJeG1sID0gbnVsbDsKLQl9Ci0JCi0JLyoKLQkgKiBJZiB0aGUgYXR0cmlidXRlIGlzIGEgbmFtZXNwYWNlIGRlY2xhcmF0aW9uLCB0aGUgbmFtZXNwYWNlIHByZWZpeCBpcyByZXR1cm5lZC4KLQkgKiBPdGhlcndpc2UgbnVsbCBpcyByZXR1cm5lZC4KLQkgKi8KLQlwcml2YXRlIFN0cmluZyBnZXROU1ByZWZpeChBdHRyIGF0dHJpYnV0ZSkgewotCQlTdHJpbmcgbmFtZSA9IGF0dHJpYnV0ZS5nZXROYW1lKCk7Ci0JCWlmIChuYW1lLnN0YXJ0c1dpdGgoInhtbG5zOiIpKQotCQkJcmV0dXJuIG5hbWUuc3Vic3RyaW5nKDYpOwotCQlyZXR1cm4gbnVsbDsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUE1lc3NhZ2UjZ2V0TmFtZXNwYWNlVGFibGUoKQotCSAqLwotCXB1YmxpYyBNYXAgZ2V0TmFtZXNwYWNlVGFibGUoKSB7Ci0JCQotCQlIYXNodGFibGUgbmFtZXNwYWNlVGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0JCQotCQlpZiAoZW52ZWxvcGUgIT0gbnVsbCkgewotCQkJTmFtZWROb2RlTWFwIGF0dHJpYnV0ZXMgPSBlbnZlbG9wZS5nZXRBdHRyaWJ1dGVzKCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGF0dHJpYnV0ZXMuZ2V0TGVuZ3RoKCk7IGkrKykgewotCQkJCUF0dHIgYXR0cmlidXRlID0gKEF0dHIpIGF0dHJpYnV0ZXMuaXRlbShpKTsKLQkJCQlTdHJpbmcgcHJlZml4ID0gZ2V0TlNQcmVmaXgoYXR0cmlidXRlKTsKLQkJCQlpZiAocHJlZml4ICE9IG51bGwpCi0JCQkJCW5hbWVzcGFjZVRhYmxlLnB1dChhdHRyaWJ1dGUuZ2V0VmFsdWUoKSwgcHJlZml4KTsKLQkJCX0JCQkKLQkJfQkJCi0JCQotCQlyZXR1cm4gbmFtZXNwYWNlVGFibGU7Ci0JfQotCQotCS8qCi0JICogQXBwZW5kcyBhIGNoaWxkIG5vZGUgdG8gYSBwYXJlbnQgbm9kZSwgdGFrZXMgY2FyZSBvZiBpbXBvcnRpbmcKLQkgKiB0aGUgY2hpbGQgbm9kZSBpZiBuZWNjZXNzYXJ5LgotCSAqLwotCXByaXZhdGUgdm9pZCBhcHBlbmROb2RlKE5vZGUgcGFyZW50LCBOb2RlIGNoaWxkKSB7Ci0JCWlmIChwYXJlbnQgPT0gbnVsbCB8fCBjaGlsZCA9PSBudWxsKQotCQkJcmV0dXJuOwotCQkKLQkJRG9jdW1lbnQgb3duZXIgPSBwYXJlbnQuZ2V0T3duZXJEb2N1bWVudCgpOwotCQkKLQkJaWYgKCFvd25lci5lcXVhbHMoY2hpbGQuZ2V0T3duZXJEb2N1bWVudCgpKSkKLQkJCWNoaWxkID0gb3duZXIuaW1wb3J0Tm9kZShjaGlsZCwgdHJ1ZSk7Ci0JCQotCQlwYXJlbnQuYXBwZW5kQ2hpbGQoY2hpbGQpOwotCX0KLQkKLQkvKgotCSAqIEFkZHMgYW4gYXJyYXkgb2YgZWxlbWVudHMgdG8gdGhlIHBhcmVudCBlbGVtZW50IGFzIGNoaWxkIGVsZW1lbnRzLgotCSAqLwotCXByaXZhdGUgdm9pZCBhcHBlbmRDaGlsZHJlbihFbGVtZW50IHBhcmVudCwgRWxlbWVudFtdIGNoaWxkcmVuKSB7Ci0JCWlmIChwYXJlbnQgPT0gbnVsbCB8fCBjaGlsZHJlbiA9PSBudWxsKQotCQkJcmV0dXJuOwotCQkKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykgewotCQkJaWYgKGNoaWxkcmVuW2ldID09IG51bGwpCi0JCQkJY29udGludWU7Ci0JCQlhcHBlbmROb2RlKHBhcmVudCwgY2hpbGRyZW5baV0pOwotCQl9Ci0JfQkJCi0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUE1lc3NhZ2Ujc2V0RW52ZWxvcGUob3JnLnczYy5kb20uRWxlbWVudCkKLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgc2V0RW52ZWxvcGUoRWxlbWVudCBlbnZlbG9wZSkgewotCQlpZiAoZW52ZWxvcGUgPT0gbnVsbCkKLQkJCXRoaXMuZW52ZWxvcGUgPSBlbnZlbG9wZTsKLQkJZWxzZQotCQkJdGhpcy5lbnZlbG9wZSA9IChFbGVtZW50KSBlbnZlbG9wZS5jbG9uZU5vZGUoZmFsc2UpOwotCQkJCQkKLQkJeG1sID0gbnVsbDsKLQl9Ci0JCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBNZXNzYWdlI2dldEVudmVsb3BlKGJvb2xlYW4pCi0JICovCi0JcHVibGljIEVsZW1lbnQgZ2V0RW52ZWxvcGUoYm9vbGVhbiBkZWVwKSB7Ci0JCWlmICghZGVlcCkKLQkJCXJldHVybiBlbnZlbG9wZTsKLQkJCi0JCXN5bmNocm9uaXplZCAodGhpcykgewotCQkJaWYgKGVudmVsb3BlID09IG51bGwpCi0JCQkJcmV0dXJuIG51bGw7Ci0JCQkKLQkJCUVsZW1lbnQgY2xvbmVkRW52ZWxvcGUgPSAoRWxlbWVudCkgZW52ZWxvcGUuY2xvbmVOb2RlKGZhbHNlKTsKLQkJCQotCQkJaWYgKGhlYWRlckNvbnRlbnQgIT0gbnVsbCAmJiBoZWFkZXJDb250ZW50Lmxlbmd0aCA+IDApCi0JCQkJYXBwZW5kTm9kZShjbG9uZWRFbnZlbG9wZSwgZ2V0SGVhZGVyKHRydWUpKTsKLQkJCQkKLQkJCWFwcGVuZE5vZGUoY2xvbmVkRW52ZWxvcGUsIGdldEJvZHkodHJ1ZSkpOwotCQkJCi0JCQlyZXR1cm4gY2xvbmVkRW52ZWxvcGU7CQotCQl9Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBNZXNzYWdlI3NldEhlYWRlcihvcmcudzNjLmRvbS5FbGVtZW50KQotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBzZXRIZWFkZXIoRWxlbWVudCBoZWFkZXIpIHsKLQkJaWYgKGhlYWRlciA9PSBudWxsKQotCQkJdGhpcy5oZWFkZXIgPSBudWxsOwkJCQotCQllbHNlCi0JCQl0aGlzLmhlYWRlciA9IChFbGVtZW50KSBoZWFkZXIuY2xvbmVOb2RlKGZhbHNlKTsKLQotCQl4bWwgPSBudWxsOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LklTT0FQTWVzc2FnZSNnZXRIZWFkZXIoYm9vbGVhbikKLQkgKi8KLQlwdWJsaWMgRWxlbWVudCBnZXRIZWFkZXIoYm9vbGVhbiBkZWVwKSB7Ci0JCWlmICghZGVlcCkKLQkJCXJldHVybiBoZWFkZXI7Ci0JCQotCQlzeW5jaHJvbml6ZWQgKHRoaXMpIHsKLQkJCWlmIChoZWFkZXIgPT0gbnVsbCkKLQkJCQlyZXR1cm4gbnVsbDsKLQkJCQotCQkJRWxlbWVudCBjbG9uZWRIZWFkZXIgPSAoRWxlbWVudCkgaGVhZGVyLmNsb25lTm9kZShmYWxzZSk7Ci0JCQlhcHBlbmRDaGlsZHJlbihjbG9uZWRIZWFkZXIsIGhlYWRlckNvbnRlbnQpOwkJCQkKLQkJCXJldHVybiBjbG9uZWRIZWFkZXI7Ci0JCX0JCQkJCi0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBNZXNzYWdlI3NldEhlYWRlckNvbnRlbnQob3JnLnczYy5kb20uRWxlbWVudFtdKQotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBzZXRIZWFkZXJDb250ZW50KEVsZW1lbnRbXSBoZWFkZXJDb250ZW50KSB7Ci0JCXRoaXMuaGVhZGVyQ29udGVudCA9IGhlYWRlckNvbnRlbnQ7Ci0JCXhtbCA9IG51bGw7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBNZXNzYWdlI2dldEhlYWRlckNvbnRlbnQoKQotCSAqLwotCXB1YmxpYyBFbGVtZW50W10gZ2V0SGVhZGVyQ29udGVudCgpIHsKLQkJcmV0dXJuIGhlYWRlckNvbnRlbnQ7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBNZXNzYWdlI3NldEJvZHkob3JnLnczYy5kb20uRWxlbWVudCkKLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgc2V0Qm9keShFbGVtZW50IGJvZHkpIHsJCQotCQlpZiAoYm9keSA9PSBudWxsKQotCQkJdGhpcy5ib2R5ID0gbnVsbDsKLQkJZWxzZSB7Ci0JCQl0aGlzLmJvZHkgPSAoRWxlbWVudCkgYm9keS5jbG9uZU5vZGUoZmFsc2UpOwotCQkJCi0JCQlpZiAoIWNvbnRleHQuaXNEb2N1bWVudFN0eWxlKCkgJiYgZmF1bHQgPT0gbnVsbCkgewotCQkJCU5vZGVMaXN0IGNoaWxkRWxlbWVudHMgPSBib2R5LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7Ci0JCQkJaWYgKGNoaWxkRWxlbWVudHMuZ2V0TGVuZ3RoKCkgPiAwKQotCQkJCQl0aGlzLmJvZHkuYXBwZW5kQ2hpbGQoY2hpbGRFbGVtZW50cy5pdGVtKDApLmNsb25lTm9kZShmYWxzZSkpOwotCQkJfQotCQl9CQkKLQkJeG1sID0gbnVsbDsKLQl9Ci0JCQkJCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBNZXNzYWdlI2dldEJvZHkoYm9vbGVhbikKLQkgKi8KLQlwdWJsaWMgRWxlbWVudCBnZXRCb2R5KGJvb2xlYW4gZGVlcCkgewotCQlpZiAoIWRlZXApCi0JCQlyZXR1cm4gYm9keTsKLQkJCi0JCXN5bmNocm9uaXplZCAodGhpcykgewotCQkJaWYgKGJvZHkgPT0gbnVsbCkKLQkJCQlyZXR1cm4gbnVsbDsKLQkJCi0JCQkvLyBjb3B5IHRoZSBycGMgd3JhcHBlciBlbGVtZW50IGFzIHdlbGwsIGlmIGFueQotCQkJRWxlbWVudCBjbG9uZWRCb2R5ID0gKEVsZW1lbnQpIGJvZHkuY2xvbmVOb2RlKHRydWUpOwkJCi0JCQkKLQkJCWlmIChmYXVsdCAhPSBudWxsKQotCQkJCWFwcGVuZE5vZGUoY2xvbmVkQm9keSwgZmF1bHQpOwotCQkJZWxzZSB7Ci0JCQkJRWxlbWVudCB0YXJnZXQgPSBjbG9uZWRCb2R5OwotCQkJCQotCQkJCS8vIGNoZWNrIGZvciBycGMgd3JhcHBlcgotCQkJCWlmIChjbG9uZWRCb2R5LmdldEZpcnN0Q2hpbGQoKSAhPSBudWxsKQotCQkJCQl0YXJnZXQgPSAoRWxlbWVudCkgY2xvbmVkQm9keS5nZXRGaXJzdENoaWxkKCk7Ci0JCQkJCi0JCQkJYXBwZW5kQ2hpbGRyZW4odGFyZ2V0LCBib2R5Q29udGVudCk7Ci0JCQl9Ci0JCQkJCi0JCQlyZXR1cm4gY2xvbmVkQm9keTsJCQotCQl9Ci0JfQotCQkJCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBNZXNzYWdlI3NldEJvZHlDb250ZW50KG9yZy53M2MuZG9tLkVsZW1lbnRbXSkKLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgc2V0Qm9keUNvbnRlbnQoRWxlbWVudFtdIGJvZHlDb250ZW50KSB7Ci0JCXRoaXMuYm9keUNvbnRlbnQgPSBib2R5Q29udGVudDsKLQkJaWYgKGJvZHlDb250ZW50ICE9IG51bGwpCi0JCQlmYXVsdCA9IG51bGw7Ci0JCXhtbCA9IG51bGw7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBNZXNzYWdlI2dldEJvZHlDb250ZW50KCkKLQkgKi8KLQlwdWJsaWMgRWxlbWVudFtdIGdldEJvZHlDb250ZW50KCkgewotCQlyZXR1cm4gYm9keUNvbnRlbnQ7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBNZXNzYWdlI3NldEZhdWx0KG9yZy53M2MuZG9tLkVsZW1lbnQpCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHNldEZhdWx0KEVsZW1lbnQgZmF1bHQpIHsKLQkJdGhpcy5mYXVsdCA9IGZhdWx0OwotCQlpZiAoZmF1bHQgIT0gbnVsbCkgewotCQkJaWYgKGJvZHkgIT0gbnVsbCAmJiBib2R5LmdldEZpcnN0Q2hpbGQoKSAhPSBudWxsKQotCQkJCWJvZHkucmVtb3ZlQ2hpbGQoYm9keS5nZXRGaXJzdENoaWxkKCkpOwotCQkJYm9keUNvbnRlbnQgPSBudWxsOwotCQl9Ci0JCXhtbCA9IG51bGw7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuSVNPQVBNZXNzYWdlI2dldEZhdWx0KCkKLQkgKi8KLQlwdWJsaWMgRWxlbWVudCBnZXRGYXVsdCgpIHsKLQkJcmV0dXJuIGZhdWx0OwotCX0KLQkJCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC5JU09BUE1lc3NhZ2UjdG9YTUwoKQotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgU3RyaW5nIHRvWE1MKCkgdGhyb3dzIFRyYW5zcG9ydEV4Y2VwdGlvbiB7Ci0JCWlmICh4bWwgPT0gbnVsbCkKLQkJCXhtbCA9IHNlcmlhbGl6ZXIuc2VyaWFsaXplKEVOVkVMT1BFLCB0aGlzKTsKLQkJcmV0dXJuIHhtbDsJCQotCX0JCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHBsb3Jlci90cmFuc3BvcnQvVHJhbnNwb3J0RXhjZXB0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3RyYW5zcG9ydC9UcmFuc3BvcnRFeGNlcHRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmNhYzJmZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4cGxvcmVyL3RyYW5zcG9ydC9UcmFuc3BvcnRFeGNlcHRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDQxMyAgIDE3NjQ5MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFOiBNYWtlIG1lc3NhZ2UvdHJhbnNwb3J0IHN0YWNrIHBsdWdnYWJsZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQ7Ci0KLS8qKgotICogQW4gZ2VuZXJhbCBwdXJwb3NlIGV4Y2VwdGlvbiB0byBpbmRpY2F0ZSBhIHByb2JsZW0gaGFzIG9jY3VycmVkIHdoZW4KLSAqIGludm9raW5nIGEgd2ViIHNlcnZpY2UuCi0gKi8KLXB1YmxpYyBjbGFzcyBUcmFuc3BvcnRFeGNlcHRpb24gZXh0ZW5kcyBSdW50aW1lRXhjZXB0aW9uIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IC0xNTAyMjQ3MjMwNzI2MDIxNDAzTDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yLgotCSAqIAotCSAqIEBwYXJhbSBtZXNzYWdlIEEgbWVzc2FnZSBhYm91dCB0aGUgcHJvYmxlbSB0aGF0IG9jY3VycmVkLgotCSAqLwotCXB1YmxpYyBUcmFuc3BvcnRFeGNlcHRpb24oU3RyaW5nIG1lc3NhZ2UpIHsKLQkJc3VwZXIobWVzc2FnZSk7Ci0JfQotCQotCS8qKgotCSAqIENvbnN0cnVjdG9yIHRoYXQgYWNjZXB0cyBhIG1lc3NhZ2UgYW5kIGEgY2F1c2UuCi0JICogCi0JICogQHBhcmFtIG1lc3NhZ2UgQSBtZXNzYWdlIGFib3V0IHRoZSBwcm9ibGVtIHRoYXQgb2NjdXJyZWQuCi0JICogQHBhcmFtIGNhdXNlIFRoZSBjYXVzZSBmb3IgdGhpcyBleGNlcHRpb24uCi0JICovCi0JcHVibGljIFRyYW5zcG9ydEV4Y2VwdGlvbihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGNhdXNlKSB7Ci0JCXN1cGVyKG1lc3NhZ2UsIGNhdXNlKTsKLQl9Ci0JCi0JLyoqCi0JICogQ29uc3RydWN0b3IgdGhhdCBhY2NlcHRzIGEgY2F1c2UuCi0JICogCi0JICogQHBhcmFtIGNhdXNlIFRoZSBjYXVzZSBmb3IgdGhpcyBleGNlcHRpb24uCi0JICovCi0JcHVibGljIFRyYW5zcG9ydEV4Y2VwdGlvbihUaHJvd2FibGUgY2F1c2UpIHsKLQkJc3VwZXIoY2F1c2UpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXItcHJvcGVydGllcy9leHBsb3Jlci5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci1wcm9wZXJ0aWVzL2V4cGxvcmVyLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczNGM0OWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci1wcm9wZXJ0aWVzL2V4cGxvcmVyLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxODMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1USVRMRV9XU0VYUExPUkVSPVdlYiBTZXJ2aWNlcyBFeHBsb3JlcgotCi0jIFRyZWUgTm9kZXMKLUFMVF9PUEVOPU9wZW4KLUFMVF9DTE9TRT1DbG9zZQotCi0jIFBlcnNwZWN0aXZlIFRvb2xiYXIKLUFMVF9CQUNLPUJhY2sKLUFMVF9GT1JXQVJEPUZvcndhcmQKLUFMVF9BQ1RJT05fRU5HSU5FPUFjdGlvbiBSZWNvcmRlcgotQUxUX1VERElfUEVSU1BFQ1RJVkU9VURESSBQYWdlCi1BTFRfV1NJTF9QRVJTUEVDVElWRT1XU0lMIFBhZ2UKLUFMVF9XU0RMX1BFUlNQRUNUSVZFPVdTREwgUGFnZQotQUxUX0ZBVk9SSVRFU19QRVJTUEVDVElWRT1GYXZvcml0ZXMKLQotIyBUb29sYmFycwotQUxUX0RPVUJMRV9DTElDS19UT19NQVhJTUlaRT1Eb3VibGUgQ2xpY2sgdG8gTWF4aW1pemUKLUFMVF9ET1VCTEVfQ0xJQ0tfVE9fUkVTVE9SRT1Eb3VibGUgQ2xpY2sgdG8gUmVzdG9yZQotCi0jIFNldERlZmF1bHRWaWV3VG9vbAotQUxUX0JBQ0tfVE9fVE9QPUJhY2sgdG8gdG9wCi0KLSMgQ29tbW9uIEFjdGlvbnMKLUFMVF9SRUZSRVNIPVJlZnJlc2gKLUFMVF9DTEVBUj1DbGVhcgotQUxUX1JFU1VMVFM9UmVzdWx0cwotCi0jIENvbW1vbiBMYWJlbHMKLUFMVF9OQVZJR0FUT1I9TmF2aWdhdG9yCi1BTFRfQUNUSU9OUz1BY3Rpb25zCi1BTFRfU1RBVFVTPVN0YXR1cwotQUxUX09USEVSX0FDVElPTlM9T3RoZXIgQWN0aW9ucwotRk9STV9CVVRUT05fR089Jm5ic3A7Jm5ic3A7R28mbmJzcDsmbmJzcDsKLUZPUk1fQlVUVE9OX1JFU0VUPVJlc2V0Ci1GT1JNX0JVVFRPTl9DQU5DRUw9Q2FuY2VsCi1GT1JNX0xBQkVMX0FDVElPTlM9QWN0aW9ucwotRk9STV9MQUJFTF9BQ1RJT05TX05PTkU9Tm9uZQotCi0jIFBsYWNlaG9sZGVyIGZvciBibGFuayB0YWJsZSBlbnRyaWVzCi1UQUJMRV9CTEFOS19QTEFDRUhPTERFUj0tLQotCi0jIENvbW1vbiBGb3JtIENvbnRyb2wgVGl0bGVzCi1GT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX0FMTF9DSEVDS19CT1g9U2VsZWN0IGFsbAotRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9ST1dfQ0hFQ0tfQk9YPVNlbGVjdCByb3cKLQotIyBDb21tb24gTWVzc2FnZXMKLU1TR19FUlJPUl9VTkVYUEVDVEVEPUlXQUIwMTM1RSBBbiB1bmV4cGVjdGVkIGVycm9yIGhhcyBvY2N1cnJlZC4KLU1TR19FUlJPUl9OT19BQ1RJT05fU0VMRUNURUQ9SVdBQjAxMjRFIFNlbGVjdCBhbiBhY3Rpb24uCi1NU0dfRVJST1JfTk9fTk9ERV9TRUxFQ1RFRD1JV0FCMDEyNUUgU2VsZWN0IGEgbm9kZS4KLU1TR19TVUJNSVRfSU5fUFJPR1JFU1M9UGxlYXNlIHdhaXQuIFRoZSBvcGVyYXRpb24gaXMgc3RpbGwgaW4gcHJvZ3Jlc3MuCi1NU0dfTE9BRF9JTl9QUk9HUkVTUz1QbGVhc2Ugd2FpdCB3aGlsZSB0aGUgZm9ybSBsb2Fkcy4uLgotCi0jTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbgotQUxUX0xBVU5DSF9XRUJfU0VSVklDRV9XSVpBUkQ9TGF1bmNoIFdlYiBTZXJ2aWNlIFdpemFyZAotRk9STV9MQUJFTF9DSE9PU0VfV0laQVJEPVNlbGVjdCBhIHdpemFyZCB0byBsYXVuY2g6Ci1GT1JNX1JBRElPX1dFQl9TRVJWSUNFX0NMSUVOVF9XSVpBUkQ9V2ViIFNlcnZpY2UgQ2xpZW50Ci1GT1JNX1JBRElPX1dFQl9TRVJWSUNFX1NLRUxFVE9OX1dJWkFSRD1XZWIgU2VydmljZSBTa2VsZXRvbgotTVNHX0VSUk9SX1dJWkFSRF9BTFJFQURZX1JVTk5JTkc9SVdBQjAxMjZFIEEgV2ViIHNlcnZpY2Ugd2l6YXJkIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MuICBGaW5pc2ggd2l0aCB0aGUgZXhpc3Rpbmcgd2l6YXJkIGJlZm9yZSBsYXVuY2hpbmcgYSBuZXcgb25lLgotTVNHX0VSUk9SX1dTRExfVVJMX0lTX1VOUkVBQ0hBQkxFPUlXQUIwMTI3RSBUaGUgV1NETCBkb2N1bWVudCBpcyB1bnJlYWNoYWJsZS4KLQotIyBJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24KLUFMVF9XU0lMX0lNUE9SVF9UT19GUz1JbXBvcnQgV1NJTCBUbyBGaWxlIFN5c3RlbQotQUxUX1dTRExfSU1QT1JUX1RPX0ZTPUltcG9ydCBXU0RMIFRvIEZpbGUgU3lzdGVtCi1NU0dfRVJST1JfUkVUUklFVklOR19XU0RMX0RPQz1JV0FCMDEyOEUgVW5hYmxlIHRvIHJldHJpZXZlIFdTREwgZG9jdW1lbnQuCi1NU0dfRVJST1JfUkVUUklFVklOR19XU0lMX0RPQz1JV0FCMDEyOUUgVW5hYmxlIHRvIHJldHJpZXZlIFdTSUwgZG9jdW1lbnQuCi1NU0dfSU1QT1JUX1dTRExfU1VDQ0VTU0ZVTD1XU0RMIGRvY3VtZW50IHN1Y2Nlc3NmdWxseSBpbXBvcnRlZC4KLU1TR19JTVBPUlRfV1NJTF9TVUNDRVNTRlVMPVdTSUwgZG9jdW1lbnQgc3VjY2Vzc2Z1bGx5IGltcG9ydGVkLgotCi0jIEltcG9ydFRvV29ya2JlbmNoQWN0aW9uCi1BTFRfSU1QT1JUX1dTRExfVE9fV09SS0JFTkNIPUltcG9ydCBXU0RMIFRvIHdvcmtiZW5jaAotRk9STV9MQUJFTF9JTVBPUlRfVE9fV09SS0JFTkNIX0RFU0M9U2VsZWN0IGEgd29ya2JlbmNoIHByb2plY3QgdG8gc2F2ZSB0aGUgV1NETCBmaWxlIGludG8uIFlvdSBtYXkgYWxzbyBjaGFuZ2UgdGhlIG5hbWUgb2YgdGhlIFdTREwgZmlsZS4KLVdFQl9QUk9KRUNUX05BTUU9V2ViIHByb2plY3Q6Ci1XT1JLQkVOQ0hfUFJPSkVDVF9OQU1FPVdvcmtiZW5jaCBwcm9qZWN0OgotTEFCRUxfSU1QT1JUX1dTREw9SW1wb3J0IFdTREwgZG9jdW1lbnQKLUxBQkVMX0lNUE9SVF9UT19XU0lMPUltcG9ydCBhcyBhIHNlcnZpY2UgcmVmZXJlbmNlIHRvIGEgV1NJTCBkb2N1bWVudAotSU1QT1JURURfV1NETF9GSUxFX05BTUU9V1NETCBmaWxlIG5hbWU6Ci1XU0lMX0ZJTEVfTkFNRT1XU0lMIGZpbGUgbmFtZToKLU1TR19FUlJPUl9GSUxFX09WRVJXUklURV9ESVNBQkxFRD1DYW5ub3QgY3JlYXRlIHRoZSBmaWxlICIlMiIgcmVsYXRpdmUgdG8gdGhlIHBhdGggIiUxIiBiZWNhdXNlIGF1dG9tYXRpYyBmaWxlIG92ZXJ3cml0aW5nIGhhcyBub3QgYmVlbiBlbmFibGVkLiBEbyB5b3Ugd2FudCB0byBlbmFibGUgaXQgZm9yIHRoaXMgZmlsZT8KLU1TR19FUlJPUl9JTlZBTElEX1dPUktCRU5DSF9QUk9KRUNUPUlXQUIwMTMwRSBTZWxlY3QgYSB3b3JrYmVuY2ggcHJvamVjdC4KLU1TR19FUlJPUl9JTlZBTElEX1dTRExfRklMRV9OQU1FPUlXQUIwMTMxRSBJbnZhbGlkIGZpbGUgbmFtZS4KLU1TR19FUlJPUl9JTlZBTElEX1dTSUxfRklMRV9OQU1FPUlXQUIwNDcwRSBJbnZhbGlkIFdTSUwgZmlsZSBuYW1lLgotTVNHX0VSUk9SX05PX0lNUE9SVF9PUFRJT05fU0VMRUNURUQ9SVdBQjA0NzFFIE5vIGltcG9ydCBvcHRpb24gaXMgc2VsZWN0ZWQuICBQbGVhc2UgY2hvb3NlIGF0IGxlYXN0IG9uZSBpbXBvcnQgb3B0aW9uLgotTVNHX0VSUk9SX1dSSVRJTkdfVEVNUF9GSUxFX1RPX0ZTPUlXQUIwMTMyRSBVbmFibGUgdG8gd3JpdGUgdGVtcG9yYXJ5IGZpbGUuCi1NU0dfSU5GT19JTVBPUlRfVE9fV09SS0JFTkNIX1NVQ0NFU1NGVUw9SVdBQjAzMTRJICUxIHdhcyBzdWNjZXNzZnVsbHkgaW1wb3J0ZWQgdG8gdGhlIHdvcmtiZW5jaC4KLU1TR19JTkZPX0lNUE9SVF9TRVJWSUNFX1JFRl9UT19XU0lMX1NVQ0NFU1NGVUw9SVdBQjA0NzJJIFNlcnZpY2UgcmVmZXJlbmNlIHdhcyBzdWNjZXNzZnVsbHkgaW1wb3J0ZWQgdG8gJTEuCi0KLSMgQ2hlY2tXb3JrYmVuY2hGaWxlUmVhZE9ubHlBY3Rpb24KLU1TR19FUlJPUl9GSUxFX0NIRUNLT1VUX0RJU0FCTEVEPUNhbm5vdCBjcmVhdGUgdGhlIGZpbGUgIiUyIiByZWxhdGl2ZSB0byB0aGUgcGF0aCAiJTEiIGJlY2F1c2UgYXV0b21hdGljIGZpbGUgY2hlY2sgb3V0IGhhcyBub3QgYmVlbiBlbmFibGVkLiBEbyB5b3Ugd2FudCB0byBlbmFibGUgaXQgZm9yIHRoaXMgZmlsZT8KLQotIyBDbGVhck5vZGVBY3Rpb24KLU1TR19JTkZPX05PREVfQ0xFQVJFRD1JV0FCMDEzM0kgJTEgY2xlYXJlZC4KLQotIyBUYWJsZSB0d2lzdGVlcwotQUxUX1RXSVNUX09QRU5FRD1IaWRlCi1BTFRfVFdJU1RfQ0xPU0VEPUV4cGFuZAotCi0jIFdTREwgQnJvd3NlcgotRk9STV9MSU5LX0JST1dTRT1Ccm93c2UuLi4KLVRJVExFX1dTRExfQlJPV1NFUj1XU0RMIEJyb3dzZXIgLSAlMQotRk9STV9MQUJFTF9XU0RMX1NPVVJDRT1TZWxlY3QgYSBXU0RMIHNvdXJjZToKLUZPUk1fTEFCRUxfV1NETF9DQVRFR09SWT1DYXRlZ29yeQotRk9STV9MQUJFTF9XU0RMX0FsbD1BbGwKLUZPUk1fTEFCRUxfV1NETF9TT1VSQ0VfV0VCUFJPSkVDVFM9V29ya3NwYWNlIFByb2plY3RzCi1GT1JNX0xBQkVMX1dTRExfU09VUkNFX0ZBVk9SSVRFUz1GYXZvcml0ZXMKLUZPUk1fTEFCRUxfV0VCX1BST0pFQ1Q9V29ya3NwYWNlIFByb2plY3QKLUZPUk1fTEFCRUxfV1NETF9VUkw9V1NETCBVUkwKLUZPUk1fQlVUVE9OX1JFRlJFU0g9UmVmcmVzaAotQUxUX1dTRExfQlJPV1NFUj1XU0RMIEJyb3dzZXIKLVdTRExfVFlQRV9TRVJWSUNFX0lOVEVSRkFDRVM9U2VydmljZSBJbnRlcmZhY2VzCi1XU0RMX1RZUEVfU0VSVklDRVM9U2VydmljZXMKLQotIyBDYWxlbmRhciBCcm93c2VyCi1USVRMRV9DQUxFTkRBUl9CUk9XU0VSPUNhbGVuZGFyIEJyb3dzZXIKLSMgMiBjaGFyYWN0ZXIgYWJicmV2aWF0aW9ucyBmb3IgZGF5cyBvZiB0aGUgd2Vlay4KLUZPUk1fTEFCRUxfU0hfU1VOREFZPVN1Ci1GT1JNX0xBQkVMX1NIX01PTkRBWT1NbwotRk9STV9MQUJFTF9TSF9UVUVTREFZPVR1Ci1GT1JNX0xBQkVMX1NIX1dFRE5FU0RBWT1XZQotRk9STV9MQUJFTF9TSF9USFVSU0RBWT1UaAotRk9STV9MQUJFTF9TSF9GUklEQVk9RnIKLUZPUk1fTEFCRUxfU0hfU0FUVVJEQVk9U2EKLSMgTW9udGhzIG9mIHRoZSB5ZWFyCi1GT1JNX0xBQkVMX01PTlRIPU1vbnRoOgotRk9STV9MQUJFTF9KQU5VQVJZPUphbnVhcnkKLUZPUk1fTEFCRUxfRkVCUlVBUlk9RmVicnVhcnkKLUZPUk1fTEFCRUxfTUFSQ0g9TWFyY2gKLUZPUk1fTEFCRUxfQVBSSUw9QXByaWwKLUZPUk1fTEFCRUxfTUFZPU1heQotRk9STV9MQUJFTF9KVU5FPUp1bmUKLUZPUk1fTEFCRUxfSlVMWT1KdWx5Ci1GT1JNX0xBQkVMX0FVR1VTVD1BdWd1c3QKLUZPUk1fTEFCRUxfU0VQVEVNQkVSPVNlcHRlbWJlcgotRk9STV9MQUJFTF9PQ1RPQkVSPU9jdG9iZXIKLUZPUk1fTEFCRUxfTk9WRU1CRVI9Tm92ZW1iZXIKLUZPUk1fTEFCRUxfREVDRU1CRVI9RGVjZW1iZXIKLUZPUk1fTEFCRUxfWUVBUj1ZZWFyOgotRk9STV9MQUJFTF9USU1FPVRpbWU6Ci1GT1JNX0xJTktfVE9EQVk9VG9kYXkKLUZPUk1fTElOS19QUkVWSU9VU19ZRUFSPTw8Ci1GT1JNX0xJTktfUFJFVklPVVNfTU9OVEg9PAotRk9STV9MSU5LX05FWFRfTU9OVEg9PgotRk9STV9MSU5LX05FWFRfWUVBUj0+PgotQUxUX1BSRVZJT1VTX1lFQVI9UHJldmlvdXMgWWVhcgotQUxUX1BSRVZJT1VTX01PTlRIPVByZXZpb3VzIE1vbnRoCi1BTFRfTkVYVF9NT05USD1OZXh0IE1vbnRoCi1BTFRfTkVYVF9ZRUFSPU5leHQgWWVhcgotQUxUX1RPREFZPVRvZGF5Ci1BTFRfQ0FMRU5EQVJfQlJPV1NFUj1DYWxlbmRhciBCcm93c2VyCi1NU0dfRVJST1JfSU5WQUxJRF9USU1FX0ZPUk1BVD1JV0FCMDM2OEUgVGltZSB3YXMgbm90IGZvcm1hdHRlZCBhcyBISDpNTTpTU1suU1NTXS4gRG8geW91IHdpc2ggdG8gdXNlIHRoZSBjdXJyZW50IHRpbWUgaW5zdGVhZD8KLQotIyBBY3Rpb24gZW5naW5lCi1USVRMRV9BQ1RJT05fUkVDT1JERVI9QWN0aW9uIFJlY29yZGVyCi1GT1JNX0xBQkVMX01PREU9TW9kZToKLUZPUk1fTEFCRUxfTU9ERV9QTEFZPVBsYXkKLUZPUk1fTEFCRUxfTU9ERV9TVE9QPVN0b3AKLUZPUk1fTEFCRUxfTU9ERV9SRUNPUkQ9UmVjb3JkCi1GT1JNX0xBQkVMX1NBVkU9U2F2ZQotRk9STV9MQUJFTF9QTEFZX0ZJTEU9UGxheSBmaWxlOgotTVNHX0VSUk9SX0lOVkFMSURfUExBWV9GSUxFPUlXQUIwMzYyRSBFbnRlciBhIHBsYXkgZmlsZS4KLQotIyBGcmFtZSB0aXRsZXMKLUZSQU1FX1RJVExFX1BFUlNQRUNUSVZFX1dPUktBUkVBPVdlYiBTZXJ2aWNlcyBFeHBsb3JlciBJbnRlcm5hbCBXb3JrIEFyZWEKLUZSQU1FX1RJVExFX1BFUlNQRUNUSVZFX1RPT0xCQVI9V2ViIFNlcnZpY2VzIEV4cGxvcmVyIFRvb2xiYXIKLUZSQU1FX1RJVExFX1BFUlNQRUNUSVZFX0NPTlRFTlQ9V2ViIFNlcnZpY2VzIEV4cGxvcmVyIFBhZ2UgQ29udGVudAotRlJBTUVfVElUTEVfV1NETF9UT09MQkFSPVdTREwgQnJvd3NlciBUb29sYmFyCi1GUkFNRV9USVRMRV9XU0RMX0NPTlRFTlQ9V1NETCBCcm93c2VyIENvbnRlbnQKLQotIyBGb3JtIHRpdGxlcwotRk9STV9USVRMRV9QQUdFX0xPQURFUj1QYWdlIExvYWRlcgotRk9STV9USVRMRV9QQUdFX0NPTlRFTlQ9TG9hZGVkIFBhZ2UgQ29udGVudAotRk9STV9USVRMRV9MQVVOQ0hfV0VCU0VSVklDRV9XSVpBUkQ9TGF1bmNoIFdlYiBTZXJ2aWNlIFdpemFyZCBGb3JtCi1GT1JNX1RJVExFX0lNUE9SVF9UT19XT1JLQkVOQ0g9SW1wb3J0IHRvIFdvcmtiZW5jaCBGb3JtCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyLXByb3BlcnRpZXMvZmF2b3JpdGVzLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyLXByb3BlcnRpZXMvZmF2b3JpdGVzLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzOTg4ZjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci1wcm9wZXJ0aWVzL2Zhdm9yaXRlcy5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTY0ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotdGl0bGU9RmF2b3JpdGVzCi0KLSMgTmF2aWdhdG9yCi1GQVZPUklURVNfTUFJTl9OT0RFPUZhdm9yaXRlcyBNYWluCi1GQVZPUklURVNfV1NJTF9GT0xERVJfTk9ERT1GYXZvcml0ZSBXU0lMcwotRkFWT1JJVEVTX1dTRExfU0VSVklDRV9GT0xERVJfTk9ERT1GYXZvcml0ZSBXU0RMIFNlcnZpY2VzCi1GQVZPUklURVNfVURESV9TRVJWSUNFX0ZPTERFUl9OT0RFPUZhdm9yaXRlIFVEREkgU2VydmljZXMKLUZBVk9SSVRFU19VRERJX0JVU0lORVNTRVNfRk9MREVSX05PREU9RmF2b3JpdGUgVURESSBCdXNpbmVzc2VzCi1GQVZPUklURVNfVURESV9TRVJWSUNFX0lOVEVSRkFDRVNfRk9MREVSX05PREU9RmF2b3JpdGUgVURESSBTZXJ2aWNlIEludGVyZmFjZXMKLUZBVk9SSVRFU19VRERJX1JFR0lTVFJJRVNfRk9MREVSX05PREU9RmF2b3JpdGUgVURESSBSZWdpc3RyaWVzCi1GQVZPUklURVNfVVNFUl9ERUZfVURESV9SRUdJU1RSSUVTX0ZPTERFUl9OT0RFPUZhdm9yaXRlIFVzZXIgRGVmaW5lZCBVRERJIFJlZ2lzdHJpZXMKLQotIyBGb3JtCi1GT1JNX0xBQkVMX0ZBVk9SSVRFX1dTSUw9RmF2b3JpdGUgV1NJTHMKLUZPUk1fTEFCRUxfRkFWT1JJVEVfV1NETD1GYXZvcml0ZSBXU0RMcwotRk9STV9MQUJFTF9GQVZPUklURV9VRERJX1JFR0lTVFJZPUZhdm9yaXRlIFVEREkgUmVnaXN0cmllcwotRk9STV9MQUJFTF9GQVZPUklURV9VU0VSX0RFRl9VRERJX1JFR0lTVFJZPUZhdm9yaXRlIFVzZXIgRGVmaW5lZCBVRERJIFJlZ2lzdHJpZXMKLUZPUk1fTEFCRUxfRkFWT1JJVEVfVURESV9TRVJWSUNFPUZhdm9yaXRlIFVEREkgU2VydmljZXMKLUZPUk1fTEFCRUxfRkFWT1JJVEVfVURESV9CVVNJTkVTUz1GYXZvcml0ZSBVRERJIEJ1c2luZXNzIEVudGl0aWVzCi1GT1JNX0xBQkVMX0ZBVk9SSVRFX1VERElfU0VSVklDRV9JTlRFUkZBQ0U9RmF2b3JpdGUgVURESSBTZXJ2aWNlIEludGVyZmFjZXMKLUZPUk1fTEFCRUxfUkVNT1ZFPVJlbW92ZQotRk9STV9MQUJFTF9JTVBPUlRfVE9fV1NJTF9QRVJTUEVDVElWRT1BZGQgVG8gV1NJTCBQYWdlCi1GT1JNX0xBQkVMX0lNUE9SVF9UT19VRERJX1BFUlNQRUNUSVZFPUFkZCBUbyBVRERJIFBhZ2UKLUZPUk1fTEFCRUxfSU1QT1JUX1RPX1dTRExfUEVSU1BFQ1RJVkU9QWRkIFRvIFdTREwgUGFnZQotRk9STV9MQUJFTF9VUkw9VVJMCi1GT1JNX0xBQkVMX0lURU1fTlVNQkVSPUl0ZW0gIwotRk9STV9MQUJFTF9VRERJX1ZFUlNJT049VURESSBWZXJzaW9uCi1GT1JNX0xBQkVMX05BTUU9TmFtZQotRk9STV9MQUJFTF9ERVNDPURlc2NyaXB0aW9uCi1GT1JNX0xBQkVMX0RFRkFVTFRfTE9HSU49RGVmYXVsdCBMb2dpbgotRk9STV9MQUJFTF9ERUZBVUxUX1BBU1NXT1JEPURlZmF1bHQgUGFzc3dvcmQKLUZPUk1fTEFCRUxfSU5RVUlSWV9VUkw9SW5xdWlyeSBVUkwKLUZPUk1fTEFCRUxfUFVCTElTSF9VUkw9UHVibGlzaCBVUkwKLUZPUk1fTEFCRUxfU0VDVVJFX0lOUVVJUllfVVJMPVNlY3VyZSBJbnF1aXJ5IFVSTAotRk9STV9MQUJFTF9TRUNVUkVfUFVCTElTSF9VUkw9U2VjdXJlIFB1Ymxpc2ggVVJMCi1GT1JNX0xBQkVMX1RBWE9OT01ZPVRheG9ub215Ci1GT1JNX0xBQkVMX0xBTkdVQUdFPUxhbmd1YWdlCi1GT1JNX0xBQkVMX1JFR0lTVFJZX05BTUU9UmVnaXN0cnkgTmFtZQotRk9STV9MQUJFTF9CVVNJTkVTU19OQU1FPUJ1c2luZXNzIE5hbWUKLUZPUk1fTEFCRUxfQlVTSU5FU1NfS0VZPUJ1c2luZXNzIEtleQotRk9STV9MQUJFTF9TRVJWSUNFX05BTUU9U2VydmljZSBOYW1lCi1GT1JNX0xBQkVMX1NFUlZJQ0VfS0VZPVNlcnZpY2UgS2V5Ci1GT1JNX0xBQkVMX1NFUlZJQ0VfSU5URVJGQUNFX05BTUU9U2VydmljZSBJbnRlcmZhY2UgTmFtZQotRk9STV9MQUJFTF9TRVJWSUNFX0lOVEVSRkFDRV9LRVk9U2VydmljZSBJbnRlcmZhY2UgS2V5Ci1GT1JNX0xBQkVMX1JFR0lTVFJZX1VSTD08YSBocmVmPSIlMSIgdGFyZ2V0PSJfYmxhbmsiPkNsaWNrIGhlcmU8L2E+IHRvIG9idGFpbiBhIHVzZXIgSUQgYW5kIHBhc3N3b3JkIGZvciB0aGlzIHJlZ2lzdHJ5LgotRk9STV9MQUJFTF9VU0VSX0RFRklORURfQ0FURUdPUllfREFUQV9GSUxFUz1EYXRhIGZpbGVzIGZvciBVc2VyIERlZmluZWQgQ2F0ZWdvcmllcwotTVNHX0VSUk9SX05PVEhJTkdfU0VMRUNURUQ9SVdBQjAzMTVFIFNlbGVjdCBhdCBsZWFzdCBvbmUgaXRlbS4KLQotIyBMaXN0RmF2b3JpdGVXU0lMQWN0aW9uCi1BTFRfTElTVF9GQVZPUklURV9XU0lMPUxpc3QgRmF2b3JpdGUgV1NJTHMKLUZPUk1fTEFCRUxfTElTVF9GQVZPUklURV9XU0lMX0RFU0M9U2VsZWN0IGEgc2V0IG9mIGZhdm9yaXRlIFdTSUwgbGlua3MgYW5kIHByZXNzIDxzdHJvbmc+QWRkIHRvIFdTSUwgUGFnZTwvc3Ryb25nPiB0byBvcGVuIHRoZW0gaW4gdGhlIFdTSUwgbmF2aWdhdG9yLiBQcmVzcyA8c3Ryb25nPlJlbW92ZTwvc3Ryb25nPiB0byByZW1vdmUgdGhlIHNlbGVjdGlvbnMuCi0KLSMgTGlzdEZhdm9yaXRlV1NETFNlcnZpY2VBY3Rpb24KLUFMVF9MSVNUX0ZBVk9SSVRFX1dTRExfU0VSVklDRT1MaXN0IEZhdm9yaXRlIFdTREwgU2VydmljZXMKLUZPUk1fTEFCRUxfTElTVF9GQVZPUklURV9XU0RMX1NFUlZJQ0VfREVTQz1TZWxlY3QgYSBzZXQgb2YgZmF2b3JpdGUgV1NETCBzZXJ2aWNlcyBhbmQgcHJlc3MgPHN0cm9uZz5SZW1vdmU8L3N0cm9uZz4gdG8gcmVtb3ZlIHRoZW0uCi0KLSMgTGlzdEZhdm9yaXRlVURESVNlcnZpY2VBY3Rpb24KLUFMVF9MSVNUX0ZBVk9SSVRFX1VERElfU0VSVklDRT1MaXN0IEZhdm9yaXRlIFVEREkgU2VydmljZXMKLUZPUk1fTEFCRUxfTElTVF9GQVZPUklURV9VRERJX1NFUlZJQ0VfREVTQz1TZWxlY3QgYSBzZXQgb2YgZmF2b3JpdGUgVURESSBzZXJ2aWNlcyBhbmQgcHJlc3MgPHN0cm9uZz5BZGQgdG8gVURESSBQYWdlPC9zdHJvbmc+IHRvIG9wZW4gdGhlbSBpbiB0aGUgVURESSBuYXZpZ2F0b3IuIFByZXNzIDxzdHJvbmc+UmVtb3ZlPC9zdHJvbmc+IHRvIHJlbW92ZSB0aGUgc2VsZWN0aW9ucy4KLQotIyBMaXN0RmF2b3JpdGVVRERJQnVzaW5lc3NBY3Rpb24KLUFMVF9MSVNUX0ZBVk9SSVRFX1VERElfQlVTSU5FU1M9TGlzdCBGYXZvcml0ZSBVRERJIEJ1c2luZXNzZXMKLUZPUk1fTEFCRUxfTElTVF9GQVZPUklURV9VRERJX0JVU0lORVNTX0RFU0M9U2VsZWN0IGEgc2V0IG9mIGZhdm9yaXRlIFVEREkgYnVzaW5lc3NlcyBhbmQgcHJlc3MgPHN0cm9uZz5BZGQgdG8gVURESSBQYWdlPC9zdHJvbmc+IHRvIG9wZW4gdGhlbSBpbiB0aGUgVURESSBuYXZpZ2F0b3IuIFByZXNzIDxzdHJvbmc+UmVtb3ZlPC9zdHJvbmc+IHRvIHJlbW92ZSB0aGUgc2VsZWN0aW9ucy4KLQotIyBMaXN0RmF2b3JpdGVVRERJUmVnaXN0cnlBY3Rpb24KLUFMVF9MSVNUX0ZBVk9SSVRFX1VERElfUkVHSVNUUlk9TGlzdCBGYXZvcml0ZSBVRERJIFJlZ2lzdHJpZXMKLUZPUk1fTEFCRUxfTElTVF9GQVZPUklURV9VRERJX1JFR0lTVFJZX0RFU0M9U2VsZWN0IGEgc2V0IG9mIGZhdm9yaXRlIFVEREkgcmVnaXN0cmllcyBhbmQgcHJlc3MgPHN0cm9uZz5BZGQgdG8gVURESSBQYWdlPC9zdHJvbmc+IHRvIG9wZW4gdGhlbSBpbiB0aGUgVURESSBuYXZpZ2F0b3IuIFByZXNzIDxzdHJvbmc+UmVtb3ZlPC9zdHJvbmc+IHRvIHJlbW92ZSB0aGUgc2VsZWN0aW9ucy4KLQotIyBMaXN0RmF2b3JpdGVVc2VyRGVmVURESVJlZ2lzdHJ5QWN0aW9uCi1BTFRfTElTVF9GQVZPUklURV9VU0VSX0RFRl9VRERJX1JFR0lTVFJZPUxpc3QgRmF2b3JpdGUgVXNlciBEZWZpbmVkIFVEREkgUmVnaXN0cmllcwotRk9STV9MQUJFTF9MSVNUX0ZBVk9SSVRFX1VTRVJfREVGX1VERElfUkVHSVNUUllfREVTQz1TZWxlY3QgYSBzZXQgb2YgZmF2b3JpdGUgVURESSByZWdpc3RyaWVzIGFuZCBwcmVzcyA8c3Ryb25nPkFkZCB0byBVRERJIFBhZ2U8L3N0cm9uZz4gdG8gb3BlbiB0aGVtIGluIHRoZSBVRERJIG5hdmlnYXRvci4KLQotIyBMaXN0RmF2b3JpdGVVRERJU2VydmljZUludGVyZmFjZUFjdGlvbgotQUxUX0xJU1RfRkFWT1JJVEVfVURESV9TRVJWSUNFX0lOVEVSRkFDRT1MaXN0IEZhdm9yaXRlIFVEREkgU2VydmljZSBJbnRlcmZhY2VzCi1GT1JNX0xBQkVMX0xJU1RfRkFWT1JJVEVfVURESV9TRVJWSUNFX0lOVEVSRkFDRV9ERVNDPVNlbGVjdCBhIHNldCBvZiBmYXZvcml0ZSBVRERJIHNlcnZpY2UgaW50ZXJmYWNlcyBhbmQgcHJlc3MgPHN0cm9uZz5BZGQgdG8gVURESSBQYWdlPC9zdHJvbmc+IHRvIG9wZW4gdGhlbSBpbiB0aGUgVURESSBuYXZpZ2F0b3IuIFByZXNzIDxzdHJvbmc+UmVtb3ZlPC9zdHJvbmc+IHRvIHJlbW92ZSB0aGUgc2VsZWN0aW9ucy4KLQotIyBGYXZvcml0ZXNXU0lMRGV0YWlsc0FjdGlvbgotQUxUX0ZBVk9SSVRFU19XU0lMX0RFVEFJTFM9RmF2b3JpdGUgV1NJTCBEZXRhaWxzCi0KLSMgRmF2b3JpdGVzV1NETERldGFpbHNBY3Rpb24KLUFMVF9GQVZPUklURVNfV1NETF9ERVRBSUxTPUZhdm9yaXRlIFdTREwgRGV0YWlscwotCi0jIEZhdm9yaXRlc1VERElSZWdpc3RyeURldGFpbHNBY3Rpb24KLUFMVF9GQVZPUklURVNfVURESV9SRUdJU1RSWV9ERVRBSUxTPUZhdm9yaXRlIFVEREkgUmVnaXN0cnkgRGV0YWlscwotCi0jIEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlEZXRhaWxzQWN0aW9uCi1BTFRfRkFWT1JJVEVTX1VTRVJfREVGX1VERElfUkVHSVNUUllfREVUQUlMUz1GYXZvcml0ZSBVc2VyIERlZmluZWQgVURESSBSZWdpc3RyeSBEZXRhaWxzCi0KLSMgRmF2b3JpdGVzVURESUJ1c2luZXNzRGV0YWlsc0FjdGlvbgotQUxUX0ZBVk9SSVRFU19VRERJX0JVU0lORVNTX0RFVEFJTFM9RmF2b3JpdGUgVURESSBCdXNpbmVzcyBEZXRhaWxzCi0KLSMgRmF2b3JpdGVzVURESVNlcnZpY2VEZXRhaWxzQWN0aW9uCi1BTFRfRkFWT1JJVEVTX1VERElfU0VSVklDRV9ERVRBSUxTPUZhdm9yaXRlIFVEREkgU2VydmljZSBEZXRhaWxzCi0KLSMgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzQWN0aW9uCi1BTFRfRkFWT1JJVEVTX1VERElfU0VSVklDRV9JTlRFUkZBQ0VfREVUQUlMUz1GYXZvcml0ZSBVRERJIFNlcnZpY2UgSW50ZXJmYWNlIERldGFpbHMKLQotIyBBZGRXU0lMVG9XU0lMUGVyc3BlY3RpdmVBY3Rpb24KLUFMVF9BRERfV1NJTF9UT19XU0lMX1BFUlNQRUNUSVZFPUFkZCB0byBXU0lMIFBhZ2UKLU1TR19FUlJPUl9XU0lMX0FMUkVBRFlfT1BFTkVEPUlXQUIwMzE2RSAlMSBpcyBhbHJlYWR5IG9wZW5lZCBpbiBXU0lMIFBhZ2UuCi1NU0dfSU5GT19BRERfV1NJTF9UT19XU0lMX1BFUlNQRUNUSVZFX1NVQ0NFU1NGVUw9SVdBQjAzMTdJICUxIGlzIGFkZGVkIHRvIFdTSUwgUGFnZS4KLU1TR19FUlJPUl9BRERfV1NJTF9UT19XU0lMX1BFUlNQRUNUSVZFPUlXQUIwMzE4RSBXU0lMICUxIGNvdWxkIG5vdCBiZSBsb2FkZWQuCi0KLSMgQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24KLUFMVF9BRERfVE9fVURESV9QRVJTUEVDVElWRT1BZGQgdG8gVURESSBQYWdlCi1NU0dfRVJST1JfQUREX1RPX1VERElfUEVSU1BFQ1RJVkU9SVdBQjAzMjBFICUxIGNvdWxkIG5vdCBiZSBmb3VuZCBpbiB0aGUgcmVnaXN0cnkuCi1NU0dfSU5GT19BRERfVE9fVURESV9QRVJTUEVDVElWRV9TVUNDRVNTRlVMPUlXQUIwMzIxSSAlMSBpcyBhZGRlZCB0byBVRERJIFBhZ2UuCi0KLSMgRmF2b3JpdGVzQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb24KLUFMVF9BRERfV1NETF9UT19XU0RMX1BFUlNQRUNUSVZFPUFkZCB0byBXU0RMIFBhZ2UKLU1TR19JTkZPX0FERF9XU0RMX1RPX1dTRExfUEVSU1BFQ1RJVkVfU1VDQ0VTU0ZVTD1JV0FCMDM2OUkgJTEgaXMgYWRkZWQgdG8gV1NETCBQYWdlLgotTVNHX0VSUk9SX0FERF9XU0RMX1RPX1dTRExfUEVSU1BFQ1RJVkU9SVdBQjAzNzBFIFdTREwgJTEgY291bGQgbm90IGJlIGxvYWRlZC4KLQotIyBSZW1vdmVGYXZvcml0ZUFjdGlvbgotQUxUX1JFTU9WRV9GQVZPUklURT1SZW1vdmUgRmF2b3JpdGUKLU1TR19DT05GSVJNX1JFTU9WRV9OT0RFPSUxIGlzIG5vIGxvbmdlciByZXNvbHZhYmxlLiAgRG8geW91IHdpc2ggdG8gY2xlYXIgaXQ/Ci0KLSMgRmF2b3JpdGVzUmVzdG9yZURlZmF1bHRGYXZvcml0ZXNBY3Rpb24KLUFMVF9SRVNUT1JFX0RFRkFVTFRfRkFWT1JJVEVTPVJlc3RvcmUgRGVmYXVsdCBGYXZvcml0ZXMKLU1TR19DT05GSVJNX1JFU1RPUkVfREVGQVVMVF9GQVZPUklURVM9VGhpcyBvcGVyYXRpb24gd2lsbCBvdmVyd3JpdGUgdGhlIGN1cnJlbnQgZmF2b3JpdGVzLiAgRG8geW91IHdpc2ggdG8gY29udGludWU/Ci1NU0dfRVJST1JfT1BFTl9GQVZPUklURVNfQkFDS1VQPUlXQUIwMTM0RSBVbmFibGUgdG8gbG9hZCB0aGUgZGVmYXVsdCBmYXZvcml0ZXMuCi1NU0dfSU5GT19GQVZPUklURVNfUkVTVE9SRURfVE9fREVGQVVMVD1JV0FCMDMyMkkgRGVmYXVsdCBGYXZvcml0ZXMgYXJlIHJlc3RvcmVkLgotTVNHX0VSUk9SX1NBVkVfRkFWT1JJVEVTX1dTSUw9SVdBQjAxODZFIFVuYWJsZSB0byBzYXZlIGZhdm9yaXRlcyB0byAlMS4KLQotIyBGcmFtZSB0aXRsZXMKLUZSQU1FX1RJVExFX05BVklHQVRPUl9DT05UQUlORVI9TmF2aWdhdG9yIENvbnRhaW5lcgotRlJBTUVfVElUTEVfTkFWSUdBVE9SX1RPT0xCQVI9TmF2aWdhdG9yIFRvb2xiYXIKLUZSQU1FX1RJVExFX05BVklHQVRPUl9DT05URU5UPU5hdmlnYXRvciBDb250ZW50Ci1GUkFNRV9USVRMRV9BQ1RJT05TX0NPTlRBSU5FUj1BY3Rpb25zIENvbnRhaW5lcgotRlJBTUVfVElUTEVfUFJPUEVSVElFU19DT05UQUlORVI9UHJvcGVydGllcyBDb250YWluZXIKLUZSQU1FX1RJVExFX1BST1BFUlRJRVNfQ09OVEVOVD1Qcm9wZXJ0aWVzIENvbnRlbnQKLUZSQU1FX1RJVExFX1BST1BFUlRJRVNfVE9PTEJBUj1Qcm9wZXJ0aWVzIFRvb2xiYXIKLUZSQU1FX1RJVExFX1NUQVRVU19DT05UQUlORVI9U3RhdHVzIENvbnRhaW5lcgotRlJBTUVfVElUTEVfU1RBVFVTX0NPTlRFTlQ9U3RhdHVzIENvbnRlbnQKLUZSQU1FX1RJVExFX1NUQVRVU19UT09MQkFSPVN0YXR1cyBUb29sYmFyCi0KLSMgRm9ybSB0aXRsZXMKLUZPUk1fVElUTEVfVURESV9CVVNJTkVTU19ERVRBSUxTPVVEREkgQnVzaW5lc3MgRGV0YWlscyBGb3JtCi1GT1JNX1RJVExFX1VERElfUkVHSVNUUllfREVUQUlMUz1VRERJIFJlZ2lzdHJ5IERldGFpbHMgRm9ybQotRk9STV9USVRMRV9VU0VSX0RFRl9VRERJX1JFR0lTVFJZX0RFVEFJTFM9VXNlciBEZWZpbmVkIFVEREkgUmVnaXN0cnkgRGV0YWlscyBGb3JtCi1GT1JNX1RJVExFX1VERElfU0VSVklDRV9ERVRBSUxTPVVEREkgU2VydmljZSBEZXRhaWxzIEZvcm0KLUZPUk1fVElUTEVfVURESV9TRVJWSUNFX0lOVEVSRkFDRV9ERVRBSUxTPVVEREkgU2VydmljZSBJbnRlcmZhY2UgRGV0YWlscyBGb3JtCi1GT1JNX1RJVExFX1dTRExfREVUQUlMUz1XU0RMIERldGFpbHMgRm9ybQotRk9STV9USVRMRV9XU0lMX0RFVEFJTFM9V1NJTCBEZXRhaWxzIEZvcm0KLQotIyBWaWV3IHRpdGxlcwotVklFV19USVRMRV9VRERJX0JVU0lORVNTX0xJU1Q9VURESSBCdXNpbmVzc2VzIExpc3QgVmlldwotVklFV19USVRMRV9VRERJX1JFR0lTVFJZX0xJU1Q9VURESSBSZWdpc3RyaWVzIExpc3QgVmlldwotVklFV19USVRMRV9VU0VSX0RFRl9VRERJX1JFR0lTVFJZX0xJU1Q9VXNlciBEZWZpbmVkIFVEREkgUmVnaXN0cmllcyBMaXN0IFZpZXcKLVZJRVdfVElUTEVfVURESV9TRVJWSUNFX0lOVEVSRkFDRV9MSVNUPVVEREkgU2VydmljZSBJbnRlcmZhY2VzIExpc3QgVmlldwotVklFV19USVRMRV9VRERJX1NFUlZJQ0VfTElTVD1VRERJIFNlcnZpY2VzIExpc3QgVmlldwotVklFV19USVRMRV9XU0RMX1NFUlZJQ0VfTElTVD1XU0RMIFNlcnZpY2VzIExpc3QgVmlldwotVklFV19USVRMRV9XU0lMX0xJU1Q9V1NJTCBMaW5rcyBMaXN0IFZpZXcKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXItcHJvcGVydGllcy91ZGRpLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyLXByb3BlcnRpZXMvdWRkaS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOTNhNjE0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXItcHJvcGVydGllcy91ZGRpLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw0OTYgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi10aXRsZT1VRERJCi0KLSMgTm9kZXMKLU5PREVfTkFNRV9VRERJX01BSU49VURESSBNYWluCi1OT0RFX05BTUVfUVVFUklFU19GT0xERVI9RXhlY3V0ZWQgUXVlcmllcwotTk9ERV9OQU1FX1BVQkxJU0hFRF9CVVNJTkVTU0VTX0ZPTERFUj1QdWJsaXNoZWQgQnVzaW5lc3NlcwotTk9ERV9OQU1FX1BVQkxJU0hFRF9TRVJWSUNFU19GT0xERVI9UHVibGlzaGVkIFNlcnZpY2VzCi1OT0RFX05BTUVfUFVCTElTSEVEX1NFUlZJQ0VfSU5URVJGQUNFU19GT0xERVI9UHVibGlzaGVkIFNlcnZpY2UgSW50ZXJmYWNlcwotCi0jIE9wZW5SZWdpc3RyeUFjdGlvbgotQUxUX09QRU5fUkVHSVNUUlk9T3BlbiBSZWdpc3RyeQotRk9STV9MQUJFTF9PUEVOX1JFR0lTVFJZX0RFU0M9U3BlY2lmeSB0aGUgbmFtZSBhbmQgaW5xdWlyeSBVUkwgb2YgdGhlIHJlZ2lzdHJ5IHRvIGJlIG9wZW5lZC4gU2VsZWN0aW5nIGEgZmF2b3JpdGUgcmVnaXN0cnkgd2lsbCBhdXRvbWF0aWNhbGx5IGZpbGwgaW4gdGhlIHJlcXVpcmVkIGluZm9ybWF0aW9uLiBQcmVzcyA8c3Ryb25nPkdvPC9zdHJvbmc+IHRvIG9wZW4gdGhlIHJlZ2lzdHJ5LgotRk9STV9MQUJFTF9GQVZPUklURV9SRUdJU1RSWT1GYXZvcml0ZSBSZWdpc3RyeQotRk9STV9MQUJFTF9SRUdJU1RSWV9OQU1FPVJlZ2lzdHJ5IE5hbWUKLUZPUk1fTEFCRUxfSU5RVUlSWV9VUkw9SW5xdWlyeSBVUkwKLU1TR19FUlJPUl9JTlZBTElEX1JFR0lTVFJZX05BTUU9SVdBQjAxMzZFIEVudGVyIGEgdmFsaWQgcmVnaXN0cnkgbmFtZS4KLU1TR19FUlJPUl9JTlZBTElEX0lOUVVJUllfVVJMPUlXQUIwMTM4RSBFbnRlciBhIHZhbGlkIGlucXVpcnkgVVJMLgotTVNHX0lORk9fUkVHSVNUUllfT1BFTkVEPUlXQUIwMTM5SSBUaGUgcmVnaXN0cnkgbmFtZWQgJTEgbG9jYXRlZCBhdCAlMiB3YXMgb3BlbmVkIHN1Y2Nlc3NmdWxseS4KLQotIyBVc2VyLWRlZmluZWQgQ2F0ZWdvcmllcwotRk9STV9MQUJFTF9BRERfQ0FURUdPUllfREFUQT08YSBocmVmPSIlMSI+Q2xpY2sgaGVyZTwvYT4gdG8gbG9hZCB0aGlzIGNhdGVnb3J5J3MgZGF0YS4KLUZPUk1fQ09OVFJPTF9USVRMRV9DQVRFR09SWV9GSUxFPUNhdGVnb3J5IGRhdGEgZmlsZSBuYW1lCi1NU0dfSU5GT19OT19VU0VSX0RFRklORURfQ0FURUdPUklFU19GT1VORD1JV0FCMDM3MUkgTm8gdXNlciBkZWZpbmVkIGNhdGVnb3JpZXMgZGV0ZWN0ZWQuCi1NU0dfSU5GT19OT19DQVRFR09SWV9EQVRBPUlXQUIwMzcySSBDYXRlZ29yeSBkYXRhIGZvciAlMSBpcyBub3QgYXZhaWxhYmxlIG9yIGlzIGludmFsaWQuCi1NU0dfSU5GT19VU0VSX0RFRklORURfQ0FURUdPUllfREFUQV9MT0FERUQ9SVdBQjAzNzNJIERhdGEgZm9yIHVzZXIgZGVmaW5lZCBjYXRlZ29yeSAlMSB3YXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZC4KLU1TR19FUlJPUl9JTlZBTElEX1VTRVJfREVGSU5FRF9DQVRFR09SWV9EQVRBX0ZJTEVfS0VZPUlXQUIwMzc0RSBJbnZhbGlkIGRhdGEgZmlsZSBmb3IgdXNlciBkZWZpbmVkIGNhdGVnb3J5ICUxLiBBIGNhdGVnb3J5IGtleSAnJTInIHdhcyBmb3VuZCBidXQgJyUzJyB3YXMgZXhwZWN0ZWQuCi1NU0dfRVJST1JfSU5WQUxJRF9VU0VSX0RFRklORURfQ0FURUdPUllfREFUQV9GSUxFX0ZPUk1BVD1JV0FCMDQ3M0UgVW5rbm93biBmb3JtYXQgaW4gbGluZTogJTEgb2YgdGhlIGRhdGEgZmlsZSBmb3IgdXNlciBkZWZpbmVkIGNhdGVnb3J5ICUyLiBUaGUgbGluZSBpczogIiUzIgotTVNHX0VSUk9SX0lOVkFMSURfVVNFUl9ERUZJTkVEX0NBVEVHT1JZX0RBVEFfRklMRT1JV0FCMDM3NUUgSW52YWxpZCBkYXRhIGZpbGUgZm9yIHVzZXIgZGVmaW5lZCBjYXRlZ29yeSAlMS4KLU1TR19FUlJPUl9TQVZJTkdfQ0FURUdPUllfREFUQT1JV0FCMDQ3NEUgQW4gZXJyb3Igb2NjdXJlZCB3aGlsZSBzYXZpbmcgZGF0YSBmb3IgY2F0ZWdvcnkgJTEuIEV4Y2VwdGlvbiB0ZXh0OiAlMgotCi0jIFVEREkgQ2F0ZWdvcnkgQnJvd3NlcgotVElUTEVfQ0FURUdPUllfQlJPV1NFUj1DYXRlZ29yeSBCcm93c2VyCi1BTFRfQ0FURUdPUklFUz1DYXRlZ29yaWVzCi0KLSMgRGV0YWlscwotQUxUX1JFR0lTVFJZX0RFVEFJTFM9UmVnaXN0cnkgRGV0YWlscwotQUxUX0JVU0lORVNTX0RFVEFJTFM9QnVzaW5lc3MgRGV0YWlscwotQUxUX1NFUlZJQ0VfREVUQUlMUz1TZXJ2aWNlIERldGFpbHMKLUFMVF9TRVJWSUNFX0lOVEVSRkFDRV9ERVRBSUxTPVNlcnZpY2UgSW50ZXJmYWNlIERldGFpbHMKLUZPUk1fTEFCRUxfREVUQUlMU19FRElUQUJMRT1EZXRhaWxzIGZvciA8c3Ryb25nPiUxPC9zdHJvbmc+IGFyZSBzaG93biBiZWxvdy4gU29tZSBpdGVtcyBtYXkgYmUgYWRkZWQsIHJlbW92ZWQsIG9yIGNoYW5nZWQuIEF1dGhlbnRpY2F0aW9uIG1heSBiZSByZXF1aXJlZCBmb3IgY2hhbmdlcy4gT3RoZXIgYWN0aW9ucyBhcmUgbGlzdGVkIGF0IHRoZSBib3R0b20gb2YgdGhpcyBwYWdlLgotCi0jIEdldAotQUxUX0dFVD1HZXQKLQotIyBDb21tb24gRm9ybSBDb250cm9sIFRpdGxlCi1GT1JNX0NPTlRST0xfVElUTEVfTkFNRV9URVhUX1ZBTFVFPU5hbWUgdmFsdWUKLUZPUk1fQ09OVFJPTF9USVRMRV9ERVNDUklQVElPTl9URVhUX1ZBTFVFPURlc2NyaXB0aW9uIHZhbHVlCi1GT1JNX0NPTlRST0xfVElUTEVfQ0FURUdPUllfS0VZX05BTUU9Q2F0ZWdvcnkga2V5IG5hbWUKLUZPUk1fQ09OVFJPTF9USVRMRV9DQVRFR09SWV9LRVlfVkFMVUU9Q2F0ZWdvcnkga2V5IHZhbHVlCi1GT1JNX0NPTlRST0xfVElUTEVfSURFTlRJRklFUl9LRVlfTkFNRT1JZGVudGlmaWVyIGtleSBuYW1lCi1GT1JNX0NPTlRST0xfVElUTEVfSURFTlRJRklFUl9LRVlfVkFMVUU9SWRlbnRpZmllciBrZXkgdmFsdWUKLUZPUk1fQ09OVFJPTF9USVRMRV9ESVNDT1ZFUllfVVJMPURpc2NvdmVyeSBVUkwKLUZPUk1fQ09OVFJPTF9USVRMRV9JTlBVVF9URVhUX1ZBTFVFPVVEREkgcmVnaXN0cnkgbmFtZQotCi0jIEZpbmQgYWN0aW9ucwotQUxUX0ZJTkQ9RmluZAotQUxUX1NVQlFVRVJZPUZpbmQgJTEgU3VicXVlcnkKLUZPUk1fTEFCRUxfUVVFUllfTkFNRT1OYW1lIG9mIHRoaXMgcXVlcnkKLURFRkFVTFRfUVVFUllfTkFNRT1xdWVyeSByZXN1bHRzCi1ERUZBVUxUX1NVQlFVRVJZX05BTUU9JTEgLSAlMiBzdWJxdWVyeQotRk9STV9MQUJFTF9TRUFSQ0hfRk9SPVNlYXJjaCBmb3IKLUZPUk1fT1BUSU9OX0JVU0lORVNTRVM9QnVzaW5lc3NlcwotRk9STV9PUFRJT05fU0VSVklDRVM9U2VydmljZXMKLUZPUk1fT1BUSU9OX1NFUlZJQ0VfSU5URVJGQUNFUz1TZXJ2aWNlIEludGVyZmFjZXMKLUZPUk1fTEFCRUxfU0VBUkNIX1RZUEU9VHlwZSBvZiBzZWFyY2gKLUZPUk1fUkFESU9fU0lNUExFPVNpbXBsZQotRk9STV9SQURJT19BRFZBTkNFRD1BZHZhbmNlZAotRk9STV9SQURJT19VVUlEPVVVSUQKLUZPUk1fTEFCRUxfRklORF9CVVNJTkVTU0VTX1NJTVBMRV9ERVNDPUVudGVyIHRoZSBwYXJ0aWFsIG9yIGNvbXBsZXRlIG5hbWUgb2YgYSBidXNpbmVzcyB0byBzZWFyY2ggZm9yLiBUaGUgJyUnIHN5bWJvbCBjYW4gYmUgdXNlZCBhcyBhIHdpbGRjYXJkIHRoYXQgbWF0Y2hlcyBhbnkgY2hhcmFjdGVyLiBQcmVzcyA8c3Ryb25nPkdvPC9zdHJvbmc+IHRvIGV4ZWN1dGUgdGhlIHNlYXJjaC4KLUZPUk1fTEFCRUxfRklORF9BRFZBTkNFRF9ERVNDPUVudGVyIHZhbHVlcyBmb3Igb25lIG9yIG1vcmUgb2YgdGhlIHBhcmFtZXRlcnMgbGlzdGVkIGJlbG93LiBUaGUgJyUnIHN5bWJvbCBjYW4gYmUgdXNlZCBhcyBhIHdpbGRjYXJkIHRoYXQgbWF0Y2hlcyBhbnkgY2hhcmFjdGVyIGluIHRoZSBOYW1lIGZpZWxkIG9mIHRoZSBOYW1lcyB0YWJsZS4gQXV0aGVudGljYXRpb24gbWF5IGJlIHJlcXVpcmVkLiBQcmVzcyA8c3Ryb25nPkdvPC9zdHJvbmc+IHRvIGV4ZWN1dGUgdGhlIHNlYXJjaC4KLUZPUk1fTEFCRUxfRklORF9CVVNJTkVTU19VVUlEX0RFU0M9RW50ZXIgdGhlIFVVSUQgb2YgdGhlIGJ1c2luZXNzIHRvIHNlYXJjaCBmb3IuIFByZXNzIDxzdHJvbmc+R288L3N0cm9uZz4gdG8gZXhlY3V0ZSB0aGUgc2VhcmNoLgotRk9STV9MQUJFTF9OQU1FUz1OYW1lcwotRk9STV9MSU5LX0FERD1BZGQKLUZPUk1fTElOS19HRVQ9R2V0Ci1GT1JNX0xJTktfRklORD1GaW5kCi1GT1JNX0xJTktfUkVNT1ZFPVJlbW92ZQotRk9STV9MQUJFTF9PV05FRD1Pd25lZAotRk9STV9MQUJFTF9QVUJMSVNIX1VSTD1QdWJsaXNoIFVSTAotRk9STV9MQUJFTF9VU0VSSUQ9VXNlciBJRAotRk9STV9MQUJFTF9QQVNTV09SRD1QYXNzd29yZAotRk9STV9MQUJFTF9MQU5HVUFHRT1MYW5ndWFnZQotRk9STV9MQUJFTF9OQU1FPU5hbWUKLUZPUk1fTEFCRUxfREVTQ1JJUFRJT049RGVzY3JpcHRpb24KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0VOPUVuZ2xpc2gKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0FBPUFmYXIKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0FCPUFia2hhemlhbgotRk9STV9PUFRJT05fTEFOR1VBR0VfQUY9QWZyaWthYW5zCi1GT1JNX09QVElPTl9MQU5HVUFHRV9BTT1BbWhhcmljCi1GT1JNX09QVElPTl9MQU5HVUFHRV9BUj1BcmFiaWMKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0FTPUFzc2FtZXNlCi1GT1JNX09QVElPTl9MQU5HVUFHRV9BWT1BeW1hcmEKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0FaPUF6ZXJiYWlqYW5pCi1GT1JNX09QVElPTl9MQU5HVUFHRV9CQT1CYXNoa2lyCi1GT1JNX09QVElPTl9MQU5HVUFHRV9CRT1CeWVsb3J1c3NpYW4KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0JHPUJ1bGdhcmlhbgotRk9STV9PUFRJT05fTEFOR1VBR0VfQkg9QmloYXJpCi1GT1JNX09QVElPTl9MQU5HVUFHRV9CST1CaXNsYW1hCi1GT1JNX09QVElPTl9MQU5HVUFHRV9CTj1CZW5nYWxpOyBCYW5nbGEKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0JPPVRpYmV0YW4KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0JSPUJyZXRvbgotRk9STV9PUFRJT05fTEFOR1VBR0VfQ0E9Q2F0YWxhbgotRk9STV9PUFRJT05fTEFOR1VBR0VfQ089Q29yc2ljYW4KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0NaPUN6ZWNoCi1GT1JNX09QVElPTl9MQU5HVUFHRV9DWT1XZWxzaAotRk9STV9PUFRJT05fTEFOR1VBR0VfREE9RGFuaXNoCi1GT1JNX09QVElPTl9MQU5HVUFHRV9ERT1HZXJtYW4KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0RaPUJodXRhbmkKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0VMPUdyZWVrCi1GT1JNX09QVElPTl9MQU5HVUFHRV9FTz1Fc3BlcmFudG8KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0VTPVNwYW5pc2gKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0VUPUVzdG9uaWFuCi1GT1JNX09QVElPTl9MQU5HVUFHRV9FVT1CYXNxdWUKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0ZBPVBlcnNpYW4KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0ZJPUZpbm5pc2gKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0ZKPUZpamkKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0ZPPUZhZXJvZXNlCi1GT1JNX09QVElPTl9MQU5HVUFHRV9GUj1GcmVuY2gKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0ZZPUZyaXNpYW4KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0dBPUlyaXNoCi1GT1JNX09QVElPTl9MQU5HVUFHRV9HRD1TY290cyBHYWVsaWMKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0dMPUdhbGljaWFuCi1GT1JNX09QVElPTl9MQU5HVUFHRV9HTj1HdWFyYW5pCi1GT1JNX09QVElPTl9MQU5HVUFHRV9HVT1HdWphcmF0aQotRk9STV9PUFRJT05fTEFOR1VBR0VfSEE9SGF1c2EKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0hJPUhpbmRpCi1GT1JNX09QVElPTl9MQU5HVUFHRV9IUj1Dcm9hdGlhbgotRk9STV9PUFRJT05fTEFOR1VBR0VfSFU9SHVuZ2FyaWFuCi1GT1JNX09QVElPTl9MQU5HVUFHRV9IWT1Bcm1lbmlhbgotRk9STV9PUFRJT05fTEFOR1VBR0VfSUE9SW50ZXJsaW5ndWEKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0lFPUludGVybGluZ3VlCi1GT1JNX09QVElPTl9MQU5HVUFHRV9JSz1JbnVwaWFrCi1GT1JNX09QVElPTl9MQU5HVUFHRV9JTj1JbmRvbmVzaWFuCi1GT1JNX09QVElPTl9MQU5HVUFHRV9JUz1JY2VsYW5kaWMKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0lUPUl0YWxpYW4KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0lXPUhlYnJldwotRk9STV9PUFRJT05fTEFOR1VBR0VfSkE9SmFwYW5lc2UKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0pJPVlpZGRpc2gKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0pXPUphdmFuZXNlCi1GT1JNX09QVElPTl9MQU5HVUFHRV9LQT1HZW9yZ2lhbgotRk9STV9PUFRJT05fTEFOR1VBR0VfS0s9S2F6YWtoCi1GT1JNX09QVElPTl9MQU5HVUFHRV9LTD1HcmVlbmxhbmRpYwotRk9STV9PUFRJT05fTEFOR1VBR0VfS009Q2FtYm9kaWFuCi1GT1JNX09QVElPTl9MQU5HVUFHRV9LTj1LYW5uYWRhCi1GT1JNX09QVElPTl9MQU5HVUFHRV9LTz1Lb3JlYW4KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0tTPUthc2htaXJpCi1GT1JNX09QVElPTl9MQU5HVUFHRV9LVT1LdXJkaXNoCi1GT1JNX09QVElPTl9MQU5HVUFHRV9LWT1LaXJnaGl6Ci1GT1JNX09QVElPTl9MQU5HVUFHRV9MQT1MYXRpbgotRk9STV9PUFRJT05fTEFOR1VBR0VfTE49TGluZ2FsYQotRk9STV9PUFRJT05fTEFOR1VBR0VfTE89TGFvdGhpYW4KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0xUPUxpdGh1YW5pYW4KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX0xWPUxhdHZpYW4sIExldHRpc2gKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX01HPU1hbGFnYXN5Ci1GT1JNX09QVElPTl9MQU5HVUFHRV9NST1NYW9yaQotRk9STV9PUFRJT05fTEFOR1VBR0VfTUs9TWFjZWRvbmlhbgotRk9STV9PUFRJT05fTEFOR1VBR0VfTUw9TWFsYXlhbGFtCi1GT1JNX09QVElPTl9MQU5HVUFHRV9NTj1Nb25nb2xpYW4KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX01PPU1vbGRhdmlhbgotRk9STV9PUFRJT05fTEFOR1VBR0VfTVI9TWFyYXRoaQotRk9STV9PUFRJT05fTEFOR1VBR0VfTVM9TWFsYXkKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX01UPU1hbHRlc2UKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX01ZPUJ1cm1lc2UKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX05BPU5hdXJ1Ci1GT1JNX09QVElPTl9MQU5HVUFHRV9ORT1OZXBhbGkKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX05MPUR1dGNoCi1GT1JNX09QVElPTl9MQU5HVUFHRV9OTz1Ob3J3ZWdpYW4KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX09DPU9jY2l0YW4KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX09NPShBZmFuKSBPcm9tbwotRk9STV9PUFRJT05fTEFOR1VBR0VfT1I9T3JpeWEKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1BBPVB1bmphYmkKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1BMPVBvbGlzaAotRk9STV9PUFRJT05fTEFOR1VBR0VfUFM9UGFzaHRvLCBQdXNodG8KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1BUPVBvcnR1Z3Vlc2UKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1FVPVF1ZWNodWEKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1JNPVJoYWV0by1Sb21hbmNlCi1GT1JNX09QVElPTl9MQU5HVUFHRV9STj1LaXJ1bmRpCi1GT1JNX09QVElPTl9MQU5HVUFHRV9STz1Sb21hbmlhbgotRk9STV9PUFRJT05fTEFOR1VBR0VfUlU9UnVzc2lhbgotRk9STV9PUFRJT05fTEFOR1VBR0VfUlc9S2lueWFyd2FuZGEKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1NBPVNhbnNrcml0Ci1GT1JNX09QVElPTl9MQU5HVUFHRV9TRD1TaW5kaGkKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1NHPVNhbmdybwotRk9STV9PUFRJT05fTEFOR1VBR0VfU0g9U2VyYm8tQ3JvYXRpYW4KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1NJPVNpbmdoYWxlc2UKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1NLPVNsb3ZhawotRk9STV9PUFRJT05fTEFOR1VBR0VfU0w9U2xvdmVuaWFuCi1GT1JNX09QVElPTl9MQU5HVUFHRV9TTT1TYW1vYW4KLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1NOPVNob25hCi1GT1JNX09QVElPTl9MQU5HVUFHRV9TTz1Tb21hbGkKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1NRPUFsYmFuaWFuCi1GT1JNX09QVElPTl9MQU5HVUFHRV9TUj1TZXJiaWFuCi1GT1JNX09QVElPTl9MQU5HVUFHRV9TUz1TaXN3YXRpCi1GT1JNX09QVElPTl9MQU5HVUFHRV9TVD1TZXNvdGhvCi1GT1JNX09QVElPTl9MQU5HVUFHRV9TVT1TdW5kYW5lc2UKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1NWPVN3ZWRpc2gKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1NXPVN3YWhpbGkKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1RBPVRhbWlsCi1GT1JNX09QVElPTl9MQU5HVUFHRV9URT1UZWd1bHUKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1RHPVRhamlrCi1GT1JNX09QVElPTl9MQU5HVUFHRV9USD1UaGFpCi1GT1JNX09QVElPTl9MQU5HVUFHRV9UST1UaWdyaW55YQotRk9STV9PUFRJT05fTEFOR1VBR0VfVEs9VHVya21lbgotRk9STV9PUFRJT05fTEFOR1VBR0VfVEw9VGFnYWxvZwotRk9STV9PUFRJT05fTEFOR1VBR0VfVE49U2V0c3dhbmEKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1RPPVRvbmdhCi1GT1JNX09QVElPTl9MQU5HVUFHRV9UUj1UdXJraXNoCi1GT1JNX09QVElPTl9MQU5HVUFHRV9UUz1Uc29uZ2EKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1RUPVRhdGFyCi1GT1JNX09QVElPTl9MQU5HVUFHRV9UVz1Ud2kKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1VLPVVrcmFpbmlhbgotRk9STV9PUFRJT05fTEFOR1VBR0VfVVI9VXJkdQotRk9STV9PUFRJT05fTEFOR1VBR0VfVVo9VXpiZWsKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1ZJPVZpZXRuYW1lc2UKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1ZPPVZvbGFwdWsKLUZPUk1fT1BUSU9OX0xBTkdVQUdFX1dPPVdvbG9mCi1GT1JNX09QVElPTl9MQU5HVUFHRV9YSD1YaG9zYQotRk9STV9PUFRJT05fTEFOR1VBR0VfWU89WW9ydWJhCi1GT1JNX09QVElPTl9MQU5HVUFHRV9aSD1DaGluZXNlCi1GT1JNX09QVElPTl9MQU5HVUFHRV9aVT1adWx1Ci1GT1JNX0xBQkVMX0VYQUNUX05BTUVfTUFUQ0g9RXhhY3QgbWF0Y2gKLUZPUk1fTEFCRUxfQ0FTRV9TRU5TSVRJVkVfTUFUQ0g9Q2FzZSBzZW5zaXRpdmUKLUZPUk1fTEFCRUxfU09VTkRFWD1Tb3VuZCBhbGlrZQotRk9STV9MQUJFTF9JREVOVElGSUVSUz1JZGVudGlmaWVycwotRk9STV9MQUJFTF9JREVOVElGSUVSX1RZUEU9VHlwZQotCi0jIERvIG5vdCB0cmFuc2xhdGUgdGhlIHR3byBpdGVtcyBiZWxvdy4KLUZPUk1fT1BUSU9OX0lERU5USUZJRVJfRFVOUz1ELVUtTi1TCi1GT1JNX09QVElPTl9JREVOVElGSUVSX1RIT01BU19SRUdJU1RSWT1UaG9tYXMgUmVnaXN0cnkKLQotRk9STV9MQUJFTF9LRVlfTkFNRT1LZXkgbmFtZQotRk9STV9MQUJFTF9LRVlfVkFMVUU9S2V5IHZhbHVlCi1GT1JNX0xBQkVMX0NBVEVHT1JJRVM9Q2F0ZWdvcmllcwotRk9STV9MQUJFTF9DQVRFR09SWV9UWVBFPVR5cGUKLUZPUk1fT1BUSU9OX0NBVEVHT1JZX05BSUNTPU5BSUNTCi1GT1JNX09QVElPTl9DQVRFR09SWV9VTlNQU0NfNzM9VU5TUFNDIDcuMwotRk9STV9PUFRJT05fQ0FURUdPUllfR0VPPUdFTwotRk9STV9MQUJFTF9CVVNJTkVTU19DQVRFR09SSUVTPUNvbXBhcmUgd2l0aDoKLUZPUk1fT1BUSU9OX0JVU0lORVNTRVNfT05MWT1CdXNpbmVzc2VzIG9ubHkKLUZPUk1fT1BUSU9OX1NFUlZJQ0VTX09OTFk9U2VydmljZXMgb25seQotRk9STV9PUFRJT05fQk9USD1CdXNpbmVzc2VzIGFuZCBTZXJ2aWNlcwotRk9STV9MQUJFTF9ESVNDT1ZFUllVUkxTPURpc2NvdmVyeSBVUkxzCi1GT1JNX0xBQkVMX0RJU0NPVkVSWVVSTD1EaXNjb3ZlcnkgVVJMCi1GT1JNX0xBQkVMX0ZJTkRRVUFMSUZJRVJTPUZpbmQgUXVhbGlmaWVycwotRk9STV9MQUJFTF9DT01CSU5FX0tFWVM9Q29tYmluZSBrZXlzOgotRk9STV9PUFRJT05fQU5EQUxMS0VZUz1BbmQKLUZPUk1fT1BUSU9OX09SQUxMS0VZUz1PcgotRk9STV9PUFRJT05fT1JMSUtFS0VZUz1PciBMaWtlCi1GT1JNX0xBQkVMX1NPUlRfQllfTkFNRT1Tb3J0IGJ5IG5hbWU6Ci1GT1JNX1JBRElPX1NPUlRfQVNDPUFzY2VuZGluZwotRk9STV9SQURJT19TT1JUX0RFU0M9RGVzY2VuZGluZwotRk9STV9MQUJFTF9TT1JUX0JZX0RBVEU9U29ydCBieSBkYXRlOgotRk9STV9MQUJFTF9NQVhfU0VBUkNIX1NFVD1NYXhpbXVtIHNpemUgb2Ygc2VhcmNoIHNldDoKLUZPUk1fTEFCRUxfTUFYX1JFU1VMVFM9TWF4aW11bSBudW1iZXIgb2YgcmVzdWx0czoKLUZPUk1fTEFCRUxfRklORF9TRVJWSUNFU19TSU1QTEVfREVTQz1FbnRlciB0aGUgcGFydGlhbCBvciBjb21wbGV0ZSBuYW1lIG9mIGEgc2VydmljZSB0byBzZWFyY2ggZm9yLiBUaGUgJyUnIHN5bWJvbCBjYW4gYmUgdXNlZCBhcyBhIHdpbGRjYXJkIHRoYXQgbWF0Y2hlcyBhbnkgY2hhcmFjdGVyLiBQcmVzcyA8c3Ryb25nPkdvPC9zdHJvbmc+IHRvIGV4ZWN1dGUgdGhlIHNlYXJjaC4KLUZPUk1fTEFCRUxfRklORF9TRVJWSUNFX1VVSURfREVTQz1FbnRlciB0aGUgVVVJRCBvZiB0aGUgc2VydmljZSB0byBzZWFyY2ggZm9yLiBQcmVzcyA8c3Ryb25nPkdvPC9zdHJvbmc+IHRvIGV4ZWN1dGUgdGhlIHNlYXJjaC4KLUZPUk1fTEFCRUxfRklORF9TRVJWSUNFX0lOVEVSRkFDRVNfU0lNUExFX0RFU0M9RW50ZXIgdGhlIHBhcnRpYWwgb3IgY29tcGxldGUgbmFtZSBvZiBhIHNlcnZpY2UgaW50ZXJmYWNlIHRvIHNlYXJjaCBmb3IuIFRoZSAnJScgc3ltYm9sIGNhbiBiZSB1c2VkIGFzIGEgd2lsZGNhcmQgdGhhdCBtYXRjaGVzIGFueSBjaGFyYWN0ZXIuIFByZXNzIDxzdHJvbmc+R288L3N0cm9uZz4gdG8gZXhlY3V0ZSB0aGUgc2VhcmNoLgotRk9STV9MQUJFTF9GSU5EX1NFUlZJQ0VfSU5URVJGQUNFX1VVSURfREVTQz1FbnRlciB0aGUgVVVJRCBvZiB0aGUgc2VydmljZSBpbnRlcmZhY2UgdG8gc2VhcmNoIGZvci4gUHJlc3MgPHN0cm9uZz5Hbzwvc3Ryb25nPiB0byBleGVjdXRlIHRoZSBzZWFyY2guCi1GT1JNX0xBQkVMX1NFUlZJQ0VfSU5URVJGQUNFUz1TZXJ2aWNlIEludGVyZmFjZXMKLUZPUk1fTEFCRUxfVVVJRF9LRVk9VVVJRCBLZXk6Ci1GT1JNX0xBQkVMX1VTRV9TRVJWSUNFPVVzZSBzZXJ2aWNlCi1GT1JNX0xBQkVMX1NFUlZJQ0U9U2VydmljZQotRk9STV9MQUJFTF9CVVNJTkVTUz1CdXNpbmVzcwotRk9STV9MQUJFTF9QVUJMSVNIX0FTU0VSVElPTlM9UHVibGlzaGVyIEFzc2VydGlvbnMKLUZPUk1fTEFCRUxfRElSRUNUSU9OPURpcmVjdGlvbgotRk9STV9MQUJFTF9GUk9NX0tFWT1Gcm9tIEtleQotRk9STV9MQUJFTF9UT19LRVk9VG8gS2V5Ci1GT1JNX0xBQkVMX1NUQVRVUz1TdGF0dXMKLUZPUk1fTEFCRUxfQVNTRVJUSU9OX1RZUEU9QXNzZXJ0aW9uIFR5cGUKLUZPUk1fT1BUSU9OX0FTU0VSVElPTl9UWVBFX1BBUkVOVF9DSElMRD1QYXJlbnQtQ2hpbGQKLUZPUk1fT1BUSU9OX0FTU0VSVElPTl9UWVBFX1BFRVJfVE9fUEVFUj1QZWVyLVBlZXIKLUZPUk1fT1BUSU9OX0FTU0VSVElPTl9UWVBFX0lERU5USVRZPUlkZW50aXR5Ci1GT1JNX0xBQkVMX0FTU0VSVElPTl9ESVJFVElPTl9ERVNDPURpcmVjdGlvbiA8c3Ryb25nPkZyb208L3N0cm9uZz4gd2lsbCBjcmVhdGUgYSBwdWJsaXNoZXIgYXNzZXJ0aW9uIGZyb20gdGhpcyBidXNpbmVzcyB0byB0aGUgYnVzaW5lc3NlcyBhYm92ZS4gIERpcmVjdGlvbiA8c3Ryb25nPlRvPC9zdHJvbmc+IHdpbGwgY3JlYXRlIGEgcHVibGlzaGVyIGFzc2VydGlvbiBmcm9tIHRoZSBhYm92ZSBidXNpbmVzc2VzIHRvIHRoaXMgYnVzaW5lc3MuCi1GT1JNX09QVElPTl9BU1NFUlRJT05fRElSRUNUSU9OX0ZST009LS0tPgotRk9STV9PUFRJT05fQVNTRVJUSU9OX0RJUkVDVElPTl9UTz08LS0tCi1GT1JNX0xBQkVMX1RISVNfQlVTSU5FU1M9VGhpcwotTVNHX0VSUk9SX0lOVkFMSURfUVVFUllfTkFNRT1JV0FCMDE0MEUgRW50ZXIgYSB2YWxpZCBuYW1lIGZvciB0aGUgcXVlcnkuCi1NU0dfRVJST1JfSU5WQUxJRF9OQU1FUz1JV0FCMDE0MUUgRW50ZXIgYSBzZXJpZXMgb2YgdmFsaWQgbmFtZXMuCi1NU0dfRVJST1JfSU5WQUxJRF9QVUJMSVNIX1VSTD1JV0FCMDE0MkUgRW50ZXIgYSB2YWxpZCBwdWJsaXNoIFVSTC4KLU1TR19FUlJPUl9JTlZBTElEX1VTRVJJRD1JV0FCMDE0M0UgRW50ZXIgYSB2YWxpZCB1c2VyIElELgotTVNHX0VSUk9SX0lOVkFMSURfTUFYX1NFQVJDSF9TRVQ9SVdBQjAxNDVFIEVudGVyIGEgdmFsaWQgc2l6ZSBmb3IgdGhlIG1heGltdW0gc2VhcmNoIHNldC4KLU1TR19FUlJPUl9JTlZBTElEX01BWF9SRVNVTFRTPUlXQUIwMTQ2RSBFbnRlciBhIHZhbGlkIHNpemUgZm9yIHRoZSBtYXhpbXVtIG51bWJlciBvZiByZXN1bHRzLgotTVNHX0lORk9fQlVTSU5FU1NFU19GT1VORD1JV0FCMDE0N0kgTnVtYmVyIG9mIGJ1c2luZXNzZXMgZm91bmQ6ICUxCi1NU0dfRVJST1JfTk9fQlVTSU5FU1NFU19GT1VORD1JV0FCMDE0OEUgTm8gYnVzaW5lc3NlcyBmb3VuZC4KLU1TR19JTkZPX1NFUlZJQ0VTX0ZPVU5EPUlXQUIwMTQ5SSBOdW1iZXIgb2Ygc2VydmljZXMgZm91bmQ6ICUxCi1NU0dfRVJST1JfTk9fU0VSVklDRVNfRk9VTkQ9SVdBQjAxNTBFIE5vIHNlcnZpY2VzIGZvdW5kLgotTVNHX0VSUk9SX1NJTkdMRV9JVEVNPUlXQUIwMTUxRSBTZWxlY3QganVzdCBvbmUgaXRlbS4KLU1TR19RVUVTVElPTl9JVEVNX1JFUExBQ0VNRU5UPVRoZSBzZWxlY3Rpb24gd2lsbCByZXBsYWNlIGFuIGl0ZW0gYWxyZWFkeSBpbiB0aGUgdGFyZ2V0LiBEbyB5b3Ugd2lzaCB0byBwcm9jZWVkPwotTVNHX0lORk9fU0VSVklDRV9JTlRFUkZBQ0VTX0ZPVU5EPUlXQUIwMTUySSBOdW1iZXIgb2Ygc2VydmljZSBpbnRlcmZhY2VzIGZvdW5kOiAlMQotTVNHX0VSUk9SX05PX1NFUlZJQ0VfSU5URVJGQUNFU19GT1VORD1JV0FCMDE1M0UgTm8gc2VydmljZSBpbnRlcmZhY2VzIGZvdW5kLgotTVNHX0VSUk9SX05PVEhJTkdfU0VMRUNURUQ9SVdBQjAxNTRFIFNlbGVjdCBhdCBsZWFzdCBvbmUgaXRlbS4KLU1TR19FUlJPUl9JTlZBTElEX1VVSURfS0VZPUlXQUIwMTU1RSBFbnRlciBhIHZhbGlkIFVVSUQga2V5LgotTVNHX0VSUk9SX1FVRVJZX05BTUVfQ09ORkxJQ1Q9SVdBQjAxNTZFIFRoZSBzdWJxdWVyeSdzIHF1ZXJ5IG5hbWUgY2Fubm90IGJlIHRoZSBzYW1lIGFzIHRoZSBvcmlnaW5hdG9yLgotTVNHX0VSUk9SX05PX0lURU1TX1RPX0dFVD1JV0FCMDE1N0UgTm8gaXRlbXMgb2YgdGhlIHNwZWNpZmllZCB0eXBlIGhhdmUgYmVlbiBwdWJsaXNoZWQgb3IgZGlzY292ZXJlZCB5ZXQuCi1NU0dfSU5GT19OT19CVVNJTkVTU0VTX09SX1NFUlZJQ0VfSU5URVJGQUNFU19GT1VORD1JV0FCMDE2MkkgTm8gQnVzaW5lc3NlcywgU2VydmljZXMgb3IgU2VydmljZSBJbnRlcmZhY2VzIGZvdW5kLgotCi0jIFJlc3VsdHMKLUFMVF9RVUVSWV9SRVNVTFRTPVF1ZXJ5IFJlc3VsdHMKLUZPUk1fTEFCRUxfU1VCUVVFUlk9VGhlIHJlc3VsdHMgbWF5IGJlIHVzZWQgYXMgaW5wdXRzIG9mIGFub3RoZXIgb3BlcmF0aW9uLiBDbGljayB0aGUgPHN0cm9uZz50YXJnZXQ8L3N0cm9uZz4gbGluayBhdCB0aGUgdG9wIHRvIHNlZSB0aGUgb3BlcmF0aW9uLiBTZWxlY3RlZCByZXN1bHRzIGNhbiBiZSB1c2VkIGluIHRoZSBvcGVyYXRpb24gYnkgY2xpY2tpbmcgdGhlIDxzdHJvbmc+VHJhbnNmZXI8L3N0cm9uZz4gYnV0dG9uLgotRk9STV9MQUJFTF9RVUVSWT1TZWxlY3QgYSByZXN1bHQgdG8gc2VlIG1vcmUgZGV0YWlscyBvciBzZWxlY3QgYSBzZXQgb2YgcmVzdWx0cyBhbmQgY2xpY2sgYSBidXR0b24gdG8gcGVyZm9ybSBhbiBvcGVyYXRpb24uCi1GT1JNX0xJTktfVEFSR0VUPXRhcmdldAotRk9STV9CVVRUT05fVFJBTlNGRVI9VHJhbnNmZXIKLUZPUk1fQlVUVE9OX1JFRlJFU0g9UmVmcmVzaAotRk9STV9CVVRUT05fQUREX1RPX0ZBVk9SSVRFUz1BZGQgdG8gZmF2b3JpdGVzCi1GT1JNX0JVVFRPTl9VTlBVQkxJU0g9VW5wdWJsaXNoCi1GT1JNX0JVVFRPTl9DTEVBUj1DbGVhcgotCi0jIFB1Ymxpc2ggYWN0aW9ucwotQUxUX1BVQkxJU0g9UHVibGlzaAotRk9STV9MQUJFTF9QVUJMSVNIPVB1Ymxpc2g6Ci1GT1JNX09QVElPTl9CVVNJTkVTUz1CdXNpbmVzcwotRk9STV9PUFRJT05fU0VSVklDRT1TZXJ2aWNlCi1GT1JNX09QVElPTl9TRVJWSUNFX0lOVEVSRkFDRT1TZXJ2aWNlIEludGVyZmFjZQotRk9STV9MQUJFTF9QVUJMSVNIX0JVU0lORVNTX1NJTVBMRV9ERVNDPUVudGVyIGEgbmFtZSBhbmQgYW4gb3B0aW9uYWwgZGVzY3JpcHRpb24gZm9yIHRoZSBidXNpbmVzcyB0byBiZSBwdWJsaXNoZWQuIEF1dGhlbnRpY2F0aW9uIG1heSBiZSByZXF1aXJlZC4KLUZPUk1fTEFCRUxfUFVCTElTSF9CVVNJTkVTU19BRFZBTkNFRF9ERVNDPVByb3ZpZGUgYSBuYW1lIGZvciB0aGUgYnVzaW5lc3MgdG8gYmUgcHVibGlzaGVkLiBPdGhlciBwYXJhbWV0ZXJzIG1heSBhbHNvIGJlIHNwZWNpZmllZC4gQXV0aGVudGljYXRpb24gbWF5IGJlIHJlcXVpcmVkLgotRk9STV9MQUJFTF9QVUJMSVNIX1NFUlZJQ0VfU0lNUExFX0RFU0M9R2V0IG9yIGZpbmQgYSBidXNpbmVzcyBhbmQgdGhlbiBwcm92aWRlIHRoZSBXU0RMIFVSTCwgbmFtZSBhbmQgYW4gb3B0aW9uYWwgZGVzY3JpcHRpb24gZm9yIHRoZSBzZXJ2aWNlIHRvIGJlIHB1Ymxpc2hlZC4gQXV0aGVudGljYXRpb24gbWF5IGJlIHJlcXVpcmVkLgotRk9STV9MQUJFTF9QVUJMSVNIX1NFUlZJQ0VfQURWQU5DRURfREVTQz1HZXQgb3IgZmluZCBhIGJ1c2luZXNzIGFuZCB0aGVuIHByb3ZpZGUgdGhlIFdTREwgVVJMIGFuZCBhIG5hbWUgZm9yIHRoZSBzZXJ2aWNlIHRvIGJlIHB1Ymxpc2hlZC4gT3RoZXIgcGFyYW1ldGVycyBtYXkgYWxzbyBiZSBzcGVjaWZpZWQuIEF1dGhlbnRpY2F0aW9uIG1heSBiZSByZXF1aXJlZC4KLUZPUk1fTEFCRUxfQlVTSU5FU1NfUFVCTElTSF9TRVJWSUNFX1NJTVBMRV9ERVNDPVByb3ZpZGUgdGhlIFdTREwgVVJMLCBuYW1lIGFuZCBhbiBvcHRpb25hbCBkZXNjcmlwdGlvbiBmb3IgdGhlIHNlcnZpY2UgdG8gYmUgcHVibGlzaGVkLiBBdXRoZW50aWNhdGlvbiBtYXkgYmUgcmVxdWlyZWQuCi1GT1JNX0xBQkVMX0JVU0lORVNTX1BVQkxJU0hfU0VSVklDRV9BRFZBTkNFRF9ERVNDPVByb3ZpZGUgdGhlIFdTREwgVVJMIGFuZCBhIG5hbWUgZm9yIHRoZSBzZXJ2aWNlIHRvIGJlIHB1Ymxpc2hlZC4gT3RoZXIgcGFyYW1ldGVycyBtYXkgYWxzbyBiZSBzcGVjaWZpZWQuIEF1dGhlbnRpY2F0aW9uIG1heSBiZSByZXF1aXJlZC4KLUZPUk1fTEFCRUxfUFVCTElTSF9TRVJWSUNFX0lOVEVSRkFDRV9TSU1QTEVfREVTQz1FbnRlciBhIFdTREwgVVJMLCBuYW1lIGFuZCBhbiBvcHRpb25hbCBkZXNjcmlwdGlvbiBmb3IgdGhlIHNlcnZpY2UgaW50ZXJmYWNlIHRvIGJlIHB1Ymxpc2hlZC4gQXV0aGVudGljYXRpb24gbWF5IGJlIHJlcXVpcmVkLgotRk9STV9MQUJFTF9QVUJMSVNIX1NFUlZJQ0VfSU5URVJGQUNFX0FEVkFOQ0VEX0RFU0M9UHJvdmlkZSB0aGUgV1NETCBVUkwgYW5kIG5hbWUgZm9yIHRoZSBzZXJ2aWNlIGludGVyZmFjZSB0byBiZSBwdWJsaXNoZWQuIE90aGVyIHBhcmFtZXRlcnMgbWF5IGFsc28gYmUgc3BlY2lmaWVkLiBBdXRoZW50aWNhdGlvbiBtYXkgYmUgcmVxdWlyZWQuCi1GT1JNX0xBQkVMX1BVQkxJU0hfRk9STT1QdWJsaWNhdGlvbiBmb3JtYXQKLUZPUk1fTEFCRUxfREVTQ1JJUFRJT049RGVzY3JpcHRpb24KLUZPUk1fTEFCRUxfREVTQ1JJUFRJT05TPURlc2NyaXB0aW9ucwotTVNHX0lORk9fQlVTSU5FU1NfUFVCTElTSEVEPUlXQUIwMTU4SSBCdXNpbmVzcyAlMSB3YXMgc3VjY2Vzc2Z1bGx5IHB1Ymxpc2hlZC4KLU1TR19JTkZPX1NFUlZJQ0VfUFVCTElTSEVEPUlXQUIwMTU5SSBTZXJ2aWNlICUxIHdhcyBzdWNjZXNzZnVsbHkgcHVibGlzaGVkLgotTVNHX0lORk9fU0VSVklDRV9JTlRFUkZBQ0VfUFVCTElTSEVEPUlXQUIwMTYwSSBTZXJ2aWNlIGludGVyZmFjZSAlMSB3YXMgc3VjY2Vzc2Z1bGx5IHB1Ymxpc2hlZC4KLU1TR19FUlJPUl9JTlZBTElEX05BTUU9SVdBQjAxNjFFIEVudGVyIGEgdmFsaWQgbmFtZS4KLU1TR19FUlJPUl9ST1dfQkxBTktfTEFOR1VBR0U9SVdBQjAyNTBFIFNlbGVjdCBhIG5vbi1ibGFuayBsYW5ndWFnZSBmb3IgdGhlICUxIGluIHJvdyAlMi4gT25seSB0aGUgZmlyc3Qgcm93IGNhbiBoYXZlIGEgYmxhbmsgbGFuZ3VhZ2UuCi1NU0dfRVJST1JfUk9XX0RVUExJQ0FURV9MQU5HVUFHRT1JV0FCMDI1MUUgQ2hhbmdlIHRoZSBsYW5ndWFnZSBmb3IgdGhlICUxIGluIHJvdyAlMi4gVGhlIGN1cnJlbnQgb25lIGlzIGFscmVhZHkgaW4gdXNlLgotTVNHX0VSUk9SX1JPV19JTlZBTElEX1RFWFQ9SVdBQjAyNTJFIEVudGVyIGEgdmFsaWQgJTEgaW4gcm93ICUyCi1NU0dfRVJST1JfSU5WQUxJRF9XU0RMX1VSTD1JV0FCMDI1M0UgRW50ZXIgYSB2YWxpZCBXU0RMIFVSTC4KLU1TR19FUlJPUl9OT19OQU1FUz1JV0FCMDI1NEUgQWRkIGF0IGxlYXN0IG9uZSBuYW1lLgotTVNHX0VSUk9SX0lOVkFMSURfU0VSVklDRT1JV0FCMDI1NUUgUHJvdmlkZSBhIHZhbGlkIHNlcnZpY2UuCi1NU0dfRVJST1JfSU5WQUxJRF9CVVNJTkVTUz1JV0FCMDI1NkUgUHJvdmlkZSBhIHZhbGlkIGJ1c2luZXNzLgotCi0jIEJ1c2luZXNzIFB1Ymxpc2ggU2VydmljZSBhY3Rpb24KLUFMVF9QVUJMSVNIX1NFUlZJQ0U9UHVibGlzaCBTZXJ2aWNlCi0KLSMgTG9naW4gYWN0aW9ucwotQUxUX0xPR0lOPUxvZ2luCi1BTFRfTE9HT1VUPUxvZ291dAotTVNHX0lORk9fTk9fTVVMVElQTEVfTE9HSU49TXVsdGlwbGUgbG9naW5zIHdpdGggc2FtZSBJRCBub3QgYWxsb3dlZAotTVNHX0lORk9fTE9HR0VEX0lOX05PREU9JTEgLSBsb2dnZWQgaW4gYXMgJTIKLQotIyBXU0RMIEJyb3dzZXIKLVRJVExFX1dTRExfQlJPV1NFUj1XU0RMIEJyb3dzZXIgLSAlMQotRk9STV9MQUJFTF9XU0RMX1NPVVJDRT1TZWxlY3QgYSBXU0RMIHNvdXJjZToKLUZPUk1fTEFCRUxfV1NETF9TT1VSQ0VfV0VCUFJPSkVDVFM9V2ViIFByb2plY3RzCi1GT1JNX0xBQkVMX1dTRExfU09VUkNFX0ZBVk9SSVRFUz1GYXZvcml0ZXMKLUZPUk1fTEFCRUxfV0VCX1BST0pFQ1Q9V2ViIFByb2plY3QKLUZPUk1fTEFCRUxfV1NETF9VUkw9V1NETCBVUkwKLUFMVF9XU0RMX0JST1dTRVI9V1NETCBCcm93c2VyCi0KLSMgRGV0YWlscwotRk9STV9MSU5LX0VESVQ9RWRpdAotRk9STV9MSU5LX0NBTkNFTD1DYW5jZWwKLUZPUk1fTEFCRUxfQlVTSU5FU1NfS0VZPUJ1c2luZXNzIEtleQotRk9STV9MQUJFTF9TRVJWSUNFX0tFWT1TZXJ2aWNlIEtleQotRk9STV9MQUJFTF9TRVJWSUNFX0lOVEVSRkFDRV9LRVk9VE1vZGVsIEtleQotRk9STV9MQUJFTF9VU0VSX0RFRklORURfQ0FURUdPUklFUz1Vc2VyIERlZmluZWQgQ2F0ZWdvcmllcwotRk9STV9MQUJFTF9DSEVDS0VEPUNoZWNrZWQKLUZPUk1fTEFCRUxfRklMRT1GaWxlCi1NU0dfUVVFU1RJT05fUFVCTElTSF9JVEVNPVRoZSBpdGVtIGNvdWxkIG5vdCBiZSBmb3VuZCBpbiB0aGUgcmVnaXN0cnkuIERvIHlvdSB3aXNoIHRvIHB1Ymxpc2ggaXQ/Ci1NU0dfUVVFU1RJT05fU0VSVklDRV9QVUJMSVNIX0JVU0lORVNTPVRoZSBzZXJ2aWNlIGFuZCBpdHMgYnVzaW5lc3MgY291bGQgbm90IGJlIGZvdW5kIGluIHRoZSByZWdpc3RyeS4gUHJvY2VlZCB0byBwdWJsaXNoPwotTVNHX0lORk9fQlVTSU5FU1NfVVBEQVRFRD1JV0FCMDI1N0kgQnVzaW5lc3MgJTEgd2FzIHN1Y2Nlc3NmdWxseSB1cGRhdGVkLgotTVNHX0lORk9fU0VSVklDRV9VUERBVEVEPUlXQUIwMjU4SSBTZXJ2aWNlICUxIHdhcyBzdWNjZXNzZnVsbHkgdXBkYXRlZC4KLU1TR19JTkZPX1NFUlZJQ0VfSU5URVJGQUNFX1VQREFURUQ9SVdBQjAyNTlJIFNlcnZpY2UgSW50ZXJmYWNlICUxIHdhcyBzdWNjZXNzZnVsbHkgdXBkYXRlZC4KLU1TR19JTkZPX1JFR0lTVFJZX1VQREFURUQ9SVdBQjAzMjNJIFJlZ2lzdHJ5ICUxIHdhcyBzdWNjZXNzZnVsbHkgdXBkYXRlZC4KLQotIyBVbnB1Ymxpc2hBY3Rpb24KLUFMVF9VTlBVQkxJU0hfQlVTSU5FU1M9VW5wdWJsaXNoIEJ1c2luZXNzCi1BTFRfVU5QVUJMSVNIX1NFUlZJQ0U9VW5wdWJsaXNoIFNlcnZpY2UKLUFMVF9VTlBVQkxJU0hfU0VSVklDRV9JTlRFUkZBQ0U9VW5wdWJsaXNoIFNlcnZpY2UgSW50ZXJmYWNlCi1GT1JNX0xBQkVMX1VOUFVCTElTSF9ERVNDPVByZXNzIDxzdHJvbmc+R288L3N0cm9uZz4gdG8gdW5wdWJsaXNoIHRoaXMgb2JqZWN0LiBBdXRoZW50aWNhdGlvbiBtYXkgYmUgcmVxdWlyZWQuCi1NU0dfSU5GT19CVVNJTkVTU19VTlBVQkxJU0hFRD1JV0FCMDI2MEkgQnVzaW5lc3MgJTEgd2FzIHN1Y2Nlc3NmdWxseSB1bnB1Ymxpc2hlZC4KLU1TR19JTkZPX1NFUlZJQ0VfVU5QVUJMSVNIRUQ9SVdBQjAyNjFJIFNlcnZpY2UgJTEgd2FzIHN1Y2Nlc3NmdWxseSB1bnB1Ymxpc2hlZC4KLU1TR19JTkZPX1NFUlZJQ0VfSU5URVJGQUNFX1VOUFVCTElTSEVEPUlXQUIwMjYySSBTZXJ2aWNlIEludGVyZmFjZSAlMSB3YXMgc3VjY2Vzc2Z1bGx5IHVucHVibGlzaGVkLgotCi0jIEFkZCB0byBXU0RMIFBlcnNwZWN0aXZlCi1BTFRfQUREX1RPX1dTRExfUEVSU1BFQ1RJVkU9QWRkIFRvIFdTREwgUGFnZQotTVNHX0lORk9fV1NETF9BRERFRF9UT19XU0RMX1BFUlNQRUNUSVZFPUlXQUIwMzc2SSAlMSB3YXMgc3VjY2Vzc2Z1bGx5IGFkZGVkIHRvIFdTREwgcGFnZS4KLU1TR19FUlJPUl9XU0RMX05PVF9BRERFRF9UT19XU0RMX1BFUlNQRUNUSVZFPUlXQUIwMzc3RSAlMSBjb3VsZCBub3QgYmUgYWRkZWQgdG8gV1NETCBwYWdlLgotCi0jIEFkZCB0byBGYXZvcml0ZXMKLUFMVF9BRERfVE9fRkFWT1JJVEVTPUFkZCBUbyBGYXZvcml0ZXMKLU1TR19JTkZPX0ZBVk9SSVRFX0FEREVEPUlXQUIwMjYzSSAlMSB3YXMgc3VjY2Vzc2Z1bGx5IGFkZGVkIHRvIGZhdm9yaXRlcy4KLU1TR19FUlJPUl9GQVZPUklURV9OT1RfQURERUQ9SVdBQjAyNjRFICUxIGNvdWxkIG5vdCBiZSBhZGRlZCB0byBmYXZvcml0ZXMuCi1NU0dfRVJST1JfRkFWT1JJVEVfQUxSRUFEWV9FWElTVFM9SVdBQjAzMjRFICUxIGFscmVhZHkgZXhpc3RzIGluIGZhdm9ydGllcy4KLU1TR19RVUVTVElPTl9PVkVSV1JJVEVfRkFWT1JJVEVTPUZhdm9yaXRlIGFscmVhZHkgZXhpc3RzLiAgRG8geW91IHdpc2ggdG8gb3ZlcndyaXRlPwotCi0jIFJlZnJlc2gKLU1TR19JTkZPX05PREVfUkVGUkVTSEVEPUlXQUIwMjY1SSAlMSByZWZyZXNoZWQuCi1NU0dfUVVFU1RJT05fUkVNT1ZFX05PREU9JTEgY291bGQgbm90IGJlIGZvdW5kIGluIHRoZSByZWdpc3RyeS4gRG8geW91IHdpc2ggdG8gY2xlYXIgaXQ/Ci0KLSMgTWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzCi1BTFRfTUFOQUdFX1JFRkVSRU5DRURfU0VSVklDRVM9TWFuYWdlIFJlZmVyZW5jZWQgU2VydmljZXMKLUZPUk1fTEFCRUxfTUFOQUdFX1JFRkVSRU5DRURfU0VSVklDRVNfREVTQz1BZGQgZGlzY292ZXJlZCBvciBwdWJsaXNoZWQgc2VydmljZXMgdG8gdGhlIGxpc3Qgb2YgcmVmZXJlbmNlZCBzZXJ2aWNlcyBieSBjbGlja2luZyB0aGUgPHN0cm9uZz5BZGQgU2VydmljZXM8L3N0cm9uZz4gYnV0dG9uLiBSZW1vdmUgc2VsZWN0ZWQgcmVmZXJlbmNlcyBieSBjbGlja2luZyB0aGUgPHN0cm9uZz5SZW1vdmUgUmVmZXJlbmNlczwvc3Ryb25nPiBidXR0b24uIEF1dGhlbnRpY2F0aW9uIG1heSBiZSByZXF1aXJlZCBmb3IgY2hhbmdlcy4KLUZPUk1fTEFCRUxfUkVGRVJFTkNFRF9TRVJWSUNFUz1SZWZlcmVuY2VkIFNlcnZpY2VzCi1GT1JNX0JVVFRPTl9BRERfU0VSVklDRVM9QWRkIFNlcnZpY2VzCi1GT1JNX0JVVFRPTl9SRU1PVkVfUkVGRVJFTkNFUz1SZW1vdmUgUmVmZXJlbmNlcwotTVNHX0VSUk9SX05PX1JFRkVSRU5DRV9TRUxFQ1RFRD1JV0FCMDI2NkUgU2VsZWN0IGF0IGxlYXN0IG9uZSByZWZlcmVuY2VkIHNlcnZpY2UgYmVmb3JlIHByb2NlZWRpbmcuCi1NU0dfRVJST1JfTk9fU0VSVklDRVM9SVdBQjAyNjdFIEdldCBvciBmaW5kIGF0IGxlYXN0IG9uZSBzZXJ2aWNlIGJlZm9yZSBwcm9jZWVkaW5nLgotTVNHX0VSUk9SX1NFUlZJQ0VfTk9UX1JFRkVSRU5DRUQ9SVdBQjAyNjhFIFNlcnZpY2UgJTEgY291bGQgbm90IGJlIHJlZmVyZW5jZWQuCi1NU0dfRVJST1JfUkVGRVJFTkNFX05PVF9SRU1PVkVEPUlXQUIwMjY5RSBTZXJ2aWNlIHJlZmVyZW5jZSAlMSBjb3VsZCBub3QgYmUgcmVtb3ZlZC4KLU1TR19JTkZPX1NFUlZJQ0VfUkVGRVJFTkNFRD1JV0FCMDI3MEkgU2VydmljZSAlMSB3YXMgc3VjY2Vzc2Z1bGx5IHJlZmVyZW5jZWQuCi1NU0dfSU5GT19TRVJWSUNFX1JFRkVSRU5DRV9SRU1PVkVEPUlXQUIwMjcxSSBTZXJ2aWNlIHJlZmVyZW5jZSAlMSB3YXMgc3VjY2Vzc2Z1bGx5IHJlbW92ZWQuCi0KLSMgTWFuYWdlUHVibGlzaGVyQXNzZXJ0aW9ucwotQUxUX01BTkFHRV9QVUJMSVNIRVJfQVNTRVJUSU9OUz1NYW5hZ2UgUHVibGlzaGVyIEFzc2VydGlvbnMKLUZPUk1fTEFCRUxfTUFOQUdFX1BVQkxJU0hFUl9BU1NFUlRJT05TX0RFU0M9QWRkIGRpc2NvdmVyZWQgb3IgcHVibGlzaGVkIGJ1c2luZXNzZXMgdG8gdGhlIGxpc3Qgb2YgcHVibGlzaGVyIGFzc2VydGlvbnMgYnkgY2xpY2tpbmcgPHN0cm9uZz5BZGQgQXNzZXJ0aW9uczwvc3Ryb25nPi4gUmVtb3ZlIHNlbGVjdGVkIGFzc2VydGlvbnMgYnkgY2xpY2tpbmcgPHN0cm9uZz5SZW1vdmUgQXNzZXJ0aW9uczwvc3Ryb25nPi4gQ29tcGxldGUgc2VsZWN0ZWQgYXNzZXJ0aW9ucyBieSBjbGlja2luZyA8c3Ryb25nPkNvbXBsZXRlIEFzc2VydGlvbnM8L3N0cm9uZz4uIENsaWNrIDxzdHJvbmc+UmVmcmVzaCBBc3NlcnRpb25zPC9zdHJvbmc+IHRvIHJlZnJlc2ggdGhlIGxpc3Qgb2YgYXNzZXJ0aW9ucy4KLUZPUk1fTEFCRUxfSU5DT01QTEVURV9BU1NFUlRJT05TX1ZJU0lCSUxJVFlfREVTQz1QbGVhc2Ugbm90ZSB0aGF0IGluY29tcGxldGUgcHVibGlzaGVyIGFzc2VydGlvbnMgYXJlIHZpc2libGUgb25seSB0byB0aGUgb3duZXIgb2YgdGhlIGJ1c2luZXNzLgotRk9STV9MQUJFTF9CVVNJTkVTU0VTPUJ1c2luZXNzZXMKLUZPUk1fQlVUVE9OX1NIT1dfQUxMX1BVQkxJU0hFUl9BU1NFUlRJT05TPVJlZnJlc2ggQXNzZXJ0aW9ucwotRk9STV9CVVRUT05fQ09NUExFVEVfUFVCTElTSEVSX0FTU0VSVElPTlM9Q29tcGxldGUgQXNzZXJ0aW9ucwotRk9STV9CVVRUT05fQUREX1BVQkxJU0hFUl9BU1NFUlRJT05TPUFkZCBBc3NlcnRpb25zCi1GT1JNX0JVVFRPTl9SRU1PVkVfUFVCTElTSEVSX0FTU0VSVElPTlM9UmVtb3ZlIEFzc2VydGlvbnMKLU1TR19JTkZPX1BVQkxJU0hFUl9BU1NFUlRJT05TX1JFRlJFU0hFRD1JV0FCMDMyNUkgUHVibGlzaGVyIEFzc2VydGlvbnMgYXJlIHJlZnJlc2hlZC4KLU1TR19FUlJPUl9OT19JTkNPTVBMRVRFX0FTU0VSVElPTl9TRUxFQ1RFRD1JV0FCMDMyNkUgU2VsZWN0IGF0IGxlYXN0IG9uZSBpbmNvbXBsZXRlIHB1Ymxpc2hlciBhc3NlcnRpb24uCi1NU0dfRVJST1JfTk9UX09XTkVEX0JVU0lORVNTPUlXQUIwMzI3RSBUaGlzIG9wZXJhdGlvbiBjYW5ub3QgYmUgcGVyZm9ybWVkIG9uIGEgYnVzaW5lc3Mgb3duZWQgYnkgYW5vdGhlciBwYXJ0eS4KLQotIyBHZXRCdXNpbmVzc2VzCi1BTFRfR0VUX0JVU0lORVNTPUdldCBCdXNpbmVzcwotQUxUX0dFVF9CVVNJTkVTU0VTPUdldCBCdXNpbmVzc2VzCi1OT0RFX05BTUVfU0VSVklDRV9CVVNJTkVTUz1CdXNpbmVzcyBmb3Igc2VydmljZSAlMQotTk9ERV9OQU1FX1NJX0JVU0lORVNTRVM9QnVzaW5lc3NlcyBmb3Igc2VydmljZSBpbnRlcmZhY2UgJTEKLU1TR19RVUVTVElPTl9SRU1PVkVfU0VSVklDRV9OT0RFPVRoZSBzZXJ2aWNlIGNvdWxkIG5vdCBiZSBmb3VuZCBpbiB0aGUgcmVnaXN0cnkuIERvIHlvdSB3aXNoIHRvIHJlbW92ZSB0aGlzIG5vZGU/Ci0KLSMgR2V0U2VydmljZUludGVyZmFjZXMKLUFMVF9HRVRfU0VSVklDRV9JTlRFUkZBQ0VTPUdldCBTZXJ2aWNlIEludGVyZmFjZXMKLU5PREVfTkFNRV9TRVJWSUNFX1NFUlZJQ0VfSU5URVJGQUNFUz1TZXJ2aWNlIGludGVyZmFjZXMgZm9yIHNlcnZpY2UgJTEKLU1TR19RVUVTVElPTl9HRVRfU0lfUkVNT1ZFX1NFUlZJQ0VfTk9ERT1UaGUgc2VydmljZSBjb3VsZCBub3QgYmUgZm91bmQgaW4gdGhlIHJlZ2lzdHJ5LiBEbyB5b3Ugd2lzaCB0byByZW1vdmUgdGhpcyBub2RlPwotCi0jIEdldFNlcnZpY2VzCi1BTFRfR0VUX1NFUlZJQ0VTPUdldCBTZXJ2aWNlcwotTk9ERV9OQU1FX1NJX1NFUlZJQ0VTPVNlcnZpY2VzIGZvciBzZXJ2aWNlIGludGVyZmFjZSAlMQotTk9ERV9OQU1FX0JVU0lORVNTX1NFUlZJQ0VTPVNlcnZpY2VzIGZvciBidXNpbmVzcyAlMQotTVNHX1FVRVNUSU9OX1JFTU9WRV9TSV9OT0RFPVRoZSBzZXJ2aWNlIGludGVyZmFjZSBjb3VsZCBub3QgYmUgZm91bmQgaW4gdGhlIHJlZ2lzdHJ5LiBEbyB5b3Ugd2lzaCB0byByZW1vdmUgdGhpcyBub2RlPwotTVNHX1FVRVNUSU9OX1JFTU9WRV9CVVNJTkVTU19OT0RFPVRoZSBidXNpbmVzcyBjb3VsZCBub3QgYmUgZm91bmQgaW4gdGhlIHJlZ2lzdHJ5LiBEbyB5b3Ugd2lzaCB0byByZW1vdmUgdGhpcyBub2RlPwotCi0jIFJlZnJlc2hVRERJTm9kZXNBY3Rpb24KLU1TR19FUlJPUl9OT0RFX0RBVEFfVkFMSURBVElPTl9GQUlMRUQ9SVdBQjAyNzJFICUxIGNvdWxkIG5vdCBiZSBmb3VuZCBpbiB0aGUgcmVnaXN0cnkuCi0KLSMgU3VtbWFyaWVzCi1BTFRfU1VNTUFSWV9RVUVSSUVTPVN1bW1hcnkgb2YgUXVlcmllcwotQUxUX1NVTU1BUllfQlVTSU5FU1NFUz1TdW1tYXJ5IG9mIEJ1c2luZXNzZXMKLUFMVF9TVU1NQVJZX1NFUlZJQ0VTPVN1bW1hcnkgb2YgU2VydmljZXMKLUFMVF9TVU1NQVJZX1NFUlZJQ0VfSU5URVJGQUNFUz1TdW1tYXJ5IG9mIFNlcnZpY2UgSW50ZXJmYWNlcwotRk9STV9MQUJFTF9RVUVSSUVTPVF1ZXJpZXMKLQotIyBTZWxlY3RTdWJRdWVyeUl0ZW1BY3Rpb24KLU1TR19RVUVTVElPTl9JVEVNX1ZBTElEQVRJT05fRkFJTEVEPSUxIGNvdWxkIG5vdCBiZSBmb3VuZCBpbiB0aGUgcmVnaXN0cnkuIERvIHlvdSB3aXNoIHRvIHJlbW92ZSBpdD8KLQotIyBGcmFtZSB0aXRsZXMKLUZSQU1FX1RJVExFX05BVklHQVRPUl9DT05UQUlORVI9TmF2aWdhdG9yIENvbnRhaW5lcgotRlJBTUVfVElUTEVfTkFWSUdBVE9SX1RPT0xCQVI9TmF2aWdhdG9yIFRvb2xiYXIKLUZSQU1FX1RJVExFX05BVklHQVRPUl9DT05URU5UPU5hdmlnYXRvciBDb250ZW50Ci1GUkFNRV9USVRMRV9BQ1RJT05TX0NPTlRBSU5FUj1BY3Rpb25zIENvbnRhaW5lcgotRlJBTUVfVElUTEVfUFJPUEVSVElFU19DT05UQUlORVI9UHJvcGVydGllcyBDb250YWluZXIKLUZSQU1FX1RJVExFX1BST1BFUlRJRVNfVE9PTEJBUj1Qcm9wZXJ0aWVzIFRvb2xiYXIKLUZSQU1FX1RJVExFX1BST1BFUlRJRVNfQ09OVEVOVD1Qcm9wZXJ0aWVzIENvbnRlbnQKLUZSQU1FX1RJVExFX1NUQVRVU19DT05UQUlORVI9U3RhdHVzIENvbnRhaW5lcgotRlJBTUVfVElUTEVfU1RBVFVTX1RPT0xCQVI9U3RhdHVzIFRvb2xiYXIKLUZSQU1FX1RJVExFX1NUQVRVU19DT05URU5UPVN0YXR1cyBDb250ZW50Ci1GUkFNRV9USVRMRV9VRERJX1BFUlNQRUNUSVZFX0NPTlRFTlQ9VURESSBQYWdlIENvbnRlbnQKLUZSQU1FX1RJVExFX0NBVEVHT1JJRVNfV09SS0FSRUE9Q2F0ZWdvcmllcyBXb3JrIEFyZWEKLUZSQU1FX1RJVExFX0NBVEVHT1JJRVNfVE9PTEJBUj1DYXRlZ29yaWVzIFRvb2xiYXIKLUZSQU1FX1RJVExFX0NBVEVHT1JJRVNfQ09OVEVOVD1DYXRlZ29yaWVzIENvbnRlbnQKLUZSQU1FX1RJVExFX1dTRExfVE9PTEJBUj1XU0RMIEJyb3dzZXIgVG9vbGJhcgotRlJBTUVfVElUTEVfV1NETF9DT05URU5UPVdTREwgQnJvd3NlciBDb250ZW50Ci0KLSMgRm9ybSB0aXRsZXMKLUZPUk1fVElUTEVfQlVTSU5FU1NfREVUQUlMUz1CdXNpbmVzcyBEZXRhaWxzIEZvcm0KLUZPUk1fVElUTEVfQlVTSU5FU1NfUFVCTElTSF9TRVJWSUNFPUJ1c2luZXNzIFB1Ymxpc2ggU2VydmljZSBGb3JtCi1GT1JNX1RJVExFX0dFVF9GT1JNPVNlbGVjdCBmcm9tIERpc2NvdmVyZWQgYW5kIFB1Ymxpc2hlZCBPYmplY3RzIEZvcm0KLUZPUk1fVElUTEVfSVRFTVNfU1VNTUFSWT1TdW1tYXJ5IG9mIEl0ZW1zIEZvcm0KLUZPUk1fVElUTEVfTUFOQUdFX1BVQkxJU0hFUl9BU1NFUlRJT05TPU1hbmFnZSBQdWJsaXNoZXIgQXNzZXJ0aW9ucyBGb3JtCi1GT1JNX1RJVExFX01BTkFHRV9SRUZFUkVOQ0VEX1NFUlZJQ0VTPU1hbmFnZSBSZWZlcmVuY2VkIFNlcnZpY2VzIEZvcm0KLUZPUk1fVElUTEVfT1BFTl9SRUdJU1RSWT1PcGVuIFJlZ2lzdHJ5IEZvcm0KLUZPUk1fVElUTEVfUkVHSVNUUllfREVUQUlMUz1SZWdpc3RyeSBEZXRhaWxzIEZvcm0KLUZPUk1fVElUTEVfUkVHSVNUUllfUFVCTElTSD1SZWdpc3RyeSBQdWJsaXNoIEZvcm0KLUZPUk1fVElUTEVfUkVHSVNUUllfRklORD1SZWdpc3RyeSBGaW5kIEZvcm0KLUZPUk1fVElUTEVfUkVTVUxUUz1SZXN1bHRzIEZvcm0KLUZPUk1fVElUTEVfU0VSVklDRV9ERVRBSUxTPVNlcnZpY2UgRGV0YWlscyBGb3JtCi1GT1JNX1RJVExFX1NFUlZJQ0VfSU5URVJGQUNFX0RFVEFJTFM9U2VydmljZSBJbnRlcmZhY2UgRGV0YWlscyBGb3JtCi1GT1JNX1RJVExFX1VOUFVCTElTSD1VbnB1Ymxpc2ggRm9ybQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci1wcm9wZXJ0aWVzL3dzZGwucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXItcHJvcGVydGllcy93c2RsLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjOWYyMjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci1wcm9wZXJ0aWVzL3dzZGwucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE3MiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSMgLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgMjAwNzA0MTMgICAxNzY0OTMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTRTogTWFrZSBtZXNzYWdlL3RyYW5zcG9ydCBzdGFjayBwbHVnZ2FibGUKLSMgMjAwNzA1MDcgICAxODU2MDAgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTRSBzdGF0dXMgcGFuZSdzICJoZWFkZXIiIHR3aXN0aWUgc2hvdWxkIG5vdCBhcHBlYXIgZm9yIHJlc3BvbnNlcyB3aXRob3V0IGhlYWRlcnMKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotdGl0bGU9V1NETAotCi0jIE5vZGVzCi1OT0RFX05BTUVfV1NETF9NQUlOPVdTREwgTWFpbgotCi0jIEZyYW1lIHRpdGxlcwotRlJBTUVfVElUTEVfTkFWSUdBVE9SX0NPTlRBSU5FUj1OYXZpZ2F0b3IgQ29udGFpbmVyCi1GUkFNRV9USVRMRV9OQVZJR0FUT1JfVE9PTEJBUj1OYXZpZ2F0b3IgVG9vbGJhcgotRlJBTUVfVElUTEVfTkFWSUdBVE9SX0NPTlRFTlQ9TmF2aWdhdG9yIENvbnRlbnQKLUZSQU1FX1RJVExFX0FDVElPTlNfQ09OVEFJTkVSPUFjdGlvbnMgQ29udGFpbmVyCi1GUkFNRV9USVRMRV9QUk9QRVJUSUVTX0NPTlRBSU5FUj1Qcm9wZXJ0aWVzIENvbnRhaW5lcgotRlJBTUVfVElUTEVfUFJPUEVSVElFU19UT09MQkFSPVByb3BlcnRpZXMgVG9vbGJhcgotRlJBTUVfVElUTEVfUFJPUEVSVElFU19DT05URU5UPVByb3BlcnRpZXMgQ29udGVudAotRlJBTUVfVElUTEVfU1RBVFVTX0NPTlRBSU5FUj1TdGF0dXMgQ29udGFpbmVyCi1GUkFNRV9USVRMRV9TVEFUVVNfVE9PTEJBUj1TdGF0dXMgVG9vbGJhcgotRlJBTUVfVElUTEVfU1RBVFVTX0NPTlRFTlQ9U3RhdHVzIENvbnRlbnQKLUZSQU1FX1RJVExFX1dTRExfUEVSU1BFQ1RJVkVfQ09OVEVOVD1XU0RMIFBhZ2UgQ29udGVudAotRlJBTUVfVElUTEVfWFNEX0lORk9STUFUSU9OX1RPT0xCQVI9WFNEIEluZm9ybWF0aW9uIERpYWxvZyBUb29sYmFyCi1GUkFNRV9USVRMRV9YU0RfSU5GT1JNQVRJT05fQ09OVEVOVD1YU0QgSW5mb3JtYXRpb24gRGlhbG9nIENvbnRlbnQKLQotIyBPcGVuV1NETEFjdGlvbgotQUxUX09QRU5fV1NETD1PcGVuIFdTREwKLU1TR19FUlJPUl9JTlZBTElEX1dTRExfVVJMPUlXQUIwMzc4RSBFbnRlciBhIHZhbGlkIFdTREwgVVJMLgotTVNHX0VSUk9SX09QRU5fV1NETD1JV0FCMDM3OUUgVW5hYmxlIHRvIG9wZW4gJTEuCi1NU0dfRVJST1JfWFNEX1ZBTElEQVRJT049SVdBQjAzODBFIEVycm9ycyB3ZXJlIGVuY291bnRlcmVkIHdoaWxlIHZhbGlkYXRpbmcgWE1MIHNjaGVtYXMuCi1NU0dfSU5GT19PUEVOX1dTRExfU1VDQ0VTU0ZVTD1JV0FCMDM4MUkgJTEgd2FzIHN1Y2Nlc3NmdWxseSBvcGVuZWQuCi0KLSMgV1NETCBFbGVtZW50IGRldGFpbHMKLUFMVF9XU0RMX0RFVEFJTFM9V1NETCBEZXRhaWxzCi1GT1JNX0xBQkVMX1dTRExfREVUQUlMU19ERVNDPVNob3duIGJlbG93IGFyZSB0aGUgZGV0YWlscyBmb3IgdGhpcyBXU0RMIGRvY3VtZW50LiBDbGljayBvbiBhIHNlcnZpY2Ugb3IgYmluZGluZyB0byBzZWUgaXRzIGRldGFpbHMuCi0KLSMgV1NETCBTZXJ2aWNlIEVsZW1lbnQgZGV0YWlscwotQUxUX1dTRExfU0VSVklDRV9ERVRBSUxTPVdTREwgU2VydmljZSBEZXRhaWxzCi1GT1JNX0xBQkVMX1NFUlZJQ0VfREVUQUlMU19ERVNDPVNob3duIGJlbG93IGFyZSB0aGUgZGV0YWlscyBmb3IgdGhpcyAmbHQ7c2VydmljZSZndDsgZWxlbWVudC4gQ2xpY2sgb24gYSBiaW5kaW5nIHRvIHNlZSBpdHMgb3BlcmF0aW9ucy4KLQotQUxUX05JTD1uaWw/Ci0KLSMgV1NETCBCaW5kaW5nIEVsZW1lbnQgZGV0YWlscwotQUxUX1dTRExfQklORElOR19ERVRBSUxTPVdTREwgQmluZGluZyBEZXRhaWxzCi1GT1JNX0xBQkVMX0JJTkRJTkdfREVUQUlMU19ERVNDPVNob3duIGJlbG93IGFyZSB0aGUgZGV0YWlscyBmb3IgdGhpcyA8c3Ryb25nPiUxPC9zdHJvbmc+ICAmbHQ7YmluZGluZyZndDsgZWxlbWVudC4gQ2xpY2sgb24gYW4gb3BlcmF0aW9uIHRvIGZpbGwgaW4gaXRzIHBhcmFtZXRlcnMgYW5kIGludm9rZSBpdCBvciBzcGVjaWZ5IGFkZGl0aW9uYWwgZW5kcG9pbnRzLgotCi0jIEludm9rZVdTRExPcGVyYXRpb25BY3Rpb24KLUFMVF9JTlZPS0VfV1NETF9PUEVSQVRJT049SW52b2tlIGEgV1NETCBPcGVyYXRpb24KLU1TR19FUlJPUl9VTkFCTEVfVE9fQ09OTkVDVD1JV0FCMDM4MkUgVW5hYmxlIHRvIGNvbm5lY3QgdG8gJTEKLU1TR19FUlJPUl9WQUxJREFUSU5HX1BBUkFNRVRFUj1JV0FCMDM4M0UgRXJyb3IgdmFsaWRhdGluZyAlMQotCi0jIFdTRExBZGRUb0Zhdm9yaXRlc0FjdGlvbgotQUxUX0FERF9XU0RMX1RPX0ZBVk9SSVRFUz1BZGQgV1NETCBUbyBGYXZvcml0ZXMKLU1TR19FUlJPUl9GQVZPUklURVNfQUxSRUFEWV9FWElTVFM9SVdBQjAzODRFICUxIGFscmVhZHkgZXhpc3RzIGluIGZhdm9yaXRlcy4KLU1TR19FUlJPUl9BRERfVE9fRkFWT1JJVEVTPUlXQUIwMzg1RSBVbmFibGUgdG8gYWRkICUxIHRvIGZhdm9yaXRlcy4KLU1TR19JTkZPX0FERF9UT19GQVZPUklURVNfU1VDQ0VTU0ZVTD1JV0FCMDM4NkkgJTEgaXMgYWRkZWQgdG8gZmF2b3JpdGVzLgotTVNHX1FVRVNUSU9OX09WRVJXUklURV9GQVZPUklURVM9RmF2b3JpdGUgYWxyZWFkeSBleGlzdHMuICBEbyB5b3Ugd2lzaCB0byBvdmVyd3JpdGU/Ci0KLSMgUmVmcmVzaFdTRExBY3Rpb24KLU1TR19JTkZPX1JFRlJFU0hfV1NETF9TVUNDRVNTRlVMPUlXQUIwMzg3SSAlMSBpcyByZWZyZXNoZWQuCi1NU0dfUVVFU1RJT05fUkVNT1ZFX1dTRExfTk9ERT0lMSBpcyBubyBsb25nZXIgcmVzb2x2YWJsZS4gIERvIHlvdSB3aXNoIHRvIGNsZWFyIGl0PwotCi0jIFVwZGF0ZVdTRExCaW5kaW5nQWN0aW9uCi1NU0dfSU5GT19VUERBVEVfV1NETF9CSU5ESU5HX1NVQ0NFU1NGVUw9SVdBQjAzODhJIEVuZHBvaW50cyB3ZXJlIHN1Y2Nlc3NmdWxseSB1cGRhdGVkLgotCi0jIEZvcm0gdGl0bGVzCi1GT1JNX1RJVExFX09QRU5fV1NETD1PcGVuIFdTREwgRm9ybQotRk9STV9USVRMRV9XU0RMX0RFVEFJTFM9V1NETCBEZXRhaWxzIEZvcm0KLUZPUk1fVElUTEVfV1NETF9TRVJWSUNFX0RFVEFJTFM9V1NETCBTZXJ2aWNlIERldGFpbHMgRm9ybQotRk9STV9USVRMRV9XU0RMX0JJTkRJTkdfREVUQUlMUz1XU0RMIEJpbmRpbmcgRGV0YWlscyBGb3JtCi1GT1JNX1RJVExFX0lOVk9LRV9XU0RMX09QRVJBVElPTj1XU0RMIE9wZXJhdGlvbiBGb3JtCi0KLSMgRm9ybSBMYWJlbHMKLUZPUk1fTEFCRUxfT1BFTl9XU0RMX0RFU0M9RW50ZXIgdGhlIFVSTCBvZiBhIFdTREwgZG9jdW1lbnQgYW5kIGNsaWNrIDxzdHJvbmc+R288L3N0cm9uZz4gdG8gZXhwbG9yZS4KLUZPUk1fTEFCRUxfU0VSVklDRVM9U2VydmljZXMKLUZPUk1fTEFCRUxfQklORElOR1M9QmluZGluZ3MKLUZPUk1fTEFCRUxfT1BFUkFUSU9OUz1PcGVyYXRpb25zCi1GT1JNX0xBQkVMX0JJTkRJTkdfVFlQRT1UeXBlCi1GT1JNX0xBQkVMX0JJTkRJTkdfVFlQRV9VTlNVUFBPUlRFRD1VbnN1cHBvcnRlZAotRk9STV9MQUJFTF9CSU5ESU5HX1RZUEVfU09BUD1TT0FQCi1GT1JNX0xBQkVMX0JJTkRJTkdfVFlQRV9IVFRQX0dFVD1IVFRQIEdFVAotRk9STV9MQUJFTF9CSU5ESU5HX1RZUEVfSFRUUF9QT1NUPUhUVFAgUE9TVAotRk9STV9MQUJFTF9OQU1FPU5hbWUKLUZPUk1fTEFCRUxfRE9DVU1FTlRBVElPTj1Eb2N1bWVudGF0aW9uCi1GT1JNX0xBQkVMX0VORFBPSU5UPUVuZHBvaW50Ci1GT1JNX0xBQkVMX0lOVk9LRV9XU0RMX09QRVJBVElPTl9ERVNDPUVudGVyIHRoZSBwYXJhbWV0ZXJzIG9mIHRoaXMgV1NETCBvcGVyYXRpb24gYW5kIGNsaWNrIDxzdHJvbmc+R288L1N0cm9uZz4gdG8gaW52b2tlLgotRk9STV9MQUJFTF9JTlZPS0VfV1NETF9PUEVSQVRJT05fREVTQ19OT19JTlBVVD1UaGVyZSBhcmUgbm8gaW5wdXQgcGFyYW1ldGVycyBmb3IgdGhlIFdTREwgb3BlcmF0aW9uICIlMSIuIENsaWNrIDxzdHJvbmc+R288L1N0cm9uZz4gdG8gaW52b2tlLgotRk9STV9MSU5LX0FERD1BZGQKLUZPUk1fTElOS19SRU1PVkU9UmVtb3ZlCi1GT1JNX0xBQkVMX1ZBTFVFUz1WYWx1ZXMKLUZPUk1fTEFCRUxfRU5BQkxFX0RJU0FCTEVfR1JPVVA9RW5hYmxlL0Rpc2FibGUgZ3JvdXAKLUZPUk1fTEFCRUxfVU5JT05fVFlQRT1VbmlvbiB0eXBlcwotRk9STV9MQUJFTF9MQU5HVUFHRT1MYW5ndWFnZQotRk9STV9MQUJFTF9YU0RfQVBQTElDQVRJT05fSU5GT1JNQVRJT049QXBwbGljYXRpb24gSW5mb3JtYXRpb24KLUZPUk1fTEFCRUxfWFNEX0RPQ1VNRU5UQVRJT049RG9jdW1lbnRhdGlvbgotRk9STV9MQUJFTF9TT0FQX1JFUVVFU1RfRU5WRUxPUEU9U09BUCBSZXF1ZXN0IEVudmVsb3BlOgotRk9STV9MQUJFTF9TT0FQX1JFU1BPTlNFX0VOVkVMT1BFPVNPQVAgUmVzcG9uc2UgRW52ZWxvcGU6Ci1GT1JNX0xBQkVMX0dST1VQX0FMTF9PUkRFUklOR19NT1ZFX1VQPU1vdmUgZWxlbWVudCB1cAotRk9STV9MQUJFTF9HUk9VUF9BTExfT1JERVJJTkdfTU9WRV9ET1dOPU1vdmUgZWxlbWVudCBkb3duCi1GT1JNX0xBQkVMX0JBU0VfVFlQRT1CYXNlIHR5cGUKLUZPUk1fTEFCRUxfVU5CT1VOREVEPVVuYm91bmRlZAotRk9STV9MQUJFTF9MRU5HVEg9TGVuZ3RoCi1GT1JNX0xBQkVMX0xFTkdUSF9WQUxVRT1bJTEuLiUyXQotRk9STV9MQUJFTF9QQVRURVJOPVBhdHRlcm4KLUZPUk1fTEFCRUxfV0hJVEVTUEFDRT1XaGl0ZXNwYWNlCi1GT1JNX0xBQkVMX1JBTkdFX09GX1ZBTFVFUz1SYW5nZSBvZiB2YWx1ZXMKLUZPUk1fTEFCRUxfTUlOX0VYQ0xVU0lWRT0oJTEuLgotRk9STV9MQUJFTF9NSU5fSU5DTFVTSVZFPVslMS4uCi1GT1JNX0xBQkVMX01BWF9FWENMVVNJVkU9JTEpCi1GT1JNX0xBQkVMX01BWF9JTkNMVVNJVkU9JTFdCi1GT1JNX0xBQkVMX1RPVEFMX0RJR0lUUz1Ub3RhbCBkaWdpdHMKLUZPUk1fTEFCRUxfRlJBQ1RJT05fRElHSVRTPUZyYWN0aW9uIGRpZ2l0cwotRk9STV9MQUJFTF9PQ0NVUkFOQ0U9T2NjdXJhbmNlIG9mCi1GT1JNX0xBQkVMX1VOSU9OX01FTUJFUlM9VW5pb24gTWVtYmVycwotRk9STV9MQUJFTF9MSVNUX0lURU1TPUxpc3QgaXRlbXMKLUZPUk1fTEFCRUxfRUxFTUVOVFM9RWxlbWVudHMKLUZPUk1fTEFCRUxfU09BUF9FTkNfQVJSQVlTPVNPQVAgQXJyYXlzCi1GT1JNX0xBQkVMX0NPTlRFTlQ9Q29udGVudAotRk9STV9MQUJFTF9BVE9NSUNfTkFNRV9UWVBFPSUxICglMik6Ci1GT1JNX0xBQkVMX05VTEw9bnVsbAotRk9STV9MQUJFTF9HUk9VUF9OVU1CRVI9R3JvdXAgJTEKLUZPUk1fTEFCRUxfQ0hPSUNFUz1DaG9pY2VzCi1GT1JNX0xBQkVMX05PVEhJTkdfVE9fRElTUExBWV9JTl9GT1JNX1ZJRVc9VGhlcmUgaXMgbm90aGluZyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGZvcm0gdmlldy4gIFBsZWFzZSBzd2l0Y2ggdG8gdGhlIHNvdXJjZSB2aWV3IGZvciB0aGUgU09BUCByZXF1ZXN0IGFuZCByZXNwb25zZS4KLUZPUk1fTEFCRUxfU09BUF9SRVNQT05TRV9GQUlMRURfVkFMSURBVElPTl9JTl9GT1JNX1ZJRVc9VGhlIFNPQVAgcmVzcG9uc2UgZmFpbGVkIHNjaGVtYSB2YWxpZGF0aW9uLiAgUGxlYXNlIHN3aXRjaCB0byB0aGUgc291cmNlIHZpZXcgZm9yIHRoZSBTT0FQIHJlc3BvbnNlIGluIFhNTCBmb3JtYXQuCi1GT1JNX0xBQkVMX0NBTk5PVF9ESVNQTEFZX0hFQURFUl9JTl9GT1JNX1ZJRVc9VGhlIGNvbnRlbnQgb2YgdGhlIGhlYWRlciBjYW5ub3QgYmUgZGlzcGxheWVkIGluIHRoZSBmb3JtIHZpZXcuICBQbGVhc2Ugc3dpdGNoIHRvIHRoZSBzb3VyY2UgdmlldyB0byBleGFtaW5lIHRoZSByYXcgY29udGVudC4KLUZPUk1fTEFCRUxfQ0FOTk9UX0RJU1BMQVlfQk9EWV9JTl9GT1JNX1ZJRVc9VGhlIGNvbnRlbnQgb2YgdGhlIGJvZHkgY2Fubm90IGJlIGRpc3BsYXllZCBpbiB0aGUgZm9ybSB2aWV3LiAgUGxlYXNlIHN3aXRjaCB0byB0aGUgc291cmNlIHZpZXcgdG8gZXhhbWluZSB0aGUgcmF3IGNvbnRlbnQuCi1GT1JNX0xBQkVMX0JPRFlfSVNfRU1QVFk9VGhlIGJvZHkgaXMgZW1wdHkuCi1GT1JNX0xBQkVMX0VORF9QT0lOVFM9RW5kcG9pbnRzCi1GT1JNX0xBQkVMX0hFQURFUj1IZWFkZXIKLUZPUk1fTEFCRUxfQk9EWT1Cb2R5Ci1GT1JNX0xBQkVMX01VU1RVTkRFUlNUQU5EPW11c3RVbmRlcnN0YW5kCi1GT1JNX0xBQkVMX0FDVE9SPWFjdG9yCi0KLSMgU291cmNlL0Zvcm0gdmlld3MKLUZPUk1fTElOS19GT1JNPUZvcm0KLUFMVF9TV0lUQ0hfVE9fRk9STV9WSUVXPVN3aXRjaCB0byBmb3JtIHZpZXcKLUZPUk1fTElOS19TT1VSQ0U9U291cmNlCi1BTFRfU1dJVENIX1RPX1NPVVJDRV9WSUVXPVN3aXRjaCB0byBzb3VyY2UgdmlldwotRk9STV9MQUJFTF9GUkFHTUVOVF9TT0FQX1ZJRVdfQ09OVEVOVD1Tb2FwIEJvZHk6Ci1CVVRUT05fTEFCRUxfTE9BRD1Mb2FkCi1CVVRUT05fTEFCRUxfU0FWRV9BUz1TYXZlIEFzLi4uCi1NU0dfUVVFU1RJT05fU1lOQ19WSUVXUz1Gb3JtYXQgb2YgdGhlIHNvdXJjZSBjb250ZW50IG1heSBiZSBhbHRlcmVkIGFzIGEgcmVzdWx0IG9mIHN3aXRjaGluZyB0byB0aGUgZm9ybSB2aWV3LiAgRG8geW91IHdpc2ggdG8gcHJvY2Vzcz8KLU1TR19RVUVTVElPTl9TWU5DX1ZJRVdTX0RFU1BJVEVfSU5WQUxJRF9TT1VSQ0VfQ09OVEVOVD1Db250ZW50IG9mIHRoZSBzb3VyY2UgdmlldyBmYWlsZWQgc2NoZW1hIHZhbGlkYXRpb24uICBTeW5jaHJvbml6ZSBhbnl3YXlzPyAgKENvbnRlbnQgb2YgdGhlIHNvdXJjZSB2aWV3IG1heSBiZSBtb2RpZmllZCkKLQotIyBGb3JtIGNvbnRyb2wgdGl0bGVzCi1GT1JNX0NPTlRST0xfVElUTEVfRU5BQkxFX0RJU0FCTEVfR1JPVVA9RW5hYmxlL0Rpc2FibGUgZ3JvdXAKLUZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfRUxFTUVOVF9JTl9HUk9VUD1TZWxlY3QgZWxlbWVudCBpbiBncm91cAotRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9VTklPTl9UWVBFPVNlbGVjdCB1bmlvbiB0eXBlCi1GT1JNX0NPTlRST0xfVElUTEVfU09BUF9GSUxFPVNPQVAgZGF0YSBmaWxlCi0KLSMgWFNEIEluZm9ybWF0aW9uIERpYWxvZwotVElUTEVfWFNEX0lORk9STUFUSU9OX0RJQUxPRz1YU0QgSW5mb3JtYXRpb24gRGlhbG9nCi0KLSMgRXJyb3IgbWVzc2FnZXMKLU1TR19FUlJPUl9OT1RISU5HX1NFTEVDVEVEPUlXQUIwMzg5RSBTZWxlY3QgYXQgbGVhc3Qgb25lIGl0ZW0uCi1NU0dfRVJST1JfTUFYX09DQ1VSU19WSU9MQVRJT049SVdBQjAzOTBFIE1heGltdW0gb2NjdXJhbmNlIGlzIHJlYWNoZWQuCi1NU0dfRVJST1JfTUlOX09DQ1VSU19WSU9MQVRJT049SVdBQjAzOTFFIE1pbmltdW0gb2NjdXJhbmNlIGlzIHJlYWNoZWQuCi1NU0dfRVJST1JfQ0FOTk9UX01PVkVfRklSU1RfRUxFTUVOVF9VUD1JV0FCMDM5MkUgU2VsZWN0ZWQgZWxlbWVudCBpcyBhbHJlYWR5IHRoZSBmaXJzdCBpbiB0aGUgZ3JvdXAuCi1NU0dfRVJST1JfQ0FOTk9UX01PVkVfTEFTVF9FTEVNRU5UX0RPV049SVdBQjAzOTNFIFNlbGVjdGVkIGVsZW1lbnQgaXMgYWxyZWFkeSB0aGUgbGFzdCBpbiB0aGUgZ3JvdXAuCi0KLSMgU09BUCB0cmFuc3BvcnQgbWVzc2FnZXMKLU1TR19FUlJPUl9OT19TVUlUQUJMRV9UUkFOU1BPUlQ9RmFpbGVkIHRvIGludm9rZSBvcGVyYXRpb24sIGEgc3VpdGFibGUgdHJhbnNwb3J0IGV4dGVuc2lvbiB3YXMgbm90IGZvdW5kLgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci1wcm9wZXJ0aWVzL3dzaWwucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXItcHJvcGVydGllcy93c2lsLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3OThmZDcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci1wcm9wZXJ0aWVzL3dzaWwucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE2MyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLXRpdGxlPVdTSUwKLQotIyBOYXZpZ2F0b3IKLVdTSUxfTUFJTl9OT0RFPVdTSUwgTWFpbgotCi0jIEZvcm1zCi1GT1JNX0xBQkVMX1VSTD1VUkwKLUZPUk1fTEFCRUxfSVRFTV9OVU1CRVI9SXRlbSAjCi1GT1JNX0xBQkVMX1VERElfQlVTSU5FU1NfTkFNRT1VRERJIEJ1c2luZXNzIE5hbWUKLUZPUk1fTEFCRUxfVURESV9TRVJWSUNFX05BTUU9VURESSBTZXJ2aWNlIE5hbWUKLUZPUk1fTEFCRUxfTEFOR1VBR0U9TGFuZ3VhZ2UKLUZPUk1fTEFCRUxfQUJTVFJBQ1Q9QWJzdHJhY3QKLUZPUk1fTEFCRUxfTkFNRT1OYW1lCi1GT1JNX0xBQkVMX1dTRExfQklORElOR1M9V1NETCBCaW5kaW5ncwotRk9STV9MQUJFTF9OQU1FU1BBQ0VfVVJJPU5hbWVzcGFjZSBVUkkKLUZPUk1fTEFCRUxfTE9DQUxfTkFNRT1Mb2NhbCBOYW1lCi1GT1JNX0xBQkVMX0lOUVVJUllfQVBJPUlucXVpcnkgQVBJCi1GT1JNX0xBQkVMX1NFUlZJQ0VfS0VZPVNlcnZpY2UgS2V5Ci1GT1JNX0xBQkVMX0JVU0lORVNTX0tFWT1CdXNpbmVzcyBLZXkKLUZPUk1fTEFCRUxfRElTQ09WRVJZX1VSTD1EaXNjb3ZlcnkgVVJMCi1GT1JNX0xBQkVMX1dTSUw9V1NJTCBEZXRhaWxzCi1GT1JNX0xBQkVMX1dTSUxfTElOS1M9V1NJTCBMaW5rcwotRk9STV9MQUJFTF9XU0RMX1NFUlZJQ0U9V1NETCBTZXJ2aWNlcwotRk9STV9MQUJFTF9VRERJX1NFUlZJQ0U9VURESSBTZXJ2aWNlcwotRk9STV9MQUJFTF9VRERJX0JVU0lORVNTPVVEREkgQnVzaW5lc3NlcwotRk9STV9MQUJFTF9BRERfVE9fTkFWSUdBVE9SPUFkZCBUbyBOYXZpZ2F0b3IKLUZPUk1fTEFCRUxfQUREX1RPX0ZBVk9SSVRFUz1BZGQgVG8gRmF2b3JpdGVzCi1GT1JNX0xBQkVMX0FERF9UT19VRERJX1BFUlNQRUNUSVZFPUFkZCBUbyBVRERJIFBhZ2UKLUZPUk1fTEFCRUxfQUREX1RPX1dTRExfUEVSU1BFQ1RJVkU9QWRkIFRvIFdTREwgUGFnZQotRk9STV9MQUJFTF9SRUZSRVNIPVJlZnJlc2gKLUZPUk1fTEFCRUxfTkE9Ti9BCi1GT1JNX0xBQkVMX1VOQVZBSUxBQkxFX1VERElfU0VSVklDRT1TZXJ2aWNlIFVuYXZhaWxhYmxlOgotRk9STV9MQUJFTF9VTkFWQUlMQUJMRV9VRERJX0JVU0lORVNTPUJ1c2luZXNzIFVuYXZhaWxhYmxlOgotRk9STV9MQUJFTF9DSE9PU0VfV1NJTF9JTlNQRUNUSU9OX1RZUEU9Q2hvb3NlIHRoZSB0eXBlIG9mIG9iamVjdHMgdG8gaW5zcGVjdDoKLU1TR19FUlJPUl9OT1RISU5HX1NFTEVDVEVEPUlXQUIwMzI4RSBTZWxlY3QgYXQgbGVhc3Qgb25lIGl0ZW0uCi0KLSMgT3BlbldTSUxBY3Rpb24KLUFMVF9PUEVOX1dTSUw9T3BlbiBXU0lMCi1GT1JNX0xBQkVMX09QRU5fV1NJTF9ERVNDPUVudGVyIHRoZSBVUkwgb2YgYSBXU0lMIGRvY3VtZW50IG9yIGEgSFRNTCBkb2N1bWVudCBhbmQgY2xpY2sgPHN0cm9uZz5Hbzwvc3Ryb25nPiB0byBvcGVuIGluc3BlY3QuCi1XU0lMX1VSTD1VUkwgdG8gZG9jdW1lbnQ6Ci1NU0dfRVJST1JfSU5WQUxJRF9XU0lMX1VSTD1JV0FCMDM5NEUgJTEgaXMgbm90IGEgdmFsaWQgV1NJTCBVUkwgb3IgSFRNTCBVUkwuCi1NU0dfRVJST1JfV1NJTF9BTFJFQURZX09QRU5FRD1JV0FCMDMyOUUgJTEgaXMgYWxyZWFkeSBvcGVuZWQgaW4gdGhlIG5hdmlnYXRvci4KLU1TR19JTkZPX09QRU5fV1NJTF9TVUNDRVNTRlVMPUlXQUIwMzMwSSAlMSB3YXMgc3VjY2Vzc2Z1bGx5IG9wZW5lZC4KLQotIyBPcGVuV1NJTExpbmtBY3Rpb24KLUFMVF9PUEVOX1dTSUxfTElOSz1PcGVuIFdTSUwgTGluawotTVNHX0VSUk9SX1dTSUxfTElOS19BTFJFQURZX09QRU5FRD1JV0FCMDMzMUUgJTEgaXMgYWxyZWFkeSBvcGVuZWQgaW4gdGhlIG5hdmlnYXRvcgotTVNHX0lORk9fT1BFTl9XU0lMX0xJTktfU1VDQ0VTU0ZVTD1JV0FCMDMzMkkgJTEgd2FzIHN1Y2Nlc3NmdWxseSBvcGVuZWQuCi0KLSMgV3NpbERldGFpbHNBY3Rpb24KLUFMVF9XU0lMX0RFVEFJTFM9V1NJTCBEZXRhaWxzCi0KLSMgV3NpbFNlcnZpY2VEZXRhaWxzQWN0aW9uCi1BTFRfV1NJTF9TRVJWSUNFX0RFVEFJTFM9V1NJTCBTZXJ2aWNlIERldGFpbHMKLQotIyBVZGRpTGlua0RldGFpbHNBY3Rpb24KLUFMVF9VRERJX0xJTktfREVUQUlMUz1VRERJIEJ1c2luZXNzIERldGFpbHMKLQotIyBXc2lsTGlua0RldGFpbHNBY3Rpb24KLUFMVF9XU0lMX0xJTktfREVUQUlMUz1XU0lMIExpbmsgRGV0YWlscwotCi0jIExpc3RXU0RMU2VydmljZXNBY3Rpb24KLUFMVF9MSVNUX1dTRExfU0VSVklDRVM9TGlzdCBBbGwgV1NETCBTZXJ2aWNlcwotRk9STV9MQUJFTF9MSVNUX1dTRExfU0VSVklDRVNfREVTQz1TZWxlY3QgYSBzZXQgb2YgV1NETCBzZXJ2aWNlcyBhbmQgY2xpY2sgPHN0cm9uZz5BZGQgdG8gRmF2b3JpdGVzPC9zdHJvbmc+IHRvIGFkZCB0aGVzZSB0byB0aGUgbGlzdCBvZiBmYXZvcml0ZXMuCi0KLSMgTGlzdFVERElTZXJ2aWNlc0FjdGlvbgotQUxUX0xJU1RfVURESV9TRVJWSUNFUz1MaXN0IEFsbCBVRERJIFNlcnZpY2VzCi1GT1JNX0xBQkVMX0xJU1RfVURESV9TRVJWSUNFU19ERVNDPVNlbGVjdCBhIHNldCBvZiBVRERJIHNlcnZpY2VzIGFuZCBjbGljayA8c3Ryb25nPkFkZCB0byBGYXZvcml0ZXM8L3N0cm9uZz4gdG8gYWRkIHRoZXNlIHRvIHRoZSBsaXN0IG9mIGZhdm9yaXRlcy4gQ2xpY2sgPHN0cm9uZz5BZGQgdG8gVURESSBQYWdlPC9zdHJvbmc+IHRvIGFkZCB0aGUgc2VsZWN0aW9ucyB0byB0aGUgVURESSBQYWdlLiBDbGljayA8c3Ryb25nPlJlZnJlc2g8L3N0cm9uZz4gdG8gcmVmcmVzaCB0aGUgc2VsZWN0aW9ucy4KLQotIyBMaXN0VURESUJ1c2luZXNzZXNBY3Rpb24KLUFMVF9MSVNUX1VERElfTElOS1M9TGlzdCBBbGwgVURESSBCdXNpbmVzc2VzCi1GT1JNX0xBQkVMX0xJU1RfVURESV9CVVNJTkVTU0VTX0RFU0M9U2VsZWN0IGEgc2V0IG9mIFVEREkgYnVzaW5lc3NlcyBhbmQgY2xpY2sgPHN0cm9uZz5BZGQgdG8gRmF2b3JpdGVzPC9zdHJvbmc+IHRvIGFkZCB0aGVzZSB0byB0aGUgbGlzdCBvZiBmYXZvcml0ZXMuIENsaWNrIDxzdHJvbmc+QWRkIHRvIFVEREkgUGFnZTwvc3Ryb25nPiB0byBhZGQgdGhlc2UgdG8gdGhlIFVEREkgUGFnZS4gQ2xpY2sgPHN0cm9uZz5SZWZyZXNoPC9zdHJvbmc+IHRvIHJlZnJlc2ggdGhlIHNlbGVjdGlvbnMuCi0KLSMgTGlzdFdTSUxMaW5rc0FjdGlvbgotQUxUX0xJU1RfV1NJTF9MSU5LUz1MaXN0IEFsbCBXU0lMIExpbmtzCi1GT1JNX0xBQkVMX0xJU1RfV1NJTF9MSU5LUz1TZWxlY3QgYSBzZXQgb2YgV1NJTCBsaW5rcyBhbmQgcHJlc3MgPHN0cm9uZz5BZGQgdG8gTmF2aWdhdG9yPC9zdHJvbmc+IHRvIG9wZW4gdGhlbSBpbiB0aGUgbmF2aWdhdG9yLgotCi0jIENsZWFyV1NJTEFjdGlvbgotQUxUX0NMRUFSX1dTSUw9Q2xlYXIgV1NJTAotCi0jIFJlZnJlc2hBY3Rpb24KLUFMVF9SRUZSRVNIX1dTSUw9UmVmcmVzaCBXU0lMCi1BTFRfUkVGUkVTSF9VRERJX0JVU0lORVNTPVJlZnJlc2ggVURESSBCdXNpbmVzcwotQUxUX1JFRlJFU0hfVURESV9TRVJWSUNFPVJlZnJlc2ggVURESSBTZXJ2aWNlCi1NU0dfRVJST1JfV1NJTF9OT1RfRk9VTkQ9SVdBQjAzMzNFIFdTSUwgJTEgY291bGQgbm90IGJlIGxvYWRlZC4KLU1TR19FUlJPUl9CVVNJTkVTU19OT1RfRk9VTkQ9SVdBQjAzMzRFIEJ1c2luZXNzICUxIGNvdWxkIG5vdCBiZSBmb3VuZCBpbiB0aGUgcmVnaXN0cnkuCi1NU0dfRVJST1JfU0VSVklDRV9OT1RfRk9VTkQ9SVdBQjAzMzVFIFNlcnZpY2UgJTEgY291bGQgbm90IGJlIGZvdW5kIGluIHRoZSByZWdpc3RyeS4KLU1TR19JTkZPX1JFRlJFU0hfU1VDQ0VTU0ZVTD1JV0FCMDMzNkkgJTEgaXMgcmVmcmVzaGVkLgotTVNHX0NPTkZJUk1fUkVNT1ZFX05PREU9JTEgaXMgbm8gbG9uZ2VyIHJlc29sdmFibGUuICBEbyB5b3Ugd2lzaCB0byBjbGVhciBpdD8KLQotIyBBZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbgotQUxUX0FERF9CVVNJTkVTU19UT19VRERJX1BFUlNQRUNUSVZFPUFkZCBCdXNpbmVzcyBUbyBVRERJIFBhZ2UKLUFMVF9BRERfU0VSVklDRV9UT19VRERJX1BFUlNQRUNUSVZFPUFkZCBTZXJ2aWNlIFRvIFVEREkgUGFnZQotTVNHX0lORk9fQUREX1RPX1VERElfUEVSU1BFQ1RJVkVfU1VDQ0VTU0ZVTD1JV0FCMDMzN0kgJTEgaXMgYWRkZWQgdG8gVURESSBQYWdlLgotTVNHX0VSUk9SX0FERF9UT19VRERJX1BFUlNQRUNUSVZFPUlXQUIwMzM4RSBVbmFibGUgdG8gYWRkICUxIHRvIFVEREkgUGFnZS4KLU1TR19FUlJPUl9CVVNJTkVTU19OT1RfRk9VTkQ9SVdBQjAzMzlFIEJ1c2luZXNzICUxIGNvdWxkIG5vdCBiZSBmb3VuZCBpbiB0aGUgcmVnaXN0cnkuCi1NU0dfRVJST1JfU0VSVklDRV9OT1RfRk9VTkQ9SVdBQjAzNDBFIFNlcnZpY2UgJTEgY291bGQgbm90IGJlIGZvdW5kIGluIHRoZSByZWdpc3RyeS4KLQotIyBXc2lsQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb24KLUFMVF9BRERfV1NETF9UT19XU0RMX1BFUlNQRUNUSVZFPUFkZCBXU0RMIFRvIFdTREwgUGFnZQotTVNHX0lORk9fQUREX1dTRExfVE9fV1NETF9QRVJTUEVDVElWRV9TVUNDRVNTRlVMPUlXQUIwMzk1SSAlMSBpcyBhZGRlZCB0byBXU0RMIFBhZ2UuCi1NU0dfRVJST1JfQUREX1dTRExfVE9fV1NETF9QRVJTUEVDVElWRT1JV0FCMDM5NkUgJTEgY291bGQgbm90IGJlIGxvYWRlZC4KLQotIyBBZGRXU0lMVG9GYXZvcml0ZXNBY3Rpb24KLUFMVF9BRERfV1NJTF9UT19GQVZPUklURVM9QWRkIFdTSUwgVG8gRmF2b3JpdGVzCi1NU0dfRVJST1JfQUREX1RPX0ZBVk9SSVRFUz1JV0FCMDM0MUUgVW5hYmxlIHRvIGFkZCAlMSB0byBmYXZvcml0ZXMuCi1NU0dfRVJST1JfRkFWT1JJVEVTX0FMUkVBRFlfRVhJU1RTPUlXQUIwMzQyRSAlMSBhbHJlYWR5IGV4aXN0cyBpbiBmYXZvcml0ZXMuCi1NU0dfSU5GT19BRERfVE9fRkFWT1JJVEVTX1NVQ0NFU1NGVUw9SVdBQjAzNDNJICUxIGlzIGFkZGVkIHRvIGZhdm9yaXRlcy4KLU1TR19RVUVTVElPTl9PVkVSV1JJVEVfRkFWT1JJVEVTPUZhdm9yaXRlIGFscmVhZHkgZXhpc3RzLiAgRG8geW91IHdpc2ggdG8gb3ZlcndyaXRlPwotCi0jIEFkZFdTRExTZXJ2aWNlVG9GYXZvcml0ZXNBY3Rpb24KLUFMVF9BRERfV1NETF9TRVJWSUNFX1RPX0ZBVk9SSVRFUz1BZGQgV1NETCBUbyBGYXZvcml0ZXMKLQotIyBBZGRCdXNpbmVzc1RvRmF2b3JpdGVzQWN0aW9uCi1BTFRfQUREX1VERElfQlVTSU5FU1NfVE9fRkFWT1JJVEVTPUFkZCBVRERJIEJ1c2luZXNzIFRvIEZhdm9yaXRlcwotCi0jIEFkZFNlcnZpY2VUb0Zhdm9yaXRlc0FjdGlvbgotQUxUX0FERF9TRVJWSUNFX1RPX0ZBVk9SSVRFUz1BZGQgVURESSBTZXJ2aWNlIFRvIEZhdm9yaXRlcwotCi0jIFdTSUxJbXBvcnRXU0lMVG9Xb3JrYmVuY2gKLUFUTF9JTVBPUlRfV1NJTF9UT19XT1JLQkVOQ0g9SW1wb3J0IFdTSUwgVG8gV29ya2JlbmNoCi1GT1JNX0xBQkVMX0lNUE9SVF9XU0lMX1RPX1dPUktCRU5DSF9ERVNDPVNlbGVjdCBhIHdvcmtiZW5jaCBwcm9qZWN0IHRvIHNhdmUgdGhlIFdTSUwgZmlsZSBpbnRvLiBZb3UgbWF5IGFsc28gY2hhbmdlIHRoZSBuYW1lIG9mIHRoZSBXU0lMIGZpbGUuCi0KLSMgSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uCi1BTFRfV1NJTF9JTVBPUlRfVE9fRlM9SW1wb3J0IFdTSUwgVG8gRmlsZSBTeXN0ZW0KLUFMVF9XU0RMX0lNUE9SVF9UT19GUz1JbXBvcnQgV1NETCBUbyBGaWxlIFN5c3RlbQotCi0jIEZyYW1lIHRpdGxlcwotRlJBTUVfVElUTEVfTkFWSUdBVE9SX0NPTlRBSU5FUj1OYXZpZ2F0b3IgQ29udGFpbmVyCi1GUkFNRV9USVRMRV9OQVZJR0FUT1JfVE9PTEJBUj1OYXZpZ2F0b3IgVG9vbGJhcgotRlJBTUVfVElUTEVfTkFWSUdBVE9SX0NPTlRFTlQ9TmF2aWdhdG9yIENvbnRlbnQKLUZSQU1FX1RJVExFX0FDVElPTlNfQ09OVEFJTkVSPUFjdGlvbnMgQ29udGFpbmVyCi1GUkFNRV9USVRMRV9QUk9QRVJUSUVTX0NPTlRBSU5FUj1Qcm9wZXJ0aWVzIENvbnRhaW5lcgotRlJBTUVfVElUTEVfUFJPUEVSVElFU19DT05URU5UPVByb3BlcnRpZXMgQ29udGVudAotRlJBTUVfVElUTEVfUFJPUEVSVElFU19UT09MQkFSPVByb3BlcnRpZXMgVG9vbGJhcgotRlJBTUVfVElUTEVfU1RBVFVTX0NPTlRBSU5FUj1TdGF0dXMgQ29udGFpbmVyCi1GUkFNRV9USVRMRV9TVEFUVVNfQ09OVEVOVD1TdGF0dXMgQ29udGVudAotRlJBTUVfVElUTEVfU1RBVFVTX1RPT0xCQVI9U3RhdHVzIFRvb2xiYXIKLQotIyBGb3JtIHRpdGxlcwotRk9STV9USVRMRV9PUEVOX1dTSUw9T3BlbiBXU0lMIEZvcm0KLUZPUk1fVElUTEVfVURESV9CVVNJTkVTU19ERVRBSUxTPVVEREkgQnVzaW5lc3MgRGV0YWlscyBGb3JtCi1GT1JNX1RJVExFX1VERElfU0VSVklDRV9ERVRBSUxTPVVEREkgU2VydmljZSBEZXRhaWxzIEZvcm0KLUZPUk1fVElUTEVfV1NETF9TRVJWSUNFX0RFVEFJTFM9V1NETCBTZXJ2aWNlIERldGFpbHMgRm9ybQotRk9STV9USVRMRV9XU0lMX0RFVEFJTFM9V1NJTCBEZXRhaWxzIEZvcm0KLUZPUk1fVElUTEVfV1NJTF9MSU5LX0RFVEFJTFM9V1NJTCBMaW5rIERldGFpbHMgRm9ybQotCi0jIFZpZXcgdGl0bGVzCi1WSUVXX1RJVExFX1VERElfQlVTSU5FU1NFUz1VRERJIEJ1c2luZXNzZXMgVmlldwotVklFV19USVRMRV9VRERJX1NFUlZJQ0VTPVVEREkgU2VydmljZXMgVmlldwotVklFV19USVRMRV9XU0RMX1NFUlZJQ0VTPVdTREwgU2VydmljZXMgVmlldwotVklFV19USVRMRV9XU0lMX0xJTktTPVdTSUwgTGlua3MgVmlldwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvYWN0aW9ucy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvYWN0aW9ucy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL2FjdGlvbnMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy9mYXZvcml0ZXMvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL2Zhdm9yaXRlcy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL2Zhdm9yaXRlcy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL2Zhdm9yaXRlcy9hY3Rpb25zLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy9mYXZvcml0ZXMvYWN0aW9ucy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL2Zhdm9yaXRlcy9hY3Rpb25zLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvZmF2b3JpdGVzL2Zvcm1zLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy9mYXZvcml0ZXMvZm9ybXMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy9mYXZvcml0ZXMvZm9ybXMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy9mYXZvcml0ZXMvc2NyaXB0cy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvZmF2b3JpdGVzL3NjcmlwdHMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy9mYXZvcml0ZXMvc2NyaXB0cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL2Zhdm9yaXRlcy92aWV3cy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvZmF2b3JpdGVzL3ZpZXdzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvZmF2b3JpdGVzL3ZpZXdzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvZm9ybXMvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL2Zvcm1zLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvZm9ybXMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy9zY3JpcHRzLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy9zY3JpcHRzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvc2NyaXB0cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3VkZGkvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3VkZGkvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy91ZGRpLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvdWRkaS9hY3Rpb25zLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy91ZGRpL2FjdGlvbnMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy91ZGRpL2FjdGlvbnMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy91ZGRpL2Zvcm1zLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy91ZGRpL2Zvcm1zLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvdWRkaS9mb3Jtcy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3VkZGkvc2NyaXB0cy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvdWRkaS9zY3JpcHRzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvdWRkaS9zY3JpcHRzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvd3NkbC8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvd3NkbC8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3dzZGwvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy93c2RsL2FjdGlvbnMvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3dzZGwvYWN0aW9ucy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3dzZGwvYWN0aW9ucy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3dzZGwvZm9ybXMvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3dzZGwvZm9ybXMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy93c2RsL2Zvcm1zLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvd3NkbC9mcmFnbWVudC8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvd3NkbC9mcmFnbWVudC8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3dzZGwvZnJhZ21lbnQvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy93c2RsL3NjcmlwdHMvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3dzZGwvc2NyaXB0cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3dzZGwvc2NyaXB0cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3dzaWwvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3dzaWwvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy93c2lsLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvd3NpbC9hY3Rpb25zLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy93c2lsL2FjdGlvbnMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy93c2lsL2FjdGlvbnMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy93c2lsL2Zvcm1zLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvY2xhc3Nlcy93c2lsL2Zvcm1zLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvd3NpbC9mb3Jtcy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3dzaWwvc2NyaXB0cy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvd3NpbC9zY3JpcHRzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvd3NpbC9zY3JpcHRzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvd3NpbC92aWV3cy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2NsYXNzZXMvd3NpbC92aWV3cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvV0VCLUlORi9jbGFzc2VzL3dzaWwvdmlld3MvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvbGliLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL1dFQi1JTkYvbGliLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwYjU4MjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9XRUItSU5GL2xpYi8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphcgotd3NleHBsb3JlcnNyYy56aXAKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9uZW5naW5lLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9uZW5naW5lLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTkwYjA0NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbmVuZ2luZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUuQWN0aW9uRW5naW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLkFjdGlvbkRhdGFQYXJzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUuZGF0YS5TY2VuYXJpb0Rlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUuZGF0YS5UcmFuc2FjdGlvbkRlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUuZGF0YS5BY3Rpb25EZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5YTUxVdGlscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuSFRNTFV0aWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5NdWx0aXBhcnRGb3JtRGF0YVBhcnNlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLkxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC5JdGVyYXRvciIgJT4KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLVN0cmluZyBtb2RlID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLkFDVElPTl9FTkdJTkVfTU9ERSk7Ci1TdHJpbmcgc2NlbmFyaW8gPSBudWxsOwotdHJ5Ci17Ci0gIE11bHRpcGFydEZvcm1EYXRhUGFyc2VyIHBhcnNlciA9IG5ldyBNdWx0aXBhcnRGb3JtRGF0YVBhcnNlcigpOwotICBwYXJzZXIucGFyc2VSZXF1ZXN0KHJlcXVlc3QsIEhUTUxVdGlscy5VVEY4X0VOQ09ESU5HKTsKLSAgc2NlbmFyaW8gPSBwYXJzZXIuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5BQ1RJT05fRU5HSU5FX1NDRU5BUklPKTsKLX0KLWNhdGNoIChUaHJvd2FibGUgdCkKLXsKLX0KLUFjdGlvbkVuZ2luZSBhY3Rpb25FbmdpbmUgPSBjb250cm9sbGVyLmdldEFjdGlvbkVuZ2luZSgpOwotaWYgKG1vZGUgIT0gbnVsbCkKLXsKLSAgYWN0aW9uRW5naW5lLnNldE1vZGUoQWN0aW9uRW5naW5lLk1PREVfRElTQUJMRUQpOwotICB0cnkKLSAgewotICAgIGFjdGlvbkVuZ2luZS5zZXRNb2RlKEJ5dGUucGFyc2VCeXRlKG1vZGUpKTsKLSAgfQotICBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSkKLSAgewotICB9Ci19Ci1pZiAoc2NlbmFyaW8gIT0gbnVsbCAmJiBzY2VuYXJpby5sZW5ndGgoKSA+IDApCi17Ci0gIFNjZW5hcmlvRGVzY3JpcHRvciBzY2VuYXJpb0Rlc2NyaXB0b3IgPSBudWxsOwotICB0cnkKLSAgewotICAgIEFjdGlvbkRhdGFQYXJzZXIgcGFyc2VyID0gbmV3IEFjdGlvbkRhdGFQYXJzZXIoKTsKLSAgICBzY2VuYXJpb0Rlc2NyaXB0b3IgPSBwYXJzZXIucGFyc2VTY2VuYXJpbyhYTUxVdGlscy5zdHJpbmdUb0VsZW1lbnQoc2NlbmFyaW8pKTsKLSAgICBhY3Rpb25FbmdpbmUuZXhlY3V0ZVNjZW5hcmlvKHNjZW5hcmlvRGVzY3JpcHRvcik7Ci0gIH0KLSAgY2F0Y2ggKFRocm93YWJsZSB0KQotICB7Ci0gIH0KLSAgaWYgKHNjZW5hcmlvRGVzY3JpcHRvciAhPSBudWxsKQotICB7Ci0gICAgVHJhbnNhY3Rpb25EZXNjcmlwdG9yW10gdHJhbnNhY3Rpb25EZXNjcmlwdG9ycyA9IHNjZW5hcmlvRGVzY3JpcHRvci5nZXRUcmFuc2FjdGlvbkRlc2NyaXB0b3JzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0cmFuc2FjdGlvbkRlc2NyaXB0b3JzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIEFjdGlvbkRlc2NyaXB0b3JbXSBhY3Rpb25EZXNjcmlwdG9ycyA9IHRyYW5zYWN0aW9uRGVzY3JpcHRvcnNbaV0uZ2V0QWN0aW9uRGVzY3JpcHRvcnMoKTsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgYWN0aW9uRGVzY3JpcHRvcnMubGVuZ3RoOyBqKyspCi0gICAgICB7Ci0gICAgICAgICU+Ci0gICAgICAgIDwhLS0KLSAgICAgICAgPCU9YWN0aW9uRGVzY3JpcHRvcnNbal0uZ2V0SWQoKSU+Ci0gICAgICAgIDwlPWFjdGlvbkRlc2NyaXB0b3JzW2pdLmdldFN0YXR1c0lkKCklPgotICAgICAgICA8JQotICAgICAgICBMaXN0IHN0YXR1cyA9IGFjdGlvbkRlc2NyaXB0b3JzW2pdLmdldFN0YXR1cygpOwotICAgICAgICBpZiAoc3RhdHVzICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gc3RhdHVzLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgICAgICAgewotICAgICAgICAgICAgJT4KLSAgICAgICAgICAgIDwlPWl0Lm5leHQoKS50b1N0cmluZygpJT4KLSAgICAgICAgICAgIDwlCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgICU+Ci0gICAgICAgIC0tPgotICAgICAgICA8JQotICAgICAgfQotICAgIH0KLSAgfQotfQotJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9uZW5naW5lX2NvbnRhaW5lci5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbmVuZ2luZV9jb250YWluZXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOWZjNmNmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9uZW5naW5lX2NvbnRhaW5lci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMzcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUuQWN0aW9uRW5naW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLm5ldC4qIiAlPgotPCUKLVN0cmluZyBzZXNzaW9uSWQgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuU0VTU0lPTklEKTsKLUh0dHBTZXNzaW9uIGN1cnJlbnRTZXNzaW9uID0gKEh0dHBTZXNzaW9uKWFwcGxpY2F0aW9uLmdldEF0dHJpYnV0ZShzZXNzaW9uSWQpOwotQ29udHJvbGxlciBjb250cm9sbGVyID0gKENvbnRyb2xsZXIpY3VycmVudFNlc3Npb24uZ2V0QXR0cmlidXRlKCJjb250cm9sbGVyIik7Ci1BY3Rpb25FbmdpbmUgYWN0aW9uRW5naW5lID0gY29udHJvbGxlci5nZXRBY3Rpb25FbmdpbmUoKTsKLVN0cmluZyBtb2RlU3RyaW5nID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLkFDVElPTl9FTkdJTkVfTU9ERSk7Ci1pZiAobW9kZVN0cmluZyAhPSBudWxsICYmIG1vZGVTdHJpbmcubGVuZ3RoKCkgPiAwKQotewotICB0cnkKLSAgewotICAgIGJ5dGUgbW9kZSA9IEJ5dGUucGFyc2VCeXRlKG1vZGVTdHJpbmcpOwotICAgIGFjdGlvbkVuZ2luZS5zZXRNb2RlKG1vZGUpOwotICB9Ci0gIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgewotICB9Ci19Ci1TdHJpbmcgcGxheUZpbGVJZCA9ICJwbGF5RmlsZUlkIjsKLSU+Ci08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIlRJVExFX0FDVElPTl9SRUNPUkRFUiIpJT48L3RpdGxlPgotICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICBmdW5jdGlvbiBzZXRNb2RlKG1vZGUpCi0gICAgewotICAgICAgPCUKLSAgICAgIFN0cmluZ0J1ZmZlciBmb3JtQWN0aW9uID0gbmV3IFN0cmluZ0J1ZmZlcihyZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImFjdGlvbmVuZ2luZV9jb250YWluZXIuanNwPyIpKSk7Ci0gICAgICBmb3JtQWN0aW9uLmFwcGVuZChBY3Rpb25JbnB1dHMuU0VTU0lPTklEKTsKLSAgICAgIGZvcm1BY3Rpb24uYXBwZW5kKCI9Iik7Ci0gICAgICBmb3JtQWN0aW9uLmFwcGVuZChzZXNzaW9uSWQpOwotICAgICAgZm9ybUFjdGlvbi5hcHBlbmQoIiYiKTsKLSAgICAgIGZvcm1BY3Rpb24uYXBwZW5kKEFjdGlvbklucHV0cy5BQ1RJT05fRU5HSU5FX01PREUpOwotICAgICAgZm9ybUFjdGlvbi5hcHBlbmQoIj0iKTsKLSAgICAgICU+Ci0gICAgICB2YXIgZm9ybSA9IGRvY3VtZW50LmZvcm1zWzBdOwotICAgICAgZm9ybS5hY3Rpb24gPSAnPCU9Zm9ybUFjdGlvbi50b1N0cmluZygpJT4nICsgbW9kZTsKLSAgICAgIGZvcm0udGFyZ2V0ID0gIl9zZWxmIjsKLSAgICAgIGZvcm0uc3VibWl0KCk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcGxheSgpCi0gICAgewotICAgICAgdmFyIHBsYXlGaWxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIjwlPXBsYXlGaWxlSWQlPiIpOwotICAgICAgaWYgKHBsYXlGaWxlLnZhbHVlICE9IG51bGwgJiYgcGxheUZpbGUudmFsdWUubGVuZ3RoID4gMCkKLSAgICAgIHsKLSAgICAgICAgdmFyIGZvcm0gPSBkb2N1bWVudC5mb3Jtc1swXTsKLSAgICAgICAgZm9ybS5hY3Rpb24gPSAnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2V4cGxvcmVyLmpzcCIpKSU+JzsKLSAgICAgICAgZm9ybS50YXJnZXQgPSAiPCU9RnJhbWVOYW1lcy5XSU5ET1dfTkFNRV9XU0VYUExPUkVSX0pTUCU+IjsKLSAgICAgICAgZm9ybS5lbmN0eXBlID0gIm11bHRpcGFydC9mb3JtLWRhdGEiOwotICAgICAgICAvLyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eQotICAgICAgICBmb3JtLmVuY29kaW5nID0gIm11bHRpcGFydC9mb3JtLWRhdGEiOwotICAgICAgICBmb3JtLnN1Ym1pdCgpOwotICAgICAgICBzZXRNb2RlKCc8JT1BY3Rpb25FbmdpbmUuTU9ERV9QTEFZJT4nKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgYWxlcnQoJzwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX0lOVkFMSURfUExBWV9GSUxFIiklPicpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHNhdmUoKQotICAgIHsKLSAgICAgIHZhciBmb3JtID0gZG9jdW1lbnQuZm9ybXNbMF07Ci0gICAgICBmb3JtLmFjdGlvbiA9ICc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImFjdGlvbnMvU2F2ZUFjdGlvbkVuZ2luZVNjZW5hcmlvLmpzcCIpKSU+JzsKLSAgICAgIGZvcm0udGFyZ2V0ID0gIl9zZWxmIjsKLSAgICAgIGZvcm0uc3VibWl0KCk7Ci0gICAgfQotICA8L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci0gIDxmb3JtIG1ldGhvZD0icG9zdCI+Ci0gICAgPCUKLSAgICBTdHJpbmcgbGFiZWxNb2RlUGxheSA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9NT0RFX1BMQVkiKTsKLSAgICBTdHJpbmcgbGFiZWxNb2RlU3RvcCA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9NT0RFX1NUT1AiKTsKLSAgICBTdHJpbmcgbGFiZWxNb2RlUmVjb3JkID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX01PREVfUkVDT1JEIik7Ci0gICAgU3RyaW5nIGxhYmVsU2F2ZSA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9TQVZFIik7Ci0gICAgYnl0ZSBtb2RlID0gYWN0aW9uRW5naW5lLmdldE1vZGUoKTsKLSAgICBTdHJpbmcgaW1nUGxheSA9IChtb2RlID09IEFjdGlvbkVuZ2luZS5NT0RFX1BMQVkpID8gImltYWdlcy9lbGNsMTYvYWN0aW9uZW5naW5lX3BsYXkuZ2lmIiA6ICJpbWFnZXMvZGxjbDE2L2FjdGlvbmVuZ2luZV9wbGF5LmdpZiI7Ci0gICAgU3RyaW5nIGltZ1N0b3AgPSAobW9kZSA9PSBBY3Rpb25FbmdpbmUuTU9ERV9TVE9QKSA/ICJpbWFnZXMvZWxjbDE2L2FjdGlvbmVuZ2luZV9zdG9wLmdpZiIgOiAiaW1hZ2VzL2RsY2wxNi9hY3Rpb25lbmdpbmVfc3RvcC5naWYiOwotICAgIFN0cmluZyBpbWdSZWNvcmQgPSAobW9kZSA9PSBBY3Rpb25FbmdpbmUuTU9ERV9SRUNPUkQpID8gImltYWdlcy9lbGNsMTYvYWN0aW9uZW5naW5lX3JlY29yZC5naWYiIDogImltYWdlcy9kbGNsMTYvYWN0aW9uZW5naW5lX3JlY29yZC5naWYiOwotICAgIFN0cmluZyBpbWdTYXZlID0gImltYWdlcy9kbGNsMTYvYWN0aW9uZW5naW5lX3NhdmUuZ2lmIjsKLSAgICAlPgotICAgIDx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTM+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImxlZnQiIGNsYXNzPSJsYWJlbHMiIG5vd3JhcD4KLSAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnBsYXkoKSI+Ci0gICAgICAgICAgICA8aW1nIGNsYXNzPSJub3JtYWwiIGJvcmRlcj0wIGFsdD0iPCU9bGFiZWxNb2RlUGxheSU+IiB0aXRsZT0iPCU9bGFiZWxNb2RlUGxheSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChpbWdQbGF5KSklPiI+Ci0gICAgICAgICAgICA8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTU9ERV9QTEFZIiklPgotICAgICAgICAgIDwvYT4KLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0ibGVmdCIgY2xhc3M9ImxhYmVscyIgbm93cmFwPgotICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6c2V0TW9kZSgnPCU9U3RyaW5nLnZhbHVlT2YoQWN0aW9uRW5naW5lLk1PREVfU1RPUCklPicpIj4KLSAgICAgICAgICAgIDxpbWcgY2xhc3M9Im5vcm1hbCIgYm9yZGVyPTAgYWx0PSI8JT1sYWJlbE1vZGVTdG9wJT4iIHRpdGxlPSI8JT1sYWJlbE1vZGVTdG9wJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGltZ1N0b3ApKSU+Ij4KLSAgICAgICAgICAgIDwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9NT0RFX1NUT1AiKSU+Ci0gICAgICAgICAgPC9hPgotICAgICAgICA8L3RkPgotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ibGFiZWxzIiBub3dyYXA+Ci0gICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpzZXRNb2RlKCc8JT1TdHJpbmcudmFsdWVPZihBY3Rpb25FbmdpbmUuTU9ERV9SRUNPUkQpJT4nKSI+Ci0gICAgICAgICAgICA8aW1nIGNsYXNzPSJub3JtYWwiIGJvcmRlcj0wIGFsdD0iPCU9bGFiZWxNb2RlUmVjb3JkJT4iIHRpdGxlPSI8JT1sYWJlbE1vZGVSZWNvcmQlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoaW1nUmVjb3JkKSklPiI+Ci0gICAgICAgICAgICA8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTU9ERV9SRUNPUkQiKSU+Ci0gICAgICAgICAgPC9hPgotICAgICAgICA8L3RkPgotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ibGFiZWxzIiBub3dyYXA+Ci0gICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpzYXZlKCkiPgotICAgICAgICAgICAgPGltZyBjbGFzcz0ibm9ybWFsIiBib3JkZXI9MCBhbHQ9IjwlPWxhYmVsU2F2ZSU+IiB0aXRsZT0iPCU9bGFiZWxTYXZlJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGltZ1NhdmUpKSU+Ij4KLSAgICAgICAgICAgIDwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9TQVZFIiklPgotICAgICAgICAgIDwvYT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgICA8dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0zPgotICAgICAgPHRyPgotICAgICAgICA8dGQgdmFsaWduPSJjZW50ZXIiIGFsaWduPSJsZWZ0IiBjbGFzcz0ibGFiZWxzIiBub3dyYXA+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1BMQVlfRklMRSIpJT48L3RkPgotICAgICAgICA8dGQgdmFsaWduPSJjZW50ZXIiIGFsaWduPSJsZWZ0IiBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICA8aW5wdXQgdHlwZT0iZmlsZSIgaWQ9IjwlPXBsYXlGaWxlSWQlPiIgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLkFDVElPTl9FTkdJTkVfU0NFTkFSSU8lPiI+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gIDwvZm9ybT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL0NoZWNrV29ya2JlbmNoRmlsZVJlYWRPbmx5QWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9DaGVja1dvcmtiZW5jaEZpbGVSZWFkT25seUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4YTlhNzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL0NoZWNrV29ya2JlbmNoRmlsZVJlYWRPbmx5QWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTwlCi0gICBTdHJpbmdCdWZmZXIgcGFuZXNGaWxlID0gbmV3IFN0cmluZ0J1ZmZlcigiLyIpOwotICAgcGFuZXNGaWxlLmFwcGVuZChjb250cm9sbGVyLmdldEN1cnJlbnRQZXJzcGVjdGl2ZSgpLmdldFBhbmVzRmlsZSgpKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iPCU9cGFuZXNGaWxlLnRvU3RyaW5nKCklPiIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLTwlCi0gICBJbXBvcnRUb1dvcmtiZW5jaEFjdGlvbiBhY3Rpb24gPSAoSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb24pc2Vzc2lvbi5nZXRBdHRyaWJ1dGUoQWN0aW9uSW5wdXRzLklNUE9SVF9BQ1RJT04pOwotICAgaWYgKGFjdGlvbi5pc1RhcmdldEZpbGVSZXNvdXJjZVJlYWRPbmx5KCkpCi0gICB7Ci0lPgotICB2YXIgcHJvY2VlZCA9IHRydWU7Ci08JSAgIAotICAgICBpZiAoIWFjdGlvbi5pc0NoZWNrb3V0RmlsZXNFbmFibGVkKCkpCi0gICAgIHsKLSU+Ci0gIHByb2NlZWQgPSBjb25maXJtKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoYWN0aW9uLmdldFdlYlNlcnZpY2VQbHVnaW5GaWxlTWVzc2FnZSgiTVNHX0VSUk9SX0ZJTEVfQ0hFQ0tPVVRfRElTQUJMRUQiKSklPiIpOwotPCUgICAgIAotICAgICB9Ci0lPgotICBpZiAocHJvY2VlZCkKLSAgICBwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChWYWxpZGF0ZUVkaXRBY3Rpb24uZ2V0QWN0aW9uTGluaygpKSklPiI7Ci08JSAgICAgCi0gICB9Ci0gICBlbHNlCi0gICB7Ci0lPgotICBwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChXcml0ZVdTRExUb1dvcmtiZW5jaEFjdGlvbi5nZXRBY3Rpb25MaW5rKCkpKSU+IjsKLTwlCi0gICB9Ci0lPiAgICAgCi08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4gICAKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9DbGVhck5vZGVBY3Rpb24uaW5jIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL0NsZWFyTm9kZUFjdGlvbi5pbmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4Zjk4MWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL0NsZWFyTm9kZUFjdGlvbi5pbmMKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlCi0gICBQZXJzcGVjdGl2ZSBjdXJyZW50UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEN1cnJlbnRQZXJzcGVjdGl2ZSgpOwotJT4KLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTwlCi0gICBTdHJpbmdCdWZmZXIgcGFuZXNGaWxlID0gbmV3IFN0cmluZ0J1ZmZlcigiLyIpOwotICAgcGFuZXNGaWxlLmFwcGVuZChjdXJyZW50UGVyc3BlY3RpdmUuZ2V0UGFuZXNGaWxlKCkpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSI8JT1wYW5lc0ZpbGUudG9TdHJpbmcoKSU+IiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBpZiAoaXNNaWNyb3NvZnRJbnRlcm5ldEV4cGxvcmVyKCkpCi0gIHsgICAgCi08JQotICAgU3RyaW5nIHRyZWVDb250ZW50VmFyID0gYWN0aW9uLmdldFRyZWVDb250ZW50VmFyKCk7Ci0gICBpZiAodHJlZUNvbnRlbnRWYXIgIT0gbnVsbCkKLSAgIHsKLSU+Ci0gICAgPCU9dHJlZUNvbnRlbnRWYXIlPi5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoYWN0aW9uLmdldFRyZWVDb250ZW50UGFnZSgpKSklPiI7Ci08JQotICAgfQotICAgU3RyaW5nIHByb3BlcnRpZXNDb250YWluZXJWYXIgPSBhY3Rpb24uZ2V0UHJvcGVydGllc0NvbnRhaW5lclZhcigpOwotICAgaWYgKHByb3BlcnRpZXNDb250YWluZXJWYXIgIT0gbnVsbCkKLSAgIHsKLSU+Ci0gICAgPCU9cHJvcGVydGllc0NvbnRhaW5lclZhciU+LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChhY3Rpb24uZ2V0UHJvcGVydGllc0NvbnRhaW5lclBhZ2UoKSkpJT4iOwotPCUgICAKLSAgIH0KLSAgIFN0cmluZyBzdGF0dXNDb250ZW50VmFyID0gYWN0aW9uLmdldFN0YXR1c0NvbnRlbnRWYXIoKTsKLSAgIGlmIChzdGF0dXNDb250ZW50VmFyICE9IG51bGwpCi0gICB7Ci0lPgotICAgIDwlPXN0YXR1c0NvbnRlbnRWYXIlPi5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoYWN0aW9uLmdldFN0YXR1c0NvbnRlbnRQYWdlKCkpKSU+IjsKLTwlCi0gICB9Ci0lPgotICB9Ci0gIGVsc2UKLSAgICBwZXJzcGVjdGl2ZUNvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGN1cnJlbnRQZXJzcGVjdGl2ZS5nZXRQZXJzcGVjdGl2ZUNvbnRlbnRQYWdlKCkpKSU+IjsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL0NsZWFyVmlld0VsZW1lbnRBY3Rpb24uaW5jIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL0NsZWFyVmlld0VsZW1lbnRBY3Rpb24uaW5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNGVlMTIxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9DbGVhclZpZXdFbGVtZW50QWN0aW9uLmluYworKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCUKLSAgIFBlcnNwZWN0aXZlIGN1cnJlbnRQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0Q3VycmVudFBlcnNwZWN0aXZlKCk7Ci0lPgotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPCUKLSAgIFN0cmluZ0J1ZmZlciBwYW5lc0ZpbGUgPSBuZXcgU3RyaW5nQnVmZmVyKCIvIik7Ci0gICBwYW5lc0ZpbGUuYXBwZW5kKGN1cnJlbnRQZXJzcGVjdGl2ZS5nZXRQYW5lc0ZpbGUoKSk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9IjwlPXBhbmVzRmlsZS50b1N0cmluZygpJT4iIGZsdXNoPSJ0cnVlIi8+Ci08aGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLTwlCi0gICBTdHJpbmcgcHJvcGVydGllc0NvbnRhaW5lclZhciA9IGFjdGlvbi5nZXRQcm9wZXJ0aWVzQ29udGFpbmVyVmFyKCk7Ci0gICBpZiAocHJvcGVydGllc0NvbnRhaW5lclZhciAhPSBudWxsKQotICAgewotJT4KLSAgPCU9cHJvcGVydGllc0NvbnRhaW5lclZhciU+LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChhY3Rpb24uZ2V0UHJvcGVydGllc0NvbnRhaW5lclBhZ2UoKSkpJT4iOwotPCUKLSAgIH0KLSAgIFN0cmluZyBzdGF0dXNDb250ZW50VmFyID0gYWN0aW9uLmdldFN0YXR1c0NvbnRlbnRWYXIoKTsKLSAgIGlmIChzdGF0dXNDb250ZW50VmFyICE9IG51bGwpCi0gICB7Ci0lPgotICA8JT1zdGF0dXNDb250ZW50VmFyJT4ubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGFjdGlvbi5nZXRTdGF0dXNDb250ZW50UGFnZSgpKSklPiI7Ci08JQotICAgfQotJT4KLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL0ltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbi5pbmMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uLmluYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjA4NmI5MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uLmluYworKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCUKLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotICAgLy8gcnVuIHRoZSBhY3Rpb24KLSAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLnJ1bigpOwotICAgYm9vbGVhbiB3cml0dGVuID0gZmFsc2U7Ci0KLSAgIGlmIChhY3Rpb25SZXN1bHQpCi0gICB7Ci0gICAgIC8vIHdyaXRlIHRvIGZpbGUgc3lzdGVtCi0gICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iKTsKLSAgICAgcmVzcG9uc2Uuc2V0SGVhZGVyKCJDb250ZW50LURpc3Bvc2l0aW9uIiwiYXR0YWNobWVudDtmaWxlbmFtZT0iK2FjdGlvbi5nZXREZWZhdWx0RmlsZU5hbWUoKSk7Ci0gICAgIGFjdGlvbi53cml0ZShyZXNwb25zZS5nZXRPdXRwdXRTdHJlYW0oKSk7Ci0gICAgIHdyaXR0ZW4gPSB0cnVlOwotICAgfQotCi0gICBpZiAoIXdyaXR0ZW4pCi0gICB7Ci0lPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTwlCi0gICAgICBTdHJpbmdCdWZmZXIgcGFuZXNGaWxlID0gbmV3IFN0cmluZ0J1ZmZlcigiLyIpOwotICAgICAgcGFuZXNGaWxlLmFwcGVuZChjb250cm9sbGVyLmdldEN1cnJlbnRQZXJzcGVjdGl2ZSgpLmdldFBhbmVzRmlsZSgpKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iPCU9cGFuZXNGaWxlLnRvU3RyaW5nKCklPiIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgICAgaWYgKGFjdGlvbi5nZXRTdGF0dXNDb250ZW50VmFyKCkgIT0gbnVsbCkKLSAgICAgIHsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgPCU9YWN0aW9uLmdldFN0YXR1c0NvbnRlbnRWYXIoKSU+LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChhY3Rpb24uZ2V0U3RhdHVzQ29udGVudFBhZ2UoKSkpJT4iOwotPC9zY3JpcHQ+Ci08JQotICAgICAgfQotJT4gICAgICAKLTwvYm9keT4KLTwvaHRtbD4KLTwlCi0gICB9Ci0lPiAgCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb24uaW5jIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL0ltcG9ydFRvV29ya2JlbmNoQWN0aW9uLmluYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODEyYWQxOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb24uaW5jCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPCUKLSAgIFN0cmluZ0J1ZmZlciBwYW5lc0ZpbGUgPSBuZXcgU3RyaW5nQnVmZmVyKCIvIik7Ci0gICBwYW5lc0ZpbGUuYXBwZW5kKGNvbnRyb2xsZXIuZ2V0Q3VycmVudFBlcnNwZWN0aXZlKCkuZ2V0UGFuZXNGaWxlKCkpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSI8JT1wYW5lc0ZpbGUudG9TdHJpbmcoKSU+IiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotPCUKLSAgIC8vTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLSAgIGlmICghaW5wdXRzVmFsaWQpCi0gICB7Ci0gICAgIFN0cmluZyBzdGF0dXNDb250ZW50VmFyID0gYWN0aW9uLmdldFN0YXR1c0NvbnRlbnRWYXIoKTsKLSAgICAgaWYgKHN0YXR1c0NvbnRlbnRWYXIgIT0gbnVsbCkKLSAgICAgewotJT4KLSAgPCU9c3RhdHVzQ29udGVudFZhciU+LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChhY3Rpb24uZ2V0U3RhdHVzQ29udGVudFBhZ2UoKSkpJT4iOwotPCUKLSAgICAgfQotICAgfQotICAgZWxzZQotICAgewotICAgICBzZXNzaW9uLnNldEF0dHJpYnV0ZShBY3Rpb25JbnB1dHMuSU1QT1JUX0FDVElPTixhY3Rpb24pOyAgIAotICAgICBpZiAoYWN0aW9uLmZpbGVFeGlzdHMoKSkKLSAgICAgewotJT4KLSAgdmFyIHByb2NlZWQgPSB0cnVlOwotPCUgICAgICAgIAotICAgICAgIGlmICghYWN0aW9uLmlzT3ZlcndyaXRlRmlsZXNFbmFibGVkKCkpCi0gICAgICAgewotJT4KLSAgcHJvY2VlZCA9IGNvbmZpcm0oIjwlPUhUTUxVdGlscy5KU01hbmdsZShhY3Rpb24uZ2V0V2ViU2VydmljZVBsdWdpbkZpbGVNZXNzYWdlKCJNU0dfRVJST1JfRklMRV9PVkVSV1JJVEVfRElTQUJMRUQiKSklPiIpOwotPCUKLSAgICAgICB9Ci0lPgotICBpZiAocHJvY2VlZCkKLSAgICBwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChDaGVja1dvcmtiZW5jaEZpbGVSZWFkT25seUFjdGlvbi5nZXRBY3Rpb25MaW5rKCkpKSU+IjsKLTwlCi0gICAgIH0KLSAgICAgZWxzZQotICAgICB7Ci0lPgotICBwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChXcml0ZVdTRExUb1dvcmtiZW5jaEFjdGlvbi5nZXRBY3Rpb25MaW5rKCkpKSU+IjsKLTwlCi0gICAgIH0KLSAgIH0KLSU+Ci08L3NjcmlwdD4gICAKLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9MYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uLmluYyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9MYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uLmluYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWRiZGViNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbi5pbmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlCi0gICAvL0xvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgIC8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24ucnVuKCk7Ci0lPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTwlCi0gICBTdHJpbmdCdWZmZXIgcGFuZXNGaWxlID0gbmV3IFN0cmluZ0J1ZmZlcigiLyIpOwotICAgcGFuZXNGaWxlLmFwcGVuZChjb250cm9sbGVyLmdldEN1cnJlbnRQZXJzcGVjdGl2ZSgpLmdldFBhbmVzRmlsZSgpKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iPCU9cGFuZXNGaWxlLnRvU3RyaW5nKCklPiIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgaWYgKCFhY3Rpb25SZXN1bHQpCi0gICB7Ci0gICAgIFN0cmluZyBzdGF0dXNDb250ZW50VmFyID0gYWN0aW9uLmdldFN0YXR1c0NvbnRlbnRWYXIoKTsKLSAgICAgaWYgKHN0YXR1c0NvbnRlbnRWYXIgIT0gbnVsbCkKLSAgICAgewotJT4gICAgCi08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgPCU9c3RhdHVzQ29udGVudFZhciU+LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChhY3Rpb24uZ2V0U3RhdHVzQ29udGVudFBhZ2UoKSkpJT4iOwotPC9zY3JpcHQ+Ci08JQotICAgICB9Ci0gICB9Ci0lPiAgIAotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL1JldHJpZXZlSGlzdG9yeUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvUmV0cmlldmVIaXN0b3J5QWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWFlMTliMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvUmV0cmlldmVIaXN0b3J5QWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBSZXRyaWV2ZUhpc3RvcnlBY3Rpb24gYWN0aW9uID0gbmV3IFJldHJpZXZlSGlzdG9yeUFjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gICAvLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLSAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLnJ1bigpOwotJT4KLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBVVEYtOCI+Ci0gIDxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9wYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci08JQotICAgQnJlYWRDcnVtYiBiID0gYWN0aW9uLmdldEJyZWFkQ3J1bWIoKTsKLSAgIGlmIChiICE9IG51bGwpCi0gICB7Ci0gICAgIGludCBicmVhZENydW1iUGVyc3BlY3RpdmVJZCA9IGIuZ2V0UGVyc3BlY3RpdmVJZCgpOwotICAgICBpZiAoYnJlYWRDcnVtYlBlcnNwZWN0aXZlSWQgIT0gY29udHJvbGxlci5nZXRDdXJyZW50UGVyc3BlY3RpdmUoKS5nZXRQZXJzcGVjdGl2ZUlkKCkpCi0gICAgIHsKLSAgICAgICAvLyBTd2l0Y2ggdGhlIHBlcnNwZWN0aXZlLgotJT4KLSAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoU2hvd1BlcnNwZWN0aXZlQWN0aW9uLmdldEFjdGlvbkxpbmsoYnJlYWRDcnVtYlBlcnNwZWN0aXZlSWQsdHJ1ZSkpKSU+IjsKLTwlCi0gICAgIH0KLSAgICAgZWxzZQotICAgICB7Ci0gICAgICAgLy8gSnVtcCB0byB0aGUgcGFnZSByZXRyaWV2ZWQgZnJvbSBoaXN0b3J5LgotJT4KLSAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGIuZ2V0VVJMKCkpKSU+IjsKLTwlCi0gICAgIH0KLSAgIH0KLSU+Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9TYXZlQWN0aW9uRW5naW5lU2NlbmFyaW8uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL1NhdmVBY3Rpb25FbmdpbmVTY2VuYXJpby5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwMGI5ZDcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL1NhdmVBY3Rpb25FbmdpbmVTY2VuYXJpby5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUuZGF0YS5TY2VuYXJpb0Rlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5lbmdpbmUuQWN0aW9uRGF0YVBhcnNlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuWE1MVXRpbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEuaW8uUHJpbnRXcml0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy53M2MuZG9tLkVsZW1lbnQiJT4KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLXJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iKTsKLXJlc3BvbnNlLnNldEhlYWRlcigiQ29udGVudC1EaXNwb3NpdGlvbiIsImF0dGFjaG1lbnQ7ZmlsZW5hbWU9c2NlbmFyaW8ueG1sIik7Ci1TY2VuYXJpb0Rlc2NyaXB0b3Igc2NlbmFyaW9EZXNjcmlwdG9yID0gY29udHJvbGxlci5nZXRBY3Rpb25FbmdpbmUoKS5nZXRTY2VuYXJpbygpOwotQWN0aW9uRGF0YVBhcnNlciBwYXJzZXIgPSBuZXcgQWN0aW9uRGF0YVBhcnNlcigpOwotRWxlbWVudCBzY2VuYXJpbyA9IHBhcnNlci50b0VsZW1lbnQoc2NlbmFyaW9EZXNjcmlwdG9yKTsKLWlmIChzY2VuYXJpbyAhPSBudWxsKQotewotICB0cnkKLSAgewotICAgIFN0cmluZyBzY2VuYXJpb1N0cmluZyA9IFhNTFV0aWxzLnNlcmlhbGl6ZShzY2VuYXJpbywgZmFsc2UpOwotICAgIGlmIChzY2VuYXJpb1N0cmluZyAhPSBudWxsKQotICAgIHsKLSAgICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHJlc3BvbnNlLmdldE91dHB1dFN0cmVhbSgpKTsKLSAgICAgIHB3LnByaW50bG4oc2NlbmFyaW9TdHJpbmcpOwotICAgICAgcHcuY2xvc2UoKTsKLSAgICB9Ci0gIH0KLSAgY2F0Y2ggKFRocm93YWJsZSB0KQotICB7Ci0gIH0KLX0KLSU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvU2VsZWN0Tm9kZUFjdGlvbi5pbmMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvU2VsZWN0Tm9kZUFjdGlvbi5pbmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyZjNlZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL1NlbGVjdE5vZGVBY3Rpb24uaW5jCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCUKLSAgIFBlcnNwZWN0aXZlIGN1cnJlbnRQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0Q3VycmVudFBlcnNwZWN0aXZlKCk7Ci0lPgotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IFVURi04Ij4KLTwlCi0gICBTdHJpbmdCdWZmZXIgcGFuZXNGaWxlID0gbmV3IFN0cmluZ0J1ZmZlcigiLyIpOwotICAgcGFuZXNGaWxlLmFwcGVuZChjdXJyZW50UGVyc3BlY3RpdmUuZ2V0UGFuZXNGaWxlKCkpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSI8JT1wYW5lc0ZpbGUudG9TdHJpbmcoKSU+IiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICBpZiAoIWFjdGlvblJlc3VsdCkKLSAgIHsKLSAgICAgaWYgKGFjdGlvbi5pc1N0YWxlQnJlYWRDcnVtYigpKQotICAgICB7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIC8vIFJlcnVuIHRoZSBoaXN0b3J5IGFjdGlvbiB0byBnZXQgdGhlIG5leHQgYXZhaWxhYmxlIGl0ZW0uCi0gIHBlcnNwZWN0aXZlV29ya0FyZWEubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGFjdGlvbi5nZXROZXh0SGlzdG9yeUFjdGlvbkxpbmsoKSkpJT4iOwotPC9zY3JpcHQ+Ci08JQotICAgICB9Ci0gICB9Ci0gICBlbHNlCi0gICB7Ci0gICAgIFN0cmluZyB0cmVlQ29udGVudFZhciA9IGFjdGlvbi5nZXRUcmVlQ29udGVudFZhcigpOwotICAgICBTdHJpbmcgcHJvcGVydGllc0NvbnRhaW5lclZhciA9IGFjdGlvbi5nZXRQcm9wZXJ0aWVzQ29udGFpbmVyVmFyKCk7Ci0gICAgIGlmIChhY3Rpb24ucmVxdWlyZXNUcmVlVmlld1JlZnJlc2goKSkKLSAgICAgewotICAgICAgIGlmICh0cmVlQ29udGVudFZhciAhPSBudWxsKQotICAgICAgIHsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgaWYgKGlzTWljcm9zb2Z0SW50ZXJuZXRFeHBsb3JlcigpKQotICB7Ci0gICAgLy8gVXBkYXRlIHRoZSB0cmVldmlldy4KLSAgICA8JT10cmVlQ29udGVudFZhciU+LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChhY3Rpb24uZ2V0VHJlZUNvbnRlbnRQYWdlKCkpKSU+IjsKLSAgfQotICBlbHNlCi0gICAgcGVyc3BlY3RpdmVDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChjdXJyZW50UGVyc3BlY3RpdmUuZ2V0UGVyc3BlY3RpdmVDb250ZW50UGFnZSgpKSklPiI7ICAKLTwvc2NyaXB0PgotPCUKLSAgICAgICB9Ci0gICAgICAgaWYgKHByb3BlcnRpZXNDb250YWluZXJWYXIgIT0gbnVsbCkKLSAgICAgICB7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGlmIChpc01pY3Jvc29mdEludGVybmV0RXhwbG9yZXIoKSkKLSAgICA8JT1wcm9wZXJ0aWVzQ29udGFpbmVyVmFyJT4ubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGFjdGlvbi5nZXRQcm9wZXJ0aWVzQ29udGFpbmVyUGFnZSgpKSklPiI7Ci08L3NjcmlwdD4KLTwlCi0gICAgICAgfQotICAgICB9Ci0gICAgIGVsc2UKLSAgICAgewotICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gYWN0aW9uLmdldFNlbGVjdGVkTm9kZSgpOwotICAgICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gc2VsZWN0ZWROb2RlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgICAgTm9kZSBwcmV2aW91c1NlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFByZXZpb3VzU2VsZWN0ZWROb2RlKCk7Ci0gICAgICAgaW50IHNlbGVjdGVkTm9kZUlkID0gc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpOwotICAgICAgIGlmICh0cmVlQ29udGVudFZhciAhPSBudWxsKQotICAgICAgIHsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgLy8gVXBkYXRlIHRoZSBwZXJzcGVjdGl2ZS4KLTwlCi0gICAgICAgICBpZiAocHJldmlvdXNTZWxlY3RlZE5vZGUgIT0gbnVsbCAmJiBwcmV2aW91c1NlbGVjdGVkTm9kZS5pc1Zpc2libGUoKSkKLSAgICAgICAgIHsKLSU+Ci0gIDwlPXRyZWVDb250ZW50VmFyJT4uYWx0ZXJJbWFnZSgnPCU9cHJldmlvdXNTZWxlY3RlZE5vZGUuZ2V0QW5jaG9yTmFtZSgpJT4nLCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQocHJldmlvdXNTZWxlY3RlZE5vZGUuZ2V0Q2xvc2VkSW1hZ2VQYXRoKCkpKSU+Jyk7Ci08JQotICAgICAgICAgfQotICAgICAgICAgU3RyaW5nIHNlbGVjdGVkTm9kZUFuY2hvck5hbWUgPSBzZWxlY3RlZE5vZGUuZ2V0QW5jaG9yTmFtZSgpOwotJT4KLSAgPCU9dHJlZUNvbnRlbnRWYXIlPi5zZWxlY3ROb2RlKCc8JT1zZWxlY3RlZE5vZGVBbmNob3JOYW1lJT4nLCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoc2VsZWN0ZWROb2RlLmdldE9wZW5JbWFnZVBhdGgoKSkpJT4nKTsKLSAgPCU9dHJlZUNvbnRlbnRWYXIlPi5sb2NhdGlvbi5oYXNoID0gJyM8JT1zZWxlY3RlZE5vZGVBbmNob3JOYW1lJT4nOwotPCUKLSAgICAgICB9Ci0gICAgICAgaWYgKHByb3BlcnRpZXNDb250YWluZXJWYXIgIT0gbnVsbCkKLSAgICAgICB7Ci0lPgotICA8JT1wcm9wZXJ0aWVzQ29udGFpbmVyVmFyJT4ubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGFjdGlvbi5nZXRQcm9wZXJ0aWVzQ29udGFpbmVyUGFnZSgpKSklPiI7Ci08JQotICAgICAgIH0KLSU+Ci08L3NjcmlwdD4KLTwlCi0gICAgIH0KLSAgIH0KLSU+Ci08L2JvZHk+Ci08aHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9TZWxlY3ROb2RlVG9vbEFjdGlvbi5pbmMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvU2VsZWN0Tm9kZVRvb2xBY3Rpb24uaW5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzM3ZjJiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9TZWxlY3ROb2RlVG9vbEFjdGlvbi5pbmMKKysrIC9kZXYvbnVsbApAQCAtMSwxODIgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JQotICAgUGVyc3BlY3RpdmUgY3VycmVudFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRDdXJyZW50UGVyc3BlY3RpdmUoKTsKLSU+Ci08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgVVRGLTgiPgotPCUKLSAgIFN0cmluZ0J1ZmZlciBwYW5lc0ZpbGUgPSBuZXcgU3RyaW5nQnVmZmVyKCIvIik7Ci0gICBwYW5lc0ZpbGUuYXBwZW5kKGN1cnJlbnRQZXJzcGVjdGl2ZS5nZXRQYW5lc0ZpbGUoKSk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9IjwlPXBhbmVzRmlsZS50b1N0cmluZygpJT4iIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIGlmICghYWN0aW9uUmVzdWx0KQotICAgewotICAgICBpZiAoYWN0aW9uLmlzU3RhbGVCcmVhZENydW1iKCkpCi0gICAgIHsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgLy8gUmVydW4gdGhlIGhpc3RvcnkgYWN0aW9uIHRvIGdldCB0aGUgbmV4dCBhdmFpbGFibGUgaXRlbS4KLSAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoYWN0aW9uLmdldE5leHRIaXN0b3J5QWN0aW9uTGluaygpKSklPiI7Ci08L3NjcmlwdD4KLTwlCi0gICAgIH0KLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSAgICAgaWYgKGFjdGlvbi5yZXF1aXJlc1N0YXR1c1VwZGF0ZSgpKQotICAgICB7Ci0gICAgICAgU3RyaW5nIHN0YXR1c0NvbnRlbnRWYXIgPSBhY3Rpb24uZ2V0U3RhdHVzQ29udGVudFZhcigpOwotICAgICAgIGlmIChzdGF0dXNDb250ZW50VmFyICE9IG51bGwpCi0gICAgICAgewotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAvLyBVcGRhdGUgdGhlIHN0YXR1cyBjb250ZW50IHdpdGggYW55IG1lc3NhZ2VzIGFyaXNpbmcgZnJvbSB0aGlzIGFjdGlvbi4KLSAgPCU9c3RhdHVzQ29udGVudFZhciU+LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChhY3Rpb24uZ2V0U3RhdHVzQ29udGVudFBhZ2UoKSkpJT4iOwotPC9zY3JpcHQ+ICAKLTwlICAgIAotICAgICAgIH0KLSAgICAgfSAKLSAgICAgICAgCi0gICAgIFN0cmluZyB0cmVlQ29udGVudFZhciA9IGFjdGlvbi5nZXRUcmVlQ29udGVudFZhcigpOwotICAgICBTdHJpbmcgcHJvcGVydGllc0NvbnRhaW5lclZhciA9IGFjdGlvbi5nZXRQcm9wZXJ0aWVzQ29udGFpbmVyVmFyKCk7Ci0gICAgIGlmIChhY3Rpb24ucmVxdWlyZXNUcmVlVmlld1JlZnJlc2goKSkKLSAgICAgewotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotPCUKLSAgICAgICBpZiAodHJlZUNvbnRlbnRWYXIgIT0gbnVsbCkKLSAgICAgICB7Ci0lPgotICBpZiAoaXNNaWNyb3NvZnRJbnRlcm5ldEV4cGxvcmVyKCkpCi0gIHsKLSAgICAvLyBSZWxvYWQgdGhlIG5hdmlnYXRvciB0cmVlIHZpZXcgdG8gc2hvdyB0aGUgc3RydWN0dXJhbCBjaGFuZ2UuCi0gICAgPCU9dHJlZUNvbnRlbnRWYXIlPi5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoYWN0aW9uLmdldFRyZWVDb250ZW50UGFnZSgpKSklPiI7Ci0gIH0KLSAgZWxzZQotICB7Ci0gICAgcGVyc3BlY3RpdmVDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChjdXJyZW50UGVyc3BlY3RpdmUuZ2V0UGVyc3BlY3RpdmVDb250ZW50UGFnZSgpKSklPiI7Ci0gIH0KLTwlCi0gICAgICAgfQotICAgICAgIGlmIChwcm9wZXJ0aWVzQ29udGFpbmVyVmFyICE9IG51bGwpCi0gICAgICAgewotJT4KLSAgaWYgKGlzTWljcm9zb2Z0SW50ZXJuZXRFeHBsb3JlcigpKQotICAgIDwlPXByb3BlcnRpZXNDb250YWluZXJWYXIlPi5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoYWN0aW9uLmdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCkpKSU+IjsKLTwlCi0gICAgICAgfQotJT4KLTwvc2NyaXB0PgotPCUKLSAgICAgfQotICAgICBlbHNlIGlmIChhY3Rpb24ucmVxdWlyZXNOb2RlU2VsZWN0aW9uKCkpCi0gICAgIHsKLSAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IGFjdGlvbi5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHNlbGVjdGVkTm9kZS5nZXROb2RlTWFuYWdlcigpOwotICAgICAgIE5vZGUgcHJldmlvdXNTZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRQcmV2aW91c1NlbGVjdGVkTm9kZSgpOwotICAgICAgIGludCBzZWxlY3RlZE5vZGVJZCA9IHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKTsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLTwlCi0gICAgICAgaWYgKHRyZWVDb250ZW50VmFyICE9IG51bGwpCi0gICAgICAgewotJT4KLSAgLy8gVXBkYXRlIHRoZSBuYXZpZ2F0b3IgdHJlZSB0byBzaG93IHRoZSBzZWxlY3Rpb24uCi08JQotICAgICAgICAgaWYgKHByZXZpb3VzU2VsZWN0ZWROb2RlICE9IG51bGwpCi0gICAgICAgICB7Ci0lPgotICA8JT10cmVlQ29udGVudFZhciU+LmFsdGVySW1hZ2UoJzwlPXByZXZpb3VzU2VsZWN0ZWROb2RlLmdldEFuY2hvck5hbWUoKSU+JywnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KHByZXZpb3VzU2VsZWN0ZWROb2RlLmdldENsb3NlZEltYWdlUGF0aCgpKSklPicpOwotPCUKLSAgICAgICAgIH0KLSAgICAgICAgIFN0cmluZyBzZWxlY3RlZE5vZGVBbmNob3JOYW1lID0gc2VsZWN0ZWROb2RlLmdldEFuY2hvck5hbWUoKTsKLSU+Ci0gIDwlPXRyZWVDb250ZW50VmFyJT4uc2VsZWN0Tm9kZSgnPCU9c2VsZWN0ZWROb2RlQW5jaG9yTmFtZSU+JywnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KHNlbGVjdGVkTm9kZS5nZXRPcGVuSW1hZ2VQYXRoKCkpKSU+Jyk7Ci0gIDwlPXRyZWVDb250ZW50VmFyJT4ubG9jYXRpb24uaGFzaCA9ICcjPCU9c2VsZWN0ZWROb2RlQW5jaG9yTmFtZSU+JzsKLTwlCi0gICAgICAgfQotICAgICAgIGlmIChwcm9wZXJ0aWVzQ29udGFpbmVyVmFyICE9IG51bGwpCi0gICAgICAgewotJT4KLSAgPCU9cHJvcGVydGllc0NvbnRhaW5lclZhciU+LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChhY3Rpb24uZ2V0UHJvcGVydGllc0NvbnRhaW5lclBhZ2UoKSkpJT4iOwotPCUKLSAgICAgICB9Ci0lPgotPC9zY3JpcHQ+Ci08JQotICAgICB9Ci0gICAgIGVsc2UgaWYgKGFjdGlvbi5yZXF1aXJlc1ZpZXdTZWxlY3Rpb24oKSkKLSAgICAgewotICAgICAgIGlmIChwcm9wZXJ0aWVzQ29udGFpbmVyVmFyICE9IG51bGwpCi0gICAgICAgewotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAvLyBVcGRhdGUgdGhlIHByb3BlcnRpZXMgY29udGFpbmVyIHRvIHNob3cgdGhlIHZpZXcuCi0gIDwlPXByb3BlcnRpZXNDb250YWluZXJWYXIlPi5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoYWN0aW9uLmdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCkpKSU+IjsKLTwvc2NyaXB0PgotPCUKLSAgICAgICB9Ci0gICAgIH0KLSAgICAgZWxzZQotICAgICB7Ci0gICAgICAgU3RyaW5nIHByb3BlcnRpZXNDb250ZW50VmFyID0gYWN0aW9uLmdldFByb3BlcnRpZXNDb250ZW50VmFyKCk7Ci0gICAgICAgVG9vbCB0b29sID0gYWN0aW9uLmdldFNlbGVjdGVkVmlld1Rvb2woKTsKLSAgICAgICBpZiAodG9vbCA9PSBudWxsKQotICAgICAgICAgdG9vbCA9IGFjdGlvbi5nZXRTZWxlY3RlZFRvb2woKTsKLSAgICAgICBpZiAodG9vbC5nZXRUb29sVHlwZSgpICE9IFRvb2xUeXBlcy5BQ1RJT04pCi0gICAgICAgewotICAgICAgICAgaWYgKHByb3BlcnRpZXNDb250ZW50VmFyICE9IG51bGwpCi0gICAgICAgICB7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIC8vIFVwZGF0ZSB0aGUgcHJvcGVydGllcyBjb250ZW50IHdpdGggdGhlIHRvb2wncyBmb3JtLgotICA8JT1wcm9wZXJ0aWVzQ29udGVudFZhciU+LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCh0b29sLmdldEZvcm1MaW5rKCkpKSU+IjsKLTwvc2NyaXB0PgotPCUKLSAgICAgICAgIH0KLSAgICAgICB9Ci0gICAgICAgZWxzZQotICAgICAgIHsKLSAgICAgICAgIGlmICghYWN0aW9uLmlzSGlzdG9yeUFjdGlvbigpKQotICAgICAgICAgewotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAvLyBSdW4gdGhlIHRvb2wncyBhY3Rpb24gb25seSBpZiBpdCBpcyBub3QgZnJvbSB0aGUgaGlzdG9yeS4KLSAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQodG9vbC5nZXRBY3Rpb25MaW5rKCkpKSU+IjsKLTwvc2NyaXB0PgotPCUKLSAgICAgICAgIH0KLSAgICAgICAgIGVsc2UKLSAgICAgICAgIHsKLSAgICAgICAgICAgaWYgKHByb3BlcnRpZXNDb250ZW50VmFyICE9IG51bGwpCi0gICAgICAgICAgIHsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgPCU9cHJvcGVydGllc0NvbnRlbnRWYXIlPi5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoYWN0aW9uLmdldFByb3BlcnRpZXNDb250ZW50UGFnZSgpKSklPiI7Ci08L3NjcmlwdD4KLTwlCi0gICAgICAgICAgIH0KLSAgICAgICAgIH0KLSAgICAgICB9Ci0gICAgIH0KLSAgIH0KLSU+Ci08L2JvZHk+Ci08aHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvYWN0aW9ucy9TaG93UGVyc3BlY3RpdmVBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL1Nob3dQZXJzcGVjdGl2ZUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwMWRkZTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL1Nob3dQZXJzcGVjdGl2ZUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgUGVyc3BlY3RpdmUgY3VycmVudFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRDdXJyZW50UGVyc3BlY3RpdmUoKTsKLSAgIFN0cmluZ0J1ZmZlciBmcmFtZXNldHNGaWxlID0gbmV3IFN0cmluZ0J1ZmZlcigiLyIpOwotICAgZnJhbWVzZXRzRmlsZS5hcHBlbmQoY3VycmVudFBlcnNwZWN0aXZlLmdldEZyYW1lc2V0c0ZpbGUoKSk7Ci0gICAKLSAgIFN0cmluZ0J1ZmZlciBmcmFtZXNldHNGb3JtID0gbmV3IFN0cmluZ0J1ZmZlcigiLyIpOwotICAgZnJhbWVzZXRzRm9ybS5hcHBlbmQoY3VycmVudFBlcnNwZWN0aXZlLmdldFByb2Nlc3NGcmFtZXNldHNGb3JtKCkpOwotICAgCi0gICBpbnQgdGFyZ2V0UGVyc3BlY3RpdmVJZDsKLSAgIGJvb2xlYW4gaXNIaXN0b3J5OwotICAgdHJ5Ci0gICB7Ci0gICAgIHRhcmdldFBlcnNwZWN0aXZlSWQgPSBJbnRlZ2VyLnBhcnNlSW50KHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5QRVJTUEVDVElWRSkpOwotICAgICBpc0hpc3RvcnkgPSAoIjEiLmVxdWFscyhyZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuSVNISVNUT1JZKSkpOwotICAgfQotICAgY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKQotICAgewotICAgICB0YXJnZXRQZXJzcGVjdGl2ZUlkID0gQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1VEREk7Ci0gICAgIGlzSGlzdG9yeSA9IGZhbHNlOwotICAgfQotICAgCi0gICBpZiAoY29udHJvbGxlci5pc1BlcnNwZWN0aXZlQ29udGVudEJsYW5rKCkpCi0gICB7Ci0gICAgIGNvbnRyb2xsZXIuZW5hYmxlUGVyc3BlY3RpdmVDb250ZW50QmxhbmsoZmFsc2UpOwotICAgICBjb250cm9sbGVyLmFkZFRvSGlzdG9yeShjdXJyZW50UGVyc3BlY3RpdmUuZ2V0UGVyc3BlY3RpdmVJZCgpLFNob3dQZXJzcGVjdGl2ZUFjdGlvbi5nZXRBY3Rpb25MaW5rKHRhcmdldFBlcnNwZWN0aXZlSWQsdHJ1ZSkpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9zd2l0Y2hwZXJzcGVjdGl2ZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgfQotICAgZWxzZQotICAgewotJT4KLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPGpzcDppbmNsdWRlIHBhZ2U9IjwlPWZyYW1lc2V0c0ZpbGUudG9TdHJpbmcoKSU+IiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUFjdGlvbiIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gICBmb3JtQWN0aW9uLmFwcGVuZChjdXJyZW50UGVyc3BlY3RpdmUuZ2V0U3dpdGNoUGVyc3BlY3RpdmVGb3JtQWN0aW9uTGluayh0YXJnZXRQZXJzcGVjdGl2ZUlkLGlzSGlzdG9yeSkpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08anNwOnVzZUJlYW4gaWQ9ImZvcm1GcmFtZU5hbWUiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDppbmNsdWRlIHBhZ2U9IjwlPWZyYW1lc2V0c0Zvcm0udG9TdHJpbmcoKSU+IiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHByb2Nlc3NGcmFtZXNldFNpemVzKGRvY3VtZW50LmZvcm1zWzBdKTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgotPCUKLSAgIH0KLSU+ICAgCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvVG9nZ2xlTm9kZUFjdGlvbi5pbmMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvVG9nZ2xlTm9kZUFjdGlvbi5pbmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwNmZlOTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL1RvZ2dsZU5vZGVBY3Rpb24uaW5jCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JQotICAgUGVyc3BlY3RpdmUgY3VycmVudFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRDdXJyZW50UGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgVVRGLTgiPgotPCUKLSAgIFN0cmluZ0J1ZmZlciBwYW5lc0ZpbGUgPSBuZXcgU3RyaW5nQnVmZmVyKCIvIik7Ci0gICBwYW5lc0ZpbGUuYXBwZW5kKGN1cnJlbnRQZXJzcGVjdGl2ZS5nZXRQYW5lc0ZpbGUoKSk7Ci0lPiAgICAgCi08anNwOmluY2x1ZGUgcGFnZT0iPCU9cGFuZXNGaWxlLnRvU3RyaW5nKCklPiIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4gIAotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICBpZiAoIWFjdGlvblJlc3VsdCkKLSAgIHsKLSAgICAgaWYgKGFjdGlvbi5pc1N0YWxlQnJlYWRDcnVtYigpKQotICAgICB7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIC8vIFJlcnVuIHRoZSBoaXN0b3J5IGFjdGlvbiB0byBnZXQgdGhlIG5leHQgYXZhaWxhYmxlIGl0ZW0uCi0gIHBlcnNwZWN0aXZlV29ya0FyZWEubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGFjdGlvbi5nZXROZXh0SGlzdG9yeUFjdGlvbkxpbmsoKSkpJT4iOwotPC9zY3JpcHQ+Ci08JQotICAgICB9Ci0gICB9Ci0gICBlbHNlCi0gICB7Ci0gICAgIFN0cmluZyB0cmVlQ29udGVudFZhciA9IGFjdGlvbi5nZXRUcmVlQ29udGVudFZhcigpOwotICAgICBpZiAodHJlZUNvbnRlbnRWYXIgIT0gbnVsbCkKLSAgICAgewotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBpZiAoaXNNaWNyb3NvZnRJbnRlcm5ldEV4cGxvcmVyKCkpCi0gIHsKLSAgICAvLyBVcGRhdGUgdGhlIHBlcnNwZWN0aXZlLgotICAgIDwlPXRyZWVDb250ZW50VmFyJT4ubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGFjdGlvbi5nZXRUcmVlQ29udGVudFBhZ2UoKSkpJT4iOwotICB9Ci0gIGVsc2UKLSAgICBwZXJzcGVjdGl2ZUNvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGN1cnJlbnRQZXJzcGVjdGl2ZS5nZXRQZXJzcGVjdGl2ZUNvbnRlbnRQYWdlKCkpKSU+IjsKLTwvc2NyaXB0PgotPCUKLSAgICAgfQotICAgICBpZiAoYWN0aW9uLnJlcXVpcmVzTm9kZVNlbGVjdGlvbigpKQotICAgICB7Ci0gICAgICAgU3RyaW5nIHByb3BlcnRpZXNDb250YWluZXJWYXIgPSBhY3Rpb24uZ2V0UHJvcGVydGllc0NvbnRhaW5lclZhcigpOwotICAgICAgIGlmIChwcm9wZXJ0aWVzQ29udGFpbmVyVmFyICE9IG51bGwpCi0gICAgICAgewotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBpZiAoaXNNaWNyb3NvZnRJbnRlcm5ldEV4cGxvcmVyKCkpCi0gIHsKLSAgICAvLyBVcGRhdGUgdGhlIHByb3BlcnRpZXMgY29udGFpbmVyLgotICAgIDwlPXByb3BlcnRpZXNDb250YWluZXJWYXIlPi5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoYWN0aW9uLmdldFByb3BlcnRpZXNDb250YWluZXJQYWdlKCkpKSU+IjsKLSAgfQotPC9zY3JpcHQ+Ci08JQotICAgICAgIH0KLSAgICAgfQotICAgfQotJT4KLTwvYm9keT4KLTxodG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL1ZhbGlkYXRlRWRpdEFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvVmFsaWRhdGVFZGl0QWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjA1MzgzMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvVmFsaWRhdGVFZGl0QWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTwlCi0gICBTdHJpbmdCdWZmZXIgcGFuZXNGaWxlID0gbmV3IFN0cmluZ0J1ZmZlcigiLyIpOwotICAgcGFuZXNGaWxlLmFwcGVuZChjb250cm9sbGVyLmdldEN1cnJlbnRQZXJzcGVjdGl2ZSgpLmdldFBhbmVzRmlsZSgpKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iPCU9cGFuZXNGaWxlLnRvU3RyaW5nKCklPiIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb24gYWN0aW9uID0gKEltcG9ydFRvV29ya2JlbmNoQWN0aW9uKXNlc3Npb24uZ2V0QXR0cmlidXRlKEFjdGlvbklucHV0cy5JTVBPUlRfQUNUSU9OKTsKLSAgIGJvb2xlYW4gcmVzdWx0ID0gYWN0aW9uLnZhbGlkYXRlRWRpdCgpOwotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBpZiAoPCU9cmVzdWx0JT4pCi0gICAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoV3JpdGVXU0RMVG9Xb3JrYmVuY2hBY3Rpb24uZ2V0QWN0aW9uTGluaygpKSklPiI7Ci0gIGVsc2UKLSAgewotPCUgIAotICAgU3RyaW5nIHN0YXR1c0NvbnRlbnRWYXIgPSBhY3Rpb24uZ2V0U3RhdHVzQ29udGVudFZhcigpOwotICAgaWYgKHN0YXR1c0NvbnRlbnRWYXIgIT0gbnVsbCkKLSAgIHsKLSU+ICAgIAotICAgIDwlPXN0YXR1c0NvbnRlbnRWYXIlPi5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoYWN0aW9uLmdldFN0YXR1c0NvbnRlbnRQYWdlKCkpKSU+IjsKLTwlCi0gICB9Ci0lPgotICB9Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4gCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvV3JpdGVXU0RMVG9Xb3JrYmVuY2hBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9hY3Rpb25zL1dyaXRlV1NETFRvV29ya2JlbmNoQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDZhOTk0MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2FjdGlvbnMvV3JpdGVXU0RMVG9Xb3JrYmVuY2hBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPCUKLSAgIFN0cmluZ0J1ZmZlciBwYW5lc0ZpbGUgPSBuZXcgU3RyaW5nQnVmZmVyKCIvIik7Ci0gICBwYW5lc0ZpbGUuYXBwZW5kKGNvbnRyb2xsZXIuZ2V0Q3VycmVudFBlcnNwZWN0aXZlKCkuZ2V0UGFuZXNGaWxlKCkpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSI8JT1wYW5lc0ZpbGUudG9TdHJpbmcoKSU+IiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICBJbXBvcnRUb1dvcmtiZW5jaEFjdGlvbiBhY3Rpb24gPSAoSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb24pc2Vzc2lvbi5nZXRBdHRyaWJ1dGUoQWN0aW9uSW5wdXRzLklNUE9SVF9BQ1RJT04pOwotICAgYWN0aW9uLnJ1bigpOwotICAgU3RyaW5nIHN0YXR1c0NvbnRlbnRWYXIgPSBhY3Rpb24uZ2V0U3RhdHVzQ29udGVudFZhcigpOwotICAgaWYgKHN0YXR1c0NvbnRlbnRWYXIgIT0gbnVsbCkKLSAgIHsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgPCU9c3RhdHVzQ29udGVudFZhciU+LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChhY3Rpb24uZ2V0U3RhdHVzQ29udGVudFBhZ2UoKSkpJT4iOwotPC9zY3JpcHQ+ICAKLTwlCi0gICB9Ci0lPgotPC9ib2R5PgotPC9odG1sPiAKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvY2FsZW5kYXJfYnJvd3Nlci5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2NhbGVuZGFyX2Jyb3dzZXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNWMxZTg4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvY2FsZW5kYXJfYnJvd3Nlci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5uZXQuKiIgJT4KLQotPCUKLSAgIFN0cmluZyBzZXNzaW9uSWQgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuU0VTU0lPTklEKTsKLSAgIEh0dHBTZXNzaW9uIGN1cnJlbnRTZXNzaW9uID0gKEh0dHBTZXNzaW9uKWFwcGxpY2F0aW9uLmdldEF0dHJpYnV0ZShzZXNzaW9uSWQpOwotICAgQ29udHJvbGxlciBjb250cm9sbGVyID0gKENvbnRyb2xsZXIpY3VycmVudFNlc3Npb24uZ2V0QXR0cmlidXRlKCJjb250cm9sbGVyIik7Ci0lPgotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+Ci0gICAgPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJUSVRMRV9DQUxFTkRBUl9CUk9XU0VSIiklPgotICA8L3RpdGxlPgotPC9oZWFkPgotPGZyYW1lc2V0IHJvd3M9IjMzLCoiIGJvcmRlcj0wIGJnY29sb3I9IiNFQ0U5RDgiPgotPCUKLSAgIFN0cmluZ0J1ZmZlciBsaW5rID0gbmV3IFN0cmluZ0J1ZmZlcigiY2FsZW5kYXJfdG9vbGJhci5qc3A/Iik7Ci0gICBsaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuU0VTU0lPTklEKS5hcHBlbmQoJz0nKS5hcHBlbmQoc2Vzc2lvbklkKTsKLSU+ICAgCi0gIDxmcmFtZSBuYW1lPSI8JT1GcmFtZU5hbWVzLkNBTEVOREFSX1RPT0xCQVIlPiIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfQ0FMRU5EQVJfVE9PTEJBUiIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGxpbmsudG9TdHJpbmcoKSkpJT4iIG5vcmVzaXplIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTAgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MD4KLTwlCi0gICBsaW5rLnNldExlbmd0aCgwKTsKLSAgIGxpbmsuYXBwZW5kKCJjYWxlbmRhcl9jb250ZW50LmpzcD8iKTsKLSAgIGxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpLmFwcGVuZCgnPScpLmFwcGVuZChzZXNzaW9uSWQpOwotICAgbGluay5hcHBlbmQoJyYnKS5hcHBlbmQoQWN0aW9uSW5wdXRzLkNBTEVOREFSX1RZUEUpLmFwcGVuZCgnPScpLmFwcGVuZChyZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuQ0FMRU5EQVJfVFlQRSkpOwotJT4gICAgIAotICA8ZnJhbWUgbmFtZT0iPCU9RnJhbWVOYW1lcy5DQUxFTkRBUl9DT05URU5UJT4iIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX0NBTEVOREFSX0NPTlRFTlQiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChsaW5rLnRvU3RyaW5nKCkpKSU+IiBub3Jlc2l6ZSBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci08L2ZyYW1lc2V0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9jYWxlbmRhcl9jb250ZW50LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvY2FsZW5kYXJfY29udGVudC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2YzZjZDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9jYWxlbmRhcl9jb250ZW50LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDYyNiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPCUKLSAgIFN0cmluZyBzZXNzaW9uSWQgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuU0VTU0lPTklEKTsKLSAgIEh0dHBTZXNzaW9uIGN1cnJlbnRTZXNzaW9uID0gKEh0dHBTZXNzaW9uKWFwcGxpY2F0aW9uLmdldEF0dHJpYnV0ZShzZXNzaW9uSWQpOwotICAgQ29udHJvbGxlciBjb250cm9sbGVyID0gKENvbnRyb2xsZXIpY3VycmVudFNlc3Npb24uZ2V0QXR0cmlidXRlKCJjb250cm9sbGVyIik7Ci0gICBpbnQgY2FsZW5kYXJUeXBlID0gSW50ZWdlci5wYXJzZUludChyZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuQ0FMRU5EQVJfVFlQRSkpOwotJT4KLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KLSAgPHRpdGxlPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfQ0FMRU5EQVJfQ09OVEVOVCIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy9jYWxlbmRhci5jc3MiKSklPiI+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHZhciBkYXlzID0gbmV3IEFycmF5KCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1NIX1NVTkRBWSIpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9TSF9NT05EQVkiKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShjb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfU0hfVFVFU0RBWSIpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9TSF9XRURORVNEQVkiKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShjb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfU0hfVEhVUlNEQVkiKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShjb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfU0hfRlJJREFZIikpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1NIX1NBVFVSREFZIikpJT4iKTsKLSAgdmFyIG1vbnRocyA9IG5ldyBBcnJheSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9KQU5VQVJZIikpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0ZFQlJVQVJZIikpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX01BUkNIIikpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0FQUklMIikpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX01BWSIpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9KVU5FIikpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0pVTFkiKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShjb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQVVHVVNUIikpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1NFUFRFTUJFUiIpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9PQ1RPQkVSIikpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05PVkVNQkVSIikpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0RFQ0VNQkVSIikpJT4iKTsKLSAgdmFyIGVuZ01vbnRocyA9IG5ldyBBcnJheSgiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiKTsKLSAgdmFyIGN1cnJlbnREYXRlOwotICB2YXIgY2FsZW5kYXJCb2R5U2V0ID0gZmFsc2U7Ci0gIHZhciBjYWxlbmRhckJvZHk7Ci0gIHZhciBzYXZlZFllYXJUZXh0VmFsdWUgPSAiIjsKLQotPCUKLSAgIC8vIFJlZ3VsYXIgZXhwcmVzc2lvbnMKLSAgIC8vIHRpbWUgICAgICAgLSBISDpNTTpTU1suU1NTXQotICAgLy8geWVhciAgICAgICAtIFkqCi0gICAvLyBkYXRlICAgICAgIC0gWVlZWSstTU0tREQKLSAgIC8vIGRhdGVUaW1lICAgLSBZWVlZKy1NTS1ERFRISDpNTTpTU1suU1NTXVoKLSAgIC8vIGdZZWFyTW9udGggLSBZWVlZKy1NTSAKLSAgIC8vIGdEYXkgICAgICAgLSAtLS1ERAotICAgLy8gZ01vbnRoRGF5ICAtIC0tTU0tREQKLSU+Ci0gIHZhciB0aW1lUmVnRXhwID0gL14oXGR7Mn0pOihcZHsyfSk6KFxkezJ9KShcLlxkezN9KT8kLzsKLSAgdmFyIHllYXJSZWdFeHAgPSAvXihcZCopJC87Ci0gIHZhciBkYXRlUmVnRXhwID0gL14oXGR7NCx9KS0oXGR7Mn0pLShcZHsyfSkkLzsKLSAgdmFyIGRhdGVUaW1lUmVnRXhwID0gL14oXGR7NCx9KS0oXGR7Mn0pLShcZHsyfSlUKFxkezJ9KTooXGR7Mn0pOihcZHsyfSkoXC5cZHszfSk/WiQvOwotICB2YXIgZ1llYXJNb250aFJlZ0V4cCA9IC9eKFxkezQsfSktKFxkezJ9KSQvOwotICB2YXIgZ0RheVJlZ0V4cCA9IC9eLXszfShcZHsyfSkkLzsKLSAgdmFyIGdNb250aERheVJlZ0V4cCA9IC9eLXsyfShcZHsyfSktKFxkezJ9KSQvOwotCi0gIGZ1bmN0aW9uIHZhbGlkYXRlWWVhclN0cmluZyh5ZWFyU3RyaW5nKQotICB7Ci0gICAgcmV0dXJuIHllYXJSZWdFeHAudGVzdCh5ZWFyU3RyaW5nKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGdldFRpbWVQYXJhbWV0ZXJzKHRpbWVTdHJpbmcpCi0gIHsKLSAgICByZXR1cm4gdGltZVJlZ0V4cC5leGVjKHRpbWVTdHJpbmcpOwotICB9Ci0KLSAgZnVuY3Rpb24gZ2V0RGF0ZVBhcmFtZXRlcnMoZGF0ZVN0cmluZykKLSAgewotICAgIHJldHVybiBkYXRlUmVnRXhwLmV4ZWMoZGF0ZVN0cmluZyk7Ci0gIH0KLQotICBmdW5jdGlvbiBnZXREYXRlVGltZVBhcmFtZXRlcnMoZGF0ZVRpbWVTdHJpbmcpCi0gIHsKLSAgICByZXR1cm4gZGF0ZVRpbWVSZWdFeHAuZXhlYyhkYXRlVGltZVN0cmluZyk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGdldEdZZWFyTW9udGhQYXJhbWV0ZXJzKGdZZWFyTW9udGhTdHJpbmcpCi0gIHsKLSAgICByZXR1cm4gZ1llYXJNb250aFJlZ0V4cC5leGVjKGdZZWFyTW9udGhTdHJpbmcpOwotICB9Ci0gIAotICBmdW5jdGlvbiBnZXRHRGF5UGFyYW1ldGVycyhnRGF5U3RyaW5nKQotICB7Ci0gICAgcmV0dXJuIGdEYXlSZWdFeHAuZXhlYyhnRGF5U3RyaW5nKTsKLSAgfQotICAKLSAgZnVuY3Rpb24gZ2V0R01vbnRoRGF5UGFyYW1ldGVycyhnTW9udGhEYXlTdHJpbmcpCi0gIHsKLSAgICByZXR1cm4gZ01vbnRoRGF5UmVnRXhwLmV4ZWMoZ01vbnRoRGF5U3RyaW5nKTsKLSAgfQotICAKLTwlCi0gICAvLyBISDpNTTpTU1suU1NTXQotJT4KLSAgZnVuY3Rpb24gc2VyaWFsaXplVGltZShob3VycyxtaW51dGVzLHNlY29uZHMsbWlsbGlzZWNvbmRzKQotICB7Ci0gICAgdmFyIHRpbWVTdHJpbmcgPSAiIjsKLSAgICBpZiAoaG91cnMgPCAxMCkKLSAgICAgIHRpbWVTdHJpbmcgKz0gIjAiOwotICAgIHRpbWVTdHJpbmcgKz0gaG91cnMgKyAiOiI7Ci0gICAgaWYgKG1pbnV0ZXMgPCAxMCkKLSAgICAgIHRpbWVTdHJpbmcgKz0gIjAiOwotICAgIHRpbWVTdHJpbmcgKz0gbWludXRlcyArICI6IjsKLSAgICBpZiAoc2Vjb25kcyA8IDEwKQotICAgICAgdGltZVN0cmluZyArPSAiMCI7Ci0gICAgdGltZVN0cmluZyArPSBzZWNvbmRzOwotICAgIGlmIChtaWxsaXNlY29uZHMgPiAwKQotICAgIHsKLSAgICAgIHRpbWVTdHJpbmcgKz0gIi4iOwotICAgICAgaWYgKG1pbGxpc2Vjb25kcyA8IDEwMCkKLSAgICAgIHsKLSAgICAgICAgaWYgKG1pbGxpc2Vjb25kcyA8IDEwKQotICAgICAgICAgIHRpbWVTdHJpbmcgKz0gIjAwIjsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHRpbWVTdHJpbmcgKz0gIjAiOwotICAgICAgfQotICAgICAgdGltZVN0cmluZyArPSBtaWxsaXNlY29uZHM7Ci0gICAgfQotICAgIHJldHVybiB0aW1lU3RyaW5nOwotICB9Ci0KLTwlCi0gICAvLyBZWVlZKy1NTQotJT4gICAKLSAgZnVuY3Rpb24gc2VyaWFsaXplR1llYXJNb250aChmdWxsWWVhcixtb250aCkKLSAgewotICAgIHZhciBnWWVhck1vbnRoU3RyaW5nID0gIiI7Ci0gICAgaWYgKGZ1bGxZZWFyIDwgMTAwMCkKLSAgICB7Ci0gICAgICBpZiAoZnVsbFllYXIgPCAxMDApCi0gICAgICB7Ci0gICAgICAgIGlmIChmdWxsWWVhciA8IDEwKQotICAgICAgICAgIGdZZWFyTW9udGhTdHJpbmcgKz0gIjAwMCI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBnWWVhck1vbnRoU3RyaW5nICs9ICIwMCI7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIGdZZWFyTW9udGhTdHJpbmcgKz0gIjAiOwotICAgIH0KLSAgICBnWWVhck1vbnRoU3RyaW5nICs9IGZ1bGxZZWFyKyItIjsKLSAgICBpZiAobW9udGggPCAxMCkKLSAgICAgIGdZZWFyTW9udGhTdHJpbmcgKz0gIjAiOwotICAgIGdZZWFyTW9udGhTdHJpbmcgKz0gbW9udGg7Ci0gICAgcmV0dXJuIGdZZWFyTW9udGhTdHJpbmc7ICAgIAotICB9Ci0gIAotPCUKLSAgIC8vIFlZWVkrLU1NLURECi0lPgotICBmdW5jdGlvbiBzZXJpYWxpemVEYXRlKGZ1bGxZZWFyLG1vbnRoLGRhdGUpCi0gIHsKLSAgICB2YXIgZGF0ZVN0cmluZyA9IHNlcmlhbGl6ZUdZZWFyTW9udGgoZnVsbFllYXIsbW9udGgpICsgIi0iOwotICAgIGlmIChkYXRlIDwgMTApCi0gICAgICBkYXRlU3RyaW5nICs9ICIwIjsKLSAgICBkYXRlU3RyaW5nICs9IGRhdGU7Ci0gICAgcmV0dXJuIGRhdGVTdHJpbmc7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIHNlcmlhbGl6ZUdEYXkoZGF0ZSkKLSAgewotICAgIHZhciBnRGF5U3RyaW5nID0gIi0tLSI7Ci0gICAgaWYgKGRhdGUgPCAxMCkKLSAgICAgIGdEYXlTdHJpbmcgKz0gIjAiOwotICAgIGdEYXlTdHJpbmcgKz0gZGF0ZTsKLSAgICByZXR1cm4gZ0RheVN0cmluZzsKLSAgfQotICAKLSAgZnVuY3Rpb24gc2VyaWFsaXplR01vbnRoRGF5KG1vbnRoLGRhdGUpCi0gIHsKLSAgICB2YXIgZ01vbnRoRGF5U3RyaW5nID0gIi0tIjsKLSAgICBpZiAobW9udGggPCAxMCkKLSAgICAgIGdNb250aERheVN0cmluZyArPSAiMCI7Ci0gICAgZ01vbnRoRGF5U3RyaW5nICs9IG1vbnRoKyItIjsKLSAgICBpZiAoZGF0ZSA8IDEwKQotICAgICAgZ01vbnRoRGF5U3RyaW5nICs9ICIwIjsKLSAgICBnTW9udGhEYXlTdHJpbmcgKz0gZGF0ZTsKLSAgICByZXR1cm4gZ01vbnRoRGF5U3RyaW5nOwotICB9ICAgIAotCi0gIGZ1bmN0aW9uIHNldERhdGVVc2luZ0dEYXlQYXJhbWV0ZXJzKGdEYXlQYXJhbWV0ZXJzLGRhdGVPYmopCi0gIHsKLSAgICBpZiAoZ0RheVBhcmFtZXRlcnMgIT0gbnVsbCkKLSAgICAgIGRhdGVPYmouc2V0RGF0ZShnRGF5UGFyYW1ldGVyc1sxXSk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIHNldERhdGVVc2luZ0dNb250aERheVBhcmFtZXRlcnMoZ01vbnRoRGF5UGFyYW1ldGVycyxkYXRlT2JqKQotICB7Ci0gICAgaWYgKGdNb250aERheVBhcmFtZXRlcnMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBkYXRlT2JqLnNldE1vbnRoKGdNb250aERheVBhcmFtZXRlcnNbMV0tMSk7Ci0gICAgICBkYXRlT2JqLnNldERhdGUoZ01vbnRoRGF5UGFyYW1ldGVyc1syXSk7Ci0gICAgfQotICB9Ci0gIAotICBmdW5jdGlvbiBzZXREYXRlVXNpbmdHWWVhck1vbnRoUGFyYW1ldGVycyhnWWVhck1vbnRoUGFyYW1ldGVycyxkYXRlT2JqKQotICB7Ci0gICAgaWYgKGdZZWFyTW9udGhQYXJhbWV0ZXJzICE9IG51bGwpCi0gICAgewotICAgICAgZGF0ZU9iai5zZXRGdWxsWWVhcihnWWVhck1vbnRoUGFyYW1ldGVyc1sxXSk7Ci0gICAgICBkYXRlT2JqLnNldE1vbnRoKGdZZWFyTW9udGhQYXJhbWV0ZXJzWzJdLTEpOwotICAgIH0KLSAgfQotICAKLSAgZnVuY3Rpb24gc2V0RGF0ZVVzaW5nRGF0ZVBhcmFtZXRlcnMoZGF0ZVBhcmFtZXRlcnMsZGF0ZU9iaikKLSAgewotICAgIGlmIChkYXRlUGFyYW1ldGVycyAhPSBudWxsKQotICAgIHsKLSAgICAgIHNldERhdGVVc2luZ0dZZWFyTW9udGhQYXJhbWV0ZXJzKGRhdGVQYXJhbWV0ZXJzLGRhdGVPYmopOwotICAgICAgZGF0ZU9iai5zZXREYXRlKGRhdGVQYXJhbWV0ZXJzWzNdKTsKLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBzZXREYXRlVXNpbmdEYXRlVGltZVBhcmFtZXRlcnMoZGF0ZVRpbWVQYXJhbWV0ZXJzLGRhdGVPYmopCi0gIHsKLSAgICBpZiAoZGF0ZVRpbWVQYXJhbWV0ZXJzICE9IG51bGwpCi0gICAgewotICAgICAgc2V0RGF0ZVVzaW5nRGF0ZVBhcmFtZXRlcnMoZGF0ZVRpbWVQYXJhbWV0ZXJzLGRhdGVPYmopOwotICAgICAgZGF0ZU9iai5zZXRVVENIb3VycyhkYXRlVGltZVBhcmFtZXRlcnNbNF0pOwotICAgICAgZGF0ZU9iai5zZXRVVENNaW51dGVzKGRhdGVUaW1lUGFyYW1ldGVyc1s1XSk7Ci0gICAgICBkYXRlT2JqLnNldFVUQ1NlY29uZHMoZGF0ZVRpbWVQYXJhbWV0ZXJzWzZdKTsKLSAgICAgIHZhciBtaWxsaXNlY29uZHMgPSBkYXRlVGltZVBhcmFtZXRlcnNbN107Ci0gICAgICBpZiAobWlsbGlzZWNvbmRzLmxlbmd0aCA+IDApCi08JQotICAgLy8gRWxpbWluYXRlIHRoZSBkZWNpbWFsIHBvaW50Ci0lPgotICAgICAgICBkYXRlT2JqLnNldFVUQ01pbGxpc2Vjb25kcyhtaWxsaXNlY29uZHMuc3Vic3RyKDEpKTsKLSAgICAgIGVsc2UKLSAgICAgICAgZGF0ZU9iai5zZXRVVENNaWxsaXNlY29uZHMoMCk7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gc2V0RGF0ZVVzaW5nVGltZVBhcmFtZXRlcnModGltZVBhcmFtZXRlcnMsZGF0ZU9iaikKLSAgewotICAgIGlmICh0aW1lUGFyYW1ldGVycyAhPSBudWxsKQotICAgIHsKLSAgICAgIGRhdGVPYmouc2V0SG91cnModGltZVBhcmFtZXRlcnNbMV0pOwotICAgICAgZGF0ZU9iai5zZXRNaW51dGVzKHRpbWVQYXJhbWV0ZXJzWzJdKTsKLSAgICAgIGRhdGVPYmouc2V0U2Vjb25kcyh0aW1lUGFyYW1ldGVyc1szXSk7Ci0gICAgICB2YXIgbWlsbGlzZWNvbmRzID0gdGltZVBhcmFtZXRlcnNbNF07Ci0gICAgICBpZiAobWlsbGlzZWNvbmRzLmxlbmd0aCA+IDApCi08JQotICAgLy8gRWxpbWluYXRlIHRoZSBkZWNpbWFsIHBvaW50Ci0lPgotICAgICAgICBkYXRlT2JqLnNldE1pbGxpc2Vjb25kcyhtaWxsaXNlY29uZHMuc3Vic3RyKDEpKTsKLSAgICAgIGVsc2UKLSAgICAgICAgZGF0ZU9iai5zZXRNaWxsaXNlY29uZHMoMCk7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gaW5pdCgpCi0gIHsKLSAgICB2YXIgZCA9IG5ldyBEYXRlKCk7Ci08JQotICAgc3dpdGNoIChjYWxlbmRhclR5cGUpCi0gICB7Ci0gICAgIGNhc2UgQWN0aW9uSW5wdXRzLkNBTEVOREFSX1RZUEVfREFURToKLSU+Ci0gICAgc2V0RGF0ZVVzaW5nRGF0ZVBhcmFtZXRlcnMoZ2V0RGF0ZVBhcmFtZXRlcnModG9wLm9wZW5lci5jYWxlbmRhclRhcmdldC52YWx1ZSksZCk7Ci08JQotICAgICAgIGJyZWFrOwotICAgICBjYXNlIEFjdGlvbklucHV0cy5DQUxFTkRBUl9UWVBFX0RBVEVUSU1FOgotJT4KLSAgICBzZXREYXRlVXNpbmdEYXRlVGltZVBhcmFtZXRlcnMoZ2V0RGF0ZVRpbWVQYXJhbWV0ZXJzKHRvcC5vcGVuZXIuY2FsZW5kYXJUYXJnZXQudmFsdWUpLGQpOwotPCUKLSAgICAgICBicmVhazsKLSAgICAgY2FzZSBBY3Rpb25JbnB1dHMuQ0FMRU5EQVJfVFlQRV9HWUVBUk1PTlRIOgotJT4KLSAgICBzZXREYXRlVXNpbmdHWWVhck1vbnRoUGFyYW1ldGVycyhnZXRHWWVhck1vbnRoUGFyYW1ldGVycyh0b3Aub3BlbmVyLmNhbGVuZGFyVGFyZ2V0LnZhbHVlKSxkKTsKLTwlICAgICAKLSAgICAgY2FzZSBBY3Rpb25JbnB1dHMuQ0FMRU5EQVJfVFlQRV9HREFZOgotJT4KLSAgICBzZXREYXRlVXNpbmdHRGF5UGFyYW1ldGVycyhnZXRHRGF5UGFyYW1ldGVycyh0b3Aub3BlbmVyLmNhbGVuZGFyVGFyZ2V0LnZhbHVlKSxkKTsKLTwlICAgCi0gICAgIGNhc2UgQWN0aW9uSW5wdXRzLkNBTEVOREFSX1RZUEVfR01PTlRIREFZOgotJT4KLSAgICBzZXREYXRlVXNpbmdHTW9udGhEYXlQYXJhbWV0ZXJzKGdldEdNb250aERheVBhcmFtZXRlcnModG9wLm9wZW5lci5jYWxlbmRhclRhcmdldC52YWx1ZSksZCk7Ci08JSAgICAgICAKLSAgICAgZGVmYXVsdDoKLSAgICAgICBicmVhazsKLSAgIH0KLSU+Ci0gICAgZ2VuZXJhdGVDYWxlbmRhcihkKTsKLSAgICB2YXIgbW9udGhTZWxlY3RvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtb250aFNlbGVjdG9yIik7Ci0gICAgZm9yICh2YXIgaT0wO2k8bW9udGhzLmxlbmd0aDtpKyspCi0gICAgICBtb250aFNlbGVjdG9yLm9wdGlvbnNbaV0gPSBuZXcgT3B0aW9uKG1vbnRoc1tpXSxpKTsKLSAgICBnZW5lcmF0ZUNhbGVuZGFyKGQpOwotICB9Ci0KLSAgZnVuY3Rpb24gaW5pdENhbGVuZGFySGVhZGVyKHRhYmxlKQotICB7Ci0gICAgY2FsZW5kYXJCb2R5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEJPRFkiKTsKLSAgICB2YXIgaGVhZGVyUm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKLSAgICBmb3IgKHZhciBpPTA7aTxkYXlzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgdmFyIGhlYWRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRoIik7Ci0gICAgICBoZWFkZXIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZGF5c1tpXSkpOwotICAgICAgaGVhZGVyLmNsYXNzTmFtZT0iaGVhZGVyY29sb3IiOwotICAgICAgaGVhZGVyUm93LmFwcGVuZENoaWxkKGhlYWRlcik7Ci0gICAgfQotICAgIGNhbGVuZGFyQm9keS5hcHBlbmRDaGlsZChoZWFkZXJSb3cpOwotICAgIHRhYmxlLmFwcGVuZENoaWxkKGNhbGVuZGFyQm9keSk7Ci0gICAgY2FsZW5kYXJCb2R5U2V0ID0gdHJ1ZTsKLSAgfQotCi0gIGZ1bmN0aW9uIGdlbmVyYXRlQ2FsZW5kYXIoZGF0ZSkKLSAgewotICAgIHZhciB0YWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYWxlbmRhciIpOwotICAgIHZhciBkYXRlRGF0ZSA9IGRhdGUuZ2V0RGF0ZSgpOwotICAgIHZhciBkYXRlTW9udGggPSBkYXRlLmdldE1vbnRoKCk7Ci0gICAgdmFyIGRhdGVGdWxsWWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTsKLSAgICB2YXIgZGF0ZUl0ZXJhdG9yID0gbmV3IERhdGUoKTsKLSAgICBkYXRlSXRlcmF0b3Iuc2V0VGltZShEYXRlLnBhcnNlKGVuZ01vbnRoc1tkYXRlTW9udGhdKyIgMSwgIitkYXRlRnVsbFllYXIpKTsKLSAgICB2YXIgc3RhcnRpbmdEYXRlID0gZGF0ZUl0ZXJhdG9yLmdldERhdGUoKTsgLy8gMSwyLDMuLi4KLSAgICB2YXIgc3RhcnRpbmdEYXkgPSBkYXRlSXRlcmF0b3IuZ2V0RGF5KCk7IC8vIFN1bixNb24sVHVlcy4uLgotICAgIGNsZWFyQ2FsZW5kYXIoKTsKLSAgICBmb3IgKHZhciByb3dzPTA7cm93czw2O3Jvd3MrKykKLSAgICB7Ci0gICAgICB2YXIgcm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKLSAgICAgIGZvciAodmFyIGNvbHVtbnM9MDtjb2x1bW5zPGRheXMubGVuZ3RoO2NvbHVtbnMrKykKLSAgICAgIHsKLSAgICAgICAgdmFyIGNvbHVtbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgICAgIHZhciBkYXRlSXRlcmF0b3JEYXRlID0gZGF0ZUl0ZXJhdG9yLmdldERhdGUoKTsKLSAgICAgICAgdmFyIGRhdGVJdGVyYXRvck1vbnRoID0gZGF0ZUl0ZXJhdG9yLmdldE1vbnRoKCk7Ci0gICAgICAgIHZhciBkYXRlSXRlcmF0b3JGdWxsWWVhciA9IGRhdGVJdGVyYXRvci5nZXRGdWxsWWVhcigpOwotICAgICAgICBjb2x1bW4ud2lkdGggPSAyNDsKLSAgICAgICAgY29sdW1uLmhlaWdodCA9IDI0OwotICAgICAgICBjb2x1bW4uYWxpZ24gPSAiY2VudGVyIjsKLSAgICAgICAgY29sdW1uLnZhbGlnbiA9ICJjZW50ZXIiOwotICAgICAgICBjb2x1bW4uY2xhc3NOYW1lID0gImNhbGVuZGFydGFibGVjZWxscyI7Ci0gICAgICAgIGlmICgoZGF0ZUl0ZXJhdG9yRGF0ZSA9PSBzdGFydGluZ0RhdGUgJiYgY29sdW1ucyA8IHN0YXJ0aW5nRGF5KSB8fCAoZGF0ZUl0ZXJhdG9yTW9udGggIT0gZGF0ZU1vbnRoKSkKLSAgICAgICAgICBjb2x1bW4uaW5uZXJIVE1MID0gIiZuYnNwOyI7Ci0gICAgICAgIGVsc2UgaWYgKGRhdGVJdGVyYXRvck1vbnRoID09IGRhdGVNb250aCkKLSAgICAgICAgewotICAgICAgICAgIHZhciBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotICAgICAgICAgIHN3aXRjaCAoPCU9Y2FsZW5kYXJUeXBlJT4pCi0gICAgICAgICAgewotICAgICAgICAgICAgY2FzZSA8JT1BY3Rpb25JbnB1dHMuQ0FMRU5EQVJfVFlQRV9EQVRFJT46Ci0gICAgICAgICAgICAgIGxpbmsuaHJlZiA9ICJqYXZhc2NyaXB0OnRyYW5zZmVyRGF0ZSgiK2RhdGVJdGVyYXRvckRhdGUrIikiOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgPCU9QWN0aW9uSW5wdXRzLkNBTEVOREFSX1RZUEVfREFURVRJTUUlPjoKLSAgICAgICAgICAgICAgbGluay5ocmVmID0gImphdmFzY3JpcHQ6dHJhbnNmZXJEYXRlVGltZSgiK2RhdGVJdGVyYXRvckRhdGUrIikiOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgPCU9QWN0aW9uSW5wdXRzLkNBTEVOREFSX1RZUEVfR1lFQVJNT05USCU+OgotICAgICAgICAgICAgICBsaW5rLmhyZWYgPSAiamF2YXNjcmlwdDp0cmFuc2ZlckdZZWFyTW9udGgoKSI7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSA8JT1BY3Rpb25JbnB1dHMuQ0FMRU5EQVJfVFlQRV9HREFZJT46Ci0gICAgICAgICAgICAgIGxpbmsuaHJlZiA9ICJqYXZhc2NyaXB0OnRyYW5zZmVyR0RheSgiK2RhdGVJdGVyYXRvckRhdGUrIikiOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgPCU9QWN0aW9uSW5wdXRzLkNBTEVOREFSX1RZUEVfR01PTlRIREFZJT46Ci0gICAgICAgICAgICAgIGxpbmsuaHJlZiA9ICJqYXZhc2NyaXB0OnRyYW5zZmVyR01vbnRoRGF5KCIrZGF0ZUl0ZXJhdG9yRGF0ZSsiKSI7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBsaW5rLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGRhdGVJdGVyYXRvckRhdGUpKTsKLSAgICAgICAgICBjb2x1bW4uYXBwZW5kQ2hpbGQobGluayk7Ci0gICAgICAgICAgaWYgKGRhdGVJdGVyYXRvckRhdGUgPT0gZGF0ZURhdGUgJiYgZGF0ZUl0ZXJhdG9yRnVsbFllYXIgPT0gZGF0ZUZ1bGxZZWFyKQotICAgICAgICAgICAgY29sdW1uLmNsYXNzTmFtZSA9ICJ0b2RheXRhYmxlY2VsbCI7Ci0gICAgICAgICAgZGF0ZUl0ZXJhdG9yRGF0ZSsrOwotICAgICAgICAgIGRhdGVJdGVyYXRvci5zZXRUaW1lKERhdGUucGFyc2UoZW5nTW9udGhzW2RhdGVJdGVyYXRvck1vbnRoXSsiICIrZGF0ZUl0ZXJhdG9yRGF0ZSsiLCAiK2RhdGVJdGVyYXRvci5nZXRGdWxsWWVhcigpKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcm93LmFwcGVuZENoaWxkKGNvbHVtbik7Ci0gICAgICB9Ci0gICAgICBjYWxlbmRhckJvZHkuYXBwZW5kQ2hpbGQocm93KTsKLSAgICB9Ci0gICAgdmFyIG1vbnRoU2VsZWN0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibW9udGhTZWxlY3RvciIpOwotICAgIGZvciAodmFyIGk9MDtpPG1vbnRoU2VsZWN0b3Iub3B0aW9ucy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIGlmIChtb250aFNlbGVjdG9yLm9wdGlvbnNbaV0udmFsdWUgPT0gZGF0ZU1vbnRoKQotICAgICAgewotICAgICAgICBtb250aFNlbGVjdG9yLnNlbGVjdGVkSW5kZXggPSBpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgdmFyIHllYXJUZXh0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInllYXJUZXh0Iik7Ci0gICAgeWVhclRleHQudmFsdWUgPSBkYXRlRnVsbFllYXI7Ci0gICAgc2F2ZWRZZWFyVGV4dFZhbHVlID0geWVhclRleHQudmFsdWU7Ci08JQotICAgaWYgKGNhbGVuZGFyVHlwZSA9PSBBY3Rpb25JbnB1dHMuQ0FMRU5EQVJfVFlQRV9EQVRFVElNRSkKLSAgIHsKLSU+Ci0gICAgdmFyIHRpbWVUZXh0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRpbWVUZXh0Iik7Ci0gICAgdGltZVRleHQudmFsdWUgPSBzZXJpYWxpemVUaW1lKGRhdGUuZ2V0SG91cnMoKSxkYXRlLmdldE1pbnV0ZXMoKSxkYXRlLmdldFNlY29uZHMoKSxkYXRlLmdldE1pbGxpc2Vjb25kcygpKTsKLTwlCi0gICB9Ci0lPgotICAgIGN1cnJlbnREYXRlID0gZGF0ZTsKLSAgfQotCi0gIGZ1bmN0aW9uIGNsZWFyQ2FsZW5kYXIoKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbGVuZGFyIik7Ci0gICAgaWYgKCFjYWxlbmRhckJvZHlTZXQpCi0gICAgICBpbml0Q2FsZW5kYXJIZWFkZXIodGFibGUpOwotICAgIGZvciAodmFyIGk9MTtpPHRhYmxlLnJvd3MubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICB0YWJsZS5kZWxldGVSb3coaSk7Ci0gICAgICBpLS07Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gdXBkYXRlQ2FsZW5kYXIobmV3TW9udGgsbmV3RnVsbFllYXIpCi0gIHsKLSAgICB2YXIgZCA9IG5ldyBEYXRlKCk7Ci0gICAgaWYgKG5ld01vbnRoID4gbW9udGhzLmxlbmd0aCkKLSAgICB7Ci0gICAgICBuZXdGdWxsWWVhcisrOwotICAgICAgbmV3TW9udGggPSAwOwotICAgIH0KLSAgICBlbHNlIGlmIChuZXdNb250aCA8IDApCi0gICAgewotICAgICAgbmV3RnVsbFllYXItLTsKLSAgICAgIG5ld01vbnRoID0gbW9udGhzLmxlbmd0aC0xOwotICAgIH0KLSAgICBkLnNldE1vbnRoKG5ld01vbnRoKTsKLSAgICBkLnNldEZ1bGxZZWFyKG5ld0Z1bGxZZWFyKTsKLTwlCi0gICBpZiAoY2FsZW5kYXJUeXBlID09IEFjdGlvbklucHV0cy5DQUxFTkRBUl9UWVBFX0RBVEVUSU1FKQotICAgewotJT4KLSAgICBzZXREYXRlVXNpbmdUaW1lUGFyYW1ldGVycyhnZXRUaW1lUGFyYW1ldGVycyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGltZVRleHQiKS52YWx1ZSksZCk7Ci08JQotICAgfQotJT4KLSAgICBnZW5lcmF0ZUNhbGVuZGFyKGQpOwotICB9Ci0KLSAgZnVuY3Rpb24ganVtcFRvUHJldmlvdXNZZWFyKCkKLSAgewotICAgIHVwZGF0ZUNhbGVuZGFyKGN1cnJlbnREYXRlLmdldE1vbnRoKCksY3VycmVudERhdGUuZ2V0RnVsbFllYXIoKS0xKQotICB9Ci0KLSAgZnVuY3Rpb24ganVtcFRvUHJldmlvdXNNb250aCgpCi0gIHsKLSAgICB1cGRhdGVDYWxlbmRhcihjdXJyZW50RGF0ZS5nZXRNb250aCgpLTEsY3VycmVudERhdGUuZ2V0RnVsbFllYXIoKSk7Ci0gIH0KLQotICBmdW5jdGlvbiBqdW1wVG9OZXh0TW9udGgoKQotICB7Ci0gICAgdXBkYXRlQ2FsZW5kYXIoY3VycmVudERhdGUuZ2V0TW9udGgoKSsxLGN1cnJlbnREYXRlLmdldEZ1bGxZZWFyKCkpOwotICB9Ci0KLSAgZnVuY3Rpb24ganVtcFRvTmV4dFllYXIoKQotICB7Ci0gICAgdXBkYXRlQ2FsZW5kYXIoY3VycmVudERhdGUuZ2V0TW9udGgoKSxjdXJyZW50RGF0ZS5nZXRGdWxsWWVhcigpKzEpOwotICB9Ci0KLSAgZnVuY3Rpb24ganVtcFRvVG9kYXkoKQotICB7Ci0gICAgZ2VuZXJhdGVDYWxlbmRhcihuZXcgRGF0ZSgpKTsKLSAgfQotCi0gIGZ1bmN0aW9uIHNldE5ld0RhdGUoKQotICB7Ci0gICAgdmFyIG1vbnRoU2VsZWN0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibW9udGhTZWxlY3RvciIpOwotICAgIHZhciBuZXdNb250aCA9IG1vbnRoU2VsZWN0b3Iub3B0aW9uc1ttb250aFNlbGVjdG9yLnNlbGVjdGVkSW5kZXhdLnZhbHVlOwotICAgIHZhciBuZXdGdWxsWWVhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ5ZWFyVGV4dCIpLnZhbHVlOwotPCUKLSAgIC8vIFlZWVkrCi0lPgotICAgIHZhciBkID0gbmV3IERhdGUoKTsKLSAgICBpZiAodmFsaWRhdGVZZWFyU3RyaW5nKG5ld0Z1bGxZZWFyKSkKLSAgICB7Ci0gICAgICAvLyBUaGUgeWVhciBzdHJpbmcgY29udGFpbnMgb25seSBkaWdpdHMgYW5kIGlzIGhlbmNlIGEgdmFsaWQgeWVhci4KLSAgICAgIGQuc2V0RnVsbFllYXIobmV3RnVsbFllYXIpOwotICAgICAgZC5zZXRNb250aChuZXdNb250aCk7Ci0gICAgfQotICAgIGdlbmVyYXRlQ2FsZW5kYXIoZCk7Ci0gIH0KLQotICBmdW5jdGlvbiBoYW5kbGVZZWFyVGV4dEtleVVwRXZlbnQoKQotICB7Ci0gICAgdmFyIGN1cnJlbnRZZWFyVGV4dFZhbHVlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInllYXJUZXh0IikudmFsdWU7Ci0gICAgaWYgKGN1cnJlbnRZZWFyVGV4dFZhbHVlID09IHNhdmVkWWVhclRleHRWYWx1ZSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBzZXROZXdEYXRlKCk7Ci0gIH0KLQotPCUKLSAgIC8vIFlZWVkrLU1NLURECi0lPgotICBmdW5jdGlvbiB0cmFuc2ZlckRhdGUoZGF0ZSkKLSAgewotICAgIHZhciBmdWxsWWVhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ5ZWFyVGV4dCIpLnZhbHVlOwotICAgIHZhciBtb250aCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtb250aFNlbGVjdG9yIikuc2VsZWN0ZWRJbmRleCsxOwotICAgIHRvcC5vcGVuZXIuY2FsZW5kYXJUYXJnZXQudmFsdWUgPSBzZXJpYWxpemVEYXRlKGZ1bGxZZWFyLG1vbnRoLGRhdGUpOwotICAgIHRvcC5vcGVuZXIuY2xvc2VDYWxlbmRhckJyb3dzZXIoKTsKLSAgfQotCi08JQotICAgLy8gWVlZWSstTU0tRERUSEg6TU06U1NbLlNTU11aCi0lPgotICBmdW5jdGlvbiB0cmFuc2ZlckRhdGVUaW1lKGRhdGUpCi0gIHsKLSAgICB2YXIgZnVsbFllYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgieWVhclRleHQiKS52YWx1ZTsKLSAgICB2YXIgbW9udGggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibW9udGhTZWxlY3RvciIpLnNlbGVjdGVkSW5kZXgrMTsKLSAgICB2YXIgc2VyaWFsaXplZERhdGUgPSBzZXJpYWxpemVEYXRlKGZ1bGxZZWFyLG1vbnRoLGRhdGUpOwotICAgIHZhciBkID0gbmV3IERhdGUoKTsKLSAgICBzZXREYXRlVXNpbmdEYXRlUGFyYW1ldGVycyhnZXREYXRlUGFyYW1ldGVycyhzZXJpYWxpemVkRGF0ZSksZCk7Ci0gICAgdmFyIHRpbWVWYWx1ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0aW1lVGV4dCIpLnZhbHVlOwotICAgIHZhciB0aW1lUGFyYW1ldGVycyA9IGdldFRpbWVQYXJhbWV0ZXJzKHRpbWVWYWx1ZSk7Ci0gICAgaWYgKHRpbWVQYXJhbWV0ZXJzID09IG51bGwpCi0gICAgewotICAgICAgaWYgKCFjb25maXJtKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJNU0dfRVJST1JfSU5WQUxJRF9USU1FX0ZPUk1BVCIpKSU+IikpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgc2V0RGF0ZVVzaW5nVGltZVBhcmFtZXRlcnModGltZVBhcmFtZXRlcnMsZCk7Ci0gICAgdG9wLm9wZW5lci5jYWxlbmRhclRhcmdldC52YWx1ZSA9IHNlcmlhbGl6ZWREYXRlICsgIlQiICsgc2VyaWFsaXplVGltZShkLmdldFVUQ0hvdXJzKCksZC5nZXRVVENNaW51dGVzKCksZC5nZXRVVENTZWNvbmRzKCksZC5nZXRVVENNaWxsaXNlY29uZHMoKSkgKyAiWiI7Ci0gICAgdG9wLm9wZW5lci5jbG9zZUNhbGVuZGFyQnJvd3NlcigpOwotICB9Ci0gIAotPCUKLSAgIC8vIFlZWVkrLU1NCi0lPgotICBmdW5jdGlvbiB0cmFuc2ZlckdZZWFyTW9udGgoKQotICB7Ci0gICAgdmFyIGZ1bGxZZWFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInllYXJUZXh0IikudmFsdWU7Ci0gICAgdmFyIG1vbnRoID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1vbnRoU2VsZWN0b3IiKS5zZWxlY3RlZEluZGV4KzE7Ci0gICAgdmFyIHNlcmlhbGl6ZWRHWWVhck1vbnRoID0gc2VyaWFsaXplR1llYXJNb250aChmdWxsWWVhcixtb250aCk7Ci0gICAgdmFyIGQgPSBuZXcgRGF0ZSgpOwotICAgIHNldERhdGVVc2luZ0dZZWFyTW9udGhQYXJhbWV0ZXJzKGdldEdZZWFyTW9udGhQYXJhbWV0ZXJzKHNlcmlhbGl6ZWRHWWVhck1vbnRoKSxkKTsKLSAgICB0b3Aub3BlbmVyLmNhbGVuZGFyVGFyZ2V0LnZhbHVlID0gc2VyaWFsaXplZEdZZWFyTW9udGg7Ci0gICAgdG9wLm9wZW5lci5jbG9zZUNhbGVuZGFyQnJvd3NlcigpOwotICB9ICAgICAKLSAgCi08JQotICAgLy8gLS0tREQKLSU+Ci0gIGZ1bmN0aW9uIHRyYW5zZmVyR0RheShkYXRlKSAgICAgCi0gIHsKLSAgICB0b3Aub3BlbmVyLmNhbGVuZGFyVGFyZ2V0LnZhbHVlID0gc2VyaWFsaXplR0RheShkYXRlKTsKLSAgICB0b3Aub3BlbmVyLmNsb3NlQ2FsZW5kYXJCcm93c2VyKCk7Ci0gIH0KLTwlCi0gICAvLyAtLU1NLURECi0lPiAgCi0gIGZ1bmN0aW9uIHRyYW5zZmVyR01vbnRoRGF5KGRhdGUpCi0gIHsKLSAgICB2YXIgbW9udGggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibW9udGhTZWxlY3RvciIpLnNlbGVjdGVkSW5kZXgrMTsKLSAgICB0b3Aub3BlbmVyLmNhbGVuZGFyVGFyZ2V0LnZhbHVlID0gc2VyaWFsaXplR01vbnRoRGF5KG1vbnRoLGRhdGUpOwotICAgIHRvcC5vcGVuZXIuY2xvc2VDYWxlbmRhckJyb3dzZXIoKTsKLSAgfQotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotICA8ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLSAgICA8dGFibGUgYm9yZGVyPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCI+Ci0gICAgICAgICAgPHRhYmxlPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICA8dGQgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIiBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJtb250aFNlbGVjdG9yIj48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTU9OVEgiKSU+PC9sYWJlbD4KLSAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgPHRkIHdpZHRoPSIyMCUiPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgIDx0ZCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9InllYXJUZXh0Ij48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfWUVBUiIpJT48L2xhYmVsPgotICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgPHRkIGFsaWduPSJsZWZ0IiB2YWxpZ249ImNlbnRlciI+Ci0gICAgICAgICAgICAgICAgPHNlbGVjdCBpZD0ibW9udGhTZWxlY3RvciIgb25DaGFuZ2U9InNldE5ld0RhdGUoKSIgY2xhc3M9InNlbGVjdGxpc3QiPgotICAgICAgICAgICAgICAgIDwvc2VsZWN0PgotICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICA8dGQgd2lkdGg9IjIwJSI+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgPHRkIHdpZHRoPSIzMCUiIGFsaWduPSJsZWZ0IiB2YWxpZ249ImNlbnRlciI+Ci0gICAgICAgICAgICAgICAgPGlucHV0IGlkPSJ5ZWFyVGV4dCIgc2l6ZT02IG9ua2V5dXA9ImhhbmRsZVllYXJUZXh0S2V5VXBFdmVudCgpIiBjbGFzcz0idGFibGV0ZXh0ZW50ZXIiPgotICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICA8L3RhYmxlPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIj4KLSAgICAgICAgICA8dGFibGUgaWQ9ImNhbGVuZGFyIiBib3JkZXI9MCBjZWxsc3BhY2luZz0wIGNlbGxwYWRkaW5nPTMgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICA8L3RhYmxlPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLTwlCi0gICBpZiAoY2FsZW5kYXJUeXBlID09IEFjdGlvbklucHV0cy5DQUxFTkRBUl9UWVBFX0RBVEVUSU1FKQotICAgewotJT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIj4KLSAgICAgICAgICA8dGFibGUgYm9yZGVyPTA+Ci0gICAgICAgICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJjZW50ZXIiIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJ0aW1lVGV4dCI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1RJTUUiKSU+PC9sYWJlbD4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJjZW50ZXIiIHdpZHRoPSI4MCUiPgotICAgICAgICAgICAgICA8aW5wdXQgaWQ9InRpbWVUZXh0IiB0eXBlPSJ0ZXh0IiBjbGFzcz0idGFibGV0ZXh0ZW50ZXIiIHNpemU9MTIgbWF4bGVuZ3RoPTEyPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDx0ZCB3aWR0aD0iMTAlIj4mbmJzcDs8L3RkPgotICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotPCUKLSAgIH0KLSU+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCI+Ci0gICAgICAgICAgPHRhYmxlIGJvcmRlcj0wPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpqdW1wVG9QcmV2aW91c1llYXIoKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1BSRVZJT1VTX1lFQVIiKSU+Ij48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTElOS19QUkVWSU9VU19ZRUFSIiklPjwvYT4KLSAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6anVtcFRvUHJldmlvdXNNb250aCgpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfUFJFVklPVVNfTU9OVEgiKSU+Ij48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTElOS19QUkVWSU9VU19NT05USCIpJT48L2E+Ci0gICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0Omp1bXBUb1RvZGF5KCkiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UT0RBWSIpJT4iPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX1RPREFZIiklPjwvYT4KLSAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6anVtcFRvTmV4dE1vbnRoKCkiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9ORVhUX01PTlRIIiklPiI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xJTktfTkVYVF9NT05USCIpJT48L2E+Ci0gICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0Omp1bXBUb05leHRZZWFyKCkiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9ORVhUX1lFQVIiKSU+Ij48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTElOS19ORVhUX1lFQVIiKSU+PC9hPgotICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICA8L3RhYmxlPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICA8L2Rpdj4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBpbml0KCk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvY2FsZW5kYXJfdG9vbGJhci5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2NhbGVuZGFyX3Rvb2xiYXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTU1ZmI2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvY2FsZW5kYXJfdG9vbGJhci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPCUKLSAgIFN0cmluZyBzZXNzaW9uSWQgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuU0VTU0lPTklEKTsKLSAgIEh0dHBTZXNzaW9uIGN1cnJlbnRTZXNzaW9uID0gKEh0dHBTZXNzaW9uKWFwcGxpY2F0aW9uLmdldEF0dHJpYnV0ZShzZXNzaW9uSWQpOwotICAgQ29udHJvbGxlciBjb250cm9sbGVyID0gKENvbnRyb2xsZXIpY3VycmVudFNlc3Npb24uZ2V0QXR0cmlidXRlKCJjb250cm9sbGVyIik7Ci0lPgotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9DQUxFTkRBUl9UT09MQkFSIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3Rvb2xiYXIuY3NzIikpJT4iPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBvblVubG9hZD0idG9wLm9wZW5lci5jYWxlbmRhckJyb3dzZXJDbG9zZWQ9dHJ1ZSIgY2xhc3M9InRvb2xiYXJib2R5bWFyZ2luIj4KLTxkaXYgaWQ9InRvb2xiYXJib3JkZXIiPgotICA8ZGl2IGlkPSJ0b29sYmFyIj4KLSAgICA8dGFibGUgd2lkdGg9IjEwMCUiIGhlaWdodD0yNSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgYm9yZGVyPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImNlbnRlciIgd2lkdGg9MjUgaGVpZ2h0PTI1PjxpbWcgY2xhc3M9Im5vcm1hbCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jYWxlbmRhci5naWYiKSklPiIgd2lkdGg9MTYgaGVpZ2h0PTE2PjwvdGQ+Ci0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImxlZnQiIHdpZHRoPSIqIiBoZWlnaHQ9MjUgbm93cmFwIGNsYXNzPSJ0ZXh0Ij48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9DQUxFTkRBUl9CUk9XU0VSIiklPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gIDwvZGl2PgotPC9kaXY+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgdG9wLm9wZW5lci5jYWxlbmRhckJyb3dzZXJDbG9zZWQgPSBmYWxzZTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9jc3MvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvY3NzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9jc3MvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Nzcy9jYWxlbmRhci5jc3MgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Nzcy9jYWxlbmRhci5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4Mzg4MDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9jc3MvY2FsZW5kYXIuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0uY2FsZW5kYXJ0YWJsZWNlbGxzIHsgYm9yZGVyLWxlZnQ6MXB4IHNvbGlkICNCOEI0QTM7IGJvcmRlci1yaWdodDowcHggc29saWQgI0I4QjRBMzsgYm9yZGVyLXRvcDowcHggc29saWQgI0I4QjRBMzsgYm9yZGVyLWJvdHRvbToxcHggc29saWQgI0I4QjRBMzsgZm9udDogaWNvbjsgZm9udC1zaXplOiAxMXB4OyB0ZXh0LWFsaWduOmNlbnRlcn0KLS50b2RheXRhYmxlY2VsbCB7IGJhY2tncm91bmQtY29sb3I6eWVsbG93OyBib3JkZXItbGVmdDoxcHggc29saWQgI0I4QjRBMzsgYm9yZGVyLXJpZ2h0OjBweCBzb2xpZCAjQjhCNEEzOyBib3JkZXItdG9wOjBweCBzb2xpZCAjQjhCNEEzOyBib3JkZXItYm90dG9tOjFweCBzb2xpZCAjQjhCNEEzOyBmb250OiBpY29uOyBmb250LXNpemU6IDExcHg7IHRleHQtYWxpZ246Y2VudGVyfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9jc3MvdG9vbGJhci5jc3MgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Nzcy90b29sYmFyLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg1ZWExMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Nzcy90b29sYmFyLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLSN0b29sYmFyIHsgd2lkdGg6MTAwJTsgaGVpZ2h0OjI1cHg7IGJhY2tncm91bmQ6I0VDRTlEODsgYm9yZGVyLWNvbG9yOndoaXRlOyAgYm9yZGVyLXN0eWxlOnNvbGlkOyAgYm9yZGVyLXdpZHRoOjEgMSAxIDFweDsgYm9yZGVyLWJvdHRvbS1jb2xvcjojODQ4Mjg0OyBib3JkZXItcmlnaHQtY29sb3I6Izg0ODI4NDsgbWFyZ2luOjAgMCAwIDBweDt9Ci0jdG9vbGJhcmJvcmRlciB7IGhlaWdodDoyNnB4OyB3aWR0aDoxMDAlOyBib3JkZXItc3R5bGU6c29saWQ7IGJvcmRlci13aWR0aDoxIDAgMCAxcHg7IGJvcmRlci1jb2xvcjojODQ4Mjg0OyB9Ci0KLS8qIGlmcmFtZSBTcGFjaW5nIENvbnRvbCAqLwotLnRvb2xiYXJib2R5bWFyZ2luIHsgbWFyZ2luOiA1IDUgMCA1OyBiYWNrZ3JvdW5kOiAjRUNFOUQ4OyB9Ci0KLS8qIFRvb2xiYXIgU3R5bGVzICovCi0udGV4dCB7Zm9udC1zaXplOjEycHg7IGZvbnQ6IGljb247fQotYTpsaW5rIHtjb2xvcjogYmxhY2s7fQotCi0vKiBKUyBSb2xsb3ZlciBTdHlsZSAqLwotSU1HIHsgYm9yZGVyLXdpZHRoOjJweDsgYm9yZGVyLXN0eWxlOnNvbGlkO30KLS5ub3JtYWwgeyBib3JkZXItY29sb3IgOiAjRUNFOUQ4OyBib3JkZXItc3R5bGU6IHNvbGlkOyBib3JkZXItd2lkdGg6MXB4OyBib3JkZXItbGVmdC13aWR0aDogMXB4OyBib3JkZXItYm90dG9tLWNvbG9yIDojRUNFOUQ4OyBib3JkZXItcmlnaHQtY29sb3IgOiNFQ0U5RDg7fQotLmhvdmVyIHsgYm9yZGVyLWNvbG9yIDogd2hpdGU7IGJvcmRlci1zdHlsZTogc29saWQ7IGJvcmRlci13aWR0aDoxcHg7IGJvcmRlci1sZWZ0LXdpZHRoOiAxcHg7IGJvcmRlci1ib3R0b20tY29sb3IgOiM4QzhFOEM7IGJvcmRlci1yaWdodC1jb2xvciA6IzhDOEU4QzsgfQotLmRvd24geyBib3JkZXItY29sb3IgOiAjOEM4RThDOyBib3JkZXItc3R5bGU6IHNvbGlkOyBib3JkZXItd2lkdGg6MXB4OyBib3JkZXItbGVmdC13aWR0aDogMXB4OyBib3JkZXItYm90dG9tLWNvbG9yOndoaXRlOyBib3JkZXItcmlnaHQtY29sb3I6d2hpdGU7fQotCi0vKiBHbG9iYWxUb29sYmFyICovCi0uZ3Rvb2xiYXJib2R5bWFyZ2luIHttYXJnaW4gOiAwIDEgMyAwOyBiYWNrZ3JvdW5kOiAjRUNFOUQ4fQotI2dsb2JhbHRvb2xiYXJ7aGVpZ2h0OjEwMCU7IGJhY2tncm91bmQ6ICNFQ0U5RDg7IGJvcmRlci1jb2xvciA6IHdoaXRlOyBib3JkZXItc3R5bGU6IHNvbGlkOyBib3JkZXItd2lkdGg6MXB4OyBib3JkZXItbGVmdC13aWR0aDogMXB4OyBib3JkZXItYm90dG9tLWNvbG9yIDpibGFjazsgYm9yZGVyLXJpZ2h0LXdpZHRoOiAxcHg7IGJvcmRlci1yaWdodC1jb2xvciA6Izg0ODI4NDt9Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvY3NzL3RyZWV2aWV3LmNzcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvY3NzL3RyZWV2aWV3LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGExZTZhNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Nzcy90cmVldmlldy5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLWEge3RleHQtZGVjb3JhdGlvbjogbm9uZTt9Ci1hOmhvdmVyIHt0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTt9Ci10ZCB7Zm9udDogaWNvbjsgZm9udC1zaXplOiAxMnB4OyBjb2xvcjogQmxhY2s7fQotLnVuc2VsZWN0ZWRUZXh0QW5jaG9yIHtjb2xvcjpibHVlOyBiYWNrZ3JvdW5kLWNvbG9yOmRvY3VtZW50LmJhY2tncm91bmRDb2xvcn0KLS5zZWxlY3RlZFRleHRBbmNob3Ige2NvbG9yOndoaXRlOyBiYWNrZ3JvdW5kLWNvbG9yOm5hdnl9CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Nzcy93aW5kb3dzLmNzcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvY3NzL3dpbmRvd3MuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlY2RiNDAwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvY3NzL3dpbmRvd3MuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotI2NvbnRlbnRib3JkZXIgeyBib3JkZXItbGVmdDoxcHggc29saWQgIzg0ODI4NDsgYm9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjODQ4Mjg0OyBib3JkZXItdG9wOjBweCBzb2xpZCAjODQ4Mjg0OyBib3JkZXItYm90dG9tOjFweCBzb2xpZCAjODQ4Mjg0OyBoZWlnaHQ6MTAwJTsgd2lkdGg6MTAwJTsgYmFja2dyb3VuZDp3aGl0ZTsgb3ZlcmZsb3c6YXV0bzsgcGFkZGluZy1sZWZ0OjEwcHg7IHBhZGRpbmctcmlnaHQ6MDsgcGFkZGluZy10b3A6MTA7IHBhZGRpbmctYm90dG9tOjEwfQotI3RyZWVjb250ZW50Ym9yZGVyIHsgYm9yZGVyLWxlZnQ6MXB4IHNvbGlkICM4NDgyODQ7IGJvcmRlci1yaWdodDoxcHggc29saWQgIzg0ODI4NDsgYm9yZGVyLXRvcDowcHggc29saWQgIzg0ODI4NDsgYm9yZGVyLWJvdHRvbToxcHggc29saWQgIzg0ODI4NDsgaGVpZ2h0OjEwMCU7IHdpZHRoOjEwMCU7IGJhY2tncm91bmQ6d2hpdGU7IG92ZXJmbG93OmF1dG87IHBhZGRpbmctdG9wOjVweH0KLQotLyogaWZyYW1lIFNwYWNpbmcgQ29udG9sICovCi0uY29udGVudGJvZHltYXJnaW4geyBtYXJnaW46IDAgNSAxMiA1OyBiYWNrZ3JvdW5kOiNFQ0U5RDg7IH0KLQotLyogRG9jdW1lbnQgU3R5bGVzICAqLwotLmxhYmVscyB7IGZvbnQ6IGljb247IGZvbnQtc2l6ZTogMTJweDsgY29sb3I6YmxhY2s7IGZvbnQtd2VpZ2h0OiBub3JtYWw7fQotCi0vKiBmaWVsZHNldCtsZWdlbmQgU3R5bGVzICovCi0ua2V5bGluZWZpZWxkc2V0IHsgYm9yZGVyLWNvbG9yOiM4MDgwRkY7IGJvcmRlci13aWR0aDoxcHg7IGJvcmRlci1zdHlsZTpzb2xpZDsgfQotLmhlYWRlcmZpZWxkc2V0IHsgLW1vei1ib3JkZXItcmFkaXVzOiA3cHQ7IHBhZGRpbmc6IDNweDsgYm9yZGVyOjFweCBzb2xpZCAjQzBDMEMwOyB9Ci0KLS8qIHRhYmxlIFN0eWxlcyAqLwotLnRhYmxlYm9yZGVyIHtib3JkZXItbGVmdDowcHggc29saWQgI0I4QjRBMzsgYm9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjQjhCNEEzOyBib3JkZXItdG9wOjFweCBzb2xpZCAjQjhCNEEzOyBib3JkZXItYm90dG9tOjBweCBzb2xpZCAjQjhCNEEzOyB9Ci0udGFibGVjZWxscyB7IGJvcmRlci1sZWZ0OjFweCBzb2xpZCAjQjhCNEEzOyBib3JkZXItcmlnaHQ6MHB4IHNvbGlkICNCOEI0QTM7IGJvcmRlci10b3A6MHB4IHNvbGlkICNCOEI0QTM7IGJvcmRlci1ib3R0b206MXB4IHNvbGlkICNCOEI0QTM7IGZvbnQ6IGljb247IGZvbnQtc2l6ZTogMTFweDsgdGV4dC1hbGlnbjpsZWZ0fQotLmNoZWNrYm94Y2VsbHMgeyBib3JkZXItbGVmdDoxcHggc29saWQgI0I4QjRBMzsgYm9yZGVyLXJpZ2h0OjBweCBzb2xpZCAjQjhCNEEzOyBib3JkZXItdG9wOjBweCBzb2xpZCAjQjhCNEEzOyBib3JkZXItYm90dG9tOjFweCBzb2xpZCAjQjhCNEEzOyBmb250OiBpY29uOyBmb250LXNpemU6IDExcHg7IGJhY2tncm91bmQtY29sb3I6ICNFQ0U5RDh9Ci10aC5oZWFkZXJjb2xvciB7IGJvcmRlci1sZWZ0OjFweCBzb2xpZCAjQjhCNEEzOyBib3JkZXItcmlnaHQ6MHB4IHNvbGlkICNCOEI0QTM7IGJvcmRlci10b3A6MHB4IHNvbGlkICNCOEI0QTM7IGJvcmRlci1ib3R0b206MXB4IHNvbGlkICNCOEI0QTM7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udDogaWNvbjsgZm9udC1zaXplOiAxMXB4OyBiYWNrZ3JvdW5kLWNvbG9yOiM0OTc3QjQ7IGNvbG9yOiNGRkZGRkY7IHRleHQtYWxpZ246Y2VudGVyfQotdGguc2luZ2xlaGVhZGVyY29sb3IgeyBib3JkZXItbGVmdDoxcHggc29saWQgI0I4QjRBMzsgYm9yZGVyLXJpZ2h0OjBweCBzb2xpZCAjQjhCNEEzOyBib3JkZXItdG9wOjBweCBzb2xpZCAjQjhCNEEzOyBib3JkZXItYm90dG9tOjFweCBzb2xpZCAjQjhCNEEzOyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQ6IGljb247IGZvbnQtc2l6ZTogMTFweDsgYmFja2dyb3VuZC1jb2xvcjojNDk3N0I0OyBjb2xvcjojRkZGRkZGOyB0ZXh0LWFsaWduOmxlZnR9Ci0uZmlyc3Rjb2x1bW5lcnJhbnRyb3djb2xvciB7IGJvcmRlci1sZWZ0OjFweCBzb2xpZCByZWQ7IGJvcmRlci1yaWdodDowcHggc29saWQgI0I3QjRBMzsgYm9yZGVyLXRvcDoxcHggc29saWQgcmVkOyBib3JkZXItYm90dG9tOjFweCBzb2xpZCByZWQ7IGZvbnQ6IGljb247IGZvbnQtc2l6ZTogMTFweDsgYmFja2dyb3VuZC1jb2xvcjojRTZFQUQ4OyB0ZXh0LWFsaWduOmxlZnR9Ci0ubWlkZGxlZXJyYW50cm93Y29sb3IgeyBib3JkZXItbGVmdDoxcHggc29saWQgI0I3QjRBMzsgYm9yZGVyLXJpZ2h0OjBweCBzb2xpZCAjQjdCNEEzOyBib3JkZXItdG9wOjFweCBzb2xpZCByZWQ7IGJvcmRlci1ib3R0b206MXB4IHNvbGlkIHJlZDsgZm9udDogaWNvbjsgZm9udC1zaXplOiAxMXB4OyBiYWNrZ3JvdW5kLWNvbG9yOiNFNkVBRDg7IHRleHQtYWxpZ246bGVmdH0KLS5sYXN0Y29sdW1uZXJyYW50cm93Y29sb3IgeyBib3JkZXItbGVmdDoxcHggc29saWQgI0I3QjRBMzsgYm9yZGVyLXJpZ2h0OjFweCBzb2xpZCByZWQ7IGJvcmRlci10b3A6MXB4IHNvbGlkIHJlZDsgYm9yZGVyLWJvdHRvbToxcHggc29saWQgcmVkOyBmb250OiBpY29uOyBmb250LXNpemU6IDExcHg7IGJhY2tncm91bmQtY29sb3I6I0U2RUFEODsgdGV4dC1hbGlnbjpsZWZ0fQotLnJvd2NvbG9yIHsgYm9yZGVyLWxlZnQ6MXB4IHNvbGlkICNCOEI0QTM7IGJvcmRlci1yaWdodDowcHggc29saWQgI0I4QjRBMzsgYm9yZGVyLXRvcDowcHggc29saWQgI0I4QjRBMzsgYm9yZGVyLWJvdHRvbToxcHggc29saWQgI0I4QjRBMzsgZm9udDogaWNvbjsgZm9udC1zaXplOiAxMXB4OyBiYWNrZ3JvdW5kLWNvbG9yOiNFNkVBRDg7IHRleHQtYWxpZ246bGVmdH0KLQotLyogRm9ybSBlbGVtZW50cyBhbmQgc3RhdHVzIGNvbnRlbnRzICovCi10ZCB7IGZvbnQ6IGljb247IGZvbnQtc2l6ZTogMTJweDsgfQotdGggeyBmb250OiBpY29uOyBmb250LXNpemU6IDEycHg7IH0KLWlucHV0IHsgZm9udDogaWNvbjsgZm9udC1zaXplOiAxMnB4OyB9Ci0uc2VsZWN0bGlzdCB7Zm9udDogaWNvbjsgZm9udC1zaXplOiAxMnB4OyBjb2xvcjogQmxhY2s7IGJvcmRlci1zdHlsZTpzb2xpZDsgYm9yZGVyLXdpZHRoIDogMXB4OyAgYm9yZGVyLWNvbG9yOiNDN0M1QjI7fQotc2VsZWN0IHsgZm9udDogaWNvbjsgZm9udC1zaXplOiAxMnB4OyB9Ci1wcmUgeyBmb250OiBpY29uOyBmb250LXNpemU6IDEycHg7IH0KLS5zbXRleHRlbnRlciB7Zm9udDogaWNvbjsgZm9udC1zaXplOiAxNHB4OyBjb2xvcjogQmxhY2s7IGJvcmRlci1zdHlsZTpzb2xpZDsgYm9yZGVyLXdpZHRoIDogMXB4OyBib3JkZXItY29sb3I6ICNDN0M1QjI7IHdpZHRoOjEwJTsgfQotLnRleHRlbnRlciB7Zm9udDogaWNvbjsgZm9udC1zaXplOiAxNHB4OyBjb2xvcjogQmxhY2s7IGJvcmRlci1zdHlsZTpzb2xpZDsgYm9yZGVyLXdpZHRoIDogMXB4OyBib3JkZXItY29sb3I6ICNDN0M1QjI7IHdpZHRoOjkwJTsgfQotLnRhYmxldGV4dGVudGVyIHtmb250OiBpY29uOyBmb250LXNpemU6IDE0cHg7IGNvbG9yOiBCbGFjazsgYm9yZGVyLXN0eWxlOnNvbGlkOyBib3JkZXItd2lkdGggOiAxcHg7IGJvcmRlci1jb2xvcjogI0M3QzVCMjsgd2lkdGg6MTAwJTsgfQotLnRhYmxlZmlsZWJyb3dzZSB7d2lkdGg6MTAwJTsgYm9yZGVyLXN0eWxlOnNvbGlkOyBib3JkZXItd2lkdGg6MXB4OyBmb250LXNpemU6IDE0cHg7IGJvcmRlci1jb2xvcjogI0M3QzVCMjsgZm9udDogaWNvbjsgfQotaW5wdXQuYnV0dG9uIHtmb250OiBpY29uOyBmb250LXNpemU6IDExcHg7IGJvcmRlci13aWR0aCA6IDFweDsgYm9yZGVyLXN0eWxlOm91dHNldDsgaGVpZ2h0OjIycHg7fQotaW5wdXQucmFkaW8ge2ZvbnQ6IGljb247IGZvbnQtc2l6ZTogMTFweDt9Ci1pbWcudHdpc3Qge2JvcmRlci13aWR0aDowIDAgMCAwcHg7IGhlaWdodDoxMHB4OyB3aWR0aDoxMXB4O30KLQotLyogRnJhZ21lbnQgU3R5bGVzICovCi0uZml4ZnJhZ3RhYmxlIHt3aWR0aDo5NSU7IGJvcmRlcjowcHggbm9uZTsgfQotLmlubmVyZml4ZnJhZ3RhYmxlIHt3aWR0aDoxMDAlOyBib3JkZXI6MHB4IG5vbmU7IH0KLS5yYW5nZWZyYWd0YWJsZSB7d2lkdGg6OTUlOyBib3JkZXItbGVmdDowcHggc29saWQgI0I4QjRBMzsgYm9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjQjhCNEEzOyBib3JkZXItdG9wOjFweCBzb2xpZCAjQjhCNEEzOyBib3JkZXItYm90dG9tOjBweCBzb2xpZCAjQjhCNEEzO30KLS5pbm5lcnJhbmdlZnJhZ3RhYmxlIHt3aWR0aDoxMDAlOyBib3JkZXItbGVmdDowcHggc29saWQgI0I4QjRBMzsgYm9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjQjhCNEEzOyBib3JkZXItdG9wOjFweCBzb2xpZCAjQjhCNEEzOyBib3JkZXItYm90dG9tOjBweCBzb2xpZCAjQjhCNEEzO30KLS50ZXh0YXJlYWVudGVyIHtmb250OiBpY29uOyBmb250LXNpemU6IDE0cHg7IGNvbG9yOiBCbGFjazsgYm9yZGVyLXN0eWxlOnNvbGlkOyBib3JkZXItd2lkdGggOiAxcHg7IGJvcmRlci1jb2xvcjogI0M3QzVCMjsgd2lkdGg6MTAwJTsgaGVpZ2h0OjE1MHB4OyB9Ci0uYmlndGV4dGFyZWFlbnRlciB7Zm9udDogaWNvbjsgZm9udC1zaXplOiAxNHB4OyBjb2xvcjogQmxhY2s7IGJvcmRlci1zdHlsZTpzb2xpZDsgYm9yZGVyLXdpZHRoIDogMXB4OyBib3JkZXItY29sb3I6ICNDN0M1QjI7IHdpZHRoOjEwMCU7IGhlaWdodDozMDBweDsgfQotLmZyYWdhcmVhIHsgcGFkZGluZy1sZWZ0OiAzcHg7IHBhZGRpbmctYm90dG9tOiA1cHg7IH0KLQotaWZyYW1lIHtib3JkZXItd2lkdGg6IDJweDsgYm9yZGVyLXN0eWxlOiBpbnNldDsgfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvQWRkV1NJTFRvV1NJTFBlcnNwZWN0aXZlQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvQWRkV1NJTFRvV1NJTFBlcnNwZWN0aXZlQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRkZmRlNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL0FkZFdTSUxUb1dTSUxQZXJzcGVjdGl2ZUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuQWRkV1NJTFRvV1NJTFBlcnNwZWN0aXZlQWN0aW9uIiU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL3BhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZmF2b3JpdGVzL3NjcmlwdHMvZmF2b3JpdGVzUGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgQWRkV1NJTFRvV1NJTFBlcnNwZWN0aXZlQWN0aW9uIGFjdGlvbiA9IG5ldyBBZGRXU0lMVG9XU0lMUGVyc3BlY3RpdmVBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gIC8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0KLSAgaWYgKGFjdGlvblJlc3VsdCkgewotJT4KLSAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgIHBlcnNwZWN0aXZlV29ya0FyZWEubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFNob3dQZXJzcGVjdGl2ZUFjdGlvbi5nZXRBY3Rpb25MaW5rKEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9XU0lMLGZhbHNlKSkpJT4iOwotICAgIDwvc2NyaXB0PgotPCUKLSAgfQotICBlbHNlIHsKLSAgICBpZiAocmVxdWVzdC5nZXRQYXJhbWV0ZXIoRmF2b3JpdGVzQWN0aW9uSW5wdXRzLk1VTFRJUExFX0xJTktfQUNUSU9OKSA9PSBudWxsKSB7Ci0lPgotICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii9mYXZvcml0ZXMvYWN0aW9ucy9SZW1vdmVGYXZvcml0ZXNDb25maXJtSlNQLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICAgfQotICAgIGVsc2UgewotJT4KLSAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgICBmYXZQcm9wZXJ0aWVzQ29udGFpbmVyLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiZmF2b3JpdGVzL2Zhdl9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiKSklPiI7Ci0gICAgICAgIGZhdlN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJmYXZvcml0ZXMvZmF2X3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgICAgIDwvc2NyaXB0PgotPCUKLSAgICB9Ci0gIH0KLSU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc0FkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmIwMTBmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLkFkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uIiU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL3BhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZmF2b3JpdGVzL3NjcmlwdHMvZmF2b3JpdGVzUGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24gYWN0aW9uID0gQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24ubmV3QWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotICAvLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLSAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotCi0gIGlmIChhY3Rpb25SZXN1bHQpIHsKLSAgICBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpLmdldE5hdmlnYXRvck1hbmFnZXIoKS5tYWtlU2VsZWN0ZWROb2RlVmlzaWJsZSgpOwotJT4KLSAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgIHBlcnNwZWN0aXZlV29ya0FyZWEubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFNob3dQZXJzcGVjdGl2ZUFjdGlvbi5nZXRBY3Rpb25MaW5rKEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9VRERJLGZhbHNlKSkpJT4iOwotICAgIDwvc2NyaXB0PgotPCUKLSAgfQotICBlbHNlIHsKLSAgICBpZiAocmVxdWVzdC5nZXRQYXJhbWV0ZXIoRmF2b3JpdGVzQWN0aW9uSW5wdXRzLk1VTFRJUExFX0xJTktfQUNUSU9OKSA9PSBudWxsKSB7Ci0lPgotICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii9mYXZvcml0ZXMvYWN0aW9ucy9SZW1vdmVGYXZvcml0ZXNDb25maXJtSlNQLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICAgfQotICAgIGVsc2UgewotJT4KLSAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgICBmYXZQcm9wZXJ0aWVzQ29udGFpbmVyLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiZmF2b3JpdGVzL2Zhdl9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiKSklPiI7Ci0gICAgICAgIGZhdlN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJmYXZvcml0ZXMvZmF2X3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgICAgIDwvc2NyaXB0PgotPCUKLSAgICB9Ci0gIH0KLSU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc0FkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZmIyMWNiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLkZhdm9yaXRlc0FjdGlvbklucHV0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5BY3Rpb25JbnB1dHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLlNob3dQZXJzcGVjdGl2ZUFjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLkZhdm9yaXRlc0FkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uIiU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotCi08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNQYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0KLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotRmF2b3JpdGVzQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb24gYWN0aW9uID0gbmV3IEZhdm9yaXRlc0FkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0vLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLWJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0vLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLWJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLQotaWYgKGFjdGlvblJlc3VsdCkgewotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChTaG93UGVyc3BlY3RpdmVBY3Rpb24uZ2V0QWN0aW9uTGluayhBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfV1NETCxmYWxzZSkpKSU+IjsKLTwvc2NyaXB0PgotPCUKLX0KLWVsc2UgewotICBpZiAocmVxdWVzdC5nZXRQYXJhbWV0ZXIoRmF2b3JpdGVzQWN0aW9uSW5wdXRzLk1VTFRJUExFX0xJTktfQUNUSU9OKSA9PSBudWxsKSB7Ci0lPgotICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvZmF2b3JpdGVzL2FjdGlvbnMvUmVtb3ZlRmF2b3JpdGVzQ29uZmlybUpTUC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICB9Ci0gIGVsc2UgewotJT4KLSAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgIGZhdlByb3BlcnRpZXNDb250YWluZXIubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJmYXZvcml0ZXMvZmF2X3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCIpKSU+IjsKLSAgICAgIGZhdlN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJmYXZvcml0ZXMvZmF2X3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgICA8L3NjcmlwdD4KLTwlCi0gIH0KLX0KLSU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc0ltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc0ltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllOTk0MjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEuaW8uKiIgJT4KLQotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgRmF2b3JpdGVzSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uIGFjdGlvbiA9IG5ldyBGYXZvcml0ZXNJbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24oY29udHJvbGxlcik7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2FjdGlvbnMvSW1wb3J0VG9GaWxlU3lzdGVtQWN0aW9uLmluYyIgJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNJbXBvcnRUb1dvcmtiZW5jaEFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxOTM1YjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNJbXBvcnRUb1dvcmtiZW5jaEFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgRmF2b3JpdGVzSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb24gYWN0aW9uID0gbmV3IEZhdm9yaXRlc0ltcG9ydFRvV29ya2JlbmNoQWN0aW9uKGNvbnRyb2xsZXIpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9hY3Rpb25zL0ltcG9ydFRvV29ya2JlbmNoQWN0aW9uLmluYyIgJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc0xhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTAzM2IxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIEZhdm9yaXRlc0xhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24gYWN0aW9uID0gbmV3IEZhdm9yaXRlc0xhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24oY29udHJvbGxlcik7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2FjdGlvbnMvTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbi5pbmMiICU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc1RvZ2dsZU5vZGVBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9GYXZvcml0ZXNUb2dnbGVOb2RlQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2U4ZDE1Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc1RvZ2dsZU5vZGVBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBGYXZvcml0ZXNUb2dnbGVOb2RlQWN0aW9uIGFjdGlvbiA9IG5ldyBGYXZvcml0ZXNUb2dnbGVOb2RlQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgIC8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotCi0gICAvLyBEZXRlcm1pbmUgaWYgdGhlIGFjdGlvbiB3YXMgYWRkZWQgdG8gdGhlIGhpc3RvcnkgbGlzdC4KLSAgIGJvb2xlYW4gaXNBZGRlZFRvSGlzdG9yeSA9IGFjdGlvbi5pc0FkZGVkVG9IaXN0b3J5KCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2FjdGlvbnMvVG9nZ2xlTm9kZUFjdGlvbi5pbmMiICU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL1JlbW92ZUZhdm9yaXRlc0FjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL1JlbW92ZUZhdm9yaXRlc0FjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmYTFiMmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9SZW1vdmVGYXZvcml0ZXNBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5SZW1vdmVGYXZvcml0ZXNBY3Rpb24iJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc1BhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgIFJlbW92ZUZhdm9yaXRlc0FjdGlvbiBhY3Rpb24gPSBuZXcgUmVtb3ZlRmF2b3JpdGVzQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgICAvLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLSAgICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2FjdGlvbnMvQ2xlYXJOb2RlQWN0aW9uLmluYyIgJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvUmVtb3ZlRmF2b3JpdGVzQ29uZmlybUpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL1JlbW92ZUZhdm9yaXRlc0NvbmZpcm1KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMmQ4OWM5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvUmVtb3ZlRmF2b3JpdGVzQ29uZmlybUpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLlJlbW92ZUZhdm9yaXRlc0FjdGlvbiIlPgotCi08anNwOmluY2x1ZGUgcGFnZT0iL2Zhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc1BhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGh0bWw+Ci08aGVhZD4KLSAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgICBpZiAoY29uZmlybSgiPCU9Y29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpLmdldE1lc3NhZ2UoIk1TR19DT05GSVJNX1JFTU9WRV9OT0RFIiwgY29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlKCkuZ2V0Tm9kZU5hbWUoKSklPiIpKSB7Ci0gICAgICAgICAgICA8JQotICAgICAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCkuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICAgICAgICAgICU+Ci0gICAgICAgICAgICBwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChSZW1vdmVGYXZvcml0ZXNBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCwgQWN0aW9uSW5wdXRzLlZJRVdUT09MSURfREVGQVVMVCkpKSU+IjsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGZhdlByb3BlcnRpZXNDb250YWluZXIubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJmYXZvcml0ZXMvZmF2X3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCIpKSU+IjsKLSAgICAgICAgICAgIGZhdlN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJmYXZvcml0ZXMvZmF2X3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgICAgICAgfQotICAgIDwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9SZXNpemVGYXZvcml0ZXNGcmFtZXNBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9SZXNpemVGYXZvcml0ZXNGcmFtZXNBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDc1OTFkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvUmVzaXplRmF2b3JpdGVzRnJhbWVzQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAvLyBDcmVhdGUgdGhlIGFjdGlvbi4KLSAgIFJlc2l6ZUZhdm9yaXRlc0ZyYW1lc0FjdGlvbiBhY3Rpb24gPSBuZXcgUmVzaXplRmF2b3JpdGVzRnJhbWVzQWN0aW9uKGNvbnRyb2xsZXIpOwotICAgCi0gICAvLyBQb3B1bGF0ZSB0aGUgYWN0aW9uIHdpdGggdGhlIHJlcXVlc3QgcHJvcGVydGllcy4KLSAgIGJvb2xlYW4gcmVzdWx0ID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLSU+Ci08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc2ZyYW1lc2V0cy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIGlmIChyZXN1bHQpCi0gICB7Ci0gICAgIGFjdGlvbi5leGVjdXRlKGZhbHNlKTsKLSAgICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGlmIChpc01pY3Jvc29mdEludGVybmV0RXhwbG9yZXIoKSkKLSAgewotICAgIHZhciBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldCA9IGdldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0KCk7Ci0gICAgdmFyIGFjdGlvbnNDb250YWluZXJGcmFtZXNldCA9IGdldEFjdGlvbnNDb250YWluZXJGcmFtZXNldCgpOwotICAgIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0LnNldEF0dHJpYnV0ZSgiY29scyIsIjwlPWZhdlBlcnNwZWN0aXZlLmdldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpJT4iKTsKLSAgICBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXQuc2V0QXR0cmlidXRlKCJyb3dzIiwiPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpJT4iKTsKLSAgfQotICBlbHNlCi0gICAgcGVyc3BlY3RpdmVDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiZmF2b3JpdGVzL2Zhdl9wZXJzcGVjdGl2ZV9jb250ZW50LmpzcCIpKSU+IjsKLTwvc2NyaXB0PgotPCUKLSAgIH0KLSU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL1Jlc3RvcmVEZWZhdWx0RmF2b3JpdGVzQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvUmVzdG9yZURlZmF1bHRGYXZvcml0ZXNBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmU0YjE3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvUmVzdG9yZURlZmF1bHRGYXZvcml0ZXNBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLkZhdm9yaXRlc1Jlc3RvcmVEZWZhdWx0RmF2b3JpdGVzQWN0aW9uIiU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL3BhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZmF2b3JpdGVzL3NjcmlwdHMvZmF2b3JpdGVzUGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgIEZhdm9yaXRlc1Jlc3RvcmVEZWZhdWx0RmF2b3JpdGVzQWN0aW9uIGFjdGlvbiA9IG5ldyBGYXZvcml0ZXNSZXN0b3JlRGVmYXVsdEZhdm9yaXRlc0FjdGlvbihjb250cm9sbGVyKTsKLQotICAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gICAgLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi0gICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotCi0gICAgaWYgKGFjdGlvblJlc3VsdCkgewotJT4KLSAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgICAgcGVyc3BlY3RpdmVDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiZmF2b3JpdGVzL2Zhdl9wZXJzcGVjdGl2ZV9jb250ZW50LmpzcCIpKSU+IjsKLSAgICA8L3NjcmlwdD4KLTwlCi0gICAgfQotICAgIGVsc2UgewotJT4KLSAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgICAgZmF2U3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImZhdm9yaXRlcy9mYXZfc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotICAgIDwvc2NyaXB0PgotPCUKLSAgICB9Ci0lPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9SZXN0b3JlRGVmYXVsdEZhdm9yaXRlc0NvbmZpcm1KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9SZXN0b3JlRGVmYXVsdEZhdm9yaXRlc0NvbmZpcm1KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNWM1MzlkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvUmVzdG9yZURlZmF1bHRGYXZvcml0ZXNDb25maXJtSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLSAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgICAgaWYgKGNvbmZpcm0oIjwlPWNvbnRyb2xsZXIuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKS5nZXRNZXNzYWdlKCJNU0dfQ09ORklSTV9SRVNUT1JFX0RFRkFVTFRfRkFWT1JJVEVTIiklPiIpKQotICAgICAgICAgICAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImZhdm9yaXRlcy9hY3Rpb25zL1Jlc3RvcmVEZWZhdWx0RmF2b3JpdGVzQWN0aW9uSlNQLmpzcCIpKSU+IjsKLSAgICA8L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvU2VsZWN0RmF2b3JpdGVzTm9kZUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL1NlbGVjdEZhdm9yaXRlc05vZGVBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTU2ZTA2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvU2VsZWN0RmF2b3JpdGVzTm9kZUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLlNlbGVjdEZhdm9yaXRlc05vZGVBY3Rpb24iICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLS8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLVNlbGVjdEZhdm9yaXRlc05vZGVBY3Rpb24gYWN0aW9uID0gbmV3IFNlbGVjdEZhdm9yaXRlc05vZGVBY3Rpb24oY29udHJvbGxlcik7Ci0KLS8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi1ib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0KLS8vIERldGVybWluZSBpZiB0aGUgYWN0aW9uIHdhcyBhZGRlZCB0byB0aGUgaGlzdG9yeSBsaXN0LgotYm9vbGVhbiBpc0FkZGVkVG9IaXN0b3J5ID0gYWN0aW9uLmlzQWRkZWRUb0hpc3RvcnkoKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvYWN0aW9ucy9TZWxlY3ROb2RlQWN0aW9uLmluYyIgJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL1NlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMWI3ZDIwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvU2VsZWN0RmF2b3JpdGVzVG9vbEFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLlNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb24iICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLS8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLVNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb24gYWN0aW9uID0gbmV3IFNlbGVjdEZhdm9yaXRlc1Rvb2xBY3Rpb24oY29udHJvbGxlcik7Ci0KLS8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi1ib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0KLS8vIERldGVybWluZSBpZiB0aGUgYWN0aW9uIHdhcyBhZGRlZCB0byB0aGUgaGlzdG9yeSBsaXN0LgotYm9vbGVhbiBpc0FkZGVkVG9IaXN0b3J5ID0gYWN0aW9uLmlzQWRkZWRUb0hpc3RvcnkoKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvYWN0aW9ucy9TZWxlY3ROb2RlVG9vbEFjdGlvbi5pbmMiICU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9hY3Rpb25zL1NlbGVjdEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlOb2RlQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvU2VsZWN0RmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeU5vZGVBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZWYxMTk4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvU2VsZWN0RmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeU5vZGVBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy5TZWxlY3RGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Tm9kZUFjdGlvbiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotU2VsZWN0RmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeU5vZGVBY3Rpb24gYWN0aW9uID0gbmV3IFNlbGVjdEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlOb2RlQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0vLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLWFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLS8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotCi0vL21ha2Ugc3VyZSB0byByZWZyZXNoIG5vZGUgdmlldwotYWN0aW9uLnNldFRyZWVSZWZyZXNoTmVlZGVkKCk7Ci0KLQotLy8gRGV0ZXJtaW5lIGlmIHRoZSBhY3Rpb24gd2FzIGFkZGVkIHRvIHRoZSBoaXN0b3J5IGxpc3QuCi1ib29sZWFuIGlzQWRkZWRUb0hpc3RvcnkgPSBhY3Rpb24uaXNBZGRlZFRvSGlzdG9yeSgpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9hY3Rpb25zL1NlbGVjdE5vZGVBY3Rpb24uaW5jIiAlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9Td2l0Y2hQZXJzcGVjdGl2ZUZyb21GYXZvcml0ZXNBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvYWN0aW9ucy9Td2l0Y2hQZXJzcGVjdGl2ZUZyb21GYXZvcml0ZXNBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYmEwY2RlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2FjdGlvbnMvU3dpdGNoUGVyc3BlY3RpdmVGcm9tRmF2b3JpdGVzQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLS8vIFByZXBhcmUgdGhlIGFjdGlvbgotU3dpdGNoUGVyc3BlY3RpdmVGcm9tRmF2b3JpdGVzQWN0aW9uIGFjdGlvbiA9IG5ldyBTd2l0Y2hQZXJzcGVjdGl2ZUZyb21GYXZvcml0ZXNBY3Rpb24oY29udHJvbGxlcik7Ci0KLS8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi1ib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0KLS8vIERldGVybWluZSBpZiB0aGUgYWN0aW9uIHdhcyBhZGRlZCB0byB0aGUgaGlzdG9yeSBsaXN0LgotYm9vbGVhbiBpc0FkZGVkVG9IaXN0b3J5ID0gYWN0aW9uLmlzQWRkZWRUb0hpc3RvcnkoKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvc3dpdGNocGVyc3BlY3RpdmUuanNwIiBmbHVzaD0idHJ1ZSIvPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZmF2X2FjdGlvbnNfY29udGFpbmVyLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zhdl9hY3Rpb25zX2NvbnRhaW5lci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0YTRlZTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZmF2X2FjdGlvbnNfY29udGFpbmVyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX0FDVElPTlNfQ09OVEFJTkVSIiklPjwvdGl0bGU+Ci08L2hlYWQ+Ci08ZnJhbWVzZXQgcm93cz0iPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpJT4iIGJnY29sb3I9IiNFQ0U5RDgiPgotICA8ZnJhbWUgbmFtZT0iPCU9RmF2b3JpdGVzRnJhbWVOYW1lcy5QUk9QRVJUSUVTX0NPTlRBSU5FUiU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiZmF2b3JpdGVzL2Zhdl9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiKSklPiIgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MSBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wPgotICA8ZnJhbWUgbmFtZT0iPCU9RmF2b3JpdGVzRnJhbWVOYW1lcy5TVEFUVVNfQ09OVEFJTkVSJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJmYXZvcml0ZXMvZmF2X3N0YXR1c19jb250YWluZXIuanNwIikpJT4iIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTEgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MD4KLTwvZnJhbWVzZXQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mYXZfbmF2aWdhdG9yX2NvbnRhaW5lci5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mYXZfbmF2aWdhdG9yX2NvbnRhaW5lci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2ZTQwMWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZmF2X25hdmlnYXRvcl9jb250YWluZXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPgotPC9oZWFkPgotPGZyYW1lc2V0IHJvd3M9IjMzLCoiIGJvcmRlcj0wIGJnY29sb3I9IiNFQ0U5RDgiPgotICA8ZnJhbWUgbmFtZT0iPCU9RmF2b3JpdGVzRnJhbWVOYW1lcy5OQVZJR0FUT1JfVE9PTEJBUiU+IiB0aXRsZT0iPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfTkFWSUdBVE9SX1RPT0xCQVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiZmF2b3JpdGVzL2Zhdl9uYXZpZ2F0b3JfdG9vbGJhci5qc3AiKSklPiIgbm9yZXNpemUgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MCBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wPgotICA8ZnJhbWUgbmFtZT0iPCU9RmF2b3JpdGVzRnJhbWVOYW1lcy5OQVZJR0FUT1JfQ09OVEVOVCU+IiB0aXRsZT0iPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfTkFWSUdBVE9SX0NPTlRFTlQiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiZmF2b3JpdGVzL2Zhdl9uYXZpZ2F0b3JfY29udGVudC5qc3AiKSklPiIgbm9yZXNpemUgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MCBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wPgotPC9mcmFtZXNldD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zhdl9uYXZpZ2F0b3JfY29udGVudC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mYXZfbmF2aWdhdG9yX2NvbnRlbnQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDA2Y2U4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zhdl9uYXZpZ2F0b3JfY29udGVudC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0lPgotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfTkFWSUdBVE9SX0NPTlRFTlQiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3MvdHJlZXZpZXcuY3NzIikpJT4iPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLSAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLSAgPC9zY3JpcHQ+Ci0gIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL3RyZWV2aWV3LmpzIikpJT4iPgotICA8L3NjcmlwdD4KLTwvaGVhZD4KLTwlCi0gICAgU3RyaW5nIHNlbGVjdGVkQW5jaG9yTmFtZSA9ICIiOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gZmF2UGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBpbnQgZm9jdXNlZE5vZGVJZCA9IG5vZGVNYW5hZ2VyLmdldEZvY3VzZWROb2RlSWQoKTsKLSAgICBTdHJpbmcgZm9jdXNlZEFuY2hvck5hbWUgPSBTdHJpbmcudmFsdWVPZihmb2N1c2VkTm9kZUlkKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIGlmIChzZWxlY3RlZE5vZGUgIT0gbnVsbCkgewotICAgICAgICBzZWxlY3RlZEFuY2hvck5hbWUgPSBzZWxlY3RlZE5vZGUuZ2V0QW5jaG9yTmFtZSgpOwotICAgICAgICBpZiAoZm9jdXNlZE5vZGVJZCA9PSBzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCkpCi0gICAgICAgICAgICBmb2N1c2VkQW5jaG9yTmFtZSA9IHNlbGVjdGVkQW5jaG9yTmFtZTsKLSAgICB9Ci0lPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBvbkxvYWQ9InNlbGYubG9jYXRpb24uaGFzaD0nIzwlPWZvY3VzZWRBbmNob3JOYW1lJT4nO3NldFNlbGVjdGVkQW5jaG9yTmFtZSgnPCU9c2VsZWN0ZWRBbmNob3JOYW1lJT4nKSIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9InRyZWVjb250ZW50Ym9yZGVyIj4KLSAgICA8JT1ub2RlTWFuYWdlci5yZW5kZXJUcmVlVmlldyhyZXNwb25zZSklPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mYXZfbmF2aWdhdG9yX3Rvb2xiYXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZmF2X25hdmlnYXRvcl90b29sYmFyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRhMzcyMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mYXZfbmF2aWdhdG9yX3Rvb2xiYXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9OQVZJR0FUT1JfVE9PTEJBUiIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy90b29sYmFyLmNzcyIpKSU+Ij4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZmF2b3JpdGVzL3NjcmlwdHMvZmF2b3JpdGVzZnJhbWVzZXRzLmpzcCIgZmx1c2g9InRydWUiLz4gIAotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvdG9vbGJhci5qcyIpKSU+Ij4KLTwvc2NyaXB0PiAgCi08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJ0b29sYmFyYm9keW1hcmdpbiI+Ci08ZGl2IGlkPSJ0b29sYmFyYm9yZGVyIj4KLSAgPGRpdiBpZD0idG9vbGJhciIgb25kYmxjbGljaz0icHJvY2Vzc0ZyYW1lc2V0U2l6ZXMoZG9jdW1lbnQuZm9ybXNbMF0pIj4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUFjdGlvbiIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gIGZvcm1BY3Rpb24uYXBwZW5kKCJmYXZvcml0ZXMvYWN0aW9ucy9SZXNpemVGYXZvcml0ZXNGcmFtZXNBY3Rpb25KU1AuanNwIik7Ci0lPiAgCi08L2pzcDp1c2VCZWFuPgotPGpzcDp1c2VCZWFuIGlkPSJmb3JtRnJhbWVOYW1lIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgIGZvcm1GcmFtZU5hbWUuYXBwZW5kKEZhdm9yaXRlc0ZyYW1lTmFtZXMuTkFWSUdBVE9SX0NPTlRBSU5FUik7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZmF2b3JpdGVzL2Zvcm1zL1Byb2Nlc3NGYXZvcml0ZXNGcmFtZXNldHNGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8dGFibGUgd2lkdGg9IjEwMCUiIGhlaWdodD0yNSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgYm9yZGVyPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImNlbnRlciIgd2lkdGg9MjUgaGVpZ2h0PTI1PjxpbWcgY2xhc3M9Im5vcm1hbCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9uYXZpZ2F0b3IuZ2lmIikpJT4iIHdpZHRoPTE2IGhlaWdodD0xNj48L3RkPgotPCUKLSAgIFN0cmluZyBkb3VibGVDbGlja0NvbHVtblRpdGxlID0gbnVsbDsKLSAgIGlmIChmYXZQZXJzcGVjdGl2ZS5nZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKS5zdGFydHNXaXRoKCIxMDAlIikpCi0gICAgIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9ET1VCTEVfQ0xJQ0tfVE9fUkVTVE9SRSIpOwotICAgZWxzZQotICAgICBkb3VibGVDbGlja0NvbHVtblRpdGxlID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfRE9VQkxFX0NMSUNLX1RPX01BWElNSVpFIik7Ci0lPiAgICAgICAgCi0gICAgICAgIDx0ZCBpZD0iZG91YmxlY2xpY2tjb2x1bW4iIHRpdGxlPSI8JT1kb3VibGVDbGlja0NvbHVtblRpdGxlJT4iIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0ibGVmdCIgd2lkdGg9IioiIGhlaWdodD0yNSBub3dyYXAgY2xhc3M9InRleHQiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX05BVklHQVRPUiIpJT48L3RkPgotPCUKLSAgIFN0cmluZyBhbHRSZXN0b3JlID0gZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1JFU1RPUkVfREVGQVVMVF9GQVZPUklURVMiKTsKLSAgIFN0cmluZyBhbHRSZW1vdmUgPSBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfUkVNT1ZFX0ZBVk9SSVRFIik7Ci0lPiAgIAotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiIHdpZHRoPTI1IGhlaWdodD0yNT48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImZhdm9yaXRlcy9hY3Rpb25zL1Jlc3RvcmVEZWZhdWx0RmF2b3JpdGVzQ29uZmlybUpTUC5qc3AiKSklPiIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iPjxpbWcgY2xhc3M9Im5vcm1hbCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9yZWZyZXNoX2VuYWJsZWQuZ2lmIikpJT4iIHdpZHRoPTE2IGhlaWdodD0xNiBvbk1vdXNlT3Zlcj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9yZWZyZXNoX2hpZ2hsaWdodGVkLmdpZiIpKSU+Jzttb3VzZW92ZXIodGhpcykiIG9uTW91c2VPdXQ9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvcmVmcmVzaF9lbmFibGVkLmdpZiIpKSU+Jzttb3VzZW91dCh0aGlzKSIgb25Nb3VzZURvd249InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvcmVmcmVzaF9oaWdobGlnaHRlZC5naWYiKSklPic7bW91c2Vkb3duKHRoaXMpIiBvbk1vdXNlVXA9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvcmVmcmVzaF9lbmFibGVkLmdpZiIpKSU+Jzttb3VzZXVwKHRoaXMpIiBhbHQ9IjwlPWFsdFJlc3RvcmUlPiIgdGl0bGU9IjwlPWFsdFJlc3RvcmUlPiI+PC9hPjwvdGQ+Ci0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImNlbnRlciIgd2lkdGg9MjUgaGVpZ2h0PTI1PjxhIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiZmF2b3JpdGVzL2FjdGlvbnMvUmVtb3ZlRmF2b3JpdGVzQWN0aW9uSlNQLmpzcCIpKSU+IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI+PGltZyBjbGFzcz0ibm9ybWFsIiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2NsZWFyX2VuYWJsZWQuZ2lmIikpJT4iIHdpZHRoPTE2IGhlaWdodD0xNiBvbk1vdXNlT3Zlcj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9oaWdobGlnaHRlZC5naWYiKSklPic7bW91c2VvdmVyKHRoaXMpIiBvbk1vdXNlT3V0PSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2NsZWFyX2VuYWJsZWQuZ2lmIikpJT4nO21vdXNlb3V0KHRoaXMpIiBvbk1vdXNlRG93bj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9oaWdobGlnaHRlZC5naWYiKSklPic7bW91c2Vkb3duKHRoaXMpIiBvbk1vdXNlVXA9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfZW5hYmxlZC5naWYiKSklPic7bW91c2V1cCh0aGlzKSIgYWx0PSI8JT1hbHRSZW1vdmUlPiIgdGl0bGU9IjwlPWFsdFJlbW92ZSU+Ij48L2E+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgPC9kaXY+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zhdl9wZXJzcGVjdGl2ZV9jb250ZW50LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zhdl9wZXJzcGVjdGl2ZV9jb250ZW50LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQzMTlhYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mYXZfcGVyc3BlY3RpdmVfY29udGVudC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9QRVJTUEVDVElWRV9DT05URU5UIiklPjwvdGl0bGU+Ci08L2hlYWQ+Ci08ZnJhbWVzZXQgY29scz0iPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCklPiIgYmdjb2xvcj0jRUNFOUQ4PgotICA8JQotICBpZiAob3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuaXNSVEwoKSkKLSAgewotICAlPgotICA8ZnJhbWUgbmFtZT0iPCU9RmF2b3JpdGVzRnJhbWVOYW1lcy5BQ1RJT05TX0NPTlRBSU5FUiU+IiB0aXRsZT0iPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfQUNUSU9OU19DT05UQUlORVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiZmF2b3JpdGVzL2Zhdl9hY3Rpb25zX2NvbnRhaW5lci5qc3AiKSklPiIgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MCBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0xPgotICA8ZnJhbWUgbmFtZT0iPCU9RmF2b3JpdGVzRnJhbWVOYW1lcy5OQVZJR0FUT1JfQ09OVEFJTkVSJT4iIHRpdGxlPSI8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9OQVZJR0FUT1JfQ09OVEFJTkVSIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImZhdm9yaXRlcy9mYXZfbmF2aWdhdG9yX2NvbnRhaW5lci5qc3AiKSklPiIgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MCBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0xPgotICA8JQotICB9Ci0gIGVsc2UKLSAgewotICAlPgotICA8ZnJhbWUgbmFtZT0iPCU9RmF2b3JpdGVzRnJhbWVOYW1lcy5OQVZJR0FUT1JfQ09OVEFJTkVSJT4iIHRpdGxlPSI8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9OQVZJR0FUT1JfQ09OVEFJTkVSIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImZhdm9yaXRlcy9mYXZfbmF2aWdhdG9yX2NvbnRhaW5lci5qc3AiKSklPiIgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MCBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0xPgotICA8ZnJhbWUgbmFtZT0iPCU9RmF2b3JpdGVzRnJhbWVOYW1lcy5BQ1RJT05TX0NPTlRBSU5FUiU+IiB0aXRsZT0iPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfQUNUSU9OU19DT05UQUlORVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiZmF2b3JpdGVzL2Zhdl9hY3Rpb25zX2NvbnRhaW5lci5qc3AiKSklPiIgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MCBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0xPgotICA8JQotICB9Ci0gICU+Ci08L2ZyYW1lc2V0PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZmF2X3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zhdl9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4YThiZTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZmF2X3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1BST1BFUlRJRVNfQ09OVEFJTkVSIiklPjwvdGl0bGU+Ci08L2hlYWQ+Ci08ZnJhbWVzZXQgcm93cz0iMzMsKiIgYm9yZGVyPTAgYmdjb2xvcj0iI0VDRTlEOCI+Ci0gIDxmcmFtZSBuYW1lPSI8JT1GYXZvcml0ZXNGcmFtZU5hbWVzLlBST1BFUlRJRVNfVE9PTEJBUiU+IiB0aXRsZT0iPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfUFJPUEVSVElFU19UT09MQkFSIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImZhdm9yaXRlcy9mYXZfcHJvcGVydGllc190b29sYmFyLmpzcCIpKSU+IiBub3Jlc2l6ZSBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci0gIDxmcmFtZSBuYW1lPSI8JT1GYXZvcml0ZXNGcmFtZU5hbWVzLlBST1BFUlRJRVNfQ09OVEVOVCU+IiB0aXRsZT0iPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfUFJPUEVSVElFU19DT05URU5UIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImZhdm9yaXRlcy9mYXZfcHJvcGVydGllc19jb250ZW50LmpzcCIpKSU+IiBub3Jlc2l6ZSBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci08L2ZyYW1lc2V0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZmF2X3Byb3BlcnRpZXNfY29udGVudC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mYXZfcHJvcGVydGllc19jb250ZW50LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTU3MmMxMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mYXZfcHJvcGVydGllc19jb250ZW50LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1BST1BFUlRJRVNfQ09OVEVOVCIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotPCUKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IGZhdlBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBpZiAoc2VsZWN0ZWROb2RlICE9IG51bGwpCi0gICAgewotICAgICAgICBUb29sTWFuYWdlciB0b29sTWFuYWdlcjsKLSAgICAgICAgaWYgKHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSA9PSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpCi0gICAgICAgICAgICB0b29sTWFuYWdlciA9IHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0b29sTWFuYWdlciA9IHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbE1hbmFnZXIoKTsKLSAgICAgICAgVG9vbCBzZWxlY3RlZFRvb2wgPSB0b29sTWFuYWdlci5nZXRTZWxlY3RlZFRvb2woKTsKLSAgICAgICAgaWYgKHNlbGVjdGVkVG9vbCAhPSBudWxsICYmIHNlbGVjdGVkVG9vbC5nZXRUb29sVHlwZSgpICE9IFRvb2xUeXBlcy5BQ1RJT04pIHsKLSAgICAgICAgJT4KLSAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICAgICAgICBsb2NhdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KHNlbGVjdGVkVG9vbC5nZXRGb3JtTGluaygpKSklPiI7Ci0gICAgICAgIDwvc2NyaXB0PgotICAgICAgICA8JQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAlPgotPHRhYmxlPgotICA8dHI+Ci0gICAgPHRkPgotICAgICAgPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9fQUNUSU9OX1NFTEVDVEVEIiklPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotICAgICAgICA8JQotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgewotICAgICU+Ci08dGFibGU+Ci0gIDx0cj4KLSAgICA8dGQ+Ci0gICAgICA8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT19OT0RFX1NFTEVDVEVEIiklPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotICAgIDwlCi0gICAgfQotJT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZmF2X3Byb3BlcnRpZXNfdG9vbGJhci5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mYXZfcHJvcGVydGllc190b29sYmFyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2I5NDY0ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mYXZfcHJvcGVydGllc190b29sYmFyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfUFJPUEVSVElFU19UT09MQkFSIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3Rvb2xiYXIuY3NzIikpJT4iPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNmcmFtZXNldHMuanNwIiBmbHVzaD0idHJ1ZSIvPiAgCi08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy90b29sYmFyLmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJ0b29sYmFyYm9keW1hcmdpbiI+Ci08ZGl2IGlkPSJ0b29sYmFyYm9yZGVyIj4KLSAgPGRpdiBpZD0idG9vbGJhciIgb25kYmxjbGljaz0icHJvY2Vzc0ZyYW1lc2V0U2l6ZXMoZG9jdW1lbnQuZm9ybXNbMF0pIj4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUFjdGlvbiIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gIGZvcm1BY3Rpb24uYXBwZW5kKCJmYXZvcml0ZXMvYWN0aW9ucy9SZXNpemVGYXZvcml0ZXNGcmFtZXNBY3Rpb25KU1AuanNwIik7Ci0lPiAgCi08L2pzcDp1c2VCZWFuPgotPGpzcDp1c2VCZWFuIGlkPSJmb3JtRnJhbWVOYW1lIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgIGZvcm1GcmFtZU5hbWUuYXBwZW5kKEZhdm9yaXRlc0ZyYW1lTmFtZXMuUFJPUEVSVElFU19DT05UQUlORVIpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zhdm9yaXRlcy9mb3Jtcy9Qcm9jZXNzRmF2b3JpdGVzRnJhbWVzZXRzRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPHRhYmxlIHdpZHRoPSIxMDAlIiBoZWlnaHQ9MjUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGJvcmRlcj0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiIHdpZHRoPTI1IGhlaWdodD0yNT48aW1nIGNsYXNzPSJub3JtYWwiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvYWN0aW9ucy5naWYiKSklPiIgd2lkdGg9MTYgaGVpZ2h0PTE2PjwvdGQ+Ci08JQotICAgU3RyaW5nIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBudWxsOwotICAgaWYgKGZhdlBlcnNwZWN0aXZlLmdldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpLmVuZHNXaXRoKCIxMDAlIikpCi0gICB7Ci0gICAgIGlmIChmYXZQZXJzcGVjdGl2ZS5nZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKCkuc3RhcnRzV2l0aCgiMTAwJSIpKQotICAgICAgIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9ET1VCTEVfQ0xJQ0tfVE9fUkVTVE9SRSIpOwotICAgfQotICAgaWYgKGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPT0gbnVsbCkKLSAgICAgZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0RPVUJMRV9DTElDS19UT19NQVhJTUlaRSIpOwotJT4gICAgICAgIAotICAgICAgICA8dGQgaWQ9ImRvdWJsZWNsaWNrY29sdW1uIiB0aXRsZT0iPCU9ZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSU+IiB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImxlZnQiIHdpZHRoPSIqIiBoZWlnaHQ9MjUgbm93cmFwIGNsYXNzPSJ0ZXh0Ij48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9BQ1RJT05TIiklPjwvdGQ+Ci08JQotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gZmF2UGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIGlmIChzZWxlY3RlZE5vZGUgIT0gbnVsbCkgewotICAgICAgICBUb29sTWFuYWdlciB0b29sTWFuYWdlcjsKLSAgICAgICAgaWYgKHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSA9PSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpCi0gICAgICAgICAgICB0b29sTWFuYWdlciA9IHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0b29sTWFuYWdlciA9IHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbE1hbmFnZXIoKTsKLSAgICAgICAgZm9yKGludCBpPTA7IGk8dG9vbE1hbmFnZXIuZ2V0TnVtYmVyT2ZUb29scygpOyBpKyspIHsKLSAgICAgICAgICAgIFRvb2wgdG9vbCA9IChUb29sKXRvb2xNYW5hZ2VyLmdldFRvb2woaSk7Ci0gICAgICAgICAgICAlPgotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiIHdpZHRoPTI1IGhlaWdodD0yNT48JT10b29sLnJlbmRlclRvb2wocmVzcG9uc2UsY29udHJvbGxlciklPjwvdGQ+Ci0gICAgICAgICAgICA8JQotICAgICAgICB9Ci0gICAgfQotJT4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgPC9kaXY+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zhdl9zdGF0dXNfY29udGFpbmVyLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zhdl9zdGF0dXNfY29udGFpbmVyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWM0ZDY2MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mYXZfc3RhdHVzX2NvbnRhaW5lci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9TVEFUVVNfQ09OVEFJTkVSIiklPjwvdGl0bGU+Ci08L2hlYWQ+Ci08ZnJhbWVzZXQgcm93cz0iMzMsKiIgYm9yZGVyPTAgYmdjb2xvcj0iI0VDRTlEOCI+Ci0gIDxmcmFtZSBuYW1lPSI8JT1GYXZvcml0ZXNGcmFtZU5hbWVzLlNUQVRVU19UT09MQkFSJT4iIHRpdGxlPSI8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9TVEFUVVNfVE9PTEJBUiIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJmYXZvcml0ZXMvZmF2X3N0YXR1c190b29sYmFyLmpzcCIpKSU+IiBub3Jlc2l6ZSBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci0gIDxmcmFtZSBuYW1lPSI8JT1GYXZvcml0ZXNGcmFtZU5hbWVzLlNUQVRVU19DT05URU5UJT4iIHRpdGxlPSI8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9TVEFUVVNfQ09OVEVOVCIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJmYXZvcml0ZXMvZmF2X3N0YXR1c19jb250ZW50LmpzcCIpKSU+IiBub3Jlc2l6ZSBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci08L2ZyYW1lc2V0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZmF2X3N0YXR1c19jb250ZW50LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zhdl9zdGF0dXNfY29udGVudC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzN2ZjZDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZmF2X3N0YXR1c19jb250ZW50LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDI3ICAgMTI3NDQzIGplc3BlckBzZWxza2FiZXQub3JnIC0gSmVzcGVyIFMgTW9sbGVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuKiwKLQlvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9TVEFUVVNfQ09OVEVOVCIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICA8dGFibGU+Ci0gICAgPHRyPgotICAgICAgPHRkPgotICAgICAgICA8cHJlPgotPCU9SFRNTFV0aWxzLmNoYXJhY3RlcnNUb0hUTUxFbnRpdGllc1N0cmljdChmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5nZXRNZXNzYWdlc0Zyb21MaXN0KCkpJT4KLSAgICAgICAgPC9wcmU+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zhdl9zdGF0dXNfdG9vbGJhci5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mYXZfc3RhdHVzX3Rvb2xiYXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjQ2NmE3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zhdl9zdGF0dXNfdG9vbGJhci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1NUQVRVU19UT09MQkFSIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3Rvb2xiYXIuY3NzIikpJT4iPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNmcmFtZXNldHMuanNwIiBmbHVzaD0idHJ1ZSIvPiAgCi08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy90b29sYmFyLmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJ0b29sYmFyYm9keW1hcmdpbiI+Ci08ZGl2IGlkPSJ0b29sYmFyYm9yZGVyIj4KLSAgPGRpdiBpZD0idG9vbGJhciIgb25kYmxjbGljaz0icHJvY2Vzc0ZyYW1lc2V0U2l6ZXMoZG9jdW1lbnQuZm9ybXNbMF0pIj4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUFjdGlvbiIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gIGZvcm1BY3Rpb24uYXBwZW5kKCJmYXZvcml0ZXMvYWN0aW9ucy9SZXNpemVGYXZvcml0ZXNGcmFtZXNBY3Rpb25KU1AuanNwIik7Ci0lPiAgCi08L2pzcDp1c2VCZWFuPgotPGpzcDp1c2VCZWFuIGlkPSJmb3JtRnJhbWVOYW1lIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgIGZvcm1GcmFtZU5hbWUuYXBwZW5kKEZhdm9yaXRlc0ZyYW1lTmFtZXMuU1RBVFVTX0NPTlRBSU5FUik7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZmF2b3JpdGVzL2Zvcm1zL1Byb2Nlc3NGYXZvcml0ZXNGcmFtZXNldHNGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8dGFibGUgd2lkdGg9IjEwMCUiIGhlaWdodD0yNSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgYm9yZGVyPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImNlbnRlciIgd2lkdGg9MjUgaGVpZ2h0PTI1PjxpbWcgY2xhc3M9Im5vcm1hbCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9zdGF0dXMuZ2lmIikpJT4iIHdpZHRoPTE2IGhlaWdodD0xNj48L3RkPgotPCUKLSAgIFN0cmluZyBkb3VibGVDbGlja0NvbHVtblRpdGxlID0gbnVsbDsKLSAgIGlmIChmYXZQZXJzcGVjdGl2ZS5nZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKS5lbmRzV2l0aCgiMTAwJSIpKQotICAgewotICAgICBpZiAoZmF2UGVyc3BlY3RpdmUuZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpLmVuZHNXaXRoKCIxMDAlIikpCi0gICAgICAgZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0RPVUJMRV9DTElDS19UT19SRVNUT1JFIik7ICAgICAgIAotICAgfQotICAgaWYgKGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPT0gbnVsbCkKLSAgICAgZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0RPVUJMRV9DTElDS19UT19NQVhJTUlaRSIpOwotJT4gICAgICAgIAotICAgICAgICA8dGQgaWQ9ImRvdWJsZWNsaWNrY29sdW1uIiB0aXRsZT0iPCU9ZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSU+IiB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImxlZnQiIHdpZHRoPSIqIiBoZWlnaHQ9MjUgbm93cmFwIGNsYXNzPSJ0ZXh0Ij48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9TVEFUVVMiKSU+PC90ZD4KLTwlCi0gICBTdHJpbmcgYWx0Q2xlYXIgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9DTEVBUiIpOwotJT4gICAgICAgICAgIAotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiIHdpZHRoPTI1IGhlaWdodD0yNT48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImZhdm9yaXRlcy9mYXZfc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iIHRhcmdldD0iPCU9RmF2b3JpdGVzRnJhbWVOYW1lcy5TVEFUVVNfQ09OVEVOVCU+Ij48aW1nIGNsYXNzPSJub3JtYWwiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfZW5hYmxlZC5naWYiKSklPiIgd2lkdGg9MTYgaGVpZ2h0PTE2IG9uTW91c2VPdmVyPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2NsZWFyX2hpZ2hsaWdodGVkLmdpZiIpKSU+Jzttb3VzZW92ZXIodGhpcykiIG9uTW91c2VPdXQ9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfZW5hYmxlZC5naWYiKSklPic7bW91c2VvdXQodGhpcykiIG9uTW91c2VEb3duPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2NsZWFyX2hpZ2hsaWdodGVkLmdpZiIpKSU+Jzttb3VzZWRvd24odGhpcykiIG9uTW91c2VVcD0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9lbmFibGVkLmdpZiIpKSU+Jzttb3VzZXVwKHRoaXMpIiBhbHQ9IjwlPWFsdENsZWFyJT4iIHRpdGxlPSI8JT1hbHRDbGVhciU+Ij48L2E+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgPC9kaXY+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zvcm1zLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mb3Jtcy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zvcm1zLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZm9ybXMvRmF2b3JpdGVzSW1wb3J0VG9Xb3JrYmVuY2hGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zvcm1zL0Zhdm9yaXRlc0ltcG9ydFRvV29ya2JlbmNoRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4YjQxODQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZm9ybXMvRmF2b3JpdGVzSW1wb3J0VG9Xb3JrYmVuY2hGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybVByb3BlcnRpZXMiIGNsYXNzPSJqYXZhLnV0aWwuSGFzaHRhYmxlIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IGZhdlBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAvLyBUaGUgc2VsZWN0ZWQgbm9kZSBtdXN0IGJlIGEgRmF2b3JpdGVzV1NETFNlcnZpY2VOb2RlLgotICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgIEZhdm9yaXRlc1dTRExTZXJ2aWNlRWxlbWVudCB3c2RsRWxlbWVudCA9IChGYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICBmb3JtUHJvcGVydGllcy5wdXQoImZvcm1BY3Rpb25MaW5rIiwiZmF2b3JpdGVzL2FjdGlvbnMvRmF2b3JpdGVzSW1wb3J0VG9Xb3JrYmVuY2hBY3Rpb25KU1AuanNwIik7Ci0gICBmb3JtUHJvcGVydGllcy5wdXQoIndzZGxVUkwiLHdzZGxFbGVtZW50LmdldFdzZGxVcmwoKSk7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvSW1wb3J0V1NETEFuZFdTSUxUb1dvcmtiZW5jaEZvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZm9ybXMvRmF2b3JpdGVzTGF1bmNoV2ViU2VydmljZVdpemFyZEZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZm9ybXMvRmF2b3JpdGVzTGF1bmNoV2ViU2VydmljZVdpemFyZEZvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTMyM2RmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zvcm1zL0Zhdm9yaXRlc0xhdW5jaFdlYlNlcnZpY2VXaXphcmRGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJmb3JtQWN0aW9uTGluayIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gICBmb3JtQWN0aW9uTGluay5hcHBlbmQoImZhdm9yaXRlcy9hY3Rpb25zL0Zhdm9yaXRlc0xhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb25KU1AuanNwIik7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvTGF1bmNoV2ViU2VydmljZVdpemFyZEZvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZm9ybXMvRmF2b3JpdGVzVURESUJ1c2luZXNzRGV0YWlsc1BhZ2UuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZm9ybXMvRmF2b3JpdGVzVURESUJ1c2luZXNzRGV0YWlsc1BhZ2UuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTRhYWM1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zvcm1zL0Zhdm9yaXRlc1VERElCdXNpbmVzc0RldGFpbHNQYWdlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS5GYXZvcml0ZXNQZXJzcGVjdGl2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLndzaWwuZXh0ZW5zaW9uLnVkZGkuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgICAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICAgICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBmYXZQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgICAgICBUb29sTWFuYWdlciBjdXJyZW50VG9vbE1hbmFnZXIgPSBzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCk7Ci0gICAgICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotJT4KLTxodG1sPgotPGhlYWQ+Ci0gICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICAgIDx0aXRsZT48JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1RJVExFX1VERElfQlVTSU5FU1NfREVUQUlMUyIpJT48L3RpdGxlPgotICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0KLSAgICA8JQotICAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJpbWFnZXMvZGV0YWlsc19oaWdobGlnaHRlZC5naWYiOwotICAgIFN0cmluZyB0aXRsZSA9IGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9GQVZPUklURVNfVURESV9CVVNJTkVTU19ERVRBSUxTIik7Ci0gICAgJT4KLSAgICA8JUAgaW5jbHVkZSBmaWxlID0gIi9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgICA8JQotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBGYXZvcml0ZXNVRERJQnVzaW5lc3NFbGVtZW50KSB7Ci0gICAgICAgIEZhdm9yaXRlc1VERElCdXNpbmVzc0VsZW1lbnQgYnVzRWxlbWVudCA9IChGYXZvcml0ZXNVRERJQnVzaW5lc3NFbGVtZW50KXNlbGVjdGVkRWxlbWVudDsKLSAgICAlPgotCi0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgICAgICAgPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9CVVNJTkVTU19OQU1FIiklPgotICAgICAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPWJ1c0VsZW1lbnQuZ2V0TmFtZSgpJT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8YnI+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgICAgICAgPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9JTlFVSVJZX1VSTCIpJT4KLSAgICAgICAgICAgICAgICA8L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgICAgICAgICAgICA8JT1idXNFbGVtZW50LmdldElucXVpcnlVUkwoKSU+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICAgICAgPGJyPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQlVTSU5FU1NfS0VZIiklPgotICAgICAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPWJ1c0VsZW1lbnQuZ2V0QnVzaW5lc3NLZXkoKSU+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci08anNwOnVzZUJlYW4gaWQ9ImN1cnJlbnRUb29sTWFuYWdlckhhc2giIGNsYXNzPSJqYXZhLnV0aWwuSGFzaHRhYmxlIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICBjdXJyZW50VG9vbE1hbmFnZXJIYXNoLnB1dChBY3Rpb25JbnB1dHMuQ1VSUkVOVF9UT09MX01BTkFHRVIsY3VycmVudFRvb2xNYW5hZ2VyKTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9vdGhlckFjdGlvbnMuanNwIiBmbHVzaD0idHJ1ZSIvPiAgICAgICAgCi0KLSAgICA8JQotICAgIH0KLSAgICAlPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mb3Jtcy9GYXZvcml0ZXNVRERJUmVnaXN0cnlEZXRhaWxzUGFnZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mb3Jtcy9GYXZvcml0ZXNVRERJUmVnaXN0cnlEZXRhaWxzUGFnZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzMjQyNWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZm9ybXMvRmF2b3JpdGVzVURESVJlZ2lzdHJ5RGV0YWlsc1BhZ2UuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTU0ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuRmF2b3JpdGVzUGVyc3BlY3RpdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUud3NpbC5leHRlbnNpb24udWRkaS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmlvLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgICAgICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gZmF2UGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICAgICAgVG9vbE1hbmFnZXIgY3VycmVudFRvb2xNYW5hZ2VyID0gc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpOwotICAgICAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSU+Ci08aHRtbD4KLTxoZWFkPgotICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgICA8dGl0bGU+PCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9VRERJX1JFR0lTVFJZX0RFVEFJTFMiKSU+PC90aXRsZT4KLSAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotCi0gICAgPCUKLSAgICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAiaW1hZ2VzL2RldGFpbHNfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgICBTdHJpbmcgdGl0bGUgPSBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfRkFWT1JJVEVTX1VERElfUkVHSVNUUllfREVUQUlMUyIpOwotICAgICU+Ci0gICAgPCVAIGluY2x1ZGUgZmlsZSA9ICIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgPCUKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgRmF2b3JpdGVzVURESVJlZ2lzdHJ5RWxlbWVudCkgewotICAgICAgICBGYXZvcml0ZXNVRERJUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoRmF2b3JpdGVzVURESVJlZ2lzdHJ5RWxlbWVudClzZWxlY3RlZEVsZW1lbnQ7Ci0gICAgICAgIFN0cmluZyByZWdpc3RyeU5hbWUgPSByZWdFbGVtZW50LmdldE5hbWUoKTsKLSAgICAlPgotCi0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgICAgICAgPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9SRUdJU1RSWV9OQU1FIiklPgotICAgICAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPXJlZ2lzdHJ5TmFtZSU+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICAgICAgPGJyPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfSU5RVUlSWV9VUkwiKSU+Ci0gICAgICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICAgICAgICAgICAgPCU9cmVnRWxlbWVudC5nZXRJbnF1aXJ5VVJMKCklPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotPCUKLSAgICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSByZWdFbGVtZW50LmdldFB1Ymxpc2hVUkwoKTsKLSAgICAgaWYgKFZhbGlkYXRvci52YWxpZGF0ZVVSTChwdWJsaXNoVVJMKSkKLSAgICAgewotJT4KLSAgICAgICAgPGJyPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUFVCTElTSF9VUkwiKSU+Ci0gICAgICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICAgICAgICAgICAgPCU9cHVibGlzaFVSTCU+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci08JQotICAgICB9Ci0gICAKLSAgICAgU3RyaW5nIHJlZ2lzdHJ5VVJMID0gcmVnRWxlbWVudC5nZXRSZWdpc3RyYXRpb25VUkwoKTsKLSAgICAgaWYgKFZhbGlkYXRvci52YWxpZGF0ZVVSTChyZWdpc3RyeVVSTCkpCi0gICAgIHsKLSU+Ci0gICAgICAgICAgICA8YnI+Ci0gICAgICAgICAgICA8dGFibGU+Ci0gICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICA8dGQgYWxpZ249ImxlZnQiPgotICAgICAgICAgICAgICAgICAgICAgICAgPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9SRUdJU1RSWV9VUkwiLHJlZ2lzdHJ5VVJMKSU+Ci0gICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDwvdGFibGU+Ci08JQotICAgICAgfQotICAgICAgCi0gICAgICBTdHJpbmdCdWZmZXIgY2F0ZWdvcnlEaXJlY3RvcnkgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICBGYXZvcml0ZXNVRERJUmVnaXN0cnlGb2xkZXJFbGVtZW50LmZvcm1DYXRlZ29yaWVzRGlyZWN0b3J5KGNhdGVnb3J5RGlyZWN0b3J5LGNvbnRyb2xsZXIuZ2V0U2VydmxldEVuZ2luZVN0YXRlTG9jYXRpb24oKSxyZWdpc3RyeU5hbWUpOwotICAgICAgRmlsZSBjYXRlZ29yeURpcmVjdG9yeUZpbGUgPSBuZXcgRmlsZShjYXRlZ29yeURpcmVjdG9yeS50b1N0cmluZygpKTsKLSAgICAgIFN0cmluZ1tdIGNhdGVnb3J5RmlsZXMgPSBjYXRlZ29yeURpcmVjdG9yeUZpbGUubGlzdCgpOwotICAgICAgaWYgKGNhdGVnb3J5RmlsZXMgIT0gbnVsbCkKLSAgICAgIHsKLSU+Ci08YnI+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gIDx0cj4KLSAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgIDwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVVNFUl9ERUZJTkVEX0NBVEVHT1JZX0RBVEFfRklMRVMiKSU+Ci0gICAgPC90aD4KLSAgPC90cj4KLTwlICAgICAgCi0gICAgICAgIGZvciAoaW50IGk9MDtpPGNhdGVnb3J5RmlsZXMubGVuZ3RoO2krKykKLSAgICAgICAgewotJT4KLSAgPHRyPgotICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICA8JT1jYXRlZ29yeUZpbGVzW2ldJT4KLSAgICA8L3RkPgotICA8L3RyPgotPCUgICAgICAgIAotICAgICAgICB9Ci0lPgotPC90YWJsZT4KLTwlICAgICAgICAKLSAgICAgIH0gICAgICAKLSU+Ci08anNwOnVzZUJlYW4gaWQ9ImN1cnJlbnRUb29sTWFuYWdlckhhc2giIGNsYXNzPSJqYXZhLnV0aWwuSGFzaHRhYmxlIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICBjdXJyZW50VG9vbE1hbmFnZXJIYXNoLnB1dChBY3Rpb25JbnB1dHMuQ1VSUkVOVF9UT09MX01BTkFHRVIsY3VycmVudFRvb2xNYW5hZ2VyKTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9vdGhlckFjdGlvbnMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUgICAgICAKLSAgICB9Ci0lPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mb3Jtcy9GYXZvcml0ZXNVRERJU2VydmljZURldGFpbHNQYWdlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zvcm1zL0Zhdm9yaXRlc1VERElTZXJ2aWNlRGV0YWlsc1BhZ2UuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzU2ZjU4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zvcm1zL0Zhdm9yaXRlc1VERElTZXJ2aWNlRGV0YWlsc1BhZ2UuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLkZhdm9yaXRlc1BlcnNwZWN0aXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUud3NpbC5leHRlbnNpb24udWRkaS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAgICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgICAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IGZhdlBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgICAgIFRvb2xNYW5hZ2VyIGN1cnJlbnRUb29sTWFuYWdlciA9IHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKTsKLSAgICAgICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0lPgotPGh0bWw+Ci08aGVhZD4KLSAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gICAgPHRpdGxlPjwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fVElUTEVfVURESV9TRVJWSUNFX0RFVEFJTFMiKSU+PC90aXRsZT4KLSAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotCi0gICAgPCUKLSAgICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAiaW1hZ2VzL2RldGFpbHNfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgICBTdHJpbmcgdGl0bGUgPSBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfRkFWT1JJVEVTX1VERElfU0VSVklDRV9ERVRBSUxTIik7Ci0gICAgJT4KLSAgICA8JUAgaW5jbHVkZSBmaWxlID0gIi9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgICA8JQotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBGYXZvcml0ZXNVRERJU2VydmljZUVsZW1lbnQpIHsKLSAgICAgICAgRmF2b3JpdGVzVURESVNlcnZpY2VFbGVtZW50IHNlckVsZW1lbnQgPSAoRmF2b3JpdGVzVURESVNlcnZpY2VFbGVtZW50KXNlbGVjdGVkRWxlbWVudDsKLSAgICAlPgotCi0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgICAgICAgPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9TRVJWSUNFX05BTUUiKSU+Ci0gICAgICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICAgICAgICAgICAgPCU9c2VyRWxlbWVudC5nZXROYW1lKCklPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgICAgIDxicj4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICAgICAgICAgICAgICA8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0lOUVVJUllfVVJMIiklPgotICAgICAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPXNlckVsZW1lbnQuZ2V0SW5xdWlyeVVSTCgpJT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8YnI+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgICAgICAgPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9TRVJWSUNFX0tFWSIpJT4KLSAgICAgICAgICAgICAgICA8L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgICAgICAgICAgICA8JT1zZXJFbGVtZW50LmdldFNlcnZpY2VLZXkoKSU+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci08anNwOnVzZUJlYW4gaWQ9ImN1cnJlbnRUb29sTWFuYWdlckhhc2giIGNsYXNzPSJqYXZhLnV0aWwuSGFzaHRhYmxlIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICBjdXJyZW50VG9vbE1hbmFnZXJIYXNoLnB1dChBY3Rpb25JbnB1dHMuQ1VSUkVOVF9UT09MX01BTkFHRVIsY3VycmVudFRvb2xNYW5hZ2VyKTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9vdGhlckFjdGlvbnMuanNwIiBmbHVzaD0idHJ1ZSIvPiAgICAgICAgCi0KLSAgICA8JQotICAgIH0KLSAgICAlPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mb3Jtcy9GYXZvcml0ZXNVRERJU2VydmljZUludERldGFpbHNQYWdlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zvcm1zL0Zhdm9yaXRlc1VERElTZXJ2aWNlSW50RGV0YWlsc1BhZ2UuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzFhMGY0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zvcm1zL0Zhdm9yaXRlc1VERElTZXJ2aWNlSW50RGV0YWlsc1BhZ2UuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLkZhdm9yaXRlc1BlcnNwZWN0aXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUud3NpbC5leHRlbnNpb24udWRkaS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAgICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgICAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IGZhdlBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgICAgIFRvb2xNYW5hZ2VyIGN1cnJlbnRUb29sTWFuYWdlciA9IHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKTsKLSAgICAgICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0lPgotPGh0bWw+Ci08aGVhZD4KLSAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gICAgPHRpdGxlPjwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fVElUTEVfVURESV9TRVJWSUNFX0lOVEVSRkFDRV9ERVRBSUxTIiklPjwvdGl0bGU+Ci0gICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLQotICAgIDwlCi0gICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gImltYWdlcy9kZXRhaWxzX2hpZ2hsaWdodGVkLmdpZiI7Ci0gICAgU3RyaW5nIHRpdGxlID0gZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0ZBVk9SSVRFU19VRERJX1NFUlZJQ0VfSU5URVJGQUNFX0RFVEFJTFMiKTsKLSAgICAlPgotICAgIDwlQCBpbmNsdWRlIGZpbGUgPSAiL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotICAgIDwlCi0gICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudCkgewotICAgICAgICBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUVsZW1lbnQgc2VySW50RWxlbWVudCA9IChGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50OwotICAgICU+Ci0KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICAgICAgICAgICAgICA8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUiKSU+Ci0gICAgICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICAgICAgICAgICAgPCU9c2VySW50RWxlbWVudC5nZXROYW1lKCklPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgICAgIDxicj4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICAgICAgICAgICAgICA8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0lOUVVJUllfVVJMIiklPgotICAgICAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPXNlckludEVsZW1lbnQuZ2V0SW5xdWlyeVVSTCgpJT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8YnI+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgICAgICAgPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9TRVJWSUNFX0lOVEVSRkFDRV9LRVkiKSU+Ci0gICAgICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICAgICAgICAgICAgPCU9c2VySW50RWxlbWVudC5nZXRTZXJ2aWNlSW50ZXJmYWNlS2V5KCklPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotPGpzcDp1c2VCZWFuIGlkPSJjdXJyZW50VG9vbE1hbmFnZXJIYXNoIiBjbGFzcz0iamF2YS51dGlsLkhhc2h0YWJsZSIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgY3VycmVudFRvb2xNYW5hZ2VySGFzaC5wdXQoQWN0aW9uSW5wdXRzLkNVUlJFTlRfVE9PTF9NQU5BR0VSLGN1cnJlbnRUb29sTWFuYWdlcik7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvb3RoZXJBY3Rpb25zLmpzcCIgZmx1c2g9InRydWUiLz4gICAgICAgIAotCi0gICAgPCUKLSAgICB9Ci0gICAgJT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZm9ybXMvRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeURldGFpbHNQYWdlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zvcm1zL0Zhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlEZXRhaWxzUGFnZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyZDAwM2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZm9ybXMvRmF2b3JpdGVzVXNlckRlZlVERElSZWdpc3RyeURldGFpbHNQYWdlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMxMSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDkxMiAgIDE0MTc5NiBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS5GYXZvcml0ZXNQZXJzcGVjdGl2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS53c2lsLmV4dGVuc2lvbi51ZGRpLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEuaW8uKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5EZXNjcmlwdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVGF4b25vbWllcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teSIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgICAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICAgICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBmYXZQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgICAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgICAgICBUb29sTWFuYWdlciBjdXJyZW50VG9vbE1hbmFnZXIgPSBzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCk7Ci0gICAgICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotJT4KLTxodG1sPgotPGhlYWQ+Ci0gICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICAgIDx0aXRsZT48JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1RJVExFX1VTRVJfREVGX1VERElfUkVHSVNUUllfREVUQUlMUyIpJT48L3RpdGxlPgotICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0KLSAgICA8JQotICAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJpbWFnZXMvZGV0YWlsc19oaWdobGlnaHRlZC5naWYiOwotICAgIFN0cmluZyB0aXRsZSA9IGZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9GQVZPUklURVNfVVNFUl9ERUZfVURESV9SRUdJU1RSWV9ERVRBSUxTIik7Ci0gICAgJT4KLSAgICA8JUAgaW5jbHVkZSBmaWxlID0gIi9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgICA8JQotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5RWxlbWVudCkgewotICAgICAgICBGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlFbGVtZW50KXNlbGVjdGVkRWxlbWVudDsKLSAgICAgICAgcmVnRWxlbWVudC5yZWZyZXNoTWV0YSgpOyAgICAgIAotICAgIAotICAgICAgICBTdHJpbmcgdmVyc2lvbiA9IHJlZ0VsZW1lbnQuZ2V0VmVyc2lvbigpOwotICAgICAgICBpZiAodmVyc2lvbiAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICU+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgICAgICAgPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9VRERJX1ZFUlNJT04iKSU+Ci0gICAgICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICAgICAgICAgICAgPCU9dmVyc2lvbiU+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0gICAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgICAgJT4KLQotICAgICAgICA8JQotICAgICAgICBMaXN0IG5hbWVzID0gcmVnRWxlbWVudC5nZXROYW1lcygpOwotICAgICAgICBpZiAobmFtZXMgIT0gbnVsbCAmJiAhbmFtZXMuaXNFbXB0eSgpKQotICAgICAgICB7Ci0gICAgICAgICU+Ci0gICAgICAgIDxicj4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIHdpZHRoPSIxIiBub3dyYXA+Ci0gICAgICAgICAgICAgICAgICAgIDwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTEFOR1VBR0UiKSU+Ci0gICAgICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgICAgICAgPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9SRUdJU1RSWV9OQU1FIiklPgotICAgICAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPCUKLSAgICAgICAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBuYW1lcy5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBOYW1lIG5hbWUgPSAoTmFtZSlpdC5uZXh0KCk7Ci0gICAgICAgICAgICAgIFN0cmluZyBsYW5nID0gbmFtZS5nZXRMYW5nKCk7Ci0gICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPjwlPWxhbmcgIT0gbnVsbCA/IGxhbmcgOiAiLS0iJT48L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+PCU9bmFtZS5nZXRWYWx1ZSgpJT48L3RkPgotICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICA8JQotICAgICAgICAgICAgfQotICAgICAgICAgICAgJT4KLSAgICAgICAgPC90YWJsZT4KLSAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgICAlPgotCi0gICAgICAgIDwlCi0gICAgICAgIExpc3QgZGVzY3MgPSByZWdFbGVtZW50LmdldERlc2NzKCk7Ci0gICAgICAgIGlmIChkZXNjcyAhPSBudWxsICYmICFkZXNjcy5pc0VtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgJT4KLSAgICAgICAgPGJyPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgd2lkdGg9IjEiIG5vd3JhcD4KLSAgICAgICAgICAgICAgICAgICAgPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9MQU5HVUFHRSIpJT4KLSAgICAgICAgICAgICAgICA8L3RoPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICAgICAgICAgICAgICA8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0RFU0MiKSU+Ci0gICAgICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8JQotICAgICAgICAgICAgZm9yIChJdGVyYXRvciBpdCA9IGRlc2NzLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIERlc2NyaXB0aW9uIGRlc2MgPSAoRGVzY3JpcHRpb24paXQubmV4dCgpOwotICAgICAgICAgICAgICBTdHJpbmcgbGFuZyA9IGRlc2MuZ2V0TGFuZygpOwotICAgICAgICAgICAgICAlPgotICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj48JT1sYW5nICE9IG51bGwgPyBsYW5nIDogIi0tIiU+PC90ZD4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPjwlPWRlc2MuZ2V0VmFsdWUoKSU+PC90ZD4KLSAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgPCUKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICU+Ci0gICAgICAgIDwvdGFibGU+Ci0gICAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgICAgJT4KLQotICAgICAgICA8JQotICAgICAgICBTdHJpbmcgZGVmYXVsdExvZ2luID0gcmVnRWxlbWVudC5nZXREZWZhdWx0TG9naW4oKTsKLSAgICAgICAgaWYgKGRlZmF1bHRMb2dpbiAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICU+Ci0gICAgICAgIDxicj4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICAgICAgICAgICAgICA8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0RFRkFVTFRfTE9HSU4iKSU+Ci0gICAgICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICAgICAgICAgICAgPCU9ZGVmYXVsdExvZ2luJT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLSAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgICAlPgotCi0gICAgICAgIDwlCi0gICAgICAgIFN0cmluZyBkZWZhdWx0UGFzc3dvcmQgPSByZWdFbGVtZW50LmdldERlZmF1bHRQYXNzd29yZCgpOwotICAgICAgICBpZiAoZGVmYXVsdFBhc3N3b3JkICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgJT4KLSAgICAgICAgPGJyPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfREVGQVVMVF9QQVNTV09SRCIpJT4KLSAgICAgICAgICAgICAgICA8L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgICAgICAgICAgICA8JT1kZWZhdWx0UGFzc3dvcmQlPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotICAgICAgICA8JQotICAgICAgICB9Ci0gICAgICAgICU+Ci0KLSAgICAgICAgPCUKLSAgICAgICAgU3RyaW5nIGlucXVpcnlVUkwgPSByZWdFbGVtZW50LmdldElucXVpcnlVUkwoKTsKLSAgICAgICAgaWYgKGlucXVpcnlVUkwgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAlPgotICAgICAgICA8YnI+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgICAgICAgPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9JTlFVSVJZX1VSTCIpJT4KLSAgICAgICAgICAgICAgICA8L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgICAgICAgICAgICA8JT1pbnF1aXJ5VVJMJT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLSAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgICAlPgotCi0gICAgIDwlCi0gICAgIFN0cmluZyBwdWJsaXNoVVJMID0gcmVnRWxlbWVudC5nZXRQdWJsaXNoVVJMKCk7Ci0gICAgIGlmIChWYWxpZGF0b3IudmFsaWRhdGVVUkwocHVibGlzaFVSTCkpCi0gICAgIHsKLSAgICAgJT4KLSAgICAgICAgPGJyPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUFVCTElTSF9VUkwiKSU+Ci0gICAgICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICAgICAgICAgICAgPCU9cHVibGlzaFVSTCU+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0gICAgIDwlCi0gICAgIH0KLQotICAgICBTdHJpbmcgc2VjdXJlSW5xdWlyeVVSTCA9IHJlZ0VsZW1lbnQuZ2V0U2VjdXJlSW5xdWlyeVVSTCgpOwotICAgICBpZiAoVmFsaWRhdG9yLnZhbGlkYXRlVVJMKHNlY3VyZUlucXVpcnlVUkwpKQotICAgICB7Ci0gICAgICU+Ci0gICAgICAgIDxicj4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICAgICAgICAgICAgICA8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1NFQ1VSRV9JTlFVSVJZX1VSTCIpJT4KLSAgICAgICAgICAgICAgICA8L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgICAgICAgICAgICA8JT1zZWN1cmVJbnF1aXJ5VVJMJT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLSAgICAgPCUKLSAgICAgfQotCi0gICAgIFN0cmluZyBzZWN1cmVQdWJsaXNoVVJMID0gcmVnRWxlbWVudC5nZXRTZWN1cmVQdWJsaXNoVVJMKCk7Ci0gICAgIGlmIChWYWxpZGF0b3IudmFsaWRhdGVVUkwoc2VjdXJlUHVibGlzaFVSTCkpCi0gICAgIHsKLSAgICAgJT4KLSAgICAgICAgPGJyPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfU0VDVVJFX1BVQkxJU0hfVVJMIiklPgotICAgICAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPXNlY3VyZVB1Ymxpc2hVUkwlPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotICAgICA8JQotICAgICB9Ci0gICAgICU+Ci0gICAgIAotICAgICA8JQotICAgICBUYXhvbm9teVtdIHRheG9ub21pZXMgPSByZWdFbGVtZW50LmdldFRheG9ub21pZXMoKTsKLSAgICAgaWYgKHRheG9ub21pZXMgIT0gbnVsbCAmJiB0YXhvbm9taWVzLmxlbmd0aCA+IDApCi0gICAgIHsKLSAgICAgJT4KLSAgICAgICA8YnI+Ci0gICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgPHRyPgotICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICA8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1RBWE9OT01ZIiklPgotICAgICAgICAgICA8L3RoPgotICAgICAgICAgPC90cj4KLSAgICAgICAgIDwlCi0gICAgICAgICBmb3IgKGludCBpPTA7IGk8dGF4b25vbWllcy5sZW5ndGg7IGkrKykKLSAgICAgICAgIHsKLSAgICAgICAgICAgVGF4b25vbXkgdGF4b25vbXkgPSB0YXhvbm9taWVzW2ldOwotICAgICAgICAgJT4KLSAgICAgICAgIDx0cj4KLSAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj48JT10YXhvbm9teS5nZXROYW1lKCklPjwvdGQ+Ci0gICAgICAgICA8L3RyPgotICAgICAgICAgPCUKLSAgICAgICAgIH0KLSAgICAgICAgICU+Ci0gICAgICAgPC90YWJsZT4KLSAgICAgICA8JQotICAgICB9Ci0gICAgICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY3VycmVudFRvb2xNYW5hZ2VySGFzaCIgY2xhc3M9ImphdmEudXRpbC5IYXNodGFibGUiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gIGN1cnJlbnRUb29sTWFuYWdlckhhc2gucHV0KEFjdGlvbklucHV0cy5DVVJSRU5UX1RPT0xfTUFOQUdFUixjdXJyZW50VG9vbE1hbmFnZXIpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL290aGVyQWN0aW9ucy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JSAgICAgIAotICAgIH0KLSU+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zvcm1zL0Zhdm9yaXRlc1dTRExEZXRhaWxzUGFnZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9mb3Jtcy9GYXZvcml0ZXNXU0RMRGV0YWlsc1BhZ2UuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OTA2ZjQ3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zvcm1zL0Zhdm9yaXRlc1dTRExEZXRhaWxzUGFnZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS5GYXZvcml0ZXNQZXJzcGVjdGl2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgICAgICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gZmF2UGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICAgICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICAgICAgVG9vbE1hbmFnZXIgY3VycmVudFRvb2xNYW5hZ2VyID0gc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpOwotICAgICAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSU+Ci08aHRtbD4KLTxoZWFkPgotICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgICA8dGl0bGU+PCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9XU0RMX0RFVEFJTFMiKSU+PC90aXRsZT4KLSAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotCi0gICAgPCUKLSAgICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAiaW1hZ2VzL2RldGFpbHNfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgICBTdHJpbmcgdGl0bGUgPSBmYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfRkFWT1JJVEVTX1dTRExfREVUQUlMUyIpOwotICAgICU+Ci0gICAgPCVAIGluY2x1ZGUgZmlsZSA9ICIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgPCUKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgRmF2b3JpdGVzV1NETFNlcnZpY2VFbGVtZW50KSB7Ci0gICAgICAgIEZhdm9yaXRlc1dTRExTZXJ2aWNlRWxlbWVudCB3c2RsRWxlbWVudCA9IChGYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50OwotICAgICU+Ci0KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICAgICAgICAgICAgICA8JT1mYXZQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1VSTCIpJT4KLSAgICAgICAgICAgICAgICA8L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgICAgICAgICAgICA8JT13c2RsRWxlbWVudC5nZXRXc2RsVXJsKCklPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotPGpzcDp1c2VCZWFuIGlkPSJjdXJyZW50VG9vbE1hbmFnZXJIYXNoIiBjbGFzcz0iamF2YS51dGlsLkhhc2h0YWJsZSIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgY3VycmVudFRvb2xNYW5hZ2VySGFzaC5wdXQoQWN0aW9uSW5wdXRzLkNVUlJFTlRfVE9PTF9NQU5BR0VSLGN1cnJlbnRUb29sTWFuYWdlcik7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvb3RoZXJBY3Rpb25zLmpzcCIgZmx1c2g9InRydWUiLz4gICAgICAgIAotCi0gICAgPCUKLSAgICB9Ci0gICAgJT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZm9ybXMvRmF2b3JpdGVzV1NJTERldGFpbHNQYWdlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zvcm1zL0Zhdm9yaXRlc1dTSUxEZXRhaWxzUGFnZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjMGRjZjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZm9ybXMvRmF2b3JpdGVzV1NJTERldGFpbHNQYWdlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLkZhdm9yaXRlc1BlcnNwZWN0aXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUud3NpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAgICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdlBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgICAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IGZhdlBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgICAgIFRvb2xNYW5hZ2VyIGN1cnJlbnRUb29sTWFuYWdlciA9IHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKTsKLSAgICAgICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0lPgotPGh0bWw+Ci08aGVhZD4KLSAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gICAgPHRpdGxlPjwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fVElUTEVfV1NJTF9ERVRBSUxTIiklPjwvdGl0bGU+Ci0gICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLQotICAgIDwlCi0gICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gImltYWdlcy9kZXRhaWxzX2hpZ2hsaWdodGVkLmdpZiI7Ci0gICAgU3RyaW5nIHRpdGxlID0gZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0ZBVk9SSVRFU19XU0lMX0RFVEFJTFMiKTsKLSAgICAlPgotICAgIDwlQCBpbmNsdWRlIGZpbGUgPSAiL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotICAgIDwlCi0gICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEZhdm9yaXRlc1dTSUxFbGVtZW50KSB7Ci0gICAgICAgIEZhdm9yaXRlc1dTSUxFbGVtZW50IHdzaWxFbGVtZW50ID0gKEZhdm9yaXRlc1dTSUxFbGVtZW50KXNlbGVjdGVkRWxlbWVudDsKLSAgICAgICAgJT4KLQotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPWZhdlBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVVJMIiklPgotICAgICAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPXdzaWxFbGVtZW50LmdldFdzaWxVcmwoKSU+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci08anNwOnVzZUJlYW4gaWQ9ImN1cnJlbnRUb29sTWFuYWdlckhhc2giIGNsYXNzPSJqYXZhLnV0aWwuSGFzaHRhYmxlIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICBjdXJyZW50VG9vbE1hbmFnZXJIYXNoLnB1dChBY3Rpb25JbnB1dHMuQ1VSUkVOVF9UT09MX01BTkFHRVIsY3VycmVudFRvb2xNYW5hZ2VyKTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9vdGhlckFjdGlvbnMuanNwIiBmbHVzaD0idHJ1ZSIvPiAgICAgICAgCi0KLSAgICAgICAgPCUKLSAgICB9Ci0gICAgJT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZm9ybXMvUHJvY2Vzc0Zhdm9yaXRlc0ZyYW1lc2V0c0Zvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvZm9ybXMvUHJvY2Vzc0Zhdm9yaXRlc0ZyYW1lc2V0c0Zvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjlhNzFjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2Zvcm1zL1Byb2Nlc3NGYXZvcml0ZXNGcmFtZXNldHNGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPGpzcDp1c2VCZWFuIGlkPSJmb3JtQWN0aW9uIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUZyYW1lTmFtZSIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChmb3JtQWN0aW9uLnRvU3RyaW5nKCkpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBzdHlsZT0ibWFyZ2luLXRvcDowO21hcmdpbi1ib3R0b206MCI+Ci0gIDxpbnB1dCBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuRlJBTUVfTkFNRSU+IiB0eXBlPSJoaWRkZW4iIHZhbHVlPSI8JT1mb3JtRnJhbWVOYW1lJT4iPgotICA8aW5wdXQgbmFtZT0iPCU9RmF2b3JpdGVzQWN0aW9uSW5wdXRzLkZSQU1FU0VUX0NPTFNfUEVSU1BFQ1RJVkVfQ09OVEVOVCU+IiB0eXBlPSJoaWRkZW4iIHZhbHVlPSI8JT1mYXZQZXJzcGVjdGl2ZS5nZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKSU+Ij4KLSAgPGlucHV0IG5hbWU9IjwlPUZhdm9yaXRlc0FjdGlvbklucHV0cy5GUkFNRVNFVF9ST1dTX0FDVElPTlNfQ09OVEFJTkVSJT4iIHR5cGU9ImhpZGRlbiIgdmFsdWU9IjwlPWZhdlBlcnNwZWN0aXZlLmdldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoKSU+Ij4KLTwvZm9ybT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2FkZF90b191ZGRpX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2FkZF90b191ZGRpX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjVkMTlhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9hZGRfdG9fdWRkaV9wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9hZGRfdG9fdWRkaV9wZXJzcGVjdGl2ZV9oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvYWRkX3RvX3VkZGlfcGVyc3BlY3RpdmVfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWEzZGRjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9hZGRfdG9fdWRkaV9wZXJzcGVjdGl2ZV9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvYWRkX3RvX3dzaWxfcGVyc3BlY3RpdmVfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvYWRkX3RvX3dzaWxfcGVyc3BlY3RpdmVfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3NDE4NDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2FkZF90b193c2lsX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2FkZF90b193c2lsX3BlcnNwZWN0aXZlX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9hZGRfdG9fd3NpbF9wZXJzcGVjdGl2ZV9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2MmI4Y2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2FkZF90b193c2lsX3BlcnNwZWN0aXZlX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9saXN0X1dTSUxfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvbGlzdF9XU0lMX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmEwOTg0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9saXN0X1dTSUxfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvbGlzdF9XU0lMX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9saXN0X1dTSUxfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOGE0Y2ViLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9saXN0X1dTSUxfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2xpc3RfYnVzaW5lc3NfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvbGlzdF9idXNpbmVzc19lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQxZTM3YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvbGlzdF9idXNpbmVzc19lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9saXN0X2J1c2luZXNzX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9saXN0X2J1c2luZXNzX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDUxYjk3NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvbGlzdF9idXNpbmVzc19oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvbGlzdF9yZWdpc3RyeV9lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9saXN0X3JlZ2lzdHJ5X2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjJhYTE1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9saXN0X3JlZ2lzdHJ5X2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2xpc3RfcmVnaXN0cnlfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2xpc3RfcmVnaXN0cnlfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTFlY2I1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9saXN0X3JlZ2lzdHJ5X2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9saXN0X3NlcnZpY2VfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvbGlzdF9zZXJ2aWNlX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzUxZGFmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9saXN0X3NlcnZpY2VfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvbGlzdF9zZXJ2aWNlX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9saXN0X3NlcnZpY2VfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2UxMzM1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9saXN0X3NlcnZpY2VfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2xpc3Rfc2VydmljZV9pbnRlcmZhY2VfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvbGlzdF9zZXJ2aWNlX2ludGVyZmFjZV9lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQ2OTg2YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvbGlzdF9zZXJ2aWNlX2ludGVyZmFjZV9lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9saXN0X3NlcnZpY2VfaW50ZXJmYWNlX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy9saXN0X3NlcnZpY2VfaW50ZXJmYWNlX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE1MzEyMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvbGlzdF9zZXJ2aWNlX2ludGVyZmFjZV9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvbGlzdF93c2RsX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2xpc3Rfd3NkbF9lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRjMDI4NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvbGlzdF93c2RsX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL2xpc3Rfd3NkbF9oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvbGlzdF93c2RsX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI4YzhlYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvbGlzdF93c2RsX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy91ZGRpX2J1c2luZXNzX25vZGUuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL3VkZGlfYnVzaW5lc3Nfbm9kZS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzZDZhNzcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL3VkZGlfYnVzaW5lc3Nfbm9kZS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvdWRkaV9yZWdpc3RyeV9jYXRfbm9kZS5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvdWRkaV9yZWdpc3RyeV9jYXRfbm9kZS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlZWMyODEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL3VkZGlfcmVnaXN0cnlfY2F0X25vZGUuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL3VkZGlfcmVnaXN0cnlfbm9kZS5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvdWRkaV9yZWdpc3RyeV9ub2RlLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWI0M2NhZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvdWRkaV9yZWdpc3RyeV9ub2RlLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy91ZGRpX3NlcnZpY2VfaW50ZXJmYWNlX25vZGUuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL3VkZGlfc2VydmljZV9pbnRlcmZhY2Vfbm9kZS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxMzI1Y2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL3VkZGlfc2VydmljZV9pbnRlcmZhY2Vfbm9kZS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvdWRkaV9zZXJ2aWNlX25vZGUuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL3VkZGlfc2VydmljZV9ub2RlLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGMwMjUyYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9pbWFnZXMvdWRkaV9zZXJ2aWNlX25vZGUuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL3dzZGxfc2VydmljZV9ub2RlLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy93c2RsX3NlcnZpY2Vfbm9kZS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmYjg0NGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL3dzZGxfc2VydmljZV9ub2RlLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL2ltYWdlcy93c2lsX25vZGUuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL3dzaWxfbm9kZS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjNTkxNmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvaW1hZ2VzL3dzaWxfbm9kZS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9zY3JpcHRzLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9zY3JpcHRzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvc2NyaXB0cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3NjcmlwdHMvZmF2b3JpdGVzRm9ybVN1Ym1pdC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc0Zvcm1TdWJtaXQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTVmZTk3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3NjcmlwdHMvZmF2b3JpdGVzRm9ybVN1Ym1pdC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL2Zvcm1zdWJtaXQuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNUYWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICBmdW5jdGlvbiBpc1NvbWV0aGluZ1NlbGVjdGVkKHRhYmxlQ29udGFpbmVySWQpIHsKLSAgICAgICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgICAgIGZvciAodmFyIGk9bnVtYmVyT2ZIZWFkZXJSb3dzOyBpPHRhYmxlLnJvd3MubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIHZhciByb3dDaGVja2JveENlbGwgPSB0YWJsZS5yb3dzW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpLml0ZW0oMCk7Ci0gICAgICAgICAgICB2YXIgcm93Q2hlY2tib3ggPSByb3dDaGVja2JveENlbGwuY2hpbGROb2Rlc1swXTsKLSAgICAgICAgICAgIGlmIChyb3dDaGVja2JveC5jaGVja2VkKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGFsZXJ0KCI8JT1jb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCkuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PVEhJTkdfU0VMRUNURUQiKSU+Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBzZXRGb3JtTG9jYXRpb25BbmRTdWJtaXQodGFibGVDb250YWluZXJJZCwgZm9ybSwgbG9jYXRpb24pIHsKLSAgICAgICAgaWYgKGlzU29tZXRoaW5nU2VsZWN0ZWQodGFibGVDb250YWluZXJJZCkpCi0gICAgICAgICAgICBzZXRMb2NhdGlvbkFuZFN1Ym1pdChmb3JtLCBsb2NhdGlvbik7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gc2V0TG9jYXRpb25BbmRTdWJtaXQoZm9ybSwgbG9jYXRpb24pIHsKLSAgICAgICAgaWYgKGhhbmRsZVN1Ym1pdChmb3JtKSkKLSAgICAgICAgewotICAgICAgICAgIGZvcm0uYWN0aW9uID0gbG9jYXRpb247Ci0gICAgICAgICAgZm9ybS5zdWJtaXQoKTsKLSAgICAgICAgfQotICAgIH0KLTwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNQYW5lcy5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc1BhbmVzLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2NhNTg4ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc1BhbmVzLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9wYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgdmFyIGZhdk5hdmlnYXRvckNvbnRhaW5lciA9IHBlcnNwZWN0aXZlQ29udGVudC5mcmFtZXNbIjwlPUZhdm9yaXRlc0ZyYW1lTmFtZXMuTkFWSUdBVE9SX0NPTlRBSU5FUiU+Il07Ci0gIHZhciBmYXZOYXZpZ2F0b3JUb29sYmFyID0gZmF2TmF2aWdhdG9yQ29udGFpbmVyLmZyYW1lc1siPCU9RmF2b3JpdGVzRnJhbWVOYW1lcy5OQVZJR0FUT1JfVE9PTEJBUiU+Il07Ci0gIHZhciBmYXZOYXZpZ2F0b3JDb250ZW50ID0gZmF2TmF2aWdhdG9yQ29udGFpbmVyLmZyYW1lc1siPCU9RmF2b3JpdGVzRnJhbWVOYW1lcy5OQVZJR0FUT1JfQ09OVEVOVCU+Il07Ci0gIHZhciBmYXZBY3Rpb25zQ29udGFpbmVyID0gcGVyc3BlY3RpdmVDb250ZW50LmZyYW1lc1siPCU9RmF2b3JpdGVzRnJhbWVOYW1lcy5BQ1RJT05TX0NPTlRBSU5FUiU+Il07Ci0gIHZhciBmYXZQcm9wZXJ0aWVzQ29udGFpbmVyID0gZmF2QWN0aW9uc0NvbnRhaW5lci5mcmFtZXNbIjwlPUZhdm9yaXRlc0ZyYW1lTmFtZXMuUFJPUEVSVElFU19DT05UQUlORVIlPiJdOwotICB2YXIgZmF2UHJvcGVydGllc1Rvb2xiYXIgPSBmYXZQcm9wZXJ0aWVzQ29udGFpbmVyLmZyYW1lc1siPCU9RmF2b3JpdGVzRnJhbWVOYW1lcy5QUk9QRVJUSUVTX1RPT0xCQVIlPiJdOwotICB2YXIgZmF2UHJvcGVydGllc0NvbnRlbnQgPSBmYXZQcm9wZXJ0aWVzQ29udGFpbmVyLmZyYW1lc1siPCU9RmF2b3JpdGVzRnJhbWVOYW1lcy5QUk9QRVJUSUVTX0NPTlRFTlQlPiJdOwotICB2YXIgZmF2U3RhdHVzQ29udGFpbmVyID0gZmF2QWN0aW9uc0NvbnRhaW5lci5mcmFtZXNbIjwlPUZhdm9yaXRlc0ZyYW1lTmFtZXMuU1RBVFVTX0NPTlRBSU5FUiU+Il07Ci0gIHZhciBmYXZTdGF0dXNUb29sYmFyID0gZmF2U3RhdHVzQ29udGFpbmVyLmZyYW1lc1siPCU9RmF2b3JpdGVzRnJhbWVOYW1lcy5TVEFUVVNfVE9PTEJBUiU+Il07Ci0gIHZhciBmYXZTdGF0dXNDb250ZW50ID0gZmF2U3RhdHVzQ29udGFpbmVyLmZyYW1lc1siPCU9RmF2b3JpdGVzRnJhbWVOYW1lcy5TVEFUVVNfQ09OVEVOVCU+Il07Ci08L3NjcmlwdD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3NjcmlwdHMvZmF2b3JpdGVzVGFibGUuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNUYWJsZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3NmFkMmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNUYWJsZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy90YWJsZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0KLSAgICBmdW5jdGlvbiBmYXZIYW5kbGVDaGVja0FsbENsaWNrKHRhYmxlQ29udGFpbmVySWQsIGNoZWNrQWxsQ2hlY2tib3gpIHsKLSAgICAgICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgICAgIGZvciAodmFyIGk9bnVtYmVyT2ZIZWFkZXJSb3dzOyBpPHRhYmxlLnJvd3MubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIHZhciByb3dDaGVja2JveENlbGwgPSB0YWJsZS5yb3dzW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpLml0ZW0oMCk7Ci0gICAgICAgICAgICB2YXIgcm93Q2hlY2tib3ggPSByb3dDaGVja2JveENlbGwuY2hpbGROb2Rlc1swXTsKLSAgICAgICAgICAgIHJvd0NoZWNrYm94LmNoZWNrZWQgPSBjaGVja0FsbENoZWNrYm94LmNoZWNrZWQ7Ci0gICAgICAgICAgICBpZiAocm93Q2hlY2tib3guY2hlY2tlZCkgewotICAgICAgICAgICAgICAgIGhpZ2hsaWdodFJvdyh0YWJsZS5yb3dzW2ldLCJyb3djb2xvciIpOwotICAgICAgICAgICAgICAgIHJvd0NoZWNrYm94Lm5hbWUgPSAiPCU9RmF2b3JpdGVzQWN0aW9uSW5wdXRzLk1BU1NfQUNUSU9OX05PREVfSUQlPiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBoaWdobGlnaHRSb3codGFibGUucm93c1tpXSwidGFibGVjZWxscyIpOwotICAgICAgICAgICAgICAgIHJvd0NoZWNrYm94Lm5hbWUgPSAiIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGZ1bmN0aW9uIHZhbGlkYXRlQ2hlY2tCb3hJbnB1dChjaGVja2JveCwgaXNDaGVja2VkKSB7Ci0gICAgICAgIGlmIChpc0NoZWNrZWQpIHsKLSAgICAgICAgICAgIGNoZWNrYm94Lm5hbWUgPSAiPCU9RmF2b3JpdGVzQWN0aW9uSW5wdXRzLk1BU1NfQUNUSU9OX05PREVfSUQlPiI7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBjaGVja2JveC5uYW1lID0gIiI7Ci0gICAgICAgIH0KLSAgICAgICAgaGFuZGxlUm93Q2hlY2tib3hDbGljaygpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHR3aXN0SW5pdCh0YWJsZUNvbnRhaW5lcklkLHR3aXN0SW1hZ2VOYW1lKSB7Ci0gICAgICAgIHZhciB0YWJsZUNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhYmxlQ29udGFpbmVySWQpOwotICAgICAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICAgICAgaWYgKHRhYmxlLnJvd3MubGVuZ3RoID4gbnVtYmVyT2ZIZWFkZXJSb3dzKSB7Ci0gICAgICAgICAgICB0YWJsZUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotICAgICAgICAgICAgdHdpc3QodGFibGVDb250YWluZXJJZCwgdHdpc3RJbWFnZU5hbWUpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgdGFibGVDb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICIiOwotICAgICAgICAgICAgdHdpc3QodGFibGVDb250YWluZXJJZCwgdHdpc3RJbWFnZU5hbWUpOwotICAgICAgICB9Ci0gICAgfQotCi08L3NjcmlwdD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3NjcmlwdHMvZmF2b3JpdGVzZnJhbWVzZXRzLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3NjcmlwdHMvZmF2b3JpdGVzZnJhbWVzZXRzLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGZiZTA5MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc2ZyYW1lc2V0cy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGZ1bmN0aW9uIGdldEFjdGlvbnNDb250YWluZXJGcmFtZXNldCgpCi0gIHsKLSAgICByZXR1cm4gcGVyc3BlY3RpdmVDb250ZW50LmZyYW1lc1siPCU9RmF2b3JpdGVzRnJhbWVOYW1lcy5BQ1RJT05TX0NPTlRBSU5FUiU+Il0uZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImZyYW1lc2V0IikuaXRlbSgwKTsKLSAgfQotCi0gIGZ1bmN0aW9uIHByb2Nlc3NGcmFtZXNldFNpemVzKGZyYW1lc2V0U2l6ZXNGb3JtKQotICB7Ci0gICAgdG9nZ2xlRG91YmxlQ2xpY2tDb2x1bW5UaXRsZSgpOwotICAgIHZhciBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldCA9IGdldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0KCk7Ci0gICAgdmFyIGFjdGlvbnNDb250YWluZXJGcmFtZXNldCA9IGdldEFjdGlvbnNDb250YWluZXJGcmFtZXNldCgpOwotICAgIGZyYW1lc2V0U2l6ZXNGb3JtLjwlPUZhdm9yaXRlc0FjdGlvbklucHV0cy5GUkFNRVNFVF9DT0xTX1BFUlNQRUNUSVZFX0NPTlRFTlQlPi52YWx1ZSA9IHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0LmNvbHM7Ci0gICAgZnJhbWVzZXRTaXplc0Zvcm0uPCU9RmF2b3JpdGVzQWN0aW9uSW5wdXRzLkZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIlPi52YWx1ZSA9IGFjdGlvbnNDb250YWluZXJGcmFtZXNldC5yb3dzOwotICAgIGZyYW1lc2V0U2l6ZXNGb3JtLnN1Ym1pdCgpOwotICB9Ci08L3NjcmlwdD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3ZpZXdzLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy92aWV3cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3ZpZXdzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvdmlld3MvTGlzdEZhdm9yaXRlVURESUJ1c2luZXNzVmlldy5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy92aWV3cy9MaXN0RmF2b3JpdGVVRERJQnVzaW5lc3NWaWV3LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjJkMTcwYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy92aWV3cy9MaXN0RmF2b3JpdGVVRERJQnVzaW5lc3NWaWV3LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEyNiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0iamF2YS51dGlsLkVudW1lcmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLlZlY3RvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlF1aWNrU29ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuRmF2b3JpdGVzUGVyc3BlY3RpdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgICBTdHJpbmcgZGl2RmF2b3JpdGVVRERJQnVzaW5lc3NUYWJsZSA9ICJkaXZGYXZvcml0ZVVERElCdXNpbmVzc1RhYmxlIjsKLSAgICBTdHJpbmcgeGRpdkZhdm9yaXRlVURESUJ1c2luZXNzVGFibGUgPSAieGRpdkZhdm9yaXRlVURESUJ1c2luZXNzVGFibGUiOwotCi0gICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2b3JpdGVzUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBmYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0lPgotPGh0bWw+Ci08aGVhZD4KLSAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gICAgPHRpdGxlPjwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIlZJRVdfVElUTEVfVURESV9CVVNJTkVTU19MSVNUIiklPjwvdGl0bGU+Ci0gICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci0gICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii9mYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNGb3JtU3VibWl0LmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8anNwOmluY2x1ZGUgcGFnZT0iL2Zhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc1RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotPCUKLSAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJ3c2lsL2ltYWdlcy9saXN0X2J1c2luZXNzX2hpZ2hsaWdodGVkLmdpZiI7Ci0gICBTdHJpbmcgdGl0bGUgPSBmYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTElTVF9GQVZPUklURV9VRERJX0JVU0lORVNTIik7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotICA8dGFibGU+Ci0gICAgPHRyPgotICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICA8JT1mYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0xJU1RfRkFWT1JJVEVfVURESV9CVVNJTkVTU19ERVNDIiklPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotICAgIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFJlbW92ZUZhdm9yaXRlc0FjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgc3R5bGU9Im1hcmdpbi10b3A6MTBweDsiPgotICAgIDwlCi0gICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEZhdm9yaXRlc1VERElCdXNpbmVzc0ZvbGRlckVsZW1lbnQpIHsKLSAgICAlPgotICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9RmF2b3JpdGVzQWN0aW9uSW5wdXRzLk1VTFRJUExFX0xJTktfQUNUSU9OJT4iIHZhbHVlPSIxIj4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT1kaXZGYXZvcml0ZVVERElCdXNpbmVzc1RhYmxlJT4nLCc8JT14ZGl2RmF2b3JpdGVVRERJQnVzaW5lc3NUYWJsZSU+JykiPjxpbWcgbmFtZT0iPCU9eGRpdkZhdm9yaXRlVURESUJ1c2luZXNzVGFibGUlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdGNsb3NlZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9DTE9TRUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+PCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9GQVZPUklURV9VRERJX0JVU0lORVNTIiklPjwvc3Ryb25nPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIHZhbGlnbj0idG9wIiBoZWlnaHQ9MTA+PGltZyBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2tleWxpbmUuZ2lmIikpJT4iIGhlaWdodD0yIHdpZHRoPSIxMDAlIj48L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8ZGl2IGlkPSI8JT1kaXZGYXZvcml0ZVVERElCdXNpbmVzc1RhYmxlJT4iPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9ImZhdkhhbmRsZUNoZWNrQWxsQ2xpY2soJzwlPWRpdkZhdm9yaXRlVURESUJ1c2luZXNzVGFibGUlPicsdGhpcykiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQUxMX0NIRUNLX0JPWCIpJT4iPjwvdGg+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9OQU1FIiklPjwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgICBFbnVtZXJhdGlvbiBlID0gKChGYXZvcml0ZXNVRERJQnVzaW5lc3NGb2xkZXJFbGVtZW50KXNlbGVjdGVkRWxlbWVudCkuZ2V0QWxsRmF2b3JpdGVzKCk7Ci0gICAgICAgICAgICAgICAgVmVjdG9yIHNvcnRlZFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgICAgICAgICAgIAlzb3J0ZWRWZWN0b3IuYWRkKGUubmV4dEVsZW1lbnQoKSk7Ci0gICAgICAgICAgICAgCSAgfQotICAgICAgICAgICAgICAgIFF1aWNrU29ydC5zb3J0KHNvcnRlZFZlY3Rvcik7Ci0gICAgICAgICAgICAgICAgZSA9IHNvcnRlZFZlY3Rvci5lbGVtZW50cygpOwotICAgICAgICAgICAgICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEZhdm9yaXRlc1VERElCdXNpbmVzc0VsZW1lbnQgZmF2VURESUJ1c2luZXNzRWxlbWVudCA9IChGYXZvcml0ZXNVRERJQnVzaW5lc3NFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgJT4KLSAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giICBuYW1lPSI8JT1GYXZvcml0ZXNBY3Rpb25JbnB1dHMuTUFTU19BQ1RJT05fTk9ERV9JRCU+IiB2YWx1ZT0iPCU9c2VsZWN0ZWROb2RlLmdldENoaWxkTm9kZShmYXZVRERJQnVzaW5lc3NFbGVtZW50KS5nZXROb2RlSWQoKSU+IiBvbkNsaWNrPSJ2YWxpZGF0ZUNoZWNrQm94SW5wdXQodGhpcywgdGhpcy5jaGVja2VkKSIgIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfUk9XX0NIRUNLX0JPWCIpJT4iPjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiIG5vd3JhcD48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoU2VsZWN0RmF2b3JpdGVzTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXRDaGlsZE5vZGUoZmF2VURESUJ1c2luZXNzRWxlbWVudCkuZ2V0Tm9kZUlkKCksIGZhbHNlKSkpJT4iIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+Ij48JT1mYXZVRERJQnVzaW5lc3NFbGVtZW50LmdldE5hbWUoKSU+PC9hPjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgIDwlCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgJT4KLSAgICAgICAgPC90YWJsZT4KLSAgICAgICAgPC9kaXY+Ci0gICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgICAgICAgdHdpc3RJbml0KCc8JT1kaXZGYXZvcml0ZVVERElCdXNpbmVzc1RhYmxlJT4nLCc8JT14ZGl2RmF2b3JpdGVVRERJQnVzaW5lc3NUYWJsZSU+Jyk7Ci0gICAgICAgIDwvc2NyaXB0PgotCi0gICAgICAgIDx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz0yIGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgbm93cmFwPgotICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9JTVBPUlRfVE9fVURESV9QRVJTUEVDVElWRSIpJT4iIG9uQ2xpY2s9InNldEZvcm1Mb2NhdGlvbkFuZFN1Ym1pdCgnPCU9ZGl2RmF2b3JpdGVVRERJQnVzaW5lc3NUYWJsZSU+JywgdGhpcy5mb3JtLCAnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KEFkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uLmdldEJhc2VBY3Rpb25MaW5rKCkpKSU+JykiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgbm93cmFwPgotICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9SRU1PVkUiKSU+IiBvbkNsaWNrPSJzZXRGb3JtTG9jYXRpb25BbmRTdWJtaXQoJzwlPWRpdkZhdm9yaXRlVURESUJ1c2luZXNzVGFibGUlPicsIHRoaXMuZm9ybSwgJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChSZW1vdmVGYXZvcml0ZXNBY3Rpb24uZ2V0QmFzZUFjdGlvbkxpbmsoKSkpJT4nKSIgY2xhc3M9ImJ1dHRvbiI+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgPCUKLSAgICB9Ci0lPgotICAgIDwvZm9ybT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvdmlld3MvTGlzdEZhdm9yaXRlVURESVJlZ2lzdHJ5Vmlldy5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy92aWV3cy9MaXN0RmF2b3JpdGVVRERJUmVnaXN0cnlWaWV3LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTg0MWI1OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy92aWV3cy9MaXN0RmF2b3JpdGVVRERJUmVnaXN0cnlWaWV3LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEyNiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0iamF2YS51dGlsLkVudW1lcmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLlZlY3RvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlF1aWNrU29ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuRmF2b3JpdGVzUGVyc3BlY3RpdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgICBTdHJpbmcgZGl2RmF2b3JpdGVVRERJUmVnaXN0cnlUYWJsZSA9ICJkaXZGYXZvcml0ZVVERElSZWdpc3RyeVRhYmxlIjsKLSAgICBTdHJpbmcgeGRpdkZhdm9yaXRlVURESVJlZ2lzdHJ5VGFibGUgPSAieGRpdkZhdm9yaXRlVURESVJlZ2lzdHJ5VGFibGUiOwotCi0gICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2b3JpdGVzUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBmYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0lPgotPGh0bWw+Ci08aGVhZD4KLSAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gICAgPHRpdGxlPjwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIlZJRVdfVElUTEVfVURESV9SRUdJU1RSWV9MSVNUIiklPjwvdGl0bGU+Ci0gICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci0gICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii9mYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNGb3JtU3VibWl0LmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8anNwOmluY2x1ZGUgcGFnZT0iL2Zhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc1RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICAgIDwlCi0gICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gImZhdm9yaXRlcy9pbWFnZXMvbGlzdF9yZWdpc3RyeV9oaWdobGlnaHRlZC5naWYiOwotICAgIFN0cmluZyB0aXRsZSA9IGZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9MSVNUX0ZBVk9SSVRFX1VERElfUkVHSVNUUlkiKTsKLSAgICAlPgotICAgIDwlQCBpbmNsdWRlIGZpbGUgPSAiL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotICAgIDx0YWJsZT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgIDwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTElTVF9GQVZPUklURV9VRERJX1JFR0lTVFJZX0RFU0MiKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+ICAgIAotICAgIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFJlbW92ZUZhdm9yaXRlc0FjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgc3R5bGU9Im1hcmdpbi10b3A6MTBweDsiPgotICAgIDwlCi0gICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEZhdm9yaXRlc1VERElSZWdpc3RyeUZvbGRlckVsZW1lbnQpIHsKLSAgICAlPgotICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1GYXZvcml0ZXNBY3Rpb25JbnB1dHMuTVVMVElQTEVfTElOS19BQ1RJT04lPiIgdmFsdWU9IjEiPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPWRpdkZhdm9yaXRlVURESVJlZ2lzdHJ5VGFibGUlPicsJzwlPXhkaXZGYXZvcml0ZVVERElSZWdpc3RyeVRhYmxlJT4nKSI+PGltZyBuYW1lPSI8JT14ZGl2RmF2b3JpdGVVRERJUmVnaXN0cnlUYWJsZSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0Y2xvc2VkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX0NMT1NFRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz48JT1mYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0ZBVk9SSVRFX1VERElfUkVHSVNUUlkiKSU+PC9zdHJvbmc+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgdmFsaWduPSJ0b3AiIGhlaWdodD0xMD48aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiPjwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgICAgIDxkaXYgaWQ9IjwlPWRpdkZhdm9yaXRlVURESVJlZ2lzdHJ5VGFibGUlPiI+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25DbGljaz0iZmF2SGFuZGxlQ2hlY2tBbGxDbGljaygnPCU9ZGl2RmF2b3JpdGVVRERJUmVnaXN0cnlUYWJsZSU+Jyx0aGlzKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9BTExfQ0hFQ0tfQk9YIiklPiI+PC90aD4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT1mYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05BTUUiKSU+PC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8JQotICAgICAgICAgICAgICAgIEVudW1lcmF0aW9uIGUgPSAoKEZhdm9yaXRlc1VERElSZWdpc3RyeUZvbGRlckVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50KS5nZXRBbGxGYXZvcml0ZXMoKTsKLSAgICAgICAgICAgICAgICBWZWN0b3Igc29ydGVkVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgICAgICAgICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgCXNvcnRlZFZlY3Rvci5hZGQoZS5uZXh0RWxlbWVudCgpKTsKLSAgICAgICAgICAgICAJICB9Ci0gICAgICAgICAgICAgICAgUXVpY2tTb3J0LnNvcnQoc29ydGVkVmVjdG9yKTsKLSAgICAgICAgICAgICAgICBlID0gc29ydGVkVmVjdG9yLmVsZW1lbnRzKCk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgRmF2b3JpdGVzVURESVJlZ2lzdHJ5RWxlbWVudCBmYXZVRERJUmVnaXN0cnlFbGVtZW50ID0gKEZhdm9yaXRlc1VERElSZWdpc3RyeUVsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgICAgICAgICAgICAgICAgICAlPgotICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgIG5hbWU9IjwlPUZhdm9yaXRlc0FjdGlvbklucHV0cy5NQVNTX0FDVElPTl9OT0RFX0lEJT4iIHZhbHVlPSI8JT1zZWxlY3RlZE5vZGUuZ2V0Q2hpbGROb2RlKGZhdlVERElSZWdpc3RyeUVsZW1lbnQpLmdldE5vZGVJZCgpJT4iIG9uQ2xpY2s9InZhbGlkYXRlQ2hlY2tCb3hJbnB1dCh0aGlzLCB0aGlzLmNoZWNrZWQpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX1JPV19DSEVDS19CT1giKSU+Ij48L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIiBub3dyYXA+PGEgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFNlbGVjdEZhdm9yaXRlc05vZGVBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Q2hpbGROb2RlKGZhdlVERElSZWdpc3RyeUVsZW1lbnQpLmdldE5vZGVJZCgpLCBmYWxzZSkpKSU+IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI+PCU9ZmF2VURESVJlZ2lzdHJ5RWxlbWVudC5nZXROYW1lKCklPjwvYT48L3RkPgotICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICA8JQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICU+Ci0gICAgICAgIDwvdGFibGU+Ci0gICAgICAgIDwvZGl2PgotICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgICAgICAgIHR3aXN0SW5pdCgnPCU9ZGl2RmF2b3JpdGVVRERJUmVnaXN0cnlUYWJsZSU+JywnPCU9eGRpdkZhdm9yaXRlVURESVJlZ2lzdHJ5VGFibGUlPicpOwotICAgICAgICA8L3NjcmlwdD4KLQotICAgICAgICA8dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MiBjZWxsc3BhY2luZz0wPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIG5vd3JhcD4KLSAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfSU1QT1JUX1RPX1VERElfUEVSU1BFQ1RJVkUiKSU+IiBvbkNsaWNrPSJzZXRGb3JtTG9jYXRpb25BbmRTdWJtaXQoJzwlPWRpdkZhdm9yaXRlVURESVJlZ2lzdHJ5VGFibGUlPicsIHRoaXMuZm9ybSwgJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChBZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPicpIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIG5vd3JhcD4KLSAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUkVNT1ZFIiklPiIgb25DbGljaz0ic2V0Rm9ybUxvY2F0aW9uQW5kU3VibWl0KCc8JT1kaXZGYXZvcml0ZVVERElSZWdpc3RyeVRhYmxlJT4nLCB0aGlzLmZvcm0sICc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoUmVtb3ZlRmF2b3JpdGVzQWN0aW9uLmdldEJhc2VBY3Rpb25MaW5rKCkpKSU+JykiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgIDwlCi0gICAgfQotJT4KLSAgICA8L2Zvcm0+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3ZpZXdzL0xpc3RGYXZvcml0ZVVERElTZXJ2aWNlSW50ZXJmYWNlVmlldy5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy92aWV3cy9MaXN0RmF2b3JpdGVVRERJU2VydmljZUludGVyZmFjZVZpZXcuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzM0MjRiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3ZpZXdzL0xpc3RGYXZvcml0ZVVERElTZXJ2aWNlSW50ZXJmYWNlVmlldy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9ImphdmEudXRpbC5FbnVtZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC5WZWN0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5RdWlja1NvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLkZhdm9yaXRlc1BlcnNwZWN0aXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAgU3RyaW5nIGRpdkZhdm9yaXRlVURESVNlcnZpY2VJbnRUYWJsZSA9ICJkaXZGYXZvcml0ZVVERElTZXJ2aWNlSW50VGFibGUiOwotICAgIFN0cmluZyB4ZGl2RmF2b3JpdGVVRERJU2VydmljZUludFRhYmxlID0gInhkaXZGYXZvcml0ZVVERElTZXJ2aWNlSW50VGFibGUiOwotCi0gICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2b3JpdGVzUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBmYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0lPgotPGh0bWw+Ci08aGVhZD4KLSAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gICAgPHRpdGxlPjwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIlZJRVdfVElUTEVfVURESV9TRVJWSUNFX0lOVEVSRkFDRV9MSVNUIiklPjwvdGl0bGU+Ci0gICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci0gICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii9mYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNGb3JtU3VibWl0LmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8anNwOmluY2x1ZGUgcGFnZT0iL2Zhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc1RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICAgIDwlCi0gICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gImZhdm9yaXRlcy9pbWFnZXMvbGlzdF9zZXJ2aWNlX2ludGVyZmFjZV9oaWdobGlnaHRlZC5naWYiOwotICAgIFN0cmluZyB0aXRsZSA9IGZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9MSVNUX0ZBVk9SSVRFX1VERElfU0VSVklDRV9JTlRFUkZBQ0UiKTsKLSAgICAlPgotICAgIDwlQCBpbmNsdWRlIGZpbGUgPSAiL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotICAgIDx0YWJsZT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgIDwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTElTVF9GQVZPUklURV9VRERJX1NFUlZJQ0VfSU5URVJGQUNFX0RFU0MiKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+ICAgIAotICAgIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFJlbW92ZUZhdm9yaXRlc0FjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgc3R5bGU9Im1hcmdpbi10b3A6MTBweDsiPgotICAgIDwlCi0gICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRm9sZGVyRWxlbWVudCkgewotICAgICU+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPUZhdm9yaXRlc0FjdGlvbklucHV0cy5NVUxUSVBMRV9MSU5LX0FDVElPTiU+IiB2YWx1ZT0iMSI+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT4KLSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9ZGl2RmF2b3JpdGVVRERJU2VydmljZUludFRhYmxlJT4nLCc8JT14ZGl2RmF2b3JpdGVVRERJU2VydmljZUludFRhYmxlJT4nKSI+PGltZyBuYW1lPSI8JT14ZGl2RmF2b3JpdGVVRERJU2VydmljZUludFRhYmxlJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RjbG9zZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfQ0xPU0VEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPjwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfRkFWT1JJVEVfVURESV9TRVJWSUNFX0lOVEVSRkFDRSIpJT48L3N0cm9uZz4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PTEwPjxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBoZWlnaHQ9MiB3aWR0aD0iMTAwJSI+PC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICAgICAgPGRpdiBpZD0iPCU9ZGl2RmF2b3JpdGVVRERJU2VydmljZUludFRhYmxlJT4iPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9ImZhdkhhbmRsZUNoZWNrQWxsQ2xpY2soJzwlPWRpdkZhdm9yaXRlVURESVNlcnZpY2VJbnRUYWJsZSU+Jyx0aGlzKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9BTExfQ0hFQ0tfQk9YIiklPiI+PC90aD4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT1mYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05BTUUiKSU+PC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8JQotICAgICAgICAgICAgICAgIEVudW1lcmF0aW9uIGUgPSAoKEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlRm9sZGVyRWxlbWVudClzZWxlY3RlZEVsZW1lbnQpLmdldEFsbEZhdm9yaXRlcygpOwotICAgICAgICAgICAgICAgIFZlY3RvciBzb3J0ZWRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgICAgICAgICAgICAJc29ydGVkVmVjdG9yLmFkZChlLm5leHRFbGVtZW50KCkpOwotICAgICAgICAgICAgIAkgIH0KLSAgICAgICAgICAgICAgICBRdWlja1NvcnQuc29ydChzb3J0ZWRWZWN0b3IpOwotICAgICAgICAgICAgICAgIGUgPSBzb3J0ZWRWZWN0b3IuZWxlbWVudHMoKTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgICAgICAgICAgICAgICBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZUVsZW1lbnQgZmF2VURESVNlckludEVsZW1lbnQgPSAoRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgJT4KLSAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giICBuYW1lPSI8JT1GYXZvcml0ZXNBY3Rpb25JbnB1dHMuTUFTU19BQ1RJT05fTk9ERV9JRCU+IiB2YWx1ZT0iPCU9c2VsZWN0ZWROb2RlLmdldENoaWxkTm9kZShmYXZVRERJU2VySW50RWxlbWVudCkuZ2V0Tm9kZUlkKCklPiIgb25DbGljaz0idmFsaWRhdGVDaGVja0JveElucHV0KHRoaXMsIHRoaXMuY2hlY2tlZCkiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfUk9XX0NIRUNLX0JPWCIpJT4iPjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiIG5vd3JhcD48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoU2VsZWN0RmF2b3JpdGVzTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXRDaGlsZE5vZGUoZmF2VURESVNlckludEVsZW1lbnQpLmdldE5vZGVJZCgpLCBmYWxzZSkpKSU+IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI+PCU9ZmF2VURESVNlckludEVsZW1lbnQuZ2V0TmFtZSgpJT48L2E+PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAlPgotICAgICAgICA8L3RhYmxlPgotICAgICAgICA8L2Rpdj4KLSAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICAgICAgICB0d2lzdEluaXQoJzwlPWRpdkZhdm9yaXRlVURESVNlcnZpY2VJbnRUYWJsZSU+JywnPCU9eGRpdkZhdm9yaXRlVURESVNlcnZpY2VJbnRUYWJsZSU+Jyk7Ci0gICAgICAgIDwvc2NyaXB0PgotCi0gICAgICAgIDx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz0yIGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgbm93cmFwPgotICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9JTVBPUlRfVE9fVURESV9QRVJTUEVDVElWRSIpJT4iIG9uQ2xpY2s9InNldEZvcm1Mb2NhdGlvbkFuZFN1Ym1pdCgnPCU9ZGl2RmF2b3JpdGVVRERJU2VydmljZUludFRhYmxlJT4nLCB0aGlzLmZvcm0sICc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24uZ2V0QmFzZUFjdGlvbkxpbmsoKSkpJT4nKSIgY2xhc3M9ImJ1dHRvbiI+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBub3dyYXA+Ci0gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT1mYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1JFTU9WRSIpJT4iIG9uQ2xpY2s9InNldEZvcm1Mb2NhdGlvbkFuZFN1Ym1pdCgnPCU9ZGl2RmF2b3JpdGVVRERJU2VydmljZUludFRhYmxlJT4nLCB0aGlzLmZvcm0sICc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoUmVtb3ZlRmF2b3JpdGVzQWN0aW9uLmdldEJhc2VBY3Rpb25MaW5rKCkpKSU+JykiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgIDwlCi0gICAgfQotJT4KLSAgICA8L2Zvcm0+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3ZpZXdzL0xpc3RGYXZvcml0ZVVERElTZXJ2aWNlVmlldy5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy92aWV3cy9MaXN0RmF2b3JpdGVVRERJU2VydmljZVZpZXcuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NGY1MzY2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3ZpZXdzL0xpc3RGYXZvcml0ZVVERElTZXJ2aWNlVmlldy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9ImphdmEudXRpbC5FbnVtZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC5WZWN0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5RdWlja1NvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLnBlcnNwZWN0aXZlLkZhdm9yaXRlc1BlcnNwZWN0aXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAgU3RyaW5nIGRpdkZhdm9yaXRlVURESVNlcnZpY2VUYWJsZSA9ICJkaXZGYXZvcml0ZVVERElTZXJ2aWNlVGFibGUiOwotICAgIFN0cmluZyB4ZGl2RmF2b3JpdGVVRERJU2VydmljZVRhYmxlID0gInhkaXZGYXZvcml0ZVVERElTZXJ2aWNlVGFibGUiOwotCi0gICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2b3JpdGVzUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBmYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0lPgotPGh0bWw+Ci08aGVhZD4KLSAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gICAgPHRpdGxlPjwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIlZJRVdfVElUTEVfVURESV9TRVJWSUNFX0xJU1QiKSU+PC90aXRsZT4KLSAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLSAgICA8anNwOmluY2x1ZGUgcGFnZT0iL2Zhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc0Zvcm1TdWJtaXQuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvZmF2b3JpdGVzL3NjcmlwdHMvZmF2b3JpdGVzVGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gICAgPCUKLSAgICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAid3NpbC9pbWFnZXMvbGlzdF9VRERJX3NlcnZpY2VfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgICBTdHJpbmcgdGl0bGUgPSBmYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTElTVF9GQVZPUklURV9VRERJX1NFUlZJQ0UiKTsKLSAgICAlPgotICAgIDwlQCBpbmNsdWRlIGZpbGUgPSAiL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotICAgIDx0YWJsZT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgIDwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTElTVF9GQVZPUklURV9VRERJX1NFUlZJQ0VfREVTQyIpJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4gICAgCi0gICAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoUmVtb3ZlRmF2b3JpdGVzQWN0aW9uLmdldEJhc2VBY3Rpb25MaW5rKCkpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBzdHlsZT0ibWFyZ2luLXRvcDoxMHB4OyI+Ci0gICAgPCUKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgRmF2b3JpdGVzVURESVNlcnZpY2VGb2xkZXJFbGVtZW50KSB7Ci0gICAgJT4KLSAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9RmF2b3JpdGVzQWN0aW9uSW5wdXRzLk1VTFRJUExFX0xJTktfQUNUSU9OJT4iIHZhbHVlPSIxIj4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT1kaXZGYXZvcml0ZVVERElTZXJ2aWNlVGFibGUlPicsJzwlPXhkaXZGYXZvcml0ZVVERElTZXJ2aWNlVGFibGUlPicpIj48aW1nIG5hbWU9IjwlPXhkaXZGYXZvcml0ZVVERElTZXJ2aWNlVGFibGUlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdGNsb3NlZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9DTE9TRUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+PCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9GQVZPUklURV9VRERJX1NFUlZJQ0UiKSU+PC9zdHJvbmc+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgdmFsaWduPSJ0b3AiIGhlaWdodD0xMD48aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiPjwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgICAgIDxkaXYgaWQ9IjwlPWRpdkZhdm9yaXRlVURESVNlcnZpY2VUYWJsZSU+Ij4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJmYXZIYW5kbGVDaGVja0FsbENsaWNrKCc8JT1kaXZGYXZvcml0ZVVERElTZXJ2aWNlVGFibGUlPicsdGhpcykiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQUxMX0NIRUNLX0JPWCIpJT4iPjwvdGg+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9OQU1FIiklPjwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgICBFbnVtZXJhdGlvbiBlID0gKChGYXZvcml0ZXNVRERJU2VydmljZUZvbGRlckVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50KS5nZXRBbGxGYXZvcml0ZXMoKTsKLSAgICAgICAgICAgICAgICBWZWN0b3Igc29ydGVkVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgICAgICAgICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgCXNvcnRlZFZlY3Rvci5hZGQoZS5uZXh0RWxlbWVudCgpKTsKLSAgICAgICAgICAgICAJICB9Ci0gICAgICAgICAgICAgICAgUXVpY2tTb3J0LnNvcnQoc29ydGVkVmVjdG9yKTsKLSAgICAgICAgICAgICAgICBlID0gc29ydGVkVmVjdG9yLmVsZW1lbnRzKCk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgRmF2b3JpdGVzVURESVNlcnZpY2VFbGVtZW50IGZhdlVERElTZXJ2aWNlRWxlbWVudCA9IChGYXZvcml0ZXNVRERJU2VydmljZUVsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgICAgICAgICAgICAgICAgICAlPgotICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgIG5hbWU9IjwlPUZhdm9yaXRlc0FjdGlvbklucHV0cy5NQVNTX0FDVElPTl9OT0RFX0lEJT4iIHZhbHVlPSI8JT1zZWxlY3RlZE5vZGUuZ2V0Q2hpbGROb2RlKGZhdlVERElTZXJ2aWNlRWxlbWVudCkuZ2V0Tm9kZUlkKCklPiIgb25DbGljaz0idmFsaWRhdGVDaGVja0JveElucHV0KHRoaXMsIHRoaXMuY2hlY2tlZCkiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfUk9XX0NIRUNLX0JPWCIpJT4iPjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiIG5vd3JhcD48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoU2VsZWN0RmF2b3JpdGVzTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXRDaGlsZE5vZGUoZmF2VURESVNlcnZpY2VFbGVtZW50KS5nZXROb2RlSWQoKSwgZmFsc2UpKSklPiIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iPjwlPWZhdlVERElTZXJ2aWNlRWxlbWVudC5nZXROYW1lKCklPjwvYT48L3RkPgotICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICA8JQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICU+Ci0gICAgICAgIDwvdGFibGU+Ci0gICAgICAgIDwvZGl2PgotICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgICAgICAgIHR3aXN0SW5pdCgnPCU9ZGl2RmF2b3JpdGVVRERJU2VydmljZVRhYmxlJT4nLCc8JT14ZGl2RmF2b3JpdGVVRERJU2VydmljZVRhYmxlJT4nKTsKLSAgICAgICAgPC9zY3JpcHQ+Ci0KLSAgICAgICAgPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTIgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBub3dyYXA+Ci0gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT1mYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0lNUE9SVF9UT19VRERJX1BFUlNQRUNUSVZFIiklPiIgb25DbGljaz0ic2V0Rm9ybUxvY2F0aW9uQW5kU3VibWl0KCc8JT1kaXZGYXZvcml0ZVVERElTZXJ2aWNlVGFibGUlPicsIHRoaXMuZm9ybSwgJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChBZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPicpIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIG5vd3JhcD4KLSAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUkVNT1ZFIiklPiIgb25DbGljaz0ic2V0Rm9ybUxvY2F0aW9uQW5kU3VibWl0KCc8JT1kaXZGYXZvcml0ZVVERElTZXJ2aWNlVGFibGUlPicsIHRoaXMuZm9ybSwgJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChSZW1vdmVGYXZvcml0ZXNBY3Rpb24uZ2V0QmFzZUFjdGlvbkxpbmsoKSkpJT4nKSIgY2xhc3M9ImJ1dHRvbiI+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgPCUKLSAgICB9Ci0lPgotICAgIDwvZm9ybT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvdmlld3MvTGlzdEZhdm9yaXRlVXNlckRlZlVERElSZWdpc3RyeVZpZXcuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvdmlld3MvTGlzdEZhdm9yaXRlVXNlckRlZlVERElSZWdpc3RyeVZpZXcuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZGE3N2E5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3ZpZXdzL0xpc3RGYXZvcml0ZVVzZXJEZWZVRERJUmVnaXN0cnlWaWV3LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEyMyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0iamF2YS51dGlsLkVudW1lcmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLlZlY3RvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlF1aWNrU29ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuRmF2b3JpdGVzUGVyc3BlY3RpdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgICBTdHJpbmcgZGl2RmF2b3JpdGVVRERJUmVnaXN0cnlUYWJsZSA9ICJkaXZGYXZvcml0ZVVERElSZWdpc3RyeVRhYmxlIjsKLSAgICBTdHJpbmcgeGRpdkZhdm9yaXRlVURESVJlZ2lzdHJ5VGFibGUgPSAieGRpdkZhdm9yaXRlVURESVJlZ2lzdHJ5VGFibGUiOwotCi0gICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2b3JpdGVzUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBmYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0lPgotPGh0bWw+Ci08aGVhZD4KLSAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gICAgPHRpdGxlPjwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIlZJRVdfVElUTEVfVVNFUl9ERUZfVURESV9SRUdJU1RSWV9MSVNUIiklPjwvdGl0bGU+Ci0gICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci0gICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii9mYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNGb3JtU3VibWl0LmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8anNwOmluY2x1ZGUgcGFnZT0iL2Zhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc1RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICAgIDwlCi0gICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gImZhdm9yaXRlcy9pbWFnZXMvbGlzdF9yZWdpc3RyeV9oaWdobGlnaHRlZC5naWYiOwotICAgIFN0cmluZyB0aXRsZSA9IGZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9MSVNUX0ZBVk9SSVRFX1VTRVJfREVGX1VERElfUkVHSVNUUlkiKTsKLSAgICAlPgotICAgIDwlQCBpbmNsdWRlIGZpbGUgPSAiL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotICAgIDx0YWJsZT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgIDwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTElTVF9GQVZPUklURV9VU0VSX0RFRl9VRERJX1JFR0lTVFJZX0RFU0MiKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+ICAgIAotICAgIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFJlbW92ZUZhdm9yaXRlc0FjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgc3R5bGU9Im1hcmdpbi10b3A6MTBweDsiPgotICAgIDwlCi0gICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlGb2xkZXJFbGVtZW50KSB7Ci0gICAgJT4KLSAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9RmF2b3JpdGVzQWN0aW9uSW5wdXRzLk1VTFRJUExFX0xJTktfQUNUSU9OJT4iIHZhbHVlPSIxIj4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT1kaXZGYXZvcml0ZVVERElSZWdpc3RyeVRhYmxlJT4nLCc8JT14ZGl2RmF2b3JpdGVVRERJUmVnaXN0cnlUYWJsZSU+JykiPjxpbWcgbmFtZT0iPCU9eGRpdkZhdm9yaXRlVURESVJlZ2lzdHJ5VGFibGUlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdGNsb3NlZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9DTE9TRUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+PCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9GQVZPUklURV9VU0VSX0RFRl9VRERJX1JFR0lTVFJZIiklPjwvc3Ryb25nPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIHZhbGlnbj0idG9wIiBoZWlnaHQ9MTA+PGltZyBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2tleWxpbmUuZ2lmIikpJT4iIGhlaWdodD0yIHdpZHRoPSIxMDAlIj48L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8ZGl2IGlkPSI8JT1kaXZGYXZvcml0ZVVERElSZWdpc3RyeVRhYmxlJT4iPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9ImZhdkhhbmRsZUNoZWNrQWxsQ2xpY2soJzwlPWRpdkZhdm9yaXRlVURESVJlZ2lzdHJ5VGFibGUlPicsdGhpcykiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQUxMX0NIRUNLX0JPWCIpJT4iPjwvdGg+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9OQU1FIiklPjwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgICBFbnVtZXJhdGlvbiBlID0gKChGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5Rm9sZGVyRWxlbWVudClzZWxlY3RlZEVsZW1lbnQpLmdldEFsbEZhdm9yaXRlcygpOwotICAgICAgICAgICAgICAgIFZlY3RvciBzb3J0ZWRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgICAgICAgICAgICAJc29ydGVkVmVjdG9yLmFkZChlLm5leHRFbGVtZW50KCkpOwotICAgICAgICAgICAgIAkgIH0KLSAgICAgICAgICAgICAgICBRdWlja1NvcnQuc29ydChzb3J0ZWRWZWN0b3IpOwotICAgICAgICAgICAgICAgIGUgPSBzb3J0ZWRWZWN0b3IuZWxlbWVudHMoKTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgICAgICAgICAgICAgICBGYXZvcml0ZXNVc2VyRGVmVURESVJlZ2lzdHJ5RWxlbWVudCBmYXZVRERJUmVnaXN0cnlFbGVtZW50ID0gKEZhdm9yaXRlc1VzZXJEZWZVRERJUmVnaXN0cnlFbGVtZW50KWUubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgJT4KLSAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giICBuYW1lPSI8JT1GYXZvcml0ZXNBY3Rpb25JbnB1dHMuTUFTU19BQ1RJT05fTk9ERV9JRCU+IiB2YWx1ZT0iPCU9c2VsZWN0ZWROb2RlLmdldENoaWxkTm9kZShmYXZVRERJUmVnaXN0cnlFbGVtZW50KS5nZXROb2RlSWQoKSU+IiBvbkNsaWNrPSJ2YWxpZGF0ZUNoZWNrQm94SW5wdXQodGhpcywgdGhpcy5jaGVja2VkKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9ST1dfQ0hFQ0tfQk9YIiklPiI+PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyIgbm93cmFwPjxhIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChTZWxlY3RGYXZvcml0ZXNOb2RlQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldENoaWxkTm9kZShmYXZVRERJUmVnaXN0cnlFbGVtZW50KS5nZXROb2RlSWQoKSwgZmFsc2UpKSklPiIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iPjwlPWZhdlVERElSZWdpc3RyeUVsZW1lbnQuZ2V0TmFtZSgpJT48L2E+PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAlPgotICAgICAgICA8L3RhYmxlPgotICAgICAgICA8L2Rpdj4KLSAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICAgICAgICB0d2lzdEluaXQoJzwlPWRpdkZhdm9yaXRlVURESVJlZ2lzdHJ5VGFibGUlPicsJzwlPXhkaXZGYXZvcml0ZVVERElSZWdpc3RyeVRhYmxlJT4nKTsKLSAgICAgICAgPC9zY3JpcHQ+Ci0KLSAgICAgICAgPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTIgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBub3dyYXA+Ci0gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT1mYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0lNUE9SVF9UT19VRERJX1BFUlNQRUNUSVZFIiklPiIgb25DbGljaz0ic2V0Rm9ybUxvY2F0aW9uQW5kU3VibWl0KCc8JT1kaXZGYXZvcml0ZVVERElSZWdpc3RyeVRhYmxlJT4nLCB0aGlzLmZvcm0sICc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24uZ2V0QmFzZUFjdGlvbkxpbmsoKSkpJT4nKSIgY2xhc3M9ImJ1dHRvbiI+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgPCUKLSAgICB9Ci0lPgotICAgIDwvZm9ybT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvdmlld3MvTGlzdEZhdm9yaXRlV1NETFNlcnZpY2VWaWV3LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3ZpZXdzL0xpc3RGYXZvcml0ZVdTRExTZXJ2aWNlVmlldy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlNTFhYzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mYXZvcml0ZXMvdmlld3MvTGlzdEZhdm9yaXRlV1NETFNlcnZpY2VWaWV3LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEyNiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0iamF2YS51dGlsLkVudW1lcmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLlZlY3RvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlF1aWNrU29ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS5GYXZvcml0ZXNQZXJzcGVjdGl2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuZGF0YW1vZGVsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgICBTdHJpbmcgZGl2RmF2b3JpdGVXU0RMVGFibGUgPSAiZGl2RmF2b3JpdGVXU0RMVGFibGUiOwotICAgIFN0cmluZyB4ZGl2RmF2b3JpdGVXU0RMVGFibGUgPSAieGRpdkZhdm9yaXRlV1NETFRhYmxlIjsKLQotICAgIEZhdm9yaXRlc1BlcnNwZWN0aXZlIGZhdm9yaXRlc1BlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRGYXZvcml0ZXNQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotJT4KLTxodG1sPgotPGhlYWQ+Ci0gICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICAgIDx0aXRsZT48JT1mYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJWSUVXX1RJVExFX1dTRExfU0VSVklDRV9MSVNUIiklPjwvdGl0bGU+Ci0gICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci0gICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii9mYXZvcml0ZXMvc2NyaXB0cy9mYXZvcml0ZXNGb3JtU3VibWl0LmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8anNwOmluY2x1ZGUgcGFnZT0iL2Zhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc1RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICAgIDwlCi0gICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gIndzaWwvaW1hZ2VzL2xpc3RfV1NETF9zZXJ2aWNlX2hpZ2hsaWdodGVkLmdpZiI7Ci0gICAgU3RyaW5nIHRpdGxlID0gZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0xJU1RfRkFWT1JJVEVfV1NETF9TRVJWSUNFIik7Ci0gICAgJT4KLSAgICA8JUAgaW5jbHVkZSBmaWxlID0gIi9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgICA8dGFibGU+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICA8JT1mYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0xJU1RfRkFWT1JJVEVfV1NETF9TRVJWSUNFX0RFU0MiKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+ICAgIAotICAgIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFJlbW92ZUZhdm9yaXRlc0FjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgc3R5bGU9Im1hcmdpbi10b3A6MTBweDsiPgotICAgIDwlCi0gICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEZhdm9yaXRlc1dTRExTZXJ2aWNlRm9sZGVyRWxlbWVudCkgewotICAgICU+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPUZhdm9yaXRlc0FjdGlvbklucHV0cy5NVUxUSVBMRV9MSU5LX0FDVElPTiU+IiB2YWx1ZT0iMSI+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT4KLSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9ZGl2RmF2b3JpdGVXU0RMVGFibGUlPicsJzwlPXhkaXZGYXZvcml0ZVdTRExUYWJsZSU+JykiPjxpbWcgbmFtZT0iPCU9eGRpdkZhdm9yaXRlV1NETFRhYmxlJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RjbG9zZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfQ0xPU0VEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPjwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfRkFWT1JJVEVfV1NETCIpJT48L3N0cm9uZz4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PTEwPjxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBoZWlnaHQ9MiB3aWR0aD0iMTAwJSI+PC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICAgICAgPGRpdiBpZD0iPCU9ZGl2RmF2b3JpdGVXU0RMVGFibGUlPiI+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25DbGljaz0iZmF2SGFuZGxlQ2hlY2tBbGxDbGljaygnPCU9ZGl2RmF2b3JpdGVXU0RMVGFibGUlPicsdGhpcykiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQUxMX0NIRUNLX0JPWCIpJT4iPjwvdGg+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9VUkwiKSU+PC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8JQotICAgICAgICAgICAgICAgIEVudW1lcmF0aW9uIGUgPSAoKEZhdm9yaXRlc1dTRExTZXJ2aWNlRm9sZGVyRWxlbWVudClzZWxlY3RlZEVsZW1lbnQpLmdldEFsbEZhdm9yaXRlcygpOwotICAgICAgICAgICAgICAgIFZlY3RvciBzb3J0ZWRWZWN0b3IgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgICAgICAgICAgICAJc29ydGVkVmVjdG9yLmFkZChlLm5leHRFbGVtZW50KCkpOwotICAgICAgICAgICAgIAkgIH0KLSAgICAgICAgICAgICAgICBRdWlja1NvcnQuc29ydChzb3J0ZWRWZWN0b3IpOwotICAgICAgICAgICAgICAgIGUgPSBzb3J0ZWRWZWN0b3IuZWxlbWVudHMoKTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgICAgICAgICAgICAgICBGYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQgZmF2V1NETFNlcnZpY2VFbGVtZW50ID0gKEZhdm9yaXRlc1dTRExTZXJ2aWNlRWxlbWVudCllLm5leHRFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiAgbmFtZT0iPCU9RmF2b3JpdGVzQWN0aW9uSW5wdXRzLk1BU1NfQUNUSU9OX05PREVfSUQlPiIgdmFsdWU9IjwlPXNlbGVjdGVkTm9kZS5nZXRDaGlsZE5vZGUoZmF2V1NETFNlcnZpY2VFbGVtZW50KS5nZXROb2RlSWQoKSU+IiBvbkNsaWNrPSJ2YWxpZGF0ZUNoZWNrQm94SW5wdXQodGhpcywgdGhpcy5jaGVja2VkKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9ST1dfQ0hFQ0tfQk9YIiklPiI+PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyIgbm93cmFwPjxhIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChTZWxlY3RGYXZvcml0ZXNOb2RlQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldENoaWxkTm9kZShmYXZXU0RMU2VydmljZUVsZW1lbnQpLmdldE5vZGVJZCgpLCBmYWxzZSkpKSU+IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI+PCU9ZmF2V1NETFNlcnZpY2VFbGVtZW50LmdldFdzZGxVcmwoKSU+PC9hPjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgIDwlCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgJT4KLSAgICAgICAgPC90YWJsZT4KLSAgICAgICAgPC9kaXY+Ci0gICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgICAgICAgdHdpc3RJbml0KCc8JT1kaXZGYXZvcml0ZVdTRExUYWJsZSU+JywnPCU9eGRpdkZhdm9yaXRlV1NETFRhYmxlJT4nKTsKLSAgICAgICAgPC9zY3JpcHQ+Ci0KLSAgICAgICAgPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTIgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBub3dyYXA+Ci0gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT1mYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0lNUE9SVF9UT19XU0RMX1BFUlNQRUNUSVZFIiklPiIgb25DbGljaz0ic2V0Rm9ybUxvY2F0aW9uQW5kU3VibWl0KCc8JT1kaXZGYXZvcml0ZVdTRExUYWJsZSU+JywgdGhpcy5mb3JtLCAnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KEZhdm9yaXRlc0FkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uLmdldEJhc2VBY3Rpb25MaW5rKCkpKSU+JykiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgbm93cmFwPgotICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9SRU1PVkUiKSU+IiBvbkNsaWNrPSJzZXRGb3JtTG9jYXRpb25BbmRTdWJtaXQoJzwlPWRpdkZhdm9yaXRlV1NETFRhYmxlJT4nLCB0aGlzLmZvcm0sICc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoUmVtb3ZlRmF2b3JpdGVzQWN0aW9uLmdldEJhc2VBY3Rpb25MaW5rKCkpKSU+JykiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgIDwlCi0gICAgfQotJT4KLSAgICA8L2Zvcm0+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3ZpZXdzL0xpc3RGYXZvcml0ZVdTSUxWaWV3LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZmF2b3JpdGVzL3ZpZXdzL0xpc3RGYXZvcml0ZVdTSUxWaWV3LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDA0NTEyNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zhdm9yaXRlcy92aWV3cy9MaXN0RmF2b3JpdGVXU0lMVmlldy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMjggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9ImphdmEudXRpbC5FbnVtZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC5WZWN0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5RdWlja1NvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuRmF2b3JpdGVzUGVyc3BlY3RpdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAgU3RyaW5nIGRpdkZhdm9yaXRlV1NJTFRhYmxlID0gImRpdkZhdm9yaXRlV1NJTFRhYmxlIjsKLSAgICBTdHJpbmcgeGRpdkZhdm9yaXRlV1NJTFRhYmxlID0gInhkaXZGYXZvcml0ZVdTSUxUYWJsZSI7Ci0KLSAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZvcml0ZXNQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IGZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSU+Ci08aHRtbD4KLTxoZWFkPgotICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgICA8dGl0bGU+PCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiVklFV19USVRMRV9XU0lMX0xJU1QiKSU+PC90aXRsZT4KLSAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLSAgICA8anNwOmluY2x1ZGUgcGFnZT0iL2Zhdm9yaXRlcy9zY3JpcHRzL2Zhdm9yaXRlc0Zvcm1TdWJtaXQuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvZmF2b3JpdGVzL3NjcmlwdHMvZmF2b3JpdGVzVGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gICAgPCUKLSAgICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAiZmF2b3JpdGVzL2ltYWdlcy9saXN0X1dTSUxfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgICBTdHJpbmcgdGl0bGUgPSBmYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTElTVF9GQVZPUklURV9XU0lMIik7Ci0gICAgJT4KLSAgICA8JUAgaW5jbHVkZSBmaWxlID0gIi9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgICA8dGFibGU+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICA8JT1mYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0xJU1RfRkFWT1JJVEVfV1NJTF9ERVNDIiklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPiAgICAKLSAgICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChSZW1vdmVGYXZvcml0ZXNBY3Rpb24uZ2V0QmFzZUFjdGlvbkxpbmsoKSkpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIHN0eWxlPSJtYXJnaW4tdG9wOjEwcHg7Ij4KLSAgICA8JQotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBGYXZvcml0ZXNXU0lMRm9sZGVyRWxlbWVudCkgewotICAgICU+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPUZhdm9yaXRlc0FjdGlvbklucHV0cy5NVUxUSVBMRV9MSU5LX0FDVElPTiU+IiB2YWx1ZT0iMSI+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT4KLSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9ZGl2RmF2b3JpdGVXU0lMVGFibGUlPicsJzwlPXhkaXZGYXZvcml0ZVdTSUxUYWJsZSU+JykiPjxpbWcgbmFtZT0iPCU9eGRpdkZhdm9yaXRlV1NJTFRhYmxlJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RjbG9zZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfQ0xPU0VEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPjwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfRkFWT1JJVEVfV1NJTCIpJT48L3N0cm9uZz4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PTEwPjxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBoZWlnaHQ9MiB3aWR0aD0iMTAwJSI+PC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICAgICAgPGRpdiBpZD0iPCU9ZGl2RmF2b3JpdGVXU0lMVGFibGUlPiI+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25DbGljaz0iZmF2SGFuZGxlQ2hlY2tBbGxDbGljaygnPCU9ZGl2RmF2b3JpdGVXU0lMVGFibGUlPicsdGhpcykiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQUxMX0NIRUNLX0JPWCIpJT4iPjwvdGg+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9VUkwiKSU+PC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8JQotICAgICAgICAgICAgRmF2b3JpdGVzV1NJTEZvbGRlckVsZW1lbnQgZmF2V1NJTEZvbGRlckVsZW1lbnQgPSAoRmF2b3JpdGVzV1NJTEZvbGRlckVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50OwotICAgICAgICAgICAgRW51bWVyYXRpb24gZSA9IGZhdldTSUxGb2xkZXJFbGVtZW50LmdldEFsbEZhdm9yaXRlcygpOwotICAgICAgICAgICAgVmVjdG9yIHNvcnRlZFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgc29ydGVkVmVjdG9yLmFkZChlLm5leHRFbGVtZW50KCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgUXVpY2tTb3J0LnNvcnQoc29ydGVkVmVjdG9yKTsKLSAgICAgICAgICAgIGUgPSBzb3J0ZWRWZWN0b3IuZWxlbWVudHMoKTsKLSAgICAgICAgICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgRmF2b3JpdGVzV1NJTEVsZW1lbnQgZmF2V1NJTEVsZW1lbnQgPSAoRmF2b3JpdGVzV1NJTEVsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgIG5hbWU9IjwlPUZhdm9yaXRlc0FjdGlvbklucHV0cy5NQVNTX0FDVElPTl9OT0RFX0lEJT4iIHZhbHVlPSI8JT1zZWxlY3RlZE5vZGUuZ2V0Q2hpbGROb2RlKGZhdldTSUxFbGVtZW50KS5nZXROb2RlSWQoKSU+IiBvbkNsaWNrPSJ2YWxpZGF0ZUNoZWNrQm94SW5wdXQodGhpcywgdGhpcy5jaGVja2VkKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9ST1dfQ0hFQ0tfQk9YIiklPiI+PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIiBub3dyYXA+PGEgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFNlbGVjdEZhdm9yaXRlc05vZGVBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Q2hpbGROb2RlKGZhdldTSUxFbGVtZW50KS5nZXROb2RlSWQoKSwgZmFsc2UpKSklPiIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iPjwlPWZhdldTSUxFbGVtZW50LmdldFdzaWxVcmwoKSU+PC9hPjwvdGQ+Ci0gICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICA8JQotICAgICAgICAgICAgfQotICAgICAgICAgICAgJT4KLSAgICAgICAgPC90YWJsZT4KLSAgICAgICAgPC9kaXY+Ci0gICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgICAgICAgdHdpc3RJbml0KCc8JT1kaXZGYXZvcml0ZVdTSUxUYWJsZSU+JywnPCU9eGRpdkZhdm9yaXRlV1NJTFRhYmxlJT4nKTsKLSAgICAgICAgPC9zY3JpcHQ+Ci0KLQotICAgICAgICA8dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MiBjZWxsc3BhY2luZz0wPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIG5vd3JhcD4KLSAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPWZhdm9yaXRlc1BlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfSU1QT1JUX1RPX1dTSUxfUEVSU1BFQ1RJVkUiKSU+IiBvbkNsaWNrPSJzZXRGb3JtTG9jYXRpb25BbmRTdWJtaXQoJzwlPWRpdkZhdm9yaXRlV1NJTFRhYmxlJT4nLCB0aGlzLmZvcm0sICc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoQWRkV1NJTFRvV1NJTFBlcnNwZWN0aXZlQWN0aW9uLmdldEJhc2VBY3Rpb25MaW5rKCkpKSU+JykiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgbm93cmFwPgotICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9ZmF2b3JpdGVzUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9SRU1PVkUiKSU+IiBvbkNsaWNrPSJzZXRGb3JtTG9jYXRpb25BbmRTdWJtaXQoJzwlPWRpdkZhdm9yaXRlV1NJTFRhYmxlJT4nLCB0aGlzLmZvcm0sICc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoUmVtb3ZlRmF2b3JpdGVzQWN0aW9uLmdldEJhc2VBY3Rpb25MaW5rKCkpKSU+JykiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgIDwlCi0gICAgfQotICAgICU+Ci0gICAgPC9mb3JtPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zvcm1zLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zvcm1zLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mb3Jtcy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZm9ybXMvSW1wb3J0VG9Xb3JrYmVuY2hGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZm9ybXMvSW1wb3J0VG9Xb3JrYmVuY2hGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWYzNjBiNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zvcm1zL0ltcG9ydFRvV29ya2JlbmNoRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MjcgICAxMjc0NDMgamVzcGVyQHNlbHNrYWJldC5vcmcgLSBKZXNwZXIgUyBNb2xsZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybVByb3BlcnRpZXMiIGNsYXNzPSJqYXZhLnV0aWwuSGFzaHRhYmxlIiBzY29wZT0icmVxdWVzdCIvPgotPGh0bWw+Ci08aGVhZD4KLSAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gICAgPHRpdGxlPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9JTVBPUlRfVE9fV09SS0JFTkNIIiklPjwvdGl0bGU+Ci0gICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvZm9ybXN1Ym1pdC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvZm9ybXV0aWxzLmpzcCIgZmx1c2g9InRydWUiLz4gICAgCi08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLQotICAgIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KChTdHJpbmcpZm9ybVByb3BlcnRpZXMuZ2V0KCJmb3JtQWN0aW9uTGluayIpKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI+Ci0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLklNUE9SVF9GSUxFJT4iIHZhbHVlPSI8JT1BY3Rpb25JbnB1dHMuSU1QT1JUX0ZJTEUlPiI+Ci0KLSAgICA8JQotICAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJpbWFnZXMvaW1wb3J0X3RvX3dvcmtiZW5jaF9oaWdobGlnaHRlZC5naWYiOwotICAgIFN0cmluZyB0aXRsZSA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0lNUE9SVF9XU0RMX1RPX1dPUktCRU5DSCIpOwotICAgICU+Ci0gICAgPCVAIGluY2x1ZGUgZmlsZSA9ICIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgPHRhYmxlPgotICAgICAgPHRyPgotICAgICAgICA8dGQ+Ci0gICAgICAgICAgPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0lNUE9SVF9UT19XT1JLQkVOQ0hfREVTQyIpJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgICA8dGFibGU+Ci0gICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9NDAgdmFsaWduPSJjZW50ZXIiPgotICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9InNlbGVjdF93b3JrYmVuY2hfcHJvamVjdF9uYW1lIj48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIldPUktCRU5DSF9QUk9KRUNUX05BTUUiKSU+PC9sYWJlbD4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTQwIHZhbGlnbj0iY2VudGVyIiBub3dyYXA+Ci0gICAgICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgICBJV29ya3NwYWNlUm9vdCBpV29ya3NwYWNlUm9vdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7Ci0gICAgICAgICAgICAgICAgSVByb2plY3RbXSBwcm9qZWN0cyA9IGlXb3Jrc3BhY2VSb290LmdldFByb2plY3RzKCk7Ci0gICAgICAgICAgICAgICAgJT4KLSAgICAgICAgICAgICAgICA8c2VsZWN0IGlkPSJzZWxlY3Rfd29ya2JlbmNoX3Byb2plY3RfbmFtZSIgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLldPUktCRU5DSF9QUk9KRUNUX05BTUUlPiIgY2xhc3M9InNlbGVjdGxpc3QiPgotICAgICAgICAgICAgICAgIDwlCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9qZWN0cy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm9qZWN0c1tpXS5pc09wZW4oKSkgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBwcm9qZWN0TmFtZSA9IHByb2plY3RzW2ldLmdldE5hbWUoKTsKLSAgICAgICAgICAgICAgICAlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjwlPXByb2plY3ROYW1lJT4iPjwlPXByb2plY3ROYW1lJT4KLSAgICAgICAgICAgICAgICA8JQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkge30KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgJT4KLSAgICAgICAgICAgICAgICA8L3NlbGVjdD4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgICA8dHI+Ci0gICAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0xMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgICA8bGFiZWwgZm9yPSJpbnB1dF9pbXBvcnRlZF9maWxlX25hbWUiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiSU1QT1JURURfV1NETF9GSUxFX05BTUUiKSU+PC9sYWJlbD4KLSAgICAgICAgICA8L3RkPgotICAgICAgICA8L3RyPgotICAgICAgICA8dHI+Ci0gICAgICAgICAgPHRkIGhlaWdodD0xMCB2YWxpZ249ImJvdHRvbSIgd2lkdGg9IjYwJSI+Ci08JQotICAgU3RyaW5nIHdzZGxGaWxlTmFtZT0idGVtcC53c2RsIjsKLSAgIFN0cmluZyB3c2RsVVJMID0gKFN0cmluZylmb3JtUHJvcGVydGllcy5nZXQoIndzZGxVUkwiKTsKLSAgIGlmICh3c2RsVVJMICE9IG51bGwgJiYgd3NkbFVSTC5lbmRzV2l0aCgiLndzZGwiKSkKLSAgIHsKLSAgICAgaW50IGxhc3RTZXBhcmF0b3JQb3MgPSBNYXRoLm1heCh3c2RsVVJMLmxhc3RJbmRleE9mKCIvIiksd3NkbFVSTC5sYXN0SW5kZXhPZigiXFwiKSk7Ci0gICAgIGlmIChsYXN0U2VwYXJhdG9yUG9zID4gMCkKLSAgICAgICB3c2RsRmlsZU5hbWUgPSB3c2RsVVJMLnN1YnN0cmluZyhsYXN0U2VwYXJhdG9yUG9zKzEsd3NkbFVSTC5sZW5ndGgoKSk7Ci0gICB9Ci0lPiAgIAotICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJpbnB1dF9pbXBvcnRlZF9maWxlX25hbWUiIG5hbWU9IjwlPUFjdGlvbklucHV0cy5JTVBPUlRFRF9GSUxFX05BTUUlPiIgdmFsdWU9IjwlPUhUTUxVdGlscy5jaGFyYWN0ZXJzVG9IVE1MRW50aXRpZXNTdHJpY3Qod3NkbEZpbGVOYW1lKSU+IiBzaXplPTUwIGNsYXNzPSJ0ZXh0ZW50ZXIiPgotICAgICAgICAgIDwvdGQ+Ci0gICAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvc2ltcGxlQ29tbW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4gICAgCi0gICAgPC9mb3JtPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zvcm1zL0ltcG9ydFdTRExBbmRXU0lMVG9Xb3JrYmVuY2hGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZm9ybXMvSW1wb3J0V1NETEFuZFdTSUxUb1dvcmtiZW5jaEZvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Mzg3ZTQyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZm9ybXMvSW1wb3J0V1NETEFuZFdTSUxUb1dvcmtiZW5jaEZvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTYwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDI3ICAgMTI3NDQzIGplc3BlckBzZWxza2FiZXQub3JnIC0gSmVzcGVyIFMgTW9sbGVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImZvcm1Qcm9wZXJ0aWVzIiBjbGFzcz0iamF2YS51dGlsLkhhc2h0YWJsZSIgc2NvcGU9InJlcXVlc3QiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBmdW5jdGlvbiB0b2dnbGVEaXZDb250YWluZXIoZGl2SWQpCi0gIHsKLSAgICB2YXIgZGl2Q29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZGl2SWQpOwotICAgIGlmIChkaXZDb250YWluZXIuc3R5bGUuZGlzcGxheSA9PSAibm9uZSIpCi0gICAgICBkaXZDb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICIiOwotICAgIGVsc2UKLSAgICAgIGRpdkNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotICB9Ci08L3NjcmlwdD4KLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9JTVBPUlRfVE9fV09SS0JFTkNIIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotICA8anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvZm9ybXN1Ym1pdC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gIDxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9mb3JtdXRpbHMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0KLSAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoKFN0cmluZylmb3JtUHJvcGVydGllcy5nZXQoImZvcm1BY3Rpb25MaW5rIikpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIj4KLQotICA8JQotICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAiaW1hZ2VzL2ltcG9ydF90b193b3JrYmVuY2hfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgU3RyaW5nIHRpdGxlID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfSU1QT1JUX1dTRExfVE9fV09SS0JFTkNIIik7Ci0gICU+Ci0gIDwlQCBpbmNsdWRlIGZpbGUgPSAiL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotICA8dGFibGU+Ci0gICAgPHRyPgotICAgICAgPHRkPgotICAgICAgICA8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfSU1QT1JUX1RPX1dPUktCRU5DSF9ERVNDIiklPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotICA8dGFibGU+Ci0gICAgPHRyPgotICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD00MCB2YWxpZ249ImNlbnRlciI+Ci0gICAgICAgIDxsYWJlbCBmb3I9InNlbGVjdF93b3JrYmVuY2hfcHJvamVjdF9uYW1lIj48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIldPUktCRU5DSF9QUk9KRUNUX05BTUUiKSU+PC9sYWJlbD4KLSAgICAgIDwvdGQ+Ci0gICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTQwIHZhbGlnbj0iY2VudGVyIiBub3dyYXA+Ci0gICAgICAgIDwlCi0gICAgICAgIElXb3Jrc3BhY2VSb290IGlXb3Jrc3BhY2VSb290ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLSAgICAgICAgSVByb2plY3RbXSBwcm9qZWN0cyA9IGlXb3Jrc3BhY2VSb290LmdldFByb2plY3RzKCk7Ci0gICAgICAgICU+Ci0gICAgICAgIDxzZWxlY3QgaWQ9InNlbGVjdF93b3JrYmVuY2hfcHJvamVjdF9uYW1lIiBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuV09SS0JFTkNIX1BST0pFQ1RfTkFNRSU+IiBjbGFzcz0ic2VsZWN0bGlzdCI+Ci0gICAgICAgIDwlCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJvamVjdHMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICB0cnkgewotICAgICAgICAgICAgaWYgKCFwcm9qZWN0c1tpXS5pc09wZW4oKSkKLSAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBTdHJpbmcgcHJvamVjdE5hbWUgPSBwcm9qZWN0c1tpXS5nZXROYW1lKCk7Ci0gICAgICAgICU+Ci0gICAgICAgIDxvcHRpb24gdmFsdWU9IjwlPXByb2plY3ROYW1lJT4iPjwlPXByb2plY3ROYW1lJT4KLSAgICAgICAgPCUKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQotICAgICAgICB9Ci0gICAgICAgICU+Ci0gICAgICAgIDwvc2VsZWN0PgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotCi0gIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgPHRyPgotICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0xMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgY2hlY2tlZCBpZD0iaW5wdXRfaW1wb3J0X3dzZGwiIG5hbWU9IjwlPUFjdGlvbklucHV0cy5JTVBPUlRfRklMRSU+IiB2YWx1ZT0iPCU9QWN0aW9uSW5wdXRzLklNUE9SVF9GSUxFJT4iIG9uQ2xpY2s9InRvZ2dsZURpdkNvbnRhaW5lcignZGl2X2ltcG9ydF93c2RsJykiPgotICAgICAgICA8bGFiZWwgZm9yPSJpbnB1dF9pbXBvcnRfd3NkbCI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJMQUJFTF9JTVBPUlRfV1NETCIpJT48L2xhYmVsPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotICA8ZGl2IGlkPSJkaXZfaW1wb3J0X3dzZGwiPgotICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZD4KLSAgICAgICAgICA8bGFiZWwgZm9yPSJpbnB1dF9pbXBvcnRlZF93c2RsX2ZpbGVfbmFtZSI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJJTVBPUlRFRF9XU0RMX0ZJTEVfTkFNRSIpJT48L2xhYmVsPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGhlaWdodD0xMCB2YWxpZ249ImJvdHRvbSIgd2lkdGg9IjYwJSI+Ci08JQotIFN0cmluZyB3c2RsRmlsZU5hbWU9InRlbXAud3NkbCI7Ci0gU3RyaW5nIHdzZGxVUkwgPSAoU3RyaW5nKWZvcm1Qcm9wZXJ0aWVzLmdldCgid3NkbFVSTCIpOwotIGlmICh3c2RsVVJMICE9IG51bGwgJiYgd3NkbFVSTC5lbmRzV2l0aCgiLndzZGwiKSkKLSB7Ci0gICBpbnQgbGFzdFNlcGFyYXRvclBvcyA9IE1hdGgubWF4KHdzZGxVUkwubGFzdEluZGV4T2YoIi8iKSx3c2RsVVJMLmxhc3RJbmRleE9mKCJcXCIpKTsKLSAgIGlmIChsYXN0U2VwYXJhdG9yUG9zID4gMCkKLSAgICAgd3NkbEZpbGVOYW1lID0gd3NkbFVSTC5zdWJzdHJpbmcobGFzdFNlcGFyYXRvclBvcysxLHdzZGxVUkwubGVuZ3RoKCkpOwotIH0KLSU+ICAgCi0gICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJpbnB1dF9pbXBvcnRlZF93c2RsX2ZpbGVfbmFtZSIgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLklNUE9SVEVEX0ZJTEVfTkFNRSU+IiB2YWx1ZT0iPCU9SFRNTFV0aWxzLmNoYXJhY3RlcnNUb0hUTUxFbnRpdGllc1N0cmljdCh3c2RsRmlsZU5hbWUpJT4iIHNpemU9NTAgY2xhc3M9InRleHRlbnRlciI+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gIDwvZGl2PgotCi0gIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgPHRyPgotICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0xMCB2YWxpZ249ImJvdHRvbSI+Jm5ic3A7PC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotCi0gIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPUFjdGlvbklucHV0cy5JTVBPUlRFRF9XU0RMX1VSTCU+IiB2YWx1ZT0iPCU9d3NkbFVSTCU+Ij4KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICA8dHI+Ci0gICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTEwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iaW5wdXRfaW1wb3J0X3dzaWwiIG5hbWU9IjwlPUFjdGlvbklucHV0cy5JTVBPUlRfVE9fV1NJTCU+IiB2YWx1ZT0iPCU9QWN0aW9uSW5wdXRzLklNUE9SVF9UT19XU0lMJT4iIG9uQ2xpY2s9InRvZ2dsZURpdkNvbnRhaW5lcignZGl2X2ltcG9ydF93c2lsJykiPgotICAgICAgICA8bGFiZWwgZm9yPSJpbnB1dF9pbXBvcnRfd3NpbCI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJMQUJFTF9JTVBPUlRfVE9fV1NJTCIpJT48L2xhYmVsPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotICA8ZGl2IGlkPSJkaXZfaW1wb3J0X3dzaWwiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTEwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICA8bGFiZWwgZm9yPSJpbnB1dF9pbXBvcnRlZF93c2lsX2ZpbGVfbmFtZSI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJXU0lMX0ZJTEVfTkFNRSIpJT48L2xhYmVsPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGhlaWdodD0xMCB2YWxpZ249ImJvdHRvbSIgd2lkdGg9IjYwJSI+Ci08JQotIFN0cmluZyB3c2lsRmlsZU5hbWUgPSAoU3RyaW5nKWZvcm1Qcm9wZXJ0aWVzLmdldCgid3NpbEZpbGVOYW1lIik7Ci0gaWYgKHdzaWxGaWxlTmFtZSA9PSBudWxsIHx8IHdzaWxGaWxlTmFtZS5sZW5ndGgoKSA8PSAwKQotICAgd3NpbEZpbGVOYW1lID0gd3NkbEZpbGVOYW1lLnN1YnN0cmluZygwLCB3c2RsRmlsZU5hbWUubGVuZ3RoKCktNCkgKyAid3NpbCI7Ci0lPiAgIAotICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iaW5wdXRfaW1wb3J0ZWRfd3NpbF9maWxlX25hbWUiIG5hbWU9IjwlPUFjdGlvbklucHV0cy5XU0lMX0ZJTEVfTkFNRSU+IiB2YWx1ZT0iPCU9SFRNTFV0aWxzLmNoYXJhY3RlcnNUb0hUTUxFbnRpdGllc1N0cmljdCh3c2lsRmlsZU5hbWUpJT4iIHNpemU9NTAgY2xhc3M9InRleHRlbnRlciI+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gIDwvZGl2PgotCi08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL3NpbXBsZUNvbW1vbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+ICAgIAotICA8L2Zvcm0+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZm9ybXMvTGF1bmNoV2ViU2VydmljZVdpemFyZEZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mb3Jtcy9MYXVuY2hXZWJTZXJ2aWNlV2l6YXJkRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwNDEzMTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mb3Jtcy9MYXVuY2hXZWJTZXJ2aWNlV2l6YXJkRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuSFRNTFV0aWxzIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUFjdGlvbkxpbmsiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX1RJVExFX0xBVU5DSF9XRUJTRVJWSUNFX1dJWkFSRCIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9mb3Jtc3VibWl0LmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9mb3JtdXRpbHMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGZvcm1BY3Rpb25MaW5rLnRvU3RyaW5nKCkpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIj4KLQotPCUKLSAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJpbWFnZXMvbGF1bmNoX3dzd2l6YXJkX2hpZ2hsaWdodGVkLmdpZiI7Ci0gICBTdHJpbmcgdGl0bGUgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9MQVVOQ0hfV0VCX1NFUlZJQ0VfV0laQVJEIik7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZSA9ICIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgPHRhYmxlPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICA8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQ0hPT1NFX1dJWkFSRCIpJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZD4KLSAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIGlkPSJyYWRpb193c19jbGllbnRfd2l6YXJkIiBjbGFzcz0icmFkaW8iIG5hbWU9IjwlPUFjdGlvbklucHV0cy5XRUJfU0VSVklDRV9XSVpBUkQlPiIgY2hlY2tlZD10cnVlIHZhbHVlPSI8JT1TdHJpbmcudmFsdWVPZihBY3Rpb25JbnB1dHMuV0VCX1NFUlZJQ0VfQ0xJRU5UX1dJWkFSRCklPiI+PGxhYmVsIGZvcj0icmFkaW9fd3NfY2xpZW50X3dpemFyZCI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX1JBRElPX1dFQl9TRVJWSUNFX0NMSUVOVF9XSVpBUkQiKSU+PC9sYWJlbD4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZD4KLSAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIGlkPSJyYWRpb193c19za2VsZXRvbl93aXphcmQiIGNsYXNzPSJyYWRpbyIgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLldFQl9TRVJWSUNFX1dJWkFSRCU+IiB2YWx1ZT0iPCU9U3RyaW5nLnZhbHVlT2YoQWN0aW9uSW5wdXRzLldFQl9TRVJWSUNFX1NLRUxFVE9OX1dJWkFSRCklPiI+PGxhYmVsIGZvcj0icmFkaW9fd3Nfc2tlbGV0b25fd2l6YXJkIj48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fUkFESU9fV0VCX1NFUlZJQ0VfU0tFTEVUT05fV0laQVJEIiklPjwvbGFiZWw+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL3NpbXBsZUNvbW1vbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+ICAgIAotICA8L2Zvcm0+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZm9ybXMvUHJveHlMb2FkQ29udGVudC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zvcm1zL1Byb3h5TG9hZENvbnRlbnQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MThlNTcwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZm9ybXMvUHJveHlMb2FkQ29udGVudC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPCUKLSAgIFN0cmluZyBzZXNzaW9uSWQgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuU0VTU0lPTklEKTsKLSAgIENvbnRyb2xsZXIgY29udHJvbGxlcjsKLSAgIFN0cmluZ0J1ZmZlciB0YXJnZXRDb250ZW50TGluayA9IG5ldyBTdHJpbmdCdWZmZXIocmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLlRBUkdFVF9QQUdFKSk7Ci0gICBpZiAoc2Vzc2lvbklkICE9IG51bGwpCi0gICB7Ci0gICAgIEh0dHBTZXNzaW9uIGN1cnJlbnRTZXNzaW9uID0gKEh0dHBTZXNzaW9uKWFwcGxpY2F0aW9uLmdldEF0dHJpYnV0ZShzZXNzaW9uSWQpOwotICAgICBjb250cm9sbGVyID0gKENvbnRyb2xsZXIpY3VycmVudFNlc3Npb24uZ2V0QXR0cmlidXRlKCJjb250cm9sbGVyIik7Ci0gICAgIGlmICh0YXJnZXRDb250ZW50TGluay50b1N0cmluZygpLmluZGV4T2YoIj8iKSAhPSAtMSkKLSAgICAgICB0YXJnZXRDb250ZW50TGluay5hcHBlbmQoJyYnKTsKLSAgICAgZWxzZQotICAgICAgIHRhcmdldENvbnRlbnRMaW5rLmFwcGVuZCgnPycpOwotICAgICB0YXJnZXRDb250ZW50TGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlNFU1NJT05JRCkuYXBwZW5kKCc9JykuYXBwZW5kKHNlc3Npb25JZCk7Ci0gICB9Ci0gICBlbHNlCi0gICAgIGNvbnRyb2xsZXIgPSAoQ29udHJvbGxlcilzZXNzaW9uLmdldEF0dHJpYnV0ZSgiY29udHJvbGxlciIpOwotICAgCi0lPgotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX1RJVExFX1BBR0VfTE9BREVSIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGZ1bmN0aW9uIGxvYWRDb250ZW50KCkKLSAgewotICAgIHZhciBmcmFtZXNldCA9IHBhcmVudC5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHJveHlQYWdlIik7Ci0gICAgdmFyIGNvbnRlbnRGcmFtZSA9IGZyYW1lc2V0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJmcmFtZSIpLml0ZW0oMSk7Ci0gICAgY29udGVudEZyYW1lLnNyYyA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQodGFyZ2V0Q29udGVudExpbmsudG9TdHJpbmcoKSkpJT4iOyAgCi0gIH0KLSAgCi0gIGZ1bmN0aW9uIGhhbmRsZUNvbXBsZXRpb24oKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRhYmxlIikuaXRlbSgwKTsKLSAgICB2YXIgdEJvZHkgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVEJPRFkiKS5pdGVtKDApOwotICAgIHZhciBkb25lUm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKLSAgICB2YXIgZG9uZUNvbHVtbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgZG9uZUNvbHVtbi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiUGFnZSBsb2FkZWQuIikpOwotICAgIGRvbmVSb3cuYXBwZW5kQ2hpbGQoZG9uZUNvbHVtbik7Ci0gICAgdEJvZHkuYXBwZW5kQ2hpbGQoZG9uZVJvdyk7ICAgCi0gIH0KLTwvc2NyaXB0PiAgCi08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci0gIDxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICAgIDx0YWJsZT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgIDwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiTVNHX0xPQURfSU5fUFJPR1JFU1MiKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gIDwvZGl2PgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGxvYWRDb250ZW50KCk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZm9ybXMvUHJveHlMb2FkUGFnZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zvcm1zL1Byb3h5TG9hZFBhZ2UuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjI0NjJlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZm9ybXMvUHJveHlMb2FkUGFnZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuVVJMVXRpbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLm5ldC4qIiAlPgotCi08JQotICAgU3RyaW5nIHNlc3Npb25JZCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpOwotICAgQ29udHJvbGxlciBjb250cm9sbGVyOwotICAgU3RyaW5nQnVmZmVyIGxvYWRDb250ZW50TGluayA9IG5ldyBTdHJpbmdCdWZmZXIoImZvcm1zL1Byb3h5TG9hZENvbnRlbnQuanNwPyIpOwotICAgaWYgKHNlc3Npb25JZCAhPSBudWxsKQotICAgewotICAgICBIdHRwU2Vzc2lvbiBjdXJyZW50U2Vzc2lvbiA9IChIdHRwU2Vzc2lvbilhcHBsaWNhdGlvbi5nZXRBdHRyaWJ1dGUoc2Vzc2lvbklkKTsKLSAgICAgY29udHJvbGxlciA9IChDb250cm9sbGVyKWN1cnJlbnRTZXNzaW9uLmdldEF0dHJpYnV0ZSgiY29udHJvbGxlciIpOwotICAgICBsb2FkQ29udGVudExpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpLmFwcGVuZCgnPScpLmFwcGVuZChzZXNzaW9uSWQpLmFwcGVuZCgnJicpOwotICAgfQotICAgZWxzZQotICAgICBjb250cm9sbGVyID0gKENvbnRyb2xsZXIpc2Vzc2lvbi5nZXRBdHRyaWJ1dGUoImNvbnRyb2xsZXIiKTsKLSAgIGxvYWRDb250ZW50TGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlRBUkdFVF9QQUdFKS5hcHBlbmQoJz0nKS5hcHBlbmQoVVJMVXRpbHMuZW5jb2RlKHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5UQVJHRVRfUEFHRSkpKTsKLSU+Ci08ZnJhbWVzZXQgaWQ9InByb3h5UGFnZSIgcm93cz0iMTAwJSwqIiBib3JkZXI9MD4KLSAgPGZyYW1lIHNyYz0iPCU9Y29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQobG9hZENvbnRlbnRMaW5rLnRvU3RyaW5nKCkpJT4iIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fVElUTEVfUEFHRV9MT0FERVIiKSU+IiBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTAgbm9yZXNpemU+Ci0gIDxmcmFtZSB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX1RJVExFX1BBR0VfQ09OVEVOVCIpJT4iIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTAgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MCBub3Jlc2l6ZT4KLTwvZnJhbWVzZXQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zvcm1zL2NvcHlyaWdodC5pbmMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zvcm1zL2NvcHlyaWdodC5pbmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3ZmRjZWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mb3Jtcy9jb3B5cmlnaHQuaW5jCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mb3Jtcy9mb3JtaGVhZGVyLmluYyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvZm9ybXMvZm9ybWhlYWRlci5pbmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkMWM5OGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mb3Jtcy9mb3JtaGVhZGVyLmluYworKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZD4KLSAgICAgIDxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQodGl0bGVJbWFnZVBhdGgpKSU+IiBhbHQ9IiI+Ci0gICAgICA8c3Ryb25nPjwlPXRpdGxlJT48L3N0cm9uZz4KLSAgICA8L3RkPgotICA8L3RyPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD0yMD4gPGltZyBoZWlnaHQ9MiB3aWR0aD0iMTAwJSIgYWxpZ249InRvcCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+Ij4gPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zvcm1zL290aGVyQWN0aW9ucy5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zvcm1zL290aGVyQWN0aW9ucy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0NGUzZmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mb3Jtcy9vdGhlckFjdGlvbnMuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci0KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImN1cnJlbnRUb29sTWFuYWdlckhhc2giIGNsYXNzPSJqYXZhLnV0aWwuSGFzaHRhYmxlIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFRvb2xNYW5hZ2VyIGN1cnJlbnRUb29sTWFuYWdlciA9IChUb29sTWFuYWdlciljdXJyZW50VG9vbE1hbmFnZXJIYXNoLmdldChBY3Rpb25JbnB1dHMuQ1VSUkVOVF9UT09MX01BTkFHRVIpOwotICAgaW50IG51bWJlck9mVG9vbHMgPSBjdXJyZW50VG9vbE1hbmFnZXIuZ2V0TnVtYmVyT2ZUb29scygpOwotICAgaWYgKG51bWJlck9mVG9vbHMgPiAxKQotICAgewotJT4KLTx0YWJsZT4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjA+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkPgotICAgICAgPHN0cm9uZz48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9PVEhFUl9BQ1RJT05TIiklPjwvc3Ryb25nPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTIwPiA8aW1nIGhlaWdodD0yIHdpZHRoPSIxMDAlIiBhbGlnbj0idG9wIiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2tleWxpbmUuZ2lmIikpJT4iPiA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTx0YWJsZT4KLTwlCi0gICAgIGZvciAoaW50IGk9MTtpPG51bWJlck9mVG9vbHM7aSsrKQotICAgICB7Ci0gICAgICAgVG9vbCB0ID0gY3VycmVudFRvb2xNYW5hZ2VyLmdldFRvb2woaSk7Ci0lPgotICA8dHI+Ci0gICAgPHRkPjxhIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCh0LmdldFNlbGVjdFRvb2xBY3Rpb25IcmVmKGZhbHNlKSkpJT4iIHRhcmdldD0iPCU9dC5nZXRTZWxlY3RUb29sQWN0aW9uVGFyZ2V0KCklPiI+PCU9dC5nZXRBbHRUZXh0KCklPjwvYT48L3RkPgotICA8L3RyPgotPCUKLSAgICAgfQotJT4KLTwvdGFibGU+Ci08JQotICAgfQotJT4gICAgICAgCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zvcm1zL3NpbXBsZUNvbW1vbl90YWJsZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2Zvcm1zL3NpbXBsZUNvbW1vbl90YWJsZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkZmU4YTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9mb3Jtcy9zaW1wbGVDb21tb25fdGFibGUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz0yIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTMwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9CVVRUT05fR08iKSU+IiBjbGFzcz0iYnV0dG9uIj4KLSAgICA8L3RkPgotICAgIDx0ZCBoZWlnaHQ9MzAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0JVVFRPTl9SRVNFVCIpJT4iIG9uQ2xpY2s9InJlc2V0Rm9ybUlucHV0cygpIiBjbGFzcz0iYnV0dG9uIj4KLSAgICA8L3RkPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2FjdGlvbnMuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvYWN0aW9ucy5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1YWVkN2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvYWN0aW9ucy5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9hZGRfdG9fd3NkbF9wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2FkZF90b193c2RsX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NWNlNTYxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2FkZF90b193c2RsX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvYWRkX3RvX3dzZGxfcGVyc3BlY3RpdmVfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvYWRkX3RvX3dzZGxfcGVyc3BlY3RpdmVfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZWFkNjY3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2FkZF90b193c2RsX3BlcnNwZWN0aXZlX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2JhY2tfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9iYWNrX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTQ2NjczLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2JhY2tfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9iYWNrX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2JhY2tfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZmI0MTUwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2JhY2tfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvY2FsZW5kYXIuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvY2FsZW5kYXIuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTI4MTdiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2NhbGVuZGFyLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2NsZWFyX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvY2xlYXJfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3OTg0ODMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvY2xlYXJfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9jbGVhcl9oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9jbGVhcl9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiYzEwZjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvY2xlYXJfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZGV0YWlsc19lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2RldGFpbHNfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzMzMyNzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZGV0YWlsc19lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2RldGFpbHNfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZGV0YWlsc19oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4YTJiYTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZGV0YWlsc19oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9kbGNsMTYvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2RsY2wxNi8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2RsY2wxNi8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2RsY2wxNi9hY3Rpb25lbmdpbmVfcGxheS5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9kbGNsMTYvYWN0aW9uZW5naW5lX3BsYXkuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjE3YzExLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2RsY2wxNi9hY3Rpb25lbmdpbmVfcGxheS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9kbGNsMTYvYWN0aW9uZW5naW5lX3JlY29yZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9kbGNsMTYvYWN0aW9uZW5naW5lX3JlY29yZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzMDA0ZjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZGxjbDE2L2FjdGlvbmVuZ2luZV9yZWNvcmQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZGxjbDE2L2FjdGlvbmVuZ2luZV9zYXZlLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2RsY2wxNi9hY3Rpb25lbmdpbmVfc2F2ZS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlMDA0OGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZGxjbDE2L2FjdGlvbmVuZ2luZV9zYXZlLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2RsY2wxNi9hY3Rpb25lbmdpbmVfc3RvcC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9kbGNsMTYvYWN0aW9uZW5naW5lX3N0b3AuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYWVlOWFhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2RsY2wxNi9hY3Rpb25lbmdpbmVfc3RvcC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9lbGNsMTYvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2VsY2wxNi8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2VsY2wxNi8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2VsY2wxNi9hY3Rpb25lbmdpbmVfcGxheS5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9lbGNsMTYvYWN0aW9uZW5naW5lX3BsYXkuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODhmYjcyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2VsY2wxNi9hY3Rpb25lbmdpbmVfcGxheS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9lbGNsMTYvYWN0aW9uZW5naW5lX3JlY29yZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9lbGNsMTYvYWN0aW9uZW5naW5lX3JlY29yZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2Y2NmZTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZWxjbDE2L2FjdGlvbmVuZ2luZV9yZWNvcmQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZWxjbDE2L2FjdGlvbmVuZ2luZV9zYXZlLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2VsY2wxNi9hY3Rpb25lbmdpbmVfc2F2ZS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2ZTdiOWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZWxjbDE2L2FjdGlvbmVuZ2luZV9zYXZlLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2VsY2wxNi9hY3Rpb25lbmdpbmVfc3RvcC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9lbGNsMTYvYWN0aW9uZW5naW5lX3N0b3AuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZGMzNjZkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2VsY2wxNi9hY3Rpb25lbmdpbmVfc3RvcC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9ldmlldzE2Ly5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9ldmlldzE2Ly5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZXZpZXcxNi8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2V2aWV3MTYvYWN0aW9uZW5naW5lLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2V2aWV3MTYvYWN0aW9uZW5naW5lLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmY2NGJjMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9ldmlldzE2L2FjdGlvbmVuZ2luZS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9mYXZvcml0ZXNfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9mYXZvcml0ZXNfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjYjAyNjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZmF2b3JpdGVzX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZmF2b3JpdGVzX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2Zhdm9yaXRlc19oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhNjIyMTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZmF2b3JpdGVzX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2Zhdm9yaXRlc19wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2Zhdm9yaXRlc19wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzkwMDRiZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9mYXZvcml0ZXNfcGVyc3BlY3RpdmVfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9mYXZvcml0ZXNfcGVyc3BlY3RpdmVfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZmF2b3JpdGVzX3BlcnNwZWN0aXZlX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTk2NWI4NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9mYXZvcml0ZXNfcGVyc3BlY3RpdmVfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZm9sZGVyX2Nsb3NlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9mb2xkZXJfY2xvc2VkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDJlMDI3Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9mb2xkZXJfY2xvc2VkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2ZvbGRlcl9vcGVuLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2ZvbGRlcl9vcGVuLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjEzMjJlMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9mb2xkZXJfb3Blbi5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9mb3J3YXJkX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZm9yd2FyZF9lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDIzMTQzMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9mb3J3YXJkX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvZm9yd2FyZF9oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9mb3J3YXJkX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJmOGMzZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9mb3J3YXJkX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2ltcG9ydF9mc19lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2ltcG9ydF9mc19lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTcwYzdhNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9pbXBvcnRfZnNfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9pbXBvcnRfZnNfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvaW1wb3J0X2ZzX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQ2ZDNlNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9pbXBvcnRfZnNfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvaW1wb3J0X3RvX3dvcmtiZW5jaF9lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2ltcG9ydF90b193b3JrYmVuY2hfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2NGEwN2QuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvaW1wb3J0X3RvX3dvcmtiZW5jaF9lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2ltcG9ydF90b193b3JrYmVuY2hfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvaW1wb3J0X3RvX3dvcmtiZW5jaF9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzODA4NWFkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2ltcG9ydF90b193b3JrYmVuY2hfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMva2V5bGluZS5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9rZXlsaW5lLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGU4MDY5ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9rZXlsaW5lLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2xhdW5jaF93c3dpemFyZF9lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2xhdW5jaF93c3dpemFyZF9lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI1OGRjNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9sYXVuY2hfd3N3aXphcmRfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9sYXVuY2hfd3N3aXphcmRfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvbGF1bmNoX3dzd2l6YXJkX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWYwOTdkNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9sYXVuY2hfd3N3aXphcmRfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvbGluZS5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9saW5lLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODgxZTViNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9saW5lLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2xpbmVfbGFzdC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9saW5lX2xhc3QuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjBlZjgzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL2xpbmVfbGFzdC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9saW5lX25vdGxhc3QuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvbGluZV9ub3RsYXN0LmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODI5MmNlMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9saW5lX25vdGxhc3QuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvbWludXNfbGFzdC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9taW51c19sYXN0LmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTllYmI3My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9taW51c19sYXN0LmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL21pbnVzX25vdGxhc3QuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvbWludXNfbm90bGFzdC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkNjQzMWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvbWludXNfbm90bGFzdC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9uYXZpZ2F0b3IuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvbmF2aWdhdG9yLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODhjMDU2Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9uYXZpZ2F0b3IuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvcGx1c19sYXN0LmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3BsdXNfbGFzdC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwMGM4OWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvcGx1c19sYXN0LmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3BsdXNfbm90bGFzdC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9wbHVzX25vdGxhc3QuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTdiZDE2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3BsdXNfbm90bGFzdC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9yZWZyZXNoX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvcmVmcmVzaF9lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWJkNWQxOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9yZWZyZXNoX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvcmVmcmVzaF9oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9yZWZyZXNoX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI5MDQyOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9yZWZyZXNoX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3Jvb3RfbWFpbi5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9yb290X21haW4uZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyN2FkZTAyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3Jvb3RfbWFpbi5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9zcGFjZS5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy9zcGFjZS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4MTE5MTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvc3BhY2UuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvc3RhdHVzLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3N0YXR1cy5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkYTAwMWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvc3RhdHVzLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3RvcF9lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3RvcF9lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2I1YmM5ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy90b3BfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy90b3BfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvdG9wX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDcxNjQ3NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy90b3BfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvdHdpc3RjbG9zZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvdHdpc3RjbG9zZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjQzMzFlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3R3aXN0Y2xvc2VkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3R3aXN0b3BlbmVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3R3aXN0b3BlbmVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGMyYzVmMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy90d2lzdG9wZW5lZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy91ZGRpX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvdWRkaV9wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWFjYWIzZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy91ZGRpX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvdWRkaV9wZXJzcGVjdGl2ZV9oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy91ZGRpX3BlcnNwZWN0aXZlX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2NmYzBhZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy91ZGRpX3BlcnNwZWN0aXZlX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3dzZGwuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvd3NkbC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmYjg0NGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvd3NkbC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy93c2RsX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvd3NkbF9wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTMyYWNmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy93c2RsX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9pbWFnZXMvd3NkbF9wZXJzcGVjdGl2ZV9oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy93c2RsX3BlcnNwZWN0aXZlX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWU4ZWZjOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy93c2RsX3BlcnNwZWN0aXZlX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3dzaWxfcGVyc3BlY3RpdmVfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy93c2lsX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YWY4OGZjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3dzaWxfcGVyc3BlY3RpdmVfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2ltYWdlcy93c2lsX3BlcnNwZWN0aXZlX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3dzaWxfcGVyc3BlY3RpdmVfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2IzNWE2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvaW1hZ2VzL3dzaWxfcGVyc3BlY3RpdmVfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9sYXVuY2hfb3B0aW9uc19yZWdpc3RyeS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2xhdW5jaF9vcHRpb25zX3JlZ2lzdHJ5LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTY0NTZiMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL2xhdW5jaF9vcHRpb25zX3JlZ2lzdHJ5LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTE1ICAgMTI4NjAyIGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5XU0V4cGxvcmVyQ29udGV4dCwKLSAgamF2YS51dGlsLkVudW1lcmF0aW9uLAotICBqYXZhLnV0aWwuSGFzaHRhYmxlLAotICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5VUkxVdGlscyIgJT4KLQotPCUKLSAgcmVxdWVzdC5zZXRDaGFyYWN0ZXJFbmNvZGluZygiVVRGLTgiKTsgCi0gIFN0cmluZyBrZXkgPSBudWxsOwotICBIYXNodGFibGUgb3B0aW9ucyA9IG5ldyBIYXNodGFibGUoKTsKLSAgRW51bWVyYXRpb24gcGFyYW1OYW1lcyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyTmFtZXMoKTsKLSAgd2hpbGUgKHBhcmFtTmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkpCi0gIHsKLSAgICBTdHJpbmcgcGFyYW1OYW1lID0gKFN0cmluZylwYXJhbU5hbWVzLm5leHRFbGVtZW50KCk7Ci0gICAgU3RyaW5nW10gcGFyYW1WYWx1ZXMgPSByZXF1ZXN0LmdldFBhcmFtZXRlclZhbHVlcyhwYXJhbU5hbWUpOwotICAgIGlmIChwYXJhbVZhbHVlcyAhPSBudWxsICYmIHBhcmFtVmFsdWVzLmxlbmd0aCA+IDApCi0gICAgewotICAgICAgaWYgKGtleSA9PSBudWxsICYmIFVSTFV0aWxzLmRlY29kZShwYXJhbU5hbWUpLmVxdWFscyhXU0V4cGxvcmVyQ29udGV4dC5JRCkpCi0gICAgICAgIGtleSA9IHBhcmFtVmFsdWVzWzBdOwotICAgICAgZWxzZQotICAgICAgICBvcHRpb25zLnB1dChwYXJhbU5hbWUsIHBhcmFtVmFsdWVzKTsKLSAgICB9Ci0gIH0KLSAgaWYgKGtleSAhPSBudWxsKQotICB7Ci0gICAgTGF1bmNoT3B0aW9uc01hbmFnZXIgbWFuYWdlciA9IExhdW5jaE9wdGlvbnNNYW5hZ2VyLmdldEluc3RhbmNlKCk7Ci0gICAgbWFuYWdlci5tYW5hZ2Uoa2V5LCBvcHRpb25zLCBhcHBsaWNhdGlvbik7Ci0gIH0KLSU+Ci08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08L2hlYWQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3BlcnNwZWN0aXZlX2NvbnRlbnQuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9wZXJzcGVjdGl2ZV9jb250ZW50LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDFmMDdlYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3BlcnNwZWN0aXZlX2NvbnRlbnQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1BFUlNQRUNUSVZFX0NPTlRFTlQiKSU+PC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHBlcnNwZWN0aXZlV29ya0FyZWEubG9jYXRpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChTaG93UGVyc3BlY3RpdmVBY3Rpb24uZ2V0QWN0aW9uTGluayhjb250cm9sbGVyLmdldEN1cnJlbnRQZXJzcGVjdGl2ZSgpLmdldFBlcnNwZWN0aXZlSWQoKSxmYWxzZSkpKSU+IjsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9wZXJzcGVjdGl2ZV90b29sYmFyLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvcGVyc3BlY3RpdmVfdG9vbGJhci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1ZGMwZDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9wZXJzcGVjdGl2ZV90b29sYmFyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZW5naW5lLkFjdGlvbkVuZ2luZSIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotU3RyaW5nQnVmZmVyIGhyZWZBY3Rpb25FbmdpbmUgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci1ocmVmQWN0aW9uRW5naW5lLmFwcGVuZChyZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImFjdGlvbmVuZ2luZV9jb250YWluZXIuanNwIikpKTsKLWhyZWZBY3Rpb25FbmdpbmUuYXBwZW5kKCI/Iik7Ci1ocmVmQWN0aW9uRW5naW5lLmFwcGVuZChBY3Rpb25JbnB1dHMuU0VTU0lPTklEKTsKLWhyZWZBY3Rpb25FbmdpbmUuYXBwZW5kKCI9Iik7Ci1ocmVmQWN0aW9uRW5naW5lLmFwcGVuZChzZXNzaW9uLmdldElkKCkpOwotJT4KLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfUEVSU1BFQ1RJVkVfVE9PTEJBUiIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy90b29sYmFyLmNzcyIpKSU+Ij4KLSAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvdG9vbGJhci5qcyIpKSU+Ij4KLSAgPC9zY3JpcHQ+Ci0gIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgIGZ1bmN0aW9uIG9wZW5BY3Rpb25FbmdpbmVDb250YWluZXIoKQotICAgIHsKLSAgICAgIHZhciBsaW5rID0gIjwlPWhyZWZBY3Rpb25FbmdpbmUudG9TdHJpbmcoKSU+IjsKLSAgICAgIHZhciBhY3Rpb25FbmdpbmVDb250YWluZXIgPSB3aW5kb3cub3BlbihsaW5rLCJhY3Rpb25FbmdpbmVDb250YWluZXIiLCJoZWlnaHQ9MTAwLHdpZHRoPTM1MCxzdGF0dXM9eWVzLHNjcm9sbGJhcnM9eWVzLHJlc2l6YWJsZT15ZXMiKTsKLSAgICAgIGlmIChhY3Rpb25FbmdpbmVDb250YWluZXIuZm9jdXMpCi0gICAgICAgIGFjdGlvbkVuZ2luZUNvbnRhaW5lci5mb2N1cygpOwotICAgIH0KLSAgPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJndG9vbGJhcmJvZHltYXJnaW4iPgotPGRpdiBpZD0iZ2xvYmFsdG9vbGJhciI+Ci08dGFibGUgd2lkdGg9IjEwMCUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBib3JkZXI9MD4KLSAgPHRyPgotICAgIDx0ZCBjbGFzcz0idGV4dCIgbm93cmFwIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0ibGVmdCIgd2lkdGg9IjEwMCUiIGhlaWdodD0yNT48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIlRJVExFX1dTRVhQTE9SRVIiKSU+PC90ZD4KLSAgICA8JQotICAgIFN0cmluZyBhbHRIaXN0b3J5QmFjayA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0JBQ0siKTsKLSAgICBTdHJpbmcgYWx0SGlzdG9yeUZvcndhcmQgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9GT1JXQVJEIik7Ci0gICAgU3RyaW5nIGFsdEFjdGlvbkVuZ2luZSA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0FDVElPTl9FTkdJTkUiKTsKLSAgICBTdHJpbmcgYWx0VURESSA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1VERElfUEVSU1BFQ1RJVkUiKTsKLSAgICBTdHJpbmcgYWx0V1NJTCA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1dTSUxfUEVSU1BFQ1RJVkUiKTsKLSAgICBTdHJpbmcgYWx0V1NETCA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1dTRExfUEVSU1BFQ1RJVkUiKTsKLSAgICBTdHJpbmcgYWx0RmF2b3JpdGVzID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfRkFWT1JJVEVTX1BFUlNQRUNUSVZFIik7Ci0gICAgJT4gICAKLSAgICA8dGQgY2xhc3M9InRleHQiIG5vd3JhcCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImNlbnRlciIgd2lkdGg9MTYgaGVpZ2h0PTI2PjxhIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChSZXRyaWV2ZUhpc3RvcnlBY3Rpb24uZ2V0QWN0aW9uTGluayhBY3Rpb25JbnB1dHMuSlVNUF9CQUNLKSkpJT4iIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+Ij48aW1nIGNsYXNzPSJub3JtYWwiIGFsdD0iPCU9YWx0SGlzdG9yeUJhY2slPiIgdGl0bGU9IjwlPWFsdEhpc3RvcnlCYWNrJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvYmFja19lbmFibGVkLmdpZiIpKSU+IiBvbk1vdXNlT3Zlcj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9iYWNrX2hpZ2hsaWdodGVkLmdpZiIpKSU+Jzttb3VzZW92ZXIodGhpcyk7IiBvbk1vdXNlT3V0PSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2JhY2tfZW5hYmxlZC5naWYiKSklPic7bW91c2VvdXQodGhpcykiIG9uTW91c2VEb3duPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2JhY2tfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlZG93bih0aGlzKSIgb25Nb3VzZVVwPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2JhY2tfZW5hYmxlZC5naWYiKSklPic7bW91c2V1cCh0aGlzKSI+PC9hPjwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJ0ZXh0IiBub3dyYXAgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJsZWZ0IiBoZWlnaHQ9MjU+PGEgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFJldHJpZXZlSGlzdG9yeUFjdGlvbi5nZXRBY3Rpb25MaW5rKEFjdGlvbklucHV0cy5KVU1QX0ZPUldBUkQpKSklPiIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iPjxpbWcgY2xhc3M9Im5vcm1hbCIgYWx0PSI8JT1hbHRIaXN0b3J5Rm9yd2FyZCU+IiB0aXRsZT0iPCU9YWx0SGlzdG9yeUZvcndhcmQlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9mb3J3YXJkX2VuYWJsZWQuZ2lmIikpJT4iIG9uTW91c2VPdmVyPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2ZvcndhcmRfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlb3Zlcih0aGlzKTsiIG9uTW91c2VPdXQ9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvZm9yd2FyZF9lbmFibGVkLmdpZiIpKSU+Jzttb3VzZW91dCh0aGlzKSIgb25Nb3VzZURvd249InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvZm9yd2FyZF9oaWdobGlnaHRlZC5naWYiKSklPic7bW91c2Vkb3duKHRoaXMpIiBvbk1vdXNlVXA9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvZm9yd2FyZF9lbmFibGVkLmdpZiIpKSU+Jzttb3VzZXVwKHRoaXMpIj48L2E+PC90ZD4KLSAgICA8JQotICAgIEFjdGlvbkVuZ2luZSBhY3Rpb25FbmdpbmUgPSBjb250cm9sbGVyLmdldEFjdGlvbkVuZ2luZSgpOwotICAgIGlmIChhY3Rpb25FbmdpbmUgIT0gbnVsbCAmJiBhY3Rpb25FbmdpbmUuZ2V0TW9kZSgpICE9IEFjdGlvbkVuZ2luZS5NT0RFX0RJU0FCTEVEKQotICAgIHsKLSAgICAlPgotICAgICAgPHRkIGNsYXNzPSJ0ZXh0IiBub3dyYXAgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJsZWZ0IiBoZWlnaHQ9MjU+PGEgaHJlZj0iamF2YXNjcmlwdDpvcGVuQWN0aW9uRW5naW5lQ29udGFpbmVyKCkiPjxpbWcgY2xhc3M9Im5vcm1hbCIgYWx0PSI8JT1hbHRBY3Rpb25FbmdpbmUlPiIgdGl0bGU9IjwlPWFsdEFjdGlvbkVuZ2luZSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2V2aWV3MTYvYWN0aW9uZW5naW5lLmdpZiIpKSU+IiBvbk1vdXNlT3Zlcj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9ldmlldzE2L2FjdGlvbmVuZ2luZS5naWYiKSklPic7bW91c2VvdmVyKHRoaXMpOyIgb25Nb3VzZU91dD0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9ldmlldzE2L2FjdGlvbmVuZ2luZS5naWYiKSklPic7bW91c2VvdXQodGhpcykiIG9uTW91c2VEb3duPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2V2aWV3MTYvYWN0aW9uZW5naW5lLmdpZiIpKSU+Jzttb3VzZWRvd24odGhpcykiIG9uTW91c2VVcD0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9ldmlldzE2L2FjdGlvbmVuZ2luZS5naWYiKSklPic7bW91c2V1cCh0aGlzKSI+PC9hPjwvdGQ+Ci0gICAgPCUKLSAgICB9Ci0gICAgJT4KLSAgICA8dGQgY2xhc3M9InRleHQiIG5vd3JhcCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImxlZnQiIGhlaWdodD0yNT48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoU2hvd1BlcnNwZWN0aXZlQWN0aW9uLmdldEFjdGlvbkxpbmsoQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1VEREksZmFsc2UpKSklPiIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iPjxpbWcgY2xhc3M9Im5vcm1hbCIgYWx0PSI8JT1hbHRVRERJJT4iIHRpdGxlPSI8JT1hbHRVRERJJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdWRkaV9wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZiIpKSU+IiBvbk1vdXNlT3Zlcj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy91ZGRpX3BlcnNwZWN0aXZlX2hpZ2hsaWdodGVkLmdpZiIpKSU+Jzttb3VzZW92ZXIodGhpcyk7IiBvbk1vdXNlT3V0PSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3VkZGlfcGVyc3BlY3RpdmVfZW5hYmxlZC5naWYiKSklPic7bW91c2VvdXQodGhpcykiIG9uTW91c2VEb3duPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3VkZGlfcGVyc3BlY3RpdmVfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlZG93bih0aGlzKSIgb25Nb3VzZVVwPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3VkZGlfcGVyc3BlY3RpdmVfZW5hYmxlZC5naWYiKSklPic7bW91c2V1cCh0aGlzKSI+PC9hPjwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJ0ZXh0IiBub3dyYXAgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJsZWZ0IiBoZWlnaHQ9MjU+PGEgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFNob3dQZXJzcGVjdGl2ZUFjdGlvbi5nZXRBY3Rpb25MaW5rKEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9XU0lMLGZhbHNlKSkpJT4iIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+Ij48aW1nIGNsYXNzPSJub3JtYWwiIGFsdD0iPCU9YWx0V1NJTCU+IiB0aXRsZT0iPCU9YWx0V1NJTCU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3dzaWxfcGVyc3BlY3RpdmVfZW5hYmxlZC5naWYiKSklPiIgb25Nb3VzZU92ZXI9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvd3NpbF9wZXJzcGVjdGl2ZV9oaWdobGlnaHRlZC5naWYiKSklPic7bW91c2VvdmVyKHRoaXMpOyIgb25Nb3VzZU91dD0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy93c2lsX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmIikpJT4nO21vdXNlb3V0KHRoaXMpIiBvbk1vdXNlRG93bj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy93c2lsX3BlcnNwZWN0aXZlX2hpZ2hsaWdodGVkLmdpZiIpKSU+Jzttb3VzZWRvd24odGhpcykiIG9uTW91c2VVcD0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy93c2lsX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmIikpJT4nO21vdXNldXAodGhpcykiPjwvYT48L3RkPgotICAgIDx0ZCBjbGFzcz0idGV4dCIgbm93cmFwIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0ibGVmdCIgaGVpZ2h0PTI1PjxhIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChTaG93UGVyc3BlY3RpdmVBY3Rpb24uZ2V0QWN0aW9uTGluayhBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfV1NETCxmYWxzZSkpKSU+IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI+PGltZyBjbGFzcz0ibm9ybWFsIiBhbHQ9IjwlPWFsdFdTREwlPiIgdGl0bGU9IjwlPWFsdFdTREwlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy93c2RsX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmIikpJT4iIG9uTW91c2VPdmVyPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3dzZGxfcGVyc3BlY3RpdmVfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlb3Zlcih0aGlzKTsiIG9uTW91c2VPdXQ9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvd3NkbF9wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZiIpKSU+Jzttb3VzZW91dCh0aGlzKSIgb25Nb3VzZURvd249InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvd3NkbF9wZXJzcGVjdGl2ZV9oaWdobGlnaHRlZC5naWYiKSklPic7bW91c2Vkb3duKHRoaXMpIiBvbk1vdXNlVXA9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvd3NkbF9wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZiIpKSU+Jzttb3VzZXVwKHRoaXMpIj48L2E+PC90ZD4gICAgCi0gICAgPHRkIGNsYXNzPSJ0ZXh0IiBub3dyYXAgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJsZWZ0IiBoZWlnaHQ9MjU+PGEgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFNob3dQZXJzcGVjdGl2ZUFjdGlvbi5nZXRBY3Rpb25MaW5rKEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9GQVZPUklURVMsZmFsc2UpKSklPiIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iPjxpbWcgY2xhc3M9Im5vcm1hbCIgYWx0PSI8JT1hbHRGYXZvcml0ZXMlPiIgdGl0bGU9IjwlPWFsdEZhdm9yaXRlcyU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2Zhdm9yaXRlc19wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZiIpKSU+IiBvbk1vdXNlT3Zlcj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9mYXZvcml0ZXNfcGVyc3BlY3RpdmVfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlb3Zlcih0aGlzKTsiIG9uTW91c2VPdXQ9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvZmF2b3JpdGVzX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmIikpJT4nO21vdXNlb3V0KHRoaXMpIiBvbk1vdXNlRG93bj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9mYXZvcml0ZXNfcGVyc3BlY3RpdmVfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlZG93bih0aGlzKSIgb25Nb3VzZVVwPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2Zhdm9yaXRlc19wZXJzcGVjdGl2ZV9lbmFibGVkLmdpZiIpKSU+Jzttb3VzZXVwKHRoaXMpIj48L2E+PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvc2NyaXB0cy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9zY3JpcHRzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9zY3JpcHRzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9zY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3NjcmlwdHMvYnJvd3NlcmRldGVjdC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmI4MTM1OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3NjcmlwdHMvYnJvd3NlcmRldGVjdC5qcworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0vLyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0vLyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLS8vIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0vLyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotLy8gCi0vLyBDb250cmlidXRvcnM6Ci0vLyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0vLwotCi1mdW5jdGlvbiBpc01pY3Jvc29mdEludGVybmV0RXhwbG9yZXIoKQotewotICByZXR1cm4gbmF2aWdhdG9yLmFwcE5hbWUgPT0gIk1pY3Jvc29mdCBJbnRlcm5ldCBFeHBsb3JlciI7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3NjcmlwdHMvY2FsZW5kYXJicm93c2VyLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvc2NyaXB0cy9jYWxlbmRhcmJyb3dzZXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OWI5Y2EyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvc2NyaXB0cy9jYWxlbmRhcmJyb3dzZXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgU3RyaW5nIHNlc3Npb25JZCA9IHNlc3Npb24uZ2V0SWQoKTsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgdmFyIGNhbGVuZGFyQnJvd3NlcjsKLSAgdmFyIGNhbGVuZGFyQnJvd3NlckNsb3NlZCA9IHRydWU7Ci0gIHZhciBjYWxlbmRhclRhcmdldFJvdyA9IC0xOwotICB2YXIgY2FsZW5kYXJUYXJnZXQ7Ci0KLSAgZnVuY3Rpb24gb3BlbkNhbGVuZGFyQnJvd3Nlcih0eXBlLGZvcm1Db250YWluZXJJZCxlbGVtZW50TmFtZSxpbmRleCkKLSAgewotICAgIHZhciBmb3JtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZm9ybUNvbnRhaW5lcklkKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZm9ybSIpLml0ZW0oMCk7Ci0gICAgdmFyIGVsZW1lbnRzID0gZm9ybS5lbGVtZW50c1tlbGVtZW50TmFtZV07Ci0gICAgaWYgKGluZGV4ID09IDAgJiYgZWxlbWVudHMubGVuZ3RoID09IHVuZGVmaW5lZCkKLTwlCi0gICAvLyBPbmx5IG9uZSBlbGVtZW50LgotJT4KLSAgICAgIGNhbGVuZGFyVGFyZ2V0ID0gZWxlbWVudHM7Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGNhbGVuZGFyVGFyZ2V0Um93ID0gaW5kZXg7Ci0gICAgICBjYWxlbmRhclRhcmdldCA9IGVsZW1lbnRzLml0ZW0oaW5kZXgpOwotICAgIH0KLSAgICB2YXIgbGluazsKLSAgICBzd2l0Y2ggKHR5cGUpCi0gICAgewotICAgICAgY2FzZSA8JT1BY3Rpb25JbnB1dHMuQ0FMRU5EQVJfVFlQRV9EQVRFJT46Ci0gICAgICAgIGxpbmsgPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KE9wZW5DYWxlbmRhckJyb3dzZXJBY3Rpb24uZ2V0QWN0aW9uTGlua0ZvckRhdGUoc2Vzc2lvbklkKSkpJT4iOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgPCU9QWN0aW9uSW5wdXRzLkNBTEVOREFSX1RZUEVfREFURVRJTUUlPjoKLSAgICAgICAgbGluayA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlbkNhbGVuZGFyQnJvd3NlckFjdGlvbi5nZXRBY3Rpb25MaW5rRm9yRGF0ZVRpbWUoc2Vzc2lvbklkKSkpJT4iOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgPCU9QWN0aW9uSW5wdXRzLkNBTEVOREFSX1RZUEVfR1lFQVJNT05USCU+OgotICAgICAgICBsaW5rID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChPcGVuQ2FsZW5kYXJCcm93c2VyQWN0aW9uLmdldEFjdGlvbkxpbmtGb3JHWWVhck1vbnRoKHNlc3Npb25JZCkpKSU+IjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIDwlPUFjdGlvbklucHV0cy5DQUxFTkRBUl9UWVBFX0dEQVklPjoKLSAgICAgICAgbGluayA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlbkNhbGVuZGFyQnJvd3NlckFjdGlvbi5nZXRBY3Rpb25MaW5rRm9yR0RheShzZXNzaW9uSWQpKSklPiI7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSA8JT1BY3Rpb25JbnB1dHMuQ0FMRU5EQVJfVFlQRV9HTU9OVEhEQVklPjoKLSAgICAgICAgbGluayA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlbkNhbGVuZGFyQnJvd3NlckFjdGlvbi5nZXRBY3Rpb25MaW5rRm9yR01vbnRoRGF5KHNlc3Npb25JZCkpKSU+IjsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhbGVuZGFyQnJvd3NlciA9IHdpbmRvdy5vcGVuKGxpbmssImNhbGVuZGFyQnJvd3NlciIsImhlaWdodD0zNTAsd2lkdGg9MjY0LHN0YXR1cz15ZXMsc2Nyb2xsYmFycz15ZXMscmVzaXphYmxlPXllcyIpOwotICAgIGlmIChjYWxlbmRhckJyb3dzZXIuZm9jdXMpCi0gICAgICBjYWxlbmRhckJyb3dzZXIuZm9jdXMoKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGNsb3NlQ2FsZW5kYXJCcm93c2VyKCkKLSAgewotICAgIGlmICghY2FsZW5kYXJCcm93c2VyQ2xvc2VkKQotICAgICAgY2FsZW5kYXJCcm93c2VyLmNsb3NlKCk7Ci0gIH0KLTwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9zY3JpcHRzL2Zvcm1zdWJtaXQuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9zY3JpcHRzL2Zvcm1zdWJtaXQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjNiNGYzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvc2NyaXB0cy9mb3Jtc3VibWl0LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICB2YXIgcmVxdWVzdFN1Ym1pdHRlZCA9IGZhbHNlOwotCi0gIGZ1bmN0aW9uIGhhbmRsZVN1Ym1pdChmb3JtKQotICB7Ci0gICAgaWYgKHJlcXVlc3RTdWJtaXR0ZWQpCi0gICAgewotICAgICAgYWxlcnQoIjwlPUhUTUxVdGlscy5KU01hbmdsZShjb250cm9sbGVyLmdldE1lc3NhZ2UoIk1TR19TVUJNSVRfSU5fUFJPR1JFU1MiKSklPiIpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXF1ZXN0U3VibWl0dGVkID0gdHJ1ZTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIGZ1bmN0aW9uIHJlc2V0U3VibWlzc2lvbigpCi0gIHsKLSAgICByZXF1ZXN0U3VibWl0dGVkID0gZmFsc2U7Ci0gIH0KLTwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9zY3JpcHRzL2Zvcm11dGlscy5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3NjcmlwdHMvZm9ybXV0aWxzLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRlYzgwNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3NjcmlwdHMvZm9ybXV0aWxzLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgJT4KLQotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIDwlLy8gUmVxdWlyZXMgYnJvd3NlcmRldGVjdC5qcyU+Ci0gIGZ1bmN0aW9uIGNyZWF0ZUhpZGRlbkVsZW1lbnQoZWxlbWVudE5hbWUsdmFsdWUpCi0gIHsKLSAgICB2YXIgaGlkZGVuSW5wdXQ7Ci0gICAgaWYgKGVsZW1lbnROYW1lLmxlbmd0aCA+IDApCi0gICAgewotICAgICAgaWYgKGlzTWljcm9zb2Z0SW50ZXJuZXRFeHBsb3JlcigpKQotICAgICAgICBoaWRkZW5JbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIjxpbnB1dCBuYW1lPSciK2VsZW1lbnROYW1lKyInPiIpOwotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBoaWRkZW5JbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Ci0gICAgICAgIGhpZGRlbklucHV0LnNldEF0dHJpYnV0ZSgibmFtZSIsZWxlbWVudE5hbWUpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgICBoaWRkZW5JbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Ci0gICAgaGlkZGVuSW5wdXQudHlwZSA9ICJoaWRkZW4iOwotICAgIGhpZGRlbklucHV0LnZhbHVlID0gdmFsdWU7Ci0gICAgcmV0dXJuIGhpZGRlbklucHV0OwotICB9Ci0KLSAgZnVuY3Rpb24gcmVzZXRGb3JtSW5wdXRzKCkKLSAgewotICAgIGRvY3VtZW50LmxvY2F0aW9uLnJlbG9hZCgpOwotICB9Ci08L3NjcmlwdD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvc2NyaXB0cy9wYW5lcy5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3NjcmlwdHMvcGFuZXMuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTY5YzJjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvc2NyaXB0cy9wYW5lcy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgdmFyIHBlcnNwZWN0aXZlV29ya0FyZWEgPSB0b3AuZnJhbWVzWyI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iXTsKLSAgdmFyIHBlcnNwZWN0aXZlVG9vbGJhciA9IHRvcC5mcmFtZXNbIjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfVE9PTEJBUiU+Il07Ci0gIHZhciBwZXJzcGVjdGl2ZUNvbnRlbnQgPSB0b3AuZnJhbWVzWyI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX0NPTlRFTlQlPiJdOwotCi0gIGZ1bmN0aW9uIGdldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0KCkKLSAgewotICAgIHJldHVybiBwZXJzcGVjdGl2ZUNvbnRlbnQuZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImZyYW1lc2V0IikuaXRlbSgwKTsKLSAgfQotCi0gIGZ1bmN0aW9uIHRvZ2dsZURvdWJsZUNsaWNrQ29sdW1uVGl0bGUoKQotICB7Ci0gICAgdmFyIGRvdWJsZUNsaWNrQ29sdW1uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRvdWJsZWNsaWNrY29sdW1uIik7Ci0gICAgaWYgKGRvdWJsZUNsaWNrQ29sdW1uID09IG51bGwpCi0gICAgICByZXR1cm47Ci08JQotICAgU3RyaW5nIGpzQWx0UmVzdG9yZSA9IEhUTUxVdGlscy5KU01hbmdsZShjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9ET1VCTEVfQ0xJQ0tfVE9fUkVTVE9SRSIpKTsKLSU+Ci0gICAgaWYgKGRvdWJsZUNsaWNrQ29sdW1uLnRpdGxlID09ICI8JT1qc0FsdFJlc3RvcmUlPiIpCi0gICAgICBkb3VibGVDbGlja0NvbHVtbi50aXRsZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfRE9VQkxFX0NMSUNLX1RPX01BWElNSVpFIikpJT4iOwotICAgIGVsc2UKLSAgICAgIGRvdWJsZUNsaWNrQ29sdW1uLnRpdGxlID0gIjwlPWpzQWx0UmVzdG9yZSU+IjsKLSAgfQotPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3NjcmlwdHMvcmVzdW1lcHJveHlsb2FkcGFnZS5qcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvc2NyaXB0cy9yZXN1bWVwcm94eWxvYWRwYWdlLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNWUxNTQ5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvc2NyaXB0cy9yZXN1bWVwcm94eWxvYWRwYWdlLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLS8vIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLS8vIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotLy8gd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLS8vIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0vLyAKLS8vIENvbnRyaWJ1dG9yczoKLS8vICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLS8vCi0KLWZ1bmN0aW9uIHJlc3VtZVByb3h5TG9hZFBhZ2UoKQotewotICB2YXIgcHJveHlQYWdlID0gcGFyZW50LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwcm94eVBhZ2UiKTsKLSAgcHJveHlQYWdlLnNldEF0dHJpYnV0ZSgicm93cyIsICIwLDEwMCUiKTsKLSAgcGFyZW50LmZyYW1lc1swXS5oYW5kbGVDb21wbGV0aW9uKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3NjcmlwdHMvc3dpdGNocGVyc3BlY3RpdmUuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9zY3JpcHRzL3N3aXRjaHBlcnNwZWN0aXZlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmEwZmMzOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3NjcmlwdHMvc3dpdGNocGVyc3BlY3RpdmUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci0KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotCi08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBwZXJzcGVjdGl2ZUNvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGNvbnRyb2xsZXIuZ2V0Q3VycmVudFBlcnNwZWN0aXZlKCkuZ2V0UGVyc3BlY3RpdmVDb250ZW50UGFnZSgpKSklPiI7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvc2NyaXB0cy90YWJsZXMuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9zY3JpcHRzL3RhYmxlcy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5YTI0ZWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9zY3JpcHRzL3RhYmxlcy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNTkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHZhciBudW1iZXJPZkhlYWRlclJvd3MgPSAxOwotICBmdW5jdGlvbiBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKQotICB7Ci0gICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHJldHVybiBjb250YWluZXIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRhYmxlIikuaXRlbSgwKTsKLSAgfQotCi0gIGZ1bmN0aW9uIHNldFNlbGVjdChzZWxlY3QsdmFsdWUpCi0gIHsKLSAgICBmb3IgKHZhciBpPTA7aTxzZWxlY3Qub3B0aW9ucy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIGlmIChzZWxlY3Qub3B0aW9uc1tpXS52YWx1ZSA9PSB2YWx1ZSkKLSAgICAgIHsKLSAgICAgICAgc2VsZWN0LnNlbGVjdGVkSW5kZXggPSBpOwotICAgICAgICByZXR1cm4gc2VsZWN0Lm9wdGlvbnNbaV0udGV4dDsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiByZW1vdmVTZWxlY3RlZFJvd3ModGFibGVDb250YWluZXJJZCkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIGZvciAodmFyIGk9bnVtYmVyT2ZIZWFkZXJSb3dzO2k8dGFibGUucm93cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIHZhciByb3dDaGVja2JveCA9IHRhYmxlLnJvd3NbaV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IikuaXRlbSgwKTsKLSAgICAgIGlmIChyb3dDaGVja2JveC5jaGVja2VkKQotICAgICAgewotICAgICAgICB0YWJsZS5kZWxldGVSb3coaSk7Ci0gICAgICAgIGktLTsKLSAgICAgIH0KLSAgICB9Ci0gICAgdmFyIGNoZWNrQWxsQ2hlY2tib3hSb3cgPSB0YWJsZS5yb3dzWzBdOwotICAgIHZhciBjaGVja0FsbENoZWNrYm94ID0gY2hlY2tBbGxDaGVja2JveFJvdy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKS5pdGVtKDApOwotICAgIGlmIChjaGVja0FsbENoZWNrYm94LmNoZWNrZWQpCi0gICAgICBjaGVja0FsbENoZWNrYm94LmNoZWNrZWQgPSBmYWxzZTsKLSAgfQotCi0gIGZ1bmN0aW9uIGhhbmRsZVJvd0NoZWNrYm94Q2xpY2soZSkKLSAgewotICAgIHZhciBjaGVja2JveDsKLSAgICBpZiAoaXNNaWNyb3NvZnRJbnRlcm5ldEV4cGxvcmVyKCkpCi0gICAgICBjaGVja2JveCA9IGV2ZW50LnNyY0VsZW1lbnQ7Ci0gICAgZWxzZQotICAgICAgY2hlY2tib3ggPSBlLnRhcmdldDsKLSAgICB2YXIgY2VsbCA9IGNoZWNrYm94LnBhcmVudE5vZGU7Ci0gICAgdmFyIHJvdyA9IGNlbGwucGFyZW50Tm9kZTsKLSAgICBpZiAoY2hlY2tib3guY2hlY2tlZCkKLSAgICAgIGhpZ2hsaWdodFJvdyhyb3csInJvd2NvbG9yIik7Ci0gICAgZWxzZQotICAgICAgaGlnaGxpZ2h0Um93KHJvdywidGFibGVjZWxscyIpOwotCi0gICAgdmFyIHRib2R5ID0gcm93LnBhcmVudE5vZGU7Ci0gICAgdmFyIHRhYmxlID0gdGJvZHkucGFyZW50Tm9kZTsKLSAgICB2YXIgY2hlY2tBbGxDaGVja2JveCA9IHRhYmxlLnJvd3NbMF0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IikuaXRlbSgwKTsKLSAgICBpZiAoY2hlY2tBbGxDaGVja2JveC5jaGVja2VkKQotICAgICAgY2hlY2tBbGxDaGVja2JveC5jaGVja2VkID0gZmFsc2U7Ci0gIH0KLQotICBmdW5jdGlvbiBjcmVhdGVSb3dDaGVja2JveCgpCi0gIHsKLSAgICB2YXIgcm93Q2hlY2tib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotICAgIHJvd0NoZWNrYm94LnNldEF0dHJpYnV0ZSgibmFtZSIscm93Q2hlY2tib3hOYW1lKTsKLSAgICByb3dDaGVja2JveC50eXBlID0gImNoZWNrYm94IjsKLSAgICByb3dDaGVja2JveC50aXRsZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX1JPV19DSEVDS19CT1giKSklPiI7Ci0gICAgcm93Q2hlY2tib3gub25jbGljayA9IGhhbmRsZVJvd0NoZWNrYm94Q2xpY2s7Ci0gICAgcmV0dXJuIHJvd0NoZWNrYm94OwotICB9Ci0KLSAgZnVuY3Rpb24gaGFuZGxlQ2hlY2tBbGxDbGljayh0YWJsZUNvbnRhaW5lcklkLGNoZWNrQWxsQ2hlY2tib3gpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICBmb3IgKHZhciBpPW51bWJlck9mSGVhZGVyUm93cztpPHRhYmxlLnJvd3MubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICB2YXIgcm93Q2hlY2tib3hDZWxsID0gdGFibGUucm93c1tpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKS5pdGVtKDApOwotICAgICAgdmFyIHJvd0NoZWNrYm94ID0gcm93Q2hlY2tib3hDZWxsLmNoaWxkTm9kZXNbMF07Ci0gICAgICByb3dDaGVja2JveC5jaGVja2VkID0gY2hlY2tBbGxDaGVja2JveC5jaGVja2VkOwotICAgICAgaWYgKHJvd0NoZWNrYm94LmNoZWNrZWQpCi0gICAgICAgIGhpZ2hsaWdodFJvdyh0YWJsZS5yb3dzW2ldLCJyb3djb2xvciIpOwotICAgICAgZWxzZQotICAgICAgICBoaWdobGlnaHRSb3codGFibGUucm93c1tpXSwidGFibGVjZWxscyIpOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIGhpZ2hsaWdodFJvdyhyb3csY2xhc3NOYW1lKQotICB7Ci0gICAgdmFyIHJvd0NvbHVtbnMgPSByb3cuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgZm9yICh2YXIgaT0xO2k8cm93Q29sdW1ucy5sZW5ndGg7aSsrKQotICAgICAgcm93Q29sdW1ucy5pdGVtKGkpLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsKLSAgfQotCi0gIGZ1bmN0aW9uIGhpZ2hsaWdodEVycmFudFJvdyhyb3csY2xhc3NOYW1lKQotICB7Ci0gICAgdmFyIHJvd0NvbHVtbnMgPSByb3cuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgdmFyIGNvbHVtbjAgPSByb3dDb2x1bW5zLml0ZW0oMCk7Ci0gICAgdmFyIGNvbHVtbjBDb250cm9sID0gY29sdW1uMC5jaGlsZE5vZGVzWzBdOwotICAgIHZhciBzdGFydDsKLSAgICBpZiAoY29sdW1uMENvbnRyb2wudHlwZSA9PSAiY2hlY2tib3giKQotICAgIHsKLSAgICAgIGNvbHVtbjBDb250cm9sLmNoZWNrZWQgPSB0cnVlOwotICAgICAgcm93Q29sdW1ucy5pdGVtKDEpLmNsYXNzTmFtZSA9ICJmaXJzdGNvbHVtbmVycmFudHJvd2NvbG9yIjsKLSAgICAgIHN0YXJ0ID0gMjsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGNvbHVtbjAuY2xhc3NOYW1lID0gImZpcnN0Y29sdW1uZXJyYW50cm93Y29sb3IiOwotICAgICAgc3RhcnQgPSAxOwotICAgIH0KLSAgICByb3dDb2x1bW5zLml0ZW0ocm93Q29sdW1ucy5sZW5ndGgtMSkuY2xhc3NOYW1lID0gImxhc3Rjb2x1bW5lcnJhbnRyb3djb2xvciI7Ci0gICAgZm9yICh2YXIgaT1zdGFydDtpPHJvd0NvbHVtbnMubGVuZ3RoLTE7aSsrKQotICAgICAgcm93Q29sdW1ucy5pdGVtKGkpLmNsYXNzTmFtZSA9ICJtaWRkbGVlcnJhbnRyb3djb2xvciI7Ci0gIH0KLQotICBmdW5jdGlvbiB0d2lzdCh0YWJsZUNvbnRhaW5lcklkLHR3aXN0SW1hZ2VOYW1lKQotICB7Ci0gICAgdmFyIHRhYmxlQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHR3aXN0SW1hZ2UgPSBkb2N1bWVudC5pbWFnZXNbdHdpc3RJbWFnZU5hbWVdOwotICAgIGlmICh0YWJsZUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID09ICJub25lIikKLSAgICB7Ci0gICAgICB0YWJsZUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gICAgICB0d2lzdEltYWdlLnNyYyA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdG9wZW5lZC5naWYiKSklPiI7Ci0gICAgICB0d2lzdEltYWdlLmFsdCA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfT1BFTkVEIikpJT4iOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgdGFibGVDb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKLSAgICAgIHR3aXN0SW1hZ2Uuc3JjID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0Y2xvc2VkLmdpZiIpKSU+IjsKLSAgICAgIHR3aXN0SW1hZ2UuYWx0ID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZShjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9DTE9TRUQiKSklPiI7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gdHdpc3RPcGVuKHRhYmxlQ29udGFpbmVySWQpCi0gIHsKLSAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFibGVDb250YWluZXJJZCkuc3R5bGUuZGlzcGxheSA9PSAibm9uZSIpCi0gICAgICB0d2lzdCh0YWJsZUNvbnRhaW5lcklkLCJ4Iit0YWJsZUNvbnRhaW5lcklkKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGdldERlZmF1bHREaXNwbGF5U3RyaW5nKGlucHV0VmFsdWUpCi0gIHsKLSAgICBpZiAoaW5wdXRWYWx1ZSA9PSBudWxsIHx8IGlucHV0VmFsdWUubGVuZ3RoIDwgMSkKLSAgICAgIHJldHVybiAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiVEFCTEVfQkxBTktfUExBQ0VIT0xERVIiKSklPiI7Ci0gICAgcmV0dXJuIGlucHV0VmFsdWU7Ci0gIH0KLTwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9zY3JpcHRzL3Rvb2xiYXIuanMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3NjcmlwdHMvdG9vbGJhci5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmFiMWIyZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3NjcmlwdHMvdG9vbGJhci5qcworKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0vLyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0vLyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLS8vIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0vLyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotLy8gCi0vLyBDb250cmlidXRvcnM6Ci0vLyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0vLwotCi1mdW5jdGlvbiBtb3VzZW92ZXIoaW1nKQotewotICBpbWcuY2xhc3NOYW1lID0gImhvdmVyIjsKLX0KLQotZnVuY3Rpb24gbW91c2VvdXQoaW1nKQotewotICBpbWcuY2xhc3NOYW1lID0gIm5vcm1hbCI7Ci19Ci0KLWZ1bmN0aW9uIG1vdXNlZG93bihpbWcpCi17Ci0gIGltZy5jbGFzc05hbWUgPSAiZG93biI7Ci19Ci0KLWZ1bmN0aW9uIG1vdXNldXAoaW1nKQotewotICByZXR1cm4gbW91c2VvdXQoaW1nKTsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3NjcmlwdHMvdHJlZXZpZXcuanMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3NjcmlwdHMvdHJlZXZpZXcuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlODQzZmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9zY3JpcHRzL3RyZWV2aWV3LmpzCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLS8vIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLS8vIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotLy8gd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLS8vIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0vLyAKLS8vIENvbnRyaWJ1dG9yczoKLS8vICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLS8vCi0KLS8vIFJlcXVpcmVzIGJyb3dzZXJkZXRlY3QuanMKLQotdmFyIHNlbGVjdGVkQW5jaG9yTmFtZSA9ICIiOwotCi1mdW5jdGlvbiBzZXRTZWxlY3RlZEFuY2hvck5hbWUoYW5jaG9yTmFtZSkKLXsKLSAgc2VsZWN0ZWRBbmNob3JOYW1lID0gYW5jaG9yTmFtZTsKLX0KLQotZnVuY3Rpb24gc2VsZWN0Tm9kZShhbmNob3JOYW1lLG9wZW5JbWFnZVBhdGgpCi17Ci0gIHZhciBpc0lFID0gaXNNaWNyb3NvZnRJbnRlcm5ldEV4cGxvcmVyKCk7Ci0gIGlmIChzZWxlY3RlZEFuY2hvck5hbWUubGVuZ3RoID4gMCkKLSAgewotICAgIHZhciBzZWxlY3RlZEFuY2hvcjsKLSAgICBpZiAoaXNJRSkKLSAgICAgIHNlbGVjdGVkQW5jaG9yID0gZG9jdW1lbnQuYW5jaG9ycyhzZWxlY3RlZEFuY2hvck5hbWUpOwotICAgIGVsc2UKLSAgICAgIHNlbGVjdGVkQW5jaG9yID0gZG9jdW1lbnQuYW5jaG9yc1tzZWxlY3RlZEFuY2hvck5hbWVdOwotICAgIGlmIChzZWxlY3RlZEFuY2hvcikKLSAgICAgIHNlbGVjdGVkQW5jaG9yLmNsYXNzTmFtZSA9ICJ1bnNlbGVjdGVkVGV4dEFuY2hvciI7Ci0gIH0KLSAgaWYgKGFuY2hvck5hbWUuaW5kZXhPZigiLTEiKSA9PSAtMSkKLSAgewotICAgIGlmIChpc0lFKQotICAgICAgZG9jdW1lbnQuYW5jaG9ycyhhbmNob3JOYW1lKS5jbGFzc05hbWUgPSAic2VsZWN0ZWRUZXh0QW5jaG9yIjsKLSAgICBlbHNlCi0gICAgICBkb2N1bWVudC5hbmNob3JzW2FuY2hvck5hbWVdLmNsYXNzTmFtZSA9ICJzZWxlY3RlZFRleHRBbmNob3IiOwotICAgIHNldFNlbGVjdGVkQW5jaG9yTmFtZShhbmNob3JOYW1lKTsKLSAgICBhbHRlckltYWdlKGFuY2hvck5hbWUsb3BlbkltYWdlUGF0aCk7Ci0gIH0KLSAgZWxzZQotICAgIHNldFNlbGVjdGVkQW5jaG9yTmFtZSgiIik7Ci19Ci0KLWZ1bmN0aW9uIGFsdGVySW1hZ2UoaW1hZ2VOYW1lLGltYWdlUGF0aCkKLXsKLSAgZG9jdW1lbnQuaW1hZ2VzW2ltYWdlTmFtZV0uc3JjID0gaW1hZ2VQYXRoOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9zY3JpcHRzL3dzZGxicm93c2VyLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvc2NyaXB0cy93c2RsYnJvd3Nlci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlNDVhN2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci9zY3JpcHRzL3dzZGxicm93c2VyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFN0cmluZyBzZXNzaW9uSWQgPSBzZXNzaW9uLmdldElkKCk7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHZhciB3c2RsV2luZG93OwotICB2YXIgd3NkbFdpbmRvd0Nsb3NlZCA9IHRydWU7Ci0gIHZhciB0YXJnZXRXU0RMVVJMRWxlbWVudDsKLSAgZnVuY3Rpb24gb3BlbldTRExCcm93c2VyKGZvcm1Db250YWluZXJJZCx0eXBlKQotICB7Ci0gICAgdmFyIGZvcm0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmb3JtQ29udGFpbmVySWQpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJmb3JtIikuaXRlbSgwKTsKLSAgICB0YXJnZXRXU0RMVVJMRWxlbWVudCA9IGZvcm0uPCU9QWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dTRExfVVJMJT47Ci0gICAgdmFyIGxpbms7Ci0gICAgc3dpdGNoICh0eXBlKQotICAgIHsKLSAgICAgIGNhc2UgPCU9QWN0aW9uSW5wdXRzLldTRExfVFlQRV9TRVJWSUNFJT46Ci0gICAgICAgIGxpbmsgPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KE9wZW5XU0RMQnJvd3NlckFjdGlvbi5nZXRBY3Rpb25MaW5rRm9yU2VydmljZShzZXNzaW9uSWQpKSklPiI7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSA8JT1BY3Rpb25JbnB1dHMuV1NETF9UWVBFX1NFUlZJQ0VfSU5URVJGQUNFJT46Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBsaW5rID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChPcGVuV1NETEJyb3dzZXJBY3Rpb24uZ2V0QWN0aW9uTGlua0ZvclNlcnZpY2VJbnRlcmZhY2Uoc2Vzc2lvbklkKSkpJT4iOwotICAgIH0KLSAgICB3c2RsV2luZG93ID0gd2luZG93Lm9wZW4obGluaywid3NkbFdpbmRvdyIsImhlaWdodD0zMDAsd2lkdGg9NDUwLHN0YXR1cz15ZXMsc2Nyb2xsYmFycz15ZXMscmVzaXphYmxlPXllcyIpOwotICAgIGlmICh3c2RsV2luZG93LmZvY3VzKQotICAgICAgd3NkbFdpbmRvdy5mb2N1cygpOwotICB9Ci0KLSAgZnVuY3Rpb24gY2xvc2VXU0RMQnJvd3NlcigpCi0gIHsKLSAgICBpZiAoIXdzZGxXaW5kb3dDbG9zZWQpCi0gICAgICB3c2RsV2luZG93LmNsb3NlKCk7Ci0gIH0KLTwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL0FkZEl0ZW1zVG9GYXZvcml0ZXNBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvQWRkSXRlbXNUb0Zhdm9yaXRlc0FjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2Nzk3OTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvQWRkSXRlbXNUb0Zhdm9yaXRlc0FjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBBZGRJdGVtc1RvRmF2b3JpdGVzQWN0aW9uIGFjdGlvbiA9IG5ldyBBZGRJdGVtc1RvRmF2b3JpdGVzQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgIC8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotJT4KLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgcHJvcGVydGllc0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3Byb3BlcnRpZXNfY29udGVudC5qc3AiKSklPiI7Ci0gIHN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvQWRkUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9BZGRQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RhYzMzOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9BZGRQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBBZGRQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uIGFjdGlvbiA9IG5ldyBBZGRQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gICBpZiAoaW5wdXRzVmFsaWQpCi0gICB7Ci0gICAgIC8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotICAgICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0gICB9Ci0lPgotCi0gICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgcHJvcGVydGllc0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3Byb3BlcnRpZXNfY29udGVudC5qc3AiKSklPiI7Ci0gICAgIHN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgIDwvc2NyaXB0PgotCi08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9BZGRUb0Zhdm9yaXRlc0FjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9BZGRUb0Zhdm9yaXRlc0FjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlMGQxYTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvQWRkVG9GYXZvcml0ZXNBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuQWRkVG9GYXZvcml0ZXNBY3Rpb24iJT4KLQotCi08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgQWRkVG9GYXZvcml0ZXNBY3Rpb24gYWN0aW9uID0gbmV3IEFkZFRvRmF2b3JpdGVzQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgIC8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotJT4KLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgcHJvcGVydGllc0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3Byb3BlcnRpZXNfY29udGVudC5qc3AiKSklPiI7Ci0gIHN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvQnVzUHVibGlzaFNlcnZpY2VBZHZhbmNlZEFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9CdXNQdWJsaXNoU2VydmljZUFkdmFuY2VkQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTU3NTIyMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9CdXNQdWJsaXNoU2VydmljZUFkdmFuY2VkQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbgotICAgQnVzUHVibGlzaFNlcnZpY2VBZHZhbmNlZEFjdGlvbiBhY3Rpb24gPSBuZXcgQnVzUHVibGlzaFNlcnZpY2VBZHZhbmNlZEFjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotICAgaWYgKCFhY3Rpb24uaXNTdWJRdWVyeUluaXRpYXRlZCgpKQotICAgewotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTmV3Tm9kZUFjdGlvbi5pbmMiICU+Ci08JQotICAgfQotICAgZWxzZQotICAgewotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTGF1bmNoU3ViUXVlcnlBY3Rpb24uaW5jIiAlPgotPCUKLSAgIH0KLSU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9CdXNQdWJsaXNoU2VydmljZVNpbXBsZUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9CdXNQdWJsaXNoU2VydmljZVNpbXBsZUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwNzAwMjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvQnVzUHVibGlzaFNlcnZpY2VTaW1wbGVBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgQnVzUHVibGlzaFNlcnZpY2VTaW1wbGVBY3Rpb24gYWN0aW9uID0gbmV3IEJ1c1B1Ymxpc2hTZXJ2aWNlU2ltcGxlQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTmV3Tm9kZUFjdGlvbi5pbmMiICU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9CdXNpbmVzc0dldFNlcnZpY2VzQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL0J1c2luZXNzR2V0U2VydmljZXNBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZWU1ZDI0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL0J1c2luZXNzR2V0U2VydmljZXNBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIEJ1c2luZXNzR2V0U2VydmljZXNBY3Rpb24gYWN0aW9uID0gbmV3IEJ1c2luZXNzR2V0U2VydmljZXNBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgIGJvb2xlYW4gYnVzaW5lc3NFeGlzdHMgPSBhY3Rpb24udmFsaWRhdGVCdXNpbmVzcygpOwotCi0gICBpZiAoIWJ1c2luZXNzRXhpc3RzKQotICAgewotICAgICBpbnQgbm9kZUlkID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKShhY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSkpOwotICAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgaWYgKGNvbmZpcm0oIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX1FVRVNUSU9OX1JFTU9WRV9CVVNJTkVTU19OT0RFIikpJT4iKSkKLSAgICBwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChDbGVhck5hdmlnYXRvck5vZGVBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWQpKSklPiI7Ci08L3NjcmlwdD4KLTwlCi0gICB9Ci0gICBlbHNlCi0gICB7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9OZXdOb2RlQWN0aW9uLmluYyIgJT4KLTwlCi0gICB9Ci0lPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvQ2hlY2tGYXZvcml0ZUV4aXN0c0FjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9DaGVja0Zhdm9yaXRlRXhpc3RzQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGYwMzNlNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9DaGVja0Zhdm9yaXRlRXhpc3RzQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuQWRkVG9GYXZvcml0ZXNBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLioiJT4KLQotCi08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci0KLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL0FkZFRvRmF2b3JpdGVzQWN0aW9uSlNQLmpzcCIpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+Ij4KLTwlCi1FbnVtZXJhdGlvbiBwYXJhbU5hbWVzID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXJOYW1lcygpOwotd2hpbGUgKHBhcmFtTmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgU3RyaW5nIHBhcmFtTmFtZSA9IChTdHJpbmcpcGFyYW1OYW1lcy5uZXh0RWxlbWVudCgpOwotICBTdHJpbmdbXSBwYXJhbVZhbHVlcyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyVmFsdWVzKHBhcmFtTmFtZSk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgcGFyYW1WYWx1ZXMubGVuZ3RoOyBpKyspIHsKLSU+Ci0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9cGFyYW1OYW1lJT4iIHZhbHVlPSI8JT1wYXJhbVZhbHVlc1tpXSU+Ij4KLTwlCi0gIH0KLX0KLSU+Ci08L2Zvcm0+Ci08L2JvZHk+Ci08L2h0bWw+Ci0KLTwlCi0vLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi1BZGRUb0Zhdm9yaXRlc0FjdGlvbiBhY3Rpb24gPSBuZXcgQWRkVG9GYXZvcml0ZXNBY3Rpb24oY29udHJvbGxlcik7Ci0vLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLWFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci1pZiAoYWN0aW9uLmZhdm9yaXRlRXhpc3RzKCkpIHsKLSU+Ci0gIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgIGlmIChjb25maXJtKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKS5nZXRNZXNzYWdlKCJNU0dfUVVFU1RJT05fT1ZFUldSSVRFX0ZBVk9SSVRFUyIpKSU+IikpCi0gICAgICBkb2N1bWVudC5mb3Jtc1swXS5zdWJtaXQoKTsKLSAgPC9zY3JpcHQ+Ci08JQotfQotZWxzZSB7Ci0lPgotICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICBkb2N1bWVudC5mb3Jtc1swXS5zdWJtaXQoKTsKLSAgPC9zY3JpcHQ+Ci08JQotfQotJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL0NsZWFyTmF2aWdhdG9yTm9kZUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9DbGVhck5hdmlnYXRvck5vZGVBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOWRlYzQzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL0NsZWFyTmF2aWdhdG9yTm9kZUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlciA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCkuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgQ2xlYXJOYXZpZ2F0b3JOb2RlQWN0aW9uIGFjdGlvbjsKLSAgIGlmIChzZWxlY3RlZE5vZGUgaW5zdGFuY2VvZiBGb2xkZXJOb2RlKQotICAgICBhY3Rpb24gPSBuZXcgQ2xlYXJOYXZpZ2F0b3JGb2xkZXJOb2RlQWN0aW9uKGNvbnRyb2xsZXIpOwotICAgZWxzZQotICAgICBhY3Rpb24gPSBuZXcgQ2xlYXJOYXZpZ2F0b3JOb2RlQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBUaGUgYWN0aW9uIG1heSBiZSBleGVjdXRlZCBwcm9ncmFtbWVkIGxpbmsuCi0gICBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotICAgCi0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gdHJ1ZTsKLSAgIAotICAgLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi0gICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2FjdGlvbnMvQ2xlYXJOb2RlQWN0aW9uLmluYyIgJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL0NsZWFyTmF2aWdhdG9yTm9kZXNBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvQ2xlYXJOYXZpZ2F0b3JOb2Rlc0FjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkYmYxODguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvQ2xlYXJOYXZpZ2F0b3JOb2Rlc0FjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIENsZWFyTmF2aWdhdG9yTm9kZXNBY3Rpb24gYWN0aW9uID0gbmV3IENsZWFyTmF2aWdhdG9yTm9kZXNBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9OZXdOb2RlQWN0aW9uLmluYyIgJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL0NvbXBsZXRlUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9Db21wbGV0ZVB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTA0YmE5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL0NvbXBsZXRlUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgQ29tcGxldGVQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uIGFjdGlvbiA9IG5ldyBDb21wbGV0ZVB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgIGlmIChpbnB1dHNWYWxpZCkKLSAgIHsKLSAgICAgLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi0gICAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLSAgIH0KLSU+Ci0KLSAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICBwcm9wZXJ0aWVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvcHJvcGVydGllc19jb250ZW50LmpzcCIpKSU+IjsKLSAgICAgc3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotICAgPC9zY3JpcHQ+Ci0KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL0xhdW5jaFN1YlF1ZXJ5QWN0aW9uLmluYyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL0xhdW5jaFN1YlF1ZXJ5QWN0aW9uLmluYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzNiZmVlMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9MYXVuY2hTdWJRdWVyeUFjdGlvbi5pbmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlCi0gICBTdHJpbmcgc3ViUXVlcnlLZXkgPSBhY3Rpb24uZ2V0U3ViUXVlcnlLZXkoKTsKLSAgIFN0cmluZ0J1ZmZlciBuZXdTdWJRdWVyeUtleSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgIGlmIChzdWJRdWVyeUtleSAhPSBudWxsICYmIHN1YlF1ZXJ5S2V5Lmxlbmd0aCgpID4gMCkKLSAgICAgbmV3U3ViUXVlcnlLZXkuYXBwZW5kKGFjdGlvbi5nZXRTdWJRdWVyeUtleSgpKS5hcHBlbmQoJzonKTsKLSAgIG5ld1N1YlF1ZXJ5S2V5LmFwcGVuZChhY3Rpb24uZ2V0TmV3U3ViUXVlcnkoKSk7Ci0gICBGb3JtVG9vbCBmb3JtVG9vbCA9IChGb3JtVG9vbClhY3Rpb24uZ2V0U2VsZWN0ZWRGb3JtVG9vbCgpOwotICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIHBhcmVudEZvcm1Ub29sUEkgPSAoKE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlKWZvcm1Ub29sKS5nZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXkpOwotICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIHN1YlF1ZXJ5Rm9ybVRvb2xQSSA9ICgoTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UpZm9ybVRvb2wpLmdldEZvcm1Ub29sUHJvcGVydGllcyhuZXdTdWJRdWVyeUtleS50b1N0cmluZygpKTsKLSAgIFN0cmluZyBuZXdTdWJRdWVyeUl0ZW1TdHJpbmcgPSBhY3Rpb24uZ2V0TmV3U3ViUXVlcnlJdGVtKCk7Ci0gICBzdWJRdWVyeUZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNLG5ld1N1YlF1ZXJ5SXRlbVN0cmluZyk7Ci0gICBzdWJRdWVyeUZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9HRVQsbmV3IEJvb2xlYW4oYWN0aW9uLmlzU3ViUXVlcnlHZXQoKSkpOwotICAgCi0gICAvLyBBbHdheXMgaW5pdGlhbGl6ZSB0aGUgcXVlcnkgbmFtZSBzbyB0aGUgc3VicXVlcnkgbWFrZXMgc2Vuc2UuCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIFN0cmluZyBwYXJlbnRRdWVyeU5hbWUgPSAoU3RyaW5nKXBhcmVudEZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9OQU1FKTsKLSAgIGlmIChwYXJlbnRRdWVyeU5hbWUgPT0gbnVsbCkKLSAgICAgcGFyZW50UXVlcnlOYW1lID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkRFRkFVTFRfUVVFUllfTkFNRSIpOwotICAgaW50IG5ld1N1YlF1ZXJ5SXRlbSA9IEludGVnZXIucGFyc2VJbnQobmV3U3ViUXVlcnlJdGVtU3RyaW5nKTsKLSAgIFN0cmluZyBuZXdTdWJRdWVyeUl0ZW1UeXBlU3RyaW5nID0gbnVsbDsKLSAgIHN3aXRjaCAobmV3U3ViUXVlcnlJdGVtKQotICAgewotICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTOgotICAgICAgIG5ld1N1YlF1ZXJ5SXRlbVR5cGVTdHJpbmcgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fQlVTSU5FU1NFUyIpOwotICAgICAgIGJyZWFrOwotICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUzoKLSAgICAgICBuZXdTdWJRdWVyeUl0ZW1UeXBlU3RyaW5nID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX1NFUlZJQ0VTIik7Ci0gICAgICAgYnJlYWs7Ci0gICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUzoKLSAgICAgZGVmYXVsdDoKLSAgICAgICBuZXdTdWJRdWVyeUl0ZW1UeXBlU3RyaW5nID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX1NFUlZJQ0VfSU5URVJGQUNFUyIpOwotICAgfQotICAgU3RyaW5nW10gbWVzc2FnZVBhcmFtZXRlcnMgPSB7cGFyZW50UXVlcnlOYW1lLG5ld1N1YlF1ZXJ5SXRlbVR5cGVTdHJpbmd9OwotICAgc3ViUXVlcnlGb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfTkFNRSx1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiREVGQVVMVF9TVUJRVUVSWV9OQU1FIixtZXNzYWdlUGFyYW1ldGVycykpOwotICAgCi0gICBOb2RlIG5vZGUgPSBhY3Rpb24uZ2V0U2VsZWN0ZWROYXZpZ2F0b3JOb2RlKCk7Ci0gICBpbnQgbm9kZUlkID0gbm9kZS5nZXROb2RlSWQoKTsKLSAgIGludCB0b29sSWQgPSBub2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKTsKLSAgIGludCB2aWV3SWQgPSBub2RlLmdldFZpZXdJZCgpOwotICAgaW50IHZpZXdUb29sSWQgPSBub2RlLmdldFZpZXdUb29sSWQoKTsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoU2VsZWN0RmluZFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWQsdG9vbElkLHZpZXdJZCx2aWV3VG9vbElkLG5ld1N1YlF1ZXJ5S2V5LnRvU3RyaW5nKCksZmFsc2UpKSklPiI7Ci08L3NjcmlwdD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL0xvZ2luQWR2YW5jZWRBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvTG9naW5BZHZhbmNlZEFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0NzJjZjIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvTG9naW5BZHZhbmNlZEFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyNyAgIDEzNjQ0OSBicnVuc3NlbkB1cy5pYm0uY29tIC0gVmluY2UgQnJ1bnNzZW4gIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keT4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBMb2dpbkFkdmFuY2VkQWN0aW9uIGFjdGlvbiA9IG5ldyBMb2dpbkFkdmFuY2VkQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gICBpZiAoIWFjdGlvbi5pc1N1YlF1ZXJ5SW5pdGlhdGVkKCkpCi0gICB7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9OZXdOb2RlQWN0aW9uLmluYyIgJT4KLTwlCi0gICB9Ci0gICBlbHNlCi0gICB7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9MYXVuY2hTdWJRdWVyeUFjdGlvbi5pbmMiICU+Ci08JQotICAgfQotJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL0xvZ291dEFkdmFuY2VkQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL0xvZ291dEFkdmFuY2VkQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQ5M2FlYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9Mb2dvdXRBZHZhbmNlZEFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyNyAgIDEzNjQ0OSBicnVuc3NlbkB1cy5pYm0uY29tIC0gVmluY2UgQnJ1bnNzZW4gIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keT4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBMb2dvdXRBZHZhbmNlZEFjdGlvbiBhY3Rpb24gPSBuZXcgTG9nb3V0QWR2YW5jZWRBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHRydWU7IC8vYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTmV3Tm9kZUFjdGlvbi5pbmMiICU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9NYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvTWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTVkNTU1My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9NYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotCi0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgTWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzQWN0aW9uIGFjdGlvbiA9IG5ldyBNYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgIGlmICghaW5wdXRzVmFsaWQpCi0gICB7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHByb3BlcnRpZXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIikpJT4iOwotICBzdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci08L3NjcmlwdD4KLTwlCi0gICB9Ci0gICBlbHNlCi0gICB7Ci0gICAgIGlmICghYWN0aW9uLmlzU3ViUXVlcnlJbml0aWF0ZWQoKSkKLSAgICAgewotICAgICAgIGFjdGlvbi5leGVjdXRlKCk7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHByb3BlcnRpZXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIikpJT4iOwotICBzdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci08L3NjcmlwdD4KLTwlCi0gICAgIH0KLSAgICAgZWxzZQotICAgICB7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9MYXVuY2hTdWJRdWVyeUFjdGlvbi5pbmMiICU+Ci08JQotICAgICB9Ci0gICB9Ci0lPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvTmV3Tm9kZUFjdGlvbi5pbmMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9OZXdOb2RlQWN0aW9uLmluYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmY5ZTQ4MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9OZXdOb2RlQWN0aW9uLmluYworKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCUKLSAgIGlmICghaW5wdXRzVmFsaWQpCi0gICB7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHByb3BlcnRpZXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIikpJT4iOwotICBzdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci08L3NjcmlwdD4KLTwlCi0gICB9Ci0gICBlbHNlCi0gICB7Ci0gICAgIC8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotICAgICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0KLSAgICAgaWYgKGFjdGlvblJlc3VsdCkKLSAgICAgewotICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBzZWxlY3RlZCBub2RlIGlzIHZpc2libGUuCi0gICAgICAgY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCkubWFrZVNlbGVjdGVkTm9kZVZpc2libGUoKTsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgaWYgKGlzTWljcm9zb2Z0SW50ZXJuZXRFeHBsb3JlcigpKQotICB7Ci0gICAgbmF2aWdhdG9yQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvbmF2aWdhdG9yX2NvbnRlbnQuanNwIikpJT4iOwotICAgIHByb3BlcnRpZXNDb250YWluZXIubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCIpKSU+IjsKLSAgICBzdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci0gIH0KLSAgZWxzZQotICAgIHBlcnNwZWN0aXZlQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvdWRkaV9wZXJzcGVjdGl2ZV9jb250ZW50LmpzcCIpKSU+IjsKLTwvc2NyaXB0PgotPCUKLSAgICAgfQotICAgICBlbHNlCi0gICAgIHsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgcHJvcGVydGllc0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3Byb3BlcnRpZXNfY29udGVudC5qc3AiKSklPiI7Ci0gIHN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLTwvc2NyaXB0PgotPCUKLSAgICAgfQotICAgfQotJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL09wZW5SZWdpc3RyeUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9PcGVuUmVnaXN0cnlBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDcyZWIzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL09wZW5SZWdpc3RyeUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLQotICAgT3BlblJlZ2lzdHJ5QWN0aW9uIGFjdGlvbiA9IG5ldyBPcGVuUmVnaXN0cnlBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9OZXdOb2RlQWN0aW9uLmluYyIgJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZnJlc2hVRERJTm9kZUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWZyZXNoVURESU5vZGVBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDNiZTUwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZnJlc2hVRERJTm9kZUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL2Zvcm11dGlscy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgUmVmcmVzaFVERElOb2RlQWN0aW9uIGFjdGlvbiA9IG5ldyBSZWZyZXNoVURESU5vZGVBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIFRoZSBhY3Rpb24gbWF5IGJlIGV4ZWN1dGVkIHZpYSBwcm9ncmFtIGxpbmsuCi0gICBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotICAgYm9vbGVhbiBpc05vZGVEYXRhVmFsaWQgPSBhY3Rpb24udmVyaWZ5Tm9kZURhdGEoKTsKLQotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IHRydWU7Ci0gICBTdHJpbmcgb25Mb2FkQWN0aW9uOwotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGZ1bmN0aW9uIHByb2Nlc3NDbGVhck5vZGVzRm9ybSgpCi0gIHsKLSAgICB2YXIgY2xlYXJOb2Rlc0Zvcm0gPSBkb2N1bWVudC5mb3Jtc1swXTsKLSAgICB2YXIgc3VibWl0Q2xlYXJOb2Rlc0Zvcm0gPSBmYWxzZTsKLTwlCi0gICAgIFZlY3RvciBzdGFsZU5vZGVzID0gYWN0aW9uLmdldFN0YWxlTm9kZXMoKTsKLSAgICAgZm9yIChpbnQgaT0wO2k8c3RhbGVOb2Rlcy5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgTm9kZSBzdGFsZU5vZGUgPSAoTm9kZSlzdGFsZU5vZGVzLmVsZW1lbnRBdChpKTsKLSU+Ci0gICAgaWYgKGNvbmZpcm0oIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX1FVRVNUSU9OX1JFTU9WRV9OT0RFIixzdGFsZU5vZGUuZ2V0Tm9kZU5hbWUoKSkpJT4iKSkKLSAgICB7Ci0gICAgICBjbGVhck5vZGVzRm9ybS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCI8JT1BY3Rpb25JbnB1dHMuTk9ERUlEJT4iLDwlPXN0YWxlTm9kZS5nZXROb2RlSWQoKSU+KSk7Ci0gICAgICBzdWJtaXRDbGVhck5vZGVzRm9ybSA9IHRydWU7Ci0gICAgfQotPCUKLSAgICAgfQotJT4KLSAgICBpZiAoc3VibWl0Q2xlYXJOb2Rlc0Zvcm0pCi0gICAgICBjbGVhck5vZGVzRm9ybS5zdWJtaXQoKTsKLSAgfQotPC9zY3JpcHQ+ICAgIAotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnMvQ2xlYXJOYXZpZ2F0b3JOb2Rlc0FjdGlvbkpTUC5qc3AiKSklPiIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIG1ldGhvZD0icG9zdCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI+Ci08L2Zvcm0+Ci08JQotICAgaWYgKCFpc05vZGVEYXRhVmFsaWQpCi0gICB7Ci0gICAgIGludCBub2RlSWQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpKGFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCkuZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKSk7Ci0gICAgIFN0cmluZyBub2RlTmFtZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCkuZ2V0Tm9kZShub2RlSWQpLmdldE5vZGVOYW1lKCk7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGlmIChjb25maXJtKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19RVUVTVElPTl9SRU1PVkVfTk9ERSIsbm9kZU5hbWUpKSU+IikpCi0gICAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoQ2xlYXJOYXZpZ2F0b3JOb2RlQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlkKSkpJT4iOwotPC9zY3JpcHQ+ICAgIAotPCUKLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgcHJvY2Vzc0NsZWFyTm9kZXNGb3JtKCk7Ci08L3NjcmlwdD4KLTwlQCBpbmNsdWRlIGZpbGUgPSAiL3VkZGkvYWN0aW9ucy9OZXdOb2RlQWN0aW9uLmluYyIgJT4KLTwlCi0gICB9Ci0lPiAgIAotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVmcmVzaFVERElOb2Rlc0FjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWZyZXNoVURESU5vZGVzQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTM3NjI5NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWZyZXNoVURESU5vZGVzQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvZm9ybXV0aWxzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBSZWZyZXNoVURESU5vZGVzQWN0aW9uIGFjdGlvbiA9IG5ldyBSZWZyZXNoVURESU5vZGVzQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotICAgCi0gICAvLyBSdW4gdGhlIGFjdGlvbgotICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBmdW5jdGlvbiBwcm9jZXNzQ2xlYXJOb2Rlc0Zvcm0oKQotICB7Ci0gICAgdmFyIGNsZWFyTm9kZXNGb3JtID0gZG9jdW1lbnQuZm9ybXNbMF07Ci08JQotICAgICBWZWN0b3Igc3RhbGVOb2RlcyA9IGFjdGlvbi5nZXRTdGFsZU5vZGVzKCk7Ci0gICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgICBmb3IgKGludCBpPTA7aTxzdGFsZU5vZGVzLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBOb2RlIHN0YWxlTm9kZSA9IChOb2RlKXN0YWxlTm9kZXMuZWxlbWVudEF0KGkpOwotJT4KLSAgICBpZiAoY29uZmlybSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfUVVFU1RJT05fUkVNT1ZFX05PREUiLHN0YWxlTm9kZS5nZXROb2RlTmFtZSgpKSklPiIpKQotICAgICAgY2xlYXJOb2Rlc0Zvcm0uYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiPCU9QWN0aW9uSW5wdXRzLk5PREVJRCU+Iiw8JT1zdGFsZU5vZGUuZ2V0Tm9kZUlkKCklPikpOwotPCUgICAgCi0gICAgIH0KLSU+Ci0gICAgY2xlYXJOb2Rlc0Zvcm0uc3VibWl0KCk7Ci0gIH0gICAgICAgICAKLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnMvQ2xlYXJOYXZpZ2F0b3JOb2Rlc0FjdGlvbkpTUC5qc3AiKSklPiIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIG1ldGhvZD0icG9zdCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI+Ci08L2Zvcm0+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgcHJvY2Vzc0NsZWFyTm9kZXNGb3JtKCk7Ci08L3NjcmlwdD4gIAotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnRmluZEJ1c2luZXNzVVVJREFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdGaW5kQnVzaW5lc3NVVUlEQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDM1NDU5Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdGaW5kQnVzaW5lc3NVVUlEQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIFJlZ0ZpbmRCdXNpbmVzc1VVSURBY3Rpb24gYWN0aW9uID0gbmV3IFJlZ0ZpbmRCdXNpbmVzc1VVSURBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9OZXdOb2RlQWN0aW9uLmluYyIgJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ0ZpbmRCdXNpbmVzc2VzQWR2YW5jZWRBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnRmluZEJ1c2luZXNzZXNBZHZhbmNlZEFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxOGI2YjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnRmluZEJ1c2luZXNzZXNBZHZhbmNlZEFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLioiICU+Ci0KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBSZWdGaW5kQnVzaW5lc3Nlc0FkdmFuY2VkQWN0aW9uIGFjdGlvbiA9IG5ldyBSZWdGaW5kQnVzaW5lc3Nlc0FkdmFuY2VkQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gICBpZiAoIWFjdGlvbi5pc1N1YlF1ZXJ5SW5pdGlhdGVkKCkpCi0gICB7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9OZXdOb2RlQWN0aW9uLmluYyIgJT4KLTwlCi0gICB9Ci0gICBlbHNlCi0gICB7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9MYXVuY2hTdWJRdWVyeUFjdGlvbi5pbmMiICU+Ci08JQotICAgfQotJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ0ZpbmRCdXNpbmVzc2VzU2ltcGxlQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ0ZpbmRCdXNpbmVzc2VzU2ltcGxlQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDU3MTZiMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdGaW5kQnVzaW5lc3Nlc1NpbXBsZUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBSZWdGaW5kQnVzaW5lc3Nlc1NpbXBsZUFjdGlvbiBhY3Rpb24gPSBuZXcgUmVnRmluZEJ1c2luZXNzZXNTaW1wbGVBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9OZXdOb2RlQWN0aW9uLmluYyIgJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlVVVJREFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZUludGVyZmFjZVVVSURBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjQ0YzlmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlVVVJREFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBSZWdGaW5kU2VydmljZUludGVyZmFjZVVVSURBY3Rpb24gYWN0aW9uID0gbmV3IFJlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlVVVJREFjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9hY3Rpb25zL05ld05vZGVBY3Rpb24uaW5jIiAlPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNmQzMjRlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIFJlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkQWN0aW9uIGFjdGlvbiA9IG5ldyBSZWdGaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZEFjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotICAgaWYgKCFhY3Rpb24uaXNTdWJRdWVyeUluaXRpYXRlZCgpKQotICAgewotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTmV3Tm9kZUFjdGlvbi5pbmMiICU+Ci08JQotICAgfQotICAgZWxzZQotICAgewotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTGF1bmNoU3ViUXVlcnlBY3Rpb24uaW5jIiAlPgotPCUKLSAgIH0KLSU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZUludGVyZmFjZXNTaW1wbGVBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VzU2ltcGxlQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmNhY2U2ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZUludGVyZmFjZXNTaW1wbGVBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VzU2ltcGxlQWN0aW9uIGFjdGlvbiA9IG5ldyBSZWdGaW5kU2VydmljZUludGVyZmFjZXNTaW1wbGVBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9OZXdOb2RlQWN0aW9uLmluYyIgJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlVVVJREFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZVVVSURBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Y2E1ZTY3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlVVVJREFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBSZWdGaW5kU2VydmljZVVVSURBY3Rpb24gYWN0aW9uID0gbmV3IFJlZ0ZpbmRTZXJ2aWNlVVVJREFjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9hY3Rpb25zL05ld05vZGVBY3Rpb24uaW5jIiAlPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VzQWR2YW5jZWRBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VzQWR2YW5jZWRBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ODM4ZGUyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlc0FkdmFuY2VkQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIFJlZ0ZpbmRTZXJ2aWNlc0FkdmFuY2VkQWN0aW9uIGFjdGlvbiA9IG5ldyBSZWdGaW5kU2VydmljZXNBZHZhbmNlZEFjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotICAgaWYgKCFhY3Rpb24uaXNTdWJRdWVyeUluaXRpYXRlZCgpKQotICAgewotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTmV3Tm9kZUFjdGlvbi5pbmMiICU+Ci08JQotICAgfQotICAgZWxzZQotICAgewotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTGF1bmNoU3ViUXVlcnlBY3Rpb24uaW5jIiAlPgotPCUKLSAgIH0KLSU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZXNTaW1wbGVBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VzU2ltcGxlQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjJhZDU5MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZXNTaW1wbGVBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgUmVnRmluZFNlcnZpY2VzU2ltcGxlQWN0aW9uIGFjdGlvbiA9IG5ldyBSZWdGaW5kU2VydmljZXNTaW1wbGVBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9OZXdOb2RlQWN0aW9uLmluYyIgJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWY2MzljMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdQdWJsaXNoQnVzaW5lc3NBZHZhbmNlZEFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgUmVnUHVibGlzaEJ1c2luZXNzQWR2YW5jZWRBY3Rpb24gYWN0aW9uID0gbmV3IFJlZ1B1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTmV3Tm9kZUFjdGlvbi5pbmMiICU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdQdWJsaXNoQnVzaW5lc3NTaW1wbGVBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnUHVibGlzaEJ1c2luZXNzU2ltcGxlQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmYwMTJjNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdQdWJsaXNoQnVzaW5lc3NTaW1wbGVBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgUmVnUHVibGlzaEJ1c2luZXNzU2ltcGxlQWN0aW9uIGFjdGlvbiA9IG5ldyBSZWdQdWJsaXNoQnVzaW5lc3NTaW1wbGVBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9OZXdOb2RlQWN0aW9uLmluYyIgJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnUHVibGlzaFNlcnZpY2VBZHZhbmNlZEFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwNjZiYTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnUHVibGlzaFNlcnZpY2VBZHZhbmNlZEFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBSZWdQdWJsaXNoU2VydmljZUFkdmFuY2VkQWN0aW9uIGFjdGlvbiA9IG5ldyBSZWdQdWJsaXNoU2VydmljZUFkdmFuY2VkQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gICBpZiAoIWFjdGlvbi5pc1N1YlF1ZXJ5SW5pdGlhdGVkKCkpCi0gICB7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9OZXdOb2RlQWN0aW9uLmluYyIgJT4KLTwlCi0gICB9Ci0gICBlbHNlCi0gICB7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9MYXVuY2hTdWJRdWVyeUFjdGlvbi5pbmMiICU+Ci08JQotICAgfQotJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWRBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZEFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2NTI3NWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZEFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBSZWdQdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkQWN0aW9uIGFjdGlvbiA9IG5ldyBSZWdQdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTmV3Tm9kZUFjdGlvbi5pbmMiICU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdQdWJsaXNoU2VydmljZUludGVyZmFjZVNpbXBsZUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdQdWJsaXNoU2VydmljZUludGVyZmFjZVNpbXBsZUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyNWRjNTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTaW1wbGVBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTaW1wbGVBY3Rpb24gYWN0aW9uID0gbmV3IFJlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2ltcGxlQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTmV3Tm9kZUFjdGlvbi5pbmMiICU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdQdWJsaXNoU2VydmljZVNpbXBsZUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZWdQdWJsaXNoU2VydmljZVNpbXBsZUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxYjA0ZjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVnUHVibGlzaFNlcnZpY2VTaW1wbGVBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgUmVnUHVibGlzaFNlcnZpY2VTaW1wbGVBY3Rpb24gYWN0aW9uID0gbmV3IFJlZ1B1Ymxpc2hTZXJ2aWNlU2ltcGxlQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gICBpZiAoIWFjdGlvbi5pc1N1YlF1ZXJ5SW5pdGlhdGVkKCkpCi0gICB7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9OZXdOb2RlQWN0aW9uLmluYyIgJT4KLTwlCi0gICB9Ci0gICBlbHNlCi0gICB7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL3VkZGkvYWN0aW9ucy9MYXVuY2hTdWJRdWVyeUFjdGlvbi5pbmMiICU+Ci08JQotICAgfQotJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlbW92ZVB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVtb3ZlUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2NmNlZmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVtb3ZlUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIFJlbW92ZVB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24gYWN0aW9uID0gbmV3IFJlbW92ZVB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgIGlmIChpbnB1dHNWYWxpZCkKLSAgIHsKLSAgICAgLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi0gICAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLSAgIH0KLSU+Ci0KLSAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICBwcm9wZXJ0aWVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvcHJvcGVydGllc19jb250ZW50LmpzcCIpKSU+IjsKLSAgICAgc3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotICAgPC9zY3JpcHQ+Ci0KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlbW92ZVN1YlF1ZXJ5SXRlbUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZW1vdmVTdWJRdWVyeUl0ZW1BY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjVmNjNmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1JlbW92ZVN1YlF1ZXJ5SXRlbUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBSZW1vdmVTdWJRdWVyeUl0ZW1BY3Rpb24gYWN0aW9uID0gbmV3IFJlbW92ZVN1YlF1ZXJ5SXRlbUFjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gICAvLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLSAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgcHJvcGVydGllc0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3Byb3BlcnRpZXNfY29udGVudC5qc3AiKSklPiI7Ci0gIHN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvUmVzaXplVURESUZyYW1lc0FjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZXNpemVVRERJRnJhbWVzQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI3MjIyMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9SZXNpemVVRERJRnJhbWVzQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIC8vIENyZWF0ZSB0aGUgYWN0aW9uLgotICAgUmVzaXplVURESUZyYW1lc0FjdGlvbiBhY3Rpb24gPSBuZXcgUmVzaXplVURESUZyYW1lc0FjdGlvbihjb250cm9sbGVyKTsKLSAgIAotICAgLy8gUG9wdWxhdGUgdGhlIGFjdGlvbiB3aXRoIHRoZSByZXF1ZXN0IHByb3BlcnRpZXMuCi0gICBib29sZWFuIHJlc3VsdCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0lPgotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaWZyYW1lc2V0cy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIGlmIChyZXN1bHQpCi0gICB7Ci0gICAgIGFjdGlvbi5leGVjdXRlKGZhbHNlKTsKLSAgICAgCi0gICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBpZiAoaXNNaWNyb3NvZnRJbnRlcm5ldEV4cGxvcmVyKCkpCi0gIHsKLSAgICB2YXIgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXQgPSBnZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldCgpOwotICAgIHZhciBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXQgPSBnZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXQoKTsKLSAgICBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldC5zZXRBdHRyaWJ1dGUoImNvbHMiLCI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCklPiIpOwotICAgIGFjdGlvbnNDb250YWluZXJGcmFtZXNldC5zZXRBdHRyaWJ1dGUoInJvd3MiLCI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpJT4iKTsKLSAgfQotICBlbHNlCi0gICAgcGVyc3BlY3RpdmVDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS91ZGRpX3BlcnNwZWN0aXZlX2NvbnRlbnQuanNwIikpJT4iOwotPC9zY3JpcHQ+Ci08JQotICAgfQotJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1NlbGVjdENhdGVnb3J5Tm9kZUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9TZWxlY3RDYXRlZ29yeU5vZGVBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjg0ZjYzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1NlbGVjdENhdGVnb3J5Tm9kZUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGoudXRpbC4qIiAlPgotCi08JQotICAgU3RyaW5nIHNlc3Npb25JZCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpOwotICAgSHR0cFNlc3Npb24gY3VycmVudFNlc3Npb24gPSAoSHR0cFNlc3Npb24pYXBwbGljYXRpb24uZ2V0QXR0cmlidXRlKHNlc3Npb25JZCk7Ci0gICBDb250cm9sbGVyIGNvbnRyb2xsZXIgPSAoQ29udHJvbGxlciljdXJyZW50U2Vzc2lvbi5nZXRBdHRyaWJ1dGUoImNvbnRyb2xsZXIiKTsKLSU+ICAgCi08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy9jYnBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBTZWxlY3RDYXRlZ29yeU5vZGVBY3Rpb24gYWN0aW9uID0gbmV3IFNlbGVjdENhdGVnb3J5Tm9kZUFjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gICAvLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLSAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoZmFsc2UpOwotCi0gICBDYXRlZ29yeU5vZGUgc2VsZWN0ZWROb2RlID0gKENhdGVnb3J5Tm9kZSlhY3Rpb24uZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHNlbGVjdGVkTm9kZS5nZXROb2RlTWFuYWdlcigpOwotICAgTm9kZSBwcmV2aW91c1NlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFByZXZpb3VzU2VsZWN0ZWROb2RlKCk7Ci0gICBpbnQgc2VsZWN0ZWROb2RlSWQgPSBzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCk7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci08JQotICAgU3RyaW5nIHRyZWVDb250ZW50VmFyID0gYWN0aW9uLmdldFRyZWVDb250ZW50VmFyKCk7Ci0gICBpZiAocHJldmlvdXNTZWxlY3RlZE5vZGUgIT0gbnVsbCkKLSAgIHsKLSAgICAgaWYgKHRyZWVDb250ZW50VmFyICE9IG51bGwpCi0gICAgIHsKLSU+Ci0gIDwlPXRyZWVDb250ZW50VmFyJT4uYWx0ZXJJbWFnZSgnPCU9cHJldmlvdXNTZWxlY3RlZE5vZGUuZ2V0QW5jaG9yTmFtZSgpJT4nLCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQocHJldmlvdXNTZWxlY3RlZE5vZGUuZ2V0Q2xvc2VkSW1hZ2VQYXRoKCkpKSU+Jyk7Ci08JQotICAgICB9Ci0gICB9Ci0gICBTdHJpbmcgc2VsZWN0ZWROb2RlQW5jaG9yTmFtZSA9IHNlbGVjdGVkTm9kZS5nZXRBbmNob3JOYW1lKCk7Ci0gICBpZiAodHJlZUNvbnRlbnRWYXIgIT0gbnVsbCkKLSAgIHsKLSU+ICAgICAKLSAgPCU9dHJlZUNvbnRlbnRWYXIlPi5zZWxlY3ROb2RlKCc8JT1zZWxlY3RlZE5vZGVBbmNob3JOYW1lJT4nLCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoc2VsZWN0ZWROb2RlLmdldE9wZW5JbWFnZVBhdGgoKSkpJT4nKTsKLSAgPCU9dHJlZUNvbnRlbnRWYXIlPi5sb2NhdGlvbi5oYXNoID0gJyM8JT1zZWxlY3RlZE5vZGVBbmNob3JOYW1lJT4nOwotPCUgIAotICAgfQotICAgCi0gICBDYXRlZ29yeUVsZW1lbnQgY2F0ZWdvcnlFbGVtZW50ID0gKENhdGVnb3J5RWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgIEtleWVkUmVmZXJlbmNlIGtyID0gY2F0ZWdvcnlFbGVtZW50LmdldENhdGVnb3J5KCk7Ci0lPgotICBjYXRlZ29yeUJyb3dzZXJXaW5kb3cub3BlbmVyLnRhcmdldENhdGVnb3J5S2V5TmFtZUVsZW1lbnQudmFsdWUgPSAiPCU9a3IuZ2V0S2V5TmFtZSgpJT4iOwotICBjYXRlZ29yeUJyb3dzZXJXaW5kb3cub3BlbmVyLnRhcmdldENhdGVnb3J5S2V5VmFsdWVFbGVtZW50LnZhbHVlID0gIjwlPWtyLmdldEtleVZhbHVlKCklPiI7Ci0gIGNhdGVnb3J5QnJvd3NlcldpbmRvdy5vcGVuZXIuY2xvc2VDYXRlZ29yeUJyb3dzZXIoKTsKLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1NlbGVjdEZpbmRUb29sQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1NlbGVjdEZpbmRUb29sQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDYzY2YxZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9TZWxlY3RGaW5kVG9vbEFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgU2VsZWN0RmluZFRvb2xBY3Rpb24gYWN0aW9uID0gbmV3IFNlbGVjdEZpbmRUb29sQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgIC8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotCi0gICAvLyBEZXRlcm1pbmUgaWYgdGhlIGFjdGlvbiB3YXMgYWRkZWQgdG8gdGhlIGhpc3RvcnkgbGlzdC4KLSAgIGJvb2xlYW4gaXNBZGRlZFRvSGlzdG9yeSA9IGFjdGlvbi5pc0FkZGVkVG9IaXN0b3J5KCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2FjdGlvbnMvU2VsZWN0Tm9kZVRvb2xBY3Rpb24uaW5jIiAlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvU2VsZWN0TmF2aWdhdG9yTm9kZUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9TZWxlY3ROYXZpZ2F0b3JOb2RlQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGNiN2QwZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9TZWxlY3ROYXZpZ2F0b3JOb2RlQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBTZWxlY3ROYXZpZ2F0b3JOb2RlQWN0aW9uIGFjdGlvbiA9IG5ldyBTZWxlY3ROYXZpZ2F0b3JOb2RlQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgIC8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotCi0gICAvLyBEZXRlcm1pbmUgaWYgdGhlIGFjdGlvbiB3YXMgYWRkZWQgdG8gdGhlIGhpc3RvcnkgbGlzdC4KLSAgIGJvb2xlYW4gaXNBZGRlZFRvSGlzdG9yeSA9IGFjdGlvbi5pc0FkZGVkVG9IaXN0b3J5KCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2FjdGlvbnMvU2VsZWN0Tm9kZUFjdGlvbi5pbmMiICU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9TZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9TZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3NGE0MGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvU2VsZWN0UHJvcGVydGllc1Rvb2xBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLS8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLVNlbGVjdFByb3BlcnRpZXNUb29sQWN0aW9uIGFjdGlvbiA9IG5ldyBTZWxlY3RQcm9wZXJ0aWVzVG9vbEFjdGlvbihjb250cm9sbGVyKTsKLQotLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi1hY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0vLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLWJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLQotLy8gRGV0ZXJtaW5lIGlmIHRoZSBhY3Rpb24gd2FzIGFkZGVkIHRvIHRoZSBoaXN0b3J5IGxpc3QuCi1ib29sZWFuIGlzQWRkZWRUb0hpc3RvcnkgPSBhY3Rpb24uaXNBZGRlZFRvSGlzdG9yeSgpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9hY3Rpb25zL1NlbGVjdE5vZGVUb29sQWN0aW9uLmluYyIgJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1NlbGVjdFN1YlF1ZXJ5SXRlbUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9TZWxlY3RTdWJRdWVyeUl0ZW1BY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjAwZWViLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1NlbGVjdFN1YlF1ZXJ5SXRlbUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIFNlbGVjdFN1YlF1ZXJ5SXRlbUFjdGlvbiBhY3Rpb24gPSBuZXcgU2VsZWN0U3ViUXVlcnlJdGVtQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgIC8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZShmYWxzZSk7Ci0gICAKLSAgIGlmICghYWN0aW9uUmVzdWx0KQotICAgewotICAgICBIYXNodGFibGUgcHJvcGVydHlUYWJsZSA9IGFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCk7Ci0gICAgIFN0cmluZyBzdWJRdWVyeUtleSA9IChTdHJpbmcpcHJvcGVydHlUYWJsZS5nZXQoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVkpOwotICAgICBTdHJpbmcgc3ViUXVlcnlMaXN0S2V5ID0gKFN0cmluZylwcm9wZXJ0eVRhYmxlLmdldChVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0xJU1RfS0VZKTsKLSAgICAgaW50IHN1YlF1ZXJ5TGlzdEl0ZW1JZCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylwcm9wZXJ0eVRhYmxlLmdldChVRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0xJU1RfSVRFTUlEKSk7Ci0lPgotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IFVURi04Ij4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9wYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+ICAKLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgaWYgKGNvbmZpcm0oIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX1FVRVNUSU9OX0lURU1fVkFMSURBVElPTl9GQUlMRUQiLGFjdGlvbi5nZXRJdGVtTmFtZSgpKSklPiIpKQotICAgIHBlcnNwZWN0aXZlV29ya0FyZWEubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFJlbW92ZVN1YlF1ZXJ5SXRlbUFjdGlvbi5nZXRBY3Rpb25MaW5rKHN1YlF1ZXJ5S2V5LHN1YlF1ZXJ5TGlzdEtleSxzdWJRdWVyeUxpc3RJdGVtSWQpKSklPiI7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KLTwlCi0gICB9Ci0gICBlbHNlCi0gICB7Ci0gICAgIC8vIERldGVybWluZSBpZiB0aGUgYWN0aW9uIHdhcyBhZGRlZCB0byB0aGUgaGlzdG9yeSBsaXN0LgotICAgICBib29sZWFuIGlzQWRkZWRUb0hpc3RvcnkgPSBhY3Rpb24uaXNBZGRlZFRvSGlzdG9yeSgpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9hY3Rpb25zL1NlbGVjdE5vZGVUb29sQWN0aW9uLmluYyIgJT4KLTwlCi0gICB9Ci0lPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvU2VydmljZUdldEJ1c2luZXNzQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1NlcnZpY2VHZXRCdXNpbmVzc0FjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzOWU3MWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvU2VydmljZUdldEJ1c2luZXNzQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBTZXJ2aWNlR2V0QnVzaW5lc3NBY3Rpb24gYWN0aW9uID0gbmV3IFNlcnZpY2VHZXRCdXNpbmVzc0FjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotICAgYm9vbGVhbiBzZXJ2aWNlRXhpc3RzID0gYWN0aW9uLnZhbGlkYXRlU2VydmljZSgpOwotCi0gICBpZiAoIXNlcnZpY2VFeGlzdHMpCi0gICB7Ci0gICAgIGludCBub2RlSWQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpKGFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCkuZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKSk7Ci0gICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBpZiAoY29uZmlybSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfUVVFU1RJT05fUkVNT1ZFX1NFUlZJQ0VfTk9ERSIpKSU+IikpCi0gICAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoQ2xlYXJOYXZpZ2F0b3JOb2RlQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlkKSkpJT4iOwotPC9zY3JpcHQ+Ci08JQotICAgfQotICAgZWxzZQotICAgewotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTmV3Tm9kZUFjdGlvbi5pbmMiICU+Ci08JQotICAgfQotJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1NlcnZpY2VHZXRTZXJ2aWNlSW50ZXJmYWNlc0FjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9TZXJ2aWNlR2V0U2VydmljZUludGVyZmFjZXNBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Y2I1Zjk5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1NlcnZpY2VHZXRTZXJ2aWNlSW50ZXJmYWNlc0FjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgU2VydmljZUdldFNlcnZpY2VJbnRlcmZhY2VzQWN0aW9uIGFjdGlvbiA9IG5ldyBTZXJ2aWNlR2V0U2VydmljZUludGVyZmFjZXNBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgIGJvb2xlYW4gc2VydmljZUV4aXN0cyA9IGFjdGlvbi52YWxpZGF0ZVNlcnZpY2UoKTsKLQotICAgaWYgKCFzZXJ2aWNlRXhpc3RzKQotICAgewotICAgICBpbnQgbm9kZUlkID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKShhY3Rpb24uZ2V0UHJvcGVydHlUYWJsZSgpLmdldChBY3Rpb25JbnB1dHMuTk9ERUlEKSkpOwotICAgICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgaWYgKGNvbmZpcm0oIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX1FVRVNUSU9OX1JFTU9WRV9TRVJWSUNFX05PREUiKSklPiIpKQotICAgIHBlcnNwZWN0aXZlV29ya0FyZWEubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KENsZWFyTmF2aWdhdG9yTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZCkpKSU+IjsKLTwvc2NyaXB0PgotPCUKLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9hY3Rpb25zL05ld05vZGVBY3Rpb24uaW5jIiAlPgotPCUKLSAgIH0KLSU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9TZXJ2aWNlSW50ZXJmYWNlR2V0QnVzaW5lc3Nlc0FjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9TZXJ2aWNlSW50ZXJmYWNlR2V0QnVzaW5lc3Nlc0FjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1YjI4NzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvU2VydmljZUludGVyZmFjZUdldEJ1c2luZXNzZXNBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIFNlcnZpY2VJbnRlcmZhY2VHZXRCdXNpbmVzc2VzQWN0aW9uIGFjdGlvbiA9IG5ldyBTZXJ2aWNlSW50ZXJmYWNlR2V0QnVzaW5lc3Nlc0FjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotICAgYm9vbGVhbiBzaUV4aXN0cyA9IGFjdGlvbi52YWxpZGF0ZVNlcnZpY2VJbnRlcmZhY2UoKTsKLQotICAgaWYgKCFzaUV4aXN0cykKLSAgIHsKLSAgICAgaW50IG5vZGVJZCA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZykoYWN0aW9uLmdldFByb3BlcnR5VGFibGUoKS5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpKTsKLSAgICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGlmIChjb25maXJtKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19RVUVTVElPTl9SRU1PVkVfU0lfTk9ERSIpKSU+IikpCi0gICAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoQ2xlYXJOYXZpZ2F0b3JOb2RlQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlkKSkpJT4iOwotPC9zY3JpcHQ+Ci08JQotICAgfQotICAgZWxzZQotICAgewotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTmV3Tm9kZUFjdGlvbi5pbmMiICU+Ci08JQotICAgfQotJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1NlcnZpY2VJbnRlcmZhY2VHZXRTZXJ2aWNlc0FjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9TZXJ2aWNlSW50ZXJmYWNlR2V0U2VydmljZXNBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjk2N2IxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1NlcnZpY2VJbnRlcmZhY2VHZXRTZXJ2aWNlc0FjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgU2VydmljZUludGVyZmFjZUdldFNlcnZpY2VzQWN0aW9uIGFjdGlvbiA9IG5ldyBTZXJ2aWNlSW50ZXJmYWNlR2V0U2VydmljZXNBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgIGJvb2xlYW4gc2lFeGlzdHMgPSBhY3Rpb24udmFsaWRhdGVTZXJ2aWNlSW50ZXJmYWNlKCk7Ci0KLSAgIGlmICghc2lFeGlzdHMpCi0gICB7Ci0gICAgIGludCBub2RlSWQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpKGFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCkuZ2V0KEFjdGlvbklucHV0cy5OT0RFSUQpKSk7Ci0gICAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBpZiAoY29uZmlybSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfUVVFU1RJT05fUkVNT1ZFX1NJX05PREUiKSklPiIpKQotICAgIHBlcnNwZWN0aXZlV29ya0FyZWEubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KENsZWFyTmF2aWdhdG9yTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKG5vZGVJZCkpKSU+IjsKLTwvc2NyaXB0PgotPCUKLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9hY3Rpb25zL05ld05vZGVBY3Rpb24uaW5jIiAlPgotPCUKLSAgIH0KLSU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9TaG93UHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9TaG93UHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0NmQxOGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvU2hvd1B1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgU2hvd1B1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb24gYWN0aW9uID0gbmV3IFNob3dQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gICBpZiAoIWFjdGlvbi5pc1N1YlF1ZXJ5SW5pdGlhdGVkKCkpCi0gICB7Ci0gICAgIGlmIChpbnB1dHNWYWxpZCkKLSAgICAgewotICAgICAgIC8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotICAgICAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLSAgICAgfQotJT4KLSAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICBwcm9wZXJ0aWVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvcHJvcGVydGllc19jb250ZW50LmpzcCIpKSU+IjsKLSAgICAgc3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotICAgPC9zY3JpcHQ+Ci08JQotICAgfQotICAgZWxzZQotICAgewotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTGF1bmNoU3ViUXVlcnlBY3Rpb24uaW5jIiAlPgotPCUKLSAgIH0KLSU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9Td2l0Y2hQZXJzcGVjdGl2ZUZyb21VRERJQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1N3aXRjaFBlcnNwZWN0aXZlRnJvbVVERElBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Y2UzNzRiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1N3aXRjaFBlcnNwZWN0aXZlRnJvbVVERElBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLS8vIFByZXBhcmUgdGhlIGFjdGlvbgotU3dpdGNoUGVyc3BlY3RpdmVGcm9tVURESUFjdGlvbiBhY3Rpb24gPSBuZXcgU3dpdGNoUGVyc3BlY3RpdmVGcm9tVURESUFjdGlvbihjb250cm9sbGVyKTsKLSAgIAotLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi1hY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotICAgCi0vLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLWJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLSAgIAotLy8gRGV0ZXJtaW5lIGlmIHRoZSBhY3Rpb24gd2FzIGFkZGVkIHRvIHRoZSBoaXN0b3J5IGxpc3QuCi1ib29sZWFuIGlzQWRkZWRUb0hpc3RvcnkgPSBhY3Rpb24uaXNBZGRlZFRvSGlzdG9yeSgpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9zd2l0Y2hwZXJzcGVjdGl2ZS5qc3AiIGZsdXNoPSJ0cnVlIi8+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9Ub2dnbGVDYXRlZ29yeU5vZGVBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVG9nZ2xlQ2F0ZWdvcnlOb2RlQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTU3NTNhZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9Ub2dnbGVDYXRlZ29yeU5vZGVBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPCUKLSAgIFN0cmluZyBzZXNzaW9uSWQgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuU0VTU0lPTklEKTsKLSAgIEh0dHBTZXNzaW9uIGN1cnJlbnRTZXNzaW9uID0gKEh0dHBTZXNzaW9uKWFwcGxpY2F0aW9uLmdldEF0dHJpYnV0ZShzZXNzaW9uSWQpOwotICAgQ29udHJvbGxlciBjb250cm9sbGVyID0gKENvbnRyb2xsZXIpY3VycmVudFNlc3Npb24uZ2V0QXR0cmlidXRlKCJjb250cm9sbGVyIik7Ci0lPiAgIAotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvY2JwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgVG9nZ2xlQ2F0ZWdvcnlOb2RlQWN0aW9uIGFjdGlvbiA9IG5ldyBUb2dnbGVDYXRlZ29yeU5vZGVBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotICAgLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi0gICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKGZhbHNlKTsKLQotICAgU3RyaW5nIHRyZWVDb250ZW50VmFyID0gYWN0aW9uLmdldFRyZWVDb250ZW50VmFyKCk7Ci0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLTwlCi0gICBpZiAodHJlZUNvbnRlbnRWYXIgIT0gbnVsbCkKLSAgIHsKLSU+Ci0gIGlmIChpc01pY3Jvc29mdEludGVybmV0RXhwbG9yZXIoKSkKLSAgICA8JT10cmVlQ29udGVudFZhciU+LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChhY3Rpb24uZ2V0VHJlZUNvbnRlbnRQYWdlKCkpKSU+IjsKLSAgZWxzZQotICAgIGNhdGVnb3J5QnJvd3NlcldpbmRvdy5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoYWN0aW9uLmdldFRyZWVDb250YWluZXJQYWdlKCkpKSU+IjsKLTwlCi0gICB9Ci0lPgotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVG9nZ2xlTmF2aWdhdG9yTm9kZUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9Ub2dnbGVOYXZpZ2F0b3JOb2RlQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWRlZTc0MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9Ub2dnbGVOYXZpZ2F0b3JOb2RlQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotVG9nZ2xlTmF2aWdhdG9yTm9kZUFjdGlvbiBhY3Rpb24gPSBuZXcgVG9nZ2xlTmF2aWdhdG9yTm9kZUFjdGlvbihjb250cm9sbGVyKTsKLQotLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi1hY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0vLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLWJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLQotLy8gRGV0ZXJtaW5lIGlmIHRoZSBhY3Rpb24gd2FzIGFkZGVkIHRvIHRoZSBoaXN0b3J5IGxpc3QuCi1ib29sZWFuIGlzQWRkZWRUb0hpc3RvcnkgPSBhY3Rpb24uaXNBZGRlZFRvSGlzdG9yeSgpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9hY3Rpb25zL1RvZ2dsZU5vZGVBY3Rpb24uaW5jIiAlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVHJhbnNmZXJTdWJRdWVyeVJlc3VsdHNBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVHJhbnNmZXJTdWJRdWVyeVJlc3VsdHNBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNmIyODAzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1RyYW5zZmVyU3ViUXVlcnlSZXN1bHRzQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICBUcmFuc2ZlclN1YlF1ZXJ5UmVzdWx0c0FjdGlvbiBhY3Rpb24gPSBuZXcgVHJhbnNmZXJTdWJRdWVyeVJlc3VsdHNBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgIGlmIChyZXF1ZXN0LmdldFBhcmFtZXRlcihVRERJQWN0aW9uSW5wdXRzLlNIT1dfUkVTVUxUU19UQVJHRVQpICE9IG51bGwpCi0gICAgIGFjdGlvbi5lbmFibGVTaG93UmVzdWx0c1RhcmdldCgpOwotICAgZWxzZQotICAgICBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0gICBOb2RlIHRhcmdldE5vZGUgPSBhY3Rpb24uZ2V0VGFyZ2V0Tm9kZSgpOwotICAgU3RyaW5nIHRhcmdldE5vZGVBbmNob3JOYW1lID0gdGFyZ2V0Tm9kZS5nZXRBbmNob3JOYW1lKCk7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIG5hdmlnYXRvckNvbnRlbnQuc2VsZWN0Tm9kZSgnPCU9dGFyZ2V0Tm9kZUFuY2hvck5hbWUlPicsJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCh0YXJnZXROb2RlLmdldE9wZW5JbWFnZVBhdGgoKSkpJT4nKTsKLSAgbmF2aWdhdG9yQ29udGVudC5sb2NhdGlvbi5oYXNoPScjPCU9dGFyZ2V0Tm9kZUFuY2hvck5hbWUlPic7Ci0gIHByb3BlcnRpZXNDb250YWluZXIubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCIpKSU+IjsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVHJhbnNmZXJUb0FkZENhdGVnb3J5RGF0YUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9UcmFuc2ZlclRvQWRkQ2F0ZWdvcnlEYXRhQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJkNjM1My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9UcmFuc2ZlclRvQWRkQ2F0ZWdvcnlEYXRhQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotPCUKLSAgIFN0cmluZyBzZXNzaW9uSWQgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuU0VTU0lPTklEKTsKLSAgIFN0cmluZyBjYXRlZ29yeVRNb2RlbEtleSA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuQ0FURUdPUllfVE1PREVMX0tFWSk7Ci0gICBIdHRwU2Vzc2lvbiBjdXJyZW50U2Vzc2lvbiA9IChIdHRwU2Vzc2lvbilhcHBsaWNhdGlvbi5nZXRBdHRyaWJ1dGUoc2Vzc2lvbklkKTsKLSAgIENvbnRyb2xsZXIgY29udHJvbGxlciA9IChDb250cm9sbGVyKWN1cnJlbnRTZXNzaW9uLmdldEF0dHJpYnV0ZSgiY29udHJvbGxlciIpOwotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIFVERElNYWluTm9kZSB1ZGRpTWFpbk5vZGUgPSAoVURESU1haW5Ob2RlKW5hdmlnYXRvck1hbmFnZXIuZ2V0Um9vdE5vZGUoKTsKLSAgIFJlZ2lzdHJ5Tm9kZSByZWdOb2RlID0gdWRkaU1haW5Ob2RlLmdldFJlZ2lzdHJ5Tm9kZShuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpKTsKLSAgIFJlZ2lzdHJ5RGV0YWlsc1Rvb2wgcmVnRGV0YWlsc1Rvb2wgPSByZWdOb2RlLmdldFJlZ0RldGFpbHNUb29sKCk7Ci0gICByZWdEZXRhaWxzVG9vbC5mbGFnUm93RXJyb3IoVURESUFjdGlvbklucHV0cy5VU0VSX0RFRklORURfQ0FURUdPUklFUyxjYXRlZ29yeVRNb2RlbEtleSk7Ci0gICByZWdOb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLnNldFNlbGVjdGVkVG9vbElkKHJlZ0RldGFpbHNUb29sLmdldFRvb2xJZCgpKTsKLSU+Ci08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChTZWxlY3ROYXZpZ2F0b3JOb2RlQWN0aW9uLmdldEFjdGlvbkxpbmsocmVnTm9kZS5nZXROb2RlSWQoKSxmYWxzZSkpKSU+IjsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVURESUFkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1VERElBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0ODRkZjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVURESUFkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy5TaG93UGVyc3BlY3RpdmVBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuVURESUFkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uIiU+Ci0KLQotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLS8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLVVERElBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbiBhY3Rpb24gPSBuZXcgVURESUFkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0vLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLWJvb2xlYW4gcGFyYW1WYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLWlmIChwYXJhbVZhbGlkKSB7Ci0gIC8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0gIGlmIChhY3Rpb25SZXN1bHQpIHsKLSU+Ci0gICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICBwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChTaG93UGVyc3BlY3RpdmVBY3Rpb24uZ2V0QWN0aW9uTGluayhBY3Rpb25JbnB1dHMuUEVSU1BFQ1RJVkVfV1NETCxmYWxzZSkpKSU+IjsKLSAgICA8L3NjcmlwdD4KLTwlCi0gIH0KLSAgZWxzZSB7Ci0lPgotICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgcHJvcGVydGllc0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3Byb3BlcnRpZXNfY29udGVudC5qc3AiKSklPiI7Ci0gICAgICBzdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci0gICAgPC9zY3JpcHQ+Ci08JQotICB9Ci19Ci0lPgotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1VERElJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1VERElJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTEwM2ZmNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9VRERJSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEuaW8uKiIgJT4KLQotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgVURESUltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb24gYWN0aW9uID0gbmV3IFVERElJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uKGNvbnRyb2xsZXIpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9hY3Rpb25zL0ltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbi5pbmMiICU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9VRERJSW1wb3J0V1NETFRvV29ya2JlbmNoQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1VERElJbXBvcnRXU0RMVG9Xb3JrYmVuY2hBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDU4MjBiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1VERElJbXBvcnRXU0RMVG9Xb3JrYmVuY2hBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBVRERJSW1wb3J0V1NETFRvV29ya2JlbmNoQWN0aW9uIGFjdGlvbiA9IG5ldyBVRERJSW1wb3J0V1NETFRvV29ya2JlbmNoQWN0aW9uKGNvbnRyb2xsZXIpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9hY3Rpb25zL0ltcG9ydFRvV29ya2JlbmNoQWN0aW9uLmluYyIgJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1VERElMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1VERElMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzMzMWY2My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9VRERJTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBVRERJTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbiBhY3Rpb24gPSBuZXcgVURESUxhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24oY29udHJvbGxlcik7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2FjdGlvbnMvTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbi5pbmMiICU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9VbnB1Ymxpc2hBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVW5wdWJsaXNoQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjAzNThlMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9VbnB1Ymxpc2hBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBVbnB1Ymxpc2hBY3Rpb24gYWN0aW9uID0gbmV3IFVucHVibGlzaEFjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTmV3Tm9kZUFjdGlvbi5pbmMiICU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9VcGRhdGVBY3Rpb24uaW5jIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVXBkYXRlQWN0aW9uLmluYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDhmNDAyYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9VcGRhdGVBY3Rpb24uaW5jCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JQotICAgaWYgKCFpbnB1dHNWYWxpZCkKLSAgIHsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgcHJvcGVydGllc0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3Byb3BlcnRpZXNfY29udGVudC5qc3AiKSklPiI7Ci0gIHN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLTwvc2NyaXB0PgotPCUKLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSAgICAgYm9vbGVhbiByZWZyZXNoUmVzdWx0ID0gYWN0aW9uLnJlZnJlc2hGcm9tUmVnaXN0cnkoKTsKLSAgICAgCi0gICAgIGlmICghcmVmcmVzaFJlc3VsdCkKLSAgICAgewotICAgICAgIHNlc3Npb24uc2V0QXR0cmlidXRlKFVERElBY3Rpb25JbnB1dHMuUFVCTElTSF9BQ1RJT04sYWN0aW9uKTsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgc3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotICBpZiAoY29uZmlybSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfUVVFU1RJT05fUFVCTElTSF9JVEVNIikpJT4iKSkKLSAgICBwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL1VwZGF0ZU5ld1B1Ymxpc2hBY3Rpb25KU1AuanNwIikpJT4iOwotICBlbHNlCi0gICAgcHJvcGVydGllc0NvbnRlbnQucmVxdWVzdFN1Ym1pdHRlZCA9IGZhbHNlOwotPC9zY3JpcHQ+Ci08JQotICAgICB9Ci0gICAgIGVsc2UKLSAgICAgewotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTmV3Tm9kZUFjdGlvbi5pbmMiICU+Ci08JQotICAgICB9Ci0gICB9Ci0lPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVXBkYXRlQnVzaW5lc3NBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVXBkYXRlQnVzaW5lc3NBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjQ3YWIwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1VwZGF0ZUJ1c2luZXNzQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4KLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgIFVwZGF0ZUJ1c2luZXNzQWN0aW9uIGFjdGlvbiA9IG5ldyBVcGRhdGVCdXNpbmVzc0FjdGlvbihjb250cm9sbGVyKTsKLQotICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICBib29sZWFuIGlucHV0c1ZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9hY3Rpb25zL1VwZGF0ZUFjdGlvbi5pbmMiICU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9VcGRhdGVOZXdQdWJsaXNoQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1VwZGF0ZU5ld1B1Ymxpc2hBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZmE1N2VmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1VwZGF0ZU5ld1B1Ymxpc2hBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgVXBkYXRlQWN0aW9uIGFjdGlvbiA9IChVcGRhdGVBY3Rpb24pc2Vzc2lvbi5nZXRBdHRyaWJ1dGUoVURESUFjdGlvbklucHV0cy5QVUJMSVNIX0FDVElPTik7Ci0gICBzZXNzaW9uLnJlbW92ZUF0dHJpYnV0ZShVRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hfQUNUSU9OKTsKLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSB0cnVlOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvTmV3Tm9kZUFjdGlvbi5pbmMiICU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9VcGRhdGVSZWdpc3RyeUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9ucy9VcGRhdGVSZWdpc3RyeUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmN2ViYmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVXBkYXRlUmVnaXN0cnlBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0lPgotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgVXBkYXRlUmVnaXN0cnlBY3Rpb24gYWN0aW9uID0gbmV3IFVwZGF0ZVJlZ2lzdHJ5QWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvVXBkYXRlQWN0aW9uLmluYyIgJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1VwZGF0ZVNlcnZpY2VBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVXBkYXRlU2VydmljZUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1MTRmNDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVXBkYXRlU2VydmljZUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSU+Ci08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBVcGRhdGVTZXJ2aWNlQWN0aW9uIGFjdGlvbiA9IG5ldyBVcGRhdGVTZXJ2aWNlQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gICBpZiAoIWlucHV0c1ZhbGlkKQotICAgewotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBwcm9wZXJ0aWVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvcHJvcGVydGllc19jb250ZW50LmpzcCIpKSU+IjsKLSAgc3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotPC9zY3JpcHQ+Ci08JQotICAgfQotICAgZWxzZQotICAgewotICAgICBib29sZWFuIHJlZnJlc2hTZXJ2aWNlUmVzdWx0ID0gYWN0aW9uLnJlZnJlc2hGcm9tUmVnaXN0cnkoKTsKLSAgICAgYm9vbGVhbiByZWZyZXNoQnVzaW5lc3NSZXN1bHQgPSBhY3Rpb24ucmVmcmVzaEJ1c2luZXNzRnJvbVJlZ2lzdHJ5KCk7Ci0gICAgIGlmICghcmVmcmVzaFNlcnZpY2VSZXN1bHQpCi0gICAgIHsKLSAgICAgICBzZXNzaW9uLnNldEF0dHJpYnV0ZShVRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hfQUNUSU9OLGFjdGlvbik7Ci0gICAgICAgaWYgKCFyZWZyZXNoQnVzaW5lc3NSZXN1bHQpCi0gICAgICAgewotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBpZiAoY29uZmlybSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfUVVFU1RJT05fU0VSVklDRV9QVUJMSVNIX0JVU0lORVNTIikpJT4iKSkKLSAgICBwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL1VwZGF0ZVNlcnZpY2VOZXdQdWJsaXNoQnVzaW5lc3NBY3Rpb25KU1AuanNwIikpJT4iOwotICBlbHNlCi0gICAgcHJvcGVydGllc0NvbnRlbnQucmVxdWVzdFN1Ym1pdHRlZCA9IGZhbHNlOwotPC9zY3JpcHQ+Ci08JQotICAgICAgIH0KLSAgICAgICBlbHNlCi0gICAgICAgewotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBpZiAoY29uZmlybSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfUVVFU1RJT05fUFVCTElTSF9JVEVNIikpJT4iKSkKLSAgICBwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL1VwZGF0ZU5ld1B1Ymxpc2hBY3Rpb25KU1AuanNwIikpJT4iOwotICBlbHNlCi0gICAgcHJvcGVydGllc0NvbnRlbnQucmVxdWVzdFN1Ym1pdHRlZCA9IGZhbHNlOwotPC9zY3JpcHQ+Ci08JQotICAgICAgIH0KLSAgICAgfQotICAgICBlbHNlCi0gICAgIHsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9hY3Rpb25zL05ld05vZGVBY3Rpb24uaW5jIiAlPgotPCUKLSAgICAgfQotICAgfQotJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1VwZGF0ZVNlcnZpY2VJbnRlcmZhY2VBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVXBkYXRlU2VydmljZUludGVyZmFjZUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2MThiYzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVXBkYXRlU2VydmljZUludGVyZmFjZUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSU+Ci08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICBVcGRhdGVTZXJ2aWNlSW50ZXJmYWNlQWN0aW9uIGFjdGlvbiA9IG5ldyBVcGRhdGVTZXJ2aWNlSW50ZXJmYWNlQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2FjdGlvbnMvVXBkYXRlQWN0aW9uLmluYyIgJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zL1VwZGF0ZVNlcnZpY2VOZXdQdWJsaXNoQnVzaW5lc3NBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVXBkYXRlU2VydmljZU5ld1B1Ymxpc2hCdXNpbmVzc0FjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhZDRlMWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2FjdGlvbnMvVXBkYXRlU2VydmljZU5ld1B1Ymxpc2hCdXNpbmVzc0FjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0gICBVcGRhdGVTZXJ2aWNlQWN0aW9uIGFjdGlvbiA9IChVcGRhdGVTZXJ2aWNlQWN0aW9uKXNlc3Npb24uZ2V0QXR0cmlidXRlKFVERElBY3Rpb25JbnB1dHMuUFVCTElTSF9BQ1RJT04pOwotICAgc2Vzc2lvbi5yZW1vdmVBdHRyaWJ1dGUoVURESUFjdGlvbklucHV0cy5QVUJMSVNIX0FDVElPTik7Ci0KLSAgIFJlZ1B1Ymxpc2hUb29sIHJlZ1B1Ymxpc2hUb29sID0gYWN0aW9uLnNldHVwUmVnUHVibGlzaFRvb2woKTsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQocmVnUHVibGlzaFRvb2wuZ2V0U2VsZWN0VG9vbEFjdGlvbkhyZWYoZmFsc2UpKSklPiI7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zX2NvbnRhaW5lci5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvYWN0aW9uc19jb250YWluZXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTFhYzI3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9hY3Rpb25zX2NvbnRhaW5lci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9BQ1RJT05TX0NPTlRBSU5FUiIpJT48L3RpdGxlPgotPC9oZWFkPgotPGZyYW1lc2V0IHJvd3M9IjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKCklPiIgYmdjb2xvcj0iI0VDRTlEOCI+Ci0gIDxmcmFtZSBuYW1lPSI8JT1VRERJRnJhbWVOYW1lcy5QUk9QRVJUSUVTX0NPTlRBSU5FUiU+IiB0aXRsZT0iPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1BST1BFUlRJRVNfQ09OVEFJTkVSIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvcHJvcGVydGllc19jb250YWluZXIuanNwIikpJT4iIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTEgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MD4KLSAgPGZyYW1lIG5hbWU9IjwlPVVERElGcmFtZU5hbWVzLlNUQVRVU19DT05UQUlORVIlPiIgdGl0bGU9IjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9TVEFUVVNfQ09OVEFJTkVSIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvc3RhdHVzX2NvbnRhaW5lci5qc3AiKSklPiIgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MSBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wPgotPC9mcmFtZXNldD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9jYXRlZ29yeV9icm93c2VyLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9jYXRlZ29yeV9icm93c2VyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDU2Mzc3Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvY2F0ZWdvcnlfYnJvd3Nlci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPCUKLSAgIFN0cmluZyBzZXNzaW9uSWQgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuU0VTU0lPTklEKTsKLSAgIFN0cmluZyBjYXRlZ29yeVRNb2RlbEtleSA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuQ0FURUdPUllfVE1PREVMX0tFWSk7Ci0gICBIdHRwU2Vzc2lvbiBjdXJyZW50U2Vzc2lvbiA9IChIdHRwU2Vzc2lvbilhcHBsaWNhdGlvbi5nZXRBdHRyaWJ1dGUoc2Vzc2lvbklkKTsKLSAgIENvbnRyb2xsZXIgY29udHJvbGxlciA9IChDb250cm9sbGVyKWN1cnJlbnRTZXNzaW9uLmdldEF0dHJpYnV0ZSgiY29udHJvbGxlciIpOwotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICB1ZGRpUGVyc3BlY3RpdmUuc2V0Q2F0ZWdvcnlUTW9kZWxLZXkoY2F0ZWdvcnlUTW9kZWxLZXkpOwotICAgCi0gICBTdHJpbmdCdWZmZXIgdG9vbGJhckxpbmsgPSBuZXcgU3RyaW5nQnVmZmVyKCJ1ZGRpL2NhdGVnb3J5X3Rvb2xiYXIuanNwPyIpOwotICAgdG9vbGJhckxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpLmFwcGVuZCgnPScpLmFwcGVuZChzZXNzaW9uSWQpOwotJT4KLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJUSVRMRV9DQVRFR09SWV9CUk9XU0VSIiklPjwvdGl0bGU+Ci08L2hlYWQ+Ci08ZnJhbWVzZXQgcm93cz0iMCwzMywqIiBib3JkZXI9MCBiZ2NvbG9yPSIjRUNFOUQ4Ij4KLSAgPGZyYW1lIG5hbWU9IjwlPVVERElGcmFtZU5hbWVzLkNBVEVHT1JJRVNfV09SS0FSRUElPiIgdGl0bGU9IjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9DQVRFR09SSUVTX1dPUktBUkVBIiklPiIgZnJhbWVib3JkZXI9MCBub3Jlc2l6ZT4KLSAgPGZyYW1lIG5hbWU9IjwlPVVERElGcmFtZU5hbWVzLkNBVEVHT1JJRVNfVE9PTEJBUiU+IiB0aXRsZT0iPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX0NBVEVHT1JJRVNfVE9PTEJBUiIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KHRvb2xiYXJMaW5rLnRvU3RyaW5nKCkpKSU+IiBub3Jlc2l6ZSBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci0gIDxmcmFtZSBuYW1lPSI8JT1VRERJRnJhbWVOYW1lcy5DQVRFR09SSUVTX0NPTlRFTlQlPiIgdGl0bGU9IjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9DQVRFR09SSUVTX0NPTlRFTlQiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChPcGVuQ2F0ZWdvcnlCcm93c2VyQWN0aW9uLmdldENhdGVnb3J5Q29udGVudFBhZ2Uoc2Vzc2lvbklkLGNhdGVnb3J5VE1vZGVsS2V5KSkpJT4iIG5vcmVzaXplIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTAgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MD4KLTwvZnJhbWVzZXQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvY2F0ZWdvcnlfY29udGVudC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvY2F0ZWdvcnlfY29udGVudC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxN2ZlZGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2NhdGVnb3J5X2NvbnRlbnQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiIgJT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi08anNwOnVzZUJlYW4gaWQ9ImNvbW1vbkNhdGVnb3J5TW9kZWxzIiBjbGFzcz0iamF2YS51dGlsLkhhc2h0YWJsZSIgc2NvcGU9ImFwcGxpY2F0aW9uIi8+Ci08JQotICAgU3RyaW5nIHNlc3Npb25JZCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpOwotICAgU3RyaW5nIGNhdGVnb3J5VE1vZGVsS2V5ID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoVURESUFjdGlvbklucHV0cy5DQVRFR09SWV9UTU9ERUxfS0VZKTsKLSAgIEh0dHBTZXNzaW9uIGN1cnJlbnRTZXNzaW9uID0gKEh0dHBTZXNzaW9uKWFwcGxpY2F0aW9uLmdldEF0dHJpYnV0ZShzZXNzaW9uSWQpOwotICAgQ29udHJvbGxlciBjb250cm9sbGVyID0gKENvbnRyb2xsZXIpY3VycmVudFNlc3Npb24uZ2V0QXR0cmlidXRlKCJjb250cm9sbGVyIik7Ci0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSU+Ci08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfQ0FURUdPUklFU19DT05URU5UIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3RyZWV2aWV3LmNzcyIpKSU+Ij4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci0gIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci0gIDwvc2NyaXB0PgotICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy90cmVldmlldy5qcyIpKSU+Ij4KLSAgPC9zY3JpcHQ+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgZnVuY3Rpb24gdHJhbnNmZXJUb0FkZENhdGVnb3J5RGF0YSgpCi0gIHsKLSAgICB0b3Aub3BlbmVyLnRvcC5mcmFtZXNbIjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiJdLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChUcmFuc2ZlclRvQWRkQ2F0ZWdvcnlEYXRhQWN0aW9uLmdldEFjdGlvbkxpbmsoc2Vzc2lvbklkLGNhdGVnb3J5VE1vZGVsS2V5KSkpJT4iOwotICB9ICAKLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPCUgICAKLSAgIC8vIENoZWNrIGlmIHRoZSBjYXRlZ29yeSBpcyBhIGNvbW1vbiBjYXRlZ29yeS4KLSAgIENhdGVnb3J5TW9kZWwgY2F0ZWdvcnlNb2RlbCA9IChDYXRlZ29yeU1vZGVsKWNvbW1vbkNhdGVnb3J5TW9kZWxzLmdldChjYXRlZ29yeVRNb2RlbEtleSk7Ci0gICBpZiAoY2F0ZWdvcnlNb2RlbCA9PSBudWxsKQotICAgewotICAgICAvLyBUaGUgY2F0ZWdvcnkgaXMgdXNlci1kZWZpbmVkLiAgICAgCi0gICAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgICBVRERJTWFpbk5vZGUgdWRkaU1haW5Ob2RlID0gKFVERElNYWluTm9kZSluYXZpZ2F0b3JNYW5hZ2VyLmdldFJvb3ROb2RlKCk7Ci0gICAgIFJlZ2lzdHJ5Tm9kZSByZWdOb2RlID0gdWRkaU1haW5Ob2RlLmdldFJlZ2lzdHJ5Tm9kZShuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpKTsKLSAgICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGUuZ2V0VHJlZUVsZW1lbnQoKTsgICAKLSAgICAgY2F0ZWdvcnlNb2RlbCA9IChDYXRlZ29yeU1vZGVsKXJlZ0VsZW1lbnQuZ2V0VXNlckRlZmluZWRDYXRlZ29yeShjYXRlZ29yeVRNb2RlbEtleSk7Ci0gICB9Ci0gICBieXRlIHJjID0gQ2F0ZWdvcnlNb2RlbC5PUEVSQVRJT05fU1VDQ0VTU0ZVTDsKLSAgIGlmICghY2F0ZWdvcnlNb2RlbC5pc0RhdGFMb2FkZWQoKSkKLSAgIHsKLSAgICAgc3luY2hyb25pemVkKGNhdGVnb3J5TW9kZWwpCi0gICAgIHsKLSAgICAgICBpZiAoIWNhdGVnb3J5TW9kZWwuaXNEYXRhTG9hZGVkKCkpCi0gICAgICAgICByYyA9IGNhdGVnb3J5TW9kZWwubG9hZEZyb21EZWZhdWx0RGF0YUZpbGUoKTsKLSAgICAgfQotICAgfQotICAgaWYgKHJjICE9IENhdGVnb3J5TW9kZWwuT1BFUkFUSU9OX1NVQ0NFU1NGVUwpCi0gICB7Ci0lPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gIDx0YWJsZT4KLSAgICA8dHI+Ci0gICAgICA8dGQ+Ci0gICAgICAgIDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19OT19DQVRFR09SWV9EQVRBIixjYXRlZ29yeU1vZGVsLmdldERpc3BsYXlOYW1lKCkpJT4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHI+Ci0gICAgICA8dGQgaGVpZ2h0PTEwIHZhbGlnbj0iYm90dG9tIj4mbmJzcDs8L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPgotICAgICAgPHRkPgotICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9BRERfQ0FURUdPUllfREFUQSIsImphdmFzY3JpcHQ6dHJhbnNmZXJUb0FkZENhdGVnb3J5RGF0YSgpIiklPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPC9kaXY+Ci08JSAgIAotICAgfQotICAgZWxzZQotICAgewotICAgICBOb2RlTWFuYWdlciBjYXRlZ29yeU1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0Q2F0ZWdvcnlNYW5hZ2VyKGNhdGVnb3J5TW9kZWwpOwotICAgICBTdHJpbmcgc2VsZWN0ZWRBbmNob3JOYW1lID0gIiI7Ci0gICAgIGludCBmb2N1c2VkTm9kZUlkID0gY2F0ZWdvcnlNYW5hZ2VyLmdldEZvY3VzZWROb2RlSWQoKTsKLSAgICAgU3RyaW5nIGZvY3VzZWRBbmNob3JOYW1lID0gU3RyaW5nLnZhbHVlT2YoZm9jdXNlZE5vZGVJZCk7Ci0gICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gY2F0ZWdvcnlNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgICBpZiAoc2VsZWN0ZWROb2RlICE9IG51bGwpCi0gICAgIHsKLSAgICAgICBzZWxlY3RlZEFuY2hvck5hbWUgPSBzZWxlY3RlZE5vZGUuZ2V0QW5jaG9yTmFtZSgpOwotICAgICAgIGlmIChmb2N1c2VkTm9kZUlkID09IHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSkKLSAgICAgICAgIGZvY3VzZWRBbmNob3JOYW1lID0gc2VsZWN0ZWRBbmNob3JOYW1lOwotICAgICB9Ci0lPgotPGRpdiBpZD0idHJlZWNvbnRlbnRib3JkZXIiPgotPCU9Y2F0ZWdvcnlNYW5hZ2VyLnJlbmRlclRyZWVWaWV3KHJlc3BvbnNlKSU+Ci08L2Rpdj4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBzZWxmLmxvY2F0aW9uLmhhc2g9IiM8JT1mb2N1c2VkQW5jaG9yTmFtZSU+IgotICBzZXRTZWxlY3RlZEFuY2hvck5hbWUoIjwlPXNlbGVjdGVkQW5jaG9yTmFtZSU+Iik7Ci08L3NjcmlwdD4KLTwlCi0gICB9Ci0lPiAgIAotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2NhdGVnb3J5X3Rvb2xiYXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2NhdGVnb3J5X3Rvb2xiYXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNWU2YjQ5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9jYXRlZ29yeV90b29sYmFyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08JQotICAgU3RyaW5nIHNlc3Npb25JZCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpOwotICAgSHR0cFNlc3Npb24gY3VycmVudFNlc3Npb24gPSAoSHR0cFNlc3Npb24pYXBwbGljYXRpb24uZ2V0QXR0cmlidXRlKHNlc3Npb25JZCk7Ci0gICBDb250cm9sbGVyIGNvbnRyb2xsZXIgPSAoQ29udHJvbGxlciljdXJyZW50U2Vzc2lvbi5nZXRBdHRyaWJ1dGUoImNvbnRyb2xsZXIiKTsKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4KLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9DQVRFR09SSUVTX1RPT0xCQVIiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3MvdG9vbGJhci5jc3MiKSklPiI+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJ0b29sYmFyYm9keW1hcmdpbiIgb25VbmxvYWQ9InRvcC5vcGVuZXIuY2F0ZWdvcnlXaW5kb3dDbG9zZWQ9dHJ1ZSI+Ci08ZGl2IGlkPSJ0b29sYmFyYm9yZGVyIj4KLSAgPGRpdiBpZD0idG9vbGJhciI+Ci0gICAgPHRhYmxlIHdpZHRoPSIxMDAlIiBoZWlnaHQ9MjUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGJvcmRlcj0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiIHdpZHRoPTI1IGhlaWdodD0yNT48aW1nIGNsYXNzPSJub3JtYWwiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2ltYWdlcy9jYXRlZ29yeS5naWYiKSklPiIgd2lkdGg9MTYgaGVpZ2h0PTE2PjwvdGQ+Ci0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImxlZnQiIHdpZHRoPSIqIiBoZWlnaHQ9MjUgbm93cmFwIGNsYXNzPSJ0ZXh0Ij48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0NBVEVHT1JJRVMiKSU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgPC9kaXY+Ci08L2Rpdj4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICB0b3Aub3BlbmVyLmNhdGVnb3J5V2luZG93Q2xvc2VkPWZhbHNlOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZGF0YS8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2RhdGEvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZGF0YS8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9kYXRhL2dlby1kYXRhLnR4dCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9kYXRhL2dlby1kYXRhLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk3OGFiZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZGF0YS9nZW8tZGF0YS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMzgzICswLDAgQEAKLWdlbyMtLSNXb3JsZCMtLQotZ2VvI0FFI1VuaXRlZCBBcmFiIEVtaXJhdGVzIy0tCi1nZW8jQUYjQWZnaGFuaXN0YW4jLS0KLWdlbyNBRyNBbnRpZ3VhIEFuZCBCYXJidWRhIy0tCi1nZW8jQUkjQW5ndWlsbGEjLS0KLWdlbyNBTCNBbGJhbmlhIy0tCi1nZW8jQU0jQXJtZW5pYSMtLQotZ2VvI0FOI05ldGhlcmxhbmRzIEFudGlsbGVzIy0tCi1nZW8jQU8jQW5nb2xhIy0tCi1nZW8jQVEjQW50YXJjdGljYSMtLQotZ2VvI0FSI0FyZ2VudGluYSMtLQotZ2VvI0FSLUEjU2FsdGEjQVIKLWdlbyNBUi1CI0J1ZW5vcyBBaXJlcyNBUgotZ2VvI0FSLUMjRGlzdHJpdG8gRmVkZXJhbCNBUgotZ2VvI0FSLUQjU2FuIEx1aXMjQVIKLWdlbyNBUi1FI0VudHJlIFJpb3MjQVIKLWdlbyNBUi1GI0xhIFJpb2phI0FSCi1nZW8jQVItRyNTYW50aWFnbyBEZWwgRXN0ZXJvI0FSCi1nZW8jQVItSCNDaGFjbyNBUgotZ2VvI0FSLUojU2FuIEp1YW4jQVIKLWdlbyNBUi1LI0NhdGFtYXJjYSNBUgotZ2VvI0FSLUwjTGEgUGFtcGEjQVIKLWdlbyNBUi1NI01lbmRvemEjQVIKLWdlbyNBUi1OI01pc2lvbmVzI0FSCi1nZW8jQVItUCNGb3Jtb3NhI0FSCi1nZW8jQVItUSNOZXVxdWVuI0FSCi1nZW8jQVItUiNSaW8gTmVncm8jQVIKLWdlbyNBUi1TI1NhbnRhIEZlI0FSCi1nZW8jQVItVCNUdWN1bWFuI0FSCi1nZW8jQVItVSNDaHVidXQjQVIKLWdlbyNBUi1WI1RpZXJyYSBEZWwgRnVlZ28jQVIKLWdlbyNBUi1XI0NvcnJpZW50ZXMjQVIKLWdlbyNBUi1YI0NvcmRvYmEjQVIKLWdlbyNBUi1ZI0p1anV5I0FSCi1nZW8jQVItWiNTYW50YSBDcnV6I0FSCi1nZW8jQVMjQW1lcmljYW4gU2Ftb2EjLS0KLWdlbyNBVCNBdXN0cmlhIy0tCi1nZW8jQVUjQXVzdHJhbGlhIy0tCi1nZW8jQVUtQ1QjQXVzdHJhbGlhbiBDYXBpdGFsIFRlcnJpdG9yeSNBVQotZ2VvI0FVLU5TI05ldyBTb3V0aCBXYWxlcyNBVQotZ2VvI0FVLU5UI05vcnRoZXJuIFRlcnJpdG9yeSNBVQotZ2VvI0FVLVFMI1F1ZWVuc2xhbmQjQVUKLWdlbyNBVS1TQSNTb3V0aCBBdXN0cmFsaWEjQVUKLWdlbyNBVS1UUyNUYXNtYW5pYSNBVQotZ2VvI0FVLVZJI1ZpY3RvcmlhI0FVCi1nZW8jQVUtV0EjV2VzdGVybiBBdXN0cmFsaWEjQVUKLWdlbyNBVyNBcnViYSMtLQotZ2VvI0FaI0F6ZXJiYWlqYW4jLS0KLWdlbyNCQSNCb3NuaWEtSGVyY2Vnb3ZpbmEjLS0KLWdlbyNCQiNCYXJiYWRvcyMtLQotZ2VvI0JEI0JhbmdsYWRlc2gjLS0KLWdlbyNCRSNCZWxnaXVtIy0tCi1nZW8jQkYjQnVya2luYSBGYXNvIy0tCi1nZW8jQkcjQnVsZ2FyaWEjLS0KLWdlbyNCSCNCYWhyYWluIy0tCi1nZW8jQkkjQnVydW5kaSMtLQotZ2VvI0JKI0JlbmluIy0tCi1nZW8jQk0jQmVybXVkYSMtLQotZ2VvI0JOI0JydW5laSBEYXJ1c3NhbGFtIy0tCi1nZW8jQk8jQm9saXZpYSMtLQotZ2VvI0JSI0JyYXppbCMtLQotZ2VvI0JSLUFDI0FjcmUjQlIKLWdlbyNCUi1BTCNBbGFnb2FzI0JSCi1nZW8jQlItQU0jQW1hem9uYXMjQlIKLWdlbyNCUi1BUCNBbWFwYSNCUgotZ2VvI0JSLUJBI0JhaGlhI0JSCi1nZW8jQlItQ0UjQ2VhcmEjQlIKLWdlbyNCUi1ERiNEaXN0cml0byBGZWRlcmFsI0JSCi1nZW8jQlItRVMjRXNwaXJpdG8gU2FudG8jQlIKLWdlbyNCUi1HTyNHb2lhcyNCUgotZ2VvI0JSLU1BI01hcmFuaGFvI0JSCi1nZW8jQlItTUcjTWluYXMgR2VyYWlzI0JSCi1nZW8jQlItTVMjTWF0byBHcm9zc28gRG8gU3VsI0JSCi1nZW8jQlItTVQjTWF0byBHcm9zc28jQlIKLWdlbyNCUi1QQSNQYXJhI0JSCi1nZW8jQlItUEIjUGFyYWliYSNCUgotZ2VvI0JSLVBFI1Blcm5hbWJ1Y28jQlIKLWdlbyNCUi1QSSNQaWF1aSNCUgotZ2VvI0JSLVBSI1BhcmFuYSNCUgotZ2VvI0JSLVJKI1JpbyBEZSBKYW5laXJvI0JSCi1nZW8jQlItUk4jUmlvIEdyYW5kZSBEbyBOb3J0ZSNCUgotZ2VvI0JSLVJPI1JvbmRvbmlhI0JSCi1nZW8jQlItUlIjUm9yYWltYSNCUgotZ2VvI0JSLVJTI1JpbyBHcmFuZGUgRG8gU3VsI0JSCi1nZW8jQlItU0MjU2FudGEgQ2F0YXJpbmEjQlIKLWdlbyNCUi1TRSNTZXJnaXBlI0JSCi1nZW8jQlItU1AjU2FvIFBhdWxvI0JSCi1nZW8jQlItVE8jVG9jYW50aW5hI0JSCi1nZW8jQlMjQmFoYW1hcyMtLQotZ2VvI0JUI0JodXRhbiMtLQotZ2VvI0JVI0J1cm1hIChTZWUgTU0gTXlhbm1hcikjLS0KLWdlbyNCVyNCb3Rzd2FuYSMtLQotZ2VvI0JZI0JlbGFydXMjLS0KLWdlbyNCWS1CUiNCcmVzdHNrYXlhIHZvYmxhc3RzJyNCWQotZ2VvI0JZLUhPI0hvbXllbCdza2F5YSB2b2JsYXN0cycjQlkKLWdlbyNCWS1IUiNIcm9kemVuc2theWEgdm9ibGFzdHMnI0JZCi1nZW8jQlktTUEjTWFoaWx5b3dza2F5YSB2b2JsYXN0cycjQlkKLWdlbyNCWS1NSSNNaW5za2F5YSB2b2JsYXN0cycjQlkKLWdlbyNCWS1WSSNWaXRzeWVic2theWEgdm9ibGFzdHMnI0JZCi1nZW8jQlojQmVsaXplIy0tCi1nZW8jQ0EjQ2FuYWRhIy0tCi1nZW8jQ0EtQUIjQWxiZXJ0YSNDQQotZ2VvI0NBLUJDI0JyaXRpc2ggQ29sdW1iaWEjQ0EKLWdlbyNDQS1NQiNNYW5pdG9iYSNDQQotZ2VvI0NBLU5CI05ldyBCcnVuc3dpY2sjQ0EKLWdlbyNDQS1ORiNOZXdmb3VuZGxhbmQjQ0EKLWdlbyNDQS1OUyNOb3ZhIFNjb3RpYSNDQQotZ2VvI0NBLU5UI05vcnRod2VzdCBUZXJyaXRvcmllcyNDQQotZ2VvI0NBLU5VI051bmF2dXQjQ0EKLWdlbyNDQS1PTiNPbnRhcmlvI0NBCi1nZW8jQ0EtUEUjUHJpbmNlIEVkd2FyZCBJc2xhbmQjQ0EKLWdlbyNDQS1RQyNRdWViZWMjQ0EKLWdlbyNDQS1TSyNTYXNrYXRjaGV3YW4jQ0EKLWdlbyNDQS1ZVCNZdWtvbiBUZXJyaXRvcnkjQ0EKLWdlbyNDQyNDb2NvcyAoS2VlbGluZykgSXNsYW5kcyMtLQotZ2VvI0NEIyJDb25nbywgRGVtb2NyYXRpYyBSZXB1YmxpYyBvZiIjLS0KLWdlbyNDRiNDZW50cmFsIEFmcmljYW4gUmVwdWJsaWMjLS0KLWdlbyNDRyNDb25nbyMtLQotZ2VvI0NII1N3aXR6ZXJsYW5kIy0tCi1nZW8jQ0gtQUcjQWFyZ2F1I0NICi1nZW8jQ0gtQUkjQXBwZW56ZWxsIElubmVyLVJob2RlbiNDSAotZ2VvI0NILUFSI0FwcGVuemVsbCBBdXNzZXItUmhvZGVuI0NICi1nZW8jQ0gtQkUjQmVybiNDSAotZ2VvI0NILUJMI0Jhc2VsLUxhbmRzY2hhZnQjQ0gKLWdlbyNDSC1CUyNCYXNlbC1TdGFkdCNDSAotZ2VvI0NILUZSI0ZyaWJvdXJnI0NICi1nZW8jQ0gtR0UjR2Vuw6h2ZSNDSAotZ2VvI0NILUdMI0dsYXJ1cyNDSAotZ2VvI0NILUdSI0dyYXViw7xuZGVuI0NICi1nZW8jQ0gtSlUjSnVyYSNDSAotZ2VvI0NILUxVI0x1emVybiNDSAotZ2VvI0NILU5FI05ldWNoYXRlbCNDSAotZ2VvI0NILU5XI05pZHdhbGRlbiNDSAotZ2VvI0NILU9XI09id2FsZGVuI0NICi1nZW8jQ0gtU0cjU3QgR2FsbGVuI0NICi1nZW8jQ0gtU0gjU2NoYWZmaGF1c2VuI0NICi1nZW8jQ0gtU08jU29sb3RodXJuI0NICi1nZW8jQ0gtU1ojU2Nod3l6I0NICi1nZW8jQ0gtVEcjVGh1cmdhdSNDSAotZ2VvI0NILVRJI1RpY2lubyNDSAotZ2VvI0NILVVSI1VyaSNDSAotZ2VvI0NILVZEI1ZhdWQjQ0gKLWdlbyNDSC1WUyNWYWxhaXMjQ0gKLWdlbyNDSC1aRyNadWcjQ0gKLWdlbyNDSC1aSCNaw7xyaWNoI0NICi1nZW8jQ0kjQ290ZSBEJ0l2b2lyZSMtLQotZ2VvI0NLI0Nvb2sgSXNsYW5kcyMtLQotZ2VvI0NMI0NoaWxlIy0tCi1nZW8jQ00jQ2FtZXJvb24jLS0KLWdlbyNDTiNDaGluYSMtLQotZ2VvI0NOLTExI0JlaWppbmcjQ04KLWdlbyNDTi0xMiNUaWFuamluI0NOCi1nZW8jQ04tMTMjSGViZWkjQ04KLWdlbyNDTi0xNCNTaGFueGkjQ04KLWdlbyNDTi0xNSNOZWkgTW9uZ29sI0NOCi1nZW8jQ04tMjEjTGlhb25pbmcjQ04KLWdlbyNDTi0yMiNKaWxpbiNDTgotZ2VvI0NOLTIzI0hlaWxvbmdqaWFuZyNDTgotZ2VvI0NOLTMxI1NoYW5naGFpI0NOCi1nZW8jQ04tMzIjSmlhbmdzdSNDTgotZ2VvI0NOLTMzI1poZWppYW5nI0NOCi1nZW8jQ04tMzQjQW5odWkjQ04KLWdlbyNDTi0zNSNGdWppYW4jQ04KLWdlbyNDTi0zNiNKaWFuZ3hpI0NOCi1nZW8jQ04tMzcjU2hhbmRvbmcjQ04KLWdlbyNDTi00MSNIZW5hbiNDTgotZ2VvI0NOLTQyI0h1YmVpI0NOCi1nZW8jQ04tNDMjSHVuYW4jQ04KLWdlbyNDTi00NCNHdWFuZ2RvbmcjQ04KLWdlbyNDTi00NSNHdWFuZ3hpI0NOCi1nZW8jQ04tNDYjSGFpbmFuI0NOCi1nZW8jQ04tNTEjU2ljaHVhbiNDTgotZ2VvI0NOLTUyI0d1aXpob3UjQ04KLWdlbyNDTi01MyNZdW5uYW4jQ04KLWdlbyNDTi01NCNYaXphbmcjQ04KLWdlbyNDTi02MSNTaGFhbnhpI0NOCi1nZW8jQ04tNjIjR2Fuc3UjQ04KLWdlbyNDTi02MyNRaW5naGFpI0NOCi1nZW8jQ04tNjQjTmluZ3hpYSNDTgotZ2VvI0NOLTY1I1hpbmppYW5nI0NOCi1nZW8jQ04tNzEjVGFpd2FuI0NOCi1nZW8jQ04tOTEjWGlhbmdnYW5nIChIb25nIEtvbmcpI0NOCi1nZW8jQ04tOTIjQW9tZW4gKE1hY2F1KSNDTgotZ2VvI0NPI0NvbG9tYmlhIy0tCi1nZW8jQ1IjQ29zdGEgUmljYSMtLQotZ2VvI0NTI0Zvcm1lciBDemVjaG9zbG92YWtpYSMtLQotZ2VvI0NVI0N1YmEjLS0KLWdlbyNDViNDYXBlIFZlcmRlIy0tCi1nZW8jQ1gjQ2hyaXN0bWFzIElzbGFuZHMjLS0KLWdlbyNDWSNDeXBydXMjLS0KLWdlbyNDWiNDemVjaCBSZXB1YmxpYyMtLQotZ2VvI0RFIyJHZXJtYW55LCBGZWRlcmFsIFJlcHVibGljIG9mIiMtLQotZ2VvI0RFLUJFI0JlcmxpbiNERQotZ2VvI0RFLUJSI0JyYW5kZW5idXJnI0RFCi1nZW8jREUtQlcjQmFkZW4tV8O8cnR0ZW1iZXJnI0RFCi1nZW8jREUtQlkjQmF5ZXJuI0RFCi1nZW8jREUtSEIjQnJlbWVuIChIYW5zZXN0YWR0KSNERQotZ2VvI0RFLUhFI0hlc3NlbiNERQotZ2VvI0RFLUhII0hhbWJ1cmcgKEhhbnNlc3RhZHQpI0RFCi1nZW8jREUtTVYjTWVja2xlbmJ1cmctVm9ycG9tbWVybiNERQotZ2VvI0RFLU5JI05pZWRlcnNhY2hzZW4jREUKLWdlbyNERS1OVyNOb3JkcmhlaW4tV2VzdGZhbGVuI0RFCi1nZW8jREUtUlAjUmhlaW5sYW5kLVBmYWx6I0RFCi1nZW8jREUtU0gjU2NobGVzd2lnLUhvbHN0ZWluI0RFCi1nZW8jREUtU0wjU2FhcmxhbmQjREUKLWdlbyNERS1TTiNTYWNoc2VuI0RFCi1nZW8jREUtU1QjU2FjaHNlbi1BbmhhbHQjREUKLWdlbyNERS1USCNUaMO8cmluZ2VuI0RFCi1nZW8jREojRGppYm91dGkjLS0KLWdlbyNESyNEZW5tYXJrIy0tCi1nZW8jRE0jRG9taW5pY2EjLS0KLWdlbyNETyNEb21pbmljYW4gUmVwdWJsaWMjLS0KLWdlbyNETy0wMiNBenVhI0RPCi1nZW8jRE8tMDMjQmFob3J1Y28jRE8KLWdlbyNETy0wNCNCYXJhaG9uYSNETwotZ2VvI0RPLTA1I0RhamFiw7NuI0RPCi1nZW8jRE8tMDYjRHVhcnRlI0RPCi1nZW8jRE8tMDgjRWwgU2V5Ym8jRE8KLWdlbyNETy0wOSNFc3BhaWxsYXQjRE8KLWdlbyNETy0zMCNIYXRvIE1heW9yI0RPCi1nZW8jRE8tMTAjSW5kZXBlbmRlbmNpYSNETwotZ2VvI0RPLTExI0xhIEFsdGFncmFjaWEjRE8KLWdlbyNETy0wNyNMYSBFc3RyZWxsZXRhI0RPCi1nZW8jRE8tMTIjTGEgUm9tYW5hI0RPCi1nZW8jRE8tMTMjTGEgVmVnYSNETwotZ2VvI0RPLTE0I01hcsOtYSBUcmluaWRhZCBTw6FuY2hleiNETwotZ2VvI0RPLTI4I01vbnNlbm9yIE5vdWVsI0RPCi1nZW8jRE8tMTUjTW9udGUgQ3Jpc3RpI0RPCi1nZW8jRE8tMjkjTW9udGUgUGxhdGEjRE8KLWdlbyNETy0xNiNQZWRlcm5hbGVzI0RPCi1nZW8jRE8tMTcjUGVyYXZpYSNETwotZ2VvI0RPLTE4I1B1ZXJ0byBQbGF0YSNETwotZ2VvI0RPLTE5I1NvbGNlZG8jRE8KLWdlbyNETy0yMCNTYW1hbsOhI0RPCi1nZW8jRE8tMjEjU2FuIENyaXN0w7NiYWwjRE8KLWdlbyNETy0yMiNTYW4gSnVhbiNETwotZ2VvI0RPLTIzI1NhbiBQZWRybyBkZSBNYWNvcsOtcyNETwotZ2VvI0RPLTI0I1PDoW5jaGV6IFJhbcOtcmV6I0RPCi1nZW8jRE8tMjUjU2FudGlhZ28jRE8KLWdlbyNETy0yNiNTYW50aWFnbyBSb2Ryw61ndWV6I0RPCi1nZW8jRE8tMjcjVmFsdmVyZGUjRE8KLWdlbyNEWiNBbGdlcmlhIy0tCi1nZW8jRUMjRWN1YWRvciMtLQotZ2VvI0VFI0VzdG9uaWEjLS0KLWdlbyNFRyNFZ3lwdCMtLQotZ2VvI0VII1dlc3Rlcm4gU2FoYXJhIy0tCi1nZW8jRVIjRXJpdHJlYSMtLQotZ2VvI0VSLUFOI0Fuc2ViYSNFUgotZ2VvI0VSLURVI0RlYnViI0VSCi1nZW8jRVItREsjRGVidWJhd2kgS2V5aWggQmFocmkgW0RlYnViLUtlaWgtQmFocmldI0VSCi1nZW8jRVItR0IjR2FzaC1CYXJrYSNFUgotZ2VvI0VSLU1BI01hYWtlbCBbTWFla2VsXSNFUgotZ2VvI0VSLVNLI1NlbWVuYXdpIEtleWloIEJhaHJpIFtTZW1pZW4tS2VpaC1CYWhyaV0jRVIKLWdlbyNFUyNTcGFpbiMtLQotZ2VvI0VTLUFOI0FuZGFsdWPDrWEjRVMKLWdlbyNFUy1BTCNBbG1lcsOtYSNFUy1BTgotZ2VvI0VTLUNBI0PDoWRpeiNFUy1BTgotZ2VvI0VTLUNPI0PDs3Jkb2JhI0VTLUFOCi1nZW8jRVMtR1IjR3JhbmFkYSNFUy1BTgotZ2VvI0VTLUgjSHVlbHZhI0VTLUFOCi1nZW8jRVMtSiNKYcOpbiNFUy1BTgotZ2VvI0VTLU1BI03DoWxhZ2EjRVMtQU4KLWdlbyNFUy1TRSNTZXZpbGxhI0VTLUFOCi1nZW8jRVMtQVIjQXJhZ8OzbiNFUwotZ2VvI0VTLUhVI0h1ZXNjYSNFUy1BUgotZ2VvI0VTLVRFI1RlcnVlbCNFUy1BUgotZ2VvI0VTLVojWmFyYWdvemEjRVMtQVIKLWdlbyNFUy1PIyJBc3R1cmlhcywgUHJpbmNpcGFkbyBkZSIjRVMKLWdlbyNFUy1DTiNDYW5hcmlhcyNFUwotZ2VvI0VTLUdDI0xhcyBQYWxtYXMjRVMtQ04KLWdlbyNFUy1URiNTYW50YSBDcnV6IGRlIFRlbmVyaWZlI0VTLUNOCi1nZW8jRVMtUyNDYW50YWJyaWEjRVMKLWdlbyNFUy1DTSNDYXN0aWxsYS1MYSBNYW5jaGEjRVMKLWdlbyNFUy1BQiNBbGJhY2V0ZSNFUy1DTQotZ2VvI0VTLUNSI0N1aWRhZCBSZWFsI0VTLUNNCi1nZW8jRVMtQ1UjQ3VlbmNhI0VTLUNNCi1nZW8jRVMtR1UjR3VhZGFsYWphcmEjRVMtQ00KLWdlbyNFUy1UTyNUb2xlZG8jRVMtQ00KLWdlbyNFUy1DTCNDYXN0aWxsYSB5IExlw7NuI0VTCi1nZW8jRVMtQVYjw4F2aWxhI0VTLUNMCi1nZW8jRVMtQlUjQnVyZ29zI0VTLUNMCi1nZW8jRVMtTEUjTGXDs24jRVMtQ0wKLWdlbyNFUy1QI1BhbGVuY2lhI0VTLUNMCi1nZW8jRVMtU0EjU2FsYW1hbmNhI0VTLUNMCi1nZW8jRVMtU0cjU2Vnb3ZpYSNFUy1DTAotZ2VvI0VTLVNPI1NvcmlhI0VTLUNMCi1nZW8jRVMtVkEjVmFsbGFkb2xpZCNFUy1DTAotZ2VvI0VTLVpBI1phbW9yYSNFUy1DTAotZ2VvI0VTLUNUI0NhdGFsdW5hI0VTCi1nZW8jRVMtQiNCYXJjZWxvbmEjRVMtQ1QKLWdlbyNFUy1HRSNHaXJvbmEgW0dlcm9uYV0jRVMtQ1QKLWdlbyNFUy1MI0xsZWlkYSBbTMOpcnVkYV0jRVMtQ1QKLWdlbyNFUy1UI1RhcnJhZ29uYSNFUy1DVAotZ2VvI0VTLUVYI0V4dHJlbWFkdXJhI0VTCi1nZW8jRVMtQkEjQmFkYWpveiNFUy1FWAotZ2VvI0VTLUNDI0PDoWNlcmVzI0VTLUVYCi1nZW8jRVMtR0EjR2FsaWNpYSNFUwotZ2VvI0VTLUMjTGEgQ29ydW5hI0VTLUdBCi1nZW8jRVMtTFUjTHVnbyNFUy1HQQotZ2VvI0VTLU9SI09yZW5zZSNFUy1HQQotZ2VvI0VTLVBPI1BvbnRldmVkcmEjRVMtR0EKLWdlbyNFUy1QTSNJc2xhcyBCYWxlYXJlcyNFUwotZ2VvI0VTLUxPI0xhIFJpb2phI0VTCi1nZW8jRVMtTSMiTWFkcmlkLCBDb211bmlkYWQgZGUiI0VTCi1nZW8jRVMtTVUjIk11cmNpYSwgUmVnacOzbiBkZSIjRVMKLWdlbyNFUy1OQSMiTmF2YXJyYSwgQ29tdW5pZGFkIEZvcmFsIGRlIiNFUwotZ2VvI0VTLVBWI1Bhw61zIFZhc2NpI0VTCi1nZW8jRVMtVkkjw4FsYXZhI0VTLVBWCi1nZW8jRVMtU1MjR3VpcMO6emNvYSNFUy1QVgotZ2VvI0VTLUJJI1ZpemNheWEjRVMtUFYKLWdlbyNFUy1WQyMiVmFsZW5jaWFuYSwgQ29tdW5pZGFkIiNFUwotZ2VvI0VTLUEjQWxpY2FudGUjRVMtVkMKLWdlbyNFUy1DUyNDYXN0ZWxsw7NuI0VTLVZDCi1nZW8jRVMtViNWYWxlbmNpYSNFUy1WQwotZ2VvI0VTLUNFI0NldXRhI0VTCi1nZW8jRVMtTUwjTWVsaWxsYSNFUwotZ2VvI0VUI0V0aGlvcGlhIy0tCi1nZW8jRkkjRmlubGFuZCMtLQotZ2VvI0ZJLUFMI0FodmVuYW5tYWFuIE1hYWt1bnRhIChGaSkgw4VsYW5kcyBMw6RuIChTdikjRkkKLWdlbyNGSS1FUyNFdGVsw6QtU3VvbWVuIEzDpMOkbmkgKEZpKSBTw7ZkcmEgRmlubGFuZHMgTMOkbiAoU3YpI0ZJCi1nZW8jRkktSVMjSXTDpC1TdW9tZW4gTMOkw6RuaSAoRmkpIMOWc3RyYSBGaW5sYW5kcyBMw6RuIChTdikjRkkKLWdlbyNGSS1MTCNMYXBpbiBMw6TDpG5pIChGaSkgTGFwbGFuZHMgTMOkbiAoU3YpI0ZJCi1nZW8jRkktTFMjTMOkbnNpLVN1b21lbiBMw6TDpG5pIChGaSkgVsOkc3RyYSBGaW5sYW5kcyBMw6RuIChTdikjRkkKLWdlbyNGSS1PTCNPdWx1biBMw6TDpG5pIChGaSkgVWxlw6Vib3JncyBMw6RuIChTdikjRkkKLWdlbyNGSiNGaWppIy0tCi1nZW8jRksjRmFsa2xhbmQgSXNsYW5kcyAoTWFsdmluYXMpIy0tCi1nZW8jRk0jRmVkZXJhdGVkIFN0YXRlcyBPZiBNaWNyb25lc2lhIy0tCi1nZW8jRk8jRmFlcm9lIElzbGFuZHMjLS0KLWdlbyNGUiNGcmFuY2UjLS0KLWdlbyNGUi0wMSNBaW4jRlItVgotZ2VvI0ZSLTAyI0Fpc25lI0ZSLVMKLWdlbyNGUi0wMyNBbGxpZXIjRlItQwotZ2VvI0ZSLTA0I0FscGVzLURlLUhhdXRlLVByb3ZlbmNlI0ZSLVUKLWdlbyNGUi0wNSNIYXV0ZXMtQWxwZXMjRlItVQotZ2VvI0ZSLTA2I0FscGVzLU1hcml0aW1lcyNGUi1VCi1nZW8jRlItMDcjQXJkw6hjaGUjRlItVgotZ2VvI0ZSLTA4I0FyZGVubmVzI0ZSLUcKLWdlbyNGUi0wOSNBcmnDqGdlI0ZSLU4KLWdlbyNGUi0xMCNBdWJlI0ZSLUcKLWdlbyNGUi0xMSNBdWRlI0ZSLUsKLWdlbyNGUi0xMiNBdmV5cm9uI0ZSLU4KLWdlbyNGUi0xMyNCb3VjaGVzLUR1LVJow7RuZSNGUi1VCi1nZW8jRlItMTQjQ2FsdmFkb3MjRlItUAotZ2VvI0ZSLTE1I0NhbnRhbCNGUi1DCi1nZW8jRlItMTYjQ2hhcmVudGUjRlItVAotZ2VvI0ZSLTE3I0NoYXJlbnRlLU1hcml0aW1lI0ZSLVQKLWdlbyNGUi0xOCNDaGVyI0ZSLUYKLWdlbyNGUi0xOSNDb3Jyw6h6ZSNGUi1MCi1nZW8jRlItMjEjQ8O0dGUtRCdPciNGUi1ECi1nZW8jRlItMjIjQ8O0dGVzLUQnQXJtb3IjRlItRQotZ2VvI0ZSLTIzI0NyZXVzZSNGUi1MCi1nZW8jRlItMjQjRG9yZG9nbmUjRlItQgotZ2VvI0ZSLTI1I0RvdWJzI0ZSLUkKLWdlbyNGUi0yNiNEcsO0bWUjRlItVgotZ2VvI0ZSLTI3I0V1cmUjRlItUQotZ2VvI0ZSLTI4I0V1cmUtRXQtTG9pciNGUi1GCi1nZW8jRlItMjkjRmluaXN0w6hyZSNGUi1FCi1nZW8jRlItMkEjQ29yc2UtRHUtU3VkI0ZSLUgKLWdlbyNGUi0yQiNIYXV0ZS1Db3JzZSNGUi1ICi1nZW8jRlItMzAjR2FyZCNGUi1LCi1nZW8jRlItMzEjSGF1dGUtR2Fyb25uZSNGUi1OCi1nZW8jRlItMzIjR2VycyNGUi1OCi1nZW8jRlItMzMjR2lyb25kZSNGUi1CCi1nZW8jRlItMzQjSMOpcmF1bHQjRlItSwotZ2VvI0ZSLTM1I0lsbGUtRXQtVmlsYWluZSNGUi1FCi1nZW8jRlItMzYjSW5kcmUjRlItRgotZ2VvI0ZSLTM3I0luZHJlLUV0LUxvaXJlI0ZSLUYKLWdlbyNGUi0zOCNJc8OocmUjRlItVgotZ2VvI0ZSLTM5I0p1cmEjRlItSQotZ2VvI0ZSLTQwI0xhbmRlcyNGUi1CCi1nZW8jRlItNDEjTG9pci1FdC1DaGVyI0ZSLUYKLWdlbyNGUi00MiNMb2lyZSNGUi1WCi1nZW8jRlItNDMjSGF1dGUtTG9pcmUjRlItQwotZ2VvI0ZSLTQ0I0xvaXJlLUF0bGFudGlxdWUjRlItUgotZ2VvI0ZSLTQ1I0xvaXJldCNGUi1GCi1nZW8jRlItNDYjTG90I0ZSLU4KLWdlbyNGUi00NyNMb3QtRXQtR2Fyb25uZSNGUi1CCi1nZW8jRlItNDgjTG96w6hyZSNGUi1LCi1nZW8jRlItNDkjTWFpbmUtRXQtTG9pcmUjRlItUgotZ2VvI0ZSLTUwI01hbmNoZSNGUi1QCi1nZW8jRlItNTEjTWFybmUjRlItRwotZ2VvI0ZSLTUyI0hhdXRlLU1hcm5lI0ZSLUcKLWdlbyNGUi01MyNNYXllbm5lI0ZSLVIKLWdlbyNGUi01NCNNZXVydGhlLUV0LU1vc2VsbGUjRlItTQotZ2VvI0ZSLTU1I01ldXNlI0ZSLU0KLWdlbyNGUi01NiNNb3JiaWhhbiNGUi1FCi1nZW8jRlItNTcjTW9zZWxsZSNGUi1NCi1nZW8jRlItNTgjTmnDqHZyZSNGUi1ECi1nZW8jRlItNTkjTm9yZCNGUi1PCi1nZW8jRlItNjAjT2lzZSNGUi1TCi1nZW8jRlItNjEjT3JuZSNGUi1QCi1nZW8jRlItNjIjUGFzLURlLUNhbGFpcyNGUi1PCi1nZW8jRlItNjMjUHV5LURlLUTDtG1lI0ZSLUMKLWdlbyNGUi02NCNQeXLDqW7DqWVzLUF0bGFudGlxdWVzI0ZSLUIKLWdlbyNGUi02NSNIYXV0ZXMtUHlyw6luw6llcyNGUi1OCi1nZW8jRlItNjYjUHlyw6luw6llcy1PcmllbnRhbGVzI0ZSLUsKLWdlbyNGUi02NyNCYXMtUmhpbiNGUi1BCi1nZW8jRlItNjgjSGF1dC1SaGluI0ZSLUEKLWdlbyNGUi02OSNSaMO0bmUjRlItVgotZ2VvI0ZSLTcwI0hhdXRlLVNhw7RuZSNGUi1JCi1nZW8jRlItNzEjU2HDtG5lLUV0LUxvaXJlI0ZSLUQKLWdlbyNGUi03MiNTYXJ0aGUjRlItUgotZ2VvI0ZSLTczI1Nhdm9pZSNGUi1WCi1nZW8jRlItNzQjSGF1dGUtU2F2b2llI0ZSLVYKLWdlbyNGUi03NSNQYXJpcyNGUi1KCi1nZW8jRlItNzYjU2VpbmUtTWFyaXRpbWUjRlItUQotZ2VvI0ZSLTc3I1NlaW5lLUV0LU1hcm5lI0ZSLUoKLWdlbyNGUi03OCNZdmVsaW5lcyNGUi1KCi1nZW8jRlItNzkjRGV1eC1Tw6h2cmVzI0ZSLUIKLWdlbyNGUi04MCNTb21tZSNGUi1TCi1nZW8jRlItODEjVGFybiNGUi1OCi1nZW8jRlItODIjVGFybi1FdC1HYXJvbm5lI0ZSLU4KLWdlbyNGUi04MyNWYXIjRlItVQotZ2VvI0ZSLTg0I1ZhdWNsdXNlI0ZSLVUKLWdlbyNGUi04NSNWZW5kw6llI0ZSLVIKLWdlbyNGUi04NiNWaWVubmUjRlItVAotZ2VvI0ZSLTg3I0hhdXRlLVZpZW5uZSNGUi1MCi1nZW8jRlItODgjVm9zZ2VzI0ZSLU0KLWdlbyNGUi04OSNZb25uZSNGUi1ECi1nZW8jRlItOTAjVGVycml0b2lyZSBEZSBCZWxmb3J0I0ZSLUkKLWdlbyNGUi05MSNFc3Nvbm5lI0ZSLUoKLWdlbyNGUi05MiNIYXV0cy1EZS1TZWluZSNGUi1KCi1nZW8jRlItOTMjU2VpbmUtU2FpbnQtRGVuaXMjRlItSgotZ2VvI0ZSLTk0I1ZhbC1EZS1NYXJuZSNGUi1KCi1nZW8jRlItOTUjVmFsLUQnT2lzZSNGUi1KCi1nZW8jRlItQSNBbHNhY2UjRlIKLWdlbyNGUi1CI0FxdWl0YWluZSNGUgotZ2VvI0ZSLUMjQXV2ZXJnbmUjRlIKLWdlbyNGUi1EI0JvdXJnb2duZSNGUgotZ2VvI0ZSLUUjQnJldGFnbmUjRlIKLWdlbyNGUi1GI0NlbnRyZSNGUgotZ2VvI0ZSLUcjQ2hhbXBhZ25lLUFyZGVubmUjRlIKLWdlbyNGUi1II0NvcnNlI0ZSCi1nZW8jRlItSSNGcmFuY2hlLUNvbXTDqSNGUgotZ2VvI0ZSLUojSWxlLURlLUZyYW5jZSNGUgotZ2VvI0ZSLUsjTGFuZ3VlZG9jLVJvdXNzaWxsb24jRlIKLWdlbyNGUi1MI0xpbW91c2luI0ZSCi1nZW8jRlItTSNMb3JyYWluZSNGUgotZ2VvI0ZSLU4jTWlkaS1QeXLDqW7DqWVzI0ZSCi1nZW8jRlItTyNOb3JkLVBhcy1EZS1DYWxhaXMjRlIKLWdlbyNGUi1QI0Jhc3NlLU5vcm1hbmRpZSNGUgotZ2VvI0ZSLVEjSGF1dGUtTm9ybWFuZGllI0ZSCi1nZW8jRlItUiNQYXlzIERlIExhIExvaXJlI0ZSCi1nZW8jRlItUyNQaWNhcmRpZSNGUgotZ2VvI0ZSLVQjUG9pdG91LUNoYXJlbnRlcyNGUgotZ2VvI0ZSLVUjUHJvdmVuY2UtQWxwZXMtQ8O0dGUgRCdBenVyI0ZSCi1nZW8jRlItViNSaMO0bmUtQWxwZXMjRlIKLWdlbyNHQSNHYWJvbiMtLQotZ2VvI0dCI1VuaXRlZCBLaW5nZG9tIy0tCi1nZW8jR0ItQU5UI0FudHJpbSNHQi1OSVIKLWdlbyNHQi1BUkQjQXJkcyNHQi1OSVIKLWdlbyNHQi1BUk0jQXJtYWdoI0dCLU5JUgotZ2VvI0dCLUFWTiNBdm9uI0dCLUVORwotZ2VvI0dCLUJERiNCZWRmb3Jkc2hpcmUjR0ItRU5HCi1nZW8jR0ItQkZTI0JlbGZhc3QjR0ItTklSCi1nZW8jR0ItQktNI0J1Y2tpbmdoYW1zaGlyZSNHQi1FTkcKLWdlbyNHQi1CTEEjQmFsbHltZW5hI0dCLU5JUgotZ2VvI0dCLUJMWSNCYWxseW1vbmV5I0dCLU5JUgotZ2VvI0dCLUJOQiNCYW5icmlkZ2UjR0ItTklSCi1nZW8jR0ItQk9SI0JvcmRlcnMgUmVnaW9uI0dCLVNDVAotZ2VvI0dCLUJSSyNCZXJrc2hpcmUjR0ItRU5HCi1nZW8jR0ItQ0FNI0NhbWJyaWRnZXNoaXJlI0dCLUVORwotZ2VvI0dCLUNFTiNDZW50cmFsIFJlZ2lvbiNHQi1TQ1QKLWdlbyNHQi1DR1YjQ3JhaWdhdm9uI0dCLU5JUgotZ2VvI0dCLUNIQSNDaGFubmVsIElzbGFuZHMjR0IKLWdlbyNHQi1DSFMjQ2hlc2hpcmUjR0ItRU5HCi1nZW8jR0ItQ0tGI0NhcnJpY2tmZXJndXMjR0ItTklSCi1nZW8jR0ItQ0tUI0Nvb2tzdG93biNHQi1OSVIKLWdlbyNHQi1DTFIjQ29sZXJhaW5lI0dCLU5JUgotZ2VvI0dCLUNMViNDbGV2ZWxhbmQjR0ItRU5HCi1nZW8jR0ItQ01BI0N1bWJyaWEjR0ItRU5HCi1nZW8jR0ItQ09OI0Nvcm53YWxsI0dCLUVORwotZ2VvI0dCLUNTUiNDYXN0bGVyZWFnaCNHQi1OSVIKLWdlbyNHQi1DV0QjQ2x3eWQjR0ItV0xTCi1nZW8jR0ItREJZI0RlcmJ5c2hpcmUjR0ItRU5HCi1nZW8jR0ItREZEI0R5ZmVkI0dCLVdMUwotZ2VvI0dCLURHTiNEdW5nYW5ub24jR0ItTklSCi1nZW8jR0ItREdZI0R1bWZyaWVzICYgR2FsbG93YXkgUmVnaW9uI0dCLVNDVAotZ2VvI0dCLURPUiNEb3JzZXQjR0ItRU5HCi1nZW8jR0ItRE9XI0Rvd24jR0ItTklSCi1nZW8jR0ItRFJZI0RlcnJ5I0dCLU5JUgotZ2VvI0dCLURVUiNEdXJoYW0jR0ItRU5HCi1nZW8jR0ItRFZWI0Rldm9uI0dCLUVORwotZ2VvI0dCLUVORyNFbmdsYW5kI0dCCi1nZW8jR0ItRVNTI0Vzc2V4I0dCLUVORwotZ2VvI0dCLUVTWCNFYXN0IFN1c3NleCNHQi1FTkcKLWdlbyNHQi1GRVIjRmVybWFuYWdoI0dCLU5JUgotZ2VvI0dCLUZJRiNGaWZlIFJlZ2lvbiNHQi1TQ1QKLWdlbyNHQi1HTFMjR2xvdWNlc3RlcnNoaXJlI0dCLUVORwotZ2VvI0dCLUdNUCNHcmFtcGlhbiBSZWdpb24jR0ItU0NUCi1nZW8jR0ItR05UI0d3ZW50I0dCLVdMUwotZ2VvI0dCLUdTWSNHdWVybnNleSNHQi1DSEEKLWdlbyNHQi1HVEwjR3JlYXRlciBMb25kb24jR0ItRU5HCi1nZW8jR0ItR1RNI0dyZWF0ZXIgTWFuY2hlc3RlciNHQi1FTkcKLWdlbyNHQi1HV04jR3d5bmVkZCNHQi1XTFMKLWdlbyNHQi1IQU0jSGFtcHNoaXJlI0dCLUVORwotZ2VvI0dCLUhMRCNIaWdobGFuZCBSZWdpb24jR0ItU0NUCi1nZW8jR0ItSFJUI0hlcnRmb3Jkc2hpcmUjR0ItRU5HCi1nZW8jR0ItSFVNI0h1bWJlcnNpZGUjR0ItRU5HCi1nZW8jR0ItSFdSI0hlcmVmb3JkIEFuZCBXb3JjZXN0ZXIjR0ItRU5HCi1nZW8jR0ItSU9NI0lzbGUgT2YgTWFuI0dCCi1nZW8jR0ItSU9TI0lzbGVzIE9mIFNjaWxseSNHQi1FTkcKLWdlbyNHQi1JT1cjSXNsZSBPZiBXaWdodCNHQi1FTkcKLWdlbyNHQi1KU1kjSmVyc2V5I0dCLUNIQQotZ2VvI0dCLUtFTiNLZW50I0dCLUVORwotZ2VvI0dCLUxBTiNMYW5jYXNoaXJlI0dCLUVORwotZ2VvI0dCLUxFQyNMZWljZXN0ZXJzaGlyZSNHQi1FTkcKLWdlbyNHQi1MSU4jTGluY29sbnNoaXJlI0dCLUVORwotZ2VvI0dCLUxNViNMaW1hdmFkeSNHQi1OSVIKLWdlbyNHQi1MUk4jTGFybmUjR0ItTklSCi1nZW8jR0ItTFNCI0xpc2J1cm4jR0ItTklSCi1nZW8jR0ItTFROI0xvdGhpYW4gUmVnaW9uI0dCLVNDVAotZ2VvI0dCLU1GVCNNYWdoZXJhZmVsdCNHQi1OSVIKLWdlbyNHQi1NR00jTWlkIEdsYW1vcmdhbiNHQi1XTFMKLWdlbyNHQi1NU1kjTWVyc2V5c2lkZSNHQi1FTkcKLWdlbyNHQi1NWUwjTW95bGUjR0ItTklSCi1nZW8jR0ItTkJMI05vcnRodW1iZXJsYW5kI0dCLUVORwotZ2VvI0dCLU5ETiNOb3J0aCBEb3duI0dCLU5JUgotZ2VvI0dCLU5GSyNOb3Jmb2xrI0dCLUVORwotZ2VvI0dCLU5JUiNOb3J0aGVybiBJcmVsYW5kI0dCCi1nZW8jR0ItTlRBI05ld3RvbmFiYmV5I0dCLU5JUgotZ2VvI0dCLU5USCNOb3J0aGFtcHRvbnNoaXJlI0dCLUVORwotZ2VvI0dCLU5UVCNOb3R0aW5naGFtc2hpcmUjR0ItRU5HCi1nZW8jR0ItTllLI05vcnRoIFlvcmtzaGlyZSNHQi1FTkcKLWdlbyNHQi1OWU0jTmV3cnkgQW5kIE1vdXJuZSNHQi1OSVIKLWdlbyNHQi1PTUgjT21hZ2gjR0ItTklSCi1nZW8jR0ItT1JLI09ya25leSNHQi1TQ1QKLWdlbyNHQi1PWEYjT3hmb3Jkc2hpcmUjR0ItRU5HCi1nZW8jR0ItUE9XI1Bvd3lzI0dCLVdMUwotZ2VvI0dCLVNDVCNTY290bGFuZCNHQgotZ2VvI0dCLVNGSyNTdWZmb2xrI0dCLUVORwotZ2VvI0dCLVNHTSNTb3V0aCBHbGFtb3JnYW4jR0ItV0xTCi1nZW8jR0ItU0hSI1Nocm9wc2hpcmUjR0ItRU5HCi1nZW8jR0ItU09NI1NvbWVyc2V0I0dCLUVORwotZ2VvI0dCLVNSWSNTdXJyZXkjR0ItRU5HCi1nZW8jR0ItU1RCI1N0cmFiYW5lI0dCLU5JUgotZ2VvI0dCLVNURCNTdHJhdGhjbHlkZSBSZWdpb24jR0ItU0NUCi1nZW8jR0ItU1RTI1N0YWZmb3Jkc2hpcmUjR0ItRU5HCi1nZW8jR0ItU1lLI1NvdXRoIFlvcmtzaGlyZSNHQi1FTkcKLWdlbyNHQi1UQVkjVGF5c2lkZSBSZWdpb24jR0ItU0NUCi1nZW8jR0ItVFdSI1R5bmUgQW5kIFdlYXIjR0ItRU5HCi1nZW8jR0ItV0FSI1dhcndpY2tzaGlyZSNHQi1FTkcKLWdlbyNHQi1XR00jV2VzdCBHbGFtb3JnYW4jR0ItV0xTCi1nZW8jR0ItV0lMI1dpbHRzaGlyZSNHQi1FTkcKLWdlbyNHQi1XSVMjV2VzdGVybiBJc2xlcyNHQi1TQ1QKLWdlbyNHQi1XTFMjV2FsZXMjR0IKLWdlbyNHQi1XTUQjV2VzdCBNaWRsYW5kcyNHQi1FTkcKLWdlbyNHQi1XU1gjV2VzdCBTdXNzZXgjR0ItRU5HCi1nZW8jR0ItV1lLI1dlc3QgWW9ya3NoaXJlI0dCLUVORwotZ2VvI0dCLVpFVCNTaGV0bGFuZCAoWmV0bGFuZCkjR0ItU0NUCi1nZW8jR0QjR3JlbmFkYSMtLQotZ2VvI0dFI0dlb3JnaWEjLS0KLWdlbyNHRiNGcmVuY2ggR3VpYW5hIy0tCi1nZW8jR0gjR2hhbmEjLS0KLWdlbyNHSSNHaWJyYWx0YXIjLS0KLWdlbyNHTCNHcmVlbmxhbmQjLS0KLWdlbyNHTSNHYW1iaWEjLS0KLWdlbyNHTiNHdWluZWEjLS0KLWdlbyNHUCNHdWFkZWxvdXBlIy0tCi1nZW8jR1EjRXF1YXRvcmlhbCBHdWluZWEjLS0KLWdlbyNHUiNHcmVlY2UjLS0KLWdlbyNHUyNHZW9yZ2lhICYgU2FuZHdpY2ggSXNsYW5kcyMtLQotZ2VvI0dUI0d1YXRlbWFsYSMtLQotZ2VvI0dVI0d1YW0jLS0KLWdlbyNHVyNHdWluZWEtQmlzc2F1Iy0tCi1nZW8jR1kjR3V5YW5hIy0tCi1nZW8jSEsjSG9uZyBLb25nIy0tCi1nZW8jSE4jSG9uZHVyYXMjLS0KLWdlbyNIUiNDcm9hdGlhIy0tCi1nZW8jSFQjSGFpdGkjLS0KLWdlbyNIVSNIdW5nYXJ5Iy0tCi1nZW8jSUQjSW5kb25lc2lhIy0tCi1nZW8jSUUjSXJlbGFuZCMtLQotZ2VvI0lMI0lzcmFlbCMtLQotZ2VvI0lOI0luZGlhIy0tCi1nZW8jSU8jSW5kaWFuIE9jZWFuIFRlcnJpdG9yeSMtLQotZ2VvI0lRI0lyYXEjLS0KLWdlbyNJUiMiSXJhbiwgSXNsYW1pYyBSZXB1YmxpYyBvZiIjLS0KLWdlbyNJUyNJY2VsYW5kIy0tCi1nZW8jSVQjSXRhbHkjLS0KLWdlbyNJVC0yMSNQaWVtb250ZSNJVAotZ2VvI0lULUFMI0FsZXNzYW5kcmlhI0lULTIxCi1nZW8jSVQtQVQjQXN0aSNJVC0yMgotZ2VvI0lULUJJI0JpZWxsYSNJVC0yMwotZ2VvI0lULUFPI0Fvc3RhIEFvc3RlIChmcikjSVQtMjMKLWdlbyNJVC1DTiNDdW5lbyNJVC0yNAotZ2VvI0lULU5PI05vdmFyYSNJVC0yNQotZ2VvI0lULUJHI0JlcmdhbW8jSVQtMjUKLWdlbyNJVC1CUyNCcmVzY2lhI0lULTI1Ci1nZW8jSVQtQ08jQ29tbyNJVC0yNQotZ2VvI0lULUNSI0NyZW1vbmEjSVQtMjUKLWdlbyNJVC1MQyNMZWNjbyNJVC0yNQotZ2VvI0lULUxPI0xvZGkjSVQtMjUKLWdlbyNJVC1NTiNNYW50b3ZhI0lULTI1Ci1nZW8jSVQtTUkjTWlsYW5vI0lULTI1Ci1nZW8jSVQtUFYjUGF2aWEjSVQtMjUKLWdlbyNJVC1TTyNTb25kcmlvI0lULTI1Ci1nZW8jSVQtVkEjVmFyZXNlI0lULTI1Ci1nZW8jSVQtVE8jVG9yaW5vI0lULTI2Ci1nZW8jSVQtVkIjVmVyYmFuby1DdXNpby1Pc3NvbGEjSVQtMjcKLWdlbyNJVC1WQyNWZXJjZWxsaSNJVC0yOAotZ2VvI0lULTIzI1ZhbGxlIGQnQW9zdGEjSVQKLWdlbyNJVC0yNSNMb21iYXJkaWEjSVQKLWdlbyNJVC0zMiNUcmVudGluby1BbHRvIEFkaWdlI0lUCi1nZW8jSVQtQlojQm9semFubyBCb3plbiAoZGUpI0lULTMyCi1nZW8jSVQtVE4jVHJlbnRvI0lULTMyCi1nZW8jSVQtMzQjVmVuZXRvI0lUCi1nZW8jSVQtQkwjQmVsbHVubyNJVC0zNAotZ2VvI0lULVBEI1BhZG92YSNJVC0zNAotZ2VvI0lULVJPI1JvdmlnbyNJVC0zNAotZ2VvI0lULVRWI1RyZXZpc28jSVQtMzQKLWdlbyNJVC1WRSNWZW5lemlhI0lULTM0Ci1nZW8jSVQtVlIjVmVyb25hI0lULTM0Ci1nZW8jSVQtVkkjVmljZW56YSNJVC0zNAotZ2VvI0lULTM2I0ZyaXVsaS1WZW5lemlhIEdpdWxpYSNJVAotZ2VvI0lULUdPI0dvcml6aWEjSVQtMzYKLWdlbyNJVC1QTiNQb3JkZW5vbmUjSVQtMzYKLWdlbyNJVC1UUyNUcmllc3RlI0lULTM2Ci1nZW8jSVQtVUQjVWRpbmUjSVQtMzYKLWdlbyNJVC00MiNMaWd1cmlhI0lUCi1nZW8jSVQtR0UjR2Vub3ZhI0lULTQyCi1nZW8jSVQtSU0jSW1wZXJpYSNJVC00MgotZ2VvI0lULVNQI0xhIFNwZXppYSNJVC00MgotZ2VvI0lULVNWI1Nhdm9uYSNJVC00MgotZ2VvI0lULTQ1I0VtaWxpYS1Sb21hZ25hI0lUCi1nZW8jSVQtQk8jQm9sb2duYSNJVC00NQotZ2VvI0lULUZFI0ZlcnJhcmEjSVQtNDUKLWdlbyNJVC1GTyNGb3Jsw6wjSVQtNDUKLWdlbyNJVC1NTyNNb2RlbmEjSVQtNDUKLWdlbyNJVC1QUiNQYXJtYSNJVC00NQotZ2VvI0lULVBDI1BpYWNlbnphI0lULTQ1Ci1nZW8jSVQtUkEjUmF2ZW5uYSNJVC00NQotZ2VvI0lULVJFI1JlZ2dpbyBFbWlsaWEjSVQtNDUKLWdlbyNJVC1STiNSaW1pbmkjSVQtNDUKLWdlbyNJVC01MiNUb3NjYW5hI0lUCi1nZW8jSVQtQVIjQXJlenpvI0lULTUyCi1nZW8jSVQtRkkjRmlyZW56ZSNJVC01MgotZ2VvI0lULUdSI0dyb3NzZXRvI0lULTUyCi1nZW8jSVQtTEkjTGl2b3JubyNJVC01MgotZ2VvI0lULUxVI0x1Y2NhI0lULTUyCi1nZW8jSVQtTVMjTWFzc2EtQ2FycmFyYSNJVC01MgotZ2VvI0lULVBJI1Bpc2EjSVQtNTIKLWdlbyNJVC1QVCNQaXN0b2lhI0lULTUyCi1nZW8jSVQtUE8jUHJhdG8jSVQtNTIKLWdlbyNJVC1TSSNTaWVuYSNJVC01MgotZ2VvI0lULTU1I1VtYnJpYSNJVAotZ2VvI0lULVBHI1BlcnVnaWEjSVQtNTUKLWdlbyNJVC1UUiNUZXJuaSNJVC01NQotZ2VvI0lULTU3I01hcmNoZSNJVAotZ2VvI0lULUFOI0FuY29uYSNJVC01NwotZ2VvI0lULUFQI0FzY29saSBQaWNlbm8jSVQtNTcKLWdlbyNJVC1NQyNNYWNlcmF0YSNJVC01NwotZ2VvI0lULVBTI1Blc2FybyBlIFVyYmlubyNJVC01NwotZ2VvI0lULTYyI0xhemlvI0lUCi1nZW8jSVQtRlIjRnJvc2lub25lI0lULTYyCi1nZW8jSVQtTFQjTGF0aW5hI0lULTYyCi1nZW8jSVQtUkkjUmlldGkjSVQtNjIKLWdlbyNJVC1STSNSb21hI0lULTYyCi1nZW8jSVQtVlQjVml0ZXJibyNJVC02MgotZ2VvI0lULTY1I0FicnV6em8jSVQKLWdlbyNJVC1DSCNDaGlldGkjSVQtNjUKLWdlbyNJVC1BUSNMJ0FxdWlsYSNJVC02NQotZ2VvI0lULVBFI1Blc2NhcmEjSVQtNjUKLWdlbyNJVC1URSNUZXJhbW8jSVQtNjUKLWdlbyNJVC02NyNNb2xpc2UjSVQKLWdlbyNJVC1DQiNDYW1wb2Jhc3NvI0lULTY3Ci1nZW8jSVQtSVMjSXNlcm5pYSNJVC02NwotZ2VvI0lULTcyI0NhbXBhbmlhI0lUCi1nZW8jSVQtQk4jQmVuZXZlbnRvI0lULTcyCi1nZW8jSVQtQ0UjQ2FzZXJ0YSNJVC03MgotZ2VvI0lULU5BI05hcG9saSNJVC03MgotZ2VvI0lULVNBI1NhbGVybm8jSVQtNzIKLWdlbyNJVC1BViNBdmVsbGlubyNJVC03MgotZ2VvI0lULTc1I1B1Z2xpYSNJVAotZ2VvI0lULUJBI0JhcmkjSVQtNzUKLWdlbyNJVC1CUiNCcmluZGlzaSNJVC03NQotZ2VvI0lULUZHI0ZvZ2dpYSNJVC03NQotZ2VvI0lULUxFI0xlY2NlI0lULTc1Ci1nZW8jSVQtVEEjVGFyYW50byNJVC03NQotZ2VvI0lULTc3I0Jhc2lsaWNhdGEjSVQKLWdlbyNJVC1NVCNNYXRlcmEjSVQtNzcKLWdlbyNJVC1QWiNQb3RlbnphI0lULTc3Ci1nZW8jSVQtNzgjQ2FsYWJyaWEjSVQKLWdlbyNJVC1DWiNDYXRhbnphcm8jSVQtNzgKLWdlbyNJVC1DUyNDb3NlbnphI0lULTc4Ci1nZW8jSVQtS1IjQ3JvdG9uZSNJVC03OAotZ2VvI0lULVJDI1JlZ2dpbyBDYWxhYnJpYSNJVC03OAotZ2VvI0lULVZWI1ZpYm8gVmFsZW50aWEjSVQtNzgKLWdlbyNJVC04MiNTaWNpbGlhI0lUCi1nZW8jSVQtQUcjQWdyaWdlbnRvI0lULTgyCi1nZW8jSVQtQ0wjQ2FsdGFuaXNzZXR0YSNJVC04MgotZ2VvI0lULUNUI0NhdGFuaWEjSVQtODIKLWdlbyNJVC1FTiNFbm5hI0lULTgyCi1nZW8jSVQtTUUjTWVzc2luYSNJVC04MgotZ2VvI0lULVBBI1BhbGVybW8jSVQtODIKLWdlbyNJVC1SRyNSYWd1c2EjSVQtODIKLWdlbyNJVC1TUiNTaXJhY3VzYSNJVC04MgotZ2VvI0lULVRQI1RyYXBhbmkjSVQtODIKLWdlbyNJVC04OCNTYXJkZWduYSNJVAotZ2VvI0lULUNBI0NhZ2xpYXJpI0lULTg4Ci1nZW8jSVQtTlUjTnVvcm8jSVQtODgKLWdlbyNJVC1PUiNPcmlzdGFubyNJVC04OAotZ2VvI0lULVNTI1Nhc3NhcmkjSVQtODgKLWdlbyNKTSNKYW1haWNhIy0tCi1nZW8jSk8jSm9yZGFuIy0tCi1nZW8jSlAjSmFwYW4jLS0KLWdlbyNKUC0wMSNIb2trYWlkbyNKUAotZ2VvI0pQLTAyI0FvbW9yaSNKUAotZ2VvI0pQLTAzI0l3YXRlI0pQCi1nZW8jSlAtMDQjTWl5YWdpI0pQCi1nZW8jSlAtMDUjQWtpdGEjSlAKLWdlbyNKUC0wNiNZYW1hZ2F0YSNKUAotZ2VvI0pQLTA3I0h1a3VzaW1hIChGdWt1c2hpbWEpI0pQCi1nZW8jSlAtMDgjSWJhcmFraSNKUAotZ2VvI0pQLTA5I1RvdGlnaSAoVG9jaGlnaSkjSlAKLWdlbyNKUC0xMCNHdW5tYSNKUAotZ2VvI0pQLTExI1NhaXRhbWEjSlAKLWdlbyNKUC0xMiNUaWJhIChDaGliYSkjSlAKLWdlbyNKUC0xMyNUb2t5byNKUAotZ2VvI0pQLTE0I0thbmFnYXdhI0pQCi1nZW8jSlAtMTUjTmlpZ2F0YSNKUAotZ2VvI0pQLTE2I1RveWFtYSNKUAotZ2VvI0pQLTE3I0lzaWthd2EgKElzaGlrYXdhKSNKUAotZ2VvI0pQLTE4I0h1a3VpIChGdWt1aSkjSlAKLWdlbyNKUC0xOSNZYW1hbmFzaSAoWWFtYW5hc2hpKSNKUAotZ2VvI0pQLTIwI05hZ2FubyNKUAotZ2VvI0pQLTIxI0dpaHUgKEdpZnUpI0pQCi1nZW8jSlAtMjIjU2l6dW9rYSAoU2hpenVva2EpI0pQCi1nZW8jSlAtMjMjQWl0aSAoQWljaGkpI0pQCi1nZW8jSlAtMjQjTWllI0pQCi1nZW8jSlAtMjUjU2lnYSAoU2hpZ2EpI0pQCi1nZW8jSlAtMjYjS3lvdG8jSlAKLWdlbyNKUC0yNyNPc2FrYSNKUAotZ2VvI0pQLTI4I0h5b2dvI0pQCi1nZW8jSlAtMjkjTmFyYSNKUAotZ2VvI0pQLTMwI1dha2F5YW1hI0pQCi1nZW8jSlAtMzEjVG90dG9yaSNKUAotZ2VvI0pQLTMyI1NpbWFuZSAoU2hpbWFuZSkjSlAKLWdlbyNKUC0zMyNPa2F5YW1hI0pQCi1nZW8jSlAtMzQjSGlyb3NpbWEgKEhpcm9zaGltYSkjSlAKLWdlbyNKUC0zNSNZYW1hZ3V0aSAoWWFtYWd1Y2hpKSNKUAotZ2VvI0pQLTM2I1Rva3VzaW1hIChUb2t1c2hpbWEpI0pQCi1nZW8jSlAtMzcjS2FnYXdhI0pQCi1nZW8jSlAtMzgjRWhpbWUjSlAKLWdlbyNKUC0zOSNLb3RpIChLb2NoaSkjSlAKLWdlbyNKUC00MCNIdWt1b2thIChGdWt1b2thKSNKUAotZ2VvI0pQLTQxI1NhZ2EjSlAKLWdlbyNKUC00MiNOYWdhc2FraSNKUAotZ2VvI0pQLTQzI0t1bWFtb3RvI0pQCi1nZW8jSlAtNDQjT2l0YSNKUAotZ2VvI0pQLTQ1I01peWF6YWtpI0pQCi1nZW8jSlAtNDYjS2Fnb3NpbWEgKEthZ29zaGltYSkjSlAKLWdlbyNKUC00NyNPa2luYXdhI0pQCi1nZW8jS0UjS2VueWEjLS0KLWdlbyNLRyNLeXJneXpzdGFuIy0tCi1nZW8jS0gjQ2FtYm9kaWEjLS0KLWdlbyNLSSNLaXJpYmF0aSMtLQotZ2VvI0tNI0NvbW9yb3MjLS0KLWdlbyNLTiNTdCBLaXR0cy1OZXZpcyMtLQotZ2VvI0tQIyJLb3JlYSwgRGVtIFBlb3BsZSdzIFJlcHVibGljIiMtLQotZ2VvI0tSIyJLb3JlYSwgUmVwdWJsaWMgb2YiIy0tCi1nZW8jS1ItMTEjU2VvdWwgVGV1Z2J5ZW9sc2kjS1IKLWdlbyNLUi0yNiNCdXNhbiBHd2FuZyd5ZW9nc2kjS1IKLWdlbyNLUi0yNyNEYWVndSBHd2FuZyd5ZW9nc2kjS1IKLWdlbyNLUi0zMCNEYWVqZW9uIEd3YW5nJ3llb2dzaSNLUgotZ2VvI0tSLTI5I0d3YW5nanUgR3dhbmcneWVvZ3NpI0tSCi1nZW8jS1ItMjgjSW5jaGVvbiBHd2FuZyd5ZW9nc2kjS1IKLWdlbyNLUi0zMSNVbHNhbiBHd2FuZyd5ZW9nc2kjS1IKLWdlbyNLUi00MyNDaHVuZ2NoZW9uZ2J1Z2RvI0tSCi1nZW8jS1ItNDQjQ2h1bmdjaGVvbmduYW1kbyNLUgotZ2VvI0tSLTQyI0dhbmcnd2VvbmRvI0tSCi1nZW8jS1ItNDEjR3llb25nZ2lkbyNLUgotZ2VvI0tSLTQ3I0d5ZW9uZ3NhbmdidWdkbyNLUgotZ2VvI0tSLTQ4I0d5ZW9uZ3NhbmduYW1kbyNLUgotZ2VvI0tSLTQ5I0planVkbyNLUgotZ2VvI0tSLTQ1I0plb25yYWJ1Z2RvI0tSCi1nZW8jS1ItNDYjSmVvbnJhbmFtZG8jS1IKLWdlbyNLVyNLdXdhaXQjLS0KLWdlbyNLWSNDYXltYW4gSXNsYW5kcyMtLQotZ2VvI0taI0themFraHN0YW4jLS0KLWdlbyNMQSNMYW8gUGVvcGxlJ3MgRGVtb2NyYXRpYyBSZXB1YmxpYyMtLQotZ2VvI0xCI0xlYmFub24jLS0KLWdlbyNMQyNTYWludCBMdWNpYSMtLQotZ2VvI0xJI0xpZWNodGVuc3RlaW4jLS0KLWdlbyNMSyNTcmkgTGFua2EjLS0KLWdlbyNMUiNMaWJlcmlhIy0tCi1nZW8jTFMjTGVzb3RobyMtLQotZ2VvI0xUI0xpdGh1YW5pYSMtLQotZ2VvI0xVI0x1eGVtYm91cmcjLS0KLWdlbyNMViNMYXR2aWEjLS0KLWdlbyNMWSNMeWJpYW4gQXJhYiBKYW1haGlyaXlhIy0tCi1nZW8jTUEjTW9yb2NjbyMtLQotZ2VvI01DI01vbmFjbyMtLQotZ2VvI01EI01vbGRvdmEjLS0KLWdlbyNNRyNNYWRhZ2FzY2FyIy0tCi1nZW8jTUgjTWFyc2hhbGwgSXNsYW5kcyMtLQotZ2VvI01LI0Zvcm1lciBZdWdvc2xhdiBSZXB1YmxpYyBPZiBNYWNlZG9uaWEjLS0KLWdlbyNNTCNNYWxpIy0tCi1nZW8jTU0jTXlhbm1hciAoRm9ybWVyIEJ1cm1hKSMtLQotZ2VvI01OI01vbmdvbGlhIy0tCi1nZW8jTU8jTWFjYXUjLS0KLWdlbyNNUCNOb3J0aGVybiBNYXJpYW5hcyMtLQotZ2VvI01RI01hcnRpbmlxdWUjLS0KLWdlbyNNUiNNYXVyaXRhbmlhIy0tCi1nZW8jTVMjTW9udHNlcnJhdCMtLQotZ2VvI01UI01hbHRhIy0tCi1nZW8jTVUjTWF1cml0aXVzIy0tCi1nZW8jTVYjTWFsZGl2ZXMjLS0KLWdlbyNNVyNNYWxhd2kjLS0KLWdlbyNNWCNNZXhpY28jLS0KLWdlbyNNWC1BR1UjQWd1YXNjYWxpZW50ZXMjTVgKLWdlbyNNWC1CQ04jQmFqYSBDYWxpZm9ybmlhI01YCi1nZW8jTVgtQkNTI0JhamEgQ2FsaWZvcm5pYSBTdXIjTVgKLWdlbyNNWC1DQU0jQ2FtcGVjaGUjTVgKLWdlbyNNWC1DSEgjQ2hpaHVhaHVhI01YCi1nZW8jTVgtQ0hQI0NoaWFwYXMjTVgKLWdlbyNNWC1DT0EjQ29haHVpbGEjTVgKLWdlbyNNWC1DT0wjQ29saW1hI01YCi1nZW8jTVgtREYjRGlzdHJpdG8gRmVkZXJhbCNNWAotZ2VvI01YLURVUiNEdXJhbmdvI01YCi1nZW8jTVgtR1JPI0d1ZXJyZXJvI01YCi1nZW8jTVgtR1VBI0d1YW5hanVhdG8jTVgKLWdlbyNNWC1ISUQjSGlkYWxnbyNNWAotZ2VvI01YLUpBTCNKYWxpc2NvI01YCi1nZW8jTVgtTUVYI01leGljbyNNWAotZ2VvI01YLU1JQyNNaWNob2FjYW4jTVgKLWdlbyNNWC1NT1IjTW9yZWxvcyNNWAotZ2VvI01YLU5BWSNOYXlhcml0I01YCi1nZW8jTVgtTkxFI051ZXZvIExlb24jTVgKLWdlbyNNWC1PQVgjT2F4YWNhI01YCi1nZW8jTVgtUFVFI1B1ZWJsYSNNWAotZ2VvI01YLVFVRSNRdWVyZXRhcm8jTVgKLWdlbyNNWC1ST08jUXVpbnRhbmEgUm9vI01YCi1nZW8jTVgtU0lOI1NpbmFsb2EjTVgKLWdlbyNNWC1TTFAjU2FuIEx1aXMgUG90b3NpI01YCi1nZW8jTVgtU09OI1Nvbm9yYSNNWAotZ2VvI01YLVRBQiNUYWJhc2NvI01YCi1nZW8jTVgtVEFNI1RhbWF1bGlwYXMjTVgKLWdlbyNNWC1UTEEjVGxheGNhbGEjTVgKLWdlbyNNWC1WRVIjVmVyYWNydXojTVgKLWdlbyNNWC1ZVUMjWXVjYXRhbiNNWAotZ2VvI01YLVpBQyNaYWNhdGVjYXMjTVgKLWdlbyNNWSNNYWxheXNpYSMtLQotZ2VvI01aI01vemFtYmlxdWUjLS0KLWdlbyNOQSNOYW1pYmlhIy0tCi1nZW8jTkMjTmV3IENhbGVkb25pYSMtLQotZ2VvI05FI05pZ2VyIy0tCi1nZW8jTkYjTm9yZm9sayBJc2xhbmQjLS0KLWdlbyNORyNOaWdlcmlhIy0tCi1nZW8jTkctRkMjQWJ1amEgQ2FwaXRhbCBUZXJyaXRvcnkjTkcKLWdlbyNORy1BQiNBYmlhI05HCi1nZW8jTkctQUQjQWRhbWF3YSNORwotZ2VvI05HLUFLI0Frd2EgSWJvbSNORwotZ2VvI05HLUFOI0FuYW1icmEjTkcKLWdlbyNORy1CQSNCYXVjaGkjTkcKLWdlbyNORy1CWSNCYXllbHNhI05HCi1nZW8jTkctQkUjQmVudWUjTkcKLWdlbyNORy1CTyNCb3JubyNORwotZ2VvI05HLUNSI0Nyb3NzIFJpdmVyI05HCi1nZW8jTkctREUjRGVsdGEjTkcKLWdlbyNORy1FQiNFYm9ueWkjTkcKLWdlbyNORy1FRCNFZG8jTkcKLWdlbyNORy1FSyNFa2l0aSNORwotZ2VvI05HLUVOI0VudWd1I05HCi1nZW8jTkctR08jR29tYmUjTkcKLWdlbyNORy1JTSNJbW8jTkcKLWdlbyNORy1KSSNKaWdhd2EjTkcKLWdlbyNORy1LRCNLYWR1bmEjTkcKLWdlbyNORy1LTiNLYW5vI05HCi1nZW8jTkctS1QjS2F0c2luYSNORwotZ2VvI05HLUtFI0tlYmJpI05HCi1nZW8jTkctS08jS29naSNORwotZ2VvI05HLUtXI0t3YXJhI05HCi1nZW8jTkctTEEjTGFnb3MjTkcKLWdlbyNORy1OQSNOYXNzYXJhd2EjTkcKLWdlbyNORy1OSSNOaWdlciNORwotZ2VvI05HLU9HI09ndW4jTkcKLWdlbyNORy1PTiNPbmRvI05HCi1nZW8jTkctT1MjT3N1biNORwotZ2VvI05HLU9ZI095byNORwotZ2VvI05HLVBMI1BsYXRlYXUjTkcKLWdlbyNORy1SSSNSaXZlcnMjTkcKLWdlbyNORy1TTyNTb2tvdG8jTkcKLWdlbyNORy1UQSNUYXJhYmEjTkcKLWdlbyNORy1ZTyNZb2JlI05HCi1nZW8jTkctWkEjWmFtZmFyYSNORwotZ2VvI05JI05pY2FyYWd1YSMtLQotZ2VvI05MI05ldGhlcmxhbmRzIy0tCi1nZW8jTk8jTm9yd2F5Iy0tCi1nZW8jTk8tMDEjw5hzdGZvbGQjTk8KLWdlbyNOTy0wMiNBa2Vyc2h1cyNOTwotZ2VvI05PLTAzI09zbG8jTk8KLWdlbyNOTy0wNCNIZWRtYXJrI05PCi1nZW8jTk8tMDUjT3BwbGFuZCNOTwotZ2VvI05PLTA2I0J1c2tlcnVkI05PCi1nZW8jTk8tMDcjVmVzdGZvbGQjTk8KLWdlbyNOTy0wOCNUZWxlbWFyayNOTwotZ2VvI05PLTA5I0F1c3QtQWdkZXIjTk8KLWdlbyNOTy0xMCNWZXN0LUFnZGVyI05PCi1nZW8jTk8tMTEjUm9nYWxhbmQjTk8KLWdlbyNOTy0xMiNOb3JkYWxhbmQjTk8KLWdlbyNOTy0xNCNTb2duIE9nIEZqb3JkYW5lI05PCi1nZW8jTk8tMTUjTcO4cmUgT2cgUm9tc2RhbCNOTwotZ2VvI05PLTE2I1PDuHItVHLDuG5kZWxhZyNOTwotZ2VvI05PLTE3I05vcmQtVHLDuG5kZWxhZyNOTwotZ2VvI05PLTE4I05vcmRsYW5kI05PCi1nZW8jTk8tMTkjVHJvbXMjTk8KLWdlbyNOTy0yMCNGaW5ubWFyayNOTwotZ2VvI05QI05lcGFsIy0tCi1nZW8jTlIjTmF1cnUjLS0KLWdlbyNOVSNOaXVlIy0tCi1nZW8jTlojTmV3IFplYWxhbmQjLS0KLWdlbyNOWi1BVUsjQXVja2xhbmQjTlotTgotZ2VvI05aLUJPUCNCYXkgT2YgUGxlbnR5I05aLU4KLWdlbyNOWi1DQU4jQ2FudGVyYnVyeSNOWi1TCi1nZW8jTlotR0lTI0dpc2Jvcm5lI05aLU4KLWdlbyNOWi1IS0IjSGF3a2VzJ1MgQmF5I05aLU4KLWdlbyNOWi1NQkgjTWFybGJvcm91Z2gjTlotUwotZ2VvI05aLU1XVCNNYW5hd2F0dS1XYW5nYW51aSNOWi1OCi1nZW8jTlotTiNOb3J0aCBJc2xhbmQjTloKLWdlbyNOWi1OU04jTmVsc29uI05aLVMKLWdlbyNOWi1OVEwjTm9ydGhsYW5kI05aLU4KLWdlbyNOWi1PVEEjT3RhZ28jTlotUwotZ2VvI05aLVMjU291dGggSXNsYW5kI05aCi1nZW8jTlotU1RMI1NvdXRobGFuZCNOWi1TCi1nZW8jTlotVEFTI1Rhc21hbiNOWi1TCi1nZW8jTlotVEtJI1RhcmFuYWtpI05aLU4KLWdlbyNOWi1XR04jV2VsbGluZ3RvbiNOWi1OCi1nZW8jTlotV0tPI1dhaWthdG8jTlotTgotZ2VvI05aLVdUQyNXZXN0IENvYXN0I05aLVMKLWdlbyNPTSNPbWFuIy0tCi1nZW8jUEEjUGFuYW1hIy0tCi1nZW8jUEUjUGVydSMtLQotZ2VvI1BGI0ZyZW5jaCBQb2x5bmVzaWEjLS0KLWdlbyNQRyNQYXB1YSBOZXcgR3VpbmVhIy0tCi1nZW8jUEgjUGhpbGlwcGluZXMjLS0KLWdlbyNQSyNQYWtpc3RhbiMtLQotZ2VvI1BMI1BvbGFuZCMtLQotZ2VvI1BMLURTI0RvbG5vxZtsxIVza2llI1BMCi1nZW8jUEwtS1AjS3VqYXdza28tcG9tb3Jza2llI1BMCi1nZW8jUEwtTFUjTHViZWxza2llI1BMCi1nZW8jUEwtTEIjTHVidXNraWUjUEwKLWdlbyNQTC1MRCPFgcOzZHpraWUjUEwKLWdlbyNQTC1NQSNNYcWCb3BvbHNraWUjUEwKLWdlbyNQTC1NWiNNYXpvd2llY2tpZSNQTAotZ2VvI1BMLU9QI09wb2xza2llI1BMCi1nZW8jUEwtUEsjUG9ka2FycGFja2llI1BMCi1nZW8jUEwtUEQjUG9kbGFza2llI1BMCi1nZW8jUEwtUE0jUG9tb3Jza2llI1BMCi1nZW8jUEwtU0wjxZpsxIVza2llI1BMCi1nZW8jUEwtU0sjxZp3acSZdG9rcnp5c2tpZSNQTAotZ2VvI1BMLVdOI1dhcm1pxYRza28tbWF6dXJza2llI1BMCi1nZW8jUEwtV1AjV2llbGtvcG9sc2tpZSNQTAotZ2VvI1BMLVpQI1phY2hvZG5pb3BvbW9yc2tpZSNQTAotZ2VvI1BNI1N0IFBpZXJyZSBBbmQgTWlxdWVsb24jLS0KLWdlbyNQTiNQaXRjYWlybiMtLQotZ2VvI1BSI1B1ZXJ0byBSaWNvIy0tCi1nZW8jUFMjIlBhbGVzdGluaWFuIFRlcnJpdG9yeSwgT2NjdXBpZWQiIy0tCi1nZW8jUFQjUG9ydHVnYWwjLS0KLWdlbyNQVyNQYWxhdSMtLQotZ2VvI1BZI1BhcmFndWF5Iy0tCi1nZW8jUUEjUWF0YXIjLS0KLWdlbyNSRSNSZXVuaW9uIy0tCi1nZW8jUk8jUm9tYW5pYSMtLQotZ2VvI1JPLUIjQnVjdXJlxZ90aSNSTwotZ2VvI1JPLUFCI0FsYmEjUk8KLWdlbyNSTy1BUiNBcmFkI1JPCi1nZW8jUk8tQUcjQXJnZcWfI1JPCi1nZW8jUk8tQkMjQmFjxIN1I1JPCi1nZW8jUk8tQkgjQmlob3IjUk8KLWdlbyNSTy1CTiNCaXN0cmnFo2EtTsSDc8SDdWQjUk8KLWdlbyNSTy1CVCNCb3RvxZ9hbmkjUk8KLWdlbyNSTy1CViNCcmHFn292I1JPCi1nZW8jUk8tQlIjQnLEg2lsYSNSTwotZ2VvI1JPLUJaI0J1esSDdSNSTwotZ2VvI1JPLUNTI0NhcmHFny1TZXZlcmluI1JPCi1nZW8jUk8tQ0wjQ8SDbMSDcmHFn2kjUk8KLWdlbyNSTy1DSiNDbHVqI1JPCi1nZW8jUk8tQ1QjQ29uc3RhbsWjYSNSTwotZ2VvI1JPLUNWI0NvdmFzbmEjUk8KLWdlbyNSTy1EQiNEw6JtYm92acWjYSNSTwotZ2VvI1JPLURKI0RvbGojUk8KLWdlbyNSTy1HTCNHYWxhxaNpI1JPCi1nZW8jUk8tR1IjR2l1cmdpdSNSTwotZ2VvI1JPLUdKI0dvcmojUk8KLWdlbyNSTy1IUiNIYXJnaGl0YSNSTwotZ2VvI1JPLUhEI0h1bmVkb2FyYSNSTwotZ2VvI1JPLUlMI0lhbG9tacWjYSNSTwotZ2VvI1JPLUlTI0lhxZ9pI1JPCi1nZW8jUk8tTU0jTWFyYW11cmXFnyNSTwotZ2VvI1JPLU1II01laGVkaW7Fo2kjUk8KLWdlbyNSTy1NUyNNdXJlxZ8jUk8KLWdlbyNSTy1OVCNOZWFtxaMjUk8KLWdlbyNSTy1PVCNPbHQjUk8KLWdlbyNSTy1QSCNQcmFob3ZhI1JPCi1nZW8jUk8tU00jU2F0dSBNYXJlI1JPCi1nZW8jUk8tU0ojU8SDbGFqI1JPCi1nZW8jUk8tU0IjU2liaXUjUk8KLWdlbyNSTy1TViNTdWNlYXZhI1JPCi1nZW8jUk8tVFIjVGVsZW9ybWFuI1JPCi1nZW8jUk8tVE0jVGltacWfI1JPCi1nZW8jUk8tVEwjVHVsY2VhI1JPCi1nZW8jUk8tVlMjVmFzbHVpI1JPCi1nZW8jUk8tVkwjVsOibGNlYSNSTwotZ2VvI1JPLVZOI1ZyYW5jZWEjUk8KLWdlbyNSVSNSdXNzaWFuIEZlZGVyYXRpb24jLS0KLWdlbyNSVS1BRCMiQWR5Z2VqYSwgUmVzcHVibGlrYSIjUlUKLWdlbyNSVS1BTCMiQWx0YWosIFJlc3B1Ymxpa2EiI1JVCi1nZW8jUlUtQkEjIkJhxaFrb3J0b3N0YW4sIFJlc3B1Ymxpa2EiI1JVCi1nZW8jUlUtQlUjIkJ1cmphdGlqYSwgUmVzcHVibGlrYSIjUlUKLWdlbyNSVS1DRSPEjGXEjWVuc2thamEgUmVzcHVibGlrYSNSVQotZ2VvI1JVLUNVI8SMdXZhxaFza2FqYSBSZXNwdWJsaWthI1JVCi1nZW8jUlUtREEjIkRhZ2VzdGFuLCBSZXNwdWJsaWthIiNSVQotZ2VvI1JVLUlOI0luZ3XFoXNrYWphIFJlc3B1Ymxpa2EgW1Jlc3B1Ymxpa2EgSW5ndcWhZXRpamFdI1JVCi1nZW8jUlUtS0IjS2FiYXJkaW5vLUJhbGthcnNrYWphIFJlc3B1Ymxpa2EjUlUKLWdlbyNSVS1LTCMiS2FsbXlraWphLCBSZXNwdWJsaWthIiNSVQotZ2VvI1JVLUtDI0thcmHEjWFqZXZvLcSMZXJrZXNza2FqYSBSZXNwdWJsaWthI1JVCi1nZW8jUlUtS1IjIkthcmVsaWphLCBSZXNwdWJsaWthIiNSVQotZ2VvI1JVLUtLIyJIYWthc2lqYSwgUmVzcHVibGlrYSIjUlUKLWdlbyNSVS1LTyMiS29taSwgUmVzcHVibGlrYSIjUlUKLWdlbyNSVS1NRSMiTWFyaWogw4hsLCBSZXNwdWJsaWthIiNSVQotZ2VvI1JVLU1PIyJNb3Jkb3ZpamEsIFJlc3B1Ymxpa2EiI1JVCi1nZW8jUlUtU0EjIlNhaGEsIFJlc3B1Ymxpa2EgW0pha3V0aWphXSIjUlUKLWdlbyNSVS1TRSMiU2V2ZXJuYWphIE9zZXRpamEsIFJlc3B1Ymxpa2EgW0FsYW5pamFdIFtSZXNwdWJsaWthIFNldmVybmFqYSBPc2V0aWphLUFsYW5pamFdIiNSVQotZ2VvI1JVLVRBIyJUYXRhcnN0YW4sIFJlc3B1Ymxpa2EiI1JVCi1nZW8jUlUtVFkjIlR5dmEsIFJlc3B1Ymxpa2EgW1R1dmFdIiNSVQotZ2VvI1JVLVVEI1VkbXVydHNrYWphIFJlc3B1Ymxpa2EjUlUKLWdlbyNSVS1BTFQjQWx0YWpza2lqIGtyYWojUlUKLWdlbyNSVS1LSEEjSGFiYXJvdnNraWoga3JhaiNSVQotZ2VvI1JVLUtEQSNLcmFzbm9kYXJza2lqIGtyYWojUlUKLWdlbyNSVS1LWUEjS3Jhc25vamFyc2tpaiBrcmFqI1JVCi1nZW8jUlUtUFJJI1ByaW1vcnNraWoga3JhaiNSVQotZ2VvI1JVLVNUQSNTdGF2cm9wb2wnc2tpaiBrcmFqI1JVCi1nZW8jUlUtQU1VI0FtdXJza2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtQVJLI0FyaGFuZ2VsJ3NrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1BU1QjQXN0cmFoYW5za2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtQkVMI0JlbGdvcm9kc2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLUJSWSNCcmphbnNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1DSEUjxIxlbGphYmluc2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLUNISSPEjGl0aW5za2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtSVJLI0lya3V0c2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLUlWQSNJdmFub3Zza2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtS0dEI0thbGluaW5ncmFkc2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLUtMVSNLYWx1xb5za2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtS0FNI0thbcSNYXRza2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtS0VNI0tlbWVyb3Zza2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtS0lSI0tpcm92c2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLUtPUyNLb3N0cm9tc2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLUtHTiNLdXJnYW5za2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtS1JTI0t1cnNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1MRU4jTGVuaW5ncmFkc2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLUxJUCNMaXBldHNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1NQUcjTWFnYWRhbnNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1NT1MjTW9za292c2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLU1VUiNNdXJtYW5za2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtTklaI05pxb5lZ29yb2Rza2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtTkdSI05vdmdvcm9kc2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLU5WUyNOb3Zvc2liaXJza2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtT01TI09tc2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLU9SRSNPcmVuYnVyZ3NrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1PUkwjT3Jsb3Zza2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtUE5aI1BlbnplbnNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1QRVIjUGVybXNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1QU0sjUHNrb3Zza2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtUk9TI1Jvc3RvdnNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1SWUEjUmphemFuc2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLVNBSyNTYWhhbGluc2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLVNBTSNTYW1hcnNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1TQVIjU2FyYXRvdnNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1TTU8jU21vbGVuc2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLVNWRSNTdmVyZGxvdnNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1UQU0jVGFtYm92c2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLVRPTSNUb21za2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtVFVMI1R1bCdza2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtVFZFI1R2ZXJza2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtVFlVI1RqdW1lbnNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1VTFkjVWwnamFub3Zza2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtVkxBI1ZsYWRpbWlyc2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLVZHRyNWb2xnb2dyYWRza2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtVkxHI1ZvbG9nb2Rza2FqYSBvYmxhc3QnI1JVCi1nZW8jUlUtVk9SI1Zvcm9uZcW+c2thamEgb2JsYXN0JyNSVQotZ2VvI1JVLVlBUiNKYXJvc2xhdnNrYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1NT1cjTW9za3ZhI1JVCi1nZW8jUlUtU1BFI1Nhbmt0LVBldGVyYnVyZyNSVQotZ2VvI1JVLVlFViNFdnJlanNrYWphIGF2dG9ub21uYWphIG9ibGFzdCcjUlUKLWdlbyNSVS1BR0IjQWdpbnNraWogQnVyamF0c2tpaiBhdnRvbm9tbnlqIG9rcnVnI1JVCi1nZW8jUlUtQ0hVI8SMdWtvdHNraWogYXZ0b25vbW55aiBva3J1ZyNSVQotZ2VvI1JVLUVWRSPDiHZlbmtpanNraWogYXZ0b25vbW55aiBva3J1ZyNSVQotZ2VvI1JVLUtITSNIYW50eS1NYW5zaWpza2lqIGF2dG9ub21ueWogb2tydWcjUlUKLWdlbyNSVS1LT1AjS29taS1QZXJtamF0c2tpaiBhdnRvbm9tbnlqIG9rcnVnI1JVCi1nZW8jUlUtS09SI0tvcmpha3NraWogYXZ0b25vbW55aiBva3J1ZyNSVQotZ2VvI1JVLU5FTiNOZW5ldHNraWogYXZ0b25vbW55aiBva3J1ZyNSVQotZ2VvI1JVLVRBWSNUYWpteXJza2lqIChEb2xnYW5vLU5lbmV0c2tpaikgYXZ0b25vbW55aiBva3J1ZyNSVQotZ2VvI1JVLVVPQiNVc3QnLU9yZHluc2tpaiBCdXJqYXRza2lqIGF2dG9ub21ueWogb2tydWcjUlUKLWdlbyNSVS1ZQU4jSmFtYWxvLU5lbmV0c2tpaiBhdnRvbm9tbnlqIG9rcnVnI1JVCi1nZW8jUlcjUndhbmRhIy0tCi1nZW8jU0EjU2F1ZGkgQXJhYmlhIy0tCi1nZW8jU0IjU29sb21vbiBJc2xhbmRzIy0tCi1nZW8jU0MjU2V5Y2hlbGxlcyMtLQotZ2VvI1NEI1N1ZGFuIy0tCi1nZW8jU0UjU3dlZGVuIy0tCi1nZW8jU0UtQUIjU3RvY2tob2xtcyBMw6RuI1NFCi1nZW8jU0UtQUMjVsOkc3RlcmJvdHRlbnMgTMOkbiNTRQotZ2VvI1NFLUJEI05vcnJib3R0ZW5zIEzDpG4jU0UKLWdlbyNTRS1DI1VwcHNhbGEgTMOkbiNTRQotZ2VvI1NFLUQjU8O2ZGVybWFubGFuZHMgTMOkbiNTRQotZ2VvI1NFLUUjw5ZzdGVyZ8O2dGxhbmRzIEzDpG4jU0UKLWdlbyNTRS1GI0rDtm5rw7ZwaW5ncyBMw6RuI1NFCi1nZW8jU0UtRyNLcm9ub2JvcmdzIEzDpG4jU0UKLWdlbyNTRS1II0thbG1hciBMw6RuI1NFCi1nZW8jU0UtSSNHb3RsYW5kcyBMw6RuI1NFCi1nZW8jU0UtSyNCbGVraW5nZSBMw6RuI1NFCi1nZW8jU0UtTSNTa8OlbmUgTMOkbiNTRQotZ2VvI1NFLU4jSGFsbGFuZHMgTMOkbiNTRQotZ2VvI1NFLU8jVsOkc3RyYSBHw7Z0YWxhbmRzIEzDpG4jU0UKLWdlbyNTRS1TI1bDpHJtbGFuZHMgTMOkbiNTRQotZ2VvI1NFLVQjw5ZyZWJybyBMw6RuI1NFCi1nZW8jU0UtVSNWw6RzdG1hbmxhbmRzIEzDpG4jU0UKLWdlbyNTRS1XI0RhbGFybmVzIEzDpG4jU0UKLWdlbyNTRS1YI0fDpHZsZWJvcmdzIEzDpG4jU0UKLWdlbyNTRS1ZI1bDpHN0ZXJub3JybGFuZHMgTMOkbiNTRQotZ2VvI1NFLVojSsOkbXRsYW5kcyBMw6RuI1NFCi1nZW8jU0cjU2luZ2Fwb3JlIy0tCi1nZW8jU0gjU3QgSGVsZW5hIy0tCi1nZW8jU0kjU2xvdmVuaWEjLS0KLWdlbyNTSiNTdmFsYmFyZCBBbmQgSmFuIE1heWVuIy0tCi1nZW8jU0sjU2xvdmFraWEjLS0KLWdlbyNTTCNTaWVycmEgTGVvbmUjLS0KLWdlbyNTTSNTYW4gTWFyaW5vIy0tCi1nZW8jU04jU2VuZWdhbCMtLQotZ2VvI1NPI1NvbWFsaWEjLS0KLWdlbyNTUiNTdXJpbmFtZSMtLQotZ2VvI1NUI1NhbyBUb21lIEFuZCBQcmluY2lwZSMtLQotZ2VvI1NWI0VsIFNhbHZhZG9yIy0tCi1nZW8jU1kjU3lyaWFuIEFyYWIgUmVwdWJsaWMjLS0KLWdlbyNTWiNTd2F6aWxhbmQjLS0KLWdlbyNUQyNUdXJrcyBBbmQgQ2FpY29zIElzbGFuZHMjLS0KLWdlbyNURCNDaGFkIy0tCi1nZW8jVEYjRnJlbmNoIFNvdXRoZXJuIFRlcnJpdG9yaWVzIy0tCi1nZW8jVEcjVG9nbyMtLQotZ2VvI1RII1RoYWlsYW5kIy0tCi1nZW8jVEojVGFqaWtpc3RhbiMtLQotZ2VvI1RNI1R1cmttZW5pc3RhbiMtLQotZ2VvI1ROI1R1bmlzaWEjLS0KLWdlbyNUTyNUb25nYSMtLQotZ2VvI1RQI0Vhc3QgVGltb3IjLS0KLWdlbyNUUiNUdXJrZXkjLS0KLWdlbyNUUi0wMSNBZGFuYSNUUgotZ2VvI1RSLTAyI0FkxLF5YW1hbiNUUgotZ2VvI1RSLTAzI0FmeW9uI1RSCi1nZW8jVFItMDQjQcSfcsSxI1RSCi1nZW8jVFItMDUjQW1hc3lhI1RSCi1nZW8jVFItMDYjQW5rYXJhI1RSCi1nZW8jVFItMDcjQW50YWx5YSNUUgotZ2VvI1RSLTA4I0FydHZpbiNUUgotZ2VvI1RSLTA5I0F5ZMSxbiNUUgotZ2VvI1RSLTEwI0JhbMSxa2VzaXIjVFIKLWdlbyNUUi0xMSNCaWxlY2lrI1RSCi1nZW8jVFItMTIjQmluZ8O2bCNUUgotZ2VvI1RSLTEzI0JpdGxpcyNUUgotZ2VvI1RSLTE0I0JvbHUjVFIKLWdlbyNUUi0xNSNCdXJkdXIjVFIKLWdlbyNUUi0xNiNCdXJzYSNUUgotZ2VvI1RSLTE3I8OHYW5ha2thbGUjVFIKLWdlbyNUUi0xOCPDh2Fua8SxcsSxI1RSCi1nZW8jVFItMTkjw4dvcnVtI1RSCi1nZW8jVFItMjAjRGVuaXpsaSNUUgotZ2VvI1RSLTIxI0RpeWFyYmFrxLFyI1RSCi1nZW8jVFItMjIjRWRpcm5lI1RSCi1nZW8jVFItMjMjRWxhesSxZyNUUgotZ2VvI1RSLTI0I0VyemluY2FuI1RSCi1nZW8jVFItMjUjRXJ6dXJ1bSNUUgotZ2VvI1RSLTI2I0Vza2nFn2VoaXIjVFIKLWdlbyNUUi0yNyNHYXppYW50ZXAjVFIKLWdlbyNUUi0yOCNHaXJlc3VuI1RSCi1nZW8jVFItMjkjR8O8bcO8xZ9oYW5lI1RSCi1nZW8jVFItMzAjSGFra8OicmkjVFIKLWdlbyNUUi0zMSNIYXRheSNUUgotZ2VvI1RSLTMyI0lzcGFydGEjVFIKLWdlbyNUUi0zMyPEsMOnZWwjVFIKLWdlbyNUUi0zNCPEsHN0YW5idWwjVFIKLWdlbyNUUi0zNSPEsHptaXIjVFIKLWdlbyNUUi0zNiNLYXJzI1RSCi1nZW8jVFItMzcjS2FzdGFtb251I1RSCi1nZW8jVFItMzgjS2F5c2VyaSNUUgotZ2VvI1RSLTM5I0vEsXJrbGFyZWxpI1RSCi1nZW8jVFItNDAjS8SxcsWfZWhpciNUUgotZ2VvI1RSLTQxI0tvY2FlbGkjVFIKLWdlbyNUUi00MiNLb255YSNUUgotZ2VvI1RSLTQzI0vDvHRhaHlhI1RSCi1nZW8jVFItNDQjTWFsYXR5YSNUUgotZ2VvI1RSLTQ1I01hbmlzYSNUUgotZ2VvI1RSLTQ2I0thaHJhbWFubWFyYcWfI1RSCi1nZW8jVFItNDcjTWFyZGluI1RSCi1nZW8jVFItNDgjTXXEn2xhI1RSCi1nZW8jVFItNDkjTXXFnyNUUgotZ2VvI1RSLTUwI05ldsWfZWhpciNUUgotZ2VvI1RSLTUxI05pxJ9kZSNUUgotZ2VvI1RSLTUyI09yZHUjVFIKLWdlbyNUUi01MyNSaXplI1RSCi1nZW8jVFItNTQjU2FrYXJ5YSNUUgotZ2VvI1RSLTU1I1NhbXN1biNUUgotZ2VvI1RSLTU2I1NpaXJ0I1RSCi1nZW8jVFItNTcjU2lub3AjVFIKLWdlbyNUUi01OCNTaXZhcyNUUgotZ2VvI1RSLTU5I1Rla2lyZGHEnyNUUgotZ2VvI1RSLTYwI1Rva2F0I1RSCi1nZW8jVFItNjEjVHJhYnpvbiNUUgotZ2VvI1RSLTYyI1R1bmNlbGkjVFIKLWdlbyNUUi02MyPFnmFubMSxdXJmYSNUUgotZ2VvI1RSLTY0I1XFn2FrI1RSCi1nZW8jVFItNjUjVmFuI1RSCi1nZW8jVFItNjYjWW96Z2F0I1RSCi1nZW8jVFItNjcjWm9uZ3VsZGFrI1RSCi1nZW8jVFItNjgjQWtzYXJheSNUUgotZ2VvI1RSLTY5I0JheWJ1cnQjVFIKLWdlbyNUUi03MCNLYXJhbWFuI1RSCi1nZW8jVFItNzEjS8SxcsSxa2thbGUjVFIKLWdlbyNUUi03MiNCYXRtYW4jVFIKLWdlbyNUUi03MyPFnsSxcm5hayNUUgotZ2VvI1RSLTc0I0JhcnTEsW4jVFIKLWdlbyNUUi03NSNBcmRhaGFuI1RSCi1nZW8jVFItNzYjScSfZMSxciNUUgotZ2VvI1RSLTc3I1lhbG92YSNUUgotZ2VvI1RSLTc4I0thcmFiw7xrI1RSCi1nZW8jVFItNzkjS2lsaXMjVFIKLWdlbyNUUi04MCNPc21hbml5ZSNUUgotZ2VvI1RUI1RyaW5pZGFkIEFuZCBUb2JhZ28jLS0KLWdlbyNUViNUdXZhbHUjLS0KLWdlbyNUVyMiVGFpd2FuLCBQcm92aW5jZSBPZiBDaGluYSIjLS0KLWdlbyNUWiMiVGFuemFuaWEsIFVuaXRlZCBSZXB1YmxpYyBvZiIjLS0KLWdlbyNVQSNVa3JhaW5lIy0tCi1nZW8jVUcjVWdhbmRhIy0tCi1nZW8jVU0jVVMgTWlub3IgT3V0bHlpbmcgSXNsYW5kcyMtLQotZ2VvI1VNLTY3I0pvaG5zdG9uIEF0b2xsI1VNCi1nZW8jVU0tNzEjTWlkd2F5IElzbGFuZHMjVU0KLWdlbyNVTS03NiNOYXZhc3NhIElzbGFuZCNVTQotZ2VvI1VNLTc5I1dha2UgSXNsYW5kI1VNCi1nZW8jVU0tODEjQmFrZXIgSXNsYW5kI1VNCi1nZW8jVU0tODQjSG93bGFuZCBJc2xhbmQjVU0KLWdlbyNVTS04NiNKYXJ2aXMgSXNsYW5kI1VNCi1nZW8jVU0tODkjS2luZ21hbiBSZWVmI1VNCi1nZW8jVU0tOTUjUGFsbXlyYSBBdG9sbCNVTQotZ2VvI1VTI1VuaXRlZCBTdGF0ZXMjLS0KLWdlbyNVUy1BSyNBbGFza2EjVVMKLWdlbyNVUy1BTCNBbGFiYW1hI1VTCi1nZW8jVVMtQVIjQXJrYW5zYXMjVVMKLWdlbyNVUy1BUyNBbWVyaWNhbiBTYW1vYSNVUwotZ2VvI1VTLUFaI0FyaXpvbmEjVVMKLWdlbyNVUy1DQSNDYWxpZm9ybmlhI1VTCi1nZW8jVVMtQ08jQ29sb3JhZG8jVVMKLWdlbyNVUy1DVCNDb25uZWN0aWN1dCNVUwotZ2VvI1VTLURDI0Rpc3RyaWN0IE9mIENvbHVtYmlhI1VTCi1nZW8jVVMtREUjRGVsYXdhcmUjVVMKLWdlbyNVUy1GTCNGbG9yaWRhI1VTCi1nZW8jVVMtR0EjR2VvcmdpYSNVUwotZ2VvI1VTLUdVI0d1YW0jVVMKLWdlbyNVUy1ISSNIYXdhaWkjVVMKLWdlbyNVUy1JQSNJb3dhI1VTCi1nZW8jVVMtSUQjSWRhaG8jVVMKLWdlbyNVUy1JTCNJbGxpbm9pcyNVUwotZ2VvI1VTLUlOI0luZGlhbmEjVVMKLWdlbyNVUy1LUyNLYW5zYXMjVVMKLWdlbyNVUy1LWSNLZW50dWNreSNVUwotZ2VvI1VTLUxBI0xvdWlzaWFuYSNVUwotZ2VvI1VTLU1BI01hc3NhY2h1c2V0dHMjVVMKLWdlbyNVUy1NRCNNYXJ5bGFuZCNVUwotZ2VvI1VTLU1FI01haW5lI1VTCi1nZW8jVVMtTUkjTWljaGlnYW4jVVMKLWdlbyNVUy1NTiNNaW5uZXNvdGEjVVMKLWdlbyNVUy1NTyNNaXNzb3VyaSNVUwotZ2VvI1VTLU1QI05vcnRoZXJuIE1hcmlhbmEgSXNsYW5kcyNVUwotZ2VvI1VTLU1TI01pc3Npc3NpcHBpI1VTCi1nZW8jVVMtTVQjTW9udGFuYSNVUwotZ2VvI1VTLU5DI05vcnRoIENhcm9saW5hI1VTCi1nZW8jVVMtTkQjTm9ydGggRGFrb3RhI1VTCi1nZW8jVVMtTkUjTmVicmFza2EjVVMKLWdlbyNVUy1OSCNOZXcgSGFtcHNoaXJlI1VTCi1nZW8jVVMtTkojTmV3IEplcnNleSNVUwotZ2VvI1VTLU5NI05ldyBNZXhpY28jVVMKLWdlbyNVUy1OViNOZXZhZGEjVVMKLWdlbyNVUy1OWSNOZXcgWW9yayNVUwotZ2VvI1VTLU9II09oaW8jVVMKLWdlbyNVUy1PSyNPa2xhaG9tYSNVUwotZ2VvI1VTLU9SI09yZWdvbiNVUwotZ2VvI1VTLVBBI1Blbm5zeWx2YW5pYSNVUwotZ2VvI1VTLVBSI1B1ZXJ0byBSaWNvI1VTCi1nZW8jVVMtUkkjUmhvZGUgSXNsYW5kI1VTCi1nZW8jVVMtU0MjU291dGggQ2Fyb2xpbmEjVVMKLWdlbyNVUy1TRCNTb3V0aCBEYWtvdGEjVVMKLWdlbyNVUy1UTiNUZW5uZXNzZWUjVVMKLWdlbyNVUy1UWCNUZXhhcyNVUwotZ2VvI1VTLVVNI1UuUy4gTWlub3IgT3V0bHlpbmcgSXNsYW5kcyNVUwotZ2VvI1VTLVVUI1V0YWgjVVMKLWdlbyNVUy1WQSNWaXJnaW5pYSNVUwotZ2VvI1VTLVZJI1ZpcmdpbiBJc2xhbmRzIE9mIFRoZSBVLlMuI1VTCi1nZW8jVVMtVlQjVmVybW9udCNVUwotZ2VvI1VTLVdBI1dhc2hpbmd0b24jVVMKLWdlbyNVUy1XSSNXaXNjb25zaW4jVVMKLWdlbyNVUy1XViNXZXN0IFZpcmdpbmlhI1VTCi1nZW8jVVMtV1kjV3lvbWluZyNVUwotZ2VvI1VZI1VydWd1YXkjLS0KLWdlbyNVWiNVemJla2lzdGFuIy0tCi1nZW8jVkEjVmF0aWNhbiBDaXR5IFN0YXRlIy0tCi1nZW8jVkMjU3QgVmluY2VudCBBbmQgR3JlbmFkaW5lcyMtLQotZ2VvI1ZFI1ZlbmV6dWVsYSMtLQotZ2VvI1ZHIyJWaXJnaW4gSXNsYW5kcywgQnJpdGlzaCIjLS0KLWdlbyNWSSNVbml0ZWQgU3RhdGVzIFZpcmdpbiBJc2xhbmRzIy0tCi1nZW8jVk4jVmlldCBOYW0jLS0KLWdlbyNWTi0wMSNMYWkgQ2hhdSNWTgotZ2VvI1ZOLTAyI0xhbyBDYWkjVk4KLWdlbyNWTi0wMyNIYSBHaWFuZyNWTgotZ2VvI1ZOLTA0I0NhbyBCYW5nI1ZOCi1nZW8jVk4tMDUjU29uIExhI1ZOCi1nZW8jVk4tMDYjWWVuIEJhaSNWTgotZ2VvI1ZOLTA3I1R1eWVuIFF1YW5nI1ZOCi1nZW8jVk4tMDkjTGFuZyBTb24jVk4KLWdlbyNWTi0xMyNRdWFuZyBOaW5oI1ZOCi1nZW8jVk4tMTQjSG9hIEJpbmgjVk4KLWdlbyNWTi0xNSNIYSBUYXkjVk4KLWdlbyNWTi0xOCNOaW5oIEJpbmgjVk4KLWdlbyNWTi0yMCNUaGFpIEJpbmgjVk4KLWdlbyNWTi0yMSNUaGFuaCBIb2EjVk4KLWdlbyNWTi0yMiNOZ2hlIEFuI1ZOCi1nZW8jVk4tMjMjSGEgVGluaCNWTgotZ2VvI1ZOLTI0I1F1YW5nIEJpbmgjVk4KLWdlbyNWTi0yNSNRdWFuZyBUcmkjVk4KLWdlbyNWTi0yNiNUaHVhIFRoaWVuLUh1ZSNWTgotZ2VvI1ZOLTI3I1F1YW5nIE5hbSNWTgotZ2VvI1ZOLTI4I0tvbiBUdW0jVk4KLWdlbyNWTi0yOSNRdWFuZyBOZ2FpI1ZOCi1nZW8jVk4tMzAjR2lhIExhaSNWTgotZ2VvI1ZOLTMxI0JpbmggRGluaCNWTgotZ2VvI1ZOLTMyI1BodSBZZW4jVk4KLWdlbyNWTi0zMyNEYWMgTGFjI1ZOCi1nZW8jVk4tMzQjS2hhbmggSG9hI1ZOCi1nZW8jVk4tMzUjTGFtIERvbmcjVk4KLWdlbyNWTi0zNiNOaW5oIFRodWFuI1ZOCi1nZW8jVk4tMzcjVGF5IE5pbmgjVk4KLWdlbyNWTi0zOSNEb25nIE5haSNWTgotZ2VvI1ZOLTQwI0JpbmggVGh1YW4jVk4KLWdlbyNWTi00MSNMb25nIEFuI1ZOCi1nZW8jVk4tNDMjQmEgUmlhIC0gVnVuZyBUYXUjVk4KLWdlbyNWTi00NCNBbiBHaWFuZyNWTgotZ2VvI1ZOLTQ1I0RvbmcgVGhhcCNWTgotZ2VvI1ZOLTQ2I1RpZW4gR2lhbmcjVk4KLWdlbyNWTi00NyNLaWVuIEdpYW5nI1ZOCi1nZW8jVk4tNDgjQ2FuIFRobyNWTgotZ2VvI1ZOLTQ5I1ZpbmggTG9uZyNWTgotZ2VvI1ZOLTUwI0JlbiBUcmUjVk4KLWdlbyNWTi01MSNUcmEgVmluaCNWTgotZ2VvI1ZOLTUyI1NvYyBUcmFuZyNWTgotZ2VvI1ZOLTUzI0JhYyBDYW4jVk4KLWdlbyNWTi01NCNCYWMgR2lhbmcjVk4KLWdlbyNWTi01NSNCYWMgTGlldSNWTgotZ2VvI1ZOLTU2I0JhYyBOaW5oI1ZOCi1nZW8jVk4tNTcjQmluaCBEdW9uZyNWTgotZ2VvI1ZOLTU4I0JpbmggUGh1b2MjVk4KLWdlbyNWTi01OSNDYSBNYXUjVk4KLWdlbyNWTi02MCMiRGEgTmFuZywgdGhhbmggcGhvIiNWTgotZ2VvI1ZOLTYxI0hhaSBEdW9uZyNWTgotZ2VvI1ZOLTYyIyJIYWkgUGhvbmcsIHRoYW5oIHBobyIjVk4KLWdlbyNWTi02MyNIYSBOYW0jVk4KLWdlbyNWTi02NCMiSGEgTm9pLCB0aHUgZG8iI1ZOCi1nZW8jVk4tNjUjIkhvIENoaSBNaW5oLCB0aGFuaCBwbyBbU2FpIEdvbl0iI1ZOCi1nZW8jVk4tNjYjSHVuZyBZZW4jVk4KLWdlbyNWTi02NyNOYW0gRGluaCNWTgotZ2VvI1ZOLTY4I1BodSBUaG8jVk4KLWdlbyNWTi02OSNUaGFpIE5ndXllbiNWTgotZ2VvI1ZOLTcwI1ZpbmggUGh1YyNWTgotZ2VvI1ZVI1ZhbnVhdHUjLS0KLWdlbyNXRiNXYWxsaXMgQW5kIEZ1dHVuYSBJc2xhbmRzIy0tCi1nZW8jV1MjU2Ftb2EjLS0KLWdlbyNZRSNZZW1lbiMtLQotZ2VvI1lUI01heW90dGUjLS0KLWdlbyNZVSNZdWdvc2xhdmlhIChGZWQgUmVwIE9mKSMtLQotZ2VvI1lVLUNHI0NybmEgR29yYSNZVQotZ2VvI1lVLVNSI1NyYmlqYSNZVQotZ2VvI1lVLUtNI0tvc292by1NZXRvaGlqYSNZVS1TUgotZ2VvI1lVLVZPI1ZvanZvZGluYSNZVS1TUgotZ2VvI1pBI1NvdXRoIEFmcmljYSMtLQotZ2VvI1pNI1phbWJpYSMtLQotZ2VvI1pXI1ppbWJhYndlIy0tCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZGF0YS9uYWljcy1kYXRhLnR4dCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9kYXRhL25haWNzLWRhdGEudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDZmOTA1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9kYXRhL25haWNzLWRhdGEudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTgxNCArMCwwIEBACi1uYWljcyMxMSNBZ3JpY3VsdHVyZSwgRm9yZXN0cnksIEZpc2hpbmcgYW5kIEh1bnRpbmcjMTEKLW5haWNzIzExMSNDcm9wIFByb2R1Y3Rpb24jMTEKLW5haWNzIzExMTEjT2lsc2VlZCBhbmQgR3JhaW4gRmFybWluZyMxMTEKLW5haWNzIzExMTExI1NveWJlYW4gRmFybWluZyMxMTExCi1uYWljcyMxMTExMiNPaWxzZWVkIChleGNlcHQgU295YmVhbikgRmFybWluZyMxMTExCi1uYWljcyMxMTExMyNEcnkgUGVhIGFuZCBCZWFuIEZhcm1pbmcjMTExMQotbmFpY3MjMTExMTQjV2hlYXQgRmFybWluZyMxMTExCi1uYWljcyMxMTExNSNDb3JuIEZhcm1pbmcjMTExMQotbmFpY3MjMTExMTYjUmljZSBGYXJtaW5nIzExMTEKLW5haWNzIzExMTE5I090aGVyIEdyYWluIEZhcm1pbmcjMTExMQotbmFpY3MjMTExMTkxI09pbHNlZWQgYW5kIEdyYWluIENvbWJpbmF0aW9uIEZhcm1pbmcjMTExMTkKLW5haWNzIzExMTE5OSNBbGwgT3RoZXIgR3JhaW4gRmFybWluZyMxMTExOQotbmFpY3MjMTExMiNWZWdldGFibGUgYW5kIE1lbG9uIEZhcm1pbmcjMTExCi1uYWljcyMxMTEyMSNWZWdldGFibGUgYW5kIE1lbG9uIEZhcm1pbmcjMTExMgotbmFpY3MjMTExMjExI1BvdGF0byBGYXJtaW5nIzExMTIxCi1uYWljcyMxMTEyMTkjT3RoZXIgVmVnZXRhYmxlIChleGNlcHQgUG90YXRvKSBhbmQgTWVsb24gRmFybWluZyMxMTEyMQotbmFpY3MjMTExMyNGcnVpdCBhbmQgVHJlZSBOdXQgRmFybWluZyMxMTEKLW5haWNzIzExMTMxI09yYW5nZSBHcm92ZXMjMTExMwotbmFpY3MjMTExMzIjQ2l0cnVzIChleGNlcHQgT3JhbmdlKSBHcm92ZXMjMTExMwotbmFpY3MjMTExMzMjTm9uY2l0cnVzIEZydWl0IGFuZCBUcmVlIE51dCBGYXJtaW5nIzExMTMKLW5haWNzIzExMTMzMSNBcHBsZSBPcmNoYXJkcyMxMTEzMwotbmFpY3MjMTExMzMyI0dyYXBlIFZpbmV5YXJkcyMxMTEzMwotbmFpY3MjMTExMzMzI1N0cmF3YmVycnkgRmFybWluZyMxMTEzMwotbmFpY3MjMTExMzM0I0JlcnJ5IChleGNlcHQgU3RyYXdiZXJyeSkgRmFybWluZyMxMTEzMwotbmFpY3MjMTExMzM1I1RyZWUgTnV0IEZhcm1pbmcjMTExMzMKLW5haWNzIzExMTMzNiNGcnVpdCBhbmQgVHJlZSBOdXQgQ29tYmluYXRpb24gRmFybWluZyMxMTEzMwotbmFpY3MjMTExMzM5I090aGVyIE5vbmNpdHJ1cyBGcnVpdCBGYXJtaW5nIzExMTMzCi1uYWljcyMxMTE0I0dyZWVuaG91c2UsIE51cnNlcnksIGFuZCBGbG9yaWN1bHR1cmUgUHJvZHVjdGlvbiMxMTEKLW5haWNzIzExMTQxI0Zvb2QgQ3JvcHMgR3Jvd24gVW5kZXIgQ292ZXIjMTExNAotbmFpY3MjMTExNDExI011c2hyb29tIFByb2R1Y3Rpb24jMTExNDEKLW5haWNzIzExMTQxOSNPdGhlciBGb29kIENyb3BzIEdyb3duIFVuZGVyIENvdmVyIzExMTQxCi1uYWljcyMxMTE0MiNOdXJzZXJ5IGFuZCBGbG9yaWN1bHR1cmUgUHJvZHVjdGlvbiMxMTE0Ci1uYWljcyMxMTE0MjEjTnVyc2VyeSBhbmQgVHJlZSBQcm9kdWN0aW9uIzExMTQyCi1uYWljcyMxMTE0MjIjRmxvcmljdWx0dXJlIFByb2R1Y3Rpb24jMTExNDIKLW5haWNzIzExMTkjT3RoZXIgQ3JvcCBGYXJtaW5nIzExMQotbmFpY3MjMTExOTEjVG9iYWNjbyBGYXJtaW5nIzExMTkKLW5haWNzIzExMTkyI0NvdHRvbiBGYXJtaW5nIzExMTkKLW5haWNzIzExMTkzI1N1Z2FyY2FuZSBGYXJtaW5nIzExMTkKLW5haWNzIzExMTk0I0hheSBGYXJtaW5nIzExMTkKLW5haWNzIzExMTk5I0FsbCBPdGhlciBDcm9wIEZhcm1pbmcjMTExOQotbmFpY3MjMTExOTkxI1N1Z2FyIEJlZXQgRmFybWluZyMxMTE5OQotbmFpY3MjMTExOTkyI1BlYW51dCBGYXJtaW5nIzExMTk5Ci1uYWljcyMxMTE5OTgjQWxsIE90aGVyIE1pc2NlbGxhbmVvdXMgQ3JvcCBGYXJtaW5nIzExMTk5Ci1uYWljcyMxMTIjQW5pbWFsIFByb2R1Y3Rpb24jMTEKLW5haWNzIzExMjEjQ2F0dGxlIFJhbmNoaW5nIGFuZCBGYXJtaW5nIzExMgotbmFpY3MjMTEyMTEjQmVlZiBDYXR0bGUgUmFuY2hpbmcgYW5kIEZhcm1pbmcsIGluY2x1ZGluZyBGZWVkbG90cyMxMTIxCi1uYWljcyMxMTIxMTEjQmVlZiBDYXR0bGUgUmFuY2hpbmcgYW5kIEZhcm1pbmcjMTEyMTEKLW5haWNzIzExMjExMiNDYXR0bGUgRmVlZGxvdHMjMTEyMTEKLW5haWNzIzExMjEyI0RhaXJ5IENhdHRsZSBhbmQgTWlsayBQcm9kdWN0aW9uIzExMjEKLW5haWNzIzExMjEzI0R1YWwgUHVycG9zZSBDYXR0bGUgUmFuY2hpbmcgYW5kIEZhcm1pbmcjMTEyMQotbmFpY3MjMTEyMiNIb2cgYW5kIFBpZyBGYXJtaW5nIzExMgotbmFpY3MjMTEyMjEjSG9nIGFuZCBQaWcgRmFybWluZyMxMTIyCi1uYWljcyMxMTIzI1BvdWx0cnkgYW5kIEVnZyBQcm9kdWN0aW9uIzExMgotbmFpY3MjMTEyMzEjQ2hpY2tlbiBFZ2cgUHJvZHVjdGlvbiMxMTIzCi1uYWljcyMxMTIzMiNCcm9pbGVycyBhbmQgT3RoZXIgTWVhdCBUeXBlIENoaWNrZW4gUHJvZHVjdGlvbiMxMTIzCi1uYWljcyMxMTIzMyNUdXJrZXkgUHJvZHVjdGlvbiMxMTIzCi1uYWljcyMxMTIzNCNQb3VsdHJ5IEhhdGNoZXJpZXMjMTEyMwotbmFpY3MjMTEyMzkjT3RoZXIgUG91bHRyeSBQcm9kdWN0aW9uIzExMjMKLW5haWNzIzExMjQjU2hlZXAgYW5kIEdvYXQgRmFybWluZyMxMTIKLW5haWNzIzExMjQxI1NoZWVwIEZhcm1pbmcjMTEyNAotbmFpY3MjMTEyNDIjR29hdCBGYXJtaW5nIzExMjQKLW5haWNzIzExMjUjQW5pbWFsIEFxdWFjdWx0dXJlIzExMgotbmFpY3MjMTEyNTEjQW5pbWFsIEFxdWFjdWx0dXJlIzExMjUKLW5haWNzIzExMjUxMSNGaW5maXNoIEZhcm1pbmcgYW5kIEZpc2ggSGF0Y2hlcmllcyMxMTI1MQotbmFpY3MjMTEyNTEyI1NoZWxsZmlzaCBGYXJtaW5nIzExMjUxCi1uYWljcyMxMTI1MTkjT3RoZXIgQW5pbWFsIEFxdWFjdWx0dXJlIzExMjUxCi1uYWljcyMxMTI5I090aGVyIEFuaW1hbCBQcm9kdWN0aW9uIzExMgotbmFpY3MjMTEyOTEjQXBpY3VsdHVyZSMxMTI5Ci1uYWljcyMxMTI5MiNIb3JzZSBhbmQgT3RoZXIgRXF1aW5lIFByb2R1Y3Rpb24jMTEyOQotbmFpY3MjMTEyOTMjRnVyLUJlYXJpbmcgQW5pbWFsIGFuZCBSYWJiaXQgUHJvZHVjdGlvbiMxMTI5Ci1uYWljcyMxMTI5OSNBbGwgT3RoZXIgQW5pbWFsIFByb2R1Y3Rpb24jMTEyOQotbmFpY3MjMTEzI0ZvcmVzdHJ5IGFuZCBMb2dnaW5nIzExCi1uYWljcyMxMTMxI1RpbWJlciBUcmFjdCBPcGVyYXRpb25zIzExMwotbmFpY3MjMTEzMTEjVGltYmVyIFRyYWN0IE9wZXJhdGlvbnMjMTEzMQotbmFpY3MjMTEzMiNGb3Jlc3QgTnVyc2VyaWVzIGFuZCBHYXRoZXJpbmcgb2YgRm9yZXN0IFByb2R1Y3RzIzExMwotbmFpY3MjMTEzMjEjRm9yZXN0IE51cnNlcmllcyBhbmQgR2F0aGVyaW5nIG9mIEZvcmVzdCBQcm9kdWN0cyMxMTMyCi1uYWljcyMxMTMzI0xvZ2dpbmcjMTEzCi1uYWljcyMxMTMzMSNMb2dnaW5nIzExMzMKLW5haWNzIzExNCNGaXNoaW5nLCBIdW50aW5nIGFuZCBUcmFwcGluZyMxMQotbmFpY3MjMTE0MSNGaXNoaW5nIzExNAotbmFpY3MjMTE0MTEjRmlzaGluZyMxMTQxCi1uYWljcyMxMTQxMTEjRmluZmlzaCBGaXNoaW5nIzExNDExCi1uYWljcyMxMTQxMTIjU2hlbGxmaXNoIEZpc2hpbmcjMTE0MTEKLW5haWNzIzExNDExOSNPdGhlciBNYXJpbmUgRmlzaGluZyMxMTQxMQotbmFpY3MjMTE0MiNIdW50aW5nIGFuZCBUcmFwcGluZyMxMTQKLW5haWNzIzExNDIxI0h1bnRpbmcgYW5kIFRyYXBwaW5nIzExNDIKLW5haWNzIzExNSNTdXBwb3J0IEFjdGl2aXRpZXMgZm9yIEFncmljdWx0dXJlIGFuZCBGb3Jlc3RyeSMxMQotbmFpY3MjMTE1MSNTdXBwb3J0IEFjdGl2aXRpZXMgZm9yIENyb3AgUHJvZHVjdGlvbiMxMTUKLW5haWNzIzExNTExI1N1cHBvcnQgQWN0aXZpdGllcyBmb3IgQ3JvcCBQcm9kdWN0aW9uIzExNTEKLW5haWNzIzExNTExMSNDb3R0b24gR2lubmluZyMxMTUxMQotbmFpY3MjMTE1MTEyI1NvaWwgUHJlcGFyYXRpb24sIFBsYW50aW5nLCBhbmQgQ3VsdGl2YXRpbmcjMTE1MTEKLW5haWNzIzExNTExMyNDcm9wIEhhcnZlc3RpbmcsIFByaW1hcmlseSBieSBNYWNoaW5lIzExNTExCi1uYWljcyMxMTUxMTQjUG9zdGhhcnZlc3QgQ3JvcCBBY3Rpdml0aWVzIChleGNlcHQgQ290dG9uIEdpbm5pbmcpIzExNTExCi1uYWljcyMxMTUxMTUjRmFybSBMYWJvciBDb250cmFjdG9ycyBhbmQgQ3JldyBMZWFkZXJzIzExNTExCi1uYWljcyMxMTUxMTYjRmFybSBNYW5hZ2VtZW50IFNlcnZpY2VzIzExNTExCi1uYWljcyMxMTUyI1N1cHBvcnQgQWN0aXZpdGllcyBmb3IgQW5pbWFsIFByb2R1Y3Rpb24jMTE1Ci1uYWljcyMxMTUyMSNTdXBwb3J0IEFjdGl2aXRpZXMgZm9yIEFuaW1hbCBQcm9kdWN0aW9uIzExNTIKLW5haWNzIzExNTMjU3VwcG9ydCBBY3Rpdml0aWVzIGZvciBGb3Jlc3RyeSMxMTUKLW5haWNzIzExNTMxI1N1cHBvcnQgQWN0aXZpdGllcyBmb3IgRm9yZXN0cnkjMTE1MwotbmFpY3MjMjEjTWluaW5nIzIxCi1uYWljcyMyMTEjT2lsIGFuZCBHYXMgRXh0cmFjdGlvbiMyMQotbmFpY3MjMjExMSNPaWwgYW5kIEdhcyBFeHRyYWN0aW9uIzIxMQotbmFpY3MjMjExMTEjT2lsIGFuZCBHYXMgRXh0cmFjdGlvbiMyMTExCi1uYWljcyMyMTExMTEjQ3J1ZGUgUGV0cm9sZXVtIGFuZCBOYXR1cmFsIEdhcyBFeHRyYWN0aW9uIzIxMTExCi1uYWljcyMyMTExMTIjTmF0dXJhbCBHYXMgTGlxdWlkIEV4dHJhY3Rpb24jMjExMTEKLW5haWNzIzIxMiNNaW5pbmcgKGV4Y2VwdCBPaWwgYW5kIEdhcykjMjEKLW5haWNzIzIxMjEjQ29hbCBNaW5pbmcjMjEyCi1uYWljcyMyMTIxMSNDb2FsIE1pbmluZyMyMTIxCi1uYWljcyMyMTIxMTEjQml0dW1pbm91cyBDb2FsIGFuZCBMaWduaXRlIFN1cmZhY2UgTWluaW5nIzIxMjExCi1uYWljcyMyMTIxMTIjQml0dW1pbm91cyBDb2FsIFVuZGVyZ3JvdW5kIE1pbmluZyMyMTIxMQotbmFpY3MjMjEyMTEzI0FudGhyYWNpdGUgTWluaW5nIzIxMjExCi1uYWljcyMyMTIyI01ldGFsIE9yZSBNaW5pbmcjMjEyCi1uYWljcyMyMTIyMSNJcm9uIE9yZSBNaW5pbmcjMjEyMgotbmFpY3MjMjEyMjIjR29sZCBPcmUgYW5kIFNpbHZlciBPcmUgTWluaW5nIzIxMjIKLW5haWNzIzIxMjIyMSNHb2xkIE9yZSBNaW5pbmcjMjEyMjIKLW5haWNzIzIxMjIyMiNTaWx2ZXIgT3JlIE1pbmluZyMyMTIyMgotbmFpY3MjMjEyMjMjQ29wcGVyLCBOaWNrZWwsIExlYWQsIGFuZCBaaW5jIE1pbmluZyMyMTIyCi1uYWljcyMyMTIyMzEjTGVhZCBPcmUgYW5kIFppbmMgT3JlIE1pbmluZyMyMTIyMwotbmFpY3MjMjEyMjM0I0NvcHBlciBPcmUgYW5kIE5pY2tlbCBPcmUgTWluaW5nIzIxMjIzCi1uYWljcyMyMTIyOSNPdGhlciBNZXRhbCBPcmUgTWluaW5nIzIxMjIKLW5haWNzIzIxMjI5MSNVcmFuaXVtLVJhZGl1bS1WYW5hZGl1bSBPcmUgTWluaW5nIzIxMjI5Ci1uYWljcyMyMTIyOTkjQWxsIE90aGVyIE1ldGFsIE9yZSBNaW5pbmcjMjEyMjkKLW5haWNzIzIxMjMjTm9ubWV0YWxsaWMgTWluZXJhbCBNaW5pbmcgYW5kIFF1YXJyeWluZyMyMTIKLW5haWNzIzIxMjMxI1N0b25lIE1pbmluZyBhbmQgUXVhcnJ5aW5nIzIxMjMKLW5haWNzIzIxMjMxMSNEaW1lbnNpb24gU3RvbmUgTWluaW5nIGFuZCBRdWFycnlpbmcjMjEyMzEKLW5haWNzIzIxMjMxMiNDcnVzaGVkIGFuZCBCcm9rZW4gTGltZXN0b25lIE1pbmluZyBhbmQgUXVhcnJ5aW5nIzIxMjMxCi1uYWljcyMyMTIzMTMjQ3J1c2hlZCBhbmQgQnJva2VuIEdyYW5pdGUgTWluaW5nIGFuZCBRdWFycnlpbmcjMjEyMzEKLW5haWNzIzIxMjMxOSNPdGhlciBDcnVzaGVkIGFuZCBCcm9rZW4gU3RvbmUgTWluaW5nIGFuZCBRdWFycnlpbmcjMjEyMzEKLW5haWNzIzIxMjMyI1NhbmQsIEdyYXZlbCwgQ2xheSwgYW5kIENlcmFtaWMgYW5kIFJlZnJhY3RvcnkgTWluZXJhbHMgTWluaW5nIGFuZCBRdWFycnlpbmcjMjEyMwotbmFpY3MjMjEyMzIxI0NvbnN0cnVjdGlvbiBTYW5kIGFuZCBHcmF2ZWwgTWluaW5nIzIxMjMyCi1uYWljcyMyMTIzMjIjSW5kdXN0cmlhbCBTYW5kIE1pbmluZyMyMTIzMgotbmFpY3MjMjEyMzI0I0thb2xpbiBhbmQgQmFsbCBDbGF5IE1pbmluZyMyMTIzMgotbmFpY3MjMjEyMzI1I0NsYXkgYW5kIENlcmFtaWMgYW5kIFJlZnJhY3RvcnkgTWluZXJhbHMgTWluaW5nIzIxMjMyCi1uYWljcyMyMTIzOSNPdGhlciBOb25tZXRhbGxpYyBNaW5lcmFsIE1pbmluZyBhbmQgUXVhcnJ5aW5nIzIxMjMKLW5haWNzIzIxMjM5MSNQb3Rhc2gsIFNvZGEsIGFuZCBCb3JhdGUgTWluZXJhbCBNaW5pbmcjMjEyMzkKLW5haWNzIzIxMjM5MiNQaG9zcGhhdGUgUm9jayBNaW5pbmcjMjEyMzkKLW5haWNzIzIxMjM5MyNPdGhlciBDaGVtaWNhbCBhbmQgRmVydGlsaXplciBNaW5lcmFsIE1pbmluZyMyMTIzOQotbmFpY3MjMjEyMzk5I0FsbCBPdGhlciBOb25tZXRhbGxpYyBNaW5lcmFsIE1pbmluZyMyMTIzOQotbmFpY3MjMjEzI1N1cHBvcnQgQWN0aXZpdGllcyBmb3IgTWluaW5nIzIxCi1uYWljcyMyMTMxI1N1cHBvcnQgQWN0aXZpdGllcyBmb3IgTWluaW5nIzIxMwotbmFpY3MjMjEzMTEjU3VwcG9ydCBBY3Rpdml0aWVzIGZvciBNaW5pbmcjMjEzMQotbmFpY3MjMjEzMTExI0RyaWxsaW5nIE9pbCBhbmQgR2FzIFdlbGxzIzIxMzExCi1uYWljcyMyMTMxMTIjU3VwcG9ydCBBY3Rpdml0aWVzIGZvciBPaWwgYW5kIEdhcyBPcGVyYXRpb25zIzIxMzExCi1uYWljcyMyMTMxMTMjU3VwcG9ydCBBY3Rpdml0aWVzIGZvciBDb2FsIE1pbmluZyMyMTMxMQotbmFpY3MjMjEzMTE0I1N1cHBvcnQgQWN0aXZpdGllcyBmb3IgTWV0YWwgTWluaW5nIzIxMzExCi1uYWljcyMyMTMxMTUjU3VwcG9ydCBBY3Rpdml0aWVzIGZvciBOb25tZXRhbGxpYyBNaW5lcmFscyAoZXhjZXB0IEZ1ZWxzKSMyMTMxMQotbmFpY3MjMjIjVXRpbGl0aWVzIzIyCi1uYWljcyMyMjEjVXRpbGl0aWVzIzIyCi1uYWljcyMyMjExI0VsZWN0cmljIFBvd2VyIEdlbmVyYXRpb24sIFRyYW5zbWlzc2lvbiBhbmQgRGlzdHJpYnV0aW9uIzIyMQotbmFpY3MjMjIxMTEjRWxlY3RyaWMgUG93ZXIgR2VuZXJhdGlvbiMyMjExCi1uYWljcyMyMjExMTEjSHlkcm9lbGVjdHJpYyBQb3dlciBHZW5lcmF0aW9uIzIyMTExCi1uYWljcyMyMjExMTIjRm9zc2lsIEZ1ZWwgRWxlY3RyaWMgUG93ZXIgR2VuZXJhdGlvbiMyMjExMQotbmFpY3MjMjIxMTEzI051Y2xlYXIgRWxlY3RyaWMgUG93ZXIgR2VuZXJhdGlvbiMyMjExMQotbmFpY3MjMjIxMTE5I090aGVyIEVsZWN0cmljIFBvd2VyIEdlbmVyYXRpb24jMjIxMTEKLW5haWNzIzIyMTEyI0VsZWN0cmljIFBvd2VyIFRyYW5zbWlzc2lvbiwgQ29udHJvbCwgYW5kIERpc3RyaWJ1dGlvbiMyMjExCi1uYWljcyMyMjExMjEjRWxlY3RyaWMgQnVsayBQb3dlciBUcmFuc21pc3Npb24gYW5kIENvbnRyb2wjMjIxMTIKLW5haWNzIzIyMTEyMiNFbGVjdHJpYyBQb3dlciBEaXN0cmlidXRpb24jMjIxMTIKLW5haWNzIzIyMTIjTmF0dXJhbCBHYXMgRGlzdHJpYnV0aW9uIzIyMQotbmFpY3MjMjIxMjEjTmF0dXJhbCBHYXMgRGlzdHJpYnV0aW9uIzIyMTIKLW5haWNzIzIyMTMjV2F0ZXIsIFNld2FnZSBhbmQgT3RoZXIgU3lzdGVtcyMyMjEKLW5haWNzIzIyMTMxI1dhdGVyIFN1cHBseSBhbmQgSXJyaWdhdGlvbiBTeXN0ZW1zIzIyMTMKLW5haWNzIzIyMTMyI1Nld2FnZSBUcmVhdG1lbnQgRmFjaWxpdGllcyMyMjEzCi1uYWljcyMyMjEzMyNTdGVhbSBhbmQgQWlyLUNvbmRpdGlvbmluZyBTdXBwbHkjMjIxMwotbmFpY3MjMjMjQ29uc3RydWN0aW9uIzIzCi1uYWljcyMyMzMjQnVpbGRpbmcsIERldmVsb3BpbmcsIGFuZCBHZW5lcmFsIENvbnRyYWN0aW5nIzIzCi1uYWljcyMyMzMxI0xhbmQgU3ViZGl2aXNpb24gYW5kIExhbmQgRGV2ZWxvcG1lbnQjMjMzCi1uYWljcyMyMzMxMSNMYW5kIFN1YmRpdmlzaW9uIGFuZCBMYW5kIERldmVsb3BtZW50IzIzMzEKLW5haWNzIzIzMzIjUmVzaWRlbnRpYWwgQnVpbGRpbmcgQ29uc3RydWN0aW9uIzIzMwotbmFpY3MjMjMzMjEjU2luZ2xlIEZhbWlseSBIb3VzaW5nIENvbnN0cnVjdGlvbiMyMzMyCi1uYWljcyMyMzMyMiNNdWx0aWZhbWlseSBIb3VzaW5nIENvbnN0cnVjdGlvbiMyMzMyCi1uYWljcyMyMzMzI05vbnJlc2lkZW50aWFsIEJ1aWxkaW5nIENvbnN0cnVjdGlvbiMyMzMKLW5haWNzIzIzMzMxI01hbnVmYWN0dXJpbmcgYW5kIEluZHVzdHJpYWwgQnVpbGRpbmcgQ29uc3RydWN0aW9uIzIzMzMKLW5haWNzIzIzMzMyI0NvbW1lcmNpYWwgYW5kIEluc3RpdHV0aW9uYWwgQnVpbGRpbmcgQ29uc3RydWN0aW9uIzIzMzMKLW5haWNzIzIzNCNIZWF2eSBDb25zdHJ1Y3Rpb24jMjMKLW5haWNzIzIzNDEjSGlnaHdheSwgU3RyZWV0LCBCcmlkZ2UsIGFuZCBUdW5uZWwgQ29uc3RydWN0aW9uIzIzNAotbmFpY3MjMjM0MTEjSGlnaHdheSBhbmQgU3RyZWV0IENvbnN0cnVjdGlvbiMyMzQxCi1uYWljcyMyMzQxMiNCcmlkZ2UgYW5kIFR1bm5lbCBDb25zdHJ1Y3Rpb24jMjM0MQotbmFpY3MjMjM0OSNPdGhlciBIZWF2eSBDb25zdHJ1Y3Rpb24jMjM0Ci1uYWljcyMyMzQ5MSNXYXRlciwgU2V3ZXIsIGFuZCBQaXBlbGluZSBDb25zdHJ1Y3Rpb24jMjM0OQotbmFpY3MjMjM0OTIjUG93ZXIgYW5kIENvbW11bmljYXRpb24gVHJhbnNtaXNzaW9uIExpbmUgQ29uc3RydWN0aW9uIzIzNDkKLW5haWNzIzIzNDkzI0luZHVzdHJpYWwgTm9uYnVpbGRpbmcgU3RydWN0dXJlIENvbnN0cnVjdGlvbiMyMzQ5Ci1uYWljcyMyMzQ5OSNBbGwgT3RoZXIgSGVhdnkgQ29uc3RydWN0aW9uIzIzNDkKLW5haWNzIzIzNSNTcGVjaWFsIFRyYWRlIENvbnRyYWN0b3JzIzIzCi1uYWljcyMyMzUxI1BsdW1iaW5nLCBIZWF0aW5nLCBhbmQgQWlyLUNvbmRpdGlvbmluZyBDb250cmFjdG9ycyMyMzUKLW5haWNzIzIzNTExI1BsdW1iaW5nLCBIZWF0aW5nLCBhbmQgQWlyLUNvbmRpdGlvbmluZyBDb250cmFjdG9ycyMyMzUxCi1uYWljcyMyMzUyI1BhaW50aW5nIGFuZCBXYWxsIENvdmVyaW5nIENvbnRyYWN0b3JzIzIzNQotbmFpY3MjMjM1MjEjUGFpbnRpbmcgYW5kIFdhbGwgQ292ZXJpbmcgQ29udHJhY3RvcnMjMjM1MgotbmFpY3MjMjM1MyNFbGVjdHJpY2FsIENvbnRyYWN0b3JzIzIzNQotbmFpY3MjMjM1MzEjRWxlY3RyaWNhbCBDb250cmFjdG9ycyMyMzUzCi1uYWljcyMyMzU0I01hc29ucnksIERyeXdhbGwsIEluc3VsYXRpb24sIGFuZCBUaWxlIENvbnRyYWN0b3JzIzIzNQotbmFpY3MjMjM1NDEjTWFzb25yeSBhbmQgU3RvbmUgQ29udHJhY3RvcnMjMjM1NAotbmFpY3MjMjM1NDIjRHJ5d2FsbCwgUGxhc3RlcmluZywgQWNvdXN0aWNhbCwgYW5kIEluc3VsYXRpb24gQ29udHJhY3RvcnMjMjM1NAotbmFpY3MjMjM1NDMjVGlsZSwgTWFyYmxlLCBUZXJyYXp6bywgYW5kIE1vc2FpYyBDb250cmFjdG9ycyMyMzU0Ci1uYWljcyMyMzU1I0NhcnBlbnRyeSBhbmQgRmxvb3IgQ29udHJhY3RvcnMjMjM1Ci1uYWljcyMyMzU1MSNDYXJwZW50cnkgQ29udHJhY3RvcnMjMjM1NQotbmFpY3MjMjM1NTIjRmxvb3IgTGF5aW5nIGFuZCBPdGhlciBGbG9vciBDb250cmFjdG9ycyMyMzU1Ci1uYWljcyMyMzU2I1Jvb2ZpbmcsIFNpZGluZywgYW5kIFNoZWV0IE1ldGFsIENvbnRyYWN0b3JzIzIzNQotbmFpY3MjMjM1NjEjUm9vZmluZywgU2lkaW5nLCBhbmQgU2hlZXQgTWV0YWwgQ29udHJhY3RvcnMjMjM1NgotbmFpY3MjMjM1NyNDb25jcmV0ZSBDb250cmFjdG9ycyMyMzUKLW5haWNzIzIzNTcxI0NvbmNyZXRlIENvbnRyYWN0b3JzIzIzNTcKLW5haWNzIzIzNTgjV2F0ZXIgV2VsbCBEcmlsbGluZyBDb250cmFjdG9ycyMyMzUKLW5haWNzIzIzNTgxI1dhdGVyIFdlbGwgRHJpbGxpbmcgQ29udHJhY3RvcnMjMjM1OAotbmFpY3MjMjM1OSNPdGhlciBTcGVjaWFsIFRyYWRlIENvbnRyYWN0b3JzIzIzNQotbmFpY3MjMjM1OTEjU3RydWN0dXJhbCBTdGVlbCBFcmVjdGlvbiBDb250cmFjdG9ycyMyMzU5Ci1uYWljcyMyMzU5MiNHbGFzcyBhbmQgR2xhemluZyBDb250cmFjdG9ycyMyMzU5Ci1uYWljcyMyMzU5MyNFeGNhdmF0aW9uIENvbnRyYWN0b3JzIzIzNTkKLW5haWNzIzIzNTk0I1dyZWNraW5nIGFuZCBEZW1vbGl0aW9uIENvbnRyYWN0b3JzIzIzNTkKLW5haWNzIzIzNTk1I0J1aWxkaW5nIEVxdWlwbWVudCBhbmQgT3RoZXIgTWFjaGluZXJ5IEluc3RhbGxhdGlvbiBDb250cmFjdG9ycyMyMzU5Ci1uYWljcyMyMzU5OSNBbGwgT3RoZXIgU3BlY2lhbCBUcmFkZSBDb250cmFjdG9ycyMyMzU5Ci1uYWljcyMzMSNNYW51ZmFjdHVyaW5nIzMxCi1uYWljcyMzMTEjRm9vZCBNYW51ZmFjdHVyaW5nIzMxCi1uYWljcyMzMTExI0FuaW1hbCBGb29kIE1hbnVmYWN0dXJpbmcjMzExCi1uYWljcyMzMTExMSNBbmltYWwgRm9vZCBNYW51ZmFjdHVyaW5nIzMxMTEKLW5haWNzIzMxMTExMSNEb2cgYW5kIENhdCBGb29kIE1hbnVmYWN0dXJpbmcjMzExMTEKLW5haWNzIzMxMTExOSNPdGhlciBBbmltYWwgRm9vZCBNYW51ZmFjdHVyaW5nIzMxMTExCi1uYWljcyMzMTEyI0dyYWluIGFuZCBPaWxzZWVkIE1pbGxpbmcjMzExCi1uYWljcyMzMTEyMSNGbG91ciBNaWxsaW5nIGFuZCBNYWx0IE1hbnVmYWN0dXJpbmcjMzExMgotbmFpY3MjMzExMjExI0Zsb3VyIE1pbGxpbmcjMzExMjEKLW5haWNzIzMxMTIxMiNSaWNlIE1pbGxpbmcjMzExMjEKLW5haWNzIzMxMTIxMyNNYWx0IE1hbnVmYWN0dXJpbmcjMzExMjEKLW5haWNzIzMxMTIyI1N0YXJjaCBhbmQgVmVnZXRhYmxlIEZhdHMgYW5kIE9pbHMgTWFudWZhY3R1cmluZyMzMTEyCi1uYWljcyMzMTEyMjEjV2V0IENvcm4gTWlsbGluZyMzMTEyMgotbmFpY3MjMzExMjIyI1NveWJlYW4gUHJvY2Vzc2luZyMzMTEyMgotbmFpY3MjMzExMjIzI090aGVyIE9pbHNlZWQgUHJvY2Vzc2luZyMzMTEyMgotbmFpY3MjMzExMjI1I0ZhdHMgYW5kIE9pbHMgUmVmaW5pbmcgYW5kIEJsZW5kaW5nIzMxMTIyCi1uYWljcyMzMTEyMyNCcmVha2Zhc3QgQ2VyZWFsIE1hbnVmYWN0dXJpbmcjMzExMgotbmFpY3MjMzExMyNTdWdhciBhbmQgQ29uZmVjdGlvbmVyeSBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzExCi1uYWljcyMzMTEzMSNTdWdhciBNYW51ZmFjdHVyaW5nIzMxMTMKLW5haWNzIzMxMTMxMSNTdWdhcmNhbmUgTWlsbHMjMzExMzEKLW5haWNzIzMxMTMxMiNDYW5lIFN1Z2FyIFJlZmluaW5nIzMxMTMxCi1uYWljcyMzMTEzMTMjQmVldCBTdWdhciBNYW51ZmFjdHVyaW5nIzMxMTMxCi1uYWljcyMzMTEzMiNDaG9jb2xhdGUgYW5kIENvbmZlY3Rpb25lcnkgTWFudWZhY3R1cmluZyBmcm9tIENhY2FvIEJlYW5zIzMxMTMKLW5haWNzIzMxMTMzI0NvbmZlY3Rpb25lcnkgTWFudWZhY3R1cmluZyBmcm9tIFB1cmNoYXNlZCBDaG9jb2xhdGUjMzExMwotbmFpY3MjMzExMzQjTm9uY2hvY29sYXRlIENvbmZlY3Rpb25lcnkgTWFudWZhY3R1cmluZyMzMTEzCi1uYWljcyMzMTE0I0ZydWl0IGFuZCBWZWdldGFibGUgUHJlc2VydmluZyBhbmQgU3BlY2lhbHR5IEZvb2QgTWFudWZhY3R1cmluZyMzMTEKLW5haWNzIzMxMTQxI0Zyb3plbiBGb29kIE1hbnVmYWN0dXJpbmcjMzExNAotbmFpY3MjMzExNDExI0Zyb3plbiBGcnVpdCwgSnVpY2UsIGFuZCBWZWdldGFibGUgTWFudWZhY3R1cmluZyMzMTE0MQotbmFpY3MjMzExNDEyI0Zyb3plbiBTcGVjaWFsdHkgRm9vZCBNYW51ZmFjdHVyaW5nIzMxMTQxCi1uYWljcyMzMTE0MiNGcnVpdCBhbmQgVmVnZXRhYmxlIENhbm5pbmcsIFBpY2tsaW5nLCBhbmQgRHJ5aW5nIzMxMTQKLW5haWNzIzMxMTQyMSNGcnVpdCBhbmQgVmVnZXRhYmxlIENhbm5pbmcjMzExNDIKLW5haWNzIzMxMTQyMiNTcGVjaWFsdHkgQ2FubmluZyMzMTE0MgotbmFpY3MjMzExNDIzI0RyaWVkIGFuZCBEZWh5ZHJhdGVkIEZvb2QgTWFudWZhY3R1cmluZyMzMTE0MgotbmFpY3MjMzExNSNEYWlyeSBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzExCi1uYWljcyMzMTE1MSNEYWlyeSBQcm9kdWN0IChleGNlcHQgRnJvemVuKSBNYW51ZmFjdHVyaW5nIzMxMTUKLW5haWNzIzMxMTUxMSNGbHVpZCBNaWxrIE1hbnVmYWN0dXJpbmcjMzExNTEKLW5haWNzIzMxMTUxMiNDcmVhbWVyeSBCdXR0ZXIgTWFudWZhY3R1cmluZyMzMTE1MQotbmFpY3MjMzExNTEzI0NoZWVzZSBNYW51ZmFjdHVyaW5nIzMxMTUxCi1uYWljcyMzMTE1MTQjRHJ5LCBDb25kZW5zZWQsIGFuZCBFdmFwb3JhdGVkIERhaXJ5IFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMTE1MQotbmFpY3MjMzExNTIjSWNlIENyZWFtIGFuZCBGcm96ZW4gRGVzc2VydCBNYW51ZmFjdHVyaW5nIzMxMTUKLW5haWNzIzMxMTYjQW5pbWFsIFNsYXVnaHRlcmluZyBhbmQgUHJvY2Vzc2luZyMzMTEKLW5haWNzIzMxMTYxI0FuaW1hbCBTbGF1Z2h0ZXJpbmcgYW5kIFByb2Nlc3NpbmcjMzExNgotbmFpY3MjMzExNjExI0FuaW1hbCAoZXhjZXB0IFBvdWx0cnkpIFNsYXVnaHRlcmluZyMzMTE2MQotbmFpY3MjMzExNjEyI01lYXQgUHJvY2Vzc2VkIGZyb20gQ2FyY2Fzc2VzIzMxMTYxCi1uYWljcyMzMTE2MTMjUmVuZGVyaW5nIGFuZCBNZWF0IEJ5cHJvZHVjdCBQcm9jZXNzaW5nIzMxMTYxCi1uYWljcyMzMTE2MTUjUG91bHRyeSBQcm9jZXNzaW5nIzMxMTYxCi1uYWljcyMzMTE3I1NlYWZvb2QgUHJvZHVjdCBQcmVwYXJhdGlvbiBhbmQgUGFja2FnaW5nIzMxMQotbmFpY3MjMzExNzEjU2VhZm9vZCBQcm9kdWN0IFByZXBhcmF0aW9uIGFuZCBQYWNrYWdpbmcjMzExNwotbmFpY3MjMzExNzExI1NlYWZvb2QgQ2FubmluZyMzMTE3MQotbmFpY3MjMzExNzEyI0ZyZXNoIGFuZCBGcm96ZW4gU2VhZm9vZCBQcm9jZXNzaW5nIzMxMTcxCi1uYWljcyMzMTE4I0Jha2VyaWVzIGFuZCBUb3J0aWxsYSBNYW51ZmFjdHVyaW5nIzMxMQotbmFpY3MjMzExODEjQnJlYWQgYW5kIEJha2VyeSBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzExOAotbmFpY3MjMzExODExI1JldGFpbCBCYWtlcmllcyMzMTE4MQotbmFpY3MjMzExODEyI0NvbW1lcmNpYWwgQmFrZXJpZXMjMzExODEKLW5haWNzIzMxMTgxMyNGcm96ZW4gQ2FrZXMsIFBpZXMsIGFuZCBPdGhlciBQYXN0cmllcyBNYW51ZmFjdHVyaW5nIzMxMTgxCi1uYWljcyMzMTE4MiNDb29raWUsIENyYWNrZXIsIGFuZCBQYXN0YSBNYW51ZmFjdHVyaW5nIzMxMTgKLW5haWNzIzMxMTgyMSNDb29raWUgYW5kIENyYWNrZXIgTWFudWZhY3R1cmluZyMzMTE4MgotbmFpY3MjMzExODIyI0Zsb3VyIE1peGVzIGFuZCBEb3VnaCBNYW51ZmFjdHVyaW5nIGZyb20gUHVyY2hhc2VkIEZsb3VyIzMxMTgyCi1uYWljcyMzMTE4MjMjRHJ5IFBhc3RhIE1hbnVmYWN0dXJpbmcjMzExODIKLW5haWNzIzMxMTgzI1RvcnRpbGxhIE1hbnVmYWN0dXJpbmcjMzExOAotbmFpY3MjMzExOSNPdGhlciBGb29kIE1hbnVmYWN0dXJpbmcjMzExCi1uYWljcyMzMTE5MSNTbmFjayBGb29kIE1hbnVmYWN0dXJpbmcjMzExOQotbmFpY3MjMzExOTExI1JvYXN0ZWQgTnV0cyBhbmQgUGVhbnV0IEJ1dHRlciBNYW51ZmFjdHVyaW5nIzMxMTkxCi1uYWljcyMzMTE5MTkjT3RoZXIgU25hY2sgRm9vZCBNYW51ZmFjdHVyaW5nIzMxMTkxCi1uYWljcyMzMTE5MiNDb2ZmZWUgYW5kIFRlYSBNYW51ZmFjdHVyaW5nIzMxMTkKLW5haWNzIzMxMTkzI0ZsYXZvcmluZyBTeXJ1cCBhbmQgQ29uY2VudHJhdGUgTWFudWZhY3R1cmluZyMzMTE5Ci1uYWljcyMzMTE5NCNTZWFzb25pbmcgYW5kIERyZXNzaW5nIE1hbnVmYWN0dXJpbmcjMzExOQotbmFpY3MjMzExOTQxI01heW9ubmFpc2UsIERyZXNzaW5nLCBhbmQgT3RoZXIgUHJlcGFyZWQgU2F1Y2UgTWFudWZhY3R1cmluZyMzMTE5NAotbmFpY3MjMzExOTQyI1NwaWNlIGFuZCBFeHRyYWN0IE1hbnVmYWN0dXJpbmcjMzExOTQKLW5haWNzIzMxMTk5I0FsbCBPdGhlciBGb29kIE1hbnVmYWN0dXJpbmcjMzExOQotbmFpY3MjMzExOTkxI1BlcmlzaGFibGUgUHJlcGFyZWQgRm9vZCBNYW51ZmFjdHVyaW5nIzMxMTk5Ci1uYWljcyMzMTE5OTkjQWxsIE90aGVyIE1pc2NlbGxhbmVvdXMgRm9vZCBNYW51ZmFjdHVyaW5nIzMxMTk5Ci1uYWljcyMzMTIjQmV2ZXJhZ2UgYW5kIFRvYmFjY28gUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMxCi1uYWljcyMzMTIxI0JldmVyYWdlIE1hbnVmYWN0dXJpbmcjMzEyCi1uYWljcyMzMTIxMSNTb2Z0IERyaW5rIGFuZCBJY2UgTWFudWZhY3R1cmluZyMzMTIxCi1uYWljcyMzMTIxMTEjU29mdCBEcmluayBNYW51ZmFjdHVyaW5nIzMxMjExCi1uYWljcyMzMTIxMTIjQm90dGxlZCBXYXRlciBNYW51ZmFjdHVyaW5nIzMxMjExCi1uYWljcyMzMTIxMTMjSWNlIE1hbnVmYWN0dXJpbmcjMzEyMTEKLW5haWNzIzMxMjEyI0JyZXdlcmllcyMzMTIxCi1uYWljcyMzMTIxMyNXaW5lcmllcyMzMTIxCi1uYWljcyMzMTIxNCNEaXN0aWxsZXJpZXMjMzEyMQotbmFpY3MjMzEyMiNUb2JhY2NvIE1hbnVmYWN0dXJpbmcjMzEyCi1uYWljcyMzMTIyMSNUb2JhY2NvIFN0ZW1taW5nIGFuZCBSZWRyeWluZyMzMTIyCi1uYWljcyMzMTIyMiNUb2JhY2NvIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMTIyCi1uYWljcyMzMTIyMjEjQ2lnYXJldHRlIE1hbnVmYWN0dXJpbmcjMzEyMjIKLW5haWNzIzMxMjIyOSNPdGhlciBUb2JhY2NvIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMTIyMgotbmFpY3MjMzEzI1RleHRpbGUgTWlsbHMjMzEKLW5haWNzIzMxMzEjRmliZXIsIFlhcm4sIGFuZCBUaHJlYWQgTWlsbHMjMzEzCi1uYWljcyMzMTMxMSNGaWJlciwgWWFybiwgYW5kIFRocmVhZCBNaWxscyMzMTMxCi1uYWljcyMzMTMxMTEjWWFybiBTcGlubmluZyBNaWxscyMzMTMxMQotbmFpY3MjMzEzMTEyI1lhcm4gVGV4dHVyaXppbmcsIFRocm93aW5nLCBhbmQgVHdpc3RpbmcgTWlsbHMjMzEzMTEKLW5haWNzIzMxMzExMyNUaHJlYWQgTWlsbHMjMzEzMTEKLW5haWNzIzMxMzIjRmFicmljIE1pbGxzIzMxMwotbmFpY3MjMzEzMjEjQnJvYWR3b3ZlbiBGYWJyaWMgTWlsbHMjMzEzMgotbmFpY3MjMzEzMjIjTmFycm93IEZhYnJpYyBNaWxscyBhbmQgU2NoaWZmbGkgTWFjaGluZSBFbWJyb2lkZXJ5IzMxMzIKLW5haWNzIzMxMzIyMSNOYXJyb3cgRmFicmljIE1pbGxzIzMxMzIyCi1uYWljcyMzMTMyMjIjU2NoaWZmbGkgTWFjaGluZSBFbWJyb2lkZXJ5IzMxMzIyCi1uYWljcyMzMTMyMyNOb253b3ZlbiBGYWJyaWMgTWlsbHMjMzEzMgotbmFpY3MjMzEzMjQjS25pdCBGYWJyaWMgTWlsbHMjMzEzMgotbmFpY3MjMzEzMjQxI1dlZnQgS25pdCBGYWJyaWMgTWlsbHMjMzEzMjQKLW5haWNzIzMxMzI0OSNPdGhlciBLbml0IEZhYnJpYyBhbmQgTGFjZSBNaWxscyMzMTMyNAotbmFpY3MjMzEzMyNUZXh0aWxlIGFuZCBGYWJyaWMgRmluaXNoaW5nIGFuZCBGYWJyaWMgQ29hdGluZyBNaWxscyMzMTMKLW5haWNzIzMxMzMxI1RleHRpbGUgYW5kIEZhYnJpYyBGaW5pc2hpbmcgTWlsbHMjMzEzMwotbmFpY3MjMzEzMzExI0Jyb2Fkd292ZW4gRmFicmljIEZpbmlzaGluZyBNaWxscyMzMTMzMQotbmFpY3MjMzEzMzEyI1RleHRpbGUgYW5kIEZhYnJpYyBGaW5pc2hpbmcgKGV4Y2VwdCBCcm9hZHdvdmVuIEZhYnJpYykgTWlsbHMjMzEzMzEKLW5haWNzIzMxMzMyI0ZhYnJpYyBDb2F0aW5nIE1pbGxzIzMxMzMKLW5haWNzIzMxNCNUZXh0aWxlIFByb2R1Y3QgTWlsbHMjMzEKLW5haWNzIzMxNDEjVGV4dGlsZSBGdXJuaXNoaW5ncyBNaWxscyMzMTQKLW5haWNzIzMxNDExI0NhcnBldCBhbmQgUnVnIE1pbGxzIzMxNDEKLW5haWNzIzMxNDEyI0N1cnRhaW4gYW5kIExpbmVuIE1pbGxzIzMxNDEKLW5haWNzIzMxNDEyMSNDdXJ0YWluIGFuZCBEcmFwZXJ5IE1pbGxzIzMxNDEyCi1uYWljcyMzMTQxMjkjT3RoZXIgSG91c2Vob2xkIFRleHRpbGUgUHJvZHVjdCBNaWxscyMzMTQxMgotbmFpY3MjMzE0OSNPdGhlciBUZXh0aWxlIFByb2R1Y3QgTWlsbHMjMzE0Ci1uYWljcyMzMTQ5MSNUZXh0aWxlIEJhZyBhbmQgQ2FudmFzIE1pbGxzIzMxNDkKLW5haWNzIzMxNDkxMSNUZXh0aWxlIEJhZyBNaWxscyMzMTQ5MQotbmFpY3MjMzE0OTEyI0NhbnZhcyBhbmQgUmVsYXRlZCBQcm9kdWN0IE1pbGxzIzMxNDkxCi1uYWljcyMzMTQ5OSNBbGwgT3RoZXIgVGV4dGlsZSBQcm9kdWN0IE1pbGxzIzMxNDkKLW5haWNzIzMxNDk5MSNSb3BlLCBDb3JkYWdlLCBhbmQgVHdpbmUgTWlsbHMjMzE0OTkKLW5haWNzIzMxNDk5MiNUaXJlIENvcmQgYW5kIFRpcmUgRmFicmljIE1pbGxzIzMxNDk5Ci1uYWljcyMzMTQ5OTkjQWxsIE90aGVyIE1pc2NlbGxhbmVvdXMgVGV4dGlsZSBQcm9kdWN0IE1pbGxzIzMxNDk5Ci1uYWljcyMzMTUjQXBwYXJlbCBNYW51ZmFjdHVyaW5nIzMxCi1uYWljcyMzMTUxI0FwcGFyZWwgS25pdHRpbmcgTWlsbHMjMzE1Ci1uYWljcyMzMTUxMSNIb3NpZXJ5IGFuZCBTb2NrIE1pbGxzIzMxNTEKLW5haWNzIzMxNTExMSNTaGVlciBIb3NpZXJ5IE1pbGxzIzMxNTExCi1uYWljcyMzMTUxMTkjT3RoZXIgSG9zaWVyeSBhbmQgU29jayBNaWxscyMzMTUxMQotbmFpY3MjMzE1MTkjT3RoZXIgQXBwYXJlbCBLbml0dGluZyBNaWxscyMzMTUxCi1uYWljcyMzMTUxOTEjT3V0ZXJ3ZWFyIEtuaXR0aW5nIE1pbGxzIzMxNTE5Ci1uYWljcyMzMTUxOTIjVW5kZXJ3ZWFyIGFuZCBOaWdodHdlYXIgS25pdHRpbmcgTWlsbHMjMzE1MTkKLW5haWNzIzMxNTIjQ3V0IGFuZCBTZXcgQXBwYXJlbCBNYW51ZmFjdHVyaW5nIzMxNQotbmFpY3MjMzE1MjEjQ3V0IGFuZCBTZXcgQXBwYXJlbCBDb250cmFjdG9ycyMzMTUyCi1uYWljcyMzMTUyMTEjTWVuJ3MgYW5kIEJveXMnIEN1dCBhbmQgU2V3IEFwcGFyZWwgQ29udHJhY3RvcnMjMzE1MjEKLW5haWNzIzMxNTIxMiNXb21lbidzLCBHaXJscycsIGFuZCBJbmZhbnRzJyBDdXQgYW5kIFNldyBBcHBhcmVsIENvbnRyYWN0b3JzIzMxNTIxCi1uYWljcyMzMTUyMiNNZW4ncyBhbmQgQm95cycgQ3V0IGFuZCBTZXcgQXBwYXJlbCBNYW51ZmFjdHVyaW5nIzMxNTIKLW5haWNzIzMxNTIyMSNNZW4ncyBhbmQgQm95cycgQ3V0IGFuZCBTZXcgVW5kZXJ3ZWFyIGFuZCBOaWdodHdlYXIgTWFudWZhY3R1cmluZyMzMTUyMgotbmFpY3MjMzE1MjIyI01lbidzIGFuZCBCb3lzJyBDdXQgYW5kIFNldyBTdWl0LCBDb2F0LCBhbmQgT3ZlcmNvYXQgTWFudWZhY3R1cmluZyMzMTUyMgotbmFpY3MjMzE1MjIzI01lbidzIGFuZCBCb3lzJyBDdXQgYW5kIFNldyBTaGlydCAoZXhjZXB0IFdvcmsgU2hpcnQpIE1hbnVmYWN0dXJpbmcjMzE1MjIKLW5haWNzIzMxNTIyNCNNZW4ncyBhbmQgQm95cycgQ3V0IGFuZCBTZXcgVHJvdXNlciwgU2xhY2ssIGFuZCBKZWFuIE1hbnVmYWN0dXJpbmcjMzE1MjIKLW5haWNzIzMxNTIyNSNNZW4ncyBhbmQgQm95cycgQ3V0IGFuZCBTZXcgV29yayBDbG90aGluZyBNYW51ZmFjdHVyaW5nIzMxNTIyCi1uYWljcyMzMTUyMjgjTWVuJ3MgYW5kIEJveXMnIEN1dCBhbmQgU2V3IE90aGVyIE91dGVyd2VhciBNYW51ZmFjdHVyaW5nIzMxNTIyCi1uYWljcyMzMTUyMyNXb21lbidzIGFuZCBHaXJscycgQ3V0IGFuZCBTZXcgQXBwYXJlbCBNYW51ZmFjdHVyaW5nIzMxNTIKLW5haWNzIzMxNTIzMSNXb21lbidzIGFuZCBHaXJscycgQ3V0IGFuZCBTZXcgTGluZ2VyaWUsIExvdW5nZXdlYXIsIGFuZCBOaWdodHdlYXIgTWFudWZhY3R1cmluZyMzMTUyMwotbmFpY3MjMzE1MjMyI1dvbWVuJ3MgYW5kIEdpcmxzJyBDdXQgYW5kIFNldyBCbG91c2UgYW5kIFNoaXJ0IE1hbnVmYWN0dXJpbmcjMzE1MjMKLW5haWNzIzMxNTIzMyNXb21lbidzIGFuZCBHaXJscycgQ3V0IGFuZCBTZXcgRHJlc3MgTWFudWZhY3R1cmluZyMzMTUyMwotbmFpY3MjMzE1MjM0I1dvbWVuJ3MgYW5kIEdpcmxzJyBDdXQgYW5kIFNldyBTdWl0LCBDb2F0LCBUYWlsb3JlZCBKYWNrZXQsIGFuZCBTa2lydCBNYW51ZmFjdHVyaW5nIzMxNTIzCi1uYWljcyMzMTUyMzkjV29tZW4ncyBhbmQgR2lybHMnIEN1dCBhbmQgU2V3IE90aGVyIE91dGVyd2VhciBNYW51ZmFjdHVyaW5nIzMxNTIzCi1uYWljcyMzMTUyOSNPdGhlciBDdXQgYW5kIFNldyBBcHBhcmVsIE1hbnVmYWN0dXJpbmcjMzE1MgotbmFpY3MjMzE1MjkxI0luZmFudHMnIEN1dCBhbmQgU2V3IEFwcGFyZWwgTWFudWZhY3R1cmluZyMzMTUyOQotbmFpY3MjMzE1MjkyI0Z1ciBhbmQgTGVhdGhlciBBcHBhcmVsIE1hbnVmYWN0dXJpbmcjMzE1MjkKLW5haWNzIzMxNTI5OSNBbGwgT3RoZXIgQ3V0IGFuZCBTZXcgQXBwYXJlbCBNYW51ZmFjdHVyaW5nIzMxNTI5Ci1uYWljcyMzMTU5I0FwcGFyZWwgQWNjZXNzb3JpZXMgYW5kIE90aGVyIEFwcGFyZWwgTWFudWZhY3R1cmluZyMzMTUKLW5haWNzIzMxNTk5I0FwcGFyZWwgQWNjZXNzb3JpZXMgYW5kIE90aGVyIEFwcGFyZWwgTWFudWZhY3R1cmluZyMzMTU5Ci1uYWljcyMzMTU5OTEjSGF0LCBDYXAsIGFuZCBNaWxsaW5lcnkgTWFudWZhY3R1cmluZyMzMTU5OQotbmFpY3MjMzE1OTkyI0dsb3ZlIGFuZCBNaXR0ZW4gTWFudWZhY3R1cmluZyMzMTU5OQotbmFpY3MjMzE1OTkzI01lbidzIGFuZCBCb3lzJyBOZWNrd2VhciBNYW51ZmFjdHVyaW5nIzMxNTk5Ci1uYWljcyMzMTU5OTkjT3RoZXIgQXBwYXJlbCBBY2Nlc3NvcmllcyBhbmQgT3RoZXIgQXBwYXJlbCBNYW51ZmFjdHVyaW5nIzMxNTk5Ci1uYWljcyMzMTYjTGVhdGhlciBhbmQgQWxsaWVkIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMQotbmFpY3MjMzE2MSNMZWF0aGVyIGFuZCBIaWRlIFRhbm5pbmcgYW5kIEZpbmlzaGluZyMzMTYKLW5haWNzIzMxNjExI0xlYXRoZXIgYW5kIEhpZGUgVGFubmluZyBhbmQgRmluaXNoaW5nIzMxNjEKLW5haWNzIzMxNjIjRm9vdHdlYXIgTWFudWZhY3R1cmluZyMzMTYKLW5haWNzIzMxNjIxI0Zvb3R3ZWFyIE1hbnVmYWN0dXJpbmcjMzE2MgotbmFpY3MjMzE2MjExI1J1YmJlciBhbmQgUGxhc3RpY3MgRm9vdHdlYXIgTWFudWZhY3R1cmluZyMzMTYyMQotbmFpY3MjMzE2MjEyI0hvdXNlIFNsaXBwZXIgTWFudWZhY3R1cmluZyMzMTYyMQotbmFpY3MjMzE2MjEzI01lbidzIEZvb3R3ZWFyIChleGNlcHQgQXRobGV0aWMpIE1hbnVmYWN0dXJpbmcjMzE2MjEKLW5haWNzIzMxNjIxNCNXb21lbidzIEZvb3R3ZWFyIChleGNlcHQgQXRobGV0aWMpIE1hbnVmYWN0dXJpbmcjMzE2MjEKLW5haWNzIzMxNjIxOSNPdGhlciBGb290d2VhciBNYW51ZmFjdHVyaW5nIzMxNjIxCi1uYWljcyMzMTY5I090aGVyIExlYXRoZXIgYW5kIEFsbGllZCBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzE2Ci1uYWljcyMzMTY5OSNPdGhlciBMZWF0aGVyIGFuZCBBbGxpZWQgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMxNjkKLW5haWNzIzMxNjk5MSNMdWdnYWdlIE1hbnVmYWN0dXJpbmcjMzE2OTkKLW5haWNzIzMxNjk5MiNXb21lbidzIEhhbmRiYWcgYW5kIFB1cnNlIE1hbnVmYWN0dXJpbmcjMzE2OTkKLW5haWNzIzMxNjk5MyNQZXJzb25hbCBMZWF0aGVyIEdvb2QgKGV4Y2VwdCBXb21lbidzIEhhbmRiYWcgYW5kIFB1cnNlKSBNYW51ZmFjdHVyaW5nIzMxNjk5Ci1uYWljcyMzMTY5OTkjQWxsIE90aGVyIExlYXRoZXIgR29vZCBNYW51ZmFjdHVyaW5nIzMxNjk5Ci1uYWljcyMzMiNNYW51ZmFjdHVyaW5nIzMyCi1uYWljcyMzMjEjV29vZCBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzIKLW5haWNzIzMyMTEjU2F3bWlsbHMgYW5kIFdvb2QgUHJlc2VydmF0aW9uIzMyMQotbmFpY3MjMzIxMTEjU2F3bWlsbHMgYW5kIFdvb2QgUHJlc2VydmF0aW9uIzMyMTEKLW5haWNzIzMyMTExMyNTYXdtaWxscyMzMjExMQotbmFpY3MjMzIxMTE0I1dvb2QgUHJlc2VydmF0aW9uIzMyMTExCi1uYWljcyMzMjEyI1ZlbmVlciwgUGx5d29vZCwgYW5kIEVuZ2luZWVyZWQgV29vZCBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzIxCi1uYWljcyMzMjEyMSNWZW5lZXIsIFBseXdvb2QsIGFuZCBFbmdpbmVlcmVkIFdvb2QgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMyMTIKLW5haWNzIzMyMTIxMSNIYXJkd29vZCBWZW5lZXIgYW5kIFBseXdvb2QgTWFudWZhY3R1cmluZyMzMjEyMQotbmFpY3MjMzIxMjEyI1NvZnR3b29kIFZlbmVlciBhbmQgUGx5d29vZCBNYW51ZmFjdHVyaW5nIzMyMTIxCi1uYWljcyMzMjEyMTMjRW5naW5lZXJlZCBXb29kIE1lbWJlciAoZXhjZXB0IFRydXNzKSBNYW51ZmFjdHVyaW5nIzMyMTIxCi1uYWljcyMzMjEyMTQjVHJ1c3MgTWFudWZhY3R1cmluZyMzMjEyMQotbmFpY3MjMzIxMjE5I1JlY29uc3RpdHV0ZWQgV29vZCBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzIxMjEKLW5haWNzIzMyMTkjT3RoZXIgV29vZCBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzIxCi1uYWljcyMzMjE5MSNNaWxsd29yayMzMjE5Ci1uYWljcyMzMjE5MTEjV29vZCBXaW5kb3cgYW5kIERvb3IgTWFudWZhY3R1cmluZyMzMjE5MQotbmFpY3MjMzIxOTEyI0N1dCBTdG9jaywgUmVzYXdpbmcgTHVtYmVyLCBhbmQgUGxhbmluZyMzMjE5MQotbmFpY3MjMzIxOTE4I090aGVyIE1pbGx3b3JrIChpbmNsdWRpbmcgRmxvb3JpbmcpIzMyMTkxCi1uYWljcyMzMjE5MiNXb29kIENvbnRhaW5lciBhbmQgUGFsbGV0IE1hbnVmYWN0dXJpbmcjMzIxOQotbmFpY3MjMzIxOTkjQWxsIE90aGVyIFdvb2QgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMyMTkKLW5haWNzIzMyMTk5MSNNYW51ZmFjdHVyZWQgSG9tZSAoTW9iaWxlIEhvbWUpIE1hbnVmYWN0dXJpbmcjMzIxOTkKLW5haWNzIzMyMTk5MiNQcmVmYWJyaWNhdGVkIFdvb2QgQnVpbGRpbmcgTWFudWZhY3R1cmluZyMzMjE5OQotbmFpY3MjMzIxOTk5I0FsbCBPdGhlciBNaXNjZWxsYW5lb3VzIFdvb2QgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMyMTk5Ci1uYWljcyMzMjIjUGFwZXIgTWFudWZhY3R1cmluZyMzMgotbmFpY3MjMzIyMSNQdWxwLCBQYXBlciwgYW5kIFBhcGVyYm9hcmQgTWlsbHMjMzIyCi1uYWljcyMzMjIxMSNQdWxwIE1pbGxzIzMyMjEKLW5haWNzIzMyMjEyI1BhcGVyIE1pbGxzIzMyMjEKLW5haWNzIzMyMjEyMSNQYXBlciAoZXhjZXB0IE5ld3NwcmludCkgTWlsbHMjMzIyMTIKLW5haWNzIzMyMjEyMiNOZXdzcHJpbnQgTWlsbHMjMzIyMTIKLW5haWNzIzMyMjEzI1BhcGVyYm9hcmQgTWlsbHMjMzIyMQotbmFpY3MjMzIyMiNDb252ZXJ0ZWQgUGFwZXIgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMyMgotbmFpY3MjMzIyMjEjUGFwZXJib2FyZCBDb250YWluZXIgTWFudWZhY3R1cmluZyMzMjIyCi1uYWljcyMzMjIyMTEjQ29ycnVnYXRlZCBhbmQgU29saWQgRmliZXIgQm94IE1hbnVmYWN0dXJpbmcjMzIyMjEKLW5haWNzIzMyMjIxMiNGb2xkaW5nIFBhcGVyYm9hcmQgQm94IE1hbnVmYWN0dXJpbmcjMzIyMjEKLW5haWNzIzMyMjIxMyNTZXR1cCBQYXBlcmJvYXJkIEJveCBNYW51ZmFjdHVyaW5nIzMyMjIxCi1uYWljcyMzMjIyMTQjRmliZXIgQ2FuLCBUdWJlLCBEcnVtLCBhbmQgU2ltaWxhciBQcm9kdWN0cyBNYW51ZmFjdHVyaW5nIzMyMjIxCi1uYWljcyMzMjIyMTUjTm9uZm9sZGluZyBTYW5pdGFyeSBGb29kIENvbnRhaW5lciBNYW51ZmFjdHVyaW5nIzMyMjIxCi1uYWljcyMzMjIyMiNQYXBlciBCYWcgYW5kIENvYXRlZCBhbmQgVHJlYXRlZCBQYXBlciBNYW51ZmFjdHVyaW5nIzMyMjIKLW5haWNzIzMyMjIyMSNDb2F0ZWQgYW5kIExhbWluYXRlZCBQYWNrYWdpbmcgUGFwZXIgYW5kIFBsYXN0aWNzIEZpbG0gTWFudWZhY3R1cmluZyMzMjIyMgotbmFpY3MjMzIyMjIyI0NvYXRlZCBhbmQgTGFtaW5hdGVkIFBhcGVyIE1hbnVmYWN0dXJpbmcjMzIyMjIKLW5haWNzIzMyMjIyMyNQbGFzdGljcywgRm9pbCwgYW5kIENvYXRlZCBQYXBlciBCYWcgTWFudWZhY3R1cmluZyMzMjIyMgotbmFpY3MjMzIyMjI0I1VuY29hdGVkIFBhcGVyIGFuZCBNdWx0aXdhbGwgQmFnIE1hbnVmYWN0dXJpbmcjMzIyMjIKLW5haWNzIzMyMjIyNSNMYW1pbmF0ZWQgQWx1bWludW0gRm9pbCBNYW51ZmFjdHVyaW5nIGZvciBGbGV4aWJsZSBQYWNrYWdpbmcgVXNlcyMzMjIyMgotbmFpY3MjMzIyMjI2I1N1cmZhY2UtQ29hdGVkIFBhcGVyYm9hcmQgTWFudWZhY3R1cmluZyMzMjIyMgotbmFpY3MjMzIyMjMjU3RhdGlvbmVyeSBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzIyMgotbmFpY3MjMzIyMjMxI0RpZS1DdXQgUGFwZXIgYW5kIFBhcGVyYm9hcmQgT2ZmaWNlIFN1cHBsaWVzIE1hbnVmYWN0dXJpbmcjMzIyMjMKLW5haWNzIzMyMjIzMiNFbnZlbG9wZSBNYW51ZmFjdHVyaW5nIzMyMjIzCi1uYWljcyMzMjIyMzMjU3RhdGlvbmVyeSwgVGFibGV0LCBhbmQgUmVsYXRlZCBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzIyMjMKLW5haWNzIzMyMjI5I090aGVyIENvbnZlcnRlZCBQYXBlciBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzIyMgotbmFpY3MjMzIyMjkxI1Nhbml0YXJ5IFBhcGVyIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMjIyOQotbmFpY3MjMzIyMjk5I0FsbCBPdGhlciBDb252ZXJ0ZWQgUGFwZXIgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMyMjI5Ci1uYWljcyMzMjMjUHJpbnRpbmcgYW5kIFJlbGF0ZWQgU3VwcG9ydCBBY3Rpdml0aWVzIzMyCi1uYWljcyMzMjMxI1ByaW50aW5nIGFuZCBSZWxhdGVkIFN1cHBvcnQgQWN0aXZpdGllcyMzMjMKLW5haWNzIzMyMzExI1ByaW50aW5nIzMyMzEKLW5haWNzIzMyMzExMCNDb21tZXJjaWFsIExpdGhvZ3JhcGhpYyBQcmludGluZyMzMjMxMQotbmFpY3MjMzIzMTExI0NvbW1lcmNpYWwgR3JhdnVyZSBQcmludGluZyMzMjMxMQotbmFpY3MjMzIzMTEyI0NvbW1lcmNpYWwgRmxleG9ncmFwaGljIFByaW50aW5nIzMyMzExCi1uYWljcyMzMjMxMTMjQ29tbWVyY2lhbCBTY3JlZW4gUHJpbnRpbmcjMzIzMTEKLW5haWNzIzMyMzExNCNRdWljayBQcmludGluZyMzMjMxMQotbmFpY3MjMzIzMTE1I0RpZ2l0YWwgUHJpbnRpbmcjMzIzMTEKLW5haWNzIzMyMzExNiNNYW5pZm9sZCBCdXNpbmVzcyBGb3JtcyBQcmludGluZyMzMjMxMQotbmFpY3MjMzIzMTE3I0Jvb2tzIFByaW50aW5nIzMyMzExCi1uYWljcyMzMjMxMTgjQmxhbmtib29rLCBMb29zZWxlYWYgQmluZGVycywgYW5kIERldmljZXMgTWFudWZhY3R1cmluZyMzMjMxMQotbmFpY3MjMzIzMTE5I090aGVyIENvbW1lcmNpYWwgUHJpbnRpbmcjMzIzMTEKLW5haWNzIzMyMzEyI1N1cHBvcnQgQWN0aXZpdGllcyBmb3IgUHJpbnRpbmcjMzIzMQotbmFpY3MjMzIzMTIxI1RyYWRlYmluZGluZyBhbmQgUmVsYXRlZCBXb3JrIzMyMzEyCi1uYWljcyMzMjMxMjIjUHJlcHJlc3MgU2VydmljZXMjMzIzMTIKLW5haWNzIzMyNCNQZXRyb2xldW0gYW5kIENvYWwgUHJvZHVjdHMgTWFudWZhY3R1cmluZyMzMgotbmFpY3MjMzI0MSNQZXRyb2xldW0gYW5kIENvYWwgUHJvZHVjdHMgTWFudWZhY3R1cmluZyMzMjQKLW5haWNzIzMyNDExI1BldHJvbGV1bSBSZWZpbmVyaWVzIzMyNDEKLW5haWNzIzMyNDEyI0FzcGhhbHQgUGF2aW5nLCBSb29maW5nLCBhbmQgU2F0dXJhdGVkIE1hdGVyaWFscyBNYW51ZmFjdHVyaW5nIzMyNDEKLW5haWNzIzMyNDEyMSNBc3BoYWx0IFBhdmluZyBNaXh0dXJlIGFuZCBCbG9jayBNYW51ZmFjdHVyaW5nIzMyNDEyCi1uYWljcyMzMjQxMjIjQXNwaGFsdCBTaGluZ2xlIGFuZCBDb2F0aW5nIE1hdGVyaWFscyBNYW51ZmFjdHVyaW5nIzMyNDEyCi1uYWljcyMzMjQxOSNPdGhlciBQZXRyb2xldW0gYW5kIENvYWwgUHJvZHVjdHMgTWFudWZhY3R1cmluZyMzMjQxCi1uYWljcyMzMjQxOTEjUGV0cm9sZXVtIEx1YnJpY2F0aW5nIE9pbCBhbmQgR3JlYXNlIE1hbnVmYWN0dXJpbmcjMzI0MTkKLW5haWNzIzMyNDE5OSNBbGwgT3RoZXIgUGV0cm9sZXVtIGFuZCBDb2FsIFByb2R1Y3RzIE1hbnVmYWN0dXJpbmcjMzI0MTkKLW5haWNzIzMyNSNDaGVtaWNhbCBNYW51ZmFjdHVyaW5nIzMyCi1uYWljcyMzMjUxI0Jhc2ljIENoZW1pY2FsIE1hbnVmYWN0dXJpbmcjMzI1Ci1uYWljcyMzMjUxMSNQZXRyb2NoZW1pY2FsIE1hbnVmYWN0dXJpbmcjMzI1MQotbmFpY3MjMzI1MTIjSW5kdXN0cmlhbCBHYXMgTWFudWZhY3R1cmluZyMzMjUxCi1uYWljcyMzMjUxMyNTeW50aGV0aWMgRHllIGFuZCBQaWdtZW50IE1hbnVmYWN0dXJpbmcjMzI1MQotbmFpY3MjMzI1MTMxI0lub3JnYW5pYyBEeWUgYW5kIFBpZ21lbnQgTWFudWZhY3R1cmluZyMzMjUxMwotbmFpY3MjMzI1MTMyI1N5bnRoZXRpYyBPcmdhbmljIER5ZSBhbmQgUGlnbWVudCBNYW51ZmFjdHVyaW5nIzMyNTEzCi1uYWljcyMzMjUxOCNPdGhlciBCYXNpYyBJbm9yZ2FuaWMgQ2hlbWljYWwgTWFudWZhY3R1cmluZyMzMjUxCi1uYWljcyMzMjUxODEjQWxrYWxpZXMgYW5kIENobG9yaW5lIE1hbnVmYWN0dXJpbmcjMzI1MTgKLW5haWNzIzMyNTE4MiNDYXJib24gQmxhY2sgTWFudWZhY3R1cmluZyMzMjUxOAotbmFpY3MjMzI1MTg4I0FsbCBPdGhlciBCYXNpYyBJbm9yZ2FuaWMgQ2hlbWljYWwgTWFudWZhY3R1cmluZyMzMjUxOAotbmFpY3MjMzI1MTkjT3RoZXIgQmFzaWMgT3JnYW5pYyBDaGVtaWNhbCBNYW51ZmFjdHVyaW5nIzMyNTEKLW5haWNzIzMyNTE5MSNHdW0gYW5kIFdvb2QgQ2hlbWljYWwgTWFudWZhY3R1cmluZyMzMjUxOQotbmFpY3MjMzI1MTkyI0N5Y2xpYyBDcnVkZSBhbmQgSW50ZXJtZWRpYXRlIE1hbnVmYWN0dXJpbmcjMzI1MTkKLW5haWNzIzMyNTE5MyNFdGh5bCBBbGNvaG9sIE1hbnVmYWN0dXJpbmcjMzI1MTkKLW5haWNzIzMyNTE5OSNBbGwgT3RoZXIgQmFzaWMgT3JnYW5pYyBDaGVtaWNhbCBNYW51ZmFjdHVyaW5nIzMyNTE5Ci1uYWljcyMzMjUyI1Jlc2luLCBTeW50aGV0aWMgUnViYmVyLCBhbmQgQXJ0aWZpY2lhbCBhbmQgU3ludGhldGljIEZpYmVycyBhbmQgRmlsYW1lbnRzIE1hbnVmYWN0dXJpbmcjMzI1Ci1uYWljcyMzMjUyMSNSZXNpbiBhbmQgU3ludGhldGljIFJ1YmJlciBNYW51ZmFjdHVyaW5nIzMyNTIKLW5haWNzIzMyNTIxMSNQbGFzdGljcyBNYXRlcmlhbCBhbmQgUmVzaW4gTWFudWZhY3R1cmluZyMzMjUyMQotbmFpY3MjMzI1MjEyI1N5bnRoZXRpYyBSdWJiZXIgTWFudWZhY3R1cmluZyMzMjUyMQotbmFpY3MjMzI1MjIjQXJ0aWZpY2lhbCBhbmQgU3ludGhldGljIEZpYmVycyBhbmQgRmlsYW1lbnRzIE1hbnVmYWN0dXJpbmcjMzI1MgotbmFpY3MjMzI1MjIxI0NlbGx1bG9zaWMgT3JnYW5pYyBGaWJlciBNYW51ZmFjdHVyaW5nIzMyNTIyCi1uYWljcyMzMjUyMjIjTm9uY2VsbHVsb3NpYyBPcmdhbmljIEZpYmVyIE1hbnVmYWN0dXJpbmcjMzI1MjIKLW5haWNzIzMyNTMjUGVzdGljaWRlLCBGZXJ0aWxpemVyLCBhbmQgT3RoZXIgQWdyaWN1bHR1cmFsIENoZW1pY2FsIE1hbnVmYWN0dXJpbmcjMzI1Ci1uYWljcyMzMjUzMSNGZXJ0aWxpemVyIE1hbnVmYWN0dXJpbmcjMzI1MwotbmFpY3MjMzI1MzExI05pdHJvZ2Vub3VzIEZlcnRpbGl6ZXIgTWFudWZhY3R1cmluZyMzMjUzMQotbmFpY3MjMzI1MzEyI1Bob3NwaGF0aWMgRmVydGlsaXplciBNYW51ZmFjdHVyaW5nIzMyNTMxCi1uYWljcyMzMjUzMTQjRmVydGlsaXplciAoTWl4aW5nIE9ubHkpIE1hbnVmYWN0dXJpbmcjMzI1MzEKLW5haWNzIzMyNTMyI1Blc3RpY2lkZSBhbmQgT3RoZXIgQWdyaWN1bHR1cmFsIENoZW1pY2FsIE1hbnVmYWN0dXJpbmcjMzI1MwotbmFpY3MjMzI1NCNQaGFybWFjZXV0aWNhbCBhbmQgTWVkaWNpbmUgTWFudWZhY3R1cmluZyMzMjUKLW5haWNzIzMyNTQxI1BoYXJtYWNldXRpY2FsIGFuZCBNZWRpY2luZSBNYW51ZmFjdHVyaW5nIzMyNTQKLW5haWNzIzMyNTQxMSNNZWRpY2luYWwgYW5kIEJvdGFuaWNhbCBNYW51ZmFjdHVyaW5nIzMyNTQxCi1uYWljcyMzMjU0MTIjUGhhcm1hY2V1dGljYWwgUHJlcGFyYXRpb24gTWFudWZhY3R1cmluZyMzMjU0MQotbmFpY3MjMzI1NDEzI0luLVZpdHJvIERpYWdub3N0aWMgU3Vic3RhbmNlIE1hbnVmYWN0dXJpbmcjMzI1NDEKLW5haWNzIzMyNTQxNCNCaW9sb2dpY2FsIFByb2R1Y3QgKGV4Y2VwdCBEaWFnbm9zdGljKSBNYW51ZmFjdHVyaW5nIzMyNTQxCi1uYWljcyMzMjU1I1BhaW50LCBDb2F0aW5nLCBhbmQgQWRoZXNpdmUgTWFudWZhY3R1cmluZyMzMjUKLW5haWNzIzMyNTUxI1BhaW50IGFuZCBDb2F0aW5nIE1hbnVmYWN0dXJpbmcjMzI1NQotbmFpY3MjMzI1NTIjQWRoZXNpdmUgTWFudWZhY3R1cmluZyMzMjU1Ci1uYWljcyMzMjU2I1NvYXAsIENsZWFuaW5nIENvbXBvdW5kLCBhbmQgVG9pbGV0IFByZXBhcmF0aW9uIE1hbnVmYWN0dXJpbmcjMzI1Ci1uYWljcyMzMjU2MSNTb2FwIGFuZCBDbGVhbmluZyBDb21wb3VuZCBNYW51ZmFjdHVyaW5nIzMyNTYKLW5haWNzIzMyNTYxMSNTb2FwIGFuZCBPdGhlciBEZXRlcmdlbnQgTWFudWZhY3R1cmluZyMzMjU2MQotbmFpY3MjMzI1NjEyI1BvbGlzaCBhbmQgT3RoZXIgU2FuaXRhdGlvbiBHb29kIE1hbnVmYWN0dXJpbmcjMzI1NjEKLW5haWNzIzMyNTYxMyNTdXJmYWNlIEFjdGl2ZSBBZ2VudCBNYW51ZmFjdHVyaW5nIzMyNTYxCi1uYWljcyMzMjU2MiNUb2lsZXQgUHJlcGFyYXRpb24gTWFudWZhY3R1cmluZyMzMjU2Ci1uYWljcyMzMjU5I090aGVyIENoZW1pY2FsIFByb2R1Y3QgYW5kIFByZXBhcmF0aW9uIE1hbnVmYWN0dXJpbmcjMzI1Ci1uYWljcyMzMjU5MSNQcmludGluZyBJbmsgTWFudWZhY3R1cmluZyMzMjU5Ci1uYWljcyMzMjU5MiNFeHBsb3NpdmVzIE1hbnVmYWN0dXJpbmcjMzI1OQotbmFpY3MjMzI1OTkjQWxsIE90aGVyIENoZW1pY2FsIFByb2R1Y3QgYW5kIFByZXBhcmF0aW9uIE1hbnVmYWN0dXJpbmcjMzI1OQotbmFpY3MjMzI1OTkxI0N1c3RvbSBDb21wb3VuZGluZyBvZiBQdXJjaGFzZWQgUmVzaW5zIzMyNTk5Ci1uYWljcyMzMjU5OTIjUGhvdG9ncmFwaGljIEZpbG0sIFBhcGVyLCBQbGF0ZSwgYW5kIENoZW1pY2FsIE1hbnVmYWN0dXJpbmcjMzI1OTkKLW5haWNzIzMyNTk5OCNBbGwgT3RoZXIgTWlzY2VsbGFuZW91cyBDaGVtaWNhbCBQcm9kdWN0IGFuZCBQcmVwYXJhdGlvbiBNYW51ZmFjdHVyaW5nIzMyNTk5Ci1uYWljcyMzMjYjUGxhc3RpY3MgYW5kIFJ1YmJlciBQcm9kdWN0cyBNYW51ZmFjdHVyaW5nIzMyCi1uYWljcyMzMjYxI1BsYXN0aWNzIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMjYKLW5haWNzIzMyNjExI1Vuc3VwcG9ydGVkIFBsYXN0aWNzIEZpbG0sIFNoZWV0LCBhbmQgQmFnIE1hbnVmYWN0dXJpbmcjMzI2MQotbmFpY3MjMzI2MTExI1Vuc3VwcG9ydGVkIFBsYXN0aWNzIEJhZyBNYW51ZmFjdHVyaW5nIzMyNjExCi1uYWljcyMzMjYxMTIjVW5zdXBwb3J0ZWQgUGxhc3RpY3MgUGFja2FnaW5nIEZpbG0gYW5kIFNoZWV0IE1hbnVmYWN0dXJpbmcjMzI2MTEKLW5haWNzIzMyNjExMyNVbnN1cHBvcnRlZCBQbGFzdGljcyBGaWxtIGFuZCBTaGVldCAoZXhjZXB0IFBhY2thZ2luZykgTWFudWZhY3R1cmluZyMzMjYxMQotbmFpY3MjMzI2MTIjUGxhc3RpY3MgUGlwZSwgUGlwZSBGaXR0aW5nLCBhbmQgVW5zdXBwb3J0ZWQgUHJvZmlsZSBTaGFwZSBNYW51ZmFjdHVyaW5nIzMyNjEKLW5haWNzIzMyNjEyMSNVbnN1cHBvcnRlZCBQbGFzdGljcyBQcm9maWxlIFNoYXBlIE1hbnVmYWN0dXJpbmcjMzI2MTIKLW5haWNzIzMyNjEyMiNQbGFzdGljcyBQaXBlIGFuZCBQaXBlIEZpdHRpbmcgTWFudWZhY3R1cmluZyMzMjYxMgotbmFpY3MjMzI2MTMjTGFtaW5hdGVkIFBsYXN0aWNzIFBsYXRlLCBTaGVldCwgYW5kIFNoYXBlIE1hbnVmYWN0dXJpbmcjMzI2MQotbmFpY3MjMzI2MTQjUG9seXN0eXJlbmUgRm9hbSBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzI2MQotbmFpY3MjMzI2MTUjVXJldGhhbmUgYW5kIE90aGVyIEZvYW0gUHJvZHVjdCAoZXhjZXB0IFBvbHlzdHlyZW5lKSBNYW51ZmFjdHVyaW5nIzMyNjEKLW5haWNzIzMyNjE2I1BsYXN0aWNzIEJvdHRsZSBNYW51ZmFjdHVyaW5nIzMyNjEKLW5haWNzIzMyNjE5I090aGVyIFBsYXN0aWNzIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMjYxCi1uYWljcyMzMjYxOTEjUGxhc3RpY3MgUGx1bWJpbmcgRml4dHVyZSBNYW51ZmFjdHVyaW5nIzMyNjE5Ci1uYWljcyMzMjYxOTIjUmVzaWxpZW50IEZsb29yIENvdmVyaW5nIE1hbnVmYWN0dXJpbmcjMzI2MTkKLW5haWNzIzMyNjE5OSNBbGwgT3RoZXIgUGxhc3RpY3MgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMyNjE5Ci1uYWljcyMzMjYyI1J1YmJlciBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzI2Ci1uYWljcyMzMjYyMSNUaXJlIE1hbnVmYWN0dXJpbmcjMzI2MgotbmFpY3MjMzI2MjExI1RpcmUgTWFudWZhY3R1cmluZyAoZXhjZXB0IFJldHJlYWRpbmcpIzMyNjIxCi1uYWljcyMzMjYyMTIjVGlyZSBSZXRyZWFkaW5nIzMyNjIxCi1uYWljcyMzMjYyMiNSdWJiZXIgYW5kIFBsYXN0aWNzIEhvc2VzIGFuZCBCZWx0aW5nIE1hbnVmYWN0dXJpbmcjMzI2MgotbmFpY3MjMzI2MjkjT3RoZXIgUnViYmVyIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMjYyCi1uYWljcyMzMjYyOTEjUnViYmVyIFByb2R1Y3QgTWFudWZhY3R1cmluZyBmb3IgTWVjaGFuaWNhbCBVc2UjMzI2MjkKLW5haWNzIzMyNjI5OSNBbGwgT3RoZXIgUnViYmVyIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMjYyOQotbmFpY3MjMzI3I05vbm1ldGFsbGljIE1pbmVyYWwgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMyCi1uYWljcyMzMjcxI0NsYXkgUHJvZHVjdCBhbmQgUmVmcmFjdG9yeSBNYW51ZmFjdHVyaW5nIzMyNwotbmFpY3MjMzI3MTEjUG90dGVyeSwgQ2VyYW1pY3MsIGFuZCBQbHVtYmluZyBGaXh0dXJlIE1hbnVmYWN0dXJpbmcjMzI3MQotbmFpY3MjMzI3MTExI1ZpdHJlb3VzIENoaW5hIFBsdW1iaW5nIEZpeHR1cmUgYW5kIENoaW5hIGFuZCBFYXJ0aGVud2FyZSBCYXRocm9vbSBBY2Nlc3NvcmllcyBNYW51ZmFjdHVyaW5nIzMyNzExCi1uYWljcyMzMjcxMTIjVml0cmVvdXMgQ2hpbmEsIEZpbmUgRWFydGhlbndhcmUsIGFuZCBPdGhlciBQb3R0ZXJ5IFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMjcxMQotbmFpY3MjMzI3MTEzI1BvcmNlbGFpbiBFbGVjdHJpY2FsIFN1cHBseSBNYW51ZmFjdHVyaW5nIzMyNzExCi1uYWljcyMzMjcxMiNDbGF5IEJ1aWxkaW5nIE1hdGVyaWFsIGFuZCBSZWZyYWN0b3JpZXMgTWFudWZhY3R1cmluZyMzMjcxCi1uYWljcyMzMjcxMjEjQnJpY2sgYW5kIFN0cnVjdHVyYWwgQ2xheSBUaWxlIE1hbnVmYWN0dXJpbmcjMzI3MTIKLW5haWNzIzMyNzEyMiNDZXJhbWljIFdhbGwgYW5kIEZsb29yIFRpbGUgTWFudWZhY3R1cmluZyMzMjcxMgotbmFpY3MjMzI3MTIzI090aGVyIFN0cnVjdHVyYWwgQ2xheSBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzI3MTIKLW5haWNzIzMyNzEyNCNDbGF5IFJlZnJhY3RvcnkgTWFudWZhY3R1cmluZyMzMjcxMgotbmFpY3MjMzI3MTI1I05vbmNsYXkgUmVmcmFjdG9yeSBNYW51ZmFjdHVyaW5nIzMyNzEyCi1uYWljcyMzMjcyI0dsYXNzIGFuZCBHbGFzcyBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzI3Ci1uYWljcyMzMjcyMSNHbGFzcyBhbmQgR2xhc3MgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMyNzIKLW5haWNzIzMyNzIxMSNGbGF0IEdsYXNzIE1hbnVmYWN0dXJpbmcjMzI3MjEKLW5haWNzIzMyNzIxMiNPdGhlciBQcmVzc2VkIGFuZCBCbG93biBHbGFzcyBhbmQgR2xhc3N3YXJlIE1hbnVmYWN0dXJpbmcjMzI3MjEKLW5haWNzIzMyNzIxMyNHbGFzcyBDb250YWluZXIgTWFudWZhY3R1cmluZyMzMjcyMQotbmFpY3MjMzI3MjE1I0dsYXNzIFByb2R1Y3QgTWFudWZhY3R1cmluZyBNYWRlIG9mIFB1cmNoYXNlZCBHbGFzcyMzMjcyMQotbmFpY3MjMzI3MyNDZW1lbnQgYW5kIENvbmNyZXRlIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMjcKLW5haWNzIzMyNzMxI0NlbWVudCBNYW51ZmFjdHVyaW5nIzMyNzMKLW5haWNzIzMyNzMyI1JlYWR5LU1peCBDb25jcmV0ZSBNYW51ZmFjdHVyaW5nIzMyNzMKLW5haWNzIzMyNzMzI0NvbmNyZXRlIFBpcGUsIEJyaWNrLCBhbmQgQmxvY2sgTWFudWZhY3R1cmluZyMzMjczCi1uYWljcyMzMjczMzEjQ29uY3JldGUgQmxvY2sgYW5kIEJyaWNrIE1hbnVmYWN0dXJpbmcjMzI3MzMKLW5haWNzIzMyNzMzMiNDb25jcmV0ZSBQaXBlIE1hbnVmYWN0dXJpbmcjMzI3MzMKLW5haWNzIzMyNzM5I090aGVyIENvbmNyZXRlIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMjczCi1uYWljcyMzMjc0I0xpbWUgYW5kIEd5cHN1bSBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzI3Ci1uYWljcyMzMjc0MSNMaW1lIE1hbnVmYWN0dXJpbmcjMzI3NAotbmFpY3MjMzI3NDIjR3lwc3VtIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMjc0Ci1uYWljcyMzMjc5I090aGVyIE5vbm1ldGFsbGljIE1pbmVyYWwgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMyNwotbmFpY3MjMzI3OTEjQWJyYXNpdmUgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMyNzkKLW5haWNzIzMyNzk5I0FsbCBPdGhlciBOb25tZXRhbGxpYyBNaW5lcmFsIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMjc5Ci1uYWljcyMzMjc5OTEjQ3V0IFN0b25lIGFuZCBTdG9uZSBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzI3OTkKLW5haWNzIzMyNzk5MiNHcm91bmQgb3IgVHJlYXRlZCBNaW5lcmFsIGFuZCBFYXJ0aCBNYW51ZmFjdHVyaW5nIzMyNzk5Ci1uYWljcyMzMjc5OTMjTWluZXJhbCBXb29sIE1hbnVmYWN0dXJpbmcjMzI3OTkKLW5haWNzIzMyNzk5OSNBbGwgT3RoZXIgTWlzY2VsbGFuZW91cyBOb25tZXRhbGxpYyBNaW5lcmFsIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMjc5OQotbmFpY3MjMzMjTWFudWZhY3R1cmluZyMzMwotbmFpY3MjMzMxI1ByaW1hcnkgTWV0YWwgTWFudWZhY3R1cmluZyMzMwotbmFpY3MjMzMxMSNJcm9uIGFuZCBTdGVlbCBNaWxscyBhbmQgRmVycm9hbGxveSBNYW51ZmFjdHVyaW5nIzMzMQotbmFpY3MjMzMxMTEjSXJvbiBhbmQgU3RlZWwgTWlsbHMgYW5kIEZlcnJvYWxsb3kgTWFudWZhY3R1cmluZyMzMzExCi1uYWljcyMzMzExMTEjSXJvbiBhbmQgU3RlZWwgTWlsbHMjMzMxMTEKLW5haWNzIzMzMTExMiNFbGVjdHJvbWV0YWxsdXJnaWNhbCBGZXJyb2FsbG95IFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMzExMQotbmFpY3MjMzMxMiNTdGVlbCBQcm9kdWN0IE1hbnVmYWN0dXJpbmcgZnJvbSBQdXJjaGFzZWQgU3RlZWwjMzMxCi1uYWljcyMzMzEyMSNJcm9uIGFuZCBTdGVlbCBQaXBlIGFuZCBUdWJlIE1hbnVmYWN0dXJpbmcgZnJvbSBQdXJjaGFzZWQgU3RlZWwjMzMxMgotbmFpY3MjMzMxMjIjUm9sbGluZyBhbmQgRHJhd2luZyBvZiBQdXJjaGFzZWQgU3RlZWwjMzMxMgotbmFpY3MjMzMxMjIxI1JvbGxlZCBTdGVlbCBTaGFwZSBNYW51ZmFjdHVyaW5nIzMzMTIyCi1uYWljcyMzMzEyMjIjU3RlZWwgV2lyZSBEcmF3aW5nIzMzMTIyCi1uYWljcyMzMzEzI0FsdW1pbmEgYW5kIEFsdW1pbnVtIFByb2R1Y3Rpb24gYW5kIFByb2Nlc3NpbmcjMzMxCi1uYWljcyMzMzEzMSNBbHVtaW5hIGFuZCBBbHVtaW51bSBQcm9kdWN0aW9uIGFuZCBQcm9jZXNzaW5nIzMzMTMKLW5haWNzIzMzMTMxMSNBbHVtaW5hIFJlZmluaW5nIzMzMTMxCi1uYWljcyMzMzEzMTIjUHJpbWFyeSBBbHVtaW51bSBQcm9kdWN0aW9uIzMzMTMxCi1uYWljcyMzMzEzMTQjU2Vjb25kYXJ5IFNtZWx0aW5nIGFuZCBBbGxveWluZyBvZiBBbHVtaW51bSMzMzEzMQotbmFpY3MjMzMxMzE1I0FsdW1pbnVtIFNoZWV0LCBQbGF0ZSwgYW5kIEZvaWwgTWFudWZhY3R1cmluZyMzMzEzMQotbmFpY3MjMzMxMzE2I0FsdW1pbnVtIEV4dHJ1ZGVkIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMzEzMQotbmFpY3MjMzMxMzE5I090aGVyIEFsdW1pbnVtIFJvbGxpbmcgYW5kIERyYXdpbmcjMzMxMzEKLW5haWNzIzMzMTQjTm9uZmVycm91cyBNZXRhbCAoZXhjZXB0IEFsdW1pbnVtKSBQcm9kdWN0aW9uIGFuZCBQcm9jZXNzaW5nIzMzMQotbmFpY3MjMzMxNDEjTm9uZmVycm91cyBNZXRhbCAoZXhjZXB0IEFsdW1pbnVtKSBTbWVsdGluZyBhbmQgUmVmaW5pbmcjMzMxNAotbmFpY3MjMzMxNDExI1ByaW1hcnkgU21lbHRpbmcgYW5kIFJlZmluaW5nIG9mIENvcHBlciMzMzE0MQotbmFpY3MjMzMxNDE5I1ByaW1hcnkgU21lbHRpbmcgYW5kIFJlZmluaW5nIG9mIE5vbmZlcnJvdXMgTWV0YWwgKGV4Y2VwdCBDb3BwZXIgYW5kIEFsdW1pbnVtKSMzMzE0MQotbmFpY3MjMzMxNDIjQ29wcGVyIFJvbGxpbmcsIERyYXdpbmcsIEV4dHJ1ZGluZywgYW5kIEFsbG95aW5nIzMzMTQKLW5haWNzIzMzMTQyMSNDb3BwZXIgUm9sbGluZywgRHJhd2luZywgYW5kIEV4dHJ1ZGluZyMzMzE0MgotbmFpY3MjMzMxNDIyI0NvcHBlciBXaXJlIChleGNlcHQgTWVjaGFuaWNhbCkgRHJhd2luZyMzMzE0MgotbmFpY3MjMzMxNDIzI1NlY29uZGFyeSBTbWVsdGluZywgUmVmaW5pbmcsIGFuZCBBbGxveWluZyBvZiBDb3BwZXIjMzMxNDIKLW5haWNzIzMzMTQ5I05vbmZlcnJvdXMgTWV0YWwgKGV4Y2VwdCBDb3BwZXIgYW5kIEFsdW1pbnVtKSBSb2xsaW5nLCBEcmF3aW5nLCBFeHRydWRpbmcsIGFuZCBBbGxveWluZyMzMzE0Ci1uYWljcyMzMzE0OTEjTm9uZmVycm91cyBNZXRhbCAoZXhjZXB0IENvcHBlciBhbmQgQWx1bWludW0pIFJvbGxpbmcsIERyYXdpbmcsIGFuZCBFeHRydWRpbmcjMzMxNDkKLW5haWNzIzMzMTQ5MiNTZWNvbmRhcnkgU21lbHRpbmcsIFJlZmluaW5nLCBhbmQgQWxsb3lpbmcgb2YgTm9uZmVycm91cyBNZXRhbCAoZXhjZXB0IENvcHBlciBhbmQgQWx1bWludW0pIzMzMTQ5Ci1uYWljcyMzMzE1I0ZvdW5kcmllcyMzMzEKLW5haWNzIzMzMTUxI0ZlcnJvdXMgTWV0YWwgRm91bmRyaWVzIzMzMTUKLW5haWNzIzMzMTUxMSNJcm9uIEZvdW5kcmllcyMzMzE1MQotbmFpY3MjMzMxNTEyI1N0ZWVsIEludmVzdG1lbnQgRm91bmRyaWVzIzMzMTUxCi1uYWljcyMzMzE1MTMjU3RlZWwgRm91bmRyaWVzIChleGNlcHQgSW52ZXN0bWVudCkjMzMxNTEKLW5haWNzIzMzMTUyI05vbmZlcnJvdXMgTWV0YWwgRm91bmRyaWVzIzMzMTUKLW5haWNzIzMzMTUyMSNBbHVtaW51bSBEaWUtQ2FzdGluZyBGb3VuZHJpZXMjMzMxNTIKLW5haWNzIzMzMTUyMiNOb25mZXJyb3VzIChleGNlcHQgQWx1bWludW0pIERpZS1DYXN0aW5nIEZvdW5kcmllcyMzMzE1MgotbmFpY3MjMzMxNTI0I0FsdW1pbnVtIEZvdW5kcmllcyAoZXhjZXB0IERpZS1DYXN0aW5nKSMzMzE1MgotbmFpY3MjMzMxNTI1I0NvcHBlciBGb3VuZHJpZXMgKGV4Y2VwdCBEaWUtQ2FzdGluZykjMzMxNTIKLW5haWNzIzMzMTUyOCNPdGhlciBOb25mZXJyb3VzIEZvdW5kcmllcyAoZXhjZXB0IERpZS1DYXN0aW5nKSMzMzE1MgotbmFpY3MjMzMyI0ZhYnJpY2F0ZWQgTWV0YWwgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMzCi1uYWljcyMzMzIxI0ZvcmdpbmcgYW5kIFN0YW1waW5nIzMzMgotbmFpY3MjMzMyMTEjRm9yZ2luZyBhbmQgU3RhbXBpbmcjMzMyMQotbmFpY3MjMzMyMTExI0lyb24gYW5kIFN0ZWVsIEZvcmdpbmcjMzMyMTEKLW5haWNzIzMzMjExMiNOb25mZXJyb3VzIEZvcmdpbmcjMzMyMTEKLW5haWNzIzMzMjExNCNDdXN0b20gUm9sbCBGb3JtaW5nIzMzMjExCi1uYWljcyMzMzIxMTUjQ3Jvd24gYW5kIENsb3N1cmUgTWFudWZhY3R1cmluZyMzMzIxMQotbmFpY3MjMzMyMTE2I01ldGFsIFN0YW1waW5nIzMzMjExCi1uYWljcyMzMzIxMTcjUG93ZGVyIE1ldGFsbHVyZ3kgUGFydCBNYW51ZmFjdHVyaW5nIzMzMjExCi1uYWljcyMzMzIyI0N1dGxlcnkgYW5kIEhhbmR0b29sIE1hbnVmYWN0dXJpbmcjMzMyCi1uYWljcyMzMzIyMSNDdXRsZXJ5IGFuZCBIYW5kdG9vbCBNYW51ZmFjdHVyaW5nIzMzMjIKLW5haWNzIzMzMjIxMSNDdXRsZXJ5IGFuZCBGbGF0d2FyZSAoZXhjZXB0IFByZWNpb3VzKSBNYW51ZmFjdHVyaW5nIzMzMjIxCi1uYWljcyMzMzIyMTIjSGFuZCBhbmQgRWRnZSBUb29sIE1hbnVmYWN0dXJpbmcjMzMyMjEKLW5haWNzIzMzMjIxMyNTYXcgQmxhZGUgYW5kIEhhbmRzYXcgTWFudWZhY3R1cmluZyMzMzIyMQotbmFpY3MjMzMyMjE0I0tpdGNoZW4gVXRlbnNpbCwgUG90LCBhbmQgUGFuIE1hbnVmYWN0dXJpbmcjMzMyMjEKLW5haWNzIzMzMjMjQXJjaGl0ZWN0dXJhbCBhbmQgU3RydWN0dXJhbCBNZXRhbHMgTWFudWZhY3R1cmluZyMzMzIKLW5haWNzIzMzMjMxI1BsYXRlIFdvcmsgYW5kIEZhYnJpY2F0ZWQgU3RydWN0dXJhbCBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzMyMwotbmFpY3MjMzMyMzExI1ByZWZhYnJpY2F0ZWQgTWV0YWwgQnVpbGRpbmcgYW5kIENvbXBvbmVudCBNYW51ZmFjdHVyaW5nIzMzMjMxCi1uYWljcyMzMzIzMTIjRmFicmljYXRlZCBTdHJ1Y3R1cmFsIE1ldGFsIE1hbnVmYWN0dXJpbmcjMzMyMzEKLW5haWNzIzMzMjMxMyNQbGF0ZSBXb3JrIE1hbnVmYWN0dXJpbmcjMzMyMzEKLW5haWNzIzMzMjMyI09ybmFtZW50YWwgYW5kIEFyY2hpdGVjdHVyYWwgTWV0YWwgUHJvZHVjdHMgTWFudWZhY3R1cmluZyMzMzIzCi1uYWljcyMzMzIzMjEjTWV0YWwgV2luZG93IGFuZCBEb29yIE1hbnVmYWN0dXJpbmcjMzMyMzIKLW5haWNzIzMzMjMyMiNTaGVldCBNZXRhbCBXb3JrIE1hbnVmYWN0dXJpbmcjMzMyMzIKLW5haWNzIzMzMjMyMyNPcm5hbWVudGFsIGFuZCBBcmNoaXRlY3R1cmFsIE1ldGFsIFdvcmsgTWFudWZhY3R1cmluZyMzMzIzMgotbmFpY3MjMzMyNCNCb2lsZXIsIFRhbmssIGFuZCBTaGlwcGluZyBDb250YWluZXIgTWFudWZhY3R1cmluZyMzMzIKLW5haWNzIzMzMjQxI1Bvd2VyIEJvaWxlciBhbmQgSGVhdCBFeGNoYW5nZXIgTWFudWZhY3R1cmluZyMzMzI0Ci1uYWljcyMzMzI0MiNNZXRhbCBUYW5rIChIZWF2eSBHYXVnZSkgTWFudWZhY3R1cmluZyMzMzI0Ci1uYWljcyMzMzI0MyNNZXRhbCBDYW4sIEJveCwgYW5kIE90aGVyIE1ldGFsIENvbnRhaW5lciAoTGlnaHQgR2F1Z2UpIE1hbnVmYWN0dXJpbmcjMzMyNAotbmFpY3MjMzMyNDMxI01ldGFsIENhbiBNYW51ZmFjdHVyaW5nIzMzMjQzCi1uYWljcyMzMzI0MzkjT3RoZXIgTWV0YWwgQ29udGFpbmVyIE1hbnVmYWN0dXJpbmcjMzMyNDMKLW5haWNzIzMzMjUjSGFyZHdhcmUgTWFudWZhY3R1cmluZyMzMzIKLW5haWNzIzMzMjUxI0hhcmR3YXJlIE1hbnVmYWN0dXJpbmcjMzMyNQotbmFpY3MjMzMyNiNTcHJpbmcgYW5kIFdpcmUgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMzMgotbmFpY3MjMzMyNjEjU3ByaW5nIGFuZCBXaXJlIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMzI2Ci1uYWljcyMzMzI2MTEjU3ByaW5nIChIZWF2eSBHYXVnZSkgTWFudWZhY3R1cmluZyMzMzI2MQotbmFpY3MjMzMyNjEyI1NwcmluZyAoTGlnaHQgR2F1Z2UpIE1hbnVmYWN0dXJpbmcjMzMyNjEKLW5haWNzIzMzMjYxOCNPdGhlciBGYWJyaWNhdGVkIFdpcmUgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMzMjYxCi1uYWljcyMzMzI3I01hY2hpbmUgU2hvcHM7IFR1cm5lZCBQcm9kdWN0OyBhbmQgU2NyZXcsIE51dCwgYW5kIEJvbHQgTWFudWZhY3R1cmluZyMzMzIKLW5haWNzIzMzMjcxI01hY2hpbmUgU2hvcHMjMzMyNwotbmFpY3MjMzMyNzIjVHVybmVkIFByb2R1Y3QgYW5kIFNjcmV3LCBOdXQsIGFuZCBCb2x0IE1hbnVmYWN0dXJpbmcjMzMyNwotbmFpY3MjMzMyNzIxI1ByZWNpc2lvbiBUdXJuZWQgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMzMjcyCi1uYWljcyMzMzI3MjIjQm9sdCwgTnV0LCBTY3JldywgUml2ZXQsIGFuZCBXYXNoZXIgTWFudWZhY3R1cmluZyMzMzI3MgotbmFpY3MjMzMyOCNDb2F0aW5nLCBFbmdyYXZpbmcsIEhlYXQgVHJlYXRpbmcsIGFuZCBBbGxpZWQgQWN0aXZpdGllcyMzMzIKLW5haWNzIzMzMjgxI0NvYXRpbmcsIEVuZ3JhdmluZywgSGVhdCBUcmVhdGluZywgYW5kIEFsbGllZCBBY3Rpdml0aWVzIzMzMjgKLW5haWNzIzMzMjgxMSNNZXRhbCBIZWF0IFRyZWF0aW5nIzMzMjgxCi1uYWljcyMzMzI4MTIjTWV0YWwgQ29hdGluZywgRW5ncmF2aW5nIChleGNlcHQgSmV3ZWxyeSBhbmQgU2lsdmVyd2FyZSksIGFuZCBBbGxpZWQgU2VydmljZXMgdG8gTWFudWZhY3R1cmVycyMzMzI4MQotbmFpY3MjMzMyODEzI0VsZWN0cm9wbGF0aW5nLCBQbGF0aW5nLCBQb2xpc2hpbmcsIEFub2RpemluZywgYW5kIENvbG9yaW5nIzMzMjgxCi1uYWljcyMzMzI5I090aGVyIEZhYnJpY2F0ZWQgTWV0YWwgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMzMgotbmFpY3MjMzMyOTEjTWV0YWwgVmFsdmUgTWFudWZhY3R1cmluZyMzMzI5Ci1uYWljcyMzMzI5MTEjSW5kdXN0cmlhbCBWYWx2ZSBNYW51ZmFjdHVyaW5nIzMzMjkxCi1uYWljcyMzMzI5MTIjRmx1aWQgUG93ZXIgVmFsdmUgYW5kIEhvc2UgRml0dGluZyBNYW51ZmFjdHVyaW5nIzMzMjkxCi1uYWljcyMzMzI5MTMjUGx1bWJpbmcgRml4dHVyZSBGaXR0aW5nIGFuZCBUcmltIE1hbnVmYWN0dXJpbmcjMzMyOTEKLW5haWNzIzMzMjkxOSNPdGhlciBNZXRhbCBWYWx2ZSBhbmQgUGlwZSBGaXR0aW5nIE1hbnVmYWN0dXJpbmcjMzMyOTEKLW5haWNzIzMzMjk5I0FsbCBPdGhlciBGYWJyaWNhdGVkIE1ldGFsIFByb2R1Y3QgTWFudWZhY3R1cmluZyMzMzI5Ci1uYWljcyMzMzI5OTEjQmFsbCBhbmQgUm9sbGVyIEJlYXJpbmcgTWFudWZhY3R1cmluZyMzMzI5OQotbmFpY3MjMzMyOTkyI1NtYWxsIEFybXMgQW1tdW5pdGlvbiBNYW51ZmFjdHVyaW5nIzMzMjk5Ci1uYWljcyMzMzI5OTMjQW1tdW5pdGlvbiAoZXhjZXB0IFNtYWxsIEFybXMpIE1hbnVmYWN0dXJpbmcjMzMyOTkKLW5haWNzIzMzMjk5NCNTbWFsbCBBcm1zIE1hbnVmYWN0dXJpbmcjMzMyOTkKLW5haWNzIzMzMjk5NSNPdGhlciBPcmRuYW5jZSBhbmQgQWNjZXNzb3JpZXMgTWFudWZhY3R1cmluZyMzMzI5OQotbmFpY3MjMzMyOTk2I0ZhYnJpY2F0ZWQgUGlwZSBhbmQgUGlwZSBGaXR0aW5nIE1hbnVmYWN0dXJpbmcjMzMyOTkKLW5haWNzIzMzMjk5NyNJbmR1c3RyaWFsIFBhdHRlcm4gTWFudWZhY3R1cmluZyMzMzI5OQotbmFpY3MjMzMyOTk4I0VuYW1lbGVkIElyb24gYW5kIE1ldGFsIFNhbml0YXJ5IFdhcmUgTWFudWZhY3R1cmluZyMzMzI5OQotbmFpY3MjMzMyOTk5I0FsbCBPdGhlciBNaXNjZWxsYW5lb3VzIEZhYnJpY2F0ZWQgTWV0YWwgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMzMjk5Ci1uYWljcyMzMzMjTWFjaGluZXJ5IE1hbnVmYWN0dXJpbmcjMzMKLW5haWNzIzMzMzEjQWdyaWN1bHR1cmUsIENvbnN0cnVjdGlvbiwgYW5kIE1pbmluZyBNYWNoaW5lcnkgTWFudWZhY3R1cmluZyMzMzMKLW5haWNzIzMzMzExI0FncmljdWx0dXJhbCBJbXBsZW1lbnQgTWFudWZhY3R1cmluZyMzMzMxCi1uYWljcyMzMzMxMTEjRmFybSBNYWNoaW5lcnkgYW5kIEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzMzExCi1uYWljcyMzMzMxMTIjTGF3biBhbmQgR2FyZGVuIFRyYWN0b3IgYW5kIEhvbWUgTGF3biBhbmQgR2FyZGVuIEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzMzExCi1uYWljcyMzMzMxMiNDb25zdHJ1Y3Rpb24gTWFjaGluZXJ5IE1hbnVmYWN0dXJpbmcjMzMzMQotbmFpY3MjMzMzMTMjTWluaW5nIGFuZCBPaWwgYW5kIEdhcyBGaWVsZCBNYWNoaW5lcnkgTWFudWZhY3R1cmluZyMzMzMxCi1uYWljcyMzMzMxMzEjTWluaW5nIE1hY2hpbmVyeSBhbmQgRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzMzMTMKLW5haWNzIzMzMzEzMiNPaWwgYW5kIEdhcyBGaWVsZCBNYWNoaW5lcnkgYW5kIEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzMzEzCi1uYWljcyMzMzMyI0luZHVzdHJpYWwgTWFjaGluZXJ5IE1hbnVmYWN0dXJpbmcjMzMzCi1uYWljcyMzMzMyMSNTYXdtaWxsIGFuZCBXb29kd29ya2luZyBNYWNoaW5lcnkgTWFudWZhY3R1cmluZyMzMzMyCi1uYWljcyMzMzMyMiNQbGFzdGljcyBhbmQgUnViYmVyIEluZHVzdHJ5IE1hY2hpbmVyeSBNYW51ZmFjdHVyaW5nIzMzMzIKLW5haWNzIzMzMzI5I090aGVyIEluZHVzdHJpYWwgTWFjaGluZXJ5IE1hbnVmYWN0dXJpbmcjMzMzMgotbmFpY3MjMzMzMjkxI1BhcGVyIEluZHVzdHJ5IE1hY2hpbmVyeSBNYW51ZmFjdHVyaW5nIzMzMzI5Ci1uYWljcyMzMzMyOTIjVGV4dGlsZSBNYWNoaW5lcnkgTWFudWZhY3R1cmluZyMzMzMyOQotbmFpY3MjMzMzMjkzI1ByaW50aW5nIE1hY2hpbmVyeSBhbmQgRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzMzMjkKLW5haWNzIzMzMzI5NCNGb29kIFByb2R1Y3QgTWFjaGluZXJ5IE1hbnVmYWN0dXJpbmcjMzMzMjkKLW5haWNzIzMzMzI5NSNTZW1pY29uZHVjdG9yIE1hY2hpbmVyeSBNYW51ZmFjdHVyaW5nIzMzMzI5Ci1uYWljcyMzMzMyOTgjQWxsIE90aGVyIEluZHVzdHJpYWwgTWFjaGluZXJ5IE1hbnVmYWN0dXJpbmcjMzMzMjkKLW5haWNzIzMzMzMjQ29tbWVyY2lhbCBhbmQgU2VydmljZSBJbmR1c3RyeSBNYWNoaW5lcnkgTWFudWZhY3R1cmluZyMzMzMKLW5haWNzIzMzMzMxI0NvbW1lcmNpYWwgYW5kIFNlcnZpY2UgSW5kdXN0cnkgTWFjaGluZXJ5IE1hbnVmYWN0dXJpbmcjMzMzMwotbmFpY3MjMzMzMzExI0F1dG9tYXRpYyBWZW5kaW5nIE1hY2hpbmUgTWFudWZhY3R1cmluZyMzMzMzMQotbmFpY3MjMzMzMzEyI0NvbW1lcmNpYWwgTGF1bmRyeSwgRHJ5Y2xlYW5pbmcsIGFuZCBQcmVzc2luZyBNYWNoaW5lIE1hbnVmYWN0dXJpbmcjMzMzMzEKLW5haWNzIzMzMzMxMyNPZmZpY2UgTWFjaGluZXJ5IE1hbnVmYWN0dXJpbmcjMzMzMzEKLW5haWNzIzMzMzMxNCNPcHRpY2FsIEluc3RydW1lbnQgYW5kIExlbnMgTWFudWZhY3R1cmluZyMzMzMzMQotbmFpY3MjMzMzMzE1I1Bob3RvZ3JhcGhpYyBhbmQgUGhvdG9jb3B5aW5nIEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzMzMxCi1uYWljcyMzMzMzMTkjT3RoZXIgQ29tbWVyY2lhbCBhbmQgU2VydmljZSBJbmR1c3RyeSBNYWNoaW5lcnkgTWFudWZhY3R1cmluZyMzMzMzMQotbmFpY3MjMzMzNCNWZW50aWxhdGlvbiwgSGVhdGluZywgQWlyLUNvbmRpdGlvbmluZywgYW5kIENvbW1lcmNpYWwgUmVmcmlnZXJhdGlvbiBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzMKLW5haWNzIzMzMzQxI1ZlbnRpbGF0aW9uLCBIZWF0aW5nLCBBaXItQ29uZGl0aW9uaW5nLCBhbmQgQ29tbWVyY2lhbCBSZWZyaWdlcmF0aW9uIEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzMzQKLW5haWNzIzMzMzQxMSNBaXIgUHVyaWZpY2F0aW9uIEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzMzQxCi1uYWljcyMzMzM0MTIjSW5kdXN0cmlhbCBhbmQgQ29tbWVyY2lhbCBGYW4gYW5kIEJsb3dlciBNYW51ZmFjdHVyaW5nIzMzMzQxCi1uYWljcyMzMzM0MTQjSGVhdGluZyBFcXVpcG1lbnQgKGV4Y2VwdCBXYXJtIEFpciBGdXJuYWNlcykgTWFudWZhY3R1cmluZyMzMzM0MQotbmFpY3MjMzMzNDE1I0Fpci1Db25kaXRpb25pbmcgYW5kIFdhcm0gQWlyIEhlYXRpbmcgRXF1aXBtZW50IGFuZCBDb21tZXJjaWFsIGFuZCBJbmR1c3RyaWFsIFJlZnJpZ2VyYXRpb24gRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzMzNDEKLW5haWNzIzMzMzUjTWV0YWx3b3JraW5nIE1hY2hpbmVyeSBNYW51ZmFjdHVyaW5nIzMzMwotbmFpY3MjMzMzNTEjTWV0YWx3b3JraW5nIE1hY2hpbmVyeSBNYW51ZmFjdHVyaW5nIzMzMzUKLW5haWNzIzMzMzUxMSNJbmR1c3RyaWFsIE1vbGQgTWFudWZhY3R1cmluZyMzMzM1MQotbmFpY3MjMzMzNTEyI01hY2hpbmUgVG9vbCAoTWV0YWwgQ3V0dGluZyBUeXBlcykgTWFudWZhY3R1cmluZyMzMzM1MQotbmFpY3MjMzMzNTEzI01hY2hpbmUgVG9vbCAoTWV0YWwgRm9ybWluZyBUeXBlcykgTWFudWZhY3R1cmluZyMzMzM1MQotbmFpY3MjMzMzNTE0I1NwZWNpYWwgRGllIGFuZCBUb29sLCBEaWUgU2V0LCBKaWcsIGFuZCBGaXh0dXJlIE1hbnVmYWN0dXJpbmcjMzMzNTEKLW5haWNzIzMzMzUxNSNDdXR0aW5nIFRvb2wgYW5kIE1hY2hpbmUgVG9vbCBBY2Nlc3NvcnkgTWFudWZhY3R1cmluZyMzMzM1MQotbmFpY3MjMzMzNTE2I1JvbGxpbmcgTWlsbCBNYWNoaW5lcnkgYW5kIEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzMzUxCi1uYWljcyMzMzM1MTgjT3RoZXIgTWV0YWx3b3JraW5nIE1hY2hpbmVyeSBNYW51ZmFjdHVyaW5nIzMzMzUxCi1uYWljcyMzMzM2I0VuZ2luZSwgVHVyYmluZSwgYW5kIFBvd2VyIFRyYW5zbWlzc2lvbiBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzMKLW5haWNzIzMzMzYxI0VuZ2luZSwgVHVyYmluZSwgYW5kIFBvd2VyIFRyYW5zbWlzc2lvbiBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzM2Ci1uYWljcyMzMzM2MTEjVHVyYmluZSBhbmQgVHVyYmluZSBHZW5lcmF0b3IgU2V0IFVuaXRzIE1hbnVmYWN0dXJpbmcjMzMzNjEKLW5haWNzIzMzMzYxMiNTcGVlZCBDaGFuZ2VyLCBJbmR1c3RyaWFsIEhpZ2gtU3BlZWQgRHJpdmUsIGFuZCBHZWFyIE1hbnVmYWN0dXJpbmcjMzMzNjEKLW5haWNzIzMzMzYxMyNNZWNoYW5pY2FsIFBvd2VyIFRyYW5zbWlzc2lvbiBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzM2MQotbmFpY3MjMzMzNjE4I090aGVyIEVuZ2luZSBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzM2MQotbmFpY3MjMzMzOSNPdGhlciBHZW5lcmFsIFB1cnBvc2UgTWFjaGluZXJ5IE1hbnVmYWN0dXJpbmcjMzMzCi1uYWljcyMzMzM5MSNQdW1wIGFuZCBDb21wcmVzc29yIE1hbnVmYWN0dXJpbmcjMzMzOQotbmFpY3MjMzMzOTExI1B1bXAgYW5kIFB1bXBpbmcgRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzMzOTEKLW5haWNzIzMzMzkxMiNBaXIgYW5kIEdhcyBDb21wcmVzc29yIE1hbnVmYWN0dXJpbmcjMzMzOTEKLW5haWNzIzMzMzkxMyNNZWFzdXJpbmcgYW5kIERpc3BlbnNpbmcgUHVtcCBNYW51ZmFjdHVyaW5nIzMzMzkxCi1uYWljcyMzMzM5MiNNYXRlcmlhbCBIYW5kbGluZyBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzM5Ci1uYWljcyMzMzM5MjEjRWxldmF0b3IgYW5kIE1vdmluZyBTdGFpcndheSBNYW51ZmFjdHVyaW5nIzMzMzkyCi1uYWljcyMzMzM5MjIjQ29udmV5b3IgYW5kIENvbnZleWluZyBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzM5MgotbmFpY3MjMzMzOTIzI092ZXJoZWFkIFRyYXZlbGluZyBDcmFuZSwgSG9pc3QsIGFuZCBNb25vcmFpbCBTeXN0ZW0gTWFudWZhY3R1cmluZyMzMzM5MgotbmFpY3MjMzMzOTI0I0luZHVzdHJpYWwgVHJ1Y2ssIFRyYWN0b3IsIFRyYWlsZXIsIGFuZCBTdGFja2VyIE1hY2hpbmVyeSBNYW51ZmFjdHVyaW5nIzMzMzkyCi1uYWljcyMzMzM5OSNBbGwgT3RoZXIgR2VuZXJhbCBQdXJwb3NlIE1hY2hpbmVyeSBNYW51ZmFjdHVyaW5nIzMzMzkKLW5haWNzIzMzMzk5MSNQb3dlci1Ecml2ZW4gSGFuZHRvb2wgTWFudWZhY3R1cmluZyMzMzM5OQotbmFpY3MjMzMzOTkyI1dlbGRpbmcgYW5kIFNvbGRlcmluZyBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzM5OQotbmFpY3MjMzMzOTkzI1BhY2thZ2luZyBNYWNoaW5lcnkgTWFudWZhY3R1cmluZyMzMzM5OQotbmFpY3MjMzMzOTk0I0luZHVzdHJpYWwgUHJvY2VzcyBGdXJuYWNlIGFuZCBPdmVuIE1hbnVmYWN0dXJpbmcjMzMzOTkKLW5haWNzIzMzMzk5NSNGbHVpZCBQb3dlciBDeWxpbmRlciBhbmQgQWN0dWF0b3IgTWFudWZhY3R1cmluZyMzMzM5OQotbmFpY3MjMzMzOTk2I0ZsdWlkIFBvd2VyIFB1bXAgYW5kIE1vdG9yIE1hbnVmYWN0dXJpbmcjMzMzOTkKLW5haWNzIzMzMzk5NyNTY2FsZSBhbmQgQmFsYW5jZSAoZXhjZXB0IExhYm9yYXRvcnkpIE1hbnVmYWN0dXJpbmcjMzMzOTkKLW5haWNzIzMzMzk5OSNBbGwgT3RoZXIgTWlzY2VsbGFuZW91cyBHZW5lcmFsIFB1cnBvc2UgTWFjaGluZXJ5IE1hbnVmYWN0dXJpbmcjMzMzOTkKLW5haWNzIzMzNCNDb21wdXRlciBhbmQgRWxlY3Ryb25pYyBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzMKLW5haWNzIzMzNDEjQ29tcHV0ZXIgYW5kIFBlcmlwaGVyYWwgRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzM0Ci1uYWljcyMzMzQxMSNDb21wdXRlciBhbmQgUGVyaXBoZXJhbCBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzQxCi1uYWljcyMzMzQxMTEjRWxlY3Ryb25pYyBDb21wdXRlciBNYW51ZmFjdHVyaW5nIzMzNDExCi1uYWljcyMzMzQxMTIjQ29tcHV0ZXIgU3RvcmFnZSBEZXZpY2UgTWFudWZhY3R1cmluZyMzMzQxMQotbmFpY3MjMzM0MTEzI0NvbXB1dGVyIFRlcm1pbmFsIE1hbnVmYWN0dXJpbmcjMzM0MTEKLW5haWNzIzMzNDExOSNPdGhlciBDb21wdXRlciBQZXJpcGhlcmFsIEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzNDExCi1uYWljcyMzMzQyI0NvbW11bmljYXRpb25zIEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzNAotbmFpY3MjMzM0MjEjVGVsZXBob25lIEFwcGFyYXR1cyBNYW51ZmFjdHVyaW5nIzMzNDIKLW5haWNzIzMzNDIyI1JhZGlvIGFuZCBUZWxldmlzaW9uIEJyb2FkY2FzdGluZyBhbmQgV2lyZWxlc3MgQ29tbXVuaWNhdGlvbnMgRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzM0MgotbmFpY3MjMzM0MjkjT3RoZXIgQ29tbXVuaWNhdGlvbnMgRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzM0MgotbmFpY3MjMzM0MyNBdWRpbyBhbmQgVmlkZW8gRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzM0Ci1uYWljcyMzMzQzMSNBdWRpbyBhbmQgVmlkZW8gRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzM0MwotbmFpY3MjMzM0NCNTZW1pY29uZHVjdG9yIGFuZCBPdGhlciBFbGVjdHJvbmljIENvbXBvbmVudCBNYW51ZmFjdHVyaW5nIzMzNAotbmFpY3MjMzM0NDEjU2VtaWNvbmR1Y3RvciBhbmQgT3RoZXIgRWxlY3Ryb25pYyBDb21wb25lbnQgTWFudWZhY3R1cmluZyMzMzQ0Ci1uYWljcyMzMzQ0MTEjRWxlY3Ryb24gVHViZSBNYW51ZmFjdHVyaW5nIzMzNDQxCi1uYWljcyMzMzQ0MTIjQmFyZSBQcmludGVkIENpcmN1aXQgQm9hcmQgTWFudWZhY3R1cmluZyMzMzQ0MQotbmFpY3MjMzM0NDEzI1NlbWljb25kdWN0b3IgYW5kIFJlbGF0ZWQgRGV2aWNlIE1hbnVmYWN0dXJpbmcjMzM0NDEKLW5haWNzIzMzNDQxNCNFbGVjdHJvbmljIENhcGFjaXRvciBNYW51ZmFjdHVyaW5nIzMzNDQxCi1uYWljcyMzMzQ0MTUjRWxlY3Ryb25pYyBSZXNpc3RvciBNYW51ZmFjdHVyaW5nIzMzNDQxCi1uYWljcyMzMzQ0MTYjRWxlY3Ryb25pYyBDb2lsLCBUcmFuc2Zvcm1lciwgYW5kIE90aGVyIEluZHVjdG9yIE1hbnVmYWN0dXJpbmcjMzM0NDEKLW5haWNzIzMzNDQxNyNFbGVjdHJvbmljIENvbm5lY3RvciBNYW51ZmFjdHVyaW5nIzMzNDQxCi1uYWljcyMzMzQ0MTgjUHJpbnRlZCBDaXJjdWl0IEFzc2VtYmx5IChFbGVjdHJvbmljIEFzc2VtYmx5KSBNYW51ZmFjdHVyaW5nIzMzNDQxCi1uYWljcyMzMzQ0MTkjT3RoZXIgRWxlY3Ryb25pYyBDb21wb25lbnQgTWFudWZhY3R1cmluZyMzMzQ0MQotbmFpY3MjMzM0NSNOYXZpZ2F0aW9uYWwsIE1lYXN1cmluZywgRWxlY3Ryb21lZGljYWwsIGFuZCBDb250cm9sIEluc3RydW1lbnRzIE1hbnVmYWN0dXJpbmcjMzM0Ci1uYWljcyMzMzQ1MSNOYXZpZ2F0aW9uYWwsIE1lYXN1cmluZywgRWxlY3Ryb21lZGljYWwsIGFuZCBDb250cm9sIEluc3RydW1lbnRzIE1hbnVmYWN0dXJpbmcjMzM0NQotbmFpY3MjMzM0NTEwI0VsZWN0cm9tZWRpY2FsIGFuZCBFbGVjdHJvdGhlcmFwZXV0aWMgQXBwYXJhdHVzIE1hbnVmYWN0dXJpbmcjMzM0NTEKLW5haWNzIzMzNDUxMSNTZWFyY2gsIERldGVjdGlvbiwgTmF2aWdhdGlvbiwgR3VpZGFuY2UsIEFlcm9uYXV0aWNhbCwgYW5kIE5hdXRpY2FsIFN5c3RlbSBhbmQgSW5zdHJ1bWVudCBNYW51ZmFjdHVyaW5nIzMzNDUxCi1uYWljcyMzMzQ1MTIjQXV0b21hdGljIEVudmlyb25tZW50YWwgQ29udHJvbCBNYW51ZmFjdHVyaW5nIGZvciBSZXNpZGVudGlhbCwgQ29tbWVyY2lhbCwgYW5kIEFwcGxpYW5jZSBVc2UjMzM0NTEKLW5haWNzIzMzNDUxMyNJbnN0cnVtZW50cyBhbmQgUmVsYXRlZCBQcm9kdWN0cyBNYW51ZmFjdHVyaW5nIGZvciBNZWFzdXJpbmcsIERpc3BsYXlpbmcsIGFuZCBDb250cm9sbGluZyBJbmR1c3RyaWFsIFByb2Nlc3MgVmFyaWFibGVzIzMzNDUxCi1uYWljcyMzMzQ1MTQjVG90YWxpemluZyBGbHVpZCBNZXRlciBhbmQgQ291bnRpbmcgRGV2aWNlIE1hbnVmYWN0dXJpbmcjMzM0NTEKLW5haWNzIzMzNDUxNSNJbnN0cnVtZW50IE1hbnVmYWN0dXJpbmcgZm9yIE1lYXN1cmluZyBhbmQgVGVzdGluZyBFbGVjdHJpY2l0eSBhbmQgRWxlY3RyaWNhbCBTaWduYWxzIzMzNDUxCi1uYWljcyMzMzQ1MTYjQW5hbHl0aWNhbCBMYWJvcmF0b3J5IEluc3RydW1lbnQgTWFudWZhY3R1cmluZyMzMzQ1MQotbmFpY3MjMzM0NTE3I0lycmFkaWF0aW9uIEFwcGFyYXR1cyBNYW51ZmFjdHVyaW5nIzMzNDUxCi1uYWljcyMzMzQ1MTgjV2F0Y2gsIENsb2NrLCBhbmQgUGFydCBNYW51ZmFjdHVyaW5nIzMzNDUxCi1uYWljcyMzMzQ1MTkjT3RoZXIgTWVhc3VyaW5nIGFuZCBDb250cm9sbGluZyBEZXZpY2UgTWFudWZhY3R1cmluZyMzMzQ1MQotbmFpY3MjMzM0NiNNYW51ZmFjdHVyaW5nIGFuZCBSZXByb2R1Y2luZyBNYWduZXRpYyBhbmQgT3B0aWNhbCBNZWRpYSMzMzQKLW5haWNzIzMzNDYxI01hbnVmYWN0dXJpbmcgYW5kIFJlcHJvZHVjaW5nIE1hZ25ldGljIGFuZCBPcHRpY2FsIE1lZGlhIzMzNDYKLW5haWNzIzMzNDYxMSNTb2Z0d2FyZSBSZXByb2R1Y2luZyMzMzQ2MQotbmFpY3MjMzM0NjEyI1ByZXJlY29yZGVkIENvbXBhY3QgRGlzYyAoZXhjZXB0IFNvZnR3YXJlKSwgVGFwZSwgYW5kIFJlY29yZCBSZXByb2R1Y2luZyMzMzQ2MQotbmFpY3MjMzM0NjEzI01hZ25ldGljIGFuZCBPcHRpY2FsIFJlY29yZGluZyBNZWRpYSBNYW51ZmFjdHVyaW5nIzMzNDYxCi1uYWljcyMzMzUjRWxlY3RyaWNhbCBFcXVpcG1lbnQsIEFwcGxpYW5jZSwgYW5kIENvbXBvbmVudCBNYW51ZmFjdHVyaW5nIzMzCi1uYWljcyMzMzUxI0VsZWN0cmljIExpZ2h0aW5nIEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzNQotbmFpY3MjMzM1MTEjRWxlY3RyaWMgTGFtcCBCdWxiIGFuZCBQYXJ0IE1hbnVmYWN0dXJpbmcjMzM1MQotbmFpY3MjMzM1MTIjTGlnaHRpbmcgRml4dHVyZSBNYW51ZmFjdHVyaW5nIzMzNTEKLW5haWNzIzMzNTEyMSNSZXNpZGVudGlhbCBFbGVjdHJpYyBMaWdodGluZyBGaXh0dXJlIE1hbnVmYWN0dXJpbmcjMzM1MTIKLW5haWNzIzMzNTEyMiNDb21tZXJjaWFsLCBJbmR1c3RyaWFsLCBhbmQgSW5zdGl0dXRpb25hbCBFbGVjdHJpYyBMaWdodGluZyBGaXh0dXJlIE1hbnVmYWN0dXJpbmcjMzM1MTIKLW5haWNzIzMzNTEyOSNPdGhlciBMaWdodGluZyBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzUxMgotbmFpY3MjMzM1MiNIb3VzZWhvbGQgQXBwbGlhbmNlIE1hbnVmYWN0dXJpbmcjMzM1Ci1uYWljcyMzMzUyMSNTbWFsbCBFbGVjdHJpY2FsIEFwcGxpYW5jZSBNYW51ZmFjdHVyaW5nIzMzNTIKLW5haWNzIzMzNTIxMSNFbGVjdHJpYyBIb3VzZXdhcmVzIGFuZCBIb3VzZWhvbGQgRmFuIE1hbnVmYWN0dXJpbmcjMzM1MjEKLW5haWNzIzMzNTIxMiNIb3VzZWhvbGQgVmFjdXVtIENsZWFuZXIgTWFudWZhY3R1cmluZyMzMzUyMQotbmFpY3MjMzM1MjIjTWFqb3IgQXBwbGlhbmNlIE1hbnVmYWN0dXJpbmcjMzM1MgotbmFpY3MjMzM1MjIxI0hvdXNlaG9sZCBDb29raW5nIEFwcGxpYW5jZSBNYW51ZmFjdHVyaW5nIzMzNTIyCi1uYWljcyMzMzUyMjIjSG91c2Vob2xkIFJlZnJpZ2VyYXRvciBhbmQgSG9tZSBGcmVlemVyIE1hbnVmYWN0dXJpbmcjMzM1MjIKLW5haWNzIzMzNTIyNCNIb3VzZWhvbGQgTGF1bmRyeSBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzUyMgotbmFpY3MjMzM1MjI4I090aGVyIE1ham9yIEhvdXNlaG9sZCBBcHBsaWFuY2UgTWFudWZhY3R1cmluZyMzMzUyMgotbmFpY3MjMzM1MyNFbGVjdHJpY2FsIEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzNQotbmFpY3MjMzM1MzEjRWxlY3RyaWNhbCBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzUzCi1uYWljcyMzMzUzMTEjUG93ZXIsIERpc3RyaWJ1dGlvbiwgYW5kIFNwZWNpYWx0eSBUcmFuc2Zvcm1lciBNYW51ZmFjdHVyaW5nIzMzNTMxCi1uYWljcyMzMzUzMTIjTW90b3IgYW5kIEdlbmVyYXRvciBNYW51ZmFjdHVyaW5nIzMzNTMxCi1uYWljcyMzMzUzMTMjU3dpdGNoZ2VhciBhbmQgU3dpdGNoYm9hcmQgQXBwYXJhdHVzIE1hbnVmYWN0dXJpbmcjMzM1MzEKLW5haWNzIzMzNTMxNCNSZWxheSBhbmQgSW5kdXN0cmlhbCBDb250cm9sIE1hbnVmYWN0dXJpbmcjMzM1MzEKLW5haWNzIzMzNTkjT3RoZXIgRWxlY3RyaWNhbCBFcXVpcG1lbnQgYW5kIENvbXBvbmVudCBNYW51ZmFjdHVyaW5nIzMzNQotbmFpY3MjMzM1OTEjQmF0dGVyeSBNYW51ZmFjdHVyaW5nIzMzNTkKLW5haWNzIzMzNTkxMSNTdG9yYWdlIEJhdHRlcnkgTWFudWZhY3R1cmluZyMzMzU5MQotbmFpY3MjMzM1OTEyI1ByaW1hcnkgQmF0dGVyeSBNYW51ZmFjdHVyaW5nIzMzNTkxCi1uYWljcyMzMzU5MiNDb21tdW5pY2F0aW9uIGFuZCBFbmVyZ3kgV2lyZSBhbmQgQ2FibGUgTWFudWZhY3R1cmluZyMzMzU5Ci1uYWljcyMzMzU5MjEjRmliZXIgT3B0aWMgQ2FibGUgTWFudWZhY3R1cmluZyMzMzU5MgotbmFpY3MjMzM1OTI5I090aGVyIENvbW11bmljYXRpb24gYW5kIEVuZXJneSBXaXJlIE1hbnVmYWN0dXJpbmcjMzM1OTIKLW5haWNzIzMzNTkzI1dpcmluZyBEZXZpY2UgTWFudWZhY3R1cmluZyMzMzU5Ci1uYWljcyMzMzU5MzEjQ3VycmVudC1DYXJyeWluZyBXaXJpbmcgRGV2aWNlIE1hbnVmYWN0dXJpbmcjMzM1OTMKLW5haWNzIzMzNTkzMiNOb25jdXJyZW50LUNhcnJ5aW5nIFdpcmluZyBEZXZpY2UgTWFudWZhY3R1cmluZyMzMzU5MwotbmFpY3MjMzM1OTkjQWxsIE90aGVyIEVsZWN0cmljYWwgRXF1aXBtZW50IGFuZCBDb21wb25lbnQgTWFudWZhY3R1cmluZyMzMzU5Ci1uYWljcyMzMzU5OTEjQ2FyYm9uIGFuZCBHcmFwaGl0ZSBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzM1OTkKLW5haWNzIzMzNTk5OSNBbGwgT3RoZXIgTWlzY2VsbGFuZW91cyBFbGVjdHJpY2FsIEVxdWlwbWVudCBhbmQgQ29tcG9uZW50IE1hbnVmYWN0dXJpbmcjMzM1OTkKLW5haWNzIzMzNiNUcmFuc3BvcnRhdGlvbiBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMwotbmFpY3MjMzM2MSNNb3RvciBWZWhpY2xlIE1hbnVmYWN0dXJpbmcjMzM2Ci1uYWljcyMzMzYxMSNBdXRvbW9iaWxlIGFuZCBMaWdodCBEdXR5IE1vdG9yIFZlaGljbGUgTWFudWZhY3R1cmluZyMzMzYxCi1uYWljcyMzMzYxMTEjQXV0b21vYmlsZSBNYW51ZmFjdHVyaW5nIzMzNjExCi1uYWljcyMzMzYxMTIjTGlnaHQgVHJ1Y2sgYW5kIFV0aWxpdHkgVmVoaWNsZSBNYW51ZmFjdHVyaW5nIzMzNjExCi1uYWljcyMzMzYxMiNIZWF2eSBEdXR5IFRydWNrIE1hbnVmYWN0dXJpbmcjMzM2MQotbmFpY3MjMzM2MiNNb3RvciBWZWhpY2xlIEJvZHkgYW5kIFRyYWlsZXIgTWFudWZhY3R1cmluZyMzMzYKLW5haWNzIzMzNjIxI01vdG9yIFZlaGljbGUgQm9keSBhbmQgVHJhaWxlciBNYW51ZmFjdHVyaW5nIzMzNjIKLW5haWNzIzMzNjIxMSNNb3RvciBWZWhpY2xlIEJvZHkgTWFudWZhY3R1cmluZyMzMzYyMQotbmFpY3MjMzM2MjEyI1RydWNrIFRyYWlsZXIgTWFudWZhY3R1cmluZyMzMzYyMQotbmFpY3MjMzM2MjEzI01vdG9yIEhvbWUgTWFudWZhY3R1cmluZyMzMzYyMQotbmFpY3MjMzM2MjE0I1RyYXZlbCBUcmFpbGVyIGFuZCBDYW1wZXIgTWFudWZhY3R1cmluZyMzMzYyMQotbmFpY3MjMzM2MyNNb3RvciBWZWhpY2xlIFBhcnRzIE1hbnVmYWN0dXJpbmcjMzM2Ci1uYWljcyMzMzYzMSNNb3RvciBWZWhpY2xlIEdhc29saW5lIEVuZ2luZSBhbmQgRW5naW5lIFBhcnRzIE1hbnVmYWN0dXJpbmcjMzM2MwotbmFpY3MjMzM2MzExI0NhcmJ1cmV0b3IsIFBpc3RvbiwgUGlzdG9uIFJpbmcsIGFuZCBWYWx2ZSBNYW51ZmFjdHVyaW5nIzMzNjMxCi1uYWljcyMzMzYzMTIjR2Fzb2xpbmUgRW5naW5lIGFuZCBFbmdpbmUgUGFydHMgTWFudWZhY3R1cmluZyMzMzYzMQotbmFpY3MjMzM2MzIjTW90b3IgVmVoaWNsZSBFbGVjdHJpY2FsIGFuZCBFbGVjdHJvbmljIEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzNjMKLW5haWNzIzMzNjMyMSNWZWhpY3VsYXIgTGlnaHRpbmcgRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzM2MzIKLW5haWNzIzMzNjMyMiNPdGhlciBNb3RvciBWZWhpY2xlIEVsZWN0cmljYWwgYW5kIEVsZWN0cm9uaWMgRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzM2MzIKLW5haWNzIzMzNjMzI01vdG9yIFZlaGljbGUgU3RlZXJpbmcgYW5kIFN1c3BlbnNpb24gQ29tcG9uZW50cyAoZXhjZXB0IFNwcmluZykgTWFudWZhY3R1cmluZyMzMzYzCi1uYWljcyMzMzYzNCNNb3RvciBWZWhpY2xlIEJyYWtlIFN5c3RlbSBNYW51ZmFjdHVyaW5nIzMzNjMKLW5haWNzIzMzNjM1I01vdG9yIFZlaGljbGUgVHJhbnNtaXNzaW9uIGFuZCBQb3dlciBUcmFpbiBQYXJ0cyBNYW51ZmFjdHVyaW5nIzMzNjMKLW5haWNzIzMzNjM2I01vdG9yIFZlaGljbGUgU2VhdGluZyBhbmQgSW50ZXJpb3IgVHJpbSBNYW51ZmFjdHVyaW5nIzMzNjMKLW5haWNzIzMzNjM3I01vdG9yIFZlaGljbGUgTWV0YWwgU3RhbXBpbmcjMzM2MwotbmFpY3MjMzM2MzkjT3RoZXIgTW90b3IgVmVoaWNsZSBQYXJ0cyBNYW51ZmFjdHVyaW5nIzMzNjMKLW5haWNzIzMzNjM5MSNNb3RvciBWZWhpY2xlIEFpci1Db25kaXRpb25pbmcgTWFudWZhY3R1cmluZyMzMzYzOQotbmFpY3MjMzM2Mzk5I0FsbCBPdGhlciBNb3RvciBWZWhpY2xlIFBhcnRzIE1hbnVmYWN0dXJpbmcjMzM2MzkKLW5haWNzIzMzNjQjQWVyb3NwYWNlIFByb2R1Y3QgYW5kIFBhcnRzIE1hbnVmYWN0dXJpbmcjMzM2Ci1uYWljcyMzMzY0MSNBZXJvc3BhY2UgUHJvZHVjdCBhbmQgUGFydHMgTWFudWZhY3R1cmluZyMzMzY0Ci1uYWljcyMzMzY0MTEjQWlyY3JhZnQgTWFudWZhY3R1cmluZyMzMzY0MQotbmFpY3MjMzM2NDEyI0FpcmNyYWZ0IEVuZ2luZSBhbmQgRW5naW5lIFBhcnRzIE1hbnVmYWN0dXJpbmcjMzM2NDEKLW5haWNzIzMzNjQxMyNPdGhlciBBaXJjcmFmdCBQYXJ0cyBhbmQgQXV4aWxpYXJ5IEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzNjQxCi1uYWljcyMzMzY0MTQjR3VpZGVkIE1pc3NpbGUgYW5kIFNwYWNlIFZlaGljbGUgTWFudWZhY3R1cmluZyMzMzY0MQotbmFpY3MjMzM2NDE1I0d1aWRlZCBNaXNzaWxlIGFuZCBTcGFjZSBWZWhpY2xlIFByb3B1bHNpb24gVW5pdCBhbmQgUHJvcHVsc2lvbiBVbml0IFBhcnRzIE1hbnVmYWN0dXJpbmcjMzM2NDEKLW5haWNzIzMzNjQxOSNPdGhlciBHdWlkZWQgTWlzc2lsZSBhbmQgU3BhY2UgVmVoaWNsZSBQYXJ0cyBhbmQgQXV4aWxpYXJ5IEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzNjQxCi1uYWljcyMzMzY1I1JhaWxyb2FkIFJvbGxpbmcgU3RvY2sgTWFudWZhY3R1cmluZyMzMzYKLW5haWNzIzMzNjUxI1JhaWxyb2FkIFJvbGxpbmcgU3RvY2sgTWFudWZhY3R1cmluZyMzMzY1Ci1uYWljcyMzMzY2I1NoaXAgYW5kIEJvYXQgQnVpbGRpbmcjMzM2Ci1uYWljcyMzMzY2MSNTaGlwIGFuZCBCb2F0IEJ1aWxkaW5nIzMzNjYKLW5haWNzIzMzNjYxMSNTaGlwIEJ1aWxkaW5nIGFuZCBSZXBhaXJpbmcjMzM2NjEKLW5haWNzIzMzNjYxMiNCb2F0IEJ1aWxkaW5nIzMzNjYxCi1uYWljcyMzMzY5I090aGVyIFRyYW5zcG9ydGF0aW9uIEVxdWlwbWVudCBNYW51ZmFjdHVyaW5nIzMzNgotbmFpY3MjMzM2OTkjT3RoZXIgVHJhbnNwb3J0YXRpb24gRXF1aXBtZW50IE1hbnVmYWN0dXJpbmcjMzM2OQotbmFpY3MjMzM2OTkxI01vdG9yY3ljbGUsIEJpY3ljbGUsIGFuZCBQYXJ0cyBNYW51ZmFjdHVyaW5nIzMzNjk5Ci1uYWljcyMzMzY5OTIjTWlsaXRhcnkgQXJtb3JlZCBWZWhpY2xlLCBUYW5rLCBhbmQgVGFuayBDb21wb25lbnQgTWFudWZhY3R1cmluZyMzMzY5OQotbmFpY3MjMzM2OTk5I0FsbCBPdGhlciBUcmFuc3BvcnRhdGlvbiBFcXVpcG1lbnQgTWFudWZhY3R1cmluZyMzMzY5OQotbmFpY3MjMzM3I0Z1cm5pdHVyZSBhbmQgUmVsYXRlZCBQcm9kdWN0IE1hbnVmYWN0dXJpbmcjMzMKLW5haWNzIzMzNzEjSG91c2Vob2xkIGFuZCBJbnN0aXR1dGlvbmFsIEZ1cm5pdHVyZSBhbmQgS2l0Y2hlbiBDYWJpbmV0IE1hbnVmYWN0dXJpbmcjMzM3Ci1uYWljcyMzMzcxMSNXb29kIEtpdGNoZW4gQ2FiaW5ldCBhbmQgQ291bnRlcnRvcCBNYW51ZmFjdHVyaW5nIzMzNzEKLW5haWNzIzMzNzEyI0hvdXNlaG9sZCBhbmQgSW5zdGl0dXRpb25hbCBGdXJuaXR1cmUgTWFudWZhY3R1cmluZyMzMzcxCi1uYWljcyMzMzcxMjEjVXBob2xzdGVyZWQgSG91c2Vob2xkIEZ1cm5pdHVyZSBNYW51ZmFjdHVyaW5nIzMzNzEyCi1uYWljcyMzMzcxMjIjTm9udXBob2xzdGVyZWQgV29vZCBIb3VzZWhvbGQgRnVybml0dXJlIE1hbnVmYWN0dXJpbmcjMzM3MTIKLW5haWNzIzMzNzEyNCNNZXRhbCBIb3VzZWhvbGQgRnVybml0dXJlIE1hbnVmYWN0dXJpbmcjMzM3MTIKLW5haWNzIzMzNzEyNSNIb3VzZWhvbGQgRnVybml0dXJlIChleGNlcHQgV29vZCBhbmQgTWV0YWwpIE1hbnVmYWN0dXJpbmcjMzM3MTIKLW5haWNzIzMzNzEyNyNJbnN0aXR1dGlvbmFsIEZ1cm5pdHVyZSBNYW51ZmFjdHVyaW5nIzMzNzEyCi1uYWljcyMzMzcxMjkjV29vZCBUZWxldmlzaW9uLCBSYWRpbywgYW5kIFNld2luZyBNYWNoaW5lIENhYmluZXQgTWFudWZhY3R1cmluZyMzMzcxMgotbmFpY3MjMzM3MiNPZmZpY2UgRnVybml0dXJlIChpbmNsdWRpbmcgRml4dHVyZXMpIE1hbnVmYWN0dXJpbmcjMzM3Ci1uYWljcyMzMzcyMSNPZmZpY2UgRnVybml0dXJlIChpbmNsdWRpbmcgRml4dHVyZXMpIE1hbnVmYWN0dXJpbmcjMzM3MgotbmFpY3MjMzM3MjExI1dvb2QgT2ZmaWNlIEZ1cm5pdHVyZSBNYW51ZmFjdHVyaW5nIzMzNzIxCi1uYWljcyMzMzcyMTIjQ3VzdG9tIEFyY2hpdGVjdHVyYWwgV29vZHdvcmsgYW5kIE1pbGx3b3JrIE1hbnVmYWN0dXJpbmcjMzM3MjEKLW5haWNzIzMzNzIxNCNPZmZpY2UgRnVybml0dXJlIChleGNlcHQgV29vZCkgTWFudWZhY3R1cmluZyMzMzcyMQotbmFpY3MjMzM3MjE1I1Nob3djYXNlLCBQYXJ0aXRpb24sIFNoZWx2aW5nLCBhbmQgTG9ja2VyIE1hbnVmYWN0dXJpbmcjMzM3MjEKLW5haWNzIzMzNzkjT3RoZXIgRnVybml0dXJlIFJlbGF0ZWQgUHJvZHVjdCBNYW51ZmFjdHVyaW5nIzMzNwotbmFpY3MjMzM3OTEjTWF0dHJlc3MgTWFudWZhY3R1cmluZyMzMzc5Ci1uYWljcyMzMzc5MiNCbGluZCBhbmQgU2hhZGUgTWFudWZhY3R1cmluZyMzMzc5Ci1uYWljcyMzMzkjTWlzY2VsbGFuZW91cyBNYW51ZmFjdHVyaW5nIzMzCi1uYWljcyMzMzkxI01lZGljYWwgRXF1aXBtZW50IGFuZCBTdXBwbGllcyBNYW51ZmFjdHVyaW5nIzMzOQotbmFpY3MjMzM5MTEjTWVkaWNhbCBFcXVpcG1lbnQgYW5kIFN1cHBsaWVzIE1hbnVmYWN0dXJpbmcjMzM5MQotbmFpY3MjMzM5MTExI0xhYm9yYXRvcnkgQXBwYXJhdHVzIGFuZCBGdXJuaXR1cmUgTWFudWZhY3R1cmluZyMzMzkxMQotbmFpY3MjMzM5MTEyI1N1cmdpY2FsIGFuZCBNZWRpY2FsIEluc3RydW1lbnQgTWFudWZhY3R1cmluZyMzMzkxMQotbmFpY3MjMzM5MTEzI1N1cmdpY2FsIEFwcGxpYW5jZSBhbmQgU3VwcGxpZXMgTWFudWZhY3R1cmluZyMzMzkxMQotbmFpY3MjMzM5MTE0I0RlbnRhbCBFcXVpcG1lbnQgYW5kIFN1cHBsaWVzIE1hbnVmYWN0dXJpbmcjMzM5MTEKLW5haWNzIzMzOTExNSNPcGh0aGFsbWljIEdvb2RzIE1hbnVmYWN0dXJpbmcjMzM5MTEKLW5haWNzIzMzOTExNiNEZW50YWwgTGFib3JhdG9yaWVzIzMzOTExCi1uYWljcyMzMzk5I090aGVyIE1pc2NlbGxhbmVvdXMgTWFudWZhY3R1cmluZyMzMzkKLW5haWNzIzMzOTkxI0pld2VscnkgYW5kIFNpbHZlcndhcmUgTWFudWZhY3R1cmluZyMzMzk5Ci1uYWljcyMzMzk5MTEjSmV3ZWxyeSAoZXhjZXB0IENvc3R1bWUpIE1hbnVmYWN0dXJpbmcjMzM5OTEKLW5haWNzIzMzOTkxMiNTaWx2ZXJ3YXJlIGFuZCBIb2xsb3d3YXJlIE1hbnVmYWN0dXJpbmcjMzM5OTEKLW5haWNzIzMzOTkxMyNKZXdlbGVycycgTWF0ZXJpYWwgYW5kIExhcGlkYXJ5IFdvcmsgTWFudWZhY3R1cmluZyMzMzk5MQotbmFpY3MjMzM5OTE0I0Nvc3R1bWUgSmV3ZWxyeSBhbmQgTm92ZWx0eSBNYW51ZmFjdHVyaW5nIzMzOTkxCi1uYWljcyMzMzk5MiNTcG9ydGluZyBhbmQgQXRobGV0aWMgR29vZHMgTWFudWZhY3R1cmluZyMzMzk5Ci1uYWljcyMzMzk5MyNEb2xsLCBUb3ksIGFuZCBHYW1lIE1hbnVmYWN0dXJpbmcjMzM5OQotbmFpY3MjMzM5OTMxI0RvbGwgYW5kIFN0dWZmZWQgVG95IE1hbnVmYWN0dXJpbmcjMzM5OTMKLW5haWNzIzMzOTkzMiNHYW1lLCBUb3ksIGFuZCBDaGlsZHJlbidzIFZlaGljbGUgTWFudWZhY3R1cmluZyMzMzk5MwotbmFpY3MjMzM5OTQjT2ZmaWNlIFN1cHBsaWVzIChleGNlcHQgUGFwZXIpIE1hbnVmYWN0dXJpbmcjMzM5OQotbmFpY3MjMzM5OTQxI1BlbiBhbmQgTWVjaGFuaWNhbCBQZW5jaWwgTWFudWZhY3R1cmluZyMzMzk5NAotbmFpY3MjMzM5OTQyI0xlYWQgUGVuY2lsIGFuZCBBcnQgR29vZCBNYW51ZmFjdHVyaW5nIzMzOTk0Ci1uYWljcyMzMzk5NDMjTWFya2luZyBEZXZpY2UgTWFudWZhY3R1cmluZyMzMzk5NAotbmFpY3MjMzM5OTQ0I0NhcmJvbiBQYXBlciBhbmQgSW5rZWQgUmliYm9uIE1hbnVmYWN0dXJpbmcjMzM5OTQKLW5haWNzIzMzOTk1I1NpZ24gTWFudWZhY3R1cmluZyMzMzk5Ci1uYWljcyMzMzk5OSNBbGwgT3RoZXIgTWlzY2VsbGFuZW91cyBNYW51ZmFjdHVyaW5nIzMzOTkKLW5haWNzIzMzOTk5MSNHYXNrZXQsIFBhY2tpbmcsIGFuZCBTZWFsaW5nIERldmljZSBNYW51ZmFjdHVyaW5nIzMzOTk5Ci1uYWljcyMzMzk5OTIjTXVzaWNhbCBJbnN0cnVtZW50IE1hbnVmYWN0dXJpbmcjMzM5OTkKLW5haWNzIzMzOTk5MyNGYXN0ZW5lciwgQnV0dG9uLCBOZWVkbGUsIGFuZCBQaW4gTWFudWZhY3R1cmluZyMzMzk5OQotbmFpY3MjMzM5OTk0I0Jyb29tLCBCcnVzaCwgYW5kIE1vcCBNYW51ZmFjdHVyaW5nIzMzOTk5Ci1uYWljcyMzMzk5OTUjQnVyaWFsIENhc2tldCBNYW51ZmFjdHVyaW5nIzMzOTk5Ci1uYWljcyMzMzk5OTkjQWxsIE90aGVyIE1pc2NlbGxhbmVvdXMgTWFudWZhY3R1cmluZyMzMzk5OQotbmFpY3MjNDIjV2hvbGVzYWxlIFRyYWRlIzQyCi1uYWljcyM0MjEjV2hvbGVzYWxlIFRyYWRlLCBEdXJhYmxlIEdvb2RzIzQyCi1uYWljcyM0MjExI01vdG9yIFZlaGljbGUgYW5kIE1vdG9yIFZlaGljbGUgUGFydHMgYW5kIFN1cHBsaWVzIFdob2xlc2FsZXJzIzQyMQotbmFpY3MjNDIxMTEjQXV0b21vYmlsZSBhbmQgT3RoZXIgTW90b3IgVmVoaWNsZSBXaG9sZXNhbGVycyM0MjExCi1uYWljcyM0MjExMiNNb3RvciBWZWhpY2xlIFN1cHBsaWVzIGFuZCBOZXcgUGFydHMgV2hvbGVzYWxlcnMjNDIxMQotbmFpY3MjNDIxMTMjVGlyZSBhbmQgVHViZSBXaG9sZXNhbGVycyM0MjExCi1uYWljcyM0MjExNCNNb3RvciBWZWhpY2xlIFBhcnRzIChVc2VkKSBXaG9sZXNhbGVycyM0MjExCi1uYWljcyM0MjEyI0Z1cm5pdHVyZSBhbmQgSG9tZSBGdXJuaXNoaW5nIFdob2xlc2FsZXJzIzQyMQotbmFpY3MjNDIxMjEjRnVybml0dXJlIFdob2xlc2FsZXJzIzQyMTIKLW5haWNzIzQyMTIyI0hvbWUgRnVybmlzaGluZyBXaG9sZXNhbGVycyM0MjEyCi1uYWljcyM0MjEzI0x1bWJlciBhbmQgT3RoZXIgQ29uc3RydWN0aW9uIE1hdGVyaWFscyBXaG9sZXNhbGVycyM0MjEKLW5haWNzIzQyMTMxI0x1bWJlciwgUGx5d29vZCwgTWlsbHdvcmssIGFuZCBXb29kIFBhbmVsIFdob2xlc2FsZXJzIzQyMTMKLW5haWNzIzQyMTMyI0JyaWNrLCBTdG9uZSwgYW5kIFJlbGF0ZWQgQ29uc3RydWN0aW9uIE1hdGVyaWFsIFdob2xlc2FsZXJzIzQyMTMKLW5haWNzIzQyMTMzI1Jvb2ZpbmcsIFNpZGluZywgYW5kIEluc3VsYXRpb24gTWF0ZXJpYWwgV2hvbGVzYWxlcnMjNDIxMwotbmFpY3MjNDIxMzkjT3RoZXIgQ29uc3RydWN0aW9uIE1hdGVyaWFsIFdob2xlc2FsZXJzIzQyMTMKLW5haWNzIzQyMTQjUHJvZmVzc2lvbmFsIGFuZCBDb21tZXJjaWFsIEVxdWlwbWVudCBhbmQgU3VwcGxpZXMgV2hvbGVzYWxlcnMjNDIxCi1uYWljcyM0MjE0MSNQaG90b2dyYXBoaWMgRXF1aXBtZW50IGFuZCBTdXBwbGllcyBXaG9sZXNhbGVycyM0MjE0Ci1uYWljcyM0MjE0MiNPZmZpY2UgRXF1aXBtZW50IFdob2xlc2FsZXJzIzQyMTQKLW5haWNzIzQyMTQzI0NvbXB1dGVyIGFuZCBDb21wdXRlciBQZXJpcGhlcmFsIEVxdWlwbWVudCBhbmQgU29mdHdhcmUgV2hvbGVzYWxlcnMjNDIxNAotbmFpY3MjNDIxNDQjT3RoZXIgQ29tbWVyY2lhbCBFcXVpcG1lbnQgV2hvbGVzYWxlcnMjNDIxNAotbmFpY3MjNDIxNDUjTWVkaWNhbCwgRGVudGFsLCBhbmQgSG9zcGl0YWwgRXF1aXBtZW50IGFuZCBTdXBwbGllcyBXaG9sZXNhbGVycyM0MjE0Ci1uYWljcyM0MjE0NiNPcGh0aGFsbWljIEdvb2RzIFdob2xlc2FsZXJzIzQyMTQKLW5haWNzIzQyMTQ5I090aGVyIFByb2Zlc3Npb25hbCBFcXVpcG1lbnQgYW5kIFN1cHBsaWVzIFdob2xlc2FsZXJzIzQyMTQKLW5haWNzIzQyMTUjTWV0YWwgYW5kIE1pbmVyYWwgKGV4Y2VwdCBQZXRyb2xldW0pIFdob2xlc2FsZXJzIzQyMQotbmFpY3MjNDIxNTEjTWV0YWwgU2VydmljZSBDZW50ZXJzIGFuZCBPZmZpY2VzIzQyMTUKLW5haWNzIzQyMTUyI0NvYWwgYW5kIE90aGVyIE1pbmVyYWwgYW5kIE9yZSBXaG9sZXNhbGVycyM0MjE1Ci1uYWljcyM0MjE2I0VsZWN0cmljYWwgR29vZHMgV2hvbGVzYWxlcnMjNDIxCi1uYWljcyM0MjE2MSNFbGVjdHJpY2FsIEFwcGFyYXR1cyBhbmQgRXF1aXBtZW50LCBXaXJpbmcgU3VwcGxpZXMsIGFuZCBDb25zdHJ1Y3Rpb24gTWF0ZXJpYWwgV2hvbGVzYWxlcnMjNDIxNgotbmFpY3MjNDIxNjIjRWxlY3RyaWNhbCBBcHBsaWFuY2UsIFRlbGV2aXNpb24sIGFuZCBSYWRpbyBTZXQgV2hvbGVzYWxlcnMjNDIxNgotbmFpY3MjNDIxNjkjT3RoZXIgRWxlY3Ryb25pYyBQYXJ0cyBhbmQgRXF1aXBtZW50IFdob2xlc2FsZXJzIzQyMTYKLW5haWNzIzQyMTcjSGFyZHdhcmUsIGFuZCBQbHVtYmluZyBhbmQgSGVhdGluZyBFcXVpcG1lbnQgYW5kIFN1cHBsaWVzIFdob2xlc2FsZXJzIzQyMQotbmFpY3MjNDIxNzEjSGFyZHdhcmUgV2hvbGVzYWxlcnMjNDIxNwotbmFpY3MjNDIxNzIjUGx1bWJpbmcgYW5kIEhlYXRpbmcgRXF1aXBtZW50IGFuZCBTdXBwbGllcyAoSHlkcm9uaWNzKSBXaG9sZXNhbGVycyM0MjE3Ci1uYWljcyM0MjE3MyNXYXJtIEFpciBIZWF0aW5nIGFuZCBBaXItQ29uZGl0aW9uaW5nIEVxdWlwbWVudCBhbmQgU3VwcGxpZXMgV2hvbGVzYWxlcnMjNDIxNwotbmFpY3MjNDIxNzQjUmVmcmlnZXJhdGlvbiBFcXVpcG1lbnQgYW5kIFN1cHBsaWVzIFdob2xlc2FsZXJzIzQyMTcKLW5haWNzIzQyMTgjTWFjaGluZXJ5LCBFcXVpcG1lbnQsIGFuZCBTdXBwbGllcyBXaG9sZXNhbGVycyM0MjEKLW5haWNzIzQyMTgxI0NvbnN0cnVjdGlvbiBhbmQgTWluaW5nIChleGNlcHQgT2lsIFdlbGwpIE1hY2hpbmVyeSBhbmQgRXF1aXBtZW50IFdob2xlc2FsZXJzIzQyMTgKLW5haWNzIzQyMTgyI0Zhcm0gYW5kIEdhcmRlbiBNYWNoaW5lcnkgYW5kIEVxdWlwbWVudCBXaG9sZXNhbGVycyM0MjE4Ci1uYWljcyM0MjE4MyNJbmR1c3RyaWFsIE1hY2hpbmVyeSBhbmQgRXF1aXBtZW50IFdob2xlc2FsZXJzIzQyMTgKLW5haWNzIzQyMTg0I0luZHVzdHJpYWwgU3VwcGxpZXMgV2hvbGVzYWxlcnMjNDIxOAotbmFpY3MjNDIxODUjU2VydmljZSBFc3RhYmxpc2htZW50IEVxdWlwbWVudCBhbmQgU3VwcGxpZXMgV2hvbGVzYWxlcnMjNDIxOAotbmFpY3MjNDIxODYjVHJhbnNwb3J0YXRpb24gRXF1aXBtZW50IGFuZCBTdXBwbGllcyAoZXhjZXB0IE1vdG9yIFZlaGljbGUpIFdob2xlc2FsZXJzIzQyMTgKLW5haWNzIzQyMTkjTWlzY2VsbGFuZW91cyBEdXJhYmxlIEdvb2RzIFdob2xlc2FsZXJzIzQyMQotbmFpY3MjNDIxOTEjU3BvcnRpbmcgYW5kIFJlY3JlYXRpb25hbCBHb29kcyBhbmQgU3VwcGxpZXMgV2hvbGVzYWxlcnMjNDIxOQotbmFpY3MjNDIxOTIjVG95IGFuZCBIb2JieSBHb29kcyBhbmQgU3VwcGxpZXMgV2hvbGVzYWxlcnMjNDIxOQotbmFpY3MjNDIxOTMjUmVjeWNsYWJsZSBNYXRlcmlhbCBXaG9sZXNhbGVycyM0MjE5Ci1uYWljcyM0MjE5NCNKZXdlbHJ5LCBXYXRjaCwgUHJlY2lvdXMgU3RvbmUsIGFuZCBQcmVjaW91cyBNZXRhbCBXaG9sZXNhbGVycyM0MjE5Ci1uYWljcyM0MjE5OSNPdGhlciBNaXNjZWxsYW5lb3VzIER1cmFibGUgR29vZHMgV2hvbGVzYWxlcnMjNDIxOQotbmFpY3MjNDIyI1dob2xlc2FsZSBUcmFkZSwgTm9uZHVyYWJsZSBHb29kcyM0MgotbmFpY3MjNDIyMSNQYXBlciBhbmQgUGFwZXIgUHJvZHVjdCBXaG9sZXNhbGVycyM0MjIKLW5haWNzIzQyMjExI1ByaW50aW5nIGFuZCBXcml0aW5nIFBhcGVyIFdob2xlc2FsZXJzIzQyMjEKLW5haWNzIzQyMjEyI1N0YXRpb25lcnkgYW5kIE9mZmljZSBTdXBwbGllcyBXaG9sZXNhbGVycyM0MjIxCi1uYWljcyM0MjIxMyNJbmR1c3RyaWFsIGFuZCBQZXJzb25hbCBTZXJ2aWNlIFBhcGVyIFdob2xlc2FsZXJzIzQyMjEKLW5haWNzIzQyMjIjRHJ1Z3MgYW5kIERydWdnaXN0cycgU3VuZHJpZXMgV2hvbGVzYWxlcnMjNDIyCi1uYWljcyM0MjIyMSNEcnVncyBhbmQgRHJ1Z2dpc3RzJyBTdW5kcmllcyBXaG9sZXNhbGVycyM0MjIyCi1uYWljcyM0MjIzI0FwcGFyZWwsIFBpZWNlIEdvb2RzLCBhbmQgTm90aW9ucyBXaG9sZXNhbGVycyM0MjIKLW5haWNzIzQyMjMxI1BpZWNlIEdvb2RzLCBOb3Rpb25zLCBhbmQgT3RoZXIgRHJ5IEdvb2RzIFdob2xlc2FsZXJzIzQyMjMKLW5haWNzIzQyMjMyI01lbidzIGFuZCBCb3lzJyBDbG90aGluZyBhbmQgRnVybmlzaGluZ3MgV2hvbGVzYWxlcnMjNDIyMwotbmFpY3MjNDIyMzMjV29tZW4ncywgQ2hpbGRyZW4ncywgYW5kIEluZmFudHMnIENsb3RoaW5nIGFuZCBBY2Nlc3NvcmllcyBXaG9sZXNhbGVycyM0MjIzCi1uYWljcyM0MjIzNCNGb290d2VhciBXaG9sZXNhbGVycyM0MjIzCi1uYWljcyM0MjI0I0dyb2NlcnkgYW5kIFJlbGF0ZWQgUHJvZHVjdCBXaG9sZXNhbGVycyM0MjIKLW5haWNzIzQyMjQxI0dlbmVyYWwgTGluZSBHcm9jZXJ5IFdob2xlc2FsZXJzIzQyMjQKLW5haWNzIzQyMjQyI1BhY2thZ2VkIEZyb3plbiBGb29kIFdob2xlc2FsZXJzIzQyMjQKLW5haWNzIzQyMjQzI0RhaXJ5IFByb2R1Y3QgKGV4Y2VwdCBEcmllZCBvciBDYW5uZWQpIFdob2xlc2FsZXJzIzQyMjQKLW5haWNzIzQyMjQ0I1BvdWx0cnkgYW5kIFBvdWx0cnkgUHJvZHVjdCBXaG9sZXNhbGVycyM0MjI0Ci1uYWljcyM0MjI0NSNDb25mZWN0aW9uZXJ5IFdob2xlc2FsZXJzIzQyMjQKLW5haWNzIzQyMjQ2I0Zpc2ggYW5kIFNlYWZvb2QgV2hvbGVzYWxlcnMjNDIyNAotbmFpY3MjNDIyNDcjTWVhdCBhbmQgTWVhdCBQcm9kdWN0IFdob2xlc2FsZXJzIzQyMjQKLW5haWNzIzQyMjQ4I0ZyZXNoIEZydWl0IGFuZCBWZWdldGFibGUgV2hvbGVzYWxlcnMjNDIyNAotbmFpY3MjNDIyNDkjT3RoZXIgR3JvY2VyeSBhbmQgUmVsYXRlZCBQcm9kdWN0cyBXaG9sZXNhbGVycyM0MjI0Ci1uYWljcyM0MjI1I0Zhcm0gUHJvZHVjdCBSYXcgTWF0ZXJpYWwgV2hvbGVzYWxlcnMjNDIyCi1uYWljcyM0MjI1MSNHcmFpbiBhbmQgRmllbGQgQmVhbiBXaG9sZXNhbGVycyM0MjI1Ci1uYWljcyM0MjI1MiNMaXZlc3RvY2sgV2hvbGVzYWxlcnMjNDIyNQotbmFpY3MjNDIyNTkjT3RoZXIgRmFybSBQcm9kdWN0IFJhdyBNYXRlcmlhbCBXaG9sZXNhbGVycyM0MjI1Ci1uYWljcyM0MjI2I0NoZW1pY2FsIGFuZCBBbGxpZWQgUHJvZHVjdHMgV2hvbGVzYWxlcnMjNDIyCi1uYWljcyM0MjI2MSNQbGFzdGljcyBNYXRlcmlhbHMgYW5kIEJhc2ljIEZvcm1zIGFuZCBTaGFwZXMgV2hvbGVzYWxlcnMjNDIyNgotbmFpY3MjNDIyNjkjT3RoZXIgQ2hlbWljYWwgYW5kIEFsbGllZCBQcm9kdWN0cyBXaG9sZXNhbGVycyM0MjI2Ci1uYWljcyM0MjI3I1BldHJvbGV1bSBhbmQgUGV0cm9sZXVtIFByb2R1Y3RzIFdob2xlc2FsZXJzIzQyMgotbmFpY3MjNDIyNzEjUGV0cm9sZXVtIEJ1bGsgU3RhdGlvbnMgYW5kIFRlcm1pbmFscyM0MjI3Ci1uYWljcyM0MjI3MiNQZXRyb2xldW0gYW5kIFBldHJvbGV1bSBQcm9kdWN0cyBXaG9sZXNhbGVycyAoZXhjZXB0IEJ1bGsgU3RhdGlvbnMgYW5kIFRlcm1pbmFscykjNDIyNwotbmFpY3MjNDIyOCNCZWVyLCBXaW5lLCBhbmQgRGlzdGlsbGVkIEFsY29ob2xpYyBCZXZlcmFnZSBXaG9sZXNhbGVycyM0MjIKLW5haWNzIzQyMjgxI0JlZXIgYW5kIEFsZSBXaG9sZXNhbGVycyM0MjI4Ci1uYWljcyM0MjI4MiNXaW5lIGFuZCBEaXN0aWxsZWQgQWxjb2hvbGljIEJldmVyYWdlIFdob2xlc2FsZXJzIzQyMjgKLW5haWNzIzQyMjkjTWlzY2VsbGFuZW91cyBOb25kdXJhYmxlIEdvb2RzIFdob2xlc2FsZXJzIzQyMgotbmFpY3MjNDIyOTEjRmFybSBTdXBwbGllcyBXaG9sZXNhbGVycyM0MjI5Ci1uYWljcyM0MjI5MiNCb29rLCBQZXJpb2RpY2FsLCBhbmQgTmV3c3BhcGVyIFdob2xlc2FsZXJzIzQyMjkKLW5haWNzIzQyMjkzI0Zsb3dlciwgTnVyc2VyeSBTdG9jaywgYW5kIEZsb3Jpc3RzJyBTdXBwbGllcyBXaG9sZXNhbGVycyM0MjI5Ci1uYWljcyM0MjI5NCNUb2JhY2NvIGFuZCBUb2JhY2NvIFByb2R1Y3QgV2hvbGVzYWxlcnMjNDIyOQotbmFpY3MjNDIyOTUjUGFpbnQsIFZhcm5pc2gsIGFuZCBTdXBwbGllcyBXaG9sZXNhbGVycyM0MjI5Ci1uYWljcyM0MjI5OSNPdGhlciBNaXNjZWxsYW5lb3VzIE5vbmR1cmFibGUgR29vZHMgV2hvbGVzYWxlcnMjNDIyOQotbmFpY3MjNDQjUmV0YWlsIFRyYWRlIzQ0Ci1uYWljcyM0NDEjTW90b3IgVmVoaWNsZSBhbmQgUGFydHMgRGVhbGVycyM0NAotbmFpY3MjNDQxMSNBdXRvbW9iaWxlIERlYWxlcnMjNDQxCi1uYWljcyM0NDExMSNOZXcgQ2FyIERlYWxlcnMjNDQxMQotbmFpY3MjNDQxMTIjVXNlZCBDYXIgRGVhbGVycyM0NDExCi1uYWljcyM0NDEyI090aGVyIE1vdG9yIFZlaGljbGUgRGVhbGVycyM0NDEKLW5haWNzIzQ0MTIxI1JlY3JlYXRpb25hbCBWZWhpY2xlIERlYWxlcnMjNDQxMgotbmFpY3MjNDQxMjIjTW90b3JjeWNsZSwgQm9hdCwgYW5kIE90aGVyIE1vdG9yIFZlaGljbGUgRGVhbGVycyM0NDEyCi1uYWljcyM0NDEyMjEjTW90b3JjeWNsZSBEZWFsZXJzIzQ0MTIyCi1uYWljcyM0NDEyMjIjQm9hdCBEZWFsZXJzIzQ0MTIyCi1uYWljcyM0NDEyMjkjQWxsIE90aGVyIE1vdG9yIFZlaGljbGUgRGVhbGVycyM0NDEyMgotbmFpY3MjNDQxMyNBdXRvbW90aXZlIFBhcnRzLCBBY2Nlc3NvcmllcywgYW5kIFRpcmUgU3RvcmVzIzQ0MQotbmFpY3MjNDQxMzEjQXV0b21vdGl2ZSBQYXJ0cyBhbmQgQWNjZXNzb3JpZXMgU3RvcmVzIzQ0MTMKLW5haWNzIzQ0MTMyI1RpcmUgRGVhbGVycyM0NDEzCi1uYWljcyM0NDIjRnVybml0dXJlIGFuZCBIb21lIEZ1cm5pc2hpbmdzIFN0b3JlcyM0NAotbmFpY3MjNDQyMSNGdXJuaXR1cmUgU3RvcmVzIzQ0MgotbmFpY3MjNDQyMTEjRnVybml0dXJlIFN0b3JlcyM0NDIxCi1uYWljcyM0NDIyI0hvbWUgRnVybmlzaGluZ3MgU3RvcmVzIzQ0MgotbmFpY3MjNDQyMjEjRmxvb3IgQ292ZXJpbmcgU3RvcmVzIzQ0MjIKLW5haWNzIzQ0MjI5I090aGVyIEhvbWUgRnVybmlzaGluZ3MgU3RvcmVzIzQ0MjIKLW5haWNzIzQ0MjI5MSNXaW5kb3cgVHJlYXRtZW50IFN0b3JlcyM0NDIyOQotbmFpY3MjNDQyMjk5I0FsbCBPdGhlciBIb21lIEZ1cm5pc2hpbmdzIFN0b3JlcyM0NDIyOQotbmFpY3MjNDQzI0VsZWN0cm9uaWNzIGFuZCBBcHBsaWFuY2UgU3RvcmVzIzQ0Ci1uYWljcyM0NDMxI0VsZWN0cm9uaWNzIGFuZCBBcHBsaWFuY2UgU3RvcmVzIzQ0MwotbmFpY3MjNDQzMTEjQXBwbGlhbmNlLCBUZWxldmlzaW9uLCBhbmQgT3RoZXIgRWxlY3Ryb25pY3MgU3RvcmVzIzQ0MzEKLW5haWNzIzQ0MzExMSNIb3VzZWhvbGQgQXBwbGlhbmNlIFN0b3JlcyM0NDMxMQotbmFpY3MjNDQzMTEyI1JhZGlvLCBUZWxldmlzaW9uLCBhbmQgT3RoZXIgRWxlY3Ryb25pY3MgU3RvcmVzIzQ0MzExCi1uYWljcyM0NDMxMiNDb21wdXRlciBhbmQgU29mdHdhcmUgU3RvcmVzIzQ0MzEKLW5haWNzIzQ0MzEzI0NhbWVyYSBhbmQgUGhvdG9ncmFwaGljIFN1cHBsaWVzIFN0b3JlcyM0NDMxCi1uYWljcyM0NDQjQnVpbGRpbmcgTWF0ZXJpYWwgYW5kIEdhcmRlbiBFcXVpcG1lbnQgYW5kIFN1cHBsaWVzIERlYWxlcnMjNDQKLW5haWNzIzQ0NDEjQnVpbGRpbmcgTWF0ZXJpYWwgYW5kIFN1cHBsaWVzIERlYWxlcnMjNDQ0Ci1uYWljcyM0NDQxMSNIb21lIENlbnRlcnMjNDQ0MQotbmFpY3MjNDQ0MTIjUGFpbnQgYW5kIFdhbGxwYXBlciBTdG9yZXMjNDQ0MQotbmFpY3MjNDQ0MTMjSGFyZHdhcmUgU3RvcmVzIzQ0NDEKLW5haWNzIzQ0NDE5I090aGVyIEJ1aWxkaW5nIE1hdGVyaWFsIERlYWxlcnMjNDQ0MQotbmFpY3MjNDQ0MiNMYXduIGFuZCBHYXJkZW4gRXF1aXBtZW50IGFuZCBTdXBwbGllcyBTdG9yZXMjNDQ0Ci1uYWljcyM0NDQyMSNPdXRkb29yIFBvd2VyIEVxdWlwbWVudCBTdG9yZXMjNDQ0MgotbmFpY3MjNDQ0MjIjTnVyc2VyeSBhbmQgR2FyZGVuIENlbnRlcnMjNDQ0MgotbmFpY3MjNDQ1I0Zvb2QgYW5kIEJldmVyYWdlIFN0b3JlcyM0NAotbmFpY3MjNDQ1MSNHcm9jZXJ5IFN0b3JlcyM0NDUKLW5haWNzIzQ0NTExI1N1cGVybWFya2V0cyBhbmQgT3RoZXIgR3JvY2VyeSAoZXhjZXB0IENvbnZlbmllbmNlKSBTdG9yZXMjNDQ1MQotbmFpY3MjNDQ1MTIjQ29udmVuaWVuY2UgU3RvcmVzIzQ0NTEKLW5haWNzIzQ0NTIjU3BlY2lhbHR5IEZvb2QgU3RvcmVzIzQ0NQotbmFpY3MjNDQ1MjEjTWVhdCBNYXJrZXRzIzQ0NTIKLW5haWNzIzQ0NTIyI0Zpc2ggYW5kIFNlYWZvb2QgTWFya2V0cyM0NDUyCi1uYWljcyM0NDUyMyNGcnVpdCBhbmQgVmVnZXRhYmxlIE1hcmtldHMjNDQ1MgotbmFpY3MjNDQ1MjkjT3RoZXIgU3BlY2lhbHR5IEZvb2QgU3RvcmVzIzQ0NTIKLW5haWNzIzQ0NTI5MSNCYWtlZCBHb29kcyBTdG9yZXMjNDQ1MjkKLW5haWNzIzQ0NTI5MiNDb25mZWN0aW9uZXJ5IGFuZCBOdXQgU3RvcmVzIzQ0NTI5Ci1uYWljcyM0NDUyOTkjQWxsIE90aGVyIFNwZWNpYWx0eSBGb29kIFN0b3JlcyM0NDUyOQotbmFpY3MjNDQ1MyNCZWVyLCBXaW5lLCBhbmQgTGlxdW9yIFN0b3JlcyM0NDUKLW5haWNzIzQ0NTMxI0JlZXIsIFdpbmUsIGFuZCBMaXF1b3IgU3RvcmVzIzQ0NTMKLW5haWNzIzQ0NiNIZWFsdGggYW5kIFBlcnNvbmFsIENhcmUgU3RvcmVzIzQ0Ci1uYWljcyM0NDYxI0hlYWx0aCBhbmQgUGVyc29uYWwgQ2FyZSBTdG9yZXMjNDQ2Ci1uYWljcyM0NDYxMSNQaGFybWFjaWVzIGFuZCBEcnVnIFN0b3JlcyM0NDYxCi1uYWljcyM0NDYxMiNDb3NtZXRpY3MsIEJlYXV0eSBTdXBwbGllcywgYW5kIFBlcmZ1bWUgU3RvcmVzIzQ0NjEKLW5haWNzIzQ0NjEzI09wdGljYWwgR29vZHMgU3RvcmVzIzQ0NjEKLW5haWNzIzQ0NjE5I090aGVyIEhlYWx0aCBhbmQgUGVyc29uYWwgQ2FyZSBTdG9yZXMjNDQ2MQotbmFpY3MjNDQ2MTkxI0Zvb2QgKEhlYWx0aCkgU3VwcGxlbWVudCBTdG9yZXMjNDQ2MTkKLW5haWNzIzQ0NjE5OSNBbGwgT3RoZXIgSGVhbHRoIGFuZCBQZXJzb25hbCBDYXJlIFN0b3JlcyM0NDYxOQotbmFpY3MjNDQ3I0dhc29saW5lIFN0YXRpb25zIzQ0Ci1uYWljcyM0NDcxI0dhc29saW5lIFN0YXRpb25zIzQ0NwotbmFpY3MjNDQ3MTEjR2Fzb2xpbmUgU3RhdGlvbnMgd2l0aCBDb252ZW5pZW5jZSBTdG9yZXMjNDQ3MQotbmFpY3MjNDQ3MTkjT3RoZXIgR2Fzb2xpbmUgU3RhdGlvbnMjNDQ3MQotbmFpY3MjNDQ4I0Nsb3RoaW5nIGFuZCBDbG90aGluZyBBY2Nlc3NvcmllcyBTdG9yZXMjNDQKLW5haWNzIzQ0ODEjQ2xvdGhpbmcgU3RvcmVzIzQ0OAotbmFpY3MjNDQ4MTEjTWVuJ3MgQ2xvdGhpbmcgU3RvcmVzIzQ0ODEKLW5haWNzIzQ0ODEyI1dvbWVuJ3MgQ2xvdGhpbmcgU3RvcmVzIzQ0ODEKLW5haWNzIzQ0ODEzI0NoaWxkcmVuJ3MgYW5kIEluZmFudHMnIENsb3RoaW5nIFN0b3JlcyM0NDgxCi1uYWljcyM0NDgxNCNGYW1pbHkgQ2xvdGhpbmcgU3RvcmVzIzQ0ODEKLW5haWNzIzQ0ODE1I0Nsb3RoaW5nIEFjY2Vzc29yaWVzIFN0b3JlcyM0NDgxCi1uYWljcyM0NDgxOSNPdGhlciBDbG90aGluZyBTdG9yZXMjNDQ4MQotbmFpY3MjNDQ4MiNTaG9lIFN0b3JlcyM0NDgKLW5haWNzIzQ0ODIxI1Nob2UgU3RvcmVzIzQ0ODIKLW5haWNzIzQ0ODMjSmV3ZWxyeSwgTHVnZ2FnZSwgYW5kIExlYXRoZXIgR29vZHMgU3RvcmVzIzQ0OAotbmFpY3MjNDQ4MzEjSmV3ZWxyeSBTdG9yZXMjNDQ4MwotbmFpY3MjNDQ4MzIjTHVnZ2FnZSBhbmQgTGVhdGhlciBHb29kcyBTdG9yZXMjNDQ4MwotbmFpY3MjNDUjUmV0YWlsIFRyYWRlIzQ1Ci1uYWljcyM0NTEjU3BvcnRpbmcgR29vZHMsIEhvYmJ5LCBCb29rLCBhbmQgTXVzaWMgU3RvcmVzIzQ1Ci1uYWljcyM0NTExI1Nwb3J0aW5nIEdvb2RzLCBIb2JieSwgYW5kIE11c2ljYWwgSW5zdHJ1bWVudCBTdG9yZXMjNDUxCi1uYWljcyM0NTExMSNTcG9ydGluZyBHb29kcyBTdG9yZXMjNDUxMQotbmFpY3MjNDUxMTIjSG9iYnksIFRveSwgYW5kIEdhbWUgU3RvcmVzIzQ1MTEKLW5haWNzIzQ1MTEzI1Nld2luZywgTmVlZGxld29yaywgYW5kIFBpZWNlIEdvb2RzIFN0b3JlcyM0NTExCi1uYWljcyM0NTExNCNNdXNpY2FsIEluc3RydW1lbnQgYW5kIFN1cHBsaWVzIFN0b3JlcyM0NTExCi1uYWljcyM0NTEyI0Jvb2ssIFBlcmlvZGljYWwsIGFuZCBNdXNpYyBTdG9yZXMjNDUxCi1uYWljcyM0NTEyMSNCb29rIFN0b3JlcyBhbmQgTmV3cyBEZWFsZXJzIzQ1MTIKLW5haWNzIzQ1MTIxMSNCb29rIFN0b3JlcyM0NTEyMQotbmFpY3MjNDUxMjEyI05ld3MgRGVhbGVycyBhbmQgTmV3c3N0YW5kcyM0NTEyMQotbmFpY3MjNDUxMjIjUHJlcmVjb3JkZWQgVGFwZSwgQ29tcGFjdCBEaXNjLCBhbmQgUmVjb3JkIFN0b3JlcyM0NTEyCi1uYWljcyM0NTIjR2VuZXJhbCBNZXJjaGFuZGlzZSBTdG9yZXMjNDUKLW5haWNzIzQ1MjEjRGVwYXJ0bWVudCBTdG9yZXMjNDUyCi1uYWljcyM0NTIxMSNEZXBhcnRtZW50IFN0b3JlcyM0NTIxCi1uYWljcyM0NTI5I090aGVyIEdlbmVyYWwgTWVyY2hhbmRpc2UgU3RvcmVzIzQ1MgotbmFpY3MjNDUyOTEjV2FyZWhvdXNlIENsdWJzIGFuZCBTdXBlcnN0b3JlcyM0NTI5Ci1uYWljcyM0NTI5OSNBbGwgT3RoZXIgR2VuZXJhbCBNZXJjaGFuZGlzZSBTdG9yZXMjNDUyOQotbmFpY3MjNDUzI01pc2NlbGxhbmVvdXMgU3RvcmUgUmV0YWlsZXJzIzQ1Ci1uYWljcyM0NTMxI0Zsb3Jpc3RzIzQ1MwotbmFpY3MjNDUzMTEjRmxvcmlzdHMjNDUzMQotbmFpY3MjNDUzMiNPZmZpY2UgU3VwcGxpZXMsIFN0YXRpb25lcnksIGFuZCBHaWZ0IFN0b3JlcyM0NTMKLW5haWNzIzQ1MzIxI09mZmljZSBTdXBwbGllcyBhbmQgU3RhdGlvbmVyeSBTdG9yZXMjNDUzMgotbmFpY3MjNDUzMjIjR2lmdCwgTm92ZWx0eSwgYW5kIFNvdXZlbmlyIFN0b3JlcyM0NTMyCi1uYWljcyM0NTMzI1VzZWQgTWVyY2hhbmRpc2UgU3RvcmVzIzQ1MwotbmFpY3MjNDUzMzEjVXNlZCBNZXJjaGFuZGlzZSBTdG9yZXMjNDUzMwotbmFpY3MjNDUzOSNPdGhlciBNaXNjZWxsYW5lb3VzIFN0b3JlIFJldGFpbGVycyM0NTMKLW5haWNzIzQ1MzkxI1BldCBhbmQgUGV0IFN1cHBsaWVzIFN0b3JlcyM0NTM5Ci1uYWljcyM0NTM5MiNBcnQgRGVhbGVycyM0NTM5Ci1uYWljcyM0NTM5MyNNYW51ZmFjdHVyZWQgKE1vYmlsZSkgSG9tZSBEZWFsZXJzIzQ1MzkKLW5haWNzIzQ1Mzk5I0FsbCBPdGhlciBNaXNjZWxsYW5lb3VzIFN0b3JlIFJldGFpbGVycyM0NTM5Ci1uYWljcyM0NTM5OTEjVG9iYWNjbyBTdG9yZXMjNDUzOTkKLW5haWNzIzQ1Mzk5OCNBbGwgT3RoZXIgTWlzY2VsbGFuZW91cyBTdG9yZSBSZXRhaWxlcnMgKGV4Y2VwdCBUb2JhY2NvIFN0b3JlcykjNDUzOTkKLW5haWNzIzQ1NCNOb25zdG9yZSBSZXRhaWxlcnMjNDUKLW5haWNzIzQ1NDEjRWxlY3Ryb25pYyBTaG9wcGluZyBhbmQgTWFpbC1PcmRlciBIb3VzZXMjNDU0Ci1uYWljcyM0NTQxMSNFbGVjdHJvbmljIFNob3BwaW5nIGFuZCBNYWlsLU9yZGVyIEhvdXNlcyM0NTQxCi1uYWljcyM0NTQyI1ZlbmRpbmcgTWFjaGluZSBPcGVyYXRvcnMjNDU0Ci1uYWljcyM0NTQyMSNWZW5kaW5nIE1hY2hpbmUgT3BlcmF0b3JzIzQ1NDIKLW5haWNzIzQ1NDMjRGlyZWN0IFNlbGxpbmcgRXN0YWJsaXNobWVudHMjNDU0Ci1uYWljcyM0NTQzMSNGdWVsIERlYWxlcnMjNDU0MwotbmFpY3MjNDU0MzExI0hlYXRpbmcgT2lsIERlYWxlcnMjNDU0MzEKLW5haWNzIzQ1NDMxMiNMaXF1ZWZpZWQgUGV0cm9sZXVtIEdhcyAoQm90dGxlZCBHYXMpIERlYWxlcnMjNDU0MzEKLW5haWNzIzQ1NDMxOSNPdGhlciBGdWVsIERlYWxlcnMjNDU0MzEKLW5haWNzIzQ1NDM5I090aGVyIERpcmVjdCBTZWxsaW5nIEVzdGFibGlzaG1lbnRzIzQ1NDMKLW5haWNzIzQ4I1RyYW5zcG9ydGF0aW9uIGFuZCBXYXJlaG91c2luZyM0OAotbmFpY3MjNDgxI0FpciBUcmFuc3BvcnRhdGlvbiM0OAotbmFpY3MjNDgxMSNTY2hlZHVsZWQgQWlyIFRyYW5zcG9ydGF0aW9uIzQ4MQotbmFpY3MjNDgxMTEjU2NoZWR1bGVkIEFpciBUcmFuc3BvcnRhdGlvbiM0ODExCi1uYWljcyM0ODExMTEjU2NoZWR1bGVkIFBhc3NlbmdlciBBaXIgVHJhbnNwb3J0YXRpb24jNDgxMTEKLW5haWNzIzQ4MTExMiNTY2hlZHVsZWQgRnJlaWdodCBBaXIgVHJhbnNwb3J0YXRpb24jNDgxMTEKLW5haWNzIzQ4MTIjTm9uc2NoZWR1bGVkIEFpciBUcmFuc3BvcnRhdGlvbiM0ODEKLW5haWNzIzQ4MTIxI05vbnNjaGVkdWxlZCBBaXIgVHJhbnNwb3J0YXRpb24jNDgxMgotbmFpY3MjNDgxMjExI05vbnNjaGVkdWxlZCBDaGFydGVyZWQgUGFzc2VuZ2VyIEFpciBUcmFuc3BvcnRhdGlvbiM0ODEyMQotbmFpY3MjNDgxMjEyI05vbnNjaGVkdWxlZCBDaGFydGVyZWQgRnJlaWdodCBBaXIgVHJhbnNwb3J0YXRpb24jNDgxMjEKLW5haWNzIzQ4MTIxOSNPdGhlciBOb25zY2hlZHVsZWQgQWlyIFRyYW5zcG9ydGF0aW9uIzQ4MTIxCi1uYWljcyM0ODIjUmFpbCBUcmFuc3BvcnRhdGlvbiM0OAotbmFpY3MjNDgyMSNSYWlsIFRyYW5zcG9ydGF0aW9uIzQ4MgotbmFpY3MjNDgyMTEjUmFpbCBUcmFuc3BvcnRhdGlvbiM0ODIxCi1uYWljcyM0ODIxMTEjTGluZS1IYXVsIFJhaWxyb2FkcyM0ODIxMQotbmFpY3MjNDgyMTEyI1Nob3J0IExpbmUgUmFpbHJvYWRzIzQ4MjExCi1uYWljcyM0ODMjV2F0ZXIgVHJhbnNwb3J0YXRpb24jNDgKLW5haWNzIzQ4MzEjRGVlcCBTZWEsIENvYXN0YWwsIGFuZCBHcmVhdCBMYWtlcyBXYXRlciBUcmFuc3BvcnRhdGlvbiM0ODMKLW5haWNzIzQ4MzExI0RlZXAgU2VhLCBDb2FzdGFsLCBhbmQgR3JlYXQgTGFrZXMgV2F0ZXIgVHJhbnNwb3J0YXRpb24jNDgzMQotbmFpY3MjNDgzMTExI0RlZXAgU2VhIEZyZWlnaHQgVHJhbnNwb3J0YXRpb24jNDgzMTEKLW5haWNzIzQ4MzExMiNEZWVwIFNlYSBQYXNzZW5nZXIgVHJhbnNwb3J0YXRpb24jNDgzMTEKLW5haWNzIzQ4MzExMyNDb2FzdGFsIGFuZCBHcmVhdCBMYWtlcyBGcmVpZ2h0IFRyYW5zcG9ydGF0aW9uIzQ4MzExCi1uYWljcyM0ODMxMTQjQ29hc3RhbCBhbmQgR3JlYXQgTGFrZXMgUGFzc2VuZ2VyIFRyYW5zcG9ydGF0aW9uIzQ4MzExCi1uYWljcyM0ODMyI0lubGFuZCBXYXRlciBUcmFuc3BvcnRhdGlvbiM0ODMKLW5haWNzIzQ4MzIxI0lubGFuZCBXYXRlciBUcmFuc3BvcnRhdGlvbiM0ODMyCi1uYWljcyM0ODMyMTEjSW5sYW5kIFdhdGVyIEZyZWlnaHQgVHJhbnNwb3J0YXRpb24jNDgzMjEKLW5haWNzIzQ4MzIxMiNJbmxhbmQgV2F0ZXIgUGFzc2VuZ2VyIFRyYW5zcG9ydGF0aW9uIzQ4MzIxCi1uYWljcyM0ODQjVHJ1Y2sgVHJhbnNwb3J0YXRpb24jNDgKLW5haWNzIzQ4NDEjR2VuZXJhbCBGcmVpZ2h0IFRydWNraW5nIzQ4NAotbmFpY3MjNDg0MTEjR2VuZXJhbCBGcmVpZ2h0IFRydWNraW5nLCBMb2NhbCM0ODQxCi1uYWljcyM0ODQxMiNHZW5lcmFsIEZyZWlnaHQgVHJ1Y2tpbmcsIExvbmctRGlzdGFuY2UjNDg0MQotbmFpY3MjNDg0MTIxI0dlbmVyYWwgRnJlaWdodCBUcnVja2luZywgTG9uZy1EaXN0YW5jZSwgVHJ1Y2tsb2FkIzQ4NDEyCi1uYWljcyM0ODQxMjIjR2VuZXJhbCBGcmVpZ2h0IFRydWNraW5nLCBMb25nLURpc3RhbmNlLCBMZXNzIFRoYW4gVHJ1Y2tsb2FkIzQ4NDEyCi1uYWljcyM0ODQyI1NwZWNpYWxpemVkIEZyZWlnaHQgVHJ1Y2tpbmcjNDg0Ci1uYWljcyM0ODQyMSNVc2VkIEhvdXNlaG9sZCBhbmQgT2ZmaWNlIEdvb2RzIE1vdmluZyM0ODQyCi1uYWljcyM0ODQyMiNTcGVjaWFsaXplZCBGcmVpZ2h0IChleGNlcHQgVXNlZCBHb29kcykgVHJ1Y2tpbmcsIExvY2FsIzQ4NDIKLW5haWNzIzQ4NDIzI1NwZWNpYWxpemVkIEZyZWlnaHQgKGV4Y2VwdCBVc2VkIEdvb2RzKSBUcnVja2luZywgTG9uZy1EaXN0YW5jZSM0ODQyCi1uYWljcyM0ODUjVHJhbnNpdCBhbmQgR3JvdW5kIFBhc3NlbmdlciBUcmFuc3BvcnRhdGlvbiM0OAotbmFpY3MjNDg1MSNVcmJhbiBUcmFuc2l0IFN5c3RlbXMjNDg1Ci1uYWljcyM0ODUxMSNVcmJhbiBUcmFuc2l0IFN5c3RlbXMjNDg1MQotbmFpY3MjNDg1MTExI01peGVkIE1vZGUgVHJhbnNpdCBTeXN0ZW1zIzQ4NTExCi1uYWljcyM0ODUxMTIjQ29tbXV0ZXIgUmFpbCBTeXN0ZW1zIzQ4NTExCi1uYWljcyM0ODUxMTMjQnVzIGFuZCBPdGhlciBNb3RvciBWZWhpY2xlIFRyYW5zaXQgU3lzdGVtcyM0ODUxMQotbmFpY3MjNDg1MTE5I090aGVyIFVyYmFuIFRyYW5zaXQgU3lzdGVtcyM0ODUxMQotbmFpY3MjNDg1MiNJbnRlcnVyYmFuIGFuZCBSdXJhbCBCdXMgVHJhbnNwb3J0YXRpb24jNDg1Ci1uYWljcyM0ODUyMSNJbnRlcnVyYmFuIGFuZCBSdXJhbCBCdXMgVHJhbnNwb3J0YXRpb24jNDg1MgotbmFpY3MjNDg1MyNUYXhpIGFuZCBMaW1vdXNpbmUgU2VydmljZSM0ODUKLW5haWNzIzQ4NTMxI1RheGkgU2VydmljZSM0ODUzCi1uYWljcyM0ODUzMiNMaW1vdXNpbmUgU2VydmljZSM0ODUzCi1uYWljcyM0ODU0I1NjaG9vbCBhbmQgRW1wbG95ZWUgQnVzIFRyYW5zcG9ydGF0aW9uIzQ4NQotbmFpY3MjNDg1NDEjU2Nob29sIGFuZCBFbXBsb3llZSBCdXMgVHJhbnNwb3J0YXRpb24jNDg1NAotbmFpY3MjNDg1NSNDaGFydGVyIEJ1cyBJbmR1c3RyeSM0ODUKLW5haWNzIzQ4NTUxI0NoYXJ0ZXIgQnVzIEluZHVzdHJ5IzQ4NTUKLW5haWNzIzQ4NTkjT3RoZXIgVHJhbnNpdCBhbmQgR3JvdW5kIFBhc3NlbmdlciBUcmFuc3BvcnRhdGlvbiM0ODUKLW5haWNzIzQ4NTk5I090aGVyIFRyYW5zaXQgYW5kIEdyb3VuZCBQYXNzZW5nZXIgVHJhbnNwb3J0YXRpb24jNDg1OQotbmFpY3MjNDg1OTkxI1NwZWNpYWwgTmVlZHMgVHJhbnNwb3J0YXRpb24jNDg1OTkKLW5haWNzIzQ4NTk5OSNBbGwgT3RoZXIgVHJhbnNpdCBhbmQgR3JvdW5kIFBhc3NlbmdlciBUcmFuc3BvcnRhdGlvbiM0ODU5OQotbmFpY3MjNDg2I1BpcGVsaW5lIFRyYW5zcG9ydGF0aW9uIzQ4Ci1uYWljcyM0ODYxI1BpcGVsaW5lIFRyYW5zcG9ydGF0aW9uIG9mIENydWRlIE9pbCM0ODYKLW5haWNzIzQ4NjExI1BpcGVsaW5lIFRyYW5zcG9ydGF0aW9uIG9mIENydWRlIE9pbCM0ODYxCi1uYWljcyM0ODYyI1BpcGVsaW5lIFRyYW5zcG9ydGF0aW9uIG9mIE5hdHVyYWwgR2FzIzQ4NgotbmFpY3MjNDg2MjEjUGlwZWxpbmUgVHJhbnNwb3J0YXRpb24gb2YgTmF0dXJhbCBHYXMjNDg2MgotbmFpY3MjNDg2OSNPdGhlciBQaXBlbGluZSBUcmFuc3BvcnRhdGlvbiM0ODYKLW5haWNzIzQ4NjkxI1BpcGVsaW5lIFRyYW5zcG9ydGF0aW9uIG9mIFJlZmluZWQgUGV0cm9sZXVtIFByb2R1Y3RzIzQ4NjkKLW5haWNzIzQ4Njk5I0FsbCBPdGhlciBQaXBlbGluZSBUcmFuc3BvcnRhdGlvbiM0ODY5Ci1uYWljcyM0ODcjU2NlbmljIGFuZCBTaWdodHNlZWluZyBUcmFuc3BvcnRhdGlvbiM0OAotbmFpY3MjNDg3MSNTY2VuaWMgYW5kIFNpZ2h0c2VlaW5nIFRyYW5zcG9ydGF0aW9uLCBMYW5kIzQ4NwotbmFpY3MjNDg3MTEjU2NlbmljIGFuZCBTaWdodHNlZWluZyBUcmFuc3BvcnRhdGlvbiwgTGFuZCM0ODcxCi1uYWljcyM0ODcyI1NjZW5pYyBhbmQgU2lnaHRzZWVpbmcgVHJhbnNwb3J0YXRpb24sIFdhdGVyIzQ4NwotbmFpY3MjNDg3MjEjU2NlbmljIGFuZCBTaWdodHNlZWluZyBUcmFuc3BvcnRhdGlvbiwgV2F0ZXIjNDg3MgotbmFpY3MjNDg3OSNTY2VuaWMgYW5kIFNpZ2h0c2VlaW5nIFRyYW5zcG9ydGF0aW9uLCBPdGhlciM0ODcKLW5haWNzIzQ4Nzk5I1NjZW5pYyBhbmQgU2lnaHRzZWVpbmcgVHJhbnNwb3J0YXRpb24sIE90aGVyIzQ4NzkKLW5haWNzIzQ4OCNTdXBwb3J0IEFjdGl2aXRpZXMgZm9yIFRyYW5zcG9ydGF0aW9uIzQ4Ci1uYWljcyM0ODgxI1N1cHBvcnQgQWN0aXZpdGllcyBmb3IgQWlyIFRyYW5zcG9ydGF0aW9uIzQ4OAotbmFpY3MjNDg4MTEjQWlycG9ydCBPcGVyYXRpb25zIzQ4ODEKLW5haWNzIzQ4ODExMSNBaXIgVHJhZmZpYyBDb250cm9sIzQ4ODExCi1uYWljcyM0ODgxMTkjT3RoZXIgQWlycG9ydCBPcGVyYXRpb25zIzQ4ODExCi1uYWljcyM0ODgxOSNPdGhlciBTdXBwb3J0IEFjdGl2aXRpZXMgZm9yIEFpciBUcmFuc3BvcnRhdGlvbiM0ODgxCi1uYWljcyM0ODgyI1N1cHBvcnQgQWN0aXZpdGllcyBmb3IgUmFpbCBUcmFuc3BvcnRhdGlvbiM0ODgKLW5haWNzIzQ4ODIxI1N1cHBvcnQgQWN0aXZpdGllcyBmb3IgUmFpbCBUcmFuc3BvcnRhdGlvbiM0ODgyCi1uYWljcyM0ODgzI1N1cHBvcnQgQWN0aXZpdGllcyBmb3IgV2F0ZXIgVHJhbnNwb3J0YXRpb24jNDg4Ci1uYWljcyM0ODgzMSNQb3J0IGFuZCBIYXJib3IgT3BlcmF0aW9ucyM0ODgzCi1uYWljcyM0ODgzMiNNYXJpbmUgQ2FyZ28gSGFuZGxpbmcjNDg4MwotbmFpY3MjNDg4MzMjTmF2aWdhdGlvbmFsIFNlcnZpY2VzIHRvIFNoaXBwaW5nIzQ4ODMKLW5haWNzIzQ4ODM5I090aGVyIFN1cHBvcnQgQWN0aXZpdGllcyBmb3IgV2F0ZXIgVHJhbnNwb3J0YXRpb24jNDg4MwotbmFpY3MjNDg4NCNTdXBwb3J0IEFjdGl2aXRpZXMgZm9yIFJvYWQgVHJhbnNwb3J0YXRpb24jNDg4Ci1uYWljcyM0ODg0MSNNb3RvciBWZWhpY2xlIFRvd2luZyM0ODg0Ci1uYWljcyM0ODg0OSNPdGhlciBTdXBwb3J0IEFjdGl2aXRpZXMgZm9yIFJvYWQgVHJhbnNwb3J0YXRpb24jNDg4NAotbmFpY3MjNDg4NSNGcmVpZ2h0IFRyYW5zcG9ydGF0aW9uIEFycmFuZ2VtZW50IzQ4OAotbmFpY3MjNDg4NTEjRnJlaWdodCBUcmFuc3BvcnRhdGlvbiBBcnJhbmdlbWVudCM0ODg1Ci1uYWljcyM0ODg5I090aGVyIFN1cHBvcnQgQWN0aXZpdGllcyBmb3IgVHJhbnNwb3J0YXRpb24jNDg4Ci1uYWljcyM0ODg5OSNPdGhlciBTdXBwb3J0IEFjdGl2aXRpZXMgZm9yIFRyYW5zcG9ydGF0aW9uIzQ4ODkKLW5haWNzIzQ4ODk5MSNQYWNraW5nIGFuZCBDcmF0aW5nIzQ4ODk5Ci1uYWljcyM0ODg5OTkjQWxsIE90aGVyIFN1cHBvcnQgQWN0aXZpdGllcyBmb3IgVHJhbnNwb3J0YXRpb24jNDg4OTkKLW5haWNzIzQ5I1RyYW5zcG9ydGF0aW9uIGFuZCBXYXJlaG91c2luZyM0OQotbmFpY3MjNDkxI1Bvc3RhbCBTZXJ2aWNlIzQ5Ci1uYWljcyM0OTExI1Bvc3RhbCBTZXJ2aWNlIzQ5MQotbmFpY3MjNDkxMTEjUG9zdGFsIFNlcnZpY2UjNDkxMQotbmFpY3MjNDkyI0NvdXJpZXJzIGFuZCBNZXNzZW5nZXJzIzQ5Ci1uYWljcyM0OTIxI0NvdXJpZXJzIzQ5MgotbmFpY3MjNDkyMTEjQ291cmllcnMjNDkyMQotbmFpY3MjNDkyMiNMb2NhbCBNZXNzZW5nZXJzIGFuZCBMb2NhbCBEZWxpdmVyeSM0OTIKLW5haWNzIzQ5MjIxI0xvY2FsIE1lc3NlbmdlcnMgYW5kIExvY2FsIERlbGl2ZXJ5IzQ5MjIKLW5haWNzIzQ5MyNXYXJlaG91c2luZyBhbmQgU3RvcmFnZSM0OQotbmFpY3MjNDkzMSNXYXJlaG91c2luZyBhbmQgU3RvcmFnZSM0OTMKLW5haWNzIzQ5MzExI0dlbmVyYWwgV2FyZWhvdXNpbmcgYW5kIFN0b3JhZ2UjNDkzMQotbmFpY3MjNDkzMTIjUmVmcmlnZXJhdGVkIFdhcmVob3VzaW5nIGFuZCBTdG9yYWdlIzQ5MzEKLW5haWNzIzQ5MzEzI0Zhcm0gUHJvZHVjdCBXYXJlaG91c2luZyBhbmQgU3RvcmFnZSM0OTMxCi1uYWljcyM0OTMxOSNPdGhlciBXYXJlaG91c2luZyBhbmQgU3RvcmFnZSM0OTMxCi1uYWljcyM1MSNJbmZvcm1hdGlvbiM1MQotbmFpY3MjNTExI1B1Ymxpc2hpbmcgSW5kdXN0cmllcyM1MQotbmFpY3MjNTExMSNOZXdzcGFwZXIsIFBlcmlvZGljYWwsIEJvb2ssIGFuZCBEYXRhYmFzZSBQdWJsaXNoZXJzIzUxMQotbmFpY3MjNTExMTEjTmV3c3BhcGVyIFB1Ymxpc2hlcnMjNTExMQotbmFpY3MjNTExMTIjUGVyaW9kaWNhbCBQdWJsaXNoZXJzIzUxMTEKLW5haWNzIzUxMTEzI0Jvb2sgUHVibGlzaGVycyM1MTExCi1uYWljcyM1MTExNCNEYXRhYmFzZSBhbmQgRGlyZWN0b3J5IFB1Ymxpc2hlcnMjNTExMQotbmFpY3MjNTExMTkjT3RoZXIgUHVibGlzaGVycyM1MTExCi1uYWljcyM1MTExOTEjR3JlZXRpbmcgQ2FyZCBQdWJsaXNoZXJzIzUxMTE5Ci1uYWljcyM1MTExOTkjQWxsIE90aGVyIFB1Ymxpc2hlcnMjNTExMTkKLW5haWNzIzUxMTIjU29mdHdhcmUgUHVibGlzaGVycyM1MTEKLW5haWNzIzUxMTIxI1NvZnR3YXJlIFB1Ymxpc2hlcnMjNTExMgotbmFpY3MjNTEyI01vdGlvbiBQaWN0dXJlIGFuZCBTb3VuZCBSZWNvcmRpbmcgSW5kdXN0cmllcyM1MQotbmFpY3MjNTEyMSNNb3Rpb24gUGljdHVyZSBhbmQgVmlkZW8gSW5kdXN0cmllcyM1MTIKLW5haWNzIzUxMjExI01vdGlvbiBQaWN0dXJlIGFuZCBWaWRlbyBQcm9kdWN0aW9uIzUxMjEKLW5haWNzIzUxMjEyI01vdGlvbiBQaWN0dXJlIGFuZCBWaWRlbyBEaXN0cmlidXRpb24jNTEyMQotbmFpY3MjNTEyMTMjTW90aW9uIFBpY3R1cmUgYW5kIFZpZGVvIEV4aGliaXRpb24jNTEyMQotbmFpY3MjNTEyMTMxI01vdGlvbiBQaWN0dXJlIFRoZWF0ZXJzIChleGNlcHQgRHJpdmUtSW5zKSM1MTIxMwotbmFpY3MjNTEyMTMyI0RyaXZlLUluIE1vdGlvbiBQaWN0dXJlIFRoZWF0ZXJzIzUxMjEzCi1uYWljcyM1MTIxOSNQb3N0cHJvZHVjdGlvbiBTZXJ2aWNlcyBhbmQgT3RoZXIgTW90aW9uIFBpY3R1cmUgYW5kIFZpZGVvIEluZHVzdHJpZXMjNTEyMQotbmFpY3MjNTEyMTkxI1RlbGVwcm9kdWN0aW9uIGFuZCBPdGhlciBQb3N0cHJvZHVjdGlvbiBTZXJ2aWNlcyM1MTIxOQotbmFpY3MjNTEyMTk5I090aGVyIE1vdGlvbiBQaWN0dXJlIGFuZCBWaWRlbyBJbmR1c3RyaWVzIzUxMjE5Ci1uYWljcyM1MTIyI1NvdW5kIFJlY29yZGluZyBJbmR1c3RyaWVzIzUxMgotbmFpY3MjNTEyMjEjUmVjb3JkIFByb2R1Y3Rpb24jNTEyMgotbmFpY3MjNTEyMjIjSW50ZWdyYXRlZCBSZWNvcmQgUHJvZHVjdGlvbi9EaXN0cmlidXRpb24jNTEyMgotbmFpY3MjNTEyMjMjTXVzaWMgUHVibGlzaGVycyM1MTIyCi1uYWljcyM1MTIyNCNTb3VuZCBSZWNvcmRpbmcgU3R1ZGlvcyM1MTIyCi1uYWljcyM1MTIyOSNPdGhlciBTb3VuZCBSZWNvcmRpbmcgSW5kdXN0cmllcyM1MTIyCi1uYWljcyM1MTMjQnJvYWRjYXN0aW5nIGFuZCBUZWxlY29tbXVuaWNhdGlvbnMjNTEKLW5haWNzIzUxMzEjUmFkaW8gYW5kIFRlbGV2aXNpb24gQnJvYWRjYXN0aW5nIzUxMwotbmFpY3MjNTEzMTEjUmFkaW8gQnJvYWRjYXN0aW5nIzUxMzEKLW5haWNzIzUxMzExMSNSYWRpbyBOZXR3b3JrcyM1MTMxMQotbmFpY3MjNTEzMTEyI1JhZGlvIFN0YXRpb25zIzUxMzExCi1uYWljcyM1MTMxMiNUZWxldmlzaW9uIEJyb2FkY2FzdGluZyM1MTMxCi1uYWljcyM1MTMyI0NhYmxlIE5ldHdvcmtzIGFuZCBQcm9ncmFtIERpc3RyaWJ1dGlvbiM1MTMKLW5haWNzIzUxMzIxI0NhYmxlIE5ldHdvcmtzIzUxMzIKLW5haWNzIzUxMzIyI0NhYmxlIGFuZCBPdGhlciBQcm9ncmFtIERpc3RyaWJ1dGlvbiM1MTMyCi1uYWljcyM1MTMzI1RlbGVjb21tdW5pY2F0aW9ucyM1MTMKLW5haWNzIzUxMzMxI1dpcmVkIFRlbGVjb21tdW5pY2F0aW9ucyBDYXJyaWVycyM1MTMzCi1uYWljcyM1MTMzMiNXaXJlbGVzcyBUZWxlY29tbXVuaWNhdGlvbnMgQ2FycmllcnMgKGV4Y2VwdCBTYXRlbGxpdGUpIzUxMzMKLW5haWNzIzUxMzMyMSNQYWdpbmcjNTEzMzIKLW5haWNzIzUxMzMyMiNDZWxsdWxhciBhbmQgT3RoZXIgV2lyZWxlc3MgVGVsZWNvbW11bmljYXRpb25zIzUxMzMyCi1uYWljcyM1MTMzMyNUZWxlY29tbXVuaWNhdGlvbnMgUmVzZWxsZXJzIzUxMzMKLW5haWNzIzUxMzM0I1NhdGVsbGl0ZSBUZWxlY29tbXVuaWNhdGlvbnMjNTEzMwotbmFpY3MjNTEzMzkjT3RoZXIgVGVsZWNvbW11bmljYXRpb25zIzUxMzMKLW5haWNzIzUxNCNJbmZvcm1hdGlvbiBTZXJ2aWNlcyBhbmQgRGF0YSBQcm9jZXNzaW5nIFNlcnZpY2VzIzUxCi1uYWljcyM1MTQxI0luZm9ybWF0aW9uIFNlcnZpY2VzIzUxNAotbmFpY3MjNTE0MTEjTmV3cyBTeW5kaWNhdGVzIzUxNDEKLW5haWNzIzUxNDEyI0xpYnJhcmllcyBhbmQgQXJjaGl2ZXMjNTE0MQotbmFpY3MjNTE0MTkjT3RoZXIgSW5mb3JtYXRpb24gU2VydmljZXMjNTE0MQotbmFpY3MjNTE0MTkxI09uLUxpbmUgSW5mb3JtYXRpb24gU2VydmljZXMjNTE0MTkKLW5haWNzIzUxNDE5OSNBbGwgT3RoZXIgSW5mb3JtYXRpb24gU2VydmljZXMjNTE0MTkKLW5haWNzIzUxNDIjRGF0YSBQcm9jZXNzaW5nIFNlcnZpY2VzIzUxNAotbmFpY3MjNTE0MjEjRGF0YSBQcm9jZXNzaW5nIFNlcnZpY2VzIzUxNDIKLW5haWNzIzUyI0ZpbmFuY2UgYW5kIEluc3VyYW5jZSM1MgotbmFpY3MjNTIxI01vbmV0YXJ5IEF1dGhvcml0aWVzIC0gQ2VudHJhbCBCYW5rIzUyCi1uYWljcyM1MjExI01vbmV0YXJ5IEF1dGhvcml0aWVzIC0gQ2VudHJhbCBCYW5rIzUyMQotbmFpY3MjNTIxMTEjTW9uZXRhcnkgQXV0aG9yaXRpZXMgLSBDZW50cmFsIEJhbmsjNTIxMQotbmFpY3MjNTIyI0NyZWRpdCBJbnRlcm1lZGlhdGlvbiBhbmQgUmVsYXRlZCBBY3Rpdml0aWVzIzUyCi1uYWljcyM1MjIxI0RlcG9zaXRvcnkgQ3JlZGl0IEludGVybWVkaWF0aW9uIzUyMgotbmFpY3MjNTIyMTEjQ29tbWVyY2lhbCBCYW5raW5nIzUyMjEKLW5haWNzIzUyMjEyI1NhdmluZ3MgSW5zdGl0dXRpb25zIzUyMjEKLW5haWNzIzUyMjEzI0NyZWRpdCBVbmlvbnMjNTIyMQotbmFpY3MjNTIyMTkjT3RoZXIgRGVwb3NpdG9yeSBDcmVkaXQgSW50ZXJtZWRpYXRpb24jNTIyMQotbmFpY3MjNTIyMiNOb25kZXBvc2l0b3J5IENyZWRpdCBJbnRlcm1lZGlhdGlvbiM1MjIKLW5haWNzIzUyMjIxI0NyZWRpdCBDYXJkIElzc3VpbmcjNTIyMgotbmFpY3MjNTIyMjIjU2FsZXMgRmluYW5jaW5nIzUyMjIKLW5haWNzIzUyMjI5I090aGVyIE5vbmRlcG9zaXRvcnkgQ3JlZGl0IEludGVybWVkaWF0aW9uIzUyMjIKLW5haWNzIzUyMjI5MSNDb25zdW1lciBMZW5kaW5nIzUyMjI5Ci1uYWljcyM1MjIyOTIjUmVhbCBFc3RhdGUgQ3JlZGl0IzUyMjI5Ci1uYWljcyM1MjIyOTMjSW50ZXJuYXRpb25hbCBUcmFkZSBGaW5hbmNpbmcjNTIyMjkKLW5haWNzIzUyMjI5NCNTZWNvbmRhcnkgTWFya2V0IEZpbmFuY2luZyM1MjIyOQotbmFpY3MjNTIyMjk4I0FsbCBPdGhlciBOb25kZXBvc2l0b3J5IENyZWRpdCBJbnRlcm1lZGlhdGlvbiM1MjIyOQotbmFpY3MjNTIyMyNBY3Rpdml0aWVzIFJlbGF0ZWQgdG8gQ3JlZGl0IEludGVybWVkaWF0aW9uIzUyMgotbmFpY3MjNTIyMzEjTW9ydGdhZ2UgYW5kIE5vbm1vcnRnYWdlIExvYW4gQnJva2VycyM1MjIzCi1uYWljcyM1MjIzMiNGaW5hbmNpYWwgVHJhbnNhY3Rpb25zIFByb2Nlc3NpbmcsIFJlc2VydmUsIGFuZCBDbGVhcmluZ2hvdXNlIEFjdGl2aXRpZXMjNTIyMwotbmFpY3MjNTIyMzkjT3RoZXIgQWN0aXZpdGllcyBSZWxhdGVkIHRvIENyZWRpdCBJbnRlcm1lZGlhdGlvbiM1MjIzCi1uYWljcyM1MjMjU2VjdXJpdGllcywgQ29tbW9kaXR5IENvbnRyYWN0cywgYW5kIE90aGVyIEZpbmFuY2lhbCBJbnZlc3RtZW50cyBhbmQgUmVsYXRlZCBBY3Rpdml0aWVzIzUyCi1uYWljcyM1MjMxI1NlY3VyaXRpZXMgYW5kIENvbW1vZGl0eSBDb250cmFjdHMgSW50ZXJtZWRpYXRpb24gYW5kIEJyb2tlcmFnZSM1MjMKLW5haWNzIzUyMzExI0ludmVzdG1lbnQgQmFua2luZyBhbmQgU2VjdXJpdGllcyBEZWFsaW5nIzUyMzEKLW5haWNzIzUyMzEyI1NlY3VyaXRpZXMgQnJva2VyYWdlIzUyMzEKLW5haWNzIzUyMzEzI0NvbW1vZGl0eSBDb250cmFjdHMgRGVhbGluZyM1MjMxCi1uYWljcyM1MjMxNCNDb21tb2RpdHkgQ29udHJhY3RzIEJyb2tlcmFnZSM1MjMxCi1uYWljcyM1MjMyI1NlY3VyaXRpZXMgYW5kIENvbW1vZGl0eSBFeGNoYW5nZXMjNTIzCi1uYWljcyM1MjMyMSNTZWN1cml0aWVzIGFuZCBDb21tb2RpdHkgRXhjaGFuZ2VzIzUyMzIKLW5haWNzIzUyMzkjT3RoZXIgRmluYW5jaWFsIEludmVzdG1lbnQgQWN0aXZpdGllcyM1MjMKLW5haWNzIzUyMzkxI01pc2NlbGxhbmVvdXMgSW50ZXJtZWRpYXRpb24jNTIzOQotbmFpY3MjNTIzOTIjUG9ydGZvbGlvIE1hbmFnZW1lbnQjNTIzOQotbmFpY3MjNTIzOTMjSW52ZXN0bWVudCBBZHZpY2UjNTIzOQotbmFpY3MjNTIzOTkjQWxsIE90aGVyIEZpbmFuY2lhbCBJbnZlc3RtZW50IEFjdGl2aXRpZXMjNTIzOQotbmFpY3MjNTIzOTkxI1RydXN0LCBGaWR1Y2lhcnksIGFuZCBDdXN0b2R5IEFjdGl2aXRpZXMjNTIzOTkKLW5haWNzIzUyMzk5OSNNaXNjZWxsYW5lb3VzIEZpbmFuY2lhbCBJbnZlc3RtZW50IEFjdGl2aXRpZXMjNTIzOTkKLW5haWNzIzUyNCNJbnN1cmFuY2UgQ2FycmllcnMgYW5kIFJlbGF0ZWQgQWN0aXZpdGllcyM1MgotbmFpY3MjNTI0MSNJbnN1cmFuY2UgQ2FycmllcnMjNTI0Ci1uYWljcyM1MjQxMSNEaXJlY3QgTGlmZSwgSGVhbHRoLCBhbmQgTWVkaWNhbCBJbnN1cmFuY2UgQ2FycmllcnMjNTI0MQotbmFpY3MjNTI0MTEzI0RpcmVjdCBMaWZlIEluc3VyYW5jZSBDYXJyaWVycyM1MjQxMQotbmFpY3MjNTI0MTE0I0RpcmVjdCBIZWFsdGggYW5kIE1lZGljYWwgSW5zdXJhbmNlIENhcnJpZXJzIzUyNDExCi1uYWljcyM1MjQxMiNEaXJlY3QgSW5zdXJhbmNlIChleGNlcHQgTGlmZSwgSGVhbHRoLCBhbmQgTWVkaWNhbCkgQ2FycmllcnMjNTI0MQotbmFpY3MjNTI0MTI2I0RpcmVjdCBQcm9wZXJ0eSBhbmQgQ2FzdWFsdHkgSW5zdXJhbmNlIENhcnJpZXJzIzUyNDEyCi1uYWljcyM1MjQxMjcjRGlyZWN0IFRpdGxlIEluc3VyYW5jZSBDYXJyaWVycyM1MjQxMgotbmFpY3MjNTI0MTI4I090aGVyIERpcmVjdCBJbnN1cmFuY2UgKGV4Y2VwdCBMaWZlLCBIZWFsdGgsIGFuZCBNZWRpY2FsKSBDYXJyaWVycyM1MjQxMgotbmFpY3MjNTI0MTMjUmVpbnN1cmFuY2UgQ2FycmllcnMjNTI0MQotbmFpY3MjNTI0MiNBZ2VuY2llcywgQnJva2VyYWdlcywgYW5kIE90aGVyIEluc3VyYW5jZSBSZWxhdGVkIEFjdGl2aXRpZXMjNTI0Ci1uYWljcyM1MjQyMSNJbnN1cmFuY2UgQWdlbmNpZXMgYW5kIEJyb2tlcmFnZXMjNTI0MgotbmFpY3MjNTI0MjkjT3RoZXIgSW5zdXJhbmNlIFJlbGF0ZWQgQWN0aXZpdGllcyM1MjQyCi1uYWljcyM1MjQyOTEjQ2xhaW1zIEFkanVzdGluZyM1MjQyOQotbmFpY3MjNTI0MjkyI1RoaXJkIFBhcnR5IEFkbWluaXN0cmF0aW9uIG9mIEluc3VyYW5jZSBhbmQgUGVuc2lvbiBGdW5kcyM1MjQyOQotbmFpY3MjNTI0Mjk4I0FsbCBPdGhlciBJbnN1cmFuY2UgUmVsYXRlZCBBY3Rpdml0aWVzIzUyNDI5Ci1uYWljcyM1MjUjRnVuZHMsIFRydXN0cywgYW5kIE90aGVyIEZpbmFuY2lhbCBWZWhpY2xlcyM1MgotbmFpY3MjNTI1MSNJbnN1cmFuY2UgYW5kIEVtcGxveWVlIEJlbmVmaXQgRnVuZHMjNTI1Ci1uYWljcyM1MjUxMSNQZW5zaW9uIEZ1bmRzIzUyNTEKLW5haWNzIzUyNTEyI0hlYWx0aCBhbmQgV2VsZmFyZSBGdW5kcyM1MjUxCi1uYWljcyM1MjUxOSNPdGhlciBJbnN1cmFuY2UgRnVuZHMjNTI1MQotbmFpY3MjNTI1OSNPdGhlciBJbnZlc3RtZW50IFBvb2xzIGFuZCBGdW5kcyM1MjUKLW5haWNzIzUyNTkxI09wZW4tRW5kIEludmVzdG1lbnQgRnVuZHMjNTI1OQotbmFpY3MjNTI1OTIjVHJ1c3RzLCBFc3RhdGVzLCBhbmQgQWdlbmN5IEFjY291bnRzIzUyNTkKLW5haWNzIzUyNTkzI1JlYWwgRXN0YXRlIEludmVzdG1lbnQgVHJ1c3RzIzUyNTkKLW5haWNzIzUyNTk5I090aGVyIEZpbmFuY2lhbCBWZWhpY2xlcyM1MjU5Ci1uYWljcyM1MyNSZWFsIEVzdGF0ZSBhbmQgUmVudGFsIGFuZCBMZWFzaW5nIzUzCi1uYWljcyM1MzEjUmVhbCBFc3RhdGUjNTMKLW5haWNzIzUzMTEjTGVzc29ycyBvZiBSZWFsIEVzdGF0ZSM1MzEKLW5haWNzIzUzMTExI0xlc3NvcnMgb2YgUmVzaWRlbnRpYWwgQnVpbGRpbmdzIGFuZCBEd2VsbGluZ3MjNTMxMQotbmFpY3MjNTMxMTIjTGVzc29ycyBvZiBOb25yZXNpZGVudGlhbCBCdWlsZGluZ3MgKGV4Y2VwdCBNaW5pd2FyZWhvdXNlcykjNTMxMQotbmFpY3MjNTMxMTMjTGVzc29ycyBvZiBNaW5pd2FyZWhvdXNlcyBhbmQgU2VsZi1TdG9yYWdlIFVuaXRzIzUzMTEKLW5haWNzIzUzMTE5I0xlc3NvcnMgb2YgT3RoZXIgUmVhbCBFc3RhdGUgUHJvcGVydHkjNTMxMQotbmFpY3MjNTMxMiNPZmZpY2VzIG9mIFJlYWwgRXN0YXRlIEFnZW50cyBhbmQgQnJva2VycyM1MzEKLW5haWNzIzUzMTIxI09mZmljZXMgb2YgUmVhbCBFc3RhdGUgQWdlbnRzIGFuZCBCcm9rZXJzIzUzMTIKLW5haWNzIzUzMTMjQWN0aXZpdGllcyBSZWxhdGVkIHRvIFJlYWwgRXN0YXRlIzUzMQotbmFpY3MjNTMxMzEjUmVhbCBFc3RhdGUgUHJvcGVydHkgTWFuYWdlcnMjNTMxMwotbmFpY3MjNTMxMzExI1Jlc2lkZW50aWFsIFByb3BlcnR5IE1hbmFnZXJzIzUzMTMxCi1uYWljcyM1MzEzMTIjTm9ucmVzaWRlbnRpYWwgUHJvcGVydHkgTWFuYWdlcnMjNTMxMzEKLW5haWNzIzUzMTMyI09mZmljZXMgb2YgUmVhbCBFc3RhdGUgQXBwcmFpc2VycyM1MzEzCi1uYWljcyM1MzEzOSNPdGhlciBBY3Rpdml0aWVzIFJlbGF0ZWQgdG8gUmVhbCBFc3RhdGUjNTMxMwotbmFpY3MjNTMyI1JlbnRhbCBhbmQgTGVhc2luZyBTZXJ2aWNlcyM1MwotbmFpY3MjNTMyMSNBdXRvbW90aXZlIEVxdWlwbWVudCBSZW50YWwgYW5kIExlYXNpbmcjNTMyCi1uYWljcyM1MzIxMSNQYXNzZW5nZXIgQ2FyIFJlbnRhbCBhbmQgTGVhc2luZyM1MzIxCi1uYWljcyM1MzIxMTEjUGFzc2VuZ2VyIENhciBSZW50YWwjNTMyMTEKLW5haWNzIzUzMjExMiNQYXNzZW5nZXIgQ2FyIExlYXNpbmcjNTMyMTEKLW5haWNzIzUzMjEyI1RydWNrLCBVdGlsaXR5IFRyYWlsZXIsIGFuZCBSViAoUmVjcmVhdGlvbmFsIFZlaGljbGUpIFJlbnRhbCBhbmQgTGVhc2luZyM1MzIxCi1uYWljcyM1MzIyI0NvbnN1bWVyIEdvb2RzIFJlbnRhbCM1MzIKLW5haWNzIzUzMjIxI0NvbnN1bWVyIEVsZWN0cm9uaWNzIGFuZCBBcHBsaWFuY2VzIFJlbnRhbCM1MzIyCi1uYWljcyM1MzIyMiNGb3JtYWwgV2VhciBhbmQgQ29zdHVtZSBSZW50YWwjNTMyMgotbmFpY3MjNTMyMjMjVmlkZW8gVGFwZSBhbmQgRGlzYyBSZW50YWwjNTMyMgotbmFpY3MjNTMyMjkjT3RoZXIgQ29uc3VtZXIgR29vZHMgUmVudGFsIzUzMjIKLW5haWNzIzUzMjI5MSNIb21lIEhlYWx0aCBFcXVpcG1lbnQgUmVudGFsIzUzMjI5Ci1uYWljcyM1MzIyOTIjUmVjcmVhdGlvbmFsIEdvb2RzIFJlbnRhbCM1MzIyOQotbmFpY3MjNTMyMjk5I0FsbCBPdGhlciBDb25zdW1lciBHb29kcyBSZW50YWwjNTMyMjkKLW5haWNzIzUzMjMjR2VuZXJhbCBSZW50YWwgQ2VudGVycyM1MzIKLW5haWNzIzUzMjMxI0dlbmVyYWwgUmVudGFsIENlbnRlcnMjNTMyMwotbmFpY3MjNTMyNCNDb21tZXJjaWFsIGFuZCBJbmR1c3RyaWFsIE1hY2hpbmVyeSBhbmQgRXF1aXBtZW50IFJlbnRhbCBhbmQgTGVhc2luZyM1MzIKLW5haWNzIzUzMjQxI0NvbnN0cnVjdGlvbiwgVHJhbnNwb3J0YXRpb24sIE1pbmluZywgYW5kIEZvcmVzdHJ5IE1hY2hpbmVyeSBhbmQgRXF1aXBtZW50IFJlbnRhbCBhbmQgTGVhc2luZyM1MzI0Ci1uYWljcyM1MzI0MTEjQ29tbWVyY2lhbCBBaXIsIFJhaWwsIGFuZCBXYXRlciBUcmFuc3BvcnRhdGlvbiBFcXVpcG1lbnQgUmVudGFsIGFuZCBMZWFzaW5nIzUzMjQxCi1uYWljcyM1MzI0MTIjQ29uc3RydWN0aW9uLCBNaW5pbmcsIGFuZCBGb3Jlc3RyeSBNYWNoaW5lcnkgYW5kIEVxdWlwbWVudCBSZW50YWwgYW5kIExlYXNpbmcjNTMyNDEKLW5haWNzIzUzMjQyI09mZmljZSBNYWNoaW5lcnkgYW5kIEVxdWlwbWVudCBSZW50YWwgYW5kIExlYXNpbmcjNTMyNAotbmFpY3MjNTMyNDkjT3RoZXIgQ29tbWVyY2lhbCBhbmQgSW5kdXN0cmlhbCBNYWNoaW5lcnkgYW5kIEVxdWlwbWVudCBSZW50YWwgYW5kIExlYXNpbmcjNTMyNAotbmFpY3MjNTMzI0xlc3NvcnMgb2YgTm9uZmluYW5jaWFsIEludGFuZ2libGUgQXNzZXRzIChleGNlcHQgQ29weXJpZ2h0ZWQgV29ya3MpIzUzCi1uYWljcyM1MzMxI0xlc3NvcnMgb2YgTm9uZmluYW5jaWFsIEludGFuZ2libGUgQXNzZXRzIChleGNlcHQgQ29weXJpZ2h0ZWQgV29ya3MpIzUzMwotbmFpY3MjNTMzMTEjTGVzc29ycyBvZiBOb25maW5hbmNpYWwgSW50YW5naWJsZSBBc3NldHMgKGV4Y2VwdCBDb3B5cmlnaHRlZCBXb3JrcykjNTMzMQotbmFpY3MjNTQjUHJvZmVzc2lvbmFsLCBTY2llbnRpZmljLCBhbmQgVGVjaG5pY2FsIFNlcnZpY2VzIzU0Ci1uYWljcyM1NDEjUHJvZmVzc2lvbmFsLCBTY2llbnRpZmljLCBhbmQgVGVjaG5pY2FsIFNlcnZpY2VzIzU0Ci1uYWljcyM1NDExI0xlZ2FsIFNlcnZpY2VzIzU0MQotbmFpY3MjNTQxMTEjT2ZmaWNlcyBvZiBMYXd5ZXJzIzU0MTEKLW5haWNzIzU0MTEyI09mZmljZXMgb2YgTm90YXJpZXMjNTQxMQotbmFpY3MjNTQxMTkjT3RoZXIgTGVnYWwgU2VydmljZXMjNTQxMQotbmFpY3MjNTQxMTkxI1RpdGxlIEFic3RyYWN0IGFuZCBTZXR0bGVtZW50IE9mZmljZXMjNTQxMTkKLW5haWNzIzU0MTE5OSNBbGwgT3RoZXIgTGVnYWwgU2VydmljZXMjNTQxMTkKLW5haWNzIzU0MTIjQWNjb3VudGluZywgVGF4IFByZXBhcmF0aW9uLCBCb29ra2VlcGluZywgYW5kIFBheXJvbGwgU2VydmljZXMjNTQxCi1uYWljcyM1NDEyMSNBY2NvdW50aW5nLCBUYXggUHJlcGFyYXRpb24sIEJvb2trZWVwaW5nLCBhbmQgUGF5cm9sbCBTZXJ2aWNlcyM1NDEyCi1uYWljcyM1NDEyMTEjT2ZmaWNlcyBvZiBDZXJ0aWZpZWQgUHVibGljIEFjY291bnRhbnRzIzU0MTIxCi1uYWljcyM1NDEyMTMjVGF4IFByZXBhcmF0aW9uIFNlcnZpY2VzIzU0MTIxCi1uYWljcyM1NDEyMTQjUGF5cm9sbCBTZXJ2aWNlcyM1NDEyMQotbmFpY3MjNTQxMjE5I090aGVyIEFjY291bnRpbmcgU2VydmljZXMjNTQxMjEKLW5haWNzIzU0MTMjQXJjaGl0ZWN0dXJhbCwgRW5naW5lZXJpbmcsIGFuZCBSZWxhdGVkIFNlcnZpY2VzIzU0MQotbmFpY3MjNTQxMzEjQXJjaGl0ZWN0dXJhbCBTZXJ2aWNlcyM1NDEzCi1uYWljcyM1NDEzMiNMYW5kc2NhcGUgQXJjaGl0ZWN0dXJhbCBTZXJ2aWNlcyM1NDEzCi1uYWljcyM1NDEzMyNFbmdpbmVlcmluZyBTZXJ2aWNlcyM1NDEzCi1uYWljcyM1NDEzNCNEcmFmdGluZyBTZXJ2aWNlcyM1NDEzCi1uYWljcyM1NDEzNSNCdWlsZGluZyBJbnNwZWN0aW9uIFNlcnZpY2VzIzU0MTMKLW5haWNzIzU0MTM2I0dlb3BoeXNpY2FsIFN1cnZleWluZyBhbmQgTWFwcGluZyBTZXJ2aWNlcyM1NDEzCi1uYWljcyM1NDEzNyNTdXJ2ZXlpbmcgYW5kIE1hcHBpbmcgKGV4Y2VwdCBHZW9waHlzaWNhbCkgU2VydmljZXMjNTQxMwotbmFpY3MjNTQxMzgjVGVzdGluZyBMYWJvcmF0b3JpZXMjNTQxMwotbmFpY3MjNTQxNCNTcGVjaWFsaXplZCBEZXNpZ24gU2VydmljZXMjNTQxCi1uYWljcyM1NDE0MSNJbnRlcmlvciBEZXNpZ24gU2VydmljZXMjNTQxNAotbmFpY3MjNTQxNDIjSW5kdXN0cmlhbCBEZXNpZ24gU2VydmljZXMjNTQxNAotbmFpY3MjNTQxNDMjR3JhcGhpYyBEZXNpZ24gU2VydmljZXMjNTQxNAotbmFpY3MjNTQxNDkjT3RoZXIgU3BlY2lhbGl6ZWQgRGVzaWduIFNlcnZpY2VzIzU0MTQKLW5haWNzIzU0MTUjQ29tcHV0ZXIgU3lzdGVtcyBEZXNpZ24gYW5kIFJlbGF0ZWQgU2VydmljZXMjNTQxCi1uYWljcyM1NDE1MSNDb21wdXRlciBTeXN0ZW1zIERlc2lnbiBhbmQgUmVsYXRlZCBTZXJ2aWNlcyM1NDE1Ci1uYWljcyM1NDE1MTEjQ3VzdG9tIENvbXB1dGVyIFByb2dyYW1taW5nIFNlcnZpY2VzIzU0MTUxCi1uYWljcyM1NDE1MTIjQ29tcHV0ZXIgU3lzdGVtcyBEZXNpZ24gU2VydmljZXMjNTQxNTEKLW5haWNzIzU0MTUxMyNDb21wdXRlciBGYWNpbGl0aWVzIE1hbmFnZW1lbnQgU2VydmljZXMjNTQxNTEKLW5haWNzIzU0MTUxOSNPdGhlciBDb21wdXRlciBSZWxhdGVkIFNlcnZpY2VzIzU0MTUxCi1uYWljcyM1NDE2I01hbmFnZW1lbnQsIFNjaWVudGlmaWMsIGFuZCBUZWNobmljYWwgQ29uc3VsdGluZyBTZXJ2aWNlcyM1NDEKLW5haWNzIzU0MTYxI01hbmFnZW1lbnQgQ29uc3VsdGluZyBTZXJ2aWNlcyM1NDE2Ci1uYWljcyM1NDE2MTEjQWRtaW5pc3RyYXRpdmUgTWFuYWdlbWVudCBhbmQgR2VuZXJhbCBNYW5hZ2VtZW50IENvbnN1bHRpbmcgU2VydmljZXMjNTQxNjEKLW5haWNzIzU0MTYxMiNIdW1hbiBSZXNvdXJjZXMgYW5kIEV4ZWN1dGl2ZSBTZWFyY2ggQ29uc3VsdGluZyBTZXJ2aWNlcyM1NDE2MQotbmFpY3MjNTQxNjEzI01hcmtldGluZyBDb25zdWx0aW5nIFNlcnZpY2VzIzU0MTYxCi1uYWljcyM1NDE2MTQjUHJvY2VzcywgUGh5c2ljYWwgRGlzdHJpYnV0aW9uLCBhbmQgTG9naXN0aWNzIENvbnN1bHRpbmcgU2VydmljZXMjNTQxNjEKLW5haWNzIzU0MTYxOCNPdGhlciBNYW5hZ2VtZW50IENvbnN1bHRpbmcgU2VydmljZXMjNTQxNjEKLW5haWNzIzU0MTYyI0Vudmlyb25tZW50YWwgQ29uc3VsdGluZyBTZXJ2aWNlcyM1NDE2Ci1uYWljcyM1NDE2OSNPdGhlciBTY2llbnRpZmljIGFuZCBUZWNobmljYWwgQ29uc3VsdGluZyBTZXJ2aWNlcyM1NDE2Ci1uYWljcyM1NDE3I1NjaWVudGlmaWMgUmVzZWFyY2ggYW5kIERldmVsb3BtZW50IFNlcnZpY2VzIzU0MQotbmFpY3MjNTQxNzEjUmVzZWFyY2ggYW5kIERldmVsb3BtZW50IGluIHRoZSBQaHlzaWNhbCwgRW5naW5lZXJpbmcsIGFuZCBMaWZlIFNjaWVuY2VzIzU0MTcKLW5haWNzIzU0MTcyI1Jlc2VhcmNoIGFuZCBEZXZlbG9wbWVudCBpbiB0aGUgU29jaWFsIFNjaWVuY2VzIGFuZCBIdW1hbml0aWVzIzU0MTcKLW5haWNzIzU0MTgjQWR2ZXJ0aXNpbmcgYW5kIFJlbGF0ZWQgU2VydmljZXMjNTQxCi1uYWljcyM1NDE4MSNBZHZlcnRpc2luZyBBZ2VuY2llcyM1NDE4Ci1uYWljcyM1NDE4MiNQdWJsaWMgUmVsYXRpb25zIEFnZW5jaWVzIzU0MTgKLW5haWNzIzU0MTgzI01lZGlhIEJ1eWluZyBBZ2VuY2llcyM1NDE4Ci1uYWljcyM1NDE4NCNNZWRpYSBSZXByZXNlbnRhdGl2ZXMjNTQxOAotbmFpY3MjNTQxODUjRGlzcGxheSBBZHZlcnRpc2luZyM1NDE4Ci1uYWljcyM1NDE4NiNEaXJlY3QgTWFpbCBBZHZlcnRpc2luZyM1NDE4Ci1uYWljcyM1NDE4NyNBZHZlcnRpc2luZyBNYXRlcmlhbCBEaXN0cmlidXRpb24gU2VydmljZXMjNTQxOAotbmFpY3MjNTQxODkjT3RoZXIgU2VydmljZXMgUmVsYXRlZCB0byBBZHZlcnRpc2luZyM1NDE4Ci1uYWljcyM1NDE5I090aGVyIFByb2Zlc3Npb25hbCwgU2NpZW50aWZpYywgYW5kIFRlY2huaWNhbCBTZXJ2aWNlcyM1NDEKLW5haWNzIzU0MTkxI01hcmtldGluZyBSZXNlYXJjaCBhbmQgUHVibGljIE9waW5pb24gUG9sbGluZyM1NDE5Ci1uYWljcyM1NDE5MiNQaG90b2dyYXBoaWMgU2VydmljZXMjNTQxOQotbmFpY3MjNTQxOTIxI1Bob3RvZ3JhcGh5IFN0dWRpb3MsIFBvcnRyYWl0IzU0MTkyCi1uYWljcyM1NDE5MjIjQ29tbWVyY2lhbCBQaG90b2dyYXBoeSM1NDE5MgotbmFpY3MjNTQxOTMjVHJhbnNsYXRpb24gYW5kIEludGVycHJldGF0aW9uIFNlcnZpY2VzIzU0MTkKLW5haWNzIzU0MTk0I1ZldGVyaW5hcnkgU2VydmljZXMjNTQxOQotbmFpY3MjNTQxOTkjQWxsIE90aGVyIFByb2Zlc3Npb25hbCwgU2NpZW50aWZpYywgYW5kIFRlY2huaWNhbCBTZXJ2aWNlcyM1NDE5Ci1uYWljcyM1NSNNYW5hZ2VtZW50IG9mIENvbXBhbmllcyBhbmQgRW50ZXJwcmlzZXMjNTUKLW5haWNzIzU1MSNNYW5hZ2VtZW50IG9mIENvbXBhbmllcyBhbmQgRW50ZXJwcmlzZXMjNTUKLW5haWNzIzU1MTEjTWFuYWdlbWVudCBvZiBDb21wYW5pZXMgYW5kIEVudGVycHJpc2VzIzU1MQotbmFpY3MjNTUxMTEjTWFuYWdlbWVudCBvZiBDb21wYW5pZXMgYW5kIEVudGVycHJpc2VzIzU1MTEKLW5haWNzIzU1MTExMSNPZmZpY2VzIG9mIEJhbmsgSG9sZGluZyBDb21wYW5pZXMjNTUxMTEKLW5haWNzIzU1MTExMiNPZmZpY2VzIG9mIE90aGVyIEhvbGRpbmcgQ29tcGFuaWVzIzU1MTExCi1uYWljcyM1NTExMTQjQ29ycG9yYXRlLCBTdWJzaWRpYXJ5LCBhbmQgUmVnaW9uYWwgTWFuYWdpbmcgT2ZmaWNlcyM1NTExMQotbmFpY3MjNTYjQWRtaW5pc3RyYXRpdmUgYW5kIFN1cHBvcnQgYW5kIFdhc3RlIE1hbmFnZW1lbnQgYW5kIFJlbWVkaWF0aW9uIFNlcnZpY2VzIzU2Ci1uYWljcyM1NjEjQWRtaW5pc3RyYXRpdmUgYW5kIFN1cHBvcnQgU2VydmljZXMjNTYKLW5haWNzIzU2MTEjT2ZmaWNlIEFkbWluaXN0cmF0aXZlIFNlcnZpY2VzIzU2MQotbmFpY3MjNTYxMTEjT2ZmaWNlIEFkbWluaXN0cmF0aXZlIFNlcnZpY2VzIzU2MTEKLW5haWNzIzU2MTIjRmFjaWxpdGllcyBTdXBwb3J0IFNlcnZpY2VzIzU2MQotbmFpY3MjNTYxMjEjRmFjaWxpdGllcyBTdXBwb3J0IFNlcnZpY2VzIzU2MTIKLW5haWNzIzU2MTMjRW1wbG95bWVudCBTZXJ2aWNlcyM1NjEKLW5haWNzIzU2MTMxI0VtcGxveW1lbnQgUGxhY2VtZW50IEFnZW5jaWVzIzU2MTMKLW5haWNzIzU2MTMyI1RlbXBvcmFyeSBIZWxwIFNlcnZpY2VzIzU2MTMKLW5haWNzIzU2MTMzI0VtcGxveWVlIExlYXNpbmcgU2VydmljZXMjNTYxMwotbmFpY3MjNTYxNCNCdXNpbmVzcyBTdXBwb3J0IFNlcnZpY2VzIzU2MQotbmFpY3MjNTYxNDEjRG9jdW1lbnQgUHJlcGFyYXRpb24gU2VydmljZXMjNTYxNAotbmFpY3MjNTYxNDIjVGVsZXBob25lIENhbGwgQ2VudGVycyM1NjE0Ci1uYWljcyM1NjE0MjEjVGVsZXBob25lIEFuc3dlcmluZyBTZXJ2aWNlcyM1NjE0MgotbmFpY3MjNTYxNDIyI1RlbGVtYXJrZXRpbmcgQnVyZWF1cyM1NjE0MgotbmFpY3MjNTYxNDMjQnVzaW5lc3MgU2VydmljZSBDZW50ZXJzIzU2MTQKLW5haWNzIzU2MTQzMSNQcml2YXRlIE1haWwgQ2VudGVycyM1NjE0MwotbmFpY3MjNTYxNDM5I090aGVyIEJ1c2luZXNzIFNlcnZpY2UgQ2VudGVycyAoaW5jbHVkaW5nIENvcHkgU2hvcHMpIzU2MTQzCi1uYWljcyM1NjE0NCNDb2xsZWN0aW9uIEFnZW5jaWVzIzU2MTQKLW5haWNzIzU2MTQ1I0NyZWRpdCBCdXJlYXVzIzU2MTQKLW5haWNzIzU2MTQ5I090aGVyIEJ1c2luZXNzIFN1cHBvcnQgU2VydmljZXMjNTYxNAotbmFpY3MjNTYxNDkxI1JlcG9zc2Vzc2lvbiBTZXJ2aWNlcyM1NjE0OQotbmFpY3MjNTYxNDkyI0NvdXJ0IFJlcG9ydGluZyBhbmQgU3Rlbm90eXBlIFNlcnZpY2VzIzU2MTQ5Ci1uYWljcyM1NjE0OTkjQWxsIE90aGVyIEJ1c2luZXNzIFN1cHBvcnQgU2VydmljZXMjNTYxNDkKLW5haWNzIzU2MTUjVHJhdmVsIEFycmFuZ2VtZW50IGFuZCBSZXNlcnZhdGlvbiBTZXJ2aWNlcyM1NjEKLW5haWNzIzU2MTUxI1RyYXZlbCBBZ2VuY2llcyM1NjE1Ci1uYWljcyM1NjE1MiNUb3VyIE9wZXJhdG9ycyM1NjE1Ci1uYWljcyM1NjE1OSNPdGhlciBUcmF2ZWwgQXJyYW5nZW1lbnQgYW5kIFJlc2VydmF0aW9uIFNlcnZpY2VzIzU2MTUKLW5haWNzIzU2MTU5MSNDb252ZW50aW9uIGFuZCBWaXNpdG9ycyBCdXJlYXVzIzU2MTU5Ci1uYWljcyM1NjE1OTkjQWxsIE90aGVyIFRyYXZlbCBBcnJhbmdlbWVudCBhbmQgUmVzZXJ2YXRpb24gU2VydmljZXMjNTYxNTkKLW5haWNzIzU2MTYjSW52ZXN0aWdhdGlvbiBhbmQgU2VjdXJpdHkgU2VydmljZXMjNTYxCi1uYWljcyM1NjE2MSNJbnZlc3RpZ2F0aW9uLCBHdWFyZCwgYW5kIEFybW9yZWQgQ2FyIFNlcnZpY2VzIzU2MTYKLW5haWNzIzU2MTYxMSNJbnZlc3RpZ2F0aW9uIFNlcnZpY2VzIzU2MTYxCi1uYWljcyM1NjE2MTIjU2VjdXJpdHkgR3VhcmRzIGFuZCBQYXRyb2wgU2VydmljZXMjNTYxNjEKLW5haWNzIzU2MTYxMyNBcm1vcmVkIENhciBTZXJ2aWNlcyM1NjE2MQotbmFpY3MjNTYxNjIjU2VjdXJpdHkgU3lzdGVtcyBTZXJ2aWNlcyM1NjE2Ci1uYWljcyM1NjE2MjEjU2VjdXJpdHkgU3lzdGVtcyBTZXJ2aWNlcyAoZXhjZXB0IExvY2tzbWl0aHMpIzU2MTYyCi1uYWljcyM1NjE2MjIjTG9ja3NtaXRocyM1NjE2MgotbmFpY3MjNTYxNyNTZXJ2aWNlcyB0byBCdWlsZGluZ3MgYW5kIER3ZWxsaW5ncyM1NjEKLW5haWNzIzU2MTcxI0V4dGVybWluYXRpbmcgYW5kIFBlc3QgQ29udHJvbCBTZXJ2aWNlcyM1NjE3Ci1uYWljcyM1NjE3MiNKYW5pdG9yaWFsIFNlcnZpY2VzIzU2MTcKLW5haWNzIzU2MTczI0xhbmRzY2FwaW5nIFNlcnZpY2VzIzU2MTcKLW5haWNzIzU2MTc0I0NhcnBldCBhbmQgVXBob2xzdGVyeSBDbGVhbmluZyBTZXJ2aWNlcyM1NjE3Ci1uYWljcyM1NjE3OSNPdGhlciBTZXJ2aWNlcyB0byBCdWlsZGluZ3MgYW5kIER3ZWxsaW5ncyM1NjE3Ci1uYWljcyM1NjE5I090aGVyIFN1cHBvcnQgU2VydmljZXMjNTYxCi1uYWljcyM1NjE5MSNQYWNrYWdpbmcgYW5kIExhYmVsaW5nIFNlcnZpY2VzIzU2MTkKLW5haWNzIzU2MTkyI0NvbnZlbnRpb24gYW5kIFRyYWRlIFNob3cgT3JnYW5pemVycyM1NjE5Ci1uYWljcyM1NjE5OSNBbGwgT3RoZXIgU3VwcG9ydCBTZXJ2aWNlcyM1NjE5Ci1uYWljcyM1NjIjV2FzdGUgTWFuYWdlbWVudCBhbmQgUmVtZWRpYXRpb24gU2VydmljZXMjNTYKLW5haWNzIzU2MjEjV2FzdGUgQ29sbGVjdGlvbiM1NjIKLW5haWNzIzU2MjExI1dhc3RlIENvbGxlY3Rpb24jNTYyMQotbmFpY3MjNTYyMTExI1NvbGlkIFdhc3RlIENvbGxlY3Rpb24jNTYyMTEKLW5haWNzIzU2MjExMiNIYXphcmRvdXMgV2FzdGUgQ29sbGVjdGlvbiM1NjIxMQotbmFpY3MjNTYyMTE5I090aGVyIFdhc3RlIENvbGxlY3Rpb24jNTYyMTEKLW5haWNzIzU2MjIjV2FzdGUgVHJlYXRtZW50IGFuZCBEaXNwb3NhbCM1NjIKLW5haWNzIzU2MjIxI1dhc3RlIFRyZWF0bWVudCBhbmQgRGlzcG9zYWwjNTYyMgotbmFpY3MjNTYyMjExI0hhemFyZG91cyBXYXN0ZSBUcmVhdG1lbnQgYW5kIERpc3Bvc2FsIzU2MjIxCi1uYWljcyM1NjIyMTIjU29saWQgV2FzdGUgTGFuZGZpbGwjNTYyMjEKLW5haWNzIzU2MjIxMyNTb2xpZCBXYXN0ZSBDb21idXN0b3JzIGFuZCBJbmNpbmVyYXRvcnMjNTYyMjEKLW5haWNzIzU2MjIxOSNPdGhlciBOb25oYXphcmRvdXMgV2FzdGUgVHJlYXRtZW50IGFuZCBEaXNwb3NhbCM1NjIyMQotbmFpY3MjNTYyOSNSZW1lZGlhdGlvbiBhbmQgT3RoZXIgV2FzdGUgTWFuYWdlbWVudCBTZXJ2aWNlcyM1NjIKLW5haWNzIzU2MjkxI1JlbWVkaWF0aW9uIFNlcnZpY2VzIzU2MjkKLW5haWNzIzU2MjkyI01hdGVyaWFscyBSZWNvdmVyeSBGYWNpbGl0aWVzIzU2MjkKLW5haWNzIzU2Mjk5I0FsbCBPdGhlciBXYXN0ZSBNYW5hZ2VtZW50IFNlcnZpY2VzIzU2MjkKLW5haWNzIzU2Mjk5MSNTZXB0aWMgVGFuayBhbmQgUmVsYXRlZCBTZXJ2aWNlcyM1NjI5OQotbmFpY3MjNTYyOTk4I0FsbCBPdGhlciBNaXNjZWxsYW5lb3VzIFdhc3RlIE1hbmFnZW1lbnQgU2VydmljZXMjNTYyOTkKLW5haWNzIzYxI0VkdWNhdGlvbmFsIFNlcnZpY2VzIzYxCi1uYWljcyM2MTEjRWR1Y2F0aW9uYWwgU2VydmljZXMjNjEKLW5haWNzIzYxMTEjRWxlbWVudGFyeSBhbmQgU2Vjb25kYXJ5IFNjaG9vbHMjNjExCi1uYWljcyM2MTExMSNFbGVtZW50YXJ5IGFuZCBTZWNvbmRhcnkgU2Nob29scyM2MTExCi1uYWljcyM2MTEyI0p1bmlvciBDb2xsZWdlcyM2MTEKLW5haWNzIzYxMTIxI0p1bmlvciBDb2xsZWdlcyM2MTEyCi1uYWljcyM2MTEzI0NvbGxlZ2VzLCBVbml2ZXJzaXRpZXMsIGFuZCBQcm9mZXNzaW9uYWwgU2Nob29scyM2MTEKLW5haWNzIzYxMTMxI0NvbGxlZ2VzLCBVbml2ZXJzaXRpZXMsIGFuZCBQcm9mZXNzaW9uYWwgU2Nob29scyM2MTEzCi1uYWljcyM2MTE0I0J1c2luZXNzIFNjaG9vbHMgYW5kIENvbXB1dGVyIGFuZCBNYW5hZ2VtZW50IFRyYWluaW5nIzYxMQotbmFpY3MjNjExNDEjQnVzaW5lc3MgYW5kIFNlY3JldGFyaWFsIFNjaG9vbHMjNjExNAotbmFpY3MjNjExNDIjQ29tcHV0ZXIgVHJhaW5pbmcjNjExNAotbmFpY3MjNjExNDMjUHJvZmVzc2lvbmFsIGFuZCBNYW5hZ2VtZW50IERldmVsb3BtZW50IFRyYWluaW5nIzYxMTQKLW5haWNzIzYxMTUjVGVjaG5pY2FsIGFuZCBUcmFkZSBTY2hvb2xzIzYxMQotbmFpY3MjNjExNTEjVGVjaG5pY2FsIGFuZCBUcmFkZSBTY2hvb2xzIzYxMTUKLW5haWNzIzYxMTUxMSNDb3NtZXRvbG9neSBhbmQgQmFyYmVyIFNjaG9vbHMjNjExNTEKLW5haWNzIzYxMTUxMiNGbGlnaHQgVHJhaW5pbmcjNjExNTEKLW5haWNzIzYxMTUxMyNBcHByZW50aWNlc2hpcCBUcmFpbmluZyM2MTE1MQotbmFpY3MjNjExNTE5I090aGVyIFRlY2huaWNhbCBhbmQgVHJhZGUgU2Nob29scyM2MTE1MQotbmFpY3MjNjExNiNPdGhlciBTY2hvb2xzIGFuZCBJbnN0cnVjdGlvbiM2MTEKLW5haWNzIzYxMTYxI0ZpbmUgQXJ0cyBTY2hvb2xzIzYxMTYKLW5haWNzIzYxMTYyI1Nwb3J0cyBhbmQgUmVjcmVhdGlvbiBJbnN0cnVjdGlvbiM2MTE2Ci1uYWljcyM2MTE2MyNMYW5ndWFnZSBTY2hvb2xzIzYxMTYKLW5haWNzIzYxMTY5I0FsbCBPdGhlciBTY2hvb2xzIGFuZCBJbnN0cnVjdGlvbiM2MTE2Ci1uYWljcyM2MTE2OTEjRXhhbSBQcmVwYXJhdGlvbiBhbmQgVHV0b3JpbmcjNjExNjkKLW5haWNzIzYxMTY5MiNBdXRvbW9iaWxlIERyaXZpbmcgU2Nob29scyM2MTE2OQotbmFpY3MjNjExNjk5I0FsbCBPdGhlciBNaXNjZWxsYW5lb3VzIFNjaG9vbHMgYW5kIEluc3RydWN0aW9uIzYxMTY5Ci1uYWljcyM2MTE3I0VkdWNhdGlvbmFsIFN1cHBvcnQgU2VydmljZXMjNjExCi1uYWljcyM2MTE3MSNFZHVjYXRpb25hbCBTdXBwb3J0IFNlcnZpY2VzIzYxMTcKLW5haWNzIzYyI0hlYWx0aCBDYXJlIGFuZCBTb2NpYWwgQXNzaXN0YW5jZSM2MgotbmFpY3MjNjIxI0FtYnVsYXRvcnkgSGVhbHRoIENhcmUgU2VydmljZXMjNjIKLW5haWNzIzYyMTEjT2ZmaWNlcyBvZiBQaHlzaWNpYW5zIzYyMQotbmFpY3MjNjIxMTEjT2ZmaWNlcyBvZiBQaHlzaWNpYW5zIzYyMTEKLW5haWNzIzYyMTExMSNPZmZpY2VzIG9mIFBoeXNpY2lhbnMgKGV4Y2VwdCBNZW50YWwgSGVhbHRoIFNwZWNpYWxpc3RzKSM2MjExMQotbmFpY3MjNjIxMTEyI09mZmljZXMgb2YgUGh5c2ljaWFucywgTWVudGFsIEhlYWx0aCBTcGVjaWFsaXN0cyM2MjExMQotbmFpY3MjNjIxMiNPZmZpY2VzIG9mIERlbnRpc3RzIzYyMQotbmFpY3MjNjIxMjEjT2ZmaWNlcyBvZiBEZW50aXN0cyM2MjEyCi1uYWljcyM2MjEzI09mZmljZXMgb2YgT3RoZXIgSGVhbHRoIFByYWN0aXRpb25lcnMjNjIxCi1uYWljcyM2MjEzMSNPZmZpY2VzIG9mIENoaXJvcHJhY3RvcnMjNjIxMwotbmFpY3MjNjIxMzIjT2ZmaWNlcyBvZiBPcHRvbWV0cmlzdHMjNjIxMwotbmFpY3MjNjIxMzMjT2ZmaWNlcyBvZiBNZW50YWwgSGVhbHRoIFByYWN0aXRpb25lcnMgKGV4Y2VwdCBQaHlzaWNpYW5zKSM2MjEzCi1uYWljcyM2MjEzNCNPZmZpY2VzIG9mIFBoeXNpY2FsLCBPY2N1cGF0aW9uYWwgYW5kIFNwZWVjaCBUaGVyYXBpc3RzLCBhbmQgQXVkaW9sb2dpc3RzIzYyMTMKLW5haWNzIzYyMTM5I09mZmljZXMgb2YgQWxsIE90aGVyIEhlYWx0aCBQcmFjdGl0aW9uZXJzIzYyMTMKLW5haWNzIzYyMTM5MSNPZmZpY2VzIG9mIFBvZGlhdHJpc3RzIzYyMTM5Ci1uYWljcyM2MjEzOTkjT2ZmaWNlcyBvZiBBbGwgT3RoZXIgTWlzY2VsbGFuZW91cyBIZWFsdGggUHJhY3RpdGlvbmVycyM2MjEzOQotbmFpY3MjNjIxNCNPdXRwYXRpZW50IENhcmUgQ2VudGVycyM2MjEKLW5haWNzIzYyMTQxI0ZhbWlseSBQbGFubmluZyBDZW50ZXJzIzYyMTQKLW5haWNzIzYyMTQyI091dHBhdGllbnQgTWVudGFsIEhlYWx0aCBhbmQgU3Vic3RhbmNlIEFidXNlIENlbnRlcnMjNjIxNAotbmFpY3MjNjIxNDkjT3RoZXIgT3V0cGF0aWVudCBDYXJlIENlbnRlcnMjNjIxNAotbmFpY3MjNjIxNDkxI0hNTyBNZWRpY2FsIENlbnRlcnMjNjIxNDkKLW5haWNzIzYyMTQ5MiNLaWRuZXkgRGlhbHlzaXMgQ2VudGVycyM2MjE0OQotbmFpY3MjNjIxNDkzI0ZyZWVzdGFuZGluZyBBbWJ1bGF0b3J5IFN1cmdpY2FsIGFuZCBFbWVyZ2VuY3kgQ2VudGVycyM2MjE0OQotbmFpY3MjNjIxNDk4I0FsbCBPdGhlciBPdXRwYXRpZW50IENhcmUgQ2VudGVycyM2MjE0OQotbmFpY3MjNjIxNSNNZWRpY2FsIGFuZCBEaWFnbm9zdGljIExhYm9yYXRvcmllcyM2MjEKLW5haWNzIzYyMTUxI01lZGljYWwgYW5kIERpYWdub3N0aWMgTGFib3JhdG9yaWVzIzYyMTUKLW5haWNzIzYyMTUxMSNNZWRpY2FsIExhYm9yYXRvcmllcyM2MjE1MQotbmFpY3MjNjIxNTEyI0RpYWdub3N0aWMgSW1hZ2luZyBDZW50ZXJzIzYyMTUxCi1uYWljcyM2MjE2I0hvbWUgSGVhbHRoIENhcmUgU2VydmljZXMjNjIxCi1uYWljcyM2MjE2MSNIb21lIEhlYWx0aCBDYXJlIFNlcnZpY2VzIzYyMTYKLW5haWNzIzYyMTkjT3RoZXIgQW1idWxhdG9yeSBIZWFsdGggQ2FyZSBTZXJ2aWNlcyM2MjEKLW5haWNzIzYyMTkxI0FtYnVsYW5jZSBTZXJ2aWNlcyM2MjE5Ci1uYWljcyM2MjE5OSNBbGwgT3RoZXIgQW1idWxhdG9yeSBIZWFsdGggQ2FyZSBTZXJ2aWNlcyM2MjE5Ci1uYWljcyM2MjE5OTEjQmxvb2QgYW5kIE9yZ2FuIEJhbmtzIzYyMTk5Ci1uYWljcyM2MjE5OTkjQWxsIE90aGVyIE1pc2NlbGxhbmVvdXMgQW1idWxhdG9yeSBIZWFsdGggQ2FyZSBTZXJ2aWNlcyM2MjE5OQotbmFpY3MjNjIyI0hvc3BpdGFscyM2MgotbmFpY3MjNjIyMSNHZW5lcmFsIE1lZGljYWwgYW5kIFN1cmdpY2FsIEhvc3BpdGFscyM2MjIKLW5haWNzIzYyMjExI0dlbmVyYWwgTWVkaWNhbCBhbmQgU3VyZ2ljYWwgSG9zcGl0YWxzIzYyMjEKLW5haWNzIzYyMjIjUHN5Y2hpYXRyaWMgYW5kIFN1YnN0YW5jZSBBYnVzZSBIb3NwaXRhbHMjNjIyCi1uYWljcyM2MjIyMSNQc3ljaGlhdHJpYyBhbmQgU3Vic3RhbmNlIEFidXNlIEhvc3BpdGFscyM2MjIyCi1uYWljcyM2MjIzI1NwZWNpYWx0eSAoZXhjZXB0IFBzeWNoaWF0cmljIGFuZCBTdWJzdGFuY2UgQWJ1c2UpIEhvc3BpdGFscyM2MjIKLW5haWNzIzYyMjMxI1NwZWNpYWx0eSAoZXhjZXB0IFBzeWNoaWF0cmljIGFuZCBTdWJzdGFuY2UgQWJ1c2UpIEhvc3BpdGFscyM2MjIzCi1uYWljcyM2MjMjTnVyc2luZyBhbmQgUmVzaWRlbnRpYWwgQ2FyZSBGYWNpbGl0aWVzIzYyCi1uYWljcyM2MjMxI051cnNpbmcgQ2FyZSBGYWNpbGl0aWVzIzYyMwotbmFpY3MjNjIzMTEjTnVyc2luZyBDYXJlIEZhY2lsaXRpZXMjNjIzMQotbmFpY3MjNjIzMiNSZXNpZGVudGlhbCBNZW50YWwgUmV0YXJkYXRpb24sIE1lbnRhbCBIZWFsdGggYW5kIFN1YnN0YW5jZSBBYnVzZSBGYWNpbGl0aWVzIzYyMwotbmFpY3MjNjIzMjEjUmVzaWRlbnRpYWwgTWVudGFsIFJldGFyZGF0aW9uIEZhY2lsaXRpZXMjNjIzMgotbmFpY3MjNjIzMjIjUmVzaWRlbnRpYWwgTWVudGFsIEhlYWx0aCBhbmQgU3Vic3RhbmNlIEFidXNlIEZhY2lsaXRpZXMjNjIzMgotbmFpY3MjNjIzMyNDb21tdW5pdHkgQ2FyZSBGYWNpbGl0aWVzIGZvciB0aGUgRWxkZXJseSM2MjMKLW5haWNzIzYyMzMxI0NvbW11bml0eSBDYXJlIEZhY2lsaXRpZXMgZm9yIHRoZSBFbGRlcmx5IzYyMzMKLW5haWNzIzYyMzMxMSNDb250aW51aW5nIENhcmUgUmV0aXJlbWVudCBDb21tdW5pdGllcyM2MjMzMQotbmFpY3MjNjIzMzEyI0hvbWVzIGZvciB0aGUgRWxkZXJseSM2MjMzMQotbmFpY3MjNjIzOSNPdGhlciBSZXNpZGVudGlhbCBDYXJlIEZhY2lsaXRpZXMjNjIzCi1uYWljcyM2MjM5OSNPdGhlciBSZXNpZGVudGlhbCBDYXJlIEZhY2lsaXRpZXMjNjIzOQotbmFpY3MjNjI0I1NvY2lhbCBBc3Npc3RhbmNlIzYyCi1uYWljcyM2MjQxI0luZGl2aWR1YWwgYW5kIEZhbWlseSBTZXJ2aWNlcyM2MjQKLW5haWNzIzYyNDExI0NoaWxkIGFuZCBZb3V0aCBTZXJ2aWNlcyM2MjQxCi1uYWljcyM2MjQxMiNTZXJ2aWNlcyBmb3IgdGhlIEVsZGVybHkgYW5kIFBlcnNvbnMgd2l0aCBEaXNhYmlsaXRpZXMjNjI0MQotbmFpY3MjNjI0MTkjT3RoZXIgSW5kaXZpZHVhbCBhbmQgRmFtaWx5IFNlcnZpY2VzIzYyNDEKLW5haWNzIzYyNDIjQ29tbXVuaXR5IEZvb2QgYW5kIEhvdXNpbmcsIGFuZCBFbWVyZ2VuY3kgYW5kIE90aGVyIFJlbGllZiBTZXJ2aWNlcyM2MjQKLW5haWNzIzYyNDIxI0NvbW11bml0eSBGb29kIFNlcnZpY2VzIzYyNDIKLW5haWNzIzYyNDIyI0NvbW11bml0eSBIb3VzaW5nIFNlcnZpY2VzIzYyNDIKLW5haWNzIzYyNDIyMSNUZW1wb3JhcnkgU2hlbHRlcnMjNjI0MjIKLW5haWNzIzYyNDIyOSNPdGhlciBDb21tdW5pdHkgSG91c2luZyBTZXJ2aWNlcyM2MjQyMgotbmFpY3MjNjI0MjMjRW1lcmdlbmN5IGFuZCBPdGhlciBSZWxpZWYgU2VydmljZXMjNjI0MgotbmFpY3MjNjI0MyNWb2NhdGlvbmFsIFJlaGFiaWxpdGF0aW9uIFNlcnZpY2VzIzYyNAotbmFpY3MjNjI0MzEjVm9jYXRpb25hbCBSZWhhYmlsaXRhdGlvbiBTZXJ2aWNlcyM2MjQzCi1uYWljcyM2MjQ0I0NoaWxkIERheSBDYXJlIFNlcnZpY2VzIzYyNAotbmFpY3MjNjI0NDEjQ2hpbGQgRGF5IENhcmUgU2VydmljZXMjNjI0NAotbmFpY3MjNzEjQXJ0cywgRW50ZXJ0YWlubWVudCwgYW5kIFJlY3JlYXRpb24jNzEKLW5haWNzIzcxMSNQZXJmb3JtaW5nIEFydHMsIFNwZWN0YXRvciBTcG9ydHMsIGFuZCBSZWxhdGVkIEluZHVzdHJpZXMjNzEKLW5haWNzIzcxMTEjUGVyZm9ybWluZyBBcnRzIENvbXBhbmllcyM3MTEKLW5haWNzIzcxMTExI1RoZWF0ZXIgQ29tcGFuaWVzIGFuZCBEaW5uZXIgVGhlYXRlcnMjNzExMQotbmFpY3MjNzExMTIjRGFuY2UgQ29tcGFuaWVzIzcxMTEKLW5haWNzIzcxMTEzI011c2ljYWwgR3JvdXBzIGFuZCBBcnRpc3RzIzcxMTEKLW5haWNzIzcxMTE5I090aGVyIFBlcmZvcm1pbmcgQXJ0cyBDb21wYW5pZXMjNzExMQotbmFpY3MjNzExMiNTcGVjdGF0b3IgU3BvcnRzIzcxMQotbmFpY3MjNzExMjEjU3BlY3RhdG9yIFNwb3J0cyM3MTEyCi1uYWljcyM3MTEyMTEjU3BvcnRzIFRlYW1zIGFuZCBDbHVicyM3MTEyMQotbmFpY3MjNzExMjEyI1JhY2V0cmFja3MjNzExMjEKLW5haWNzIzcxMTIxOSNPdGhlciBTcGVjdGF0b3IgU3BvcnRzIzcxMTIxCi1uYWljcyM3MTEzI1Byb21vdGVycyBvZiBQZXJmb3JtaW5nIEFydHMsIFNwb3J0cywgYW5kIFNpbWlsYXIgRXZlbnRzIzcxMQotbmFpY3MjNzExMzEjUHJvbW90ZXJzIG9mIFBlcmZvcm1pbmcgQXJ0cywgU3BvcnRzLCBhbmQgU2ltaWxhciBFdmVudHMgd2l0aCBGYWNpbGl0aWVzIzcxMTMKLW5haWNzIzcxMTMyI1Byb21vdGVycyBvZiBQZXJmb3JtaW5nIEFydHMsIFNwb3J0cywgYW5kIFNpbWlsYXIgRXZlbnRzIHdpdGhvdXQgRmFjaWxpdGllcyM3MTEzCi1uYWljcyM3MTE0I0FnZW50cyBhbmQgTWFuYWdlcnMgZm9yIEFydGlzdHMsIEF0aGxldGVzLCBFbnRlcnRhaW5lcnMsIGFuZCBPdGhlciBQdWJsaWMgRmlndXJlcyM3MTEKLW5haWNzIzcxMTQxI0FnZW50cyBhbmQgTWFuYWdlcnMgZm9yIEFydGlzdHMsIEF0aGxldGVzLCBFbnRlcnRhaW5lcnMsIGFuZCBPdGhlciBQdWJsaWMgRmlndXJlcyM3MTE0Ci1uYWljcyM3MTE1I0luZGVwZW5kZW50IEFydGlzdHMsIFdyaXRlcnMsIGFuZCBQZXJmb3JtZXJzIzcxMQotbmFpY3MjNzExNTEjSW5kZXBlbmRlbnQgQXJ0aXN0cywgV3JpdGVycywgYW5kIFBlcmZvcm1lcnMjNzExNQotbmFpY3MjNzEyI011c2V1bXMsIEhpc3RvcmljYWwgU2l0ZXMsIGFuZCBTaW1pbGFyIEluc3RpdHV0aW9ucyM3MQotbmFpY3MjNzEyMSNNdXNldW1zLCBIaXN0b3JpY2FsIFNpdGVzLCBhbmQgU2ltaWxhciBJbnN0aXR1dGlvbnMjNzEyCi1uYWljcyM3MTIxMSNNdXNldW1zIzcxMjEKLW5haWNzIzcxMjEyI0hpc3RvcmljYWwgU2l0ZXMjNzEyMQotbmFpY3MjNzEyMTMjWm9vcyBhbmQgQm90YW5pY2FsIEdhcmRlbnMjNzEyMQotbmFpY3MjNzEyMTkjTmF0dXJlIFBhcmtzIGFuZCBPdGhlciBTaW1pbGFyIEluc3RpdHV0aW9ucyM3MTIxCi1uYWljcyM3MTMjQW11c2VtZW50LCBHYW1ibGluZywgYW5kIFJlY3JlYXRpb24gSW5kdXN0cmllcyM3MQotbmFpY3MjNzEzMSNBbXVzZW1lbnQgUGFya3MgYW5kIEFyY2FkZXMjNzEzCi1uYWljcyM3MTMxMSNBbXVzZW1lbnQgYW5kIFRoZW1lIFBhcmtzIzcxMzEKLW5haWNzIzcxMzEyI0FtdXNlbWVudCBBcmNhZGVzIzcxMzEKLW5haWNzIzcxMzIjR2FtYmxpbmcgSW5kdXN0cmllcyM3MTMKLW5haWNzIzcxMzIxI0Nhc2lub3MgKGV4Y2VwdCBDYXNpbm8gSG90ZWxzKSM3MTMyCi1uYWljcyM3MTMyOSNPdGhlciBHYW1ibGluZyBJbmR1c3RyaWVzIzcxMzIKLW5haWNzIzcxMzkjT3RoZXIgQW11c2VtZW50IGFuZCBSZWNyZWF0aW9uIEluZHVzdHJpZXMjNzEzCi1uYWljcyM3MTM5MSNHb2xmIENvdXJzZXMgYW5kIENvdW50cnkgQ2x1YnMjNzEzOQotbmFpY3MjNzEzOTIjU2tpaW5nIEZhY2lsaXRpZXMjNzEzOQotbmFpY3MjNzEzOTMjTWFyaW5hcyM3MTM5Ci1uYWljcyM3MTM5NCNGaXRuZXNzIGFuZCBSZWNyZWF0aW9uYWwgU3BvcnRzIENlbnRlcnMjNzEzOQotbmFpY3MjNzEzOTUjQm93bGluZyBDZW50ZXJzIzcxMzkKLW5haWNzIzcxMzk5I0FsbCBPdGhlciBBbXVzZW1lbnQgYW5kIFJlY3JlYXRpb24gSW5kdXN0cmllcyM3MTM5Ci1uYWljcyM3MiNBY2NvbW1vZGF0aW9uIGFuZCBGb29kIFNlcnZpY2VzIzcyCi1uYWljcyM3MjEjQWNjb21tb2RhdGlvbiM3MgotbmFpY3MjNzIxMSNUcmF2ZWxlciBBY2NvbW1vZGF0aW9uIzcyMQotbmFpY3MjNzIxMTEjSG90ZWxzIChleGNlcHQgQ2FzaW5vIEhvdGVscykgYW5kIE1vdGVscyM3MjExCi1uYWljcyM3MjExMiNDYXNpbm8gSG90ZWxzIzcyMTEKLW5haWNzIzcyMTE5I090aGVyIFRyYXZlbGVyIEFjY29tbW9kYXRpb24jNzIxMQotbmFpY3MjNzIxMTkxI0JlZC1hbmQtQnJlYWtmYXN0IElubnMjNzIxMTkKLW5haWNzIzcyMTE5OSNBbGwgT3RoZXIgVHJhdmVsZXIgQWNjb21tb2RhdGlvbiM3MjExOQotbmFpY3MjNzIxMiNSViAoUmVjcmVhdGlvbmFsIFZlaGljbGUpIFBhcmtzIGFuZCBSZWNyZWF0aW9uYWwgQ2FtcHMjNzIxCi1uYWljcyM3MjEyMSNSViAoUmVjcmVhdGlvbmFsIFZlaGljbGUpIFBhcmtzIGFuZCBSZWNyZWF0aW9uYWwgQ2FtcHMjNzIxMgotbmFpY3MjNzIxMjExI1JWIChSZWNyZWF0aW9uYWwgVmVoaWNsZSkgUGFya3MgYW5kIENhbXBncm91bmRzIzcyMTIxCi1uYWljcyM3MjEyMTQjUmVjcmVhdGlvbmFsIGFuZCBWYWNhdGlvbiBDYW1wcyAoZXhjZXB0IENhbXBncm91bmRzKSM3MjEyMQotbmFpY3MjNzIxMyNSb29taW5nIGFuZCBCb2FyZGluZyBIb3VzZXMjNzIxCi1uYWljcyM3MjEzMSNSb29taW5nIGFuZCBCb2FyZGluZyBIb3VzZXMjNzIxMwotbmFpY3MjNzIyI0Zvb2QgU2VydmljZXMgYW5kIERyaW5raW5nIFBsYWNlcyM3MgotbmFpY3MjNzIyMSNGdWxsLVNlcnZpY2UgUmVzdGF1cmFudHMjNzIyCi1uYWljcyM3MjIxMSNGdWxsLVNlcnZpY2UgUmVzdGF1cmFudHMjNzIyMQotbmFpY3MjNzIyMiNMaW1pdGVkLVNlcnZpY2UgRWF0aW5nIFBsYWNlcyM3MjIKLW5haWNzIzcyMjIxI0xpbWl0ZWQtU2VydmljZSBFYXRpbmcgUGxhY2VzIzcyMjIKLW5haWNzIzcyMjIxMSNMaW1pdGVkLVNlcnZpY2UgUmVzdGF1cmFudHMjNzIyMjEKLW5haWNzIzcyMjIxMiNDYWZldGVyaWFzIzcyMjIxCi1uYWljcyM3MjIyMTMjU25hY2sgYW5kIE5vbmFsY29ob2xpYyBCZXZlcmFnZSBCYXJzIzcyMjIxCi1uYWljcyM3MjIzI1NwZWNpYWwgRm9vZCBTZXJ2aWNlcyM3MjIKLW5haWNzIzcyMjMxI0Zvb2QgU2VydmljZSBDb250cmFjdG9ycyM3MjIzCi1uYWljcyM3MjIzMiNDYXRlcmVycyM3MjIzCi1uYWljcyM3MjIzMyNNb2JpbGUgRm9vZCBTZXJ2aWNlcyM3MjIzCi1uYWljcyM3MjI0I0RyaW5raW5nIFBsYWNlcyAoQWxjb2hvbGljIEJldmVyYWdlcykjNzIyCi1uYWljcyM3MjI0MSNEcmlua2luZyBQbGFjZXMgKEFsY29ob2xpYyBCZXZlcmFnZXMpIzcyMjQKLW5haWNzIzgxI090aGVyIFNlcnZpY2VzIChleGNlcHQgUHVibGljIEFkbWluaXN0cmF0aW9uKSM4MQotbmFpY3MjODExI1JlcGFpciBhbmQgTWFpbnRlbmFuY2UjODEKLW5haWNzIzgxMTEjQXV0b21vdGl2ZSBSZXBhaXIgYW5kIE1haW50ZW5hbmNlIzgxMQotbmFpY3MjODExMTEjQXV0b21vdGl2ZSBNZWNoYW5pY2FsIGFuZCBFbGVjdHJpY2FsIFJlcGFpciBhbmQgTWFpbnRlbmFuY2UjODExMQotbmFpY3MjODExMTExI0dlbmVyYWwgQXV0b21vdGl2ZSBSZXBhaXIjODExMTEKLW5haWNzIzgxMTExMiNBdXRvbW90aXZlIEV4aGF1c3QgU3lzdGVtIFJlcGFpciM4MTExMQotbmFpY3MjODExMTEzI0F1dG9tb3RpdmUgVHJhbnNtaXNzaW9uIFJlcGFpciM4MTExMQotbmFpY3MjODExMTE4I090aGVyIEF1dG9tb3RpdmUgTWVjaGFuaWNhbCBhbmQgRWxlY3RyaWNhbCBSZXBhaXIgYW5kIE1haW50ZW5hbmNlIzgxMTExCi1uYWljcyM4MTExMiNBdXRvbW90aXZlIEJvZHksIFBhaW50LCBJbnRlcmlvciwgYW5kIEdsYXNzIFJlcGFpciM4MTExCi1uYWljcyM4MTExMjEjQXV0b21vdGl2ZSBCb2R5LCBQYWludCwgYW5kIEludGVyaW9yIFJlcGFpciBhbmQgTWFpbnRlbmFuY2UjODExMTIKLW5haWNzIzgxMTEyMiNBdXRvbW90aXZlIEdsYXNzIFJlcGxhY2VtZW50IFNob3BzIzgxMTEyCi1uYWljcyM4MTExOSNPdGhlciBBdXRvbW90aXZlIFJlcGFpciBhbmQgTWFpbnRlbmFuY2UjODExMQotbmFpY3MjODExMTkxI0F1dG9tb3RpdmUgT2lsIENoYW5nZSBhbmQgTHVicmljYXRpb24gU2hvcHMjODExMTkKLW5haWNzIzgxMTE5MiNDYXIgV2FzaGVzIzgxMTE5Ci1uYWljcyM4MTExOTgjQWxsIE90aGVyIEF1dG9tb3RpdmUgUmVwYWlyIGFuZCBNYWludGVuYW5jZSM4MTExOQotbmFpY3MjODExMiNFbGVjdHJvbmljIGFuZCBQcmVjaXNpb24gRXF1aXBtZW50IFJlcGFpciBhbmQgTWFpbnRlbmFuY2UjODExCi1uYWljcyM4MTEyMSNFbGVjdHJvbmljIGFuZCBQcmVjaXNpb24gRXF1aXBtZW50IFJlcGFpciBhbmQgTWFpbnRlbmFuY2UjODExMgotbmFpY3MjODExMjExI0NvbnN1bWVyIEVsZWN0cm9uaWNzIFJlcGFpciBhbmQgTWFpbnRlbmFuY2UjODExMjEKLW5haWNzIzgxMTIxMiNDb21wdXRlciBhbmQgT2ZmaWNlIE1hY2hpbmUgUmVwYWlyIGFuZCBNYWludGVuYW5jZSM4MTEyMQotbmFpY3MjODExMjEzI0NvbW11bmljYXRpb24gRXF1aXBtZW50IFJlcGFpciBhbmQgTWFpbnRlbmFuY2UjODExMjEKLW5haWNzIzgxMTIxOSNPdGhlciBFbGVjdHJvbmljIGFuZCBQcmVjaXNpb24gRXF1aXBtZW50IFJlcGFpciBhbmQgTWFpbnRlbmFuY2UjODExMjEKLW5haWNzIzgxMTMjQ29tbWVyY2lhbCBhbmQgSW5kdXN0cmlhbCBNYWNoaW5lcnkgYW5kIEVxdWlwbWVudCAoZXhjZXB0IEF1dG9tb3RpdmUgYW5kIEVsZWN0cm9uaWMpIFJlcGFpciBhbmQgTWFpbnRlbmFuY2UjODExCi1uYWljcyM4MTEzMSNDb21tZXJjaWFsIGFuZCBJbmR1c3RyaWFsIE1hY2hpbmVyeSBhbmQgRXF1aXBtZW50IChleGNlcHQgQXV0b21vdGl2ZSBhbmQgRWxlY3Ryb25pYykgUmVwYWlyIGFuZCBNYWludGVuYW5jZSM4MTEzCi1uYWljcyM4MTE0I1BlcnNvbmFsIGFuZCBIb3VzZWhvbGQgR29vZHMgUmVwYWlyIGFuZCBNYWludGVuYW5jZSM4MTEKLW5haWNzIzgxMTQxI0hvbWUgYW5kIEdhcmRlbiBFcXVpcG1lbnQgYW5kIEFwcGxpYW5jZSBSZXBhaXIgYW5kIE1haW50ZW5hbmNlIzgxMTQKLW5haWNzIzgxMTQxMSNIb21lIGFuZCBHYXJkZW4gRXF1aXBtZW50IFJlcGFpciBhbmQgTWFpbnRlbmFuY2UjODExNDEKLW5haWNzIzgxMTQxMiNBcHBsaWFuY2UgUmVwYWlyIGFuZCBNYWludGVuYW5jZSM4MTE0MQotbmFpY3MjODExNDIjUmV1cGhvbHN0ZXJ5IGFuZCBGdXJuaXR1cmUgUmVwYWlyIzgxMTQKLW5haWNzIzgxMTQzI0Zvb3R3ZWFyIGFuZCBMZWF0aGVyIEdvb2RzIFJlcGFpciM4MTE0Ci1uYWljcyM4MTE0OSNPdGhlciBQZXJzb25hbCBhbmQgSG91c2Vob2xkIEdvb2RzIFJlcGFpciBhbmQgTWFpbnRlbmFuY2UjODExNAotbmFpY3MjODEyI1BlcnNvbmFsIGFuZCBMYXVuZHJ5IFNlcnZpY2VzIzgxCi1uYWljcyM4MTIxI1BlcnNvbmFsIENhcmUgU2VydmljZXMjODEyCi1uYWljcyM4MTIxMSNIYWlyLCBOYWlsLCBhbmQgU2tpbiBDYXJlIFNlcnZpY2VzIzgxMjEKLW5haWNzIzgxMjExMSNCYXJiZXIgU2hvcHMjODEyMTEKLW5haWNzIzgxMjExMiNCZWF1dHkgU2Fsb25zIzgxMjExCi1uYWljcyM4MTIxMTMjTmFpbCBTYWxvbnMjODEyMTEKLW5haWNzIzgxMjE5I090aGVyIFBlcnNvbmFsIENhcmUgU2VydmljZXMjODEyMQotbmFpY3MjODEyMTkxI0RpZXQgYW5kIFdlaWdodCBSZWR1Y2luZyBDZW50ZXJzIzgxMjE5Ci1uYWljcyM4MTIxOTkjT3RoZXIgUGVyc29uYWwgQ2FyZSBTZXJ2aWNlcyM4MTIxOQotbmFpY3MjODEyMiNEZWF0aCBDYXJlIFNlcnZpY2VzIzgxMgotbmFpY3MjODEyMjEjRnVuZXJhbCBIb21lcyBhbmQgRnVuZXJhbCBTZXJ2aWNlcyM4MTIyCi1uYWljcyM4MTIyMiNDZW1ldGVyaWVzIGFuZCBDcmVtYXRvcmllcyM4MTIyCi1uYWljcyM4MTIzI0RyeWNsZWFuaW5nIGFuZCBMYXVuZHJ5IFNlcnZpY2VzIzgxMgotbmFpY3MjODEyMzEjQ29pbi1PcGVyYXRlZCBMYXVuZHJpZXMgYW5kIERyeWNsZWFuZXJzIzgxMjMKLW5haWNzIzgxMjMyI0RyeWNsZWFuaW5nIGFuZCBMYXVuZHJ5IFNlcnZpY2VzIChleGNlcHQgQ29pbi1PcGVyYXRlZCkjODEyMwotbmFpY3MjODEyMzMjTGluZW4gYW5kIFVuaWZvcm0gU3VwcGx5IzgxMjMKLW5haWNzIzgxMjMzMSNMaW5lbiBTdXBwbHkjODEyMzMKLW5haWNzIzgxMjMzMiNJbmR1c3RyaWFsIExhdW5kZXJlcnMjODEyMzMKLW5haWNzIzgxMjkjT3RoZXIgUGVyc29uYWwgU2VydmljZXMjODEyCi1uYWljcyM4MTI5MSNQZXQgQ2FyZSAoZXhjZXB0IFZldGVyaW5hcnkpIFNlcnZpY2VzIzgxMjkKLW5haWNzIzgxMjkyI1Bob3RvZmluaXNoaW5nIzgxMjkKLW5haWNzIzgxMjkyMSNQaG90b2ZpbmlzaGluZyBMYWJvcmF0b3JpZXMgKGV4Y2VwdCBPbmUtSG91cikjODEyOTIKLW5haWNzIzgxMjkyMiNPbmUtSG91ciBQaG90b2ZpbmlzaGluZyM4MTI5MgotbmFpY3MjODEyOTMjUGFya2luZyBMb3RzIGFuZCBHYXJhZ2VzIzgxMjkKLW5haWNzIzgxMjk5I0FsbCBPdGhlciBQZXJzb25hbCBTZXJ2aWNlcyM4MTI5Ci1uYWljcyM4MTMjUmVsaWdpb3VzLCBHcmFudG1ha2luZywgQ2l2aWMsIFByb2Zlc3Npb25hbCwgYW5kIFNpbWlsYXIgT3JnYW5pemF0aW9ucyM4MQotbmFpY3MjODEzMSNSZWxpZ2lvdXMgT3JnYW5pemF0aW9ucyM4MTMKLW5haWNzIzgxMzExI1JlbGlnaW91cyBPcmdhbml6YXRpb25zIzgxMzEKLW5haWNzIzgxMzIjR3JhbnRtYWtpbmcgYW5kIEdpdmluZyBTZXJ2aWNlcyM4MTMKLW5haWNzIzgxMzIxI0dyYW50bWFraW5nIGFuZCBHaXZpbmcgU2VydmljZXMjODEzMgotbmFpY3MjODEzMjExI0dyYW50bWFraW5nIEZvdW5kYXRpb25zIzgxMzIxCi1uYWljcyM4MTMyMTIjVm9sdW50YXJ5IEhlYWx0aCBPcmdhbml6YXRpb25zIzgxMzIxCi1uYWljcyM4MTMyMTkjT3RoZXIgR3JhbnRtYWtpbmcgYW5kIEdpdmluZyBTZXJ2aWNlcyM4MTMyMQotbmFpY3MjODEzMyNTb2NpYWwgQWR2b2NhY3kgT3JnYW5pemF0aW9ucyM4MTMKLW5haWNzIzgxMzMxI1NvY2lhbCBBZHZvY2FjeSBPcmdhbml6YXRpb25zIzgxMzMKLW5haWNzIzgxMzMxMSNIdW1hbiBSaWdodHMgT3JnYW5pemF0aW9ucyM4MTMzMQotbmFpY3MjODEzMzEyI0Vudmlyb25tZW50LCBDb25zZXJ2YXRpb24gYW5kIFdpbGRsaWZlIE9yZ2FuaXphdGlvbnMjODEzMzEKLW5haWNzIzgxMzMxOSNPdGhlciBTb2NpYWwgQWR2b2NhY3kgT3JnYW5pemF0aW9ucyM4MTMzMQotbmFpY3MjODEzNCNDaXZpYyBhbmQgU29jaWFsIE9yZ2FuaXphdGlvbnMjODEzCi1uYWljcyM4MTM0MSNDaXZpYyBhbmQgU29jaWFsIE9yZ2FuaXphdGlvbnMjODEzNAotbmFpY3MjODEzOSNCdXNpbmVzcywgUHJvZmVzc2lvbmFsLCBMYWJvciwgUG9saXRpY2FsLCBhbmQgU2ltaWxhciBPcmdhbml6YXRpb25zIzgxMwotbmFpY3MjODEzOTEjQnVzaW5lc3MgQXNzb2NpYXRpb25zIzgxMzkKLW5haWNzIzgxMzkyI1Byb2Zlc3Npb25hbCBPcmdhbml6YXRpb25zIzgxMzkKLW5haWNzIzgxMzkzI0xhYm9yIFVuaW9ucyBhbmQgU2ltaWxhciBMYWJvciBPcmdhbml6YXRpb25zIzgxMzkKLW5haWNzIzgxMzk0I1BvbGl0aWNhbCBPcmdhbml6YXRpb25zIzgxMzkKLW5haWNzIzgxMzk5I090aGVyIFNpbWlsYXIgT3JnYW5pemF0aW9ucyAoZXhjZXB0IEJ1c2luZXNzLCBQcm9mZXNzaW9uYWwsIExhYm9yLCBhbmQgUG9saXRpY2FsIE9yZ2FuaXphdGlvbnMpIzgxMzkKLW5haWNzIzgxNCNQcml2YXRlIEhvdXNlaG9sZHMjODEKLW5haWNzIzgxNDEjUHJpdmF0ZSBIb3VzZWhvbGRzIzgxNAotbmFpY3MjODE0MTEjUHJpdmF0ZSBIb3VzZWhvbGRzIzgxNDEKLW5haWNzIzkyI1B1YmxpYyBBZG1pbmlzdHJhdGlvbiM5MgotbmFpY3MjOTIxI0V4ZWN1dGl2ZSwgTGVnaXNsYXRpdmUsIGFuZCBPdGhlciBHZW5lcmFsIEdvdmVybm1lbnQgU3VwcG9ydCM5MgotbmFpY3MjOTIxMSNFeGVjdXRpdmUsIExlZ2lzbGF0aXZlLCBhbmQgT3RoZXIgR2VuZXJhbCBHb3Zlcm5tZW50IFN1cHBvcnQjOTIxCi1uYWljcyM5MjExMSNFeGVjdXRpdmUgT2ZmaWNlcyM5MjExCi1uYWljcyM5MjExMiNMZWdpc2xhdGl2ZSBCb2RpZXMjOTIxMQotbmFpY3MjOTIxMTMjUHVibGljIEZpbmFuY2UgQWN0aXZpdGllcyM5MjExCi1uYWljcyM5MjExNCNFeGVjdXRpdmUgYW5kIExlZ2lzbGF0aXZlIE9mZmljZXMsIENvbWJpbmVkIzkyMTEKLW5haWNzIzkyMTE1I0FtZXJpY2FuIEluZGlhbiBhbmQgQWxhc2thIE5hdGl2ZSBUcmliYWwgR292ZXJubWVudHMjOTIxMQotbmFpY3MjOTIxMTkjT3RoZXIgR2VuZXJhbCBHb3Zlcm5tZW50IFN1cHBvcnQjOTIxMQotbmFpY3MjOTIyI0p1c3RpY2UsIFB1YmxpYyBPcmRlciwgYW5kIFNhZmV0eSBBY3Rpdml0aWVzIzkyCi1uYWljcyM5MjIxI0p1c3RpY2UsIFB1YmxpYyBPcmRlciwgYW5kIFNhZmV0eSBBY3Rpdml0aWVzIzkyMgotbmFpY3MjOTIyMTEjQ291cnRzIzkyMjEKLW5haWNzIzkyMjEyI1BvbGljZSBQcm90ZWN0aW9uIzkyMjEKLW5haWNzIzkyMjEzI0xlZ2FsIENvdW5zZWwgYW5kIFByb3NlY3V0aW9uIzkyMjEKLW5haWNzIzkyMjE0I0NvcnJlY3Rpb25hbCBJbnN0aXR1dGlvbnMjOTIyMQotbmFpY3MjOTIyMTUjUGFyb2xlIE9mZmljZXMgYW5kIFByb2JhdGlvbiBPZmZpY2VzIzkyMjEKLW5haWNzIzkyMjE2I0ZpcmUgUHJvdGVjdGlvbiM5MjIxCi1uYWljcyM5MjIxOSNPdGhlciBKdXN0aWNlLCBQdWJsaWMgT3JkZXIsIGFuZCBTYWZldHkgQWN0aXZpdGllcyM5MjIxCi1uYWljcyM5MjMjQWRtaW5pc3RyYXRpb24gb2YgSHVtYW4gUmVzb3VyY2UgUHJvZ3JhbXMjOTIKLW5haWNzIzkyMzEjQWRtaW5pc3RyYXRpb24gb2YgSHVtYW4gUmVzb3VyY2UgUHJvZ3JhbXMjOTIzCi1uYWljcyM5MjMxMSNBZG1pbmlzdHJhdGlvbiBvZiBFZHVjYXRpb24gUHJvZ3JhbXMjOTIzMQotbmFpY3MjOTIzMTIjQWRtaW5pc3RyYXRpb24gb2YgUHVibGljIEhlYWx0aCBQcm9ncmFtcyM5MjMxCi1uYWljcyM5MjMxMyNBZG1pbmlzdHJhdGlvbiBvZiBIdW1hbiBSZXNvdXJjZSBQcm9ncmFtcyAoZXhjZXB0IEVkdWNhdGlvbiwgUHVibGljIEhlYWx0aCwgYW5kIFZldGVyYW5zJyBBZmZhaXJzIFByb2dyYW1zKSM5MjMxCi1uYWljcyM5MjMxNCNBZG1pbmlzdHJhdGlvbiBvZiBWZXRlcmFucycgQWZmYWlycyM5MjMxCi1uYWljcyM5MjQjQWRtaW5pc3RyYXRpb24gb2YgRW52aXJvbm1lbnRhbCBRdWFsaXR5IFByb2dyYW1zIzkyCi1uYWljcyM5MjQxI0FkbWluaXN0cmF0aW9uIG9mIEVudmlyb25tZW50YWwgUXVhbGl0eSBQcm9ncmFtcyM5MjQKLW5haWNzIzkyNDExI0FkbWluaXN0cmF0aW9uIG9mIEFpciBhbmQgV2F0ZXIgUmVzb3VyY2UgYW5kIFNvbGlkIFdhc3RlIE1hbmFnZW1lbnQgUHJvZ3JhbXMjOTI0MQotbmFpY3MjOTI0MTIjQWRtaW5pc3RyYXRpb24gb2YgQ29uc2VydmF0aW9uIFByb2dyYW1zIzkyNDEKLW5haWNzIzkyNSNBZG1pbmlzdHJhdGlvbiBvZiBIb3VzaW5nIFByb2dyYW1zLCBVcmJhbiBQbGFubmluZywgYW5kIENvbW11bml0eSBEZXZlbG9wbWVudCM5MgotbmFpY3MjOTI1MSNBZG1pbmlzdHJhdGlvbiBvZiBIb3VzaW5nIFByb2dyYW1zLCBVcmJhbiBQbGFubmluZywgYW5kIENvbW11bml0eSBEZXZlbG9wbWVudCM5MjUKLW5haWNzIzkyNTExI0FkbWluaXN0cmF0aW9uIG9mIEhvdXNpbmcgUHJvZ3JhbXMjOTI1MQotbmFpY3MjOTI1MTIjQWRtaW5pc3RyYXRpb24gb2YgVXJiYW4gUGxhbm5pbmcgYW5kIENvbW11bml0eSBhbmQgUnVyYWwgRGV2ZWxvcG1lbnQjOTI1MQotbmFpY3MjOTI2I0FkbWluaXN0cmF0aW9uIG9mIEVjb25vbWljIFByb2dyYW1zIzkyCi1uYWljcyM5MjYxI0FkbWluaXN0cmF0aW9uIG9mIEVjb25vbWljIFByb2dyYW1zIzkyNgotbmFpY3MjOTI2MTEjQWRtaW5pc3RyYXRpb24gb2YgR2VuZXJhbCBFY29ub21pYyBQcm9ncmFtcyM5MjYxCi1uYWljcyM5MjYxMiNSZWd1bGF0aW9uIGFuZCBBZG1pbmlzdHJhdGlvbiBvZiBUcmFuc3BvcnRhdGlvbiBQcm9ncmFtcyM5MjYxCi1uYWljcyM5MjYxMyNSZWd1bGF0aW9uIGFuZCBBZG1pbmlzdHJhdGlvbiBvZiBDb21tdW5pY2F0aW9ucywgRWxlY3RyaWMsIEdhcywgYW5kIE90aGVyIFV0aWxpdGllcyM5MjYxCi1uYWljcyM5MjYxNCNSZWd1bGF0aW9uIG9mIEFncmljdWx0dXJhbCBNYXJrZXRpbmcgYW5kIENvbW1vZGl0aWVzIzkyNjEKLW5haWNzIzkyNjE1I1JlZ3VsYXRpb24sIExpY2Vuc2luZywgYW5kIEluc3BlY3Rpb24gb2YgTWlzY2VsbGFuZW91cyBDb21tZXJjaWFsIFNlY3RvcnMjOTI2MQotbmFpY3MjOTI3I1NwYWNlIFJlc2VhcmNoIGFuZCBUZWNobm9sb2d5IzkyCi1uYWljcyM5MjcxI1NwYWNlIFJlc2VhcmNoIGFuZCBUZWNobm9sb2d5IzkyNwotbmFpY3MjOTI3MTEjU3BhY2UgUmVzZWFyY2ggYW5kIFRlY2hub2xvZ3kjOTI3MQotbmFpY3MjOTI4I05hdGlvbmFsIFNlY3VyaXR5IGFuZCBJbnRlcm5hdGlvbmFsIEFmZmFpcnMjOTIKLW5haWNzIzkyODEjTmF0aW9uYWwgU2VjdXJpdHkgYW5kIEludGVybmF0aW9uYWwgQWZmYWlycyM5MjgKLW5haWNzIzkyODExI05hdGlvbmFsIFNlY3VyaXR5IzkyODEKLW5haWNzIzkyODEyI0ludGVybmF0aW9uYWwgQWZmYWlycyM5MjgxCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZGF0YS91bnNwc2MtZGF0YS50eHQgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZGF0YS91bnNwc2MtZGF0YS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3ODM1MTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2RhdGEvdW5zcHNjLWRhdGEudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTcwNTQgKzAsMCBAQAotdW5zcHNjNyMxMC4wMC4wMC4wMC4wMCNMaXZlIFBsYW50IGFuZCBBbmltYWwgTWF0ZXJpYWwgYW5kIEFjY2Vzc29yaWVzIGFuZCBTdXBwbGllcyMxMC4wMC4wMC4wMC4wMAotdW5zcHNjNyMxMC4xMC4wMC4wMC4wMCNMaXZlIGFuaW1hbHMjMTAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTUuMDAuMDAjTGl2ZXN0b2NrIzEwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzEwLjEwLjE1LjAxLjAwI0NhdHMjMTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTUuMDIuMDAjRG9ncyMxMC4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMC4xMC4xNS4wNC4wMCNNaW5rIzEwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE1LjA1LjAwI1JhdHMjMTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTUuMDYuMDAjSG9yc2VzIzEwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE1LjA3LjAwI1NoZWVwIzEwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE1LjA4LjAwI0dvYXRzIzEwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE1LjA5LjAwI0Fzc2VzIzEwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE1LjEwLjAwI01pY2UjMTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTUuMTEuMDAjU3dpbmUjMTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTUuMTIuMDAjUmFiYml0cyMxMC4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMC4xMC4xNS4xMy4wMCNHdWluZWEgcGlncyMxMC4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMC4xMC4xNS4xNC4wMCNQcmltYXRlcyMxMC4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMC4xMC4xNS4xNS4wMCNBcm1hZGlsbG9zIzEwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE1LjE2LjAwI0NhdHRsZSMxMC4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMC4xMC4xNS4xNy4wMCNDYW1lbHMjMTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTYuMDAuMDAjQmlyZHMgYW5kIGZvd2wjMTAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTYuMDEuMDAjTGl2ZSBjaGlja2VucyMxMC4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMC4xMC4xNi4wMi4wMCNMaXZlIGR1Y2tzIzEwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE2LjAzLjAwI0xpdmUgdHVya2V5cyMxMC4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMC4xMC4xNi4wNC4wMCNMaXZlIGdlZXNlIzEwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE2LjA1LjAwI0xpdmUgcGhlYXNhbnRzIzEwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE3LjAwLjAwI0xpdmUgZmlzaCMxMC4xMC4wMC4wMC4wMAotdW5zcHNjNyMxMC4xMC4xNy4wMS4wMCNMaXZlIHNhbG1vbiMxMC4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMC4xMC4xNy4wMi4wMCNMaXZlIHRyb3V0IzEwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE3LjAzLjAwI0xpdmUgdGFsYXBpYSMxMC4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMC4xMC4xNy4wNC4wMCNMaXZlIGNhcnAjMTAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTcuMDUuMDAjTGl2ZSBlZWxzIzEwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE4LjAwLjAwI1NoZWxsZmlzaCBhbmQgYXF1YXRpYyBpbnZlcnRlYnJhdGVzIzEwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzEwLjEwLjE4LjAxLjAwI0xpdmUgc2hyaW1wIzEwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE4LjAyLjAwI0xpdmUgY2xhbXMjMTAuMTAuMTguMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTguMDMuMDAjTGl2ZSBtdXNzZWxzIzEwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE4LjA0LjAwI0xpdmUgb3lzdGVycyMxMC4xMC4xOC4wMC4wMAotdW5zcHNjNyMxMC4xMC4xOC4wNS4wMCNMaXZlIGNyYWJzIzEwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE4LjA2LjAwI0xpdmUgYWJhbG9uZSMxMC4xMC4xOC4wMC4wMAotdW5zcHNjNyMxMC4xMC4xOC4wNy4wMCNMaXZlIG9jdG9waSMxMC4xMC4xOC4wMC4wMAotdW5zcHNjNyMxMC4xMC4xOC4wOC4wMCNMaXZlIHNxdWlkIzEwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE5LjAwLjAwI0luc2VjdHMjMTAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTkuMDEuMDAjQnV0dGVyZmxpZXMjMTAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMTAuMTAuMTkuMDIuMDAjQmVldGxlcyMxMC4xMC4xOS4wMC4wMAotdW5zcHNjNyMxMC4xMC4xOS4wMy4wMCNCZWVzIzEwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzEwLjEwLjE5LjA0LjAwI1NpbGt3b3JtcyMxMC4xMC4xOS4wMC4wMAotdW5zcHNjNyMxMC4xMC4yMC4wMC4wMCNXaWxkIGFuaW1hbHMjMTAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTAuMjAuMDEuMDAjRWxlcGhhbnRzIzEwLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEwLjEwLjIwLjAyLjAwI0xpdmUgZm94ZXMjMTAuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTAuMTEuMDAuMDAuMDAjRG9tZXN0aWMgcGV0IHByb2R1Y3RzIzEwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzEwLjExLjExLjAwLjAwI1BldCBmb29kIGJvd2xzIG9yIGVxdWlwbWVudCMxMC4xMS4wMC4wMC4wMAotdW5zcHNjNyMxMC4xMS4xMi4wMC4wMCNNZWRpY2F0ZWQgcGV0IHRyZWF0bWVudHMjMTAuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTEuMTMuMDAuMDAjRG9tZXN0aWMgcGV0IHRyZWF0bWVudHMgYW5kIGFjY2Vzc29yaWVzIGFuZCBlcXVpcG1lbnQjMTAuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTEuMTMuMDEuMDAjUGV0IHRveXMjMTAuMTEuMTMuMDAuMDAKLXVuc3BzYzcjMTAuMTEuMTMuMDIuMDAjUGV0IGdyb29taW5nIHByb2R1Y3RzIzEwLjExLjEzLjAwLjAwCi11bnNwc2M3IzEwLjExLjEzLjAzLjAwI1BldCBsaXR0ZXIgb3IgZXF1aXBtZW50IGZvciBwZXQgd2FzdGUgbWFuYWdlbWVudCMxMC4xMS4xMy4wMC4wMAotdW5zcHNjNyMxMC4xMS4xMy4wNC4wMCNQZXQgZm9vZCBib3dscyBvciBlcXVpcG1lbnQjMTAuMTEuMTMuMDAuMDAKLXVuc3BzYzcjMTAuMTEuMTMuMDUuMDAjTWVkaWNhdGVkIHBldCB0cmVhdG1lbnRzIzEwLjExLjEzLjAwLjAwCi11bnNwc2M3IzEwLjEyLjAwLjAwLjAwI0FuaW1hbCBmZWVkIzEwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzEwLjEyLjE1LjAwLjAwI0xpdmVzdG9jayBmZWVkIzEwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzEwLjEyLjE1LjAxLjAwI1B1cmUgd2hlYXQgYnJhbiMxMC4xMi4xNS4wMC4wMAotdW5zcHNjNyMxMC4xMi4xNS4wMi4wMCNGZWVkIG9hdHMjMTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTIuMTUuMDMuMDAjRmVlZCBjb3JuIzEwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzEwLjEyLjE1LjA0LjAwI0ZlZWQgc29yZ2h1bSMxMC4xMi4xNS4wMC4wMAotdW5zcHNjNyMxMC4xMi4xNS4wNS4wMCNIYXkjMTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTIuMTUuMDYuMDAjT2lsIGNha2UjMTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTIuMTYuMDAuMDAjQmlyZCBhbmQgZm93bCBmb29kIzEwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzEwLjEyLjE2LjAxLjAwI0xpdmUgZm9vZCBmb3IgYmlyZHMjMTAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTIuMTYuMDIuMDAjQmlyZCBzZWVkIzEwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzEwLjEyLjE2LjAzLjAwI0JpcmQgdHJlYXRzIG9yIHNuYWNrcyMxMC4xMi4xNi4wMC4wMAotdW5zcHNjNyMxMC4xMi4xNi4wNC4wMCNQb3VsdHJ5IGZvb2QjMTAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTIuMTcuMDAuMDAjRmlzaCBmb29kIzEwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzEwLjEyLjE3LjAxLjAwI0ZyZXNoIG9yIGZyb3plbiBicmluZSMxMC4xMi4xNy4wMC4wMAotdW5zcHNjNyMxMC4xMi4xNy4wMi4wMCNGaXNoIGZvb2QgcGVsbGV0cyMxMC4xMi4xNy4wMC4wMAotdW5zcHNjNyMxMC4xMi4xNy4wMy4wMCNGaXNoIGZvb2QgZmxha2VzIzEwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzEwLjEyLjE4LjAwLjAwI0RvZyBhbmQgY2F0IGZvb2QjMTAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTIuMTguMDEuMDAjRHJ5IGZvb2QgZm9yIGRvZ3MjMTAuMTIuMTguMDAuMDAKLXVuc3BzYzcjMTAuMTIuMTguMDIuMDAjTW9pc3QgZm9vZCBmb3IgZG9ncyMxMC4xMi4xOC4wMC4wMAotdW5zcHNjNyMxMC4xMi4xOC4wMy4wMCNNaWxrIGZvciBkb2dzIG9yIGNhdHMjMTAuMTIuMTguMDAuMDAKLXVuc3BzYzcjMTAuMTIuMTguMDQuMDAjRHJ5IGZvb2QgZm9yIGNhdHMjMTAuMTIuMTguMDAuMDAKLXVuc3BzYzcjMTAuMTIuMTguMDUuMDAjTW9pc3QgZm9vZCBmb3IgY2F0cyMxMC4xMi4xOC4wMC4wMAotdW5zcHNjNyMxMC4xMi4xOC4wNi4wMCNUcmVhdHMgb3Igc25hY2tzIGZvciBjYXRzIG9yIGRvZ3MjMTAuMTIuMTguMDAuMDAKLXVuc3BzYzcjMTAuMTIuMTkuMDAuMDAjUm9kZW50IGZvb2QjMTAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTIuMTkuMDEuMDAjUGVsbGV0aXplZCBmb29kIGZvciByb2RlbnRzIzEwLjEyLjE5LjAwLjAwCi11bnNwc2M3IzEwLjEyLjIwLjAwLjAwI1JlcHRpbGUgZm9vZCMxMC4xMi4wMC4wMC4wMAotdW5zcHNjNyMxMC4xMi4yMC4wMS4wMCNQZWxsZXRpemVkIGZvb2QgZm9yIHJlcHRpbGVzIzEwLjEyLjIwLjAwLjAwCi11bnNwc2M3IzEwLjEyLjIwLjAyLjAwI01vaXN0IGZvb2QgZm9yIHJlcHRpbGVzIzEwLjEyLjIwLjAwLjAwCi11bnNwc2M3IzEwLjEyLjIwLjAzLjAwI0xpdmUgZm9vZCBmb3IgcmVwdGlsZXMjMTAuMTIuMjAuMDAuMDAKLXVuc3BzYzcjMTAuMTMuMDAuMDAuMDAjQW5pbWFsIGNvbnRhaW5tZW50IGFuZCBoYWJpdGF0cyMxMC4wMC4wMC4wMC4wMAotdW5zcHNjNyMxMC4xMy4xNS4wMC4wMCNBbmltYWwgc2hlbHRlcnMjMTAuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTMuMTUuMDYuMDAjTGl2ZXN0b2NrIHN0YWJsZXMjMTAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTMuMTUuMDcuMDAjRG9tZXN0aWNpemVkIHBldCBob3VzZXMjMTAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTMuMTUuMDguMDAjUGV0IGJlZHMjMTAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTMuMTYuMDAuMDAjQW5pbWFsIGNvbnRhaW5tZW50IzEwLjEzLjAwLjAwLjAwCi11bnNwc2M3IzEwLjEzLjE2LjAxLjAwI0NhZ2VzIzEwLjEzLjE2LjAwLjAwCi11bnNwc2M3IzEwLjEzLjE2LjAyLjAwI0tlbm5lbHMjMTAuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTMuMTYuMDMuMDAjQW5pbWFsIGNhcnJ5aW5nIGNhc2VzIzEwLjEzLjE2LjAwLjAwCi11bnNwc2M3IzEwLjEzLjE2LjA0LjAwI0RvZyBydW5zIzEwLjEzLjE2LjAwLjAwCi11bnNwc2M3IzEwLjEzLjE3LjAwLjAwI0FuaW1hbCBoYWJpdGF0cyMxMC4xMy4wMC4wMC4wMAotdW5zcHNjNyMxMC4xMy4xNy4wMS4wMCNUZXJyYXJpdW1zIzEwLjEzLjE3LjAwLjAwCi11bnNwc2M3IzEwLjEzLjE3LjAyLjAwI0FxdWFyaXVtcyMxMC4xMy4xNy4wMC4wMAotdW5zcHNjNyMxMC4xNC4wMC4wMC4wMCNTYWRkbGVyeSBhbmQgaGFybmVzcyBnb29kcyMxMC4wMC4wMC4wMC4wMAotdW5zcHNjNyMxMC4xNC4xNS4wMC4wMCNTYWRkbGVyeSMxMC4xNC4wMC4wMC4wMAotdW5zcHNjNyMxMC4xNC4xNS4wMS4wMCNTYWRkbGVzIzEwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE0LjE1LjAyLjAwI1doaXBzIzEwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE0LjE2LjAwLjAwI0hhcm5lc3MgZ29vZHMjMTAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTQuMTYuMDEuMDAjQnJpZGxlcyMxMC4xNC4xNi4wMC4wMAotdW5zcHNjNyMxMC4xNC4xNi4wMi4wMCNZb2tlcyMxMC4xNC4xNi4wMC4wMAotdW5zcHNjNyMxMC4xNC4xNi4wMy4wMCNIb3JzZSBiaXRzIzEwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzEwLjE0LjE2LjA0LjAwI1JlaW5zIzEwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzEwLjE0LjE2LjA1LjAwI1N0aXJydXBzIzEwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzEwLjE0LjE2LjA2LjAwI0xlYXNoZXMgb3IgbGVhZHMjMTAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTQuMTYuMDcuMDAjQ29sbGFycyMxMC4xNC4xNi4wMC4wMAotdW5zcHNjNyMxMC4xNC4xNi4wOC4wMCNIYXJuZXNzZXMjMTAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTQuMTYuMDkuMDAjUmVzdHJhaW50cyMxMC4xNC4xNi4wMC4wMAotdW5zcHNjNyMxMC4xNS4wMC4wMC4wMCNTZWVkcyBhbmQgYnVsYnMgYW5kIHNlZWRsaW5ncyBhbmQgY3V0dGluZ3MjMTAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTUuMDAuMDAjVmVnZXRhYmxlIHNlZWRzIGFuZCBzZWVkbGluZ3MjMTAuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTUuMDEuMDAjQmVhbiBzZWVkcyBvciBzZWVkbGluZ3MjMTAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTUuMDIuMDAjQ2Fycm90IHNlZWRzIG9yIHNlZWRsaW5ncyMxMC4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNS4wMy4wMCNDZWxlcnkgc2VlZHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE1LjA0LjAwI0NoaWxpIHNlZWRzIG9yIHNlZWRsaW5ncyMxMC4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNS4wNS4wMCNDb3VyZ2V0dGUgc2VlZHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE1LjA2LjAwI0NvdyBwZWEgc2VlZHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE1LjA3LjAwI0N1Y3VtYmVyIHNlZWRzIG9yIHNlZWRsaW5ncyMxMC4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNS4wOC4wMCNFZ2dwbGFudCBzZWVkcyBvciBzZWVkbGluZ3MjMTAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTUuMDkuMDAjRW5kaXZlIHNlZWRzIG9yIHNlZWRsaW5ncyMxMC4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNS4xMC4wMCNHYXJsaWMgc2VlZHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE1LjExLjAwI0xlZWsgc2VlZHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE1LjEyLjAwI0xldHR1Y2Ugc2VlZHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE1LjEzLjAwI0Nvcm4gc2VlZHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE1LjE0LjAwI01lbG9uIHNlZWRzIG9yIHNlZWRsaW5ncyMxMC4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNS4xNS4wMCNPbmlvbiBzZWVkcyBvciBzZWVkbGluZ3MjMTAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTUuMTYuMDAjU295YSBzZWVkcyBvciBzZWVkbGluZ3MjMTAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTUuMTcuMDAjU3BpbmFjaCBzZWVkcyBvciBzZWVkbGluZ3MjMTAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTUuMTguMDAjVG9tYXRvIHNlZWRzIG9yIHNlZWRsaW5ncyMxMC4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNS4xOS4wMCNUdXJuaXAgc2VlZHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE1LjIwLjAwI0NoYXJkIHNlZWRzIG9yIHNlZWRsaW5ncyMxMC4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNS4yMS4wMCNTd2VldCBwZXBwZXIgc2VlZHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE1LjIyLjAwI0JlZXQgc2VlZHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE1LjIzLjAwI0NhdWxpZmxvd2VyIHNlZWRzIG9yIHNlZWRsaW5ncyMxMC4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNS4yNC4wMCNQYXJzZWx5IHNlZWRzIG9yIHNlZWRsaW5ncyMxMC4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNi4wMC4wMCNDZXJlYWwgc2VlZHMjMTAuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTYuMDEuMDAjV2hlYXQgc2VlZHMjMTAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTYuMDIuMDAjQ29semEgc2VlZHMjMTAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTYuMDMuMDAjQmFybGV5IHNlZWRzIzEwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE2LjA0LjAwI01pbGxldCBzZWVkcyMxMC4xNS4xNi4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNi4wNS4wMCNPYXQgc2VlZHMjMTAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTYuMDYuMDAjU2VzYW1lIHNlZWRzIzEwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE2LjA3LjAwI0xpbnNlZWQgc2VlZHMjMTAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTYuMDguMDAjQ2FzdG9yIG9pbCBzZWVkcyMxMC4xNS4xNi4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNi4wOS4wMCNNYWl6ZSBzZWVkcyMxMC4xNS4xNi4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNi4xMC4wMCNSeWUgc2VlZHMjMTAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTYuMTEuMDAjU29yZ2h1bSBzZWVkcyMxMC4xNS4xNi4wMC4wMAotdW5zcHNjNyMxMC4xNS4xNy4wMC4wMCNHcmFzcyBhbmQgZm9yYWdlIHNlZWRzIGFuZCBzZWVkbGluZ3MjMTAuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTcuMDEuMDAjUmljZSBzZWVkcyBvciBzZWVkbGluZ3MjMTAuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTcuMDIuMDAjQ2xvdmVyIHNlZWRzIG9yIHNlZWRsaW5nIzEwLjE1LjE3LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE3LjAzLjAwI0FsZmFsZmEgc2VlZHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE3LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE3LjA0LjAwI0dyYXNzIHNlZWRzIG9yIHNlZWRsaW5ncyMxMC4xNS4xNy4wMC4wMAotdW5zcHNjNyMxMC4xNS4xOC4wMC4wMCNTcGljZSBjcm9wIHNlZWRzIGFuZCBzZWVkbGluZ3MjMTAuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTguMDEuMDAjUGVwcGVyIHNlZWRzIG9yIHNlZWRsaW5ncyMxMC4xNS4xOC4wMC4wMAotdW5zcHNjNyMxMC4xNS4xOC4wMi4wMCNWYW5pbGxhIHNlZWRzIG9yIHNlZWRsaW5ncyMxMC4xNS4xOC4wMC4wMAotdW5zcHNjNyMxMC4xNS4xOC4wMy4wMCNDaW5uYW1vbiBzZWVkcyBvciBzZWVkbGluZ3MjMTAuMTUuMTguMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTguMDQuMDAjQ2xvdmUgc2VlZHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE4LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE4LjA1LjAwI0NvcmlhbmRlciBzZWVkcyBvciBzZWVkbGluZ3MjMTAuMTUuMTguMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTguMDYuMDAjR2luZ2VyIHNlZWRzIG9yIHNlZWRsaW5ncyMxMC4xNS4xOC4wMC4wMAotdW5zcHNjNyMxMC4xNS4xOC4wNy4wMCNTYWZmcm9uIHNlZWRzIG9yIHNlZWRsaW5ncyMxMC4xNS4xOC4wMC4wMAotdW5zcHNjNyMxMC4xNS4xOC4wOC4wMCNUaHltZSBzZWVkcyBvciBzZWVkbGluZ3MjMTAuMTUuMTguMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTguMDkuMDAjQ3Vycnkgc2VlZHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE4LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE4LjEwLjAwI011c3RhcmQgc2VlZHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE4LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE4LjExLjAwI0dpbnNlbmcgcm9vdHMgb3Igc2VlZGxpbmdzIzEwLjE1LjE4LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE5LjAwLjAwI0Zsb3dlciBzZWVkcyBhbmQgYnVsYnMgYW5kIHNlZWRsaW5ncyBhbmQgY3V0dGluZ3MjMTAuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTkuMDEuMDAjVHVsaXAgc2VlZHMgb3IgYnVsYnMgb3Igc2VlZGxpbmdzIG9yIGN1dHRpbmdzIzEwLjE1LjE5LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE5LjAyLjAwI1Jvc2Ugc2VlZHMgb3Igc2VlZGxpbmdzIG9yIGN1dHRpbmdzIzEwLjE1LjE5LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE5LjAzLjAwI0RhZmZvZGlsIHNlZWRzIG9yIGJ1bGJzIG9yIHNlZWRsaW5ncyBvciBjdXR0aW5ncyMxMC4xNS4xOS4wMC4wMAotdW5zcHNjNyMxMC4xNS4xOS4wNC4wMCNTdW5mbG93ZXIgc2VlZHMjMTAuMTUuMTkuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMTkuMDUuMDAjSHlhY2ludGggYnVsYnMgb3Igc2hvb3RzIzEwLjE1LjE5LjAwLjAwCi11bnNwc2M3IzEwLjE1LjE5LjA2LjAwI0xpbHkgQnVsYnMjMTAuMTUuMTkuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMjAuMDAuMDAjVHJlZSBhbmQgc2hydWIgc2VlZHMgYW5kIGN1dHRpbmdzIzEwLjE1LjAwLjAwLjAwCi11bnNwc2M3IzEwLjE1LjIwLjAxLjAwI0ZydWl0IHRyZWUgc2VlZHMgb3IgY3V0dGluZ3MjMTAuMTUuMjAuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMjAuMDIuMDAjQ29uaWZlciB0cmVlIHNlZWRzIG9yIGN1dHRpbmdzIzEwLjE1LjIwLjAwLjAwCi11bnNwc2M3IzEwLjE1LjIwLjAzLjAwI051dCB0cmVlIHNlZWRzIG9yIGN1dHRpbmdzIzEwLjE1LjIwLjAwLjAwCi11bnNwc2M3IzEwLjE1LjIxLjAwLjAwI1Jlc2lkdWVzIG90aGVyIHRoYW4gYW5pbWFsIGZlZWQjMTAuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTUuMjEuMDEuMDAjUmVzaWR1ZXMgYmFib29sIHNlZWQgZXh0cmFjdGlvbiMxMC4xNS4yMS4wMC4wMAotdW5zcHNjNyMxMC4xNS4yMS4wMi4wMCNSZXNpZHVlcyBvZiByYXBlIHNlZWRzIzEwLjE1LjIxLjAwLjAwCi11bnNwc2M3IzEwLjE1LjIxLjAzLjAwI1Jlc2lkdWUgb2YgbGluc2VlZCMxMC4xNS4yMS4wMC4wMAotdW5zcHNjNyMxMC4xNS4yMS4wNC4wMCNPaWwgY2FrZSBvZiBuZWVtIzEwLjE1LjIxLjAwLjAwCi11bnNwc2M3IzEwLjE1LjIyLjAwLjAwI0ZpYnJvdXMgY3JvcCBzZWVkcyBhbmQgc2VlZGxpbmdzIzEwLjE1LjAwLjAwLjAwCi11bnNwc2M3IzEwLjE1LjIyLjAxLjAwI0NvdHRvbiBzZWVkcyBvciBzZWVkbGluZ3MjMTAuMTUuMjIuMDAuMDAKLXVuc3BzYzcjMTAuMTYuMDAuMDAuMDAjRmxvcmljdWx0dXJlIGFuZCBzaWx2aWN1bHR1cmUgcHJvZHVjdHMjMTAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTYuMTUuMDAuMDAjVHJlZXMgYW5kIHNocnVicyMxMC4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMC4xNi4xNS4wMS4wMCNPbGl2ZSB0cmVlcyMxMC4xNi4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNi4xNS4wMi4wMCNDb2ZmZWUgc2hydWJzIzEwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE2LjE1LjAzLjAwI0NvY29hIHRyZWVzIzEwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE2LjE1LjA0LjAwI0FwcGxlIHRyZWVzIzEwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE2LjE1LjA1LjAwI1BlYWNoIHRyZWVzIzEwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE2LjE1LjA2LjAwI09yYW5nZSB0cmVlcyMxMC4xNi4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNi4xNS4wNy4wMCNSaG9kZW5kcm9uIHNocnVicyMxMC4xNi4xNS4wMC4wMAotdW5zcHNjNyMxMC4xNi4xNS4wOC4wMCNUZWEgc2hydWJzIzEwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE2LjE1LjA5LjAwI0NvbmlmZXIgdHJlZXMjMTAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTYuMTUuMTAuMDAjU3BydWNlIHRyZWVzIzEwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE2LjE1LjExLjAwI1BpbmUgdHJlZXMjMTAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTYuMTUuMTIuMDAjRmlyIHRyZWVzIzEwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE2LjE2LjAwLjAwI0Zsb3JhbCBwbGFudHMjMTAuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTYuMTYuMDEuMDAjUm9zZSBwbGFudHMjMTAuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTYuMTYuMDIuMDAjUG9pbnNldHRpYXMgcGxhbnRzIzEwLjE2LjE2LjAwLjAwCi11bnNwc2M3IzEwLjE2LjE2LjAzLjAwI09yY2hpZHMgcGxhbnRzIzEwLjE2LjE2LjAwLjAwCi11bnNwc2M3IzEwLjE2LjE2LjA0LjAwI0F6YWxlYXMgcGxhbnRzIzEwLjE2LjE2LjAwLjAwCi11bnNwc2M3IzEwLjE2LjE2LjA1LjAwI0NhY3R1cyBwbGFudHMjMTAuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTYuMTcuMDAuMDAjQ3V0IGZsb3dlcnMjMTAuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTYuMTcuMDEuMDAjQ3V0IGdsYWRpb2x1cyMxMC4xNi4xNy4wMC4wMAotdW5zcHNjNyMxMC4xNi4xNy4wMi4wMCNDdXQgbGlsaWVzIzEwLjE2LjE3LjAwLjAwCi11bnNwc2M3IzEwLjE2LjE3LjAzLjAwI0N1dCBjYXJuYXRpb25zIzEwLjE2LjE3LjAwLjAwCi11bnNwc2M3IzEwLjE2LjE3LjA0LjAwI0N1dCB0dWxpcHMjMTAuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMTAuMTYuMTcuMDUuMDAjQ3V0IHJvc2VzIzEwLjE2LjE3LjAwLjAwCi11bnNwc2M3IzEwLjE2LjE4LjAwLjAwI05vbiBmbG93ZXJpbmcgcGxhbnRzIzEwLjE2LjAwLjAwLjAwCi11bnNwc2M3IzEwLjE2LjE4LjAxLjAwI0Zlcm5zIzEwLjE2LjE4LjAwLjAwCi11bnNwc2M3IzEwLjE2LjE4LjAyLjAwI0l2aWVzIzEwLjE2LjE4LjAwLjAwCi11bnNwc2M3IzEwLjE2LjE4LjAzLjAwI1BoaWxvZGVuZHJvbnMjMTAuMTYuMTguMDAuMDAKLXVuc3BzYzcjMTAuMTYuMTkuMDAuMDAjRHJpZWQgZmxvcmFsIHByb2R1Y3RzIzEwLjE2LjAwLjAwLjAwCi11bnNwc2M3IzEwLjE2LjE5LjAxLjAwI0RyaWVkIHBvZHMjMTAuMTYuMTkuMDAuMDAKLXVuc3BzYzcjMTAuMTYuMTkuMDIuMDAjRHJpZWQgbGVhZnkgZ3JlZW5lcnkjMTAuMTYuMTkuMDAuMDAKLXVuc3BzYzcjMTAuMTYuMTkuMDMuMDAjRHJpZWQgZmVybiBncmVlbmVyeSMxMC4xNi4xOS4wMC4wMAotdW5zcHNjNyMxMC4xNi4xOS4wNC4wMCNEcmllZCBmdWxsIGZsb3dlcnMjMTAuMTYuMTkuMDAuMDAKLXVuc3BzYzcjMTAuMTYuMTkuMDUuMDAjRHJpZWQgdHdpZ3Mgb3Igc3RpY2tzIzEwLjE2LjE5LjAwLjAwCi11bnNwc2M3IzEwLjE2LjE5LjA2LjAwI0RyaWVkIGdyYXNzIHBsdW1lcyMxMC4xNi4xOS4wMC4wMAotdW5zcHNjNyMxMC4xNi4xOS4wNy4wMCNEcmllZCBwcmVzc2VkIGZsb3dlcnMjMTAuMTYuMTkuMDAuMDAKLXVuc3BzYzcjMTAuMTYuMTkuMDguMDAjRHJpZWQgZmxvd2VyIHBldGFscyMxMC4xNi4xOS4wMC4wMAotdW5zcHNjNyMxMC4xNy4wMC4wMC4wMCNGZXJ0aWxpemVycyBhbmQgcGxhbnQgbnV0cmllbnRzIGFuZCBoZXJiaWNpZGVzIzEwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzEwLjE3LjE1LjAwLjAwI09yZ2FuaWMgZmVydGlsaXplcnMgYW5kIHBsYW50IG51dHJpZW50cyMxMC4xNy4wMC4wMC4wMAotdW5zcHNjNyMxMC4xNy4xNS4wMS4wMCNNYW51cmUgb3IgZ3Vhbm8jMTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTcuMTUuMDIuMDAjUGxhbnQgaG9ybW9uZXMjMTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTcuMTUuMDMuMDAjRmlzaCBtZWFsIzEwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE3LjE2LjAwLjAwI0NoZW1pY2FsIGZlcnRpbGl6ZXJzIGFuZCBwbGFudCBudXRyaWVudHMjMTAuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMTAuMTcuMTYuMDEuMDAjTml0cm9nZW5vdXMgZmVydGlsaXplciMxMC4xNy4xNi4wMC4wMAotdW5zcHNjNyMxMC4xNy4xNi4wMi4wMCNQb3Rhc3NpYyBmZXJ0aWxpemVyIzEwLjE3LjE2LjAwLjAwCi11bnNwc2M3IzEwLjE3LjE2LjAzLjAwI1Bob3NwaGF0aWMgZmVydGlsaXplciMxMC4xNy4xNi4wMC4wMAotdW5zcHNjNyMxMC4xNy4xNi4wNC4wMCNTdWxwaHVyaWMgZmVydGlsaXplciMxMC4xNy4xNi4wMC4wMAotdW5zcHNjNyMxMC4xNy4xNi4wNS4wMCNOaXRyb2dlbiBQaG9zcGhvcm91cyBQb3Rhc3NpdW0gTWl4dHVyZXMgKE5QSykjMTAuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMTAuMTcuMTcuMDAuMDAjSGVyYmljaWRlcyMxMC4xNy4wMC4wMC4wMAotdW5zcHNjNyMxMC4xNy4xNy4wMS4wMCNXZWVkIGtpbGxlciMxMC4xNy4xNy4wMC4wMAotdW5zcHNjNyMxMC4xNy4xNy4wMi4wMCNGdW5naWNpZGVzIzEwLjE3LjE3LjAwLjAwCi11bnNwc2M3IzEwLjE5LjAwLjAwLjAwI1Blc3QgY29udHJvbCBwcm9kdWN0cyMxMC4wMC4wMC4wMC4wMAotdW5zcHNjNyMxMC4xOS4xNS4wMC4wMCNJbnNlY3RpY2lkZXMgYW5kIGluc2VjdCBjb250cm9sIHRyYXBzIzEwLjE5LjAwLjAwLjAwCi11bnNwc2M3IzEwLjE5LjE1LjAxLjAwI1NwcmF5IGluc2VjdGljaWRlcyMxMC4xOS4xNS4wMC4wMAotdW5zcHNjNyMxMC4xOS4xNS4wMi4wMCNCYWl0IGluc2VjdGljaWRlcyMxMC4xOS4xNS4wMC4wMAotdW5zcHNjNyMxMC4xOS4xNS4wMy4wMCNTaWxpY2ljIGFjaWQjMTAuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMTAuMTkuMTUuMDQuMDAjRmx5aW5nIGluc2VjdCBjb250cm9sIHRyYXBzIzEwLjE5LjE1LjAwLjAwCi11bnNwc2M3IzEwLjE5LjE2LjAwLjAwI1JvZGVudGljaWRlcyMxMC4xOS4wMC4wMC4wMAotdW5zcHNjNyMxMC4xOS4xNi4wMS4wMCNFeHRydWRlZCBiYWl0cyMxMC4xOS4xNi4wMC4wMAotdW5zcHNjNyMxMC4xOS4xNi4wMi4wMCNNZWFsIG9yIHBlbGxldCBvciBzZWVkIGJhaXRzIzEwLjE5LjE2LjAwLjAwCi11bnNwc2M3IzEwLjE5LjE2LjAzLjAwI0xpcXVpZCBiYWl0cyMxMC4xOS4xNi4wMC4wMAotdW5zcHNjNyMxMC4xOS4xNi4wNC4wMCNUcmFja2luZyBwb3dkZXJzIzEwLjE5LjE2LjAwLjAwCi11bnNwc2M3IzEwLjE5LjE3LjAwLjAwI0FuaW1hbCBjb250cm9sIHRyYXBzIzEwLjE5LjAwLjAwLjAwCi11bnNwc2M3IzEwLjE5LjE3LjAxLjAwI01vdXNlIG9yIHJhdCB0cmFwcyMxMC4xOS4xNy4wMC4wMAotdW5zcHNjNyMxMC4xOS4xNy4wMi4wMCNXaXJlIGNhZ2UgdHJhcHMjMTAuMTkuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMDAuMDAuMDAuMDAjTWluZXJhbCBhbmQgVGV4dGlsZSBhbmQgSW5lZGlibGUgUGxhbnQgYW5kIEFuaW1hbCBNYXRlcmlhbHMjMTEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMDAuMDAuMDAjTWluZXJhbHMgYW5kIG9yZXMgYW5kIG1ldGFscyMxMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNS4wMC4wMCNNaW5lcmFscyMxMS4xMC4wMC4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNS4wMS4wMCNNaWNhIzExLjEwLjE1LjAwLjAwCi11bnNwc2M3IzExLjEwLjE1LjAyLjAwI0VtZXJ5IzExLjEwLjE1LjAwLjAwCi11bnNwc2M3IzExLjEwLjE1LjAzLjAwI1F1YXJ0eiMxMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNS4wNC4wMCNQeXJpdGUjMTEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTUuMDUuMDAjU3VscGh1ciMxMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNS4wNi4wMCNDaGFsayMxMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNS4wNy4wMCNHcmFwaGl0ZSMxMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNS4wOC4wMCNEb2xvbWl0ZSMxMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNS4wOS4wMCNNYWduZXNpdGUjMTEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTUuMTAuMDAjQXNiZXN0b3MjMTEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTUuMTEuMDAjQ2FsY2l1bSMxMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNS4xMi4wMCNCb3JhdGUjMTEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTUuMTMuMDAjQ3J5b2xpdGUjMTEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTUuMTQuMDAjRmVsZHNwYXIjMTEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTUuMTUuMDAjTGV1Y2l0ZSMxMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNS4xNi4wMCNOZXBoZWxpdGUjMTEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTUuMTcuMDAjU3RlYXRpdGUjMTEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTUuMTguMDAjVGFsYyMxMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNS4xOS4wMCNEaWFtb25kcyMxMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNS4yMC4wMCNHYXJuZXRzIzExLjEwLjE1LjAwLjAwCi11bnNwc2M3IzExLjEwLjE1LjIxLjAwI1NpbGljb24gY2FyYmlkZSMxMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNS4yMi4wMCNBY3RpdmF0ZWQgY2FyYm9uIzExLjEwLjE1LjAwLjAwCi11bnNwc2M3IzExLjEwLjE1LjIzLjAwI011bGl0ZSMxMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNS4yNC4wMCNGbG91cm9zcGFyIzExLjEwLjE1LjAwLjAwCi11bnNwc2M3IzExLjEwLjE1LjI1LjAwI0tlaXNlcml0ZSMxMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNS4yNi4wMCNDYXJuYWxsaXRlIzExLjEwLjE1LjAwLjAwCi11bnNwc2M3IzExLjEwLjE2LjAwLjAwI09yZXMjMTEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTYuMDEuMDAjSXJvbiBvcmUjMTEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTYuMDIuMDAjVGl0YW5pdW0gb3JlIzExLjEwLjE2LjAwLjAwCi11bnNwc2M3IzExLjEwLjE2LjAzLjAwI1VyYW5pdW0gb3JlIzExLjEwLjE2LjAwLjAwCi11bnNwc2M3IzExLjEwLjE2LjA0LjAwI0NvcHBlciBvcmUjMTEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTYuMDUuMDAjQWx1bWludW0gb3JlIzExLjEwLjE2LjAwLjAwCi11bnNwc2M3IzExLjEwLjE2LjA2LjAwI05pY2tlbCBvcmUjMTEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTYuMDcuMDAjU2lsdmVyIG9yZSMxMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNi4wOC4wMCNMZWFkIG9yZSMxMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNi4wOS4wMCNaaW5jIG9yZSMxMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNi4xMC4wMCNUaW4gb3JlIzExLjEwLjE2LjAwLjAwCi11bnNwc2M3IzExLjEwLjE2LjExLjAwI01hbmdhbmVzZSBvcmUjMTEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTYuMTIuMDAjQ2hyb21pdW0gb3JlIzExLjEwLjE2LjAwLjAwCi11bnNwc2M3IzExLjEwLjE2LjEzLjAwI1R1bmdzdGVuIG9yIHdvbGZyYW0gb3JlIzExLjEwLjE2LjAwLjAwCi11bnNwc2M3IzExLjEwLjE2LjE0LjAwI01vbHliZGVudW0gb3JlIzExLjEwLjE2LjAwLjAwCi11bnNwc2M3IzExLjEwLjE2LjE1LjAwI0NvYmFsdCBvcmUjMTEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTYuMTYuMDAjR29sZCBvcmUjMTEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTYuMTcuMDAjVGFudGFsdW0gb3JlIzExLjEwLjE2LjAwLjAwCi11bnNwc2M3IzExLjEwLjE2LjE4LjAwI1BsYXRpbnVtIG9yZSMxMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNi4xOS4wMCNWZXJtaWN1bGl0ZSBvcmUjMTEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTYuMjAuMDAjVGhvcml1bSBvcmUjMTEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTYuMjEuMDAjS3lhbml0ZSBvcmUjMTEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTYuMjIuMDAjQW50aW1vbnkgb3JlcyMxMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNi4yMy4wMCNaaXJjb25pdW0gb3JlcyMxMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNy4wMC4wMCNCYXNlIG1ldGFscyMxMS4xMC4wMC4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNy4wMS4wMCNTbGFnIG9yIGFzaCMxMS4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNy4wMi4wMCNOYXR1cmFsIGdyYXBoaXRlIzExLjEwLjE3LjAwLjAwCi11bnNwc2M3IzExLjEwLjE3LjAzLjAwI1RpdGFuaXVtIzExLjEwLjE3LjAwLjAwCi11bnNwc2M3IzExLjEwLjE3LjA0LjAwI1N0ZWVsIzExLjEwLjE3LjAwLjAwCi11bnNwc2M3IzExLjEwLjE3LjA1LjAwI0FsdW1pbnVtIzExLjEwLjE3LjAwLjAwCi11bnNwc2M3IzExLjEwLjE3LjA2LjAwI05pY2tlbCMxMS4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNy4wNy4wMCNNYWduZXNpdW0jMTEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTcuMDguMDAjQmlzbXV0aCMxMS4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNy4wOS4wMCNBbnRpbW9ueSMxMS4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNy4xMC4wMCNDYWRtaXVtIzExLjEwLjE3LjAwLjAwCi11bnNwc2M3IzExLjEwLjE3LjExLjAwI05vbiBmZXJyb3VzIGFsbG95IzExLjEwLjE3LjAwLjAwCi11bnNwc2M3IzExLjEwLjE3LjEyLjAwI0ZlcnJvdXMgYWxsb3kjMTEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTcuMTMuMDAjSXJvbiMxMS4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMS4xMC4xNy4xNC4wMCNMZWFkIzExLjEwLjE3LjAwLjAwCi11bnNwc2M3IzExLjEwLjE3LjE1LjAwI0NvcHBlciMxMS4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMS4xMC4xOC4wMC4wMCNQcmVjaW91cyBtZXRhbHMjMTEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTguMDEuMDAjR29sZCMxMS4xMC4xOC4wMC4wMAotdW5zcHNjNyMxMS4xMC4xOC4wMi4wMCNTaWx2ZXIjMTEuMTAuMTguMDAuMDAKLXVuc3BzYzcjMTEuMTAuMTguMDMuMDAjUGxhdGludW0jMTEuMTAuMTguMDAuMDAKLXVuc3BzYzcjMTEuMTEuMDAuMDAuMDAjRWFydGggYW5kIHN0b25lIzExLjAwLjAwLjAwLjAwCi11bnNwc2M3IzExLjExLjE1LjAwLjAwI0RpcnQgYW5kIHNvaWwjMTEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMTEuMTEuMTUuMDEuMDAjU29pbCMxMS4xMS4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMS4xNS4wMi4wMCNGaWxsIGRpcnQjMTEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTEuMTUuMDMuMDAjVG9wc29pbCMxMS4xMS4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMS4xNi4wMC4wMCNTdG9uZSMxMS4xMS4wMC4wMC4wMAotdW5zcHNjNyMxMS4xMS4xNi4wMS4wMCNHeXBzdW0jMTEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTEuMTYuMDIuMDAjVHJhdmVydGluZSMxMS4xMS4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMS4xNi4wMy4wMCNFY2F1c3NpbmUgb3IgYWxhYmFzdGVyIzExLjExLjE2LjAwLjAwCi11bnNwc2M3IzExLjExLjE2LjA0LjAwI0dyYW5pdGUjMTEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTEuMTYuMDUuMDAjTWFyYmxlIzExLjExLjE2LjAwLjAwCi11bnNwc2M3IzExLjExLjE2LjA2LjAwI1NsYXRlIzExLjExLjE2LjAwLjAwCi11bnNwc2M3IzExLjExLjE2LjA3LjAwI1NhbmRzdG9uZSMxMS4xMS4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMS4xNi4wOC4wMCNMaW1lc3RvbmUjMTEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTEuMTYuMDkuMDAjQmFzYWx0IzExLjExLjE2LjAwLjAwCi11bnNwc2M3IzExLjExLjE2LjEwLjAwI1B1bWljZSBzdG9uZSMxMS4xMS4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMS4xNy4wMC4wMCNTYW5kIzExLjExLjAwLjAwLjAwCi11bnNwc2M3IzExLjExLjE3LjAxLjAwI1NpbGljYSBzYW5kIzExLjExLjE3LjAwLjAwCi11bnNwc2M3IzExLjExLjE4LjAwLjAwI0NsYXlzIzExLjExLjAwLjAwLjAwCi11bnNwc2M3IzExLjExLjE4LjAxLjAwI1RlcnJhIGNvdHRhIzExLjExLjE4LjAwLjAwCi11bnNwc2M3IzExLjExLjE4LjAyLjAwI0ZpcmVjbGF5IzExLjExLjE4LjAwLjAwCi11bnNwc2M3IzExLjExLjE4LjAzLjAwI0thb2xpbiBvciBvdGhlciBrYW9saW5pYyBjbGF5cyMxMS4xMS4xOC4wMC4wMAotdW5zcHNjNyMxMS4xMS4xOC4wNC4wMCNCZW50b25pdGUjMTEuMTEuMTguMDAuMDAKLXVuc3BzYzcjMTEuMTEuMTguMDUuMDAjQW5kYWx1c2l0ZSMxMS4xMS4xOC4wMC4wMAotdW5zcHNjNyMxMS4xMS4xOC4wNi4wMCNNdWxsaXRlIzExLjExLjE4LjAwLjAwCi11bnNwc2M3IzExLjExLjE4LjA3LjAwI0NoYW1vdHRlIzExLjExLjE4LjAwLjAwCi11bnNwc2M3IzExLjExLjE4LjA4LjAwI0NvbW1vbiBjbGF5IzExLjExLjE4LjAwLjAwCi11bnNwc2M3IzExLjExLjE4LjA5LjAwI0JhbGwgY2xheSMxMS4xMS4xOC4wMC4wMAotdW5zcHNjNyMxMS4xMS4xOC4xMC4wMCNGdWxsZXJzIGVhcnRoIzExLjExLjE4LjAwLjAwCi11bnNwc2M3IzExLjEyLjAwLjAwLjAwI05vbiBlZGlibGUgcGxhbnQgYW5kIGZvcmVzdHJ5IHByb2R1Y3RzIzExLjAwLjAwLjAwLjAwCi11bnNwc2M3IzExLjEyLjE1LjAwLjAwI1NhcCMxMS4xMi4wMC4wMC4wMAotdW5zcHNjNyMxMS4xMi4xNS4wMi4wMCNSb3NpbiMxMS4xMi4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMi4xNS4wMy4wMCNMYWMjMTEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTIuMTYuMDAuMDAjV29vZCMxMS4xMi4wMC4wMC4wMAotdW5zcHNjNyMxMS4xMi4xNi4wMy4wMCNMb2dzIzExLjEyLjE2LjAwLjAwCi11bnNwc2M3IzExLjEyLjE2LjA0LjAwI1NvZnQgdGltYmVyIzExLjEyLjE2LjAwLjAwCi11bnNwc2M3IzExLjEyLjE2LjA1LjAwI1JhdHRhbiMxMS4xMi4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMi4xNi4wNi4wMCNDb3JrIzExLjEyLjE2LjAwLjAwCi11bnNwc2M3IzExLjEyLjE2LjA3LjAwI1dvb2QgcHVscCMxMS4xMi4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMi4xNi4wOC4wMCNCYW1ib28jMTEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTIuMTYuMDkuMDAjUGx5d29vZCMxMS4xMi4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMi4xNi4xMC4wMCNIYXJkd29vZHMjMTEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTIuMTcuMDAuMDAjRm9yZXN0cnkgYnkgcHJvZHVjdHMjMTEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMTEuMTIuMTcuMDEuMDAjU2F3IGR1c3QjMTEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTIuMTcuMDIuMDAjV29vZCBjaGlwcyMxMS4xMi4xNy4wMC4wMAotdW5zcHNjNyMxMS4xMi4xNy4wMy4wMCNQZWF0IG1vc3MjMTEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTIuMTcuMDQuMDAjV29vZCBzaGF2aW5ncyMxMS4xMi4xNy4wMC4wMAotdW5zcHNjNyMxMS4xMi4xNy4wNS4wMCNCYXJrIzExLjEyLjE3LjAwLjAwCi11bnNwc2M3IzExLjEyLjE3LjA2LjAwI011bGNoIzExLjEyLjE3LjAwLjAwCi11bnNwc2M3IzExLjEyLjE3LjA3LjAwI1dvb2Qgd29vbCMxMS4xMi4xNy4wMC4wMAotdW5zcHNjNyMxMS4xMi4xNy4wOC4wMCNXb29kIGZsb3VyIzExLjEyLjE3LjAwLjAwCi11bnNwc2M3IzExLjEyLjE3LjA5LjAwI0JhbHNhbXMjMTEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTIuMTguMDAuMDAjUGxhbnQgZmliZXJzIzExLjEyLjAwLjAwLjAwCi11bnNwc2M3IzExLjEyLjE4LjAxLjAwI0hlbXAjMTEuMTIuMTguMDAuMDAKLXVuc3BzYzcjMTEuMTIuMTguMDIuMDAjQ290dG9uIzExLjEyLjE4LjAwLjAwCi11bnNwc2M3IzExLjEyLjE4LjAzLjAwI0ZsYXgjMTEuMTIuMTguMDAuMDAKLXVuc3BzYzcjMTEuMTIuMTguMDQuMDAjSnV0ZSMxMS4xMi4xOC4wMC4wMAotdW5zcHNjNyMxMS4xMi4xOC4wNS4wMCNTaXNhbCMxMS4xMi4xOC4wMC4wMAotdW5zcHNjNyMxMS4xMi4xOC4wNi4wMCNDb2NvbnV0IGZpYnJlcyBvciBjb2lyIzExLjEyLjE4LjAwLjAwCi11bnNwc2M3IzExLjEyLjE4LjA3LjAwI0FiYWNhIGZpYmVycyMxMS4xMi4xOC4wMC4wMAotdW5zcHNjNyMxMS4xMi4xOC4wOC4wMCNSYW1pZSMxMS4xMi4xOC4wMC4wMAotdW5zcHNjNyMxMS4xMi4xOC4wOS4wMCNTdHJhdyMxMS4xMi4xOC4wMC4wMAotdW5zcHNjNyMxMS4xMi4xOC4xMC4wMCNCcm9vbSBjb3JuIG9yIGlzdGxlIG9yIHBpYXNzYXZhIzExLjEyLjE4LjAwLjAwCi11bnNwc2M3IzExLjEyLjE5LjAwLjAwI1BlcmZ1bWVyeSBwcm9kdWN0cyMxMS4xMi4wMC4wMC4wMAotdW5zcHNjNyMxMS4xMi4xOS4wMS4wMCNMaWNvcmljZSByb290cyMxMS4xMi4xOS4wMC4wMAotdW5zcHNjNyMxMS4xMy4wMC4wMC4wMCNOb24gZWRpYmxlIGFuaW1hbCBwcm9kdWN0cyMxMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMxMS4xMy4xNS4wMC4wMCNBbmltYWwgaGlkZXMgYW5kIHNraW5zIGFuZCBhbmltYWwgdGV4dGlsZSBtYXRlcmlhbHMjMTEuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMTEuMTMuMTUuMDEuMDAjRmVhdGhlcnMjMTEuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTMuMTUuMDIuMDAjRnVycyMxMS4xMy4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMy4xNS4wMy4wMCNBbmltYWwgaGFpciMxMS4xMy4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMy4xNS4wNC4wMCNIaWRlcyMxMS4xMy4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMy4xNS4wNS4wMCNVbnByb2Nlc3NlZCBtb2hhaXIjMTEuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTMuMTUuMDYuMDAjVW5wcm9jZXNzZWQgd29vbCMxMS4xMy4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMy4xNS4wNy4wMCNTdWVkZSMxMS4xMy4xNS4wMC4wMAotdW5zcHNjNyMxMS4xMy4xNS4wOC4wMCNGdWxsIGdyYWluIGxlYXRoZXIjMTEuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTMuMTYuMDAuMDAjT3RoZXIgYW5pbWFsIHByb2R1Y3RzIzExLjEzLjAwLjAwLjAwCi11bnNwc2M3IzExLjEzLjE2LjAxLjAwI0l2b3J5IzExLjEzLjE2LjAwLjAwCi11bnNwc2M3IzExLjEzLjE2LjAyLjAwI1NlbWVuIzExLjEzLjE2LjAwLjAwCi11bnNwc2M3IzExLjEzLjE2LjAzLjAwI0V4Y3JldGlvbnMjMTEuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTMuMTYuMDQuMDAjRmlzaCBlZ2dzIzExLjEzLjE2LjAwLjAwCi11bnNwc2M3IzExLjEzLjE2LjA1LjAwI0JvbmVzIzExLjEzLjE2LjAwLjAwCi11bnNwc2M3IzExLjEzLjE2LjA2LjAwI0FuaW1hbCBob3JucyMxMS4xMy4xNi4wMC4wMAotdW5zcHNjNyMxMS4xMy4xNi4wNy4wMCNFbWJyeW9zIzExLjEzLjE2LjAwLjAwCi11bnNwc2M3IzExLjEzLjE2LjA4LjAwI1NoZWxsIGFydGljbGVzIzExLjEzLjE2LjAwLjAwCi11bnNwc2M3IzExLjE0LjAwLjAwLjAwI1NjcmFwIGFuZCB3YXN0ZSBtYXRlcmlhbHMjMTEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTEuMTQuMTUuMDAuMDAjTWV0YWwgd2FzdGUgYW5kIHNjcmFwIzExLjE0LjAwLjAwLjAwCi11bnNwc2M3IzExLjE0LjE1LjAxLjAwI0ZlcnJvdXMgbWV0YWwgd2FzdGUgb3Igc2NyYXAjMTEuMTQuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTQuMTUuMDIuMDAjTm9uIGZlcnJvdXMgbWV0YWwgd2FzdGUgb3Igc2NyYXAjMTEuMTQuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTQuMTUuMDMuMDAjQXV0b21vdGl2ZSB3cmVja2luZyBmb3Igd2FzdGUgb3Igc2NyYXAjMTEuMTQuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTQuMTYuMDAuMDAjTm9uIG1ldGFsbGljIHdhc3RlIGFuZCBzY3JhcCMxMS4xNC4wMC4wMC4wMAotdW5zcHNjNyMxMS4xNC4xNi4wMS4wMCNUZXh0aWxlIHdhc3RlIG9yIHNjcmFwIzExLjE0LjE2LjAwLjAwCi11bnNwc2M3IzExLjE0LjE2LjAyLjAwI1BsYXN0aWMgd2FzdGUgb3Igc2NyYXAjMTEuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTQuMTYuMDMuMDAjT2lsIHdhc3RlcyMxMS4xNC4xNi4wMC4wMAotdW5zcHNjNyMxMS4xNC4xNi4wNC4wMCNQYXBlciB3YXN0ZXMjMTEuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTQuMTYuMDUuMDAjR2xhc3Mgd2FzdGUgb3Igc2NyYXAjMTEuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTQuMTYuMDYuMDAjV29vZCB3YXN0ZSBvciBzY3JhcCMxMS4xNC4xNi4wMC4wMAotdW5zcHNjNyMxMS4xNC4xNi4wNy4wMCNSdWJiZXIgd2FzdGUgb3Igc2NyYXAjMTEuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTQuMTYuMDguMDAjSGF6YXJkb3VzIHdhc3RlIG9yIHNjcmFwIzExLjE0LjE2LjAwLjAwCi11bnNwc2M3IzExLjE0LjE2LjA5LjAwI0NvbXBvc2l0aW9uIGxlYXRoZXIjMTEuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTQuMTYuMTAuMDAjTGVhdGhlciB3YXN0ZSBhbmQgc2NyYXAjMTEuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTQuMTcuMDAuMDAjRm9vZCBhbmQgdG9iYWNjbyB3YXN0ZSBhbmQgc2NyYXAjMTEuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMTEuMTQuMTcuMDEuMDAjRm9vZCB3YXN0ZSBvciBzY3JhcCMxMS4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMS4xNC4xNy4wMi4wMCNUb2JhY2NvIHdhc3RlIG9yIHNjcmFwIzExLjE0LjE3LjAwLjAwCi11bnNwc2M3IzExLjE1LjAwLjAwLjAwI0ZpYmVycyBhbmQgdGhyZWFkcyBhbmQgeWFybnMjMTEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTUuMDAuMDAjRmliZXJzIzExLjE1LjAwLjAwLjAwCi11bnNwc2M3IzExLjE1LjE1LjAxLjAwI0FjZXRhdGUgZmliZXJzIzExLjE1LjE1LjAwLjAwCi11bnNwc2M3IzExLjE1LjE1LjAyLjAwI055bG9uIGZpYmVycyMxMS4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNS4wMy4wMCNQb2x5ZXN0ZXIgZmliZXJzIzExLjE1LjE1LjAwLjAwCi11bnNwc2M3IzExLjE1LjE1LjA0LjAwI0FjcnlsaWMgZmliZXJzIzExLjE1LjE1LjAwLjAwCi11bnNwc2M3IzExLjE1LjE1LjA1LjAwI1Zpc2Nvc2UgZmliZXJzIzExLjE1LjE1LjAwLjAwCi11bnNwc2M3IzExLjE1LjE1LjA2LjAwI1JheW9uIGZpYmVycyMxMS4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNS4wNy4wMCNDb3R0b24gZmliZXJzIzExLjE1LjE1LjAwLjAwCi11bnNwc2M3IzExLjE1LjE1LjA4LjAwI1dvb2wgZmliZXJzIzExLjE1LjE1LjAwLjAwCi11bnNwc2M3IzExLjE1LjE1LjA5LjAwI1NpbGsgZmliZXJzIzExLjE1LjE1LjAwLjAwCi11bnNwc2M3IzExLjE1LjE1LjEwLjAwI1ZlZ2V0YWJsZSBmaWJlcnMjMTEuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTUuMTEuMDAjUG9seXByb3B5bGVuZSBmaWJlcnMjMTEuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTUuMTIuMDAjR2xhc3MgZmliZXJzIzExLjE1LjE1LjAwLjAwCi11bnNwc2M3IzExLjE1LjE1LjEzLjAwI0NlcmFtaWMgZmliZXJzIzExLjE1LjE1LjAwLjAwCi11bnNwc2M3IzExLjE1LjE1LjE0LjAwI1BvbHltZXIgYXJhbWlkIGZpYmVycyMxMS4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNS4xNS4wMCNBc2Jlc3RvcyBmaWJlcnMjMTEuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTYuMDAuMDAjVGhyZWFkcyMxMS4xNS4wMC4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNi4wMS4wMCNDb3R0b24gdGhyZWFkIzExLjE1LjE2LjAwLjAwCi11bnNwc2M3IzExLjE1LjE2LjAyLjAwI1NpbGsgdGhyZWFkIzExLjE1LjE2LjAwLjAwCi11bnNwc2M3IzExLjE1LjE2LjAzLjAwI1BvbHllc3RlciB0aHJlYWQjMTEuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTYuMDQuMDAjUG9seWFtaWRlIHRocmVhZCMxMS4xNS4xNi4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNi4wNS4wMCNCaXNtYWxlbWlkZSB0aHJlYWQjMTEuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTYuMDYuMDAjRmliZXJnbGFzcyB0aHJlYWQjMTEuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTYuMDcuMDAjR3JhcGhpdGUgdGhyZWFkIzExLjE1LjE2LjAwLjAwCi11bnNwc2M3IzExLjE1LjE2LjA4LjAwI055bG9uIHRocmVhZCMxMS4xNS4xNi4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNi4wOS4wMCNSZXNpbiBpbXByZWduYXRlZCB0aHJlYWQjMTEuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTYuMTAuMDAjUnViYmVyIG9yIGxhdGV4IHRocmVhZCMxMS4xNS4xNi4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNi4xMS4wMCNTcGFuZGV4IHRocmVhZCMxMS4xNS4xNi4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNy4wMC4wMCNZYXJucyMxMS4xNS4wMC4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNy4wMS4wMCNXb29sIHlhcm4jMTEuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTcuMDIuMDAjQ290dG9uIHlhcm4jMTEuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTcuMDMuMDAjUG9seWVzdGVyIHlhcm4jMTEuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTcuMDQuMDAjQWNyeWxpYyB5YXJuIzExLjE1LjE3LjAwLjAwCi11bnNwc2M3IzExLjE1LjE3LjA1LjAwI1NpbGsgeWFybiMxMS4xNS4xNy4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNy4wNi4wMCNSYW1pZSB5YXJuIzExLjE1LjE3LjAwLjAwCi11bnNwc2M3IzExLjE1LjE3LjA3LjAwI0ZsYXggeWFybiMxMS4xNS4xNy4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNy4wOC4wMCNBbmltYWwgaGFpciB5YXJuIzExLjE1LjE3LjAwLjAwCi11bnNwc2M3IzExLjE1LjE3LjA5LjAwI1N5bnRoZXRpYyB5YXJuIzExLjE1LjE3LjAwLjAwCi11bnNwc2M3IzExLjE1LjE3LjEwLjAwI0p1dGUgeWFybiMxMS4xNS4xNy4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNy4xMS4wMCNDb2lyIHlhcm4jMTEuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTUuMTcuMTIuMDAjUGFwZXIgeWFybiMxMS4xNS4xNy4wMC4wMAotdW5zcHNjNyMxMS4xNS4xNy4xMy4wMCNIZW1wIHlhcm4jMTEuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMDAuMDAuMDAjRmFicmljcyBhbmQgbGVhdGhlciBtYXRlcmlhbHMjMTEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMTUuMDAuMDAjU2lsayBmYWJyaWNzIzExLjE2LjAwLjAwLjAwCi11bnNwc2M3IzExLjE2LjE1LjAxLjAwI1BsYWluIHdlYXZlIHNpbGsgZmFicmljcyMxMS4xNi4xNS4wMC4wMAotdW5zcHNjNyMxMS4xNi4xNS4wMi4wMCNKYWNxdWFyZCB3ZWF2ZSBzaWxrIGZhYnJpY3MjMTEuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMTUuMDMuMDAjS25pdCBzaWxrIGZhYnJpY3MjMTEuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMTUuMDQuMDAjU2lsayB2ZWx2ZXRzIGZhYnJpY3MjMTEuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMTYuMDAuMDAjV29vbCBmYWJyaWNzIzExLjE2LjAwLjAwLjAwCi11bnNwc2M3IzExLjE2LjE2LjAxLjAwI1BsYWluIHdlYXZlIHdvb2wgZmFicmljcyMxMS4xNi4xNi4wMC4wMAotdW5zcHNjNyMxMS4xNi4xNi4wMi4wMCNKYWNxdWFyZCB3ZWF2ZSB3b29sIGZhYnJpY3MjMTEuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMTYuMDMuMDAjS25pdCB3b29sIGZhYnJpY3MjMTEuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMTcuMDAuMDAjQ290dG9uIGZhYnJpY3MjMTEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMTcuMDEuMDAjUGxhaW4gd2VhdmUgY290dG9uIGZhYnJpY3MjMTEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMTcuMDIuMDAjVHdpbGwgd2VhdmUgY290dG9uIGZhYnJpY3MjMTEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMTcuMDMuMDAjQ290dG9uIG94Zm9yZCBjbG90aHMjMTEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMTcuMDQuMDAjS25pdCBjb3R0b24gZmFicmljcyMxMS4xNi4xNy4wMC4wMAotdW5zcHNjNyMxMS4xNi4xNy4wNS4wMCNDb3R0b24gdmVsdmV0IGZhYnJpY3MjMTEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMTguMDAuMDAjU3ludGhldGljIGZhYnJpY3MjMTEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMTguMDEuMDAjUGxhaW4gd2VhdmUgc3ludGhldGljIGZhYnJpY3MjMTEuMTYuMTguMDAuMDAKLXVuc3BzYzcjMTEuMTYuMTguMDIuMDAjSmFjcXVhcmQgd2VhdmUgc3ludGhldGljIGZhYnJpY3MjMTEuMTYuMTguMDAuMDAKLXVuc3BzYzcjMTEuMTYuMTguMDMuMDAjRG9iYnkgd2VhdmUgc3ludGhldGljIGZhYnJpY3MjMTEuMTYuMTguMDAuMDAKLXVuc3BzYzcjMTEuMTYuMTguMDQuMDAjS25pdCBzeW50aGV0aWMgZmFicmljcyMxMS4xNi4xOC4wMC4wMAotdW5zcHNjNyMxMS4xNi4xOC4wNS4wMCNTeW50aGV0aWMgdmVsdmV0IGZhYnJpY3MjMTEuMTYuMTguMDAuMDAKLXVuc3BzYzcjMTEuMTYuMTkuMDAuMDAjQXJ0aWZpY2lhbCBmYWJyaWNzIzExLjE2LjAwLjAwLjAwCi11bnNwc2M3IzExLjE2LjE5LjAxLjAwI1BsYWluIHdlYXZlIGFydGlmaWNpYWwgZmFicmljcyMxMS4xNi4xOS4wMC4wMAotdW5zcHNjNyMxMS4xNi4xOS4wMi4wMCNKYWNxdWFyZCB3ZWF2ZSBhcnRpZmljaWFsIGZhYnJpY3MjMTEuMTYuMTkuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMTkuMDMuMDAjRG9iYnkgd2VhdmUgYXJ0aWZpY2lhbCBmYWJyaWNzIzExLjE2LjE5LjAwLjAwCi11bnNwc2M3IzExLjE2LjE5LjA0LjAwI0tuaXQgYXJ0aWZpY2lhbCBmYWJyaWNzIzExLjE2LjE5LjAwLjAwCi11bnNwc2M3IzExLjE2LjE5LjA1LjAwI0FydGlmaWNhbCB2ZWx2ZXQgZmFicmljcyMxMS4xNi4xOS4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMC4wMC4wMCNGYWJyaWNzIG9mIHZlZ2V0YWJsZSBtYXRlcmlhbCBvdGhlciB0aGFuIGNvdHRvbiMxMS4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMC4wMS4wMCNQbGFpbiB3ZWF2ZSBub24gY290dG9uIHZlZ2V0YWJsZSBmaWJlciBmYWJyaWNzIzExLjE2LjIwLjAwLjAwCi11bnNwc2M3IzExLjE2LjIwLjAyLjAwI0tuaXQgbm9uIGNvdHRvbiB2ZWdldGFibGUgZmliZXIgZmFicmljcyMxMS4xNi4yMC4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMC4wMy4wMCNIZXNzaWFuIG9yIGhlbXAgb3IganV0ZSBjbG90aCMxMS4xNi4yMC4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMS4wMC4wMCNTcGVjaWFsdHkgZmFicmljcyBvciBjbG90aCMxMS4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMS4wMS4wMCNDaGVlc2UgY2xvdGggb3IgZmFicmljIzExLjE2LjIxLjAwLjAwCi11bnNwc2M3IzExLjE2LjIxLjAyLjAwI0Jpc21hbGVtaWRlIGZhYnJpYyBvciBjbG90aCMxMS4xNi4yMS4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMS4wMy4wMCNGaWJlcmdsYXNzIGZhYnJpYyBvciBjbG90aCMxMS4xNi4yMS4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMS4wNC4wMCNHcmFwaGl0ZSBmYWJyaWMgb3IgY2xvdGgjMTEuMTYuMjEuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMjEuMDUuMDAjR2xhc3MgZmFicmljIG9yIGNsb3RoIzExLjE2LjIxLjAwLjAwCi11bnNwc2M3IzExLjE2LjIxLjA3LjAwI1Jlc2luIGltcHJlZ25hdGVkIGZhYnJpYyBvciBjbG90aCMxMS4xNi4yMS4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMS4wOC4wMCNXaXJlIG1lc2ggZmFicmljIG9yIGNsb3RoIzExLjE2LjIxLjAwLjAwCi11bnNwc2M3IzExLjE2LjIxLjA5LjAwI0xhY2UjMTEuMTYuMjEuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMjEuMTAuMDAjTmV0dGluZyMxMS4xNi4yMS4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMS4xMS4wMCNNZXNoIzExLjE2LjIxLjAwLjAwCi11bnNwc2M3IzExLjE2LjIxLjEyLjAwI0NvYXRlZCBmYWJyaWNzIzExLjE2LjIxLjAwLjAwCi11bnNwc2M3IzExLjE2LjIxLjEzLjAwI1VwaG9sc3RlcnkgZmFicmljcyMxMS4xNi4yMS4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMS4xNC4wMCNIb29rIGFuZCBsb29wIGZhYnJpY3Mgb3IgdGFwZXMjMTEuMTYuMjEuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMjEuMTUuMDAjRWxhc3RpYyBicmFpZCMxMS4xNi4yMS4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMS4xNi4wMCNCdXJsYXAgY2xvdGgjMTEuMTYuMjEuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMjEuMTcuMDAjUnViYmVyIGZhYnJpY3MjMTEuMTYuMjEuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMjEuMTguMDAjUGFwZXIgeWFybiBmYWJyaWMjMTEuMTYuMjEuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMjEuMTkuMDAjVHJhY2luZyBjbG90aCMxMS4xNi4yMS4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMS4yMC4wMCNCb2x0aW5nIGNsb3RoIzExLjE2LjIxLjAwLjAwCi11bnNwc2M3IzExLjE2LjIxLjIxLjAwI09ybmFtZW50YWwgdHJpbW1pbmdzIzExLjE2LjIxLjAwLjAwCi11bnNwc2M3IzExLjE2LjIyLjAwLjAwI05vbndvdmVuIGZhYnJpY3MjMTEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMjIuMDEuMDAjU3B1bmJvbmRlZCBub253b3ZlbnMjMTEuMTYuMjIuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMjIuMDIuMDAjU3B1bmxhY2VkIG5vbndvdmVucyMxMS4xNi4yMi4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMy4wMC4wMCNMZWF0aGVycyMxMS4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMy4wMS4wMCNDaGFtb2lzIGxlYXRoZXIjMTEuMTYuMjMuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMjMuMDIuMDAjR29hdCBsZWF0aGVyIzExLjE2LjIzLjAwLjAwCi11bnNwc2M3IzExLjE2LjIzLjAzLjAwI1NoZWVwIGxlYXRoZXIjMTEuMTYuMjMuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMjMuMDQuMDAjUGF0ZW50IGxlYXRoZXIjMTEuMTYuMjMuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMjMuMDUuMDAjQ293IGxlYXRoZXIjMTEuMTYuMjMuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMjMuMDYuMDAjUGlnIGxlYXRoZXIjMTEuMTYuMjMuMDAuMDAKLXVuc3BzYzcjMTEuMTYuMjMuMDcuMDAjU3ludGhldGljIG9yIGltaXRhdGlvbiBsZWF0aGVyIzExLjE2LjIzLjAwLjAwCi11bnNwc2M3IzExLjE2LjIzLjA4LjAwI0J1ZmZhbG8gbGVhdGhlciMxMS4xNi4yMy4wMC4wMAotdW5zcHNjNyMxMS4xNi4yMy4wOS4wMCNSZXB0aWxlIGxlYXRoZXIjMTEuMTYuMjMuMDAuMDAKLXVuc3BzYzcjMTIuMDAuMDAuMDAuMDAjQ2hlbWljYWxzIGluY2x1ZGluZyBCaW8gQ2hlbWljYWxzIGFuZCBHYXMgTWF0ZXJpYWxzIzEyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzEyLjEwLjAwLjAwLjAwI09yZ2FuaWMgY2hlbWljYWxzIzEyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzEyLjEwLjE1LjAwLjAwI0FsY29ob2wjMTIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTUuMDEuMDAjU2F0dXJhdGVkIG1vbm9oeWRyaWMgYWxjb2hvbCMxMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMi4xMC4xNS4wMi4wMCNJc29wcm9weWwgYWxjb2hvbCMxMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMi4xMC4xNS4wMy4wMCNVbnNhdHVyYXRlZCBtb25vaHlkcmljIGFsY29ob2wjMTIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTUuMDQuMDAjQ3ljbGljIGFsY29ob2wgb3IgdGhlaXIgaGFsb2dlbmF0ZWQgb3Igc3VscGhvbmF0ZWQgb3Igbml0cmF0ZWQgZGVyaXZhdGl2ZXMjMTIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTUuMDUuMDAjUGhlbm9sIGFsY29ob2wjMTIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTUuMDYuMDAjSGFsb2dlbmF0ZWQgb3Igc3VscGhvbmF0ZWQgb3Igbml0cmF0ZWQgb3Igbml0cm9zYXRlZCBkZXJpdmF0aXZlcyBvZiBwaGVub2xzIzEyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE1LjA3LjAwI01ldGh5bGF0ZWQgc3Bpcml0IzEyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE2LjAwLjAwI0V0aGVycyBhbmQgYWxjb2hvbCBwZXJveGlkZXMgYW5kIGV0aGVyIHBlcm94aWRlcyBhbmQgb3RoZXIgb3JnYW5pYyBjb21wb3VuZHMjMTIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTYuMDEuMDAjQWN5Y2xpYyBldGhlcnMjMTIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTYuMDIuMDAjQ3ljbG9uaWMgb3IgY3ljbGVuaWMgb3IgY3ljbG90ZXJwZW5pYyBldGhlcnMjMTIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTYuMDMuMDAjRXRoZXIgb3IgYXJvbWF0aWMgZXRoZXIjMTIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTYuMDQuMDAjRXRoZXIgYWxjb2hvbCMxMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMC4xNi4wNS4wMCNFdGhlciBwaGVub2xzIG9yIGV0aGVyIGFsY29ob2wgcGhlbm9scyMxMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMC4xNi4wNi4wMCNBbGNvaG9sIHBlcm94aWRlcyMxMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMC4xNi4wNy4wMCNPeGlyYW5lIG9yIGV0aHlsZW5lIG94aWRlIzEyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE2LjA4LjAwI0VwaWNobG9yb2h5ZHJpbiBvciAxIGNobG9ybyAyIG9yIDMgZXBveHlwcm9wYW5lIzEyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE2LjA5LjAwI0Vwb3hpZGVzIG9yIGVwb3h5YWxjb2hvbHMgb3IgZXBveHlwaGVub2xzIG9yIGVwb3h5ZXRoZXJzIzEyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE2LjEwLjAwI0FjZXRhbHMgb3Iga2VtaWFjZXRhbHMjMTIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTYuMTEuMDAjQWN5Y2xpYyBhbGRlaHlkZXMgd2l0aG91dCBvdGhlciBveHlnZW4gZnVuY3Rpb24jMTIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTYuMTIuMDAjQ3ljbGljIGFsZGVoeWRlcyB3aXRob3V0IG90aGVyIG94eWdlbiBmdW5jdGlvbiMxMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMC4xNi4xMy4wMCNBbGNvaG9sIGFsZGVoeWRlIzEyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE2LjE0LjAwI1BhcmFmb3JtYWxkZWh5ZGUjMTIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTYuMTUuMDAjQWxkZWh5ZGVzIzEyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE2LjE2LjAwI0FjeWNsaWMga2V0b25lcyB3aXRob3V0IG90aGVyIG94eWdlbiBmdW5jdGlvbiMxMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMC4xNi4xNy4wMCNDeWNsb25pYyBvciBjeWNsZW5pYyBvciBjeWNsb3RlcnBlbmljIGtldG9uZXMgd2l0aG91dCBvdGhlciBveHlnZW4gZnVuY3Rpb24jMTIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTYuMTguMDAjS2V0b25lcyBvciBhcm9tYXRpYyB3aXRob3V0IG90aGVyIG94eWdlbiBmdW5jdGlvbiMxMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMC4xNi4xOS4wMCNLZXRvbmUgYWxjb2hvbCBvciBrZXRvbmUgYWxkZWh5ZGVzIzEyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE2LjIwLjAwI0tldG9uZSBwaGVub2xzIG9yIGtldG9uZXMgd2l0aCBvdGhlciBveHlnZW4gZnVuY3Rpb24jMTIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTYuMjEuMDAjUXVpbm9uZXMjMTIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTYuMjIuMDAjUmVubmV0IHRhYmxldHMjMTIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTYuMjMuMDAjRW56eW1lcyMxMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMC4xNy4wMC4wMCNNb25vY2FyYm94eWxpYyBmYXR0eSBhY2lkcyBvciBpbmR1c3RyaWFsIGFjaWQgb2lscyBmcm9tIHJlZmluaW5nIzEyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzEyLjEwLjE3LjAxLjAwI09sZWljIGFjaWQjMTIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTcuMDIuMDAjSW5kdXN0cmlhbCBmYXR0eSBhbGNvaG9scyMxMi4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xMC4xNy4wMy4wMCNTdGVhcmljIGFjaWQjMTIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTcuMDQuMDAjVGFsbCBvaWwgZmF0dHkgYWNpZHMjMTIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTcuMDUuMDAjQWNpZCBvaWxzIGZyb20gcmVmaW5pbmcjMTIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTguMDAuMDAjQ2FyYm94eWxpYyBhY2lkcyBhbmQgdGhlaXIgYW5oeWRyaWRlcyBhbmQgaGFsaWRlcyBhbmQgcGVyb3hpZGVzIGFuZCBwZXJveHlhY2lkcyMxMi4xMC4wMC4wMC4wMAotdW5zcHNjNyMxMi4xMC4xOC4wMS4wMCNGb3JtaWMgYWNpZCBvciBpdHMgc2FsdHMgb3IgZXN0ZXJzIzEyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE4LjAyLjAwI0FjZXRpYyBhY2lkIG9yIGl0cyBzYWx0cyBvciAgYWNldGljIGFuaHlkcmlkZSMxMi4xMC4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMC4xOC4wMy4wMCNFc3RlcnMgb2YgYWNldGljIGFjaWQjMTIuMTAuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTguMDQuMDAjTW9ubyBvciBkaSB0cmljaGxvcmFjZXRpYyBhY2lkIG9yIHRoZWlyIHNhbHRzIG9yIGVzdGVycyMxMi4xMC4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMC4xOC4wNS4wMCNQcm9waW9uaWMgYWNpZCBvciBpdHMgc2FsdHMgb3IgZXN0ZXJzIzEyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE4LjA2LjAwI0J1dHlyaWMgYWNpZHMgb3IgdmFsZXJpYyBhY2lkcyBvciB0aGVpciBzYWx0cyBvciBlc3RlcnMjMTIuMTAuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTguMDcuMDAjUGFsbWl0aWMgYWNpZHMgb3Igc3RlYXJpYyBhY2lkcyBvciB0aGVpciBzYWx0cyBvciBlc3RlcnMjMTIuMTAuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTguMDguMDAjU2F0dXJhdGVkIGFjcnlsaWMgbW9ub2NhcmJveHlsaWMgYWNpZHMjMTIuMTAuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTguMDkuMDAjVW5zYXR1cmF0ZWQgYWN5Y2xpYyBtb25vY2FyYm94eWxpYyBhY2lkcyMxMi4xMC4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMC4xOC4xMC4wMCNDeWNsb25pYyBvciBjeWNsZW5pYyBvciBjeWNsb3RlcnBlbmljIG1vbm9jYXJib3h5bGljIGFjaWRzIzEyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE4LjExLjAwI0Fyb21hdGljIG1vbm9jYXJib3h5bGljIGFjaWRzIzEyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE4LjEyLjAwI0FjeWNsaWMgcG9seWNhcmJveHlsaWMgYWNpZHMjMTIuMTAuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTguMTMuMDAjQ3ljbG9uaWMgb3IgY3ljbGVuaWMgb3IgY3ljbG90ZXJwZW5pYyBwb2x5Y2FyYm94eWxpYyBhY2lkcyMxMi4xMC4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMC4xOC4xNC4wMCNBcm9tYXRpYyBwb2x5Y2FyYm94eWxpYyBhY2lkcyMxMi4xMC4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMC4xOC4xNS4wMCNMYWN0aWMgYWNpZCBvciBpdHMgc2FsdHMgb3IgZXN0ZXJzIzEyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE4LjE2LjAwI1RhcnRhcmljIGFjaWQgb3IgaXRzIHNhbHRzIG9yIGVzdGVycyMxMi4xMC4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMC4xOC4xNy4wMCNBdHJpYyBhY2lkIG9yIHRzIHNhbHRzIG9yIGVzdGVycyMxMi4xMC4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMC4xOC4xOC4wMCNHbHVjYXJpYyBhY2lkIG9yIGl0cyBzYWx0cyBvciBlc3RlcnMjMTIuMTAuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTAuMTguMTkuMDAjUGhlbnlsZ2x5b2NvbGljIGFjaWQgb3IgbWFuZGVsaWMgYWNpZCBvciBpdHMgc2FsdHMgb3IgZXN0ZXJzIzEyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE4LjIwLjAwI0NhcmJveHlsaWMgYWNpZHMgd2l0aCBhbGNvaG9sIGZ1bmN0aW9uIGJ1dCB3aXRob3V0IG90aGVyIG94eWdlbiBmdW5jdGlvbiMxMi4xMC4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMC4xOC4yMS4wMCNDYXJib3h5bGljIGFjaWRzIHdpdGggcGhlbm9sIGZ1bmN0aW9uIGJ1dCB3aXRob3V0IG90aGVyIG94eWdlbiBmdW5jdGlvbiMxMi4xMC4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMC4xOC4yMi4wMCNDYXJib3h5bGljIGFjaWRzIHdpdGggYWxkZWh5ZGUgb3Iga2V0b25lIGZ1bmN0aW9uIzEyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzEyLjEwLjE5LjAwLjAwI0FtaW5lIGFuZCBveHlnZW4gZnVuY3Rpb24gYW1pbm8gY29tcG91bmRzIGFuZCB1cmVpbmVzIzEyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzEyLjEwLjE5LjAxLjAwI0dsdXRhbWljIGFjaWQgb3IgaXRzIHNhbHRzIzEyLjEwLjE5LjAwLjAwCi11bnNwc2M3IzEyLjEwLjIwLjAwLjAwI09yZ2FubyBzdWxmdXIgY29tcG91bmRzIGFuZCBvdGhlciBvcmdhbm8gaW5vcmdhbmljIGNvbXBvdW5kcyMxMi4xMC4wMC4wMC4wMAotdW5zcHNjNyMxMi4xMC4yMC4wMS4wMCNPcmdhbm8gc3VsZnVyIGNvbXBvdW5kcyMxMi4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMi4xMC4yMC4wMi4wMCNPdGhlciBvcmdhbm8gaW5vcmdhbmljIGNvbXBvdW5kcyMxMi4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMi4xMC4yMC4wMy4wMCNDb21wb3VuZHMgY29udGFpbmluZyBhbiB1bmZ1c2VkIGZ1cmFuIHJpbmcgaW4gdGhlIHN0cnVjdHVyZSMxMi4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMi4xMC4yMC4wNC4wMCNMYWN0aW5lcyMxMi4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMi4xMC4yMC4wNS4wMCNDb21wb3VuZHMgY29udGFpbmluZyBhbiB1bmZ1c2VkIGltaWRhem9sZSByaW5nIGluIHRoZSBzdHJ1Y3R1cmUjMTIuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMjAuMDYuMDAjQ29tcG91bmRzIGNvbnRhaW5pbmcgYW4gdW5mdXNlZCBweXJpZGluZSByaW5nIGluIHRoZSBzdHJ1Y3R1cmUjMTIuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMjAuMDcuMDAjQ29tcG91bmRzIGNvbnRhaW5pbmcgYSBxdWlub2xpbmUgb3IgaXNvcXVpbm9saW5lIHJpbmcgc3lzdGVtIzEyLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEyLjEwLjIwLjA4LjAwI0xhY3RhbXMjMTIuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMjAuMDkuMDAjSGV0ZXJvY3ljbGljIGNvbXBvdW5kcyB3aXRoIG5pdHJvZ2VuIGhldGVybyBhdG9tIG9ubHkjMTIuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMjAuMTAuMDAjQ29tcG91bmRzIGNvbnRhaW5pbmcgYW4gdW5mdXNlZCB0aGlhem9sZSByaW5nIGluIHRoZSBzdHJ1Y3R1cmUjMTIuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMjEuMDAuMDAjSHlkcm9jYXJib25zIGFuZCB0aGVpciBoYWxvZ2VuYXRlZCBhbmQgc3VscGhvbmF0ZWQgYW5kIG5pdHJvc2F0ZWQgZGVyaXZhdGl2ZXMjMTIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMjEuMDEuMDAjU2F0dXJhdGVkIGFjeWNsaWMgaHlkcm9jYXJib25zIzEyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzEyLjEwLjIxLjAyLjAwI1Vuc2F0dXJhdGVkIGFjeWNsaWMgaHlkcm9jYXJib25zIzEyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzEyLjEwLjIxLjAzLjAwI0N5Y2xpYyBoeWRyb2NhcmJvbnMjMTIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMjEuMDQuMDAjSGFsb2dlbnRhdGVkIGRlcml2YXRpdmVzIG9mIGh5ZHJvY2FyYm9ucyMxMi4xMC4yMS4wMC4wMAotdW5zcHNjNyMxMi4xMC4yMS4wNS4wMCNSZWZyaWdlcmFudHMjMTIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMjEuMDYuMDAjU3VscGhvbmF0ZWQgb3Igbml0cmF0ZWQgb3Igbml0cm9zYXRlZCBkZXJpdmF0aXZlcyBvZiBoeWRyb2NhcmJvbnMjMTIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMjEuMDcuMDAjUGFyYWZmaW4jMTIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMTAuMjIuMDAuMDAjUGhvc3Bob3JpYyBlc3RlcnMgYW5kIHRoZWlyIHNhbHRzIGFuZCBlc3RlcnMgb2Ygb3RoZXIgb3JnYW5pYyBhY2lkcyMxMi4xMC4wMC4wMC4wMAotdW5zcHNjNyMxMi4xMC4yMi4wMS4wMCNQaG9zcGhvcmljIGVzdGVycyBvciB0aGVpciBzYWx0cyMxMi4xMC4yMi4wMC4wMAotdW5zcHNjNyMxMi4xMS4wMC4wMC4wMCNJbm9yZ2FuaWMgY2hlbWljYWxzIzEyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzEyLjExLjE2LjAwLjAwI0NoZW1pY2FsIGVsZW1lbnRzIzEyLjExLjAwLjAwLjAwCi11bnNwc2M3IzEyLjExLjE2LjAxLjAwI0NobG9yaW5lIzEyLjExLjE2LjAwLjAwCi11bnNwc2M3IzEyLjExLjE2LjAyLjAwI0ZsdW9yaW5lIG9yIGJyb21pbmUjMTIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTYuMDMuMDAjQ2hsb3JpbmUgbGlxdWlkIGdhcyMxMi4xMS4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMS4xNi4wNC4wMCNTdWJsaW1lcyBvciBwcmVjaXBpdGF0ZWQgc3VscGh1ciBvciBjb2xsb2lkYWwgc3VscGh1ciMxMi4xMS4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMS4xNi4wNS4wMCNCb3JvbiBvciB0ZWxsdXJpdW0jMTIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTYuMDYuMDAjU2lsaWNvbiMxMi4xMS4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMS4xNi4wNy4wMCNBbGthbGkgbWV0YWxzIzEyLjExLjE2LjAwLjAwCi11bnNwc2M3IzEyLjExLjE2LjA4LjAwI0Fsa2FsaW5lIGVhcnRoIG1ldGFscyMxMi4xMS4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMS4xNi4wOS4wMCNNZXJjdXJ5IzEyLjExLjE2LjAwLjAwCi11bnNwc2M3IzEyLjExLjE2LjEwLjAwI0h5ZHJvZ2VuIGNobG9yaWRlIG9yIGh5ZHJvY2hsb3JpYyBhY2lkIzEyLjExLjE2LjAwLjAwCi11bnNwc2M3IzEyLjExLjE2LjExLjAwI0NobG9yb3N1bGZ1cmljIGFjaWQjMTIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTYuMTIuMDAjU3VscGh1cmljIGFjaWQjMTIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTYuMTMuMDAjUGhvc3Bob3J1cyBwZW50YW94aWRlIG9yIHBob3NwaG9yaWMgYWNpZCBvciBwb2x5cGhvc3Bob3JpYyBhY2lkcyMxMi4xMS4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMS4xNi4xNC4wMCNPeGlkZXMgb2YgYm9yb24gb3IgYm9yaWMgYWNpZHMjMTIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTYuMTUuMDAjSHlkcm9nZW4gZmx1b3JpZGUgb3IgaHlkcm9mbHVvcmljIGFjaWQjMTIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTYuMTYuMDAjU2lsaWNvbiBkaW94aWRlIzEyLjExLjE2LjAwLjAwCi11bnNwc2M3IzEyLjExLjE2LjE3LjAwI1N1bHBodXIgZGlveGlkZSMxMi4xMS4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMS4xNi4xOC4wMCNIeWRyb2N5YW5pYyBhY2lkIzEyLjExLjE2LjAwLjAwCi11bnNwc2M3IzEyLjExLjE2LjE5LjAwI0hhbGlkZXMgb3IgaGFsaWRlIG94aWRlcyBvZiBub24gbWV0YWxzIzEyLjExLjE2LjAwLjAwCi11bnNwc2M3IzEyLjExLjE2LjIwLjAwI1N1bHBoaWRlcyBvZiBub24gbWV0YWxzIzEyLjExLjE2LjAwLjAwCi11bnNwc2M3IzEyLjExLjE2LjIxLjAwI1NvZGl1bSBvciBwb3Rhc3NpdW0gaHlkcm94aWRlIzEyLjExLjE2LjAwLjAwCi11bnNwc2M3IzEyLjExLjE2LjIyLjAwI0h5ZHJveGlkZSBvciBwZXJveGlkZSBvZiBtYWduZXNpdW0gb3Igb3hpZGVzIzEyLjExLjE2LjAwLjAwCi11bnNwc2M3IzEyLjExLjE2LjIzLjAwI0FsdW1pbnVtIGh5ZHJveGlkZSMxMi4xMS4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMS4xNi4yNC4wMCNIeWRyb3hpZGUgb3IgaHlkcm94eWxhbWluZSBvciB0aGVpciBpbm9yZ2FuaWMgc2FsdHMjMTIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTcuMDAuMDAjTWV0YWwgb3hpZGVzIGFuZCBoeWRyb3hpZGVzIGFuZCBwZXJveGlkZXMjMTIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTcuMDEuMDAjWmluYyBveGlkZSBvciB6aW5jIHBlcm94aWRlIzEyLjExLjE3LjAwLjAwCi11bnNwc2M3IzEyLjExLjE3LjAyLjAwI0Nocm9taXVtIG94aWRlcyBvciBoeWRyb3hpZGVzIzEyLjExLjE3LjAwLjAwCi11bnNwc2M3IzEyLjExLjE3LjAzLjAwI01hbmdhbmVzZSBveGlkZXMjMTIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTcuMDQuMDAjSXJvbiBveGlkZXMgb3IgaHlkcm94aWRlcyBvciBlYXJ0aCBjb2xvdXJzIzEyLjExLjE3LjAwLjAwCi11bnNwc2M3IzEyLjExLjE3LjA1LjAwI0NvYmFsdCBveGlkZXMgb3IgaHlkcm94aWRlcyBvciBjb21tZXJjaWFsIGNvYmFsdCBveGlkZXMjMTIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTcuMDYuMDAjVGl0YW5pdW0gb3hpZGVzIzEyLjExLjE3LjAwLjAwCi11bnNwc2M3IzEyLjExLjE3LjA3LjAwI0xlYWQgb3hpZGVzIG9yIHJlZCBsZWFkIG9yIG9yYW5nZSBsZWFkIzEyLjExLjE3LjAwLjAwCi11bnNwc2M3IzEyLjExLjE3LjA4LjAwI0xpdGhpdW0gb3hpZGUgb3IgaHlkcm94aWRlIzEyLjExLjE3LjAwLjAwCi11bnNwc2M3IzEyLjExLjE3LjA5LjAwI1ZhbmFkaXVtIG94aWRlcyBvciBoeWRyb3hpZGVzIzEyLjExLjE3LjAwLjAwCi11bnNwc2M3IzEyLjExLjE3LjEwLjAwI05pY2tlbCBveGlkZXMgb3IgaHlkcm94aWRlcyMxMi4xMS4xNy4wMC4wMAotdW5zcHNjNyMxMi4xMS4xNy4xMS4wMCNDb3BwZXIgb3hpZGVzIG9yIGh5ZHJveGlkZXMjMTIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTcuMTIuMDAjR2VybWFuaXVtIG94aWRlcyBvciB6aXJjb25pdW0gZGlveGlkZSMxMi4xMS4xNy4wMC4wMAotdW5zcHNjNyMxMi4xMS4xNy4xMy4wMCNNb2x5YmRlbnVtIG94aWRlcyBvciBoeWRyb3hpZGVzIzEyLjExLjE3LjAwLjAwCi11bnNwc2M3IzEyLjExLjE3LjE0LjAwI0FudGltb255IG94aWRlcyMxMi4xMS4xNy4wMC4wMAotdW5zcHNjNyMxMi4xMS4xOC4wMC4wMCNTYWx0cyBvZiBveG9tZXRhbGxpYyBhbmQgcGVyb3hvbWV0YWxsaWMgYWNpZHMgYW5kIG90aGVyIGlub3JnYW5pYyBhY2lkcyMxMi4xMS4wMC4wMC4wMAotdW5zcHNjNyMxMi4xMS4xOC4wMS4wMCNBbHVtaW5hdGVzIzEyLjExLjE4LjAwLjAwCi11bnNwc2M3IzEyLjExLjE4LjAyLjAwI1ppbmMgb3IgbGVhZCBjaHJvbWF0ZSMxMi4xMS4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMS4xOC4wMy4wMCNTb2RpdW0gZGljaHJvbWF0ZSMxMi4xMS4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMS4xOC4wNC4wMCNQb3Rhc3NpdW0gZGljaHJvbWF0ZSMxMi4xMS4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMS4xOC4wNS4wMCNPdGhlciBjaHJvbWF0ZSBvciBkaWNocm9tYXRlIG9yIHBlcm94b2Nocm9tYXRlcyMxMi4xMS4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMS4xOC4wNi4wMCNNYW5nYW5pdGVzIG9yIG1hbmdhbmF0ZXMgb3IgcGVybWFuZ2FuYXRlcyMxMi4xMS4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMS4xOC4wNy4wMCNNb2x5YmRhdGVzIzEyLjExLjE4LjAwLjAwCi11bnNwc2M3IzEyLjExLjE4LjA4LjAwI1R1bmdzdGF0ZXMgb3Igd29sZnJhbWF0ZXMjMTIuMTEuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTguMDkuMDAjU2lsdmVyIGNvbXBvdW5kcyMxMi4xMS4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMS4xOC4xMC4wMCNHb2xkIGNvbXBvdW5kcyMxMi4xMS4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMS4xOC4xMS4wMCNPdGhlciBjb21wb3VuZHMgb3IgYW1hbGdhbXMjMTIuMTEuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTguMTIuMDAjQW1hbGdhbXMgb3RoZXIgdGhhbiBhbWFsZ2FtcyBvZiBwcmVjaW91cyBtZXRhbHMjMTIuMTEuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTkuMDAuMDAjU2FsdHMgYW5kIHBlcm94eXNhbHRzIG9mIGlub3JnYW5pYyBhY2lkcyBhbmQgbWV0YWwjMTIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTkuMDEuMDAjRmx1b3JpZGVzIG9yIGZsdW9yb3NpbGljYXRlcyBvciBmbHVvcm9hbHVtaW5hdGVzIzEyLjExLjE5LjAwLjAwCi11bnNwc2M3IzEyLjExLjE5LjAyLjAwI0NobG9yaWRlcyMxMi4xMS4xOS4wMC4wMAotdW5zcHNjNyMxMi4xMS4xOS4wMy4wMCNTb2RpdW0gY2hsb3JpZGUjMTIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTkuMDQuMDAjU2FsIGFtbW9uaWFjIGJsb2NrcyMxMi4xMS4xOS4wMC4wMAotdW5zcHNjNyMxMi4xMS4xOS4wNS4wMCNQb3Rhc3NpdW0gaW9kaW5hdGUjMTIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTkuMDYuMDAjU3VscGhpZGVzIG9yIHBvbHlzdWxmaWRlcyBvciBkaXRoaW9uaXRlcyBvciAgc3VsZm94eWxhdGVzIzEyLjExLjE5LjAwLjAwCi11bnNwc2M3IzEyLjExLjE5LjA3LjAwI1N1bHBoaXRlcyBvciB0aGlvc3VsZmF0ZXMjMTIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTkuMDguMDAjQWx1bWludW0gc3VscGhhdGUjMTIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTkuMDkuMDAjQ29sbG9pZGFsIHByZWNpb3VzIG1ldGFscyMxMi4xMS4xOS4wMC4wMAotdW5zcHNjNyMxMi4xMS4xOS4xMC4wMCNGZXJyb3VzIHN1bHBoYXRlIzEyLjExLjE5LjAwLjAwCi11bnNwc2M3IzEyLjExLjE5LjExLjAwI1NpbHZlciBuaXRyYXRlIzEyLjExLjE5LjAwLjAwCi11bnNwc2M3IzEyLjExLjE5LjEyLjAwI1NvZGl1bSBkaWh5ZHJvZ2Vybm9ydGhvcGhvc3BoYXRlIzEyLjExLjE5LjAwLjAwCi11bnNwc2M3IzEyLjExLjE5LjEzLjAwI1NvZGl1bSBwaG9zcGhhdGUgZGliYXNpYyMxMi4xMS4xOS4wMC4wMAotdW5zcHNjNyMxMi4xMS4xOS4xNC4wMCNTb2RpdW0gYmljYXJib25hdGUjMTIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTkuMTUuMDAjVHJpIHNvZGl1bSBjaXRyYXRlIGRpIGh5ZHJhdGUjMTIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTkuMTYuMDAjU29kaXVtIGNhcmJvbmF0ZSMxMi4xMS4xOS4wMC4wMAotdW5zcHNjNyMxMi4xMS4xOS4xNy4wMCNNZXRhbGxpYyBzb2RpdW0jMTIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTkuMTguMDAjU29kaXVtIHNpbGljYXRlIGxpcXVpZHMjMTIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMTkuMTkuMDAjU29kaXVtIHNpbGljYXRlIGJpbmRlcnMjMTIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMjAuMDAuMDAjSHlkcm9nZW4gcGVyb3hpZGUgYW5kIGh5ZHJpZGVzIGFuZCBuaXRyaWRlcyBhbmQgYXNpZGVzIGFuZCBzaWxpY2lkZXMgYW5kIGJvcmlkZXMjMTIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMjAuMDEuMDAjSHlkcm9nZW4gcGVyb3hpZGUjMTIuMTEuMjAuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMjAuMDIuMDAjUGhvc3BoaWRlcyMxMi4xMS4yMC4wMC4wMAotdW5zcHNjNyMxMi4xMS4yMC4wMy4wMCNDYXJiaWRlcyMxMi4xMS4yMC4wMC4wMAotdW5zcHNjNyMxMi4xMS4yMC4wNC4wMCNDYWxjaXVtIGNhcmJpZGUjMTIuMTEuMjAuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMjAuMDUuMDAjQnJvbWlkZXMjMTIuMTEuMjAuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMjEuMDAuMDAjSXNvdG9wZXMgYW5kIHRoZWlyIGNvbXBvdW5kcyBpbm9yZ2FuaWMgYW5kIG9yZ2FuaWMjMTIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMjEuMDEuMDAjRGV1dGVyaXVtIzEyLjExLjIxLjAwLjAwCi11bnNwc2M3IzEyLjExLjIxLjAyLjAwI0RldXRlcmF0ZWQgc29sdmVudHMjMTIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMjEuMDMuMDAjSGVhdnkgd2F0ZXIjMTIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMjEuMDQuMDAjQWxwaGEgc291cmNlcyMxMi4xMS4yMS4wMC4wMAotdW5zcHNjNyMxMi4xMS4yMS4wNS4wMCNCZXRhIHNvdXJjZXMjMTIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMjEuMDYuMDAjQ29iYWx0IHNvdXJjZXMjMTIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMjEuMDcuMDAjR2FtbWEgc291cmNlcyMxMi4xMS4yMS4wMC4wMAotdW5zcHNjNyMxMi4xMS4yMS4wOC4wMCNOZXV0cm9uIHNvdXJjZXMjMTIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMjEuMDkuMDAjUmFkaW9pc290b3BlIHNvdXJjZXMjMTIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMjEuMTAuMDAjQ2FsaWJyYXRpb24gc291cmNlcyMxMi4xMS4yMS4wMC4wMAotdW5zcHNjNyMxMi4xMS4yMS4xMS4wMCNJbiB2aXZvIHByb2R1Y3RzIzEyLjExLjIxLjAwLjAwCi11bnNwc2M3IzEyLjExLjIxLjEyLjAwI1JhZGlvY2hlbWljYWwgaXNvdG9wZXMjMTIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMjEuMTMuMDAjUmFkaW9ncmFwaGljIHNvdXJjZSMxMi4xMS4yMS4wMC4wMAotdW5zcHNjNyMxMi4xMS4yMS4xNC4wMCNSYWRpb2ltbXVub2Fzc2F5IGlzb3RvcGVzIzEyLjExLjIxLjAwLjAwCi11bnNwc2M3IzEyLjExLjIxLjE1LjAwI1RyaXRpdW0gdGFyZ2V0cyMxMi4xMS4yMS4wMC4wMAotdW5zcHNjNyMxMi4xMS4yMS4xNi4wMCNFeGNpdGF0aW9uIHNvdXJjZSBvciBhbm51bGFyIzEyLjExLjIxLjAwLjAwCi11bnNwc2M3IzEyLjExLjIxLjE3LjAwI1JhZGlvcGhhcm1hY2V1dGljYWwgY29tcG91bmRzIGZvciBsYWJlbGxpbmcjMTIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMjEuMTguMDAjQ2hlbWljYWxzIGxhYmVsbGVkIEMxNCMxMi4xMS4yMS4wMC4wMAotdW5zcHNjNyMxMi4xMS4yMS4xOS4wMCNGaXNzaW9uYWJsZSBpc290b3BlcyMxMi4xMS4yMS4wMC4wMAotdW5zcHNjNyMxMi4xMS4yMS4yMC4wMCNJbiB2aXZvIHJhZGlvYWN0aXZlIGlzb3RvcGUgcHJvZHVjdHMjMTIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMjIuMDAuMDAjQ3lhbmlkZXMjMTIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTEuMjIuMDEuMDAjQ3lhbmlkZXMgb3IgY3lhbmlkZSBveGlkZXMgb2Ygc29kaXVtIzEyLjExLjIyLjAwLjAwCi11bnNwc2M3IzEyLjExLjIyLjAyLjAwI0NvbXBsZXggY3lhbmlkZXMgb3IgdGhpb2N5YW5hdGVzIzEyLjExLjIyLjAwLjAwCi11bnNwc2M3IzEyLjExLjIyLjAzLjAwI0N5YW5pZGVzIG9yIGN5YW5pZGUgb3hpZGVzIzEyLjExLjIyLjAwLjAwCi11bnNwc2M3IzEyLjEyLjAwLjAwLjAwI0dhc2VzIzEyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzEyLjEyLjE1LjAwLjAwI0luZHVzdHJpYWwgZ2FzZXMjMTIuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTIuMTUuMDEuMDAjTml0cm91cyBveGlkZSBnYXMjMTIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTIuMTUuMDIuMDAjSGVsaXVtIGdhcyMxMi4xMi4xNS4wMC4wMAotdW5zcHNjNyMxMi4xMi4xNS4wNC4wMCNDYXJib24gbW9ub3hpZGUjMTIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTIuMTUuMDUuMDAjSHlkcm9nZW4gZ2FzIzEyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzEyLjEyLjE1LjA2LjAwI0NhcmJvbiBkaW94aWRlIzEyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzEyLjEyLjE1LjA3LjAwI05pdHJvZ2VuIGdhcyMxMi4xMi4xNS4wMC4wMAotdW5zcHNjNyMxMi4xMi4xNS4wOC4wMCNOZW9uIGdhcyMxMi4xMi4xNS4wMC4wMAotdW5zcHNjNyMxMi4xMi4xNS4xMC4wMCNPeHlnZW4jMTIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTIuMTYuMDAuMDAjUmFyZSBnYXNlcyMxMi4xMi4wMC4wMC4wMAotdW5zcHNjNyMxMi4xMi4xNi4wMS4wMCNYZW5vbiBnYXMjMTIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTIuMTYuMDIuMDAjUmFkb24gZ2FzIzEyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzEyLjEyLjE2LjAzLjAwI0tyeXB0b24gZ2FzIzEyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzEyLjEyLjE2LjA0LjAwI0FyZ29uIGdhcyMxMi4xMi4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMi4xNi4wOS4wMCNYZW5vbiBnYXMjMTIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTIuMTYuMTAuMDAjUmFkb24gZ2FzIzEyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzEyLjEyLjE2LjExLjAwI0tyeXB0b24gZ2FzIzEyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzEyLjEyLjE2LjEyLjAwI0FyZ29uIGdhcyMxMi4xMi4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMy4wMC4wMC4wMCNFeHBsb3NpdmUgbWF0ZXJpYWxzIzEyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzEyLjEzLjE1LjAwLjAwI0V4cGxvc2l2ZXMjMTIuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTMuMTUuMDEuMDAjRHluYW1pdGUjMTIuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTMuMTUuMDIuMDAjRXhwbG9zaXZlIGNhcnRyaWRnZXMjMTIuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTMuMTUuMDMuMDAjUHJvcGVsbGFudCBleHBsb3NpdmVzIzEyLjEzLjE1LjAwLjAwCi11bnNwc2M3IzEyLjEzLjE1LjA0LjAwI0V4cGxvc2l2ZSBjaGFyZ2VzIzEyLjEzLjE1LjAwLjAwCi11bnNwc2M3IzEyLjEzLjE1LjA1LjAwI1BsYXN0aWMgZXhwbG9zaXZlcyMxMi4xMy4xNS4wMC4wMAotdW5zcHNjNyMxMi4xMy4xNS4wNi4wMCNBbHVtaW5pemVkIGV4cGxvc2l2ZXMjMTIuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTMuMTUuMDcuMDAjQW1tb25pdW0gbml0cmF0ZSBleHBsb3NpdmVzIzEyLjEzLjE1LjAwLjAwCi11bnNwc2M3IzEyLjEzLjE1LjA4LjAwI05pdHJvZ2x5Y2VyaW4gcG93ZGVyIGV4cGxvc2l2ZXMjMTIuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTMuMTYuMDAuMDAjUHlyb3RlY2huaWNzIzEyLjEzLjAwLjAwLjAwCi11bnNwc2M3IzEyLjEzLjE2LjAxLjAwI0ZpcmV3b3JrcyMxMi4xMy4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMy4xNi4wMi4wMCNGb2cgc2lnbmFscyMxMi4xMy4xNi4wMC4wMAotdW5zcHNjNyMxMi4xMy4xNi4wMy4wMCNSYWluIHJvY2tldHMjMTIuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTMuMTYuMDQuMDAjRmxhcmVzIzEyLjEzLjE2LjAwLjAwCi11bnNwc2M3IzEyLjEzLjE2LjA1LjAwI1B5cm90ZWNobmljIG1hdGVyaWFscyBmb3IgdGhlYXRlciBvciB0ZWxldmlzaW9uIzEyLjEzLjE2LjAwLjAwCi11bnNwc2M3IzEyLjEzLjE3LjAwLjAwI0lnbml0ZXJzIzEyLjEzLjAwLjAwLjAwCi11bnNwc2M3IzEyLjEzLjE3LjAxLjAwI0JsYXN0aW5nIGNhcHMjMTIuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTMuMTcuMDIuMDAjRGV0b25hdG9ycyMxMi4xMy4xNy4wMC4wMAotdW5zcHNjNyMxMi4xMy4xNy4wMy4wMCNFeHBsb3NpdmVzIGZ1c2VzIzEyLjEzLjE3LjAwLjAwCi11bnNwc2M3IzEyLjEzLjE3LjA0LjAwI0V4cGxvc2l2ZSBpbml0aWF0b3JzIzEyLjEzLjE3LjAwLjAwCi11bnNwc2M3IzEyLjEzLjE3LjA1LjAwI0V4cGxvc2l2ZSBwcmltZXJzIzEyLjEzLjE3LjAwLjAwCi11bnNwc2M3IzEyLjEzLjE3LjA2LjAwI01hdGNoZXMjMTIuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTMuMTcuMDcuMDAjTGlnaHRlcnMjMTIuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTMuMTguMDAuMDAjUHJvcGVsbGFudHMjMTIuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTMuMTguMDEuMDAjUG93ZGVyIHByb3BlbGxhbnRzIzEyLjEzLjE4LjAwLjAwCi11bnNwc2M3IzEyLjEzLjE4LjAyLjAwI1NvbGlkIHByb3BlbGxhbnRzIzEyLjEzLjE4LjAwLjAwCi11bnNwc2M3IzEyLjEzLjE4LjAzLjAwI0d1biBwcm9wZWxsYW50cyMxMi4xMy4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMy4xOC4wNC4wMCNIaWdoIGVuZXJneSBwcm9wZWxsYW50cyMxMi4xMy4xOC4wMC4wMAotdW5zcHNjNyMxMi4xMy4xOC4wNS4wMCNHZWxsZWQgcHJvcGVsbGFudHMjMTIuMTMuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTMuMTguMDYuMDAjSHlicmlkIHByb3BlbGxhbnRzIzEyLjEzLjE4LjAwLjAwCi11bnNwc2M3IzEyLjE0LjAwLjAwLjAwI0VsZW1lbnRzIGFuZCBnYXNlcyMxMi4wMC4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNS4wMC4wMCNFYXJ0aCBtZXRhbHMjMTIuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTUuMDEuMDAjQmVyeWxsaXVtIChCZSkjMTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTUuMDIuMDAjTWFnbmVzaXVtIChNZykjMTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTUuMDMuMDAjQ2FsY2l1bSAoQ2EpIzEyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE1LjA0LjAwI1N0cm9udGl1bSAoU3IpIzEyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE1LjA1LjAwI0Jhcml1bSAoQmEpIzEyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE1LjA2LjAwI1JhZGl1bSAoUmEpIzEyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE2LjAwLjAwI1JhcmUgZWFydGggbWV0YWxzIzEyLjE0LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE0LjE2LjAxLjAwI0Nlcml1bSAoQ2UpIzEyLjE0LjE2LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE2LjAyLjAwI0R5c3Byb3NpdW0gKER5KSMxMi4xNC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNi4wMy4wMCNFcmJpdW0gKEVyKSMxMi4xNC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNi4wNC4wMCNFdXJvcGl1bSAoRXUpIzEyLjE0LjE2LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE2LjA1LjAwI0dhZG9saW5pdW0gKEdkKSMxMi4xNC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNi4wNi4wMCNIb2xtaXVtIChIbykjMTIuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTYuMDcuMDAjTGFudGhhbnVtIChMYSkjMTIuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTYuMDguMDAjTHV0ZXRpdW0gKEx1KSMxMi4xNC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNi4wOS4wMCNOZW9keW1pdW0gKE5kKSMxMi4xNC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNi4xMC4wMCNQcmFzZW9keW1pdW0gKFByKSMxMi4xNC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNi4xMS4wMCNQcm9tZXRoaXVtIChQcikjMTIuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTYuMTIuMDAjU2FtYXJpdW0gKFNtKSMxMi4xNC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNi4xMy4wMCNTY2FuZGl1bSAoU2MpIzEyLjE0LjE2LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE2LjE0LjAwI1RlcmJpdW0gKFRiKSMxMi4xNC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNi4xNS4wMCNUaHVsaXVtIChUbSkjMTIuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTYuMTYuMDAjWXR0ZXJiaXVtIChZYikjMTIuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTYuMTcuMDAjWXR0cml1bSAoWSkjMTIuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMDAuMDAjVHJhbnNpdGlvbiBtZXRhbHMjMTIuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMDEuMDAjQWN0aW5pdW0gKEFjKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy4wMi4wMCNBbHVtaW51bSAoQWwpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjAzLjAwI0FtZXJpY2l1bSAoQW0pIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjA0LjAwI0FudGltb255IChTYikjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMDUuMDAjQmVya2VsaXVtIChCaykjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMDYuMDAjQmlzbXV0aCAoQmkpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjA3LjAwI0NhZG1pdW0gKENhKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy4wOC4wMCNDYWxpZm9ybml1bSAoQ2YpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjA5LjAwI0Nocm9taXVtIChDcikjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMTAuMDAjQ29iYWx0IChDbykjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMTEuMDAjQ29wcGVyIChDdSkjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMTIuMDAjQ3VyaXVtIChDbSkjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMTMuMDAjRWluc3RlaW5pdW0gKEVzKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy4xNC4wMCNGZXJtaXVtIChGbSkjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMTUuMDAjR2FsbGl1bSAoR2EpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjE2LjAwI0dlcm1hbml1bSAoR2UpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjE3LjAwI0dvbGQgKEF1KSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy4xOC4wMCNIYWZuaXVtIChIZikjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMTkuMDAjSW5kaXVtIChJbikjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMjAuMDAjSXJpZGl1bSAoSXIpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjIxLjAwI0lyb24gKEZlKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy4yMi4wMCNMYXdyZW5jaXVtIChMcikjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMjMuMDAjTGVhZCAoUGIpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjI0LjAwI01hbmdhbmVzZSAoTW4pIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjI1LjAwI01lbmRlbGV2aXVtIChNZCkjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMjYuMDAjTWVyY3VyeSAoSGcpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjI3LjAwI01vbHliZGVudW0gKE1vKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy4yOC4wMCNOZXB0dW5pdW0gKE5wKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy4yOS4wMCNOaWNrZWwgKE5pKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy4zMC4wMCNOaW9iaXVtIChOYikjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMzEuMDAjTm9iZWxpdW0gKE5vKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy4zMi4wMCNPc21pdW0gKE9zKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy4zMy4wMCNQYWxsYWRpdW0gKFBkKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy4zNC4wMCNQbGF0aW51bSAoUHQpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjM1LjAwI1BsdXRvbml1bSAoUHUpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjM2LjAwI1Byb3RhY3Rpbml1bSAoUGEpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjM3LjAwI1JoZW5pdW0gKFJlKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy4zOC4wMCNSaG9kaXVtIChSaCkjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuMzkuMDAjUnV0aGVuaXVtIChSdSkjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuNDAuMDAjU2lsdmVyIChBZykjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuNDEuMDAjVGFudGFsdW0gKFRhKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy40Mi4wMCNUZWNobmV0aXVtIChUZSkjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuNDMuMDAjVGhhbGxpdW0gKFRsKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy40NC4wMCNUaG9yaXVtIChUaCkjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuNDUuMDAjVGluIChTbikjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuNDYuMDAjVGl0YW5pdW0gKFRpKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy40Ny4wMCNUdW5nc3RlbiAoVykjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuNDguMDAjVXJhbml1bSAoVSkjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuNDkuMDAjVmFuYWRpdW0gKFYpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjUwLjAwI1ppbmMgKFpuKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy41MS4wMCNaaXJjb25pdW0gKFpyKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy41Mi4wMCNCb2hyaXVtIChCaCkjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuNTMuMDAjRHVibml1bSAoRGIpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjU0LjAwI0hhc3NpdW0gKEhzKSMxMi4xNC4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNC4xNy41NS4wMCNSdXRoZXJmb3JkaXVtIChSZikjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuNTYuMDAjU2VhYm9yZ2l1bSAoU2cpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjU3LjAwI1VudW5uaWxpdW0gKFV1bSkjMTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTcuNTguMDAjVW51bnVuaXVtIChVdXUpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjU5LjAwI1VudW5iaXVtIChVdWIpIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE3LjYwLjAwI1BvbG9uaXVtICgoUG8pIzEyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE4LjAwLjAwI0Fsa2FsaSBtZXRhbHMjMTIuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTguMDEuMDAjQ2VzaXVtIChDcykjMTIuMTQuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTguMDIuMDAjRnJhbmNpdW0gKEZtKSMxMi4xNC4xOC4wMC4wMAotdW5zcHNjNyMxMi4xNC4xOC4wMy4wMCNMaXRoaXVtIChMaSkjMTIuMTQuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTguMDQuMDAjUG90YXNzaXVtIChLKSMxMi4xNC4xOC4wMC4wMAotdW5zcHNjNyMxMi4xNC4xOC4wNS4wMCNSdWJpZGl1bSAoUmIpIzEyLjE0LjE4LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE4LjA2LjAwI1NvZGl1bSAoTmEpIzEyLjE0LjE4LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE5LjAwLjAwI05vbiBtZXRhbHMgYW5kIHB1cmUgYW5kIGVsZW1lbnRhbCBnYXNlcyMxMi4xNC4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNC4xOS4wMS4wMCNDaGxvcmluZSAgKENsKSMxMi4xNC4xOS4wMC4wMAotdW5zcHNjNyMxMi4xNC4xOS4wMi4wMCNIeWRyb2dlbiAoSCkjMTIuMTQuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTkuMDMuMDAjTml0cm9nZW4gIChOKSMxMi4xNC4xOS4wMC4wMAotdW5zcHNjNyMxMi4xNC4xOS4wNC4wMCNPeHlnZW4gKE8pIzEyLjE0LjE5LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE5LjA1LjAwI0ZsdW9yaW5lICAoRikjMTIuMTQuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTkuMDYuMDAjQXJzZW5pYyAoQXMpIzEyLjE0LjE5LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE5LjA3LjAwI0Jvcm9uIChCaCkjMTIuMTQuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTkuMDguMDAjQ2FyYm9uIChDKSMxMi4xNC4xOS4wMC4wMAotdW5zcHNjNyMxMi4xNC4xOS4wOS4wMCNQaG9zcGhvcnVzIChQKSMxMi4xNC4xOS4wMC4wMAotdW5zcHNjNyMxMi4xNC4xOS4xMC4wMCNTZWxlbml1bSAoU2UpIzEyLjE0LjE5LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE5LjExLjAwI1NpbGljb24gKFNpKSMxMi4xNC4xOS4wMC4wMAotdW5zcHNjNyMxMi4xNC4xOS4xMi4wMCNTdWxmdXIgKFMpIzEyLjE0LjE5LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE5LjEzLjAwI1RlbGx1cml1bSAoVGUpIzEyLjE0LjE5LjAwLjAwCi11bnNwc2M3IzEyLjE0LjE5LjE0LjAwI0FzdGF0aW5lIChBdCkjMTIuMTQuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMTkuMTUuMDAjQnJvbWluZSBCciMxMi4xNC4xOS4wMC4wMAotdW5zcHNjNyMxMi4xNC4xOS4xNi4wMCNJb2RpbmUgKEkpIzEyLjE0LjE5LjAwLjAwCi11bnNwc2M3IzEyLjE0LjIwLjAwLjAwI05vYmxlIGdhc2VzIzEyLjE0LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE0LjIwLjAxLjAwI1hlbm9uIGdhcyAgKFhlKSMxMi4xNC4yMC4wMC4wMAotdW5zcHNjNyMxMi4xNC4yMC4wMi4wMCNSYWRvbiBnYXMgKFJuKSMxMi4xNC4yMC4wMC4wMAotdW5zcHNjNyMxMi4xNC4yMC4wMy4wMCNLcnlwdG9uIGdhcyAoS3IpIzEyLjE0LjIwLjAwLjAwCi11bnNwc2M3IzEyLjE0LjIwLjA0LjAwI0FyZ29uIGdhcyAoQXIpIzEyLjE0LjIwLjAwLjAwCi11bnNwc2M3IzEyLjE0LjIwLjA1LjAwI0hlbGl1bSBnYXMgKEhlKSMxMi4xNC4yMC4wMC4wMAotdW5zcHNjNyMxMi4xNC4yMC4wNi4wMCNOZW9uIGdhcyAoTmUpIzEyLjE0LjIwLjAwLjAwCi11bnNwc2M3IzEyLjE0LjIxLjAwLjAwI0luZHVzdHJpYWwgdXNlIGdhc2VzIzEyLjE0LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE0LjIxLjAxLjAwI0h5ZHJvZ2VuIGNvbXBvdW5kIGdhc2VzIzEyLjE0LjIxLjAwLjAwCi11bnNwc2M3IzEyLjE0LjIxLjAyLjAwI0NobG9yaW5hdGVkIG1peGVkIGdhc2VzIzEyLjE0LjIxLjAwLjAwCi11bnNwc2M3IzEyLjE0LjIxLjAzLjAwI0FtbW9uaWEjMTIuMTQuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMTQuMjEuMDQuMDAjQ2FyYm9uIGRpb3hpZGUgZ2FzIChDTzIpIzEyLjE0LjIxLjAwLjAwCi11bnNwc2M3IzEyLjE0LjIxLjA1LjAwI0luZHVzdHJpYWwgYWlyIzEyLjE0LjIxLjAwLjAwCi11bnNwc2M3IzEyLjE0LjIxLjA2LjAwI0luZXJ0IGdhcyBtaXh0dXJlcyMxMi4xNC4yMS4wMC4wMAotdW5zcHNjNyMxMi4xNS4wMC4wMC4wMCNBY2lkcyBhbmQgdGhlaXIgc2FsdHMgYW5kIGVzdGVycyMxMi4wMC4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNS4xNS4wMC4wMCNDYXJib3h5bGljIGFjaWRzIGFuZCB0aGVpciBzYWx0cyBhbmQgZXN0ZXJzIzEyLjE1LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE1LjE1LjAxLjAwI0FjZXRpYyBhY2lkIG9yIGl0cyBzYWx0cyMxMi4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMi4xNS4xNS4wMi4wMCNBY3ljbGljIGFjaWRzIzEyLjE1LjE1LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE1LjAzLjAwI0FsZGVoeWRpYyBhY2lkcyMxMi4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMi4xNS4xNS4wNC4wMCNCdXR5cmljIGFjaWRzIzEyLjE1LjE1LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE1LjA1LjAwI0NhcmJvY3lsaWMgYWNpZHMjMTIuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTUuMDYuMDAjSHlkcm94eSBhY2lkcyMxMi4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMi4xNS4xNS4wNy4wMCNLZXRvIGFjaWRzIzEyLjE1LjE1LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE1LjA4LjAwI1Byb3Bpb25pYyBhY2lkcyMxMi4xNS4xNS4wMC4wMAotdW5zcHNjNyMxMi4xNS4xNS4wOS4wMCNBY3J5bGljIGFjaWQgZXN0ZXJzIzEyLjE1LjE1LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE1LjEwLjAwI0VzdGVycyBvZiBtZXRoYWNyeWxpYyBhY2lkIzEyLjE1LjE1LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE2LjAwLjAwI0hldGVyb2N5Y2xpYyBhY2lkcyBhbmQgdGhlaXIgc2FsdHMgYW5kIGVzdGVycyMxMi4xNS4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNS4xNi4wMS4wMCNJbmRvbGVhY2V0aWMgYWNpZHMjMTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTYuMDIuMDAjSXNvbmljb3RpbmljIGFjaWRzIzEyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE2LjAzLjAwI0lzb25pcGVjb3RpYyBhY2lkcyMxMi4xNS4xNi4wMC4wMAotdW5zcHNjNyMxMi4xNS4xNi4wNC4wMCNOaWNvdGluaWMgYWNpZHMjMTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTYuMDUuMDAjTmlwZWNvdGljIGFjaWRzIzEyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE2LjA2LjAwI09yb3RpYyBhY2lkcyMxMi4xNS4xNi4wMC4wMAotdW5zcHNjNyMxMi4xNS4xNi4wNy4wMCNQaWNvbGluaWMgYWNpZHMjMTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTYuMDguMDAjUGlwZWNvbGljIGFjaWRzIzEyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE3LjAwLjAwI0ZhdHR5IGFjaWRzIGFuZCB0aGVpciBzYWx0cyBhbmQgZXN0ZXJzIzEyLjE1LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE1LjE3LjAxLjAwI0RlY2Fub2ljIGFjaWRzIzEyLjE1LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE3LjAyLjAwI1Vuc2F0dXJhdGVkIGZhdHR5IGFjaWRzIzEyLjE1LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE3LjAzLjAwI1ZvbGF0aWxlIGZhdHR5IGFjaWRzIzEyLjE1LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE3LjA0LjAwI0hlcHRhbm9pYyBhY2lkcyMxMi4xNS4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNS4xNy4wNS4wMCNMYXVyaWMgYWNpZHMjMTIuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTcuMDYuMDAjTXljb2xpYyBhY2lkcyMxMi4xNS4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNS4xNy4wNy4wMCNNeXJpc3RpYyBhY2lkcyMxMi4xNS4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNS4xNy4wOC4wMCNQYWxtaXRpYyBhY2lkcyMxMi4xNS4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNS4xNy4wOS4wMCNTdGVhcmljIGFjaWRzIzEyLjE1LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE4LjAwLjAwI05vbiBjYXJib3h5bGljIGFjaWRzIGFuZCB0aGVpciBzYWx0cyMxMi4xNS4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNS4xOC4wMS4wMCNDYXJib25pYyBhY2lkcyMxMi4xNS4xOC4wMC4wMAotdW5zcHNjNyMxMi4xNS4xOC4wMi4wMCNOaXRyaWMgYWNpZHMjMTIuMTUuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTguMDMuMDAjUGhvc3Bob3JvdXMgYWNpZHMjMTIuMTUuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTguMDQuMDAjU3VsZnVyIGFjaWRzIzEyLjE1LjE4LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE4LjA1LjAwI0NobG9yaWRlcyMxMi4xNS4xOC4wMC4wMAotdW5zcHNjNyMxMi4xNS4xOC4wNi4wMCNIeWRyb2NobG9yaWRlcyMxMi4xNS4xOC4wMC4wMAotdW5zcHNjNyMxMi4xNS4xOC4wNy4wMCNOaXRyYXRlcyBvciBuaXRyaXRlcyMxMi4xNS4xOC4wMC4wMAotdW5zcHNjNyMxMi4xNS4xOC4wOC4wMCNTaWxpY2F0ZXMjMTIuMTUuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTguMDkuMDAjUGhvc3BoYXRlcyBvciBwaG9zcGhpZGVzIzEyLjE1LjE4LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE4LjEwLjAwI0JpY2FyYm9uYXRlcyBvciBjYXJiaWRlcyBvciBjYXJib25hdGVzIzEyLjE1LjE4LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE4LjExLjAwI0ZsdW9yaWRlcyMxMi4xNS4xOC4wMC4wMAotdW5zcHNjNyMxMi4xNS4xOC4xMi4wMCNCcm9taWRlcyBvciBicm9tYXRlcyMxMi4xNS4xOC4wMC4wMAotdW5zcHNjNyMxMi4xNS4xOC4xMy4wMCNJb2RpZGVzIG9yIGlvZGF0ZXMjMTIuMTUuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTkuMDAuMDAjSW5vcmdhbmljIHN1bGZ1ciBjb21wb3VuZHMjMTIuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTUuMTkuMDEuMDAjSHlkcm9nZW4gc3VsZmlkZSMxMi4xNS4xOS4wMC4wMAotdW5zcHNjNyMxMi4xNS4xOS4wMi4wMCNTdWxmdXJpYyBBY2lkIzEyLjE1LjE5LjAwLjAwCi11bnNwc2M3IzEyLjE1LjE5LjAzLjAwI1NvZGl1bSBzdWxmYXRlIzEyLjE1LjE5LjAwLjAwCi11bnNwc2M3IzEyLjE2LjAwLjAwLjAwI0FkZGl0aXZlcyMxMi4wMC4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNi4xNS4wMC4wMCNJbmRpY2F0b3JzIGFuZCBSZWFnZW50cyMxMi4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNi4xNS4wMS4wMCNBZmZpbml0eSBsYWJlbHMjMTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMTUuMDIuMDAjQ3Jvc3MgbGlua2luZyBhZ2VudHMjMTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMTUuMDMuMDAjUmVhZ2VudCBraXRzIzEyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzEyLjE2LjE1LjA0LjAwI1N1bGZoeWRyeWwgcmVhZ2VudHMjMTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMTUuMDUuMDAjSW50ZXJjYWxhdGluZyBhZ2VudHMjMTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMTUuMDYuMDAjRGl2ZXJ0aW5nIGFnZW50cyMxMi4xNi4xNS4wMC4wMAotdW5zcHNjNyMxMi4xNi4xNi4wMC4wMCNDYXRhbHlzdHMjMTIuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMTYuMDEuMDAjQWNpZCBjYXRhbHlzdHMjMTIuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMTYuMDIuMDAjQ29tYnVzdGlvbiBjYXRhbHlzdHMjMTIuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMTYuMDMuMDAjQ3VzdG9tIGNhdGFseXN0cyMxMi4xNi4xNi4wMC4wMAotdW5zcHNjNyMxMi4xNi4xNi4wNC4wMCNDcmFja2luZyBjYXRhbHlzdHMjMTIuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMTcuMDAuMDAjQnVmZmVycyMxMi4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNi4xNy4wMS4wMCNBbXBob2x5dGUgbWl4dHVyZXMjMTIuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMTcuMDIuMDAjQmljYXJib25hdGUgYnVmZmVycyMxMi4xNi4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNi4xNy4wMy4wMCNPdGhlciBidWZmZXJzIzEyLjE2LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE2LjE3LjA0LjAwI0FjaWQgYnVmZmVycyMxMi4xNi4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNi4xNy4wNS4wMCNCYXNpYyBidWZmZXJzIzEyLjE2LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE2LjE3LjA2LjAwI05ldXRyYWwgYnVmZmVycyMxMi4xNi4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNi4xOC4wMC4wMCNDb2xsb2lkcyMxMi4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNi4xOC4wMS4wMCNHZWxzIzEyLjE2LjE4LjAwLjAwCi11bnNwc2M3IzEyLjE2LjE4LjAyLjAwI1N1c3BlbnNpb25zIzEyLjE2LjE4LjAwLjAwCi11bnNwc2M3IzEyLjE2LjE4LjAzLjAwI0Flcm9zb2xzIzEyLjE2LjE4LjAwLjAwCi11bnNwc2M3IzEyLjE2LjE4LjA0LjAwI0VtdWxzaW9ucyMxMi4xNi4xOC4wMC4wMAotdW5zcHNjNyMxMi4xNi4xOC4wNS4wMCNOYXR1cmFsIGdlbGxpbmcgYWdlbnRzIzEyLjE2LjE4LjAwLjAwCi11bnNwc2M3IzEyLjE2LjE4LjA2LjAwI1N5bnRoZXRpYyBnZWxsaW5nIGFnZW50cyMxMi4xNi4xOC4wMC4wMAotdW5zcHNjNyMxMi4xNi4xOC4wNy4wMCNHZWwgc3RhYmlsaXplcnMjMTIuMTYuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTYuMTguMDguMDAjU3VzcGVuZGluZyBhZ2VudHMjMTIuMTYuMTguMDAuMDAKLXVuc3BzYzcjMTIuMTYuMTkuMDAuMDAjU3VyZmFjdGFudHMjMTIuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMTkuMDEuMDAjQW50aSBmb2FtaW5nIGFnZW50cyMxMi4xNi4xOS4wMC4wMAotdW5zcHNjNyMxMi4xNi4xOS4wMi4wMCNEZXRlcmdlbnQgc3VyZmFjdGFudHMjMTIuMTYuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMTkuMDMuMDAjRm9hbWluZyBhZ2VudHMjMTIuMTYuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMTkuMDQuMDAjRGlzcGVyc2luZyBhZ2VudHMjMTIuMTYuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMTkuMDUuMDAjRmx1c2hlcyMxMi4xNi4xOS4wMC4wMAotdW5zcHNjNyMxMi4xNi4xOS4wNi4wMCNXZXR0aW5nIGFnZW50cyMxMi4xNi4xOS4wMC4wMAotdW5zcHNjNyMxMi4xNi4xOS4wNy4wMCNXYXRlciBmbG9vZCBhZGRpdGl2ZXMjMTIuMTYuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjAuMDAuMDAjUGxhc3RpY2l6ZXJzIzEyLjE2LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE2LjIwLjAxLjAwI1BodGhhbGF0ZXMjMTIuMTYuMjAuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjAuMDIuMDAjUG9seW1lcmljcyMxMi4xNi4yMC4wMC4wMAotdW5zcHNjNyMxMi4xNi4yMC4wMy4wMCNBZ3JpY3VsdHVyYWwgb2lscyMxMi4xNi4yMC4wMC4wMAotdW5zcHNjNyMxMi4xNi4yMC4wNC4wMCNTdWxmb25hbWlkZXMjMTIuMTYuMjAuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjAuMDUuMDAjR2x1dGFyYXRlcyMxMi4xNi4yMC4wMC4wMAotdW5zcHNjNyMxMi4xNi4yMS4wMC4wMCNGbGFtZSByZXRhcmRhbnRzIzEyLjE2LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE2LjIxLjAxLjAwI0Jyb21pbmF0ZWQjMTIuMTYuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjIuMDAuMDAjQW50aSBveGlkYW50cyMxMi4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNi4yMi4wMS4wMCNBc2NvcmJpYyBhY2lkIzEyLjE2LjIyLjAwLjAwCi11bnNwc2M3IzEyLjE2LjIyLjAyLjAwI0JldGEgY2Fyb3RlbmUjMTIuMTYuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjIuMDMuMDAjQnV0eWxhdGVkIGh5ZHJveHlhbmlzb2xlIzEyLjE2LjIyLjAwLjAwCi11bnNwc2M3IzEyLjE2LjIyLjA0LjAwI0J1dHlsYXRlZCBoeWRyb3h5dG9sdWVuZSMxMi4xNi4yMi4wMC4wMAotdW5zcHNjNyMxMi4xNi4yMi4wNS4wMCNDYWxjaXVtIGNpdHJhdGUjMTIuMTYuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjIuMDYuMDAjQ2FudGhheGFudGhpbiMxMi4xNi4yMi4wMC4wMAotdW5zcHNjNyMxMi4xNi4yMi4wNy4wMCNNZWxhdG9uaW4jMTIuMTYuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjIuMDguMDAjTm9yZGloeWRyb2d1YWlhcmV0aWMgYWNpZCMxMi4xNi4yMi4wMC4wMAotdW5zcHNjNyMxMi4xNi4yMi4wOS4wMCNQcm9weWwgZ2FsbGF0ZSMxMi4xNi4yMi4wMC4wMAotdW5zcHNjNyMxMi4xNi4yMi4xMC4wMCNTaWx5bWFyaW4jMTIuMTYuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjIuMTEuMDAjU3VsZnVyIGRpb3hpZGUjMTIuMTYuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjMuMDAuMDAjQ3VyaW5nIGFnZW50cyMxMi4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNi4yMy4wMS4wMCNXYXRlcmJvcm5lIGN1cmluZyBhZ2VudHMjMTIuMTYuMjMuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjMuMDIuMDAjQ2VtZW50IGFjY2VsZXJhdG9ycyMxMi4xNi4yMy4wMC4wMAotdW5zcHNjNyMxMi4xNi4yMy4wMy4wMCNDZW1lbnQgcmV0YXJkZXJzIzEyLjE2LjIzLjAwLjAwCi11bnNwc2M3IzEyLjE2LjI0LjAwLjAwI1BvbHltZXIgYnJlYWtlcnMjMTIuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjQuMDEuMDAjQWNpZGljIHBvbHltZXIgYnJlYWtlcnMjMTIuMTYuMjQuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjQuMDIuMDAjT3JnYW5pYyBwb2x5bWVyIGJyZWFrZXJzIzEyLjE2LjI0LjAwLjAwCi11bnNwc2M3IzEyLjE2LjI1LjAwLjAwI0VtdWxzaW9uIGJyZWFrZXJzIzEyLjE2LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE2LjI1LjAxLjAwI1dhdGVyIGluIG9pbCBlbXVsc2lvbiBicmVha2VycyMxMi4xNi4yNS4wMC4wMAotdW5zcHNjNyMxMi4xNi4yNS4wMi4wMCNPaWwgaW4gd2F0ZXIgZW11bHNpb24gYnJlYWtlcnMjMTIuMTYuMjUuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjUuMDMuMDAjRmxvdGF0aW9uIGFpZHMjMTIuMTYuMjUuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjYuMDAuMDAjQ2xheSBzdGFiaWxpemVycyMxMi4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNi4yNi4wMS4wMCNJbm9yZ2FuaWMgY2xheSBzdGFiaWxpemVycyMxMi4xNi4yNi4wMC4wMAotdW5zcHNjNyMxMi4xNi4yNi4wMi4wMCNPcmdhbmljIGNsYXkgc3RhYmlsaXplcnMjMTIuMTYuMjYuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjcuMDAuMDAjRmx1aWQgbG9zcyBhZGRpdGl2ZXMjMTIuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjcuMDEuMDAjTmF0dXJhbCBwb2x5bWVyIGZsdWlkIGxvc3MgYWRkaXRpdmVzIzEyLjE2LjI3LjAwLjAwCi11bnNwc2M3IzEyLjE2LjI3LjAyLjAwI01vZGlmaWVkIHBvbHltZXIgZmx1aWQgbG9zcyBhZGRpdGl2ZXMjMTIuMTYuMjcuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjguMDAuMDAjRnJpY3Rpb24gcmVkdWNlcnMjMTIuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMjguMDEuMDAjQW5pb25pYyBmcmljdGlvbiByZWR1Y2VycyMxMi4xNi4yOC4wMC4wMAotdW5zcHNjNyMxMi4xNi4yOC4wMi4wMCNDYXRpb25pYyBmcmljdGlvbiByZWR1Y2VycyMxMi4xNi4yOC4wMC4wMAotdW5zcHNjNyMxMi4xNi4yOS4wMC4wMCNQYXJhZmZpbiBhc3BoYWx0ZW5lIGNvbnRyb2wgYWdlbnRzIzEyLjE2LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE2LjI5LjAxLjAwI1NvbHZlbnQgdHlwZSBwYXJhZmZpbiBhc3BoYWx0ZW5lIGNvbnRyb2wgYWdlbnRzIzEyLjE2LjI5LjAwLjAwCi11bnNwc2M3IzEyLjE2LjI5LjAyLjAwI0NyeXN0YWwgbW9kaWZpZWQgcGFyYWZmaW4gYXNwaGFsdGVuZSBjb250cm9sIGFnZW50cyMxMi4xNi4yOS4wMC4wMAotdW5zcHNjNyMxMi4xNi4yOS4wMy4wMCNEaXNwZXJzYW50IHR5cGUgcGFyYWZmaW4gYXNwaGFsdGVuZSBjb250cm9sIGFnZW50cyMxMi4xNi4yOS4wMC4wMAotdW5zcHNjNyMxMi4xNi4zMC4wMC4wMCNNdWQgcmVtb3ZhbCBtaXh0dXJlcyMxMi4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNi4zMC4wMS4wMCNNdWQgY2xlYW5vdXQgYWdlbnRzIzEyLjE2LjMwLjAwLjAwCi11bnNwc2M3IzEyLjE2LjMxLjAwLjAwI0FudGkgc2x1ZGdlcnMjMTIuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMzEuMDEuMDAjQW50aSBzbHVkZ2UgYWRkaXRpdmVzIzEyLjE2LjMxLjAwLjAwCi11bnNwc2M3IzEyLjE2LjMyLjAwLjAwI0FudGkgZ2FzIG1pZ3JhdGlvbiBhZ2VudHMjMTIuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMzIuMDEuMDAjQW50aSBnYXMgbWlncmF0aW9uIGFkZGl0aXZlcyMxMi4xNi4zMi4wMC4wMAotdW5zcHNjNyMxMi4xNi4zMy4wMC4wMCNFeHBhbmRpbmcgYWdlbnRzIzEyLjE2LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE2LjMzLjAxLjAwI0NlbWVudCBleHBhbmRpbmcgYWdlbnRzIzEyLjE2LjMzLjAwLjAwCi11bnNwc2M3IzEyLjE2LjM0LjAwLjAwI0V4dGVuZGVycyMxMi4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNi4zNC4wMS4wMCNDZW1lbnQgZXh0ZW5kZXJzIzEyLjE2LjM0LjAwLjAwCi11bnNwc2M3IzEyLjE2LjM1LjAwLjAwI09pbCB3ZWxsIHNlYWxhbnRzIzEyLjE2LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE2LjM1LjAxLjAwI0NlbWVudGluZyBzZWFsYW50cyMxMi4xNi4zNS4wMC4wMAotdW5zcHNjNyMxMi4xNi4zNi4wMC4wMCNDb3Jyb3Npb24gaW5oaWJpdG9ycyMxMi4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNi4zNi4wMS4wMCNPaWwgcHJvZHVjdGlvbiBjb3Jyb3Npb24gaW5oaWJpdG9ycyMxMi4xNi4zNi4wMC4wMAotdW5zcHNjNyMxMi4xNi4zNi4wMi4wMCNHYXMgcHJvZHVjdGlvbiBjb3Jyb3Npb24gaW5oaWJpdG9ycyMxMi4xNi4zNi4wMC4wMAotdW5zcHNjNyMxMi4xNi4zNy4wMC4wMCNHYXMgaHlkcmF0ZSBjb250cm9sbGVycyMxMi4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNi4zNy4wMS4wMCNLaW5ldGljIGh5ZHJhdGUgY29udHJvbGxlcnMjMTIuMTYuMzcuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMzguMDAuMDAjU2NhdmVuZ2VycyMxMi4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNi4zOC4wMS4wMCNIeWRyb2dlbiBzdWxmaWRlIHNjYXZlbmdlcnMjMTIuMTYuMzguMDAuMDAKLXVuc3BzYzcjMTIuMTYuMzguMDIuMDAjT3h5Z2VuIHNjYXZlbmdlcnMjMTIuMTYuMzguMDAuMDAKLXVuc3BzYzcjMTIuMTYuMzkuMDAuMDAjU2NhbGUgY29udHJvbGxlcnMjMTIuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTYuMzkuMDEuMDAjU2NhbGUgaW5oaWJpdG9yIzEyLjE2LjM5LjAwLjAwCi11bnNwc2M3IzEyLjE2LjM5LjAyLjAwI1NjYWxlIHJlbW92ZXJzIGFuZCBjb252ZXJ0ZXJzIzEyLjE2LjM5LjAwLjAwCi11bnNwc2M3IzEyLjE2LjQwLjAwLjAwI0JhY3RlcmljaWRlcyMxMi4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNi40MC4wMS4wMCNSZWdpc3RlcmVkIG1pY3JvYmlvY2lkZXMjMTIuMTYuNDAuMDAuMDAKLXVuc3BzYzcjMTIuMTYuNDEuMDAuMDAjSW4gc2l0dSMxMi4xNi4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNi40MS4wMS4wMCNJbiBzaXR1IGFkZGl0aXZlcyMxMi4xNi40MS4wMC4wMAotdW5zcHNjNyMxMi4xNi40MS4wMi4wMCNBY2lkIGFkZGl0aXZlcyMxMi4xNi40MS4wMC4wMAotdW5zcHNjNyMxMi4xNi40Mi4wMC4wMCNSZXRhcmRlcnMjMTIuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTYuNDIuMDEuMDAjQWNpZCBjb3Jyb3Npb24gaW5oaWJpdG9ycyMxMi4xNi40Mi4wMC4wMAotdW5zcHNjNyMxMi4xNi40My4wMC4wMCNJcm9uIGNvbnRyb2xsZXJzIzEyLjE2LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE2LjQzLjAxLjAwI0lyb24gY29udHJvbCBhZGRpdGl2ZXMjMTIuMTYuNDMuMDAuMDAKLXVuc3BzYzcjMTIuMTYuNDQuMDAuMDAjTm9uIGVtdWxzaWZpZXJzIzEyLjE2LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE2LjQ0LjAxLjAwI05vbiBlbXVsc2lmeWluZyBhZGRpdGl2ZXMjMTIuMTYuNDQuMDAuMDAKLXVuc3BzYzcjMTIuMTcuMDAuMDAuMDAjQ29sb3JhbnRzIzEyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzEyLjE3LjE1LjAwLjAwI0R5ZXMjMTIuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTcuMTUuMDEuMDAjRmx1b3Jlc2NlbnQgZHllcyMxMi4xNy4xNS4wMC4wMAotdW5zcHNjNyMxMi4xNy4xNS4wMi4wMCNQaHRoYWxlaW4gZHllcyMxMi4xNy4xNS4wMC4wMAotdW5zcHNjNyMxMi4xNy4xNS4wMy4wMCNSb3NhbmlsaW5lIGR5ZXMjMTIuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTcuMTUuMDQuMDAjRm9vZCBvciBkcnVnIG9yIGNvc21ldGljIHNhZmUgKEZEQykgZHllcyMxMi4xNy4xNS4wMC4wMAotdW5zcHNjNyMxMi4xNy4xNS4wNS4wMCNMYWtlZCMxMi4xNy4xNS4wMC4wMAotdW5zcHNjNyMxMi4xNy4xNS4wNi4wMCNOYXR1cmFsIGR5ZXMjMTIuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTcuMTYuMDAuMDAjUGlnbWVudHMjMTIuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTcuMTYuMDEuMDAjTmF0dXJhbCBwaWdtZW50cyMxMi4xNy4xNi4wMC4wMAotdW5zcHNjNyMxMi4xNy4xNi4wMi4wMCNJbm9yZ2FuaWMgbWV0YWwgb3hpZGVzIzEyLjE3LjE2LjAwLjAwCi11bnNwc2M3IzEyLjE3LjE2LjAzLjAwI0NhcmJvbiBibGFjayMxMi4xNy4xNi4wMC4wMAotdW5zcHNjNyMxMi4xNy4xNi4wNC4wMCNUaXRhbml1bSBkaW94aWRlIzEyLjE3LjE2LjAwLjAwCi11bnNwc2M3IzEyLjE3LjE2LjA1LjAwI09yZ2FuaWMgcGlnbWVudHMjMTIuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMTcuMTcuMDAuMDAjQ29sb3IgY29tcG91bmRzIGFuZCBkaXNwZXJzaW9ucyMxMi4xNy4wMC4wMC4wMAotdW5zcHNjNyMxMi4xNy4xNy4wMS4wMCNQb2x5bWVyIG1hc3RlcmJhdGNoZXMjMTIuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMTcuMTcuMDIuMDAjUGlnbWVudCBkaXNwZXJzaW9ucyMxMi4xNy4xNy4wMC4wMAotdW5zcHNjNyMxMi4xNy4xNy4wMy4wMCNJbmtzIzEyLjE3LjE3LjAwLjAwCi11bnNwc2M3IzEyLjE4LjAwLjAwLjAwI1dheGVzIGFuZCBvaWxzIzEyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzEyLjE4LjE1LjAwLjAwI1dheGVzIzEyLjE4LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE4LjE1LjAxLjAwI1N5bnRoZXRpYyB3YXhlcyMxMi4xOC4xNS4wMC4wMAotdW5zcHNjNyMxMi4xOC4xNS4wMi4wMCNOYXR1cmFsIHdheGVzIzEyLjE4LjE1LjAwLjAwCi11bnNwc2M3IzEyLjE4LjE1LjAzLjAwI1BhcmFmZmlucyMxMi4xOC4xNS4wMC4wMAotdW5zcHNjNyMxMi4xOC4xNS4wNC4wMCNQZXRyb2xhdHVtcyMxMi4xOC4xNS4wMC4wMAotdW5zcHNjNyMxMi4xOC4xNi4wMC4wMCNPaWxzIzEyLjE4LjAwLjAwLjAwCi11bnNwc2M3IzEyLjE4LjE2LjAxLjAwI1N5bnRoZXRpYyBvaWxzIzEyLjE4LjE2LjAwLjAwCi11bnNwc2M3IzEyLjE4LjE2LjAyLjAwI05hdHVyYWwgb2lscyMxMi4xOC4xNi4wMC4wMAotdW5zcHNjNyMxMi4xOS4wMC4wMC4wMCNTb2x2ZW50cyMxMi4wMC4wMC4wMC4wMAotdW5zcHNjNyMxMi4xOS4xNS4wMC4wMCNIeWRyb2NhcmJvbmF0ZWQgc29sdmVudHMjMTIuMTkuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTkuMTUuMDEuMDAjQXJvbWF0aWMgc29sdmVudHMjMTIuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMTkuMTUuMDIuMDAjQWxpcGhhdGljIHNvbHZlbnRzIzEyLjE5LjE1LjAwLjAwCi11bnNwc2M3IzEyLjE5LjE2LjAwLjAwI094eWdlbmF0ZWQgc29sdmVudHMjMTIuMTkuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMTkuMTYuMDEuMDAjQWxjb2hvbCBzb2x2ZW50cyMxMi4xOS4xNi4wMC4wMAotdW5zcHNjNyMxMi4xOS4xNi4wMi4wMCNBY3RpdmUgc29sdmVudHMjMTIuMTkuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMjAuMDAuMDAuMDAjQ2hlbWljYWwgaW50ZXJtZWRpYXRlcyBhbmQgZml4YXRpdmVzIzEyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzEyLjIwLjE1LjAwLjAwI0ludGVybWVkaWF0ZXMjMTIuMjAuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjAuMTUuMDEuMDAjRXRoZXIgaW50ZXJtZWRpYXRlcyMxMi4yMC4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMC4xNS4wMi4wMCNLZXRvbmUgaW50ZXJtZWRpYXRlcyMxMi4yMC4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMC4xNS4wMy4wMCNBbGRlaHlkZSBpbnRlcm1lZGlhdGVzIzEyLjIwLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIwLjE1LjA0LjAwI1Blcm94aWRlIGludGVybWVkaWF0ZXMjMTIuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjAuMTUuMDUuMDAjQWNyeWxhdGUgb3IgbWV0aGFjcnlsYXRlIGludGVybWVkaWF0ZXMjMTIuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjAuMTYuMDAuMDAjRml4YXRpdmVzIzEyLjIwLjAwLjAwLjAwCi11bnNwc2M3IzEyLjIwLjE2LjAxLjAwI0Zvcm1hbGRlaHlkZXMjMTIuMjAuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMjAuMTYuMDIuMDAjR2x1dHJhbHMjMTIuMjAuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMjAuMTYuMDMuMDAjVGFubmlucyMxMi4yMC4xNi4wMC4wMAotdW5zcHNjNyMxMi4yMC4xNy4wMC4wMCNBbWluZXMgYW5kIGFtaWRlcyBhbmQgaW1pbmVzIGFuZCBpbWlkZXMjMTIuMjAuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjAuMTcuMDEuMDAjUHJpbWFyeSMxMi4yMC4xNy4wMC4wMAotdW5zcHNjNyMxMi4yMC4xNy4wMi4wMCNTZWNvbmRhcnkjMTIuMjAuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMjAuMTcuMDMuMDAjVGVydGlhcnkjMTIuMjAuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMjAuMTcuMDQuMDAjU3BlY2lhbHR5IzEyLjIwLjE3LjAwLjAwCi11bnNwc2M3IzEyLjIwLjE3LjA1LjAwI1N1bHBob25hdGVkIzEyLjIwLjE3LjAwLjAwCi11bnNwc2M3IzEyLjIxLjAwLjAwLjAwI0NhcmJvbiBiYXNlZCBjaGVtaWNhbHMgYW5kIGNvbXBvdW5kZWQgY2hlbWljYWxzIzEyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzEyLjIxLjE1LjAwLjAwI0FsY29ob2xzIzEyLjIxLjAwLjAwLjAwCi11bnNwc2M3IzEyLjIxLjE1LjAxLjAwI0FtaW5vIGFsY29ob2xzIzEyLjIxLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIxLjE1LjAyLjAwI0Jlbnp5bCBhbGNvaG9scyMxMi4yMS4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMS4xNS4wMy4wMCNDaGxvcm9oeWRyaW5zIzEyLjIxLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIxLjE1LjA0LjAwI0V0aGFub2wjMTIuMjEuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMTUuMDUuMDAjRmF0dHkgYWxjb2hvbHMjMTIuMjEuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMTUuMDYuMDAjR2x5Y29scyMxMi4yMS4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMS4xNS4wNy4wMCNIZXhhbm9scyMxMi4yMS4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMS4xNS4wOC4wMCNNZXRoYW5vbCMxMi4yMS4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMS4xNS4wOS4wMCNQb2x5IHZpbnlsIG9yIFBWICBhbGNvaG9sIzEyLjIxLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIxLjE1LjEwLjAwI1Byb3Bhbm9scyMxMi4yMS4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMS4xNS4xMS4wMCNTdWdhciBhbGNvaG9scyMxMi4yMS4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMS4xNS4xMi4wMCNCdXR5bCBhbGNvaG9scyMxMi4yMS4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMS4xNS4xMy4wMCNJc29wcm9weWwgYWxjb2hvbCMxMi4yMS4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMS4xNi4wMC4wMCNIeWRyb2NhcmJvbnMjMTIuMjEuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMTYuMDEuMDAjQWN5Y2xpYyBvciBjeWNsaWMgb3IgcG9seWN5Y2xpYyBoeWRyb2NhcmJvbnMjMTIuMjEuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMTYuMDIuMDAjSGFsb2dlbmF0ZWQgaHlkcm9jYXJib25zIzEyLjIxLjE2LjAwLjAwCi11bnNwc2M3IzEyLjIxLjE2LjAzLjAwI1N1bHBob25hdGVkIGh5ZHJvY2FyYm9ucyMxMi4yMS4xNi4wMC4wMAotdW5zcHNjNyMxMi4yMS4xNi4wNC4wMCNOaXRyb3NhdGVkIGh5ZHJvY2FyYm9ucyMxMi4yMS4xNi4wMC4wMAotdW5zcHNjNyMxMi4yMS4xNy4wMC4wMCNBbGRlaHlkZXMjMTIuMjEuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMTcuMDEuMDAjQWNldGFsYWxkZWh5ZXMjMTIuMjEuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMTcuMDIuMDAjR2x5b3hhbHMjMTIuMjEuMTcuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMTguMDAuMDAjRXRoZXJzIzEyLjIxLjAwLjAwLjAwCi11bnNwc2M3IzEyLjIxLjE4LjAxLjAwI0FjZXRhbCBldGhlcnMjMTIuMjEuMTguMDAuMDAKLXVuc3BzYzcjMTIuMjEuMTguMDIuMDAjRXRoeWwgZXRoZXJzIzEyLjIxLjE4LjAwLjAwCi11bnNwc2M3IzEyLjIxLjE4LjAzLjAwI01ldGh5bCBldGhlcnMjMTIuMjEuMTguMDAuMDAKLXVuc3BzYzcjMTIuMjEuMTguMDQuMDAjUGhlbnlsIGV0aGVycyMxMi4yMS4xOC4wMC4wMAotdW5zcHNjNyMxMi4yMS4xOC4wNS4wMCNNZXRoeWwgdGV0cmEgYnV0eWwgZXRoZXIjMTIuMjEuMTguMDAuMDAKLXVuc3BzYzcjMTIuMjEuMTkuMDAuMDAjS2V0b25lcyMxMi4yMS4wMC4wMC4wMAotdW5zcHNjNyMxMi4yMS4xOS4wMS4wMCNBY2V0b25lcyMxMi4yMS4xOS4wMC4wMAotdW5zcHNjNyMxMi4yMS4xOS4wMi4wMCNDYW1waG9ycyMxMi4yMS4xOS4wMC4wMAotdW5zcHNjNyMxMi4yMS4xOS4wMy4wMCNLZXRvbmUgYm9kaWVzIzEyLjIxLjE5LjAwLjAwCi11bnNwc2M3IzEyLjIxLjE5LjA0LjAwI01hbm5pY2ggYmFzZXMjMTIuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjAuMDAuMDAjUGhlbm9scyMxMi4yMS4wMC4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMC4wMS4wMCNCcm9tcGhlbm9sIGJsdWUjMTIuMjEuMjAuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjAuMDIuMDAjQ3Jlc29scyMxMi4yMS4yMC4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMS4wMC4wMCNDYXJib2h5ZHJhdGVzIzEyLjIxLjAwLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIxLjAxLjAwI1NpbXBsZSBzdWdhcnMgb3IgaXRzIGRlcml2YXRpdmVzIzEyLjIxLjIxLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIxLjAyLjAwI0d1bSByZXNpbnMjMTIuMjEuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjEuMDMuMDAjU3RhcmNoZXMjMTIuMjEuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjIuMDAuMDAjQ29tcG91bmRzIzEyLjIxLjAwLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIyLjAxLjAwI0NoZW1pY2FsIGFsbG95cyMxMi4yMS4yMi4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMi4wMi4wMCNDeWFuaWRlcyBvciBjeWFuYXRlcyMxMi4yMS4yMi4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMi4wMy4wMCNBbHVtaW51bSBjb21wb3VuZHMjMTIuMjEuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjIuMDQuMDAjQmFyaXVtIGNvbXBvdW5kcyMxMi4yMS4yMi4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMi4wNS4wMCNCb3JvbiBjb21wb3VuZHMjMTIuMjEuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjIuMDYuMDAjQnJvbWluZSBjb21wb3VuZHMjMTIuMjEuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjIuMDcuMDAjQ2FsY2l1bSBjb21wb3VuZHMjMTIuMjEuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjIuMDguMDAjQ2FyYm9uIGNvbXBvdW5kcyMxMi4yMS4yMi4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMi4wOS4wMCNDaGxvcmluZSBjb21wb3VuZHMjMTIuMjEuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjIuMTAuMDAjRmx1b3JpbmUgY29tcG91bmRzIzEyLjIxLjIyLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIyLjExLjAwI0dvbGQgY29tcG91bmRzIzEyLjIxLjIyLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIyLjEyLjAwI0lvZGluZSBjb21wb3VuZHMjMTIuMjEuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjIuMTMuMDAjSXJvbiBjb21wb3VuZHMjMTIuMjEuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjIuMTQuMDAjTWFnbmVzaXVtIGNvbXBvdW5kcyMxMi4yMS4yMi4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMi4xNS4wMCNOaXRyb2dlbiBjb21wb3VuZHMjMTIuMjEuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjIuMTYuMDAjTml0cmlsZSBjb21wb3VuZHMjMTIuMjEuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjIuMTcuMDAjT3h5Z2VuIGNvbXBvdW5kcyMxMi4yMS4yMi4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMi4xOC4wMCNQaG9zcGhvcm91cyBjb21wb3VuZHMjMTIuMjEuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjIuMTkuMDAjUG90YXNzaXVtIGNvbXBvdW5kcyMxMi4yMS4yMi4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMi4yMC4wMCNTZWxlbml1bSBjb21wb3VuZHMjMTIuMjEuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjIuMjEuMDAjU2lsaWNvbiBvciBzaWxpY29uZSBvciBzaWxpY2FuZSBjb21wb3VuZHMjMTIuMjEuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjIuMjIuMDAjU29kaXVtIGNvbXBvdW5kcyMxMi4yMS4yMi4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMi4yMy4wMCNTdWxmdXIgY29tcG91bmRzIzEyLjIxLjIyLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIyLjI0LjAwI1RpbiBjb21wb3VuZHMjMTIuMjEuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjIuMjUuMDAjWmluYyBjb21wb3VuZHMjMTIuMjEuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjIuMjYuMDAjSGV0ZXJvY3ljbGljIGNvbXBvdW5kcyMxMi4yMS4yMi4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMi4yNy4wMCNDb2JhbHQgY29tcG91bmRzIzEyLjIxLjIyLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIyLjI4LjAwI0FudGltb255IGNvbXBvdW5kcyMxMi4yMS4yMi4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMi4yOS4wMCNUaXRhbml1bSBjb21wb3VuZHMjMTIuMjEuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjMuMDAuMDAjT3hpZGVzIGluY2x1ZGVzIGFsbCBveGlkZWQgc3Vic3RhbmNlcyMxMi4yMS4wMC4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMy4wMS4wMCNBbHVtaW51bSBveGlkZXMjMTIuMjEuMjMuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjMuMDIuMDAjQ2FyYm9uIG94aWRlcyMxMi4yMS4yMy4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMy4wMy4wMCNIeXBvY2hsb3JvdXMgYWNpZCMxMi4yMS4yMy4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMy4wNC4wMCNNYWduZXNpdW0gb3hpZGVzIzEyLjIxLjIzLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIzLjA1LjAwI05pdHJvZ2VuIG94aWRlcyMxMi4yMS4yMy4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMy4wNi4wMCNPc21pdW0gb3hpZGVzIzEyLjIxLjIzLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIzLjA3LjAwI1Blcm94aWRlcyMxMi4yMS4yMy4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMy4wOC4wMCNTaWxpY29uIG94aWRlcyMxMi4yMS4yMy4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMy4wOS4wMCNTdWxmdXIgb3hpZGVzIzEyLjIxLjIzLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIzLjEwLjAwI1Rob3JpdW0gb3hpZGVzIzEyLjIxLjIzLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIzLjExLjAwI1dhdGVyIG94aWRlcyMxMi4yMS4yMy4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMy4xMi4wMCNaaW5jIG94aWRlcyMxMi4yMS4yMy4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMy4xMy4wMCNIeWRyb3hpZGVzIzEyLjIxLjIzLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIzLjE0LjAwI01ldGFsIG94aWRlcyMxMi4yMS4yMy4wMC4wMAotdW5zcHNjNyMxMi4yMS4yMy4xNS4wMCNOb24gbWV0YWwgb3hpZGVzIzEyLjIxLjIzLjAwLjAwCi11bnNwc2M3IzEyLjIxLjIzLjE2LjAwI0V0aHlsZW5lIG94aWRlIzEyLjIxLjIzLjAwLjAwCi11bnNwc2M3IzEyLjIxLjI0LjAwLjAwI0lzb3RvcGVzIzEyLjIxLjAwLjAwLjAwCi11bnNwc2M3IzEyLjIxLjI0LjAxLjAwI0RldXRlcmF0ZWQgc29sdmVudHMjMTIuMjEuMjQuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjQuMDIuMDAjSGVhdnkgd2F0ZXIjMTIuMjEuMjQuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjQuMDMuMDAjQWxwaGEgc291cmNlcyMxMi4yMS4yNC4wMC4wMAotdW5zcHNjNyMxMi4yMS4yNC4wNC4wMCNCZXRhIHNvdXJjZXMjMTIuMjEuMjQuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjQuMDUuMDAjQ29iYWx0IHNvdXJjZXMjMTIuMjEuMjQuMDAuMDAKLXVuc3BzYzcjMTIuMjEuMjQuMDYuMDAjR2FtbWEgc291cmNlcyMxMi4yMS4yNC4wMC4wMAotdW5zcHNjNyMxMi4yMS4yNC4wNy4wMCNSYWRpb2lzb3RvcGUgc291cmNlcyMxMi4yMS4yNC4wMC4wMAotdW5zcHNjNyMxMi4yMS4yNC4wOC4wMCNDYWxpYnJhdGlvbiBzb3VyY2VzIzEyLjIxLjI0LjAwLjAwCi11bnNwc2M3IzEyLjIyLjAwLjAwLjAwI0JpbyBjaGVtaWNhbHMjMTIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTUuMDAuMDAjUHJvdGVpbnMjMTIuMjIuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTUuMDEuMDAjQWxidW1pbnMjMTIuMjIuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTUuMDIuMDAjQmFjdGVyaWFsIHByb3RlaW5zIzEyLjIyLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE1LjAzLjAwI0Jsb29kIHByb3RlaW5zIzEyLjIyLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE1LjA0LjAwI0JvbmUgbW9ycGhvZ2VuZXRpYyBwcm90ZWlucyMxMi4yMi4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNS4wNS4wMCNDYXJyaWVyIHByb3RlaW5zIzEyLjIyLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE1LjA2LjAwI0NvbnRyYWN0aWxlIHByb3RlaW5zIzEyLjIyLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE1LjA3LjAwI0RpZXRhcnkgcHJvdGVpbnMjMTIuMjIuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTUuMDguMDAjRGVveHlyaWJvbnVjbGVpYyBhY2lkIChETkEpIGJpbmRpbmcgcHJvdGVpbnMjMTIuMjIuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTUuMDkuMDAjRWdnIHByb3RlaW5zIzEyLjIyLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE1LjEwLjAwI0dsb2J1bGlucyMxMi4yMi4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNS4xMS4wMCNHbHljb3Byb3RlaW5zIzEyLjIyLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE1LjEyLjAwI0hlbWVwcm90ZWlucyMxMi4yMi4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNS4xMy4wMCNJbnRlcmZlcm9ucyMxMi4yMi4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNS4xNC4wMCNMZWN0aW5zIzEyLjIyLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE1LjE1LjAwI0xpcG9wcm90ZWlucyMxMi4yMi4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNS4xNi4wMCNNZW1icmFuZSBwcm90ZWlucyMxMi4yMi4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNS4xNy4wMCNNZXRhbGxvcHJvdGVpbnMjMTIuMjIuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTUuMTguMDAjTmVydmUgdGlzc3VlIHByb3RlaW5zIzEyLjIyLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE1LjE5LjAwI05lY3VsZW9wcm90ZWlucyMxMi4yMi4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNS4yMC4wMCNQZXB0b25lcyMxMi4yMi4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNS4yMS4wMCNQbGFudCBwcm90ZWlucyMxMi4yMi4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNS4yMi4wMCNQcmlvbnMjMTIuMjIuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTUuMjMuMDAjQ3l0b3BsYXNtaWMgb3IgbnVjbGVhciByZWNlcHRvcnMjMTIuMjIuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTUuMjQuMDAjUmVjb21iaW5hbnQgcHJvdGVpbnMjMTIuMjIuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTUuMjUuMDAjU2VycGlucyMxMi4yMi4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNS4yNi4wMCNUcmFuc2NyaXB0aW9uIGZhY3RvcnMjMTIuMjIuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTUuMjcuMDAjVmlyYWwgcHJvdGVpbnMjMTIuMjIuMTUuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTUuMjguMDAjU2NsZXJvcHJvdGVpbiMxMi4yMi4xNS4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNi4wMC4wMCNBbnRpYm9kaWVzIzEyLjIyLjAwLjAwLjAwCi11bnNwc2M3IzEyLjIyLjE2LjAxLjAwI1ZpcmFsIGFudGlib2RpZXMjMTIuMjIuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTYuMDIuMDAjQW50aXRveGlucyMxMi4yMi4xNi4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNi4wMy4wMCNCYWN0ZXJpYWwgYW50aWJvZGllcyMxMi4yMi4xNi4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNi4wNC4wMCNBdXRvYW50aWJvZGllcyMxMi4yMi4xNi4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNi4wNS4wMCNJbW11bmUgc2VyYSMxMi4yMi4xNi4wMC4wMAotdW5zcHNjNyMxMi4yMi4xNi4wNi4wMCNJbW11bm9nbG9idWxpbnMjMTIuMjIuMTYuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTcuMDAuMDAjTnV0cmllbnRzIzEyLjIyLjAwLjAwLjAwCi11bnNwc2M3IzEyLjIyLjE3LjAxLjAwI1ZpdGFtaW5zIzEyLjIyLjE3LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE4LjAwLjAwI0VuenltZXMjMTIuMjIuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTguMDEuMDAjSHlkcm9sYXNlcyMxMi4yMi4xOC4wMC4wMAotdW5zcHNjNyMxMi4yMi4xOC4wMi4wMCNJc29lbnp5bWVzIzEyLjIyLjE4LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE4LjAzLjAwI0lzb21lcmFzZXMjMTIuMjIuMTguMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTguMDQuMDAjTGlnYXNlcyMxMi4yMi4xOC4wMC4wMAotdW5zcHNjNyMxMi4yMi4xOC4wNS4wMCNMeWFzZXMjMTIuMjIuMTguMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTguMDYuMDAjTXVsdGllbnp5bWUgY29tcGxleGVzIzEyLjIyLjE4LjAwLjAwCi11bnNwc2M3IzEyLjIyLjE4LjA3LjAwI094aWRvcmVkdWN0YXNlcyMxMi4yMi4xOC4wMC4wMAotdW5zcHNjNyMxMi4yMi4xOC4wOC4wMCNQZXJtZWFzZXMjMTIuMjIuMTguMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTguMDkuMDAjVHJhbnNmZXJlYXNlcyMxMi4yMi4xOC4wMC4wMAotdW5zcHNjNyMxMi4yMi4xOC4xMC4wMCNDYXRhbGFzZSMxMi4yMi4xOC4wMC4wMAotdW5zcHNjNyMxMi4yMi4xOS4wMC4wMCNUaXNzdWVzIzEyLjIyLjAwLjAwLjAwCi11bnNwc2M3IzEyLjIyLjE5LjAxLjAwI0Nvbm5lY3RpdmUgdGlzc3VlcyMxMi4yMi4xOS4wMC4wMAotdW5zcHNjNyMxMi4yMi4xOS4wMi4wMCNFcGl0aGVsaXVtcyMxMi4yMi4xOS4wMC4wMAotdW5zcHNjNyMxMi4yMi4xOS4wMy4wMCNFeG9jcmluZSBnbGFuZHMjMTIuMjIuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTkuMDQuMDAjTHltcGhvaWQgdGlzc3VlcyMxMi4yMi4xOS4wMC4wMAotdW5zcHNjNyMxMi4yMi4xOS4wNS4wMCNNZW1icmFuZXMjMTIuMjIuMTkuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMTkuMDYuMDAjTXVzY2xlcyMxMi4yMi4xOS4wMC4wMAotdW5zcHNjNyMxMi4yMi4xOS4wNy4wMCNOZXJ2ZSB0aXNzdWVzIzEyLjIyLjE5LjAwLjAwCi11bnNwc2M3IzEyLjIyLjIwLjAwLjAwI0N1bHR1cmVzIGFuZCBmbHVpZHMjMTIuMjIuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMjAuMDEuMDAjQWdhciMxMi4yMi4yMC4wMC4wMAotdW5zcHNjNyMxMi4yMi4yMC4wMi4wMCNCcm90aCMxMi4yMi4yMC4wMC4wMAotdW5zcHNjNyMxMi4yMi4yMC4wMy4wMCNTZXJ1bSBmcmVlIGN1bHR1cmUgbWVkaWEjMTIuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMjAuMDQuMDAjQ29uZGl0aW9uZWQgY3VsdHVyZSBtZWRpYSMxMi4yMi4yMC4wMC4wMAotdW5zcHNjNyMxMi4yMi4yMC4wNS4wMCNCYWN0ZXJpYSBjdWx0dXJlcyMxMi4yMi4yMC4wMC4wMAotdW5zcHNjNyMxMi4yMi4yMC4wNi4wMCNCbG9vZCMxMi4yMi4yMC4wMC4wMAotdW5zcHNjNyMxMi4yMi4yMC4wNy4wMCNVcmVhIzEyLjIyLjIwLjAwLjAwCi11bnNwc2M3IzEyLjIyLjIwLjA4LjAwI0JpbGUjMTIuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMjAuMDkuMDAjUGxhc21hIzEyLjIyLjIwLjAwLjAwCi11bnNwc2M3IzEyLjIyLjIwLjEwLjAwI1NlbWVuIGN1bHR1cmVzIzEyLjIyLjIwLjAwLjAwCi11bnNwc2M3IzEyLjIyLjIxLjAwLjAwI051Y2xlaWMgYWNpZHMjMTIuMjIuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMjEuMDEuMDAjUmlib251Y2xlaWMgYWNpZCAoUk5BKSMxMi4yMi4yMS4wMC4wMAotdW5zcHNjNyMxMi4yMi4yMS4wMi4wMCNEZW94eXJpYm9udWNsZWljIGFjaWQgKEROQSkjMTIuMjIuMjEuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMjIuMDAuMDAjQW1pbm8gYWNpZHMjMTIuMjIuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMjIuMDEuMDAjQnJhbmNoZWQgY2hhaW4gYW1pbm8gYWNpZHMjMTIuMjIuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMjIuMDIuMDAjQ3ljbGljIGFtaW5vIGFjaWRzIzEyLjIyLjIyLjAwLjAwCi11bnNwc2M3IzEyLjIyLjIyLjAzLjAwI0RpYW1pbm8gYW1pbm8gYWNpZHMjMTIuMjIuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMjIuMDQuMDAjRGljYXJib3h5bGljIGFtaW5vIGFjaWRzIzEyLjIyLjIyLjAwLjAwCi11bnNwc2M3IzEyLjIyLjIyLjA1LjAwI0Vzc2VudGlhbCBhbWlubyBhY2lkcyMxMi4yMi4yMi4wMC4wMAotdW5zcHNjNyMxMi4yMi4yMi4wNi4wMCNTdWxmdXIgYW1pbm8gYWNpZHMjMTIuMjIuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMjIuMDcuMDAjQW1pbm9idXR5cmljIGFjaWRzIzEyLjIyLjIyLjAwLjAwCi11bnNwc2M3IzEyLjIyLjIyLjA4LjAwI0FtaW5vY2Fwcm9pYyBhY2lkcyMxMi4yMi4yMi4wMC4wMAotdW5zcHNjNyMxMi4yMi4yMi4wOS4wMCNPeGFtaWMgYWNpZHMjMTIuMjIuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMjIuMTAuMDAjUGhvc3Bob2FtaW5vIGFjaWRzIzEyLjIyLjIyLjAwLjAwCi11bnNwc2M3IzEyLjIyLjIyLjExLjAwI1F1aXNxdWFsaWMgYWNpZHMjMTIuMjIuMjIuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMjMuMDAuMDAjQW1pbmVzIGFuZCBhbWlkZXMgYW5kIGltaW5lcyBhbmQgaW1pZGVzIzEyLjIyLjAwLjAwLjAwCi11bnNwc2M3IzEyLjIyLjIzLjAxLjAwI1ByaW1hcnkjMTIuMjIuMjMuMDAuMDAKLXVuc3BzYzcjMTIuMjIuMjMuMDIuMDAjU2Vjb25kYXJ5IzEyLjIyLjIzLjAwLjAwCi11bnNwc2M3IzEyLjIyLjIzLjAzLjAwI1RlcnRpYXJ5IzEyLjIyLjIzLjAwLjAwCi11bnNwc2M3IzEyLjIyLjIzLjA0LjAwI1NwZWNpYWx0eSMxMi4yMi4yMy4wMC4wMAotdW5zcHNjNyMxMi4yMi4yMy4wNS4wMCNTdWxwaG9uYXRlZCMxMi4yMi4yMy4wMC4wMAotdW5zcHNjNyMxMi4yMy4wMC4wMC4wMCNJbm9yZ2FuaWMgY29tcG91bmRzIzEyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzEyLjIzLjEwLjAwLjAwI01pbmVyYWwgYWNpZHMjMTIuMjMuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjMuMTAuMDEuMDAjSHlkcm9mbG9yaWMgYWNpZCMxMi4yMy4xMC4wMC4wMAotdW5zcHNjNyMxMi4yMy4xMC4wMi4wMCNIeWRyb2ZsdW9yb3NpbGljaWMgYWNpZCMxMi4yMy4xMC4wMC4wMAotdW5zcHNjNyMxMi4yMy4xMC4wMy4wMCNIeWRyb2Zsb3VyaWMgYWNpZCMxMi4yMy4xMC4wMC4wMAotdW5zcHNjNyMxMi4yMy4xMS4wMC4wMCNCYXNlcyMxMi4yMy4wMC4wMC4wMAotdW5zcHNjNyMxMi4yMy4xMS4wMS4wMCNTb2RpdW0gaHlkcm94aWRlIzEyLjIzLjExLjAwLjAwCi11bnNwc2M3IzEyLjIzLjExLjAyLjAwI1BvdGFzc2l1bSBoeWRyb3hpZGUjMTIuMjMuMTEuMDAuMDAKLXVuc3BzYzcjMTIuMjMuMTIuMDAuMDAjU2FsdHMjMTIuMjMuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjMuMTIuMDEuMDAjQW1tb25pdW0gbml0cmF0ZSMxMi4yMy4xMi4wMC4wMAotdW5zcHNjNyMxMi4yMy4xMy4wMC4wMCNTdWxwaGF0ZXMjMTIuMjMuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjMuMTMuMDEuMDAjRmVycmljIHN1bHBoYXRlIzEyLjIzLjEzLjAwLjAwCi11bnNwc2M3IzEyLjIzLjEzLjAyLjAwI0NvcHBlciBzdWxwaGF0ZSMxMi4yMy4xMy4wMC4wMAotdW5zcHNjNyMxMi4yMy4xMy4wMy4wMCNBbHVtaW5pdW0gc3VscGhhdGUjMTIuMjMuMTMuMDAuMDAKLXVuc3BzYzcjMTIuMjMuMTMuMDQuMDAjU29kaXVtIHN1bHBoYXRlIzEyLjIzLjEzLjAwLjAwCi11bnNwc2M3IzEyLjIzLjEzLjA1LjAwI1NvZGl1bSB0aGlvc3VscGhhdGUjMTIuMjMuMTMuMDAuMDAKLXVuc3BzYzcjMTIuMjMuMTQuMDAuMDAjQ2hsb3JpZGVzIGNobG9yYXRlcyBhbmQgcGVyY2hsb3JhdGVzIzEyLjIzLjAwLjAwLjAwCi11bnNwc2M3IzEyLjIzLjE0LjAxLjAwI1NvZGl1bSBjaGxvcml0ZSMxMi4yMy4xNC4wMC4wMAotdW5zcHNjNyMxMi4yMy4xNC4wMi4wMCNGZXJyaWMgQ2hsb3JpZGUjMTIuMjMuMTQuMDAuMDAKLXVuc3BzYzcjMTIuMjMuMTQuMDMuMDAjQWx1bWluaXVtIGNobG9yaWRlIzEyLjIzLjE0LjAwLjAwCi11bnNwc2M3IzEyLjIzLjE0LjA0LjAwI1BvbHkgYWx1bWluaXVtIGNobG9yaWRlIzEyLjIzLjE0LjAwLjAwCi11bnNwc2M3IzEyLjIzLjE0LjA1LjAwI0FsdW1pbml1bSBjaGxvcm9oeWRyYXRlIzEyLjIzLjE0LjAwLjAwCi11bnNwc2M3IzEyLjIzLjE0LjA2LjAwI1NvZGl1bSBoeXBvY2hsb3JpdGUjMTIuMjMuMTQuMDAuMDAKLXVuc3BzYzcjMTIuMjMuMTUuMDAuMDAjQm9yaWRlcyBhbmQgYm9yYXRlcyMxMi4yMy4wMC4wMC4wMAotdW5zcHNjNyMxMi4yMy4xNS4wMS4wMCNTb2RpdW0gYm9yYXRlIzEyLjIzLjE1LjAwLjAwCi11bnNwc2M3IzEyLjIzLjE2LjAwLjAwI0h5ZHJpZGVzIzEyLjIzLjAwLjAwLjAwCi11bnNwc2M3IzEyLjIzLjE2LjAxLjAwI0FsdW1pbml1bSBoeWRyaXRlIzEyLjIzLjE2LjAwLjAwCi11bnNwc2M3IzEyLjIzLjE2LjAyLjAwI01hZ25lc2l1bSBoeWRyaXRlIzEyLjIzLjE2LjAwLjAwCi11bnNwc2M3IzEyLjIzLjE3LjAwLjAwI1N1bHBoaWRlcyMxMi4yMy4wMC4wMC4wMAotdW5zcHNjNyMxMi4yMy4xNy4wMS4wMCNIeWRyb2dlbiBzdWxwaGlkZSMxMi4yMy4xNy4wMC4wMAotdW5zcHNjNyMxMi4yMy4xNy4wMi4wMCNQb2x5IHN1bHBoaWRlIzEyLjIzLjE3LjAwLjAwCi11bnNwc2M3IzEyLjIzLjE3LjAzLjAwI1NvZGl1bSBzdWxwaGlkZSMxMi4yMy4xNy4wMC4wMAotdW5zcHNjNyMxMi4yMy4xNy4wNC4wMCNJcm9uIHN1bHBoaWRlIzEyLjIzLjE3LjAwLjAwCi11bnNwc2M3IzEyLjIzLjE4LjAwLjAwI0lub3JnYW5pYyBveGlkaXNpbmcgYWdlbnRzIzEyLjIzLjAwLjAwLjAwCi11bnNwc2M3IzEyLjIzLjE4LjAxLjAwI1BvdGFzc2l1bSBwZXJtYW5nYW5hdGUjMTIuMjMuMTguMDAuMDAKLXVuc3BzYzcjMTIuMjMuMTguMDIuMDAjUG90YXNzaXVtIGRpY2hyb21hdGUjMTIuMjMuMTguMDAuMDAKLXVuc3BzYzcjMTIuMjMuMTguMDMuMDAjTWFuZ2FuZXNlIGRpb3hpZGUjMTIuMjMuMTguMDAuMDAKLXVuc3BzYzcjMTIuMjQuMDAuMDAuMDAjQWxjb2hvbHMjMTIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjQuMTAuMDAuMDAjTW9ub2h5ZHJpYyBhbGNvaG9scyMxMi4yNC4wMC4wMC4wMAotdW5zcHNjNyMxMi4yNC4xMC4wMS4wMCNFdGhhbm9sIzEyLjI0LjEwLjAwLjAwCi11bnNwc2M3IzEyLjI0LjEwLjAyLjAwI0lzb3Byb3Bhbm9sIzEyLjI0LjEwLjAwLjAwCi11bnNwc2M3IzEyLjI0LjEwLjAzLjAwI01ldGhhbm9sIzEyLjI0LjEwLjAwLjAwCi11bnNwc2M3IzEyLjI0LjEwLjA0LjAwI1BlbnRhbm9scyMxMi4yNC4xMC4wMC4wMAotdW5zcHNjNyMxMi4yNC4xMC4wNS4wMCNPY3Rhbm9scyMxMi4yNC4xMC4wMC4wMAotdW5zcHNjNyMxMi4yNC4xMC4wNi4wMCNJbm9zaXRvbHMjMTIuMjQuMTAuMDAuMDAKLXVuc3BzYzcjMTIuMjQuMTAuMDcuMDAjRmF0dHkgYWxjb2hvbHMjMTIuMjQuMTAuMDAuMDAKLXVuc3BzYzcjMTIuMjQuMTAuMDguMDAjQWxseWwgYWxjb2hvbCMxMi4yNC4xMC4wMC4wMAotdW5zcHNjNyMxMi4yNC4xMS4wMC4wMCNQb2x5aHlkcmljIGFsY29ob2xzIzEyLjI0LjAwLjAwLjAwCi11bnNwc2M3IzEyLjI0LjExLjAxLjAwI0dseWNvbCMxMi4yNC4xMS4wMC4wMAotdW5zcHNjNyMxMi4yNC4xMS4wMi4wMCNHbHljZXJvbCMxMi4yNC4xMS4wMC4wMAotdW5zcHNjNyMxMi4yNC4xMi4wMC4wMCNUaGlvIGFsY29ob2xzIzEyLjI0LjAwLjAwLjAwCi11bnNwc2M3IzEyLjI0LjEyLjAxLjAwI0V0aGFuZSB0aGlvbCMxMi4yNC4xMi4wMC4wMAotdW5zcHNjNyMxMi4yNC4xMi4wMi4wMCNNZXRoYW5lIHRoaW9sIzEyLjI0LjEyLjAwLjAwCi11bnNwc2M3IzEyLjI1LjAwLjAwLjAwI0Fsa2FuZXMgQWxrZW5lcyBBbGt5bmVzIGFuZCBBcm9tYXRpY3MjMTIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjUuMTAuMDAuMDAjQWxrYW5lcyMxMi4yNS4wMC4wMC4wMAotdW5zcHNjNyMxMi4yNS4xMC4wMS4wMCNQZW50YW5lIzEyLjI1LjEwLjAwLjAwCi11bnNwc2M3IzEyLjI1LjEwLjAyLjAwI0hleGFuZSMxMi4yNS4xMC4wMC4wMAotdW5zcHNjNyMxMi4yNS4xMS4wMC4wMCNDeWNsaWMgaHlkcm9jYXJib25zIzEyLjI1LjAwLjAwLjAwCi11bnNwc2M3IzEyLjI1LjExLjAxLjAwI1RvbHVlbmUjMTIuMjUuMTEuMDAuMDAKLXVuc3BzYzcjMTIuMjUuMTEuMDIuMDAjWHlsZW5lcyMxMi4yNS4xMS4wMC4wMAotdW5zcHNjNyMxMi4yNS4xMS4wMy4wMCNCZW56ZW5lIzEyLjI1LjExLjAwLjAwCi11bnNwc2M3IzEyLjI1LjEyLjAwLjAwI0Fsa2VuZXMjMTIuMjUuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjUuMTIuMDEuMDAjUHJvcGVuZSMxMi4yNS4xMi4wMC4wMAotdW5zcHNjNyMxMi4yNS4xMi4wMi4wMCNCdXRlbmUjMTIuMjUuMTIuMDAuMDAKLXVuc3BzYzcjMTIuMjUuMTIuMDMuMDAjU3R5cmVuZSMxMi4yNS4xMi4wMC4wMAotdW5zcHNjNyMxMi4yNS4xMy4wMC4wMCNBbGt5bmVzIzEyLjI1LjAwLjAwLjAwCi11bnNwc2M3IzEyLjI1LjEzLjAxLjAwI0FjeXRlbGVuZSMxMi4yNS4xMy4wMC4wMAotdW5zcHNjNyMxMi4yNi4wMC4wMC4wMCNBcm9tYXRpYyBkZXJpdmF0aXZlcyMxMi4wMC4wMC4wMC4wMAotdW5zcHNjNyMxMi4yNi4xMC4wMC4wMCNBcm9tYXRpYyBzdWxwaG9uaWMgYWNpZHMjMTIuMjYuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjYuMTAuMDEuMDAjQmVuemVuZSBzdWxwaG9uaWMgYWNpZHMjMTIuMjYuMTAuMDAuMDAKLXVuc3BzYzcjMTIuMjYuMTAuMDIuMDAjSGFsb2dlbmF0ZWQgc3VscGhvbmljIGFjaWRzIzEyLjI2LjEwLjAwLjAwCi11bnNwc2M3IzEyLjI2LjEwLjAzLjAwI05pdHJvc3VscGhvbmljIGFjaWRzIzEyLjI2LjEwLjAwLjAwCi11bnNwc2M3IzEyLjI2LjEwLjA0LjAwI0FtaW5vIHN1bHBob25pYyBhY2lkcyMxMi4yNi4xMC4wMC4wMAotdW5zcHNjNyMxMi4yNi4xMC4wNS4wMCNTdWxwaG9ueWwgY2hsb3JpZGVzIzEyLjI2LjEwLjAwLjAwCi11bnNwc2M3IzEyLjI2LjExLjAwLjAwI0Fyb21hdGljIG5pdHJvIGNvbXBvdW5kcyMxMi4yNi4wMC4wMC4wMAotdW5zcHNjNyMxMi4yNi4xMS4wMS4wMCNOaXRybyBiZW56ZW5lcyMxMi4yNi4xMS4wMC4wMAotdW5zcHNjNyMxMi4yNi4xMS4wMi4wMCNOaXRybyB0b2x1ZW5lcyMxMi4yNi4xMS4wMC4wMAotdW5zcHNjNyMxMi4yNi4xMS4wMy4wMCNDYXByb2xhY3RhbSMxMi4yNi4xMS4wMC4wMAotdW5zcHNjNyMxMi4yNi4xMi4wMC4wMCNDeWNsaWMgYWxjb2hvbHMjMTIuMjYuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjYuMTIuMDEuMDAjSGV4YW5vbHMjMTIuMjYuMTIuMDAuMDAKLXVuc3BzYzcjMTIuMjYuMTIuMDIuMDAjTmFwdGhvbHMjMTIuMjYuMTIuMDAuMDAKLXVuc3BzYzcjMTIuMjYuMTIuMDMuMDAjWHlsZW5vbHMjMTIuMjYuMTIuMDAuMDAKLXVuc3BzYzcjMTIuMjYuMTIuMDQuMDAjQmVuenlsIGFsY29ob2xzIzEyLjI2LjEyLjAwLjAwCi11bnNwc2M3IzEyLjI2LjEzLjAwLjAwI1BodGhhbGF0ZXMjMTIuMjYuMDAuMDAuMDAKLXVuc3BzYzcjMTIuMjYuMTMuMDEuMDAjRGkgb2N0eWwgUGh0aGFsYXRlIzEyLjI2LjEzLjAwLjAwCi11bnNwc2M3IzEyLjI2LjEzLjAyLjAwI0RpIGV0aHlsIHBodGhhbGF0ZXMjMTIuMjYuMTMuMDAuMDAKLXVuc3BzYzcjMTMuMDAuMDAuMDAuMDAjUmVzaW4gYW5kIFJvc2luIGFuZCBSdWJiZXIgYW5kIEZvYW0gYW5kIEZpbG0gYW5kIEVsYXN0b21lcmljIE1hdGVyaWFscyMxMy4wMC4wMC4wMC4wMAotdW5zcHNjNyMxMy4xMC4wMC4wMC4wMCNSdWJiZXIgYW5kIGVsYXN0b21lcnMjMTMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTUuMDAuMDAjTmF0dXJhbCBydWJiZXIjMTMuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTUuMDEuMDAjTGF0ZXggcnViYmVyIzEzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE1LjAyLjAwI0NyZXBlIHJ1YmJlciMxMy4xMC4xNS4wMC4wMAotdW5zcHNjNyMxMy4xMC4xNS4wMy4wMCNTbW9rZWQgc2hlZXQgcnViYmVyIzEzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE1LjA0LjAwI05hdHVyYWwgZm9hbSBydWJiZXIjMTMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTUuMDUuMDAjQmxvY2sgb3IgY3J1bWIgcnViYmVyIzEzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE2LjAwLjAwI1Byb2Nlc3NlZCBhbmQgc3ludGhldGljIHJ1YmJlciMxMy4xMC4wMC4wMC4wMAotdW5zcHNjNyMxMy4xMC4xNi4wMS4wMCNWdWxjYW5pemVkIHJ1YmJlciMxMy4xMC4xNi4wMC4wMAotdW5zcHNjNyMxMy4xMC4xNi4wMi4wMCNDaGxvcmluYXRlZCBydWJiZXIjMTMuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTYuMDMuMDAjSHlkcm9jaGxvcmlkZSBydWJiZXIjMTMuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTYuMDQuMDAjQ3ljbGl6ZWQgcnViYmVyIzEzLjEwLjE2LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE2LjA1LjAwI0lzb21lcml6ZWQgcnViYmVyIzEzLjEwLjE2LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE2LjA2LjAwI1RoZXJtcGxhc3RpYyBydWJiZXIjMTMuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTYuMDcuMDAjUnViYmVyIGNvbXBvdW5kIzEzLjEwLjE2LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE3LjAwLjAwI0VsYXN0b21lcnMjMTMuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTcuMDEuMDAjQWNyeWxvbml0cmlsZSBidXRhZGllbmUgKE5CUikjMTMuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTcuMDIuMDAjSGlnaGx5IHNhdHVyYXRlZCBuaXRyaWxlIChITkJSKSMxMy4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMy4xMC4xNy4wMy4wMCNGbHVvcm9jYXJib24gKEZLTSkjMTMuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTcuMDQuMDAjRXRoeWxlbmUgcHJvcHlsZW5lIChFUCkjMTMuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTcuMDUuMDAjU3R5cmVuZSBidXRhZGllbmUgKFNCUikjMTMuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTcuMDYuMDAjQ2hsb3JvcHJlbmUgKENSKSMxMy4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMy4xMC4xNy4wNy4wMCNJc29idXR5bGVuZSBpc29wcmVuZSAoSUlSL1hJSVIpIzEzLjEwLjE3LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE3LjA4LjAwI1NpbGljb25lIChWTVEgYW5kIFBNUSBhbmQgUFZNUSkjMTMuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTcuMDkuMDAjRmx1b3Jvc2lsaWNvbmUgKEZWTVEpIzEzLjEwLjE3LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE3LjEwLjAwI1BvbHlhY3J5bGF0ZSAoQUNNKSMxMy4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMy4xMC4xNy4xMS4wMCNFdGh5bGVuZSBhY3J5bGljIChBRU0pIzEzLjEwLjE3LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE3LjEyLjAwI0NobG9yb3N1bGZvbmF0ZWQgcG9seWV0aHlsZW5lIChDU00pIzEzLjEwLjE3LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE3LjEzLjAwI0NobG9yb3BvbHlldGh5bGVuZSAoQ00pIzEzLjEwLjE3LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE3LjE0LjAwI0VwaWNobG9yb2h5ZHJpbiAoRUNPKSMxMy4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMy4xMC4xNy4xNS4wMCNOYXR1cmFsIHBvbHlpc29wcmVuZSAoTlIpIzEzLjEwLjE3LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE3LjE2LjAwI1N5bnRoZXRpYyBwb2x5aXNvcHJlbmUgKElSKSMxMy4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMy4xMC4xNy4xNy4wMCNQb2x5ZXN0ZXIgdXJldGhhbmUgKEFVKSMxMy4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMy4xMC4xNy4xOC4wMCNQb2x5ZXRoZXIgdXJldGhhbmUgKEVVKSMxMy4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMy4xMC4xNy4xOS4wMCNQb2x5YnV0YWRpZW5lIChCUikjMTMuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTcuMjAuMDAjUG9seWV0aGVyIGJsb2NrIGFtaWRlIChQRUJBKSMxMy4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMy4xMC4xNy4yMS4wMCNTdHlyZW5lIGJsb2NrIGNvcGxveW1lciAoVEVTKSMxMy4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMy4xMC4xNy4yMi4wMCNDb3BvbHllc3RlciMxMy4xMC4xNy4wMC4wMAotdW5zcHNjNyMxMy4xMC4xNy4yMy4wMCNUaGVybW9wbGFzdGljIzEzLjEwLjE3LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE3LjI0LjAwI1BvbHlvbGVuZmluaWMjMTMuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTguMDAuMDAjVGhlcm1vcGxhc3RpYyBlbGFzdG9tZXJzIzEzLjEwLjAwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjE4LjAxLjAwI1BvbHlldGhlciBibG9jayBhbWlkZSAoUEVCQSkjMTMuMTAuMTguMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTguMDIuMDAjUG9seW9sZW5maW5pYyAoVFBPKSMxMy4xMC4xOC4wMC4wMAotdW5zcHNjNyMxMy4xMC4xOC4wMy4wMCNFdGhlciBlc3RlciBibG9jayBjb3Bsb3ltZXIgKFRFRUUpIzEzLjEwLjE4LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE4LjA0LjAwI1RoZXJtb3BsYXN0aWMgZWxhc3RvbWVyIHBvbHl1cmV0aGFuZSAoVFBVUikjMTMuMTAuMTguMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTguMDUuMDAjU3R5cmVuZSBibG9jayBjb3Bsb3ltZXIgKFRFUykjMTMuMTAuMTguMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTkuMDAuMDAjVGhlcm1vc2V0IHBsYXN0aWNzIzEzLjEwLjAwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjE5LjAxLjAwI0Vwb3h5IChFUCkjMTMuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMTkuMDIuMDAjUGhlbm9saWMgKFBGKSMxMy4xMC4xOS4wMC4wMAotdW5zcHNjNyMxMy4xMC4xOS4wMy4wMCNVbnNhdHVyYXRlIHBvbHllc3RlciAoVVApIzEzLjEwLjE5LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE5LjA0LjAwI1VyZWEgKFVGKSMxMy4xMC4xOS4wMC4wMAotdW5zcHNjNyMxMy4xMC4xOS4wNS4wMCNNZWxhbWluZSAoTUYpIzEzLjEwLjE5LjAwLjAwCi11bnNwc2M3IzEzLjEwLjE5LjA2LjAwI1RoZXJtb3NldCBwb2x5dXJldGhhbmUgKFBVUikjMTMuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjAuMDAuMDAjVGhlcm1vcGxhc3RpYyBwbGFzdGljcyMxMy4xMC4wMC4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMC4wMS4wMCNBY3J5bG9uaXRyaWxlIGJ1dGFkaWVuZSBzdHlyZW5lIChBQlMpIzEzLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIwLjAyLjAwI0Fjcnlsb25pdHJpbGUgYnV0YWRpZW5lIHN0eXJlbmUgKEFCUykgYWxsb3lzIzEzLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIwLjAzLjAwI0FjZXRhbCBwb2x5bWVyIzEzLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIwLjA0LjAwI0FjcnlsaWMjMTMuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjAuMDUuMDAjQWNyeWxvbml0cmlsZSBzdHlyZW5lIGFjcnlsaWMgKEFTQSkjMTMuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjAuMDYuMDAjQWNyeWxvbml0cmlsZSBzdHlyZW5lIGFjcnlsaWMgKEFTQSkgYWxsb3lzIzEzLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIwLjA3LjAwI0NlbGx1bG9zaWNzIzEzLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIwLjA4LjAwI0ZsdW9yb3BvbHltZXJzIChQVEZFKSMxMy4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMC4wOS4wMCNFdGh5bGVuZSB2aW55bCBhY2V0YXRlIChFVkEpIzEzLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIwLjEwLjAwI0xpcXVpZCBjcnlzdGFsIHBvbHltZXIgKExDUCkjMTMuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjAuMTEuMDAjUG9seWFtaWRlIG55bG9ucyAoUEEpIzEzLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIwLjEyLjAwI1BvbHlidXR5bGVuZSB0ZXJlcHRoYWxhdGUgKFBCVCkjMTMuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjAuMTMuMDAjUG9seWNhcmJvbmF0ZSAoUEMpIzEzLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIwLjE0LjAwI1BvbHlldGhlcmV0aGVya2V0b25lIChQRUVLKSMxMy4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMC4xNS4wMCNQb2x5ZXRoZXJpbWlkIChQRUkpIzEzLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIwLjE2LjAwI1BvbHlldGhlcnN1bGZvbmUgKFBFUykjMTMuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjAuMTcuMDAjSGlnaCBkZW5zaXR5IHBvbHlldGh5bGVuZSAoSERQRSkjMTMuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjAuMTguMDAjTG93IGRlbnNpdHkgcG9seWV0aHlsZW5lIChMRFBFKSMxMy4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMC4xOS4wMCNNZWRpdW0gZGVuc2l0eSBwb2x5ZXRoeWxlbmUgKE1EUEUpIzEzLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIwLjIwLjAwI1BvbHlldGh5bGVuZSB0ZXJlcHRoYWxhdGUgKFBFVCkjMTMuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjAuMjEuMDAjUG9seWltaWRlIChQSSkjMTMuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjAuMjIuMDAjUG9seXByb3B5bGVuZSAoUFApIzEzLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIwLjIzLjAwI1BvbHlwaHRoYWxhbWlkZSAoUFBBKSMxMy4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMC4yNC4wMCNQb2x5dGhlbnlsZW5lIG94aWRlIChQUE8pIzEzLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIwLjI1LjAwI1BvbHlwaGVueWxlbmUgc3VsZmlkZSAoUFBTKSMxMy4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMC4yNi4wMCNQb2x5c3R5cmVuZSAoUFMpIzEzLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIwLjI3LjAwI0hpZ2ggaW1wYWN0IHBvbHlzdHlyZW5lIChISVBTKSMxMy4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMC4yOC4wMCNQb2x5c3VsZm9uZSAoUFNVKSMxMy4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMC4yOS4wMCNSaWdpZCB0aGVybW9wbGFzdGljIHBvbHl1cmV0aGFuZSAoUlBUVSkjMTMuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjAuMzAuMDAjUG9seXZpbnlsIGNobG9yaWRlIChQVkMpIzEzLjEwLjIwLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIwLjMxLjAwI1N0eXJlbmUgYWNyeWxvbml0cmlsZSAoU0FOKSMxMy4xMC4yMC4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMS4wMC4wMCNSZXNpbnMjMTMuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjEuMDEuMDAjUGxhc3RpYyByZXNpbnMjMTMuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjEuMDIuMDAjSW5kZW5lIHJlc2lucyMxMy4xMC4yMS4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMS4wMy4wMCNVcmVhIHJlc2lucyMxMy4xMC4yMS4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMS4wNC4wMCNQaGVub2xpYyByZXNpbnMjMTMuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjEuMDUuMDAjVGhlcm1vcGxhc3RpYyByZXNpbnMjMTMuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjEuMDYuMDAjQWxreWQgcmVzaW5zIzEzLjEwLjIxLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIxLjA3LjAwI01lbGFtaW5lIHJlc2lucyMxMy4xMC4yMS4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMS4wOC4wMCNQb2x5YWNldGFsIHJlc2lucyMxMy4xMC4yMS4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMS4wOS4wMCNQb2x5YW1pZGUgcmVzaW5zIzEzLjEwLjIxLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIxLjEwLjAwI1BvbHljYXJib25hdGUgcmVzaW5zIzEzLjEwLjIxLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIxLjExLjAwI1BvbHlldGh5bGVuZSB0ZXJlcGh0aGFsYXRlIHJlc2lucyMxMy4xMC4yMS4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMS4xMi4wMCNQb2x5ZXRoZXIgcmVzaW5zIzEzLjEwLjIxLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIxLjEzLjAwI0FsbHlsIHJlc2lucyMxMy4xMC4yMS4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMS4xNC4wMCNQb2x5dXJldGhhbmUgcmVzaW5zIzEzLjEwLjIxLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIxLjE1LjAwI0Vwb3h5IHJlc2lucyMxMy4xMC4yMS4wMC4wMAotdW5zcHNjNyMxMy4xMC4yMS4xNi4wMCNQZXRyb2xldW0gcmVzaW5zIzEzLjEwLjIxLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIyLjAwLjAwI1BsYXN0aWMgZmlsbXMjMTMuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMTMuMTAuMjIuMDEuMDAjUG9seXVyZXRoYW5lIGZpbG1zIzEzLjEwLjIyLjAwLjAwCi11bnNwc2M3IzEzLjEwLjIyLjAyLjAwI1NpbGljb25lIGNvYXRlZCBmaWxtcyMxMy4xMC4yMi4wMC4wMAotdW5zcHNjNyMxMy4xMS4wMC4wMC4wMCNSZXNpbnMgYW5kIHJvc2lucyBhbmQgb3RoZXIgcmVzaW4gZGVyaXZlZCBtYXRlcmlhbHMjMTMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuMDAuMDAjUmVzaW5zIzEzLjExLjAwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjAxLjAwI0Vwb3h5IzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjAyLjAwI1BoZW5vbGljIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjAzLjAwI1Vuc2F0dXJhdGVkIHBvbHllc3RlciMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4wNC4wMCNBY3J5bG9uaXRyaWxlIGJ1dGFkaWVuZSBzdHlyZW5lIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjA1LjAwI0Fjcnlsb25pdHJpbGUgc3R5cmVuZSBhY3J5bGljIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjA2LjAwI0Fjcnlsb25pdHJpbGUgc3R5cmVuZSBhY3J5bGljIGFsbG95cyMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4wNy4wMCNGbHVvcm9wb2x5bWVycyMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4wOC4wMCNFdGh5bGVuZSB2aW55bCBhY2V0YXRlIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjA5LjAwI0xpcXVpZCBjcnlzdGFsIHBvbHltZXIjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuMTAuMDAjTnlsb24jMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuMTEuMDAjUG9seWJ1dHlsZW5lIHRlcmVwdGhhdGxhdGUjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuMTIuMDAjUG9seWNhcmJvbmF0ZSMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4xMy4wMCNQb2x5ZXRoZXJldGhlcmtldG9uZSMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4xNC4wMCNQb2x5ZXRoZXJpbWlkZSMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4xNS4wMCNQb2x5ZXRoZXJzdWxmb25lIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjE2LjAwI1BvbHlldGh5bGVuZSMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4xNy4wMCNQb2x5ZXRoeWxlbmUgdGVycHRoYWxhdGUjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuMTguMDAjUG9seWltaWRlIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjE5LjAwI1BvbHlwcm9weWxlbmUjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuMjAuMDAjUG9seXBodGhhbGFtaWRlIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjIxLjAwI1BvbHlldGh5bGVuZSBveGlkZSMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4yMi4wMCNQb2x5cGhlbnlsZW5lIHN1bGZpZGUjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuMjMuMDAjUG9seXN0eXJlbmUjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuMjQuMDAjUG9seXN1bGZvbmUjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuMjUuMDAjUG9seXZpbnlsIGNobG9yaWRlIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjI2LjAwI1N0eXJlbmUgYWNyeWxvbml0cmlsZSMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4yNy4wMCNVcmVhIGZvcm1hbGRlaHlkZSMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4yOC4wMCNBbGt5ZCMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4yOS4wMCNNZWxhbWluZSBmb3JtYWxkZWh5ZGUjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuMzAuMDAjUG9seWFjZXRhbCMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4zMS4wMCNQb2x5YW1pZGUjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuMzIuMDAjQWxseWwjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuMzMuMDAjRXRoeWxlbmUgYWNyeWxpYyBhY2lkIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjM0LjAwI1BvbHl2aW55bCBjaGxvcmlkZSBjb21wb3VuZCMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4zNS4wMCNTb2x1dGlvbiB2aW55bCMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC4zNi4wMCNQaGVub3h5IzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjM3LjAwI0NvbXBvdW5kZWQgcmVzaW5zIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjM4LjAwI1BvbHl2aW5seSBweXJvbGlkaW5lIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjM5LjAwI1BvbHlldGh5bGVuZSB0ZXJlcGh0aGFsYXRlIG9yIGdseWNvbCBtb2RpZmllZCMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC40MC4wMCNIeWRyb2NhcmJvbiB0YWNraWZpZXIjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuNDEuMDAjUG9seWNhcmJvbmF0ZSBibGVuZHMjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuNDIuMDAjUG9seXZpbnlsIGFsY29ob2wjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuNDMuMDAjUG9seXZpbnlsIGJ1dHlyYWwjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuNDQuMDAjUG9seWVzdGVyIG1vbGRpbmcgY29tcG91bmRzIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjQ1LjAwI1BvbHl2aW55bCBhY2V0YXRlIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjQ2LjAwI1BvbHl2aW55bCBldGhlciMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC40Ny4wMCNQb2x5dmlueWwgZm9ybWFsIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjQ4LjAwI1N0eXJlbmUgYWNyeWxpYyMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC40OS4wMCNFdGh5bGVuZSBwcm9weWxlbmUgcG9seW1lcnMjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuNTAuMDAjUG9seXByb3B5bGVuZSBveGlkZSMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC41MS4wMCNQb2x5cHJvcHlsZW5lIGV0aGVyIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjUyLjAwI1BvbHlwcm9weWxlbmUgc3VsZm9uZSMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC41My4wMCNQb2x5bWV0aHlsYWNyeWxhdGUjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuNTQuMDAjU3R5cmVuZSBtYWxlaWMgYW5oeWRyaWRlIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjU1LjAwI1N5bmRpb3RhdGljIHBvbHlzdHlyZW5lIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjU2LjAwI0NobG9yaW5hdGVkIHBvbHl2aW55bCBjaGxvcmlkZSMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC41Ny4wMCNUaGVybW9wbGFzdGljIHBvbHllc3RlciMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC41OC4wMCNJbmRlbmUgcmVzaW5zIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjU5LjAwI1BsYXN0aWMgcmVzaW5zIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjEwLjYwLjAwI1BldHJvbGV1bSByZXNpbnMjMTMuMTEuMTAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTAuNjEuMDAjUG9seXVyZXRoYW5lIHJlc2lucyMxMy4xMS4xMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMC42Mi4wMCNQb2x5ZXRoZXIgcmVzaW5zIzEzLjExLjEwLjAwLjAwCi11bnNwc2M3IzEzLjExLjExLjAwLjAwI1Jvc2lucyMxMy4xMS4wMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMS4wMS4wMCNXb29kIHJvc2luIzEzLjExLjExLjAwLjAwCi11bnNwc2M3IzEzLjExLjExLjAyLjAwI0d1bSByb3NpbiMxMy4xMS4xMS4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMS4wMy4wMCNUYWxsIG9pbCByb3NpbiMxMy4xMS4xMS4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMi4wMC4wMCNGaWxtcyMxMy4xMS4wMC4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMi4wMS4wMCNQb2x5ZXRoeWxlbmUgZmlsbXMjMTMuMTEuMTIuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTIuMDIuMDAjUG9seXVyZXRoYW5lIGZpbG1zIzEzLjExLjEyLjAwLjAwCi11bnNwc2M3IzEzLjExLjEyLjAzLjAwI0FjZXRhdGUgZmlsbXMjMTMuMTEuMTIuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTIuMDQuMDAjQWNyeWxpYyBmaWxtcyMxMy4xMS4xMi4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMi4wNS4wMCNDb2V4dHJ1ZGVkIGZpbG1zIzEzLjExLjEyLjAwLjAwCi11bnNwc2M3IzEzLjExLjEyLjA2LjAwI0Zsb3Vyb3BvbHltZXIgZmlsbXMjMTMuMTEuMTIuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTIuMDcuMDAjTWV0YWxpemVkIGZpbG1zIzEzLjExLjEyLjAwLjAwCi11bnNwc2M3IzEzLjExLjEyLjA4LjAwI055bG9uIGZpbG1zIzEzLjExLjEyLjAwLjAwCi11bnNwc2M3IzEzLjExLjEyLjA5LjAwI1BvbHljYXJib25hdGUgZmlsbXMjMTMuMTEuMTIuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTIuMTAuMDAjUG9seWVzdGVyIGZpbG1zIzEzLjExLjEyLjAwLjAwCi11bnNwc2M3IzEzLjExLjEyLjExLjAwI1BvbHlwcm9weWxlbmUgZmlsbXMjMTMuMTEuMTIuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTIuMTIuMDAjQmlheGlhbGx5IG9yaWVudGF0ZWQgcG9seXByb3B5bGVuZSMxMy4xMS4xMi4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMi4xMy4wMCNQb2x5bWlkZSBmaWxtcyMxMy4xMS4xMi4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMi4xNC4wMCNQb2x5c3R5cmVuZSBmaWxtcyMxMy4xMS4xMi4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMi4xNS4wMCNGbGV4aWJsZSBwb2x5dmlueWwgY2hsb3JpZGUgZmlsbSMxMy4xMS4xMi4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMi4xNi4wMCNSaWdpZCBwb2x5dmlueWwgY2hsb3JpZGUgZmlsbSMxMy4xMS4xMi4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMi4xNy4wMCNFdGh5bGVuZSB2aW55bCBhbGNvaG9sIGZpbG0jMTMuMTEuMTIuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTIuMTguMDAjUG9seXZpbnlsaWRlbmUgY2hsb3JpZGUjMTMuMTEuMTIuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTIuMTkuMDAjUG9seXZpbnlsIGFsY29ob2wgZmlsbXMjMTMuMTEuMTIuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTMuMDAuMDAjRm9hbXMjMTMuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTMuMDEuMDAjUG9seW9sZWZpbiBmb2FtIzEzLjExLjEzLjAwLjAwCi11bnNwc2M3IzEzLjExLjEzLjAyLjAwI1BvbHlldGhlciBmb2FtIzEzLjExLjEzLjAwLjAwCi11bnNwc2M3IzEzLjExLjEzLjAzLjAwI1NpbGljb25lIGZvYW0jMTMuMTEuMTMuMDAuMDAKLXVuc3BzYzcjMTMuMTEuMTMuMDQuMDAjRXRoeWxlbmUgcHJvcHlsZW5lIHRlcnBvbHltZXIgZm9hbSMxMy4xMS4xMy4wMC4wMAotdW5zcHNjNyMxMy4xMS4xMy4wNS4wMCNOZW9wcmVuZSBmb2FtIzEzLjExLjEzLjAwLjAwCi11bnNwc2M3IzEzLjExLjEzLjA2LjAwI1BvbHl2aW55bCBjaGxvcmlkZSBmb2FtIzEzLjExLjEzLjAwLjAwCi11bnNwc2M3IzEzLjExLjEzLjA3LjAwI1J1YmJlciBmb2FtIzEzLjExLjEzLjAwLjAwCi11bnNwc2M3IzEzLjExLjEzLjA4LjAwI1BvbHlzdHlyZW5lIGZvYW0jMTMuMTEuMTMuMDAuMDAKLXVuc3BzYzcjMTQuMDAuMDAuMDAuMDAjUGFwZXIgTWF0ZXJpYWxzIGFuZCBQcm9kdWN0cyMxNC4wMC4wMC4wMC4wMAotdW5zcHNjNyMxNC4xMC4wMC4wMC4wMCNQYXBlciBtYXRlcmlhbHMjMTQuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTQuMTAuMTUuMDAuMDAjUmF3IG1hdGVyaWFscyMxNC4xMC4wMC4wMC4wMAotdW5zcHNjNyMxNC4xMC4xNS4wMS4wMCNQYXBlciBwdWxwIzE0LjEwLjE1LjAwLjAwCi11bnNwc2M3IzE0LjExLjAwLjAwLjAwI1BhcGVyIHByb2R1Y3RzIzE0LjAwLjAwLjAwLjAwCi11bnNwc2M3IzE0LjExLjE1LjAwLjAwI1ByaW50aW5nIGFuZCB3cml0aW5nIHBhcGVyIzE0LjExLjAwLjAwLjAwCi11bnNwc2M3IzE0LjExLjE1LjAxLjAwI09uaW9uIHNraW4gcGFwZXIjMTQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTUuMDIuMDAjVmVsbHVtIHBhcGVyIzE0LjExLjE1LjAwLjAwCi11bnNwc2M3IzE0LjExLjE1LjAzLjAwI1BhcmNobWVudCBwYXBlciMxNC4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNS4wNC4wMCNUcmFjdG9yIGZlZWQgcGFwZXIjMTQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTUuMDUuMDAjTWltZW9ncmFwaCBwYXBlciMxNC4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNS4wNi4wMCNDb21wdXRlciBwcmludG91dCBwYXBlciMxNC4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNS4wNy4wMCNQcmludGVyIG9yIGNvcGllciBwYXBlciMxNC4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNS4wOC4wMCNGYWNzaW1pbGUgcGFwZXIjMTQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTUuMDkuMDAjU3RhdGlvbmVyeSMxNC4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNS4xMC4wMCNQbG90dGVyIHBhcGVyIzE0LjExLjE1LjAwLjAwCi11bnNwc2M3IzE0LjExLjE1LjExLjAwI1dyaXRpbmcgcGFwZXIjMTQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTUuMTIuMDAjR3JhcGggcGFwZXIjMTQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTUuMTMuMDAjTGVkZ2VyIHBhcGVyIzE0LjExLjE1LjAwLjAwCi11bnNwc2M3IzE0LjExLjE1LjE0LjAwI1BhcGVyIHBhZHMgb3Igbm90ZWJvb2tzIzE0LjExLjE1LjAwLjAwCi11bnNwc2M3IzE0LjExLjE1LjE1LjAwI0NhbGN1bGF0b3Igb3IgY2FzaCByZWdpc3RlciBwYXBlciMxNC4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNS4xNi4wMCNOb3RlYm9vayBmaWxsZXIgcGFwZXIjMTQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTUuMTcuMDAjQnVzaW5lc3MgZm9ybXMjMTQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTUuMTguMDAjSW5kZXggY2FyZHMjMTQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTUuMTkuMDAjQ2FyZHN0b2NrIHBhcGVycyMxNC4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNS4yMC4wMCNCbG90dGVyIHBhcGVyIzE0LjExLjE1LjAwLjAwCi11bnNwc2M3IzE0LjExLjE1LjIxLjAwI0xhc2VyIHBhcGVyIzE0LjExLjE1LjAwLjAwCi11bnNwc2M3IzE0LjExLjE1LjIyLjAwI0lua2pldCBwYXBlciMxNC4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNS4yMy4wMCNUcmFjaW5nIHBhcGVyIzE0LjExLjE1LjAwLjAwCi11bnNwc2M3IzE0LjExLjE1LjI0LjAwI0Zvb2xzY2FwIHNoZWV0cyMxNC4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNS4yNS4wMCNNdWx0aXB1cnBvc2UgcGFwZXIjMTQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTUuMjYuMDAjVGVsZXBob25lIG1lc3NhZ2UgcGFkcyBvciBib29rcyMxNC4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNS4yOC4wMCNNYWduZXQgcGFwZXIjMTQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTUuMjkuMDAjVGVsZXggcm9sbHMjMTQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTUuMzAuMDAjU2VsZiBhZGhlc2l2ZSBub3RlIHBhcGVyIzE0LjExLjE1LjAwLjAwCi11bnNwc2M3IzE0LjExLjE2LjAwLjAwI05vdmVsdHkgcGFwZXIjMTQuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTYuMDEuMDAjR2lmdCB3cmFwcGluZyBwYXBlciBvciBiYWdzIG9yIGJveGVzIzE0LjExLjE2LjAwLjAwCi11bnNwc2M3IzE0LjExLjE2LjA0LjAwI0J1c2luZXNzIGNhcmRzIzE0LjExLjE2LjAwLjAwCi11bnNwc2M3IzE0LjExLjE2LjA1LjAwI0dyZWV0aW5nIG9yIG5vdGUgb3IgcG9zdCBjYXJkcyMxNC4xMS4xNi4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNi4wNi4wMCNBcnQgb3IgY3JhZnQgcGFwZXIjMTQuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTYuMDcuMDAjUG9zdGVyIGJvYXJkcyMxNC4xMS4xNi4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNi4wOC4wMCNHaWZ0IGNlcnRpZmljYXRlIzE0LjExLjE2LjAwLjAwCi11bnNwc2M3IzE0LjExLjE2LjA5LjAwI0NvdmVyIHBhcGVyIzE0LjExLjE2LjAwLjAwCi11bnNwc2M3IzE0LjExLjE3LjAwLjAwI1BlcnNvbmFsIHBhcGVyIHByb2R1Y3RzIzE0LjExLjAwLjAwLjAwCi11bnNwc2M3IzE0LjExLjE3LjAxLjAwI0ZhY2lhbCB0aXNzdWVzIzE0LjExLjE3LjAwLjAwCi11bnNwc2M3IzE0LjExLjE3LjAyLjAwI1RvaWxldCBzZWF0IGNvdmVycyMxNC4xMS4xNy4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNy4wMy4wMCNQYXBlciB0b3dlbHMjMTQuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTcuMDQuMDAjVG9pbGV0IHRpc3N1ZSMxNC4xMS4xNy4wMC4wMAotdW5zcHNjNyMxNC4xMS4xNy4wNS4wMCNQYXBlciBuYXBraW5zIG9yIHNlcnZpZXR0ZXMjMTQuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTcuMDYuMDAjUGFwZXIgdGFibGUgY2xvdGgjMTQuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTguMDAuMDAjQnVzaW5lc3MgdXNlIHBhcGVycyMxNC4xMS4wMC4wMC4wMAotdW5zcHNjNyMxNC4xMS4xOC4wMS4wMCNUaWNrZXRzIG9yIHRpY2tldCByb2xscyMxNC4xMS4xOC4wMC4wMAotdW5zcHNjNyMxNC4xMS4xOC4wMi4wMCNSZWNlaXB0cyBvciByZWNlaXB0IGJvb2tzIzE0LjExLjE4LjAwLjAwCi11bnNwc2M3IzE0LjExLjE4LjAzLjAwI1ZvdWNoZXJzIzE0LjExLjE4LjAwLjAwCi11bnNwc2M3IzE0LjExLjE4LjA0LjAwI0JpbGxzIG9yIGJpbGwgYm9va3MjMTQuMTEuMTguMDAuMDAKLXVuc3BzYzcjMTQuMTEuMTguMDUuMDAjQ2hlY2tzIG9yIGNoZWNrIGJvb2tzIzE0LjExLjE4LjAwLjAwCi11bnNwc2M3IzE0LjEyLjAwLjAwLjAwI0luZHVzdHJpYWwgdXNlIHBhcGVycyMxNC4wMC4wMC4wMC4wMAotdW5zcHNjNyMxNC4xMi4xNS4wMC4wMCNQYXBlcmJvYXJkIGFuZCBwYWNrYWdpbmcgcGFwZXJzIzE0LjEyLjAwLjAwLjAwCi11bnNwc2M3IzE0LjEyLjE1LjAxLjAwI0JsZWFjaGVkIHBhcGVyYm9hcmQjMTQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMTQuMTIuMTUuMDIuMDAjVW5ibGVhY2hlZCBwYXBlcmJvYXJkIzE0LjEyLjE1LjAwLjAwCi11bnNwc2M3IzE0LjEyLjE1LjAzLjAwI0NhcmRib2FyZCMxNC4xMi4xNS4wMC4wMAotdW5zcHNjNyMxNC4xMi4xNS4wNC4wMCNQYWNrYWdpbmcgcGFwZXIjMTQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMTQuMTIuMTYuMDAuMDAjVGlzc3VlIHBhcGVycyMxNC4xMi4wMC4wMC4wMAotdW5zcHNjNyMxNC4xMi4xNi4wMS4wMCNVbmJsZWFjaGVkIGNyZXBlIHBhcGVycyMxNC4xMi4xNi4wMC4wMAotdW5zcHNjNyMxNC4xMi4xNi4wMi4wMCNTZW1pIGJsZWFjaGVkIGNyZXBlIHBhcGVycyMxNC4xMi4xNi4wMC4wMAotdW5zcHNjNyMxNC4xMi4xNi4wMy4wMCNXZXQgc3RyZW5ndGggdGlzc3VlIHBhcGVycyMxNC4xMi4xNi4wMC4wMAotdW5zcHNjNyMxNC4xMi4xNi4wNC4wMCNBY2lkIGZyZWUgdGlzc3VlIHBhcGVycyMxNC4xMi4xNi4wMC4wMAotdW5zcHNjNyMxNC4xMi4xNi4wNS4wMCNLcmFmdCB0aXNzdWUgcGFwZXIjMTQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMTQuMTIuMTcuMDAuMDAjTGFtaW5hdGVkIHBhcGVycyMxNC4xMi4wMC4wMC4wMAotdW5zcHNjNyMxNC4xMi4xNy4wMS4wMCNQYXBlcnMgYm9uZGVkIHdpdGggZmlsbSMxNC4xMi4xNy4wMC4wMAotdW5zcHNjNyMxNC4xMi4xNy4wMi4wMCNDeWxpbmRlciBwYXBlcnMgb3IgbXVsdGkgbGF5ZXIgaGVhdnl3ZWlnaHQgcGFwZXIjMTQuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMTQuMTIuMTguMDAuMDAjQ29hdGVkIHBhcGVycyMxNC4xMi4wMC4wMC4wMAotdW5zcHNjNyMxNC4xMi4xOC4wMS4wMCNDbGF5IGNvYXRlZCBwYXBlcnMjMTQuMTIuMTguMDAuMDAKLXVuc3BzYzcjMTQuMTIuMTguMDIuMDAjUG9seWV0aHlsZW5lIGNvYXRlZCBwYXBlcnMjMTQuMTIuMTguMDAuMDAKLXVuc3BzYzcjMTQuMTIuMTguMDMuMDAjUG9seWVzdGVyIGNvYXRlZCBwYXBlcnMjMTQuMTIuMTguMDAuMDAKLXVuc3BzYzcjMTQuMTIuMTguMDQuMDAjU2lsaWNvbmUgY29hdGVkIHBhcGVycyMxNC4xMi4xOC4wMC4wMAotdW5zcHNjNyMxNC4xMi4xOC4wNS4wMCNMYXRleCB0cmVhdGVkIGNvYXRlZCBwYXBlciMxNC4xMi4xOC4wMC4wMAotdW5zcHNjNyMxNC4xMi4xOC4wNi4wMCNXYXhlZCBwYXBlciMxNC4xMi4xOC4wMC4wMAotdW5zcHNjNyMxNC4xMi4xOC4wNy4wMCNCdXRjaGVyIHBhcGVycyMxNC4xMi4xOC4wMC4wMAotdW5zcHNjNyMxNC4xMi4xOC4wOC4wMCNGcmVlemVyIHBhcGVyIzE0LjEyLjE4LjAwLjAwCi11bnNwc2M3IzE0LjEyLjE4LjA5LjAwI01hc2tpbmcgcGFwZXIjMTQuMTIuMTguMDAuMDAKLXVuc3BzYzcjMTQuMTIuMTguMTAuMDAjQ2FyYm9uIHBhcGVycyMxNC4xMi4xOC4wMC4wMAotdW5zcHNjNyMxNC4xMi4xOS4wMC4wMCNOZXdzcHJpbnQgYW5kIG9mZnNldCBwYXBlcnMjMTQuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMTQuMTIuMTkuMDEuMDAjU3RhbmRhcmQgbmV3c3ByaW50IzE0LjEyLjE5LjAwLjAwCi11bnNwc2M3IzE0LjEyLjE5LjAyLjAwI0NvbG9yZWQgbmV3c3ByaW50IzE0LjEyLjE5LjAwLjAwCi11bnNwc2M3IzE0LjEyLjE5LjAzLjAwI0hpZ2ggYnJpZ2h0bmVzcyBuZXdzcHJpbnQjMTQuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMTQuMTIuMTkuMDQuMDAjT2Zmc2V0IHBhcGVyIzE0LjEyLjE5LjAwLjAwCi11bnNwc2M3IzE0LjEyLjIwLjAwLjAwI1NwZWNpYWx0eSBjb2F0ZWQgcGFwZXJzIzE0LjEyLjAwLjAwLjAwCi11bnNwc2M3IzE0LjEyLjIwLjAxLjAwI0J1dGNoZXIgcGFwZXJzIzE0LjEyLjIwLjAwLjAwCi11bnNwc2M3IzE0LjEyLjIwLjAyLjAwI0ZyZWV6ZXIgcGFwZXIjMTQuMTIuMjAuMDAuMDAKLXVuc3BzYzcjMTQuMTIuMjEuMDAuMDAjVW5jb2F0ZWQgYmFzZSBwYXBlcnMjMTQuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMTQuMTIuMjEuMDEuMDAjU3VwZXIgY2FsZW5kYXJlZCBrcmFmdCBwYXBlciMxNC4xMi4yMS4wMC4wMAotdW5zcHNjNyMxNC4xMi4yMS4wMi4wMCNNYWNoaW5lIGZpbmlzaGVkIG9yIGdsYXplZCBrcmFmdCBwYXBlciMxNC4xMi4yMS4wMC4wMAotdW5zcHNjNyMxNC4xMi4yMS4wMy4wMCNOb24gdHJlYXRlZCB1bmNvYXRlZCBwYXBlciMxNC4xMi4yMS4wMC4wMAotdW5zcHNjNyMxNC4xMi4yMS4wNC4wMCNOb24gdHJlYXRlZCBjcmVwZSBwYXBlciMxNC4xMi4yMS4wMC4wMAotdW5zcHNjNyMxNC4xMi4yMS4wNS4wMCNMYXRleCB0cmVhdGVkIGNyZXBlIHBhcGVyIzE0LjEyLjIxLjAwLjAwCi11bnNwc2M3IzE0LjEyLjIxLjA2LjAwI0xhdGV4IHRyZWF0ZWQgdW5jb2F0ZWQgcGFwZXIjMTQuMTIuMjEuMDAuMDAKLXVuc3BzYzcjMTUuMDAuMDAuMDAuMDAjRnVlbHMgYW5kIEZ1ZWwgQWRkaXRpdmVzIGFuZCBMdWJyaWNhbnRzIGFuZCBBbnRpIGNvcnJvc2l2ZSBNYXRlcmlhbHMjMTUuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTUuMTAuMDAuMDAuMDAjRnVlbHMjMTUuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTUuMTAuMTUuMDAuMDAjUGV0cm9sZXVtIGFuZCBkaXN0aWxsYXRlcyMxNS4xMC4wMC4wMC4wMAotdW5zcHNjNyMxNS4xMC4xNS4wMS4wMCNGdWVsIG9pbCMxNS4xMC4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMC4xNS4wMi4wMCNLZXJvc2VuZSMxNS4xMC4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMC4xNS4wMy4wMCNOYXBodGhhIzE1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzE1LjEwLjE1LjA0LjAwI0F2aWF0aW9uIGZ1ZWwjMTUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTUuMTAuMTUuMDUuMDAjRGllc2VsIGZ1ZWwjMTUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTUuMTAuMTUuMDYuMDAjR2Fzb2xpbmUjMTUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMTUuMTAuMTUuMDcuMDAjUGV0cm9sIzE1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzE1LjEwLjE1LjA4LjAwI0NydWRlIG9pbCMxNS4xMC4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMC4xNS4wOS4wMCNNYXJpbmUgZnVlbCMxNS4xMC4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMC4xNS4xMC4wMCNDb25kZW5zYXRlIzE1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzE1LjEwLjE2LjAwLjAwI0NvYWwgYW5kIGxpZ25pdGUgYW5kIHBlYXQjMTUuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMTUuMTAuMTYuMDEuMDAjQ29hbCMxNS4xMC4xNi4wMC4wMAotdW5zcHNjNyMxNS4xMC4xNi4wMi4wMCNMaWduaXRlIzE1LjEwLjE2LjAwLjAwCi11bnNwc2M3IzE1LjEwLjE2LjAzLjAwI1BlYXQjMTUuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMTUuMTAuMTYuMDQuMDAjQ29rZSMxNS4xMC4xNi4wMC4wMAotdW5zcHNjNyMxNS4xMC4xNi4wNS4wMCNDaGFyY29hbCMxNS4xMC4xNi4wMC4wMAotdW5zcHNjNyMxNS4xMS4wMC4wMC4wMCNHYXNlb3VzIGZ1ZWxzIGFuZCBhZGRpdGl2ZXMjMTUuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMTUuMTEuMTUuMDAuMDAjR2FzZW91cyBmdWVscyMxNS4xMS4wMC4wMC4wMAotdW5zcHNjNyMxNS4xMS4xNS4wMS4wMCNQcm9wYW5lIzE1LjExLjE1LjAwLjAwCi11bnNwc2M3IzE1LjExLjE1LjAyLjAwI01ldGhhbmUjMTUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTUuMTEuMTUuMDMuMDAjUHJvcHlsZW5lIzE1LjExLjE1LjAwLjAwCi11bnNwc2M3IzE1LjExLjE1LjA0LjAwI0V0aHlsZW5lIzE1LjExLjE1LjAwLjAwCi11bnNwc2M3IzE1LjExLjE1LjA1LjAwI0J1dGFuZSMxNS4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMS4xNS4wNi4wMCNBY2V0eWxlbmUjMTUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMTUuMTEuMTUuMDcuMDAjV2F0ZXIgZ2FzIG9yIHByb2R1Y2VyIGdhcyMxNS4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMS4xNS4wOC4wMCNDb2FsIGdhcyMxNS4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMS4xNS4wOS4wMCNMaXF1aWZpZWQgcGV0cm9sZXVtIGdhcyMxNS4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMS4xNS4xMC4wMCNGdWVsIGFkZGl0aXZlcyMxNS4xMS4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMS4xNi4wMC4wMCNGdWVsIGFkZGl0aXZlcyMxNS4xMS4wMC4wMC4wMAotdW5zcHNjNyMxNS4xMS4xNi4wMS4wMCNFdGhhbm9sIzE1LjExLjE2LjAwLjAwCi11bnNwc2M3IzE1LjExLjE2LjAyLjAwI01ldGhhbm9sIzE1LjExLjE2LjAwLjAwCi11bnNwc2M3IzE1LjEyLjAwLjAwLjAwI0x1YnJpY2FudHMgYW5kIG9pbHMgYW5kIGdyZWFzZXMgYW5kIGFudGkgY29ycm9zaXZlcyMxNS4wMC4wMC4wMC4wMAotdW5zcHNjNyMxNS4xMi4xNS4wMC4wMCNMdWJyaWNhdGluZyBwcmVwYXJhdGlvbnMjMTUuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMTUuMTIuMTUuMDEuMDAjRW5naW5lIG9pbCMxNS4xMi4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMi4xNS4wMi4wMCNDdXR0aW5nIG9pbCMxNS4xMi4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMi4xNS4wMy4wMCNHZWFyIG9pbCMxNS4xMi4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMi4xNS4wNC4wMCNIeWRyYXVsaWMgb2lsIzE1LjEyLjE1LjAwLjAwCi11bnNwc2M3IzE1LjEyLjE1LjA1LjAwI1RyYW5zZm9ybWVyIG9pbCMxNS4xMi4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMi4xNS4wNy4wMCNMaXRoaXVtIGdyZWFzZSMxNS4xMi4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMi4xNS4wOC4wMCNUcmFuc21pc3Npb24gb2lsIzE1LjEyLjE1LjAwLjAwCi11bnNwc2M3IzE1LjEyLjE1LjA5LjAwI0JyYWtlIG9pbCMxNS4xMi4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMi4xNS4xMC4wMCNBbnRpZ2FsbGluZyMxNS4xMi4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMi4xNS4xMS4wMCNBc3NlbWJseSBwYXN0ZXMjMTUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMTUuMTIuMTUuMTIuMDAjQW50aSBhZGhlc2l2ZXMjMTUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMTUuMTIuMTUuMTMuMDAjR3JhcGhpdGUgbHVicmljYW50cyMxNS4xMi4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMi4xNS4xNC4wMCNTcHJheSBsdWJyaWNhbnRzIzE1LjEyLjE1LjAwLjAwCi11bnNwc2M3IzE1LjEyLjE1LjE1LjAwI0FudGkgc2VpemUgb3IgYW50aSBzdGFpbiBjb21wb3VuZHMjMTUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMTUuMTIuMTUuMTYuMDAjTGVhayBzdG9wIzE1LjEyLjE1LjAwLjAwCi11bnNwc2M3IzE1LjEyLjE2LjAwLjAwI1dheGVzIzE1LjEyLjAwLjAwLjAwCi11bnNwc2M3IzE1LjEyLjE2LjAxLjAwI1BhcmFmZmluIHdheCMxNS4xMi4xNi4wMC4wMAotdW5zcHNjNyMxNS4xMi4xNi4wMi4wMCNTZWFsaW5nIHdheCMxNS4xMi4xNi4wMC4wMAotdW5zcHNjNyMxNS4xMi4xNi4wMy4wMCNPbGVmaW4gd2F4IzE1LjEyLjE2LjAwLjAwCi11bnNwc2M3IzE1LjEyLjE3LjAwLjAwI1NwZWNpYWx0eSBsdWJyaWNhbnRzIzE1LjEyLjAwLjAwLjAwCi11bnNwc2M3IzE1LjEyLjE3LjAxLjAwI1BldHJvbGF0dW0jMTUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMTUuMTIuMTguMDAuMDAjQW50aSBjb3Jyb3NpdmVzIzE1LjEyLjAwLjAwLjAwCi11bnNwc2M3IzE1LjEyLjE4LjAxLjAwI01vaXN0dXJlIHJlcGVsbGVudCMxNS4xMi4xOC4wMC4wMAotdW5zcHNjNyMxNS4xMi4xOC4wMi4wMCNBbnRpIGNvcnJvc2lvbiBsdWJyaWNhbnQjMTUuMTIuMTguMDAuMDAKLXVuc3BzYzcjMTUuMTIuMTguMDMuMDAjUnVzdCByZW1vdmVyIzE1LjEyLjE4LjAwLjAwCi11bnNwc2M3IzE1LjEyLjE4LjA0LjAwI1J1c3QgcHJvb2ZpbmcgcHJlcGFyYXRpb24jMTUuMTIuMTguMDAuMDAKLXVuc3BzYzcjMTUuMTIuMTguMDUuMDAjQW50aSB3ZWxkIHBhc3RlcyMxNS4xMi4xOC4wMC4wMAotdW5zcHNjNyMxNS4xMi4xOS4wMC4wMCNHcmVhc2VzIzE1LjEyLjAwLjAwLjAwCi11bnNwc2M3IzE1LjEyLjE5LjAxLjAwI1NpbGljb25lIGdyZWFzZSMxNS4xMi4xOS4wMC4wMAotdW5zcHNjNyMxNS4xMi4xOS4wMi4wMCNHcmVhc2UjMTUuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMTUuMTIuMTkuMDMuMDAjVGVmbG9uIGdyZWFzZSMxNS4xMi4xOS4wMC4wMAotdW5zcHNjNyMxNS4xMi4xOS4wNC4wMCNXb29sIGdyZWFzZSMxNS4xMi4xOS4wMC4wMAotdW5zcHNjNyMxNS4xMy4wMC4wMC4wMCNGdWVsIGZvciBudWNsZWFyIHJlYWN0b3JzIzE1LjAwLjAwLjAwLjAwCi11bnNwc2M3IzE1LjEzLjE1LjAwLjAwI051Y2xlYXIgZnVlbCMxNS4xMy4wMC4wMC4wMAotdW5zcHNjNyMxNS4xMy4xNS4wMi4wMCNEZXBsZXRlZCB1cmFuaXVtIzE1LjEzLjE1LjAwLjAwCi11bnNwc2M3IzE1LjEzLjE1LjAzLjAwI0VucmljaGVkIHVyYW5pdW0jMTUuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMTUuMTMuMTUuMDQuMDAjSXJpZGl1bSMxNS4xMy4xNS4wMC4wMAotdW5zcHNjNyMxNS4xMy4xNS4wNS4wMCNFbnJpY2hlZCBwbHV0b25pdW0jMTUuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMTUuMTMuMTUuMDYuMDAjRGVwbGV0ZWQgcGx1dG9uaXVtIzE1LjEzLjE1LjAwLjAwCi11bnNwc2M3IzE1LjEzLjE2LjAwLjAwI0Zpc3Npb24gZnVlbCBhc3NlbWJsaWVzIzE1LjEzLjAwLjAwLjAwCi11bnNwc2M3IzE1LjEzLjE2LjAxLjAwI051Y2xlYXIgZnVlbCByb2QjMTUuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMjAuMDAuMDAuMDAuMDAjTWluaW5nIE1hY2hpbmVyeSBhbmQgQWNjZXNzb3JpZXMjMjAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTAuMDAuMDAuMDAjTWluaW5nIGFuZCBxdWFycnlpbmcgbWFjaGluZXJ5IGFuZCBlcXVpcG1lbnQjMjAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTAuMTUuMDAuMDAjQ3V0dGluZyBlcXVpcG1lbnQjMjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTAuMTUuMDEuMDAjQ29udGludW91cyBtaW5pbmcgZXF1aXBtZW50IzIwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIwLjEwLjE1LjAyLjAwI0xvbmd3YWxsIHNoZWFycyMyMC4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMC4xMC4xNS4wMy4wMCNDb2FsIGN1dHRlcnMjMjAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjAuMTAuMTUuMDQuMDAjUm9jayBjdXR0ZXJzIzIwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIwLjEwLjE2LjAwLjAwI1NjcmVlbnMgYW5kIGZlZWRpbmcgZXF1aXBtZW50IzIwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzIwLjEwLjE2LjAxLjAwI1NjcmVlbnMjMjAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjAuMTAuMTYuMDIuMDAjRmVlZGVycyMyMC4xMC4xNi4wMC4wMAotdW5zcHNjNyMyMC4xMC4xNy4wMC4wMCNDcnVzaGVycyBhbmQgYnJlYWtlcnMgYW5kIGdyaW5kZXJzIzIwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzIwLjEwLjE3LjAxLjAwI1JvY2sgY3J1c2hlcnMjMjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjAuMTAuMTcuMDIuMDAjUm9sbCBjcnVzaGVycyMyMC4xMC4xNy4wMC4wMAotdW5zcHNjNyMyMC4xMC4xNy4wMy4wMCNDb25lIGNydXNoZXJzIzIwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzIwLjEwLjE3LjA0LjAwI0d5cmF0b3J5IGNydXNoZXJzIzIwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzIwLjEwLjE3LjA1LjAwI0ltcGFjdCBjcnVzaGVycyMyMC4xMC4xNy4wMC4wMAotdW5zcHNjNyMyMC4xMC4xNy4wNi4wMCNKYXcgY3J1c2hlcnMjMjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjAuMTAuMTcuMDcuMDAjQ3J1c2hpbmcgcGxhbnRzIzIwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzIwLjEwLjE3LjA4LjAwI1JvZCBtaWxscyMyMC4xMC4xNy4wMC4wMAotdW5zcHNjNyMyMC4xMC4xNy4wOS4wMCNCYWxsIG1pbGxzIzIwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzIwLjEwLjE3LjEwLjAwI1B1bHZlcml6aW5nIG1hY2hpbmVyeSMyMC4xMC4xNy4wMC4wMAotdW5zcHNjNyMyMC4xMC4xNy4xMS4wMCNSb2NrIGJyZWFrZXJzIzIwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzIwLjEwLjE3LjEyLjAwI0VhcnRoIGdyaW5kZXJzIzIwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzIwLjEwLjE3LjEzLjAwI0N5Y2xvbmUgb3Igdm9ydGV4IGdyaW5kZXJzIzIwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzIwLjExLjAwLjAwLjAwI1dlbGwgZHJpbGxpbmcgYW5kIG9wZXJhdGlvbiBlcXVpcG1lbnQjMjAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTEuMTUuMDAuMDAjRHJpbGxpbmcgYW5kIGV4cGxvcmF0aW9uIGVxdWlwbWVudCMyMC4xMS4wMC4wMC4wMAotdW5zcHNjNyMyMC4xMS4xNS4wMS4wMCNHYXMgd2VsbCBkcmlsbGluZyBlcXVpcG1lbnQjMjAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjAuMTEuMTUuMDIuMDAjT2lsIHdlbGwgZHJpbGxpbmcgZXF1aXBtZW50IzIwLjExLjE1LjAwLjAwCi11bnNwc2M3IzIwLjExLjE1LjAzLjAwI1N1YnNlYSBzeXN0ZW0gZXF1aXBtZW50IzIwLjExLjE1LjAwLjAwCi11bnNwc2M3IzIwLjExLjE1LjA0LjAwI1dhdGVyIHdlbGwgZHJpbGxpbmcgZXF1aXBtZW50IzIwLjExLjE1LjAwLjAwCi11bnNwc2M3IzIwLjExLjE1LjA1LjAwI1VyYW5pdW0gZXhwbG9yYXRpb24gZXF1aXBtZW50IzIwLjExLjE1LjAwLjAwCi11bnNwc2M3IzIwLjExLjE1LjA2LjAwI1dlbGxoZWFkIGVxdWlwbWVudCMyMC4xMS4xNS4wMC4wMAotdW5zcHNjNyMyMC4xMS4xNS4wNy4wMCNNdWQgb3Igd29ya292ZXIgZmx1aWQgZXF1aXBtZW50IzIwLjExLjE1LjAwLjAwCi11bnNwc2M3IzIwLjExLjE1LjA4LjAwI1NlaXNtaWMgZXF1aXBtZW50IzIwLjExLjE1LjAwLjAwCi11bnNwc2M3IzIwLjExLjE2LjAwLjAwI0RyaWxsaW5nIGFuZCBvcGVyYXRpb24gbWFjaGluZXJ5IzIwLjExLjAwLjAwLjAwCi11bnNwc2M3IzIwLjExLjE2LjAxLjAwI0JvcmluZyBvciBzaW5raW5nIG1hY2hpbmVyeSMyMC4xMS4xNi4wMC4wMAotdW5zcHNjNyMyMC4xMS4xNi4wMi4wMCNEb3duaG9sZSBhc3NlbWJseSBtYWNoaW5lcnkjMjAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjAuMTEuMTYuMDMuMDAjSGFtbWVyIGRyaWxscyMyMC4xMS4xNi4wMC4wMAotdW5zcHNjNyMyMC4xMS4xNi4wNC4wMCNDcmF3bGVyIGRyaWxscyMyMC4xMS4xNi4wMC4wMAotdW5zcHNjNyMyMC4xMS4xNi4wNS4wMCNSb2NrIGRyaWxscyMyMC4xMS4xNi4wMC4wMAotdW5zcHNjNyMyMC4xMS4xNi4wNi4wMCNQbmV1bWF0aWMgdmlicmF0b3JzIzIwLjExLjE2LjAwLjAwCi11bnNwc2M3IzIwLjExLjE2LjA3LjAwI1R1bm5lbGluZyBtYWNoaW5lcnkjMjAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjAuMTEuMTYuMDguMDAjU3RyaWtpbmcgaGFtbWVycyMyMC4xMS4xNi4wMC4wMAotdW5zcHNjNyMyMC4xMS4xNi4wOS4wMCNTaW5rZXIgZHJpbGxzIzIwLjExLjE2LjAwLjAwCi11bnNwc2M3IzIwLjExLjE2LjEwLjAwI1Nld2VyIGluc3BlY3Rpb24gbWFjaGluZXJ5IzIwLjExLjE2LjAwLjAwCi11bnNwc2M3IzIwLjExLjE2LjExLjAwI1JvdGFyeSBkcmlsbHMjMjAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjAuMTEuMTYuMTIuMDAjRHJpbGxpbmcgcmlncyMyMC4xMS4xNi4wMC4wMAotdW5zcHNjNyMyMC4xMS4xNi4xMy4wMCNMb25nIGhvbGUgZHJpbGxzIzIwLjExLjE2LjAwLjAwCi11bnNwc2M3IzIwLjExLjE2LjE0LjAwI0luZHVzdHJpYWwgZHJpbGwgYml0cyMyMC4xMS4xNi4wMC4wMAotdW5zcHNjNyMyMC4xMS4xNi4xNS4wMCNEcmlmdGVycyMyMC4xMS4xNi4wMC4wMAotdW5zcHNjNyMyMC4xMS4xNi4xNi4wMCNEZXJyaWNrcyMyMC4xMS4xNi4wMC4wMAotdW5zcHNjNyMyMC4xMS4xNi4xNy4wMCNEcmlsbGluZyBjYXJyaWFnZXMjMjAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjAuMTEuMTYuMTguMDAjRG93bmhvbGUgZmlzaGluZyBwb2xlcyMyMC4xMS4xNi4wMC4wMAotdW5zcHNjNyMyMC4xMS4xNi4xOS4wMCNXZWxsIGRyaWxsaW5nIGJpdCBjb25lcyMyMC4xMS4xNi4wMC4wMAotdW5zcHNjNyMyMC4xMS4xNy4wMC4wMCNEcmlsbGluZyBhbmQgb3BlcmF0aW9uIGFjY2Vzc29yaWVzIzIwLjExLjAwLjAwLjAwCi11bnNwc2M3IzIwLjExLjE3LjAxLjAwI0F1ZGlvIHZpc3VhbCBpbnN0cnVtZW50cyBmb3Igd2VsbCBpbnNwZWN0aW9uIzIwLjExLjE3LjAwLjAwCi11bnNwc2M3IzIwLjExLjE3LjAyLjAwI1BhY2tlcnMgb3IgdHViaW5nIGFuY2hvcnMjMjAuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjAuMTEuMTcuMDMuMDAjRHJpbGxpbmcgY2FzaW5ncyMyMC4xMS4xNy4wMC4wMAotdW5zcHNjNyMyMC4xMS4xNy4wNC4wMCNEcmlsbGluZyBzY3JlZW5zIzIwLjExLjE3LjAwLjAwCi11bnNwc2M3IzIwLjEyLjAwLjAwLjAwI09pbCBhbmQgZ2FzIGRyaWxsaW5nIGFuZCBleHBsb3JhdGlvbiBlcXVpcG1lbnQjMjAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTAuMDAuMDAjQWNpZGl6aW5nIGVxdWlwbWVudCMyMC4xMi4wMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMC4wMS4wMCNBY2lkaXppbmcgYmxlbmRpbmcgdW5pdHMjMjAuMTIuMTAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTAuMDIuMDAjQWNpZGl6aW5nIGRlbnNpdHkgc2Vuc29ycyMyMC4xMi4xMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMC4wMy4wMCNBY2lkaXppbmcgcHVtcGluZyB1bml0cyMyMC4xMi4xMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMC4wNC4wMCNBY2lkaXppbmcgdW5pdHMjMjAuMTIuMTAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTAuMDUuMDAjQWNpZGl6aW5nIGFpciBwaXBpbmcjMjAuMTIuMTAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTAuMDYuMDAjQWNpZGl6aW5nIGJhbGwgaW5qZWN0b3JzIzIwLjEyLjEwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEwLjA3LjAwI0J1bGsgbGlxdWlkIGFjaWQgZXF1aXBtZW50IzIwLjEyLjEwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEwLjA4LjAwI0FjaWRpemluZyBkcm9wIGJveGVzIzIwLjEyLjEwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEwLjA5LjAwI0FjaWRpemluZyBmbG93IG1ldGVycyMyMC4xMi4xMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMC4xMC4wMCNBY2lkaXppbmcganVuY3Rpb24gYm94ZXMjMjAuMTIuMTAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTAuMTEuMDAjQWNpZGl6aW5nIHByZXNzdXJlIHNlbnNvcnMjMjAuMTIuMTAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTAuMTIuMDAjQWNpZGl6aW5nIHByb2Nlc3MgcGlwaW5nIzIwLjEyLjEwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEwLjEzLjAwI0FjaWRpemluZyBzdHJhaWdodCBqb2ludHMjMjAuMTIuMTAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTAuMTQuMDAjQWNpZGl6aW5nIHN3aXZlbHMjMjAuMTIuMTAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTAuMTUuMDAjQWNpZGl6aW5nIHRyZWF0aW5nIGlyb25zIzIwLjEyLjEwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEwLjE2LjAwI0FjaWRpemluZyB0cmVlIHNhdmVycyMyMC4xMi4xMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMS4wMC4wMCNDZW1lbnRpbmcgZXF1aXBtZW50IzIwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjExLjAxLjAwI0JsZW5kaW5nIHVuaXRzIzIwLjEyLjExLjAwLjAwCi11bnNwc2M3IzIwLjEyLjExLjAyLjAwI0JyaWRnZSBwbHVncyMyMC4xMi4xMS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMS4wMy4wMCNCdWxrIGxpcXVpZCBjZW1lbnQgZXF1aXBtZW50IzIwLjEyLjExLjAwLjAwCi11bnNwc2M3IzIwLjEyLjExLjA0LjAwI0NlbWVudCBidWxrIG1hdGVyaWFsIGVxdWlwbWVudCMyMC4xMi4xMS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMS4wNS4wMCNDZW1lbnQgZGVuc2l0eSBzZW5zb3JzIzIwLjEyLjExLjAwLjAwCi11bnNwc2M3IzIwLjEyLjExLjA2LjAwI0NlbWVudCBmbG9hdGluZyBidWxrIHVuaXRzIzIwLjEyLjExLjAwLjAwCi11bnNwc2M3IzIwLjEyLjExLjA3LjAwI0NlbWVudCBmbG9hdGluZyBlcXVpcG1lbnQgc3RhZ2UgdG9vbHMjMjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTEuMDguMDAjQ2VtZW50IGZsb2F0aW5nIGVxdWlwbWVudCB3aXBlciBwbHVncyMyMC4xMi4xMS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMS4wOS4wMCNDZW1lbnQgcHVtcGluZyB1bml0cyMyMC4xMi4xMS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMS4xMC4wMCNDZW1lbnQgcmV0YWluZXJzIzIwLjEyLjExLjAwLjAwCi11bnNwc2M3IzIwLjEyLjExLjExLjAwI0NlbnRyYWxpemVycyMyMC4xMi4xMS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMS4xMi4wMCNFeHByZXNzIGxhdGNoIGNvdXBsZXJzIzIwLjEyLjExLjAwLjAwCi11bnNwc2M3IzIwLjEyLjExLjEzLjAwI0Zsb2F0IGNvbGxhcnMjMjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTEuMTQuMDAjRmxvYXQgc2hvZXMjMjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTEuMTUuMDAjT2lsZmllbGQgY2VtZW50aW5nIHRvb2xzIzIwLjEyLjExLjAwLjAwCi11bnNwc2M3IzIwLjEyLjExLjE2LjAwI1JldHJpZXZhYmxlIGNlbWVudGluZyBwYWNrZXJzIzIwLjEyLjExLjAwLjAwCi11bnNwc2M3IzIwLjEyLjExLjE3LjAwI1NhZmV0eSBzbGluZ3MjMjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTEuMTguMDAjU3Vic2VhIGNlbWVudCBoZWFkcyMyMC4xMi4xMS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMS4xOS4wMCNTdXJmYWNlIGNlbWVudCBoZWFkcyMyMC4xMi4xMS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMi4wMC4wMCNGcmFjdHVyaW5nIGVxdWlwbWVudCMyMC4xMi4wMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMi4wMS4wMCNCdWxrIGxpcXVpZCBmcmFjdHVyaW5nIGVxdWlwbWVudCMyMC4xMi4xMi4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMi4wMi4wMCNGcmFjdHVyaW5nIGJ1bGsgcHJvcHBhbnQgZXF1aXBtZW50IzIwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEyLjAzLjAwI0ZyYWN0dXJpbmcgY29udHJvbCB1bml0cyMyMC4xMi4xMi4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMi4wNC4wMCNGcmFjdHVyaW5nIGRlbnNpdHkgc2Vuc29ycyMyMC4xMi4xMi4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMi4wNS4wMCNGcmFjdHVyaW5nIG1hbmlmb2xkIHVuaXRzIzIwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEyLjA2LjAwI0ZyYWN0dXJpbmcgcHJvcHBhbnQgY29udmV5aW5nIGVxdWlwbWVudCMyMC4xMi4xMi4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMi4wNy4wMCNGcmFjdHVyaW5nIHB1bXBpbmcgdW5pdHMjMjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTIuMDguMDAjRnJhY3R1cmluZyBzbHVycnkgYmxlbmRpbmcgdW5pdHMjMjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTIuMDkuMDAjR2VsIGJsZW5kaW5nIHVuaXRzIzIwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEyLjEwLjAwI0ZyYWN0dXJpbmcgbWlzc2lsZXMjMjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTIuMTEuMDAjUHVtcCBpbnRlZ3JpdHkgbW9uaXRvcnMjMjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTIuMTIuMDAjRnJhY3R1cmluZyBzZXJ2aWNlIHBhY2tlcnMjMjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTIuMTMuMDAjU3RpbXVsYXRpb24gcHVtcGluZyB1bml0cyMyMC4xMi4xMi4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMy4wMC4wMCNTYW5kIGNvbnRyb2wgZXF1aXBtZW50IzIwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEzLjAxLjAwI0JsYW5raW5nIHBsdWdzIzIwLjEyLjEzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEzLjAyLjAwI0Zsb2F0ZXJzIzIwLjEyLjEzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEzLjAzLjAwI0ZyYWMgcGFjayBzeXN0ZW1zIzIwLjEyLjEzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEzLjA0LjAwI0dyYXZlbCBwYWNrIHN5c3RlbXMjMjAuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTMuMDUuMDAjR3VpZGUgc2hvZXMjMjAuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTMuMDYuMDAjSG9vayB1cCBuaXBwbGVzIzIwLjEyLjEzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEzLjA3LjAwI01ha2UgdXAgc3VicyMyMC4xMi4xMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMy4wOC4wMCNQcm9kdWN0aW9uIHR1YmluZyBvdmVyc2hvdHMjMjAuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTMuMDkuMDAjU2FuZCBjb250cm9sIGJsYW5rcyMyMC4xMi4xMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMy4xMC4wMCNTYW5kIGNvbnRyb2wgYnVsayBsaXF1aWQgZXF1aXBtZW50IzIwLjEyLjEzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEzLjExLjAwI1NhbmQgY29udHJvbCBidWxrIHByb3BwYW50IGVxdWlwbWVudCMyMC4xMi4xMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMy4xMi4wMCNTYW5kIGNvbnRyb2wgZGVuc2l0eSBzZW5zb3JzIzIwLjEyLjEzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEzLjEzLjAwI1NhbmQgY29udHJvbCBtYW5pZm9sZCB1bml0cyMyMC4xMi4xMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMy4xNC4wMCNTYW5kIGNvbnRyb2wgcHJvcHBhbnQgY29udmV5aW5nIGVxdWlwbWVudCMyMC4xMi4xMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMy4xNS4wMCNTYW5kIGNvbnRyb2wgcHVtcGluZyB1bml0cyMyMC4xMi4xMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMy4xNi4wMCNTYW5kIGNvbnRyb2wgc2NyZWVucyMyMC4xMi4xMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMy4xNy4wMCNTYW5kIGNvbnRyb2wgc2x1cnJ5IGJsZW5kaW5nIHVuaXRzIzIwLjEyLjEzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEzLjE4LjAwI1NhbmQgZGV0ZWN0b3JzIzIwLjEyLjEzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEzLjE5LjAwI1NlYWwgYXNzZW1ibHkgbG9jYXRvcnMjMjAuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTMuMjAuMDAjU2hlYXIgam9pbnRzIzIwLjEyLjEzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjEzLjIxLjAwI1NsZWV2ZSBzaGlmdGluZyB0b29scyMyMC4xMi4xMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4xMy4yMi4wMCNTbGlkaW5nIHNsZWV2ZXMjMjAuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTMuMjMuMDAjVmVsb2NpdHkgc3RyaW5ncyMyMC4xMi4xMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNC4wMC4wMCNDb21wbGV0aW9uIHRvb2xzIGFuZCBlcXVpcG1lbnQjMjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTQuMDEuMDAjQmFsbCBjYXRjaGVyIHN1YnMjMjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTQuMDIuMDAjQmxhc3Qgam9pbnRzIzIwLjEyLjE0LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE0LjAzLjAwI0JsYXN0IG5pcHBsZXMjMjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTQuMDQuMDAjQ29tcGxldGlvbiBidWxsIHBsdWdzIzIwLjEyLjE0LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE0LjA1LjAwI0NpcmN1bGF0aW9uIHByb2R1Y3Rpb24gZGV2aWNlcyMyMC4xMi4xNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNC4wNi4wMCNDb21wbGV0aW9uIHRlc3QgZXF1aXBtZW50IzIwLjEyLjE0LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE0LjA3LjAwI0NvbnRyb2wgbGluZSBwcm90ZWN0b3JzIzIwLjEyLjE0LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE0LjA4LjAwI0RlZmxlY3Rpb24gdG9vbHMjMjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTQuMDkuMDAjQ29tcGxldGlvbiBleHBhbnNpb24gam9pbnRzIzIwLjEyLjE0LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE0LjEwLjAwI0Zsb3cgY291cGxpbmdzIzIwLjEyLjE0LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE0LjExLjAwI0dhcyBsaWZ0IGVxdWlwbWVudCMyMC4xMi4xNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNC4xMi4wMCNIYW5nZXIgbGFuZGluZyB0b29scyMyMC4xMi4xNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNC4xMy4wMCNDb21wbGV0aW9uIGh5ZHJhdWxpYyBwdW1wcyMyMC4xMi4xNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNC4xNC4wMCNIeWRyYXVsaWMgc2V0dGluZyB0b29scyMyMC4xMi4xNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNC4xNS4wMCNJbmplY3Rpb24gc3lzdGVtcyMyMC4xMi4xNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNC4xNi4wMCNMYW5kaW5nIG5pcHBsZXMjMjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTQuMTcuMDAjTGluZXIgaGFuZ2VycyMyMC4xMi4xNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNC4xOC4wMCNQYWNrZXIgcHVsbGluZyB0b29scyMyMC4xMi4xNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNC4xOS4wMCNQYWNrZXIgcnVubmluZyB0b29scyMyMC4xMi4xNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNC4yMC4wMCNQcm9kdWN0aW9uIHBhY2tlcnMjMjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTQuMjEuMDAjUHVtcCBkb3duIHRocm91Z2ggZmxvdyBsaW5lIGVxdWlwbWVudCMyMC4xMi4xNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNC4yMi4wMCNDb21wbGV0aW9uIHNhZmV0eSBqb2ludHMjMjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTQuMjMuMDAjQ29tcGxldGlvbiBzZWFsIGFzc2VtYmxpZXMjMjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTQuMjQuMDAjU2VhbCBib3JlcyBvciBwb2xpc2hlZCBib3JlcyMyMC4xMi4xNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNC4yNS4wMCNTaWRlIHBvY2tldCBtYW5kcmVscyMyMC4xMi4xNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNC4yNi4wMCNTbGlkaW5nIHNsZWV2ZXMjMjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTQuMjcuMDAjU3Vic3VyZmFjZSBzYWZldHkgdmFsdmVzIzIwLjEyLjE0LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE0LjI4LjAwI1RyYXZlbCBqb2ludHMjMjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTQuMjkuMDAjVHViaW5nIGFuY2hvcnMjMjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTQuMzAuMDAjVHdpbiBmbG93IGFzc2VtYmxpZXMjMjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTUuMDAuMDAjQ29udmVudGlvbmFsIGRyaWxsaW5nIHRvb2xzIzIwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjE1LjAxLjAwI0Jsb3dvdXQgcHJldmVudGVycyMyMC4xMi4xNS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNS4wMi4wMCNCbG93b3V0IHByZXZlbnRlciBjb250cm9scyMyMC4xMi4xNS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNS4wMy4wMCNDYXNpbmcgc2NyYXBlcnMjMjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTUuMDQuMDAjRHJpbGwgY29sbGFycyMyMC4xMi4xNS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNS4wNS4wMCNDb3JpbmcgZXF1aXBtZW50IzIwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE1LjA2LjAwI0RyaWxsIHBpcGUgdGhyZWFkIHByb3RlY3RvcnMjMjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTUuMDcuMDAjRHJpbGwgcGlwZSB0b29sIGpvaW50cyMyMC4xMi4xNS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNS4wOC4wMCNEcmlsbCBwaXBlIzIwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE1LjA5LjAwI0dhdWdlIHJpbmdzIzIwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE1LjEwLjAwI0hvbGUgb3BlbmVycyMyMC4xMi4xNS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNS4xMS4wMCNIb2xlIHJlYW1lcnMjMjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTUuMTIuMDAjRmlzaGluZyBqYXJzIzIwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE1LjEzLjAwI0Rvd25ob2xlIHNob2NrIGFic29yYmVycyMyMC4xMi4xNS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNS4xNC4wMCNEb3duaG9sZSBzdGFiaWxpemVycyMyMC4xMi4xNS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNS4xNS4wMCNEcmlsbGluZyBzdWJzIzIwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE1LjE2LjAwI1RocnVzdGVycyMyMC4xMi4xNS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNi4wMC4wMCNEcmlsbGluZyBiaXRzIzIwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjE2LjAxLjAwI0ZpeGVkIGN1dHRlciBkcmlsbCBiaXRzIzIwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE2LjAyLjAwI05hdHVyYWwgZGlhbW9uZCBkcmlsbCBiaXRzIzIwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE2LjAzLjAwI05venpsZSBkcmlsbCBiaXRzIzIwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE2LjA0LjAwI1BEQyBiaXRzIzIwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE2LjA1LjAwI1JvbGxlciBjb25lIGJ1dHRvbiBpbnNlcnQgZHJpbGwgYml0cyMyMC4xMi4xNi4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNi4wNi4wMCNSb2xsZXIgc3RlZWwgdG9vdGggZHJpbGwgYml0cyMyMC4xMi4xNi4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNy4wMC4wMCNGaXNoaW5nIHRvb2xzIzIwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjE3LjAxLjAwI0J1bXBlciBzdWJzIzIwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE3LjAyLjAwI0Nhc2luZyBwYXRjaGVzIzIwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE3LjAzLjAwI0phciBib29zdGVycyMyMC4xMi4xNy4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNy4wNC4wMCNKdW5rIHN1YnMjMjAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTcuMDUuMDAjTWlsbHMgb3IgYnVybmluZyBzaG9lcyMyMC4xMi4xNy4wMC4wMAotdW5zcHNjNyMyMC4xMi4xNy4wNi4wMCNPdmVyc2hvdHMjMjAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTcuMDcuMDAjT2lsZmllbGQgZmlzaGluZyBzcGVhcnMjMjAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTcuMDguMDAjVW5zcGVjaWZpZWQgZmlzaGluZyB0b29scyMyMC4xMi4xNy4wMC4wMAotdW5zcHNjNyMyMC4xMi4xOC4wMC4wMCNEaXJlY3Rpb25hbCBkcmlsbGluZyBlcXVpcG1lbnQjMjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTguMDEuMDAjR2Vvc3RlZXJpbmcgdG9vbHMjMjAuMTIuMTguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTguMDIuMDAjTXVkIG1vdG9ycyMyMC4xMi4xOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4xOC4wMy4wMCNSb3Rhcnkgc3RlZXJhYmxlIHRvb2xzIzIwLjEyLjE4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE4LjA0LjAwI0RpcmVjdGlvbmFsIGRyaWxsaW5nIHN1cmZhY2UgY29udHJvbCBzeXN0ZW1zIzIwLjEyLjE4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE4LjA1LjAwI1N0cmFpZ2h0IGhvbGUgZGlyZWN0aW9uYWwgZHJpbGxpbmcgdG9vbHMjMjAuMTIuMTguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTkuMDAuMDAjV2VsbCBtZWFzdXJlbWVudCBhbmQgbG9nZ2luZyBlcXVpcG1lbnQjMjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTkuMDEuMDAjQWNvdXN0aWMgdG9vbHMjMjAuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTkuMDIuMDAjRHJpbGxpbmcgb3IgbXVkIGNvbnRyb2wgaW5zdHJ1bWVudHMjMjAuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTkuMDMuMDAjRHJpbGxpbmcgcGVyZm9ybWFuY2UgbWVhc3VyZW1lbnQgdG9vbHMjMjAuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTkuMDQuMDAjRmxvdyBtZWFzdXJlbWVudCBlcXVpcG1lbnQjMjAuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTkuMDUuMDAjTnVjbGVhciBtYWduZXRpYyByZXNvbmFuY2UgdG9vbHMjMjAuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTkuMDYuMDAjTnVjbGVhciB0b29scyMyMC4xMi4xOS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xOS4wNy4wMCNQcm9kdWN0aW9uIGxvZ2dpbmcgZXF1aXBtZW50IzIwLjEyLjE5LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE5LjA4LjAwI1Jlc2lzdGl2aXR5IHRvb2xzIzIwLjEyLjE5LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE5LjA5LjAwI1N1cnZleWluZyBzeXN0ZW1zIzIwLjEyLjE5LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE5LjEwLjAwI1RlbGVtZXRyeSBzeXN0ZW1zIzIwLjEyLjE5LjAwLjAwCi11bnNwc2M3IzIwLjEyLjE5LjExLjAwI1VsdHJhc29uaWMgdG9vbHMjMjAuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTkuMTIuMDAjV2VsbCBsb2dnaW5nIGJvdHRvbSBob2xlIHByZXNzdXJlIGVxdWlwbWVudCMyMC4xMi4xOS4wMC4wMAotdW5zcHNjNyMyMC4xMi4xOS4xMy4wMCNXZWxsIGxvZ2dpbmcgZG93bmhvbGUgdGVzdCBlcXVpcG1lbnQjMjAuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMTkuMTQuMDAjV2VsbCBsb2dnaW5nIHVuaXRzIzIwLjEyLjE5LjAwLjAwCi11bnNwc2M3IzIwLjEyLjIwLjAwLjAwI0ZpeHR1cmluZyBhbmQgdGVzdCBlcXVpcG1lbnQjMjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjAuMDEuMDAjRHJpZnQgYmFycyMyMC4xMi4yMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMC4wMi4wMCNEcmlmdCBzbGVldmVzIzIwLjEyLjIwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIwLjAzLjAwI0RyaWZ0IHJhYmJpdHMjMjAuMTIuMjAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjAuMDQuMDAjVGVzdCBmaXh0dXJlcyMyMC4xMi4yMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMC4wNS4wMCNUZXN0IG5pcHBsZXMjMjAuMTIuMjAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjAuMDYuMDAjVGVzdCBwbHVncyMyMC4xMi4yMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMS4wMC4wMCNQZXJmb3JhdGluZyBlcXVpcG1lbnQjMjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjEuMDEuMDAjQ2Fwc3VsZSBndW5zIzIwLjEyLjIxLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIxLjAyLjAwI0Nhc2luZyBndW5zIzIwLjEyLjIxLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIxLjAzLjAwI0RlcGxveW1lbnQgaGVhZHMjMjAuMTIuMjEuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjEuMDQuMDAjUGVyZm9yYXRpbmcgZXhwbG9zaXZlcyMyMC4xMi4yMS4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMS4wNS4wMCNGaXJpbmcgaGVhZHMjMjAuMTIuMjEuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjEuMDYuMDAjR3VuIGFkYXB0ZXJzIzIwLjEyLjIxLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIxLjA3LjAwI0hpZ2ggc2hvdCBkZW5zaXR5IGd1bnMjMjAuMTIuMjEuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjEuMDguMDAjUGVyZm9yYXRpbmcgYnVsbCBwbHVncyMyMC4xMi4yMS4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMS4wOS4wMCNQbHVnIHNldHRpbmcgdG9vbHMjMjAuMTIuMjEuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjEuMTAuMDAjUGVyZm9yYXRpbmcgcG9zaXRpb25pbmcgZXF1aXBtZW50IzIwLjEyLjIxLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIxLjExLjAwI1NjYWxsb3BlZCBndW5zIzIwLjEyLjIxLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIxLjEyLjAwI1RhbmRlbSBzdWJzIzIwLjEyLjIxLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIxLjEzLjAwI1Rocm91Z2ggdHViaW5nIHBlcmZvcmF0aW9uIGd1biBhY2Nlc3NvcmllcyMyMC4xMi4yMS4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMS4xNC4wMCNUaHJvdWdoIHR1YmluZyBwZXJmb3JhdGlvbiBndW5zIzIwLjEyLjIxLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIxLjE1LjAwI1VuZGVyIGJhbGFuY2UgdmVudCBzdWJzIzIwLjEyLjIxLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIyLjAwLjAwI1dlbGwgdGVzdGluZyBlcXVpcG1lbnQjMjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjIuMDEuMDAjRmxhcmUgYm9vbXMjMjAuMTIuMjIuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjIuMDIuMDAjRmxhcmUgYnVybmVycyMyMC4xMi4yMi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMi4wMy4wMCNDYXNlZCBob2xlIHRlc3QgdG9vbHMjMjAuMTIuMjIuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjIuMDQuMDAjQ2hva2UgbWFuaWZvbGRzIzIwLjEyLjIyLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIyLjA1LjAwI0RpdmVydGluZyBtYW5pZm9sZHMjMjAuMTIuMjIuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjIuMDYuMDAjRmxvd2hlYWQgYmFza2V0cyMyMC4xMi4yMi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMi4wNy4wMCNGbG93aGVhZCBzd2l2ZWxzIzIwLjEyLjIyLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIyLjA4LjAwI0Zsb3doZWFkcyMyMC4xMi4yMi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMi4wOS4wMCNGb3JtYXRpb24gc2h1dCBpbiB0b29scyMyMC4xMi4yMi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMi4xMC4wMCNHYXMgZmxhcmVzIzIwLjEyLjIyLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIyLjExLjAwI011ZCBnYXMgYW5hbHl6ZXJzIzIwLjEyLjIyLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIyLjEyLjAwI09pbCBzYW1wbGVycyMyMC4xMi4yMi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMi4xMy4wMCNXZWxsIHRlc3Rpbmcgc2VwYXJhdG9ycyMyMC4xMi4yMi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMi4xNC4wMCNXZWxsIHRlc3Rpbmcgc3VyZmFjZSBwaXBpbmcjMjAuMTIuMjIuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjIuMTUuMDAjU3VyZ2UgdGFua3MjMjAuMTIuMjIuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjIuMTYuMDAjV2VsbCB0ZXN0aW5nIGRvd25ob2xlIHRvb2xzIzIwLjEyLjIyLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjAwLjAwI1NsaWNrbGluZSBlcXVpcG1lbnQjMjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMDEuMDAjU2xpY2tsaW5lIGFkYXB0ZXIgaGVhZHMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMDIuMDAjU2xpY2tsaW5lIGJhY2tvZmZzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjAzLjAwI1NsaWNrbGluZSBiZWxsIGd1aWRlcyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy4wNC4wMCNTbGlja2xpbmUgYmxpbmQgYm94ZXMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMDUuMDAjU2xpY2tsaW5lIGJvdHRvbSBob2xlIHByZXNzdXJlIGVxdWlwbWVudCMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy4wNi4wMCNTbGlja2xpbmUgY2FsaXBlciB0b29scyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy4wNy4wMCNTbGlja2xpbmUgY2VtZW50IGR1bXAgYmFpbGluZyBlcXVpcG1lbnQjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMDguMDAjU2xpY2tsaW5lIGNoZW1pY2FsIGN1dHRlcnMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMDkuMDAjU2xpY2tsaW5lIGNsYW1wIG9uIHRvb2wgc3RyaW5nIGNlbnRyYWxpemVycyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy4xMC4wMCNTbGlja2xpbmUgY2xhbXAgb24gd2lyZWxpbmUgY2VudHJhbGl6ZXJzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjExLjAwI1NsaWNrbGluZSBjb2xsYXIgbG9jYXRvcnMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMTIuMDAjU2xpY2tsaW5lIGNvbGxlY3RvcnMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMTMuMDAjU2xpY2tsaW5lIGNvbGxpZGluZyB0b29scyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy4xNC4wMCNTbGlja2xpbmUgY3Jvc3NvdmVycyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy4xNS4wMCNTbGlja2xpbmUgZGVwdGggbWVhc3VyZW1lbnQgZXF1aXBtZW50IzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjE2LjAwI1NsaWNrbGluZSBkZXdhciBmbGFza3MjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMTcuMDAjU2xpY2tsaW5lIGRpcG1ldGVyIHRvb2xzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjE4LjAwI1NsaWNrbGluZSBkaXJlY3Rpb25hbCB0b29scyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy4xOS4wMCNTbGlja2xpbmUgZ28gZGV2aWwgdG9vbHMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMjAuMDAjU2xpY2tsaW5lIGhvbGUgcHVuY2hlcnMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMjEuMDAjU2xpY2tsaW5lIGpldCBjdXR0ZXJzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjIyLjAwI1NsaWNrbGluZSBqdW5rIHNob3RzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjIzLjAwI1NsaWNrbGluZSBraWNrb3ZlciB0b29scyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy4yNC4wMCNTbGlja2xpbmUga251Y2tsZSBqb2ludHMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMjUuMDAjU2xpY2tsaW5lIGxlYWQgaW1wcmVzc2lvbiBibG9ja3MjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMjYuMDAjU2xpY2tsaW5lIGxvY2F0b3IgbWFuZHJlbHMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMjcuMDAjU2xpY2tsaW5lIGxvY2sgbWFuZHJlbHMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMjguMDAjU2xpY2tsaW5lIGx1YnJpY2F0b3JzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjI5LjAwI1NsaWNrbGluZSBtZWNoYW5pY2FsIGJhaWxlcnMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMzAuMDAjU2xpY2tsaW5lIG1lY2hhbmljYWwgcGx1Z2JhY2tzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjMxLjAwI090aGVyIFNsaWNrbGluZSBUb29scyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy4zMi4wMCNTbGlja2xpbmUgcGFyYWZmaW4gc2NyYXBwZXJzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjMzLjAwI1NsaWNrbGluZSByb3BlIHNvY2tldHMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMzQuMDAjU2xpY2tsaW5lIHJ1bm5pbmcgb3IgcHVsbGluZyBwcm9uZ3MjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMzUuMDAjU2xpY2tsaW5lIHNldmVyaW5nIHRvb2xzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjM2LjAwI1NsaWNrbGluZSBzaGVhdmVzIG9yIGZsb29yIGJsb2NrcyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy4zNy4wMCNTbGlja2xpbmUgYm90dG9tIGhvbGUgcHJlc3N1cmUgZXF1aXBtZW50IzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjM4LjAwI1NsaWNrbGluZSBwdWxsaW5nIHRvb2wgYWNjZXNzb3JpZXMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuMzkuMDAjU2xpY2tsaW5lIHB1bGxpbmcgdG9vbHMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuNDAuMDAjU2xpY2tsaW5lIHJ1bm5pbmcgdG9vbHMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuNDEuMDAjU2xpY2tsaW5lIHVuaXRzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjQyLjAwI1NsaWNrbGluZSB3aXJlIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjQzLjAwI1NsaWNrbGluZSBzb25pYyB0b29scyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy40NC4wMCNTbGlja2xpbmUgc3BhY2VyIGJhcnMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuNDUuMDAjU2xpY2tsaW5lIHN3YWdlcyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy40Ni4wMCNTbGlja2xpbmUgdGVuc2lvbiBkZXZpY2VzIzIwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzIwLjEyLjIzLjQ3LjAwI1NsaWNrbGluZSB0dWJpbmcgcGx1Z3MjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuNDguMDAjU2xpY2tsaW5lIHVsdHJhc29uaWMgdG9vbHMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuNDkuMDAjV2lyZWxpbmUgR3JhYnMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjMuNTAuMDAjV2lyZWxpbmUgSmFycyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy41MS4wMCNXaXJlbGluZSBTY3JhcGVycyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy41Mi4wMCNXaXJlbGluZSBTcGVhciMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy41My4wMCNXaXJlbGluZSBTdGVtcyMyMC4xMi4yMy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yMy41NC4wMCNXaXJlbGluZSBWYWx2ZXMjMjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjQuMDAuMDAjUHJvZHVjdGlvbiBzeXN0ZW1zIGVxdWlwbWVudCMyMC4xMi4wMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNC4wMS4wMCNDYWJsZSB0aHVtcGVycyMyMC4xMi4yNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNC4wMi4wMCNPaWxmaWVsZCBwcm9kdWN0aW9uIGV2YXBvcmF0b3JzIzIwLjEyLjI0LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI0LjAzLjAwI0hpcG90IHRlc3RlcnMjMjAuMTIuMjQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjQuMDQuMDAjT2lsZmllbGQgbGFwcGluZyBtYWNoaW5lcyMyMC4xMi4yNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNC4wNS4wMCNNb3RvciBlbmQgbGlmdHMjMjAuMTIuMjQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjQuMDYuMDAjT2lsIGRpZWxlY3RyaWMgdGVzdGVycyMyMC4xMi4yNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNC4wNy4wMCNPaWwgdmFjdXVtIGZpbGxpbmcgdW5pdHMjMjAuMTIuMjQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjQuMDguMDAjT2lsZmllbGQgcHJvZHVjdGlvbiBzaGFmdCBzdHJhaWdodGVuZXJzIzIwLjEyLjI0LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI0LjA5LjAwI09pbGZpZWxkIHByb2R1Y3Rpb24gc3Bvb2xlcnMjMjAuMTIuMjQuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjQuMTAuMDAjVmlicmF0aW9uIGFuYWx5emVycyMyMC4xMi4yNC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNS4wMC4wMCNDb2lsZWQgdHViaW5nIGVxdWlwbWVudCMyMC4xMi4wMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNS4wMS4wMCNCbGFzdGVyIHRvb2xzIzIwLjEyLjI1LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI1LjAyLjAwI0NvaWxlZCB0dWJpbmcgdHJ1Y2sgY3JhbmUgdW5pdHMjMjAuMTIuMjUuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjUuMDMuMDAjQ29pbGVkIHR1YmluZyB1bml0cyMyMC4xMi4yNS4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNS4wNC4wMCNDb2lsZWQgdHViaW5nIGhvc2UgcGFja2FnZXMjMjAuMTIuMjUuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjUuMDUuMDAjQ29pbGVkIHR1YmluZyBpbmZsYXRhYmxlIHN5c3RlbXMjMjAuMTIuMjUuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjUuMDYuMDAjQ29pbGVkIHR1YmluZyBpbmplY3RvciBoZWFkcyMyMC4xMi4yNS4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNS4wNy4wMCNDb2lsZWQgdHViaW5nIGxpZnRpbmcgZXF1aXBtZW50IzIwLjEyLjI1LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI1LjA4LjAwI09wZXJhdG9yIGhvdXNlcyMyMC4xMi4yNS4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNS4wOS4wMCNDb2lsZWQgdHViaW5nIHBvd2VyIHBhY2tzIzIwLjEyLjI1LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI1LjEwLjAwI0NvaWxlZCB0dWJpbmcgcmVlbHMjMjAuMTIuMjUuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjUuMTEuMDAjQ29pbGVkIHR1YmluZyBzcG9vbGluZyByZWVscyMyMC4xMi4yNS4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNS4xMi4wMCNUdWJpbmcgZ3VpZGVzIzIwLjEyLjI1LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI1LjEzLjAwI1dlbGxoZWFkIGhvb2t1cHMjMjAuMTIuMjUuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjUuMTQuMDAjV2VsbGhlYWQgc3VwcG9ydCBzdHJ1Y3R1cmVzIzIwLjEyLjI1LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI1LjE1LjAwI09pbGZpZWxkIGNvaWxlZCB0dWJpbmcjMjAuMTIuMjUuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjYuMDAuMDAjU2Vpc21pYyBlcXVpcG1lbnQjMjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjYuMDEuMDAjU2Vpc21pYyBhbmFsb2cgc2Vuc29ycyMyMC4xMi4yNi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNi4wMi4wMCNTZWlzbWljIGFycmF5cyMyMC4xMi4yNi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNi4wMy4wMCNTZWlzbWljIHN0cmVhbWVyIGNhYmxlIGJpcmRzIzIwLjEyLjI2LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI2LjA0LjAwI1NlaXNtaWMgZHJpbGwgdGFua2VycyMyMC4xMi4yNi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNi4wNS4wMCNTZWlzbWljIGdlb3Bob25lcyMyMC4xMi4yNi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNi4wNi4wMCNTZWlzbWljIGdyYXZpdHkgc3lzdGVtcyMyMC4xMi4yNi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNi4wNy4wMCNTZWlzbWljIGd1biB3aW5jaCBzeXN0ZW1zIzIwLjEyLjI2LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI2LjA4LjAwI1NlaXNtaWMgaHlkcm9waG9uZXMjMjAuMTIuMjYuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjYuMDkuMDAjU2Vpc21pYyBpbXB1bHNlIHNvdXJjZXMjMjAuMTIuMjYuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjYuMTAuMDAjU2Vpc21pYyBtYXJpbmUgc3RyZWFtZXIgY2FibGVzIzIwLjEyLjI2LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI2LjExLjAwI1NlaXNtaWMgb2NlYW4gYm90dG9tIGNhYmxlcyMyMC4xMi4yNi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNi4xMi4wMCNTZWlzbWljIG1hZ25ldGljIHN5c3RlbXMjMjAuMTIuMjYuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjYuMTMuMDAjU2Vpc21pYyBwb3NpdGlvbmluZyBlcXVpcG1lbnQjMjAuMTIuMjYuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjYuMTQuMDAjU2Vpc21pYyByYW1zIzIwLjEyLjI2LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI2LjE1LjAwI1NlaXNtaWMgcmVjZWl2ZXJzIzIwLjEyLjI2LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI2LjE2LjAwI1NlaXNtaWMgcmVmcmFjdGlvbiBzeXN0ZW1zIzIwLjEyLjI2LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI2LjE3LjAwI1NlaXNtaWMgc291cmNlIGNvbnRyb2xsZXJzIzIwLjEyLjI2LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI2LjE4LjAwI1NlaXNtaWMgc3Bvb2xpbmcgZGV2aWNlcyMyMC4xMi4yNi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNi4xOS4wMCNTZWlzbWljIHRvdyBibG9ja3MjMjAuMTIuMjYuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjYuMjAuMDAjU2Vpc21pYyB0b3cgcG9pbnRzIzIwLjEyLjI2LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI2LjIxLjAwI1NlaXNtaWMgdmlicmF0b3JzIzIwLjEyLjI2LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI2LjIyLjAwI1NlaXNtaWMgcmVjb3JkaW5nIHN5c3RlbXMjMjAuMTIuMjYuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjYuMjMuMDAjU2Vpc21pYyBkYXRhIHByb2Nlc3Npbmcgc3lzdGVtcyMyMC4xMi4yNi4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNy4wMC4wMCNPaWwgY291bnRyeSB0dWJ1bGFyIGdvb2RzIzIwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjI3LjAxLjAwI09pbCBjb3VudHJ5IGNhc2luZyMyMC4xMi4yNy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNy4wMi4wMCNPaWwgY291bnRyeSBjb3VwbGluZ3MjMjAuMTIuMjcuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjcuMDMuMDAjT2lsIGNvdW50cnkgcHVwIGpvaW50cyMyMC4xMi4yNy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNy4wNC4wMCNPaWwgY291bnRyeSB0dWJpbmcjMjAuMTIuMjcuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjcuMDUuMDAjT2lsIGNvdW50cnkgcGlwZSBjb2F0aW5ncyMyMC4xMi4yNy4wMC4wMAotdW5zcHNjNyMyMC4xMi4yNy4wNi4wMCNDb25kdWN0b3IgY2FzaW5nIzIwLjEyLjI3LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI3LjA3LjAwI0NvbmR1Y3RvciBjYXNpbmcgcnVubmluZyBlcXVpcG1lbnQjMjAuMTIuMjcuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjcuMDguMDAjRHJpbGwgcGlwZSBjcm9zc292ZXJzIzIwLjEyLjI3LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI3LjA5LjAwI09pbCBjb3VudHJ5IHRocmVhZCBwcm90ZWN0b3JzIzIwLjEyLjI3LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjAwLjAwI0RyaWxsaW5nIGFuZCB3b3Jrb3ZlciByaWdzIGFuZCBlcXVpcG1lbnQjMjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjguMDEuMDAjTXVkIGFnaXRhdG9ycyMyMC4xMi4yOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOC4wMi4wMCNNdWQgdGFua3MjMjAuMTIuMjguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjguMDMuMDAjQWlyIGRyaWxsaW5nIGVxdWlwbWVudCMyMC4xMi4yOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOC4wNC4wMCNCYXJnZSByaWdzIzIwLjEyLjI4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjA1LjAwI0Jsb3cgb3V0IHByZXZlbnRlcnMjMjAuMTIuMjguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjguMDYuMDAjRmx1aWQgZGl2ZXJ0ZXJzIzIwLjEyLjI4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjA3LjAwI0RyYXd3b3JrcyMyMC4xMi4yOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOC4wOC4wMCNEcmlsbCBmbG9vciBlcXVpcG1lbnQjMjAuMTIuMjguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjguMDkuMDAjRHJpbGwgc3dpdmVscyMyMC4xMi4yOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOC4xMC4wMCNEcmlsbGluZyByaWcgc2hpcHMjMjAuMTIuMjguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjguMTEuMDAjRHJpbGwgcmlnIGVsZXZhdG9ycyMyMC4xMi4yOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOC4xMi4wMCNEcmlsbCByaWcgYmFpbHMjMjAuMTIuMjguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjguMTMuMDAjSHlkcmF1bGljIHdvcmtvdmVyIHVuaXRzIzIwLjEyLjI4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjE0LjAwI0RyaWxsIHJpZyBqYWNraW5nIHN5c3RlbXMjMjAuMTIuMjguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjguMTUuMDAjSmFja3VwIG1hcmluZSBkcmlsbGluZyByaWdzIzIwLjEyLjI4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjE2LjAwI0tlbGx5IGJ1c2hpbmdzIzIwLjEyLjI4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjE3LjAwI0tlbGx5IHZhbHZlcyMyMC4xMi4yOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOC4xOC4wMCNLZWxseSB3aXBlcnMjMjAuMTIuMjguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjguMTkuMDAjS2VsbHlzIzIwLjEyLjI4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjIwLjAwI0xhbmQgZHJpbGxpbmcgcmlncyMyMC4xMi4yOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOC4yMS4wMCNNdWQgY2xlYW5pbmcgZXF1aXBtZW50IzIwLjEyLjI4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjIyLjAwI011ZCBtYW5pZm9sZHMjMjAuMTIuMjguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjguMjMuMDAjTXVkIG1peGVycyMyMC4xMi4yOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOC4yNC4wMCNQaXBlIGhhbmRsaW5nIGVxdWlwbWVudCMyMC4xMi4yOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOC4yNS4wMCNQbGF0Zm9ybSBkcmlsbGluZyByaWdzIzIwLjEyLjI4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjI2LjAwI1Bvd2VyIHN3aXZlbCBvciB0b3AgZHJpdmVzIzIwLjEyLjI4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjI3LjAwI1JpZyBza2lkcyMyMC4xMi4yOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOC4yOC4wMCNEcmlsbCByaWcgcmlzZXJzIzIwLjEyLjI4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjI5LjAwI0RyaWxsIHJpZyByb3RhcnkgdGFibGVzIzIwLjEyLjI4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjMwLjAwI1NlbGYgZWxldmF0aW5nIHdvcmtvdmVyIHBsYXRmb3JtcyMyMC4xMi4yOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOC4zMS4wMCNTZW1pIHN1Ym1lcnNpYmxlIGRyaWxsaW5nIHJpZ3MjMjAuMTIuMjguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjguMzIuMDAjRHJpbGwgZmxvb3Igc2xpcHMjMjAuMTIuMjguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjguMzMuMDAjTWFrZXVwIHRvbmdzIzIwLjEyLjI4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjM0LjAwI0lyb24gcm91Z2huZWNrcyMyMC4xMi4yOC4wMC4wMAotdW5zcHNjNyMyMC4xMi4yOC4zNS4wMCNUcmF2ZWxpbmcgZXF1aXBtZW50IzIwLjEyLjI4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjM2LjAwI1dvcmtvdmVyIGJvYXRzIzIwLjEyLjI4LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI4LjM3LjAwI1dvcmtvdmVyIHJpZ3MjMjAuMTIuMjguMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjkuMDAuMDAjU3VyZmFjZSBkYXRhIGxvZ2dpbmcgZXF1aXBtZW50IzIwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjI5LjAxLjAwI1N1cmZhY2UgZGF0YSBsb2dnaW5nIGNvbmR1aXRzIzIwLjEyLjI5LjAwLjAwCi11bnNwc2M3IzIwLjEyLjI5LjAyLjAwI1N1cmZhY2UgZGF0YSBsb2dnaW5nIHNlbnNvcnMjMjAuMTIuMjkuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMjkuMDMuMDAjU3VyZmFjZSBkYXRhIGxvZ2dpbmcgdW5pdHMjMjAuMTIuMjkuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMzAuMDAuMDAjTXVsdGlsYXRlcmFsIGVxdWlwbWVudCMyMC4xMi4wMC4wMC4wMAotdW5zcHNjNyMyMC4xMi4zMC4wMS4wMCNNdWx0aWxhdGVyYWwgY2FzaW5nIzIwLjEyLjMwLjAwLjAwCi11bnNwc2M3IzIwLjEyLjMwLjAyLjAwI011bHRpbGF0ZXJhbCBqdW5jdGlvbnMjMjAuMTIuMzAuMDAuMDAKLXVuc3BzYzcjMjAuMTIuMzAuMDMuMDAjTXVsdGlsYXRlcmFsIHBhY2tlcnMjMjAuMTIuMzAuMDAuMDAKLXVuc3BzYzcjMjAuMTMuMDAuMDAuMDAjT2lsIGFuZCBnYXMgZHJpbGxpbmcgYW5kIG9wZXJhdGlvbiBtYXRlcmlhbHMjMjAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTMuMTAuMDAuMDAjRHJpbGxpbmcgbXVkIGFuZCBtYXRlcmlhbHMjMjAuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTMuMTAuMDEuMDAjRmlsdHJhdGlvbiBjb250cm9sIGFnZW50cyMyMC4xMy4xMC4wMC4wMAotdW5zcHNjNyMyMC4xMy4xMC4wMi4wMCNGbHVpZCBzcGFjZXJzIzIwLjEzLjEwLjAwLjAwCi11bnNwc2M3IzIwLjEzLjEwLjAzLjAwI0xvc3QgY2lyY3VsYXRpb24gYWdlbnRzIzIwLjEzLjEwLjAwLjAwCi11bnNwc2M3IzIwLjEzLjEwLjA0LjAwI09pbCBiYXNlZCBtdWRzIzIwLjEzLjEwLjAwLjAwCi11bnNwc2M3IzIwLjEzLjEwLjA1LjAwI1JhdGUgb2YgcGVuZXRyYXRpb24gZW5oYW5jZXJzIzIwLjEzLjEwLjAwLjAwCi11bnNwc2M3IzIwLjEzLjEwLjA2LjAwI1Nwb3R0aW5nIGZsdWlkcyMyMC4xMy4xMC4wMC4wMAotdW5zcHNjNyMyMC4xMy4xMC4wNy4wMCNTeW50aGV0aWMgYmFzZWQgbXVkcyMyMC4xMy4xMC4wMC4wMAotdW5zcHNjNyMyMC4xMy4xMC4wOC4wMCNNdWQgdGhpbm5pbmcgYWdlbnRzIzIwLjEzLjEwLjAwLjAwCi11bnNwc2M3IzIwLjEzLjEwLjA5LjAwI1dhdGVyIGJhc2VkIG11ZHMjMjAuMTMuMTAuMDAuMDAKLXVuc3BzYzcjMjAuMTMuMTAuMTAuMDAjTXVkIHdlaWdodGluZyBhZ2VudHMjMjAuMTMuMTAuMDAuMDAKLXVuc3BzYzcjMjAuMTMuMTEuMDAuMDAjV2VsbCBmcmFjdHVyaW5nIHByb3BwYW50cyMyMC4xMy4wMC4wMC4wMAotdW5zcHNjNyMyMC4xMy4xMS4wMS4wMCNDZXJhbWljIHByb3BwYW50cyMyMC4xMy4xMS4wMC4wMAotdW5zcHNjNyMyMC4xMy4xMS4wMi4wMCNGcmFjdHVyaW5nIHNhbmRzIzIwLjEzLjExLjAwLjAwCi11bnNwc2M3IzIwLjEzLjExLjAzLjAwI1Jlc2luIGNvYXRlZCBjZXJhbWljIHByb3BwYW50cyMyMC4xMy4xMS4wMC4wMAotdW5zcHNjNyMyMC4xMy4xMS4wNC4wMCNSZXNpbiBjb2F0ZWQgZnJhY3R1cmluZyBzYW5kcyMyMC4xMy4xMS4wMC4wMAotdW5zcHNjNyMyMC4xMy4xMS4wNS4wMCNSZXNpbiBjb2F0ZWQgc2ludGVyZWQgYmF1eGl0ZXMjMjAuMTMuMTEuMDAuMDAKLXVuc3BzYzcjMjAuMTMuMTEuMDYuMDAjU2ludGVyZWQgYmF1eGl0ZXMjMjAuMTMuMTEuMDAuMDAKLXVuc3BzYzcjMjAuMTMuMTIuMDAuMDAjQ29tcGxldGlvbiBmbHVpZHMjMjAuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTMuMTIuMDEuMDAjRGl2YWxlbnQgYnJpbmVzIzIwLjEzLjEyLjAwLjAwCi11bnNwc2M3IzIwLjEzLjEyLjAyLjAwI01vbm92YWxlbnQgYnJpbmVzIzIwLjEzLjEyLjAwLjAwCi11bnNwc2M3IzIwLjEzLjEzLjAwLjAwI09pbCB3ZWxsIGNlbWVudCMyMC4xMy4wMC4wMC4wMAotdW5zcHNjNyMyMC4xMy4xMy4wMS4wMCNPaWwgd2VsbCBidWxrIGNlbWVudCMyMC4xMy4xMy4wMC4wMAotdW5zcHNjNyMyMC4xMy4xMy4wMi4wMCNPaWwgd2VsbCBjbGFzcyBhIHR5cGUgSSBjZW1lbnQjMjAuMTMuMTMuMDAuMDAKLXVuc3BzYzcjMjAuMTMuMTMuMDMuMDAjT2lsIHdlbGwgY2xhc3MgYiB0eXBlIElJIGNlbWVudCMyMC4xMy4xMy4wMC4wMAotdW5zcHNjNyMyMC4xMy4xMy4wNC4wMCNPaWwgd2VsbCBjbGFzcyBjIGNlbWVudCMyMC4xMy4xMy4wMC4wMAotdW5zcHNjNyMyMC4xMy4xMy4wNS4wMCNPaWwgd2VsbCBjbGFzcyBnIGNlbWVudCMyMC4xMy4xMy4wMC4wMAotdW5zcHNjNyMyMC4xMy4xMy4wNi4wMCNPaWwgd2VsbCBjbGFzcyBoIGNlbWVudCMyMC4xMy4xMy4wMC4wMAotdW5zcHNjNyMyMC4xMy4xMy4wNy4wMCNPaWwgd2VsbCBsaWdodHdlaWdodCBjZW1lbnQjMjAuMTMuMTMuMDAuMDAKLXVuc3BzYzcjMjAuMTMuMTMuMDguMDAjT2lsIHdlbGwgc3RhbmRhcmQgZmluZSB0eXBlIElJSSBjZW1lbnQjMjAuMTMuMTMuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMDAuMDAuMDAjT2lsIGFuZCBnYXMgb3BlcmF0aW5nIGFuZCBwcm9kdWN0aW9uIGVxdWlwbWVudCMyMC4wMC4wMC4wMC4wMAotdW5zcHNjNyMyMC4xNC4xMC4wMC4wMCNXZWxsaGVhZCBlcXVpcG1lbnQjMjAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMTAuMDEuMDAjV2VsbGhlYWQgYWN0dWF0b3JzIzIwLjE0LjEwLjAwLjAwCi11bnNwc2M3IzIwLjE0LjEwLjAyLjAwI1dlbGxoZWFkIGJlYW0gcHVtcHMjMjAuMTQuMTAuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMTAuMDMuMDAjV2VsbGhlYWQgZmxvdyBsaW5lcyMyMC4xNC4xMC4wMC4wMAotdW5zcHNjNyMyMC4xNC4xMC4wNC4wMCNXZWxsaGVhZCBnYXRlIHZhbHZlcyMyMC4xNC4xMC4wMC4wMAotdW5zcHNjNyMyMC4xNC4xMC4wNS4wMCNXZWxsaGVhZCBwcm9kdWN0aW9uIGNob2tlcyMyMC4xNC4xMC4wMC4wMAotdW5zcHNjNyMyMC4xNC4xMC4wNi4wMCNXZWxsaGVhZCBzdWIgc3VyZmFjZSBmbG93IG9yIGNocmlzdG1hcyB0cmVlcyMyMC4xNC4xMC4wMC4wMAotdW5zcHNjNyMyMC4xNC4xMC4wNy4wMCNXZWxsaGVhZCBzdXJmYWNlIGZsb3cgb3IgY2hyaXN0bWFzIHRyZWVzIzIwLjE0LjEwLjAwLjAwCi11bnNwc2M3IzIwLjE0LjEwLjA4LjAwI1dlbGxoZWFkIHN1cmZhY2Ugc2FmZXR5IHZhbHZlcyMyMC4xNC4xMC4wMC4wMAotdW5zcHNjNyMyMC4xNC4xMS4wMC4wMCNDaGVtaWNhbCBpbmplY3Rpb24gc3lzdGVtcyMyMC4xNC4wMC4wMC4wMAotdW5zcHNjNyMyMC4xNC4xMS4wMS4wMCNQYXJhZmZpbiBpbmplY3Rpb24gc3lzdGVtcyMyMC4xNC4xMS4wMC4wMAotdW5zcHNjNyMyMC4xNC4xMi4wMC4wMCNEZXNhbmRpbmcgZXF1aXBtZW50IzIwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzIwLjE0LjEyLjAxLjAwI1Byb2R1Y3Rpb24gZGVzYW5kaW5nIGVxdWlwbWVudCMyMC4xNC4xMi4wMC4wMAotdW5zcHNjNyMyMC4xNC4xMy4wMC4wMCNEb3duaG9sZSBqZXQgcHVtcHMgYW5kIGFuY2hvcnMjMjAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMTMuMDEuMDAjRG93bmhvbGUgamV0IHB1bXBzIzIwLjE0LjEzLjAwLjAwCi11bnNwc2M3IzIwLjE0LjE0LjAwLjAwI0Rvd25ob2xlIHByb2R1Y3Rpb24gYWNjZXNzb3JpZXMjMjAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMTQuMDEuMDAjVHViaW5nIHN0b3BzIzIwLjE0LjE0LjAwLjAwCi11bnNwc2M3IzIwLjE0LjE1LjAwLjAwI0Rvd25ob2xlIHB1bXBzIzIwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzIwLjE0LjE1LjAxLjAwI0VsZWN0cmljIGRvd25ob2xlIHB1bXBzIzIwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzIwLjE0LjE2LjAwLjAwI0V4cG9ydCBwdW1wcyMyMC4xNC4wMC4wMC4wMAotdW5zcHNjNyMyMC4xNC4xNi4wMS4wMCNQbmV1bWF0aWMgZXhwb3J0IHB1bXBzIzIwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzIwLjE0LjE3LjAwLjAwI09mZnNob3JlIHByb2R1Y3Rpb24gYW5kIHN0b3JhZ2UgcGxhdGZvcm1zIzIwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzIwLjE0LjE3LjAxLjAwI0ZpeGVkIG9mZnNob3JlIHByb2R1Y3Rpb24gcGxhdGZvcm1zIzIwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzIwLjE0LjE3LjAyLjAwI0Zsb2F0aW5nIG9mZnNob3JlIHByb2R1Y3Rpb24gcGxhdGZvcm1zIzIwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzIwLjE0LjE3LjAzLjAwI0Zsb2F0aW5nIG9mZnNob3JlIHN0b3JhZ2UgcGxhdGZvcm1zIzIwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzIwLjE0LjE3LjA0LjAwI0Zsb2F0aW5nIG9mZnNob3JlIHRlbnNpb24gbGVnICBwcm9kdWN0aW9uIHBsYXRmb3JtcyMyMC4xNC4xNy4wMC4wMAotdW5zcHNjNyMyMC4xNC4xNy4wNS4wMCNGbG9hdGluZyBvZmZzaG9yZSB0ZW5zaW9uIGxlZyBzdG9yYWdlIHBsYXRmb3JtcyMyMC4xNC4xNy4wMC4wMAotdW5zcHNjNyMyMC4xNC4xOC4wMC4wMCNXZWxsIHByb2R1Y3Rpb24gZmxvdyBtZWFzdXJlbWVudCBtZXRlcnMjMjAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMTguMDEuMDAjV2VsbCBwcm9kdWN0aW9uIGdhcyB0dXJiaW5lIG1ldGVycyMyMC4xNC4xOC4wMC4wMAotdW5zcHNjNyMyMC4xNC4xOS4wMC4wMCNHYXMgdHJlYXRpbmcgZXF1aXBtZW50IzIwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzIwLjE0LjE5LjAxLjAwI09pbCB3ZWxsIHByb2R1Y3Rpb24gZ2FzIHRyZWF0aW5nIGVxdWlwbWVudCMyMC4xNC4xOS4wMC4wMAotdW5zcHNjNyMyMC4xNC4yMC4wMC4wMCNHbHljb2wgcmVnZW5lcmF0b3JzIzIwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzIwLjE0LjIwLjAxLjAwI09pbCB3ZWxsIGdseWNvbCByZWdlbmVyYXRvcnMjMjAuMTQuMjAuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMjEuMDAuMDAjSGVhdGVyIHRyZWF0ZXJzIzIwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzIwLjE0LjIxLjAxLjAwI09pbCB3ZWxsIGhlYXRlciB0cmVhdGVycyMyMC4xNC4yMS4wMC4wMAotdW5zcHNjNyMyMC4xNC4yMi4wMC4wMCNMaW5lIGhlYXRlcnMjMjAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMjIuMDEuMDAjRWxlY3RyaWNhbCBsaW5lIGhlYXRlcnMjMjAuMTQuMjIuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMjMuMDAuMDAjUHJvZHVjdGlvbiBpbmplY3Rpb24gc2tpZHMjMjAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMjMuMDEuMDAjUG5ldW1hdGljIG1ldGhhbm9sIGluamVjdGlvbnMgc2tpZHMjMjAuMTQuMjMuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMjQuMDAuMDAjT2NlYW4gZmxvb3IgZXF1aXBtZW50IzIwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzIwLjE0LjI0LjAxLjAwI1N1YnNlYSBwcm9kdWN0aW9uIHdlbGxoZWFkIGVxdWlwbWVudCMyMC4xNC4yNC4wMC4wMAotdW5zcHNjNyMyMC4xNC4yNS4wMC4wMCNQcm9kdWNlZCB3YXRlciB0cmVhdGluZyBlcXVpcG1lbnQjMjAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMjUuMDEuMDAjT2lsIGZpZWxkIHdhdGVyIG9pbCBjZW50cmlmdWdlcyMyMC4xNC4yNS4wMC4wMAotdW5zcHNjNyMyMC4xNC4yNi4wMC4wMCNQcm9kdWN0aW9uIGNvbnRyb2wgc3lzdGVtIGluc3RydW1lbnRhdGlvbiMyMC4xNC4wMC4wMC4wMAotdW5zcHNjNyMyMC4xNC4yNi4wMS4wMCNXaXJlbGVzcyBwcm9kdWN0aW9uIGNvbnRyb2wgc3lzdGVtcyMyMC4xNC4yNi4wMC4wMAotdW5zcHNjNyMyMC4xNC4yNy4wMC4wMCNQdW1waW5nIHVuaXRzIzIwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzIwLjE0LjI3LjAxLjAwI1N1Y2tlciByb2QgcHVtcCBqYWNrcyMyMC4xNC4yNy4wMC4wMAotdW5zcHNjNyMyMC4xNC4yNy4wMi4wMCNSb2QgcHVtcHMjMjAuMTQuMjcuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMjcuMDMuMDAjTWVjaGFuaWNhbCByb2QgcHVtcHMjMjAuMTQuMjcuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMjguMDAuMDAjUHJvZHVjdGlvbiBzZXBhcmF0b3JzIzIwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzIwLjE0LjI4LjAxLjAwI09pbCB3YXRlciBzZXBhcmF0b3JzIzIwLjE0LjI4LjAwLjAwCi11bnNwc2M3IzIwLjE0LjI5LjAwLjAwI1N0b3JhZ2UgdmVzc2VscyBhbmQgdGFua3MjMjAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMjkuMDEuMDAjT2lsIHN0b3JhZ2UgdGFua3MjMjAuMTQuMjkuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMzAuMDAuMDAjU3Vja2VyIHJvZHMjMjAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMzAuMDEuMDAjQWxsb3kgc3RlZWwgc3Vja2VyIHJvZHMjMjAuMTQuMzAuMDAuMDAKLXVuc3BzYzcjMjAuMTQuMzAuMDIuMDAjUG9ueSByb2RzIzIwLjE0LjMwLjAwLjAwCi11bnNwc2M3IzIxLjAwLjAwLjAwLjAwI0Zhcm1pbmcgYW5kIEZpc2hpbmcgYW5kIEZvcmVzdHJ5IGFuZCBXaWxkbGlmZSBNYWNoaW5lcnkgYW5kIEFjY2Vzc29yaWVzIzIxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzIxLjEwLjAwLjAwLjAwI0FncmljdWx0dXJhbCBhbmQgZm9yZXN0cnkgYW5kIGxhbmRzY2FwZSBtYWNoaW5lcnkgYW5kIGVxdWlwbWVudCMyMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMyMS4xMC4xNS4wMC4wMCNBZ3JpY3VsdHVyYWwgbWFjaGluZXJ5IGZvciBzb2lsIHByZXBhcmF0aW9uIzIxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzIxLjEwLjE1LjAxLjAwI1Bsb3VnaHMjMjEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTUuMDIuMDAjSGFycm93cyMyMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMS4xMC4xNS4wMy4wMCNDdWx0aXZhdG9ycyMyMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMS4xMC4xNS4wNC4wMCNXZWVkZXJzIzIxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE1LjA1LjAwI0hvZWluZyBtYWNoaW5lcyMyMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMS4xMC4xNS4wNi4wMCNHcmFkZXJzIG9yIGxhbmQgbGV2ZWxlcnMjMjEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTUuMDcuMDAjQWdyaWN1bHR1cmFsIHJvbGxlcnMjMjEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTUuMDguMDAjUm9sbGVycyBmb3IgbGF3biBvciBzcG9ydHMgZ3JvdW5kcyMyMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMS4xMC4xNS4wOS4wMCNUcmVuY2hlciBkcmFpbmFnZSBtYWNoaW5lIzIxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE1LjEwLjAwI0lycmlnYXRpb24gcGlwZXMgb3IgdHViZXMjMjEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTUuMTEuMDAjSXJyaWdhdGlvbiB0cmlja2xlcyMyMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMS4xMC4xNS4xMi4wMCNJcnJpZ2F0aW9uIG92ZXJoZWFkcyMyMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMS4xMC4xNS4xMy4wMCNEaXNrcyMyMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMS4xMC4xNS4xNC4wMCNTdWJzb2lsZXJzIzIxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE1LjE1LjAwI0hlZGdlIGNsaXBwZXJzIzIxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE1LjE2LjAwI0RpYmJsZXJzIzIxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE2LjAwLjAwI0FncmljdWx0dXJhbCBtYWNoaW5lcnkgZm9yIHBsYW50aW5nIGFuZCBzZWVkaW5nIzIxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzIxLjEwLjE2LjAxLjAwI1BsYW50ZXJzIzIxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE2LjAyLjAwI1RyYW5zcGxhbnRlcnMjMjEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTYuMDMuMDAjR3JhaW4gZHJpbGxzIzIxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE2LjA0LjAwI1NlZWQgZHJpbGxzIzIxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE2LjA1LjAwI1NlZWQgdHJlYXRpbmcgZXF1aXBtZW50IzIxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE2LjA2LjAwI0hvbGUgZGlnZ2VycyMyMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMyMS4xMC4xNy4wMC4wMCNBZ3JpY3VsdHVyYWwgbWFjaGluZXJ5IGZvciBoYXJ2ZXN0aW5nIzIxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzIxLjEwLjE3LjAxLjAwI01vd2VycyMyMS4xMC4xNy4wMC4wMAotdW5zcHNjNyMyMS4xMC4xNy4wMi4wMCNIYXltYWtpbmcgbWFjaGluZXJ5IzIxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE3LjAzLjAwI0hhcnZlc3RlcnMjMjEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTcuMDQuMDAjQ29tYmluZSBoYXJ2ZXN0ZXJzIzIxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE3LjA1LjAwI1RocmVzaGluZyBtYWNoaW5lcyMyMS4xMC4xNy4wMC4wMAotdW5zcHNjNyMyMS4xMC4xOC4wMC4wMCNEaXNwZXJzaW5nIGFuZCBzcHJheWluZyBhcHBsaWFuY2VzIGZvciBhZ3JpY3VsdHVyZSMyMS4xMC4wMC4wMC4wMAotdW5zcHNjNyMyMS4xMC4xOC4wMS4wMCNTcHJheWVycyMyMS4xMC4xOC4wMC4wMAotdW5zcHNjNyMyMS4xMC4xOC4wMi4wMCNEdXN0ZXJzIzIxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE4LjAzLjAwI1dhdGVyIHNwcmlua2xlcnMjMjEuMTAuMTguMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTguMDQuMDAjRmVydGlsaXplciBzcHJlYWRlcnMgb3IgZGlzdHJpYnV0b3JzIzIxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE4LjA1LjAwI0ZvZyBvciBtaXN0IGdlbmVyYXRvcnMjMjEuMTAuMTguMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTguMDYuMDAjQ29tcG9zdGVyIzIxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE4LjA3LjAwI1BvbGxpbmF0aW9uIGVxdWlwbWVudCBvciBzdXBwbGllcyMyMS4xMC4xOC4wMC4wMAotdW5zcHNjNyMyMS4xMC4xOC4wOC4wMCNGcm9zdCBwcm90ZWN0aW9uIGVxdWlwbWVudCMyMS4xMC4xOC4wMC4wMAotdW5zcHNjNyMyMS4xMC4xOS4wMC4wMCNQb3VsdHJ5IGFuZCBsaXZlc3RvY2sgZXF1aXBtZW50IzIxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzIxLjEwLjE5LjAxLjAwI01pbGtpbmcgbWFjaGluZXMjMjEuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTkuMDIuMDAjQW5pbWFsIGh1c2JhbmRyeSBlcXVpcG1lbnQjMjEuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTkuMDMuMDAjSW5jdWJhdG9ycyBvciBicm9vZGVycyBmb3IgcG91bHRyeSMyMS4xMC4xOS4wMC4wMAotdW5zcHNjNyMyMS4xMC4xOS4wNC4wMCNGZWVkIG1peGVycyMyMS4xMC4xOS4wMC4wMAotdW5zcHNjNyMyMS4xMC4xOS4wNS4wMCNMaXZlc3RvY2sgaWRlbnRpZmljYXRpb24gZXF1aXBtZW50IzIxLjEwLjE5LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE5LjA2LjAwI0VnZyBpbnNwZWN0aW9uIG9yIGNvbGxlY3RpbmcgZXF1aXBtZW50IzIxLjEwLjE5LjAwLjAwCi11bnNwc2M3IzIxLjEwLjE5LjA3LjAwI0FuaW1hbCB3YXRlcmluZyBtYWNoaW5lcyMyMS4xMC4xOS4wMC4wMAotdW5zcHNjNyMyMS4xMC4xOS4wOC4wMCNNaWxrIGNvb2xpbmcgdGFua3MjMjEuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMTkuMDkuMDAjQW5pbWFsIHNoZWFyaW5nIG9yIGNsaXBwaW5nIGVxdWlwbWVudCMyMS4xMC4xOS4wMC4wMAotdW5zcHNjNyMyMS4xMC4yMC4wMC4wMCNBZ3JpY3VsdHVyYWwgbWFjaGluZXJ5IGZvciBjbGVhbmluZyBhbmQgc29ydGluZyBhbmQgZ3JhZGluZyMyMS4xMC4wMC4wMC4wMAotdW5zcHNjNyMyMS4xMC4yMC4wMS4wMCNDbGVhbmluZyBtYWNoaW5lcyBmb3Igc2VlZCBvciBncmFpbiBvciBkcmllZCBsZWd1bWlub3VzIHZlZ2V0YWJsZXMjMjEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMjAuMDIuMDAjU29ydGluZyBtYWNoaW5lcyBmb3Igc2VlZCBvciBncmFpbiBvciBkcmllZCBsZWd1bWlub3VzIHZlZ2V0YWJsZXMjMjEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMjAuMDMuMDAjR3JhZGluZyBtYWNoaW5lcyBmb3Igc2VlZCBvciBncmFpbiBvciBkcmllZCBsZWd1bWlub3VzIHZlZ2V0YWJsZXMjMjEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMjAuMDQuMDAjUmljZSBjbGVhbmluZyBvciBodWxsaW5nIGVxdWlwbWVudCMyMS4xMC4yMC4wMC4wMAotdW5zcHNjNyMyMS4xMC4yMC4wNS4wMCNHcmluZGluZyBtaWxscyMyMS4xMC4yMC4wMC4wMAotdW5zcHNjNyMyMS4xMC4yMC4wNi4wMCNIYW1tZXIgbWlsbHMjMjEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMjEuMDAuMDAjQWdyaWN1bHR1cmFsIHByb2Nlc3NpbmcgbWFjaGluZXJ5IGFuZCBlcXVpcG1lbnQjMjEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMjEuMDEuMDAjQWdyaWN1bHR1cmFsIGJyaXF1ZXR0aW5nIG9yIHBlbHRpbmcgbWFjaGluZXMjMjEuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMjIuMDAuMDAjRm9yZXN0cnkgbWFjaGluZXJ5IGFuZCBlcXVpcG1lbnQjMjEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMjIuMDEuMDAjRGVjb3J0aWNhdG9ycyMyMS4xMC4yMi4wMC4wMAotdW5zcHNjNyMyMS4xMC4yMi4wMi4wMCNMdW1iZXJpbmcgZXF1aXBtZW50IzIxLjEwLjIyLjAwLjAwCi11bnNwc2M3IzIxLjEwLjIyLjAzLjAwI1JlZm9yZXN0YXRpb24gZXF1aXBtZW50IzIxLjEwLjIyLjAwLjAwCi11bnNwc2M3IzIxLjEwLjIyLjA0LjAwI0ZvcmVzdHJ5IHNhd3MjMjEuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMjIuMDUuMDAjRm9yZXN0cnkgc2tpZGRlcnMjMjEuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMjIuMDYuMDAjRm9yZXN0cnkgaW5jcmVtZW50IGJvcmVycyMyMS4xMC4yMi4wMC4wMAotdW5zcHNjNyMyMS4xMC4yMi4wNy4wMCNGb3Jlc3RyeSBpcHNvbWV0ZXIjMjEuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMjMuMDAuMDAjR3JlZW5ob3VzZSBlcXVpcG1lbnQjMjEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMjMuMDEuMDAjR3JlZW5ob3VzZSBpcnJpZ2F0aW9uIGVxdWlwbWVudCMyMS4xMC4yMy4wMC4wMAotdW5zcHNjNyMyMS4xMC4yMy4wMi4wMCNHcmVlbmhvdXNlIHBvdHMjMjEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMjMuMDMuMDAjR3JlZW5ob3VzZSB2ZW50aWxhdGlvbiBlcXVpcG1lbnQjMjEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMjMuMDQuMDAjR3JlZW5ob3VzZSBpc29sYXRpb24gZXF1aXBtZW50IzIxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzIxLjEwLjI0LjAwLjAwI0luc2VjdCBlcXVpcG1lbnQjMjEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMjQuMDEuMDAjQmVla2VlcGluZyBlcXVpcG1lbnQjMjEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMjQuMDIuMDAjU2lsa3dvcm0gZXF1aXBtZW50IzIxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzIxLjEwLjI0LjAzLjAwI0J1dHRlcmZseSBicmVlZGluZyBlcXVpcG1lbnQjMjEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjMjEuMTAuMjQuMDQuMDAjQmVldGxlIGJyZWVkaW5nIGVxdWlwbWVudCMyMS4xMC4yNC4wMC4wMAotdW5zcHNjNyMyMS4xMS4wMC4wMC4wMCNGaXNoaW5nIGFuZCBhcXVhY3VsdHVyZSBlcXVpcG1lbnQjMjEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjEuMTEuMTUuMDAuMDAjQ29tbWVyY2lhbCBmaXNoaW5nIGVxdWlwbWVudCMyMS4xMS4wMC4wMC4wMAotdW5zcHNjNyMyMS4xMS4xNS4wMS4wMCNDb21tZXJjaWFsIGZpc2ggaG9va3MjMjEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjEuMTEuMTUuMDIuMDAjQ29tbWVyY2lhbCBmaXNoaW5nIHJlZWxzIzIxLjExLjE1LjAwLjAwCi11bnNwc2M3IzIxLjExLjE1LjAzLjAwI0NvbW1lcmNpYWwgZmlzaGluZyBsaW5lIHRhY2tsZSMyMS4xMS4xNS4wMC4wMAotdW5zcHNjNyMyMS4xMS4xNS4wNC4wMCNDb21tZXJjaWFsIGZpc2hpbmcgbmV0cyMyMS4xMS4xNS4wMC4wMAotdW5zcHNjNyMyMS4xMS4xNS4wNi4wMCNDb21tZXJjaWFsIGZpc2hpbmcgZmxvYXRzIzIxLjExLjE1LjAwLjAwCi11bnNwc2M3IzIxLjExLjE1LjA3LjAwI0NvbW1lcmNpYWwgc2lua2VycyBvciB3ZWlnaHRzIzIxLjExLjE1LjAwLjAwCi11bnNwc2M3IzIxLjExLjE1LjA4LjAwI0Zpc2hpbmcgbmV0IGhhdWxlcnMjMjEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjEuMTEuMTYuMDAuMDAjQXF1YWN1bHR1cmUgZXF1aXBtZW50IzIxLjExLjAwLjAwLjAwCi11bnNwc2M3IzIxLjExLjE2LjAxLjAwI01hcmluZSBoYXRjaGVyeSBlcXVpcG1lbnQjMjEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjEuMTEuMTYuMDIuMDAjUGlzY2ljdWx0dXJlIHN1cHBsaWVzIzIxLjExLjE2LjAwLjAwCi11bnNwc2M3IzIyLjAwLjAwLjAwLjAwI0J1aWxkaW5nIGFuZCBDb25zdHJ1Y3Rpb24gTWFjaGluZXJ5IGFuZCBBY2Nlc3NvcmllcyMyMi4wMC4wMC4wMC4wMAotdW5zcHNjNyMyMi4xMC4wMC4wMC4wMCNIZWF2eSBjb25zdHJ1Y3Rpb24gbWFjaGluZXJ5IGFuZCBlcXVpcG1lbnQjMjIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTUuMDAuMDAjRWFydGggbW92aW5nIG1hY2hpbmVyeSMyMi4xMC4wMC4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNS4wMS4wMCNGcm9udCBlbmQgbG9hZGVycyMyMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNS4wMi4wMCNHcmFkZXJzIzIyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE1LjAzLjAwI0xvYWRlcnMjMjIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTUuMDQuMDAjUGlsZSBkcml2ZXJzIzIyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE1LjA1LjAwI1JvbGxlcnMjMjIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTUuMDYuMDAjRWFydGhtb3Zpbmcgc2NyYXBlcnMjMjIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTUuMDcuMDAjVGFtcGVycyMyMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNS4wOC4wMCNUcmVuY2hpbmcgbWFjaGluZXMjMjIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTUuMDkuMDAjQmFja2hvZXMjMjIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTUuMTAuMDAjQnVsbGRvemVycyMyMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNS4xMS4wMCNDb21wYWN0b3JzIzIyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE1LjEzLjAwI0RyYWdsaW5lcyMyMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNS4xNC4wMCNEcmVkZ2VycyMyMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNS4xNS4wMCNFeGNhdmF0b3JzIzIyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE1LjE2LjAwI0RpdGNoZXJzIzIyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE1LjE3LjAwI0NoZXJyeSBwaWNrZXJzIzIyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE1LjE4LjAwI0VsZXZhdGluZyBzY3JhcGVycyMyMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNS4xOS4wMCNUd2luIGVuZ2luZSBvcGVuIGJvd2wgc2NyYXBlcnMjMjIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTUuMjAuMDAjVHdpbiBlbmdpbmUgZWxldmF0aW5nIHNjcmFwZXJzIzIyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE1LjIxLjAwI1B1bGxlZCBzY3JhcGVycyMyMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNS4yMi4wMCNUcmFjayBidWxsZG96ZXJzIzIyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE1LjIzLjAwI1doZWVsIGJ1bGxkb3plcnMjMjIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTUuMjQuMDAjTW9iaWxlIGV4Y2F2YXRvcnMjMjIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTUuMjUuMDAjV2hlZWwgZXhjYXZhdG9ycyMyMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNS4yNi4wMCNUcmFjayBleGNhdmF0b3JzIzIyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE1LjI3LjAwI0ludGVncmF0ZWQgdG9vbCBjYXJyaWVycyMyMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNS4yOC4wMCNXaGVlbCBsb2FkZXJzIzIyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE1LjI5LjAwI1NraWQgc3RlZXIgbG9hZGVycyMyMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNS4zMC4wMCNPcGVuIGJvd2wgc2NyYXBlcnMjMjIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTUuMzEuMDAjU25vdyBibG93ZXJzIzIyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE1LjMyLjAwI1RyYWNrIGxvYWRlcnMjMjIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTYuMDAuMDAjUGF2aW5nIGVxdWlwbWVudCMyMi4xMC4wMC4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNi4wMi4wMCNSYW1taW5nIGVxdWlwbWVudCMyMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNi4wMy4wMCNSb2FkIHdpZGVuZXJzIzIyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE2LjA0LjAwI1ZpYnJhdG9yeSBwbGF0ZXMjMjIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTYuMDUuMDAjQXNwaGFsdCBmaW5pc2hlcnMjMjIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTYuMDYuMDAjQ2hpcCBTcHJlYWRlcnMjMjIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTcuMDAuMDAjSGVhdnkgZXF1aXBtZW50IGNvbXBvbmVudHMjMjIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTcuMDEuMDAjRWFydGhtb3Zpbmcgc2hvdmVscyMyMi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNy4wMi4wMCNFYXJ0aG1vdmluZyBidWNrZXRzIzIyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE3LjAzLjAwI0VhcnRobW92aW5nIGJsYWRlcyMyMi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyMi4xMC4xNy4wNC4wMCNTY2FyaWZpZXJzIzIyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE4LjAwLjAwI0FlcmlhbCBsaWZ0cyMyMi4xMC4wMC4wMC4wMAotdW5zcHNjNyMyMi4xMC4xOC4wMS4wMCNNYW5saWZ0IG9yIHBlcnNvbm5lbCBsaWZ0IzIyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzIyLjEwLjE4LjAyLjAwI1BsYXRmb3JtIGxpZnQjMjIuMTAuMTguMDAuMDAKLXVuc3BzYzcjMjIuMTAuMTguMDMuMDAjQXJ0aWN1bGF0aW5nIGJvb20gbGlmdCMyMi4xMC4xOC4wMC4wMAotdW5zcHNjNyMyMi4xMC4xOC4wNC4wMCNUZWxlc2NvcGluZyBib29tIGxpZnQjMjIuMTAuMTguMDAuMDAKLXVuc3BzYzcjMjMuMDAuMDAuMDAuMDAjSW5kdXN0cmlhbCBNYW51ZmFjdHVyaW5nIGFuZCBQcm9jZXNzaW5nIE1hY2hpbmVyeSBhbmQgQWNjZXNzb3JpZXMjMjMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTAuMDAuMDAuMDAjUmF3IG1hdGVyaWFscyBwcm9jZXNzaW5nIG1hY2hpbmVyeSMyMy4wMC4wMC4wMC4wMAotdW5zcHNjNyMyMy4xMC4xNS4wMC4wMCNNYWNoaW5lcnkgZm9yIHdvcmtpbmcgd29vZCBhbmQgc3RvbmUgYW5kIGNlcmFtaWMgYW5kIHRoZSBsaWtlIzIzLjEwLjAwLjAwLjAwCi11bnNwc2M3IzIzLjEwLjE1LjAxLjAwI0NvcGluZyBtYWNoaW5lcyMyMy4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMC4xNS4wMi4wMCNEcmlsbGluZyBtYWNoaW5lcyMyMy4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMC4xNS4wMy4wMCNCcm9hY2hpbmcgbWFjaGluZXMjMjMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTAuMTUuMDQuMDAjQmVuZGluZyBtYWNoaW5lcyMyMy4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMC4xNS4wNS4wMCNCb3JpbmcgbWFjaGluZXMjMjMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTAuMTUuMDYuMDAjR3JpbmRpbmcgbWFjaGluZXMjMjMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTAuMTUuMDcuMDAjTW9sZGluZyBtYWNoaW5lcyMyMy4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMC4xNS4wOC4wMCNDdXR0aW5nIG1hY2hpbmVzIzIzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEwLjE1LjA5LjAwI1NhbmRpbmcgbWFjaGluZXMjMjMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTAuMTUuMTAuMDAjUG9saXNoaW5nIG1hY2hpbmVzIzIzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEwLjE1LjExLjAwI1R1cm5pbmcgbWFjaGluZXMjMjMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTAuMTUuMTIuMDAjU2F3aW5nIG1hY2hpbmVzIzIzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEwLjE1LjEzLjAwI01pbGxpbmcgbWFjaGluZXMjMjMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTAuMTUuMTQuMDAjUGxhbmluZyBtYWNoaW5lcyMyMy4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMC4xNS4xNS4wMCNFbmdyYXZpbmcgbWFjaGluZXMjMjMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTAuMTUuMTYuMDAjR2xhc3MgYmVhZCBwZWVuZXIgbWFjaGluZXMjMjMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTAuMTUuMTcuMDAjR3JpdCBibGFzdCBtYWNoaW5lcyMyMy4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMC4xNS4xOC4wMCNTaG90IHBlZW4gbWFjaGluZSMyMy4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMC4xNS4xOS4wMCNSb2JvdCBtYWNoaW5lcyMyMy4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMC4xNS4yMC4wMCNSYW0gZWxlY3RybyBkaXNjaGFyZ2UgbWFjaGluZXMjMjMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTAuMTUuMjEuMDAjV2lyZSBjYXRob2RlIGVsZWN0cm9kZSBkaXNjaGFyZ2UgbWFjaGluZSMyMy4xMC4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMC4xNS4yMi4wMCNDaGlwIGJyZWFrZXIjMjMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTEuMDAuMDAuMDAjUGV0cm9sZXVtIHByb2Nlc3NpbmcgbWFjaGluZXJ5IzIzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzIzLjExLjE1LjAwLjAwI1BldHJvbGV1bSBkaXN0aWxsaW5nIGFuZCBwcm9jZXNzaW5nIG1hY2hpbmVyeSBhbmQgZXF1aXBtZW50IzIzLjExLjAwLjAwLjAwCi11bnNwc2M3IzIzLjExLjE1LjAxLjAwI0Rpc3RpbGxhdGUgaHlkcm9wcm9jZXNzaW5nIGVxdWlwbWVudCMyMy4xMS4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMS4xNS4wMi4wMCNDcnVkZSBkaXN0aWxsaW5nIG1hY2hpbmVyeSMyMy4xMS4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMS4xNS4wMy4wMCNDYXRhbHl0aWMgY3JhY2tpbmcgZXF1aXBtZW50IzIzLjExLjE1LjAwLjAwCi11bnNwc2M3IzIzLjExLjE1LjA0LjAwI0h5ZHJvY3JhY2tpbmcgZXF1aXBtZW50IzIzLjExLjE1LjAwLjAwCi11bnNwc2M3IzIzLjExLjE1LjA1LjAwI0lzb21lcml6YXRpb24gbWFjaGluZXJ5IzIzLjExLjE1LjAwLjAwCi11bnNwc2M3IzIzLjExLjE1LjA2LjAwI0Nva2luZyBtYWNoaW5lcnkjMjMuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTEuMTUuMDcuMDAjR2FzIHJlY292ZXJ5IG1hY2hpbmVyeSMyMy4xMS4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMS4xNi4wMC4wMCNIeWRyb3RyZWF0aW5nIG1hY2hpbmVyeSMyMy4xMS4wMC4wMC4wMAotdW5zcHNjNyMyMy4xMS4xNi4wMS4wMCNOYXB0aGEgaHlkcm90cmVhdGVyIzIzLjExLjE2LjAwLjAwCi11bnNwc2M3IzIzLjExLjE2LjAyLjAwI0Rpc3RpbGxhdGUgaHlkcm90cmVhdGVyIzIzLjExLjE2LjAwLjAwCi11bnNwc2M3IzIzLjExLjE2LjAzLjAwI0NhdGFseXRpYyBmZWVkIGh5ZHJvdHJlYXRlciMyMy4xMS4xNi4wMC4wMAotdW5zcHNjNyMyMy4xMS4xNi4wNC4wMCNMdWJlIGh5ZHJvdHJlYXRlciMyMy4xMS4xNi4wMC4wMAotdW5zcHNjNyMyMy4xMS4xNi4wNS4wMCNHYXNvbGluZSBoeWRyb3RyZWF0ZXIjMjMuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTEuMTYuMDYuMDAjUmVzaWQgaHlkcm90cmVhdGVyIzIzLjExLjE2LjAwLjAwCi11bnNwc2M3IzIzLjEyLjAwLjAwLjAwI1RleHRpbGUgYW5kIGZhYnJpYyBtYWNoaW5lcnkgYW5kIGFjY2Vzc29yaWVzIzIzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzIzLjEyLjE1LjAwLjAwI1RleHRpbGUgcHJvY2Vzc2luZyBtYWNoaW5lcnkgYW5kIGFjY2Vzc29yaWVzIzIzLjEyLjAwLjAwLjAwCi11bnNwc2M3IzIzLjEyLjE1LjAxLjAwI0VtYnJvaWRlcnkgbWFraW5nIG1hY2hpbmVzIzIzLjEyLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEyLjE1LjAyLjAwI0ZlbHRpbmcgbWFjaGluZXMjMjMuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTIuMTUuMDMuMDAjV2luZGluZyBvciByZWVsaW5nIG9yIHNwb29saW5nIG1hY2hpbmVzIzIzLjEyLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEyLjE1LjA0LjAwI1R3aXN0aW5nIG1hY2hpbmVzIzIzLjEyLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEyLjE1LjA1LjAwI1N0aXRjaCBib25kaW5nIG1hY2hpbmVzIzIzLjEyLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEyLjE1LjA2LjAwI0tuaXR0aW5nIG1hY2hpbmVzIzIzLjEyLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEyLjE1LjA3LjAwI1dlYXZpbmcgbWFjaGluZXMjMjMuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTIuMTUuMDguMDAjRmluaXNoaW5nIG1hY2hpbmVzIzIzLjEyLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEyLjE1LjA5LjAwI1NwaW5uaW5nIG1hY2hpbmVzIzIzLjEyLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEyLjE1LjEwLjAwI0xhY2UgbWFraW5nIG1hY2hpbmVzIzIzLjEyLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEyLjE2LjAwLjAwI1RleHRpbGUgd29ya2luZyBtYWNoaW5lcnkgYW5kIGVxdWlwbWVudCBhbmQgYWNjZXNzb3JpZXMjMjMuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTIuMTYuMDEuMDAjQnV0dG9uIGNvdmVyaW5nIG1hY2hpbmVzIzIzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzIzLjEyLjE2LjAyLjAwI0J1dHRvbiBzZXdpbmcgbWFjaGluZXMjMjMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTIuMTYuMDMuMDAjQnV0dG9uaG9sZSBtYWNoaW5lcyMyMy4xMi4xNi4wMC4wMAotdW5zcHNjNyMyMy4xMi4xNi4wNC4wMCNDbG90aCBjdXR0aW5nIG1hY2hpbmVzIzIzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzIzLjEyLjE2LjA1LjAwI0N1c2hpb24gZmlsbGluZyBtYWNoaW5lcyMyMy4xMi4xNi4wMC4wMAotdW5zcHNjNyMyMy4xMi4xNi4wNi4wMCNGb2xkaW5nIG9yIHJld2luZGluZyBtYWNoaW5lcyMyMy4xMi4xNi4wMC4wMAotdW5zcHNjNyMyMy4xMi4xNi4wNy4wMCNCbGVhY2hpbmcgbWFjaGluZXMjMjMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTIuMTYuMDguMDAjRmFicmljIG9yIGNsb3RoIGZvbGRpbmcgbWFjaGluZXMjMjMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTIuMTYuMDkuMDAjUmVlbGluZyBvciB1bnJlZWxpbmcgbWFjaGluZXMjMjMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTIuMTYuMTAuMDAjRHllaW5nIG1hY2hpbmVzIzIzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzIzLjEyLjE2LjExLjAwI0N1dHRpbmcgb3IgcGlua2luZyBtYWNoaW5lcyMyMy4xMi4xNi4wMC4wMAotdW5zcHNjNyMyMy4xMi4xNi4xMi4wMCNTZXdpbmcgbWFjaGluZSBuZWVkbGVzIzIzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzIzLjEyLjE2LjEzLjAwI1NpbGsgcHJvY2Vzc2luZyBtYWNoaW5lcyMyMy4xMi4xNi4wMC4wMAotdW5zcHNjNyMyMy4xMi4xNi4xNC4wMCNTZXdpbmcgbWFjaGluZXMjMjMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTIuMTYuMTUuMDAjRmFicmljIGN1dHRpbmcgdGFibGVzIzIzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzIzLjEzLjAwLjAwLjAwI0xhcGlkYXJ5IG1hY2hpbmVyeSBhbmQgZXF1aXBtZW50IzIzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzIzLjEzLjE1LjAwLjAwI0dyaW5kaW5nIGFuZCBzYW5kaW5nIGFuZCBwb2xpc2hpbmcgZXF1aXBtZW50IGFuZCBzdXBwbGllcyMyMy4xMy4wMC4wMC4wMAotdW5zcHNjNyMyMy4xMy4xNS4wMS4wMCNBYnJhc2l2ZSBjb21wb3VuZHMjMjMuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTMuMTUuMDIuMDAjRmVsdCB3aGVlbHMjMjMuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTMuMTUuMDMuMDAjR3JpbmRpbmcgd2hlZWxzIzIzLjEzLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEzLjE1LjA0LjAwI1BvbGlzaGluZyBjb21wb3VuZHMjMjMuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTMuMTUuMDUuMDAjUG9saXNoaW5nIGhlYWRzIzIzLjEzLjE1LjAwLjAwCi11bnNwc2M3IzIzLjEzLjE1LjA2LjAwI1BvbGlzaGluZyB3aGVlbHMjMjMuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTMuMTUuMDcuMDAjU2FuZGluZyBjbG90aHMjMjMuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTMuMTUuMDguMDAjU2FuZGluZyBkcnVtcyMyMy4xMy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMy4xNS4wOS4wMCNUdW1ibGVycyBvciBwb2xpc2hlcnMjMjMuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTMuMTUuMTAuMDAjVHVtYmxpbmcgc3VwcGxpZXMgb3IgbWVkaWEjMjMuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTMuMTUuMTEuMDAjV2F0ZXIgc3dpdmVscyMyMy4xMy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMy4xNS4xMi4wMCNXYXRlciB0cmF5cyMyMy4xMy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMy4xNS4xMy4wMCNTYW5kaW5nIGJsb2NrcyMyMy4xMy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMy4xNS4xNC4wMCNNb3VudGVkIHN0b25lcyMyMy4xMy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMy4xNS4xNS4wMCNHcmluZGluZyB3aGVlbCBkcmVzc2VycyMyMy4xMy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xMy4xNi4wMC4wMCNGYWNldGluZyBlcXVpcG1lbnQgYW5kIGFjY2Vzc29yaWVzIzIzLjEzLjAwLjAwLjAwCi11bnNwc2M3IzIzLjEzLjE2LjAxLjAwI0ZhY2V0aW5nIGFjY2Vzc29yaWVzIzIzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzIzLjEzLjE2LjAyLjAwI0ZhY2V0aW5nIG1hY2hpbmVzIzIzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzIzLjEzLjE2LjAzLjAwI0ZhY2V0aW5nIGxhcHMjMjMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTMuMTYuMDQuMDAjRmFjZXRpbmcgc2F3cyMyMy4xMy4xNi4wMC4wMAotdW5zcHNjNyMyMy4xMy4xNy4wMC4wMCNDYWJiaW5nIGVxdWlwbWVudCMyMy4xMy4wMC4wMC4wMAotdW5zcHNjNyMyMy4xMy4xNy4wMS4wMCNDYWJiaW5nIGFjY2Vzc29yaWVzIzIzLjEzLjE3LjAwLjAwCi11bnNwc2M3IzIzLjEzLjE3LjAyLjAwI0NhYmJpbmcgYmVsdHMjMjMuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMjMuMTMuMTcuMDMuMDAjQ2FiYmluZyBkaXNjcyMyMy4xMy4xNy4wMC4wMAotdW5zcHNjNyMyMy4xMy4xNy4wNC4wMCNDYWJvY2hvbiBtYWNoaW5lcyMyMy4xMy4xNy4wMC4wMAotdW5zcHNjNyMyMy4xNC4wMC4wMC4wMCNMZWF0aGVyd29ya2luZyByZXBhaXJpbmcgbWFjaGluZXJ5IGFuZCBlcXVpcG1lbnQjMjMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTQuMTYuMDAuMDAjTGVhdGhlciBwcmVwYXJpbmcgbWFjaGluZXJ5IGFuZCBhY2Nlc3NvcmllcyMyMy4xNC4wMC4wMC4wMAotdW5zcHNjNyMyMy4xNC4xNi4wMS4wMCNMZWF0aGVyIGZsZXNoaW5nIG1hY2hpbmVzIzIzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE0LjE2LjAyLjAwI0xlYXRoZXIgdGFubmluZyBtYWNoaW5lcyMyMy4xNC4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNC4xNi4wMy4wMCNMZWF0aGVyIGR5ZWluZyBtYWNoaW5lcyMyMy4xNC4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNC4xNi4wNC4wMCNMZWF0aGVyIGRlZ3JlYXNpbmcgbWFjaGluZXMjMjMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTQuMTYuMDUuMDAjTGVhdGhlciBwcmVzc2VzIzIzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE0LjE3LjAwLjAwI0xlYXRoZXIgd29ya2luZyBhbmQgcmVwYWlyaW5nIG1hY2hpbmVyeSBhbmQgYWNjZXNzb3JpZXMjMjMuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTQuMTcuMDEuMDAjTGVhdGhlciBjdXR0aW5nIG1hY2hpbmVzIzIzLjE0LjE3LjAwLjAwCi11bnNwc2M3IzIzLjE0LjE3LjAyLjAwI0xlYXRoZXIgcml2ZXRpbmcgbWFjaGluZXMjMjMuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMjMuMTQuMTcuMDMuMDAjTGVhdGhlciBuYWlsaW5nIG1hY2hpbmVzIzIzLjE0LjE3LjAwLjAwCi11bnNwc2M3IzIzLjE0LjE3LjA0LjAwI0xlYXRoZXJ3b3JraW5nIHdvcmtzaG9wIGVxdWlwbWVudCMyMy4xNC4xNy4wMC4wMAotdW5zcHNjNyMyMy4xNS4wMC4wMC4wMCNJbmR1c3RyaWFsIHByb2Nlc3MgbWFjaGluZXJ5IGFuZCBlcXVpcG1lbnQgYW5kIHN1cHBsaWVzIzIzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjE1LjAwLjAwI1J1YmJlciBhbmQgcGxhc3RpYyBwcm9jZXNzaW5nIG1hY2hpbmVyeSBhbmQgZXF1aXBtZW50IGFuZCBzdXBwbGllcyMyMy4xNS4wMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4xNS4wMS4wMCNCbG93IG1vbGRpbmcgbWFjaGluZXMjMjMuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTUuMDIuMDAjQ29hdGluZyBtYWNoaW5lcyMyMy4xNS4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNS4xNS4wMy4wMCNFeHRydWRlcnMjMjMuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTUuMDQuMDAjSW5qZWN0aW9uIG1vbGRpbmcgbWFjaGluZXMjMjMuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTUuMDUuMDAjUnViYmVyIG9yIHBsYXN0aWMgbWl4ZXJzIzIzLjE1LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE1LjA2LjAwI1J1YmJlciBvciBwbGFzdGljIHByZXNzZXMjMjMuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTUuMDcuMDAjVGhlcm1vIGZvcm1pbmcgbWFjaGluZXMjMjMuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTUuMDguMDAjVmFjdXVtIG1vbGRpbmcgbWFjaGluZXMjMjMuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTUuMDkuMDAjVnVsY2FuaXppbmcgbWFjaGluZXMjMjMuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTUuMTAuMDAjUGxhc3RpYyBjdXR0aW5nIG1hY2hpbmVyeSMyMy4xNS4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNS4xNS4xMS4wMCNQbGFzdGljIGdyaW5kaW5nIG1hY2hpbmVyeSMyMy4xNS4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNS4xNS4xMi4wMCNSdWJiZXIgb3IgcGxhc3RpYyBtaWxscyMyMy4xNS4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNS4xNS4xMy4wMCNSdWJiZXIgb3IgcGxhc3RpYyBleHRydXNpb24gZGllcyMyMy4xNS4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNS4xNS4xNC4wMCNQbGFzdGljIGluamVjdGlvbiBtb2xkcyMyMy4xNS4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNS4xNS4xNS4wMCNUaGVybW9mb3JtaW5nIG1vbGRzIzIzLjE1LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE1LjE2LjAwI0VqZWN0b3IgcGlucyMyMy4xNS4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNS4xNi4wMC4wMCNDZW1lbnQgYW5kIGNlcmFtaWNzIGFuZCBnbGFzcyBpbmR1c3RyeSBtYWNoaW5lcnkgYW5kIGVxdWlwbWVudCBhbmQgc3VwcGxpZXMjMjMuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTYuMDEuMDAjQmxvd2VycyBvciBkcnllcnMjMjMuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTYuMDIuMDAjQ3J1c2hlcnMjMjMuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTYuMDMuMDAjRnVzaW9uIHdlbGRpbmcgb3IgZ2xhc3MgZHJhd2luZyBtYWNoaW5lcyMyMy4xNS4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNS4xNi4wNC4wMCNHcmluZGluZyBvciBwb2xpc2hpbmcgbWFjaGluZXMjMjMuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTYuMDUuMDAjTWl4aW5nIG9yIGtuZWFkaW5nIG1hY2hpbmVzIzIzLjE1LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE2LjA2LjAwI0NlbWVudCBvciBjZXJhbWljIG9yIGdsYXNzIG9yIHNpbWlsYXIgbWF0ZXJpYWwgbW9sZGluZyBtYWNoaW5lcyMyMy4xNS4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNS4xNi4wNy4wMCNQcmVzc2VzIzIzLjE1LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE2LjA4LjAwI1NpZnRlcnMjMjMuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTcuMDAuMDAjT3B0aWNhbCBpbmR1c3RyeSBtYWNoaW5lcnkgYW5kIGVxdWlwbWVudCBhbmQgc3VwcGxpZXMjMjMuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTcuMDEuMDAjTGVucyBncmluZGluZyBtYWNoaW5lcyMyMy4xNS4xNy4wMC4wMAotdW5zcHNjNyMyMy4xNS4xNy4wMi4wMCNMZW5zIG1lYXN1cmluZyBlcXVpcG1lbnQjMjMuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTcuMDMuMDAjTGVucyBwb2xpc2hpbmcgZXF1aXBtZW50IzIzLjE1LjE3LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE3LjA0LjAwI0xlbnMgdGVzdGluZyBlcXVpcG1lbnQjMjMuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTcuMDUuMDAjT3B0aWNhbCB2YWN1dW0gY29hdGluZyBlcXVpcG1lbnQjMjMuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTguMDAuMDAjUGhhcm1hY2V1dGljYWwgaW5kdXN0cnkgbWFjaGluZXJ5IGFuZCBlcXVpcG1lbnQgYW5kIHN1cHBsaWVzIzIzLjE1LjAwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjE4LjAxLjAwI0FtcG91bGUgZmlsbGluZyBlcXVpcG1lbnQjMjMuMTUuMTguMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTguMDIuMDAjQm90dGxlIGNhcHBlcnMgb3IgY290dG9uIGluc2VydGVycyBvciBzYWZldHkgc2VhbCBhcHBsaWNhdG9ycyMyMy4xNS4xOC4wMC4wMAotdW5zcHNjNyMyMy4xNS4xOC4wMy4wMCNDYXBzdWxhdGluZyBtYWNoaW5lcyMyMy4xNS4xOC4wMC4wMAotdW5zcHNjNyMyMy4xNS4xOC4wNC4wMCNSZWFjdG9ycyBvciBmZXJtZW50ZXJzIG9yIGRpZ2VzdGVycyMyMy4xNS4xOC4wMC4wMAotdW5zcHNjNyMyMy4xNS4xOC4wNS4wMCNGaWxsaW5nIG9yIHNlYWxpbmcgYXVnZXIgZG9zZSBtYWNoaW5lcyMyMy4xNS4xOC4wMC4wMAotdW5zcHNjNyMyMy4xNS4xOC4wNi4wMCNQaGFybWFjZXV0aWNhbCBmaWx0ZXJzIG9yIHVsdHJhIGZpbHRlcnMjMjMuMTUuMTguMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTguMDcuMDAjRnJlZXplZHJ5ZXJzIG9yIGx5b3BoaWx6ZXJzIzIzLjE1LjE4LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE4LjA4LjAwI1BoYXJtYWNldXRpY2FsIGdyYW51bGF0b3JzIzIzLjE1LjE4LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE4LjA5LjAwI1BoYW1hY2V1dGljYWwgc2lldmUgb3Igc2NyZWVuaW5nIG1hY2hpbmVzIzIzLjE1LjE4LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE4LjEwLjAwI1N0ZXJpbGUgb3IgYXNlcHRpYyBwcm9jZXNzaW5nIG9yIGZpbGxpbmcgbWFjaGluZXMjMjMuMTUuMTguMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTguMTEuMDAjVGFibGV0IG9yIGNhcHN1bGUgdGVzdGluZyBtYWNoaW5lcyMyMy4xNS4xOC4wMC4wMAotdW5zcHNjNyMyMy4xNS4xOC4xMi4wMCNUYWJsZXQgY291bnRlcnMjMjMuMTUuMTguMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTguMTMuMDAjVGFibGV0dGluZyBtYWNoaW5lcyMyMy4xNS4xOC4wMC4wMAotdW5zcHNjNyMyMy4xNS4xOC4xNC4wMCNWYWNjaW5lIHByb2R1Y3Rpb24gZXF1aXBtZW50IzIzLjE1LjE4LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE4LjE1LjAwI1Zlc3NlbCBtaXhlcnMjMjMuMTUuMTguMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTkuMDAuMDAjUGFwZXIgbWFraW5nIGFuZCBwYXBlciBwcm9jZXNzaW5nIG1hY2hpbmVyeSBhbmQgZXF1aXBtZW50IGFuZCBzdXBwbGllcyMyMy4xNS4wMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4xOS4wMS4wMCNDdXR0ZXJzIzIzLjE1LjE5LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE5LjAyLjAwI1NsaXR0ZXJzIzIzLjE1LjE5LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE5LjAzLjAwI1dhc2hpbmcgb3IgZGV3YXRlcmluZyBtYWNoaW5lcyMyMy4xNS4xOS4wMC4wMAotdW5zcHNjNyMyMy4xNS4xOS4wNC4wMCNXaW5kZXJzIzIzLjE1LjE5LjAwLjAwCi11bnNwc2M3IzIzLjE1LjE5LjA1LjAwI1dvb2QgcHVscCBvciBkaXNzb2x2ZXIgbWFjaGluZXMjMjMuMTUuMTkuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMTkuMDYuMDAjQ2FsZW5kZXJzIGZvciBwYXBlciBvciBjYXJkYm9hcmQgbWFraW5nIzIzLjE1LjE5LjAwLjAwCi11bnNwc2M3IzIzLjE1LjIwLjAwLjAwI1dlYiBoYW5kbGluZyBhbmQgY29udHJvbCBtYWNoaW5lcnkgYW5kIGVxdWlwbWVudCBhbmQgc3VwcGxpZXMjMjMuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMjAuMDEuMDAjQ29yb25hIHRyZWF0ZXJzIzIzLjE1LjIwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjIwLjAyLjAwI0ZsYW1lIHRyZWF0ZXJzIzIzLjE1LjIwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjIxLjAwLjAwI1NlcGFyYXRpb24gbWFjaGluZXJ5IGFuZCBlcXVpcG1lbnQjMjMuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMjEuMDEuMDAjVmlicmF0b3J5IHNlcGFyYXRpb24gZXF1aXBtZW50IGFuZCBwYXJ0cyBhbmQgc2NyZWVucyMyMy4xNS4yMS4wMC4wMAotdW5zcHNjNyMyMy4xNS4yMS4wMi4wMCNTdGF0aW9uYXJ5IHNlcGFyYXRpb24gZXF1aXBtZW50IGFuZCBwYXJ0cyBhbmQgc2NyZWVucyMyMy4xNS4yMS4wMC4wMAotdW5zcHNjNyMyMy4xNS4yMS4wMy4wMCNBaXIgY2xhc3NpZmljYXRpb24gZXF1aXBtZW50IGFuZCBwYXJ0cyBhbmQgc2NyZWVucyMyMy4xNS4yMS4wMC4wMAotdW5zcHNjNyMyMy4xNS4yMS4wNC4wMCNDZW50aWZ1Z2FsIHNlcGFyYXRpb24gZXF1aXBtZW50IG9yIHBhcnRzIG9yIHNjcmVlbnMjMjMuMTUuMjEuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMjIuMDAuMDAjTWFudWZhY3R1cmluZyB0YWJsZXMgYW5kIHN0YW5kcyMyMy4xNS4wMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4yMi4wMS4wMCNSb3RhcnkgdGFibGVzIzIzLjE1LjIyLjAwLjAwCi11bnNwc2M3IzIzLjE1LjIyLjAyLjAwI1N0YWNrIHN0YW5kcyMyMy4xNS4yMi4wMC4wMAotdW5zcHNjNyMyMy4xNS4yMi4wMy4wMCNFbmdpbmUgYW5kIGNvbXBvbmVudCB0ZXN0IHN0YW5kcyMyMy4xNS4yMi4wMC4wMAotdW5zcHNjNyMyMy4xNS4yMi4wNC4wMCNNYWNoaW5lIGd1YXJkaW5nIzIzLjE1LjIyLjAwLjAwCi11bnNwc2M3IzIzLjE1LjIzLjAwLjAwI1JvdGFyeSB0YWJsZXMjMjMuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMjQuMDAuMDAjU3RhY2sgc3RhbmRzIzIzLjE1LjAwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjI1LjAwLjAwI0VuZ2luZSBhbmQgY29tcG9uZW50IHRlc3Qgc3RhbmRzIzIzLjE1LjAwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjI2LjAwLjAwI01hY2hpbmUgZ3VhcmRpbmcjMjMuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMjcuMDAuMDAjQWlyIGNsYXNzaWZpY2F0aW9uIGVxdWlwbWVudCBhbmQgcGFydHMgYW5kIHNjcmVlbnMjMjMuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMjguMDAuMDAjQ2VudGlmdWdhbCBzZXBhcmF0aW9uIGVxdWlwbWVudCBvciBwYXJ0cyBvciBzY3JlZW5zIzIzLjE1LjAwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjI5LjAwLjAwI1BhY2thZ2luZyBtYWNoaW5lcnkjMjMuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMjkuMDEuMDAjV3JhcHBpbmcgbWFjaGluZXJ5IzIzLjE1LjI5LjAwLjAwCi11bnNwc2M3IzIzLjE1LjI5LjAyLjAwI0Zvcm0gb3IgZmlsbCBvciBzZWFsIG1hY2hpbmVyeSMyMy4xNS4yOS4wMC4wMAotdW5zcHNjNyMyMy4xNS4yOS4wMy4wMCNQYWNrYWdpbmcgdmFjdXVtIzIzLjE1LjI5LjAwLjAwCi11bnNwc2M3IzIzLjE1LjMwLjAwLjAwI0hvbGRpbmcgYW5kIHBvc2l0aW9uaW5nIGFuZCBndWlkaW5nIHN5c3RlbXMgYW5kIGRldmljZXMjMjMuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMzAuMDEuMDAjQ2FsaWJyYXRpb24gamlnIzIzLjE1LjMwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjMwLjAyLjAwI0d1aWRlIGppZyMyMy4xNS4zMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4zMC4wMy4wMCNNYXN0ZXIgamlnIzIzLjE1LjMwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjMwLjA0LjAwI05lZWRsZSBqaWcjMjMuMTUuMzAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMzAuMDUuMDAjU2hhZnQgamlnIzIzLjE1LjMwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjMwLjA2LjAwI0NoZWNraW5nIGppZyMyMy4xNS4zMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4zMC4wNy4wMCNTZXR0aW5nIGppZyMyMy4xNS4zMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4zMC4wOC4wMCNDYW1lcmEgamlnIzIzLjE1LjMwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjMwLjA5LjAwI1BpY2t1cCBqaWcjMjMuMTUuMzAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMzAuMTAuMDAjUmVtb3ZhbCBqaWcjMjMuMTUuMzAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMzAuMTEuMDAjTm96emxlIGppZyMyMy4xNS4zMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4zMC4xMi4wMCNTbGlkaW5nIGppZyMyMy4xNS4zMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4zMC4xMy4wMCNDZW50ZXJpbmcgamlnIzIzLjE1LjMwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjMwLjE0LjAwI0luc3BlY3RpbmcgamlnIzIzLjE1LjMwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjMwLjE1LjAwI0ZlZWRlciBqaWcjMjMuMTUuMzAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMzAuMTYuMDAjQ2x1dGNoIGppZyMyMy4xNS4zMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4zMC4xNy4wMCNBbGlnbm1lbnQgamlnIzIzLjE1LjMwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjMwLjE4LjAwI1Bvc2l0aW9uaW5nIGppZyMyMy4xNS4zMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4zMC4xOS4wMCNMaWZ0ZXIgcGxhdGUjMjMuMTUuMzAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMzAuMjAuMDAjVGFwZSBndWlkZSMyMy4xNS4zMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4zMC4yMS4wMCNUYXBlIGZlZWQgamF3IzIzLjE1LjMwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjMwLjIyLjAwI1Bvd2VyIGZlZWRlciMyMy4xNS4zMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4zMC4yMy4wMCNGZWVkZXIgaGFybmVzcyMyMy4xNS4zMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4zMC4yNC4wMCNGZWVkIGphdyMyMy4xNS4zMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4zMC4yNS4wMCNNZWNoYW5pY2FsIGdyaXBwZXIjMjMuMTUuMzAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMzAuMjYuMDAjSG9sZGVyIGphdyMyMy4xNS4zMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4zMC4yNy4wMCNKYXcgYXNzZW1ibHkjMjMuMTUuMzAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMzAuMjguMDAjU3RhdGlvbmFyeSBqYXcjMjMuMTUuMzAuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMzAuMjkuMDAjSmlnIGJsb2NrIzIzLjE1LjMwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjMwLjMwLjAwI0xpbmVhciBtb3Rpb24gZ3VpZGVzIzIzLjE1LjMwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjMwLjMxLjAwI01lYXN1cmluZyBqaWdzIzIzLjE1LjMwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjMwLjMyLjAwI1JpbmcgamlncyMyMy4xNS4zMC4wMC4wMAotdW5zcHNjNyMyMy4xNS4zMS4wMC4wMCNJbmR1c3RyaWFsIG1hY2hpbmVyeSBjb21wb25lbnRzIzIzLjE1LjAwLjAwLjAwCi11bnNwc2M3IzIzLjE1LjMxLjAxLjAwI1BpdGNoIHN0b3BwZXIjMjMuMTUuMzEuMDAuMDAKLXVuc3BzYzcjMjMuMTUuMzEuMDIuMDAjUGFwZXIgc3RvcHBlciMyMy4xNS4zMS4wMC4wMAotdW5zcHNjNyMyMy4xNS4zMS4wMy4wMCNTdG9wcGVyIHBhZCMyMy4xNS4zMS4wMC4wMAotdW5zcHNjNyMyMy4xNi4wMC4wMC4wMCNGb3VuZHJ5ICBtYWNoaW5lcyBhbmQgZXF1aXBtZW50IGFuZCBzdXBwbGllcyMyMy4wMC4wMC4wMC4wMAotdW5zcHNjNyMyMy4xNi4xNS4wMC4wMCNGb3VuZHJ5IG1hY2hpbmVzIGFuZCBlcXVpcG1lbnQjMjMuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTYuMTUuMDEuMDAjRm91bmRyeSBibG93ZXJzIzIzLjE2LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE2LjE1LjAyLjAwI0ZvdW5kcnkgYnVybmVycyMyMy4xNi4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNi4xNS4wMy4wMCNDb3JlIGRyeWluZyBvdmVucyMyMy4xNi4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNi4xNS4wNC4wMCNGb3JnaW5nIHByZXNzZXMjMjMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTYuMTUuMDUuMDAjSG90IG1ldGFsIG1peGVycyMyMy4xNi4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNi4xNS4wNi4wMCNGb3VuZHJ5IGNydWNpYmxlcyMyMy4xNi4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNi4xNS4wNy4wMCNGb3VuZHJ5IGNvbnZlcnRlcnMjMjMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTYuMTUuMDguMDAjT3BlbiBkaWUgZm9yZ2luZyBwcmVzcyMyMy4xNi4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNi4xNS4wOS4wMCNGb3JnaW5nIHN0YW1waW5nIG1hY2hpbmVzIzIzLjE2LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE2LjE1LjEwLjAwI0Nhc3RpbmcgbWFjaGluZXMjMjMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTYuMTUuMTEuMDAjRm9yZ2luZyByb2xscyMyMy4xNi4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNi4xNS4xMi4wMCNSYWRpYWwgZm9yZ2luZyBtYWNoaW5lcyMyMy4xNi4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNi4xNS4xMy4wMCNDb2xkIGZvcm1pbmcgcHJlc3NlcyMyMy4xNi4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNi4xNS4xNC4wMCNTaXppbmcgb3IgZW1ib3NzaW5nIHByZXNzZXMjMjMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTYuMTUuMTUuMDAjRW5kIGZvcmdpbmcgbWFjaGluZXMjMjMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTYuMTYuMDAuMDAjRm91bmRyeSBzdXBwbGllcyMyMy4xNi4wMC4wMC4wMAotdW5zcHNjNyMyMy4xNi4xNi4wMS4wMCNGb3VuZHJ5IGJlbGxvd3MjMjMuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTYuMTYuMDIuMDAjRm91bmRyeSBjbGF5cyMyMy4xNi4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNi4xNi4wMy4wMCNGb3VuZHJ5IGZsYXNrcyMyMy4xNi4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNi4xNi4wNC4wMCNGb3VuZHJ5IGZsdXhlcyMyMy4xNi4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNi4xNi4wNS4wMCNGb3VuZHJ5IGxhZGxlcyMyMy4xNi4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNi4xNi4wNi4wMCNGb3VuZHJ5IG1vbGRzIzIzLjE2LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE2LjE2LjA3LjAwI0ZvdW5kcnkgc2FuZCMyMy4xNi4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNi4xNi4wOC4wMCNGb3VuZHJ5IHNob3ZlbHMjMjMuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMDAuMDAuMDAjV29ya3Nob3AgbWFjaGluZXJ5IGFuZCBlcXVpcG1lbnQgYW5kIHN1cHBsaWVzIzIzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzIzLjE3LjE1LjAwLjAwI1NvbGRlcmluZyBhbmQgYnJhemluZyBhbmQgd2VsZGluZyBtYWNoaW5lcnkgYW5kIHN1cHBsaWVzIzIzLjE3LjAwLjAwLjAwCi11bnNwc2M3IzIzLjE3LjE1LjAxLjAwI0FudGkgc3BhdHRlciBzcHJheXMjMjMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTUuMDIuMDAjR2FzIHdlbGRpbmcgb3IgYnJhemluZyByb2RzIzIzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE1LjAzLjAwI0ZpbGxlciBtZXRhbCMyMy4xNy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNS4wNC4wMCNCbG93IHBpcGVzIzIzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE1LjA1LjAwI0lyb24gcG93ZGVyIzIzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE1LjA2LjAwI1NvbGRlcmluZyBmbHVpZCMyMy4xNy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNS4wNy4wMCNTb2xkZXJpbmcgaXJvbnMgb3IgZ3VucyMyMy4xNy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNS4wOC4wMCNXZWxkZXJzIzIzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE1LjA5LjAwI1NvbGRlciMyMy4xNy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNS4xMC4wMCNXZWxkaW5nIHdpcmUjMjMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTUuMTEuMDAjV2VsZGluZyB0b29scyMyMy4xNy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNS4xMi4wMCNXZWxkaW5nIHJvZHMjMjMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTUuMTMuMDAjV2VsZGluZyByZWN0aWZpZXJzIzIzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE1LjE0LjAwI1dlbGRpbmcgZ2VuZXJhdG9ycyMyMy4xNy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNS4xNS4wMCNXZWxkaW5nIGVsZWN0cm9kZXMjMjMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTUuMTcuMDAjQmxvdyB0b3JjaGVzIzIzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE1LjE4LjAwI1BsYXNtYSB3ZWxkaW5nIG1hY2hpbmVyeSMyMy4xNy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNS4xOS4wMCNUdW5nc3RlbiBpbmVydCBnYXMgKFRJRykgd2VsZGluZyBtYWNoaW5lcnkjMjMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTUuMjAuMDAjVWx0cmFzb3VuZCB3ZWxkaW5nIG1hY2hpbmVyeSMyMy4xNy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNS4yMS4wMCNMYXNlciB3ZWxkaW5nIG1hY2hpbmVyeSMyMy4xNy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNS4yMi4wMCNTb2xkZXJpbmcgZmx1eGVzIzIzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE1LjIzLjAwI1RlbXBlcmF0dXJlIGluZGljYXRpbmcgc3RpY2tzIzIzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE1LjI0LjAwI0JyYXplIHJpbmdzIzIzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE1LjI1LjAwI1NvbGRlcmluZyB0aXBzIzIzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE1LjI2LjAwI0Rlc29sZGVyaW5nIHRpcHMjMjMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTUuMjcuMDAjRGVzb2xkZXJpbmcgYnJhaWQjMjMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTUuMjguMDAjV2VsZGluZyBzY3JlZW5zIG9yIGN1cnRhaW5zIzIzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE1LjI5LjAwI1dlbGRpbmcgb3Igc29sZGVyaW5nIGtpdCMyMy4xNy4xNS4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNS4zMC4wMCNTb2xkZXJpbmcgb3IgZGVzb2xkZXJpbmcgb3IgY29tYmluZWQgc3RhdGlvbnMjMjMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTUuMzEuMDAjRGVzb2xkZXJpbmcgR3VuIzIzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE2LjAwLjAwI01hY2hpbmUgdG9vbHMjMjMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTYuMDEuMDAjQm9yaW5nIHRvb2xzIzIzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE2LjAyLjAwI0JhciBvciByb2QgY3V0dGVycyMyMy4xNy4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNi4wMy4wMCNQaXBlIG9yIHR1YmUgY3V0dGVycyMyMy4xNy4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNi4wNC4wMCNXaXJlIG9yIGNhYmxlIGN1dHRlcnMjMjMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTYuMDUuMDAjRGVidXJyaW5nIGVxdWlwbWVudCMyMy4xNy4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNi4wNi4wMCNMYXRoZXMjMjMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTYuMDcuMDAjTGF0aGUgdG9vbHMgb3IgZGllcyMyMy4xNy4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNi4wOC4wMCNMYXNlciBjdXR0aW5nIHRvb2xzIzIzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE2LjA5LjAwI1R3aXN0IGRyaWxscyMyMy4xNy4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNi4xMC4wMCNSZWFtZXJzIzIzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE2LjExLjAwI0NvdW50ZXJib3JlcyMyMy4xNy4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNi4xMi4wMCNNaWxsaW5nIGN1dHRlcnMjMjMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTYuMTMuMDAjSG9icyMyMy4xNy4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNi4xNC4wMCNHZWFyIHNoYXBlcnMjMjMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTYuMTUuMDAjU2hhdmluZyBjdXR0ZXJzIzIzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE2LjE2LjAwI1dhdGVyIGpldCBjdXR0aW5nIG1hY2hpbmVzIzIzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE2LjE3LjAwI0Jyb2FjaGluZyB0b29scyMyMy4xNy4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNi4xOC4wMCNJbmRleGFibGUgaW5zZXJ0cyMyMy4xNy4xNi4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNi4xOS4wMCNCb3JpbmcgdG9vbHMjMjMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTYuMjAuMDAjQnJvYWNoZXMjMjMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTYuMjEuMDAjSW5zZXJ0aW9uIHRvb2xzIzIzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE2LjIyLjAwI1dvcmtzaG9wIHByZXNzZXMjMjMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTcuMDAuMDAjTWV0YWwgYmVuZGluZyBhbmQgZm9ybWluZyBtYWNoaW5lcnkjMjMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTcuMDEuMDAjVGFuZ2VudCBiZW5kZXJzIzIzLjE3LjE3LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE3LjAyLjAwI1dpbmcgYmVuZGVycyMyMy4xNy4xNy4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNy4wMy4wMCNUdWJlIGJlbmRpbmcgbWFjaGluZXJ5IzIzLjE3LjE3LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE3LjA0LjAwI1BpcGUgYmVuZGluZyBtYW5kcmVscyMyMy4xNy4xNy4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNy4wNS4wMCNEaWUgYmVuZHMjMjMuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTcuMDYuMDAjU2VxdWVudGlhbCBmb3JtaW5nIG1hY2hpbmVzIzIzLjE3LjE3LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE3LjA3LjAwI1R1YmUgZW5kIGZpbmlzaGVycyMyMy4xNy4xNy4wMC4wMAotdW5zcHNjNyMyMy4xNy4xNy4wOC4wMCNNYWNoaW5lIG1vdW50aW5nIzIzLjE3LjE3LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE4LjAwLjAwI01ldGFsIGZhYnJpY2F0aW5nIGRpZXMjMjMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTguMDEuMDAjU3RhbXBpbmcgb3IgZm9ybWluZyBkaWVzIzIzLjE3LjE4LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE4LjAyLjAwI0RpZSBjYXN0aW5nIGRpZXMjMjMuMTcuMTguMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTguMDMuMDAjTWV0YWwgZXh0cnVzaW9uIGRpZXMjMjMuMTcuMTguMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTguMDQuMDAjQ3V0dGluZyBkaWVzIG9yIHRvb2xpbmcjMjMuMTcuMTguMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTguMDUuMDAjUm90YXJ5IGRpZXMjMjMuMTcuMTguMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTguMDYuMDAjU3RlZWwgcnVsZSBkaWVzIzIzLjE3LjE4LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE5LjAwLjAwI1NwZWNpYWwgdG9vbGluZyBmaXh0dXJlcyMyMy4xNy4wMC4wMC4wMAotdW5zcHNjNyMyMy4xNy4xOS4wMS4wMCNIb2xkaW5nIGZpeHR1cmVzIzIzLjE3LjE5LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE5LjAyLjAwI0dhdWdlcyBhbmQgaW5zcGVjdGlvbiBmaXh0dXJlcyMyMy4xNy4xOS4wMC4wMAotdW5zcHNjNyMyMy4xNy4xOS4wMy4wMCNGYWJyaWNhdGVkIHRvb2xpbmcgZml4dHVyZXMjMjMuMTcuMTkuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMTkuMDQuMDAjQ2FzdGluZyB0b29saW5nIzIzLjE3LjE5LjAwLjAwCi11bnNwc2M3IzIzLjE3LjE5LjA1LjAwI0ZvcmdpbmcgdG9vbGluZyMyMy4xNy4xOS4wMC4wMAotdW5zcHNjNyMyMy4xNy4xOS4wNi4wMCNBc3NlbWJseSBvciBkaXNhc3NlbWJseSB0b29saW5nIzIzLjE3LjE5LjAwLjAwCi11bnNwc2M3IzIzLjE3LjIwLjAwLjAwI01ldGFsIHdvcmtpbmcgbWFjaGluZXJ5IGF0dGFjaG1lbnRzIzIzLjE3LjAwLjAwLjAwCi11bnNwc2M3IzIzLjE3LjIwLjAxLjAwI0J1cnJzIzIzLjE3LjIwLjAwLjAwCi11bnNwc2M3IzIzLjE3LjIwLjAyLjAwI0Zvcm0gUmVsaWVmIzIzLjE3LjIwLjAwLjAwCi11bnNwc2M3IzIzLjE3LjIwLjAzLjAwI01hY2hpbmUgdGhyZWFkaW5nIHRhcHMjMjMuMTcuMjAuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMjAuMDQuMDAjTWFjaGluZSB0aHJlYWRpbmcgZGllcyMyMy4xNy4yMC4wMC4wMAotdW5zcHNjNyMyMy4xNy4yMC4wNS4wMCNNYWNoaW5lIGVuZCBtaWxscyMyMy4xNy4yMC4wMC4wMAotdW5zcHNjNyMyMy4xNy4yMC4wNi4wMCNNZXRhbCBzdGFtcHMgb3IgcHVuY2hlcyMyMy4xNy4yMC4wMC4wMAotdW5zcHNjNyMyMy4xNy4yMC4wNy4wMCNNZXRhbCBjdXR0aW5nIGJhbmQgc2F3IGJsYWRlcyMyMy4xNy4yMC4wMC4wMAotdW5zcHNjNyMyMy4xNy4yMC4wOC4wMCNNZXRhbCBjdXR0aW5nIGNpcmN1bGFyIHNhdyBibGFkZXMjMjMuMTcuMjAuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMjAuMDkuMDAjQ2FyYmlkZSBpbnNlcnRzIzIzLjE3LjIwLjAwLjAwCi11bnNwc2M3IzIzLjE3LjIwLjEwLjAwI0NlcmFtaWMgaW5zZXJ0cyMyMy4xNy4yMC4wMC4wMAotdW5zcHNjNyMyMy4xNy4yMC4xMS4wMCNTdGVlbCBpbnNlcnRzIzIzLjE3LjIwLjAwLjAwCi11bnNwc2M3IzIzLjE3LjIwLjEyLjAwI0RpYW1vbmQgaW5zZXJ0cyMyMy4xNy4yMC4wMC4wMAotdW5zcHNjNyMyMy4xNy4yMC4xMy4wMCNUaHJlYWRpbmcgbWlsbHMjMjMuMTcuMjAuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMjEuMDAuMDAjSG9sZGluZyBmaXh0dXJlcyMyMy4xNy4wMC4wMC4wMAotdW5zcHNjNyMyMy4xNy4yMi4wMC4wMCNHYXVnZXMgYW5kIGluc3BlY3Rpb24gZml4dHVyZXMjMjMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMjMuMDAuMDAjRmFicmljYXRlZCB0b29saW5nIGZpeHR1cmVzIzIzLjE3LjAwLjAwLjAwCi11bnNwc2M3IzIzLjE3LjI0LjAwLjAwI0Nhc3RpbmcgdG9vbGluZyMyMy4xNy4wMC4wMC4wMAotdW5zcHNjNyMyMy4xNy4yNS4wMC4wMCNGb3JnaW5nIHRvb2xpbmcjMjMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTcuMjYuMDAuMDAjQXNzZW1ibHkgb3IgZGlzYXNzZW1ibHkgdG9vbGluZyMyMy4xNy4wMC4wMC4wMAotdW5zcHNjNyMyMy4xOC4wMC4wMC4wMCNJbmR1c3RyaWFsIGZvb2QgYW5kIGJldmVyYWdlIGVxdWlwbWVudCMyMy4wMC4wMC4wMC4wMAotdW5zcHNjNyMyMy4xOC4xNS4wMC4wMCNGb29kIHByZXBhcmF0aW9uIG1hY2hpbmVyeSMyMy4xOC4wMC4wMC4wMAotdW5zcHNjNyMyMy4xOC4xNS4wMS4wMCNGaWxsaW5nIG1hY2hpbmVyeSMyMy4xOC4xNS4wMC4wMAotdW5zcHNjNyMyMy4xOC4xNS4wMi4wMCNNaWxsaW5nIG1hY2hpbmVyeSMyMy4xOC4xNS4wMC4wMAotdW5zcHNjNyMyMy4xOC4xNS4wMy4wMCNNaXhpbmcgbWFjaGluZXJ5IzIzLjE4LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE4LjE1LjA0LjAwI1NpZnRpbmcgbWFjaGluZXJ5IzIzLjE4LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE4LjE1LjA1LjAwI0RlaHlkcmF0aW5nIG1hY2hpbmVyeSMyMy4xOC4xNS4wMC4wMAotdW5zcHNjNyMyMy4xOC4xNS4wNi4wMCNXYXNoaW5nIG1hY2hpbmVyeSMyMy4xOC4xNS4wMC4wMAotdW5zcHNjNyMyMy4xOC4xNS4wNy4wMCNDcnVzaGluZyBtYWNoaW5lcnkjMjMuMTguMTUuMDAuMDAKLXVuc3BzYzcjMjMuMTguMTUuMDguMDAjQmxhbmNoaW5nIG1hY2hpbmVyeSMyMy4xOC4xNS4wMC4wMAotdW5zcHNjNyMyMy4xOC4xNS4wOS4wMCNTb3J0aW5nIG1hY2hpbmVyeSMyMy4xOC4xNS4wMC4wMAotdW5zcHNjNyMyMy4xOC4xNS4xMC4wMCNNZWF0IHR5ZXJzIzIzLjE4LjE1LjAwLjAwCi11bnNwc2M3IzIzLjE4LjE2LjAwLjAwI0Zvb2QgY3V0dGluZyBtYWNoaW5lcnkjMjMuMTguMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTguMTYuMDEuMDAjRGljaW5nIG1hY2hpbmVyeSMyMy4xOC4xNi4wMC4wMAotdW5zcHNjNyMyMy4xOC4xNi4wMi4wMCNTbGljaW5nIG1hY2hpbmVyeSMyMy4xOC4xNi4wMC4wMAotdW5zcHNjNyMyMy4xOC4xNi4wMy4wMCNDaG9wcGluZyBtYWNoaW5lcnkjMjMuMTguMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTguMTYuMDQuMDAjQ3V0dGluZyBtYWNoaW5lcnkjMjMuMTguMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTguMTYuMDUuMDAjR3JhdGluZyBtYWNoaW5lcnkjMjMuMTguMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTguMTYuMDYuMDAjUGVlbGluZyBtYWNoaW5lcnkjMjMuMTguMTYuMDAuMDAKLXVuc3BzYzcjMjMuMTguMTcuMDAuMDAjRm9vZCBjb29raW5nIGFuZCBzbW9raW5nIG1hY2hpbmVyeSMyMy4xOC4wMC4wMC4wMAotdW5zcHNjNyMyMy4xOC4xNy4wMS4wMCNTbW9raW5nIG1hY2hpbmVyeSMyMy4xOC4xNy4wMC4wMAotdW5zcHNjNyMyMy4xOC4xNy4wMi4wMCNSb2FzdGluZyBtYWNoaW5lcnkjMjMuMTguMTcuMDAuMDAKLXVuc3BzYzcjMjMuMTguMTcuMDMuMDAjQ29va2luZyBtYWNoaW5lcnkjMjMuMTguMTcuMDAuMDAKLXVuc3BzYzcjMjMuMTguMTcuMDQuMDAjU3RlYW1pbmcgbWFjaGluZXJ5IzIzLjE4LjE3LjAwLjAwCi11bnNwc2M3IzIzLjE4LjE4LjAwLjAwI0luZHVzdHJpYWwgYmV2ZXJhZ2UgcHJvY2Vzc2luZyBtYWNoaW5lcnkjMjMuMTguMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTguMTguMDEuMDAjQ29mZmVlIGJyZXdpbmcgZXF1aXBtZW50IG9yIHN1cHBsaWVzIzIzLjE4LjE4LjAwLjAwCi11bnNwc2M3IzIzLjE4LjE4LjAyLjAwI0p1aWNpbmcgbWFjaGluZXJ5IzIzLjE4LjE4LjAwLjAwCi11bnNwc2M3IzIzLjE4LjE4LjAzLjAwI0ljZSBtYWtpbmcgbWFjaGluZXMjMjMuMTguMTguMDAuMDAKLXVuc3BzYzcjMjMuMTguMTguMDQuMDAjSWNlIGNyZWFtIG1hY2hpbmVzIzIzLjE4LjE4LjAwLjAwCi11bnNwc2M3IzIzLjE5LjAwLjAwLjAwI01peGVycyBhbmQgdGhlaXIgcGFydHMgYW5kIGFjY2Vzc29yaWVzIzIzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzIzLjE5LjEwLjAwLjAwI0JhdGNoIG1peGVycyMyMy4xOS4wMC4wMC4wMAotdW5zcHNjNyMyMy4xOS4xMC4wMS4wMCNDaGFuZ2UgY2FuIG1peGVycyMyMy4xOS4xMC4wMC4wMAotdW5zcHNjNyMyMy4xOS4xMC4wMi4wMCNIZWxpY2FsIGJsYWRlIG1peGVyIzIzLjE5LjEwLjAwLjAwCi11bnNwc2M3IzIzLjE5LjEwLjAzLjAwI0RvdWJsZSBhcm0ga25lYWRpbmcgbWl4ZXJzIzIzLjE5LjEwLjAwLjAwCi11bnNwc2M3IzIzLjE5LjEwLjA0LjAwI0ludGVuc2l2ZSBtaXhlcnMjMjMuMTkuMTAuMDAuMDAKLXVuc3BzYzcjMjMuMTkuMTAuMDUuMDAjUm9sbCBtaXhlcnMjMjMuMTkuMTAuMDAuMDAKLXVuc3BzYzcjMjMuMTkuMTEuMDAuMDAjQ29udGludW91cyBtaXhlcnMjMjMuMTkuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMTkuMTEuMDEuMDAjU2luZ2xlIHNjcmV3IG1peGVycyMyMy4xOS4xMS4wMC4wMAotdW5zcHNjNyMyMy4xOS4xMS4wMi4wMCNUd2luIHNjcmV3IGV4dHJ1ZGVyIzIzLjE5LjExLjAwLjAwCi11bnNwc2M3IzIzLjIwLjAwLjAwLjAwI01hc3MgdHJhbnNmZXIgZXF1aXBtZW50IzIzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzIzLjIwLjEwLjAwLjAwI0dhcyBsaXF1aWQgY29udGFjdGluZyBzeXN0ZW1zIzIzLjIwLjAwLjAwLjAwCi11bnNwc2M3IzIzLjIwLjEwLjAxLjAwI1BsYXRlIGNvbHVtbnMjMjMuMjAuMTAuMDAuMDAKLXVuc3BzYzcjMjMuMjAuMTAuMDIuMDAjUGFja2VkIGNvbHVtbnMjMjMuMjAuMTAuMDAuMDAKLXVuc3BzYzcjMjMuMjAuMTAuMDMuMDAjTGlxdWlkIGRpc3BlcnNlZCBjb250YWN0b3IjMjMuMjAuMTAuMDAuMDAKLXVuc3BzYzcjMjMuMjAuMTAuMDQuMDAjV2V0dGVkIHdhbGwgY29sdW1uIzIzLjIwLjEwLjAwLjAwCi11bnNwc2M3IzIzLjIwLjEwLjA1LjAwI0J1YmJsZSBjb2x1bW5zIzIzLjIwLjEwLjAwLjAwCi11bnNwc2M3IzIzLjIwLjExLjAwLjAwI0Fkc29ycHRpb24gYW5kIGlvbiBleGNoYW5nZSMyMy4yMC4wMC4wMC4wMAotdW5zcHNjNyMyMy4yMC4xMS4wMS4wMCNBZHNvcmJlciB2ZXNzZWwjMjMuMjAuMTEuMDAuMDAKLXVuc3BzYzcjMjMuMjAuMTEuMDIuMDAjQW1iaWVudCBwcmVzc3VyZSBhZHNvcmJlciB2ZXNzZWwjMjMuMjAuMTEuMDAuMDAKLXVuc3BzYzcjMjMuMjEuMDAuMDAuMDAjRWxlY3Ryb25pYyBtYW51ZmFjdHVyaW5nIG1hY2hpbmVyeSBhbmQgZXF1aXBtZW50IGFuZCBhY2Nlc3NvcmllcyMyMy4wMC4wMC4wMC4wMAotdW5zcHNjNyMyMy4yMS4xMC4wMC4wMCNFbGVjdHJvbmljIGFzc2VtYmx5IG1hY2hpbmVyeSBhbmQgc3VwcG9ydCBlcXVpcG1lbnQjMjMuMjEuMDAuMDAuMDAKLXVuc3BzYzcjMjMuMjEuMTAuMDEuMDAjQ2hpcCBwbGFjZXJzIzIzLjIxLjEwLjAwLjAwCi11bnNwc2M3IzIzLjIxLjEwLjAyLjAwI0dsdWUgZGlzcGVuc2luZyBtYWNoaW5lcnkjMjMuMjEuMTAuMDAuMDAKLXVuc3BzYzcjMjQuMDAuMDAuMDAuMDAjTWF0ZXJpYWwgSGFuZGxpbmcgYW5kIENvbmRpdGlvbmluZyBhbmQgU3RvcmFnZSBNYWNoaW5lcnkgYW5kIHRoZWlyIEFjY2Vzc29yaWVzIGFuZCBTdXBwbGllcyMyNC4wMC4wMC4wMC4wMAotdW5zcHNjNyMyNC4xMC4wMC4wMC4wMCNNYXRlcmlhbCBoYW5kbGluZyBtYWNoaW5lcnkgYW5kIGVxdWlwbWVudCMyNC4wMC4wMC4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNS4wMC4wMCNJbmR1c3RyaWFsIHRydWNrcyMyNC4xMC4wMC4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNS4wMS4wMCNDYXJ0cyMyNC4xMC4xNS4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNS4wMi4wMCNCdWxrIHRyYW5zcG9ydGVycyMyNC4xMC4xNS4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNS4wMy4wMCNEb2xsaWVzIzI0LjEwLjE1LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE1LjA0LjAwI0hhbmQgdHJ1Y2tzIG9yIGFjY2Vzc29yaWVzIzI0LjEwLjE1LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE1LjA1LjAwI1BhbGxldCB0cnVja3MjMjQuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTUuMDYuMDAjUHVzaGNhcnRzIzI0LjEwLjE1LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE1LjA3LjAwI1doZWVsYmFycm93cyMyNC4xMC4xNS4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNS4wOC4wMCNDcmVlcGVycyMyNC4xMC4xNS4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNS4wOS4wMCNXYWdvbnMjMjQuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTUuMTAuMDAjVGlsdCB0cnVja3MjMjQuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTUuMTEuMDAjU2hlbGYgdHJvbGxleXMjMjQuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTYuMDAuMDAjTGlmdGluZyBlcXVpcG1lbnQgYW5kIGFjY2Vzc29yaWVzIzI0LjEwLjAwLjAwLjAwCi11bnNwc2M3IzI0LjEwLjE2LjAxLjAwI0VsZXZhdG9ycyMyNC4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNi4wMi4wMCNIb2lzdHMjMjQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTYuMDMuMDAjRm9ya2xpZnRzIzI0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE2LjA0LjAwI0xpZnRzIzI0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE2LjA1LjAwI0xvYWRpbmcgZXF1aXBtZW50IzI0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE2LjA2LjAwI1N0YWNrZXJzIzI0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE2LjA3LjAwI0NyYW5lcyMyNC4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNi4wOC4wMCNXaW5jaGVzIzI0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE2LjA5LjAwI1RpbHRzIzI0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE2LjEwLjAwI01hbmlwdWxhdG9ycyMyNC4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNi4xMS4wMCNTbGluZ3MjMjQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTYuMTIuMDAjSmFja3MjMjQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTYuMTMuMDAjQmxvY2tzIG9yIHB1bGxleXMjMjQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTYuMTQuMDAjQWlyIGJhZ3MgZm9yIGxvYWRpbmcjMjQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTYuMTUuMDAjTG9hZGluZyByYW1wcyMyNC4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNi4xNi4wMCNCZWxvdyB0aGUgaG9vayBkZXZpY2UjMjQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTYuMTcuMDAjU2Npc3NvciBsaWZ0IzI0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE2LjE4LjAwI1BpcGUgbGF5ZXIjMjQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTYuMTkuMDAjQnJpZGdlIGNyYW5lcyMyNC4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNi4yMC4wMCNUcmFjayBjcmFuZXMjMjQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTYuMjEuMDAjQWxsIHRlcnJhaW4gY3JhbmVzIzI0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE2LjIyLjAwI1JvdWdoIHRlcnJhaW4gY3JhbmVzIzI0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE2LjIzLjAwI1Rvd2VyIGNyYW5lcyMyNC4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNi4yNC4wMCNIeWRyYXVsaWMgdHJ1Y2sgY3JhbmVzIzI0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE2LjI1LjAwI0NvbnZlbnRpb25hbCB0cnVjayBjcmFuZXMjMjQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTYuMjYuMDAjRXNjYWxhdG9yIG9yIHdhbGt3YXlzIzI0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE2LjI3LjAwI0dpcmRlciB0cm9sbGV5cyMyNC4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNi4yOC4wMCNBZGp1c3RhYmxlIGZvcmtzIzI0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE2LjI5LjAwI0ZvcmtsaWZ0IGFjY2Vzc29yaWVzIG9yIHN1cHBsaWVzIzI0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE2LjMwLjAwI1dvcmtzaG9wIGNyYW5lcyMyNC4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNi4zMS4wMCNTdWN0aW9uIGN1cHMjMjQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTYuMzIuMDAjU2lkZSBzaGlmdHMjMjQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTcuMDAuMDAjQ29udmV5b3JzIGFuZCBhY2Nlc3NvcmllcyMyNC4xMC4wMC4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNy4wMS4wMCNDb252ZXlvciByb2xsZXIjMjQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTcuMDIuMDAjQmFsbCB0cmFuc2ZlciB0YWJsZXMjMjQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTcuMDMuMDAjUm9jayBiaW5zIzI0LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE3LjA0LjAwI0NvbnZleW9yIGZlZWRlcnMjMjQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTcuMDUuMDAjQ29udmV5b3Igc2NyZXcjMjQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTcuMDYuMDAjVHJvbGxleXMgb3IgYWNjZXNzb3JpZXMjMjQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTcuMDcuMDAjQ29udmV5b3IgcmFpbHMjMjQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTcuMDguMDAjRXh0ZW5kYWJsZSBjb252ZXlvcnMjMjQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTcuMDkuMDAjUm9sbGVyIGNvbnZleW9ycyMyNC4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNy4xMC4wMCNQYWNrYWdlIHN0b3BzIzI0LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE3LjExLjAwI1R1cm50YWJsZXMjMjQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTcuMTIuMDAjQmVsdCBjb252ZXlvcnMjMjQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTcuMTMuMDAjQnVja2V0IGNvbnZleW9ycyMyNC4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNy4xNC4wMCNBaXIgY29udmV5b3JzIzI0LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE3LjE1LjAwI0NvbnZleW9yIGJlbHRpbmcjMjQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTcuMTYuMDAjQ29udmV5b3IgcHVsbGV5cyMyNC4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNy4xNy4wMCNDb252ZXlvciBpZGxlcnMjMjQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTcuMTguMDAjQ29udmV5b3IgYmVsdCBsYWNpbmcgb3IgZmFzdGVuZXJzIzI0LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE3LjE5LjAwI0NvbnZleW9yIGJlbHQgYnJ1c2hlcyMyNC4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNy4yMC4wMCNXZWFyIHN0cmlwcyMyNC4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNy4yMS4wMCNUcm9sbGV5IGxpZCMyNC4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNC4xMC4xNy4yMi4wMCNDaGFpbiBjb252ZXlvcnMjMjQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTguMDAuMDAjRG9jayBlcXVpcG1lbnQjMjQuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTguMDEuMDAjRG9jayBsZXZlbGVycyMyNC4xMC4xOC4wMC4wMAotdW5zcHNjNyMyNC4xMC4xOC4wMi4wMCNEb2NrIHNlYWxzIzI0LjEwLjE4LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE4LjAzLjAwI0RvY2sgcmFtcHMjMjQuMTAuMTguMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTguMDQuMDAjU3RyaXAgZG9vcnMjMjQuMTAuMTguMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTguMDUuMDAjRG9jayBidW1wZXJzIzI0LjEwLjE4LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE4LjA2LjAwI0RvY2sgbGFkZGVycyMyNC4xMC4xOC4wMC4wMAotdW5zcHNjNyMyNC4xMC4xOC4wNy4wMCNEb2NrIHBsYXRlcyMyNC4xMC4xOC4wMC4wMAotdW5zcHNjNyMyNC4xMC4xOC4wOC4wMCNXaGVlbCBjaG9ja3MjMjQuMTAuMTguMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTguMDkuMDAjRG9jayByYWlscyBhbmQgYWNjZXNzb3JpZXMjMjQuMTAuMTguMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTkuMDAuMDAjRHJ1bSBoYW5kbGluZyBlcXVpcG1lbnQjMjQuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTkuMDEuMDAjRHJ1bSBvcGVuZXJzIzI0LjEwLjE5LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE5LjAyLjAwI0RydW0gZ3JhYnMjMjQuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMTkuMDMuMDAjRHJ1bSBsaWZ0ZXJzIzI0LjEwLjE5LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE5LjA0LjAwI0RydW0gY3JhZGxlcyMyNC4xMC4xOS4wMC4wMAotdW5zcHNjNyMyNC4xMC4xOS4wNS4wMCNTcGlsbCBkZWNrIzI0LjEwLjE5LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE5LjA2LjAwI0RydW0gcmVjdXBlcmF0b3JzIzI0LjEwLjE5LjAwLjAwCi11bnNwc2M3IzI0LjEwLjE5LjA3LjAwI1NwaWxsIGNvbnRhaW5tZW50IHN1cHBvcnRzIzI0LjEwLjE5LjAwLjAwCi11bnNwc2M3IzI0LjEwLjIwLjAwLjAwI1NoZWx2aW5nIGFuZCBzdG9yYWdlIzI0LjEwLjAwLjAwLjAwCi11bnNwc2M3IzI0LjEwLjIwLjAxLjAwI1JhY2sgc3lzdGVtcyBmb3IgcmFjayBtb3VudCBlbGVjdHJvbmljIGVxdWlwbWVudCMyNC4xMC4yMC4wMC4wMAotdW5zcHNjNyMyNC4xMC4yMC4wMi4wMCNCaW4gaGFuZGxlcnMjMjQuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMjAuMDMuMDAjUGFsbGV0cyMyNC4xMC4yMC4wMC4wMAotdW5zcHNjNyMyNC4xMC4yMC4wNC4wMCNTdG9yYWdlIHJhY2tzIG9yIHNoZWx2ZXMjMjQuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMjAuMDUuMDAjQXV0b21hdGVkIHN0b3JhZ2Ugb3IgcmV0cmlldmFsIHN5c3RlbXMjMjQuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMjAuMDYuMDAjV29yayBiZW5jaGVzIzI0LjEwLjIwLjAwLjAwCi11bnNwc2M3IzI0LjEwLjIwLjA3LjAwI1JlZWwgc3RvcmFnZSBzaGVsdmVzIzI0LjEwLjIwLjAwLjAwCi11bnNwc2M3IzI0LjEwLjIwLjA4LjAwI1BvcnRhYmxlIHJlZWwgaG9sZGVycyMyNC4xMC4yMC4wMC4wMAotdW5zcHNjNyMyNC4xMC4yMS4wMC4wMCNXYXJlaG91c2luZyBlcXVpcG1lbnQgYW5kIHN1cHBsaWVzIzI0LjEwLjAwLjAwLjAwCi11bnNwc2M3IzI0LjEwLjIxLjAxLjAwI0NhcmdvIGhhbmRsaW5nIGVxdWlwbWVudCMyNC4xMC4yMS4wMC4wMAotdW5zcHNjNyMyNC4xMC4yMS4wMi4wMCNXYXJlaG91c2UgY2Fyb3VzZWxzIzI0LjEwLjIxLjAwLjAwCi11bnNwc2M3IzI0LjEwLjIxLjAzLjAwI1dhcmVob3VzZSBjYXNlcnMjMjQuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMjEuMDQuMDAjRGVwYWxsZXRpemVycyMyNC4xMC4yMS4wMC4wMAotdW5zcHNjNyMyNC4xMC4yMS4wNS4wMCNQYWxsZXRpemVycyMyNC4xMC4yMS4wMC4wMAotdW5zcHNjNyMyNC4xMC4yMS4wNi4wMCNJbmR1c3RyaWFsIHNocmluayB3cmFwIGVxdWlwbWVudCMyNC4xMC4yMS4wMC4wMAotdW5zcHNjNyMyNC4xMC4yMS4wNy4wMCNDYXJ0b25pbmcgbWFjaGluZXJ5IzI0LjEwLjIxLjAwLjAwCi11bnNwc2M3IzI0LjEwLjIxLjA4LjAwI1BhY2thZ2luZyBjb21wYWN0b3JzIzI0LjEwLjIxLjAwLjAwCi11bnNwc2M3IzI0LjEwLjIyLjAwLjAwI1BhY2tpbmcgdG9vbHMjMjQuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMjIuMDEuMDAjU3RyZXRjaCBmaWxtIGRpc3BlbnNlcnMjMjQuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMjIuMDIuMDAjQm94IHNlYWxpbmcgdGFwZSBkaXNwZW5zZXJzIzI0LjEwLjIyLjAwLjAwCi11bnNwc2M3IzI0LjEwLjIyLjAzLjAwI0JhZyBzZWFsaW5nIHRvb2xzIGFuZCBlcXVpcG1lbnQjMjQuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMjQuMTAuMjIuMDQuMDAjU3RyYXBwaW5nIGRpc3BlbnNlciMyNC4xMC4yMi4wMC4wMAotdW5zcHNjNyMyNC4xMC4yMi4wNS4wMCNTdHJhcHBpbmcgdGVuc2lvbmVycyBvciBzZWFsZXJzIzI0LjEwLjIyLjAwLjAwCi11bnNwc2M3IzI0LjEwLjIyLjA2LjAwI0NhcnRvbiBmb3JtaW5nIG1hY2hpbmVzIzI0LjEwLjIyLjAwLjAwCi11bnNwc2M3IzI0LjEwLjIyLjA3LjAwI1RhcGluZyBtYWNoaW5lcyMyNC4xMC4yMi4wMC4wMAotdW5zcHNjNyMyNC4xMS4wMC4wMC4wMCNDb250YWluZXJzIGFuZCBzdG9yYWdlIzI0LjAwLjAwLjAwLjAwCi11bnNwc2M3IzI0LjExLjE1LjAwLjAwI0JhZ3MjMjQuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMTUuMDEuMDAjQ2FudmFzIGJhZ3MjMjQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMTUuMDIuMDAjUGFwZXIgYmFncyMyNC4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNC4xMS4xNS4wMy4wMCNQbGFzdGljIGJhZ3MjMjQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMTUuMDQuMDAjUG91Y2hlcyMyNC4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNC4xMS4xNS4wNS4wMCNGbGV4aWJsZSBpbnRlcm1lZGlhdGUgYnVsayBjb250YWluZXJzIzI0LjExLjE1LjAwLjAwCi11bnNwc2M3IzI0LjExLjE1LjA2LjAwI0xhdW5kcnkgbmV0cyBvciBiYWdzIzI0LjExLjE1LjAwLjAwCi11bnNwc2M3IzI0LjExLjE1LjA3LjAwI1Rvb2wgYmFncyMyNC4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNC4xMS4xNS4wOC4wMCNUZW50IGJhZyMyNC4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNC4xMS4xNi4wMC4wMCNDb3ZlcnMgYW5kIGNhcHMjMjQuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMTguMDAuMDAjVGFua3MgYW5kIGN5bGluZGVycyBhbmQgdGhlaXIgYWNjZXNzb3JpZXMjMjQuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMTguMDEuMDAjUmVzZXJ2b2lycyMyNC4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNC4xMS4xOC4wMi4wMCNBaXIgb3IgZ2FzIHRhbmtzIG9yIGN5bGluZGVycyMyNC4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNC4xMS4xOC4wMy4wMCNTdG9yYWdlIHRhbmtzIzI0LjExLjE4LjAwLjAwCi11bnNwc2M3IzI0LjExLjE4LjA0LjAwI0NhbGlicmF0aW5nIHRhbmtzIzI0LjExLjE4LjAwLjAwCi11bnNwc2M3IzI0LjExLjE4LjA1LjAwI0NoZW1pY2FsIHRhbmtzIzI0LjExLjE4LjAwLjAwCi11bnNwc2M3IzI0LjExLjE4LjA2LjAwI0RpcCB0YW5rcyMyNC4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNC4xMS4xOC4wNy4wMCNFeHBhbnNpb24gdGFua3MjMjQuMTEuMTguMDAuMDAKLXVuc3BzYzcjMjQuMTEuMTguMDguMDAjRnVlbCBzdG9yYWdlIHRhbmtzIzI0LjExLjE4LjAwLjAwCi11bnNwc2M3IzI0LjExLjE4LjA5LjAwI1Byb2Nlc3NpbmcgdGFua3MjMjQuMTEuMTguMDAuMDAKLXVuc3BzYzcjMjQuMTEuMTguMTAuMDAjV2F0ZXIgc3RvcmFnZSB0YW5rcyMyNC4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNC4xMS4xOC4xMS4wMCNDYXJib3lzIzI0LjExLjE4LjAwLjAwCi11bnNwc2M3IzI0LjExLjE4LjEyLjAwI0NvbnRhaW5tZW50IGJhc2luIzI0LjExLjE4LjAwLjAwCi11bnNwc2M3IzI0LjExLjE4LjEzLjAwI1JpbnNlIHRhbmtzIzI0LjExLjE4LjAwLjAwCi11bnNwc2M3IzI0LjExLjIwLjAwLjAwI0JpbnMgYW5kIGJhc2tldHMjMjQuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjAuMDEuMDAjQmlucyMyNC4xMS4yMC4wMC4wMAotdW5zcHNjNyMyNC4xMS4yMC4wMi4wMCNCYXNrZXRzIzI0LjExLjIwLjAwLjAwCi11bnNwc2M3IzI0LjExLjIwLjAzLjAwI05vbiBtZXRhbGxpYyBiaW5zIzI0LjExLjIwLjAwLjAwCi11bnNwc2M3IzI0LjExLjIwLjA0LjAwI01ldGFsbGljIGJpbnMjMjQuMTEuMjAuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjAuMDUuMDAjTWV0YWxsaWMgYmFza2V0cyMyNC4xMS4yMC4wMC4wMAotdW5zcHNjNyMyNC4xMS4yMC4wNi4wMCNOb24gbWV0YWxsaWMgYmFza2V0cyMyNC4xMS4yMC4wMC4wMAotdW5zcHNjNyMyNC4xMS4yMS4wMC4wMCNDYXNrcyBhbmQgYmFycmVscyBhbmQgZHJ1bXMjMjQuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjEuMDEuMDAjQ2Fza3MjMjQuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjEuMDIuMDAjQmFycmVscyMyNC4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNC4xMS4yMS4wMy4wMCNTdGFpbmxlc3Mgc3RlZWwgZHJ1bXMjMjQuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjEuMDQuMDAjU3RlZWwgZHJ1bXMjMjQuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjEuMDUuMDAjUG9seWV0aHlsZW5lIGRydW1zIzI0LjExLjIxLjAwLjAwCi11bnNwc2M3IzI0LjExLjIxLjA2LjAwI0NvbXBvc2l0ZSBkcnVtcyMyNC4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNC4xMS4yMS4wNy4wMCNGaWJlciBkcnVtcyMyNC4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNC4xMS4yMS4wOC4wMCNNZXRhbGxpYyBkcnVtcyMyNC4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNC4xMS4yMS4wOS4wMCNOb24gbWV0YWxsaWMgZHJ1bXMjMjQuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjEuMTAuMDAjSW50ZXJtZWRpYXRlIGJ1bGsgY29udGFpbmVycyMyNC4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNC4xMS4yMS4xMS4wMCNTdGFiaWxpemVyIzI0LjExLjIxLjAwLjAwCi11bnNwc2M3IzI0LjExLjIxLjEyLjAwI0RydW0gbGlkIzI0LjExLjIxLjAwLjAwCi11bnNwc2M3IzI0LjExLjIyLjAwLjAwI0NhbnMgYW5kIHBhaWxzIzI0LjExLjAwLjAwLjAwCi11bnNwc2M3IzI0LjExLjIyLjAxLjAwI1N0ZWVsIHBhaWxzIzI0LjExLjIyLjAwLjAwCi11bnNwc2M3IzI0LjExLjIyLjAyLjAwI0dhc29saW5lIGNhbnMjMjQuMTEuMjIuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjIuMDMuMDAjUGxhc3RpYyBwYWlscyMyNC4xMS4yMi4wMC4wMAotdW5zcHNjNyMyNC4xMS4yMi4wNC4wMCNNZXRhbGxpYyBwYWlscyMyNC4xMS4yMi4wMC4wMAotdW5zcHNjNyMyNC4xMS4yMi4wNS4wMCNOb24gbWV0YWxsaWMgcGFpbHMjMjQuMTEuMjIuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjIuMDYuMDAjTWV0YWxsaWMgZmxhbW1hYmxlIGxpcXVpZCBjYW5zIzI0LjExLjIyLjAwLjAwCi11bnNwc2M3IzI0LjExLjIyLjA3LjAwI05vbiBtZXRhbGxpYyBmbGFtbWFibGUgbGlxdWlkIGNhbnMjMjQuMTEuMjIuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjIuMDguMDAjU3ByYXkga2l0IzI0LjExLjIyLjAwLjAwCi11bnNwc2M3IzI0LjExLjIyLjA5LjAwI0plcnJ5Y2FucyMyNC4xMS4yMi4wMC4wMAotdW5zcHNjNyMyNC4xMS4yNC4wMC4wMCNTdG9yYWdlIGNoZXN0cyBhbmQgY2FiaW5ldHMgYW5kIHRydW5rcyMyNC4xMS4wMC4wMC4wMAotdW5zcHNjNyMyNC4xMS4yNC4wMS4wMCNUb29sIGNoZXN0cyBvciBib3hlcyBvciBjYWJpbmV0cyMyNC4xMS4yNC4wMC4wMAotdW5zcHNjNyMyNC4xMS4yNC4wMi4wMCNIYXphcmRvdXMgbWF0ZXJpYWxzIGNhYmluZXRzIzI0LjExLjI0LjAwLjAwCi11bnNwc2M3IzI0LjExLjI0LjAzLjAwI1Rvb2wgYmVsdHMjMjQuMTEuMjQuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjQuMDQuMDAjQm94IzI0LjExLjI0LjAwLjAwCi11bnNwc2M3IzI0LjExLjI0LjA1LjAwI0RyYXdlcnMjMjQuMTEuMjQuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjQuMDYuMDAjQm94IG9yIHNoZWxmIHBhcnRpdGlvbnMjMjQuMTEuMjQuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjQuMDcuMDAjTWFpbCBib3hlcyMyNC4xMS4yNC4wMC4wMAotdW5zcHNjNyMyNC4xMS4yNC4wOC4wMCNBbnRpc3RhdGljIGJveGVzIzI0LjExLjI0LjAwLjAwCi11bnNwc2M3IzI0LjExLjI0LjA5LjAwI0JveCBsaWRzIzI0LjExLjI0LjAwLjAwCi11bnNwc2M3IzI0LjExLjI1LjAwLjAwI0NvcnJ1Z2F0ZWQgYW5kIG90aGVyIGJveGVzIGZvciBkaXN0cmlidXRpb24jMjQuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjUuMDEuMDAjU2xvdHRlZCBjb3JydWdhdGVkIGNhcnRvbnMjMjQuMTEuMjUuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjUuMDIuMDAjT25lIHBpZWNlIGRpZSBjdXQgc2hpcHBpbmcgY2FydG9ucyMyNC4xMS4yNS4wMC4wMAotdW5zcHNjNyMyNC4xMS4yNS4wMy4wMCNEaWUgY3V0IGNvcnJ1Z2F0ZWQgc2hpcHBpbmcgY2FydG9ucyB3aXRoIHNlcGFyYXRlIGxpZHMjMjQuMTEuMjUuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjUuMDQuMDAjTW9sZGVkIGJveGVzIzI0LjExLjI1LjAwLjAwCi11bnNwc2M3IzI0LjExLjI1LjA1LjAwI1JpZ2lkIGJveGVzIzI0LjExLjI1LjAwLjAwCi11bnNwc2M3IzI0LjExLjI1LjA2LjAwI0ZsZXhpYmxlIGludGVybWVkaWF0ZSBidWxrIGNvbnRhaW5lcnMjMjQuMTEuMjUuMDAuMDAKLXVuc3BzYzcjMjQuMTEuMjUuMDcuMDAjSW50ZXJtZWRpYXRlIGJ1bGsgY29udGFpbmVycyMyNC4xMS4yNS4wMC4wMAotdW5zcHNjNyMyNC4xMS4yNi4wMC4wMCNMaXF1aWQgY29udGFpbmVycyMyNC4xMS4wMC4wMC4wMAotdW5zcHNjNyMyNC4xMS4yNi4wMS4wMCNKdWdzIzI0LjExLjI2LjAwLjAwCi11bnNwc2M3IzI0LjExLjI2LjAyLjAwI0phcnMjMjQuMTEuMjYuMDAuMDAKLXVuc3BzYzcjMjQuMTIuMDAuMDAuMDAjUGFja2FnaW5nIG1hdGVyaWFscyMyNC4wMC4wMC4wMC4wMAotdW5zcHNjNyMyNC4xMi4xNS4wMC4wMCNQYWNrYWdpbmcgYm94ZXMgYW5kIGJhZ3MgYW5kIHBvdWNoZXMjMjQuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjQuMTIuMTUuMDEuMDAjUG9seSBiYWdzIzI0LjEyLjE1LjAwLjAwCi11bnNwc2M3IzI0LjEyLjE1LjAyLjAwI1BhY2thZ2luZyBwb3VjaGVzIG9yIGJhZ3MjMjQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTIuMTUuMDMuMDAjUGFja2FnaW5nIGJveGVzIzI0LjEyLjE1LjAwLjAwCi11bnNwc2M3IzI0LjEyLjE1LjA0LjAwI0NhcmRlZCBwYWNrYWdpbmcjMjQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTIuMTUuMDUuMDAjVGFycGF1bGlucyMyNC4xMi4xNS4wMC4wMAotdW5zcHNjNyMyNC4xMi4xNS4wNi4wMCNDb25kdWN0aXZlIGJveGVzIzI0LjEyLjE1LjAwLjAwCi11bnNwc2M3IzI0LjEyLjE1LjA3LjAwI1JpZ2lkIHNldCB1cCBib3hlcyMyNC4xMi4xNS4wMC4wMAotdW5zcHNjNyMyNC4xMi4xNS4wOC4wMCNFZ2cgdHJheXMjMjQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTIuMTguMDAuMDAjUGFja2FnaW5nIGNhbnMjMjQuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjQuMTIuMTguMDEuMDAjQWVyb3NvbCBjYW5zIzI0LjEyLjE4LjAwLjAwCi11bnNwc2M3IzI0LjEyLjE4LjAyLjAwI1BhaW50IG9yIHZhcm5pc2ggY2FucyMyNC4xMi4xOC4wMC4wMAotdW5zcHNjNyMyNC4xMi4xOC4wMy4wMCNCZXZlcmFnZSBjYW5zIzI0LjEyLjE4LjAwLjAwCi11bnNwc2M3IzI0LjEyLjE4LjA0LjAwI0Zvb2QgY2FucyMyNC4xMi4xOC4wMC4wMAotdW5zcHNjNyMyNC4xMi4xOC4wNS4wMCNTdGVlbCBjYW5zIzI0LjEyLjE4LjAwLjAwCi11bnNwc2M3IzI0LjEyLjE4LjA2LjAwI0FsdW1pbnVtIGNhbnMjMjQuMTIuMTguMDAuMDAKLXVuc3BzYzcjMjQuMTIuMjAuMDAuMDAjQm90dGxlcyMyNC4xMi4wMC4wMC4wMAotdW5zcHNjNyMyNC4xMi4yMC4wMS4wMCNTcXVlZXplIGJvdHRsZXMjMjQuMTIuMjAuMDAuMDAKLXVuc3BzYzcjMjQuMTIuMjAuMDIuMDAjUGxhc3RpYyBib3R0bGVzIzI0LjEyLjIwLjAwLjAwCi11bnNwc2M3IzI0LjEyLjIwLjAzLjAwI0dsYXNzIGJvdHRsZXMjMjQuMTIuMjAuMDAuMDAKLXVuc3BzYzcjMjQuMTIuMjAuMDQuMDAjQ2FwcyBvciB0b3BzIzI0LjEyLjIwLjAwLjAwCi11bnNwc2M3IzI0LjEyLjIwLjA1LjAwI0FwcGxpY2F0b3IgYm90dGxlcyMyNC4xMi4yMC4wMC4wMAotdW5zcHNjNyMyNC4xMi4yMC4wNi4wMCNBcHBsaWNhdG9ycyMyNC4xMi4yMC4wMC4wMAotdW5zcHNjNyMyNC4xMy4wMC4wMC4wMCNJbmR1c3RyaWFsIHJlZnJpZ2VyYXRpb24jMjQuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjQuMTMuMTUuMDAuMDAjSW5kdXN0cmlhbCByZWZyaWdlcmF0b3JzIzI0LjEzLjAwLjAwLjAwCi11bnNwc2M3IzI0LjEzLjE1LjAxLjAwI0NvbWJpbmVkIHJlZnJpZ2VyYXRvciBmcmVlemVycyMyNC4xMy4xNS4wMC4wMAotdW5zcHNjNyMyNC4xMy4xNS4wMi4wMCNMaXF1aWQgbml0cm9nZW4gcmVmcmlnZXJhdG9ycyMyNC4xMy4xNS4wMC4wMAotdW5zcHNjNyMyNC4xMy4xNS4wMy4wMCNXYWxrIGluIHJlZnJpZ2VyYXRvcnMjMjQuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTMuMTUuMDQuMDAjUmVmcmlnZXJhdGVkIGNvbnRhaW5lcnMjMjQuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTMuMTUuMDUuMDAjUmVmcmlnZXJhdGVkIHZlc3NlbHMjMjQuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTMuMTUuMDYuMDAjUmVmcmlnZXJhdGVkIHRhbmtzIzI0LjEzLjE1LjAwLjAwCi11bnNwc2M3IzI0LjEzLjE2LjAwLjAwI0luZHVzdHJpYWwgZnJlZXplcnMjMjQuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMjQuMTMuMTYuMDEuMDAjQ2hlc3QgZnJlZXplcnMjMjQuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTMuMTYuMDIuMDAjVXByaWdodCBmcmVlemVycyMyNC4xMy4xNi4wMC4wMAotdW5zcHNjNyMyNC4xMy4xNi4wMy4wMCNMb3cgdGVtcGVyYXR1cmUgZnJlZXplcnMjMjQuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTMuMTYuMDQuMDAjRnJlZXplIGRyeWluZyBlcXVpcG1lbnQjMjQuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTMuMTYuMDUuMDAjV2FsayBpbiBmcmVlemVycyMyNC4xMy4xNi4wMC4wMAotdW5zcHNjNyMyNC4xMy4xNi4wNi4wMCNQbGF0ZSBmcmVlemVycyMyNC4xMy4xNi4wMC4wMAotdW5zcHNjNyMyNC4xMy4xNi4wNy4wMCNCbGFzdCBmcmVlemVycyMyNC4xMy4xNi4wMC4wMAotdW5zcHNjNyMyNC4xMy4xOS4wMC4wMCNJY2UgbWFrZXJzIzI0LjEzLjAwLjAwLjAwCi11bnNwc2M3IzI0LjEzLjE5LjAxLjAwI0ljZSBjdWJlIG1ha2VycyMyNC4xMy4xOS4wMC4wMAotdW5zcHNjNyMyNC4xMy4xOS4wMi4wMCNJY2UgYmxvY2sgbWFrZXJzIzI0LjEzLjE5LjAwLjAwCi11bnNwc2M3IzI0LjE0LjAwLjAwLjAwI1BhY2tpbmcgc3VwcGxpZXMjMjQuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjQuMTQuMTUuMDAuMDAjU2VjdXJpbmcgYW5kIHByb3RlY3Rpbmcgc3VwcGxpZXMjMjQuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMjQuMTQuMTUuMDEuMDAjU3RyZXRjaCB3cmFwIGZpbG1zIzI0LjE0LjE1LjAwLjAwCi11bnNwc2M3IzI0LjE0LjE1LjAyLjAwI1NocmluayB3cmFwIGZpbG1zIzI0LjE0LjE1LjAwLjAwCi11bnNwc2M3IzI0LjE0LjE1LjAzLjAwI1BvbHlldGh5bGVuZSBmaWxtcyMyNC4xNC4xNS4wMC4wMAotdW5zcHNjNyMyNC4xNC4xNS4wNC4wMCNUYW1wZXIgcHJvb2Ygb3Igc2VjdXJpdHkgc2VhbHMjMjQuMTQuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTQuMTUuMDUuMDAjUG9seWV0aHlsZW5lIGZpbG1zIzI0LjE0LjE1LjAwLjAwCi11bnNwc2M3IzI0LjE0LjE1LjA2LjAwI1RhcnBhdWxpbnMjMjQuMTQuMTUuMDAuMDAKLXVuc3BzYzcjMjQuMTQuMTUuMDcuMDAjQW50aSBzdGF0aWMgcGFja2FnaW5nIGZpbG1zIzI0LjE0LjE1LjAwLjAwCi11bnNwc2M3IzI0LjE0LjE1LjA4LjAwI0NhcnRvbiBjb3JuZXIgc3VwcG9ydCMyNC4xNC4xNS4wMC4wMAotdW5zcHNjNyMyNC4xNC4xNS4wOS4wMCNSdWJiZXIgY29yZCMyNC4xNC4xNS4wMC4wMAotdW5zcHNjNyMyNC4xNC4xNS4xMC4wMCNDYWJsZSBwcm90ZWN0b3JzIzI0LjE0LjE1LjAwLjAwCi11bnNwc2M3IzI0LjE0LjE1LjExLjAwI0xvYWQgYmluZGVycyMyNC4xNC4xNS4wMC4wMAotdW5zcHNjNyMyNC4xNC4xNi4wMC4wMCNDdXNoaW9uaW5nIHN1cHBsaWVzIzI0LjE0LjAwLjAwLjAwCi11bnNwc2M3IzI0LjE0LjE2LjAxLjAwI0J1YmJsZSB3cmFwIzI0LjE0LjE2LjAwLjAwCi11bnNwc2M3IzI0LjE0LjE2LjAyLjAwI1RoZXJtb2Zvcm1pbmcgbWF0ZXJpYWxzIzI0LjE0LjE2LjAwLjAwCi11bnNwc2M3IzI0LjE0LjE2LjAzLjAwI0N1c2hpb25pbmcjMjQuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTQuMTYuMDQuMDAjV2FkZGluZyBtYXRlcmlhbHMjMjQuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTQuMTYuMDUuMDAjQWlyIGZpbGxlZCBwYWNraW5nIG1hdGVyaWFscyMyNC4xNC4xNi4wMC4wMAotdW5zcHNjNyMyNC4xNC4xNi4wNi4wMCNQYWNraW5nIHBlYW51dHMjMjQuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTQuMTYuMDcuMDAjQ2FyZGJvYXJkIGluc2VydHMjMjQuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMjQuMTQuMTYuMDguMDAjUHJvdGVjdGl2ZSBlbmRzIzI0LjE0LjE2LjAwLjAwCi11bnNwc2M3IzI0LjE0LjE3LjAwLjAwI1BhY2thZ2luZyB0dWJlcyBhbmQgY29yZXMgYW5kIGxhYmVscyBhbmQgYWNjZXNzb3JpZXMjMjQuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMjQuMTQuMTcuMDEuMDAjUGFwZXIgdHViZXMgb3IgY29yZXMjMjQuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMjQuMTQuMTcuMDIuMDAjVHViZSBvciBjb3JlIGVuZCBwbHVncyMyNC4xNC4xNy4wMC4wMAotdW5zcHNjNyMyNC4xNC4xNy4wMy4wMCNQYXBlciBwaWVjZXMjMjQuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMjQuMTQuMTcuMDQuMDAjUHJpbnRlZCBpbnNlcnRzIG9yIGluc3RydWN0aW9ucyMyNC4xNC4xNy4wMC4wMAotdW5zcHNjNyMyNC4xNC4xNy4wNS4wMCNDb2xsYXBzaWJsZSB0dWJlcyMyNC4xNC4xNy4wMC4wMAotdW5zcHNjNyMyNC4xNC4xNy4wNi4wMCNTcG9vbCMyNC4xNC4xNy4wMC4wMAotdW5zcHNjNyMyNC4xNC4xNy4wNy4wMCNSZWVsIzI0LjE0LjE3LjAwLjAwCi11bnNwc2M3IzI1LjAwLjAwLjAwLjAwI0NvbW1lcmNpYWwgYW5kIE1pbGl0YXJ5IGFuZCBQcml2YXRlIFZlaGljbGVzIGFuZCB0aGVpciBBY2Nlc3NvcmllcyBhbmQgQ29tcG9uZW50cyMyNS4wMC4wMC4wMC4wMAotdW5zcHNjNyMyNS4xMC4wMC4wMC4wMCNNb3RvciB2ZWhpY2xlcyMyNS4wMC4wMC4wMC4wMAotdW5zcHNjNyMyNS4xMC4xNS4wMC4wMCNQYXNzZW5nZXIgbW90b3IgdmVoaWNsZXMjMjUuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTAuMTUuMDEuMDAjTWluaWJ1c2VzIzI1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzI1LjEwLjE1LjAyLjAwI0J1c3NlcyMyNS4xMC4xNS4wMC4wMAotdW5zcHNjNyMyNS4xMC4xNS4wMy4wMCNBdXRvbW9iaWxlcyBvciBjYXJzIzI1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzI1LjEwLjE1LjA0LjAwI1N0YXRpb24gd2Fnb25zIzI1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzI1LjEwLjE1LjA1LjAwI01pbml2YW5zIG9yIHZhbnMjMjUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTAuMTUuMDYuMDAjTGltb3VzaW5lcyMyNS4xMC4xNS4wMC4wMAotdW5zcHNjNyMyNS4xMC4xNS4wNy4wMCNMaWdodCB0cnVja3Mgb3Igc3BvcnQgdXRpbGl0eSB2ZWhpY2xlcyMyNS4xMC4xNS4wMC4wMAotdW5zcHNjNyMyNS4xMC4xNi4wMC4wMCNQcm9kdWN0IGFuZCBtYXRlcmlhbCB0cmFuc3BvcnQgdmVoaWNsZXMjMjUuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTAuMTYuMDEuMDAjRHVtcCB0cnVja3MjMjUuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjUuMTAuMTYuMDIuMDAjVG93IHRydWNrcyMyNS4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNS4xMC4xNi4wNC4wMCNEZWxpdmVyeSB0cnVja3MjMjUuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjUuMTAuMTYuMDkuMDAjU2x1ZGdlIG9yIHNld2FnZSBoYW5kbGluZyB0cnVja3MjMjUuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjUuMTAuMTcuMDAuMDAjU2FmZXR5IGFuZCByZXNjdWUgdmVoaWNsZXMjMjUuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTAuMTcuMDEuMDAjRmlyZSBvciByZXNjdWUgdHJ1Y2tzIzI1LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI1LjEwLjE3LjAyLjAwI1BvbGljZSB2ZWhpY2xlcyMyNS4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMC4xNy4wMy4wMCNBbWJ1bGFuY2VzIzI1LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI1LjEwLjE4LjAwLjAwI01vdG9yaXplZCBjeWNsZXMjMjUuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTAuMTguMDEuMDAjTW90b3JjeWNsZXMjMjUuMTAuMTguMDAuMDAKLXVuc3BzYzcjMjUuMTAuMTguMDIuMDAjU2Nvb3RlcnMjMjUuMTAuMTguMDAuMDAKLXVuc3BzYzcjMjUuMTAuMTguMDMuMDAjTW9wZWRzIzI1LjEwLjE4LjAwLjAwCi11bnNwc2M3IzI1LjEwLjE5LjAwLjAwI1NwZWNpYWxpemVkIGFuZCByZWNyZWF0aW9uYWwgdmVoaWNsZXMjMjUuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTAuMTkuMDEuMDAjQWdyaWN1bHR1cmFsIHRyYWN0b3JzIzI1LjEwLjE5LjAwLjAwCi11bnNwc2M3IzI1LjEwLjE5LjAyLjAwI01vdG9yIGhvbWVzIzI1LjEwLjE5LjAwLjAwCi11bnNwc2M3IzI1LjEwLjE5LjAzLjAwI1Nub3dtb2JpbGVzIG9yIHNub3cgc2Nvb3RlciMyNS4xMC4xOS4wMC4wMAotdW5zcHNjNyMyNS4xMC4xOS4wNC4wMCNHb2xmIGNhcnRzIzI1LjEwLjE5LjAwLjAwCi11bnNwc2M3IzI1LjEwLjE5LjA1LjAwI0FsbCB0ZXJyYWluIHZlaGljbGVzIHRyYWNrZWQgb3Igd2hlZWxlZCMyNS4xMC4xOS4wMC4wMAotdW5zcHNjNyMyNS4xMC4xOS4wNi4wMCNHbyBjYXJ0IzI1LjEwLjE5LjAwLjAwCi11bnNwc2M3IzI1LjEwLjIwLjAwLjAwI1dhciB2ZWhpY2xlcyMyNS4xMC4wMC4wMC4wMAotdW5zcHNjNyMyNS4xMC4yMC4wMS4wMCNUYW5rcyMyNS4xMC4yMC4wMC4wMAotdW5zcHNjNyMyNS4xMC4yMC4wMi4wMCNBcm1vcmVkIGZpZ2h0aW5nIHZlaGljbGVzIzI1LjEwLjIwLjAwLjAwCi11bnNwc2M3IzI1LjEwLjIwLjAzLjAwI1NlbGYgcHJvcGVsbGVkIGFydGlsbGVyeSMyNS4xMC4yMC4wMC4wMAotdW5zcHNjNyMyNS4xMC4yMS4wMC4wMCNUcnVjayB0cmFjdG9ycyMyNS4xMC4wMC4wMC4wMAotdW5zcHNjNyMyNS4xMC4yMS4wMS4wMCNMb3cgY2FiIGZvcndhcmQgdHJhY3RvcnMjMjUuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMjUuMTAuMjEuMDIuMDAjTG9uZyBub3NlIHRyYWN0b3JzIHdpdGggc2xlZXBlciMyNS4xMC4yMS4wMC4wMAotdW5zcHNjNyMyNS4xMC4yMS4wMy4wMCNMb25nIG5vc2UgdHJhY3RvcnMgd2l0aG91dCBzbGVlcGVyIzI1LjEwLjIxLjAwLjAwCi11bnNwc2M3IzI1LjEwLjIxLjA0LjAwI0NhYiBvdmVyIGVuZ2luZSB0cmFjdG9ycyB3aXRoIHNsZWVwZXIjMjUuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMjUuMTAuMjEuMDUuMDAjQ2FiIG92ZXIgZW5naW5lIHRyYWN0b3JzIHdpdGhvdXQgc2xlZXBlciMyNS4xMC4yMS4wMC4wMAotdW5zcHNjNyMyNS4xMS4wMC4wMC4wMCNNYXJpbmUgdHJhbnNwb3J0IzI1LjAwLjAwLjAwLjAwCi11bnNwc2M3IzI1LjExLjE1LjAwLjAwI0NvbW1lcmNpYWwgbWFyaW5lIGNyYWZ0IzI1LjExLjAwLjAwLjAwCi11bnNwc2M3IzI1LjExLjE1LjAxLjAwI1RyYXdsZXJzIzI1LjExLjE1LjAwLjAwCi11bnNwc2M3IzI1LjExLjE1LjAyLjAwI0Zpc2hpbmcgYm9hdHMjMjUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTUuMDMuMDAjQ2FyZ28gb3IgY29udGFpbmVyIHNoaXBzIzI1LjExLjE1LjAwLjAwCi11bnNwc2M3IzI1LjExLjE1LjA0LjAwI0RyZWRnaW5nIGNyYWZ0IzI1LjExLjE1LjAwLjAwCi11bnNwc2M3IzI1LjExLjE1LjA1LjAwI1RhbmtlcnMjMjUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTUuMDYuMDAjVHVnIGJvYXRzIzI1LjExLjE1LjAwLjAwCi11bnNwc2M3IzI1LjExLjE1LjA3LjAwI0JhcmdlcyMyNS4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNS4wOC4wMCNQYXNzZW5nZXIgb3IgYXV0b21vYmlsZSBmZXJyaWVzIzI1LjExLjE1LjAwLjAwCi11bnNwc2M3IzI1LjExLjE1LjA5LjAwI0NydWlzZSBzaGlwcyMyNS4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNS4xMC4wMCNTYWx2YWdlIHNoaXBzIzI1LjExLjE1LjAwLjAwCi11bnNwc2M3IzI1LjExLjE1LjExLjAwI09pbCBvciBnYXMgY3JldyBib2F0IzI1LjExLjE1LjAwLjAwCi11bnNwc2M3IzI1LjExLjE1LjEyLjAwI09pbCBvciBnYXMgd29ya2JvYXQjMjUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTUuMTMuMDAjU2Vpc21pYyB2ZXNzZWwjMjUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTYuMDAuMDAjU2FmZXR5IGFuZCByZXNjdWUgd2F0ZXIgY3JhZnQjMjUuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTYuMDEuMDAjTGlmZWJvYXRzIG9yIGxpZmVyYWZ0cyMyNS4xMS4xNi4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNi4wMi4wMCNGaXJlIGZpZ2h0aW5nIHdhdGVyY3JhZnQjMjUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTYuMDMuMDAjUmVzY3VlIHNoaXBzIG9yIGJvYXRzIzI1LjExLjE2LjAwLjAwCi11bnNwc2M3IzI1LjExLjE3LjAwLjAwI01pbGl0YXJ5IHdhdGVyY3JhZnQjMjUuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTcuMDEuMDAjU3VibWFyaW5lcyMyNS4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNy4wMi4wMCNBaXJjcmFmdCBjYXJyaWVycyMyNS4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNy4wMy4wMCNBbW11bml0aW9uIHNoaXBzIzI1LjExLjE3LjAwLjAwCi11bnNwc2M3IzI1LjExLjE3LjA0LjAwI0FtcGhpYmlvdXMgYXNzYXVsdCBzaGlwcyMyNS4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNy4wNS4wMCNBbXBoaWJpb3VzIHRyYW5zcG9ydCBkb2NrcyMyNS4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNy4wNi4wMCNBbXBoaWJpb3VzIGNvbW1hbmQgc2hpcHMjMjUuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTcuMDcuMDAjQ29tbWFuZCBzaGlwcyMyNS4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNy4wOC4wMCNDcnVpc2VycyMyNS4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNy4wOS4wMCNEZXN0cm95ZXJzIzI1LjExLjE3LjAwLjAwCi11bnNwc2M3IzI1LjExLjE3LjEwLjAwI0RvY2sgbGFuZGluZyBzaGlwcyMyNS4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNy4xMS4wMCNGYXN0IGNvbWJhdCBzdXBwb3J0IHNoaXBzIzI1LjExLjE3LjAwLjAwCi11bnNwc2M3IzI1LjExLjE3LjEyLjAwI0ZyaWdhdGVzIzI1LjExLjE3LjAwLjAwCi11bnNwc2M3IzI1LjExLjE3LjEzLjAwI0ZsZWV0IG9pbGVycyMyNS4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNy4xNC4wMCNVdGlsaXR5IGxhbmRpbmcgd2F0ZXJjcmFmdCMyNS4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNy4xNS4wMCNNZWNoYW5pemVkIG9yIHV0aWxpdHkgd2F0ZXJjcmFmdCMyNS4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNy4xNi4wMCNNaW5lIGh1bnRpbmcgc2hpcHMjMjUuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTcuMTcuMDAjTWluZSBjb3VudGVybWVhc3VyZXMgc2hpcHMjMjUuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTcuMTguMDAjQ29hc3RhbCBwYXRyb2wgd2F0ZXJjcmFmdCMyNS4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNy4xOS4wMCNTdWJtYXJpbmUgdGVuZGVycyMyNS4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMS4xNy4yMC4wMCNUYW5rIGxhbmRpbmcgc2hpcHMjMjUuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTcuMjEuMDAjQWlyIGN1c2hpb25lZCBsYW5kaW5nIHdhdGVyY3JhZnQjMjUuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTguMDAuMDAjUmVjcmVhdGlvbmFsIHdhdGVyY3JhZnQjMjUuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTguMDEuMDAjUmVjcmVhdGlvbmFsIHNhaWxib2F0cyMyNS4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNS4xMS4xOC4wMi4wMCNSZWNyZWF0aW9uYWwgbW90b3Jib2F0cyMyNS4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNS4xMS4xOC4wMy4wMCNSZWNyZWF0aW9uYWwgcm93Ym9hdHMjMjUuMTEuMTguMDAuMDAKLXVuc3BzYzcjMjUuMTEuMTguMDQuMDAjQ2Fub2VzIG9yIGtheWFrcyMyNS4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNS4xMS4xOC4wNS4wMCNQZXJzb25hbCBtb3Rvcml6ZWQgd2F0ZXJjcmFmdCMyNS4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNS4xMS4xOC4wNi4wMCNSYWZ0cyMyNS4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNS4xMS4xOS4wMC4wMCNNYXJpbmUgY3JhZnQgc3lzdGVtcyBhbmQgc3ViYXNzZW1ibGllcyMyNS4xMS4wMC4wMC4wMAotdW5zcHNjNyMyNS4xMS4xOS4wMS4wMCNNYXJpbmUgY3JhZnQgY29tbXVuaWNhdGlvbnMgc3lzdGVtcyMyNS4xMS4xOS4wMC4wMAotdW5zcHNjNyMyNS4xMS4xOS4wMi4wMCNNYXJpbmUgcHJvcGVsbGVycyMyNS4xMS4xOS4wMC4wMAotdW5zcHNjNyMyNS4xMS4xOS4wMy4wMCNTYWlscyMyNS4xMS4xOS4wMC4wMAotdW5zcHNjNyMyNS4xMS4xOS4wNC4wMCNQYWRkbGVzIzI1LjExLjE5LjAwLjAwCi11bnNwc2M3IzI1LjExLjE5LjA1LjAwI01hcmluZSBiYWxsYXN0IHN5c3RlbXMjMjUuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMjUuMTIuMDAuMDAuMDAjUmFpbHdheSBhbmQgdHJhbXdheSBtYWNoaW5lcnkgYW5kIGVxdWlwbWVudCMyNS4wMC4wMC4wMC4wMAotdW5zcHNjNyMyNS4xMi4xNS4wMC4wMCNMb2NvbW90aXZlcyBhbmQgZWxlY3RyaWMgdHJvbGxleXMjMjUuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTIuMTUuMDEuMDAjRGllc2VsIGZyZWlnaHQgbG9jb21vdGl2ZXMjMjUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTIuMTUuMDIuMDAjRWxlY3RyaWMgZnJlaWdodCBsb2NvbW90aXZlcyMyNS4xMi4xNS4wMC4wMAotdW5zcHNjNyMyNS4xMi4xNS4wMy4wMCNEaWVzZWwgcGFzc2VuZ2VyIGxvY29tb3RpdmVzIzI1LjEyLjE1LjAwLjAwCi11bnNwc2M3IzI1LjEyLjE1LjA0LjAwI0VsZWN0cmljIHBhc3NlbmdlciBsb2NvbW90aXZlcyMyNS4xMi4xNS4wMC4wMAotdW5zcHNjNyMyNS4xMi4xNi4wMC4wMCNSYWlsd2F5IGFuZCB0cmFtd2F5IGNhcnMjMjUuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTIuMTYuMDEuMDAjRnJlaWdodCByYWlsIGNhcnMjMjUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjUuMTIuMTYuMDIuMDAjVGFua2VyIHJhaWwgY2FycyMyNS4xMi4xNi4wMC4wMAotdW5zcHNjNyMyNS4xMi4xNi4wMy4wMCNQYXNzZW5nZXIgcmFpbCBjYXJzIzI1LjEyLjE2LjAwLjAwCi11bnNwc2M3IzI1LjEyLjE2LjA0LjAwI0hvcHBlciByYWlsIGNhcnMjMjUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjUuMTIuMTYuMDUuMDAjU3RyZWV0Y2FycyBvciB0cmFtd2F5IGNhcnMjMjUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjUuMTIuMTcuMDAuMDAjUmFpbHJvYWQgc3VwcG9ydCBlcXVpcG1lbnQgYW5kIHN5c3RlbXMjMjUuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTIuMTcuMDEuMDAjUmFpbCBzd2l0Y2hpbmcgc3lzdGVtcyMyNS4xMi4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMi4xNy4wMi4wMCNSYWlsd2F5IHNsZWVwZXJzIzI1LjEyLjE3LjAwLjAwCi11bnNwc2M3IzI1LjEyLjE3LjAzLjAwI1JhaWx3YXkgdHJhY2tzIzI1LjEyLjE3LjAwLjAwCi11bnNwc2M3IzI1LjEyLjE3LjA0LjAwI1JhaWx3YXkgZnJvZ3Mgb3IgZmlzaCBwbGF0ZXMjMjUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMDAuMDAuMDAjQWlyY3JhZnQjMjUuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMTUuMDAuMDAjUG93ZXJlZCBmaXhlZCB3aW5nIGFpcmNyYWZ0IzI1LjEzLjAwLjAwLjAwCi11bnNwc2M3IzI1LjEzLjE1LjAxLjAwI0ZpeGVkIHdpbmcgYWdyaWN1bHR1cmFsIGFpcmNyYWZ0IzI1LjEzLjE1LjAwLjAwCi11bnNwc2M3IzI1LjEzLjE1LjAyLjAwI0NhcmdvIHByb3BlbGxlciBhaXJjcmFmdCMyNS4xMy4xNS4wMC4wMAotdW5zcHNjNyMyNS4xMy4xNS4wMy4wMCNTZWFwbGFuZXMjMjUuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMTUuMDQuMDAjQ29tbWVyY2lhbCBwYXNzZW5nZXIgcHJvcGVsbGVyIGFpcmNyYWZ0IzI1LjEzLjE1LjAwLjAwCi11bnNwc2M3IzI1LjEzLjE1LjA1LjAwI0NhcmdvIGpldCBhaXJjcmFmdCMyNS4xMy4xNS4wMC4wMAotdW5zcHNjNyMyNS4xMy4xNS4wNi4wMCNDb21tZXJjaWFsIHBhc3NlbmdlciBqZXQgYWlyY3JhZnQjMjUuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMTUuMDcuMDAjUHJpdmF0ZSBvciBidXNpbmVzcyBwcm9wZWxsZXIgYWlyY3JhZnQjMjUuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMTUuMDguMDAjUHJpdmF0ZSBvciBidXNpbmVzcyBqZXQgYWlyY3JhZnQjMjUuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMTYuMDAuMDAjQ2l2aWxpYW4gYW5kIGNvbW1lcmNpYWwgcm90YXJ5IHdpbmcgYWlyY3JhZnQjMjUuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMTYuMDEuMDAjUGFzc2VuZ2VyIHRyYW5zcG9ydCBoZWxpY29wdGVycyMyNS4xMy4xNi4wMC4wMAotdW5zcHNjNyMyNS4xMy4xNi4wMi4wMCNDYXJnbyB0cmFuc3BvcnQgaGVsaWNvcHRlcnMjMjUuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMTYuMDMuMDAjQWdyaWN1bHR1cmFsIGhlbGljb3B0ZXJzIzI1LjEzLjE2LjAwLjAwCi11bnNwc2M3IzI1LjEzLjE2LjA0LjAwI01lZGljYWwgb3IgcmVzY3VlIGhlbGljb3B0ZXJzIzI1LjEzLjE2LjAwLjAwCi11bnNwc2M3IzI1LjEzLjE3LjAwLjAwI01pbGl0YXJ5IGZpeGVkIHdpbmcgYWlyY3JhZnQjMjUuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMTcuMDEuMDAjQm9tYmVyIGFpcmNyYWZ0IzI1LjEzLjE3LjAwLjAwCi11bnNwc2M3IzI1LjEzLjE3LjAyLjAwI0ZpZ2h0ZXIgYm9tYmVyIGFpcmNyYWZ0IzI1LjEzLjE3LjAwLjAwCi11bnNwc2M3IzI1LjEzLjE3LjAzLjAwI0ZpZ2h0ZXIgYWlyY3JhZnQjMjUuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMTcuMDQuMDAjQXR0YWNrIGFpcmNyYWZ0IzI1LjEzLjE3LjAwLjAwCi11bnNwc2M3IzI1LjEzLjE3LjA1LjAwI1RhcmdldCBvciByZWNvbm5haXNzYW5jZSBkcm9uZXMjMjUuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMTcuMDYuMDAjTWlsaXRhcnkgc2VhcGxhbmVzIzI1LjEzLjE3LjAwLjAwCi11bnNwc2M3IzI1LjEzLjE3LjA3LjAwI1JlY29ubmFpc3NhbmNlIG9yIHN1cnZlaWxsYW5jZSBhaXJjcmFmdCMyNS4xMy4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMy4xNy4wOC4wMCNBbnRpIHN1Ym1hcmluZSBhaXJjcmFmdCMyNS4xMy4xNy4wMC4wMAotdW5zcHNjNyMyNS4xMy4xNy4wOS4wMCNNaWxpdGFyeSB0cmFuc3BvcnQgYWlyY3JhZnQjMjUuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMTguMDAuMDAjU3BlY2lhbHR5IGFpcmNyYWZ0IzI1LjEzLjAwLjAwLjAwCi11bnNwc2M3IzI1LjEzLjE4LjAxLjAwI0FpcnNoaXBzIzI1LjEzLjE4LjAwLjAwCi11bnNwc2M3IzI1LjEzLjE5LjAwLjAwI01pbGl0YXJ5IHJvdGFyeSB3aW5nIGFpcmNyYWZ0IzI1LjEzLjAwLjAwLjAwCi11bnNwc2M3IzI1LjEzLjE5LjAyLjAwI01pbGl0YXJ5IHRyYW5zcG9ydCBoZWxpY29wdGVycyMyNS4xMy4xOS4wMC4wMAotdW5zcHNjNyMyNS4xMy4xOS4wMy4wMCNBdHRhY2sgaGVsaWNvcHRlcnMjMjUuMTMuMTkuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMTkuMDQuMDAjUmVjb25uYWlzc2FuY2UgaGVsaWNvcHRlcnMjMjUuMTMuMTkuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMTkuMDUuMDAjQW50aSBzdWJtYXJpbmUgaGVsaWNvcHRlcnMjMjUuMTMuMTkuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMTkuMDYuMDAjVGlsdCByb3RvciB3aW5nIGFpcmNyYWZ0IzI1LjEzLjE5LjAwLjAwCi11bnNwc2M3IzI1LjEzLjIwLjAwLjAwI1JlY3JlYXRpb25hbCBhaXJjcmFmdCMyNS4xMy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xMy4yMC4wMS4wMCNIYW5nIGdsaWRlcnMjMjUuMTMuMjAuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMjAuMDIuMDAjSG90IGFpciBiYWxsb29ucyMyNS4xMy4yMC4wMC4wMAotdW5zcHNjNyMyNS4xMy4yMC4wMy4wMCNHbGlkZXJzIzI1LjEzLjIwLjAwLjAwCi11bnNwc2M3IzI1LjEzLjIwLjA0LjAwI1BhcmFnbGlkZXJzIzI1LjEzLjIwLjAwLjAwCi11bnNwc2M3IzI1LjEzLjIwLjA1LjAwI1VsdHJhIGxpZ2h0IGFpcmNyYWZ0IzI1LjEzLjIwLjAwLjAwCi11bnNwc2M3IzI1LjEzLjIxLjAwLjAwI0FpcmNyYWZ0IG1hbmFnZW1lbnQgc2VydmljZXMjMjUuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTMuMjEuMDEuMDAjQWlyY3JhZnQgcGlsb3RzIzI1LjEzLjIxLjAwLjAwCi11bnNwc2M3IzI1LjEzLjIxLjAyLjAwI0FpcmNyYWZ0IG1haW50ZW5hbmNlIG9yIHNlcnZpY2VzIzI1LjEzLjIxLjAwLjAwCi11bnNwc2M3IzI1LjE1LjAwLjAwLjAwI1NwYWNlY3JhZnQjMjUuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTUuMTUuMDAuMDAjU3BhY2VzaGlwcyMyNS4xNS4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNS4xNS4wMS4wMCNNYW5uZWQgc3BhY2VjcmFmdCMyNS4xNS4xNS4wMC4wMAotdW5zcHNjNyMyNS4xNS4xNS4wMi4wMCNTcGFjZWNyYWZ0IHN0cnVjdHVyZXMjMjUuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTUuMTcuMDAuMDAjU2F0ZWxsaXRlcyMyNS4xNS4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNS4xNy4wMS4wMCNDb21tdW5pY2F0aW9uIHNhdGVsbGl0ZXMjMjUuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTUuMTcuMDIuMDAjV2VhdGhlciBzYXRlbGxpdGVzIzI1LjE1LjE3LjAwLjAwCi11bnNwc2M3IzI1LjE1LjE3LjAzLjAwI01pbGl0YXJ5IHNhdGVsbGl0ZXMjMjUuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTUuMTcuMDQuMDAjU2NpZW50aWZpYyBvciByZXNlYXJjaCBzYXRlbGxpdGVzIzI1LjE1LjE3LjAwLjAwCi11bnNwc2M3IzI1LjE1LjE3LjA1LjAwI05hdmlnYXRpb24gc2F0ZWxsaXRlcyMyNS4xNS4xNy4wMC4wMAotdW5zcHNjNyMyNS4xNS4xNy4wNi4wMCNHZW9zdGF0aW9uYXJ5IHNhdGVsbGl0ZXMjMjUuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTUuMTcuMDcuMDAjTG93IGVhcnRoIG9yYml0IHNhdGVsbGl0ZXMjMjUuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTUuMTcuMDguMDAjU3VuIHN5bmNocm9ub3VzIG9yYml0IHNhdGVsbGl0ZXMjMjUuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTUuMTcuMDkuMDAjR2Vvc3luY2hyb25vdXMgc2F0ZWxsaXRlcyMyNS4xNS4xNy4wMC4wMAotdW5zcHNjNyMyNS4xNi4wMC4wMC4wMCNOb24gbW90b3JpemVkIGN5Y2xlcyMyNS4wMC4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNi4xNS4wMC4wMCNQZWRhbCBwb3dlcmVkIHZlaGljbGVzIzI1LjE2LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE2LjE1LjAxLjAwI1RvdXJpbmcgYmljeWNsZXMjMjUuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTYuMTUuMDIuMDAjVW5pY3ljbGVzIzI1LjE2LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE2LjE1LjAzLjAwI1RyaWN5Y2xlcyMyNS4xNi4xNS4wMC4wMAotdW5zcHNjNyMyNS4xNi4xNS4wNC4wMCNUYW5kZW0gYmljeWNsZXMjMjUuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTYuMTUuMDUuMDAjTW91bnRhaW4gYmljeWNsZXMjMjUuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTYuMTUuMDYuMDAjUmFjaW5nIGJpY3ljbGVzIzI1LjE2LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE2LjE1LjA3LjAwI0JpY3ljbGVzIzI1LjE2LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE2LjE1LjA4LjAwI1JlY3VtYmVudCBiaWN5Y2xlcyMyNS4xNi4xNS4wMC4wMAotdW5zcHNjNyMyNS4xNi4xNS4wOS4wMCNDaGlsZHJlbnMgYmljeWNsZXMjMjUuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMDAuMDAuMDAjVHJhbnNwb3J0YXRpb24gY29tcG9uZW50cyBhbmQgc3lzdGVtcyMyNS4wMC4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4xNS4wMC4wMCNXaW5kc2hpZWxkIHdpcGVycyMyNS4xNy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4xNS4wMS4wMCNBaXJjcmFmdCB3aW5kc2hpZWxkIHdpcGVycyMyNS4xNy4xNS4wMC4wMAotdW5zcHNjNyMyNS4xNy4xNS4wMi4wMCNBdXRvbW90aXZlIHdpbmRzaGllbGQgd2lwZXJzIzI1LjE3LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE3LjE1LjAzLjAwI0xvY29tb3RpdmUgd2luZHNoaWVsZCB3aXBlcnMjMjUuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMTUuMDQuMDAjTWFyaW5lIHdpbmRzaGllbGQgd2lwZXJzIzI1LjE3LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE3LjE1LjA1LjAwI1RydWNrIHdpbmRzaGllbGQgd2lwZXJzIzI1LjE3LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE3LjE1LjA2LjAwI1dpbmRzaGllbGQgd2lwZXIgcHVtcCMyNS4xNy4xNS4wMC4wMAotdW5zcHNjNyMyNS4xNy4xNi4wMC4wMCNEZWZyb3N0aW5nIGFuZCBkZWZvZ2dpbmcgc3lzdGVtcyMyNS4xNy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4xNi4wMS4wMCNBaXJjcmFmdCBvbmJvYXJkIGRlZnJvc3Rpbmcgb3IgZGVmb2dnaW5nIHN5c3RlbXMjMjUuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMTYuMDIuMDAjQXV0b21vdGl2ZSBkZWZyb3N0aW5nIG9yIGRlZm9nZ2luZyBzeXN0ZW1zIzI1LjE3LjE2LjAwLjAwCi11bnNwc2M3IzI1LjE3LjE2LjAzLjAwI1RyYWluIGRlZnJvc3Rpbmcgb3IgZGVmb2dnaW5nIHN5c3RlbXMjMjUuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMTcuMDAuMDAjQnJha2luZyBzeXN0ZW1zIGFuZCBjb21wb25lbnRzIzI1LjE3LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjE3LjAxLjAwI0FpcmNyYWZ0IGJyYWtpbmcgc3lzdGVtcyMyNS4xNy4xNy4wMC4wMAotdW5zcHNjNyMyNS4xNy4xNy4wMi4wMCNBdXRvbW90aXZlIGJyYWtpbmcgc3lzdGVtcyMyNS4xNy4xNy4wMC4wMAotdW5zcHNjNyMyNS4xNy4xNy4wMy4wMCNUcmFpbiBicmFraW5nIHN5c3RlbXMjMjUuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMTcuMDQuMDAjRHJhZyBjaHV0ZXMjMjUuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMTcuMDUuMDAjUm90b3JzIzI1LjE3LjE3LjAwLjAwCi11bnNwc2M3IzI1LjE3LjE3LjA2LjAwI0JyYWtlIGNhbGlwZXJzIzI1LjE3LjE3LjAwLjAwCi11bnNwc2M3IzI1LjE3LjE3LjA3LjAwI0RydW0gYnJha2UjMjUuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMTcuMDguMDAjRGlzYyBicmFrZSMyNS4xNy4xNy4wMC4wMAotdW5zcHNjNyMyNS4xNy4xNy4wOS4wMCNMaXF1aWQgY29vbGVkIGJyYWtlIzI1LjE3LjE3LjAwLjAwCi11bnNwc2M3IzI1LjE3LjE3LjEwLjAwI01hc3RlciBjeWxpbmRhcnMjMjUuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMTcuMTEuMDAjU2xhdmUgY3lsaW5kZXJzIzI1LjE3LjE3LjAwLjAwCi11bnNwc2M3IzI1LjE3LjE3LjEyLjAwI0RydW0gYnJha2Ugc2hvZXMjMjUuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMTcuMTMuMDAjRGlzYyBicmFrZSBwYWRzIzI1LjE3LjE3LjAwLjAwCi11bnNwc2M3IzI1LjE3LjE3LjE0LjAwI0JyYWtlIGRydW0jMjUuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMTcuMTUuMDAjRGlzYyBicmFrZSByb3RvcnMjMjUuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMTcuMTYuMDAjQnJha2UgbGluZXMjMjUuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMTkuMDAuMDAjV2hlZWxzIGFuZCB3aGVlbCB0cmltcyMyNS4xNy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4xOS4wMS4wMCNBdXRvbW9iaWxlIHJpbXMgb3Igd2hlZWxzIzI1LjE3LjE5LjAwLjAwCi11bnNwc2M3IzI1LjE3LjE5LjAyLjAwI1RyYWluIHdoZWVscyMyNS4xNy4xOS4wMC4wMAotdW5zcHNjNyMyNS4xNy4xOS4wMy4wMCNUcnVjayByaW1zIG9yIHdoZWVscyMyNS4xNy4xOS4wMC4wMAotdW5zcHNjNyMyNS4xNy4xOS4wNC4wMCNBaXJjcmFmdCB3aGVlbHMjMjUuMTcuMTkuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMTkuMDUuMDAjVGlyZSB2YWx2ZXMjMjUuMTcuMTkuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjAuMDAuMDAjU3VzcGVuc2lvbiBzeXN0ZW0gY29tcG9uZW50cyMyNS4xNy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4yMC4wMS4wMCNBdXRvbW9iaWxlIHN1c3BlbnNpb24gc3lzdGVtcyMyNS4xNy4yMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4yMC4wMi4wMCNUcnVjayBzdXNwZW5zaW9uIHN5c3RlbXMjMjUuMTcuMjAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjAuMDMuMDAjVHJ1Y2sgc2hvY2sgYWJzb3JiZXJzIzI1LjE3LjIwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjIwLjA0LjAwI0F1dG9tb2JpbGUgc2hvY2sgYWJzb3JiZXJzIzI1LjE3LjIwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjIwLjA1LjAwI1RyYWluIHN1c3BlbnNpb24gc3lzdGVtcyMyNS4xNy4yMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4yMC4wNi4wMCNTdGVlcmluZyBzeXN0ZW1zIzI1LjE3LjIwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjIwLjA3LjAwI1N0cnV0cyMyNS4xNy4yMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4yMC4wOC4wMCNCYWxsIGpvaW50cyMyNS4xNy4yMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4yMC4wOS4wMCNBdXRvbW90aXZlIGJ1c2hpbmdzIzI1LjE3LjIwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjIwLjEwLjAwI1N3YXkgYmFycyMyNS4xNy4yMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4yMC4xMS4wMCNTaG9jayBhYnNvcmJlciMyNS4xNy4yMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4yMS4wMC4wMCNWZWhpY2xlIHNhZmV0eSBzeXN0ZW1zIGFuZCBjb21wb25lbnRzIzI1LjE3LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjIxLjAxLjAwI0FpcmJhZ3MjMjUuMTcuMjEuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjEuMDIuMDAjQWlyY3JhZnQgbGFwYmVsdHMjMjUuMTcuMjEuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjEuMDMuMDAjQWlyY3JhZnQgaGFybmVzcyByZXN0cmFpbnRzIzI1LjE3LjIxLjAwLjAwCi11bnNwc2M3IzI1LjE3LjIxLjA0LjAwI1NlYXRiZWx0cyMyNS4xNy4yMS4wMC4wMAotdW5zcHNjNyMyNS4xNy4yMS4wNS4wMCNDb2xsaXNpb24gYXZvaWRhbmNlIHN5c3RlbXMjMjUuMTcuMjEuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjEuMDYuMDAjSW1wYWN0IHNlbnNpbmcgc3lzdGVtcyMyNS4xNy4yMS4wMC4wMAotdW5zcHNjNyMyNS4xNy4yMS4wNy4wMCNBdXRvbW90aXZlIHNlYXRiZWx0cyMyNS4xNy4yMS4wMC4wMAotdW5zcHNjNyMyNS4xNy4yMS4wOC4wMCNIZWFkIHJlc3RyYWludHMjMjUuMTcuMjEuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjIuMDAuMDAjVmVoaWNsZSBkb29ycyMyNS4xNy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4yMi4wMS4wMCNSZW1vdmFibGUgYXV0b21vdGl2ZSBkb29ycyMyNS4xNy4yMi4wMC4wMAotdW5zcHNjNyMyNS4xNy4yMi4wMi4wMCNBaXJjcmFmdCBkb29ycyMyNS4xNy4yMi4wMC4wMAotdW5zcHNjNyMyNS4xNy4yMi4wMy4wMCNBdXRvbW90aXZlIGRvb3JzIzI1LjE3LjIyLjAwLjAwCi11bnNwc2M3IzI1LjE3LjIyLjA0LjAwI1JvbGwgdXAgdHJ1Y2sgZG9vcnMjMjUuMTcuMjIuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjIuMDUuMDAjVGFpbGdhdGVzIG9yIGxpZnRnYXRlcyMyNS4xNy4yMi4wMC4wMAotdW5zcHNjNyMyNS4xNy4yMy4wMC4wMCNWZWhpY2xlIHdpbmRvd3MgYW5kIHdpbmRzaGllbGRzIzI1LjE3LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjIzLjAxLjAwI0F1dG9tb3RpdmUgd2luZHNoaWVsZHMjMjUuMTcuMjMuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjMuMDIuMDAjQWlyY3JhZnQgd2luZG93cyMyNS4xNy4yMy4wMC4wMAotdW5zcHNjNyMyNS4xNy4yMy4wMy4wMCNBdXRvbW90aXZlIHdpbmRvd3MjMjUuMTcuMjMuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjMuMDQuMDAjQWlyY3JhZnQgd2luZHNoaWVsZHMjMjUuMTcuMjMuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjQuMDAuMDAjRnVlbCB0YW5rcyBhbmQgc3lzdGVtcyMyNS4xNy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4yNC4wMS4wMCNBaXJjcmFmdCBpbnRlcm5hbCBmdWVsIHRhbmtzIzI1LjE3LjI0LjAwLjAwCi11bnNwc2M3IzI1LjE3LjI0LjAyLjAwI0FpcmNyYWZ0IGZ1ZWwgZHJvcCB0YW5rcyMyNS4xNy4yNC4wMC4wMAotdW5zcHNjNyMyNS4xNy4yNC4wMy4wMCNBaXJjcmFmdCBwcm9wZWxsZW50IHRhbmtzIzI1LjE3LjI0LjAwLjAwCi11bnNwc2M3IzI1LjE3LjI0LjA0LjAwI0h5YnJpZCBmdWVsIHN0b3JhZ2Ugc3lzdGVtcyMyNS4xNy4yNC4wMC4wMAotdW5zcHNjNyMyNS4xNy4yNC4wNS4wMCNGdWVsIGluamVjdGlvbiBzeXN0ZW1zIzI1LjE3LjI0LjAwLjAwCi11bnNwc2M3IzI1LjE3LjI0LjA2LjAwI0Z1ZWwgdGFua3MjMjUuMTcuMjQuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjQuMDcuMDAjQnJlYXRoZXIgZWxlbWVudHMjMjUuMTcuMjQuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjQuMDguMDAjRnVlbCBvciBvaWwgY2FwcyMyNS4xNy4yNC4wMC4wMAotdW5zcHNjNyMyNS4xNy4yNS4wMC4wMCNUaXJlcyBhbmQgdGlyZSB0dWJlcyMyNS4xNy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4yNS4wMS4wMCNBaXJjcmFmdCB0aXJlcyMyNS4xNy4yNS4wMC4wMAotdW5zcHNjNyMyNS4xNy4yNS4wMi4wMCNBdXRvbW9iaWxlIHRpcmUgdHViZXMjMjUuMTcuMjUuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjUuMDMuMDAjSGVhdnkgdHJ1Y2sgdGlyZXMjMjUuMTcuMjUuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjUuMDQuMDAjQXV0b21vYmlsZSBvciBsaWdodCB0cnVjayB0aXJlcyMyNS4xNy4yNS4wMC4wMAotdW5zcHNjNyMyNS4xNy4yNS4wNS4wMCNCaWN5Y2xlIHR1YmVzIzI1LjE3LjI1LjAwLjAwCi11bnNwc2M3IzI1LjE3LjI1LjA2LjAwI0JpY3ljbGUgdGlyZXMjMjUuMTcuMjUuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjUuMDcuMDAjVGlyZSBjb3JkIzI1LjE3LjI1LjAwLjAwCi11bnNwc2M3IzI1LjE3LjI1LjA4LjAwI1RpcmUgdHJlYWRzIzI1LjE3LjI1LjAwLjAwCi11bnNwc2M3IzI1LjE3LjI2LjAwLjAwI1ZlaGljbGUgdHJpbSBhbmQgZXh0ZXJpb3IgY292ZXJpbmcjMjUuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjYuMDEuMDAjQXV0b21vdGl2ZSB0cmltIzI1LjE3LjI2LjAwLjAwCi11bnNwc2M3IzI1LjE3LjI2LjAyLjAwI0F1dG9tb3RpdmUgZmVuZGVycyMyNS4xNy4yNi4wMC4wMAotdW5zcHNjNyMyNS4xNy4yNi4wMy4wMCNWZWhpY2xlIGJ1bXBlcnMjMjUuMTcuMjYuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjYuMDQuMDAjVmVoaWNsZSBtaXJyb3JzIzI1LjE3LjI2LjAwLjAwCi11bnNwc2M3IzI1LjE3LjI2LjA1LjAwI1ZlaGljbGUgZ3JpbGxlcyMyNS4xNy4yNi4wMC4wMAotdW5zcHNjNyMyNS4xNy4yNi4wNi4wMCNWZWhpY2xlIGhvb2RzIzI1LjE3LjI2LjAwLjAwCi11bnNwc2M3IzI1LjE3LjI2LjA3LjAwI1ZlaGljbGUgc2lkZSBwYW5lbHMjMjUuMTcuMjYuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjYuMDguMDAjRmFzY2lhcyMyNS4xNy4yNi4wMC4wMAotdW5zcHNjNyMyNS4xNy4yNy4wMC4wMCNFbnZpcm9ubWVudGFsIGNvbnRyb2wgc3lzdGVtcyMyNS4xNy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4yNy4wMS4wMCNBaXJjcmFmdCBlbnZpcm9ubWVudGFsIGNvbnRyb2wgc3lzdGVtcyMyNS4xNy4yNy4wMC4wMAotdW5zcHNjNyMyNS4xNy4yNy4wMi4wMCNTcGFjZSBlbnZpcm9ubWVudGFsIGNvbnRyb2wgc3lzdGVtcyMyNS4xNy4yNy4wMC4wMAotdW5zcHNjNyMyNS4xNy4yNy4wMy4wMCNNYXJpbmUgZW52aXJvbm1lbnRhbCBjb250cm9sIHN5c3RlbXMjMjUuMTcuMjcuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjcuMDQuMDAjVmVoaWNsZSBjbGltYXRlIGNvbnRyb2wgc3lzdGVtcyMyNS4xNy4yNy4wMC4wMAotdW5zcHNjNyMyNS4xNy4yOC4wMC4wMCNIeWRyYXVsaWMgc3lzdGVtcyBhbmQgY29tcG9uZW50cyMyNS4xNy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4yOC4wMS4wMCNBaXJjcmFmdCBoeWRyYXVsaWMgc3lzdGVtcyMyNS4xNy4yOC4wMC4wMAotdW5zcHNjNyMyNS4xNy4yOC4wMi4wMCNBdXRvbW90aXZlIGh5ZHJhdWxpYyBzeXN0ZW1zIzI1LjE3LjI4LjAwLjAwCi11bnNwc2M3IzI1LjE3LjI4LjAzLjAwI01hcmluZSBoeWRyYXVsaWMgc3lzdGVtcyMyNS4xNy4yOC4wMC4wMAotdW5zcHNjNyMyNS4xNy4yOS4wMC4wMCNFeHRlcmlvciB2ZWhpY2xlIGxpZ2h0aW5nIzI1LjE3LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjI5LjAxLjAwI0V4dGVyaW9yIGF1dG9tb2JpbGUgbGlnaHRpbmcjMjUuMTcuMjkuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjkuMDIuMDAjRXh0ZXJpb3IgYWlyY3JhZnQgbGlnaHRpbmcjMjUuMTcuMjkuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjkuMDMuMDAjRXh0ZXJpb3IgcmFpbGNhciBsaWdodGluZyMyNS4xNy4yOS4wMC4wMAotdW5zcHNjNyMyNS4xNy4yOS4wNC4wMCNFeHRlcmlvciBzaGlwIG9yIGJvYXQgbGlnaHRpbmcjMjUuMTcuMjkuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjkuMDUuMDAjSGVhZGxhbXAgd2lwZXIgb3Igd2FzaGVyIHN5c3RlbXMjMjUuMTcuMjkuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMjkuMDYuMDAjUmVmbGVjdG9ycyMyNS4xNy4yOS4wMC4wMAotdW5zcHNjNyMyNS4xNy4zMC4wMC4wMCNJbnRlcmlvciB2ZWhpY2xlIGxpZ2h0aW5nIzI1LjE3LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjMwLjAxLjAwI0ludGVyaW9yIGF1dG9tb2JpbGUgbGlnaHRpbmcjMjUuMTcuMzAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzAuMDIuMDAjSW50ZXJpb3IgYWlyY3JhZnQgbGlnaHRpbmcjMjUuMTcuMzAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzAuMDMuMDAjSW50ZXJpb3IgcmFpbGNhciBsaWdodGluZyMyNS4xNy4zMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4zMC4wNC4wMCNJbnRlcmlvciBzaGlwIG9yIGJvYXQgbGlnaHRpbmcjMjUuMTcuMzAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzAuMDUuMDAjTGlnaHQgcGxhdGUgYXNzZW1ibGllcyMyNS4xNy4zMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4zMS4wMC4wMCNMb2NhdGlvbiBhbmQgbmF2aWdhdGlvbiBzeXN0ZW1zIGFuZCBjb21wb25lbnRzIzI1LjE3LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjMxLjAxLjAwI0FpcmNyYWZ0IGRpZ2l0YWwgYWx0aXR1ZGUgY29udHJvbCBzeXN0ZW1zIzI1LjE3LjMxLjAwLjAwCi11bnNwc2M3IzI1LjE3LjMxLjAyLjAwI0FpcmNyYWZ0IG5hdmlnYXRpb24gYmVhY29ucyMyNS4xNy4zMS4wMC4wMAotdW5zcHNjNyMyNS4xNy4zMS4wMy4wMCNUZXJyYWluIGZvbGxvd2luZyBzeXN0ZW1zIzI1LjE3LjMxLjAwLjAwCi11bnNwc2M3IzI1LjE3LjMxLjA0LjAwI0FpcmNyYWZ0IGd1aWRhbmNlIHN5c3RlbXMjMjUuMTcuMzEuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzEuMDUuMDAjQWlyY3JhZnQgc3RlZXJpbmcgY29udHJvbHMjMjUuMTcuMzEuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzEuMDYuMDAjU3BhY2VjcmFmdCBhdHRpdHVkZSBjb250cm9sIHN5c3RlbXMjMjUuMTcuMzEuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzEuMDcuMDAjVmVoaWN1bGFyIGdsb2JhbCBwb3NpdGlvbmluZyBzeXN0ZW1zIzI1LjE3LjMxLjAwLjAwCi11bnNwc2M3IzI1LjE3LjMyLjAwLjAwI0NvbW11bmljYXRpb25zIHJlbGF0ZWQgc3lzdGVtcyMyNS4xNy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4zMi4wMS4wMCNBaXJjcmFmdCBjb21tdW5pY2F0aW9uIHN5c3RlbXMjMjUuMTcuMzIuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzIuMDIuMDAjRmxpZ2h0IHJlY29yZGVycyMyNS4xNy4zMi4wMC4wMAotdW5zcHNjNyMyNS4xNy4zMi4wMy4wMCNBaXJjcmFmdCBjb3VudGVybWVhc3VyZXMjMjUuMTcuMzIuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzIuMDQuMDAjQWlyY3JhZnQgZW5jcnlwdGlvbiBvciBkZWNyeXB0aW9uIHN5c3RlbXMjMjUuMTcuMzIuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzIuMDUuMDAjQWlyY3JhZnQgdGVsZW1ldHJ5IHN5c3RlbXMjMjUuMTcuMzIuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzIuMDYuMDAjQWlyY3JhZnQgaW50ZXJmYWNlIGVsZWN0cm9uaWNzIzI1LjE3LjMyLjAwLjAwCi11bnNwc2M3IzI1LjE3LjMzLjAwLjAwI01hc3RlciBjb250cm9sIHN5c3RlbXMjMjUuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzMuMDEuMDAjRmxpZ2h0IGNvbXB1dGVyIHN5c3RlbXMjMjUuMTcuMzMuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzMuMDIuMDAjU3BhY2VjcmFmdCBjb21tYW5kIG1vZHVsZXMjMjUuMTcuMzMuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzMuMDMuMDAjQXV0b21vdGl2ZSBjb21wdXRlciBzeXN0ZW1zIzI1LjE3LjMzLjAwLjAwCi11bnNwc2M3IzI1LjE3LjMzLjA0LjAwI0VsZWN0cm9uaWMgaWduaXRpb24gc3lzdGVtcyMyNS4xNy4zMy4wMC4wMAotdW5zcHNjNyMyNS4xNy4zNC4wMC4wMCNWZWhpY2xlIGVtZXJnZW5jeSBzeXN0ZW1zIzI1LjE3LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjM0LjAxLjAwI0FpcmNyYWZ0IGZpcmUgY29udHJvbCBvciBleHRpbmd1aXNoaW5nIHN5c3RlbXMjMjUuMTcuMzQuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzQuMDIuMDAjQWlyY3JhZnQgZXNjYXBlIG9yIGVqZWN0aW9uIHN5c3RlbXMjMjUuMTcuMzQuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzQuMDMuMDAjQWlyY3JhZnQgd2FybmluZyBzeXN0ZW1zIzI1LjE3LjM0LjAwLjAwCi11bnNwc2M3IzI1LjE3LjM1LjAwLjAwI1ZlaGljbGUgcG93ZXIgc3lzdGVtcyMyNS4xNy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNy4zNS4wMS4wMCNTcGFjZWNyYWZ0IHNvbGFyIGNlbGxzIzI1LjE3LjM1LjAwLjAwCi11bnNwc2M3IzI1LjE3LjM1LjAyLjAwI1NwYWNlY3JhZnQgc29sYXIgYXJyYXlzIzI1LjE3LjM1LjAwLjAwCi11bnNwc2M3IzI1LjE3LjM2LjAwLjAwI1ZlaGljbGUgaW5zdHJ1bWVudGF0aW9uIzI1LjE3LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjM2LjAxLjAwI0FpcmNyYWZ0IGNvY2twaXQgZGlzcGxheXMjMjUuMTcuMzYuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzcuMDAuMDAjRXhoYXVzdCBhbmQgZW1pc3Npb24gY29udHJvbHMjMjUuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzcuMDEuMDAjQ2F0YWx5dGljIGNvbnZlcnRlcnMjMjUuMTcuMzcuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzcuMDIuMDAjTXVmZmxlcnMjMjUuMTcuMzcuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzcuMDMuMDAjRXhoYXVzdCBtYW5pZm9sZHMjMjUuMTcuMzcuMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzguMDAuMDAjRHJpdmV0cmFpbiBzeXN0ZW1zIzI1LjE3LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjM4LjAxLjAwI0RyaXZpbmcgYXhsZXMjMjUuMTcuMzguMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzguMDIuMDAjTm9uIGRyaXZpbmcgYXhsZXMjMjUuMTcuMzguMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzguMDMuMDAjQXhsZSBob3VzaW5ncyMyNS4xNy4zOC4wMC4wMAotdW5zcHNjNyMyNS4xNy4zOC4wNC4wMCNBeGxlIHNwaW5kbGVzIzI1LjE3LjM4LjAwLjAwCi11bnNwc2M3IzI1LjE3LjM4LjA1LjAwI0RpZmZlcmVudGlhbHMjMjUuMTcuMzguMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzguMDYuMDAjQ29uc3RhbnQgdmVsb2NpdHkgam9pbnRzIzI1LjE3LjM4LjAwLjAwCi11bnNwc2M3IzI1LjE3LjM4LjA3LjAwI0F4bGUgc2hhZnRzIzI1LjE3LjM4LjAwLjAwCi11bnNwc2M3IzI1LjE3LjM4LjA4LjAwI0F4bGUgcmVwYWlyIGtpdHMjMjUuMTcuMzguMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzguMDkuMDAjQXhsZSBodWJzIzI1LjE3LjM4LjAwLjAwCi11bnNwc2M3IzI1LjE3LjM4LjEwLjAwI1VuaXZlcnNhbCBqb2ludHMjMjUuMTcuMzguMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzguMTEuMDAjRHJpdmUgc2hhZnRzIzI1LjE3LjM4LjAwLjAwCi11bnNwc2M3IzI1LjE3LjM4LjEyLjAwI01hbnVhbCB0cmFuc21pc3Npb25zIzI1LjE3LjM4LjAwLjAwCi11bnNwc2M3IzI1LjE3LjM4LjEzLjAwI0F1dG9tYXRpYyB0cmFuc21pc3Npb25zIzI1LjE3LjM4LjAwLjAwCi11bnNwc2M3IzI1LjE3LjM4LjE0LjAwI1Bvd2VyIHRha2Ugb2ZmcyMyNS4xNy4zOC4wMC4wMAotdW5zcHNjNyMyNS4xNy4zOC4xNS4wMCNDbHV0Y2ggY2FibGVzIzI1LjE3LjM4LjAwLjAwCi11bnNwc2M3IzI1LjE3LjM4LjE2LjAwI0h5ZHJhdWxpYyBjbHV0Y2ggcGFydHMjMjUuMTcuMzguMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzguMTcuMDAjRHJpdmV0cmFpbiBjaGFpbnMjMjUuMTcuMzguMDAuMDAKLXVuc3BzYzcjMjUuMTcuMzkuMDAuMDAjRWxlY3RyaWNhbCBjb21wb25lbnRzIzI1LjE3LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjM5LjAxLjAwI0lnbml0aW9uIzI1LjE3LjM5LjAwLjAwCi11bnNwc2M3IzI1LjE3LjQwLjAwLjAwI0VuZ2luZSBjb29sYW50IHN5c3RlbSMyNS4xNy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNy40MC4wMS4wMCNGYW4jMjUuMTcuNDAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDAuMDIuMDAjVmVoaWNsZSByYWRpYXRvcnMjMjUuMTcuNDAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDAuMDMuMDAjUmFkaWF0b3IgY2FwcyMyNS4xNy40MC4wMC4wMAotdW5zcHNjNyMyNS4xNy40MC4wNC4wMCNFbmdpbmUgY29vbGFudCMyNS4xNy40MC4wMC4wMAotdW5zcHNjNyMyNS4xNy40MS4wMC4wMCNSb29mIHN5c3RlbXMjMjUuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDEuMDEuMDAjRW1lcmdlbmN5IHZlaGljbGUgZXhpdHMjMjUuMTcuNDEuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDEuMDIuMDAjUGVybWFuZW50IGNvbnZlcnRpYmxlIHJvb2YgdG9wcyMyNS4xNy40MS4wMC4wMAotdW5zcHNjNyMyNS4xNy40MS4wMy4wMCNSZW1vdmFibGUgaGFyZCByb29mIHRvcHMjMjUuMTcuNDEuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDEuMDQuMDAjUmVtb3ZhYmxlIHNvZnQgcm9vZiB0b3BzIzI1LjE3LjQxLjAwLjAwCi11bnNwc2M3IzI1LjE3LjQxLjA1LjAwI1Jvb2YgcmFjayBzeXN0ZW1zIzI1LjE3LjQxLjAwLjAwCi11bnNwc2M3IzI1LjE3LjQxLjA2LjAwI1N1bnJvb2ZzIG9yIG1vb25yb29mcyMyNS4xNy40MS4wMC4wMAotdW5zcHNjNyMyNS4xNy40MS4wNy4wMCNXaW5kIGRlZmxlY3RvcnMjMjUuMTcuNDEuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDIuMDAuMDAjU3RlZXJpbmcgc3lzdGVtIzI1LjE3LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjQyLjAxLjAwI1N0ZWVyaW5nIHNhY2tzIzI1LjE3LjQyLjAwLjAwCi11bnNwc2M3IzI1LjE3LjQyLjAyLjAwI1N0ZWVyaW5nIHN1c3BlbnNpb24jMjUuMTcuNDIuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDIuMDMuMDAjQmFsbCBqb2ludCMyNS4xNy40Mi4wMC4wMAotdW5zcHNjNyMyNS4xNy40Mi4wNC4wMCNQb3dlciBzdGVlcmluZyBzeXN0ZW0jMjUuMTcuNDIuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDIuMDUuMDAjVGllIFJvZHMjMjUuMTcuNDIuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDIuMDYuMDAjRHJhZyBsaW5rIzI1LjE3LjQyLjAwLjAwCi11bnNwc2M3IzI1LjE3LjQyLjA3LjAwI1N0ZWVyaW5nIGxpbmthZ2UjMjUuMTcuNDIuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDIuMDguMDAjSHVibG9jayMyNS4xNy40Mi4wMC4wMAotdW5zcHNjNyMyNS4xNy40Mi4wOS4wMCNQaW5pb25zIzI1LjE3LjQyLjAwLjAwCi11bnNwc2M3IzI1LjE3LjQyLjEwLjAwI1Bvd2VyIHN0ZWVyaW5nIHR1bmluZyBjYWJsZSMyNS4xNy40Mi4wMC4wMAotdW5zcHNjNyMyNS4xNy40My4wMC4wMCNWZWhpY2xlIGV4aGF1c3Qgc3lzdGVtcyMyNS4xNy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNy40My4wMS4wMCNDYXRhbHl0aWMgY29udmVydGVycyMyNS4xNy40My4wMC4wMAotdW5zcHNjNyMyNS4xNy40My4wMi4wMCNNdWZmbGVycyBvciByZXNvbmF0b3JzIzI1LjE3LjQzLjAwLjAwCi11bnNwc2M3IzI1LjE3LjQ0LjAwLjAwI1ZlaGljbGUgaW50ZXJpb3Igc3lzdGVtcyMyNS4xNy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNy40NC4wMS4wMCNCZXplbHMjMjUuMTcuNDQuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDQuMDIuMDAjQ29uc29sZXMjMjUuMTcuNDQuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDQuMDMuMDAjRG9vciBwYW5lbHMjMjUuMTcuNDQuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDQuMDQuMDAjSGVhZGxpbmVycyMyNS4xNy40NC4wMC4wMAotdW5zcHNjNyMyNS4xNy40NC4wNS4wMCNJbnN0cnVtZW50IGNsdXN0ZXJzIzI1LjE3LjQ0LjAwLjAwCi11bnNwc2M3IzI1LjE3LjQ0LjA2LjAwI0luc3RydW1lbnQgcGFuZWxzIzI1LjE3LjQ0LjAwLjAwCi11bnNwc2M3IzI1LjE3LjQ0LjA3LjAwI1BlZGFscyMyNS4xNy40NC4wMC4wMAotdW5zcHNjNyMyNS4xNy40NC4wOC4wMCNQb3dlciBwb3J0cyBvciBsaWdodGVycyMyNS4xNy40NC4wMC4wMAotdW5zcHNjNyMyNS4xNy40NC4wOS4wMCNTdW4gdmlzb3JzIzI1LjE3LjQ0LjAwLjAwCi11bnNwc2M3IzI1LjE3LjQ1LjAwLjAwI1ZlaGljbGUgc2FmZXR5IGFuZCBzZWN1cml0eSBzeXN0ZW1zIzI1LjE3LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE3LjQ1LjAxLjAwI0FpciBiYWcgcHJvcGVsbGFudCBjYW5pc3RlcnMjMjUuMTcuNDUuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDUuMDIuMDAjQWlyIGJhZ3MjMjUuMTcuNDUuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDUuMDMuMDAjVmVoaWNsZSBob3JucyMyNS4xNy40NS4wMC4wMAotdW5zcHNjNyMyNS4xNy40NS4wNC4wMCNSZW1vdGUgbG9ja2luZyBzeXN0ZW0jMjUuMTcuNDUuMDAuMDAKLXVuc3BzYzcjMjUuMTcuNDUuMDUuMDAjVmVoaWNsZSBzdGFiaWxpdHkgY29udHJvbCBzeXN0ZW1zIzI1LjE3LjQ1LjAwLjAwCi11bnNwc2M3IzI1LjE3LjQ1LjA2LjAwI1ZlaGljbGUgdHJhY3Rpb24gY29udHJvbCBzeXN0ZW1zIzI1LjE3LjQ1LjAwLjAwCi11bnNwc2M3IzI1LjE3LjQ1LjA3LjAwI1ZlaGljbGUgbmF2aWdhdGlvbiBzeXN0ZW1zIzI1LjE3LjQ1LjAwLjAwCi11bnNwc2M3IzI1LjE3LjQ1LjA4LjAwI1doZWVsIGNsYW1wcyMyNS4xNy40NS4wMC4wMAotdW5zcHNjNyMyNS4xNy40Ni4wMC4wMCNWZWhpY2xlIHNlYXRpbmcgc3lzdGVtcyMyNS4xNy4wMC4wMC4wMAotdW5zcHNjNyMyNS4xNy40Ni4wMS4wMCNTZWF0IGNvdmVycyMyNS4xNy40Ni4wMC4wMAotdW5zcHNjNyMyNS4xNy40Ni4wMi4wMCNTZWF0IGN1c2hpb25zIG9yIGJvbHN0ZXJzIzI1LjE3LjQ2LjAwLjAwCi11bnNwc2M3IzI1LjE3LjQ2LjAzLjAwI1NlYXQgZnJhbWVzIzI1LjE3LjQ2LjAwLjAwCi11bnNwc2M3IzI1LjE4LjAwLjAwLjAwI1ZlaGljbGUgYm9kaWVzIGFuZCB0cmFpbGVycyMyNS4wMC4wMC4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNS4wMC4wMCNBaXJjcmFmdCBmdXNlbGFnZSBhbmQgY29tcG9uZW50cyMyNS4xOC4wMC4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNS4wMS4wMCNBaXJjcmFmdCBzcG9pbGVycyMyNS4xOC4xNS4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNS4wMi4wMCNBaXJjcmFmdCBmaW5zIzI1LjE4LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE4LjE1LjAzLjAwI0FpcmNyYWZ0IGhvcml6b250YWwgc3RhYmlsaXplcnMjMjUuMTguMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTguMTUuMDQuMDAjQWlyY3JhZnQgY2FuYXJkcyMyNS4xOC4xNS4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNS4wNS4wMCNBaXJjcmFmdCBzbGF0cyMyNS4xOC4xNS4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNS4wNi4wMCNBaXJjcmFmdCBmbGFwcyMyNS4xOC4xNS4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNS4wNy4wMCNBaXJjcmFmdCBydWRkZXJzIzI1LjE4LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE4LjE1LjA4LjAwI0FpcmNyYWZ0IGVsZXZhdG9ycyMyNS4xOC4xNS4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNS4wOS4wMCNBaXJjcmFmdCBhaWxlcm9ucyMyNS4xOC4xNS4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNS4xMC4wMCNBaXJjcmFmdCBwcm9wZWxsZXIjMjUuMTguMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTguMTUuMTEuMDAjQWlyY3JhZnQgd2luZ3MjMjUuMTguMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTguMTUuMTIuMDAjQWlyY3JhZnQgZnVzZWxhZ2UjMjUuMTguMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTguMTUuMTMuMDAjQWlyY3JhZnQgcmFkb21lcyMyNS4xOC4xNS4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNS4xNC4wMCNBaXJjcmFmdCByb3RvcnMjMjUuMTguMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTguMTUuMTUuMDAjQWlyY3JhZnQgbGlmdCBmYW5zIzI1LjE4LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE4LjE1LjE2LjAwI0FpcmNyYWZ0IGNhbm9waWVzIzI1LjE4LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE4LjE1LjE3LjAwI0FpcmNyYWZ0IGZ1cm5pc2hpbmdzIzI1LjE4LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE4LjE2LjAwLjAwI0F1dG9tb3RpdmUgY2hhc3NpcyMyNS4xOC4wMC4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNi4wMS4wMCNBdXRvbW9iaWxlIGNoYXNzaXMjMjUuMTguMTYuMDAuMDAKLXVuc3BzYzcjMjUuMTguMTYuMDIuMDAjVHJ1Y2sgY2hhc3NpcyMyNS4xOC4xNi4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNi4wMy4wMCNNb3RvcmN5Y2xlIGZyYW1lcyMyNS4xOC4xNi4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNi4wNC4wMCNUcnVjayBjaGFzc2lzIzI1LjE4LjE2LjAwLjAwCi11bnNwc2M3IzI1LjE4LjE3LjAwLjAwI1Byb2R1Y3QgYW5kIG1hdGVyaWFsIHRyYWlsZXJzIzI1LjE4LjAwLjAwLjAwCi11bnNwc2M3IzI1LjE4LjE3LjAxLjAwI0NvbnRhaW5lciB0cmFpbGVycyMyNS4xOC4xNy4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNy4wMi4wMCNGbGF0YmVkIHRyYWlsZXJzIzI1LjE4LjE3LjAwLjAwCi11bnNwc2M3IzI1LjE4LjE3LjAzLjAwI0xpdmVzdG9jayB0cmFpbGVycyMyNS4xOC4xNy4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNy4wNC4wMCNOb24gdGVtcGVyYXR1cmUgY29udHJvbGxlZCB0YW5rZXIgdHJhaWxlcnMjMjUuMTguMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTguMTcuMDUuMDAjVGVtcGVyYXR1cmUgY29udHJvbGxlZCB0YW5rZXIgdHJhaWxlcnMjMjUuMTguMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTguMTcuMDYuMDAjVGVtcGVyYXR1cmUgY29udHJvbGxlZCBjb250YWluZXIgdHJhaWxlcnMjMjUuMTguMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTguMTcuMDcuMDAjQXV0b21vYmlsZSBjYXJyaWVyIHRyYWlsZXJzIzI1LjE4LjE3LjAwLjAwCi11bnNwc2M3IzI1LjE4LjE3LjA4LjAwI1RyYWlsZXIgaGl0Y2hlcyMyNS4xOC4xNy4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNy4wOS4wMCNTa2lwIGxvYWRlciMyNS4xOC4xNy4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNy4xMC4wMCNUcmFpbGVyIGVuZCBwbGF0ZXMjMjUuMTguMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTguMTcuMTEuMDAjU25vd21vYmlsZSB0cmFpbGVyIzI1LjE4LjE3LjAwLjAwCi11bnNwc2M3IzI1LjE4LjE3LjEyLjAwI01vdG9yY3ljbGUgdHJhaWxlciMyNS4xOC4xNy4wMC4wMAotdW5zcHNjNyMyNS4xOC4xNy4xMy4wMCNCb2F0IFRyYWlsZXIjMjUuMTguMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTkuMDAuMDAuMDAjVHJhbnNwb3J0YXRpb24gc2VydmljZXMgZXF1aXBtZW50IzI1LjAwLjAwLjAwLjAwCi11bnNwc2M3IzI1LjE5LjE1LjAwLjAwI0FpciB0cmFuc3BvcnRhdGlvbiBzdXBwb3J0IHN5c3RlbXMgYW5kIGVxdWlwbWVudCMyNS4xOS4wMC4wMC4wMAotdW5zcHNjNyMyNS4xOS4xNS4wMS4wMCNHcm91bmQgc3VwcG9ydCB0cmFpbmluZyBzeXN0ZW1zIzI1LjE5LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE5LjE1LjAyLjAwI0dyb3VuZCBzdXBwb3J0IHRlc3Qgb3IgbWFpbnRlbmFuY2Ugc3lzdGVtcyMyNS4xOS4xNS4wMC4wMAotdW5zcHNjNyMyNS4xOS4xNS4wMy4wMCNJbnRlZ3JhdGVkIG1haW50ZW5hbmNlIGluZm9ybWF0aW9uIHN5c3RlbXMjMjUuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTkuMTUuMDQuMDAjQWlyY3JhZnQgZmxpZ2h0IHNpbXVsYXRvcnMgb3IgdHJhaW5lcnMjMjUuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTkuMTUuMDUuMDAjQWlyY3JhZnQgY2FyZ28gaGFuZGxpbmcgZXF1aXBtZW50IzI1LjE5LjE1LjAwLjAwCi11bnNwc2M3IzI1LjE5LjE1LjA2LjAwI0FpcmNyYWZ0IHJlZnVlbGluZyBlcXVpcG1lbnQjMjUuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTkuMTUuMDcuMDAjQWlyY3JhZnQgZGVpY2luZyBlcXVpcG1lbnQjMjUuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTkuMTUuMDguMDAjSmV0d2F5cyMyNS4xOS4xNS4wMC4wMAotdW5zcHNjNyMyNS4xOS4xNS4wOS4wMCNBaXJjcmFmdCBwdXNoYmFjayBvciB0b3cgdHJhY3RvcnMjMjUuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTkuMTUuMTAuMDAjR3JvdW5kIHBvd2VyIHVuaXRzIGZvciBhaXJjcmFmdCMyNS4xOS4xNS4wMC4wMAotdW5zcHNjNyMyNS4xOS4xNS4xMS4wMCNMYXZhdG9yeSBzZXJ2aWNlIGVxdWlwbWVudCBmb3IgYWlyY3JhZnQjMjUuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMTkuMTUuMTIuMDAjQWlyc3RhaXJzIG9yIHN0YWlyIHRydWNrcyMyNS4xOS4xNS4wMC4wMAotdW5zcHNjNyMyNS4xOS4xNi4wMC4wMCNTcGFjZSB0cmFuc3BvcnRhdGlvbiBzdXBwb3J0IHN5c3RlbXMgYW5kIGVxdWlwbWVudCMyNS4xOS4wMC4wMC4wMAotdW5zcHNjNyMyNS4xOS4xNi4wMS4wMCNTcGFjZWNyYWZ0IGZsaWdodCBzaW11bGF0b3JzIzI1LjE5LjE2LjAwLjAwCi11bnNwc2M3IzI1LjE5LjE2LjAyLjAwI1BheWxvYWQgZGVsaXZlcnkgc3lzdGVtcyBmb3Igc3BhY2VjcmFmdCMyNS4xOS4xNi4wMC4wMAotdW5zcHNjNyMyNS4xOS4xNi4wMy4wMCNMaXF1aWQgbGF1bmNoIHZlaGljbGVzIzI1LjE5LjE2LjAwLjAwCi11bnNwc2M3IzI1LjE5LjE2LjA0LjAwI1NvbGlkIGxhdW5jaCB2ZWhpY2xlcyMyNS4xOS4xNi4wMC4wMAotdW5zcHNjNyMyNS4xOS4xNi4wNS4wMCNTcGFjZWNyYWZ0IHNlcnZpY2UgbW9kdWxlcyMyNS4xOS4xNi4wMC4wMAotdW5zcHNjNyMyNS4xOS4xNy4wMC4wMCNWZWhpY2xlIHNlcnZpY2luZyBlcXVpcG1lbnQjMjUuMTkuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMTkuMTcuMDEuMDAjV2hlZWwgYmFsYW5jaW5nIGVxdWlwbWVudCMyNS4xOS4xNy4wMC4wMAotdW5zcHNjNyMyNS4xOS4xNy4wMi4wMCNXaGVlbCBhbGlnbm1lbnQgZXF1aXBtZW50IzI1LjE5LjE3LjAwLjAwCi11bnNwc2M3IzI1LjE5LjE3LjAzLjAwI1RpcmUgY2hhbmdpbmcgbWFjaGluZXMjMjUuMTkuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMTkuMTcuMDQuMDAjRW5naW5lIG9yIHZlaGljbGUgc3RhbmRzIzI1LjE5LjE3LjAwLjAwCi11bnNwc2M3IzI1LjIwLjAwLjAwLjAwI0Flcm9zcGFjZSBzeXN0ZW1zIGFuZCBjb21wb25lbnRzIGFuZCBlcXVpcG1lbnQjMjUuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTUuMDAuMDAjQWlyY3JhZnQgZnVzZWxhZ2UgYW5kIGNvbXBvbmVudHMjMjUuMjAuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTUuMDEuMDAjQWlyY3JhZnQgc3BvaWxlcnMjMjUuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTUuMDIuMDAjQWlyY3JhZnQgZmlucyMyNS4yMC4xNS4wMC4wMAotdW5zcHNjNyMyNS4yMC4xNS4wMy4wMCNBaXJjcmFmdCBob3Jpem9udGFsIHN0YWJpbGl6ZXJzIzI1LjIwLjE1LjAwLjAwCi11bnNwc2M3IzI1LjIwLjE1LjA0LjAwI0FpcmNyYWZ0IGNhbmFyZHMjMjUuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTUuMDUuMDAjQWlyY3JhZnQgc2xhdHMjMjUuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTUuMDYuMDAjQWlyY3JhZnQgZmxhcHMgb3IgZmxhcCBkcml2ZXMjMjUuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTUuMDcuMDAjQWlyY3JhZnQgcnVkZGVycyMyNS4yMC4xNS4wMC4wMAotdW5zcHNjNyMyNS4yMC4xNS4wOC4wMCNBaXJjcmFmdCBlbGV2YXRvcnMjMjUuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTUuMDkuMDAjQWlyY3JhZnQgYWlsZXJvbnMjMjUuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTUuMTAuMDAjQWlyY3JhZnQgcHJvcGVsbGVycyMyNS4yMC4xNS4wMC4wMAotdW5zcHNjNyMyNS4yMC4xNS4xMS4wMCNBaXJjcmFmdCB3aW5ncyMyNS4yMC4xNS4wMC4wMAotdW5zcHNjNyMyNS4yMC4xNS4xMi4wMCNBaXJjcmFmdCBmdXNlbGFnZXMjMjUuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTUuMTMuMDAjQWlyY3JhZnQgcmFkb21lcyMyNS4yMC4xNS4wMC4wMAotdW5zcHNjNyMyNS4yMC4xNS4xNC4wMCNBaXJjcmFmdCByb3RvcnMjMjUuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTUuMTUuMDAjQWlyY3JhZnQgbGlmdCBmYW5zIzI1LjIwLjE1LjAwLjAwCi11bnNwc2M3IzI1LjIwLjE1LjE2LjAwI0FpcmNyYWZ0IGNhbm9waWVzIzI1LjIwLjE1LjAwLjAwCi11bnNwc2M3IzI1LjIwLjE1LjE3LjAwI0FpcmNyYWZ0IGZ1cm5pc2hpbmdzIzI1LjIwLjE1LjAwLjAwCi11bnNwc2M3IzI1LjIwLjE2LjAwLjAwI0Flcm9zcGFjZSBsb2NhdGlvbiBhbmQgbmF2aWdhdGlvbiBzeXN0ZW1zIGFuZCBjb21wb25lbnRzIzI1LjIwLjAwLjAwLjAwCi11bnNwc2M3IzI1LjIwLjE2LjAxLjAwI0FpcmNyYWZ0IGRpZ2l0YWwgYWx0aXR1ZGUgY29udHJvbCBzeXN0ZW1zIzI1LjIwLjE2LjAwLjAwCi11bnNwc2M3IzI1LjIwLjE2LjAyLjAwI0FpcmNyYWZ0IG5hdmlnYXRpb24gYmVhY29ucyMyNS4yMC4xNi4wMC4wMAotdW5zcHNjNyMyNS4yMC4xNi4wMy4wMCNBaXIgdG8gZ3JvdW5kIHRlcnJhaW4gZm9sbG93aW5nIHN5c3RlbXMjMjUuMjAuMTYuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTYuMDQuMDAjQWlyY3JhZnQgZ3VpZGFuY2Ugc3lzdGVtcyMyNS4yMC4xNi4wMC4wMAotdW5zcHNjNyMyNS4yMC4xNi4wNS4wMCNBaXJjcmFmdCBzdGVlcmluZyBjb250cm9scyMyNS4yMC4xNi4wMC4wMAotdW5zcHNjNyMyNS4yMC4xNi4wNi4wMCNTcGFjZWNyYWZ0IGFsdGl0dWRlIGNvbnRyb2wgc3lzdGVtcyMyNS4yMC4xNi4wMC4wMAotdW5zcHNjNyMyNS4yMC4xNy4wMC4wMCNGbGlnaHQgY29tbXVuaWNhdGlvbnMgcmVsYXRlZCBzeXN0ZW1zIzI1LjIwLjAwLjAwLjAwCi11bnNwc2M3IzI1LjIwLjE3LjAxLjAwI0FpcmNyYWZ0IGNvbW11bmljYXRpb24gc3lzdGVtcyMyNS4yMC4xNy4wMC4wMAotdW5zcHNjNyMyNS4yMC4xNy4wMi4wMCNGbGlnaHQgZGF0YSByZWNvcmRlcnMjMjUuMjAuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTcuMDMuMDAjQWlyY3JhZnQgY291bnRlcm1lYXN1cmVzIzI1LjIwLjE3LjAwLjAwCi11bnNwc2M3IzI1LjIwLjE3LjA0LjAwI0VuY3J5cHRpb24gb3IgZGVjcnlwdGlvbiBzeXN0ZW1zIzI1LjIwLjE3LjAwLjAwCi11bnNwc2M3IzI1LjIwLjE3LjA1LjAwI0FpcmNyYWZ0IHRlbGVtZXRyeSBzeXN0ZW1zIzI1LjIwLjE3LjAwLjAwCi11bnNwc2M3IzI1LjIwLjE3LjA2LjAwI0FpcmNyYWZ0IGludGVyZmFjZSBlbGVjdHJvbmljcyMyNS4yMC4xNy4wMC4wMAotdW5zcHNjNyMyNS4yMC4xNy4wNy4wMCNBaXJjcmFmdCBneXJvcyMyNS4yMC4xNy4wMC4wMAotdW5zcHNjNyMyNS4yMC4xNy4wOC4wMCNBaXJjcmFmdCBjYW1lcmFzIzI1LjIwLjE3LjAwLjAwCi11bnNwc2M3IzI1LjIwLjE3LjA5LjAwI0FpcmNyYWZ0IHByb2JlcyBvciBzZW5zb3JzIzI1LjIwLjE3LjAwLjAwCi11bnNwc2M3IzI1LjIwLjE3LjEwLjAwI0FpcmNyYWZ0IHdhdmVndWlkZXMjMjUuMjAuMTcuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMTguMDAuMDAjQWlyY3JhZnQgbWFzdGVyIGNvbnRyb2wgc3lzdGVtcyMyNS4yMC4wMC4wMC4wMAotdW5zcHNjNyMyNS4yMC4xOC4wMS4wMCNGbGlnaHQgY29tcHV0ZXIgc3lzdGVtcyMyNS4yMC4xOC4wMC4wMAotdW5zcHNjNyMyNS4yMC4xOC4wMi4wMCNTcGFjZWNyYWZ0IGNvbW1hbmQgbW9kdWxlcyMyNS4yMC4xOC4wMC4wMAotdW5zcHNjNyMyNS4yMC4xOS4wMC4wMCNBaXJjcmFmdCBlbWVyZ2VuY3kgc3lzdGVtcyMyNS4yMC4wMC4wMC4wMAotdW5zcHNjNyMyNS4yMC4xOS4wMS4wMCNBaXJjcmFmdCBmaXJlIGNvbnRyb2wgb3IgZXh0aW5ndWlzaGluZyBzeXN0ZW1zIzI1LjIwLjE5LjAwLjAwCi11bnNwc2M3IzI1LjIwLjE5LjAyLjAwI0FpcmNyYWZ0IGVzY2FwZSBvciBlamVjdGlvbiBzeXN0ZW1zIzI1LjIwLjE5LjAwLjAwCi11bnNwc2M3IzI1LjIwLjE5LjAzLjAwI0FpcmNyYWZ0IHdhcm5pbmcgc3lzdGVtcyMyNS4yMC4xOS4wMC4wMAotdW5zcHNjNyMyNS4yMC4xOS4wNC4wMCNQYXJhY2h1dGVzIzI1LjIwLjE5LjAwLjAwCi11bnNwc2M3IzI1LjIwLjIwLjAwLjAwI0FpcmNyYWZ0IHBvd2VyIHN5c3RlbXMjMjUuMjAuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjAuMDEuMDAjU3BhY2VjcmFmdCBzb2xhciBjZWxscyMyNS4yMC4yMC4wMC4wMAotdW5zcHNjNyMyNS4yMC4yMC4wMi4wMCNTcGFjZWNyYWZ0IHNvbGFyIGFycmF5cyMyNS4yMC4yMC4wMC4wMAotdW5zcHNjNyMyNS4yMC4yMC4wMy4wMCNBaXJjcmFmdCBwb3dlciBzdXBwbHkgdW5pdHMjMjUuMjAuMjAuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjAuMDQuMDAjQXV4aWxsaWFyeSBwb3dlciB1bml0IHN5c3RlbXMgKEFQVXMpIzI1LjIwLjIwLjAwLjAwCi11bnNwc2M3IzI1LjIwLjIxLjAwLjAwI0ZsaWdodCBpbnN0cnVtZW50YXRpb24jMjUuMjAuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjEuMDEuMDAjQWVyb3NwYWNlIGNvY2twaXQgaW5kaWNhdG9ycyMyNS4yMC4yMS4wMC4wMAotdW5zcHNjNyMyNS4yMC4yMS4wMi4wMCNBZXJvc3BhY2UgY29ja3BpdCBnYXVnZXMjMjUuMjAuMjEuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjEuMDMuMDAjQWVyb3NwYWNlIGNvY2twaXQgZGlzcGxheSBwYW5lbHMjMjUuMjAuMjEuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjEuMDQuMDAjQWVyb3NwYWNlIGNvY2twaXQgc3dpdGNoIHBhbmVscyMyNS4yMC4yMS4wMC4wMAotdW5zcHNjNyMyNS4yMC4yMS4wNS4wMCNBZXJvc3BhY2UgaGVhZCB1cCBkaXNwbGF5IChIVURzKSMyNS4yMC4yMS4wMC4wMAotdW5zcHNjNyMyNS4yMC4yMi4wMC4wMCNBaXJjcmFmdCBsYW5kaW5nIGFuZCBicmFraW5nIHN5c3RlbXMjMjUuMjAuMDAuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjIuMDEuMDAjQWlyY3JhZnQgYnJha2luZyBzeXN0ZW1zIzI1LjIwLjIyLjAwLjAwCi11bnNwc2M3IzI1LjIwLjIyLjAyLjAwI0FpcmNyYWZ0IGRyYWcgY2h1dGVzIzI1LjIwLjIyLjAwLjAwCi11bnNwc2M3IzI1LjIwLjIyLjAzLjAwI0FpcmNyYWZ0IHdoZWVscyMyNS4yMC4yMi4wMC4wMAotdW5zcHNjNyMyNS4yMC4yMi4wNC4wMCNMYW5kaW5nIGdlYXIgYXNzZW1ibGllcyMyNS4yMC4yMi4wMC4wMAotdW5zcHNjNyMyNS4yMC4yMi4wNS4wMCNBaXJjcmFmdCB0aXJlcyMyNS4yMC4yMi4wMC4wMAotdW5zcHNjNyMyNS4yMC4yMi4wNi4wMCNBaWNyYWZ0IGFudGkgc2tpZCBjb250cm9scyMyNS4yMC4yMi4wMC4wMAotdW5zcHNjNyMyNS4yMC4yMy4wMC4wMCNBaXJjcmFmdCBwYXNzZW5nZXIgcmVzdHJhaW50cyMyNS4yMC4wMC4wMC4wMAotdW5zcHNjNyMyNS4yMC4yMy4wMS4wMCNBaXJjcmFmdCBsYXBiZWx0cyMyNS4yMC4yMy4wMC4wMAotdW5zcHNjNyMyNS4yMC4yMy4wMi4wMCNBaXJjcmFmdCBoYXJuZXNzIHJlc3RyYWludHMjMjUuMjAuMjMuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjQuMDAuMDAjQWlyY3JhZnQgZnVlbCB0YW5rcyBhbmQgc3lzdGVtcyMyNS4yMC4wMC4wMC4wMAotdW5zcHNjNyMyNS4yMC4yNC4wMS4wMCNBaXJjcmFmdCBpbnRlcm5hbCBmdWVsIHRhbmtzIzI1LjIwLjI0LjAwLjAwCi11bnNwc2M3IzI1LjIwLjI0LjAyLjAwI0FpcmNyYWZ0IGZ1ZWwgZHJvcCB0YW5rcyMyNS4yMC4yNC4wMC4wMAotdW5zcHNjNyMyNS4yMC4yNC4wMy4wMCNBaXJjcmFmdCBwcm9wZWxsYW50IHRhbmtzIzI1LjIwLjI0LjAwLjAwCi11bnNwc2M3IzI1LjIwLjI0LjA0LjAwI0FpcmNyYWZ0IGh5YnJpZCBmdWVsIHN0b3JhZ2Ugc3lzdGVtcyMyNS4yMC4yNC4wMC4wMAotdW5zcHNjNyMyNS4yMC4yNC4wNS4wMCNBaXJjcmFmdCBmdWVsIG1hbmFnZW1lbnQgc3lzdGVtcyMyNS4yMC4yNC4wMC4wMAotdW5zcHNjNyMyNS4yMC4yNC4wNi4wMCNQb3N0Ym9vc3RlcnMjMjUuMjAuMjQuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjUuMDAuMDAjQWlyY3JhZnQgZXF1aXBtZW50IzI1LjIwLjAwLjAwLjAwCi11bnNwc2M3IzI1LjIwLjI1LjAxLjAwI0FpcmNyYWZ0IGh5ZHJhdWxpYyBzeXN0ZW1zIzI1LjIwLjI1LjAwLjAwCi11bnNwc2M3IzI1LjIwLjI1LjAyLjAwI0V4dGVyaW9yIGFpcmNyYWZ0IGxpZ2h0aW5nIzI1LjIwLjI1LjAwLjAwCi11bnNwc2M3IzI1LjIwLjI1LjAzLjAwI0ludGVyaW9yIGFpcmNyYWZ0IGxpZ2h0aW5nIzI1LjIwLjI1LjAwLjAwCi11bnNwc2M3IzI1LjIwLjI1LjA0LjAwI0FpcmNyYWZ0IHdpbmRzaGllbGQgd2lwZXJzIzI1LjIwLjI1LjAwLjAwCi11bnNwc2M3IzI1LjIwLjI1LjA1LjAwI0FpcmNyYWZ0IG9uYm9hcmQgZGVmcm9zdGluZyBvciBkZWZvZ2dpbmcgc3lzdGVtcyMyNS4yMC4yNS4wMC4wMAotdW5zcHNjNyMyNS4yMC4yNS4wNi4wMCNBaXJjcmFmdCBkb29ycyMyNS4yMC4yNS4wMC4wMAotdW5zcHNjNyMyNS4yMC4yNS4wNy4wMCNBaXJjcmFmdCB3aW5kb3dzIzI1LjIwLjI1LjAwLjAwCi11bnNwc2M3IzI1LjIwLjI1LjA4LjAwI0FpcmNyYWZ0IHdpbmRzaGllbGRzIzI1LjIwLjI1LjAwLjAwCi11bnNwc2M3IzI1LjIwLjI1LjA5LjAwI0FpcmNyYWZ0IHNob2NrIG1vdW50cyMyNS4yMC4yNS4wMC4wMAotdW5zcHNjNyMyNS4yMC4yNS4xMC4wMCNBaXJjcmFmdCBzbGlwIHJpbmcgYXNzZW1ibGllcyMyNS4yMC4yNS4wMC4wMAotdW5zcHNjNyMyNS4yMC4yNi4wMC4wMCNBaXJjcmFmdCBlbnZpcm9ubWVudGFsIGNvbnRyb2wgc3lzdGVtcyBhbmQgY29tcG9uZW50cyMyNS4yMC4wMC4wMC4wMAotdW5zcHNjNyMyNS4yMC4yNi4wMS4wMCNBaXJjcmFmdCBlbnZpcm9ubWVudCBjb250cm9sbGVycyMyNS4yMC4yNi4wMC4wMAotdW5zcHNjNyMyNS4yMC4yNi4wMi4wMCNBaXJjcmFmdCBlbnZpcm9ubWVudCByZWd1bGF0b3JzIzI1LjIwLjI2LjAwLjAwCi11bnNwc2M3IzI1LjIwLjI2LjAzLjAwI0FpcmNyYWZ0IGNvb2xpbmcgdHVyYmluZXMjMjUuMjAuMjYuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjYuMDQuMDAjQWlyY3JhZnQgY29vbGluZyBmYW5zIzI1LjIwLjI2LjAwLjAwCi11bnNwc2M3IzI1LjIwLjI2LjA1LjAwI0FpcmNyYWZ0IGhlYXQgZXhjaGFuZ2VycyMyNS4yMC4yNi4wMC4wMAotdW5zcHNjNyMyNS4yMC4yNi4wNi4wMCNBaXJjcmFmdCB3YXRlciBzZXBhcmF0b3JzIzI1LjIwLjI2LjAwLjAwCi11bnNwc2M3IzI1LjIwLjI2LjA3LjAwI0FpcmNyYWZ0IG94eWdlbiBlcXVpcG1lbnQjMjUuMjAuMjYuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjcuMDAuMDAjQWlyY3JhZnQgYWNjdW11bGF0b3JzIzI1LjIwLjAwLjAwLjAwCi11bnNwc2M3IzI1LjIwLjI3LjAxLjAwI0h5ZHJhdWxpYyBhaXJjcmFmdCBhY2N1bXVsYXRvcnMjMjUuMjAuMjcuMDAuMDAKLXVuc3BzYzcjMjUuMjAuMjcuMDIuMDAjUG5ldW1hdGljIGFpcmNyYWZ0IGFjY3VtdWxhdG9ycyMyNS4yMC4yNy4wMC4wMAotdW5zcHNjNyMyNi4wMC4wMC4wMC4wMCNQb3dlciBHZW5lcmF0aW9uIGFuZCBEaXN0cmlidXRpb24gTWFjaGluZXJ5IGFuZCBBY2Nlc3NvcmllcyMyNi4wMC4wMC4wMC4wMAotdW5zcHNjNyMyNi4xMC4wMC4wMC4wMCNQb3dlciBzb3VyY2VzIzI2LjAwLjAwLjAwLjAwCi11bnNwc2M3IzI2LjEwLjE1LjAwLjAwI0VuZ2luZXMjMjYuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTUuMDEuMDAjSHlkcmF1bGljIGVuZ2luZXMjMjYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTUuMDIuMDAjUG5ldW1hdGljIGVuZ2luZXMjMjYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTUuMDMuMDAjR2FzIGVuZ2luZXMjMjYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTUuMDQuMDAjRGllc2VsIGVuZ2luZXMjMjYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTUuMDUuMDAjU3RlYW0gZW5naW5lcyMyNi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNS4wNi4wMCNUdXJiaW5lIGVuZ2luZXMjMjYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTUuMDcuMDAjVHVyYm9mYW4gZW5naW5lcyMyNi4xMC4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNS4wOC4wMCNUaGVybWFsIGVuZ2luZXMjMjYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTUuMDkuMDAjSHlkcm9lbGVjdHJpYyBlbmdpbmVzIzI2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE1LjEwLjAwI1JvdGFyeSBlbmdpbmVzIzI2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE1LjExLjAwI0h5ZHJhdWxpYyB0dXJiaW5lIGVuZ2luZXMjMjYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTUuMTIuMDAjVHVyYm9wcm9wIGVuZ2luZXMjMjYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTUuMTMuMDAjRW5naW5lIFJlcGFpciBLaXQjMjYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTYuMDAuMDAjTW90b3JzIzI2LjEwLjAwLjAwLjAwCi11bnNwc2M3IzI2LjEwLjE2LjAxLjAwI0luZHVjdGlvbiBtb3RvcnMjMjYuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTYuMDIuMDAjQWx0ZXJuYXRpbmcgY3VycmVudCAoQUMpIG1vdG9ycyMyNi4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNi4wMy4wMCNEaXJlY3QgY3VycmVudCAoREMpIG1vdG9ycyMyNi4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNi4wNC4wMCNBbHRlcm5hdGluZyBjdXJyZW50IG9yIGRpcmVjdCBjdXJyZW50IChBQy9EQykgbW90b3JzIzI2LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE2LjA1LjAwI0R5bmFtb3RvcnMjMjYuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTYuMDYuMDAjU2Vydm9tb3RvcnMjMjYuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTYuMDcuMDAjVG9ycXVlIG1vdG9ycyMyNi4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNi4wOC4wMCNMaXF1aWQgcm9ja2V0IG1vdG9ycyMyNi4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNi4wOS4wMCNTeW5jaHJvbm91cyBtb3RvcnMjMjYuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTYuMTAuMDAjU29saWQgcm9ja2V0IG1vdG9ycyMyNi4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNi4xMS4wMCNTaW5nbGUgcGhhc2UgbW90b3JzIzI2LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE2LjEyLjAwI011bHRpIHBoYXNlIG1vdG9ycyMyNi4xMC4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNi4xMy4wMCNIeWRyYXVsaWMgbW90b3JzIzI2LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE2LjE0LjAwI1N0ZXAgbW90b3JzIzI2LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE2LjE1LjAwI0FsdGVybmF0b3JzIzI2LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE2LjE2LjAwI0NhcmJvbiBCcnVzaGVzIzI2LjEwLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjAwLjAwI0VuZ2luZSBjb21wb25lbnRzIzI2LjEwLjAwLjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjAxLjAwI0FpcmNyYWZ0IGJ1cm5lcnMjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMDIuMDAjQWlyY3JhZnQgZW5naW5lIGNvbXByZXNzb3JzIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjAzLjAwI0FpcmNyYWZ0IGVuZ2luZSBkaWZmdXNlcnMjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMDQuMDAjRW5naW5lIG1vdW50cyMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy4wNS4wMCNBaXJjcmFmdCBkcml2ZSBzaGFmdHMgcG93ZXIgdGFrZSBvZmZzIG9yIHNjcmV3IGphY2tzIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjA2LjAwI0FpcmNyYWZ0IHRyYW5zbWlzc2lvbiB1bml0cyMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy4wNy4wMCNCYWxhbmNlIHNoYWZ0cyMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy4wOC4wMCNDYW0gZm9sbG93ZXJzIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjA5LjAwI0NhbXNoYWZ0IGxpZnRlcnMjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMTAuMDAjQ2FyYnVyZXRvcnMjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMTEuMDAjQ29ubmVjdGluZyByb2RzIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjEyLjAwI0NyYW5rY2FzZSB2ZW50aWxsYXRpb24gdmFsdmVzIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjEzLjAwI0N5bGluZGVyIGhlYWRzIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjE0LjAwI0VuZ2luZSBjb29sYW50IHJhZGlhdG9ycyMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy4xNS4wMCNFbmdpbmUgY292ZXJzIG9yIHBhbnMjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMTYuMDAjRW5naW5lIGZvcmdpbmdzIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjE3LjAwI0VuZ2luZSBoZWF0ZXJzIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjE4LjAwI0VuZ2luZSBpZ25pdGlvbiBzeXN0ZW1zIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjE5LjAwI1N1cGVyY2hhcmdlciMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy4yMC4wMCNUdXJib2NoYXJnZXIjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMjEuMDAjRW5naW5lIHB1bGxleXMjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMjIuMDAjRnVlbCBpbmplY3Rpb24gc3lzdGVtcyMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy4yMy4wMCNGdWVsIHZhcG9yIGNhbmlzdGVyIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjI0LjAwI0dsb3cgcGx1Z3MjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMjUuMDAjT2lsIGRpcCBzdGlja3MgYW5kIHR1YmVzIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjI2LjAwI09pbCBzdHJhaW5lcnMjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMjcuMDAjUGlzdG9uIHJpbmdzIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjI4LjAwI1B1c2ggcm9kIHR1YmVzIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjI5LjAwI1JvY2tlciBhcm0gYmFsbHMjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMzAuMDAjUm9ja2VyIGFybSBzaGFmdHMjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMzEuMDAjUm9ja2VyIGFybXMjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMzIuMDAjU3BhcmsgcGx1Z3MjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMzMuMDAjQ2FyYnVyZXRvciBqZXQjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMzQuMDAjQ2FyYnVyZXRvciBkaWFwaHJhZ21zIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjM1LjAwI09pbCBwYW4jMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMzYuMDAjUGlzdG9ucyMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy4zNy4wMCNUaW1pbmcgY2hhaW4jMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuMzguMDAjSW50YWtlIG1hbmlmb2xkcyMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy4zOS4wMCNFeGhhdXN0IG1hbmlmb2xkcyMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy40MC4wMCNGdWVsIGluamVjdG9ycyMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy40MS4wMCNFbmdpbmUgc2xlZXZlcyMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy40Mi4wMCNGdWVsIGluamVjdGlvbiBtYW5pZm9sZHMjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuNDMuMDAjRW5naW5lIHZhbHZlcyMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy40NC4wMCNUdXJib2NoYXJnZXIjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuNDUuMDAjY2Ftc2hhZnQjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuNDYuMDAjQ3lsaW5kZXIgaGVhZCMyNi4xMC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMC4xNy40Ny4wMCNQdXNoIHJvZHMjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuNDguMDAjRW5naW5lIGZseXdoZWVsIzI2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE3LjQ5LjAwI0NyYW5rc2hhZnQjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuNTAuMDAjVGhyb3R0bGUjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuNTEuMDAjRWxlY3Ryb25pYyBlbmdpbmUgY29udHJvbHMjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTcuNTIuMDAjVmlicmF0aW9uIGRhbXBlcnMjMjYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTguMDAuMDAjTW90b3Igb3IgZ2VuZXJhdG9yIGNvbXBvbmVudHMjMjYuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTguMDEuMDAjTW90b3IgYnJ1c2hlcyMyNi4xMC4xOC4wMC4wMAotdW5zcHNjNyMyNi4xMC4xOC4wMi4wMCNBcm1hdHVyZXMjMjYuMTAuMTguMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTguMDMuMDAjUm90b3JzIG9yIHN0YXRvcnMjMjYuMTAuMTguMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTguMDQuMDAjTW90b3IgbW91bnRzIG9yIGJhc2VzIzI2LjEwLjE4LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE5LjAwLjAwI0ludGVybmFsIGNvbWJ1c3Rpb24gZW5naW5lIGNvbXBvbmVudHMjMjYuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMjYuMTAuMTkuMDEuMDAjQ3Jhbmsgc2hhZnRzIzI2LjEwLjE5LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE5LjAyLjAwI1NwYXJrIHBsdWdzIzI2LjEwLjE5LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE5LjAzLjAwI0NhbXNoYWZ0IzI2LjEwLjE5LjAwLjAwCi11bnNwc2M3IzI2LjEwLjE5LjA0LjAwI0Z1ZWwgaW5qZWN0aW9uIG5venpsZSMyNi4xMC4xOS4wMC4wMAotdW5zcHNjNyMyNi4xMC4xOS4wNS4wMCNDeWxpbmRlciBibG9jayMyNi4xMC4xOS4wMC4wMAotdW5zcHNjNyMyNi4xMS4wMC4wMC4wMCNCYXR0ZXJpZXMgYW5kIGdlbmVyYXRvcnMgYW5kIGtpbmV0aWMgcG93ZXIgdHJhbnNtaXNzaW9uIzI2LjAwLjAwLjAwLjAwCi11bnNwc2M3IzI2LjExLjE1LjAwLjAwI0tpbmV0aWMgcG93ZXIgdHJhbnNtaXNzaW9uIzI2LjExLjAwLjAwLjAwCi11bnNwc2M3IzI2LjExLjE1LjAxLjAwI0NvbW11dGF0b3JzIzI2LjExLjE1LjAwLjAwCi11bnNwc2M3IzI2LjExLjE1LjAzLjAwI0FkanVzdGFibGUgc3BlZWQgZHJpdmVzIzI2LjExLjE1LjAwLjAwCi11bnNwc2M3IzI2LjExLjE1LjA0LjAwI0JlbHQgZHJpdmVzIzI2LjExLjE1LjAwLjAwCi11bnNwc2M3IzI2LjExLjE1LjA1LjAwI0NoYWluIGRyaXZlcyMyNi4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNS4wNi4wMCNMaW5lYXIgbW90aW9uIGRldmljZXMjMjYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTUuMDcuMDAjQ2x1dGNoZXMjMjYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTUuMDguMDAjUG93ZXIgdGFrZSBvZmZzIzI2LjExLjE1LjAwLjAwCi11bnNwc2M3IzI2LjExLjE1LjA5LjAwI1RyYW5zbWlzc2lvbiB5b2tlcyMyNi4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNS4xMC4wMCNUcmFuc21pc3Npb24gc2hhZnRzIzI2LjExLjE1LjAwLjAwCi11bnNwc2M3IzI2LjExLjE1LjExLjAwI1VuaXZlcnNhbCBqb2ludHMjMjYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTUuMTIuMDAjQXhsZXMjMjYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTUuMTMuMDAjUG93ZXIgdHJhbnNtaXNzaW9uIGNoYWlucyMyNi4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNS4xNC4wMCNLbnVja2xlIGpvaW50cyMyNi4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNS4xNS4wMCNTZXJ2byBjb250cm9sbGVyIzI2LjExLjE1LjAwLjAwCi11bnNwc2M3IzI2LjExLjE1LjE2LjAwI1N0ZXAgZHJpdmUgb3Igc3RlcHBlciBkcml2ZSBvciBzdGVwIGluZGV4ZXIjMjYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTUuMTcuMDAjUGxhbmV0IGNhcnJpZXIjMjYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTUuMTguMDAjVGVuc2lvbiBzdHJ1dCMyNi4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNS4xOS4wMCNUb3JxdWUgY29udmVydGVycyMyNi4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNS4yMC4wMCNUcnVubmlvbnMjMjYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTUuMjEuMDAjUHVzaGVyIGhlYWQjMjYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTUuMjIuMDAjUHVzaGVyIGFzc2VtYmx5IzI2LjExLjE1LjAwLjAwCi11bnNwc2M3IzI2LjExLjE1LjIzLjAwI0JhY2tzdG9wcyMyNi4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNi4wMC4wMCNQb3dlciBnZW5lcmF0b3JzIzI2LjExLjAwLjAwLjAwCi11bnNwc2M3IzI2LjExLjE2LjAxLjAwI0RpZXNlbCBnZW5lcmF0b3JzIzI2LjExLjE2LjAwLjAwCi11bnNwc2M3IzI2LjExLjE2LjAyLjAwI0h5ZHJvIGVsZWN0cmljIGdlbmVyYXRvcnMjMjYuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTYuMDMuMDAjV2luZCBnZW5lcmF0b3JzIzI2LjExLjE2LjAwLjAwCi11bnNwc2M3IzI2LjExLjE2LjA0LjAwI0dhcyBnZW5lcmF0b3JzIzI2LjExLjE2LjAwLjAwCi11bnNwc2M3IzI2LjExLjE2LjA1LjAwI1RoZXJtYWwgZ2VuZXJhdG9ycyMyNi4xMS4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNi4wNi4wMCNIeWRyYXVsaWMgZ2VuZXJhdG9ycyMyNi4xMS4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNi4wNy4wMCNTb2xhciBnZW5lcmF0b3JzIzI2LjExLjE2LjAwLjAwCi11bnNwc2M3IzI2LjExLjE3LjAwLjAwI0JhdHRlcmllcyBhbmQgYWNjZXNzb3JpZXMjMjYuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTcuMDEuMDAjUmVjaGFyZ2VhYmxlIGJhdHRlcmllcyMyNi4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNy4wMi4wMCNBbGthbGluZSBiYXR0ZXJpZXMjMjYuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTcuMDMuMDAjVmVoaWNsZSBiYXR0ZXJpZXMjMjYuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTcuMDQuMDAjQmF0dGVyeSBjaGFyZ2VycyMyNi4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNy4wNS4wMCNEcnkgY2VsbCBiYXR0ZXJpZXMjMjYuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTcuMDYuMDAjRWxlY3Ryb25pYyBiYXR0ZXJpZXMjMjYuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTcuMDcuMDAjTGVhZCBhY2lkIGJhdHRlcmllcyMyNi4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNy4wOC4wMCNOaWNrZWwgaXJvbiBiYXR0ZXJpZXMjMjYuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTcuMDkuMDAjTmlja2VsIGNhZG1pdW0gYmF0dGVyaWVzIzI2LjExLjE3LjAwLjAwCi11bnNwc2M3IzI2LjExLjE3LjEwLjAwI1Byb2R1Y3Qgc3BlY2lmaWMgYmF0dGVyeSBwYWNrcyMyNi4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNy4xMS4wMCNMaXRoaXVtIGJhdHRlcmllcyMyNi4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNy4xMi4wMCNOaWNrZWwgaHlkcm9nZW4gYmF0dGVyaWVzIzI2LjExLjE3LjAwLjAwCi11bnNwc2M3IzI2LjExLjE3LjEzLjAwI1RoZXJtYWwgYmF0dGVyaWVzIzI2LjExLjE3LjAwLjAwCi11bnNwc2M3IzI2LjExLjE3LjE0LjAwI1p5bmMgYWlyIzI2LjExLjE3LjAwLjAwCi11bnNwc2M3IzI2LjExLjE3LjE1LjAwI1ppbmMgY29hbCBiYXR0ZXJ5IzI2LjExLjE3LjAwLjAwCi11bnNwc2M3IzI2LjExLjE3LjE2LjAwI01lcmN1cnkgb3hpZGUgYmF0dGVyeSMyNi4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNi4xMS4xNy4xNy4wMCNNYW5nYW5lc2UgYmF0dGVyaWVzIzI2LjExLjE3LjAwLjAwCi11bnNwc2M3IzI2LjExLjE3LjE4LjAwI1NpbHZlciBveGlkZSBiYXR0ZXJpZXMjMjYuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTcuMTkuMDAjQmF0dGVyeSB0ZXN0ZXJzIzI2LjExLjE3LjAwLjAwCi11bnNwc2M3IzI2LjExLjE4LjAwLjAwI0RyaXZlIGNvbXBvbmVudHMjMjYuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTguMDEuMDAjViBiZWx0cyMyNi4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNi4xMS4xOC4wMi4wMCNHZWFyZWQgdGltaW5nIGJlbHRzIzI2LjExLjE4LjAwLjAwCi11bnNwc2M3IzI2LjExLjE4LjAzLjAwI1JvdW5kIGJlbHRzIzI2LjExLjE4LjAwLjAwCi11bnNwc2M3IzI2LjExLjE4LjA0LjAwI0ZsYXQgYmVsdHMjMjYuMTEuMTguMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTguMDUuMDAjQmVsdCB0ZW5zaW9uZXJzIzI2LjExLjE4LjAwLjAwCi11bnNwc2M3IzI2LjExLjE4LjA2LjAwI1RyYW5zbWlzc2lvbiBwdWxsZXlzIzI2LjExLjE4LjAwLjAwCi11bnNwc2M3IzI2LjExLjE4LjA3LjAwI1RpbWluZyBwdWxsZXkjMjYuMTEuMTguMDAuMDAKLXVuc3BzYzcjMjYuMTEuMTguMDguMDAjVHJhbnRvcnF1ZSMyNi4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNi4xMS4xOC4wOS4wMCNCZWx0IGd1YXJkcyMyNi4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNi4xMS4xOS4wMC4wMCNDbHV0Y2hlcyMyNi4xMS4wMC4wMC4wMAotdW5zcHNjNyMyNi4xMS4xOS4wMS4wMCNQbGF0ZSBjbHV0Y2hlcyMyNi4xMS4xOS4wMC4wMAotdW5zcHNjNyMyNi4xMS4xOS4wMi4wMCNEaWFwaHJhZ20gY2x1dGNoIzI2LjExLjE5LjAwLjAwCi11bnNwc2M3IzI2LjExLjE5LjAzLjAwI0NlbnRyaWZ1Z2FsIGNsdXRjaCMyNi4xMS4xOS4wMC4wMAotdW5zcHNjNyMyNi4xMS4xOS4wNC4wMCNTZW1pIGNlbnRyaWZ1Z2FsIGNsdXRjaCMyNi4xMS4xOS4wMC4wMAotdW5zcHNjNyMyNi4xMS4xOS4wNS4wMCNGcmVlIHdoZWVsIGNsdXRjaCMyNi4xMS4xOS4wMC4wMAotdW5zcHNjNyMyNi4xMS4xOS4wNi4wMCNUb3JxdWUgY29udmVydGVyIzI2LjExLjE5LjAwLjAwCi11bnNwc2M3IzI2LjExLjE5LjA3LjAwI0ZsdWlkIGNvdXBsaW5nIzI2LjExLjE5LjAwLjAwCi11bnNwc2M3IzI2LjExLjE5LjA4LjAwI0NhbSBjbHV0Y2hlcyMyNi4xMS4xOS4wMC4wMAotdW5zcHNjNyMyNi4xMS4yMC4wMC4wMCNDbHV0Y2ggcGFydHMgYW5kIGFjY2Vzc29yaWVzIzI2LjExLjAwLjAwLjAwCi11bnNwc2M3IzI2LjExLjIwLjAxLjAwI1ByZXNzdXJlIHBsYXRlIzI2LjExLjIwLjAwLjAwCi11bnNwc2M3IzI2LjExLjIwLjAyLjAwI0RyaXZlbiBwbGF0ZSMyNi4xMS4yMC4wMC4wMAotdW5zcHNjNyMyNi4xMS4yMC4wMy4wMCNDbHV0Y2ggcGxhdGVzIzI2LjExLjIwLjAwLjAwCi11bnNwc2M3IzI2LjExLjIxLjAwLjAwI0luZHVzdHJpYWwgYnJha2luZyBzeXN0ZW1zIzI2LjExLjAwLjAwLjAwCi11bnNwc2M3IzI2LjExLjIxLjAxLjAwI0FpciBvciBwbmV1bWF0aWMgYnJha2luZyBzeXN0ZW1zIzI2LjExLjIxLjAwLjAwCi11bnNwc2M3IzI2LjExLjIxLjAyLjAwI0h5ZHJhdWxpYyBicmFraW5nIHN5c3RlbXMjMjYuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMjEuMDMuMDAjTWVjaGFuaWNhbCBicmFraW5nIHN5c3RlbXMjMjYuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjYuMTEuMjEuMDQuMDAjQnJha2luZyBjbHV0Y2ggYXNzZW1ibGllcyMyNi4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNi4xMi4wMC4wMC4wMCNFbGVjdHJpY2FsIHdpcmUgYW5kIGNhYmxlIGFuZCBoYXJuZXNzIzI2LjAwLjAwLjAwLjAwCi11bnNwc2M3IzI2LjEyLjE1LjAwLjAwI0VsZWN0cmljYWwgd2lyZSMyNi4xMi4wMC4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNS4wMS4wMCNIZWF0aW5nIHdpcmUjMjYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTUuMDUuMDAjRml4dHVyZSB3aXJlIzI2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE1LjA3LjAwI1JhZGlvIG9yIHRlbGV2aXNpb24gd2lyZSMyNi4xMi4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNS4wOC4wMCNBdXRvbW90aXZlIG9yIGFpcmNyYWZ0IHdpcmUjMjYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTUuMDkuMDAjTWFnbmV0IHdpcmUjMjYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTUuMTAuMDAjVHJvbGxleSB3aXJlIzI2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE1LjE0LjAwI1VuZGVyZ3JvdW5kIHdpcmUjMjYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTUuMTUuMDAjU2lsaWNvbiBhc2Jlc3RvcyAoU0EpIHdpcmUjMjYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTUuMTcuMDAjQ29wcGVyIHdpcmUjMjYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTUuMTkuMDAjQ29wcGVyIGNsYWQgYWx1bWludW0gd2lyZSMyNi4xMi4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNS4yMC4wMCNDb3BwZXIgc3RlZWwgd2lyZSMyNi4xMi4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNS4yMS4wMCNCcm9uemUgd2lyZSMyNi4xMi4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNS4yMi4wMCNCYXJlIHdpcmUjMjYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTUuMjMuMDAjQ292ZXJlZCBidXQgbm90IGluc3VsYXRlZCB3aXJlIzI2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE1LjI0LjAwI0luc3VsYXRlZCBvciBjb3ZlcmVkIHdpcmUjMjYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTUuMzIuMDAjSW50ZXIgY29ubmVjdCB3aXJlIzI2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE1LjMzLjAwI0thcHRhbiB3aXJlIzI2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE1LjM0LjAwI1BvbHltaWRlIHdpcmUjMjYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTUuMzUuMDAjRXh0ZW5zaW9uIGNvcmQjMjYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTUuMzYuMDAjRXh0ZW5zaW9uIGNvcmQjMjYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTUuMzcuMDAjV2lyZSBhc3NlbWJseSMyNi4xMi4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNS4zOC4wMCNXaXJlIGFzc2VtYmx5IzI2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE2LjAwLjAwI0VsZWN0cmljYWwgY2FibGUjMjYuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTYuMDEuMDAjSGVhdGluZyBjYWJsZSMyNi4xMi4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNi4wMi4wMCNTdWJtYXJpbmUgY2FibGUjMjYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTYuMDMuMDAjQ29udHJvbCBjYWJsZSMyNi4xMi4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNi4wNC4wMCNTaWduYWwgY2FibGUjMjYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTYuMDUuMDAjQXV0b21vdGl2ZSBvciBhaXJjcmFmdCBjYWJsZSMyNi4xMi4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNi4wNi4wMCNDb2F4aWFsIGNhYmxlIzI2LjEyLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE2LjA3LjAwI0ZpYmVyIG9wdGljIGNhYmxlIzI2LjEyLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE2LjA4LjAwI0FlcmlhbCBjYWJsZSMyNi4xMi4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNi4wOS4wMCNOZXR3b3JrIGNhYmxlIzI2LjEyLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE2LjEwLjAwI0Jyb256ZSBjYWJsZSMyNi4xMi4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNi4xMS4wMCNCYXJlIGNhYmxlIzI2LjEyLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE2LjEyLjAwI0NvdmVyZWQgYnV0IG5vdCBpbnN1bGF0ZWQgY2FibGUjMjYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTYuMTMuMDAjSW5zdWxhdGVkIG9yIGNvdmVyZWQgY2FibGUjMjYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTYuMTQuMDAjQnVpbGRpbmcgY2FibGUjMjYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTYuMTUuMDAjUG93ZXIgY2FibGUgZm9yIGRpcmVjdCBidXJpYWwjMjYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTYuMTYuMDAjVGVsZWNvbW11bmljYXRpb25zIGNhYmxlIzI2LjEyLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE2LjE3LjAwI1RyaWF4aWFsIGNhYmxlIzI2LjEyLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE2LjE4LjAwI0Nyb3NzbGlua2VkIHBvbHlrYWVuZSBjYWJsZSMyNi4xMi4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNi4xOS4wMCNGbG9yb3BvbHltZXIgY2FibGUjMjYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTYuMjAuMDAjSW50ZXIgY29ubmVjdCBjYWJsZSMyNi4xMi4xNi4wMC4wMAotdW5zcHNjNyMyNi4xMi4xNi4yMS4wMCNLYXB0YW4gY2FibGUjMjYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTYuMjIuMDAjUG9seW1pZGUgY2FibGUjMjYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTYuMjMuMDAjUmFkaW8gZnJlcXVlbmN5IChSRikgY2FibGUjMjYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTYuMjQuMDAjUmliYm9uIG9yIGZsYXQgY2FibGUjMjYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTYuMjUuMDAjQ29wcGVyIGNhYmxlIzI2LjEyLjE2LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE3LjAwLjAwI1dpcmluZyBoYXJuZXNzIzI2LjEyLjAwLjAwLjAwCi11bnNwc2M3IzI2LjEyLjE3LjAxLjAwI1BhbmVsIHdpcmluZyBoYXJuZXNzIzI2LjEyLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE3LjAyLjAwI1RydW5rIHdpcmluZyBoYXJuZXNzIzI2LjEyLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEyLjE3LjAzLjAwI0NvbW11bmljYXRpb24gd2lyaW5nIGhhcm5lc3MjMjYuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTIuMTcuMDQuMDAjU3BlY2lhbHR5IHdpcmluZyBoYXJuZXNzIzI2LjEyLjE3LjAwLjAwCi11bnNwc2M3IzI2LjEzLjAwLjAwLjAwI1Bvd2VyIGdlbmVyYXRpb24jMjYuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjYuMTMuMTUuMDAuMDAjUG93ZXIgcGxhbnRzIzI2LjEzLjAwLjAwLjAwCi11bnNwc2M3IzI2LjEzLjE1LjAxLjAwI0RpZXNlbCBwb3dlciBwbGFudHMjMjYuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTMuMTUuMDIuMDAjR2VvdGhlcm1hbCBwb3dlciBwbGFudHMjMjYuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTMuMTUuMDMuMDAjSHlkcm8gcG93ZXIgcGxhbnRzIzI2LjEzLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEzLjE1LjA0LjAwI0dhcyBwb3dlciBwbGFudHMjMjYuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTMuMTUuMDUuMDAjTWFyaW5lIHBvd2VyIHBsYW50cyMyNi4xMy4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMy4xNS4wNi4wMCNQZXRyb2wgcG93ZXIgcGxhbnRzIzI2LjEzLjE1LjAwLjAwCi11bnNwc2M3IzI2LjEzLjE1LjA3LjAwI1NvbGFyIHBvd2VyIHBsYW50cyMyNi4xMy4xNS4wMC4wMAotdW5zcHNjNyMyNi4xMy4xNS4wOC4wMCNTdGVhbSBwb3dlciBwbGFudHMjMjYuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTMuMTUuMDkuMDAjV2luZCBwb3dlciBwbGFudHMjMjYuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTMuMTUuMTAuMDAjVGhlcm1hbCBwb3dlciBwbGFudHMjMjYuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMDAuMDAuMDAjQXRvbWljIGFuZCBudWNsZWFyIGVuZXJneSBtYWNoaW5lcnkgYW5kIGVxdWlwbWVudCMyNi4wMC4wMC4wMC4wMAotdW5zcHNjNyMyNi4xNC4xNi4wMC4wMCNTdWJjcml0aWNhbCBhc3NlbWJseSBlcXVpcG1lbnQjMjYuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMTYuMDEuMDAjU3ViY3JpdGljYWwgYXNzZW1ibHkgZnVlbCMyNi4xNC4xNi4wMC4wMAotdW5zcHNjNyMyNi4xNC4xNi4wMi4wMCNTdWJjcml0aWNhbCBhc3NlbWJseSBjb21wb25lbnRzIzI2LjE0LjE2LjAwLjAwCi11bnNwc2M3IzI2LjE0LjE2LjAzLjAwI1N1YmNyaXRpY2FsIGFzc2VtYmx5IG1vZGVyYXRvciMyNi4xNC4xNi4wMC4wMAotdW5zcHNjNyMyNi4xNC4xNy4wMC4wMCNEb3NpbWV0cnkgZXF1aXBtZW50IzI2LjE0LjAwLjAwLjAwCi11bnNwc2M3IzI2LjE0LjE3LjAxLjAwI0lvbml6YXRpb24gY2hhbWJlciBkb3NpbWV0ZXJzIzI2LjE0LjE3LjAwLjAwCi11bnNwc2M3IzI2LjE0LjE3LjAyLjAwI0Rvc2ltZXRlcnMjMjYuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMTcuMDMuMDAjU2Vjb25kYXJ5IHN0YW5kYXJkIGRvc2ltZXRyeSBzeXN0ZW1zIzI2LjE0LjE3LjAwLjAwCi11bnNwc2M3IzI2LjE0LjE3LjA0LjAwI1BoYW50b20gZG9zaW1ldGVycyMyNi4xNC4xNy4wMC4wMAotdW5zcHNjNyMyNi4xNC4xOC4wMC4wMCNIb3QgY2VsbCBkZXZpY2VzIzI2LjE0LjAwLjAwLjAwCi11bnNwc2M3IzI2LjE0LjE4LjAxLjAwI0hvdCBjZWxsIHJlbW90ZSBoYW5kbGluZyBlcXVpcG1lbnQjMjYuMTQuMTguMDAuMDAKLXVuc3BzYzcjMjYuMTQuMTguMDIuMDAjSG90IGNlbGwgcmVtb3RlIHZpZXdpbmcgZGV2aWNlIzI2LjE0LjE4LjAwLjAwCi11bnNwc2M3IzI2LjE0LjE4LjAzLjAwI0hvdCBjZWxsIHNoaWVsZGluZyBkb29ycyMyNi4xNC4xOC4wMC4wMAotdW5zcHNjNyMyNi4xNC4xOC4wNC4wMCNIb3QgY2VsbCBzYW1wbGVycyMyNi4xNC4xOC4wMC4wMAotdW5zcHNjNyMyNi4xNC4xOC4wNS4wMCNIb3QgY2VsbCBzYW1wbGUgcHJvY2Vzc2luZyBlcXVpcG1lbnQjMjYuMTQuMTguMDAuMDAKLXVuc3BzYzcjMjYuMTQuMTguMDYuMDAjSG90IGNlbGwgc3BlY2lhbCB0b29scyMyNi4xNC4xOC4wMC4wMAotdW5zcHNjNyMyNi4xNC4xOC4wNy4wMCNIb3QgY2VsbCBsZWFkIGdsYXNzIHdpbmRvd3MjMjYuMTQuMTguMDAuMDAKLXVuc3BzYzcjMjYuMTQuMTguMDguMDAjSG90IGNlbGwgZGVjb250YW1pbmF0aW9uIHN5c3RlbXMjMjYuMTQuMTguMDAuMDAKLXVuc3BzYzcjMjYuMTQuMTguMDkuMDAjSG90IGNlbGwgcGVuZXRyYXRpb24gZGV2aWNlcyMyNi4xNC4xOC4wMC4wMAotdW5zcHNjNyMyNi4xNC4xOS4wMC4wMCNJbmR1c3RyaWFsIG51Y2xlb25pYyBpbnN0cnVtZW50cyMyNi4xNC4wMC4wMC4wMAotdW5zcHNjNyMyNi4xNC4xOS4wMS4wMCNJbmR1c3RyaWFsIG51Y2xlb25pYyBhaXJib3JuZSBkdXN0IG1lYXN1cmluZyBzeXN0ZW1zIzI2LjE0LjE5LjAwLjAwCi11bnNwc2M3IzI2LjE0LjE5LjAyLjAwI0JldGEgZ2F1Z2UgbWVhc3VyaW5nIHN5c3RlbXMjMjYuMTQuMTkuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMTkuMDQuMDAjSW5kdXN0cmlhbCBudWNsZW9uaWMgbGlxdWlkIGxldmVsIGdhdWdlcyMyNi4xNC4xOS4wMC4wMAotdW5zcHNjNyMyNi4xNC4xOS4wNS4wMCNJbmR1c3RyaWFsIG51Y2xlb25pYyBtYXNzIHBlciB1bml0IG9yZSBtZWFzdXJpbmcgc3lzdGVtcyMyNi4xNC4xOS4wMC4wMAotdW5zcHNjNyMyNi4xNC4xOS4wNi4wMCNJbmR1c3RyaWFsIG51Y2xlb25pYyBtb2lzdHVyZSBtZWFzdXJpbmcgc3lzdGVtcyMyNi4xNC4xOS4wMC4wMAotdW5zcHNjNyMyNi4xNC4xOS4wNy4wMCNJbmR1c3RyaWFsIG51Y2xlb25pYyB0aGlja25lc3MgbWVhc3VyaW5nIHN5c3RlbXMjMjYuMTQuMTkuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMTkuMDguMDAjSW5kdXN0cmlhbCBudWNsZW9uaWMgZmxvdyBtZWFzdXJpbmcgc3lzdGVtcyMyNi4xNC4xOS4wMC4wMAotdW5zcHNjNyMyNi4xNC4xOS4wOS4wMCNJc290b3BlIHNlcGFyYXRvcnMjMjYuMTQuMTkuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMTkuMTAuMDAjSXNvdG9wZSBwcm9kdWN0aW9uIGZhY2lsaXRpZXMjMjYuMTQuMTkuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMTkuMTEuMDAjSXNvdG9wZSBjYWxpYnJhdG9yIGFjdGl2aXR5IG1ldGVycyMyNi4xNC4xOS4wMC4wMAotdW5zcHNjNyMyNi4xNC4yMC4wMC4wMCNJcnJhZGlhdGlvbiBlcXVpcG1lbnQjMjYuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMjAuMDEuMDAjSXJyYWRpYXRpb24gZ2FtbWEgc291cmNlcyMyNi4xNC4yMC4wMC4wMAotdW5zcHNjNyMyNi4xNC4yMC4wMi4wMCNNYWduZXQgc3lzdGVtcyMyNi4xNC4yMC4wMC4wMAotdW5zcHNjNyMyNi4xNC4yMC4wMy4wMCNOSU0gbnVjbGVhciBlbGVjdHJvbmljIHVuaXRzIzI2LjE0LjIwLjAwLjAwCi11bnNwc2M3IzI2LjE0LjIwLjA0LjAwI05ldXRyb24gaXJyYWRpYXRvcnMjMjYuMTQuMjAuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMjAuMDUuMDAjSXJyYWRpYXRpb24gdGVzdGluZyBjYXBzdWxlcyMyNi4xNC4yMC4wMC4wMAotdW5zcHNjNyMyNi4xNC4yMC4wNi4wMCNJcnJhZGlhdGlvbiBzYW1wbGUgdHJhbnNmZXIgc3lzdGVtIzI2LjE0LjIwLjAwLjAwCi11bnNwc2M3IzI2LjE0LjIwLjA3LjAwI05ldXRyb24gZ2VuZXJhdG9ycyMyNi4xNC4yMC4wMC4wMAotdW5zcHNjNyMyNi4xNC4yMS4wMC4wMCNOdWNsZWFyIHJlYWN0b3IgZXF1aXBtZW50IzI2LjE0LjAwLjAwLjAwCi11bnNwc2M3IzI2LjE0LjIxLjAxLjAwI051Y2xlYXIgcmVhY3RvciBzcGVjaW1lbiBpcnJhZGlhdGlvbiBjb250YWluZXJzIzI2LjE0LjIxLjAwLjAwCi11bnNwc2M3IzI2LjE0LjIxLjA2LjAwI051Y2xlYXIgcmVhY3RvciBjb250cm9sIHJvZCBzeXN0ZW1zIzI2LjE0LjIxLjAwLjAwCi11bnNwc2M3IzI2LjE0LjIxLjA4LjAwI051Y2xlYXIgcmVhY3RvciBpbiBjb3JlIG5ldXRyb24gZmx1eCBpbnN0cnVtZW50YXRpb24jMjYuMTQuMjEuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMjEuMTcuMDAjTnVjbGVhciByZWFjdG9yIGVhcnRocXVha2UgaW5zdHJ1bWVudGF0aW9uIzI2LjE0LjIxLjAwLjAwCi11bnNwc2M3IzI2LjE0LjIyLjAwLjAwI051Y2xlYXIgZnVlbCBlcXVpcG1lbnQjMjYuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMjIuMDEuMDAjTnVjbGVhciBmdWVsIGNsYWRkaW5nIHR1YmVzIzI2LjE0LjIyLjAwLjAwCi11bnNwc2M3IzI2LjE0LjIyLjAyLjAwI051Y2xlYXIgZnVlbCBlbGVtZW50IGZhaWx1cmUgZGV0ZWN0aW9uIHN5c3RlbXMjMjYuMTQuMjIuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMjMuMDAuMDAjUmFkaWF0aW9uIHNoaWVsZGluZyBlcXVpcG1lbnQjMjYuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMjMuMDIuMDAjTGVhZCBzY3JlZW5zIzI2LjE0LjIzLjAwLjAwCi11bnNwc2M3IzI2LjE0LjIzLjAzLjAwI0ZpbG0gYmFkZ2VzIzI2LjE0LjIzLjAwLjAwCi11bnNwc2M3IzI2LjE0LjIzLjA0LjAwI1JhZGlvZ3JhcGhpYyBlcXVpcG1lbnQjMjYuMTQuMjMuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMjMuMDYuMDAjU2hpZWxkZWQgY29udGFpbmVycyBmb3IgcmFkaWF0aW9uIHByb3RlY3Rpb24jMjYuMTQuMjMuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMjMuMDcuMDAjTGVhZCBjaGFtYmVycyBvciBzYWZlcyBmb3IgcmFkaWF0aW9uIHByb3RlY3Rpb24jMjYuMTQuMjMuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMjMuMDguMDAjTGVhZCBicmlja3MgZm9yIHJhZGlhdGlvbiBwcm90ZWN0aW9uIzI2LjE0LjIzLjAwLjAwCi11bnNwc2M3IzI2LjE0LjIzLjEwLjAwI0dsb3ZlIGJveGVzIGZvciByYWRpYXRpb24gcHJvdGVjdGlvbiMyNi4xNC4yMy4wMC4wMAotdW5zcHNjNyMyNi4xNC4yMy4xMS4wMCNSYWRpYXRpb24gc2hpZWxkaW5nIHdpbmRvd3MjMjYuMTQuMjMuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMjMuMTIuMDAjTGVhZCBmb3IgcmFkaWF0aW9uIHNoaWVsZGluZyMyNi4xNC4yMy4wMC4wMAotdW5zcHNjNyMyNi4xNC4yNC4wMC4wMCNSYWRpb2FjdGl2ZSB3YXN0ZSBlcXVpcG1lbnQjMjYuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMjQuMDEuMDAjUmFkaW9hY3RpdmUgd2FzdGUgdHJlYXRtZW50IGNvbXBhY3RvcnMgb3IgaW5jaW5lcmF0b3JzIzI2LjE0LjI0LjAwLjAwCi11bnNwc2M3IzI2LjE0LjI0LjAyLjAwI051Y2xlYXIgcmFkaWF0aW9uIGFic29yYmVycyMyNi4xNC4yNC4wMC4wMAotdW5zcHNjNyMyNi4xNC4yNC4wMy4wMCNBdG9taWMgZW5lcmd5IGV2YXBvcmF0b3JzIG9yIGNvbmNlbnRyYXRvcnMgb3IgZHJ5ZXJzIzI2LjE0LjI0LjAwLjAwCi11bnNwc2M3IzI2LjE0LjI0LjA0LjAwI0Rvb3IgaW50ZXJsb2NraW5nIHN5c3RlbXMjMjYuMTQuMjQuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMjQuMDUuMDAjUmFkaW9hY3RpdmUgd2FzdGUgZG9zYWdlIHN5c3RlbXMjMjYuMTQuMjQuMDAuMDAKLXVuc3BzYzcjMjYuMTQuMjQuMDYuMDAjUmFkaW9hY3RpdmUgd2FzdGUgc29saWRpZmljYXRpb24gc3lzdGVtcyMyNi4xNC4yNC4wMC4wMAotdW5zcHNjNyMyNi4xNC4yNC4wNy4wMCNSYWRpb2FjdGl2ZSB3YXN0ZSBkaXNwb3NhbCBzeXN0ZW1zIzI2LjE0LjI0LjAwLjAwCi11bnNwc2M3IzI2LjE0LjI0LjA4LjAwI1JhZGlvYWN0aXZlIHdhc3RlIHRyZWF0bWVudCBmYWNpbGl0aWVzIzI2LjE0LjI0LjAwLjAwCi11bnNwc2M3IzI3LjAwLjAwLjAwLjAwI1Rvb2xzIGFuZCBHZW5lcmFsIE1hY2hpbmVyeSMyNy4wMC4wMC4wMC4wMAotdW5zcHNjNyMyNy4xMS4wMC4wMC4wMCNIYW5kIHRvb2xzIzI3LjAwLjAwLjAwLjAwCi11bnNwc2M3IzI3LjExLjE1LjAwLjAwI0N1dHRpbmcgYW5kIGNyaW1waW5nIGFuZCBwdW5jaGluZyB0b29scyMyNy4xMS4wMC4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNS4wMS4wMCNLbmlmZSBibGFkZXMjMjcuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTUuMDIuMDAjUmF6b3Iga25pdmVzIzI3LjExLjE1LjAwLjAwCi11bnNwc2M3IzI3LjExLjE1LjAzLjAwI1V0aWxpdHkga25pdmVzIzI3LjExLjE1LjAwLjAwCi11bnNwc2M3IzI3LjExLjE1LjA0LjAwI1BvY2tldCBrbml2ZXMjMjcuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTUuMDUuMDAjUHVuY2hlcyBvciBuYWlsIHNldHMgb3IgZHJpZnRzIzI3LjExLjE1LjAwLjAwCi11bnNwc2M3IzI3LjExLjE1LjA2LjAwI1NoZWFycyMyNy4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNS4wNy4wMCNNZXRhbCBjdXR0ZXJzIzI3LjExLjE1LjAwLjAwCi11bnNwc2M3IzI3LjExLjE1LjA4LjAwI1Nhd3MjMjcuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTUuMDkuMDAjQXVnZXJzIzI3LjExLjE1LjAwLjAwCi11bnNwc2M3IzI3LjExLjE1LjEwLjAwI1N0cmlwcGluZyB0b29scyMyNy4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNS4xMS4wMCNXaXJlIGN1dHRlcnMjMjcuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTUuMTIuMDAjQm9sdCBjdXR0ZXJzIzI3LjExLjE1LjAwLjAwCi11bnNwc2M3IzI3LjExLjE1LjEzLjAwI0hvc2UgY3V0dGVyIzI3LjExLjE1LjAwLjAwCi11bnNwc2M3IzI3LjExLjE1LjE0LjAwI0dsYXNzIGN1dHRlcnMjMjcuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTUuMTUuMDAjSGFuZCBvciBwdXNoIGRyaWxsIzI3LjExLjE1LjAwLjAwCi11bnNwc2M3IzI3LjExLjE1LjE2LjAwI1B1bmNoaW5nIHBsaWVycyMyNy4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNS4xNy4wMCNLbmlmZSBibGFkZSBzZXRzIG9yIGRpc3BlbnNlcnMjMjcuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTUuMjAuMDAjTnV0IHNwbGl0dGVycyMyNy4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNS4yMS4wMCNOaWJibGVycyMyNy4xMS4xNS4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNi4wMC4wMCNGb3JtaW5nIHRvb2xzIzI3LjExLjAwLjAwLjAwCi11bnNwc2M3IzI3LjExLjE2LjAxLjAwI01hbGxldHMjMjcuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTYuMDIuMDAjSGFtbWVycyMyNy4xMS4xNi4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNi4wMy4wMCNBbnZpbHMjMjcuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTYuMDQuMDAjSGF0Y2hldHMjMjcuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTYuMDUuMDAjUGlja3MjMjcuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTYuMDYuMDAjQm9sdCBjdXR0ZXJzIzI3LjExLjE2LjAwLjAwCi11bnNwc2M3IzI3LjExLjE2LjA3LjAwI1N3YWdpbmcgdG9vbHMjMjcuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTcuMDAuMDAjV3JlbmNoZXMgYW5kIGRyaXZlcnMjMjcuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTcuMDEuMDAjU2NyZXdkcml2ZXJzIzI3LjExLjE3LjAwLjAwCi11bnNwc2M3IzI3LjExLjE3LjAyLjAwI051dCBkcml2ZXJzIzI3LjExLjE3LjAwLjAwCi11bnNwc2M3IzI3LjExLjE3LjAzLjAwI1NvY2tldCBzZXRzIzI3LjExLjE3LjAwLjAwCi11bnNwc2M3IzI3LjExLjE3LjA0LjAwI1NvY2tldHMjMjcuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTcuMDUuMDAjQm94IGVuZCB3cmVuY2hlcyMyNy4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNy4wNi4wMCNPcGVuIGVuZCB3cmVuY2hlcyMyNy4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNy4wNy4wMCNBZGp1c3RhYmxlIHdyZW5jaGVzIzI3LjExLjE3LjAwLjAwCi11bnNwc2M3IzI3LjExLjE3LjA4LjAwI1BpcGUgd3JlbmNoZXMjMjcuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTcuMDkuMDAjU2NyZXcgZXh0cmFjdG9ycyMyNy4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNy4xMC4wMCNIZXgga2V5cyMyNy4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNy4xMS4wMCNSYXRjaGV0cyMyNy4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNy4xMi4wMCNQdWxsZXJzIzI3LjExLjE3LjAwLjAwCi11bnNwc2M3IzI3LjExLjE3LjEzLjAwI0NvbWJpbmF0aW9uIHdyZW5jaGVzIzI3LjExLjE3LjAwLjAwCi11bnNwc2M3IzI3LjExLjE3LjE0LjAwI1NwZWNpYWx0eSB3cmVuY2hlcyMyNy4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNy4xNS4wMCNUb3JxdWUgd3JlbmNoZXMjMjcuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTcuMTYuMDAjVG9yeCBrZXlzIzI3LjExLjE3LjAwLjAwCi11bnNwc2M3IzI3LjExLjE3LjE3LjAwI1BpcGUgZXh0cmFjdG9ycyMyNy4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNy4xOC4wMCNUYXAgZXh0cmFjdG9ycyMyNy4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNy4xOS4wMCNUb3JxdWUgd3JlbmNoIzI3LjExLjE3LjAwLjAwCi11bnNwc2M3IzI3LjExLjE3LjIwLjAwI1QgaGFuZGxlIHRhcCB3cmVuY2hlcyMyNy4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNy4yMS4wMCNDcmFua3MjMjcuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTcuMjIuMDAjRGllIHN0b2NrcyMyNy4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNy4yMy4wMCNUdWJlIHdyZW5jaGVzIzI3LjExLjE3LjAwLjAwCi11bnNwc2M3IzI3LjExLjE3LjI0LjAwI0hvb2sgd3JlbmNoZXMjMjcuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTcuMjUuMDAjT2Zmc2V0IHNvY2tldCB3cmVuY2hlcyMyNy4xMS4xNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4xNy4yNi4wMCNTcGFubmVyIHdyZW5jaGVzIzI3LjExLjE3LjAwLjAwCi11bnNwc2M3IzI3LjExLjE4LjAwLjAwI01lYXN1cmluZyBhbmQgbGF5b3V0IHRvb2xzIzI3LjExLjAwLjAwLjAwCi11bnNwc2M3IzI3LjExLjE4LjAxLjAwI1RhcGUgbWVhc3VyZXMjMjcuMTEuMTguMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTguMDIuMDAjTGV2ZWxzIzI3LjExLjE4LjAwLjAwCi11bnNwc2M3IzI3LjExLjE4LjAzLjAwI1NxdWFyZXMjMjcuMTEuMTguMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTguMDQuMDAjUGx1bWIgYm9icyMyNy4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNy4xMS4xOC4wNS4wMCNQcm90cmFjdG9ycyMyNy4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNy4xMS4xOC4wNi4wMCNOYWlsIG9yIHJvdXRlciBnYXVnZXMjMjcuMTEuMTguMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTguMDcuMDAjU3RyYWlnaHQgZWRnZXMjMjcuMTEuMTguMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTguMDguMDAjUnVsZXMjMjcuMTEuMTguMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTguMDkuMDAjQmV2ZWxzIzI3LjExLjE4LjAwLjAwCi11bnNwc2M3IzI3LjExLjE4LjEwLjAwI1N0dWQgZmluZGVycyMyNy4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNy4xMS4xOC4xMS4wMCNDYWxpcGVycyMyNy4xMS4xOC4wMC4wMAotdW5zcHNjNyMyNy4xMS4xOS4wMC4wMCNSb3VnaCBhbmQgZmluaXNoaW5nIHRvb2xzIzI3LjExLjAwLjAwLjAwCi11bnNwc2M3IzI3LjExLjE5LjAxLjAwI0NvbGQgY2hpc2VscyMyNy4xMS4xOS4wMC4wMAotdW5zcHNjNyMyNy4xMS4xOS4wMi4wMCNGaWxlcyMyNy4xMS4xOS4wMC4wMAotdW5zcHNjNyMyNy4xMS4xOS4wMy4wMCNQbGFuZXMjMjcuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTkuMDQuMDAjUmFzcHMjMjcuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTkuMDUuMDAjR3JpbmRlcnMjMjcuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTkuMDYuMDAjV29vZCBjaGlzZWxzIzI3LjExLjE5LjAwLjAwCi11bnNwc2M3IzI3LjExLjE5LjA3LjAwI1dpcmUgYnJ1c2hlcyMyNy4xMS4xOS4wMC4wMAotdW5zcHNjNyMyNy4xMS4xOS4wOC4wMCNTaGFycGVuaW5nIHRvb2xzIG9yIGtpdHMjMjcuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTkuMDkuMDAjU3BhdHVsYXMjMjcuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMTkuMTEuMDAjQ3Jvc3MgY3V0IGNoaXNlbHMjMjcuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjAuMDAuMDAjR2FyZGVuIHRvb2xzIzI3LjExLjAwLjAwLjAwCi11bnNwc2M3IzI3LjExLjIwLjAxLjAwI01hY2hldGVzIzI3LjExLjIwLjAwLjAwCi11bnNwc2M3IzI3LjExLjIwLjAyLjAwI1NwYWRlcyMyNy4xMS4yMC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMC4wMy4wMCNSYWtlcyMyNy4xMS4yMC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMC4wNC4wMCNTaG92ZWxzIzI3LjExLjIwLjAwLjAwCi11bnNwc2M3IzI3LjExLjIwLjA1LjAwI0F4ZXMjMjcuMTEuMjAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjAuMDYuMDAjU2N5dGhlcyMyNy4xMS4yMC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMC4wNy4wMCNTZWNhdGV1cnMgb3IgcHJ1bmluZyBzaGVhcnMjMjcuMTEuMjAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjAuMDguMDAjSG9lcyMyNy4xMS4yMC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMC4wOS4wMCNTY3JhcGVycyMyNy4xMS4yMC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMC4xMC4wMCNHYXJkZW4gZm9ya3MjMjcuMTEuMjAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjAuMTEuMDAjVG9vbCBoYW5kbGVzIzI3LjExLjIwLjAwLjAwCi11bnNwc2M3IzI3LjExLjIwLjEyLjAwI0dhcmRlbiByaWRkbGVzIzI3LjExLjIwLjAwLjAwCi11bnNwc2M3IzI3LjExLjIwLjEzLjAwI1Bvc3QgaG9sZSBkaWdnZXIjMjcuMTEuMjAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjAuMTQuMDAjTGF3bm1vd2VycyMyNy4xMS4yMC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMC4xNS4wMCNMYXduIHNjYXJpZmllcnMjMjcuMTEuMjAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjAuMTYuMDAjSGVkZ2UgY2xpcHBlcnMjMjcuMTEuMjAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjAuMTcuMDAjRGlnZ2luZyBiYXJzIzI3LjExLjIwLjAwLjAwCi11bnNwc2M3IzI3LjExLjIxLjAwLjAwI0hvbGRpbmcgYW5kIGNsYW1waW5nIHRvb2xzIzI3LjExLjAwLjAwLjAwCi11bnNwc2M3IzI3LjExLjIxLjAxLjAwI1BpcGUgdmlzZXMjMjcuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjEuMDIuMDAjQmVuY2ggdmlzZXMjMjcuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjEuMDMuMDAjSGFuZCBjbGFtcHMjMjcuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjEuMDQuMDAjVG9uZ3MjMjcuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjEuMDUuMDAjVHdlZXplcnMjMjcuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjEuMDYuMDAjTGluZW1hbnMgcGxpZXJzIzI3LjExLjIxLjAwLjAwCi11bnNwc2M3IzI3LjExLjIxLjA3LjAwI0FkanVzdGFibGUgd2lkZW1vdXRoIHBsaWVycyMyNy4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMS4wOC4wMCNOZWVkbGVub3NlIHBsaWVycyMyNy4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMS4wOS4wMCNNYWduZXRpYyB0b29scyMyNy4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMS4xMC4wMCNSZXRhaW5pbmcgcmluZyBwbGllcnMjMjcuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjEuMTEuMDAjQWxsaWdhdG9yIHBsaWVycyMyNy4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMS4xMi4wMCNUb25ndWUgYW5kIGdyb292ZSBwbGllcnMjMjcuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjEuMTMuMDAjU2xpcCBvciBncm9vdmUgam9pbnQgcGxpZXJzIzI3LjExLjIxLjAwLjAwCi11bnNwc2M3IzI3LjExLjIxLjE0LjAwI0RpYWdvbmFsIGN1dCBwbGllcnMjMjcuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjEuMTUuMDAjTG9ja2luZyBwbGllcnMjMjcuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjEuMTYuMDAjRmVuY2UgcGxpZXJzIzI3LjExLjIxLjAwLjAwCi11bnNwc2M3IzI3LjExLjIxLjE3LjAwI0VuZCBjdXQgcGxpZXJzIzI3LjExLjIxLjAwLjAwCi11bnNwc2M3IzI3LjExLjIxLjE4LjAwI1dpcmUgbHVnIGNyaW1waW5nIHRvb2wjMjcuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjEuMTkuMDAjTGlnaHQgYnVsYiBjaGFuZ2VyIzI3LjExLjIxLjAwLjAwCi11bnNwc2M3IzI3LjExLjIxLjIwLjAwI0MgY2xhbXBzIzI3LjExLjIxLjAwLjAwCi11bnNwc2M3IzI3LjExLjIxLjIxLjAwI0Nvcm5lciBjbGFtcHMjMjcuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjEuMjIuMDAjU2hlZXQgbWV0YWwgcGxpZXJzIzI3LjExLjIxLjAwLjAwCi11bnNwc2M3IzI3LjExLjIxLjIzLjAwI0JlbmNoIGRvZyMyNy4xMS4yMS4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMS4yNC4wMCNUZW5zaW9uZXJzIzI3LjExLjIxLjAwLjAwCi11bnNwc2M3IzI3LjExLjIxLjI1LjAwI1JvdW5kIG5vc2UgcGxpZXJzIzI3LjExLjIxLjAwLjAwCi11bnNwc2M3IzI3LjExLjIxLjI2LjAwI0ZsYXQgbm9zZSBwbGllcnMjMjcuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjEuMjcuMDAjU3RyYXAgd3JlbmNoZXMjMjcuMTEuMjEuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjIuMDAuMDAjTWFzb25yeSBhbmQgY29uY3JldGUgdG9vbHMjMjcuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjIuMDEuMDAjVHJvd2VscyMyNy4xMS4yMi4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMi4wMi4wMCNGbG9hdHMjMjcuMTEuMjIuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjIuMDMuMDAjRWRnZXJzIzI3LjExLjIyLjAwLjAwCi11bnNwc2M3IzI3LjExLjIyLjA0LjAwI0NlbWVudCBtaXhlcnMjMjcuMTEuMjIuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjMuMDAuMDAjTWFya2luZyB0b29scyMyNy4xMS4wMC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMy4wMS4wMCNCcmFuZGVycyMyNy4xMS4yMy4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMy4wMi4wMCNBd2xzIzI3LjExLjIzLjAwLjAwCi11bnNwc2M3IzI3LjExLjIzLjAzLjAwI1NjcmliZXJzIzI3LjExLjIzLjAwLjAwCi11bnNwc2M3IzI3LjExLjIzLjA0LjAwI0NoYWxrIGxpbmVzIzI3LjExLjIzLjAwLjAwCi11bnNwc2M3IzI3LjExLjIzLjA1LjAwI01ldGFsIG1hcmtlcnMgb3IgaG9sZGVycyMyNy4xMS4yMy4wMC4wMAotdW5zcHNjNyMyNy4xMS4yMy4wNi4wMCNNZXRhbCBzdGFtcHMjMjcuMTEuMjMuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjQuMDAuMDAjRmFzdGVuZXIgc2V0dGluZyB0b29scyMyNy4xMS4wMC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yNC4wMS4wMCNTdGFwbGUgZ3VucyMyNy4xMS4yNC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yNC4wMi4wMCNSaXZldCB0b29scyMyNy4xMS4yNC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yNC4wMy4wMCNCYW5kZXJzIzI3LjExLjI0LjAwLjAwCi11bnNwc2M3IzI3LjExLjI0LjA0LjAwI0FuY2hvciBzZXR0aW5nIHRvb2xzIzI3LjExLjI0LjAwLjAwCi11bnNwc2M3IzI3LjExLjI0LjA1LjAwI0JvbHQgaGVhdGVycyMyNy4xMS4yNC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yNS4wMC4wMCNQcnlpbmcgYW5kIGJlbmRpbmcgdG9vbHMjMjcuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjUuMDEuMDAjUGlwZSBiZW5kaW5nIHRvb2xzIzI3LjExLjI1LjAwLjAwCi11bnNwc2M3IzI3LjExLjI1LjAyLjAwI1ByeSBiYXJzIzI3LjExLjI1LjAwLjAwCi11bnNwc2M3IzI3LjExLjI1LjAzLjAwI0NvbmR1aXQgYmVuZGVycyMyNy4xMS4yNS4wMC4wMAotdW5zcHNjNyMyNy4xMS4yNS4wNC4wMCNXZWRnZXMjMjcuMTEuMjUuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjUuMDUuMDAjUGFja2luZyBob29rcyMyNy4xMS4yNS4wMC4wMAotdW5zcHNjNyMyNy4xMS4yNS4wNi4wMCNIaWNrZXlzIzI3LjExLjI1LjAwLjAwCi11bnNwc2M3IzI3LjExLjI2LjAwLjAwI1NlYWxpbmcgdG9vbHMjMjcuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjYuMDEuMDAjUHV0dHkga25pdmVzIzI3LjExLjI2LjAwLjAwCi11bnNwc2M3IzI3LjExLjI2LjAyLjAwI0NhdWxraW5nIHRvb2xzIzI3LjExLjI2LjAwLjAwCi11bnNwc2M3IzI3LjExLjI3LjAwLjAwI1Bvd2VyIHRvb2xzIzI3LjExLjAwLjAwLjAwCi11bnNwc2M3IzI3LjExLjI3LjAxLjAwI1Bvd2VyIGJsb3dlcnMjMjcuMTEuMjcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjcuMDIuMDAjUG93ZXIgYnVmZmVycyMyNy4xMS4yNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4yNy4wMy4wMCNQb3dlciBkcmlsbHMjMjcuMTEuMjcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjcuMDQuMDAjUG93ZXIgZ3JpbmRlcnMjMjcuMTEuMjcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjcuMDUuMDAjRGVtb2xpdGlvbiBoYW1tZXJzIzI3LjExLjI3LjAwLjAwCi11bnNwc2M3IzI3LjExLjI3LjA2LjAwI1Bvd2VyIHBsYW5lcyMyNy4xMS4yNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4yNy4wNy4wMCNQb3dlciByb3V0ZXJzIzI3LjExLjI3LjAwLjAwCi11bnNwc2M3IzI3LjExLjI3LjA4LjAwI1Bvd2VyIHNhbmRlcnMjMjcuMTEuMjcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjcuMDkuMDAjUG93ZXIgc2F3cyMyNy4xMS4yNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4yNy4xMC4wMCNQb3dlciBzY3Jld2d1bnMjMjcuMTEuMjcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjcuMTEuMDAjUG93ZXIgc3RhcGxlIGd1bnMjMjcuMTEuMjcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjcuMTIuMDAjUG93ZXIgdHJpbW1lcnMjMjcuMTEuMjcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjcuMTMuMDAjSW1wYWN0IHdyZW5jaGVzIzI3LjExLjI3LjAwLjAwCi11bnNwc2M3IzI3LjExLjI3LjE0LjAwI1Bvd2VyIGNhdWxraW5nIGd1bnMjMjcuMTEuMjcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjcuMTUuMDAjUG93ZXIgY2hpcHBlcnMjMjcuMTEuMjcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjcuMTYuMDAjUG93ZXIgbmFpbCBndW5zIzI3LjExLjI3LjAwLjAwCi11bnNwc2M3IzI3LjExLjI3LjE3LjAwI0hlYXQgZ3VucyMyNy4xMS4yNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4yNy4xOC4wMCNFbmdyYXZlcnMjMjcuMTEuMjcuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjcuMTkuMDAjR2x1ZSBndW5zIzI3LjExLjI3LjAwLjAwCi11bnNwc2M3IzI3LjExLjI3LjIwLjAwI1RvcnF1ZSB0b29scyMyNy4xMS4yNy4wMC4wMAotdW5zcHNjNyMyNy4xMS4yNy4yMS4wMCNCaXNjdWl0IGpvaW50ZXJzIzI3LjExLjI3LjAwLjAwCi11bnNwc2M3IzI3LjExLjI4LjAwLjAwI1Rvb2wgYXR0YWNobWVudHMjMjcuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjguMDEuMDAjRHJpbGwgYml0cyMyNy4xMS4yOC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yOC4wMi4wMCNTYXcgYmxhZGVzIzI3LjExLjI4LjAwLjAwCi11bnNwc2M3IzI3LjExLjI4LjAzLjAwI0VuZCBtaWxscyMyNy4xMS4yOC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yOC4wNC4wMCNTdGFtcGluZyBkaWVzIG9yIHB1bmNoZXMjMjcuMTEuMjguMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjguMDUuMDAjVGhyZWFkaW5nIGRpZXMjMjcuMTEuMjguMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjguMDYuMDAjVGhyZWFkaW5nIHRhcHMjMjcuMTEuMjguMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjguMDcuMDAjQ2h1Y2tzIzI3LjExLjI4LjAwLjAwCi11bnNwc2M3IzI3LjExLjI4LjA4LjAwI0NvbGxldHMjMjcuMTEuMjguMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjguMDkuMDAjVG9vbCBob2xkZXJzIzI3LjExLjI4LjAwLjAwCi11bnNwc2M3IzI3LjExLjI4LjEwLjAwI1RocmVhZCByZXBhaXIga2l0cyMyNy4xMS4yOC4wMC4wMAotdW5zcHNjNyMyNy4xMS4yOC4xMS4wMCNBcmJvcnMjMjcuMTEuMjguMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjguMTIuMDAjQ291bnRlcnNpbmtzIzI3LjExLjI4LjAwLjAwCi11bnNwc2M3IzI3LjExLjI4LjEzLjAwI0V4dGVuc2lvbiBwb2xlIzI3LjExLjI4LjAwLjAwCi11bnNwc2M3IzI3LjExLjI4LjE0LjAwI1NjcmV3ZHJpdmVyIGJpdHMjMjcuMTEuMjguMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjguMTUuMDAjTnV0IGRyaXZlciBiaXRzIzI3LjExLjI4LjAwLjAwCi11bnNwc2M3IzI3LjExLjI4LjE2LjAwI0FicmFzaXZlIGRpc2sjMjcuMTEuMjguMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjguMTcuMDAjSG9sZSBzYXdzIzI3LjExLjI4LjAwLjAwCi11bnNwc2M3IzI3LjExLjI4LjE4LjAwI1Zpc2UgamF3IGxpbmVycyBvciBjYXBzIzI3LjExLjI4LjAwLjAwCi11bnNwc2M3IzI3LjExLjI4LjE5LjAwI1NraXZpbmcgdG9vbCBjdXR0ZXIgYmxhZGVzIzI3LjExLjI4LjAwLjAwCi11bnNwc2M3IzI3LjExLjI4LjIxLjAwI1JvdXRlciBiaXRzIzI3LjExLjI4LjAwLjAwCi11bnNwc2M3IzI3LjExLjI5LjAwLjAwI0Rpc3BlbnNpbmcgdG9vbHMjMjcuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjkuMDEuMDAjR3JlYXNlIGd1bnMjMjcuMTEuMjkuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjkuMDIuMDAjSW5kdXN0cmlhbCBmdW5uZWxzIzI3LjExLjI5LjAwLjAwCi11bnNwc2M3IzI3LjExLjI5LjAzLjAwI0hhbmQgc3ByYXllcnMjMjcuMTEuMjkuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjkuMDQuMDAjUmVzaW4gZ3VucyMyNy4xMS4yOS4wMC4wMAotdW5zcHNjNyMyNy4xMS4yOS4wNS4wMCNPaWwgY2FuIzI3LjExLjI5LjAwLjAwCi11bnNwc2M3IzI3LjExLjI5LjA2LjAwI0NhdWxraW5nIGd1bnMjMjcuMTEuMjkuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMjkuMDcuMDAjQnJvYWRjYXN0IHNwcmVhZGVycyMyNy4xMS4yOS4wMC4wMAotdW5zcHNjNyMyNy4xMS4zMC4wMC4wMCNCcnVzaGVzIzI3LjExLjAwLjAwLjAwCi11bnNwc2M3IzI3LjExLjMwLjAxLjAwI1NjcmF0Y2ggYnJ1c2hlcyMyNy4xMS4zMC4wMC4wMAotdW5zcHNjNyMyNy4xMS4zMC4wMi4wMCNUdWJlIGJydXNoZXMjMjcuMTEuMzAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMzAuMDMuMDAjQXBwbGljYXRvciBicnVzaGVzIzI3LjExLjMwLjAwLjAwCi11bnNwc2M3IzI3LjExLjMxLjAwLjAwI1B1bGxpbmcgdG9vbHMjMjcuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMzEuMDEuMDAjRmlzaCB0YXBlIzI3LjExLjMxLjAwLjAwCi11bnNwc2M3IzI3LjExLjMxLjAyLjAwI0Z1c2UgcHVsbGVycyMyNy4xMS4zMS4wMC4wMAotdW5zcHNjNyMyNy4xMS4zMi4wMC4wMCNUb29sIGtpdHMjMjcuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMzIuMDEuMDAjR2VuZXJhbCB0b29sIGtpdHMjMjcuMTEuMzIuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMzIuMDIuMDAjQmVhcmluZyBmaXR0aW5nIHRvb2wga2l0cyMyNy4xMS4zMi4wMC4wMAotdW5zcHNjNyMyNy4xMS4zMi4wMy4wMCNDb21wdXRlciB0b29sIGtpdHMjMjcuMTEuMzIuMDAuMDAKLXVuc3BzYzcjMjcuMTEuMzIuMDQuMDAjRWxlY3RyaWNpYW4ga2l0cyMyNy4xMS4zMi4wMC4wMAotdW5zcHNjNyMyNy4xMi4wMC4wMC4wMCNIeWRyYXVsaWMgbWFjaGluZXJ5IGFuZCBlcXVpcG1lbnQjMjcuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjcuMTIuMTUuMDAuMDAjSHlkcmF1bGljIHByZXNzZXMjMjcuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjcuMTIuMTUuMDEuMDAjUHJlc3MgcmV0dXJuIHNwcmluZ3MjMjcuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMjcuMTIuMTYuMDAuMDAjSHlkcmF1bGljIGN5bGluZGVycyBhbmQgcGlzdG9ucyMyNy4xMi4wMC4wMC4wMAotdW5zcHNjNyMyNy4xMi4xNi4wMS4wMCNDeWxpbmRlciBwaXN0b25zIzI3LjEyLjE2LjAwLjAwCi11bnNwc2M3IzI3LjEyLjE2LjAyLjAwI0h5ZHJhdWxpYyBjeWxpbmRlcnMjMjcuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMjcuMTIuMTcuMDAuMDAjSHlkcmF1bGljIGhvc2UgYW5kIHR1YmUgZml0dGluZ3MjMjcuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjcuMTIuMTcuMDEuMDAjSHlkcmF1bGljIHF1aWNrIGNvbm5lY3RvcnMjMjcuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMjcuMTIuMTcuMDIuMDAjSHlkcmF1bGljIHRlZXMgb3IgY3Jvc3NlcyMyNy4xMi4xNy4wMC4wMAotdW5zcHNjNyMyNy4xMi4xNy4wMy4wMCNGZXJydWxlcyMyNy4xMi4xNy4wMC4wMAotdW5zcHNjNyMyNy4xMi4xNy4wNC4wMCNIeWRyYXVsaWMgdW5pb25zIzI3LjEyLjE3LjAwLjAwCi11bnNwc2M3IzI3LjEyLjE3LjA1LjAwI0h5ZHJhdWxpYyBvciBjb21wcmVzc2lvbiBlbGJvd3MjMjcuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMjcuMTIuMTcuMDYuMDAjRmVycnVsZSBudXRzIzI3LjEyLjE3LjAwLjAwCi11bnNwc2M3IzI3LjEyLjE3LjA3LjAwI0NyaW1wIGNvbm5lY3RvcnMjMjcuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMjcuMTIuMTguMDAuMDAjSHlkcmF1bGljIHF1aWNrIGNvbm5lY3RvcnMjMjcuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjcuMTIuMTkuMDAuMDAjSHlkcmF1bGljIHRlZXMgb3IgY3Jvc3NlcyMyNy4xMi4wMC4wMC4wMAotdW5zcHNjNyMyNy4xMi4yMC4wMC4wMCNGZXJydWxlcyMyNy4xMi4wMC4wMC4wMAotdW5zcHNjNyMyNy4xMi4zMC4wMC4wMCNIeWRyYXVsaWMgdW5pb25zIzI3LjEyLjAwLjAwLjAwCi11bnNwc2M3IzI3LjEyLjQwLjAwLjAwI0h5ZHJhdWxpYyBvciBjb21wcmVzc2lvbiBlbGJvd3MjMjcuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjcuMTIuNTAuMDAuMDAjRmVycnVsZSBudXRzIzI3LjEyLjAwLjAwLjAwCi11bnNwc2M3IzI3LjEyLjYwLjAwLjAwI0NyaW1wIGNvbm5lY3RvcnMjMjcuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMjcuMTIuNjEuMDAuMDAjSHlkcmF1bGljIHRvb2xzIzI3LjEyLjAwLjAwLjAwCi11bnNwc2M3IzI3LjEyLjYxLjAxLjAwI01hbmhvbGUgY292ZXIgbGlmdGVycyMyNy4xMi42MS4wMC4wMAotdW5zcHNjNyMyNy4xMy4wMC4wMC4wMCNQbmV1bWF0aWMgbWFjaGluZXJ5IGFuZCBlcXVpcG1lbnQjMjcuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMjcuMTMuMTUuMDAuMDAjUG5ldW1hdGljIHRvb2xzIzI3LjEzLjAwLjAwLjAwCi11bnNwc2M3IzI3LjEzLjE1LjAxLjAwI1BuZXVtYXRpYyBpbXBhY3Qgd3JlbmNoZXMjMjcuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMjcuMTMuMTUuMDIuMDAjQ29tcHJlc3NlZCBhaXIgZ3VuIzI3LjEzLjE1LjAwLjAwCi11bnNwc2M3IzI3LjEzLjE1LjAzLjAwI1BuZXVtYXRpYyBzY3Jld2RyaXZlciMyNy4xMy4xNS4wMC4wMAotdW5zcHNjNyMyNy4xMy4xNS4wNC4wMCNQbmV1bWF0aWMgaGFtbWVyIzI3LjEzLjE1LjAwLjAwCi11bnNwc2M3IzI3LjEzLjE1LjA1LjAwI1BuZXVtYXRpYyBkcmlsbCMyNy4xMy4xNS4wMC4wMAotdW5zcHNjNyMyNy4xMy4xNS4wNi4wMCNQbmV1bWF0aWMgbmFpbCBkcml2ZXJzIzI3LjEzLjE1LjAwLjAwCi11bnNwc2M3IzI3LjEzLjE1LjA3LjAwI1BuZXVtYXRpYyBzYW5kaW5nIG1hY2hpbmVzIzI3LjEzLjE1LjAwLjAwCi11bnNwc2M3IzI3LjEzLjE2LjAwLjAwI0FpciBmaXR0aW5ncyBhbmQgY29ubmVjdG9ycyMyNy4xMy4wMC4wMC4wMAotdW5zcHNjNyMyNy4xMy4xNi4wMS4wMCNBaXIgbWFuaWZvbGRzIzI3LjEzLjE2LjAwLjAwCi11bnNwc2M3IzI3LjEzLjE2LjAyLjAwI0ZpbHRlcnMjMjcuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMjcuMTMuMTYuMDMuMDAjUmVndWxhdG9yIzI3LjEzLjE2LjAwLjAwCi11bnNwc2M3IzI3LjEzLjE2LjA0LjAwI0x1YnJpY2F0b3IjMjcuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMjcuMTMuMTYuMDUuMDAjQWlyIGN1cnRhaW4jMjcuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMjcuMTMuMTYuMDYuMDAjQWlyIGNvdXBsaW5nIzI3LjEzLjE2LjAwLjAwCi11bnNwc2M3IzMwLjAwLjAwLjAwLjAwI1N0cnVjdHVyZXMgYW5kIEJ1aWxkaW5nIGFuZCBDb25zdHJ1Y3Rpb24gYW5kIE1hbnVmYWN0dXJpbmcgQ29tcG9uZW50cyBhbmQgU3VwcGxpZXMjMzAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMDAuMDAuMDAjU3RydWN0dXJhbCBtYXRlcmlhbHMgYW5kIGJhc2ljIHNoYXBlcyMzMC4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNS4wMC4wMCNBbmdsZXMjMzAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTUuMDEuMDAjRmVycm91cyBhbGxveSBhbmdsZXMjMzAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTUuMDIuMDAjTm9uIGZlcnJvdXMgYWxsb3kgYW5nbGVzIzMwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE1LjAzLjAwI0lyb24gYW5nbGVzIzMwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE1LjA0LjAwI1N0ZWVsIGFuZ2xlcyMzMC4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNS4wNS4wMCNTdGFpbmxlc3Mgc3RlZWwgYW5nbGVzIzMwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE1LjA2LjAwI0FsdW1pbnVtIGFuZ2xlcyMzMC4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNS4wNy4wMCNNYWduZXNpdW0gYW5nbGVzIzMwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE1LjA4LjAwI1RpdGFuaXVtIGFuZ2xlcyMzMC4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNS4wOS4wMCNDb3BwZXIgYW5nbGVzIzMwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE1LjEwLjAwI0JyYXNzIGFuZ2xlcyMzMC4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNS4xMS4wMCNCcm9uemUgYW5nbGVzIzMwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE1LjEyLjAwI1ppbmMgYW5nbGVzIzMwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE1LjEzLjAwI1RpbiBhbmdsZXMjMzAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTUuMTQuMDAjTGVhZCBhbmdsZXMjMzAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTUuMTUuMDAjUGxhc3RpYyBhbmdsZXMjMzAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTUuMTYuMDAjUnViYmVyIGFuZ2xlcyMzMC4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNS4xNy4wMCNQcmVjaW91cyBtZXRhbCBhbmdsZXMjMzAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTYuMDAuMDAjQmFyIzMwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzMwLjEwLjE2LjAxLjAwI0ZlcnJvdXMgYWxsb3kgYmFycyMzMC4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNi4wMi4wMCNOb24gZmVycm91cyBhbGxveSBiYXJzIzMwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE2LjAzLjAwI0lyb24gYmFycyMzMC4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNi4wNC4wMCNTdGVlbCBiYXJzIzMwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE2LjA1LjAwI1N0YWlubGVzcyBzdGVlbCBiYXJzIzMwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE2LjA2LjAwI0FsdW1pbnVtIGJhcnMjMzAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTYuMDcuMDAjTWFnbmVzaXVtIGJhcnMjMzAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTYuMDguMDAjVGl0YW5pdW0gYmFycyMzMC4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNi4wOS4wMCNDb3BwZXIgYmFycyMzMC4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNi4xMC4wMCNCcmFzcyBiYXJzIzMwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE2LjExLjAwI0Jyb256ZSBiYXJzIzMwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE2LjEyLjAwI1ppbmMgYmFycyMzMC4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNi4xMy4wMCNUaW4gYmFycyMzMC4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNi4xNC4wMCNMZWFkIGJhcnMjMzAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTYuMTUuMDAjUGxhc3RpYyBiYXJzIzMwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE2LjE2LjAwI1ByZWNpb3VzIG1ldGFsIGJhcnMjMzAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTYuMTcuMDAjV29vZGVuIGJhcnMjMzAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTcuMDAuMDAjQmVhbXMjMzAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTcuMDEuMDAjRmVycm91cyBhbGxveSBiZWFtcyMzMC4xMC4xNy4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNy4wMi4wMCNOb24gZmVycm91cyBhbGxveSBiZWFtcyMzMC4xMC4xNy4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNy4wMy4wMCNJcm9uIGJlYW1zIzMwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE3LjA0LjAwI1N0ZWVsIGJlYW1zIzMwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE3LjA1LjAwI1N0YWlubGVzcyBzdGVlbCBiZWFtcyMzMC4xMC4xNy4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNy4wNi4wMCNBbHVtaW51bSBiZWFtcyMzMC4xMC4xNy4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNy4wNy4wMCNNYWduZXNpdW0gYmVhbXMjMzAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTcuMDguMDAjVGl0YW5pdW0gYmVhbXMjMzAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTcuMDkuMDAjQ29wcGVyIGJlYW1zIzMwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE3LjEwLjAwI0JyYXNzIGJlYW1zIzMwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE3LjExLjAwI0Jyb256ZSBiZWFtcyMzMC4xMC4xNy4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNy4xMi4wMCNaaW5jIGJlYW1zIzMwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE3LjEzLjAwI1RpbiBiZWFtcyMzMC4xMC4xNy4wMC4wMAotdW5zcHNjNyMzMC4xMC4xNy4xNC4wMCNMZWFkIGJlYW1zIzMwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE3LjE1LjAwI1BsYXN0aWMgYmVhbXMjMzAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTcuMTYuMDAjUnViYmVyIGJlYW1zIzMwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE3LjE3LjAwI0NvbmNyZXRlIGJlYW1zIzMwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE3LjE4LjAwI1ByZWNpb3VzIG1ldGFsIGJlYW1zIzMwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE4LjAwLjAwI0NoYW5uZWxzIzMwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzMwLjEwLjE4LjAxLjAwI0ZlcnJvdXMgYWxsb3kgY2hhbm5lbHMjMzAuMTAuMTguMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTguMDIuMDAjTm9uIGZlcnJvdXMgYWxsb3kgY2hhbm5lbHMjMzAuMTAuMTguMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTguMDMuMDAjSXJvbiBjaGFubmVscyMzMC4xMC4xOC4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOC4wNC4wMCNTdGVlbCBjaGFubmVscyMzMC4xMC4xOC4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOC4wNS4wMCNTdGFpbmxlc3Mgc3RlZWwgY2hhbm5lbHMjMzAuMTAuMTguMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTguMDYuMDAjQWx1bWludW0gY2hhbm5lbHMjMzAuMTAuMTguMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTguMDcuMDAjTWFnbmVzaXVtIGNoYW5uZWxzIzMwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE4LjA4LjAwI1RpdGFuaXVtIGNoYW5ubmVscyMzMC4xMC4xOC4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOC4wOS4wMCNDb3BwZXIgY2hhbm5lbHMjMzAuMTAuMTguMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTguMTAuMDAjQnJhc3MgY2hhbm5lbHMjMzAuMTAuMTguMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTguMTEuMDAjQnJvbnplIGNoYW5uZWxzIzMwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE4LjEyLjAwI1ppbmMgY2hhbm5lbHMjMzAuMTAuMTguMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTguMTMuMDAjVGluIGNoYW5uZWxzIzMwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE4LjE0LjAwI0xlYWQgY2hhbm5lbHMjMzAuMTAuMTguMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTguMTUuMDAjUGxhc3RpYyBjaGFubmVscyMzMC4xMC4xOC4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOC4xNi4wMCNSdWJiZXIgY2hhbm5lbHMjMzAuMTAuMTguMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTguMTcuMDAjUHJlY2lvdXMgbWV0YWwgY2hhbm5lbHMjMzAuMTAuMTguMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTkuMDAuMDAjQ29pbCMzMC4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOS4wMS4wMCNGZXJyb3VzIGFsbG95IGNvaWwjMzAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTkuMDIuMDAjTm9uIGZlcnJvdXMgYWxsb3kgY29pbCMzMC4xMC4xOS4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOS4wMy4wMCNJcm9uIGNvaWwjMzAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTkuMDQuMDAjU3RlZWwgY29pbCMzMC4xMC4xOS4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOS4wNS4wMCNTdGFpbmxlc3Mgc3RlZWwgY29pbCMzMC4xMC4xOS4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOS4wNi4wMCNBbHVtaW51bSBjb2lsIzMwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE5LjA3LjAwI01hZ25lc2l1bSBjb2lsIzMwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE5LjA4LjAwI1RpdGFuaXVtIGNvaWwjMzAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTkuMDkuMDAjQ29wcGVyIGNvaWwjMzAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTkuMTAuMDAjQnJhc3MgY29pbCMzMC4xMC4xOS4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOS4xMS4wMCNCcm9uemUgY29pbCMzMC4xMC4xOS4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOS4xMi4wMCNaaW5jIGNvaWwjMzAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTkuMTMuMDAjVGluIGNvaWwjMzAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTkuMTQuMDAjTGVhZCBjb2lsIzMwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE5LjE1LjAwI1BsYXN0aWMgY29pbCMzMC4xMC4xOS4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOS4xNi4wMCNQcmVjaW91cyBtZXRhbCBjb2lscyMzMC4xMC4xOS4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOS4xNy4wMCNOb24gbWV0YWxsaWMgY29pbHMjMzAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTkuMTguMDAjUGVyZm9yYXRlZCBzdGVlbCMzMC4xMC4xOS4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOS4xOS4wMCNFbWJvc3NlZCBzdGVlbCMzMC4xMC4xOS4wMC4wMAotdW5zcHNjNyMzMC4xMC4xOS4yMC4wMCNDb21wcmVzc2VkIGZpYmVyIGNvaWwjMzAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMTkuMjEuMDAjRmliZXIgYW5kIHJ1YmJlciBjb2lsIzMwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzMwLjEwLjE5LjIyLjAwI0dyYXBoaXRlIGNvaWwjMzAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjAuMDAuMDAjRm9pbCMzMC4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMC4wMS4wMCNGZXJyb3VzIGFsbG95IGZvaWwjMzAuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjAuMDIuMDAjTm9uIGZlcnJvdXMgYWxsb3kgZm9pbCMzMC4xMC4yMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMC4wMy4wMCNJcm9uIGZvaWwjMzAuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjAuMDQuMDAjU3RlZWwgZm9pbCMzMC4xMC4yMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMC4wNS4wMCNTdGFpbmxlc3Mgc3RlZWwgZm9pbCMzMC4xMC4yMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMC4wNi4wMCNBbHVtaW51bSBmb2lsIzMwLjEwLjIwLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIwLjA3LjAwI01hZ25lc2l1bSBmb2lsIzMwLjEwLjIwLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIwLjA4LjAwI1RpdGFuaXVtIGZvaWwjMzAuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjAuMDkuMDAjQ29wcGVyIGZvaWwjMzAuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjAuMTAuMDAjQnJhc3MgZm9pbCMzMC4xMC4yMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMC4xMS4wMCNCcm9uemUgZm9pbCMzMC4xMC4yMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMC4xMi4wMCNaaW5jIGZvaWwjMzAuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjAuMTMuMDAjVGluIGZvaWwjMzAuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjAuMTQuMDAjTGVhZCBmb2lsIzMwLjEwLjIwLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIwLjE1LjAwI1BsYXN0aWMgZm9pbCMzMC4xMC4yMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMS4wMC4wMCNQaXBlIzMwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIxLjAxLjAwI0ZlcnJvdXMgYWxsb3kgcGlwZSMzMC4xMC4yMS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMS4wMi4wMCNOb24gZmVycm91cyBhbGxveSBwaXBlIzMwLjEwLjIxLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIxLjAzLjAwI0lyb24gcGlwZSMzMC4xMC4yMS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMS4wNC4wMCNTdGVlbCBwaXBlIzMwLjEwLjIxLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIxLjA1LjAwI1N0YWlubGVzcyBzdGVlbCBwaXBlIzMwLjEwLjIxLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIxLjA2LjAwI0FsdW1pbnVtIHBpcGUjMzAuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjEuMDcuMDAjTWFnbmVzaXVtIHBpcGUjMzAuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjEuMDguMDAjVGl0YW5pdW0gcGlwZSMzMC4xMC4yMS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMS4wOS4wMCNDb3BwZXIgcGlwZSMzMC4xMC4yMS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMS4xMC4wMCNCcmFzcyBwaXBlIzMwLjEwLjIxLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIxLjExLjAwI0Jyb256ZSBwaXBlIzMwLjEwLjIxLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIxLjEyLjAwI1ppbmMgcGlwZSMzMC4xMC4yMS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMS4xMy4wMCNUaW4gcGlwZSMzMC4xMC4yMS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMS4xNC4wMCNMZWFkIHBpcGUjMzAuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjEuMTUuMDAjUGxhc3RpYyBwaXBlIzMwLjEwLjIxLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIxLjE2LjAwI1J1YmJlciBwaXBlIzMwLjEwLjIxLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIxLjE3LjAwI0NvbmNyZXRlIHBpcGUjMzAuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjIuMDAuMDAjUGxhdGUjMzAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjIuMDEuMDAjRmVycm91cyBhbGxveSBwbGF0ZSMzMC4xMC4yMi4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMi4wMi4wMCNOb24gZmVycm91cyBwbGF0ZSMzMC4xMC4yMi4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMi4wMy4wMCNJcm9uIHBsYXRlIzMwLjEwLjIyLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIyLjA0LjAwI1N0ZWVsIHBsYXRlIzMwLjEwLjIyLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIyLjA1LjAwI1N0YWlubGVzcyBzdGVlbCBwbGF0ZSMzMC4xMC4yMi4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMi4wNi4wMCNBbHVtaW51bSBwbGF0ZSMzMC4xMC4yMi4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMi4wNy4wMCNNYWduZXNpdW0gcGxhdGUjMzAuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjIuMDguMDAjVGl0YW5pdW0gcGxhdGUjMzAuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjIuMDkuMDAjQ29wcGVyIHBsYXRlIzMwLjEwLjIyLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIyLjEwLjAwI0JyYXNzIHBsYXRlIzMwLjEwLjIyLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIyLjExLjAwI0Jyb256ZSBwbGF0ZSMzMC4xMC4yMi4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMi4xMi4wMCNaaW5jIHBsYXRlIzMwLjEwLjIyLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIyLjEzLjAwI1RpbiBwbGF0ZSMzMC4xMC4yMi4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMi4xNC4wMCNMZWFkIHBsYXRlIzMwLjEwLjIyLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIyLjE1LjAwI1BsYXN0aWMgcGxhdGUjMzAuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjIuMTYuMDAjUnViYmVyIHBsYXRlIzMwLjEwLjIyLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIyLjE3LjAwI0NvbmNyZXRlIHBsYXRlIzMwLjEwLjIyLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIyLjE4LjAwI1ByZWNpb3VzIG1ldGFsIHBsYXRlIzMwLjEwLjIyLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIyLjE5LjAwI05vbiBtZXRhbGxpYyBwbGF0ZXMjMzAuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjMuMDAuMDAjUHJvZmlsZXMjMzAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjMuMDEuMDAjRmVycm91cyBhbGxveSBwcm9maWxlcyMzMC4xMC4yMy4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMy4wMi4wMCNOb24gZmVycm91cyBhbGxveSBwcm9maWxlcyMzMC4xMC4yMy4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMy4wMy4wMCNJcm9uIHByb2ZpbGVzIzMwLjEwLjIzLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIzLjA0LjAwI1N0ZWVsIHByb2ZpbGVzIzMwLjEwLjIzLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIzLjA1LjAwI1N0YWlubGVzcyBzdGVlbCBwcm9maWxlcyMzMC4xMC4yMy4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMy4wNi4wMCNBbHVtaW51bSBwcm9maWxlcyMzMC4xMC4yMy4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMy4wNy4wMCNNYWduZXNpdW0gcHJvZmlsZXMjMzAuMTAuMjMuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjMuMDguMDAjVGl0YW5pdW0gcHJvZmlsZXMjMzAuMTAuMjMuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjMuMDkuMDAjQ29wcGVyIHByb2ZpbGVzIzMwLjEwLjIzLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIzLjEwLjAwI0JyYXNzIHByb2ZpbGVzIzMwLjEwLjIzLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIzLjExLjAwI0Jyb256ZSBwcm9maWxlcyMzMC4xMC4yMy4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMy4xMi4wMCNaaW5jIHByb2ZpbGVzIzMwLjEwLjIzLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIzLjEzLjAwI1RpbiBwcm9maWxlcyMzMC4xMC4yMy4wMC4wMAotdW5zcHNjNyMzMC4xMC4yMy4xNC4wMCNMZWFkIHByb2ZpbGVzIzMwLjEwLjIzLjAwLjAwCi11bnNwc2M3IzMwLjEwLjIzLjE1LjAwI1BsYXN0aWMgcHJvZmlsZXMjMzAuMTAuMjMuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjMuMTYuMDAjUnViYmVyIHByb2ZpbGVzIzMwLjEwLjIzLjAwLjAwCi11bnNwc2M3IzMwLjEwLjI0LjAwLjAwI1JvZCMzMC4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNC4wMS4wMCNGZXJyb3VzIGFsbG95IHJvZHMjMzAuMTAuMjQuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjQuMDIuMDAjTm9uIGZlcnJvdXMgYWxsb3kgcm9kcyMzMC4xMC4yNC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNC4wMy4wMCNJcm9uIHJvZHMjMzAuMTAuMjQuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjQuMDQuMDAjU3RlZWwgcm9kcyMzMC4xMC4yNC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNC4wNS4wMCNTdGFpbmxlc3Mgc3RlZWwgcm9kcyMzMC4xMC4yNC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNC4wNi4wMCNBbHVtaW51bSByb2RzIzMwLjEwLjI0LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI0LjA3LjAwI01hZ25lc2l1bSByb2RzIzMwLjEwLjI0LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI0LjA4LjAwI1RpdGFuaXVtIHJvZHMjMzAuMTAuMjQuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjQuMDkuMDAjQ29wcGVyIHJvZHMjMzAuMTAuMjQuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjQuMTAuMDAjQnJhc3Mgcm9kcyMzMC4xMC4yNC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNC4xMS4wMCNCcm9uemUgcm9kcyMzMC4xMC4yNC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNC4xMi4wMCNaaW5jIHJvZHMjMzAuMTAuMjQuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjQuMTMuMDAjVGluIHJvZHMjMzAuMTAuMjQuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjQuMTQuMDAjTGVhZCByb2RzIzMwLjEwLjI0LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI0LjE1LjAwI1BsYXN0aWMgcm9kcyMzMC4xMC4yNC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNC4xNi4wMCNSdWJiZXIgcm9kcyMzMC4xMC4yNC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNS4wMC4wMCNTaGVldCMzMC4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNS4wMS4wMCNGZXJyb3VzIGFsbG95IHNoZWV0IzMwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI1LjAyLjAwI05vbiBmZXJyb3VzIGFsbG95IHNoZWV0IzMwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI1LjAzLjAwI0lyb24gc2hlZXQjMzAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjUuMDQuMDAjU3RlZWwgc2hlZXQjMzAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjUuMDUuMDAjU3RhaW5sZXNzIHN0ZWVsIHNoZWV0IzMwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI1LjA2LjAwI0FsdW1pbnVtIHNoZWV0IzMwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI1LjA3LjAwI01hZ25lc2l1bSBzaGVldCMzMC4xMC4yNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNS4wOC4wMCNUaXRhbml1bSBzaGVldCMzMC4xMC4yNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNS4wOS4wMCNDb3BwZXIgc2hlZXQjMzAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjUuMTAuMDAjQnJhc3Mgc2hlZXQjMzAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjUuMTEuMDAjQnJvbnplIHNoZWV0IzMwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI1LjEyLjAwI1ppbmMgc2hlZXQjMzAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjUuMTMuMDAjVGluIHNoZWV0IzMwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI1LjE0LjAwI0xlYWQgc2hlZXQjMzAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjUuMTUuMDAjUGxhc3RpYyBzaGVldCMzMC4xMC4yNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNS4xNi4wMCNSdWJiZXIgc2hlZXQjMzAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjUuMTcuMDAjQXJtb3Igc2hlZXQjMzAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjUuMTguMDAjQmVyeWxsaXVtIGFsbG95IHNoZWV0IzMwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI1LjE5LjAwI0NvbXBvc2l0ZSBtZXRhbCBzaGVldCMzMC4xMC4yNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNS4yMC4wMCNOaWNrZWwgc2hlZXQjMzAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjUuMjEuMDAjRm9hbSBSdWJiZXIgU2hlZXQjMzAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjUuMjIuMDAjQ29yayBhbmQgcnViYmVyIHNoZWV0IzMwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI1LjIzLjAwI0NvbXByZXNzZWQgZmliZXIgc2hlZXQjMzAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjUuMjQuMDAjTWV0YWwgaW5zZXJ0ZWQgY29tcHJlc3NlZCBmaWJlciBzaGVldCMzMC4xMC4yNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNS4yNS4wMCNGaWJlciBhbmQgcnViYmVyIHNoZWV0IzMwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI1LjI2LjAwI0FzYmVzdG9zIHNoZWV0cyMzMC4xMC4yNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNi4wMC4wMCNTdHJpcCMzMC4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNi4wMS4wMCNGZXJyb3VzIGFsbG95IHN0cmlwIzMwLjEwLjI2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI2LjAyLjAwI05vbiBmZXJyb3VzIGFsbG95IHN0cmlwIzMwLjEwLjI2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI2LjAzLjAwI0lyb24gc3RyaXAjMzAuMTAuMjYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjYuMDQuMDAjU3RlZWwgc3RyaXAjMzAuMTAuMjYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjYuMDUuMDAjU3RhaW5sZXNzIHN0ZWVsIHN0cmlwIzMwLjEwLjI2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI2LjA2LjAwI0FsdW1pbnVtIHN0cmlwIzMwLjEwLjI2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI2LjA3LjAwI01hZ25lc2l1bSBzdHJpcCMzMC4xMC4yNi4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNi4wOC4wMCNUaXRhbml1bSBzdHJpcCMzMC4xMC4yNi4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNi4wOS4wMCNDb3BwZXIgc3RyaXAjMzAuMTAuMjYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjYuMTAuMDAjQnJhc3Mgc3RyaXAjMzAuMTAuMjYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjYuMTEuMDAjQnJvbnplIHN0cmlwIzMwLjEwLjI2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI2LjEyLjAwI1ppbmMgc3RyaXAjMzAuMTAuMjYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjYuMTMuMDAjVGluIHN0cmlwIzMwLjEwLjI2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI2LjE0LjAwI0xlYWQgc3RyaXAjMzAuMTAuMjYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjYuMTUuMDAjUGxhc3RpYyBzdHJpcCMzMC4xMC4yNi4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNi4xNi4wMCNSdWJiZXIgc3RyaXAjMzAuMTAuMjYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjcuMDAuMDAjVHViZSBhbmQgdHViaW5nIzMwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzMwLjEwLjI3LjAxLjAwI0ZlcnJvdXMgYWxsb3kgdHViaW5nIzMwLjEwLjI3LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI3LjAyLjAwI0NvcHBlciB0dWJpbmcjMzAuMTAuMjcuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjcuMDMuMDAjVGl0YW5pdW0gdHViaW5nIzMwLjEwLjI3LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI3LjA0LjAwI01hZ25lc2l1bSB0dWJpbmcjMzAuMTAuMjcuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjcuMDUuMDAjVGluIHR1YmluZyMzMC4xMC4yNy4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNy4wNi4wMCNCcmFzcyB0dWJpbmcjMzAuMTAuMjcuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjcuMDcuMDAjTGVhZCB0dWJpbmcjMzAuMTAuMjcuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjcuMDguMDAjQnJvbnplIHR1YmluZyMzMC4xMC4yNy4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNy4wOS4wMCNaaW5jIHR1YmluZyMzMC4xMC4yNy4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNy4xMC4wMCNTdGVlbCB0dWJpbmcjMzAuMTAuMjcuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjcuMTEuMDAjSXJvbiB0dWJpbmcjMzAuMTAuMjcuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjcuMTIuMDAjQ2VtZW50IHR1YmluZyMzMC4xMC4yNy4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNy4xMy4wMCNQbGFzdGljIHR1YmluZyMzMC4xMC4yNy4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNy4xNC4wMCNSdWJiZXIgdHViaW5nIzMwLjEwLjI3LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI3LjE1LjAwI0dsYXNzIHR1YmluZyMzMC4xMC4yNy4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNy4xNi4wMCNTdG9uZSB0dWJpbmcjMzAuMTAuMjcuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjcuMTcuMDAjTm9uIGZlcnJvdXMgYWxsb3kgdHViaW5nIzMwLjEwLjI3LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI3LjE4LjAwI0FsdW1pbnVtIHR1YmluZyMzMC4xMC4yNy4wMC4wMAotdW5zcHNjNyMzMC4xMC4yNy4xOS4wMCNTdGFpbmxlc3Mgc3RlZWwgdHViaW5nIzMwLjEwLjI3LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI3LjIwLjAwI1ByZWNpb3VzIG1ldGFsIHR1YmluZyMzMC4xMC4yNy4wMC4wMAotdW5zcHNjNyMzMC4xMC4yOC4wMC4wMCNQaWxpbmcjMzAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjguMDEuMDAjQWx1bWludW0gcGlsaW5ncyMzMC4xMC4yOC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yOC4wMi4wMCNDb25jcmV0ZSBwaWxpbmdzIzMwLjEwLjI4LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI4LjAzLjAwI1N0ZWVsIHBpbGluZ3MjMzAuMTAuMjguMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjkuMDAuMDAjUG9zdCMzMC4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4yOS4wMS4wMCNDZW1lbnQgb3IgY29uY3JldGUgcG9zdHMjMzAuMTAuMjkuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjkuMDIuMDAjU3RlZWwgcG9zdHMjMzAuMTAuMjkuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjkuMDMuMDAjTWV0YWwgcG9zdHMjMzAuMTAuMjkuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjkuMDQuMDAjV29vZGVuIHBvc3RzIzMwLjEwLjI5LjAwLjAwCi11bnNwc2M3IzMwLjEwLjI5LjA1LjAwI1BsYXN0aWMgcG9zdHMjMzAuMTAuMjkuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMjkuMDYuMDAjRmliZXJnbGFzcyBwb3N0cyMzMC4xMC4yOS4wMC4wMAotdW5zcHNjNyMzMC4xMC4zMC4wMC4wMCNTaGFmdGluZyMzMC4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4zMC4wMS4wMCNTdGVlbCBzaGFmdGluZyMzMC4xMC4zMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4zMC4wMi4wMCNTdGFpbmxlc3Mgc3RlZWwgc2hhZnRpbmcjMzAuMTAuMzAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzEuMDAuMDAjUmFpbHMjMzAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzEuMDEuMDAjU3RlZWwgcmFpbCMzMC4xMC4zMS4wMC4wMAotdW5zcHNjNyMzMC4xMC4zMS4wMi4wMCNBbHVtaW51bSByYWlsIzMwLjEwLjMxLjAwLjAwCi11bnNwc2M3IzMwLjEwLjMxLjAzLjAwI01ldGFsIHJhaWwjMzAuMTAuMzEuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzIuMDAuMDAjR3JhdGluZyMzMC4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4zMi4wMS4wMCNTdGVlbCBncmF0aW5nIzMwLjEwLjMyLjAwLjAwCi11bnNwc2M3IzMwLjEwLjMyLjAyLjAwI1N0YWlubGVzcyBzdGVlbCBncmF0aW5nIzMwLjEwLjMyLjAwLjAwCi11bnNwc2M3IzMwLjEwLjMyLjAzLjAwI0FsdW1pbnVtIGdyYXRpbmcjMzAuMTAuMzIuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzIuMDQuMDAjRmliZXJnbGFzcyBncmF0aW5nIzMwLjEwLjMyLjAwLjAwCi11bnNwc2M3IzMwLjEwLjMyLjA1LjAwI0lyb24gZ3JhdGluZyMzMC4xMC4zMi4wMC4wMAotdW5zcHNjNyMzMC4xMC4zMy4wMC4wMCNCaWxsZXRzIzMwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzMwLjEwLjMzLjAxLjAwI0FsdW1pbnVtIGJpbGxldCMzMC4xMC4zMy4wMC4wMAotdW5zcHNjNyMzMC4xMC4zMy4wMi4wMCNCcmFzcyBiaWxsZXQjMzAuMTAuMzMuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzMuMDMuMDAjQnJvbnplIGJpbGxldHMjMzAuMTAuMzMuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzMuMDQuMDAjQ29wcGVyIGJpbGxldHMjMzAuMTAuMzMuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzMuMDUuMDAjTGVhZCBiaWxsZXRzIzMwLjEwLjMzLjAwLjAwCi11bnNwc2M3IzMwLjEwLjMzLjA2LjAwI1ppbmMgYmlsbGV0cyMzMC4xMC4zMy4wMC4wMAotdW5zcHNjNyMzMC4xMC4zMy4wNy4wMCNTdGVlbCBiaWxsZXRzIzMwLjEwLjMzLjAwLjAwCi11bnNwc2M3IzMwLjEwLjMzLjA4LjAwI1RpdGFuaXVtIGJpbGxldHMjMzAuMTAuMzMuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzMuMDkuMDAjTWFnbmVzaXVtIGJpbGxldHMjMzAuMTAuMzMuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzMuMTAuMDAjUHJlY2lvdXMgbWV0YWwgYmlsbGV0cyMzMC4xMC4zMy4wMC4wMAotdW5zcHNjNyMzMC4xMC4zMy4xMS4wMCNOb24gZmVycm91cyBtZXRhbCBiaWxsZXRzIzMwLjEwLjMzLjAwLjAwCi11bnNwc2M3IzMwLjEwLjMzLjEyLjAwI0ZlcnJvdXMgbWV0YWwgYmlsbGV0cyMzMC4xMC4zMy4wMC4wMAotdW5zcHNjNyMzMC4xMC4zMy4xMy4wMCNOb24gbWV0YWxsaWMgYmlsbGV0cyMzMC4xMC4zMy4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNC4wMC4wMCNJbmdvdHMjMzAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzQuMDEuMDAjQWx1bWludW0gaW5nb3RzIzMwLjEwLjM0LjAwLjAwCi11bnNwc2M3IzMwLjEwLjM0LjAyLjAwI0JyYXNzIGluZ290cyMzMC4xMC4zNC4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNC4wMy4wMCNMZWFkIGluZ290cyMzMC4xMC4zNC4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNC4wNC4wMCNaaW5jIGluZ290cyMzMC4xMC4zNC4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNC4wNS4wMCNTdGVlbCBpbmdvdHMjMzAuMTAuMzQuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzQuMDYuMDAjTWFnbmVzaXVtIGluZ290cyMzMC4xMC4zNC4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNC4wNy4wMCNCcm9uemUgaW5nb3RzIzMwLjEwLjM0LjAwLjAwCi11bnNwc2M3IzMwLjEwLjM0LjA4LjAwI0NvcHBlciBpbmdvdHMjMzAuMTAuMzQuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzQuMDkuMDAjVGl0YW5pdW0gaW5nb3RzIzMwLjEwLjM0LjAwLjAwCi11bnNwc2M3IzMwLjEwLjM0LjEwLjAwI1ByZWNpb3VzIG1ldGFsIGluZ290cyMzMC4xMC4zNC4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNC4xMS4wMCNGZXJyb3VzIGFsbG95IGV4dHJ1c2lvbiBpbmdvdHMjMzAuMTAuMzQuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzQuMTIuMDAjTm9uIGZlcnJvdXMgYWxsb3kgZXh0cnVzaW9uIGluZ290cyMzMC4xMC4zNC4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNC4xMy4wMCNOb24gbWV0YWxsaWMgaW5nb3RzIzMwLjEwLjM0LjAwLjAwCi11bnNwc2M3IzMwLjEwLjM1LjAwLjAwI0hvbmV5Y29tYiBjb3JlIzMwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzMwLjEwLjM1LjAxLjAwI0FsdW1pbnVtIGhvbmV5Y29tYiBjb3JlIzMwLjEwLjM1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjM1LjAyLjAwI01hZ25lc2l1bSBob25leWNvbWIgY29yZSMzMC4xMC4zNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNS4wMy4wMCNGb2FtIGhvbmV5Y29tYiBjb3JlIzMwLjEwLjM1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjM1LjA0LjAwI1BsYXN0aWMgaG9uZXljb21iIGNvcmUjMzAuMTAuMzUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzUuMDUuMDAjV29vZGVuIGhvbmV5Y29tYiBjb3JlIzMwLjEwLjM1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjM1LjA2LjAwI0ZlcnJvdXMgbWV0YWwgaG9uZXljb21iIGNvcmUjMzAuMTAuMzUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzUuMDcuMDAjQnJvbnplIGhvbmV5Y29tYiBjb3JlIzMwLjEwLjM1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjM1LjA4LjAwI0NvcHBlciBob25leWNvbWIgY29yZSMzMC4xMC4zNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNS4wOS4wMCNTdGVlbCBob25leWNvbWIgY29yZSMzMC4xMC4zNS4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNS4xMC4wMCNMZWFkIGhvbmV5Y29tYiBjb3JlIzMwLjEwLjM1LjAwLjAwCi11bnNwc2M3IzMwLjEwLjM1LjExLjAwI1ppbmMgaG9uZXljb21iIGNvcmUjMzAuMTAuMzUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzUuMTIuMDAjVGl0YW5pdW0gaG9uZXljb21iIGNvcmUjMzAuMTAuMzUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzUuMTMuMDAjQnJhc3MgaG9uZXljb21iIGNvcmUjMzAuMTAuMzUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzUuMTQuMDAjTm9uIGZlcnJvdXMgbWV0YWwgaG9uZXljb21iIGNvcmUjMzAuMTAuMzUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzUuMTUuMDAjUHJlY2lvdXMgbWV0YWwgaG9uZXljb21iIGNvcmUjMzAuMTAuMzUuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzYuMDAuMDAjU3RydWN0dXJhbCBwcm9kdWN0cyMzMC4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNi4wMS4wMCNXb29kIGJlYW1zIzMwLjEwLjM2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjM2LjAyLjAwI1dvb2QgY29tcG9zaXRlIGJlYW1zIzMwLjEwLjM2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjM2LjAzLjAwI0ZyYW1pbmcgbHVtYmVyIzMwLjEwLjM2LjAwLjAwCi11bnNwc2M3IzMwLjEwLjM2LjA0LjAwI1dvb2Qgc2hlYXRoaW5nIG9yIHNoZWV0cyMzMC4xMC4zNi4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNi4wNS4wMCNXb29kIHBsYW5rcyMzMC4xMC4zNi4wMC4wMAotdW5zcHNjNyMzMC4xMC4zNi4wNi4wMCNXb29kIHRydXNzZXMjMzAuMTAuMzYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzYuMDcuMDAjV29vZCBqb2lzdHMjMzAuMTAuMzYuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzcuMDAuMDAjQnJhaWQjMzAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTAuMzcuMDEuMDAjU3RhaW5sZXNzIHN0ZWVsIGJyYWlkIzMwLjEwLjM3LjAwLjAwCi11bnNwc2M3IzMwLjExLjAwLjAwLjAwI0NvbmNyZXRlIGFuZCBjZW1lbnQgYW5kIHBsYXN0ZXIjMzAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTEuMTUuMDAuMDAjQ29uY3JldGUgYW5kIG1vcnRhcnMjMzAuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTEuMTUuMDEuMDAjRm9hbWVkIGNvbmNyZXRlIzMwLjExLjE1LjAwLjAwCi11bnNwc2M3IzMwLjExLjE1LjAyLjAwI0NvbmR1Y3RpdmUgY29uY3JldGUjMzAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTEuMTUuMDMuMDAjSW5zdWxhdGluZyBjb25jcmV0ZSMzMC4xMS4xNS4wMC4wMAotdW5zcHNjNyMzMC4xMS4xNS4wNC4wMCNNb3J0YXJzIzMwLjExLjE1LjAwLjAwCi11bnNwc2M3IzMwLjExLjE2LjAwLjAwI0NlbWVudCBhbmQgbGltZSMzMC4xMS4wMC4wMC4wMAotdW5zcHNjNyMzMC4xMS4xNi4wMS4wMCNDZW1lbnQjMzAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTEuMTYuMDIuMDAjQ2hsb3JpbmF0ZWQgbGltZSMzMC4xMS4xNi4wMC4wMAotdW5zcHNjNyMzMC4xMS4xNi4wMy4wMCNIeWRyYXVsaWMgbGltZSMzMC4xMS4xNi4wMC4wMAotdW5zcHNjNyMzMC4xMS4xNi4wNC4wMCNIeWRyYXRlZCBsaW1lIzMwLjExLjE2LjAwLjAwCi11bnNwc2M3IzMwLjExLjE2LjA1LjAwI0xlYW4gbGltZSMzMC4xMS4xNi4wMC4wMAotdW5zcHNjNyMzMC4xMS4xNi4wNi4wMCNHcm91dCMzMC4xMS4xNi4wMC4wMAotdW5zcHNjNyMzMC4xMS4xNi4wNy4wMCNVbnNsYWtlZCBsaW1lIzMwLjExLjE2LjAwLjAwCi11bnNwc2M3IzMwLjExLjE3LjAwLjAwI1BsYXN0ZXJzIzMwLjExLjAwLjAwLjAwCi11bnNwc2M3IzMwLjExLjE3LjAxLjAwI0d5cHN1bSBwbGFzdGVyIzMwLjExLjE3LjAwLjAwCi11bnNwc2M3IzMwLjEyLjAwLjAwLjAwI1JvYWRzIGFuZCBsYW5kc2NhcGUjMzAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTIuMTUuMDAuMDAjQml0dW1pbm91cyBkZXJpdmF0aXZlcyMzMC4xMi4wMC4wMC4wMAotdW5zcHNjNyMzMC4xMi4xNS4wMS4wMCNDb2FsIHRhciMzMC4xMi4xNS4wMC4wMAotdW5zcHNjNyMzMC4xMi4xNS4wMi4wMCNUYXJzIzMwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzMwLjEyLjE1LjAzLjAwI0NyZXNvdGUjMzAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTIuMTYuMDAuMDAjQXNwaGFsdHMjMzAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTIuMTYuMDEuMDAjQXNwaGFsdCMzMC4xMi4xNi4wMC4wMAotdW5zcHNjNyMzMC4xMi4xNi4wMi4wMCNQaXRjaCMzMC4xMi4xNi4wMC4wMAotdW5zcHNjNyMzMC4xMi4xNi4wMy4wMCNHaWxzb25pdGUjMzAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTIuMTYuMDQuMDAjQ3V0YmFjayBwcm9kdWN0cyMzMC4xMi4xNi4wMC4wMAotdW5zcHNjNyMzMC4xMi4xNi4wNS4wMCNNYW5ob2xlIGZyYW1lcyB3aXRoIGNvdmVycyMzMC4xMi4xNi4wMC4wMAotdW5zcHNjNyMzMC4xMy4wMC4wMC4wMCNTdHJ1Y3R1cmFsIGJ1aWxkaW5nIHByb2R1Y3RzIzMwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMwLjEzLjE1LjAwLjAwI0Jsb2NrcyMzMC4xMy4wMC4wMC4wMAotdW5zcHNjNyMzMC4xMy4xNS4wMS4wMCNDZW1lbnQgYmxvY2tzIzMwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzMwLjEzLjE1LjAyLjAwI0NvbmNyZXRlIGJsb2NrcyMzMC4xMy4xNS4wMC4wMAotdW5zcHNjNyMzMC4xMy4xNS4wMy4wMCNTdG9uZSBibG9ja3MjMzAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTMuMTUuMDQuMDAjQ2VyYW1pYyBibG9ja3MjMzAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTMuMTYuMDAuMDAjQnJpY2tzIzMwLjEzLjAwLjAwLjAwCi11bnNwc2M3IzMwLjEzLjE2LjAxLjAwI0NlbWVudCBicmlja3MjMzAuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTMuMTYuMDIuMDAjQ2VyYW1pYyBicmlja3MjMzAuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTMuMTYuMDMuMDAjQ29uY3JldGUgYnJpY2tzIzMwLjEzLjE2LjAwLjAwCi11bnNwc2M3IzMwLjEzLjE2LjA0LjAwI1N0b25lIGJyaWNrcyMzMC4xMy4xNi4wMC4wMAotdW5zcHNjNyMzMC4xMy4xNy4wMC4wMCNUaWxlcyBhbmQgZmxhZ3N0b25lcyMzMC4xMy4wMC4wMC4wMAotdW5zcHNjNyMzMC4xMy4xNy4wMS4wMCNDZW1lbnQgdGlsZXMgb3IgZmxhZ3N0b25lcyMzMC4xMy4xNy4wMC4wMAotdW5zcHNjNyMzMC4xMy4xNy4wMi4wMCNTdG9uZSB0aWxlcyBvciBmbGFnc3RvbmVzIzMwLjEzLjE3LjAwLjAwCi11bnNwc2M3IzMwLjEzLjE3LjAzLjAwI0NvbmNyZXRlIHRpbGVzIG9yIGZsYWdzdG9uZXMjMzAuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTMuMTcuMDQuMDAjQ2VyYW1pYyB0aWxlcyBvciBmbGFnc3RvbmVzIzMwLjEzLjE3LjAwLjAwCi11bnNwc2M3IzMwLjEzLjE3LjA1LjAwI0hlYWQgc3RvbmVzIzMwLjEzLjE3LjAwLjAwCi11bnNwc2M3IzMwLjE0LjAwLjAwLjAwI0luc3VsYXRpb24jMzAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTQuMTUuMDAuMDAjVGhlcm1hbCBpbnN1bGF0aW9uIzMwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzMwLjE0LjE1LjAxLjAwI1dlYXRoZXIgc3RyaXBwaW5nIzMwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE0LjE1LjAyLjAwI0luc3VsYXRpb24gYmxhbmtldHMjMzAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTQuMTUuMDMuMDAjRm9hbSBpbnN1bGF0aW9uIzMwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE0LjE1LjA0LjAwI0luc3VsYXRpb24gYmF0dHMjMzAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTQuMTUuMDUuMDAjVGhlcm1hbCBpbnN1bGF0aW9uIHNsZWV2aW5nIzMwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE0LjE1LjA2LjAwI0xvb3NlIGZpbGwgaW5zdWxhdGlvbiMzMC4xNC4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNC4xNS4wNy4wMCNSaWdpZCBib2FyZCBpbnN1bGF0aW9uIzMwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE0LjE1LjA4LjAwI0ZpYmVyIGluc3VsYXRpb24jMzAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTQuMTUuMDkuMDAjUmVmcmFjdG9yaWVzIzMwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE0LjE1LjEwLjAwI0Rvb3Igc3dlZXAjMzAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTQuMTUuMTEuMDAjV2luZG93IGZpbG0jMzAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTQuMTYuMDAuMDAjU3BlY2lhbHR5IGluc3VsYXRpb24jMzAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTQuMTYuMDEuMDAjQWNvdXN0aWNhbCBpbnN1bGF0aW9uIzMwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzMwLjE0LjE2LjAyLjAwI05vbiB0aGVybWFsIGluc3VsYXRpb24gc2xlZXZpbmcjMzAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTQuMTYuMDMuMDAjSGVhdCBTaGllbGRzIzMwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzMwLjE1LjAwLjAwLjAwI0V4dGVyaW9yIGZpbmlzaGluZyBtYXRlcmlhbHMjMzAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTUuMTUuMDAuMDAjUm9vZmluZyBtYXRlcmlhbHMjMzAuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTUuMTUuMDEuMDAjUm9sbCByb29maW5nIzMwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE1LjE1LjAyLjAwI1Jvb2YgdmFsbGV5cyMzMC4xNS4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNS4xNS4wMy4wMCNSb29maW5nIGZhYnJpY3MjMzAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTUuMTUuMDQuMDAjUm9vZmluZyBmZWx0cyMzMC4xNS4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNS4xNS4wNS4wMCNSb29maW5nIG1lbWJyYW5lcyMzMC4xNS4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNS4xNS4wNi4wMCNSb29maW5nIHRpbGVzIzMwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE1LjE1LjA3LjAwI1NoYWtlcyMzMC4xNS4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNS4xNS4wOC4wMCNTaGluZ2xlcyMzMC4xNS4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNS4xNS4wOS4wMCNUcnVzc2VzIzMwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE1LjE1LjEwLjAwI1NsYXRlIHJvb2ZpbmcjMzAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTUuMTYuMDAuMDAjUm9vZmluZyBhY2Nlc3NvcmllcyMzMC4xNS4wMC4wMC4wMAotdW5zcHNjNyMzMC4xNS4xNi4wMS4wMCNSb29mIGZhc2NpYXMjMzAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTUuMTYuMDIuMDAjRmxhc2hpbmdzIzMwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzMwLjE1LjE2LjAzLjAwI0dyYXZlbCBzdG9wcyMzMC4xNS4xNi4wMC4wMAotdW5zcHNjNyMzMC4xNS4xNi4wNC4wMCNSb29maW5nIGJydXNoZXMjMzAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTUuMTYuMDUuMDAjUm9vZmluZyBkcmFpbnMjMzAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTUuMTYuMDYuMDAjUm9vZmluZyBtb3BzIzMwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzMwLjE1LjE2LjA3LjAwI1Jvb2ZpbmcgdmVudHMjMzAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTUuMTYuMDguMDAjU29mZml0cyMzMC4xNS4xNi4wMC4wMAotdW5zcHNjNyMzMC4xNS4xNi4wOS4wMCNSb29mIGN1cmJzIzMwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzMwLjE1LjE2LjEwLjAwI1Jvb2YgcmlwcGVycyMzMC4xNS4xNi4wMC4wMAotdW5zcHNjNyMzMC4xNS4xNy4wMC4wMCNSYWluIGd1dHRlcnMgYW5kIGFjY2Vzc29yaWVzIzMwLjE1LjAwLjAwLjAwCi11bnNwc2M3IzMwLjE1LjE3LjAxLjAwI0Rvd25zcG91dHMjMzAuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTUuMTcuMDIuMDAjRHJpcCBjYXBzIzMwLjE1LjE3LjAwLjAwCi11bnNwc2M3IzMwLjE1LjE3LjAzLjAwI0d1dHRlcnMjMzAuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTUuMTcuMDQuMDAjU3BsYXNoYmxvY2tzIzMwLjE1LjE3LjAwLjAwCi11bnNwc2M3IzMwLjE1LjE4LjAwLjAwI1NpZGluZyBhbmQgZXh0ZXJpb3Igd2FsbCBtYXRlcmlhbHMjMzAuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTUuMTguMDEuMDAjU2h1dHRlcnMjMzAuMTUuMTguMDAuMDAKLXVuc3BzYzcjMzAuMTUuMTguMDIuMDAjU2lkaW5nIzMwLjE1LjE4LjAwLjAwCi11bnNwc2M3IzMwLjE1LjE4LjAzLjAwI1NpZGluZyBidXR0IGpvaW50cyMzMC4xNS4xOC4wMC4wMAotdW5zcHNjNyMzMC4xNS4xOC4wNC4wMCNTaWRpbmcgY29ybmVycyMzMC4xNS4xOC4wMC4wMAotdW5zcHNjNyMzMC4xNS4xOC4wNS4wMCNTdHVjY28jMzAuMTUuMTguMDAuMDAKLXVuc3BzYzcjMzAuMTUuMTguMDYuMDAjR2xhc3MgY3VydGFpbndhbGxpbmcjMzAuMTUuMTguMDAuMDAKLXVuc3BzYzcjMzAuMTUuMTkuMDAuMDAjRmluaXNoaW5nIG1hdGVyaWFscyBhbmQgcHJvZHVjdHMjMzAuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTUuMTkuMDEuMDAjQXduaW5ncyMzMC4xNS4xOS4wMC4wMAotdW5zcHNjNyMzMC4xNS4xOS4wMi4wMCNFeHRlcmlvciB0cmltIG1hdGVyaWFscyMzMC4xNS4xOS4wMC4wMAotdW5zcHNjNyMzMC4xNS4yMC4wMC4wMCNGZW5jaW5nIzMwLjE1LjAwLjAwLjAwCi11bnNwc2M3IzMwLjE1LjIwLjAxLjAwI01ldGFsIGZlbmNpbmcjMzAuMTUuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMTUuMjAuMDIuMDAjV29vZCBmZW5jaW5nIzMwLjE1LjIwLjAwLjAwCi11bnNwc2M3IzMwLjE1LjIxLjAwLjAwI1N1cmZhY2UjMzAuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTUuMjEuMDEuMDAjU2hvdCBzdGVlbCMzMC4xNS4yMS4wMC4wMAotdW5zcHNjNyMzMC4xNi4wMC4wMC4wMCNJbnRlcmlvciBmaW5pc2hpbmcgbWF0ZXJpYWxzIzMwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMwLjE2LjE1LjAwLjAwI1dhbGwgZmluaXNoaW5nIG1hdGVyaWFscyMzMC4xNi4wMC4wMC4wMAotdW5zcHNjNyMzMC4xNi4xNS4wMS4wMCNXYWxsYm9hcmQjMzAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTUuMDIuMDAjV2FsbHBhcGVycyMzMC4xNi4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNi4xNS4wMy4wMCNEcnl3YWxsIzMwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE2LjE1LjA0LjAwI0Nvcm5lciBndWFyZHMjMzAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTUuMDUuMDAjUGFuZWxzIG9yIHBhbmVsbGluZyMzMC4xNi4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNi4xNS4wNi4wMCNQbGFzdGVyIzMwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE2LjE1LjA3LjAwI0RyeXdhbGwgam9pbnQgY29tcG91bmRzIzMwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE2LjE1LjA4LjAwI1dhbGxwYXBlciByb2xsZXIjMzAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTYuMDAuMDAjQ2VpbGluZyBtYXRlcmlhbHMjMzAuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTYuMDEuMDAjQWNvdXN0aWMgY2VpbGluZyB0aWxlcyMzMC4xNi4xNi4wMC4wMAotdW5zcHNjNyMzMC4xNi4xNi4wMi4wMCNDZWlsaW5nIHBhbmVscyMzMC4xNi4xNi4wMC4wMAotdW5zcHNjNyMzMC4xNi4xNi4wMy4wMCNDb2ZmZXJzIzMwLjE2LjE2LjAwLjAwCi11bnNwc2M3IzMwLjE2LjE2LjA0LjAwI1N1c3BlbmRlZCBjZWlsaW5nIHN5c3RlbXMjMzAuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTcuMDAuMDAjRmxvb3JpbmcjMzAuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTcuMDEuMDAjQ2FycGV0aW5nIzMwLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMwLjE2LjE3LjAyLjAwI1dvb2QgZmxvb3JpbmcjMzAuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTcuMDMuMDAjTGlub2xldW0jMzAuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTcuMDUuMDAjUnViYmVyIGZsb29yaW5nIzMwLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMwLjE2LjE3LjA2LjAwI1N0b25lIG9yIHRpbGUgZmxvb3JpbmcjMzAuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTcuMDcuMDAjVmlueWwgZmxvb3JpbmcjMzAuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTcuMDguMDAjS25vdHRlZCBjYXJwZXRpbmcjMzAuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTcuMDkuMDAjVHVmdGVkIGNhcnBldGluZyMzMC4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMC4xNi4xNy4xMC4wMCNMYW1pbmF0ZSBmbG9vcmluZyMzMC4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMC4xNi4xNy4xMS4wMCNPdXRkb29yIGNhcnBldGluZyMzMC4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMC4xNi4xNy4xMi4wMCNGbG9vcmluZyBqb2lzdHMjMzAuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTcuMTMuMDAjQ2FycGV0IHBhZHMjMzAuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTcuMTQuMDAjQ29yayBmbG9vcmluZyMzMC4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMC4xNi4xNy4xNS4wMCNEdWNrYm9hcmRzIzMwLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMwLjE2LjE3LjE2LjAwI1RpbGUgc3BhY2VycyMzMC4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMC4xNi4xOC4wMC4wMCNDYWJpbmV0cnkjMzAuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTguMDEuMDAjQ2FiaW5ldHMjMzAuMTYuMTguMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTguMDIuMDAjQ291bnRlcnRvcHMjMzAuMTYuMTguMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTkuMDAuMDAjTW9sZGluZyBhbmQgbWlsbHdvcmsjMzAuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTkuMDEuMDAjTG91dmVycyMzMC4xNi4xOS4wMC4wMAotdW5zcHNjNyMzMC4xNi4xOS4wMi4wMCNDb2x1bW5zIzMwLjE2LjE5LjAwLjAwCi11bnNwc2M3IzMwLjE2LjE5LjAzLjAwI1dhaW5zY290aW5nIzMwLjE2LjE5LjAwLjAwCi11bnNwc2M3IzMwLjE2LjE5LjA0LjAwI0Nvcm5pY2VzIzMwLjE2LjE5LjAwLjAwCi11bnNwc2M3IzMwLjE2LjE5LjA1LjAwI0Rvb3Igc3Vycm91bmRzIzMwLjE2LjE5LjAwLjAwCi11bnNwc2M3IzMwLjE2LjE5LjA2LjAwI01vbGRpbmcjMzAuMTYuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMTYuMTkuMDcuMDAjU3RhaXJzIzMwLjE2LjE5LjAwLjAwCi11bnNwc2M3IzMwLjE2LjE5LjA4LjAwI1N0YWlyIHBhcnRzIzMwLjE2LjE5LjAwLjAwCi11bnNwc2M3IzMwLjE3LjAwLjAwLjAwI0Rvb3JzIGFuZCB3aW5kb3dzIGFuZCBnbGFzcyMzMC4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4xNy4xNS4wMC4wMCNEb29ycyMzMC4xNy4wMC4wMC4wMAotdW5zcHNjNyMzMC4xNy4xNS4wMS4wMCNHbGFzcyBkb29ycyMzMC4xNy4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNy4xNS4wMi4wMCNTY3JlZW4gZG9vcnMjMzAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTUuMDMuMDAjUm9sbGluZyBkb29ycyMzMC4xNy4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNy4xNS4wNC4wMCNXb29kZW4gZG9vcnMjMzAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTUuMDUuMDAjTWV0YWwgZG9vcnMjMzAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTUuMDYuMDAjU3Rvcm0gZG9vcnMjMzAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTUuMDcuMDAjRG9vciBmcmFtZXMjMzAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTUuMDguMDAjUG9ja2V0IGRvb3JzIzMwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE1LjA5LjAwI1Jldm9sdmluZyBkb29ycyMzMC4xNy4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNy4xNS4xMC4wMCNBdXRvbWF0aWMgZG9vcnMjMzAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTUuMTEuMDAjU3dpbmcgZG9vciMzMC4xNy4xNS4wMC4wMAotdW5zcHNjNyMzMC4xNy4xNS4xMi4wMCNEb29yIG9wZW5lcnMjMzAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTYuMDAuMDAjV2luZG93cyMzMC4xNy4wMC4wMC4wMAotdW5zcHNjNyMzMC4xNy4xNi4wNC4wMCNEb3VibGUgaHVuZyB3aW5kb3dzIzMwLjE3LjE2LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE2LjA1LjAwI1NpbmdsZSBodW5nIHdpbmRvd3MjMzAuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTYuMDYuMDAjQ2FzZW1lbnQgd2luZG93cyMzMC4xNy4xNi4wMC4wMAotdW5zcHNjNyMzMC4xNy4xNi4wNy4wMCNIb3Jpem9udGFsIHNsaWRlciB3aW5kb3dzIzMwLjE3LjE2LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE2LjA4LjAwI1RpbHQgb3IgdHJhbnNvbSB3aW5kb3dzIzMwLjE3LjE2LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE2LjA5LjAwI0ZpeGVkIHdpbmRvd3MjMzAuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTYuMTAuMDAjQmF5IHdpbmRvd3MjMzAuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTYuMTEuMDAjQm93IHdpbmRvd3MjMzAuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTYuMTIuMDAjUHJvamVjdGVkIHdpbmRvd3MjMzAuMTcuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTYuMTMuMDAjV2luZG93IHdhbGxzIzMwLjE3LjE2LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE2LjE0LjAwI1dpbmRvdyBzY3JlZW5zIzMwLjE3LjE2LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE2LjE1LjAwI0ZyZW5jaCB3aW5kb3dzIzMwLjE3LjE2LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE3LjAwLjAwI0dsYXNzIHByb2R1Y3RzIzMwLjE3LjAwLjAwLjAwCi11bnNwc2M3IzMwLjE3LjE3LjAxLjAwI1BhdmluZyBibG9ja3MjMzAuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTcuMDMuMDAjQmV2ZWxlZCBnbGFzcyMzMC4xNy4xNy4wMC4wMAotdW5zcHNjNyMzMC4xNy4xNy4wNC4wMCNMZWFkZWQgZ2xhc3MjMzAuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTcuMDUuMDAjTGFtaW5hdGVkIGdsYXNzIzMwLjE3LjE3LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE3LjA2LjAwI1RlbXBlcmVkIGdsYXNzIzMwLjE3LjE3LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE3LjA3LjAwI1NhZmV0eSBnbGFzcyMzMC4xNy4xNy4wMC4wMAotdW5zcHNjNyMzMC4xNy4xNy4wOC4wMCNGbG9hdCBnbGFzcyMzMC4xNy4xNy4wMC4wMAotdW5zcHNjNyMzMC4xNy4xNy4wOS4wMCNXaXJlZCBnbGFzcyMzMC4xNy4xNy4wMC4wMAotdW5zcHNjNyMzMC4xNy4xOC4wMC4wMCNTa3lsaWdodHMjMzAuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTguMDEuMDAjRml4ZWQgc2t5bGlnaHRzIzMwLjE3LjE4LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE4LjAyLjAwI1ZlbnRlZCBza3lsaWdodHMjMzAuMTcuMTguMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTguMDMuMDAjVHViZSBza3lsaWdodHMjMzAuMTcuMTguMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTkuMDAuMDAjV2luZG93IGZyYW1lcyMzMC4xNy4wMC4wMC4wMAotdW5zcHNjNyMzMC4xNy4xOS4wMS4wMCNEb3VibGUgaHVuZyB3aW5kb3cgZnJhbWVzIzMwLjE3LjE5LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE5LjAyLjAwI1NpbmdsZSBodW5nIHdpbmRvdyBmcmFtZXMjMzAuMTcuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMTkuMDMuMDAjQ2FzZW1lbnQgd2luZG93IGZyYW1lcyMzMC4xNy4xOS4wMC4wMAotdW5zcHNjNyMzMC4xNy4xOS4wNC4wMCNIb3Jpem9udGFsIHNsaWRlciB3aW5kb3cgZnJhbWVzIzMwLjE3LjE5LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE5LjA1LjAwI1RpbHQgb3IgdHJhbnNvbSB3aW5kb3cgZnJhbWVzIzMwLjE3LjE5LjAwLjAwCi11bnNwc2M3IzMwLjE3LjE5LjA2LjAwI0ZpeGVkIHdpbmRvdyBmcmFtZXMjMzAuMTcuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMjAuMDAuMDAjR2F0ZXMjMzAuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTcuMjAuMDEuMDAjU2luZ2xlIGJhciBnYXRlIzMwLjE3LjIwLjAwLjAwCi11bnNwc2M3IzMwLjE3LjIwLjAyLjAwI0RvdWJsZSBiYXIgZ2F0ZSMzMC4xNy4yMC4wMC4wMAotdW5zcHNjNyMzMC4xOC4wMC4wMC4wMCNQbHVtYmluZyBmaXh0dXJlcyMzMC4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4xOC4xNS4wMC4wMCNTYW5pdGFyeSB3YXJlIzMwLjE4LjAwLjAwLjAwCi11bnNwc2M3IzMwLjE4LjE1LjAxLjAwI0JhdGh0dWJzIzMwLjE4LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE4LjE1LjAyLjAwI0JpZGV0cyMzMC4xOC4xNS4wMC4wMAotdW5zcHNjNyMzMC4xOC4xNS4wMy4wMCNTaG93ZXJzIzMwLjE4LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE4LjE1LjA0LjAwI1NpbmtzIzMwLjE4LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE4LjE1LjA1LjAwI1RvaWxldHMjMzAuMTguMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTguMTUuMDYuMDAjVXJpbmFscyMzMC4xOC4xNS4wMC4wMAotdW5zcHNjNyMzMC4xOC4xNS4wNy4wMCNCYXRodHViIG9yIHNob3dlciBlbmNsb3N1cmVzIzMwLjE4LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE4LjE1LjA4LjAwI1Jlc3Ryb29tIHBhcnRpdGlvbnMjMzAuMTguMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTguMTUuMDkuMDAjU29hcCBkaXNoZXMjMzAuMTguMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTguMTUuMTAuMDAjTmFwa2luIHJpbmdzIzMwLjE4LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE5LjAwLjAwLjAwI0NvbnN0cnVjdGlvbiBhbmQgbWFpbnRlbmFuY2Ugc3VwcG9ydCBlcXVpcG1lbnQjMzAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTkuMTUuMDAuMDAjTGFkZGVycyBhbmQgc2NhZmZvbGRpbmcjMzAuMTkuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMTkuMTUuMDEuMDAjTGFkZGVycyMzMC4xOS4xNS4wMC4wMAotdW5zcHNjNyMzMC4xOS4xNS4wMi4wMCNTY2FmZm9sZGluZyMzMC4xOS4xNS4wMC4wMAotdW5zcHNjNyMzMC4xOS4xNS4wMy4wMCNTdGVwIHN0b29sIzMwLjE5LjE1LjAwLjAwCi11bnNwc2M3IzMwLjE5LjE1LjA0LjAwI1N0ZXAgc3Rvb2wjMzAuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMTkuMTUuMDUuMDAjU3RlcCBzdG9vbCMzMC4xOS4xNS4wMC4wMAotdW5zcHNjNyMzMC4xOS4xNi4wMC4wMCNMYWRkZXJzIGFuZCBzY2FmZm9sZGluZyBhY2Nlc3NvcmllcyMzMC4xOS4wMC4wMC4wMAotdW5zcHNjNyMzMC4xOS4xNi4wMS4wMCNIYW5kcmFpbHMjMzAuMTkuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTkuMTYuMDIuMDAjU2NhZmZvbGRpbmcgc3RhYmlsaXplcnMjMzAuMTkuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMTkuMTYuMDMuMDAjU2NhZmZvbGRpbmcgZmxvb3JpbmcjMzAuMTkuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMjAuMDAuMDAuMDAjUHJlZmFicmljYXRlZCBzdHJ1Y3R1cmVzIzMwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMwLjIwLjE1LjAwLjAwI1ByZWZhYnJpY2F0ZWQgZmFybSBzdHJ1Y3R1cmVzIzMwLjIwLjAwLjAwLjAwCi11bnNwc2M3IzMwLjIwLjE1LjAxLjAwI1NpbG9zIzMwLjIwLjE1LjAwLjAwCi11bnNwc2M3IzMwLjIwLjE1LjAyLjAwI0dyZWVuaG91c2VzIzMwLjIwLjE1LjAwLjAwCi11bnNwc2M3IzMwLjIwLjE2LjAwLjAwI1ByZWZhYnJpY2F0ZWQgcmVzaWRlbnRpYWwgc3RydWN0dXJlcyMzMC4yMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4yMC4xNi4wMS4wMCNIb3VzZXMjMzAuMjAuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMjAuMTYuMDIuMDAjTW9iaWxlIGhvbWVzIzMwLjIwLjE2LjAwLjAwCi11bnNwc2M3IzMwLjIwLjE2LjAzLjAwI0NhYmlucyMzMC4yMC4xNi4wMC4wMAotdW5zcHNjNyMzMC4yMC4xNi4wNC4wMCNHYXJhZ2VzIzMwLjIwLjE2LjAwLjAwCi11bnNwc2M3IzMwLjIwLjE2LjA1LjAwI0dhemVibyMzMC4yMC4xNi4wMC4wMAotdW5zcHNjNyMzMC4yMC4xNy4wMC4wMCNQcmVmYWJyaWNhdGVkIGNvbW1lcmNpYWwgYW5kIGluZHVzdHJpYWwgc3RydWN0dXJlcyMzMC4yMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4yMC4xNy4wMS4wMCNJbiBwbGFudCBvZmZpY2VzIzMwLjIwLjE3LjAwLjAwCi11bnNwc2M3IzMwLjIwLjE3LjAyLjAwI1NwcmF5IGJvb3RocyMzMC4yMC4xNy4wMC4wMAotdW5zcHNjNyMzMC4yMC4xNy4wMy4wMCNTdG9yYWdlIHNoZWRzIzMwLjIwLjE3LjAwLjAwCi11bnNwc2M3IzMwLjIwLjE3LjA0LjAwI0NsZWFuIHJvb21zIzMwLjIwLjE3LjAwLjAwCi11bnNwc2M3IzMwLjIwLjE3LjA1LjAwI0d1YXJkaG91c2VzIzMwLjIwLjE3LjAwLjAwCi11bnNwc2M3IzMwLjIwLjE3LjA2LjAwI1BvcnRhYmxlIHRvaWxldHRlcyMzMC4yMC4xNy4wMC4wMAotdW5zcHNjNyMzMC4yMC4xNy4wNy4wMCNXYXJlaG91c2VzIzMwLjIwLjE3LjAwLjAwCi11bnNwc2M3IzMwLjIwLjE3LjA4LjAwI0F1ZGl0b3JpdW0jMzAuMjAuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMjAuMTcuMDkuMDAjQ29uc2VydmF0b3J5IzMwLjIwLjE3LjAwLjAwCi11bnNwc2M3IzMwLjIwLjE3LjEwLjAwI09mZmljZSBraXRjaGVucyMzMC4yMC4xNy4wMC4wMAotdW5zcHNjNyMzMC4yMC4xOC4wMC4wMCNQcmVmYWJyaWNhdGVkIGVtZXJnZW5jeSByZWxpZWYgc3RydWN0dXJlcyMzMC4yMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4yMC4xOC4wMS4wMCNTaGVsdGVycyMzMC4yMC4xOC4wMC4wMAotdW5zcHNjNyMzMC4yMC4xOC4wMi4wMCNFbWVyZ2VuY3kgdGVudCBoYWxscyMzMC4yMC4xOC4wMC4wMAotdW5zcHNjNyMzMC4yMC4xOC4wMy4wMCNDb250YWluZXIgdW5pdHMjMzAuMjAuMTguMDAuMDAKLXVuc3BzYzcjMzAuMjAuMTkuMDAuMDAjUHJlZmFicmljYXRlZCBtZWRpY2FsIHN0cnVjdHVyZXMjMzAuMjAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMjAuMTkuMDEuMDAjTWVkaWNhbCB1bml0cyMzMC4yMC4xOS4wMC4wMAotdW5zcHNjNyMzMC4yMC4xOS4wMi4wMCNMYWJvcmF0b3J5IHVuaXRzIzMwLjIwLjE5LjAwLjAwCi11bnNwc2M3IzMwLjIwLjE5LjAzLjAwI0RlbnRhbCB1bml0cyMzMC4yMC4xOS4wMC4wMAotdW5zcHNjNyMzMC4yMC4xOS4wNC4wMCNTdXJnaWNhbCB1bml0cyMzMC4yMC4xOS4wMC4wMAotdW5zcHNjNyMzMC4yMS4wMC4wMC4wMCNFbGVjdHJpY2FsIGVxdWlwbWVudCBhbmQgY29tcG9uZW50cyBhbmQgc3VwcGxpZXMjMzAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTUuMDAuMDAjUG93ZXIgY29udmVyc2lvbiMzMC4yMS4wMC4wMC4wMAotdW5zcHNjNyMzMC4yMS4xNS4wMS4wMCNUcmFuc2Zvcm1lcnMjMzAuMjEuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTUuMDIuMDAjUG93ZXIgc3VwcGx5IHVuaXRzIzMwLjIxLjE1LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE1LjAzLjAwI1Bvd2VyIGRpc3RyaWJ1dGlvbiB1bml0cyAoUERVcykjMzAuMjEuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTUuMDQuMDAjUG93ZXIgYWRhcHRlcnMgb3IgaW52ZXJ0ZXJzIzMwLjIxLjE1LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE1LjA1LjAwI0ZyZXF1ZW5jeSBjb252ZXJ0ZXJzIzMwLjIxLjE1LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE1LjA2LjAwI1NpZ25hbCBjb252ZXJ0ZXJzIzMwLjIxLjE1LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE1LjA3LjAwI1RyYW5zZHVjZXJzIzMwLjIxLjE1LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE1LjA4LjAwI1JlZ3VsYXRvcnMjMzAuMjEuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTUuMDkuMDAjTWFnbmV0aWMgY29pbHMjMzAuMjEuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTUuMTAuMDAjVW5pbnRlcnJ1cHRpYmxlIHBvd2VyIHN1cHBsaWVzIzMwLjIxLjE1LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE1LjExLjAwI1NvbGVub2lkcyMzMC4yMS4xNS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xNS4xMi4wMCNDaG9rZXMjMzAuMjEuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTUuMTMuMDAjRWxlY3RyaWMgcm90YXJ5IGNvbnZlcnRlcnMjMzAuMjEuMTUuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTUuMTQuMDAjQ2FwYWNpdG9yIGJhbmtzIzMwLjIxLjE1LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE1LjE1LjAwI1JlYWN0b3JzIzMwLjIxLjE1LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE2LjAwLjAwI0NvbmR1aXRzIGFuZCByYWNld2F5cyMzMC4yMS4wMC4wMC4wMAotdW5zcHNjNyMzMC4yMS4xNi4wMS4wMCNDYWJsZSB0cmF5cyMzMC4yMS4xNi4wMC4wMAotdW5zcHNjNyMzMC4yMS4xNi4wMi4wMCNFbGVjdHJpY2FsIGNvbmR1aXQjMzAuMjEuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTYuMDMuMDAjRWxlY3RyaWNhbCByYWNld2F5cyMzMC4yMS4xNi4wMC4wMAotdW5zcHNjNyMzMC4yMS4xNi4wNC4wMCNXaXJpbmcgZHVjdHMjMzAuMjEuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTYuMDUuMDAjV2lyZXdheXMjMzAuMjEuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTYuMDYuMDAjV2lyaW5nIHRyb3VnaHMjMzAuMjEuMTYuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTcuMDAuMDAjRWxlY3RyaWNhbCBib3hlcyBhbmQgZW5jbG9zdXJlcyBhbmQgZml0dGluZ3MjMzAuMjEuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTcuMDEuMDAjRWxlY3RyaWNhbCBib3hlcyMzMC4yMS4xNy4wMC4wMAotdW5zcHNjNyMzMC4yMS4xNy4wMi4wMCNFbGVjdHJpY2FsIGJveCBjb3ZlcnMjMzAuMjEuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTcuMDMuMDAjV2VhdGhlcnByb29mIGJveGVzIzMwLjIxLjE3LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE3LjA0LjAwI1N3aXRjaCBib3hlcyMzMC4yMS4xNy4wMC4wMAotdW5zcHNjNyMzMC4yMS4xNy4wNS4wMCNGbG9vciBib3hlcyMzMC4yMS4xNy4wMC4wMAotdW5zcHNjNyMzMC4yMS4xNy4wNi4wMCNPdXRsZXQgYm94ZXMjMzAuMjEuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTcuMDcuMDAjU3BlY2lhbHR5IGVsZWN0cmljYWwgYm94ZXMjMzAuMjEuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTcuMDguMDAjVXRpbGl0eSBib3hlcyMzMC4yMS4xNy4wMC4wMAotdW5zcHNjNyMzMC4yMS4xNy4wOS4wMCNFbGVjdHJpY2FsIGZpdHRpbmdzIzMwLjIxLjE3LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE3LjEwLjAwI0VsZWN0cmljYWwgYnVzaGluZ3MjMzAuMjEuMTcuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTcuMTEuMDAjQ2VpbGluZyBmbGFuZ2VzIzMwLjIxLjE3LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE4LjAwLjAwI0x1Z3MgY29ubmVjdG9ycyBhbmQgdGVybWluYWxzIzMwLjIxLjAwLjAwLjAwCi11bnNwc2M3IzMwLjIxLjE4LjAxLjAwI0VsZWN0cmljYWwgdGVybWluYWxzIzMwLjIxLjE4LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE4LjAyLjAwI0VsZWN0cmljYWwgcGx1Z3MjMzAuMjEuMTguMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTguMDMuMDAjVHdpc3QgbG9jayBwbHVncyMzMC4yMS4xOC4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOC4wNC4wMCNFbGVjdHJpY2FsIHNsZWV2ZXMjMzAuMjEuMTguMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTguMDUuMDAjQ2FibGUgb3Igd2lyZSBsdWdzIzMwLjIxLjE4LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE4LjA2LjAwI0VsZWN0cmljYWwgcmVjZXB0YWNsZXMjMzAuMjEuMTguMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTguMDcuMDAjVGVybWluYWwgc3RyaXBzIzMwLjIxLjE4LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE4LjA4LjAwI01lY2hhbmljYWwgY29ubmVjdG9ycyMzMC4yMS4xOC4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOC4wOS4wMCNSaW5nIG9yIGZsYWcgdGVybWluYWxzIzMwLjIxLjE4LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE4LjEwLjAwI1dpcmUgY29ubmVjdG9ycyMzMC4yMS4xOC4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOC4xMS4wMCNUZXJtaW5hbCBibG9ja3MjMzAuMjEuMTguMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTguMTIuMDAjRnVzZSBibG9ja3MjMzAuMjEuMTguMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTguMTMuMDAjQmFja3NoZWxsIGNvbm5lY3RvcnMjMzAuMjEuMTguMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTguMTQuMDAjQ2lyY3VsYXIgY29ubmVjdG9ycyMzMC4yMS4xOC4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOC4xNS4wMCNDb2F4aWFsIGNvbm5lY3RvcnMjMzAuMjEuMTguMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTguMTYuMDAjRmxhdCBjb25uZWN0b3JzIzMwLjIxLjE4LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE4LjE3LjAwI0VsZWN0cm9uaWMgY29ubmVjdG9yIGNhcHMjMzAuMjEuMTguMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTguMTguMDAjUmFkaW8gZnJlcXVlbmN5IChSRikgY29ubmVjdG9ycyMzMC4yMS4xOC4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOC4xOS4wMCNFbGVjdHJpY2FsIG1ldGFsbGljIHR1YmluZyAoRU1UKSBjb25uZWN0b3JzIzMwLjIxLjE4LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE4LjIwLjAwI0NvbXByZXNzaW9uIGNvbm5lY3RvcnMjMzAuMjEuMTguMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTguMjEuMDAjU2V0IHNjcmV3IGNvdXBsaW5ncyMzMC4yMS4xOC4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOC4yMi4wMCNGbGV4IGNvbm5lY3RvcnMjMzAuMjEuMTguMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTguMjMuMDAjTGlxdWlkIHRpZ2h0IGNvbm5lY3RvcnMjMzAuMjEuMTguMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTguMjQuMDAjQ29ubmVjdG9yIGFzc2VtYmxpZXMjMzAuMjEuMTguMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTguMjUuMDAjTWVjaGFuaWNhbCBjb3VwbGluZ3MjMzAuMjEuMTguMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTguMjYuMDAjU3ByaW5nIGphdyBjb25uZWN0b3JzIzMwLjIxLjE4LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE4LjI3LjAwI1Rlcm1pbmFsIGJsb2NrIGNvdmVycyMzMC4yMS4xOC4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOC4yOC4wMCNUZXJtaW5hbCBibG9jayBzZXBhcmF0b3IjMzAuMjEuMTguMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTguMjkuMDAjSnVtcGVyIGJhciMzMC4yMS4xOC4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOC4zMC4wMCNXaXJpbmcgdGFwcyMzMC4yMS4xOC4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOC4zMS4wMCNFbGVjdHJpY2FsIHRhcHMjMzAuMjEuMTguMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTguMzIuMDAjRmliZXIgb3B0aWMgY29ubmVjdG9yIzMwLjIxLjE4LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE5LjAwLjAwI1N3aXRjaGVzIGFuZCBjb250cm9scyBhbmQgcmVsYXlzIzMwLjIxLjAwLjAwLjAwCi11bnNwc2M3IzMwLjIxLjE5LjAxLjAwI1NhZmV0eSBzd2l0Y2hlcyMzMC4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOS4wMi4wMCNEaW1tZXIgc3dpdGNoZXMjMzAuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTkuMDMuMDAjRHJ1bSBzd2l0Y2hlcyMzMC4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOS4wNC4wMCNUaW1lIHN3aXRjaGVzIzMwLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE5LjA1LjAwI1NuYXAgc3dpdGNoZXMjMzAuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTkuMDYuMDAjTWVjaGFuaWNhbCBzd2l0Y2hlcyMzMC4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOS4wNy4wMCNQcmVzc3VyZSBzd2l0Y2hlcyMzMC4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOS4wOC4wMCNUb2dnbGUgc3dpdGNoZXMjMzAuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTkuMDkuMDAjU2xpZGUgc3dpdGNoZXMjMzAuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTkuMTAuMDAjTGltaXQgc3dpdGNoZXMjMzAuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTkuMTEuMDAjQ29udHJvbGxlciBzd2l0Y2hlcyMzMC4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOS4xMi4wMCNWYXJpYWJsZSBzd2l0Y2hlcyMzMC4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOS4xMy4wMCNQdXNoIGJ1dHRvbiBzd2l0Y2hlcyMzMC4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOS4xNC4wMCNSb3Rhcnkgc3dpdGNoZXMjMzAuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTkuMTUuMDAjUG93ZXIgcmVsYXlzIzMwLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE5LjE2LjAwI0dlbmVyYWwgcHVycG9zZSByZWxheXMjMzAuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTkuMTcuMDAjU29ja2V0IHJlbGF5cyMzMC4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOS4xOC4wMCNBbHRlcm5hdGluZyB2b2x0YWdlIHJlbGF5cyMzMC4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOS4xOS4wMCNNZXJjdXJ5IHJlbGF5cyMzMC4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOS4yMC4wMCNUaW1lIHJlbGF5cyMzMC4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOS4yMS4wMCNPdmVybG9hZCByZWxheXMjMzAuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTkuMjIuMDAjTW90b3Igc3RhcnRlciBjb250cm9scyMzMC4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOS4yMy4wMCNFbGVjdHJpY2FsIGNvbnRhY3RzIzMwLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE5LjI0LjAwI1RpbWVyIGNvbnRyb2xzIzMwLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE5LjI1LjAwI1Bob3RvY29udHJvbHMjMzAuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTkuMjYuMDAjTm9uIGZ1c2libGUgc3dpdGNoZXMjMzAuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTkuMjcuMDAjUmFkaW8gZnJlcXVlbmN5IChSRikgc3dpdGNoZXMjMzAuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMTkuMjguMDAjUHJveGltaXR5IHN3aXRjaGVzIzMwLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE5LjI5LjAwI0VuY29kZXJzIzMwLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMwLjIxLjE5LjMwLjAwI1Bob3RvZWxlY3RyaWMgc2Vuc29ycyMzMC4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMC4yMS4xOS4zMS4wMCNDb250YWN0b3JzIzMwLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMwLjIxLjIwLjAwLjAwI0NpcmN1aXQgcHJvdGVjdGlvbiBkZXZpY2VzIGFuZCBhY2Nlc3NvcmllcyMzMC4yMS4wMC4wMC4wMAotdW5zcHNjNyMzMC4yMS4yMC4wMS4wMCNDaXJjdWl0IGJyZWFrZXJzIzMwLjIxLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIxLjIwLjAyLjAwI01hZ25ldGljIGNpcmN1aXQgYnJlYWtlcnMjMzAuMjEuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMjAuMDMuMDAjTWluaWF0dXJlIGNpcmN1aXQgYnJlYWtlcnMjMzAuMjEuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMjAuMDQuMDAjVGltZSBkZWxheSBmdXNlcyMzMC4yMS4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMS4yMC4wNS4wMCNQbHVnIGZ1c2VzIzMwLjIxLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIxLjIwLjA2LjAwI0NhcnRyaWRnZSBmdXNlcyMzMC4yMS4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMS4yMC4wNy4wMCNHbGFzcyBib2R5IGZ1c2VzIzMwLjIxLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIxLjIwLjA4LjAwI0NsYXNzIHR5cGUgZnVzZXMjMzAuMjEuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMjAuMDkuMDAjTWlkZ2V0IGZ1c2VzIzMwLjIxLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIxLjIwLjEwLjAwI1N1cmdlIHN1cHByZXNzZXJzIzMwLjIxLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIxLjIwLjExLjAwI0NlcmFtaWMgZnVzZXMjMzAuMjEuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMjAuMTIuMDAjQmxhZGUgZnVzZXMjMzAuMjEuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMjEuMDAuMDAjRWxlY3RyaWNhbCBoYXJkd2FyZSBhbmQgc3VwcGxpZXMjMzAuMjEuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMjEuMDEuMDAjRWxlY3RyaWNhbCBoYW5nZXJzIzMwLjIxLjIxLjAwLjAwCi11bnNwc2M3IzMwLjIxLjIxLjAyLjAwI0NhYmxlIGNsaXBzIzMwLjIxLjIxLjAwLjAwCi11bnNwc2M3IzMwLjIxLjIxLjAzLjAwI0NhYmxlIHRpZXMjMzAuMjEuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMjEuMDQuMDAjV2FsbHBsYXRlcyMzMC4yMS4yMS4wMC4wMAotdW5zcHNjNyMzMC4yMS4yMS4wNS4wMCNTd2l0Y2hwbGF0ZXMjMzAuMjEuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMjEuMDYuMDAjQ2FibGUgY2xhbXBzIzMwLjIxLjIxLjAwLjAwCi11bnNwc2M3IzMwLjIxLjIxLjA3LjAwI1RyYW5zZm9ybWVyIGJ1c2hpbmdzIzMwLjIxLjIxLjAwLjAwCi11bnNwc2M3IzMwLjIxLjIxLjA4LjAwI0hhcm5lc3MgYm9hcmQgbmFpbHMjMzAuMjEuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMjEuMDkuMDAjRGluIFJhaWwjMzAuMjEuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMjEuMTAuMDAjSGFuZGxlIHRpZSMzMC4yMS4yMS4wMC4wMAotdW5zcHNjNyMzMC4yMS4yMS4xMS4wMCNFbGVjdHJpY2FsIHJlY2VwdGFjbGUgbXVsdGlwbGllcnMjMzAuMjEuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMjEuMTIuMDAjVHViaW5ncyMzMC4yMS4yMS4wMC4wMAotdW5zcHNjNyMzMC4yMS4yMS4xMy4wMCNFbmQgY2FwcyMzMC4yMS4yMS4wMC4wMAotdW5zcHNjNyMzMC4yMS4yMS4xNC4wMCNTcGlyYWwgd3JhcHBpbmcjMzAuMjEuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMjEuMTUuMDAjR3JvbW1ldCBlZGdpbmcjMzAuMjEuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMjEuMTYuMDAjQ29ycnVnYXRlZCBsb29tIHR1YmVzIzMwLjIxLjIxLjAwLjAwCi11bnNwc2M3IzMwLjIxLjIxLjE3LjAwI0V4cGFuZGFibGUgYnJhaWRlZCBzbGVldmUjMzAuMjEuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMjEuMjEuMTguMDAjQ2FibGUgdGllIG1vdW50cyMzMC4yMS4yMS4wMC4wMAotdW5zcHNjNyMzMC4yMi4wMC4wMC4wMCNQZXJtYW5lbnQgc3RydWN0dXJlcyMzMC4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4xMC4wMC4wMCNDb21tZXJjaWFsIGFuZCBlbnRlcnRhaW5tZW50IHN0cnVjdHVyZXMjMzAuMjIuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMTAuMDEuMDAjU2hvcHBpbmcgbWFsbHMjMzAuMjIuMTAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMTAuMDIuMDAjUGFya2luZyBzdHJ1Y3R1cmVzIzMwLjIyLjEwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjEwLjAzLjAwI0NhZmV0ZXJpYSMzMC4yMi4xMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4xMC4wNC4wMCNTaG9wIGJ1aWxkaW5ncyMzMC4yMi4xMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4xMC4wNS4wMCNTaG9wcGluZyBjZW50ZXIjMzAuMjIuMTAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMTAuMDYuMDAjQ2FudGVlbiMzMC4yMi4xMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4xMC4wNy4wMCNUaGVhdGVyIzMwLjIyLjEwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjEwLjA4LjAwI0F1ZGl0b3JpdW0jMzAuMjIuMTAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMTAuMDkuMDAjTWFya2V0IzMwLjIyLjEwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjEwLjEwLjAwI0NoaWxkcmVucyBwbGF5IGFyZWEjMzAuMjIuMTAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMTAuMTEuMDAjWm9vIzMwLjIyLjEwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjEwLjEyLjAwI0dhcmRlbnMjMzAuMjIuMTAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMTAuMTMuMDAjUGFya3MjMzAuMjIuMTAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMTAuMTQuMDAjV2F0ZXJzaWRlIGxlaXN1cmUgZmFjaWxpdGllcyMzMC4yMi4xMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC4wMC4wMCNUcmFuc3BvcnQgc3RydWN0dXJlcyMzMC4yMi4wMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC4wMS4wMCNTdGVlbCBicmlkZ2VzIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjAyLjAwI0RyeSBkb2NrIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjAzLjAwI0J1cyBzdGF0aW9uIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjA0LjAwI0J1cyBnYXJhZ2UjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuMDUuMDAjU2VydmljZSBhcmVhIGJ1aWxkaW5nIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjA2LjAwI1JhaWx3YXkgc3RhdGlvbiMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC4wNy4wMCNSYWlsd2F5IGRlcG90IzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjA4LjAwI1VuZGVyZ3JvdW5kIHJhaWx3YXkgc3RhdGlvbiMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC4wOS4wMCNSYWlsIHRlcm1pbmFsIGJ1aWxkaW5nIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjEwLjAwI1RyYW13YXkgZGVwb3QjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuMTEuMDAjVHJhbXdheSBwbGF0Zm9ybXMjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuMTIuMDAjQWlycG9ydCBidWlsZGluZ3MjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuMTMuMDAjQWlycG9ydCBjb250cm9sIHRvd2VyIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjE0LjAwI0FpcmZpZWxkIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjE1LjAwI1J1bndheSMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC4xNi4wMCNRdWF5IzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjE3LjAwI1BpZXIjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuMTguMDAjRG9jayMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC4xOS4wMCNXaGFyZiMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC4yMC4wMCNNYXJpbmEjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuMjEuMDAjWWFjaHQgaGFyYm9yIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjIyLjAwI0JyZWFrd2F0ZXIjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuMjMuMDAjU2Vhd2FsbCMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC4yNC4wMCNGZXJyeSB0ZXJtaW5hbCBidWlsZGluZyMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC4yNS4wMCNSbyBybyB0ZXJtaW5hbCMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC4yNi4wMCNMaWdodGhvdXNlIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjI3LjAwI1JvYWQgYnJpZGdlIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjI4LjAwI1JhaWx3YXkgYnJpZGdlIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjI5LjAwI0Zvb3RicmlkZ2UjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuMzAuMDAjUm9hZCB2aWFkdWN0IzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjMxLjAwI1JhaWx3YXkgdmlhZHVjdCMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC4zMi4wMCNVbmRlcnBhc3MjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuMzMuMDAjT3ZlcnBhc3MjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuMzQuMDAjU3Vid2F5IzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjM1LjAwI0N1bHZlcnRzIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjM2LjAwI1JvYWQgdHVubmVsIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjM3LjAwI1JhaWx3YXkgdHVubmVsIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjM4LjAwI1BlZGVzdHJpYW4gdHVubmVsIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjM5LjAwI0NhbmFsIHR1bm5lbCMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC40MC4wMCNVbmRlciByaXZlciB0dW5uZWwjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuNDEuMDAjVW5kZXJzZWEgdHVubmVsIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjQyLjAwI0hpZ2h3YXlzIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjQzLjAwI0Nyb3Nzcm9hZCMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC40NC4wMCNSaW5nIHJvYWQjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuNDUuMDAjVHJ1bmsgcm9hZCMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC40Ni4wMCNTZWNvbmRhcnkgcm9hZCMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC40Ny4wMCNBY2Nlc3Mgcm9hZCMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC40OC4wMCNTbGlwIHJvYWQjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuNDkuMDAjRHVhbCBjYXJyaWFnZXdheSMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC41MC4wMCNTaW5nbGUgY2FycmlhZ2V3YXkjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuNTEuMDAjUm9hZCBqdW5jdGlvbiMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC41Mi4wMCNQZWRlc3RyaWFuIHdheXMjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuNTMuMDAjUGVkZXN0cmlhbiBvdmVycGFzcyMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC41NC4wMCNGb290cGF0aCMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC41NS4wMCNDeWNsZSBwYXRoIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjU2LjAwI1BpcGVsaW5lIGNhcnJ5aW5nIGJyaWRnZSMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC41Ny4wMCNQaXBlbGluZXMjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjAuNTguMDAjUHVtcGluZyBzdGF0aW9uIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjU5LjAwI1Nld2FnZSBwdW1waW5nIHN0YXRpb25zIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjYwLjAwI1Nld2FnZSBvdXRmYWxsIzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjYxLjAwI1BhcmtpbmcgbG90IzMwLjIyLjIwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIwLjYyLjAwI1Bhcmtpbmcgc3RydWN0dXJlcyMzMC4yMi4yMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMC42My4wMCNNb3RvcndheSBzZXJ2aWNlIGFyZWEjMzAuMjIuMjAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjEuMDAuMDAjUHVibGljIHN0cnVjdHVyZXMjMzAuMjIuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjEuMDEuMDAjUG9zdCBvZmZpY2UjMzAuMjIuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjEuMDIuMDAjQmFuayMzMC4yMi4yMS4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMS4wMy4wMCNQb2xpY2Ugc3RhdGlvbiMzMC4yMi4yMS4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMS4wNC4wMCNDb3VydCBidWlsZGluZyMzMC4yMi4yMS4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMS4wNS4wMCNQcmlzb24gYnVpbGRpbmcjMzAuMjIuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjEuMDYuMDAjRmlyZSBzdGF0aW9uIzMwLjIyLjIxLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIxLjA3LjAwI0FtYnVsYW5jZSBzdGF0aW9uIzMwLjIyLjIxLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIxLjA4LjAwI01vdW50YWluIHJlc2N1ZSBidWlsZGluZyMzMC4yMi4yMS4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMS4wOS4wMCNMaWZlYm9hdCBzdGF0aW9uIzMwLjIyLjIxLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIxLjEwLjAwI0NvYXN0Z3VhcmQgYnVpbGRpbmcjMzAuMjIuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjEuMTEuMDAjUmVzY3VlIHNlcnZpY2Ugc3RhdGlvbiMzMC4yMi4yMS4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMS4xMi4wMCNDaXZpYyBjZW50ZXIjMzAuMjIuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjEuMTMuMDAjQ3JlbWF0b3JpdW0jMzAuMjIuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjEuMTQuMDAjQXJ0IGdhbGxlcnkjMzAuMjIuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjEuMTUuMDAjUHJlaGlzdG9yaWMgbW9udW1lbnQjMzAuMjIuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjEuMTYuMDAjVGlja2V0IG9mZmljZXMjMzAuMjIuMjEuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjIuMDAuMDAjVXRpbGl0aWVzIHN0cnVjdHVyZXMjMzAuMjIuMDAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjIuMDEuMDAjUmFkYXIgc3RhdGlvbiMzMC4yMi4yMi4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMi4wMi4wMCNTdWJzdGF0aW9uIzMwLjIyLjIyLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIyLjAzLjAwI051Y2xlYXIgcG93ZXIgc3RhdGlvbiMzMC4yMi4yMi4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMi4wNC4wMCNXYXRlciB0b3dlciMzMC4yMi4yMi4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMi4wNS4wMCNXZWxscyMzMC4yMi4yMi4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMi4wNi4wMCNNb2JpbGUgdGVsZXBob25lIGJhc2Ugc3RhdGlvbnMjMzAuMjIuMjIuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjIuMDcuMDAjRGFtIzMwLjIyLjIyLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIyLjA4LjAwI09pbCBvciBnYXMgcGxhdGZvcm1zIzMwLjIyLjIyLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIzLjAwLjAwI0VkdWNhdGlvbmFsIGFuZCByZXNlYXJjaCBzdHJ1Y3R1cmVzIzMwLjIyLjAwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIzLjAxLjAwI1NjaG9vbHMjMzAuMjIuMjMuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjMuMDIuMDAjUG9seXRlY2huaWMjMzAuMjIuMjMuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjMuMDMuMDAjVm9jYXRpb25hbCBjb2xsZWdlIzMwLjIyLjIzLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIzLjA0LjAwI0xlY3R1cmUgdGhlYXRlciMzMC4yMi4yMy4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMy4wNS4wMCNMaWJyYXJ5IzMwLjIyLjIzLjAwLjAwCi11bnNwc2M3IzMwLjIyLjIzLjA2LjAwI0xhbmd1YWdlIGxhYm9yYXRvcnkjMzAuMjIuMjMuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjMuMDcuMDAjTGFib3JhdG9yeSBidWlsZGluZyMzMC4yMi4yMy4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMy4wOC4wMCNNZXRlb3JvbG9naWNhbCBzdGF0aW9ucyMzMC4yMi4yMy4wMC4wMAotdW5zcHNjNyMzMC4yMi4yMy4wOS4wMCNSZXNlYXJjaCBvciB0ZXN0aW5nIGZhY2lsaXRpZXMjMzAuMjIuMjMuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjQuMDAuMDAjSG9zcGl0YWwgc3RydWN0dXJlcyMzMC4yMi4wMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yNC4wMS4wMCNDbGluaWMjMzAuMjIuMjQuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjQuMDIuMDAjTnVyc2luZyBob21lIzMwLjIyLjI0LjAwLjAwCi11bnNwc2M3IzMwLjIyLjI0LjAzLjAwI09wZXJhdGluZyB0aGVhdGVyIzMwLjIyLjI0LjAwLjAwCi11bnNwc2M3IzMwLjIyLjI0LjA0LjAwI0ludGVuc2l2ZSBjYXJlIHVuaXQjMzAuMjIuMjQuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjQuMDUuMDAjRGlhZ25vc3RpYyBzY3JlZW5pbmcgcm9vbSMzMC4yMi4yNC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yNC4wNi4wMCNTY3JlZW5pbmcgcm9vbXMjMzAuMjIuMjQuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjQuMDcuMDAjRmx1b3Jvc2NvcHkgcm9vbSMzMC4yMi4yNC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yNC4wOC4wMCNQYXRob2xvZ3kgcm9vbSMzMC4yMi4yNC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yNC4wOS4wMCNDYXRoZXRlciByb29tIzMwLjIyLjI0LjAwLjAwCi11bnNwc2M3IzMwLjIyLjI1LjAwLjAwI0FjY29tbW9kYXRpb24gc3RydWN0dXJlcyMzMC4yMi4wMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yNS4wMS4wMCNSZXNpZGVudGlhbCBob21lcyMzMC4yMi4yNS4wMC4wMAotdW5zcHNjNyMzMC4yMi4yNS4wMi4wMCNGbGF0cyMzMC4yMi4yNS4wMC4wMAotdW5zcHNjNyMzMC4yMi4yNS4wMy4wMCNDaGlsZHJlbnMgaG9tZSMzMC4yMi4yNS4wMC4wMAotdW5zcHNjNyMzMC4yMi4yNS4wNC4wMCNEYXljYXJlIGNlbnRlciMzMC4yMi4yNS4wMC4wMAotdW5zcHNjNyMzMC4yMi4yNS4wNS4wMCNSZXRpcmVtZW50IGhvbWUjMzAuMjIuMjUuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjUuMDYuMDAjT2xkIHBlb3BsZXMgaG9tZSMzMC4yMi4yNS4wMC4wMAotdW5zcHNjNyMzMC4yMi4yNS4wNy4wMCNIb3N0ZWwjMzAuMjIuMjUuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjYuMDAuMDAjU3BvcnRzIGFuZCBoZWFsdGggc3RydWN0dXJlcyMzMC4yMi4wMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yNi4wMS4wMCNTdGFkaXVtIzMwLjIyLjI2LjAwLjAwCi11bnNwc2M3IzMwLjIyLjI2LjAyLjAwI1Nwb3J0cyBncm91bmQjMzAuMjIuMjYuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjYuMDMuMDAjUnVubmluZyB0cmFjayMzMC4yMi4yNi4wMC4wMAotdW5zcHNjNyMzMC4yMi4yNi4wNC4wMCNTcG9ydHMgaGFsbCMzMC4yMi4yNi4wMC4wMAotdW5zcHNjNyMzMC4yMi4yNi4wNS4wMCNTcGEjMzAuMjIuMjYuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjYuMDYuMDAjR3ltbmFzaXVtIzMwLjIyLjI2LjAwLjAwCi11bnNwc2M3IzMwLjIyLjI2LjA3LjAwI1N3aW1taW5nIHBvb2wjMzAuMjIuMjYuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjYuMDguMDAjV2F0ZXIgc3BvcnRzIGZhY2lsaXRpZXMjMzAuMjIuMjYuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjcuMDAuMDAjSW5kdXN0cmlhbCBzdHJ1Y3R1cmVzIzMwLjIyLjAwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjI3LjAxLjAwI1dvcmtzaG9wcyMzMC4yMi4yNy4wMC4wMAotdW5zcHNjNyMzMC4yMi4yNy4wMi4wMCNDb2xkIHN0b3JhZ2UgaW5zdGFsbGF0aW9ucyMzMC4yMi4yNy4wMC4wMAotdW5zcHNjNyMzMC4yMi4yNy4wMy4wMCNXYXJlaG91c2Ugc3RvcmVzIzMwLjIyLjI3LjAwLjAwCi11bnNwc2M3IzMwLjIyLjI4LjAwLjAwI0FncmljdWx0dXJhbCBhbmQgZmFybWluZyBhbmQgZmlzaGluZyBzdHJ1Y3R1cmVzIzMwLjIyLjAwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjI4LjAxLjAwI0Jhcm4jMzAuMjIuMjguMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjguMDIuMDAjQ293c2hlZHMjMzAuMjIuMjguMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjguMDMuMDAjSXJyaWdhdGlvbiBjaGFubmVsIzMwLjIyLjI4LjAwLjAwCi11bnNwc2M3IzMwLjIyLjI5LjAwLjAwI0RlZmVuc2Ugc3RydWN0dXJlcyMzMC4yMi4wMC4wMC4wMAotdW5zcHNjNyMzMC4yMi4yOS4wMS4wMCNNaWxpdGFyeSBidW5rZXIjMzAuMjIuMjkuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMjkuMDIuMDAjTWlsaXRhcnkgc2hlbHRlciMzMC4yMi4yOS4wMC4wMAotdW5zcHNjNyMzMC4yMi4yOS4wMy4wMCNCYXJyYWNrcyMzMC4yMi4yOS4wMC4wMAotdW5zcHNjNyMzMC4yMi4yOS4wNC4wMCNNaWxpdGFyeSBtZXNzIzMwLjIyLjI5LjAwLjAwCi11bnNwc2M3IzMwLjIyLjMwLjAwLjAwI1JlbGlnaW91cyBzdHJ1Y3R1cmVzIzMwLjIyLjAwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjMwLjAxLjAwI0NodXJjaGVzIzMwLjIyLjMwLjAwLjAwCi11bnNwc2M3IzMwLjIyLjMwLjAyLjAwI1RlbXBsZXMjMzAuMjIuMzAuMDAuMDAKLXVuc3BzYzcjMzAuMjIuMzAuMDMuMDAjTW9zcXVlcyMzMC4yMi4zMC4wMC4wMAotdW5zcHNjNyMzMS4wMC4wMC4wMC4wMCNNYW51ZmFjdHVyaW5nIENvbXBvbmVudHMgYW5kIFN1cHBsaWVzIzMxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjEwLjAwLjAwLjAwI0Nhc3RpbmdzIzMxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjEwLjE1LjAwLjAwI0RpZSBjYXN0aW5ncyMzMS4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNS4wMS4wMCNBbHVtaW51bSBkaWUgY2FzdGluZ3MjMzEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTUuMDIuMDAjRmVycm91cyBhbGxveSBkaWUgY2FzdGluZ3MjMzEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTUuMDMuMDAjSXJvbiBkaWUgY2FzdGluZ3MjMzEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTUuMDQuMDAjTm9uIGZlcnJvdXMgYWxsb3kgZGllIGNhc3RpbmdzIzMxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE1LjA1LjAwI1N0YWlubGVzcyBzdGVlbCBkaWUgY2FzdGluZ3MjMzEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTUuMDYuMDAjU3RlZWwgZGllIGNhc3RpbmdzIzMxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE1LjA3LjAwI01hZ25lc2l1bSBkaWUgY2FzdGluZ3MjMzEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTUuMDguMDAjWmluYyBkaWUgY2FzdGluZ3MjMzEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTUuMDkuMDAjVGluIGRpZSBjYXN0aW5ncyMzMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNS4xMC4wMCNUaXRhbml1bSBkaWUgY2FzdGluZ3MjMzEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTUuMTEuMDAjQmVyeWxsaXVtIGRpZSBjYXN0aW5ncyMzMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNS4xMi4wMCNQcmVjaW91cyBtZXRhbCBkaWUgY2FzdGluZ3MjMzEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTUuMTMuMDAjQ29wcGVyIGRpZSBjYXN0aW5ncyMzMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNS4xNC4wMCNMZWFkIGRpZSBjYXN0aW5ncyMzMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNS4xNS4wMCNCcmFzcyBkaWUgY2FzdGluZ3MjMzEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTUuMTYuMDAjQnJvbnplIGRpZSBjYXN0aW5ncyMzMS4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNi4wMC4wMCNTYW5kIGNhc3RpbmdzIzMxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjEwLjE2LjAxLjAwI05vbiBmZXJyb3VzIGFsbG95IHNhbmQgY2FzdGluZ3MjMzEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTYuMDIuMDAjRmVycm91cyBhbGxveSBzYW5kIGNhc3RpbmdzIzMxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE2LjAzLjAwI1N0ZWVsIHNhbmQgY2FzdGluZ3MjMzEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTYuMDQuMDAjU3RhaW5sZXNzIHN0ZWVsIHNhbmQgY2FzdGluZ3MjMzEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTYuMDUuMDAjSXJvbiBzYW5kIGNhc3RpbmdzIzMxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE2LjA2LjAwI0FsdW1pbnVtIHNhbmQgY2FzdGluZ3MjMzEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTYuMDcuMDAjTWFnbmVzaXVtIHNhbmQgY2FzdGluZ3MjMzEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTYuMDguMDAjVGl0YW5pdW0gc2FuZCBjYXN0aW5ncyMzMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNi4wOS4wMCNCZXJ5bGxpdW0gc2FuZCBjYXN0aW5ncyMzMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNi4xMC4wMCNDb3BwZXIgc2FuZCBjYXN0aW5ncyMzMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNi4xMS4wMCNCcmFzcyBzYW5kIGNhc3RpbmdzIzMxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE2LjEyLjAwI0Jyb256ZSBzYW5kIGNhc3RpbmdzIzMxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE2LjEzLjAwI1ppbmMgc2FuZCBjYXN0aW5ncyMzMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNi4xNC4wMCNUaW4gc2FuZCBjYXN0aW5ncyMzMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNi4xNS4wMCNMZWFkIHNhbmQgY2FzdGluZ3MjMzEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTYuMTYuMDAjUHJlY2lvdXMgbWV0YWwgc2FuZCBjYXN0aW5ncyMzMS4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNy4wMC4wMCNQZXJtYW5lbnQgbW9sZCBjYXN0aW5ncyMzMS4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNy4wMS4wMCNOb24gZmVycm91cyBhbGxveSBwZXJtYW5lbnQgbW9sZCBjYXN0aW5ncyMzMS4xMC4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNy4wMi4wMCNGZXJyb3VzIGFsbG95IHBlcm1hbmVudCBtb2xkIGNhc3RpbmdzIzMxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE3LjAzLjAwI1N0ZWVsIHBlcm1hbmVudCBtb2xkIGNhc3RpbmdzIzMxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE3LjA0LjAwI1N0YWlubGVzcyBzdGVlbCBwZXJtYW5lbnQgbW9sZCBjYXN0aW5ncyMzMS4xMC4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNy4wNS4wMCNJcm9uIHBlcm1hbmVudCBtb2xkIGNhc3RpbmdzIzMxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE3LjA2LjAwI0FsdW1pbnVtIHBlcm1hbmVudCBtb2xkIGNhc3RpbmdzIzMxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE3LjA3LjAwI01hZ25lc2l1bSBwZXJtYW5lbnQgbW9sZCBjYXN0aW5ncyMzMS4xMC4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNy4wOC4wMCNUaXRhbml1bSBwZXJtYW5lbnQgbW9sZCBjYXN0aW5ncyMzMS4xMC4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNy4wOS4wMCNCZXJ5bGxpdW0gcGVybWFuZW50IG1vbGQgY2FzdGluZ3MjMzEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTcuMTAuMDAjQ29wcGVyIHBlcm1hbmVudCBtb2xkIGNhc3RpbmdzIzMxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE3LjExLjAwI0JyYXNzIHBlcm1hbmVudCBtb2xkIGNhc3RpbmdzIzMxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE3LjEyLjAwI0Jyb256ZSBwZXJtYW5lbnQgbW9sZCBjYXN0aW5ncyMzMS4xMC4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNy4xMy4wMCNaaW5jIHBlcm1hbmVudCBtb2xkIGNhc3RpbmdzIzMxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE3LjE0LjAwI1RpbiBwZXJtYW5lbnQgbW9sZCBjYXN0aW5ncyMzMS4xMC4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMC4xNy4xNS4wMCNMZWFkIHBlcm1hbmVudCBtb2xkIGNhc3RpbmdzIzMxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE3LjE2LjAwI1ByZWNpb3VzIG1ldGFsIHBlcm1hbmVudCBtb2xkIGNhc3RpbmdzIzMxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE4LjAwLjAwI1NoZWxsIG1vbGQgY2FzdGluZ3MjMzEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTguMDEuMDAjTm9uIGZlcnJvdXMgYWxsb3kgc2hlbGwgbW9sZCBjYXN0aW5ncyMzMS4xMC4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMC4xOC4wMi4wMCNGZXJyb3VzIGFsbG95IHNoZWxsIG1vbGQgY2FzdGluZ3MjMzEuMTAuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTguMDMuMDAjU3RlZWwgc2hlbGwgbW9sZCBjYXN0aW5ncyMzMS4xMC4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMC4xOC4wNC4wMCNTdGFpbmxlc3Mgc3RlZWwgc2hlbGwgbW9sZCBjYXN0aW5ncyMzMS4xMC4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMC4xOC4wNS4wMCNJcm9uIHNoZWxsIG1vbGQgY2FzdGluZ3MjMzEuMTAuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTguMDYuMDAjQWx1bWludW0gc2hlbGwgbW9sZCBjYXN0aW5ncyMzMS4xMC4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMC4xOC4wNy4wMCNNYWduZXNpdW0gc2hlbGwgbW9sZCBjYXN0aW5ncyMzMS4xMC4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMC4xOC4wOC4wMCNUaXRhbml1bSBzaGVsbCBtb2xkIGNhc3RpbmdzIzMxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE4LjA5LjAwI0JlcnlsbGl1bSBzaGVsbCBtb2xkIGNhc3RpbmdzIzMxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE4LjEwLjAwI0NvcHBlciBzaGVsbCBtb2xkIGNhc3RpbmdzIzMxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE4LjExLjAwI0JyYXNzIHNoZWxsIG1vbGQgY2FzdGluZ3MjMzEuMTAuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTguMTIuMDAjQnJvbnplIHNoZWxsIG1vbGQgY2FzdGluZ3MjMzEuMTAuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTguMTMuMDAjWmluYyBzaGVsbCBtb2xkIGNhc3RpbmdzIzMxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE4LjE0LjAwI1RpbiBzaGVsbCBtb2xkIGNhc3RpbmdzIzMxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE4LjE1LjAwI0xlYWQgc2hlbGwgbW9sZCBjYXN0aW5ncyMzMS4xMC4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMC4xOC4xNi4wMCNQcmVjaW91cyBzaGVsbCBtb2xkIGNhc3RpbmdzIzMxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE5LjAwLjAwI0ludmVzdG1lbnQgY2FzdGluZ3MjMzEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTkuMDEuMDAjTm9uIGZlcnJvdXMgYWxsb3kgaW52ZXN0bWVudCBjYXN0aW5ncyMzMS4xMC4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMC4xOS4wMi4wMCNGZXJyb3VzIGFsbG95IGludmVzdG1lbnQgY2FzdGluZ3MjMzEuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTkuMDMuMDAjU3RlZWwgaW52ZXN0bWVudCBjYXN0aW5ncyMzMS4xMC4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMC4xOS4wNC4wMCNTdGFpbmxlc3Mgc3RlZWwgaW52ZXN0bWVudCBjYXN0aW5ncyMzMS4xMC4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMC4xOS4wNS4wMCNJcm9uIGludmVzdG1lbnQgY2FzdGluZ3MjMzEuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTkuMDYuMDAjQWx1bWludW0gaW52ZXN0bWVudCBjYXN0aW5ncyMzMS4xMC4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMC4xOS4wNy4wMCNNYWduZXNpdW0gaW52ZXN0bWVudCBjYXN0aW5ncyMzMS4xMC4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMC4xOS4wOC4wMCNaaW5jIGludmVzdG1lbnQgY2FzdGluZ3MjMzEuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTkuMDkuMDAjVGluIGludmVzdG1lbnQgY2FzdGluZ3MjMzEuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTkuMTAuMDAjTGVhZCBpbnZlc3RtZW50IGNhc3RpbmdzIzMxLjEwLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEwLjE5LjExLjAwI1ByZWNpb3VzIG1ldGFsIGludmVzdG1lbnQgY2FzdGluZ3MjMzEuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMTkuMTIuMDAjVGl0YW5pdW0gaW52ZXN0bWVudCBjYXN0aW5ncyMzMS4xMC4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMC4wMC4wMCNDZW50cmlmdWdhbCBjYXN0aW5ncyMzMS4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMC4wMS4wMCNOb24gZmVycm91cyBhbGxveSBjZW50cmlmdWdhbCBjYXN0aW5ncyMzMS4xMC4yMC4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMC4wMi4wMCNGZXJyb3VzIGFsbG95IGNlbnRyaWZ1Z2FsIGNhc3RpbmdzIzMxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIwLjAzLjAwI1N0ZWVsIGNlbnRyaWZ1Z2FsIGNhc3RpbmdzIzMxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIwLjA0LjAwI1N0YWlubGVzcyBzdGVlbCBjZW50cmlmdWdhbCBjYXN0aW5ncyMzMS4xMC4yMC4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMC4wNS4wMCNJcm9uIGNlbnRyaWZ1Z2FsIGNhc3RpbmdzIzMxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIwLjA2LjAwI0FsdW1pbnVtIGNlbnRyaWZ1Z2FsIGNhc3RpbmdzIzMxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIwLjA3LjAwI01hZ25lc2l1bSBjZW50cmlmdWdhbCBjYXN0aW5ncyMzMS4xMC4yMC4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMC4wOC4wMCNUaXRhbml1bSBjZW50cmlmdWdhbCBjYXN0aW5ncyMzMS4xMC4yMC4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMC4wOS4wMCNCZXJ5bGxpdW0gY2VudHJpZnVnYWwgY2FzdGluZ3MjMzEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjAuMTAuMDAjQ29wcGVyIGNlbnRyaWZ1Z2FsIGNhc3RpbmdzIzMxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIwLjExLjAwI0JyYXNzIGNlbnRyaWZ1Z2FsIGNhc3RpbmdzIzMxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIwLjEyLjAwI0Jyb256ZSBjZW50cmlmdWdhbCBjYXN0aW5ncyMzMS4xMC4yMC4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMC4xMy4wMCNaaW5jIGNlbnRyaWZ1Z2FsIGNhc3RpbmdzIzMxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIwLjE0LjAwI1RpbiBjZW50cmlmdWdhbCBjYXN0aW5ncyMzMS4xMC4yMC4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMC4xNS4wMCNMZWFkIGNlbnRyaWZ1Z2FsIGNhc3RpbmdzIzMxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIwLjE2LjAwI1ByZWNpb3VzIG1ldGFsIGNlbnRyaWZ1Z2FsIGNhc3RpbmdzIzMxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIxLjAwLjAwI0NlcmFtaWMgbW9sZCBjYXN0aW5ncyMzMS4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMS4wMS4wMCNOb24gZmVycm91cyBhbGxveSBjZXJhbWljIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjEuMDIuMDAjRmVycm91cyBhbGxveSBjZXJhbWljIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjEuMDMuMDAjU3RlZWwgY2VyYW1pYyBtb2xkIGNhc3RpbmdzIzMxLjEwLjIxLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIxLjA0LjAwI1N0YWlubGVzcyBzdGVlbCBjZXJhbWljIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjEuMDUuMDAjSXJvbiBjZXJhbWljIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjEuMDYuMDAjQWx1bWludW0gY2VyYW1pYyBtb2xkIGNhc3RpbmdzIzMxLjEwLjIxLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIxLjA3LjAwI01hZ25lc2l1bSBjZXJhbWljIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjEuMDguMDAjVGl0YW5pdW0gY2VyYW1pYyBtb2xkIGNhc3RpbmdzIzMxLjEwLjIxLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIxLjA5LjAwI0JlcnlsbGl1bSBjZXJhbWljIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjEuMTAuMDAjQ29wcGVyIGNlcmFtaWMgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMS4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMS4xMS4wMCNCcmFzcyBjZXJhbWljIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjEuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjEuMTIuMDAjQnJvbnplIGNlcmFtaWMgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMS4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMS4xMy4wMCNaaW5jIGNlcmFtaWMgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMS4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMS4xNC4wMCNUaW4gY2VyYW1pYyBtb2xkIGNhc3RpbmdzIzMxLjEwLjIxLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIxLjE1LjAwI0xlYWQgY2VyYW1pYyBtb2xkIGNhc3RpbmdzIzMxLjEwLjIxLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIxLjE2LjAwI1ByZWNpb3VzIG1ldGFsIGNlcmFtaWMgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMS4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMi4wMC4wMCNHcmFwaGl0ZSBtb2xkIGNhc3RpbmdzIzMxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIyLjAxLjAwI05vbiBmZXJyb3VzIGFsbG95IGdyYXBoaXRlIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjIuMDIuMDAjRmVycnJvdXMgYWxsb3kgZ3JhcGhpdGUgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMi4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMi4wMy4wMCNTdGVlbCBncmFwaGl0ZSBtb2xkIGNhc3RpbmdzIzMxLjEwLjIyLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIyLjA0LjAwI1N0YWlubGVzcyBzdGVlbCBncmFwaGl0ZSBtb2xkIGNhc3RpbmdzIzMxLjEwLjIyLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIyLjA1LjAwI0lyb24gZ3JhcGhpdGUgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMi4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMi4wNi4wMCNBbHVtaW51bSBncmFwaGl0ZSBtb2xkIGNhc3RpbmdzIzMxLjEwLjIyLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIyLjA3LjAwI01hZ25lc2l1bSBncmFwaGl0ZSBtb2xkIGNhc3RpbmdzIzMxLjEwLjIyLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIyLjA4LjAwI1RpdGFuaXVtIGdyYXBoaXRlIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjIuMDkuMDAjQmVyeWxsaXVtIGdyYXBoaXRlIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjIuMTAuMDAjQ29wcGVyIGdyYXBoaXRlIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjIuMTEuMDAjQnJhc3MgZ3JhcGhpdGUgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMi4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMi4xMi4wMCNCcm9uemUgZ3JhcGhpdGUgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMi4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMi4xMy4wMCNaaW5jIGdyYXBoaXRlIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjIuMTQuMDAjVGluIGdyYXBoaXRlIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjIuMTUuMDAjTGVhZCBncmFwaGl0ZSBtb2xkIGNhc3RpbmdzIzMxLjEwLjIyLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIyLjE2LjAwI1ByZWNpb3VzIG1ldGFsIGdyYXBoaXRlIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjIuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjMuMDAuMDAjUGxhc3RlciBtb2xkIGNhc3RpbmdzIzMxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIzLjAxLjAwI05vbiBmZXJyb3VzIGFsbG95IHBsYXN0ZXIgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMy4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMy4wMi4wMCNGZXJyb3VzIGFsbG95IHBsYXN0ZXIgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMy4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMy4wMy4wMCNTdGVlbCBwbGFzdGVyIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjMuMDQuMDAjU3RhaW5sZXNzIHN0ZWVsIHBsYXN0ZXIgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMy4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMy4wNS4wMCNJcm9uIHBsYXN0ZXIgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMy4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMy4wNi4wMCNBbHVtaW51bSBwbGFzdGVyIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjMuMDcuMDAjTWFnbmVzaXVtIHBsYXN0ZXIgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMy4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMy4wOC4wMCNUaXRhbml1bSBwbGFzdGVyIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjMuMDkuMDAjQmVyeWxsaXVtIHBsYXN0ZXIgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMy4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMy4xMC4wMCNDb3BwZXIgcGxhc3RlciBtb2xkIGNhc3RpbmdzIzMxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIzLjExLjAwI0JyYXNzIHBsYXN0ZXIgbW9sZCBjYXN0aW5ncyMzMS4xMC4yMy4wMC4wMAotdW5zcHNjNyMzMS4xMC4yMy4xMi4wMCNCcm9uemUgcGxhc3RlciBtb2xkIGNhc3RpbmdzIzMxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIzLjEzLjAwI1ppbmMgcGxhc3RlciBtb2xkIGNhc3RpbmdzIzMxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzMxLjEwLjIzLjE0LjAwI1RpbiBwbGFzdGVyIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjMuMTUuMDAjTGVhZCBwbGFzdGVyIG1vbGQgY2FzdGluZ3MjMzEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjMuMTYuMDAjUHJlY2lvdXMgbWV0YWwgcGxhc3RlciBtb2xkIGNhc3RpbmdzIzMxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzMxLjEwLjI0LjAwLjAwI1YgcHJvY2VzcyBjYXN0aW5ncyMzMS4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4xMC4yNC4wMS4wMCNOb24gZmVycm91cyBhbGxveSB2IHByb2Nlc3MgY2FzdGluZ3MjMzEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjQuMDIuMDAjRmVycm91cyBhbGxveSB2IHByb2Nlc3MgY2FzdGluZ3MjMzEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjQuMDMuMDAjU3RlZWwgdiBwcm9jZXNzIGNhc3RpbmdzIzMxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzMxLjEwLjI0LjA0LjAwI1N0YWlubGVzcyBzdGVlbCB2IHByb2Nlc3MgY2FzdGluZ3MjMzEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjQuMDUuMDAjSXJvbiB2IHByb2Nlc3MgY2FzdGluZ3MjMzEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjQuMDYuMDAjQWx1bWludW0gdiBwcm9jZXNzIGNhc3RpbmdzIzMxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzMxLjEwLjI0LjA3LjAwI01hZ25lc2l1bSB2IHByb2Nlc3MgY2FzdGluZ3MjMzEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjQuMDguMDAjVGl0YW5pdW0gdiBwcm9jZXNzIGNhc3RpbmdzIzMxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzMxLjEwLjI0LjA5LjAwI0JlcnlsbGl1bSB2IHByb2Nlc3MgY2FzdGluZ3MjMzEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjQuMTAuMDAjQ29wcGVyIHYgcHJvY2VzcyBjYXN0aW5ncyMzMS4xMC4yNC4wMC4wMAotdW5zcHNjNyMzMS4xMC4yNC4xMS4wMCNCcmFzcyB2IHByb2Nlc3MgY2FzdGluZ3MjMzEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjMzEuMTAuMjQuMTIuMDAjQnJvbnplIHYgcHJvY2VzcyBjYXN0aW5ncyMzMS4xMC4yNC4wMC4wMAotdW5zcHNjNyMzMS4xMC4yNC4xMy4wMCNaaW5jIHYgcHJvY2VzcyBjYXN0aW5ncyMzMS4xMC4yNC4wMC4wMAotdW5zcHNjNyMzMS4xMC4yNC4xNC4wMCNUaW4gdiBwcm9jZXNzIGNhc3RpbmdzIzMxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzMxLjEwLjI0LjE1LjAwI0xlYWQgdiBwcm9jZXNzIGNhc3RpbmdzIzMxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzMxLjEwLjI0LjE2LjAwI1ByZWNpb3VzIG1ldGFsIHYgcHJvY2VzcyBjYXN0aW5ncyMzMS4xMC4yNC4wMC4wMAotdW5zcHNjNyMzMS4xMS4wMC4wMC4wMCNFeHRydXNpb25zIzMxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjExLjE1LjAwLjAwI1Byb2ZpbGUgZXh0cnVzaW9ucyMzMS4xMS4wMC4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNS4wMS4wMCNBbHVtaW51bSBwcm9maWxlIGV4dHJ1c2lvbnMjMzEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTUuMDIuMDAjQmVyeWxsaXVtIHByb2ZpbGUgZXh0cnVzaW9ucyMzMS4xMS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNS4wMy4wMCNCcmFzcyBwcm9maWxlIGV4dHJ1c2lvbnMjMzEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTUuMDQuMDAjQnJvbnplIHByb2ZpbGUgZXh0cnVzaW9ucyMzMS4xMS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNS4wNS4wMCNDb3BwZXIgcHJvZmlsZSBleHRydXNpb25zIzMxLjExLjE1LjAwLjAwCi11bnNwc2M3IzMxLjExLjE1LjA2LjAwI0ZlcnJvdXMgYWxsb3kgcHJvZmlsZSBleHRydXNpb25zIzMxLjExLjE1LjAwLjAwCi11bnNwc2M3IzMxLjExLjE1LjA3LjAwI0xlYWQgcHJvZmlsZSBleHRydXNpb25zIzMxLjExLjE1LjAwLjAwCi11bnNwc2M3IzMxLjExLjE1LjA4LjAwI01hZ25lc2l1bSBwcm9maWxlIGV4dHJ1c2lvbnMjMzEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTUuMDkuMDAjTm9uIGZlcnJvdXMgYWxsb3kgcHJvZmlsZSBleHRydXNpb25zIzMxLjExLjE1LjAwLjAwCi11bnNwc2M3IzMxLjExLjE1LjEwLjAwI1BsYXN0aWMgcHJvZmlsZSBleHRydXNpb25zIzMxLjExLjE1LjAwLjAwCi11bnNwc2M3IzMxLjExLjE1LjExLjAwI1ByZWNpb3VzIG1ldGFsIHByb2ZpbGUgZXh0cnVzaW9ucyMzMS4xMS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNS4xMi4wMCNSdWJiZXIgcHJvZmlsZSBleHRydXNpb25zIzMxLjExLjE1LjAwLjAwCi11bnNwc2M3IzMxLjExLjE1LjEzLjAwI1N0YWlubGVzcyBzdGVlbCBwcm9maWxlIGV4dHJ1c2lvbnMjMzEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTUuMTQuMDAjU3RlZWwgcHJvZmlsZSBleHRydXNpb25zIzMxLjExLjE1LjAwLjAwCi11bnNwc2M3IzMxLjExLjE1LjE1LjAwI1RpbiBwcm9maWxlIGV4dHJ1c2lvbnMjMzEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTUuMTYuMDAjVGl0YW5pdW0gcHJvZmlsZSBleHRydXNpb25zIzMxLjExLjE1LjAwLjAwCi11bnNwc2M3IzMxLjExLjE1LjE3LjAwI1ppbmMgcHJvZmlsZSBleHRydXNpb25zIzMxLjExLjE1LjAwLjAwCi11bnNwc2M3IzMxLjExLjE2LjAwLjAwI0ltcGFjdCBleHRydXNpb25zIzMxLjExLjAwLjAwLjAwCi11bnNwc2M3IzMxLjExLjE2LjAxLjAwI0FsdW1pbnVtIGltcGFjdCBleHRydXNpb25zIzMxLjExLjE2LjAwLjAwCi11bnNwc2M3IzMxLjExLjE2LjAyLjAwI0JlcnlsbGl1bSBpbXBhY3QgZXh0cnVzaW9ucyMzMS4xMS4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNi4wMy4wMCNCcmFzcyBpbXBhY3QgZXh0cnVzaW9ucyMzMS4xMS4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNi4wNC4wMCNCcm9uemUgaW1wYWN0IGV4dHJ1c2lvbnMjMzEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTYuMDUuMDAjQ29wcGVyIGltcGFjdCBleHRydXNpb25zIzMxLjExLjE2LjAwLjAwCi11bnNwc2M3IzMxLjExLjE2LjA2LjAwI0ZlcnJvdXMgYWxsb3kgaW1wYWN0IGV4dHJ1c2lvbnMjMzEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTYuMDcuMDAjTGVhZCBpbXBhY3QgZXh0cnVzaW9ucyMzMS4xMS4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNi4wOC4wMCNNYWduZXNpdW0gaW1wYWN0IGV4dHJ1c2lvbnMjMzEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTYuMDkuMDAjTm9uIGZlcnJvdXMgYWxsb3kgaW1wYWN0IGV4dHJ1c2lvbnMjMzEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTYuMTAuMDAjUGxhc3RpYyBpbXBhY3QgZXh0cnVzaW9ucyMzMS4xMS4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNi4xMS4wMCNQcmVjaW91cyBtZXRhbCBpbXBhY3QgZXh0cnVzaW9ucyMzMS4xMS4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNi4xMi4wMCNSdWJiZXIgaW1wYWN0IGV4dHJ1c2lvbnMjMzEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTYuMTMuMDAjU3RhaW5sZXNzIHN0ZWVsIGltcGFjdCBleHRydXNpb25zIzMxLjExLjE2LjAwLjAwCi11bnNwc2M3IzMxLjExLjE2LjE0LjAwI1N0ZWVsIGltcGFjdCBleHRydXNpb25zIzMxLjExLjE2LjAwLjAwCi11bnNwc2M3IzMxLjExLjE2LjE1LjAwI1RpbiBpbXBhY3QgZXh0cnVzaW9ucyMzMS4xMS4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNi4xNi4wMCNUaXRhbml1bSBpbXBhY3QgZXh0cnVzaW9ucyMzMS4xMS4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNi4xNy4wMCNaaW5jIGltcGFjdCBleHRydXNpb25zIzMxLjExLjE2LjAwLjAwCi11bnNwc2M3IzMxLjExLjE3LjAwLjAwI0NvbGQgZXh0cnVzaW9ucyMzMS4xMS4wMC4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNy4wMS4wMCNBbHVtaW51bSBjb2xkIGV4dHJ1c2lvbnMjMzEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTcuMDIuMDAjQmVyeWxsaXVtIGNvbGQgZXh0cnVzaW9ucyMzMS4xMS4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNy4wMy4wMCNCcmFzcyBjb2xkIGV4dHJ1c2lvbnMjMzEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTcuMDQuMDAjQnJvbnplIGNvbGQgZXh0cnVzaW9ucyMzMS4xMS4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNy4wNS4wMCNDb3BwZXIgY29sZCBleHRydXNpb25zIzMxLjExLjE3LjAwLjAwCi11bnNwc2M3IzMxLjExLjE3LjA2LjAwI0ZlcnJvdXMgYWxsb3kgY29sZCBleHRydXNpb25zIzMxLjExLjE3LjAwLjAwCi11bnNwc2M3IzMxLjExLjE3LjA3LjAwI0xlYWQgY29sZCBleHRydXNpb25zIzMxLjExLjE3LjAwLjAwCi11bnNwc2M3IzMxLjExLjE3LjA4LjAwI01hZ25lc2l1bSBjb2xkIGV4dHJ1c2lvbnMjMzEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTcuMDkuMDAjTm9uIGZlcnJvdXMgYWxsb3kgY29sZCBleHRydXNpb25zIzMxLjExLjE3LjAwLjAwCi11bnNwc2M3IzMxLjExLjE3LjEwLjAwI1BsYXN0aWMgY29sZCBleHRydXNpb25zIzMxLjExLjE3LjAwLjAwCi11bnNwc2M3IzMxLjExLjE3LjExLjAwI1ByZWNpb3VzIG1ldGFsIGNvbGQgZXh0cnVzaW9ucyMzMS4xMS4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMS4xNy4xMi4wMCNSdWJiZXIgY29sZCBleHRydXNpb25zIzMxLjExLjE3LjAwLjAwCi11bnNwc2M3IzMxLjExLjE3LjEzLjAwI1N0YWlubGVzcyBzdGVlbCBjb2xkIGV4dHJ1c2lvbnMjMzEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTcuMTQuMDAjU3RlZWwgY29sZCBleHRydXNpb25zIzMxLjExLjE3LjAwLjAwCi11bnNwc2M3IzMxLjExLjE3LjE1LjAwI1RpbiBjb2xkIGV4dHJ1c2lvbnMjMzEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTEuMTcuMTYuMDAjVGl0YW5pdW0gY29sZCBleHRydXNpb25zIzMxLjExLjE3LjAwLjAwCi11bnNwc2M3IzMxLjExLjE3LjE3LjAwI1ppbmMgY29sZCBleHRydXNpb25zIzMxLjExLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEyLjAwLjAwLjAwI01hY2hpbmVkIGNhc3RpbmdzIzMxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEwLjAwLjAwI01hY2hpbmVkIHYgcHJvY2VzcyBjYXN0aW5ncyMzMS4xMi4wMC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMC4wMS4wMCNOb24gZmVycm91cyBhbGxveSB2IHByb2Nlc3MgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTAuMDIuMDAjRmVycm91cyBhbGxveSB2IHByb2Nlc3MgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTAuMDMuMDAjU3RlZWwgdiBwcm9jZXNzIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEwLjA0LjAwI1N0YWlubGVzcyBzdGVlbCB2IHByb2Nlc3MgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTAuMDUuMDAjSXJvbiB2IHByb2Nlc3MgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTAuMDYuMDAjQWx1bWludW0gdiBwcm9jZXNzIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEwLjA3LjAwI01hZ25lc2l1bSB2IHByb2Nlc3MgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTAuMDguMDAjVGl0YW5pdW0gdiBwcm9jZXNzIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEwLjA5LjAwI0JlcnlsbGl1bSB2IHByb2Nlc3MgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTAuMTAuMDAjQ29wcGVyIHYgcHJvY2VzcyBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMC4xMS4wMCNCcmFzcyB2IHByb2Nlc3MgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTAuMTIuMDAjQnJvbnplIHYgcHJvY2VzcyBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMC4xMy4wMCNaaW5jIHYgcHJvY2VzcyBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMC4xNC4wMCNUaW4gdiBwcm9jZXNzIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEwLjE1LjAwI0xlYWQgdiBwcm9jZXNzIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEwLjE2LjAwI1ByZWNpb3VzIG1ldGFsIHYgcHJvY2VzcyBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMC4xNy4wMCNDb21wb3NpdGUgdiBwcm9jZXNzIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEwLjE4LjAwI05pY2tlbCBhbGxveSB2IHByb2Nlc3MgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTAuMTkuMDAjTm9uIG1ldGFsbGljIHYgcHJvY2VzcyBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMS4wMC4wMCNNYWNoaW5lZCBkaWUgY2FzdGluZ3MjMzEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTEuMDEuMDAjQWx1bWludW0gZGllIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjExLjAwLjAwCi11bnNwc2M3IzMxLjEyLjExLjAyLjAwI0ZlcnJvdXMgYWxsb3kgZGllIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjExLjAwLjAwCi11bnNwc2M3IzMxLjEyLjExLjAzLjAwI0lyb24gZGllIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjExLjAwLjAwCi11bnNwc2M3IzMxLjEyLjExLjA0LjAwI05vbiBmZXJyb3VzIGFsbG95IGRpZSBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMS4wNS4wMCNTdGFpbmxlc3Mgc3RlZWwgZGllIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjExLjAwLjAwCi11bnNwc2M3IzMxLjEyLjExLjA2LjAwI1N0ZWVsIGRpZSBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMS4wNy4wMCNNYWduZXNpdW0gZGllIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjExLjAwLjAwCi11bnNwc2M3IzMxLjEyLjExLjA4LjAwI1ppbmMgZGllIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjExLjAwLjAwCi11bnNwc2M3IzMxLjEyLjExLjA5LjAwI1RpbiBkaWUgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTEuMTAuMDAjVGl0YW5pdW0gZGllIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjExLjAwLjAwCi11bnNwc2M3IzMxLjEyLjExLjExLjAwI0JlcnlsbGl1bSBkaWUgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTEuMTIuMDAjUHJlY2lvdXMgbWV0YWwgZGllIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjExLjAwLjAwCi11bnNwc2M3IzMxLjEyLjExLjEzLjAwI0NvcHBlciBkaWUgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTEuMTQuMDAjTGVhZCBkaWUgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTEuMTUuMDAjQnJhc3MgZGllIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjExLjAwLjAwCi11bnNwc2M3IzMxLjEyLjExLjE2LjAwI0Jyb256ZSBkaWUgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTEuMTcuMDAjQ29tcG9zaXRlIGRpZSBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMS4xOC4wMCNOaWNrZWwgQWxsb3kgZGllIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjExLjAwLjAwCi11bnNwc2M3IzMxLjEyLjExLjE5LjAwI05vbiBtZXRhbGxpYyBkaWUgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTIuMDAuMDAjTWFjaGluZWQgc2FuZCBjYXN0aW5ncyMzMS4xMi4wMC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMi4wMS4wMCNOb24gZmVycm91cyBhbGxveSBzYW5kIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEyLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEyLjAyLjAwI0ZlcnJvdXMgYWxsb3kgc2FuZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMi4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMi4wMy4wMCNTdGVlbCBzYW5kIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEyLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEyLjA0LjAwI1N0YWlubGVzcyBzdGVlbCBzYW5kIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEyLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEyLjA1LjAwI0lyb24gc2FuZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMi4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMi4wNi4wMCNBbHVtaW51bSBzYW5kIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEyLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEyLjA3LjAwI01hZ25lc2l1bSBzYW5kIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEyLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEyLjA4LjAwI1RpdGFuaXVtIHNhbmQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTIuMDkuMDAjQmVyeWxsaXVtIHNhbmQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTIuMTAuMDAjQ29wcGVyIHNhbmQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTIuMTEuMDAjQnJhc3Mgc2FuZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMi4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMi4xMi4wMCNCcm9uemUgc2FuZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMi4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMi4xMy4wMCNaaW5jIHNhbmQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTIuMTQuMDAjVGluIHNhbmQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTIuMTUuMDAjTGVhZCBzYW5kIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEyLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEyLjE2LjAwI1ByZWNpb3VzIG1ldGFsIHNhbmQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTIuMTcuMDAjQ29tcG9zaXRlIHNhbmQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTIuMTguMDAjTmlja2VsIEFsbG95IHNhbmQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTIuMTkuMDAjTm9uIG1ldGFsbGljIHNhbmQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTMuMDAuMDAjTWFjaGluZWQgcGVybWFuZW50IG1vbGQgY2FzdGluZ3MjMzEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTMuMDEuMDAjTm9uIGZlcnJvdXMgYWxsb3kgcGVybWFuZW50IG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTMuMDIuMDAjRmVycm91cyBhbGxveSBwZXJtYW5lbnQgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMy4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMy4wMy4wMCNTdGVlbCBwZXJtYW5lbnQgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMy4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMy4wNC4wMCNTdGFpbmxlc3Mgc3RlZWwgcGVybWFuZW50IG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTMuMDUuMDAjSXJvbiBwZXJtYW5lbnQgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMy4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMy4wNi4wMCNBbHVtaW51bSBwZXJtYW5lbnQgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMy4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMy4wNy4wMCNNYWduZXNpdW0gcGVybWFuZW50IG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTMuMDguMDAjVGl0YW5pdW0gcGVybWFuZW50IG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTMuMDkuMDAjQmVyeWxsaXVtIHBlcm1hbmVudCBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEzLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEzLjEwLjAwI0NvcHBlciBwZXJtYW5lbnQgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMy4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMy4xMS4wMCNCcmFzcyBwZXJtYW5lbnQgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMy4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMy4xMi4wMCNCcm9uemUgcGVybWFuZW50IG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTMuMTMuMDAjWmluYyBwZXJtYW5lbnQgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMy4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMy4xNC4wMCNUaW4gcGVybWFuZW50IG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTMuMTUuMDAjTGVhZCBwZXJtYW5lbnQgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMy4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMy4xNi4wMCNQcmVjaW91cyBtZXRhbCBwZXJtYW5lbnQgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMy4wMC4wMAotdW5zcHNjNyMzMS4xMi4xMy4xNy4wMCNDb21wb3NpdGUgcGVybWFuZW50IG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTMuMTguMDAjTmlja2VsIGFsbG95IHBlcm1hbmVudCBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjEzLjAwLjAwCi11bnNwc2M3IzMxLjEyLjEzLjE5LjAwI05vbiBtZXRhbGxpYyBwZXJtYW5lbnQgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xMy4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNC4wMC4wMCNNYWNoaW5lZCBwbGFzdGVyIG1vbGQgY2FzdGluZ3MjMzEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTQuMDEuMDAjTm9uIGZlcnJvdXMgYWxsb3kgcGxhc3RlciBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE0LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE0LjAyLjAwI0ZlcnJvdXMgYWxsb3kgcGxhc3RlciBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE0LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE0LjAzLjAwI1N0ZWVsIHBsYXN0ZXIgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNC4wNC4wMCNTdGFpbmxlc3Mgc3RlZWwgcGxhc3RlciBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE0LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE0LjA1LjAwI0lyb24gcGxhc3RlciBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE0LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE0LjA2LjAwI0FsdW1pbnVtIHBsYXN0ZXIgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNC4wNy4wMCNNYWduZXNpdW0gcGxhc3RlciBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE0LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE0LjA4LjAwI1RpdGFuaXVtIHBsYXN0ZXIgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNC4wOS4wMCNCZXJ5bGxpdW0gcGxhc3RlciBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE0LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE0LjEwLjAwI0NvcHBlciBwbGFzdGVyIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTQuMTEuMDAjQnJhc3MgcGxhc3RlciBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE0LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE0LjEyLjAwI0Jyb256ZSBwbGFzdGVyIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTQuMTMuMDAjWmluYyBwbGFzdGVyIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTQuMTQuMDAjVGluIHBsYXN0ZXIgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNC4xNS4wMCNMZWFkIHBsYXN0ZXIgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNC4xNi4wMCNQcmVjaW91cyBtZXRhbCBwbGFzdGVyIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTQuMTcuMDAjQ29tcG9zaXRlIHBsYXN0ZXIgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNC4xOC4wMCNOaWNrZWwgYWxsb3kgcGxhc3RlciBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE0LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE0LjE5LjAwI05vbiBtZXRhbGxpYyBwbGFzdGVyIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTUuMDAuMDAjTWFjaGluZWQgc2hlbGwgbW9sZCBjYXN0aW5ncyMzMS4xMi4wMC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNS4wMS4wMCNOb24gZmVycm91cyBhbGxveSBzaGVsbCBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE1LjAyLjAwI0ZlcnJvdXMgYWxsb3kgc2hlbGwgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNS4wMy4wMCNTdGVlbCBzaGVsbCBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE1LjA0LjAwI1N0YWlubGVzcyBzdGVlbCBzaGVsbCBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE1LjA1LjAwI0lyb24gc2hlbGwgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNS4wNi4wMCNBbHVtaW51bSBzaGVsbCBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE1LjA3LjAwI01hZ25lc2l1bSBzaGVsbCBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE1LjA4LjAwI1RpdGFuaXVtIHNoZWxsIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTUuMDkuMDAjQmVyeWxsaXVtIHNoZWxsIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTUuMTAuMDAjQ29wcGVyIHNoZWxsIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTUuMTEuMDAjQnJhc3Mgc2hlbGwgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNS4xMi4wMCNCcm9uemUgc2hlbGwgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNS4xMy4wMCNaaW5jIHNoZWxsIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTUuMTQuMDAjVGluIHNoZWxsIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTUuMTUuMDAjTGVhZCBzaGVsbCBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE1LjE2LjAwI1ByZWNpb3VzIHNoZWxsIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTUuMTcuMDAjQ29tcG9zaXRlIHNoZWxsIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTUuMTguMDAjTmlja2VsIGFsbG95IHNoZWxsIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTUuMTkuMDAjTm9uIG1ldGFsbGljIHNoZWxsIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTYuMDAuMDAjTWFjaGluZWQgaW52ZXN0bWVudCBjYXN0aW5ncyMzMS4xMi4wMC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNi4wMS4wMCNOb24gZmVycm91cyBhbGxveSBpbnZlc3RtZW50IG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE2LjAyLjAwI0ZlcnJvdXMgYWxsb3kgaW52ZXN0bWVudCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNi4wMy4wMCNTdGVlbCBpbnZlc3RtZW50IG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE2LjA0LjAwI1N0YWlubGVzcyBzdGVlbCBpbnZlc3RtZW50IG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE2LjA1LjAwI0lyb24gaW52ZXN0bWVudCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNi4wNi4wMCNBbHVtaW51bSBpbnZlc3RtZW50IG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE2LjA3LjAwI01hZ25lc2l1bSBpbnZlc3RtZW50IG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE2LjA4LjAwI1ppbmMgaW52ZXN0bWVudCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNi4wOS4wMCNUaW4gaW52ZXN0bWVudCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNi4xMC4wMCNMZWFkIGludmVzdG1lbnQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTYuMTEuMDAjUHJlY2lvdXMgbWV0YWwgaW52ZXN0bWVudCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNi4xMi4wMCNUaXRhbml1bSBpbnZlc3RtZW50IG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE2LjEzLjAwI0NvbXBvc2l0ZSBpbnZlc3RtZW50IG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE2LjE0LjAwI05pY2tlbCBhbGxveSBpbnZlc3RtZW50IG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE2LjE1LjAwI05vbiBtZXRhbGxpYyBpbnZlc3RtZW50IG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE3LjAwLjAwI01hY2hpbmVkIGNlbnRyaWZ1Z2FsIGNhc3RpbmdzIzMxLjEyLjAwLjAwLjAwCi11bnNwc2M3IzMxLjEyLjE3LjAxLjAwI05vbiBmZXJyb3VzIGFsbG95IGNlbnRyaWZ1Z2FsIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE3LjAyLjAwI0ZlcnJvdXMgYWxsb3kgY2VudHJpZnVnYWwgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTcuMDMuMDAjU3RlZWwgY2VudHJpZnVnYWwgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTcuMDQuMDAjU3RhaW5sZXNzIHN0ZWVsIGNlbnRyaWZ1Z2FsIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE3LjA1LjAwI0lyb24gY2VudHJpZnVnYWwgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTcuMDYuMDAjQWx1bWludW0gY2VudHJpZnVnYWwgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTcuMDcuMDAjTWFnbmVzaXVtIGNlbnRyaWZ1Z2FsIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE3LjA4LjAwI1RpdGFuaXVtIGNlbnRyaWZ1Z2FsIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE3LjA5LjAwI0JlcnlsbGl1bSBjZW50cmlmdWdhbCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNy4xMC4wMCNDb3BwZXIgY2VudHJpZnVnYWwgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTcuMTEuMDAjQnJhc3MgY2VudHJpZnVnYWwgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTcuMTIuMDAjQnJvbnplIGNlbnRyaWZ1Z2FsIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE3LjEzLjAwI1ppbmMgY2VudHJpZnVnYWwgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTcuMTQuMDAjVGluIGNlbnRyaWZ1Z2FsIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE3LjE1LjAwI0xlYWQgY2VudHJpZnVnYWwgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTcuMTYuMDAjUHJlY2lvdXMgbWV0YWwgY2VudHJpZnVnYWwgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTcuMTcuMDAjQ29tcG9zaXRlIGNlbnRyaWZ1Z2FsIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE3LjE4LjAwI05pY2tlbCBhbGxveSBjZW50cmlmdWdhbCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMi4xNy4xOS4wMCNOb24gbWV0YWxsaWMgY2VudHJpZnVnYWwgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTguMDAuMDAjTWFjaGluZWQgY2VyYW1pYyBtb2xkIGNhc3RpbmdzIzMxLjEyLjAwLjAwLjAwCi11bnNwc2M3IzMxLjEyLjE4LjAxLjAwI05vbiBmZXJyb3VzIGFsbG95IGNlcmFtaWMgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOC4wMi4wMCNGZXJyb3VzIGFsbG95IGNlcmFtaWMgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOC4wMy4wMCNTdGVlbCBjZXJhbWljIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTguMDQuMDAjU3RhaW5sZXNzIHN0ZWVsIGNlcmFtaWMgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOC4wNS4wMCNJcm9uIGNlcmFtaWMgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOC4wNi4wMCNBbHVtaW51bSBjZXJhbWljIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTguMDcuMDAjTWFnbmVzaXVtIGNlcmFtaWMgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOC4wOC4wMCNUaXRhbml1bSBjZXJhbWljIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTguMDkuMDAjQmVyeWxsaXVtIGNlcmFtaWMgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOC4xMC4wMCNDb3BwZXIgY2VyYW1pYyBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE4LjExLjAwI0JyYXNzIGNlcmFtaWMgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOC4xMi4wMCNCcm9uemUgY2VyYW1pYyBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE4LjEzLjAwI1ppbmMgY2VyYW1pYyBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE4LjE0LjAwI1RpbiBjZXJhbWljIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTguMTUuMDAjTGVhZCBjZXJhbWljIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTguMTYuMDAjUHJlY2lvdXMgbWV0YWwgY2VyYW1pYyBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE4LjE3LjAwI0NvbXBvc2l0ZSBjZXJhbWljIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTguMTguMDAjTmlja2VsIGFsbG95IGNlcmFtaWMgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOC4xOS4wMCNOb24gbWV0YWxsaWMgY2VyYW1pYyBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE5LjAwLjAwI01hY2hpbmVkIGdyYXBoaXRlIG1vbGQgY2FzdGluZ3MjMzEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTkuMDEuMDAjTm9uIGZlcnJvdXMgYWxsb3kgZ3JhcGhpdGUgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOS4wMi4wMCNGZXJycm91cyBhbGxveSBncmFwaGl0ZSBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE5LjAzLjAwI1N0ZWVsIGdyYXBoaXRlIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTkuMDQuMDAjU3RhaW5sZXNzIHN0ZWVsIGdyYXBoaXRlIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTkuMDUuMDAjSXJvbiBncmFwaGl0ZSBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE5LjA2LjAwI0FsdW1pbnVtIGdyYXBoaXRlIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTkuMDcuMDAjTWFnbmVzaXVtIGdyYXBoaXRlIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTkuMDguMDAjVGl0YW5pdW0gZ3JhcGhpdGUgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOS4wOS4wMCNCZXJ5bGxpdW0gZ3JhcGhpdGUgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOS4xMC4wMCNDb3BwZXIgZ3JhcGhpdGUgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOS4xMS4wMCNCcmFzcyBncmFwaGl0ZSBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE5LjEyLjAwI0Jyb256ZSBncmFwaGl0ZSBtb2xkIG1hY2hpbmVkIGNhc3RpbmdzIzMxLjEyLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEyLjE5LjEzLjAwI1ppbmMgZ3JhcGhpdGUgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOS4xNC4wMCNUaW4gZ3JhcGhpdGUgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOS4xNS4wMCNMZWFkIGdyYXBoaXRlIG1vbGQgbWFjaGluZWQgY2FzdGluZ3MjMzEuMTIuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTIuMTkuMTYuMDAjUHJlY2lvdXMgbWV0YWwgZ3JhcGhpdGUgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOS4xNy4wMCNDb21wb3NpdGUgZ3JhcGhpdGUgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOS4xOC4wMCNOaWNrZWwgYWxsb3kgbWV0YWwgZ3JhcGhpdGUgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMi4xOS4xOS4wMCNOb24gbWV0YWxsaWMgZ3JhcGhpdGUgbW9sZCBtYWNoaW5lZCBjYXN0aW5ncyMzMS4xMi4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMy4wMC4wMC4wMCNGb3JnaW5ncyMzMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNS4wMC4wMCNPcGVuIGRpZSBmb3JnaW5ncyMzMS4xMy4wMC4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNS4wMS4wMCNOb24gZmVycm91cyBhbGxveSBvcGVuIGRpZSBmb3JnaW5ncyMzMS4xMy4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNS4wMi4wMCNGZXJyb3VzIGFsbG95IG9wZW4gZGllIGZvcmdpbmdzIzMxLjEzLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE1LjAzLjAwI1N0ZWVsIG9wZW4gZGllIGZvcmdpbmdzIzMxLjEzLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE1LjA0LjAwI1N0YWlubGVzcyBzdGVlbCBvcGVuIGRpZSBmb3JnaW5ncyMzMS4xMy4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNS4wNS4wMCNJcm9uIG9wZW4gZGllIGZvcmdpbmdzIzMxLjEzLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE1LjA2LjAwI0FsdW1pbnVtIG9wZW4gZGllIGZvcmdpbmdzIzMxLjEzLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE1LjA3LjAwI01hZ25lc2l1bSBvcGVuIGRpZSBmb3JnaW5ncyMzMS4xMy4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNS4wOC4wMCNUaXRhbml1bSBvcGVuIGRpZSBmb3JnaW5ncyMzMS4xMy4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNS4wOS4wMCNCZXJ5bGxpdW0gb3BlbiBkaWUgZm9yZ2luZ3MjMzEuMTMuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTUuMTAuMDAjQ29wcGVyIG9wZW4gZGllIGZvcmdpbmdzIzMxLjEzLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE1LjExLjAwI0JyYXNzIG9wZW4gZGllIGZvcmdpbmdzIzMxLjEzLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE1LjEyLjAwI0Jyb256ZSBvcGVuIGRpZSBmb3JnaW5ncyMzMS4xMy4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNS4xMy4wMCNaaW5jIG9wZW4gZGllIGZvcmdpbmdzIzMxLjEzLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE1LjE0LjAwI1RpbiBvcGVuIGRpZSBmb3JnaW5ncyMzMS4xMy4xNS4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNS4xNS4wMCNMZWFkIG9wZW4gZGllIGZvcmdpbmdzIzMxLjEzLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE1LjE2LjAwI1ByZWNpb3VzIG1ldGFsIG9wZW4gZGllIGZvcmdpbmdzIzMxLjEzLjE1LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE2LjAwLjAwI0Nsb3NlZCBkaWUgZm9yZ2luZ3MjMzEuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTYuMDEuMDAjTm9uIGZlcnJvdXMgYWxsb3kgY2xvc2VkIGRpZSBmb3JnaW5ncyMzMS4xMy4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNi4wMi4wMCNGZXJyb3VzIGFsbG95IGNsb3NlZCBkaWUgZm9yZ2luZ3MjMzEuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTYuMDMuMDAjU3RlZWwgY2xvc2VkIGRpZSBmb3JnaW5ncyMzMS4xMy4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNi4wNC4wMCNTdGFpbmxlc3Mgc3RlZWwgY2xvc2VkIGRpZSBmb3JnaW5ncyMzMS4xMy4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNi4wNS4wMCNJcm9uIGNsb3NlZCBkaWUgZm9yZ2luZ3MjMzEuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTYuMDYuMDAjQWx1bWludW0gY2xvc2VkIGRpZSBmb3JnaW5ncyMzMS4xMy4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNi4wNy4wMCNNYWduZXNpdW0gY2xvc2VkIGRpZSBmb3JnaW5ncyMzMS4xMy4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNi4wOC4wMCNUaXRhbml1bSBjbG9zZWQgZGllIGZvcmdpbmdzIzMxLjEzLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE2LjA5LjAwI0JlcnlsbGl1bSBjbG9zZWQgZGllIGZvcmdpbmdzIzMxLjEzLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE2LjEwLjAwI0NvcHBlciBjbG9zZWQgZGllIGZvcmdpbmdzIzMxLjEzLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE2LjExLjAwI0JyYXNzIGNsb3NlZCBkaWUgZm9yZ2luZ3MjMzEuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTYuMTIuMDAjQnJvbnplIGNsb3NlZCBkaWUgZm9yZ2luZ3MjMzEuMTMuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTYuMTMuMDAjWmluYyBjbG9zZWQgZGllIGZvcmdpbmdzIzMxLjEzLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE2LjE0LjAwI1RpbiBjbG9zZWQgZGllIGZvcmdpbmdzIzMxLjEzLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE2LjE1LjAwI0xlYWQgY2xvc2VkIGRpZSBmb3JnaW5ncyMzMS4xMy4xNi4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNi4xNi4wMCNQcmVjaW91cyBtZXRhbCBjbG9zZWQgZGllIGZvcmdpbmdzIzMxLjEzLjE2LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE3LjAwLjAwI0ltcHJlc3Npb24gZGllIGZvcmdpbmdzIzMxLjEzLjAwLjAwLjAwCi11bnNwc2M3IzMxLjEzLjE3LjAxLjAwI05vbiBmZXJyb3VzIGFsbG95IGltcHJlc3Npb24gZGllIGZvcmdpbmdzIzMxLjEzLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE3LjAyLjAwI0ZlcnJvdXMgYWxsb3kgaW1wcmVzc2lvbiBkaWUgZm9yZ2luZ3MjMzEuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTcuMDMuMDAjU3RlZWwgaW1wcmVzc2lvbiBkaWUgZm9yZ2luZ3MjMzEuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTcuMDQuMDAjU3RhaW5sZXNzIHN0ZWVsIGltcHJlc3Npb24gZGllIGZvcmdpbmdzIzMxLjEzLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE3LjA1LjAwI0lyb24gaW1wcmVzc2lvbiBkaWUgZm9yZ2luZ3MjMzEuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTcuMDYuMDAjQWx1bWludW0gaW1wcmVzc2lvbiBkaWUgZm9yZ2luZ3MjMzEuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTcuMDcuMDAjTWFnbmVzaXVtIGltcHJlc3Npb24gZGllIGZvcmdpbmdzIzMxLjEzLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE3LjA4LjAwI1RpdGFuaXVtIGltcHJlc3Npb24gZGllIGZvcmdpbmdzIzMxLjEzLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE3LjA5LjAwI0JlcnlsbGl1bSBpbXByZXNzaW9uIGRpZSBmb3JnaW5ncyMzMS4xMy4xNy4wMC4wMAotdW5zcHNjNyMzMS4xMy4xNy4xMC4wMCNDb3BwZXIgaW1wcmVzc2lvbiBkaWUgZm9yZ2luZ3MjMzEuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTcuMTEuMDAjQnJhc3MgaW1wcmVzc2lvbiBkaWUgZm9yZ2luZ3MjMzEuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTcuMTIuMDAjQnJvbnplIGltcHJlc3Npb24gZGllIGZvcmdpbmdzIzMxLjEzLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE3LjEzLjAwI1ppbmMgaW1wcmVzc2lvbiBkaWUgZm9yZ2luZ3MjMzEuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTcuMTQuMDAjVGluIGltcHJlc3Npb24gZGllIGZvcmdpbmdzIzMxLjEzLjE3LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE3LjE1LjAwI0xlYWQgaW1wcmVzc2lvbiBkaWUgZm9yZ2luZ3MjMzEuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTcuMTYuMDAjUHJlY2lvdXMgbWV0YWwgaW1wcmVzc2lvbiBkaWUgZm9yZ2luZ3MjMzEuMTMuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTguMDAuMDAjRHJvcCBmb3JnaW5ncyMzMS4xMy4wMC4wMC4wMAotdW5zcHNjNyMzMS4xMy4xOC4wMS4wMCNOb24gZmVycm91cyBhbGxveSBkcm9wIGZvcmdpbmdzIzMxLjEzLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE4LjAyLjAwI1ppbmMgZHJvcCBmb3JnaW5ncyMzMS4xMy4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMy4xOC4wMy4wMCNGZXJyb3VzIGFsbG95IGRyb3AgZm9yZ2luZ3MjMzEuMTMuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTguMDQuMDAjVGluIGRyb3AgZm9yZ2luZ3MjMzEuMTMuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTguMDUuMDAjTGVhZCBkcm9wIGZvcmdpbmdzIzMxLjEzLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE4LjA2LjAwI1N0ZWVsIGRyb3AgZm9yZ2luZ3MjMzEuMTMuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTguMDcuMDAjUHJlY2lvdXMgbWV0YWwgZHJvcCBmb3JnaW5ncyMzMS4xMy4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMy4xOC4wOC4wMCNTdGFpbmxlc3Mgc3RlZWwgZHJvcCBmb3JnaW5ncyMzMS4xMy4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMy4xOC4wOS4wMCNJcm9uIGRyb3AgZm9yZ2luZ3MjMzEuMTMuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTguMTAuMDAjQWx1bWludW0gZHJvcCBmb3JnaW5ncyMzMS4xMy4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMy4xOC4xMS4wMCNNYWduZXNpdW0gZHJvcCBmb3JnaW5ncyMzMS4xMy4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMy4xOC4xMi4wMCNUaXRhbml1bSBkcm9wIGZvcmdpbmdzIzMxLjEzLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE4LjEzLjAwI0JlcnlsbGl1bSBkcm9wIGZvcmdpbmdzIzMxLjEzLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE4LjE0LjAwI0NvcHBlciBkcm9wIGZvcmdpbmdzIzMxLjEzLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE4LjE1LjAwI0JyYXNzIGRyb3AgZm9yZ2luZ3MjMzEuMTMuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTguMTYuMDAjQnJvbnplIGRyb3AgZm9yZ2luZ3MjMzEuMTMuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTguMTcuMDAjQ29sZCBzdGVlbCBkcm9wIGZvcmdpbmdzIzMxLjEzLjE4LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE4LjE4LjAwI1NlbWkgZmluaXNoZWQgZHJvcCBmb3JnaW5ncyMzMS4xMy4xOC4wMC4wMAotdW5zcHNjNyMzMS4xMy4xOS4wMC4wMCNSb2xsZWQgcmluZyBmb3JnaW5ncyMzMS4xMy4wMC4wMC4wMAotdW5zcHNjNyMzMS4xMy4xOS4wMS4wMCNBbHVtaW51bSByb2xsZWQgcmluZyBmb3JnaW5ncyMzMS4xMy4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMy4xOS4wMi4wMCNCZXJ5bGxpdW0gcm9sbGVkIHJpbmcgZm9yZ2luZ3MjMzEuMTMuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTkuMDMuMDAjQnJhc3Mgcm9sbGVkIHJpbmcgZm9yZ2luZ3MjMzEuMTMuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTkuMDQuMDAjQnJvbnplIHJvbGxlZCByaW5nIGZvcmdpbmdzIzMxLjEzLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE5LjA1LjAwI0NvcHBlciByb2xsZWQgcmluZyBmb3JnaW5ncyMzMS4xMy4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMy4xOS4wNi4wMCNJcm9uIHJvbGxlZCByaW5nIGZvcmdpbmdzIzMxLjEzLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE5LjA3LjAwI0xlYWQgcm9sbGVkIHJpbmcgZm9yZ2luZ3MjMzEuMTMuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTkuMDguMDAjTWFnbmVzaXVtIHJvbGxlZCByaW5nIGZvcmdpbmdzIzMxLjEzLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE5LjA5LjAwI1ByZWNpb3VzIG1ldGFsIHJvbGxlZCByaW5nIGZvcmdpbmdzIzMxLjEzLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE5LjEwLjAwI1N0YWlubGVzcyBzdGVlbCByb2xsZWQgcmluZyBmb3JnaW5ncyMzMS4xMy4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMy4xOS4xMS4wMCNUaW4gcm9sbGVkIHJpbmcgZm9yZ2luZ3MjMzEuMTMuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTkuMTIuMDAjVGl0YW5pdW0gcm9sbGVkIHJpbmcgZm9yZ2luZ3MjMzEuMTMuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMTkuMTMuMDAjWmluYyByb2xsZWQgcmluZyBmb3JnaW5ncyMzMS4xMy4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMy4xOS4xNC4wMCNOb24gZmVycm91cyBhbGxveSByb2xsZWQgcmluZyBmb3JnaW5ncyMzMS4xMy4xOS4wMC4wMAotdW5zcHNjNyMzMS4xMy4xOS4xNS4wMCNGZXJyb3VzIGFsbG95IHJvbGxlZCByaW5nIGZvcmdpbmdzIzMxLjEzLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEzLjE5LjE2LjAwI1N0ZWVsIHJvbGxlZCByaW5nIGZvcmdpbmdzIzMxLjEzLjE5LjAwLjAwCi11bnNwc2M3IzMxLjEzLjIwLjAwLjAwI1Bvd2RlcmVkIG1ldGFsIGNvbXBvbmVudHMjMzEuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTMuMjAuMDEuMDAjRmVycm91cyBwb3dkZXJlZCBtZXRhbCBjb21wb25lbnRzIzMxLjEzLjIwLjAwLjAwCi11bnNwc2M3IzMxLjEzLjIwLjAyLjAwI05vbiBmZXJyb3VzIHBvd2RlcmVkIG1ldGFsIHBhcnRzIzMxLjEzLjIwLjAwLjAwCi11bnNwc2M3IzMxLjE0LjAwLjAwLjAwI01vbGRpbmdzIzMxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjE0LjE1LjAwLjAwI0luamVjdGlvbiBtb2xkaW5ncyMzMS4xNC4wMC4wMC4wMAotdW5zcHNjNyMzMS4xNC4xNS4wMS4wMCNQbGFzdGljIGluamVjdGlvbiBtb2xkaW5ncyMzMS4xNC4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNC4xNS4wMi4wMCNSdWJiZXIgaW5qZWN0aW9uIG1vbGRpbmdzIzMxLjE0LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE0LjE1LjAzLjAwI0dsYXNzIGluamVjdGlvbiBtb2xkaW5ncyMzMS4xNC4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNC4xNi4wMC4wMCNWYWN1dW0gbW9sZGluZ3MjMzEuMTQuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTQuMTYuMDEuMDAjUGxhc3RpYyB2YWN1dW0gbW9sZGluZ3MjMzEuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTQuMTYuMDIuMDAjUnViYmVyIHZhY3V1bSBtb2xkaW5ncyMzMS4xNC4xNi4wMC4wMAotdW5zcHNjNyMzMS4xNC4xNi4wMy4wMCNHbGFzcyB2YWN1dW0gbW9sZGluZ3MjMzEuMTQuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTQuMTcuMDAuMDAjQmxvdyBtb2xkaW5ncyMzMS4xNC4wMC4wMC4wMAotdW5zcHNjNyMzMS4xNC4xNy4wMS4wMCNQbGFzdGljIGJsb3cgbW9sZGluZ3MjMzEuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTQuMTcuMDIuMDAjUnViYmVyIGJsb3cgbW9sZGluZ3MjMzEuMTQuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTQuMTguMDAuMDAjUmVhY3Rpb24gaW5qZWN0aW9uIG1vbGRpbmdzIChSSU0pIzMxLjE0LjAwLjAwLjAwCi11bnNwc2M3IzMxLjE0LjE4LjAxLjAwI1BsYXN0aWMgcmVhY3Rpb24gaW5qZWN0aW9uIG1vbGRpbmdzIzMxLjE0LjE4LjAwLjAwCi11bnNwc2M3IzMxLjE0LjE4LjAyLjAwI1J1YmJlciByZWFjdGlvbiBpbmplY3Rpb24gbW9sZGluZ3MjMzEuMTQuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTUuMDAuMDAuMDAjUm9wZSBhbmQgY2hhaW4gYW5kIGNhYmxlIGFuZCB3aXJlIGFuZCBzdHJhcCMzMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4xNS4xNS4wMC4wMCNSb3BlcyMzMS4xNS4wMC4wMC4wMAotdW5zcHNjNyMzMS4xNS4xNS4wMS4wMCNDb3R0b24gcm9wZSMzMS4xNS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNS4xNS4wMi4wMCNQb2x5ZXN0ZXIgcm9wZSMzMS4xNS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNS4xNS4wMy4wMCNQb2x5cHJvcHlsZW5lIHJvcGUjMzEuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTUuMTUuMDQuMDAjTnlsb24gcm9wZSMzMS4xNS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNS4xNS4wNS4wMCNXaXJlIHJvcGUjMzEuMTUuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTUuMTUuMDYuMDAjSGVtcCByb3BlIzMxLjE1LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE1LjE1LjA3LjAwI1N0cmluZyBvciB0d2luZSMzMS4xNS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNS4xNS4wOC4wMCNTaXNhbCByb3BlIzMxLjE1LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE1LjE2LjAwLjAwI0NoYWlucyMzMS4xNS4wMC4wMC4wMAotdW5zcHNjNyMzMS4xNS4xNi4wMS4wMCNTYWZldHkgY2hhaW5zIzMxLjE1LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE1LjE2LjAyLjAwI1NraWQgY2hhaW5zIzMxLjE1LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE1LjE2LjAzLjAwI1JvbGxlciBjaGFpbnMjMzEuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTUuMTYuMDQuMDAjUHJvb2YgY29pbCBjaGFpbnMjMzEuMTUuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTUuMTYuMDUuMDAjU2FzaCBjaGFpbiMzMS4xNS4xNi4wMC4wMAotdW5zcHNjNyMzMS4xNS4xNi4wNi4wMCNKYWNrIGNoYWlucyMzMS4xNS4xNi4wMC4wMAotdW5zcHNjNyMzMS4xNS4xNi4wNy4wMCNDb2lsIGNoYWlucyMzMS4xNS4xNi4wMC4wMAotdW5zcHNjNyMzMS4xNS4xNi4wOC4wMCNCYWxsIGNoYWlucyMzMS4xNS4xNi4wMC4wMAotdW5zcHNjNyMzMS4xNS4xNi4wOS4wMCNDaGFpbiBsaW5rcyMzMS4xNS4xNi4wMC4wMAotdW5zcHNjNyMzMS4xNS4xNy4wMC4wMCNNZWNoYW5pY2FsIGNhYmxlIzMxLjE1LjAwLjAwLjAwCi11bnNwc2M3IzMxLjE1LjE3LjAxLjAwI01lY2hhbmljYWwgY2FibGVzIzMxLjE1LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE1LjE3LjAyLjAwI05vbiBlbGVjdHJpYyBjb250cm9sIGNhYmxlcyMzMS4xNS4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNS4xNy4wMy4wMCNMaWZ0aW5nIGNhYmxlcyMzMS4xNS4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNS4xNy4wNC4wMCNUcmFjayBjYWJsZXMjMzEuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTUuMTcuMDUuMDAjTm9uIGVsZWN0cmljYWwgc3RlZWwgY2FibGVzIzMxLjE1LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE1LjE3LjA2LjAwI05vbiBlbGVjdHJpY2FsIGNvcHBlciBjYWJsZXMjMzEuMTUuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTUuMTcuMDcuMDAjTm9uIGVsZWN0cmljYWwgYWx1bWludW0gY2FibGVzIzMxLjE1LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE1LjE4LjAwLjAwI01lY2hhbmljYWwgd2lyZSMzMS4xNS4wMC4wMC4wMAotdW5zcHNjNyMzMS4xNS4xOC4wMS4wMCNNZWNoYW5pY2FsIHdpcmUjMzEuMTUuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTUuMTguMDIuMDAjQmFyYmVkIHdpcmUjMzEuMTUuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTUuMTguMDMuMDAjUGlhbm8gc3RlZWwgd2lyZSMzMS4xNS4xOC4wMC4wMAotdW5zcHNjNyMzMS4xNS4xOS4wMC4wMCNTdHJhcHMjMzEuMTUuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTUuMTkuMDEuMDAjTWV0YWwgc3RyYXBzIzMxLjE1LjE5LjAwLjAwCi11bnNwc2M3IzMxLjE1LjE5LjAyLjAwI0xlYXRoZXIgc3RyYXBzIzMxLjE1LjE5LjAwLjAwCi11bnNwc2M3IzMxLjE1LjE5LjAzLjAwI0ZpYmVyIHN0cmFwcyMzMS4xNS4xOS4wMC4wMAotdW5zcHNjNyMzMS4xNS4xOS4wNC4wMCNQbGFzdGljIHN0cmFwcyMzMS4xNS4xOS4wMC4wMAotdW5zcHNjNyMzMS4xNS4yMC4wMC4wMCNTZWN1cml0eSB3aXJlIzMxLjE1LjAwLjAwLjAwCi11bnNwc2M3IzMxLjE1LjIwLjAxLjAwI1Jhem9yIHdpcmUjMzEuMTUuMjAuMDAuMDAKLXVuc3BzYzcjMzEuMTUuMjAuMDIuMDAjQmFyYmVkIHdpcmUjMzEuMTUuMjAuMDAuMDAKLXVuc3BzYzcjMzEuMTUuMjEuMDAuMDAjRWxlY3RyaWNhbCB3aXJlIzMxLjE1LjAwLjAwLjAwCi11bnNwc2M3IzMxLjE1LjIxLjAxLjAwI1dpcmUgYXNzZW1ibHkjMzEuMTUuMjEuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMDAuMDAuMDAjSGFyZHdhcmUjMzEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTUuMDAuMDAjU2NyZXdzIzMxLjE2LjAwLjAwLjAwCi11bnNwc2M3IzMxLjE2LjE1LjAxLjAwI0NhcCBzY3Jld3MjMzEuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTUuMDIuMDAjQW5jaG9yIHNjcmV3cyMzMS4xNi4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNS4wMy4wMCNEcml2ZSBzY3Jld3MjMzEuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTUuMDQuMDAjTWFjaGluZSBzY3Jld3MjMzEuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTUuMDUuMDAjU2V0IHNjcmV3cyMzMS4xNi4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNS4wNi4wMCNTaGVldCBtZXRhbCBzY3Jld3MjMzEuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTUuMDcuMDAjVGFwcGluZyBzY3Jld3MjMzEuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTUuMDguMDAjV29vZCBzY3Jld3MjMzEuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTUuMDkuMDAjRHJ5d2FsbCBzY3Jld3MjMzEuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTUuMTAuMDAjQ2FwdGl2ZSBzY3JldyMzMS4xNi4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNS4xMS4wMCNMb2NraW5nIHNjcmV3cyMzMS4xNi4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNS4xMi4wMCNUaHJlYWQgcm9sbGluZyBzY3Jld3MjMzEuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTUuMTMuMDAjRmxhdGhlYWQgc2NyZXdzIzMxLjE2LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE1LjE0LjAwI1dlbGQgc2NyZXdzIzMxLjE2LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE1LjE1LjAwI0ZsYXQgaGVhZCBzY3Jld3MjMzEuMTYuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTUuMTYuMDAjVGh1bWIgc2NyZXdzIzMxLjE2LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE1LjE3LjAwI1Nob3VsZGVyIHNjcmV3cyMzMS4xNi4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNi4wMC4wMCNCb2x0cyMzMS4xNi4wMC4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNi4wMS4wMCNBbmNob3IgYm9sdHMjMzEuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTYuMDIuMDAjQmxpbmQgYm9sdHMjMzEuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTYuMDMuMDAjQ2FycmlhZ2UgYm9sdHMjMzEuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTYuMDQuMDAjQ2xldmlzIGJvbHRzIzMxLjE2LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE2LjA1LjAwI0N5bGluZGVyIGJvbHRzIzMxLjE2LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE2LjA2LjAwI0Rvb3IgYm9sdHMjMzEuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTYuMDcuMDAjRXhwYW5zaW9uIGJvbHRzIzMxLjE2LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE2LjA4LjAwI0xhZyBib2x0cyMzMS4xNi4xNi4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNi4wOS4wMCNUb2dnbGUgYm9sdHMjMzEuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTYuMTAuMDAjRXllIGJvbHRzIzMxLjE2LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE2LjExLjAwI0xvY2tpbmcgYm9sdHMjMzEuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTYuMTIuMDAjUGluIG9yIGNvbGxhciBib2x0cyMzMS4xNi4xNi4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNi4xMy4wMCNUZW5zaW9uIGJvbHRzIzMxLjE2LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE2LjE0LjAwI1N0cnVjdHVyYWwgYm9sdHMjMzEuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTYuMTUuMDAjVG9ycXVlIGJvbHRzIzMxLjE2LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE2LjE2LjAwI1UgYm9sdHMjMzEuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTYuMTcuMDAjV2luZyBib2x0cyMzMS4xNi4xNi4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNi4xOC4wMCNUaHJlYWRlZCByb2QjMzEuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTYuMTkuMDAjU3R1ZCBib2x0cyMzMS4xNi4xNi4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNi4yMC4wMCNIZXhhZ29uYWwgYm9sdHMjMzEuMTYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTcuMDAuMDAjTnV0cyMzMS4xNi4wMC4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNy4wMS4wMCNBbmNob3IgbnV0cyMzMS4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNy4wMi4wMCNCZWFyaW5nIG51dHMjMzEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTcuMDMuMDAjQmxpbmQgbnV0cyMzMS4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNy4wNC4wMCNCYXJyZWwgbnV0cyMzMS4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNy4wNS4wMCNDYXAgbnV0cyMzMS4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNy4wNi4wMCNDYXB0aXZlIG51dHMjMzEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTcuMDcuMDAjQ2FzdGxlIG51dHMjMzEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTcuMDguMDAjQ2hhbm5lbCBudXRzIzMxLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE3LjA5LjAwI0NsYW1waW5nIG51dHMjMzEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTcuMTAuMDAjRXhwYW5zaW9uIG51dHMjMzEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTcuMTEuMDAjRXllIG51dHMjMzEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTcuMTIuMDAjRmxhbmdlIG51dHMjMzEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTcuMTMuMDAjSG9zZSBudXRzIzMxLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE3LjE0LjAwI0luc2VydCBudXRzIzMxLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE3LjE1LjAwI1NlbGYgbG9ja2luZyBudXRzIzMxLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE3LjE2LjAwI0xvY2tudXRzIzMxLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE3LjE3LjAwI1dpbmcgbnV0cyMzMS4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNy4xOC4wMCNUb2dnbGUgbnV0cyMzMS4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNy4xOS4wMCNTd2l2ZWwgbnV0cyMzMS4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNy4yMC4wMCNTdG9wIG51dHMjMzEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTcuMjEuMDAjU3ByaW5nIG51dHMjMzEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTcuMjIuMDAjVW5pb24gbnV0cyMzMS4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNy4yMy4wMCNOdXRwbGF0ZSBudXRzIzMxLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE3LjI0LjAwI1ByZXNzIG51dHMjMzEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTcuMjUuMDAjQ2xpcCBudXRzIzMxLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE3LjI2LjAwI0RvbWUgbnV0cyMzMS4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNy4yNy4wMCNIZXhhZ29uYWwgbnV0cyMzMS4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNi4xNy4yOC4wMCNDb3VwbGluZyBudXRzIzMxLjE2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE3LjI5LjAwI0tudXJsZWQgbnV0cyMzMS4xNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNi4xOC4wMC4wMCNXYXNoZXJzIzMxLjE2LjAwLjAwLjAwCi11bnNwc2M3IzMxLjE2LjE4LjAxLjAwI0xvY2tpbmcgd2FzaGVycyMzMS4xNi4xOC4wMC4wMAotdW5zcHNjNyMzMS4xNi4xOC4wMi4wMCNCZXZlbCB3YXNoZXJzIzMxLjE2LjE4LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE4LjAzLjAwI0JpbmRpbmcgd2FzaGVycyMzMS4xNi4xOC4wMC4wMAotdW5zcHNjNyMzMS4xNi4xOC4wNC4wMCNDdXJ2ZWQgd2FzaGVycyMzMS4xNi4xOC4wMC4wMAotdW5zcHNjNyMzMS4xNi4xOC4wNS4wMCNFbGVjdHJpY2FsIGluc3VsYXRpbmcgd2FzaGVycyMzMS4xNi4xOC4wMC4wMAotdW5zcHNjNyMzMS4xNi4xOC4wNi4wMCNGaW5pc2hpbmcgd2FzaGVycyMzMS4xNi4xOC4wMC4wMAotdW5zcHNjNyMzMS4xNi4xOC4wNy4wMCNGbGF0IHdhc2hlcnMjMzEuMTYuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTguMDguMDAjT3BlbiB3YXNoZXJzIzMxLjE2LjE4LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE4LjA5LjAwI1JlZHVjaW5nIHdhc2hlcnMjMzEuMTYuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTguMTAuMDAjU2hpbSB3YXNoZXJzIzMxLjE2LjE4LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE4LjExLjAwI1NwcmluZyB3YXNoZXJzIzMxLjE2LjE4LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE4LjEyLjAwI1NxdWFyZSB3YXNoZXJzIzMxLjE2LjE4LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE4LjEzLjAwI1N3aXZlbCB3YXNoZXJzIzMxLjE2LjE4LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE4LjE0LjAwI1RocnVzdCB3YXNoZXJzIzMxLjE2LjE4LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE4LjE1LjAwI1Nob3VsZGVyIHdhc2hlcnMjMzEuMTYuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTguMTYuMDAjU3BhY2VycyBvciBzdGFuZG9mZnMjMzEuMTYuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTguMTcuMDAjQ29uaWNhbCB3YXNoZXJzIzMxLjE2LjE4LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE5LjAwLjAwI1NwcmluZ3MjMzEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMTkuMDEuMDAjSGVsaWNhbCBzcHJpbmdzIzMxLjE2LjE5LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE5LjAyLjAwI0xlYWYgc3ByaW5ncyMzMS4xNi4xOS4wMC4wMAotdW5zcHNjNyMzMS4xNi4xOS4wMy4wMCNTcGlyYWwgc3ByaW5ncyMzMS4xNi4xOS4wMC4wMAotdW5zcHNjNyMzMS4xNi4xOS4wNC4wMCNDb21wcmVzc2lvbiBzcHJpbmdzIzMxLjE2LjE5LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE5LjA1LjAwI0RpZSBzcHJpbmdzIzMxLjE2LjE5LjAwLjAwCi11bnNwc2M3IzMxLjE2LjE5LjA2LjAwI0Rpc2sgc3ByaW5ncyMzMS4xNi4xOS4wMC4wMAotdW5zcHNjNyMzMS4xNi4xOS4wNy4wMCNFeHRlbnNpb24gc3ByaW5ncyMzMS4xNi4xOS4wMC4wMAotdW5zcHNjNyMzMS4xNi4xOS4wOC4wMCNUb3JzaW9uIHNwcmluZ3MjMzEuMTYuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjAuMDAuMDAjTmFpbHMjMzEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjAuMDEuMDAjQnJhZHMjMzEuMTYuMjAuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjAuMDIuMDAjQ2FwIG5haWxzIzMxLjE2LjIwLjAwLjAwCi11bnNwc2M3IzMxLjE2LjIwLjAzLjAwI0ZpbmlzaGluZyBuYWlscyMzMS4xNi4yMC4wMC4wMAotdW5zcHNjNyMzMS4xNi4yMC4wNC4wMCNNYXNvbnJ5IG5haWxzIzMxLjE2LjIwLjAwLjAwCi11bnNwc2M3IzMxLjE2LjIwLjA1LjAwI1Jvb2ZpbmcgbmFpbHMjMzEuMTYuMjAuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjAuMDYuMDAjV2lyZSBuYWlscyMzMS4xNi4yMC4wMC4wMAotdW5zcHNjNyMzMS4xNi4yMC4wNy4wMCNVcGhvbHN0ZXJ5IG5haWxzIzMxLjE2LjIwLjAwLjAwCi11bnNwc2M3IzMxLjE2LjIwLjA4LjAwI0RyaXZlIHBpbnMjMzEuMTYuMjAuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjEuMDAuMDAjQW5jaG9ycyMzMS4xNi4wMC4wMC4wMAotdW5zcHNjNyMzMS4xNi4yMS4wMS4wMCNDb25jcmV0ZSBhbmNob3JzIzMxLjE2LjIxLjAwLjAwCi11bnNwc2M3IzMxLjE2LjIxLjAyLjAwI1dlZGdlIGFuY2hvcnMjMzEuMTYuMjEuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjEuMDMuMDAjV2FsbCBhbmNob3JzIzMxLjE2LjIxLjAwLjAwCi11bnNwc2M3IzMxLjE2LjIxLjA0LjAwI1NjcmV3IGFuY2hvcnMjMzEuMTYuMjEuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjEuMDUuMDAjUmVzaW4gYW5jaG9ycyMzMS4xNi4yMS4wMC4wMAotdW5zcHNjNyMzMS4xNi4yMS4wNi4wMCNQaXBlIGFuY2hvcnMjMzEuMTYuMjEuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjEuMDcuMDAjTmFpbCBleHBhbnNpb24gYW5jaG9ycyMzMS4xNi4yMS4wMC4wMAotdW5zcHNjNyMzMS4xNi4yMS4wOC4wMCNUaWUgZG93biBhbmNob3JzIzMxLjE2LjIxLjAwLjAwCi11bnNwc2M3IzMxLjE2LjIyLjAwLjAwI1JpdmV0cyMzMS4xNi4wMC4wMC4wMAotdW5zcHNjNyMzMS4xNi4yMi4wMS4wMCNCbGluZCByaXZldHMjMzEuMTYuMjIuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjIuMDIuMDAjQ3Jvd25oZWFkIHJpdmV0cyMzMS4xNi4yMi4wMC4wMAotdW5zcHNjNyMzMS4xNi4yMi4wMy4wMCNGbGF0IGhlYWQgcml2ZXRzIzMxLjE2LjIyLjAwLjAwCi11bnNwc2M3IzMxLjE2LjIyLjA0LjAwI0Z1bGwgcml2ZXRzIzMxLjE2LjIyLjAwLjAwCi11bnNwc2M3IzMxLjE2LjIyLjA1LjAwI1JhdGNoZXQgcml2ZXRzIzMxLjE2LjIyLjAwLjAwCi11bnNwc2M3IzMxLjE2LjIyLjA2LjAwI1Rpbm5lcnMgcml2ZXRzIzMxLjE2LjIyLjAwLjAwCi11bnNwc2M3IzMxLjE2LjIyLjA3LjAwI0NvbXByZXNzaW9uIHJpdmV0cyMzMS4xNi4yMi4wMC4wMAotdW5zcHNjNyMzMS4xNi4yMi4wOC4wMCNDb29wZXJzIHJpdmV0cyMzMS4xNi4yMi4wMC4wMAotdW5zcHNjNyMzMS4xNi4yMi4wOS4wMCNCdXR0b24gaGVhZCByaXZldHMjMzEuMTYuMjIuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjMuMDAuMDAjTW91bnRpbmcgaGFyZHdhcmUjMzEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjMuMDEuMDAjTW91bnRpbmcgcHJvZmlsZXMjMzEuMTYuMjMuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjMuMDMuMDAjTW91bnRpbmcgYmFycyMzMS4xNi4yMy4wMC4wMAotdW5zcHNjNyMzMS4xNi4yMy4wNC4wMCNNb3VudGluZyBzdHJpcHMjMzEuMTYuMjMuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjMuMDUuMDAjTW91bnRpbmcgY2xpcHMjMzEuMTYuMjMuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjMuMDYuMDAjTW91bnRpbmcgaGFuZ2VycyMzMS4xNi4yMy4wMC4wMAotdW5zcHNjNyMzMS4xNi4yMy4wNy4wMCNNb3VudGluZyBwbGF0ZXMjMzEuMTYuMjMuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjMuMDguMDAjTW91bnRpbmcgcGFuZWxzIzMxLjE2LjIzLjAwLjAwCi11bnNwc2M3IzMxLjE2LjIzLjA5LjAwI01vdW50aW5nIHJhY2tzIzMxLjE2LjIzLjAwLjAwCi11bnNwc2M3IzMxLjE2LjIzLjEwLjAwI01vdW50aW5nIHN0cmFwcyMzMS4xNi4yMy4wMC4wMAotdW5zcHNjNyMzMS4xNi4yMy4xMS4wMCNXYWxsIGJ1c2hpbmdzIzMxLjE2LjIzLjAwLjAwCi11bnNwc2M3IzMxLjE2LjI0LjAwLjAwI01pc2NlbGxhbmVvdXMgZmFzdGVuZXJzIzMxLjE2LjAwLjAwLjAwCi11bnNwc2M3IzMxLjE2LjI0LjAxLjAwI0dyb21tZXRzIzMxLjE2LjI0LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI0LjAyLjAwI0hhc3BzIzMxLjE2LjI0LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI0LjAzLjAwI0hpbmdlcyMzMS4xNi4yNC4wMC4wMAotdW5zcHNjNyMzMS4xNi4yNC4wNC4wMCNIYXJkd2FyZSBzdGFwbGVzIzMxLjE2LjI0LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI0LjA1LjAwI1R1cm5idWNrbGVzIzMxLjE2LjI0LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI0LjA2LjAwI1N0cmFwcGluZyBvciBiYW5kaW5nIGJ1Y2tsZXMjMzEuMTYuMjQuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjQuMDcuMDAjTGF0Y2gjMzEuMTYuMjQuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjQuMDguMDAjQ290dGVyIHBpbnMjMzEuMTYuMjQuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjUuMDAuMDAjQnJhY2tldHMgYW5kIGJyYWNlcyMzMS4xNi4wMC4wMC4wMAotdW5zcHNjNyMzMS4xNi4yNS4wMS4wMCNTaGVsZiBicmFja2V0cyMzMS4xNi4yNS4wMC4wMAotdW5zcHNjNyMzMS4xNi4yNS4wMi4wMCNBbmdsZSBicmFja2V0cyMzMS4xNi4yNS4wMC4wMAotdW5zcHNjNyMzMS4xNi4yNS4wMy4wMCNCcmFjZXMjMzEuMTYuMjUuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjUuMDQuMDAjRWxlY3RyaWNhbCBmaXh0dXJlIGJyYWNrZXRzIzMxLjE2LjI1LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI1LjA1LjAwI01hZ25ldGljIG1vdW50aW5nIGJyYWNrZXRzIzMxLjE2LjI1LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI2LjAwLjAwI0hvb2tzIzMxLjE2LjAwLjAwLjAwCi11bnNwc2M3IzMxLjE2LjI2LjAxLjAwI1N3aXZlbCBob29rcyMzMS4xNi4yNi4wMC4wMAotdW5zcHNjNyMzMS4xNi4yNi4wMi4wMCNTcHJpbmcgaG9va3MjMzEuMTYuMjYuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjYuMDMuMDAjUyBob29rcyMzMS4xNi4yNi4wMC4wMAotdW5zcHNjNyMzMS4xNi4yNi4wNC4wMCNTYWZldHkgaG9va3MjMzEuMTYuMjYuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjYuMDUuMDAjTGlmdGluZyBob29rcyMzMS4xNi4yNi4wMC4wMAotdW5zcHNjNyMzMS4xNi4yNi4wNi4wMCNKIGhvb2tzIzMxLjE2LjI2LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI2LjA3LjAwI0d1eSB3aXJlIGhvb2tzIzMxLjE2LjI2LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI2LjA4LjAwI0dyYWIgaG9va3MjMzEuMTYuMjYuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjYuMDkuMDAjU2NyZXcgaG9va3MjMzEuMTYuMjYuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjYuMTAuMDAjUGVnIGJvYXJkIGhvb2tzIzMxLjE2LjI2LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI2LjExLjAwI1NsaXAgaG9va3MjMzEuMTYuMjYuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjcuMDAuMDAjUm9sbGluZyBoYXJkd2FyZSMzMS4xNi4wMC4wMC4wMAotdW5zcHNjNyMzMS4xNi4yNy4wMS4wMCNDYXN0ZXJzIzMxLjE2LjI3LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI3LjAyLjAwI1doZWVscyMzMS4xNi4yNy4wMC4wMAotdW5zcHNjNyMzMS4xNi4yNy4wMy4wMCNTbGlkZXJzIzMxLjE2LjI3LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI4LjAwLjAwI01pc2NlbGxhbmVvdXMgaGFyZHdhcmUjMzEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjguMDEuMDAjSGFuZGxlcyBvciBrbm9icyMzMS4xNi4yOC4wMC4wMAotdW5zcHNjNyMzMS4xNi4yOC4wMi4wMCNJbnNlcnRzIzMxLjE2LjI4LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI4LjAzLjAwI1NoYWNrbGVzIzMxLjE2LjI4LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI4LjA0LjAwI0Rvb3Igc3RvcHMjMzEuMTYuMjguMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjguMDUuMDAjQ2FibGUgdGhpbWJsZSMzMS4xNi4yOC4wMC4wMAotdW5zcHNjNyMzMS4xNi4yOC4wNi4wMCNTY3JldyBjb3ZlcnMjMzEuMTYuMjguMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjguMDcuMDAjTGV2ZXJzIzMxLjE2LjI4LjAwLjAwCi11bnNwc2M3IzMxLjE2LjI4LjA4LjAwI1BhbmljIGJhcnMjMzEuMTYuMjguMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjkuMDAuMDAjQ2xhbXBzIzMxLjE2LjAwLjAwLjAwCi11bnNwc2M3IzMxLjE2LjI5LjAxLjAwI0VhciBjbGFtcHMjMzEuMTYuMjkuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjkuMDIuMDAjU3ByaW5nIGNsYW1wcyMzMS4xNi4yOS4wMC4wMAotdW5zcHNjNyMzMS4xNi4yOS4wMy4wMCNTY3JldyBjbGFtcHMjMzEuMTYuMjkuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMjkuMDQuMDAjV2lyZSByb3BlIGNsYW1wcyMzMS4xNi4yOS4wMC4wMAotdW5zcHNjNyMzMS4xNi4yOS4wNS4wMCNCZWFtIGNsYW1wcyMzMS4xNi4yOS4wMC4wMAotdW5zcHNjNyMzMS4xNi4zMC4wMC4wMCNDb3VwbGluZ3MjMzEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMzAuMDEuMDAjRWxhc3RvbWVyaWMgY291cGxpbmdzIzMxLjE2LjMwLjAwLjAwCi11bnNwc2M3IzMxLjE2LjMwLjAyLjAwI0dlYXIgY291cGxpbmdzIzMxLjE2LjMwLjAwLjAwCi11bnNwc2M3IzMxLjE2LjMwLjAzLjAwI01ldGFsbGljIGNvdXBsaW5ncyMzMS4xNi4zMC4wMC4wMAotdW5zcHNjNyMzMS4xNi4zMC4wNC4wMCNNaW5pYXR1cmUgY291cGxpbmdzIzMxLjE2LjMwLjAwLjAwCi11bnNwc2M3IzMxLjE2LjMxLjAwLjAwI0Nvbm5lY3RvcnMjMzEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMzEuMDEuMDAjUXVpY2sgZGlzY29ubmVjdHMjMzEuMTYuMzEuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMzEuMDIuMDAjRmVycnVsZSMzMS4xNi4zMS4wMC4wMAotdW5zcHNjNyMzMS4xNi4zMS4wMy4wMCNUcmFpbGVyIENvbm5lY3RvciMzMS4xNi4zMS4wMC4wMAotdW5zcHNjNyMzMS4xNi4zMi4wMC4wMCNSZXRhaW5pbmcgaGFyZHdhcmUjMzEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMzIuMDEuMDAjU3ByaW5nIHBpbnMjMzEuMTYuMzIuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMzIuMDIuMDAjUmV0YWluaW5nIHJpbmdzIzMxLjE2LjMyLjAwLjAwCi11bnNwc2M3IzMxLjE2LjMyLjAzLjAwI0Rvd2VsIHBpbiMzMS4xNi4zMi4wMC4wMAotdW5zcHNjNyMzMS4xNi4zMi4wNC4wMCNDb3R0ZXIgcGluIzMxLjE2LjMyLjAwLjAwCi11bnNwc2M3IzMxLjE2LjMyLjA1LjAwI1RhcGVyIHBpbnMjMzEuMTYuMzIuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMzIuMDYuMDAjR3Jvb3ZlZCBwaW5zIzMxLjE2LjMyLjAwLjAwCi11bnNwc2M3IzMxLjE2LjMyLjA3LjAwI1NoYWZ0IG9yIHdvb2RydWZmIGtleXMjMzEuMTYuMzIuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMzIuMDguMDAjS2V5c3RvY2sjMzEuMTYuMzIuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMzIuMDkuMDAjQmVhcmluZyBob2xkZXJzIG9yIHJldGFpbmVycyMzMS4xNi4zMi4wMC4wMAotdW5zcHNjNyMzMS4xNi4zMi4xMC4wMCNSZXRhaW5pbmcgY29sbGFycyMzMS4xNi4zMi4wMC4wMAotdW5zcHNjNyMzMS4xNi4zMy4wMC4wMCNTcGFjZXIjMzEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTYuMzMuMDEuMDAjU2hpbSMzMS4xNi4zMy4wMC4wMAotdW5zcHNjNyMzMS4xNy4wMC4wMC4wMCNCZWFyaW5ncyBhbmQgYnVzaGluZ3MgYW5kIHdoZWVscyBhbmQgZ2VhcnMjMzEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTUuMDAuMDAjQmVhcmluZ3MjMzEuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTUuMDEuMDAjRmxhbmdlZCBiZWFyaW5ncyMzMS4xNy4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNS4wMi4wMCNSYWRpYWwgYmVhcmluZ3MjMzEuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTUuMDMuMDAjV2hlZWwgYmVhcmluZ3MjMzEuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTUuMDQuMDAjQmFsbCBiZWFyaW5ncyMzMS4xNy4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNS4wNS4wMCNSb2xsZXIgYmVhcmluZ3MjMzEuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTUuMDYuMDAjTGluZWFyIGJlYXJpbmdzIzMxLjE3LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE1LjA3LjAwI1RocnVzdCBiZWFyaW5ncyMzMS4xNy4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNS4wOC4wMCNSb2QgZW5kIGJlYXJpbmdzIzMxLjE3LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE1LjA5LjAwI1NsZWV2ZSBiZWFyaW5ncyMzMS4xNy4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNS4xMC4wMCNTcGhlcmljYWwgYmVhcmluZ3MjMzEuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTUuMTEuMDAjUGlsbG93IGJsb2NrIGJlYXJpbmdzIzMxLjE3LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE1LjEyLjAwI05lZWRsZSBiZWFyaW5ncyMzMS4xNy4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNS4xMy4wMCNIYW5nZXIgYmVhcmluZ3MjMzEuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTUuMTQuMDAjRG9vciBjbG9zZXJzIzMxLjE3LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE1LjE1LjAwI1BsYWluIGJlYXJpbmdzIzMxLjE3LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE1LjE2LjAwI1RhcGVyZWQgYmVhcmluZ3MjMzEuMTcuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTUuMTcuMDAjTmVlZGxlIGJlYXJpbmdzIzMxLjE3LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE1LjE4LjAwI0JlYXJpbmcgQ2FnZSMzMS4xNy4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNS4xOS4wMCNCZWFyaW5nIGJsb2NrcyBvciBob3VzaW5ncyMzMS4xNy4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNS4yMC4wMCNCZWFyaW5nIGpvdXJuYWxzIzMxLjE3LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE1LjIxLjAwI0JlYXJpbmcgcm9sbGVycyBvciBiYWxscyMzMS4xNy4xNS4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNi4wMC4wMCNCdXNoaW5ncyMzMS4xNy4wMC4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNi4wMS4wMCNUcmFuc2Zvcm1lciBidXNoaW5ncyMzMS4xNy4xNi4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNi4wMi4wMCNXYWxsIGJ1c2hpbmdzIzMxLjE3LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE2LjAzLjAwI0RyaWxsIGJ1c2hpbmdzIzMxLjE3LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE2LjA0LjAwI1BpbG90IGJ1c2hpbmdzIzMxLjE3LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE2LjA1LjAwI1NoYWZ0IGJ1c2hpbmdzIzMxLjE3LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE3LjAwLjAwI0dlYXJzIzMxLjE3LjAwLjAwLjAwCi11bnNwc2M3IzMxLjE3LjE3LjAxLjAwI0dlYXIgYm94ZXMjMzEuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTcuMDIuMDAjUmFjayBvciBwaW5pb24gZ2VhcnMjMzEuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTcuMDMuMDAjRGlmZmVyZW50aWFsIGdlYXJzIzMxLjE3LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE3LjA0LjAwI0ZyaWN0aW9uIGdlYXJzIzMxLjE3LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE3LjA1LjAwI0hlbGljYWwgZ2VhcnMjMzEuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTcuMDYuMDAjQ29uaWNhbCBnZWFycyMzMS4xNy4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNy4wNy4wMCNTcHVyIGdlYXJzIzMxLjE3LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE3LjA4LjAwI0JldmVsIGdlYXJzIzMxLjE3LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE3LjA5LjAwI1JhY2sgZ2VhcnMjMzEuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTcuMTAuMDAjUGluaW9uIGdlYXJzIzMxLjE3LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE3LjExLjAwI1JpbmcgZ2VhcnMjMzEuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTcuMTIuMDAjV29ybSBnZWFycyMzMS4xNy4xNy4wMC4wMAotdW5zcHNjNyMzMS4xNy4xNy4xMy4wMCNTaWRlIEdlYXJzIzMxLjE3LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE3LjE0LjAwI0hlbGljYWwgZ2VhcnMjMzEuMTcuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTguMDAuMDAjSW5kdXN0cmlhbCB3aGVlbHMjMzEuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTguMDEuMDAjQ29nIHdoZWVscyMzMS4xNy4xOC4wMC4wMAotdW5zcHNjNyMzMS4xNy4xOC4wMi4wMCNJbXBlbGxlciB3aGVlbHMjMzEuMTcuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTguMDMuMDAjRmx5d2hlZWxzIzMxLjE3LjE4LjAwLjAwCi11bnNwc2M3IzMxLjE3LjE4LjA0LjAwI1NoZWF2ZXMjMzEuMTcuMTguMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTguMDUuMDAjV2hlZWwgYnJ1c2hlcyMzMS4xNy4xOC4wMC4wMAotdW5zcHNjNyMzMS4xNy4xOS4wMC4wMCNTcHJvY2tldHMjMzEuMTcuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTcuMTkuMDEuMDAjUm9sbGVyIGNoYWluIHNwcm9ja2V0cyMzMS4xNy4xOS4wMC4wMAotdW5zcHNjNyMzMS4xNy4xOS4wMi4wMCNTcGxpdCBzcHJvY2tldHMjMzEuMTcuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMTguMDAuMDAuMDAjR2Fza2V0cyBhbmQgc2VhbHMjMzEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTguMTUuMDAuMDAjR2Fza2V0cyMzMS4xOC4wMC4wMC4wMAotdW5zcHNjNyMzMS4xOC4xNS4wMS4wMCNQbGFzdGljIGdhc2tldHMjMzEuMTguMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTguMTUuMDIuMDAjUnViYmVyIGdhc2tldHMjMzEuMTguMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTguMTUuMDMuMDAjTWV0YWwgZ2Fza2V0cyMzMS4xOC4xNS4wMC4wMAotdW5zcHNjNyMzMS4xOC4xNS4wNC4wMCNUZXh0aWxlIGdhc2tldHMjMzEuMTguMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTguMTUuMDUuMDAjQ29yayBnYXNrZXRzIzMxLjE4LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE4LjE1LjA2LjAwI08gcmluZyBnYXNrZXRzIzMxLjE4LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE4LjE1LjA3LjAwI0VsZWN0cm9tYWduZXRpYyBpbnRlcmZlcmVuY2UgKEVNSSkgZ2Fza2V0cyMzMS4xOC4xNS4wMC4wMAotdW5zcHNjNyMzMS4xOC4xNS4wOC4wMCNCb2x0ZWQgZ2Fza2V0cyMzMS4xOC4xNS4wMC4wMAotdW5zcHNjNyMzMS4xOC4xNS4wOS4wMCNHYXNrZXQga2l0cyMzMS4xOC4xNS4wMC4wMAotdW5zcHNjNyMzMS4xOC4xNS4xMC4wMCNTaWxpY29uZSBnYXNrZXRzIzMxLjE4LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE4LjE1LjExLjAwI0xpcXVpZCBnYXNrZXRzIzMxLjE4LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE4LjE2LjAwLjAwI1NlYWxzIzMxLjE4LjAwLjAwLjAwCi11bnNwc2M3IzMxLjE4LjE2LjAxLjAwI1BsYXN0aWMgc2VhbHMjMzEuMTguMTYuMDAuMDAKLXVuc3BzYzcjMzEuMTguMTYuMDIuMDAjUnViYmVyIHNlYWxzIzMxLjE4LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE4LjE2LjAzLjAwI01ldGFsbGljIHNlYWxzIzMxLjE4LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE4LjE2LjA0LjAwI1NlYWwgbWVjaGFuaWNhbCMzMS4xOC4xNi4wMC4wMAotdW5zcHNjNyMzMS4xOC4xNy4wMC4wMCNQYWNraW5ncyBhbmQgZ2xhbmRzIzMxLjE4LjAwLjAwLjAwCi11bnNwc2M3IzMxLjE4LjE3LjAxLjAwI1BhY2tpbmdzIzMxLjE4LjE3LjAwLjAwCi11bnNwc2M3IzMxLjE4LjE3LjAyLjAwI0dsYW5kcyMzMS4xOC4xNy4wMC4wMAotdW5zcHNjNyMzMS4xOS4wMC4wMC4wMCNHcmluZGluZyBhbmQgcG9saXNoaW5nIGFuZCBzbW9vdGhpbmcgbWF0ZXJpYWxzIzMxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjE5LjE1LjAwLjAwI0FicmFzaXZlcyBhbmQgYWJyYXNpdmUgbWVkaWEjMzEuMTkuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMTkuMTUuMDEuMDAjQWJyYXNpdmUgcGFwZXJzIzMxLjE5LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE5LjE1LjAyLjAwI0J1ZmZzIzMxLjE5LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE5LjE1LjAzLjAwI0FicmFzaXZlIHdoZWVscyMzMS4xOS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xOS4xNS4wNC4wMCNBYnJhc2l2ZSBjbG90aCMzMS4xOS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xOS4xNS4wNS4wMCNBYnJhc2l2ZSBwYWRzIzMxLjE5LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE5LjE1LjA2LjAwI0FicmFzaXZlIGRpc2NzIzMxLjE5LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE5LjE1LjA3LjAwI0FicmFzaXZlIGJlbHRzIzMxLjE5LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE5LjE1LjA4LjAwI0JvcnQjMzEuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTkuMTUuMDkuMDAjQWJyYXNpdmUgcG9saXNoZXJzIzMxLjE5LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE5LjE1LjEwLjAwI0FicmFzaXZlIHN0b25lcyMzMS4xOS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xOS4xNS4xMS4wMCNTdGVlbCB3b29sIzMxLjE5LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE5LjE1LjEyLjAwI1Nob3QgYmxhc3QjMzEuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTkuMTUuMTMuMDAjR2xhc3MgYmVhZCMzMS4xOS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xOS4xNS4xNC4wMCNUdW1ibGUgbWVkaWEjMzEuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTkuMTUuMTUuMDAjQWJyYXNpdmUgbWVzaCMzMS4xOS4xNS4wMC4wMAotdW5zcHNjNyMzMS4xOS4xNS4xNi4wMCNBYnJhc2l2ZSBjYXJ0cmlkZ2Ugcm9sbHMjMzEuMTkuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMTkuMTUuMTcuMDAjRW1lcnkgYm9hcmRzIzMxLjE5LjE1LjAwLjAwCi11bnNwc2M3IzMxLjE5LjE2LjAwLjAwI0FicmFzaXZlIHdoZWVscyMzMS4xOS4wMC4wMC4wMAotdW5zcHNjNyMzMS4xOS4xNi4wMS4wMCNBYnJhc2l2ZSBjdWJpYyBib3Jvem9uIG5pdHJhdGUgd2hlZWxzIzMxLjE5LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE5LjE2LjAyLjAwI0FicmFzaXZlIGRpYW1vbmQgd2hlZWxzIzMxLjE5LjE2LjAwLjAwCi11bnNwc2M3IzMxLjE5LjE2LjAzLjAwI1R1bmdzdGVuIGNhcmJpZGUgYWJyYXNpdmUgd2hlZWxzIzMxLjE5LjE2LjAwLjAwCi11bnNwc2M3IzMxLjIwLjAwLjAwLjAwI0FkaGVzaXZlcyBhbmQgc2VhbGFudHMjMzEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTUuMDAuMDAjVGFwZSMzMS4yMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNS4wMS4wMCNEdWN0IHRhcGUjMzEuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTUuMDIuMDAjRWxlY3RyaWNhbCBpbnN1bGF0aW5nIHRhcGUjMzEuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTUuMDMuMDAjTWFza2luZyB0YXBlIzMxLjIwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE1LjA0LjAwI0NhcnBldCB0YXBlIzMxLjIwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE1LjA1LjAwI0RvdWJsZSBzaWRlZCB0YXBlIzMxLjIwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE1LjA2LjAwI0Jpc21hbGVtaWRlIHRhcGUjMzEuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTUuMDcuMDAjRmliZXJnbGFzcyB0YXBlIzMxLjIwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE1LjA4LjAwI0dyYXBoaXRlIHRhcGUjMzEuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTUuMDkuMDAjTnlsb24gdGFwZSMzMS4yMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNS4xMC4wMCNSZXNpbiBpbXByZWduYXRlZCB0YXBlIzMxLjIwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE1LjExLjAwI1dpcmUgbWVzaCB0YXBlIzMxLjIwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE1LjEyLjAwI1RyYW5zcGFyZW50IHRhcGUjMzEuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTUuMTMuMDAjTm9uIHNraWQgc2FmZXR5IHRhcGVzIzMxLjIwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE1LjE0LjAwI1BvbHl0ZXRyYWZsdW9yb2V0aHlsZW5lIChQVEZFKSB0aHJlYWQgc2VhbGluZyB0YXBlIzMxLjIwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE1LjE1LjAwI1BhcGVyIHRhcGVzIzMxLjIwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE1LjE2LjAwI1JlZmxlY3RpdmUgdGFwZSMzMS4yMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNS4xNy4wMCNQYWNrYWdpbmcgdGFwZSMzMS4yMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNS4xOC4wMCNFbGVjdHJpY2FsbHkgY29uZHVjdGl2ZSB0YXBlIzMxLjIwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE1LjE5LjAwI1BpcGUgb3IgaG9zZSByZXBhaXIgdGFwZSMzMS4yMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNS4yMC4wMCNBaXNsZSBtYXJraW5nIHRhcGUjMzEuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTUuMjEuMDAjRm9pbCB0YXBlIzMxLjIwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE1LjIyLjAwI0FkaGVzaXZlIHRyYW5zZmVyIHRhcGUjMzEuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTUuMjMuMDAjQ2xvdGggdGFwZSMzMS4yMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNS4yNC4wMCNDb2xvciBjb2RpbmcgdGFwZSMzMS4yMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNS4yNS4wMCNWaW55bCB0YXBlIzMxLjIwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE1LjI2LjAwI01hZ25ldGljIHRhcGUjMzEuMjAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTYuMDAuMDAjT3RoZXIgYWRoZXNpdmVzIGFuZCBzZWFsYW50cyMzMS4yMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNi4wMS4wMCNDaGVtaWNhbCBhZGhlc2l2ZXMjMzEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTYuMDIuMDAjUGFzdGVzIzMxLjIwLjE2LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE2LjAzLjAwI0d1bXMjMzEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTYuMDQuMDAjUnViYmVyIGNlbWVudHMjMzEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTYuMDUuMDAjUHV0dGllcyMzMS4yMC4xNi4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNi4wNi4wMCNDYXVsa3MjMzEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTYuMDcuMDAjRXBveHkgYm9uZCMzMS4yMC4xNi4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNi4wOC4wMCNGb2FtIGFkaGVzaXZlcyMzMS4yMC4xNi4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNi4wOS4wMCNIb3QgbWVsdCBhZGhlc2l2ZXMjMzEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTYuMTAuMDAjR2x1ZXMjMzEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTYuMTEuMDAjRmlsbSBhZGhlc2l2ZXMjMzEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjAuMTYuMTIuMDAjVGhyZWFkIHNlYWxhbnRzIzMxLjIwLjE2LjAwLjAwCi11bnNwc2M3IzMxLjIwLjE2LjEzLjAwI1JlIHVzYWJsZSBhZGhlc2l2ZSMzMS4yMC4xNi4wMC4wMAotdW5zcHNjNyMzMS4yMC4xNi4xNC4wMCNTZWFsaW5nIHdheGVzIzMxLjIwLjE2LjAwLjAwCi11bnNwc2M3IzMxLjIxLjAwLjAwLjAwI1BhaW50cyBhbmQgcHJpbWVycyBhbmQgZmluaXNoZXMjMzEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTUuMDAuMDAjUGFpbnRzIGFuZCBwcmltZXJzIzMxLjIxLjAwLjAwLjAwCi11bnNwc2M3IzMxLjIxLjE1LjAxLjAwI0VuYW1lbCBwYWludHMjMzEuMjEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTUuMDIuMDAjV2F0ZXIgYmFzZWQgcGFpbnRzIzMxLjIxLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE1LjAzLjAwI1BpZ21lbnQgcGFpbnRzIzMxLjIxLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE1LjA0LjAwI0NvYXRpbmcgcGFpbnRzIzMxLjIxLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE1LjA1LjAwI09pbCBiYXNlZCBwYWludHMjMzEuMjEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTUuMDYuMDAjTGF0ZXggcGFpbnRzIzMxLjIxLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE1LjA3LjAwI1NwcmF5IHBhaW50cyMzMS4yMS4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMS4xNS4wOC4wMCNBY3J5bGljIHBhaW50cyMzMS4yMS4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMS4xNS4wOS4wMCNFbmFtZWwgcHJpbWVycyMzMS4yMS4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMS4xNS4xMC4wMCNQb2x5dXJldGhhbmUgcHJpbWVycyMzMS4yMS4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMS4xNS4xMS4wMCNVcmV0aGFuZSBwcmltZXJzIzMxLjIxLjE1LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE1LjEyLjAwI0xhdGV4IHByaW1lcnMjMzEuMjEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTYuMDAuMDAjUGFpbnQgYWRkaXRpdmVzIzMxLjIxLjAwLjAwLjAwCi11bnNwc2M3IzMxLjIxLjE2LjAxLjAwI0NhbGNpbWluZXMjMzEuMjEuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTYuMDIuMDAjVGV4dHVyaW5nIG1hdGVyaWFscyMzMS4yMS4xNi4wMC4wMAotdW5zcHNjNyMzMS4yMS4xNi4wMy4wMCNQYWludCBkcmllcnMjMzEuMjEuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTYuMDQuMDAjUGFpbnQgZXh0ZW5kZXJzIzMxLjIxLjE2LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE2LjA1LjAwI0FudGkgc2xpcCBhZ2VudHMjMzEuMjEuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTYuMDYuMDAjTGV2ZWxpbmcgYWdlbnRzIzMxLjIxLjE2LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE2LjA3LjAwI0FudGkgZm9hbWluZyBhZ2VudHMjMzEuMjEuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTcuMDAuMDAjTWlzY2VsbGFuZW91cyBmaW5pc2hlcyMzMS4yMS4wMC4wMC4wMAotdW5zcHNjNyMzMS4yMS4xNy4wMS4wMCNHbGF6ZXMjMzEuMjEuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTcuMDIuMDAjTHVzdGVycyMzMS4yMS4xNy4wMC4wMAotdW5zcHNjNyMzMS4yMS4xNy4wMy4wMCNMYWNxdWVycyMzMS4yMS4xNy4wMC4wMAotdW5zcHNjNyMzMS4yMS4xNy4wNC4wMCNTZWFsZXJzIzMxLjIxLjE3LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE3LjA1LjAwI1NoZWxsYWNzIzMxLjIxLjE3LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE3LjA2LjAwI1N0YWlucyMzMS4yMS4xNy4wMC4wMAotdW5zcHNjNyMzMS4yMS4xNy4wNy4wMCNWYXJuaXNoZXMjMzEuMjEuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTcuMDguMDAjUG93ZGVyIGNvYXQjMzEuMjEuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTguMDAuMDAjUGFpbnQgc29sdmVudHMgYW5kIHRoaW5uZXJzIzMxLjIxLjAwLjAwLjAwCi11bnNwc2M3IzMxLjIxLjE4LjAxLjAwI1BhaW50IG9yIHZhcm5pc2ggcmVtb3ZlcnMjMzEuMjEuMTguMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTguMDIuMDAjUGFpbnQgb3IgdmFybmlzaCBzdHJpcHBlcnMjMzEuMjEuMTguMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTguMDMuMDAjUGFpbnQgb3IgdmFybmlzaCB0aGlubmVycyMzMS4yMS4xOC4wMC4wMAotdW5zcHNjNyMzMS4yMS4xOS4wMC4wMCNQYWludCBhcHBsaWNhdG9ycyBhbmQgcGFpbnRpbmcgYWNjZXNzb3JpZXMjMzEuMjEuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTkuMDEuMDAjRHJvcCBjbG90aHMjMzEuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTkuMDIuMDAjRWRnaW5nIHRvb2xzIzMxLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE5LjAzLjAwI01hc2tpbmcgZXF1aXBtZW50IzMxLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE5LjA0LjAwI1BhaW50IGJydXNoZXMjMzEuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTkuMDUuMDAjUGFpbnQgbWl4ZXJzIzMxLjIxLjE5LjAwLjAwCi11bnNwc2M3IzMxLjIxLjE5LjA2LjAwI1BhaW50IHJvbGxlcnMjMzEuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTkuMDguMDAjUGFpbnQgc3ByYXllcnMjMzEuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTkuMDkuMDAjUGFpbnQgdHJheXMjMzEuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTkuMTAuMDAjUGFpbnQgbWl0dHMjMzEuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTkuMTIuMDAjVGVsZXNjb3BpbmcgcG9sZXMjMzEuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjEuMTkuMTMuMDAjUGFpbnQgbm96emxlcyMzMS4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMS4yMS4xOS4xNC4wMCNBaXIgYnJ1c2hlcyMzMS4yMS4xOS4wMC4wMAotdW5zcHNjNyMzMS4yMS4xOS4xNS4wMCNQYWludCBzdHJhaW5lcnMjMzEuMjEuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjIuMDAuMDAuMDAjRHllaW5nIGFuZCB0YW5uaW5nIGV4dHJhY3RzIzMxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjIyLjE1LjAwLjAwI0R5ZWluZyBwcm9kdWN0cyMzMS4yMi4wMC4wMC4wMAotdW5zcHNjNyMzMS4yMi4xNS4wMS4wMCNJbm9yZ2FuaWMgZHllcyMzMS4yMi4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMi4xNS4wMi4wMCNPcmdhbmljIGR5ZXMgb2YgYW5pbWFsIG9yaWdpbiMzMS4yMi4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMi4xNS4wMy4wMCNPcmdhbmljIGR5ZXMgb2YgdmVnZXRhYmxlIG9yaWdpbiMzMS4yMi4xNS4wMC4wMAotdW5zcHNjNyMzMS4yMi4xNi4wMC4wMCNUYW5uaW5nIHByb2R1Y3RzIzMxLjIyLjAwLjAwLjAwCi11bnNwc2M3IzMxLjIyLjE2LjAxLjAwI0lub3JnYW5pYyB0YW5uaW5nIGV4dHJhY3RzIzMxLjIyLjE2LjAwLjAwCi11bnNwc2M3IzMxLjIyLjE2LjAyLjAwI09yZ2FuaWMgdGFubmluZyBleHRyYWN0cyBvZiBhbmltYWwgb3JpZ2luIzMxLjIyLjE2LjAwLjAwCi11bnNwc2M3IzMxLjIyLjE2LjAzLjAwI09yZ2FuaWMgdGFubmluZyBleHRyYWN0cyBvZiB2ZWdldGFibGUgb3JpZ2luIzMxLjIyLjE2LjAwLjAwCi11bnNwc2M3IzMxLjIzLjAwLjAwLjAwI01hY2hpbmVkIHJhdyBzdG9jayMzMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMS4wMC4wMCNNYWNoaW5lZCBiYXIgc3RvY2sjMzEuMjMuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTEuMDEuMDAjQWx1bWludW0gbWFjaGluZWQgYmFyIHN0b2NrIzMxLjIzLjExLjAwLjAwCi11bnNwc2M3IzMxLjIzLjExLjAyLjAwI0JlcnlsbGl1bSBtYWNoaW5lZCBiYXIgc3RvY2sjMzEuMjMuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTEuMDMuMDAjQnJhc3MgbWFjaGluZWQgYmFyIHN0b2NrIzMxLjIzLjExLjAwLjAwCi11bnNwc2M3IzMxLjIzLjExLjA0LjAwI0Jyb256ZSBtYWNoaW5lZCBiYXIgc3RvY2sjMzEuMjMuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTEuMDUuMDAjQ29wcGVyIG1hY2hpbmVkIGJhciBzdG9jayMzMS4yMy4xMS4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMS4wNi4wMCNJcm9uIG1hY2hpbmVkIGJhciBzdG9jayMzMS4yMy4xMS4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMS4wNy4wMCNMZWFkIG1hY2hpbmVkIGJhciBzdG9jayMzMS4yMy4xMS4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMS4wOC4wMCNNYWduZXNpdW0gbWFjaGluZWQgYmFyIHN0b2NrIzMxLjIzLjExLjAwLjAwCi11bnNwc2M3IzMxLjIzLjExLjA5LjAwI1ByZWNpb3VzIG1ldGFsIG1hY2hpbmVkIGJhciBzdG9jayMzMS4yMy4xMS4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMS4xMC4wMCNTdGFpbmxlc3Mgc3RlZWwgbWFjaGluZWQgYmFyIHN0b2NrIzMxLjIzLjExLjAwLjAwCi11bnNwc2M3IzMxLjIzLjExLjExLjAwI1RpbiBtYWNoaW5lZCBiYXIgc3RvY2sjMzEuMjMuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTEuMTIuMDAjVGl0YW5pdW0gbWFjaGluZWQgYmFyIHN0b2NrIzMxLjIzLjExLjAwLjAwCi11bnNwc2M3IzMxLjIzLjExLjEzLjAwI1ppbmMgbWFjaGluZWQgYmFyIHN0b2NrIzMxLjIzLjExLjAwLjAwCi11bnNwc2M3IzMxLjIzLjExLjE0LjAwI05vbiBmZXJyb3VzIGFsbG95IG1hY2hpbmVkIGJhciBzdG9jayMzMS4yMy4xMS4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMS4xNS4wMCNGZXJyb3VzIGFsbG95IG1hY2hpbmVkIGJhciBzdG9jayMzMS4yMy4xMS4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMS4xNi4wMCNTdGVlbCBtYWNoaW5lZCBiYXIgc3RvY2sjMzEuMjMuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTEuMTcuMDAjQ29tcG9zaXRlIG1hY2hpbmVkIGJhciBzdG9jayMzMS4yMy4xMS4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMS4xOC4wMCNOaWNrZWwgYWxsb3kgbWFjaGluZWQgYmFyIHN0b2NrIzMxLjIzLjExLjAwLjAwCi11bnNwc2M3IzMxLjIzLjExLjE5LjAwI05vbiBtZXRhbGxpYyBtYWNoaW5lZCBiYXIgc3RvY2sjMzEuMjMuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTIuMDAuMDAjTWFjaGluZWQgcGxhdGUgc3RvY2sjMzEuMjMuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTIuMDEuMDAjQWx1bWludW0gbWFjaGluZWQgcGxhdGUgc3RvY2sjMzEuMjMuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTIuMDIuMDAjQmVyeWxsaXVtIG1hY2hpbmVkIHBsYXRlIHN0b2NrIzMxLjIzLjEyLjAwLjAwCi11bnNwc2M3IzMxLjIzLjEyLjAzLjAwI0JyYXNzIG1hY2hpbmVkIHBsYXRlIHN0b2NrIzMxLjIzLjEyLjAwLjAwCi11bnNwc2M3IzMxLjIzLjEyLjA0LjAwI0Jyb256ZSBtYWNoaW5lZCBwbGF0ZSBzdG9jayMzMS4yMy4xMi4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMi4wNS4wMCNDb3BwZXIgbWFjaGluZWQgcGxhdGUgc3RvY2sjMzEuMjMuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTIuMDYuMDAjSXJvbiBtYWNoaW5lZCBwbGF0ZSBzdG9jayMzMS4yMy4xMi4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMi4wNy4wMCNMZWFkIG1hY2hpbmVkIHBsYXRlIHN0b2NrIzMxLjIzLjEyLjAwLjAwCi11bnNwc2M3IzMxLjIzLjEyLjA4LjAwI01hZ25lc2l1bSBtYWNoaW5lZCBwbGF0ZSBzdG9jayMzMS4yMy4xMi4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMi4wOS4wMCNQcmVjaW91cyBtZXRhbCBtYWNoaW5lZCBwbGF0ZSBzdG9jayMzMS4yMy4xMi4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMi4xMC4wMCNTdGFpbmxlc3Mgc3RlZWwgbWFjaGluZWQgcGxhdGUgc3RvY2sjMzEuMjMuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTIuMTEuMDAjVGluIG1hY2hpbmVkIHBsYXRlIHN0b2NrIzMxLjIzLjEyLjAwLjAwCi11bnNwc2M3IzMxLjIzLjEyLjEyLjAwI1RpdGFuaXVtIG1hY2hpbmVkIHBsYXRlIHN0b2NrIzMxLjIzLjEyLjAwLjAwCi11bnNwc2M3IzMxLjIzLjEyLjEzLjAwI1ppbmMgbWFjaGluZWQgcGxhdGUgc3RvY2sjMzEuMjMuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTIuMTQuMDAjTm9uIGZlcnJvdXMgYWxsb3kgbWFjaGluZWQgcGxhdGUgc3RvY2sjMzEuMjMuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTIuMTUuMDAjRmVycm91cyBhbGxveSBtYWNoaW5lZCBwbGF0ZSBzdG9jayMzMS4yMy4xMi4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMi4xNi4wMCNTdGVlbCBtYWNoaW5lZCBwbGF0ZSBzdG9jayMzMS4yMy4xMi4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMi4xNy4wMCNDb21wb3NpdGUgbWFjaGluZWQgcGxhdGUgc3RvY2sjMzEuMjMuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTIuMTguMDAjTmlja2VsIGFsbG95IG1hY2hpbmVkIHBsYXRlIHN0b2NrIzMxLjIzLjEyLjAwLjAwCi11bnNwc2M3IzMxLjIzLjEyLjE5LjAwI05vbiBtZXRhbGxpYyBtYWNoaW5lZCBwbGF0ZSBzdG9jayMzMS4yMy4xMi4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMy4wMC4wMCNTaGltIHN0b2NrIzMxLjIzLjAwLjAwLjAwCi11bnNwc2M3IzMxLjIzLjEzLjAxLjAwI0JyYXNzIHNoaW0gc3RvY2sjMzEuMjMuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMjMuMTMuMDIuMDAjU3RlZWwgc2hpbSBzdG9jayMzMS4yMy4xMy4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMy4wMy4wMCNTdGFpbmxlc3Mgc3RlZWwgc2hpbSBzdG9jayMzMS4yMy4xMy4wMC4wMAotdW5zcHNjNyMzMS4yMy4xMy4wNC4wMCNBbHVtaW51bSBzaGltIHN0b2NrIzMxLjIzLjEzLjAwLjAwCi11bnNwc2M3IzMxLjIzLjEzLjA1LjAwI0NvcHBlciBzaGltIHN0b2NrIzMxLjIzLjEzLjAwLjAwCi11bnNwc2M3IzMxLjI0LjAwLjAwLjAwI0luZHVzdHJpYWwgb3B0aWNzIzMxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjI0LjE1LjAwLjAwI0xlbnNlcyBhbmQgcHJpc21zIzMxLjI0LjAwLjAwLjAwCi11bnNwc2M3IzMxLjI0LjE1LjAxLjAwI0xlbnNlcyMzMS4yNC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yNC4xNS4wMi4wMCNQcmlzbXMjMzEuMjQuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjQuMTYuMDAuMDAjT3B0aWNhbCBibGFua3MjMzEuMjQuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjQuMTYuMDEuMDAjRmlsdGVyIGJsYW5rcyMzMS4yNC4xNi4wMC4wMAotdW5zcHNjNyMzMS4yNC4xNi4wMi4wMCNHbGFzcyBkaXNrcyMzMS4yNC4xNi4wMC4wMAotdW5zcHNjNyMzMS4yNC4xNi4wMy4wMCNNb2xkZWQgZ2xhc3MjMzEuMjQuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjQuMTYuMDQuMDAjUHJpc20gYmxhbmtzIzMxLjI0LjE2LjAwLjAwCi11bnNwc2M3IzMxLjI0LjE2LjA1LjAwI1NpbGljb24gYmxhbmtzIzMxLjI0LjE2LjAwLjAwCi11bnNwc2M3IzMxLjI0LjE2LjA2LjAwI0dlcm1hbml1bSBibGFua3MjMzEuMjQuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjQuMTYuMDcuMDAjUm91bmQgYmFyIHN0b2NrIzMxLjI0LjE2LjAwLjAwCi11bnNwc2M3IzMxLjI0LjE2LjA4LjAwI1NxdWFyZSBiYXIgc3RvY2sjMzEuMjQuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMjQuMTYuMDkuMDAjV2l0bmVzcyBzYW1wbGUgYmxhbmtzIzMxLjI0LjE2LjAwLjAwCi11bnNwc2M3IzMxLjI0LjE2LjEwLjAwI0luZnJhcmVkIG9wdGljYWwgbWF0ZXJpYWwgYmxhbmtzIzMxLjI0LjE2LjAwLjAwCi11bnNwc2M3IzMxLjI0LjE3LjAwLjAwI01pcnJvcnMjMzEuMjQuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjQuMTcuMDEuMDAjRGlhbW9uZCB0dXJuZWQgbWlycm9ycyMzMS4yNC4xNy4wMC4wMAotdW5zcHNjNyMzMS4yNC4xNy4wMi4wMCNNZXRhbGxpYyBtaXJyb3JzIzMxLjI0LjE3LjAwLjAwCi11bnNwc2M3IzMxLjI0LjE3LjAzLjAwI1BhcmFib2xpYyBtaXJyb3JzIzMxLjI0LjE3LjAwLjAwCi11bnNwc2M3IzMxLjI0LjE3LjA0LjAwI1VuY29hdGVkIG1pcnJvcnMjMzEuMjQuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMjQuMTguMDAuMDAjT3B0aWNhbCBmaWx0ZXJzIzMxLjI0LjAwLjAwLjAwCi11bnNwc2M3IzMxLjI0LjE4LjAxLjAwI0Jyb2FkIGJhbmQgZmlsdGVycyMzMS4yNC4xOC4wMC4wMAotdW5zcHNjNyMzMS4yNC4xOC4wMi4wMCNHcmFkaWVudCBmaWx0ZXJzIzMxLjI0LjE4LjAwLjAwCi11bnNwc2M3IzMxLjI0LjE4LjAzLjAwI0luZnJhcmVkIGZpbHRlcnMjMzEuMjQuMTguMDAuMDAKLXVuc3BzYzcjMzEuMjQuMTguMDQuMDAjTGFzZXIgZmlsdGVycyMzMS4yNC4xOC4wMC4wMAotdW5zcHNjNyMzMS4yNC4xOC4wNS4wMCNOYXJyb3cgYmFuZCBmaWx0ZXJzIzMxLjI0LjE4LjAwLjAwCi11bnNwc2M3IzMxLjI0LjE4LjA2LjAwI1BlbGljbGUgZmlsdGVycyMzMS4yNC4xOC4wMC4wMAotdW5zcHNjNyMzMS4yNC4xOC4wNy4wMCNWaXN1YWwgZmlsdGVycyMzMS4yNC4xOC4wMC4wMAotdW5zcHNjNyMzMS4yNC4xOS4wMC4wMCNPcHRpY2FsIGRvbWVzIzMxLjI0LjAwLjAwLjAwCi11bnNwc2M3IzMxLjI0LjE5LjAxLjAwI1NwZWNpYWx0eSBkb21lcyMzMS4yNC4xOS4wMC4wMAotdW5zcHNjNyMzMS4yNC4xOS4wMi4wMCNEaWFtb25kIHR1cm5lZCBkb21lcyMzMS4yNC4xOS4wMC4wMAotdW5zcHNjNyMzMS4yNC4xOS4wMy4wMCNNZXRhbGxpYyBkb21lcyMzMS4yNC4xOS4wMC4wMAotdW5zcHNjNyMzMS4yNC4xOS4wNC4wMCNNb2xkZWQgZ2xhc3MgZG9tZXMjMzEuMjQuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjQuMTkuMDUuMDAjTW9sZGVkIHBvbHljYXJib25hdGUgZG9tZXMjMzEuMjQuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjQuMTkuMDYuMDAjUmVwbGljYXRlZCBkb21lcyMzMS4yNC4xOS4wMC4wMAotdW5zcHNjNyMzMS4yNC4xOS4wNy4wMCNTaGFwZWQgZG9tZXMjMzEuMjQuMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjQuMTkuMDguMDAjRnJhbmdpYmxlIGRvbWVzIzMxLjI0LjE5LjAwLjAwCi11bnNwc2M3IzMxLjI0LjIwLjAwLjAwI0xlbnMgYW5kIGxhc2VyIHdpbmRvd3MjMzEuMjQuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjQuMjAuMDEuMDAjRXh0ZXJuYWwgbGVucyBvciBsYXNlciB3aW5kb3dzIzMxLjI0LjIwLjAwLjAwCi11bnNwc2M3IzMxLjI0LjIwLjAyLjAwI0luZnJhcmVkIGxlbnMgb3IgbGFzZXIgd2luZG93cyMzMS4yNC4yMC4wMC4wMAotdW5zcHNjNyMzMS4yNC4yMC4wMy4wMCNWaXN1YWwgbGVucyBvciBsYXNlciB3aW5kb3dzIzMxLjI0LjIwLjAwLjAwCi11bnNwc2M3IzMxLjI0LjIxLjAwLjAwI09wdGljYWwgZGV2aWNlIGFjY2Vzc29yaWVzIzMxLjI0LjAwLjAwLjAwCi11bnNwc2M3IzMxLjI0LjIxLjAxLjAwI1ByaXNtIGhvbGRlcnMjMzEuMjQuMjEuMDAuMDAKLXVuc3BzYzcjMzEuMjQuMjEuMDIuMDAjTGVucyBob2xkZXJzIzMxLjI0LjIxLjAwLjAwCi11bnNwc2M3IzMxLjI0LjIxLjAzLjAwI09wdGljYWwgc2xpdHMjMzEuMjQuMjEuMDAuMDAKLXVuc3BzYzcjMzEuMjUuMDAuMDAuMDAjUG5ldW1hdGljIGFuZCBoeWRyYXVsaWMgYW5kIGVsZWN0cmljIGNvbnRyb2wgc3lzdGVtcyMzMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4yNS4xNS4wMC4wMCNBY3R1YXRvcnMjMzEuMjUuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjUuMTUuMDEuMDAjRWxlY3RyaWMgYWN0dWF0b3JzIzMxLjI1LjE1LjAwLjAwCi11bnNwc2M3IzMxLjI1LjE1LjAyLjAwI0VsZWN0cm9uaWMgYWN0dWF0b3JzIzMxLjI1LjE1LjAwLjAwCi11bnNwc2M3IzMxLjI1LjE1LjAzLjAwI0h5ZHJhdWxpYyBhY3R1YXRvcnMjMzEuMjUuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjUuMTUuMDQuMDAjUG5ldW1hdGljIGFjdHVhdG9ycyMzMS4yNS4xNS4wMC4wMAotdW5zcHNjNyMzMS4yNS4xNS4wNS4wMCNWYWx2ZSBhY3R1YXRvcnMjMzEuMjUuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjUuMTUuMDYuMDAjR2VhciBhY3R1YXRvcnMjMzEuMjUuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjUuMTUuMDcuMDAjUm90YXJ5IGFjdHVhdG9ycyMzMS4yNS4xNS4wMC4wMAotdW5zcHNjNyMzMS4yNS4xNS4wOC4wMCNQaG90b2VsZWN0cmljIGFjdHVhdG9ycyMzMS4yNS4xNS4wMC4wMAotdW5zcHNjNyMzMS4yNS4xNS4wOS4wMCNFbGVjdHJvbWFnbmV0aWMgYWN0dWF0b3JzIzMxLjI1LjE1LjAwLjAwCi11bnNwc2M3IzMxLjI1LjE1LjEwLjAwI1NvbGVub2lkcyMzMS4yNS4xNS4wMC4wMAotdW5zcHNjNyMzMS4yNS4xNS4xMS4wMCNMaW5lYXIgYWN0dWF0b3JzIzMxLjI1LjE1LjAwLjAwCi11bnNwc2M3IzMxLjI2LjAwLjAwLjAwI0hvdXNpbmdzIGFuZCBjYWJpbmV0cyBhbmQgY2FzaW5ncyMzMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4yNi4xNS4wMC4wMCNIb3VzaW5ncyBhbmQgY2FiaW5ldHMjMzEuMjYuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjYuMTUuMDEuMDAjUGxhc3RpYyBob3VzaW5ncyBvciBjYWJpbmV0cyMzMS4yNi4xNS4wMC4wMAotdW5zcHNjNyMzMS4yNi4xNS4wMi4wMCNNZXRhbCBob3VzaW5ncyBvciBjYWJpbmV0cyMzMS4yNi4xNS4wMC4wMAotdW5zcHNjNyMzMS4yNi4xNS4wMy4wMCNTdGVlbCBob3VzaW5ncyBvciBjYWJpbmV0cyMzMS4yNi4xNS4wMC4wMAotdW5zcHNjNyMzMS4yNi4xNS4wNC4wMCNHZWFyIGJveGVzIG9yIGhvdXNpbmdzIzMxLjI2LjE1LjAwLjAwCi11bnNwc2M3IzMxLjI2LjE2LjAwLjAwI1NoZWxscyBhbmQgY2FzaW5ncyMzMS4yNi4wMC4wMC4wMAotdW5zcHNjNyMzMS4yNi4xNi4wMS4wMCNQbGFzdGljIHNoZWxscyBvciBjYXNpbmdzIzMxLjI2LjE2LjAwLjAwCi11bnNwc2M3IzMxLjI2LjE2LjAyLjAwI01ldGFsIHNoZWxscyBvciBjYXNpbmdzIzMxLjI2LjE2LjAwLjAwCi11bnNwc2M3IzMxLjI2LjE2LjAzLjAwI1N0ZWVsIHNoZWxscyBvciBjYXNpbmdzIzMxLjI2LjE2LjAwLjAwCi11bnNwc2M3IzMxLjI3LjAwLjAwLjAwI01hY2hpbmUgbWFkZSBwYXJ0cyMzMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4yNy4xNS4wMC4wMCNHZW5lcmFsIG1hY2hpbmUgbWFkZSBwYXJ0cyMzMS4yNy4wMC4wMC4wMAotdW5zcHNjNyMzMS4yNy4xNS4wMS4wMCNNZXRhbCBnZW5lcmFsIG1hY2hpbmUgbWFkZSBwYXJ0cyMzMS4yNy4xNS4wMC4wMAotdW5zcHNjNyMzMS4yNy4xNS4wMi4wMCNOb24gbWV0YWwgZ2VuZXJhbCBtYWNoaW5lIG1hZGUgcGFydHMjMzEuMjcuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjcuMTYuMDAuMDAjU2NyZXcgbWFjaGluZSBtYWRlIHBhcnRzIzMxLjI3LjAwLjAwLjAwCi11bnNwc2M3IzMxLjI3LjE2LjAxLjAwI01ldGFsIHNjcmV3IG1hY2hpbmUgbWFkZSBwYXJ0cyMzMS4yNy4xNi4wMC4wMAotdW5zcHNjNyMzMS4yNy4xNi4wMi4wMCNOb24gbWV0YWwgc2NyZXcgbWFjaGluZSBtYWRlIHBhcnRzIzMxLjI3LjE2LjAwLjAwCi11bnNwc2M3IzMxLjI4LjAwLjAwLjAwI1N0YW1waW5ncyBhbmQgc2hlZXQgY29tcG9uZW50cyMzMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4yOC4xNS4wMC4wMCNTdGFtcGVkIGNvbXBvbmVudHMjMzEuMjguMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTUuMDEuMDAjU3RhbXBlZCBtZXRhbCBjb21wb25lbnRzIzMxLjI4LjE1LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE1LjAyLjAwI0FsdW1pbnVtIHN0YW1wZWQgY29tcG9uZW50cyMzMS4yOC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xNS4wMy4wMCNGZXJyb3VzIGFsbG95IHN0YW1wZWQgY29tcG9uZW50cyMzMS4yOC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xNS4wNC4wMCNJcm9uIHN0YW1wZWQgY29tcG9uZW50cyMzMS4yOC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xNS4wNS4wMCNOb24gZmVycm91cyBhbGxveSBzdGFtcGVkIGNvbXBvbmVudHMjMzEuMjguMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTUuMDYuMDAjU3RhaW5sZXNzIHN0ZWVsIHN0YW1wZWQgY29tcG9uZW50cyMzMS4yOC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xNS4wNy4wMCNDYXJib24gU3RlZWwgc3RhbXBlZCBjb21wb25lbnRzIzMxLjI4LjE1LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE1LjA4LjAwI01hZ25lc2l1bSBzdGFtcGVkIGNvbXBvbmVudHMjMzEuMjguMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTUuMDkuMDAjWmluYyBzdGFtcGVkIGNvbXBvbmVudHMjMzEuMjguMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTUuMTAuMDAjVGluIHN0YW1wZWQgY29tcG9uZW50cyMzMS4yOC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xNS4xMS4wMCNUaXRhbml1bSBzdGFtcGVkIGNvbXBvbmVudHMjMzEuMjguMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTUuMTIuMDAjQmVyeWxsaXVtIHN0YW1wZWQgY29tcG9uZW50cyMzMS4yOC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xNS4xMy4wMCNQcmVjaW91cyBtZXRhbCBzdGFtcGVkIGNvbXBvbmVudHMjMzEuMjguMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTUuMTQuMDAjQ29wcGVyIHN0YW1wZWQgY29tcG9uZW50cyMzMS4yOC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xNS4xNS4wMCNMZWFkIHN0YW1wZWQgY29tcG9uZW50cyMzMS4yOC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xNS4xNi4wMCNCcmFzcyBzdGFtcGVkIGNvbXBvbmVudHMjMzEuMjguMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTUuMTcuMDAjQnJvbnplIHN0YW1wZWQgY29tcG9uZW50cyMzMS4yOC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xNS4xOC4wMCNDb21wb3NpdGUgc3RhbXBlZCBjb21wb25lbnRzIzMxLjI4LjE1LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE1LjE5LjAwI05pY2tlbCBhbGxveSBzdGFtcGVkIGNvbXBvbmVudHMjMzEuMjguMTUuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTUuMjAuMDAjTm9uIG1ldGFsbGljIHN0YW1wZWQgY29tcG9uZW50cyMzMS4yOC4xNS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xNS4yMS4wMCNDb2F0ZWQgU3RhbXBpbmdzIzMxLjI4LjE1LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE2LjAwLjAwI0Zvcm1lZCBjb21wb25lbnRzIzMxLjI4LjAwLjAwLjAwCi11bnNwc2M3IzMxLjI4LjE2LjAxLjAwI0Zvcm1lZCBtZXRhbCBjb21wb25lbnRzIzMxLjI4LjE2LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE3LjAwLjAwI1dlbGRlZCBjb21wb25lbnRzIzMxLjI4LjAwLjAwLjAwCi11bnNwc2M3IzMxLjI4LjE3LjAxLjAwI1dlbGRlZCBtZXRhbCBjb21wb25lbnRzIzMxLjI4LjE3LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE4LjAwLjAwI1B1bmNoZWQgY29tcG9uZW50cyMzMS4yOC4wMC4wMC4wMAotdW5zcHNjNyMzMS4yOC4xOC4wMS4wMCNBbHVtaW51bSBwdW5jaGVkIGNvbXBvbmVudHMjMzEuMjguMTguMDAuMDAKLXVuc3BzYzcjMzEuMjguMTguMDIuMDAjRmVycm91cyBhbGxveSBwdW5jaGVkIGNvbXBvbmVudHMjMzEuMjguMTguMDAuMDAKLXVuc3BzYzcjMzEuMjguMTguMDMuMDAjSXJvbiBwdW5jaGVkIGNvbXBvbmVudHMjMzEuMjguMTguMDAuMDAKLXVuc3BzYzcjMzEuMjguMTguMDQuMDAjTm9uIGZlcnJvdXMgYWxsb3kgcHVuY2hlZCBjb21wb25lbnRzIzMxLjI4LjE4LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE4LjA1LjAwI1N0YWlubGVzcyBzdGVlbCBwdW5jaGVkIGNvbXBvbmVudHMjMzEuMjguMTguMDAuMDAKLXVuc3BzYzcjMzEuMjguMTguMDYuMDAjQ2FyYm9uIFN0ZWVsIHB1bmNoZWQgY29tcG9uZW50cyMzMS4yOC4xOC4wMC4wMAotdW5zcHNjNyMzMS4yOC4xOC4wNy4wMCNDb21wb3NpdGUgcHVuY2hlZCBjb21wb25lbnRzIzMxLjI4LjE4LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE4LjA4LjAwI05pY2tlbCBhbGxveSBwdW5jaGVkIGNvbXBvbmVudHMjMzEuMjguMTguMDAuMDAKLXVuc3BzYzcjMzEuMjguMTguMDkuMDAjTm9uIG1ldGFsbGljIHB1bmNoZWQgY29tcG9uZW50cyMzMS4yOC4xOC4wMC4wMAotdW5zcHNjNyMzMS4yOC4xOC4xMC4wMCNUaXRhbml1bSBwdW5jaGVkIGNvbXBvbmVudHMjMzEuMjguMTguMDAuMDAKLXVuc3BzYzcjMzEuMjguMTguMTEuMDAjQmVyeWxsaXVtIHB1bmNoZWQgY29tcG9uZW50cyMzMS4yOC4xOC4wMC4wMAotdW5zcHNjNyMzMS4yOC4xOC4xMi4wMCNQcmVjaW91cyBtZXRhbCBwdW5jaGVkIGNvbXBvbmVudHMjMzEuMjguMTguMDAuMDAKLXVuc3BzYzcjMzEuMjguMTguMTMuMDAjQ29wcGVyIHB1bmNoZWQgY29tcG9uZW50cyMzMS4yOC4xOC4wMC4wMAotdW5zcHNjNyMzMS4yOC4xOC4xNC4wMCNMZWFkIHB1bmNoZWQgY29tcG9uZW50cyMzMS4yOC4xOC4wMC4wMAotdW5zcHNjNyMzMS4yOC4xOC4xNS4wMCNCcmFzcyBwdW5jaGVkIGNvbXBvbmVudHMjMzEuMjguMTguMDAuMDAKLXVuc3BzYzcjMzEuMjguMTguMTYuMDAjQnJvbnplIHB1bmNoZWQgY29tcG9uZW50cyMzMS4yOC4xOC4wMC4wMAotdW5zcHNjNyMzMS4yOC4xOC4xNy4wMCNNYWduZXNpdW0gcHVuY2hlZCBjb21wb25lbnRzIzMxLjI4LjE4LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE4LjE4LjAwI1ppbmMgcHVuY2hlZCBjb21wb25lbnRzIzMxLjI4LjE4LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE4LjE5LjAwI1RpbiBwdW5jaGVkIGNvbXBvbmVudHMjMzEuMjguMTguMDAuMDAKLXVuc3BzYzcjMzEuMjguMTkuMDAuMDAjRHJhdyBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4wMC4wMC4wMAotdW5zcHNjNyMzMS4yOC4xOS4wMS4wMCNBbHVtaW51bSBkcmF3IGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjE5LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE5LjAyLjAwI0JlcnlsbGl1bSBkcmF3IGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjE5LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE5LjAzLjAwI0JyYXNzIGRyYXcgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTkuMDQuMDAjQnJvbnplIGRyYXcgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTkuMDUuMDAjQ29tcG9zaXRlIGRyYXcgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTkuMDYuMDAjQ29wcGVyIGRyYXcgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTkuMDcuMDAjRmVycm91cyBhbGxveSBkcmF3IGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjE5LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE5LjA4LjAwI0lyb24gZHJhdyBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4xOS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xOS4wOS4wMCNMZWFkIGRyYXcgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTkuMTAuMDAjTWFnbmVzaXVtIGRyYXcgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTkuMTEuMDAjTmlja2VsIGFsbG95IGRyYXcgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTkuMTIuMDAjTm9uIGZlcnJvdXMgYWxsb3kgZHJhdyBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4xOS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xOS4xMy4wMCNOb24gbWV0YWxsaWMgZHJhdyBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4xOS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xOS4xNC4wMCNQcmVjaW91cyBtZXRhbCBkcmF3IGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjE5LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE5LjE1LjAwI1N0YWlubGVzcyBzdGVlbCBkcmF3IGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjE5LjAwLjAwCi11bnNwc2M3IzMxLjI4LjE5LjE2LjAwI1N0ZWVsIGRyYXcgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTkuMTcuMDAjVGluIGRyYXcgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjguMTkuMTguMDAjVGl0YW5pdW0gZHJhdyBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4xOS4wMC4wMAotdW5zcHNjNyMzMS4yOC4xOS4xOS4wMCNaaW5jIGRyYXcgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMTkuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjAuMDAuMDAjSHlkcm8gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjAuMDEuMDAjQWx1bWludW0gaHlkcm8gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjAuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjAuMDIuMDAjQmVyeWxsaXVtIGh5ZHJvIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIwLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIwLjAzLjAwI0JyYXNzIGh5ZHJvIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIwLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIwLjA0LjAwI0Jyb256ZSBoeWRybyBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMC4wNS4wMCNDb21wb3NpdGUgaHlkcm8gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjAuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjAuMDYuMDAjQ29wcGVyIGh5ZHJvIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIwLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIwLjA3LjAwI0ZlcnJvdXMgYWxsb3kgaHlkcm8gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjAuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjAuMDguMDAjSXJvbiBoeWRybyBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMC4wOS4wMCNMZWFkIGh5ZHJvIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIwLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIwLjEwLjAwI01hZ25lc2l1bSBoeWRybyBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMC4xMS4wMCNOaWNrZWwgYWxsb3kgaHlkcm8gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjAuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjAuMTIuMDAjTm9uIGZlcnJvdXMgYWxsb3kgaHlkcm8gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjAuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjAuMTMuMDAjTm9uIG1ldGFsbGljIGh5ZHJvIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIwLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIwLjE0LjAwI1ByZWNpb3VzIG1ldGFsIGh5ZHJvIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIwLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIwLjE1LjAwI1N0YWlubGVzcyBzdGVlbCBoeWRybyBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMC4xNi4wMCNTdGVlbCBoeWRybyBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMC4xNy4wMCNUaW4gaHlkcm8gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjAuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjAuMTguMDAjVGl0YW5pdW0gaHlkcm8gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjAuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjAuMTkuMDAjWmluYyBoeWRybyBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMS4wMC4wMCNTcGluIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjAwLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIxLjAxLjAwI0FsdW1pbnVtIHNwaW4gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjEuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjEuMDIuMDAjQmVyeWxsaXVtIHNwaW4gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjEuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjEuMDMuMDAjQnJhc3Mgc3BpbiBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMS4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMS4wNC4wMCNCcm9uemUgc3BpbiBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMS4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMS4wNS4wMCNDb21wb3NpdGUgc3BpbiBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMS4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMS4wNi4wMCNDb3BwZXIgc3BpbiBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMS4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMS4wNy4wMCNGZXJyb3VzIGFsbG95IHNwaW4gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjEuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjEuMDguMDAjSXJvbiBzcGluIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIxLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIxLjA5LjAwI0xlYWQgc3BpbiBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMS4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMS4xMC4wMCNNYWduZXNpdW0gc3BpbiBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMS4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMS4xMS4wMCNOaWNrZWwgYWxsb3kgc3BpbiBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMS4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMS4xMi4wMCNOb24gZmVycm91cyBhbGxveSBzcGluIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIxLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIxLjEzLjAwI05vbiBtZXRhbGxpYyBzcGluIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIxLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIxLjE0LjAwI1ByZWNpb3VzIG1ldGFsIHNwaW4gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjEuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjEuMTUuMDAjU3RhaW5sZXNzIHN0ZWVsIHNwaW4gZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjEuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjEuMTYuMDAjU3RlZWwgc3BpbiBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMS4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMS4xNy4wMCNUaW4gc3BpbiBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMS4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMS4xOC4wMCNUaXRhbml1bSBzcGluIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIxLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIxLjE5LjAwI1ppbmMgc3BpbiBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMS4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMi4wMC4wMCNSb2xsIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjAwLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIyLjAxLjAwI0FsdW1pbnVtIHJvbGwgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjIuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjIuMDIuMDAjQmVyeWxsaXVtIHJvbGwgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjIuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjIuMDMuMDAjQnJhc3Mgcm9sbCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMi4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMi4wNC4wMCNCcm9uemUgcm9sbCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMi4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMi4wNS4wMCNDb21wb3NpdGUgcm9sbCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMi4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMi4wNi4wMCNDb3BwZXIgcm9sbCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMi4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMi4wNy4wMCNGZXJyb3VzIGFsbG95IHJvbGwgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjIuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjIuMDguMDAjSXJvbiByb2xsIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIyLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIyLjA5LjAwI0xlYWQgcm9sbCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMi4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMi4xMC4wMCNNYWduZXNpdW0gcm9sbCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMi4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMi4xMS4wMCNOaWNrZWwgYWxsb3kgcm9sbCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMi4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMi4xMi4wMCNOb24gZmVycm91cyBhbGxveSByb2xsIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIyLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIyLjEzLjAwI05vbiBtZXRhbGxpYyByb2xsIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIyLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIyLjE0LjAwI1ByZWNpb3VzIG1ldGFsIHJvbGwgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjIuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjIuMTUuMDAjU3RhaW5sZXNzIHN0ZWVsIHJvbGwgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjIuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjIuMTYuMDAjU3RlZWwgcm9sbCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMi4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMi4xNy4wMCNUaW4gcm9sbCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMi4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMi4xOC4wMCNUaXRhbml1bSByb2xsIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIyLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIyLjE5LjAwI1ppbmMgcm9sbCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMi4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMy4wMC4wMCNTdHJldGNoIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjAwLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIzLjAxLjAwI0FsdW1pbnVtIHN0cmV0Y2ggZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjMuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjMuMDIuMDAjQmVyeWxsaXVtIHN0cmV0Y2ggZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjMuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjMuMDMuMDAjQnJhc3Mgc3RyZXRjaCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMy4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMy4wNC4wMCNCcm9uemUgc3RyZXRjaCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMy4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMy4wNS4wMCNDb21wb3NpdGUgc3RyZXRjaCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMy4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMy4wNi4wMCNDb3BwZXIgc3RyZXRjaCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMy4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMy4wNy4wMCNGZXJyb3VzIGFsbG95IHN0cmV0Y2ggZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjMuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjMuMDguMDAjSXJvbiBzdHJldGNoIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIzLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIzLjA5LjAwI0xlYWQgc3RyZXRjaCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMy4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMy4xMC4wMCNNYWduZXNpdW0gc3RyZXRjaCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMy4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMy4xMS4wMCNOaWNrZWwgYWxsb3kgc3RyZXRjaCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMy4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMy4xMi4wMCNOb24gZmVycm91cyBhbGxveSBzdHJldGNoIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIzLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIzLjEzLjAwI05vbiBtZXRhbGxpYyBzdHJldGNoIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIzLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIzLjE0LjAwI1ByZWNpb3VzIG1ldGFsIHN0cmV0Y2ggZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjMuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjMuMTUuMDAjU3RhaW5sZXNzIHN0ZWVsIHN0cmV0Y2ggZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjMuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjMuMTYuMDAjU3RlZWwgc3RyZXRjaCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMy4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMy4xNy4wMCNUaW4gc3RyZXRjaCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMy4wMC4wMAotdW5zcHNjNyMzMS4yOC4yMy4xOC4wMCNUaXRhbml1bSBzdHJldGNoIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjIzLjAwLjAwCi11bnNwc2M3IzMxLjI4LjIzLjE5LjAwI1ppbmMgc3RyZXRjaCBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yMy4wMC4wMAotdW5zcHNjNyMzMS4yOC4yNC4wMC4wMCNFeHBsb3NpdmUgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjQuMDEuMDAjQWx1bWludW0gZXhwbG9zaXZlIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjI0LjAwLjAwCi11bnNwc2M3IzMxLjI4LjI0LjAyLjAwI0JlcnlsbGl1bSBleHBsb3NpdmUgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjQuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjQuMDMuMDAjQnJhc3MgZXhwbG9zaXZlIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjI0LjAwLjAwCi11bnNwc2M3IzMxLjI4LjI0LjA0LjAwI0Jyb256ZSBleHBsb3NpdmUgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjQuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjQuMDUuMDAjQ29tcG9zaXRlIGV4cGxvc2l2ZSBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yNC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yNC4wNi4wMCNDb3BwZXIgZXhwbG9zaXZlIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjI0LjAwLjAwCi11bnNwc2M3IzMxLjI4LjI0LjA3LjAwI0ZlcnJvdXMgYWxsb3kgZXhwbG9zaXZlIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjI0LjAwLjAwCi11bnNwc2M3IzMxLjI4LjI0LjA4LjAwI0lyb24gZXhwbG9zaXZlIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjI0LjAwLjAwCi11bnNwc2M3IzMxLjI4LjI0LjA5LjAwI0xlYWQgZXhwbG9zaXZlIGZvcm1lZCBjb21wb25lbnRzIzMxLjI4LjI0LjAwLjAwCi11bnNwc2M3IzMxLjI4LjI0LjEwLjAwI01hZ25lc2l1bSBleHBsb3NpdmUgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjQuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjQuMTEuMDAjTmlja2VsIGFsbG95IGV4cGxvc2l2ZSBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yNC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yNC4xMi4wMCNOb24gZmVycm91cyBhbGxveSBleHBsb3NpdmUgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjQuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjQuMTMuMDAjTm9uIG1ldGFsbGljIGV4cGxvc2l2ZSBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yNC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yNC4xNC4wMCNQcmVjaW91cyBtZXRhbCBleHBsb3NpdmUgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjQuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjQuMTUuMDAjU3RhaW5sZXNzIHN0ZWVsIGV4cGxvc2l2ZSBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yNC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yNC4xNi4wMCNTdGVlbCBleHBsb3NpdmUgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjQuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjQuMTcuMDAjVGluIGV4cGxvc2l2ZSBmb3JtZWQgY29tcG9uZW50cyMzMS4yOC4yNC4wMC4wMAotdW5zcHNjNyMzMS4yOC4yNC4xOC4wMCNUaXRhbml1bSBleHBsb3NpdmUgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjQuMDAuMDAKLXVuc3BzYzcjMzEuMjguMjQuMTkuMDAjWmluYyBleHBsb3NpdmUgZm9ybWVkIGNvbXBvbmVudHMjMzEuMjguMjQuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMDAuMDAuMDAjTWFjaGluZWQgZXh0cnVzaW9ucyMzMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMS4wMC4wMCNNYWNoaW5lZCBoeWRybyBzdGF0aWMgZXh0cnVzaW9ucyMzMS4yOS4wMC4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMS4wMS4wMCNBbHVtaW51bSBtYWNoaW5lZCBoeWRybyBzdGF0aWMgZXh0cnVzaW9ucyMzMS4yOS4xMS4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMS4wMi4wMCNCZXJ5bGxpdW0gbWFjaGluZWQgaHlkcm8gc3RhdGljIGV4dHJ1c2lvbnMjMzEuMjkuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTEuMDMuMDAjQnJhc3MgbWFjaGluZWQgaHlkcm8gc3RhdGljIGV4dHJ1c2lvbnMjMzEuMjkuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTEuMDQuMDAjQnJvbnplIG1hY2hpbmVkIGh5ZHJvIHN0YXRpYyBleHRydXNpb25zIzMxLjI5LjExLjAwLjAwCi11bnNwc2M3IzMxLjI5LjExLjA1LjAwI0NvcHBlciBtYWNoaW5lZCBoeWRybyBzdGF0aWMgZXh0cnVzaW9ucyMzMS4yOS4xMS4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMS4wNi4wMCNGZXJyb3VzIGFsbG95IG1hY2hpbmVkIGh5ZHJvIHN0YXRpYyBleHRydXNpb25zIzMxLjI5LjExLjAwLjAwCi11bnNwc2M3IzMxLjI5LjExLjA3LjAwI0xlYWQgbWFjaGluZWQgaHlkcm8gc3RhdGljIGV4dHJ1c2lvbnMjMzEuMjkuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTEuMDguMDAjTWFnbmVzaXVtIG1hY2hpbmVkIGh5ZHJvIHN0YXRpYyBleHRydXNpb25zIzMxLjI5LjExLjAwLjAwCi11bnNwc2M3IzMxLjI5LjExLjA5LjAwI05vbiBmZXJyb3VzIGFsbG95IG1hY2hpbmVkIGh5ZHJvIHN0YXRpYyBleHRydXNpb25zIzMxLjI5LjExLjAwLjAwCi11bnNwc2M3IzMxLjI5LjExLjEwLjAwI1BsYXN0aWMgbWFjaGluZWQgaHlkcm8gc3RhdGljIGV4dHJ1c2lvbnMjMzEuMjkuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTEuMTEuMDAjUHJlY2lvdXMgbWV0YWwgbWFjaGluZWQgaHlkcm8gc3RhdGljIGV4dHJ1c2lvbnMjMzEuMjkuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTEuMTIuMDAjUnViYmVyIG1hY2hpbmVkIGh5ZHJvIHN0YXRpYyBleHRydXNpb25zIzMxLjI5LjExLjAwLjAwCi11bnNwc2M3IzMxLjI5LjExLjEzLjAwI1N0YWlubGVzcyBzdGVlbCBtYWNoaW5lZCBoeWRybyBzdGF0aWMgZXh0cnVzaW9ucyMzMS4yOS4xMS4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMS4xNC4wMCNTdGVlbCBtYWNoaW5lZCBoeWRybyBzdGF0aWMgZXh0cnVzaW9ucyMzMS4yOS4xMS4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMS4xNS4wMCNUaW4gbWFjaGluZWQgaHlkcm8gc3RhdGljIGV4dHJ1c2lvbnMjMzEuMjkuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTEuMTYuMDAjVGl0YW5pdW0gbWFjaGluZWQgaHlkcm8gc3RhdGljIGV4dHJ1c2lvbnMjMzEuMjkuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTEuMTcuMDAjWmluYyBtYWNoaW5lZCBoeWRybyBzdGF0aWMgZXh0cnVzaW9ucyMzMS4yOS4xMS4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMS4xOC4wMCNDb21wb3NpdGUgbWFjaGluZWQgaHlkcm8gc3RhdGljIGV4dHJ1c2lvbnMjMzEuMjkuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTEuMTkuMDAjTmlja2VsIGFsbG95IG1hY2hpbmVkIGh5ZHJvIHN0YXRpYyBleHRydXNpb25zIzMxLjI5LjExLjAwLjAwCi11bnNwc2M3IzMxLjI5LjExLjIwLjAwI05vbiBtZXRhbGxpYyBtYWNoaW5lZCBoeWRybyBzdGF0aWMgZXh0cnVzaW9ucyMzMS4yOS4xMS4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMi4wMC4wMCNNYWNoaW5lZCBpbXBhY3QgZXh0cnVzaW9ucyMzMS4yOS4wMC4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMi4wMS4wMCNBbHVtaW51bSBtYWNoaW5lZCBpbXBhY3QgZXh0cnVzaW9ucyMzMS4yOS4xMi4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMi4wMi4wMCNCZXJ5bGxpdW0gbWFjaGluZWQgaW1wYWN0IGV4dHJ1c2lvbnMjMzEuMjkuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTIuMDMuMDAjQnJhc3MgbWFjaGluZWQgaW1wYWN0IGV4dHJ1c2lvbnMjMzEuMjkuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTIuMDQuMDAjQnJvbnplIG1hY2hpbmVkIGltcGFjdCBleHRydXNpb25zIzMxLjI5LjEyLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEyLjA1LjAwI0NvcHBlciBtYWNoaW5lZCBpbXBhY3QgZXh0cnVzaW9ucyMzMS4yOS4xMi4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMi4wNi4wMCNGZXJyb3VzIGFsbG95IG1hY2hpbmVkIGltcGFjdCBleHRydXNpb25zIzMxLjI5LjEyLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEyLjA3LjAwI0xlYWQgbWFjaGluZWQgaW1wYWN0IGV4dHJ1c2lvbnMjMzEuMjkuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTIuMDguMDAjTWFnbmVzaXVtIG1hY2hpbmVkIGltcGFjdCBleHRydXNpb25zIzMxLjI5LjEyLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEyLjA5LjAwI05vbiBmZXJyb3VzIGFsbG95IG1hY2hpbmVkIGltcGFjdCBleHRydXNpb25zIzMxLjI5LjEyLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEyLjEwLjAwI1BsYXN0aWMgbWFjaGluZWQgaW1wYWN0IGV4dHJ1c2lvbnMjMzEuMjkuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTIuMTEuMDAjUHJlY2lvdXMgbWV0YWwgbWFjaGluZWQgaW1wYWN0IGV4dHJ1c2lvbnMjMzEuMjkuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTIuMTIuMDAjUnViYmVyIG1hY2hpbmVkIGltcGFjdCBleHRydXNpb25zIzMxLjI5LjEyLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEyLjEzLjAwI1N0YWlubGVzcyBzdGVlbCBtYWNoaW5lZCBpbXBhY3QgZXh0cnVzaW9ucyMzMS4yOS4xMi4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMi4xNC4wMCNTdGVlbCBtYWNoaW5lZCBpbXBhY3QgZXh0cnVzaW9ucyMzMS4yOS4xMi4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMi4xNS4wMCNUaW4gbWFjaGluZWQgaW1wYWN0IGV4dHJ1c2lvbnMjMzEuMjkuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTIuMTYuMDAjVGl0YW5pdW0gbWFjaGluZWQgaW1wYWN0IGV4dHJ1c2lvbnMjMzEuMjkuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTIuMTcuMDAjWmluYyBtYWNoaW5lZCBpbXBhY3QgZXh0cnVzaW9ucyMzMS4yOS4xMi4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMi4xOC4wMCNDb21wb3NpdGUgbWFjaGluZWQgaW1wYWN0IGV4dHJ1c2lvbnMjMzEuMjkuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTIuMTkuMDAjTmlja2VsIGFsbG95IG1hY2hpbmVkIGltcGFjdCBleHRydXNpb25zIzMxLjI5LjEyLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEyLjIwLjAwI05vbiBtZXRhbGxpYyBtYWNoaW5lZCBpbXBhY3QgZXh0cnVzaW9ucyMzMS4yOS4xMi4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMy4wMC4wMCNNYWNoaW5lZCBjb2xkIGV4dHJ1c2lvbnMjMzEuMjkuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTMuMDEuMDAjQWx1bWludW0gbWFjaGluZWQgY29sZCBleHRydXNpb25zIzMxLjI5LjEzLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEzLjAyLjAwI0JlcnlsbGl1bSBtYWNoaW5lZCBjb2xkIGV4dHJ1c2lvbnMjMzEuMjkuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTMuMDMuMDAjQnJhc3MgbWFjaGluZWQgY29sZCBleHRydXNpb25zIzMxLjI5LjEzLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEzLjA0LjAwI0Jyb256ZSBtYWNoaW5lZCBjb2xkIGV4dHJ1c2lvbnMjMzEuMjkuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTMuMDUuMDAjQ29wcGVyIG1hY2hpbmVkIGNvbGQgZXh0cnVzaW9ucyMzMS4yOS4xMy4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMy4wNi4wMCNGZXJyb3VzIGFsbG95IG1hY2hpbmVkIGNvbGQgZXh0cnVzaW9ucyMzMS4yOS4xMy4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMy4wNy4wMCNMZWFkIG1hY2hpbmVkIGNvbGQgZXh0cnVzaW9ucyMzMS4yOS4xMy4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMy4wOC4wMCNNYWduZXNpdW0gbWFjaGluZWQgY29sZCBleHRydXNpb25zIzMxLjI5LjEzLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEzLjA5LjAwI05vbiBmZXJyb3VzIGFsbG95IG1hY2hpbmVkIGNvbGQgZXh0cnVzaW9ucyMzMS4yOS4xMy4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMy4xMC4wMCNQbGFzdGljIG1hY2hpbmVkIGNvbGQgZXh0cnVzaW9ucyMzMS4yOS4xMy4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMy4xMS4wMCNQcmVjaW91cyBtZXRhbCBtYWNoaW5lZCBjb2xkIGV4dHJ1c2lvbnMjMzEuMjkuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTMuMTIuMDAjUnViYmVyIG1hY2hpbmVkIGNvbGQgZXh0cnVzaW9ucyMzMS4yOS4xMy4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMy4xMy4wMCNTdGFpbmxlc3Mgc3RlZWwgbWFjaGluZWQgY29sZCBleHRydXNpb25zIzMxLjI5LjEzLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEzLjE0LjAwI1N0ZWVsIG1hY2hpbmVkIGNvbGQgZXh0cnVzaW9ucyMzMS4yOS4xMy4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMy4xNS4wMCNUaW4gbWFjaGluZWQgY29sZCBleHRydXNpb25zIzMxLjI5LjEzLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEzLjE2LjAwI1RpdGFuaXVtIG1hY2hpbmVkIGNvbGQgZXh0cnVzaW9ucyMzMS4yOS4xMy4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMy4xNy4wMCNaaW5jIG1hY2hpbmVkIGNvbGQgZXh0cnVzaW9ucyMzMS4yOS4xMy4wMC4wMAotdW5zcHNjNyMzMS4yOS4xMy4xOC4wMCNDb21wb3NpdGUgbWFjaGluZWQgY29sZCBleHRydXNpb25zIzMxLjI5LjEzLjAwLjAwCi11bnNwc2M3IzMxLjI5LjEzLjE5LjAwI05pY2tlbCBhbGxveSBtYWNoaW5lZCBjb2xkIGV4dHJ1c2lvbnMjMzEuMjkuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTMuMjAuMDAjTm9uIG1ldGFsbGljIG1hY2hpbmVkIGNvbGQgZXh0cnVzaW9ucyMzMS4yOS4xMy4wMC4wMAotdW5zcHNjNyMzMS4yOS4xNC4wMC4wMCNNYWNoaW5lZCBob3QgZXh0cnVzaW9ucyMzMS4yOS4wMC4wMC4wMAotdW5zcHNjNyMzMS4yOS4xNC4wMS4wMCNBbHVtaW51bSBtYWNoaW5lZCBob3QgZXh0cnVzaW9ucyMzMS4yOS4xNC4wMC4wMAotdW5zcHNjNyMzMS4yOS4xNC4wMi4wMCNCZXJ5bGxpdW0gbWFjaGluZWQgaG90IGV4dHJ1c2lvbnMjMzEuMjkuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTQuMDMuMDAjQnJhc3MgbWFjaGluZWQgaG90IGV4dHJ1c2lvbnMjMzEuMjkuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTQuMDQuMDAjQnJvbnplIG1hY2hpbmVkIGhvdCBleHRydXNpb25zIzMxLjI5LjE0LjAwLjAwCi11bnNwc2M3IzMxLjI5LjE0LjA1LjAwI0NvcHBlciBtYWNoaW5lZCBob3QgZXh0cnVzaW9ucyMzMS4yOS4xNC4wMC4wMAotdW5zcHNjNyMzMS4yOS4xNC4wNi4wMCNGZXJyb3VzIGFsbG95IG1hY2hpbmVkIGhvdCBleHRydXNpb25zIzMxLjI5LjE0LjAwLjAwCi11bnNwc2M3IzMxLjI5LjE0LjA3LjAwI0xlYWQgbWFjaGluZWQgaG90IGV4dHJ1c2lvbnMjMzEuMjkuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTQuMDguMDAjTWFnbmVzaXVtIG1hY2hpbmVkIGhvdCBleHRydXNpb25zIzMxLjI5LjE0LjAwLjAwCi11bnNwc2M3IzMxLjI5LjE0LjA5LjAwI05vbiBmZXJyb3VzIGFsbG95IG1hY2hpbmVkIGhvdCBleHRydXNpb25zIzMxLjI5LjE0LjAwLjAwCi11bnNwc2M3IzMxLjI5LjE0LjEwLjAwI1BsYXN0aWMgbWFjaGluZWQgaG90IGV4dHJ1c2lvbnMjMzEuMjkuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTQuMTEuMDAjUHJlY2lvdXMgbWV0YWwgbWFjaGluZWQgaG90IGV4dHJ1c2lvbnMjMzEuMjkuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTQuMTIuMDAjUnViYmVyIG1hY2hpbmVkIGhvdCBleHRydXNpb25zIzMxLjI5LjE0LjAwLjAwCi11bnNwc2M3IzMxLjI5LjE0LjEzLjAwI1N0YWlubGVzcyBzdGVlbCBtYWNoaW5lZCBob3QgZXh0cnVzaW9ucyMzMS4yOS4xNC4wMC4wMAotdW5zcHNjNyMzMS4yOS4xNC4xNC4wMCNTdGVlbCBtYWNoaW5lZCBob3QgZXh0cnVzaW9ucyMzMS4yOS4xNC4wMC4wMAotdW5zcHNjNyMzMS4yOS4xNC4xNS4wMCNUaW4gbWFjaGluZWQgaG90IGV4dHJ1c2lvbnMjMzEuMjkuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTQuMTYuMDAjVGl0YW5pdW0gbWFjaGluZWQgaG90IGV4dHJ1c2lvbnMjMzEuMjkuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTQuMTcuMDAjWmluYyBtYWNoaW5lZCBob3QgZXh0cnVzaW9ucyMzMS4yOS4xNC4wMC4wMAotdW5zcHNjNyMzMS4yOS4xNC4xOC4wMCNDb21wb3NpdGUgbWFjaGluZWQgaG90IGV4dHJ1c2lvbnMjMzEuMjkuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMjkuMTQuMTkuMDAjTmlja2VsIGFsbG95IG1hY2hpbmVkIGhvdCBleHRydXNpb25zIzMxLjI5LjE0LjAwLjAwCi11bnNwc2M3IzMxLjI5LjE0LjIwLjAwI05vbiAgIG1ldGFsbGljIG1hY2hpbmVkIGhvdCBleHRydXNpb25zIzMxLjI5LjE0LjAwLjAwCi11bnNwc2M3IzMxLjI5LjE1LjAwLjAwI01hY2hpbmVkIGltcGFjdCBleHRydXNpb25zIzMxLjI5LjAwLjAwLjAwCi11bnNwc2M3IzMxLjI5LjE2LjAwLjAwI01hY2hpbmVkIGNvbGQgZXh0cnVzaW9ucyMzMS4yOS4wMC4wMC4wMAotdW5zcHNjNyMzMS4yOS4xNy4wMC4wMCNNYWNoaW5lZCBob3QgZXh0cnVzaW9ucyMzMS4yOS4wMC4wMC4wMAotdW5zcHNjNyMzMS4yOS4xOC4wMC4wMCNNYWNoaW5lZCBoeWRybyBzdGF0aWMgZXh0cnVzaW9ucyMzMS4yOS4wMC4wMC4wMAotdW5zcHNjNyMzMS4zMC4wMC4wMC4wMCNNYWNoaW5lZCBmb3JnaW5ncyMzMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMC4wMC4wMCNNYWNoaW5lZCByb2xsZWQgcmluZyBmb3JnaW5ncyMzMS4zMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMS4wMC4wMCNNYWNoaW5lZCBvcGVuIGRpZSBmb3JnaW5ncyMzMS4zMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMS4wMS4wMCNOb24gZmVycm91cyBhbGxveSBvcGVuIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMS4wMi4wMCNGZXJyb3VzIGFsbG95IG9wZW4gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjExLjAwLjAwCi11bnNwc2M3IzMxLjMwLjExLjAzLjAwI1N0ZWVsIG9wZW4gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjExLjAwLjAwCi11bnNwc2M3IzMxLjMwLjExLjA0LjAwI1N0YWlubGVzcyBzdGVlbCBvcGVuIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMS4wNS4wMCNJcm9uIG9wZW4gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjExLjAwLjAwCi11bnNwc2M3IzMxLjMwLjExLjA2LjAwI0FsdW1pbnVtIG9wZW4gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjExLjAwLjAwCi11bnNwc2M3IzMxLjMwLjExLjA3LjAwI01hZ25lc2l1bSBvcGVuIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMS4wOC4wMCNUaXRhbml1bSBvcGVuIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMS4wOS4wMCNCZXJ5bGxpdW0gb3BlbiBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTEuMTAuMDAjQ29wcGVyIG9wZW4gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjExLjAwLjAwCi11bnNwc2M3IzMxLjMwLjExLjExLjAwI0JyYXNzIG9wZW4gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjExLjAwLjAwCi11bnNwc2M3IzMxLjMwLjExLjEyLjAwI0Jyb256ZSBvcGVuIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMS4xMy4wMCNaaW5jIG9wZW4gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjExLjAwLjAwCi11bnNwc2M3IzMxLjMwLjExLjE0LjAwI1RpbiBvcGVuIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMS4xNS4wMCNMZWFkIG9wZW4gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjExLjAwLjAwCi11bnNwc2M3IzMxLjMwLjExLjE2LjAwI1ByZWNpb3VzIG1ldGFsIG9wZW4gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjExLjAwLjAwCi11bnNwc2M3IzMxLjMwLjExLjE3LjAwI0NvbXBvc2l0ZSBvcGVuIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMS4xOC4wMCNOaWNrZWwgYWxsb3kgb3BlbiBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTEuMTkuMDAjTm9uIG1ldGFsbGljIG9wZW4gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjExLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEyLjAwLjAwI01hY2hpbmVkIGNsb3NlZCBkaWUgZm9yZ2luZ3MjMzEuMzAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTIuMDEuMDAjTm9uIGZlcnJvdXMgYWxsb3kgY2xvc2VkIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMi4wMi4wMCNGZXJyb3VzIGFsbG95IGNsb3NlZCBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTIuMDMuMDAjU3RlZWwgY2xvc2VkIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMi4wNC4wMCNTdGFpbmxlc3Mgc3RlZWwgY2xvc2VkIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMi4wNS4wMCNJcm9uIGNsb3NlZCBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTIuMDYuMDAjQWx1bWludW0gY2xvc2VkIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMi4wNy4wMCNNYWduZXNpdW0gY2xvc2VkIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMi4wOC4wMCNUaXRhbml1bSBjbG9zZWQgZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEyLjA5LjAwI0JlcnlsbGl1bSBjbG9zZWQgZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEyLjEwLjAwI0NvcHBlciBjbG9zZWQgZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEyLjExLjAwI0JyYXNzIGNsb3NlZCBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTIuMTIuMDAjQnJvbnplIGNsb3NlZCBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTIuMTMuMDAjWmluYyBjbG9zZWQgZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEyLjE0LjAwI1RpbiBjbG9zZWQgZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEyLjE1LjAwI0xlYWQgY2xvc2VkIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMi4xNi4wMCNQcmVjaW91cyBtZXRhbCBjbG9zZWQgZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEyLjE3LjAwI0NvbXBvc2l0ZSBjbG9zZWQgZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEyLjE4LjAwI05pY2tlbCBhbGxveSBjbG9zZWQgZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEyLjE5LjAwI05vbiBtZXRhbGxpYyBjbG9zZWQgZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEzLjAwLjAwI01hY2hpbmVkIGltcHJlc3Npb24gZGllIGZvcmdpbmdzIzMxLjMwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEzLjAxLjAwI05vbiBmZXJyb3VzIGFsbG95IGltcHJlc3Npb24gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEzLjAyLjAwI0ZlcnJvdXMgYWxsb3kgaW1wcmVzc2lvbiBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTMuMDMuMDAjU3RlZWwgaW1wcmVzc2lvbiBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTMuMDQuMDAjU3RhaW5sZXNzIHN0ZWVsIGltcHJlc3Npb24gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEzLjA1LjAwI0lyb24gaW1wcmVzc2lvbiBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTMuMDYuMDAjQWx1bWludW0gaW1wcmVzc2lvbiBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTMuMDcuMDAjTWFnbmVzaXVtIGltcHJlc3Npb24gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEzLjA4LjAwI1RpdGFuaXVtIGltcHJlc3Npb24gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEzLjA5LjAwI0JlcnlsbGl1bSBpbXByZXNzaW9uIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMy4xMC4wMCNDb3BwZXIgaW1wcmVzc2lvbiBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTMuMTEuMDAjQnJhc3MgaW1wcmVzc2lvbiBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTMuMTIuMDAjQnJvbnplIGltcHJlc3Npb24gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEzLjEzLjAwI1ppbmMgaW1wcmVzc2lvbiBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTMuMTQuMDAjVGluIGltcHJlc3Npb24gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEzLjE1LjAwI0xlYWQgaW1wcmVzc2lvbiBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTMuMTYuMDAjUHJlY2lvdXMgbWV0YWwgaW1wcmVzc2lvbiBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTMuMTcuMDAjQ29tcG9zaXRlIGltcHJlc3Npb24gZGllIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMwLjEzLjE4LjAwI05pY2tlbCBhbGxveSBpbXByZXNzaW9uIGRpZSBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMC4xMy4xOS4wMCNOb24gbWV0YWxsaWMgaW1wcmVzc2lvbiBkaWUgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTQuMDAuMDAjTWFjaGluZWQgZHJvcCBmb3JnaW5ncyMzMS4zMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNC4wMS4wMCNOb24gZmVycm91cyBhbGxveSBkcm9wIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMwLjE0LjAyLjAwI1ppbmMgZHJvcCBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNC4wMy4wMCNGZXJyb3VzIGFsbG95IGRyb3AgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTQuMDQuMDAjVGluIGRyb3AgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTQuMDUuMDAjTGVhZCBkcm9wIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMwLjE0LjA2LjAwI1N0ZWVsIGRyb3AgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTQuMDcuMDAjUHJlY2lvdXMgbWV0YWwgZHJvcCBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNC4wOC4wMCNTdGFpbmxlc3Mgc3RlZWwgZHJvcCBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNC4wOS4wMCNJcm9uIGRyb3AgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTQuMTAuMDAjQWx1bWludW0gZHJvcCBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNC4xMS4wMCNNYWduZXNpdW0gZHJvcCBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNC4xMi4wMCNUaXRhbml1bSBkcm9wIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMwLjE0LjEzLjAwI0JlcnlsbGl1bSBkcm9wIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMwLjE0LjE0LjAwI0NvcHBlciBkcm9wIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMwLjE0LjE1LjAwI0JyYXNzIGRyb3AgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTQuMTYuMDAjQnJvbnplIGRyb3AgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTQuMTcuMDAjQ29tcG9zaXRlIGRyb3AgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTQuMTguMDAjTmlja2VsIGFsbG95IGRyb3AgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTQuMTkuMDAjTm9uIG1ldGFsbGljIGRyb3AgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTUuMDAuMDAjTWFjaGluZWQgcm9sbGVkIHJpbmcgZm9yZ2luZ3MjMzEuMzAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTUuMDEuMDAjQWx1bWludW0gcm9sbGVkIHJpbmcgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTUuMDIuMDAjQmVyeWxsaXVtIHJvbGxlZCByaW5nIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMwLjE1LjAzLjAwI0JyYXNzIHJvbGxlZCByaW5nIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMwLjE1LjA0LjAwI0Jyb256ZSByb2xsZWQgcmluZyBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNS4wNS4wMCNDb3BwZXIgcm9sbGVkIHJpbmcgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTUuMDYuMDAjSXJvbiByb2xsZWQgcmluZyBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNS4wNy4wMCNMZWFkIHJvbGxlZCByaW5nIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMwLjE1LjA4LjAwI01hZ25lc2l1bSByb2xsZWQgcmluZyBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNS4wOS4wMCNQcmVjaW91cyBtZXRhbCByb2xsZWQgcmluZyBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNS4xMC4wMCNTdGFpbmxlc3Mgc3RlZWwgcm9sbGVkIHJpbmcgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTUuMTEuMDAjVGluIHJvbGxlZCByaW5nIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMwLjE1LjEyLjAwI1RpdGFuaXVtIHJvbGxlZCByaW5nIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMwLjE1LjEzLjAwI1ppbmMgcm9sbGVkIHJpbmcgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTUuMTQuMDAjTm9uIGZlcnJvdXMgYWxsb3kgcm9sbGVkIHJpbmcgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTUuMTUuMDAjRmVycm91cyBhbGxveSByb2xsZWQgcmluZyBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNS4xNi4wMCNTdGVlbCByb2xsZWQgcmluZyBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNS4xNy4wMCNDb21wb3NpdGUgcm9sbGVkIHJpbmcgbWFjaGluZWQgZm9yZ2luZ3MjMzEuMzAuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzAuMTUuMTguMDAjTmlja2VsIGFsbG95IHJvbGxlZCByaW5nIG1hY2hpbmVkIGZvcmdpbmdzIzMxLjMwLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMwLjE1LjE5LjAwI05vbiBtZXRhbGxpYyByb2xsZWQgcmluZyBtYWNoaW5lZCBmb3JnaW5ncyMzMS4zMC4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNi4wMC4wMCNNYWNoaW5lZCBvcGVuIGRpZSBmb3JnaW5ncyMzMS4zMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4zMC4xNy4wMC4wMCNNYWNoaW5lZCBjbG9zZWQgZGllIGZvcmdpbmdzIzMxLjMwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjMwLjE4LjAwLjAwI01hY2hpbmVkIGltcHJlc3Npb24gZGllIGZvcmdpbmdzIzMxLjMwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjMwLjE5LjAwLjAwI01hY2hpbmVkIGRyb3AgZm9yZ2luZ3MjMzEuMzAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMDAuMDAuMDAjRmFicmljYXRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTEuMDAuMDAjU29sdmVudCB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjAwLjAwLjAwCi11bnNwc2M3IzMxLjMxLjExLjAxLjAwI0FsdW1pbnVtIHNvbHZlbnQgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMS4wMi4wMCNDYXJib24gc3RlZWwgc29sdmVudCB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjExLjAwLjAwCi11bnNwc2M3IzMxLjMxLjExLjAzLjAwI0hhc3RhbGxveSBYIHNvbHZlbnQgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMS4wNC4wMCNJbmNvbmVsIHNvbHZlbnQgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMS4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgc29sdmVudCB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjExLjAwLjAwCi11bnNwc2M3IzMxLjMxLjExLjA2LjAwI05vbiBtZXRhbGxpYyBzb2x2ZW50IHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTEuMDcuMDAjT3RoZXIgZmVycm91cyBzb2x2ZW50IHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTEuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgc29sdmVudCB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjExLjAwLjAwCi11bnNwc2M3IzMxLjMxLjExLjA5LjAwI1N0YWlubGVzcyBzdGVlbCBzb2x2ZW50IHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTEuMTAuMDAjVGl0YW5pdW0gc29sdmVudCB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjExLjAwLjAwCi11bnNwc2M3IzMxLjMxLjExLjExLjAwI1dhc3BhbGxveSBzb2x2ZW50IHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTEuMTIuMDAjQ29wcGVyIHNvbHZlbnQgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMS4xMy4wMCNCcmFzcyBzb2x2ZW50IHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTIuMDAuMDAjUml2ZXRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTIuMDEuMDAjQWx1bWludW0gcml2ZXRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTIuMDIuMDAjQ2FyYm9uIHN0ZWVsIHJpdmV0ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMxLjEyLjAzLjAwI0hhc3RhbGxveSBYIHJpdmV0ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMxLjEyLjA0LjAwI0luY29uZWwgcml2ZXRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTIuMDUuMDAjTG93IGFsbG95IHN0ZWVsIHJpdmV0ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMxLjEyLjA2LjAwI05vbiBtZXRhbGxpYyByaXZldGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMi4wNy4wMCNPdGhlciBmZXJyb3VzIHJpdmV0ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMxLjEyLjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIHJpdmV0ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMxLjEyLjA5LjAwI1N0YWlubGVzcyBzdGVlbCByaXZldGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMi4xMC4wMCNUaXRhbml1bSByaXZldGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMi4xMS4wMCNXYXNwYWxsb3kgcml2ZXRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTIuMTIuMDAjQ29wcGVyIHJpdmV0ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMxLjEyLjEzLjAwI0JyYXNzIHJpdmV0ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMxLjEzLjAwLjAwI0JvbHRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTMuMDEuMDAjQWx1bWludW0gYm9sdGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMy4wMi4wMCNDYXJib24gc3RlZWwgYm9sdGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMy4wMy4wMCNIYXN0YWxsb3kgWCBib2x0ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMxLjEzLjA0LjAwI0luY29uZWwgYm9sdGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMy4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgYm9sdGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMy4wNi4wMCNOb24gbWV0YWxsaWMgYm9sdGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMy4wNy4wMCNPdGhlciBmZXJyb3VzIGJvbHRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTMuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgYm9sdGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMy4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgYm9sdGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMS4xMy4xMC4wMCNUaXRhbml1bSBib2x0ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMxLjEzLjExLjAwI1dhc3BhbGxveSBib2x0ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMxLjEzLjEyLjAwI0NvcHBlciBib2x0ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMxLjEzLjEzLjAwI0JyYXNzIGJvbHRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTQuMDAuMDAjVWx0cmEgdmlvbGV0IHdlbGRlZCAoVVYpIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4wMC4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNC4wMS4wMCNBbHVtaW51bSB1bHRyYSB2aW9sZXQgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNC4wMi4wMCNDYXJib24gc3RlZWwgdWx0cmEgdmlvbGV0IHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTQuMDMuMDAjSGFzdGFsbG95IFggdWx0cmEgdmlvbGV0IHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTQuMDQuMDAjSW5jb25lbCB1bHRyYSB2aW9sZXQgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNC4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgdWx0cmEgdmlvbGV0IHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTQuMDYuMDAjTm9uIG1ldGFsbGljIHVsdHJhIHZpb2xldCB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE0LjA3LjAwI090aGVyIGZlcnJvdXMgdWx0cmEgdmlvbGV0IHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTQuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgdWx0cmEgdmlvbGV0IHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTQuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIHVsdHJhIHZpb2xldCB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE0LjEwLjAwI1RpdGFuaXVtIHVsdHJhIHZpb2xldCB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE0LjExLjAwI1dhc3BhbGxveSB1bHRyYSB2aW9sZXQgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNC4xMi4wMCNDb3BwZXIgdWx0cmEgdmlvbGV0IHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTQuMTMuMDAjQnJhc3MgdWx0cmEgdmlvbGV0IHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTUuMDAuMDAjV2VsZGVkIG9yIGJyYXplZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTUuMDEuMDAjQWx1bWludW0gd2VsZGVkIG9yIGJyYXplZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTUuMDIuMDAjQ2FyYm9uIHN0ZWVsIHdlbGRlZCBvciBicmF6ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE1LjAzLjAwI0hhc3RhbGxveSBYIHdlbGRlZCBvciBicmF6ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE1LjA0LjAwI0luY29uZWwgd2VsZGVkIG9yIGJyYXplZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTUuMDUuMDAjTG93IGFsbG95IHN0ZWVsIHdlbGRlZCBvciBicmF6ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE1LjA2LjAwI05vbiBtZXRhbGxpYyB3ZWxkZWQgb3IgYnJhemVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNS4wNy4wMCNPdGhlciBmZXJyb3VzIHdlbGRlZCBvciBicmF6ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE1LjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIHdlbGRlZCBvciBicmF6ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE1LjA5LjAwI1N0YWlubGVzcyBzdGVlbCB3ZWxkZWQgb3IgYnJhemVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNS4xMC4wMCNUaXRhbml1bSB3ZWxkZWQgb3IgYnJhemVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNS4xMS4wMCNXYXNwYWxsb3kgd2VsZGVkIG9yIGJyYXplZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTUuMTIuMDAjQ29wcGVyIHdlbGRlZCBvciBicmF6ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE1LjEzLjAwI0JyYXNzIHdlbGRlZCBvciBicmF6ZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE2LjAwLjAwI1NvbmljIHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTYuMDEuMDAjQWx1bWludW0gc29uaWMgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNi4wMi4wMCNDYXJib24gc3RlZWwgc29uaWMgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNi4wMy4wMCNIYXN0YWxsb3kgWCBzb25pYyB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE2LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE2LjA0LjAwI0luY29uZWwgc29uaWMgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNi4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgc29uaWMgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNi4wNi4wMCNOb24gbWV0YWxsaWMgc29uaWMgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNi4wNy4wMCNPdGhlciBmZXJyb3VzIHNvbmljIHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTYuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgc29uaWMgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNi4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgc29uaWMgd2VsZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNi4xMC4wMCNUaXRhbml1bSBzb25pYyB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE2LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE2LjExLjAwI1dhc3BhbGxveSBzb25pYyB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE2LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE2LjEyLjAwI0NvcHBlciBzb25pYyB3ZWxkZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE2LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE2LjEzLjAwI0JyYXNzIHNvbmljIHdlbGRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTcuMDAuMDAjQm9uZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4wMC4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNy4wMS4wMCNBbHVtaW51bSBib25kZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE3LjAyLjAwI0NhcmJvbiBzdGVlbCBib25kZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE3LjAzLjAwI0hhc3RhbGxveSBYIGJvbmRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTcuMDQuMDAjSW5jb25lbCBib25kZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE3LjA1LjAwI0xvdyBhbGxveSBzdGVlbCBib25kZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE3LjA2LjAwI05vbiBtZXRhbGxpYyBib25kZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE3LjA3LjAwI090aGVyIGZlcnJvdXMgYm9uZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNy4wMC4wMAotdW5zcHNjNyMzMS4zMS4xNy4wOC4wMCNPdGhlciBub24gZmVycm91cyBib25kZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE3LjA5LjAwI1N0YWlubGVzcyBzdGVlbCBib25kZWQgcGlwZSBhc3NlbWJsaWVzIzMxLjMxLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMxLjE3LjEwLjAwI1RpdGFuaXVtIGJvbmRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTcuMTEuMDAjV2FzcGFsbG95IGJvbmRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTcuMTIuMDAjQ29wcGVyIGJvbmRlZCBwaXBlIGFzc2VtYmxpZXMjMzEuMzEuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzEuMTcuMTMuMDAjQnJhc3MgYm9uZGVkIHBpcGUgYXNzZW1ibGllcyMzMS4zMS4xNy4wMC4wMAotdW5zcHNjNyMzMS4zMi4wMC4wMC4wMCNGYWJyaWNhdGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjMyLjExLjAwLjAwI0JvbmRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4wMC4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMS4wMS4wMCNBbHVtaW51bSBib25kZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTEuMDIuMDAjQ2FyYm9uIHN0ZWVsIGJvbmRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMS4wMy4wMCNIYXN0YWxsb3kgWCBib25kZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTEuMDQuMDAjSW5jb25lbCBib25kZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTEuMDUuMDAjTG93IGFsbG95IHN0ZWVsIGJvbmRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMS4wNi4wMCNOb24gbWV0YWxsaWMgYm9uZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjExLjAwLjAwCi11bnNwc2M3IzMxLjMyLjExLjA3LjAwI090aGVyIGZlcnJvdXMgYm9uZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjExLjAwLjAwCi11bnNwc2M3IzMxLjMyLjExLjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIGJvbmRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMS4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgYm9uZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjExLjAwLjAwCi11bnNwc2M3IzMxLjMyLjExLjEwLjAwI1RpdGFuaXVtIGJvbmRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMS4xMS4wMCNXYXNwYWxsb3kgYm9uZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjExLjAwLjAwCi11bnNwc2M3IzMxLjMyLjExLjEyLjAwI0NvcHBlciBib25kZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTEuMTMuMDAjQnJhc3MgYm9uZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjExLjAwLjAwCi11bnNwc2M3IzMxLjMyLjEyLjAwLjAwI1NvbHZlbnQgd2VsZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjAwLjAwLjAwCi11bnNwc2M3IzMxLjMyLjEyLjAxLjAwI0FsdW1pbnVtIHNvbHZlbnQgd2VsZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMyLjEyLjAyLjAwI0NhcmJvbiBzdGVlbCBzb2x2ZW50IHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMi4wMy4wMCNIYXN0YWxsb3kgWCBzb2x2ZW50IHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMi4wNC4wMCNJbmNvbmVsIHNvbHZlbnQgd2VsZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMyLjEyLjA1LjAwI0xvdyBhbGxveSBzdGVlbCBzb2x2ZW50IHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMi4wNi4wMCNOb24gbWV0YWxsaWMgc29sdmVudCB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTIuMDcuMDAjT3RoZXIgZmVycm91cyBzb2x2ZW50IHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMi4wOC4wMCNPdGhlciBub24gZmVycm91cyBzb2x2ZW50IHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMi4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgc29sdmVudCB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTIuMTAuMDAjVGl0YW5pdW0gc29sdmVudCB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTIuMTEuMDAjV2FzcGFsbG95IHNvbHZlbnQgd2VsZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMyLjEyLjEyLjAwI0NvcHBlciBzb2x2ZW50IHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMi4xMy4wMCNCcmFzcyBzb2x2ZW50IHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMy4wMC4wMCNSaXZldGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjAwLjAwLjAwCi11bnNwc2M3IzMxLjMyLjEzLjAxLjAwI0FsdW1pbnVtIHJpdmV0ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTMuMDIuMDAjQ2FyYm9uIHN0ZWVsIHJpdmV0ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTMuMDMuMDAjSGFzdGFsbG95IFggcml2ZXRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMy4wNC4wMCNJbmNvbmVsIHJpdmV0ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTMuMDUuMDAjTG93IGFsbG95IHN0ZWVsIHJpdmV0ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTMuMDYuMDAjTm9uIG1ldGFsbGljIHJpdmV0ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTMuMDcuMDAjT3RoZXIgZmVycm91cyByaXZldGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMyLjEzLjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIHJpdmV0ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTMuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIHJpdmV0ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTMuMTAuMDAjVGl0YW5pdW0gcml2ZXRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMy4xMS4wMCNXYXNwYWxsb3kgcml2ZXRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMy4xMi4wMCNDb3BwZXIgcml2ZXRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMi4xMy4xMy4wMCNCcmFzcyByaXZldGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMyLjE0LjAwLjAwI1dlbGRlZCBvciBicmF6ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTQuMDEuMDAjQWx1bWludW0gd2VsZGVkIG9yIGJyYXplZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNC4wMi4wMCNDYXJib24gc3RlZWwgd2VsZGVkIG9yIGJyYXplZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNC4wMy4wMCNIYXN0YWxsb3kgWCB3ZWxkZWQgb3IgYnJhemVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE0LjA0LjAwI0luY29uZWwgd2VsZGVkIG9yIGJyYXplZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNC4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgd2VsZGVkIG9yIGJyYXplZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNC4wNi4wMCNOb24gbWV0YWxsaWMgd2VsZGVkIG9yIGJyYXplZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNC4wNy4wMCNPdGhlciBmZXJyb3VzIHdlbGRlZCBvciBicmF6ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTQuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgd2VsZGVkIG9yIGJyYXplZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNC4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgd2VsZGVkIG9yIGJyYXplZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNC4xMC4wMCNUaXRhbml1bSB3ZWxkZWQgb3IgYnJhemVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE0LjExLjAwI1dhc3BhbGxveSB3ZWxkZWQgb3IgYnJhemVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE0LjEyLjAwI0NvcHBlciB3ZWxkZWQgb3IgYnJhemVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE0LjEzLjAwI0JyYXNzIHdlbGRlZCBvciBicmF6ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTUuMDAuMDAjVWx0cmEgdmlvbGV0IHdlbGRlZCAoVVYpIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjAwLjAwLjAwCi11bnNwc2M3IzMxLjMyLjE1LjAxLjAwI0FsdW1pbnVtIHVsdHJhIHZpb2xldCB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTUuMDIuMDAjQ2FyYm9uIHN0ZWVsIHVsdHJhIHZpb2xldCB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTUuMDMuMDAjSGFzdGFsbG95IFggdWx0cmEgdmlvbGV0IHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNS4wNC4wMCNJbmNvbmVsIHVsdHJhIHZpb2xldCB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTUuMDUuMDAjTG93IGFsbG95IHN0ZWVsIHVsdHJhIHZpb2xldCB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTUuMDYuMDAjTm9uIG1ldGFsbGljIHVsdHJhIHZpb2xldCB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTUuMDcuMDAjT3RoZXIgZmVycm91cyB1bHRyYSB2aW9sZXQgd2VsZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE1LjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIHVsdHJhIHZpb2xldCB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTUuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIHVsdHJhIHZpb2xldCB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTUuMTAuMDAjVGl0YW5pdW0gdWx0cmEgdmlvbGV0IHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNS4xMS4wMCNXYXNwYWxsb3kgdWx0cmEgdmlvbGV0IHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNS4xMi4wMCNDb3BwZXIgdWx0cmEgdmlvbGV0IHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNS4xMy4wMCNCcmFzcyB1bHRyYSB2aW9sZXQgd2VsZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE2LjAwLjAwI1NvbmljIHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4wMC4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNi4wMS4wMCNBbHVtaW51bSBzb25pYyB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTYuMDIuMDAjQ2FyYm9uIHN0ZWVsIHNvbmljIHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNi4wMy4wMCNIYXN0YWxsb3kgWCBzb25pYyB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTYuMDQuMDAjSW5jb25lbCBzb25pYyB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTYuMDUuMDAjTG93IGFsbG95IHN0ZWVsIHNvbmljIHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNi4wNi4wMCNOb24gbWV0YWxsaWMgc29uaWMgd2VsZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE2LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE2LjA3LjAwI090aGVyIGZlcnJvdXMgc29uaWMgd2VsZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE2LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE2LjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIHNvbmljIHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNi4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgc29uaWMgd2VsZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE2LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE2LjEwLjAwI1RpdGFuaXVtIHNvbmljIHdlbGRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNi4xMS4wMCNXYXNwYWxsb3kgc29uaWMgd2VsZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE2LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE2LjEyLjAwI0NvcHBlciBzb25pYyB3ZWxkZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTYuMTMuMDAjQnJhc3Mgc29uaWMgd2VsZGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE2LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE3LjAwLjAwI0JvbHRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4wMC4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNy4wMS4wMCNBbHVtaW51bSBib2x0ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTcuMDIuMDAjQ2FyYm9uIHN0ZWVsIGJvbHRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNy4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNy4wMy4wMCNIYXN0YWxsb3kgWCBib2x0ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTcuMDQuMDAjSW5jb25lbCBib2x0ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTcuMDUuMDAjTG93IGFsbG95IHN0ZWVsIGJvbHRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNy4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNy4wNi4wMCNOb24gbWV0YWxsaWMgYm9sdGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE3LjA3LjAwI090aGVyIGZlcnJvdXMgYm9sdGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE3LjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIGJvbHRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNy4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNy4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgYm9sdGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE3LjEwLjAwI1RpdGFuaXVtIGJvbHRlZCBiYXIgc3RvY2sgYXNzZW1ibGllcyMzMS4zMi4xNy4wMC4wMAotdW5zcHNjNyMzMS4zMi4xNy4xMS4wMCNXYXNwYWxsb3kgYm9sdGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMyLjE3LjEyLjAwI0NvcHBlciBib2x0ZWQgYmFyIHN0b2NrIGFzc2VtYmxpZXMjMzEuMzIuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzIuMTcuMTMuMDAjQnJhc3MgYm9sdGVkIGJhciBzdG9jayBhc3NlbWJsaWVzIzMxLjMyLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMzLjAwLjAwLjAwI0ZhYnJpY2F0ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjMzLjExLjAwLjAwI0JvbmRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTEuMDEuMDAjQWx1bWludW0gYm9uZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMS4wMi4wMCNDYXJib24gc3RlZWwgYm9uZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMS4wMy4wMCNIYXN0YWxsb3kgWCBib25kZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjExLjAwLjAwCi11bnNwc2M3IzMxLjMzLjExLjA0LjAwI0luY29uZWwgYm9uZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMS4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgYm9uZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMS4wNi4wMCNOb24gbWV0YWxsaWMgYm9uZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMS4wNy4wMCNPdGhlciBmZXJyb3VzIGJvbmRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTEuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgYm9uZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMS4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgYm9uZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xMS4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMS4xMC4wMCNUaXRhbml1bSBib25kZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjExLjAwLjAwCi11bnNwc2M3IzMxLjMzLjExLjExLjAwI1dhc3BhbGxveSBib25kZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjExLjAwLjAwCi11bnNwc2M3IzMxLjMzLjExLjEyLjAwI0NvcHBlciBib25kZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjExLjAwLjAwCi11bnNwc2M3IzMxLjMzLjExLjEzLjAwI0JyYXNzIGJvbmRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTIuMDAuMDAjQm9sdGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4wMC4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMi4wMS4wMCNBbHVtaW51bSBib2x0ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMzLjEyLjAyLjAwI0NhcmJvbiBzdGVlbCBib2x0ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMzLjEyLjAzLjAwI0hhc3RhbGxveSBYIGJvbHRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTIuMDQuMDAjSW5jb25lbCBib2x0ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMzLjEyLjA1LjAwI0xvdyBhbGxveSBzdGVlbCBib2x0ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMzLjEyLjA2LjAwI05vbiBtZXRhbGxpYyBib2x0ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMzLjEyLjA3LjAwI090aGVyIGZlcnJvdXMgYm9sdGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMi4wOC4wMCNPdGhlciBub24gZmVycm91cyBib2x0ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMzLjEyLjA5LjAwI1N0YWlubGVzcyBzdGVlbCBib2x0ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjEyLjAwLjAwCi11bnNwc2M3IzMxLjMzLjEyLjEwLjAwI1RpdGFuaXVtIGJvbHRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTIuMTEuMDAjV2FzcGFsbG95IGJvbHRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTIuMTIuMDAjQ29wcGVyIGJvbHRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTIuMTMuMDAjQnJhc3MgYm9sdGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xMi4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMy4wMC4wMCNTb25pYyB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjAwLjAwLjAwCi11bnNwc2M3IzMxLjMzLjEzLjAxLjAwI0FsdW1pbnVtIHNvbmljIHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTMuMDIuMDAjQ2FyYm9uIHN0ZWVsIHNvbmljIHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTMuMDMuMDAjSGFzdGFsbG95IFggc29uaWMgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMy4wNC4wMCNJbmNvbmVsIHNvbmljIHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTMuMDUuMDAjTG93IGFsbG95IHN0ZWVsIHNvbmljIHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTMuMDYuMDAjTm9uIG1ldGFsbGljIHNvbmljIHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTMuMDcuMDAjT3RoZXIgZmVycm91cyBzb25pYyB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMzLjEzLjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIHNvbmljIHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTMuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIHNvbmljIHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTMuMTAuMDAjVGl0YW5pdW0gc29uaWMgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMy4xMS4wMCNXYXNwYWxsb3kgc29uaWMgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMy4xMi4wMCNDb3BwZXIgc29uaWMgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xMy4wMC4wMAotdW5zcHNjNyMzMS4zMy4xMy4xMy4wMCNCcmFzcyBzb25pYyB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjEzLjAwLjAwCi11bnNwc2M3IzMxLjMzLjE0LjAwLjAwI1VsdHJhIHZpb2xldCB3ZWxkZWQgKFVWKSBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTQuMDEuMDAjQWx1bWludW0gdWx0cmEgdmlvbGV0IHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTQuMDIuMDAjQ2FyYm9uIHN0ZWVsIHVsdHJhIHZpb2xldCB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE0LjAzLjAwI0hhc3RhbGxveSBYIHVsdHJhIHZpb2xldCB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE0LjA0LjAwI0luY29uZWwgdWx0cmEgdmlvbGV0IHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTQuMDUuMDAjTG93IGFsbG95IHN0ZWVsIHVsdHJhIHZpb2xldCB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE0LjA2LjAwI05vbiBtZXRhbGxpYyB1bHRyYSB2aW9sZXQgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNC4wNy4wMCNPdGhlciBmZXJyb3VzIHVsdHJhIHZpb2xldCB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE0LjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIHVsdHJhIHZpb2xldCB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE0LjA5LjAwI1N0YWlubGVzcyBzdGVlbCB1bHRyYSB2aW9sZXQgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNC4xMC4wMCNUaXRhbml1bSB1bHRyYSB2aW9sZXQgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNC4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNC4xMS4wMCNXYXNwYWxsb3kgdWx0cmEgdmlvbGV0IHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTQuMTIuMDAjQ29wcGVyIHVsdHJhIHZpb2xldCB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE0LjEzLjAwI0JyYXNzIHVsdHJhIHZpb2xldCB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE0LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE1LjAwLjAwI1NvbHZlbnQgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4wMC4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNS4wMS4wMCNBbHVtaW51bSBzb2x2ZW50IHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTUuMDIuMDAjQ2FyYm9uIHN0ZWVsIHNvbHZlbnQgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNS4wMy4wMCNIYXN0YWxsb3kgWCBzb2x2ZW50IHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTUuMDQuMDAjSW5jb25lbCBzb2x2ZW50IHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTUuMDUuMDAjTG93IGFsbG95IHN0ZWVsIHNvbHZlbnQgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNS4wNi4wMCNOb24gbWV0YWxsaWMgc29sdmVudCB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE1LjA3LjAwI090aGVyIGZlcnJvdXMgc29sdmVudCB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE1LjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIHNvbHZlbnQgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNS4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgc29sdmVudCB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE1LjEwLjAwI1RpdGFuaXVtIHNvbHZlbnQgd2VsZGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNS4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNS4xMS4wMCNXYXNwYWxsb3kgc29sdmVudCB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE1LjEyLjAwI0NvcHBlciBzb2x2ZW50IHdlbGRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTUuMTMuMDAjQnJhc3Mgc29sdmVudCB3ZWxkZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE1LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE2LjAwLjAwI1dlbGRlZCBvciBicmF6ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjAwLjAwLjAwCi11bnNwc2M3IzMxLjMzLjE2LjAxLjAwI0FsdW1pbnVtIHdlbGRlZCBvciBicmF6ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE2LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE2LjAyLjAwI0NhcmJvbiBzdGVlbCB3ZWxkZWQgb3IgYnJhemVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNi4wMy4wMCNIYXN0YWxsb3kgWCB3ZWxkZWQgb3IgYnJhemVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNi4wNC4wMCNJbmNvbmVsIHdlbGRlZCBvciBicmF6ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE2LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE2LjA1LjAwI0xvdyBhbGxveSBzdGVlbCB3ZWxkZWQgb3IgYnJhemVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNi4wNi4wMCNOb24gbWV0YWxsaWMgd2VsZGVkIG9yIGJyYXplZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTYuMDcuMDAjT3RoZXIgZmVycm91cyB3ZWxkZWQgb3IgYnJhemVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNi4wOC4wMCNPdGhlciBub24gZmVycm91cyB3ZWxkZWQgb3IgYnJhemVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNi4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgd2VsZGVkIG9yIGJyYXplZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTYuMTAuMDAjVGl0YW5pdW0gd2VsZGVkIG9yIGJyYXplZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTYuMTEuMDAjV2FzcGFsbG95IHdlbGRlZCBvciBicmF6ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE2LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE2LjEyLjAwI0NvcHBlciB3ZWxkZWQgb3IgYnJhemVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNi4xMy4wMCNCcmFzcyB3ZWxkZWQgb3IgYnJhemVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNi4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNy4wMC4wMCNSaXZldGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4wMC4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNy4wMS4wMCNBbHVtaW51bSByaXZldGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNy4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNy4wMi4wMCNDYXJib24gc3RlZWwgcml2ZXRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTcuMDMuMDAjSGFzdGFsbG95IFggcml2ZXRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTcuMDQuMDAjSW5jb25lbCByaXZldGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNy4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNy4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgcml2ZXRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTcuMDYuMDAjTm9uIG1ldGFsbGljIHJpdmV0ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE3LjA3LjAwI090aGVyIGZlcnJvdXMgcml2ZXRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTcuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgcml2ZXRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTcuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIHJpdmV0ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE3LjEwLjAwI1RpdGFuaXVtIHJpdmV0ZWQgc3RydWN0dXJhbCBhc3NlbWJsaWVzIzMxLjMzLjE3LjAwLjAwCi11bnNwc2M3IzMxLjMzLjE3LjExLjAwI1dhc3BhbGxveSByaXZldGVkIHN0cnVjdHVyYWwgYXNzZW1ibGllcyMzMS4zMy4xNy4wMC4wMAotdW5zcHNjNyMzMS4zMy4xNy4xMi4wMCNDb3BwZXIgcml2ZXRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzMuMTcuMTMuMDAjQnJhc3Mgcml2ZXRlZCBzdHJ1Y3R1cmFsIGFzc2VtYmxpZXMjMzEuMzMuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMDAuMDAuMDAjRmFicmljYXRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjM0LjExLjAwLjAwI1dlbGRlZCBvciBicmF6ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4wMC4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMS4wMS4wMCNBbHVtaW51bSB3ZWxkZWQgb3IgYnJhemVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTEuMDIuMDAjQ2FyYm9uIHN0ZWVsIHdlbGRlZCBvciBicmF6ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMS4wMy4wMCNIYXN0YWxsb3kgWCB3ZWxkZWQgb3IgYnJhemVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTEuMDQuMDAjSW5jb25lbCB3ZWxkZWQgb3IgYnJhemVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTEuMDUuMDAjTG93IGFsbG95IHN0ZWVsIHdlbGRlZCBvciBicmF6ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMS4wNi4wMCNOb24gbWV0YWxsaWMgd2VsZGVkIG9yIGJyYXplZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjExLjAwLjAwCi11bnNwc2M3IzMxLjM0LjExLjA3LjAwI090aGVyIGZlcnJvdXMgd2VsZGVkIG9yIGJyYXplZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjExLjAwLjAwCi11bnNwc2M3IzMxLjM0LjExLjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIHdlbGRlZCBvciBicmF6ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMS4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgd2VsZGVkIG9yIGJyYXplZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjExLjAwLjAwCi11bnNwc2M3IzMxLjM0LjExLjEwLjAwI1RpdGFuaXVtIHdlbGRlZCBvciBicmF6ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMS4xMS4wMCNXYXNwYWxsb3kgd2VsZGVkIG9yIGJyYXplZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjExLjAwLjAwCi11bnNwc2M3IzMxLjM0LjExLjEyLjAwI0NvcHBlciB3ZWxkZWQgb3IgYnJhemVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTEuMTMuMDAjQnJhc3Mgd2VsZGVkIG9yIGJyYXplZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjExLjAwLjAwCi11bnNwc2M3IzMxLjM0LjEyLjAwLjAwI1JpdmV0ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4wMC4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMi4wMS4wMCNBbHVtaW51bSByaXZldGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTIuMDIuMDAjQ2FyYm9uIHN0ZWVsIHJpdmV0ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMi4wMy4wMCNIYXN0YWxsb3kgWCByaXZldGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTIuMDQuMDAjSW5jb25lbCByaXZldGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTIuMDUuMDAjTG93IGFsbG95IHN0ZWVsIHJpdmV0ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMi4wNi4wMCNOb24gbWV0YWxsaWMgcml2ZXRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM0LjEyLjA3LjAwI090aGVyIGZlcnJvdXMgcml2ZXRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM0LjEyLjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIHJpdmV0ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMi4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgcml2ZXRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM0LjEyLjEwLjAwI1RpdGFuaXVtIHJpdmV0ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMi4xMS4wMCNXYXNwYWxsb3kgcml2ZXRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM0LjEyLjEyLjAwI0NvcHBlciByaXZldGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTIuMTMuMDAjQnJhc3Mgcml2ZXRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM0LjEzLjAwLjAwI1VsdHJhIHZpb2xldCB3ZWxkZWQgKFVWKSBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjAwLjAwLjAwCi11bnNwc2M3IzMxLjM0LjEzLjAxLjAwI0FsdW1pbnVtIHVsdHJhIHZpb2xldCB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMy4wMi4wMCNDYXJib24gc3RlZWwgdWx0cmEgdmlvbGV0IHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM0LjEzLjAzLjAwI0hhc3RhbGxveSBYIHVsdHJhIHZpb2xldCB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMy4wNC4wMCNJbmNvbmVsIHVsdHJhIHZpb2xldCB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMy4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgdWx0cmEgdmlvbGV0IHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM0LjEzLjA2LjAwI05vbiBtZXRhbGxpYyB1bHRyYSB2aW9sZXQgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTMuMDcuMDAjT3RoZXIgZmVycm91cyB1bHRyYSB2aW9sZXQgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTMuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgdWx0cmEgdmlvbGV0IHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM0LjEzLjA5LjAwI1N0YWlubGVzcyBzdGVlbCB1bHRyYSB2aW9sZXQgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTMuMTAuMDAjVGl0YW5pdW0gdWx0cmEgdmlvbGV0IHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM0LjEzLjExLjAwI1dhc3BhbGxveSB1bHRyYSB2aW9sZXQgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTMuMTIuMDAjQ29wcGVyIHVsdHJhIHZpb2xldCB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNC4xMy4xMy4wMCNCcmFzcyB1bHRyYSB2aW9sZXQgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTQuMDAuMDAjU29uaWMgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTQuMDEuMDAjQWx1bWludW0gc29uaWMgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTQuMDIuMDAjQ2FyYm9uIHN0ZWVsIHNvbmljIHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE0LjAzLjAwI0hhc3RhbGxveSBYIHNvbmljIHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE0LjA0LjAwI0luY29uZWwgc29uaWMgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTQuMDUuMDAjTG93IGFsbG95IHN0ZWVsIHNvbmljIHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE0LjA2LjAwI05vbiBtZXRhbGxpYyBzb25pYyB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNC4wNy4wMCNPdGhlciBmZXJyb3VzIHNvbmljIHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE0LjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIHNvbmljIHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE0LjA5LjAwI1N0YWlubGVzcyBzdGVlbCBzb25pYyB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNC4xMC4wMCNUaXRhbml1bSBzb25pYyB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNC4xMS4wMCNXYXNwYWxsb3kgc29uaWMgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTQuMTIuMDAjQ29wcGVyIHNvbmljIHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE0LjEzLjAwI0JyYXNzIHNvbmljIHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE1LjAwLjAwI1NvbHZlbnQgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTUuMDEuMDAjQWx1bWludW0gc29sdmVudCB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNS4wMi4wMCNDYXJib24gc3RlZWwgc29sdmVudCB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNS4wMy4wMCNIYXN0YWxsb3kgWCBzb2x2ZW50IHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE1LjA0LjAwI0luY29uZWwgc29sdmVudCB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNS4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgc29sdmVudCB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNS4wNi4wMCNOb24gbWV0YWxsaWMgc29sdmVudCB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNS4wNy4wMCNPdGhlciBmZXJyb3VzIHNvbHZlbnQgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTUuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgc29sdmVudCB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNS4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgc29sdmVudCB3ZWxkZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNS4xMC4wMCNUaXRhbml1bSBzb2x2ZW50IHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE1LjExLjAwI1dhc3BhbGxveSBzb2x2ZW50IHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE1LjEyLjAwI0NvcHBlciBzb2x2ZW50IHdlbGRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE1LjEzLjAwI0JyYXNzIHNvbHZlbnQgd2VsZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTYuMDAuMDAjQm9uZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTYuMDEuMDAjQWx1bWludW0gYm9uZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTYuMDIuMDAjQ2FyYm9uIHN0ZWVsIGJvbmRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE2LjAzLjAwI0hhc3RhbGxveSBYIGJvbmRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE2LjA0LjAwI0luY29uZWwgYm9uZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTYuMDUuMDAjTG93IGFsbG95IHN0ZWVsIGJvbmRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE2LjA2LjAwI05vbiBtZXRhbGxpYyBib25kZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNi4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNi4wNy4wMCNPdGhlciBmZXJyb3VzIGJvbmRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE2LjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIGJvbmRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE2LjA5LjAwI1N0YWlubGVzcyBzdGVlbCBib25kZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNi4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNi4xMC4wMCNUaXRhbml1bSBib25kZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNi4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNi4xMS4wMCNXYXNwYWxsb3kgYm9uZGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTYuMTIuMDAjQ29wcGVyIGJvbmRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE2LjEzLjAwI0JyYXNzIGJvbmRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE3LjAwLjAwI0JvbHRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjAwLjAwLjAwCi11bnNwc2M3IzMxLjM0LjE3LjAxLjAwI0FsdW1pbnVtIGJvbHRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE3LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE3LjAyLjAwI0NhcmJvbiBzdGVlbCBib2x0ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNy4wMy4wMCNIYXN0YWxsb3kgWCBib2x0ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNy4wNC4wMCNJbmNvbmVsIGJvbHRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE3LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE3LjA1LjAwI0xvdyBhbGxveSBzdGVlbCBib2x0ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNy4wNi4wMCNOb24gbWV0YWxsaWMgYm9sdGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTcuMDcuMDAjT3RoZXIgZmVycm91cyBib2x0ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNy4wOC4wMCNPdGhlciBub24gZmVycm91cyBib2x0ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNy4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgYm9sdGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTcuMTAuMDAjVGl0YW5pdW0gYm9sdGVkIHNoZWV0IGFzc2VtYmxpZXMjMzEuMzQuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzQuMTcuMTEuMDAjV2FzcGFsbG95IGJvbHRlZCBzaGVldCBhc3NlbWJsaWVzIzMxLjM0LjE3LjAwLjAwCi11bnNwc2M3IzMxLjM0LjE3LjEyLjAwI0NvcHBlciBib2x0ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNC4xNy4xMy4wMCNCcmFzcyBib2x0ZWQgc2hlZXQgYXNzZW1ibGllcyMzMS4zNC4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNS4wMC4wMC4wMCNGYWJyaWNhdGVkIHR1YmUgYXNzZW1ibGllcyMzMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMS4wMC4wMCNVbHRyYSB2aW9sZXQgd2VsZGVkIChVVikgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjAwLjAwLjAwCi11bnNwc2M3IzMxLjM1LjExLjAxLjAwI0FsdW1pbnVtIHVsdHJhIHZpb2xldCB3ZWxkZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjExLjAwLjAwCi11bnNwc2M3IzMxLjM1LjExLjAyLjAwI0NhcmJvbiBzdGVlbCB1bHRyYSB2aW9sZXQgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMS4wMy4wMCNIYXN0YWxsb3kgWCB1bHRyYSB2aW9sZXQgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMS4wNC4wMCNJbmNvbmVsIHVsdHJhIHZpb2xldCB3ZWxkZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjExLjAwLjAwCi11bnNwc2M3IzMxLjM1LjExLjA1LjAwI0xvdyBhbGxveSBzdGVlbCB1bHRyYSB2aW9sZXQgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMS4wNi4wMCNOb24gbWV0YWxsaWMgdWx0cmEgdmlvbGV0IHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTEuMDcuMDAjT3RoZXIgZmVycm91cyB1bHRyYSB2aW9sZXQgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMS4wOC4wMCNPdGhlciBub24gZmVycm91cyB1bHRyYSB2aW9sZXQgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMS4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgdWx0cmEgdmlvbGV0IHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTEuMTAuMDAjVGl0YW5pdW0gdWx0cmEgdmlvbGV0IHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTEuMTEuMDAjV2FzcGFsbG95IHVsdHJhIHZpb2xldCB3ZWxkZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjExLjAwLjAwCi11bnNwc2M3IzMxLjM1LjExLjEyLjAwI0NvcHBlciB1bHRyYSB2aW9sZXQgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMS4xMy4wMCNCcmFzcyB1bHRyYSB2aW9sZXQgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMi4wMC4wMCNXZWxkZWQgb3IgYnJhemVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4wMC4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMi4wMS4wMCNBbHVtaW51bSB3ZWxkZWQgb3IgYnJhemVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMi4wMi4wMCNDYXJib24gc3RlZWwgd2VsZGVkIG9yIGJyYXplZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTIuMDMuMDAjSGFzdGFsbG95IFggd2VsZGVkIG9yIGJyYXplZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTIuMDQuMDAjSW5jb25lbCB3ZWxkZWQgb3IgYnJhemVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMi4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgd2VsZGVkIG9yIGJyYXplZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTIuMDYuMDAjTm9uIG1ldGFsbGljIHdlbGRlZCBvciBicmF6ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM1LjEyLjA3LjAwI090aGVyIGZlcnJvdXMgd2VsZGVkIG9yIGJyYXplZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTIuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgd2VsZGVkIG9yIGJyYXplZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTIuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIHdlbGRlZCBvciBicmF6ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM1LjEyLjEwLjAwI1RpdGFuaXVtIHdlbGRlZCBvciBicmF6ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM1LjEyLjExLjAwI1dhc3BhbGxveSB3ZWxkZWQgb3IgYnJhemVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMi4xMi4wMCNDb3BwZXIgd2VsZGVkIG9yIGJyYXplZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTIuMTMuMDAjQnJhc3Mgd2VsZGVkIG9yIGJyYXplZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTMuMDAuMDAjUml2ZXRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTMuMDEuMDAjQWx1bWludW0gcml2ZXRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTMuMDIuMDAjQ2FyYm9uIHN0ZWVsIHJpdmV0ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM1LjEzLjAzLjAwI0hhc3RhbGxveSBYIHJpdmV0ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM1LjEzLjA0LjAwI0luY29uZWwgcml2ZXRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTMuMDUuMDAjTG93IGFsbG95IHN0ZWVsIHJpdmV0ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM1LjEzLjA2LjAwI05vbiBtZXRhbGxpYyByaXZldGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMy4wNy4wMCNPdGhlciBmZXJyb3VzIHJpdmV0ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM1LjEzLjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIHJpdmV0ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM1LjEzLjA5LjAwI1N0YWlubGVzcyBzdGVlbCByaXZldGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMy4xMC4wMCNUaXRhbml1bSByaXZldGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNS4xMy4xMS4wMCNXYXNwYWxsb3kgcml2ZXRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTMuMTIuMDAjQ29wcGVyIHJpdmV0ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM1LjEzLjEzLjAwI0JyYXNzIHJpdmV0ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM1LjE0LjAwLjAwI0JvbmRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTQuMDEuMDAjQWx1bWludW0gYm9uZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNC4wMi4wMCNDYXJib24gc3RlZWwgYm9uZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNC4wMy4wMCNIYXN0YWxsb3kgWCBib25kZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE0LjA0LjAwI0luY29uZWwgYm9uZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNC4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgYm9uZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNC4wNi4wMCNOb24gbWV0YWxsaWMgYm9uZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNC4wNy4wMCNPdGhlciBmZXJyb3VzIGJvbmRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTQuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgYm9uZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNC4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgYm9uZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNC4xMC4wMCNUaXRhbml1bSBib25kZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE0LjExLjAwI1dhc3BhbGxveSBib25kZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE0LjEyLjAwI0NvcHBlciBib25kZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE0LjEzLjAwI0JyYXNzIGJvbmRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTUuMDAuMDAjQm9sdGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4wMC4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNS4wMS4wMCNBbHVtaW51bSBib2x0ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE1LjAyLjAwI0NhcmJvbiBzdGVlbCBib2x0ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE1LjAzLjAwI0hhc3RhbGxveSBYIGJvbHRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTUuMDQuMDAjSW5jb25lbCBib2x0ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE1LjA1LjAwI0xvdyBhbGxveSBzdGVlbCBib2x0ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE1LjA2LjAwI05vbiBtZXRhbGxpYyBib2x0ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE1LjA3LjAwI090aGVyIGZlcnJvdXMgYm9sdGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNS4wOC4wMCNPdGhlciBub24gZmVycm91cyBib2x0ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE1LjA5LjAwI1N0YWlubGVzcyBzdGVlbCBib2x0ZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE1LjEwLjAwI1RpdGFuaXVtIGJvbHRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTUuMTEuMDAjV2FzcGFsbG95IGJvbHRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTUuMTIuMDAjQ29wcGVyIGJvbHRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTUuMTMuMDAjQnJhc3MgYm9sdGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNi4wMC4wMCNTb2x2ZW50IHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTYuMDEuMDAjQWx1bWludW0gc29sdmVudCB3ZWxkZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE2LjAyLjAwI0NhcmJvbiBzdGVlbCBzb2x2ZW50IHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTYuMDMuMDAjSGFzdGFsbG95IFggc29sdmVudCB3ZWxkZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE2LjA0LjAwI0luY29uZWwgc29sdmVudCB3ZWxkZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE2LjA1LjAwI0xvdyBhbGxveSBzdGVlbCBzb2x2ZW50IHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTYuMDYuMDAjTm9uIG1ldGFsbGljIHNvbHZlbnQgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNi4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNi4wNy4wMCNPdGhlciBmZXJyb3VzIHNvbHZlbnQgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNi4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNi4wOC4wMCNPdGhlciBub24gZmVycm91cyBzb2x2ZW50IHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTYuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIHNvbHZlbnQgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNi4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNi4xMC4wMCNUaXRhbml1bSBzb2x2ZW50IHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTYuMTEuMDAjV2FzcGFsbG95IHNvbHZlbnQgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNi4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNi4xMi4wMCNDb3BwZXIgc29sdmVudCB3ZWxkZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE2LjEzLjAwI0JyYXNzIHNvbHZlbnQgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNi4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNy4wMC4wMCNTb25pYyB3ZWxkZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjAwLjAwLjAwCi11bnNwc2M3IzMxLjM1LjE3LjAxLjAwI0FsdW1pbnVtIHNvbmljIHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTcuMDIuMDAjQ2FyYm9uIHN0ZWVsIHNvbmljIHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTcuMDMuMDAjSGFzdGFsbG95IFggc29uaWMgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNy4wNC4wMCNJbmNvbmVsIHNvbmljIHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTcuMDUuMDAjTG93IGFsbG95IHN0ZWVsIHNvbmljIHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTcuMDYuMDAjTm9uIG1ldGFsbGljIHNvbmljIHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTcuMDcuMDAjT3RoZXIgZmVycm91cyBzb25pYyB3ZWxkZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE3LjAwLjAwCi11bnNwc2M3IzMxLjM1LjE3LjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIHNvbmljIHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTcuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIHNvbmljIHdlbGRlZCB0dWJlIGFzc2VtYmxpZXMjMzEuMzUuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzUuMTcuMTAuMDAjVGl0YW5pdW0gc29uaWMgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNy4xMS4wMCNXYXNwYWxsb3kgc29uaWMgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNy4xMi4wMCNDb3BwZXIgc29uaWMgd2VsZGVkIHR1YmUgYXNzZW1ibGllcyMzMS4zNS4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNS4xNy4xMy4wMCNCcmFzcyBzb25pYyB3ZWxkZWQgdHViZSBhc3NlbWJsaWVzIzMxLjM1LjE3LjAwLjAwCi11bnNwc2M3IzMxLjM2LjAwLjAwLjAwI0ZhYnJpY2F0ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMS4wMC4wMCNCb25kZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4wMC4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMS4wMS4wMCNBbHVtaW51bSBib25kZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMS4wMi4wMCNDYXJib24gc3RlZWwgYm9uZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTEuMDMuMDAjSGFzdGFsbG95IFggYm9uZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTEuMDQuMDAjSW5jb25lbCBib25kZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMS4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgYm9uZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTEuMDYuMDAjTm9uIG1ldGFsbGljIGJvbmRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjExLjAwLjAwCi11bnNwc2M3IzMxLjM2LjExLjA3LjAwI090aGVyIGZlcnJvdXMgYm9uZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTEuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgYm9uZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTEuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIGJvbmRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjExLjAwLjAwCi11bnNwc2M3IzMxLjM2LjExLjEwLjAwI1RpdGFuaXVtIGJvbmRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjExLjAwLjAwCi11bnNwc2M3IzMxLjM2LjExLjExLjAwI1dhc3BhbGxveSBib25kZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMS4xMi4wMCNDb3BwZXIgYm9uZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTEuMTMuMDAjQnJhc3MgYm9uZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTIuMDAuMDAjQm9sdGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTIuMDEuMDAjQWx1bWludW0gYm9sdGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTIuMDIuMDAjQ2FyYm9uIHN0ZWVsIGJvbHRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM2LjEyLjAzLjAwI0hhc3RhbGxveSBYIGJvbHRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM2LjEyLjA0LjAwI0luY29uZWwgYm9sdGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTIuMDUuMDAjTG93IGFsbG95IHN0ZWVsIGJvbHRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM2LjEyLjA2LjAwI05vbiBtZXRhbGxpYyBib2x0ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMi4wNy4wMCNPdGhlciBmZXJyb3VzIGJvbHRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM2LjEyLjA4LjAwI090aGVyIG5vbiBmZXJyb3VzIGJvbHRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM2LjEyLjA5LjAwI1N0YWlubGVzcyBzdGVlbCBib2x0ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMi4xMC4wMCNUaXRhbml1bSBib2x0ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMi4xMS4wMCNXYXNwYWxsb3kgYm9sdGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTIuMTIuMDAjQ29wcGVyIGJvbHRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM2LjEyLjEzLjAwI0JyYXNzIGJvbHRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM2LjEzLjAwLjAwI1NvbHZlbnQgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTMuMDEuMDAjQWx1bWludW0gc29sdmVudCB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMy4wMi4wMCNDYXJib24gc3RlZWwgc29sdmVudCB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMy4wMy4wMCNIYXN0YWxsb3kgWCBzb2x2ZW50IHdlbGRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM2LjEzLjA0LjAwI0luY29uZWwgc29sdmVudCB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMy4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgc29sdmVudCB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMy4wNi4wMCNOb24gbWV0YWxsaWMgc29sdmVudCB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMy4wNy4wMCNPdGhlciBmZXJyb3VzIHNvbHZlbnQgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTMuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgc29sdmVudCB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMy4wOS4wMCNTdGFpbmxlc3Mgc3RlZWwgc29sdmVudCB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNi4xMy4xMC4wMCNUaXRhbml1bSBzb2x2ZW50IHdlbGRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM2LjEzLjExLjAwI1dhc3BhbGxveSBzb2x2ZW50IHdlbGRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM2LjEzLjEyLjAwI0NvcHBlciBzb2x2ZW50IHdlbGRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjEzLjAwLjAwCi11bnNwc2M3IzMxLjM2LjEzLjEzLjAwI0JyYXNzIHNvbHZlbnQgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTMuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTQuMDAuMDAjV2VsZGVkIG9yIGJyYXplZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjAwLjAwLjAwCi11bnNwc2M3IzMxLjM2LjE0LjAxLjAwI0FsdW1pbnVtIHdlbGRlZCBvciBicmF6ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNC4wMi4wMCNDYXJib24gc3RlZWwgd2VsZGVkIG9yIGJyYXplZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE0LjAzLjAwI0hhc3RhbGxveSBYIHdlbGRlZCBvciBicmF6ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNC4wNC4wMCNJbmNvbmVsIHdlbGRlZCBvciBicmF6ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNC4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgd2VsZGVkIG9yIGJyYXplZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE0LjA2LjAwI05vbiBtZXRhbGxpYyB3ZWxkZWQgb3IgYnJhemVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTQuMDcuMDAjT3RoZXIgZmVycm91cyB3ZWxkZWQgb3IgYnJhemVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTQuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgd2VsZGVkIG9yIGJyYXplZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE0LjA5LjAwI1N0YWlubGVzcyBzdGVlbCB3ZWxkZWQgb3IgYnJhemVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTQuMTAuMDAjVGl0YW5pdW0gd2VsZGVkIG9yIGJyYXplZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE0LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE0LjExLjAwI1dhc3BhbGxveSB3ZWxkZWQgb3IgYnJhemVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTQuMTIuMDAjQ29wcGVyIHdlbGRlZCBvciBicmF6ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNC4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNC4xMy4wMCNCcmFzcyB3ZWxkZWQgb3IgYnJhemVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTQuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTUuMDAuMDAjVWx0cmEgdmlvbGV0IHdlbGRlZCAoVVYpIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTUuMDEuMDAjQWx1bWludW0gdWx0cmEgdmlvbGV0IHdlbGRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE1LjAyLjAwI0NhcmJvbiBzdGVlbCB1bHRyYSB2aW9sZXQgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTUuMDMuMDAjSGFzdGFsbG95IFggdWx0cmEgdmlvbGV0IHdlbGRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE1LjA0LjAwI0luY29uZWwgdWx0cmEgdmlvbGV0IHdlbGRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE1LjA1LjAwI0xvdyBhbGxveSBzdGVlbCB1bHRyYSB2aW9sZXQgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTUuMDYuMDAjTm9uIG1ldGFsbGljIHVsdHJhIHZpb2xldCB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNS4wNy4wMCNPdGhlciBmZXJyb3VzIHVsdHJhIHZpb2xldCB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNS4wOC4wMCNPdGhlciBub24gZmVycm91cyB1bHRyYSB2aW9sZXQgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTUuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIHVsdHJhIHZpb2xldCB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNS4xMC4wMCNUaXRhbml1bSB1bHRyYSB2aW9sZXQgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTUuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTUuMTEuMDAjV2FzcGFsbG95IHVsdHJhIHZpb2xldCB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNS4xMi4wMCNDb3BwZXIgdWx0cmEgdmlvbGV0IHdlbGRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE1LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE1LjEzLjAwI0JyYXNzIHVsdHJhIHZpb2xldCB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNS4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNi4wMC4wMCNTb25pYyB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4wMC4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNi4wMS4wMCNBbHVtaW51bSBzb25pYyB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNi4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNi4wMi4wMCNDYXJib24gc3RlZWwgc29uaWMgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTYuMDMuMDAjSGFzdGFsbG95IFggc29uaWMgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTYuMDQuMDAjSW5jb25lbCBzb25pYyB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNi4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNi4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgc29uaWMgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTYuMDYuMDAjTm9uIG1ldGFsbGljIHNvbmljIHdlbGRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE2LjA3LjAwI090aGVyIGZlcnJvdXMgc29uaWMgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTYuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgc29uaWMgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTYuMDkuMDAjU3RhaW5sZXNzIHN0ZWVsIHNvbmljIHdlbGRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE2LjEwLjAwI1RpdGFuaXVtIHNvbmljIHdlbGRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE2LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE2LjExLjAwI1dhc3BhbGxveSBzb25pYyB3ZWxkZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNi4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNi4xMi4wMCNDb3BwZXIgc29uaWMgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTYuMTMuMDAjQnJhc3Mgc29uaWMgd2VsZGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTYuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTcuMDAuMDAjUml2ZXRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjAwLjAwLjAwCi11bnNwc2M3IzMxLjM2LjE3LjAxLjAwI0FsdW1pbnVtIHJpdmV0ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNy4wMi4wMCNDYXJib24gc3RlZWwgcml2ZXRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE3LjAzLjAwI0hhc3RhbGxveSBYIHJpdmV0ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNy4wNC4wMCNJbmNvbmVsIHJpdmV0ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNy4wNS4wMCNMb3cgYWxsb3kgc3RlZWwgcml2ZXRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE3LjA2LjAwI05vbiBtZXRhbGxpYyByaXZldGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTcuMDcuMDAjT3RoZXIgZmVycm91cyByaXZldGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTcuMDguMDAjT3RoZXIgbm9uIGZlcnJvdXMgcml2ZXRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE3LjA5LjAwI1N0YWlubGVzcyBzdGVlbCByaXZldGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTcuMTAuMDAjVGl0YW5pdW0gcml2ZXRlZCBwbGF0ZSBhc3NlbWJsaWVzIzMxLjM2LjE3LjAwLjAwCi11bnNwc2M3IzMxLjM2LjE3LjExLjAwI1dhc3BhbGxveSByaXZldGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzYuMTcuMTIuMDAjQ29wcGVyIHJpdmV0ZWQgcGxhdGUgYXNzZW1ibGllcyMzMS4zNi4xNy4wMC4wMAotdW5zcHNjNyMzMS4zNi4xNy4xMy4wMCNCcmFzcyByaXZldGVkIHBsYXRlIGFzc2VtYmxpZXMjMzEuMzYuMTcuMDAuMDAKLXVuc3BzYzcjMzEuMzcuMDAuMDAuMDAjUmVmcmFjdG9yaWVzIzMxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMxLjM3LjEwLjAwLjAwI0NlcmFtaWMgZmlicmUgcHJvZHVjdHMjMzEuMzcuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzcuMTAuMDEuMDAjSW5zdWxhdGlvbiBib2FyZHMjMzEuMzcuMTAuMDAuMDAKLXVuc3BzYzcjMzEuMzcuMTAuMDIuMDAjSW5zdWxhdGluZyB3b29sIzMxLjM3LjEwLjAwLjAwCi11bnNwc2M3IzMxLjM3LjExLjAwLjAwI1JlZnJhY3RvcnkgYnJpY2tzIzMxLjM3LjAwLjAwLjAwCi11bnNwc2M3IzMxLjM3LjExLjAxLjAwI011bGxpdGUgYnJpY2tzIzMxLjM3LjExLjAwLjAwCi11bnNwc2M3IzMxLjM3LjExLjAyLjAwI1NpbGxpbWFuaXRlIGJyaWNrcyMzMS4zNy4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNy4xMS4wMy4wMCNBY2lkIHJlc2lzdGFudCBicmlja3MjMzEuMzcuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzcuMTEuMDQuMDAjU2lsaWNhIGJyaWNrcyMzMS4zNy4xMS4wMC4wMAotdW5zcHNjNyMzMS4zNy4xMS4wNS4wMCNIaWdoIGFsdW1pbmEgYnJpY2tzIzMxLjM3LjExLjAwLjAwCi11bnNwc2M3IzMxLjM3LjExLjA2LjAwI0NhbGNpdW0gc2lsaWNhdGUgYmxvY2tzIzMxLjM3LjExLjAwLjAwCi11bnNwc2M3IzMxLjM3LjExLjA3LjAwI1NoYXBlZCBicmlja3MjMzEuMzcuMTEuMDAuMDAKLXVuc3BzYzcjMzEuMzcuMTIuMDAuMDAjQ2FzdGFibGVzIzMxLjM3LjAwLjAwLjAwCi11bnNwc2M3IzMxLjM3LjEyLjAxLjAwI0RlbnNlIGNhc3RhYmxlcyMzMS4zNy4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNy4xMi4wMi4wMCNJbnN1bGF0aW5nIGNhc3RhYmxlcyMzMS4zNy4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNy4xMi4wMy4wMCNMb3cgY2VtZW50IGNhc3RhYmxlcyMzMS4zNy4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNy4xMi4wNC4wMCNBY2lkIG9yIGFsa2FsaSByZXNpc3RhbnQgY2FzdGFibGUjMzEuMzcuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzcuMTIuMDUuMDAjQWJyYXNpb24gcmVzaXN0YW50IGNhc3RhYmxlIzMxLjM3LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM3LjEyLjA2LjAwI1NpYyBjYXN0YWJsZSMzMS4zNy4xMi4wMC4wMAotdW5zcHNjNyMzMS4zNy4xMi4wNy4wMCNTZWxmIGZsb3cgY2FzdGFibGUjMzEuMzcuMTIuMDAuMDAKLXVuc3BzYzcjMzEuMzcuMTIuMDguMDAjVGFidWxhciBhbHVtaW5hIGNhc3RhYmxlIzMxLjM3LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM3LjEyLjA5LjAwI0Vyb3Npb24gcmVzaXN0YW50IGNhc3RhYmxlIzMxLjM3LjEyLjAwLjAwCi11bnNwc2M3IzMxLjM3LjEzLjAwLjAwI1NoYXBlZCByZWZyYWN0b3JpZXMjMzEuMzcuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzcuMTMuMDEuMDAjUG9yb3VzIGJsb2NrcyMzMS4zNy4xMy4wMC4wMAotdW5zcHNjNyMzMS4zNy4xMy4wMi4wMCNaaXJjb24gbm96emxlcyMzMS4zNy4xMy4wMC4wMAotdW5zcHNjNyMzMS4zOC4wMC4wMC4wMCNNYWduZXRzIGFuZCBtYWduZXRpYyBtYXRlcmlhbHMjMzEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzguMTAuMDAuMDAjUGVybWFuZW50IG1hZ25ldHMjMzEuMzguMDAuMDAuMDAKLXVuc3BzYzcjMzEuMzguMTAuMDEuMDAjTG9kZSBzdG9uZSMzMS4zOC4xMC4wMC4wMAotdW5zcHNjNyMzMS4zOC4xMC4wMi4wMCNBbG5pY28gbWFnbmV0cyMzMS4zOC4xMC4wMC4wMAotdW5zcHNjNyMzMi4wMC4wMC4wMC4wMCNFbGVjdHJvbmljIENvbXBvbmVudHMgYW5kIFN1cHBsaWVzIzMyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzMyLjEwLjAwLjAwLjAwI1ByaW50ZWQgY2lyY3VpdHMgYW5kIGludGVncmF0ZWQgY2lyY3VpdHMgYW5kIG1pY3JvYXNzZW1ibGllcyMzMi4wMC4wMC4wMC4wMAotdW5zcHNjNyMzMi4xMC4xNS4wMC4wMCNQcmludGVkIGNpcmN1aXRzIGFuZCBjaXJjdWl0IGNhcmQgYXNzZW1ibGllcyMzMi4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMi4xMC4xNS4wMS4wMCNCYXJlIHByaW50ZWQgY2lyY3VpdCBib2FyZHMjMzIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTUuMDIuMDAjUHJpbnRlZCBjaXJjdWl0IGFzc2VtYmxpZXMgKFBDQXMpIzMyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMyLjEwLjE1LjAzLjAwI01peGVkIGNpcmN1aXQgYXNzZW1ibGllcyMzMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMi4xMC4xNS4wNC4wMCNTdXJmYWNlIG1vdW50IGNpcmN1aXQgYXNzZW1ibGllcyMzMi4xMC4xNS4wMC4wMAotdW5zcHNjNyMzMi4xMC4xNS4wNS4wMCNQbGF0ZWQgdGhyb3VnaCBjaXJjdWl0IGFzc2VtYmxpZXMjMzIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTUuMDYuMDAjRG91YmxlIHNpZGVkIGNpcmN1aXQgY2FyZHMjMzIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTUuMDcuMDAjQmFja3BsYW5lIGNpcmN1aXQgY2FyZHMjMzIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTUuMDguMDAjTXVsdGlsYXllciBjaXJjdWl0IGNhcmRzIzMyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMyLjEwLjE1LjA5LjAwI1NpbmdsZSBzaWRlZCBjaXJjdWl0IGNhcmRzIzMyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzMyLjEwLjE1LjEwLjAwI1ByaW50ZWQgd2lyZSBib2FyZHMjMzIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTYuMDAuMDAjRWxlY3Ryb25pYyBjb21wb25lbnRzIGZvciBtZW1vcnkgb3Igc21hcnQgY2FyZHMjMzIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTYuMDEuMDAjUmFuZG9tIGFjY2VzcyBtZW1vcnkgKFJBTSkjMzIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTYuMDIuMDAjRHluYW1pYyByYW5kb20gYWNjZXNzIG1lbW9yeSAoRFJBTSkjMzIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTYuMDMuMDAjU3RhdGljIHJhbmRvbSBhY2Nlc3MgbWVtb3J5IChTUkFNKSMzMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMi4xMC4xNi4wNC4wMCNQcm9ncmFtbWFibGUgcmVhZCBvbmx5IG1lbW9yeSAoUFJPTSkjMzIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTYuMDUuMDAjRXJhc2VhYmxlIHByb2dyYW1tYWJsZSByZWFkIG9ubHkgbWVtb3J5IChFUFJPTSkjMzIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTYuMDYuMDAjRWxlY3Ryb25pY2FsbHkgZXJhc2VhYmxlIHByb2dyYW1tYWJsZSByZWFkIG9ubHkgbWVtb3J5IChFRVBST00pIzMyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMyLjEwLjE2LjA3LjAwI01vbm9saXRpaGMgbWVtb3J5IGludGVncmF0ZWQgY2lyY3VpdHMgKE1NSUMpIzMyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMyLjEwLjE2LjA4LjAwI1JlYWQgb25seSBtZW1vcnkgKFJPTSkjMzIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTYuMDkuMDAjQXBwbGljYXRpb24gc3BlY2lmaWMgaW50ZWdyYXRlZCBjaXJjdWl0cyAoQVNJQykjMzIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTYuMTAuMDAjVGhpbiBxdWFkIGZsYXQgcGFjayAoVFFGUCkjMzIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTYuMTEuMDAjUHJvZ3JhbW1hYmxlIGFycmF5IGxvZ2ljIChQQUwpIzMyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMyLjEwLjE2LjEyLjAwI0dhdGUgYXJyYXkgbG9naWMgKEdBTCkjMzIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTYuMTMuMDAjVHJhbnNpc3RvciB0cmFuc2lzdG9yIGxvZ2ljIChUVEwpIzMyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMyLjEwLjE2LjE0LjAwI0VtaXR0ZXIgY291cGxlZCBsb2dpYyAoRUNMKSMzMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMi4xMC4xNi4xNS4wMCNCaXBvbGFyIG9yIG1ldGFsIG94aWRlIHNlbWljb25kdWN0b3IgdGVjaG5vbG9neSAoQklNT1MpIzMyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMyLjEwLjE2LjE2LjAwI0JpcG9sYXIgY29tcGxlbWVudGFyeSBtZXRhbCBveGlkZSBzZW1pY29uZHVjdG9yIHRlY2hub2xvZ3kgKEJJQ01PUykjMzIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTYuMTcuMDAjU21hcnQgY2FyZHMjMzIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTYuMTguMDAjVXBzY3JlZW5lZCBpbnRlZ3JhdGVkIGNpcmN1aXRzIzMyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMyLjEwLjE2LjE5LjAwI0xpbmVhciBpbnRlZ3JhdGVkIGNpcmN1aXRzIzMyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMyLjEwLjE2LjIwLjAwI0RpZ2l0YWwgaW50ZWdyYXRlZCBjaXJjdWl0cyMzMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMi4xMC4xNi4yMS4wMCNTeW5jaHJvbm91cyBkeW5hbWljIHJhbmRvbSBhY2Nlc3MgbWVtb3J5IChTRFJBTSkjMzIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTYuMjIuMDAjRmxhc2ggbWVtb3J5IzMyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzMyLjEwLjE2LjIzLjAwI1JhbWJ1cyBkeW5hbWljIHJhbmRvbSBhY2Nlc3MgbWVtb3J5UkRSQU0jMzIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTYuMjQuMDAjU3luY2hyb25vdXMgZ3JhcGhpYyByYW5kb20gYWNjZXNzIG1lbW9yeSBTR1JBTSMzMi4xMC4xNi4wMC4wMAotdW5zcHNjNyMzMi4xMC4xNy4wMC4wMCNIeWJyaWQgaW50ZWdyYXRlZCBjaXJjdWl0cyMzMi4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMi4xMC4xNy4wMS4wMCNNaWNyb3Byb2Nlc3NvcnMjMzIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTcuMDIuMDAjQ2xvY2sgb3NjaWxsYXRvcnMjMzIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMzIuMTAuMTcuMDMuMDAjTWljcm9jb250cm9sbGVycyMzMi4xMC4xNy4wMC4wMAotdW5zcHNjNyMzMi4xMC4xOC4wMC4wMCNVbm1vdW50ZWQgaW50ZWdyYXRlZCBjaXJjdWl0cyMzMi4xMC4wMC4wMC4wMAotdW5zcHNjNyMzMi4xMC4xOC4wMS4wMCNVbm1vdW50ZWQgZGllcyMzMi4xMC4xOC4wMC4wMAotdW5zcHNjNyMzMi4xMC4xOC4wMi4wMCNVbm1vdW50ZWQgd2FmZXJzIzMyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzMyLjEwLjE4LjAzLjAwI1VubW91bnRlZCBjaGlwcyMzMi4xMC4xOC4wMC4wMAotdW5zcHNjNyMzMi4xMS4wMC4wMC4wMCNEaW9kZXMgYW5kIHRyYW5zaXN0b3JzIGFuZCBzZW1pY29uZHVjdG9yIGRldmljZXMjMzIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTUuMDAuMDAjRGlvZGVzIzMyLjExLjAwLjAwLjAwCi11bnNwc2M3IzMyLjExLjE1LjAxLjAwI01pY3Jvd2F2ZSBkaW9kZXMjMzIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTUuMDIuMDAjWmVuZXIgZGlvZGVzIzMyLjExLjE1LjAwLjAwCi11bnNwc2M3IzMyLjExLjE1LjAzLjAwI0xpZ2h0IGVtaXR0aW5nIGRpb2RlcyAoTEVEcykjMzIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTUuMDQuMDAjU2Nob3R0a3kgZGlvZGVzIzMyLjExLjE1LjAwLjAwCi11bnNwc2M3IzMyLjExLjE1LjA1LjAwI1R1bm5lbCBkaW9kZXMjMzIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTUuMDYuMDAjUGhvdG9zZW5zaXRpdmUgZGlvZGVzIzMyLjExLjE1LjAwLjAwCi11bnNwc2M3IzMyLjExLjE1LjA3LjAwI1ZhcmlhYmxlIGNhcGFjaXRhbmNlIGRpb2RlcyMzMi4xMS4xNS4wMC4wMAotdW5zcHNjNyMzMi4xMS4xNS4wOC4wMCNTb2xhciBkaW9kZXMjMzIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTUuMDkuMDAjUG93ZXIgZGlvZGVzIzMyLjExLjE1LjAwLjAwCi11bnNwc2M3IzMyLjExLjE1LjEwLjAwI1JhZGlvIGZyZXF1ZW5jeSAoUkYpIGRpb2RlcyMzMi4xMS4xNS4wMC4wMAotdW5zcHNjNyMzMi4xMS4xNS4xMS4wMCNTbWFsbCBzaWduYWwgZGlvZGVzIzMyLjExLjE1LjAwLjAwCi11bnNwc2M3IzMyLjExLjE2LjAwLjAwI1RyYW5zaXN0b3JzIzMyLjExLjAwLjAwLjAwCi11bnNwc2M3IzMyLjExLjE2LjAxLjAwI1Bob3RvIHNlbnNpdGl2ZSB0cmFuc2lzdG9ycyMzMi4xMS4xNi4wMC4wMAotdW5zcHNjNyMzMi4xMS4xNi4wMi4wMCNGaWVsZCBlZmZlY3QgdHJhbnNpc3RvcnMgKEZFVCkjMzIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTYuMDMuMDAjTWV0YWwgb3hpZGUgc2lsaWNvbmUgZmllbGQgZWZmZWN0IHRyYW5zaXN0b3JzIChNT1NGRVQpIzMyLjExLjE2LjAwLjAwCi11bnNwc2M3IzMyLjExLjE2LjA0LjAwI1RyYW5zaXN0b3IgY2hpcHMjMzIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTYuMDUuMDAjVHJhbnNpc3RvciBkaWVzIzMyLjExLjE2LjAwLjAwCi11bnNwc2M3IzMyLjExLjE2LjA2LjAwI1RyYW5zaXN0b3Igd2FmZXJzIzMyLjExLjE2LjAwLjAwCi11bnNwc2M3IzMyLjExLjE2LjA3LjAwI0JpcG9sYXIgZGFybGluZ3RvbiBvciByYWRpbyBmcmVxdWVuY3kgKFJGKSB0cmFuc2lzdG9ycyMzMi4xMS4xNi4wMC4wMAotdW5zcHNjNyMzMi4xMS4xNi4wOC4wMCNVbmlqdW5jdGlvbiB0cmFuc2lzdG9ycyMzMi4xMS4xNi4wMC4wMAotdW5zcHNjNyMzMi4xMS4xNi4wOS4wMCNJbnN1bGF0ZWQgZ2F0ZSBiaXBvbGFyIHRyYW5zaXN0b3JzIChJR0JUKSMzMi4xMS4xNi4wMC4wMAotdW5zcHNjNyMzMi4xMS4xNi4xMC4wMCNKdW5jdGlvbiBmaWVsZCBlZmZlY3QgdHJhbnNpc3RvcnMgKEpGRVQpIzMyLjExLjE2LjAwLjAwCi11bnNwc2M3IzMyLjExLjE3LjAwLjAwI1NlbWljb25kdWN0b3IgZGV2aWNlcyMzMi4xMS4wMC4wMC4wMAotdW5zcHNjNyMzMi4xMS4xNy4wMS4wMCNQaG90b3ZvbHRhaWMgY2VsbHMjMzIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTcuMDIuMDAjVGh5cmlzdG9ycyMzMi4xMS4xNy4wMC4wMAotdW5zcHNjNyMzMi4xMS4xNy4wMy4wMCNEaWFjcyMzMi4xMS4xNy4wMC4wMAotdW5zcHNjNyMzMi4xMS4xNy4wNC4wMCNUcmlhY3MjMzIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTcuMDUuMDAjT3B0aWNhbCBjb3VwbGVkIGlzb2xhdG9ycyMzMi4xMS4xNy4wMC4wMAotdW5zcHNjNyMzMi4xMS4xNy4wNi4wMCNDcnlzdGFsIG9zY2lsbGF0b3JzIzMyLjExLjE3LjAwLjAwCi11bnNwc2M3IzMyLjExLjE4LjAwLjAwI0ludGVncmF0ZWQgY2lyY3VpdCBjb21wb25lbnRzIzMyLjExLjAwLjAwLjAwCi11bnNwc2M3IzMyLjExLjE4LjAxLjAwI0ludGVyZ3JhdGVkIGNpcmN1aXQgbGlkcyMzMi4xMS4xOC4wMC4wMAotdW5zcHNjNyMzMi4xMS4xOC4wMi4wMCNJbnRlZ3JhdGVkIGNpcmN1aXQgcGFja2FnZXMjMzIuMTEuMTguMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTguMDMuMDAjU3Vic3RyYXRlcyMzMi4xMS4xOC4wMC4wMAotdW5zcHNjNyMzMi4xMS4xOS4wMC4wMCNSYWRpbyBmcmVxdWVuY3kgKFJGKSBjb21wb25lbnRzIzMyLjExLjAwLjAwLjAwCi11bnNwc2M3IzMyLjExLjE5LjAxLjAwI0FtcGxpZmllcnMjMzIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTkuMDIuMDAjQXR0ZW51YXRvcnMjMzIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTkuMDMuMDAjQ2lyY3VsYXRvcnMjMzIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTkuMDQuMDAjQ291cGxlcnMjMzIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTkuMDUuMDAjRGVsYXkgbGluZXMjMzIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTkuMDYuMDAjRGV0ZWN0b3JzIzMyLjExLjE5LjAwLjAwCi11bnNwc2M3IzMyLjExLjE5LjA3LjAwI0R1bW15IGxvYWRzIzMyLjExLjE5LjAwLjAwCi11bnNwc2M3IzMyLjExLjE5LjA4LjAwI1JhZGlvIGZyZXF1ZW5jeSAoUkYpIGZpbHRlcnMjMzIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTkuMDkuMDAjSXNvbGF0b3JzIzMyLjExLjE5LjAwLjAwCi11bnNwc2M3IzMyLjExLjE5LjEwLjAwI01peGVycyMzMi4xMS4xOS4wMC4wMAotdW5zcHNjNyMzMi4xMS4xOS4xMS4wMCNQaGFzZSBzaGlmdGVycyMzMi4xMS4xOS4wMC4wMAotdW5zcHNjNyMzMi4xMS4xOS4xMi4wMCNQb3dlciBkaXZpZGVycyMzMi4xMS4xOS4wMC4wMAotdW5zcHNjNyMzMi4xMS4xOS4xMy4wMCNXYXZlIHR1YmUgYW1wbGlmaWVycyMzMi4xMS4xOS4wMC4wMAotdW5zcHNjNyMzMi4xMS4xOS4xNC4wMCNUZXJtaW5hdGlvbnMjMzIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjMzIuMTEuMTkuMTUuMDAjTW9kdWxhdG9ycyMzMi4xMS4xOS4wMC4wMAotdW5zcHNjNyMzMi4xMi4wMC4wMC4wMCNQcmludGVkIGNvbXBvbmVudHMjMzIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzIuMTIuMTUuMDAuMDAjQ2FwYWNpdG9ycyMzMi4xMi4wMC4wMC4wMAotdW5zcHNjNyMzMi4xMi4xNS4wMS4wMCNGaXhlZCBjYXBhY2l0b3JzIzMyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzMyLjEyLjE1LjAyLjAwI1ZhcmlhYmxlIGNhcGFjaXRvcnMgb3IgdmFyYWN0b3JzIzMyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzMyLjEyLjE1LjAzLjAwI0FkanVzdGFibGUgcHJlIHNldCBjYXBhY2l0b3JzIzMyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzMyLjEyLjE1LjA0LjAwI0NhcGFjaXRvciBuZXR3b3JrcyMzMi4xMi4xNS4wMC4wMAotdW5zcHNjNyMzMi4xMi4xNi4wMC4wMCNSZXNpc3RvcnMjMzIuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMzIuMTIuMTYuMDEuMDAjVGhlcm1pc3RvcnMjMzIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTIuMTYuMDIuMDAjRnVzaXN0b3JzIzMyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzMyLjEyLjE2LjAzLjAwI1ZhcmlhYmxlIHJlc2lzdG9ycyBvciB2YXJpc3RvcnMjMzIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjMzIuMTIuMTYuMDQuMDAjRml4ZWQgY2FyYm9uIHJlc2lzdG9ycyMzMi4xMi4xNi4wMC4wMAotdW5zcHNjNyMzMi4xMi4xNi4wNS4wMCNGaXhlZCB0aGljayBmaWxtIHJlc2lzdG9ycyMzMi4xMi4xNi4wMC4wMAotdW5zcHNjNyMzMi4xMi4xNi4wNi4wMCNGaXhlZCB0aGluIGZpbG0gcmVzaXN0b3JzIzMyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzMyLjEyLjE2LjA3LjAwI1Jlc2lzdG9yIG5ldHdvcmtzIzMyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzMyLjEyLjE2LjA4LjAwI1dpcmUgd291bmQgcmVzaXN0b3JzIzMyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzMyLjEyLjE3LjAwLjAwI0Rpc2NyZXRlIGNvbXBvbmVudHMjMzIuMTIuMDAuMDAuMDAKLXVuc3BzYzcjMzIuMTIuMTcuMDEuMDAjUmVjdGlmaWVycyMzMi4xMi4xNy4wMC4wMAotdW5zcHNjNyMzMi4xMi4xNy4wMi4wMCNJbmR1Y3RvcnMjMzIuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMzIuMTIuMTcuMDMuMDAjRmVycml0ZXMjMzIuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMzIuMTIuMTcuMDQuMDAjU3RhdGljIGNvbnZlcnRlcnMjMzIuMTIuMTcuMDAuMDAKLXVuc3BzYzcjMzIuMTIuMTcuMDUuMDAjSW52ZXJ0ZXJzIzMyLjEyLjE3LjAwLjAwCi11bnNwc2M3IzMyLjEyLjE3LjA2LjAwI1Jlc2lzdG9yIG9yIGNhcGFjaXRvciAoUi9DKSBuZXR3b3JrcyMzMi4xMi4xNy4wMC4wMAotdW5zcHNjNyMzMi4xMy4wMC4wMC4wMCNQYXNzaXZlIGNvbXBvbmVudHMjMzIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzIuMTMuMTAuMDAuMDAjVGVtcGVyYXR1cmUgY29udHJvbHMjMzIuMTMuMDAuMDAuMDAKLXVuc3BzYzcjMzIuMTMuMTAuMDEuMDAjSGVhdCBzaW5rcyMzMi4xMy4xMC4wMC4wMAotdW5zcHNjNyMzOS4wMC4wMC4wMC4wMCNMaWdodGluZyBhbmQgRWxlY3RyaWNhbCBBY2Nlc3NvcmllcyBhbmQgU3VwcGxpZXMjMzkuMDAuMDAuMDAuMDAKLXVuc3BzYzcjMzkuMTAuMDAuMDAuMDAjTGFtcHMgYW5kIGxpZ2h0YnVsYnMgYW5kIGxhbXAgY29tcG9uZW50cyMzOS4wMC4wMC4wMC4wMAotdW5zcHNjNyMzOS4xMC4xNi4wMC4wMCNMYW1wcyMzOS4xMC4wMC4wMC4wMAotdW5zcHNjNyMzOS4xMC4xNi4wMS4wMCNIYWxvZ2VuIGxhbXBzIzM5LjEwLjE2LjAwLjAwCi11bnNwc2M3IzM5LjEwLjE2LjAyLjAwI01lZGljYWwgbGFtcHMjMzkuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzkuMTAuMTYuMDMuMDAjU29sYXIgbGFtcHMjMzkuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzkuMTAuMTYuMDQuMDAjQWxjb2hvbCBsYW1wcyMzOS4xMC4xNi4wMC4wMAotdW5zcHNjNyMzOS4xMC4xNi4wNS4wMCNGbHVvcmVzY2VudCBsYW1wcyMzOS4xMC4xNi4wMC4wMAotdW5zcHNjNyMzOS4xMC4xNi4wNi4wMCNBcmMgbGFtcHMjMzkuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzkuMTAuMTYuMDguMDAjU2hhZG93bGVzcyBvciBzY2lhbHl0aWMgb3BlcmF0aW9uIGxpZ2h0IzM5LjEwLjE2LjAwLjAwCi11bnNwc2M3IzM5LjEwLjE2LjA5LjAwI1N0YWdlIG9yIHN0dWRpbyBsYW1wcyMzOS4xMC4xNi4wMC4wMAotdW5zcHNjNyMzOS4xMC4xNi4xMC4wMCNGaWxhbWVudCBsYW1wcyMzOS4xMC4xNi4wMC4wMAotdW5zcHNjNyMzOS4xMC4xNi4xMS4wMCNIaWdoIGludGVuc2l0eSBkaXNjaGFyZ2UgKEhJRCkgbGFtcHMjMzkuMTAuMTYuMDAuMDAKLXVuc3BzYzcjMzkuMTAuMTYuMTIuMDAjSW5jYW5kZXNjZW50IGxhbXBzIzM5LjEwLjE2LjAwLjAwCi11bnNwc2M3IzM5LjEwLjE2LjEzLjAwI0luZnJhcmVkIGxhbXBzIzM5LjEwLjE2LjAwLjAwCi11bnNwc2M3IzM5LjEwLjE2LjE0LjAwI01ldGFsIGhhbGlkZSBsYW1wcyMzOS4xMC4xNi4wMC4wMAotdW5zcHNjNyMzOS4xMC4xNi4xNS4wMCNWYXBvciBsYW1wcyMzOS4xMC4xNi4wMC4wMAotdW5zcHNjNyMzOS4xMC4xNi4xNi4wMCNVbHRyYXZpb2xldCAoVVYpIGxhbXBzIzM5LjEwLjE2LjAwLjAwCi11bnNwc2M3IzM5LjEwLjE2LjE3LjAwI0hpZ2ggcHJlc3N1cmUgc29kaXVtIGxhbXBzIzM5LjEwLjE2LjAwLjAwCi11bnNwc2M3IzM5LjEwLjE3LjAwLjAwI0J1bGIgZ2xhc3MjMzkuMTAuMDAuMDAuMDAKLXVuc3BzYzcjMzkuMTAuMTcuMDEuMDAjRmx1b3Jlc2NlbnQgdHViZXMjMzkuMTAuMTcuMDAuMDAKLXVuc3BzYzcjMzkuMTAuMTguMDAuMDAjTGFtcCBjb21wb25lbnRzIzM5LjEwLjAwLjAwLjAwCi11bnNwc2M3IzM5LjEwLjE4LjAxLjAwI0xhbXAgZmlsYW1lbnQjMzkuMTAuMTguMDAuMDAKLXVuc3BzYzcjMzkuMTAuMTkuMDAuMDAjTW9iaWxlIGFuZCBmaXhlZCBmbG9vZGxpZ2h0aW5nIzM5LjEwLjAwLjAwLjAwCi11bnNwc2M3IzM5LjEwLjE5LjAxLjAwI0xpZ2h0IHRvd2VyIzM5LjEwLjE5LjAwLjAwCi11bnNwc2M3IzM5LjEwLjE5LjAyLjAwI0xpZ2h0IGNhcnQjMzkuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzkuMTAuMTkuMDMuMDAjTGlnaHQgc3RhbmQjMzkuMTAuMTkuMDAuMDAKLXVuc3BzYzcjMzkuMTEuMDAuMDAuMDAjTGlnaHRpbmcgYW5kIGZpeHR1cmVzIGFuZCBhY2Nlc3NvcmllcyMzOS4wMC4wMC4wMC4wMAotdW5zcHNjNyMzOS4xMS4xNS4wMC4wMCNJbnRlcmlvciBsaWdodGluZyBhbmQgZml4dHVyZXMjMzkuMTEuMDAuMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTUuMDEuMDAjRmx1b3Jlc2NlbnQgZml4dHVyZXMjMzkuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTUuMDIuMDAjVmFuaXR5IGxpZ2h0aW5nIzM5LjExLjE1LjAwLjAwCi11bnNwc2M3IzM5LjExLjE1LjAzLjAwI1dhbGwgZml4dHVyZXMjMzkuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTUuMDQuMDAjU3RhZ2Ugb3Igc3R1ZGlvIGxpZ2h0aW5nIHN5c3RlbXMjMzkuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTUuMDUuMDAjUmVjZXNzZWQgbGlnaHRpbmcjMzkuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTUuMDYuMDAjQ2hhbmRlbGllcnMjMzkuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTUuMDcuMDAjRGVzayBmaXh0dXJlcyMzOS4xMS4xNS4wMC4wMAotdW5zcHNjNyMzOS4xMS4xNS4wOC4wMCNUcmFjayBsaWdodGluZyMzOS4xMS4xNS4wMC4wMAotdW5zcHNjNyMzOS4xMS4xNS4wOS4wMCNGbG9vciB0b3JjaGllcmUjMzkuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTUuMTAuMDAjVGFibGUgbGFtcHMjMzkuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTUuMTEuMDAjRGVjb3JhdGl2ZSBsaWdodGluZyMzOS4xMS4xNS4wMC4wMAotdW5zcHNjNyMzOS4xMS4xNS4xMi4wMCNMYWJvcmF0b3J5IGJlbmNoIGxpZ2h0cyMzOS4xMS4xNS4wMC4wMAotdW5zcHNjNyMzOS4xMS4xNS4xMy4wMCNJbnRlcmlvciBzb2xhciBsaWdodGluZyMzOS4xMS4xNS4wMC4wMAotdW5zcHNjNyMzOS4xMS4xNS4xNC4wMCNUcmVlIGxpZ2h0cyMzOS4xMS4xNS4wMC4wMAotdW5zcHNjNyMzOS4xMS4xNS4xNS4wMCNEb3dubGlnaHRpbmcgZml4dHVyZXMjMzkuMTEuMTUuMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTUuMTYuMDAjVGFzayBsaWdodGluZyBmaXh0dXJlcyMzOS4xMS4xNS4wMC4wMAotdW5zcHNjNyMzOS4xMS4xNS4xNy4wMCNXYXggY2FuZGxlcyMzOS4xMS4xNS4wMC4wMAotdW5zcHNjNyMzOS4xMS4xNS4xOC4wMCNIYW5kIG9yIGV4dGVuc2lvbiBsaWdodCMzOS4xMS4xNS4wMC4wMAotdW5zcHNjNyMzOS4xMS4xNS4xOS4wMCNDYW5kbGUgaG9sZGVycyMzOS4xMS4xNS4wMC4wMAotdW5zcHNjNyMzOS4xMS4xNS4yMC4wMCNIYWxvZ2VuIGxpZ2h0aW5nIGZpeHR1cmVzIzM5LjExLjE1LjAwLjAwCi11bnNwc2M3IzM5LjExLjE2LjAwLjAwI0V4dGVyaW9yIGxpZ2h0aW5nIGFuZCBmaXh0dXJlcyMzOS4xMS4wMC4wMC4wMAotdW5zcHNjNyMzOS4xMS4xNi4wMy4wMCNSb2Fkd2F5IG9yIGhpZ2h3YXkgbGlnaHRpbmcjMzkuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTYuMDUuMDAjTGFuZHNjYXBlIG9yIGFyZWEgbGlnaHRpbmcjMzkuMTEuMTYuMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTYuMDYuMDAjVW5kZXJ3YXRlciBsaWdodGluZyMzOS4xMS4xNi4wMC4wMAotdW5zcHNjNyMzOS4xMS4xNi4wOC4wMCNSZXNpZGVudGlhbCBzdHJlZXQgbGlnaHRzIzM5LjExLjE2LjAwLjAwCi11bnNwc2M3IzM5LjExLjE2LjA5LjAwI0tlcm9zZW5lIG9yIHByb3BhbmUgb3IgYnV0YW5lIGxhbnRlcm5zIzM5LjExLjE2LjAwLjAwCi11bnNwc2M3IzM5LjExLjE3LjAwLjAwI0VtZXJnZW5jeSBsaWdodGluZyMzOS4xMS4wMC4wMC4wMAotdW5zcHNjNyMzOS4xMS4xNy4wMi4wMCNGbGFzaGxpZ2h0cyMzOS4xMS4xNy4wMC4wMAotdW5zcHNjNyMzOS4xMS4xNy4wMy4wMCNTdG9ybSBsaWdodHMjMzkuMTEuMTcuMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTcuMDQuMDAjRmxvb2QgbGlnaHRzIzM5LjExLjE3LjAwLjAwCi11bnNwc2M3IzM5LjExLjE3LjA1LjAwI0xpZ2h0IHN0aWNrcyMzOS4xMS4xNy4wMC4wMAotdW5zcHNjNyMzOS4xMS4xOC4wMC4wMCNMaWdodGluZyBhY2Nlc3NvcmllcyMzOS4xMS4wMC4wMC4wMAotdW5zcHNjNyMzOS4xMS4xOC4wMS4wMCNMYW1wIGJhbGxhc3RzIzM5LjExLjE4LjAwLjAwCi11bnNwc2M3IzM5LjExLjE4LjAyLjAwI0xhbXAgaG91c2luZ3MjMzkuMTEuMTguMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTguMDMuMDAjTGFtcCBzb2NrZXRzIzM5LjExLjE4LjAwLjAwCi11bnNwc2M3IzM5LjExLjE4LjA0LjAwI0xhbXAgYmFzZXMjMzkuMTEuMTguMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTguMDUuMDAjTGFtcCBicmFja2V0cyMzOS4xMS4xOC4wMC4wMAotdW5zcHNjNyMzOS4xMS4xOC4wNi4wMCNMaWdodCBib3hlcyMzOS4xMS4xOC4wMC4wMAotdW5zcHNjNyMzOS4xMS4xOC4wOC4wMCNHcmlsbGVzIzM5LjExLjE4LjAwLjAwCi11bnNwc2M3IzM5LjExLjE4LjA5LjAwI0xpZ2h0IGNvbmRpdGlvbmVyIGZpbHRlcnMjMzkuMTEuMTguMDAuMDAKLXVuc3BzYzcjMzkuMTEuMTguMTAuMDAjTGFtcCBzdGFydGVyIzM5LjExLjE4LjAwLjAwCi11bnNwc2M3IzM5LjExLjE4LjExLjAwI0VsZWN0cmlmaWVkIHRyYWNrcyMzOS4xMS4xOC4wMC4wMAotdW5zcHNjNyMzOS4xMS4xOC4xMi4wMCNMYW1wIGNvdmVycyMzOS4xMS4xOC4wMC4wMAotdW5zcHNjNyMzOS4xMS4xOS4wMC4wMCNIYXphcmRvdXMgbG9jYXRpb24gbGlnaHRpbmcgYW5kIGZpeHR1cmVzIzM5LjExLjAwLjAwLjAwCi11bnNwc2M3IzM5LjExLjE5LjAxLjAwI0hhemFyZG91cyBsb2NhdGlvbiBmbG91cmVzY2VudCBmaXh0dXJlcyMzOS4xMS4xOS4wMC4wMAotdW5zcHNjNyMzOS4xMS4xOS4wMi4wMCNIYXphcmRvdXMgbG9jYXRpb24gaW5jYW5kZXNjZW50IGZpeHR1cmVzIzM5LjExLjE5LjAwLjAwCi11bnNwc2M3IzQwLjAwLjAwLjAwLjAwI0Rpc3RyaWJ1dGlvbiBhbmQgQ29uZGl0aW9uaW5nIFN5c3RlbXMgYW5kIEVxdWlwbWVudCBhbmQgQ29tcG9uZW50cyM0MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM0MC4xMC4wMC4wMC4wMCNIZWF0aW5nIGFuZCB2ZW50aWxhdGlvbiBhbmQgYWlyIGNpcmN1bGF0aW9uIzQwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzQwLjEwLjE1LjAwLjAwI1ZlbnRpbGF0aW9uIzQwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQwLjEwLjE1LjAxLjAwI0FpciBjb2xsZWN0b3JzIzQwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE1LjAyLjAwI0FpciBleGhhdXN0ZXJzIzQwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE1LjAzLjAwI1ZlbnRzIzQwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE1LjA0LjAwI1ZlbnRpbGF0aW9uIGRhbXBlcnMjNDAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTUuMDUuMDAjQWlyIGRpZmZ1c2VycyM0MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0MC4xMC4xNS4wNi4wMCNWZW50aWxhdGlvbiBwaXBlcyM0MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0MC4xMC4xNi4wMC4wMCNBaXIgY2lyY3VsYXRpb24jNDAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTYuMDEuMDAjQmxvd2VycyM0MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM0MC4xMC4xNi4wMi4wMCNBaXIgY2lyY3VsYXRvcnMjNDAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTYuMDMuMDAjSW1wZWxsZXJzIzQwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE2LjA0LjAwI0ZhbnMjNDAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTcuMDAuMDAjQ29vbGluZyM0MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM0MC4xMC4xNy4wMS4wMCNBaXIgY29uZGl0aW9uZXJzIzQwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE3LjAyLjAwI0Nvb2xpbmcgZXhjaGFuZ2VycyM0MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xMC4xNy4wMy4wMCNFdmFwb3JhdGl2ZSBjb29sZXJzIzQwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE3LjA0LjAwI0NvbmRlbnNpbmcgdW5pdHMjNDAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTguMDAuMDAjSGVhdGluZyBlcXVpcG1lbnQjNDAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTguMDEuMDAjUmFkaWF0b3JzIzQwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE4LjAyLjAwI0hlYXQgZXhjaGFuZ2VycyM0MC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xMC4xOC4wMy4wMCNGaXJlcGxhY2VzIzQwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE4LjA0LjAwI0hlYXRlcnMjNDAuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTguMDUuMDAjRnVybmFjZXMjNDAuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTguMDYuMDAjSGVhdCBwdW1wcyM0MC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xMC4xOC4wNy4wMCNTb2xhciBoZWF0aW5nIHVuaXRzIzQwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE4LjA4LjAwI0hlYXRpbmcgc3RvdmVzIzQwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE4LjA5LjAwI0NpcmN1bGF0aW9uIGhlYXRlcnMjNDAuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTguMTAuMDAjQ29pbCBkdWN0IGhlYXRlcnMjNDAuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTguMTEuMDAjQ29udmVjdGlvbiBoZWF0ZXJzIzQwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE4LjEyLjAwI0RpdmlkZWQgZXhjaGFuZ2VycyM0MC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xMC4xOC4xMy4wMCNEb3VibGUgc3BsaXQgZXhjaGFuZ2VycyM0MC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xMC4xOC4xNC4wMCNGaW5uZWQgdHVidWxhciBoZWF0ZXJzIzQwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE4LjE1LjAwI0ltbWVyc2lvbiBoZWF0ZXJzIzQwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE4LjE2LjAwI0tldHRsZSBleGNoYW5nZXJzIzQwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE4LjE3LjAwI09uZSBwYXNzIGV4Y2hhbmdlcnMjNDAuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTguMTguMDAjUHJvY2VzcyBhaXIgaGVhdGVycyM0MC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xMC4xOC4xOS4wMCNTcGFjZSBoZWF0ZXJzIzQwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE4LjIwLjAwI1NwbGl0IGV4Y2hhbmdlcnMjNDAuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTguMjEuMDAjU3RyaXAgaGVhdGVycyM0MC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xMC4xOC4yMi4wMCNUdWJ1bGFyIGhlYXRlcnMjNDAuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTguMjMuMDAjVHdvIHBhc3MgZXhjaGFuZ2VycyM0MC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xMC4xOC4yNC4wMCNRdWFydHogaGVhdGVyIzQwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE4LjI1LjAwI0RvbWVzdGljIHdhdGVyIGhlYXRlcnMjNDAuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTguMjYuMDAjQ29tbWVyY2lhbCB3YXRlciBoZWF0ZXJzIzQwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE5LjAwLjAwI0h1bWlkaXR5IGNvbnRyb2wjNDAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDAuMTAuMTkuMDEuMDAjVmFwb3JpemVycyM0MC4xMC4xOS4wMC4wMAotdW5zcHNjNyM0MC4xMC4xOS4wMi4wMCNEZWh1bWlkaWZpZXJzIzQwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzQwLjEwLjE5LjAzLjAwI0h1bWlkaWZpZXJzIzQwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzQwLjEwLjIwLjAwLjAwI0JvaWxlcnMjNDAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDAuMTAuMjAuMDEuMDAjRmlyZSB0dWJlIGJvaWxlcnMjNDAuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDAuMTAuMjAuMDIuMDAjV2F0ZXIgdHViZSBib2lsZXIjNDAuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDAuMTAuMjAuMDMuMDAjRWxlY3RyaWMgYm9pbGVycyM0MC4xMC4yMC4wMC4wMAotdW5zcHNjNyM0MC4xNC4wMC4wMC4wMCNGbHVpZCBhbmQgZ2FzIGRpc3RyaWJ1dGlvbiM0MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNS4wMC4wMCNGbHVpZCBhbmQgZ2FzIGNvbmR1aXRzIzQwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzQwLjE0LjE1LjAyLjAwI0R1Y3RzIzQwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE1LjA0LjAwI0hvc2VzIzQwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE2LjAwLjAwI1ZhbHZlcyM0MC4xNC4wMC4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNi4wMS4wMCNDaGVjayB2YWx2ZXMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMDIuMDAjTmVlZGxlIHZhbHZlcyM0MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNi4wMy4wMCNQbmV1bWF0aWMgdmFsdmVzIzQwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE2LjA0LjAwI1NhZmV0eSB2YWx2ZXMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMDUuMDAjU29sZW5vaWQgdmFsdmVzIzQwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE2LjA2LjAwI1JlbGllZiB2YWx2ZXMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMDcuMDAjQmFsbCB2YWx2ZXMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMDguMDAjSHlkcmF1bGljIHZhbHZlcyM0MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNi4wOS4wMCNDb250cm9sIHZhbHZlcyM0MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNi4xMC4wMCNGbG9hdCB2YWx2ZXMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMTEuMDAjR2xvYmUgdmFsdmVzIzQwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE2LjEyLjAwI0V4cGFuc2lvbiB2YWx2ZXMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMTMuMDAjR2F0ZSB2YWx2ZXMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMTQuMDAjQnV0dGVyZmx5IHZhbHZlcyM0MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNi4xNS4wMCNGbGFwIHZhbHZlcyM0MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNi4xNi4wMCNWYWx2ZSBwYXJ0cyBhbmQgYWNjZXNzb3JpZXMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMTcuMDAjQW5nbGUgZ2xvYmUgdmFsdmVzIzQwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE2LjE4LjAwI0JhbGwgY2hlY2sgdmFsdmVzIzQwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE2LjE5LjAwI0J1dHRlcmZseSBsdWcgcGF0dGVybiB2YWx2ZXMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMjAuMDAjQnV0dGVyZmx5IHdhZmVyIHBhdHRlcm4gdmFsdmVzIzQwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE2LjIxLjAwI0RpYXBocmFnbSB2YWx2ZXMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMjIuMDAjSW5saW5lIGNoZWNrIHZhbHZlcyM0MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNi4yMy4wMCNLbmlmZSBnYXRlIHZhbHZlcyM0MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNi4yNC4wMCNMdWJyaWNhdGVkIHBsdWcgdmFsdmVzIzQwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE2LjI1LjAwI011ZCBvciBzbHVzaCB2YWx2ZXMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMjYuMDAjTm9ubHVicmljYXRlZCBwbHVnIHZhbHZlcyM0MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNi4yNy4wMCNPcmlmaWNlIHZhbHZlcyM0MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNi4yOC4wMCNQaWxvdCB2YWx2ZXMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMjkuMDAjUGluY2ggdmFsdmVzIzQwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE2LjMwLjAwI1Bpc3RvbiBjaGVjayB2YWx2ZXMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMzEuMDAjUHVtcCB2YWx2ZXMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMzIuMDAjU2VudGluZWwgdmFsdmVzIzQwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE2LjMzLjAwI1NsaWRlciB2YWx2ZXMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMzQuMDAjU3dpbmcgY2hlY2sgdmFsdmVzIzQwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE2LjM1LjAwI1R1cmJpbmUgdmFsdmVzIzQwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE2LjM2LjAwI1ZhbHZlIGtpdHMjNDAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTYuMzcuMDAjV2FmZXIgY2hlY2sgdmFsdmVzIzQwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE3LjAwLjAwI0hhcmR3YXJlIGFuZCBmaXR0aW5ncyM0MC4xNC4wMC4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4wMS4wMCNEcmFpbnMjNDAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTcuMDIuMDAjRmF1Y2V0cyM0MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4wMy4wMCNTaG93ZXIgaGVhZHMjNDAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTcuMDQuMDAjU3BpZ290cyM0MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4wNS4wMCNTcG91dHMjNDAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTcuMDYuMDAjUGlwZSBwbHVncyM0MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4wNy4wMCNQaXBlIGNsYW1wcyM0MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4wOC4wMCNMaXF1aWQgdHJhcHMjNDAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTcuMDkuMDAjU3RlYW0gdHJhcHMjNDAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTcuMTAuMDAjUGx1bWJpbmcgZmxhbmdlcyM0MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4xMS4wMCNNZXRhbCBvciBydWJiZXIgZXhwYW5zaW9uIGpvaW50cyM0MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4xMi4wMCNQaXBlIGNhcHMjNDAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTcuMTMuMDAjUGx1bWJpbmcgdW5pb25zIzQwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE3LjE0LjAwI1BsdW1iaW5nIGNyb3NzZXMjNDAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTcuMTUuMDAjUGx1bWJpbmcgbmlwcGxlcyM0MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4xNi4wMCNQIHRyYXBzIzQwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE3LjE3LjAwI1BpcGUgYmVuZHMjNDAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTcuMTguMDAjUGx1bWJpbmcgZWxib3dzIzQwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE3LjE5LjAwI1BsdW1iaW5nIGFkYXB0ZXJzIzQwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE3LjIwLjAwI1BsdW1iaW5nIGNvbm5lY3RvcnMjNDAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTcuMjEuMDAjUGx1bWJpbmcgY291cGxpbmdzIzQwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE3LjIyLjAwI0hhbGYgY291cGxpbmdzIzQwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE3LjIzLjAwI1JlZHVjaW5nIGNvdXBsaW5ncyM0MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4yNC4wMCNQbHVtYmluZyBidXNoaW5ncyM0MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4yNS4wMCNQbHVtYmluZyBoYW5nZXJzIzQwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE3LjI2LjAwI0h5ZHJhbnRzIzQwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE3LjI3LjAwI1BsdW1iaW5nIHZlbnRzIzQwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE3LjI4LjAwI0ZsdWlkIHJlZ3VsYXRvcnMjNDAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTcuMjkuMDAjUGx1bWJpbmcgdGVlcyM0MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4zMC4wMCNTdHJhaW5lcnMjNDAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTcuMzEuMDAjTm96emxlcyM0MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4zMi4wMCNQbHVtYmluZyBzcGlkZXJzIzQwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE3LjMzLjAwI1BpcGUgZml0dGluZyM0MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4zNC4wMCNIb3NlIGZpdHRpbmcjNDAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTcuMzUuMDAjRnVubmVscyM0MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4zNi4wMCNHcmVhc2UgZml0dGluZyM0MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNC4xNy4zNy4wMCNEaWFwaHJhZ21zIzQwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE4LjAwLjAwI1R1YmUgYW5kIHR1YmluZyM0MC4xNC4wMC4wMC4wMAotdW5zcHNjNyM0MC4xNC4xOC4wMS4wMCNGZXJyb3VzIGFsbG95IHR1YmluZyM0MC4xNC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xNC4xOC4wMi4wMCNDb3BwZXIgdHViaW5nIzQwLjE0LjE4LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE4LjAzLjAwI1RpdGFuaXVtIHR1YmluZyM0MC4xNC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xNC4xOC4wNC4wMCNNYWduZXNpdW0gdHViaW5nIzQwLjE0LjE4LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE4LjA1LjAwI1RpbiB0dWJpbmcjNDAuMTQuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTguMDYuMDAjQnJhc3MgdHViaW5nIzQwLjE0LjE4LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE4LjA3LjAwI0xlYWQgdHViaW5nIzQwLjE0LjE4LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE4LjA4LjAwI0Jyb256ZSB0dWJpbmcjNDAuMTQuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTguMDkuMDAjWmluYyB0dWJpbmcjNDAuMTQuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTguMTAuMDAjU3RlZWwgdHViaW5nIzQwLjE0LjE4LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE4LjExLjAwI0lyb24gdHViaW5nIzQwLjE0LjE4LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE4LjEyLjAwI0NlbWVudCB0dWJpbmcjNDAuMTQuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTguMTMuMDAjUGxhc3RpYyB0dWJpbmcjNDAuMTQuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTguMTQuMDAjUnViYmVyIHR1YmluZyM0MC4xNC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xNC4xOC4xNS4wMCNHbGFzcyB0dWJpbmcjNDAuMTQuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTguMTYuMDAjU3RvbmUgdHViaW5nIzQwLjE0LjE4LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE4LjE3LjAwI05vbiBmZXJyb3VzIGFsbG95IHR1YmluZyM0MC4xNC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xNC4xOC4xOC4wMCNBbHVtaW51bSB0dWJpbmcjNDAuMTQuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTguMTkuMDAjU3RhaW5sZXNzIHN0ZWVsIHR1YmluZyM0MC4xNC4xOC4wMC4wMAotdW5zcHNjNyM0MC4xNC4xOC4yMC4wMCNQcmVjaW91cyBtZXRhbCB0dWJpbmcjNDAuMTQuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTQuMTguMjEuMDAjTnlsb24gdHViaW5nIzQwLjE0LjE4LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE5LjAwLjAwI0R1Y3RzIzQwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzQwLjE0LjE5LjAxLjAwI0ZsZXhpYmxlIGR1Y3RzIzQwLjE0LjE5LjAwLjAwCi11bnNwc2M3IzQwLjE0LjE5LjAyLjAwI1JpZ2lkIGR1Y3RzIzQwLjE0LjE5LjAwLjAwCi11bnNwc2M3IzQwLjE0LjIwLjAwLjAwI0hvc2VzIzQwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIwLjAxLjAwI0FjaWQgaG9zZXMjNDAuMTQuMjAuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjAuMDIuMDAjQWlyIGhvc2VzIzQwLjE0LjIwLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIwLjAzLjAwI0RyaWxsIGhvc2VzIzQwLjE0LjIwLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIwLjA0LjAwI01hcmluZSBob3NlcyM0MC4xNC4yMC4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMC4wNS4wMCNNYXRlcmlhbCBoYW5kbGluZyBob3NlcyM0MC4xNC4yMC4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMC4wNi4wMCNPaWwgaG9zZXMjNDAuMTQuMjAuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjAuMDcuMDAjU3BlY2lhbCBob3NlcyM0MC4xNC4yMC4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMC4wOC4wMCNXYXRlciBob3NlcyM0MC4xNC4yMC4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMC4wOS4wMCNBaXIgd2F0ZXIgZ2FzIG11bHRpcHVycG9zZSBob3NlcyM0MC4xNC4yMC4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMC4xMC4wMCNUZWZsb24gbGluZWQgaG9zZXMjNDAuMTQuMjAuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjEuMDAuMDAjUGlwZSM0MC4xNC4wMC4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMS4wMS4wMCNDYXJib24gc3RlZWwgcGlwZSM0MC4xNC4yMS4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMS4wMi4wMCNEdWN0aWxlIGlyb24gcGlwZSM0MC4xNC4yMS4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMS4wMy4wMCNIaWdoIG5pY2tlbCBhbGxveSBwaXBlIzQwLjE0LjIxLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIxLjA0LjAwI0hpZ2ggeWllbGQgc3RlZWwgcGlwZSM0MC4xNC4yMS4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMS4wNS4wMCNGZXJyaXRpYyBhbGxveSBwaXBlIzQwLjE0LjIxLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIxLjA2LjAwI0FsdW1pbnVtIHBpcGUjNDAuMTQuMjEuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjEuMDcuMDAjQnJhc3MgcGlwZSM0MC4xNC4yMS4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMS4wOC4wMCNCcm9uemUgcGlwZSM0MC4xNC4yMS4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMS4wOS4wMCNDb25jcmV0ZSBwaXBlIzQwLjE0LjIxLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIxLjEwLjAwI0NvcHBlciBwaXBlIzQwLjE0LjIxLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIxLjExLjAwI0Nhc3QgaXJvbiBwaXBlIzQwLjE0LjIxLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIxLjEyLjAwI0xlYWQgcGlwZSM0MC4xNC4yMS4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMS4xMy4wMCNNYWduZXNpdW0gcGlwZSM0MC4xNC4yMS4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMS4xNC4wMCNOb24gZmVycm91cyBwaXBlIzQwLjE0LjIxLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIxLjE1LjAwI1BsYXN0aWMgcGlwZSM0MC4xNC4yMS4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMS4xNi4wMCNSdWJiZXIgcGlwZSM0MC4xNC4yMS4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMS4xNy4wMCNTdGFpbmxlc3Mgc3RlZWwgcGlwZSM0MC4xNC4yMS4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMS4xOC4wMCNUaW4gcGlwZSM0MC4xNC4yMS4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMS4xOS4wMCNUaXRhbml1bSBwaXBlIzQwLjE0LjIxLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIxLjIwLjAwI1ppbmMgcGlwZSM0MC4xNC4yMS4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMS4yMS4wMCNIb3NlIHJlZWxzIzQwLjE0LjIxLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIyLjAwLjAwI0ZsdWlkIGFuZCBnYXMgcmVndWxhdG9ycyM0MC4xNC4wMC4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMi4wMS4wMCNHYXMgcmVndWxhdG9ycyM0MC4xNC4yMi4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMi4wMi4wMCNGbHVpZCByZWd1bGF0b3JzIzQwLjE0LjIyLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIzLjAwLjAwI1BpcGUgZml0dGluZ3MjNDAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjMuMDEuMDAjUGlwZSBhbmdsZSBmYWNlIHJpbmdzIzQwLjE0LjIzLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIzLjAyLjAwI1BpcGUgYnJhbmNoIG91dGxldHMjNDAuMTQuMjMuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjMuMDMuMDAjUGlwZSBsYXRlcmFscyM0MC4xNC4yMy4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMy4wNC4wMCNQaXBlIGluc2VydHMjNDAuMTQuMjMuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjMuMDUuMDAjUGlwZSByZWR1Y2VycyM0MC4xNC4yMy4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMy4wNi4wMCNQaXBlIHNhZGRsZXMjNDAuMTQuMjMuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjMuMDcuMDAjUGlwZSBzdHViZW5kcyM0MC4xNC4yMy4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMy4wOC4wMCNQaXBlIHd5ZXMjNDAuMTQuMjMuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjMuMDkuMDAjUGlwZSBiZW5kcyM0MC4xNC4yMy4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMy4xMC4wMCNQaXBlIGNhcHMjNDAuMTQuMjMuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjMuMTEuMDAjUGlwZSBoYWxmIGNvdXBsaW5ncyM0MC4xNC4yMy4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMy4xMi4wMCNQaXBlIGV4cGFuc2lvbiBqb2ludHMjNDAuMTQuMjMuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjMuMTMuMDAjUGlwZSBwbHVncyM0MC4xNC4yMy4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMy4xNC4wMCNQaXBlIGJ1c2hpbmdzIzQwLjE0LjIzLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIzLjE1LjAwI1BpcGUgY291cGxpbmdzIzQwLjE0LjIzLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIzLjE2LjAwI1BpcGUgY3Jvc3NlcyM0MC4xNC4yMy4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMy4xNy4wMCNQaXBlIGVsYm93cyM0MC4xNC4yMy4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMy4xOC4wMCNQaXBlIG5pcHBsZXMjNDAuMTQuMjMuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjMuMTkuMDAjUGlwZSB0ZWVzIzQwLjE0LjIzLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIzLjIwLjAwI1BpcGUgdW5pb25zIzQwLjE0LjIzLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIzLjIxLjAwI1BpcGUgcmVkdWNpbmcgY291cGxpbmdzIzQwLjE0LjIzLjAwLjAwCi11bnNwc2M3IzQwLjE0LjIzLjIyLjAwI1BpcGUgcmVwYWlyIGNsYW1wcyM0MC4xNC4yMy4wMC4wMAotdW5zcHNjNyM0MC4xNC4yMy4yMy4wMCNSdXB0dXJlIGRpc2sjNDAuMTQuMjMuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjQuMDAuMDAjUGlwZSBmbGFuZ2VzIzQwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzQwLjE0LjI0LjAxLjAwI0FtbW9uaWEgZmxhbmdlcyM0MC4xNC4yNC4wMC4wMAotdW5zcHNjNyM0MC4xNC4yNC4wMi4wMCNCYWNrdXAgZmxhbmdlcyM0MC4xNC4yNC4wMC4wMAotdW5zcHNjNyM0MC4xNC4yNC4wMy4wMCNCbGluZCBmbGFuZ2VzIzQwLjE0LjI0LjAwLjAwCi11bnNwc2M3IzQwLjE0LjI0LjA0LjAwI0xhcGpvaW50IGZsYW5nZXMjNDAuMTQuMjQuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjQuMDUuMDAjTG9uZyB3ZWxkbmVjayBmbGFuZ2VzIzQwLjE0LjI0LjAwLjAwCi11bnNwc2M3IzQwLjE0LjI0LjA2LjAwI09yaWZpY2UgZmxhbmdlcyM0MC4xNC4yNC4wMC4wMAotdW5zcHNjNyM0MC4xNC4yNC4wNy4wMCNQbGF0ZSBmbGFuZ2VzIzQwLjE0LjI0LjAwLjAwCi11bnNwc2M3IzQwLjE0LjI0LjA4LjAwI1NsaXBvbiBmbGFuZ2VzIzQwLjE0LjI0LjAwLjAwCi11bnNwc2M3IzQwLjE0LjI0LjA5LjAwI1NvY2tldHdlbGQgZmxhbmdlcyM0MC4xNC4yNC4wMC4wMAotdW5zcHNjNyM0MC4xNC4yNC4xMC4wMCNTcGVjdGFjbGUgYmxpbmQgZmxhbmdlcyM0MC4xNC4yNC4wMC4wMAotdW5zcHNjNyM0MC4xNC4yNC4xMS4wMCNUaHJlYWRlZCBmbGFuZ2VzIzQwLjE0LjI0LjAwLjAwCi11bnNwc2M3IzQwLjE0LjI0LjEyLjAwI1dlbGRuZWNrIGZsYW5nZXMjNDAuMTQuMjQuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjUuMDAuMDAjVHJhcHMgYW5kIHN0cmFpbmVycyM0MC4xNC4wMC4wMC4wMAotdW5zcHNjNyM0MC4xNC4yNS4wMS4wMCNMaXF1aWQgc3RyYWluZXJzIzQwLjE0LjI1LjAwLjAwCi11bnNwc2M3IzQwLjE0LjI1LjAyLjAwI0xpcXVpZCB0cmFwcyM0MC4xNC4yNS4wMC4wMAotdW5zcHNjNyM0MC4xNC4yNS4wMy4wMCNTdGVhbSB0cmFwcyM0MC4xNC4yNS4wMC4wMAotdW5zcHNjNyM0MC4xNC4yNS4wNC4wMCNTdGVhbSBzdHJhaW5lcnMjNDAuMTQuMjUuMDAuMDAKLXVuc3BzYzcjNDAuMTQuMjYuMDAuMDAjVHViZSBmaXR0aW5ncyM0MC4xNC4wMC4wMC4wMAotdW5zcHNjNyM0MC4xNC4yNi4wMS4wMCNCcmFzcyB0dWJlIGZpdHRpbmdzIzQwLjE0LjI2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjI2LjAyLjAwI0NhcmJvbiBzdGVlbCB0dWJlIGZpdHRpbmdzIzQwLjE0LjI2LjAwLjAwCi11bnNwc2M3IzQwLjE0LjI2LjAzLjAwI1N0YWlubGVzcyBzdGVlbCB0dWJlIGZpdHRpbmdzIzQwLjE0LjI2LjAwLjAwCi11bnNwc2M3IzQwLjE1LjAwLjAwLjAwI0luZHVzdHJpYWwgcHVtcHMgYW5kIGNvbXByZXNzb3JzIzQwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjAwLjAwI1B1bXBzIzQwLjE1LjAwLjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjAxLjAwI0FpciBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS4wMi4wMCNWYWN1dW0gcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMDMuMDAjQ2VudHJpZnVnYWwgcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMDQuMDAjQ2lyY3VsYXRpbmcgcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMDUuMDAjRG9zaW5nIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjA2LjAwI0hhbmQgcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMDcuMDAjSXJyaWdhdGlvbiBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS4wOC4wMCNNdWQgcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMDkuMDAjUmVjaXByb2NhdGluZyBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS4xMC4wMCNXYXRlciBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS4xMS4wMCNXZWxsIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjEyLjAwI1N1bXAgcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMTMuMDAjU3VibWVyc2libGUgcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMTQuMDAjU3RlYW0gcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMTUuMDAjU29sZW5vaWQgcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMTYuMDAjU2hlYXIgcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMTcuMDAjU2V3YWdlIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjE4LjAwI1NlYWxsZXNzIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjE5LjAwI1Nhbml0YXJ5IHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjIwLjAwI1NhbXBsaW5nIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjIxLjAwI1JvdGFyeSBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS4yMi4wMCNSZXZlcnNlIG9zbW9zaXMgcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMjMuMDAjUG9zaXRpdmUgZGlzcGxhY2VtZW50IHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjI0LjAwI09pbCBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS4yNS4wMCNTbHVkZ2UgcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMjYuMDAjVHVyYmluZSBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS4yNy4wMCNQbHVuZ2VyIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjI4LjAwI09zY2lsbGF0aW5nIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjI5LjAwI0RydW0gcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMzAuMDAjRHJlZGdlIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjMxLjAwI0Rld2F0ZXJpbmcgcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMzIuMDAjRnVlbCBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS4zMy4wMCNIeWRyYXVsaWMgcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMzQuMDAjQ3J5b2dlbmljIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjM1LjAwI1NsdWRnZSBwdW1wIHNwYXJlIHBhcnRzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjM2LjAwI1Nld2FnZSBwdW1wIHNwYXJlIHBhcnRzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjM3LjAwI1N1Ym1lcnNpYmxlIHB1bXAgc3BhcmUgcGFydHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuMzguMDAjV2F0ZXIgcHVtcCBzcGFyZSBwYXJ0cyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS4zOS4wMCNXZWxsIHB1bXAgc3BhcmUgcGFydHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuNDAuMDAjU3VtcCBwdW1wIHNwYXJlIHBhcnRzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjQxLjAwI0Rvc2luZyBwdW1wIHNwYXJlIHBhcnRzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjQyLjAwI0NlbnRyaWZ1Z2FsIHB1bXAgc3BhcmUgcGFydHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuNDMuMDAjQ2lyY3VsYXRpb24gcHVtcCBzcGFyZSBwYXJ0cyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS40NC4wMCNSb3RhcnkgcHVtcCBzcGFyZSBwYXJ0cyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS40NS4wMCNQdW1wIHBhcnRzIGFuZCBhY2Nlc3NvcmllcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS40Ni4wMCNBeGlhbCBzcGxpdCBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS40Ny4wMCNEZWVwd2VsbCBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS40OC4wMCNEaWFwaHJhZ20gcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuNDkuMDAjRG91YmxlIGRpYXBocmFnbSBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS41MC4wMCNEdXBsZXggcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuNTEuMDAjR2VhciBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS41Mi4wMCNNZXRlcmluZyBvciBpbmplY3Rpb24gb3IgcHJvcG9ydGlvbmluZyBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNS41My4wMCNQcm9ncmVzc2l2ZSBjYXZpdHkgcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuNTQuMDAjUmFtIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjU1LjAwI1JvdGFyeSBjYW0gcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuNTYuMDAjUm90YXJ5IGxvYmUgcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuNTcuMDAjUm90YXRpbmcgcGlzdG9uIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjU4LjAwI1NjcmV3IFB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjU5LjAwI1NpbXBsZXggcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuNjAuMDAjU2xpZGluZyB2YW5lIHB1bXBzIzQwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE1LjYxLjAwI1RyaXBsZXggcHVtcHMjNDAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTUuNjIuMDAjV29ybSBwdW1wcyM0MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNi4wMC4wMCNDb21wcmVzc29ycyM0MC4xNS4wMC4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNi4wMS4wMCNBaXIgY29tcHJlc3NvcnMjNDAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTYuMDIuMDAjQXhpYWwgZmxvdyBjb21wcmVzc29ycyM0MC4xNS4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNi4wMy4wMCNEaWFwaHJhZ20gY29tcHJlc3NvcnMjNDAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTYuMDQuMDAjR2FzIGNvbXByZXNzb3JzIzQwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE2LjA1LjAwI01vdG9yIGNvbXByZXNzb3JzIzQwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE2LjA2LjAwI1JlY2lwcm9jYXRpbmcgY29tcHJlc3NvcnMjNDAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTYuMDcuMDAjUmVmcmlnZXJhbnQgY29tcHJlc3NvcnMjNDAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTYuMDguMDAjUm90YXJ5IGNvbXByZXNzb3JzIzQwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE2LjA5LjAwI1NjcmV3IGNvbXByZXNzb3JzIzQwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE2LjEwLjAwI0NvbXByZXNzb3IgcGFydHMgYW5kIGFjY2Vzc29yaWVzIzQwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE2LjExLjAwI0JhcnJlbCBjb21wcmVzc29ycyM0MC4xNS4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNi4xMi4wMCNDZW50cmlmdWdhbCBjb21wcmVzc29ycyM0MC4xNS4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNi4xMy4wMCNDb21iaW5hdGlvbiBjb21wcmVzc29ycyM0MC4xNS4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNi4xNC4wMCNTZW1pIHJhZGlhbCBjb21wcmVzc29ycyM0MC4xNS4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNi4xNS4wMCNUdXJibyBjb21wcmVzc29ycyM0MC4xNS4xNi4wMC4wMAotdW5zcHNjNyM0MC4xNS4xNi4xNi4wMCNDb21wcmVzc29yIGtpdHMjNDAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTcuMDAuMDAjUHVtcCBwYXJ0cyBhbmQgYWNjZXNzb3JpZXMjNDAuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNDAuMTUuMTcuMDEuMDAjUHVtcCBjYXNpbmdzIzQwLjE1LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE1LjE3LjAyLjAwI1B1bXAgcGFja2luZ3MjNDAuMTUuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTYuMDAuMDAuMDAjSW5kdXN0cmlhbCBmaWx0ZXJpbmcgYW5kIHB1cmlmaWNhdGlvbiM0MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM0MC4xNi4xNS4wMC4wMCNGaWx0ZXJzIzQwLjE2LjAwLjAwLjAwCi11bnNwc2M3IzQwLjE2LjE1LjAxLjAwI1ZhY3V1bSBmaWx0ZXJzIzQwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE2LjE1LjAyLjAwI1dhdGVyIGZpbHRlcnMjNDAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTYuMTUuMDMuMDAjRHVzdCBjb2xsZWN0b3JzIzQwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE2LjE1LjA0LjAwI09pbCBmaWx0ZXJzIzQwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE2LjE1LjA1LjAwI0FpciBmaWx0ZXJzIzQwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE2LjE1LjA2LjAwI0ZpbHRlcmluZyBtYWNoaW5lcnkjNDAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTYuMTUuMDcuMDAjRmlsdGVyIG1lbWJyYW5lcyM0MC4xNi4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNi4xNS4wOC4wMCNCYWcgZmlsdGVycyM0MC4xNi4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNi4xNS4wOS4wMCNBYnNvcnB0aW9uIGZpbHRlcnMjNDAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTYuMTUuMTAuMDAjQmFnIGZpbHRlcnMjNDAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTYuMTUuMTEuMDAjQ29hbGVzY2luZyBmaWx0ZXJzIzQwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE2LjE1LjEyLjAwI0VsZWN0cm9uaWMgZmlsdGVycyM0MC4xNi4xNS4wMC4wMAotdW5zcHNjNyM0MC4xNi4xNS4xMy4wMCNGdWVsIGZpbHRlcnMjNDAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTYuMTUuMTQuMDAjR2FzIHBpcGVsaW5lIGZpbHRlcnMjNDAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTYuMTUuMTUuMDAjSHlkcmF1bGljIGZpbHRlcnMjNDAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTYuMTUuMTYuMDAjSW4gbGluZSBmaWx0ZXJzIzQwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE2LjE1LjE3LjAwI0xpZ2h0IGZpbHRlcnMjNDAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTYuMTUuMTguMDAjTWljcm9maWJlciBmaWx0ZXJzIzQwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE2LjE1LjE5LjAwI1BhbmVsIGZpbHRlcnMjNDAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTYuMTUuMjAuMDAjUmFkaWFsIGZpbiBmaWx0ZXJzIzQwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE2LjE1LjIxLjAwI0ZpbHRlciBCYXNlIzQwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE2LjE1LjIyLjAwI0ZpbHRlciBGaW5zIzQwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzQwLjE2LjE1LjIzLjAwI0Z1ZWwjNDAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTYuMTUuMjQuMDAjUGFpbnQjNDAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDAuMTYuMTYuMDAuMDAjUHVyaWZpY2F0aW9uIzQwLjE2LjAwLjAwLjAwCi11bnNwc2M3IzQwLjE2LjE2LjAxLjAwI0FpciBzY3J1YmJlcnMjNDAuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNDAuMTYuMTYuMDIuMDAjQWlyIGNsZWFuZXJzIzQwLjE2LjE2LjAwLjAwCi11bnNwc2M3IzQwLjE2LjE3LjAwLjAwI1NlcGFyYXRvcnMjNDAuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNDAuMTYuMTcuMDEuMDAjQ2VudHJpZnVnZXMjNDAuMTYuMTcuMDAuMDAKLXVuc3BzYzcjNDAuMTYuMTcuMDIuMDAjV2V0IHNjcnViYmVycyM0MC4xNi4xNy4wMC4wMAotdW5zcHNjNyM0MC4xNi4xNy4wMy4wMCNNaXN0IGVsaW1pbmF0b3JzIzQwLjE2LjE3LjAwLjAwCi11bnNwc2M3IzQwLjE2LjE4LjAwLjAwI0ZpbHRlciBtZWRpYSM0MC4xNi4wMC4wMC4wMAotdW5zcHNjNyM0MC4xNi4xOC4wMS4wMCNNZXRhbCBmYWJyaWMgbWVkaWEjNDAuMTYuMTguMDAuMDAKLXVuc3BzYzcjNDAuMTYuMTguMDIuMDAjUHJlc3NlZCBmZWx0cyM0MC4xNi4xOC4wMC4wMAotdW5zcHNjNyM0MC4xNi4xOC4wMy4wMCNGaWx0ZXIgcGFwZXJzIzQwLjE2LjE4LjAwLjAwCi11bnNwc2M3IzQwLjE2LjE4LjA1LjAwI0ZpbHRlciBjbG90aCM0MC4xNi4xOC4wMC4wMAotdW5zcHNjNyM0MS4wMC4wMC4wMC4wMCNMYWJvcmF0b3J5IGFuZCBNZWFzdXJpbmcgYW5kIE9ic2VydmluZyBhbmQgVGVzdGluZyBFcXVpcG1lbnQjNDEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMDAuMDAuMDAjTGFib3JhdG9yeSBhbmQgc2NpZW50aWZpYyBlcXVpcG1lbnQjNDEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTUuMDAuMDAjTGFib3JhdG9yeSBibGVuZGluZyBhbmQgZGlzcGVyc2luZyBhbmQgaG9tb2dlbml6aW5nIGFuZCBtaXhpbmcgYW5kIHN0aXJyaW5nIGVxdWlwbWVudCM0MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4xNS4wMS4wMCNNaXhlcnMgb3IgYmxlbmRlcnMgb3IgZW11bHNpZmllcnMjNDEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTUuMDIuMDAjU3RvbWFjaGVycyM0MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0MS4xMC4xNS4wMy4wMCNMYWJvcmF0b3J5IHNwcmF5ZXJzIzQxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE1LjA0LjAwI0hvbW9nZW5pc2VycyM0MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0MS4xMC4xNS4wNS4wMCNGcmVuY2ggcHJlc3N1cmUgY2VsbHMjNDEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTUuMDYuMDAjUm9sbGVyIG1peGVycyM0MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0MS4xMC4xNS4wNy4wMCNSb3RhdG9ycyM0MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0MS4xMC4xNS4wOC4wMCNWaWJyYXRvcnMjNDEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTUuMTAuMDAjTWFnbmV0aWMgc3BpbiBiYXJzIG9yIHJldHJpZXZlcnMjNDEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTUuMTEuMDAjU3RpcnJpbmcgdGFibGVzIzQxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE1LjEyLjAwI011bHRpIGJhbmsgb3IgZmxvY2N1bGF0aW9uIGVxdWlwbWVudCM0MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0MS4xMC4xNS4xMy4wMCNTaGFrZXJzIzQxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE1LjE0LjAwI0xhYm9yYXRvcnkgY2VudHJpZnVnZXMjNDEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTUuMTUuMDAjTGlxdWlkIG1lYXN1cmluZyBjYW5zIzQxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE1LjE2LjAwI0xpcXVpZCBkaXNwZW5zZXJzIzQxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE2LjAwLjAwI0xhYm9yYXRvcnkgZml4dHVyZXMgYW5kIGFjY2Vzc29yaWVzIzQxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjE2LjAzLjAwI0xhYm9yYXRvcnkgc3RhbmRzIG9yIGNsYW1wcyBvciB0b25ncyM0MS4xMC4xNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4xNi4wNC4wMCNTbGlkZSBjb250YWluZXJzIzQxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE2LjA1LjAwI1NsaWRlIGRyeWluZyBwbGF0ZXMjNDEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTYuMDcuMDAjTWljcm9zbGlkZSBtYWtpbmcgZXF1aXBtZW50IzQxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE2LjA4LjAwI01pY3Jvc2xpZGUgc3RvcmFnZSBlcXVpcG1lbnQjNDEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTYuMDkuMDAjU3RhdGljIGVsaW1pbmF0b3JzIzQxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE2LjExLjAwI1NsaWRlIHdhcm1lcnMjNDEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTcuMDAuMDAjTGFib3JhdG9yeSBib3JpbmcgYW5kIGdyaW5kaW5nIGFuZCBjdXR0aW5nIGFuZCBjcnVzaGluZyBhbmQgcHJlc3NpbmcgZXF1aXBtZW50IzQxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjE3LjAxLjAwI01pbGxzIzQxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE3LjAyLjAwI1Blc3RsZSBvciBtb3J0YXJzIzQxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE3LjAzLjAwI1Rpc3N1ZSBncmluZGVycyM0MS4xMC4xNy4wMC4wMAotdW5zcHNjNyM0MS4xMC4xNy4wNC4wMCNNaWNyb3RvbWVzIzQxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE3LjA1LjAwI0NydXNoZXJzIG9yIHB1bHZlcmlzZXJzIzQxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE3LjA2LjAwI0Rpc2ludGVncmF0b3JzIzQxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE3LjA3LjAwI0xhYm9yYXRvcnkgcHJlc3NlcyM0MS4xMC4xNy4wMC4wMAotdW5zcHNjNyM0MS4xMC4xOC4wMC4wMCNMYWJvcmF0b3J5IGVsZWN0cm9uIGFuZCBzb2xpZCBzdGF0ZSBwaHlzaWNzIGVxdWlwbWVudCM0MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4xOC4wMS4wMCNFbGVjdHJvbiBndW5zIzQxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE4LjAyLjAwI1ggcmF5IGdlbmVyYXRvcnMjNDEuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTguMDMuMDAjQ291bG9tZXRlcnMjNDEuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTguMDQuMDAjRWxlY3Ryb3Njb3BlcyM0MS4xMC4xOC4wMC4wMAotdW5zcHNjNyM0MS4xMC4xOC4wNS4wMCNGbHV4bWV0ZXJzIzQxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE4LjA2LjAwI01hZ25ldG9tZXRlcnMjNDEuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDEuMTAuMTguMDcuMDAjRWxlY3Ryb24gZGlmZnJhY3Rpb24gYXBwYXJhdHVzIzQxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE4LjA4LjAwI05ldXRyb24gZGlmZnJhY3Rpb24gYXBwYXJhdHVzIzQxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE4LjA5LjAwI09wdGljYWwgZGlmZnJhY3Rpb24gYXBwYXJhdHVzIzQxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE4LjEwLjAwI0RpZmZyYWN0b21ldGVycyM0MS4xMC4xOC4wMC4wMAotdW5zcHNjNyM0MS4xMC4xOS4wMC4wMCNMYWJvcmF0b3J5IGlvbmljIGVxdWlwbWVudCM0MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4xOS4wMS4wMCNJb24gc291cmNlcyM0MS4xMC4xOS4wMC4wMAotdW5zcHNjNyM0MS4xMC4xOS4wMi4wMCNJb24gZXhjaGFuZ2UgYXBwYXJhdHVzIzQxLjEwLjE5LjAwLjAwCi11bnNwc2M3IzQxLjEwLjE5LjAzLjAwI0lvbiBpbXBsYW50YXRpb24gZXF1aXBtZW50IzQxLjEwLjE5LjAwLjAwCi11bnNwc2M3IzQxLjEwLjIwLjAwLjAwI1NhbXBsaW5nIGFuZCBwdXJpZmljYXRpb24gZXF1aXBtZW50IzQxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIwLjAxLjAwI1NhbXBsZSBjaGFuZ2VycyM0MS4xMC4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMC4wMi4wMCNTYW1wbGUgb3hpZGlzZXIjNDEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjAuMDMuMDAjU2FtcGxlIHByZXBhcmF0aW9uIGxpbmUjNDEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjAuMDQuMDAjU2FtcGxlIHByZXBhcmF0aW9uIGJvbWJzIzQxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIwLjA1LjAwI1dhdGVyIHNhbXBsZXJzIzQxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIwLjA2LjAwI0FpciBzYW1wbGVycyBvciBjb2xsZWN0b3JzIzQxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIwLjA3LjAwI1JlYWdlbnQga2l0cyBmb3IgdXNlIHdpdGggYWlyIHNhbXBsZXJzIzQxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIwLjA4LjAwI0ZpbHRlcnMgb3Igb3RoZXIgc3BhcmUgcGFydHMgZm9yIHNhbXBsZXJzIzQxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIwLjA5LjAwI0R1c3QgZmFsbCBob2xkZXJzIG9yIGphcnMjNDEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjAuMTEuMDAjU3VscGh1ciBkaW94aWRlIG9yIHNtb2tlIHNhbXBsZXJzIzQxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIwLjEyLjAwI1NhbXBsZSBhcHBsaWNhdG9ycyM0MS4xMC4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMC4xMy4wMCNQbGFudCBzYW1wbGVzIGFuYWx5c2lzIGVxdWlwbWVudCM0MS4xMC4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMC4xNC4wMCNBaXIgcG9sbHV0YW50IHNhbXBsZXJzIzQxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIwLjE1LjAwI1dhdGVyIHB1cmlmaWNhdGlvbiByZWFnZW50cyM0MS4xMC4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMC4xNi4wMCNEZWlvbmlzYXRpb24gb3IgZGVtaW5lcmFsaXNhdGlvbiBlcXVpcG1lbnQjNDEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjAuMTcuMDAjQmFzZSBleGNoYW5nZSBlcXVpcG1lbnQjNDEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjAuMTguMDAjUmV2ZXJzZSBvc21vc2lzIGVxdWlwbWVudCM0MS4xMC4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMC4xOS4wMCNVbHRyYSB2aW9sZXQgd2F0ZXIgcHVyaWZpY2F0aW9uIHVuaXRzIzQxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIwLjIwLjAwI1VsdHJhIHB1cmUgd2F0ZXIgc3lzdGVtcyM0MS4xMC4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMC4yMS4wMCNXYXRlciBhbmFseXNpcyBzeXN0ZW1zIzQxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIwLjIyLjAwI0RlaHlkcmF0b3JzIzQxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIwLjIzLjAwI0Rlb3hpZGVycyM0MS4xMC4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMC4yNC4wMCNEaXNzb2x2ZXJzIzQxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIwLjI1LjAwI1NwZWNpbWVuIGhvbGRlcnMjNDEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjAuMjYuMDAjU3BlY2ltZW4gY29sbGVjdG9ycyM0MS4xMC4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMC4yNy4wMCNTYW1wbGUgaG9sZGVycyM0MS4xMC4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMC4yOC4wMCNMdWJyaWNhbnQgc2FtcGxlcnMjNDEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjMuMDAuMDAjTGFib3JhdG9yeSBmZXJtZW50YXRpb24gYW5kIGluY3ViYXRpbmcgZXF1aXBtZW50IzQxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIzLjAxLjAwI1N0YW5kYXJkIGZlcm1lbnRhdGlvbiB1bml0cyM0MS4xMC4yMy4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMy4wMi4wMCNDb250aW51b3VzIGN1bHR1cmUgYXBwYXJhdHVzIzQxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIzLjAzLjAwI0FuYWVyb2JpYyBqYXJzIzQxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIzLjA0LjAwI0RpZ2VzdGlvbiBzeXN0ZW1zIzQxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIzLjA1LjAwI1dhdGVyIGphY2tldGVkIGluY3ViYXRvcnMjNDEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjMuMDYuMDAjQ08yIGluY3ViYXRvcnMjNDEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjMuMDcuMDAjVGlzc3VlIGN1bHR1cmUgaW5jdWJhdG9ycyM0MS4xMC4yMy4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMy4wOC4wMCNJbmN1YmF0b3Igb3ZlbnMjNDEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjMuMDkuMDAjQ29vbGVkIGluY3ViYXRvcnMgKEJPRCkjNDEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjMuMTAuMDAjU2hha2luZyBpbmN1YmF0b3JzIzQxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIzLjExLjAwI0luc3Bpc3NhdG9ycyM0MS4xMC4yMy4wMC4wMAotdW5zcHNjNyM0MS4xMC4yMy4xMi4wMCNQbGF0ZSBpbmN1YmF0b3JzIzQxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIzLjEzLjAwI0luIHZpdHJvIGN1bHR1cmUgZXF1aXBtZW50IzQxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzQxLjEwLjIzLjE0LjAwI0JhY3RlcmlhIGVxdWlwbWVudCM0MS4xMC4yMy4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNC4wMC4wMCNMYWJvcmF0b3J5IGhlYXRpbmcgYW5kIGRyeWluZyBlcXVpcG1lbnQjNDEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjQuMDEuMDAjR2FzIGJ1cm5lcnMjNDEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjQuMDIuMDAjU3Bpcml0IGJ1cm5lcnMjNDEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjQuMDMuMDAjTGFib3JhdG9yeSBpbmNpbmVyYXRvcnMjNDEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjQuMDQuMDAjTGFib3JhdG9yeSBoZWF0ZXJzIzQxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI0LjA1LjAwI01hbnRsZXMgb3IgdGFwZXMjNDEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjQuMDYuMDAjSG90IHBsYXRlcyM0MS4xMC4yNC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNC4wNy4wMCNXYXJtaW5nIGNhYmluZXRzIzQxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI0LjA4LjAwI0RyeWluZyBvdmVucyM0MS4xMC4yNC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNC4wOS4wMCNJbmR1Y3Rpb24gZHJ5ZXJzIzQxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI0LjEwLjAwI0luZnJhcmVkIGRyeWVycyM0MS4xMC4yNC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNC4xMS4wMCNTcHJheSBkcnllcnMjNDEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjQuMTIuMDAjSG90IGFpciBibG93ZXJzIzQxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI0LjEzLjAwI0RyeWluZyBjYWJpbmV0cyM0MS4xMC4yNC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNC4xNC4wMCNGcmVlemUgZHJ5ZXJzIzQxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI0LjE1LjAwI0xhYm9yYXRvcnkgZnVybmFjZXMjNDEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjQuMTYuMDAjQWdlaW5nIG92ZW5zIzQxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI0LjE4LjAwI1F1YXJ0eiBvdmVuIHBvdHMjNDEuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjQuMTkuMDAjTWljcm93YXZlIG9yIHJhZGlhbnQgaGVhdCBvdmVucyM0MS4xMC4yNC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNC4yMC4wMCNEZXNpY2NhdG9ycyM0MS4xMC4yNC4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNC4yMS4wMCNUZW1wZXJhdHVyZSBjeWNsaW5nIGNoYW1iZXJzIzQxLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI1LjAwLjAwI0xhYm9yYXRvcnkgZW50b21vbG9naWNhbCBlcXVpcG1lbnQgYW5kIGFjY2Vzc29yaWVzIzQxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjI1LjAxLjAwI0luc2VjdCBjb250YWluZXJzIzQxLjEwLjI1LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI1LjAyLjAwI1JlYXJpbmcgZmFjaWxpdGllcyBmb3IgZW50b21vbG9neSM0MS4xMC4yNS4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNS4wMy4wMCNGYWJyaWMgb3IgbmV0dGluZyBmb3IgZW50b21vbG9neSM0MS4xMC4yNS4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNS4wNC4wMCNFbnRvbW9sb2dpY2FsIHBpbm5pbmcgZXF1aXBtZW50IzQxLjEwLjI1LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI1LjA1LjAwI0VudG9tb2xvZ2ljYWwgbW91bnRpbmcgbWF0ZXJpYWxzIzQxLjEwLjI1LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI1LjA2LjAwI0VudG9tb2xvZ2ljYWwgdHJheXMjNDEuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjUuMDcuMDAjRW50b21vbG9naWNhbCBjYXRjaGluZyBlcXVpcG1lbnQjNDEuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjUuMDguMDAjRW50b21vbG9naWNhbCBhc3BpcmF0b3JzIzQxLjEwLjI1LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI1LjA5LjAwI0VudG9tb2xvZ2ljYWwgZGlwcGVycyM0MS4xMC4yNS4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNS4xMC4wMCNFbnRvbW9sb2dpY2FsIG1vbm9jdXBzIzQxLjEwLjI1LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI1LjExLjAwI0VudG9tb2xvZ2ljYWwgc3RpY2t5IHRyYXBzIzQxLjEwLjI1LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI1LjEyLjAwI0luc2VjdCB0ZXN0IGtpdHMjNDEuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjUuMTMuMDAjRW50b21vbG9naWNhbCBkaXNwbGF5IHVuaXRzIzQxLjEwLjI1LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI2LjAwLjAwI0FuaW1hbCBsYWJvcmF0b3J5IGVxdWlwbWVudCBhbmQgYWNjZXNzb3JpZXMjNDEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjYuMDEuMDAjQ2FnZXMgZm9yIHNtYWxsIGFuaW1hbHMjNDEuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjYuMDIuMDAjQXF1YXJpYSBlcXVpcG1lbnQjNDEuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjYuMDMuMDAjQW5pbWFsIGlkZW50aWZpY2F0aW9uIHN1cHBsaWVzIzQxLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI2LjA0LjAwI0FuaW1hbCBjYXRjaGluZyBkZXZpY2VzIzQxLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI2LjA1LjAwI0Zpc2ggYWVyYXRpb24gc3lzdGVtcyM0MS4xMC4yNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNi4wNi4wMCNBbmltYWwgZmVlZGluZyBuZWVkbGVzIzQxLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI3LjAwLjAwI0NyeXN0YWxsb2dyYXBoeSBlcXVpcG1lbnQjNDEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjcuMDEuMDAjQ3J5c3RhbCBsYXR0aWNlIG1vZGVscyM0MS4xMC4yNy4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNy4wMi4wMCNTY2ludGlsbGF0aW9uIGNyeXN0YWwgYXNzZW1ibGllcyM0MS4xMC4yNy4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNy4wMy4wMCNMaWdodCBzY2F0dGVyaW5nIGVxdWlwbWVudCM0MS4xMC4yNy4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNy4wNC4wMCNYIHJheSBkaWZmcmFjdGlvbiBlcXVpcG1lbnQjNDEuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjcuMDUuMDAjQ3J5c3RhbGxpc2VycyM0MS4xMC4yNy4wMC4wMAotdW5zcHNjNyM0MS4xMC4yNy4wNi4wMCNDcnlzdGFsIGdyb3dpbmcgZXF1aXBtZW50IzQxLjEwLjI3LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI5LjAwLjAwI0hpc3RvbG9neSBlcXVpcG1lbnQjNDEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjkuMDEuMDAjVGlzc3VlIGVtYmVkZGluZyBzdGF0aW9ucyM0MS4xMC4yOS4wMC4wMAotdW5zcHNjNyM0MS4xMC4yOS4wMi4wMCNFbWJlZGRpbmcgbW9sZHMjNDEuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjkuMDMuMDAjRW1iZWRkaW5nIGNhcHN1bGVzIzQxLjEwLjI5LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI5LjA0LjAwI0VtYmVkZGluZyBjb21wb3VuZHMjNDEuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjkuMDUuMDAjSGlzdG9sb2dpY2FsIHN0YWluaW5nIGFwcGFyYXR1cyM0MS4xMC4yOS4wMC4wMAotdW5zcHNjNyM0MS4xMC4yOS4wOS4wMCNUaXNzdWUgcHJvY2Vzc29ycyM0MS4xMC4yOS4wMC4wMAotdW5zcHNjNyM0MS4xMC4yOS4xMC4wMCNUaXNzdWUgY3VsdHVyZSBhcHBhcmF0dXMjNDEuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjkuMTEuMDAjSGlzdG9sb2dpY2FsIGtuaXZlcyBvciBrbmlmZSBob2xkZXJzIzQxLjEwLjI5LjAwLjAwCi11bnNwc2M3IzQxLjEwLjI5LjEyLjAwI0hpc3RvbG9naWNhbCBnbGFzcyBrbmlmZSBtYWtlcnMjNDEuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjkuMTMuMDAjSGlzdG9sb2dpY2FsIGhvbmVzIG9yIHN0cmFwcyBvciBjb21wb3VuZHMjNDEuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMjkuMTQuMDAjVWx0cmFzb25pYyBkaXNpbnRlZ3JhdG9ycyM0MS4xMC4yOS4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMC4wMC4wMCNMYWJvcmF0b3J5IGNvb2xpbmcgZXF1aXBtZW50IzQxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMwLjAxLjAwI1JlZnJpZ2VyYXRlZCBjb29saW5nIHBsYXRlIHByb2JlcyM0MS4xMC4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMC4wMi4wMCNGcmVlemluZyBzcHJheSBhZXJvc29scyM0MS4xMC4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMC4wMy4wMCNDcnlvc3RhdHMjNDEuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzAuMDQuMDAjRmFuIGNpcmN1bGF0ZWQgb3ZlbnMjNDEuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzAuMDUuMDAjVWx0cmEgY29sZCBjYWJpbmV0cyM0MS4xMC4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMC4wNi4wMCNDcnlvZ2VuaWMgZnJlZXplcnMjNDEuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzAuMDcuMDAjQ2hpbGxpbmcgdW5pdHMgb3IgY29sZCB3YXRlciBjaXJjdWxhdGlvbiM0MS4xMC4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMC4wOC4wMCNSZWZyaWdlcmF0ZWQgY29vbGluZyBtb2R1bGVzIzQxLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMwLjA5LjAwI0NhZGF2ZXIgc3RvcmFnZSByZWZyaWdlcmF0b3JzIzQxLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMxLjAwLjAwI0xhYm9yYXRvcnkgc3VwcGxpZXMjNDEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzEuMDEuMDAjVGVzdCB0dWJlcyM0MS4xMC4zMS4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMS4wMy4wMCNQaXBldHRlcyBvciBhY2Nlc3NvcmllcyM0MS4xMC4zMS4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMS4wNC4wMCNGbGFza3MjNDEuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzEuMDUuMDAjQmVha2VycyM0MS4xMC4zMS4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMS4wNi4wMCNTdGlycmluZyByb2RzIzQxLjEwLjMxLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMxLjA3LjAwI0xhYm9yYXRvcnkgb3Igc2FtcGxpbmcgc3lyaW5nZXMjNDEuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzEuMDguMDAjRGVzaWNjYW50cyM0MS4xMC4zMS4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMS4wOS4wMCNXYXRjaCBnbGFzc2VzIzQxLjEwLjMxLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMxLjEwLjAwI0J1cmV0cyM0MS4xMC4zMS4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMS4xMS4wMCNNZWFzdXJpbmcgY3lsaW5kZXIjNDEuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzEuMTIuMDAjTGFib3JhdG9yeSBkaXNoZXMjNDEuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzEuMTMuMDAjU2xpZGVzIzQxLjEwLjMxLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMxLjE0LjAwI1N0b3BwZXJzIzQxLjEwLjMxLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMxLjE1LjAwI1R1YmluZyBjb25uZWN0b3JzIzQxLjEwLjMxLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMxLjE2LjAwI0xhYm9yYXRvcnkgY2FzZXMjNDEuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzEuMTcuMDAjTGFib3JhdG9yeSBzY29vcHMgb3Igc3BhdHVsYXMjNDEuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzIuMDAuMDAjTGFib3JhdG9yeSBjbGVhbmluZyBlcXVpcG1lbnQjNDEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzIuMDEuMDAjQ2hlbWljYWwgZW5naW5lZXJpbmcgd2FzaGVycyM0MS4xMC4zMi4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMi4wMi4wMCNMYWJvcmF0b3J5IHdhc2hpbmcgbWFjaGluZXMjNDEuMTAuMzIuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzIuMDMuMDAjUGlwZXR0ZSB3YXNoZXJzIzQxLjEwLjMyLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMyLjA0LjAwI1VsdHJhc29uaWMgY2xlYW5lcnMjNDEuMTAuMzIuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzMuMDAuMDAjRmx1aWQgbWVjaGFuaWNzIGVxdWlwbWVudCM0MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMy4wMS4wMCNMaXF1aWQgc2NpbnRpbGxhdGlvbiBjb3VudGVycyM0MS4xMC4zMy4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMy4wMi4wMCNCYXR0ZXJ5IGFjaWQgaHlkcm9tZXRlcnMjNDEuMTAuMzMuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzMuMDMuMDAjRGVuc2l0b21ldGVycyM0MS4xMC4zMy4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMy4wNC4wMCNWYWN1dW0gb3ZlbnMjNDEuMTAuMzMuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzMuMDUuMDAjSGlnaCB2YWN1dW0gZXF1aXBtZW50IzQxLjEwLjMzLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMzLjA2LjAwI1BuZXVtYXRpYyB2YWN1dW0gZXF1aXBtZW50IzQxLjEwLjMzLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMzLjA3LjAwI1ZhY3V1bSBvciBtZXJjdXJ5IHZhcG91ciBlcXVpcG1lbnQjNDEuMTAuMzMuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzMuMDguMDAjSGlnaCB2YWN1dW0gY29tYnVzdGlvbiBhcHBhcmF0dXMjNDEuMTAuMzMuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzMuMDkuMDAjRmxvdyBpbmplY3Rpb24gYW5hbHlzaXMgZXF1aXBtZW50IzQxLjEwLjMzLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMzLjEwLjAwI0dhcyBvciB2YXBvdXIgY29uY2VudHJhdGlvbiBtZWFzdXJpbmcgaW5zdHJ1bWVudHMjNDEuMTAuMzMuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzMuMTEuMDAjTWFub21ldGVycyM0MS4xMC4zMy4wMC4wMAotdW5zcHNjNyM0MS4xMC4zMy4xMi4wMCNWaXNjb3NpbWV0ZXJzIzQxLjEwLjMzLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMzLjEzLjAwI0RlcHRoIGluZGljYXRvcnMjNDEuMTAuMzMuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzMuMTQuMDAjTWljcm9zY29waWMgc3RydWN0dXJlIGVzdGltYXRpb24gYXBwYXJhdHVzIzQxLjEwLjMzLjAwLjAwCi11bnNwc2M3IzQxLjEwLjMzLjE1LjAwI1NvbHV0aW9uIHN0cmVuZ3RoIGVzdGltYXRpb24gYXBwYXJhdHVzIzQxLjEwLjMzLjAwLjAwCi11bnNwc2M3IzQxLjEwLjM0LjAwLjAwI0xhYm9yYXRvcnkgZW52aXJvbm1lbnRhbCBjb25kaXRpb25pbmcgZXF1aXBtZW50IzQxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjM0LjAxLjAwI0NvbnRhbWluYXRpb24gY29udHJvbCBzY3JlZW5zIzQxLjEwLjM0LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM0LjAyLjAwI0Vudmlyb25tZW50YWwgY2hhbWJlcnMjNDEuMTAuMzQuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzQuMDMuMDAjTWljcm9iaW9sb2dpY2FsIGFpcmNvbnRyb2wjNDEuMTAuMzQuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzQuMDQuMDAjR3Jvd3RoIGNoYW1iZXJzIzQxLjEwLjM0LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM0LjA1LjAwI1dhbGsgaW4gY2hhbWJlcnMjNDEuMTAuMzQuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzQuMDYuMDAjR2xvdmUgYm94ZXMjNDEuMTAuMzQuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzUuMDAuMDAjTGFib3JhdG9yeSB2ZW50aWxhdGluZyBlcXVpcG1lbnQjNDEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzUuMDEuMDAjRWJ1bGlvbWV0ZXIjNDEuMTAuMzUuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzUuMDIuMDAjRnVtZSBob29kcyM0MS4xMC4zNS4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNS4wMy4wMCNGdW1lIGN1cGJvYXJkcyM0MS4xMC4zNS4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNS4wNC4wMCNMYW1pbmFyIGZsb3cgY2FiaW5ldHMgb3Igc3RhdGlvbnMjNDEuMTAuMzUuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzYuMDAuMDAjTGFib3JhdG9yeSBkZWNhbnRpbmcgYW5kIGRpc3RpbGxpbmcgYW5kIGV2YXBvcmF0aW5nIGFuZCBmaWx0ZXJpbmcgZXF1aXBtZW50IGFuZCBzdXBwbGllcyM0MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNi4wMS4wMCNGbGFzayBvciByZXRvcnQgdW5pdHMjNDEuMTAuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzYuMDIuMDAjQmkgZGlzdGlsbGF0aW9uIHVuaXRzIzQxLjEwLjM2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM2LjAzLjAwI0V2YXBvcmF0b3JzIzQxLjEwLjM2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM2LjA0LjAwI1ZhY3V1bSBldmFwb3JhdG9ycyM0MS4xMC4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNi4wNS4wMCNFeHRyYWN0aW5nIGVxdWlwbWVudCM0MS4xMC4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNi4wNi4wMCNMaW5lIGZpbHRlcnMjNDEuMTAuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzYuMDcuMDAjR2VsIGZpbHRyYXRpb24gZXF1aXBtZW50IzQxLjEwLjM2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM2LjA4LjAwI1VsdHJhIGZpbHRyYXRpb24gZXF1aXBtZW50IzQxLjEwLjM2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM2LjA5LjAwI1NpbnRlcmVkIGNlbGwgZmlsdGVycyM0MS4xMC4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNi4xMC4wMCNUaGluIGNoYW5uZWwgZmlsdHJhdGlvbiBlcXVpcG1lbnQjNDEuMTAuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzYuMTEuMDAjUmV2ZXJzZSBvc21vc2lzIGZpbHRyYXRpb24gZXF1aXBtZW50IzQxLjEwLjM2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM2LjEyLjAwI01vbGVjdWxhciBmaWx0cmF0aW9uIGVxdWlwbWVudCM0MS4xMC4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNi4xMy4wMCNDYXJ0cmlkZ2UgZWxlbWVudCBmaWx0ZXJzIzQxLjEwLjM2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM2LjE0LjAwI0ZpbHRlciBob2xkZXJzIG9yIGN5Y2xvbmVzIzQxLjEwLjM2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM2LjE1LjAwI011bHRpIHNoZWV0IG9yIHByZXNzIG9yIGZpbHRlciM0MS4xMC4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNi4xNi4wMCNBaXIgZmlsdHJhdGlvbiBzeXN0ZW1zIzQxLjEwLjM2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM2LjE3LjAwI0hlcGEgZmlsdGVycyM0MS4xMC4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNi4xOC4wMCNGbHVpZCBwcmVzc2VzIGZpbHRlciM0MS4xMC4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNi4xOS4wMCNTZWRpbWVudG9sb2dpY2FsIGFuYWx5emluZyB1bml0IzQxLjEwLjM2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM2LjIwLjAwI0xhYm9yYXRvcnkgc2VwYXJhdG9ycyM0MS4xMC4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNi4yMS4wMCNMYWJvcmF0b3J5IHNpZnRpbmcgZXF1aXBtZW50IzQxLjEwLjM2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM2LjIyLjAwI1Rlc3Qgc2lldmVzIzQxLjEwLjM2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM2LjIzLjAwI0xhYm9yYXRvcnkgc2NydWJiZXJzIzQxLjEwLjM2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM2LjI0LjAwI1RpdHJhdGlvbiBlcXVpcG1lbnQjNDEuMTAuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTAuMzYuMjUuMDAjTGFib3JhdG9yeSBkaWx1dGVycyM0MS4xMC4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNi4yNi4wMCNGcmFjdGlvbmF0aW9uIGFwcGFyYXR1cyM0MS4xMC4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNi4yNy4wMCNEaXN0aWxsYXRpb24gcGlwaW5ncyBvciBjb2x1bW5zIG9yIGZpdHRpbmdzIzQxLjEwLjM2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM2LjI4LjAwI1JlZmx1eCBjb21wb25lbnRzIzQxLjEwLjM2LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM2LjI5LjAwI0hlYXQgZXhjaGFuZ2UgY29uZGVuc2VycyM0MS4xMC4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNy4wMC4wMCNMYWJvcmF0b3J5IGJhdGhzIzQxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQxLjEwLjM3LjAxLjAwI0NpcmN1bGF0aW5nIGJhdGhzIzQxLjEwLjM3LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM3LjAyLjAwI1RoZXJtb3N0YXRpYyBiYXRocyM0MS4xMC4zNy4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNy4wMy4wMCNNdWx0aXBsZSBiYXRocyM0MS4xMC4zNy4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNy4wNC4wMCNCaW9sb2dpY2FsIGJhdGhzIzQxLjEwLjM3LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM3LjA1LjAwI09yZ2FuIGJhdGhzIzQxLjEwLjM3LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM3LjA2LjAwI1dhdGVyIGJhdGhzIzQxLjEwLjM3LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM3LjA3LjAwI09pbCBiYXRocyM0MS4xMC4zNy4wMC4wMAotdW5zcHNjNyM0MS4xMC4zNy4wOC4wMCNTYW5kIGJhdGhzIzQxLjEwLjM3LjAwLjAwCi11bnNwc2M3IzQxLjEwLjM3LjA5LjAwI1JlZnJpZ2VyYXRlZCBiYXRocyM0MS4xMC4zNy4wMC4wMAotdW5zcHNjNyM0MS4xMS4wMC4wMC4wMCNNZWFzdXJpbmcgYW5kIG9ic2VydmluZyBhbmQgdGVzdGluZyBpbnN0cnVtZW50cyM0MS4wMC4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNS4wMC4wMCNXZWlnaHQgbWVhc3VyaW5nIGluc3RydW1lbnRzIzQxLjExLjAwLjAwLjAwCi11bnNwc2M3IzQxLjExLjE1LjAxLjAwI0VsZWN0cm9uaWMgdG9wbG9hZGluZyBiYWxhbmNlcyM0MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNS4wMi4wMCNMYWJvcmF0b3J5IGJhbGFuY2VzIzQxLjExLjE1LjAwLjAwCi11bnNwc2M3IzQxLjExLjE1LjAzLjAwI01lY2hhbmljYWwgYmFsYW5jZXMjNDEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTUuMDQuMDAjUHVsbCBzcHJpbmcgYmFsYW5jZXMjNDEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTUuMDUuMDAjQ2FsaWJyYXRpb24gd2VpZ2h0cyBvciB3ZWlnaHQgc2V0cyM0MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNS4wNi4wMCNBbmltYWwgd2VpZ2hpbmcgc2NhbGVzIzQxLjExLjE1LjAwLjAwCi11bnNwc2M3IzQxLjExLjE1LjA3LjAwI0JlbmNoIHNjYWxlcyM0MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNS4wOC4wMCNCb2R5d2VpZ2h0IG1lYXN1cmluZyBzY2FsZXMjNDEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTUuMDkuMDAjRmxvb3Igb3IgcGxhdGZvcm0gc2NhbGVzIzQxLjExLjE1LjAwLjAwCi11bnNwc2M3IzQxLjExLjE1LjEwLjAwI1Bvc3RhbCBzY2FsZXMjNDEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTUuMTEuMDAjVHJ1Y2sgb3IgcmFpbCBzY2FsZXMjNDEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTYuMDAuMDAjTGVuZ3RoIGFuZCB0aGlja25lc3MgYW5kIGRpc3RhbmNlIG1lYXN1cmluZyBpbnN0cnVtZW50cyM0MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNi4wMS4wMCNNaWNyb21ldGVycyM0MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNi4wMi4wMCNQZWRvbWV0ZXJzIzQxLjExLjE2LjAwLjAwCi11bnNwc2M3IzQxLjExLjE2LjAzLjAwI1JhbmdlZmluZGVycyM0MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNi4wNC4wMCNSdWxlcnMjNDEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTYuMDUuMDAjU3RyYWluIGdhdWdlcyM0MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNi4wNi4wMCNUZWxsdXJvbWV0ZXJzIzQxLjExLjE2LjAwLjAwCi11bnNwc2M3IzQxLjExLjE2LjA3LjAwI1RocmVhZCBjb3VudGVycyBvciBnYXVnZXMjNDEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTYuMDguMDAjQ2FsaXBlcnMjNDEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTYuMTMuMDAjRGlzdGFuY2UgbWV0ZXJzIzQxLjExLjE2LjAwLjAwCi11bnNwc2M3IzQxLjExLjE2LjE0LjAwI0hlaWdodCBnYXVnZXMjNDEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTYuMTUuMDAjTGFzZXIgbWVhc3VyaW5nIHN5c3RlbXMjNDEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTYuMTYuMDAjTWVhc3VyaW5nIHdoZWVscyBmb3IgZGlzdGFuY2UjNDEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTYuMTcuMDAjRmVlbGVyIGdhdWdlcyM0MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNi4xOC4wMCNHYWdlIGJsb2NrIHNldCM0MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNi4xOS4wMCNHbyBvciBubyBnbyBnYXVnZSM0MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNi4yMC4wMCNFdGFsb24gd2VkZ2UjNDEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTcuMDAuMDAjVmlld2luZyBhbmQgb2JzZXJ2aW5nIGluc3RydW1lbnRzIGFuZCBhY2Nlc3NvcmllcyM0MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNy4wMS4wMCNJb24gbWljcm9zY29wZXMjNDEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTcuMDIuMDAjTW9ub2N1bGFyIG1pY3Jvc2NvcGVzIzQxLjExLjE3LjAwLjAwCi11bnNwc2M3IzQxLjExLjE3LjAzLjAwI1N0ZXJlbyBtaWNyb3Njb3BlcyM0MS4xMS4xNy4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNy4wNC4wMCNJbGx1bWluYXRvcnMgZm9yIG1pY3Jvc2NvcGVzIzQxLjExLjE3LjAwLjAwCi11bnNwc2M3IzQxLjExLjE3LjA1LjAwI09iamVjdGl2ZXMgZm9yIG1pY3Jvc2NvcGVzIzQxLjExLjE3LjAwLjAwCi11bnNwc2M3IzQxLjExLjE3LjA2LjAwI1Bob3RvIGF0dGFjaG1lbnRzIGZvciBtaWNyb3Njb3BlcyM0MS4xMS4xNy4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNy4wNy4wMCNQcm9maWxlIHByb2plY3RvcnMjNDEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTcuMDguMDAjVmlkZW8gYXR0YWNobWVudHMgZm9yIG1pY3Jvc2NvcGVzIzQxLjExLjE3LjAwLjAwCi11bnNwc2M3IzQxLjExLjE3LjA5LjAwI0Jpbm9jdWxhciBtaWNyb3Njb3BlIzQxLjExLjE3LjAwLjAwCi11bnNwc2M3IzQxLjExLjE3LjEwLjAwI0NvbWJpbmF0aW9uIGVsZWN0cm9uIGFuZCBsaWdodCBtaWNyb3Njb3BlcyM0MS4xMS4xNy4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNy4xMS4wMCNFbGVjdHJvbiBtaWNyb3Njb3BlcyM0MS4xMS4xNy4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNy4xMi4wMCNJbnZlcnRlZCBtaWNyb3Njb3BlcyM0MS4xMS4xNy4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNy4xMy4wMCNNYWduaWZpZXJzIzQxLjExLjE3LjAwLjAwCi11bnNwc2M3IzQxLjExLjE3LjE0LjAwI0xvdXBlcyM0MS4xMS4xNy4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNy4xNS4wMCNUZWxlc2NvcGVzIzQxLjExLjE3LjAwLjAwCi11bnNwc2M3IzQxLjExLjE3LjE2LjAwI0JvcmVzY29wZSBpbnNwZWN0aW9uIGVxdWlwbWVudCM0MS4xMS4xNy4wMC4wMAotdW5zcHNjNyM0MS4xMS4xNy4xNy4wMCNCaW5vY3VsYXJzIzQxLjExLjE3LjAwLjAwCi11bnNwc2M3IzQxLjExLjE4LjAwLjAwI05vbiBkZXN0cnVjdGl2ZSBleGFtaW5hdGlvbiBlcXVpcG1lbnQjNDEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTguMDEuMDAjRWRkeSBjdXJyZW50IGV4YW1pbmF0aW9uIGVxdWlwbWVudCM0MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM0MS4xMS4xOC4wMi4wMCNMaXF1aWQgcGVuZXRyYW50IGV4YW1pbmF0aW9uIGVxdWlwbWVudCM0MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM0MS4xMS4xOC4wMy4wMCNNYWduZXRpYyBwYXJ0aWNsZSBleGFtaW5hdGlvbiBlcXVpcG1lbnQjNDEuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTguMDQuMDAjVWx0cmFzb25pYyBleGFtaW5hdGlvbiBlcXVpcG1lbnQjNDEuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTguMDUuMDAjQ08gNjAgcmFkaW9ncmFwaHkgZXhhbWluYXRpb24gZXF1aXBtZW50IzQxLjExLjE4LjAwLjAwCi11bnNwc2M3IzQxLjExLjE4LjA2LjAwI0NTIDEzNyByYWRpb2dyYXBoeSBleGFtaW5hdGlvbiBlcXVpcG1lbnQjNDEuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTguMDcuMDAjSVIgMTkyIHJhZGlvZ3JhcGh5IGV4YW1pbmF0aW9uIGVxdWlwbWVudCM0MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM0MS4xMS4xOC4wOC4wMCNYIHJheSByYWRpb2dyYXBoeSBleGFtaW5hdGlvbiBlcXVpcG1lbnQjNDEuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTkuMDAuMDAjSW5kaWNhdGluZyBhbmQgcmVjb3JkaW5nIGluc3RydW1lbnRzIzQxLjExLjAwLjAwLjAwCi11bnNwc2M3IzQxLjExLjE5LjAxLjAwI0NvdW50ZXJzIzQxLjExLjE5LjAwLjAwCi11bnNwc2M3IzQxLjExLjE5LjAyLjAwI0VsZWN0cm9uaWMgY291bnRlcnMjNDEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTkuMDMuMDAjTWV0YWwgZGV0ZWN0b3JzIzQxLjExLjE5LjAwLjAwCi11bnNwc2M3IzQxLjExLjE5LjA0LjAwI0VsZWN0cm9uaWMgY29sdW1ucyM0MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4xOS4wNS4wMCNFbGVjdHJvbmljIG1lYXN1cmluZyBwcm9iZXMjNDEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTkuMDYuMDAjQ2hhcnQgcmVjb3JkZXJzIzQxLjExLjE5LjAwLjAwCi11bnNwc2M3IzQxLjExLjE5LjA3LjAwI0RpZ2l0YWwgcmVhZG91dCByZWNvcmRlcnMjNDEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTkuMDguMDAjR3JhcGhpYyByZWNvcmRlcnMjNDEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTkuMDkuMDAjTWFnbmV0aWMgdGFwZSByZWNvcmRlcnMjNDEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTkuMTAuMDAjTXVsdGlwZW4gcmVjb3JkZXJzIzQxLjExLjE5LjAwLjAwCi11bnNwc2M3IzQxLjExLjE5LjExLjAwI09zY2lsbG9ncmFwaGljIHJlY29yZGVycyM0MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4xOS4xMi4wMCNQaHlzaW9sb2dpY2FsIHJlY29yZGVycyM0MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4xOS4xMy4wMCNQb2ludCBwbG90dGluZyByZWNvcmRlcnMjNDEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTkuMTQuMDAjU2Vydm8gcmVjb3JkZXJzIzQxLjExLjE5LjAwLjAwCi11bnNwc2M3IzQxLjExLjE5LjE1LjAwI0JpIG1ldGFsbGljIHNlbnNvcnMjNDEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTkuMTYuMDAjTm9uIGNvbnRhY3Qgc2Vuc29ycyM0MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4xOS4xNy4wMCNEaWdpdGFsIHRlc3RlcnMjNDEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTkuMTguMDAjR3lyb3Njb3BpYyBpbnN0cnVtZW50cyM0MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4xOS4xOS4wMCNEZXRlY3Rpb24gYXBwYXJhdHVzIGZvciBub24gbWV0YWxpYyBvYmplY3RzIzQxLjExLjE5LjAwLjAwCi11bnNwc2M3IzQxLjExLjE5LjIwLjAwI0Nvb3JkaW5hdGUgbWVhc3VyaW5nIG1hY2hpbmVzIChDTU0pIzQxLjExLjE5LjAwLjAwCi11bnNwc2M3IzQxLjExLjE5LjIxLjAwI1NwZWVkIHNlbnNvcnMjNDEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTkuMjIuMDAjTGFtcCBmYWlsdXJlIHNlbnNvciM0MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4xOS4yMy4wMCNQcmUgaWduaXRpb24ga25vY2sgc2Vuc29yIzQxLjExLjE5LjAwLjAwCi11bnNwc2M3IzQxLjExLjE5LjI0LjAwI094eWdlbiBzZW5zb3JzIzQxLjExLjE5LjAwLjAwCi11bnNwc2M3IzQxLjExLjE5LjI1LjAwI1NwZWVkIHNlbnNvcnMjNDEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTkuMjYuMDAjUHJveGltaXR5IHNlbnNvcnMjNDEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMTkuMjcuMDAjUHJlc3N1cmUgc2Vuc29ycyM0MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4xOS4yOC4wMCNDdXJyZW50IHNlbnNvcnMjNDEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjAuMDAuMDAjTGlnaHQgYW5kIHdhdmUgYW5kIHNvdW5kIGdlbmVyYXRpbmcgYW5kICBtZWFzdXJpbmcgZXF1aXBtZW50IzQxLjExLjAwLjAwLjAwCi11bnNwc2M3IzQxLjExLjIwLjAxLjAwI0xpZ2h0IGFic29ycHRpb25tZXRlcnMjNDEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjAuMDIuMDAjQWNvdXN0aWMgdGVzdGluZyByb29tcyM0MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMC4wMy4wMCNBbmVjaG9pYyBjaGFtYmVycyM0MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMC4wNC4wMCNGcmVxdWVuY3kgYW5hbHl6ZXJzIzQxLjExLjIwLjAwLjAwCi11bnNwc2M3IzQxLjExLjIwLjA1LjAwI0ZyZXF1ZW5jeSBjb3VudGVycyBvciB0aW1lciBvciBkaXZpZGVycyM0MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMC4wNi4wMCNFbGVjdHJpY2FsIGZyZXF1ZW5jeSBtZXRlcnMjNDEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjAuMDcuMDAjSW50ZXJmZXJvbWV0ZXJzIzQxLjExLjIwLjAwLjAwCi11bnNwc2M3IzQxLjExLjIwLjA4LjAwI0xhc2VycyM0MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMC4wOS4wMCNMaWdodG1ldGVycyM0MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMC4xMC4wMCNMdXhtZXRlcnMjNDEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjAuMTEuMDAjT3B0aWNhbCBjYWxsaWJyYXRpb24gc2V0cyM0MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMC4xMi4wMCNQaG90b21ldGVycyM0MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMC4xMy4wMCNQb2xhcmltZXRlcnMjNDEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjAuMTQuMDAjUG9sYXJpc2NvcGVzIzQxLjExLjIwLjAwLjAwCi11bnNwc2M3IzQxLjExLjIwLjE1LjAwI1JlZmxlY3RvbWV0ZXJzIzQxLjExLjIwLjAwLjAwCi11bnNwc2M3IzQxLjExLjIwLjE2LjAwI1NvbmFycyM0MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMC4xNy4wMCNTb25vbWV0ZXJzIzQxLjExLjIwLjAwLjAwCi11bnNwc2M3IzQxLjExLjIwLjE4LjAwI1NvdW5kIG1lYXN1cmluZyBhcHBhcmF0dXMgb3IgZGVjaWJlbCBtZXRlciM0MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMC4xOS4wMCNTcGVjdHJvZmx1b3JpbWV0ZXJzIzQxLjExLjIwLjAwLjAwCi11bnNwc2M3IzQxLjExLjIwLjIwLjAwI1NwZWN0cm9ncmFwaHMjNDEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjAuMjEuMDAjU3BlY3Ryb21ldGVycyM0MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMC4yMi4wMCNNYXNzIHNwZWN0cm9tZXRlcnMjNDEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjAuMjMuMDAjUHJvdG9uIHNwZWN0cm9tZXRlcnMjNDEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjAuMjQuMDAjU3BlY3Ryb3Bob3RvbWV0ZXJzIzQxLjExLjIwLjAwLjAwCi11bnNwc2M3IzQxLjExLjIwLjI1LjAwI1N0cm9ib3Njb3BlcyM0MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMC4yNi4wMCNTb3VuZCB2ZWxvY2l0eSBhbmFseXplcnMjNDEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjAuMjcuMDAjVGhpY2tuZXNzIG1lYXN1cmluZyBkZXZpY2VzIzQxLjExLjIwLjAwLjAwCi11bnNwc2M3IzQxLjExLjIxLjAwLjAwI1RyYW5zZHVjZXJzIzQxLjExLjAwLjAwLjAwCi11bnNwc2M3IzQxLjExLjIxLjAxLjAwI1BpZXpvIGVsZWN0cmljIGNyeXN0YWxzIzQxLjExLjIxLjAwLjAwCi11bnNwc2M3IzQxLjExLjIxLjAyLjAwI1N0cmFpbiBnYXVnZXMjNDEuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjEuMDMuMDAjRmliZXIgc2Vuc29ycyM0MS4xMS4yMS4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMi4wMC4wMCNUZW1wZXJhdHVyZSBhbmQgaGVhdCBtZWFzdXJpbmcgaW5zdHJ1bWVudHMjNDEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjIuMDEuMDAjQ2Fsb3JpbWV0ZXJzIzQxLjExLjIyLjAwLjAwCi11bnNwc2M3IzQxLjExLjIyLjAyLjAwI0hlYXQgdHJhY2luZyBlcXVpcG1lbnQjNDEuMTEuMjIuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjIuMDMuMDAjTWVsdGluZyBwb2ludCByZWNvcmRlcnMjNDEuMTEuMjIuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjIuMDQuMDAjUHlyb21ldGVycyM0MS4xMS4yMi4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMi4wNS4wMCNUZW1wZXJhdHVyZSByZWd1bGF0b3JzIzQxLjExLjIyLjAwLjAwCi11bnNwc2M3IzQxLjExLjIyLjA2LjAwI1RoZXJtb2NvdXBsZXMjNDEuMTEuMjIuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjIuMDcuMDAjVGhlcm1vZ3JhcGhzIzQxLjExLjIyLjAwLjAwCi11bnNwc2M3IzQxLjExLjIyLjA5LjAwI1RoZXJtb3N0YXRzIzQxLjExLjIyLjAwLjAwCi11bnNwc2M3IzQxLjExLjIyLjEwLjAwI1JlbW90ZSByZWFkaW5nIHRoZXJtb21ldGVycyM0MS4xMS4yMi4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMi4xMS4wMCNSZXNpc3RhbmNlIHRoZXJtb21ldGVycyM0MS4xMS4yMi4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMi4xMi4wMCNTdXJmYWNlIHRoZXJtb21ldGVycyM0MS4xMS4yMi4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMi4xMy4wMCNIYW5kaGVsZCB0aGVybW9tZXRlciM0MS4xMS4yMi4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMy4wMC4wMCNIdW1pZGl0eSBtZWFzdXJpbmcgaW5zdHJ1bWVudHMjNDEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjMuMDEuMDAjSHlncm9tZXRlcnMjNDEuMTEuMjMuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjMuMDIuMDAjUHN5Y2hyb21ldGVycyM0MS4xMS4yMy4wMC4wMAotdW5zcHNjNyM0MS4xMS4yMy4wMy4wMCNUZW1wZXJhdHVyZSBodW1pZGl0eSB0ZXN0ZXJzIzQxLjExLjIzLjAwLjAwCi11bnNwc2M3IzQxLjExLjI0LjAwLjAwI1ByZXNzdXJlIG1lYXN1cmluZyBhbmQgY29udHJvbCBpbnN0cnVtZW50cyM0MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yNC4wMS4wMCNEZXB0aCBnYXVnZXMjNDEuMTEuMjQuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjQuMDIuMDAjTWFub3N0YXRzIzQxLjExLjI0LjAwLjAwCi11bnNwc2M3IzQxLjExLjI0LjAzLjAwI1ByZXNzdXJlIHJlYWRpbmcgaW5kaWNhdG9ycyM0MS4xMS4yNC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yNC4wNC4wMCNQcmVzc3VyZSByZWd1bGF0b3IjNDEuMTEuMjQuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjQuMDUuMDAjUHJlc3N1cmUgb3IgdmFjdXVtIHJlY29yZGVycyM0MS4xMS4yNC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yNC4wNi4wMCNWYWN1dW0gZ2F1Z2VzIzQxLjExLjI0LjAwLjAwCi11bnNwc2M3IzQxLjExLjI0LjA3LjAwI0xpcXVpZCBsZXZlbCBjb250cm9scyBvciBpbnN0cnVtZW50cyM0MS4xMS4yNC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yNS4wMC4wMCNGbG93IG1lYXN1cmluZyBpbnN0cnVtZW50cyM0MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yNS4wMS4wMCNGbG93bWV0ZXJzIzQxLjExLjI1LjAwLjAwCi11bnNwc2M3IzQxLjExLjI1LjAyLjAwI1JoZW9tZXRlcnMjNDEuMTEuMjUuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjUuMDMuMDAjUm90YW1ldGVycyM0MS4xMS4yNS4wMC4wMAotdW5zcHNjNyM0MS4xMS4yNS4wNC4wMCNXYXRlciBtZXRlcnMjNDEuMTEuMjUuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjUuMDUuMDAjV2F0ZXIgbWV0ZXIgc3BhcmVzIzQxLjExLjI1LjAwLjAwCi11bnNwc2M3IzQxLjExLjI1LjA2LjAwI1ZlbnR1cmlzIzQxLjExLjI1LjAwLjAwCi11bnNwc2M3IzQxLjExLjI3LjAwLjAwI1NlZWQgYW5kIGZlZWQgZXF1aXBtZW50IzQxLjExLjAwLjAwLjAwCi11bnNwc2M3IzQxLjExLjI3LjAxLjAwI0dyYWluIGFuYWx5emVycyM0MS4xMS4yNy4wMC4wMAotdW5zcHNjNyM0MS4xMS4yNy4wMi4wMCNTZWVkIGNvdW50ZXJzIzQxLjExLjI3LjAwLjAwCi11bnNwc2M3IzQxLjExLjI3LjAzLjAwI0ZpYmVyIGFwcGFyYXR1cyBmb3IgZmVlZCBzYW1wbGUgYW5hbHlzaXMjNDEuMTEuMjcuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjguMDAuMDAjVHJhbnNwb3J0YXRpb24gcmVsYXRlZCBlcXVpcG1lbnQgYW5kIGluc3RydW1lbnRzIzQxLjExLjAwLjAwLjAwCi11bnNwc2M3IzQxLjExLjI4LjAxLjAwI1NwZWVkb21ldGVycyM0MS4xMS4yOC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yOC4wMi4wMCNUYWNob21ldGVycyM0MS4xMS4yOC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yOS4wMC4wMCNOYXZpZ2F0aW9uYWwgZXF1aXBtZW50IGFuZCBpbnN0cnVtZW50cyM0MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4yOS4wMS4wMCNEaXJlY3Rpb24gZmluZGluZyBjb21wYXNzZXMjNDEuMTEuMjkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMjkuMDIuMDAjUmFkaW8gbmF2aWdhdGlvbiBpbnN0cnVtZW50cyM0MS4xMS4yOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4yOS4wMy4wMCNTZXh0YW50cyM0MS4xMS4yOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4yOS4wNC4wMCNDb21wbGV4IGNvbnRyb2xsaW5nIGRldmljZXMjNDEuMTEuMjkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzAuMDAuMDAjQ2hlbWljYWwgZXZhbHVhdGlvbiBpbnN0cnVtZW50cyBhbmQgc3VwcGxpZXMjNDEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzAuMDEuMDAjRGlnaXRhbCBhbmFseXplciBjb250cm9sbGVycyM0MS4xMS4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMC4wMi4wMCNDaGVtaWx1bWluZXNjZW5jZSBvciBiaW9sdW1pbmVzY2VuY2UgYW5hbHl6ZXJzIzQxLjExLjMwLjAwLjAwCi11bnNwc2M3IzQxLjExLjMwLjAzLjAwI0VsZWN0cm9ncmF2aW1ldHJ5IGFuYWx5emVycyM0MS4xMS4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMC4wNC4wMCNGbGFtZSBpb25pemF0aW9uIGFuYWx5emVycyM0MS4xMS4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMC4wNS4wMCNJb24gYW5hbHl6ZXJzIzQxLjExLjMwLjAwLjAwCi11bnNwc2M3IzQxLjExLjMwLjA2LjAwI1JhZGlvbWV0cnkgYW5hbHl6ZXJzIzQxLjExLjMwLjAwLjAwCi11bnNwc2M3IzQxLjExLjMwLjA3LjAwI1JhbmRvbSBhY2Nlc3MgYW5hbHl6ZXJzIzQxLjExLjMwLjAwLjAwCi11bnNwc2M3IzQxLjExLjMwLjA4LjAwI0NpbnRpZ3JhcGhpYyBhbmFseXplcnMjNDEuMTEuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzAuMDkuMDAjVGhlcm1hbCBkaWZmZXJlbnRpYWwgYW5hbHl6ZXJzIzQxLjExLjMwLjAwLjAwCi11bnNwc2M3IzQxLjExLjMwLjEwLjAwI1RoZXJtbyBncmF2aW1ldHJ5IGFuYWx5emVycyM0MS4xMS4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMC4xMS4wMCNDaHJvbWF0b2dyYXBoaWMgZGV0ZWN0b3JzIzQxLjExLjMwLjAwLjAwCi11bnNwc2M3IzQxLjExLjMwLjEyLjAwI0Nocm9tYXRvZ3JhcGhpYyBzY2FubmVycyM0MS4xMS4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMC4xMy4wMCNHYXMgY2hyb21hdG9ncmFwaHMjNDEuMTEuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzAuMTQuMDAjSW9uIGNocm9tYXRvZ3JhcGhzIzQxLjExLjMwLjAwLjAwCi11bnNwc2M3IzQxLjExLjMwLjE1LjAwI0xpcXVpZCBjaHJvbWF0b2dyYXBocyM0MS4xMS4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMC4xNi4wMCNUaGlubGF5ZXIgY2hyb21hdG9ncmFwaHMjNDEuMTEuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzAuMTguMDAjSGlnaCBwcmVzc3VyZSBsaXF1aWQgY2hyb21hdG9ncmFwaCBjaHJvbWF0b2dyYXBoeSM0MS4xMS4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMC4xOS4wMCNIaWdoIHByZXNzdXJlIHRoaW4gbGF5ZXIgY2hyb21hdG9ncmFwaCAoVExDKSM0MS4xMS4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMC4yMC4wMCNDb2xvcmltZXRlcnMjNDEuMTEuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzAuMjEuMDAjQ29uZHVjdGltZXRyaWMgaW5zdHJ1bWVudHMjNDEuMTEuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzAuMjIuMDAjRmx1b3JpbWV0ZXJzIzQxLjExLjMwLjAwLjAwCi11bnNwc2M3IzQxLjExLjMwLjIzLjAwI0dlbCBwYXJ0aXRpb24gZXF1aXBtZW50IzQxLjExLjMwLjAwLjAwCi11bnNwc2M3IzQxLjExLjMwLjI0LjAwI0h5ZHJvbWV0ZXJzIzQxLjExLjMwLjAwLjAwCi11bnNwc2M3IzQxLjExLjMwLjI1LjAwI01vbm9jaHJvbWF0b3JzIzQxLjExLjMwLjAwLjAwCi11bnNwc2M3IzQxLjExLjMwLjI2LjAwI05lcGhlbG9tZXRlcnMjNDEuMTEuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzAuMjcuMDAjT3Ntb21ldGVycyM0MS4xMS4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMC4yOC4wMCNwSCBtZXRlcnMjNDEuMTEuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzAuMjkuMDAjUG9sYXJvZ3JhcGhzIzQxLjExLjMwLjAwLjAwCi11bnNwc2M3IzQxLjExLjMwLjMwLjAwI1JhZGlvY2hyb21hdG9ncmFwaGljIHNjYW5uZXIjNDEuMTEuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzAuMzEuMDAjU2FjY2hhcm9tZXRlcnMjNDEuMTEuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzAuMzIuMDAjU2FsaW5pdHkgbWV0ZXIjNDEuMTEuMzAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzAuMzMuMDAjVm9sdW1ldGVycyM0MS4xMS4zMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMS4wMC4wMCNHYXMgYW5hbHl6ZXJzIzQxLjExLjAwLjAwLjAwCi11bnNwc2M3IzQxLjExLjMxLjAxLjAwI0F1dG9tb3RpdmUgZXhoYXVzdCBlbWlzc2lvbiBhbmFseXplcnMjNDEuMTEuMzEuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzEuMDIuMDAjQ2F0YWx5dGljIGNvbWJ1c3Rpb24gYW5hbHl6ZXJzIzQxLjExLjMxLjAwLjAwCi11bnNwc2M3IzQxLjExLjMxLjAzLjAwI0NoZW1pY2FsIGFic29ycHRpb24gZ2FzIGFuYWx5emVycyM0MS4xMS4zMS4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMS4wNC4wMCNFeHBsb3NpbWV0ZXJzIzQxLjExLjMxLjAwLjAwCi11bnNwc2M3IzQxLjExLjMxLjA1LjAwI0h5ZHJvY2FyYm9ucyBhbmFseXplcnMgb3IgZGV0ZWN0b3JzIzQxLjExLjMxLjAwLjAwCi11bnNwc2M3IzQxLjExLjMxLjA2LjAwI0luZnJhIHJlZCBvciB1bHRyYSB2aW9sZXQgYWJzb3JwdGlvbiBhbmFseXplcnMjNDEuMTEuMzEuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzEuMDcuMDAjTml0cm9nZW4gYW5hbHl6ZXJzIzQxLjExLjMxLjAwLjAwCi11bnNwc2M3IzQxLjExLjMxLjA4LjAwI05pdHJvZ2VuIG94aWRlIGFuYWx5emVycyM0MS4xMS4zMS4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMS4wOS4wMCNPUlNBVCBlcXVpcG1lbnQjNDEuMTEuMzEuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzEuMTAuMDAjT3h5Z2VuIGdhcyBhbmFseXplcnMjNDEuMTEuMzEuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzEuMTEuMDAjT3pvbmUgYW5hbHl6ZXJzIzQxLjExLjMxLjAwLjAwCi11bnNwc2M3IzQxLjExLjMxLjEyLjAwI1BhcmFtYWduZXRpYyBzdXNjZXB0aWJpbGl0eSBhbmFseXplcnMjNDEuMTEuMzEuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzEuMTMuMDAjU3VsZnVyIGRpb3hpZGUgYW5hbHl6ZXJzIG9yIGRldGVjdG9ycyM0MS4xMS4zMS4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMS4xNC4wMCNUaGVybWFsIGNvbmR1Y3Rpdml0eSBhbmFseXplcnMjNDEuMTEuMzEuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzEuMTUuMDAjUmFkb24gZGV0ZWN0b3JzIzQxLjExLjMxLjAwLjAwCi11bnNwc2M3IzQxLjExLjMxLjE2LjAwI0dhcyBkZXRlY3RvciB0dWJlcyM0MS4xMS4zMS4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMy4wMC4wMCNMaXF1aWQgYW5kIHNvbGlkIGFuYWx5emVycyM0MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMy4wMS4wMCNBY2lkIG9yIGJhc2UgYW5hbHl6ZXJzIzQxLjExLjMzLjAwLjAwCi11bnNwc2M3IzQxLjExLjMzLjAyLjAwI0FsYnVtaW5vbWV0ZXJzIzQxLjExLjMzLjAwLjAwCi11bnNwc2M3IzQxLjExLjMzLjAzLjAwI0FtaW5vIGFjaWQgYW5hbHl6ZXJzIzQxLjExLjMzLjAwLjAwCi11bnNwc2M3IzQxLjExLjMzLjA0LjAwI0JhdXhpdGUgYW5hbHl6ZXJzIzQxLjExLjMzLjAwLjAwCi11bnNwc2M3IzQxLjExLjMzLjA1LjAwI0NhbGNpdW0gYW5hbHl6ZXJzIzQxLjExLjMzLjAwLjAwCi11bnNwc2M3IzQxLjExLjMzLjA2LjAwI0NobG9yaWRlIGFuYWx5emVycyM0MS4xMS4zMy4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMy4wNy4wMCNEaXNzb2x2ZWQgb3h5Z2VuIG1lYXN1cmVtZW50IG1ldGVyIzQxLjExLjMzLjAwLjAwCi11bnNwc2M3IzQxLjExLjMzLjA4LjAwI0VsZWN0cm9seXRlIGFuYWx5emVycyM0MS4xMS4zMy4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMy4wOS4wMCNFbnp5bWUgYW5hbHl6ZXJzIzQxLjExLjMzLjAwLjAwCi11bnNwc2M3IzQxLjExLjMzLjEwLjAwI0ZhdHR5IGFjaWQgYW5hbHl6ZXJzIzQxLjExLjMzLjAwLjAwCi11bnNwc2M3IzQxLjExLjMzLjExLjAwI0hhbGlkZSBkZXRlY3RvciBsYW1wIzQxLjExLjMzLjAwLjAwCi11bnNwc2M3IzQxLjExLjMzLjEyLjAwI0xhY3RhdGUgYW5hbHl6ZXJzIzQxLjExLjMzLjAwLjAwCi11bnNwc2M3IzQxLjExLjMzLjEzLjAwI01pbmVyYWwgb2lsIHRlc3RpbmcgaW5zdHJ1bWVudHMjNDEuMTEuMzMuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzMuMTQuMDAjT2lsIGNvbnRlbnQgbW9uaXRvcnMgYW5hbHl6ZXJzIzQxLjExLjMzLjAwLjAwCi11bnNwc2M3IzQxLjExLjMzLjE1LjAwI09yZ2FuaWMgY2FyYm9uIGFuYWx5emVycyM0MS4xMS4zMy4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMy4xNi4wMCNQZXRyb2xldW0gdGVzdGluZyBlcXVpcG1lbnQjNDEuMTEuMzMuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzMuMTcuMDAjUHJvdGVpbiBhbmFseXplcnMjNDEuMTEuMzMuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzMuMTguMDAjVXJhbml1bSBhbmFseXplcnMjNDEuMTEuMzMuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzMuMTkuMDAjV2F0ZXIgYW5hbHl6ZXJzIzQxLjExLjMzLjAwLjAwCi11bnNwc2M3IzQxLjExLjMzLjIwLjAwI0x1YnJpY2F0aW5nIG9pbCB0ZXN0aW5nIGtpdCM0MS4xMS4zMy4wMC4wMAotdW5zcHNjNyM0MS4xMS4zMy4yMS4wMCNQYWludCB0ZXN0ZXIjNDEuMTEuMzMuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzQuMDAuMDAjTnVjbGVhciBldmFsdWF0aW9uIGluc3RydW1lbnRzIzQxLjExLjAwLjAwLjAwCi11bnNwc2M3IzQxLjExLjM0LjAxLjAwI0FscGhhIGNvdW50ZXJzIzQxLjExLjM0LjAwLjAwCi11bnNwc2M3IzQxLjExLjM0LjAyLjAwI0FscGhhIGJldGEgY291bnRlcnMjNDEuMTEuMzQuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzQuMDMuMDAjQmV0YSBjb3VudGVycyM0MS4xMS4zNC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNC4wNC4wMCNCZXRhIGdhbW1hIGNvdW50ZXJzIzQxLjExLjM0LjAwLjAwCi11bnNwc2M3IzQxLjExLjM0LjA1LjAwI0dhbW1hIGNvdW50ZXJzIzQxLjExLjM0LjAwLjAwCi11bnNwc2M3IzQxLjExLjM0LjA2LjAwI0tWUCBtZXRlcnMjNDEuMTEuMzQuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzQuMDcuMDAjWCByYXkgbWljcm9hbmFseXNlcnMjNDEuMTEuMzQuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMDAuMDAjRWxlY3RyaWNhbCBtZWFzdXJpbmcgYW5kIHRlc3RpbmcgZXF1aXBtZW50IzQxLjExLjAwLjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjAxLjAwI0FtbWV0ZXJzIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjAyLjAwI1BoYXNlbWV0ZXJzIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjAzLjAwI0JyaWRnZXMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMDQuMDAjQ2FwYWNpdGFuY2UgbWV0ZXJzIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjA1LjAwI1RoZXJtb2FuYWx5c2lzIGRlcml2YXRvZ3JhcGhzIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjA2LjAwI0ZyZWV6ZSB3YXRjaCBpbmRpY2F0b3JzIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjA3LjAwI0hlYXQgc3RyZXNzIG1vbml0b3JzIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjA4LjAwI0NvaW5jaWRlbmNlIG9yIGFudGljb2luY2lkZW5jZSBjb3VudGVycyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4wOS4wMCNDb25kdWN0aXZpdHkgY2VsbHMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMTAuMDAjQ29uZHVjdGl2aXR5IG1ldGVycyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4xMS4wMCNDcm9zcyB0YWxrIG1ldGVycyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4xMi4wMCNFYXJ0aCByZXNpc3RhbmNlIHRlc3RlcnMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMTMuMDAjRWxlY3RyaWNhbCB2YWx1ZSByZWNvcmRlcnMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMTQuMDAjRWxlY3Ryb21hZ25ldGljIGZpZWxkIG1ldGVycyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4xNS4wMCNFbGVjdHJvbWV0ZXJzIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjE2LjAwI0VsZWN0cm9uaWMgbG9hZHMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMTcuMDAjRmllbGQgc3RyZW5ndGggbWVhc3VyaW5nIGVxdWlwbWVudCM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4xOC4wMCNHYWluIG1lYXN1cmluZyBpbnN0cnVtZW50cyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4xOS4wMCNHYWx2YW5vbWV0ZXJzIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjIwLjAwI0hpZ2ggdm9sdGFnZSBjYWJsZSBkZXRlY3Rpb24jNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMjEuMDAjSW1wZWRhbmNlIG1ldGVycyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4yMi4wMCNDYWxpYnJhdGVkIGluZHVjdGFuY2UgY29pbHMgb3IgYm94ZXMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMjMuMDAjSW5zdWxhdGlvbiByZXNpc3RhbmNlIG1ldGVycyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4yNC4wMCNJbnN1bGF0aW9uIHRlc3RlcnMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMjUuMDAjSW9uaXphdGlvbiBjaGFtYmVycyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4yNi4wMCNJb25tZXRlcnMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMjcuMDAjTGluZSBlYXJ0aCBsb29wIHRlc3RlcnMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMjguMDAjTWVnb2htbWV0ZXJzIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjI5LjAwI01pY3Jvd2F2ZSBsZWFrYWdlIG1ldGVycyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4zMC4wMCNNdWx0aW1ldGVycyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4zMS4wMCNPaG1tZXRlcnMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMzIuMDAjT3NjaWxsb2dyYXBocyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4zMy4wMCNQb3RlbnRpb21ldGVycyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4zNC4wMCNRIG1ldGVycyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4zNS4wMCNDYWxpYnJhdGVkIHJlc2lzdGFuY2UgbWVhc3VyaW5nIGVxdWlwbWVudCM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4zNi4wMCNMZXZlbCBnZW5lcmF0b3JzIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjM3LjAwI1ZvbHRhZ2Ugb3IgY3VycmVudCBtZXRlcnMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuMzguMDAjT3NjaWxsb3Njb3BlcyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi4zOS4wMCNBY2NlbGVyb21ldGVycyM0MS4xMS4zNi4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNi40MC4wMCNXYXR0bWV0ZXJzIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM2LjQxLjAwI0dGSSBjaXJjdWl0IHRlc3RvcnMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuNDIuMDAjQ2lyY3VpdCB0ZXN0ZXIjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuNDMuMDAjRGVtYW5kIG1ldGVycyBvciByZWdpc3RlcnMjNDEuMTEuMzYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzYuNDQuMDAjQ2lyY3VpdCB0cmFjZXJzIzQxLjExLjM2LjAwLjAwCi11bnNwc2M3IzQxLjExLjM3LjAwLjAwI0VsZWN0cm9uaWMgYW5kIGNvbW11bmljYXRpb24gbWVhc3VyaW5nIGFuZCB0ZXN0aW5nIGluc3RydW1lbnRzIzQxLjExLjAwLjAwLjAwCi11bnNwc2M3IzQxLjExLjM3LjAxLjAwI0NhdGhvZGUgcmF5IHR1YmUgdGVzdGVyIzQxLjExLjM3LjAwLjAwCi11bnNwc2M3IzQxLjExLjM3LjAyLjAwI0NvbXBhcmF0b3JzIzQxLjExLjM3LjAwLjAwCi11bnNwc2M3IzQxLjExLjM3LjAzLjAwI0RpcmVjdGlvbmFsIGNvdXBsZXIjNDEuMTEuMzcuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzcuMDQuMDAjSW50ZWdyYXRlZCBjaXJjdWl0IHRlc3RlcnMjNDEuMTEuMzcuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzcuMDUuMDAjTG9naWMgc3RhdGUgdGVzdGVycyM0MS4xMS4zNy4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNy4wNi4wMCNTZW1pY29uZHVjdG9yIHRlc3RlcnMjNDEuMTEuMzcuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzcuMDcuMDAjVHJhbnNpc3RvciBjaXJjdWl0IHRlc3RlcnMjNDEuMTEuMzcuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzcuMDguMDAjUG93ZXIgbWV0ZXJzIzQxLjExLjM3LjAwLjAwCi11bnNwc2M3IzQxLjExLjM3LjA5LjAwI01vZHVsYXRpb24gbWV0ZXJzIzQxLjExLjM3LjAwLjAwCi11bnNwc2M3IzQxLjExLjM3LjEwLjAwI0xldmVsIG1ldGVyIzQxLjExLjM3LjAwLjAwCi11bnNwc2M3IzQxLjExLjM3LjExLjAwI05ldHdvcmsgYW5hbHl6ZXJzIzQxLjExLjM3LjAwLjAwCi11bnNwc2M3IzQxLjExLjM3LjEyLjAwI1RhcGUgdGVzdGVycyM0MS4xMS4zNy4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNy4xMy4wMCNUYXBlc3BlZWQgdGVzdGVycyM0MS4xMS4zNy4wMC4wMAotdW5zcHNjNyM0MS4xMS4zNy4xNC4wMCNEaWZmZXJlbnRpYXRvciM0MS4xMS4zNy4wMC4wMAotdW5zcHNjNyM0MS4xMS4zOC4wMC4wMCNHZW9waHlzaWNhbCBhbmQgZ2VvdGVjaG5pY2FsIGluc3RydW1lbnRzIzQxLjExLjAwLjAwLjAwCi11bnNwc2M3IzQxLjExLjM4LjAxLjAwI0dlb2xvZ2ljYWwgY29tcGFzc2VzIzQxLjExLjM4LjAwLjAwCi11bnNwc2M3IzQxLjExLjM4LjAyLjAwI0dlb2xvZ2ljYWwgcHJvc3BlY3RpbmcgYXBwYXJhdHVzIzQxLjExLjM4LjAwLjAwCi11bnNwc2M3IzQxLjExLjM4LjAzLjAwI0VsZWN0cm9tYWduZXRpYyBnZW9waHlzaWNhbCBpbnN0cnVtZW50cyM0MS4xMS4zOC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zOC4wNC4wMCNHcmF2aXR5IGdlb3BoeXNpY2FsIGluc3RydW1lbnRzIzQxLjExLjM4LjAwLjAwCi11bnNwc2M3IzQxLjExLjM4LjA1LjAwI0luZHVjZWQgcG9sYXJpemF0aW9uIChJUCkgZ2VvcGh5c2ljYWwgaW5zdHJ1bWVudHMjNDEuMTEuMzguMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzguMDYuMDAjTWFnbmV0b21ldGVyIGdlb3BoeXNpY2FsIGluc3RydW1lbnRzIzQxLjExLjM4LjAwLjAwCi11bnNwc2M3IzQxLjExLjM4LjA3LjAwI1Jlc2lzdGl2aXR5IGdlb3BoeXNpY2FsIGluc3RydW1lbnRzIzQxLjExLjM4LjAwLjAwCi11bnNwc2M3IzQxLjExLjM4LjA4LjAwI0dyYXZpbWV0ZXJzIzQxLjExLjM4LjAwLjAwCi11bnNwc2M3IzQxLjExLjM5LjAwLjAwI1NvaWwgbWVhc3VyaW5nIGVxdWlwbWVudCM0MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMS4zOS4wMS4wMCNCb3JlIG1lYXN1cmluZyBpbnN0cnVtZW50cyM0MS4xMS4zOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4zOS4wMi4wMCNEaXNzb2x1dGlvbiBvciBkaXNpbnRlZ3JhdGlvbiB0ZXN0ZXJzIzQxLjExLjM5LjAwLjAwCi11bnNwc2M3IzQxLjExLjM5LjAzLjAwI1BhcnRpY2xlIHNpemUgbWVhc3VyaW5nIGFwcGFyYXR1cyM0MS4xMS4zOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4zOS4wNC4wMCNQZW5ldHJvbWV0ZXJzIzQxLjExLjM5LjAwLjAwCi11bnNwc2M3IzQxLjExLjM5LjA1LjAwI1Blcm1lYWJpbGl0eSB0ZXN0aW5nIGFwcGFyYXR1cyM0MS4xMS4zOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4zOS4wNi4wMCNQZXJtZWFiaWxpdHkgb3IgcG9yb3NpdHkgZXN0aW1hdGlvbiBhcHBhcmF0dXMjNDEuMTEuMzkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzkuMDcuMDAjUG9yb3NpbWV0ZXJzIzQxLjExLjM5LjAwLjAwCi11bnNwc2M3IzQxLjExLjM5LjA4LjAwI1NhbmQgdGVzdGluZyBhcHBhcmF0dXMjNDEuMTEuMzkuMDAuMDAKLXVuc3BzYzcjNDEuMTEuMzkuMDkuMDAjU29pbCBjb3JlIHNhbXBsaW5nIGFwcGFyYXR1cyM0MS4xMS4zOS4wMC4wMAotdW5zcHNjNyM0MS4xMS4zOS4xMC4wMCNTb2lsIHRlc3Rpbmcga2l0cyM0MS4xMS4zOS4wMC4wMAotdW5zcHNjNyM0MS4xMS40MC4wMC4wMCNSb2NrIGFuZCBzdHJhdGEgbWVhc3VyaW5nIGVxdWlwbWVudCM0MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMS40MC4wMS4wMCNDbGlub21ldGVycyM0MS4xMS40MC4wMC4wMAotdW5zcHNjNyM0MS4xMS40MS4wMC4wMCNTZWlzbW9sb2dpY2FsIGluc3RydW1lbnRzIzQxLjExLjAwLjAwLjAwCi11bnNwc2M3IzQxLjExLjQxLjAyLjAwI0VhcnRocXVha2Ugc2ltdWxhdG9ycyM0MS4xMS40MS4wMC4wMAotdW5zcHNjNyM0MS4xMS40MS4wMy4wMCNTZWlzbWljIGFsYXJtIG1vZHVsZXMjNDEuMTEuNDEuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDEuMDQuMDAjU2Vpc21pYyBhbXBsaWZpZXJzIzQxLjExLjQxLjAwLjAwCi11bnNwc2M3IzQxLjExLjQxLjA1LjAwI1BvcnRhYmxlIHNlaXNtaWMgYXBwYXJhdHVzIzQxLjExLjQxLjAwLjAwCi11bnNwc2M3IzQxLjExLjQxLjA2LjAwI1NlaXNtaWMgcmVjb3JkZXJzIG9yIHNlaXNtb2dyYXBocyM0MS4xMS40MS4wMC4wMAotdW5zcHNjNyM0MS4xMS40MS4wNy4wMCNTZWlzbW9tZXRlcnMjNDEuMTEuNDEuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDEuMDguMDAjVmlicm9tZXRlcnMjNDEuMTEuNDEuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDIuMDAuMDAjTGFuZCBzdXJ2ZXlpbmcgaW5zdHJ1bWVudHMjNDEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDIuMDEuMDAjTWVhc3VyaW5nIHRhcGVzIzQxLjExLjQyLjAwLjAwCi11bnNwc2M3IzQxLjExLjQyLjAyLjAwI01lYXN1cmluZyByb2RzIzQxLjExLjQyLjAwLjAwCi11bnNwc2M3IzQxLjExLjQyLjAzLjAwI01lYXN1cmluZyB0YWJsZXMjNDEuMTEuNDIuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDIuMDQuMDAjVGhlb2RvbGl0ZXMjNDEuMTEuNDIuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDIuMDUuMDAjTG9jYXRpb24gc3Rha2UjNDEuMTEuNDIuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDIuMDYuMDAjTG9jYXRpb24gaHViIzQxLjExLjQyLjAwLjAwCi11bnNwc2M3IzQxLjExLjQzLjAwLjAwI0h5ZHJvbG9naWNhbCBpbnN0cnVtZW50cyM0MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM0MS4xMS40My4wMS4wMCNPcGVuIHN0cmVhbSBjdXJyZW50IG1ldGVycyM0MS4xMS40My4wMC4wMAotdW5zcHNjNyM0MS4xMS40My4wMi4wMCNMb2dnaW5nIGluc3RydW1lbnRzIGZvciB3YXRlciB3ZWxscyM0MS4xMS40My4wMC4wMAotdW5zcHNjNyM0MS4xMS40My4wMy4wMCNPcGVuIHN0cmVhbSB3YXRlciBsZXZlbCByZWNvcmRlcnMjNDEuMTEuNDMuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDQuMDAuMDAjTWV0ZW9yb2xvZ2ljYWwgaW5zdHJ1bWVudHMjNDEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDQuMDEuMDAjQW5lbW9tZXRlcnMjNDEuMTEuNDQuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDQuMDIuMDAjQmFyb21ldGVycyM0MS4xMS40NC4wMC4wMAotdW5zcHNjNyM0MS4xMS40NC4wMy4wMCNQcmVjaXBpdGF0aW9uIG9yIGV2YXBvcmF0aW9uIHJlY29yZGVycyM0MS4xMS40NC4wMC4wMAotdW5zcHNjNyM0MS4xMS40NC4wNC4wMCNSYWRpb3NvbmRlIGFwcGFyYXR1cyM0MS4xMS40NC4wMC4wMAotdW5zcHNjNyM0MS4xMS40NC4wNS4wMCNSYWluZmFsbCByZWNvcmRlcnMjNDEuMTEuNDQuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDQuMDYuMDAjUHJlY2lwaXRhdGlvbiBvciBldmFwb3JhdGlvbiBzdXJmYWNlIG9ic2VydmluZyBhcHBhcmF0dXMjNDEuMTEuNDQuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDQuMDcuMDAjU29sYXIgcmFkaWF0aW9uIHN1cmZhY2Ugb2JzZXJ2aW5nIGFwcGFyYXR1cyM0MS4xMS40NC4wMC4wMAotdW5zcHNjNyM0MS4xMS40NC4wOC4wMCNUZW1wZXJhdHVyZSBvciBodW1pZGl0eSBzdXJmYWNlIG9ic2VydmluZyBhcHBhcmF0dXMjNDEuMTEuNDQuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDQuMDkuMDAjV2luZCBzdXJmYWNlIG9ic2VydmluZyBhcHBhcmF0dXMjNDEuMTEuNDQuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDQuMTAuMDAjV2VhdGhlciBzdGF0aW9ucyM0MS4xMS40NC4wMC4wMAotdW5zcHNjNyM0MS4xMS40NC4xMS4wMCNNZXRlb3JvbG9neSBpbnN0cnVtZW50IGFjY2Vzc29yaWVzIzQxLjExLjQ0LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ1LjAwLjAwI01lY2hhbmljYWwgaW5zdHJ1bWVudHMjNDEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDUuMDEuMDAjRHluYW1vbWV0ZXJzIzQxLjExLjQ1LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ1LjAyLjAwI0VsYXN0b21ldGVycyM0MS4xMS40NS4wMC4wMAotdW5zcHNjNyM0MS4xMS40NS4wMy4wMCNFeHRlbnNvbWV0ZXJzIzQxLjExLjQ1LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ1LjA0LjAwI1BpdGNoIG1lYXN1cmluZyBpbnN0cnVtZW50cyM0MS4xMS40NS4wMC4wMAotdW5zcHNjNyM0MS4xMS40NS4wNS4wMCNSb3VuZG5lc3MgdGVzdGluZyBpbnN0cnVtZW50cyM0MS4xMS40NS4wMC4wMAotdW5zcHNjNyM0MS4xMS40NS4wNi4wMCNTcGhlcm9tZXRlcnMjNDEuMTEuNDUuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDUuMDcuMDAjU3ByaW5nIHRlc3RpbmcgbWFjaGluZXMjNDEuMTEuNDUuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDUuMDguMDAjU3VyZmFjZSB0ZXN0ZXJzIzQxLjExLjQ1LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ1LjA5LjAwI1RlbnNpb21ldGVycyM0MS4xMS40NS4wMC4wMAotdW5zcHNjNyM0MS4xMS40NS4xMC4wMCNUb3JxdWUgbGltaXRlciM0MS4xMS40NS4wMC4wMAotdW5zcHNjNyM0MS4xMS40Ni4wMC4wMCNNZXRhbHMgYW5kIG1ldGFsbHVyZ3kgYW5kIHN0cnVjdHVyYWwgbWF0ZXJpYWxzIHRlc3RpbmcgaW5zdHJ1bWVudHMjNDEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDYuMDEuMDAjQWJyYXNpb24gdGVzdGVycyM0MS4xMS40Ni4wMC4wMAotdW5zcHNjNyM0MS4xMS40Ni4wMi4wMCNDb21wcmVzc2lvbiB0ZXN0ZXJzIzQxLjExLjQ2LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ2LjAzLjAwI0NvbmNyZXRlIG9yIGNlbWVudCB0ZXN0aW5nIGluc3RydW1lbnRzIzQxLjExLjQ2LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ2LjA0LjAwI0NvcnJvc2lvbiB0ZXN0ZXJzIzQxLjExLjQ2LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ2LjA1LjAwI0NyYWNrIG9yIGNvcnJvc2lvbiBkZXRlY3RvcnMjNDEuMTEuNDYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDYuMDYuMDAjQ3JlZXAgdGVzdGVycyM0MS4xMS40Ni4wMC4wMAotdW5zcHNjNyM0MS4xMS40Ni4wNy4wMCNEdWN0aWxpdHkgdGVzdGluZyBtYWNoaW5lcyM0MS4xMS40Ni4wMC4wMAotdW5zcHNjNyM0MS4xMS40Ni4wOC4wMCNGYXRpZ3VlIHRlc3RlcnMjNDEuMTEuNDYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDYuMDkuMDAjRm9yZ2luZyB0ZXN0aW5nIGFwcGFyYXR1cyM0MS4xMS40Ni4wMC4wMAotdW5zcHNjNyM0MS4xMS40Ni4xMC4wMCNGb3VuZHJ5IHRlc3RpbmcgYXBwYXJhdHVzIzQxLjExLjQ2LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ2LjExLjAwI0hhcmRuZXNzIHRlc3RlcnMjNDEuMTEuNDYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDYuMTIuMDAjSW1wYWN0IHRlc3RlcnMjNDEuMTEuNDYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDYuMTMuMDAjTG9hZCBmcmFtZSM0MS4xMS40Ni4wMC4wMAotdW5zcHNjNyM0MS4xMS40Ni4xNC4wMCNNZXRhbCB0ZXN0aW5nIGluc3RydW1lbnRzIzQxLjExLjQ2LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ2LjE1LjAwI1Bob3RvZWxhc3RpYyB0ZXN0aW5nIGluc3RydW1lbnRzIzQxLjExLjQ2LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ2LjE2LjAwI1Byb29mc3RyZXNzIGluZGljYXRvcnMjNDEuMTEuNDYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDYuMTcuMDAjUmVsYXhhdGlvbiB0ZXN0ZXJzIzQxLjExLjQ2LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ2LjE4LjAwI1JvdWdobmVzcyBtZWFzdXJpbmcgaW5zdHJ1bWVudHMjNDEuMTEuNDYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDYuMTkuMDAjU2hlYXIgc3RyZW5ndGggdGVzdGVycyM0MS4xMS40Ni4wMC4wMAotdW5zcHNjNyM0MS4xMS40Ni4yMC4wMCNTaG9jayB0ZXN0aW5nIGFwcGFyYXR1cyM0MS4xMS40Ni4wMC4wMAotdW5zcHNjNyM0MS4xMS40Ni4yMS4wMCNUZW5zaW9uIHRlc3RlcnMjNDEuMTEuNDYuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDYuMjIuMDAjVG9yc2lvbiB0ZXN0ZXJzIzQxLjExLjQ2LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ2LjIzLjAwI0ZsZXh1cmUgb3IgdHJhbnN2ZXJzZSB0ZXN0aW5nIG1hY2hpbmVzIzQxLjExLjQ2LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ2LjI0LjAwI1ZpYnJhdGlvbiB0ZXN0ZXJzIzQxLjExLjQ2LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ2LjI1LjAwI1dlYXIgdGVzdGVycyM0MS4xMS40Ni4wMC4wMAotdW5zcHNjNyM0MS4xMS40Ni4yNi4wMCNXZWxkaW5nIHRlc3RpbmcgYXBwYXJhdHVzIzQxLjExLjQ2LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ3LjAwLjAwI1BhcGVyIGFuZCB3b29kIGFuZCB0ZXh0aWxlIHRlc3RpbmcgaW5zdHJ1bWVudHMjNDEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDcuMDEuMDAjQ2FyZGJvYXJkIHRlc3RpbmcgaW5zdHJ1bWVudHMjNDEuMTEuNDcuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDcuMDIuMDAjVGV4dGlsZXMgZmFzdG5lc3MgdGVzdGVycyM0MS4xMS40Ny4wMC4wMAotdW5zcHNjNyM0MS4xMS40Ny4wMy4wMCNMZWF0aGVyIHRlc3RpbmcgaW5zdHJ1bWVudHMjNDEuMTEuNDcuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDcuMDQuMDAjUGFwZXIgdGVzdGluZyBpbnN0cnVtZW50cyM0MS4xMS40Ny4wMC4wMAotdW5zcHNjNyM0MS4xMS40Ny4wNS4wMCNUZXh0aWxlIHRlc3RpbmcgaW5zdHJ1bWVudHMjNDEuMTEuNDcuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDcuMDYuMDAjV29vZCB0ZXN0aW5nIGluc3RydW1lbnRzIzQxLjExLjQ3LjAwLjAwCi11bnNwc2M3IzQxLjExLjQ4LjAwLjAwI0NlcmFtaWNzIGFuZCBnbGFzcyB0ZXN0aW5nIGluc3RydW1lbnRzIzQxLjExLjAwLjAwLjAwCi11bnNwc2M3IzQxLjExLjQ4LjAxLjAwI0NlcmFtaWNzIHRlc3RpbmcgaW5zdHJ1bWVudHMjNDEuMTEuNDguMDAuMDAKLXVuc3BzYzcjNDEuMTEuNDguMDIuMDAjR2xhc3MgdGVzdGluZyBpbnN0cnVtZW50cyM0MS4xMS40OC4wMC4wMAotdW5zcHNjNyM0MS4xMS40OC4wMy4wMCNQb3R0ZXJ5IHRlc3RpbmcgaW5zdHJ1bWVudHMjNDEuMTEuNDguMDAuMDAKLXVuc3BzYzcjNDEuMTEuNTEuMDAuMDAjQ29hbCBhbmQgb3JlIHRlc3RpbmcgaW5zdHJ1bWVudHMjNDEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNTEuMDEuMDAjQ29hbCB0ZXN0aW5nIGluc3RydW1lbnRzIzQxLjExLjUxLjAwLjAwCi11bnNwc2M3IzQxLjExLjUyLjAwLjAwI1JhZGFyIGFuZCBzb25hciBzeXN0ZW1zIGFuZCBjb21wb25lbnRzIzQxLjExLjAwLjAwLjAwCi11bnNwc2M3IzQxLjExLjUyLjAxLjAwI1JhZGFyYmFzZWQgc3VydmVpbGxhbmNlIHN5c3RlbXMjNDEuMTEuNTIuMDAuMDAKLXVuc3BzYzcjNDEuMTEuNTIuMDIuMDAjRmVlZCBob3JucyM0MS4xMS41Mi4wMC4wMAotdW5zcHNjNyM0Mi4wMC4wMC4wMC4wMCNNZWRpY2FsIEVxdWlwbWVudCBhbmQgQWNjZXNzb3JpZXMgYW5kIFN1cHBsaWVzIzQyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjAwLjAwLjAwI0hvc3BpdGFsIGFuZCBtZWRpY2FsIGFuZCBkZW50YWwgZXF1aXBtZW50IzQyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjE1LjAwLjAwI0FuZXN0aGVzaWEgZXF1aXBtZW50IGFuZCBpbnN0cnVtZW50cyBhbmQgYWNjZXNzb3JpZXMjNDIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTUuMDIuMDAjSGVhbHRoY2FyZSBnYXMgbWFjaGluZXMjNDIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTUuMDMuMDAjQW5lc3RoZXNpYSBtYWNoaW5lcyM0Mi4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNS4wNC4wMCNSZWdpb25hbCBhbmFlc3RoZXNpYSBraXRzIG9yIG5lZWRsZXMjNDIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTYuMDAuMDAjTWVkaWNhbCBlcXVpcG1lbnQgYW5kIGluc3RydW1lbnRzIzQyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjE2LjAxLjAwI01lZGljYWwgdGhlcm1vbWV0ZXJzIzQyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE2LjAyLjAwI1NwZWN1bHVtcyM0Mi4xMC4xNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNi4wMy4wMCNPdG9zY29wZXMjNDIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTYuMDQuMDAjQXVkaW9tZXRlcnMgb3IgdHltcGFub21ldGVycyM0Mi4xMC4xNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNi4wNS4wMCNTdGV0aG9zY29wZXMjNDIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTYuMDYuMDAjRXJnb25vbWV0ZXJzIzQyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE2LjA3LjAwI0VsZWN0cm8gdGhlcmFweSBhcHBhcmF0dXMjNDIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTYuMDguMDAjUGhvdG8gdGhlcmFweSBhcHBhcmF0dXMjNDIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTYuMDkuMDAjSHlkcm90aGVyYXB5IHN1cHBsaWVzIG9yIGFjY2Vzc29yaWVzIzQyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE2LjEwLjAwI0FjdXB1bmN0dXJlIHVuaXRzIzQyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE2LjExLjAwI1N0ZXRob2dyYXBocyM0Mi4xMC4xNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNi4xMi4wMCNNZWRpY2FsIHB1bXBzIzQyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE2LjEzLjAwI01lZGljYWwgdmFsdmVzIzQyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE2LjE0LjAwI0VuZG9zY29wZXMjNDIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTcuMDAuMDAjTWVkaWNhbCB0ZXN0aW5nIGFuZCBhbmFseXppbmcgYW5kIGRpYWdub3N0aWMgZXF1aXBtZW50IzQyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjE3LjAxLjAwI1NraW4gdGVzdCBzdHJpcHMjNDIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTcuMDIuMDAjQmxvb2QgYW5hbHl6ZXJzIzQyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE3LjAzLjAwI0Jsb29kIGNlbGwgY291bnRlcnMjNDIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTcuMDQuMDAjSGFlbW9nbG9iaW5vbWV0ZXJzIzQyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE3LjA1LjAwI0JpbGlydWJpbiBtZXRlcnMjNDIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTcuMDYuMDAjSGFlbWFjeXRvbWV0ZXJzIzQyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE3LjA3LjAwI0NvbG9ueSBjb3VudGVycyM0Mi4xMC4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNy4wOC4wMCNGZXJyaXRpbiB0ZXN0IGtpdHMjNDIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTcuMDkuMDAjRW56eW1lIGxpbmtlZCBpbW11bm9zb3JiZW50IGFzc2F5IChFTElTQSkgdGVzdCBraXQjNDIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTcuMTAuMDAjSHVtYW4gaW1tdW5lIGRlZmljaWVuY3kgKEhJVikgdGVzdCBraXRzIzQyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE3LjExLjAwI1N5ZmFjYXJkIHN5cGhpbGlzIHRlc3RzIzQyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE3LjEyLjAwI1ByZWduYW5jeSB0ZXN0IGtpdHMjNDIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTcuMTMuMDAjUmFkaW8gaW1tdW5vYXNzYXkgKFJJQSkgdGVzdCBraXRzIzQyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE3LjE0LjAwI1BvbGlvIGNhc2UgaW52ZXN0aWdhdGlvbiBraXQjNDIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTcuMTUuMDAjVXJpbmUgYmxvb2QgdGVzdCBzdHJpcHMjNDIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTcuMTYuMDAjQ2VsbCBzaXplIGFuYWx5emVycyM0Mi4xMC4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNy4xNy4wMCNXaG9sZSBib2R5IGNvdW50ZXJzIzQyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE3LjE4LjAwI0Jpb21lZGljYWwgY291bnRlcnMjNDIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTcuMTkuMDAjTWVkaWNhbCBtdWx0aXByb2JlIHN5c3RlbSBjb3VudGVycyM0Mi4xMC4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNy4yMC4wMCNBbGxlcmd5IG9yIGRpYWdub3N0aWMga2l0cyM0Mi4xMC4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xNy4yMS4wMCNVcmluYXJ5IHRlc3Qgc2V0IzQyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE3LjIyLjAwI0RpZmZlcmVudGlhbCBjZWxsIGNvdW50ZXJzIzQyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE3LjIzLjAwI1BsYXNtYSB2aXNjb3NpdHkgbWVhc3VyZW1lbnQjNDIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTcuMjQuMDAjUGxhdGVsZXQgYW5hbHlzaXMjNDIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTcuMjUuMDAjQmxvb2QgZ2x1Y29zZSBtZXRlcnMjNDIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTcuMjYuMDAjSGVtb2N1bHR1cmUgdGVzdHMjNDIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTcuMjcuMDAjQm9keWZhdCBhbmFseXNlcnMjNDIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTcuMjguMDAjU2FtcGxlIGNvbGxlY3Rpb24gc3lzdGVtcyM0Mi4xMC4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOC4wMC4wMCNYIHJheSBhbmQgYWxwaGEgYW5kIGJldGEgYW5kIGdhbW1hIHJhZGlhdGlvbiBhcHBhcmF0dXMjNDIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTguMDEuMDAjRGlhZ25vc3RpYyB4IHJheSBlcXVpcG1lbnQjNDIuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTguMDIuMDAjUmFkaW90aGVyYXB5IHNpbXVsYXRvciM0Mi4xMC4xOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOC4wMy4wMCNDYWxpYnJhdGlvbiBlcXVpcG1lbnQjNDIuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTguMDQuMDAjQmlvbWVkaWNhbCByZXNlYXJjaCBzdXBwb3J0IHVuaXRzIzQyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE4LjA1LjAwI0NvbXB1dGVkIHRvbW9ncmFwaHkgKENUKSBzY2FubmVycyM0Mi4xMC4xOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOC4wNi4wMCNXYXRlciBwaGFudG9tcyM0Mi4xMC4xOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOC4wNy4wMCNSYWRpb2Jpb2xvZ2ljYWwgaW5zdHJ1bWVudHMjNDIuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTguMDguMDAjR2FtbWEgc2NpbnRpbGxhdG9ycyM0Mi4xMC4xOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOC4wOS4wMCNHYW1tYSBjYW1lcmFzIzQyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE4LjEwLjAwI0xpbmVhciBhY2NlbGVyYXRvcnMjNDIuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTguMTEuMDAjUmFkaW90aGVyYXB5IGJyYWNoeXRoZXJhcHkgZXF1aXBtZW50IzQyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE4LjEyLjAwI1JhZGlvdGhlcmFweSB0ZWxldGhlcmFweSBjb2JhbHQgNjAgbWFjaGluZSM0Mi4xMC4xOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOC4xMy4wMCNSYWRpb3RoZXJhcHkgdGVsZXRoZXJhcHkgc3VwZXJmaWNpYWwgeCByYXkgbWFjaGluZSM0Mi4xMC4xOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOC4xNC4wMCNSYWRpb3RoZXJhcHkgdGVsZXRoZXJhcHkgb3J0aG92b2x0YWdlIHggcmF5IG1hY2hpbmUjNDIuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTguMTUuMDAjUmFkaW90aGVyYXB5IHRlbGV0aGVyYXB5IGxpbmVhciBhY2NlbGVyYXRvcnMjNDIuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTguMTYuMDAjUmFkaW9pc290b3BlIHNjYW5uZXJzIGZvciBtZWRpY2FsIHB1cnBvc2VzIzQyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE4LjE3LjAwI0RlbnRhbCB4IHJheSB1bml0cyM0Mi4xMC4xOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOC4xOC4wMCNBbmdpb2dyYXBoeSBzdXBwbGllcyM0Mi4xMC4xOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOC4xOS4wMCNBbmdpb2dyYXBoeSBkZXZpY2VzIzQyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE4LjIwLjAwI0FuZ2lvcGxhc3R5IHN1cHBsaWVzIzQyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE4LjIxLjAwI0FuZ2lvcGxhc3R5IGRldmljZXMjNDIuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTkuMDAuMDAjT3h5Z2VuIHRoZXJhcHkgZXF1aXBtZW50IzQyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjE5LjAxLjAwI0luaGFsYXRpb24gZXF1aXBtZW50IzQyLjEwLjE5LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE5LjAyLjAwI01lZGljYWwgaHVtaWRpZmllcnMjNDIuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTkuMDMuMDAjUmVzdXNjaXRhdG9ycyBvciByZXNwaXJhdG9ycyM0Mi4xMC4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOS4wNC4wMCNBc3BpcmF0b3JzIzQyLjEwLjE5LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE5LjA1LjAwI0luc3VmZmxhdG9ycyM0Mi4xMC4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOS4wNi4wMCNSZXN1c2NpdGF0aW9uIGVtZXJnZW5jeSBvdXRmaXRzIzQyLjEwLjE5LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE5LjA3LjAwI05lYnVsaXplcnMjNDIuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTkuMDguMDAjQWVyb3NvbCB0aGVyYXB5IGFwcGFyYXR1cyM0Mi4xMC4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOS4wOS4wMCNNZWRpY2FsIHZlbnRpbGF0aW9uIHN5c3RlbXMjNDIuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTkuMTAuMDAjTWFza3Mgb3IgYnJlYXRoaW5nIGJhZ3MjNDIuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTkuMTEuMDAjSGVhcnQgbHVuZyBhcHBhcmF0dXMjNDIuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTkuMTIuMDAjQnJlYXRoaW5nIGRldmljZSB3aXRoIGh5Z2llbmljIGJhcnJpZXIjNDIuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTkuMTMuMDAjT3h5Z2VuIG1hc2tzIzQyLjEwLjE5LjAwLjAwCi11bnNwc2M3IzQyLjEwLjE5LjE0LjAwI01vYmlsZSBzdWN0aW9uIHVuaXQjNDIuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMTkuMTUuMDAjSHlwZXJiYXJpYyB0cmVhdG1lbnQgY2hhbWJlciM0Mi4xMC4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOS4xNi4wMCNPeHlnZW5hdG9ycyM0Mi4xMC4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4xOS4xNy4wMCNBaXIgb3h5Z2VuIHVuaXRzIzQyLjEwLjE5LjAwLjAwCi11bnNwc2M3IzQyLjEwLjIwLjAwLjAwI01lZGljYWwgYW5kIHN1cmdpY2FsIGFuZCBsYWJvcmF0b3J5IHN0ZXJpbGl6ZXJzIzQyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIwLjAxLjAwI0F1dG9jbGF2ZXMjNDIuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjAuMDIuMDAjU3RlYW0gc3RlcmlsaXplcnMjNDIuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjAuMDMuMDAjQm9pbGluZyBkaXNpbmZlY3RvcnMjNDIuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjAuMDQuMDAjSG90IGFpciBzdGVyaWxpemVycyM0Mi4xMC4yMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMC4wNS4wMCNDaGVtaWNhbCBzdGVyaWxpemVycyM0Mi4xMC4yMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMC4wNi4wMCNMYWJvcmF0b3J5IHN0ZXJpbGl6ZXJzIzQyLjEwLjIwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIwLjA3LjAwI1N0ZXJpbGl6YXRpb24gb3ZlbnMjNDIuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjAuMDguMDAjR2VybWljaWRhbCBsYW1wcyM0Mi4xMC4yMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMC4wOS4wMCNTdGVyaWxpemluZyBsYW1wcyM0Mi4xMC4yMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMC4xMC4wMCNEZWNvbnRhbWluYXRpb24gd2FzaGluZyBlcXVpcG1lbnQjNDIuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuMDAuMDAjU3VyZ2ljYWwgc2V0cyBhbmQgaW5zdHJ1bWVudHMjNDIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuMDEuMDAjQ3J5byBzdXJnZXJ5IGVxdWlwbWVudCM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4wMi4wMCNBdXRvcHN5IGluc3RydW1lbnRzIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjAzLjAwI1N1Y3Rpb24gdW5pdHMgb3IgcGFydHMjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuMDQuMDAjU3VyZ2ljYWwgbGFzZXJzIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjA1LjAwI0VsZWN0cm8gY2F1dGVyeSBzdXJnaWNhbCBlcXVpcG1lbnQjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuMDYuMDAjRWFyIG9yIG5vc2Ugb3IgdGhyb2F0IChFTlQpIHN1cmdlcnkgaW5zdHJ1bWVudHMjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuMDcuMDAjR3luZWNvbG9naWNhbCBzdXJnZXJ5IGluc3RydW1lbnRzIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjA4LjAwI0NhcmRpb2xvZ3kgc3VyZ2VyeSBpbnN0cnVtZW50cyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4wOS4wMCNNaWNybyBzdXJnZXJ5IGluc3RydW1lbnRzIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjEwLjAwI09ydGhvcGVkaWMgc3VyZ2VyeSBpbnN0cnVtZW50cyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4xMS4wMCNTdXR1cmUgY2xpcHMjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuMTIuMDAjRGlzc2VjdGluZyBpbnN0cnVtZW50cyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4xMy4wMCNEaXNzZWN0aW5nIHBpbnMjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuMTQuMDAjSW1wbGFudCBzeXN0ZW1zIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjE1LjAwI0Jsb29kIGxhbmNldHMjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuMTYuMDAjU2NhbHBlbHMjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuMTcuMDAjU3VyZ2ljYWwgYmxhZGVzIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjE4LjAwI0NyYW5pb2NsYXN0cyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4xOS4wMCNTdXJnaWNhbCBzY2lzc29ycyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4yMC4wMCNTdXJnaWNhbCBzaGVhcnMjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuMjEuMDAjU3VyZ2ljYWwgZHJpbGxzIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjIyLjAwI1N1cmdpY2FsIHdpcmUgc2F3cyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4yMy4wMCNTdXJnaWNhbCBwZXJmb3JhdG9ycyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4yNC4wMCNDdXJldHRlcyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4yNS4wMCNTdXJnaWNhbCBjbGFtcHMjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuMjYuMDAjU3VyZ2ljYWwgaW5zdHJ1bWVudCBob2xkZXJzIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjI3LjAwI1N1cmdpY2FsIGVsZXZhdG9ycyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4yOC4wMCNSYXNwYXRvcnkgaW5zdHJ1bWVudHMjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuMjkuMDAjRm9yY2VwcyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4zMC4wMCNTdXJnaWNhbCByZXRyYWN0b3JzIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjMxLjAwI1N1cmdpY2FsIHNwcmVhZGVycyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4zMi4wMCNVdGVyaW5lIHNvdW5kIGluc3RydW1lbnRzIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjMzLjAwI0RpbGF0b3JzIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjM0LjAwI1N1cmdpY2FsIGRpc2hlcyBvciBwb3RzIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjM1LjAwI1N1cmdpY2FsIHByb2JlcyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4zNi4wMCNTdXJnaWNhbCBtYWxsZXRzIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjM3LjAwI0RlY2FwaXRhdGlvbiBob29rcyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS4zOC4wMCNTdXR1cmVzIzQyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIxLjM5LjAwI0NhdGd1dCBjaHJvbWljIHN1dHVyZXMjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjEuNDAuMDAjTGFyeW5nb3Njb3BlcyM0Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMS40MS4wMCNTdXJnaWNhbCBzaGF2aW5nIGtpdHMjNDIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjIuMDAuMDAjUmVoYWJpbGl0YXRpb24gZXF1aXBtZW50IGFuZCBhY2Nlc3NvcmllcyM0Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMi4wMS4wMCNTcGxpbnRzIzQyLjEwLjIyLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIyLjAyLjAwI1BzeWNob2xvZ2ljYWwgYXB0aXR1ZGUgdGVzdGluZyBhcHBhcmF0dXMjNDIuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjIuMDMuMDAjTWFzc2FnZSBhcHBhcmF0dXMjNDIuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjIuMDQuMDAjVHJhY3Rpb24gcHVsbGV5cyBvciBiZWx0cyBvciB3ZWlnaHRzIzQyLjEwLjIyLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIyLjA1LjAwI1BoeXNpY2FsIHRoZXJhcHkgcmVoYWJpbGl0YXRpb24gZXF1aXBtZW50IG9yIGFjY2Vzc29yaWVzIzQyLjEwLjIyLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIyLjA2LjAwI092ZXJiZWQgZnJhbWVzIzQyLjEwLjIyLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIyLjA3LjAwI1JlaGFiaWxpdGF0aW9uIHN0aW11bGF0b3JzIzQyLjEwLjIyLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIyLjA4LjAwI1BhdGllbnQgbGlmdGVycyM0Mi4xMC4yMi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMi4wOS4wMCNTaG9ydCB3YXZlIGRpYXRoZXJteSBlcXVpcG1lbnQjNDIuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjIuMTAuMDAjTW9pc3QgaGVhdCB0aGVyYXB5IGVxdWlwbWVudCM0Mi4xMC4yMi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMi4xMS4wMCNIZWF0IG9yIGNvbGQgcGFja3MjNDIuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjIuMTIuMDAjUGh5c2lvbG9naWNhbCBlcXVpcG1lbnQjNDIuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjIuMTMuMDAjU3RpbXVsYXRvcnMjNDIuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjIuMTQuMDAjUmVoYWJpbGl0YXRpb24gc3VwcGxpZXMgZm9yIHRoZSBibGluZCM0Mi4xMC4yMi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMi4xNS4wMCNFbGVjdHJvbXlvZ3JhcGgjNDIuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjIuMTYuMDAjUmVoYWJpbGl0YXRpb24gc3VwcGxpZXMgZm9yIHNwZWVjaCBoYW5kaWNhcHBlZCM0Mi4xMC4yMi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMi4xNy4wMCNFbGVjdHJvIHNsZWVwIGFwcGFyYXR1cyM0Mi4xMC4yMi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMi4xOC4wMCNWaXN1YWwgZXhlcmNpc2UgdHJhaW5pbmcgYWlkcyM0Mi4xMC4yMi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMi4xOS4wMCNPcnRob3BlZGljIGN1c2hpb25zIzQyLjEwLjIyLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIzLjAwLjAwI09waHRoYWxtb2xvZ3kgaW5zdHJ1bWVudHMgYW5kIGFwcGxpYW5jZXMjNDIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjMuMDEuMDAjT3B0aGFsbW9sb2dpY2FsIHB1bmNoZXMjNDIuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjMuMDIuMDAjUGhvdG9jb2FndWxhdG9ycyM0Mi4xMC4yMy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMy4wMy4wMCNTbGl0IGxhbXBzIzQyLjEwLjIzLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIzLjA0LjAwI1BlcmltZXRlcnMjNDIuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjMuMDUuMDAjVG9ub21ldGVycyM0Mi4xMC4yMy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMy4wNi4wMCNSZXRpbm9tZXRlcnMjNDIuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjMuMDcuMDAjRXlld2FzaGVycyM0Mi4xMC4yMy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMy4wOC4wMCNPcGh0aGFsbW9tZXRlcnMjNDIuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjMuMDkuMDAjT3BodGhhbG1vc2NvcGVzIzQyLjEwLjIzLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIzLjEwLjAwI0VtZXJnZW5jeSBleWUgY2FyZSBlcXVpcG1lbnQjNDIuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjMuMTEuMDAjS2VyYXRvbWV0ZXJzIzQyLjEwLjIzLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIzLjEyLjAwI1Zpc2lvbiB0ZXN0ZXJzIzQyLjEwLjIzLjAwLjAwCi11bnNwc2M3IzQyLjEwLjIzLjEzLjAwI1N5bm90b3Njb3BlcyM0Mi4xMC4yMy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yMy4xNC4wMCNPcGh0aGFsbWljIG9wZXJhdGlvbiBpbnN0cnVtZW50cyM0Mi4xMC4yMy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNC4wMC4wMCNHeW5lY29sb2dpY2FsIGFuZCBvYnN0ZXRyaWNhbCBpbnN0cnVtZW50cyM0Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNC4wMS4wMCNJbnRyYSB1dGVyaW5lIGRldmljZSAoSVVEKSBpbnNlcnRpb24ga2l0cyM0Mi4xMC4yNC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNC4wMi4wMCNUdWJhbCBsaWdhdGlvbiBraXRzIzQyLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI0LjAzLjAwI1Zhc2VjdG9teSBraXRzIzQyLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI0LjA0LjAwI0xhcGFyb3Njb3BpYyBlcXVpcG1lbnQjNDIuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjQuMDUuMDAjU2lsYXN0aWMgYmFuZHMjNDIuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjQuMDYuMDAjTWVuc3RydWF0aW9uIHJlZ3VsYXRpb24ga2l0cyM0Mi4xMC4yNC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNC4wNy4wMCNTcGVybW9raW5lc2VtZXRlciM0Mi4xMC4yNC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNC4wOC4wMCNVdGVyaW5lIG9yIGd5bmVjb2xvZ2ljYWwgdGVzdHMjNDIuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjQuMDkuMDAjT2JzdGV0cmljYWwgcmV0cmFjdG9ycyM0Mi4xMC4yNC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNC4xMC4wMCNVbWJpbGljYWwgdGFwZXMjNDIuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjQuMTEuMDAjQnJlYXN0IHB1bXBzIG9yIGFjY2Vzc29yaWVzIzQyLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI0LjEyLjAwI01pZHdpZmUgZXF1aXBtZW50IG9yIGtpdHMjNDIuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjQuMTMuMDAjSHlzdGVyb3Njb3BpYyBlcXVpcG1lbnQjNDIuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjQuMTQuMDAjVmFnaW5vc2NvcGUjNDIuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjQuMTUuMDAjVXJldGhyb3Njb3BlIGN5c3RlcnNjb3BlIzQyLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI0LjE2LjAwI1VtYmlsaWNhbCBjb3JkIGNsYW1wcyM0Mi4xMC4yNC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNC4xNy4wMCNWYWN1dW0gZXh0cmFjdG9ycyM0Mi4xMC4yNC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNC4xOC4wMCNJbiB2aXRybyBmZXJ0aWxpemF0aW9uIGVxdWlwbWVudCBvciBzdXBwbGllcyM0Mi4xMC4yNC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNC4xOS4wMCNFbmRvbWV0cmlhbCBiaW9wc3kgZXF1aXBtZW50IzQyLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI0LjIwLjAwI0ludHJhdXRlcmluZSBpbnNlbWluYXRpb24gY2F0aGV0ZXJzIzQyLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI0LjIxLjAwI1BlbHZpbWV0ZXJzIzQyLjEwLjI0LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI1LjAwLjAwI0ZpYmVyIG9wdGljIGV4YW1pbmF0aW9uIGluc3RydW1lbnRzIzQyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjI1LjAxLjAwI0xpZ2h0IHNvdXJjZXMjNDIuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjUuMDIuMDAjRW5kb3Njb3B5IGVxdWlwbWVudCM0Mi4xMC4yNS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNS4wMy4wMCNQcm90b3Njb3BlcyM0Mi4xMC4yNS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNS4wNC4wMCNDdWxkb3Njb3BlcyM0Mi4xMC4yNS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNS4wNS4wMCNHYXN0cm9zY29wZXMjNDIuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjUuMDYuMDAjRXNvcGhhZ29zY29wZSM0Mi4xMC4yNS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNS4wNy4wMCNTaWdtb2lkb3Njb3BlIzQyLjEwLjI1LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI1LjA4LjAwI0Jyb25jaG9zY29wZSM0Mi4xMC4yNS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNS4wOS4wMCNDb2xvbm9zY29wZSM0Mi4xMC4yNS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNS4xMC4wMCNBcnRocm9zY29wZSM0Mi4xMC4yNS4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4wMC4wMCNFbGVjdHJvIGRpYWdub3N0aWMgYXBwYXJhdHVzIzQyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjAxLjAwI0VsZWN0cm9jYXJkaW9ncmFwaHMgKEVDR3MpIzQyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjAyLjAwI0NhcmRpb3Njb3BlcyM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4wMy4wMCNTdGVyZW90YWN0aWMgc3lzdGVtcyM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4wNC4wMCNBY2hpbGxlYW4gcmVmbGV4b21ldGVyIzQyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjA1LjAwI1RoZXNpb21ldGVyIzQyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjA2LjAwI1BuZXVtb3RhY2hvZ3JhcGhzIzQyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjA3LjAwI0Jpb3ZpZGVvZ3JhcGhzIzQyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjA4LjAwI1BoeXNpb2xvZ2ljYWwgbGV2ZXJzIzQyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjA5LjAwI05lcnZlIGNoYW1iZXIgZXF1aXBtZW50IzQyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjEwLjAwI1VsdHJhc29uaWMgZGlhZ25vc3RpYyBlcXVpcG1lbnQjNDIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjYuMTEuMDAjVWx0cmFzb3VuZCBzY2FubmVycyM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4xMi4wMCNEb3BwbGVyIHVsdHJhc291bmQgZXF1aXBtZW50IzQyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjEzLjAwI1VsdHJhc29uaWMgc3VyZ2VyeSBlcXVpcG1lbnQgb3IgdWx0cmFzb25pYyBhc3BpcmF0aW9uIzQyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjE0LjAwI1VsdHJhc291bmQgcGh5c2lvdGhlcmFweSBlcXVpcG1lbnQjNDIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjYuMTUuMDAjQ2FyZGlvIHNvbmFycyM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4xNi4wMCNTaG9ydCB3YXZlIG1lZGljYWwgYXBwYXJhdHVzIzQyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjE3LjAwI0Jsb29kIHByZXNzdXJlIG1lYXN1cmluZyBlcXVpcG1lbnQjNDIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjYuMTguMDAjRWxlY3Ryb2VuY2VwaGFsb2dyYXBocyAoRUVHcykjNDIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjYuMTkuMDAjU3Bpcm9tZXRlcnMjNDIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjYuMjAuMDAjR3luZWNvbG9naWNhbCBkaWFnbm9zdGljIGVxdWlwbWVudCM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4yMS4wMCNDb2xwb3Njb3BlcyM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4yMi4wMCNBbW5pb3Njb3BlcyM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4yMy4wMCNGZXRhbCBtb25pdG9ycyM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4yNC4wMCNEZWxpdmVyeSBtb25pdG9ycyM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4yNS4wMCNOZW9uYXRhbCBtb25pdG9ycyM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4yNi4wMCNIZWFydCBtb25pdG9yIHN5c3RlbXMjNDIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjYuMjcuMDAjSW50ZW5zaXZlIGNhcmUgbW9uaXRvcnMjNDIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjYuMjguMDAjRWxlY3Ryb21lZGljYWwgdGVzdGluZyBlcXVpcG1lbnQjNDIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjYuMjkuMDAjRGVmaWJyaWxsYXRvciB0ZXN0ZXIjNDIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjYuMzAuMDAjQXVkaW9tZXRlciBjYWxpYnJhdGlvbiB0ZXN0ZXIjNDIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjYuMzEuMDAjRWxlY3Ryb2RlIG9yIGVsZWN0cm9tZWRpY2FsIHRlc3RlciM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4zMi4wMCNWZW50aWxhdG9yIHRlc3QgbWV0ZXJzIzQyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjMzLjAwI0VDRyBwYXRpZW50IHNpbXVsYXRvcnMjNDIuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjYuMzQuMDAjRWxlY3Ryb3N1cmdpY2FsIGFuYWx5emVycyM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4zNS4wMCNFbGVjdHJvbWVkaWNhbCBzYWZldHkgYW5hbHl6ZXJzIzQyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjM2LjAwI0VsZWN0cm9tZWRpY2FsIHRlc3Qgc3lzdGVtcyM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4zNy4wMCNFbGVjdHJvbmljIHB1bHNlIG1vbml0b3JzIzQyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI2LjM4LjAwI1ZhZ2luYWwgdWx0cmFzb3VuZCBwcm9iZSM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNi4zOS4wMCNNZWRpY2FsIGNvbmR1Y3RpdmUgZ2VscyM0Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNy4wMC4wMCNEaWFseXNpcyBlcXVpcG1lbnQgYW5kIGluc3RydW1lbnRzIzQyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjI3LjAxLjAwI0Jsb29kIGJhZyBzYW1wbGVyIzQyLjEwLjI3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI3LjAyLjAwI0Jsb29kIHdhcm1lciM0Mi4xMC4yNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNy4wMy4wMCNEaWFseXNpcyBpbnN0cnVtZW50IHNldHMjNDIuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjcuMDQuMDAjUGVyaXRvbmVhbCBkaWFseXNpcyB1bml0cyM0Mi4xMC4yNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNy4wNS4wMCNIYWVtb2RpYWx5c2lzIHVuaXRzIzQyLjEwLjI3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI3LjA2LjAwI0Jsb29kIGZpbHRlcnMjNDIuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjcuMDcuMDAjQmxvb2Qgc2VwYXJhdG9yIHN0YW5kIzQyLjEwLjI3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI3LjA4LjAwI1BsYXNtYXBob3Jlc2lzIGVxdWlwbWVudCM0Mi4xMC4yNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNy4wOS4wMCNBbmdpb2dyYXBoaWMgaW5qZWN0b3JzIzQyLjEwLjI3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI3LjEwLjAwI0hlbWFmaWx0ZXJzIzQyLjEwLjI3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI3LjExLjAwI0RpYWx5c2lzIHR1YmluZyBvciBtZW1icmFuZXMjNDIuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjcuMTIuMDAjQmxvb2Qgb3h5Z2VuIGRlbWFuZCBhcHBhcmF0dXMjNDIuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjcuMTMuMDAjQ2xvdCBjb2FndWxhdGlvbiBkZXRlY3Rpb24gc3lzdGVtcyM0Mi4xMC4yNy4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yNy4xNC4wMCNNZWRpY2FsIGRyYWlucyBvciBkcmFpbmFnZSBraXRzIzQyLjEwLjI3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI3LjE1LjAwI0t5bW9ncmFwaHMjNDIuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjcuMTYuMDAjQmxvb2Qgc2FtcGxpbmcgZXF1aXBtZW50IzQyLjEwLjI3LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI4LjAwLjAwI0RlbnRhbCBpbnN0cnVtZW50cyBhbmQgYXBwbGlhbmNlcyM0Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yOC4wMS4wMCNEZW50YWwgbWl4aW5nIHNsYWJzIzQyLjEwLjI4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI4LjAyLjAwI0JhbmRzIGZvciBkZW50YWwgbWF0cml4IzQyLjEwLjI4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI4LjAzLjAwI0RlbnRhbCByZXRhaW5lcnMjNDIuMTAuMjguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjguMDQuMDAjRGVudGFsIGhhbmRwaWVjZXMjNDIuMTAuMjguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjguMDUuMDAjRGVudGFsIGNyeW9zdXJnaWNhbCBpbnN0cnVtZW50YXRpb24jNDIuMTAuMjguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjguMDYuMDAjRGVudGFsIGZvcm1lcnMjNDIuMTAuMjguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjguMDcuMDAjUGVyaW9kb250aXVtIGNvbnRyb2wgaW5zdHJ1bWVudHMgb3IgcGVyaW90ZXN0IzQyLjEwLjI4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI4LjA4LjAwI0RlbnRhbCB0cmF5cyM0Mi4xMC4yOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yOC4wOS4wMCNEZW50YWwgcHJvYmVzIzQyLjEwLjI4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI4LjEwLjAwI0RlbnRhbCBzY2FsZXMjNDIuMTAuMjguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjguMTEuMDAjRGVudGFsIHNwYXR1bGFzIzQyLjEwLjI4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI4LjEyLjAwI0RlbnRhbCBlbGV2YXRvcnMjNDIuMTAuMjguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjguMTMuMDAjRGVudGFsIGV4Y2F2YXRvcnMjNDIuMTAuMjguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjguMTQuMDAjRGVudGFsIGZpbmdlciBwcm90ZWN0b3JzIzQyLjEwLjI4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI4LjE1LjAwI0RlbnRhbCB0d2VlemVycyM0Mi4xMC4yOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yOC4xNi4wMCNEZW50YWwgc2Npc3NvcnMjNDIuMTAuMjguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjguMTcuMDAjRGVudGFsIGZvcmNlcHMjNDIuMTAuMjguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjguMTguMDAjRGVudGFsIG1pcnJvcnMjNDIuMTAuMjguMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjguMTkuMDAjT3J0aG9kb250aWMgYXBwbGlhbmNlcyM0Mi4xMC4yOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yOC4yMC4wMCNEZW50YWwgaW1wcmVzc2lvbiB0cmF5cyM0Mi4xMC4yOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yOC4yMS4wMCNEZW50YWwgc3lyaW5nZXMgb3IgbmVlZGxlcyM0Mi4xMC4yOC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yOC4yMi4wMCNEZW50YWwgZHJpbGxzIzQyLjEwLjI4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI4LjIzLjAwI0VuZG9kb250aWNzIGFjY2Vzc29yaWVzIzQyLjEwLjI4LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI5LjAwLjAwI0NhcmRpb2xvZ3kgZXF1aXBtZW50IGFuZCBzdXBwbGllcyM0Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4yOS4wMS4wMCNIZWFydCB2YWx2ZXMjNDIuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjkuMDIuMDAjSGVhcnQgY2F0aGV0ZXJzIzQyLjEwLjI5LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI5LjAzLjAwI0RlZnJpYmlsYXRvcnMjNDIuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMjkuMDQuMDAjQW9ydGljIGJhbGxvb24gZXF1aXBtZW50IzQyLjEwLjI5LjAwLjAwCi11bnNwc2M3IzQyLjEwLjI5LjA1LjAwI1BhY2VtYWtlcnMjNDIuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMDAuMDAjTWVkaWNhbCBjb25zdW1hYmxlcyM0Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4wMS4wMCNCbG9vZCBvciBpbnRyYXZlbm91cyAoSVYpIGJvdHRsZXMgb3IgYmFncyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4wMi4wMCNUb25ndWUgZGVwcmVzc29ycyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4wMy4wMCNTdXR1cmUgbmVlZGxlcyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4wNC4wMCNCaW9wc3kgbmVlZGxlcyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4wNS4wMCNCaW9wc3kgY2Fwc3VsZXMgb3IgcHVuY2hlcyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4wNi4wMCNEaXNzZWN0aW5nIG5lZWRsZXMjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMDcuMDAjQWN1cHVuY3R1cmUgbmVlZGxlcyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4wOC4wMCNNZWRpY2FsIGRpc3Bvc2FsIGNvbnRhaW5lcnMjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMDkuMDAjSGFlbWF0b2NyaXQgdHViZXMjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMTAuMDAjU3dhYnMjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMTEuMDAjQmxvb2QgdHJhbnNmdXNpb24gbmVlZGxlcyBvciBjYW5udWxhZSM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4xMi4wMCNUcmFuc2ZlciBzd2FicyBvciBhcHBsaWNhdG9ycyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4xMy4wMCNVcmluZSBiYWdzIzQyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjMwLjE0LjAwI1NwZWNpbWVuIGNvbnRhaW5lcnMjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMTUuMDAjUGxhc3RlciBvZiBwYXJpcyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4xNi4wMCNTdGVyaWxlIHN0cmlwcyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4xNy4wMCNHYXV6ZSBjbG90aCM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4xOC4wMCNDb3R0b24gd29vbCM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4xOS4wMCNTdGVyaWxlIHN1cmdpY2FsIGNvbXByZXNzZXMjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMjAuMDAjQmFuZGFnZXMjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMjEuMDAjRmlyc3QgYWlkIGtpdHMgb3Iga2l0IHJlZmlsbHMjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMjIuMDAjSHlwb2Rlcm1pYyBzeXJpbmdlcyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4yMy4wMCNDb3R0b24gc3dhYnMgb24gc3RpY2tzIzQyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjMwLjI0LjAwI0luZnVzaW9uIHNldHMjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMjUuMDAjTmFzb2dhc3RyaWMgdHViZXMjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMjYuMDAjRGVzdHJ1Y3Rpb24gY2xpcHMjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMjcuMDAjRHJlc3NpbmdzIzQyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjMwLjI4LjAwI0ltcGxhbnRhYmxlIGRydWcgZGVsaXZlcnkgc3lzdGVtcyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4yOS4wMCNBdXRvbWF0aWMgbWFzcyB2YWNjaW5hdG9ycyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4zMC4wMCNQaXBldHRpbmcgc3lyaW5nZXMjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMzEuMDAjU2NhbHAgdmVpbiBuZWVkbGVzIG9yIHN0b3Bjb2NrcyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC4zMi4wMCNIeXBvZGVybWljIG5lZWRsZXMjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMzMuMDAjTWVkaWNhbCBqZXQgaW5qZWN0b3JzIzQyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjMwLjM0LjAwI0xhbmNldHMjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMzUuMDAjQ2F0aGV0ZXIgZm9yIGluZnVzaW9uIzQyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjMwLjM2LjAwI0ludGF2ZW5vdXMgKElWKSBlcXVpcG1lbnQgdHViZXMjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMzcuMDAjRXlld2FzaCBzb2x1dGlvbnMjNDIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDIuMTAuMzAuMzguMDAjRXhhbWluYXRpb24gZ2xvdmVzIzQyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQyLjEwLjMwLjM5LjAwI1BhdGhvZ2VuIGNsZWFudXAga2l0cyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC40MC4wMCNEaWFiZXRpYyBzeXJpbmdlcyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC40MS4wMCNEaWFiZXRpYyBwZW4gbmVlZGxlcyM0Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM0Mi4xMC4zMC40Mi4wMCNMYW5jZXQgZGV2aWNlIzQyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzQyLjExLjAwLjAwLjAwI0Fzc2lzdGl2ZSBhbmQgY29ycmVjdGl2ZSBkZXZpY2VzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMDAuMDAjUHJvc3RoZXNlcyBhbmQgcGFydHMgdGhlcmVvZiM0Mi4xMS4wMC4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS4wMS4wMCNBbmtsZSBvciBmb290IG9ydGhvc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjAyLjAwI0NlcnZpY2FsIG9ydGhvc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjAzLjAwI0NlcnZpY28gdGhvcmF0aWMgb3J0aG9zZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMDQuMDAjQ2VydmljbyB0aG9yYXRpYyBsdW1ibyBzYWNyYWwgb3J0aG9zZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMDUuMDAjRWxib3cgb3J0aG9zZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMDYuMDAjRWxib3cgd3Jpc3Qgb3J0aG9zZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMDcuMDAjRmluZ2VyIG9ydGhvc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjA4LjAwI0Zvb3Qgb3J0aG9zZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMDkuMDAjSGFuZCBvcnRob3NlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS4xMC4wMCNIaXAgb3J0aG9zZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMTEuMDAjSGlwIGtuZWUgYW5rbGUgZm9vdCBvcnRob3NlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS4xMi4wMCNIaXAgb3Iga25lZSBvciBhbmtsZSBvcnRob3NlcyBqb2ludHMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMTMuMDAjU2hvdWxkZXIgb3IgZWxib3cgb3Igd3Jpc3Qgb3J0aG9zZXMgam9pbnRzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjE0LjAwI0tuZWUgb3J0aG9zZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMTUuMDAjS25lZSBhbmtsZSBmb290IG9ydGhvc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjE2LjAwI0x1bWJvIG9yIHNhY3JhbCBvcnRob3NlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS4xNy4wMCNTYWNybyBpbGlhYyBvcnRob3NlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS4xOC4wMCNTaG91bGRlciBvciBlbGJvdyBvciB3cmlzdCBvciBoYW5kIG9ydGhvc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjE5LjAwI1Rob3JhY28gb3IgbHVtYm8gb3Igc2FjcmFsIG9ydGhvc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjIwLjAwI1dyaXN0IG9ydGhvc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjIxLjAwI1dyaXN0IG9yIGhhbmQgb3J0aG9zZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMjIuMDAjV3Jpc3Qgb3IgaGFuZCBvciBmaW5nZXIgb3J0aG9zZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMjMuMDAjQW5rbGUgZGlzYXJ0aWN1bGF0aW9uIHByb3N0aGVzZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMjQuMDAjQXVyYWwgcHJvc3RoZXNlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS4yNS4wMCNDb3NtZXRpYyBvciBza2luIGNvdmVyaW5nIHByb3N0aGVzZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMjYuMDAjRWxib3cgZGlzYXJ0aWN1bGF0aW9uIHByb3N0aGVzZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMjcuMDAjSGlwIGRpc2FydGljdWxhdGlvbiBwcm9zdGhlc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjI4LjAwI0hvb2sgb3IgZnVuY3Rpb25hbCB0b29sIHByb3N0aGVzZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMjkuMDAjS25lZSBvciBoaXAgam9pbnQgcHJvc3RoZXNlcyBvciB0b3JxdWUgcmVkdWNlcnMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMzAuMDAjV3Jpc3Qgb3IgZWxib3cgam9pbnQgcHJvc3RoZXNlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS4zMS4wMCNLbmVlIGRpc2FydGljdWxhdGlvbiBwcm9zdGhlc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjMyLjAwI01hbW1hcnkgcHJvc3RoZXNlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS4zMy4wMCNOYXNhbCBwcm9zdGhlc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjM0LjAwI09jdWxhciBwcm9zdGhlc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjM1LjAwI0JhY2sgZmlsbGVyIHByb3N0aGVzZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMzYuMDAjUGFsYXRlIHByb3N0aGVzZXMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuMzcuMDAjUGFydGlhbCBmb290IGluY2x1ZGluZyB0b2UgcHJvc3RoZXNlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS4zOC4wMCNQYXJ0aWFsIGhhbmQgaW5jbHVkaW5nIGZpbmdlciBwcm9zdGhlc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjM5LjAwI1Nob3VsZGVyIGRpc2FydGljdWxhdGlvbiBwcm9zdGhlc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjQwLjAwI1NvY2tldCBvciBhbGlnbm1lbnQgdW5pdCBwcm9zdGhlc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjQxLjAwI1RlbXBvcmFyeSBwcm9zdGhlc2VzIGZvciBlYXJseSBtb2JpbGl6YXRpb24gb2YgbG93ZXIgbGltYiBhbXB1dGVlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS40Mi4wMCNUcmFuc2ZlbW9yYWwgcHJvc3RoZXNlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS40My4wMCNUcmFuc2h1bWVyYWwgcHJvc3RoZXNlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNS40NC4wMCNUcmFuc3JhZGlhbCBwcm9zdGhlc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjQ1LjAwI1RyYW5zdGliaWFsIGluY2x1ZGluZyBhbmtsZSBvciBmb290IGRldmljZSBwcm9zdGhlc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjQ2LjAwI1dyaXN0IGRpc2FydGljdWxhdGlvbiBwcm9zdGhlc2VzIzQyLjExLjE1LjAwLjAwCi11bnNwc2M3IzQyLjExLjE1LjQ3LjAwI1Byb3N0aGV0aWMgaGFuZHMjNDIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTUuNDguMDAjVmFzY3VsYXIgcHJvc3RoZXNlcyM0Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNi4wMC4wMCNDb21tdW5pY2F0aW9uIGFuZCBlZHVjYXRpb25hbCBtYXRlcmlhbCBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjAwLjAwLjAwCi11bnNwc2M3IzQyLjExLjE2LjAxLjAwI0JyYWlsbGUgd3JpdGluZyBwYXBlciBvciBwbGFzdGljIzQyLjExLjE2LjAwLjAwCi11bnNwc2M3IzQyLjExLjE2LjAyLjAwI1N3aXRjaGJvYXJkcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE2LjAwLjAwCi11bnNwc2M3IzQyLjExLjE2LjAzLjAwI0NoYXJhY3RlciByZWFkaW5nIG1hY2hpbmVzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTYuMDQuMDAjU3ludGhldGljIHNwZWVjaCBkZXZpY2VzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTYuMDUuMDAjVGFjdGlsZSBkaXNwbGF5cyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE2LjAwLjAwCi11bnNwc2M3IzQyLjExLjE2LjA2LjAwI0xldHRlciBvciBzeW1ib2wgYm9hcmRzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTYuMDcuMDAjRGlhbG9ndWUgdW5pdHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNi4wOC4wMCNWb2ljZSBnZW5lcmF0b3JzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTYuMDkuMDAjVm9pY2UgYW1wbGlmaWVycyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE2LjAwLjAwCi11bnNwc2M3IzQyLjExLjE2LjEwLjAwI0hlYXJpbmcgYWlkcyM0Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNi4xMS4wMCNXcml0aW5nIGZyYW1lcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE2LjAwLjAwCi11bnNwc2M3IzQyLjExLjE2LjEyLjAwI1JhaW4gaW5kaWNhdG9ycyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE2LjAwLjAwCi11bnNwc2M3IzQyLjExLjE2LjEzLjAwI0xpZ2h0IGluZGljYXRvcnMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNi4xNC4wMCNTb3VuZCBpbmRpY2F0b3JzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTYuMTUuMDAjU3BlZWNoIHRyYWluaW5nIGFpZHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNi4xNi4wMCNMYW5ndWFnZSB0cmFpbmluZyBhaWRzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTYuMTcuMDAjQnJhaWxsZSBlcXVpcG1lbnQjNDIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTYuMTguMDAjQm9vayBvciBtYW51c2NyaXB0IGhvbGRlcnMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNi4xOS4wMCNQYWdlIHR1cm5lcnMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNi4yMC4wMCNTaWduYXR1cmUgZ3VpZGVzIG9yIHN0YW1wcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE2LjAwLjAwCi11bnNwc2M3IzQyLjExLjE2LjIxLjAwI0VyZ29ub21pY2FsbHkgZGVzaWduZWQgc3RhdGlvbmVyeSBhaWRzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTcuMDAuMDAjRnVybml0dXJlIGFuZCBhY2Nlc3NvcmllcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjAwLjAwLjAwCi11bnNwc2M3IzQyLjExLjE3LjAxLjAwI1ByZXNzdXJlIHNvcmUgcHJldmVudGlvbiBmdXJuaXR1cmUjNDIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTcuMDIuMDAjUHJlc3N1cmUgc29yZSBwcmV2ZW50aW9uIG1hdHRyZXNzZXMgb3IgY292ZXJpbmdzIzQyLjExLjE3LjAwLjAwCi11bnNwc2M3IzQyLjExLjE3LjAzLjAwI0JhY2twYWRzIG9yIGJhY2tyZXN0cyBvciBzaW1pbGFyIGFkYXB0YXRpb25zIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTcuMDQuMDAjQXJtIHJlc3RzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTcuMDUuMDAjQmVkIGV4dGVuc2lvbnMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNy4wNi4wMCNCZWQgbGlmdHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNy4wNy4wMCNCZWQgc2hvcnRlbmluZyBhaWRzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTcuMDguMDAjRXJnb25vbWljYWxsIGRlc2lnbmVkIGJlZHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNy4wOS4wMCNCbGFua2V0IHN1cHBvcnRzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTcuMTAuMDAjTWVjaGFuaXplZCBjaGFpcnMgdG8gYXNzaXN0IHdpdGggc2l0dGluZyBvciBzdGFuZGluZyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE3LjAwLjAwCi11bnNwc2M3IzQyLjExLjE3LjExLjAwI0NveGl0IG9yIGFydGhyb2Rlc2lzIGNoYWlycyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE3LjAwLjAwCi11bnNwc2M3IzQyLjExLjE3LjEyLjAwI0xlZyBleHRlbmRlcnMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNy4xMy4wMCNMZWcgc3VwcG9ydHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNy4xNC4wMCNNb2R1bGFyIG9yIHNwZWNpYWwgc2l0dGluZyBmdXJuaXR1cmUgc3lzdGVtcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE3LjAwLjAwCi11bnNwc2M3IzQyLjExLjE3LjE1LjAwI0hlaWdodCBhZGp1c3RhYmxlIHBsaW50aHMgb3IgYnJhY2tldHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xNy4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xNy4xNi4wMCNFcmdvbm9taWNhbGx5IGRlc2lnbmVkIHRhYmxlcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE3LjAwLjAwCi11bnNwc2M3IzQyLjExLjE4LjAwLjAwI1BlcnNvbmFsIGNhcmUgZGV2aWNlcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjAwLjAwLjAwCi11bnNwc2M3IzQyLjExLjE4LjAxLjAwI0FpZHMgdG8gYXNzaXN0IGluIGRyZXNzaW5nIG9uZXMgc2VsZiBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE4LjAwLjAwCi11bnNwc2M3IzQyLjExLjE4LjAyLjAwI0FpZHMgZm9yIHdhc2hpbmcgb25lcyBzZWxmIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTguMDMuMDAjQWlkcyBmb3IgZHJ5aW5nIG9uZXMgc2VsZiBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE4LjAwLjAwCi11bnNwc2M3IzQyLjExLjE4LjA0LjAwI0JhdGhpbmcgc3RyZXRjaGVycyBvciBzaG93ZXIgdGFibGVzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTguMDUuMDAjRGlhcGVyIGNoYW5naW5nIHRhYmxlcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE4LjAwLjAwCi11bnNwc2M3IzQyLjExLjE4LjA2LjAwI0JlZHBhbnMgb3IgY29tbW9kZSBjaGFpcnMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xOC4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOC4wNy4wMCNCdXR0b25pbmcgb3IgZmFzdGVuaW5nIGRldmljZXMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xOC4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOC4wOC4wMCNFeHRlbmRlZCBoYW5kbGUgY29tYnMgb3IgYnJ1c2hlcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE4LjAwLjAwCi11bnNwc2M3IzQyLjExLjE4LjA5LjAwI1RvaWxldCBhdHRhY2hlZCBkb3VjaGVzIG9yIGFpciBkcnllcnMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xOC4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOC4xMC4wMCNUb2lsZXQgc2VhdHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xOC4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOC4xMS4wMCNIYW5kIGdyaXAgdG9vdGhicnVzaGVzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTguMTIuMDAjQm9keSB3b3JuIHVyaW5lIGFic29yYmluZyBhaWRzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTguMTMuMDAjVXJpbmUgY29sbGVjdGlvbiBzeXN0ZW1zIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTguMTQuMDAjSW5jb250aW5lbmNlIGFsYXJtcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE4LjAwLjAwCi11bnNwc2M3IzQyLjExLjE4LjE1LjAwI09zdG9teSBiYWdzIG9yIGFjY2Vzc29yaWVzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTkuMDAuMDAjUHJvdGVjdGlvbiBhbmQgbW9iaWxpdHkgZGV2aWNlcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjAwLjAwLjAwCi11bnNwc2M3IzQyLjExLjE5LjAxLjAwI0NydXRjaGVzIzQyLjExLjE5LjAwLjAwCi11bnNwc2M3IzQyLjExLjE5LjAyLjAwI1RyaXBvZHMgb3IgcXVhZHJvcG9kcyM0Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOS4wMy4wMCNXYWxraW5nIHN0aWNrcyBhY2Nlc3NvcmllcyBvciBwYXJ0cyB0aGVyZW9mIzQyLjExLjE5LjAwLjAwCi11bnNwc2M3IzQyLjExLjE5LjA0LjAwI1JvbGxhdG9ycyM0Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOS4wNS4wMCNXYWxrZXJzIzQyLjExLjE5LjAwLjAwCi11bnNwc2M3IzQyLjExLjE5LjA2LjAwI1doZWVsY2hhaXJzIzQyLjExLjE5LjAwLjAwCi11bnNwc2M3IzQyLjExLjE5LjA3LjAwI1doZWVsY2hhaXIgYWNjZXNzb3JpZXMjNDIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTkuMDguMDAjU3VwcG9ydCByYWlscyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE5LjAwLjAwCi11bnNwc2M3IzQyLjExLjE5LjA5LjAwI1JvcGUgbGFkZGVycyBvciBsaWZ0aW5nIGJlbHRzIG9yIGhhcm5lc3NlcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE5LjAwLjAwCi11bnNwc2M3IzQyLjExLjE5LjEwLjAwI0xpZnRpbmcgb3IgdHVybmluZyBjdXNoaW9ucyBjYXJwZXRzIG9yIHNoZWV0cyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE5LjAwLjAwCi11bnNwc2M3IzQyLjExLjE5LjExLjAwI0hvaXN0cyBvciB0cm9sbGV5cyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpdGllcyM0Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOS4xMi4wMCNXaGVlbGNoYWlyIHJhbXBzIzQyLjExLjE5LjAwLjAwCi11bnNwc2M3IzQyLjExLjE5LjEzLjAwI1doZWVsY2hhaXIgbGlmdGluZyBwbGF0Zm9ybXMjNDIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTkuMTQuMDAjTmF2aWdhdGlvbiBvciBvcmllbnRhdGlvbiBhaWRzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTkuMTUuMDAjQ2hhaXIgbGlmdHMgb3IgY2hhaXIgdHJhbnNwb3J0ZXJzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTkuMTYuMDAjV2FybmluZyBvciBhbGFybSBkZXZpY2VzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTkuMTcuMDAjQWlyd2F5IHByb3RlY3Rpb24gYWlkcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE5LjAwLjAwCi11bnNwc2M3IzQyLjExLjE5LjE4LjAwI0VhciBvciBoZWFyaW5nIHByb3RlY3Rpb24gYWlkcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE5LjAwLjAwCi11bnNwc2M3IzQyLjExLjE5LjE5LjAwI0ZhY2Ugb3IgZXllIHByb3RlY3Rpb24gYWlkcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE5LjAwLjAwCi11bnNwc2M3IzQyLjExLjE5LjIwLjAwI0hhbmQgb3IgYXJtIG9yIGVsYm93IHByb3RlY3Rpb24gYWlkcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE5LjAwLjAwCi11bnNwc2M3IzQyLjExLjE5LjIxLjAwI0hlYWQgcHJvdGVjdGlvbiBhaWRzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTkuMjIuMDAjTG93ZXIgZXh0cmVtaXR5IHByb3RlY3Rpb24gYWlkcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE5LjAwLjAwCi11bnNwc2M3IzQyLjExLjE5LjIzLjAwI0JhdGh0dWIgbGVuZ3RoIG9yIHdpZHRoIHJlZHVjdGlvbiBhaWRzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTkuMjQuMDAjVHJ1bmsgb3Igd2hvbGUgYm9keSBwcm90ZWN0aW9uIGFpZHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOS4yNS4wMCNCb2R5IHN1cHBvcnQgdW5pdHMgZm9yIGhvaXN0cyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE5LjAwLjAwCi11bnNwc2M3IzQyLjExLjE5LjI2LjAwI0Rvb3Igd2FybmVycyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE5LjAwLjAwCi11bnNwc2M3IzQyLjExLjE5LjI3LjAwI0Zsb2F0YXRpb24gb3Igc3dtbWluZyBhaWRzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTkuMjguMDAjUmVsaWVmIG1hcHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOS4yOS4wMCNOb24gY29zbWV0aWMgc2tpbiBjbGVhbmluZyBvciBwcm90ZWN0aXZlIHByb2R1Y3RzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTkuMzAuMDAjU3RhdGlvbmFyeSBob2lzdHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOS4zMS4wMCNTdG9tYSBzaGllbGRzIG9yIHByb3RlY3RvcnMjNDIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMTkuMzIuMDAjVGFjdGlsZSBzdGlja3MgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4xOS4zMy4wMCNUb2lsZXQgYXJtIG9yIGJhY2tyZXN0cyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjE5LjAwLjAwCi11bnNwc2M3IzQyLjExLjIwLjAwLjAwI1JlY3JlYXRpb25hbCBhbmQgdHJhaW5pbmcgYWlkcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjAwLjAwLjAwCi11bnNwc2M3IzQyLjExLjIwLjAxLjAwI0NhbXBpbmcgZXF1aXBtZW50IGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjAuMDIuMDAjVGlsdGluZyB0YWJsZXMgZm9yIGJhbGFuY2UgdHJhaW5pbmcgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4yMC4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMC4wMy4wMCNCaW9mZWVkYmFjayBkZXZpY2VzIGZvciBtb3ZlbWVudCBzdHJlbmd0aCBvciBiYWxhbmNlIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjAuMDQuMDAjU3BvcnRzIGV4ZXJjaXNlIGFpZHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4yMC4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMC4wNS4wMCNGaXNoaW5nIG9yIGh1bnRpbmcgYWlkcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIwLjAwLjAwCi11bnNwc2M3IzQyLjExLjIwLjA2LjAwI1BsYXlpbmcgb3IgdHJhaW5pbmcgYmFsbHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4yMC4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMC4wNy4wMCNDaGVzcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIwLjAwLjAwCi11bnNwc2M3IzQyLjExLjIwLjA4LjAwI1BsYXlpbmcgY2FyZHMgb3IgaG9sZGVycyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIwLjAwLjAwCi11bnNwc2M3IzQyLjExLjIwLjA5LjAwI0dhcmRlbmluZyB0b29scyBvciBhaWRzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjAuMTAuMDAjSGFuZGljcmFmdCB0b29scyBtYXRlcmlhbHMgb3IgZXF1aXBtZW50IGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjAuMTEuMDAjUGhvdG9ncmFwaGljIGVxdWlwbWVudCBvciBhaWRzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjAuMTIuMDAjQ2FyYXZhbm5pbmcgZXF1aXBtZW50IGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjAuMTMuMDAjVmlicmF0aW5nIGNoYWlycyBmb3IgdHJhaW5pbmcgZGVhZiBwZW9wbGUjNDIuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjEuMDAuMDAjU3BlY2lhbGl6ZWQgYWlkcyBmb3IgaG91c2VrZWVwaW5nIGFuZCBoYW5kbGluZyBnb29kcyBhbmQgbWVhc3VyaW5nIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjEuMDEuMDAjV2VpZ2hpbmcgb3IgbWVhc3VyaW5nIGFpZHMgb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIxLjAwLjAwCi11bnNwc2M3IzQyLjExLjIxLjAyLjAwI0N1dHRpbmcgb3IgY2hvcHBpbmcgb3IgZGl2aWRpbmcgYWlkcyBvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjEuMDMuMDAjQ2xlYW5pbmcgb3IgcGVlbGluZyBhaWRzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjEuMDQuMDAjQmFraW5nIG9yIGNvb2tpbmcgb3IgZnJ5aW5nIGFpZHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMS4wNS4wMCNGb29kIG9yIGRyaW5rIHNlcnZpY2UgYWlkcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIxLjAwLjAwCi11bnNwc2M3IzQyLjExLjIxLjA2LjAwI0Zvb2Qgc3RvcHBlcnMgb3IgZnVubmVscyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIxLjAwLjAwCi11bnNwc2M3IzQyLjExLjIxLjA3LjAwI1RhYmxld2FyZSBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIxLjAwLjAwCi11bnNwc2M3IzQyLjExLjIxLjA4LjAwI1B1c2hlciBlZGdlcyBvciBwbGF0ZSBidWZmZXJzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjEuMDkuMDAjRmVlZGluZyBhcHBhcmF0dXMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMS4xMC4wMCNGZWVkaW5nIHByb2JlcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIxLjAwLjAwCi11bnNwc2M3IzQyLjExLjIxLjExLjAwI1Nob2UgY2xlYW5pbmcgYXBwYXJhdHVzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjEuMTIuMDAjU2V3aW5nIG9yIGtuaXR0aW5nIG9yIGNyb2NoZXRpbmcgb3IgZGFybmluZyBhaWRzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjEuMTMuMDAjQm90dGxlIG9yIGNhbiBvciBjb250YWluZXIgb3BlbmVycyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIxLjAwLjAwCi11bnNwc2M3IzQyLjExLjIxLjE0LjAwI1R1YmUgc3F1ZWV6aW5nIGtleXMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMS4xNS4wMCNHcmFzcGluZyBhaWRzIHRvIGFzc2lzdCBvciByZXBsYWNlIGhhbmQgb3IgZmluZ2VyIGZ1bmN0aW9uIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjEuMTYuMDAjR3JpcCBhZGFwdGVycyBvciBhdHRhY2htZW50cyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIxLjAwLjAwCi11bnNwc2M3IzQyLjExLjIxLjE3LjAwI0JvZHkgd29ybiBob2xkZXJzIHRvIGFzc2lzdCBoYW5kIG9yIGZpbmdlciBmdW5jdGlvbiBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIxLjAwLjAwCi11bnNwc2M3IzQyLjExLjIxLjE4LjAwI1N0YW5kcyB0byBhc3Npc3QgaGFuZCBvciBmaW5nZXIgZnVuY3Rpb24gZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMS4xOS4wMCNPcGVyYXRpbmcgc3RpY2tzIHN1Y2ggYXMgaGVhZCBvciBjaGluIG9yIG1vdXRoIHN0aWNrcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIxLjAwLjAwCi11bnNwc2M3IzQyLjExLjIxLjIwLjAwI0V4dGVuZGVycyB3aXRob3V0IGdyaXAgZnVuY3Rpb24gZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMS4yMS4wMCNGaXhlZCBwb3NpdGlvbmluZyBzeXN0ZW1zIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjEuMjIuMDAjQmFsYW5jZXMgb3IgZXF1aXBtZW50IGZvciBob2lzdGluZyBvciBiYWxhbmNpbmcgb2JqZWN0cyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIxLjAwLjAwCi11bnNwc2M3IzQyLjExLjIxLjIzLjAwI01hbmlwdWxhdG9ycyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIxLjAwLjAwCi11bnNwc2M3IzQyLjExLjIxLjI0LjAwI1JvYm90cyB0byBhc3Npc3QgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIxLjAwLjAwCi11bnNwc2M3IzQyLjExLjIxLjI1LjAwI0luZGljYXRvcnMgc3VjaCBhcyBzaWduYWwgbGlnaHRzIG9yIGJ1enplcnMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM0Mi4xMS4yMS4wMC4wMAotdW5zcHNjNyM0Mi4xMS4yMS4yNi4wMCNQb2ludGluZyBsYW1wcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzQyLjExLjIxLjAwLjAwCi11bnNwc2M3IzQyLjExLjIxLjI3LjAwI01lYXN1cmluZyBhaWRzIG9yIHRvb2xzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjEuMjguMDAjT2JqZWN0IHBvc2l0aW9uaW5nIGxpZnRpbmcgb3IgdGlsdGluZyBzeXN0ZW1zIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTEuMjEuMjkuMDAjTWFudWFsIGV4dGVuZGVkIHJlYWNoIGdyaXBwaW5nIHRvbmdzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjNDIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNDIuMTIuMDAuMDAuMDAjVmV0ZXJpbmFyeSBlcXVpcG1lbnQgYW5kIHN1cHBsaWVzIzQyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzQyLjEyLjE1LjAwLjAwI1ZldGVyaW5hcnkgZXF1aXBtZW50IzQyLjEyLjAwLjAwLjAwCi11bnNwc2M3IzQyLjEyLjE1LjAxLjAwI1ZldGVyaW5hcnkgYmxvb2QgcHJlc3N1cmUgdGVzdGVycyM0Mi4xMi4xNS4wMC4wMAotdW5zcHNjNyM0Mi4xMi4xNS4wMi4wMCNWZXRlcmluYXJ5IGt5bW9ncmFwaCB0ZXN0ZXIjNDIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDIuMTIuMTUuMDMuMDAjVmV0ZXJpbmFyeSBweXJvZ2VuaWMgdGVzdGVyIzQyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzQyLjEyLjE1LjA0LjAwI1ZldGVyaW5hcnkgc3RlcmVvdG94aWMgZXF1aXBtZW50IzQyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzQyLjEyLjE1LjA1LjAwI1ZldGVyaW5hcnkgZWxlY3Ryb2NhcmRpb2dyYXBoIChFQ0cpIzQyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzQyLjEyLjE2LjAwLjAwI1ZldGVyaW5hcnkgcHJvZHVjdHMjNDIuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNDIuMTIuMTYuMDEuMDAjR2FzdHJvaW50ZXN0aW5hbCB2ZXRlcmluYXJ5IHByb2R1Y3RzIzQyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzQyLjEyLjE2LjAyLjAwI0Jsb29kIG9yIGJsb29kIGZvcm1pbmcgdmV0ZXJpbmFyeSBwcm9kdWN0cyM0Mi4xMi4xNi4wMC4wMAotdW5zcHNjNyM0Mi4xMi4xNi4wMy4wMCNSZXNwaXJhdG9yeSBzeXN0ZW0gdmV0ZXJpbmFyeSBwcm9kdWN0cyM0Mi4xMi4xNi4wMC4wMAotdW5zcHNjNyM0Mi4xMi4xNi4wNC4wMCNNdXNjdWxvIHNrZWxldGFsIG9yIG5lcnZvdXMgc3lzdGVtIHZldGVyaW5hcnkgcHJvZHVjdHMjNDIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTIuMTYuMDUuMDAjQ2FyZGlvdmFzY3VsYXIgc3lzdGVtIHZldGVyaW5hcnkgcHJvZHVjdHMjNDIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDIuMTIuMTYuMDYuMDAjRGVybWF0b2xvZ2ljYWxzIG9yIGFudGlwcm90b3pvYSB2ZXRlcmluYXJ5IHByb2R1Y3RzIzQyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzQyLjEyLjE2LjA3LjAwI0dlbml0byB1cmluYXJ5IHN5c3RlbSBzZXggb3IgaG9ybW9uZSB2ZXRlcmluYXJ5IHByb2R1Y3RzIzQyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzQzLjAwLjAwLjAwLjAwI0NvbW11bmljYXRpb25zIGFuZCBDb21wdXRlciBFcXVpcG1lbnQgYW5kIFBlcmlwaGVyYWxzIGFuZCBDb21wb25lbnRzIGFuZCBTdXBwbGllcyM0My4wMC4wMC4wMC4wMAotdW5zcHNjNyM0My4xNi4wMC4wMC4wMCNTb2Z0d2FyZSM0My4wMC4wMC4wMC4wMAotdW5zcHNjNyM0My4xNi4xNS4wMC4wMCNEYXRhYmFzZSBzeXN0ZW1zIzQzLjE2LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE2LjE1LjAxLjAwI0RhdGFiYXNlIHNvZnR3YXJlIzQzLjE2LjE1LjAwLjAwCi11bnNwc2M3IzQzLjE2LjE2LjAwLjAwI09wZXJhdGluZyBzeXN0ZW1zIzQzLjE2LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE2LjE2LjAxLjAwI01haW5mcmFtZSBvcGVyYXRpbmcgc3lzdGVtIHNvZnR3YXJlIzQzLjE2LjE2LjAwLjAwCi11bnNwc2M3IzQzLjE2LjE2LjAyLjAwI1BlcnNvbmFsIGNvbXB1dGVyIChQQykgb3BlcmF0aW5nIHN5c3RlbSBzb2Z0d2FyZSM0My4xNi4xNi4wMC4wMAotdW5zcHNjNyM0My4xNi4xNi4wMy4wMCNPcGVuIHN5c3RlbXMgb3BlcmF0aW5nIHN5c3RlbXMjNDMuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMTYuMDQuMDAjQ2x1c3RlcmluZyBzb2Z0d2FyZSM0My4xNi4xNi4wMC4wMAotdW5zcHNjNyM0My4xNi4xNy4wMC4wMCNCdXNpbmVzcyB0cmFuc2FjdGlvbiBhbmQgcGVyc29uYWwgYnVzaW5lc3Mgc29mdHdhcmUjNDMuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMTcuMDEuMDAjSW52ZXN0bWVudCBtYW5hZ2VtZW50IHNvZnR3YXJlIzQzLjE2LjE3LjAwLjAwCi11bnNwc2M3IzQzLjE2LjE3LjAyLjAwI1RheCBwcmVwYXJhdGlvbiBzb2Z0d2FyZSM0My4xNi4xNy4wMC4wMAotdW5zcHNjNyM0My4xNi4xNy4wMy4wMCNGYWNpbGl0aWVzIG1hbmFnZW1lbnQgc29mdHdhcmUjNDMuMTYuMTcuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMTcuMDQuMDAjU29mdHdhcmUgc3VpdGVzIzQzLjE2LjE3LjAwLjAwCi11bnNwc2M3IzQzLjE2LjE3LjA1LjAwI0ludmVudG9yeSBtYW5hZ2VtZW50IHNvZnR3YXJlIzQzLjE2LjE3LjAwLjAwCi11bnNwc2M3IzQzLjE2LjE3LjA2LjAwI0ZpbmFuY2lhbCBhbmFseXNpcyBzb2Z0d2FyZSM0My4xNi4xNy4wMC4wMAotdW5zcHNjNyM0My4xNi4xNy4wNy4wMCNBY2NvdW50aW5nIHNvZnR3YXJlIzQzLjE2LjE3LjAwLjAwCi11bnNwc2M3IzQzLjE2LjE3LjA4LjAwI1RpbWUgYWNjb3VudGluZyBvciBodW1hbiByZXNvdXJjZXMgc29mdHdhcmUjNDMuMTYuMTcuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMTcuMDkuMDAjQW5hbHl0aWNhbCBvciBzY2llbnRpZmljIHNvZnR3YXJlIzQzLjE2LjE3LjAwLjAwCi11bnNwc2M3IzQzLjE2LjE3LjEwLjAwI01hdGhlbWF0aWNhbCBvciBmb3JlY2FzdGluZyBzb2Z0d2FyZSM0My4xNi4xNy4wMC4wMAotdW5zcHNjNyM0My4xNi4xNy4xMS4wMCNBdWN0aW9uIHNvZnR3YXJlIzQzLjE2LjE3LjAwLjAwCi11bnNwc2M3IzQzLjE2LjE3LjEyLjAwI1NhbGVzIG9yIG1hcmtldGluZyBzb2Z0d2FyZSM0My4xNi4xNy4wMC4wMAotdW5zcHNjNyM0My4xNi4xOC4wMC4wMCNEb2N1bWVudCBjcmVhdGlvbiBzb2Z0d2FyZSM0My4xNi4wMC4wMC4wMAotdW5zcHNjNyM0My4xNi4xOC4wMS4wMCNEb2N1bWVudCBtYW5hZ2VtZW50IHNvZnR3YXJlIzQzLjE2LjE4LjAwLjAwCi11bnNwc2M3IzQzLjE2LjE4LjAyLjAwI0VsZWN0cm9uaWMgcHVibGlzaGluZyBzb2Z0d2FyZSM0My4xNi4xOC4wMC4wMAotdW5zcHNjNyM0My4xNi4xOC4wMy4wMCNPcHRpY2FsIGNoYXJhY3RlciByZWFkZXIgKE9DUikgc29mdHdhcmUjNDMuMTYuMTguMDAuMDAKLXVuc3BzYzcjNDMuMTYuMTguMDQuMDAjVm9pY2UgcmVjb2duaXRpb24gc29mdHdhcmUjNDMuMTYuMTguMDAuMDAKLXVuc3BzYzcjNDMuMTYuMTguMDUuMDAjRGVza3RvcCBwdWJsaXNoaW5nIHNvZnR3YXJlIzQzLjE2LjE4LjAwLjAwCi11bnNwc2M3IzQzLjE2LjE4LjA2LjAwI1ByZXNlbnRhdGlvbiBzb2Z0d2FyZSM0My4xNi4xOC4wMC4wMAotdW5zcHNjNyM0My4xNi4xOC4wNy4wMCNXb3JkIHByb2Nlc3Npbmcgc29mdHdhcmUjNDMuMTYuMTguMDAuMDAKLXVuc3BzYzcjNDMuMTYuMTguMDguMDAjU2Nhbm5lciBzb2Z0d2FyZSM0My4xNi4xOC4wMC4wMAotdW5zcHNjNyM0My4xNi4xOC4wOS4wMCNTcGVsbCBjaGVja2VycyM0My4xNi4xOC4wMC4wMAotdW5zcHNjNyM0My4xNi4xOS4wMC4wMCNEcmF3aW5nIGFuZCBpbWFnaW5nIHNvZnR3YXJlIzQzLjE2LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE2LjE5LjAxLjAwI0NvbXB1dGVyIGFpZGVkIGRlc2lnbiAoQ0FEKSBzb2Z0d2FyZSM0My4xNi4xOS4wMC4wMAotdW5zcHNjNyM0My4xNi4xOS4wMi4wMCNHcmFwaGljcyBzb2Z0d2FyZSM0My4xNi4xOS4wMC4wMAotdW5zcHNjNyM0My4xNi4xOS4wMy4wMCNFZHVjYXRpb25hbCBzb2Z0d2FyZSM0My4xNi4xOS4wMC4wMAotdW5zcHNjNyM0My4xNi4xOS4wNC4wMCNDb21wdXRlciBhaWRlZCBtYW51ZmFjdHVyaW5nIChDQU0pIHNvZnR3YXJlIzQzLjE2LjE5LjAwLjAwCi11bnNwc2M3IzQzLjE2LjE5LjA1LjAwI0NoYXJ0aW5nIHNvZnR3YXJlIzQzLjE2LjE5LjAwLjAwCi11bnNwc2M3IzQzLjE2LjE5LjA2LjAwI0Zvcm0gbWFraW5nIHNvZnR3YXJlIzQzLjE2LjE5LjAwLjAwCi11bnNwc2M3IzQzLjE2LjE5LjA3LjAwI01hcHBpbmcgc29mdHdhcmUjNDMuMTYuMTkuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjAuMDAuMDAjU2NoZWR1bGluZyBhbmQgcHJvZHVjdGl2aXR5IHNvZnR3YXJlIzQzLjE2LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE2LjIwLjAxLjAwI1Byb2plY3QgbWFuYWdlbWVudCBzb2Z0d2FyZSM0My4xNi4yMC4wMC4wMAotdW5zcHNjNyM0My4xNi4yMC4wMi4wMCNTY2hlZHVsaW5nIHNvZnR3YXJlIzQzLjE2LjIwLjAwLjAwCi11bnNwc2M3IzQzLjE2LjIwLjAzLjAwI0NvbnRhY3QgbWFuYWdlbWVudCBzb2Z0d2FyZSM0My4xNi4yMC4wMC4wMAotdW5zcHNjNyM0My4xNi4yMS4wMC4wMCNTcHJlYWRzaGVldHMgYW5kIGVuaGFuY2VtZW50IHNvZnR3YXJlIzQzLjE2LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE2LjIxLjAxLjAwI1NwcmVhZHNoZWV0IHNvZnR3YXJlIzQzLjE2LjIxLjAwLjAwCi11bnNwc2M3IzQzLjE2LjIyLjAwLjAwI011bHRpbWVkaWEgc29mdHdhcmUjNDMuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjIuMDEuMDAjTXVzaWMgb3Igc291bmQgZWRpdGluZyBzb2Z0d2FyZSM0My4xNi4yMi4wMC4wMAotdW5zcHNjNyM0My4xNi4yMy4wMC4wMCNQcmludCBzaG9wIHNvZnR3YXJlIzQzLjE2LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE2LjIzLjAxLjAwI0FkZHJlc3MgYm9vayBtYWtpbmcgc29mdHdhcmUjNDMuMTYuMjMuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjMuMDIuMDAjTGFiZWwgbWFraW5nIHNvZnR3YXJlIzQzLjE2LjIzLjAwLjAwCi11bnNwc2M3IzQzLjE2LjI0LjAwLjAwI1Byb2dyYW1taW5nIGxhbmd1YWdlcyBhbmQgdG9vbHMjNDMuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjQuMDEuMDAjQ29tcGlsaW5nIHNvZnR3YXJlcyM0My4xNi4yNC4wMC4wMAotdW5zcHNjNyM0My4xNi4yNC4wMi4wMCNDb25maWd1cmF0aW9uIG1hbmFnZW1lbnQgc29mdHdhcmUjNDMuMTYuMjQuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjQuMDMuMDAjRGV2ZWxvcG1lbnQgc29mdHdhcmUjNDMuMTYuMjQuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjQuMDQuMDAjR3JhcGhpY2FsIHVzZXIgaW50ZXJmYWNlIChHVUkpIHRvb2xzIzQzLjE2LjI0LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI0LjA1LjAwI1Byb2dyYW1taW5nIGxhbmd1YWdlcyM0My4xNi4yNC4wMC4wMAotdW5zcHNjNyM0My4xNi4yNC4wNi4wMCNQcm9ncmFtIHRlc3Rpbmcgc29mdHdhcmUjNDMuMTYuMjQuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjUuMDAuMDAjU29mdHdhcmUgdXRpbGl0aWVzIzQzLjE2LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE2LjI1LjAxLjAwI0JhY2t1cCBvciByZWNvdmVyeSBzb2Z0d2FyZSM0My4xNi4yNS4wMC4wMAotdW5zcHNjNyM0My4xNi4yNS4wMi4wMCNCYXIgY29kaW5nIHNvZnR3YXJlIzQzLjE2LjI1LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI1LjAzLjAwI0ZpbGUgc2VjdXJpdHkgb3IgZGF0YSBzZWN1cml0eSBzb2Z0d2FyZSM0My4xNi4yNS4wMC4wMAotdW5zcHNjNyM0My4xNi4yNS4wNC4wMCNGb3JlaWduIGxhbmd1YWdlIHRyYW5zbGF0aW9uIHNvZnR3YXJlIzQzLjE2LjI1LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI1LjA1LjAwI1ByaW50IHV0aWxpdHkgc29mdHdhcmUjNDMuMTYuMjUuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjUuMDYuMDAjU3RvcmFnZSBtZWRpYSBsb2FkaW5nIHNvZnR3YXJlIzQzLjE2LjI1LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI1LjA3LjAwI1ZpcnVzIHByb3RlY3Rpb24gc29mdHdhcmUjNDMuMTYuMjUuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjUuMDguMDAjR2VuZXJhbCB1dGlsaXR5IHNvZnR3YXJlIzQzLjE2LjI1LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI1LjA5LjAwI0NvbXByZXNzaW9uIHV0aWxpdGllcyM0My4xNi4yNS4wMC4wMAotdW5zcHNjNyM0My4xNi4yNS4xMC4wMCNTeXN0ZW0gbWFuYWdlbWVudCBzb2Z0d2FyZSM0My4xNi4yNS4wMC4wMAotdW5zcHNjNyM0My4xNi4yNS4xMS4wMCNTdG9yYWdlIG1hbmFnZW1lbnQgc29mdHdhcmUjNDMuMTYuMjUuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjUuMTIuMDAjVmVyc2lvbiBjaGVja2VyIHNvZnR3YXJlIzQzLjE2LjI1LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI2LjAwLjAwI05ldHdvcmtpbmcgc29mdHdhcmUjNDMuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjYuMDEuMDAjUGxhdGZvcm0gaW50ZXJjb25uZWN0aXZpdHkgc29mdHdhcmUjNDMuMTYuMjYuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjYuMDIuMDAjT3B0aWNhbCBqdWtlYm94IHNlcnZlciBzb2Z0d2FyZSM0My4xNi4yNi4wMC4wMAotdW5zcHNjNyM0My4xNi4yNi4wMy4wMCNPcGVyYXRpbmcgc3lzdGVtIGVuaGFuY2VtZW50IHNvZnR3YXJlIzQzLjE2LjI2LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI2LjA0LjAwI05ldHdvcmsgb3BlcmF0aW5nIHN5c3RlbSBzb2Z0d2FyZSM0My4xNi4yNi4wMC4wMAotdW5zcHNjNyM0My4xNi4yNi4wNS4wMCNOZXR3b3JraW5nIGRldmVsb3BlcnMgc29mdHdhcmUjNDMuMTYuMjYuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjYuMDYuMDAjTmV0d29yayBjb25uZWN0aXZpdHkgdGVybWluYWwgZW11bGF0aW9uIHNvZnR3YXJlIzQzLjE2LjI2LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI2LjA3LjAwI01haW5mcmFtZSB0cmFuc2FjdGlvbiBwcm9jZXNzaW5nIHNvZnR3YXJlIzQzLjE2LjI2LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI2LjA4LjAwI0xpY2Vuc2UgbWFuYWdlbWVudCBzb2Z0d2FyZSM0My4xNi4yNi4wMC4wMAotdW5zcHNjNyM0My4xNi4yNi4wOS4wMCNHYXRld2F5IHNvZnR3YXJlIzQzLjE2LjI2LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI2LjEwLjAwI0NvbXBhY3QgZGlzYyAoQ0QpIHNlcnZlciBzb2Z0d2FyZSM0My4xNi4yNi4wMC4wMAotdW5zcHNjNyM0My4xNi4yNi4xMS4wMCNBZG1pbmlzdHJhdGlvbiBzb2Z0d2FyZSM0My4xNi4yNi4wMC4wMAotdW5zcHNjNyM0My4xNi4yNi4xMi4wMCNUcmFuc2FjdGlvbiBzZXJ2ZXIgc29mdHdhcmUjNDMuMTYuMjYuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjYuMTMuMDAjU3dpdGNoIG9yIHJvdXRlciBzb2Z0d2FyZSM0My4xNi4yNi4wMC4wMAotdW5zcHNjNyM0My4xNi4yNi4xNC4wMCNNdWx0aXBsZXhlciBzb2Z0d2FyZSM0My4xNi4yNi4wMC4wMAotdW5zcHNjNyM0My4xNi4yNi4xNS4wMCNDb21tdW5pY2F0aW9ucyBzZXJ2ZXIgc29mdHdhcmUjNDMuMTYuMjYuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjYuMTYuMDAjQnJpZGdlIHNvZnR3YXJlIzQzLjE2LjI2LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI3LjAwLjAwI0NvbW11bmljYXRpb24gU29mdHdhcmUjNDMuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjcuMDEuMDAjRGVza3RvcCBjb21tdW5pY2F0aW9ucyBzb2Z0d2FyZSM0My4xNi4yNy4wMC4wMAotdW5zcHNjNyM0My4xNi4yNy4wMi4wMCNTZXJ2ZXIgY29tbXVuaWNhdGlvbnMgc29mdHdhcmUjNDMuMTYuMjcuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjcuMDMuMDAjSW50ZXJhY3RpdmUgdm9pY2UgcmVzcG9uc2Ugc29mdHdhcmUjNDMuMTYuMjcuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjcuMDQuMDAjTW9kZW0gc29mdHdhcmUjNDMuMTYuMjcuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjcuMDUuMDAjUmVtb3RlIGFjY2VzcyBzb2Z0d2FyZSM0My4xNi4yNy4wMC4wMAotdW5zcHNjNyM0My4xNi4yNy4wNi4wMCNWaWRlbyBjb25mZXJlbmNpbmcgc29mdHdhcmUjNDMuMTYuMjcuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjcuMDcuMDAjRXhjaGFuZ2Ugc29mdHdhcmUjNDMuMTYuMjcuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjguMDAuMDAjSW50ZXJuZXQgYW5kIGludHJhbmV0IHNvZnR3YXJlIzQzLjE2LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE2LjI4LjAxLjAwI0ludGVybmV0IGJyb3dzaW5nIHNvZnR3YXJlIzQzLjE2LjI4LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI4LjAyLjAwI1dlYiBzZXJ2ZXIgc29mdHdhcmUjNDMuMTYuMjguMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjkuMDAuMDAjTWlzY2VsbGFuZW91cyBzb2Z0d2FyZSM0My4xNi4wMC4wMC4wMAotdW5zcHNjNyM0My4xNi4yOS4wMS4wMCNDb21wdXRlciBnYW1lIHNvZnR3YXJlIzQzLjE2LjI5LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI5LjAyLjAwI1NjcmVlbiBzYXZlcnMjNDMuMTYuMjkuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjkuMDMuMDAjVHJhaW5pbmcgc29mdHdhcmUjNDMuMTYuMjkuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMjkuMDQuMDAjRW50ZXJ0YWlubWVudCBzb2Z0d2FyZSM0My4xNi4yOS4wMC4wMAotdW5zcHNjNyM0My4xNi4yOS4wNS4wMCNGYW1pbHkgdGl0bGVzIzQzLjE2LjI5LjAwLjAwCi11bnNwc2M3IzQzLjE2LjI5LjA2LjAwI0VkdWNhdGlvbmFsIHNvZnR3YXJlIzQzLjE2LjI5LjAwLjAwCi11bnNwc2M3IzQzLjE2LjMwLjAwLjAwI0luZHVzdHJ5IHNwZWNpZmljIHNvZnR3YXJlIzQzLjE2LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE2LjMwLjAxLjAwI1BvaW50IG9mIHNhbGUgKFBPUykgc29mdHdhcmUjNDMuMTYuMzAuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMzAuMDIuMDAjRmxpZ2h0IGNvbnRyb2wgc29mdHdhcmUjNDMuMTYuMzAuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMzAuMDMuMDAjQXZpYXRpb24gZ3JvdW5kIHN1cHBvcnQgc29mdHdhcmUjNDMuMTYuMzAuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMzAuMDQuMDAjQXZpYXRpb24gdGVzdCBzb2Z0d2FyZSM0My4xNi4zMC4wMC4wMAotdW5zcHNjNyM0My4xNi4zMC4wNS4wMCNJbmR1c3RyaWFsIGNvbnRyb2wgc29mdHdhcmUjNDMuMTYuMzAuMDAuMDAKLXVuc3BzYzcjNDMuMTYuMzAuMDYuMDAjTGlicmFyeSBzb2Z0d2FyZSM0My4xNi4zMC4wMC4wMAotdW5zcHNjNyM0My4xNi4zMC4wNy4wMCNDb21wbGlhbmNlIHNvZnR3YXJlIzQzLjE2LjMwLjAwLjAwCi11bnNwc2M3IzQzLjE2LjMxLjAwLjAwI0RyaXZlcnMgYW5kIHN5c3RlbSBzb2Z0d2FyZSM0My4xNi4wMC4wMC4wMAotdW5zcHNjNyM0My4xNi4zMS4wMS4wMCNFdGhlcm5ldCBkcml2ZXJzIzQzLjE2LjMxLjAwLjAwCi11bnNwc2M3IzQzLjE2LjMxLjAyLjAwI0dyYXBoaWNzIGNhcmQgZHJpdmVycyM0My4xNi4zMS4wMC4wMAotdW5zcHNjNyM0My4xNy4wMC4wMC4wMCNIYXJkd2FyZSBhbmQgYWNjZXNzb3JpZXMjNDMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTUuMDAuMDAjVGVsZXBob255IGVxdWlwbWVudCM0My4xNy4wMC4wMC4wMAotdW5zcHNjNyM0My4xNy4xNS4wMS4wMCNFeGNoYW5nZSBjb21wb25lbnRzIChDT0RFQykjNDMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTUuMDIuMDAjRXhjaGFuZ2UgZGF0YSBpbnRlcmZhY2UgY2FyZHMjNDMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTUuMDMuMDAjRXhjaGFuZ2UgZGF0YWNvbSBtb2R1bGVzIzQzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE1LjA0LjAwI1Bob25lIGV4Y2hhbmdlIGludGVyZmFjZXMgb3IgY29tcG9uZW50cyM0My4xNy4xNS4wMC4wMAotdW5zcHNjNyM0My4xNy4xNS4wNS4wMCNFeGNoYW5nZSB0cnVuayBpbnRlcmZhY2Ugb3IgY2FyZCBjb21wb25lbnRzIzQzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE1LjA2LjAwI1ByZW1pc2UgYnJhbmNoIGV4Y2hhbmdlIChQQlgpIHN5c3RlbXMjNDMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTUuMDcuMDAjVGVsZXBob25lIHN3aXRjaGluZyBlcXVpcG1lbnQjNDMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTUuMDguMDAjU3dpdGNoYm9hcmQgZXF1aXBtZW50IzQzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE1LjA5LjAwI1B1bmNoIGRvd24gYmxvY2tzIzQzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE1LjEwLjAwI0FuYWxvZyBvciBkaWdpdGFsIHRlbGVwaG9uZXMjNDMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTUuMTEuMDAjQW5hbG9nIG9yIGRpZ2l0YWwgY2VsbHVsYXIgdGVsZXBob25lcyM0My4xNy4xNS4wMC4wMAotdW5zcHNjNyM0My4xNy4xNS4xMi4wMCNNb2JpbGUgdGVsZXBob25lcyM0My4xNy4xNS4wMC4wMAotdW5zcHNjNyM0My4xNy4xNS4xMy4wMCNDb3JkbGVzcyB0ZWxlcGhvbmVzIzQzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE1LjE0LjAwI1BheSB0ZWxlcGhvbmVzIzQzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE1LjE1LjAwI0Fuc3dlcmluZyBtYWNoaW5lcyM0My4xNy4xNS4wMC4wMAotdW5zcHNjNyM0My4xNy4xNS4xNi4wMCNUZWxlcGhvbmUgaGVhZHNldHMjNDMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTUuMTcuMDAjVm9pY2UgbWFpbCBzeXN0ZW1zIzQzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE1LjE4LjAwI0NhbGwgbWFuYWdlbWVudCBzeXN0ZW0jNDMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTUuMTkuMDAjQ2VsbHVsYXIgdGVsZXBob25lIGFjY2Vzc29yaWVzIzQzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE1LjIwLjAwI1RlbGVwaG9uZSByZXN0cyM0My4xNy4xNS4wMC4wMAotdW5zcHNjNyM0My4xNy4xNS4yMS4wMCNUZWxlcGhvbmUgYWRhcHRlcnMjNDMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTUuMjIuMDAjVGVsZXBob25lIGxpbmUgbXVsdGlwbGllcnMjNDMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTUuMjMuMDAjVGVsZXBob25lIGxpbmUgbW9kdWxhciBjb3VwbGVycyM0My4xNy4xNS4wMC4wMAotdW5zcHNjNyM0My4xNy4xNS4yNC4wMCNWaWRlb3Bob25lcyM0My4xNy4xNS4wMC4wMAotdW5zcHNjNyM0My4xNy4xNS4yNS4wMCNEaWFsZXJzIzQzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE1LjI2LjAwI1RlbGVwaG9uZSBhbXBsaWZpZXJzIzQzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE1LjI3LjAwI1RlbGVwaG9uZSBzdGFuZHMgb3IgaG9sZGVycyM0My4xNy4xNS4wMC4wMAotdW5zcHNjNyM0My4xNy4xNS4yOC4wMCNJbnRlZ3JhdGVkIHNlcnZpY2VzIGRpZ2l0YWwgbmV0d29yayBleGNoYW5nZXMgSVNETiM0My4xNy4xNS4wMC4wMAotdW5zcHNjNyM0My4xNy4xNS4yOS4wMCNUZWxlcGhvbmUgamFja3MjNDMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTYuMDAuMDAjQW50ZW5uYXMjNDMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTYuMDEuMDAjVHJhbnNtaXR0ZXJzIzQzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE2LjAyLjAwI1JlY2VpdmVycyM0My4xNy4xNi4wMC4wMAotdW5zcHNjNyM0My4xNy4xNi4wMy4wMCNUdW5lcnMjNDMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTYuMDQuMDAjU2hvcnQgd2F2ZSBlcXVpcG1lbnQjNDMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTYuMDUuMDAjQWlyY3JhZnQgYW50ZW5uYXMjNDMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTYuMDYuMDAjQXV0b21vdGl2ZSBhbnRlbm5hcyM0My4xNy4xNi4wMC4wMAotdW5zcHNjNyM0My4xNy4xNi4wNy4wMCNCcm9hZGNhc3QgYW50ZW5uYXMjNDMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTYuMDguMDAjTWljcm93YXZlIGFudGVubmFzIzQzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE2LjA5LjAwI1RlbGV2aXNpb24gYW50ZW5uYXMjNDMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTYuMTAuMDAjU2F0ZWxsaXRlIGFudGVubmFzIzQzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE2LjExLjAwI1JhZGlvIGFudGVubmFzIzQzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE2LjEyLjAwI1JhZGFyIGFudGVubmFzIzQzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE2LjEzLjAwI0NvbW11bmljYXRpb25zIGFudGVubmFzIzQzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE2LjE0LjAwI0NvbW11bmljYXRpb24gdG93ZXJzIG9yIHN1cHBvcnQjNDMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTcuMDAuMDAjVGVsZWNvbW11bmljYXRpb25zIGVxdWlwbWVudCM0My4xNy4wMC4wMC4wMAotdW5zcHNjNyM0My4xNy4xNy4wMS4wMCNXaXJlbGVzcyBiYXNlIHN0YXRpb25zIzQzLjE3LjE3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE3LjAyLjAwI1RlbGVncmFwaCBlcXVpcG1lbnQjNDMuMTcuMTcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTcuMDMuMDAjVGVsZXR5cGUgZXF1aXBtZW50IzQzLjE3LjE3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE3LjA0LjAwI1RlbGVjb25mZXJlbmNpbmcgZXF1aXBtZW50IzQzLjE3LjE3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE3LjA1LjAwI1NhdGVsbGl0ZSBjb21tdW5pY2F0aW9uIGVxdWlwbWVudCM0My4xNy4xNy4wMC4wMAotdW5zcHNjNyM0My4xNy4xNy4wNi4wMCNQYWdlcnMgb3IgYmVlcGVycyM0My4xNy4xNy4wMC4wMAotdW5zcHNjNyM0My4xNy4xNy4wNy4wMCNJbnRlcmNvbW11bmljYXRpb25zIG9yIHBhZ2luZyBzeXN0ZW1zIzQzLjE3LjE3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE3LjA4LjAwI1B1YmxpYyBhZGRyZXNzIGVxdWlwbWVudCM0My4xNy4xNy4wMC4wMAotdW5zcHNjNyM0My4xNy4xNy4wOS4wMCNFbGVjdHJvbmljIHNvdW5kIGVxdWlwbWVudCM0My4xNy4xNy4wMC4wMAotdW5zcHNjNyM0My4xNy4xNy4xMC4wMCNEaWN0YXRpbmcgbWFjaGluZXMjNDMuMTcuMTcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTcuMTEuMDAjTGluZSBjb25kaXRpb25lcnMjNDMuMTcuMTcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTcuMTIuMDAjQ2hhbm5lbCBzZXJ2aWNlIHVuaXQgb3IgZGF0YSBzZXJ2aWNlIHVuaXQgKENTVSBvciBEU1UpIzQzLjE3LjE3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE4LjAwLjAwI0NvbXB1dGVycyM0My4xNy4wMC4wMC4wMAotdW5zcHNjNyM0My4xNy4xOC4wMS4wMCNOb3RlYm9vayBjb21wdXRlcnMjNDMuMTcuMTguMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTguMDIuMDAjRG9ja2luZyBzdGF0aW9ucyM0My4xNy4xOC4wMC4wMAotdW5zcHNjNyM0My4xNy4xOC4wMy4wMCNXb3Jrc3RhdGlvbnMgb3IgZGVza3RvcCBjb21wdXRlcnMjNDMuMTcuMTguMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTguMDQuMDAjUGVyc29uYWwgZGlnaXRhbCBhc3Npc3RhbnRzIChQREFzKSBvciBwZW4gYmFzZWQgY29tcHV0ZXJzIzQzLjE3LjE4LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE4LjA1LjAwI01haW5mcmFtZSBjb21wdXRlcnMjNDMuMTcuMTguMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTguMDYuMDAjU2VydmVycyM0My4xNy4xOC4wMC4wMAotdW5zcHNjNyM0My4xNy4xOC4wNy4wMCNQb3J0IHJlcGxpY2F0b3JzIzQzLjE3LjE4LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE4LjA4LjAwI01pbmljb21wdXRlcnMjNDMuMTcuMTguMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTguMDkuMDAjUG9pbnQgb2Ygc2FsZSAoUE9TKSB0ZXJtaW5hbHMjNDMuMTcuMTguMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTguMTAuMDAjUHJvZ3JhbW1hYmxlIGxvZ2ljIGNvbnRyb2xsZXIgKFBMQykjNDMuMTcuMTguMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTguMTEuMDAjQ29uc29sZSAgbWFpbmZyYW1lIzQzLjE3LjE4LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE4LjEyLjAwI0NvbnNvbGUgY29udHJvbGxlciAgbWFpbmZyYW1lIzQzLjE3LjE4LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE4LjEzLjAwI0NoYW5uZWwgY29udmVydGVyIzQzLjE3LjE4LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE4LjE0LjAwI0NoYW5uZWwgdG8gY2hhbm5lbCBpbnRlcmZhY2UgbWFpbmZyYW1lIzQzLjE3LjE4LjAwLjAwCi11bnNwc2M3IzQzLjE3LjE4LjE1LjAwI0NvbnRyb2wgdW5pdCM0My4xNy4xOC4wMC4wMAotdW5zcHNjNyM0My4xNy4xOC4xNi4wMCNDb3VwbGVyIGZhY2lsaXR5ICBtYWluZnJhbWUjNDMuMTcuMTguMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTguMTcuMDAjUG93ZXIgY29vbGVyIHVuaXQgIG1haW5mcmFtZSM0My4xNy4xOC4wMC4wMAotdW5zcHNjNyM0My4xNy4xOC4xOC4wMCNUaGluIGNsaWVudCBvciBkaXNrbGVzcyB3b3Jrc3RhdGlvbnMjNDMuMTcuMTguMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTguMTkuMDAjQ29uc29sZSBleHRlbmRlcnMjNDMuMTcuMTguMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTkuMDAuMDAjTWVtb3J5IGFuZCBjZW50cmFsIHByb2Nlc3NpbmcgdW5pdHMgQ1BVcyBhbmQgYWNjZXNzb3JpZXMjNDMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTkuMDEuMDAjQ2FjaGUgbWVtb3J5IG1vZHVsZXMjNDMuMTcuMTkuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMTkuMDIuMDAjQ2VudHJhbCBwcm9jZXNzaW5nIHVuaXQgKENQVSkgcHJvY2Vzc29ycyM0My4xNy4xOS4wMC4wMAotdW5zcHNjNyM0My4xNy4xOS4wMy4wMCNDZW50YWwgcHJvY2Vzc2luZyB1bml0IChDUFUpIG1vdGhlcmJvYXJkcyBvciBkYXVnaHRlcmJvYXJkcyM0My4xNy4xOS4wMC4wMAotdW5zcHNjNyM0My4xNy4xOS4wNC4wMCNNZW1vcnkgbW9kdWxlcyM0My4xNy4xOS4wMC4wMAotdW5zcHNjNyM0My4xNy4xOS4wNS4wMCNDZW50cmFsIHByb2Nlc3NpbmcgdW5pdCBjb29sZXJzIzQzLjE3LjE5LjAwLjAwCi11bnNwc2M3IzQzLjE3LjIwLjAwLjAwI0NvbXB1dGVyIGNvbnRyb2wgYW5kIGludGVyZmFjZSBib2FyZHMgYW5kIGNhcmRzIGFuZCBjYWJsZXMjNDMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjAuMDEuMDAjUGFyYWxsZWwgdG8gc21hbGwgY29tcHV0ZXIgc3lzdGVtIGludGVyZmFjZSBjb252ZXJ0ZXJzIzQzLjE3LjIwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIwLjAyLjAwI1BhcmFsbGVsIHRvIHNlcmlhbCBjb252ZXJ0ZXJzIzQzLjE3LjIwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIwLjAzLjAwI1NlcmlhbCBpbmZyYXJlZCBwb3J0cyM0My4xNy4yMC4wMC4wMAotdW5zcHNjNyM0My4xNy4yMC4wNC4wMCNWaWRlbyBhY2NlbGVyYXRvciBjYXJkcyM0My4xNy4yMC4wMC4wMAotdW5zcHNjNyM0My4xNy4yMC4wNS4wMCNHcmFwaGljIGFjY2VsZXJhdG9yIGNhcmRzIzQzLjE3LjIwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIwLjA2LjAwI05ldHdvcmsgaW50ZXJmYWNlIGNhcmRzIzQzLjE3LjIwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIwLjA3LjAwI0F1ZGlvIGNhcmRzIzQzLjE3LjIwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIwLjA4LjAwI0VtdWxhdGlvbiBhZGFwdGVycyM0My4xNy4yMC4wMC4wMAotdW5zcHNjNyM0My4xNy4yMC4wOS4wMCNTZXJpYWwgcG9ydCBjYXJkcyM0My4xNy4yMC4wMC4wMAotdW5zcHNjNyM0My4xNy4yMC4xMC4wMCNQYXJhbGxlbCBwb3J0IGNhcmRzIzQzLjE3LjIwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIwLjExLjAwI1NtYWxsIGNvbXB1dGVyIHN5c3RlbSBpbnRlcmZhY2UgKFNDU0kpIGNvbnRyb2xsZXIgY2FyZHMjNDMuMTcuMjAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjAuMTIuMDAjRGVjb2RlciM0My4xNy4yMC4wMC4wMAotdW5zcHNjNyM0My4xNy4yMC4xMy4wMCNQcm9ncmFtbWFibGUgbG9naWMgY29udHJvbGxlciBpbnB1dCBtb2R1bGUjNDMuMTcuMjAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjAuMTQuMDAjUHJvZ3JhbW1hYmxlIGxvZ2ljIGNvbnRyb2xsZXIgY291bnRlciBtb2R1bGUjNDMuMTcuMjAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjAuMTUuMDAjUHJvZ3JhbW1hYmxlIGxvZ2ljIGNvbnRyb2xsZXIgY29tbXVuaWNhdGlvbiBtb2R1bGUjNDMuMTcuMjAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjAuMTYuMDAjV2lyZWxlc3MgbmV0d29yayBpbnRlcmZhY2UgY2FyZHMjNDMuMTcuMjAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjAuMTcuMDAjVGltZWtlZXBpbmcgY2FyZCBtYWNoaW5lIGFuZCBjb21wdXRlciBpbnRlcmZhY2UgZGV2aWNlIzQzLjE3LjIwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIwLjE4LjAwI1Byb2Nlc3NvciBjYXJkcyM0My4xNy4yMC4wMC4wMAotdW5zcHNjNyM0My4xNy4yMS4wMC4wMCNBdWRpbyBhbmQgdmlzdWFsIGFjY2Vzc29yaWVzIzQzLjE3LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIxLjAxLjAwI011c2ljYWwgaW5zdHJ1bWVudCBkaWdpdGFsIGludGVyZmFjZSAoTUlESSkgaW50ZXJmYWNlcyBvciBhZGFwdGVycyM0My4xNy4yMS4wMC4wMAotdW5zcHNjNyM0My4xNy4yMS4wMi4wMCNTaWduYWwgcHJvY2Vzc29yIHVwZ3JhZGVzIzQzLjE3LjIxLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIxLjAzLjAwI1ZpZGVvIGNhcHR1cmUgYm9hcmRzIzQzLjE3LjIxLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIxLjA0LjAwI1RlbGV2aXNpb24gY2FyZHMjNDMuMTcuMjEuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjEuMDUuMDAjUmFkaW8gY2FyZHMjNDMuMTcuMjEuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjEuMDYuMDAjTXVsdGltZWRpYSBraXRzIzQzLjE3LjIxLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIxLjA3LjAwI0NvbXB1dGVyIHNwZWFrZXJzIzQzLjE3LjIxLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIxLjA4LjAwI0NvbXB1dGVyIGhlYWRzZXQjNDMuMTcuMjEuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjEuMDkuMDAjU2V0IHRvcCBib3hlcyM0My4xNy4yMS4wMC4wMAotdW5zcHNjNyM0My4xNy4yMS4xMC4wMCNWaWRlbyBjYXNzZXR0ZSBjb250YWluZXJzIzQzLjE3LjIxLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIyLjAwLjAwI0lucHV0IGRldmljZXMjNDMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjIuMDEuMDAjQmFyIGNvZGUgcmVhZGVycyM0My4xNy4yMi4wMC4wMAotdW5zcHNjNyM0My4xNy4yMi4wMi4wMCNHcmFwaGljcyB0YWJsZXRzIG9yIGRpZ2l0aXplcnMjNDMuMTcuMjIuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjIuMDMuMDAjSm95c3RpY2tzIG9yIGdhbWUgcGFkcyM0My4xNy4yMi4wMC4wMAotdW5zcHNjNyM0My4xNy4yMi4wNC4wMCNLZXlib2FyZHMgb3Iga2V5cGFkcyM0My4xNy4yMi4wMC4wMAotdW5zcHNjNyM0My4xNy4yMi4wNS4wMCNDb21wdXRlciBtb3VzZSM0My4xNy4yMi4wMC4wMAotdW5zcHNjNyM0My4xNy4yMi4wNi4wMCNSZW1vdGUgdXNlciBpbnRlcmZhY2VzIzQzLjE3LjIyLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIyLjA3LjAwI1NjYW5uZXJzIzQzLjE3LjIyLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIyLjA4LjAwI1RvdWNoIHBhZHMjNDMuMTcuMjIuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjIuMDkuMDAjVG91Y2ggc2NyZWVucyM0My4xNy4yMi4wMC4wMAotdW5zcHNjNyM0My4xNy4yMi4xMC4wMCNUcmFja2JhbGxzIzQzLjE3LjIyLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIyLjExLjAwI1ZvaWNlIG1pY3JvcGhvbmVzIGZvciBjb21wdXRlcnMjNDMuMTcuMjIuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjIuMTIuMDAjUHVuY2ggY2FyZCByZWFkZXJzIzQzLjE3LjIyLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIyLjEzLjAwI0xpZ2h0IHBlbiM0My4xNy4yMi4wMC4wMAotdW5zcHNjNyM0My4xNy4yMi4xNC4wMCNTdHlsdXMgcGVuIGZvciBtb2JpbGUgY29tcHV0ZXJzIzQzLjE3LjIyLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIyLjE1LjAwI01vdXNlIHBhZCM0My4xNy4yMi4wMC4wMAotdW5zcHNjNyM0My4xNy4yMi4xNi4wMCNQcm9ncmFtbWFibGUgbG9naWMgY29udHJvbGxlciBoYW5kaGVsZCBwcm9ncmFtbWVyIzQzLjE3LjIyLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIyLjE3LjAwI0VHUiAgRWxlY3Ryb25pYyBnYXRlIHJlYWRlciM0My4xNy4yMi4wMC4wMAotdW5zcHNjNyM0My4xNy4yMi4xOC4wMCNEdW1iIHRlcm1pbmFsIzQzLjE3LjIyLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIyLjE5LjAwI1B1bmNoZWQgY2FyZHMjNDMuMTcuMjIuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjMuMDAuMDAjRWxlY3Ryb25pYyBkYXRhIHN0b3JhZ2UgZXF1aXBtZW50IzQzLjE3LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIzLjAxLjAwI1JlYWQgb25seSBjb21wYWN0IGRpc2MgKENEKSBkcml2ZXMjNDMuMTcuMjMuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjMuMDIuMDAjQ29tcGFjdCBkaXNjIChDRCkganVrZWJveGVzIG9yIGNoYW5nZXJzIzQzLjE3LjIzLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIzLjAzLjAwI0NvbWJpbmF0aW9uIGZsb3BweSBkcml2ZXMjNDMuMTcuMjMuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjMuMDQuMDAjRGlzayBhcnJheXMjNDMuMTcuMjMuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjMuMDUuMDAjRmxvcHB5IGRyaXZlcyM0My4xNy4yMy4wMC4wMAotdW5zcHNjNyM0My4xNy4yMy4wNi4wMCNIaWdoIGNhcGFjaXR5IHJlbW92YWJsZSBtZWRpYSBkcml2ZXMjNDMuMTcuMjMuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjMuMDcuMDAjTXVsdGkgZHJpdmUgaGFyZCBkcml2ZSB0b3dlcnMjNDMuMTcuMjMuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjMuMDguMDAjUmVjb3JkYWJsZSBjb21wYWN0IGRpc2MgKENEKSBkcml2ZXMjNDMuMTcuMjMuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjMuMDkuMDAjUmVlbCB0byByZWVsIHRhcGUgZHJpdmVzIzQzLjE3LjIzLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIzLjEwLjAwI1NpbmdsZSBvcHRpY2FsIGRyaXZlcyM0My4xNy4yMy4wMC4wMAotdW5zcHNjNyM0My4xNy4yMy4xMS4wMCNUYXBlIGFycmF5cyM0My4xNy4yMy4wMC4wMAotdW5zcHNjNyM0My4xNy4yMy4xMi4wMCNUYXBlIGRyaXZlIGF1dG8gbG9hZGVycyBvciBsaWJyYXJpZXMjNDMuMTcuMjMuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjMuMTMuMDAjSGFyZCBkcml2ZXMjNDMuMTcuMjMuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjMuMTQuMDAjQ29tcHV0ZXIgRFZEIGRyaXZlcyM0My4xNy4yMy4wMC4wMAotdW5zcHNjNyM0My4xNy4yMy4xNS4wMCNBcnJheSBjb250cm9sbGVyIzQzLjE3LjIzLjAwLjAwCi11bnNwc2M3IzQzLjE3LjIzLjE2LjAwI01QMyBwbGF5ZXIjNDMuMTcuMjMuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjMuMTcuMDAjTWVtb3J5IGNhcmQgcmVhZGVycyM0My4xNy4yMy4wMC4wMAotdW5zcHNjNyM0My4xNy4yMy4xOC4wMCNQZXJpcGhlcmFsIGNvbXBvbmVudCBtaWNyb2NoYW5uZWwgaW50ZXJjb25uZWN0IGFyY2hpdGVjdHVyZSAgcmVhZGVyIGFuZCB3cml0ZXIgZHJpdmVzIzQzLjE3LjIzLjAwLjAwCi11bnNwc2M3IzQzLjE3LjI0LjAwLjAwI01vbml0b3JzIGFuZCBkaXNwbGF5cyM0My4xNy4wMC4wMC4wMAotdW5zcHNjNyM0My4xNy4yNC4wMS4wMCNNb25pdG9ycyM0My4xNy4yNC4wMC4wMAotdW5zcHNjNyM0My4xNy4yNC4wMi4wMCNGbGF0IHBhbmVsIGRpc3BsYXlzIzQzLjE3LjI0LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI0LjAzLjAwI1RvdWNoIHNjcmVlbiBtb25pdG9ycyM0My4xNy4yNC4wMC4wMAotdW5zcHNjNyM0My4xNy4yNC4wNC4wMCNNb25pdG9yIGFjY2Vzc29yaWVzIzQzLjE3LjI0LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI1LjAwLjAwI1ByaW50ZXJzIzQzLjE3LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjI1LjAxLjAwI1Bsb3R0ZXJzIzQzLjE3LjI1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI1LjAyLjAwI0JhbmQgcHJpbnRlcnMjNDMuMTcuMjUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjUuMDMuMDAjRG90IG1hdHJpeCBwcmludGVycyM0My4xNy4yNS4wMC4wMAotdW5zcHNjNyM0My4xNy4yNS4wNC4wMCNMYWJlbCBwcmludGVycyM0My4xNy4yNS4wMC4wMAotdW5zcHNjNyM0My4xNy4yNS4wNS4wMCNMYXJnZSBmb3JtYXQgcHJpbnRlcnMjNDMuMTcuMjUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjUuMDYuMDAjTGluZSBtYXRyaXggcHJpbnRlcnMjNDMuMTcuMjUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjUuMDcuMDAjUGFnZSBwcmludGVycyM0My4xNy4yNS4wMC4wMAotdW5zcHNjNyM0My4xNy4yNS4wOC4wMCNUaGVybWFsIHRhcGUgcHJpbnRlcnMjNDMuMTcuMjUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjUuMDkuMDAjSW5ramV0IHByaW50ZXJzIzQzLjE3LjI1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI1LjEwLjAwI0xhc2VyIHByaW50ZXJzIzQzLjE3LjI1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI1LjExLjAwI0J1YmJsZSBqZXQgcHJpbnRlcnMjNDMuMTcuMjUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjUuMTIuMDAjQmFnIHRhZyBwcmludGVyIzQzLjE3LjI1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI1LjEzLjAwI1ByaW50ZXIgc2VwZXJhdG9yIzQzLjE3LjI1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI1LjE0LjAwI011bHRpIGZ1bmN0aW9uIHByaW50ZXJzIzQzLjE3LjI1LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI1LjE1LjAwI0FUQiBhaXJsaW5lIHRpY2tldCBvciBib2FyZGluZyBwYXNzIHByaW50ZXIjNDMuMTcuMjUuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjYuMDAuMDAjRW5jbG9zdXJlcyBhbmQgZnJhbWVzIGFuZCBiYWNrcGxhbmVzIzQzLjE3LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjI2LjAxLjAwI0NoYXNzaXMjNDMuMTcuMjYuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjYuMDIuMDAjTmV0d29yayBjaGFzc2lzIzQzLjE3LjI2LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI2LjAzLjAwI0RyaXZlIGNhYmluZXRzIzQzLjE3LjI2LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI2LjA0LjAwI0V4cGFuc2lvbiBzbG90IGV4cGFuZGVyIzQzLjE3LjI2LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI2LjA1LjAwI1JhY2tzIzQzLjE3LjI2LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI2LjA2LjAwI1Byb2dyYW1tYWJsZSBsb2dpYyBjb250cm9sbGVyIHJhY2sgb3IgYmFzZSM0My4xNy4yNi4wMC4wMAotdW5zcHNjNyM0My4xNy4yNi4wNy4wMCNSZW1vdmFibGUgZHJpdmUgZnJhbWVzIzQzLjE3LjI2LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI3LjAwLjAwI05ldHdvcmsgaGFyZHdhcmUgYW5kIGNvbXBvbmVudHMgYW5kIGFjY2Vzc29yaWVzIzQzLjE3LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjI3LjAxLjAwI0h1YnMgb3IgY29uY2VudHJhdG9ycyM0My4xNy4yNy4wMC4wMAotdW5zcHNjNyM0My4xNy4yNy4wMi4wMCNSb3V0ZXJzIzQzLjE3LjI3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI3LjAzLjAwI1JlcGVhdGVycyM0My4xNy4yNy4wMC4wMAotdW5zcHNjNyM0My4xNy4yNy4wNC4wMCNOZXR3b3JrIGJyaWRnZXMjNDMuMTcuMjcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjcuMDUuMDAjU3dpdGNoZXMjNDMuMTcuMjcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjcuMDYuMDAjTWVkaWEgZmlsdGVycyM0My4xNy4yNy4wMC4wMAotdW5zcHNjNyM0My4xNy4yNy4wNy4wMCNXaWRlIGFyZWEgbmV0d29yayAoV0FOKSBjYXJkcyM0My4xNy4yNy4wMC4wMAotdW5zcHNjNyM0My4xNy4yNy4wOC4wMCNNdWx0aXN0YXRpb24gYWNjZXNzIHVuaXRzIChNQVVzKSM0My4xNy4yNy4wMC4wMAotdW5zcHNjNyM0My4xNy4yNy4wOS4wMCNEYXRhIHNlcnZpY2UgdW5pdHMgKERTVXMpIzQzLjE3LjI3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI3LjEwLjAwI05ldHdvcmsgYWRhcHRlcnMjNDMuMTcuMjcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjcuMTEuMDAjTG9hZCBiYWxhbmNlciM0My4xNy4yNy4wMC4wMAotdW5zcHNjNyM0My4xNy4yNy4xMi4wMCNQcmludGVyICBhY2N1bXVsYXRvciM0My4xNy4yNy4wMC4wMAotdW5zcHNjNyM0My4xNy4yNy4xMy4wMCNFbnRlcnByaXNlIFN5c3RlbSBDb25uZWN0aXZpdHkgRVNDT04gRGlyZWN0b3IjNDMuMTcuMjcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjcuMTQuMDAjTmV0d29yayBtYW5hZ2VtZW50IHN5c3RlbSM0My4xNy4yNy4wMC4wMAotdW5zcHNjNyM0My4xNy4yNy4xNS4wMCNGaXJld2FsbCBmaXJld2FsbCBhcHBsaWFuY2UjNDMuMTcuMjcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjcuMTYuMDAjQ2FibGUgbmV0d29yayB0ZXN0ZXJzIzQzLjE3LjI3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI3LjE3LjAwI0RhdGEgc3luY2hyb25pemF0aW9uIGRldmljZSM0My4xNy4yNy4wMC4wMAotdW5zcHNjNyM0My4xNy4yNy4xOC4wMCNEaWdpdGFsIGNyb3NzIGNvbm5lY3RzIGVxdWlwbWVudCM0My4xNy4yNy4wMC4wMAotdW5zcHNjNyM0My4xNy4yNy4xOS4wMCNPcHRpY2FsIGNyb3NzIGNvbm5lY3RzIGVxdWlwbWVudCM0My4xNy4yNy4wMC4wMAotdW5zcHNjNyM0My4xNy4yNy4yMC4wMCNTY3JlZW4gYW1wbGlmaWVyIzQzLjE3LjI3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI3LjIxLjAwI1RpbWUgZGl2aXNpb25hbCBtdWx0aXBsZXgjNDMuMTcuMjcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjcuMjIuMDAjQ29ubmVjdGlvbiBwYW5lbHMjNDMuMTcuMjcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjcuMjMuMDAjVm9pY2UgZWNobyBjYW5jZWxsZXJzIzQzLjE3LjI3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI3LjI0LjAwI1BhdGNoIHBhbmVsIzQzLjE3LjI3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI4LjAwLjAwI01vZGVtcyBhbmQgcmVsYXRlZCBoYXJkd2FyZSM0My4xNy4wMC4wMC4wMAotdW5zcHNjNyM0My4xNy4yOC4wMS4wMCNNb2RlbXMgb3IgbmV0d29yayBjb21ibyBjYXJkcyM0My4xNy4yOC4wMC4wMAotdW5zcHNjNyM0My4xNy4yOC4wMi4wMCNNb2RlbXMjNDMuMTcuMjguMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjguMDMuMDAjSW50ZWdyYXRlZCBzZXJ2aWNlcyBkaWdpdGFsIG5ldHdvcmsgKElTRE4pIGFkYXB0ZXJzIzQzLjE3LjI4LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI4LjA0LjAwI01vZGVtIGJhbmtzIzQzLjE3LjI4LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI4LjA1LjAwI01vZGVtIHRlbGVhZGFwdG9ycyM0My4xNy4yOC4wMC4wMAotdW5zcHNjNyM0My4xNy4yOC4wNi4wMCNNdWx0aXBsZXhvciBNVVhzIzQzLjE3LjI4LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI4LjA3LjAwI0FkZCBkcm9wIG11bHRpcGxleGVyIzQzLjE3LjI4LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI5LjAwLjAwI05ldHdvcmsgc3dpdGNoZXMjNDMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjkuMDEuMDAjTG9jYWwgYXJlYSBuZXR3b3JrIChMQU4pIHN3aXRjaGVzIzQzLjE3LjI5LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI5LjAyLjAwI0FzeW5jaHJvbm91cyB0cmFuc2ZlciBtb2RlIChBVE0pIHN3aXRjaGVzIzQzLjE3LjI5LjAwLjAwCi11bnNwc2M3IzQzLjE3LjI5LjAzLjAwI0ZpYmVyIGRpc3RyaWJ1dGVkIGRhdGEgaW50ZXJmYWNlIChGRERJKSAgc3dpdGNoZXMjNDMuMTcuMjkuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjkuMDQuMDAjV2lkZSBhcmVhIG5ldHdvcmsgKFdBTikgc3dpdGNoZXMjNDMuMTcuMjkuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMjkuMDUuMDAjSW50ZWxsaWdlbnQgbmV0d29yayBzd2l0Y2hpbmcgc3lzdGVtIzQzLjE3LjI5LjAwLjAwCi11bnNwc2M3IzQzLjE3LjMwLjAwLjAwI05ldHdvcmsgcmVwZWF0ZXJzIzQzLjE3LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjMwLjAxLjAwI0F0dGFjaGVkIHJlc291cmNlIGNvbXB1dGVyIG5ldHdvcmsgKEFSQ25ldCkgcmVwZWF0ZXJzIzQzLjE3LjMwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjMwLjAyLjAwI0V0aGVybmV0IHJlcGVhdGVycyM0My4xNy4zMC4wMC4wMAotdW5zcHNjNyM0My4xNy4zMC4wMy4wMCNGaWJlciBkaXN0cmlidXRlZCBkYXRhIGludGVyZmFjZSAoRkRESSkgcmVwZWF0ZXJzIzQzLjE3LjMwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjMwLjA0LjAwI1Rva2VuIHJpbmcgcmVwZWF0ZXJzIzQzLjE3LjMwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjMxLjAwLjAwI1JhZGlvIHN5c3RlbXMjNDMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzEuMDEuMDAjVHJhbnNtaXR0ZXJzIzQzLjE3LjMxLjAwLjAwCi11bnNwc2M3IzQzLjE3LjMxLjAyLjAwI1JlY2VpdmVycyM0My4xNy4zMS4wMC4wMAotdW5zcHNjNyM0My4xNy4zMS4wMy4wMCNUcmFuc2NlaXZlcnMjNDMuMTcuMzEuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzEuMDQuMDAjVHVuZXJzIzQzLjE3LjMxLjAwLjAwCi11bnNwc2M3IzQzLjE3LjMxLjA1LjAwI1Nob3J0IHdhdmUgZXF1aXBtZW50IzQzLjE3LjMxLjAwLjAwCi11bnNwc2M3IzQzLjE3LjMyLjAwLjAwI0F1dG9tYXRlZCBkYXRhIGNvbGxlY3Rpb24gZXF1aXBtZW50IzQzLjE3LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjMyLjAxLjAwI0JhciBjb2RlIGVxdWlwbWVudCM0My4xNy4zMi4wMC4wMAotdW5zcHNjNyM0My4xNy4zMi4wMi4wMCNSYWRpbyBmcmVxdWVuY3kgaWRlbnRpZmljYXRpb24gKElEKSBlcXVpcG1lbnQjNDMuMTcuMzIuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzIuMDMuMDAjUmFkaW8gZnJlcXVlbmN5IGRhdGEgY29tbXVuaWNhdGlvbiBlcXVpcG1lbnQjNDMuMTcuMzIuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzIuMDQuMDAjQ2FtZXJhIGJhc2VkIHZpc2lvbiBzeXN0ZW1zIGZvciBhdXRvbWF0ZWQgZGF0YSBjb2xsZWN0aW9uIzQzLjE3LjMyLjAwLjAwCi11bnNwc2M3IzQzLjE3LjMyLjA1LjAwI0N1cnJlbmN5IHJlY29nbml0aW9uIGVxdWlwbWVudCM0My4xNy4zMi4wMC4wMAotdW5zcHNjNyM0My4xNy4zMi4wNi4wMCNNYWduZXRpYyBjYXJkIHJlYWRlcnMjNDMuMTcuMzIuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzMuMDAuMDAjQ29tcHV0ZXIgZGF0YSBzd2l0Y2hlcyM0My4xNy4wMC4wMC4wMAotdW5zcHNjNyM0My4xNy4zMy4wMS4wMCNTZXJpYWwgZGF0YSBzd2l0Y2hlcyM0My4xNy4zMy4wMC4wMAotdW5zcHNjNyM0My4xNy4zMy4wMi4wMCNLZXlib2FyZCB2aWRlbyBtb3VzZSAoS1ZNKSBzd2l0Y2ggYm94ZXMjNDMuMTcuMzMuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzMuMDMuMDAjTWFudWFsIHByaW50ZXIgc3dpdGNoZXMjNDMuMTcuMzMuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzMuMDQuMDAjQXV0b21hdGljIHByaW50ZXIgc3dpdGNoZXMjNDMuMTcuMzMuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzMuMDUuMDAjQ29uc29sZSBzd2l0Y2gjNDMuMTcuMzMuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzMuMDYuMDAjUGFyYWxsZWwgZGF0YSBzd2l0Y2hlcyM0My4xNy4zMy4wMC4wMAotdW5zcHNjNyM0My4xNy4zNC4wMC4wMCNDb21wdXRlciBhY2Nlc3NvcnkgY292ZXJzIzQzLjE3LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjM0LjAxLjAwI0tleSBib2FyZCBza2lucyM0My4xNy4zNC4wMC4wMAotdW5zcHNjNyM0My4xNy4zNC4wMi4wMCNOb3RlYm9vayBvciBwYWxtdG9wIHNraW5zIzQzLjE3LjM0LjAwLjAwCi11bnNwc2M3IzQzLjE3LjM1LjAwLjAwI0tleSBib2FyZCBza2lucyM0My4xNy4wMC4wMC4wMAotdW5zcHNjNyM0My4xNy4zNi4wMC4wMCNDb21wdXRlciBjYWJsZXMgYW5kIGFjY2Vzc29yaWVzIzQzLjE3LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjM2LjAxLjAwI01vdXNlIGFkYXB0ZXIjNDMuMTcuMzYuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzYuMDIuMDAjS2V5Ym9hcmQgZXh0ZW5zaW9uIGNhYmxlcyM0My4xNy4zNi4wMC4wMAotdW5zcHNjNyM0My4xNy4zNi4wMy4wMCNNb2RlbSBjYWJsZXMjNDMuMTcuMzYuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzYuMDQuMDAjQ29yZCBjb3ZlcnMjNDMuMTcuMzYuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzYuMDUuMDAjUGFyYWxsZWwgY2FibGVzIzQzLjE3LjM2LjAwLjAwCi11bnNwc2M3IzQzLjE3LjM2LjA2LjAwI1NlcmlhbCBjYWJsZXMjNDMuMTcuMzYuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzYuMDcuMDAjVW5pdmVyc2FsIHNlcmlhbCBidXMgVVNCIGNhYmxlcyM0My4xNy4zNi4wMC4wMAotdW5zcHNjNyM0My4xNy4zNi4wOC4wMCNOZXR3b3JrIHBhdGNoIGNhYmxlcyM0My4xNy4zNi4wMC4wMAotdW5zcHNjNyM0My4xNy4zNi4wOS4wMCNDb21wdXRlciBhdWRpbyBjYWJsZXMjNDMuMTcuMzYuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzYuMTAuMDAjQ29tcHV0ZXIgdmlkZW8gY2FibGVzIzQzLjE3LjM2LjAwLjAwCi11bnNwc2M3IzQzLjE3LjM2LjExLjAwI0ludGVyIGRldmljZSBsaW5rIGNhYmxlcyM0My4xNy4zNi4wMC4wMAotdW5zcHNjNyM0My4xNy4zNi4xMi4wMCNDb21wdXRlciBjYWJsZSBraXRzIzQzLjE3LjM2LjAwLjAwCi11bnNwc2M3IzQzLjE3LjM2LjEzLjAwI0NhYmxlIGphY2tzIG9yIGNvbm5lY3RvcnMjNDMuMTcuMzYuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzcuMDAuMDAjU3RvcmFnZSBkcml2ZSBjb21wb25lbnRzIzQzLjE3LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE3LjM3LjAxLjAwI0hlYWQgYXNzZW1ibGllcyBvciBwYXJ0cyM0My4xNy4zNy4wMC4wMAotdW5zcHNjNyM0My4xNy4zNy4wMi4wMCNMZWFkIGFzc2VtYmxpZXMjNDMuMTcuMzcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzcuMDMuMDAjSGVhZCBzdGFjayBhc3NlbWJsaWVzIzQzLjE3LjM3LjAwLjAwCi11bnNwc2M3IzQzLjE3LjM3LjA0LjAwI0NvbWIgYXNzZW1ibGllcyM0My4xNy4zNy4wMC4wMAotdW5zcHNjNyM0My4xNy4zNy4wNS4wMCNDcmFzaCBzdG9wcyM0My4xNy4zNy4wMC4wMAotdW5zcHNjNyM0My4xNy4zNy4wNi4wMCNQbGF0dGVycyBvciBkaXNrcyM0My4xNy4zNy4wMC4wMAotdW5zcHNjNyM0My4xNy4zNy4wNy4wMCNIZWFkIG1vdW50aW5nIGFybXMjNDMuMTcuMzcuMDAuMDAKLXVuc3BzYzcjNDMuMTcuMzcuMDguMDAjUmVhZCB3cml0ZSBoZWFkcyM0My4xNy4zNy4wMC4wMAotdW5zcHNjNyM0My4xNy4zNy4wOS4wMCNNb3RvciBkcml2ZXMjNDMuMTcuMzcuMDAuMDAKLXVuc3BzYzcjNDMuMTguMDAuMDAuMDAjQ29tbXVuaWNhdGlvbnMgYW5kIGNvbXB1dGVyIHN1cHBsaWVzIzQzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzQzLjE4LjE1LjAwLjAwI0F1ZGlvIHJlY29yZGluZyBtZWRpYSM0My4xOC4wMC4wMC4wMAotdW5zcHNjNyM0My4xOC4xNS4wMS4wMCNCbGFuayBhdWRpbyB0YXBlcyM0My4xOC4xNS4wMC4wMAotdW5zcHNjNyM0My4xOC4xNi4wMC4wMCNEYXRhIHN0b3JhZ2UgbWVkaWEjNDMuMTguMDAuMDAuMDAKLXVuc3BzYzcjNDMuMTguMTYuMDEuMDAjRmxvcHB5IGRpc2tldHRlcyM0My4xOC4xNi4wMC4wMAotdW5zcHNjNyM0My4xOC4xNi4wMi4wMCNSZWNvcmRhYmxlIGNvbXBhY3QgZGlzY3MgKENEcykjNDMuMTguMTYuMDAuMDAKLXVuc3BzYzcjNDMuMTguMTYuMDMuMDAjQmxhbmsgZGF0YSB0YXBlcyM0My4xOC4xNi4wMC4wMAotdW5zcHNjNyM0My4xOC4xNi4wNC4wMCNIaWdoIGRlbnNpdHkgcmVtb3ZhYmxlIG1lZGlhIGJsYW5rIGRpc2tzIzQzLjE4LjE2LjAwLjAwCi11bnNwc2M3IzQzLjE4LjE2LjA1LjAwI0JsYW5rIGRpZ2l0YWwgdmlkZW8gZGlzY3MgRFZEIzQzLjE4LjE2LjAwLjAwCi11bnNwc2M3IzQzLjE4LjE2LjA2LjAwI0RhdGEgc3RvcmFnZSBjYXJkcyM0My4xOC4xNi4wMC4wMAotdW5zcHNjNyM0My4xOC4xNi4wNy4wMCNNYWduZXRvIG9wdGljYWwgZGlza3MjNDMuMTguMTYuMDAuMDAKLXVuc3BzYzcjNDMuMTguMTcuMDAuMDAjTXVsdGltZWRpYSBzdG9yYWdlIzQzLjE4LjAwLjAwLjAwCi11bnNwc2M3IzQzLjE4LjE3LjAxLjAwI011bHRpbWVkaWEgdG93ZXJzIzQzLjE4LjE3LjAwLjAwCi11bnNwc2M3IzQzLjE4LjE3LjAyLjAwI011bHRpbWVkaWEgZHJhd2VycyM0My4xOC4xNy4wMC4wMAotdW5zcHNjNyM0My4xOC4xNy4wMy4wMCNDb21wYWN0IGRpc2MgKENEKSBjYXNlcyM0My4xOC4xNy4wMC4wMAotdW5zcHNjNyM0My4xOC4xNy4wNC4wMCNEaXNrZXR0ZSBob2xkZXJzIzQzLjE4LjE3LjAwLjAwCi11bnNwc2M3IzQzLjE4LjE3LjA1LjAwI0Rpc2tldHRlIHN0b3JhZ2UjNDMuMTguMTcuMDAuMDAKLXVuc3BzYzcjNDMuMTguMTcuMDYuMDAjTXVsdGltZWRpYSB0cmF5cyBvciBvcmdhbml6ZXJzIzQzLjE4LjE3LjAwLjAwCi11bnNwc2M3IzQzLjE4LjE3LjA3LjAwI1ppcCBtYWlsZXJzIzQzLjE4LjE3LjAwLjAwCi11bnNwc2M3IzQzLjE4LjE4LjAwLjAwI01vbml0b3Igc3RhbmRzIG9yIHJpc2VycyM0My4xOC4wMC4wMC4wMAotdW5zcHNjNyM0My4xOC4xOS4wMC4wMCNNb25pdG9yIGFybXMjNDMuMTguMDAuMDAuMDAKLXVuc3BzYzcjNDQuMDAuMDAuMDAuMDAjT2ZmaWNlIEVxdWlwbWVudCBhbmQgQWNjZXNzb3JpZXMgYW5kIFN1cHBsaWVzIzQ0LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjAwLjAwLjAwI09mZmljZSBtYWNoaW5lcyBhbmQgdGhlaXIgc3VwcGxpZXMgYW5kIGFjY2Vzc29yaWVzIzQ0LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjE1LjAwLjAwI0R1cGxpY2F0aW5nIG1hY2hpbmVzIzQ0LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjE1LjAxLjAwI1Bob3RvY29waWVycyM0NC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0NC4xMC4xNS4wMi4wMCNGYWNzaW1pbGUgbWFjaGluZXMjNDQuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMTUuMDMuMDAjTXVsdGlmdW5jdGlvbiBtYWNoaW5lcyM0NC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0NC4xMC4xNi4wMC4wMCNQYXBlciBwcm9jZXNzaW5nIG1hY2hpbmVzIzQ0LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjE2LjAxLjAwI1BhcGVyIGN1dHRpbmcgbWFjaGluZXMjNDQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMTYuMDIuMDAjUGFwZXIgcHVuY2hpbmcgb3IgYmluZGluZyBtYWNoaW5lcyM0NC4xMC4xNi4wMC4wMAotdW5zcHNjNyM0NC4xMC4xNi4wMy4wMCNQYXBlciBzaHJlZGRpbmcgbWFjaGluZXMgb3IgYWNjZXNzb3JpZXMjNDQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMTcuMDAuMDAjUHJpbnRlciBhbmQgcGhvdG9jb3BpZXIgYW5kIGZhY3NpbWlsZSBhY2Nlc3NvcmllcyM0NC4xMC4wMC4wMC4wMAotdW5zcHNjNyM0NC4xMC4xNy4wMS4wMCNDb2xvciBvcHRpb25zIG9yIHVwZ3JhZGVzIzQ0LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjE3LjAyLjAwI0R1cGxleGVyIHRyYXlzIzQ0LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjE3LjAzLjAwI0R1cGxleGVyIHVuaXRzIzQ0LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjE3LjA0LjAwI0ZhY3NpbWlsZSBoYW5kc2V0cyM0NC4xMC4xNy4wMC4wMAotdW5zcHNjNyM0NC4xMC4xNy4wNS4wMCNQcmludGVyIHRyYXlzIG9yIGZlZWRlcnMjNDQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMTcuMDYuMDAjUGhvdG9jb25kdWN0b3Igb3IgaW1hZ2luZyB1bml0cyM0NC4xMC4xNy4wMC4wMAotdW5zcHNjNyM0NC4xMC4xNy4wNy4wMCNTdGFwbGVyIHVuaXRzIzQ0LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjE4LjAwLjAwI0NhbGN1bGF0aW5nIG1hY2hpbmVzIzQ0LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjE4LjAxLjAwI0NhbGN1bGF0b3JzIzQ0LjEwLjE4LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjE4LjAyLjAwI0FkZGluZyBtYWNoaW5lcyM0NC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0NC4xMC4xOC4wMy4wMCNBY2NvdW50aW5nIG1hY2hpbmVzIzQ0LjEwLjE4LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjE4LjA0LjAwI0Nhc2ggcmVnaXN0ZXJzIzQ0LjEwLjE4LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjE5LjAwLjAwI0NoZWNrIGVuZG9yc2luZyBhbmQgd3JpdGluZyBtYWNoaW5lcyM0NC4xMC4wMC4wMC4wMAotdW5zcHNjNyM0NC4xMC4xOS4wMS4wMCNDaGVjayBlbmRvcnNpbmcgbWFjaGluZXMjNDQuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMTkuMDIuMDAjQ2hlY2sgd3JpdGluZyBtYWNoaW5lcyM0NC4xMC4xOS4wMC4wMAotdW5zcHNjNyM0NC4xMC4yMC4wMC4wMCNMYW1pbmF0aW5nIHN1cHBsaWVzIzQ0LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjIwLjAxLjAwI0xhbWluYXRpb24gZmlsbSM0NC4xMC4yMC4wMC4wMAotdW5zcHNjNyM0NC4xMC4yMC4wMi4wMCNMYW1pbmF0b3IgcG91Y2hlcyM0NC4xMC4yMC4wMC4wMAotdW5zcHNjNyM0NC4xMC4yMS4wMC4wMCNNYWlsIG1hY2hpbmVzIzQ0LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjIxLjAxLjAwI0ZyYW5raW5nIG9yIHBvc3RhZ2UgbWFjaGluZXMjNDQuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjEuMDIuMDAjTWFpbCBvcGVuaW5nIG1hY2hpbmVzIzQ0LjEwLjIxLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjIxLjAzLjAwI01haWwgc2VhbGluZyBtYWNoaW5lcyM0NC4xMC4yMS4wMC4wMAotdW5zcHNjNyM0NC4xMC4yMS4wNC4wMCNTdGFtcCBjYW5jZWxpbmcgbWFjaGluZXMjNDQuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjEuMDUuMDAjQWRkcmVzc2luZyBtYWNoaW5lcyM0NC4xMC4yMS4wMC4wMAotdW5zcHNjNyM0NC4xMC4yMS4wNi4wMCNMZXR0ZXIgZm9sZGVycyM0NC4xMC4yMS4wMC4wMAotdW5zcHNjNyM0NC4xMC4yMi4wMC4wMCNTY2FubmVyIGFjY2Vzc29yaWVzIzQ0LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjIyLjAxLjAwI0VuZG9yc2VycyM0NC4xMC4yMi4wMC4wMAotdW5zcHNjNyM0NC4xMC4yMy4wMC4wMCNQYWNraW5nIG1hY2hpbmVzIzQ0LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjIzLjAxLjAwI0J1bmRsaW5nIG1hY2hpbmVzIzQ0LjEwLjIzLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjIzLjAyLjAwI1BhcmNlbCB3cmFwcGluZyBtYWNoaW5lcyM0NC4xMC4yMy4wMC4wMAotdW5zcHNjNyM0NC4xMC4yMy4wMy4wMCNTZWFsIHByZXNzZXMjNDQuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjMuMDQuMDAjU2VhbGluZyBtYWNoaW5lcyM0NC4xMC4yMy4wMC4wMAotdW5zcHNjNyM0NC4xMC4yMy4wNS4wMCNTdHJhcHBpbmcgdGVuc2lvbmVycyBvciBzZWFsZXJzIzQ0LjEwLjIzLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjIzLjA2LjAwI1R5aW5nIG1hY2hpbmVzIzQ0LjEwLjIzLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjI0LjAwLjAwI0xhYmVsaW5nIG1hY2hpbmVzIzQ0LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjI0LjAxLjAwI1RhcGUgbGFiZWwgbWFrZXJzIzQ0LjEwLjI0LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjI0LjAyLjAwI0RhdGluZyBvciBudW1iZXJpbmcgbWFjaGluZXMjNDQuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjQuMDMuMDAjSWRlbnRpZmljYXRpb24gKElEKSBwcmVzcyBtYWNoaW5lcyM0NC4xMC4yNC4wMC4wMAotdW5zcHNjNyM0NC4xMC4yNC4wNC4wMCNMYWJlbCBhcHBseWluZyBtYWNoaW5lcyM0NC4xMC4yNC4wMC4wMAotdW5zcHNjNyM0NC4xMC4yNC4wNS4wMCNMYWJlbCBtYWtpbmcgbWFjaGluZXMjNDQuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjQuMDYuMDAjTGV0dGVyaW5nIGVxdWlwbWVudCM0NC4xMC4yNC4wMC4wMAotdW5zcHNjNyM0NC4xMC4yNC4wNy4wMCNUYXBlIGVtYm9zc2VyIzQ0LjEwLjI0LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjI0LjA4LjAwI0F1dG9tYXRpYyBsYWJlbGluZyBzeXN0ZW1zIzQ0LjEwLjI0LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjI0LjA5LjAwI1NlbWkgYXV0b21hdGljIGxhYmVsaW5nIHN5c3RlbXMjNDQuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjQuMTEuMDAjTGFiZWwgZGlzcGVuc2VycyM0NC4xMC4yNC4wMC4wMAotdW5zcHNjNyM0NC4xMC4yNS4wMC4wMCNTb3J0aW5nIG1hY2hpbmVzIzQ0LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjI1LjAxLjAwI01vbmV5IGNvdW50aW5nIG1hY2hpbmVzIzQ0LjEwLjI1LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjI1LjAyLjAwI1NvcnRlcnMjNDQuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjYuMDAuMDAjVHlwaW5nIG1hY2hpbmVzIGFuZCBhY2Nlc3NvcmllcyM0NC4xMC4wMC4wMC4wMAotdW5zcHNjNyM0NC4xMC4yNi4wMi4wMCNUeXBld3JpdGVycyM0NC4xMC4yNi4wMC4wMAotdW5zcHNjNyM0NC4xMC4yNi4wMy4wMCNQcmludHdoZWVscyM0NC4xMC4yNi4wMC4wMAotdW5zcHNjNyM0NC4xMC4yNi4wNC4wMCNTdGVub3R5cGUgbWFjaGluZXMjNDQuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjYuMDUuMDAjRGljdGF0aW9uIG1hY2hpbmVzIzQ0LjEwLjI2LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjI2LjA2LjAwI1R5cGVyd3JpdGVyIHJpYmJvbnMjNDQuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjYuMDcuMDAjV29yZCBwcm9jZXNzb3JzIzQ0LjEwLjI2LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjI2LjA4LjAwI1R5cGV3cml0ZXIgcHJpbnRpbmcgZWxlbWVudHMjNDQuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjguMDAuMDAjQmluZGluZyBhbmQgbGFtaW5hdGlvbiBtYWNoaW5lcyM0NC4xMC4wMC4wMC4wMAotdW5zcHNjNyM0NC4xMC4yOC4wMS4wMCNMYW1pbmF0b3JzIzQ0LjEwLjI4LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjI5LjAwLjAwI09mZmljZSBtYWNoaW5lIGFjY2Vzc29yaWVzIzQ0LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjI5LjAxLjAwI1RyYXZlbCBraXRzIGZvciBvZmZpY2UgbWFjaGluZXMjNDQuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjkuMDIuMDAjU3RvcmFnZSBhY2Nlc3NvcmllcyBmb3Igb2ZmaWNlIG1hY2hpbmVzIzQ0LjEwLjI5LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjI5LjAzLjAwI1RhcGUgY2xlYW5lcnMjNDQuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjkuMDQuMDAjQWlyIGNvbXByZXNzZWQgc3ByYXkjNDQuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjkuMDUuMDAjU21hbGwgcGFwZXIgYmFncyBvZiB3ZXQgYWJzb3JiaW5nIHNhbHRzIzQ0LjEwLjI5LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjI5LjA2LjAwI0NvbXB1dGVyIG9yIG9mZmljZSBlcXVpcG1lbnQgY2xlYW5pbmcga2l0IzQ0LjEwLjI5LjAwLjAwCi11bnNwc2M3IzQ0LjEwLjI5LjA3LjAwI0VxdWlwbWVudCBkdXN0IGNvdmVycyM0NC4xMC4yOS4wMC4wMAotdW5zcHNjNyM0NC4xMC4yOS4wOC4wMCNDb21wYWN0IGRpc2MgY2xlYW5lcnMgb3Igc2NyYXRjaCByZW1vdmVycyM0NC4xMC4yOS4wMC4wMAotdW5zcHNjNyM0NC4xMC4yOS4wOS4wMCNDb21wYWN0IGRpc2MgZHJpdmUgY2xlYW5lciM0NC4xMC4yOS4wMC4wMAotdW5zcHNjNyM0NC4xMC4yOS4xMC4wMCNMYW1pbmF0b3IgdHJheXMjNDQuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjkuMTEuMDAjQ2xlYW5pbmcgd2lwZXMgZm9yIG9mZmljZSBtYWNoaW5lcyM0NC4xMC4yOS4wMC4wMAotdW5zcHNjNyM0NC4xMC4yOS4xMi4wMCNDbGVhbmluZyBzb2x1dGlvbnMgZm9yIG9mZmljZSBlcXVpcG1lbnQjNDQuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMjkuMTMuMDAjQ29tcGFjdCBkaXNjIGRlc3Ryb3llciM0NC4xMC4yOS4wMC4wMAotdW5zcHNjNyM0NC4xMC4zMC4wMC4wMCNGdXNlcnMgYW5kIGFjY2Vzc29yaWVzIzQ0LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjMwLjAxLjAwI0Z1c2VyIGNsZWFuaW5nIHBhZHMjNDQuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMzAuMDIuMDAjRnVzZXIgb2lsIzQ0LjEwLjMwLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjMwLjAzLjAwI0Z1c2VyIHdpcGVyIzQ0LjEwLjMwLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjMwLjA0LjAwI0Z1c2VycyM0NC4xMC4zMC4wMC4wMAotdW5zcHNjNyM0NC4xMC4zMS4wMC4wMCNQcmludGVyIGFuZCBmYWNzaW1pbGUgYW5kIHBob3RvY29waWVyIHN1cHBsaWVzIzQ0LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjMxLjAxLjAwI1ByaW50ZXIgb3IgZmFjc2ltaWxlIG9yIHBob3RvY29waWVyIGJlbHRzIzQ0LjEwLjMxLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjMxLjAyLjAwI1ByaW50ZXIgb3IgZmFjc2ltaWxlIG9yIHBob3RvY29waWVyIHJpYmJvbnMjNDQuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMzEuMDMuMDAjVG9uZXIjNDQuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMzEuMDQuMDAjVHJhbnNmZXIgcm9sbHMjNDQuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMzEuMDUuMDAjSW5rIGNhcnRyaWRnZXMjNDQuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMzEuMDYuMDAjSW5rIHN0aWNrcyM0NC4xMC4zMS4wMC4wMAotdW5zcHNjNyM0NC4xMC4zMS4wNy4wMCNQcmludGVyIG9yIGZhY3NpbWlsZSBvciBwaG90b2NvcGllciBjbGVhbmluZyBzdXBwbGllcyM0NC4xMC4zMS4wMC4wMAotdW5zcHNjNyM0NC4xMC4zMS4wOC4wMCNEZXZlbG9wZXIgZm9yIHByaW50ZXJzIG9yIHBob3RvY29waWVycyM0NC4xMC4zMS4wMC4wMAotdW5zcHNjNyM0NC4xMC4zMS4wOS4wMCNQcmludGVyIG9yIGZhY3NpbWlsZSBvciBwaG90b2NvcGllciBkcnVtcyM0NC4xMC4zMS4wMC4wMAotdW5zcHNjNyM0NC4xMC4zMS4xMC4wMCNQcmludCBoZWFkcyM0NC4xMC4zMS4wMC4wMAotdW5zcHNjNyM0NC4xMC4zMS4xMS4wMCNJbmsgcm9sbHMjNDQuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMzEuMTIuMDAjUHJpbnRlciByaWJib24jNDQuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMzEuMTMuMDAjUGhhc2VycyBvciBpbmtqZXQga2l0cyM0NC4xMC4zMS4wMC4wMAotdW5zcHNjNyM0NC4xMC4zMS4xNC4wMCNMYXNlcmpldCBjb2F0aW5nIGtpdHMjNDQuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMzEuMTUuMDAjSW1hZ2luZyBmaWxtcyM0NC4xMC4zMS4wMC4wMAotdW5zcHNjNyM0NC4xMC4zMS4xNi4wMCNLaXQgZm9yIHByaW50ZXIjNDQuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMzEuMTcuMDAjRmFjc2ltaWxlIHJpYmJvbnMjNDQuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMzIuMDAuMDAjT2ZmaWNlIHRpbWUgcmVjb3JkaW5nIG1hY2hpbmVzIGFuZCBhY2Nlc3NvcmllcyM0NC4xMC4wMC4wMC4wMAotdW5zcHNjNyM0NC4xMC4zMi4wMS4wMCNUaW1lIGNhcmQgbWFjaGluZXMjNDQuMTAuMzIuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMzIuMDIuMDAjVGltZSBzdGFtcGluZyBtYWNoaW5lcyM0NC4xMC4zMi4wMC4wMAotdW5zcHNjNyM0NC4xMC4zMi4wMy4wMCNUaW1lIGNhcmQgbWFjaGluZSByZXBsYWNlbWVudCByaWJib24jNDQuMTAuMzIuMDAuMDAKLXVuc3BzYzcjNDQuMTAuMzIuMDQuMDAjVGltZSBjYXJkIHJhY2tzIzQ0LjEwLjMyLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjMyLjA1LjAwI1RpbWUgY2FyZHMgb3Igc2hlZXRzIzQ0LjEwLjMyLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjMzLjAwLjAwI1RpbWUgY2FyZCBtYWNoaW5lcyM0NC4xMC4wMC4wMC4wMAotdW5zcHNjNyM0NC4xMC4zNC4wMC4wMCNUaW1lIHN0YW1waW5nIG1hY2hpbmVzIzQ0LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjM1LjAwLjAwI0JpbmRpbmcgbWFjaGluZSBzdXBsaWVzIzQ0LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjEwLjM1LjAxLjAwI1dpcmUgYmluZGluZyBlbGVtZW50cyBvciBjb21icyM0NC4xMC4zNS4wMC4wMAotdW5zcHNjNyM0NC4xMC4zNS4wMi4wMCNCaW5kaW5nIGNvdmVycyM0NC4xMC4zNS4wMC4wMAotdW5zcHNjNyM0NC4xMS4wMC4wMC4wMCNPZmZpY2UgYW5kIGRlc2sgYWNjZXNzb3JpZXMjNDQuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTUuMDAuMDAjT3JnYW5pemVycyBhbmQgYWNjZXNzb3JpZXMjNDQuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTUuMDEuMDAjTWVzc2FnZSBob2xkZXJzIG9yIGRpc3BlbnNlcnMjNDQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTUuMDIuMDAjRGVzayBkcmF3ZXIgb3JnYW5pemVycyM0NC4xMS4xNS4wMC4wMAotdW5zcHNjNyM0NC4xMS4xNS4wMy4wMCNEZXNrdG9wIHRyYXlzIG9yIG9yZ2FuaXplcnMjNDQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTUuMDQuMDAjRGlza2V0dGUgaG9sZGVycyM0NC4xMS4xNS4wMC4wMAotdW5zcHNjNyM0NC4xMS4xNS4wNS4wMCNDb3B5IGhvbGRlcnMjNDQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTUuMDYuMDAjUGFwZXIgb3IgcGFkIGhvbGRlciM0NC4xMS4xNS4wMC4wMAotdW5zcHNjNyM0NC4xMS4xNS4wNy4wMCNCb29rIGVuZHMjNDQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTUuMDguMDAjU3RheSBwdXQgcGVuIG9yIGhvbGRlciM0NC4xMS4xNS4wMC4wMAotdW5zcHNjNyM0NC4xMS4xNS4wOS4wMCNQZW4gb3IgcGVuY2lsIGhvbGRlcnMjNDQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTUuMTAuMDAjSGFuZ2luZyBvcmdhbml6ZXJzIG9yIGFjY2Vzc29yaWVzIzQ0LjExLjE1LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE1LjExLjAwI0Rpc3BsYXkgcmFja3Mgb3IgYWNjZXNzb3JpZXMjNDQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTUuMTIuMDAjTGl0ZXJhdHVyZSByYWNrIzQ0LjExLjE1LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE1LjEzLjAwI1N1cHBvcnRzIGZvciBkaWFyaWVzIG9yIGNhbGVuZGFycyM0NC4xMS4xNS4wMC4wMAotdW5zcHNjNyM0NC4xMS4xNS4xNC4wMCNTdGFtcCByYWNrcyBvciBvcmdhbml6ZXJzIzQ0LjExLjE1LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE1LjE1LjAwI0ZpbGUgc3RvcmFnZSBib3hlcyBvciBvcmdhbml6ZXJzIzQ0LjExLjE1LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE2LjAwLjAwI0Nhc2ggaGFuZGxpbmcgc3VwcGxpZXMjNDQuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTYuMDEuMDAjQ3VycmVuY3kgYmFncyBvciB3YWxsZXRzIzQ0LjExLjE2LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE2LjAyLjAwI0NvdW50ZXJmZWl0IGJpbGwgZGV0ZWN0b3IgcGVucyM0NC4xMS4xNi4wMC4wMAotdW5zcHNjNyM0NC4xMS4xNi4wMy4wMCNDb2luIHNvcnRlcnMjNDQuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTYuMDQuMDAjQ29pbiB3cmFwcGVycyBvciBiaWxsIHN0cmFwcyM0NC4xMS4xNi4wMC4wMAotdW5zcHNjNyM0NC4xMS4xNi4wNS4wMCNDYXNoIG9yIHRpY2tldCBib3hlcyM0NC4xMS4xNi4wMC4wMAotdW5zcHNjNyM0NC4xMS4xNi4wNi4wMCNDYXNoIGJveCB0cmF5cyM0NC4xMS4xNi4wMC4wMAotdW5zcHNjNyM0NC4xMS4xNi4wNy4wMCNDaGVjayBmaWxlcyM0NC4xMS4xNi4wMC4wMAotdW5zcHNjNyM0NC4xMS4xNi4wOC4wMCNDb2luIGJhbmtzIzQ0LjExLjE2LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE2LjA5LjAwI0NvdW50ZXJmZWl0IGJpbGwgZGV0ZWN0b3JzIG9yIHN1cHBsaWVzIzQ0LjExLjE2LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE4LjAwLjAwI0RyYWZ0aW5nIHN1cHBsaWVzIzQ0LjExLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjExLjE4LjAxLjAwI1N0ZW5jaWxzIG9yIGxldHRlcmluZyBhaWRzIzQ0LjExLjE4LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE4LjAyLjAwI0RyYWZ0aW5nIGZpbG1zIzQ0LjExLjE4LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE4LjAzLjAwI0NvbXBhc3NlcyM0NC4xMS4xOC4wMC4wMAotdW5zcHNjNyM0NC4xMS4xOC4wNC4wMCNEcmFmdGluZyBwYXBlcnMjNDQuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTguMDUuMDAjQ3VydmVzIzQ0LjExLjE4LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE4LjA2LjAwI1Byb3RyYWN0b3JzIzQ0LjExLjE4LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE4LjA3LjAwI1NjYWxlcyM0NC4xMS4xOC4wMC4wMAotdW5zcHNjNyM0NC4xMS4xOC4wOC4wMCNUIHNxdWFyZXMjNDQuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTguMDkuMDAjVGVtcGxhdGVzIzQ0LjExLjE4LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE4LjEwLjAwI1RyaWFuZ2xlcyM0NC4xMS4xOC4wMC4wMAotdW5zcHNjNyM0NC4xMS4xOC4xMS4wMCNDb2xvciBjaGFydHMjNDQuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTguMTIuMDAjRHJhZnRpbmcga2l0cyBvciBzZXRzIzQ0LjExLjE4LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE4LjEzLjAwI0RyYWZ0aW5nIGRvdHMgb3IgdGFwZXMjNDQuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTkuMDAuMDAjQm9hcmRzIzQ0LjExLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjExLjE5LjAxLjAwI1BsYW5uaW5nIGJvYXJkcyBvciBhY2Nlc3NvcmllcyM0NC4xMS4xOS4wMC4wMAotdW5zcHNjNyM0NC4xMS4xOS4wMi4wMCNFbGVjdHJvbmljIGNvcHlib2FyZHMgb3IgYWNjZXNzb3JpZXMjNDQuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTkuMDMuMDAjRWFzZWxzIG9yIGFjY2Vzc29yaWVzIzQ0LjExLjE5LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE5LjA0LjAwI0xldHRlciBib2FyZHMgb3IgYWNjZXNzb3JpZXMjNDQuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTkuMDUuMDAjRHJ5IGVyYXNlIGJvYXJkcyBvciBhY2Nlc3NvcmllcyM0NC4xMS4xOS4wMC4wMAotdW5zcHNjNyM0NC4xMS4xOS4wNi4wMCNDaGFsayBib2FyZHMgb3IgYWNjZXNzb3JpZXMjNDQuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMTkuMDcuMDAjQnVsbGV0aW4gYm9hcmRzIG9yIGFjY2Vzc29yaWVzIzQ0LjExLjE5LjAwLjAwCi11bnNwc2M3IzQ0LjExLjE5LjA4LjAwI01hZ25ldGljIGJvYXJkcyBvciBhY2Nlc3NvcmllcyM0NC4xMS4xOS4wMC4wMAotdW5zcHNjNyM0NC4xMS4xOS4wOS4wMCNCb2FyZCBjbGVhbmluZyBraXRzIG9yIGFjY2Vzc29yaWVzIzQ0LjExLjE5LjAwLjAwCi11bnNwc2M3IzQ0LjExLjIwLjAwLjAwI1BsYW5uaW5nIHN5c3RlbXMjNDQuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMjAuMDEuMDAjQWRkcmVzcyBib29rcyBvciByZWZpbGxzIzQ0LjExLjIwLjAwLjAwCi11bnNwc2M3IzQ0LjExLjIwLjAyLjAwI0NhbGVuZGFycyM0NC4xMS4yMC4wMC4wMAotdW5zcHNjNyM0NC4xMS4yMC4wNC4wMCNNZWV0aW5nIHBsYW5uZXJzIzQ0LjExLjIwLjAwLjAwCi11bnNwc2M3IzQ0LjExLjIwLjA1LjAwI0FwcG9pbnRtZW50IGJvb2tzIG9yIHJlZmlsbHMjNDQuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDQuMTEuMjAuMDYuMDAjRGlhcmllcyBvciByZWZpbGxzIzQ0LjExLjIwLjAwLjAwCi11bnNwc2M3IzQ0LjExLjIwLjA3LjAwI1N1Z2dlc3Rpb24gYm94IzQ0LjExLjIwLjAwLjAwCi11bnNwc2M3IzQ0LjExLjIwLjA4LjAwI1dhbGwgcGxhbm5lcnMgb3IgcmVmaWxscyM0NC4xMS4yMC4wMC4wMAotdW5zcHNjNyM0NC4xMi4wMC4wMC4wMCNPZmZpY2Ugc3VwcGxpZXMjNDQuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTUuMDAuMDAjTWFpbGluZyBzdXBwbGllcyM0NC4xMi4wMC4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNS4wMS4wMCNNYWlsZXIgdHViZXMjNDQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTUuMDMuMDAjTWFpbGVycyM0NC4xMi4xNS4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNS4wNC4wMCNXaW5kb3cgZW52ZWxvcGVzIzQ0LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE1LjA1LjAwI1NwZWNpYWx0eSBlbnZlbG9wZXMjNDQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTUuMDYuMDAjU3RhbmRhcmQgZW52ZWxvcGVzIzQ0LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE1LjA3LjAwI0NhdGFsb2cgb3IgY2xhc3AgZW52ZWxvcGVzIzQ0LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE1LjA4LjAwI01lc3NhZ2UgZHJvcHBlcnMjNDQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTUuMDkuMDAjTWFpbGluZyBiYWdzIzQ0LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE1LjEwLjAwI01haWxpbmcgc2VhbHMjNDQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTUuMTEuMDAjTWFpbGluZyBib3hlcyM0NC4xMi4xNS4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNi4wMC4wMCNEZXNrIHN1cHBsaWVzIzQ0LjEyLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE2LjA0LjAwI1N0YW1wcyM0NC4xMi4xNi4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNi4wNS4wMCNUYXBlIGRpc3BlbnNlcnMjNDQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTYuMDYuMDAjRmluZ2VyIHN0YWxscyM0NC4xMi4xNi4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNi4xMS4wMCNQYXBlciBvciBleWVsZXQgcHVuY2hlcyM0NC4xMi4xNi4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNi4xMi4wMCNQYXBlciBjdXR0ZXJzIG9yIHJlZmlsbHMjNDQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTYuMTMuMDAjU3RhcGxlIHJlbW92ZXJzIzQ0LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE2LjE0LjAwI0NhbGwgYmVsbHMjNDQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTYuMTUuMDAjU3RhcGxlcnMjNDQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTYuMTcuMDAjTWFudWFsIGxldHRlciBvcGVuZXJzIzQ0LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE2LjE4LjAwI1NjaXNzb3JzIzQ0LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE2LjE5LjAwI1BlbmNpbCBzaGFycGVuZXJzIzQ0LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE2LjIwLjAwI0ZpbmdlciBzdGFsbHMjNDQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTYuMjEuMDAjRGVzayBwYWRzIzQ0LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE2LjIyLjAwI01vaXN0ZW5lcnMjNDQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTYuMjMuMDAjTWVjaGFuaWNhbCBsZXR0ZXIgb3BlbmVyIzQ0LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE2LjI0LjAwI0VtYm9zc2luZyB0b29scyM0NC4xMi4xNi4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNi4yNS4wMCNQYXBlciB3ZWlnaHRzIzQ0LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE2LjI2LjAwI0FkaGVzaXZlIHJlbW92ZXIjNDQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTYuMjcuMDAjQm9va21hcmtzIzQ0LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE2LjI4LjAwI0NsaXAgaG9sZGVycyBvciBkaXNwZW5zZXJzIzQ0LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE2LjI5LjAwI1BhcGVyIGNsaXAgZGlzcGVuc2VyIG9yIGhvbGRlciM0NC4xMi4xNi4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNi4zMC4wMCNTdGFwbGVyIGtpdCM0NC4xMi4xNi4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNi4zMS4wMCNHbHVlIGRpc3BlbnNlcnMgb3IgcmVmaWxscyM0NC4xMi4xNi4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNy4wMC4wMCNXcml0aW5nIGluc3RydW1lbnRzIzQ0LjEyLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE3LjAxLjAwI1JvbGxlcmJhbGwgcGVucyM0NC4xMi4xNy4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNy4wMi4wMCNQZW4gb3IgcGVuY2lsIHNldHMjNDQuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTcuMDMuMDAjRm91bnRhaW4gcGVucyM0NC4xMi4xNy4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNy4wNC4wMCNCYWxsIHBvaW50IHBlbnMjNDQuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTcuMDUuMDAjTWVjaGFuaWNhbCBwZW5jaWxzIzQ0LjEyLjE3LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE3LjA2LjAwI1dvb2RlbiBwZW5jaWxzIzQ0LjEyLjE3LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE3LjA3LjAwI0NvbG9yZWQgcGVuY2lscyM0NC4xMi4xNy4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNy4wOC4wMCNNYXJrZXJzIzQ0LjEyLjE3LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE3LjA5LjAwI0NyYXlvbnMjNDQuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTcuMTAuMDAjV3JpdGluZyBjaGFsayBvciBhY2Nlc3NvcmllcyM0NC4xMi4xNy4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNy4xMS4wMCNGZWx0IHBlbiM0NC4xMi4xNy4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNy4xMi4wMCNNYXJrZXIgcmVmaWxscyM0NC4xMi4xNy4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNy4xMy4wMCNQZW4gbmlicyM0NC4xMi4xNy4wMC4wMAotdW5zcHNjNyM0NC4xMi4xNy4xNC4wMCNQZW5jaWwgb3IgcGVuIGdyaXBzIzQ0LjEyLjE3LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE3LjE1LjAwI0NvbWJpbmF0aW9uIHBlbiBvciBwZW5jaWwjNDQuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTguMDAuMDAjQ29ycmVjdGlvbiBtZWRpYSM0NC4xMi4wMC4wMC4wMAotdW5zcHNjNyM0NC4xMi4xOC4wMS4wMCNDb3JyZWN0aW9uIGZpbG0gb3IgdGFwZSM0NC4xMi4xOC4wMC4wMAotdW5zcHNjNyM0NC4xMi4xOC4wMi4wMCNDb3JyZWN0aW9uIGZsdWlkIzQ0LjEyLjE4LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE4LjA0LjAwI0VyYXNlcnMjNDQuMTIuMTguMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTguMDUuMDAjQ29ycmVjdGlvbiBwZW5zIzQ0LjEyLjE4LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE4LjA2LjAwI0NvcnJlY3Rpb24gcGVuIHJlZmlsbHMjNDQuMTIuMTguMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTguMDcuMDAjRXJhc2VyIHJlZmlsbHMjNDQuMTIuMTguMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTkuMDAuMDAjSW5rIGFuZCBsZWFkIHJlZmlsbHMjNDQuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMTkuMDEuMDAjSW5kaWEgaW5rIzQ0LjEyLjE5LjAwLjAwCi11bnNwc2M3IzQ0LjEyLjE5LjAyLjAwI0xlYWQgcmVmaWxscyM0NC4xMi4xOS4wMC4wMAotdW5zcHNjNyM0NC4xMi4xOS4wMy4wMCNQZW4gcmVmaWxscyM0NC4xMi4xOS4wMC4wMAotdW5zcHNjNyM0NC4xMi4xOS4wNC4wMCNJbmsgcmVmaWxscyM0NC4xMi4xOS4wMC4wMAotdW5zcHNjNyM0NC4xMi4xOS4wNS4wMCNJbmsgb3Igc3RhbXAgcGFkcyM0NC4xMi4xOS4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMC4wMC4wMCNGb2xkZXJzIGFuZCBiaW5kZXJzIGFuZCBpbmRleGVzIzQ0LjEyLjAwLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIwLjAxLjAwI0luZGV4IGNhcmQgZmlsZXMjNDQuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMjAuMDIuMDAjU2hlZXQgcHJvdGVjdG9ycyM0NC4xMi4yMC4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMC4wMy4wMCNCaW5kZXJzIzQ0LjEyLjIwLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIwLjA0LjAwI0RhdGEgYmluZGVycyM0NC4xMi4yMC4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMC4wNS4wMCNNYWdhemluZSBvciBib29rIGNvdmVycyM0NC4xMi4yMC4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMC4wNi4wMCNIYW5naW5nIGZpbGUgZm9sZGVycyM0NC4xMi4yMC4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMC4wNy4wMCNQcmVzZW50YXRpb24gYmluZGVycyM0NC4xMi4yMC4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMC4wOC4wMCNUYWIgaW5kZXhlcyM0NC4xMi4yMC4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMC4wOS4wMCNSb3Rhcnkgb3IgYnVzaW5lc3MgY2FyZCBmaWxlcyM0NC4xMi4yMC4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMC4xMC4wMCNEaXZpZGVycyM0NC4xMi4yMC4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMC4xMS4wMCNGb2xkZXJzIzQ0LjEyLjIwLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIwLjEyLjAwI0NsaXBib2FyZHMjNDQuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMjAuMTMuMDAjUmVwb3J0IGNvdmVycyM0NC4xMi4yMC4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMC4xNC4wMCNTaGVldCBsaWZ0ZXJzIzQ0LjEyLjIwLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIwLjE1LjAwI0ZpbGUgYmFja2VycyM0NC4xMi4yMC4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMC4xNi4wMCNEb2N1bWVudCBob2xkZXIjNDQuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMjAuMTcuMDAjSGFuZ2luZyBmb2xkZXJzIG9yIGFjY2Vzc29yaWVzIzQ0LjEyLjIwLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIwLjE4LjAwI0ZpbGUgaW5zZXJ0cyBvciB0YWJzIzQ0LjEyLjIwLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIwLjE5LjAwI0ZpbGUgcG9ja2V0cyBvciBhY2Nlc3NvcmllcyM0NC4xMi4yMC4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMC4yMC4wMCNDYXJkIHBvY2tldHMjNDQuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMjAuMjEuMDAjUG9zdGFnZSBzdGFtcCBhbGJ1bXMjNDQuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMjAuMjIuMDAjQmluZGluZyBiYXJzIzQ0LjEyLjIwLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIxLjAwLjAwI0Zhc3RlbmluZyBzdXBwbGllcyM0NC4xMi4wMC4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMS4wMS4wMCNSdWJiZXIgYmFuZHMjNDQuMTIuMjEuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMjEuMDIuMDAjUHJvbmdzIzQ0LjEyLjIxLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIxLjAzLjAwI0NsYXNwIGZhc3RlbmVycyM0NC4xMi4yMS4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMS4wNC4wMCNQYXBlciBjbGlwcyM0NC4xMi4yMS4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMS4wNS4wMCNCaW5kZXIgb3IgYnVsbGRvZyBjbGlwcyM0NC4xMi4yMS4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMS4wNi4wMCNQaW5zIG9yIHRhY2tzIzQ0LjEyLjIxLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIxLjA3LjAwI1N0YXBsZXMjNDQuMTIuMjEuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMjEuMDguMDAjRmlsaW5nIHBvY2tldHMjNDQuMTIuMjEuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMjEuMDkuMDAjVmVsY3JvIGZhc3RlbmVycyM0NC4xMi4yMS4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMS4xMC4wMCNBZGhlc2l2ZSBtb3VudHMjNDQuMTIuMjEuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMjEuMTEuMDAjSG9sZSByZWluZm9yY2VtZW50cyM0NC4xMi4yMS4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMS4xMi4wMCNSb3VuZCBoZWFkIGZhc3RlbmVycyM0NC4xMi4yMS4wMC4wMAotdW5zcHNjNyM0NC4xMi4yMS4xMy4wMCNUYWcgZmFzdGVuZXJzIzQ0LjEyLjIxLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIxLjE0LjAwI1NjcmV3IHBvc3RzIzQ0LjEyLjIxLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIxLjE1LjAwI0FkaGVzaXZlIGNvcm5lcnMjNDQuMTIuMjEuMDAuMDAKLXVuc3BzYzcjNDQuMTIuMjEuMTYuMDAjQmFnIGNsaXBzIzQ0LjEyLjIxLjAwLjAwCi11bnNwc2M3IzQ0LjEyLjIxLjE3LjAwI0Jvb2sgcmluZ3MjNDQuMTIuMjEuMDAuMDAKLXVuc3BzYzcjNDUuMDAuMDAuMDAuMDAjUHJpbnRpbmcgYW5kIFBob3RvZ3JhcGhpYyBhbmQgQXVkaW8gYW5kIFZpc3VhbCBFcXVpcG1lbnQgYW5kIFN1cHBsaWVzIzQ1LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ1LjEwLjAwLjAwLjAwI1ByaW50aW5nIGFuZCBwdWJsaXNoaW5nIGVxdWlwbWVudCM0NS4wMC4wMC4wMC4wMAotdW5zcHNjNyM0NS4xMC4xNS4wMC4wMCNQcmludGluZyBtYWNoaW5lcnkgYW5kIGVxdWlwbWVudCM0NS4xMC4wMC4wMC4wMAotdW5zcHNjNyM0NS4xMC4xNS4wMS4wMCNIZWxpb2dyYXBoaWMgcHJpbnRlcnMjNDUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTUuMDIuMDAjT2Zmc2V0IHByaW50aW5nIHByZXNzZXMjNDUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTUuMDMuMDAjTGV0dGVycHJlc3MgZXF1aXBtZW50IzQ1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE1LjA0LjAwI0xpdGhvZ3JhcGhpYyBlcXVpcG1lbnQjNDUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTUuMDUuMDAjUGhvdG9ncmF2dXJlIHByaW50aW5nIG1hY2hpbmVzIzQ1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE1LjA2LjAwI1NpbGsgc2NyZWVuIHByaW50aW5nIG1hY2hpbmVzIzQ1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE1LjA3LjAwI1ByaW50aW5nIHByZXNzZXMjNDUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTUuMDguMDAjUGVyZm9yYXRpbmcgbWFjaGluZXMjNDUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTUuMDkuMDAjVWx0cmF2aW9sZXQgKFVWKSByb3RhcnkgcHJpbnRlciM0NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMC4xNS4xMC4wMCNGbGV4b2dyYXBoaWMgcHJpbnRlciM0NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMC4xNS4xMS4wMCNJbmtqZXQgcHJpbnRlciBmb3IgY29tbWVyY2lhbCBwcmludGluZyBhcHBsaWNhdGlvbnMjNDUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTUuMTIuMDAjVGhlcm1hbCB0cmFuc2ZlciBwcmludGVyIGZvciBjb21tZXJjaWFsIHByaW50aW5nIGFwcGxpY2F0aW9ucyM0NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMC4xNS4xMy4wMCNIb3Qgc3RhbXAgcHJpbnRlciM0NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMC4xNS4xNC4wMCNQYWQgcHJpbnRlciM0NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMC4xNS4xNS4wMCNDb3JlIHByaW50ZXIjNDUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTYuMDAuMDAjUHJpbnRpbmcgbWFjaGluZXJ5IGFjY2Vzc29yaWVzIzQ1LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE2LjAyLjAwI09mZnNldCBkYXJrcm9vbSBlcXVpcG1lbnQjNDUuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTYuMDMuMDAjT2Zmc2V0IHByaW50aW5nIGNvbnN1bWFibGVzIzQ1LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE2LjA0LjAwI09mZnNldCBwcmludGluZyBwbGF0ZSBwcm9jZXNzb3JzIzQ1LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE2LjA1LjAwI09mZnNldCBwbGF0ZXMjNDUuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTYuMDYuMDAjT2Zmc2V0IGZpbG0gcHJvY2Vzc29ycyM0NS4xMC4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMC4xNi4wNy4wMCNTaWxrIHNjcmVlbiBhcmMgbGFtcHMjNDUuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTYuMDguMDAjU2lsayBzY3JlZW4gc2NyZWVucyM0NS4xMC4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMC4xNi4wOS4wMCNTaWxrIHNjcmVlbiBwcmludGluZyByYWNrcyM0NS4xMC4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMC4xNi4xMC4wMCNTaWxrIHNjcmVlbiB2YWN1dW0gcHJpbnRpbmcgZnJhbWVzIzQ1LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE2LjExLjAwI1NpbGsgc2NyZWVuIHNxdWVlZ2VlcyM0NS4xMC4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMC4xNy4wMC4wMCNQcmludGluZyBhY2Nlc3NvcmllcyM0NS4xMC4wMC4wMC4wMAotdW5zcHNjNyM0NS4xMC4xNy4wMS4wMCNQcmludGluZyBhc3NlbWJsZXJzIzQ1LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE3LjAyLjAwI1ByaW50aW5nIGd1aWxsb3RpbmVzIzQ1LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE3LjAzLjAwI1ByaW50aW5nIGNvbGxhdG9ycyBvciBkZWNvbGxhdG9ycyM0NS4xMC4xNy4wMC4wMAotdW5zcHNjNyM0NS4xMC4xNy4wNC4wMCNQcmludGluZyBjdXR0ZXJzIzQ1LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE3LjA1LjAwI1ByaW50aW5nIHRyaW1tZXJzIzQ1LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE3LjA2LjAwI1ByaW50aW5nIHB1bmNoZXMjNDUuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTcuMDcuMDAjUHJpbnRpbmcgcGxhdGVzIzQ1LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE3LjA4LjAwI1ByaW50aW5nIGF3bHMjNDUuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTguMDAuMDAjQm9vayBiaW5kaW5nIGFuZCBzZXdpbmcgbWFjaGluZXJ5IzQ1LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE4LjAxLjAwI0Jvb2sgY3JlYXNpbmcgbWFjaGluZXMjNDUuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTguMDIuMDAjQm9vayBjdXR0aW5nIG1hY2hpbmVzIzQ1LjEwLjE4LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE4LjAzLjAwI0Jvb2sgcHVuY2hpbmcgbWFjaGluZXMjNDUuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTguMDQuMDAjQm9vayBzdGl0Y2hpbmcgbWFjaGluZXMjNDUuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTguMDUuMDAjQm9vayBqb2dnaW5nIG1hY2hpbmVzIzQ1LjEwLjE4LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE4LjA2LjAwI0Jvb2sgZ2F0aGVyaW5nIG1hY2hpbmVzIzQ1LjEwLjE4LjAwLjAwCi11bnNwc2M3IzQ1LjEwLjE4LjA3LjAwI0Jvb2sgZm9sZGluZyBtYWNoaW5lcyM0NS4xMC4xOC4wMC4wMAotdW5zcHNjNyM0NS4xMC4xOS4wMC4wMCNQcmludGluZyBsYWJvcmF0b3J5IGVxdWlwbWVudCBhbmQgYWNjZXNzb3JpZXMjNDUuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTkuMDEuMDAjQmFuZGluZyBtYWNoaW5lcyM0NS4xMC4xOS4wMC4wMAotdW5zcHNjNyM0NS4xMC4xOS4wMi4wMCNQbGF0ZW1ha2VycyM0NS4xMC4xOS4wMC4wMAotdW5zcHNjNyM0NS4xMC4xOS4wMy4wMCNQYXBlciBkcmlsbGluZyBtYWNoaW5lcyM0NS4xMC4xOS4wMC4wMAotdW5zcHNjNyM0NS4xMC4xOS4wNC4wMCNFbmxhcmdlcnMjNDUuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMTkuMDUuMDAjRHJhd2luZyBvciByZXRvdWNoaW5nIGJvYXJkcyM0NS4xMC4xOS4wMC4wMAotdW5zcHNjNyM0NS4xMC4yMC4wMC4wMCNDb21wb3NpbmcgbWFjaGluZXMgYW5kIGFjY2Vzc29yaWVzIzQ1LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ1LjEwLjIwLjAxLjAwI0ludGVydHlwZSBjb21wb3NpbmcgbWFjaGluZXMjNDUuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDUuMTAuMjAuMDIuMDAjTGlub3R5cGUgY29tcG9zaW5nIG1hY2hpbmVzIzQ1LjEwLjIwLjAwLjAwCi11bnNwc2M3IzQ1LjEwLjIwLjAzLjAwI1Bob3RvY29tcG9zaXRpb24gbWF0ZXJpYWxzIzQ1LjEwLjIwLjAwLjAwCi11bnNwc2M3IzQ1LjEwLjIwLjA0LjAwI01vbm90eXBlIGNvbXBvc2luZyBtYWNoaW5lcyM0NS4xMC4yMC4wMC4wMAotdW5zcHNjNyM0NS4xMC4yMC4wNS4wMCNQaG90b3R5cGVzZXR0aW5nIG1hY2hpbmVzIzQ1LjEwLjIwLjAwLjAwCi11bnNwc2M3IzQ1LjExLjAwLjAwLjAwI0F1ZGlvIGFuZCB2aXN1YWwgcHJlc2VudGF0aW9uIGVxdWlwbWVudCM0NS4wMC4wMC4wMC4wMAotdW5zcHNjNyM0NS4xMS4xNS4wMC4wMCNMZWN0ZXJucyBhbmQgc291bmQgc3lzdGVtcyBhbmQgYWNjZXNzb3JpZXMjNDUuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDUuMTEuMTUuMDEuMDAjRnJlZSBzdGFuZGluZyBsZWN0ZXJucyM0NS4xMS4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMS4xNS4wMi4wMCNUYWJsZSB0b3AgbGVjdGVybnMjNDUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTEuMTYuMDAuMDAjUHJvamVjdG9ycyBhbmQgc3VwcGxpZXMjNDUuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDUuMTEuMTYuMDEuMDAjUG9pbnRlcnMjNDUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTEuMTYuMDIuMDAjUHJvamVjdGlvbiBidWxicyM0NS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMS4xNi4wMy4wMCNQcm9qZWN0aW9uIHNjcmVlbnMjNDUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTEuMTYuMDQuMDAjU2xpZGUgcHJvamVjdG9ycyM0NS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMS4xNi4wNS4wMCNUcmFuc3BhcmVuY3kgZXF1aXBtZW50IG9yIHN1cHBsaWVzIzQ1LjExLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjExLjE2LjA2LjAwI0xpcXVpZCBjcnlzdGFsIGRpc3BsYXkgcHJvamVjdGlvbiBwYW5lbHMjNDUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTEuMTYuMDcuMDAjT3ZlcmhlYWQgcHJvamVjdG9ycyM0NS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMS4xNi4wOC4wMCNGaWxtIHByb2plY3RvcnMjNDUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTEuMTYuMDkuMDAjQ29tcHV0ZXIgc2NyZWVuIHByb2plY3RvciM0NS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMS4xNi4xMC4wMCNFcGlkaWFzY29wZXMjNDUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTEuMTYuMTEuMDAjTWljcm9maWNoZSBvciBtaWNyb2ZpbG0gdmlld2VycyM0NS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMS4xNi4xMi4wMCNEaXNzb2x2ZSBjb250cm9scyM0NS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMS4xNi4xMy4wMCNDYXRob2RlIHJheSB0dWJlIGRhdGEjNDUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTEuMTYuMTQuMDAjTGlxdWlkIGNyeXN0YWwgZGlzcGxheSBkYXRhIG9yIHZpZGVvIHByb2plY3RvciM0NS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMS4xNi4xNS4wMCNQcm9qZWN0aW9uIGxlbnNlcyM0NS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMS4xNi4xNi4wMCNWaWRlbyBwcm9qZWN0b3JzIzQ1LjExLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjExLjE2LjE4LjAwI1ByZXNlbnRhdGlvbiBsaWdodCBib3hlcyM0NS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMS4xNy4wMC4wMCNBdWRpbyBwcmVzZW50YXRpb24gZXF1aXBtZW50IGFuZCBoYXJkd2FyZSBhbmQgY29udHJvbGxlcnMjNDUuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDUuMTEuMTcuMDEuMDAjQXNzaXN0aXZlIGxpc3RlbmluZyBkZXZpY2VzIzQ1LjExLjE3LjAwLjAwCi11bnNwc2M3IzQ1LjExLjE3LjAyLjAwI0F1ZGlvIGphY2sgYm94ZXMjNDUuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDUuMTEuMTcuMDMuMDAjTGlzdGVuaW5nIGNlbnRlcnMjNDUuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDUuMTEuMTguMDAuMDAjVmlkZW8gYW5kIGNvbWJpbmF0aW9uIHZpZGVvIGFuZCBhdWRpbyBwcmVzZW50YXRpb24gZXF1aXBtZW50IGFuZCBoYXJkd2FyZSBhbmQgY29udHJvbGxlcnMjNDUuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDUuMTEuMTguMDEuMDAjTWVkaWEgY29udHJvbCBzeXN0ZW1zIzQ1LjExLjE4LjAwLjAwCi11bnNwc2M3IzQ1LjExLjE4LjAyLjAwI1RlbGV2aXNpb24gbW91bnRzIzQ1LjExLjE4LjAwLjAwCi11bnNwc2M3IzQ1LjExLjE4LjAzLjAwI1NjYW4gY29udmVydGVycyM0NS4xMS4xOC4wMC4wMAotdW5zcHNjNyM0NS4xMS4xOC4wNC4wMCNMaW5lIGRvdWJsZXJzIzQ1LjExLjE4LjAwLjAwCi11bnNwc2M3IzQ1LjExLjE4LjA1LjAwI1ZpZGVvIGVkaXRvcnMjNDUuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDUuMTEuMTguMDYuMDAjRGlzdGFuY2UgbGVhcm5pbmcgc3lzdGVtcyM0NS4xMS4xOC4wMC4wMAotdW5zcHNjNyM0NS4xMS4xOC4wNy4wMCNJbnRlcmZhY2VzIzQ1LjExLjE4LjAwLjAwCi11bnNwc2M3IzQ1LjExLjE4LjA4LjAwI0xpZ2h0aW5nIGNvbnRyb2xzIzQ1LjExLjE4LjAwLjAwCi11bnNwc2M3IzQ1LjExLjE5LjAwLjAwI1Bob25lIGFuZCB2aWRlbyBjb25mZXJlbmNlIGVxdWlwbWVudCBhbmQgaGFyZHdhcmUgYW5kIGNvbnRyb2xsZXJzIzQ1LjExLjAwLjAwLjAwCi11bnNwc2M3IzQ1LjExLjE5LjAxLjAwI0F1ZGlvY29uZmVyZW5jaW5nIHN5c3RlbXMjNDUuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDUuMTEuMTkuMDIuMDAjVmlkZW9jb25mZXJlbmNpbmcgc3lzdGVtcyM0NS4xMS4xOS4wMC4wMAotdW5zcHNjNyM0NS4xMi4wMC4wMC4wMCNQaG90b2dyYXBoaWMgZXF1aXBtZW50IzQ1LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ1LjEyLjE1LjAwLjAwI0NhbWVyYXMjNDUuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTUuMDEuMDAjU3RpbGwgY2FtZXJhcyM0NS4xMi4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNS4wMi4wMCNJbnN0YW50IHByaW50IGNhbWVyYXMjNDUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTUuMDMuMDAjRGlzcG9zYWJsZSBjYW1lcmFzIzQ1LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ1LjEyLjE1LjA0LjAwI0RpZ2l0YWwgY2FtZXJhcyM0NS4xMi4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNS4wNS4wMCNDaW5lbWF0b2dyYXBoaWMgY2FtZXJhcyM0NS4xMi4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNS4wNi4wMCNWaWRlbyBjb25mZXJlbmNlIGNhbWVyYXMjNDUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTUuMDguMDAjTWljcm9maWxtIGNhbWVyYXMjNDUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTUuMTAuMDAjQWVyaWFsIGNhbWVyYXMjNDUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTUuMTEuMDAjSGlnaCBzcGVlZCBjYW1lcmFzIzQ1LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ1LjEyLjE1LjEyLjAwI1VuZGVyd2F0ZXIgY2FtZXJhcyM0NS4xMi4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNS4xMy4wMCNPZmZzZXQgY2FtZXJhcyM0NS4xMi4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNS4xNC4wMCNQaG90b2NvcGllciBjYW1lcmFzIzQ1LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ1LjEyLjE1LjE1LjAwI0hhbmQgaGVsZCBjYW1jb3JkZXJzIzQ1LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ1LjEyLjE1LjE2LjAwI0RpZ2l0YWwgY2FtY29yZGVyIzQ1LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ1LjEyLjE1LjE3LjAwI0RvY3VtZW50IGNhbWVyYSM0NS4xMi4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNS4xOC4wMCNDYW1lcmEga2l0cyM0NS4xMi4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNi4wMC4wMCNDYW1lcmEgYWNjZXNzb3JpZXMjNDUuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTYuMDEuMDAjQ2FtZXJhIGZsYXNoZXMgb3IgbGlnaHRpbmcjNDUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTYuMDIuMDAjQ2FtZXJhIHRyaXBvZHMjNDUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTYuMDMuMDAjQ2FtZXJhIGxlbnNlcyBvciBmaWx0ZXJzIzQ1LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjEyLjE2LjA0LjAwI0NhbWVyYSBzaHV0dGVycyM0NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNi4wNS4wMCNTY3JlZW4gZnJhbWVzIzQ1LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjEyLjE2LjA2LjAwI0NhbWVyYSBoYXJuZXNzZXMjNDUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTYuMDcuMDAjQ2FtZXJhIGJsb2NrcyBvciBob2xkZXJzIzQ1LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjEyLjE2LjA4LjAwI0NhbWVyYSBhc3NlbWJsaWVzIzQ1LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjEyLjE2LjA5LjAwI0NhbWVyYSBicmFja2V0cyM0NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNi4xMC4wMCNDYW1lcmEgY2FibGVzIzQ1LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjEyLjE2LjExLjAwI0xlbnMgY292ZXIjNDUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTYuMTIuMDAjQ2FtZXJhIHRhYmxlcyM0NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNi4xMy4wMCNDYW1lcmEgZW5jbG9zdXJlcyBvciBjb3ZlcnMjNDUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTYuMTQuMDAjUmV0cm9maXQga2l0cyM0NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNi4xNS4wMCNDYW1lcmEgcmluZ3MjNDUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTYuMTYuMDAjUGFuIGhlYWRzIzQ1LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ1LjEyLjE3LjAwLjAwI1Bob3RvZ3JhcGhpYyBwcm9jZXNzaW5nIGVxdWlwbWVudCM0NS4xMi4wMC4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNy4wMS4wMCNGaWxtIGRyaWVycyM0NS4xMi4xNy4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNy4wMi4wMCNGaWxtIHdhc2hlcnMjNDUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTcuMDMuMDAjRmlsbSBzcGxpY2VycyM0NS4xMi4xNy4wMC4wMAotdW5zcHNjNyM0NS4xMi4xNy4wNC4wMCNGaWxtIGVkaXRvcnMjNDUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNDUuMTIuMTcuMDUuMDAjUGhvdG9ncmFwaGljIGVubGFyZ2VycyM0NS4xMi4xNy4wMC4wMAotdW5zcHNjNyM0NS4xMy4wMC4wMC4wMCNQaG90b2dyYXBoaWMgYW5kIHJlY29yZGluZyBtZWRpYSM0NS4wMC4wMC4wMC4wMAotdW5zcHNjNyM0NS4xMy4xNS4wMC4wMCNTdGlsbCBwaWN0dXJlIGZpbG0jNDUuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNDUuMTMuMTUuMDEuMDAjQ29sb3IgZmlsbSM0NS4xMy4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMy4xNS4wMi4wMCNCbGFjayBhbmQgd2hpdGUgZmlsbSM0NS4xMy4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMy4xNS4wMy4wMCNJbnN0YW50IHBpY3R1cmUgZmlsbSM0NS4xMy4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMy4xNS4wNC4wMCNNaWNyb2ZpbG0jNDUuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTMuMTUuMDUuMDAjWCByYXkgZmlsbSM0NS4xMy4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMy4xNS4wNi4wMCNQaG90b2dyYXBoeSBwYXBlciM0NS4xMy4xNS4wMC4wMAotdW5zcHNjNyM0NS4xMy4xNi4wMC4wMCNNb3ZpbmcgcGljdHVyZSBtZWRpYSM0NS4xMy4wMC4wMC4wMAotdW5zcHNjNyM0NS4xMy4xNi4wMS4wMCNNb3Rpb24gcGljdHVyZSBjYW1lcmEgZmlsbSM0NS4xMy4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMy4xNi4wNC4wMCNCbGFuayB2aWRlbyB0YXBlcyM0NS4xMy4xNi4wMC4wMAotdW5zcHNjNyM0NS4xMy4xNy4wMC4wMCNNZWRpYSBzdG9yYWdlIzQ1LjEzLjAwLjAwLjAwCi11bnNwc2M3IzQ1LjEzLjE3LjAxLjAwI1NsaWRlIHRyYXlzIzQ1LjEzLjE3LjAwLjAwCi11bnNwc2M3IzQ1LjE0LjAwLjAwLjAwI1Bob3RvZ3JhcGhpYyBmaWxtbWFraW5nIHN1cHBsaWVzIzQ1LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ1LjE0LjE1LjAwLjAwI1Bob3RvZ3JhcGhpYyBwcm9jZXNzaW5nIGNoZW1pY2FscyM0NS4xNC4wMC4wMC4wMAotdW5zcHNjNyM0NS4xNC4xNS4wMS4wMCNEZXZlbG9wZXIgc29sdXRpb24jNDUuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTQuMTUuMDIuMDAjRml4YXRpdmUjNDUuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNDUuMTQuMTYuMDAuMDAjRGFya3Jvb20gc3VwcGxpZXMjNDUuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNDUuMTQuMTYuMDEuMDAjRGV2ZWxvcGluZyB0cmF5cyM0NS4xNC4xNi4wMC4wMAotdW5zcHNjNyM0NS4xNC4xNi4wMi4wMCNEZXZlbG9waW5nIHRhbmtzIzQ1LjE0LjE2LjAwLjAwCi11bnNwc2M3IzQ1LjE0LjE2LjAzLjAwI0RldmVsb3BpbmcgdG9uZ3MjNDUuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMDAuMDAuMDAuMDAjRGVmZW5zZSBhbmQgTGF3IEVuZm9yY2VtZW50IGFuZCBTZWN1cml0eSBhbmQgU2FmZXR5IEVxdWlwbWVudCBhbmQgU3VwcGxpZXMjNDYuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTAuMDAuMDAuMDAjTGlnaHQgd2VhcG9ucyBhbmQgYW1tdW5pdGlvbiM0Ni4wMC4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xMC4xNS4wMC4wMCNGaXJlYXJtcyM0Ni4xMC4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xMC4xNS4wMS4wMCNNYWNoaW5lIGd1bnMjNDYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTAuMTUuMDIuMDAjUG9saWNlIG9yIHNlY3VyaXR5IHNob3RndW5zIzQ2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ2LjEwLjE1LjAzLjAwI01pbGl0YXJ5IHJpZmxlcyM0Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xMC4xNS4wNC4wMCNIYW5kZ3VucyM0Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xMC4xNS4wNS4wMCNBaXIgcmlmbGVzIG9yIGFpciBoYW5kZ3VucyM0Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xMC4xNS4wNi4wMCNQYXJ0cyBvZiBndW5zIG9yIHBpc3RvbHMjNDYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTAuMTYuMDAuMDAjQW1tdW5pdGlvbiM0Ni4xMC4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xMC4xNi4wMS4wMCNEZWZlbnNlIG9yIGxhdyBlbmZvcmNlbWVudCBhbW11bml0aW9uIzQ2LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ2LjEwLjE3LjAwLjAwI0FtbXVuaXRpb24gaGFuZGxpbmcgc3lzdGVtcyM0Ni4xMC4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xMC4xNy4wMS4wMCNUYW5rIGFtbXVuaXRpb24gaGFuZGxpbmcgc3lzdGVtcyM0Ni4xMC4xNy4wMC4wMAotdW5zcHNjNyM0Ni4xMC4xNy4wMi4wMCNBaXJjcmFmdCBhbW11bml0aW9uIGhhbmRsaW5nIHN5c3RlbXMjNDYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDYuMTAuMTguMDAuMDAjQXJtcyBhbmQgYW1tdW5pdGlvbiBhY2Nlc3NvcmllcyM0Ni4xMC4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xMC4xOC4wMS4wMCNHdW4gY2FzZXMjNDYuMTAuMTguMDAuMDAKLXVuc3BzYzcjNDYuMTEuMDAuMDAuMDAjQ29udmVudGlvbmFsIHdhciB3ZWFwb25zIzQ2LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ2LjExLjE1LjAwLjAwI0JvbWJzIGFuZCBncmVuYWRlcyM0Ni4xMS4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xMS4xNS4wMS4wMCNHcmVuYWRlcyM0Ni4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xMS4xNS4wMi4wMCNNaW5lcyM0Ni4xMS4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xMS4xNS4wMy4wMCNNb3J0YXIgYm9tYnMjNDYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTEuMTYuMDAuMDAjR3VuIHN5c3RlbXMjNDYuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTEuMTYuMDEuMDAjQ2hhaW4gZ3VuIHN5c3RlbXMjNDYuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTEuMTYuMDIuMDAjR2F0bGluZyBndW4gc3lzdGVtcyM0Ni4xMS4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xMS4xNy4wMC4wMCNJbmZyYXJlZCAoSVIpIHNlbnNvcnMjNDYuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTEuMTcuMDEuMDAjSW5mcmFyZWQgKElSKSBjb29sZXJzIzQ2LjExLjE3LjAwLjAwCi11bnNwc2M3IzQ2LjExLjE3LjAyLjAwI0luZnJhcmVkIChJUikgZGV0ZWN0b3JzIzQ2LjExLjE3LjAwLjAwCi11bnNwc2M3IzQ2LjExLjE4LjAwLjAwI05hdmFsIHdlYXBvbnMjNDYuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTEuMTguMDEuMDAjVG9ycGVkb2VzIzQ2LjExLjE4LjAwLjAwCi11bnNwc2M3IzQ2LjEyLjAwLjAwLjAwI01pc3NpbGVzIzQ2LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ2LjEyLjE1LjAwLjAwI0d1aWRlZCBtaXNzaWxlcyM0Ni4xMi4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xMi4xNS4wMS4wMCNBaXIgdG8gYWlyIG1pc3NpbGVzIzQ2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ2LjEyLjE1LjAyLjAwI0FudGlhaXJjcmFmdCBtaXNzaWxlcyM0Ni4xMi4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xMi4xNS4wMy4wMCNBbnRpbWlzc2lsZSBtaXNzaWxlcyM0Ni4xMi4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xMi4xNS4wNC4wMCNBbnRpc2hpcCBtaXNzaWxlcyM0Ni4xMi4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xMi4xNS4wNS4wMCNBbnRpdGFuayBtaXNzaWxlcyM0Ni4xMi4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xMi4xNS4wNi4wMCNCYWxsaXN0aWMgbWlzc2lsZXMjNDYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTIuMTUuMDcuMDAjQ3J1aXNlIG1pc3NpbGVzIzQ2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ2LjEyLjE1LjA4LjAwI1N1cmZhY2UgdG8gYWlyIG1pc3NpbGVzIzQ2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ2LjEyLjE1LjA5LjAwI0FudGliYWxsaXN0aWMgbWlzc2lsZXMjNDYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTIuMTUuMTAuMDAjU3VyZmFjZSB0byBzdXJmYWNlIG1pc3NpbGVzIzQ2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ2LjEyLjE1LjExLjAwI0FpciB0byBzdXJmYWNlIG1pc3NpbGVzIzQ2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ2LjEyLjE1LjEyLjAwI1RyYWluaW5nIG1pc3NpbGVzIzQ2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ2LjEyLjE2LjAwLjAwI01pc3NpbGUgc3Vic3lzdGVtcyM0Ni4xMi4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xMi4xNi4wMS4wMCNFbGVjdHJvbmljIHNhZmUgb3IgYXJtIGRldmljZXMjNDYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTIuMTYuMDIuMDAjU29saWQgbWlzc2lsZSBib29zdGVycyM0Ni4xMi4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xMi4xNi4wMy4wMCNNaXNzaWxlIHdhcmhlYWRzIzQ2LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ2LjEyLjE2LjA0LjAwI1NhZmV0eSBwaW4gcHVsbGVycyM0Ni4xMi4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xMi4xNi4wNS4wMCNKZXQgcmVhY3Rpb24gY29udHJvbCBhc3NlbWJsaWVzIzQ2LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ2LjEzLjAwLjAwLjAwI1JvY2tldHMgYW5kIHN1YnN5c3RlbXMjNDYuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTMuMTUuMDAuMDAjTGF1bmNoIHZlaGljbGVzIGFuZCByb2NrZXRzIzQ2LjEzLjAwLjAwLjAwCi11bnNwc2M3IzQ2LjEzLjE1LjAxLjAwI011bHRpIHN0YWdlIHJvY2tldHMjNDYuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTMuMTUuMDIuMDAjUmV1c2FibGUgcm9ja2V0cyM0Ni4xMy4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xMy4xNS4wMy4wMCNTaW5nbGUgc3RhZ2Ugcm9ja2V0cyM0Ni4xMy4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xMy4xNS4wNC4wMCNMaXF1aWQgcm9ja2V0cyM0Ni4xMy4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xMy4xNS4wNS4wMCNTb2xpZCByb2NrZXRzIzQ2LjEzLjE1LjAwLjAwCi11bnNwc2M3IzQ2LjEzLjE2LjAwLjAwI0Jvb3N0ZXJzIzQ2LjEzLjAwLjAwLjAwCi11bnNwc2M3IzQ2LjEzLjE2LjAxLjAwI1JldXNhYmxlIGJvb3N0ZXJzIzQ2LjEzLjE2LjAwLjAwCi11bnNwc2M3IzQ2LjEzLjE2LjAyLjAwI1NvbGlkIGJvb3N0ZXJzIzQ2LjEzLjE2LjAwLjAwCi11bnNwc2M3IzQ2LjEzLjE2LjAzLjAwI011bHRpIHN0YWdlIGJvb3N0ZXJzIzQ2LjEzLjE2LjAwLjAwCi11bnNwc2M3IzQ2LjEzLjE2LjA0LjAwI0xpcXVpZCBib29zdGVycyM0Ni4xMy4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xNC4wMC4wMC4wMCNMYXVuY2hlcnMjNDYuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTQuMTUuMDAuMDAjTWlzc2lsZSBhbmQgcm9ja2V0IGxhdW5jaGVycyM0Ni4xNC4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xNC4xNS4wMS4wMCNNaXNzaWxlIGxhdW5jaGVycyM0Ni4xNC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xNC4xNS4wMi4wMCNSb2NrZXQgbGF1bmNoZXJzIzQ2LjE0LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE1LjAwLjAwLjAwI0xhdyBlbmZvcmNlbWVudCM0Ni4wMC4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xNS4xNS4wMC4wMCNDcm93ZCBjb250cm9sIGVxdWlwbWVudCM0Ni4xNS4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xNS4xNS4wMS4wMCNCYXJyaWNhZGVzIzQ2LjE1LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE1LjE1LjAyLjAwI1Jpb3QgaGVsbWV0cyM0Ni4xNS4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xNS4xNS4wMy4wMCNSaW90IHNoaWVsZHMjNDYuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTUuMTUuMDQuMDAjQm9keSBhcm1vdXIjNDYuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTUuMTUuMDUuMDAjQmFycmllcnMjNDYuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTUuMTYuMDAuMDAjU2VjdXJpdHkgYW5kIGNvbnRyb2wgZXF1aXBtZW50IzQ2LjE1LjAwLjAwLjAwCi11bnNwc2M3IzQ2LjE1LjE2LjAxLjAwI0hhbmRjdWZmcyM0Ni4xNS4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xNS4xNi4wMi4wMCNOaWdodCBzdGlja3MjNDYuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTUuMTYuMDMuMDAjRmluZ2VycHJpbnQgZXF1aXBtZW50IzQ2LjE1LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE1LjE2LjA0LjAwI0FsY29ob2wgYW5hbHlzZXJzIzQ2LjE1LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE1LjE2LjA1LjAwI1dlYXBvbnMgb3IgZXhwbG9zaXZlcyBkZXRlY3RvcnMjNDYuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTUuMTYuMDYuMDAjTmFyY290aWMgdGVzdCBraXRzIzQ2LjE1LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE2LjAwLjAwLjAwI1B1YmxpYyBzYWZldHkgYW5kIGNvbnRyb2wjNDYuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTYuMTUuMDAuMDAjVHJhZmZpYyBjb250cm9sIzQ2LjE2LjAwLjAwLjAwCi11bnNwc2M3IzQ2LjE2LjE1LjAxLjAwI0FpcnBvcnQgc2lnbmFsaW5nIHN5c3RlbXMjNDYuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTYuMTUuMDIuMDAjUmFpbHdheSBzaWduYWxpbmcgc3lzdGVtcyM0Ni4xNi4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xNi4xNS4wMy4wMCNNYXJpbmUgc2lnbmFsaW5nIHN5c3RlbXMjNDYuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTYuMTUuMDQuMDAjVHJhZmZpYyBzaWduYWxzIzQ2LjE2LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE2LjE1LjA1LjAwI1BhcmtpbmcgbWV0ZXJzIzQ2LjE2LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE2LjE1LjA2LjAwI1Nub3cgb3IgaWNlIG1lbHRlciM0Ni4xNi4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xNi4xNS4wNy4wMCNCYXJyaWVyIHRhcGUjNDYuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTYuMTUuMDguMDAjVHJhZmZpYyBvciBmbG9vciBjb25lcyM0Ni4xNi4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xNi4xNS4wOS4wMCNTcGVlZCBzdG9wcGVycyM0Ni4xNi4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xNi4xNi4wMC4wMCNXYXRlciBzYWZldHkjNDYuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTYuMTYuMDEuMDAjUm9wZSBmbG9hdCBsaW5lcyM0Ni4xNi4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xNi4xNi4wMi4wMCNMaWZlIHJpbmdzIzQ2LjE2LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE2LjE2LjAzLjAwI1Bvb2wgYWxhcm1zIzQ2LjE2LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE2LjE2LjA0LjAwI0xpZmUgdmVzdHMgb3IgcHJlc2VydmVycyM0Ni4xNi4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xNy4wMC4wMC4wMCNTZWN1cml0eSBzdXJ2ZWlsbGFuY2UgYW5kIGRldGVjdGlvbiM0Ni4wMC4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xNy4xNS4wMC4wMCNMb2NrcyBhbmQgc2VjdXJpdHkgaGFyZHdhcmUjNDYuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTcuMTUuMDEuMDAjUGFkbG9ja3MjNDYuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTcuMTUuMDIuMDAjQ2FibGUgbG9ja3MjNDYuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTcuMTUuMDMuMDAjTG9jayBzZXRzIzQ2LjE3LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE3LjE1LjA0LjAwI1B1c2hidXR0b24gbG9ja3MjNDYuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTcuMTUuMDUuMDAjS2V5cyBvciBhY2Nlc3NvcmllcyM0Ni4xNy4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xNy4xNS4wNi4wMCNTYWZlcyM0Ni4xNy4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xNy4xNS4wNy4wMCNTZWN1cml0eSBiYXJzIzQ2LjE3LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE3LjE1LjA4LjAwI051bWJlciBsb2NrcyM0Ni4xNy4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xNy4xNS4wOS4wMCNLZXkgY2FiaW5ldHMjNDYuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTcuMTUuMTAuMDAjVGltZSBsb2NrcyM0Ni4xNy4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xNy4xNS4xMS4wMCNMb2Nrb3V0IGRldmljZXMjNDYuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTcuMTUuMTIuMDAjSW5zdHJ1bWVudCBsb2NrcyM0Ni4xNy4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xNy4xNS4xMy4wMCNMb2NraW5nIGNhbSM0Ni4xNy4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xNy4xNS4xNC4wMCNTZWN1cml0eSBjaGFpbnMgb3IgYWNjZXNzb3JpZXMjNDYuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTcuMTYuMDAuMDAjU3VydmVpbGxhbmNlIGFuZCBkZXRlY3Rpb24gZXF1aXBtZW50IzQ2LjE3LjAwLjAwLjAwCi11bnNwc2M3IzQ2LjE3LjE2LjAyLjAwI1NhZmV0eSBob3JucyM0Ni4xNy4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xNy4xNi4wMy4wMCNDbG9jayB0aW1lcnMjNDYuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTcuMTYuMDQuMDAjQWxhcm0gc3lzdGVtcyM0Ni4xNy4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xNy4xNi4wNS4wMCNEb29yIGNoaW1lcyM0Ni4xNy4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xNy4xNi4wNi4wMCNTaXJlbnMjNDYuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTcuMTYuMDcuMDAjQnV6emVycyM0Ni4xNy4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xNy4xNi4wOC4wMCNNb3Rpb24gZGV0ZWN0b3JzIzQ2LjE3LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE3LjE2LjA5LjAwI0NvbnZleCBzZWN1cml0eSBtaXJyb3JzIzQ2LjE3LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE3LjE2LjEwLjAwI1NlY3VyaXR5IGNhbWVyYXMjNDYuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTcuMTYuMTEuMDAjVmlkZW8gaWRlbnRpZmljYXRpb24gc3lzdGVtcyM0Ni4xNy4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xNy4xNi4xMi4wMCNWaWRlbyBtb25pdG9ycyM0Ni4xNy4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xNy4xNi4xMy4wMCNHYXMgZGV0ZWN0b3JzIzQ2LjE3LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE3LjE2LjE0LjAwI1N1cnZlaWxsYW5jZSBjYW1lcmFzIzQ2LjE3LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE3LjE2LjE1LjAwI0xpZ2h0IGVuaGFuY2luZyBjYW1lcmFzIG9yIHZpc2lvbiBkZXZpY2VzIzQ2LjE3LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE3LjE2LjE2LjAwI1JhZGFyIGRldGVjdG9ycyM0Ni4xNy4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xNy4xNi4xNy4wMCNEb29yIGV5ZXMjNDYuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTcuMTYuMTguMDAjRG9vciBiZWxscyM0Ni4xNy4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xOC4wMC4wMC4wMCNQZXJzb25hbCBzYWZldHkgYW5kIHByb3RlY3Rpb24jNDYuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTUuMDAuMDAjU2FmZXR5IGFwcGFyZWwjNDYuMTguMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTUuMDEuMDAjUHJvdGVjdGl2ZSBhcHJvbnMjNDYuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTUuMDIuMDAjQnVsbGV0IHByb29mIHZlc3RzIzQ2LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE1LjAzLjAwI1Byb3RlY3RpdmUgY292ZXJhbGxzIzQ2LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE1LjA0LjAwI1Byb3RlY3RpdmUgZ2xvdmVzIzQ2LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE1LjA1LjAwI1Byb3RlY3RpdmUga25lZSBwYWRzIzQ2LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE1LjA2LjAwI1Byb3RlY3RpdmUgcG9uY2hvcyM0Ni4xOC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNS4wNy4wMCNTYWZldHkgdmVzdHMjNDYuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTUuMDguMDAjRmlyZSByZXRhcmRhbnQgYXBwYXJlbCM0Ni4xOC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNS4wOS4wMCNIYXphcmRvdXMgbWF0ZXJpYWwgcHJvdGVjdGl2ZSBhcHBhcmVsIzQ2LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE1LjEwLjAwI0ZpcmUgcmV0YXJkYW50IGdsb3ZlcyM0Ni4xOC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNS4xMS4wMCNIYXphcmRvdXMgbWF0ZXJpYWwgcHJvdGVjdGl2ZSBnb29kcyM0Ni4xOC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNS4xMi4wMCNDbGVhbnJvb20gYXBwYXJlbCM0Ni4xOC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNS4xMy4wMCNDbGVhbnJvb20gZ2xvdmVzIzQ2LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE1LjE0LjAwI0VsYm93IHByb3RlY3RvcnMjNDYuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTUuMTUuMDAjSW5zZWN0aWNpZGUgcHJvdGVjdGl2ZSBjbG90aGluZyM0Ni4xOC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNS4xNi4wMCNTYWZldHkgc2xlZXZlcyM0Ni4xOC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNS4xNy4wMCNJbnN1bGF0ZWQgb3IgZmxvdGF0aW9uIHN1aXRzIzQ2LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE1LjE4LjAwI0hlYXQgcmVzaXN0YW50IGNsb3RoaW5nIzQ2LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE1LjE5LjAwI1NhZmV0eSBoYXJuZXNzZXMgb3IgYmVsdHMjNDYuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTUuMjAuMDAjTGVnIHByb3RlY3RvcnMjNDYuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTUuMjEuMDAjUmFkaWF0aW9uIHByb3RlY3Rpb24gY2xvdGhpbmcgb3IgY29hdHMjNDYuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTUuMjIuMDAjU2FmZXR5IGhvb2RzIzQ2LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE1LjIzLjAwI0luc3VsYXRlZCBjbG90aGluZyBmb3IgY29sZCBlbnZpcm9ubWVudHMjNDYuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTUuMjQuMDAjUGVyc29uYWwgZmxvdGF0aW9uIGRldmljZXMjNDYuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTUuMjUuMDAjUHJvdGVjdGl2ZSByYWlud2VhciBvciB3ZXQgZW52aXJvbm1lbnQgYXBwYXJlbCM0Ni4xOC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNS4yNi4wMCNQcm90ZWN0aXZlIHNoaXJ0cyM0Ni4xOC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNS4yNy4wMCNQcm90ZWN0aXZlIHBhbnRzIzQ2LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE1LjI4LjAwI1Byb3RlY3RpdmUgZnJvY2sjNDYuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTUuMjkuMDAjSW5zdWxhdGVkIGNsb3RoaW5nIGZvciBjb2xkIGVudmlyb25tZW50cyM0Ni4xOC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNS4zMC4wMCNQcm90ZWN0aXZlIGZpbmdlciBjb3RzIzQ2LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE1LjMxLjAwI1JlZmxlY3RpdmUgc3VzcGVuZGVycyM0Ni4xOC4xNS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNS4zMi4wMCNMYWIgY29hdHMjNDYuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTYuMDAuMDAjU2FmZXR5IGZvb3R3ZWFyIzQ2LjE4LjAwLjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE2LjAxLjAwI0ZpcmUgcmV0YXJkYW50IGZvb3R3ZWFyIzQ2LjE4LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE2LjAyLjAwI0hhemFyZG91cyBtYXRlcmlhbCBwcm90ZWN0aXZlIGZvb3R3ZWFyIzQ2LjE4LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE2LjAzLjAwI0NsZWFucm9vbSBmb290d2VhciM0Ni4xOC4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNi4wNC4wMCNTYWZldHkgYm9vdHMjNDYuMTguMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTYuMDUuMDAjU2FmZXR5IHNob2VzIzQ2LjE4LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE2LjA2LjAwI0Zvb3R3ZWFyIGNvdmVycyM0Ni4xOC4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xNy4wMC4wMCNGYWNlIGFuZCBoZWFkIHByb3RlY3Rpb24jNDYuMTguMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTcuMDEuMDAjSGFyZCBoYXRzIzQ2LjE4LjE3LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE3LjAyLjAwI0ZhY2lhbCBzaGllbGRzIzQ2LjE4LjE3LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE3LjAzLjAwI1dlbGRpbmcgbWFza3MjNDYuMTguMTcuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTcuMDQuMDAjU2FmZXR5IGhlbG1ldHMjNDYuMTguMTcuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTcuMDUuMDAjTW90b3JjeWNsZSBoZWxtZXRzIzQ2LjE4LjE3LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE3LjA2LjAwI0hlbG1ldCBwYXJ0cyBvciBhY2Nlc3NvcmllcyM0Ni4xOC4xNy4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xOC4wMC4wMCNWaXNpb24gcHJvdGVjdGlvbiBhbmQgYWNjZXNzb3JpZXMjNDYuMTguMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTguMDEuMDAjRXlld2VhciBob2xkZXJzIzQ2LjE4LjE4LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE4LjAyLjAwI1NhZmV0eSBnbGFzc2VzIzQ2LjE4LjE4LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE4LjAzLjAwI0V5ZSBzaGllbGRzIzQ2LjE4LjE4LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE4LjA0LjAwI0dvZ2dsZXMjNDYuMTguMTguMDAuMDAKLXVuc3BzYzcjNDYuMTguMTguMDUuMDAjVmlkZW8gZGlzcGxheSBmaWx0ZXJzIzQ2LjE4LjE4LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE4LjA2LjAwI0xlbnMgY2xlYW5lciM0Ni4xOC4xOC4wMC4wMAotdW5zcHNjNyM0Ni4xOC4xOS4wMC4wMCNIZWFyaW5nIHByb3RlY3RvcnMjNDYuMTguMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTguMTkuMDEuMDAjRWFyIHBsdWdzIzQ2LjE4LjE5LjAwLjAwCi11bnNwc2M3IzQ2LjE4LjE5LjAyLjAwI0VhciBtdWZmcyM0Ni4xOC4xOS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4yMC4wMC4wMCNSZXNwaXJhdG9yeSBwcm90ZWN0aW9uIzQ2LjE4LjAwLjAwLjAwCi11bnNwc2M3IzQ2LjE4LjIwLjAxLjAwI01hc2tzIzQ2LjE4LjIwLjAwLjAwCi11bnNwc2M3IzQ2LjE4LjIwLjAyLjAwI1Jlc3BpcmF0b3JzIzQ2LjE4LjIwLjAwLjAwCi11bnNwc2M3IzQ2LjE4LjIwLjAzLjAwI0dhcyBtYXNrcyM0Ni4xOC4yMC4wMC4wMAotdW5zcHNjNyM0Ni4xOC4yMC4wNC4wMCNSZXNwaXJhdGlvbiBhaXIgc3VwcGx5aW5nIHNlbGYgY29udGFpbmVkIGJyZWF0aGluZyBhcHBhcmF0dXMgKFNDQkEpIzQ2LjE4LjIwLjAwLjAwCi11bnNwc2M3IzQ2LjE4LjIwLjA1LjAwI01hc2sgZmlsdGVycyM0Ni4xOC4yMC4wMC4wMAotdW5zcHNjNyM0Ni4xOC4yMS4wMC4wMCNBbnRpIHN0YXRpYyBlcXVpcG1lbnQgYW5kIHN1cHBsaWVzIzQ2LjE4LjAwLjAwLjAwCi11bnNwc2M3IzQ2LjE4LjIxLjAxLjAwI0FudGlzdGF0aWMgd3Jpc3Qgc3RyYXBzIzQ2LjE4LjIxLjAwLjAwCi11bnNwc2M3IzQ2LjE4LjIxLjAyLjAwI0hlZWwgZ3JvdW5kaW5nIHN0cmFwcyM0Ni4xOC4yMS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4yMS4wMy4wMCNHcm91bmRpbmcgaGFyZHdhcmUjNDYuMTguMjEuMDAuMDAKLXVuc3BzYzcjNDYuMTguMjEuMDQuMDAjQW50aSBzdGF0aWMgZmxvb3IgbWF0cyM0Ni4xOC4yMS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4yMS4wNS4wMCNBbnRpIHN0YXRpYyB3b3JrdGFibGUgbWF0cyM0Ni4xOC4yMS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4yMS4wNi4wMCNBbnRpc3RhdGljIGJlbHRzIzQ2LjE4LjIxLjAwLjAwCi11bnNwc2M3IzQ2LjE4LjIxLjA3LjAwI0FudGlzdGF0aWMgbWFpbnRlbmFuY2Uga2l0cyM0Ni4xOC4yMS4wMC4wMAotdW5zcHNjNyM0Ni4xOC4yMS4wOC4wMCNBbnRpc3RhdGljIHRvZSBzdHJhcHMjNDYuMTguMjEuMDAuMDAKLXVuc3BzYzcjNDYuMTguMjIuMDAuMDAjRXJnb25vbWljIHN1cHBvcnQgYWlkcyM0Ni4xOC4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xOC4yMi4wMS4wMCNCYWNrIHN1cHBvcnQgYmVsdHMjNDYuMTguMjIuMDAuMDAKLXVuc3BzYzcjNDYuMTguMjIuMDIuMDAjRWxib3cgc3VwcG9ydHMjNDYuMTguMjIuMDAuMDAKLXVuc3BzYzcjNDYuMTguMjIuMDMuMDAjQmFjayBzdXBwb3J0IHJlc3RzIzQ2LjE4LjIyLjAwLjAwCi11bnNwc2M3IzQ2LjE4LjIyLjA0LjAwI1dyaXN0IGJyYWNlcyM0Ni4xOC4yMi4wMC4wMAotdW5zcHNjNyM0Ni4xOC4yMi4wNS4wMCNGb290IHJlc3RzIzQ2LjE4LjIyLjAwLjAwCi11bnNwc2M3IzQ2LjE4LjIyLjA2LjAwI1dyaXN0IHJlc3RzIzQ2LjE4LjIyLjAwLjAwCi11bnNwc2M3IzQ2LjE4LjIyLjA3LjAwI0Fua2xlIHN1cHBvcnRzIzQ2LjE4LjIyLjAwLjAwCi11bnNwc2M3IzQ2LjE4LjIyLjA4LjAwI1Nob2UgaW5zb2xlcyM0Ni4xOC4yMi4wMC4wMAotdW5zcHNjNyM0Ni4xOC4yMy4wMC4wMCNGYWxsIHByb3RlY3Rpb24jNDYuMTguMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTguMjMuMDEuMDAjTGlmZWxpbmVzIG9yIGxpZmVsaW5lIGVxdWlwbWVudCM0Ni4xOC4yMy4wMC4wMAotdW5zcHNjNyM0Ni4xOC4yMy4wMi4wMCNGYWxsIHByb3RlY3Rpb24gbGFueWFyZCM0Ni4xOC4yMy4wMC4wMAotdW5zcHNjNyM0Ni4xOC4yMy4wMy4wMCNTYWZldHkgaGFybmVzcyB3aW5kZXJzIzQ2LjE4LjIzLjAwLjAwCi11bnNwc2M3IzQ2LjE4LjIzLjA0LjAwI0FuY2hvcmFnZSBjb25uZWN0b3IjNDYuMTguMjMuMDAuMDAKLXVuc3BzYzcjNDYuMTguMjMuMDUuMDAjU2VsZiByZXRyYWN0aW5nIGxhbnlhcmQjNDYuMTguMjMuMDAuMDAKLXVuc3BzYzcjNDYuMTguMjQuMDAuMDAjRGVjb250YW1pbmF0aW9uIGFpZHMjNDYuMTguMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTguMjQuMDEuMDAjRGVjb250YW1pbmF0aW9uIHNob3dlciM0Ni4xOC4yNC4wMC4wMAotdW5zcHNjNyM0Ni4xOC4yNS4wMC4wMCNQZXJzb25hbCBzYWZldHkgZGV2aWNlcyBvciB3ZWFwb25zIzQ2LjE4LjAwLjAwLjAwCi11bnNwc2M3IzQ2LjE4LjI1LjAxLjAwI1JlcGVsbGVudHMgZm9yIGNhbmluZSBhdHRhY2tzIzQ2LjE4LjI1LjAwLjAwCi11bnNwc2M3IzQ2LjE5LjAwLjAwLjAwI0ZpcmUgcHJvdGVjdGlvbiM0Ni4wMC4wMC4wMC4wMAotdW5zcHNjNyM0Ni4xOS4xNS4wMC4wMCNGaXJlIHByZXZlbnRpb24jNDYuMTkuMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTkuMTUuMDEuMDAjU21va2UgZGV0ZWN0b3JzIzQ2LjE5LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE5LjE1LjAyLjAwI0hlYXQgZGV0ZWN0b3JzIzQ2LjE5LjE1LjAwLjAwCi11bnNwc2M3IzQ2LjE5LjE1LjAzLjAwI0ZpcmUgcmVzaXN0YW50IGNvYXRpbmdzIG9yIHB1dHRpZXMgb3Igc2VhbGFudHMjNDYuMTkuMTUuMDAuMDAKLXVuc3BzYzcjNDYuMTkuMTYuMDAuMDAjRmlyZSBmaWdodGluZyBlcXVpcG1lbnQjNDYuMTkuMDAuMDAuMDAKLXVuc3BzYzcjNDYuMTkuMTYuMDEuMDAjRmlyZSBleHRpbmd1aXNoZXJzIzQ2LjE5LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE5LjE2LjAyLjAwI0ZpcmUgc3ByaW5rbGVyIHN5c3RlbXMjNDYuMTkuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTkuMTYuMDMuMDAjRmlyZSBob3NlcyBvciBub3p6bGVzIzQ2LjE5LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE5LjE2LjA0LjAwI0ZpcmUgYmxhbmtldHMjNDYuMTkuMTYuMDAuMDAKLXVuc3BzYzcjNDYuMTkuMTYuMDUuMDAjRmlyZSBzdXBwcmVzc2lvbiBoYW5kIHRvb2xzIzQ2LjE5LjE2LjAwLjAwCi11bnNwc2M3IzQ2LjE5LjE2LjA2LjAwI0ZpcmUgc3VwcHJlc3Npb24gZm9hbSBvciBzaW1pbGFyIGNvbXBvdW5kcyM0Ni4xOS4xNi4wMC4wMAotdW5zcHNjNyM0Ni4xOS4xNi4wNy4wMCNGaXJlIGJyZWF0aGluZyBhcHBhcmF0dXMjNDYuMTkuMTYuMDAuMDAKLXVuc3BzYzcjNDcuMDAuMDAuMDAuMDAjQ2xlYW5pbmcgRXF1aXBtZW50IGFuZCBTdXBwbGllcyM0Ny4wMC4wMC4wMC4wMAotdW5zcHNjNyM0Ny4xMC4wMC4wMC4wMCNXYXRlciBhbmQgd2FzdGV3YXRlciB0cmVhdG1lbnQgc3VwcGx5IGFuZCBkaXNwb3NhbCM0Ny4wMC4wMC4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4wMC4wMCNXYXRlciB0cmVhdG1lbnQgYW5kIHN1cHBseSBlcXVpcG1lbnQjNDcuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTUuMDEuMDAjQWN0aXZhdGVkIGNhcmJvbiBlcXVpcG1lbnQjNDcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTUuMDIuMDAjQW1tb25pYSByZW1vdmFsIGVxdWlwbWVudCM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4wMy4wMCNDYXJib24gZmlsdHJhdGlvbiBlcXVpcG1lbnQjNDcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTUuMDQuMDAjQmFjdGVyaWFsIHJlbW92YWwgZXF1aXBtZW50IzQ3LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE1LjA1LjAwI0NobG9yaW5lIGhhbmRsaW5nIGVxdWlwbWVudCM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4wNi4wMCNDb3Jyb3Npb24gY29udHJvbCBlcXVpcG1lbnQjNDcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTUuMDcuMDAjR3JpdCBjaGFtYmVycyM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4wOC4wMCNEZXNhbGluYXRpb24gZXF1aXBtZW50IzQ3LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE1LjA5LjAwI0ZsdW9yaWRhdGlvbiBlcXVpcG1lbnQjNDcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTUuMTAuMDAjSXJvbiByZW1vdmFsIGVxdWlwbWVudCM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4xMS4wMCNJb24gZXhjaGFuZ2UgZXF1aXBtZW50IzQ3LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE1LjEyLjAwI01peGVycyBvciBhZ2l0YXRvcnMjNDcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTUuMTMuMDAjT3h5Z2VuIGdlbmVyYXRvcnMjNDcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTUuMTQuMDAjV2F0ZXIgcHVyaWZpY2F0aW9uIGVxdWlwbWVudCM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4xNi4wMCNUdXJiaWRpbWV0ZXJzIzQ3LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE1LjE3LjAwI1VsdHJhdmlvbGV0IGRpc2luZmVjdGlvbiBlcXVpcG1lbnQjNDcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTUuMTguMDAjV2F0ZXIgY29uZGl0aW9uZXJzIzQ3LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE1LjE5LjAwI1dhdGVyIHNvZnRlbmluZyBhY2Nlc3NvcmllcyM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4yMS4wMCNVbHRyYWZpbHRyYXRpb24gZXF1aXBtZW50IzQ3LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE1LjIyLjAwI1BhY2thZ2VkIHdhdGVyIHRyZWF0bWVudCBzeXN0ZW1zIzQ3LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE1LjIzLjAwI0NvbGxlY3Rpb24gdGFua3MjNDcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTUuMjQuMDAjU2x1ZGdlIG9yIHNld2FnZSBjb21wb3N0aW5nIGVxdWlwbWVudCM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4yNS4wMCNEZXdhdGVyaW5nIGVxdWlwbWVudCM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4yNi4wMCNTbHVkZ2UgcGVsbGV0aXplcnMjNDcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTUuMjcuMDAjU2x1ZGdlIHNocmVkZGVycyM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4yOC4wMCNXYXRlciB0cmVhdG1lbnQgZHJ5ZXJzIzQ3LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE1LjI5LjAwI0luY2luZXJhdG9ycyM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4zMC4wMCNPZG9yIGNvbnRyb2wgZXF1aXBtZW50IzQ3LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE1LjMxLjAwI1NlcHRpYyB0YW5rcyM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4zMi4wMCNTZXR0bGluZyB0YW5rcyM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4zMy4wMCNMaWZ0IHN0YXRpb25zIzQ3LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE1LjM0LjAwI1Nld2FnZSBkaXN0cmlidXRvcnMjNDcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTUuMzUuMDAjU2x1ZGdlIGRpc3Bvc2FsIGVxdWlwbWVudCM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4zNi4wMCNTbHVkZ2UgY29sbGVjdG9ycyM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4zNy4wMCNTbHVkZ2UgY29uZGl0aW9uaW5nIGVxdWlwbWVudCM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4zOC4wMCNTbHVkZ2Ugb3Igc2V3YWdlIGRpZ2VzdGVycyM0Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNS4zOS4wMCNTbHVkZ2Ugb3Igc2V3YWdlIHJlbW92YWwgZXF1aXBtZW50IzQ3LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE2LjAwLjAwI1dhdGVyIHRyZWF0bWVudCBjb25zdW1hYmxlcyM0Ny4xMC4wMC4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNi4wMS4wMCNBbGdhZWNpZGVzIzQ3LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE2LjAyLjAwI0FudGlzY2FsYW50cyM0Ny4xMC4xNi4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNi4wMy4wMCNEZXNjYWxlcnMjNDcuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTYuMDQuMDAjQm9pbGVyIGZlZWQgY2hlbWljYWxzIzQ3LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE2LjA1LjAwI0JhY3RlcmlhbCByZW1vdmFsIGNoZW1pY2FscyM0Ny4xMC4xNi4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNi4wNi4wMCNDb3Jyb3Npb24gY29udHJvbCBjaGVtaWNhbHMjNDcuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTYuMDcuMDAjT2RvciBjb250cm9sIGNoZW1pY2FscyM0Ny4xMC4xNi4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNi4wOC4wMCNGbG9jY3VsZW50cyM0Ny4xMC4xNi4wMC4wMAotdW5zcHNjNyM0Ny4xMC4xNi4wOS4wMCNNaWNyb2Jpb2NpZGVzIzQ3LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE2LjEwLjAwI1dhdGVyIHNvZnRlbmluZyBjb21wb3VuZHMjNDcuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDcuMTAuMTYuMTEuMDAjRGVtdWxzaWZpZXJzIzQ3LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ3LjEwLjE2LjEyLjAwI1BvbHllbGVjdHJvbHl0ZXMjNDcuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDcuMTEuMDAuMDAuMDAjSW5kdXN0cmlhbCBsYXVuZHJ5IGFuZCBkcnkgY2xlYW5pbmcgZXF1aXBtZW50IzQ3LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ3LjExLjE1LjAwLjAwI1dhc2hpbmcgYW5kIGRyeWluZyBlcXVpcG1lbnQjNDcuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDcuMTEuMTUuMDEuMDAjTGF1bmRyeSB0eXBlIGNvbWJpbmVkIHdhc2hpbmcgb3IgZHJ5aW5nIG1hY2hpbmVzIzQ3LjExLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjExLjE1LjAyLjAwI0xhdW5kcnkgdHlwZSB3YXNoaW5nIG1hY2hpbmVzIzQ3LjExLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjExLjE1LjAzLjAwI0Nsb3RoZXMgZHJ5ZXJzIzQ3LjExLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjExLjE1LjA0LjAwI0xhdW5kcnkgdHlwZSBkcnlpbmcgbWFjaGluZXMjNDcuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTEuMTUuMDUuMDAjTGF1bmRyeSBlcXVpcG1lbnQgc3RhbmRzIzQ3LjExLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjExLjE2LjAwLjAwI0lyb25pbmcgZXF1aXBtZW50IzQ3LjExLjAwLjAwLjAwCi11bnNwc2M3IzQ3LjExLjE2LjAxLjAwI0lyb25pbmcgbWFjaGluZXMgb3IgcHJlc3NlcyM0Ny4xMS4xNi4wMC4wMAotdW5zcHNjNyM0Ny4xMS4xNi4wMi4wMCNGb2xkaW5nIG1hY2hpbmVzIzQ3LjExLjE2LjAwLjAwCi11bnNwc2M3IzQ3LjExLjE2LjAzLjAwI1N0ZWFtIHByZXNzaW5nIG1hY2hpbmVzIzQ3LjExLjE2LjAwLjAwCi11bnNwc2M3IzQ3LjExLjE3LjAwLjAwI0RyeSBjbGVhbmluZyBlcXVpcG1lbnQjNDcuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDcuMTEuMTcuMDEuMDAjRHJ5IGNsZWFuaW5nIG1hY2hpbmVzIzQ3LjExLjE3LjAwLjAwCi11bnNwc2M3IzQ3LjEyLjAwLjAwLjAwI0phbml0b3JpYWwgZXF1aXBtZW50IzQ3LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ3LjEyLjE1LjAwLjAwI0phbml0b3IgY2FydHMgYW5kIGFjY2Vzc29yaWVzIzQ3LjEyLjAwLjAwLjAwCi11bnNwc2M3IzQ3LjEyLjE1LjAxLjAwI0phbml0b3IgY2FydHMjNDcuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDcuMTIuMTUuMDIuMDAjSmFuaXRvciBjYXJ0IGFjY2Vzc29yaWVzIzQ3LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEyLjE2LjAwLjAwI0Zsb29yIG1hY2hpbmVzIGFuZCBhY2Nlc3NvcmllcyM0Ny4xMi4wMC4wMC4wMAotdW5zcHNjNyM0Ny4xMi4xNi4wMi4wMCNWYWN1dW0gY2xlYW5lcnMjNDcuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDcuMTIuMTYuMDMuMDAjRmxvb3IgcG9saXNoZXJzIzQ3LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ3LjEyLjE2LjA0LjAwI1dldCBvciBkcnkgY29tYmluYXRpb24gdmFjdXVtIGNsZWFuZXJzIzQ3LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ3LjEyLjE2LjA1LjAwI0Zsb29yIHNjcnViYmVycyM0Ny4xMi4xNi4wMC4wMAotdW5zcHNjNyM0Ny4xMi4xNi4wNi4wMCNDYXJwZXQgc3dlZXBlcnMjNDcuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDcuMTIuMTYuMDcuMDAjVmFjdXVtIGNsZWFuZXIgc3VwcGxpZXMgb3IgYWNjZXNzb3JpZXMjNDcuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDcuMTIuMTYuMDguMDAjRmxvb3IgbWFjaGluZSBwYWRzIzQ3LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ3LjEyLjE2LjA5LjAwI0NhcnBldCBjbGVhbmluZyBlcXVpcG1lbnQjNDcuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNDcuMTIuMTYuMTAuMDAjRmxvb3Igd2FzaGluZyBtYWNoaW5lIzQ3LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ3LjEyLjE3LjAwLjAwI1dhc3RlIGNvbnRhaW5lcnMgYW5kIGFjY2Vzc29yaWVzIzQ3LjEyLjAwLjAwLjAwCi11bnNwc2M3IzQ3LjEyLjE3LjAxLjAwI1RyYXNoIGJhZ3MjNDcuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNDcuMTIuMTcuMDIuMDAjV2FzdGUgY29udGFpbmVycyBvciByaWdpZCBsaW5lcnMjNDcuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNDcuMTIuMTcuMDMuMDAjU21va2luZyB1cm5zIG9yIGFjY2Vzc29yaWVzIzQ3LjEyLjE3LjAwLjAwCi11bnNwc2M3IzQ3LjEyLjE3LjA0LjAwI1dhc3RlIGNvbnRhaW5lciBsaWRzIzQ3LjEyLjE3LjAwLjAwCi11bnNwc2M3IzQ3LjEyLjE3LjA1LjAwI1VybiBzYW5kIGJhZ3MjNDcuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNDcuMTIuMTcuMDYuMDAjQXNoIHRyYXlzIzQ3LjEyLjE3LjAwLjAwCi11bnNwc2M3IzQ3LjEyLjE3LjA3LjAwI01vdGlvbiBzaWNrbmVzcyBiYWdzIzQ3LjEyLjE3LjAwLjAwCi11bnNwc2M3IzQ3LjEyLjE4LjAwLjAwI0NsZWFuaW5nIGVxdWlwbWVudCM0Ny4xMi4wMC4wMC4wMAotdW5zcHNjNyM0Ny4xMi4xOC4wMS4wMCNDbGVhbmluZyBkdXN0ZXJzIzQ3LjEyLjE4LjAwLjAwCi11bnNwc2M3IzQ3LjEyLjE4LjAyLjAwI0xpbnQgcmVtb3ZlcnMjNDcuMTIuMTguMDAuMDAKLXVuc3BzYzcjNDcuMTIuMTguMDMuMDAjU3F1ZWVnZXMgb3Igd2FzaGVycyM0Ny4xMi4xOC4wMC4wMAotdW5zcHNjNyM0Ny4xMi4xOC4wNC4wMCNDbGVhbmluZyBwYWlscyBvciBidWNrZXRzIzQ3LjEyLjE4LjAwLjAwCi11bnNwc2M3IzQ3LjEyLjE4LjA1LjAwI1ByZXNzdXJlIG9yIHN0ZWFtIGNsZWFuZXJzIzQ3LjEyLjE4LjAwLjAwCi11bnNwc2M3IzQ3LjEyLjE4LjA2LjAwI01vcCB3cmluZ2VyIzQ3LjEyLjE4LjAwLjAwCi11bnNwc2M3IzQ3LjEyLjE4LjA3LjAwI0RyYWluIG9yIHRvaWxldCBwbHVuZ2VyIzQ3LjEyLjE4LjAwLjAwCi11bnNwc2M3IzQ3LjEyLjE4LjA4LjAwI0RyYWluIG9yIHBpcGUgY2xlYW5pbmcgZXF1aXBtZW50IzQ3LjEyLjE4LjAwLjAwCi11bnNwc2M3IzQ3LjEyLjE4LjA5LjAwI0RlZ3JlYXNpbmcgcGFucyM0Ny4xMi4xOC4wMC4wMAotdW5zcHNjNyM0Ny4xMi4xOC4xMC4wMCNDbGVhbmluZyByYWcgZGlzcGVuc2VyIzQ3LjEyLjE4LjAwLjAwCi11bnNwc2M3IzQ3LjEyLjE4LjExLjAwI0R1Y3QgY2xlYW5pbmcgbWFjaGluZXMjNDcuMTIuMTguMDAuMDAKLXVuc3BzYzcjNDcuMTMuMDAuMDAuMDAjQ2xlYW5pbmcgYW5kIGphbml0b3JpYWwgc3VwcGxpZXMjNDcuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTUuMDAuMDAjQ2xlYW5pbmcgcmFncyBhbmQgY2xvdGhzIGFuZCB3aXBlcyM0Ny4xMy4wMC4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xNS4wMS4wMCNSYWdzIzQ3LjEzLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE1LjAyLjAwI1dpcGVzIzQ3LjEzLjE1LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE2LjAwLjAwI0Jyb29tcyBhbmQgbW9wcyBhbmQgYnJ1c2hlcyBhbmQgYWNjZXNzb3JpZXMjNDcuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTYuMDEuMDAjRHVzdCBicnVzaGVzIG9yIHBhbnMjNDcuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTYuMDIuMDAjU2NvdXJpbmcgcGFkcyM0Ny4xMy4xNi4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xNi4wMy4wMCNTcG9uZ2VzIzQ3LjEzLjE2LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE2LjA0LjAwI0Jyb29tcyM0Ny4xMy4xNi4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xNi4wNS4wMCNDbGVhbmluZyBicnVzaGVzIzQ3LjEzLjE2LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE2LjA2LjAwI0R1c3QgbW9wcyM0Ny4xMy4xNi4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xNi4wNy4wMCNXZXQgbW9wcyM0Ny4xMy4xNi4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xNi4wOC4wMCNUb2lsZXQgYnJ1c2hlcyM0Ny4xMy4xNi4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xNi4wOS4wMCNCcm9vbSBvciBtb3AgaGFuZGxlcyM0Ny4xMy4xNi4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xNi4xMC4wMCNGbG9vciBmaW5pc2ggYXBwbGljYXRvciM0Ny4xMy4xNi4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xNi4xMS4wMCNUcmFzaCBwaWNrZXIjNDcuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTYuMTIuMDAjUmVwbGFjZW1lbnQgcnViYmVycyM0Ny4xMy4xNi4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xNi4xMy4wMCNNb3Agb3IgYnJvb20gaG9sZGVyIzQ3LjEzLjE2LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE2LjE0LjAwI0NsZWFuaW5nIGVxdWlwbWVudCBjbGFtcHMjNDcuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTcuMDAuMDAjUmVzdHJvb20gc3VwcGxpZXMjNDcuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTcuMDEuMDAjUGFwZXIgdG93ZWwgZGlzcGVuc2VycyM0Ny4xMy4xNy4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xNy4wMi4wMCNTYW5pdGFyeSBnb29kcyBkaXNwZW5zZXJzIzQ3LjEzLjE3LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE3LjAzLjAwI1Nhbml0YXJ5IHdhc3RlIHJlY2VwdGFjbGVzIzQ3LjEzLjE3LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE3LjA0LjAwI0luc3RpdHV0aW9uYWwgc29hcCBvciBsb3Rpb24gZGlzcGVuc2VycyM0Ny4xMy4xNy4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xNy4wNS4wMCNVcmluYWwgb3IgdG9pbGV0IGFjY2Vzc29yaWVzIzQ3LjEzLjE3LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE3LjA2LjAwI0FpciBmcmVzaGVuZXIgZGlzcGVuc2VycyM0Ny4xMy4xNy4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xNy4wNy4wMCNJbnN0aXR1dGlvbmFsIGhhbmQgZHJ5ZXJzIzQ3LjEzLjE3LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE3LjA4LjAwI0JhdGhyb29tIHRpc3N1ZSBkaXNwZW5zZXIjNDcuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTcuMDkuMDAjRmFjaWFsIHRpc3N1ZSBkaXNwZW5zZXJzIzQ3LjEzLjE3LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE3LjEwLjAwI1RvaWxldCB0aXNzdWUgZGlzcGVuc2VycyM0Ny4xMy4xNy4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xNy4xMS4wMCNDbGVhbmVyIGRpc3BlbnNlciM0Ny4xMy4xNy4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOC4wMC4wMCNDbGVhbmluZyBhbmQgZGlzaW5mZWN0aW5nIHNvbHV0aW9ucyM0Ny4xMy4wMC4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOC4wMS4wMCNGbG9vciBjbGVhbmVycyM0Ny4xMy4xOC4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOC4wMi4wMCNGbG9vciB3YXhlcyM0Ny4xMy4xOC4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOC4wMy4wMCNIb3VzZWhvbGQgZGlzaW5mZWN0YW50cyM0Ny4xMy4xOC4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOC4wNC4wMCNBbW1vbmlhcyM0Ny4xMy4xOC4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOC4wNS4wMCNHZW5lcmFsIHB1cnBvc2UgY2xlYW5lcnMjNDcuMTMuMTguMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTguMDYuMDAjRnVybml0dXJlIHBvbGlzaCBvciB3YXhlcyM0Ny4xMy4xOC4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOC4wNy4wMCNCbGVhY2hlcyM0Ny4xMy4xOC4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOC4wOC4wMCNEcnkgZ2VybWljaWRhbCM0Ny4xMy4xOC4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOC4wOS4wMCNTaG9lIGNsZWFuaW5nIG9yIHBvbGlzaGluZyBwcm9kdWN0cyM0Ny4xMy4xOC4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOC4xMC4wMCNEaXNod2FzaGluZyBwcm9kdWN0cyM0Ny4xMy4xOC4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOC4xMS4wMCNMYXVuZHJ5IHByb2R1Y3RzIzQ3LjEzLjE4LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE4LjEyLjAwI0FpciBmcmVzaGVuZXIjNDcuMTMuMTguMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTguMTMuMDAjU2NyZWVuIGNsZWFuZXIjNDcuMTMuMTguMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTguMTQuMDAjTWV0YWwgY2xlYW5lcnMgb3IgcG9saXNoZXMjNDcuMTMuMTguMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTguMTUuMDAjRHJhaW4gY2xlYW5lciM0Ny4xMy4xOC4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOC4xNi4wMCNEZW9kb3JpemVycyM0Ny4xMy4xOC4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOC4xNy4wMCNIb3VzZWhvbGQgb3IgYXV0b21vdGl2ZSBwcm90ZWN0YW50cyM0Ny4xMy4xOC4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOC4xOC4wMCNBaXIgc2FuaXRpemVyIzQ3LjEzLjE4LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE4LjE5LjAwI0NhdXN0aWMgY2xlYW5lcnMjNDcuMTMuMTguMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTguMjAuMDAjUGV0cm9sZXVtIGRlcml2YXRpdmUgY2xlYW5lcnMjNDcuMTMuMTguMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTguMjEuMDAjRGVncmVhc2luZyBjb21wb3VuZHMjNDcuMTMuMTguMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTguMjIuMDAjQ2FyYm9uIHJlbW92aW5nIGNvbXBvdW5kcyM0Ny4xMy4xOC4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOC4yMy4wMCNEZWljZXJzIGFuZCBkZWZyb3N0ZXJzIzQ3LjEzLjE4LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE4LjI0LjAwI0dsYXNzIG9yIHdpbmRvdyBjbGVhbmVycyM0Ny4xMy4xOC4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOC4yNS4wMCNDb250YWN0IHN1cmZhY2UgY2xlYW5lcnMjNDcuMTMuMTguMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTkuMDAuMDAjQWJzb3JiZW50cyM0Ny4xMy4wMC4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOS4wMS4wMCNNYXRzIzQ3LjEzLjE5LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE5LjAyLjAwI0dyYW51bGFyIGFic29yYmVudCM0Ny4xMy4xOS4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOS4wMy4wMCNQbHVnZ2luZyBjb21wb3VuZCM0Ny4xMy4xOS4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOS4wNC4wMCNBYnNvcmJlbnQgc29ja3MjNDcuMTMuMTkuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMTkuMDUuMDAjU3BpbGwga2l0cyM0Ny4xMy4xOS4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOS4wNi4wMCNQYW5zIzQ3LjEzLjE5LjAwLjAwCi11bnNwc2M3IzQ3LjEzLjE5LjA3LjAwI0Fic29yYmVudCBib29tcyM0Ny4xMy4xOS4wMC4wMAotdW5zcHNjNyM0Ny4xMy4xOS4wOC4wMCNBYnNvcmJlbnQgcGlsbG93cyM0Ny4xMy4xOS4wMC4wMAotdW5zcHNjNyM0Ny4xMy4yMC4wMC4wMCNNYXRzIzQ3LjEzLjAwLjAwLjAwCi11bnNwc2M3IzQ3LjEzLjIxLjAwLjAwI0NsZWFuaW5nIGtpdHMjNDcuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNDcuMTMuMjEuMDEuMDAjSW5kdXN0cmlhbCBjbGVhbmluZyBraXRzIzQ3LjEzLjIxLjAwLjAwCi11bnNwc2M3IzQ3LjEzLjIxLjAyLjAwI0dlbmVyYWwgcHVycG9zZSBjbGVhbmluZyBraXRzIzQ3LjEzLjIxLjAwLjAwCi11bnNwc2M3IzQ4LjAwLjAwLjAwLjAwI1NlcnZpY2UgSW5kdXN0cnkgTWFjaGluZXJ5IGFuZCBFcXVpcG1lbnQgYW5kIFN1cHBsaWVzIzQ4LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ4LjEwLjAwLjAwLjAwI0luc3RpdHV0aW9uYWwgZm9vZCBzZXJ2aWNlcyBlcXVpcG1lbnQjNDguMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTUuMDAuMDAjQ29va2luZyBhbmQgd2FybWluZyBlcXVpcG1lbnQjNDguMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTUuMDEuMDAjQ29tbWVyY2lhbCB1c2UgYmFpbiBtYXJpZXMjNDguMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTUuMDIuMDAjQ29tbWVyY2lhbCB1c2UgYmFyYmVxdWUgb3ZlbnMjNDguMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTUuMDMuMDAjQ29tbWVyY2lhbCB1c2UgYnJvaWxlcnMjNDguMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTUuMDQuMDAjQ29tbWVyY2lhbCB1c2UgY2hhcmNvYWwgZ3JpbGxzIzQ4LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE1LjA1LjAwI0NvbW1lcmNpYWwgdXNlIGNvZmZlZSBvciBpY2VkIHRlYSBtYWtlcnMjNDguMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTUuMDYuMDAjQ29tbWVyY2lhbCB1c2UgY29mZmVlIHdhcm1lcnMjNDguMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTUuMDcuMDAjQ29tbWVyY2lhbCB1c2UgY29udmVjdGlvbiBvdmVucyM0OC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNS4wOC4wMCNDb21tZXJjaWFsIHVzZSBjb252ZXllciB0b2FzdGVycyM0OC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNS4wOS4wMCNDb21tZXJjaWFsIHVzZSBkZWVwIGZyeWVycyM0OC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNS4xMC4wMCNDb21tZXJjaWFsIHVzZSBmb29kIHdhcm1lcnMjNDguMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTUuMTEuMDAjQ29tbWVyY2lhbCB1c2UgZ3JpZGRsZXMjNDguMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTUuMTIuMDAjQ29tbWVyY2lhbCB1c2UgZ3JpbGxzIzQ4LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE1LjEzLjAwI0NvbW1lcmNpYWwgdXNlIGhlYXQgbGFtcHMjNDguMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTUuMTQuMDAjQ29tbWVyY2lhbCB1c2UgaGlnaCBwcmVzc3VyZSBzdGVhbWVycyM0OC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNS4xNS4wMCNDb21tZXJjaWFsIHVzZSBob3QgZG9nIGdyaWxscyM0OC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNS4xNi4wMCNDb21tZXJjaWFsIHVzZSBtaWNyb3dhdmUgb3ZlbnMjNDguMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTUuMTcuMDAjQ29tbWVyY2lhbCB1c2Ugb3ZlbnMjNDguMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTUuMTguMDAjQ29tbWVyY2lhbCB1c2UgcGFzdGEgY29va2VycyM0OC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNS4xOS4wMCNDb21tZXJjaWFsIHVzZSBwaXp6YSBvdmVucyM0OC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNS4yMC4wMCNDb21tZXJjaWFsIHVzZSBwb3Bjb3JuIG1hY2hpbmVzIzQ4LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE1LjIxLjAwI0NvbW1lcmNpYWwgdXNlIHJhbmdlcyM0OC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNS4yMi4wMCNDb21tZXJjaWFsIHVzZSByb3Rpc3NlcmllcyM0OC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNS4yMy4wMCNDb21tZXJjaWFsIHVzZSBzbW9rZXJzIG9yIHNtb2tlIG92ZW5zIzQ4LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE1LjI0LjAwI0NvbW1lcmNpYWwgdXNlIHN0ZWFtZXJzIzQ4LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE1LjI1LjAwI0NvbW1lcmNpYWwgdXNlIHRvYXN0ZXJzIzQ4LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE1LjI2LjAwI0NvbW1lcmNpYWwgdXNlIHdhZmZsZSBpcm9ucyM0OC4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNS4yNy4wMCNCYXJiZWN1ZXMjNDguMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTUuMjguMDAjQ29tbWVyY2lhbCB1c2UgY3JlcGUgbWFjaGluZXMjNDguMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTUuMjkuMDAjUHJlc3N1cmUgY29va2VycyBvciBwcmVzc3VyZSBmcnllcnMjNDguMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTUuMzAuMDAjQ29tbWVyY2lhbCB1c2UgcmljZSBjb29rZXJzIzQ4LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE1LjMxLjAwI0NvbW1lcmNpYWwgc2FsbW9uIHBvYWNoZXJzIG9yIGtldHRsZXMjNDguMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTYuMDAuMDAjRm9vZCBwcmVwYXJhdGlvbiBlcXVpcG1lbnQjNDguMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTYuMDEuMDAjQ29tbWVyY2lhbCB1c2UgYmxlbmRlcnMjNDguMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTYuMDIuMDAjQ29tbWVyY2lhbCB1c2UgZWxlY3RyaWMgY2FuIG9wZW5lcnMjNDguMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTYuMDMuMDAjQ29tbWVyY2lhbCB1c2UgZm9vZCBjaG9wcGVycyBvciBjdWJlcnMgb3IgZGljZXJzIzQ4LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE2LjA0LjAwI0NvbW1lcmNpYWwgdXNlIGNvZmZlZSBncmluZGVycyM0OC4xMC4xNi4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNi4wNS4wMCNDb21tZXJjaWFsIHVzZSBmb29kIGdyaW5kZXJzIzQ4LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE2LjA2LjAwI0NvbW1lcmNpYWwgdXNlIGdyYXRlcnMjNDguMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTYuMDcuMDAjQ29tbWVyY2lhbCB1c2UganVpY2VycyM0OC4xMC4xNi4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNi4wOC4wMCNDb21tZXJjaWFsIHVzZSBtaXhlcnMjNDguMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTYuMDkuMDAjQ29tbWVyY2lhbCB1c2UgcGFzdGEgbWFjaGluZXMjNDguMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTYuMTAuMDAjQ29tbWVyY2lhbCB1c2UgcGVlbGVycyM0OC4xMC4xNi4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNi4xMS4wMCNDb21tZXJjaWFsIHVzZSBzY2FsZXMjNDguMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTYuMTIuMDAjQ29tbWVyY2lhbCB1c2UgZm9vZCBwcm9jZXNzb3JzIzQ4LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE2LjEzLjAwI0NvbW1lcmNpYWwgdXNlIGRvdWdoIG1hY2hpbmVzIzQ4LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE2LjE0LjAwI0NvbW1lcmNpYWwgdXNlIGljaW5nIHNldHMgb3IgYmFncyM0OC4xMC4xNi4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNi4xNS4wMCNDb21tZXJjaWFsIHVzZSBkaXNod2FzaGVycyM0OC4xMC4xNi4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNi4xNi4wMCNDb21tZXJjaWFsIHVzZSBicmVhZCBzbGljZXJzIzQ4LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE2LjE3LjAwI0NvbW1lcmNpYWwgdXNlIHBsYXN0aWMgc2hvdmVscyM0OC4xMC4xNi4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNy4wMC4wMCNGb29kIGFuZCBiZXZlcmFnZSBkaXNwZW5zaW5nIGVxdWlwbWVudCM0OC4xMC4wMC4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNy4wMS4wMCNDYXJib25hdGVkIGJldmVyYWdlIGRpc3BlbnNlciM0OC4xMC4xNy4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNy4wMi4wMCNOb24gY2FyYm9uYXRlZCBiZXZlcmFnZSBkaXNwZW5zZXIjNDguMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTcuMDMuMDAjTWlsayBkaXNwZW5zZXJzIzQ4LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE3LjA0LjAwI1N5cnVwIHB1bXBzIzQ4LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE3LjA1LjAwI0NhcHB1Y2Npbm8gb3IgZXNwcmVzc28gbWFjaGluZXMjNDguMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTcuMDYuMDAjTWlsa3NoYWtlIG1hY2hpbmVzIzQ4LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE3LjA3LjAwI1NvZnQgc2VydmUgbWFjaGluZXMjNDguMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTcuMDguMDAjU2x1c2ggbWFjaGluZXMjNDguMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTcuMDkuMDAjSWNlIGRpc3BlbnNlcnMjNDguMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTcuMTAuMDAjRHJpbmtpbmcgZm91bnRhaW5zIG9yIGJ1YmJsZXJzIzQ4LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE3LjExLjAwI0JvdHRsZWQgd2F0ZXIgZGlzcGVuc2VycyBvciBhY2Nlc3NvcmllcyM0OC4xMC4xNy4wMC4wMAotdW5zcHNjNyM0OC4xMC4xNy4xMi4wMCNDdXAgZGlzcGVuc2VyIzQ4LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE3LjEzLjAwI0NvY2t0YWlsIHNoYWtlcnMgb3IgYWNjZXNzb3JpZXMjNDguMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTcuMTQuMDAjSG90IHdhdGVyIGRpc3BlbnNlciM0OC4xMC4xNy4wMC4wMAotdW5zcHNjNyM0OC4xMC4xOC4wMC4wMCNDb29rd2FyZSBhbmQga2l0Y2hlbiB0b29scyM0OC4xMC4wMC4wMC4wMAotdW5zcHNjNyM0OC4xMC4xOC4wMS4wMCNDb21tZXJjaWFsIHVzZSBjdXRsZXJ5IzQ4LjEwLjE4LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE4LjAyLjAwI0NvbW1lcmNpYWwgdXNlIG1vbGRzIzQ4LjEwLjE4LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE4LjAzLjAwI0NvbW1lcmNpYWwgdXNlIHNjb29wcyM0OC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0OC4xMC4xOC4wNC4wMCNDb21tZXJjaWFsIHVzZSBtZWFzdXJpbmcgY3VwcyM0OC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0OC4xMC4xOC4wNS4wMCNDb21tZXJjaWFsIHVzZSBtaXhpbmcgYm93bHMjNDguMTAuMTguMDAuMDAKLXVuc3BzYzcjNDguMTAuMTguMDYuMDAjQ29tbWVyY2lhbCB1c2UgY2FrZSBvciBwaWUgcGFucyM0OC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0OC4xMC4xOC4wNy4wMCNDb21tZXJjaWFsIHVzZSBwaXp6YSBwYW5zIzQ4LjEwLjE4LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE4LjA4LjAwI0NvbW1lcmNpYWwgdXNlIHNhdWNlIG9yIHNhdXRlIHBhbnMjNDguMTAuMTguMDAuMDAKLXVuc3BzYzcjNDguMTAuMTguMDkuMDAjQ29tbWVyY2lhbCB1c2Ugc3RvY2sgb3Igc2F1Y2UgcG90cyM0OC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0OC4xMC4xOC4xMC4wMCNDb21tZXJjaWFsIHVzZSBwb3Qgb3IgcGFuIGNvdmVycyM0OC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0OC4xMC4xOC4xMS4wMCNDb21tZXJjaWFsIHVzZSByb2xsaW5nIHBpbnMjNDguMTAuMTguMDAuMDAKLXVuc3BzYzcjNDguMTAuMTguMTIuMDAjQ29tbWVyY2lhbCB1c2Ugc3RyYWluZXJzIzQ4LjEwLjE4LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE4LjEzLjAwI0NvbW1lcmNpYWwgdXNlIHdoaXNrcyM0OC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0OC4xMC4xOC4xNC4wMCNDb21tZXJjaWFsIHVzZSB3b2tzIzQ4LjEwLjE4LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE4LjE1LjAwI0NvbW1lcmNpYWwgdXNlIGxhZGxlcyM0OC4xMC4xOC4wMC4wMAotdW5zcHNjNyM0OC4xMC4xOC4xNi4wMCNDb21tZXJjaWFsIHVzZSBjdXRsZXJ5IHBvdWNoIzQ4LjEwLjE4LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE4LjE3LjAwI0Nha2UgZGVjb3JhdGluZyBlcXVpcG1lbnQgb3IgbW91bGRzIzQ4LjEwLjE4LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE5LjAwLjAwI1RhYmxldG9wIGFuZCBzZXJ2aW5nIGVxdWlwbWVudCM0OC4xMC4wMC4wMC4wMAotdW5zcHNjNyM0OC4xMC4xOS4wMS4wMCNGb29kIHNlcnZpY2UgZGlubmVyd2FyZSM0OC4xMC4xOS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xOS4wMi4wMCNGb29kIHNlcnZpY2UgZmxhdHdhcmUjNDguMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTkuMDMuMDAjRm9vZCBzZXJ2aWNlIGdsYXNzZXMjNDguMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTkuMDQuMDAjRm9vZCBzZXJ2aWNlIHN0ZW13YXJlIzQ4LjEwLjE5LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE5LjA1LjAwI0Zvb2Qgc2VydmljZSBjdXBzIG9yIG11Z3MjNDguMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTkuMDYuMDAjRm9vZCBzZXJ2aWNlIHNlcnZpbmcgYmFza2V0cyM0OC4xMC4xOS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xOS4wNy4wMCNGb29kIHNlcnZpY2UgcGl0Y2hlcnMjNDguMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTkuMDguMDAjRm9vZCBzZXJ2aWNlIGNoYWZlcnMjNDguMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTkuMDkuMDAjRm9vZCBzZXJ2aWNlIGNvZmZlZSBvciB0ZWEgcG90cyM0OC4xMC4xOS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xOS4xMC4wMCNGb29kIHNlcnZpY2Ugc291cCBjcm9ja3MjNDguMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTkuMTEuMDAjRm9vZCBzZXJ2aWNlIGljZSBidWNrZXRzIG9yIHdpbmUgY29vbGVycyM0OC4xMC4xOS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xOS4xMi4wMCNGb29kIHNlcnZpY2UgY29uZGltZW50IGRpc3BlbnNlcnMjNDguMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTkuMTMuMDAjRm9vZCBzZXJ2aWNlIHB1bmNoIGJvd2xzIzQ4LjEwLjE5LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE5LjE0LjAwI0Zvb2Qgc2VydmljZSB3aW5lIGNhcmFmZXMjNDguMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDguMTAuMTkuMTUuMDAjRm9vZCBzZXJ2aWNlIHRyYXlzIzQ4LjEwLjE5LjAwLjAwCi11bnNwc2M3IzQ4LjEwLjE5LjE2LjAwI0Zvb2Qgc2VydmljZSBuYXBraW4gZGlzcGVuc2VycyM0OC4xMC4xOS4wMC4wMAotdW5zcHNjNyM0OC4xMC4xOS4xNy4wMCNGb29kIHNlcnZpY2UgZm9uZHVlIHBvdHMjNDguMTAuMTkuMDAuMDAKLXVuc3BzYzcjNDguMTAuMjAuMDAuMDAjUmVzdGF1cmFudCBmdXJuaXR1cmUjNDguMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDguMTAuMjAuMDEuMDAjUmVzdGF1cmFudCBjaGFpcnMjNDguMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDguMTAuMjAuMDIuMDAjQm9vdGhzIzQ4LjEwLjIwLjAwLjAwCi11bnNwc2M3IzQ4LjEwLjIwLjAzLjAwI1NhbGFkIGJhcnMjNDguMTAuMjAuMDAuMDAKLXVuc3BzYzcjNDguMTAuMjAuMDQuMDAjVGFibGV0b3BzIzQ4LjEwLjIwLjAwLjAwCi11bnNwc2M3IzQ4LjEwLjIwLjA1LjAwI1Jlc3RhdXJhbnQgb3IgYmFyIHN0b29scyM0OC4xMC4yMC4wMC4wMAotdW5zcHNjNyM0OC4xMC4yMC4wNi4wMCNQZXJtYW5lbnQgYmFycyM0OC4xMC4yMC4wMC4wMAotdW5zcHNjNyM0OC4xMC4yMC4wNy4wMCNQb3J0YWJsZSBiYXJzIzQ4LjEwLjIwLjAwLjAwCi11bnNwc2M3IzQ4LjEwLjIxLjAwLjAwI1N0b3JhZ2UgYW5kIGhhbmRsaW5nIGVxdWlwbWVudCM0OC4xMC4wMC4wMC4wMAotdW5zcHNjNyM0OC4xMC4yMS4wMS4wMCNEaXNwbGF5IGNhc2VzIzQ4LjEwLjIxLjAwLjAwCi11bnNwc2M3IzQ4LjEwLjIxLjAyLjAwI0hlYXRlZCBkaXNwbGF5IGNhc2VzIzQ4LjEwLjIxLjAwLjAwCi11bnNwc2M3IzQ4LjEwLjIxLjAzLjAwI1JlZnJpZ2VyYXRlZCBkaXNwbGF5IGNhc2VzIzQ4LjEwLjIxLjAwLjAwCi11bnNwc2M3IzQ4LjEwLjIxLjA0LjAwI0ljZSBjcmVhbSBkaXNwbGF5IGNhc2VzIzQ4LjEwLjIxLjAwLjAwCi11bnNwc2M3IzQ4LjEwLjIxLjA1LjAwI0dsYXNzIGNoaWxsaW5nIGVxdWlwbWVudCM0OC4xMC4yMS4wMC4wMAotdW5zcHNjNyM0OC4xMC4yMS4wNi4wMCNDb29sIGNvbnRhaW5lcnMjNDguMTAuMjEuMDAuMDAKLXVuc3BzYzcjNDguMTEuMDAuMDAuMDAjVmVuZGluZyBtYWNoaW5lcyM0OC4wMC4wMC4wMC4wMAotdW5zcHNjNyM0OC4xMS4xMC4wMC4wMCNMaXF1aWQgdmVuZGluZyBtYWNoaW5lcyM0OC4xMS4wMC4wMC4wMAotdW5zcHNjNyM0OC4xMS4xMC4wMS4wMCNNYWNoaW5lcyBkaXNwZW5zaW5nIHNpbmdsZSBzZXJ2aW5ncyB3aXRoIGN1cHMjNDguMTEuMTAuMDAuMDAKLXVuc3BzYzcjNDguMTEuMTAuMDIuMDAjTWFjaGluZXMgZGlzcGVuc2luZyBidWxrIHF1YW50aXRpZXMjNDguMTEuMTAuMDAuMDAKLXVuc3BzYzcjNDguMTEuMTEuMDAuMDAjUGllY2UgYW5kIHBhcnQgdmVuZGluZyBtYWNoaW5lcyM0OC4xMS4wMC4wMC4wMAotdW5zcHNjNyM0OC4xMS4xMS4wMS4wMCNCb3R0bGUgb3IgY2FuIHZlbmRpbmcgbWFjaGluZXMjNDguMTEuMTEuMDAuMDAKLXVuc3BzYzcjNDguMTEuMTEuMDIuMDAjR3VtYmFsbCBjYW5keSBvciBjaGlsZHJlbnMgbm92ZWx0aWVzIG1hY2hpbmVzIzQ4LjExLjExLjAwLjAwCi11bnNwc2M3IzQ4LjExLjExLjAzLjAwI1NuYWNrIG9yIHNtYWxsIHBhY2thZ2UgZ29vZHMgZGlzcGxheSBtYWNoaW5lcyM0OC4xMS4xMS4wMC4wMAotdW5zcHNjNyM0OC4xMS4xMS4wNC4wMCNBIGxhIGNhcnRlIGZvb2RzIHZlbmRpbmcgbWFjaGluZXMjNDguMTEuMTEuMDAuMDAKLXVuc3BzYzcjNDguMTEuMTEuMDUuMDAjRnJvemVuIGNvbmZlY3Rpb25zIG1hY2hpbmVzIzQ4LjExLjExLjAwLjAwCi11bnNwc2M3IzQ4LjExLjExLjA2LjAwI1BlcnNvbmFsIGFjY29tbW9kYXRpb24gaXRlbSBkaXNwZW5zZXJzIzQ4LjExLjExLjAwLjAwCi11bnNwc2M3IzQ4LjExLjExLjA3LjAwI0NpZ2FyZXR0ZSBtYWNoaW5lcyM0OC4xMS4xMS4wMC4wMAotdW5zcHNjNyM0OC4xMS4xMi4wMC4wMCNQcmVwYXJlZCB0byBvcmRlciBmb29kIHZlbmRpbmcgbWFjaGluZXMjNDguMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDguMTEuMTIuMDEuMDAjRnJlbmNoIGZyeSB2ZW5kaW5nIG1hY2hpbmVzIzQ4LjExLjEyLjAwLjAwCi11bnNwc2M3IzQ4LjExLjEyLjAyLjAwI1BvcGNvcm4gdmVuZGluZyBtYWNoaW5lcyM0OC4xMS4xMi4wMC4wMAotdW5zcHNjNyM0OC4xMS4xMy4wMC4wMCNTZXJ2aWNlIGFuZCB0aWNrZXQgdmVuZGluZyBtYWNoaW5lcyM0OC4xMS4wMC4wMC4wMAotdW5zcHNjNyM0OC4xMS4xMy4wMS4wMCNUaWNrZXQgZGlzcGVuc2luZyBtYWNoaW5lcyM0OC4xMS4xMy4wMC4wMAotdW5zcHNjNyM0OC4xMS4xMy4wMi4wMCNJbnN1cmFuY2UgcG9saWN5IHZlbmRpbmcgbWFjaGluZXMjNDguMTEuMTMuMDAuMDAKLXVuc3BzYzcjNDguMTEuMTMuMDMuMDAjU3RhbXAgbWFjaGluZXMjNDguMTEuMTMuMDAuMDAKLXVuc3BzYzcjNDguMTEuMTQuMDAuMDAjQ3VycmVuY3kgdmVuZGluZyBtYWNoaW5lcyM0OC4xMS4wMC4wMC4wMAotdW5zcHNjNyM0OC4xMS4xNC4wMS4wMCNBdXRvbWF0aWMgdGVsbGVyIG1hY2hpbmVzIChBVE1zKSM0OC4xMS4xNC4wMC4wMAotdW5zcHNjNyM0OC4xMS4xNC4wMi4wMCNCaWxsIHRvIGNvaW4gY2hhbmdlcnMjNDguMTEuMTQuMDAuMDAKLXVuc3BzYzcjNDguMTEuMTQuMDMuMDAjRm9yZWlnbiBjdXJyZW5jeSBleGNoYW5nZSBtYWNoaW5lcyM0OC4xMS4xNC4wMC4wMAotdW5zcHNjNyM0OC4xMS4xNC4wNC4wMCNFbGVjdHJvbmljIGZ1bmRzIHRyYW5zZmVyIHBvaW50IG9mIHNhbGUgZXF1aXBtZW50IzQ4LjExLjE0LjAwLjAwCi11bnNwc2M3IzQ4LjEyLjAwLjAwLjAwI0dhbWJsaW5nIG9yIHdhZ2VyaW5nIGVxdWlwbWVudCM0OC4wMC4wMC4wMC4wMAotdW5zcHNjNyM0OC4xMi4xMS4wMC4wMCNDb2luIG9wZXJhdGVkIGdhbWJsaW5nIG1hY2hpbmVzIzQ4LjEyLjAwLjAwLjAwCi11bnNwc2M3IzQ4LjEyLjExLjAxLjAwI1Bva2VyIG9yIHNsb3QgbWFjaGluZXMjNDguMTIuMTEuMDAuMDAKLXVuc3BzYzcjNDguMTIuMTIuMDAuMDAjR2FtYmxpbmcgdGFibGVzIGFuZCBnYW1lcyM0OC4xMi4wMC4wMC4wMAotdW5zcHNjNyM0OC4xMi4xMi4wMS4wMCNSb3VsZXR0ZSB3aGVlbHMjNDguMTIuMTIuMDAuMDAKLXVuc3BzYzcjNDguMTIuMTIuMDIuMDAjQ2FyZCB0YWJsZXMjNDguMTIuMTIuMDAuMDAKLXVuc3BzYzcjNDguMTIuMTMuMDAuMDAjR2FtYmxpbmcgbWFuYWdlbWVudCBhbmQgbmV0d29ya2VkIHdhZ2VyaW5nIHN5c3RlbXMjNDguMTIuMDAuMDAuMDAKLXVuc3BzYzcjNDguMTIuMTMuMDEuMDAjVGFibGUgZ2FtYmxpbmcgbWFuYWdlbWVudCBzeXN0ZW1zIzQ4LjEyLjEzLjAwLjAwCi11bnNwc2M3IzQ4LjEyLjEzLjAyLjAwI05ldHdvcmtlZCB3YWdlcmluZyBnYW1lcyM0OC4xMi4xMy4wMC4wMAotdW5zcHNjNyM0OS4wMC4wMC4wMC4wMCNTcG9ydHMgYW5kIFJlY3JlYXRpb25hbCBFcXVpcG1lbnQgYW5kIFN1cHBsaWVzIGFuZCBBY2Nlc3NvcmllcyM0OS4wMC4wMC4wMC4wMAotdW5zcHNjNyM0OS4xMC4wMC4wMC4wMCNDb2xsZWN0aWJsZXMgYW5kIGF3YXJkcyM0OS4wMC4wMC4wMC4wMAotdW5zcHNjNyM0OS4xMC4xNS4wMC4wMCNBcnQjNDkuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMTAuMTUuMDEuMDAjUGFpbnRpbmdzIzQ5LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjEwLjE1LjAyLjAwI1NjdWxwdHVyZXMjNDkuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTAuMTUuMDMuMDAjU3RhdHVhcnkjNDkuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTAuMTUuMDQuMDAjUG9ydHJhaXRzIzQ5LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjEwLjE1LjA1LjAwI0RyYXdpbmdzIzQ5LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjEwLjE1LjA2LjAwI1BpY3R1cmVzIzQ5LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjEwLjE1LjA3LjAwI0xpdGhvZ3JhcGhzIzQ5LjEwLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjEwLjE1LjA4LjAwI1Bvc3RlcnMjNDkuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTAuMTUuMDkuMDAjRGVjb3JhdGl2ZSBwb3QjNDkuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTAuMTUuMTAuMDAjU2Nyb2xscyM0OS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OS4xMC4xNS4xMS4wMCNQaG90b2dyYXBocyM0OS4xMC4xNS4wMC4wMAotdW5zcHNjNyM0OS4xMC4xNS4xMi4wMCNGbG93ZXIgdmFzZXMjNDkuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTAuMTYuMDAuMDAjQ29sbGVjdGlibGVzIzQ5LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ5LjEwLjE2LjAxLjAwI0FudGlxdWVzIzQ5LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjEwLjE2LjAyLjAwI1NvdXZlbmlycyM0OS4xMC4xNi4wMC4wMAotdW5zcHNjNyM0OS4xMC4xNi4wMy4wMCNNaW50IGNvaW4gY29sbGVjdGlvbnMjNDkuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTAuMTYuMDQuMDAjU3RhbXAgY29sbGVjdGlvbnMjNDkuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTAuMTYuMDUuMDAjQW50aXF1ZSBydWdzIzQ5LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjEwLjE2LjA2LjAwI0RpZ2dpbmdzIzQ5LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjEwLjE2LjA3LjAwI0NvbWljIGJvb2sgY29sbGVjdGlvbnMjNDkuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTAuMTYuMDguMDAjQW50aXF1ZSBtdXNpY2FsIGluc3RydW1lbnRzIzQ5LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjEwLjE2LjA5LjAwI09ybmFtZW50cyBvciBkZWNvcmF0aW9ucyM0OS4xMC4xNi4wMC4wMAotdW5zcHNjNyM0OS4xMC4xNi4xMC4wMCNLZXkgY2hhaW5zIzQ5LjEwLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjEwLjE2LjExLjAwI0NoYXJtcyM0OS4xMC4xNi4wMC4wMAotdW5zcHNjNyM0OS4xMC4xNi4xMi4wMCNIb2xvZ3JhbXMjNDkuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTAuMTYuMTMuMDAjR2xhc3MgY3J5c3RhbHMjNDkuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTAuMTcuMDAuMDAjQXdhcmRzIzQ5LjEwLjAwLjAwLjAwCi11bnNwc2M3IzQ5LjEwLjE3LjAxLjAwI01lZGFscyM0OS4xMC4xNy4wMC4wMAotdW5zcHNjNyM0OS4xMC4xNy4wMi4wMCNUcm9waGllcyM0OS4xMC4xNy4wMC4wMAotdW5zcHNjNyM0OS4xMC4xNy4wMy4wMCNNZWRhbGxpb25zIzQ5LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ5LjEwLjE3LjA0LjAwI1BsYXF1ZXMjNDkuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNDkuMTAuMTcuMDUuMDAjQ2VydGlmaWNhdGVzIzQ5LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ5LjEwLjE3LjA2LjAwI1Bob3RvIGF3YXJkIzQ5LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ5LjEwLjE3LjA3LjAwI0FjaGlldmVtZW50IGNlcnRpZmljYXRlIzQ5LjEwLjE3LjAwLjAwCi11bnNwc2M3IzQ5LjEwLjE3LjA4LjAwI0Nyb3ducyM0OS4xMC4xNy4wMC4wMAotdW5zcHNjNyM0OS4xMS4wMC4wMC4wMCNNdXNpY2FsIGluc3RydW1lbnRzIzQ5LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ5LjExLjE1LjAwLjAwI0tleWJvYXJkIGluc3RydW1lbnRzIzQ5LjExLjAwLjAwLjAwCi11bnNwc2M3IzQ5LjExLjE1LjAxLjAwI011c2ljYWwgb3JnYW5zIzQ5LjExLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjExLjE1LjAyLjAwI0FjY29yZGlvbnMjNDkuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTEuMTUuMDMuMDAjUGlhbm9zIzQ5LjExLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjExLjE2LjAwLjAwI0JyYXNzIGluc3RydW1lbnRzIzQ5LjExLjAwLjAwLjAwCi11bnNwc2M3IzQ5LjExLjE2LjAxLjAwI1RydW1wZXRzIzQ5LjExLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjExLjE2LjAyLjAwI1Ryb21ib25lcyM0OS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0OS4xMS4xNi4wMy4wMCNTb3VzYXBob25lcyM0OS4xMS4xNi4wMC4wMAotdW5zcHNjNyM0OS4xMS4xNi4wNC4wMCNTYXhvcGhvbmVzIzQ5LjExLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjExLjE2LjA1LjAwI1doaXN0bGUjNDkuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTEuMTcuMDAuMDAjV29vZHdpbmQgaW5zdHJ1bWVudHMjNDkuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMTEuMTcuMDEuMDAjQ2xhcmluZXRzIzQ5LjExLjE3LjAwLjAwCi11bnNwc2M3IzQ5LjExLjE3LjAyLjAwI09ib2VzIzQ5LjExLjE3LjAwLjAwCi11bnNwc2M3IzQ5LjExLjE3LjAzLjAwI011c2ljYWwgZmx1dGVzIzQ5LjExLjE3LjAwLjAwCi11bnNwc2M3IzQ5LjExLjE3LjA0LjAwI1BpY2NvbG9lcyM0OS4xMS4xNy4wMC4wMAotdW5zcHNjNyM0OS4xMS4xNy4wNS4wMCNNdXNpY2FsIGNvcm5ldHMjNDkuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDkuMTEuMTcuMDYuMDAjQmFncGlwZXMjNDkuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDkuMTEuMTcuMDcuMDAjSGFybW9uaWNhcyM0OS4xMS4xNy4wMC4wMAotdW5zcHNjNyM0OS4xMS4xNy4wOC4wMCNLYXpvb3MjNDkuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNDkuMTEuMTguMDAuMDAjU3RyaW5nIGluc3RydW1lbnRzIzQ5LjExLjAwLjAwLjAwCi11bnNwc2M3IzQ5LjExLjE4LjAxLjAwI0hhcnBzaWNob3JkcyM0OS4xMS4xOC4wMC4wMAotdW5zcHNjNyM0OS4xMS4xOC4wMi4wMCNDbGF2aWNob3JkcyM0OS4xMS4xOC4wMC4wMAotdW5zcHNjNyM0OS4xMS4xOC4wMy4wMCNHdWl0YXJzIzQ5LjExLjE4LjAwLjAwCi11bnNwc2M3IzQ5LjExLjE4LjA0LjAwI1Zpb2xpbnMjNDkuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDkuMTEuMTguMDUuMDAjSGFycHMjNDkuMTEuMTguMDAuMDAKLXVuc3BzYzcjNDkuMTEuMTguMDYuMDAjQmFuam9lcyM0OS4xMS4xOC4wMC4wMAotdW5zcHNjNyM0OS4xMS4xOS4wMC4wMCNQZXJjdXNzaW9uIGluc3RydW1lbnRzIzQ5LjExLjAwLjAwLjAwCi11bnNwc2M3IzQ5LjExLjE5LjAxLjAwI0N5bWJhbHMjNDkuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDkuMTEuMTkuMDIuMDAjQmVsbHMjNDkuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDkuMTEuMTkuMDMuMDAjVGFtYm91cmluZXMjNDkuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDkuMTEuMTkuMDQuMDAjQ2FzdGFuZXRzIzQ5LjExLjE5LjAwLjAwCi11bnNwc2M3IzQ5LjExLjE5LjA1LjAwI0RydW1zIzQ5LjExLjE5LjAwLjAwCi11bnNwc2M3IzQ5LjExLjE5LjA2LjAwI1h5bG9waG9uZXMjNDkuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNDkuMTEuMTkuMDcuMDAjQm9kaHJhbiM0OS4xMS4xOS4wMC4wMAotdW5zcHNjNyM0OS4xMS4yMC4wMC4wMCNNdXNpY2FsIGluc3RydW1lbnQgcGFydHMgYW5kIGFjY2Vzc29yaWVzIzQ5LjExLjAwLjAwLjAwCi11bnNwc2M3IzQ5LjExLjIwLjAxLjAwI01ldHJvbm9tZXMjNDkuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDkuMTEuMjAuMDIuMDAjUmVlZHMjNDkuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDkuMTEuMjAuMDMuMDAjSW5zdHJ1bWVudCBzdHJpbmdzIG9yIHBpY2tzIzQ5LjExLjIwLjAwLjAwCi11bnNwc2M3IzQ5LjExLjIwLjA0LjAwI1R1bmluZyBwaW5zIzQ5LjExLjIwLjAwLjAwCi11bnNwc2M3IzQ5LjExLjIwLjA1LjAwI011c2ljYWwgaW5zdHJ1bWVudCBzdGFuZHMgb3Igc2hlZXQgaG9sZGVycyM0OS4xMS4yMC4wMC4wMAotdW5zcHNjNyM0OS4xMS4yMC4wNi4wMCNBY2Nlc3NvcmllcyBmb3Igc3RyaW5nZWQgaW5zdHJ1bWVudHMjNDkuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNDkuMTEuMjAuMDcuMDAjUGVyY3Vzc2lvbiBpbnN0cnVtZW50IGFjY2Vzc29yeSM0OS4xMS4yMC4wMC4wMAotdW5zcHNjNyM0OS4xMS4yMC4wOC4wMCNNdXNpYyBib3hlcyBvciBtZWNoYW5pc21zIzQ5LjExLjIwLjAwLjAwCi11bnNwc2M3IzQ5LjEyLjAwLjAwLjAwI0NhbXBpbmcgYW5kIG91dGRvb3IgZXF1aXBtZW50IGFuZCBhY2Nlc3NvcmllcyM0OS4wMC4wMC4wMC4wMAotdW5zcHNjNyM0OS4xMi4xNS4wMC4wMCNDYW1waW5nIGFuZCBvdXRkb29yIGVxdWlwbWVudCM0OS4xMi4wMC4wMC4wMAotdW5zcHNjNyM0OS4xMi4xNS4wMS4wMCNUYXJwYXVsaW5zIzQ5LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjEyLjE1LjAyLjAwI1NsZWVwaW5nIHBhZHMjNDkuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTIuMTUuMDMuMDAjVGVudHMjNDkuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTIuMTUuMDQuMDAjU2xlZXBpbmcgYmFncyM0OS4xMi4xNS4wMC4wMAotdW5zcHNjNyM0OS4xMi4xNS4wNS4wMCNJY2UgY2hlc3RzIzQ5LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjEyLjE1LjA2LjAwI1RlbnQgcmVwYWlyIGtpdHMjNDkuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTIuMTUuMDcuMDAjUG5ldW1hdGljIG1hdHRyZXNzZXMjNDkuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTIuMTUuMDguMDAjTW9zcXVpdG8gbmV0cyM0OS4xMi4xNS4wMC4wMAotdW5zcHNjNyM0OS4xMi4xNS4wOS4wMCNDYW1waW5nIG9yIG91dGRvb3Igc3RvdmVzIzQ5LjEyLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjEyLjE1LjEwLjAwI0RyaW5rIGNvb2xlcnMjNDkuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTIuMTYuMDAuMDAjQ2FtcGluZyBmdXJuaXR1cmUjNDkuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMTIuMTYuMDEuMDAjQ2FtcGluZyBjaGFpcnMgb3Igc3Rvb2xzIzQ5LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjEyLjE2LjAyLjAwI0NhbXBpbmcgdGFibGVzIzQ5LjEyLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjEyLjE2LjAzLjAwI0NhbXBpbmcgY290cyM0OS4xMi4xNi4wMC4wMAotdW5zcHNjNyM0OS4xMy4wMC4wMC4wMCNGaXNoaW5nIGFuZCBodW50aW5nIGVxdWlwbWVudCM0OS4wMC4wMC4wMC4wMAotdW5zcHNjNyM0OS4xMy4xNS4wMC4wMCNGaXNoaW5nIHRhY2tsZSM0OS4xMy4wMC4wMC4wMAotdW5zcHNjNyM0OS4xMy4xNS4wMS4wMCNGaXNoaW5nIHJvZHMjNDkuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTMuMTUuMDIuMDAjRmlzaGluZyBsaW5lIzQ5LjEzLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjEzLjE1LjAzLjAwI0Zpc2hpbmcgcmVlbHMjNDkuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTMuMTUuMDQuMDAjRmlzaGluZyBsdXJlcyM0OS4xMy4xNS4wMC4wMAotdW5zcHNjNyM0OS4xMy4xNS4wNS4wMCNGaXNoaW5nIGJhaXQjNDkuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTMuMTUuMDYuMDAjRmlzaGluZyB3ZWlnaHRzIG9yIHNpbmtlcnMjNDkuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTMuMTYuMDAuMDAjSHVudGluZyBwcm9kdWN0cyM0OS4xMy4wMC4wMC4wMAotdW5zcHNjNyM0OS4xMy4xNi4wMS4wMCNBbmltYWwgY2FsbHMjNDkuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTMuMTYuMDIuMDAjU3BvcnRpbmcgZGVjb3lzIzQ5LjEzLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjEzLjE2LjAzLjAwI1Nwb3J0aW5nIHRyYXBzIzQ5LjEzLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjEzLjE2LjA0LjAwI1Nwb3J0aW5nIHNob3RndW5zIzQ5LjEzLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjEzLjE2LjA1LjAwI1Nwb3J0aW5nIHJpZmxlcyM0OS4xMy4xNi4wMC4wMAotdW5zcHNjNyM0OS4xMy4xNi4wNi4wMCNTcG9ydGluZyBhbW11bml0aW9uIzQ5LjEzLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjEzLjE2LjA3LjAwI0d1biBiYXJyZWwjNDkuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTQuMDAuMDAuMDAjV2F0ZXJzcG9ydHMgZXF1aXBtZW50IzQ5LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ5LjE0LjE1LjAwLjAwI1NjdWJhIGFuZCBzbm9ya2VsaW5nIGdlYXIjNDkuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMTQuMTUuMDEuMDAjQm91eWFuY3kgY29tcGVuc2F0b3JzIzQ5LjE0LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE0LjE1LjAyLjAwI1NjdWJhIHRhbmtzIzQ5LjE0LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE0LjE1LjAzLjAwI1NjdWJhIHJlZ3VsYXRvcnMjNDkuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTQuMTUuMDQuMDAjRGl2aW5nIGluc3RydW1lbnRzIG9yIGFjY2Vzc29yaWVzIzQ5LjE0LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE0LjE1LjA1LjAwI01hc2tzIG9yIGZpbnMgb3Igc25vcmtlbHMjNDkuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTQuMTUuMDYuMDAjV2V0c3VpdHMjNDkuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTQuMTUuMDcuMDAjRHJ5c3VpdHMjNDkuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTQuMTYuMDAuMDAjU3VyZiBhbmQgc3dpbSBlcXVpcG1lbnQgYW5kIGFjY2Vzc29yaWVzIzQ5LjE0LjAwLjAwLjAwCi11bnNwc2M3IzQ5LjE0LjE2LjAyLjAwI1dha2Vib2FyZHMgb3Iga25lZWJvYXJkcyBvciBib29naWVib2FyZHMjNDkuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTQuMTYuMDMuMDAjV2F0ZXIgc2tpcyBvciBhY2Nlc3NvcmllcyM0OS4xNC4xNi4wMC4wMAotdW5zcHNjNyM0OS4xNC4xNi4wNC4wMCNXaW5kc3VyZmluZyBlcXVpcG1lbnQjNDkuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTQuMTYuMDUuMDAjU3VyZmJvYXJkcyM0OS4xNC4xNi4wMC4wMAotdW5zcHNjNyM0OS4xNC4xNi4wNi4wMCNTd2ltIGdvZ2dsZXMgb3Igc3dpbSBmaW5zIzQ5LjE0LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE0LjE2LjA3LjAwI1BhcmFzYWlsaW5nIGVxdWlwbWVudCM0OS4xNC4xNi4wMC4wMAotdW5zcHNjNyM0OS4xNS4wMC4wMC4wMCNXaW50ZXIgc3BvcnRzIGVxdWlwbWVudCM0OS4wMC4wMC4wMC4wMAotdW5zcHNjNyM0OS4xNS4xNS4wMC4wMCNTa2lpbmcgYW5kIHNub3dib2FyZGluZyBlcXVpcG1lbnQjNDkuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMTUuMTUuMDEuMDAjU2tpIGJvb3RzIzQ5LjE1LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE1LjE1LjAyLjAwI1NraXMjNDkuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTUuMTUuMDMuMDAjU2tpIHBvbGVzIzQ5LjE1LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE1LjE1LjA0LjAwI0JpbmRpbmdzIzQ5LjE1LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE1LjE1LjA1LjAwI1Nub3dib2FyZHMjNDkuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTUuMTYuMDAuMDAjU2thdGluZyBhbmQgaWNlIGhvY2tleSBlcXVpcG1lbnQjNDkuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMTUuMTYuMDEuMDAjSG9ja2V5IHB1Y2tzIzQ5LjE1LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE1LjE2LjAyLjAwI0ljZSBza2F0ZXMjNDkuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTUuMTYuMDMuMDAjSG9ja2V5IHN0aWNrcyM0OS4xNS4xNi4wMC4wMAotdW5zcHNjNyM0OS4xNi4wMC4wMC4wMCNGaWVsZCBhbmQgY291cnQgc3BvcnRzIGVxdWlwbWVudCM0OS4wMC4wMC4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNS4wMC4wMCNGaWVsZCBzcG9ydHMgZXF1aXBtZW50IzQ5LjE2LjAwLjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE1LjAxLjAwI0Zvb3RiYWxsIGJsb2NraW5nIHNsZWRzIzQ5LjE2LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE1LjAyLjAwI0Jhc2ViYWxsIGdsb3ZlcyM0OS4xNi4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNS4wMy4wMCNCYXNlYmFsbHMjNDkuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTUuMDQuMDAjRm9vdGJhbGxzIzQ5LjE2LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE1LjA1LjAwI1NvY2NlciBiYWxscyM0OS4xNi4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNS4wNi4wMCNCYXNlYmFsbCBiYXRzIzQ5LjE2LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE1LjA3LjAwI0Jhc2ViYWxsIGJhc2VzIzQ5LjE2LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE1LjA4LjAwI1BpdGNoaW5nIG1hY2hpbmVzIzQ5LjE2LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE1LjA5LjAwI1NvZnRiYWxscyM0OS4xNi4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNS4xMC4wMCNGb290YmFsbCB0YWNrbGluZyBkdW1taWVzIzQ5LjE2LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE1LjExLjAwI0xhY3Jvc3NlIHN0aWNrcyM0OS4xNi4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNS4xMi4wMCNMYWNyb3NzZSBiYWxscyM0OS4xNi4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNS4xMy4wMCNGaWVsZCBob2NrZXkgc3RpY2tzIzQ5LjE2LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE1LjE0LjAwI0ZpZWxkIGhvY2tleSBiYWxscyM0OS4xNi4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNS4xNS4wMCNUZWFtIGhhbmRiYWxsIGJhbGxzIzQ5LjE2LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE1LjE2LjAwI1RlYW0gaGFuZGJhbGwgc2Nob29sIHNldHMjNDkuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTUuMTcuMDAjQmFzZWJhbGwgb3Igc29mdGJhbGwgcHJvdGVjdGl2ZSBnZWFyIzQ5LjE2LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE1LjE4LjAwI0Jhc2ViYWxsIGJhdHRpbmcgYWlkcyM0OS4xNi4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNS4xOS4wMCNCYXNlYmFsbCBiYWNrc3RvcHMgb3IgZmVuY2VzIzQ5LjE2LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE1LjIwLjAwI1NvZnRiYWxsIGJhdHMjNDkuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTUuMjEuMDAjU29mdGJhbGwgZ2xvdmVzIzQ5LjE2LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE1LjIyLjAwI0Zvb3RiYWxsIGtpY2tpbmcgdGVlcyM0OS4xNi4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNS4yMy4wMCNGbGFnIGZvb3RiYWxsIGdlYXIjNDkuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTUuMjQuMDAjU29jY2VyIGZpZWxkIG1hcmtpbmcgZXF1aXBtZW50IzQ5LjE2LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE1LjI1LjAwI1NvY2NlciBwcm90ZWN0aXZlIGVxdWlwbWVudCM0OS4xNi4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNS4yNi4wMCNTb2NjZXIgdHJhaW5pbmcgYWlkcyM0OS4xNi4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNi4wMC4wMCNSYWNxdWV0IGFuZCBjb3VydCBzcG9ydHMgZXF1aXBtZW50IzQ5LjE2LjAwLjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE2LjAxLjAwI1JhY3F1ZXRiYWxsIHJhY2tldHMjNDkuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTYuMDIuMDAjQmFkbWludG9uIHJhY2tldHMjNDkuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTYuMDMuMDAjQmFza2V0YmFsbHMjNDkuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTYuMDQuMDAjVGVubmlzIGJhbGxzIzQ5LjE2LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE2LjA1LjAwI1JhY3F1ZXQgYmFsbHMjNDkuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTYuMDYuMDAjU3F1YXNoIGJhbGxzIzQ5LjE2LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE2LjA3LjAwI1Rlbm5pcyByYWNxdWV0cyM0OS4xNi4xNi4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNi4wOC4wMCNWb2xsZXliYWxscyM0OS4xNi4xNi4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNi4wOS4wMCNCYWRtaW50b24gYmlyZGllcyBvciBzaHV0dGxlY29ja3MjNDkuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTYuMTAuMDAjU3F1YXNoIHJhY3F1ZXRzIzQ5LjE2LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE2LjExLjAwI1Rlbm5pcyB0cmFpbmluZyBhaWRzIzQ5LjE2LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE2LjEyLjAwI1Rlbm5pcyBjb3VydCBlcXVpcG1lbnQjNDkuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTYuMTMuMDAjVm9sbGV5YmFsbCBzdG9yYWdlIGZvciBiYWxscyBvciBuZXRzIzQ5LjE2LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE2LjE0LjAwI1ZvbGxleWJhbGwgZ3ltbmFzaXVtIHN0YW5kYXJkcyM0OS4xNi4xNi4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNi4xNS4wMCNCYXNrZXRiYWxsIGNvbXBsZXRlIGdhbWUgc3lzdGVtcyM0OS4xNi4xNi4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNi4xNi4wMCNGbG9vciBob2NrZXkgcHJvdGVjdGl2ZSBlcXVpcG1lbnQjNDkuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTYuMTcuMDAjVGV0aGVyIHBvbGVzIzQ5LjE2LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE2LjE4LjAwI1RldGhlciBiYWxscyM0OS4xNi4xNi4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNy4wMC4wMCNUcmFjayBzcG9ydHMgZXF1aXBtZW50IzQ5LjE2LjAwLjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE3LjAxLjAwI0phdmVsaW5zIzQ5LjE2LjE3LjAwLjAwCi11bnNwc2M3IzQ5LjE2LjE3LjAyLjAwI0p1bXBpbmcgYmFycyM0OS4xNi4xNy4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNy4wMy4wMCNEaXNjdXMjNDkuMTYuMTcuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTcuMDQuMDAjU2hvdHB1dHMjNDkuMTYuMTcuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTcuMDUuMDAjVmF1bHRpbmcgcG9sZXMjNDkuMTYuMTcuMDAuMDAKLXVuc3BzYzcjNDkuMTYuMTcuMDYuMDAjSHVyZGxlcyM0OS4xNi4xNy4wMC4wMAotdW5zcHNjNyM0OS4xNi4xNy4wNy4wMCNCYXRvbnMjNDkuMTYuMTcuMDAuMDAKLXVuc3BzYzcjNDkuMTcuMDAuMDAuMDAjR3ltbmFzdGljcyBhbmQgYm94aW5nIGVxdWlwbWVudCM0OS4wMC4wMC4wMC4wMAotdW5zcHNjNyM0OS4xNy4xNS4wMC4wMCNHeW1uYXN0aWNzIGVxdWlwbWVudCM0OS4xNy4wMC4wMC4wMAotdW5zcHNjNyM0OS4xNy4xNS4wMS4wMCNHeW1uYXN0aWMgYmFycyBvciBiZWFtcyM0OS4xNy4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNy4xNS4wMi4wMCNHeW1uYXN0aWMgcm9wZXMgb3IgcmluZ3Mgb3IgY2xpbWJpbmcgYWNjZXNzb3JpZXMjNDkuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTcuMTUuMDMuMDAjR3ltbmFzdGljIHZhdWx0aW5nIGVxdWlwbWVudCM0OS4xNy4xNS4wMC4wMAotdW5zcHNjNyM0OS4xNy4xNS4wNC4wMCNHeW1uYXN0aWMgdHJhbXBvbGluZXMjNDkuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTcuMTUuMDUuMDAjQmFsYW5jZSBlcXVpcG1lbnQjNDkuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTcuMTYuMDAuMDAjQm94aW5nIGVxdWlwbWVudCM0OS4xNy4wMC4wMC4wMAotdW5zcHNjNyM0OS4xNy4xNi4wMS4wMCNCb3hpbmcgcmluZ3MjNDkuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTcuMTYuMDIuMDAjUHVuY2hpbmcgYmFncyM0OS4xNy4xNi4wMC4wMAotdW5zcHNjNyM0OS4xNy4xNi4wMy4wMCNCb3hpbmcgZ2xvdmVzIzQ5LjE3LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE4LjAwLjAwLjAwI1RhcmdldCBhbmQgdGFibGUgZ2FtZXMgYW5kIGVxdWlwbWVudCM0OS4wMC4wMC4wMC4wMAotdW5zcHNjNyM0OS4xOC4xNS4wMC4wMCNUYWJsZSBnYW1lcyBhbmQgZXF1aXBtZW50IzQ5LjE4LjAwLjAwLjAwCi11bnNwc2M3IzQ5LjE4LjE1LjAxLjAwI0JpbGxpYXJkIHRhYmxlcyM0OS4xOC4xNS4wMC4wMAotdW5zcHNjNyM0OS4xOC4xNS4wMi4wMCNQb29sIGN1ZXMjNDkuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTguMTUuMDMuMDAjU2h1ZmZsZWJvYXJkIzQ5LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE4LjE1LjA0LjAwI1BpbmJhbGwgZ2FtZXMjNDkuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTguMTUuMDUuMDAjQmlsbGlhcmQgYmFsbHMjNDkuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTguMTUuMDYuMDAjQWlyIGhvY2tleSB0YWJsZXMgb3IgYWNjZXNzb3JpZXMjNDkuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTguMTUuMDcuMDAjVGVubmlzIHRhYmxlcyM0OS4xOC4xNS4wMC4wMAotdW5zcHNjNyM0OS4xOC4xNS4wOC4wMCNUYWJsZSB0ZW5uaXMgcGFkZGxlcyM0OS4xOC4xNS4wMC4wMAotdW5zcHNjNyM0OS4xOC4xNS4wOS4wMCNUYWJsZSB0ZW5uaXMgYmFsbHMjNDkuMTguMTUuMDAuMDAKLXVuc3BzYzcjNDkuMTguMTUuMTAuMDAjRm9vc2JhbGwgdGFibGVzIzQ5LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE4LjE1LjExLjAwI0Zvb3NiYWxscyM0OS4xOC4xNS4wMC4wMAotdW5zcHNjNyM0OS4xOC4xNS4xMi4wMCNGb29zYmFsbCByZXBsYWNlbWVudCBwbGF5ZXJzIzQ5LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE4LjE1LjEzLjAwI0JpbGxpYXJkIGN1ZSB0aXBzIzQ5LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE4LjE1LjE0LjAwI0JpbGxpYXJkIGNoYWxrIzQ5LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE4LjE1LjE1LjAwI0JpbGxpYXJkIHJhY2tzIzQ5LjE4LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjE4LjE2LjAwLjAwI1RhcmdldCBnYW1lcyBhbmQgZXF1aXBtZW50IzQ5LjE4LjAwLjAwLjAwCi11bnNwc2M3IzQ5LjE4LjE2LjAxLjAwI0FyY2hlcnkgdGFyZ2V0cyM0OS4xOC4xNi4wMC4wMAotdW5zcHNjNyM0OS4xOC4xNi4wMi4wMCNBcmNoZXJ5IGJvd3MjNDkuMTguMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTguMTYuMDMuMDAjQXJjaGVyeSBhcnJvd3MjNDkuMTguMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTguMTYuMDQuMDAjRGFydHMjNDkuMTguMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTguMTYuMDUuMDAjRGFydCBib2FyZHMjNDkuMTguMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTguMTYuMDYuMDAjVHJhcHNob290aW5nIGVxdWlwbWVudCM0OS4xOC4xNi4wMC4wMAotdW5zcHNjNyM0OS4xOC4xNi4wNy4wMCNUaHJvd2luZyB0YXJnZXRzIzQ5LjE4LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE4LjE2LjA4LjAwI0FyY2hlcnkgYm93IHN0cmluZ3MjNDkuMTguMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTguMTYuMDkuMDAjQXJjaGVyeSBnbG92ZXMjNDkuMTguMTYuMDAuMDAKLXVuc3BzYzcjNDkuMTguMTYuMTAuMDAjQXJjaGVyeSBhcm0gZ3VhcmRzIzQ5LjE4LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjE4LjE2LjExLjAwI0FyY2hlcnkgdGFyZ2V0IHN0YW5kcyM0OS4xOC4xNi4wMC4wMAotdW5zcHNjNyM0OS4xOC4xNi4xMi4wMCNBcmNoZXJ5IGJhY2tzdG9wcyM0OS4xOC4xNi4wMC4wMAotdW5zcHNjNyM0OS4yMC4wMC4wMC4wMCNGaXRuZXNzIGVxdWlwbWVudCM0OS4wMC4wMC4wMC4wMAotdW5zcHNjNyM0OS4yMC4xNS4wMC4wMCNBZXJvYmljIHRyYWluaW5nIGVxdWlwbWVudCM0OS4yMC4wMC4wMC4wMAotdW5zcHNjNyM0OS4yMC4xNS4wMS4wMCNUcmVhZG1pbGxzIzQ5LjIwLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIwLjE1LjAyLjAwI1N0YWlyIGNsaW1iZXJzIzQ5LjIwLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIwLjE1LjAzLjAwI1N0YXRpb25hcnkgYmljeWNsZXMjNDkuMjAuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjAuMTUuMDQuMDAjUm93aW5nIG1hY2hpbmVzIzQ5LjIwLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIwLjE1LjEyLjAwI0p1bXAgcm9wZXMjNDkuMjAuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjAuMTUuMTMuMDAjRXhlcmNpc2UgdHJhbXBvbGluZXMjNDkuMjAuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjAuMTUuMTQuMDAjRXhlcmNpc2UgYmFsbHMjNDkuMjAuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjAuMTUuMTUuMDAjU3RlcCBhZXJvYmljIGVxdWlwbWVudCM0OS4yMC4xNS4wMC4wMAotdW5zcHNjNyM0OS4yMC4xNi4wMC4wMCNXZWlnaHQgYW5kIHJlc2lzdGFuY2UgdHJhaW5pbmcgZXF1aXBtZW50IzQ5LjIwLjAwLjAwLjAwCi11bnNwc2M3IzQ5LjIwLjE2LjAxLjAwI0R1bWJiZWxscyM0OS4yMC4xNi4wMC4wMAotdW5zcHNjNyM0OS4yMC4xNi4wMi4wMCNCYXJiZWxscyM0OS4yMC4xNi4wMC4wMAotdW5zcHNjNyM0OS4yMC4xNi4wMy4wMCNMb3dlciBib2R5IHJlc2lzdGFuY2UgbWFjaGluZXMjNDkuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMjAuMTYuMDQuMDAjV2VpZ2h0IGJlbmNoZXMgb3IgcmFja3MjNDkuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMjAuMTYuMDUuMDAjVXBwZXIgYm9keSByZXNpc3RhbmNlIG1hY2hpbmVzIzQ5LjIwLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjIwLjE2LjA2LjAwI0ZpdG5lc3Mgd2VpZ2h0cyM0OS4yMC4xNi4wMC4wMAotdW5zcHNjNyM0OS4yMC4xNi4wNy4wMCNQaWxhdGVzIG1hY2hpbmVzIzQ5LjIwLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjIwLjE2LjA4LjAwI0dyaXAgc3RyZW5ndGhlbmVyIzQ5LjIwLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjIwLjE2LjA5LjAwI1Jlc2lzdGFuY2UgYmFuZHMjNDkuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMjAuMTYuMTAuMDAjUmVzaXN0YW5jZSB0dWJlcyM0OS4yMC4xNi4wMC4wMAotdW5zcHNjNyM0OS4yMS4wMC4wMC4wMCNPdGhlciBzcG9ydHMjNDkuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMjEuMTYuMDAuMDAjR29sZiBlcXVpcG1lbnQjNDkuMjEuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMjEuMTYuMDEuMDAjR29sZiBiYWdzIzQ5LjIxLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjIxLjE2LjAyLjAwI0dvbGYgYmFsbHMjNDkuMjEuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMjEuMTYuMDMuMDAjR29sZiBjbHVicyM0OS4yMS4xNi4wMC4wMAotdW5zcHNjNyM0OS4yMS4xNi4wNC4wMCNHb2xmIHRlZXMjNDkuMjEuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMjEuMTYuMDUuMDAjR29sZiBjbHViIGhlYWQgY292ZXJzIzQ5LjIxLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjIxLjE2LjA2LjAwI0dvbGYgZ2xvdmVzIzQ5LjIxLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjIxLjE2LjA3LjAwI0Rpdm90IGZpeGVycyM0OS4yMS4xNi4wMC4wMAotdW5zcHNjNyM0OS4yMS4xNy4wMC4wMCNCb3dsaW5nIGVxdWlwbWVudCBhbmQgc3VwcGxpZXMgYW5kIGFjY2Vzc29yaWVzIzQ5LjIxLjAwLjAwLjAwCi11bnNwc2M3IzQ5LjIxLjE3LjAxLjAwI0Jvd2xpbmcgZXF1aXBtZW50IzQ5LjIxLjE3LjAwLjAwCi11bnNwc2M3IzQ5LjIxLjE3LjAyLjAwI0Jvd2xpbmcgc3VwcGxpZXMjNDkuMjEuMTcuMDAuMDAKLXVuc3BzYzcjNDkuMjEuMTcuMDMuMDAjQm93bGluZyBhY2Nlc3NvcmllcyM0OS4yMS4xNy4wMC4wMAotdW5zcHNjNyM0OS4yMS4xOC4wMC4wMCNQaHlzaWNhbCBlZHVjYXRpb24gY2xhc3Nyb29tIGVxdWlwbWVudCM0OS4yMS4wMC4wMC4wMAotdW5zcHNjNyM0OS4yMS4xOC4wMS4wMCNQYXJhY2h1dGUgZXF1aXBtZW50IzQ5LjIxLjE4LjAwLjAwCi11bnNwc2M3IzQ5LjIxLjE4LjAyLjAwI0h1bGEgaG9vcHMgb3IgaG9vcCBlcXVpcG1lbnQjNDkuMjEuMTguMDAuMDAKLXVuc3BzYzcjNDkuMjEuMTguMDMuMDAjT3JpZW50ZWVyaW5nIGVxdWlwbWVudCM0OS4yMS4xOC4wMC4wMAotdW5zcHNjNyM0OS4yMS4xOC4wNC4wMCNUZWFtIGlkZW50aWZpY2F0aW9uIG1hdGVyaWFscyBvciBtYXJrZXJzIzQ5LjIxLjE4LjAwLjAwCi11bnNwc2M3IzQ5LjIxLjE4LjA1LjAwI0xhbnlhcmRzIzQ5LjIxLjE4LjAwLjAwCi11bnNwc2M3IzQ5LjIxLjE4LjA2LjAwI1BoeXNpY2FsIGVkdWNhdGlvbiBlcXVpcG1lbnQgc3RvcmFnZSM0OS4yMS4xOC4wMC4wMAotdW5zcHNjNyM0OS4yMS4xOC4wNy4wMCNQaHlzaWNhbCBlZHVjYXRpb24gYXNzZXNzbWVudCB0b29scyM0OS4yMS4xOC4wMC4wMAotdW5zcHNjNyM0OS4yMi4wMC4wMC4wMCNTcG9ydHMgYWNjZXNzb3JpZXMjNDkuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMjIuMTUuMDAuMDAjU3BvcnQgYWNjZXNzb3JpZXMjNDkuMjIuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMjIuMTUuMDEuMDAjU3BvcnQgc2NvcmVib2FyZHMjNDkuMjIuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjIuMTUuMDIuMDAjU3BvcnQgZ29hbHMjNDkuMjIuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjIuMTUuMDMuMDAjU3BvcnQgc2FmZXR5IGVxdWlwbWVudCBvdGhlciB0aGFuIGhlYWRnZWFyIzQ5LjIyLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIyLjE1LjA0LjAwI1Nwb3J0IHNhZmV0eSBoZWFkZ2VhciM0OS4yMi4xNS4wMC4wMAotdW5zcHNjNyM0OS4yMi4xNS4wNS4wMCNTcG9ydCBuZXRzIG9yIG5ldHRpbmcjNDkuMjIuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjIuMTUuMDYuMDAjU3BvcnQgbWF0cyBvciBwYWRkaW5nIzQ5LjIyLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIyLjE1LjA3LjAwI0Jhc2tldGJhbGwgYmFja2JvYXJkcyM0OS4yMi4xNS4wMC4wMAotdW5zcHNjNyM0OS4yMi4xNS4wOC4wMCNCYXNrZXRiYWxsIGhvb3AjNDkuMjIuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjIuMTUuMDkuMDAjUm9sbGVyIHNrYXRlcyBvciByb2xsZXIgYmxhZGVzIzQ5LjIyLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIzLjAwLjAwLjAwI1RveXMgYW5kIGdhbWVzIzQ5LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ5LjIzLjE1LjAwLjAwI1RveXMjNDkuMjMuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMjMuMTUuMDEuMDAjTXVzaWNhbCB0b3lzIzQ5LjIzLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIzLjE1LjAyLjAwI0VkdWNhdGlvbmFsIHRveXMjNDkuMjMuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjMuMTUuMDMuMDAjVG95IGJhbGxvb25zIG9yIGJhbGxzIzQ5LjIzLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIzLjE1LjA0LjAwI0RvbGxzIzQ5LjIzLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIzLjE1LjA1LjAwI0RvbGwgaG91c2VzIzQ5LjIzLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIzLjE1LjA2LjAwI1N0dWZmZWQgYW5pbWFscyBvciBwdXBwZXRzIzQ5LjIzLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIzLjE1LjA3LjAwI1BsYXlob3VzZXMjNDkuMjMuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjMuMTUuMDguMDAjQnVpbGRpbmcgYmxvY2tzIzQ5LjIzLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIzLjE1LjA5LjAwI1JpZGluZyB0b3lzIzQ5LjIzLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIzLjE1LjEwLjAwI1B1bGwgdG95cyM0OS4yMy4xNS4wMC4wMAotdW5zcHNjNyM0OS4yMy4xNS4xMS4wMCNDaGlsZHJlbnMgc2NpZW5jZSBraXRzIzQ5LjIzLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIzLjE1LjEyLjAwI1RveSB2ZWhpY2xlcyM0OS4yMy4xNS4wMC4wMAotdW5zcHNjNyM0OS4yMy4xNS4xMy4wMCNUb3kgdHJhaW5zIzQ5LjIzLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIzLjE1LjE0LjAwI0luZmxhdGFibGUgdG95cyM0OS4yMy4xNS4wMC4wMAotdW5zcHNjNyM0OS4yMy4xNS4xNS4wMCNEb2xsIHBhcnRzIG9yIGFjY2Vzc29yaWVzIzQ5LjIzLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIzLjE1LjE2LjAwI1lvIHlvcyM0OS4yMy4xNS4wMC4wMAotdW5zcHNjNyM0OS4yMy4xNS4xNy4wMCNLaXRlcyM0OS4yMy4xNS4wMC4wMAotdW5zcHNjNyM0OS4yMy4xNS4xOC4wMCNQb2dzIzQ5LjIzLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIzLjE1LjE5LjAwI0thbGVpZG9zY29wZXMjNDkuMjMuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjMuMTUuMjAuMDAjUG9tIHBvbXMjNDkuMjMuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjMuMTUuMjEuMDAjUGluYXRhcyM0OS4yMy4xNS4wMC4wMAotdW5zcHNjNyM0OS4yMy4xNS4yMi4wMCNCb29tZXJhbmdzIzQ5LjIzLjE1LjAwLjAwCi11bnNwc2M3IzQ5LjIzLjE1LjIzLjAwI0ZseWluZyBkaXNjcyM0OS4yMy4xNS4wMC4wMAotdW5zcHNjNyM0OS4yMy4xNS4yNC4wMCNUb3kgcGFpbHMjNDkuMjMuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjMuMTYuMDAuMDAjR2FtZXMjNDkuMjMuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMjMuMTYuMDEuMDAjRWR1Y2F0aW9uYWwgZ2FtZXMjNDkuMjMuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMjMuMTYuMDIuMDAjQm9hcmQgZ2FtZXMjNDkuMjMuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMjMuMTYuMDMuMDAjUGxheWluZyBjYXJkcyM0OS4yMy4xNi4wMC4wMAotdW5zcHNjNyM0OS4yMy4xNi4wNC4wMCNWaWRlbyBnYW1lcyM0OS4yMy4xNi4wMC4wMAotdW5zcHNjNyM0OS4yMy4xNi4wNS4wMCNQdXp6bGVzIzQ5LjIzLjE2LjAwLjAwCi11bnNwc2M3IzQ5LjIzLjE2LjA2LjAwI0RpY2UjNDkuMjMuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMjQuMDAuMDAuMDAjUmVjcmVhdGlvbiBhbmQgcGxheWdyb3VuZCBhbmQgc3dpbW1pbmcgYW5kIHNwYSBlcXVpcG1lbnQgYW5kIHN1cHBsaWVzIzQ5LjAwLjAwLjAwLjAwCi11bnNwc2M3IzQ5LjI0LjE1LjAwLjAwI1BsYXlncm91bmQgZXF1aXBtZW50IzQ5LjI0LjAwLjAwLjAwCi11bnNwc2M3IzQ5LjI0LjE1LjAxLjAwI1BsYXlncm91bmQgc3dpbmdzIzQ5LjI0LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjI0LjE1LjAyLjAwI1BsYXlncm91bmQgY2xpbWJpbmcgYXBwYXJhdHVzIzQ5LjI0LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjI0LjE1LjAzLjAwI1BsYXlncm91bmQgbWVycnkgZ28gcm91bmRzIzQ5LjI0LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjI0LjE1LjA0LjAwI1BsYXlncm91bmQgc2xpZGVzIzQ5LjI0LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjI0LjE1LjA1LjAwI1BsYXlncm91bmQgc2VlIHNhd3MjNDkuMjQuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjQuMTUuMDYuMDAjUGxheWdyb3VuZCB0dW5uZWxzIzQ5LjI0LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjI0LjE1LjA3LjAwI1BsYXlncm91bmQgc2FuZGJveGVzIzQ5LjI0LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjI0LjE1LjA4LjAwI1BsYXlncm91bmQgYmxlYWNoZXJzIzQ5LjI0LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjI0LjE1LjA5LjAwI1dhbGwgY2xpbWJpbmcgZXF1aXBtZW50IzQ5LjI0LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjI0LjE1LjEwLjAwI1JvcGUgY2xpbWJpbmcgZXF1aXBtZW50IzQ5LjI0LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjI0LjE2LjAwLjAwI1JlY3JlYXRpb25hbCBlcXVpcG1lbnQjNDkuMjQuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMjQuMTYuMDEuMDAjQ3JvcXVldCBzZXRzIzQ5LjI0LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjI0LjE2LjAyLjAwI0xhd24gYm93bGluZyBlcXVpcG1lbnQjNDkuMjQuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMjQuMTYuMDMuMDAjSG9yc2VzaG9lIGVxdWlwbWVudCM0OS4yNC4xNi4wMC4wMAotdW5zcHNjNyM0OS4yNC4xNi4wNC4wMCNMYXduIGRhcnRzIzQ5LjI0LjE2LjAwLjAwCi11bnNwc2M3IzQ5LjI0LjE3LjAwLjAwI1N3aW1taW5nIHBvb2wgYW5kIHNwYSBlcXVpcG1lbnQgYW5kIHN1cHBsaWVzIzQ5LjI0LjAwLjAwLjAwCi11bnNwc2M3IzQ5LjI0LjE3LjAxLjAwI0RpdmluZyBib2FyZHMjNDkuMjQuMTcuMDAuMDAKLXVuc3BzYzcjNDkuMjQuMTcuMDIuMDAjUG9vbCBzbGlkZXMjNDkuMjQuMTcuMDAuMDAKLXVuc3BzYzcjNDkuMjQuMTcuMDMuMDAjU3BhIGJsb3dlciM0OS4yNC4xNy4wMC4wMAotdW5zcHNjNyM0OS4yNC4xNy4wNC4wMCNXYXRlciB0ZXN0IGtpdCBvciBzb2x1dGlvbnMjNDkuMjQuMTcuMDAuMDAKLXVuc3BzYzcjNDkuMjQuMTcuMDUuMDAjQXV0b21hdGljIHBvb2wgY2xlYW5lciM0OS4yNC4xNy4wMC4wMAotdW5zcHNjNyM0OS4yNC4xNy4wNi4wMCNTb2xhciBibGFua2V0IzQ5LjI0LjE3LjAwLjAwCi11bnNwc2M3IzQ5LjI0LjE3LjA3LjAwI1Bvb2wgb3Igc3BhIGhlYXRlciM0OS4yNC4xNy4wMC4wMAotdW5zcHNjNyM0OS4yNC4xNy4wOC4wMCNPem9uZSBnZW5lcmF0b3IjNDkuMjQuMTcuMDAuMDAKLXVuc3BzYzcjNDkuMjQuMTcuMDkuMDAjU29sYXIgYmxhbmtldCByZWVscyM0OS4yNC4xNy4wMC4wMAotdW5zcHNjNyM0OS4yNS4wMC4wMC4wMCNBcnRzIGFuZCBjcmFmdHMgc3VwcGxpZXMjNDkuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMjUuMTUuMDAuMDAjQXJ0IHN1cHBsaWVzIzQ5LjI1LjAwLjAwLjAwCi11bnNwc2M3IzQ5LjI1LjE1LjAxLjAwI0FydCBwYWludHMjNDkuMjUuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjUuMTUuMDIuMDAjTW9kZWxpbmcgY2xheSM0OS4yNS4xNS4wMC4wMAotdW5zcHNjNyM0OS4yNS4xNS4wMy4wMCNBcnQgcGFpbnRicnVzaGVzIzQ5LjI1LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjI1LjE1LjA0LjAwI1BpY3R1cmUgb3IgcG9zdGVyIGZyYW1lcyM0OS4yNS4xNS4wMC4wMAotdW5zcHNjNyM0OS4yNS4xNS4wNS4wMCNQaWN0dXJlIGFsYnVtcyBvciBvcmdhbml6ZXJzIzQ5LjI1LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjI1LjE1LjA2LjAwI0N1dHRpbmcgbWF0cyM0OS4yNS4xNS4wMC4wMAotdW5zcHNjNyM0OS4yNS4xNS4wNy4wMCNDYXJ2aW5nIGJvYXJkIzQ5LjI1LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjI1LjE1LjA4LjAwI1BhbGV0dGVzIzQ5LjI1LjE1LjAwLjAwCi11bnNwc2M3IzQ5LjI1LjE1LjA5LjAwI0dsaXR0ZXIjNDkuMjUuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjUuMTUuMTAuMDAjQmVhZHMjNDkuMjUuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjUuMTUuMTEuMDAjRGVjb3JhdGl2ZSB0YXBlcyBvciB0d2lzdHMjNDkuMjUuMTUuMDAuMDAKLXVuc3BzYzcjNDkuMjUuMTYuMDAuMDAjQ3JhZnQgc3VwcGxpZXMjNDkuMjUuMDAuMDAuMDAKLXVuc3BzYzcjNDkuMjUuMTYuMDEuMDAjTW9kZWwga2l0cyM0OS4yNS4xNi4wMC4wMAotdW5zcHNjNyM0OS4yNS4xNi4wMi4wMCNQb3R0ZXJzIHdoZWVscyM0OS4yNS4xNi4wMC4wMAotdW5zcHNjNyM0OS4yNS4xNi4wMy4wMCNEZWNvcmF0aXZlIGJ1dHRvbnMjNDkuMjUuMTYuMDAuMDAKLXVuc3BzYzcjNDkuMjUuMTYuMDQuMDAjRGVjb3JhdGl2ZSBzaGFwZXMgb3Igc3RyaW5ncyM0OS4yNS4xNi4wMC4wMAotdW5zcHNjNyM0OS4yNS4xNi4wNS4wMCNDcmFmdCBraXRzIzQ5LjI1LjE2LjAwLjAwCi11bnNwc2M3IzUwLjAwLjAwLjAwLjAwI0Zvb2QgQmV2ZXJhZ2UgYW5kIFRvYmFjY28gUHJvZHVjdHMjNTAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMDAuMDAuMDAjRnJ1aXRzIGFuZCB2ZWdldGFibGVzIGFuZCBudXRzIGFuZCBzZWVkcyM1MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS4wMC4wMCNWZWdldGFibGVzIzUwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjAxLjAwI0JlYW5zIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjAyLjAwI1NwaW5hY2gjNTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuMDMuMDAjUG90YXRvZXMjNTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuMDQuMDAjUGVhcyM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS4wNS4wMCNPbmlvbnMgb3Igb3RoZXIgYWxsaWFjZW91cyB2ZWdldGFibGVzIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjA2LjAwI0xldHR1Y2UjNTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuMDcuMDAjQ2FiYmFnZSM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS4wOC4wMCNTcXVhc2hlcyM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS4wOS4wMCNZYW1zIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjEwLjAwI0NhcnJvdHMjNTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuMTEuMDAjUnV0YWJhZ2FzIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjEyLjAwI0VnZ3BsYW50cyM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS4xMy4wMCNQZXBwZXJzIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjE0LjAwI1JodWJhcmIjNTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuMTUuMDAjRW5kaXZlIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjE2LjAwI0FzcGFyYWd1cyM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS4xNy4wMCNBcnRpY2hva2VzIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjE4LjAwI1BhcnNuaXBzIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjE5LjAwI0NlbGVyeSM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS4yMC4wMCNSYWRpc2hlcyM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS4yMS4wMCNNdXNocm9vbXMgb3Igb3RoZXIgZWRpYmxlIGZ1bmdpIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjIyLjAwI0hvcnNlcmFkaXNoIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjIzLjAwI1R1cm5pcHMjNTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuMjQuMDAjTXVzdGFyZCBncmVlbnMjNTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuMjUuMDAjS2FsZSM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS4yNi4wMCNDb2xsYXJkcyM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS4yNy4wMCNCcnVzc2VsIHNwcm91dHMjNTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuMjguMDAjQnJvY2NvbGkjNTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuMjkuMDAjQ2F1bGlmbG93ZXJzIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjMwLjAwI09rcmEjNTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuMzEuMDAjQ3VjdW1iZXJzIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjMyLjAwI1RvbWF0b2VzIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjMzLjAwI0JlZXRzIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjM0LjAwI01hbmlvYyByb290cyM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS4zNS4wMCNMZW50aWxzIzUwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE1LjM2LjAwI0Nvcm4jNTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuMzcuMDAjUHVtcGtpbnMjNTAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTUuMzguMDAjRnJlc2ggdmVnZXRhYmxlcyM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS4zOS4wMCNGcm96ZW4gdmVnZXRhYmxlcyM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNS40MC4wMCNTaGVsZiBzdGFibGUgdmVnZXRhYmxlcyM1MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4wMC4wMCNGcnVpdHMjNTAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTYuMDEuMDAjTGltZXMjNTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTYuMDIuMDAjTWFuZ29lcyM1MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4wMy4wMCNHdWF2YXMjNTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTYuMDQuMDAjR3JhcGVzIzUwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE2LjA1LjAwI0RhdGVzIzUwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE2LjA2LjAwI0Fwcmljb3RzIzUwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE2LjA3LjAwI0JlcnJpZXMjNTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTYuMDguMDAjUGVhY2hlcyM1MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4wOS4wMCNDaGVycmllcyM1MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4xMC4wMCNCYW5hbmFzIzUwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE2LjExLjAwI01lbG9ucyM1MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4xMi4wMCNQb21lZ3JhbmF0ZXMjNTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTYuMTMuMDAjUGFwYXlhcyM1MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4xNC4wMCNLaXdpcyM1MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4xNS4wMCNMaWNoZWVzIzUwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE2LjE2LjAwI1BlYXJzIzUwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE2LjE3LjAwI1BsdW1zIzUwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE2LjE4LjAwI0FwcGxlcyM1MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4xOS4wMCNQYXNzaW9uIGZydWl0IzUwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE2LjIwLjAwI05lY3RhcmluZXMjNTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTYuMjEuMDAjUGluZWFwcGxlcyM1MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4yMi4wMCNGaWdzIzUwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE2LjIzLjAwI1RhbmdlbG9zIzUwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE2LjI0LjAwI01hbmRhcmlucyM1MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4yNS4wMCNPcmFuZ2VzIzUwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE2LjI2LjAwI1RhbmdlcmluZXMjNTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTYuMjcuMDAjR3JhcGVmcnVpdCM1MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4yOC4wMCNMZW1vbnMjNTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTYuMjkuMDAjRHVyaWFucyM1MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4zMC4wMCNDb2NvbnV0cyM1MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4zMS4wMCNBdm9jYWRvcyM1MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4zMi4wMCNRdWluY2VzIzUwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE2LjMzLjAwI09saXZlcyM1MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4zNC4wMCNGcmVzaCBmcnVpdCM1MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNi4zNS4wMCNGcm96ZW4gZnJ1aXQjNTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTYuMzYuMDAjU2hlbGYgc3RhYmxlIGZydWl0IzUwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE3LjAwLjAwI051dHMgYW5kIHNlZWRzIzUwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzUwLjEwLjE3LjAxLjAwI0NoZXN0bnV0cyM1MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNy4wMy4wMCNQZWNhbnMjNTAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTcuMDQuMDAjQnJhemlsIG51dHMjNTAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTcuMDUuMDAjQ2FzaGV3cyM1MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNy4wNi4wMCNBbG1vbmRzIzUwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE3LjA3LjAwI01hY2FkYW1pYSBudXRzIzUwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE3LjA4LjAwI0hhemVsbnV0cyM1MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNy4wOS4wMCNQaW5lIG51dHMjNTAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTcuMTAuMDAjUGlzdGFjaGlvcyM1MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNy4xMS4wMCNXYWxudXRzIzUwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE3LjEyLjAwI0JldGVsIG51dHMjNTAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTcuMTMuMDAjUGVhbnV0cyBvciBncm91bmRudXRzIzUwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzUwLjEwLjE3LjE0LjAwI01peGVkIG51dHMjNTAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTcuMTUuMDAjTnV0IG1lYXQjNTAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTAuMTcuMTYuMDAjV2hvbGUgbnV0cyBvciBzZWVkcyM1MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM1MC4xMC4xNy4xNy4wMCNTaGVsbGVkIzUwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzUwLjExLjAwLjAwLjAwI01lYXQgYW5kIHBvdWx0cnkgcHJvZHVjdHMjNTAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTEuMTUuMDAuMDAjTWVhdCBhbmQgcG91bHRyeSM1MC4xMS4wMC4wMC4wMAotdW5zcHNjNyM1MC4xMS4xNS4wMS4wMCNDaGlja2VuIzUwLjExLjE1LjAwLjAwCi11bnNwc2M3IzUwLjExLjE1LjAyLjAwI1R1cmtleSM1MC4xMS4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMS4xNS4wMy4wMCNEdWNrIzUwLjExLjE1LjAwLjAwCi11bnNwc2M3IzUwLjExLjE1LjA0LjAwI09zdHJpY2gjNTAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTEuMTUuMDUuMDAjUGFydHJpZGdlIzUwLjExLjE1LjAwLjAwCi11bnNwc2M3IzUwLjExLjE1LjA2LjAwI0RvdmUjNTAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTEuMTUuMDcuMDAjUGhlYXNhbnQjNTAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTEuMTUuMDguMDAjUXVhaWwjNTAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTEuMTUuMDkuMDAjR29vc2UjNTAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTEuMTUuMTAuMDAjRnJlc2ggbWVhdCBhbmQgcG91bHRyeSM1MC4xMS4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMS4xNS4xMS4wMCNGcm96ZW4gbWVhdCBhbmQgcG91bHRyeSM1MC4xMS4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMS4xNS4xMi4wMCNTaGVsZiBzdGFibGUgbWVhdCBhbmQgcG91bHRyeSM1MC4xMS4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMS4xNi4wMC4wMCNGcmVzaCBhbmQgZnJvemVuIHJlZCBtZWF0IGFuZCBieXByb2R1Y3RzIzUwLjExLjAwLjAwLjAwCi11bnNwc2M3IzUwLjExLjE2LjAxLjAwI0JlZWYjNTAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTEuMTYuMDIuMDAjVmVhbCM1MC4xMS4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMS4xNi4wMy4wMCNNdXR0b24jNTAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTEuMTYuMDQuMDAjTGFtYiM1MC4xMS4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMS4xNi4wNS4wMCNCdWZmYWxvIzUwLjExLjE2LjAwLjAwCi11bnNwc2M3IzUwLjExLjE2LjA2LjAwI0hvcnNlbWVhdCM1MC4xMS4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMS4xNi4wNy4wMCNBc3Mgb3IgbXVsZSBvciBoaW5ueSBtZWF0IzUwLjExLjE2LjAwLjAwCi11bnNwc2M3IzUwLjExLjE3LjAwLjAwI0ZyZXNoIGFuZCBmcm96ZW4gcG9yayBhbmQgYnlwcm9kdWN0cyM1MC4xMS4wMC4wMC4wMAotdW5zcHNjNyM1MC4xMS4xNy4wMS4wMCNQb3JrIzUwLjExLjE3LjAwLjAwCi11bnNwc2M3IzUwLjExLjE4LjAwLjAwI0ZyZXNoIGFuZCBmcm96ZW4gb3JnYW4gbWVhdCBhbmQgYnlwcm9kdWN0cyM1MC4xMS4wMC4wMC4wMAotdW5zcHNjNyM1MC4xMS4xOC4wMS4wMCNPcmdhbiBtZWF0IzUwLjExLjE4LjAwLjAwCi11bnNwc2M3IzUwLjExLjE4LjAyLjAwI0xpdmVyIzUwLjExLjE4LjAwLjAwCi11bnNwc2M3IzUwLjExLjE4LjAzLjAwI0dpenphcmQjNTAuMTEuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTEuMTguMDQuMDAjVHJpcGUjNTAuMTEuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTEuMTguMDUuMDAjU3RvbWFjaCM1MC4xMS4xOC4wMC4wMAotdW5zcHNjNyM1MC4xMS4xOC4wNi4wMCNLaWRuZXkjNTAuMTEuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTEuMTguMDcuMDAjQnJhaW5zIzUwLjExLjE4LjAwLjAwCi11bnNwc2M3IzUwLjExLjE5LjAwLjAwI0RlbGljYXRlc3NlbiBtZWF0IHByb2R1Y3RzIzUwLjExLjAwLjAwLjAwCi11bnNwc2M3IzUwLjExLjE5LjAxLjAwI1NhbGFtaSM1MC4xMS4xOS4wMC4wMAotdW5zcHNjNyM1MC4xMS4xOS4wMi4wMCNLYWJhbmEjNTAuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNTAuMTEuMTkuMDMuMDAjUGFzdHJhbWkjNTAuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNTAuMTEuMTkuMDQuMDAjUm9hc3QgYmVlZiM1MC4xMS4xOS4wMC4wMAotdW5zcHNjNyM1MC4xMS4xOS4wNS4wMCNDb3JuZWQgYmVlZiBvciBzaWx2ZXJzaWRlIzUwLjExLjE5LjAwLjAwCi11bnNwc2M3IzUwLjExLjE5LjA2LjAwI0ZyYW5rZnVydCBvciBob3QgZG9nIzUwLjExLjE5LjAwLjAwCi11bnNwc2M3IzUwLjExLjIwLjAwLjAwI1Byb2Nlc3NlZCBhbmQgcHJlcGFyZWQgbWVhdHMjNTAuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTEuMjAuMDEuMDAjRnJlc2ggcHJvY2Vzc2VkIG9yIHByZXBhcmVkIG1lYXRzIzUwLjExLjIwLjAwLjAwCi11bnNwc2M3IzUwLjExLjIwLjAyLjAwI0Zyb3plbiBwcm9jZXNzZWQgb3IgcHJlcGFyZWQgbWVhdHMjNTAuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNTAuMTEuMjAuMDMuMDAjU2hlbGYgc3RhYmxlIHByb2Nlc3NlZCBvciBwcmVwYXJlZCBtZWF0cyM1MC4xMS4yMC4wMC4wMAotdW5zcHNjNyM1MC4xMi4wMC4wMC4wMCNTZWFmb29kIzUwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjAwLjAwI0Zpc2gjNTAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMDEuMDAjTGVtb25maXNoIzUwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjAyLjAwI0RvZ2Zpc2gjNTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMDMuMDAjR3JvdXBlciM1MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4wNC4wMCNNYWhpIG1haGkjNTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMDUuMDAjTW9ua2Zpc2gjNTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMDYuMDAjUG9tcGFubyM1MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4wNy4wMCNCYXNzIzUwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjA4LjAwI1NoYXJrIzUwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjA5LjAwI1RpbGFwaWEjNTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMTAuMDAjU3dvcmRmaXNoIzUwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjExLjAwI0FuY2hvdmllcyM1MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4xMi4wMCNDYXJwIzUwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjEzLjAwI0NhdGZpc2gjNTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMTQuMDAjRWVsIzUwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjE1LjAwI1N0dXJnZW9uIzUwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjE2LjAwI1R1bmEjNTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMTcuMDAjQ29kIzUwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjE4LjAwI0hhbGlidXQjNTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMTkuMDAjSGFkZG9jayM1MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4yMC4wMCNPY2VhbiBwZXJjaCM1MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4yMS4wMCNPcmFuZ2Ugcm91Z2h5IzUwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjIyLjAwI1BhcnJvdCBmaXNoIzUwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjIzLjAwI1Bpa2UjNTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMjQuMDAjUmVkIHNuYXBwZXIjNTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMjUuMDAjUm9ja2Zpc2gjNTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMjYuMDAjU21lbHQjNTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMjcuMDAjU29sZSM1MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4yOC4wMCNXaGl0aW5nIzUwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjI5LjAwI1NhbG1vbiM1MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4zMC4wMCNNYWNrZXJlbCM1MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4zMS4wMCNTYXJkaW5lcyM1MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4zMi4wMCNUcm91dCM1MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4zMy4wMCNTdXJpbWkjNTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMzQuMDAjQmxhY2tmaXNoIzUwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE1LjM1LjAwI0hlcnJpbmcjNTAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTUuMzYuMDAjRnJlc2ggZmlzaCM1MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4zNy4wMCNGcm96ZW4gZmlzaCM1MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4zOC4wMCNTaGVsZiBzdGFibGUgZmlzaCM1MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNS4zOS4wMCNGcmVzaCBmaXNoIzUwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE2LjAwLjAwI1NoZWxsZmlzaCM1MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNi4wMS4wMCNBYmFsb25lIzUwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE2LjAyLjAwI1NjYWxsb3BzIzUwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE2LjAzLjAwI0NsYW1zIzUwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE2LjA0LjAwI0NyYWJzIzUwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE2LjA1LjAwI0NvbmNoIzUwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE2LjA2LjAwI0NyYXlmaXNoIzUwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE2LjA3LjAwI0xvYnN0ZXIjNTAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTYuMDguMDAjTXVzc2VscyM1MC4xMi4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNi4wOS4wMCNPeXN0ZXJzIzUwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE2LjEwLjAwI1NocmltcCM1MC4xMi4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNi4xMS4wMCNGcmVzaCBzaGVsbGZpc2gjNTAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTYuMTIuMDAjRnJvemVuIHNoZWxsZmlzaCM1MC4xMi4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNi4xMy4wMCNTaGVsZiBzdGFibGUgc2hlbGxmaXNoIzUwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE3LjAwLjAwI0FxdWF0aWMgaW52ZXJ0ZWJyYXRlcyM1MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNy4wMS4wMCNTcXVpZCM1MC4xMi4xNy4wMC4wMAotdW5zcHNjNyM1MC4xMi4xNy4wMi4wMCNPY3RvcHVzIzUwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE3LjAzLjAwI0FuZW1vbmVzIzUwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE3LjA0LjAwI1NlYSBjdWN1bWJlcnMjNTAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTcuMDUuMDAjRnJlc2ggYXF1YXRpYyBpbnZlcnRlYnJhdGVzIzUwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzUwLjEyLjE3LjA2LjAwI0Zyb3plbiBhcXVhdGljIGludmVydGVicmF0ZXMjNTAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTcuMDcuMDAjU2hlbGYgc3RhYmxlIGFxdWF0aWMgaW52ZXJ0ZWJyYXRlcyM1MC4xMi4xNy4wMC4wMAotdW5zcHNjNyM1MC4xMi4xOC4wMC4wMCNBcXVhdGljIHBsYW50cyM1MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM1MC4xMi4xOC4wMS4wMCNTZWF3ZWVkcyM1MC4xMi4xOC4wMC4wMAotdW5zcHNjNyM1MC4xMi4xOC4wMi4wMCNGcmVzaCBhcXVhdGljIHBsYW50cyM1MC4xMi4xOC4wMC4wMAotdW5zcHNjNyM1MC4xMi4xOC4wMy4wMCNGcm96ZW4gYXF1YXRpYyBwbGFudHMjNTAuMTIuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTIuMTguMDQuMDAjU2hlbGYgc3RhYmxlIGFxdWF0aWMgcGxhbnRzIzUwLjEyLjE4LjAwLjAwCi11bnNwc2M3IzUwLjEzLjAwLjAwLjAwI0RhaXJ5IHByb2R1Y3RzIGFuZCBlZ2dzIzUwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUwLjEzLjE1LjAwLjAwI0RhaXJ5IHByb2R1Y3RzIGFuZCBkYWlyeSBzdWJzdGl0dXRlcyM1MC4xMy4wMC4wMC4wMAotdW5zcHNjNyM1MC4xMy4xNS4wMS4wMCNDb2ZmZWUgY3JlYW1lciM1MC4xMy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMy4xNS4wMi4wMCNCdXR0ZXIjNTAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTMuMTUuMDMuMDAjTWlsayM1MC4xMy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMy4xNS4wNC4wMCNTb2Z0IGNoZWVzZXMjNTAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTMuMTUuMDUuMDAjWW9ndXJ0cyM1MC4xMy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMy4xNS4wNi4wMCNJY2UgY3JlYW1zIzUwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEzLjE1LjA3LjAwI1NvdXIgY3JlYW1zIzUwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEzLjE1LjA4LjAwI0hhcmQgY2hlZXNlcyM1MC4xMy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMy4xNS4wOS4wMCNCdXR0ZXJtaWxrIzUwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEzLjE1LjEwLjAwI0luZmFudCBmb3JtdWxhIzUwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEzLjE1LjExLjAwI0N1c3RhcmQjNTAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTMuMTUuMTIuMDAjRXZhcG9yYXRlZCBtaWxrIzUwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEzLjE1LjEzLjAwI1N3ZWV0ZW5lZCBjb25kZW5zZWQgbWlsayM1MC4xMy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xMy4xNS4xNC4wMCNQb3dkZXJlZCBtaWxrIzUwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEzLjE1LjE1LjAwI0NyZWFtIzUwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEzLjE1LjE2LjAwI0xvbmcgbGlmZSBtaWxrIzUwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzUwLjEzLjE2LjAwLjAwI0VnZ3MgYW5kIGVnZyBzdWJzdGl0dXRlcyM1MC4xMy4wMC4wMC4wMAotdW5zcHNjNyM1MC4xMy4xNi4wMS4wMCNFZ2dzIzUwLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEzLjE2LjAyLjAwI0VnZyBzdWJzdGl0dXRlcyM1MC4xMy4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMy4xNi4wMy4wMCNNZXJpbmd1ZSBwb3dkZXJzIzUwLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEzLjE2LjA0LjAwI0VnZyB3aGl0ZXMjNTAuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTMuMTYuMDUuMDAjRWdnIHlvbGtzIzUwLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEzLjE2LjA2LjAwI0ZyZXNoIGVnZ3MjNTAuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTMuMTYuMDcuMDAjRWdnIHN1YnN0aXR1dGVzIzUwLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUwLjEzLjE2LjA4LjAwI0VnZyB3aGl0ZXMgb3IgeW9sa3MjNTAuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTMuMTYuMDkuMDAjUHJlcGFyZWQgZWdncyM1MC4xMy4xNi4wMC4wMAotdW5zcHNjNyM1MC4xMy4xNy4wMC4wMCNNaWxrIGFuZCBidXR0ZXIgcHJvZHVjdHMjNTAuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTMuMTcuMDEuMDAjRnJlc2ggbWlsayBhbmQgYnV0dGVyIHByb2R1Y3RzIzUwLjEzLjE3LjAwLjAwCi11bnNwc2M3IzUwLjEzLjE3LjAyLjAwI1NoZWxmIHN0YWJsZSBtaWxrIGFuZCBidXR0ZXIgcHJvZHVjdHMjNTAuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTMuMTguMDAuMDAjQ2hlZXNlIzUwLjEzLjAwLjAwLjAwCi11bnNwc2M3IzUwLjEzLjE4LjAxLjAwI05hdHVyYWwgY2hlZXNlIzUwLjEzLjE4LjAwLjAwCi11bnNwc2M3IzUwLjEzLjE4LjAyLjAwI1Byb2Nlc3NlZCBjaGVlc2UjNTAuMTMuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTMuMTguMDMuMDAjSW1pdGF0aW9uIGNoZWVzZSM1MC4xMy4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNC4wMC4wMC4wMCNHcmFpbnMgYW5kIGNlcmVhbHMgYW5kIHRoZWlyIGZsb3VycyM1MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM1MC4xNC4xNS4wMC4wMCNHcmFpbnMgYW5kIGNlcmVhbHMjNTAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTQuMTUuMDEuMDAjTWlsbGV0IzUwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE0LjE1LjAyLjAwI0hvcHMjNTAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTQuMTUuMDMuMDAjQnVja3doZWF0IzUwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE0LjE1LjA0LjAwI1J5ZSM1MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNC4xNS4wNS4wMCNDb3JuIGNlcmVhbHMjNTAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTQuMTUuMDYuMDAjU29yZ2h1bSM1MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNC4xNS4wNy4wMCNPYXRzIzUwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE0LjE1LjA4LjAwI1JpY2UjNTAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTQuMTUuMDkuMDAjQmFybGV5IzUwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE0LjE1LjEwLjAwI1doZWF0IzUwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE0LjE1LjExLjAwI1Bhc3RhIG9yIG5vb2RsZSM1MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNC4xNS4xMi4wMCNCcmFuIzUwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE0LjE1LjEzLjAwI3Nob3J0IGdyYWluIHJpY2UjNTAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTQuMTYuMDAuMDAjRmxvdXJzIzUwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzUwLjE0LjE2LjAxLjAwI01pbGxldCBmbG91ciM1MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xNC4xNi4wMi4wMCNPYXQgZmxvdXIjNTAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTQuMTYuMDMuMDAjQmFybGV5IGZsb3VyIzUwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE0LjE2LjA0LjAwI1JpY2UgZmxvdXIjNTAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTQuMTYuMDUuMDAjQnVja3doZWF0IGZsb3VyIzUwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE0LjE2LjA2LjAwI1J5ZSBmbG91ciM1MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xNC4xNi4wNy4wMCNDb3JuIGZsb3VyIzUwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE0LjE2LjA4LjAwI1doZWF0IGZsb3VyIzUwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE0LjE2LjA5LjAwI1NlbGYgcmlzaW5nIGZsb3VyIzUwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE0LjE2LjEwLjAwI0xvbmcgR3JhaW4gUmljZSM1MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xNS4wMC4wMC4wMCNFZGlibGUgb2lscyBhbmQgZmF0cyM1MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM1MC4xNS4xNS4wMC4wMCNFZGlibGUgdmVnZXRhYmxlIGFuZCBwbGFudCBvaWxzIGFuZCBmYXRzIzUwLjE1LjAwLjAwLjAwCi11bnNwc2M3IzUwLjE1LjE1LjAxLjAwI1NveWJlYW4gb2lsIzUwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE1LjE1LjAyLjAwI0Nvcm4gb2lsIzUwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE1LjE1LjAzLjAwI0Nhbm9sYSBvaWwjNTAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTUuMTUuMDQuMDAjU2VzYW1lIG9pbCM1MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNS4xNS4wNS4wMCNQZWFudXQgb2lsIzUwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE1LjE1LjA2LjAwI09saXZlIG9pbCM1MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNS4xNS4wNy4wMCNQYWxtIG9pbCM1MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNS4xNS4wOC4wMCNTYWZmbG93ZXIgb2lsIzUwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE1LjE1LjA5LjAwI0Nhc3RvciBvaWwjNTAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTUuMTUuMTAuMDAjU3VuZmxvd2VyIG9pbCM1MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNS4xNS4xMS4wMCNDb3R0b25zZWVkIG9pbCM1MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNS4xNS4xMi4wMCNDb2x6YSBvaWwjNTAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTUuMTUuMTMuMDAjRWRpYmxlIHZlZ2V0YWJsZSBvciBwbGFudCBvaWxzIzUwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE1LjE1LjE0LjAwI0VkaWJsZSB2ZWdldGFibGUgb3IgcGxhbnQgZmF0cyM1MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNS4xNi4wMC4wMCNFZGlibGUgYW5pbWFsIG9pbHMgYW5kIGZhdHMjNTAuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTUuMTYuMDEuMDAjTGFyZCM1MC4xNS4xNi4wMC4wMAotdW5zcHNjNyM1MC4xNS4xNi4wMi4wMCNUYWxsb3cjNTAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTUuMTYuMDMuMDAjQ29kIGxpdmVyIG9pbCM1MC4xNS4xNi4wMC4wMAotdW5zcHNjNyM1MC4xNS4xNi4wNC4wMCNFZGlibGUgYW5pbWFsIG9pbHMjNTAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTUuMTYuMDUuMDAjRWRpYmxlIGFuaW1hbCBmYXRzIzUwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE1LjE3LjAwLjAwI09pbHMgYW5kIGZhdHMgYW5kIG90aGVyIzUwLjE1LjAwLjAwLjAwCi11bnNwc2M3IzUwLjE1LjE3LjAxLjAwI1Nob3J0ZW5pbmdzIzUwLjE1LjE3LjAwLjAwCi11bnNwc2M3IzUwLjE1LjE3LjAyLjAwI01hcmdhcmluZSM1MC4xNS4xNy4wMC4wMAotdW5zcHNjNyM1MC4xNS4xNy4wMy4wMCNMaW5zZWVkIG9pbCM1MC4xNS4xNy4wMC4wMAotdW5zcHNjNyM1MC4xNS4xNy4wNC4wMCNDb2NvYSBidXR0ZXIjNTAuMTUuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTUuMTcuMDUuMDAjSG9wIE9pbCM1MC4xNS4xNy4wMC4wMAotdW5zcHNjNyM1MC4xNS4xNy4wNi4wMCNNYWNhZGFtaWEgb2lsIzUwLjE1LjE3LjAwLjAwCi11bnNwc2M3IzUwLjE2LjAwLjAwLjAwI0Nob2NvbGF0ZSBhbmQgc3VnYXJzIGFuZCBzd2VldGVuZXJzIGFuZCBjb25mZWN0aW9uYXJ5IHByb2R1Y3RzIzUwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUwLjE2LjE1LjAwLjAwI0Nob2NvbGF0ZSBhbmQgc3VnYXJzIGFuZCBzd2VldGVuaW5nIHByb2R1Y3RzIzUwLjE2LjAwLjAwLjAwCi11bnNwc2M3IzUwLjE2LjE1LjAxLjAwI0Jyb3duIHN1Z2FyIzUwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE2LjE1LjAyLjAwI1doaXRlIHN1Z2FycyM1MC4xNi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNi4xNS4wMy4wMCNTdWdhciBjYW5lIzUwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE2LjE1LjA0LjAwI0ZydWN0b3NlIzUwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE2LjE1LjA1LjAwI1BhbG0gc3VnYXIjNTAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTYuMTUuMDYuMDAjR2x1Y29zZSM1MC4xNi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNi4xNS4wNy4wMCNCZWV0IHN1Z2FyIzUwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE2LjE1LjA4LjAwI1JhdyBzdWdhciM1MC4xNi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNi4xNS4wOS4wMCNOYXR1cmFsIHN1Z2FycyBhbmQgc3dlZXRlbmluZyBwcm9kdWN0cyM1MC4xNi4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNi4xNS4xMC4wMCNBcnRpZmljaWFsIHN3ZWV0ZW5pbmcgYWdlbnRzIzUwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE2LjE1LjExLjAwI0Nob2NvbGF0ZSBhbmQgY2hvY29sYXRlIHN1YnN0aXR1dGUjNTAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTYuMTUuMTIuMDAjU3lydXBzIzUwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE2LjE2LjAwLjAwI1N5cnVwcyBhbmQgb3RoZXIgc3dlZXRlbmVycyM1MC4xNi4wMC4wMC4wMAotdW5zcHNjNyM1MC4xNi4xNi4wMS4wMCNNb2xhc3NlcyM1MC4xNi4xNi4wMC4wMAotdW5zcHNjNyM1MC4xNi4xNi4wMi4wMCNIb25leSM1MC4xNi4xNi4wMC4wMAotdW5zcHNjNyM1MC4xNi4xNi4wMy4wMCNCbGFjayB0cmVhY2xlIzUwLjE2LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE2LjE2LjA0LjAwI0Nvcm4gc3lydXAjNTAuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTYuMTYuMDUuMDAjQXNwZXJ0YW1lIzUwLjE2LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE2LjE2LjA2LjAwI1NhY2NoYXJyaW4jNTAuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTYuMTYuMDcuMDAjTWFwbGUgc3lydXAjNTAuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTYuMTcuMDAuMDAjQ2hvY29sYXRlIGFuZCBjYXJvYiBhbmQgY2hvY29sYXRlIHN1YnN0aXR1dGVzIzUwLjE2LjAwLjAwLjAwCi11bnNwc2M3IzUwLjE2LjE3LjAxLjAwI0Nob2NvbGF0ZSM1MC4xNi4xNy4wMC4wMAotdW5zcHNjNyM1MC4xNi4xNy4wMi4wMCNDYXJvYiM1MC4xNi4xNy4wMC4wMAotdW5zcHNjNyM1MC4xNi4xNy4wMy4wMCNDb2NvYSM1MC4xNi4xNy4wMC4wMAotdW5zcHNjNyM1MC4xNi4xOC4wMC4wMCNDb25mZWN0aW9uYXJ5IHByb2R1Y3RzIzUwLjE2LjAwLjAwLjAwCi11bnNwc2M3IzUwLjE2LjE4LjA0LjAwI0NoZXdpbmcgZ3VtcyM1MC4xNi4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNi4xOC4wNS4wMCNDYW5keSM1MC4xNi4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNi4xOC4wNi4wMCNMaWNvcmljZSM1MC4xNi4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNi4xOC4wNy4wMCNqZWxsaWVkIGNvbmZlY3Rpb25hcnkjNTAuMTYuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTYuMTguMDguMDAjRnVkZ2UjNTAuMTYuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTYuMTguMDkuMDAjTWVkaWNhdGVkIGNvbmZlY3Rpb25lcnkgb3IgbG96ZW5nZXMjNTAuMTYuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTYuMTguMTAuMDAjU3VnYXIgZnJlZSBjb25mZWN0aW9uYXJ5IzUwLjE2LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE2LjE4LjExLjAwI01hcnNobWFsbG93IzUwLjE2LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE2LjE4LjEyLjAwI05vdWdhdCM1MC4xNi4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNi4xOC4xMy4wMCNDaG9jb2xhdGUgb3IgY2hvY29sYXRlIHN1YnN0aXR1dGUgY2FuZHkjNTAuMTYuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTYuMTguMTQuMDAjU3VnYXIgb3Igc3VnYXIgc3Vic3RpdHV0ZSBjYW5keSM1MC4xNi4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNi4xOC4xNS4wMCNDaGV3aW5nIGd1bSM1MC4xNi4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNy4wMC4wMC4wMCNTZWFzb25pbmdzIGFuZCBwcmVzZXJ2YXRpdmVzIzUwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjAwLjAwI0hlcmJzIGFuZCBzcGljZXMgYW5kIGV4dHJhY3RzIzUwLjE3LjAwLjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjAxLjAwI1NhbHQjNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuMDMuMDAjTnV0bWVnIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjA0LjAwI0JheSM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4wNS4wMCNBbmlzZSM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4wNi4wMCNTYWZmcm9uIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjA3LjAwI0Jhc2lsIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjA4LjAwI0dpbmdlciM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4wOS4wMCNMYXZlbmRlciM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4xMC4wMCNNYWNlIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjExLjAwI1BhcHJpa2EjNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuMTIuMDAjQ2hpY29yeSM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4xMy4wMCNHYXJsaWMjNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuMTQuMDAjQ3VtaW4jNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuMTUuMDAjQ2xvdmVzIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjE2LjAwI0Npbm5hbW9uIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjE3LjAwI0NpbGFudHJvIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjE4LjAwI0FsbHNwaWNlIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjE5LjAwI01hcmpvcmFtIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjIwLjAwI1lhcnJvdyM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4yMS4wMCNUaHltZSM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4yMi4wMCNUYXJyYWdvbiM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4yMy4wMCNTZXNhbWUjNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuMjQuMDAjU2FnZSM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4yNS4wMCNSb3NlbWFyeSM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4yNi4wMCNQYXJzbGV5IzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjI3LjAwI0NoYW1vbWlsZSM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4yOC4wMCNNaW50cyM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4yOS4wMCNDYXJhd2F5IzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjMwLjAwI0xlbW9uZ3Jhc3MjNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuMzEuMDAjTGVtb24gYmFsbSM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4zMi4wMCNEaWxsIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjMzLjAwI0Zlbm5lbCM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4zNC4wMCNDdXJyeSM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4zNS4wMCNDb21mcmV5IzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjM2LjAwI0NoaXZlcyM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS4zNy4wMCNDaGVydmlsIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjM4LjAwI09yZWdhbm8jNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuMzkuMDAjUGVwcGVyY29ybnMjNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuNDAuMDAjQ2FyZGFtb20jNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuNDEuMDAjQ29yaWFuZGVyIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjQyLjAwI0ZsYXZvcmluZyBleHRyYWN0cyM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS40My4wMCNDaGlsaSBwb3dkZXIjNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuNDQuMDAjUG9wcHkgc2VlZHMjNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuNDUuMDAjTWl4ZWQgaGVyYnMjNTAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTUuNDYuMDAjVmFuaWxsYSM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNS40Ny4wMCNTZWFzb25pbmcgbWl4IzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjQ4LjAwI0ZyZXNoIGhlcmJzIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjQ5LjAwI0RyaWVkIGhlcmJzIzUwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE1LjUwLjAwI1NwaWNlcyBvciBleHRyYWN0cyM1MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNi4wMC4wMCNQcmVzZXJ2YXRpdmVzIGFuZCBhZGRpdGl2ZXMjNTAuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTYuMDEuMDAjUGVjdGluIzUwLjE3LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE2LjAyLjAwI0Zvb2QgY29sb3JpbmdzIzUwLjE3LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE2LjAzLjAwI01vbm9zb2RpdW0gZ2x1dGFtYXRlIChNU0cpIzUwLjE3LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE3LjAwLjAwI1ZpbmVnYXJzIGFuZCBjb29raW5nIHdpbmVzIzUwLjE3LjAwLjAwLjAwCi11bnNwc2M3IzUwLjE3LjE3LjAxLjAwI0NpZGVyIHZpbmVhZ2FyIzUwLjE3LjE3LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE3LjAyLjAwI0JhbHNhbWljIHZpbmVnYXIjNTAuMTcuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTcuMDMuMDAjRGlzdGlsbGVkIHZpbmVnYXIjNTAuMTcuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTcuMDQuMDAjUmljZSB2aW5lZ2FyIzUwLjE3LjE3LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE3LjA1LjAwI1dpbmUgdmluZWdhciM1MC4xNy4xNy4wMC4wMAotdW5zcHNjNyM1MC4xNy4xNy4wNi4wMCNJbmZ1c2VkIHZpbmVnYXIjNTAuMTcuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTcuMDcuMDAjVmluZWdhcnMjNTAuMTcuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTcuMDguMDAjQ29va2luZyB3aW5lcyM1MC4xNy4xNy4wMC4wMAotdW5zcHNjNyM1MC4xNy4xOC4wMC4wMCNTYXVjZXMgYW5kIHNwcmVhZHMgYW5kIGNvbmRpbWVudHMjNTAuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTguMDEuMDAjTXVzdGFyZHMjNTAuMTcuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTguMDIuMDAjQ2F0c3VwIG9yIGtldGNodXAgb3IgdG9tYXRvIHNhdWNlIzUwLjE3LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE4LjAzLjAwI0JhcmJlY3VlIHNhdWNlcyM1MC4xNy4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNy4xOC4wNC4wMCNNYXJpbmFkZXMjNTAuMTcuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTguMDUuMDAjSG90IHNhdWNlcyM1MC4xNy4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNy4xOC4wNi4wMCNNYXlvbm5haXNlIzUwLjE3LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE4LjA3LjAwI1NveSBzYXVjZSM1MC4xNy4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNy4xOC4wOC4wMCNTYWxhZCBkcmVzc2luZ3MjNTAuMTcuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTguMDkuMDAjV29yY2hlc3RlcnNoaXJlIHNhdWNlIzUwLjE3LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE4LjEwLjAwI1NhbHNhIzUwLjE3LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE4LjExLjAwI1JlbGlzaGVzIG9yIGNodXRuZXlzIzUwLjE3LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE4LjEyLjAwI0NvbnNlcnZlIG9yIGphbSM1MC4xNy4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNy4xOC4xMy4wMCNEaXAgb3IgY2hpbGxlZCBkaXBwaW5nIHNhdWNlIzUwLjE3LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE4LjE0LjAwI1N3ZWV0IGFuZCBzb3VyIHNhdWNlIzUwLjE3LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE4LjE1LjAwI1RhcnRhcmUgc2F1Y2UjNTAuMTcuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTguMTYuMDAjTWludCBzYXVjZSM1MC4xNy4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNy4xOC4xNy4wMCNHcmF2eSBzYXVjZSBvciBwb3dkZXIjNTAuMTcuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTguMTguMDAjTm9vZGxlIG9yIHBhc3RhIHNhdWNlIzUwLjE3LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE4LjE5LjAwI0Zvb2Qgc3ByZWFkcyBvciBwYXN0ZXMjNTAuMTcuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTguMjAuMDAjVG9tYXRvIHBhc3RlIzUwLjE3LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE4LjIxLjAwI0JsYWNrIGJlYW4gc2F1Y2UjNTAuMTcuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTguMjIuMDAjU2F0YXkgc2F1Y2UjNTAuMTcuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTguMjMuMDAjVGVyaXlha2kgc2F1Y2UjNTAuMTcuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTguMjQuMDAjU2VhZm9vZCBzYXVjZSM1MC4xNy4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNy4xOC4yNS4wMCNQZXN0byM1MC4xNy4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNy4xOC4yNi4wMCNTdGVhayBzYXVjZSM1MC4xNy4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNy4xOC4yNy4wMCNPeXN0ZXIgc2F1Y2UjNTAuMTcuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTguMjguMDAjUGx1bSBzYXVjZSM1MC4xNy4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNy4xOC4yOS4wMCNXaGl0ZSBzYXVjZSM1MC4xNy4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNy4xOC4zMC4wMCNEaXBwaW5nIHNhdWNlcyBvciBjb25kaW1lbnRzIG9yIHNwcmVhZHMgb3IgbWFyaW5hZGVzIzUwLjE3LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE4LjMxLjAwI0Nvb2tpbmcgc2F1Y2UjNTAuMTcuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTguMzIuMDAjU2FsYWQgZHJlc3Npbmcgb3IgZGlwcyM1MC4xNy4xOC4wMC4wMAotdW5zcHNjNyM1MC4xNy4xOC4zMy4wMCNTYXZvcnkgc3ByZWFkIG9yIHBhdGUjNTAuMTcuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTkuMDAuMDAjUGlja2xlcyBhbmQgcmVsaXNoIGFuZCBvbGl2ZXMjNTAuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTkuMDEuMDAjUGlja2xlcyM1MC4xNy4xOS4wMC4wMAotdW5zcHNjNyM1MC4xNy4xOS4wMi4wMCNSZWxpc2gjNTAuMTcuMTkuMDAuMDAKLXVuc3BzYzcjNTAuMTcuMTkuMDMuMDAjT2xpdmVzIzUwLjE3LjE5LjAwLjAwCi11bnNwc2M3IzUwLjE3LjE5LjA0LjAwI0NodXRuZXlzIzUwLjE3LjE5LjAwLjAwCi11bnNwc2M3IzUwLjE4LjAwLjAwLjAwI0JyZWFkIGFuZCBiYWtlcnkgcHJvZHVjdHMjNTAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTguMTUuMDAuMDAjTGVhdmVuaW5nIGFnZW50cyM1MC4xOC4wMC4wMC4wMAotdW5zcHNjNyM1MC4xOC4xNS4wMS4wMCNZZWFzdCM1MC4xOC4xNS4wMC4wMAotdW5zcHNjNyM1MC4xOC4xNS4wMi4wMCNCYWtpbmcgcG93ZGVyIzUwLjE4LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE4LjE1LjAzLjAwI0Jha2luZyBzb2RhIzUwLjE4LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE4LjE1LjA0LjAwI0Jha2VycyBhbW1vbmlhIzUwLjE4LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE4LjE2LjAwLjAwI1RoaWNrZW5lcnMjNTAuMTguMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTguMTYuMDEuMDAjR2VsYXRpbnMjNTAuMTguMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTguMTYuMDIuMDAjRm9vZCBncmFkZSBzdGFyY2hlcyM1MC4xOC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xOC4xNi4wMy4wMCNUYXBpb2NhIzUwLjE4LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE4LjE2LjA0LjAwI0Fycm93cm9vdCM1MC4xOC4xNi4wMC4wMAotdW5zcHNjNyM1MC4xOC4xNi4wNS4wMCNGb29kIGdyYWRlIGFnYXIjNTAuMTguMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTguMTcuMDAuMDAjQmFraW5nIG1peGVzIGFuZCBzdXBwbGllcyM1MC4xOC4wMC4wMC4wMAotdW5zcHNjNyM1MC4xOC4xNy4wMS4wMCNGb29kIGdsYXplcyM1MC4xOC4xNy4wMC4wMAotdW5zcHNjNyM1MC4xOC4xNy4wMi4wMCNJY2luZ3MjNTAuMTguMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTguMTcuMDMuMDAjQ2FrZSBkZWNvcmF0aW9ucyM1MC4xOC4xNy4wMC4wMAotdW5zcHNjNyM1MC4xOC4xNy4wNC4wMCNDYWtlIG9yIHB1ZGRpbmcgbWl4dHVyZXMjNTAuMTguMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTguMTcuMDUuMDAjUGllIGZpbGxpbmdzIzUwLjE4LjE3LjAwLjAwCi11bnNwc2M3IzUwLjE4LjE3LjA2LjAwI0Jha2luZyBtaXhlcyM1MC4xOC4xNy4wMC4wMAotdW5zcHNjNyM1MC4xOC4xNy4wNy4wMCNDb2F0aW5nIG1peCBvciBicmVhZGNydW1icyM1MC4xOC4xNy4wMC4wMAotdW5zcHNjNyM1MC4xOC4xNy4wOC4wMCNCYWtpbmcgbWl4ZXMjNTAuMTguMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTguMTcuMDkuMDAjQmFraW5nIHN1cHBsaWVzIzUwLjE4LjE3LjAwLjAwCi11bnNwc2M3IzUwLjE4LjE4LjAwLjAwI0Jha2VkIGdvb2RzIzUwLjE4LjAwLjAwLjAwCi11bnNwc2M3IzUwLjE4LjE4LjAxLjAwI1Bhc3RyeSBzaGVsbHMjNTAuMTguMTguMDAuMDAKLXVuc3BzYzcjNTAuMTguMTguMDIuMDAjQ3JhY2tlcnMgb3IgZHJ5IG9yIHNhdm91cnkgYmlzY3VpdHMjNTAuMTguMTguMDAuMDAKLXVuc3BzYzcjNTAuMTguMTguMDMuMDAjQnJlYWQjNTAuMTguMTguMDAuMDAKLXVuc3BzYzcjNTAuMTguMTguMDQuMDAjUGFzdHJpZXMjNTAuMTguMTguMDAuMDAKLXVuc3BzYzcjNTAuMTguMTguMDUuMDAjQ2FrZXMjNTAuMTguMTguMDAuMDAKLXVuc3BzYzcjNTAuMTguMTguMDYuMDAjQ29va2llIG9yIHN3ZWV0IGJpc2N1aXQjNTAuMTguMTguMDAuMDAKLXVuc3BzYzcjNTAuMTguMTguMDcuMDAjQmlzY3VpdHMjNTAuMTguMTguMDAuMDAKLXVuc3BzYzcjNTAuMTguMTguMDguMDAjVW5sZWF2ZW5lZCBicmVhZCM1MC4xOC4xOC4wMC4wMAotdW5zcHNjNyM1MC4xOC4xOC4wOS4wMCNNdWZmaW5zIzUwLjE4LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE4LjE4LjEwLjAwI0RvbnV0cyM1MC4xOC4xOC4wMC4wMAotdW5zcHNjNyM1MC4xOC4xOC4xMS4wMCNQaXp6YSBvciBwaXp6YSBiYXNlcyM1MC4xOC4xOC4wMC4wMAotdW5zcHNjNyM1MC4xOC4xOC4xMi4wMCNDb3JuZXRzIG9yIGNvbmVzIG9yIHdhZmZsZXMjNTAuMTguMTguMDAuMDAKLXVuc3BzYzcjNTAuMTguMTkuMDAuMDAjQnJlYWQgYW5kIGJpc2N1aXRzIGFuZCBjb29raWVzIzUwLjE4LjAwLjAwLjAwCi11bnNwc2M3IzUwLjE4LjE5LjAxLjAwI0ZyZXNoIGJyZWFkIzUwLjE4LjE5LjAwLjAwCi11bnNwc2M3IzUwLjE4LjE5LjAyLjAwI0Zyb3plbiBicmVhZCM1MC4xOC4xOS4wMC4wMAotdW5zcHNjNyM1MC4xOC4xOS4wMy4wMCNQbGFpbiBzYXZvcnkgYmlzY3VpdHMjNTAuMTguMTkuMDAuMDAKLXVuc3BzYzcjNTAuMTguMTkuMDQuMDAjRHJpZWQgYnJlYWRzIG9yIGJyZWFkIHNoZWxscyBvciBjcm91dG9ucyM1MC4xOC4xOS4wMC4wMAotdW5zcHNjNyM1MC4xOC4xOS4wNS4wMCNTd2VldCBiaXNjdWl0cyBvciBjb29raWVzIzUwLjE4LjE5LjAwLjAwCi11bnNwc2M3IzUwLjE4LjIwLjAwLjAwI0Nha2VzIGFuZCBwaWVzIGFuZCBwYXN0cmllcyM1MC4xOC4wMC4wMC4wMAotdW5zcHNjNyM1MC4xOC4yMC4wMS4wMCNGcmVzaCBjYWtlcyBvciBwaWVzIG9yIHBhc3RyaWVzIzUwLjE4LjIwLjAwLjAwCi11bnNwc2M3IzUwLjE4LjIwLjAyLjAwI0Zyb3plbiBjYWtlcyBvciBwaWVzIG9yIHBhc3RyaWVzIzUwLjE4LjIwLjAwLjAwCi11bnNwc2M3IzUwLjE5LjAwLjAwLjAwI1ByZXBhcmVkIGFuZCBwcmVzZXJ2ZWQgZm9vZHMjNTAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMTUuMDAuMDAjUHJlcGFyZWQgc291cHMgYW5kIHN0ZXdzIzUwLjE5LjAwLjAwLjAwCi11bnNwc2M3IzUwLjE5LjE1LjAxLjAwI1N0ZXdzIzUwLjE5LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE5LjE1LjAyLjAwI1NvdXBzIzUwLjE5LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE5LjE1LjAzLjAwI1N0b2NrIG9yIHN0b2NrIGN1YmVzIzUwLjE5LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE5LjE1LjA0LjAwI1N0ZXcgb3IgY2Fzc2Vyb2xlIGJhc2UjNTAuMTkuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMTUuMDUuMDAjRnJlc2ggcHJlcGFyZWQgc291cHMgb3Igc3Rld3MjNTAuMTkuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMTUuMDYuMDAjRnJvemVuIHByZXBhcmVkIHNvdXBzIG9yIHN0ZXdzIzUwLjE5LjE1LjAwLjAwCi11bnNwc2M3IzUwLjE5LjE1LjA3LjAwI1NoZWxmIHN0YWJsZSBwcmVwYXJlZCBzb3VwcyBvciBzdGV3cyM1MC4xOS4xNS4wMC4wMAotdW5zcHNjNyM1MC4xOS4xNi4wMC4wMCNGcm96ZW4gZm9vZHMjNTAuMTkuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMTYuMDEuMDAjRnJvemVuIGRlc3NlcnRzIzUwLjE5LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE5LjE2LjAyLjAwI0Zyb3plbiBtZWF0cyM1MC4xOS4xNi4wMC4wMAotdW5zcHNjNyM1MC4xOS4xNi4wMy4wMCNGcm96ZW4gZnJ1aXRzIzUwLjE5LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE5LjE2LjA0LjAwI0Zyb3plbiB2ZWdldGFibGVzIzUwLjE5LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE5LjE2LjA1LjAwI0Zyb3plbiBwcmVwYXJlZCBtZWFscyM1MC4xOS4xNi4wMC4wMAotdW5zcHNjNyM1MC4xOS4xNi4wNi4wMCNGcm96ZW4gZmlzaCM1MC4xOS4xNi4wMC4wMAotdW5zcHNjNyM1MC4xOS4xNi4wNy4wMCNGcm96ZW4gY3J1c3RhY2VhbnMjNTAuMTkuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMTYuMDguMDAjRnJvemVuIG1vbGx1c2tzIzUwLjE5LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE5LjE2LjA5LjAwI0Zyb3plbiBwcmVwYXJlZCBwYXN0cnkgdW5iYWtlZCM1MC4xOS4xNi4wMC4wMAotdW5zcHNjNyM1MC4xOS4xNi4xMC4wMCNGcm96ZW4gc2F2b3VyaWVzIzUwLjE5LjE2LjAwLjAwCi11bnNwc2M3IzUwLjE5LjE3LjAwLjAwI0Nhbm5lZCBmb29kcyBhbmQgYm90dGxlZCBldGMjNTAuMTkuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMTcuMDEuMDAjQ2FubmVkIGZydWl0cyM1MC4xOS4xNy4wMC4wMAotdW5zcHNjNyM1MC4xOS4xNy4wMi4wMCNDYW5uZWQgdmVnZXRhYmxlcyM1MC4xOS4xNy4wMC4wMAotdW5zcHNjNyM1MC4xOS4xNy4wMy4wMCNDYW5uZWQgZmlzaCM1MC4xOS4xNy4wMC4wMAotdW5zcHNjNyM1MC4xOS4xNy4wNC4wMCNDYW5uZWQgbWVhdCM1MC4xOS4xNy4wMC4wMAotdW5zcHNjNyM1MC4xOS4xNy4wNS4wMCNDYW5uZWQgSW5mYW50IGZvb2RzIzUwLjE5LjE3LjAwLjAwCi11bnNwc2M3IzUwLjE5LjE3LjA2LjAwI0ZydWl0IGphbXMjNTAuMTkuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMTcuMDcuMDAjTWFybWFsYWRlIzUwLjE5LjE3LjAwLjAwCi11bnNwc2M3IzUwLjE5LjE3LjA4LjAwI0Nhbm5lZCBwcmVwYXJlZCBtZWFscyM1MC4xOS4xNy4wMC4wMAotdW5zcHNjNyM1MC4xOS4xNy4wOS4wMCNDYW5uZWQgZGVzc2VydHMjNTAuMTkuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMTguMDAuMDAjRHJpZWQgZm9vZHMjNTAuMTkuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMTguMDEuMDAjRHJpZWQgZmlzaCM1MC4xOS4xOC4wMC4wMAotdW5zcHNjNyM1MC4xOS4xOC4wMi4wMCNEcmllZCBtZWF0IzUwLjE5LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE5LjE4LjAzLjAwI0RyaWVkIHZlZ2V0YWJsZXMjNTAuMTkuMTguMDAuMDAKLXVuc3BzYzcjNTAuMTkuMTguMDQuMDAjRHJpZWQgZnJ1aXRzIzUwLjE5LjE4LjAwLjAwCi11bnNwc2M3IzUwLjE5LjE5LjAwLjAwI1NhbHRlZCBhbmQgc21va2VkIGZvb2RzIzUwLjE5LjAwLjAwLjAwCi11bnNwc2M3IzUwLjE5LjE5LjAxLjAwI1NhbHRlZCBvciBzbW9rZWQgZmlzaCM1MC4xOS4xOS4wMC4wMAotdW5zcHNjNyM1MC4xOS4xOS4wMi4wMCNTYWx0ZWQgb3Igc21va2VkIG1lYXRzIzUwLjE5LjE5LjAwLjAwCi11bnNwc2M3IzUwLjE5LjE5LjAzLjAwI1NhbHRlZCBvciBzbW9rZWQgc2hlbGxmaXNoIG9yIGNydXN0YWNlYW5zIG9yIHJvZSM1MC4xOS4xOS4wMC4wMAotdW5zcHNjNyM1MC4xOS4xOS4wNC4wMCNTYWx0ZWQgb3Igc21va2VkIGZydWl0cyM1MC4xOS4xOS4wMC4wMAotdW5zcHNjNyM1MC4xOS4xOS4wNS4wMCNTYWx0ZWQgb3Igc21va2VkIG51dHMjNTAuMTkuMTkuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjAuMDAuMDAjUGlja2xlZCBmb29kcyM1MC4xOS4wMC4wMC4wMAotdW5zcHNjNyM1MC4xOS4yMC4wMS4wMCNQaWNrbGVkIGZpc2gjNTAuMTkuMjAuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjAuMDIuMDAjUGlja2xlZCBjcnVzdGFjZWFucyM1MC4xOS4yMC4wMC4wMAotdW5zcHNjNyM1MC4xOS4yMC4wMy4wMCNQaWNrbGVkIG1lYXRzIzUwLjE5LjIwLjAwLjAwCi11bnNwc2M3IzUwLjE5LjIwLjA0LjAwI1BpY2tsZWQgdmVnZXRhYmxlcyM1MC4xOS4yMC4wMC4wMAotdW5zcHNjNyM1MC4xOS4yMC4wNS4wMCNQaWNrbGVkIGVnZ3MjNTAuMTkuMjAuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjEuMDAuMDAjU25hY2sgZm9vZHMjNTAuMTkuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjEuMDEuMDAjUHJldHplbHMjNTAuMTkuMjEuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjEuMDIuMDAjQ29ybiBjaGlwcyM1MC4xOS4yMS4wMC4wMAotdW5zcHNjNyM1MC4xOS4yMS4wMy4wMCNQb3RhdG8gY2hpcHMjNTAuMTkuMjEuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjEuMDQuMDAjUG9wY29ybiM1MC4xOS4yMS4wMC4wMAotdW5zcHNjNyM1MC4xOS4yMS4wNS4wMCNGaXNoIGZpbmdlcnMjNTAuMTkuMjEuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjEuMDYuMDAjRnJ1aXQgc25hY2tzIzUwLjE5LjIxLjAwLjAwCi11bnNwc2M3IzUwLjE5LjIxLjA3LjAwI090aGVyIGZsYXZvdXJlZCBzbmFjayBmb29kcyM1MC4xOS4yMS4wMC4wMAotdW5zcHNjNyM1MC4xOS4yMS4wOC4wMCNGcnVpdCBvciBudXQgbWl4IzUwLjE5LjIxLjAwLjAwCi11bnNwc2M3IzUwLjE5LjIxLjA5LjAwI0NyaXNwcyBvciBjaGlwcyBvciBwcmV0emVscyBvciBtaXhlcyM1MC4xOS4yMS4wMC4wMAotdW5zcHNjNyM1MC4xOS4yMS4xMC4wMCNOdXRzIG9yIGRyaWVkIGZydWl0cyM1MC4xOS4yMS4wMC4wMAotdW5zcHNjNyM1MC4xOS4yMS4xMS4wMCNEcmllZCBvciBwcm9jZXNzZWQgbWVhdHMjNTAuMTkuMjEuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjEuMTIuMDAjUG9wcGVkIGNvcm4jNTAuMTkuMjEuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjIuMDAuMDAjU3ByZWFkcyBhbmQgY29uc2VydmVzIzUwLjE5LjAwLjAwLjAwCi11bnNwc2M3IzUwLjE5LjIyLjAxLjAwI1BlYW51dCBidXR0ZXIjNTAuMTkuMjIuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjIuMDIuMDAjWWVhc3Qgb3IgdmVnZXRhYmxlIGV4dHJhY3Qgc3ByZWFkcyM1MC4xOS4yMi4wMC4wMAotdW5zcHNjNyM1MC4xOS4yMi4wMy4wMCNKYW1zIG9yIGplbGxpZXMgb3IgcXVpbmNlcyM1MC4xOS4yMi4wMC4wMAotdW5zcHNjNyM1MC4xOS4yMy4wMC4wMCNEZXNlcnRzIGFuZCBkZXNlcnQgdG9wcGluZ3MjNTAuMTkuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjMuMDEuMDAjUHJlcGFyZWQgZGVzZXJ0cyM1MC4xOS4yMy4wMC4wMAotdW5zcHNjNyM1MC4xOS4yMy4wMi4wMCNEZXNlcnQgdG9wcGluZ3MjNTAuMTkuMjMuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjMuMDMuMDAjRmxhdm9yZWQgaWNlcyBvciBpY2UgY3JlYW0gb3IgaWNlIGNyZWFtIGRlc2VydHMgb3IgZnJvemVuIHlvZ3VydHMjNTAuMTkuMjMuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjQuMDAuMDAjSmFtcyBhbmQgamVsbGllcyBhbmQgbnV0IGFuZCBzd2VldCBzcHJlYWRzIGFuZCBmcnVpdCBjb25zZXJ2ZXMjNTAuMTkuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjQuMDEuMDAjSmFtcyBvciBqZWxsaWVzIG9yIGZydWl0IHByZXNlcnZlcyM1MC4xOS4yNC4wMC4wMAotdW5zcHNjNyM1MC4xOS4yNC4wMi4wMCNOdXQgb3IgbWl4ZWQgc3ByZWFkcyM1MC4xOS4yNC4wMC4wMAotdW5zcHNjNyM1MC4xOS4yNC4wMy4wMCNIb25leSM1MC4xOS4yNC4wMC4wMAotdW5zcHNjNyM1MC4xOS4yNS4wMC4wMCNTYW5kd2ljaGVzIGFuZCBmaWxsZWQgcm9sbHMjNTAuMTkuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjUuMDEuMDAjRnJlc2ggc2FuZHdpY2hlcyBvciBmaWxsZWQgcm9sbHMjNTAuMTkuMjUuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjUuMDIuMDAjRnJvemVuIHNhbmR3aWNoZXMgb3IgZmlsbGVkIHJvbGxzIzUwLjE5LjI1LjAwLjAwCi11bnNwc2M3IzUwLjE5LjI2LjAwLjAwI1ByZXBhcmVkIHBvdGF0b2VzIGFuZCByaWNlIGFuZCBwYXN0YSBhbmQgc3R1ZmZpbmcjNTAuMTkuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjYuMDEuMDAjRnJlc2ggcHJlcGFyZWQgcG90YXRvZXMgb3IgcmljZSBvciBwYXN0YSBvciBzdHVmZmluZyM1MC4xOS4yNi4wMC4wMAotdW5zcHNjNyM1MC4xOS4yNi4wMi4wMCNGcm96ZW4gcHJlcGFyZWQgcG90YXRvZXMgb3IgcmljZSBvciBwYXN0YSBvciBzdHVmZmluZyM1MC4xOS4yNi4wMC4wMAotdW5zcHNjNyM1MC4xOS4yNi4wMy4wMCNTaGVsZiBzdGFibGUgcHJlcGFyZWQgcG90YXRvZXMgb3IgcmljZSBvciBwYXN0YSBvciBzdHVmZmluZyM1MC4xOS4yNi4wMC4wMAotdW5zcHNjNyM1MC4xOS4yNy4wMC4wMCNQYWNrYWdlZCBjb21iaW5hdGlvbiBtZWFscyM1MC4xOS4wMC4wMC4wMAotdW5zcHNjNyM1MC4xOS4yNy4wMS4wMCNGcmVzaCBjb21iaW5hdGlvbiBtZWFscyM1MC4xOS4yNy4wMC4wMAotdW5zcHNjNyM1MC4xOS4yNy4wMi4wMCNGcm96ZW4gY29tYmluYXRpb24gbWVhbHMjNTAuMTkuMjcuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjcuMDMuMDAjU2hlbGYgc3RhYmxlIGNvbWJpbmF0aW9uIG1lYWxzIzUwLjE5LjI3LjAwLjAwCi11bnNwc2M3IzUwLjE5LjI4LjAwLjAwI1Nhdm9yeSBwaWVzIGFuZCBxdWljaGVzIGFuZCBwYXN0aWVzIzUwLjE5LjAwLjAwLjAwCi11bnNwc2M3IzUwLjE5LjI4LjAxLjAwI0ZyZXNoIHNhdm9yeSBwaWVzIG9yIHF1aWNoZXMgb3IgcGFzdGllcyM1MC4xOS4yOC4wMC4wMAotdW5zcHNjNyM1MC4xOS4yOC4wMi4wMCNGcm96ZW4gc2F2b3J5IHBpZXMgb3IgcXVpY2hlcyBvciBwYXN0aWVzIzUwLjE5LjI4LjAwLjAwCi11bnNwc2M3IzUwLjE5LjI4LjAzLjAwI1NoZWxmIHN0YWJsZSBzYXZvcnkgcGllcyBvciBxdWljaGVzIG9yIHBhc3RpZXMjNTAuMTkuMjguMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjkuMDAuMDAjUGxhaW4gcGFzdGEgYW5kIG5vb2RsZXMjNTAuMTkuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMjkuMDEuMDAjRnJlc2ggcGxhaW4gcGFzdGEgb3Igbm9vZGxlcyM1MC4xOS4yOS4wMC4wMAotdW5zcHNjNyM1MC4xOS4yOS4wMi4wMCNTaGVsZiBzdGFibGUgcGxhaW4gcGFzdGEgb3Igbm9vZGxlcyM1MC4xOS4yOS4wMC4wMAotdW5zcHNjNyM1MC4xOS4zMC4wMC4wMCNJbmZhbnQgZm9vZHMgYW5kIGJldmVyYWdlcyM1MC4xOS4wMC4wMC4wMAotdW5zcHNjNyM1MC4xOS4zMC4wMS4wMCNJbmZhbnQgZm9vZHMjNTAuMTkuMzAuMDAuMDAKLXVuc3BzYzcjNTAuMTkuMzAuMDIuMDAjSW5mYW50IGJldmVyYWdlcyM1MC4xOS4zMC4wMC4wMAotdW5zcHNjNyM1MC4yMC4wMC4wMC4wMCNCZXZlcmFnZXMjNTAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTUuMDAuMDAjV2F0ZXIjNTAuMjAuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTUuMDEuMDAjU3BhcmtsaW5nIHdhdGVyIzUwLjIwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjIwLjE1LjAyLjAwI1NwcmluZyB3YXRlciM1MC4yMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4yMC4xNS4wMy4wMCNNaW5lcmFsIHdhdGVyIzUwLjIwLjE1LjAwLjAwCi11bnNwc2M3IzUwLjIwLjE1LjA0LjAwI0Rpc3RpbGxlZCBvciBwdXJpZmllZCB3YXRlciM1MC4yMC4xNS4wMC4wMAotdW5zcHNjNyM1MC4yMC4xNi4wMC4wMCNKdWljZXMjNTAuMjAuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTYuMDEuMDAjQmxlbmRlZCBqdWljZXMjNTAuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTYuMDIuMDAjR3VhdmEganVpY2UjNTAuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTYuMDMuMDAjUHJ1bmUganVpY2UjNTAuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTYuMDQuMDAjVG9tYXRvIGp1aWNlIzUwLjIwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjIwLjE2LjA1LjAwI0NyYW5iZXJyeSBqdWljZSM1MC4yMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4yMC4xNi4wNi4wMCNHcmFwZWZydWl0IGp1aWNlIzUwLjIwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjIwLjE2LjA3LjAwI0dyYXBlIGp1aWNlIzUwLjIwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjIwLjE2LjA4LjAwI1BpbmVhcHBsZSBqdWljZSM1MC4yMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4yMC4xNi4wOS4wMCNPcmFuZ2UganVpY2UjNTAuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTYuMTAuMDAjQXBwbGUganVpY2UjNTAuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTYuMTEuMDAjTGVtb24ganVpY2VzIG9yIGxlbW9uYWRlIzUwLjIwLjE2LjAwLjAwCi11bnNwc2M3IzUwLjIwLjE2LjEyLjAwI0luZmFudCBqdWljZSM1MC4yMC4xNi4wMC4wMAotdW5zcHNjNyM1MC4yMC4xNy4wMC4wMCNDb2ZmZWUgYW5kIHRlYSM1MC4yMC4wMC4wMC4wMAotdW5zcHNjNyM1MC4yMC4xNy4wMS4wMCNJbnN0YW50IGNvZmZlZSM1MC4yMC4xNy4wMC4wMAotdW5zcHNjNyM1MC4yMC4xNy4wMi4wMCNHcm91bmQgY29mZmVlIzUwLjIwLjE3LjAwLjAwCi11bnNwc2M3IzUwLjIwLjE3LjAzLjAwI1dob2xlIGJlYW4gY29mZmVlIzUwLjIwLjE3LjAwLjAwCi11bnNwc2M3IzUwLjIwLjE3LjA0LjAwI0dyZWVuIGNvZmZlZSM1MC4yMC4xNy4wMC4wMAotdW5zcHNjNyM1MC4yMC4xNy4wNS4wMCNDb2ZmZWUgc3Vic3RpdHV0ZXMjNTAuMjAuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTcuMDYuMDAjQ29mZmVlIzUwLjIwLjE3LjAwLjAwCi11bnNwc2M3IzUwLjIwLjE3LjA3LjAwI0NvZmZlZSBzdWJzdGl0dXRlcyM1MC4yMC4xNy4wMC4wMAotdW5zcHNjNyM1MC4yMC4xNy4wOC4wMCNDb2ZmZWUgZHJpbmtzIzUwLjIwLjE3LjAwLjAwCi11bnNwc2M3IzUwLjIwLjE3LjA5LjAwI0luc3RhbnQgY29mZmVlIzUwLjIwLjE3LjAwLjAwCi11bnNwc2M3IzUwLjIwLjE3LjEwLjAwI0xlYWYgdGVhIzUwLjIwLjE3LjAwLjAwCi11bnNwc2M3IzUwLjIwLjE3LjExLjAwI0luc3RhbnQgdGVhIzUwLjIwLjE3LjAwLjAwCi11bnNwc2M3IzUwLjIwLjE3LjEyLjAwI1RlYSBkcmlua3MjNTAuMjAuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTcuMTMuMDAjVGVhIGJhZ3MjNTAuMjAuMTcuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTguMDAuMDAjVGVhIzUwLjIwLjAwLjAwLjAwCi11bnNwc2M3IzUwLjIwLjE4LjAxLjAwI0dyZWVuIHRlYSM1MC4yMC4xOC4wMC4wMAotdW5zcHNjNyM1MC4yMC4xOC4wMi4wMCNCbGFjayB0ZWEjNTAuMjAuMTguMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTguMDMuMDAjSGVyYmFsIHRlYSM1MC4yMC4xOC4wMC4wMAotdW5zcHNjNyM1MC4yMC4xOC4wNC4wMCNQb3dkZXJlZCB0ZWEjNTAuMjAuMTguMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTguMDUuMDAjVGVhIGJhZ3MjNTAuMjAuMTguMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTkuMDAuMDAjU29mdCBkcmlua3MjNTAuMjAuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTkuMDEuMDAjTm9uIGNhcmJvbmF0ZWQgc29mdCBkcmlua3MjNTAuMjAuMTkuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTkuMDIuMDAjQ2FyYm9uYXRlZCBzb2Z0IGRyaW5rcyM1MC4yMC4xOS4wMC4wMAotdW5zcHNjNyM1MC4yMC4xOS4wMy4wMCNDb3JkaWFscyBvciBjb2xvdXJpbmdzIzUwLjIwLjE5LjAwLjAwCi11bnNwc2M3IzUwLjIwLjE5LjA0LjAwI1Nwb3J0cyBvciBoaWdoIGVuZXJneSBkcmlua3MjNTAuMjAuMTkuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMTkuMDUuMDAjU295IGJldmVyYWdlIzUwLjIwLjE5LjAwLjAwCi11bnNwc2M3IzUwLjIwLjIwLjAwLjAwI0JlZXIgYW5kIHdpbmUjNTAuMjAuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjAuMDEuMDAjQ2hhbXBhZ25lIzUwLjIwLjIwLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIwLjAyLjAwI0JlZXIjNTAuMjAuMjAuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjAuMDMuMDAjV2luZSM1MC4yMC4yMC4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMC4wNC4wMCNTcGFya2xpbmcgd2luZXMjNTAuMjAuMjAuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjAuMDUuMDAjRm9ydGlmaWVkIHdpbmUjNTAuMjAuMjAuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjAuMDYuMDAjUG9ydCM1MC4yMC4yMC4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMC4wNy4wMCNTaGVycnkjNTAuMjAuMjAuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjAuMDguMDAjV2luZSBjb29sZXIgYmV2ZXJhZ2UjNTAuMjAuMjAuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjEuMDAuMDAjU3Bpcml0cyBhbmQgbGlxdW9ycyM1MC4yMC4wMC4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMS4wMS4wMCNCcmFuZHkjNTAuMjAuMjEuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjEuMDIuMDAjQ29nbmFjIG9yIGFybWFnbmFjIzUwLjIwLjIxLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIxLjAzLjAwI1doaXNrZXkjNTAuMjAuMjEuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjEuMDQuMDAjVm9ka2EjNTAuMjAuMjEuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjEuMDUuMDAjVGVxdWlsYSM1MC4yMC4yMS4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMS4wNi4wMCNHaW4jNTAuMjAuMjEuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjEuMDcuMDAjTGlxdWV1cnMjNTAuMjAuMjEuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjEuMDguMDAjUnVtIzUwLjIwLjIxLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIxLjA5LjAwI0JvdXJib24jNTAuMjAuMjEuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjEuMTAuMDAjU2NvdGNoIzUwLjIwLjIxLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIxLjExLjAwI0NpZGVyIzUwLjIwLjIxLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIxLjEyLjAwI1NjaG5hcHBzIzUwLjIwLjIxLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIxLjEzLjAwI091em8jNTAuMjAuMjEuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjEuMTQuMDAjQXBlcml0aWZzIG9yIGJpdHRlcnMjNTAuMjAuMjEuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjEuMTUuMDAjVmVybW91dGgjNTAuMjAuMjEuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjEuMTYuMDAjU2FtYnVjYSM1MC4yMC4yMS4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMS4xNy4wMCNTYWtlIzUwLjIwLjIxLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIxLjE4LjAwI011c2NhdCBvciBtYWRlaXJhIzUwLjIwLjIxLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIyLjAwLjAwI0FsY29ob2xpYyBiZXZlcmFnZXMjNTAuMjAuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjIuMDEuMDAjQmVlciM1MC4yMC4yMi4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMi4wMi4wMCNDaWRlciBvciBwZXJyeSM1MC4yMC4yMi4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMi4wMy4wMCNXaW5lIzUwLjIwLjIyLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIyLjA0LjAwI0ZvcnRpZmllZCB3aW5lIzUwLjIwLjIyLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIyLjA1LjAwI1NwYXJrbGluZyB3aW5lIzUwLjIwLjIyLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIyLjA2LjAwI1NwaXJpdHMgb3IgbGlxdW9ycyM1MC4yMC4yMi4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMi4wNy4wMCNBbGNvaG9sIGNvY2t0YWlscyBvciBkcmluayBtaXhlcyM1MC4yMC4yMi4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMy4wMC4wMCNOb24gYWxjb2hvbGljIGJldmVyYWdlcyM1MC4yMC4wMC4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMy4wMS4wMCNXYXRlciM1MC4yMC4yMy4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMy4wMi4wMCNJY2UjNTAuMjAuMjMuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjMuMDMuMDAjRnJvemVuIGp1aWNlcyM1MC4yMC4yMy4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMy4wNC4wMCNTaGVsZiBzdGFibGUganVpY2UjNTAuMjAuMjMuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjMuMDUuMDAjRnJlc2gganVpY2UjNTAuMjAuMjMuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjMuMDYuMDAjU29mdCBkcmlua3MjNTAuMjAuMjMuMDAuMDAKLXVuc3BzYzcjNTAuMjAuMjMuMDcuMDAjQ2hvY29sYXRlIG9yIG1hbHQgb3Igb3RoZXIgaG90IGJldmVyYWdlcyM1MC4yMC4yMy4wMC4wMAotdW5zcHNjNyM1MC4yMC4yMy4wOC4wMCNBbGNvaG9sIGZyZWUgY29ja3RhaWxzIG9yIGRyaW5rIG1peGVzIzUwLjIwLjIzLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIzLjA5LjAwI1Nwb3J0IGRyaW5rIG1peGVzIzUwLjIwLjIzLjAwLjAwCi11bnNwc2M3IzUwLjIwLjIzLjEwLjAwI1NwcmluZyB3YXRlciM1MC4yMC4yMy4wMC4wMAotdW5zcHNjNyM1MC4yMS4wMC4wMC4wMCNUb2JhY2NvIGFuZCBzbW9raW5nIHByb2R1Y3RzIGFuZCBzdWJzdGl0dXRlcyM1MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM1MC4yMS4xNS4wMC4wMCNUb2JhY2NvIGFuZCBzdWJzdGl0dXRlcyM1MC4yMS4wMC4wMC4wMAotdW5zcHNjNyM1MC4yMS4xNS4wMS4wMCNUb2JhY2NvIGxlYWYjNTAuMjEuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMjEuMTUuMDIuMDAjQ2lnYXJldHRlcyBvciBjaWdhcnMjNTAuMjEuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMjEuMTUuMDMuMDAjUGlwZSB0b2JhY2NvIG9yIGxlYWYgdG9iYWNjbyM1MC4yMS4xNS4wMC4wMAotdW5zcHNjNyM1MC4yMS4xNS4wNC4wMCNDaGV3aW5nIHRvYmFjY28jNTAuMjEuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMjEuMTUuMDUuMDAjSGVyYmFsIGNpZ2FyZXR0ZXMjNTAuMjEuMTUuMDAuMDAKLXVuc3BzYzcjNTAuMjEuMTYuMDAuMDAjVG9iYWNjbyBwcm9kdWN0IGFjY2Vzc29yaWVzIGFuZCBzdXBwbGllcyM1MC4yMS4wMC4wMC4wMAotdW5zcHNjNyM1MC4yMS4xNi4wMS4wMCNQaXBlIHRvYmFjY28jNTAuMjEuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMjEuMTYuMDIuMDAjQ2lnYXJzIzUwLjIxLjE2LjAwLjAwCi11bnNwc2M3IzUwLjIxLjE2LjAzLjAwI0NpZ2FyZXR0ZXMjNTAuMjEuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMjEuMTYuMDQuMDAjU21va2VsZXNzIHRvYmFjY28jNTAuMjEuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMjEuMTYuMDUuMDAjUmVhZHkgcnViYmVkIHRvYmFjY28jNTAuMjEuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMjEuMTYuMDYuMDAjQ2lnYXJldHRlIHBhcGVycyM1MC4yMS4xNi4wMC4wMAotdW5zcHNjNyM1MC4yMS4xNi4wNy4wMCNDaWdhcmV0dGUgcGFwZXJzIG9yIGZpbHRlcnMjNTAuMjEuMTYuMDAuMDAKLXVuc3BzYzcjNTAuMjEuMTYuMDguMDAjQ2lnYXJldHRlIGxpZ2h0ZXJzIG9yIGZsaW50cyM1MC4yMS4xNi4wMC4wMAotdW5zcHNjNyM1MC4yMS4xNi4wOS4wMCNTbW9raW5nIHBpcGVzIzUwLjIxLjE2LjAwLjAwCi11bnNwc2M3IzUwLjIyLjAwLjAwLjAwI0NlcmVhbCBhbmQgcHVsc2UgcHJvZHVjdHMjNTAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTAuMjIuMTAuMDAuMDAjUHVsc2VzIzUwLjIyLjAwLjAwLjAwCi11bnNwc2M3IzUwLjIyLjEwLjAxLjAwI1B1bHNlIGdyYWlucyM1MC4yMi4xMC4wMC4wMAotdW5zcHNjNyM1MC4yMi4xMC4wMi4wMCNQdWxzZSBmbG91ciM1MC4yMi4xMC4wMC4wMAotdW5zcHNjNyM1MC4yMi4xMS4wMC4wMCNDZXJlYWxzIzUwLjIyLjAwLjAwLjAwCi11bnNwc2M3IzUwLjIyLjExLjAxLjAwI0NlcmVhbCBncmFpbnMjNTAuMjIuMTEuMDAuMDAKLXVuc3BzYzcjNTAuMjIuMTEuMDIuMDAjQ2VyZWFsIGZsb3VyIzUwLjIyLjExLjAwLjAwCi11bnNwc2M3IzUwLjIyLjEyLjAwLjAwI1Byb2Nlc3NlZCBjZXJlYWxzIzUwLjIyLjAwLjAwLjAwCi11bnNwc2M3IzUwLjIyLjEyLjAxLjAwI1JlYWR5IHRvIGVhdCBvciBob3QgY2VyZWFscyM1MC4yMi4xMi4wMC4wMAotdW5zcHNjNyM1MC4yMi4xMi4wMi4wMCNIZWFsdGggb3IgYnJlYWtmYXN0IGJhcnMjNTAuMjIuMTIuMDAuMDAKLXVuc3BzYzcjNTEuMDAuMDAuMDAuMDAjRHJ1Z3MgYW5kIFBoYXJtYWNldXRpY2FsIFByb2R1Y3RzIzUxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUxLjEwLjAwLjAwLjAwI0FudGkgaW5mZWN0aXZlIGRydWdzIzUxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUxLjEwLjE1LjAwLjAwI0FudGliaW90aWNzIzUxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzUxLjEwLjE1LjAxLjAwI0FtaW5vZ2x5Y29zaWRlcyM1MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MS4xMC4xNS4wMi4wMCNDZXBoYWxvc3BvcmlucyM1MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MS4xMC4xNS4wMy4wMCNDaGxvcmFtcGhlbmljb2wjNTEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTUuMDQuMDAjQ2xpbmRhbXljaW4gb3IgbGluY29teWNpbiM1MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MS4xMC4xNS4wNS4wMCNGbHVvcm9xdWlub2xvbmVzIzUxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE1LjA2LjAwI01hY3JvbGlkZSM1MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MS4xMC4xNS4wNy4wMCNQZW5pY2lsbGlucyM1MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MS4xMC4xNS4wOC4wMCNBbnRpYmlvdGljIHN1bGZvbmFtaWRlcyM1MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM1MS4xMC4xNS4wOS4wMCNUZXRyYWN5Y2xpbmVzIzUxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE2LjAwLjAwI0FtZWJpY2lkZXMgYW5kIFRyaWNob21vbmFjaWRlcyBhbmQgQW50aXByb3Rvem9hbHMjNTEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTYuMDEuMDAjQXRvdmFxdW9uZSM1MS4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MS4xMC4xNi4wMi4wMCNFZmxvcm5pdGhpbmUgaHlkcm9jaGxvcmlkZSM1MS4xMC4xNi4wMC4wMAotdW5zcHNjNyM1MS4xMC4xNi4wMy4wMCNNZXRyb25pZGF6b2xlIzUxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE3LjAwLjAwI0FudGhlbG1pbnRpY3MjNTEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTcuMDEuMDAjQWxiZW5kYWRvbGUjNTEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTcuMDIuMDAjTWViZW5kYXpvbGUjNTEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTcuMDMuMDAjT3hhbW5pcXVpbmUjNTEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTcuMDQuMDAjUGlwZXJhemluZSBjaXRyYXRlIzUxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE3LjA1LjAwI1ByYXppcXVhbnRlbCM1MS4xMC4xNy4wMC4wMAotdW5zcHNjNyM1MS4xMC4xNy4wNi4wMCNQeXJhbnRlbCBwYW1vYXRlIzUxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE3LjA3LjAwI1RoaWFiZW5kYXpvbGUjNTEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTguMDAuMDAjQW50aWZ1bmdhbCBkcnVncyM1MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xMC4xOC4wMS4wMCNBbXBob3RlcmljaW4gYiM1MS4xMC4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMC4xOC4wMi4wMCNCdXRlbmFmaW5lIGh5ZHJvY2hsb3JpZGUjNTEuMTAuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTguMDMuMDAjQnV0b2NvbmF6b2xlIG5pdHJhdGUjNTEuMTAuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTguMDQuMDAjQ2ljbG9waXJveCBvbGFtaW5lIzUxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE4LjA1LjAwI0Nsb3RyaW1hem9sZSM1MS4xMC4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMC4xOC4wNi4wMCNFY29uYXpvbGUgbml0cmF0ZSM1MS4xMC4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMC4xOC4wNy4wMCNGbHVjb25hem9sZSM1MS4xMC4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMC4xOC4wOC4wMCNGbHVjeXRvc2luZSM1MS4xMC4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMC4xOC4wOS4wMCNHcmlzZW9mdWx2aW4jNTEuMTAuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTguMTAuMDAjSXRyYWNvbmF6b2xlIzUxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE4LjExLjAwI0tldG9jb25hem9sZSM1MS4xMC4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMC4xOC4xMi4wMCNNaWNvbmF6b2xlIzUxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE4LjEzLjAwI05hZnRpZmluZSBoeWRyb2NobG9yaWRlIzUxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE4LjE0LjAwI05hdGFteWNpbiM1MS4xMC4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMC4xOC4xNS4wMCNOeXN0YXRpbiM1MS4xMC4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMC4xOC4xNi4wMCNPeGljb25hem9sZSBuaXRyYXRlIzUxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE4LjE3LjAwI1N1bGNvbmF6b2xlIG5pdHJhdGUjNTEuMTAuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTguMTguMDAjVGVyYmluYWZpbmUgaHlkcm9jaGxvcmlkZSM1MS4xMC4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMC4xOC4xOS4wMCNUZXJjb25hem9sZSBuaXRyYXRlIzUxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE4LjIwLjAwI1Rpb2NvbmF6b2xlIzUxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE4LjIxLjAwI1RvbG5hZnRhdGUjNTEuMTAuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTkuMDAuMDAjQW50aW1hbGFyaWFsIGRydWdzIzUxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzUxLjEwLjE5LjAxLjAwI0FtaW5vcXVpbm9saW5lcyM1MS4xMC4xOS4wMC4wMAotdW5zcHNjNyM1MS4xMC4xOS4wMi4wMCNNZWZsb3F1aW5lIGh5ZHJvY2hsb3JpZGUjNTEuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTkuMDMuMDAjUHJpbWFxdWluZSBwaG9zcGhhdGUjNTEuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMTkuMDQuMDAjUXVpbmluZSBzdWxmYXRlIzUxLjEwLjE5LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE5LjA1LjAwI0NobG9yb3F1aW5lIzUxLjEwLjE5LjAwLjAwCi11bnNwc2M3IzUxLjEwLjE5LjA2LjAwI1Byb2d1YW5pbCM1MS4xMC4xOS4wMC4wMAotdW5zcHNjNyM1MS4xMC4xOS4wNy4wMCNQeXJpbWV0aGFtaW5lIzUxLjEwLjE5LjAwLjAwCi11bnNwc2M3IzUxLjEwLjIwLjAwLjAwI0FudGl0dWJlcmN1bGFyIGRydWdzIzUxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIwLjAxLjAwI0N5Y2xvc2VyaW5lIzUxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIwLjAyLjAwI0V0aGFtYnV0b2wgaHlkcm9jaGxvcmlkZSM1MS4xMC4yMC4wMC4wMAotdW5zcHNjNyM1MS4xMC4yMC4wMy4wMCNJc29uaWF6aWQjNTEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjAuMDQuMDAjUmlmdWJ1dGluIzUxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIwLjA1LjAwI1JpZmFtcGluIzUxLjEwLjIwLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIxLjAwLjAwI0xlcHJvc3RhdGljcyM1MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xMC4yMS4wMS4wMCNDbG9mYXppbWluZSM1MS4xMC4yMS4wMC4wMAotdW5zcHNjNyM1MS4xMC4yMS4wMi4wMCNEYXBzb25lIzUxLjEwLjIxLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIyLjAwLjAwI1VyaW5hcnkgYW50aSBpbmZlY3RpdmVzIGFuZCBhbmFsZ2VzaWNzIzUxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIyLjAxLjAwI0Npbm94YWNpbiM1MS4xMC4yMi4wMC4wMAotdW5zcHNjNyM1MS4xMC4yMi4wMi4wMCNGbGF2b3hhdGUgaHlkcm9jaGxvcmlkZSM1MS4xMC4yMi4wMC4wMAotdW5zcHNjNyM1MS4xMC4yMi4wMy4wMCNNZXRoZW5hbWluZSBoaXBwdXJhdGUjNTEuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjIuMDQuMDAjTWV0aGVuYW1pbmUgbWFuZGVsYXRlIzUxLjEwLjIyLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIyLjA1LjAwI05hbGlkaXhpYyBhY2lkIzUxLjEwLjIyLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIyLjA2LjAwI05pdHJvZnVyYW50b2luIzUxLjEwLjIyLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIyLjA3LjAwI094eWJ1dHluaW4gY2hsb3JpZGUjNTEuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjIuMDguMDAjUGVudG9zYW4gcG9seXN1bGZhdGUgc29kaXVtIzUxLjEwLjIyLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIyLjA5LjAwI1BoZW5hem9weXJpZGluZSBoeWRyb2NobG9yaWRlIzUxLjEwLjIyLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIyLjEwLjAwI0FudGlzZXB0aWMgc29sdXRpb25zIzUxLjEwLjIyLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIzLjAwLjAwI0FudGl2aXJhbCBkcnVncyM1MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xMC4yMy4wMS4wMCNBY3ljbG92aXIjNTEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjMuMDIuMDAjQW1hbnRhZGluZSBoeWRyb2NobG9yaWRlIzUxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIzLjAzLjAwI0N5ZG9mb3ZpciM1MS4xMC4yMy4wMC4wMAotdW5zcHNjNyM1MS4xMC4yMy4wNC4wMCNEaWRhbm9zaW5lIzUxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIzLjA1LjAwI0ZhbWNpY2xvdmlyIzUxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIzLjA2LjAwI0Zvc2Nhcm5ldCBzb2RpdW0jNTEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjMuMDcuMDAjR2FuY2ljbG92aXIgc29kaXVtIzUxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIzLjA4LjAwI0lkb3h1cmlkaW5lIzUxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIzLjA5LjAwI0luZGluYXZpciBzdWxmYXRlIzUxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIzLjEwLjAwI0xhbWl2dWRpbmUjNTEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjMuMTEuMDAjTmV2aXJhcGluZSM1MS4xMC4yMy4wMC4wMAotdW5zcHNjNyM1MS4xMC4yMy4xMi4wMCNSaWJhdmlyaW4jNTEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjMuMTMuMDAjUmltYW50YWRpbmUgaHlkcm9jaGxvcmlkZSM1MS4xMC4yMy4wMC4wMAotdW5zcHNjNyM1MS4xMC4yMy4xNC4wMCNSaXRvbmF2aXIjNTEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjMuMTUuMDAjU2FxdWluYXZpciBtZXN5bGF0ZSM1MS4xMC4yMy4wMC4wMAotdW5zcHNjNyM1MS4xMC4yMy4xNi4wMCNTdGF2aWRpbmUjNTEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjMuMTcuMDAjVHJpZmx1cmFkaW5lIzUxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIzLjE4LjAwI1ZhbGFjeWNsb3ZpciBoeWRyb2NobG9yaWRlIzUxLjEwLjIzLjAwLjAwCi11bnNwc2M3IzUxLjEwLjIzLjE5LjAwI1ZpZGFyYWJpbmUjNTEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjMuMjAuMDAjWmFsY2l0YWJpbmUjNTEuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNTEuMTAuMjMuMjEuMDAjWmlkb3Z1ZGluZSM1MS4xMC4yMy4wMC4wMAotdW5zcHNjNyM1MS4xMS4wMC4wMC4wMCNBbnRpbmVvcGxhc3RpYyBhZ2VudHMjNTEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTUuMDAuMDAjQWxreWxhdGluZyBhZ2VudHMjNTEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTUuMDEuMDAjQW1pZm9zdGluZSM1MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM1MS4xMS4xNS4wMi4wMCNCdXN1bGZhbiM1MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM1MS4xMS4xNS4wMy4wMCNDYXJib3BsYXRpbiM1MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM1MS4xMS4xNS4wNC4wMCNDYXJtdXN0aW5lIzUxLjExLjE1LjAwLjAwCi11bnNwc2M3IzUxLjExLjE1LjA1LjAwI0NobG9yYW1idWNpbCM1MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM1MS4xMS4xNS4wNi4wMCNDaXNwbGF0aW4jNTEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTUuMDcuMDAjQ3ljbG9waG9zcGhhbWlkZSM1MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM1MS4xMS4xNS4wOC4wMCNEYWNhcmJhemluZSM1MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM1MS4xMS4xNS4wOS4wMCNJZm9zZmFtaWRlIzUxLjExLjE1LjAwLjAwCi11bnNwc2M3IzUxLjExLjE1LjEwLjAwI0xvbXVzdGluZSM1MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM1MS4xMS4xNS4xMS4wMCNNZWNobG9yZXRoYW1pbmUgaHlkcm9jaGxvcmlkZSM1MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM1MS4xMS4xNS4xMi4wMCNNZWxwaGFsYW4jNTEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTUuMTMuMDAjTWVzbmEjNTEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTUuMTQuMDAjUGlwb2Jyb21hbiM1MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM1MS4xMS4xNS4xNS4wMCNTdHJlcHRvem9jaW4jNTEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTUuMTYuMDAjVGhpb3RlcGEjNTEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTUuMTcuMDAjVXJhY2lsIG11c3RhcmQjNTEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTYuMDAuMDAjQW50aW1ldGFib2xpdGVzIzUxLjExLjAwLjAwLjAwCi11bnNwc2M3IzUxLjExLjE2LjAxLjAwI0NsYWRyaWJpbmUjNTEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTYuMDIuMDAjQ3l0YXJhYmluZSM1MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM1MS4xMS4xNi4wMy4wMCNGbG94dXJpZGluZSM1MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM1MS4xMS4xNi4wNC4wMCNGbHVkYXJhYmluZSBwaG9zcGhhdGUjNTEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTYuMDUuMDAjRmx1b3JvdXJhY2lsIzUxLjExLjE2LjAwLjAwCi11bnNwc2M3IzUxLjExLjE2LjA2LjAwI0h5ZHJveHl1cmVhIzUxLjExLjE2LjAwLjAwCi11bnNwc2M3IzUxLjExLjE2LjA3LjAwI0lkYXJ1YmljaW4gaHlkcm9jaGxvcmlkZSM1MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM1MS4xMS4xNi4wOC4wMCNMZXZhbWlzb2xlIGh5ZHJvY2hsb3JpZGUjNTEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTYuMDkuMDAjTWVyY2FwdG9wdXJpbmUjNTEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTYuMTAuMDAjTWV0aG90cmV4YXRlIzUxLjExLjE2LjAwLjAwCi11bnNwc2M3IzUxLjExLjE2LjExLjAwI1Rlbmlwb3NpZGUjNTEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTYuMTIuMDAjVGhpb2d1YW5pbmUjNTEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTcuMDAuMDAjQW50aW5lb3BsYXN0aWMgYW50aWJpb3RpY3MjNTEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTcuMDEuMDAjQmxlb215Y2luIHN1bGZhdGUjNTEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTcuMDIuMDAjRGFjdGlub215Y2luIzUxLjExLjE3LjAwLjAwCi11bnNwc2M3IzUxLjExLjE3LjAzLjAwI0RhdW5vcnViaWNpbnMjNTEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTcuMDQuMDAjTWl0b215Y2luIzUxLjExLjE3LjAwLjAwCi11bnNwc2M3IzUxLjExLjE3LjA1LjAwI01pdG90YW5lIzUxLjExLjE3LjAwLjAwCi11bnNwc2M3IzUxLjExLjE3LjA2LjAwI01pdG94YW50cm9uZSBoeWRyb2NobG9yaWRlIzUxLjExLjE3LjAwLjAwCi11bnNwc2M3IzUxLjExLjE3LjA3LjAwI1BlbnRvc3RhdGluIzUxLjExLjE3LjAwLjAwCi11bnNwc2M3IzUxLjExLjE3LjA4LjAwI1BsaWNhbXljaW4jNTEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTguMDAuMDAjSG9ybW9uZXMgYW5kIGFudGlob3Jtb25lcyM1MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM1MS4xMS4xOC4wMS4wMCNBbmFzdHJvem9sZSM1MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMS4xOC4wMi4wMCNCaWNhbHV0YW1pZGUjNTEuMTEuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTguMDMuMDAjRXN0cmFtdXN0aW5lIHBob3NwaGF0ZSBzb2RpdW0jNTEuMTEuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTguMDQuMDAjRmx1dGFtaWRlIzUxLjExLjE4LjAwLjAwCi11bnNwc2M3IzUxLjExLjE4LjA1LjAwI0dvc2VyZWxpbiBhY2V0YXRlIzUxLjExLjE4LjAwLjAwCi11bnNwc2M3IzUxLjExLjE4LjA2LjAwI0lyaW5vdGVjYW4gaHlkcm9jaGxvcmlkZSM1MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMS4xOC4wNy4wMCNMZXVwcm9saWRlIGFjZXRhdGUjNTEuMTEuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTguMDguMDAjTmlsdXRhbWlkZSM1MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMS4xOC4wOS4wMCNUYW1veGlmZW4jNTEuMTEuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTguMTAuMDAjVGVzdG9sYWN0b25lIzUxLjExLjE4LjAwLjAwCi11bnNwc2M3IzUxLjExLjE4LjExLjAwI1RvcG90ZWNhbiBoeWRyb2NobG9yaWRlIzUxLjExLjE4LjAwLjAwCi11bnNwc2M3IzUxLjExLjE4LjEyLjAwI1ZpbmJsYXN0aW5lIHN1bGZhdGUjNTEuMTEuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTguMTMuMDAjVmluY3Jpc3RpbmUgc3VsZmF0ZSM1MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMS4xOC4xNC4wMCNWaW5vcmVsYmluZSB0YXJ0cmF0ZSM1MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMS4xOS4wMC4wMCNOYXR1cmFsIGFudGluZW9wbGFzdGljIHByb2R1Y3RzIzUxLjExLjAwLjAwLjAwCi11bnNwc2M3IzUxLjExLjE5LjAxLjAwI0FzcGFyYWdpbmFzZSM1MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM1MS4xMS4xOS4wMi4wMCNEb2NldGF4ZWwjNTEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTEuMTkuMDMuMDAjSW50ZXJmZXJvbiM1MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM1MS4xMS4xOS4wNC4wMCNQYWNsaXRheGVsIzUxLjExLjE5LjAwLjAwCi11bnNwc2M3IzUxLjExLjE5LjA1LjAwI1BvcmZpbWVyIHNvZGl1bSM1MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM1MS4xMi4wMC4wMC4wMCNDYXJkaW92YXNjdWxhciBkcnVncyM1MS4wMC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xMi4xNS4wMC4wMCNBbnRpYXJyeXRobWljIGFnZW50cyM1MS4xMi4wMC4wMC4wMAotdW5zcHNjNyM1MS4xMi4xNS4wMS4wMCNBZGVub3NpbmUjNTEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTIuMTUuMDIuMDAjRGlnb3hpbiM1MS4xMi4xNS4wMC4wMAotdW5zcHNjNyM1MS4xMi4xNS4wMy4wMCNRdWluaWRpbmUgZ2x1Y29uYXRlIzUxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUxLjEyLjE2LjAwLjAwI0FudGlhbmdpbmFsIGRydWdzIzUxLjEyLjAwLjAwLjAwCi11bnNwc2M3IzUxLjEyLjE2LjAxLjAwI0FteWwgbml0cmF0ZSM1MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM1MS4xMi4xNi4wMi4wMCNJc29zb3JiaWRlIGRpbml0cmF0ZSM1MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM1MS4xMi4xNi4wMy4wMCNOaXRyb2dseWNlcmluIzUxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzUxLjEyLjE2LjA0LjAwI1BlbnRhZXJ5dGhyaXRvbCB0ZXRyYW5pdHJhdGUjNTEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTIuMTcuMDAuMDAjQW50aWh5cGVydGVuc2l2ZSBkcnVncyM1MS4xMi4wMC4wMC4wMAotdW5zcHNjNyM1MS4xMi4xNy4wMS4wMCNEaWF6b3hpZGUjNTEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTIuMTcuMDIuMDAjVGVyYXpvc2luIzUxLjEyLjE3LjAwLjAwCi11bnNwc2M3IzUxLjEyLjE3LjAzLjAwI0NhcHRvcHJpbCM1MS4xMi4xNy4wMC4wMAotdW5zcHNjNyM1MS4xMi4xNy4wNC4wMCNMaXNpbm9wcmlsIzUxLjEyLjE3LjAwLjAwCi11bnNwc2M3IzUxLjEyLjE3LjA1LjAwI0ZlbG9kaXBpbmUjNTEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTIuMTcuMDYuMDAjSXNyYWRpcGluZSM1MS4xMi4xNy4wMC4wMAotdW5zcHNjNyM1MS4xMi4xNy4wNy4wMCNWZXJhcGFtaWwjNTEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTIuMTcuMDguMDAjTWV0aHlsZG9wYSM1MS4xMi4xNy4wMC4wMAotdW5zcHNjNyM1MS4xMi4xNy4wOS4wMCNDYXJ2ZWRpbG9sIzUxLjEyLjE3LjAwLjAwCi11bnNwc2M3IzUxLjEyLjE3LjEwLjAwI0xvc2FydGFuIHBvdGFzc2l1bSM1MS4xMi4xNy4wMC4wMAotdW5zcHNjNyM1MS4xMi4xNy4xMS4wMCNNaW5veGlkaWwjNTEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTIuMTguMDAuMDAjQW50aWh5cGVybGlwaWRlbWljIGFuZCBoeXBvY2hvbGVzdGVyb2xlbWljIGFnZW50cyM1MS4xMi4wMC4wMC4wMAotdW5zcHNjNyM1MS4xMi4xOC4wMS4wMCNGbHV2YXN0YXRpbiBzb2RpdW0jNTEuMTIuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTIuMTguMDIuMDAjTG92YXN0YXRpbiM1MS4xMi4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMi4xOC4wMy4wMCNTaW12YXN0YXRpbiM1MS4xMi4xOC4wMC4wMAotdW5zcHNjNyM1MS4xMi4xOC4wNC4wMCNDbG9maWJyYXRlIzUxLjEyLjE4LjAwLjAwCi11bnNwc2M3IzUxLjEyLjE4LjA1LjAwI0dlbWZpYnJvemlsIzUxLjEyLjE4LjAwLjAwCi11bnNwc2M3IzUxLjEyLjE5LjAwLjAwI0RydWdzIHVzZWQgZm9yIGNvbmdlc3RpdmUgaGVhcnQgZmFpbHVyZSM1MS4xMi4wMC4wMC4wMAotdW5zcHNjNyM1MS4xMi4xOS4wMS4wMCNBbXJpbm9uZSBsYWN0YXRlIzUxLjEyLjE5LjAwLjAwCi11bnNwc2M3IzUxLjEyLjE5LjAyLjAwI01pbHJpbm9uZSBsYWN0YXRlIzUxLjEyLjE5LjAwLjAwCi11bnNwc2M3IzUxLjEyLjE5LjAzLjAwI0RpZ2l0b3hpbiM1MS4xMi4xOS4wMC4wMAotdW5zcHNjNyM1MS4xMy4wMC4wMC4wMCNIZW1hdG9saWMgZHJ1Z3MjNTEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTMuMTUuMDAuMDAjQW50aWFuZW1pYyBkcnVncyM1MS4xMy4wMC4wMC4wMAotdW5zcHNjNyM1MS4xMy4xNS4wMS4wMCNGZXJyb3VzIGZ1bWFyYXRlIzUxLjEzLjE1LjAwLjAwCi11bnNwc2M3IzUxLjEzLjE1LjAyLjAwI0ZlcnJvdXMgZ2x1Y29uYXRlIzUxLjEzLjE1LjAwLjAwCi11bnNwc2M3IzUxLjEzLjE1LjAzLjAwI0ZlcnJvdXMgc3VsZmF0ZSM1MS4xMy4xNS4wMC4wMAotdW5zcHNjNyM1MS4xMy4xNi4wMC4wMCNBbnRpY29hZ3VsYW50cyM1MS4xMy4wMC4wMC4wMAotdW5zcHNjNyM1MS4xMy4xNi4wMS4wMCNBcHJvdGluaW4jNTEuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTMuMTYuMDIuMDAjSGVwYXJpbiBjYWxjaXVtIzUxLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUxLjEzLjE2LjAzLjAwI0hlcGFyaW4gc29kaXVtIzUxLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUxLjEzLjE2LjA0LjAwI1dhcmZhcmluIHNvZGl1bSM1MS4xMy4xNi4wMC4wMAotdW5zcHNjNyM1MS4xMy4xNy4wMC4wMCNUaHJvbWJvbHl0aWMgZHJ1Z3MgYW5kIHBsYXRlbGV0IGFnZ3JlZ2F0aW9uIGluaGliaXRvcnMjNTEuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTMuMTcuMDEuMDAjQWJjaXhpbWFiIzUxLjEzLjE3LjAwLjAwCi11bnNwc2M3IzUxLjEzLjE3LjAyLjAwI0FsdGVwbGFzZSM1MS4xMy4xNy4wMC4wMAotdW5zcHNjNyM1MS4xMy4xNy4wMy4wMCNTdHJlcHRva2luYXNlIzUxLjEzLjE3LjAwLjAwCi11bnNwc2M3IzUxLjEzLjE3LjA0LjAwI1Vyb2tpbmFzZSM1MS4xMy4xNy4wMC4wMAotdW5zcHNjNyM1MS4xNC4wMC4wMC4wMCNDZW50cmFsIG5lcnZvdXMgc3lzdGVtIGRydWdzIzUxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUxLjE0LjE1LjAwLjAwI0FudGljb252dWxzYW50cyM1MS4xNC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xNC4xNS4wMS4wMCNBY2V0YXpvbGFtaWRlIzUxLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUxLjE0LjE1LjAyLjAwI0Nsb25hemVwYW0jNTEuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMTUuMDMuMDAjRmVsYmFtYXRlIzUxLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUxLjE0LjE1LjA0LjAwI0xhbW90cmlnaW5lIzUxLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUxLjE0LjE1LjA1LjAwI1BoZW5vYmFyYml0YWwjNTEuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMTUuMDYuMDAjUGhlbm9iYXJiaXRhbCBzb2RpdW0jNTEuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMTUuMDcuMDAjUGhlbnl0b2luIzUxLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUxLjE0LjE1LjA4LjAwI0V0aG9zdXhpbWlkZSM1MS4xNC4xNS4wMC4wMAotdW5zcHNjNyM1MS4xNC4xNi4wMC4wMCNBbnRpZGVwcmVzc2FudHMjNTEuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMTYuMDEuMDAjQW1pdHJpcHR5bGluZSBoeWRyb2NobG9yaWRlIzUxLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUxLjE0LjE2LjAyLjAwI0RveGVwaW4gaHlkcm9jaGxvcmlkZSM1MS4xNC4xNi4wMC4wMAotdW5zcHNjNyM1MS4xNC4xNi4wMy4wMCNJbWlwcmFtaW5lIHBhbW9hdGUjNTEuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMTYuMDQuMDAjTWlydGF6YXBpbmUjNTEuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMTYuMDUuMDAjUGFyb3hldGluZSBoeWRyb2NobG9yaWRlIzUxLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUxLjE0LjE2LjA2LjAwI1RyYXpvZG9uZSBoeWRyb2NobG9yaWRlIzUxLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUxLjE0LjE3LjAwLjAwI0FudGlwc3ljaG90aWMgYWdlbnRzIzUxLjE0LjAwLjAwLjAwCi11bnNwc2M3IzUxLjE0LjE3LjAxLjAwI1BoZW5vdGhpYXppbmVzIzUxLjE0LjE3LjAwLjAwCi11bnNwc2M3IzUxLjE0LjE3LjAyLjAwI0hhbG9wZXJpZG9sIzUxLjE0LjE3LjAwLjAwCi11bnNwc2M3IzUxLjE0LjE3LjAzLjAwI09sYW56YXBpbmUjNTEuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMTcuMDQuMDAjUmlzcGVyaWRvbmUjNTEuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMTguMDAuMDAjSHlwbm90aWNzIzUxLjE0LjAwLjAwLjAwCi11bnNwc2M3IzUxLjE0LjE4LjAxLjAwI1BlbnRvYmFyYml0YWwjNTEuMTQuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTQuMTguMDIuMDAjU2Vjb2JhcmJpdGFsIHNvZGl1bSM1MS4xNC4xOC4wMC4wMAotdW5zcHNjNyM1MS4xNC4xOC4wMy4wMCNDaGxvcmFsIGh5ZHJhdGUjNTEuMTQuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTQuMTguMDQuMDAjRXN0YXpvbGFtIzUxLjE0LjE4LjAwLjAwCi11bnNwc2M3IzUxLjE0LjE4LjA1LjAwI1RyaWF6b2xhbSM1MS4xNC4xOC4wMC4wMAotdW5zcHNjNyM1MS4xNC4xOS4wMC4wMCNUcmFucXVpbGl6ZXJzIGFuZCBhbnRpbWFuaWMgZHJ1Z3MjNTEuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMTkuMDEuMDAjQWxwcmF6b2xhbSM1MS4xNC4xOS4wMC4wMAotdW5zcHNjNyM1MS4xNC4xOS4wMi4wMCNEaWF6ZXBhbSM1MS4xNC4xOS4wMC4wMAotdW5zcHNjNyM1MS4xNC4xOS4wMy4wMCNMaXRoaXVtIGNhcmJvbmF0ZSM1MS4xNC4xOS4wMC4wMAotdW5zcHNjNyM1MS4xNC4xOS4wNC4wMCNMaXRoaXVtIGNpdHJhdGUjNTEuMTQuMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMTkuMDUuMDAjTWlkYXpvbGFtIGh5ZHJvY2hsb3JpZGUjNTEuMTQuMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMTkuMDYuMDAjVGVtYXplcGFtIzUxLjE0LjE5LjAwLjAwCi11bnNwc2M3IzUxLjE0LjIwLjAwLjAwI05vbiBuYXJjb3RpYyBhbmFsZ2VzaWNzIGFuZCBhbnRpcHlyZXRpY3MjNTEuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjAuMDEuMDAjQWNldGFtaW5vcGhlbiM1MS4xNC4yMC4wMC4wMAotdW5zcHNjNyM1MS4xNC4yMC4wMi4wMCNBY2V0eWxzYWxpY3lsaWMgYWNpZCM1MS4xNC4yMC4wMC4wMAotdW5zcHNjNyM1MS4xNC4yMC4wMy4wMCNNZXNhbGFtaW5lIzUxLjE0LjIwLjAwLjAwCi11bnNwc2M3IzUxLjE0LjIwLjA0LjAwI01lcHJvYnJvbWF0ZSM1MS4xNC4yMC4wMC4wMAotdW5zcHNjNyM1MS4xNC4yMS4wMC4wMCNOb25zdGVyb2lkYWwgYW50aSBpbmZsYW1tYXRvcnkgZHJ1Z3MgKE5TQUlEcykjNTEuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjEuMDEuMDAjQXVyYW5vZmluIzUxLjE0LjIxLjAwLjAwCi11bnNwc2M3IzUxLjE0LjIxLjAyLjAwI0NhcnBvZmVuIzUxLjE0LjIxLjAwLjAwCi11bnNwc2M3IzUxLjE0LjIxLjAzLjAwI0RpY2xvZmVuYWMgcG90YXNzaXVtIzUxLjE0LjIxLjAwLjAwCi11bnNwc2M3IzUxLjE0LjIxLjA0LjAwI0RpY2xvZmVuYWMgc29kaXVtIzUxLjE0LjIxLjAwLjAwCi11bnNwc2M3IzUxLjE0LjIxLjA1LjAwI0ZsdXJiaXByb2ZlbiM1MS4xNC4yMS4wMC4wMAotdW5zcHNjNyM1MS4xNC4yMS4wNi4wMCNJYnVwcm9mZW4jNTEuMTQuMjEuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjEuMDcuMDAjSW5kb21ldGhhY2luIzUxLjE0LjIxLjAwLjAwCi11bnNwc2M3IzUxLjE0LjIxLjA4LjAwI0tldG9wcm9mZW4jNTEuMTQuMjEuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjEuMDkuMDAjTmFwcm94ZW4jNTEuMTQuMjEuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjEuMTAuMDAjTmFwcm94ZW4gc29kaXVtIzUxLjE0LjIxLjAwLjAwCi11bnNwc2M3IzUxLjE0LjIxLjExLjAwI094YXByb3ppbiM1MS4xNC4yMS4wMC4wMAotdW5zcHNjNyM1MS4xNC4yMS4xMi4wMCNTdWxpbmRhYyM1MS4xNC4yMS4wMC4wMAotdW5zcHNjNyM1MS4xNC4yMS4xMy4wMCNTdXByb2ZlbiM1MS4xNC4yMS4wMC4wMAotdW5zcHNjNyM1MS4xNC4yMi4wMC4wMCNOYXJjb3RpYyBhbmFsZ2VzaWNzIzUxLjE0LjAwLjAwLjAwCi11bnNwc2M3IzUxLjE0LjIyLjAxLjAwI0J1dG9ycGhhbm9sIHRhcnRyYXRlIzUxLjE0LjIyLjAwLjAwCi11bnNwc2M3IzUxLjE0LjIyLjAyLjAwI0NvZGVpbmUgcGhvc3BoYXRlIzUxLjE0LjIyLjAwLjAwCi11bnNwc2M3IzUxLjE0LjIyLjAzLjAwI0NvZGVpbmUgc3VsZmF0ZSM1MS4xNC4yMi4wMC4wMAotdW5zcHNjNyM1MS4xNC4yMi4wNS4wMCNNZXBlcmlkaW5lIGh5ZHJvY2hsb3JpZGUjNTEuMTQuMjIuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjIuMDYuMDAjTW9ycGhpbmUgc3VsZmF0ZSM1MS4xNC4yMi4wMC4wMAotdW5zcHNjNyM1MS4xNC4yMi4wNy4wMCNPeHljb2RvbmUjNTEuMTQuMjIuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjIuMDguMDAjU3VmZW50YW5pbCM1MS4xNC4yMi4wMC4wMAotdW5zcHNjNyM1MS4xNC4yMy4wMC4wMCNOYXJjb3RpYyBhbnRhZ29uaXN0cyM1MS4xNC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xNC4yMy4wMS4wMCNOYWxtZWZlbmUgaHlkcm9jaGxvcmlkZSM1MS4xNC4yMy4wMC4wMAotdW5zcHNjNyM1MS4xNC4yMy4wMi4wMCNOYWxveG9uZSBoeWRyb2NobG9yaWRlIzUxLjE0LjIzLjAwLjAwCi11bnNwc2M3IzUxLjE0LjIzLjAzLjAwI05hbHRyZXhvbmUjNTEuMTQuMjMuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjQuMDAuMDAjRHJ1Z3MgdXNlZCBmb3IgdmFzY3VsYXIgYW5kIG1pZ3JhaW5lIGhlYWRhY2hlcyM1MS4xNC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xNC4yNC4wMS4wMCNNZXRoeXNlcmdpZGUgbWFsZWF0ZSM1MS4xNC4yNC4wMC4wMAotdW5zcHNjNyM1MS4xNC4yNC4wMi4wMCNTdW1hdHJpcHRhbiBzdWNjaW5hdGUjNTEuMTQuMjQuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjUuMDAuMDAjQW50aXBhcmtpbnNvbiBkcnVncyM1MS4xNC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xNC4yNS4wMS4wMCNCcm9tb2NyaXB0aW5lIG1lc3lsYXRlIzUxLjE0LjI1LjAwLjAwCi11bnNwc2M3IzUxLjE0LjI1LjAyLjAwI0NhcmJpZG9wYSM1MS4xNC4yNS4wMC4wMAotdW5zcHNjNyM1MS4xNC4yNS4wMy4wMCNMZXZvZG9wYSM1MS4xNC4yNS4wMC4wMAotdW5zcHNjNyM1MS4xNC4yNS4wNC4wMCNTZWxlZ2lsaW5lIGh5ZHJvY2hsb3JpZGUjNTEuMTQuMjUuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjYuMDAuMDAjU3RpbXVsYW50cyBhbmQgYW5vcmV4aWFudHMjNTEuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjYuMDEuMDAjQW1waGV0YW1pbmUgc3VsZmF0ZSM1MS4xNC4yNi4wMC4wMAotdW5zcHNjNyM1MS4xNC4yNi4wMi4wMCNGZW5mbHVyYW1pbmUjNTEuMTQuMjYuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjYuMDMuMDAjTWF6aW5kb2wjNTEuMTQuMjYuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjYuMDQuMDAjUGVtb2xpbmUjNTEuMTQuMjYuMDAuMDAKLXVuc3BzYzcjNTEuMTQuMjYuMDUuMDAjUGhlbmRpbWV0cmF6aW5lIHRhcnRyYXRlIzUxLjE0LjI2LjAwLjAwCi11bnNwc2M3IzUxLjE1LjAwLjAwLjAwI0F1dG9ub21pYyBuZXJ2b3VzIHN5c3RlbSBkcnVncyM1MS4wMC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xNS4xNS4wMC4wMCNDaG9saW5lcmdpYyBkcnVncyBhbmQgY2hvbGluZXN0ZXJhc2UgaW5oaWJpdG9ycyM1MS4xNS4wMC4wMC4wMAotdW5zcHNjNyM1MS4xNS4xNS4wMS4wMCNCZXRoYW5lY2hvbCBjaGxvcmlkZSM1MS4xNS4xNS4wMC4wMAotdW5zcHNjNyM1MS4xNS4xNS4wMi4wMCNFZHJvcGhvbml1bSBjaGxvcmlkZSM1MS4xNS4xNS4wMC4wMAotdW5zcHNjNyM1MS4xNS4xNS4wMy4wMCNQaHlzb3N0aWdtaW5lIHNhbGljeWxhdGUjNTEuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTUuMTUuMDQuMDAjUGlsb2NhcnBpbmUgbml0cmF0ZSM1MS4xNS4xNS4wMC4wMAotdW5zcHNjNyM1MS4xNS4xNi4wMC4wMCNDaG9saW5lcmdpYyBibG9ja2luZyBhZ2VudHMjNTEuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTUuMTYuMDEuMDAjQXRyb3BpbmUgc3VsZmF0ZSM1MS4xNS4xNi4wMC4wMAotdW5zcHNjNyM1MS4xNS4xNi4wMi4wMCNCZW56dHJvcGluZSBtZXN5bGF0ZSM1MS4xNS4xNi4wMC4wMAotdW5zcHNjNyM1MS4xNS4xNi4wMy4wMCNQcm9jeWNsaWRpbmUgaHlkcm9jaGxvcmlkZSM1MS4xNS4xNi4wMC4wMAotdW5zcHNjNyM1MS4xNS4xNi4wNC4wMCNUcmloZXh5cGhlbmlkeWwgaHlkcm9jaGxvcmlkZSM1MS4xNS4xNi4wMC4wMAotdW5zcHNjNyM1MS4xNS4xNy4wMC4wMCNTeW1wYXRob21pbWV0aWMgb3IgYWRyZW5lcmdpYyBkcnVncyM1MS4xNS4wMC4wMC4wMAotdW5zcHNjNyM1MS4xNS4xNy4wMS4wMCNBbGJ1dGVyb2wjNTEuMTUuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTUuMTcuMDIuMDAjQnJpbW9uaWRpbmUgdGFydHJhdGUjNTEuMTUuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTUuMTcuMDMuMDAjRXBpbmVwaHJpbmUjNTEuMTUuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTUuMTcuMDQuMDAjRXBpbmVwaHJpbmUgYm9yYXRlIzUxLjE1LjE3LjAwLjAwCi11bnNwc2M3IzUxLjE1LjE3LjA1LjAwI0VwaW5lcGhyaW5lIGh5ZHJvY2hsb3JpZGUjNTEuMTUuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTUuMTcuMDYuMDAjSXNvcHJvdGVyZW5vbCM1MS4xNS4xNy4wMC4wMAotdW5zcHNjNyM1MS4xNS4xNy4wNy4wMCNJc29wcm90ZXJlbm9sIHN1bGZhdGUjNTEuMTUuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTUuMTcuMDguMDAjTGV2YXJ0ZXJlbm9sIGJpdGFydHJhdGUjNTEuMTUuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTUuMTcuMDkuMDAjUGhlbnlscHJvcGFub2xhbWluZSBoeWRyb2NobG9yaWRlIzUxLjE1LjE3LjAwLjAwCi11bnNwc2M3IzUxLjE1LjE4LjAwLjAwI0FkcmVuZXJnaWMgYmxvY2tpbmcgYWdlbnRzIzUxLjE1LjAwLjAwLjAwCi11bnNwc2M3IzUxLjE1LjE4LjAxLjAwI0F0ZW5vbG9sIzUxLjE1LjE4LjAwLjAwCi11bnNwc2M3IzUxLjE1LjE4LjAyLjAwI0VzbW9sb2wgaHlkcm9jaGxvcmlkZSM1MS4xNS4xOC4wMC4wMAotdW5zcHNjNyM1MS4xNS4xOC4wMy4wMCNOYWRvbG9sIzUxLjE1LjE4LjAwLjAwCi11bnNwc2M3IzUxLjE1LjE4LjA0LjAwI1BpbmRvbG9sIzUxLjE1LjE4LjAwLjAwCi11bnNwc2M3IzUxLjE1LjE4LjA1LjAwI1RpbW9sb2wgbWFsZWF0ZSM1MS4xNS4xOC4wMC4wMAotdW5zcHNjNyM1MS4xNS4xOC4xMC4wMCNQaGVudG9sYW1pbmUgbWVzeWxhdGUjNTEuMTUuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTUuMTkuMDAuMDAjU2tlbGV0YWwgbXVzY2xlIHJlbGF4YW50cyBhbmQgY2VudHJhbGx5IGFjdGluZyM1MS4xNS4wMC4wMC4wMAotdW5zcHNjNyM1MS4xNS4xOS4wMS4wMCNCYWNsb2ZlbiM1MS4xNS4xOS4wMC4wMAotdW5zcHNjNyM1MS4xNS4xOS4wMi4wMCNDaGxvcnpveGF6b25lIzUxLjE1LjE5LjAwLjAwCi11bnNwc2M3IzUxLjE1LjE5LjAzLjAwI0RhbnRyb2xlbmUgc29kaXVtIzUxLjE1LjE5LjAwLjAwCi11bnNwc2M3IzUxLjE1LjE5LjA0LjAwI01ldGhvY2FyYmFtb2wjNTEuMTUuMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTUuMTkuMDUuMDAjQ2FyaXNvcHJvZG9sIzUxLjE1LjE5LjAwLjAwCi11bnNwc2M3IzUxLjE1LjIwLjAwLjAwI05ldXJvbXVzY3VsYXIgYmxvY2tpbmcgYWdlbnRzIzUxLjE1LjAwLjAwLjAwCi11bnNwc2M3IzUxLjE1LjIwLjAxLjAwI0F0cmFjdXJpdW0gYmVzeWxhdGUjNTEuMTUuMjAuMDAuMDAKLXVuc3BzYzcjNTEuMTUuMjAuMDIuMDAjTWl2YWN1cml1bSBjaHlsb3JpZGUjNTEuMTUuMjAuMDAuMDAKLXVuc3BzYzcjNTEuMTUuMjAuMDMuMDAjUm9jdXJvbml1bSBicm9taWRlIzUxLjE1LjIwLjAwLjAwCi11bnNwc2M3IzUxLjE1LjIwLjA0LjAwI1ZlY3Vyb25pdW0gYnJvbWlkZSM1MS4xNS4yMC4wMC4wMAotdW5zcHNjNyM1MS4xNi4wMC4wMC4wMCNEcnVncyBhZmZlY3RpbmcgdGhlIHJlc3BpcmF0b3J5IHRyYWN0IzUxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUxLjE2LjE1LjAwLjAwI0FudGlhc3RobWF0aWMgZHJ1Z3MjNTEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTYuMTUuMDEuMDAjQml0b2x0ZXJvbCBtZXN5bGF0ZSM1MS4xNi4xNS4wMC4wMAotdW5zcHNjNyM1MS4xNi4xNS4wMi4wMCNOZWRvY3JvbWlsIHNvZGl1bSM1MS4xNi4xNS4wMC4wMAotdW5zcHNjNyM1MS4xNi4xNS4wMy4wMCNQaXJidXRlcm9sIGFjZXRhdGUjNTEuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTYuMTUuMDQuMDAjQW1pbm9waHlsbGluZSM1MS4xNi4xNS4wMC4wMAotdW5zcHNjNyM1MS4xNi4xNS4wNS4wMCNUaGVvcGh5bGxpbmUjNTEuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTYuMTYuMDAuMDAjQW50aWhpc3RhbWluZXMgb3IgSDEgYmxvY2tlcnMjNTEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTYuMTYuMDEuMDAjQXN0ZW1pem9sZSM1MS4xNi4xNi4wMC4wMAotdW5zcHNjNyM1MS4xNi4xNi4wMi4wMCNDbGVtYXN0aW5lIGZ1bWFyYXRlIzUxLjE2LjE2LjAwLjAwCi11bnNwc2M3IzUxLjE2LjE2LjAzLjAwI0RleGNobG9ycGhlbmlyYW1pbmUgbWFsZWF0ZSM1MS4xNi4xNi4wMC4wMAotdW5zcHNjNyM1MS4xNi4xNi4wNC4wMCNEaW1lbmh5ZHJpbmF0ZSM1MS4xNi4xNi4wMC4wMAotdW5zcHNjNyM1MS4xNi4xNi4wNS4wMCNMZXZvY2FiYXN0aW5lIGh5ZHJvY2hsb3JpZGUjNTEuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTYuMTYuMDYuMDAjTG9yYXRpZGluZSM1MS4xNi4xNi4wMC4wMAotdW5zcHNjNyM1MS4xNi4xNi4wNy4wMCNUZXJmZW5hZGluZSM1MS4xNi4xNi4wMC4wMAotdW5zcHNjNyM1MS4xNi4xNy4wMC4wMCNEcnVncyB1c2VkIGZvciByZXNwaXJhdG9yeSB0cmFjdCBkaXNvcmRlcnMjNTEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTYuMTcuMDEuMDAjQWNldHlsY3lzdGVpbmUjNTEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTYuMTcuMDIuMDAjQmVyYWN0YW50IzUxLjE2LjE3LjAwLjAwCi11bnNwc2M3IzUxLjE2LjE3LjAzLjAwI0J1ZGVzb25pZGUjNTEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTYuMTcuMDQuMDAjQ29sZm9zY2VyaWwgcGFsbWl0YXRlIzUxLjE2LjE3LjAwLjAwCi11bnNwc2M3IzUxLjE2LjE3LjA1LjAwI0lwcmF0cm9waXVtIGJyb21pZGUjNTEuMTYuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTYuMTguMDAuMDAjQ291Z2ggYW5kIGNvbGQgYW5kIGFudGlhbGxlcmd5IHByb2R1Y3RzIzUxLjE2LjAwLjAwLjAwCi11bnNwc2M3IzUxLjE2LjE4LjAxLjAwI0JlbnpvbmF0YXRlIzUxLjE2LjE4LjAwLjAwCi11bnNwc2M3IzUxLjE2LjE4LjAyLjAwI0d1YWlmZW5lc2luIzUxLjE2LjE4LjAwLjAwCi11bnNwc2M3IzUxLjE2LjE5LjAwLjAwI05hc2FsIGRlY29uZ2VzdGFudHMjNTEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTYuMTkuMDEuMDAjT3h5bWV0YXpvbGluZSBoeWRyb2NobG9yaWRlIzUxLjE2LjE5LjAwLjAwCi11bnNwc2M3IzUxLjE2LjE5LjAyLjAwI1BzZXVkb2VwaGVkcmluZSBoeWRyb2NobG9yaWRlIzUxLjE2LjE5LjAwLjAwCi11bnNwc2M3IzUxLjE2LjE5LjAzLjAwI1h5bG9tZXRhem9saW5lIGh5ZHJvY2hsb3JpZGUjNTEuMTYuMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTcuMDAuMDAuMDAjRHJ1Z3MgYWZmZWN0aW5nIHRoZSBnYXN0cm9pbnRlc3RpbmFsIHN5c3RlbSM1MS4wMC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xNy4xNS4wMC4wMCNBbnRhY2lkcyM1MS4xNy4wMC4wMC4wMAotdW5zcHNjNyM1MS4xNy4xNS4wMS4wMCNDYWxjaXVtIGNhcmJvbmF0ZSM1MS4xNy4xNS4wMC4wMAotdW5zcHNjNyM1MS4xNy4xNS4wMi4wMCNNYWdhbGRyYXRlIzUxLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUxLjE3LjE1LjAzLjAwI01hZ25lc2l1bSBoeWRyb3hpZGUjNTEuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTcuMTUuMDQuMDAjU29kaXVtIGJpY2FyYm9uYXRlIGFudGFjaWRzIzUxLjE3LjE1LjAwLjAwCi11bnNwc2M3IzUxLjE3LjE2LjAwLjAwI0xheGF0aXZlcyM1MS4xNy4wMC4wMC4wMAotdW5zcHNjNyM1MS4xNy4xNi4wMS4wMCNDYXNjYXJhIHNhZ3JhZGEjNTEuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTcuMTYuMDIuMDAjRG9jdXNhdGUgY2FsY2l1bSM1MS4xNy4xNi4wMC4wMAotdW5zcHNjNyM1MS4xNy4xNi4wMy4wMCNEb2N1c2F0ZSBwb3Rhc3NpdW0jNTEuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTcuMTYuMDQuMDAjRG9jdXNhdGUgc29kaXVtIzUxLjE3LjE2LjAwLjAwCi11bnNwc2M3IzUxLjE3LjE2LjA1LjAwI0xhY3R1bG9zZSM1MS4xNy4xNi4wMC4wMAotdW5zcHNjNyM1MS4xNy4xNi4wNi4wMCNNYWduZXNpdW0gc3VsZmF0ZSM1MS4xNy4xNi4wMC4wMAotdW5zcHNjNyM1MS4xNy4xNi4wNy4wMCNQc3lsbGl1bSBoeWRyb3BoaWxpYyBtdWNpbG9pZCM1MS4xNy4xNi4wMC4wMAotdW5zcHNjNyM1MS4xNy4xNy4wMC4wMCNBbnRpZGlhcnJoZWFscyM1MS4xNy4wMC4wMC4wMAotdW5zcHNjNyM1MS4xNy4xNy4wMS4wMCNEaWZlbm94aW4gaHlkcm9jaGxvcmlkZSM1MS4xNy4xNy4wMC4wMAotdW5zcHNjNyM1MS4xNy4xNy4wMi4wMCNMb3BlcmFtaWRlIGh5ZHJvY2hsb3JpZGUjNTEuMTcuMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTcuMTcuMDMuMDAjUGFyZWdvcmljIzUxLjE3LjE3LjAwLjAwCi11bnNwc2M3IzUxLjE3LjE4LjAwLjAwI0FudGllbWV0aWNzIGFuZCBhbnRpbmF1c2VhbnRzIzUxLjE3LjAwLjAwLjAwCi11bnNwc2M3IzUxLjE3LjE4LjAxLjAwI0Ryb25hYmlub2wjNTEuMTcuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTcuMTguMDIuMDAjR3JhbmlzZXRyb24gaHlkcm9jaGxvcmlkZSM1MS4xNy4xOC4wMC4wMAotdW5zcHNjNyM1MS4xNy4xOC4wMy4wMCNNZWNsaXppbmUgaHlkcm9jaGxvcmlkZSM1MS4xNy4xOC4wMC4wMAotdW5zcHNjNyM1MS4xNy4xOC4wNC4wMCNPbmRhbnNldHJvbiBoeWRyb2NobG9yaWRlIzUxLjE3LjE4LjAwLjAwCi11bnNwc2M3IzUxLjE3LjE4LjA1LjAwI1RyaW1ldGhvYmVuemFtaWRlIGh5ZHJvY2hsb3JpZGUjNTEuMTcuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTcuMTkuMDAuMDAjQW50aXVsY2VyIGFuZCByZWxhdGVkIGdhc3Ryb2ludGVzdGluYWwgKEdJKSBkcnVncyM1MS4xNy4wMC4wMC4wMAotdW5zcHNjNyM1MS4xNy4xOS4wMS4wMCNDaW1ldGlkaW5lIzUxLjE3LjE5LjAwLjAwCi11bnNwc2M3IzUxLjE3LjE5LjAyLjAwI0ZhbW90aWRpbmUjNTEuMTcuMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTcuMTkuMDMuMDAjTml6YXRpZGluZSM1MS4xNy4xOS4wMC4wMAotdW5zcHNjNyM1MS4xNy4xOS4wNC4wMCNSYW5pdGlkaW5lIGh5ZHJvY2hsb3JpZGUjNTEuMTcuMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTcuMTkuMDUuMDAjQ2lzYXByaWRlIzUxLjE3LjE5LjAwLjAwCi11bnNwc2M3IzUxLjE3LjE5LjA2LjAwI0xhbnNvcHJhem9sZSM1MS4xNy4xOS4wMC4wMAotdW5zcHNjNyM1MS4xNy4xOS4wNy4wMCNMaWJyYXgjNTEuMTcuMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTcuMTkuMDguMDAjTWlzb3Byb3N0b2wjNTEuMTcuMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTcuMjAuMDAuMDAjRHJ1Z3MgdXNlZCBmb3IgZ2FsbGJsYWRkZXIgZGlzZWFzZSM1MS4xNy4wMC4wMC4wMAotdW5zcHNjNyM1MS4xNy4yMC4wMS4wMCNDaGVub2Rpb2wjNTEuMTcuMjAuMDAuMDAKLXVuc3BzYzcjNTEuMTcuMjAuMDIuMDAjTW9ub2N0YW5vaW4jNTEuMTcuMjAuMDAuMDAKLXVuc3BzYzcjNTEuMTcuMjAuMDMuMDAjVXJzb2Rpb2wjNTEuMTcuMjAuMDAuMDAKLXVuc3BzYzcjNTEuMTguMDAuMDAuMDAjSG9ybW9uZXMgYW5kIGhvcm1vbmUgYW50YWdvbmlzdHMjNTEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTguMTUuMDAuMDAjQW50aWRpYWJldGljIGFnZW50cyBhbmQgaHlwZXJnbHljZW1pYyBhZ2VudHMjNTEuMTguMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTguMTUuMDEuMDAjQWNhcmJvc2UjNTEuMTguMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTguMTUuMDIuMDAjQWNldG9oZXhhbWlkZSM1MS4xOC4xNS4wMC4wMAotdW5zcHNjNyM1MS4xOC4xNS4wMy4wMCNDaGxvcnByb3BhbWlkZSM1MS4xOC4xNS4wMC4wMAotdW5zcHNjNyM1MS4xOC4xNS4wNC4wMCNHbGltZXBpcmlkZSM1MS4xOC4xNS4wMC4wMAotdW5zcHNjNyM1MS4xOC4xNS4wNS4wMCNHbGlwaXppZGUjNTEuMTguMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTguMTUuMDYuMDAjSW5zdWxpbiM1MS4xOC4xNS4wMC4wMAotdW5zcHNjNyM1MS4xOC4xNS4wOC4wMCNHbHVjYWdvbiM1MS4xOC4xNS4wMC4wMAotdW5zcHNjNyM1MS4xOC4xNi4wMC4wMCNUaHlyb2lkIGFuZCBhbnRpdGh5cm9pZCBkcnVncyM1MS4xOC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xOC4xNi4wMS4wMCNMZXZvdGh5cm94aW5lIHNvZGl1bSM1MS4xOC4xNi4wMC4wMAotdW5zcHNjNyM1MS4xOC4xNi4wMi4wMCNMaW90aHlyb25pbmUgc29kaXVtIzUxLjE4LjE2LjAwLjAwCi11bnNwc2M3IzUxLjE4LjE2LjAzLjAwI0xpb3RyaXgjNTEuMTguMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTguMTYuMDQuMDAjVGh5cm90cm9waW4jNTEuMTguMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTguMTYuMDUuMDAjTWV0aGltYXpvbGUjNTEuMTguMTYuMDAuMDAKLXVuc3BzYzcjNTEuMTguMTYuMDYuMDAjUHJvcHlsdGhpb3VyYWNpbCM1MS4xOC4xNi4wMC4wMAotdW5zcHNjNyM1MS4xOC4xNy4wMC4wMCNDb3J0aWNvc3Rlcm9pZHMjNTEuMTguMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTguMTcuMDEuMDAjQmV0YW1ldGhhc29uZSM1MS4xOC4xNy4wMC4wMAotdW5zcHNjNyM1MS4xOC4xNy4wMi4wMCNDb3J0aWNvdHJvcGluIzUxLjE4LjE3LjAwLjAwCi11bnNwc2M3IzUxLjE4LjE3LjAzLjAwI0Nvc3ludHJvcGluIzUxLjE4LjE3LjAwLjAwCi11bnNwc2M3IzUxLjE4LjE3LjA0LjAwI0RleGFtZXRoYXNvbmUjNTEuMTguMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTguMTcuMDUuMDAjRmx1bmlzb2xpZGUjNTEuMTguMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTguMTcuMDYuMDAjSHlkcm9jb3J0aXNvbmUjNTEuMTguMTcuMDAuMDAKLXVuc3BzYzcjNTEuMTguMTcuMDcuMDAjTWV0aHlscHJlZG5pc29sb25lIzUxLjE4LjE3LjAwLjAwCi11bnNwc2M3IzUxLjE4LjE3LjA4LjAwI1ByZWRuaXNvbG9uZSM1MS4xOC4xNy4wMC4wMAotdW5zcHNjNyM1MS4xOC4xNy4wOS4wMCNUcmlhbWNpbm9sb25lIzUxLjE4LjE3LjAwLjAwCi11bnNwc2M3IzUxLjE4LjE4LjAwLjAwI0VzdHJvZ2VucyBhbmQgcHJvZ2VzdGlucyBhbmQgaW50ZXJuYWwgY29udHJhY2VwdGl2ZXMjNTEuMTguMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTguMTguMDEuMDAjQ2hsb3JvdHJpYW5pc2VuZSM1MS4xOC4xOC4wMC4wMAotdW5zcHNjNyM1MS4xOC4xOC4wMi4wMCNFc3Ryb25lIzUxLjE4LjE4LjAwLjAwCi11bnNwc2M3IzUxLjE4LjE4LjAzLjAwI0VzdHJvZ2VucyBjb25qdWdhdGVkIzUxLjE4LjE4LjAwLjAwCi11bnNwc2M3IzUxLjE4LjE4LjA0LjAwI0VzdHJvcGlwYXRlIzUxLjE4LjE4LjAwLjAwCi11bnNwc2M3IzUxLjE4LjE4LjA1LjAwI0xldm9ub3JnZXN0cmVsIzUxLjE4LjE4LjAwLjAwCi11bnNwc2M3IzUxLjE4LjE4LjA2LjAwI01lZ2VzdHJvbCBhY2V0YXRlIzUxLjE4LjE4LjAwLjAwCi11bnNwc2M3IzUxLjE4LjE4LjA3LjAwI0V0aGlueWwgZXN0cmFkaW9sIzUxLjE4LjE4LjAwLjAwCi11bnNwc2M3IzUxLjE4LjE4LjA4LjAwI01lc3RyYW5vbCM1MS4xOC4xOC4wMC4wMAotdW5zcHNjNyM1MS4xOC4xOS4wMC4wMCNHb25hZG90cm9waWMgaG9ybW9uZXMgYW5kIG92YXJpYW4gc3RpbXVsYW50cyBhbmQgaW5oaWJpdG9ycyM1MS4xOC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xOC4xOS4wMS4wMCNDaG9yaW9uaWMgZ29uYWRvdHJvcGluIzUxLjE4LjE5LjAwLjAwCi11bnNwc2M3IzUxLjE4LjE5LjAyLjAwI0RhbmF6b2wjNTEuMTguMTkuMDAuMDAKLXVuc3BzYzcjNTEuMTguMTkuMDMuMDAjR29uYWRvcmVsaW4gYWNldGF0ZSM1MS4xOC4xOS4wMC4wMAotdW5zcHNjNyM1MS4xOC4xOS4wNC4wMCNIaXN0cmVsaW4gYWNldGF0ZSM1MS4xOC4xOS4wMC4wMAotdW5zcHNjNyM1MS4xOC4xOS4wNS4wMCNNZW5vdHJvcGlucyM1MS4xOC4xOS4wMC4wMAotdW5zcHNjNyM1MS4xOC4xOS4wNi4wMCNVcm9mb2xsaXRyb3BpbiM1MS4xOC4xOS4wMC4wMAotdW5zcHNjNyM1MS4xOC4yMC4wMC4wMCNBbmRyb2dlbnMgYW5kIGFuZHJvZ2VuIGluaGliaXRvcnMjNTEuMTguMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTguMjAuMDEuMDAjRmluYXN0ZXJpZGUjNTEuMTguMjAuMDAuMDAKLXVuc3BzYzcjNTEuMTguMjAuMDIuMDAjVGVzdG9zdGVyb25lIzUxLjE4LjIwLjAwLjAwCi11bnNwc2M3IzUxLjE4LjIwLjAzLjAwI1Rlc3Rvc3Rlcm9uZSBjeXBpb25hdGUjNTEuMTguMjAuMDAuMDAKLXVuc3BzYzcjNTEuMTguMjAuMDQuMDAjVGVzdG9zdGVyb25lIGVuYW50aGF0ZSM1MS4xOC4yMC4wMC4wMAotdW5zcHNjNyM1MS4xOC4yMC4wNS4wMCNUZXN0b3N0ZXJvbmUgcHJvcGlvbmF0ZSM1MS4xOC4yMC4wMC4wMAotdW5zcHNjNyM1MS4xOC4yMS4wMC4wMCNQb3N0ZXJpb3IgcGl0dWl0YXJ5IGhvcm1vbmVzIzUxLjE4LjAwLjAwLjAwCi11bnNwc2M3IzUxLjE4LjIxLjAxLjAwI0Rlc21vcHJlc3NpbiBhY2V0YXRlIzUxLjE4LjIxLjAwLjAwCi11bnNwc2M3IzUxLjE4LjIxLjAyLjAwI1Zhc29wcmVzc2luIzUxLjE4LjIxLjAwLjAwCi11bnNwc2M3IzUxLjE4LjIyLjAwLjAwI0RydWdzIGZvciBpbmR1Y2luZyBsYWJvciM1MS4xOC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xOC4yMi4wMS4wMCNEaW5vcHJvc3RvbmUjNTEuMTguMjIuMDAuMDAKLXVuc3BzYzcjNTEuMTguMjIuMDIuMDAjTWV0aHlsZXJnb25vdmluZSBtYWxlYXRlIzUxLjE4LjIyLjAwLjAwCi11bnNwc2M3IzUxLjE4LjIyLjAzLjAwI094eXRvY2luIzUxLjE4LjIyLjAwLjAwCi11bnNwc2M3IzUxLjE4LjIzLjAwLjAwI0dyb3d0aCBob3Jtb25lcyM1MS4xOC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xOC4yMy4wMS4wMCNTb21hdHJlbSM1MS4xOC4yMy4wMC4wMAotdW5zcHNjNyM1MS4xOC4yMy4wMi4wMCNTb21hdHJvcGluIzUxLjE4LjIzLjAwLjAwCi11bnNwc2M3IzUxLjE4LjI0LjAwLjAwI0NhbGNpdW0gc2FsdHMgYW5kIGNhbGNpdW0gcmVndWxhdG9ycyM1MS4xOC4wMC4wMC4wMAotdW5zcHNjNyM1MS4xOC4yNC4wMS4wMCNDYWxjaXVtIGNobG9yaWRlIzUxLjE4LjI0LjAwLjAwCi11bnNwc2M3IzUxLjE4LjI0LjAyLjAwI0NhbGNpdW0gY2l0cmF0ZSM1MS4xOC4yNC4wMC4wMAotdW5zcHNjNyM1MS4xOC4yNC4wMy4wMCNDYWxjaXVtIGdsdWNvbmF0ZSM1MS4xOC4yNC4wMC4wMAotdW5zcHNjNyM1MS4xOC4yNC4wNC4wMCNDYWxjaXVtIGxhY3RhdGUjNTEuMTguMjQuMDAuMDAKLXVuc3BzYzcjNTEuMTguMjQuMDUuMDAjRGliYXNlIGNhbGNpdW0gcGhvc3BoYXRlIzUxLjE4LjI0LjAwLjAwCi11bnNwc2M3IzUxLjE4LjI0LjA2LjAwI0FsZW5kcm9uYXRlIHNvZGl1bSM1MS4xOC4yNC4wMC4wMAotdW5zcHNjNyM1MS4xOC4yNC4wNy4wMCNDYWxjaXRvbmluIzUxLjE4LjI0LjAwLjAwCi11bnNwc2M3IzUxLjE4LjI0LjA4LjAwI0NlbGx1bG9zZSBzb2RpdW0gcGhvc3BoYXRlIzUxLjE4LjI0LjAwLjAwCi11bnNwc2M3IzUxLjE4LjI0LjA5LjAwI0dhbGxpdW0gbml0cmF0ZSM1MS4xOC4yNC4wMC4wMAotdW5zcHNjNyM1MS4xOS4wMC4wMC4wMCNBZ2VudHMgYWZmZWN0aW5nIHdhdGVyIGFuZCBlbGVjdHJvbHl0ZXMjNTEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTkuMTUuMDAuMDAjRGl1cmV0aWNzIzUxLjE5LjAwLjAwLjAwCi11bnNwc2M3IzUxLjE5LjE1LjAxLjAwI0NobG9yb3RoaWF6aWRlIzUxLjE5LjE1LjAwLjAwCi11bnNwc2M3IzUxLjE5LjE1LjAyLjAwI0NobG9ydGhhbGlkb25lIzUxLjE5LjE1LjAwLjAwCi11bnNwc2M3IzUxLjE5LjE1LjAzLjAwI01lbnRvbGF6b25lIzUxLjE5LjE1LjAwLjAwCi11bnNwc2M3IzUxLjE5LjE1LjA0LjAwI0J1bWV0YW5pZGUjNTEuMTkuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMTkuMTUuMDUuMDAjRXRoYWNyeW5hdGUgc29kaXVtIzUxLjE5LjE1LjAwLjAwCi11bnNwc2M3IzUxLjE5LjE1LjA2LjAwI0FtaWxvcmlkZSBoeWRyb2NobG9yaWRlIzUxLjE5LjE1LjAwLjAwCi11bnNwc2M3IzUxLjE5LjE1LjA3LjAwI1NwaXJvbm9sYWN0b25lIzUxLjE5LjE1LjAwLjAwCi11bnNwc2M3IzUxLjE5LjE1LjA4LjAwI1RyaWFtdGVyZW5lIzUxLjE5LjE1LjAwLjAwCi11bnNwc2M3IzUxLjE5LjE1LjA5LjAwI01hbm5pdG9sIzUxLjE5LjE1LjAwLjAwCi11bnNwc2M3IzUxLjE5LjE2LjAwLjAwI0VsZWN0cm9seXRlcyM1MS4xOS4wMC4wMC4wMAotdW5zcHNjNyM1MS4xOS4xNi4wMS4wMCNEZXh0cm9zZSM1MS4xOS4xNi4wMC4wMAotdW5zcHNjNyM1MS4xOS4xNi4wMi4wMCNTb2RpdW0gY2hsb3JpZGUgZWxlY3Ryb2x5dGVzIzUxLjE5LjE2LjAwLjAwCi11bnNwc2M3IzUxLjE5LjE3LjAwLjAwI0Fsa2FsaW5pemluZyBhZ2VudHMjNTEuMTkuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMTkuMTcuMDEuMDAjVHJvbWV0aGFtaW5lIzUxLjE5LjE3LjAwLjAwCi11bnNwc2M3IzUxLjE5LjE4LjAwLjAwI1BvdGFzc2l1bSBzYWx0cyM1MS4xOS4wMC4wMC4wMAotdW5zcHNjNyM1MS4xOS4xOC4wMS4wMCNQb3Rhc3NpdW0gYmljYXJib25hdGUjNTEuMTkuMTguMDAuMDAKLXVuc3BzYzcjNTEuMTkuMTguMDIuMDAjUG90YXNzaXVtIGNobG9yaWRlIzUxLjE5LjE4LjAwLjAwCi11bnNwc2M3IzUxLjE5LjE4LjAzLjAwI1BvdGFzc2l1bSBnbHVjb25hdGUjNTEuMTkuMTguMDAuMDAKLXVuc3BzYzcjNTEuMjAuMDAuMDAuMDAjSW1tdW5vbW9kdWxhdGluZyBkcnVncyM1MS4wMC4wMC4wMC4wMAotdW5zcHNjNyM1MS4yMC4xNS4wMC4wMCNJbW11bm9zdXBwcmVzc2FudHMjNTEuMjAuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMjAuMTUuMDEuMDAjQXphdGhpb3ByaW5lIzUxLjIwLjE1LjAwLjAwCi11bnNwc2M3IzUxLjIwLjE1LjAyLjAwI0N5Y2xvc3BvcmluZSM1MS4yMC4xNS4wMC4wMAotdW5zcHNjNyM1MS4yMC4xNS4wMy4wMCNNeWNvcGhlbm9sYXRlIG1vZmV0aWwjNTEuMjAuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMjAuMTUuMDQuMDAjVGFjcm9saW11cyM1MS4yMC4xNS4wMC4wMAotdW5zcHNjNyM1MS4yMC4xNi4wMC4wMCNWYWNjaW5lcyM1MS4yMC4wMC4wMC4wMAotdW5zcHNjNyM1MS4yMC4xNi4wMS4wMCNBbnRocmF4IGFudGlnZW4jNTEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMjAuMTYuMDIuMDAjQnJ1Y2VsbGEgYW50aWdlbiM1MS4yMC4xNi4wMC4wMAotdW5zcHNjNyM1MS4yMC4xNi4wMy4wMCNDaG9sZXJhIzUxLjIwLjE2LjAwLjAwCi11bnNwc2M3IzUxLjIwLjE2LjA0LjAwI0RpcGh0ZXJpYSM1MS4yMC4xNi4wMC4wMAotdW5zcHNjNyM1MS4yMC4xNi4wNS4wMCNFbmNlcGhhbGl0aXMjNTEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMjAuMTYuMDYuMDAjSGVtb3BoaWx1cyBpbmZsdWVuemFlIzUxLjIwLjE2LjAwLjAwCi11bnNwc2M3IzUxLjIwLjE2LjA3LjAwI0hlcGF0aXRpcyBiIzUxLjIwLjE2LjAwLjAwCi11bnNwc2M3IzUxLjIwLjE2LjA4LjAwI0luZmx1ZW56YSM1MS4yMC4xNi4wMC4wMAotdW5zcHNjNyM1MS4yMC4xNi4wOS4wMCNNZWFzbGVzIzUxLjIwLjE2LjAwLjAwCi11bnNwc2M3IzUxLjIwLjE2LjEwLjAwI01lbmluZ29jb2NjdXMjNTEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMjAuMTYuMTEuMDAjTW9yYmlsbGkjNTEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMjAuMTYuMTIuMDAjTXVtcHMjNTEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMjAuMTYuMTMuMDAjUGFyb3RpdGlzIzUxLjIwLjE2LjAwLjAwCi11bnNwc2M3IzUxLjIwLjE2LjE0LjAwI1BlcnR1c3NpcyM1MS4yMC4xNi4wMC4wMAotdW5zcHNjNyM1MS4yMC4xNi4xNS4wMCNQbmV1bW9jb2NjdXMjNTEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMjAuMTYuMTYuMDAjUG9saW9teWVsaXRpcyM1MS4yMC4xNi4wMC4wMAotdW5zcHNjNyM1MS4yMC4xNi4xNy4wMCNSYWJpZXMjNTEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMjAuMTYuMTguMDAjUm90YSB2aXJ1cyM1MS4yMC4xNi4wMC4wMAotdW5zcHNjNyM1MS4yMC4xNi4xOS4wMCNSdWJlbGxhIzUxLjIwLjE2LjAwLjAwCi11bnNwc2M3IzUxLjIwLjE2LjIwLjAwI1NtYWxscG94IzUxLjIwLjE2LjAwLjAwCi11bnNwc2M3IzUxLjIwLjE2LjIxLjAwI1RldGFudXMgdG94b2lkIzUxLjIwLjE2LjAwLjAwCi11bnNwc2M3IzUxLjIwLjE2LjIyLjAwI1R1YmVyY3Vsb3NpcyM1MS4yMC4xNi4wMC4wMAotdW5zcHNjNyM1MS4yMC4xNi4yMy4wMCNUeXBob2lkIzUxLjIwLjE2LjAwLjAwCi11bnNwc2M3IzUxLjIwLjE2LjI0LjAwI1ZhcmljZWxsYSM1MS4yMC4xNi4wMC4wMAotdW5zcHNjNyM1MS4yMC4xNi4yNS4wMCNZZWxsb3cgZmV2ZXIjNTEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMjAuMTYuMjYuMDAjSGVwYXRpdGlzIGEjNTEuMjAuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMjEuMDAuMDAuMDAjTWlzY2VsbGFuZW91cyBkcnVnIGNhdGVnb3JpZXMjNTEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMjEuMTUuMDAuMDAjQW50aWdvdXQgZHJ1Z3MjNTEuMjEuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMjEuMTUuMDEuMDAjQWxsb3B1cmlub2wjNTEuMjEuMTUuMDAuMDAKLXVuc3BzYzcjNTEuMjEuMTUuMDIuMDAjQ29sY2hpY2luZSM1MS4yMS4xNS4wMC4wMAotdW5zcHNjNyM1MS4yMS4xNS4wMy4wMCNQcm9iZW5lY2lkIzUxLjIxLjE1LjAwLjAwCi11bnNwc2M3IzUxLjIxLjE1LjA0LjAwI1N1bGZpbnB5cmF6b25lIzUxLjIxLjE1LjAwLjAwCi11bnNwc2M3IzUxLjIxLjE2LjAwLjAwI0FudGlkb3RlcyM1MS4yMS4wMC4wMC4wMAotdW5zcHNjNyM1MS4yMS4xNi4wMS4wMCNEZWZlcm94YW1pbmUgbWVzeWxhdGUjNTEuMjEuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMjEuMTYuMDIuMDAjRGV4cmF6b3hhbmUjNTEuMjEuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMjEuMTYuMDMuMDAjRGlnb3hpbiBpbW11bmUgZmFiIzUxLjIxLjE2LjAwLjAwCi11bnNwc2M3IzUxLjIxLjE2LjA0LjAwI0RpbWVyY2Fwcm9sIzUxLjIxLjE2LjAwLjAwCi11bnNwc2M3IzUxLjIxLjE2LjA1LjAwI0VkZXRhdGUgZGlzb2RpdW0jNTEuMjEuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMjEuMTYuMDYuMDAjRmx1bWF6ZW5pbCM1MS4yMS4xNi4wMC4wMAotdW5zcHNjNyM1MS4yMS4xNi4wNy4wMCNJcGVjYWMjNTEuMjEuMTYuMDAuMDAKLXVuc3BzYzcjNTEuMjEuMTYuMDguMDAjUGVuaWNpbGxhbWluZSM1MS4yMS4xNi4wMC4wMAotdW5zcHNjNyM1MS4yMS4xNi4wOS4wMCNQcm90YW1pbmUgc3VsZmF0ZSM1MS4yMS4xNi4wMC4wMAotdW5zcHNjNyM1MS4yMS4xNi4xMC4wMCNTb2RpdW0gcG9seXN0eXJlbmUgc3VsZm9uYXRlIzUxLjIxLjE2LjAwLjAwCi11bnNwc2M3IzUxLjIxLjE2LjExLjAwI1RyaWVudGluZSM1MS4yMS4xNi4wMC4wMAotdW5zcHNjNyM1MS4yMS4xNy4wMC4wMCNOdXRyaXRpb3VzIGZvb2QjNTEuMjEuMDAuMDAuMDAKLXVuc3BzYzcjNTEuMjEuMTcuMDEuMDAjUmVzaWR1ZSBvZiBtYWl6ZSBnZXJtIzUxLjIxLjE3LjAwLjAwCi11bnNwc2M3IzUxLjIxLjE4LjAwLjAwI0FuYWVzdGhldGljIGRydWdzIzUxLjIxLjAwLjAwLjAwCi11bnNwc2M3IzUxLjIxLjE4LjAxLjAwI0NobG9yb2Zvcm0jNTEuMjEuMTguMDAuMDAKLXVuc3BzYzcjNTIuMDAuMDAuMDAuMDAjRG9tZXN0aWMgQXBwbGlhbmNlcyBhbmQgU3VwcGxpZXMgYW5kIENvbnN1bWVyIEVsZWN0cm9uaWMgUHJvZHVjdHMjNTIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTIuMTAuMDAuMDAuMDAjRmxvb3IgY292ZXJpbmdzIzUyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUyLjEwLjE1LjAwLjAwI1J1Z3MgYW5kIG1hdHMjNTIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNTIuMTAuMTUuMDEuMDAjT3JpZW50YWwgcnVncyM1Mi4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMC4xNS4wMi4wMCNBcmVhIHJ1Z3MjNTIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTAuMTUuMDMuMDAjV29vbCBydWdzIzUyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUyLjEwLjE1LjA0LjAwI0NvdHRvbiBydWdzIzUyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUyLjEwLjE1LjA1LjAwI1N5bnRoZXRpYyBydWdzIzUyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUyLjEwLjE1LjA2LjAwI0JyYWlkZWQgcnVncyM1Mi4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMC4xNS4wNy4wMCNCYXRoIG1hdHMjNTIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTAuMTUuMDguMDAjRG9vciBtYXRzIzUyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzUyLjEwLjE1LjA5LjAwI0RlY29yYXRpdmUgbWF0cyM1Mi4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMC4xNS4xMC4wMCNBbnRpIGZhdGlndWUgbWF0cyM1Mi4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMC4xNS4xMS4wMCNSdWJiZXIgb3IgdmlueWwgbWF0cyM1Mi4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMC4xNS4xMi4wMCNDaGFpciBtYXQjNTIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTAuMTUuMTMuMDAjQ2FycGV0IHByb3RlY3RvciM1Mi4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMS4wMC4wMC4wMCNBY2NvbW1vZGF0aW9uIGZ1cm5pdHVyZSM1Mi4wMC4wMC4wMC4wMAotdW5zcHNjNyM1Mi4xMS4xNS4wMC4wMCNGdXJuaXR1cmUjNTIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNTIuMTEuMTUuMDEuMDAjU29mYXMjNTIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTEuMTUuMDIuMDAjU3RhbmRzIzUyLjExLjE1LjAwLjAwCi11bnNwc2M3IzUyLjExLjE1LjAzLjAwI0Jvb2tjYXNlcyM1Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMS4xNS4wNC4wMCNFbnRlcnRhaW5tZW50IGNlbnRlcnMjNTIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTEuMTUuMDUuMDAjRnV0b25zIzUyLjExLjE1LjAwLjAwCi11bnNwc2M3IzUyLjExLjE1LjA2LjAwI0NoYWlycyM1Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMS4xNS4wNy4wMCNDb2F0IHJhY2tzIzUyLjExLjE1LjAwLjAwCi11bnNwc2M3IzUyLjExLjE1LjA4LjAwI1dhbGwgcmFja3MjNTIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTEuMTUuMDkuMDAjTWF0dHJlc3NlcyM1Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMS4xNS4xMC4wMCNDb3RzIzUyLjExLjE1LjAwLjAwCi11bnNwc2M3IzUyLjExLjE1LjExLjAwI0JlZHMjNTIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTEuMTUuMTIuMDAjRm9vdCBzdG9vbHMjNTIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTEuMTUuMTMuMDAjVGFibGVzIzUyLjExLjE1LjAwLjAwCi11bnNwc2M3IzUyLjExLjE1LjE0LjAwI0NoZXN0cyM1Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMS4xNS4xNS4wMCNTdG9vbHMjNTIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTEuMTUuMTYuMDAjRHJlc3NlcnMjNTIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTEuMTUuMTcuMDAjUGFydGl0aW9ucyM1Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMS4xNi4wMC4wMCNPdXRkb29yIGZ1cm5pdHVyZSM1Mi4xMS4wMC4wMC4wMAotdW5zcHNjNyM1Mi4xMS4xNi4wMS4wMCNPdXRkb29yIGNoYWlycyM1Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xMS4xNi4wMi4wMCNPdXRkb29yIHRhYmxlcyBvciBwaWNuaWMgdGFibGVzIzUyLjExLjE2LjAwLjAwCi11bnNwc2M3IzUyLjExLjE2LjAzLjAwI091dGRvb3Igc3dpbmdzIzUyLjExLjE2LjAwLjAwCi11bnNwc2M3IzUyLjExLjE2LjA0LjAwI091dGRvb3IgYmVuY2hlcyM1Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xMS4xNi4wNS4wMCNPdXRkb29yIHVtYnJlbGxhcyM1Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xMS4xNy4wMC4wMCNPZmZpY2UgZnVybml0dXJlIzUyLjExLjAwLjAwLjAwCi11bnNwc2M3IzUyLjExLjE3LjAxLjAwI0NyZWRlbnphcyM1Mi4xMS4xNy4wMC4wMAotdW5zcHNjNyM1Mi4xMS4xNy4wMy4wMCNEZXNrcyM1Mi4xMS4xNy4wMC4wMAotdW5zcHNjNyM1Mi4xMi4wMC4wMC4wMCNCZWRjbG90aGVzIGFuZCB0YWJsZSBhbmQga2l0Y2hlbiBsaW5lbiBhbmQgdG93ZWxzIzUyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUyLjEyLjE1LjAwLjAwI0JlZGNsb3RoZXMjNTIuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNTIuMTIuMTUuMDEuMDAjUXVpbHRzIzUyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUyLjEyLjE1LjAyLjAwI0NvbWZvcnRlcnMjNTIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTIuMTUuMDMuMDAjQ29tZm9ydGVyIGNvdmVycyM1Mi4xMi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMi4xNS4wNC4wMCNNYXR0cmVzcyBjb3ZlcnMjNTIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTIuMTUuMDUuMDAjUGlsbG93cyM1Mi4xMi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMi4xNS4wNi4wMCNNYXR0cmVzcyBwYWRzIzUyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUyLjEyLjE1LjA3LjAwI0ZlYXRoZXJiZWRzIzUyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUyLjEyLjE1LjA4LjAwI0JsYW5rZXRzIzUyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUyLjEyLjE1LjA5LjAwI1NoZWV0cyM1Mi4xMi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMi4xNS4xMC4wMCNEdXN0IHJ1ZmZsZXMjNTIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTIuMTUuMTEuMDAjRHV2ZXRzIzUyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUyLjEyLjE1LjEyLjAwI1BpbGxvdyBjYXNlcyM1Mi4xMi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMi4xNS4xMy4wMCNCZWQgc3ByZWFkcyM1Mi4xMi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xMi4xNi4wMC4wMCNUYWJsZSBhbmQga2l0Y2hlbiBsaW5lbiM1Mi4xMi4wMC4wMC4wMAotdW5zcHNjNyM1Mi4xMi4xNi4wMS4wMCNEaXNoIHRvd2VscyM1Mi4xMi4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xMi4xNi4wMi4wMCNOYXBraW5zIzUyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzUyLjEyLjE2LjAzLjAwI1RhYmxlIHJ1bm5lcnMjNTIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTIuMTYuMDQuMDAjVGFibGUgY2xvdGhzIzUyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzUyLjEyLjE2LjA1LjAwI0RvbWVzdGljIG92ZW4gbWl0cyBvciBwb3QgaG9sZGVycyM1Mi4xMi4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xMi4xNi4wNi4wMCNQbGFjZSBtYXRzIzUyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzUyLjEyLjE2LjA3LjAwI1RhYmxlIHNraXJ0cyM1Mi4xMi4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xMi4xNy4wMC4wMCNUb3dlbHMjNTIuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNTIuMTIuMTcuMDEuMDAjQmF0aCB0b3dlbHMjNTIuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTIuMTIuMTcuMDIuMDAjQmVhY2ggdG93ZWxzIzUyLjEyLjE3LjAwLjAwCi11bnNwc2M3IzUyLjEyLjE3LjAzLjAwI1dhc2ggY2xvdGhzIzUyLjEyLjE3LjAwLjAwCi11bnNwc2M3IzUyLjEyLjE3LjA0LjAwI0hhbmQgdG93ZWxzIzUyLjEyLjE3LjAwLjAwCi11bnNwc2M3IzUyLjEzLjAwLjAwLjAwI1dpbmRvdyB0cmVhdG1lbnRzIzUyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUyLjEzLjE1LjAwLjAwI0N1cnRhaW5zIGFuZCBkcmFwZXJpZXMjNTIuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNTIuMTMuMTUuMDEuMDAjQ3VydGFpbnMjNTIuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTMuMTUuMDMuMDAjRHJhcGVyaWVzIzUyLjEzLjE1LjAwLjAwCi11bnNwc2M3IzUyLjEzLjE2LjAwLjAwI0JsaW5kcyBhbmQgc2hhZGVzIzUyLjEzLjAwLjAwLjAwCi11bnNwc2M3IzUyLjEzLjE2LjAxLjAwI1ZlbmV0aWFuIGJsaW5kcyM1Mi4xMy4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xMy4xNi4wMi4wMCNSb2xsIHVwIHNoYWRlcyM1Mi4xMy4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xMy4xNi4wMy4wMCNJbnRlcmlvciBzaHV0dGVycyM1Mi4xMy4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xMy4xNi4wNC4wMCNWZXJ0aWNhbCBibGluZHMjNTIuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTMuMTcuMDAuMDAjV2luZG93IHRyZWF0bWVudCBhY2Nlc3NvcmllcyBhbmQgaGFyZHdhcmUjNTIuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNTIuMTMuMTcuMDEuMDAjVmFsYW5jZXMjNTIuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNTIuMTMuMTcuMDIuMDAjQ3VydGFpbiByb2RzIzUyLjEzLjE3LjAwLjAwCi11bnNwc2M3IzUyLjEzLjE3LjAzLjAwI1JvZCBmaW5pYWxzIzUyLjEzLjE3LjAwLjAwCi11bnNwc2M3IzUyLjEzLjE3LjA0LjAwI0N1cnRhaW4gcmluZ3Mgb3IgY2xpcHMjNTIuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMDAuMDAuMDAjRG9tZXN0aWMgYXBwbGlhbmNlcyM1Mi4wMC4wMC4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNS4wMC4wMCNEb21lc3RpYyBraXRjaGVuIGFwcGxpYW5jZXMjNTIuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTUuMDEuMDAjRG9tZXN0aWMgcmVmcmlnZXJhdG9ycyM1Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNS4wMi4wMCNEb21lc3RpYyBtaWNyb3dhdmUgb3ZlbnMjNTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTUuMDMuMDAjRG9tZXN0aWMgZ2FyYmFnZSBkaXNwb3NhbHMjNTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTUuMDQuMDAjRG9tZXN0aWMgcmFuZ2VzIzUyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjA1LjAwI0RvbWVzdGljIGRpc2ggd2FzaGVycyM1Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNS4wNi4wMCNEb21lc3RpYyBmcmVlemVycyM1Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNS4wNy4wMCNEb21lc3RpYyB1cHJpZ2h0IGZyZWV6ZXJzIzUyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjA4LjAwI0RvbWVzdGljIGNoZXN0IGZyZWV6ZXJzIzUyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjA5LjAwI0RvbWVzdGljIGNvbWJpbmF0aW9uIHJlZnJpZ2VyYXRvciBmcmVlemVycyM1Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNS4xMC4wMCNEb21lc3RpYyBwb3J0YWJsZSBhaXIgY29uZGl0aW9uZXJzIzUyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjExLjAwI0RvbWVzdGljIGp1aWNlcnMjNTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTUuMTIuMDAjRG9tZXN0aWMgd2FmZmxlIGlyb25zIzUyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjEzLjAwI0RvbWVzdGljIGVsZWN0cmljIGNhbiBvcGVuZXJzIzUyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjE0LjAwI0RvbWVzdGljIGZvb2QgcHJvY2Vzc29ycyM1Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNS4xNS4wMCNEb21lc3RpYyB0cmFzaCBjb21wYWN0b3JzIzUyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjE2LjAwI0RvbWVzdGljIGRlZXAgZnJ5ZXJzIzUyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjE3LjAwI0RvbWVzdGljIHBvcGNvcm4gcG9wcGVycyM1Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNS4xOC4wMCNEb21lc3RpYyBicmVhZCBtYWtpbmcgbWFjaGluZXMjNTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTUuMTkuMDAjRG9tZXN0aWMgY29udmVjdGlvbmFsIG92ZW5zIzUyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjIwLjAwI0RvbWVzdGljIG1peGVycyM1Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNS4yMS4wMCNEb21lc3RpYyB0b2FzdGVyIG92ZW5zIzUyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjIyLjAwI0RvbWVzdGljIHRvYXN0ZXJzIzUyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjIzLjAwI0RvbWVzdGljIGVsZWN0cmljYWwga2V0dGxlcyM1Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNS4yNC4wMCNEb21lc3RpYyBibGVuZGVycyM1Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNS4yNS4wMCNEb21lc3RpYyBob3QgcGxhdGVzIzUyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjI2LjAwI0RvbWVzdGljIGNvZmZlZSBtYWtlcnMjNTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTUuMjcuMDAjRG9tZXN0aWMgZWxlY3RyaWMga25pdmVzIzUyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjI4LjAwI0RvbWVzdGljIGVsZWN0cmljIHdva3MjNTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTUuMjkuMDAjRG9tZXN0aWMgY29mZmVlIGdyaW5kZXJzIzUyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjMwLjAwI1BhcnRzIG9mIGRpc2h3YXNoaW5nIG1hY2hpbmVzIzUyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE1LjMxLjAwI0RvbWVzdGljIGZvb2QgY2hvcHBlcnMjNTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTUuMzIuMDAjRG9tZXN0aWMgZWxlY3RyaWMgc2tpbGxldHMjNTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTUuMzMuMDAjRG9tZXN0aWMgZWxlY3RyaWMgZ3JpZGRsZXMjNTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTUuMzQuMDAjRG9tZXN0aWMgZWxlY3RyaWMgc2FuZHdpY2ggbWFrZXIjNTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTUuMzUuMDAjRG9tZXN0aWMgaW5kb29yIGVsZWN0cmljIGdyaWxscyM1Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNS4zNi4wMCNEb21lc3RpYyBwaXplbGxlIG9yIGNvb2tpZSBtYWtlciM1Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNS4zNy4wMCNEb21lc3RpYyBjcm9jayBwb3QjNTIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTYuMDAuMDAjRG9tZXN0aWMgbGF1bmRyeSBhcHBsaWFuY2VzIGFuZCBzdXBwbGllcyM1Mi4xNC4wMC4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNi4wMS4wMCNEb21lc3RpYyBjbG90aGVzIHdhc2hlcnMjNTIuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTYuMDIuMDAjRG9tZXN0aWMgdHVtYmxlIGRyeWVycyM1Mi4xNC4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNi4wMy4wMCNEb21lc3RpYyBjbG90aGluZyBpcm9ucyM1Mi4xNC4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNi4wNC4wMCNGb290d2VhciBkcnllcnMjNTIuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTYuMDUuMDAjTGF1bmRyeSBoYW1wZXJzIzUyLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE2LjA2LjAwI0xhdW5kcnkgYmFza2V0cyM1Mi4xNC4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNy4wMC4wMCNEb21lc3RpYyBiYXRoIGFwcGxpYW5jZXMjNTIuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTcuMDEuMDAjRG9tZXN0aWMgZWxlY3RyaWMgdG9vdGhicnVzaGVzIzUyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE3LjAzLjAwI0RvbWVzdGljIGhhaXIgZHJ5ZXJzIzUyLjE0LjE3LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE3LjA0LjAwI0RvbWVzdGljIGVsZWN0cmljIHJhem9ycyM1Mi4xNC4xNy4wMC4wMAotdW5zcHNjNyM1Mi4xNC4xNy4wNS4wMCNQYXJ0cyBvZiBzaGF2ZXJzIG9yIGhhaXIgcmVtb3ZlcnMjNTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTcuMDYuMDAjTmFpbCBkcnllcnMjNTIuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTguMDAuMDAjT3RoZXIgZG9tZXN0aWMgaG91c2Vob2xkIGFwcGxpYW5jZXMjNTIuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTguMDEuMDAjRG9tZXN0aWMgc2V3aW5nIG1hY2hpbmVzIzUyLjE0LjE4LjAwLjAwCi11bnNwc2M3IzUyLjE0LjE4LjAyLjAwI0RvbWVzdGljIHNwYWNlIGhlYXRlcnMjNTIuMTQuMTguMDAuMDAKLXVuc3BzYzcjNTIuMTQuMTguMDMuMDAjRG9tZXN0aWMgZWxlY3RyaWMgYmxhbmtldHMjNTIuMTQuMTguMDAuMDAKLXVuc3BzYzcjNTIuMTUuMDAuMDAuMDAjRG9tZXN0aWMga2l0Y2hlbndhcmUjNTIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTUuMDAuMDAjRG9tZXN0aWMgZGlzcG9zYWJsZSBraXRjaGVud2FyZSM1Mi4xNS4wMC4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNS4wMS4wMCNEb21lc3RpYyBkaXNwb3NhYmxlIGNvb2t3YXJlIzUyLjE1LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE1LjAyLjAwI0RvbWVzdGljIGRpc3Bvc2FibGUgZGlzaGVzIzUyLjE1LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE1LjAzLjAwI0RvbWVzdGljIGRpc3Bvc2FibGUgZmxhdHdhcmUjNTIuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTUuMDQuMDAjRG9tZXN0aWMgZGlzcG9zYWJsZSBjdXBzIG9yIGdsYXNzZXMgb3IgbGlkcyM1Mi4xNS4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNS4wNS4wMCNEb21lc3RpYyBkaXNwb3NhYmxlIHN0aXJyZXJzIzUyLjE1LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE1LjA2LjAwI0RvbWVzdGljIGRpc3Bvc2FibGUgZm9vZCBjb250YWluZXJzIzUyLjE1LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE1LjA3LjAwI0RvbWVzdGljIGRpc3Bvc2FibGUgZHJpbmtpbmcgc3RyYXdzIzUyLjE1LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjAwLjAwI0RvbWVzdGljIGtpdGNoZW4gdG9vbHMgYW5kIHV0ZW5zaWxzIzUyLjE1LjAwLjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjAxLjAwI0RvbWVzdGljIHJvbGxpbmcgcGlucyM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4wMi4wMCNEb21lc3RpYyBtaXhpbmcgYm93bHMjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMDMuMDAjRG9tZXN0aWMgZ3JhdGVycyM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4wNC4wMCNEb21lc3RpYyBzdHJhaW5lcnMgb3IgY29sYW5kZXJzIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjA1LjAwI0RvbWVzdGljIGNhbiBvciBib3R0bGUgb3BlbmVycyM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4wNi4wMCNEb21lc3RpYyBjdXR0aW5nIGJvYXJkcyM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4wNy4wMCNEb21lc3RpYyBtZWFzdXJpbmcgY3VwcyM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4wOC4wMCNCYXN0ZXJzIG9yIGJhc3RpbmcgYnJ1c2hlcyM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4wOS4wMCNWZWdldGFibGUgcGVlbGVyIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjEwLjAwI0Nvb2tpZSBjdXR0ZXJzIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjExLjAwI0RvbWVzdGljIGtpdGNoZW4gdG9uZ3MjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMTIuMDAjRG9tZXN0aWMga2l0Y2hlbiB3aXJlIHdoaXBzIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjEzLjAwI0RvbWVzdGljIGZvb2Qgc2NyYXBlcnMjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMTQuMDAjRG9tZXN0aWMgY29vbGluZyByYWNrcyM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4xNS4wMCNEb21lc3RpYyBwaXp6YSBjdXR0ZXJzIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjE2LjAwI0RvbWVzdGljIGtpdGNoZW4gc3BhdHVsYXMjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMTcuMDAjRG9tZXN0aWMgd29vZGVuIHNwb29ucyM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4xOC4wMCNEb21lc3RpYyB3b29kZW4gb3ZlbiBwYWRkbGUjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMTkuMDAjRG9tZXN0aWMgcGFzdHJ5IGJsZW5kZXIjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMjAuMDAjRG9tZXN0aWMgc2lmdGVyIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjIxLjAwI0RvbWVzdGljIGNvb2tpZSBzdGFtcGVycyM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4yMi4wMCNEb21lc3RpYyBwYXN0cnkgZGVjb3JhdGluZyBndW4jNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMjMuMDAjRG9tZXN0aWMgY29va2llIHByZXNzIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjI0LjAwI0RvbWVzdGljIGtuaWZlIHNoYXJwZW5lcnMjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMjUuMDAjRG9tZXN0aWMgYmlzY3VpdCBjdXR0ZXJzIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjI2LjAwI0RvbWVzdGljIG1hbmRvbGluIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjI3LjAwI0RvbWVzdGljIGdhcmxpYyBwcmVzcyM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4yOC4wMCNEb21lc3RpYyBlZ2cgc2xpY2VyIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjI5LjAwI0RvbWVzdGljIGVnZyBzZXBhcmF0b3IjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMzAuMDAjRG9tZXN0aWMgY2hlZXNlIHNsaWNlciM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4zMS4wMCNEb21lc3RpYyBmb29kIG1pbGwjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMzIuMDAjRG9tZXN0aWMga2l0Y2hlbiBmdW5uZWxzIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjMzLjAwI0RvbWVzdGljIGdhcm5pc2hpbmcgdG9vbHMjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMzQuMDAjRG9tZXN0aWMgYXBwbGUgY29yZXIjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMzUuMDAjRG9tZXN0aWMgbWVsb24gb3IgYnV0dGVyIGJhbGxlciM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4zNi4wMCNEb21lc3RpYyBmb29kIHNjb29wcyM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4zNy4wMCNEb21lc3RpYyBwdW1wa2luIGNhcnZlciM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi4zOC4wMCNEb21lc3RpYyB2ZWdldGFibGUgYnJ1c2gjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuMzkuMDAjRG9tZXN0aWMgZWdnIGJlYXRlciM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi40MC4wMCNEb21lc3RpYyBwYXN0YSBkcnlpbmcgcmFjayM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi40MS4wMCNEb21lc3RpYyB3aGlwcGVkIGNyZWFtIG1ha2VyIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjQyLjAwI0RvbWVzdGljIGRvdWdoIHByZXNzIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjQzLjAwI0RvbWVzdGljIHJhdmlvbGkgbWFrZXIjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuNDQuMDAjRG9tZXN0aWMgbWlzdCBzcHJheWVyIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjQ1LjAwI0RvbWVzdGljIHBhc3RyeSBicnVzaCM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi40Ni4wMCNEb21lc3RpYyBraXRjaGVuIG9yIGRpZXQgc2NhbGVzIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjQ3LjAwI0RvbWVzdGljIGtpdGNoZW4gdGltZXJzIzUyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE2LjQ4LjAwI0RvbWVzdGljIGtpdGNoZW4gb3IgZm9vZCB0aGVybW9tZXRlcnMjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTYuNDkuMDAjRG9tZXN0aWMgYnJlYWQgc2xpY2luZyBndWlkZSM1Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNi41MC4wMCNEb21lc3RpYyBkcmFpbiBib2FyZHMjNTIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTcuMDAuMDAjRG9tZXN0aWMgZmxhdHdhcmUgYW5kIGN1dGxlcnkjNTIuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTcuMDEuMDAjRG9tZXN0aWMgc2VydmluZyB1dGVuc2lscyM1Mi4xNS4xNy4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xNy4wMi4wMCNEb21lc3RpYyBrbml2ZXMjNTIuMTUuMTcuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTcuMDMuMDAjRG9tZXN0aWMgZm9ya3MjNTIuMTUuMTcuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTcuMDQuMDAjRG9tZXN0aWMgc3Bvb25zIzUyLjE1LjE3LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE3LjA1LjAwI1Nwb29uIHJlc3RzIzUyLjE1LjE3LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE3LjA2LjAwI0Nob3BzdGlja3MjNTIuMTUuMTcuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTguMDAuMDAjRG9tZXN0aWMgY29va3dhcmUjNTIuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTguMDEuMDAjRG9tZXN0aWMgZHV0Y2ggb3ZlbnMjNTIuMTUuMTguMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTguMDIuMDAjRG9tZXN0aWMgZnJ5aW5nIHBhbnMjNTIuMTUuMTguMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTguMDMuMDAjRG9tZXN0aWMgc2F1Y2VwYW5zIzUyLjE1LjE4LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE4LjA0LjAwI0RvbWVzdGljIGtldHRsZXMjNTIuMTUuMTguMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTguMDUuMDAjRG9tZXN0aWMgd29rcyM1Mi4xNS4xOC4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xOC4wNi4wMCNEb21lc3RpYyBzdGVhbWVycyM1Mi4xNS4xOC4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xOC4wNy4wMCNEb21lc3RpYyBzdG9jayBwb3RzIzUyLjE1LjE4LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE4LjA4LjAwI0RvbWVzdGljIHByZXNzdXJlIGNvb2tlcnMjNTIuMTUuMTguMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTguMDkuMDAjRG9tZXN0aWMgc2F1dGUgcGFucyM1Mi4xNS4xOC4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xOC4xMC4wMCNEb21lc3RpYyBjaGFmaW5nIGRpc2hlcyM1Mi4xNS4xOC4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xOC4xMS4wMCNEb21lc3RpYyBncmlkZGxlcyM1Mi4xNS4xOC4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xOC4xMi4wMCNEb21lc3RpYyBkb3VibGUgYm9pbGVycyM1Mi4xNS4xOC4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xOC4xMy4wMCNEb21lc3RpYyBzcGxhdHRlciBzaGllbGQjNTIuMTUuMTguMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTkuMDAuMDAjRG9tZXN0aWMgYmFrZXdhcmUjNTIuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTkuMDEuMDAjRG9tZXN0aWMgbXVmZmluIHBhbnMjNTIuMTUuMTkuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTkuMDIuMDAjRG9tZXN0aWMgYmFraW5nIHBhbnMjNTIuMTUuMTkuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTkuMDMuMDAjRG9tZXN0aWMgY2FrZSBvciBwaWUgcGFucyM1Mi4xNS4xOS4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xOS4wNC4wMCNEb21lc3RpYyByb2FzdGluZyBwYW5zIzUyLjE1LjE5LjAwLjAwCi11bnNwc2M3IzUyLjE1LjE5LjA1LjAwI0RvbWVzdGljIGJha2luZyBzaGVldHMjNTIuMTUuMTkuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTkuMDYuMDAjRG9tZXN0aWMgYnJvaWxpbmcgcGFucyM1Mi4xNS4xOS4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xOS4wNy4wMCNEb21lc3RpYyBiYWtpbmcgbW9sZHMjNTIuMTUuMTkuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMTkuMDguMDAjRG9tZXN0aWMgcGl6emEgcGFucyM1Mi4xNS4xOS4wMC4wMAotdW5zcHNjNyM1Mi4xNS4xOS4wOS4wMCNEb21lc3RpYyB0b3J0aWxsYSBiYWtlcnMjNTIuMTUuMTkuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMjAuMDAuMDAjRG9tZXN0aWMgZGlzaGVzIGFuZCBzZXJ2aW5nd2FyZSBhbmQgc3RvcmFnZSBjb250YWluZXJzIzUyLjE1LjAwLjAwLjAwCi11bnNwc2M3IzUyLjE1LjIwLjAxLjAwI0RvbWVzdGljIHBpdGNoZXJzIzUyLjE1LjIwLjAwLjAwCi11bnNwc2M3IzUyLjE1LjIwLjAyLjAwI0RvbWVzdGljIGZvb2Qgc3RvcmFnZSBjb250YWluZXJzIzUyLjE1LjIwLjAwLjAwCi11bnNwc2M3IzUyLjE1LjIwLjAzLjAwI0RvbWVzdGljIHB1bmNoIGJvd2xzIzUyLjE1LjIwLjAwLjAwCi11bnNwc2M3IzUyLjE1LjIwLjA0LjAwI0RvbWVzdGljIHBsYXRlcyM1Mi4xNS4yMC4wMC4wMAotdW5zcHNjNyM1Mi4xNS4yMC4wNS4wMCNEb21lc3RpYyBzYXVjZXJzIzUyLjE1LjIwLjAwLjAwCi11bnNwc2M3IzUyLjE1LjIwLjA2LjAwI0RvbWVzdGljIHRyYXlzIG9yIHBsYXR0ZXJzIzUyLjE1LjIwLjAwLjAwCi11bnNwc2M3IzUyLjE1LjIwLjA3LjAwI0RvbWVzdGljIHNlcnZpbmcgYm93bHMjNTIuMTUuMjAuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMjAuMDguMDAjRG9tZXN0aWMgdGVhIG9yIGNvZmZlZSBwb3RzIzUyLjE1LjIwLjAwLjAwCi11bnNwc2M3IzUyLjE1LjIwLjA5LjAwI0RvbWVzdGljIHNvdXAgb3Igc2FsYWQgYm93bHMjNTIuMTUuMjAuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMjAuMTAuMDAjRG9tZXN0aWMgdmFjdXVtIGZsYXNrcyM1Mi4xNS4yMC4wMC4wMAotdW5zcHNjNyM1Mi4xNS4yMC4xMS4wMCNJbm5lcnMgZm9yIHZhY2N1bSBmbGFza3MjNTIuMTUuMjAuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMjAuMTIuMDAjSWNlIHRyYXlzIzUyLjE1LjIwLjAwLjAwCi11bnNwc2M3IzUyLjE1LjIwLjEzLjAwI1NwaWNlIG9yIHNhbHQgb3IgcGVwcGVyIHNoYWtlcnMjNTIuMTUuMjAuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMjAuMTQuMDAjQ2FyYWZlIHNldHMjNTIuMTUuMjAuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMjAuMTUuMDAjRG9tZXN0aWMgY2FrZSBwbGF0ZSB3aXRoIGRvbWUjNTIuMTUuMjAuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMjEuMDAuMDAjRG9tZXN0aWMgZHJpbmtpbmcgdXRlbnNpbHMjNTIuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMjEuMDEuMDAjRG9tZXN0aWMgY29mZmVlIG9yIHRlYSBjdXBzIzUyLjE1LjIxLjAwLjAwCi11bnNwc2M3IzUyLjE1LjIxLjAyLjAwI0RvbWVzdGljIGRyaW5raW5nIGdsYXNzZXMjNTIuMTUuMjEuMDAuMDAKLXVuc3BzYzcjNTIuMTUuMjEuMDMuMDAjRG9tZXN0aWMgbXVncyM1Mi4xNS4yMS4wMC4wMAotdW5zcHNjNyM1Mi4xNS4yMS4wNC4wMCNEb21lc3RpYyBzdGVtd2FyZSM1Mi4xNS4yMS4wMC4wMAotdW5zcHNjNyM1Mi4xNS4yMi4wMC4wMCNEaXNod2FzaGluZyBhbmQgZGlzaCBzdG9yYWdlIGFjY2Vzc29yaWVzIzUyLjE1LjAwLjAwLjAwCi11bnNwc2M3IzUyLjE1LjIyLjAxLjAwI1NoZWxmIGxpbmVyIzUyLjE1LjIyLjAwLjAwCi11bnNwc2M3IzUyLjE1LjIyLjAyLjAwI0Rpc2ggZHJhaW5lciM1Mi4xNS4yMi4wMC4wMAotdW5zcHNjNyM1Mi4xNS4yMi4wMy4wMCNTb2FwIGRpc3BlbnNpbmcgYnJ1c2gjNTIuMTUuMjIuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMDAuMDAuMDAjQ29uc3VtZXIgZWxlY3Ryb25pY3MjNTIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTUuMDAuMDAjQXVkaW8gYW5kIHZpc3VhbCBlcXVpcG1lbnQjNTIuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTUuMDEuMDAjQ29tcGFjdCBkaXNjIHBsYXllcnMjNTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTUuMDIuMDAjQ2Fzc2V0dGUgcGxheWVycyBvciByZWNvcmRlcnMjNTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTUuMDMuMDAjRGlnaXRhbCB2aWRlbyBkaXNjIHBsYXllcnMjNTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTUuMDQuMDAjVmlkZW8gY2Fzc2V0dGUgcmVjb3JkZXJzIzUyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE2LjE1LjA1LjAwI1RlbGV2aXNpb25zIzUyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE2LjE1LjA2LjAwI0hlYWRwaG9uZXMjNTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTUuMDcuMDAjQ2xvY2sgcmFkaW9zIzUyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE2LjE1LjA4LjAwI0xhc2VyIGRpc2MgcGxheWVycyM1Mi4xNi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNS4wOS4wMCNQb3J0YWJsZSBzdGVyZW8gc3lzdGVtcyM1Mi4xNi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNS4xMC4wMCNIb21lIHN0ZXJlbyBzeXN0ZW1zIzUyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE2LjE1LjExLjAwI1JhZGlvcyM1Mi4xNi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNS4xMi4wMCNTcGVha2VycyM1Mi4xNi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNS4xMy4wMCNDb21iaW5hdGlvbiB0ZWxldmlzaW9uIHZpZGVvIGNhc3NldHRlIHJlY29yZGVycyM1Mi4xNi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNS4xNC4wMCNIZWFkcGhvbmVzIzUyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE2LjE1LjE1LjAwI0NvbXBhY3QgZGlzayBwbGF5ZXJzIG9yIHJlY29yZGVycyM1Mi4xNi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNS4xNi4wMCNEaWdpdGFsIHZpZGVvIGRpc2sgcGxheWVycyBvciByZWNvcmRlcnMjNTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTUuMTcuMDAjRXF1YWxpemVycyM1Mi4xNi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNS4xOC4wMCNHbG9iYWwgcG9zaXRpb25pbmcgc3lzdGVtIHJlY2VpdmVycyM1Mi4xNi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNS4xOS4wMCNIZWFkcGhvbmVzIzUyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE2LjE1LjIwLjAwI01pY3JvcGhvbmVzIzUyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE2LjE1LjIxLjAwI011bHRpbWVkaWEgcmVjZWl2ZXJzIzUyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE2LjE1LjIyLjAwI1JhZGlvIGZyZXF1ZW5jeSBzY2FubmVycyM1Mi4xNi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNS4yMy4wMCNSYWRpbyBmcmVxdWVuY3kgdHJhbnNtaXR0ZXJzcmVjZWl2ZXJzIzUyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE2LjE1LjI0LjAwI1JhZGlvIHJlY2VpdmVycyM1Mi4xNi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNS4yNS4wMCNSZW1vdGUgY29udHJvbCM1Mi4xNi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNS4yNi4wMCNTYXRlbGxpdGUgcmVjZWl2ZXJzIzUyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE2LjE1LjI3LjAwI1N1Yndvb2ZlcnMjNTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTUuMjguMDAjVGVsZXZpc2lvbnMjNTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTUuMjkuMDAjVmlkZW8gY2Fzc2V0dGUgcGxheWVycyBvciByZWNvcmRlcnMjNTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTUuMzAuMDAjVmlkZW8gbW9uaXRvcnMjNTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTUuMzEuMDAjUmFkaW8gcGhvbm9ncmFwaHMjNTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTUuMzIuMDAjS2FyYW9rZSBzeXN0ZW1zIzUyLjE2LjE1LjAwLjAwCi11bnNwc2M3IzUyLjE2LjE1LjMzLjAwI01lZ2FwaG9uZXMjNTIuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTUuMzQuMDAjSW50ZWdyYXRlZCBjaXJjdXQgSUMgY2hpcCByZWNvcmRlciM1Mi4xNi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNS4zNS4wMCNEaWdpdGFsIHZvaWNlIHJlY29yZGVycyM1Mi4xNi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNS4zNi4wMCNNaW5pZGlzYyBwbGF5ZXJzIG9yIHJlY29yZGVycyM1Mi4xNi4xNS4wMC4wMAotdW5zcHNjNyM1Mi4xNi4xNi4wMC4wMCNBdWRpbyB2aXN1YWwgZXF1aXBtZW50IGFjY2Vzc29yaWVzIzUyLjE2LjAwLjAwLjAwCi11bnNwc2M3IzUyLjE2LjE2LjAxLjAwI0Nhc3NldHRlIHN0b3JhZ2UjNTIuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNTIuMTYuMTYuMDIuMDAjQXVkaW8gb3IgdmlkZW8gaGVhZCBjbGVhbmVycyM1Mi4xNi4xNi4wMC4wMAotdW5zcHNjNyM1Mi4xNy4wMC4wMC4wMCNEb21lc3RpYyB3YWxsIHRyZWF0bWVudHMjNTIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTIuMTcuMTAuMDAuMDAjQmF0aHJvb20gd2FsbCB0cmVhdG1lbnRzIzUyLjE3LjAwLjAwLjAwCi11bnNwc2M3IzUyLjE3LjEwLjAxLjAwI0hhbmdpbmcgdG9pbGV0cnkgb3JnYW5pemVyIG9yIHNoZWxmIzUyLjE3LjEwLjAwLjAwCi11bnNwc2M3IzUzLjAwLjAwLjAwLjAwI0FwcGFyZWwgYW5kIEx1Z2dhZ2UgYW5kIFBlcnNvbmFsIENhcmUgUHJvZHVjdHMjNTMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMDAuMDAuMDAjQ2xvdGhpbmcjNTMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMTUuMDAuMDAjU2xhY2tzIGFuZCB0cm91c2VycyBhbmQgc2hvcnRzIzUzLjEwLjAwLjAwLjAwCi11bnNwc2M3IzUzLjEwLjE1LjAxLjAwI0JveXMgc2xhY2tzIG9yIHRyb3VzZXJzIG9yIHNob3J0cyM1My4xMC4xNS4wMC4wMAotdW5zcHNjNyM1My4xMC4xNS4wMi4wMCNNZW5zIHNsYWNrcyBvciB0cm91c2VycyBvciBzaG9ydHMjNTMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMTUuMDMuMDAjR2lybHMgc2xhY2tzIG9yIHRyb3VzZXJzIG9yIHNob3J0cyM1My4xMC4xNS4wMC4wMAotdW5zcHNjNyM1My4xMC4xNS4wNC4wMCNXb21lbnMgc2xhY2tzIG9yIHRyb3VzZXJzIG9yIHNob3J0cyM1My4xMC4xNS4wMC4wMAotdW5zcHNjNyM1My4xMC4xNS4wNS4wMCNJbmZhbnRzIHNsYWNrcyBvciB0cm91c2VycyBvciBzaG9ydHMjNTMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMTYuMDAuMDAjU2hpcnRzIGFuZCBibG91c2VzIzUzLjEwLjAwLjAwLjAwCi11bnNwc2M3IzUzLjEwLjE2LjAxLjAwI0JveXMgc2hpcnRzIzUzLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEwLjE2LjAyLjAwI01lbnMgc2hpcnRzIzUzLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEwLjE2LjAzLjAwI0dpcmxzIHNoaXJ0cyBvciBibG91c2VzIzUzLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEwLjE2LjA0LjAwI1dvbWVucyBzaGlydHMgb3IgYmxvdXNlcyM1My4xMC4xNi4wMC4wMAotdW5zcHNjNyM1My4xMC4xNi4wNS4wMCNJbmZhbnRzIHNoaXJ0cyBvciBibG91c2VzIzUzLjEwLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEwLjE3LjAwLjAwI1N3ZWF0ZXJzIzUzLjEwLjAwLjAwLjAwCi11bnNwc2M3IzUzLjEwLjE3LjAxLjAwI0JveXMgc3dlYXRlcnMjNTMuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMTcuMDIuMDAjTWVucyBzd2VhdGVycyM1My4xMC4xNy4wMC4wMAotdW5zcHNjNyM1My4xMC4xNy4wMy4wMCNHaXJscyBzd2VhdGVycyM1My4xMC4xNy4wMC4wMAotdW5zcHNjNyM1My4xMC4xNy4wNC4wMCNXb21lbnMgc3dlYXRlcnMjNTMuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMTcuMDUuMDAjSW5mYW50cyBzd2VhdGVycyM1My4xMC4xNy4wMC4wMAotdW5zcHNjNyM1My4xMC4xOC4wMC4wMCNDb2F0cyBhbmQgamFja2V0cyM1My4xMC4wMC4wMC4wMAotdW5zcHNjNyM1My4xMC4xOC4wMS4wMCNCb3lzIGNvYXRzIG9yIGphY2tldHMjNTMuMTAuMTguMDAuMDAKLXVuc3BzYzcjNTMuMTAuMTguMDIuMDAjTWVucyBjb2F0cyBvciBqYWNrZXRzIzUzLjEwLjE4LjAwLjAwCi11bnNwc2M3IzUzLjEwLjE4LjAzLjAwI0dpcmxzIGNvYXRzIG9yIGphY2tldHMjNTMuMTAuMTguMDAuMDAKLXVuc3BzYzcjNTMuMTAuMTguMDQuMDAjV29tZW5zIGNvYXRzIG9yIGphY2tldHMjNTMuMTAuMTguMDAuMDAKLXVuc3BzYzcjNTMuMTAuMTguMDUuMDAjSW5mYW50cyBjb2F0cyBvciBqYWNrZXRzIzUzLjEwLjE4LjAwLjAwCi11bnNwc2M3IzUzLjEwLjE5LjAwLjAwI1N1aXRzIzUzLjEwLjAwLjAwLjAwCi11bnNwc2M3IzUzLjEwLjE5LjAxLjAwI0JveXMgc3VpdHMjNTMuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMTkuMDIuMDAjTWVucyBzdWl0cyM1My4xMC4xOS4wMC4wMAotdW5zcHNjNyM1My4xMC4xOS4wMy4wMCNHaXJscyBzdWl0cyM1My4xMC4xOS4wMC4wMAotdW5zcHNjNyM1My4xMC4xOS4wNC4wMCNXb21lbnMgc3VpdHMjNTMuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMTkuMDUuMDAjSW5mYW50cyBzdWl0cyM1My4xMC4xOS4wMC4wMAotdW5zcHNjNyM1My4xMC4yMC4wMC4wMCNEcmVzc2VzIGFuZCBza2lydHMgYW5kIHNhcmlzIGFuZCBraW1vbm9zIzUzLjEwLjAwLjAwLjAwCi11bnNwc2M3IzUzLjEwLjIwLjAxLjAwI0dpcmxzIGRyZXNzZXMgb3Igc2tpcnRzIG9yIHNhcmlzIG9yIGtpbW9ub3MjNTMuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjAuMDIuMDAjV29tZW5zIGRyZXNzZXMgb3Igc2tpcnRzIG9yIHNhcmlzIG9yIGtpbW9ub3MjNTMuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjAuMDMuMDAjSW5mYW50cyBkcmVzc2VzIG9yIHNraXJ0cyBvciBzYXJpcyBvciBraW1vbm9zIzUzLjEwLjIwLjAwLjAwCi11bnNwc2M3IzUzLjEwLjIxLjAwLjAwI092ZXJhbGxzIGFuZCBjb3ZlcmFsbHMjNTMuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjEuMDEuMDAjQm95cyBvdmVyYWxscyBvciBjb3ZlcmFsbHMjNTMuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjEuMDIuMDAjTWVucyBvdmVyYWxscyBvciBjb3ZlcmFsbHMjNTMuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjEuMDMuMDAjR2lybHMgb3ZlcmFsbHMgb3IgY292ZXJhbGxzIzUzLjEwLjIxLjAwLjAwCi11bnNwc2M3IzUzLjEwLjIxLjA0LjAwI1dvbWVucyBvdmVyYWxscyBvciBjb3ZlcmFsbHMjNTMuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjEuMDUuMDAjSW5mYW50cyBvdmVyYWxscyBvciBjb3ZlcmFsbHMjNTMuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjIuMDAuMDAjRm9sa2xvcmljIGNsb3RoaW5nIzUzLjEwLjAwLjAwLjAwCi11bnNwc2M3IzUzLjEwLjIyLjAxLjAwI0JveXMgZm9sa2xvcmljIGNsb3RoaW5nIzUzLjEwLjIyLjAwLjAwCi11bnNwc2M3IzUzLjEwLjIyLjAyLjAwI01lbnMgZm9sa2xvcmljIGNsb3RoaW5nIzUzLjEwLjIyLjAwLjAwCi11bnNwc2M3IzUzLjEwLjIyLjAzLjAwI0dpcmxzIGZvbGtsb3JpYyBjbG90aGluZyM1My4xMC4yMi4wMC4wMAotdW5zcHNjNyM1My4xMC4yMi4wNC4wMCNXb21lbnMgZm9sa2xvcmljIGNsb3RoaW5nIzUzLjEwLjIyLjAwLjAwCi11bnNwc2M3IzUzLjEwLjIyLjA1LjAwI0luZmFudHMgZm9sa2xvcmljIGNsb3RoaW5nIzUzLjEwLjIyLjAwLjAwCi11bnNwc2M3IzUzLjEwLjIzLjAwLjAwI1VuZGVyZ2FybWVudHMjNTMuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjMuMDEuMDAjVW5kZXJzaGlydHMjNTMuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjMuMDIuMDAjU2xpcHMjNTMuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjMuMDMuMDAjVW5kZXJwYW50cyM1My4xMC4yMy4wMC4wMAotdW5zcHNjNyM1My4xMC4yMy4wNC4wMCNCcmFzc2llcmVzIzUzLjEwLjIzLjAwLjAwCi11bnNwc2M3IzUzLjEwLjIzLjA1LjAwI0luZmFudCBkaWFwZXJzIzUzLjEwLjIzLjAwLjAwCi11bnNwc2M3IzUzLjEwLjIzLjA2LjAwI0FkdWx0IGRpYXBlcnMjNTMuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjMuMDcuMDAjQm9keSBzaGFwaW5nIGdhcm1lbnRzIzUzLjEwLjIzLjAwLjAwCi11bnNwc2M3IzUzLjEwLjI0LjAwLjAwI0hvc2llcnkjNTMuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjQuMDEuMDAjU3RvY2tpbmdzIzUzLjEwLjI0LjAwLjAwCi11bnNwc2M3IzUzLjEwLjI0LjAyLjAwI1NvY2tzIzUzLjEwLjI0LjAwLjAwCi11bnNwc2M3IzUzLjEwLjI0LjAzLjAwI1BhbnR5IGhvc2UjNTMuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjQuMDQuMDAjVGlnaHRzIzUzLjEwLjI0LjAwLjAwCi11bnNwc2M3IzUzLjEwLjI1LjAwLjAwI0Nsb3RoaW5nIGFjY2Vzc29yaWVzIzUzLjEwLjAwLjAwLjAwCi11bnNwc2M3IzUzLjEwLjI1LjAxLjAwI0JlbHRzIG9yIHN1c3BlbmRlcnMjNTMuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjUuMDIuMDAjVGllcyBvciBzY2FydmVzIG9yIG11ZmZsZXJzIzUzLjEwLjI1LjAwLjAwCi11bnNwc2M3IzUzLjEwLjI1LjAzLjAwI0hhdHMjNTMuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjUuMDQuMDAjR2xvdmVzIG9yIG1pdHRlbnMjNTMuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjUuMDUuMDAjVW1icmVsbGFzIzUzLjEwLjI1LjAwLjAwCi11bnNwc2M3IzUzLjEwLjI1LjA2LjAwI1N3ZWF0IGJhbmRzIzUzLjEwLjI1LjAwLjAwCi11bnNwc2M3IzUzLjEwLjI1LjA3LjAwI0Nsb3RoaW5nIGhhbmdlcnMjNTMuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjUuMDguMDAjQXJtYmFuZHMjNTMuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjUuMDkuMDAjR2FydGVycyM1My4xMC4yNS4wMC4wMAotdW5zcHNjNyM1My4xMC4yNS4xMC4wMCNUYXNzbGVzIzUzLjEwLjI1LjAwLjAwCi11bnNwc2M3IzUzLjEwLjI1LjExLjAwI0JhbmRhbm5hcyM1My4xMC4yNS4wMC4wMAotdW5zcHNjNyM1My4xMC4yNS4xMi4wMCNIYW5ka2VyY2hpZWZzIzUzLjEwLjI1LjAwLjAwCi11bnNwc2M3IzUzLjEwLjI1LjEzLjAwI0hlYWRiYW5kcyM1My4xMC4yNS4wMC4wMAotdW5zcHNjNyM1My4xMC4yNS4xNC4wMCNQb2NrZXQgcHJvdGVjdG9ycyM1My4xMC4yNS4wMC4wMAotdW5zcHNjNyM1My4xMC4yNS4xNS4wMCNCdXR0b24gY292ZXJzIzUzLjEwLjI1LjAwLjAwCi11bnNwc2M3IzUzLjEwLjI2LjAwLjAwI05pZ2h0d2VhciM1My4xMC4wMC4wMC4wMAotdW5zcHNjNyM1My4xMC4yNi4wMS4wMCNCb3lzIHBhamFtYXMgb3IgbmlnaHRzaGlydHMjNTMuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjYuMDIuMDAjTWVucyBwYWphbWFzIG9yIG5pZ2h0c2hpcnRzIzUzLjEwLjI2LjAwLjAwCi11bnNwc2M3IzUzLjEwLjI2LjAzLjAwI0dpcmxzIHBhamFtYXMgb3IgbmlnaHRzaGlydHMjNTMuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjYuMDQuMDAjV29tZW5zIHBhamFtYXMgb3IgbmlnaHRzaGlydHMjNTMuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjYuMDUuMDAjSW5mYW50cyBwYWphbWFzIG9yIG5pZ2h0c2hpcnRzIzUzLjEwLjI2LjAwLjAwCi11bnNwc2M3IzUzLjEwLjI2LjA2LjAwI0JhdGggcm9iZXMjNTMuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjcuMDAuMDAjVW5pZm9ybXMjNTMuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjcuMDEuMDAjTWlsaXRhcnkgdW5pZm9ybXMjNTMuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjcuMDIuMDAjQ3VzdG9tcyB1bmlmb3JtcyM1My4xMC4yNy4wMC4wMAotdW5zcHNjNyM1My4xMC4yNy4wMy4wMCNQb2xpY2UgdW5pZm9ybXMjNTMuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjguMDAuMDAjU3dpbXdlYXIjNTMuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjguMDEuMDAjTWVucyBzd2ltd2VhciM1My4xMC4yOC4wMC4wMAotdW5zcHNjNyM1My4xMC4yOC4wMi4wMCNXb21lbnMgc3dpbXdlYXIjNTMuMTAuMjguMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjguMDMuMDAjQm95cyBzd2ltd2VhciM1My4xMC4yOC4wMC4wMAotdW5zcHNjNyM1My4xMC4yOC4wNC4wMCNHaXJscyBzd2ltd2VhciM1My4xMC4yOC4wMC4wMAotdW5zcHNjNyM1My4xMC4yOC4wNS4wMCNJbmZhbnRzIHN3aW13ZWFyIzUzLjEwLjI4LjAwLjAwCi11bnNwc2M3IzUzLjEwLjI5LjAwLjAwI0F0aGxldGljIHdlYXIjNTMuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjkuMDEuMDAjV29tZW5zIGF0aGxldGljIHdlYXIjNTMuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNTMuMTAuMjkuMDIuMDAjTWVucyBhdGhsZXRpYyB3ZWFyIzUzLjEwLjI5LjAwLjAwCi11bnNwc2M3IzUzLjEwLjI5LjAzLjAwI0JveXMgYXRobGV0aWMgd2VhciM1My4xMC4yOS4wMC4wMAotdW5zcHNjNyM1My4xMC4yOS4wNC4wMCNHaXJscyBhdGhsZXRpYyB3ZWFyIzUzLjEwLjI5LjAwLjAwCi11bnNwc2M3IzUzLjExLjAwLjAwLjAwI0Zvb3R3ZWFyIzUzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUzLjExLjE1LjAwLjAwI0Jvb3RzIzUzLjExLjAwLjAwLjAwCi11bnNwc2M3IzUzLjExLjE1LjAxLjAwI01lbnMgYm9vdHMjNTMuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTMuMTEuMTUuMDIuMDAjV29tZW5zIGJvb3RzIzUzLjExLjE1LjAwLjAwCi11bnNwc2M3IzUzLjExLjE1LjAzLjAwI0JveXMgYm9vdHMjNTMuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTMuMTEuMTUuMDQuMDAjR2lybHMgYm9vdHMjNTMuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTMuMTEuMTUuMDUuMDAjSW5mYW50cyBib290cyM1My4xMS4xNS4wMC4wMAotdW5zcHNjNyM1My4xMS4xNi4wMC4wMCNTaG9lcyM1My4xMS4wMC4wMC4wMAotdW5zcHNjNyM1My4xMS4xNi4wMS4wMCNNZW5zIHNob2VzIzUzLjExLjE2LjAwLjAwCi11bnNwc2M3IzUzLjExLjE2LjAyLjAwI1dvbWVucyBzaG9lcyM1My4xMS4xNi4wMC4wMAotdW5zcHNjNyM1My4xMS4xNi4wMy4wMCNCb3lzIHNob2VzIzUzLjExLjE2LjAwLjAwCi11bnNwc2M3IzUzLjExLjE2LjA0LjAwI0dpcmxzIHNob2VzIzUzLjExLjE2LjAwLjAwCi11bnNwc2M3IzUzLjExLjE2LjA1LjAwI0luZmFudHMgc2hvZXMjNTMuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTEuMTcuMDAuMDAjU2xpcHBlcnMjNTMuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNTMuMTEuMTcuMDEuMDAjTWVucyBzbGlwcGVycyM1My4xMS4xNy4wMC4wMAotdW5zcHNjNyM1My4xMS4xNy4wMi4wMCNXb21lbnMgc2xpcHBlcnMjNTMuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNTMuMTEuMTcuMDMuMDAjQm95cyBzbGlwcGVycyM1My4xMS4xNy4wMC4wMAotdW5zcHNjNyM1My4xMS4xNy4wNC4wMCNHaXJscyBzbGlwcGVycyM1My4xMS4xNy4wMC4wMAotdW5zcHNjNyM1My4xMS4xNy4wNS4wMCNJbmZhbnRzIHNsaXBwZXJzIzUzLjExLjE3LjAwLjAwCi11bnNwc2M3IzUzLjExLjE4LjAwLjAwI1NhbmRhbHMjNTMuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNTMuMTEuMTguMDEuMDAjTWVucyBzYW5kYWxzIzUzLjExLjE4LjAwLjAwCi11bnNwc2M3IzUzLjExLjE4LjAyLjAwI1dvbWVucyBzYW5kYWxzIzUzLjExLjE4LjAwLjAwCi11bnNwc2M3IzUzLjExLjE4LjAzLjAwI0JveXMgc2FuZGFscyM1My4xMS4xOC4wMC4wMAotdW5zcHNjNyM1My4xMS4xOC4wNC4wMCNHaXJscyBzYW5kYWxzIzUzLjExLjE4LjAwLjAwCi11bnNwc2M3IzUzLjExLjE4LjA1LjAwI0luZmFudHMgc2FuZGFscyM1My4xMS4xOC4wMC4wMAotdW5zcHNjNyM1My4xMS4xOS4wMC4wMCNBdGhsZXRpYyBmb290d2VhciM1My4xMS4wMC4wMC4wMAotdW5zcHNjNyM1My4xMS4xOS4wMS4wMCNNZW5zIGF0aGxldGljIGZvb3R3ZWFyIzUzLjExLjE5LjAwLjAwCi11bnNwc2M3IzUzLjExLjE5LjAyLjAwI1dvbWVucyBhdGhsZXRpYyBmb290d2VhciM1My4xMS4xOS4wMC4wMAotdW5zcHNjNyM1My4xMS4xOS4wMy4wMCNCb3lzIGF0aGxldGljIGZvb3R3ZWFyIzUzLjExLjE5LjAwLjAwCi11bnNwc2M3IzUzLjExLjE5LjA0LjAwI0dpcmxzIGF0aGxldGljIGZvb3R3ZWFyIzUzLjExLjE5LjAwLjAwCi11bnNwc2M3IzUzLjExLjE5LjA1LjAwI0luZmFudHMgYXRobGV0aWMgZm9vdHdlYXIjNTMuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNTMuMTEuMjAuMDAuMDAjU2hvZSBhY2Nlc3NvcmllcyM1My4xMS4wMC4wMC4wMAotdW5zcHNjNyM1My4xMS4yMC4wMS4wMCNTaG9laG9ybnMjNTMuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNTMuMTEuMjAuMDIuMDAjU2hvZWxhY2VzIzUzLjExLjIwLjAwLjAwCi11bnNwc2M3IzUzLjEyLjAwLjAwLjAwI0x1Z2dhZ2UgYW5kIGhhbmRiYWdzIGFuZCBwYWNrcyBhbmQgY2FzZXMjNTMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTMuMTIuMTUuMDAuMDAjTHVnZ2FnZSM1My4xMi4wMC4wMC4wMAotdW5zcHNjNyM1My4xMi4xNS4wMS4wMCNHYXJtZW50IGJhZ3MjNTMuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTMuMTIuMTUuMDIuMDAjTHVnZ2FnZSBzZXRzIzUzLjEyLjE1LjAwLjAwCi11bnNwc2M3IzUzLjEyLjE1LjAzLjAwI0luZGl2aWR1YWwgbHVnZ2FnZSBwaWVjZXMjNTMuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTMuMTIuMTYuMDAuMDAjUHVyc2VzIGFuZCBoYW5kYmFncyBhbmQgYmFncyM1My4xMi4wMC4wMC4wMAotdW5zcHNjNyM1My4xMi4xNi4wMS4wMCNIYW5kYmFncyBvciBwdXJzZXMjNTMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTIuMTYuMDIuMDAjRHVmZmxlIGJhZ3MjNTMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTIuMTYuMDMuMDAjQmFja3BhY2tzIzUzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEyLjE2LjA0LjAwI0V5ZWdsYXNzIGNhc2VzIzUzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEyLjE2LjA1LjAwI0NvaW4gcHVyc2VzIzUzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEyLjE2LjA2LjAwI0xpcHN0aWNrIGNhc2VzIzUzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEyLjE2LjA3LjAwI0NpZ2FyIGNhc2UjNTMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTIuMTcuMDAuMDAjQnVzaW5lc3MgY2FzZXMjNTMuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNTMuMTIuMTcuMDEuMDAjQnJpZWZjYXNlcyM1My4xMi4xNy4wMC4wMAotdW5zcHNjNyM1My4xMi4xNy4wMi4wMCNBdHRhY2hlcyM1My4xMi4xNy4wMC4wMAotdW5zcHNjNyM1My4xMi4xNy4wNC4wMCNQb3J0Zm9saW9zIzUzLjEyLjE3LjAwLjAwCi11bnNwc2M3IzUzLjEyLjE3LjA1LjAwI0VxdWlwbWVudCBjYXNlcyM1My4xMi4xNy4wMC4wMAotdW5zcHNjNyM1My4xMi4xNy4wNi4wMCNDb21wdXRlciBiYWdzIzUzLjEyLjE3LjAwLjAwCi11bnNwc2M3IzUzLjEyLjE4LjAwLjAwI1RyYXZlbCBraXRzIGFuZCBhY2Nlc3NvcmllcyM1My4xMi4wMC4wMC4wMAotdW5zcHNjNyM1My4xMi4xOC4wMS4wMCNUcmF2ZWwga2l0cyM1My4xMi4xOC4wMC4wMAotdW5zcHNjNyM1My4xMi4xOC4wMi4wMCNUcmF2ZWwgY2FydHMjNTMuMTIuMTguMDAuMDAKLXVuc3BzYzcjNTMuMTIuMTguMDMuMDAjR2FybWVudCBicnVzaGVzIzUzLjEyLjE4LjAwLjAwCi11bnNwc2M3IzUzLjEyLjE4LjA0LjAwI01ha2V1cCBvciBtYW5pY3VyZSBjYXNlcyM1My4xMi4xOC4wMC4wMAotdW5zcHNjNyM1My4xMy4wMC4wMC4wMCNQZXJzb25hbCBjYXJlIHByb2R1Y3RzIzUzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzUzLjEzLjE1LjAwLjAwI0RlbnRhbCM1My4xMy4wMC4wMC4wMAotdW5zcHNjNyM1My4xMy4xNS4wMS4wMCNNb3V0aHdhc2gjNTMuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTUuMDIuMDAjVG9vdGhwYXN0ZSM1My4xMy4xNS4wMC4wMAotdW5zcHNjNyM1My4xMy4xNS4wMy4wMCNUb290aGJydXNoZXMjNTMuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTUuMDQuMDAjRGVudGFsIGZsb3NzIzUzLjEzLjE1LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE1LjA1LjAwI0luZmFudCBzb290aGVyIG9yIHBhY2lmaWVyIG9yIGR1bW15IzUzLjEzLjE1LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE1LjA2LjAwI0RlbnRhbCBraXRzIzUzLjEzLjE1LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE1LjA3LjAwI1Rvb3RocGlja3MjNTMuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTUuMDguMDAjRGVudHVyZSBjbGVhbmluZyB0YWJsZXRzIzUzLjEzLjE1LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE2LjAwLjAwI0JhdGggYW5kIGJvZHkjNTMuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTYuMDEuMDAjU2hvd2VyIGNhcHMjNTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTYuMDIuMDAjSGFpciBjYXJlIHN1cHBsaWVzIzUzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE2LjAzLjAwI1Jhem9ycyM1My4xMy4xNi4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4wNC4wMCNIYWlyIGNvbWJzIG9yIGJydXNoZXMjNTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTYuMDUuMDAjVmFuaXR5IGtpdHMjNTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTYuMDYuMDAjRGVvZG9yYW50cyM1My4xMy4xNi4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4wNy4wMCNIYW5kIG9yIGJvZHkgbG90aW9ucyM1My4xMy4xNi4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4wOC4wMCNTb2FwcyM1My4xMy4xNi4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4wOS4wMCNTdW4gcHJvdGVjdGlvbiBwcm9kdWN0cyM1My4xMy4xNi4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4xMC4wMCNFeWUgY2FyZSBzdXBwbGllcyM1My4xMy4xNi4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4xMS4wMCNTaGF2aW5nIGNyZWFtcyM1My4xMy4xNi4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4xMi4wMCNCYXRoIGdlbHMjNTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTYuMTMuMDAjU2tpbiBjYXJlIHByb2R1Y3RzIzUzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE2LjE0LjAwI0Zvb3QgY2FyZSBwcm9kdWN0cyM1My4xMy4xNi4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4xNS4wMCNGZW1pbmluZSBoeWdpZW5lIHByb2R1Y3RzIzUzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE2LjE2LjAwI1BhcmEgcGhhcm1hY2V1dGljYWwgY3JlYW1zIG9yIGxvdGlvbnMjNTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTYuMTcuMDAjTWFuaWN1cmUgaW1wbGVtZW50cyM1My4xMy4xNi4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4xOC4wMCNQZWRpY3VyZSBpbXBsZW1lbnRzIzUzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE2LjE5LjAwI0Nvc21ldGljcyM1My4xMy4xNi4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4yMC4wMCNQZXJmdW1lcyBvciBjb2xvZ25lcyBvciBmcmFncmFuY2VzIzUzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE2LjIxLjAwI05haWwgY2xpcHBlcnMjNTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTYuMjIuMDAjQ29uZG9tcyM1My4xMy4xNi4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4yMy4wMCNIYWlyIHJlbW92YWwgb3IgZGVwaWxhdG9yeSBwcm9kdWN0cyM1My4xMy4xNi4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4yNC4wMCNEaXNwb3NhYmxlIHBlcnNvbmFsIHdpcGVzIzUzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzUzLjEzLjE2LjI1LjAwI0hhaXIgb3IgYmVhcmQgbmV0cyM1My4xMy4xNi4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4yNi4wMCNIYW5kIHNhbml0aXplciM1My4xMy4xNi4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4yNy4wMCNIYW5kIGNsZWFuZXIjNTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTYuMjguMDAjU2hhbXBvb3MjNTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTYuMjkuMDAjTWFrZXVwIGtpdHMjNTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTYuMzAuMDAjTGlwIGJhbG0jNTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTYuMzEuMDAjVGF0dG9vcyM1My4xMy4xNi4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4zMi4wMCNIb3Qgcm9sbGVycyM1My4xMy4xNi4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4zMy4wMCNCYXJyZXR0ZXMjNTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTYuMzQuMDAjQ2hlbWljYWwgcHJvdGVjdGlvbiBwcm9kdWN0cyM1My4xMy4xNi4wMC4wMAotdW5zcHNjNyM1My4xMy4xNi4zNS4wMCNTaGF2aW5nIGJydXNoZXMjNTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTMuMTcuMDAuMDAjRXlld2VhciM1My4xMy4wMC4wMC4wMAotdW5zcHNjNyM1My4xMy4xNy4wMS4wMCNPcHRpY2FsIGdsYXNzZXMgb3Igc3BlY3RhY2xlcyM1My4xMy4xNy4wMC4wMAotdW5zcHNjNyM1My4xMy4xNy4wMi4wMCNDb250YWN0IGxlbnNlcyM1My4xMy4xNy4wMC4wMAotdW5zcHNjNyM1My4xMy4xNy4wMy4wMCNTdW5nbGFzc2VzIzUzLjEzLjE3LjAwLjAwCi11bnNwc2M3IzUzLjE0LjAwLjAwLjAwI1Nld2luZyBzdXBwbGllcyBhbmQgYWNjZXNzb3JpZXMjNTMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTUuMDAuMDAjU2V3aW5nIGZhc3RlbmVycyM1My4xNC4wMC4wMC4wMAotdW5zcHNjNyM1My4xNC4xNS4wMS4wMCNTdHJhaWdodCBwaW5zIzUzLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUzLjE0LjE1LjAyLjAwI1NhZmV0eSBwaW5zIzUzLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUzLjE0LjE1LjAzLjAwI1ppcHBlcnMjNTMuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTUuMDQuMDAjQnVja2xlcyM1My4xNC4xNS4wMC4wMAotdW5zcHNjNyM1My4xNC4xNS4wNS4wMCNCdXR0b25zIzUzLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUzLjE0LjE1LjA2LjAwI1NuYXBzIzUzLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUzLjE0LjE1LjA3LjAwI0NsYXNwcyM1My4xNC4xNS4wMC4wMAotdW5zcHNjNyM1My4xNC4xNS4wOC4wMCNHYXJtZW50IHJpdmV0IzUzLjE0LjE1LjAwLjAwCi11bnNwc2M3IzUzLjE0LjE2LjAwLjAwI01pc2NlbGxhbmVvdXMgc2V3aW5nIHN1cHBsaWVzIzUzLjE0LjAwLjAwLjAwCi11bnNwc2M3IzUzLjE0LjE2LjAxLjAwI1BpbiBjdXNoaW9ucyM1My4xNC4xNi4wMC4wMAotdW5zcHNjNyM1My4xNC4xNi4wMi4wMCNTZXdpbmcga2l0cyM1My4xNC4xNi4wMC4wMAotdW5zcHNjNyM1My4xNC4xNi4wMy4wMCNUaGltYmxlcyM1My4xNC4xNi4wMC4wMAotdW5zcHNjNyM1My4xNC4xNi4wNC4wMCNTZXdpbmcgcGF0dGVybnMjNTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTYuMDUuMDAjU2V3aW5nIG5lZWRsZXMjNTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTYuMDYuMDAjQm9iYmlucyBvciBib2JiaW4gaG9sZGVycyM1My4xNC4xNi4wMC4wMAotdW5zcHNjNyM1My4xNC4xNi4wNy4wMCNTZWFtIGdhdWdlIzUzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUzLjE0LjE2LjA4LjAwI0JvZGtpbiM1My4xNC4xNi4wMC4wMAotdW5zcHNjNyM1My4xNC4xNi4wOS4wMCNMb29wIHR1cm5lciM1My4xNC4xNi4wMC4wMAotdW5zcHNjNyM1My4xNC4xNi4xMC4wMCNGYWJyaWMgb3IgdGFpbG9ycyBjaGFsayBob2xkZXJzIzUzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUzLjE0LjE2LjExLjAwI0ZhYnJpYyBtYXJrZXJzIG9yIGZhYnJpYyBwZW5jaWxzIG9yIGZhYnJpYyBjaGFsayM1My4xNC4xNi4wMC4wMAotdW5zcHNjNyM1My4xNC4xNi4xMi4wMCNTZXJyYXRlZCBwYXR0ZXJuIHRyYWNpbmcgd2hlZWwjNTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTYuMTMuMDAjVHJhbnNmZXIgcGFwZXIjNTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTYuMTQuMDAjVGFwZXN0cnkgbmVlZGxlcyM1My4xNC4xNi4wMC4wMAotdW5zcHNjNyM1My4xNC4xNi4xNS4wMCNXZWF2aW5nIG5lZWRsZXMjNTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTYuMTYuMDAjTG9vcGVyIGxvb21zIzUzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUzLjE0LjE2LjE3LjAwI0NvdHRvbiBqZXJzZXkgbG9vcHMjNTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTYuMTguMDAjTmVlZGxlcG9pbnQgY2FudmFzIzUzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUzLjE0LjE2LjE5LjAwI01hZ25ldCB3YW5kcyM1My4xNC4xNi4wMC4wMAotdW5zcHNjNyM1My4xNC4xNi4yMC4wMCNTZWFtIHJpcHBlciM1My4xNC4xNi4wMC4wMAotdW5zcHNjNyM1My4xNC4xNi4yMS4wMCNOZWVkbGUgdGhyZWFkZXIjNTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTYuMjIuMDAjRHJlc3NtYWtlcnMgcnVsZXIjNTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTYuMjMuMDAjTGlxdWlkIHRocmVhZCBsb2NrIG9yIHJlaW5mb3JjZXIjNTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTYuMjQuMDAjQ3Jvc3Mgc3RpdGNoIGZhYnJpYyBvciBuZWVkbGVzIzUzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUzLjE0LjE2LjI1LjAwI0Nyb3NzIHN0aXRjaCBkZXNpZ25zIzUzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUzLjE0LjE2LjI2LjAwI0VtYnJvaWRlcnkgaG9vcHMjNTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTYuMjcuMDAjQ3JvY2hldCBob29rcyM1My4xNC4xNi4wMC4wMAotdW5zcHNjNyM1My4xNC4xNi4yOC4wMCNRdWlsdGVycyBiYXN0aW5nIHRvb2xzIzUzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzUzLjE0LjE2LjI5LjAwI1F1aWx0ZXJzIHBpbnMjNTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNTMuMTQuMTYuMzAuMDAjUGF0dGVybiBjdXR0aW5nIG1hdHMgb3IgYm9hcmRzIzUzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzU0LjAwLjAwLjAwLjAwI1RpbWVwaWVjZXMgYW5kIEpld2VscnkgYW5kIEdlbXN0b25lIFByb2R1Y3RzIzU0LjAwLjAwLjAwLjAwCi11bnNwc2M3IzU0LjEwLjAwLjAwLjAwI0pld2VscnkjNTQuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTQuMTAuMTUuMDAuMDAjRmluZSBqZXdlbHJ5IzU0LjEwLjAwLjAwLjAwCi11bnNwc2M3IzU0LjEwLjE1LjAxLjAwI0dvbGQgb3Igc2lsdmVyIG9yIHBsYXRpbnVtIGNoYWlucyM1NC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1NC4xMC4xNS4wMi4wMCNGaW5lIGpld2VscnkgbmVja2xhY2VzIzU0LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU0LjEwLjE1LjAzLjAwI0ZpbmUgamV3ZWxyeSByaW5ncyM1NC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1NC4xMC4xNS4wNC4wMCNGaW5lIGpld2VscnkgZWFycmluZ3MjNTQuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTQuMTAuMTUuMDUuMDAjRmluZSBib2R5IGpld2VscnkjNTQuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTQuMTAuMTUuMDYuMDAjRmluZSBqZXdlbHJ5IGJyYWNlbGV0cyM1NC4xMC4xNS4wMC4wMAotdW5zcHNjNyM1NC4xMC4xNS4wNy4wMCNUaWFyYXMjNTQuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTQuMTAuMTYuMDAuMDAjSW1pdGF0aW9uIGpld2VscnkjNTQuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNTQuMTAuMTYuMDEuMDAjQnJhY2VsZXRzIzU0LjEwLjE2LjAwLjAwCi11bnNwc2M3IzU0LjEwLjE2LjAyLjAwI05lY2tsYWNlcyM1NC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1NC4xMC4xNi4wMy4wMCNSaW5ncyM1NC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1NC4xMC4xNi4wNC4wMCNFYXJyaW5ncyM1NC4xMC4xNi4wMC4wMAotdW5zcHNjNyM1NC4xMC4xNi4wNS4wMCNCb2R5IGpld2VscnkjNTQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTQuMTEuMDAuMDAuMDAjVGltZXBpZWNlcyM1NC4wMC4wMC4wMC4wMAotdW5zcHNjNyM1NC4xMS4xNS4wMC4wMCNXYXRjaGVzIzU0LjExLjAwLjAwLjAwCi11bnNwc2M3IzU0LjExLjE1LjAxLjAwI1dyaXN0IHdhdGNoZXMjNTQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTQuMTEuMTUuMDIuMDAjUG9ja2V0IHdhdGNoZXMjNTQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTQuMTEuMTYuMDAuMDAjQ2xvY2tzIzU0LjExLjAwLjAwLjAwCi11bnNwc2M3IzU0LjExLjE2LjAxLjAwI1dhbGwgY2xvY2tzIzU0LjExLjE2LjAwLjAwCi11bnNwc2M3IzU0LjExLjE2LjAyLjAwI01hbnRlbCBvciB0YWJsZSBjbG9ja3MjNTQuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTQuMTEuMTYuMDMuMDAjRnJlZSBzdGFuZGluZyBjbG9ja3MjNTQuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTQuMTEuMTYuMDQuMDAjSG91cmdsYXNzZXMjNTQuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTQuMTEuMTcuMDAuMDAjV2F0Y2ggb3IgY2xvY2sgcGFydHMjNTQuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNTQuMTEuMTcuMDEuMDAjV2F0Y2ggb3IgY2xvY2sgZGlhbHMjNTQuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNTQuMTEuMTcuMDIuMDAjV2F0Y2ggb3IgY2xvY2sgY3J5c3RhbHMjNTQuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNTQuMTEuMTcuMDMuMDAjV2F0Y2ggb3IgY2xvY2sgcGxhdGVzIG9yIGJyaWRnZXMjNTQuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNTQuMTEuMTcuMDQuMDAjV2F0Y2ggc3RyYXBzIG9yIGJhbmRzIG9yIGJyYWNlbGV0cyBvciBmb2JzIzU0LjExLjE3LjAwLjAwCi11bnNwc2M3IzU0LjEyLjAwLjAwLjAwI0dlbXN0b25lcyM1NC4wMC4wMC4wMC4wMAotdW5zcHNjNyM1NC4xMi4xNS4wMC4wMCNQcmVjaW91cyBzdG9uZXMjNTQuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNTQuMTIuMTUuMDEuMDAjRGlhbW9uZCBnZW1zdG9uZXMjNTQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTQuMTIuMTUuMDIuMDAjRW1lcmFsZCBnZW1zdG9uZXMjNTQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTQuMTIuMTUuMDMuMDAjUnVieSBnZW1zdG9uZXMjNTQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTQuMTIuMTUuMDQuMDAjU2FwcGhpcmUgZ2Vtc3RvbmVzIzU0LjEyLjE1LjAwLjAwCi11bnNwc2M3IzU0LjEyLjE2LjAwLjAwI1NlbWkgcHJlY2lvdXMgc3RvbmVzIzU0LjEyLjAwLjAwLjAwCi11bnNwc2M3IzU0LjEyLjE2LjAxLjAwI0dhcm5ldCBnZW1zdG9uZXMjNTQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTQuMTIuMTYuMDIuMDAjSmFkZSBnZW1zdG9uZXMjNTQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTQuMTIuMTYuMDMuMDAjT3BhbCBnZW1zdG9uZXMjNTQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTQuMTIuMTcuMDAuMDAjUGVhcmxzIzU0LjEyLjAwLjAwLjAwCi11bnNwc2M3IzU0LjEyLjE3LjAxLjAwI0N1bHR1cmVkIHBlYXJscyM1NC4xMi4xNy4wMC4wMAotdW5zcHNjNyM1NC4xMi4xNy4wMi4wMCNOYXR1cmFsIHBlYXJscyM1NC4xMi4xNy4wMC4wMAotdW5zcHNjNyM1NC4xMi4xOC4wMC4wMCNJbmR1c3RyaWFsIHByZWNpb3VzIGFuZCBzZW1pIHByZWNpb3VzIHN0b25lcyM1NC4xMi4wMC4wMC4wMAotdW5zcHNjNyM1NC4xMi4xOC4wMS4wMCNJbmR1c3RyaWFsIGRpYW1vbmRzIzU0LjEyLjE4LjAwLjAwCi11bnNwc2M3IzU0LjEyLjE4LjAyLjAwI0luZHVzdHJpYWwgZ2FybmV0cyM1NC4xMi4xOC4wMC4wMAotdW5zcHNjNyM1NS4wMC4wMC4wMC4wMCNQdWJsaXNoZWQgUHJvZHVjdHMjNTUuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNTUuMTAuMDAuMDAuMDAjUHJpbnRlZCBtZWRpYSM1NS4wMC4wMC4wMC4wMAotdW5zcHNjNyM1NS4xMC4xNS4wMC4wMCNQcmludGVkIHB1YmxpY2F0aW9ucyM1NS4xMC4wMC4wMC4wMAotdW5zcHNjNyM1NS4xMC4xNS4wMS4wMCNDaGFydHMgb3IgbWFwcyBvciBhdGxhc2VzIzU1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU1LjEwLjE1LjAyLjAwI0RpcmVjdG9yaWVzIzU1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU1LjEwLjE1LjAzLjAwI0NhdGFsb2dzIzU1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU1LjEwLjE1LjA0LjAwI05ld3NwYXBlcnMjNTUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTUuMTAuMTUuMDUuMDAjQ29taWMgYm9va3MjNTUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTUuMTAuMTUuMDYuMDAjTWFnYXppbmVzIzU1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU1LjEwLjE1LjA3LjAwI1BpY3R1cmUgb3IgZHJhd2luZyBvciBjb2xvcmluZyBib29rcyBmb3IgY2hpbGRyZW4jNTUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTUuMTAuMTUuMDguMDAjRW5jeWNsb3BlZGlhcyM1NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM1NS4xMC4xNS4wOS4wMCNFZHVjYXRpb25hbCBvciB2b2NhdGlvbmFsIHRleHRib29rcyM1NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM1NS4xMC4xNS4xMC4wMCNMZWlzdXJlIHJlYWRpbmcgYm9va3MjNTUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTUuMTAuMTUuMTEuMDAjUmVmZXJlbmNlIGJvb2tzIzU1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU1LjEwLjE1LjEyLjAwI0RpY3Rpb25hcmllcyM1NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM1NS4xMC4xNS4xMy4wMCNUcmFkaW5nIGNhcmRzIzU1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU1LjEwLjE1LjE0LjAwI1NoZWV0IG11c2ljIzU1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU1LjEwLjE1LjE1LjAwI1Byb21vdGlvbmFsIG1hdGVyaWFsIG9yIGFubnVhbCByZXBvcnRzIzU1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU1LjEwLjE1LjE2LjAwI09wZXJhdGlvbiBhbmQgaW5zdHJ1Y3Rpb24gbWFudWFscyM1NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM1NS4xMC4xNS4xNy4wMCNDbGVhcmFuY2UgYW5kIGRpbWVuc2lvbmFsIGRyYXdpbmdzIzU1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU1LjEwLjE1LjE4LjAwI1RlY2huaWNhbCBkaWFncmFtcyBvciBkcmF3aW5ncyM1NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM1NS4xMC4xNS4xOS4wMCNQZXJpb2RpY2FscyM1NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM1NS4xMC4xNS4yMC4wMCNJbnN0cnVjdGlvbiBzaGVldHMgb3IgYm9va2xldHMjNTUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTUuMTAuMTUuMjEuMDAjT3duZXIgb3IgdXNlciBtYW51YWxzIzU1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU1LjEwLjE1LjIyLjAwI1RlcnJlc3RyaWFsIG9yIGNlbGVzdGlhbCBnbG9iZXMjNTUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTUuMTAuMTUuMjMuMDAjRXhlcmNpc2UgYm9va3MjNTUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTUuMTAuMTUuMjQuMDAjUmVmZXJlbmNlIGJvb2tzIzU1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU1LjEwLjE1LjI1LjAwI0VuY3ljbG9wZWRpYXMjNTUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTUuMTAuMTUuMjYuMDAjRGljdGlvbmFyaWVzIzU1LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU1LjExLjAwLjAwLjAwI0VsZWN0cm9uaWMgcmVmZXJlbmNlIG1hdGVyaWFsIzU1LjAwLjAwLjAwLjAwCi11bnNwc2M3IzU1LjExLjE1LjAwLjAwI0VsZWN0cm9uaWMgcHVibGljYXRpb25zIGFuZCBtdXNpYyM1NS4xMS4wMC4wMC4wMAotdW5zcHNjNyM1NS4xMS4xNS4wMS4wMCNFbGVjdHJvbmljIGRpcmVjdG9yaWVzIzU1LjExLjE1LjAwLjAwCi11bnNwc2M3IzU1LjExLjE1LjAyLjAwI0VsZWN0cm9uaWMgZGljdGlvbmFyaWVzIzU1LjExLjE1LjAwLjAwCi11bnNwc2M3IzU1LjExLjE1LjAzLjAwI0VsZWN0cm9uaWMgZW5jeWNsb3BlZGlhcyM1NS4xMS4xNS4wMC4wMAotdW5zcHNjNyM1NS4xMS4xNS4wNC4wMCNFbGVjdHJvbmljIGNhdGFsb2dzIzU1LjExLjE1LjAwLjAwCi11bnNwc2M3IzU1LjExLjE1LjA1LjAwI0Jvb2tzIG9uIHRhcGUgb3IgY29tcGFjdCBkaXNjIzU1LjExLjE1LjAwLjAwCi11bnNwc2M3IzU1LjExLjE1LjA2LjAwI0VsZWN0cm9uaWMgbWFnYXppbmVzIzU1LjExLjE1LjAwLjAwCi11bnNwc2M3IzU1LjExLjE1LjA3LjAwI0VsZWN0cm9uaWMgbmV3c3BhcGVycyM1NS4xMS4xNS4wMC4wMAotdW5zcHNjNyM1NS4xMS4xNS4wOC4wMCNFbGVjdHJvbmljIGNoYXJ0cyBvciBtYXBzIG9yIGF0bGFzZXMjNTUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTUuMTEuMTUuMDkuMDAjQmFja2dyb3VuZCBtdXNpYyM1NS4xMS4xNS4wMC4wMAotdW5zcHNjNyM1NS4xMS4xNS4xMC4wMCNNb3Rpb24gcGljdHVyZXMgb24gY2VsbHVsb2lkIzU1LjExLjE1LjAwLjAwCi11bnNwc2M3IzU1LjExLjE1LjExLjAwI01vdGlvbiBwaWN0dXJlcyBvbiB2aWRlbyB0YXBlIzU1LjExLjE1LjAwLjAwCi11bnNwc2M3IzU1LjExLjE1LjEyLjAwI011c2ljIG9uIHRhcGUgb3IgY29tcGFjdCBkaXNjIzU1LjExLjE1LjAwLjAwCi11bnNwc2M3IzU1LjExLjE2LjAwLjAwI0VsZWN0cm9uaWMgU29mdHdhcmUgcmVmZXJlbmNlIG1hdGVyaWFsIzU1LjExLjAwLjAwLjAwCi11bnNwc2M3IzU1LjExLjE2LjAxLjAwI0VsZWN0cm9uaWMgU29mdHdhcmUgRG9jdW1lbnRhdGlvbiBhbmQgVXNlciBNYW51YWxzIzU1LjExLjE2LjAwLjAwCi11bnNwc2M3IzU1LjEyLjAwLjAwLjAwI1NpZ25hZ2UgYW5kIGFjY2Vzc29yaWVzIzU1LjAwLjAwLjAwLjAwCi11bnNwc2M3IzU1LjEyLjE1LjAwLjAwI1RhZ3MjNTUuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTUuMDEuMDAjTHVnZ2FnZSB0YWdzIzU1LjEyLjE1LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE1LjAyLjAwI1NlY3VyaXR5IHRhZ3MjNTUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTUuMDMuMDAjSWRlbnRpZmljYXRpb24gdGFncyM1NS4xMi4xNS4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNi4wMC4wMCNMYWJlbHMjNTUuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTYuMDEuMDAjTGFiZWwgcmVtb3Zpbmcga2l0cyM1NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNi4wMi4wMCNDbG90aGluZyBsYWJlbHMjNTUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTYuMDMuMDAjUHJlc3N1cmUgc2Vuc2l0aXZlIGxhYmVscyM1NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNi4wNC4wMCNDYW5uaW5nIG9yIGJvdHRsaW5nIGxhYmVscyM1NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNi4wNS4wMCNBZGRyZXNzaW5nIG9yIG1haWxpbmcgbGFiZWxzIzU1LjEyLjE2LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE2LjA2LjAwI1NlbGYgYWRoZXNpdmUgbGFiZWxzIzU1LjEyLjE2LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE2LjA3LjAwI0RlY2FscyM1NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNi4wOC4wMCNCYXIgY29kZSBsYWJlbHMjNTUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTYuMDkuMDAjUGFja2FnaW5nIGxhYmVscyM1NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNi4xMC4wMCNDb25zZWN1dGl2ZWx5IG51bWJlcmVkIGxhYmVscyM1NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNi4xMS4wMCNMYWJlbCBtYWtpbmcgdGFwZXMjNTUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTYuMTIuMDAjUHJpbnRlciBsYWJlbHMjNTUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTYuMTMuMDAjQ29sb3IgY29kaW5nIGxhYmVscyM1NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNi4xNC4wMCNSZW1vdmFibGUgbGFiZWxzIzU1LjEyLjE2LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE2LjE1LjAwI0FkaGVzaXZlIGRvdHMgb3IgYXJyb3dzIzU1LjEyLjE2LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE2LjE2LjAwI1NlbGYgYWRoZXNpdmUgZmxhZ3MjNTUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTcuMDAuMDAjU2lnbmFnZSM1NS4xMi4wMC4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNy4wMS4wMCNNZXRhbGxpYyBuYW1lcGxhdGVzIzU1LjEyLjE3LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE3LjAyLjAwI05vbiBtZXRhbGxpYyBuYW1lcGxhdGVzIzU1LjEyLjE3LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE3LjAzLjAwI0lsbHVtaW5hdGVkIHNpZ25zIzU1LjEyLjE3LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE3LjA0LjAwI1NhZmV0eSBzaWducyM1NS4xMi4xNy4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNy4wNS4wMCNTZWxmIGFkaGVzaXZlIHNpZ25zIzU1LjEyLjE3LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE3LjA2LjAwI0Jhbm5lcnMjNTUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTcuMDcuMDAjTWFnbmV0aWMgc2lnbnMjNTUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTcuMDguMDAjTmVvbiBzaWducyM1NS4xMi4xNy4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNy4wOS4wMCNNb3ZpbmcgbWVzc2FnZSBzaWducyM1NS4xMi4xNy4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNy4xMC4wMCNUcmFmZmljIHNpZ25zIzU1LjEyLjE3LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE3LjExLjAwI0JpbGxib2FyZHMjNTUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTcuMTIuMDAjRGlyZWN0aW9uYWwgc2lnbnMjNTUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTcuMTMuMDAjUG9pbnQgb2YgcHVyY2hhc2Ugc2lnbnMjNTUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTcuMTQuMDAjUGVubmFudHMjNTUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTcuMTUuMDAjRmxhZ3MjNTUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTcuMTYuMDAjV29vZGVuIHNpZ25zIzU1LjEyLjE3LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE3LjE3LjAwI01hcmtlciBwbGF0ZXMjNTUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTcuMTguMDAjSW5mb3JtYXRpb25hbCBzaWducyM1NS4xMi4xNy4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNy4xOS4wMCNTaWduYWxsaW5nIGNvbXBvbmVudHMjNTUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTcuMjAuMDAjRW1ibGVtcyM1NS4xMi4xNy4wMC4wMAotdW5zcHNjNyM1NS4xMi4xNy4yMS4wMCNWaW55bCBsZXR0ZXJzIG9yIG51bWJlcnMjNTUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTcuMjIuMDAjRmxhZ3BvbGVzIzU1LjEyLjE3LjAwLjAwCi11bnNwc2M3IzU1LjEyLjE3LjIzLjAwI1NpZ24gaG9sZGVycyM1NS4xMi4xNy4wMC4wMAotdW5zcHNjNyM1NS4xMi4xOC4wMC4wMCNJZGVudGlmaWNhdGlvbiBkb2N1bWVudHMjNTUuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTguMDEuMDAjQ2FyIHRheCBkaXNjcyM1NS4xMi4xOC4wMC4wMAotdW5zcHNjNyM1NS4xMi4xOC4wMi4wMCNJZGVudGlmaWNhdGlvbiBjYXJkcyM1NS4xMi4xOC4wMC4wMAotdW5zcHNjNyM1NS4xMi4xOC4wMy4wMCNQYXNzcG9ydHMjNTUuMTIuMTguMDAuMDAKLXVuc3BzYzcjNTUuMTIuMTguMDQuMDAjQmFkZ2VzIG9yIGJhZGdlIGhvbGRlcnMjNTUuMTIuMTguMDAuMDAKLXVuc3BzYzcjNTYuMDAuMDAuMDAuMDAjRnVybml0dXJlIGFuZCBGdXJuaXNoaW5ncyM1Ni4wMC4wMC4wMC4wMAotdW5zcHNjNyM1Ni4xMC4wMC4wMC4wMCNBY2NvbW1vZGF0aW9uIGZ1cm5pdHVyZSM1Ni4wMC4wMC4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNS4wMC4wMCNGdXJuaXR1cmUjNTYuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTUuMDEuMDAjU3RhbmRzIzU2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE1LjAyLjAwI1NvZmFzIzU2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE1LjAzLjAwI0NvYXQgcmFja3MjNTYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTUuMDQuMDAjQ2hhaXJzIzU2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE1LjA1LjAwI0VudGVydGFpbm1lbnQgY2VudGVycyM1Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNS4wNi4wMCNGdXRvbnMjNTYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTUuMDcuMDAjQm9va2Nhc2VzIzU2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE1LjA4LjAwI01hdHRyZXNzZXMjNTYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTUuMDkuMDAjRHJlc3NlcnMgb3IgYXJtb2lyZXMjNTYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTUuMTAuMDAjUGFydGl0aW9ucyM1Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNS4xMi4wMCNTdG9vbHMjNTYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTUuMTMuMDAjQ290cyM1Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNS4xNC4wMCNGb290IHN0b29scyM1Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNS4xNS4wMCNCZWRzIzU2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE1LjE2LjAwI0NoZXN0cyM1Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNS4xOC4wMCNXYWxsIHJhY2tzIzU2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE1LjE5LjAwI1RhYmxlcyM1Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNS4yMC4wMCNMb2NrZXJzIzU2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE1LjIxLjAwI0JlZCBoZWFkYm9hcmQgb3IgZm9vdGJvYXJkIzU2LjEwLjE1LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE1LjIyLjAwI0FybSBjaGFpciM1Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNS4yMy4wMCNVbWJyZWxsYSBzdGFuZHMjNTYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTUuMjQuMDAjSXJvbmluZyBib2FyZHMjNTYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTUuMjUuMDAjSXJvbmluZyBib2FyZCBjb3ZlcnMjNTYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTUuMjYuMDAjRnJpZGdlIGJhciM1Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNS4yNy4wMCNIb3VzZWhvbGQgdHlwZSBsaW5lbiBkcmllcnMjNTYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTUuMjguMDAjQXJ0aWZpY2lhbCBwbGFudHMjNTYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTUuMjkuMDAjTWFnYXppbmUgcmFja3MjNTYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTYuMDAuMDAjT3V0ZG9vciBmdXJuaXR1cmUjNTYuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTYuMDEuMDAjT3V0ZG9vciB1bWJyZWxsYXMjNTYuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTYuMDIuMDAjT3V0ZG9vciBjaGFpcnMjNTYuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTYuMDMuMDAjT3V0ZG9vciB0YWJsZXMgb3IgcGljbmljIHRhYmxlcyM1Ni4xMC4xNi4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNi4wNC4wMCNPdXRkb29yIHN3aW5ncyM1Ni4xMC4xNi4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNi4wNS4wMCNPdXRkb29yIGJlbmNoZXMjNTYuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTYuMDYuMDAjRmxvd2VyIHN0YW5kcyM1Ni4xMC4xNi4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNi4wNy4wMCNPdXRzaWRlIGNsb3RoZXMgZHJ5ZXIjNTYuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTcuMDAuMDAjT2ZmaWNlIGZ1cm5pdHVyZSM1Ni4xMC4wMC4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNy4wMS4wMCNDcmVkZW56YXMjNTYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTcuMDIuMDAjRmlsaW5nIGNhYmluZXRzIG9yIGFjY2Vzb3JpZXMjNTYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTcuMDMuMDAjRGVza3MjNTYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTcuMDQuMDAjVGFibGUgYmFzZSM1Ni4xMC4xNy4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNy4wNS4wMCNTaG93Y2FzZXMjNTYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTcuMDYuMDAjQ29uZmVyZW5jaW5nIHRhYmxlcyM1Ni4xMC4xNy4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNy4wNy4wMCNEcmFmdGluZyB0YWJsZXMjNTYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTcuMDguMDAjTW9iaWxlIGZpbGVzIG9yIGVxdWlwbWVudCBjYXJ0cyM1Ni4xMC4xNy4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xNy4wOS4wMCNUYWJsZSB0b3BzIzU2LjEwLjE3LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE4LjAwLjAwI0JhYnkgYW5kIHRvZGRsZXIgZnVybml0dXJlIGFuZCBhY2Nlc3NvcmllcyM1Ni4xMC4wMC4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xOC4wMy4wMCNDYXJyaWFnZXMgb3IgcGVyYW1idWxhdG9ycyBvciBzdHJvbGxlcnMjNTYuMTAuMTguMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTguMDQuMDAjQ3JpYnMgb3IgcGxheXBlbnMjNTYuMTAuMTguMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTguMDUuMDAjQ2FyIHNlYXRzIzU2LjEwLjE4LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE4LjA2LjAwI0hpZ2ggY2hhaXJzIG9yIGFjY2Vzc29yaWVzIzU2LjEwLjE4LjAwLjAwCi11bnNwc2M3IzU2LjEwLjE4LjA3LjAwI0JvdW5jZXIgc2VhdHMgb3IganVtcGVycyM1Ni4xMC4xOC4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xOC4wOC4wMCNTd2luZ3Mgb3IganVtcGVycyBvciBhY2Nlc3NvcmllcyM1Ni4xMC4xOC4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xOC4wOS4wMCNQb3R0eSBzZWF0cyM1Ni4xMC4xOC4wMC4wMAotdW5zcHNjNyM1Ni4xMC4xOC4xMC4wMCNCYWJ5IGJhdGhzIG9yIHR1YnMjNTYuMTAuMTguMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTguMTEuMDAjQmFzc2luZXRzIG9yIGNyYWRsZXMjNTYuMTAuMTguMDAuMDAKLXVuc3BzYzcjNTYuMTAuMTguMTIuMDAjQ2hhbmdpbmcgdGFibGVzIG9yIGFjY2Vzc29yaWVzIzU2LjEwLjE4LjAwLjAwCi11bnNwc2M3IzU2LjExLjAwLjAwLjAwI0NvbW1lcmNpYWwgYW5kIGluZHVzdHJpYWwgZnVybml0dXJlIzU2LjAwLjAwLjAwLjAwCi11bnNwc2M3IzU2LjExLjE1LjAwLjAwI1dvcmtzdGF0aW9ucyBhbmQgb2ZmaWNlIHBhY2thZ2VzIzU2LjExLjAwLjAwLjAwCi11bnNwc2M3IzU2LjExLjE1LjAxLjAwI01vZHVsYXIgcmVjZXB0aW9uIG9mZmljZSBwYWNrYWdlcyM1Ni4xMS4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xNS4wMi4wMCNDYXNlZ29vZCBvciBub24gbW9kdWxhciBleGVjdXRpdmUgb2ZmaWNlIHBhY2thZ2VzIzU2LjExLjE1LjAwLjAwCi11bnNwc2M3IzU2LjExLjE1LjAzLjAwI01vZHVsYXIgZXhlY3V0aXZlIG9mZmljZSBwYWNrYWdlcyM1Ni4xMS4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xNS4wNC4wMCNDYXNlZ29vZCBvciBub24gbW9kdWxhciBtYW5hZ2VyaWFsIG9mZmljZSBwYWNrYWdlcyM1Ni4xMS4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xNS4wNS4wMCNNb2R1bGFyIG1hbmFnZXJpYWwgb2ZmaWNlIHBhY2thZ2VzIzU2LjExLjE1LjAwLjAwCi11bnNwc2M3IzU2LjExLjE1LjA2LjAwI0Nhc2Vnb29kIG9yIG5vbiBtb2R1bGFyIHN0YWZmIG9mZmljZSBwYWNrYWdlcyM1Ni4xMS4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xNS4wNy4wMCNNb2R1bGFyIHN0YWZmIG9mZmljZSBwYWNrYWdlcyM1Ni4xMS4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xNS4wOC4wMCNDYXNlZ29vZCBvciBub24gbW9kdWxhciB0ZWNobmljYWwgb2ZmaWNlIHBhY2thZ2VzIzU2LjExLjE1LjAwLjAwCi11bnNwc2M3IzU2LjExLjE1LjA5LjAwI01vZHVsYXIgdGVjaG5pY2FsIG9mZmljZSBwYWNrYWdlcyM1Ni4xMS4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xNS4xMC4wMCNDYXNlZ29vZCBvciBub24gbW9kdWxhciBjbGVyaWNhbCBvZmZpY2UgcGFja2FnZXMjNTYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTUuMTEuMDAjTW9kdWxhciBjbGVyaWNhbCBvZmZpY2UgcGFja2FnZXMjNTYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTUuMTIuMDAjQ2FzZWdvb2Qgb3Igbm9uIG1vZHVsYXIgcmVjZXB0aW9uIG9mZmljZSBwYWNrYWdlcyM1Ni4xMS4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xNS4xMy4wMCNDb25mZXJlbmNlIG9yIG5vbiBtb2R1bGFyIHJvb20gcGFja2FnZXMjNTYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTYuMDAuMDAjUGFuZWwgc3lzdGVtcyM1Ni4xMS4wMC4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xNi4wMS4wMCNTY3JlZW5zIGZvciBwYW5lbCBzeXN0ZW1zIzU2LjExLjE2LjAwLjAwCi11bnNwc2M3IzU2LjExLjE2LjAyLjAwI1N0b3JhZ2UgZm9yIHBhbmVsIHN5c3RlbXMjNTYuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTYuMDMuMDAjT3JnYW5pemF0aW9uIGZvciBwYW5lbCBzeXN0ZW1zIzU2LjExLjE2LjAwLjAwCi11bnNwc2M3IzU2LjExLjE2LjA0LjAwI1dvcmsgc3VyZmFjZXMgZm9yIHBhbmVsIHN5c3RlbXMjNTYuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTYuMDUuMDAjTGlnaHRpbmcgb3IgcG93ZXIgb3IgZGF0YSBjb21wb25ldHMgZm9yIHBhbmVsIHN5c3RlbXMjNTYuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTYuMDYuMDAjUGFydHMgb3IgYWNjZXNzb3JpZXMgcGFuZWwgc3lzdGVtcyM1Ni4xMS4xNi4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xNy4wMC4wMCNDYXNlZ29vZCBhbmQgbm9uIG1vZHVsYXIgc3lzdGVtcyM1Ni4xMS4wMC4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xNy4wMS4wMCNDYXNlZ29vZCAgb3Igbm9uIG1vZHVsYXIgZGVzayM1Ni4xMS4xNy4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xNy4wMi4wMCNDYXNlZ29vZCBvciBub24gbW9kdWxhciBjcmVkZW56YSM1Ni4xMS4xNy4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xNy4wMy4wMCNDYXNlZ29vZCBvciBub24gbW9kdWxhciBzdG9yYWdlIzU2LjExLjE3LjAwLjAwCi11bnNwc2M3IzU2LjExLjE3LjA0LjAwI0Nhc2Vnb29kIG9yIG5vbiBtb2R1bGFyIG9yZ2FuaXphdGlvbiM1Ni4xMS4xNy4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xNy4wNS4wMCNDYXNlZ29vZCBvciBub24gbW9kdWxhciBsaWdodGluZyBvciBwb3dlciBvciBkYXRhIGNvbXBvbmVudHMjNTYuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTcuMDYuMDAjQ2FzZWdvb2Qgb3Igbm9uIG1vZHVsYXIgcGFydHMgb3IgYWNjZXNzb3JpZXMjNTYuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTguMDAuMDAjRnJlZXN0YW5kaW5nIGZ1cm5pdHVyZSM1Ni4xMS4wMC4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xOC4wMS4wMCNGcmVlc3RhbmRpbmcgbGlnaHRpbmcgb3IgcG93ZXIgb3IgZGF0YSBjb21wb25lbnRzIzU2LjExLjE4LjAwLjAwCi11bnNwc2M3IzU2LjExLjE4LjAyLjAwI0ZyZWVzdGFuZGluZyB0YWJsZXMjNTYuMTEuMTguMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTguMDMuMDAjRnJlZXN0YW5kaW5nIHN0b3JhZ2UjNTYuMTEuMTguMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTguMDQuMDAjRnJlZXN0YW5kaW5nIG9yZ2FuaXphdGlvbiM1Ni4xMS4xOC4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xOC4wNS4wMCNGcmVlc3RhbmRpbmcgcGFydHMgb3IgYWNjZXNzb3JpZXMjNTYuMTEuMTguMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTkuMDAuMDAjSW5kdXN0cmlhbCBmdXJuaXR1cmUjNTYuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTkuMDEuMDAjSW5kdXN0cmlhbCBsaWdodGluZyBvciBwb3dlciBvciBkYXRhIGNvbXBvbmVudHMjNTYuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMTkuMDIuMDAjSW5kdXN0cmlhbCB3b3JrIHN1cmZhY2VzIzU2LjExLjE5LjAwLjAwCi11bnNwc2M3IzU2LjExLjE5LjAzLjAwI0luZHVzdHJpYWwgc3RvcmFnZSB1bml0cyM1Ni4xMS4xOS4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xOS4wNC4wMCNJbmR1c3RyaWFsIG9yZ2FuaXphdGlvbiM1Ni4xMS4xOS4wMC4wMAotdW5zcHNjNyM1Ni4xMS4xOS4wNS4wMCNJbmR1c3RyaWFsIHBhcnRzIG9yIGFjY2Vzc29yaWVzIzU2LjExLjE5LjAwLjAwCi11bnNwc2M3IzU2LjExLjIwLjAwLjAwI0NvbXB1dGVyIHN1cHBvcnQgZnVybml0dXJlIzU2LjExLjAwLjAwLjAwCi11bnNwc2M3IzU2LjExLjIwLjAxLjAwI0NvbXB1dGVyIHN1cHBvcnQgbGlnaHRpbmcgb3IgcG93ZXIgb3IgZGF0YSBjb21wb25lbnRzIzU2LjExLjIwLjAwLjAwCi11bnNwc2M3IzU2LjExLjIwLjAyLjAwI0NvbXB1dGVyIHN1cHBvcnQgd29yayBzdXJmYWNlcyM1Ni4xMS4yMC4wMC4wMAotdW5zcHNjNyM1Ni4xMS4yMC4wMy4wMCNDb21wdXRlciBzdXBwb3J0IHN0b3JhZ2UgYWNjZXNzb3JpZXMjNTYuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMjAuMDQuMDAjQ29tcHV0ZXIgc3VwcG9ydCBvcmdhbml6YXRpb24jNTYuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMjAuMDUuMDAjQ29tcHV0ZXIgc3VwcG9ydCBwYXJ0cyBvciBhY2Nlc3NvcmllcyM1Ni4xMS4yMC4wMC4wMAotdW5zcHNjNyM1Ni4xMS4yMS4wMC4wMCNTZWF0aW5nIzU2LjExLjAwLjAwLjAwCi11bnNwc2M3IzU2LjExLjIxLjAxLjAwI0F1ZGl0b3JpdW0gb3Igc3RhZGl1bSBvciBzcGVjaWFsIHVzZSBzZWF0aW5nIzU2LjExLjIxLjAwLjAwCi11bnNwc2M3IzU2LjExLjIxLjAyLjAwI1Rhc2sgc2VhdGluZyM1Ni4xMS4yMS4wMC4wMAotdW5zcHNjNyM1Ni4xMS4yMS4wMy4wMCNHdWVzdCBzZWF0aW5nIzU2LjExLjIxLjAwLjAwCi11bnNwc2M3IzU2LjExLjIxLjA0LjAwI0V4ZWN1dGl2ZSBzZWF0aW5nIzU2LjExLjIxLjAwLjAwCi11bnNwc2M3IzU2LjExLjIxLjA1LjAwI0xvdW5nZSBzZWF0aW5nIzU2LjExLjIxLjAwLjAwCi11bnNwc2M3IzU2LjExLjIxLjA2LjAwI1N0b29sIHNlYXRpbmcjNTYuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMjEuMDcuMDAjU2VhdGluZyBwYXJ0cyBvciBhY2Nlc3NvcmllcyM1Ni4xMS4yMS4wMC4wMAotdW5zcHNjNyM1Ni4xMS4yMS4wOC4wMCNDb21iaW5hdGlvbiBjaGFpciB3aXRoIGRlc2sjNTYuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNTYuMTEuMjEuMDkuMDAjQmVuY2hlcyM1Ni4xMS4yMS4wMC4wMAotdW5zcHNjNyM1Ni4xMi4wMC4wMC4wMCNDbGFzc3Jvb20gYW5kIGluc3RydWN0aW9uYWwgYW5kIGluc3RpdHV0aW9uYWwgZnVybml0dXJlIGFuZCBmaXh0dXJlcyM1Ni4wMC4wMC4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xMC4wMC4wMCNMaWJyYXJ5IGZ1cm5pc2hpbmdzIzU2LjEyLjAwLjAwLjAwCi11bnNwc2M3IzU2LjEyLjEwLjAxLjAwI0Jvb2sgY2FydHMgb3IgYm9vayB0cnVja3MjNTYuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTAuMDIuMDAjQ2lyY3VsYXRpb24gb3IgbGlicmFyaWFuIGRlc2tzIG9yIGNvbXBvbmVudHMjNTYuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTAuMDMuMDAjQm9vayByZXR1cm5zIzU2LjEyLjEwLjAwLjAwCi11bnNwc2M3IzU2LjEyLjEwLjA0LjAwI0NhcmQgY2F0YWxvZyB1bml0cyM1Ni4xMi4xMC4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xMC4wNS4wMCNEaWN0aW9uYXJ5IHN0YW5kcyM1Ni4xMi4xMC4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xMC4wNi4wMCNVcGhvbHN0ZXJlZCBiZW5jaGVzIzU2LjEyLjEwLjAwLjAwCi11bnNwc2M3IzU2LjEyLjEwLjA3LjAwI1B1YmxpYyBhY2Nlc3MgdGFibGVzIzU2LjEyLjEwLjAwLjAwCi11bnNwc2M3IzU2LjEyLjEwLjA4LjAwI0Jvb2sgYnJvd3NlciB1bml0cyM1Ni4xMi4xMC4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xMC4wOS4wMCNTbG9wZWQgcmVhZGluZyB0YWJsZXMjNTYuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTAuMTAuMDAjQm9vayBraW9za3MjNTYuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTAuMTEuMDAjTGlicmFyeSBjb21wYWN0IGRpc2Mgb3IgYXVkaW8gY2Fzc2V0dGUgZGlzcGxheWVycyM1Ni4xMi4xMC4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xMC4xMi4wMCNSb3RhcnkgaXNsYW5kIHN0YW5kcyM1Ni4xMi4xMC4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xMC4xNC4wMCNIYW5nIHVwIGJhZyByYWNrcyBvciBiYWdzIzU2LjEyLjEwLjAwLjAwCi11bnNwc2M3IzU2LjEyLjExLjAwLjAwI0FydCBjbGFzc3Jvb20gZnVybmlzaGluZ3MjNTYuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTEuMDEuMDAjQXJ0IGhvcnNlIzU2LjEyLjExLjAwLjAwCi11bnNwc2M3IzU2LjEyLjExLjAyLjAwI0FydCBzdHVkZW50IGJlbmNoIzU2LjEyLjExLjAwLjAwCi11bnNwc2M3IzU2LjEyLjEyLjAwLjAwI0ZpcnN0IGFpZCByb29tIGZ1cm5pc2hpbmdzIzU2LjEyLjAwLjAwLjAwCi11bnNwc2M3IzU2LjEyLjEyLjAxLjAwI0ZpcnN0IGFpZCBjb3VjaGVzIzU2LjEyLjEyLjAwLjAwCi11bnNwc2M3IzU2LjEyLjEzLjAwLjAwI0dlbmVyYWwgZWR1Y2F0aW9uYWwgZmFjaWxpdHkgZml4dHVyZXMjNTYuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTMuMDEuMDAjU3RhbmRpbmcgcmlzZXJzIzU2LjEyLjEzLjAwLjAwCi11bnNwc2M3IzU2LjEyLjEzLjAyLjAwI1RhYmxlIG9yIGNoYWlyIG1vdmVycyBvciBjYWRkeXMjNTYuMTIuMTMuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTMuMDMuMDAjUnViYmVyIGJydXNoIGZsb29yIG1hdHRpbmcjNTYuMTIuMTMuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTMuMDQuMDAjUGxhbm5pbmcgdGFibGVzIzU2LjEyLjEzLjAwLjAwCi11bnNwc2M3IzU2LjEyLjE0LjAwLjAwI0NhZmV0ZXJpYSBhbmQgbHVuY2hyb29tIGZ1cm5pc2hpbmdzIzU2LjEyLjAwLjAwLjAwCi11bnNwc2M3IzU2LjEyLjE0LjAxLjAwI01vYmlsZSBiZW5jaCB0YWJsZXMjNTYuMTIuMTQuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTQuMDIuMDAjTW9iaWxlIHN0b29sIHRhYmxlcyM1Ni4xMi4xNC4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xNC4wMy4wMCNNb2JpbGUgdGFibGVzIzU2LjEyLjE0LjAwLjAwCi11bnNwc2M3IzU2LjEyLjE1LjAwLjAwI0dlbmVyYWwgY2xhc3Nyb29tIGZ1cm5pc2hpbmdzIzU2LjEyLjAwLjAwLjAwCi11bnNwc2M3IzU2LjEyLjE1LjAxLjAwI0FjdGl2aXR5IHRhYmxlcyM1Ni4xMi4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xNS4wMi4wMCNDbGFzc3Jvb20gY2hhaXJzIzU2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzU2LjEyLjE1LjAzLjAwI0NsYXNzcm9vbSBiZW5jaGVzIzU2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzU2LjEyLjE1LjA0LjAwI0NsYXNyb29tIHN0b29scyM1Ni4xMi4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xNS4wNS4wMCNDbGFzc3Jvb20gdGFibGVzIzU2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzU2LjEyLjE1LjA2LjAwI1N0dWRlbnQgZGVza3MjNTYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTUuMDcuMDAjU3R1ZHkgY2FycmVscyM1Ni4xMi4xNS4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xNS4wOC4wMCNTdHVkZW50IGNvbXB1dGVyIGRlc2tzIzU2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzU2LjEyLjE1LjA5LjAwI1N0dWRlbnQgY29tcHV0ZXIgdGFibGVzIzU2LjEyLjE1LjAwLjAwCi11bnNwc2M3IzU2LjEyLjE2LjAwLjAwI0NyZWF0aXZlIHBsYXkgYW5kIHJlc3QgdGltZSBmdXJuaXNoaW5ncyBmb3IgZGF5Y2FyZSBhbmQgZWFybHkgY2hpbGRob29kIGZhY2lsaXRpZXMjNTYuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTYuMDEuMDAjVG9kZGxlciBvciBjaGlsZCBzaXplIGxpdmluZyByb29tIHNldHMjNTYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTYuMDIuMDAjVG9kZGxlciBvciBjaGlsZCBzaXplIHNvZmFzIzU2LjEyLjE2LjAwLjAwCi11bnNwc2M3IzU2LjEyLjE2LjAzLjAwI1RvZGRsZXIgb3IgY2hpbGQgc2l6ZSBlYXN5IGNoYWlycyM1Ni4xMi4xNi4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xNi4wNC4wMCNUb2RkbGVyIG9yIGNoaWxkIHNpemUgYmVhbiBiYWcgY2hhaXJzIzU2LjEyLjE2LjAwLjAwCi11bnNwc2M3IzU2LjEyLjE2LjA1LjAwI0xvdyByaXNlIHJvb20gZGl2aWRlcnMgb3IgcGxheSBwYW5lbHMjNTYuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTYuMDYuMDAjQ2hpbGRzIHJlc3QgbWF0cyM1Ni4xMi4xNi4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xNi4wNy4wMCNDaGlsZHMgcmVzdCBtYXQgcmFja3Mgb3IgaG9sZGVycyM1Ni4xMi4xNi4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xNi4wOC4wMCNDaGlsZHJlbnMgY290cyM1Ni4xMi4xNi4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xNi4wOS4wMCNDaGlsZHJlbnMgY290IGNhcnJpZXJzIzU2LjEyLjE2LjAwLjAwCi11bnNwc2M3IzU2LjEyLjE2LjEwLjAwI0NoaWxkcmVucyBjb3QgYWN0aXZpdHkgc3lzdGVtcyM1Ni4xMi4xNi4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xNy4wMC4wMCNCb29rIGFuZCBnZW5lcmFsIHN0b3JhZ2UgdW5pdHMgZm9yIGNsYXNzcm9vbXMjNTYuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTcuMDEuMDAjR2VuZXJhbCBzdG9yYWdlIHVuaXRzIzU2LjEyLjE3LjAwLjAwCi11bnNwc2M3IzU2LjEyLjE3LjAyLjAwI0Jvb2sgc3RvcmFnZSB1bml0cyM1Ni4xMi4xNy4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xNy4wMy4wMCNDdWJiaWUgdW5pdHMjNTYuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTcuMDQuMDAjSW5zdGl0dXRpb25hbCBTdG9yYWdlIENhYmluZXRzIzU2LjEyLjE3LjAwLjAwCi11bnNwc2M3IzU2LjEyLjE4LjAwLjAwI1ZvY2F0aW9uYWwgY2xhc3Nyb29tIGZ1cm5pc2hpbmdzIGFuZCBmaXh0dXJlcyM1Ni4xMi4wMC4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xOC4wMS4wMCNUZWNobmljYWwgZWR1Y2F0aW9uIHRvb2wgc3RvcmFnZSBjYWJpbmV0cyBvciBjYWJpbmV0cyB3aXRoIHRvb2xzIzU2LjEyLjE4LjAwLjAwCi11bnNwc2M3IzU2LjEyLjE4LjAyLjAwI0dlbmVyYWwgc2hvcCB0b29sIHN0b3JhZ2UgY2FiaW5ldHMgb3IgY2FiaW5ldHMgd2l0aCB0b29scyM1Ni4xMi4xOC4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xOC4wMy4wMCNXb3Jkd29ya2luZyB0b29sIHN0b3JhZ2UgY2FiaW5ldHMgb3IgY2FiaW5ldHMgd2l0aCB0b29scyM1Ni4xMi4xOC4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xOC4wNC4wMCNJbnN0cnVjdG9ycyB0ZWNobmljYWwgZGVzayM1Ni4xMi4xOC4wMC4wMAotdW5zcHNjNyM1Ni4xMi4xOC4wNS4wMCNGbGF0IGZpbGVzIzU2LjEyLjE4LjAwLjAwCi11bnNwc2M3IzU2LjEyLjE5LjAwLjAwI0RlbW9uc3RyYXRpb24gZnVybmlzaGluZ3MjNTYuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMTkuMDEuMDAjU2V3aW5nIG1hY2hpbmUgZGVtb25zdHJhdG9yIHRhYmxlcyM1Ni4xMi4xOS4wMC4wMAotdW5zcHNjNyM1Ni4xMi4yMC4wMC4wMCNMYWJvcmF0b3J5IGZ1cm5pdHVyZSM1Ni4xMi4wMC4wMC4wMAotdW5zcHNjNyM1Ni4xMi4yMC4wMS4wMCNMYWJvcmF0b3J5IGJlbmNoZXMjNTYuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNTYuMTIuMjAuMDIuMDAjTGFib3JhdG9yeSBzdG9yYWdlIHVuaXRzIG9yIGFjY2Vzc29yaWVzIzU2LjEyLjIwLjAwLjAwCi11bnNwc2M3IzU2LjEyLjIwLjAzLjAwI0xhYm9yYXRvcnkgd29ya3N0YXRpb25zIzU2LjEyLjIwLjAwLjAwCi11bnNwc2M3IzYwLjAwLjAwLjAwLjAwI011c2ljYWwgSW5zdHJ1bWVudHMgYW5kIEdhbWVzIGFuZCBUb3lzIGFuZCBBcnRzIGFuZCBDcmFmdHMgYW5kIEVkdWNhdGlvbmFsIEVxdWlwbWVudCBhbmQgTWF0ZXJpYWxzIGFuZCBBY2Nlc3NvcmllcyBhbmQgU3VwcGxpZXMjNjAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMDAuMDAuMDAjRGV2ZWxvcG1lbnRhbCBhbmQgcHJvZmVzc2lvbmFsIHRlYWNoaW5nIGFpZHMgYW5kIG1hdGVyaWFscyBhbmQgYWNjZXNzb3JpZXMgYW5kIHN1cHBsaWVzIzYwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEwLjAwLjAwI01hdGgga2l0cyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMC4wMS4wMCNBZGRpdGlvbiBtYXRoIGtpdHMjNjAuMTAuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTAuMDIuMDAjRGl2aXNpb24gbWF0aCBraXRzIzYwLjEwLjEwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEwLjAzLjAwI0ZyYWN0aW9uIG1hdGgga2l0cyM2MC4xMC4xMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMC4wNC4wMCNNaWRkbGUgU2Nob29sIG1hdGgga2l0cyM2MC4xMC4xMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMC4wNS4wMCNFYXJseSBjaGlsZGhvb2QgbWF0aCBraXRzIzYwLjEwLjEwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEwLjA2LjAwI01lYXN1cmVtZW50IG1hdGgga2l0cyM2MC4xMC4xMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMC4wNy4wMCNNdWx0aXBsaWNhdGlvbiBtYXRoIGtpdHMjNjAuMTAuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTAuMDguMDAjRWxlbWVudGFyeSBtYXRoIGtpdHMjNjAuMTAuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTAuMDkuMDAjU3VidHJhY3Rpb24gbWF0aCBraXRzIzYwLjEwLjEwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEwLjEwLjAwI0hpZ2ggc2Nob29sIG1hdGgga2l0cyM2MC4xMC4xMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMS4wMC4wMCNFbGVjdHJvbmljIGxlYXJuaW5nIGFpZHMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTEuMDEuMDAjRWxlY3Ryb25pYyBjYXJkIHJlYWRlcnMjNjAuMTAuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTEuMDIuMDAjQ3VycmljdWx1bSBiYXNlZCBlbGVjdHJvbmljIGxlYXJuaW5nIGFpZHMjNjAuMTAuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTEuMDMuMDAjRWxlY3Ryb25pYyBnbG9iZXMjNjAuMTAuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTEuMDQuMDAjRWxlY3Ryb25pYyBxdWl6IG1hY2hpbmVzIzYwLjEwLjExLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEyLjAwLjAwI0VkdWNhdGlvbmFsIGluY2VudGl2ZXMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTIuMDEuMDAjQmlibGUgYmFzZWQgY2hhcnQgc3RpY2tlcnMjNjAuMTAuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTIuMDIuMDAjQmlibGUgYmFzZWQgaW5jZW50aXZlIGNoYXJ0cyM2MC4xMC4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMi4wMy4wMCNJbmNlbnRpdmUgY2hhcnQgc3RpY2tlcnMjNjAuMTAuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTIuMDQuMDAjSW5jZW50aXZlIGNoYXJ0cyM2MC4xMC4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMi4wNS4wMCNJbmNlbnRpdmUgcHVuY2hjYXJkcyM2MC4xMC4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMy4wMC4wMCNFZHVjYXRpb25hbCBzdGlja2VycyBhbmQgc3VwcGxpZXMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTMuMDEuMDAjQmlibGUgYmFzZWQgc3RpY2tlcnMjNjAuMTAuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTMuMDIuMDAjR2lhbnQgc3RpY2tlcnMjNjAuMTAuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTMuMDMuMDAjTm90YXJ5IHNlYWwgc3RpY2tlcnMjNjAuMTAuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTMuMDQuMDAjUGhvdG8gc3RpY2tlcnMjNjAuMTAuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTMuMDUuMDAjUmV3YXJkIHN0aWNrZXJzIzYwLjEwLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEzLjA2LjAwI1NjZW50ZWQgc3RpY2tlcnMjNjAuMTAuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTMuMDcuMDAjU2hhcGUgc3RpY2tlcnMjNjAuMTAuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTMuMDguMDAjU3BhcmtsZSBzdGlja2VycyM2MC4xMC4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMy4wOS4wMCNSZXdhcmQgc3RhciBzdGlja2VycyM2MC4xMC4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMy4xMC4wMCNTdGlja2VyIGFzc29ydG1lbnRzIzYwLjEwLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEzLjExLjAwI1N0aWNrZXIgYm9va3MjNjAuMTAuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTMuMTIuMDAjU3RpY2tlciBib3hlcyM2MC4xMC4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMy4xMy4wMCNUYXR0b28gc3RpY2tlcnMjNjAuMTAuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTMuMTQuMDAjQWRkaXRpb24gZmxhc2ggY2FyZHMjNjAuMTAuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTMuMTUuMDAjQWxsIGZhY3RzIGZsYXNoIGNhcmRzIzYwLjEwLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEzLjE2LjAwI0JsYW5rIGZsYXNoIGNhcmRzIzYwLjEwLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEzLjE3LjAwI0RpdmlzaW9uIGZsYXNoIGNhcmRzIzYwLjEwLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEzLjE4LjAwI0VsZWN0cm9uaWMgZmxhc2ggY2FyZHMjNjAuMTAuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTMuMTkuMDAjRXF1aXZhbGVudCBmbGFzaCBjYXJkcyM2MC4xMC4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMy4yMC4wMCNGcmFjdGlvbiBmbGFzaCBjYXJkcyM2MC4xMC4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMy4yMS4wMCNHcmVhdGVyIHRoYW4gb3IgbGVzcyB0aGFuIGZsYXNoIGNhcmRzIzYwLjEwLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEzLjIyLjAwI011bHRpcGxpY2F0aW9uIGZsYXNoIGNhcmRzIzYwLjEwLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEzLjIzLjAwI1N1YnRyYWN0aW9uIGZsYXNoIGNhcmRzIzYwLjEwLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEzLjI0LjAwI0FscGhhYmV0IGZsYXNoIGNhcmRzIzYwLjEwLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEzLjI1LjAwI1dvcmQgYnVpbGRpbmcgZmxhc2ggY2FyZHMjNjAuMTAuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTMuMjYuMDAjUGhvbmljcyBmbGFzaCBjYXJkcyM2MC4xMC4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMy4yNy4wMCNIYW5kd3JpdGluZyBvciB3cml0aW5nIGZsYXNoIGNhcmRzIzYwLjEwLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEzLjI4LjAwI051bWJlciBjbGFzaCBjYXJkcyM2MC4xMC4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMy4yOS4wMCNNb25leSBmbGFzaCBjYXJkcyM2MC4xMC4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xMy4zMC4wMCNUaW1lIGZsYXNoIGNhcmRzIzYwLjEwLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjEzLjMxLjAwI1N0YXRlIGZsYXNoIGNhcmRzIzYwLjEwLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjE0LjAwLjAwI0NsYXNzcm9vbSBhd2FyZHMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTQuMDEuMDAjQmFkZ2VzIzYwLjEwLjE0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE0LjAyLjAwI0F3YXJkIGJ1dHRvbnMjNjAuMTAuMTQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTQuMDMuMDAjQ2VsZWJyYXRpb24gY3Jvd25zIzYwLjEwLjE0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE0LjA0LjAwI1Jld2FyZCBqZXdsZXJ5IzYwLjEwLjE0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE0LjA1LjAwI0NsYXNzcm9vbSByaWJib25zIG9yIHJvc2V0dGVzIzYwLjEwLjE0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE2LjAwLjAwI0VkdWNhdGlvbmFsIGNlcnRpZmljYXRlcyBvciBkaXBsb21hcyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNi4wMS4wMCNCaWJsZSBiYXNlZCBjZXJ0aWZpY2F0ZXMjNjAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTYuMDIuMDAjQmxhbmsgY2VydGlmaWNhdGVzIzYwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE2LjAzLjAwI0NlcnRpZmljYXRlIGZyYW1lcyM2MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNi4wNC4wMCNDZXJ0aWZpY2F0ZSBob2xkZXJzIzYwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE2LjA1LjAwI0NlcnRpZmljYXRlIHJpYmJvbnMjNjAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTYuMDYuMDAjRGlwbG9tYXMjNjAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTYuMDcuMDAjRm9yZWlnbiBsYW5ndWFnZSBjZXJ0aWZpY2F0ZXMjNjAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTYuMDguMDAjR2VuZXJhbCBwcmFpc2UgY2VydGlmaWNhdGVzIzYwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE2LjA5LjAwI0dyYWRlIHNwZWNpZmljIGNlcnRpZmljYXRlcyM2MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNi4xMC4wMCNTdWJqZWN0IHNwZWNpZmljIGNlcnRpZmljYXRlcyM2MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNy4wMC4wMCNUZWFjaGVyIHJlc291cmNlIG1hdGVyaWFscyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNy4wMS4wMCNBc3Nlc3NtZW50IHJlc291cmNlIGJvb2tzIzYwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE3LjAyLjAwI0NhbGVuZGFycyBvciBjdXQgb3V0cyM2MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNy4wMy4wMCNDaGFyYWN0ZXIgZWR1Y2F0aW9uIHJlc291cmNlIG1hdGVyaWFscyM2MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNy4wNC4wMCNDbGFzc3Jvb20gYWN0aXZpdHkgYm9va3MjNjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTcuMDUuMDAjQ3JpdGljYWwgdGhpbmtpbmcgcmVzb3VyY2UgbWF0ZXJpYWxzIzYwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE3LjA2LjAwI0Nyb3NzIGN1cnJpY3VsdW0gZ3VpZGVzIzYwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE3LjA3LjAwI0N1cnJpY3VsdW0gZ3VpZGVzIzYwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE3LjA4LjAwI0ZhYnJpYyBjaGFydHMjNjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTcuMDkuMDAjRmxhbm5lbCBib2FyZCBhaWRzIzYwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE3LjEwLjAwI0VkdWNhdG9yIGdpZnRzIzYwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE3LjExLjAwI0dyYWRpbmcgc3RhbXBzIzYwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE3LjEyLjAwI0hhbGwgcGFzc2VzIzYwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE3LjEzLjAwI0hvbWUgZWR1Y2F0aW9uIHJlc291cmNlIG1hdGVyaWFscyM2MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNy4xNC4wMCNIb21ld29yayBhc3NpZ25tZW50IHJlc291cmNlcyM2MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNy4xNS4wMCNJZGVhIGJvb2tzIzYwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE3LjE2LjAwI01hZ25ldGljIGJvYXJkIGFpZHMjNjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTcuMTcuMDAjTmFtZSBwbGF0ZXMgb3IgdGFncyM2MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNy4xOC4wMCNUZWFjaGVyIHBsYW4gYm9va3MjNjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTcuMTkuMDAjUG9ja2V0IGNoYXJ0cyM2MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNy4yMC4wMCNUZWFjaGVyIGNvbW11bmljYXRpb24gcG9zdGNhcmRzIzYwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE3LjIxLjAwI1Byb2Zlc3Npb25hbCB0ZWFjaGVyIHJlc291cmNlIGJvb2tzIzYwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE3LjIyLjAwI1RlYWNoZXIgY2xhc3Nyb29tIGdyYWRpbmcgYm9va3MjNjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTcuMjMuMDAjQ2xhc3Nyb29tIHN0dWRlbnQgc2VhdGluZyBjaGFydHMjNjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTcuMjQuMDAjU3Vic3RpdHV0ZSB0ZWFjaGVyIGZvbGRlcnMgb3IgZm9ybXMjNjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTcuMjUuMDAjVGVjaG5vbG9neSBhY3Rpdml0eSBvciByZXNvdXJjZSBib29rcyM2MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4xNy4yNi4wMCNUZWNobm9sb2d5IHJlZmVyZW5jZSBndWlkZXMjNjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTcuMjcuMDAjVGVzdCB0YWtpbmcgcmVzb3VyY2UgbWF0ZXJpYWxzIzYwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE3LjI4LjAwI1RoZW1lIHVuaXQgcmVzb3VyY2UgbWF0ZXJpYWxzIzYwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE3LjI5LjAwI01pZGRsZSBvciBqdW5pb3Igc2Nob29sIHRlYWNoaW5nIGtpdHMjNjAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTcuMzAuMDAjTGFib3JhdG9yeSBtYW51YWxzIzYwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE4LjAwLjAwI0NodXJjaCBzY2hvb2wgZWR1Y2F0aW9uYWwgcmVzb3VyY2VzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjE4LjAxLjAwI0JpYmxlIHJlZmVyZW5jZSBndWlkZXMjNjAuMTAuMTguMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTguMDIuMDAjQmlibGUgYmFzZWQgZHJhbWFzIzYwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE4LjAzLjAwI0JpYmxlIGJhc2VkIHJlc291cmNlIG9yIGFjdGl2aXR5IGJvb2tzIzYwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE4LjA0LjAwI1N1bmRheSBzY2hvb2wgYWN0aXZpdHkgcmVzb3VyY2UgYm9va3MjNjAuMTAuMTguMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTguMDUuMDAjVmFjYXRpb24gYmlibGUgc2Nob29sIHJlc291cmNlcyM2MC4xMC4xOC4wMC4wMAotdW5zcHNjNyM2MC4xMC4xOS4wMC4wMCNBbHBoYWJldCBza2lsbHMgbWF0ZXJpYWxzIGFuZCByZXNvdXJjZXMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTkuMDEuMDAjQWxwaGFiZXQgYWN0aXZpdHkgYm9va3MjNjAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTkuMDIuMDAjQWxwaGFiZXQgY3ViZXMjNjAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTkuMDMuMDAjQWxwaGFiZXQgZGVzayB0YXBlcyM2MC4xMC4xOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4xOS4wNC4wMCNBbHBoYWJldCBraXRzIzYwLjEwLjE5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjE5LjA1LjAwI0FscGhhYmV0IGxldHRlciB0aWxlcyM2MC4xMC4xOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4xOS4wNi4wMCNBbHBoYWJldCBwb3N0ZXIgY2FyZHMjNjAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTkuMDcuMDAjQWxwaGFiZXQgcmVmZXJlbmNlIGd1aWRlcyM2MC4xMC4xOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4xOS4wOC4wMCNBbHBoYWJldCByZXNvdXJjZSBib29rcyM2MC4xMC4xOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4xOS4wOS4wMCNBbHBoYWJldCBzdGFtcHMjNjAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMTkuMTAuMDAjQWxwaGFiZXQgd2FsbCBjYXJkcyM2MC4xMC4xOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4xOS4xMS4wMCNUYWN0aWxlIGFscGhhYmV0cyM2MC4xMC4xOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4yMC4wMC4wMCNXb3JkIGJ1aWxkaW5nIHJlc291cmNlIG1hdGVyaWFscyBhbmQgYWNjZXNzb3JpZXMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjAuMDEuMDAjU3BlZWNoIG1pcnJvciM2MC4xMC4yMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4yMC4wMi4wMCNTcGVsbGluZyByZXNvdXJjZSBtYXRlcmlhbHMjNjAuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjAuMDMuMDAjV29yZCBidWlsZGluZyBhY3Rpdml0eSBib29rcyM2MC4xMC4yMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4yMC4wNC4wMCNXb3JkIGJ1aWxkaW5nIGtpdHMjNjAuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjAuMDUuMDAjV29yZCBidWlsZGluZyByZXNvdXJjZSBib29rcyM2MC4xMC4yMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4yMC4wNi4wMCNXb3JkIGJ1aWxkaW5nIHRpbGVzIzYwLjEwLjIwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjIwLjA3LjAwI1dvcmQgd2FsbHMjNjAuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjEuMDAuMDAjTGFuZ3VhZ2UgYXJ0cyByZXNvdXJjZSBtYXRlcmlhbHMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjEuMDEuMDAjQWRqZWN0aXZlIHJlc291cmNlIGJvb2tzIzYwLjEwLjIxLjAwLjAwCi11bnNwc2M3IzYwLjEwLjIxLjAyLjAwI0FkdmVyYiByZXNvdXJjZSBib29rcyM2MC4xMC4yMS4wMC4wMAotdW5zcHNjNyM2MC4xMC4yMS4wMy4wMCNHcmFtbWFyIHJlc291cmNlIGJvb2tzIzYwLjEwLjIxLjAwLjAwCi11bnNwc2M3IzYwLjEwLjIxLjA0LjAwI05vdW4gcmVzb3VyY2UgYm9va3MjNjAuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjEuMDUuMDAjUHVuY3R1dGF0aW9uIHJlc291cmNlIGJvb2tzIzYwLjEwLjIxLjAwLjAwCi11bnNwc2M3IzYwLjEwLjIxLjA2LjAwI1ZlcmIgcmVzb3VyY2UgYm9va3MjNjAuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjIuMDAuMDAjUGhvbmljcyByZXNvdXJjZSBtYXRlcmlhbHMgYW5kIGFjY2Vzc29yaWVzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjIyLjAxLjAwI1Bob25pY3MgYWN0aXZpdHkgYm9va3MjNjAuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjIuMDIuMDAjUGhvbmljcyBkcmlsbCBjYXJkcyM2MC4xMC4yMi4wMC4wMAotdW5zcHNjNyM2MC4xMC4yMi4wMy4wMCNQaG9uaWNzIGtpdCM2MC4xMC4yMi4wMC4wMAotdW5zcHNjNyM2MC4xMC4yMi4wNC4wMCNQaG9uaWNzIHBpY3R1cmUgY2FyZHMjNjAuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjIuMDUuMDAjUGhvbmljcyByZXNvdXJjZSBib29rcyM2MC4xMC4yMi4wMC4wMAotdW5zcHNjNyM2MC4xMC4yMi4wNi4wMCNQaG9uaWNzIHRpbGVzIzYwLjEwLjIyLjAwLjAwCi11bnNwc2M3IzYwLjEwLjIzLjAwLjAwI1JlYWRpbmcgYm9va3MgYW5kIHJlc291cmNlcyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4yMy4wMS4wMCNSZWFkaW5nIGFjdGl2aXR5IGJvb2tzIzYwLjEwLjIzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjIzLjAyLjAwI0JlZ2lubmluZyByZWFkaW5nIGJvb2tzIzYwLjEwLjIzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjIzLjAzLjAwI0JpYmxlIGJhc2VkIGNoaWxkcmVucyBsaXRlcmF0dXJlIGJvb2tzIzYwLjEwLjIzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjIzLjA0LjAwI0NoaWxkcmVucyBsaXRlcmF0dXJlIGJvb2tzIzYwLjEwLjIzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjIzLjA1LjAwI0NyaXRpY2FsIHJlYWRpbmcgc2tpbGxzIzYwLjEwLjIzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjIzLjA2LjAwI0ZsYW5uZWwgYm9hcmRzIzYwLjEwLjIzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjIzLjA3LjAwI1BvZXRyeSByZXNvdXJjZSBib29rcyM2MC4xMC4yMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4yMy4wOC4wMCNSZWFkaW5nIGNvbXByZWhlbnNpb24gbWF0ZXJpYWxzIzYwLjEwLjIzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjIzLjA5LjAwI1JlYWRpbmcgZGV2ZWxvcG1lbnQgbWF0ZXJpYWxzIG9yIGtpdHMjNjAuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjMuMTAuMDAjUmVhZGluZyByZXNvdXJjZSBib29rcyM2MC4xMC4yMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4yMy4xMS4wMCNSZWFkaW5nIHRoZW1hdGljIHVuaXRzIzYwLjEwLjIzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjIzLjEyLjAwI1ZvY2FidWxhcnkgYWN0aXZpdHkgb3IgcmVzb3VyY2UgYm9va3MjNjAuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjQuMDAuMDAjRWFybHkgbGVhcm5pbmcgbWF0aCBhbmQgY291bnRpbmcgcmVzb3VyY2VzIGFuZCBhY2Nlc3NvcmllcyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNC4wMS4wMCNBYmFjdXMgb3IgY291bnRpbmcgZnJhbWVzIzYwLjEwLjI0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI0LjAyLjAwI0FjdGl2aXR5IG9yIHJlc291cmNlIGJvb2tzIGZvciB3b3JraW5nIHdpdGggZWFybHkgbWF0aCBtYW5pcHVsYXRpdmVzIzYwLjEwLjI0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI0LjAzLjAwI0FjdGl2aXR5IGNhcmRzIGZvciB3b3JraW5nIHdpdGggZWFybHkgbWF0aCBtYW5pcHVsYXRpdmVzIzYwLjEwLjI0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI0LjA0LjAwI0JlYWRzIG9yIGJlYWQgYWN0aXZpdHkgc2V0cyBmb3IgZWFybHkgbWF0aCM2MC4xMC4yNC4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNC4wNS4wMCNDb3VudGVycyBvciBjb3VudGVyIGFjdGl2aXR5IHNldHMgZm9yIGVhcmx5IG1hdGgjNjAuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjQuMDYuMDAjQ291bnRpbmcgb3Igc29ydGluZyB0cmF5cyBvciBib3dscyBmb3IgZWFybHkgbWF0aCM2MC4xMC4yNC4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNC4wNy4wMCNMYWNlcyBvciBsYWNpbmcgc2V0cyBmb3IgZWFybHkgbWF0aCM2MC4xMC4yNC4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNC4wOC4wMCNMaW5raW5nIG1hbmlwdWxhdGl2ZXMgb3IgbGlua2luZyBhY3Rpdml0eSBzZXRzIGZvciBlYXJseSBtYXRoIzYwLjEwLjI0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI0LjA5LjAwI01hdGggZ2FtZSBjaGlwcyBvciB0b2tlbnMjNjAuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjQuMTAuMDAjTnVtYmVyIGNhcmRzIzYwLjEwLjI0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI0LjExLjAwI051bWJlciBmb3JtcyBtb2RlbHMgb3IgYWNjZXNzb3JpZXMjNjAuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjQuMTIuMDAjUGVnYm9hcmRzIGZvciBlYXJseSBtYXRoIzYwLjEwLjI0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI0LjEzLjAwI1BlZ3MgZm9yIGVhcmx5IG1hdGgjNjAuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjQuMTQuMDAjU29ydGluZyBtYW5pcHVsYXRpdmVzIG9yIHNvcnRpbmcgYWN0aXZpdHkgc2V0cyBmb3IgZWFybHkgbWF0aCM2MC4xMC4yNC4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNS4wMC4wMCNCYXNpYyBtYXRoIG9wZXJhdGlvbnMgYW5kIG51bWVyYXRpb24gcmVzb3VyY2VzIGFuZCBtYXRlcmlhbHMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjUuMDEuMDAjQWRkaXRpb24gYWN0aXZpdHkgb3IgcmVzb3VyY2UgYm9va3MjNjAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjUuMDIuMDAjQmFzaWMgb3BlcmF0aW9ucyBtb2RlbHMjNjAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjUuMDMuMDAjQmFzaWMgb3BlcmF0aW9ucyByZWZlcmVuY2UgZ3VpZGVzIzYwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI1LjA0LjAwI0RpdmlzaW9uIGFjdGl2aXR5IG9yIHJlc291cmNlIGJvb2tzIzYwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI1LjA1LjAwI011bHRpcGxpY2F0aW9uIGFjdGl2aXR5IG9yIHJlc291cmNlIGJvb2tzIzYwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI1LjA2LjAwI1N1YnRyYWN0aW9uIGFjdGl2aXR5IG9yIHJlc291cmNlIGJvb2tzIzYwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI1LjA3LjAwI051bWJlciBkZXNrIHRhcGVzIzYwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI1LjA4LjAwI0h1bmRyZWRzIGNoYXJ0cyBvciBib2FyZHMjNjAuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjUuMDkuMDAjSHVuZHJlZHMgbnVtYmVyIHRpbGVzIzYwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI1LjEwLjAwI051bWJlciBraXRzIzYwLjEwLjI1LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI1LjExLjAwI051bWJlciBsaW5lcyM2MC4xMC4yNS4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNS4xMi4wMCNOdW1iZXJhdGlvbiBhY3Rpdml0eSBvciByZXNvdXJjZSBib29rcyM2MC4xMC4yNS4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNS4xMy4wMCNEb21pbm9lcyM2MC4xMC4yNS4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNi4wMC4wMCNQcm9iYWJpbGl0eSBvciBjaGFuY2Ugb3IgZGF0YSBvciBwcm9ibGVtIHNvbHZpbmcgdGVhY2hlciByZXNvdXJjZSBtYXRlcmlhbHMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjYuMDEuMDAjVHdvIHNpZGVkIGNvdW50ZXJzIG9yIHRva2VucyM2MC4xMC4yNi4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNi4wMi4wMCNTcGlubmVycyM2MC4xMC4yNi4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNi4wMy4wMCNEaWNlIHNldHMjNjAuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjYuMDQuMDAjUHJvYmFiaWxpdHkgYWN0aXZpdHkgb3IgcmVzb3VyY2UgYm9va3MjNjAuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjYuMDUuMDAjTG9naWMgYWN0aXZpdHkgb3IgcmVzb3VyY2UgYm9va3MjNjAuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjYuMDYuMDAjQXR0cmlidXRlIGJsb2NrcyM2MC4xMC4yNi4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNi4wNy4wMCNBdHRyaWJ1dGUgYmxvY2tzIGFjdGl2aXR5IGNhcmRzIzYwLjEwLjI2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI2LjA4LjAwI0F0dHJpYnV0ZSBhY3Rpdml0eSBvciByZXNvdXJjZSBib29rcyM2MC4xMC4yNi4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNi4wOS4wMCNHcmFwaGluZyBtYXQjNjAuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjYuMTAuMDAjR3JhcGhpbmcgYWN0aXZpdHkgb3IgcmVzb3VyY2UgYm9va3MjNjAuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjYuMTEuMDAjTG9naWMgZ2FtZXMjNjAuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjYuMTIuMDAjQXR0cmlidXRlIHNldHMgb3Iga2l0cyM2MC4xMC4yNi4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNi4xMy4wMCNQcm9ibGVtIHNvbHZpbmcgYWN0aXZpdHkgb3IgcmVzb3VyY2UgYm9va3MjNjAuMTAuMjYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjYuMTQuMDAjUHJvYmxlbSBzb2x2aW5nIGFjdGl2aXR5IGNhcmRzIzYwLjEwLjI2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI3LjAwLjAwI1BhdHRlcm5pbmcgb3IgbWF0Y2hpbmcgb3Igc3BhdGlhbCBwZXJjZXB0aW9uIG9yIGxvZ2ljYWwgdGhpbmtpbmcgdGVhY2hlciByZXNvdXJjZSBtYXRlcmlhbHMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjcuMDEuMDAjUGF0dGVybiBibG9ja3Mgb3IgcGFycXVldHJ5IGJsb2NrcyBhY3Rpdml0eSBvciByZXNvdXJjZSBib29rcyM2MC4xMC4yNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNy4wMi4wMCNQYXR0ZXJuIGJsb2NrcyM2MC4xMC4yNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNy4wMy4wMCNQYXR0ZXJuIGJsb2NrIGFjdGl2aXR5IG9yIHBhdHRlcm4gY2FyZHMjNjAuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjcuMDQuMDAjUGF0dGVybiBibG9jayBnYW1lcyBvciBhY3Rpdml0eSBzZXRzIzYwLjEwLjI3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI3LjA1LjAwI1BhdHRlcm4gYmxvY2sgc3RpY2tlcnMjNjAuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjcuMDYuMDAjUGF0dGVybiBibG9ja3MgbWlycm9yIzYwLjEwLjI3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI3LjA3LjAwI1BhdHRlcm4gYmxvY2tzIGNoYXJ0cyBvciBwb3N0ZXJzIzYwLjEwLjI3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI3LjA4LjAwI1BhcnF1ZXRyeSBibG9ja3MjNjAuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjcuMDkuMDAjUGFycXVldHJ5IGJsb2NrcyBhY3Rpdml0eSBvciBwYXR0ZXJuIGNhcmRzIzYwLjEwLjI3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI3LjEwLjAwI1BhcnF1ZXRyeSBibG9ja3MgYWN0aXZpdHkgc2V0cyM2MC4xMC4yNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNy4xMS4wMCNUYW5ncmFtcyBhY3Rpdml0eSBvciByZXNvdXJjZSBib29rcyM2MC4xMC4yNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNy4xMi4wMCNUYW5ncmFtIGFjdGl2aXR5IG9yIHBhdHRlcm4gY2FyZHMjNjAuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjcuMTMuMDAjVGFuZ3JhbSBwdXp6bGUgYWN0aXZpdHkgc2V0cyM2MC4xMC4yNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNy4xNC4wMCNUYW5ncmFtcyBwdXp6bGVzIzYwLjEwLjI3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI3LjE1LjAwI1BlbnRvbWlub2VzIGFjdGl2aXR5IGFuZCByZXNvdXJjZSBib29rcyM2MC4xMC4yNy4wMC4wMAotdW5zcHNjNyM2MC4xMC4yNy4xNi4wMCNQZW50b21pbm9lcyBhY3Rpdml0eSBvciBwYXR0ZXJuIGNhcmRzIzYwLjEwLjI3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI3LjE3LjAwI1BlbnRvbWlub2VzIzYwLjEwLjI3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI3LjE4LjAwI1BlbnRvbWlub2VzIGFjdGl2aXR5IHNldHMjNjAuMTAuMjcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjguMDAuMDAjQmFzZSB0ZW4gYW5kIHBsYWNlIHZhbHVlIHRlYWNoZXIgcmVzb3VyY2UgbWF0ZXJpYWxzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjI4LjAxLjAwI0Jhc2UgdGVuIGJsb2NrcyM2MC4xMC4yOC4wMC4wMAotdW5zcHNjNyM2MC4xMC4yOC4wMi4wMCNCYXNlIHRlbiBvciBwbGFjZSB2YWx1ZSBhY3Rpdml0eSBvciByZXNvdXJjZSBib29rcyM2MC4xMC4yOC4wMC4wMAotdW5zcHNjNyM2MC4xMC4yOC4wMy4wMCNCYXNlIHRlbiBvciBwbGFjZSB2YWx1ZSBhY3Rpdml0eSBjYXJkcyM2MC4xMC4yOC4wMC4wMAotdW5zcHNjNyM2MC4xMC4yOC4wNC4wMCNCYXNlIHRlbiBydWJiZXIgc3RhbXBzIzYwLjEwLjI4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI4LjA1LjAwI1BsYWNlIHZhbHVlIGdyaWRzIzYwLjEwLjI4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI4LjA2LjAwI1BsYWNlIHZhbHVlIGdhbWVzIG9yIGFjdGl2aXR5IHNldHMjNjAuMTAuMjguMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjguMDcuMDAjUGxhY2UgdmFsdWUgbW9kZWxzIG9yIGFjY2Vzc29yaWVzIzYwLjEwLjI4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI5LjAwLjAwI01vbmV5IGFuZCB0aW1lIHRlYWNoZXIgcmVzb3VyY2UgbWF0ZXJpYWxzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjI5LjAxLjAwI01vbmV5IGFjdGl2aXR5IG9yIHJlc291cmNlIGJvb2tzIzYwLjEwLjI5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI5LjAyLjAwI0J1bGsgYmlsbHMgZm9yIHRoZSBjbGFzc3Jvb20jNjAuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjkuMDMuMDAjQnVsayBjb2lucyBmb3IgdGhlIGNsYXNzcm9vbSM2MC4xMC4yOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4yOS4wNC4wMCNDb2luIGN1YmVzIG9yIGRpY2UjNjAuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjkuMDUuMDAjTWFnbmV0aWMgbW9uZXkjNjAuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjkuMDYuMDAjT3ZlcmhlYWQgYmlsbHMjNjAuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjkuMDcuMDAjT3ZlcmhlYWQgY29pbnMjNjAuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjkuMDguMDAjTW9uZXkgcHV6emxlcyM2MC4xMC4yOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4yOS4wOS4wMCNNb25leSBydWJiZXIgc3RhbXBzIzYwLjEwLjI5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI5LjEwLjAwI0NvaW4gYmFuayM2MC4xMC4yOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4yOS4xMS4wMCNNb25leSBnYW1lcyBvciBraXRzIzYwLjEwLjI5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI5LjEyLjAwI1BsYXkgY2FzaCByZWdpc3RlcnMjNjAuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjkuMTMuMDAjTW9uZXkgcmVmZXJlbmNlIGd1aWRlcyM2MC4xMC4yOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4yOS4xNC4wMCNUaW1lIGFjdGl2aXR5IG9yIHJlc291cmNlIGJvb2tzIzYwLjEwLjI5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjI5LjE1LjAwI1RpbWUgcnViYmVyIHN0YW1wcyM2MC4xMC4yOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4yOS4xNi4wMCNUaW1lIGtpdHMjNjAuMTAuMjkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMjkuMTcuMDAjVGltZSByZWZlcmVuY2UgZ3VpZGVzIzYwLjEwLjI5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjMwLjAwLjAwI0ZyYWN0aW9ucyBhbmQgcGVudG9taW5vZXMgYW5kIGRlY2ltYWxzIHRlYWNoaW5nIGFpZHMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzAuMDEuMDAjRnJhY3Rpb24gY2lyY2xlcyBvciBzcXVhcmVzIzYwLjEwLjMwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjMwLjAyLjAwI0RlY2ltYWwgc3F1YXJlcyM2MC4xMC4zMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zMC4wMy4wMCNGcmFjdGlvbiBhY3Rpdml0eSBib29rcyM2MC4xMC4zMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zMC4wNC4wMCNGcmFjdGlvbiBiYXJzIzYwLjEwLjMwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjMwLjA1LjAwI0ZyYWN0aW9uIGNoYXJ0cyM2MC4xMC4zMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zMC4wNi4wMCNGcmFjdGlvbiBkaWNlIzYwLjEwLjMwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjMwLjA3LjAwI0ZyYWN0aW9uIGdhbWVzIzYwLjEwLjMwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjMwLjA4LjAwI0ZyYWN0aW9uIGtpdHMjNjAuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzAuMDkuMDAjRnJhY3Rpb24gdGlsZXMjNjAuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzAuMTAuMDAjRnJhY3Rpb25zIGRpc2NzIzYwLjEwLjMwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjMwLjEyLjAwI1BlbnRvbWlub2VzIGFjdGl2aXR5IGJvb2sjNjAuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzAuMTMuMDAjUGVudG9taW5vZXMgcGF0dGVybiBjYXJkcyM2MC4xMC4zMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zMS4wMC4wMCNHZW9tZXRyeSB0ZWFjaGVyIHJlc291cmNlIG1hdGVyaWFscyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zMS4wMS4wMCNHZW9tZXRyeSBhY3Rpdml0eSBvciByZXNvdXJjZSBib29rcyM2MC4xMC4zMS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zMS4wMi4wMCNHZW9tZXRyeSBjaGFydHMgb3IgcG9zdGVycyM2MC4xMC4zMS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zMS4wMy4wMCNHZW9ib2FyZHMjNjAuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzEuMDQuMDAjR2VvbWV0cmljIGNvbnN0cnVjdGlvbiBzZXRzIzYwLjEwLjMxLjAwLjAwCi11bnNwc2M3IzYwLjEwLjMxLjA1LjAwI0RvdWJsZSBzaWRlZCBnZW9ib2FyZHMjNjAuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzEuMDYuMDAjR2VvYm9hcmQgZ2FtZXMgb3IgYWN0aXZpdHkga2l0cyM2MC4xMC4zMS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zMS4wNy4wMCNHZW9ib2FyZCBydWJiZXIgYmFuZHMjNjAuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzEuMDguMDAjR2VvYm9hcmRzIGFjdGl2aXR5IGNhcmRzIzYwLjEwLjMxLjAwLjAwCi11bnNwc2M3IzYwLjEwLjMxLjA5LjAwI0dlb21ldHJpYyBjaGFsa2JvYXJkIGRyYXdpbmcgaW5zdHJ1bWVudHMjNjAuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzEuMTAuMDAjR2VvbWV0cnkgcmVmZXJlbmNlIGd1aWRlcyM2MC4xMC4zMS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zMS4xMS4wMCNHZW9NaXJyb3IjNjAuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzEuMTIuMDAjR2VvbWV0cmljIHNvbGlkcyBtb2RlbHMjNjAuMTAuMzEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzIuMDAuMDAjQWxnZWJyYSB0ZWFjaGVyIHJlc291cmNlIG1hdGVyaWFscyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zMi4wMS4wMCNBbGdlYnJhIGFjdGl2aXR5IG9yIHJlc291cmNlIGJvb2tzIzYwLjEwLjMyLjAwLjAwCi11bnNwc2M3IzYwLjEwLjMyLjAyLjAwI0NlbnRpbWV0ZXIgY3ViZXMjNjAuMTAuMzIuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzIuMDMuMDAjQWxnZWJyYSBvciBwcmUgYWxnZWJyYSByZWZlcmVuY2UgZ3VpZGVzIzYwLjEwLjMyLjAwLjAwCi11bnNwc2M3IzYwLjEwLjMyLjA0LjAwI0FsZ2VicmEgbW9kZWxzIG9yIGFjY2Vzc29yaWVzIzYwLjEwLjMyLjAwLjAwCi11bnNwc2M3IzYwLjEwLjMzLjAwLjAwI1ByZWNhbGN1bHVzIGFuZCBjYWxjdWx1cyB0ZWFjaGVyIHJlc291cmNlIG1hdGVyaWFscyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zMy4wMS4wMCNDYWxjdWx1cyBhY3Rpdml0eSBvciByZXNvdXJjZXMgYm9va3MjNjAuMTAuMzMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzMuMDIuMDAjUHJlY2FsY3VsdXMgb3IgY2FsY3VsdXMgcmVmZXJlbmNlIGd1aWRlcyM2MC4xMC4zMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4zMy4wMy4wMCNQcmVjYWxjdWx1cyBhY3Rpdml0eSBvciByZXNvdXJjZSBib29rcyM2MC4xMC4zMy4wMC4wMAotdW5zcHNjNyM2MC4xMC4zNC4wMC4wMCNHZW9ncmFwaHkgYW5kIG1hcCBza2lsbHMgcmVzb3VyY2VzIGFuZCBhY2Nlc3NvcmllcyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zNC4wMS4wMCNHb2VncmFwaHkgY2hhcnRzIG9yIHBvc3RlcnMjNjAuMTAuMzQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzQuMDIuMDAjQ29udGluZW50cyBhY3Rpdml0eSBvciByZXNvdXJjZSBib29rcyM2MC4xMC4zNC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zNC4wMy4wMCNFbGVjdHJvbmljIHNvY2lhbCBzdHVkaWVzIGxlYXJuaW5nIGFpZHMjNjAuMTAuMzQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzQuMDQuMDAjR2VvZ3JhcGh5IHJlZmVyZW5jZSBndWlkZXMjNjAuMTAuMzQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzQuMDUuMDAjTWFwIHJhY2tzIzYwLjEwLjM0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM0LjA2LjAwI01hcCBzdGVuY2lsIGtpdHMjNjAuMTAuMzQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzQuMDcuMDAjUG9ydGFibGUgd2FsbCBtYXBzIzYwLjEwLjM0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM0LjA4LjAwI0dlb2dyYXBoeSByZXNvdXJjZSBvciBhY3Rpdml0eSBib29rcyM2MC4xMC4zNC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zNS4wMC4wMCNQb2xpdGljYWwgc2NpZW5jZSM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zNS4wMS4wMCNFY29ub21pY3MgYWN0aXZpdHkgb3IgcmVzb3VyY2UgYm9va3MjNjAuMTAuMzUuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzUuMDIuMDAjR292ZXJubWVudCBhY3Rpdml0eSBvciByZXNvdXJjZSBib29rcyM2MC4xMC4zNS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zNS4wMy4wMCNHb3Zlcm5tZW50IHJlZmVyZW5jZSBndWlkZXMjNjAuMTAuMzUuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzUuMDQuMDAjU3RhdGUgdGhlbWUgdW5pdHMjNjAuMTAuMzUuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzYuMDAuMDAjTXVsdGljdWx0dXJhbCBhY3Rpdml0aWVzIGFuZCByZXNvdXJjZXMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzYuMDEuMDAjQW5jaWVudCBjaXZpbGl6YXRpb25zIHJlc291cmNlcyM2MC4xMC4zNi4wMC4wMAotdW5zcHNjNyM2MC4xMC4zNi4wMi4wMCNDdXN0b21zIG9yIHJpdHVhbHMgb3IgdHJhZGl0aW9ucyByZXNvdXJjZXMjNjAuMTAuMzYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzYuMDMuMDAjRXRobmljIGRpdmVyc2l0eSByZXNvdXJjZXMjNjAuMTAuMzYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzYuMDQuMDAjR2VuZWFsb2d5IHJlc291cmNlcyM2MC4xMC4zNi4wMC4wMAotdW5zcHNjNyM2MC4xMC4zNi4wNS4wMCNNdWx0aWN1bHR1cmFsIGhvbGlkYXlzIHJlc291cmNlcyM2MC4xMC4zNi4wMC4wMAotdW5zcHNjNyM2MC4xMC4zNi4wNi4wMCNNdWx0aWN1bHR1cmFsIHRoZW1lIHVuaXRzIzYwLjEwLjM2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM3LjAwLjAwI0ZvcmVpZ24gbGFuZ3VhZ2VzIHJlc291cmNlcyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zNy4wMS4wMCNSZXNvdXJjZXMgZm9yIExlYXJuaW5nIHRvIHNwZWFrIHNwYW5pc2gjNjAuMTAuMzcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzcuMDIuMDAjUmVzb3VyY2VzIGZvciBMZWFybmluZyB0byBzcGVhayBmcmVuY2gjNjAuMTAuMzcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzcuMDMuMDAjUmVzb3VyY2VzIGZvciBMZWFybmluZyB0byBzcGVhayBnZXJtYW4jNjAuMTAuMzcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzcuMDQuMDAjUmVzb3VyY2VzIGZvciBMZWFybmluZyB0byBzcGVhayBlbmdsaXNoIzYwLjEwLjM3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM3LjA1LjAwI1Jlc291cmNlcyBmb3IgTGVhcm5pbmcgdG8gc3BlYWsgbGF0aW4jNjAuMTAuMzcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzcuMDYuMDAjUmVzb3VyY2VzIGZvciBMZWFybmluZyB0byBzcGVhayBpdGFsaWFuIzYwLjEwLjM3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM4LjAwLjAwI0hpc3RvcnkgdGVhY2hpbmcgcmVzb3VyY2VzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjM4LjAxLjAwI0FmcmljYW4gaGlzdG9yeSByZXNvdXJjZSBib29rcyM2MC4xMC4zOC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOC4wMi4wMCNIaXN0b3J5IGNoYXJ0cyBvciBwb3N0ZXJzIzYwLjEwLjM4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM4LjAzLjAwI0V1cm9wZWFuIGhpc3RvcnkgcmVzb3VyY2UgYm9va3MjNjAuMTAuMzguMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzguMDQuMDAjSGlzdG9yaWNhbCBtYXBzIzYwLjEwLjM4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM4LjA1LjAwI0hpc3RvcnkgdGhlbWUgdW5pdHMjNjAuMTAuMzguMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzguMDYuMDAjSGlzdG9yeSBwaG90byBjYXJkcyM2MC4xMC4zOC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOC4wNy4wMCNIaXN0b3J5IHJlc291cmNlIGJvb2tzIzYwLjEwLjM4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM4LjA4LjAwI1dvbWFucyBoaXN0b3J5IHJlc291cmNlcyM2MC4xMC4zOC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOC4wOS4wMCNXb3JsZCBoaXN0b3J5IHJlc291cmNlcyM2MC4xMC4zOC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOS4wMC4wMCNMaXZpbmcgb3JnYW5pc21zIGFuZCBwcmVzZXJ2ZWQgc3BlY2ltZW5zIGFuZCByZWxhdGVkIG1hdGVyaWFscyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOS4wMS4wMCNMaXZlIGFtcGhpYmlhIzYwLjEwLjM5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM5LjAyLjAwI1ByZXNlcnZlZCBhbXBoaWJpYSM2MC4xMC4zOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOS4wMy4wMCNBbXBoaWJpYSBtb2RlbHMjNjAuMTAuMzkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzkuMDQuMDAjRnVuZ2kgY3VsdHVyZXMjNjAuMTAuMzkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzkuMDUuMDAjQ3VsdHVyZSBraXRzIG9yIHN1cHBsaWVzIzYwLjEwLjM5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM5LjA2LjAwI1Byb3Rvem9hbiBjdWx0dXJlcyM2MC4xMC4zOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOS4wNy4wMCNBcXVhcmlhIHBsYW50cyM2MC4xMC4zOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOS4wOC4wMCNUZXJyYXJpdW0gcGxhbnRzIzYwLjEwLjM5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM5LjA5LjAwI0xpdmUgaW52ZXJ0ZWJyYXRlcyM2MC4xMC4zOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOS4xMC4wMCNQcmVzZXJ2ZWQgaW52ZXJ0ZWJyYXRlcyM2MC4xMC4zOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOS4xMS4wMCNMaXZlIHZlcnRlYnJhdGVzIzYwLjEwLjM5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM5LjEyLjAwI1ByZXNlcnZlZCB2ZXJ0ZWJyYXRlcyM2MC4xMC4zOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOS4xMy4wMCNMaXZlIHJlcHRpbGlhIzYwLjEwLjM5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM5LjE0LjAwI1ByZXNlcnZlZCByZXB0aWxsYSM2MC4xMC4zOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOS4xNS4wMCNEaXNzZWN0aW9uIGtpdHMgb3Igc3VwcGxpZXMjNjAuMTAuMzkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzkuMTguMDAjQmlvc3BoZXJlcyM2MC4xMC4zOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOS4xOS4wMCNCaW9sb2d5IGV4cGVyaW1lbnQga2l0cyBvciBzdXBwbGllcyM2MC4xMC4zOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOS4yMC4wMCNTdGFpbmluZyBraXRzIG9yIHN1cHBsaWVzIzYwLjEwLjM5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM5LjIxLjAwI1ByZXNlcnZlZCBsaWZlIGN5Y2xlIHNwZWNpbWVucyM2MC4xMC4zOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOS4yMi4wMCNCaW9sb2d5IHJlZmVyZW5jZSBndWlkZXMjNjAuMTAuMzkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzkuMjMuMDAjU2tlbGV0b24gb3IgYm9uZSBvciBzaGVsbCBzcGVjaW1lbiM2MC4xMC4zOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOS4yNC4wMCNCaW9sb2d5IHJlc291cmNlIG9yIGFjdGl2aXR5IGJvb2tzIzYwLjEwLjM5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM5LjI1LjAwI0Jpb2xvZ3kgc3R1ZHkgb3IgYWN0aXZpdHkga2l0cyM2MC4xMC4zOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOS4yNi4wMCNCaW9sb2d5IGNoYXJ0cyBvciBwb3N0ZXJzIzYwLjEwLjM5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM5LjI3LjAwI1ByZXNlcnZlZCBwbGFudCBib2R5IG9yIG9yZ2FuIHNwZWNpbWVucyM2MC4xMC4zOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOS4yOC4wMCNCaW9sb2d5IGFjdGl2aXR5IG9yIHBob3RvIGNhcmRzIzYwLjEwLjM5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM5LjI5LjAwI1BsYW50IGxpZmUgY3ljbGUgc3BlY2ltZW5zIzYwLjEwLjM5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM5LjMwLjAwI0NvbWJpbmF0aW9uIG9yZ2FuaXNtIHNwZWNpbWVucyM2MC4xMC4zOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOS4zMS4wMCNBbmltYWwgYm9keSBvciBib2R5IHBhcnQgb3Igb3JnYW4gc3BlY2ltZW5zIzYwLjEwLjM5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjM5LjMyLjAwI0Vjb3N5c3RlbSBkaXNwbGF5cyM2MC4xMC4zOS4wMC4wMAotdW5zcHNjNyM2MC4xMC4zOS4zMy4wMCNIdW1hbiBib2R5IG9yIGJvZHkgcGFydCBvciBvcmdhbiBzcGVjaW1lbnMjNjAuMTAuMzkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuMzkuMzQuMDAjVGlzc3VlIGN1bHR1cmVzIzYwLjEwLjM5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQwLjAwLjAwI0Jpb3RlY2hub2xvZ3kgYW5kIGJpbyBjaGVtaXN0cnkgYW5kIGdlbmV0aWNzIGFuZCBtaWNyb2Jpb2xvZ3kgYW5kIHJlbGF0ZWQgbWF0ZXJpYWxzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjQwLjAxLjAwI0Rlb3h5cmlib251Y2xlaWMgYWNpZCBETkEgbW9kZWxzIzYwLjEwLjQwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjQwLjAyLjAwI0Rlb3h5cmlib251Y2xlaWMgYWNpZCBETkEgZXhwZXJpbWVudCBraXRzIzYwLjEwLjQwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjQwLjAzLjAwI0dlbmV0aWMgYm9va3MjNjAuMTAuNDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDAuMDQuMDAjR2VuZXRpYyBraXRzIzYwLjEwLjQwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjQwLjA1LjAwI0JhY3RlcmlhIHRlYWNoaW5nIGtpdHMjNjAuMTAuNDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDAuMDYuMDAjQmFjdGVyaWEgdGVzdGluZyBzdXBwbGllcyM2MC4xMC40MC4wMC4wMAotdW5zcHNjNyM2MC4xMC40MC4wNy4wMCNFbnp5bW9sb2d5IGtpdHMgb3Igc3VwcGxpZXMjNjAuMTAuNDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDAuMDguMDAjUHJvdGVpbiB0ZXN0aW5nIGtpdHMgb3Igc3VwcGxpZXMjNjAuMTAuNDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDEuMDAuMDAjQm9keSBzeXN0ZW1zIGFuZCByZWxhdGVkIG1hdGVyaWFscyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC40MS4wMS4wMCNCb2R5IG1vZGVscyM2MC4xMC40MS4wMC4wMAotdW5zcHNjNyM2MC4xMC40MS4wMi4wMCNDZWxsIG1vZGVscyM2MC4xMC40MS4wMC4wMAotdW5zcHNjNyM2MC4xMC40MS4wMy4wMCNDZWxsIHRlYWNoaW5nIGtpdHMjNjAuMTAuNDEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDEuMDQuMDAjQm9keSBzeXN0ZW1zIHRlYWNoaW5nIGtpdHMjNjAuMTAuNDEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDEuMDUuMDAjQm9keSBzeXN0ZW1zIHRlYWNoaW5nIGFpZHMjNjAuMTAuNDEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDIuMDAuMDAjV2F0ZXIgdGVzdGluZyBhbmQgY29uc2VydmF0aW9uIGFuZCBlY29sb2d5IzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjQyLjAxLjAwI1dhdGVyIHRlc3RpbmcgY2hlbWljYWxzIzYwLjEwLjQyLjAwLjAwCi11bnNwc2M3IzYwLjEwLjQyLjAyLjAwI1dhdGVyIHRlc3RpbmcgYW5kIHNhbXBsaW5nIGtpdHMjNjAuMTAuNDIuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDIuMDMuMDAjV2F0ZXIgbW9kZWxzIzYwLjEwLjQyLjAwLjAwCi11bnNwc2M3IzYwLjEwLjQyLjA0LjAwI1dhdGVyIGVjb2xvZ3kgc3VwcGxpZXMjNjAuMTAuNDIuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDMuMDAuMDAjQXN0cm9ub215IzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjQzLjAxLjAwI0FzdHJvbm9teSBtb2RlbHMjNjAuMTAuNDMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDMuMDIuMDAjQXN0cm9ub215IGNoYXJ0cyM2MC4xMC40My4wMC4wMAotdW5zcHNjNyM2MC4xMC40My4wMy4wMCNBc3Ryb25vbXkgc3R1ZHkga2l0cyM2MC4xMC40My4wMC4wMAotdW5zcHNjNyM2MC4xMC40NC4wMC4wMCNHZW9sb2d5IGFuZCBlYXJ0aCBzY2llbmNlIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ0LjAxLjAwI1JvY2sgc3BlY2ltZW4gc2V0cyM2MC4xMC40NC4wMC4wMAotdW5zcHNjNyM2MC4xMC40NC4wMi4wMCNSb2NrIHNwZWNpbWVucyM2MC4xMC40NC4wMC4wMAotdW5zcHNjNyM2MC4xMC40NC4wMy4wMCNGb3NzaWxzIzYwLjEwLjQ0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ0LjA0LjAwI0xhbmRmb3JtIG1vZGVscyM2MC4xMC40NC4wMC4wMAotdW5zcHNjNyM2MC4xMC40NC4wNS4wMCNGb3NzaWwgbW9kZWxzIzYwLjEwLjQ0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ0LjA2LjAwI0dlb2xvZ3kgdG9vbHMgb3IgZmllbGQjNjAuMTAuNDQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDQuMDcuMDAjU3RyZWFtIHRhYmxlcyM2MC4xMC40NC4wMC4wMAotdW5zcHNjNyM2MC4xMC40NC4wOC4wMCNHZW9sb2d5IHN0dWR5IGtpdHMjNjAuMTAuNDQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDUuMDAuMDAjQ2hlbWlzdHJ5IGFuZCBlbGVjdHJvY2hlbWlzdHJ5IGFuZCBtaWNyb2NoZW1pc3RyeSM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC40NS4wMS4wMCNQZXJpb2RpYyB0YWJsZSBwb3N0ZXJzIG9yIGJvYXJkcyM2MC4xMC40NS4wMC4wMAotdW5zcHNjNyM2MC4xMC40NS4wMi4wMCNDb25zdW1lciBhbmFseXNpcyBraXRzIzYwLjEwLjQ1LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ1LjAzLjAwI0NoZW1pc3RyeSBjbGFzcyBraXRzIzYwLjEwLjQ1LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ1LjA0LjAwI0NoZW1pc3RyeSBkZW1vbnN0cmF0aW9uIGtpdHMjNjAuMTAuNDUuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDUuMDUuMDAjQXRvbWljIG1vZGVscyM2MC4xMC40NS4wMC4wMAotdW5zcHNjNyM2MC4xMC40NS4wNi4wMCNNb2xlY3VsYXIgbW9kZWxzIzYwLjEwLjQ1LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ1LjA3LjAwI0VsZWN0cm9jaGVtaWNhbCBkZW1vbnN0cmF0aW9uIHRvb2xzIzYwLjEwLjQ1LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ1LjA4LjAwI0VsZWN0cm9jaGVtaWNhbCBraXRzIzYwLjEwLjQ1LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ1LjA5LjAwI0Z1ZWwgY2VsbHMjNjAuMTAuNDUuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDUuMTAuMDAjTWljcm9jaGVtaXN0cnkga2l0cyM2MC4xMC40NS4wMC4wMAotdW5zcHNjNyM2MC4xMC40NS4xMS4wMCNNaWNyb2NoZW1pc3RyeSB0b29scyM2MC4xMC40NS4wMC4wMAotdW5zcHNjNyM2MC4xMC40Ni4wMC4wMCNNZWNoYW5pY2FsIHBoeXNpY3MgbWF0ZXJpYWxzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ2LjAxLjAwI0ZvcmNlIHRhYmxlcyM2MC4xMC40Ni4wMC4wMAotdW5zcHNjNyM2MC4xMC40Ni4wMi4wMCNHcmF2aXR5IG1vZGVscyBvciBtb2RlbCBzZXRzIzYwLjEwLjQ2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ2LjA0LjAwI0luY2xpbmVkIHBsYW5lcyM2MC4xMC40Ni4wMC4wMAotdW5zcHNjNyM2MC4xMC40Ni4wNS4wMCNGcmljdGlvbiBhcHBhcmF0dXMjNjAuMTAuNDYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDYuMDYuMDAjUGh5c2ljIGNhcnMjNjAuMTAuNDYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDYuMDcuMDAjUGVuZHVsdW0gYXBwYXJhdHVzIzYwLjEwLjQ2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ2LjA4LjAwI1RvcnF1ZSBhcHBhcmF0dXMjNjAuMTAuNDYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDYuMDkuMDAjUHJvamVjdGlsZSBhcHBhcmF0dXMjNjAuMTAuNDYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDYuMTAuMDAjQWlyIHRhYmxlcyM2MC4xMC40Ni4wMC4wMAotdW5zcHNjNyM2MC4xMC40Ni4xMS4wMCNBaXIgYXBwYXJhdHVzIzYwLjEwLjQ2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ2LjEyLjAwI0xpZ2h0IG9yIHBob3RvIGFwcGFyYXR1cyM2MC4xMC40Ni4wMC4wMAotdW5zcHNjNyM2MC4xMC40Ny4wMC4wMCNFbmVyZ3kgYW5kIHBvd2VyIHBoeXNpY3MgbWF0ZXJpYWxzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ3LjAxLjAwI1NvbGFyIGNvbGxlY3RpbmcgZGV2aWNlcyM2MC4xMC40Ny4wMC4wMAotdW5zcHNjNyM2MC4xMC40Ny4wMi4wMCNTb2xhciBraXRzIzYwLjEwLjQ3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ3LjAzLjAwI0VuZXJneSBkZW1vbnN0cmF0aW9uIGtpdHMjNjAuMTAuNDcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDcuMDQuMDAjRW5lcmd5IGNsYXNzIGtpdHMjNjAuMTAuNDcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDcuMDUuMDAjTWF0dGVyIGRlbW9uc3RyYXRpb24ga2l0cyM2MC4xMC40Ny4wMC4wMAotdW5zcHNjNyM2MC4xMC40Ny4wNi4wMCNNYXR0ZXIgY2xhc3Mga2l0cyM2MC4xMC40Ny4wMC4wMAotdW5zcHNjNyM2MC4xMC40Ny4wNy4wMCNNb25vbWV0ZXJzIzYwLjEwLjQ3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ3LjA4LjAwI0dhcyBkaWZmdXNpb24gYXBwYXJhdHVzIzYwLjEwLjQ3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ4LjAwLjAwI1dhdmUgYW5kIHNvdW5kIHBoeXNpY3MgbWF0ZXJpYWxzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ4LjAxLjAwI1dhdmUgZ2VuZXJhdG9ycyM2MC4xMC40OC4wMC4wMAotdW5zcHNjNyM2MC4xMC40OC4wMi4wMCNXYXZlIHRhbmtzIzYwLjEwLjQ4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ4LjAzLjAwI1dhdmUgc3ByaW5ncyM2MC4xMC40OC4wMC4wMAotdW5zcHNjNyM2MC4xMC40OC4wNC4wMCNXYXZlIGRlbW9uc3RyYXRpb24gc2V0cyM2MC4xMC40OC4wMC4wMAotdW5zcHNjNyM2MC4xMC40OC4wNS4wMCNUdW5pbmcgZm9ya3MjNjAuMTAuNDguMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDguMDYuMDAjRG9wcGxlciBkZW1vbnN0cmF0b3JzIzYwLjEwLjQ4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ4LjA3LjAwI1Jlc29uYW5jZSBhcHBhcmF0dXMjNjAuMTAuNDguMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDguMDguMDAjU291bmQgbWV0ZXJzIzYwLjEwLjQ4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ4LjA5LjAwI1dhdmUgYXBwYXJhdHVzIzYwLjEwLjQ4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ4LjEwLjAwI1NwZWN0cm9zY29wZXMjNjAuMTAuNDguMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDguMTEuMDAjU3BlY3RydW0gY2hhcnRzIzYwLjEwLjQ4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ4LjEyLjAwI0xpZ2h0IGRlbW9uc3RyYXRpb24ga2l0cyM2MC4xMC40OC4wMC4wMAotdW5zcHNjNyM2MC4xMC40OC4xMy4wMCNDb2xvciBjaGFydHMgb3Igc2FtcGxlcyM2MC4xMC40OC4wMC4wMAotdW5zcHNjNyM2MC4xMC40OC4xNC4wMCNSYWRpb21ldGVyIzYwLjEwLjQ4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ4LjE1LjAwI1JlZmxlY3Rpb24gb3IgcmVmcmFjdGlvbiBhcHBhcmF0dXMjNjAuMTAuNDguMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDguMTYuMDAjT3B0aWNzIHNldHMgb3Iga2l0cyM2MC4xMC40OC4wMC4wMAotdW5zcHNjNyM2MC4xMC40OS4wMC4wMCNFbGVjdHJpY2FsIHBoeXNpY3MgbWF0ZXJpYWxzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ5LjAxLjAwI1ZhbiBkZWdyYWZmIGdlbmVyYXRvcnMjNjAuMTAuNDkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDkuMDIuMDAjRWxlY3Ryb3N0YXRpYyBhcHBhcmF0dXMjNjAuMTAuNDkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDkuMDMuMDAjRWxlY3Ryb3N0YXRpYyBraXRzIzYwLjEwLjQ5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ5LjA0LjAwI0VsZWN0cmljaXR5IGtpdHMjNjAuMTAuNDkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDkuMDUuMDAjRWxlY3RyaWNpdHkgZGVtb25zdHJhdGlvbiBib2FyZHMjNjAuMTAuNDkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDkuMDYuMDAjQmF0dGVyeSBraXRzIzYwLjEwLjQ5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ5LjA3LjAwI0hhbmQgaGVsZCBnZW5lcmF0b3JzIzYwLjEwLjQ5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjQ5LjA4LjAwI0VsZWN0cm9tYWduZXRpYyBhcHBhcmF0dXMjNjAuMTAuNDkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNDkuMDkuMDAjTWFnbmV0aXNtIGFwcGFyYXR1cyM2MC4xMC40OS4wMC4wMAotdW5zcHNjNyM2MC4xMC40OS4xMC4wMCNFbGVjdHJvbWFnbmV0cyM2MC4xMC40OS4wMC4wMAotdW5zcHNjNyM2MC4xMC40OS4xMS4wMCNFbGVjdHJpYyBiZWxscyM2MC4xMC40OS4wMC4wMAotdW5zcHNjNyM2MC4xMC40OS4xMi4wMCNFbGVjdHJpYyBsZWFkIHdpcmVzIG9yIGNhYmxlcyM2MC4xMC40OS4wMC4wMAotdW5zcHNjNyM2MC4xMC41MC4wMC4wMCNOdWNsZWFyIHBoeXNpY3MgbWF0ZXJpYWxzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjUwLjAxLjAwI1JhZGlvYWN0aXZpdHkgc2V0cyM2MC4xMC41MC4wMC4wMAotdW5zcHNjNyM2MC4xMC41MC4wMi4wMCNHZWlnZXIgY291bnRlcnMjNjAuMTAuNTAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTAuMDMuMDAjRWxlY3Ryb24gYXBwYXJhdHVzIzYwLjEwLjUwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjUwLjA0LjAwI1JhZGlhdGlvbiB3YXJuaW5nIHNpZ25zIzYwLjEwLjUwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjUwLjA1LjAwI051Y2xlYXIgcGh5c2ljcyB0cmFuc3BhcmVuY2llcyM2MC4xMC41MC4wMC4wMAotdW5zcHNjNyM2MC4xMC41MC4wNi4wMCNOdWNsZWFyIHBoeXNpY3MgY2hhcnRzIzYwLjEwLjUwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjUxLjAwLjAwI1JvY2tldHJ5IGFuZCBmbGlnaHQgbWF0ZXJpYWxzIGFuZCBzdXBwbGllcyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC41MS4wMS4wMCNSb2NrZXQgc2V0cyM2MC4xMC41MS4wMC4wMAotdW5zcHNjNyM2MC4xMC41MS4wMi4wMCNMYXVuY2hpbmcgYXBwYXJhdHVzIzYwLjEwLjUxLjAwLjAwCi11bnNwc2M3IzYwLjEwLjUxLjAzLjAwI0FsdGl0dWRlIG1lYXN1cmluZyBkZXZpY2VzIzYwLjEwLjUxLjAwLjAwCi11bnNwc2M3IzYwLjEwLjUxLjA0LjAwI0FpcnBsYW5lIGtpdHMjNjAuMTAuNTEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTIuMDAuMDAjTGlmZSBza2lsbHMgcmVzb3VyY2VzIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjUyLjAxLjAwI0J1aWxkaW5nIGxpc3RlbmluZyBza2lsbHMgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTIuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTIuMDIuMDAjU3R1ZHkgc2tpbGxzIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjUyLjAwLjAwCi11bnNwc2M3IzYwLjEwLjUyLjAzLjAwI1Rlc3QgcHJlcGFyYXRpb24gaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTIuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTMuMDAuMDAjQ2FyZWVyIGVkdWNhdGlvbiBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC41My4wMS4wMCNDYXJlZXIgZWR1Y2F0aW9uIG9yIHBsYW5uaW5nIG9yIGRlY2lzaW9uIG1ha2luZyBza2lsbHMgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTMuMDIuMDAjQmFzaWMgam9iIHNraWxscyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41My4wMC4wMAotdW5zcHNjNyM2MC4xMC41My4wMy4wMCNKb2Igc2VhcmNoIHNraWxscyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41My4wMC4wMAotdW5zcHNjNyM2MC4xMC41My4wNC4wMCNUaW1lIG1hbmFnZW1lbnQgc2tpbGxzIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjUzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjUzLjA1LjAwI0ludGVydmlldyBza2lsbHMgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTMuMDYuMDAjUmVzdW1lIHNraWxscyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41My4wMC4wMAotdW5zcHNjNyM2MC4xMC41My4wNy4wMCNXb3JrIGV0aGljcyBvciBhdHRpdHVkZSB0cmFpbmluZyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41My4wMC4wMAotdW5zcHNjNyM2MC4xMC41My4wOC4wMCNUZWFtIGJ1aWxkaW5nIHNraWxscyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41My4wMC4wMAotdW5zcHNjNyM2MC4xMC41My4wOS4wMCNCdXNpbmVzcyBldGlxdWV0dGUgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTMuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTQuMDAuMDAjQ29uc3VtZXIgZWNvbm9taWNzIGFuZCBtb25leSBtYW5hZ2VtZW50IGFuZCBpbmRlcGVuZGVudCBsaXZpbmcgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTQuMDEuMDAjUGVyc29uYWwgZmluYW5jZSBvciBtb25leSBtYW5hZ2VtZW50IGVkdWNhdGlvbiBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41NC4wMC4wMAotdW5zcHNjNyM2MC4xMC41NC4wMi4wMCNTaG9wcGluZyBvciBjb25zdW1lciBza2lsbHMgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTQuMDMuMDAjSW5kZXBlbmRlbnQgbGl2aW5nIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU0LjA0LjAwI1VuZGVyc3RhbmRpbmcgY29uc3VtZXIgY3JlZGl0IG9yIGxvYW5zIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU0LjA1LjAwI0luc3VyYW5jZSBjb3ZlcmFnZSBvciBpbnN1cmFuY2UgY29tcGFyaXNvbiBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41NC4wMC4wMAotdW5zcHNjNyM2MC4xMC41NC4wNi4wMCNIb21lIGJ1eWluZyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41NC4wMC4wMAotdW5zcHNjNyM2MC4xMC41NC4wNy4wMCNBcGFydG1lbnQgcmVudGFsIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU0LjA4LjAwI0NhciBidXlpbmcgZWR1Y2F0aW9uYWwgYWlkcyM2MC4xMC41NC4wMC4wMAotdW5zcHNjNyM2MC4xMC41NC4wOS4wMCNCcmFuZCBtYXJrZXRpbmcgb3IgYWR2ZXJ0aXNpbmcgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTQuMTAuMDAjUmVsYXRpb25zaGlwIGJ1aWxkaW5nIG9yIGZhbWlseSBsaWZlIHNraWxscyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41NC4wMC4wMAotdW5zcHNjNyM2MC4xMC41NC4xMS4wMCNEZXZlbG9waW5nIHNlbGYgY29uY2VwdCBhbmQgc2VsZiBlc3RlZW0gaW5zdHVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41NC4wMC4wMAotdW5zcHNjNyM2MC4xMC41NC4xMi4wMCNWaW9sZW5jZSBhdm9pZGFuY2UgZWR1Y2F0aW9uIG9yIHZpb2xlbmNlIHByZXZlbnRpb24gaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTQuMTMuMDAjQW5nZXIgcmVzb2x1dGlvbiB0cmFpbmluZyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41NC4wMC4wMAotdW5zcHNjNyM2MC4xMC41NC4xNC4wMCNUZWFjaGluZyBwYXRpZW5jZSBza2lsbHMgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTQuMTUuMDAjVG9sZXJhbmNlIHRyYWluaW5nIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU0LjE2LjAwI1BlcnNvbmFsIHNhZmV0eSBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41NC4wMC4wMAotdW5zcHNjNyM2MC4xMC41NC4xNy4wMCNQZXJzb25hbCBjb25mbGljdCByZXNvbHV0aW9uIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU0LjE4LjAwI1ByYWN0aWNhbCB0ZWVuIGFkdmljZSBndWlkZXMjNjAuMTAuNTQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTQuMTkuMDAjRGV2ZWxvcGluZyBzb2NpYWwgc2tpbGxzIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU0LjIwLjAwI01hbm5lcnMgb3IgZXRpcXVldHRlIG9yIGNvdXJ0ZXN5IGluc3RydWN0aW9uYWwgYWlkcyM2MC4xMC41NC4wMC4wMAotdW5zcHNjNyM2MC4xMC41NC4yMS4wMCNVbmRlcnN0YW5kaW5nIG9yIGRlYWxpbmcgd2l0aCBjdWx0dXJhbCBkaXZlcnNpdHkgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTQuMjIuMDAjSG93IHRvIHJlYWQgYm9keSBsYW5ndWFnZSBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41NC4wMC4wMAotdW5zcHNjNyM2MC4xMC41NC4yMy4wMCNEZXZlbG9waW5nIHJlc2lsaWVuY3kgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTQuMjQuMDAjVW5kZXJzdGFuZGluZyBjb21tdW5pdHkgc2VydmljZSBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41NC4wMC4wMAotdW5zcHNjNyM2MC4xMC41NC4yNS4wMCNEZXZlbG9waW5nIHJlZnVzYWwgc2tpbGxzIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU0LjI2LjAwI1Jlc3BvbnNpYmlsaXR5IG9yIERkZWNpc2lvbiBtYWtpbmcgc2tpbGxzIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU0LjI3LjAwI1VuZGVyc3RhbmRpbmcgdGVlbnMgbGVnYWwgcmlnaHRzIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU0LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU0LjI4LjAwI1JlcGVyY3Vzc2lvbnMgb2YgZHJvcHBpbmcgb3V0IG9mIHNjaG9vbCBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41NC4wMC4wMAotdW5zcHNjNyM2MC4xMC41NC4yOS4wMCNSYWNlIHJlbGF0aW9ucyB2aWRlb3MjNjAuMTAuNTQuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTUuMDAuMDAjSG9tZSBhbmQgaW50ZXJpb3IgZGVzaWduIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjU1LjAxLjAwI0Zlbmcgc2h1aSBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41NS4wMC4wMAotdW5zcHNjNyM2MC4xMC41NS4wMi4wMCNJbnN0cnVjdGlvbmFsIG1hdGVyaWFscyBmb3IgdXNpbmcgY29sb3Igb3IgcGFpbnQgZm9yIGhvbWUgZGVjb3JhdGlvbiM2MC4xMC41NS4wMC4wMAotdW5zcHNjNyM2MC4xMC41NS4wMy4wMCNJbnN0cnVjdGlvbmFsIG1hdGVyaWFscyBmb3IgaG9tZSBwbGFubmluZyBvciBkZXNpZ24jNjAuMTAuNTUuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTUuMDQuMDAjTGFuZHNjYXBpbmcgZGVzaWduIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU1LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU1LjA1LjAwI0luc3RydWN0aW9uYWwgbWF0ZXJpYWxzIGZvciBob21lIGRlY29yYXRpbmcgb3IgZnVybmlzaGluZyM2MC4xMC41NS4wMC4wMAotdW5zcHNjNyM2MC4xMC41Ni4wMC4wMCNIZWFsdGggZWR1Y2F0aW9uIGFuZCBudXRyaXRpb24gYW5kIGZvb2QgcHJlcGFyYXRpb24gaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTYuMDEuMDAjRGlldGFyeSBndWlkZWxpbmVzIG9yIGJhbGFuY2VkIGRpZXRzIGVkdWNhdGlvbmFsIHJlc291cmNlcyM2MC4xMC41Ni4wMC4wMAotdW5zcHNjNyM2MC4xMC41Ni4wMi4wMCNOdXRyaXRpb25hbCBjdXJyaWN1bHVtIG1lbnUgcGxhbm5pbmcgc2tpbGxzIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU2LjAzLjAwI1VuZGVyc3RhbmRpbmcgbnV0cml0aW9uIGxhYmVsaW5nIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU2LjA0LjAwI0Zvb2Qgc2hvcHBpbmcgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTYuMDUuMDAjSGVhbHRoeSBmb29kIGNob2ljZXMgZGVtb25zdHJhdGlvbiB1bml0cyM2MC4xMC41Ni4wMC4wMAotdW5zcHNjNyM2MC4xMC41Ni4wNi4wMCNVbmRlcnN0YW5kaW5nIHRoZSBlZmZlY3RzIG9mIGRpZXRhcnkgZmF0IGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU2LjA3LjAwI1VuZGVyc3RhbmRpbmcgdmVnZXRhcmlhbmlzbSBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41Ni4wMC4wMAotdW5zcHNjNyM2MC4xMC41Ni4wOC4wMCNSZWNpcGUgYm9va3Mgb3IgY29vayBib29rcyM2MC4xMC41Ni4wMC4wMAotdW5zcHNjNyM2MC4xMC41Ni4wOS4wMCNFYXRpbmcgZGlzb3JkZXJzIGVkdWNhdGlvbiBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41Ni4wMC4wMAotdW5zcHNjNyM2MC4xMC41Ni4xMC4wMCNXZWlnaHQgY29udHJvbCBvciBleGVyY2lzZSBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41Ni4wMC4wMAotdW5zcHNjNyM2MC4xMC41Ni4xMS4wMCNLaXRjaGVuIG1lYXN1cmVtZW50cyBvZiBzb2xpZHMgb3IgbGlxdWlkcyBpbnN0cnVjdGlvbmFsIGFpZHMjNjAuMTAuNTYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTYuMTIuMDAjS2l0Y2hlbiBlcXVpdmFsYW50cyBvciBraXRjaGVuIG1hdGggaW5zdHJ1Y3Rpb25hbCBhaWRzIzYwLjEwLjU2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU2LjEzLjAwI0tpdGNoZW4gdXRlbnNpbHMgaW5zdHJ1Y3Rpb25hbCBhaWRzIzYwLjEwLjU2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU2LjE0LjAwI0tpdGNoZW4gc2FmZXR5IG9yIHNhbml0YXRpb24gaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTYuMTUuMDAjRm9vZCBzYWZldHkgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTYuMTYuMDAjRm9vZCBzY2llbmNlIGFjdGl2aXRpZXMgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTYuMTcuMDAjQ29va2luZyBza2lsbHMgaW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTYuMTguMDAjVGFibGUgbWFubmVycyBvciBlYXRpbmcgZXRpcXVldHRlIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU2LjE5LjAwI1RhYmxlIHNldHRpbmcgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTYuMjAuMDAjRm9vZCBzZXJ2aWNlIHRyYWluaW5nIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU2LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU2LjIxLjAwI0RydWcgb3IgdG9iYWNjbyBvciBhbGNvaG9sIGFidXNlIGVkdWNhdGlvbiBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41Ni4wMC4wMAotdW5zcHNjNyM2MC4xMC41Ni4yMi4wMCNTbW9raW5nIFNpbXVsYXRvcnMjNjAuMTAuNTYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTYuMjMuMDAjVW5kZXJzdGFuZGluZyBhZGRpY3Rpb24gb3IgYWRkaWN0aW9uIGF2b2lkYW5jZSBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41Ni4wMC4wMAotdW5zcHNjNyM2MC4xMC41Ni4yNC4wMCNUZWVuIGRlcHJlc3Npb24gc3ltcHRvbXMgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTYuMjUuMDAjVGVlbiBzdWljaWRlIGF2b2lkYW5jZSB0cmFpbmluZyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41Ni4wMC4wMAotdW5zcHNjNyM2MC4xMC41Ni4yNi4wMCNDb3Bpbmcgd2l0aCBzdHJlc3MgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTYuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTcuMDAuMDAjTWVtb3J5IGJvb2tzIGFuZCBzdXBwbGllcyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC41Ny4wMS4wMCNNZW1vcnkgYm9va3MjNjAuMTAuNTcuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTcuMDIuMDAjTWVtb3J5IGJvb2sgcG9zdHMgb3IgZXh0ZW5kZXJzIzYwLjEwLjU3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU3LjAzLjAwI01lbW9yeSBib29rIHBhcGVyIzYwLjEwLjU3LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU3LjA0LjAwI0FjaWQgZnJlZSBtZW1vcnkgYm9vayBnbHVlIHN0aWNrcyM2MC4xMC41Ny4wMC4wMAotdW5zcHNjNyM2MC4xMC41Ny4wNS4wMCNBY2lkIGZyZWUgbWVtb3J5IGJvb2sgdGFwZSM2MC4xMC41Ny4wMC4wMAotdW5zcHNjNyM2MC4xMC41OC4wMC4wMCNDbG90aGluZyBhbmQgdGV4dGlsZSBkZXNpZ24gaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTguMDEuMDAjU2V3aW5nIHNraWxscyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41OC4wMC4wMAotdW5zcHNjNyM2MC4xMC41OC4wMi4wMCNTZXdpbmcgcHJvamVjdCBtYXRlcmlhbHMjNjAuMTAuNTguMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTguMDMuMDAjVW5kZXJzdGFuZGluZyBjbG90aGluZyBjb25zdHJ1Y3Rpb24gb3Igd29ya21hbnNoaXAgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTguMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTguMDQuMDAjQ2xvdGhpbmcgZGVzaWduIG9yIGZhc2hpb24gaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTguMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTguMDUuMDAjUGVyc29uYWwgY29sb3IgYW5hbHlzaXMgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTguMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTguMDYuMDAjRmFzaGlvbiBtZXJjaGFuZGlzaW5nIG9yIHJldGFpbCBmdW5kYW1lbnRhbHMgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTguMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTguMDcuMDAjU2NpZW5jZSBvZiBmYWJyaWNzIG9yIGZpYmVycyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41OC4wMC4wMAotdW5zcHNjNyM2MC4xMC41OC4wOC4wMCNDbG90aGluZyBjYXJlIG9yIG1haW50ZW5hbmNlIG9yIGxhdW5kZXJpbmcgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTguMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTguMDkuMDAjTWF0ZXJpYWxzIGZvciB0ZWFjaGluZyB0aGUgYXJ0IG9mIGRlc2lnbiBjb2xvciBvbiBmYWJyaWMjNjAuMTAuNTguMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTguMTAuMDAjRmFicmljIGR5ZXMgb3IgcGFpbnRzIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU4LjExLjAwI1F1aWx0aW5nIHByb2plY3RzIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU4LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU5LjAwLjAwI0RhdGluZyBhbmQgc2V4IGFuZCB0ZWVuIHByZWduYW5jeSBhbmQgcGFyZW50aW5nIHNraWxscyBhbmQgY2hpbGQgZGV2ZWxvcG1lbnQgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTkuMDEuMDAjU2V4IGVkdWNhdGlvbiBvciBzZXh1YWxseSB0cmFuc21pdHRlZCBkaXNlYXNlIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU5LjAyLjAwI1ByZW5hdGFsIG51dHJpdGlvbiByZXNvdXJjZXMgb3IgZmV0YWwgYWJ1c2UgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTkuMDMuMDAjUGFyZW50aW5nIHNraWxscyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41OS4wMC4wMAotdW5zcHNjNyM2MC4xMC41OS4wNC4wMCNDaGlsZCBkZXZlbG9wbWVudCBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41OS4wMC4wMAotdW5zcHNjNyM2MC4xMC41OS4wNS4wMCNVbmRlcnN0YW5kaW5nIGRhdGUgcmFwZSBvciBkYXRpbmcgc2tpbGxzIG9yIGhhcmFzc21lbnQgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTkuMDYuMDAjQ2hpbGRiaXJ0aCBlZHVjYXRpb24gaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTkuMDcuMDAjUHJlZ25hbmN5IGZyb20gY29uY2VwdGlvbiB0aHJvdWdoIGJpcnRoIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU5LjA4LjAwI1VuZGVyc3RhbmRpbmcgdGhlIHJpc2tzIG9mIGJpcnRoIGRlZmVjdHMgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTkuMDkuMDAjUHJlZ25hbmN5IHNpbXVsYXRvcnMjNjAuMTAuNTkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTkuMTAuMDAjSW5mYW50IHNpbXVsYXRvcnMgYW5kIGFjY2Vzc29yaWVzIzYwLjEwLjU5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU5LjExLjAwI0luZmFudCBjYXJlIHRyYWluaW5nIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU5LjEyLjAwI1VuZGVyc3RhbmRpbmcgcGh5c2ljYWwgb3IgZW1vdGlvbmFsIGNoaWxkIGFidXNlIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU5LjEzLjAwI0Rpc2NpcGxpbmUgc2tpbGwgZWR1Y2F0aW9uIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIGZvciBwYXJlbnRzIzYwLjEwLjU5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU5LjE0LjAwI0hvbWUgc2FmZXR5IG9yIGNoaWxkcHJvb2ZpbmcgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTkuMTUuMDAjQ2FyZGlvIHB1bG1vbmFyeSByZXN1c2l0YXRpb24gb3IgIGJhc2ljIGxpZmUgc3VwcG9ydCBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41OS4wMC4wMAotdW5zcHNjNyM2MC4xMC41OS4xNi4wMCNVbmRlcnN0YW5kaW5nIGNoaWxkaG9vZCBpbGxuZXNzZXMgaW5zdHJ1Y3Rpb25hbCBtYXRlcmlhbHMjNjAuMTAuNTkuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNTkuMTcuMDAjVW5kZXJzdGFuZGluZyBhdHRlbnRpb24gZGVmaWNpdCBoeXBlcmFjdGl2aXR5IGRpc29yZGVyIGluc3RydWN0aW9uYWwgbWF0ZXJpYWxzIzYwLjEwLjU5LjAwLjAwCi11bnNwc2M3IzYwLjEwLjU5LjE4LjAwI0NoaWxkIGNhcmVnaXZlciBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41OS4wMC4wMAotdW5zcHNjNyM2MC4xMC41OS4xOS4wMCNCYWJ5c2l0dGluZyBpbnN0cnVjdGlvbmFsIG1hdGVyaWFscyM2MC4xMC41OS4wMC4wMAotdW5zcHNjNyM2MC4xMC42MC4wMC4wMCNDdXJyaWN1bHVtIGd1aWRlcyBhbmQgcHJvamVjdHMgYW5kIGFjdGl2aXRpZXMgYW5kIGxlc3NvbnMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNjAuMDEuMDAjTWlkZGxlIHNjaG9vbCBjdXJyaWN1bHVtIHJlc291cmNlIG9yIGlkZWEgYm9va3MjNjAuMTAuNjAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNjAuMDIuMDAjSGlnaCBTY2hvb2wgY3VycmljdWx1bSByZXNvdXJjZSBvciBpZGVhIGJvb2tzIzYwLjEwLjYwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjYwLjAzLjAwI0hvbWUgZWNvbm9taWNzIGluZGVwZW5kZW50IHN0dWR5IHByb2plY3RzIzYwLjEwLjYwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjYwLjA0LjAwI0hvbWUgZWNvbm9taWNzIHByb2plY3RzIG9yIGFjdGl2aXRpZXMgcmVzb3VyY2VzIG9yIGd1aWRlcyM2MC4xMC42MC4wMC4wMAotdW5zcHNjNyM2MC4xMC42MS4wMC4wMCNWb2NhdGlvbmFsIHRlYWNoaW5nIGFpZHMgYW5kIG1hdGVyaWFscyM2MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMC42MS4wMS4wMCNBdXRvbW90aXZlIHRlYWNoaW5nIGFpZHMgb3IgbWF0ZXJpYWxzIzYwLjEwLjYxLjAwLjAwCi11bnNwc2M3IzYwLjEwLjYxLjAyLjAwI0NvbnN0cnVjdGlvbiB0ZWFjaGluZyBhaWRzIG9yIG1hdGVyaWFscyM2MC4xMC42MS4wMC4wMAotdW5zcHNjNyM2MC4xMC42MS4wMy4wMCNEcmFmdGluZyBvciBkZXNpZ24gdGVhY2hpbmcgYWlkcyBvciBtYXRlcmlhbHMjNjAuMTAuNjEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNjEuMDQuMDAjRWxlY3Ryb25pY3Mgb3IgZWxlY3RyaWNpdHkgdGVhY2hpbmcgYWlkcyBvciBtYXRlcmlhbHMjNjAuMTAuNjEuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNjEuMDUuMDAjR3JhcGhpYyBhcnRzIG9yIHBob3RvZ3JhcGh5IHRlYWNoaW5nIGFpZHMgb3IgbWF0ZXJpYWxzIzYwLjEwLjYxLjAwLjAwCi11bnNwc2M3IzYwLjEwLjYxLjA2LjAwI0hvcnRpY3VsdHVyZSB0ZWFjaGluZyBhaWRzIG9yIG1hdGVyaWFscyM2MC4xMC42MS4wMC4wMAotdW5zcHNjNyM2MC4xMC42MS4wNy4wMCNNYW51ZmFjdHVyaW5nIHRlYWNoaW5nIGFpZHMgb3IgbWF0ZXJpYWxzIzYwLjEwLjYxLjAwLjAwCi11bnNwc2M3IzYwLjEwLjYyLjAwLjAwI1RlY2hub2xvZ3kgdGVhY2hpbmcgYWlkcyBhbmQgbWF0ZXJpYWxzIzYwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEwLjYyLjAxLjAwI0FncmljdWx0dXJlIHRlYWNoaW5nIGFpZHMgb3IgbWF0ZXJpYWxzIzYwLjEwLjYyLjAwLjAwCi11bnNwc2M3IzYwLjEwLjYyLjAyLjAwI0Jpb3RlY2hub2xvZ3kgdGVhY2hpbmcgYWlkcyBvciBtYXRlcmlhbHMjNjAuMTAuNjIuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNjIuMDMuMDAjQ29tbXVuaWNhdGlvbnMgdGVhY2hpbmcgYWlkcyBvciBtYXRlcmlhbHMjNjAuMTAuNjIuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNjIuMDQuMDAjQ29tcHV0ZXIgc2NpZW5jZSB0ZWFjaGluZyBhaWRzIG9yIG1hdGVyaWFscyM2MC4xMC42Mi4wMC4wMAotdW5zcHNjNyM2MC4xMC42Mi4wNS4wMCNFbmVyZ3kgb3IgcG93ZXIgdGVhY2hpbmcgYWlkcyBvciBtYXRlcmlhbHMjNjAuMTAuNjIuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNjIuMDYuMDAjRW52aXJvbm1lbnRhbCB0ZWFjaGluZyBhaWRzIG9yIG1hdGVyaWFscyM2MC4xMC42Mi4wMC4wMAotdW5zcHNjNyM2MC4xMC42Mi4wNy4wMCNNYXRlcmlhbHMgdGVhY2hpbmcgYWlkcyBvciBtYXRlcmlhbHMjNjAuMTAuNjIuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNjIuMDguMDAjTWVkaWNhbCB0ZWFjaGluZyBhaWRzIG9yIG1hdGVyaWFscyM2MC4xMC42Mi4wMC4wMAotdW5zcHNjNyM2MC4xMC42Mi4wOS4wMCNUcmFuc3BvcnRhdGlvbiB0ZWFjaGluZyBhaWRzIG9yIG1hdGVyaWFscyM2MC4xMC42Mi4wMC4wMAotdW5zcHNjNyM2MC4xMC42My4wMC4wMCNGb3JlbnNpYyBzY2llbmNlIHRlYWNoaW5nIGVxdWlwbWVudCBhbmQgc3VwcGxpZXMjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNjMuMDEuMDAjRm9yZW5zaWMgc2NpZW5jZSBraXRzIzYwLjEwLjYzLjAwLjAwCi11bnNwc2M3IzYwLjEwLjY0LjAwLjAwI0VsZWN0cm9uaWNzIHRlYWNoaW5nIHN1cHBsaWVzIGFuZCBlcXVpcG1lbnQjNjAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTAuNjQuMDEuMDAjRWxlY3Ryb25pY3Mga2l0cyM2MC4xMC42NC4wMC4wMAotdW5zcHNjNyM2MC4xMC42NC4wMi4wMCNFbGVjdHJvbmljcyB0ZWFjaGluZyBzdXBwbGllcyM2MC4xMC42NC4wMC4wMAotdW5zcHNjNyM2MC4xMC42NC4wMy4wMCNGb3JlbnNpYyBzY2llbmNlIHRlYWNoaW5nIHN1cHBsaWVzIzYwLjEwLjY0LjAwLjAwCi11bnNwc2M3IzYwLjExLjAwLjAwLjAwI0NsYXNzcm9vbSBkZWNvcmF0aXZlcyBhbmQgc3VwcGxpZXMjNjAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTAuMDAuMDAjQ2xhc3Nyb29tIENoYXJ0cyBvciBjbGFzc3Jvb20gcG9zdGVycyM2MC4xMS4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMS4xMC4wMS4wMCNDaGFydCBwYWNrcyM2MC4xMS4xMC4wMC4wMAotdW5zcHNjNyM2MC4xMS4xMC4wMi4wMCNDbGFzc3Jvb20gY2hhcnRzIzYwLjExLjEwLjAwLjAwCi11bnNwc2M3IzYwLjExLjEwLjAzLjAwI0NsYXNzcm9vbSBwb3N0ZXJzIG9yIHNldHMjNjAuMTEuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTAuMDQuMDAjRG8gaXQgeW91cnNlbGYgcG9zdGVycyM2MC4xMS4xMC4wMC4wMAotdW5zcHNjNyM2MC4xMS4xMS4wMC4wMCNCdWxsZXRpbiBib2FyZCBzZXRzIzYwLjExLjAwLjAwLjAwCi11bnNwc2M3IzYwLjExLjExLjAxLjAwI0JpZyBidWxsZXRpbiBib2FyZCBzZXRzIzYwLjExLjExLjAwLjAwCi11bnNwc2M3IzYwLjExLjExLjAyLjAwI0NhbGVuZGFyIGJ1bGxldGluZyBib2FyZCBzZXRzIzYwLjExLjExLjAwLjAwCi11bnNwc2M3IzYwLjExLjExLjAzLjAwI0Vhcmx5IGNoaWxkaG9vZCBidWxsZXRpbiBib2FyZCBzZXRzIzYwLjExLjExLjAwLjAwCi11bnNwc2M3IzYwLjExLjExLjA0LjAwI0xhbmd1YWdlIGJ1bGxldGluIGJvYXJkIHNldHMjNjAuMTEuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTEuMDUuMDAjTWF0aCBidWxsZXRpbiBib2FyZCBzZXRzIzYwLjExLjExLjAwLjAwCi11bnNwc2M3IzYwLjExLjExLjA2LjAwI011bHRpcHVycG9zZSBidWxsZXRpbiBib2FyZCBzZXRzIzYwLjExLjExLjAwLjAwCi11bnNwc2M3IzYwLjExLjExLjA3LjAwI1NjaWVuY2UgYnVsbGV0aW4gYm9hcmQgc2V0cyM2MC4xMS4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMS4xMS4wOC4wMCNTZWFzb25hbCBidWxsZXRpbiBib2FyZCBzZXRzIzYwLjExLjExLjAwLjAwCi11bnNwc2M3IzYwLjExLjExLjA5LjAwI1NvY2lhbCBzdHVkaWVzIGJ1bGxldGluIGJvYXJkIHNldHMjNjAuMTEuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTIuMDAuMDAjQnVsbGV0aW4gYm9hcmQgYm9yZGVycyBhbmQgdHJpbW1lcnMjNjAuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTIuMDEuMDAjQ2xhc3Nyb29tIGJhbm5lcnMjNjAuMTEuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTIuMDIuMDAjQm9yZGVyIHBhY2tzIzYwLjExLjEyLjAwLjAwCi11bnNwc2M3IzYwLjExLjEyLjAzLjAwI0NsYXNzcm9vbSBoZWFkZXJzIzYwLjExLjEyLjAwLjAwCi11bnNwc2M3IzYwLjExLjEyLjA0LjAwI0NvcnJpZ3VhdGVkIGJvcmRlcnMgb3IgdHJpbW1lcnMjNjAuMTEuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTIuMDUuMDAjRGllIGN1dCBzaGFwZWQgc2NhbGxvcGVkIGJvcmRlcnMgb3IgdHJpbW1lcnMjNjAuMTEuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTIuMDYuMDAjU3BhcmtsZSBib3JkZXJzIG9yIHRyaW1tZXJzIzYwLjExLjEyLjAwLjAwCi11bnNwc2M3IzYwLjExLjEyLjA3LjAwI1N0cmFpZ2h0IGJvcmRlcnMgb3IgdHJpbW1lcnMjNjAuMTEuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTIuMDguMDAjQm9yZGVyIG9yIFRyaW1tZXIgc3RvcmFnZSM2MC4xMS4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMS4xMy4wMC4wMCNEZWNvcmF0aXZlIGxldHRlcnMgYW5kIG51bWJlcnMjNjAuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTMuMDEuMDAjTGV0dGVyZWQgb3IgbnVtYmVyZWQgYmxvY2tzIzYwLjExLjEzLjAwLjAwCi11bnNwc2M3IzYwLjExLjEzLjAyLjAwI0Nhc3VhbCBsZXR0ZXJzIG9yIG51bWJlcnMjNjAuMTEuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTMuMDMuMDAjSXRhbGljIGxldHRlcnMgb3IgbnVtYmVycyM2MC4xMS4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMS4xMy4wNC4wMCNTZWxmIGFkaGVzaXZlIGxldHRlcnMgb3IgbnVtYmVycyM2MC4xMS4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMS4xMy4wNS4wMCNTcGFya2xlIGxldHRlcnMgb3IgbnVtYmVycyM2MC4xMS4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMS4xMy4wNi4wMCNUcmFjaW5nIGxldHRlcnMgb3IgbnVtYmVycyM2MC4xMS4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMS4xNC4wMC4wMCNTcGVjaWFsdHkgZGVjb3JhdGl2ZXMgZm9yIHRoZSBjbGFzc3Jvb20gYW5kIGRlY29yYXRpdmUgYWNjZXNzb3JpZXMjNjAuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTQuMDEuMDAjQ2xhc3Nyb29tIGRlY29yYXRpdmUga2l0cyM2MC4xMS4xNC4wMC4wMAotdW5zcHNjNyM2MC4xMS4xNC4wMi4wMCNEb29yIGRlY29yYXRpb25zIzYwLjExLjE0LjAwLjAwCi11bnNwc2M3IzYwLjExLjE0LjAzLjAwI01vYmlsZXMjNjAuMTEuMTQuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTQuMDQuMDAjVHdvIHNpZGVkIGRlY29yYXRpb25zIzYwLjExLjE0LjAwLjAwCi11bnNwc2M3IzYwLjExLjE0LjA1LjAwI1dpbmRvdyBjbGluZyBkZWNvcmF0aW9ucyM2MC4xMS4xNC4wMC4wMAotdW5zcHNjNyM2MC4xMS4xNC4wNy4wMCNEZWNvcmF0aXZlIFN0b3JhZ2UgU3lzdGVtcyM2MC4xMS4xNC4wMC4wMAotdW5zcHNjNyM2MC4xMS4xNC4wOC4wMCNEZWNvcmF0aXZlIHRhcGVzIG9yIHR3aXN0cyM2MC4xMS4xNC4wMC4wMAotdW5zcHNjNyM2MC4xMS4xNC4wOS4wMCNEZWNvcmF0aXZlIGJ1dHRvbnMjNjAuMTEuMTQuMDAuMDAKLXVuc3BzYzcjNjAuMTEuMTQuMTAuMDAjRGVjb3JhdGl2ZSBzaGFwZXMgb3Igc3RyaW5ncyM2MC4xMS4xNC4wMC4wMAotdW5zcHNjNyM2MC4xMi4wMC4wMC4wMCNBcnRzIGFuZCBjcmFmdHMgZXF1aXBtZW50IGFuZCBhY2Nlc3NvcmllcyBhbmQgc3VwcGxpZXMjNjAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTAuMDAuMDAjQXJ0IzYwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEwLjAxLjAwI1BhaW50aW5ncyM2MC4xMi4xMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMC4wMi4wMCNTY3VscHR1cmVzIzYwLjEyLjEwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEwLjAzLjAwI1N0YXR1YXJ5IzYwLjEyLjEwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEwLjA0LjAwI1BvcnRyYWl0cyM2MC4xMi4xMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMC4wNS4wMCNEcmF3aW5ncyM2MC4xMi4xMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMC4wNi4wMCNQaWN0dXJlcyM2MC4xMi4xMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMC4wNy4wMCNMaXRob2dyYXBocyM2MC4xMi4xMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMC4wOC4wMCNQb3N0ZXJzIzYwLjEyLjEwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEwLjA5LjAwI0RlY29yYXRpdmUgcG90IzYwLjEyLjEwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEwLjEwLjAwI1Njcm9sbHMjNjAuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTAuMTEuMDAjUGhvdG9ncmFwaHMjNjAuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuMDAuMDAjQ2FudmFzZXMgYW5kIGZpbG1zIGFuZCBib2FyZHMgYW5kIGFydGlzdHMgcGFwZXJzIzYwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjAxLjAwI1N1bHBoaXRlIGRyYXdpbmcgcGFwZXIjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuMDIuMDAjR3JvdW5kd29vZCBkcmF3aW5nIHBhcGVyIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjAzLjAwI1RyYWNpbmcgb3IgdmVsbHVtIGRyYXdpbmcgcGFwZXIjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuMDQuMDAjQm9uZCBkcmF3aW5nIHBhcGVyIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjA1LjAwI0NoYXJjb2FsIG9yIHBhc3RlbCBkcmF3aW5nIHBhcGVyIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjA2LjAwI0JyaXN0b2wgZHJhd2luZyBwYXBlciM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS4wNy4wMCNXYXRlcmNvbG9yIHBhcGVyIHNoZWV0cyM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS4wOC4wMCNXYXRlcmNvbG9yIHBhcGVyIHBhZHMjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuMDkuMDAjV2F0ZXJjb2xvciBwYXBlciBibG9ja3MjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuMTAuMDAjRmluZ2VyIHBhaW50IHBhcGVyIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjExLjAwI1N1bHBoaXRlIGNvbnN0cnVjdGlvbiBwYXBlciM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS4xMi4wMCNHcm91bmR3b29kIGNvbnN0cnVjdGlvbiBwYXBlciM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS4xMy4wMCNGb2lsIGNvbnN0cnVjdGlvbiBwYXBlciM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS4xNC4wMCNPcmlnYW1pIGNyYWZ0IHBhcGVycyM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS4xNS4wMCNQYXBlciBvciBwbGFzdGljIENvbmZldHRpIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjE2LjAwI0NyZXBlIHBhcGVyIGZvciBjcmFmdHMjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuMTcuMDAjQ3JhZnQgdGlzc3VlIHBhcGVyIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjE4LjAwI0NvcnJ1Z2F0ZWQgY3JhZnQgcGFwZXIjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuMTkuMDAjUGF0dGVybiBwcmludGVkIGNyYWZ0IHBhcGVyIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjIwLjAwI1NlbGYgYWRoZXNpdmUgY3JhZnQgcGFwZXIjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuMjEuMDAjR2xvdyBpbiB0aGUgZGFyayBwYXBlciM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS4yMy4wMCNIYW5kIG1hZGUgcGFwZXIjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuMjQuMDAjS3JhZnQgcGFwZXIjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuMjUuMDAjQ2FudmFzIHBhbmVscyM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS4yNi4wMCNQcmVzdHJldGNoZWQgY2FudmFzIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjI3LjAwI1ByaW1lZCBjYW52YXMjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuMjguMDAjVW5wcmltZWQgY2FudmFzIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjI5LjAwI01hc29uaXRlIHBhbmVscyM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS4zMC4wMCNDYW52YXMgbGlrZSBwYXBlciBwYWRzIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjMxLjAwI0phcGFuZXNlIHByaW50bWFraW5nIHBhcGVyIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjMyLjAwI0xpdGhvZ3JhcGh5IG9yIGludGFnbGlvIHByaW50bWFraW5nIHBhcGVyIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjMzLjAwI0Jsb2NrcHJpbnRpbmcgcHJpbnRtYWtpbmcgcGFwZXIjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuMzQuMDAjRm9pbCBwYXBlciM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS4zNS4wMCNBY2V0YXRlIG9yIHZpbnlsIG9yIHBvbHllc3RlciBmaWxtcyM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS4zNi4wMCNDZWxsb3BoYW5lIGZpbG1zIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjM3LjAwI0FjcnlsaWMgc2hlZXRzIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjM4LjAwI0lsbHVzdHJhdGlvbiBib2FyZHMjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuMzkuMDAjTWF0IGJvYXJkcyM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS40MC4wMCNNb3VudGluZyBib2FyZCM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS40MS4wMCNGb2FtIGNvcmUgbW91bnRpbmcgYm9hcmQjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuNDIuMDAjVGFnYm9hcmQgb3IgcmFpbHJvYWQgYm9hcmQjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuNDMuMDAjRGlzcGxheSBib2FyZCM2MC4xMi4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMS40NC4wMCNTY3JhdGNoIGFydCBwYXBlcnMjNjAuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTEuNDUuMDAjU2NyYXRjaCBhcnQgYm9hcmRzIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjExLjQ2LjAwI1NjcmF0Y2ggYXJ0IGFjY2Vzc29yaWVzIzYwLjEyLjExLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjAwLjAwI0NsYXNzcm9vbSBhbmQgZmluZSBhcnQgcGFpbnQgYW5kIG1lZGl1bXMgYW5kIGFwcGxpY2F0b3JzIGFuZCBhY2Nlc3NvcmllcyM2MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4wMS4wMCNUcmFkaXRpb25hbCBsaXF1aWQgdGVtcGVyYSBwYWludCM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4wMi4wMCNDb250ZW1wb3JhcnkgbGlxdWlkIHRlbXBlcmEgcGFpbnQjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuMDMuMDAjUG93ZGVyZWQgdGVtcGVyYSBwYWludCM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4wNC4wMCNXYXNoYWJsZSB0ZW1wZXJhIHBhaW50IzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjA1LjAwI1RlbXBlcmEgY2FrZXMjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuMDYuMDAjTGlxdWlkIGZhY2Ugb3IgYm9keSBwYWludCM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4wNy4wMCNDYWtlIGZhY2Ugb3IgYm9keSBwYWludCM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4wOC4wMCNNYXJrZXIgZmFjZSBvciBib2R5IHBhaW50IzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjA5LjAwI1RlbXBvcmFyeSB0YXR0b28gcGFpbnQjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuMTAuMDAjV2FzaGFibGUgZmluZ2VyIHBhaW50IzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjExLjAwI1NjaG9vbCBzdHlsZSBhY3J5bGljIHBhaW50IzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjEyLjAwI0FjcnlsaWMgYWlyYnJ1c2ggcGFpbnQjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuMTMuMDAjU3ludGhldGljIGhlYXQgdHJlYXRlZCBvaWwgcGFpbnQgb3IgbWVkaXVtcyM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4xNC4wMCNXYXRlciBzb2x1YmxlIG9pbCBwYWludCBvciBtZWRpdW1zIzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjE1LjAwI0xvdyB2aXNjb3NpdHkgcmVtb3ZhYmxlIGdsYXNzIG9yIGNlcmFtaWMgcGFpbnQjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuMTYuMDAjTG93IHZpc2Nvc2l0eSBwZXJtYW5lbnQgZ2xhc3Mgb3IgY2VyYW1pYyBwYWludCM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4xNy4wMCNIaWdoIHZpc2Nvc2l0eSBHZWwgcmVtb3ZhYmxlIGdsYXNzIG9yIGNlcmFtaWMgcGFpbnQjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuMTguMDAjSGlnaCB2aXNjb3NpdHkgR2VsIHBlcm1hbmVudCBnbGFzcyBvciBjZXJhbWljIHBhaW50IzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjE5LjAwI092ZW4gYmFrZWQgZ2xhc3Mgb3IgY2VyYW1pYyBwYWludCM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4yMC4wMCNNYXJrZXIgZGVsaXZlcnkgc3lzdGVtIGdsYXNzIG9yIGNlcmFtaWMgcGFpbnQjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuMjEuMDAjUGFuIHdhdGVyY29sb3IgcGFpbnQjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuMjIuMDAjVHViZSB3YXRlcmNvbG9yIHBhaW50IzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjIzLjAwI0xpcXVpZCB3YXRlcmNvbG9yIHBhaW50IzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjI0LjAwI0xpcXVpZCB3YXRlcmNvbG9yIGZyaXNrZXQgcGFpbnQjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuMjUuMDAjV2F0ZXJjb2xvciBwYWludGluZyBtZWRpdW1zIzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjI2LjAwI1dhdGVyY29sb3IgYnJ1c2hlcyM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4yNy4wMCNPcmllbnRhbCBicnVzaGVzIzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjI4LjAwI1V0aWxpdHkgYnJ1c2hlcyM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4yOS4wMCNTcGVjaWFsdHkgYnJ1c2hlcyM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4zMC4wMCNFYXNlbCBicnVzaGVzIzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjMxLjAwI1BhbGV0dGUga25pdmVzIzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEyLjMyLjAwI0JyYXllcnMgZm9yIGhhbmQgcHJpbnRpbmcjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuMzMuMDAjU3BvbmdlIHN0YW1wcyM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4zNC4wMCNTY3JhcGVycyBmb3IgcGFpbnQgYXBwbGljYXRpb24jNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuMzUuMDAjUGlwZXR0ZXMgZm9yIHBhaW50IG9yIGR5ZSBtaXhpbmcjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuMzYuMDAjQ29tYnMgb3IgdG9vbHMgZm9yIHBhaW50IG9yIGluayBhcHBsaWNhdGlvbiM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4zNy4wMCNQYWxldHRlcyBmb3IgcGFpbnQgb3IgaW5rIG1peGluZyM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4zOC4wMCNQYWludCBwb3RzIGZvciBwYWludCBzdG9yYWdlIG9yIG1peGluZyM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi4zOS4wMCNQYWludCBjdXBzIG9yIGJvdHRsZXMjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuNDEuMDAjQnJ1c2ggb3IgdG9vbCBjbGVhbmVycyM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi40Mi4wMCNQYWludCBhcHJvbnMjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuNDMuMDAjQXJ0aXN0cyBTbW9ja3MjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuNDQuMDAjU3RyZXRjaGVyIHN0cmlwcyM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi40NS4wMCNDYW52YXMgc3RyZXRjaGVycyM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi40Ni4wMCNNZXRhbCBlYXNlbHMjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuNDcuMDAjV29vZCBlYXNlbHMjNjAuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTIuNDguMDAjVGFibGUgdG9wIGVhc2VscyM2MC4xMi4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMi40OS4wMCNQcmVzZW50YXRpb24gZWFzZWxzIzYwLjEyLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEzLjAwLjAwI0FydCBhbmQgY3JhZnQgY3V0dGluZyBwcm9kdWN0cyM2MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMy4wMS4wMCNHdWlsbG90aW5lIHBhcGVyIHRyaW1tZXJzIzYwLjEyLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEzLjAyLjAwI01hdCBjdXR0ZXIjNjAuMTIuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTMuMDMuMDAjTWF0IGtuaXZlcyM2MC4xMi4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMi4xMy4wNC4wMCNBcnRpc3Qga25pdmVzIzYwLjEyLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEzLjA1LjAwI1JvdGFyeSBwYXBlciBvciBmYWJyaWMgY3V0dGVyIzYwLjEyLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEyLjEzLjA2LjAwI0NpcmNsZSBvciBvdmFsIHBhcGVyIGN1dHRlcnMjNjAuMTIuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTQuMDAuMDAjUGljdHVyZSBGcmFtaW5nIzYwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjE0LjAxLjAwI1ByZSBhc3NlbWJsZWQgd29vZCBwaWN0dXJlIGZyYW1lcyM2MC4xMi4xNC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNC4wMi4wMCNXb29kIHNlY3Rpb24gcGljdHVyZSBmcmFtZXMjNjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTQuMDMuMDAjUHJlIGFzc2VtYmxlZCBtZXRhbCBwaWN0dXJlIGZyYW1lcyM2MC4xMi4xNC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNC4wNC4wMCNNZXRhbCBzZWN0aW9uIHBpY3R1cmUgZnJhbWVzIzYwLjEyLjE0LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE0LjA1LjAwI0FkanVzdGFibGUgcGljdHVyZSBmcmFtZXMjNjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTQuMDYuMDAjUGxhc3RpYyBwaWN0dXJlIGZyYW1lcyM2MC4xMi4xNC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNC4wNy4wMCNDbGVhciBib3ggcGljdHVyZSBmcmFtZSM2MC4xMi4xNC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNC4wOC4wMCNQb2ludCBkcml2ZXJzIG9yIGFjY2Vzc29yaWVzIGZvciBwaWN0dXJlIGZyYW1lcyM2MC4xMi4xNC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNC4wOS4wMCNNaXRyZSBib3gjNjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTQuMTAuMDAjUGljdHVyZSBIYW5naW5nIGRldmljZXMjNjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTQuMTEuMDAjQWNyeWxpYyBwYW5lbHMgZm9yIHBpY3R1cmUgZnJhbWVzIzYwLjEyLjE0LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE0LjEyLjAwI0dsYXNzIHBhbmVscyBmb3IgcGljdHVyZSBmcmFtZXMjNjAuMTIuMTQuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTUuMDAuMDAjRHJhd2luZyB0b29scyBhbmQgc3VwcGxpZXMgYW5kIGFjY2Vzc29yaWVzIzYwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjE1LjAxLjAwI1dhdGVyIGJhc2VkIG1hcmtlcnMjNjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTUuMDIuMDAjU29sdmVudCBiYXNlZCBtYXJrZXJzIzYwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE1LjAzLjAwI1dhc2hhYmxlIG1hcmtlcnMjNjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTUuMDQuMDAjQ2FsbGlncmFwaHkgbWFya2VycyM2MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNS4wNS4wMCNGYWJyaWMgbWFya2VycyM2MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNS4wNi4wMCNNZXRhbGxpYyBtYXJrZXJzIzYwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE1LjA3LjAwI1RlbXBlcmEgb3IgY2hhbGsgd2luZG93IG1hcmtlcnMjNjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTUuMDguMDAjUGFpbnQgbWFya2VycyM2MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNS4wOS4wMCNXYXggYmFzZWQgY3JheW9ucyM2MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNS4xMC4wMCNTb3kgYmFzZWQgY3JheW9ucyM2MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNS4xMS4wMCNTcGVjaWFsdHkgY3JheW9ucyM2MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNS4xMi4wMCNXYXRlcmNvbG9yIGNyYXlvbnMjNjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTUuMTMuMDAjRHJ5IHBhc3RlbCM2MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNS4xNC4wMCNDaGFsayBwYXN0ZWwjNjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTUuMTUuMDAjT2lsIGJhc2VkIHBhc3RlbCM2MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNS4xNi4wMCNDb21wcmVzc2VkIGNoYXJjb2FsIzYwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE1LjE3LjAwI1ZpbmUgY2hhcmNvYWwjNjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTUuMTguMDAjR3JhcGhpdGUgcGVuY2lscyM2MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNS4xOS4wMCNXYXggYmFzZWQgY29sb3JlZCBkcmF3aW5nIHBlbmNpbHMjNjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTUuMjAuMDAjQ2hhcmNvYWwgcGVuY2lscyM2MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNS4yMS4wMCNXYXRlcmNvbG9yIHBlbmNpbHMjNjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTUuMjIuMDAjV2F0ZXJiYXNlZCBwZW5zIzYwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE1LjIzLjAwI1Blcm1hbmVudCBwZW5zIzYwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE1LjI0LjAwI0dlbCBwZW5zIzYwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE1LjI1LjAwI1RlY2huaWNhbCBwZW5zIzYwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE1LjI2LjAwI0NhbGxpZ3JhcGh5IHBlbnMjNjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTUuMjguMDAjV2F0ZXIgYmFzZWQgZHJhd2luZyBpbmsjNjAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTUuMjkuMDAjU29sdmVudCBiYXNlZCBkcmF3aW5nIGluayM2MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNS4zMC4wMCNDYWxsaWdyYXBoeSBkcmF3aW5nIGluayM2MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNS4zMS4wMCNQaW5rIHBlbmNpbCBlcmFzZXJzIzYwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE1LjMyLjAwI0tuZWFkZWQgZXJhc2VycyM2MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNS4zMy4wMCNWaW55bCBlcmFzZXJzIzYwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE1LjM0LjAwI1BsYXN0aWMgZXJhc2VycyM2MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNS4zNS4wMCNHdW0gZXJhc2VycyM2MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNi4wMC4wMCNTdHVkaW8gYWlkcyM2MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNi4wMS4wMCNXb29kIE1hbm5lcXVpbnMjNjAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTYuMDIuMDAjQ2xlYXIgYWNyeWxpYyBtaXJyb3JzIG9yIHBhbmVscyM2MC4xMi4xNi4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNi4wMy4wMCNQbGFzdGljIFJ1YmJpbmcgcGxhdGVzIzYwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE2LjA0LjAwI1N0dWRpbyBhaWQgYWNjZXNzb3JpZXMjNjAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTYuMDUuMDAjQW5hdG9taWNhbCBtb2RlbHMjNjAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTcuMDAuMDAjUHJpbnRtYWtpbmcgc3VwcGxpZXMgYW5kIGFjY2Vzc29yaWVzIzYwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjE3LjAxLjAwI1J1YmJlciBzdGFtcGluZyBzdGFtcHMjNjAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTcuMDIuMDAjUnViYmVyIHN0YW1waW5nIHN0YW1wIHBhZHMjNjAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTcuMDMuMDAjUnViYmVyIHN0YW1waW5nIGFjY2Vzc29yaWVzIzYwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE3LjA0LjAwI0xpbm9sZXVtIGZvciBibG9jayBwcmludGluZyM2MC4xMi4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNy4wNS4wMCNXb29kIGJsb2NrcyBmb3IgcHJpbnRpbmcjNjAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTcuMDYuMDAjU3ludGhldGljIGJsb2NrcyBmb3IgcHJpbnRpbmcjNjAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTcuMDcuMDAjQmxvY2sgcHJpbnRpbmcgYWNjZXNzb3JpZXMjNjAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTcuMDguMDAjSW50YWdsaW8gb3IgbGl0aG9ncmFwaHkgcGxhdGVzIzYwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE3LjA5LjAwI0ludGFnbGlvIG9yIGxpdGhvZ3JhcGh5IGJsYW5rZXRzIzYwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE3LjEwLjAwI0ludGFnbGlvIG9yIGxpdGhvZ3JhcGh5IHdpcGVzIzYwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE3LjExLjAwI0ludGFnbGlvIG9yIGxpdGhvZ3JhcGh5IGhvdCBwbGF0ZXMjNjAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTcuMTIuMDAjSW50YWdsaW8gb3IgbGl0aG9ncmFwaHkgcHJpbnRpbmcgcHJlc3NlcyM2MC4xMi4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMi4xNy4xMy4wMCNQcmludGluZyBCYXJlbnMgYW5kIEJyYXllcnMjNjAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTcuMTQuMDAjSW50YWdsaW8gRXRjaGluZyBvciBlbmdyYXZpbmcgdG9vbHMjNjAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTcuMTUuMDAjU2lsa3NjcmVlbiBzY3JlZW5zIG9yIHByaW50aW5nIHN0YXRpb25zIzYwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE3LjE2LjAwI1NpbGtzY3JlZW4gYWNjZXNzb3JpZXMjNjAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTguMDAuMDAjUHJpbnRpbmcgYW5kIGRyYXdpbmcgaW5rcyM2MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xOC4wMS4wMCNXYXRlciBiYXNlZCBwb3N0ZXIgaW5rcyM2MC4xMi4xOC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xOC4wMi4wMCNXYXRlciBiYXNlZCBhY3J5bGljIGlua3MjNjAuMTIuMTguMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTguMDMuMDAjT2lsIGJhc2VkIHNpbGtzY3JlZW4gaW5rcyM2MC4xMi4xOC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xOC4wNC4wMCNXYXRlciBiYXNlZCBUZXh0aWxlIGlua3MjNjAuMTIuMTguMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTguMDUuMDAjT2lsIGJhc2VkIHRleHRpbGUgaW5rcyM2MC4xMi4xOC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xOC4wNi4wMCNQcmludG1ha2luZyBzdWJsaW1hdGlvbiBpbmtzIzYwLjEyLjE4LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE4LjA3LjAwI09pbCBiYXNlZCBpbnRhZ2xpbyBvciBsaXRob2dyYXBoeSBpbmtzIzYwLjEyLjE4LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE4LjA4LjAwI09pbCBiYXNlZCBtb25vcHJpbnQgaW5rcyM2MC4xMi4xOC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xOC4wOS4wMCNXYXRlciBiYXNlZCBtb25vcHJpbnQgaW5rcyM2MC4xMi4xOC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xOC4xMC4wMCNXYXRlciBiYXNlZCBkcmF3aW5nIGlua3MjNjAuMTIuMTguMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTguMTEuMDAjU29sdmVudCBiYXNlZCBkcmF3aW5nIGlua3MjNjAuMTIuMTguMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTguMTIuMDAjQ2FsbGlncmFwaHkgZHJhd2luZyBpbmtzIzYwLjEyLjE4LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE4LjEzLjAwI1NpbGtzY3JlZW4gaW5rcyM2MC4xMi4xOC4wMC4wMAotdW5zcHNjNyM2MC4xMi4xOS4wMC4wMCNBcnQgZmFicmljIGFuZCBmYWJyaWMgZGVjb3JhdGlvbiBtYXRlcmlhbHMgYW5kIHN1cHBsaWVzIzYwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjE5LjAxLjAwI011c2xpbiM2MC4xMi4xOS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xOS4wMi4wMCNGZWx0IzYwLjEyLjE5LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE5LjAzLjAwI0NyYWZ0IGZ1ciM2MC4xMi4xOS4wMC4wMAotdW5zcHNjNyM2MC4xMi4xOS4wNC4wMCNDb3R0b24gYmxlbmRzIzYwLjEyLjE5LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE5LjA1LjAwI0NhbnZhcyBpbXByaW50YWJsZXMjNjAuMTIuMTkuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTkuMDYuMDAjUHJlIHNlbnNpdGl6ZWQgaW1wcmludGFibGVzIzYwLjEyLjE5LjAwLjAwCi11bnNwc2M3IzYwLjEyLjE5LjA3LjAwI0NvdHRvbiBpbXByaW50YWJsZXMjNjAuMTIuMTkuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTkuMDguMDAjQmxlbmRlZCBpbXByaW50YWJsZXMjNjAuMTIuMTkuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTkuMDkuMDAjQmF0aWsgd2F4ZXMjNjAuMTIuMTkuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTkuMTAuMDAjQmF0aWsgYWNjZXNzb3JpZXMjNjAuMTIuMTkuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMTkuMTEuMDAjQmF0aWsgZmFicmljIzYwLjEyLjE5LjAwLjAwCi11bnNwc2M3IzYwLjEyLjIwLjAwLjAwI1Nld2luZyBhbmQgc3RpdGNoZXJ5IGFuZCB3ZWF2aW5nIGVxdWlwbWVudCBhbmQgYWNjZXNzb3JpZXMjNjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjAuMDEuMDAjV2VhdmluZyBvciB0YXBlc3RyeSBuZWVkbGVzIzYwLjEyLjIwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjIwLjAyLjAwI1dlYXZpbmcgYWNjZXNzb3JpZXMjNjAuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjAuMDMuMDAjSGFuZCBzZXdpbmcgbmVlZGxlcyM2MC4xMi4yMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4yMC4wNC4wMCNTdHJpbmcgYXJ0IGtpdHMjNjAuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjAuMDUuMDAjSGFuZCBsb29tcyM2MC4xMi4yMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4yMC4wNi4wMCNUYWJsZSBsb29tcyM2MC4xMi4yMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4yMC4wNy4wMCNGbG9vciBsb29tcyM2MC4xMi4yMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4yMC4wOC4wMCNSZXhsYWNlIzYwLjEyLjIwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjIwLjA5LjAwI0xhY2luZyBvciBzdHJpbmdpbmcgYWNjZXNzb3JpZXMjNjAuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjEuMDAuMDAjQ2FuZGxlbWFraW5nIzYwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjIxLjAxLjAwI0NhbmRsZW1ha2luZyB3aWNrcyM2MC4xMi4yMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4yMS4wMi4wMCNDYW5kbGVtYWtpbmcgZm9ybXMjNjAuMTIuMjEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjEuMDMuMDAjQ2FuZGxlbWFraW5nIGFjY2Vzc29yaWVzIzYwLjEyLjIxLjAwLjAwCi11bnNwc2M3IzYwLjEyLjIyLjAwLjAwI1dvb2QgY3JhZnRzIzYwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjIyLjAxLjAwI1dvb2QgY3JhZnQgbWF0ZXJpYWxzIzYwLjEyLjIyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjIyLjAyLjAwI0ZpbmlzaGluZyBtYXRlcmlhbHMjNjAuMTIuMjIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjIuMDMuMDAjV29vZCBidXJuaW5nIHRvb2xzIzYwLjEyLjIyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjIyLjA0LjAwI0NhcnZpbmcgdG9vbHMjNjAuMTIuMjIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjMuMDAuMDAjQmFza2V0cnkgbWFraW5nIHN1cHBsaWVzIzYwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjIzLjAxLjAwI0Jhc2tldHJ5IHJlZWQjNjAuMTIuMjMuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjMuMDIuMDAjQmFza2V0cnkgcHJvamVjdCBraXRzIzYwLjEyLjIzLjAwLjAwCi11bnNwc2M3IzYwLjEyLjI0LjAwLjAwI1N0YWluZWQgZ2xhc3MgbWFraW5nIHN1cHBsaWVzIzYwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjI0LjAxLjAwI1N0YWluZWQgR2xhc3MgZnJhZ21lbnRzIzYwLjEyLjI0LjAwLjAwCi11bnNwc2M3IzYwLjEyLjI0LjAyLjAwI1N0YWluZWQgZ2xhc3MgdG9vbHMgb3IgYWNjZXNzb3JpZXMjNjAuMTIuMjQuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjUuMDAuMDAjUGFwZXIgY3JhZnRzIGFuZCBoYW5kIG1hZGUgcGFwZXJtYWtpbmcjNjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjUuMDEuMDAjUGFwZXIgc2hhcGluZyB0b29scyM2MC4xMi4yNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4yNS4wMi4wMCNQYXBlciBwaWN0dXJlIGZyYW1lcyM2MC4xMi4yNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4yNS4wMy4wMCNQYXBlciBwbGF0ZXMgb3IgdHJheXMjNjAuMTIuMjUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjUuMDQuMDAjUGFwZXIgZmlsdGVycyM2MC4xMi4yNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4yNS4wNS4wMCNDb3JydWdhdGVkIGNhcmRib2FyZCBzaGFwZXMjNjAuMTIuMjUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjUuMDYuMDAjUGFwZXIgRG9pbGllcyM2MC4xMi4yNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4yNS4wNy4wMCNEZWNrbGVzIG9yIG1vbGRzIGZvciBoYW5kIG1hZGUgcGFwZXIjNjAuMTIuMjUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjUuMDguMDAjQ291Y2ggc2hlZXRzIG9yIGZlbHRzIGZvciBoYW5kIG1hZGUgcGFwZXIjNjAuMTIuMjUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjUuMDkuMDAjUHVscCBvciByYXcgbWF0ZXJpYWxzIGZvciBoYW5kIG1hZGUgcGFwZXIjNjAuMTIuMjUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjYuMDAuMDAjTW9zYWljcyM2MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4yNi4wMS4wMCNNb3NhaWMgdGlsZXMjNjAuMTIuMjYuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjYuMDIuMDAjTW9zYWljIG1vbGRzIzYwLjEyLjI2LjAwLjAwCi11bnNwc2M3IzYwLjEyLjI2LjAzLjAwI01vc2FpYyB0b29scyM2MC4xMi4yNi4wMC4wMAotdW5zcHNjNyM2MC4xMi4yNi4wNC4wMCNNb3NhaWMgYWNjZXNzb3JpZXMjNjAuMTIuMjYuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjcuMDAuMDAjRW5hbWVsaW5nIHBhaW50cyBhbmQgYWNjZXNzb3JpZXMjNjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjcuMDEuMDAjRW5hbWVsaW5nIHBhaW50cyBvciBtZWRpdW1zIzYwLjEyLjI3LjAwLjAwCi11bnNwc2M3IzYwLjEyLjI3LjAyLjAwI0NvcHBlciBzaGFwZXMjNjAuMTIuMjcuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjcuMDMuMDAjRW5hbWVsaW5nIGFjY2Vzc29yaWVzIzYwLjEyLjI3LjAwLjAwCi11bnNwc2M3IzYwLjEyLjI3LjA0LjAwI0VuYW1lbGluZyBLaWxucyM2MC4xMi4yNy4wMC4wMAotdW5zcHNjNyM2MC4xMi4yOC4wMC4wMCNNYXNrbWFraW5nIzYwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjI4LjAxLjAwI01hc2ttYWtpbmcgZm9ybXMjNjAuMTIuMjguMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjkuMDAuMDAjQmVhZHMgb3IgYmVhZGluZyBhY2Nlc3NvcmllcyM2MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4yOS4wMS4wMCNTZWVkIGJlYWRzIzYwLjEyLjI5LjAwLjAwCi11bnNwc2M3IzYwLjEyLjI5LjAyLjAwI1BvbnkgYmVhZHMjNjAuMTIuMjkuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjkuMDMuMDAjV29vZCBiZWFkcyM2MC4xMi4yOS4wMC4wMAotdW5zcHNjNyM2MC4xMi4yOS4wNC4wMCNTdHJhdyBiZWFkcyM2MC4xMi4yOS4wMC4wMAotdW5zcHNjNyM2MC4xMi4yOS4wNS4wMCNDZXJhbWljIGJlYWRzIzYwLjEyLjI5LjAwLjAwCi11bnNwc2M3IzYwLjEyLjI5LjA2LjAwI0dsYXNzIGJlYWRzIzYwLjEyLjI5LjAwLjAwCi11bnNwc2M3IzYwLjEyLjI5LjA3LjAwI0Fzc29ydGVkIG9yIGRlY29yYXRpdmUgYmVhZHMjNjAuMTIuMjkuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMjkuMDguMDAjQmVhZCBhY2Nlc3NvcmllcyM2MC4xMi4yOS4wMC4wMAotdW5zcHNjNyM2MC4xMi4zMC4wMC4wMCNGb2FtIGNyYWZ0cyM2MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4zMC4wMS4wMCNTdHlyb2ZvYW0gc2hhcGVzIzYwLjEyLjMwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjMwLjAyLjAwI1Rvb2xzIGZvciBmb2FtIGNyYWZ0cyM2MC4xMi4zMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4zMS4wMC4wMCNDaGVuaWxsZSBzdGVtIGNyYWZ0cyM2MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4zMS4wMS4wMCNKdW1ibyBjaGVuaWxsZSBzdGVtcyM2MC4xMi4zMS4wMC4wMAotdW5zcHNjNyM2MC4xMi4zMS4wMi4wMCNDb3R0b24gY2hlbmlsbGUgc3RlbXMjNjAuMTIuMzEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMzEuMDMuMDAjQnVtcHMgY2hlbmlsbGUgc3RlbXMjNjAuMTIuMzEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMzIuMDAuMDAjUmliYm9uIG1ha2luZyBtYXRlcmlhbHMjNjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMzIuMDEuMDAjUGFwZXIgcmliYm9ucyM2MC4xMi4zMi4wMC4wMAotdW5zcHNjNyM2MC4xMi4zMi4wMi4wMCNTaWxrIHJpYmJvbnMjNjAuMTIuMzIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMzIuMDMuMDAjU3ludGhldGljIHJpYmJvbnMjNjAuMTIuMzIuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMzIuMDQuMDAjRGVjb3JhdGl2ZSByaWJib25zIzYwLjEyLjMyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjMzLjAwLjAwI0NyYWZ0IFBvbXMjNjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMzMuMDEuMDAjQWNyeWxpYyBjcmFmdCBwb21zIzYwLjEyLjMzLjAwLjAwCi11bnNwc2M3IzYwLjEyLjMzLjAyLjAwI0dsaXR0ZXIgY3JhZnQgcG9tcyM2MC4xMi4zMy4wMC4wMAotdW5zcHNjNyM2MC4xMi4zMy4wMy4wMCNDcmFmdCBwb20gYmVhZHojNjAuMTIuMzMuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMzQuMDAuMDAjV2lnZ2xlIGV5ZXMgbWF0ZXJpYWxzIzYwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjM0LjAxLjAwI05vbiBzZWxmIGFkaGVzaXZlIHdpZ2dsZSBleWVzIzYwLjEyLjM0LjAwLjAwCi11bnNwc2M3IzYwLjEyLjM0LjAyLjAwI1NlbGYgYWRoZXNpdmUgd2lnZ2xlIGV5ZXMjNjAuMTIuMzQuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMzQuMDMuMDAjRGVjb3JhdGl2ZSB3aWdnbGUgZXllcyM2MC4xMi4zNC4wMC4wMAotdW5zcHNjNyM2MC4xMi4zNS4wMC4wMCNMZWF0aGVyIGNyYWZ0IG1hdGVyaWFscyM2MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4zNS4wMS4wMCNMZWF0aGVyIG9yIGxlYXRoZXIgbGFjaW5nIG1hdGVyaWFscyM2MC4xMi4zNS4wMC4wMAotdW5zcHNjNyM2MC4xMi4zNS4wMi4wMCNMZWF0aGVyIGFjY2Vzc29yaWVzIzYwLjEyLjM1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjM2LjAwLjAwI0dsaXR0ZXIjNjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMzYuMDEuMDAjR2xpdHRlciBnbHVlIzYwLjEyLjM2LjAwLjAwCi11bnNwc2M3IzYwLjEyLjM2LjAyLjAwI0dsaXR0ZXIgZG90cyM2MC4xMi4zNi4wMC4wMAotdW5zcHNjNyM2MC4xMi4zNi4wMy4wMCNHbGl0dGVyIGpld2VscyM2MC4xMi4zNi4wMC4wMAotdW5zcHNjNyM2MC4xMi4zNi4wNC4wMCNQbGFzdGljIGdsaXR0ZXIjNjAuMTIuMzYuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMzYuMDUuMDAjSXJyaWRlc2NlbnQgZ2xpdHRlciM2MC4xMi4zNi4wMC4wMAotdW5zcHNjNyM2MC4xMi4zNi4wNi4wMCNNZXRhbGxpYyBnbGl0dGVyIzYwLjEyLjM2LjAwLjAwCi11bnNwc2M3IzYwLjEyLjM3LjAwLjAwI01hY3JhbWUgY3JhZnQgbWF0ZXJpYWxzIGFuZCBhY2Nlc3NvcmllcyM2MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4zNy4wMS4wMCNNYWNyYW1lIGNvcmQjNjAuMTIuMzcuMDAuMDAKLXVuc3BzYzcjNjAuMTIuMzcuMDIuMDAjTWFjcmFtZSBiZWFkcyM2MC4xMi4zNy4wMC4wMAotdW5zcHNjNyM2MC4xMi4zNy4wMy4wMCNNYWNyYW1lIGFjY2Vzc29yaWVzIzYwLjEyLjM3LjAwLjAwCi11bnNwc2M3IzYwLjEyLjM4LjAwLjAwI01hcmJsaW5nIHN1cHBsaWVzIGFuZCBhY2Nlc3NvcmllcyM2MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMi4zOC4wMS4wMCNNYXJibGluZyBpbmtzIzYwLjEyLjM4LjAwLjAwCi11bnNwc2M3IzYwLjEyLjM4LjAyLjAwI01hcmJsaW5nIGFjY2Vzc29yaWVzIzYwLjEyLjM4LjAwLjAwCi11bnNwc2M3IzYwLjEyLjM5LjAwLjAwI1NlcXVpbnMgYW5kIHRyaW1zIzYwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjM5LjAxLjAwI0RlY29yYXRpdmUgc2VxdWlucyBvciB0cmltcyM2MC4xMi4zOS4wMC4wMAotdW5zcHNjNyM2MC4xMi40MC4wMC4wMCNDb3JrIGNyYWZ0IHN1cHBsaWVzIGFuZCBhY2Nlc3NvcmllcyM2MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMi40MC4wMS4wMCNDb3JrIHNoZWV0cyM2MC4xMi40MC4wMC4wMAotdW5zcHNjNyM2MC4xMi40MC4wMi4wMCNDb3JrIHN0b3BwZXJzIzYwLjEyLjQwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjQxLjAwLjAwI011bHRpY3VsdHVyYWwgcHJvamVjdCBtYXRlcmlhbHMgYW5kIGFjY2Vzc29yaWVzIzYwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjQxLjAxLjAwI011bHRpY3VsdHVyYWwgcGFpbnRpbmcgcHJvZHVjdHMjNjAuMTIuNDEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDEuMDIuMDAjTXVsdGljdWx0dXJhbCBjcmFmdHMgcHJvZHVjdHMjNjAuMTIuNDEuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDIuMDAuMDAjQ3Jvc3MgY3VycmljdWxhciBwcm9qZWN0cyM2MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMi40Mi4wMS4wMCNNeWxhciBzY3VscHR1cmVzIzYwLjEyLjQyLjAwLjAwCi11bnNwc2M3IzYwLjEyLjQzLjAwLjAwI0NsYXkgYW5kIG1vZGVsaW5nIGNvbXBvdW5kcyBhbmQgY2VyYW1pY3MgZXF1aXBtZW50IGFuZCBhY2Nlc3NvcmllcyM2MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMi40My4wMS4wMCNNb2lzdCBraWxuIGZpcmVkIGNsYXkjNjAuMTIuNDMuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDMuMDIuMDAjRHJ5IGtpbG4gZmlyZWQgY2xheSM2MC4xMi40My4wMC4wMAotdW5zcHNjNyM2MC4xMi40My4wMy4wMCNLaWxuIGZ1cm5pdHVyZSM2MC4xMi40My4wMC4wMAotdW5zcHNjNyM2MC4xMi40My4wNC4wMCNLaWxucyBmb3IgZmlyaW5nIGNlcmFtaWNzIzYwLjEyLjQzLjAwLjAwCi11bnNwc2M3IzYwLjEyLjQzLjA1LjAwI0tpbG4gYWNjZXNzb3JpZXMgZm9yIGZpcmluZyBjZXJhbWljcyM2MC4xMi40My4wMC4wMAotdW5zcHNjNyM2MC4xMi40My4wNi4wMCNQb3R0ZXJzIHdoZWVscyBmb3IgaGFuZCBtYWRlIGNlcmFtaWNzIzYwLjEyLjQzLjAwLjAwCi11bnNwc2M3IzYwLjEyLjQzLjA3LjAwI0V4dHJ1ZGVycyBmb3IgbW9kZWxpbmcgbWF0ZXJpYWxzIzYwLjEyLjQzLjAwLjAwCi11bnNwc2M3IzYwLjEyLjQzLjA4LjAwI0NvbmVzIGZvciBmaXJpbmcga2lsbnMjNjAuMTIuNDMuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDMuMDkuMDAjUG90dGVyeSBCYXR0cyM2MC4xMi40My4wMC4wMAotdW5zcHNjNyM2MC4xMi40My4xMC4wMCNEZWNvcmF0aW5nIHdoZWVscyBmb3IgcG90dGVyeSM2MC4xMi40My4wMC4wMAotdW5zcHNjNyM2MC4xMi40My4xMS4wMCNDbGF5IG9yIG1vZGVsaW5nIHRvb2xzIzYwLjEyLjQzLjAwLjAwCi11bnNwc2M3IzYwLjEyLjQzLjEyLjAwI0ZpcmVkIGNlcmFtaWMgdGlsZXMjNjAuMTIuNDMuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDMuMTMuMDAjQ2xheSBzdG9yYWdlIGNvbnRhaW5lcnMjNjAuMTIuNDMuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDMuMTQuMDAjUGxhc2ljaXplZCBub24gaGFyZGVuaW5nIG1vZGVsaW5nIGNvbXBvdW5kcyM2MC4xMi40My4wMC4wMAotdW5zcHNjNyM2MC4xMi40My4xNS4wMCNPaWxiYXNlZCBub25oYXJkZW5pbmcgbW9kZWxpbmcgY29tcG91bmRzIzYwLjEyLjQzLjAwLjAwCi11bnNwc2M3IzYwLjEyLjQzLjE2LjAwI0FpciBkcnkgY2xheSBvciBtb2RlbGluZyBjb21wb3VuZHMjNjAuMTIuNDMuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDMuMTcuMDAjTW9kZWxpbmcgZG91Z2gjNjAuMTIuNDMuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDMuMTguMDAjUGFwaWVyIE1hY2hlIzYwLjEyLjQzLjAwLjAwCi11bnNwc2M3IzYwLjEyLjQzLjE5LjAwI1NwZWNpYWx0eSBtb2RlbGluZyBjb21wb3VuZHMjNjAuMTIuNDMuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDMuMjAuMDAjUGxhc3RlciBjb21wb3VuZHMjNjAuMTIuNDMuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDMuMjEuMDAjT3ZlbiBoYXJkZW5pbmcgY2xheSBvciBtb2RlbGluZyBjb21wb3VuZHMjNjAuMTIuNDMuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDMuMjIuMDAjUGxhc3RpYyBtb2RlbGluZyBjb21wb3VuZHMjNjAuMTIuNDMuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDMuMjMuMDAjQ2FzdHMgb3IgbW9sZHMgZm9yIHNoYXBpbmcgbW9kZWxpbmcgY29tcG91bmRzIzYwLjEyLjQzLjAwLjAwCi11bnNwc2M3IzYwLjEyLjQ0LjAwLjAwI0FydCBtZXRhbHMjNjAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDQuMDEuMDAjQ29wcGVyIHRvb2xpbmcgZm9pbCM2MC4xMi40NC4wMC4wMAotdW5zcHNjNyM2MC4xMi40NC4wMi4wMCNBbHVtaW51bSB0b29saW5nIGZvaWwjNjAuMTIuNDQuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDQuMDMuMDAjQWx1bWludW0gd2lyZSM2MC4xMi40NC4wMC4wMAotdW5zcHNjNyM2MC4xMi40NC4wNC4wMCNCcmFzcyB0b29saW5nIGZvaWwjNjAuMTIuNDQuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDQuMDUuMDAjQnJhc3Mgd2lyZSM2MC4xMi40NC4wMC4wMAotdW5zcHNjNyM2MC4xMi40NC4wNi4wMCNTaWx2ZXIgc2hlZXRzIG9yIHBsYXRlcyM2MC4xMi40NC4wMC4wMAotdW5zcHNjNyM2MC4xMi40NC4wNy4wMCNTaWx2ZXIgd2lyZSM2MC4xMi40NC4wMC4wMAotdW5zcHNjNyM2MC4xMi40NC4wOC4wMCNQZXd0ZXIgcGVsbGV0cyBvciBzaG90cyM2MC4xMi40NC4wMC4wMAotdW5zcHNjNyM2MC4xMi40NC4wOS4wMCNQZXd0ZXIgaW5nb3RzIzYwLjEyLjQ0LjAwLjAwCi11bnNwc2M3IzYwLjEyLjQ0LjEwLjAwI051IGdvbGQgc2hlZXRzIHBsYXRlcyM2MC4xMi40NC4wMC4wMAotdW5zcHNjNyM2MC4xMi40NC4xMS4wMCNOdSBnb2xkIHdpcmUjNjAuMTIuNDQuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDQuMTIuMDAjR2FsdmFuaXplZCBzdG92ZXBpcGUgd2lyZSM2MC4xMi40NC4wMC4wMAotdW5zcHNjNyM2MC4xMi40NS4wMC4wMCNTY3VscHR1cmUgc3VwcGxpZXMgYW5kIGFjY2Vzc29yaWVzIzYwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEyLjQ1LjAxLjAwI1BsYXN0ZXIgd3JhcCM2MC4xMi40NS4wMC4wMAotdW5zcHNjNyM2MC4xMi40NS4wMi4wMCNDYXN0aW5nIHJlc2lucyM2MC4xMi40NS4wMC4wMAotdW5zcHNjNyM2MC4xMi40NS4wMy4wMCNTY3VscHR1cmUgYWNjZXNzb3JpZXMjNjAuMTIuNDUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDUuMDQuMDAjUHV6emxlIHJhY2tzIzYwLjEyLjQ1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjQ1LjA1LjAwI0J1YmJsZXMgb3IgYWNjZXNzb3JpZXMjNjAuMTIuNDUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDUuMDYuMDAjUGxhc3RpYyBzYW5kIG9yIHdhdGVyIHRvb2xzIG9yIG1vbGRzIG9yIHRveXMjNjAuMTIuNDUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDUuMDcuMDAjUGxheSBzYW5kIzYwLjEyLjQ1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjQ1LjA4LjAwI1NhbmQgb3Igd2F0ZXIgdGFibGVzIG9yIGFjdGl2aXR5IGNlbnRlcnMjNjAuMTIuNDUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDUuMDkuMDAjVmVoaWNsZSBzZXRzIzYwLjEyLjQ1LjAwLjAwCi11bnNwc2M3IzYwLjEyLjQ1LjEwLjAwI1dhdGVyd2F5IHNldHMjNjAuMTIuNDUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDUuMTEuMDAjUGxheSB0b29scyBvciBwbGF5IHRvb2wga2l0cyM2MC4xMi40NS4wMC4wMAotdW5zcHNjNyM2MC4xMi40NS4xMi4wMCNTY29vdGVyIGJvYXJkcyM2MC4xMi40NS4wMC4wMAotdW5zcHNjNyM2MC4xMi40NS4xMy4wMCNCZWFuYmFncyM2MC4xMi40NS4wMC4wMAotdW5zcHNjNyM2MC4xMi40NS4xNC4wMCNUYWN0aWxlIHRveXMjNjAuMTIuNDUuMDAuMDAKLXVuc3BzYzcjNjAuMTIuNDUuMTUuMDAjQ29nbml0aXZlIHRveXMjNjAuMTIuNDUuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMDAuMDAuMDAjTXVzaWNhbCBJbnN0cnVtZW50cyBhbmQgcGFydHMgYW5kIGFjY2Vzc29yaWVzIzYwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEzLjEwLjAwLjAwI0tleWJvYXJkIGluc3RydW1lbnRzIzYwLjEzLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEzLjEwLjAxLjAwI1BpYW5vcyM2MC4xMy4xMC4wMC4wMAotdW5zcHNjNyM2MC4xMy4xMC4wMi4wMCNBY2NvcmRpb25zIzYwLjEzLjEwLjAwLjAwCi11bnNwc2M3IzYwLjEzLjEwLjAzLjAwI011c2ljYWwgb3JnYW5zIzYwLjEzLjEwLjAwLjAwCi11bnNwc2M3IzYwLjEzLjExLjAwLjAwI0JyYXNzIGluc3RydW1lbnRzIzYwLjEzLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEzLjExLjAxLjAwI1RydW1wZXRzIzYwLjEzLjExLjAwLjAwCi11bnNwc2M3IzYwLjEzLjExLjAyLjAwI1Ryb21ib25lcyM2MC4xMy4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMy4xMS4wMy4wMCNTb3VzYXBob25lcyM2MC4xMy4xMS4wMC4wMAotdW5zcHNjNyM2MC4xMy4xMS4wNC4wMCNTYXhvcGhvbmVzIzYwLjEzLjExLjAwLjAwCi11bnNwc2M3IzYwLjEzLjExLjA1LjAwI1doaXN0bGUjNjAuMTMuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTIuMDAuMDAjV29vZHdpbmQgaW5zdHJ1bWVudHMjNjAuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTIuMDEuMDAjQ2xhcmluZXRzIzYwLjEzLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEzLjEyLjAyLjAwI09ib2VzIzYwLjEzLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEzLjEyLjAzLjAwI011c2ljYWwgZmx1dGVzIzYwLjEzLjEyLjAwLjAwCi11bnNwc2M3IzYwLjEzLjEyLjA0LjAwI1BpY2NvbG9lcyM2MC4xMy4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMy4xMi4wNS4wMCNNdXNpY2FsIGNvcm5ldHMjNjAuMTMuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTIuMDYuMDAjQmFncGlwZXMjNjAuMTMuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTIuMDcuMDAjSGFybW9uaWNhcyM2MC4xMy4xMi4wMC4wMAotdW5zcHNjNyM2MC4xMy4xMi4wOC4wMCNLYXpvb3MjNjAuMTMuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTMuMDAuMDAjU3RyaW5nIGluc3RydW1lbnRzIzYwLjEzLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEzLjEzLjAxLjAwI0hhcnBzaWNob3JkcyM2MC4xMy4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMy4xMy4wMi4wMCNDbGF2aWNob3JkcyM2MC4xMy4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMy4xMy4wMy4wMCNHdWl0YXJzIzYwLjEzLjEzLjAwLjAwCi11bnNwc2M3IzYwLjEzLjEzLjA0LjAwI1Zpb2xpbnMjNjAuMTMuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTMuMDUuMDAjSGFycHMjNjAuMTMuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTMuMDYuMDAjQmFuam9lcyM2MC4xMy4xMy4wMC4wMAotdW5zcHNjNyM2MC4xMy4xNC4wMC4wMCNQZXJjdXNzaW9uIGluc3RydW1lbnRzIzYwLjEzLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEzLjE0LjAxLjAwI0N5bWJhbHMjNjAuMTMuMTQuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTQuMDIuMDAjQmVsbHMjNjAuMTMuMTQuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTQuMDMuMDAjVGFtYm91cmluZXMjNjAuMTMuMTQuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTQuMDQuMDAjQ2FzdGFuZXRzIzYwLjEzLjE0LjAwLjAwCi11bnNwc2M3IzYwLjEzLjE0LjA1LjAwI0RydW1zIzYwLjEzLjE0LjAwLjAwCi11bnNwc2M3IzYwLjEzLjE0LjA2LjAwI1h5bG9waG9uZXMjNjAuMTMuMTQuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTUuMDAuMDAjTXVzaWNhbCBpbnN0cnVtZW50IHBhcnRzIGFuZCBhY2Nlc3NvcmllcyM2MC4xMy4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMy4xNS4wMS4wMCNNZXRyb25vbWVzIzYwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEzLjE1LjAyLjAwI1JlZWRzIzYwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEzLjE1LjAzLjAwI0luc3RydW1lbnQgc3RyaW5ncyBvciBwaWNrcyM2MC4xMy4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMy4xNS4wNC4wMCNUdW5pbmcgcGlucyM2MC4xMy4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMy4xNS4wNS4wMCNNdXNpY2FsIGluc3RydW1lbnQgc3RhbmRzIG9yIHNoZWV0IGhvbGRlcnMjNjAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTUuMDYuMDAjQWNjZXNzb3JpZXMgZm9yIHN0cmluZ2VkIGluc3RydW1lbnRzIzYwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzYwLjEzLjE1LjA3LjAwI1BlcmN1c3Npb24gaW5zdHJ1bWVudCBhY2Nlc3NvcnkjNjAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTUuMDguMDAjTXVzaWMgYm94ZXMgb3IgbWVjaGFuaXNtcyM2MC4xMy4xNS4wMC4wMAotdW5zcHNjNyM2MC4xMy4xNi4wMC4wMCNNdXNpY2FsIGluc3RydW1lbnQgc2V0cyM2MC4xMy4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMy4xNi4wMS4wMCNSaHl0aG0gYmFuZCBzZXRzIzYwLjEzLjE2LjAwLjAwCi11bnNwc2M3IzYwLjEzLjE3LjAwLjAwI0FsdGVybmF0aXZlIHNvdW5kcyBtdXNpY2FsIGluc3RydW1lbnRzIzYwLjEzLjAwLjAwLjAwCi11bnNwc2M3IzYwLjEzLjE3LjAxLjAwI0Jvb213aGFja2VycyM2MC4xMy4xNy4wMC4wMAotdW5zcHNjNyM2MC4xMy4xNy4wMi4wMCNEaXNjbyB0YXBzIzYwLjEzLjE3LjAwLjAwCi11bnNwc2M3IzYwLjEzLjE4LjAwLjAwI011c2ljIGFuZCBkYW5jZSBhY2Nlc3NvcmllcyM2MC4xMy4wMC4wMC4wMAotdW5zcHNjNyM2MC4xMy4xOC4wMS4wMCNEYW5jaW5nIHNjYXJ2ZXMjNjAuMTMuMTguMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTguMDIuMDAjUmh5dGhtIHN0aWNrcyBvciBsdW1taSBzdGlja3MjNjAuMTMuMTguMDAuMDAKLXVuc3BzYzcjNjAuMTMuMTguMDMuMDAjUmh5dGhtIHdhbmRzIG9yIGhvb3BzIzYwLjEzLjE4LjAwLjAwCi11bnNwc2M3IzYwLjE0LjAwLjAwLjAwI1RveXMgYW5kIGdhbWVzIzYwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzYwLjE0LjEwLjAwLjAwI1RveXMjNjAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTAuMDEuMDAjVG95IGJhbGxvb25zIG9yIGJhbGxzIzYwLjE0LjEwLjAwLjAwCi11bnNwc2M3IzYwLjE0LjEwLjAyLjAwI0RvbGxzIzYwLjE0LjEwLjAwLjAwCi11bnNwc2M3IzYwLjE0LjEwLjAzLjAwI0RvbGwgaG91c2VzIzYwLjE0LjEwLjAwLjAwCi11bnNwc2M3IzYwLjE0LjEwLjA0LjAwI1N0dWZmZWQgYW5pbWFscyBvciBwdXBwZXRzIzYwLjE0LjEwLjAwLjAwCi11bnNwc2M3IzYwLjE0LjEwLjA1LjAwI1BsYXlob3VzZXMjNjAuMTQuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTAuMDYuMDAjQnVpbGRpbmcgYmxvY2tzIzYwLjE0LjEwLjAwLjAwCi11bnNwc2M3IzYwLjE0LjEwLjA3LjAwI1JpZGluZyB0b3lzIzYwLjE0LjEwLjAwLjAwCi11bnNwc2M3IzYwLjE0LjEwLjA4LjAwI1B1bGwgdG95cyM2MC4xNC4xMC4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMC4wOS4wMCNDaGlsZHJlbnMgc2NpZW5jZSBraXRzIzYwLjE0LjEwLjAwLjAwCi11bnNwc2M3IzYwLjE0LjEwLjEwLjAwI1RveSB2ZWhpY2xlcyM2MC4xNC4xMC4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMC4xMS4wMCNUb3kgdHJhaW5zIzYwLjE0LjEwLjAwLjAwCi11bnNwc2M3IzYwLjE0LjEwLjEyLjAwI0luZmxhdGFibGUgdG95cyM2MC4xNC4xMC4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMC4xMy4wMCNEb2xsIHBhcnRzIG9yIGFjY2Vzc29yaWVzIzYwLjE0LjEwLjAwLjAwCi11bnNwc2M3IzYwLjE0LjEwLjE0LjAwI1lvIHlvcyM2MC4xNC4xMC4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMC4xNS4wMCNLaXRlcyM2MC4xNC4xMC4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMC4xNi4wMCNQb2dzIzYwLjE0LjEwLjAwLjAwCi11bnNwc2M3IzYwLjE0LjEwLjE3LjAwI0thbGVpZG9zY29wZXMjNjAuMTQuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTAuMTguMDAjUG9tIHBvbXMjNjAuMTQuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTAuMTkuMDAjUGluYXRhcyM2MC4xNC4xMC4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMC4yMC4wMCNCb29tZXJhbmdzIzYwLjE0LjEwLjAwLjAwCi11bnNwc2M3IzYwLjE0LjEwLjIxLjAwI0ZseWluZyBkaXNjcyM2MC4xNC4xMC4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMC4yMi4wMCNUb3kgcGFpbHMjNjAuMTQuMTAuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTEuMDAuMDAjR2FtZXMjNjAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTEuMDEuMDAjRWR1Y2F0aW9uYWwgZ2FtZXMjNjAuMTQuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTEuMDIuMDAjQm9hcmQgZ2FtZXMjNjAuMTQuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTEuMDMuMDAjUGxheWluZyBjYXJkcyM2MC4xNC4xMS4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMS4wNC4wMCNWaWRlbyBnYW1lcyM2MC4xNC4xMS4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMS4wNS4wMCNQdXp6bGVzIzYwLjE0LjExLjAwLjAwCi11bnNwc2M3IzYwLjE0LjExLjA2LjAwI0RpY2UjNjAuMTQuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTEuMDcuMDAjQmluZ28jNjAuMTQuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTEuMDguMDAjQ2xhc3NpYyBnYW1lcyM2MC4xNC4xMS4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMS4wOS4wMCNDb2xsYWJvcmF0aXZlIGdhbWVzIzYwLjE0LjExLjAwLjAwCi11bnNwc2M3IzYwLjE0LjExLjEwLjAwI1N0cmF0ZWd5IGdhbWVzIzYwLjE0LjExLjAwLjAwCi11bnNwc2M3IzYwLjE0LjExLjExLjAwI0dhbWUgYWNjZXNzb3JpZXMjNjAuMTQuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTEuMTIuMDAjR2FtZSBib29rcyM2MC4xNC4xMS4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMS4xMy4wMCNMb3R0byBnYW1lcyM2MC4xNC4xMS4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMS4xNC4wMCNNZW1vcnkgZ2FtZXMjNjAuMTQuMTEuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTIuMDAuMDAjQWN0aXZlIFBsYXkgZXF1aXBtZW50IGFuZCBhY2Nlc3NvcmllcyM2MC4xNC4wMC4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMi4wMS4wMCNCYWxhbmNlIG9yIGdyb3NzIG1vdG9yIGVxdWlwbWVudCM2MC4xNC4xMi4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMi4wMi4wMCNCYWxsIHBvb2xzIG9yIGFjY2Vzc29yaWVzIzYwLjE0LjEyLjAwLjAwCi11bnNwc2M3IzYwLjE0LjEyLjAzLjAwI1BsYXkgaG91c2VzIG9yIGh1dHMjNjAuMTQuMTIuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTIuMDQuMDAjVHJpa2VzIG9yIHdhZ29ucyM2MC4xNC4xMi4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMi4wNS4wMCNTb2Z0IHBsYXkgY2VudGVycyM2MC4xNC4xMi4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMy4wMC4wMCNDaGlsZHJlbnMgYmxvY2tzIGFuZCBidWlsZGluZyBzeXN0ZW1zIzYwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzYwLjE0LjEzLjAyLjAwI0NvbnN0cnVjdGlvbiBzZXRzIzYwLjE0LjEzLjAwLjAwCi11bnNwc2M3IzYwLjE0LjEzLjAzLjAwI1BsYXltYXRzIzYwLjE0LjEzLjAwLjAwCi11bnNwc2M3IzYwLjE0LjEzLjA0LjAwI1JhaWxwbGF5IHN5c3RlbXMgb3IgYWNjZXNzb3JpZXMjNjAuMTQuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTMuMDUuMDAjVW5pdCBibG9ja3MjNjAuMTQuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTMuMDYuMDAjUGxheSB2ZWhpY2xlcyM2MC4xNC4xMy4wMC4wMAotdW5zcHNjNyM2MC4xNC4xMy4wNy4wMCNQbGF5IGFuaW1hbHMjNjAuMTQuMTMuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTQuMDAuMDAjRHJhbWF0aWMgcGxheSBlcXVpcG1lbnQgYW5kIGFjY2Vzc29yaWVzIzYwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzYwLjE0LjE0LjAxLjAwI0Nvc3R1bWVzIG9yIGFjY2Vzc29yaWVzIzYwLjE0LjE0LjAwLjAwCi11bnNwc2M3IzYwLjE0LjE0LjAyLjAwI0RyZXNzIHVwIENlbnRlcnMjNjAuMTQuMTQuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTQuMDMuMDAjSG91c2VrZWVwaW5nIHVuaXRzIG9yIGFjY2Vzc29yaWVzIzYwLjE0LjE0LjAwLjAwCi11bnNwc2M3IzYwLjE0LjE0LjA0LjAwI1BsYXkgZm9vZCBkaXNoZXMgb3IgYWNjZXNzb3JpZXMjNjAuMTQuMTQuMDAuMDAKLXVuc3BzYzcjNjAuMTQuMTQuMDUuMDAjUHJldGVuZCBwbGF5IGtpdHMgb3Igc3VwcGxpZXMjNjAuMTQuMTQuMDAuMDAKLXVuc3BzYzcjNzAuMDAuMDAuMDAuMDAjRmFybWluZyBhbmQgRmlzaGluZyBhbmQgRm9yZXN0cnkgYW5kIFdpbGRsaWZlIENvbnRyYWN0aW5nIFNlcnZpY2VzIzcwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzcwLjEwLjAwLjAwLjAwI0Zpc2hlcmllcyBhbmQgYXF1YWN1bHR1cmUjNzAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTUuMDAuMDAjRmlzaGVyaWVzIG9wZXJhdGlvbnMjNzAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTUuMDEuMDAjQ29tbWVyY2lhbCBmaXNoaW5nIG9wZXJhdGlvbnMjNzAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTUuMDIuMDAjRmlzaGluZyBwb3J0IHNlcnZpY2VzIzcwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzcwLjEwLjE1LjAzLjAwI0Zpc2hpbmcgb25zaG9yZSBmYWNpbGl0aWVzIzcwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzcwLjEwLjE1LjA0LjAwI0RlZXAgc2VhIGZpc2hpbmcgb3BlcmF0aW9ucyM3MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM3MC4xMC4xNS4wNS4wMCNTb25hciBmaXNoaW5nIzcwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzcwLjEwLjE1LjA2LjAwI1doYWxpbmcjNzAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTUuMDcuMDAjVHJhd2xpbmcjNzAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTUuMDguMDAjTGluZSBmaXNoaW5nIzcwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzcwLjEwLjE1LjA5LjAwI1NlaW5lIG9wZXJhdGlvbnMjNzAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTUuMTAuMDAjRmlzaGluZyBuZXRzIzcwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzcwLjEwLjE2LjAwLjAwI0Zpc2hlcmllcyBvdmVyc2lnaHQjNzAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTYuMDEuMDAjRmlzaGVyeSBpbmZvcm1hdGlvbiBvciBkb2N1bWVudGF0aW9uIHNlcnZpY2VzIzcwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzcwLjEwLjE2LjAyLjAwI0Zpc2hlcnkgcmVzZWFyY2ggb3IgZXhwZXJpbWVudGF0aW9uIHNlcnZpY2VzIzcwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzcwLjEwLjE2LjAzLjAwI0Zpc2hlcnkgZGF0YSBjb2xsZWN0aW9uIG9yIGRpc3RyaWJ1dGlvbiM3MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM3MC4xMC4xNi4wNC4wMCNGaXNoZXJ5IGNvbW1lcmNpYWwgbWFuYWdlbWVudCM3MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM3MC4xMC4xNi4wNS4wMCNGaXNoaW5nIGZsZWV0IG1hbmFnZW1lbnQjNzAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTYuMDYuMDAjRmlzaGluZyBjb29wZXJhdGl2ZXMjNzAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTYuMDcuMDAjRmlzaGVyeSByZXNvdXJjZXMgcHJvdGVjdGlvbiBvciBjb25zZXJ2YXRpb24jNzAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTcuMDAuMDAjRmlzaGVyeSBpbmR1c3RyeSBhbmQgdGVjaG5vbG9neSM3MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM3MC4xMC4xNy4wMS4wMCNGaXNoaW5nIHRlY2hub2xvZ3kgc2VydmljZXMjNzAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTcuMDIuMDAjRmlzaGVyeSBieSBwcm9kdWN0cyBwcm9kdWN0aW9uIHNlcnZpY2VzIzcwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzcwLjEwLjE3LjAzLjAwI0Zpc2ggcHJvZHVjdGlvbiM3MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM3MC4xMC4xNy4wNC4wMCNGaXNoIHN0b3JhZ2UjNzAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTguMDAuMDAjRmlzaGVyaWVzIHJlc291cmNlcyM3MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM3MC4xMC4xOC4wMS4wMCNJbmxhbmQgd2F0ZXIgZmlzaGVyeSByZXNvdXJjZXMjNzAuMTAuMTguMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTguMDIuMDAjRmlzaCBwb25kIHJlc291cmNlcyM3MC4xMC4xOC4wMC4wMAotdW5zcHNjNyM3MC4xMC4xOC4wMy4wMCNGaXNoIGhhdGNoZXJpZXMjNzAuMTAuMTguMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTguMDQuMDAjRmlzaCByYW5jaGVzIzcwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzcwLjEwLjE4LjA1LjAwI0Zpc2hlcnkgYnkgcHJvZHVjdCByZXNvdXJjZXMjNzAuMTAuMTguMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTguMDYuMDAjRmlzaGVyaWVzIHJlc291cmNlIGV2YWx1YXRpb24jNzAuMTAuMTguMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTkuMDAuMDAjQXF1YWN1bHR1cmUjNzAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTkuMDEuMDAjTWFyaWN1bHR1cmUjNzAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNzAuMTAuMTkuMDIuMDAjT3N0cmVpY3VsdHVyZSM3MC4xMC4xOS4wMC4wMAotdW5zcHNjNyM3MC4xMC4xOS4wMy4wMCNTaGVsbGZpc2ggY3VsdHVyZSM3MC4xMC4xOS4wMC4wMAotdW5zcHNjNyM3MC4xMC4xOS4wNC4wMCNTaHJpbXAgZmFybWluZyM3MC4xMC4xOS4wMC4wMAotdW5zcHNjNyM3MC4xMC4xOS4wNS4wMCNGaXNoIGZhcm1pbmcjNzAuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNzAuMTEuMDAuMDAuMDAjSG9ydGljdWx0dXJlIzcwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzcwLjExLjE1LjAwLjAwI1BsYW50cyBhbmQgb3JuYW1lbnRhbCB0cmVlcyM3MC4xMS4wMC4wMC4wMAotdW5zcHNjNyM3MC4xMS4xNS4wMS4wMCNQbGFudGluZyBzZXJ2aWNlcyBvciBvcm5hbWVudGFsIHBsYW50IG9yIGJ1c2ggb3IgdHJlZSM3MC4xMS4xNS4wMC4wMAotdW5zcHNjNyM3MC4xMS4xNS4wMi4wMCNQcnVuaW5nIHNlcnZpY2VzIG9yIG9ybmFtZW50YWwgcGxhbnQgb3IgYnVzaCM3MC4xMS4xNS4wMC4wMAotdW5zcHNjNyM3MC4xMS4xNS4wMy4wMCNUcmVlIHRyaW1taW5nIHNlcnZpY2VzIzcwLjExLjE1LjAwLjAwCi11bnNwc2M3IzcwLjExLjE1LjA0LjAwI0JyYWNpbmcgc2VydmljZXMjNzAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTEuMTUuMDUuMDAjVHJlZSBzdXJnZXJ5IHNlcnZpY2VzIzcwLjExLjE1LjAwLjAwCi11bnNwc2M3IzcwLjExLjE1LjA2LjAwI0FyYm9yaXN0IHNlcnZpY2VzIzcwLjExLjE1LjAwLjAwCi11bnNwc2M3IzcwLjExLjE1LjA3LjAwI1JlbW92YWwgc2VydmljZXMgb3Igb3JuYW1lbnRhbCBwbGFudCBvciBidXNoIG9yIHRyZWUjNzAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTEuMTUuMDguMDAjUGxhbnRzIG9yIG9ybmFtZW50YWwgdHJlZSBzcHJheWluZyBzZXJ2aWNlcyM3MC4xMS4xNS4wMC4wMAotdW5zcHNjNyM3MC4xMS4xNi4wMC4wMCNGbG93ZXJpbmcgcGxhbnRzIzcwLjExLjAwLjAwLjAwCi11bnNwc2M3IzcwLjExLjE2LjAxLjAwI1BsYW50aW5nIHNlcnZpY2VzIzcwLjExLjE2LjAwLjAwCi11bnNwc2M3IzcwLjExLjE2LjAyLjAwI051cnNlcnkgc2VydmljZXMjNzAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTEuMTYuMDMuMDAjRmxvcmljdWx0dXJlIHNlcnZpY2VzIzcwLjExLjE2LjAwLjAwCi11bnNwc2M3IzcwLjExLjE3LjAwLjAwI1BhcmtzIGFuZCBnYXJkZW5zIGFuZCBvcmNoYXJkcyM3MC4xMS4wMC4wMC4wMAotdW5zcHNjNyM3MC4xMS4xNy4wMS4wMCNPcmNoYXJkIG1hbmFnZW1lbnQgb3IgbWFpbnRlbmFuY2Ugc2VydmljZXMjNzAuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTEuMTcuMDIuMDAjVmluZXlhcmQgbWFuYWdlbWVudCBvciBtYWludGVuYW5jZSBzZXJ2aWNlcyM3MC4xMS4xNy4wMC4wMAotdW5zcHNjNyM3MC4xMS4xNy4wMy4wMCNHYXJkZW4gcGxhbnRpbmcgb3IgbWFpbnRlbmFuY2Ugc2VydmljZXMjNzAuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTEuMTcuMDQuMDAjSG9ydGljdWx0dXJhbCBjb3Vuc2VsaW5nIHNlcnZpY2VzIzcwLjExLjE3LjAwLjAwCi11bnNwc2M3IzcwLjExLjE3LjA1LjAwI0NlbWV0ZXJ5IHVwa2VlcCBzZXJ2aWNlcyM3MC4xMS4xNy4wMC4wMAotdW5zcHNjNyM3MC4xMS4xNy4wNi4wMCNMYXduIGNhcmUgc2VydmljZXMjNzAuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTEuMTcuMDcuMDAjSGlnaHdheSBsYXduIG1haW50ZW5hbmNlIHNlcnZpY2VzIzcwLjExLjE3LjAwLjAwCi11bnNwc2M3IzcwLjExLjE3LjA4LjAwI011bGNoaW5nIHNlcnZpY2VzIzcwLjExLjE3LjAwLjAwCi11bnNwc2M3IzcwLjExLjE3LjA5LjAwI1NlZWRpbmcgc2VydmljZXMjNzAuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTEuMTcuMTAuMDAjTW93aW5nIHNlcnZpY2VzIzcwLjExLjE3LjAwLjAwCi11bnNwc2M3IzcwLjExLjE3LjExLjAwI1NwcmlnZ2luZyBzZXJ2aWNlcyM3MC4xMS4xNy4wMC4wMAotdW5zcHNjNyM3MC4xMS4xNy4xMi4wMCNQYXJrcyBvciBnYXJkZW5zIHNwcmF5aW5nIHNlcnZpY2VzIzcwLjExLjE3LjAwLjAwCi11bnNwc2M3IzcwLjExLjE3LjEzLjAwI1BhcmtzIG1hbmFnZW1lbnQgb3IgbWFpbnRlbmFuY2Ugc2VydmljZXMjNzAuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTIuMDAuMDAuMDAjTGl2ZXN0b2NrIHNlcnZpY2VzIzcwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzcwLjEyLjE1LjAwLjAwI0RhaXJ5aW5nIzcwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzcwLjEyLjE1LjAxLjAwI0RhaXJ5IGhlcmQgbWFuYWdlbWVudCM3MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM3MC4xMi4xNS4wMi4wMCNEYWlyeSBpbmR1c3RyeSBkZXZlbG9wbWVudCM3MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM3MC4xMi4xNS4wMy4wMCNEYWlyeSB0ZWNobm9sb2d5IzcwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzcwLjEyLjE1LjA0LjAwI0RhaXJ5IGxhYm9yYXRvcmllcyBzZXJ2aWNlcyM3MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM3MC4xMi4xNS4wNS4wMCNEYWlyeSBmYXJtIGluIGhvdXNlIHByb2Nlc3NpbmcjNzAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTIuMTYuMDAuMDAjTGl2ZXN0b2NrIGluZHVzdHJ5IzcwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzcwLjEyLjE2LjAxLjAwI0xpdmVzdG9jayBicmVlZGluZyM3MC4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MC4xMi4xNi4wMi4wMCNMaXZlc3RvY2sgZ2VuZXRpY3Mgc2VydmljZXMjNzAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTIuMTYuMDMuMDAjU2VyaWN1bHR1cmUjNzAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTIuMTYuMDQuMDAjQW5pbWFsIGh1c2JhbmRyeSM3MC4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MC4xMi4xNi4wNS4wMCNGYXJtIHJlYXJpbmcgc3lzdGVtcyM3MC4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MC4xMi4xNi4wNi4wMCNQb3VsdHJ5IHByb2R1Y3Rpb24gc2VydmljZXMjNzAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTIuMTYuMDcuMDAjU21hbGwgYW5pbWFsIGJyZWVkaW5nIHNlcnZpY2VzIzcwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcwLjEyLjE2LjA4LjAwI0JvdmluZSBwcm9kdWN0aW9uIHNlcnZpY2VzIzcwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcwLjEyLjE2LjEwLjAwI0FwaWN1bHR1cmUjNzAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTIuMTcuMDAuMDAjTGl2ZXN0b2NrIG1hbmFnZW1lbnQjNzAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTIuMTcuMDEuMDAjTGl2ZXN0b2NrIHNlbGVjdGlvbiM3MC4xMi4xNy4wMC4wMAotdW5zcHNjNyM3MC4xMi4xNy4wMi4wMCNMaXZlc3RvY2sgc2hvd2luZyBzZXJ2aWNlcyM3MC4xMi4xNy4wMC4wMAotdW5zcHNjNyM3MC4xMi4xNy4wMy4wMCNMaXZlc3RvY2sgc2xhdWdodGVyaW5nIHNlcnZpY2VzIzcwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzcwLjEyLjE3LjA0LjAwI0hlcmQgbWFuYWdlbWVudCM3MC4xMi4xNy4wMC4wMAotdW5zcHNjNyM3MC4xMi4xNy4wNS4wMCNMaXZlc3RvY2sgYnJlZWRpbmcgb3IgZ3Jvb21pbmcgc2VydmljZXMjNzAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTIuMTguMDAuMDAjUGV0cyBpbmR1c3RyeSM3MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM3MC4xMi4xOC4wMS4wMCNQZXQgYnJlZWRpbmcgc2VydmljZXMjNzAuMTIuMTguMDAuMDAKLXVuc3BzYzcjNzAuMTIuMTguMDIuMDAjUGV0IGdyb29taW5nIHNlcnZpY2VzIzcwLjEyLjE4LjAwLjAwCi11bnNwc2M3IzcwLjEyLjE4LjAzLjAwI0tlbm5lbHMgc2VydmljZXMjNzAuMTIuMTguMDAuMDAKLXVuc3BzYzcjNzAuMTIuMTkuMDAuMDAjUGFzdHVyZSBhbmQgcmFuZ2Ugc2VydmljZXMjNzAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTIuMTkuMDEuMDAjUGFzdHVyZSBpbXByb3ZlbWVudCM3MC4xMi4xOS4wMC4wMAotdW5zcHNjNyM3MC4xMi4xOS4wMi4wMCNSYW5nZSBtYW5hZ2VtZW50IzcwLjEyLjE5LjAwLjAwCi11bnNwc2M3IzcwLjEyLjE5LjAzLjAwI1JhbmdlIHJlc2VhcmNoIzcwLjEyLjE5LjAwLjAwCi11bnNwc2M3IzcwLjEyLjIwLjAwLjAwI0FuaW1hbCBoZWFsdGgjNzAuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTIuMjAuMDEuMDAjQW5pbWFsIG51dHJpdGlvbiM3MC4xMi4yMC4wMC4wMAotdW5zcHNjNyM3MC4xMi4yMC4wMi4wMCNBbmltYWwgZGlzZWFzZSBjb250cm9sIzcwLjEyLjIwLjAwLjAwCi11bnNwc2M3IzcwLjEyLjIwLjAzLjAwI0FuaW1hbCB0cnlwYW5vc29taWFzaXMjNzAuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNzAuMTIuMjAuMDQuMDAjRm9vdCBvciBtb3V0aCBjb250cm9sIHNlcnZpY2VzIzcwLjEyLjIwLjAwLjAwCi11bnNwc2M3IzcwLjEyLjIwLjA1LjAwI0FuaW1hbCBoZWFsdGggcHJldmVudGl2ZSBtZWRpY2F0aW9uIHNlcnZpY2VzIzcwLjEyLjIwLjAwLjAwCi11bnNwc2M3IzcwLjEyLjIwLjA2LjAwI0FuaW1hbCB2YWNjaW5hdGlvbiBzZXJ2aWNlcyM3MC4xMi4yMC4wMC4wMAotdW5zcHNjNyM3MC4xMi4yMC4wNy4wMCNWZXRlcmluYXJ5IGFkbWluaXN0cmF0aW9uIzcwLjEyLjIwLjAwLjAwCi11bnNwc2M3IzcwLjEyLjIwLjA4LjAwI1ZldGVyaW5hcnkgbGFib3JhdG9yeSB0ZWNobm9sb2d5IzcwLjEyLjIwLjAwLjAwCi11bnNwc2M3IzcwLjEyLjIwLjA5LjAwI0FuaW1hbCBob3NwaXRhbCBzZXJ2aWNlcyM3MC4xMi4yMC4wMC4wMAotdW5zcHNjNyM3MC4xMi4yMC4xMC4wMCNBbmltYWwgaGVhbHRoIGluZm9ybWF0aW9uIHNlcnZpY2VzIzcwLjEyLjIwLjAwLjAwCi11bnNwc2M3IzcwLjEzLjAwLjAwLjAwI0xhbmQgYW5kIHNvaWwgcHJlcGFyYXRpb24gYW5kIG1hbmFnZW1lbnQgYW5kIHByb3RlY3Rpb24jNzAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTMuMTUuMDAuMDAjTGFuZCBhbmQgc29pbCBwcm90ZWN0aW9uIzcwLjEzLjAwLjAwLjAwCi11bnNwc2M3IzcwLjEzLjE1LjAxLjAwI0Rlc2VydGlmaWNhdGlvbiBhc3Nlc3NtZW50IG9yIGNvbnRyb2wgc2VydmljZXMjNzAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTMuMTUuMDIuMDAjU29pbCBjb25zZXJ2YXRpb24gb3IgcHJvdGVjdGlvbiBzZXJ2aWNlcyM3MC4xMy4xNS4wMC4wMAotdW5zcHNjNyM3MC4xMy4xNS4wMy4wMCNFcm9zaW9uIGNvbnRyb2wgc2VydmljZXMjNzAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTMuMTUuMDQuMDAjU2FuZCBkdW5lIGZpeGF0aW9uIzcwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzcwLjEzLjE1LjA1LjAwI1NvaWwgY29uZGl0aW9uaW5nIzcwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzcwLjEzLjE1LjA2LjAwI1NvaWwgaW1wcm92ZW1lbnQjNzAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTMuMTYuMDAuMDAjTGFuZCBhbmQgc29pbCBwcmVwYXJhdGlvbiM3MC4xMy4wMC4wMC4wMAotdW5zcHNjNyM3MC4xMy4xNi4wMS4wMCNGZXJ0aWxpemVyIGFwcGxpY2F0aW9uIHNlcnZpY2VzIzcwLjEzLjE2LjAwLjAwCi11bnNwc2M3IzcwLjEzLjE2LjAyLjAwI0xpbWUgc3ByZWFkaW5nIHNlcnZpY2VzIzcwLjEzLjE2LjAwLjAwCi11bnNwc2M3IzcwLjEzLjE2LjAzLjAwI1Bsb3dpbmcgc2VydmljZXMjNzAuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTMuMTYuMDQuMDAjU2VlZCBiZWQgcHJlcGFyYXRpb24gc2VydmljZXMjNzAuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTMuMTYuMDUuMDAjU29pbCBjaGVtaWNhbCB0cmVhdG1lbnQgc2VydmljZXMjNzAuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTMuMTcuMDAuMDAjTGFuZCBhbmQgc29pbCBtYW5hZ2VtZW50IzcwLjEzLjAwLjAwLjAwCi11bnNwc2M3IzcwLjEzLjE3LjAxLjAwI0xhbmQgdXNlIHBsYW5uaW5nIzcwLjEzLjE3LjAwLjAwCi11bnNwc2M3IzcwLjEzLjE3LjAyLjAwI0xhbmQgZXZhbHVhdGlvbiM3MC4xMy4xNy4wMC4wMAotdW5zcHNjNyM3MC4xMy4xNy4wMy4wMCNMYW5kIHJlY2xhbWF0aW9uIzcwLjEzLjE3LjAwLjAwCi11bnNwc2M3IzcwLjEzLjE3LjA0LjAwI0Fncm8gZWNvbG9naWNhbCB6b25lcyBhc3Nlc3NtZW50IG9yIHBsYW5uaW5nIzcwLjEzLjE3LjAwLjAwCi11bnNwc2M3IzcwLjEzLjE3LjA1LjAwI1NvaWwgY2xhc3NpZmljYXRpb24jNzAuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTMuMTcuMDYuMDAjV2F0ZXJzaGVkIG1hbmFnZW1lbnQjNzAuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTMuMTcuMDcuMDAjU29pbCBmZXJ0aWxpdHkgYW5hbHlzaXMjNzAuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTMuMTcuMDguMDAjUGVkb2xvZ3kjNzAuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMDAuMDAuMDAjQ3JvcCBwcm9kdWN0aW9uIGFuZCBtYW5hZ2VtZW50IGFuZCBwcm90ZWN0aW9uIzcwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzcwLjE0LjE1LjAwLjAwI0Nyb3AgcHJvZHVjdGlvbiM3MC4xNC4wMC4wMC4wMAotdW5zcHNjNyM3MC4xNC4xNS4wMS4wMCNTZWVkIHByb2R1Y3Rpb24gc2VydmljZXMjNzAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTUuMDIuMDAjSHlkcm9wb25pY3MjNzAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTUuMDMuMDAjR3Jhc3Mgb3IgZm9kZGVyIHByb2R1Y3Rpb24jNzAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTUuMDQuMDAjQXJvbWF0aWMgcGxhbnRzIHByb2R1Y3Rpb24jNzAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTUuMDUuMDAjQmV2ZXJhZ2UgY3JvcHMgcHJvZHVjdGlvbiM3MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM3MC4xNC4xNS4wNi4wMCNDb2NvYSBwcm9kdWN0aW9uIzcwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE1LjA3LjAwI1N1Z2FyYmVldCBvciBzdWdhcmNhbmUgcHJvZHVjdGlvbiM3MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM3MC4xNC4xNS4wOC4wMCNOdXQgcHJvZHVjdGlvbiM3MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM3MC4xNC4xNS4wOS4wMCNFc3NlbnRpYWwgb2lsIGNyb3BzIHByb2R1Y3Rpb24jNzAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTUuMTAuMDAjRmliZXIgY3JvcHMgcHJvZHVjdGlvbiM3MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM3MC4xNC4xNS4xMS4wMCNGcnVpdCBwcm9kdWN0aW9uIzcwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE1LjEyLjAwI0dyYWluIG9yIGxlZ3VtZSBwcm9kdWN0aW9uIzcwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE1LjEzLjAwI0luc2VjdGljaWRhbCBwbGFudHMgcHJvZHVjdGlvbiM3MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM3MC4xNC4xNS4xNC4wMCNNZWRpY2luYWwgcGxhbnRzIHByb2R1Y3Rpb24jNzAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTUuMTUuMDAjUm9vdHMgb3IgdHViZXJzIHByb2R1Y3Rpb24jNzAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTUuMTYuMDAjQ2VyZWFscyBwcm9kdWN0aW9uIzcwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE1LjE3LjAwI1J1YmJlciBwbGFudCBwcm9kdWN0aW9uIzcwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE1LjE4LjAwI1NwaWNlIGNyb3BzIHByb2R1Y3Rpb24jNzAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTUuMTkuMDAjVG9iYWNjbyBjcm9wIHByb2R1Y3Rpb24jNzAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTUuMjAuMDAjVmVnZXRhYmxlIHByb2R1Y3Rpb24jNzAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTYuMDAuMDAjQ3JvcCBwcm90ZWN0aW9uIzcwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzcwLjE0LjE2LjAxLjAwI0Nyb3Agc3ByYXlpbmcgc2VydmljZXMjNzAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTYuMDIuMDAjQmlvbG9naWNhbCBjb250cm9sIHNlcnZpY2VzIzcwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE2LjAzLjAwI1dlZWQgY29udHJvbCBzZXJ2aWNlcyM3MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM3MC4xNC4xNi4wNC4wMCNIZXJiaWNpZGUgc2VydmljZXMjNzAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTYuMDUuMDAjSW50ZWdyYXRlZCBwZXN0IG1hbmFnZW1lbnQgc2VydmljZXMjNzAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTYuMDYuMDAjUGxhbnQgcGF0aG9sb2d5IzcwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE2LjA3LjAwI0xvY3VzdCBjb250cm9sIzcwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE3LjAwLjAwI0Nyb3AgbWFuYWdlbWVudCM3MC4xNC4wMC4wMC4wMAotdW5zcHNjNyM3MC4xNC4xNy4wMS4wMCNHcmVlbmhvdXNlIHNlcnZpY2VzIzcwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE3LjAyLjAwI0ZlcnRpbGl6ZXIgc2VydmljZXMjNzAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTcuMDMuMDAjQ3JvcCBhZG1pbmlzdHJhdGlvbiM3MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM3MC4xNC4xNy4wNC4wMCNDcm9wIHN1YnN0aXR1dGlvbiM3MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM3MC4xNC4xNy4wNS4wMCNFeHRlbnNpb24gc2VydmljZXMjNzAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTcuMDYuMDAjQ3JvcCBzcGVjaWFsaXphdGlvbiM3MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM3MC4xNC4xNy4wNy4wMCNDdWx0aXZhdGlvbiBmYXJtaW5nIHN5c3RlbSBtYW5hZ2VtZW50IzcwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE3LjA4LjAwI0Nyb3Agcm90YXRpb24gb3IgZGl2ZXJzaWZpY2F0aW9uIGNvdW5zZWxpbmcgc2VydmljZXMjNzAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTcuMDkuMDAjUGxhbnQgdGF4b25vbXkgc2VydmljZXMjNzAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTcuMTAuMDAjRmllbGQgY3JvcCBlbnRvbW9sb2d5IzcwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE4LjAwLjAwI0Nyb3AgcGxhbnRpbmcgYW5kIGN1bHRpdmF0aW9uIzcwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzcwLjE0LjE4LjAxLjAwI09yY2hhcmQgdHJlZSBvciB2aW5lIHBsYW50aW5nIHNlcnZpY2VzIzcwLjE0LjE4LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE4LjAyLjAwI1Nwcm91dCBvciB0d2lnIHNlcnZpY2VzIzcwLjE0LjE4LjAwLjAwCi11bnNwc2M3IzcwLjE0LjE4LjAzLjAwI0Nyb3AgY3VsdGl2YXRpbmcgc2VydmljZXMjNzAuMTQuMTguMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTguMDQuMDAjQ3JvcCBwbGFudGluZyBzZXJ2aWNlcyM3MC4xNC4xOC4wMC4wMAotdW5zcHNjNyM3MC4xNC4xOS4wMC4wMCNDcm9wIGhhcnZlc3RpbmcjNzAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTkuMDEuMDAjQ2FzaCBncmFpbnMgaGFydmVzdGluZyBzZXJ2aWNlcyM3MC4xNC4xOS4wMC4wMAotdW5zcHNjNyM3MC4xNC4xOS4wMi4wMCNGcnVpdCBvciB0cmVlIG51dHMgaGFydmVzdGluZyBzZXJ2aWNlcyM3MC4xNC4xOS4wMC4wMAotdW5zcHNjNyM3MC4xNC4xOS4wMy4wMCNGaWVsZCBjcm9wIGhhcnZlc3Rpbmcgc2VydmljZXMjNzAuMTQuMTkuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMTkuMDQuMDAjU2VlZCBoYXJ2ZXN0aW5nIHNlcnZpY2VzIzcwLjE0LjE5LjAwLjAwCi11bnNwc2M3IzcwLjE0LjIwLjAwLjAwI1Bvc3QgaGFydmVzdGluZyBjcm9wIHByb2Nlc3NpbmcjNzAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMjAuMDEuMDAjU2lsb3MgcmVsYXRlZCBzZXJ2aWNlcyM3MC4xNC4yMC4wMC4wMAotdW5zcHNjNyM3MC4xNC4yMC4wMi4wMCNHcmFpbiBkcnllcnMgc2VydmljZXMjNzAuMTQuMjAuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMjAuMDMuMDAjQ3JvcCBwcm9jZXNzaW5nIHNlcnZpY2VzIzcwLjE0LjIwLjAwLjAwCi11bnNwc2M3IzcwLjE0LjIwLjA0LjAwI0ZpZWxkIGNyb3BzIG1hcmtldCBwcmVwYXJhdGlvbiBzZXJ2aWNlcyM3MC4xNC4yMC4wMC4wMAotdW5zcHNjNyM3MC4xNC4yMC4wNS4wMCNDYXNoIGdyYWluIGNyb3BzIG1hcmtldCBwcmVwYXJhdGlvbiBzZXJ2aWNlcyM3MC4xNC4yMC4wMC4wMAotdW5zcHNjNyM3MC4xNC4yMC4wNi4wMCNWZWdldGFibGUgY3JvcHMgbWFya2V0IHByZXBhcmF0aW9uIHNlcnZpY2VzIzcwLjE0LjIwLjAwLjAwCi11bnNwc2M3IzcwLjE0LjIwLjA3LjAwI0ZydWl0IGNyb3BzIG1hcmtldCBwcmVwYXJhdGlvbiBzZXJ2aWNlcyM3MC4xNC4yMC4wMC4wMAotdW5zcHNjNyM3MC4xNC4yMC4wOC4wMCNUcmVlIG51dCBjcm9wcyBtYXJrZXQgcHJlcGFyYXRpb24gc2VydmljZXMjNzAuMTQuMjAuMDAuMDAKLXVuc3BzYzcjNzAuMTQuMjAuMDkuMDAjR2lubmluZyBzZXJ2aWNlcyM3MC4xNC4yMC4wMC4wMAotdW5zcHNjNyM3MC4xNC4yMC4xMC4wMCNDcm9wIGNsZWFuaW5nIHNlcnZpY2VzIzcwLjE0LjIwLjAwLjAwCi11bnNwc2M3IzcwLjE0LjIwLjExLjAwI0Nvb2xpbmcgb3IgcmVmcmlnZXJhdGlvbiBzZXJ2aWNlcyM3MC4xNC4yMC4wMC4wMAotdW5zcHNjNyM3MC4xNC4yMC4xMi4wMCNTcHJheWluZyBzZXJ2aWNlcyM3MC4xNC4yMC4wMC4wMAotdW5zcHNjNyM3MC4xNS4wMC4wMC4wMCNGb3Jlc3RyeSM3MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM3MC4xNS4xNS4wMC4wMCNGb3Jlc3RyeSBtYW5hZ2VtZW50IzcwLjE1LjAwLjAwLjAwCi11bnNwc2M3IzcwLjE1LjE1LjAxLjAwI0ZvcmVzdCByZXNvdXJjZXMgbWFuYWdlbWVudCBzZXJ2aWNlcyM3MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM3MC4xNS4xNS4wMi4wMCNGb3Jlc3QgcGVzdCBjb250cm9sIzcwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE1LjAzLjAwI0ZvcmVzdCBvcmdhbml6YXRpb25zIG9yIGFzc29jaWF0aW9ucyBvciBjb29wZXJhdGl2ZXMjNzAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTUuMDQuMDAjRm9yZXN0IGFkbWluaXN0cmF0aW9uIHNlcnZpY2VzIzcwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE1LjA1LjAwI0ZvcmVzdCBpbnZlbnRvcnkjNzAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTUuMDYuMDAjRm9yZXN0IG1vbml0b3Jpbmcgb3IgZXZhbHVhdGlvbiM3MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM3MC4xNS4xNS4wNy4wMCNBZmZvcmVzdGF0aW9uIHNlcnZpY2VzIzcwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE1LjA4LjAwI0ZvcmVzdHJ5IGV4dGVuc2lvbiBzZXJ2aWNlcyM3MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM3MC4xNS4xNS4wOS4wMCNGb3Jlc3QgbnVyc2VyeSBtYW5hZ2VtZW50IzcwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE1LjEwLjAwI0ZvcmVzdCBzZWN0b3JhbCBwbGFubmluZyM3MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM3MC4xNS4xNi4wMC4wMCNGb3Jlc3RyeSBpbmR1c3RyeSM3MC4xNS4wMC4wMC4wMAotdW5zcHNjNyM3MC4xNS4xNi4wMS4wMCNOb253b29kIHByb2R1Y3Rpb24gc2VydmljZXMjNzAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTYuMDIuMDAjRXNzZW50aWFsIG9pbHMgcHJvZHVjdGlvbiM3MC4xNS4xNi4wMC4wMAotdW5zcHNjNyM3MC4xNS4xNi4wMy4wMCNUaW1iZXIgcHJvZHVjdGlvbiBzZXJ2aWNlcyM3MC4xNS4xNi4wMC4wMAotdW5zcHNjNyM3MC4xNS4xNi4wNC4wMCNEeWVzIHByb2R1Y3Rpb24jNzAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTYuMDUuMDAjRWRpYmxlIGZvcmVzdHJ5IHByb2R1Y3Rpb24jNzAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTYuMDYuMDAjV29vZCB0ZXN0aW5nIHNlcnZpY2VzIzcwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE2LjA3LjAwI1RpbWJlciBwcm9kdWN0aW9uIzcwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE3LjAwLjAwI0ZvcmVzdHJ5IGhhcnZlc3RpbmcjNzAuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTcuMDEuMDAjTG9nZ2luZyBvciBmZWxsaW5nIzcwLjE1LjE3LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE3LjAyLjAwI0ZvcmVzdCBoYXJ2ZXN0aW5nIG1vdW50YWlub3VzIGFyZWFzIzcwLjE1LjE3LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE3LjAzLjAwI0ZvcmVzdCBoYXJ2ZXN0aW5nIHNwZWNpYWxpemVkIG9wZXJhdGlvbnMjNzAuMTUuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTcuMDQuMDAjUGxhbnRhdGlvbiBoYXJ2ZXN0aW5nIzcwLjE1LjE3LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE3LjA1LjAwI1N3YW1wIG9yIG1hbmdyb3ZlIGZvcmVzdCBoYXJ2ZXN0aW5nIzcwLjE1LjE3LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE3LjA2LjAwI1RlbXBlcmF0ZSBmb3Jlc3QgaGFydmVzdGluZyM3MC4xNS4xNy4wMC4wMAotdW5zcHNjNyM3MC4xNS4xNy4wNy4wMCNUcm9waWNhbCBoaWdoIGZvcmVzdHMgaGFydmVzdGluZyM3MC4xNS4xNy4wMC4wMAotdW5zcHNjNyM3MC4xNS4xOC4wMC4wMCNGb3Jlc3RyeSBjb25zZXJ2YXRpb24gc2VydmljZXMjNzAuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTguMDEuMDAjQ29uc2VydmF0aW9uIG9mIGZvcmVzdCBnZW5ldGljIHJlc291cmNlcyM3MC4xNS4xOC4wMC4wMAotdW5zcHNjNyM3MC4xNS4xOC4wMi4wMCNGb3Jlc3QgcHJvdGVjdGlvbiBzZXJ2aWNlcyM3MC4xNS4xOC4wMC4wMAotdW5zcHNjNyM3MC4xNS4xOC4wMy4wMCNGb3Jlc3QgYXJpZCBsYW5kIHJlaGFiaWxpdGF0aW9uIzcwLjE1LjE4LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE4LjA0LjAwI0ZvcmVzdCB3aW5kIGJyZWFrcyBvciBzaGVsdGVyIGJlbHRzIzcwLjE1LjE4LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE4LjA1LjAwI0ZvcmVzdCByZXNlcnZlcyBvciBwYXJrcyBjb25zZXJ2YXRpb24gc2VydmljZXMjNzAuMTUuMTguMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTguMDYuMDAjRm9yZXN0cnkgd2F0ZXJzaGVkIG1hbmFnZW1lbnQjNzAuMTUuMTguMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTguMDcuMDAjRm9yZXN0cnkgdG9ycmVudCBjb250cm9sIzcwLjE1LjE4LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE5LjAwLjAwI0ZvcmVzdHJ5IHJlc291cmNlcyM3MC4xNS4wMC4wMC4wMAotdW5zcHNjNyM3MC4xNS4xOS4wMS4wMCNGb3Jlc3QgcmVzb3VyY2VzIGRldmVsb3BtZW50IzcwLjE1LjE5LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE5LjAyLjAwI0Fncm9mb3Jlc3RyeSByZXNvdXJjZXMjNzAuMTUuMTkuMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTkuMDMuMDAjRnVlbCB3b29kIHJlc291cmNlcyM3MC4xNS4xOS4wMC4wMAotdW5zcHNjNyM3MC4xNS4xOS4wNC4wMCNTaWx2aWN1bHR1cmUjNzAuMTUuMTkuMDAuMDAKLXVuc3BzYzcjNzAuMTUuMTkuMDUuMDAjQXJpZCByYWluZmVkIHBsYW50YXRpb24gcmVzb3VyY2VzIzcwLjE1LjE5LjAwLjAwCi11bnNwc2M3IzcwLjE1LjE5LjA2LjAwI0Jyb2FkIGxlYWZlZCBwbGFudGF0aW9uIHJlc291cmNlcyM3MC4xNS4xOS4wMC4wMAotdW5zcHNjNyM3MC4xNS4xOS4wNy4wMCNDb25pZmVycyBwbGFudGF0aW9ucyM3MC4xNS4xOS4wMC4wMAotdW5zcHNjNyM3MC4xNS4xOS4wOS4wMCNUcm9waWNhbCByYWluIGZvcmVzdCBwbGFudGF0aW9ucyM3MC4xNS4xOS4wMC4wMAotdW5zcHNjNyM3MC4xNS4xOS4xMC4wMCNNYW5ncm92ZSBzd2FtcHMgcmVzb3VyY2VzIzcwLjE1LjE5LjAwLjAwCi11bnNwc2M3IzcwLjE2LjAwLjAwLjAwI1dpbGRsaWZlIGFuZCBmbG9yYSM3MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM3MC4xNi4xNS4wMC4wMCNGYXVuYSM3MC4xNi4wMC4wMC4wMAotdW5zcHNjNyM3MC4xNi4xNS4wMS4wMCNGYXVuYSBwcm90ZWN0aW9uIzcwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzcwLjE2LjE2LjAwLjAwI0Zsb3JhIzcwLjE2LjAwLjAwLjAwCi11bnNwc2M3IzcwLjE2LjE2LjAxLjAwI0Zsb3JhIHByb3RlY3Rpb24jNzAuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTYuMTcuMDAuMDAjRWNvc3lzdGVtcyM3MC4xNi4wMC4wMC4wMAotdW5zcHNjNyM3MC4xNi4xNy4wMS4wMCNFY29kZXZlbG9wbWVudCBzZXJ2aWNlcyM3MC4xNi4xNy4wMC4wMAotdW5zcHNjNyM3MC4xNi4xNy4wMi4wMCNNYXJpbmUgZWNvc3lzdGVtIG1hbmFnZW1lbnQgc2VydmljZXMjNzAuMTYuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTYuMTcuMDMuMDAjVGVycmVzdHJpYWwgZWNvc3lzdGVtIG1hbmFnZW1lbnQgc2VydmljZXMjNzAuMTYuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTYuMTcuMDQuMDAjRWNvc3lzdGVtcyBwcm90ZWN0aW9uIHNlcnZpY2VzIzcwLjE2LjE3LjAwLjAwCi11bnNwc2M3IzcwLjE3LjAwLjAwLjAwI1dhdGVyIHJlc291cmNlcyBkZXZlbG9wbWVudCBhbmQgb3ZlcnNpZ2h0IzcwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzcwLjE3LjE1LjAwLjAwI0RldmVsb3BtZW50IzcwLjE3LjAwLjAwLjAwCi11bnNwc2M3IzcwLjE3LjE1LjAxLjAwI1dhdGVyIHF1YWxpdHkgYXNzZXNzbWVudCBzZXJ2aWNlcyM3MC4xNy4xNS4wMC4wMAotdW5zcHNjNyM3MC4xNy4xNS4wMi4wMCNXYXRlciByZXNvdXJjZXMgcGxhbm5pbmcgc2VydmljZXMjNzAuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNzAuMTcuMTUuMDMuMDAjR3JvdW5kIG9yIHN1cmZhY2Ugd2F0ZXIgc3VydmV5aW5nIzcwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzcwLjE3LjE1LjA0LjAwI1dhdGVyIHJlc291cmNlcyBtYXBwaW5nIHNlcnZpY2VzIzcwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzcwLjE3LjE1LjA1LjAwI1JpdmVyIGJhc2luIGRldmVsb3BtZW50IzcwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzcwLjE3LjE1LjA2LjAwI0dyb3VuZCBvciBzdXJmYWNlIHdhdGVyIG1vZGVsaW5nIHNlcnZpY2VzIzcwLjE3LjE1LjAwLjAwCi11bnNwc2M3IzcwLjE3LjE2LjAwLjAwI092ZXJzaWdodCM3MC4xNy4wMC4wMC4wMAotdW5zcHNjNyM3MC4xNy4xNi4wMS4wMCNXYXRlciBxdWFsaXR5IG1hbmFnZW1lbnQjNzAuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTcuMTYuMDIuMDAjV2F0ZXIgdGVzdGluZyBzZXJ2aWNlcyM3MC4xNy4xNi4wMC4wMAotdW5zcHNjNyM3MC4xNy4xNi4wMy4wMCNGbG9vZHBsYWluIG1hbmFnZW1lbnQjNzAuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNzAuMTcuMTYuMDQuMDAjV2F0ZXIgY29uc2VydmF0aW9uIGFkdmlzb3J5IHNlcnZpY2VzIzcwLjE3LjE2LjAwLjAwCi11bnNwc2M3IzcwLjE3LjE2LjA1LjAwI1dhdGVyIHJpZ2h0cyBhZHZpc29yeSBzZXJ2aWNlcyM3MC4xNy4xNi4wMC4wMAotdW5zcHNjNyM3MC4xNy4xNi4wNi4wMCNXYXRlciByZXNvdXJjZSByZWNvdmVyeSBzZXJ2aWNlcyM3MC4xNy4xNi4wMC4wMAotdW5zcHNjNyM3MC4xNy4xNi4wNy4wMCNXYXRlciBwcmljaW5nIHNlcnZpY2VzIzcwLjE3LjE2LjAwLjAwCi11bnNwc2M3IzcwLjE3LjE3LjAwLjAwI0lycmlnYXRpb24jNzAuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTcuMTcuMDEuMDAjQ2FuYWwgbWFpbnRlbmFuY2Ugb3IgbWFuYWdlbWVudCBzZXJ2aWNlcyM3MC4xNy4xNy4wMC4wMAotdW5zcHNjNyM3MC4xNy4xNy4wMi4wMCNEYW0gbWFpbnRlbmFuY2Ugb3IgbWFuYWdlbWVudCBzZXJ2aWNlcyM3MC4xNy4xNy4wMC4wMAotdW5zcHNjNyM3MC4xNy4xNy4wMy4wMCNSZXNlcnZvaXJzIG1haW50ZW5hbmNlIG9yIG1hbmFnZW1lbnQgc2VydmljZXMjNzAuMTcuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTcuMTcuMDQuMDAjUHVtcGluZyBzdGF0aW9uIG1haW50ZW5hbmNlIG9yIG1hbmFnZW1lbnQgc2VydmljZXMjNzAuMTcuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTcuMTcuMDUuMDAjUGlwZWxpbmVzIG1haW50ZW5hbmNlIG9yIG1hbmFnZW1lbnQgc2VydmljZXMjNzAuMTcuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTcuMTcuMDYuMDAjRGlrZSBvciBlbWJhbmttZW50IG1haW50ZW5hbmNlIG9yIG1hbmFnZW1lbnQgc2VydmljZXMjNzAuMTcuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTcuMTcuMDcuMDAjV2F0ZXIgd2VsbCBtYWludGVuYW5jZSBvciBtYW5hZ2VtZW50IHNlcnZpY2VzIzcwLjE3LjE3LjAwLjAwCi11bnNwc2M3IzcwLjE3LjE3LjA4LjAwI0lycmlnYXRpb24gYWR2aXNvcnkgc2VydmljZXMjNzAuMTcuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTcuMTcuMDkuMDAjSXJyaWdhdGlvbiBzeXN0ZW1zIG1hbmFnZW1lbnQgc2VydmljZXMjNzAuMTcuMTcuMDAuMDAKLXVuc3BzYzcjNzAuMTcuMTguMDAuMDAjRHJhaW5hZ2Ugc2VydmljZXMjNzAuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNzAuMTcuMTguMDEuMDAjTGFuZCBkcmFpbmFnZSBzZXJ2aWNlcyM3MC4xNy4xOC4wMC4wMAotdW5zcHNjNyM3MC4xNy4xOC4wMi4wMCNTdG9ybSB3YXRlciBkcmFpbmFnZSM3MC4xNy4xOC4wMC4wMAotdW5zcHNjNyM3MC4xNy4xOC4wMy4wMCNGbG9vZCBwcm90ZWN0aW9uIG9yIGNvbnRyb2wgc2VydmljZXMjNzAuMTcuMTguMDAuMDAKLXVuc3BzYzcjNzEuMDAuMDAuMDAuMDAjTWluaW5nIGFuZCBPaWwgYW5kIEdhcyBTZXJ2aWNlcyM3MS4wMC4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMC4wMC4wMC4wMCNNaW5pbmcgc2VydmljZXMjNzEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTAuMTUuMDAuMDAjTWluZSBleHBsb3JhdGlvbiM3MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMC4xNS4wMS4wMCNNaW5lIGRldmVsb3BtZW50IzcxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzcxLjEwLjE1LjAyLjAwI1Rlc3QgYm9yaW5nIG9yIGNvcmUgZHJpbGxpbmcjNzEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNzEuMTAuMTYuMDAuMDAjTWluZSBkcmlsbGluZyBhbmQgYmxhc3Rpbmcgc2VydmljZXMjNzEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTAuMTYuMDEuMDAjU2hhZnQgc2lua2luZyM3MS4xMC4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMC4xNi4wMi4wMCNNaW5lIGJsYXN0aW5nIHNlcnZpY2VzIzcxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzcxLjEwLjE3LjAwLjAwI0V4dHJhY3Rpb24jNzEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTAuMTcuMDEuMDAjU2hhZnQgbWluaW5nIHNlcnZpY2VzIzcxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzcxLjEwLjE3LjAyLjAwI09wZW4gcGl0IG1pbmluZyBzZXJ2aWNlcyM3MS4xMC4xNy4wMC4wMAotdW5zcHNjNyM3MS4xMC4xNy4wMy4wMCNTdHJpcCBtaW5pbmcgc2VydmljZXMjNzEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNzEuMTAuMTcuMDQuMDAjSW4gc2l0dSBsZWFjaGluZyAoSVNMKSBzZXJ2aWNlcyM3MS4xMC4xNy4wMC4wMAotdW5zcHNjNyM3MS4xMC4xNy4wNS4wMCNQdW1waW5nIG9yIGRyYWluaW5nIzcxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzcxLjEwLjE3LjA2LjAwI092ZXJidXJkZW4gcmVtb3ZhbCM3MS4xMC4xNy4wMC4wMAotdW5zcHNjNyM3MS4xMC4xNy4wNy4wMCNJbXBvdW5kbWVudCBvciBzdG9yYWdlIG9mIHdhdGVyIHNlcnZpY2VzIzcxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzcxLjEwLjE3LjA4LjAwI1NvaWwgZmx1c2hpbmcgc2VydmljZXMjNzEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjNzEuMTAuMTcuMDkuMDAjTWluZSBmaWxsaW5nIHNlcnZpY2VzIzcxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzcxLjExLjAwLjAwLjAwI09pbCBhbmQgZ2FzIGV4cGxvcmF0aW9uIHNlcnZpY2VzIzcxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzcxLjExLjE1LjAwLjAwI09pbCBhbmQgZ2FzIGV4cGxvcmF0aW9uIzcxLjExLjAwLjAwLjAwCi11bnNwc2M3IzcxLjExLjE1LjAxLjAwI1NlaXNtb2dyYXBoaWMgc3VydmV5cyM3MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM3MS4xMS4xNS4wMi4wMCNPZmZzaG9yZSBleHBsb3JhdGlvbiM3MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM3MS4xMS4xNS4wMy4wMCNXZWxsIHN1cnZleWluZyM3MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM3MS4xMS4xNi4wMC4wMCNXZWxsIGRyaWxsaW5nIGFuZCBtYWludGVuYW5jZSM3MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4xNi4wMS4wMCNEaXJlY3Rpb25hbCBkcmlsbGluZyM3MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMS4xNi4wMi4wMCNPaWwgd2VsbCBkcmlsbGluZyM3MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMS4xNi4wMy4wMCNEcmlsbGluZyBvZiB3YXRlciBpbnRha2Ugd2VsbHMjNzEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMTYuMDQuMDAjUmVkcmlsbGluZyBvciByZXdvcmtpbmcgb2Ygd2VsbHMjNzEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMTYuMDUuMDAjQWNpZGl6aW5nIG9yIGNoZW1pY2FsIHRyZWF0aW5nIG9mIHdlbGxzIzcxLjExLjE2LjAwLjAwCi11bnNwc2M3IzcxLjExLjE2LjA2LjAwI1Rvb2wgZmlzaGluZyBzZXJ2aWNlcyM3MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMS4xNi4wNy4wMCNPaWwgd2VsbCBwbGF0Zm9ybSBtYWludGVuYW5jZSBzZXJ2aWNlcyM3MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMS4xNy4wMC4wMCNFeHRyYWN0aW9uIHNlcnZpY2VzIzcxLjExLjAwLjAwLjAwCi11bnNwc2M3IzcxLjExLjE3LjAxLjAwI0Zsb3cgcmF0ZSBtZWFzdXJlbWVudCBzZXJ2aWNlcyM3MS4xMS4xNy4wMC4wMAotdW5zcHNjNyM3MS4xMS4xNy4wMi4wMCNPaWwgc2FtcGxpbmcgc2VydmljZXMjNzEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMTcuMDMuMDAjT2lsIGZpZWxkIGRyaWxsaW5nIG9yIG11ZCBzZXJ2aWNlcyM3MS4xMS4xNy4wMC4wMAotdW5zcHNjNyM3MS4xMS4xNy4wNC4wMCNJbXBvdW5kIG9yIHN0b3JhZ2Ugb2Ygd2F0ZXIjNzEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMTguMDAuMDAjV2VsbCByZXN0b3JhdGlvbiBhbmQgcmVjbGFtYXRpb24jNzEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMTguMDEuMDAjQ2xlYW5pbmcgb3Igc3dhYmJpbmcgb2Ygd2VsbHMjNzEuMTEuMTguMDAuMDAKLXVuc3BzYzcjNzEuMTEuMTguMDIuMDAjU29pbCBmbHVzaGluZyBzZXJ2aWNlcyM3MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM3MS4xMS4xOC4wMy4wMCNNaW5lIGZpbGxpbmcgc2VydmljZXMjNzEuMTEuMTguMDAuMDAKLXVuc3BzYzcjNzEuMTEuMTguMDQuMDAjV2VsbCBwbHVnZ2luZyBvciBhYmFuZG9ubWVudCBzZXJ2aWNlcyM3MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM3MS4xMS4xOC4wNS4wMCNDZW1lbnRpbmcgc2VydmljZXMgZm9yIHdlbGwgY2FzaW5ncyM3MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM3MS4xMS4xOS4wMC4wMCNXZWxsIGVtZXJnZW5jeSBzZXJ2aWNlcyM3MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4xOS4wMS4wMCNXZWxsIGZpcmUgZmlnaHRpbmcgc2VydmljZXMjNzEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMTkuMDIuMDAjV2VsbCBjYXBwaW5nIHNlcnZpY2VzIzcxLjExLjE5LjAwLjAwCi11bnNwc2M3IzcxLjExLjIwLjAwLjAwI0Nhc2VkIGhvbGUgd2VsbCBsb2dnaW5nIHNlcnZpY2VzIzcxLjExLjAwLjAwLjAwCi11bnNwc2M3IzcxLjExLjIwLjAxLjAwI0Nhc2VkIGhvbGUgZm9ybWF0aW9uIHNhbXBsaW5nIHRlc3Rpbmcgc2VydmljZXMjNzEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjAuMDIuMDAjQ2FzaW5nIHRoaWNrbmVzcyBtZWFzdXJlbWVudCBzZXJ2aWNlcyM3MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMC4wMy4wMCNDaGVtaWNhbCBjdXR0ZXJzIHNlcnZpY2VzIzcxLjExLjIwLjAwLjAwCi11bnNwc2M3IzcxLjExLjIwLjA0LjAwI0VsZWN0cm9tYWduZXRpYyBwaXBlIHJlY292ZXJ5IHNlcnZpY2VzIzcxLjExLjIwLjAwLjAwCi11bnNwc2M3IzcxLjExLjIwLjA1LjAwI1dlbGwgZmxvdyBtZWFzdXJlbWVudCBzZXJ2aWNlcyM3MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMC4wNi4wMCNXZWxsIGZsdWlkIGRlbnNpdHkgbWVhc3VyZW1lbnQgc2VydmljZXMjNzEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjAuMDcuMDAjV2VsbCBmbHVpZCB0ZW1wZXJhdHVyZSBtZWFzdXJlbWVudCBzZXJ2aWNlcyM3MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMC4wOC4wMCNGcmVlIHBvaW50IHRvb2wgc2VydmljZXMjNzEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjAuMDkuMDAjR2FtbWEgcmF5IHNlcnZpY2VzIzcxLjExLjIwLjAwLjAwCi11bnNwc2M3IzcxLjExLjIwLjEwLjAwI0pldCBjdXR0ZXIgc2VydmljZXMjNzEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjAuMTEuMDAjTWVhc3VyZW1lbnQgd2hpbGUgcGVyZm9yYXRpbmcgc2VydmljZXMjNzEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjAuMTIuMDAjTmV1dHJvbiBwb3Jvc2l0eSBzZXJ2aWNlcyM3MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMC4xMy4wMCNOdWNsZWFyIHNwZWN0cm9zY29weSBzZXJ2aWNlcyM3MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMC4xNC4wMCNXZWxsIHBhY2tlciBzZXJ2aWNlcyM3MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMC4xNS4wMCNQZXJtYW5lbnQgbWFnbmV0cyBwaXBlIHJlY292ZXJ5IHNlcnZpY2VzIzcxLjExLjIwLjAwLjAwCi11bnNwc2M3IzcxLjExLjIwLjE2LjAwI1dlbGwgcGx1Z2dpbmcgc2VydmljZXMjNzEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjAuMTcuMDAjV2VsbCBwcmVzc3VyZSBtZWFzdXJlbWVudCBjb250cm9sIHNlcnZpY2VzIzcxLjExLjIwLjAwLjAwCi11bnNwc2M3IzcxLjExLjIwLjE4LjAwI1Byb2R1Y3Rpb24gbG9nZ2luZyBib3JlaG9sZSBmbHVpZCBtZWFzdXJlbWVudCBzZXJ2aWNlcyM3MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMC4xOS4wMCNQcm9kdWN0aW9uIGxvZ2dpbmcgZGVuc2l0eSBtZWFzdXJlbWVudCBzZXJ2aWNlcyM3MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMC4yMC4wMCNQcm9kdWN0aW9uIGxvZ2dpbmcgZG93bmhvbGUgdmlkZW8gc2VydmljZXMjNzEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjAuMjEuMDAjUHJvZHVjdGlvbiBsb2dnaW5nIGZsb3cgbWVhc3VyZW1lbnQgc2VydmljZXMjNzEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjAuMjIuMDAjUHJvZHVjdGlvbiBsb2dnaW5nIHByZXNzdXJlIG1lYXN1cmVtZW50IHNlcnZpY2VzIzcxLjExLjIwLjAwLjAwCi11bnNwc2M3IzcxLjExLjIwLjIzLjAwI090aGVyIHByb2R1Y3Rpb24gbG9nZ2luZyBzZXJ2aWNlcyM3MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMC4yNC4wMCNQcm9kdWN0aW9uIGxvZ2dpbmcgdGVtcGVyYXR1cmUgbWVhc3VyZW1lbnQgc2VydmljZXMjNzEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjAuMjUuMDAjU2V2ZXJpbmcgY29sbGlkaW5nIHNlcnZpY2VzIzcxLjExLjIwLjAwLjAwCi11bnNwc2M3IzcxLjExLjIwLjI2LjAwI1dlbGwgbG9nZ2luZyBzb25pYyBzZXJ2aWNlcyM3MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMC4yNy4wMCNTdHVjayBwb2ludCB0b29sIHNlcnZpY2VzIzcxLjExLjIwLjAwLjAwCi11bnNwc2M3IzcxLjExLjIwLjI4LjAwI1RoZXJtYWwgZGVjYXkgd2VsbCBsb2dnaW5nIHNlcnZpY2VzIzcxLjExLjIwLjAwLjAwCi11bnNwc2M3IzcxLjExLjIwLjI5LjAwI1dlbGwgdHVidWxhciBjb3Jyb3Npb24gZXZhbHVhdGlvbiBzZXJ2aWNlcyM3MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMC4zMC4wMCNXZWxsIHBlcmZvcm1hbmNlIHNlcnZpY2VzIzcxLjExLjIwLjAwLjAwCi11bnNwc2M3IzcxLjExLjIwLjMxLjAwI1dlbGwgdHVidWxhciBzZXJ2aWNlcyM3MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMS4wMC4wMCNPcGVuIGhvbGUgd2VsbCBsb2dnaW5nIHNlcnZpY2VzIzcxLjExLjAwLjAwLjAwCi11bnNwc2M3IzcxLjExLjIxLjAxLjAwI0RpZ2l0YWwgc29uaWMgbG9nZ2luZyBzZXJ2aWNlcyM3MS4xMS4yMS4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMS4wMi4wMCNCb3JlaG9sZSBnZW9tZXRyeSBsb2dnaW5nIHNlcnZpY2VzIzcxLjExLjIxLjAwLjAwCi11bnNwc2M3IzcxLjExLjIxLjAzLjAwI0RlbnNpdHkgbGl0aG9sb2d5IG51Y2xlYXIgbG9nZ2luZyBzZXJ2aWNlcyM3MS4xMS4yMS4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMS4wNC4wMCNEaXBtZXRlciBsb2dnaW5nIHNlcnZpY2VzIzcxLjExLjIxLjAwLjAwCi11bnNwc2M3IzcxLjExLjIxLjA1LjAwI0RpcG9sZSBzb25pYyBsb2dnaW5nIHNlcnZpY2VzIzcxLjExLjIxLjAwLjAwCi11bnNwc2M3IzcxLjExLjIxLjA2LjAwI0RpcmVjdGlvbmFsIGxvZ2dpbmcgc2VydmljZXMjNzEuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjEuMDcuMDAjRGlyZWN0aW9uYWwgc3VydmV5IHNlcnZpY2VzIzcxLjExLjIxLjAwLjAwCi11bnNwc2M3IzcxLjExLjIxLjA4LjAwI0VsZWN0cm9tYWduZXRpYyBwcm9wYWdhdGlvbiBsb2dnaW5nIHNlcnZpY2VzIzcxLjExLjIxLjAwLjAwCi11bnNwc2M3IzcxLjExLjIxLjA5LjAwI0Zvcm1hdGlvbiB0ZXN0aW5nIHNhbXBsaW5nIHNlcnZpY2VzIzcxLjExLjIxLjAwLjAwCi11bnNwc2M3IzcxLjExLjIxLjEwLjAwI0ZyYWN0dXJlIGlkZW50aWZpY2F0aW9uIGxvZ2dpbmcgc2VydmljZXMjNzEuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjEuMTEuMDAjR2FtbWEgcmF5IGxvZ2dpbmcgc2VydmljZXMjNzEuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjEuMTIuMDAjR2FtbWEgcmF5IHNwZWN0cm9zY29weSBsb2dnaW5nIHNlcnZpY2VzIzcxLjExLjIxLjAwLjAwCi11bnNwc2M3IzcxLjExLjIxLjEzLjAwI0dlb2NoZW1pY2FsIG51Y2xlYXIgbG9nZ2luZyBzZXJ2aWNlcyM3MS4xMS4yMS4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMS4xNC4wMCNXZWxsIGltYWdpbmcgc2VydmljZXMjNzEuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjEuMTUuMDAjTWFnbmV0aWMgcmVzb25hbmNlIGxvZ2dpbmcgc2VydmljZXMjNzEuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjEuMTYuMDAjTWljcm9yZXNpc3Rpdml0eSBsb2dnaW5nIHNlcnZpY2VzIzcxLjExLjIxLjAwLjAwCi11bnNwc2M3IzcxLjExLjIxLjE3LjAwI05ldXRyb24gcG9yb3NpdHkgbG9nZ2luZyBzZXJ2aWNlcyM3MS4xMS4yMS4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMS4xOC4wMCNQZXRyb3BoeXNpY3Mgc2VydmljZXMjNzEuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjEuMTkuMDAjUmVzaXN0aXZpdHkgbG9nZ2luZyBzZXJ2aWNlcyM3MS4xMS4yMS4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMS4yMC4wMCNTbGltIGFjY2VzcyBzb25pYyBsb2dnaW5nIHNlcnZpY2VzIzcxLjExLjIxLjAwLjAwCi11bnNwc2M3IzcxLjExLjIxLjIxLjAwI1NvbmljIGNlbWVudCBib25kIHJhdGlvIGxvZ2dpbmcgc2VydmljZXMjNzEuMTEuMjEuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjEuMjIuMDAjV2VsbCBzb25pYyBpbWFnaW5nIHNlcnZpY2VzIzcxLjExLjIxLjAwLjAwCi11bnNwc2M3IzcxLjExLjIyLjAwLjAwI090aGVyIGxvZ2dpbmcgc2VydmljZXMjNzEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjIuMDEuMDAjTG9nZ2luZyB3aXRoIGNvaWxlZCB0dWJpbmcgc2VydmljZXMjNzEuMTEuMjIuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjIuMDIuMDAjTG9nZ2luZyB3aGlsZSBkcmlsbGluZyBzZXJ2aWNlcyM3MS4xMS4yMi4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMi4wMy4wMCNMb2dnaW5nIGR1cmluZyBmaXNoaW5nIHNlcnZpY2VzIzcxLjExLjIyLjAwLjAwCi11bnNwc2M3IzcxLjExLjIyLjA0LjAwI0xvZ2dpbmcgd2hpbGUgcGVyZm9yYXRpbmcgc2VydmljZXMjNzEuMTEuMjIuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjIuMDUuMDAjRHJpbGwgcGlwZSBjb252ZXllZCB3ZWxsIHNlcnZpY2VzIzcxLjExLjIyLjAwLjAwCi11bnNwc2M3IzcxLjExLjIyLjA2LjAwI0dlbmVyYWwgd2VsbCBsb2dnaW5nIHNlcnZpY2VzIzcxLjExLjIyLjAwLjAwCi11bnNwc2M3IzcxLjExLjIzLjAwLjAwI1NlaXNtaWMgc2VydmljZXMjNzEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjMuMDEuMDAjVHdvIGRpbWVuc2lvbmFsIGxhbmQgc2Vpc21pYyBhY3F1aXNpdGlvbiBzZXJ2aWNlcyM3MS4xMS4yMy4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMy4wMi4wMCNUd28gZGltZW5zaW9uYWwgbWFyaW5lIHNlaXNtaWMgYWNxdWlzaXRpb24gc2VydmljZXMjNzEuMTEuMjMuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjMuMDMuMDAjVHdvIGRpbWVuc2lvbmFsIHNlaXNtaWMgZGF0YSBwcm9jZXNzaW5nIHNlcnZpY2VzIzcxLjExLjIzLjAwLjAwCi11bnNwc2M3IzcxLjExLjIzLjA0LjAwI1RocmVlIGRpbWVuc2lvbmFsIGxhbmQgc2Vpc21pYyBhY3F1aXNpdGlvbiBzZXJ2aWNlcyM3MS4xMS4yMy4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMy4wNS4wMCNUaHJlZSBkaW1lbnNpb25hbCBtYXJpbmUgc2Vpc21pYyBhY3F1aXNpdGlvbiBzZXJ2aWNlcyM3MS4xMS4yMy4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMy4wNi4wMCNUaHJlZSBkaW1lbnNpb25hbCBzZWlzbWljIGRhdGEgcHJvY2Vzc2luZyBzZXJ2aWNlcyM3MS4xMS4yMy4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMy4wNy4wMCNGb3VyIGRpbWVuc2lvbmFsIGxhbmQgc2Vpc21pYyBhY3F1aXNpdGlvbiBzZXJ2aWNlcyM3MS4xMS4yMy4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMy4wOC4wMCNGb3VyIGRpbWVuc2lvbmFsIG1hcmluZSBzZWlzbWljIGFjcXVpc2l0aW9uIHNlcnZpY2VzIzcxLjExLjIzLjAwLjAwCi11bnNwc2M3IzcxLjExLjIzLjA5LjAwI0ZvdXIgZGltZW5zaW9uYWwgc2Vpc21pYyBkYXRhIHByb2Nlc3Npbmcgc2VydmljZXMjNzEuMTEuMjMuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjMuMTAuMDAjQ2hlY2tzaG90IHNlaXNtaWMgc2VydmljZXMjNzEuMTEuMjMuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjMuMTEuMDAjQ3Jvc3Mgd2VsbCBzZWlzbWljIHNlcnZpY2VzIzcxLjExLjIzLjAwLjAwCi11bnNwc2M3IzcxLjExLjIzLjEyLjAwI0RldmlhdGVkIHdlbGwgc2Vpc21pYyBzZXJ2aWNlcyM3MS4xMS4yMy4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMy4xMy4wMCNHZW9waHlzaWNzIHNlaXNtaWMgc2VydmljZXMjNzEuMTEuMjMuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjMuMTQuMDAjT2Zmc2V0IHNlaXNtaWMgc2VydmljZXMjNzEuMTEuMjMuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjMuMTUuMDAjUXVpY2tzaG90IHNlaXNtaWMgc2VydmljZXMjNzEuMTEuMjMuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjMuMTYuMDAjU2Vpc21pYyBkYXRhIGFjcXVpc2l0aW9uIHdoaWxlIGRyaWxsaW5nIHNlcnZpY2VzIzcxLjExLjIzLjAwLjAwCi11bnNwc2M3IzcxLjExLjIzLjE3LjAwI1NsaW0gaG9sZSBzZWlzbWljIHNlcnZpY2VzIzcxLjExLjIzLjAwLjAwCi11bnNwc2M3IzcxLjExLjIzLjE4LjAwI1NlaXNtaWMgc3VydmV5IGV2YWx1YXRpb24gb3IgZGVzaWduIHNlcnZpY2VzIzcxLjExLjIzLjAwLjAwCi11bnNwc2M3IzcxLjExLjIzLjE5LjAwI1ZlcnRpY2FsIHNlaXNtaWMgc2VydmljZXMjNzEuMTEuMjMuMDAuMDAKLXVuc3BzYzcjNzEuMTEuMjMuMjAuMDAjV2Fsa2F3YXkgc2Vpc21pYyBzZXJ2aWNlcyM3MS4xMS4yMy4wMC4wMAotdW5zcHNjNyM3MS4xMS4yMy4yMS4wMCNHZW9sb2dpY2FsIHNlcnZpY2VzIzcxLjExLjIzLjAwLjAwCi11bnNwc2M3IzcxLjEyLjAwLjAwLjAwI1dlbGwgZHJpbGxpbmcgY29uc3RydWN0aW9uIGFuZCBtYWludGVuYW5jZSBzZXJ2aWNlcyM3MS4wMC4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMC4wMC4wMCNDZW1lbnQgcHVtcGluZyBzZXJ2aWNlcyM3MS4xMi4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMC4wMS4wMCNPaWxmaWVsZCBjYXNpbmcgaGFyZHdhcmUgc2VydmljZXMjNzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTAuMDIuMDAjT2lsZmllbGQgY2VtZW50IGxhYiB0ZXN0aW5nIHNlcnZpY2VzIzcxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjEwLjAzLjAwI0Rvd25ob2xlIG9pbGZpZWxkIHRvb2xzIHNlcnZpY2VzIzcxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjEwLjA0LjAwI09pbGZpZWxkIGZpbHRlcmluZyBzZXJ2aWNlcyM3MS4xMi4xMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMC4wNS4wMCNGb2FtIGNlbWVudGluZyBzZXJ2aWNlcyM3MS4xMi4xMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMC4wNi4wMCNHZW90aGVybWFsIHdlbGwgY2VtZW50aW5nIHNlcnZpY2VzIzcxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjEwLjA3LjAwI0xpbmVyIGNlbWVudGluZyBzZXJ2aWNlcyM3MS4xMi4xMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMC4wOC4wMCNPaWx3ZWxsIGxvc3QgY2lyY3VsYXRpb24gc2VydmljZXMjNzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTAuMDkuMDAjT2lsZmllbGQgbXVkIHJlbW92YWwgc2VydmljZXMjNzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTAuMTAuMDAjUGx1ZyBjZW1lbnRpbmcgc2VydmljZXMjNzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTAuMTEuMDAjV2VsbCBzaXRlIHByZXNzdXJlIHB1bXBpbmcgc2VydmljZXMjNzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTAuMTIuMDAjT2lsZmllbGQgcHJlc3N1cmUgdGVzdGluZyBzZXJ2aWNlcyM3MS4xMi4xMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMC4xMy4wMCNTdXJmYWNlIGNhc2luZyBjZW1lbnRpbmcgc2VydmljZXMjNzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTAuMTQuMDAjSW50ZXJtZWRpYXRlIGNhc2luZyBjZW1lbnRpbmcgc2VydmljZXMjNzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTAuMTUuMDAjUHJvZHVjdGlvbiBzdHJpbmcgY2VtZW50aW5nIHNlcnZpY2VzIzcxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjEwLjE2LjAwI1NxdWVlemUgd2VsbCBjZW1lbnRpbmcgc2VydmljZXMjNzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTAuMTcuMDAjV2VsbCB3YXRlciBjb250cm9sIHNlcnZpY2VzIzcxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjEwLjE4LjAwI1dlbGwgY2VtZW50IGV2YWx1YXRpb24gc2VydmljZXMjNzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTAuMTkuMDAjV2VsbCBjZW1lbnQgZ3JvdXRpbmcgc2VydmljZXMjNzEuMTIuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTAuMjAuMDAjV2VsbCBjZW1lbnRpbmcgYWRkaXRpdmVzIHNlcnZpY2VzIzcxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjEwLjIxLjAwI1dlbGwgY2VtZW50aW5nIGRlc2lnbiBzZXJ2aWNlcyM3MS4xMi4xMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMC4yMi4wMCNXZWxsIGNsZWFuaW5nIHNlcnZpY2VzIzcxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjEwLjIzLjAwI1dlbGwgcmVwYWlyIHNlcnZpY2VzIzcxLjEyLjEwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjExLjAwLjAwI0NvaWxlZCB0dWJpbmcgc2VydmljZXMjNzEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTEuMDEuMDAjQWNpZGl6aW5nIHRocm91Z2ggY29pbGVkIHR1YmluZyBzZXJ2aWNlcyM3MS4xMi4xMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMS4wMi4wMCNDYWJsZSBpbnN0YWxsYXRpb24gdGhyb3VnaCBjb2lsZWQgdHViaW5nIHNlcnZpY2VzIzcxLjEyLjExLjAwLjAwCi11bnNwc2M3IzcxLjEyLjExLjAzLjAwI0NlbWVudGluZyB0aHJvdWdoIGNvaWxlZCB0dWJpbmcgc2VydmljZXMjNzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTEuMDQuMDAjQ2hlbWljYWwgY3V0dGluZyB0aHJvdWdoIGNvaWxlZCB0dWJpbmcgc2VydmljZXMjNzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTEuMDUuMDAjQ2xlYW4gb3V0IHRocm91Z2ggY29pbGVkIHR1YmluZyBzZXJ2aWNlcyM3MS4xMi4xMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMS4wNi4wMCNDb21wbGV0aW9uIHRocm91Z2ggY29pbGVkIHR1YmluZyBzZXJ2aWNlcyM3MS4xMi4xMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMS4wNy4wMCNDb252ZXlpbmcgaW5mbGF0YWJsZXMgdGhyb3VnaCBjb2lsZWQgdHViaW5nIHNlcnZpY2VzIzcxLjEyLjExLjAwLjAwCi11bnNwc2M3IzcxLjEyLjExLjA4LjAwI0NvcmluZyB0aHJvdWdoIGNvaWxlZCB0dWJpbmcgc2VydmljZXMjNzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTEuMDkuMDAjRXh0ZW5kZWQgcmVhY2ggd2VsbCBzZXJ2aWNlcyM3MS4xMi4xMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMS4xMC4wMCNGaXNoaW5nIHRocm91Z2ggY29pbGVkIHR1YmluZyBzZXJ2aWNlcyM3MS4xMi4xMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMS4xMS4wMCNGcmFjdHVyaW5nIHRocm91Z2ggY29pbGVkIHR1YmluZyBzZXJ2aWNlcyM3MS4xMi4xMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMS4xMi4wMCNIaWdoIHByZXNzdXJlIGNvaWxlZCB0dWJpbmcgc2VydmljZXMjNzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTEuMTMuMDAjSG9yaXpvbnRhbCBpc29sYXRpb24gb2lsZmllbGQgc2VydmljZXMjNzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTEuMTQuMDAjTG9nZ2luZyB3aXRoIGNvaWxlZCB0dWJpbmcgc2VydmljZXMjNzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTEuMTUuMDAjTWlsbGluZyB0aHJvdWdoIGNvaWxlZCB0dWJpbmcgc2VydmljZXMjNzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTEuMTYuMDAjTml0cm9nZW4gcmVsYXRlZCBhcHBsaWNhdGlvbnMgdGhyb3VnaCBjb2lsZWQgdHViaW5nIzcxLjEyLjExLjAwLjAwCi11bnNwc2M3IzcxLjEyLjExLjE3LjAwI1BlcmZvcmF0aW5nIHRocm91Z2ggY29pbGVkIHR1YmluZyBzZXJ2aWNlcyM3MS4xMi4xMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMS4xOC4wMCNQaXBlbGluZSBvciBmbG93bGluZSBsYXlpbmcgc2VydmljZXMjNzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTEuMTkuMDAjUGlwZWxpbmUgaW50ZXJ2ZW50aW9uIHNlcnZpY2VzIzcxLjEyLjExLjAwLjAwCi11bnNwc2M3IzcxLjEyLjExLjIwLjAwI1NhbmQgY29udHJvbCB0aHJvdWdoIGNvaWxlZCB0dWJpbmcgc2VydmljZXMjNzEuMTIuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTEuMjEuMDAjQWJyYXNpdmUgdHVidWxhciBjbGVhbmluZyBzZXJ2aWNlcyM3MS4xMi4xMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMS4yMi4wMCNXZWxsIGtpbGwgdGhyb3VnaCBjb2lsZWQgdHViaW5nIHNlcnZpY2VzIzcxLjEyLjExLjAwLjAwCi11bnNwc2M3IzcxLjEyLjExLjIzLjAwI0Nhc2luZyBleGl0IHdpdGggY29pbGVkIHR1YmluZyBzZXJ2aWNlcyM3MS4xMi4xMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMi4wMC4wMCNDb3Jpbmcgc2VydmljZXMjNzEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTIuMDEuMDAjQ29udmVudGlvbmFsIGNvcmluZyBzZXJ2aWNlcyM3MS4xMi4xMi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMi4wMi4wMCNDb3JlIGlzb2xhdGlvbiBzZXJ2aWNlcyM3MS4xMi4xMi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMi4wMy4wMCNDb3JlIHByZXNlcnZhdGlvbiBzZXJ2aWNlcyM3MS4xMi4xMi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMi4wNC4wMCNIb3Jpem9udGFsIGNvcmluZyBzZXJ2aWNlcyM3MS4xMi4xMi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMi4wNS4wMCNPcmllbnRlZCBjb3Jpbmcgc2VydmljZXMjNzEuMTIuMTIuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTIuMDYuMDAjUmlnIHNpdGUgY29yZSBhbmFseXNpcyBzZXJ2aWNlcyM3MS4xMi4xMi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMi4wNy4wMCNTcG9uZ2UgY29yaW5nIHNlcnZpY2VzIzcxLjEyLjEyLjAwLjAwCi11bnNwc2M3IzcxLjEyLjEyLjA4LjAwI1dpcmVsaW5lIHJldHJpZXZhYmxlIGNvcmluZyBzZXJ2aWNlcyM3MS4xMi4xMi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMy4wMC4wMCNEb3duaG9sZSB0b29sIHNlcnZpY2VzIzcxLjEyLjAwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjEzLjAxLjAwI0Rvd25ob2xlIHZpYnJhdGlvbiBjb250cm9sIHNlcnZpY2VzIzcxLjEyLjEzLjAwLjAwCi11bnNwc2M3IzcxLjEyLjEzLjAyLjAwI0Rvd25ob2xlIGhvbGUgb3BlbmluZyBzZXJ2aWNlcyM3MS4xMi4xMy4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMy4wMy4wMCNSZWFtaW5nIHdoaWxlIGRyaWxsaW5nIHNlcnZpY2VzIzcxLjEyLjEzLjAwLjAwCi11bnNwc2M3IzcxLjEyLjEzLjA0LjAwI0Rvd25ob2xlIHRvcnF1ZSBvciBkcmFnIHJlZHVjdGlvbiBzZXJ2aWNlcyM3MS4xMi4xMy4wMC4wMAotdW5zcHNjNyM3MS4xMi4xMy4wNS4wMCNEb3duaG9sZSB1bmRlcnJlYW1pbmcgc2VydmljZXMjNzEuMTIuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTQuMDAuMDAjT2lsZmllbGQgZHJpbGxpbmcgYml0IHNlcnZpY2VzIzcxLjEyLjAwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjE0LjAxLjAwI09pbGZpZWxkIGRyaWxsaW5nIGJpdCBkZXNpZ24gc2VydmljZXMjNzEuMTIuMTQuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTQuMDIuMDAjT2lsZmllbGQgZHJpbGxpbmcgYml0IGh5ZHJhdWxpYyBvcHRpbWl6YXRpb24gc2VydmljZXMjNzEuMTIuMTQuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTQuMDMuMDAjT2lsZmllbGQgZHJpbGxpbmcgYml0IHBsYW5uaW5nIHNlcnZpY2VzIzcxLjEyLjE0LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE0LjA0LjAwI09pbGZpZWxkIGRyaWxsaW5nIGJpdCByZWNvcmRpbmcgc2VydmljZXMjNzEuMTIuMTQuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTQuMDUuMDAjT2lsZmllbGQgZHJpbGxpbmcgYml0IHJlcGFpciBzZXJ2aWNlcyM3MS4xMi4xNC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNC4wNi4wMCNPaWxmaWVsZCBkcmlsbGluZyBiaXQgZm9vdGFnZSBjb250cmFjdHMjNzEuMTIuMTQuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTQuMDcuMDAjV2VsbCBzaXRlIGRyaWxsaW5nIG9wdGltaXphdGlvbiBhc3Npc3RhbmNlIHNlcnZpY2UjNzEuMTIuMTQuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTUuMDAuMDAjRHJpbGxpbmcgbWVhc3VyZW1lbnQgc2VydmljZXMjNzEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTUuMDEuMDAjQWNvdXN0aWMgbWVhc3VyZW1lbnQgd2hlbiBkcmlsbGluZyBzZXJ2aWNlcyM3MS4xMi4xNS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNS4wMi4wMCNBY291c3RpYyB0ZWxlbWV0cnkgd2hlbiBkcmlsbGluZyBzZXJ2aWNlcyM3MS4xMi4xNS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNS4wMy4wMCNDYWxpcGVyIG1lYXN1cmVtZW50IHdoZW4gZHJpbGxpbmcgc2VydmljZXMjNzEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTUuMDQuMDAjRGVuc2l0eSBtZWFzdXJlbWVudCB3aGVuIGRyaWxsaW5nIHNlcnZpY2VzIzcxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE1LjA1LjAwI09pbGZpZWxkIGRyaWxsaW5nIHBlcmZvcm1hbmNlIHNlcnZpY2VzIzcxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE1LjA2LjAwI0VsZWN0cm9tYWduZXRpYyB0ZWxlbWV0cnkgd2hlbiBkcmlsbGluZyBzZXJ2aWNlcyM3MS4xMi4xNS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNS4wNy4wMCNGb3JtYXRpb24gZGlwIG1lYXN1cmVtZW50IHdoZW4gZHJpbGxpbmcgc2VydmljZXMjNzEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTUuMDguMDAjRm9ybWF0aW9uIHByZXNzdXJlIG1lYXN1cmVtZW50IHdoZW4gZHJpbGxpbmcgc2VydmljZXMjNzEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTUuMDkuMDAjR2VvbG9naWNhbGx5IHN0ZWVyZWQgd2VsbHMjNzEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTUuMTAuMDAjR2Vvc3RvcHBpbmcgc2VydmljZXMjNzEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTUuMTEuMDAjTXVkIGxvZ2dpbmcgc2VydmljZXMjNzEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTUuMTIuMDAjTnVjbGVhciBtYWduZXRpYyByZXNvbmFuY2Ugc2VydmljZXMjNzEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTUuMTMuMDAjUG9yb3NpdHkgbWVhc3VyZW1lbnQgd2hlbiBkcmlsbGluZyBzZXJ2aWNlcyM3MS4xMi4xNS4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNS4xNC4wMCNSZXNpc3Rpdml0eSBtZWFzdXJlbWVudCB3aGVuIGRyaWxsaW5nIHNlcnZpY2VzIzcxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE1LjE1LjAwI1dlbGwgc3VydmV5aW5nIG1hbmFnZW1lbnQgc2VydmljZXMjNzEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTUuMTYuMDAjU3VydmV5aW5nIHdpcmVsaW5lIHNlcnZpY2VzIzcxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE2LjAwLjAwI09pbCB3ZWxsIGRyaWxsaW5nIHNlcnZpY2VzIzcxLjEyLjAwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjE2LjAxLjAwI1dlbGwgY2FzaW5nIGNyZXcgc2VydmljZSM3MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNi4wMi4wMCNXZWxsIGNhc2luZyBwbGFubmluZyBzZXJ2aWNlcyM3MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNi4wMy4wMCNXZWxsIGNhc2luZyBtaWxsaW5nIHNlcnZpY2VzIzcxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE2LjA0LjAwI0NvaWxlZCB0dWJpbmcgZHJpbGxpbmcgc2VydmljZXMjNzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMDUuMDAjV2VsbCBjb21wbGV0aW9uIHBsYW5uaW5nIHNlcnZpY2VzIzcxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE2LjA2LjAwI0NvbnZlbnRpb25hbCB3ZWxsIGRpcmVjdGlvbmFsIGRyaWxsaW5nIHNlcnZpY2VzIzcxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE2LjA3LjAwI1dlbGwgZGlyZWN0aW9uYWwgZHJpbGxpbmcgc2VydmljZXMjNzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMDguMDAjV2VsbCBkcmlsbGluZyBjb250cmFjdCBkZXZlbG9wbWVudCBzZXJ2aWNlcyM3MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNi4wOS4wMCNXZWxsIGRyaWxsaW5nIHNlcnZpY2VzIzcxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE2LjEwLjAwI1dlbGwgZHJpbGxpbmcgZW5naW5lZXJpbmcgc2VydmljZXMjNzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMTEuMDAjV2VsbCBkcmlsbGluZyBtdWQgb3IgZmx1aWQgc2VydmljZXMjNzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMTIuMDAjV2VsbCBkcmlsbGluZyBvZiB3YXRlciBpbnRha2Ugd2VsbCBzZXJ2aWNlcyM3MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNi4xMy4wMCNXZWxsIGRyaWxsaW5nIHJpZyBtb25pdG9yIHNlcnZpY2VzIzcxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE2LjE0LjAwI1dlbGwgZHJpbGxpbmcgc29saWRzIGNvbnRyb2wjNzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMTUuMDAjV2VsbCBkcmlsbGluZyBzdGFiaWxpemluZyBvciBob2xlIG9wZW5pbmcgc2VydmljZXMjNzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMTYuMDAjV2VsbCBkcmlsbGluZyBzdXBlcnZpc2lvbiM3MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNi4xNy4wMCNXZWxsIGRyaWxsaW5nIGNvbnRyb2wgc2VydmljZXMjNzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMTguMDAjV2VsbCBkcmlsbGluZyBvdGhlciBnZW5lcmFsIHNlcnZpY2VzIzcxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE2LjE5LjAwI0V4dGVuZGVkIHJlYWNoIGRpcmVjdGlvbmFsIHdlbGwgZHJpbGxpbmcgc2VydmljZXMjNzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMjAuMDAjTXVsdGlsYXRlcmFsIGRpcmVjdGlvbmFsIHdlbGwgZHJpbGxpbmcgc2VydmljZXMjNzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMjEuMDAjT2lsIGNvdW50cnkgdHVidWxhciBtb2RpZmljYXRpb24gb3IgdGVzdGluZyBzZXJ2aWNlcyM3MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNi4yMi4wMCNXZWxsIGRyaWxsaW5nIHBpY2t1cCBvciBsYXlkb3duIHNlcnZpY2UjNzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMjMuMDAjV2VsbCBkcmlsbGluZyBwaXBlIHN0b3JhZ2UjNzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMjQuMDAjV2VsbCBkcmlsbGluZyBwaXBlIHRocmVhZGluZyM3MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNi4yNS4wMCNSYXRob2xlIHdlbGwgZHJpbGxpbmcgc2VydmljZSM3MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNi4yNi4wMCNTaG9ydCByYWRpdXMgZGlyZWN0aW9uYWwgd2VsbCBkcmlsbGluZyBzZXJ2aWNlcyM3MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNi4yNy4wMCNTdGVlcmFibGUgdW5kZXJyZWFtaW5nIHdoaWxlIHdlbGwgZHJpbGxpbmcgc2VydmljZXMjNzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMjguMDAjVWx0cmEgc2hvcnQgcmFkaXVzIGRpcmVjdGlvbmFsIHdlbGwgZHJpbGxpbmcgc2VydmljZXMjNzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMjkuMDAjVW5kZXJiYWxhbmNlZCB3ZWxsIGRyaWxsaW5nIHNlcnZpY2VzIzcxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE2LjMwLjAwI1dlbGwgcGxhbm5pbmcgc2VydmljZXMjNzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMzEuMDAjV2VsbCByZWRyaWxsaW5nIG9yIHJld29ya2luZyBzZXJ2aWNlcyM3MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNi4zMi4wMCNXZWxsIGRyaWxsaW5nIGRldmlhdGlvbiBjb250cm9sIzcxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE2LjMzLjAwI09pbGZpZWxkIGdyYXZlbCBwYWNraW5nIHNlcnZpY2VzIzcxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE2LjM0LjAwI09pbGZpZWxkIGh1bGwgc3lzdGVtcyBzZXJ2aWNlcyM3MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNi4zNS4wMCNSaWcgd2VsbCBwdWxsaW5nIGNyZXcgc2VydmljZXMjNzEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTYuMzYuMDAjV2VsbGhlYWQgZXF1aXBtZW50IHNlcnZpY2VzIzcxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE2LjM3LjAwI1NpZGV0cmFja2luZyB3aXRoIHdoaXBzdG9jayBzZXJ2aWNlcyM3MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNy4wMC4wMCNPaWxmaWVsZCBmaXNoaW5nIHNlcnZpY2VzIzcxLjEyLjAwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjE3LjAxLjAwI09pbGZpZWxkIGZpc2hpbmcgc2VydmljZSBkZXNpZ24gc2VydmljZXMjNzEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTcuMDIuMDAjT2lsZmllbGQgZmlzaGluZyBzZXJ2aWNlIGVjb25vbWljIGV2YWx1YXRpb24gc2VydmljZXMjNzEuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTcuMDMuMDAjT2lsZmllbGQgZmlzaGluZyBzZXJ2aWNlIG9wZXJhdGlvbiBzZXJ2aWNlcyM3MS4xMi4xNy4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNy4wNC4wMCNPaWxmaWVsZCBqdW5rIHJlY292ZXJ5IHNlcnZpY2VzIzcxLjEyLjE3LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE3LjA1LjAwI09pbGZpZWxkIHBpcGUgcmVjb3Zlcnkgc2VydmljZSM3MS4xMi4xNy4wMC4wMAotdW5zcHNjNyM3MS4xMi4xNy4wNi4wMCNPaWxmaWVsZCBmaXNoaW5nIG9yIGRyaWxsaW5nIHNlcnZpY2VzIzcxLjEyLjE3LjAwLjAwCi11bnNwc2M3IzcxLjEyLjE4LjAwLjAwI0dhcyBsaWZ0IHNlcnZpY2VzIzcxLjEyLjAwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjE4LjAxLjAwI0NvaWxlZCB0dWJpbmcgZ2FzIGxpZnQgc2VydmljZXMjNzEuMTIuMTguMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTguMDIuMDAjR2FzIGxpZnQgZml4aW5nIG9yIHRlc3Rpbmcgc2VydmljZXMjNzEuMTIuMTguMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTguMDMuMDAjR2FzIGxpZnQga2lja292ZXIgc2VydmljZXMjNzEuMTIuMTguMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTguMDQuMDAjR2FzIGxpZnQgc2FuZCBjb250YWlubWVudCBzZXJ2aWNlcyM3MS4xMi4xOC4wMC4wMAotdW5zcHNjNyM3MS4xMi4xOS4wMC4wMCNEb3duIGhvbGUgZmx1aWQgc2VydmljZXMjNzEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTkuMDEuMDAjRG93biBob2xlIGZsdWlkIGV2YWx1YXRpb24gc2VydmljZXMjNzEuMTIuMTkuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTkuMDIuMDAjRG93biBob2xlIGZsdWlkIGxhYm9yYXRvcnkgc2VydmljZXMjNzEuMTIuMTkuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMTkuMDMuMDAjRG93biBob2xlIGZsdWlkIHNhbXBsaW5nIHNlcnZpY2VzIzcxLjEyLjE5LjAwLjAwCi11bnNwc2M3IzcxLjEyLjIwLjAwLjAwI1dlbGwgcGVyZm9yYXRpbmcgc2VydmljZXMjNzEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjAuMDEuMDAjQ29pbGVkIHR1YmluZyB3ZWxsIHBlcmZvcmF0aW5nIHNlcnZpY2VzIzcxLjEyLjIwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjIwLjAyLjAwI1NsaWNrbGluZSB3ZWxsIHBlcmZvcmF0aW5nIHNlcnZpY2VzIzcxLjEyLjIwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjIwLjAzLjAwI1Rocm91Z2ggdHViaW5nIHdlbGwgcGVyZm9yYXRpb24gc2VydmljZXMjNzEuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjAuMDQuMDAjVHViaW5nIGNvbnZleWVkIHdlbGwgcGVyZm9yYXRpbmcgc2VydmljZXMjNzEuMTIuMjAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjAuMDUuMDAjV2lyZWxpbmUgd2VsbCBwZXJmb3JhdGluZyBzZXJ2aWNlcyM3MS4xMi4yMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4yMC4wNi4wMCNXZWxsIHR1YmluZyBwdW5jaGVyIHNlcnZpY2VzIzcxLjEyLjIwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjIxLjAwLjAwI09pbGZpZWxkIHNhbmQgY29udHJvbCBzZXJ2aWNlcyM3MS4xMi4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4yMS4wMS4wMCNBY2lkIHNhbmQgY29udHJvbCBwdW1waW5nIHNlcnZpY2VzIzcxLjEyLjIxLjAwLjAwCi11bnNwc2M3IzcxLjEyLjIxLjAyLjAwI1NhbmQgY29udHJvbCBibGVuZGluZyBzZXJ2aWNlcyM3MS4xMi4yMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4yMS4wMy4wMCNDbGVhbmluZyBmbHVpZCBzYW5kIGNvbnRyb2wgc2VydmljZXMjNzEuMTIuMjEuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjEuMDQuMDAjQ29tcGxldGlvbiBmbHVpZCBzYW5kIGNvbnRyb2wgc2VydmljZXMjNzEuMTIuMjEuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjEuMDUuMDAjV2VsbCBjb25zb2xpZGF0aW9uIHNlcnZpY2VzIzcxLjEyLjIxLjAwLjAwCi11bnNwc2M3IzcxLjEyLjIxLjA2LjAwI09pbGZpZWxkIGZpbHRlcmluZyBzZXJ2aWNlcyM3MS4xMi4yMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4yMS4wNy4wMCNGcmFjdHVyaW5nIGZsdWlkIHNhbmQgY29udHJvbCBzZXJ2aWNlcyM3MS4xMi4yMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4yMS4wOC4wMCNGcmFjdHVyaW5nIHByZSBmcmFjIGRlc2lnbiB0ZXN0aW5nIHNlcnZpY2VzIzcxLjEyLjIxLjAwLjAwCi11bnNwc2M3IzcxLjEyLjIxLjA5LjAwI0dlbmVyYWwgc2FuZCBjb250cm9sIHNlcnZpY2VzIzcxLjEyLjIxLjAwLjAwCi11bnNwc2M3IzcxLjEyLjIxLjEwLjAwI0dyYXZlbCBjYXJyaWVyIGZsdWlkIHNhbmQgY29udHJvbCBzZXJ2aWNlcyM3MS4xMi4yMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4yMS4xMS4wMCNTYW5kIGNvbnRyb2wgbGFiIHRlc3Rpbmcgc2VydmljZXMjNzEuMTIuMjEuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjEuMTIuMDAjTXVsdGl6b25lIHNhbmQgY29udHJvbCBzZXJ2aWNlcyM3MS4xMi4yMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4yMS4xMy4wMCNTYW5kIGNvbnRyb2wgbW9uaXRvcmluZyBzZXJ2aWNlcyM3MS4xMi4yMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4yMS4xNC4wMCNTYW5kIGNvbnRyb2wgdGVtcG9yYXJ5IGlzb2xhdGlvbiBzZXJ2aWNlcyM3MS4xMi4yMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4yMS4xNS4wMCNXZWxsIHRvb2wgcmVkcmVzc2luZyBzZXJ2aWNlcyM3MS4xMi4yMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4yMS4xNi4wMCNOb24gZnJhY3R1cmluZyBzYW5kIGNvbnRyb2wgcHVtcGluZyBzZXJ2aWNlcyM3MS4xMi4yMS4wMC4wMAotdW5zcHNjNyM3MS4xMi4yMi4wMC4wMCNTbGlja2xpbmUgc2VydmljZXMjNzEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjIuMDEuMDAjU2xpY2tsaW5lIGZpc2hpbmcgc2VydmljZXMjNzEuMTIuMjIuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjIuMDIuMDAjU2xpY2tsaW5lIGxpZnRpbmcgc2VydmljZXMjNzEuMTIuMjIuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjIuMDMuMDAjU2xpY2tsaW5lIG1hbmlwdWxhdGlvbiBzZXJ2aWNlcyM3MS4xMi4yMi4wMC4wMAotdW5zcHNjNyM3MS4xMi4yMy4wMC4wMCNTdWJzZWEgd2VsbCBzZXJ2aWNlcyM3MS4xMi4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4yMy4wMS4wMCNTdWJzZWEgd2VsbCBkaXZpbmcgc2VydmljZXMjNzEuMTIuMjMuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjMuMDIuMDAjU3Vic2VhIHdlbGwgcmVtb3RlIG9wZXJhdGlvbiB2ZWhpY2xlIHJvdiBzZXJ2aWNlcyM3MS4xMi4yMy4wMC4wMAotdW5zcHNjNyM3MS4xMi4yMy4wMy4wMCNTdWJzZWEgd2VsbCBmaXh0dXJpbmcgb3IgdGVzdCBlcXVpcG1lbnQgc2VydmljZXMjNzEuMTIuMjMuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjMuMDQuMDAjU3Vic2VhIHdlbGwgaW50ZXJ2ZW50aW9uIG9yIGNvbXBsZXRpb24gc2VydmljZXMjNzEuMTIuMjMuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjMuMDUuMDAjU3Vic2VhIHdlbGwgc2FmZXR5IHRlc3QgdHJlZSBzZXJ2aWNlcyM3MS4xMi4yMy4wMC4wMAotdW5zcHNjNyM3MS4xMi4yMy4wNi4wMCNTdWJzZWEgd2VsbCBlcXVpcG1lbnQgbWFpbnRlbmFuY2Ugc2VydmljZXMjNzEuMTIuMjMuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjQuMDAuMDAjV2VsbCB0ZXN0aW5nIHNlcnZpY2VzIzcxLjEyLjAwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjI0LjAxLjAwI0RyaWxsIHN0ZW0gZmxvdyBtZXRlcmluZyBzZXJ2aWNlcyM3MS4xMi4yNC4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNC4wMi4wMCNEcmlsbCBzdGVtIHN1cmZhY2UgdGVzdGluZyBzZXJ2aWNlcyM3MS4xMi4yNC4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNC4wMy4wMCNEcmlsbCBzdGVtIHRlc3RpbmcgcGFja2VyIHNlcnZpY2VzIzcxLjEyLjI0LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI0LjA0LjAwI0RyaWxsIHN0ZW0gdGVzdGluZyBwcmVzc3VyZSBjb250cm9sIHRlc3Qgc2VydmljZXMjNzEuMTIuMjQuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjQuMDUuMDAjRHJpbGwgc3RlbSB0ZXN0aW5nIHB1bHNlIG9wZXJhdGVkIHRlc3Qgc2VydmljZXMjNzEuMTIuMjQuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjQuMDYuMDAjRHJpbGwgc3RlbSB0ZXN0aW5nIGZvciB1bHRyYSBoaWdoIHByZXNzIGhpZ2ggdGVtcCBlbnZpcm9ubWVudCBzZXJ2aWNlcyM3MS4xMi4yNC4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNC4wNy4wMCNEcmlsbCBzdGVtIHRlc3Rpbmcgc2VydmljZXMjNzEuMTIuMjQuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjQuMDguMDAjUGVyaW9kaWMgd2VsbCB0ZXN0aW5nIHNlcnZpY2VzIzcxLjEyLjI0LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI0LjA5LjAwI1N1cmZhY2Ugd2VsbCB0ZXN0aW5nIHNlcnZpY2VzIzcxLjEyLjI0LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI0LjEwLjAwI1VuZGVyYmFsYW5jZWQgdGVzdGluZyB3aGlsZSBkcmlsbGluZyBzZXJ2aWNlcyM3MS4xMi4yNC4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNS4wMC4wMCNXYXRlciBvciBnYXMgY29udHJvbCBzZXJ2aWNlcyM3MS4xMi4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNS4wMS4wMCNXYXRlciBvciBnYXMgY29udHJvbCBkZXNpZ24gc2VydmljZXMjNzEuMTIuMjUuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjUuMDIuMDAjV2F0ZXIgb3IgZ2FzIGNvbnRyb2wgZXZhbHVhdGlvbiBzZXJ2aWNlcyM3MS4xMi4yNS4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNS4wMy4wMCNXYXRlciBvciBnYXMgY29udHJvbCBpc29sYXRpb24gc2VydmljZXMjNzEuMTIuMjUuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjUuMDQuMDAjV2F0ZXIgb3IgZ2FzIGNvbnRyb2wgdGVzdGluZyBzZXJ2aWNlcyM3MS4xMi4yNS4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNS4wNS4wMCNXYXRlciBvciBnYXMgdGVzdGluZyBzZXJ2aWNlcyM3MS4xMi4yNS4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNi4wMC4wMCNXZWxsIGNvbXBsZXRpb24gc2VydmljZXMjNzEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjYuMDEuMDAjV2VsbCBjYXNpbmcgY29tcGxldGlvbiBzZXJ2aWNlcyM3MS4xMi4yNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNi4wMi4wMCNXZWxsIGNvbXBsZXRpb24gZmx1aWRzIHNlcnZpY2VzIzcxLjEyLjI2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI2LjAzLjAwI0dhcyBsaWZ0IHdlbGwgY29tcGxldGlvbiBzZXJ2aWNlcyM3MS4xMi4yNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNi4wNC4wMCNIb3Jpem9udGFsIGNhc2VkIGhvbGUgc2VydmljZXMjNzEuMTIuMjYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjYuMDUuMDAjSG9yaXpvbnRhbCBvcGVuIGhvbGUgc2VydmljZXMjNzEuMTIuMjYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjYuMDYuMDAjSW50ZWxsaWdlbnQgd2VsbCBjb21wbGV0aW9uIHNlcnZpY2VzIzcxLjEyLjI2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI2LjA3LjAwI0xpbmVyIHdlbGwgY29tcGxldGlvbiBzZXJ2aWNlcyM3MS4xMi4yNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNi4wOC4wMCNNdWx0aWxhdGVyYWwgd2VsbCBjb21wbGV0aW9uIHNlcnZpY2VzIzcxLjEyLjI2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI2LjA5LjAwI1Blcm1hbmVudCB3ZWxsIGNvbXBsZXRpb24gc2VydmljZXMjNzEuMTIuMjYuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjYuMTAuMDAjU2FuZCBjb250cm9sIHdlbGwgY29tcGxldGlvbiBzZXJ2aWNlcyM3MS4xMi4yNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNi4xMS4wMCNUZW1wb3JhcnkgZHJpbGwgc3RlbSB0ZXN0aW5nIHdlbGwgY29tcGxldGlvbiBzZXJ2aWNlcyM3MS4xMi4yNi4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNi4xMi4wMCNUdWJpbmcgd2VsbCBjb21wbGV0aW9uIHNlcnZpY2VzIzcxLjEyLjI2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI2LjEzLjAwI1VuZGVyYmFsYW5jZWQgd2VsbCBjb21wbGV0aW9uIHNlcnZpY2VzIzcxLjEyLjI2LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI3LjAwLjAwI1dlbGwgbWFpbnRlbmFuY2Ugc2VydmljZXMjNzEuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjcuMDEuMDAjT2lsIHdlbGwgcGxhdGZvcm0gbWFpbnRlbmFuY2Ugc2VydmljZXMjNzEuMTIuMjcuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjcuMDIuMDAjT2lsZmllbGQgcHVtcGluZyB1bml0IG1haW50ZW5hbmNlIHNlcnZpY2VzIzcxLjEyLjI3LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI3LjAzLjAwI09pbGZpZWxkIHJvZCBwdW1wIHJlcGFpciBzZXJ2aWNlcyM3MS4xMi4yNy4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNy4wNC4wMCNPaWxmaWVsZCBzbnViYmluZyBzZXJ2aWNlIzcxLjEyLjI3LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI3LjA1LjAwI09pbGZpZWxkIHN1Y2tlciByb2QgbWFpbnRlbmFuY2Ugc2VydmljZXMjNzEuMTIuMjcuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjcuMDYuMDAjV2VsbCBzd2FiYmluZyBzZXJ2aWNlcyM3MS4xMi4yNy4wMC4wMAotdW5zcHNjNyM3MS4xMi4yNy4wNy4wMCNPaWxmaWVsZCB0dWJpbmcgYW5jaG9yIHNlcnZpY2VzIzcxLjEyLjI3LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI3LjA4LjAwI09pbGZpZWxkIHB1bXAgbWVjaGFuaWMgc2VydmljZXMjNzEuMTIuMjcuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjguMDAuMDAjV2VsbCBtb25pdG9yaW5nIHNlcnZpY2VzIzcxLjEyLjAwLjAwLjAwCi11bnNwc2M3IzcxLjEyLjI4LjAxLjAwI0Rvd25ob2xlIHJlY29yZGluZyBzZXJ2aWNlcyM3MS4xMi4yOC4wMC4wMAotdW5zcHNjNyM3MS4xMi4yOC4wMi4wMCNXZWxsIGZsb3cgbW9uaXRvcmluZyBzZXJ2aWNlcyM3MS4xMi4yOC4wMC4wMAotdW5zcHNjNyM3MS4xMi4yOC4wMy4wMCNPaWwgb3IgZ2FzIHdlbGwgbW9uaXRvcmluZyBzZXJ2aWNlcyM3MS4xMi4yOC4wMC4wMAotdW5zcHNjNyM3MS4xMi4yOC4wNC4wMCNXZWxsIHNpdGUgcGhhc2UgbW9uaXRvcmluZyBzZXJ2aWNlcyM3MS4xMi4yOC4wMC4wMAotdW5zcHNjNyM3MS4xMi4yOC4wNS4wMCNXZWxsIHNpdGUgcHVtcCBtb25pdG9yaW5nIHNlcnZpY2VzIzcxLjEyLjI4LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI4LjA2LjAwI1dlbGwgc2l0ZSBzdXJmYWNlIGRhdGEgYWNxdWlzaXRpb24gc2VydmljZXMjNzEuMTIuMjguMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjguMDcuMDAjV2VsbCBzaXRlIHN1cmZhY2UgcmVhZG91dCBzZXJ2aWNlcyM3MS4xMi4yOC4wMC4wMAotdW5zcHNjNyM3MS4xMi4yOC4wOC4wMCNXZWxsIHNpdGUgc3VyZmFjZSByZWNvcmRpbmcgc2VydmljZXMjNzEuMTIuMjguMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjguMDkuMDAjU3VyZmFjZSB3ZWxsIHRlc3Rpbmcgc2VydmljZXMjNzEuMTIuMjguMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjguMTAuMDAjU3Vic3VyZmFjZSB3ZWxsIHRlc3Rpbmcgc2VydmljZXMjNzEuMTIuMjguMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjkuMDAuMDAjT2lsZmllbGQgcmlncyM3MS4xMi4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMi4yOS4wMS4wMCNEZWVwd2F0ZXIgb2lsZmllbGQgcmlnIHNlcnZpY2VzIzcxLjEyLjI5LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI5LjAyLjAwI0phY2t1cCBvaWxmaWVsZCByaWcgc2VydmljZXMjNzEuMTIuMjkuMDAuMDAKLXVuc3BzYzcjNzEuMTIuMjkuMDMuMDAjQmFyZ2Ugb2lsZmllbGQgcmlnIHNlcnZpY2VzIzcxLjEyLjI5LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI5LjA0LjAwI0xhbmQgb2lsZmllbGQgcmlnIHNlcnZpY2VzIzcxLjEyLjI5LjAwLjAwCi11bnNwc2M3IzcxLjEyLjI5LjA1LjAwI1BsYXRmb3JtIG9pbGZpZWxkIHJpZyBzZXJ2aWNlcyM3MS4xMi4yOS4wMC4wMAotdW5zcHNjNyM3MS4xMy4wMC4wMC4wMCNPaWwgYW5kIGdhcyBleHRyYWN0aW9uIGFuZCBwcm9kdWN0aW9uIGVuaGFuY2VtZW50IHNlcnZpY2VzIzcxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzcxLjEzLjEwLjAwLjAwI1dlbGwgZnJhY3R1cmluZyBzZXJ2aWNlcyM3MS4xMy4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMC4wMS4wMCNBY2lkIGJhc2VkIGZsdWlkIHdlbGwgZnJhY3R1cmluZyBzZXJ2aWNlcyM3MS4xMy4xMC4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMC4wMi4wMCNFbXVsc2lvbiBiYXNlZCBmbHVpZCB3ZWxsIGZyYWN0dXJpbmcgc2VydmljZXMjNzEuMTMuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTAuMDMuMDAjRm9hbSBiYXNlZCBmbHVpZCB3ZWxsIGZyYWN0dXJpbmcgc2VydmljZXMjNzEuMTMuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTAuMDQuMDAjT2lsIHdlbGwgZnJhY3R1cmluZyBzZXJ2aWNlcyM3MS4xMy4xMC4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMC4wNS4wMCNPaWwgd2VsbCBzY2FsZSBjb250cm9sIHNlcnZpY2VzIzcxLjEzLjEwLjAwLjAwCi11bnNwc2M3IzcxLjEzLjEwLjA2LjAwI1dlbGwgZnJhY3R1cmUgdGVzdGluZyBzZXJ2aWNlcyM3MS4xMy4xMC4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMC4wNy4wMCNXZWxsIGZyYWN0dXJpbmcgZG93bmhvbGUgZXZhbHVhdGlvbiBzZXJ2aWNlcyM3MS4xMy4xMC4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMC4wOC4wMCNXZWxsIGZyYWN0dXJpbmcgaGVpZ2h0IGNvbnRyb2wgc2VydmljZXMjNzEuMTMuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTAuMDkuMDAjV2VsbCBmcmFjdHVyaW5nIG1vbml0b3Jpbmcgc2VydmljZXMjNzEuMTMuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTAuMTAuMDAjV2VsbCBmcmFjdHVyaW5nIHNlcnZpY2UgZGVzaWduIHNlcnZpY2VzIzcxLjEzLjEwLjAwLjAwCi11bnNwc2M3IzcxLjEzLjEwLjExLjAwI1dlbGwgZnJhY3R1cmluZyBzZXJ2aWNlIGV2YWx1YXRpb24gc2VydmljZXMjNzEuMTMuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTAuMTIuMDAjV2VsbCBmcmFjdHVyaW5nIHN1cmZhY2UgZXZhbHVhdGlvbiBzZXJ2aWNlcyM3MS4xMy4xMC4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMC4xMy4wMCNXZWxsIGZyYWN0dXJpbmcgdHJlYXRtZW50IHF1YWxpdHkgY29udHJvbCBzZXJ2aWNlcyM3MS4xMy4xMC4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMC4xNC4wMCNPaWwgYmFzZWQgZmx1aWQgd2VsbCBmcmFjdHVyaW5nIHNlcnZpY2VzIzcxLjEzLjEwLjAwLjAwCi11bnNwc2M3IzcxLjEzLjEwLjE1LjAwI090aGVyIHdlbGwgZnJhY3R1cmluZyBzZXJ2aWNlcyM3MS4xMy4xMC4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMC4xNi4wMCNXZWxsIGZyYWN0dXJpbmcgc3RyZXNzIG1hbmFnZW1lbnQgc2VydmljZXMjNzEuMTMuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTAuMTcuMDAjV2F0ZXIgYmFzZWQgZmx1aWQgd2VsbCBmcmFjdHVyaW5nIHNlcnZpY2VzIzcxLjEzLjEwLjAwLjAwCi11bnNwc2M3IzcxLjEzLjExLjAwLjAwI01hdHJpeCBzdGltdWxhdGlvbiBzZXJ2aWNlcyM3MS4xMy4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMS4wMS4wMCNBY2lkIGJhc2VkIG1hdHJpeCBzdGltdWxhdGlvbiBzZXJ2aWNlcyM3MS4xMy4xMS4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMS4wMi4wMCNGb3JtYXRpb24gc2VhbGVyIG1hdHJpeCBzdGltdWxhdGlvbiBzZXJ2aWNlcyM3MS4xMy4xMS4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMS4wMy4wMCNNYXRyaXggb3JnYW5pYyBjbGVhbnVwIHNlcnZpY2VzIzcxLjEzLjExLjAwLjAwCi11bnNwc2M3IzcxLjEzLjExLjA0LjAwI01hdHJpeCBvcmdhbmljIGluaGliaXRpb24gc2VydmljZXMjNzEuMTMuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTEuMDUuMDAjTWF0cml4IHNjYWxlIGNsZWFudXAgc2VydmljZXMjNzEuMTMuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTEuMDYuMDAjTWF0cml4IHNjYWxlIGluaGliaXRpb24gc2VydmljZXMjNzEuMTMuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTEuMDcuMDAjTWF0cml4IHRyZWF0bWVudCBkZXNpZ24gc2VydmljZXMjNzEuMTMuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTEuMDguMDAjTWF0cml4IHRyZWF0bWVudCBkaXZlcnNpb24gc2VydmljZXMjNzEuMTMuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTEuMDkuMDAjTWF0cml4IHRyZWF0bWVudCBldmFsdWF0aW9uIHNlcnZpY2VzIzcxLjEzLjExLjAwLjAwCi11bnNwc2M3IzcxLjEzLjExLjEwLjAwI01hdHJpeCB0cmVhdG1lbnQgcXVhbGl0eSBjb250cm9sIHNlcnZpY2VzIzcxLjEzLjExLjAwLjAwCi11bnNwc2M3IzcxLjEzLjExLjExLjAwI05vbiBhY2lkIGJhc2VkIG1hdHJpeCBzdGltdWxhdGlvbiBzZXJ2aWNlcyM3MS4xMy4xMS4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMi4wMC4wMCNPaWxmaWVsZCBuaXRyb2dlbiBzZXJ2aWNlcyM3MS4xMy4wMC4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMi4wMS4wMCNOaXRyb2dlbiB3ZWxsIHNlcnZpY2VzIzcxLjEzLjEyLjAwLjAwCi11bnNwc2M3IzcxLjEzLjEzLjAwLjAwI090aGVyIG9pbGZpZWxkIHB1bXBpbmcgc2VydmljZXMjNzEuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTMuMDEuMDAjQm90dG9tIGludGFrZSBvaWxmaWVsZCBwdW1waW5nIHNlcnZpY2VzIzcxLjEzLjEzLjAwLjAwCi11bnNwc2M3IzcxLjEzLjEzLjAyLjAwI0NhYmxlIGRlcGxveWVkIG9pbGZpZWxkIHB1bXBpbmcgc2VydmljZXMjNzEuMTMuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTMuMDMuMDAjQ28yIG9pbGZpZWxkIHB1bXBpbmcgc2VydmljZXMjNzEuMTMuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTMuMDQuMDAjQ29pbGVkIHR1YmluZyBkZXBsb3llZCBvaWxmaWVsZCBwdW1waW5nIHNlcnZpY2VzIzcxLjEzLjEzLjAwLjAwCi11bnNwc2M3IzcxLjEzLjEzLjA1LjAwI0Rvd25ob2xlIHB1bXBpbmcgc2VydmljZXMjNzEuMTMuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTMuMDYuMDAjRHVhbCBjb21wbGV0aW9uIHdlbGwgc2VydmljZXMjNzEuMTMuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTMuMDcuMDAjSG9yaXpvbnRhbCBwdW1waW5nIHdlbGwgc2VydmljZXMjNzEuMTMuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTMuMDguMDAjT2lsZmllbGQgcHVtcGluZyBpbnN0YWxsYXRpb24gcHVsbCBvciBvcGVyYXRpb24gc2VydmljZXMjNzEuMTMuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTMuMDkuMDAjV2VsbCBwcm9maWxlIG1vZGlmaWNhdGlvbiBzZXJ2aWNlcyM3MS4xMy4xMy4wMC4wMAotdW5zcHNjNyM3MS4xMy4xMy4xMC4wMCNPaWxmaWVsZCBzcG9vbGluZyBzZXJ2aWNlcyM3MS4xMy4xMy4wMC4wMAotdW5zcHNjNyM3MS4xMy4xNC4wMC4wMCNXZWxsIHByb2R1Y3Rpb24gc2VydmljZXMjNzEuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTMuMTQuMDEuMDAjT2lsZmllbGQgZmxhcmUgc3lzdGVtIHNlcnZpY2VzIzcxLjEzLjE0LjAwLjAwCi11bnNwc2M3IzcxLjEzLjE0LjAyLjAwI09pbGZpZWxkIGhvdCBvaWwgb3Igd2F0ZXIgc2VydmljZSM3MS4xMy4xNC4wMC4wMAotdW5zcHNjNyM3MS4xMy4xNC4wMy4wMCNPaWxmaWVsZCBzdGVhbWluZyBzZXJ2aWNlcyM3MS4xMy4xNC4wMC4wMAotdW5zcHNjNyM3MS4xNC4wMC4wMC4wMCNPaWwgYW5kIGdhcyByZXN0b3JhdGlvbiBhbmQgcmVjbGFtYXRpb24gc2VydmljZXMjNzEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTQuMTAuMDAuMDAjRW1lcmdlbmN5IHdlbGwgY29udHJvbCBzZXJ2aWNlcyM3MS4xNC4wMC4wMC4wMAotdW5zcHNjNyM3MS4xNC4xMC4wMS4wMCNXZWxsIHByZXNzdXJlIGNvbnRyb2wgc2VydmljZXMjNzEuMTQuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTQuMTAuMDIuMDAjV2VsbCBjYXBwaW5nIHNlcnZpY2VzIzcxLjE0LjEwLjAwLjAwCi11bnNwc2M3IzcxLjE0LjEwLjAzLjAwI1dlbGwgZmlyZSBmaWdodGluZyBzZXJ2aWNlcyM3MS4xNC4xMC4wMC4wMAotdW5zcHNjNyM3MS4xNC4xMC4wNC4wMCNXaWxkIHdlbGwgY29udHJvbCBzZXJ2aWNlcyM3MS4xNC4xMC4wMC4wMAotdW5zcHNjNyM3MS4xNC4xMS4wMC4wMCNXZWxsIHBsdWdnaW5nIGFuZCBhYmFuZG9ubWVudCBzZXJ2aWNlcyM3MS4xNC4wMC4wMC4wMAotdW5zcHNjNyM3MS4xNC4xMS4wMS4wMCNXZWxsIGFiYW5kb25tZW50IHNlcnZpY2VzIzcxLjE0LjExLjAwLjAwCi11bnNwc2M3IzcxLjE0LjExLjAyLjAwI1dlbGwgcGx1Z2dpbmcgc2VydmljZXMjNzEuMTQuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTQuMTIuMDAuMDAjV2VsbCBzaXRlIHJlc3RvcmF0aW9uIzcxLjE0LjAwLjAwLjAwCi11bnNwc2M3IzcxLjE0LjEyLjAxLjAwI1dlbGwgY2xlYW5pbmcgb3Igc3dhYmJpbmcgc2VydmljZXMjNzEuMTQuMTIuMDAuMDAKLXVuc3BzYzcjNzEuMTQuMTIuMDIuMDAjV2VsbCBzaXRlIHJlc3RvcmF0aW9uIHNlcnZpY2VzIzcxLjE0LjEyLjAwLjAwCi11bnNwc2M3IzcxLjE1LjAwLjAwLjAwI09pbCBhbmQgZ2FzIGRhdGEgbWFuYWdlbWVudCBhbmQgcHJvY2Vzc2luZyBzZXJ2aWNlcyM3MS4wMC4wMC4wMC4wMAotdW5zcHNjNyM3MS4xNS4xMC4wMC4wMCNPaWxmaWVsZCBkYXRhIGNvbW11bmljYXRpb24gc2VydmljZXMjNzEuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTUuMTAuMDEuMDAjTG9nIGRhdGEgdHJhbnNtaXNzaW9uIHNlcnZpY2VzIzcxLjE1LjEwLjAwLjAwCi11bnNwc2M3IzcxLjE1LjEwLjAyLjAwI0xvZyBncmFwaGljcyB0cmFuc21pc3Npb24gc2VydmljZXMjNzEuMTUuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTUuMTAuMDMuMDAjUmVhbCB0aW1lIHdlbGwgZGF0YSBtb25pdG9yaW5nIHNlcnZpY2VzIzcxLjE1LjEwLjAwLjAwCi11bnNwc2M3IzcxLjE1LjEwLjA0LjAwI1NhdGVsbGl0ZSB3ZWxsIGRhdGEgdHJhbnNtaXNzaW9uIHNlcnZpY2VzIzcxLjE1LjEwLjAwLjAwCi11bnNwc2M3IzcxLjE1LjEwLjA1LjAwI1dlbGwgZGF0YSB0cmFuc21pc3Npb24gc2VydmljZXMjNzEuMTUuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTUuMTEuMDAuMDAjT2lsZmllbGQgZGF0YSBtYW5hZ2VtZW50IHNlcnZpY2VzIzcxLjE1LjAwLjAwLjAwCi11bnNwc2M3IzcxLjE1LjExLjAxLjAwI09pbGZpZWxkIGFzc2V0IGRhdGEgbWFuYWdlbWVudCBzZXJ2aWNlcyM3MS4xNS4xMS4wMC4wMAotdW5zcHNjNyM3MS4xNS4xMS4wMi4wMCNPaWxmaWVsZCBkYXRhIG1pbmluZyBzZXJ2aWNlcyM3MS4xNS4xMS4wMC4wMAotdW5zcHNjNyM3MS4xNS4xMS4wMy4wMCNMb2cgZGF0YSBtYW5hZ2VtZW50IHNlcnZpY2VzIzcxLjE1LjExLjAwLjAwCi11bnNwc2M3IzcxLjE1LjExLjA0LjAwI09pbGZpZWxkIG1hcHBpbmcgZGF0YSBtYW5hZ2VtZW50IHNlcnZpY2VzIzcxLjE1LjExLjAwLjAwCi11bnNwc2M3IzcxLjE1LjExLjA1LjAwI1NlaXNtaWMgZGF0YSBtYW5hZ2VtZW50IHNlcnZpY2VzIzcxLjE1LjExLjAwLjAwCi11bnNwc2M3IzcxLjE1LjEyLjAwLjAwI09pbGZpZWxkIGVjb25vbWljIGFuZCByaXNrIG1vZGVsIHNlcnZpY2VzIzcxLjE1LjAwLjAwLjAwCi11bnNwc2M3IzcxLjE1LjEyLjAxLjAwI09pbGZpZWxkIGJ1ZGdldGluZyBzZXJ2aWNlcyM3MS4xNS4xMi4wMC4wMAotdW5zcHNjNyM3MS4xNS4xMi4wMi4wMCNPaWxmaWVsZCBjYXBpdGFsIHBsYW5uaW5nIHNlcnZpY2VzIzcxLjE1LjEyLjAwLjAwCi11bnNwc2M3IzcxLjE1LjEyLjAzLjAwI09pbGZpZWxkIGRlY2lzaW9uIHRyZWUgc2VydmljZXMjNzEuMTUuMTIuMDAuMDAKLXVuc3BzYzcjNzEuMTUuMTMuMDAuMDAjT2lsZmllbGQgaW50ZXJwcmV0YXRpb24gc2VydmljZXMjNzEuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTUuMTMuMDEuMDAjT2lsZmllbGQgYnViYmxlIG1hcCBzZXJ2aWNlcyM3MS4xNS4xMy4wMC4wMAotdW5zcHNjNyM3MS4xNS4xMy4wMi4wMCNPaWxmaWVsZCBjYXNlIHN0dWRpZXMjNzEuMTUuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTUuMTMuMDMuMDAjT2lsZmllbGQgZGVjbGluZSBhbmFseXNpcyM3MS4xNS4xMy4wMC4wMAotdW5zcHNjNyM3MS4xNS4xMy4wNC4wMCNPaWxmaWVsZCBmaWVsZCBzdHVkaWVzIzcxLjE1LjEzLjAwLjAwCi11bnNwc2M3IzcxLjE1LjEzLjA1LjAwI09pbGZpZWxkIGZyYWN0dXJpbmcgaW50ZXJwcmV0YXRpb24gc2VydmljZXMjNzEuMTUuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTUuMTMuMDYuMDAjR2VvbG9neSBzZXJ2aWNlcyM3MS4xNS4xMy4wMC4wMAotdW5zcHNjNyM3MS4xNS4xMy4wNy4wMCNHZW9waHlzaWNzIHNlcnZpY2VzIzcxLjE1LjEzLjAwLjAwCi11bnNwc2M3IzcxLjE1LjEzLjA4LjAwI0dyYXZlbCBwYWNrIGludGVycHJldGF0aW9uIHNlcnZpY2VzIzcxLjE1LjEzLjAwLjAwCi11bnNwc2M3IzcxLjE1LjEzLjA5LjAwI09pbGZpZWxkIGdyaWQgbWFwcGluZyBzZXJ2aWNlcyM3MS4xNS4xMy4wMC4wMAotdW5zcHNjNyM3MS4xNS4xMy4xMC4wMCNPaWxmaWVsZCBtYXBwaW5nIG9yIHZpc3VhbGl6YXRpb24gc2VydmljZXMjNzEuMTUuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTUuMTMuMTEuMDAjUGV0cm9waHlzaWNzIHNlcnZpY2VzIzcxLjE1LjEzLjAwLjAwCi11bnNwc2M3IzcxLjE1LjEzLjEyLjAwI1Jlc2Vydm9pciBlbmdpbmVlcmluZyBzZXJ2aWNlcyM3MS4xNS4xMy4wMC4wMAotdW5zcHNjNyM3MS4xNS4xMy4xMy4wMCNSZXNlcnZvaXIgbW9kZWxpbmcgc2VydmljZXMjNzEuMTUuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTUuMTMuMTQuMDAjUmVzZXJ2b2lyIHNpbXVsYXRpb24gc2VydmljZXMjNzEuMTUuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTUuMTMuMTUuMDAjUm9jayBtZWNoYW5pY3Mgc2VydmljZXMjNzEuMTUuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTUuMTQuMDAuMDAjV2VsbCBzZXJ2aWNlIGVuZ2luZWVyaW5nIzcxLjE1LjAwLjAwLjAwCi11bnNwc2M3IzcxLjE1LjE0LjAxLjAwI1dlbGwgY2VtZW50aW5nIGpvYiBkZXNpZ24gc2VydmljZXMjNzEuMTUuMTQuMDAuMDAKLXVuc3BzYzcjNzEuMTUuMTQuMDIuMDAjQ29pbGVkIHR1YmluZyBqb2IgZGVzaWduIHNlcnZpY2VzIzcxLjE1LjE0LjAwLjAwCi11bnNwc2M3IzcxLjE1LjE0LjAzLjAwI1dlbGwgZHJpbGxpbmcgam9iIGRlc2lnbiBzZXJ2aWNlcyM3MS4xNS4xNC4wMC4wMAotdW5zcHNjNyM3MS4xNS4xNC4wNC4wMCNXZWxsIGZyYWN0dXJpbmcgam9iIGRlc2lnbiBzZXJ2aWNlcyM3MS4xNS4xNC4wMC4wMAotdW5zcHNjNyM3MS4xNS4xNC4wNS4wMCNNYXRyaXggc3RpbXVsYXRpb24gam9iIGRlc2lnbiBzZXJ2aWNlcyM3MS4xNS4xNC4wMC4wMAotdW5zcHNjNyM3MS4xNS4xNC4wNi4wMCNXZWxsIHNhbmQgY29udHJvbCBqb2IgZGVzaWduIHNlcnZpY2VzIzcxLjE1LjE0LjAwLjAwCi11bnNwc2M3IzcxLjE2LjAwLjAwLjAwI09pbCBhbmQgZ2FzIHdlbGwgcHJvamVjdCBtYW5hZ2VtZW50IHNlcnZpY2VzIzcxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzcxLjE2LjEwLjAwLjAwI09pbGZpZWxkIE1vZGVsaW5nIFNlcnZpY2VzIzcxLjE2LjAwLjAwLjAwCi11bnNwc2M3IzcxLjE2LjEwLjAxLjAwI09pbGZpZWxkIGNvbXBsZXRpb24gbW9kZWxzIzcxLjE2LjEwLjAwLjAwCi11bnNwc2M3IzcxLjE2LjEwLjAyLjAwI09pbGZpZWxkIGRyaWxsaW5nIG1vZGVscyM3MS4xNi4xMC4wMC4wMAotdW5zcHNjNyM3MS4xNi4xMC4wMy4wMCNPaWxmaWVsZCBlY29ub21pYyBtb2RlbHMjNzEuMTYuMTAuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTAuMDQuMDAjT2lsZmllbGQgZmllbGQgZGV2ZWxvcG1lbnQgbW9kZWxzIzcxLjE2LjEwLjAwLjAwCi11bnNwc2M3IzcxLjE2LjEwLjA1LjAwI09pbGZpZWxkIHByb2R1Y3Rpb24gbW9kZWxzIzcxLjE2LjEwLjAwLjAwCi11bnNwc2M3IzcxLjE2LjEwLjA2LjAwI09pbGZpZWxkIHJpc2sgbWFuYWdlbWVudCBzZXJ2aWNlcyM3MS4xNi4xMC4wMC4wMAotdW5zcHNjNyM3MS4xNi4xMS4wMC4wMCNPaWxmaWVsZCBwcm9kdWN0aW9uIGVuZ2luZWVyaW5nIG1hbmFnZW1lbnQjNzEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTEuMDEuMDAjT2lsZmllbGQgYXJ0aWZpY2lhbCBsaWZ0IHNlcnZpY2VzIzcxLjE2LjExLjAwLjAwCi11bnNwc2M3IzcxLjE2LjExLjAyLjAwI0VuaGFuY2VkIG9pbCByZWNvdmVyeSBzZXJ2aWNlcyM3MS4xNi4xMS4wMC4wMAotdW5zcHNjNyM3MS4xNi4xMS4wMy4wMCNXZWxsIGluamVjdGlvbiBzZXJ2aWNlcyM3MS4xNi4xMS4wMC4wMAotdW5zcHNjNyM3MS4xNi4xMS4wNC4wMCNPaWxmaWVsZCBub2RhbCBhbmFseXNpcyBzZXJ2aWNlcyM3MS4xNi4xMS4wMC4wMAotdW5zcHNjNyM3MS4xNi4xMS4wNS4wMCNXZWxsIHBlcmZvcmF0aW9uIHNlcnZpY2VzIzcxLjE2LjExLjAwLjAwCi11bnNwc2M3IzcxLjE2LjExLjA2LjAwI09pbGZpZWxkIHByb2R1Y3Rpb24gY2hlbWlzdHJ5IHNlcnZpY2VzIzcxLjE2LjExLjAwLjAwCi11bnNwc2M3IzcxLjE2LjExLjA3LjAwI09pbGZpZWxkIHByb2R1Y3Rpb24gbW9uaXRvcmluZyBzZXJ2aWNlcyM3MS4xNi4xMS4wMC4wMAotdW5zcHNjNyM3MS4xNi4xMS4wOC4wMCNPaWxmaWVsZCBzYW5kIGNvbnRyb2wgc2VydmljZXMjNzEuMTYuMTEuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTEuMDkuMDAjV2VsbCBzdGltdWxhdGlvbiBzZXJ2aWNlcyM3MS4xNi4xMS4wMC4wMAotdW5zcHNjNyM3MS4xNi4xMS4xMC4wMCNVbmRlcmdyb3VuZCBnYXMgc3RvcmFnZSBzZXJ2aWNlcyM3MS4xNi4xMS4wMC4wMAotdW5zcHNjNyM3MS4xNi4xMS4xMS4wMCNPaWxmaWVsZCB3YXRlciBtYW5hZ2VtZW50IHNlcnZpY2VzIzcxLjE2LjExLjAwLjAwCi11bnNwc2M3IzcxLjE2LjEyLjAwLjAwI09pbGZpZWxkIHByb2R1Y3Rpb24gb3BlcmF0aW9ucyBtYW5hZ2VtZW50IzcxLjE2LjAwLjAwLjAwCi11bnNwc2M3IzcxLjE2LjEyLjAxLjAwI09pbGZpZWxkIGhvdCBvaWxpbmcgc2VydmljZSM3MS4xNi4xMi4wMC4wMAotdW5zcHNjNyM3MS4xNi4xMi4wMi4wMCNPaWxmaWVsZCBsZWFzZSBvcGVyYXRpb25zIzcxLjE2LjEyLjAwLjAwCi11bnNwc2M3IzcxLjE2LjEyLjAzLjAwI09pbGZpZWxkIGxvZ2dpbmcgc2VydmljZXMjNzEuMTYuMTIuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTIuMDQuMDAjT2lsZmllbGQgcGFyYWZmaW4gY3V0dGluZyBzZXJ2aWNlIzcxLjE2LjEyLjAwLjAwCi11bnNwc2M3IzcxLjE2LjEyLjA1LjAwI09pbGZpZWxkIHBsYW5uaW5nIHNlcnZpY2VzIzcxLjE2LjEyLjAwLjAwCi11bnNwc2M3IzcxLjE2LjEyLjA2LjAwI09pbGZpZWxkIHByb2Nlc3Npbmcgc2VydmljZXMjNzEuMTYuMTIuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTIuMDcuMDAjV2VsbCB0ZXN0aW5nIHNlcnZpY2VzIzcxLjE2LjEyLjAwLjAwCi11bnNwc2M3IzcxLjE2LjEzLjAwLjAwI09pbGZpZWxkIHByb2plY3QgbWFuYWdlbWVudCBzZXJ2aWNlcyM3MS4xNi4wMC4wMC4wMAotdW5zcHNjNyM3MS4xNi4xMy4wMS4wMCNPaWxmaWVsZCBhdWRpdHMgb3IgaW5zcGVjdGlvbiBzZXJ2aWNlcyM3MS4xNi4xMy4wMC4wMAotdW5zcHNjNyM3MS4xNi4xMy4wMi4wMCNPaWxmaWVsZCBlbWVyZ2VuY3kgcmVzcG9uc2UgcGxhbm5pbmcgc2VydmljZXMjNzEuMTYuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTMuMDMuMDAjT2lsZmllbGQgZmllbGQgZGV2ZWxvcG1lbnQgc2VydmljZXMjNzEuMTYuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTMuMDQuMDAjT2lsZmllbGQgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyBzZXJ2aWNlcyM3MS4xNi4xMy4wMC4wMAotdW5zcHNjNyM3MS4xNi4xMy4wNS4wMCNPaWxmaWVsZCByZXBvcnRpbmcgc2VydmljZXMjNzEuMTYuMTMuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTMuMDYuMDAjT2lsZmllbGQgc3VjY2Vzc2lvbiBwbGFuIG9yIGhhbmRvdmVyIHNlcnZpY2VzIzcxLjE2LjEzLjAwLjAwCi11bnNwc2M3IzcxLjE2LjEzLjA3LjAwI09pbGZpZWxkIHRyYWluaW5nIG1hdHJpeCBzZXJ2aWNlcyM3MS4xNi4xMy4wMC4wMAotdW5zcHNjNyM3MS4xNi4xMy4wOC4wMCNXZWxsIHNpdGUgbG9naXN0aWNzIG9yIHByb2N1cmVtZW50IHNlcnZpY2VzIzcxLjE2LjEzLjAwLjAwCi11bnNwc2M3IzcxLjE2LjE0LjAwLjAwI1dlbGwgY29uc3RydWN0aW9uIG1hbmFnZW1lbnQgc2VydmljZXMjNzEuMTYuMDAuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTQuMDEuMDAjQ29pbGVkIHR1YmluZyBkcmlsbGluZyBzZXJ2aWNlcyM3MS4xNi4xNC4wMC4wMAotdW5zcHNjNyM3MS4xNi4xNC4wMi4wMCNXZWxsIGNvbXBsZXRpb24gZW5naW5lZXJpbmcgc2VydmljZXMjNzEuMTYuMTQuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTQuMDMuMDAjRGVhZG1hbiBhbmNob3Igc2VydmljZXMjNzEuMTYuMTQuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTQuMDQuMDAjV2VsbCBkcmlsbGluZyBlbmdpbmVlcmluZyBzZXJ2aWNlcyM3MS4xNi4xNC4wMC4wMAotdW5zcHNjNyM3MS4xNi4xNC4wNS4wMCNXZWxsIHNpdGUgcGl0IGxpbmluZyBzZXJ2aWNlcyM3MS4xNi4xNC4wMC4wMAotdW5zcHNjNyM3MS4xNi4xNC4wNi4wMCNXZWxsIHBsdWcgb3IgYWJhbmRvbm1lbnQgc2VydmljZSM3MS4xNi4xNC4wMC4wMAotdW5zcHNjNyM3MS4xNi4xNC4wNy4wMCNXZWxsIHB1bGxpbmcgdW5pdCBzZXJ2aWNlcyM3MS4xNi4xNC4wMC4wMAotdW5zcHNjNyM3MS4xNi4xNC4wOC4wMCNTaG9yZWJhc2Ugc2VydmljZXMjNzEuMTYuMTQuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTQuMDkuMDAjVGVzdCBwaXQgbGluaW5nIHNlcnZpY2VzIzcxLjE2LjE0LjAwLjAwCi11bnNwc2M3IzcxLjE2LjE0LjEwLjAwI1dlbGwgc2l0ZSB2YWN1dW0gdHJ1Y2sgc2VydmljZXMjNzEuMTYuMTQuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTQuMTEuMDAjVW5kZXJiYWxhbmNlZCBhcHBsaWNhdGlvbnMgZW5naW5lZXJpbmcgc2VydmljZXMjNzEuMTYuMTQuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTQuMTIuMDAjV2VsbCB3b3Jrb3ZlciBzZXJ2aWNlcyM3MS4xNi4xNC4wMC4wMAotdW5zcHNjNyM3MS4xNi4xNC4xMy4wMCNXZWxsIGZhYnJpY2F0aW9uIG9yIGNvbnN0cnVjdGlvbiBzZXJ2aWNlcyM3MS4xNi4xNC4wMC4wMAotdW5zcHNjNyM3MS4xNi4xNS4wMC4wMCNXZWxsIHNpdGUgb3BlcmF0aW9ucyBzZXJ2aWNlcyM3MS4xNi4wMC4wMC4wMAotdW5zcHNjNyM3MS4xNi4xNS4wMS4wMCNXZWxsIHNpdGUgZWxlY3RyaWNhbCBvciBpbnN0cnVtZW50YXRpb24gc2VydmljZXMjNzEuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTUuMDIuMDAjV2VsbCBzaXRlIGhlYXZ5IGVxdWlwbWVudCBvciBjcmFuZSBzZXJ2aWNlcyM3MS4xNi4xNS4wMC4wMAotdW5zcHNjNyM3MS4xNi4xNS4wMy4wMCNXZWxsIHNpdGUgaW5zcGVjdGlvbiBvciBlcXVpcG1lbnQgdGVzdGluZyBzZXJ2aWNlcyM3MS4xNi4xNS4wMC4wMAotdW5zcHNjNyM3MS4xNi4xNS4wNC4wMCNXZWxsIHNpdGUgaW5zdHJ1bWVudCBhbmQgbWV0ZXIgc2VydmljZXMjNzEuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNzEuMTYuMTUuMDUuMDAjV2VsbCBzaXRlIHZhbHZlIG9yIHZhbHZlIHBhcnQgc2VydmljZXMjNzEuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNzIuMDAuMDAuMDAuMDAjQnVpbGRpbmcgYW5kIENvbnN0cnVjdGlvbiBhbmQgTWFpbnRlbmFuY2UgU2VydmljZXMjNzIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMDAuMDAuMDAjQnVpbGRpbmcgY29uc3RydWN0aW9uIGFuZCBzdXBwb3J0IGFuZCBtYWludGVuYW5jZSBhbmQgcmVwYWlyIHNlcnZpY2VzIzcyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzcyLjEwLjE1LjAwLjAwI0J1aWxkaW5nIHN1cHBvcnQgc2VydmljZXMjNzIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMTUuMDEuMDAjSGFuZHltYW4gc2VydmljZXMjNzIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMTUuMDIuMDAjU2NhZmZvbGRpbmcgc2VydmljZXMjNzIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMTUuMDMuMDAjUmlnZ2luZyBzZXJ2aWNlcyM3Mi4xMC4xNS4wMC4wMAotdW5zcHNjNyM3Mi4xMC4xNS4wNC4wMCNEaXNhc3RlciBwcm9vZmluZyBvciBjb250aW5nZW5jeSBzZXJ2aWNlcyM3Mi4xMC4xNS4wMC4wMAotdW5zcHNjNyM3Mi4xMC4xNS4wNS4wMCNMb2Nrc21pdGggc2VydmljZXMjNzIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMTYuMDAuMDAjUm9vZmluZyBhbmQgc2lkaW5nIGFuZCBzaGVldCBtZXRhbCB3b3JrIzcyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzcyLjEwLjE2LjAxLjAwI1Jvb2ZpbmcgaW5zdGFsbGF0aW9uIG9yIHJlcGFpciM3Mi4xMC4xNi4wMC4wMAotdW5zcHNjNyM3Mi4xMC4xNi4wMi4wMCNTa3lsaWdodCBpbnN0YWxsYXRpb24jNzIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMTYuMDMuMDAjR3V0dGVyIG9yIGRvd25zcG91dCBzZXJ2aWNlcyM3Mi4xMC4xNi4wMC4wMAotdW5zcHNjNyM3Mi4xMC4xNi4wNC4wMCNBcmNoaXRlY3R1cmFsIHNoZWV0IG1ldGFsIHdvcmsjNzIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMTYuMDUuMDAjQ2VpbGluZyBlcmVjdGlvbiBvciByZXBhaXIjNzIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMTYuMDYuMDAjQ2h1dGUgaW5zdGFsbGF0aW9uIzcyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzcyLjEwLjE2LjA3LjAwI1NpZGluZyBpbnN0YWxsYXRpb24gb3IgcmVwYWlyIzcyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzcyLjEwLjE3LjAwLjAwI0NvbmNyZXRlIHdvcmsjNzIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMTcuMDEuMDAjRXh0ZXJpb3IgY29uY3JldGUgb3Igc3R1Y2NvIHNlcnZpY2VzIzcyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzcyLjEwLjE3LjAyLjAwI0dyb3V0aW5nIHNlcnZpY2VzIzcyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzcyLjEwLjE3LjAzLjAwI1NpZGV3YWxrIG9yIGN1cmIgY29uc3RydWN0aW9uIzcyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzcyLjEwLjE3LjA0LjAwI0ZvdW5kYXRpb24gb3Igc2xhYiB3b3JrIzcyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzcyLjEwLjE4LjAwLjAwI0V4dGVyaW9yIGNsZWFuaW5nIzcyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzcyLjEwLjE4LjAxLjAwI1NhbmRibGFzdGluZyM3Mi4xMC4xOC4wMC4wMAotdW5zcHNjNyM3Mi4xMC4xOC4wMi4wMCNIaWdoIHByZXNzdXJlIHdhdGVyIGJsYXN0aW5nIzcyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzcyLjEwLjE4LjAzLjAwI1N0ZWFtIGNsZWFuaW5nIzcyLjEwLjE4LjAwLjAwCi11bnNwc2M3IzcyLjEwLjE5LjAwLjAwI0ludGVyaW9yIGZpbmlzaGluZyM3Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM3Mi4xMC4xOS4wMS4wMCNJbnRlcmlvciBkZXNpZ24gb3IgZGVjb3JhdGluZyM3Mi4xMC4xOS4wMC4wMAotdW5zcHNjNyM3Mi4xMC4xOS4wMi4wMCNQbGFzdGVyaW5nIG9yIGRyeXdhbGwjNzIuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMTkuMDMuMDAjRmluaXNoIGNhcnBlbnRyeSBvciBjYWJpbmV0cnkjNzIuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjAuMDAuMDAjQ29hdGluZyBhbmQgY2F1bGtpbmcgYW5kIHdlYXRoZXIgYW5kIHdhdGVyIGFuZCBmaXJlcHJvb2ZpbmcjNzIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjAuMDEuMDAjQ2F1bGtpbmcjNzIuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjAuMDIuMDAjUGxhc3RpYyBlbmNhc2VtZW50IG9yIGNvYXRpbmcgb2Ygc3RydWN0dXJhbCBtYXRlcmlhbHMjNzIuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjAuMDMuMDAjQ29hdGluZyBvciBnbGF6aW5nIG9mIG1ldGFsIG9yIHdvb2Qgb3IgY29uY3JldGUgc3RydWN0dXJhbCBtYXRlcmlhbHMjNzIuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjAuMDQuMDAjRGFtcHByb29maW5nIzcyLjEwLjIwLjAwLjAwCi11bnNwc2M3IzcyLjEwLjIwLjA1LjAwI0ZpcmVwcm9vZmluZyBvZiBidWlsZGluZ3MjNzIuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjAuMDYuMDAjV3JhcHBpbmcgb2YgcGlwZXMjNzIuMTAuMjAuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjEuMDAuMDAjUGVzdCBjb250cm9sIzcyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzcyLjEwLjIxLjAxLjAwI0JpcmQgcHJvb2Zpbmcgc2VydmljZXMjNzIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjEuMDIuMDAjVGVybWl0ZSBjb250cm9sIHNlcnZpY2VzIzcyLjEwLjIxLjAwLjAwCi11bnNwc2M3IzcyLjEwLjIxLjAzLjAwI0V4dGVybWluYXRpb24gb3IgZnVtaWdhdGlvbiBzZXJ2aWNlcyM3Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yMS4wNC4wMCNTdHJ1Y3R1cmFsIHBlc3QgY29udHJvbCM3Mi4xMC4yMS4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yMS4wNS4wMCNBbmltYWwgdHJhcHBpbmcjNzIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjEuMDYuMDAjUm9kZW50IGNvbnRyb2wjNzIuMTAuMjEuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjIuMDAuMDAjRWxlY3RyaWNhbCBzZXJ2aWNlcyM3Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yMi4wMS4wMCNFbGVjdHJpYyBwb3dlciBzeXN0ZW1zIGluc3RhbGxhdGlvbiBvciBzZXJ2aWNlIzcyLjEwLjIyLjAwLjAwCi11bnNwc2M3IzcyLjEwLjIyLjAyLjAwI0VsZWN0cm9uaWMgY29udHJvbHMgaW5zdGFsbGF0aW9uIzcyLjEwLjIyLjAwLjAwCi11bnNwc2M3IzcyLjEwLjIyLjAzLjAwI0NvbW11bmljYXRpb24gZXF1aXBtZW50IGluc3RhbGxhdGlvbiM3Mi4xMC4yMi4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yMi4wNC4wMCNTYWZldHkgb3Igc2VjdXJpdHkgc3lzdGVtcyBpbnN0YWxsYXRpb24jNzIuMTAuMjIuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjIuMDUuMDAjQ2FibGluZyBzZXJ2aWNlIzcyLjEwLjIyLjAwLjAwCi11bnNwc2M3IzcyLjEwLjIzLjAwLjAwI1BsdW1iaW5nIGFuZCBoZWF0aW5nIGFuZCBhaXIgY29uZGl0aW9uaW5nIzcyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzcyLjEwLjIzLjAxLjAwI0JvaWxlciBpbnN0YWxsYXRpb24gb3IgYWRqdXN0bWVudCBvciBtYWludGVuYW5jZSBvciByZXBhaXIgc2VydmljZXMjNzIuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjMuMDIuMDAjSGVhdGluZyBzeXN0ZW1zIGluc3RhbGxhdGlvbiByZXBhaXIgb3IgbWFpbnRlbmFuY2UjNzIuMTAuMjMuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjMuMDMuMDAjUGx1bWJpbmcgc3lzdGVtIGNvbnN0cnVjdGlvbiM3Mi4xMC4yMy4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yMy4wNC4wMCNQbHVtYmluZyBzeXN0ZW0gbWFpbnRlbmFuY2Ugb3IgcmVwYWlyIzcyLjEwLjIzLjAwLjAwCi11bnNwc2M3IzcyLjEwLjIzLjA1LjAwI0FpciBjb25kaXRpb25pbmcgaW5zdGFsbGF0aW9uIG9yIG1haW50ZW5hbmNlIG9yIHJlcGFpciBzZXJ2aWNlcyM3Mi4xMC4yMy4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yNC4wMC4wMCNQYWludGluZyBhbmQgcGFwZXIgaGFuZ2luZyM3Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yNC4wMS4wMCNFeHRlcmlvciBwYWludGluZyBzZXJ2aWNlcyM3Mi4xMC4yNC4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yNC4wMi4wMCNJbnRlcmlvciBwYWludGluZyBzZXJ2aWNlcyM3Mi4xMC4yNC4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yNC4wMy4wMCNXYWxsY292ZXJpbmcgc2VydmljZXMjNzIuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjQuMDQuMDAjSW5kdXN0cmlhbCBvciBzcGVjaWFsaXplZCBwYWludCBhcHBsaWNhdGlvbiBmb3IgYWlyY3JhZnQgb3Igc2hpcCBvciBicmlkZ2UjNzIuMTAuMjQuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjQuMDUuMDAjUGF2ZW1lbnQgbWFya2luZyBzZXJ2aWNlcyM3Mi4xMC4yNC4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yNS4wMC4wMCNNYXNvbnJ5IGFuZCBzdG9uZXdvcmsgYW5kIHRpbGUgc2V0dGluZyM3Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yNS4wMS4wMCNCcmlja2xheWluZyM3Mi4xMC4yNS4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yNS4wMi4wMCNDaGltbmV5IGNvbnN0cnVjdGlvbiBvciBtYWludGVuYW5jZSM3Mi4xMC4yNS4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yNS4wMy4wMCNNYXJibGUgb3Igc3RvbmUgb3IgdGlsZSBpbnN0YWxsYXRpb24jNzIuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjUuMDQuMDAjUmV0YWluaW5nIHdhbGwgY29uc3RydWN0aW9uIzcyLjEwLjI1LjAwLjAwCi11bnNwc2M3IzcyLjEwLjI1LjA1LjAwI0ZyZXNjbyB3b3JrIzcyLjEwLjI1LjAwLjAwCi11bnNwc2M3IzcyLjEwLjI1LjA2LjAwI0Fjb3VzdGljYWwjNzIuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjUuMDcuMDAjSW5zdWxhdGluZyBtYXRlcmlhbCBpbnN0YWxsYXRpb24jNzIuMTAuMjUuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjUuMDguMDAjUmVzdG9yYXRpb24gb2YgbWFzb25yeSBvciBzdG9uZXdvcmsgb3IgdGlsZSM3Mi4xMC4yNS4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yNi4wMC4wMCNDYXJwZW50cnkjNzIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjYuMDEuMDAjUm91Z2ggY2FycGVudHJ5IzcyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzcyLjEwLjI2LjAyLjAwI1dpbmRvd3Mgb3IgZG9vciBvciBmaXh0dXJlIGluc3RhbGxhdGlvbiM3Mi4xMC4yNi4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yNi4wMy4wMCNGdXJuaXR1cmUgaW5zdGFsbGF0aW9uIzcyLjEwLjI2LjAwLjAwCi11bnNwc2M3IzcyLjEwLjI3LjAwLjAwI0Zsb29yaW5nIHNlcnZpY2UjNzIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjcuMDEuMDAjRmxvb3Igc2hlYXRoaW5nIG9yIGxheWluZyBvciBpbnN0YWxsYXRpb24gb3IgZmluaXNoaW5nIzcyLjEwLjI3LjAwLjAwCi11bnNwc2M3IzcyLjEwLjI3LjAyLjAwI0Zsb29yIGNvdmVyaW5nIGluc3RhbGxhdGlvbiBvciBtYWludGVuYW5jZSM3Mi4xMC4yNy4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yNy4wMy4wMCNGbG9vciBjbGVhbmluZyBzZXJ2aWNlcyM3Mi4xMC4yNy4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yOC4wMC4wMCNSZWZ1cmJpc2hpbmcgc2VydmljZXMjNzIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMjguMDEuMDAjUmVub3ZhdGlvbiBvZiBidWlsZGluZ3Mgb3IgbGFuZG1hcmtzIG9yIG1vbnVtZW50cyM3Mi4xMC4yOC4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yOC4wMi4wMCNSZXN0b3JhdGlvbiBvZiBidWlsZGluZ3Mgb3IgbGFuZG1hcmtzIG9yIG1vbnVtZW50cyM3Mi4xMC4yOC4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yOS4wMC4wMCNHcm91bmRzIG1haW50ZW5hbmNlIHNlcnZpY2VzIzcyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzcyLjEwLjI5LjAxLjAwI1Nub3cgUmVtb3ZhbCBTZXJ2aWNlcyM3Mi4xMC4yOS4wMC4wMAotdW5zcHNjNyM3Mi4xMC4yOS4wMi4wMCNMYW5kc2NhcGluZyBzZXJ2aWNlcyM3Mi4xMC4yOS4wMC4wMAotdW5zcHNjNyM3Mi4xMC4zMC4wMC4wMCNTaXRlIHByZXBhcmF0aW9uIHNlcnZpY2VzIzcyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzcyLjEwLjMwLjAxLjAwI0xhbmQgY2xlYXJpbmcgc2VydmljZXMjNzIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMzAuMDIuMDAjTGFuZCBsZXZlbGxpbmcgc2VydmljZXMjNzIuMTAuMzAuMDAuMDAKLXVuc3BzYzcjNzIuMTAuMzAuMDMuMDAjRGVtb2xpdGlvbiBzZXJ2aWNlcyM3Mi4xMC4zMC4wMC4wMAotdW5zcHNjNyM3Mi4xMC4zMC4wNC4wMCNEaWdnaW5nIHNlcnZpY2VzIzcyLjEwLjMwLjAwLjAwCi11bnNwc2M3IzcyLjExLjAwLjAwLjAwI0dlbmVyYWwgYnVpbGRpbmcgY29uc3RydWN0aW9uIzcyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzcyLjExLjE1LjAwLjAwI1ByaXZhdGUgaG91c2luZyM3Mi4xMS4wMC4wMC4wMAotdW5zcHNjNyM3Mi4xMS4xNS4wMS4wMCNTaW5nbGUgZmFtaWx5IGhvdXNpbmcgY29uc3RydWN0aW9uIG9yIHJlbW9kZWxpbmcgb3IgcmVwYWlyIzcyLjExLjE1LjAwLjAwCi11bnNwc2M3IzcyLjExLjE1LjAyLjAwI1Jlc2lkZW50aWFsIG11bHRpIHRlbmFudCBjb25zdHJ1Y3Rpb24gb3IgcmVtb2RlbGluZyBvciByZXBhaXIjNzIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNzIuMTEuMTYuMDAuMDAjSW5kdXN0cmlhbCBwbGFudHMjNzIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNzIuMTEuMTYuMDEuMDAjQ29tbWVyY2lhbCBvZmZpY2UgYnVpbGRpbmcgY29uc3RydWN0aW9uIG9yIHJlbW9kZWxpbmcgb3IgcmVub3ZhdGlvbiBvciByZXBhaXIjNzIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNzIuMTEuMTYuMDIuMDAjSW5kdXN0cmlhbCBidWlsZGluZ3Mgb3Igd2FyZWhvdXNlIGNvbnN0cnVjdGlvbiBvciByZW1vZGVsaW5nIG9yIHJlbm92YXRpb24gb3IgcmVwYWlyIzcyLjExLjE2LjAwLjAwCi11bnNwc2M3IzcyLjExLjE3LjAwLjAwI1B1YmxpYyB1c2UgYnVpbGRpbmdzIzcyLjExLjAwLjAwLjAwCi11bnNwc2M3IzcyLjExLjE3LjAxLjAwI1NwZWNpYWxpemVkIHB1YmxpYyB1c2UgYnVpbGRpbmcgY29uc3RydWN0aW9uIzcyLjExLjE3LjAwLjAwCi11bnNwc2M3IzcyLjExLjE3LjAyLjAwI05vbiByZXNpZGVudGlhbCBhZ3JpY3VsdHVyYWwgYnVpbGRpbmcgY29uc3RydWN0aW9uIzcyLjExLjE3LjAwLjAwCi11bnNwc2M3IzcyLjExLjE3LjAzLjAwI1NlcnZpY2Ugc3RhdGlvbiBvciBzZXJ2aWNlIGdhcmFnZSBjb25zdHJ1Y3Rpb24jNzIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNzIuMTEuMTcuMDQuMDAjQ29tbWVyY2lhbCBidWlsZGluZyBjb25zdHJ1Y3Rpb24gb3IgZXJlY3Rpb24gb3IgcmVub3ZhdGlvbiBvciByZXBhaXIjNzIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjNzIuMTEuMTguMDAuMDAjQ29tbWVyY2lhbCBidWlsZGluZ3MjNzIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjNzIuMTEuMTguMDEuMDAjUmVzdGF1cmFudCBjb25zdHJ1Y3Rpb24gb3IgcmVub3ZhdGlvbiBvciByZXBhaXIgb3IgbWFpbnRlbmFuY2UjNzIuMTEuMTguMDAuMDAKLXVuc3BzYzcjNzIuMTEuMTguMDIuMDAjU2hvcHBpbmcgY2VudGVyIG9yIHN0b3JlIGNvbnN0cnVjdGlvbiBvciByZW5vdmF0aW9uIG9yIHJlcGFpciBvciBtYWludGVuYW5jZSM3Mi4xMS4xOC4wMC4wMAotdW5zcHNjNyM3Mi4xMS4xOC4wMy4wMCNPZmZpY2UgYnVpbGRpbmcgY29uc3RydWN0aW9uIG9yIHJlbm92YXRpb24gb3IgcmVwYWlyIG9yIG1haW50ZW5hbmNlIzcyLjExLjE4LjAwLjAwCi11bnNwc2M3IzcyLjExLjE4LjA0LjAwI0JhdGhyb29tIHJlbm92YXRpb24jNzIuMTEuMTguMDAuMDAKLXVuc3BzYzcjNzIuMTEuMTkuMDAuMDAjTGFuZCBhbmQgYnVpbGRpbmcgc2l0ZSBwcmVwYXJhdGlvbiM3Mi4xMS4wMC4wMC4wMAotdW5zcHNjNyM3Mi4xMS4xOS4wMS4wMCNMYW5kIGNsZWFyaW5nIzcyLjExLjE5LjAwLjAwCi11bnNwc2M3IzcyLjExLjE5LjAyLjAwI0xhbmQgbGV2ZWxpbmcjNzIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjNzIuMTEuMTkuMDMuMDAjQnVpbGRpbmcgZGVtb2xpdGlvbiM3Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM3Mi4xMi4wMC4wMC4wMCNJbmZyYXN0cnVjdHVyZSBjb25zdHJ1Y3Rpb24gYW5kIG1haW50ZW5hbmNlIzcyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzcyLjEyLjE1LjAwLjAwI0hpZ2h3YXlzIGFuZCBzdHJlZXRzIzcyLjEyLjAwLjAwLjAwCi11bnNwc2M3IzcyLjEyLjE1LjAxLjAwI0hpZ2h3YXkgb3Igc3RyZWV0IG9yIHJvYWQgY29uc3RydWN0aW9uIzcyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzcyLjEyLjE1LjAyLjAwI0hpZ2h3YXkgb3Igc3RyZWV0IG9yIHJvYWQgc3VyZmFjaW5nIG9yIHBhdmluZyBvciBtYWludGVuYW5jZSM3Mi4xMi4xNS4wMC4wMAotdW5zcHNjNyM3Mi4xMi4xNS4wMy4wMCNIaWdod2F5IG9yIHN0cmVldCBndWFyZHJhaWwgY29uc3RydWN0aW9uIG9yIG1haW50ZW5hbmNlIzcyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzcyLjEyLjE1LjA0LjAwI0hpZ2h3YXkgb3Igc3RyZWV0IHNpZ24gb3IgdHJhZmZpYyBzaWduYWwgaW5zdGFsbGF0aW9uIzcyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzcyLjEyLjE2LjAwLjAwI1dhdGVyIGFuZCBzZXdlciBhbmQgdXRpbGl0eSBsaW5lcyM3Mi4xMi4wMC4wMC4wMAotdW5zcHNjNyM3Mi4xMi4xNi4wMS4wMCNFbGVjdHJpYyBwb3dlciBsaW5lIGNvbnN0cnVjdGlvbiBvciBpbnN0YWxsYXRpb24jNzIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzIuMTIuMTYuMDIuMDAjQ2FibGUgbGF5aW5nIzcyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcyLjEyLjE2LjAzLjAwI0FxdWVkdWN0IGNvbnN0cnVjdGlvbiBvciBtYWludGVuYW5jZSM3Mi4xMi4xNi4wMC4wMAotdW5zcHNjNyM3Mi4xMi4xNi4wNC4wMCNTZXdlciBsaW5lIGNvbnN0cnVjdGlvbiBvciBtYWludGVuYW5jZSM3Mi4xMi4xNi4wMC4wMAotdW5zcHNjNyM3Mi4xMi4xNi4wNS4wMCNXYXRlciBtYWluIGNvbnN0cnVjdGlvbiBvciBtYWludGVuYW5jZSM3Mi4xMi4xNi4wMC4wMAotdW5zcHNjNyM3Mi4xMi4xNi4wNi4wMCNWb2ljZSBvciBkYXRhIGxpbmUgY29uc3RydWN0aW9uIG9yIG1haW50ZW5hbmNlIzcyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcyLjEyLjE2LjA3LjAwI1dhdGVyIGluZHVzdHJpYWwgcGxhbnQgY29uc3RydWN0aW9uIzcyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzcyLjEyLjE3LjAwLjAwI0RhbXMgYW5kIG1hcmluZSBjb25zdHJ1Y3Rpb24jNzIuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzIuMTIuMTcuMDEuMDAjRGFtIGNvbnN0cnVjdGlvbiBvciBtYWludGVuYW5jZSM3Mi4xMi4xNy4wMC4wMAotdW5zcHNjNyM3Mi4xMi4xNy4wMi4wMCNQaWVyIG9yIGRvY2sgY29uc3RydWN0aW9uIG9yIG1haW50ZW5hbmNlIzcyLjEyLjE3LjAwLjAwCi11bnNwc2M3IzcyLjEyLjE3LjAzLjAwI0hhcmJvciBvciBicmVha3dhdGVyIGNvbnN0cnVjdGlvbiBvciBtYWludGVuYW5jZSM3Mi4xMi4xNy4wMC4wMAotdW5zcHNjNyM3Mi4xMi4xNy4wNC4wMCNEeWtlIG9yIGxldmVlIGNvbnN0cnVjdGlvbiBvciBtYWludGVuYW5jZSM3Mi4xMi4xNy4wMC4wMAotdW5zcHNjNyM3Mi4xMi4xNy4wNS4wMCNEcmVkZ2luZyBvciBjYWlzc29uIGRyaWxsaW5nIzcyLjEyLjE3LjAwLjAwCi11bnNwc2M3IzcyLjEyLjE3LjA2LjAwI0NhbmFsIG9yIGRyYWluYWdlIG9yIGlycmlnYXRpb24gc3lzdGVtIGNvbnN0cnVjdGlvbiBvciBtYWludGVuYW5jZSM3Mi4xMi4xNy4wMC4wMAotdW5zcHNjNyM3Mi4xMi4xNy4wNy4wMCNQb25kIGNvbnN0cnVjdGlvbiBvciBtYWludGVuYW5jZSM3Mi4xMi4xNy4wMC4wMAotdW5zcHNjNyM3Mi4xMi4xOC4wMC4wMCNSYWlscm9hZHMgYW5kIHN1YndheXMgYW5kIHRyYW13YXlzIzcyLjEyLjAwLjAwLjAwCi11bnNwc2M3IzcyLjEyLjE4LjAxLjAwI0N1dHRpbmcgb2YgcmlnaHQgb2Ygd2F5IzcyLjEyLjE4LjAwLjAwCi11bnNwc2M3IzcyLjEyLjE4LjAyLjAwI1JhaWxyb2FkIGNvbnN0cnVjdGlvbiBvciBtYWludGVuYW5jZSM3Mi4xMi4xOC4wMC4wMAotdW5zcHNjNyM3Mi4xMi4xOC4wMy4wMCNTdWJ3YXkgY29uc3RydWN0aW9uIG9yIG1haW50ZW5hbmNlIzcyLjEyLjE4LjAwLjAwCi11bnNwc2M3IzcyLjEyLjE4LjA0LjAwI1RyYW0gY29uc3RydWN0aW9uIG9yIG1haW50ZW5hbmNlIzcyLjEyLjE4LjAwLjAwCi11bnNwc2M3IzcyLjEyLjE5LjAwLjAwI0FpcnBvcnRzIGFuZCBhdmlhdGlvbiM3Mi4xMi4wMC4wMC4wMAotdW5zcHNjNyM3Mi4xMi4xOS4wMS4wMCNBaXJwb3J0IHJ1bndheSBjb25zdHJ1Y3Rpb24jNzIuMTIuMTkuMDAuMDAKLXVuc3BzYzcjNzIuMTIuMTkuMDIuMDAjQWlycG9ydCB0ZXJtaW5hbCBjb25zdHJ1Y3Rpb24jNzIuMTIuMTkuMDAuMDAKLXVuc3BzYzcjNzIuMTIuMTkuMDMuMDAjSGVsaXBhZCBjb25zdHJ1Y3Rpb24jNzIuMTIuMTkuMDAuMDAKLXVuc3BzYzcjNzIuMTIuMjAuMDAuMDAjQnJpZGdlcyBhbmQgdHVubmVscyBhbmQgdmlhZHVjdHMjNzIuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzIuMTIuMjAuMDEuMDAjQnJpZGdlIGNvbnN0cnVjdGlvbiBvciBtYWludGVuYW5jZSM3Mi4xMi4yMC4wMC4wMAotdW5zcHNjNyM3Mi4xMi4yMC4wMi4wMCNUdW5uZWwgY29uc3RydWN0aW9uIG9yIG1haW50ZW5hbmNlIzcyLjEyLjIwLjAwLjAwCi11bnNwc2M3IzcyLjEyLjIwLjAzLjAwI1ZpYWR1Y3QgY29uc3RydWN0aW9uIG9yIG1haW50ZW5hbmNlIzcyLjEyLjIwLjAwLjAwCi11bnNwc2M3IzcyLjEyLjIxLjAwLjAwI0NvbnN0cnVjdGlvbiBxdWFudGl0eSBzdXJ2ZXlvcnMjNzIuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzIuMTIuMjEuMDEuMDAjV2F0ZXIgb3Igd2FzdGV3YXRlciBxdWFudGl0eSBzdXJ2ZXlvcnMjNzIuMTIuMjEuMDAuMDAKLXVuc3BzYzcjNzIuMTIuMjIuMDAuMDAjQ29uc3RydWN0aW9uIGNvbnN1bHRhbmN5IHNlcnZpY2VzIzcyLjEyLjAwLjAwLjAwCi11bnNwc2M3IzcyLjEyLjIyLjAxLjAwI1NpdGUgc3VwZXJ2aXNpb24jNzIuMTIuMjIuMDAuMDAKLXVuc3BzYzcjNzIuMTIuMjIuMDIuMDAjSW5kdXN0cmlhbCBwbGFudCBkZXNpZ24jNzIuMTIuMjIuMDAuMDAKLXVuc3BzYzcjNzMuMDAuMDAuMDAuMDAjSW5kdXN0cmlhbCBQcm9kdWN0aW9uIGFuZCBNYW51ZmFjdHVyaW5nIFNlcnZpY2VzIzczLjAwLjAwLjAwLjAwCi11bnNwc2M3IzczLjEwLjAwLjAwLjAwI1BsYXN0aWMgYW5kIGNoZW1pY2FsIGluZHVzdHJpZXMjNzMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTAuMTUuMDAuMDAjUGV0cm9jaGVtaWNhbCBhbmQgcGxhc3RpYyBwcm9kdWN0aW9uIzczLjEwLjAwLjAwLjAwCi11bnNwc2M3IzczLjEwLjE1LjAxLjAwI1BldHJvbGV1bSByZWZpbmluZyBzZXJ2aWNlcyM3My4xMC4xNS4wMC4wMAotdW5zcHNjNyM3My4xMC4xNS4wMi4wMCNOYXR1cmFsIGdhcyBwcm9kdWN0aW9uIHNlcnZpY2VzIzczLjEwLjE1LjAwLjAwCi11bnNwc2M3IzczLjEwLjE1LjAzLjAwI09pbHMgb3IgZ3JlYXNlcyBwcm9kdWN0aW9uIHNlcnZpY2VzIzczLjEwLjE1LjAwLjAwCi11bnNwc2M3IzczLjEwLjE1LjA0LjAwI0NvYWwgcHJvZHVjdGlvbiBzZXJ2aWNlcyM3My4xMC4xNS4wMC4wMAotdW5zcHNjNyM3My4xMC4xNS4wNS4wMCNQbGFzdGljcyBvciByZXNpbnMgb3IgZmliZXJzIG1hbnVmYWN0dXJpbmcgc2VydmljZXMjNzMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTAuMTUuMDYuMDAjQ3JlZGl0IGNhcmQgcHJvZHVjdGlvbiBvciBlbWJvc3Npbmcgc2VydmljZXMjNzMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTAuMTYuMDAuMDAjQ2hlbWljYWxzIGFuZCBmZXJ0aWxpemVycyBwcm9kdWN0aW9uIzczLjEwLjAwLjAwLjAwCi11bnNwc2M3IzczLjEwLjE2LjAxLjAwI0lub3JnYW5pYyBjaGVtaWNhbHMgcHJvZHVjdGlvbiBzZXJ2aWNlcyM3My4xMC4xNi4wMC4wMAotdW5zcHNjNyM3My4xMC4xNi4wMi4wMCNTb2RhIGFzaCBvciBjaGxvcmluZSBvciBjYXVzdGljIHNvZGEgcHJvZHVjdGlvbiBzZXJ2aWNlcyM3My4xMC4xNi4wMC4wMAotdW5zcHNjNyM3My4xMC4xNi4wMy4wMCNJbm9yZ2FuaWMgYWNpZHMgcHJvZHVjdGlvbiBzZXJ2aWNlcyM3My4xMC4xNi4wMC4wMAotdW5zcHNjNyM3My4xMC4xNi4wNC4wMCNPcmdhbmljIGNoZW1pY2FsIHByb2R1Y3Rpb24gc2VydmljZXMjNzMuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTAuMTYuMDUuMDAjQWNldHlsZW5lIG9yIGRlcml2YXRpdmVzIHByb2R1Y3Rpb24gc2VydmljZXMjNzMuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTAuMTYuMDYuMDAjRXRoeWxlbmUgb3IgZGVyaXZhdGl2ZXMgcHJvZHVjdGlvbiBzZXJ2aWNlcyM3My4xMC4xNi4wMC4wMAotdW5zcHNjNyM3My4xMC4xNi4wNy4wMCNFdGhhbm9sIG9yIG1ldGhhbm9sIG9yIGRlcml2YXRpdmVzIHByb2R1Y3Rpb24gc2VydmljZXMjNzMuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTAuMTYuMDguMDAjRmVydGlsaXplcnMgcHJvZHVjdGlvbiBzZXJ2aWNlcyM3My4xMC4xNi4wMC4wMAotdW5zcHNjNyM3My4xMC4xNi4wOS4wMCNQb3Rhc2ggbWluaW5nIG9yIHByb2Nlc3Npbmcgc2VydmljZXMjNzMuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTAuMTYuMTAuMDAjUGVzdGljaWRlIHByb2R1Y3Rpb24gc2VydmljZXMjNzMuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTAuMTYuMTEuMDAjUGFpbnRzIG9yIHZhcm5pc2hlcyBvciBsYWNxdWVycyBwcm9kdWN0aW9uIHNlcnZpY2VzIzczLjEwLjE2LjAwLjAwCi11bnNwc2M3IzczLjEwLjE2LjEyLjAwI1NvYXAgb3IgY2xlYW5pbmcgcHJlcGFyYXRpb25zIG9yIHBlcmZ1bWVzIG9yIGNvc21ldGljcyBwcm9kdWN0aW9uIHNlcnZpY2VzIzczLjEwLjE2LjAwLjAwCi11bnNwc2M3IzczLjEwLjE2LjEzLjAwI1NvbHZlbnRzIG9yIGdseWNvbHMgb3IgZGV0ZXJnZW50cyBwcm9kdWN0aW9uIHNlcnZpY2VzIzczLjEwLjE2LjAwLjAwCi11bnNwc2M3IzczLjEwLjE2LjE0LjAwI0Zlcm1lbnRzIG9yIGVuenltZXMgc2VydmljZXMjNzMuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTAuMTcuMDAuMDAjUGhhcm1hY2V1dGljYWwgcHJvZHVjdGlvbiM3My4xMC4wMC4wMC4wMAotdW5zcHNjNyM3My4xMC4xNy4wMS4wMCNEcnVncyBvciBtZWRpY2luZSBwcm9kdWN0aW9uIHNlcnZpY2VzIzczLjEwLjE3LjAwLjAwCi11bnNwc2M3IzczLjEwLjE3LjAyLjAwI1ZhY2NpbmVzIG9yIHNlcmEgb3IgYW50aWJpb3RpY3MgcHJvZHVjdGlvbiBzZXJ2aWNlcyM3My4xMC4xNy4wMC4wMAotdW5zcHNjNyM3My4xMC4xNy4wMy4wMCNQYXJhcGhhcm1hY2V1dGljYWwgcHJvZHVjdGlvbiBzZXJ2aWNlcyM3My4xMC4xNy4wMC4wMAotdW5zcHNjNyM3My4xMC4xOC4wMC4wMCNCaW9jaGVtaWNhbCBhbmQgYmlvdGVjaG5vbG9neSBwcm9kdWN0aW9uIzczLjEwLjAwLjAwLjAwCi11bnNwc2M3IzczLjEwLjE4LjAxLjAwI0Jpb21hc3MgcHJvZHVjdGlvbiBzZXJ2aWNlcyM3My4xMC4xOC4wMC4wMAotdW5zcHNjNyM3My4xMC4xOC4wMi4wMCNCaW9wcm90ZWluIHByb2R1Y3Rpb24gc2VydmljZXMjNzMuMTAuMTguMDAuMDAKLXVuc3BzYzcjNzMuMTAuMTkuMDAuMDAjUnViYmVyIHByb2R1Y3Rpb24jNzMuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTAuMTkuMDEuMDAjUnViYmVyIG1pbGxpbmcgc2VydmljZXMjNzMuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNzMuMTAuMTkuMDIuMDAjUnViYmVyIHRpcmVzIG9yIHR1YmVzIHByb2R1Y3Rpb24gc2VydmljZXMjNzMuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNzMuMTAuMTkuMDMuMDAjUnViYmVyIG9yIHBsYXN0aWMgZm9vdHdlYXIgcHJvZHVjdGlvbiBzZXJ2aWNlcyM3My4xMC4xOS4wMC4wMAotdW5zcHNjNyM3My4xMS4wMC4wMC4wMCNXb29kIGFuZCBwYXBlciBpbmR1c3RyaWVzIzczLjAwLjAwLjAwLjAwCi11bnNwc2M3IzczLjExLjE1LjAwLjAwI1dvb2QgcHJvY2Vzc2luZyM3My4xMS4wMC4wMC4wMAotdW5zcHNjNyM3My4xMS4xNS4wMS4wMCNTYXdtaWxsaW5nIHNlcnZpY2VzIzczLjExLjE1LjAwLjAwCi11bnNwc2M3IzczLjExLjE1LjAyLjAwI1ZlbmVlciBwcm9kdWN0aW9uIHNlcnZpY2VzIzczLjExLjE1LjAwLjAwCi11bnNwc2M3IzczLjExLjE1LjAzLjAwI1dvb2QgYmFzZSBwYW5lbHMgbWFudWZhY3R1cmluZyBzZXJ2aWNlcyM3My4xMS4xNS4wMC4wMAotdW5zcHNjNyM3My4xMS4xNS4wNC4wMCNXb29kZW4gY29udGFpbmVycyBtYW51ZmFjdHVyaW5nIHNlcnZpY2VzIzczLjExLjE1LjAwLjAwCi11bnNwc2M3IzczLjExLjE1LjA1LjAwI0Z1cm5pdHVyZSBtYW51ZmFjdHVyaW5nIHNlcnZpY2VzIzczLjExLjE1LjAwLjAwCi11bnNwc2M3IzczLjExLjE1LjA2LjAwI0NvcmsgcHJvZHVjdHMgbWFudWZhY3R1cmluZyBzZXJ2aWNlcyM3My4xMS4xNS4wMC4wMAotdW5zcHNjNyM3My4xMS4xNS4wNy4wMCNDYW5lIG9yIHdpY2tlcndhcmUgcHJvY2Vzc2luZyBzZXJ2aWNlcyM3My4xMS4xNS4wMC4wMAotdW5zcHNjNyM3My4xMS4xNi4wMC4wMCNQdWxwIGFuZCBwYXBlciBwcm9jZXNzaW5nIzczLjExLjAwLjAwLjAwCi11bnNwc2M3IzczLjExLjE2LjAxLjAwI1B1bHAgcHJvZHVjdGlvbiBzZXJ2aWNlcyM3My4xMS4xNi4wMC4wMAotdW5zcHNjNyM3My4xMS4xNi4wMi4wMCNQYXBlciBvciBwYXBlciBib2FyZCBwcm9kdWN0aW9uIHNlcnZpY2VzIzczLjExLjE2LjAwLjAwCi11bnNwc2M3IzczLjExLjE2LjAzLjAwI0hhcmRib2FyZCBvciBmaWJlcmJvYXJkIHByb2R1Y3Rpb24gc2VydmljZXMjNzMuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTEuMTYuMDQuMDAjUGFwZXIgcHJvZHVjdGlvbiBvciByZWN5Y2xpbmcgc2VydmljZXMjNzMuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTIuMDAuMDAuMDAjTWV0YWwgYW5kIG1pbmVyYWwgaW5kdXN0cmllcyM3My4wMC4wMC4wMC4wMAotdW5zcHNjNyM3My4xMi4xNS4wMC4wMCNNZXRhbCBzbWVsdGluZyBhbmQgcmVmaW5pbmcgYW5kIGZvcm1pbmcgcHJvY2Vzc2VzIzczLjEyLjAwLjAwLjAwCi11bnNwc2M3IzczLjEyLjE1LjAxLjAwI0ZlcnJvdXMgYWxsb3kgcHJvZHVjdGlvbiBzZXJ2aWNlcyM3My4xMi4xNS4wMC4wMAotdW5zcHNjNyM3My4xMi4xNS4wMi4wMCNCYXNpYyBtZXRhbCBjb21iaW5hdGlvbiBwcm9jZXNzZXMgc2VydmljZXMjNzMuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTIuMTUuMDMuMDAjUmVmcmFjdG9ycyBzZXJ2aWNlcyBmb3IgaXJvbiBvciBzdGVlbCBwcm9kdWN0aW9uIzczLjEyLjE1LjAwLjAwCi11bnNwc2M3IzczLjEyLjE1LjA0LjAwI0lyb24gb3Igc3RlZWwgbWFraW5nIHNlcnZpY2VzIzczLjEyLjE1LjAwLjAwCi11bnNwc2M3IzczLjEyLjE1LjA1LjAwI0lyb24gb3Igc3RlZWwgZm9yZ2luZyBzZXJ2aWNlcyM3My4xMi4xNS4wMC4wMAotdW5zcHNjNyM3My4xMi4xNS4wNi4wMCNQcmUgZmluaXNoaW5nIGlyb24gb3Igc3RlZWwgcHJvY2Vzc2VzIHNlcnZpY2VzIzczLjEyLjE1LjAwLjAwCi11bnNwc2M3IzczLjEyLjE1LjA3LjAwI0ZpbmlzaGluZyBtZXRhbCBwcm9jZXNzaW5nIHNlcnZpY2VzIzczLjEyLjE1LjAwLjAwCi11bnNwc2M3IzczLjEyLjE1LjA4LjAwI1NtZWx0aW5nIG1ldGFsIHNlcnZpY2VzIzczLjEyLjE1LjAwLjAwCi11bnNwc2M3IzczLjEyLjE1LjA5LjAwI1JlZmluaW5nIG1ldGFsIHNlcnZpY2VzIzczLjEyLjE1LjAwLjAwCi11bnNwc2M3IzczLjEyLjE2LjAwLjAwI01ldGFsIGZpbmlzaGluZyM3My4xMi4wMC4wMC4wMAotdW5zcHNjNyM3My4xMi4xNi4wMS4wMCNNZXRhbCBjdXR0aW5nIHNlcnZpY2VzIzczLjEyLjE2LjAwLjAwCi11bnNwc2M3IzczLjEyLjE2LjAyLjAwI0JsYWNrc21pdGggc2VydmljZXMjNzMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTIuMTYuMDMuMDAjTWV0YWwgaGVhdGluZyBzZXJ2aWNlcyM3My4xMi4xNi4wMC4wMAotdW5zcHNjNyM3My4xMi4xNi4wNC4wMCNNZXRhbCBwbGF0aW5nIG9yIHJlcGxhdGluZyBzZXJ2aWNlcyM3My4xMi4xNi4wMC4wMAotdW5zcHNjNyM3My4xMi4xNi4wNS4wMCNNZXRhbCByb2xsaW5nIG9wZXJhdGlvbnMjNzMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTIuMTYuMDYuMDAjTWV0YWwgZm9yZ2luZyBzZXJ2aWNlcyM3My4xMi4xNi4wMC4wMAotdW5zcHNjNyM3My4xMi4xNi4wNy4wMCNNZXRhbCBkcmF3aW5nIHNlcnZpY2VzIzczLjEyLjE2LjAwLjAwCi11bnNwc2M3IzczLjEyLjE2LjA4LjAwI01ldGFsIGV4dHJ1ZGluZyBzZXJ2aWNlcyM3My4xMi4xNi4wMC4wMAotdW5zcHNjNyM3My4xMi4xNi4wOS4wMCNTdXJmYWNlIG1ldGFsIGZpbmlzaGluZyBvciB0cmVhdG1lbnQgc2VydmljZXMjNzMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTIuMTYuMTAuMDAjSG9yc2VzaG9laW5nIHNlcnZpY2VzIzczLjEyLjE2LjAwLjAwCi11bnNwc2M3IzczLjEyLjE2LjExLjAwI1RpbnNtaXRoaW5nIHNlcnZpY2VzIzczLjEyLjE2LjAwLjAwCi11bnNwc2M3IzczLjEyLjE2LjEyLjAwI1JlYmFiYml0aW5nIHNlcnZpY2VzIzczLjEyLjE2LjAwLjAwCi11bnNwc2M3IzczLjEyLjE2LjEzLjAwI01ldGFsIGNhc3Rpbmcgc2VydmljZXMjNzMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTIuMTcuMDAuMDAjV2VsZGluZyBhbmQgYnJhemluZyBhbmQgc29sZGVyaW5nIzczLjEyLjAwLjAwLjAwCi11bnNwc2M3IzczLjEyLjE3LjAxLjAwI1dlbGRpbmcgc2VydmljZXMjNzMuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNzMuMTIuMTcuMDIuMDAjQnJhemluZyBzZXJ2aWNlcyM3My4xMi4xNy4wMC4wMAotdW5zcHNjNyM3My4xMi4xNy4wMy4wMCNTb2xkZXJpbmcgc2VydmljZXMjNzMuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNzMuMTIuMTcuMDQuMDAjQ2FzdGluZyBzZXJ2aWNlcyM3My4xMi4xNy4wMC4wMAotdW5zcHNjNyM3My4xMi4xOC4wMC4wMCNOb24gbWV0YWxsaWMgbWluZXJhbCBwcm9kdWN0cyBpbmR1c3RyeSBzZXJ2aWNlcyM3My4xMi4wMC4wMC4wMAotdW5zcHNjNyM3My4xMi4xOC4wMS4wMCNQb3R0ZXJ5IG9yIGNoaW5hIG9yIGVhcnRoZW53YXJlIG1hbnVmYWN0dXJpbmcgc2VydmljZXMjNzMuMTIuMTguMDAuMDAKLXVuc3BzYzcjNzMuMTIuMTguMDIuMDAjR2xhc3Mgb3IgZ2xhc3MgcHJvZHVjdHMgbWFudWZhY3R1cmluZyBzZXJ2aWNlcyM3My4xMi4xOC4wMC4wMAotdW5zcHNjNyM3My4xMi4xOC4wMy4wMCNTdHJ1Y3R1cmFsIGNsYXkgcHJvZHVjdHMgbWFudWZhY3R1cmluZyBzZXJ2aWNlcyM3My4xMi4xOC4wMC4wMAotdW5zcHNjNyM3My4xMi4xOC4wNC4wMCNDZW1lbnQgb3IgbGltZSBvciBwbGFzdGVyIG1hbnVmYWN0dXJpbmcgc2VydmljZXMjNzMuMTIuMTguMDAuMDAKLXVuc3BzYzcjNzMuMTIuMTguMDUuMDAjQ29uY3JldGUgb3IgYWdncmVnYXRlcyBvciBzdG9uZSBwcm9kdWN0cyBtYW51ZmFjdHVyaW5nIHNlcnZpY2VzIzczLjEyLjE4LjAwLjAwCi11bnNwc2M3IzczLjEyLjE4LjA2LjAwI0FicmFzaXZlcyBtYW51ZmFjdHVyaW5nIHNlcnZpY2VzIzczLjEyLjE4LjAwLjAwCi11bnNwc2M3IzczLjEyLjE4LjA3LjAwI0FzYmVzdG9zIHByb2R1Y3RzIG1hbnVmYWN0dXJpbmcgc2VydmljZXMjNzMuMTIuMTguMDAuMDAKLXVuc3BzYzcjNzMuMTMuMDAuMDAuMDAjRm9vZCBhbmQgYmV2ZXJhZ2UgaW5kdXN0cmllcyM3My4wMC4wMC4wMC4wMAotdW5zcHNjNyM3My4xMy4xNS4wMC4wMCNCZXZlcmFnZSBwcm9jZXNzaW5nIzczLjEzLjAwLjAwLjAwCi11bnNwc2M3IzczLjEzLjE1LjAxLjAwI1NwaXJpdHMgZGlzdGlsbGluZyBvciBibGVuZGluZyBzZXJ2aWNlcyM3My4xMy4xNS4wMC4wMAotdW5zcHNjNyM3My4xMy4xNS4wMi4wMCNXaW5lIHByb2Nlc3Npbmcgc2VydmljZXMjNzMuMTMuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTMuMTUuMDMuMDAjQnJld2VyeSBwcm9jZXNzaW5nIHNlcnZpY2VzIzczLjEzLjE1LjAwLjAwCi11bnNwc2M3IzczLjEzLjE1LjA0LjAwI05vbiBhbGNvaG9saWMgZnJ1aXQgYmFzZWQgYmV2ZXJhZ2UgcHJvY2Vzc2luZyBzZXJ2aWNlcyM3My4xMy4xNS4wMC4wMAotdW5zcHNjNyM3My4xMy4xNS4wNS4wMCNXYXRlciBiZXZlcmFnZXMgcHJvY2Vzc2luZyBzZXJ2aWNlcyM3My4xMy4xNS4wMC4wMAotdW5zcHNjNyM3My4xMy4xNS4wNi4wMCNJbmZ1c2VkIGJldmVyYWdlcyBwcm9jZXNzaW5nIHNlcnZpY2VzIzczLjEzLjE1LjAwLjAwCi11bnNwc2M3IzczLjEzLjE1LjA3LjAwI0NvZmZlZSBwcm9jZXNzaW5nIHNlcnZpY2VzIzczLjEzLjE1LjAwLjAwCi11bnNwc2M3IzczLjEzLjE1LjA4LjAwI1RlYSBwcm9jZXNzaW5nIHNlcnZpY2VzIzczLjEzLjE1LjAwLjAwCi11bnNwc2M3IzczLjEzLjE2LjAwLjAwI01lYXQgYW5kIHBvdWx0cnkgYW5kIHNlYWZvb2QgcHJvY2Vzc2luZyM3My4xMy4wMC4wMC4wMAotdW5zcHNjNyM3My4xMy4xNi4wMS4wMCNNZWF0IHByb2R1Y3RzIG9yIGJ5IHByb2R1Y3RzIHByb2Nlc3Npbmcgc2VydmljZXMjNzMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTMuMTYuMDIuMDAjRmlzaCBvciBmaXNoIHByb2R1Y3RzIHByb2Nlc3Npbmcgc2VydmljZXMjNzMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTMuMTYuMDMuMDAjUG91bHRyeSBwcm9jZXNzaW5nIHNlcnZpY2VzIzczLjEzLjE2LjAwLjAwCi11bnNwc2M3IzczLjEzLjE2LjA0LjAwI01lYXQgaHlnaWVuZSBvciBpbnNwZWN0aW9uIHNlcnZpY2VzIzczLjEzLjE2LjAwLjAwCi11bnNwc2M3IzczLjEzLjE2LjA1LjAwI01lYXQgcGxhbnQgb3BlcmF0aW9uIG9yIG1hbmFnZW1lbnQgc2VydmljZXMjNzMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTMuMTYuMDYuMDAjU2xhdWdodGVyIGhvdXNlcyBzZXJ2aWNlcyM3My4xMy4xNi4wMC4wMAotdW5zcHNjNyM3My4xMy4xNi4wNy4wMCNCdXRjaGVyIHNlcnZpY2VzIzczLjEzLjE2LjAwLjAwCi11bnNwc2M3IzczLjEzLjE2LjA4LjAwI0NvbGQgc3RvcmFnZSBzZXJ2aWNlcyM3My4xMy4xNi4wMC4wMAotdW5zcHNjNyM3My4xMy4xNy4wMC4wMCNGcnVpdHMgYW5kIHZlZ2V0YWJsZXMgcHJvY2Vzc2luZyM3My4xMy4wMC4wMC4wMAotdW5zcHNjNyM3My4xMy4xNy4wMS4wMCNGcnVpdCBvciB2ZWdldGFibGUgY2xlYW5pbmcgc2VydmljZXMjNzMuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNzMuMTMuMTcuMDIuMDAjRnJ1aXQgb3IgdmVnZXRhYmxlIHNwcmF5aW5nIHNlcnZpY2VzIzczLjEzLjE3LjAwLjAwCi11bnNwc2M3IzczLjEzLjE3LjAzLjAwI0ZydWl0IG9yIHZlZ2V0YWJsZSBwYWNraW5nIHNlcnZpY2VzIzczLjEzLjE3LjAwLjAwCi11bnNwc2M3IzczLjEzLjE4LjAwLjAwI0RhaXJ5IGFuZCBlZ2dzIHByb2Nlc3NpbmcjNzMuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTMuMTguMDEuMDAjTWlsayBwcm9jZXNzaW5nIHNlcnZpY2VzIzczLjEzLjE4LjAwLjAwCi11bnNwc2M3IzczLjEzLjE4LjAyLjAwI0VnZyBwcm9jZXNzaW5nIHNlcnZpY2VzIzczLjEzLjE4LjAwLjAwCi11bnNwc2M3IzczLjEzLjE4LjAzLjAwI0NoZWVzZSBwcm9jZXNzaW5nIHNlcnZpY2VzIzczLjEzLjE4LjAwLjAwCi11bnNwc2M3IzczLjEzLjE4LjA0LjAwI0J1dHRlciBvciBjcmVhbSBwcm9jZXNzaW5nIHNlcnZpY2VzIzczLjEzLjE4LjAwLjAwCi11bnNwc2M3IzczLjEzLjE5LjAwLjAwI0dyYWlucyBhbmQgc3VnYXIgYW5kIG9pbHMgYW5kIGZhdCBwcm9jZXNzaW5nIzczLjEzLjAwLjAwLjAwCi11bnNwc2M3IzczLjEzLjE5LjAxLjAwI01pbGxpbmcgc2VydmljZXMjNzMuMTMuMTkuMDAuMDAKLXVuc3BzYzcjNzMuMTMuMTkuMDIuMDAjQ2VyZWFsIHByb2R1Y3RzIHByb2Nlc3Npbmcgc2VydmljZXMjNzMuMTMuMTkuMDAuMDAKLXVuc3BzYzcjNzMuMTMuMTkuMDMuMDAjU3VnYXIgb3Igc3VnYXIgcHJvZHVjdHMgcHJvY2Vzc2luZyBzZXJ2aWNlcyM3My4xMy4xOS4wMC4wMAotdW5zcHNjNyM3My4xMy4xOS4wNC4wMCNWZWdldGFibGUgb2lscyBvciBmYXRzIHByb2Nlc3Npbmcgc2VydmljZXMjNzMuMTMuMTkuMDAuMDAKLXVuc3BzYzcjNzMuMTMuMTkuMDUuMDAjU3BpY2UgcHJvY2Vzc2luZyBzZXJ2aWNlcyM3My4xMy4xOS4wMC4wMAotdW5zcHNjNyM3My4xMy4xOS4wNi4wMCNCYWtlcnkgcHJvZHVjdHMgcHJvY2Vzc2luZyBzZXJ2aWNlcyM3My4xMy4xOS4wMC4wMAotdW5zcHNjNyM3My4xNC4wMC4wMC4wMCNGaWJlcnMgYW5kIHRleHRpbGVzIGFuZCBmYWJyaWMgaW5kdXN0cmllcyM3My4wMC4wMC4wMC4wMAotdW5zcHNjNyM3My4xNC4xNS4wMC4wMCNGaWJlciBwcm9kdWN0aW9uIzczLjE0LjAwLjAwLjAwCi11bnNwc2M3IzczLjE0LjE1LjAxLjAwI1JheW9uIG9yIGFjZXRhdGUgZmliZXIgbWFudWZhY3R1cmluZyBzZXJ2aWNlcyM3My4xNC4xNS4wMC4wMAotdW5zcHNjNyM3My4xNC4xNS4wMi4wMCNHbGFzcyBmaWJlciBtYW51ZmFjdHVyaW5nIHNlcnZpY2VzIzczLjE0LjE1LjAwLjAwCi11bnNwc2M3IzczLjE0LjE1LjAzLjAwI1NpbGsgZmliZXIgbWFudWZhY3R1cmluZyBzZXJ2aWNlcyM3My4xNC4xNS4wMC4wMAotdW5zcHNjNyM3My4xNC4xNS4wNC4wMCNDb3R0b24gZmliZXIgbWFudWZhY3R1cmluZyBzZXJ2aWNlcyM3My4xNC4xNS4wMC4wMAotdW5zcHNjNyM3My4xNC4xNS4wNS4wMCNXb29sIGZpYmVyIG1hbnVmYWN0dXJpbmcgc2VydmljZXMjNzMuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTQuMTUuMDYuMDAjUG9seWVzdGVyIGZpYmVyIG1hbnVmYWN0dXJpbmcgc2VydmljZXMjNzMuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTQuMTUuMDcuMDAjUG9seWFtaWRlIGZpYmVyIG1hbnVmYWN0dXJpbmcgc2VydmljZXMjNzMuMTQuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTQuMTUuMDguMDAjQWNyeWxpYyBmaWJlciBtYW51ZmFjdHVyaW5nIHNlcnZpY2VzIzczLjE0LjE1LjAwLjAwCi11bnNwc2M3IzczLjE0LjE2LjAwLjAwI1RocmVhZCBhbmQgeWFybiBwcm9jZXNzaW5nIzczLjE0LjAwLjAwLjAwCi11bnNwc2M3IzczLjE0LjE2LjAxLjAwI1RocmVhZCBwcm9jZXNzaW5nIHNlcnZpY2VzIzczLjE0LjE2LjAwLjAwCi11bnNwc2M3IzczLjE0LjE2LjAyLjAwI1lhcm4gcHJvY2Vzc2luZyBzZXJ2aWNlcyM3My4xNC4xNi4wMC4wMAotdW5zcHNjNyM3My4xNC4xNy4wMC4wMCNGYWJyaWNzIGFuZCBsZWF0aGVyIHByb2R1Y3Rpb24jNzMuMTQuMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTQuMTcuMDEuMDAjQnJvYWQgd292ZW4gZmFicmljcyBtYW51ZmFjdHVyaW5nIHNlcnZpY2VzIzczLjE0LjE3LjAwLjAwCi11bnNwc2M3IzczLjE0LjE3LjAyLjAwI05hcnJvdyB3b3ZlbiBmYWJyaWNzIG1hbnVmYWN0dXJpbmcgc2VydmljZXMjNzMuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNzMuMTQuMTcuMDMuMDAjS25pdHdlYXIgbWFudWZhY3R1cmluZyBzZXJ2aWNlcyM3My4xNC4xNy4wMC4wMAotdW5zcHNjNyM3My4xNC4xNy4wNC4wMCNDYXJwZXQgb3IgcnVnIG1hbnVmYWN0dXJpbmcgc2VydmljZXMjNzMuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNzMuMTQuMTcuMDUuMDAjQ29yZGFnZSBvciByb3BlIG9yIHR3aW5lIG1hbnVmYWN0dXJpbmcgc2VydmljZXMjNzMuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNzMuMTQuMTcuMDYuMDAjRHllaW5nIG9yIHByaW50aW5nIG9yIGZpbmlzaGluZyBzZXJ2aWNlcyM3My4xNC4xNy4wMC4wMAotdW5zcHNjNyM3My4xNC4xNy4wNy4wMCNXb3ZlbiBzdWl0cyBvciBjb2F0cyBvciBvdmVyY29hdHMgbWFudWZhY3R1cmluZyBzZXJ2aWNlcyM3My4xNC4xNy4wMC4wMAotdW5zcHNjNyM3My4xNC4xNy4wOC4wMCNXb3ZlbiBvdXRlcndlYXIgY2xvdGhpbmcgbWFudWZhY3R1cmluZyBzZXJ2aWNlcyM3My4xNC4xNy4wMC4wMAotdW5zcHNjNyM3My4xNC4xNy4wOS4wMCNGdXIgZHJlc3Npbmcgb3IgZHllaW5nIHNlcnZpY2VzIzczLjE0LjE3LjAwLjAwCi11bnNwc2M3IzczLjE0LjE3LjEwLjAwI0xlYXRoZXIgZm9vdHdlYXIgbWFudWZhY3R1cmluZyBzZXJ2aWNlcyM3My4xNC4xNy4wMC4wMAotdW5zcHNjNyM3My4xNC4xNy4xMS4wMCNMZWF0aGVyIGx1Z2dhZ2Ugb3IgaGFuZGJhZ3MgbWFudWZhY3R1cmluZyBzZXJ2aWNlcyM3My4xNC4xNy4wMC4wMAotdW5zcHNjNyM3My4xNC4xNy4xMi4wMCNMZWF0aGVyIHRhbm5pbmcgb3IgZmluaXNoaW5nIG1hbnVmYWN0dXJpbmcgc2VydmljZXMjNzMuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNzMuMTQuMTcuMTMuMDAjTm9ud292ZW4gZmFicmljIHNlcnZpY2VzIzczLjE0LjE3LjAwLjAwCi11bnNwc2M3IzczLjE0LjE3LjE0LjAwI0JyYWlkZWQgeWFybiBvciBmYWJyaWMgc2VydmljZXMjNzMuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNzMuMTQuMTcuMTUuMDAjSW5kdXN0cmlhbCBzZXdpbmcgc2VydmljZXMjNzMuMTQuMTcuMDAuMDAKLXVuc3BzYzcjNzMuMTUuMDAuMDAuMDAjTWFudWZhY3R1cmluZyBzdXBwb3J0IHNlcnZpY2VzIzczLjAwLjAwLjAwLjAwCi11bnNwc2M3IzczLjE1LjE1LjAwLjAwI0Fzc2VtYmx5IHNlcnZpY2VzIzczLjE1LjAwLjAwLjAwCi11bnNwc2M3IzczLjE1LjE1LjAxLjAwI0Fzc2VtYmx5IGxpbmUgd29yayM3My4xNS4xNS4wMC4wMAotdW5zcHNjNyM3My4xNS4xNS4wMi4wMCNKb2ludCBzZWFsaW5nIHNlcnZpY2VzIzczLjE1LjE1LjAwLjAwCi11bnNwc2M3IzczLjE1LjE2LjAwLjAwI1BhY2thZ2luZyBzZXJ2aWNlcyM3My4xNS4wMC4wMC4wMAotdW5zcHNjNyM3My4xNS4xNi4wMS4wMCNDYW5uaW5nIHBsYW50cyBzZXJ2aWNlcyM3My4xNS4xNi4wMC4wMAotdW5zcHNjNyM3My4xNS4xNi4wMi4wMCNQYWNrYWdpbmcgb2YgYWdyaWN1bHR1cmFsIGJ5IHByb2R1Y3RzIHNlcnZpY2VzIzczLjE1LjE2LjAwLjAwCi11bnNwc2M3IzczLjE1LjE2LjAzLjAwI1BhY2thZ2luZyBvZiBub24gZm9vZCBwcm9kdWN0cyBzZXJ2aWNlcyM3My4xNS4xNi4wMC4wMAotdW5zcHNjNyM3My4xNS4xNi4wNC4wMCNQYWNrYWdpbmcgb2YgcGhhcm1hY2V1dGljYWxzIHNlcnZpY2VzIzczLjE1LjE2LjAwLjAwCi11bnNwc2M3IzczLjE1LjE2LjA1LjAwI1BvaW50IG9mIHB1cmNoYXNlIGRpc3BsYXkgcGFja2FnaW5nIHNlcnZpY2VzIzczLjE1LjE2LjAwLjAwCi11bnNwc2M3IzczLjE1LjE2LjA2LjAwI01hbnVhbCBoYW5kIHBhY2thZ2luZyBzZXJ2aWNlcyM3My4xNS4xNi4wMC4wMAotdW5zcHNjNyM3My4xNS4xNi4wNy4wMCNNYWNoaW5lIGFzc2lzdGVkIHBhY2thZ2luZyBzZXJ2aWNlcyM3My4xNS4xNi4wMC4wMAotdW5zcHNjNyM3My4xNS4xNy4wMC4wMCNNYXRlcmlhbCB0cmVhdG1lbnQjNzMuMTUuMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTUuMTcuMDEuMDAjV2F0ZXIgcHJvb2ZpbmcgbWF0ZXJpYWwgdHJlYXRtZW50IHNlcnZpY2VzIzczLjE1LjE3LjAwLjAwCi11bnNwc2M3IzczLjE1LjE3LjAyLjAwI0ZpcmUgcHJvdGVjdGlvbiBtYXRlcmlhbCB0cmVhdG1lbnQgc2VydmljZXMjNzMuMTUuMTcuMDAuMDAKLXVuc3BzYzcjNzMuMTUuMTcuMDMuMDAjQW50aWNvcnJvc2lvbiBtYXRlcmlhbCB0cmVhdG1lbnQgc2VydmljZXMjNzMuMTUuMTcuMDAuMDAKLXVuc3BzYzcjNzMuMTUuMTguMDAuMDAjQ29udmVydGluZyBzZXJ2aWNlcyM3My4xNS4wMC4wMC4wMAotdW5zcHNjNyM3My4xNS4xOC4wMS4wMCNTaGVldGluZyBzZXJ2aWNlcyM3My4xNS4xOC4wMC4wMAotdW5zcHNjNyM3My4xNS4xOC4wMi4wMCNTbGl0dGluZyBzZXJ2aWNlcyM3My4xNS4xOC4wMC4wMAotdW5zcHNjNyM3My4xNS4xOC4wMy4wMCNEaWUgY3V0dGluZyBzZXJ2aWNlcyM3My4xNS4xOC4wMC4wMAotdW5zcHNjNyM3My4xNS4xOC4wNC4wMCNGb2xkaW5nIHNlcnZpY2VzIzczLjE1LjE4LjAwLjAwCi11bnNwc2M3IzczLjE1LjE4LjA1LjAwI0xhbWluYXRpbmcgc2VydmljZXMjNzMuMTUuMTguMDAuMDAKLXVuc3BzYzcjNzMuMTUuMTkuMDAuMDAjSW5kdXN0cmlhbCBwcmludGluZyBzZXJ2aWNlcyM3My4xNS4wMC4wMC4wMAotdW5zcHNjNyM3My4xNS4xOS4wMS4wMCNGbGV4b2dyYXBoaWMgaW5kdXN0cmlhbCBwcmludGluZyBzZXJ2aWNlcyM3My4xNS4xOS4wMC4wMAotdW5zcHNjNyM3My4xNS4xOS4wMi4wMCNSb3RvZ3JhdnVyZSBpbmR1c3RyaWFsIHByaW50aW5nIHNlcnZpY2VzIzczLjE1LjE5LjAwLjAwCi11bnNwc2M3IzczLjE1LjE5LjAzLjAwI1NjcmVlbiBpbmR1c3RyaWFsIHByaW50aW5nIHNlcnZpY2VzIzczLjE1LjE5LjAwLjAwCi11bnNwc2M3IzczLjE1LjE5LjA0LjAwI09mZnNldCBpbmR1c3RyaWFsIHByaW50aW5nIHNlcnZpY2VzIzczLjE1LjE5LjAwLjAwCi11bnNwc2M3IzczLjE1LjE5LjA1LjAwI0RpZ2l0YWwgaW5kdXN0cmlhbCBwcmludGluZyBzZXJ2aWNlcyM3My4xNS4xOS4wMC4wMAotdW5zcHNjNyM3My4xNS4xOS4wNi4wMCNUaGVybWFsIHRyYW5zZmVyIGluZHVzdHJpYWwgcHJpbnRpbmcgc2VydmljZXMjNzMuMTUuMTkuMDAuMDAKLXVuc3BzYzcjNzMuMTUuMjAuMDAuMDAjRmlsbGluZyBTZXJ2aWNlcyM3My4xNS4wMC4wMC4wMAotdW5zcHNjNyM3My4xNS4yMC4wMS4wMCNMaXF1aWQgZmlsbGluZyBzZXJ2aWNlcyM3My4xNS4yMC4wMC4wMAotdW5zcHNjNyM3My4xNS4yMC4wMi4wMCNBZXJvc29sIGZpbGxpbmcgc2VydmljZXMjNzMuMTUuMjAuMDAuMDAKLXVuc3BzYzcjNzMuMTUuMjAuMDMuMDAjUGFzdGUgZmlsbGluZyBzZXJ2aWNlcyM3My4xNS4yMC4wMC4wMAotdW5zcHNjNyM3My4xNS4yMC4wNC4wMCNQb3dkZXIgZmlsbGluZyBzZXJ2aWNlcyM3My4xNS4yMC4wMC4wMAotdW5zcHNjNyM3My4xNS4yMS4wMC4wMCNNYW51ZmFjdHVyaW5nIGVxdWlwbWVudCBtYWludGVuYW5jZSBhbmQgcmVwYWlyIHNlcnZpY2VzIzczLjE1LjAwLjAwLjAwCi11bnNwc2M3IzczLjE1LjIxLjAxLjAwI01hbnVmYWN0dXJpbmcgZXF1aXBtZW50IG1haW50ZW5hbmNlIHNlcnZpY2VzIzczLjE1LjIxLjAwLjAwCi11bnNwc2M3IzczLjE1LjIxLjAyLjAwI01hbnVmYWN0dXJpbmcgZXF1aXBtZW50IHJlcGFpciBzZXJ2aWNlcyM3My4xNS4yMS4wMC4wMAotdW5zcHNjNyM3My4xNi4wMC4wMC4wMCNNYWNoaW5lcnkgYW5kIHRyYW5zcG9ydCBlcXVpcG1lbnQgbWFudWZhY3R1cmUjNzMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTYuMTUuMDAuMDAjTWFudWZhY3R1cmUgb2YgbWFjaGluZXJ5IzczLjE2LjAwLjAwLjAwCi11bnNwc2M3IzczLjE2LjE1LjAxLjAwI0VuZ2luZSBvciB0dXJiaW5lIG1hbnVmYWN0dXJpbmcgc2VydmljZXMjNzMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTYuMTUuMDIuMDAjQWdyaWN1bHR1cmFsIG1hY2hpbmVyeSBvciBlcXVpcG1lbnQgbWFudWZhY3R1cmluZyBzZXJ2aWNlcyM3My4xNi4xNS4wMC4wMAotdW5zcHNjNyM3My4xNi4xNS4wMy4wMCNNYWNoaW5lIHRvb2xzIG9yIG1ldGFsIG9yIHdvb2Qgd29ya2luZyBtYW51ZmFjdHVyaW5nIHNlcnZpY2VzIzczLjE2LjE1LjAwLjAwCi11bnNwc2M3IzczLjE2LjE1LjA0LjAwI1NwZWNpYWwgaW5kdXN0cmlhbCBwbGFudHMgb3IgbWFjaGluZXJ5IG1hbnVmYWN0dXJpbmcgc2VydmljZXMjNzMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTYuMTUuMDUuMDAjQ29uc3RydWN0aW9uIG1hY2hpbmVyeSBvciBlcXVpcG1lbnQgbWFudWZhY3R1cmluZyBzZXJ2aWNlcyM3My4xNi4xNS4wMC4wMAotdW5zcHNjNyM3My4xNi4xNS4wNi4wMCNNaW5pbmcgbWFjaGluZXJ5IG9yIGVxdWlwbWVudCBtYW51ZmFjdHVyaW5nIHNlcnZpY2VzIzczLjE2LjE1LjAwLjAwCi11bnNwc2M3IzczLjE2LjE1LjA3LjAwI0Zvb2QgcHJvZHVjdHMgbWFjaGluZXJ5IG9yIGVxdWlwbWVudCBtYW51ZmFjdHVyaW5nIHNlcnZpY2VzIzczLjE2LjE1LjAwLjAwCi11bnNwc2M3IzczLjE2LjE1LjA4LjAwI1BhcGVyIHByaW50aW5nIG1hY2hpbmVyeSBvciBlcXVpcG1lbnQgbWFudWZhY3R1cmUgc2VydmljZXMjNzMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTYuMTUuMDkuMDAjTWV0YWxsdXJnaWNhbCBtYWNoaW5lcnkgb3IgZXF1aXBtZW50IG1hbnVmYWN0dXJlIHNlcnZpY2VzIzczLjE2LjE1LjAwLjAwCi11bnNwc2M3IzczLjE2LjE1LjEwLjAwI0NoZW1pY2FsIG9yIHBoYXJtYWNldXRpY2FsIG1hY2hpbmVyeSBvciBlcXVpcG1lbnQgbWFudWZhY3R1cmUgc2VydmljZXMjNzMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTYuMTUuMTEuMDAjQ2VtZW50IHBsYW50IG1hY2hpbmVyeSBvciBlcXVpcG1lbnQgbWFudWZhY3R1cmUgc2VydmljZXMjNzMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTYuMTUuMTIuMDAjVGV4dGlsZSBtYWNoaW5lcnkgb3IgZXF1aXBtZW50IG1hbnVmYWN0dXJlIHNlcnZpY2VzIzczLjE2LjE1LjAwLjAwCi11bnNwc2M3IzczLjE2LjE1LjEzLjAwI1Bvd2VyIHBsYW50IGJvaWxlcnMgbWFudWZhY3R1cmUgc2VydmljZXMjNzMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTYuMTUuMTQuMDAjRnVybmFjZXMgb3Igb3ZlbnMgbWFudWZhY3R1cmUgc2VydmljZXMjNzMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTYuMTUuMTUuMDAjT2ZmaWNlIG1hY2hpbmVyeSBvciBlcXVpcG1lbnQgbWFudWZhY3R1cmUgc2VydmljZXMjNzMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTYuMTUuMTYuMDAjTGlmdGluZyBvciBob2lzdGluZyBvciBjb252ZXlpbmcgZXF1aXBtZW50IG1hbnVmYWN0dXJlIHNlcnZpY2VzIzczLjE2LjE1LjAwLjAwCi11bnNwc2M3IzczLjE2LjE1LjE3LjAwI0FpciBjb25kaXRpb25pbmcgb3IgdmVudGlsYXRpbmcgb3IgcmVmcmlnZXJhdGlvbiBlcXVpcG1lbnQgbWFudWZhY3R1cmUgc2VydmljZXMjNzMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTYuMTUuMTguMDAjRG9tZXN0aWMgYXBwbGlhbmNlcyBvciBtYWNoaW5lcyBleGNlcHQgZWxlY3RyaWNhbCBtYW51ZmFjdHVyZSBzZXJ2aWNlcyM3My4xNi4xNS4wMC4wMAotdW5zcHNjNyM3My4xNi4xNS4xOS4wMCNQdW1wcyBvciBjb21wcmVzc29ycyBtYW51ZmFjdHVyZSBzZXJ2aWNlcyM3My4xNi4xNS4wMC4wMAotdW5zcHNjNyM3My4xNi4xNi4wMC4wMCNNYW51ZmFjdHVyZSBvZiB0cmFuc3BvcnQgZXF1aXBtZW50IzczLjE2LjAwLjAwLjAwCi11bnNwc2M3IzczLjE2LjE2LjAxLjAwI0Zpc2hpbmcgc2hpcCBvciBib2F0IGJ1aWxkaW5nIHNlcnZpY2VzIzczLjE2LjE2LjAwLjAwCi11bnNwc2M3IzczLjE2LjE2LjAyLjAwI1JhaWxyb2FkIHJvbGxpbmcgc3RvY2sgbWFudWZhY3R1cmUgc2VydmljZXMjNzMuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTYuMTYuMDMuMDAjTG9jb21vdGl2ZSBtYW51ZmFjdHVyZSBzZXJ2aWNlcyM3My4xNi4xNi4wMC4wMAotdW5zcHNjNyM3My4xNi4xNi4wNC4wMCNNb3RvciB2ZWhpY2xlcyBtYW51ZmFjdHVyZSBzZXJ2aWNlcyM3My4xNi4xNi4wMC4wMAotdW5zcHNjNyM3My4xNi4xNi4wNS4wMCNNb3RvciB2ZWhpY2xlcyBwYXJ0cyBvciBhY2Nlc3NvcmllcyBtYW51ZmFjdHVyZSBzZXJ2aWNlcyM3My4xNi4xNi4wMC4wMAotdW5zcHNjNyM3My4xNi4xNi4wNi4wMCNNb3RvcmN5Y2xlIG9yIGJpY3ljbGUgbWFudWZhY3R1cmUgc2VydmljZXMjNzMuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTYuMTYuMDcuMDAjQWlyIG9yIHNwYWNlY3JhZnQgbWFudWZhY3R1cmUgc2VydmljZXMjNzMuMTYuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTcuMDAuMDAuMDAjTWFudWZhY3R1cmUgb2YgZWxlY3RyaWNhbCBnb29kcyBhbmQgcHJlY2lzaW9uIGluc3RydW1lbnRzIzczLjAwLjAwLjAwLjAwCi11bnNwc2M3IzczLjE3LjE1LjAwLjAwI01hbnVmYWN0dXJlIG9mIGVsZWN0cmljYWwgZ29vZHMjNzMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTcuMTUuMDEuMDAjUG93ZXIgZ2VuZXJhdGlvbiBvciB0cmFuc21pc3Npb24gb3IgZGlzdHJpYnV0aW9uIGVxdWlwbWVudCBtYW51ZmFjdHVyZSBzZXJ2aWNlcyM3My4xNy4xNS4wMC4wMAotdW5zcHNjNyM3My4xNy4xNS4wMi4wMCNEcnkgb3Igc3RvcmFnZSBiYXR0ZXJ5IG1hbnVmYWN0dXJlIHNlcnZpY2VzIzczLjE3LjE1LjAwLjAwCi11bnNwc2M3IzczLjE3LjE1LjAzLjAwI0VsZWN0cmljYWwgdG9vbHMgbWFudWZhY3R1cmUgc2VydmljZXMjNzMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTcuMTUuMDQuMDAjTWVhc3VyaW5nIG9yIHRlc3RpbmcgaW5zdHJ1bWVudHMgbWFudWZhY3R1cmUgc2VydmljZXMjNzMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTcuMTUuMDUuMDAjUmFkaW8gb3IgdGVsZXZpc2lvbiBtYW51ZmFjdHVyZSBzZXJ2aWNlcyM3My4xNy4xNS4wMC4wMAotdW5zcHNjNyM3My4xNy4xNS4wNi4wMCNDb21tdW5pY2F0aW9uIGVxdWlwbWVudCBtYW51ZmFjdHVyZSBzZXJ2aWNlcyM3My4xNy4xNS4wMC4wMAotdW5zcHNjNyM3My4xNy4xNS4wNy4wMCNFbGVjdHJpY2FsIGhvdXNlaG9sZCBhcHBsaWFuY2VzIG1hbnVmYWN0dXJlIHNlcnZpY2VzIzczLjE3LjE1LjAwLjAwCi11bnNwc2M3IzczLjE3LjE1LjA4LjAwI0luc3VsYXRlZCB3aXJlIG9yIGNhYmxlIG1hbnVmYWN0dXJlIHNlcnZpY2VzIzczLjE3LjE1LjAwLjAwCi11bnNwc2M3IzczLjE3LjE1LjA5LjAwI0VsZWN0cmljYWwgYWNjZXNzb3JpZXMgbWFudWZhY3R1cmUgc2VydmljZXMjNzMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjNzMuMTcuMTUuMTAuMDAjRWxlY3RyaWNhbCBhY2Nlc3NvcmllcyBvciBzdXBwbGllcyBtYW51ZmFjdHVyZSBzZXJ2aWNlcyM3My4xNy4xNS4wMC4wMAotdW5zcHNjNyM3My4xNy4xNS4xMS4wMCNFbGVjdHJvbmljIGVxdWlwbWVudCBtYW51ZmFjdHVyZSBzZXJ2aWNlcyM3My4xNy4xNS4wMC4wMAotdW5zcHNjNyM3My4xNy4xNS4xMi4wMCNFbGVjdHJvbmljIGNvbXB1dGVycyBvciBkYXRhIHByb2Nlc3NpbmcgZXF1aXBtZW50IG1hbnVmYWN0dXJlIHNlcnZpY2VzIzczLjE3LjE1LjAwLjAwCi11bnNwc2M3IzczLjE3LjE2LjAwLjAwI01hbnVmYWN0dXJlIG9mIHByZWNpc2lvbiBpbnN0cnVtZW50cyM3My4xNy4wMC4wMC4wMAotdW5zcHNjNyM3My4xNy4xNi4wMS4wMCNTY2llbnRpZmljIGluc3RydW1lbnRzIG9yIG1lYXN1cmluZyBlcXVpcG1lbnQgbWFudWZhY3R1cmUgc2VydmljZXMjNzMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjNzMuMTcuMTYuMDIuMDAjTWVkaWNhbCBvciBkZW50YWwgZXF1aXBtZW50IG1hbnVmYWN0dXJlIHNlcnZpY2VzIzczLjE3LjE2LjAwLjAwCi11bnNwc2M3IzczLjE3LjE2LjAzLjAwI1Bob3RvZ3JhcGhpYyBvciBvcHRpY2FsIGVxdWlwbWVudCBtYW51ZmFjdHVyZSBzZXJ2aWNlcyM3My4xNy4xNi4wMC4wMAotdW5zcHNjNyM3My4xNy4xNi4wNC4wMCNXYXRjaGVzIG9yIGNsb2NrcyBtYW51ZmFjdHVyZSBzZXJ2aWNlcyM3My4xNy4xNi4wMC4wMAotdW5zcHNjNyM3My4xNy4xNi4wNS4wMCNMYWJvcmF0b3J5IGVxdWlwbWVudCBtYW51ZmFjdHVyZSBzZXJ2aWNlcyM3My4xNy4xNi4wMC4wMAotdW5zcHNjNyM3My4xOC4wMC4wMC4wMCNNYWNoaW5pbmcgYW5kIHByb2Nlc3Npbmcgc2VydmljZXMjNzMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTAuMDAuMDAjTWFjaGluaW5nIHNlcnZpY2VzIzczLjE4LjAwLjAwLjAwCi11bnNwc2M3IzczLjE4LjEwLjAxLjAwI1R1cm5pbmcgc2VydmljZXMjNzMuMTguMTAuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTAuMDIuMDAjRWxlY3RybyBkaXNjaGFyZ2UgbWFjaGluaW5nIChFRE0pIHNlcnZpY2VzIzczLjE4LjEwLjAwLjAwCi11bnNwc2M3IzczLjE4LjEwLjAzLjAwI0VsZWN0cm8gY2hlbWljYWwgbWFjaGluaW5nIChFQ00pIHNlcnZpY2VzIzczLjE4LjEwLjAwLjAwCi11bnNwc2M3IzczLjE4LjEwLjA0LjAwI0NoZW0gbWlsbGluZyBzZXJ2aWNlcyM3My4xOC4xMC4wMC4wMAotdW5zcHNjNyM3My4xOC4xMC4wNS4wMCNQdW5jaGluZyBzZXJ2aWNlcyM3My4xOC4xMC4wMC4wMAotdW5zcHNjNyM3My4xOC4xMC4wNi4wMCNTdGFtcGluZyBzZXJ2aWNlcyM3My4xOC4xMC4wMC4wMAotdW5zcHNjNyM3My4xOC4xMC4wNy4wMCNCb3Jpbmcgc2VydmljZXMjNzMuMTguMTAuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTAuMDguMDAjRHJpbGxpbmcgc2VydmljZXMjNzMuMTguMTAuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTAuMDkuMDAjVGFwcGluZyBzZXJ2aWNlcyM3My4xOC4xMC4wMC4wMAotdW5zcHNjNyM3My4xOC4xMC4xMC4wMCNMYXNlciBzZXJ2aWNlcyM3My4xOC4xMC4wMC4wMAotdW5zcHNjNyM3My4xOC4xMC4xMS4wMCNCZW5kaW5nIHNlcnZpY2VzIzczLjE4LjEwLjAwLjAwCi11bnNwc2M3IzczLjE4LjEwLjEyLjAwI0dyaW5kaW5nIHNlcnZpY2VzIzczLjE4LjEwLjAwLjAwCi11bnNwc2M3IzczLjE4LjEwLjEzLjAwI1Nob3QgYmxhc3Rpbmcgc2VydmljZXMjNzMuMTguMTAuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTAuMTQuMDAjUG9saXNoaW5nIHNlcnZpY2VzIzczLjE4LjEwLjAwLjAwCi11bnNwc2M3IzczLjE4LjEwLjE1LjAwI0ZsYW1lIGN1dHRpbmcgc2VydmljZXMjNzMuMTguMTAuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTAuMTYuMDAjTGFzZXIgY3V0dGluZyBzZXJ2aWNlcyM3My4xOC4xMC4wMC4wMAotdW5zcHNjNyM3My4xOC4xMC4xNy4wMCNQbGFzbWEgY3V0dGluZyBzZXJ2aWNlcyM3My4xOC4xMC4wMC4wMAotdW5zcHNjNyM3My4xOC4xMC4xOC4wMCNXYXRlciBqZXQgY3V0dGluZyBzZXJ2aWNlcyM3My4xOC4xMC4wMC4wMAotdW5zcHNjNyM3My4xOC4xMC4xOS4wMCNSb2xsaW5nIFNlcnZpY2VzIzczLjE4LjEwLjAwLjAwCi11bnNwc2M3IzczLjE4LjEwLjIwLjAwI1N1cmZhY2UgdHJlYXRtZW50IHNlcnZpY2VzIzczLjE4LjEwLjAwLjAwCi11bnNwc2M3IzczLjE4LjEwLjIxLjAwI01pbGxpbmcgc2VydmljZXMjNzMuMTguMTAuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTAuMjIuMDAjU3ByYXlpbmcgc2VydmljZXMjNzMuMTguMTAuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTAuMjMuMDAjU2hhcnBlbmluZyBzZXJ2aWNlIzczLjE4LjEwLjAwLjAwCi11bnNwc2M3IzczLjE4LjExLjAwLjAwI0NvYXRpbmcgc2VydmljZXMjNzMuMTguMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTEuMDEuMDAjRWxlY3RybyBjb2F0aW5nIHNlcnZpY2VzIzczLjE4LjExLjAwLjAwCi11bnNwc2M3IzczLjE4LjExLjAyLjAwI0RpcHBpbmcgc2VydmljZXMjNzMuMTguMTEuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTEuMDMuMDAjV3JhcHBpbmcgc2VydmljZXMjNzMuMTguMTEuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTEuMDQuMDAjUGFpbnRpbmcgc2VydmljZXMjNzMuMTguMTEuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTEuMDUuMDAjV2ViIGNvYXRpbmcgc2VydmljZXMjNzMuMTguMTEuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTEuMDYuMDAjUGxhdGluZyBzZXJ2aWNlcyM3My4xOC4xMS4wMC4wMAotdW5zcHNjNyM3My4xOC4xMi4wMC4wMCNGb3JtaW5nIHNlcnZpY2VzIzczLjE4LjAwLjAwLjAwCi11bnNwc2M3IzczLjE4LjEyLjAxLjAwI0RyYXcgZm9ybWluZyBzZXJ2aWNlcyM3My4xOC4xMi4wMC4wMAotdW5zcHNjNyM3My4xOC4xMi4wMi4wMCNIeWRybyBmb3JtaW5nIHNlcnZpY2VzIzczLjE4LjEyLjAwLjAwCi11bnNwc2M3IzczLjE4LjEyLjAzLjAwI1JvbGwgZm9ybWluZyBzZXJ2aWNlcyM3My4xOC4xMi4wMC4wMAotdW5zcHNjNyM3My4xOC4xMi4wNC4wMCNTdHJldGNoIGZvcm1pbmcgc2VydmljZXMjNzMuMTguMTIuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTIuMDUuMDAjU3BpbiBmb3JtaW5nIHNlcnZpY2VzIzczLjE4LjEyLjAwLjAwCi11bnNwc2M3IzczLjE4LjEyLjA2LjAwI0V4cGxvc2l2ZSBmb3JtaW5nIHNlcnZpY2VzIzczLjE4LjEyLjAwLjAwCi11bnNwc2M3IzczLjE4LjEzLjAwLjAwI0hlYXQgdHJlYXRtZW50IHNlcnZpY2VzIzczLjE4LjAwLjAwLjAwCi11bnNwc2M3IzczLjE4LjEzLjAxLjAwI1F1ZW5jaCBhbmQgdGVtcGVyIHNlcnZpY2VzIzczLjE4LjEzLjAwLjAwCi11bnNwc2M3IzczLjE4LjEzLjAyLjAwI0FubmVhbGluZyBzZXJ2aWNlcyM3My4xOC4xMy4wMC4wMAotdW5zcHNjNyM3My4xOC4xMy4wMy4wMCNOb3JtYWxpemluZyBzZXJ2aWNlcyM3My4xOC4xMy4wMC4wMAotdW5zcHNjNyM3My4xOC4xMy4wNC4wMCNBZ2luZyBvciBzdGFiaWxpemluZyBzZXJ2aWNlcyM3My4xOC4xMy4wMC4wMAotdW5zcHNjNyM3My4xOC4xOS4wMC4wMCNXZWxkaW5nIGFuZCBicmF6aW5nIGFuZCBzb2xkZXJpbmcgc2VydmljZXMjNzMuMTguMDAuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTkuMDEuMDAjQXJjIHdlbGRpbmcgc2VydmljZXMjNzMuMTguMTkuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTkuMDIuMDAjTWV0YWwgaW5lcnQgZ2FzIChNSUcpIHdlbGRpbmcgc2VydmljZXMjNzMuMTguMTkuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTkuMDMuMDAjVHVuZ3N0ZW4gaW5lcnQgZ2FzIChUSUcpIHdlbGRpbmcgc2VydmljZXMjNzMuMTguMTkuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTkuMDQuMDAjTGFzZXIgd2VsZGluZyBzZXJ2aWNlcyM3My4xOC4xOS4wMC4wMAotdW5zcHNjNyM3My4xOC4xOS4wNS4wMCNTcG90IHdlbGRpbmcgc2VydmljZXMjNzMuMTguMTkuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTkuMDYuMDAjUHJvamVjdGlvbiB3ZWxkaW5nIHNlcnZpY2VzIzczLjE4LjE5LjAwLjAwCi11bnNwc2M3IzczLjE4LjE5LjA3LjAwI0JyYXppbmcgc2VydmljZXMjNzMuMTguMTkuMDAuMDAKLXVuc3BzYzcjNzMuMTguMTkuMDguMDAjU29sZGVyaW5nIHNlcnZpY2VzIzczLjE4LjE5LjAwLjAwCi11bnNwc2M3Izc2LjAwLjAwLjAwLjAwI0luZHVzdHJpYWwgQ2xlYW5pbmcgU2VydmljZXMjNzYuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzYuMTAuMDAuMDAuMDAjRGVjb250YW1pbmF0aW9uIHNlcnZpY2VzIzc2LjAwLjAwLjAwLjAwCi11bnNwc2M3Izc2LjEwLjE1LjAwLjAwI0Rpc2luZmVjdGlvbiM3Ni4xMC4wMC4wMC4wMAotdW5zcHNjNyM3Ni4xMC4xNS4wMS4wMCNXYXNocm9vbSBzYW5pdGF0aW9uIHNlcnZpY2VzIzc2LjEwLjE1LjAwLjAwCi11bnNwc2M3Izc2LjEwLjE1LjAyLjAwI1Jlc3Qgcm9vbSBjbGVhbmluZyBzZXJ2aWNlcyM3Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM3Ni4xMC4xNS4wMy4wMCNEaXNpbmZlY3Rpb24gb3IgZGVvZG9yaXppbmcgc2VydmljZXMjNzYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNzYuMTAuMTYuMDAuMDAjSGF6YXJkb3VzIG1hdGVyaWFsIGRlY29udGFtaW5hdGlvbiM3Ni4xMC4wMC4wMC4wMAotdW5zcHNjNyM3Ni4xMC4xNi4wMS4wMCNSYWRpb2FjdGl2ZSBkZWNvbnRhbWluYXRpb24gc2VydmljZXMjNzYuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzYuMTAuMTYuMDIuMDAjQXNiZXN0b3MgZGVjb250YW1pbmF0aW9uIG9yIHJlbW92YWwjNzYuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzYuMTEuMDAuMDAuMDAjQ2xlYW5pbmcgYW5kIGphbml0b3JpYWwgc2VydmljZXMjNzYuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzYuMTEuMTUuMDAuMDAjR2VuZXJhbCBidWlsZGluZyBhbmQgb2ZmaWNlIGNsZWFuaW5nIHNlcnZpY2VzIzc2LjExLjAwLjAwLjAwCi11bnNwc2M3Izc2LjExLjE1LjAxLjAwI0J1aWxkaW5nIGNsZWFuaW5nIHNlcnZpY2VzIzc2LjExLjE1LjAwLjAwCi11bnNwc2M3Izc2LjExLjE1LjAyLjAwI0J1aWxkaW5nIG1haW50ZW5hbmNlIG9yIHJlcGFpciBzZXJ2aWNlcyM3Ni4xMS4xNS4wMC4wMAotdW5zcHNjNyM3Ni4xMS4xNS4wMy4wMCNMaWdodGluZyBtYWludGVuYW5jZSBzZXJ2aWNlcyM3Ni4xMS4xNS4wMC4wMAotdW5zcHNjNyM3Ni4xMS4xNS4wNC4wMCNXaW5kb3cgb3Igd2luZG93IGJsaW5kIGNsZWFuaW5nIHNlcnZpY2VzIzc2LjExLjE1LjAwLjAwCi11bnNwc2M3Izc2LjExLjE2LjAwLjAwI0J1aWxkaW5nIGNvbXBvbmVudCBjbGVhbmluZyBzZXJ2aWNlcyM3Ni4xMS4wMC4wMC4wMAotdW5zcHNjNyM3Ni4xMS4xNi4wMS4wMCNBY291c3RpY2FsIHRpbGUgb3IgY2VpbGluZyBjbGVhbmluZyBzZXJ2aWNlcyM3Ni4xMS4xNi4wMC4wMAotdW5zcHNjNyM3Ni4xMS4xNi4wMi4wMCNBaXIgZHVjdCBjbGVhbmluZyM3Ni4xMS4xNi4wMC4wMAotdW5zcHNjNyM3Ni4xMS4xNi4wMy4wMCNDaGltbmV5IGNsZWFuaW5nIzc2LjExLjE2LjAwLjAwCi11bnNwc2M3Izc2LjExLjE2LjA0LjAwI0Zsb29yIHdheGluZyBvciBjYXJwZXQgY2xlYW5pbmcjNzYuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNzYuMTEuMTYuMDUuMDAjRXhoYXVzdCBob29kIG9yIGZhbiBjbGVhcmluZyM3Ni4xMS4xNi4wMC4wMAotdW5zcHNjNyM3Ni4xMS4xNy4wMC4wMCNCdWlsZGluZyBzaXRlIGNsZWFuIHVwIzc2LjExLjAwLjAwLjAwCi11bnNwc2M3Izc2LjExLjE3LjAxLjAwI0NvbnN0cnVjdGlvbiBzaXRlIGNsZWFuIHVwIHNlcnZpY2VzIzc2LjExLjE3LjAwLjAwCi11bnNwc2M3Izc2LjExLjE3LjAyLjAwI0NvbnN0cnVjdGlvbiBzaXRlIGhhdWwgYXdheSBzZXJ2aWNlcyM3Ni4xMS4xNy4wMC4wMAotdW5zcHNjNyM3Ni4xMi4wMC4wMC4wMCNSZWZ1c2UgZGlzcG9zYWwgYW5kIHRyZWF0bWVudCM3Ni4wMC4wMC4wMC4wMAotdW5zcHNjNyM3Ni4xMi4xNS4wMC4wMCNSZWZ1c2UgY29sbGVjdGlvbiBhbmQgZGlzcG9zYWwjNzYuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzYuMTIuMTUuMDEuMDAjR2FyYmFnZSBjb2xsZWN0aW9uIG9yIGRlc3RydWN0aW9uIG9yIHByb2Nlc3Npbmcgb3IgZGlzcG9zYWwjNzYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzYuMTIuMTUuMDIuMDAjTGlxdWlkIHdhc3RlIGNvbGxlY3Rpb24gb3IgcHJvY2Vzc2luZyBvciBkaXNwb3NhbCM3Ni4xMi4xNS4wMC4wMAotdW5zcHNjNyM3Ni4xMi4xNS4wMy4wMCNTdHJlZXQgY2xlYW5pbmcgc2VydmljZXMjNzYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzYuMTIuMTYuMDAuMDAjTm9uaGF6YXJkb3VzIHdhc3RlIGRpc3Bvc2FsIzc2LjEyLjAwLjAwLjAwCi11bnNwc2M3Izc2LjEyLjE2LjAxLjAwI0dhcmJhZ2UgZHVtcCM3Ni4xMi4xNi4wMC4wMAotdW5zcHNjNyM3Ni4xMi4xNi4wMi4wMCNTYW5pdGFyeSBsYW5kZmlsbCBvcGVyYXRpb25zIzc2LjEyLjE2LjAwLjAwCi11bnNwc2M3Izc2LjEyLjE2LjAzLjAwI1NsdWRnZSBkaXNwb3NhbCM3Ni4xMi4xNi4wMC4wMAotdW5zcHNjNyM3Ni4xMi4xNi4wNC4wMCNEZWFkIGFuaW1hbCBkaXNwb3NhbCBzZXJ2aWNlcyM3Ni4xMi4xNi4wMC4wMAotdW5zcHNjNyM3Ni4xMi4xNy4wMC4wMCNMaXF1aWQgd2FzdGUgdHJlYXRtZW50Izc2LjEyLjAwLjAwLjAwCi11bnNwc2M3Izc2LjEyLjE3LjAxLjAwI1Nld2FnZSB0cmVhdG1lbnQgc2VydmljZXMjNzYuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNzYuMTIuMTcuMDIuMDAjQ2hlbWljYWwgdHJlYXRtZW50IHNlcnZpY2VzIzc2LjEyLjE3LjAwLjAwCi11bnNwc2M3Izc2LjEyLjE4LjAwLjAwI1JlZnVzZSB0cmVhdG1lbnQjNzYuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzYuMTIuMTguMDEuMDAjUmVjeWNsaW5nIHNlcnZpY2VzIzc2LjEyLjE4LjAwLjAwCi11bnNwc2M3Izc2LjEyLjE5LjAwLjAwI0hhemFyZG91cyB3YXN0ZSBkaXNwb3NhbCM3Ni4xMi4wMC4wMC4wMAotdW5zcHNjNyM3Ni4xMi4xOS4wMS4wMCNNZWRpY2FsIHdhc3RlIGRpc3Bvc2FsIzc2LjEyLjE5LjAwLjAwCi11bnNwc2M3Izc2LjEyLjE5LjAyLjAwI0FjaWQgd2FzdGUgY29sbGVjdGlvbiBvciBkaXNwb3NhbCM3Ni4xMi4xOS4wMC4wMAotdW5zcHNjNyM3Ni4xMi4xOS4wMy4wMCNDaGVtaWNhbCBkZXRveGlmaWNhdGlvbiM3Ni4xMi4xOS4wMC4wMAotdW5zcHNjNyM3Ni4xMy4wMC4wMC4wMCNUb3hpYyBhbmQgaGF6YXJkb3VzIHdhc3RlIGNsZWFudXAjNzYuMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzYuMTMuMTUuMDAuMDAjTnVjbGVhciB3YXN0ZSB0cmVhdG1lbnQjNzYuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNzYuMTMuMTUuMDEuMDAjUmFkaW9hY3RpdmUgd2FzdGUgbWF0ZXJpYWwgdHJlYXRtZW50Izc2LjEzLjE1LjAwLjAwCi11bnNwc2M3Izc2LjEzLjE1LjAyLjAwI1JhZGlvYWN0aXZlIGNvbnRhaW5tZW50IHNlcnZpY2VzIzc2LjEzLjE1LjAwLjAwCi11bnNwc2M3Izc2LjEzLjE2LjAwLjAwI1RveGljIHNwaWxsIGNsZWFudXAjNzYuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNzYuMTMuMTYuMDEuMDAjVG94aWMgc3BpbGwgY29udGFpbm1lbnQjNzYuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNzYuMTMuMTYuMDIuMDAjVG94aWMgc3Vic3RhbmNlcyBzcGlsbCBjbGVhbnVwIzc2LjEzLjE2LjAwLjAwCi11bnNwc2M3Izc2LjEzLjE3LjAwLjAwI09pbCBzcGlsbCBjbGVhbnVwIzc2LjEzLjAwLjAwLjAwCi11bnNwc2M3Izc2LjEzLjE3LjAxLjAwI09pbCByZXNpZHVlIGRpc3Bvc2FsIG9yIGNvbnRyb2wgc2VydmljZXMjNzYuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNzYuMTMuMTcuMDIuMDAjT2lsIHNwaWxsIHRyZWF0bWVudCBzZXJ2aWNlcyM3Ni4xMy4xNy4wMC4wMAotdW5zcHNjNyM3Ny4wMC4wMC4wMC4wMCNFbnZpcm9ubWVudGFsIFNlcnZpY2VzIzc3LjAwLjAwLjAwLjAwCi11bnNwc2M3Izc3LjEwLjAwLjAwLjAwI0Vudmlyb25tZW50YWwgbWFuYWdlbWVudCM3Ny4wMC4wMC4wMC4wMAotdW5zcHNjNyM3Ny4xMC4xNS4wMC4wMCNFbnZpcm9ubWVudGFsIGltcGFjdCBhc3Nlc3NtZW50Izc3LjEwLjAwLjAwLjAwCi11bnNwc2M3Izc3LjEwLjE1LjAxLjAwI1Jpc2sgb3IgaGF6YXJkIGFzc2Vzc21lbnQjNzcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNzcuMTAuMTUuMDIuMDAjRW52aXJvbm1lbnRhbCBzdGFuZGFyZHMjNzcuMTAuMTUuMDAuMDAKLXVuc3BzYzcjNzcuMTAuMTUuMDMuMDAjRW52aXJvbm1lbnRhbCBpbmRpY2F0b3JzIGFuYWx5c2lzIzc3LjEwLjE1LjAwLjAwCi11bnNwc2M3Izc3LjEwLjE1LjA0LjAwI0Vudmlyb25tZW50YWwgaW1wYWN0IGFzc2Vzc21lbnQgIChFSUEpIHNlcnZpY2VzIzc3LjEwLjE1LjAwLjAwCi11bnNwc2M3Izc3LjEwLjE1LjA1LjAwI0Vudmlyb25tZW50YWwgbW9uaXRvcmluZyM3Ny4xMC4xNS4wMC4wMAotdW5zcHNjNyM3Ny4xMC4xNi4wMC4wMCNFbnZpcm9ubWVudGFsIHBsYW5uaW5nIzc3LjEwLjAwLjAwLjAwCi11bnNwc2M3Izc3LjEwLjE2LjAxLjAwI1VyYmFuIGVudmlyb25tZW50YWwgZGV2ZWxvcG1lbnQgcGxhbm5pbmcjNzcuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzcuMTAuMTYuMDIuMDAjRm9yZXN0IGNvbnNlcnZhdGlvbiBzdHJhdGVneSBwbGFubmluZyM3Ny4xMC4xNi4wMC4wMAotdW5zcHNjNyM3Ny4xMC4xNi4wMy4wMCNNYXJpbmUgY29uc2VydmF0aW9uIHN0cmF0ZWd5IHBsYW5uaW5nIzc3LjEwLjE2LjAwLjAwCi11bnNwc2M3Izc3LjEwLjE2LjA0LjAwI05hdHVyYWwgcmVzb3VyY2VzIG1hbmFnZW1lbnQgb3IgY29uc2VydmF0aW9uIHN0cmF0ZWd5IHBsYW5uaW5nIHNlcnZpY2VzIzc3LjEwLjE2LjAwLjAwCi11bnNwc2M3Izc3LjEwLjE2LjA1LjAwI0Vudmlyb25tZW50YWwgaW5zdGl0dXRpb24gYnVpbGRpbmcgb3IgcGxhbm5pbmcjNzcuMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzcuMTAuMTcuMDAuMDAjRW52aXJvbm1lbnRhbCBhZHZpc29yeSBzZXJ2aWNlcyM3Ny4xMC4wMC4wMC4wMAotdW5zcHNjNyM3Ny4xMC4xNy4wMS4wMCNFbnZpcm9ubWVudGFsIHNjaWVuY2VzIGFkdmlzb3J5IHNlcnZpY2VzIzc3LjEwLjE3LjAwLjAwCi11bnNwc2M3Izc3LjEwLjE3LjAyLjAwI0Vudmlyb25tZW50YWwgY2hlbWlzdHJ5IGFkdmlzb3J5IHNlcnZpY2VzIzc3LjEwLjE3LjAwLjAwCi11bnNwc2M3Izc3LjEwLjE3LjAzLjAwI0Vudmlyb25tZW50YWwgZXRoaWNzIGFkdmlzb3J5IHNlcnZpY2VzIzc3LjEwLjE3LjAwLjAwCi11bnNwc2M3Izc3LjEwLjE3LjA0LjAwI0Vudmlyb25tZW50YWwgdGVjaG5vbG9neSBhZHZpc29yeSBzZXJ2aWNlcyM3Ny4xMC4xNy4wMC4wMAotdW5zcHNjNyM3Ny4xMC4xNy4wNS4wMCNFbnZpcm9ubWVudGFsIGVjb25vbWljcyBhZHZpc29yeSBzZXJ2aWNlcyM3Ny4xMC4xNy4wMC4wMAotdW5zcHNjNyM3Ny4xMC4xNy4wNi4wMCNFbnZpcm9ubWVudGFsIGxhdyBhZHZpc29yeSBzZXJ2aWNlcyM3Ny4xMC4xNy4wMC4wMAotdW5zcHNjNyM3Ny4xMC4xNy4wNy4wMCNFY29sb2d5IGFkdmlzb3J5IHNlcnZpY2VzIzc3LjEwLjE3LjAwLjAwCi11bnNwc2M3Izc3LjEwLjE4LjAwLjAwI0Vudmlyb25tZW50YWwgYXVkaXRpbmcjNzcuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzcuMTAuMTguMDEuMDAjRW52aXJvbm1lbnRhbCBpbmZvcm1hdGlvbiBzeXN0ZW1zIzc3LjEwLjE4LjAwLjAwCi11bnNwc2M3Izc3LjEwLjE4LjAyLjAwI0NvcnBvcmF0ZSBlbnZpcm9ubWVudGFsIGF1ZGl0aW5nIHNlcnZpY2VzIzc3LjEwLjE4LjAwLjAwCi11bnNwc2M3Izc3LjEwLjE4LjAzLjAwI1NlY3RvcmFsIGVudmlyb25tZW50YWwgYXVkaXRpbmcgc2VydmljZXMjNzcuMTAuMTguMDAuMDAKLXVuc3BzYzcjNzcuMTAuMTguMDQuMDAjQWN0aXZpdHkgc3BlY2lmaWMgZW52aXJvbm1lbnRhbCBhdWRpdGluZyBzZXJ2aWNlcyM3Ny4xMC4xOC4wMC4wMAotdW5zcHNjNyM3Ny4xMC4xOC4wNS4wMCNFbnZpcm9ubWVudGFsIHF1YWxpdHkgY29udHJvbCBzZXJ2aWNlcyM3Ny4xMC4xOC4wMC4wMAotdW5zcHNjNyM3Ny4xMC4xOC4wNi4wMCNFbnZpcm9ubWVudGFsIHNlY3VyaXR5IGNvbnRyb2wgc2VydmljZXMjNzcuMTAuMTguMDAuMDAKLXVuc3BzYzcjNzcuMTAuMTkuMDAuMDAjUG9sbHV0aW9uIGludmVzdGlnYXRpb24gc2VydmljZXMjNzcuMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzcuMTAuMTkuMDEuMDAjSW5kdXN0cmlhbCBzaXRlIGludmVzdGlnYXRpb24jNzcuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNzcuMTAuMTkuMDIuMDAjSW5kdXN0cmlhbCB3YXN0ZSBzaXRlIGludmVzdGlnYXRpb24jNzcuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNzcuMTAuMTkuMDMuMDAjR2Fzd29ya3Mgc2l0ZSBpbnZlc3RpZ2F0aW9uIzc3LjEwLjE5LjAwLjAwCi11bnNwc2M3Izc3LjEwLjE5LjA0LjAwI0NoZW1pY2FsIHdvcmtzIG9yIG9pbCByZWZpbmVyeSB3YXN0ZSBzaXRlIGludmVzdGlnYXRpb24jNzcuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNzcuMTAuMTkuMDUuMDAjV29vZCB0cmVhdG1lbnQgcGxhbnQgc2l0ZSBpbnZlc3RpZ2F0aW9uIzc3LjEwLjE5LjAwLjAwCi11bnNwc2M3Izc3LjEwLjE5LjA2LjAwI09pbCBkZXBvdCBvciB0ZXJtaW5hbCBzaXRlIGludmVzdGlnYXRpb24jNzcuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNzcuMTAuMTkuMDcuMDAjRHJ5IGNsZWFuaW5nIHBsYW50cyBzaXRlIGludmVzdGlnYXRpb24jNzcuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNzcuMTAuMTkuMDguMDAjRm91bmRyeSBzaXRlIGludmVzdGlnYXRpb24jNzcuMTAuMTkuMDAuMDAKLXVuc3BzYzcjNzcuMTAuMTkuMDkuMDAjUmVjeWNsaW5nIHBsYW50IHNpdGUgaW52ZXN0aWdhdGlvbiM3Ny4xMC4xOS4wMC4wMAotdW5zcHNjNyM3Ny4xMC4xOS4xMC4wMCNGb29kIHByb2Nlc3NpbmcgcGxhbnQgc2l0ZSBpbnZlc3RpZ2F0aW9uIzc3LjEwLjE5LjAwLjAwCi11bnNwc2M3Izc3LjExLjAwLjAwLjAwI0Vudmlyb25tZW50YWwgcHJvdGVjdGlvbiM3Ny4wMC4wMC4wMC4wMAotdW5zcHNjNyM3Ny4xMS4xNS4wMC4wMCNFbnZpcm9ubWVudGFsIHNhZmV0eSBzZXJ2aWNlcyM3Ny4xMS4wMC4wMC4wMAotdW5zcHNjNyM3Ny4xMS4xNS4wMS4wMCNMYW5kc2NhcGUgcHJvdGVjdGlvbiBzZXJ2aWNlcyM3Ny4xMS4xNS4wMC4wMAotdW5zcHNjNyM3Ny4xMS4xNS4wMi4wMCNPem9uZSBwcm90ZWN0aW9uIHNlcnZpY2VzIzc3LjExLjE1LjAwLjAwCi11bnNwc2M3Izc3LjExLjE1LjAzLjAwI0Zvb2Qgb3IgZmVlZCBjb250YW1pbmF0aW9uIHByb3RlY3Rpb24gc2VydmljZXMjNzcuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNzcuMTEuMTUuMDQuMDAjR2VuZXRpYyByZXNvdXJjZXMgcHJvdGVjdGlvbiBzZXJ2aWNlcyM3Ny4xMS4xNS4wMC4wMAotdW5zcHNjNyM3Ny4xMS4xNS4wNS4wMCNUb3hpYyBzdWJzdGFuY2VzIHByb3RlY3Rpb24gc2VydmljZXMjNzcuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNzcuMTEuMTUuMDYuMDAjUmFkaWF0aW9uIHByb3RlY3Rpb24gc2VydmljZXMjNzcuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNzcuMTEuMTUuMDcuMDAjRW5kYW5nZXJlZCBzcGVjaWVzIHByb3RlY3Rpb24gc2VydmljZXMjNzcuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNzcuMTEuMTUuMDguMDAjTmF0dXJhbCByaXNrcyBvciBoYXphcmRzIHByb3RlY3Rpb24gc2VydmljZXMjNzcuMTEuMTUuMDAuMDAKLXVuc3BzYzcjNzcuMTEuMTYuMDAuMDAjRW52aXJvbm1lbnRhbCByZWhhYmlsaXRhdGlvbiM3Ny4xMS4wMC4wMC4wMAotdW5zcHNjNyM3Ny4xMS4xNi4wMS4wMCNJbmR1c3RyaWFsIHNpdGUgcmVoYWJpbGl0YXRpb24jNzcuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNzcuMTEuMTYuMDIuMDAjRW52aXJvbm1lbnRhbCBkZWNvbnRhbWluYXRpb24gc2VydmljZXMjNzcuMTEuMTYuMDAuMDAKLXVuc3BzYzcjNzcuMTEuMTYuMDMuMDAjTGFuZCByZWNsYW1hdGlvbiBzZXJ2aWNlcyM3Ny4xMS4xNi4wMC4wMAotdW5zcHNjNyM3Ny4xMi4wMC4wMC4wMCNQb2xsdXRpb24gdHJhY2tpbmcgYW5kIG1vbml0b3JpbmcgYW5kIHJlaGFiaWxpdGF0aW9uIzc3LjAwLjAwLjAwLjAwCi11bnNwc2M3Izc3LjEyLjE1LjAwLjAwI0FpciBwb2xsdXRpb24jNzcuMTIuMDAuMDAuMDAKLXVuc3BzYzcjNzcuMTIuMTUuMDEuMDAjQWlyIHF1YWxpdHkgbWFuYWdlbWVudCM3Ny4xMi4xNS4wMC4wMAotdW5zcHNjNyM3Ny4xMi4xNS4wMi4wMCNUcmFuc2JvdW5kYXJ5IGFpciBwb2xsdXRpb24gbWFuYWdlbWVudCBvciBjb250cm9sIHNlcnZpY2VzIzc3LjEyLjE1LjAwLjAwCi11bnNwc2M3Izc3LjEyLjE1LjAzLjAwI0FpciBwb2xsdXRpb24gcHJvdGVjdGlvbiBzZXJ2aWNlcyM3Ny4xMi4xNS4wMC4wMAotdW5zcHNjNyM3Ny4xMi4xNS4wNC4wMCNBaXIgcG9sbHV0aW9uIG1vbml0b3Jpbmcgb3IgbWVhc3VyZW1lbnQgc2VydmljZXMjNzcuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzcuMTIuMTUuMDUuMDAjVG94aWMgZ2FzIGRldGVjdGlvbiBzZXJ2aWNlcyM3Ny4xMi4xNS4wMC4wMAotdW5zcHNjNyM3Ny4xMi4xNS4wNi4wMCNNZXRoYW5lIG1vbml0b3JpbmcjNzcuMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzcuMTIuMTUuMDcuMDAjQ2FyYm9uIGRpb3hpZGUgbW9uaXRvcmluZyBzZXJ2aWNlcyM3Ny4xMi4xNS4wMC4wMAotdW5zcHNjNyM3Ny4xMi4xNS4wOC4wMCNBaXJib3JuZSBwYXJ0aWNsZSBtb25pdG9yaW5nIzc3LjEyLjE1LjAwLjAwCi11bnNwc2M3Izc3LjEyLjE1LjA5LjAwI096b25lIGRlcGxldGlvbiBtb25pdG9yaW5nIHNlcnZpY2VzIzc3LjEyLjE1LjAwLjAwCi11bnNwc2M3Izc3LjEyLjE2LjAwLjAwI1NvaWwgcG9sbHV0aW9uIzc3LjEyLjAwLjAwLjAwCi11bnNwc2M3Izc3LjEyLjE2LjAxLjAwI1NvaWwgcG9sbHV0aW9uIHByb3RlY3Rpb24gc2VydmljZXMjNzcuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzcuMTIuMTYuMDIuMDAjUG9sbHV0ZWQgc29pbCByZW1vdmFsIHNlcnZpY2VzIzc3LjEyLjE2LjAwLjAwCi11bnNwc2M3Izc3LjEyLjE2LjAzLjAwI1BvbGx1dGVkIHNvaWwgdHJlYXRtZW50IG9yIHJlaGFiaWxpdGF0aW9uIzc3LjEyLjE2LjAwLjAwCi11bnNwc2M3Izc3LjEyLjE2LjA0LjAwI1NvaWwgcG9sbHV0aW9uIGFkdmlzb3J5IHNlcnZpY2VzIzc3LjEyLjE2LjAwLjAwCi11bnNwc2M3Izc3LjEyLjE2LjA1LjAwI1NvaWwgcG9sbHV0aW9uIG1hcHBpbmcjNzcuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzcuMTIuMTYuMDYuMDAjU29pbCBwb2xsdXRpb24gbWVhc3VyZW1lbnQgb3IgbW9uaXRvcmluZyM3Ny4xMi4xNi4wMC4wMAotdW5zcHNjNyM3Ny4xMi4xNi4wNy4wMCNPcmdhbmljIGZlcnRpbGl6ZXIgcG9sbHV0aW9uIGFzc2Vzc21lbnQjNzcuMTIuMTYuMDAuMDAKLXVuc3BzYzcjNzcuMTIuMTYuMDguMDAjUGVzdGljaWRlcyBwb2xsdXRpb24gYXNzZXNzbWVudCM3Ny4xMi4xNi4wMC4wMAotdW5zcHNjNyM3Ny4xMi4xNi4wOS4wMCNOaXRyYXRlcyBwb2xsdXRpb24gYXNzZXNzbWVudCM3Ny4xMi4xNi4wMC4wMAotdW5zcHNjNyM3Ny4xMi4xNi4xMC4wMCNQaG9zcGhhdGVzIHBvbGx1dGlvbiBhc3Nlc3NtZW50Izc3LjEyLjE2LjAwLjAwCi11bnNwc2M3Izc3LjEyLjE3LjAwLjAwI1dhdGVyIHBvbGx1dGlvbiM3Ny4xMi4wMC4wMC4wMAotdW5zcHNjNyM3Ny4xMi4xNy4wMS4wMCNTdXJmYWNlIHdhdGVyIHBvbGx1dGlvbiBtb25pdG9yaW5nIG9yIGNvbnRyb2wgc2VydmljZXMjNzcuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNzcuMTIuMTcuMDIuMDAjU3VyZmFjZSB3YXRlciBwb2xsdXRpb24gcmVoYWJpbGl0YXRpb24gc2VydmljZXMjNzcuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNzcuMTIuMTcuMDMuMDAjU3VyZmFjZSB3YXRlciBwb2xsdXRpb24gcHJvdGVjdGlvbiBzZXJ2aWNlcyM3Ny4xMi4xNy4wMC4wMAotdW5zcHNjNyM3Ny4xMi4xNy4wNC4wMCNTdXJmYWNlIHdhdGVyIHRyZWF0bWVudCBzZXJ2aWNlcyM3Ny4xMi4xNy4wMC4wMAotdW5zcHNjNyM3Ny4xMi4xNy4wNS4wMCNTdXJmYWNlIHdhdGVyIHBvbGx1dGlvbiBkcmFpbmFnZSBzZXJ2aWNlcyM3Ny4xMi4xNy4wMC4wMAotdW5zcHNjNyM3Ny4xMi4xNy4wNi4wMCNUcmFuc2JvdW5kYXJ5IHdhdGVyIHBvbGx1dGlvbiBtYW5hZ2VtZW50IG9yIGNvbnRyb2wgc2VydmljZXMjNzcuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNzcuMTIuMTcuMDcuMDAjR3JvdW5kd2F0ZXIgcG9sbHV0aW9uIG1vbml0b3Jpbmcgb3IgY29udHJvbCBzZXJ2aWNlcyM3Ny4xMi4xNy4wMC4wMAotdW5zcHNjNyM3Ny4xMi4xNy4wOC4wMCNHcm91bmR3YXRlciBwb2xsdXRpb24gZHJhaW5hZ2Ugc2VydmljZXMjNzcuMTIuMTcuMDAuMDAKLXVuc3BzYzcjNzcuMTIuMTcuMDkuMDAjR3JvdW5kd2F0ZXIgcG9sbHV0aW9uIHRyZWF0bWVudCBvciByZWhhYmlsaXRhdGlvbiM3Ny4xMi4xNy4wMC4wMAotdW5zcHNjNyM3Ny4xMy4wMC4wMC4wMCNQb2xsdXRhbnRzIHRyYWNraW5nIGFuZCBtb25pdG9yaW5nIGFuZCByZWhhYmlsaXRhdGlvbiBzZXJ2aWNlcyM3Ny4wMC4wMC4wMC4wMAotdW5zcHNjNyM3Ny4xMy4xNS4wMC4wMCNPaWwgcG9sbHV0aW9uIzc3LjEzLjAwLjAwLjAwCi11bnNwc2M3Izc3LjEzLjE1LjAxLjAwI09pbCBzcGlsbGFnZSBtb25pdG9yaW5nIHNlcnZpY2VzIzc3LjEzLjE1LjAwLjAwCi11bnNwc2M3Izc3LjEzLjE1LjAyLjAwI09pbCBzcGlsbGFnZSBjb250cm9sIHNlcnZpY2VzIzc3LjEzLjE1LjAwLjAwCi11bnNwc2M3Izc3LjEzLjE1LjAzLjAwI09pbCBzcGlsbGFnZSByZWhhYmlsaXRhdGlvbiBzZXJ2aWNlcyM3Ny4xMy4xNS4wMC4wMAotdW5zcHNjNyM3Ny4xMy4xNi4wMC4wMCNOb2lzZSBwb2xsdXRpb24jNzcuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNzcuMTMuMTYuMDEuMDAjTm9pc2UgY29udHJvbCBzZXJ2aWNlcyM3Ny4xMy4xNi4wMC4wMAotdW5zcHNjNyM3Ny4xMy4xNi4wMi4wMCNOb2lzZSBwb2xsdXRpb24gcHJvdGVjdGlvbiBzZXJ2aWNlcyM3Ny4xMy4xNi4wMC4wMAotdW5zcHNjNyM3Ny4xMy4xNi4wMy4wMCNOb2lzZSBwb2xsdXRpb24gbW9uaXRvcmluZyBzZXJ2aWNlcyM3Ny4xMy4xNi4wMC4wMAotdW5zcHNjNyM3Ny4xMy4xNi4wNC4wMCNOb2lzZSBwb2xsdXRpb24gYWR2aXNvcnkgc2VydmljZXMjNzcuMTMuMTYuMDAuMDAKLXVuc3BzYzcjNzcuMTMuMTcuMDAuMDAjVG94aWMgc3Vic3RhbmNlcyBwb2xsdXRpb24jNzcuMTMuMDAuMDAuMDAKLXVuc3BzYzcjNzcuMTMuMTcuMDEuMDAjVG94aWMgc3Vic3RhbmNlcyBtb25pdG9yaW5nIHNlcnZpY2VzIzc3LjEzLjE3LjAwLjAwCi11bnNwc2M3Izc3LjEzLjE3LjAyLjAwI1RveGljIHN1YnN0YW5jZXMgcmVoYWJpbGl0YXRpb24gc2VydmljZXMjNzcuMTMuMTcuMDAuMDAKLXVuc3BzYzcjNzguMDAuMDAuMDAuMDAjVHJhbnNwb3J0YXRpb24gYW5kIFN0b3JhZ2UgYW5kIE1haWwgU2VydmljZXMjNzguMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzguMTAuMDAuMDAuMDAjTWFpbCBhbmQgY2FyZ28gdHJhbnNwb3J0Izc4LjAwLjAwLjAwLjAwCi11bnNwc2M3Izc4LjEwLjE1LjAwLjAwI0FpciBjYXJnbyB0cmFuc3BvcnQjNzguMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzguMTAuMTUuMDEuMDAjRG9tZXN0aWMgYWlyIGNhcmdvIHRyYW5wb3NydCM3OC4xMC4xNS4wMC4wMAotdW5zcHNjNyM3OC4xMC4xNS4wMi4wMCNJbnRlcm5hdGlvbmFsIGFpciBjYXJnbyB0cmFuc3BvcnQjNzguMTAuMTUuMDAuMDAKLXVuc3BzYzcjNzguMTAuMTUuMDMuMDAjQXJtb3JlZCBhaXIgdHJhbnNwb3J0Izc4LjEwLjE1LjAwLjAwCi11bnNwc2M3Izc4LjEwLjE2LjAwLjAwI1JhaWwgY2FyZ28gdHJhbnNwb3J0Izc4LjEwLjAwLjAwLjAwCi11bnNwc2M3Izc4LjEwLjE2LjAxLjAwI0JveGNhciB0cmFuc3BvcnQgc2VydmljZXMjNzguMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzguMTAuMTYuMDIuMDAjQnVsayBjYXJnbyByYWlsIHRyYXNucG9ydCBzZXJ2aWNlcyM3OC4xMC4xNi4wMC4wMAotdW5zcHNjNyM3OC4xMC4xNi4wMy4wMCNMaXZlc3RvY2sgcmFpbCB0cmFuc3BvcnQjNzguMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzguMTAuMTYuMDQuMDAjVmVoaWNsZSB0cmFuc3BvcnQgc2VydmljZXMjNzguMTAuMTYuMDAuMDAKLXVuc3BzYzcjNzguMTAuMTcuMDAuMDAjTWFyaW5lIGNhcmdvIHRyYW5zcG9ydCM3OC4xMC4wMC4wMC4wMAotdW5zcHNjNyM3OC4xMC4xNy4wMS4wMCNEb21lc3RpYyB2ZXNzZWwgdHJhbnNwb3J0IHNlcnZpY2VzIzc4LjEwLjE3LjAwLjAwCi11bnNwc2M3Izc4LjEwLjE3LjAyLjAwI0ludGVybmF0aW9uYWwgdmVzc2VsIHRyYW5zcG9ydCBzZXJ2aWNlcyM3OC4xMC4xNy4wMC4wMAotdW5zcHNjNyM3OC4xMC4xNy4wMy4wMCNEb21lc3RpYyBiYXJnZSB0cmFuc3BvcnQgc2VydmljZXMjNzguMTAuMTcuMDAuMDAKLXVuc3BzYzcjNzguMTAuMTcuMDQuMDAjSW50ZXJuYXRpb25hbCBiYXJnZSB0cmFuc3BvcnQgc2VydmljZXMjNzguMTAuMTcuMDAuMDAKLXVuc3BzYzcjNzguMTAuMTcuMDUuMDAjQXJtb3JlZCBtYXJpbmUgdHJhbnNwb3J0Izc4LjEwLjE3LjAwLjAwCi11bnNwc2M3Izc4LjEwLjE4LjAwLjAwI1JvYWQgY2FyZ28gdHJhbnNwb3J0Izc4LjEwLjAwLjAwLjAwCi11bnNwc2M3Izc4LjEwLjE4LjAxLjAwI0xvY2FsIGFyZWEgdHJ1Y2tpbmcgc2VydmljZXMjNzguMTAuMTguMDAuMDAKLXVuc3BzYzcjNzguMTAuMTguMDIuMDAjUmVnaW9uYWwgb3IgbmF0aW9uYWwgdHJ1Y2tpbmcgc2VydmljZXMjNzguMTAuMTguMDAuMDAKLXVuc3BzYzcjNzguMTAuMTguMDMuMDAjVmVoaWNsZSBjYXJyaWVyIHNlcnZpY2VzIzc4LjEwLjE4LjAwLjAwCi11bnNwc2M3Izc4LjEwLjE4LjA0LjAwI1JlbG9jYXRpb24gc2VydmljZXMjNzguMTAuMTguMDAuMDAKLXVuc3BzYzcjNzguMTAuMTkuMDAuMDAjSW50ZXJtb2RhbCBjYXJnbyB0cmFuc3BvcnQjNzguMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzguMTAuMTkuMDEuMDAjQWlyIHRvIG9jZWFuIHRyYW5zcG9ydGF0aW9uIzc4LjEwLjE5LjAwLjAwCi11bnNwc2M3Izc4LjEwLjE5LjAyLjAwI09jZWFuIHRvIHJhaWwgdHJhbnNwb3J0YXRpb24jNzguMTAuMTkuMDAuMDAKLXVuc3BzYzcjNzguMTAuMTkuMDMuMDAjT2NlYW4gdG8gdHJ1Y2sgdHJhbnNwb3J0YXRpb24jNzguMTAuMTkuMDAuMDAKLXVuc3BzYzcjNzguMTAuMTkuMDQuMDAjQWlyIHRvIHRydWNrIHRyYW5zcG9ydCM3OC4xMC4xOS4wMC4wMAotdW5zcHNjNyM3OC4xMC4xOS4wNS4wMCNSYWlsIHRydWNrIHRyYW5zcG9ydGF0aW9uIzc4LjEwLjE5LjAwLjAwCi11bnNwc2M3Izc4LjEwLjIwLjAwLjAwI1NwYWNlY3JhZnQgY2FyZ28gdHJhbnNwb3J0Izc4LjEwLjAwLjAwLjAwCi11bnNwc2M3Izc4LjEwLjIwLjAxLjAwI1NhdGVsbGl0ZSBsYXVuY2ggc2VydmljZXMjNzguMTAuMjAuMDAuMDAKLXVuc3BzYzcjNzguMTAuMjAuMDIuMDAjRXhwZXJpbWVudGFsIHBheWxvYWQgc2VydmljZXMjNzguMTAuMjAuMDAuMDAKLXVuc3BzYzcjNzguMTAuMjEuMDAuMDAjUGlwZWxpbmUgc2VydmljZXMjNzguMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzguMTAuMjEuMDEuMDAjUGV0cm9sZXVtIHByb2R1Y3RzIHRyYW5zcG9ydCM3OC4xMC4yMS4wMC4wMAotdW5zcHNjNyM3OC4xMC4yMS4wMi4wMCNXYXRlciB0cmFuc3BvcnQjNzguMTAuMjEuMDAuMDAKLXVuc3BzYzcjNzguMTAuMjIuMDAuMDAjUG9zdGFsIGFuZCBzbWFsbCBwYXJjZWwgYW5kIGNvdXJpZXIgc2VydmljZXMjNzguMTAuMDAuMDAuMDAKLXVuc3BzYzcjNzguMTAuMjIuMDEuMDAjTmF0aW9uYWwgcG9zdGFsIGRlbGl2ZXJ5IHNlcnZpY2VzIzc4LjEwLjIyLjAwLjAwCi11bnNwc2M3Izc4LjEwLjIyLjAyLjAwI1Bvc3Qgb2ZmaWNlIGJveCBzZXJ2aWNlcyM3OC4xMC4yMi4wMC4wMAotdW5zcHNjNyM3OC4xMC4yMi4wMy4wMCNNYWlsaW5nIG9yIG1haWwgcGljayB1cCBvciBkZWxpdmVyeSBzZXJ2aWNlcyM3OC4xMC4yMi4wMC4wMAotdW5zcHNjNyM3OC4xMC4yMi4wNC4wMCNMZXR0ZXIgb3Igc21hbGwgcGFyY2VsIHdvcmxkd2lkZSBkZWxpdmVyeSBzZXJ2aWNlcyM3OC4xMC4yMi4wMC4wMAotdW5zcHNjNyM3OC4xMC4yMi4wNS4wMCNMZXR0ZXIgb3Igc21hbGwgcGFyY2VsIGxvY2FsIGRlbGl2ZXJ5IHNlcnZpY2VzIzc4LjEwLjIyLjAwLjAwCi11bnNwc2M3Izc4LjEwLjIyLjA2LjAwI0JpY3ljbGUgb3Igc2Nvb3RlciBtZXNzZW5nZXIgc2VydmNpZXMjNzguMTAuMjIuMDAuMDAKLXVuc3BzYzcjNzguMTEuMDAuMDAuMDAjUGFzc2VuZ2VyIHRyYW5zcG9ydCM3OC4wMC4wMC4wMC4wMAotdW5zcHNjNyM3OC4xMS4xNS4wMC4wMCNBaXIgdHJhbnNwb3J0YXRpb24jNzguMTEuMDAuMDAuMDAKLXVuc3BzYzcjNzguMTEuMTUuMDEuMDAjSGVsaWNvcHRlciBzZXJ2aWNlcyM3OC4xMS4xNS4wMC4wMAotdW5zcHNjNyM3OC4xMS4xNS4wMi4wMCNDb21tZXJjaWFsIGFpcnBsYW5lIHRyYXZlbCM3OC4xMS4xNS4wMC4wMAotdW5zcHNjNyM3OC4xMS4xNS4wMy4wMCNDaGFydGVyZWQgYWlycGxhbmUgdHJhdmVsIzc4LjExLjE1LjAwLjAwCi11bnNwc2M3Izc4LjExLjE2LjAwLjAwI1JhaWx3YXkgdHJhbnNwb3J0YXRpb24jNzguMTEuMDAuMDAuMDAKLXVuc3BzYzcjNzguMTEuMTYuMDEuMDAjTGlnaHQgcmFpbCB2ZWhpY2xlIHRyYW5zcG9ydCAoTFJWKSBzZXJ2aWNlcyM3OC4xMS4xNi4wMC4wMAotdW5zcHNjNyM3OC4xMS4xNi4wMi4wMCNTdWJ3YXkgdHJhbnNwb3J0Izc4LjExLjE2LjAwLjAwCi11bnNwc2M3Izc4LjExLjE2LjAzLjAwI0NvbnRpbmVudGFsIG9yIGludGVyIGNvbnRpbmVudGFsIHJhaWwgc2VydmljZXMjNzguMTEuMTYuMDAuMDAKLXVuc3BzYzcjNzguMTEuMTcuMDAuMDAjTWFyaW5lIHRyYW5zcG9ydGF0aW9uIzc4LjExLjAwLjAwLjAwCi11bnNwc2M3Izc4LjExLjE3LjAxLjAwI1dhdGVyIHRheGlzIzc4LjExLjE3LjAwLjAwCi11bnNwc2M3Izc4LjExLjE3LjAyLjAwI092ZXJuaWdodCBzaGlwIGNydWlzZXMjNzguMTEuMTcuMDAuMDAKLXVuc3BzYzcjNzguMTEuMTcuMDMuMDAjU2lnaHRzZWVpbmcgYm9hdCBleGN1cnNpb25zIzc4LjExLjE3LjAwLjAwCi11bnNwc2M3Izc4LjExLjE4LjAwLjAwI1JvYWQgdHJhbnNwb3J0YXRpb24jNzguMTEuMDAuMDAuMDAKLXVuc3BzYzcjNzguMTEuMTguMDEuMDAjQ2FyIHJlbnRhbCBzZXJ2aWNlcyM3OC4xMS4xOC4wMC4wMAotdW5zcHNjNyM3OC4xMS4xOC4wMi4wMCNTY2hlZHVsZWQgYnVzIHNlcnZpY2VzIzc4LjExLjE4LjAwLjAwCi11bnNwc2M3Izc4LjExLjE4LjAzLjAwI0NoYXJ0ZXJlZCBidXMgc2VydmljZXMjNzguMTEuMTguMDAuMDAKLXVuc3BzYzcjNzguMTEuMTguMDQuMDAjVGF4aWNhYiBzZXJ2aWNlcyM3OC4xMS4xOC4wMC4wMAotdW5zcHNjNyM3OC4xMS4xOC4wNS4wMCNUcmFuc3BvcnRhdGlvbiBtYWludGVuYW5jZSM3OC4xMS4xOC4wMC4wMAotdW5zcHNjNyM3OC4xMS4xOC4wNi4wMCNWZWhpY2xlIHJlbnRhbCBvciBsZWFzaW5nIzc4LjExLjE4LjAwLjAwCi11bnNwc2M3Izc4LjExLjE5LjAwLjAwI1NwYWNlIHRyYW5zcG9ydGF0aW9uIzc4LjExLjAwLjAwLjAwCi11bnNwc2M3Izc4LjExLjE5LjAxLjAwI0V4cGVyaW1lbnRhbCBvciBlZHVjYXRpb25hbCBtaXNzaW9ucyM3OC4xMS4xOS4wMC4wMAotdW5zcHNjNyM3OC4xMi4wMC4wMC4wMCNNYXRlcmlhbCBwYWNraW5nIGFuZCBoYW5kbGluZyM3OC4wMC4wMC4wMC4wMAotdW5zcHNjNyM3OC4xMi4xNS4wMC4wMCNQYWNraW5nIzc4LjEyLjAwLjAwLjAwCi11bnNwc2M3Izc4LjEyLjE1LjAxLjAwI0NvbnRhaW5lcml6YXRpb24gb2YgZ29vZHMjNzguMTIuMTUuMDAuMDAKLXVuc3BzYzcjNzguMTIuMTUuMDIuMDAjQ3JhdGluZyBzZXJ2aWNlcyM3OC4xMi4xNS4wMC4wMAotdW5zcHNjNyM3OC4xMi4xNi4wMC4wMCNNYXRlcmlhbCBoYW5kbGluZyBzZXJ2aWNlcyM3OC4xMi4wMC4wMC4wMAotdW5zcHNjNyM3OC4xMi4xNi4wMS4wMCNGcmVpZ2h0IGxvYWRpbmcgb3IgdW5sb2FkaW5nIzc4LjEyLjE2LjAwLjAwCi11bnNwc2M3Izc4LjEyLjE2LjAyLjAwI1dlaWdoaW5nIHNlcnZpY2VzIzc4LjEyLjE2LjAwLjAwCi11bnNwc2M3Izc4LjEzLjAwLjAwLjAwI1N0b3JhZ2UjNzguMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzguMTMuMTUuMDAuMDAjRmFybSBwcm9kdWN0cyB3YXJlaG91c2luZyM3OC4xMy4wMC4wMC4wMAotdW5zcHNjNyM3OC4xMy4xNS4wMS4wMCNTaWxvIHNlcnZpY2VzIzc4LjEzLjE1LjAwLjAwCi11bnNwc2M3Izc4LjEzLjE1LjAyLjAwI0dyYWluIGVsZXZhdG9yIHNlcnZpY2VzIzc4LjEzLjE1LjAwLjAwCi11bnNwc2M3Izc4LjEzLjE2LjAwLjAwI0dlbmVyYWwgZ29vZHMgc3RvcmFnZSM3OC4xMy4wMC4wMC4wMAotdW5zcHNjNyM3OC4xMy4xNi4wMS4wMCNQYWxsZXRpemVkIGNhcmdvIHN0b3JhZ2UjNzguMTMuMTYuMDAuMDAKLXVuc3BzYzcjNzguMTMuMTYuMDIuMDAjRmlsZSBhcmNoaXZlIHN0b3JhZ2UjNzguMTMuMTYuMDAuMDAKLXVuc3BzYzcjNzguMTMuMTcuMDAuMDAjQnVsayBzdG9yYWdlIzc4LjEzLjAwLjAwLjAwCi11bnNwc2M3Izc4LjEzLjE3LjAxLjAwI0luIGdyb3VuZCBzdG9yYWdlIHNlcnZpY2VzIzc4LjEzLjE3LjAwLjAwCi11bnNwc2M3Izc4LjEzLjE4LjAwLjAwI1NwZWNpYWxpemVkIHdhcmVob3VzaW5nIGFuZCBzdG9yYWdlIzc4LjEzLjAwLjAwLjAwCi11bnNwc2M3Izc4LjEzLjE4LjAxLjAwI1JlZnJpZ2VyYXRlZCBzdG9yYWdlIzc4LjEzLjE4LjAwLjAwCi11bnNwc2M3Izc4LjEzLjE4LjAyLjAwI0N1c3RvbXMgYm9uZGVkIHN0b3JhZ2Ugc2VydmljZXMjNzguMTMuMTguMDAuMDAKLXVuc3BzYzcjNzguMTMuMTguMDMuMDAjSGF6YXJkb3VzIG1hdGVyaWFscyBzdG9yYWdlIzc4LjEzLjE4LjAwLjAwCi11bnNwc2M3Izc4LjEzLjE4LjA0LjAwI0RvY3VtZW50IHN0b3JhZ2Ugc2VydmljZXMjNzguMTMuMTguMDAuMDAKLXVuc3BzYzcjNzguMTQuMDAuMDAuMDAjVHJhbnNwb3J0IG9wZXJhdGlvbnMjNzguMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzguMTQuMTUuMDAuMDAjVHJhbnNwb3J0IGFycmFuZ2VtZW50cyM3OC4xNC4wMC4wMC4wMAotdW5zcHNjNyM3OC4xNC4xNS4wMS4wMCNGcmVpZ2h0IGZvcndhcmRlcnMgc2VydmljZXMjNzguMTQuMTUuMDAuMDAKLXVuc3BzYzcjNzguMTQuMTUuMDIuMDAjQ3VzdG9tcyBicm9rZXJhZ2Ugc2VydmljZXMjNzguMTQuMTUuMDAuMDAKLXVuc3BzYzcjNzguMTQuMTUuMDMuMDAjVHJhbnNwb3J0YXRpb24gaW5kdXN0cnkgdGFyaWZmIGNvbXBhcmlzb24gb3IgZnJlaWdodCBhdWRpdCBzZXJ2aWNlcyM3OC4xNC4xNS4wMC4wMAotdW5zcHNjNyM3OC4xNC4xNi4wMC4wMCNJbnNwZWN0aW9uIzc4LjE0LjAwLjAwLjAwCi11bnNwc2M3Izc4LjE0LjE2LjAxLjAwI1BhY2tpbmcgaW5zcGVjdGlvbiBzZXJ2aWNlcyM3OC4xNC4xNi4wMC4wMAotdW5zcHNjNyM3OC4xNC4xNi4wMi4wMCNDYXJnbyBzdXJ2ZXkgc2VydmljZXMjNzguMTQuMTYuMDAuMDAKLXVuc3BzYzcjNzguMTQuMTYuMDMuMDAjUGVzdCBjb250cm9sIGluc3BlY3Rpb25zIzc4LjE0LjE2LjAwLjAwCi11bnNwc2M3Izc4LjE0LjE3LjAwLjAwI05hdmlnYXRpb25hbCBzZXJ2aWNlcyM3OC4xNC4wMC4wMC4wMAotdW5zcHNjNyM3OC4xNC4xNy4wMS4wMCNUdWdib2F0IHNlcnZpY2VzIzc4LjE0LjE3LjAwLjAwCi11bnNwc2M3Izc4LjE0LjE3LjAyLjAwI0RyYXdicmlkZ2Ugb3BlcmF0aW9ucyM3OC4xNC4xNy4wMC4wMAotdW5zcHNjNyM3OC4xNC4xOC4wMC4wMCNUZXJtaW5hbCBzZXJ2aWNlcyM3OC4xNC4wMC4wMC4wMAotdW5zcHNjNyM3OC4xNC4xOC4wMS4wMCNTdGV2ZWRvcmluZyBzZXJ2aWNlcyM3OC4xNC4xOC4wMC4wMAotdW5zcHNjNyM3OC4xNC4xOC4wMi4wMCNWZXNzZWwgZG9ja2luZyBzZXJ2aWNlcyM3OC4xNC4xOC4wMC4wMAotdW5zcHNjNyM3OC4xNC4xOC4wMy4wMCNWZXNzZWwgc3RvcmVzIHNlcnZpY2VzIzc4LjE0LjE4LjAwLjAwCi11bnNwc2M3Izc4LjE0LjE4LjA0LjAwI1Bhcmtpbmcgc3RydWN0dXJlcyM3OC4xNC4xOC4wMC4wMAotdW5zcHNjNyM3OC4xNS4wMC4wMC4wMCNUcmFuc3BvcnQgaW5kdXN0cnkgc3VwcG9ydCBhbmQgbWFpbnRlbmFuY2UgYW5kIHJlcGFpciBzZXJ2aWNlcyM3OC4wMC4wMC4wMC4wMAotdW5zcHNjNyM3OC4xNS4wMS4wMC4wMCNQYW5lbCBhbmQgcGFpbnQgc2VydmljZXMjNzguMTUuMDAuMDAuMDAKLXVuc3BzYzcjNzguMTUuMDEuMDEuMDAjUGFuZWxiZWF0aW5nIHNlcnZpY2VzIzc4LjE1LjAxLjAwLjAwCi11bnNwc2M3Izc4LjE1LjAyLjAwLjAwI1RyYW5zcG9ydCBmdWVsbGluZyBhbmQgdmVoaWNsZSBzdG9yYWdlIGFuZCBzdXBwb3J0IHNlcnZpY2VzIzc4LjE1LjAwLjAwLjAwCi11bnNwc2M3Izc4LjE1LjAyLjAxLjAwI0Z1ZWxsaW5nIG9mIHZlaGljbGVzIzc4LjE1LjAyLjAwLjAwCi11bnNwc2M3Izc4LjE1LjAyLjAyLjAwI1RyYW5zcG9ydGF0aW9uIHN0b3JhZ2UjNzguMTUuMDIuMDAuMDAKLXVuc3BzYzcjNzguMTYuMDAuMDAuMDAjUGFuZWwgYW5kIHBhaW50IHNlcnZpY2VzIzc4LjAwLjAwLjAwLjAwCi11bnNwc2M3Izc4LjE3LjAwLjAwLjAwI1BhbmVsYmVhdGluZyBzZXJ2aWNlcyM3OC4wMC4wMC4wMC4wMAotdW5zcHNjNyM3OC4xOC4wMC4wMC4wMCNUcmFuc3BvcnRhdGlvbiBvciB2ZWhpY2xlIHJlcGFpciBzZXJ2aWNlcyM3OC4wMC4wMC4wMC4wMAotdW5zcHNjNyM3OC4xOC4wMS4wMC4wMCNWZWhpY2xlIHJlcGFpciBzZXJ2aWNlcyM3OC4xOC4wMC4wMC4wMAotdW5zcHNjNyM3OC4xOC4wMS4wMS4wMCNWZWhpY2xlIGJvZHkgcmVwYWlyIG9yIHBhaW50aW5nIHNlcnZpY2VzIzc4LjE4LjAxLjAwLjAwCi11bnNwc2M3Izc4LjE4LjAxLjAyLjAwI1RyYW5zbWlzc2lvbiByZXBhaXIjNzguMTguMDEuMDAuMDAKLXVuc3BzYzcjNzguMTkuMDAuMDAuMDAjVmVoaWNsZSByZXBhaXIgc2VydmljZXMjNzguMDAuMDAuMDAuMDAKLXVuc3BzYzcjNzguMTkuMTEuMDAuMDAjVmVoaWNsZSBib2R5IHJlcGFpciBvciBwYWludGluZyBzZXJ2aWNlcyM3OC4xOS4wMC4wMC4wMAotdW5zcHNjNyM3OC4xOS4xMi4wMC4wMCNUcmFuc21pc3Npb24gcmVwYWlyIzc4LjE5LjAwLjAwLjAwCi11bnNwc2M3IzgwLjAwLjAwLjAwLjAwI01hbmFnZW1lbnQgYW5kIEJ1c2luZXNzIFByb2Zlc3Npb25hbHMgYW5kIEFkbWluaXN0cmF0aXZlIFNlcnZpY2VzIzgwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzgwLjEwLjAwLjAwLjAwI01hbmFnZW1lbnQgYWR2aXNvcnkgc2VydmljZXMjODAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODAuMTAuMTUuMDAuMDAjQnVzaW5lc3MgYW5kIGNvcnBvcmF0ZSBtYW5hZ2VtZW50IzgwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzgwLjEwLjE1LjAxLjAwI05ldyBidXNpbmVzcyBzdGFydCB1cCBjb25zdWx0YXRpb24gc2VydmljZXMjODAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODAuMTAuMTUuMDIuMDAjQ29ycG9yYXRlIG1lcmdlcnMgY29uc3VsdGF0aW9uIHNlcnZpY2VzIzgwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzgwLjEwLjE1LjAzLjAwI0NvcnBvcmF0ZSBkaXZlc3RpdHVyZSBjb25zdWx0YXRpb24gc2VydmljZXMjODAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODAuMTAuMTUuMDQuMDAjU3RyYXRlZ2ljIHBsYW5uaW5nIGNvbnN1bHRhdGlvbiBzZXJ2aWNlcyM4MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM4MC4xMC4xNS4wNS4wMCNDb3Jwb3JhdGUgb2JqZWN0aXZlcyBvciBwb2xpY3kgZGV2ZWxvcG1lbnQjODAuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODAuMTAuMTUuMDYuMDAjT3JnYW5pemF0aW9uYWwgc3RydWN0dXJlIGNvbnN1bHRhdGlvbiM4MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM4MC4xMC4xNS4wNy4wMCNJbmZvcm1hdGlvbiB0ZWNobm9sb2d5IGNvbnN1bHRhdGlvbiBzZXJ2aWNlcyM4MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM4MC4xMC4xNi4wMC4wMCNQcm9qZWN0IG1hbmFnZW1lbnQjODAuMTAuMDAuMDAuMDAKLXVuc3BzYzcjODAuMTAuMTYuMDEuMDAjRmVhc2liaWxpdHkgc3R1ZGllcyBvciBzY3JlZW5pbmcgb2YgcHJvamVjdCBpZGVhcyM4MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM4MC4xMC4xNi4wMi4wMCNSZWdpb25hbCBvciBsb2NhdGlvbiBzdHVkaWVzIGZvciBwcm9qZWN0cyM4MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM4MC4xMC4xNi4wMy4wMCNFY29ub21pYyBvciBmaW5hbmNpYWwgZXZhbHVhdGlvbiBvZiBwcm9qZWN0cyM4MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM4MC4xMC4xNi4wNC4wMCNQcm9qZWN0IGFkbWluaXN0cmF0aW9uIG9yIHBsYW5uaW5nIzgwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzgwLjEwLjE3LjAwLjAwI0luZHVzdHJpYWwgbWFuYWdlbWVudCM4MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM4MC4xMC4xNy4wMS4wMCNGYWN0b3J5IG1hbmFnZW1lbnQgc2VydmljZXMjODAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjODAuMTAuMTcuMDIuMDAjUHJvZHVjdGl2aXR5IG9yIGVmZmljaWVuY3kgc3R1ZGllcyBvciBpbXBsZW1lbnRhdGlvbiM4MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM4MC4xMC4xNy4wMy4wMCNTcGVjaWZpY2F0aW9uIHN0YW5kYXJkaXphdGlvbiBzZXJ2aWNlcyM4MC4xMC4xNy4wMC4wMAotdW5zcHNjNyM4MC4xMC4xNy4wNC4wMCNTdXBwbHkgY2hhaW4gYW5hbHlzaXMgb3IgcmUgZW5naW5lZXJpbmcgc2VydmljZXMjODAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjODAuMTAuMTcuMDUuMDAjQ28gb3BlcmF0aXZlIG9yIGNvbnNvcnRpdW0gc2VydmljZXMjODAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjODAuMTAuMTcuMDYuMDAjUHJvZmVzc2lvbmFsIHByb2N1cmVtZW50IHNlcnZpY2VzIzgwLjEwLjE3LjAwLjAwCi11bnNwc2M3IzgwLjExLjAwLjAwLjAwI0h1bWFuIHJlc291cmNlcyBzZXJ2aWNlcyM4MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM4MC4xMS4xNS4wMC4wMCNIdW1hbiByZXNvdXJjZSBkZXZlbG9wbWVudCM4MC4xMS4wMC4wMC4wMAotdW5zcHNjNyM4MC4xMS4xNS4wMS4wMCNNYW5hZ2VtZW50IGRldmVsb3BtZW50IzgwLjExLjE1LjAwLjAwCi11bnNwc2M3IzgwLjExLjE1LjAyLjAwI0NvbXBlbnNhdGlvbiBvciBiZW5lZml0cyBwbGFubmluZyM4MC4xMS4xNS4wMC4wMAotdW5zcHNjNyM4MC4xMS4xNS4wMy4wMCNMYWJvciBvciB1bmlvbiByZWxhdGlvbnMjODAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODAuMTEuMTUuMDQuMDAjTGFib3IgdHJhaW5pbmcgb3IgZGV2ZWxvcG1lbnQjODAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODAuMTEuMTUuMDUuMDAjSHVtYW4gcmVzb3VyY2VzIHByb2R1Y3Rpdml0eSBhdWRpdHMjODAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODAuMTEuMTUuMDYuMDAjUGVyc29ubmVsIHJlbG9jYXRpb24jODAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODAuMTEuMTYuMDAuMDAjVGVtcG9yYXJ5IHBlcnNvbm5lbCBzZXJ2aWNlcyM4MC4xMS4wMC4wMC4wMAotdW5zcHNjNyM4MC4xMS4xNi4wMS4wMCNUZW1wb3JhcnkgY2xlcmljYWwgb3IgYWRtaW5zdHJhdGl2ZSBhc3Npc3RhbmNlIzgwLjExLjE2LjAwLjAwCi11bnNwc2M3IzgwLjExLjE2LjAyLjAwI1RlbXBvcmFyeSBtYXJrZXRpbmcgc3RhZmYgbmVlZHMjODAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTEuMTYuMDMuMDAjVGVtcG9yYXJ5IHByb2R1Y3Rpb24gc3RhZmZpbmcgbmVlZHMjODAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTEuMTYuMDQuMDAjVGVtcG9yYXJ5IHRlY2huaWNpYW4gc3RhZmZpbmcgbmVlZHMjODAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTEuMTYuMDUuMDAjVGVtcG9yYXJ5IGZpbmFuY2lhbCBzdGFmZmluZyBuZWVkcyM4MC4xMS4xNi4wMC4wMAotdW5zcHNjNyM4MC4xMS4xNi4wNi4wMCNUZW1wb3JhcnkgbWVkaWNhbCBzdGFmZmluZyBuZWVkcyM4MC4xMS4xNi4wMC4wMAotdW5zcHNjNyM4MC4xMS4xNi4wNy4wMCNUZW1wb3JhcnkgbGVnYWwgc3RhZmZpbmcgbmVlZHMjODAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTEuMTYuMDguMDAjVGVtcG9yYXJ5IGluZm9ybWF0aW9uIHRlY2hub2xvZ3kgc29mdHdhcmUgZGV2ZWxvcGVycyM4MC4xMS4xNi4wMC4wMAotdW5zcHNjNyM4MC4xMS4xNi4wOS4wMCNUZW1wb3JhcnkgaW5mb3JtYXRpb24gdGVjaG5vbG9neSBzeXN0ZW1zIG9yIGRhdGFiYXNlIGFkbWluaXN0cmF0b3JzIzgwLjExLjE2LjAwLjAwCi11bnNwc2M3IzgwLjExLjE2LjEwLjAwI1RlbXBvcmFyeSBpbmZvcm1hdGlvbiB0ZWNobm9sb2d5IG5ldHdvcmtpbmcgc3BlY2lhbGlzdHMjODAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTEuMTYuMTEuMDAjVGVtcG9yYXJ5IHdhcmVob3VzZSBzdGFmZiM4MC4xMS4xNi4wMC4wMAotdW5zcHNjNyM4MC4xMS4xNi4xMi4wMCNUZW1wb3JhcnkgZHJpdmVycyM4MC4xMS4xNi4wMC4wMAotdW5zcHNjNyM4MC4xMS4xNi4xMy4wMCNUZW1wb3JhcnkgbWFudWFsIGxhYm9yIzgwLjExLjE2LjAwLjAwCi11bnNwc2M3IzgwLjExLjE2LjE0LjAwI1RlbXBvcmFyeSBwcm9mZXNzaW9uYWwgc3RhZmYjODAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTEuMTYuMTUuMDAjVGVtcG9yYXJ5IG1hY2hpbmlzdCBwZXJzb25uZWwjODAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTEuMTcuMDAuMDAjUGVyc29ubmVsIHJlY3J1aXRtZW50IzgwLjExLjAwLjAwLjAwCi11bnNwc2M3IzgwLjExLjE3LjAxLjAwI1N0YWZmIHJlY3J1aXRpbmcgc2VydmljZXMjODAuMTEuMTcuMDAuMDAKLXVuc3BzYzcjODAuMTEuMTcuMDIuMDAjUmVmZXJlbmNlIG9yIGJhY2tncm91bmQgY2hlY2sgc2VydmljZXMjODAuMTEuMTcuMDAuMDAKLXVuc3BzYzcjODAuMTEuMTcuMDMuMDAjUmVzdW1lIG9yIGN1cnJpY3VsdW0gdml0YWUgc2NyZWVuaW5nIHNlcnZpY2VzIzgwLjExLjE3LjAwLjAwCi11bnNwc2M3IzgwLjExLjE4LjAwLjAwI0luZm9ybWF0aW9uIHRlY2hub2xvZ3kgY29udHJhY3RvcnMjODAuMTEuMDAuMDAuMDAKLXVuc3BzYzcjODAuMTEuMTguMDEuMDAjVGVtcG9yYXJ5IGluZm9ybWF0aW9uIHRlY2hub2xvZ3kgY29udHJhY3RvcnMjODAuMTEuMTguMDAuMDAKLXVuc3BzYzcjODAuMTIuMDAuMDAuMDAjTGVnYWwgc2VydmljZXMjODAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODAuMTIuMTUuMDAuMDAjQ3JpbWluYWwgbGF3IHNlcnZpY2VzIzgwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzgwLjEyLjE1LjAxLjAwI0p1dmVuaWxlIGp1c3RpY2UgbGF3IHNlcnZpY2VzIzgwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzgwLjEyLjE1LjAyLjAwI0FwcGVsbGF0ZSBwcm9jZWR1cmUgc2VydmljZXMjODAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjODAuMTIuMTUuMDMuMDAjRGVmZW5zZSBvciBjcmltaW5hbCBsYXcgc2VydmljZXMjODAuMTIuMTUuMDAuMDAKLXVuc3BzYzcjODAuMTIuMTYuMDAuMDAjQnVzaW5lc3MgbGF3IHNlcnZpY2VzIzgwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzgwLjEyLjE2LjAxLjAwI0dvdmVybm1lbnQgYW50aXRydXN0IG9yIHJlZ3VsYXRpb25zIGxhdyBzZXJ2aWNlcyM4MC4xMi4xNi4wMC4wMAotdW5zcHNjNyM4MC4xMi4xNi4wMi4wMCNCYW5rcnVwdGN5IGxhdyBzZXJ2aWNlcyM4MC4xMi4xNi4wMC4wMAotdW5zcHNjNyM4MC4xMi4xNi4wMy4wMCNQYXJ0bmVyc2hpcCBsYXcjODAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTIuMTYuMDQuMDAjUGF0ZW50IG9yIHRyYWRlbWFyayBvciBjb3B5cmlnaHQgbGF3IzgwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzgwLjEyLjE2LjA1LjAwI0xpcXVpZGF0aW9uIGxhdyBzZXJ2aWNlcyM4MC4xMi4xNi4wMC4wMAotdW5zcHNjNyM4MC4xMi4xNi4wNi4wMCNSZWFsIGVzdGF0ZSBsYXcjODAuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTIuMTYuMDcuMDAjVGF4YXRpb24gbGF3IzgwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzgwLjEyLjE2LjA4LjAwI01lcmdlcnMgb3IgYWNxdWlzaXRpb25zIGxhdyM4MC4xMi4xNi4wMC4wMAotdW5zcHNjNyM4MC4xMi4xNi4wOS4wMCNMZWdhbCByZXNlYXJjaCBzZXJ2aWNlcyM4MC4xMi4xNi4wMC4wMAotdW5zcHNjNyM4MC4xMi4xNi4xMC4wMCNEZWJ0IGNvbGxlY3Rpb24gbGF3IHNlcnZpY2VzIzgwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzgwLjEyLjE3LjAwLjAwI0NpdmlsIGxpYWJpbGl0eSBzZXJ2aWNlcyM4MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM4MC4xMi4xNy4wMS4wMCNNYWxwcmFjdGljZSBvciBuZWdsaWdlbmNlIGxhdyBzZXJ2aWNlcyM4MC4xMi4xNy4wMC4wMAotdW5zcHNjNyM4MC4xMi4xNy4wMi4wMCNQZXJzb25hbCBpbmp1cnkgbGF3IHNlcnZpY2VzIzgwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzgwLjEyLjE3LjAzLjAwI1Byb3BlcnR5IGxhdyBzZXJ2aWNlcyM4MC4xMi4xNy4wMC4wMAotdW5zcHNjNyM4MC4xMi4xNy4wNC4wMCNDb250cmFjdCBsYXcgc2VydmljZXMjODAuMTIuMTcuMDAuMDAKLXVuc3BzYzcjODAuMTIuMTguMDAuMDAjRmFtaWx5IGxhdyBzZXJ2aWNlcyM4MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM4MC4xMi4xOC4wMS4wMCNEaXZvcmNlIGxhdyBzZXJ2aWNlcyM4MC4xMi4xOC4wMC4wMAotdW5zcHNjNyM4MC4xMi4xOC4wMi4wMCNBZG9wdGlvbiBsYXcgc2VydmljZXMjODAuMTIuMTguMDAuMDAKLXVuc3BzYzcjODAuMTIuMTguMDMuMDAjSW1taWdyYXRpb24gb3IgbmF0dXJhbGl6YXRpb24gbGF3IzgwLjEyLjE4LjAwLjAwCi11bnNwc2M3IzgwLjEyLjE4LjA0LjAwI0d1YXJkaWFuc2hpcCBvciBjdXN0b2R5IGxhdyBzZXJ2aWNlcyM4MC4xMi4xOC4wMC4wMAotdW5zcHNjNyM4MC4xMy4wMC4wMC4wMCNSZWFsIGVzdGF0ZSBzZXJ2aWNlcyM4MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM4MC4xMy4xNS4wMC4wMCNMZWFzZSBhbmQgcmVudGFsIG9mIHByb3BlcnR5IG9yIGJ1aWxkaW5nIzgwLjEzLjAwLjAwLjAwCi11bnNwc2M3IzgwLjEzLjE1LjAxLjAwI1Jlc2lkZW50aWFsIHJlbnRhbCM4MC4xMy4xNS4wMC4wMAotdW5zcHNjNyM4MC4xMy4xNS4wMi4wMCNDb21tZXJjaWFsIG9yIGluZHVzdHJpYWwgZmFjaWxpdHkgcmVudGFsIzgwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzgwLjEzLjE1LjAzLjAwI0xhbmQgbGVhc2VzIzgwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzgwLjEzLjE2LjAwLjAwI1NhbGUgb2YgcHJvcGVydHkgYW5kIGJ1aWxkaW5nIzgwLjEzLjAwLjAwLjAwCi11bnNwc2M3IzgwLjEzLjE2LjAxLjAwI1JlYWwgZXN0YXRlIGJyb2tlcnMgb3IgYWdlbnRzIzgwLjEzLjE2LjAwLjAwCi11bnNwc2M3IzgwLjEzLjE2LjAyLjAwI1JlYWwgZXN0YXRlIGF1Y3Rpb24jODAuMTMuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTMuMTYuMDMuMDAjU2FsZSBvZiByZXNpZGVudGlhbCBsYW5kIzgwLjEzLjE2LjAwLjAwCi11bnNwc2M3IzgwLjEzLjE2LjA0LjAwI1NhbGUgb2YgY29tbWVyY2lhbCBvciBpbmR1c3RyaWFsIGxhbmQjODAuMTMuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTMuMTYuMDUuMDAjU2FsZSBvZiBjb21tZXJjaWFsIGJ1aWxkaW5nIzgwLjEzLjE2LjAwLjAwCi11bnNwc2M3IzgwLjEzLjE3LjAwLjAwI0VzY3JvdyBhbmQgdGl0bGUgc2VydmljZXMjODAuMTMuMDAuMDAuMDAKLXVuc3BzYzcjODAuMTMuMTcuMDEuMDAjVGl0bGUgcmVjb252ZXlhbmNlIHNlcnZpY2VzIzgwLjEzLjE3LjAwLjAwCi11bnNwc2M3IzgwLjEzLjE3LjAyLjAwI1RpdGxlIHNlYXJjaCBzZXJ2aWNlcyM4MC4xMy4xNy4wMC4wMAotdW5zcHNjNyM4MC4xMy4xNy4wMy4wMCNFc2Nyb3cgYWNjb3VudCBzZXJ2aWNlcyM4MC4xMy4xNy4wMC4wMAotdW5zcHNjNyM4MC4xMy4xOC4wMC4wMCNSZWFsIGVzdGF0ZSBtYW5hZ2VtZW50IHNlcnZpY2VzIzgwLjEzLjAwLjAwLjAwCi11bnNwc2M3IzgwLjEzLjE4LjAxLjAwI1Byb3BlcnR5IG1hbmFnZW1lbnQjODAuMTMuMTguMDAuMDAKLXVuc3BzYzcjODAuMTMuMTguMDIuMDAjUmVhbCBlc3RhdGUgYXBwcmFpc2FsIHNlcnZpY2VzIzgwLjEzLjE4LjAwLjAwCi11bnNwc2M3IzgwLjEzLjE4LjAzLjAwI1JlYWwgZXN0YXRlIGxpc3Rpbmcgc2VydmljZXMjODAuMTMuMTguMDAuMDAKLXVuc3BzYzcjODAuMTQuMDAuMDAuMDAjTWFya2V0aW5nIGFuZCBkaXN0cmlidXRpb24jODAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODAuMTQuMTUuMDAuMDAjTWFya2V0IHJlc2VhcmNoIzgwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzgwLjE0LjE1LjAxLjAwI01hcmtldGluZyBhbmFseXNpcyM4MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM4MC4xNC4xNS4wMi4wMCNEaXN0cmlidXRpdmUgb3Igc2VydmljZSB0cmFkZSBzdGF0aXN0aWNzIzgwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzgwLjE0LjE1LjAzLjAwI0NvbW1vZGl0eSBwcmljZSBmb3JlY2FzdGluZyM4MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM4MC4xNC4xNS4wNC4wMCNQcmVwYXJhdGlvbiBvZiBjb21tb2RpdHkgbWFya2V0IHN1cnZleXMjODAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjODAuMTQuMTUuMDUuMDAjTWFya2V0aW5nIHBsYW5zIzgwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzgwLjE0LjE1LjA2LjAwI0ludGVybmV0IGJhc2VkIG1hcmtldCByZXNlYXJjaCM4MC4xNC4xNS4wMC4wMAotdW5zcHNjNyM4MC4xNC4xNi4wMC4wMCNTYWxlcyBhbmQgYnVzaW5lc3MgcHJvbW90aW9uIGFjdGl2aXRpZXMjODAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjODAuMTQuMTYuMDEuMDAjU2FsZXMgcHJvbW90aW9uIHNlcnZpY2VzIzgwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzgwLjE0LjE2LjAyLjAwI1B1YmxpYyByZWxhdGlvbiBzZXJ2aWNlcyM4MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM4MC4xNC4xNi4wMy4wMCNUZWxlbWFya2V0aW5nIzgwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzgwLjE0LjE2LjA0LjAwI0JyYW5kaW5nIG9mIHByb2R1Y3QgbmFtaW5nIHNlcnZpY2VzIzgwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzgwLjE0LjE2LjA1LjAwI1Byb21vdGlvbmFsIG1lcmNoYW5kaXNlIzgwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzgwLjE0LjE2LjA2LjAwI0RpcmVjdCBtYXJrZXRpbmcgZnVsZmlsbG1lbnQjODAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTQuMTYuMDcuMDAjRXZlbnRzIG1hbmFnZW1lbnQjODAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTQuMTYuMDguMDAjTGV0dGVyIHNob3Agc2VydmljZXMjODAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTQuMTYuMDkuMDAjU3BvbnNvcnNoaXAgb2YgZXZlbnQgb3IgY2VsZWJyaXR5IzgwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzgwLjE0LjE2LjEwLjAwI0Nsb3NlIG91dHMjODAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTQuMTcuMDAuMDAjRGlzdHJpYnV0aW9uIzgwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzgwLjE0LjE3LjAxLjAwI0RpcmVjdCBzYWxlcyBzZXJ2aWNlcyM4MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM4MC4xNC4xNy4wMi4wMCNXaG9sZXNhbGUgZGlzdHJpYnV0aW9uIHNlcnZpY2VzIzgwLjE0LjE3LjAwLjAwCi11bnNwc2M3IzgwLjE0LjE3LjAzLjAwI1JldGFpbCBkaXN0cmlidXRpb24gc2VydmljZXMjODAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjODAuMTQuMTcuMDQuMDAjRnJhbmNoaXNlIG9wZXJhdGlvbnMjODAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjODAuMTQuMTcuMDUuMDAjQXVjdGlvbiBzZXJ2aWNlcyM4MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM4MC4xNC4xOC4wMC4wMCNNYWlsaW5nIHNlcnZpY2VzIzgwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzgwLjE0LjE4LjAxLjAwI01haWxpbmcgbGlzdCBjb21waWxhdGlvbiBzZXJ2aWNlcyM4MC4xNC4xOC4wMC4wMAotdW5zcHNjNyM4MC4xNC4xOC4wMi4wMCNNYWlsaW5nIGxpc3QgbWFuYWdlbWVudCBzZXJ2aWNlIzgwLjE0LjE4LjAwLjAwCi11bnNwc2M3IzgwLjE0LjE4LjAzLjAwI0FkZHJlc3Npbmcgc2VydmljZSM4MC4xNC4xOC4wMC4wMAotdW5zcHNjNyM4MC4xNS4wMC4wMC4wMCNUcmFkZSBwb2xpY3kgYW5kIHNlcnZpY2VzIzgwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzgwLjE1LjE1LjAwLjAwI1RyYWRlIGZhY2lsaXRhdGlvbiM4MC4xNS4wMC4wMC4wMAotdW5zcHNjNyM4MC4xNS4xNS4wMS4wMCNDb21tb2RpdHkgcG9saWN5IG9yIHByb2plY3Rpb25zIHNlcnZpY2VzIzgwLjE1LjE1LjAwLjAwCi11bnNwc2M3IzgwLjE1LjE1LjAyLjAwI1RyYWRlIGV4cGFuc2lvbiM4MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM4MC4xNS4xNS4wMy4wMCNUcmFkZSBpbmZvcm1hdGlvbiBzZXJ2aWNlcyM4MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM4MC4xNS4xNS4wNC4wMCNUcmFkZSBwcm9tb3Rpb24gc2VydmljZXMjODAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjODAuMTUuMTUuMDUuMDAjTXVsdGluYXRpb25hbCBtYXJrZXRpbmcgZW50ZXJwcmlzZXMjODAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjODAuMTUuMTYuMDAuMDAjSW50ZXJuYXRpb25hbCB0cmFkZSBzZXJ2aWNlcyM4MC4xNS4wMC4wMC4wMAotdW5zcHNjNyM4MC4xNS4xNi4wMS4wMCNFeHBvcnQgZGV2ZWxvcG1lbnQjODAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTUuMTYuMDIuMDAjSW1wb3J0IHBsYW5uaW5nIzgwLjE1LjE2LjAwLjAwCi11bnNwc2M3IzgwLjE1LjE2LjAzLjAwI0V4cG9ydCBwcm9qZWN0aW9ucyM4MC4xNS4xNi4wMC4wMAotdW5zcHNjNyM4MC4xNS4xNi4wNC4wMCNJbXBvcnQgcHJvY3VyZW1lbnQgc2VydmljZXMjODAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjODAuMTYuMDAuMDAuMDAjQnVzaW5lc3MgYWRtaW5pc3RyYXRpb24gc2VydmljZXMjODAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODAuMTYuMTUuMDAuMDAjTWFuYWdlbWVudCBzdXBwb3J0IHNlcnZpY2VzIzgwLjE2LjAwLjAwLjAwCi11bnNwc2M3IzgwLjE2LjE1LjAxLjAwI09mZmljZSBhZG1pbmlzdHJhdGlvbiBvciBzZWNyZXRhcmlhbCBzZXJ2aWNlcyM4MC4xNi4xNS4wMC4wMAotdW5zcHNjNyM4MC4xNi4xNS4wMi4wMCNNZWV0aW5nIHBsYW5uaW5nIHNlcnZpY2VzIzgwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzgwLjE2LjE1LjAzLjAwI0tleWJvYXJkIGVudHJ5IHNlcnZpY2VzIzgwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzgwLjE2LjE1LjA0LjAwI0NsZXJpY2FsIHNlcnZpY2VzIzgwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzgwLjE2LjE1LjA1LjAwI0ZsZWV0IG1hbmFnZW1lbnQgc2VydmljZXMjODAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjODAuMTYuMTUuMDYuMDAjRGF0YSBhcmNoaXZpbmcgc2VydmljZXMjODAuMTYuMTUuMDAuMDAKLXVuc3BzYzcjODAuMTYuMTUuMDcuMDAjQXVkaW8gdmlzdWFsIHNlcnZpY2VzIzgwLjE2LjE1LjAwLjAwCi11bnNwc2M3IzgwLjE2LjE2LjAwLjAwI0J1c2luZXNzIGZhY2lsaXRpZXMgb3ZlcnNpZ2h0IzgwLjE2LjAwLjAwLjAwCi11bnNwc2M3IzgwLjE2LjE2LjAxLjAwI1Byb3BlcnR5IG1hbmFnbWVudCBzZXJ2aWNlcyM4MC4xNi4xNi4wMC4wMAotdW5zcHNjNyM4MS4wMC4wMC4wMC4wMCNFbmdpbmVlcmluZyBhbmQgUmVzZWFyY2ggYW5kIFRlY2hub2xvZ3kgQmFzZWQgU2VydmljZXMjODEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTAuMDAuMDAuMDAjUHJvZmVzc2lvbmFsIGVuZ2luZWVyaW5nIHNlcnZpY2VzIzgxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzgxLjEwLjE1LjAwLjAwI0NpdmlsIGVuZ2luZWVyaW5nIzgxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzgxLjEwLjE1LjAxLjAwI1dlbGwgZW5naW5lZXJpbmcjODEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTAuMTUuMDIuMDAjVGVjaG5pY2FsIGRyYXdpbmcjODEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTAuMTUuMDMuMDAjSGFyYm9yIG9yIHdhdGVyIHBvcnRzIGVuZ2luZWVyaW5nIzgxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzgxLjEwLjE1LjA1LjAwI1N0cnVjdHVyYWwgZW5naW5lZXJpbmcjODEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTAuMTUuMDYuMDAjTmF2YWwgYXJjaGl0ZWN0dXJlIzgxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzgxLjEwLjE1LjA3LjAwI0RhbSBlbmdpbmVlcmluZyM4MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM4MS4xMC4xNS4wOC4wMCNBcmNoaXRlY3R1cmFsIGVuZ2luZWVyaW5nIzgxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzgxLjEwLjE1LjA5LjAwI0FpcnBvcnQgZW5naW5lZXJpbmcjODEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTAuMTUuMTAuMDAjSGlnaHdheSBlbmdpbmVlcmluZyM4MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM4MS4xMC4xNS4xMS4wMCNSYWlsd2F5IGVuZ2luZWVyaW5nIzgxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzgxLjEwLjE2LjAwLjAwI01lY2hhbmljYWwgZW5naW5lZXJpbmcjODEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTAuMTYuMDEuMDAjTWVjaGFuaWNhbCBkcmF3aW5nIzgxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzgxLjEwLjE2LjAyLjAwI01lY2hhbmljYWwgcHJvZHVjdCBlbmNsb3N1cmVzIGRlc2lnbiM4MS4xMC4xNi4wMC4wMAotdW5zcHNjNyM4MS4xMC4xNi4wMy4wMCNNYWNoaW5lIHRvb2wgZGVzaWduIzgxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzgxLjEwLjE2LjA0LjAwI1Bvd2VyIHRyYW5zbWlzc2lvbiBkZXNpZ24jODEuMTAuMTYuMDAuMDAKLXVuc3BzYzcjODEuMTAuMTcuMDAuMDAjRWxlY3RyaWNhbCBhbmQgZWxlY3Ryb25pYyBlbmdpbmVlcmluZyM4MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM4MS4xMC4xNy4wMS4wMCNFbGVjdHJpY2FsIGVuZ2luZWVyaW5nIHNlcnZpY2VzIzgxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzgxLjEwLjE3LjAyLjAwI0VsZWN0cm9uaWMgY2lyY3VpdCBkZXNpZ24jODEuMTAuMTcuMDAuMDAKLXVuc3BzYzcjODEuMTAuMTguMDAuMDAjQ2hlbWljYWwgZW5naW5lZXJpbmcjODEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTAuMTguMDEuMDAjUGxhc3RpY3MgZW5naW5lZXJpbmcjODEuMTAuMTguMDAuMDAKLXVuc3BzYzcjODEuMTAuMTkuMDAuMDAjT2lsIGFuZCBnYXMgZW5naW5lZXJpbmcjODEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTAuMTkuMDEuMDAjRHJpbGxpbmcgZW5naW5lZXJpbmcgZm9yIG9pbCBvciBnYXMjODEuMTAuMTkuMDAuMDAKLXVuc3BzYzcjODEuMTAuMTkuMDIuMDAjUHJvZHVjdGlvbiBlbmdpbmVlcmluZyBmb3Igb2lsIG9yIGdhcyM4MS4xMC4xOS4wMC4wMAotdW5zcHNjNyM4MS4xMC4xOS4wMy4wMCNSZXNlcnZvaXIgZW5naW5lZXJpbmcgZm9yIG9pbCBvciBnYXMjODEuMTAuMTkuMDAuMDAKLXVuc3BzYzcjODEuMTAuMjAuMDAuMDAjTWluaW5nIGVuZ2luZWVyaW5nIzgxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzgxLjEwLjIwLjAxLjAwI0h5ZHJhdWxpYyBtaW5pbmcjODEuMTAuMjAuMDAuMDAKLXVuc3BzYzcjODEuMTAuMjEuMDAuMDAjT2NlYW4gZW5naW5lZXJpbmcjODEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTAuMjEuMDEuMDAjQ29hc3RhbCBlbmdpbmVlcmluZyM4MS4xMC4yMS4wMC4wMAotdW5zcHNjNyM4MS4xMC4yMi4wMC4wMCNUcmFuc3BvcnRhdGlvbiBlbmdpbmVlcmluZyM4MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM4MS4xMC4yMi4wMS4wMCNUcmFmZmljIGVuZ2luZWVyaW5nIzgxLjEwLjIyLjAwLjAwCi11bnNwc2M3IzgxLjEwLjIyLjAyLjAwI1VyYmFuIHRyYW5zcG9ydCBuZXR3b3JrIzgxLjEwLjIyLjAwLjAwCi11bnNwc2M3IzgxLjEwLjIyLjAzLjAwI0lubGFuZCB3YXRlcndheXMjODEuMTAuMjIuMDAuMDAKLXVuc3BzYzcjODEuMTAuMjMuMDAuMDAjQWVyb25hdXRpY2FsIGVuZ2luZWVyaW5nIzgxLjEwLjAwLjAwLjAwCi11bnNwc2M3IzgxLjEwLjIzLjAxLjAwI0F2aW9uaWNzIGRlc2lnbiM4MS4xMC4yMy4wMC4wMAotdW5zcHNjNyM4MS4xMC4yNC4wMC4wMCNBdmlvbmljcyBkZXNpZ24jODEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTEuMDAuMDAuMDAjQ29tcHV0ZXIgc2VydmljZXMjODEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTEuMTUuMDAuMDAjU29mdHdhcmUgb3IgaGFyZHdhcmUgZW5naW5lZXJpbmcjODEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTEuMTUuMDEuMDAjTWFpbmZyYW1lIHNvZnR3YXJlIGFwcGxpY2F0aW9ucyBkZXNpZ24jODEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTEuMTUuMDIuMDAjUGVyc29uYWwgY29tcHV0ZXIgKFBDKSBhcHBsaWNhdGlvbiBkZXNpZ24jODEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTEuMTUuMDMuMDAjU3lzdGVtcyBpbnRlZ3JhdGlvbiBkZXNpZ24jODEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTEuMTUuMDQuMDAjQXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgc2VydmljZXMjODEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTEuMTUuMDUuMDAjT3BlcmF0aW5nIHN5c3RlbSBwcm9ncmFtbWluZyBzZXJ2aWNlcyM4MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM4MS4xMS4xNS4wNi4wMCNDbGllbnQgb3Igc2VydmVyIHByb2dyYW1taW5nIHNlcnZpY2VzIzgxLjExLjE1LjAwLjAwCi11bnNwc2M3IzgxLjExLjE1LjA3LjAwI0VSUCBvciBkYXRhYmFzZSBhcHBsaWNhdGlvbnMgcHJvZ3JhbW1pbmcgc2VydmljZXMjODEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTEuMTUuMDguMDAjQXBwbGljYXRpb24gaW1wbGVtZW50YXRpb24gc2VydmljZXMjODEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTEuMTUuMDkuMDAjSW50ZXJuZXQgb3IgaW50cmFuZXQgY2xpZW50IGFwcGxpY2F0aW9uIGRldmVsb3BtZW50IHNlcnZpY2VzIzgxLjExLjE1LjAwLjAwCi11bnNwc2M3IzgxLjExLjE1LjEwLjAwI0ludGVybmV0IG9yIGludHJhbmV0IHNlcnZlciBhcHBsaWNhdGlvbiBkZXZlbG9wbWVudCBzZXJ2aWNlcyM4MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM4MS4xMS4xNS4xMS4wMCNIdW1hbiByZXNvdXJjZXMgcHJvZHVjdGl2aXR5IGF1ZGl0cyM4MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM4MS4xMS4xNi4wMC4wMCNDb21wdXRlciBwcm9ncmFtbWVycyM4MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM4MS4xMS4xNi4wMS4wMCNQcm9ncmFtbWluZyBmb3IgVmlzdWFsIEJhc2ljIzgxLjExLjE2LjAwLjAwCi11bnNwc2M3IzgxLjExLjE2LjAyLjAwI1Byb2dyYW1taW5nIGZvciBKYXZhIzgxLjExLjE2LjAwLjAwCi11bnNwc2M3IzgxLjExLjE2LjAzLjAwI1Byb2dyYW1taW5nIGZvciBIVE1MIzgxLjExLjE2LjAwLjAwCi11bnNwc2M3IzgxLjExLjE2LjA0LjAwI1Byb2dyYW1taW5nIGZvciBBTEdPTCM4MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM4MS4xMS4xNi4wNS4wMCNQcm9ncmFtbWluZyBmb3IgQXNzZW1ibGVyIzgxLjExLjE2LjAwLjAwCi11bnNwc2M3IzgxLjExLjE2LjA2LjAwI1Byb2dyYW1taW5nIGZvciBCYXNpYyM4MS4xMS4xNi4wMC4wMAotdW5zcHNjNyM4MS4xMS4xNi4wNy4wMCNQcm9ncmFtbWluZyBmb3IgQyBvciBDKysjODEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODEuMTEuMTYuMDguMDAjUHJvZ3JhbW1pbmcgZm9yIENPQk9MIzgxLjExLjE2LjAwLjAwCi11bnNwc2M3IzgxLjExLjE2LjA5LjAwI1Byb2dyYW1taW5nIGZvciBGT1JUUkFOIzgxLjExLjE2LjAwLjAwCi11bnNwc2M3IzgxLjExLjE2LjEwLjAwI1Byb2dyYW1taW5nIGZvciBQYXNjYWwjODEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODEuMTEuMTYuMTEuMDAjUHJvZ3JhbW1pbmcgZm9yIFBMLzEjODEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODEuMTEuMTYuMTIuMDAjUHJvZ3JhbW1pbmcgb3IgUHJvcHJpZXRhcnkgTGFuZ3VhZ2VzIzgxLjExLjE2LjAwLjAwCi11bnNwc2M3IzgxLjExLjE3LjAwLjAwI01hbmFnZW1lbnQgaW5mb3JtYXRpb24gc3lzdGVtcyAoTUlTKSM4MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM4MS4xMS4xNy4wMS4wMCNXaWRlIGFyZWEgbmV0d29yayBjb21tdW5pY2F0aW9ucyBkZXNpZ24jODEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjODEuMTEuMTcuMDIuMDAjTG9jYWwgYXJlYSBuZXR3b3JrIGNvbW11bmljYXRpb25zIGRlc2lnbiM4MS4xMS4xNy4wMC4wMAotdW5zcHNjNyM4MS4xMS4xNy4wMy4wMCNFbGVjdHJvbmljIGRhdGEgaW50ZXJjaGFuZ2UgKEVESSkgZGVzaWduIzgxLjExLjE3LjAwLjAwCi11bnNwc2M3IzgxLjExLjE3LjA0LjAwI0RhdGFiYXNlIGRlc2lnbiM4MS4xMS4xNy4wMC4wMAotdW5zcHNjNyM4MS4xMS4xNy4wNS4wMCNTeXN0ZW1zIGFyY2hpdGVjdHVyZSM4MS4xMS4xNy4wMC4wMAotdW5zcHNjNyM4MS4xMS4xOC4wMC4wMCNTeXN0ZW0gYWRtaW5pc3RyYXRvcnMjODEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTEuMTguMDEuMDAjQ29tcHV0ZXIgb3IgbmV0d29yayBvciBpbnRlcm5ldCBzZWN1cml0eSM4MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM4MS4xMS4xOC4wMi4wMCNNYWluZnJhbWUgYWRtaW5pc3RyYXRpb24gc2VydmljZXMjODEuMTEuMTguMDAuMDAKLXVuc3BzYzcjODEuMTEuMTguMDMuMDAjTG9jYWwgYXJlYSBuZXR3b3JrIChMQU4pIG1haW50ZW5hbmNlIG9yIHN1cHBvcnQjODEuMTEuMTguMDAuMDAKLXVuc3BzYzcjODEuMTEuMTguMDQuMDAjV2lkZSBhcmVhIG5ldHdvcmsgKFdBTikgbWFpbnRlbmFuY2Ugb3Igc3VwcG9ydCM4MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM4MS4xMS4xOC4wNS4wMCNQcm9wcmlldGFyeSBvciBsaWNlbnNlZCBzeXN0ZW1zIG1haW50ZW5hbmNlIG9yIHN1cHBvcnQjODEuMTEuMTguMDAuMDAKLXVuc3BzYzcjODEuMTEuMTguMDYuMDAjRGF0YWJhc2UgYW5hbHlzaXMjODEuMTEuMTguMDAuMDAKLXVuc3BzYzcjODEuMTEuMTguMDcuMDAjRGF0YSBzdG9yYWdlIzgxLjExLjE4LjAwLjAwCi11bnNwc2M3IzgxLjExLjE4LjA4LjAwI1N5c3RlbXMgYW5hbHlzaXMjODEuMTEuMTguMDAuMDAKLXVuc3BzYzcjODEuMTEuMTguMDkuMDAjU3lzdGVtIGluc3RhbGxhdGlvbiM4MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM4MS4xMS4xOC4xMC4wMCNTb2Z0d2FyZSBjb2RpbmcjODEuMTEuMTguMDAuMDAKLXVuc3BzYzcjODEuMTEuMTguMTEuMDAjVGVjaG5pY2FsIHN1cHBvcnQgb3IgaGVscCBkZXNrIHNlcnZpY2VzIzgxLjExLjE4LjAwLjAwCi11bnNwc2M3IzgxLjExLjE4LjEyLjAwI0NvbXB1dGVyIGhhcmR3YXJlIG1haW50ZW5hbmNlIG9yIHN1cHBvcnQjODEuMTEuMTguMDAuMDAKLXVuc3BzYzcjODEuMTEuMTguMTMuMDAjQ29tcHV0ZXIgc29mdHdhcmUgbWFpbnRlbmFuY2Ugb3Igc3VwcG9ydCM4MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM4MS4xMS4xOC4xNC4wMCNDbyBsb2NhdGlvbiBzZXJ2aWNlIzgxLjExLjE4LjAwLjAwCi11bnNwc2M3IzgxLjExLjE4LjE1LjAwI1ByaW50ZXIgbWFpbnRlbmFuY2UgYW5kIHN1cHBvcnQgc2VydmljZXMjODEuMTEuMTguMDAuMDAKLXVuc3BzYzcjODEuMTEuMTguMTYuMDAjTWFpbmZyYW1lIGNvbXB1dGVyIG1haW50ZW5hbmNlIG9yIHN1cHBvcnQjODEuMTEuMTguMDAuMDAKLXVuc3BzYzcjODEuMTEuMTguMTcuMDAjVGVsZWNvbSBlcXVpcG1lbnQgbWFpbnRlbmFuY2Ugb3Igc3VwcG9ydCM4MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM4MS4xMS4xOS4wMC4wMCNJbmZvcm1hdGlvbiByZXRyaWV2YWwgc3lzdGVtcyM4MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM4MS4xMS4xOS4wMS4wMCNEYXRhYmFzZSBpbmZvcm1hdGlvbiByZXRyaWV2YWwjODEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjODEuMTEuMTkuMDIuMDAjT24gbGluZSBkYXRhYmFzZSBpbmZvcm1hdGlvbiByZXRyaWV2YWwjODEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjODEuMTEuMTkuMDMuMDAjUmVtb3RlIGRhdGFiYXNlIGluZm9ybWF0aW9uIHJldHJpZXZhbCM4MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM4MS4xMS4yMC4wMC4wMCNEYXRhIHNlcnZpY2VzIzgxLjExLjAwLjAwLjAwCi11bnNwc2M3IzgxLjExLjIwLjAxLjAwI09uIGxpbmUgZGF0YSBwcm9jZXNzaW5nIzgxLjExLjIwLjAwLjAwCi11bnNwc2M3IzgxLjExLjIwLjAyLjAwI0RhdGEgcHJvY2Vzc2luZyBvciBwcmVwYXJhdGlvbiBzZXJ2aWNlcyM4MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM4MS4xMS4yMC4wMy4wMCNEYXRhIGNlbnRlciBzZXJ2aWNlcyM4MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM4MS4xMS4yMC4wNC4wMCNEaXNhc3RlciByZWNvdmVyeSBzZXJ2aWNlcyM4MS4xMS4yMC4wMC4wMAotdW5zcHNjNyM4MS4xMS4yMC4wNS4wMCNEb2N1bWVudCBzY2FubmluZyBzZXJ2aWNlIzgxLjExLjIwLjAwLjAwCi11bnNwc2M3IzgxLjExLjIwLjA2LjAwI0RhdGEgc3RvcmFnZSBzZXJ2aWNlIzgxLjExLjIwLjAwLjAwCi11bnNwc2M3IzgxLjExLjIwLjA3LjAwI0NvbnRlbnQgb3IgZGF0YSBzdGFuZGFyZGl6YXRpb24gc2VydmljZXMjODEuMTEuMjAuMDAuMDAKLXVuc3BzYzcjODEuMTEuMjEuMDAuMDAjSW50ZXJuZXQgc2VydmljZXMjODEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTEuMjEuMDEuMDAjSW50ZXJuZXQgc2VydmljZSBwcm92aWRlcnMgKElTUCkjODEuMTEuMjEuMDAuMDAKLXVuc3BzYzcjODEuMTEuMjEuMDIuMDAjRWxlY3Ryb25pYyBtYWlsIHNlcnZpY2UgcHJvdmlkZXIjODEuMTEuMjEuMDAuMDAKLXVuc3BzYzcjODEuMTEuMjEuMDMuMDAjV29ybGQgd2lkZSB3ZWIgKFdXVykgc2l0ZSBkZXNpZ24gc2VydmljZXMjODEuMTEuMjEuMDAuMDAKLXVuc3BzYzcjODEuMTEuMjEuMDQuMDAjV2ViIHNlYXJjaCBlbmdpbmUgcHJvdmlkZXJzIzgxLjExLjIxLjAwLjAwCi11bnNwc2M3IzgxLjExLjIxLjA1LjAwI1dvcmxkIHdpZGUgd2ViIChXV1cpIHNpdGUgb3BlcmF0aW9uIChob3N0KSBzZXJ2aWNlcyM4MS4xMS4yMS4wMC4wMAotdW5zcHNjNyM4MS4xMS4yMS4wNi4wMCNBcHBsaWNhdGlvbiBzZXJ2aWNlIHByb3ZpZGVycyM4MS4xMS4yMS4wMC4wMAotdW5zcHNjNyM4MS4xMS4yMS4wNy4wMCNJbnRlcm5ldCBkb21haW4gbmFtZXMjODEuMTEuMjEuMDAuMDAKLXVuc3BzYzcjODEuMTEuMjIuMDAuMDAjU29mdHdhcmUgbWFpbnRlbmFuY2UgYW5kIHN1cHBvcnQjODEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTEuMjIuMDEuMDAjTWFpbnRlbmFuY2UgYW5kIHN1cHBvcnQgZmVlcyM4MS4xMS4yMi4wMC4wMAotdW5zcHNjNyM4MS4xMS4yMi4wMi4wMCNTb2Z0d2FyZSBwYXRjaGVzIG9yIHVwZ3JhZGVzIzgxLjExLjIyLjAwLjAwCi11bnNwc2M3IzgxLjEyLjAwLjAwLjAwI0Vjb25vbWljcyM4MS4wMC4wMC4wMC4wMAotdW5zcHNjNyM4MS4xMi4xNS4wMC4wMCNFY29ub21pYyBhbmFseXNpcyM4MS4xMi4wMC4wMC4wMAotdW5zcHNjNyM4MS4xMi4xNS4wMS4wMCNNYWNybyBlY29ub21pYyBhbmFseXNpcyM4MS4xMi4xNS4wMC4wMAotdW5zcHNjNyM4MS4xMi4xNS4wMi4wMCNNaWNybyBlY29ub21pYyBhbmFseXNpcyM4MS4xMi4xNS4wMC4wMAotdW5zcHNjNyM4MS4xMi4xNS4wMy4wMCNFY29ub21ldHJpY3MjODEuMTIuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTIuMTUuMDQuMDAjRWNvbm9taWMgZm9yZWNhc3RzIzgxLjEyLjE1LjAwLjAwCi11bnNwc2M3IzgxLjEyLjE2LjAwLjAwI01vbmV0YXJ5IHN5c3RlbXMgYW5kIGlzc3VlcyM4MS4xMi4wMC4wMC4wMAotdW5zcHNjNyM4MS4xMi4xNi4wMS4wMCNNb25ldGFyeSBwb2xpY3kjODEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODEuMTIuMTYuMDIuMDAjTW9uZXRhcnkgc3lzdGVtcyM4MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM4MS4xMi4xNi4wMy4wMCNNb25ldGFyeSBhbmFseXNpcyM4MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM4MS4xMi4xNi4wNC4wMCNNb25ldGFyeSBsaXF1aWRpdHkjODEuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODEuMTIuMTYuMDUuMDAjUHJlY2lvdXMgbWV0YWxzIHJlc2VydmVzIzgxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzgxLjEyLjE2LjA2LjAwI0ZvcmVpZ24gZXhjaGFuZ2UgY29udHJvbCM4MS4xMi4xNi4wMC4wMAotdW5zcHNjNyM4MS4xMi4xNi4wNy4wMCNDdXJyZW5jeSBleGNoYW5nZSBtYXJrZXRzIzgxLjEyLjE2LjAwLjAwCi11bnNwc2M3IzgxLjEzLjAwLjAwLjAwI1N0YXRpc3RpY3MjODEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTMuMTUuMDAuMDAjTWV0aG9kb2xvZ3kgYW5kIGFuYWx5c2lzIzgxLjEzLjAwLjAwLjAwCi11bnNwc2M3IzgxLjEzLjE1LjAxLjAwI0ZhY3RvciBhbmFseXNpcyM4MS4xMy4xNS4wMC4wMAotdW5zcHNjNyM4MS4xMy4xNS4wMi4wMCNNdWx0aXZhcmlhdGUgYW5hbHlzaXMjODEuMTMuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTMuMTUuMDMuMDAjUmVncmVzc2lvbiBhbmFseXNpcyM4MS4xMy4xNS4wMC4wMAotdW5zcHNjNyM4MS4xMy4xNS4wNC4wMCNTYW1wbGluZyBzdXJ2ZXlzIzgxLjEzLjE1LjAwLjAwCi11bnNwc2M3IzgxLjEzLjE1LjA1LjAwI1RpbWUgc2VyaWVzIGFuYWx5c2lzIzgxLjEzLjE1LjAwLjAwCi11bnNwc2M3IzgxLjE0LjAwLjAwLjAwI01hbnVmYWN0dXJpbmcgdGVjaG5vbG9naWVzIzgxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzgxLjE0LjE1LjAwLjAwI1F1YWxpdHkgY29udHJvbCM4MS4xNC4wMC4wMC4wMAotdW5zcHNjNyM4MS4xNC4xNS4wMS4wMCNNYXRlcmlhbHMgdGVzdGluZyM4MS4xNC4xNS4wMC4wMAotdW5zcHNjNyM4MS4xNC4xNS4wMi4wMCNNYXRlcmlhbHMgc3ludGhlc2lzIzgxLjE0LjE1LjAwLjAwCi11bnNwc2M3IzgxLjE0LjE1LjAzLjAwI01hdGVyaWFscyBpbnNwZWN0aW9uIzgxLjE0LjE1LjAwLjAwCi11bnNwc2M3IzgxLjE0LjE1LjA0LjAwI0VxdWlwbWVudCB0ZXN0IG9yIGNhbGlicmF0aW9uIzgxLjE0LjE1LjAwLjAwCi11bnNwc2M3IzgxLjE0LjE1LjA1LjAwI1Byb2R1Y3Rpb24gc3RhbmRhcmRzIGRldmVsb3BtZW50IzgxLjE0LjE1LjAwLjAwCi11bnNwc2M3IzgxLjE0LjE1LjA2LjAwI1Byb2R1Y3QgdGVzdGluZyM4MS4xNC4xNS4wMC4wMAotdW5zcHNjNyM4MS4xNC4xNi4wMC4wMCNTdXBwbHkgY2hhaW4gbWFuYWdlbWVudCM4MS4xNC4wMC4wMC4wMAotdW5zcHNjNyM4MS4xNC4xNi4wMS4wMCNMb2dpc3RpY3MjODEuMTQuMTYuMDAuMDAKLXVuc3BzYzcjODEuMTQuMTYuMDIuMDAjVHJhbnNpdCBhbmFseXNpcyM4MS4xNC4xNi4wMC4wMAotdW5zcHNjNyM4MS4xNC4xNi4wMy4wMCNUcmFuc3BvcnQgZmluYW5jZSBvciBlY29ub21pY3MjODEuMTQuMTYuMDAuMDAKLXVuc3BzYzcjODEuMTQuMTYuMDQuMDAjVHJhbnNwb3J0IGZhY2lsaXRhdGlvbiM4MS4xNC4xNi4wMC4wMAotdW5zcHNjNyM4MS4xNC4xNi4wNS4wMCNUcmFuc3BvcnQgaW5mcmFzdHJ1Y3R1cmUjODEuMTQuMTYuMDAuMDAKLXVuc3BzYzcjODEuMTQuMTYuMDYuMDAjVHJhbnNwb3J0IHBsYW5uaW5nIzgxLjE0LjE2LjAwLjAwCi11bnNwc2M3IzgxLjE0LjE3LjAwLjAwI1Byb2R1Y3Rpb24gcGxhbm5pbmcgYW5kIGNvbnRyb2wjODEuMTQuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTQuMTcuMDEuMDAjUHJvZHVjdGlvbiBwbGFubmluZyM4MS4xNC4xNy4wMC4wMAotdW5zcHNjNyM4MS4xNC4xNy4wMi4wMCNQcm9kdWN0aW9uIGNvbnRyb2wjODEuMTQuMTcuMDAuMDAKLXVuc3BzYzcjODEuMTQuMTcuMDMuMDAjUHJvZHVjdGlvbiBzY2hlZHVsaW5nIzgxLjE0LjE3LjAwLjAwCi11bnNwc2M3IzgxLjE0LjE3LjA0LjAwI1Byb2R1Y3Rpb24gc3RhdGlzdGljcyBjb2xsZWN0aW9uIG9yIGFuYWx5c2lzIHNlcnZpY2VzIzgxLjE0LjE3LjAwLjAwCi11bnNwc2M3IzgxLjE0LjE4LjAwLjAwI0ZhY2lsaXRpZXMgbWFuYWdlbWVudCM4MS4xNC4wMC4wMC4wMAotdW5zcHNjNyM4MS4xNC4xOC4wMS4wMCNTYWZldHkgb3IgcmlzayBhbmFseXNpcyM4MS4xNC4xOC4wMC4wMAotdW5zcHNjNyM4MS4xNC4xOC4wMi4wMCNJbmR1c3RyaWFsIGh5Z2llbmUgb3IgdmVudGlsYXRpb24jODEuMTQuMTguMDAuMDAKLXVuc3BzYzcjODEuMTQuMTguMDMuMDAjQWNvdXN0aWNzIG9yIG5vaXNlIGNvbnRyb2wjODEuMTQuMTguMDAuMDAKLXVuc3BzYzcjODEuMTQuMTguMDQuMDAjRXF1aXBtZW50IGluc3BlY3Rpb24gc2VydmljZSM4MS4xNC4xOC4wMC4wMAotdW5zcHNjNyM4MS4xNC4xOC4wNS4wMCNCdWlsZGluZyBpbnNwZWN0aW9uIHNlcnZpY2UjODEuMTQuMTguMDAuMDAKLXVuc3BzYzcjODEuMTQuMTguMDYuMDAjUG93ZXIgbGluZSBpbnNwZWN0aW9uIHNlcnZpY2UjODEuMTQuMTguMDAuMDAKLXVuc3BzYzcjODEuMTQuMTguMDcuMDAjUGx1bWJpbmcgb3Igc2V3ZXIgaW5zcGVjdGlvbiBzZXJ2aWNlIzgxLjE0LjE4LjAwLjAwCi11bnNwc2M3IzgxLjE1LjAwLjAwLjAwI0VhcnRoIHNjaWVuY2Ugc2VydmljZXMjODEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTUuMTUuMDAuMDAjTWV0ZW9yb2xvZ3kjODEuMTUuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTUuMTUuMDEuMDAjQ2xpbWF0b2xvZ3kjODEuMTUuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTUuMTUuMDIuMDAjTWV0ZW9yb2xvZ2ljYWwgc2VydmljZXMjODEuMTUuMTUuMDAuMDAKLXVuc3BzYzcjODEuMTUuMTUuMDMuMDAjSHlkcm9tZXRlb3JvbG9neSM4MS4xNS4xNS4wMC4wMAotdW5zcHNjNyM4MS4xNS4xNi4wMC4wMCNDYXJ0b2dyYXBoeSM4MS4xNS4wMC4wMC4wMAotdW5zcHNjNyM4MS4xNS4xNi4wMS4wMCNNYXBwaW5nIzgxLjE1LjE2LjAwLjAwCi11bnNwc2M3IzgxLjE1LjE2LjAyLjAwI01hcCBwcm9kdWN0aW9uIzgxLjE1LjE2LjAwLjAwCi11bnNwc2M3IzgxLjE1LjE2LjAzLjAwI1Bob3RvZ3JhbW1ldHJ5IzgxLjE1LjE2LjAwLjAwCi11bnNwc2M3IzgxLjE1LjE2LjA0LjAwI0xhbmQgc3VydmV5aW5nIzgxLjE1LjE2LjAwLjAwCi11bnNwc2M3IzgxLjE1LjE3LjAwLjAwI0dlb2xvZ3kjODEuMTUuMDAuMDAuMDAKLXVuc3BzYzcjODEuMTUuMTcuMDEuMDAjUGhvdG9nZW9sb2d5IzgxLjE1LjE3LjAwLjAwCi11bnNwc2M3IzgxLjE1LjE3LjAyLjAwI1N0cmF0aWdyYXBoaWMgZ2VvbG9neSM4MS4xNS4xNy4wMC4wMAotdW5zcHNjNyM4MS4xNS4xNy4wMy4wMCNHZW9sb2dpY2FsIHN1cnZleXMjODEuMTUuMTcuMDAuMDAKLXVuc3BzYzcjODEuMTUuMTcuMDQuMDAjR2VvbG9naWNhbCBleHBsb3JhdGlvbiM4MS4xNS4xNy4wMC4wMAotdW5zcHNjNyM4MS4xNS4xNy4wNS4wMCNBcmNoYWVvbG9naWNhbCBzZXJ2aWNlcyM4MS4xNS4xNy4wMC4wMAotdW5zcHNjNyM4MS4xNS4xOC4wMC4wMCNPY2Vhbm9ncmFwaHkgYW5kIGh5ZHJvbG9neSM4MS4xNS4wMC4wMC4wMAotdW5zcHNjNyM4MS4xNS4xOC4wMS4wMCNPY2Vhbm9ncmFwaGljIHN1cnZleSM4MS4xNS4xOC4wMC4wMAotdW5zcHNjNyM4MS4xNS4xOC4wMi4wMCNFc3R1YXJpbmUgb2NlYW5vZ3JhcGh5IzgxLjE1LjE4LjAwLjAwCi11bnNwc2M3IzgxLjE1LjE4LjAzLjAwI1BoeXNpY2FsIG9jZWFub2dyYXBoeSM4MS4xNS4xOC4wMC4wMAotdW5zcHNjNyM4MS4xNS4xOC4wNC4wMCNIeWRyb2xvZ2ljYWwgc3VydmV5cyM4MS4xNS4xOC4wMC4wMAotdW5zcHNjNyM4MS4xNS4xOC4wNS4wMCNCYXRoeW1ldHJpYyBzdXJ2ZXlzIzgxLjE1LjE4LjAwLjAwCi11bnNwc2M3IzgxLjE1LjE4LjA2LjAwI1VuZGVyd2F0ZXIgZXhwbG9yYXRpb24jODEuMTUuMTguMDAuMDAKLXVuc3BzYzcjODEuMTUuMTkuMDAuMDAjR2VvcGh5c2ljcyM4MS4xNS4wMC4wMC4wMAotdW5zcHNjNyM4MS4xNS4xOS4wMS4wMCNHZW9waHlzaWNhbCBzdXJ2ZXlzIzgxLjE1LjE5LjAwLjAwCi11bnNwc2M3IzgxLjE1LjE5LjAyLjAwI0dlb3BoeXNpY2FsIGV4cGxvcmF0aW9uIzgxLjE1LjE5LjAwLjAwCi11bnNwc2M3IzgxLjE1LjE5LjAzLjAwI0dlb3BoeXNpY2FsIHBob3RvIGludGVycHJldGF0aW9uIzgxLjE1LjE5LjAwLjAwCi11bnNwc2M3IzgxLjE1LjE5LjA0LjAwI0Flcm8gbWFnbmV0aWMgZ2VvcGh5c2ljcyM4MS4xNS4xOS4wMC4wMAotdW5zcHNjNyM4Mi4wMC4wMC4wMC4wMCNFZGl0b3JpYWwgYW5kIERlc2lnbiBhbmQgR3JhcGhpYyBhbmQgRmluZSBBcnQgU2VydmljZXMjODIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODIuMTAuMDAuMDAuMDAjQWR2ZXJ0aXNpbmcjODIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODIuMTAuMTUuMDAuMDAjUHJpbnQgYWR2ZXJ0aXNpbmcjODIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjODIuMTAuMTUuMDEuMDAjQmlsbGJvYXJkIGFkdmVydGlzaW5nIzgyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzgyLjEwLjE1LjAyLjAwI1Bvc3RlciBhZHZlcnRpc2luZyM4Mi4xMC4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xMC4xNS4wMy4wMCNNYWdhemluZSBhZHZlcnRpc2luZyM4Mi4xMC4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xMC4xNS4wNC4wMCNOZXdzcGFwZXIgYWR2ZXJ0aXNpbmcjODIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTAuMTUuMDUuMDAjSGFuZGJpbGwgb3IgY291cG9uIGFkdmVydGlzaW5nIzgyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzgyLjEwLjE1LjA2LjAwI1RyYW5zaXQgYWR2ZXJ0aXNpbmcgc2VydmljZXMjODIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTAuMTUuMDcuMDAjU2hvcHBpbmcgbmV3cyBvciBhZHZlcnRpc2luZyBvciBkaXN0cmlidXRpb24gc2VydmljZSM4Mi4xMC4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xMC4xNS4wOC4wMCNZZWxsb3cgIHBhZ2VzIGFkdmVydGlzaW5nIzgyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzgyLjEwLjE2LjAwLjAwI0Jyb2FkY2FzdCBhZHZlcnRpc2luZyM4Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM4Mi4xMC4xNi4wMS4wMCNSYWRpbyBhZHZlcnRpc2luZyM4Mi4xMC4xNi4wMC4wMAotdW5zcHNjNyM4Mi4xMC4xNi4wMi4wMCNUZWxldmlzaW9uIGFkdmVydGlzaW5nIzgyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzgyLjEwLjE2LjAzLjAwI0ludGVybmV0IGFkdmVydGlzaW5nIzgyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzgyLjEwLjE3LjAwLjAwI0FlcmlhbCBhZHZlcnRpc2luZyM4Mi4xMC4wMC4wMC4wMAotdW5zcHNjNyM4Mi4xMC4xNy4wMS4wMCNCYW5uZXIgYWR2ZXJ0aXNpbmcgc2VydmljZXMjODIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjODIuMTAuMTcuMDIuMDAjU2t5d3JpdGluZyBhZHZlcnRpc2luZyBzZXJ2aWNlcyM4Mi4xMC4xNy4wMC4wMAotdW5zcHNjNyM4Mi4xMC4xOC4wMC4wMCNBZHZlcnRpc2luZyBhZ2VuY3kgc2VydmljZXMjODIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjODIuMTAuMTguMDEuMDAjQWR2ZXJ0aXNpbmcgY2FtcGFpZ24gc2VydmljZXMjODIuMTAuMTguMDAuMDAKLXVuc3BzYzcjODIuMTEuMDAuMDAuMDAjV3JpdGluZyBhbmQgdHJhbnNsYXRpb25zIzgyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzgyLjExLjE1LjAwLjAwI1RlY2huaWNhbCB3cml0aW5nIzgyLjExLjAwLjAwLjAwCi11bnNwc2M3IzgyLjExLjE1LjAxLjAwI0luc3RydWN0aW9uIHdyaXRpbmcgc2VydmljZXMjODIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTEuMTUuMDIuMDAjTWFudWFsIHdyaXRpbmcgc2VydmljZXMjODIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTEuMTUuMDMuMDAjQWNhZGVtaWMgb3Igc2NpZW50aWZpYyBhcnRpY2xlIHdyaXRpbmcjODIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTEuMTYuMDAuMDAjTm9uIHRlY2huaWNhbCB3cml0aW5nIzgyLjExLjAwLjAwLjAwCi11bnNwc2M3IzgyLjExLjE2LjAxLjAwI0xldHRlciB3cml0aW5nIHNlcnZpY2VzIzgyLjExLjE2LjAwLjAwCi11bnNwc2M3IzgyLjExLjE2LjAyLjAwI1Jlc3VtZSB3cml0aW5nIHNlcnZpY2VzIzgyLjExLjE2LjAwLjAwCi11bnNwc2M3IzgyLjExLjE2LjAzLjAwI0NvdXJ0IHJlcG9ydGluZyBzZXJ2aWNlcyM4Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM4Mi4xMS4xNi4wNC4wMCNUcmFuc2NyaWJpbmcgc2VydmljZXMjODIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODIuMTEuMTcuMDAuMDAjQ3JlYXRpdmUgd3JpdGluZyM4Mi4xMS4wMC4wMC4wMAotdW5zcHNjNyM4Mi4xMS4xNy4wMS4wMCNBcnRpY2xlIHdyaXRlcnMgc2VydmljZXMjODIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjODIuMTEuMTcuMDIuMDAjQm9vayBhdXRob3JzIHNlcnZpY2VzIzgyLjExLjE3LjAwLjAwCi11bnNwc2M3IzgyLjExLjE3LjAzLjAwI1BvZXRyeSBhdXRob3JzIHNlcnZpY2VzIzgyLjExLjE3LjAwLjAwCi11bnNwc2M3IzgyLjExLjE3LjA0LjAwI0NvcHl3cml0aW5nIzgyLjExLjE3LjAwLjAwCi11bnNwc2M3IzgyLjExLjE3LjA1LjAwI1NwZWVjaCB3cml0aW5nIzgyLjExLjE3LjAwLjAwCi11bnNwc2M3IzgyLjExLjE4LjAwLjAwI0VkaXRvcmlhbCBhbmQgc3VwcG9ydCBzZXJ2aWNlcyM4Mi4xMS4wMC4wMC4wMAotdW5zcHNjNyM4Mi4xMS4xOC4wMS4wMCNFZGl0aW5nIHNlcnZpY2VzIzgyLjExLjE4LjAwLjAwCi11bnNwc2M3IzgyLjExLjE4LjAyLjAwI0ZhY3QgY2hlY2tpbmcgc2VydmljZXMjODIuMTEuMTguMDAuMDAKLXVuc3BzYzcjODIuMTEuMTguMDMuMDAjUHJvb2ZyZWFkaW5nIHNlcnZpY2VzIzgyLjExLjE4LjAwLjAwCi11bnNwc2M3IzgyLjExLjE4LjA0LjAwI1dyaXR0ZW4gdHJhbnNsYXRpb24gc2VydmljZXMjODIuMTEuMTguMDAuMDAKLXVuc3BzYzcjODIuMTEuMTkuMDAuMDAjTmV3cyBhbmQgcHVibGljaXR5IHNlcnZpY2VzIzgyLjExLjAwLjAwLjAwCi11bnNwc2M3IzgyLjExLjE5LjAxLjAwI1ByZXNzIHJlbGVhc2Ugc2VydmljZXMjODIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjODIuMTEuMTkuMDIuMDAjU3BlY2lhbCBpbnRlcmVzdCBuZXdzbGV0dGVyIHNlcnZpY2VzIzgyLjExLjE5LjAwLjAwCi11bnNwc2M3IzgyLjExLjE5LjAzLjAwI05ld3MgYWdlbmN5IHdpcmUgc2VydmljZXMjODIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjODIuMTEuMTkuMDQuMDAjTmV3c3BhcGVyIG9yIGFkdmVydGlzaW5nIG1hdGVyaWFsIGRlbGl2ZXJ5IHNlcnZpY2VzIzgyLjExLjE5LjAwLjAwCi11bnNwc2M3IzgyLjEyLjAwLjAwLjAwI1JlcHJvZHVjdGlvbiBzZXJ2aWNlcyM4Mi4wMC4wMC4wMC4wMAotdW5zcHNjNyM4Mi4xMi4xNS4wMC4wMCNQcmludGluZyM4Mi4xMi4wMC4wMC4wMAotdW5zcHNjNyM4Mi4xMi4xNS4wMS4wMCNQbGFubmluZyBvciBsYXlvdXQgb2YgZ3JhcGhpYyBwcm9kdWN0aW9uIzgyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzgyLjEyLjE1LjAyLjAwI1R5cGVzZXR0aW5nIzgyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzgyLjEyLjE1LjAzLjAwI0RpZ2l0YWwgcHJpbnRpbmcjODIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTIuMTUuMDQuMDAjTGV0dGVycHJlc3Mgb3Igc2NyZWVuIHByaW50aW5nIzgyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzgyLjEyLjE1LjA1LjAwI1Byb21vdGlvbmFsIG9yIGFkdmVydGlzaW5nIHByaW50aW5nIzgyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzgyLjEyLjE1LjA2LjAwI1B1YmxpY2F0aW9uIHByaW50aW5nIzgyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzgyLjEyLjE1LjA3LjAwI1N0YXRpb25lcnkgb3IgYnVzaW5lc3MgZm9ybSBwcmludGluZyM4Mi4xMi4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xMi4xNS4wOC4wMCNXcmFwIG9yIHRhZyBvciBsYWJlbCBvciBzZWFsIG9yIGJhZyBwcmludGluZyM4Mi4xMi4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xMi4xNS4wOS4wMCNTZWN1cml0eSBvciBmaW5hbmNpYWwgaW5zdHJ1bWVudHMgcHJpbnRpbmcjODIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTIuMTUuMTAuMDAjVGV4dGlsZSBwcmludGluZyM4Mi4xMi4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xMi4xNS4xMS4wMCNUZWNobmljYWwgbWFudWFsIGFuZCBpbnN0cnVjdGlvbiBzaGVldCBwcmludGluZyM4Mi4xMi4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xMi4xNS4xMi4wMCNFbWJvc3NpbmcjODIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTIuMTYuMDAuMDAjRW5ncmF2aW5nIzgyLjEyLjAwLjAwLjAwCi11bnNwc2M3IzgyLjEyLjE2LjAxLjAwI0N1cnJlbmN5IGVuZ3JhdmluZyM4Mi4xMi4xNi4wMC4wMAotdW5zcHNjNyM4Mi4xMi4xNi4wMi4wMCNFbmdyYXZlZCByb2xsIHByaW50aW5nIzgyLjEyLjE2LjAwLjAwCi11bnNwc2M3IzgyLjEyLjE2LjAzLjAwI01ldGFsIHBsYXRlIGVuZ3JhdmluZyM4Mi4xMi4xNi4wMC4wMAotdW5zcHNjNyM4Mi4xMi4xNy4wMC4wMCNQaG90b2NvcHlpbmcjODIuMTIuMDAuMDAuMDAKLXVuc3BzYzcjODIuMTIuMTcuMDEuMDAjQmxhY2sgYW5kIHdoaXRlIGNvcHkgb3IgY29sbGF0aW5nIHNlcnZpY2VzIzgyLjEyLjE3LjAwLjAwCi11bnNwc2M3IzgyLjEyLjE3LjAyLjAwI0NvbG9yIGNvcHkgb3IgY29sbGF0aW5nIHNlcnZpY2VzIzgyLjEyLjE3LjAwLjAwCi11bnNwc2M3IzgyLjEyLjE4LjAwLjAwI1B1Ymxpc2hpbmcjODIuMTIuMDAuMDAuMDAKLXVuc3BzYzcjODIuMTIuMTguMDEuMDAjVGV4dGJvb2sgb3IgcmVzZWFyY2ggcHVibGlzaGluZyM4Mi4xMi4xOC4wMC4wMAotdW5zcHNjNyM4Mi4xMi4xOC4wMi4wMCNBdXRob3IgZnVuZGVkIHB1Ymxpc2hpbmcgc2VydmljZXMjODIuMTIuMTguMDAuMDAKLXVuc3BzYzcjODIuMTIuMTkuMDAuMDAjQm9va2JpbmRpbmcjODIuMTIuMDAuMDAuMDAKLXVuc3BzYzcjODIuMTIuMTkuMDEuMDAjVGhyZWFkIHN0aXRjaCBib29rYmluZGluZyM4Mi4xMi4xOS4wMC4wMAotdW5zcHNjNyM4Mi4xMi4xOS4wMi4wMCNTcGlyYWwgYmluZGluZyM4Mi4xMi4xOS4wMC4wMAotdW5zcHNjNyM4Mi4xMi4xOS4wMy4wMCNHbHVlZCBiaW5kaW5nIzgyLjEyLjE5LjAwLjAwCi11bnNwc2M3IzgyLjEyLjE5LjA0LjAwI0NvbWIgb3IgY2xhbXAgdHlwZSBiaW5kaW5nIzgyLjEyLjE5LjAwLjAwCi11bnNwc2M3IzgyLjEyLjE5LjA1LjAwI0JpbmRpbmcgcmVzdG9yYXRpb24gb3IgcmVwYWlyIzgyLjEyLjE5LjAwLjAwCi11bnNwc2M3IzgyLjEyLjE5LjA2LjAwI0Jyb256aW5nIG9yIGdpbGRpbmcgb3IgZWRnaW5nIG9yIGRlY2tsaW5nIzgyLjEyLjE5LjAwLjAwCi11bnNwc2M3IzgyLjEzLjAwLjAwLjAwI1Bob3RvZ3JhcGhpYyBzZXJ2aWNlcyM4Mi4wMC4wMC4wMC4wMAotdW5zcHNjNyM4Mi4xMy4xNS4wMC4wMCNGaWxtIHByb2Nlc3Npbmcgc2VydmljZXMjODIuMTMuMDAuMDAuMDAKLXVuc3BzYzcjODIuMTMuMTUuMDEuMDAjU3RpbGwgZmlsbSBwcm9jZXNzaW5nIG9yIHJlcHJvZHVjdGlvbiM4Mi4xMy4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xMy4xNS4wMi4wMCNNb3Rpb24gcGljdHVyZSBmaWxtIHByb2Nlc3Npbmcgb3IgcmVwcm9kdWN0aW9uIzgyLjEzLjE1LjAwLjAwCi11bnNwc2M3IzgyLjEzLjE1LjAzLjAwI01pY3JvZmljaGUgc2VydmljZXMjODIuMTMuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTMuMTUuMDQuMDAjQ29sb3Igc2VwYXJhdGlvbiM4Mi4xMy4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xMy4xNi4wMC4wMCNQaG90b2dyYXBoZXJzIGFuZCBjaW5lbWF0b2dyYXBoZXJzIzgyLjEzLjAwLjAwLjAwCi11bnNwc2M3IzgyLjEzLjE2LjAxLjAwI0FlcmlhbCBwaG90b2dyYXBoeSBzZXJ2aWNlcyM4Mi4xMy4xNi4wMC4wMAotdW5zcHNjNyM4Mi4xMy4xNi4wMi4wMCNNb3Rpb24gcGljdHVyZSBjaW5lbWF0b2dyYXBoeSM4Mi4xMy4xNi4wMC4wMAotdW5zcHNjNyM4Mi4xMy4xNi4wMy4wMCNWaWRlbyBwcm9kdWN0aW9uIHNlcnZpY2VzIzgyLjEzLjE2LjAwLjAwCi11bnNwc2M3IzgyLjEzLjE2LjA0LjAwI1N0dWRpbyBwaG90b2dyYXBoeSBzZXJ2aWNlcyBvciBzdGlsbCBwaG90b2dyYXBocyM4Mi4xMy4xNi4wMC4wMAotdW5zcHNjNyM4Mi4xNC4wMC4wMC4wMCNHcmFwaGljIGRlc2lnbiM4Mi4wMC4wMC4wMC4wMAotdW5zcHNjNyM4Mi4xNC4xNS4wMC4wMCNBcnQgZGVzaWduIHNlcnZpY2VzIzgyLjE0LjAwLjAwLjAwCi11bnNwc2M3IzgyLjE0LjE1LjAxLjAwI0xheW91dCBvciBncmFwaGljcyBlZGl0aW5nIHNlcnZpY2VzIzgyLjE0LjE1LjAwLjAwCi11bnNwc2M3IzgyLjE0LjE1LjAyLjAwI0FydCBkZXNpZ24gb3IgZ3JhcGhpY3MjODIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTQuMTUuMDMuMDAjUGhvdG9jb21wb3NpdGlvbiM4Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xNC4xNS4wNC4wMCNDaGFydCBvciBncmFwaCBkZXNpZ24gc2VydmljZXMjODIuMTQuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTQuMTUuMDUuMDAjQ29tcHV0ZXIgZ2VuZXJhdGVkIGRlc2lnbiBzZXJ2aWNlcyM4Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xNC4xNS4wNi4wMCNQYWNrYWdlIGRlc2lnbiBzZXJ2aWNlcyM4Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xNC4xNS4wNy4wMCNTaWxrc2NyZWVuIGRlc2lnbiBzZXJ2aWNlcyM4Mi4xNC4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xNC4xNi4wMC4wMCNHcmFwaGljIGRpc3BsYXkgc2VydmljZXMjODIuMTQuMDAuMDAuMDAKLXVuc3BzYzcjODIuMTQuMTYuMDEuMDAjUGhvdG9ncmFwaGljIG9yIHBpY3R1cmUgbW91bnRpbmcgb3IgZnJhbWluZyBzZXJ2aWNlcyM4Mi4xNC4xNi4wMC4wMAotdW5zcHNjNyM4Mi4xNC4xNi4wMi4wMCNBcnRpY2xlIGRpc3BsYXkgYXJyYW5nZW1lbnQjODIuMTQuMTYuMDAuMDAKLXVuc3BzYzcjODIuMTUuMDAuMDAuMDAjUHJvZmVzc2lvbmFsIGFydGlzdHMgYW5kIHBlcmZvcm1lcnMjODIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODIuMTUuMTUuMDAuMDAjVmlzdWFsIGFydCBzZXJ2aWNlcyM4Mi4xNS4wMC4wMC4wMAotdW5zcHNjNyM4Mi4xNS4xNS4wMS4wMCNQYWludGVycyBzZXJ2aWNlcyM4Mi4xNS4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xNS4xNS4wMi4wMCNMaXRob2dyYXBoZXJzIHNlcnZpY2VzIzgyLjE1LjE1LjAwLjAwCi11bnNwc2M3IzgyLjE1LjE1LjAzLjAwI0NhcnRvb25pc3RzIHNlcnZpY2VzIzgyLjE1LjE1LjAwLjAwCi11bnNwc2M3IzgyLjE1LjE1LjA0LjAwI1NjdWxwdG9ycyBzZXJ2aWNlcyM4Mi4xNS4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xNS4xNS4wNS4wMCNDZXJhbWljcyBtYWtlcnMgc2VydmljZXMjODIuMTUuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTUuMTUuMDYuMDAjR2xhc3MgYmxvd2VycyBzZXJ2aWNlcyM4Mi4xNS4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xNS4xNS4wNy4wMCNUZXh0aWxlIHNwaW5uZXJzIG9yIGxvb21lcnMgb3Igd2VhdmVycyBzZXJ2aWNlcyM4Mi4xNS4xNS4wMC4wMAotdW5zcHNjNyM4Mi4xNS4xNS4wOC4wMCNUYXhpZGVybXkgc2VydmljZXMjODIuMTUuMTUuMDAuMDAKLXVuc3BzYzcjODIuMTUuMTYuMDAuMDAjQ2lyY3VzIHBlcmZvcm1lcnMjODIuMTUuMDAuMDAuMDAKLXVuc3BzYzcjODIuMTUuMTYuMDEuMDAjQW5pbWFsIHRyYWluZXJzIHNlcnZpY2VzIzgyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzgyLjE1LjE2LjAyLjAwI0Fjcm9iYXRzIHNlcnZpY2VzIzgyLjE1LjE2LjAwLjAwCi11bnNwc2M3IzgyLjE1LjE2LjAzLjAwI01hZ2ljaWFucyBzZXJ2aWNlcyM4Mi4xNS4xNi4wMC4wMAotdW5zcHNjNyM4Mi4xNS4xNi4wNC4wMCNDbG93bnMgc2VydmljZXMjODIuMTUuMTYuMDAuMDAKLXVuc3BzYzcjODIuMTUuMTcuMDAuMDAjUGVyZm9ybWluZyBhcnRzIHByb2Zlc3Npb25hbHMjODIuMTUuMDAuMDAuMDAKLXVuc3BzYzcjODIuMTUuMTcuMDEuMDAjQWN0aW5nIHNlcnZpY2VzIzgyLjE1LjE3LjAwLjAwCi11bnNwc2M3IzgyLjE1LjE3LjAyLjAwI0NvbWVkaWFucyBzZXJ2aWNlcyM4Mi4xNS4xNy4wMC4wMAotdW5zcHNjNyM4Mi4xNS4xNy4wMy4wMCNEYW5jZXJzIHNlcnZpY2VzIzgyLjE1LjE3LjAwLjAwCi11bnNwc2M3IzgyLjE1LjE3LjA0LjAwI011c2ljaWFucyBzZXJ2aWNlcyM4Mi4xNS4xNy4wMC4wMAotdW5zcHNjNyM4Mi4xNS4xNy4wNS4wMCNWb2NhbGlzdHMgc2VydmljZXMjODIuMTUuMTcuMDAuMDAKLXVuc3BzYzcjODIuMTUuMTcuMDYuMDAjQ2hvcmVvZ3JhcGhpYyBzZXJ2aWNlcyM4Mi4xNS4xNy4wMC4wMAotdW5zcHNjNyM4My4wMC4wMC4wMC4wMCNQdWJsaWMgVXRpbGl0aWVzIGFuZCBQdWJsaWMgU2VjdG9yIFJlbGF0ZWQgU2VydmljZXMjODMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODMuMTAuMDAuMDAuMDAjVXRpbGl0aWVzIzgzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzgzLjEwLjE1LjAwLjAwI1dhdGVyIGFuZCBzZXdlciB1dGlsaXRpZXMjODMuMTAuMDAuMDAuMDAKLXVuc3BzYzcjODMuMTAuMTUuMDEuMDAjU3VwcGx5IG9mIHdhdGVyIzgzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzgzLjEwLjE1LjAyLjAwI1dhdGVyIHJlc291cmNlIG1hbmFnZW1lbnQjODMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODMuMTAuMTUuMDMuMDAjV2F0ZXIgcXVhbGl0eSBjb250cm9sIG1hbmFnZW1lbnQjODMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODMuMTAuMTUuMDQuMDAjV2F0ZXIgZGlzdHJpYnV0aW9uIG1hbmFnZW1lbnQjODMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODMuMTAuMTUuMDUuMDAjV2F0ZXIgcG9saWN5IGFkdmlzb3J5IHNlcnZpY2VzIzgzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzgzLjEwLjE1LjA2LjAwI1dhdGVyIHRyZWF0bWVudCBzZXJ2aWNlcyM4My4xMC4xNS4wMC4wMAotdW5zcHNjNyM4My4xMC4xNS4wNy4wMCNEZXNhbGluYXRpb24gc2VydmljZXMjODMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODMuMTAuMTUuMDguMDAjVG93biB3YXRlciM4My4xMC4xNS4wMC4wMAotdW5zcHNjNyM4My4xMC4xNS4wOS4wMCNTZXJ2aWNlIHdhdGVyIzgzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzgzLjEwLjE1LjEwLjAwI0NoaWxsZWQgd2F0ZXIjODMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODMuMTAuMTYuMDAuMDAjT2lsIGFuZCBnYXMgdXRpbGl0aWVzIzgzLjEwLjAwLjAwLjAwCi11bnNwc2M3IzgzLjEwLjE2LjAxLjAwI1N1cHBseSBvZiBuYXR1cmFsIGdhcyM4My4xMC4xNi4wMC4wMAotdW5zcHNjNyM4My4xMC4xNi4wMi4wMCNTdXBwbHkgb2YgZnVlbCBvaWwjODMuMTAuMTYuMDAuMDAKLXVuc3BzYzcjODMuMTAuMTYuMDMuMDAjT2lsIHBpcGVsaW5lIHNlcnZpY2VzIzgzLjEwLjE2LjAwLjAwCi11bnNwc2M3IzgzLjEwLjE2LjA0LjAwI0dhcyBwaXBlbGluZSBzZXJ2aWNlcyM4My4xMC4xNi4wMC4wMAotdW5zcHNjNyM4My4xMC4xNi4wNS4wMCNHYXMgZmFjaWxpdHkgY2hhcmdlIzgzLjEwLjE2LjAwLjAwCi11bnNwc2M3IzgzLjEwLjE4LjAwLjAwI0VsZWN0cmljIHV0aWxpdGllcyM4My4xMC4wMC4wMC4wMAotdW5zcHNjNyM4My4xMC4xOC4wMS4wMCNTdXBwbHkgb2Ygc2luZ2xlIHBoYXNlIGVsZWN0cmljaXR5IzgzLjEwLjE4LjAwLjAwCi11bnNwc2M3IzgzLjEwLjE4LjAyLjAwI1N1cHBseSBvZiB0d28gcGhhc2UgZWxlY3RyaWNpdHkjODMuMTAuMTguMDAuMDAKLXVuc3BzYzcjODMuMTAuMTguMDMuMDAjU3VwcGx5IG9mIHRocmVlIHBoYXNlIGVsZWN0cmljaXR5IzgzLjEwLjE4LjAwLjAwCi11bnNwc2M3IzgzLjEwLjE4LjA0LjAwI0VsZWN0cmljIHBvd2VyIHRyYW5zbWlzc2lvbiBzZXJ2aWNlcyM4My4xMC4xOC4wMC4wMAotdW5zcHNjNyM4My4xMC4xOC4wNS4wMCNJbmR1c3RyaWFsIGVsZWN0cmljIHBvd2VyIGRpc3RyaWJ1dGlvbiM4My4xMC4xOC4wMC4wMAotdW5zcHNjNyM4My4xMC4xOC4wNi4wMCNSdXJhbCBlbGVjdHJpY2FsIHBvd2VyIGRpc3RyaWJ1dGlvbiM4My4xMC4xOC4wMC4wMAotdW5zcHNjNyM4My4xMC4xOC4wNy4wMCNNdW5pY2lwYWwgZWxlY3RyaWMgcG93ZXIgZGlzdHJpYnV0aW9uIzgzLjEwLjE4LjAwLjAwCi11bnNwc2M3IzgzLjEwLjE5LjAwLjAwI0VuZXJneSBjb25zZXJ2YXRpb24jODMuMTAuMDAuMDAuMDAKLXVuc3BzYzcjODMuMTAuMTkuMDEuMDAjRW5lcmd5IGNvbnNlcnZhdGlvbiBwcm9ncmFtcyM4My4xMC4xOS4wMC4wMAotdW5zcHNjNyM4My4xMC4xOS4wMi4wMCNFbmVyZ3kgdXNlIHJlZHVjdGlvbiBtZWFzdXJlcyM4My4xMC4xOS4wMC4wMAotdW5zcHNjNyM4My4xMC4yMC4wMC4wMCNGdW5lcmFsIHNlcnZpY2VzIzgzLjEwLjAwLjAwLjAwCi11bnNwc2M3IzgzLjEwLjIwLjAxLjAwI0dyYXZlIGRpZ2dpbmcjODMuMTAuMjAuMDAuMDAKLXVuc3BzYzcjODMuMTEuMDAuMDAuMDAjVGVsZWNvbW11bmljYXRpb25zIG1lZGlhIHNlcnZpY2VzIzgzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzgzLjExLjE1LjAwLjAwI0xvY2FsIGFuZCBsb25nIGRpc3RhbmNlIHRlbGVwaG9uZSBjb21tdW5pY2F0aW9ucyM4My4xMS4wMC4wMC4wMAotdW5zcHNjNyM4My4xMS4xNS4wMS4wMCNMb2NhbCB0ZWxlcGhvbmUgc2VydmljZSM4My4xMS4xNS4wMC4wMAotdW5zcHNjNyM4My4xMS4xNS4wMi4wMCNMb25nIGRpc3RhbmNlIHRlbGVwaG9uZSBzZXJ2aWNlcyM4My4xMS4xNS4wMC4wMAotdW5zcHNjNyM4My4xMS4xNS4wMy4wMCNQYXkgcGhvbmUgcHJvdmlkZXIgc2VydmljZXMjODMuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODMuMTEuMTUuMDQuMDAjUHJlIHBhaWQgcGhvbmUgY2FyZCBzZXJ2aWNlcyM4My4xMS4xNS4wMC4wMAotdW5zcHNjNyM4My4xMS4xNS4wNS4wMCNEaXJlY3RvcnkgYXNzaXN0YW5jZSBzZXJ2aWNlcyM4My4xMS4xNS4wMC4wMAotdW5zcHNjNyM4My4xMS4xNS4wNi4wMCNDb25mZXJlbmNlIGNhbGxpbmcgc2VydmljZXMjODMuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODMuMTEuMTUuMDcuMDAjQ2FsbCBjZW50cmUgYnVyZWF1IHNlcnZpY2VzIzgzLjExLjE1LjAwLjAwCi11bnNwc2M3IzgzLjExLjE1LjA4LjAwI1RvbGwgZnJlZSBpbmJvdW5kIHRlbGVwaG9uZSBzZXJ2aWNlIzgzLjExLjE1LjAwLjAwCi11bnNwc2M3IzgzLjExLjE1LjA5LjAwI1RlbGVwaG9uZSBlcXVpcG1lbnQgcmVwYWlyIHNlcnZpY2VzIzgzLjExLjE1LjAwLjAwCi11bnNwc2M3IzgzLjExLjE2LjAwLjAwI01vYmlsZSBjb21tdW5pY2F0aW9ucyBzZXJ2aWNlcyM4My4xMS4wMC4wMC4wMAotdW5zcHNjNyM4My4xMS4xNi4wMS4wMCNUZWxlY29tbXVuaWNhdGlvbiBzaWduYWwgZW5oYW5jZW1lbnQgbmV0d29yayBzZXJ2aWNlcyM4My4xMS4xNi4wMC4wMAotdW5zcHNjNyM4My4xMS4xNi4wMi4wMCNTYXRlbGxpdGUgb3IgZWFydGggY29tbXVuaWNhdGlvbiBzeXN0ZW1zIHNlcnZpY2VzIzgzLjExLjE2LjAwLjAwCi11bnNwc2M3IzgzLjExLjE2LjAzLjAwI0NlbGx1bGFyIHRlbGVwaG9uZSBzZXJ2aWNlcyM4My4xMS4xNi4wMC4wMAotdW5zcHNjNyM4My4xMS4xNi4wNC4wMCNQYWdpbmcgc2VydmljZXMjODMuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODMuMTEuMTcuMDAuMDAjRmFjc2ltaWxlIGFuZCB0ZWxlZ3JhcGggc2VydmljZXMjODMuMTEuMDAuMDAuMDAKLXVuc3BzYzcjODMuMTEuMTcuMDEuMDAjRmFjc2ltaWxlIHRyYW5zbWlzc2lvbiBzZXJ2aWNlcyM4My4xMS4xNy4wMC4wMAotdW5zcHNjNyM4My4xMS4xNy4wMi4wMCNUZWxlZ3JhcGggdHJhbnNtaXNzaW9uIHNlcnZpY2VzIzgzLjExLjE3LjAwLjAwCi11bnNwc2M3IzgzLjExLjE3LjAzLjAwI1RlbGV4IHRyYW5zbWlzc2lvbiBzZXJ2aWNlcyM4My4xMS4xNy4wMC4wMAotdW5zcHNjNyM4My4xMS4xOC4wMC4wMCNUZWxldmlzaW9uIHNlcnZpY2VzIzgzLjExLjAwLjAwLjAwCi11bnNwc2M3IzgzLjExLjE4LjAxLjAwI0NhYmxlIHRlbGV2aXNpb24gc2VydmljZXMjODMuMTEuMTguMDAuMDAKLXVuc3BzYzcjODMuMTEuMTguMDIuMDAjQ2xvc2VkIGNpcmN1aXQgdGVsZXZpc2lvbiBzZXJ2aWNlcyM4My4xMS4xOC4wMC4wMAotdW5zcHNjNyM4My4xMS4xOC4wMy4wMCNUZWxldmlzaW9uIGFudGVubmEgY29uc3RydWN0aW9uIG9yIHJlbnRhbCBzZXJ2aWNlcyM4My4xMS4xOC4wMC4wMAotdW5zcHNjNyM4My4xMS4xOC4wNC4wMCNUZWxldmlzaW9uIGJyb2FkY2FzdGluZyBzdGF0aW9uIG1hbmFnZW1lbnQjODMuMTEuMTguMDAuMDAKLXVuc3BzYzcjODMuMTEuMTkuMDAuMDAjUmFkaW8gc2VydmljZXMjODMuMTEuMDAuMDAuMDAKLXVuc3BzYzcjODMuMTEuMTkuMDEuMDAjUmFkaW8gYnJvYWRjYXN0aW5nIHN0YXRpb24gbWFuYWdlbWVudCM4My4xMS4xOS4wMC4wMAotdW5zcHNjNyM4My4xMS4xOS4wMi4wMCNBbWF0ZXVyIHJhZGlvIG5ldHdvcmtzIG9yIHNlcnZpY2VzIzgzLjExLjE5LjAwLjAwCi11bnNwc2M3IzgzLjExLjE5LjAzLjAwI1NtYWxsIHNjYWxlIHJhZGlvIHN5c3RlbXMjODMuMTEuMTkuMDAuMDAKLXVuc3BzYzcjODMuMTEuMTkuMDQuMDAjUmFkaW8gc3R1ZGlvIG9yIGVxdWlwbWVudCBzZXJ2aWNlcyM4My4xMS4xOS4wMC4wMAotdW5zcHNjNyM4My4xMS4yMC4wMC4wMCNGaWJlciB0ZWxlY29tbXVuaWNhdGlvbnMgc2VydmljZXMjODMuMTEuMDAuMDAuMDAKLXVuc3BzYzcjODMuMTEuMjAuMDEuMDAjRGFyayBmaWJlciM4My4xMS4yMC4wMC4wMAotdW5zcHNjNyM4My4xMS4yMC4wMi4wMCNEZW5zZSB3YXZlbGVuZ3RoIGRpdmlzaW9uIG11bHRpcGxleGluZyBEV0RNIzgzLjExLjIwLjAwLjAwCi11bnNwc2M3IzgzLjExLjIwLjAzLjAwI1dhdmUgZGl2aXNpb24gbXVsdGlwbGV4aW5nIFdETSM4My4xMS4yMC4wMC4wMAotdW5zcHNjNyM4My4xMS4yMC4wNC4wMCNPY3ggb3B0aWNhbCBjYXJyaWVyIHNlcnZpY2UjODMuMTEuMjAuMDAuMDAKLXVuc3BzYzcjODMuMTEuMjEuMDAuMDAjU3dpdGNoZWQgZGlhbCB1cCBhbmQgbGVhc2VkIGRlZGljYXRlZCBsaW5lIGNpcmN1aXQgdGVsZWNvbW11bmljYXRpb25zIHNlcnZpY2VzIzgzLjExLjAwLjAwLjAwCi11bnNwc2M3IzgzLjExLjIxLjAxLjAwI0hpZ2ggc3BlZWQgY2lyY3VpdCBzd2l0Y2hlZCBkaWFsIHVwIHNlcnZpY2VzIzgzLjExLjIxLjAwLjAwCi11bnNwc2M3IzgzLjExLjIxLjAyLjAwI0lTRE4gaW50ZWdyYXRlZCBzZXJ2aWNlcyBkaWdpdGFsIG5ldHdvcmsgc2VydmljZXMjODMuMTEuMjEuMDAuMDAKLXVuc3BzYzcjODMuMTEuMjEuMDMuMDAjUG9pbnQgdG8gcG9pbnQgZGlnaXRhbCB0ZWxlY29tbXVuaWNhdGlvbnMgY2lyY3VpdCM4My4xMS4yMS4wMC4wMAotdW5zcHNjNyM4My4xMS4yMS4wNC4wMCNNdWx0aSBwb2ludCBhbmFsb2cgdGVsZWNvbW11bmljYXRpb25zIGNpcmN1aXQjODMuMTEuMjEuMDAuMDAKLXVuc3BzYzcjODMuMTEuMjEuMDUuMDAjUG9pbnQgdG8gcG9pbnQgYW5hbG9nIHRlbGVjb21tdW5pY2F0aW9ucyBjaXJjdWl0IzgzLjExLjIxLjAwLjAwCi11bnNwc2M3IzgzLjExLjIxLjA2LjAwI3hEU0wgZGlnaXRhbCBzdWJzY3JpYmVyIGxpbmUjODMuMTEuMjEuMDAuMDAKLXVuc3BzYzcjODMuMTEuMjIuMDAuMDAjRW5oYW5jZWQgdGVsZWNvbW11bmljYXRpb25zIHNlcnZpY2VzIzgzLjExLjAwLjAwLjAwCi11bnNwc2M3IzgzLjExLjIyLjAxLjAwI0FUTSBhc3luY3Jvbm91cyB0cmFuc2ZlciBtb2RlIG1hbmFnZWQgbmV0d29yayBzZXJ2aWNlcyM4My4xMS4yMi4wMC4wMAotdW5zcHNjNyM4My4xMS4yMi4wMi4wMCNGcmFtZSByZWxheSBwdWJsaWMgbWFuYWdlZCBuZXR3b3JrIHNlcnZpY2VzIzgzLjExLjIyLjAwLjAwCi11bnNwc2M3IzgzLjExLjIyLjAzLjAwI1ZQTiB2aXJ0dWFsIHByaXZhdGUgbmV0d29yayBtYW5hZ2VkIG5ldHdvcmsgc2VydmljZXMjODMuMTEuMjIuMDAuMDAKLXVuc3BzYzcjODMuMTEuMjIuMDQuMDAjWDc1IG1hbmFnZWQgbmV0d29yayBzZXJ2aWNlcyM4My4xMS4yMi4wMC4wMAotdW5zcHNjNyM4My4xMS4yMi4wNS4wMCNYMjUgbWFuYWdlZCBuZXR3b3JrIHNlcnZpY2VzIzgzLjExLjIyLjAwLjAwCi11bnNwc2M3IzgzLjEyLjAwLjAwLjAwI0luZm9ybWF0aW9uIHNlcnZpY2VzIzgzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzgzLjEyLjE1LjAwLjAwI0xpYnJhcmllcyM4My4xMi4wMC4wMC4wMAotdW5zcHNjNyM4My4xMi4xNS4wMS4wMCNHZW5lcmFsIG11bmljaXBhbCBwdWJsaWMgdXNlIGxpYnJhcmllcyM4My4xMi4xNS4wMC4wMAotdW5zcHNjNyM4My4xMi4xNS4wMi4wMCNDb2xsZWdlIG9yIHVuaXZlcnNpdHkgbGlicmFyaWVzIzgzLjEyLjE1LjAwLjAwCi11bnNwc2M3IzgzLjEyLjE1LjAzLjAwI1ByaXZhdGVseSBvd25lZCBsaWJyYXJpZXMjODMuMTIuMTUuMDAuMDAKLXVuc3BzYzcjODMuMTIuMTUuMDQuMDAjTmF0aW9uYWwgZ292ZXJubWVudCBvciBtaWxpdGFyeSBwb3N0IGxpYnJhcmllcyM4My4xMi4xNS4wMC4wMAotdW5zcHNjNyM4My4xMi4xNi4wMC4wMCNJbmZvcm1hdGlvbiBjZW50ZXJzIzgzLjEyLjAwLjAwLjAwCi11bnNwc2M3IzgzLjEyLjE2LjAxLjAwI0NoYW1iZXJzIG9mIGNvbW1lcmNlIzgzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzgzLjEyLjE2LjAyLjAwI1RvdXJpc20gYm9hcmQgc2VydmljZXMjODMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODMuMTIuMTYuMDMuMDAjQ29tcHV0ZXJpemVkIGluZm9ybWF0aW9uIHJldHJpZXZhbCBzeXN0ZW1zIzgzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzgzLjEyLjE2LjA0LjAwI09ubGluZSBkYXRhYmFzZSBpbmZvcm1hdGlvbiByZXRyaWV2YWwgc3lzdGVtcyM4My4xMi4xNi4wMC4wMAotdW5zcHNjNyM4My4xMi4xNi4wNS4wMCNSZW1vdGUgZGF0YWJhc2UgaW5mb3JtYXRpb24gcmV0cmlldmFsIHNlcnZpY2VzIzgzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzgzLjEyLjE2LjA2LjAwI1NraXAgdHJhY2luZyM4My4xMi4xNi4wMC4wMAotdW5zcHNjNyM4My4xMi4xNy4wMC4wMCNNYXNzIGNvbW11bmljYXRpb24gc2VydmljZXMjODMuMTIuMDAuMDAuMDAKLXVuc3BzYzcjODMuMTIuMTcuMDEuMDAjVGVsZXZpc2lvbiByZWxhdGVkIHNlcnZpY2VzIzgzLjEyLjE3LjAwLjAwCi11bnNwc2M3IzgzLjEyLjE3LjAyLjAwI1JhZGlvIHJlbGF0ZWQgc2VydmljZXMjODMuMTIuMTcuMDAuMDAKLXVuc3BzYzcjODMuMTIuMTcuMDMuMDAjSW50ZXJuZXQgcmVsYXRlZCBzZXJ2aWNlcyM4My4xMi4xNy4wMC4wMAotdW5zcHNjNyM4My4xMi4xNy4wNC4wMCNDaXRpemVuIHdhcm5pbmcgc3lzdGVtcyM4My4xMi4xNy4wMC4wMAotdW5zcHNjNyM4NC4wMC4wMC4wMC4wMCNGaW5hbmNpYWwgYW5kIEluc3VyYW5jZSBTZXJ2aWNlcyM4NC4wMC4wMC4wMC4wMAotdW5zcHNjNyM4NC4xMC4wMC4wMC4wMCNEZXZlbG9wbWVudCBmaW5hbmNlIzg0LjAwLjAwLjAwLjAwCi11bnNwc2M3Izg0LjEwLjE1LjAwLjAwI0RldmVsb3BtZW50IGFzc2lzdGFuY2UjODQuMTAuMDAuMDAuMDAKLXVuc3BzYzcjODQuMTAuMTUuMDEuMDAjRmluYW5jaWFsIGFzc2lzdGFuY2UjODQuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODQuMTAuMTUuMDIuMDAjU2F2aW5ncyBtb2JpbGl6YXRpb24gcHJvZ3JhbXMjODQuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODQuMTAuMTUuMDMuMDAjR3VhcmFudGVlIGFncmVlbWVudHMjODQuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODQuMTAuMTYuMDAuMDAjQWlkIGZpbmFuY2luZyM4NC4xMC4wMC4wMC4wMAotdW5zcHNjNyM4NC4xMC4xNi4wMS4wMCNDbyBmaW5hbmNpbmcjODQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjODQuMTAuMTYuMDIuMDAjQmkgbGF0ZXJhbCBvciBtdWx0aSBsYXRlcmFsIGFpZCM4NC4xMC4xNi4wMC4wMAotdW5zcHNjNyM4NC4xMC4xNi4wMy4wMCNOb24gZ292ZXJubWVudGFsIGFpZCM4NC4xMC4xNi4wMC4wMAotdW5zcHNjNyM4NC4xMC4xNi4wNC4wMCNHb3Zlcm5tZW50IGFpZCM4NC4xMC4xNi4wMC4wMAotdW5zcHNjNyM4NC4xMC4xNy4wMC4wMCNEZWJ0IG1hbmFnZW1lbnQjODQuMTAuMDAuMDAuMDAKLXVuc3BzYzcjODQuMTAuMTcuMDEuMDAjRGVidCBuZWdvdGlhdGlvbiM4NC4xMC4xNy4wMC4wMAotdW5zcHNjNyM4NC4xMC4xNy4wMi4wMCNEZWJ0IHJlb3JnYW5pemF0aW9uIzg0LjEwLjE3LjAwLjAwCi11bnNwc2M3Izg0LjEwLjE3LjAzLjAwI0RlYnQgc2VydmljaW5nIzg0LjEwLjE3LjAwLjAwCi11bnNwc2M3Izg0LjEwLjE3LjA0LjAwI0RlYnQgY29sbGVjdGlvbiBzZXJ2aWNlcyM4NC4xMC4xNy4wMC4wMAotdW5zcHNjNyM4NC4xMC4xNy4wNS4wMCNSZXBvc3Nlc3Npb24gc2VydmljZXMjODQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjODQuMTEuMDAuMDAuMDAjQWNjb3VudGluZyBhbmQgYXVkaXRpbmcjODQuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODQuMTEuMTUuMDAuMDAjQWNjb3VudGluZyBzZXJ2aWNlcyM4NC4xMS4wMC4wMC4wMAotdW5zcHNjNyM4NC4xMS4xNS4wMS4wMCNDb3N0IGFjY291bnRpbmcjODQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODQuMTEuMTUuMDIuMDAjRmluYW5jaWFsIGFjY291bnRpbmcjODQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODQuMTEuMTUuMDMuMDAjVGF4IGFjY291bnRpbmcjODQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODQuMTEuMTUuMDQuMDAjQm9va2tlZXBpbmcgc2VydmljZXMjODQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODQuMTEuMTUuMDUuMDAjUGF5cm9sbCBhY2NvdW50aW5nIHNlcnZpY2VzIzg0LjExLjE1LjAwLjAwCi11bnNwc2M3Izg0LjExLjE1LjA2LjAwI0JpbGxpbmcgc2VydmljZXMjODQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODQuMTEuMTUuMDcuMDAjSW52ZW50b3J5IGFjY291bnRpbmcjODQuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODQuMTEuMTYuMDAuMDAjQXVkaXQgc2VydmljZXMjODQuMTEuMDAuMDAuMDAKLXVuc3BzYzcjODQuMTEuMTYuMDEuMDAjWWVhciBlbmQgYXVkaXRzIzg0LjExLjE2LjAwLjAwCi11bnNwc2M3Izg0LjExLjE2LjAyLjAwI1F1YXJ0ZXJseSByZXZpZXdzIzg0LjExLjE2LjAwLjAwCi11bnNwc2M3Izg0LjExLjE2LjAzLjAwI0ludGVybmFsIGF1ZGl0cyM4NC4xMS4xNi4wMC4wMAotdW5zcHNjNyM4NC4xMS4xNy4wMC4wMCNDb3Jwb3JhdGUgZmluYW5jZSM4NC4xMS4wMC4wMC4wMAotdW5zcHNjNyM4NC4xMS4xNy4wMS4wMCNUcmVhc3VyeSBzZXJ2aWNlcyM4NC4xMS4xNy4wMC4wMAotdW5zcHNjNyM4NC4xMS4xNy4wMi4wMCNJbnZlc3RvciByZWxhdGlvbnMgc2VydmljZXMgb3IgcHJvZ3JhbXMjODQuMTEuMTcuMDAuMDAKLXVuc3BzYzcjODQuMTEuMTcuMDMuMDAjQnVkZ2V0IHByZXBhcmF0aW9uIG9yIHJldmlldyBzZXJ2aWNlcyM4NC4xMS4xNy4wMC4wMAotdW5zcHNjNyM4NC4xMS4xOC4wMC4wMCNUYXhhdGlvbiBpc3N1ZXMgYW5kIHByZXBhcmF0aW9uIzg0LjExLjAwLjAwLjAwCi11bnNwc2M3Izg0LjExLjE4LjAxLjAwI1RheCBwcmVwYXJlcnMjODQuMTEuMTguMDAuMDAKLXVuc3BzYzcjODQuMTEuMTguMDIuMDAjVGF4IGFkdmlzb3J5IHNlcnZpY2VzIzg0LjExLjE4LjAwLjAwCi11bnNwc2M3Izg0LjEyLjAwLjAwLjAwI0JhbmtpbmcgYW5kIGludmVzdG1lbnQjODQuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODQuMTIuMTUuMDAuMDAjQmFua2luZyBpbnN0aXR1dGlvbnMjODQuMTIuMDAuMDAuMDAKLXVuc3BzYzcjODQuMTIuMTUuMDEuMDAjUHJpdmF0ZWx5IG93bmVkIGJhbmtzIzg0LjEyLjE1LjAwLjAwCi11bnNwc2M3Izg0LjEyLjE1LjAyLjAwI1B1YmxpY2x5IG93bmVkIGJhbmtzIzg0LjEyLjE1LjAwLjAwCi11bnNwc2M3Izg0LjEyLjE1LjAzLjAwI0NyZWRpdCB1bmlvbnMjODQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjODQuMTIuMTUuMDQuMDAjRGV2ZWxvcG1lbnQgZmluYW5jZSBpbnN0aXR1dGlvbnMjODQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjODQuMTIuMTYuMDAuMDAjRnVuZHMgdHJhbnNmZXIgYW5kIGNsZWFyYW5jZSBhbmQgZXhjaGFuZ2Ugc2VydmljZXMjODQuMTIuMDAuMDAuMDAKLXVuc3BzYzcjODQuMTIuMTYuMDEuMDAjRnVuZHMgY2xlYXJhbmNlIHNlcnZpY2VzIzg0LjEyLjE2LjAwLjAwCi11bnNwc2M3Izg0LjEyLjE2LjAyLjAwI0xldHRlciBvZiBjcmVkaXQgc2VydmljZXMjODQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODQuMTIuMTYuMDMuMDAjQ3VycmVuY3kgZXhjaGFuZ2Ugc2VydmljZXMjODQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODQuMTIuMTYuMDQuMDAjU3BvdCBleGNoYW5nZSB0cmFuc2FjdGlvbiBzZXJ2aWNlcyM4NC4xMi4xNi4wMC4wMAotdW5zcHNjNyM4NC4xMi4xNi4wNS4wMCNDdXJyZW5jeSBjb252ZXJzaW9uIHNlcnZpY2UjODQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODQuMTIuMTYuMDYuMDAjUmVtaXR0YW5jZSBwcm9jZXNzaW5nIHNlcnZpY2VzIzg0LjEyLjE2LjAwLjAwCi11bnNwc2M3Izg0LjEyLjE3LjAwLjAwI0ludmVzdG1lbnQgYWR2aWNlIzg0LjEyLjAwLjAwLjAwCi11bnNwc2M3Izg0LjEyLjE3LjAxLjAwI0ludmVzdG1lbnQgYWR2aXNlcnMjODQuMTIuMTcuMDAuMDAKLXVuc3BzYzcjODQuMTIuMTcuMDIuMDAjSW52ZXN0bWVudCBwb2xpY3kjODQuMTIuMTcuMDAuMDAKLXVuc3BzYzcjODQuMTIuMTcuMDMuMDAjSW52ZXN0bWVudCBhbmFseXNpcyM4NC4xMi4xNy4wMC4wMAotdW5zcHNjNyM4NC4xMi4xNy4wNC4wMCNJbnZlc3RtZW50IGFncmVlbWVudHMjODQuMTIuMTcuMDAuMDAKLXVuc3BzYzcjODQuMTIuMTcuMDUuMDAjTWFya2V0IGRhdGEjODQuMTIuMTcuMDAuMDAKLXVuc3BzYzcjODQuMTIuMTguMDAuMDAjU2VjdXJpdGllcyBhbmQgY29tbW9kaXRpZXMgbWFya2V0cyBzZXJ2aWNlcyM4NC4xMi4wMC4wMC4wMAotdW5zcHNjNyM4NC4xMi4xOC4wMS4wMCNTdG9jayBtYXJrZXQgdHJhZGluZyBzZXJ2aWNlcyM4NC4xMi4xOC4wMC4wMAotdW5zcHNjNyM4NC4xMi4xOC4wMi4wMCNDb21tb2RpdGllcyBvciBmdXR1cmVzIG1hcmtldCBzZXJ2aWNlcyM4NC4xMi4xOC4wMC4wMAotdW5zcHNjNyM4NC4xMi4xOC4wMy4wMCNHb3Zlcm5tZW50IGJvbmRzIzg0LjEyLjE4LjAwLjAwCi11bnNwc2M3Izg0LjEyLjE4LjA0LjAwI1ByaXZhdGVseSBpc3N1ZWQgYm9uZHMjODQuMTIuMTguMDAuMDAKLXVuc3BzYzcjODQuMTIuMTguMDUuMDAjUHJlY2lvdXMgbWV0YWxzIG1hcmtldCBzZXJ2aWNlcyM4NC4xMi4xOC4wMC4wMAotdW5zcHNjNyM4NC4xMi4xOS4wMC4wMCNNb3J0Z2FnZSBiYW5raW5nIzg0LjEyLjAwLjAwLjAwCi11bnNwc2M3Izg0LjEyLjE5LjAxLjAwI0hvdXNpbmcgZmluYW5jZSM4NC4xMi4xOS4wMC4wMAotdW5zcHNjNyM4NC4xMi4xOS4wMi4wMCNSZSBmaW5hbmNpbmcgc2VydmljZXMjODQuMTIuMTkuMDAuMDAKLXVuc3BzYzcjODQuMTIuMTkuMDMuMDAjQ29tbWVyY2lhbCBtb3J0Z2FnZSBmaW5hbmNlIzg0LjEyLjE5LjAwLjAwCi11bnNwc2M3Izg0LjEyLjIwLjAwLjAwI0Nhc2ggdmF1bHQgc2VydmljZXMjODQuMTIuMDAuMDAuMDAKLXVuc3BzYzcjODQuMTIuMjAuMDEuMDAjRGVwb3NpdCB2ZXJpZmljYXRpb24gc2VydmljZXMjODQuMTIuMjAuMDAuMDAKLXVuc3BzYzcjODQuMTMuMDAuMDAuMDAjSW5zdXJhbmNlIGFuZCByZXRpcmVtZW50IHNlcnZpY2VzIzg0LjAwLjAwLjAwLjAwCi11bnNwc2M3Izg0LjEzLjE1LjAwLjAwI0luc3VyYW5jZSBzZXJ2aWNlcyBmb3Igc3RydWN0dXJlcyBhbmQgcHJvcGVydHkgYW5kIHBvc3Nlc3Npb25zIzg0LjEzLjAwLjAwLjAwCi11bnNwc2M3Izg0LjEzLjE1LjAxLjAwI0J1aWxkaW5nIG9yIGJ1aWxkaW5nIGNvbnRlbnRzIGluc3VyYW5jZSM4NC4xMy4xNS4wMC4wMAotdW5zcHNjNyM4NC4xMy4xNS4wMi4wMCNIb21lb3duZXJzIG9yIHJlbnRlcnMgaW5zdXJhbmNlIzg0LjEzLjE1LjAwLjAwCi11bnNwc2M3Izg0LjEzLjE1LjAzLjAwI0NhciBvciB0cnVjayBpbnN1cmFuY2UjODQuMTMuMTUuMDAuMDAKLXVuc3BzYzcjODQuMTMuMTUuMDQuMDAjQ2FyZ28gaW5zdXJhbmNlIzg0LjEzLjE1LjAwLjAwCi11bnNwc2M3Izg0LjEzLjE1LjA1LjAwI01hcmluZSBpbnN1cmFuY2UjODQuMTMuMTUuMDAuMDAKLXVuc3BzYzcjODQuMTMuMTUuMDYuMDAjUmVpbnN1cmFuY2Ugc2VydmljZXMjODQuMTMuMTUuMDAuMDAKLXVuc3BzYzcjODQuMTMuMTYuMDAuMDAjTGlmZSBhbmQgaGVhbHRoIGFuZCBhY2NpZGVudCBpbnN1cmFuY2UjODQuMTMuMDAuMDAuMDAKLXVuc3BzYzcjODQuMTMuMTYuMDEuMDAjTGlmZSBpbnN1cmFuY2UjODQuMTMuMTYuMDAuMDAKLXVuc3BzYzcjODQuMTMuMTYuMDIuMDAjSGVhbHRoIG9yIGhvc3BpdGFsaXphdGlvbiBpbnN1cmFuY2UjODQuMTMuMTYuMDAuMDAKLXVuc3BzYzcjODQuMTMuMTYuMDMuMDAjQWNjaWRlbnRhbCBpbmp1cnkgaW5zdXJhbmNlIzg0LjEzLjE2LjAwLjAwCi11bnNwc2M3Izg0LjEzLjE2LjA0LjAwI0Rpc2FiaWxpdHkgaW5zdXJhbmNlIzg0LjEzLjE2LjAwLjAwCi11bnNwc2M3Izg0LjEzLjE2LjA1LjAwI1dvcmttZW5zIGluc3VyYW5jZSM4NC4xMy4xNi4wMC4wMAotdW5zcHNjNyM4NC4xMy4xNi4wNi4wMCNVbmVtcGxveW1lbnQgaW5zdXJhbmNlIzg0LjEzLjE2LjAwLjAwCi11bnNwc2M3Izg0LjEzLjE2LjA3LjAwI0xpYWJpbGl0eSBpbnN1cmFuY2UjODQuMTMuMTYuMDAuMDAKLXVuc3BzYzcjODQuMTMuMTcuMDAuMDAjUGVuc2lvbiBmdW5kcyM4NC4xMy4wMC4wMC4wMAotdW5zcHNjNyM4NC4xMy4xNy4wMS4wMCNFbXBsb3llciBhZG1pbmlzdGVyZWQgcGVuc2lvbiBmdW5kcyM4NC4xMy4xNy4wMC4wMAotdW5zcHNjNyM4NC4xMy4xNy4wMi4wMCNVbmlvbiBvciBndWlsZCBhZG1pbmlzdGVyZWQgcGVuc2lvbiBmdW5kcyM4NC4xMy4xNy4wMC4wMAotdW5zcHNjNyM4NC4xMy4xOC4wMC4wMCNSZXRpcmVtZW50IGZ1bmRzIzg0LjEzLjAwLjAwLjAwCi11bnNwc2M3Izg0LjEzLjE4LjAxLjAwI1NlbGYgZGlyZWN0ZWQgb3IgZW1wbG95ZXIgc3BvbnNvcmVkIHJldGlyZW1lbnQgZnVuZHMjODQuMTMuMTguMDAuMDAKLXVuc3BzYzcjODQuMTMuMTguMDIuMDAjU2VsZiBkaXJlY3RlZCBvciBzZWxmIGluaXRpYXRlZCByZXRpcmVtZW50IHBsYW5zIzg0LjEzLjE4LjAwLjAwCi11bnNwc2M3Izg0LjE0LjAwLjAwLjAwI0NyZWRpdCBhZ2VuY2llcyM4NC4wMC4wMC4wMC4wMAotdW5zcHNjNyM4NC4xNC4xNS4wMC4wMCNHb3Zlcm5tZW50YWwgY3JlZGl0IGFnZW5jaWVzIzg0LjE0LjAwLjAwLjAwCi11bnNwc2M3Izg0LjE0LjE1LjAxLjAwI0Zhcm0gY3JlZGl0IHNlcnZpY2VzIzg0LjE0LjE1LjAwLjAwCi11bnNwc2M3Izg0LjE0LjE1LjAyLjAwI1NtYWxsIGJ1c2luZXNzIGxvYW4gYWdlbmNpZXMjODQuMTQuMTUuMDAuMDAKLXVuc3BzYzcjODQuMTQuMTUuMDMuMDAjTWlub3JpdHkgb3duZWQgYnVzaW5lc3MgcHJvZ3JhbXMjODQuMTQuMTUuMDAuMDAKLXVuc3BzYzcjODQuMTQuMTYuMDAuMDAjUGVyc29uYWwgY3JlZGl0IGFnZW5jaWVzIzg0LjE0LjAwLjAwLjAwCi11bnNwc2M3Izg0LjE0LjE2LjAxLjAwI0NvbnN1bWVyIGNyZWRpdCBnYXRoZXJpbmcgb3IgcmVwb3J0aW5nIHNlcnZpY2VzIzg0LjE0LjE2LjAwLjAwCi11bnNwc2M3Izg0LjE0LjE2LjAyLjAwI0NyZWRpdCBjYXJkIHNlcnZpY2UgcHJvdmlkZXJzIzg0LjE0LjE2LjAwLjAwCi11bnNwc2M3Izg0LjE0LjE3LjAwLjAwI0J1c2luZXNzIGNyZWRpdCBhZ2VuY2llcyM4NC4xNC4wMC4wMC4wMAotdW5zcHNjNyM4NC4xNC4xNy4wMS4wMCNCdXNpbmVzcyBjcmVkaXQgZ2F0aGVyaW5nIG9yIHJlcG9ydGluZyBzZXJ2aWNlcyM4NC4xNC4xNy4wMC4wMAotdW5zcHNjNyM4NC4xNC4xNy4wMi4wMCNWYWx1ZSBhZGRlZCBuZXR3b3JrIChWQU4pIHNlcnZpY2VzIzg0LjE0LjE3LjAwLjAwCi11bnNwc2M3Izg1LjAwLjAwLjAwLjAwI0hlYWx0aGNhcmUgU2VydmljZXMjODUuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODUuMTAuMDAuMDAuMDAjQ29tcHJlaGVuc2l2ZSBoZWFsdGggc2VydmljZXMjODUuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODUuMTAuMTUuMDAuMDAjSGVhbHRoY2FyZSBjZW50ZXJzIzg1LjEwLjAwLjAwLjAwCi11bnNwc2M3Izg1LjEwLjE1LjAxLjAwI0VtZXJnZW5jeSBvciBzdXJnaWNhbCBob3NwaXRhbCBzZXJ2aWNlcyM4NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM4NS4xMC4xNS4wMi4wMCNQcml2YXRlIHNwZWNpYWxpemVkIGNsaW5pYyBzZXJ2aWNlcyM4NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM4NS4xMC4xNS4wMy4wMCNNZWRpY2FsIG9mZmljZSBzZXJ2aWNlcyM4NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM4NS4xMC4xNS4wNC4wMCNQc3ljaGlhdHJpYyBob3NwaXRhbCBzZXJ2aWNlcyM4NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM4NS4xMC4xNS4wNS4wMCNSZXNwaXJhdG9yeSBob3NwaXRhbCBzZXJ2aWNlcyM4NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM4NS4xMC4xNS4wNi4wMCNTdWJzdGFuY2UgYWJ1c2UgaG9zcGl0YWwgc2VydmljZXMjODUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTAuMTUuMDcuMDAjVXJnZW50IGNhcmUgY2VudGVycyM4NS4xMC4xNS4wMC4wMAotdW5zcHNjNyM4NS4xMC4xNS4wOC4wMCNNb2JpbGUgaGVhbHRoY2FyZSBjZW50ZXJzIG9yIHNlcnZpY2VzIzg1LjEwLjE1LjAwLjAwCi11bnNwc2M3Izg1LjEwLjE1LjA5LjAwI0d5bmVjb2xvZ2ljYWwgb3Igb2JzdGV0cmljYWwgaG9zcGl0YWwgc2VydmljZXMjODUuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTAuMTYuMDAuMDAjSGVhbHRoY2FyZSBwcm92aWRlciBzdXBwb3J0IHBlcnNvbnMjODUuMTAuMDAuMDAuMDAKLXVuc3BzYzcjODUuMTAuMTYuMDEuMDAjTnVyc2luZyBzZXJ2aWNlcyM4NS4xMC4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMC4xNi4wMi4wMCNNaWR3aWZlcnkgb3IgY2hpbGQgYmlydGggcHJlcGFyYXRpb24gc2VydmljZXMjODUuMTAuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTAuMTYuMDMuMDAjUGVyc29uYWwgY2FyZSBzZXJ2aWNlcyBpbiBzcGVjaWFsaXplZCBpbnN0aXR1dGlvbnMjODUuMTAuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTAuMTYuMDQuMDAjUGh5c2ljaWFucyBwZXJzb25uZWwgYXNzaXN0YW5jZSBzZXJ2aWNlcyM4NS4xMC4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMC4xNi4wNS4wMCNIb21lIGhlYWx0aCBhc3Npc3RhbnRzIzg1LjEwLjE2LjAwLjAwCi11bnNwc2M3Izg1LjEwLjE3LjAwLjAwI0hlYWx0aCBhZG1pbmlzdHJhdGlvbiBzZXJ2aWNlcyM4NS4xMC4wMC4wMC4wMAotdW5zcHNjNyM4NS4xMC4xNy4wMS4wMCNIZWFsdGggcG9saWN5Izg1LjEwLjE3LjAwLjAwCi11bnNwc2M3Izg1LjEwLjE3LjAyLjAwI0hlYWx0aCBsZWdpc2xhdGlvbiBvciByZWd1bGF0aW9ucyM4NS4xMC4xNy4wMC4wMAotdW5zcHNjNyM4NS4xMC4xNy4wMy4wMCNIZWFsdGggc2VydmljZSBwbGFubmluZyM4NS4xMC4xNy4wMC4wMAotdW5zcHNjNyM4NS4xMC4xNy4wNC4wMCNIZWFsdGggZWNvbm9taWNzIzg1LjEwLjE3LjAwLjAwCi11bnNwc2M3Izg1LjEwLjE3LjA1LjAwI1B1YmxpYyBoZWFsdGggYWRtaW5pc3RyYXRpb24jODUuMTAuMTcuMDAuMDAKLXVuc3BzYzcjODUuMTAuMTcuMDYuMDAjVHJhZGl0aW9uYWwgaGVhbHRoY2FyZSBzZXJ2aWNlcyM4NS4xMC4xNy4wMC4wMAotdW5zcHNjNyM4NS4xMC4xNy4wNy4wMCNIZWFsdGggc3lzdGVtcyBldmFsdWF0aW9uIHNlcnZpY2VzIzg1LjEwLjE3LjAwLjAwCi11bnNwc2M3Izg1LjExLjAwLjAwLjAwI0Rpc2Vhc2UgcHJldmVudGlvbiBhbmQgY29udHJvbCM4NS4wMC4wMC4wMC4wMAotdW5zcHNjNyM4NS4xMS4xNS4wMC4wMCNDb250YWdpb3VzIGRpc2Vhc2UgcHJldmVudGlvbiBhbmQgY29udHJvbCM4NS4xMS4wMC4wMC4wMAotdW5zcHNjNyM4NS4xMS4xNS4wMS4wMCNBaWRzIHByZXZlbnRpb24gb3IgY29udHJvbCBzZXJ2aWNlcyM4NS4xMS4xNS4wMC4wMAotdW5zcHNjNyM4NS4xMS4xNS4wMi4wMCNQYXJhc2l0aWMgZGlzZWFzZSBwcmV2ZW50aW9uIG9yIGNvbnRyb2wgc2VydmljZXMjODUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTEuMTUuMDMuMDAjRnVuZ2FsIGRpc2Vhc2VzIHByZXZlbnRpb24gb3IgY29udHJvbCBzZXJ2aWNlcyM4NS4xMS4xNS4wMC4wMAotdW5zcHNjNyM4NS4xMS4xNS4wNC4wMCNUdWJlcmN1bG9zaXMgcHJldmVudGlvbiBvciBjb250cm9sIHNlcnZpY2VzIzg1LjExLjE1LjAwLjAwCi11bnNwc2M3Izg1LjExLjE1LjA1LjAwI0xlcHJvc3kgcHJldmVudGlvbiBvciBjb250cm9sIHNlcnZpY2VzIzg1LjExLjE1LjAwLjAwCi11bnNwc2M3Izg1LjExLjE1LjA2LjAwI0JhY3RlcmlhbCBkaXNlYXNlIHByZXZlbnRpb24gb3IgY29udHJvbCBzZXJ2aWNlcyM4NS4xMS4xNS4wMC4wMAotdW5zcHNjNyM4NS4xMS4xNS4wNy4wMCNTZXh1YWxseSB0cmFuc21pdHRlZCBkaXNlYXNlcyBwcmV2ZW50aW9uIG9yIGNvbnRyb2wgc2VydmljZXMjODUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTEuMTUuMDguMDAjVmlyYWwgZGlzZWFzZXMgcHJldmVudGlvbiBvciBjb250cm9sIHNlcnZpY2VzIzg1LjExLjE1LjAwLjAwCi11bnNwc2M3Izg1LjExLjE1LjA5LjAwI1pvb25vdGljIGRpc2Vhc2VzIHByZXZlbnRpb24gb3IgY29udHJvbCBzZXJ2aWNlcyM4NS4xMS4xNS4wMC4wMAotdW5zcHNjNyM4NS4xMS4xNS4xMC4wMCNWYWNjaW5hdGlvbiBzZXJ2aWNlcyM4NS4xMS4xNS4wMC4wMAotdW5zcHNjNyM4NS4xMS4xNS4xMS4wMCNRdWFyYW50aW5lIHNlcnZpY2VzIzg1LjExLjE1LjAwLjAwCi11bnNwc2M3Izg1LjExLjE1LjEyLjAwI0ltbXVuaXphdGlvbiBzZXJ2aWNlcyM4NS4xMS4xNS4wMC4wMAotdW5zcHNjNyM4NS4xMS4xNS4xMy4wMCNEaXNpbnNlY3RpemF0aW9uIHNlcnZpY2VzIzg1LjExLjE1LjAwLjAwCi11bnNwc2M3Izg1LjExLjE1LjE0LjAwI0VwaWRlbWljcyBwcmV2ZW50aW9uIG9yIGNvbnRyb2wgc2VydmljZXMjODUuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTEuMTYuMDAuMDAjTm9uIGNvbnRhZ2lvdXMgZGlzZWFzZSBwcmV2ZW50aW9uIGFuZCBjb250cm9sIzg1LjExLjAwLjAwLjAwCi11bnNwc2M3Izg1LjExLjE2LjAxLjAwI0JvbmUgZGlzZWFzZXMgcHJldmVudGlvbiBvciBjb250cm9sIHNlcnZpY2VzIzg1LjExLjE2LjAwLjAwCi11bnNwc2M3Izg1LjExLjE2LjAyLjAwI0NhbmNlciBvciBsZXVrZW1pYSBwcmV2ZW50aW9uIG9yIGNvbnRyb2wgc2VydmljZXMjODUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTEuMTYuMDMuMDAjRW5kb2NyaW5lIGRpc2Vhc2VzIHByZXZlbnRpb24gb3IgY29udHJvbCBzZXJ2aWNlcyM4NS4xMS4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMS4xNi4wNC4wMCNIZWFydCBkaXNlYXNlcyBwcmV2ZW50aW9uIG9yIGNvbnRyb2wgc2VydmljZXMjODUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTEuMTYuMDUuMDAjSW1tdW5vbG9naWMgcHJldmVudGlvbiBvciBjb250cm9sIHNlcnZpY2VzIzg1LjExLjE2LjAwLjAwCi11bnNwc2M3Izg1LjExLjE2LjA2LjAwI0FsbGVyZ2llcyBwcmV2ZW50aW9uIG9yIGNvbnRyb2wgc2VydmljZXMjODUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTEuMTYuMDcuMDAjTmV1cm9sb2dpY2FsIGRpc29yZGVycyBwcmV2ZW50aW9uIG9yIGNvbnRyb2wgc2VydmljZXMjODUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTEuMTYuMDguMDAjTnV0cml0aW9uYWwgZGlzZWFzZXMgcHJldmVudGlvbiBvciBjb250cm9sIHNlcnZpY2VzIzg1LjExLjE2LjAwLjAwCi11bnNwc2M3Izg1LjExLjE2LjA5LjAwI1JhZGlhdGlvbiBzaWNrbmVzcyBwcmV2ZW50aW9uIG9yIGNvbnRyb2wgc2VydmljZXMjODUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTEuMTYuMTAuMDAjRGlnZXN0aXZlIHN5c3RlbSBkaXNlYXNlcyBwcmV2ZW50aW9uIG9yIGNvbnRyb2wgc2VydmljZXMjODUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTEuMTYuMTEuMDAjRXllIGRpc2Vhc2UgcHJldmVudGlvbiBvciBjb250cm9sIHNlcnZpY2VzIzg1LjExLjE2LjAwLjAwCi11bnNwc2M3Izg1LjExLjE2LjEyLjAwI1Jlc3BpcmF0b3J5IGRpc2Vhc2VzIHByZXZlbnRpb24gb3IgY29udHJvbCBzZXJ2aWNlcyM4NS4xMS4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMS4xNi4xMy4wMCNUcm9waWNhbCBkaXNlYXNlcyBwcmV2ZW50aW9uIG9yIGNvbnRyb2wgc2VydmljZXMjODUuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTEuMTYuMTQuMDAjQ2hpbGRob29kIGRpc2Vhc2VzIHByZXZlbnRpb24gb3IgY29udHJvbCBzZXJ2aWNlcyM4NS4xMS4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMS4xNi4xNS4wMCNEaWFycmhlYWwgZGlzZWFzZXMgcHJldmVudGlvbiBvciBjb250cm9sIHNlcnZpY2VzIzg1LjExLjE2LjAwLjAwCi11bnNwc2M3Izg1LjExLjE2LjE2LjAwI0FsY29ob2xpc20gcHJldmVudGlvbiBvciBjb250cm9sIHNlcnZpY2VzIzg1LjExLjE2LjAwLjAwCi11bnNwc2M3Izg1LjExLjE2LjE3LjAwI0RydWcgYWRkaWN0aW9uIHByZXZlbnRpb24gb3IgY29udHJvbCBzZXJ2aWNlcyM4NS4xMS4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMS4xNy4wMC4wMCNEaXNlYXNlIHZlY3RvcnMgbWFuYWdlbWVudCBhbmQgY29udHJvbCM4NS4xMS4wMC4wMC4wMAotdW5zcHNjNyM4NS4xMS4xNy4wMS4wMCNUaWNrcyBtYW5hZ2VtZW50IG9yIGNvbnRyb2wgc2VydmljZXMjODUuMTEuMTcuMDAuMDAKLXVuc3BzYzcjODUuMTEuMTcuMDIuMDAjVHNldHNlIGZsaWVzIG1hbmFnZW1lbnQgb3IgY29udHJvbCBzZXJ2aWNlcyM4NS4xMS4xNy4wMC4wMAotdW5zcHNjNyM4NS4xMS4xNy4wMy4wMCNCYWN0ZXJpYSBtYW5hZ2VtZW50IG9yIGNvbnRyb2wgc2VydmljZXMjODUuMTEuMTcuMDAuMDAKLXVuc3BzYzcjODUuMTEuMTcuMDQuMDAjTW9zcXVpdG8gbWFuYWdlbWVudCBvciBjb250cm9sIHNlcnZpY2VzIzg1LjExLjE3LjAwLjAwCi11bnNwc2M3Izg1LjEyLjAwLjAwLjAwI01lZGljYWwgcHJhY3RpY2UjODUuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODUuMTIuMTUuMDAuMDAjUHJpbWFyeSBjYXJlIHByYWN0aXRpb25lcnMgc2VydmljZXMjODUuMTIuMDAuMDAuMDAKLXVuc3BzYzcjODUuMTIuMTUuMDEuMDAjUHJpbWFyeSBjYXJlIHBoeXNpY2lhbnMgaG9tZSB2aXNpdHMgc2VydmljZXMjODUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTIuMTUuMDIuMDAjUHJpbWFyeSBjYXJlIHBoeXNpY2lhbnMgY29uc3VsdGF0aW9uIHNlcnZpY2VzIzg1LjEyLjE1LjAwLjAwCi11bnNwc2M3Izg1LjEyLjE1LjAzLjAwI1ByaW1hcnkgY2FyZSBwaHlzaWNpYW5zIGNvbnRyb2wgc2VydmljZXMjODUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTIuMTUuMDQuMDAjUHJpbWFyeSBjYXJlIHBoeXNpY2lhbnMgZW1lcmdlbmN5IG1lZGljYWwgc2VydmljZXMjODUuMTIuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTIuMTYuMDAuMDAjTWVkaWNhbCBkb2N0b3JzIHNwZWNpYWxpc3Qgc2VydmljZXMjODUuMTIuMDAuMDAuMDAKLXVuc3BzYzcjODUuMTIuMTYuMDEuMDAjR3luZWNvbG9naWMgb3Igb2JzdGV0cmljIHNlcnZpY2VzIzg1LjEyLjE2LjAwLjAwCi11bnNwc2M3Izg1LjEyLjE2LjAyLjAwI05lcGhyb2xvZ3kgc2VydmljZXMjODUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTIuMTYuMDMuMDAjQ2FyZGlvbG9neSBzZXJ2aWNlcyM4NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMi4xNi4wNC4wMCNQdWxvbW9uYXJ5IHNwZWNpYWxpc3RzIHNlcnZpY2VzIzg1LjEyLjE2LjAwLjAwCi11bnNwc2M3Izg1LjEyLjE2LjA1LjAwI0dhc3Ryb2VudGVyb2xvZ2lzdHMgc2VydmljZXMjODUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTIuMTYuMDYuMDAjR2VyaWF0cmljIHNlcnZpY2VzIzg1LjEyLjE2LjAwLjAwCi11bnNwc2M3Izg1LjEyLjE2LjA3LjAwI1BzeWNoaWF0cmlzdCBzZXJ2aWNlcyM4NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMi4xNi4wOC4wMCNQc3ljaG9sb2dpc3RzIHNlcnZpY2VzIzg1LjEyLjE2LjAwLjAwCi11bnNwc2M3Izg1LjEyLjE2LjA5LjAwI1N1cmdlcnkgc2VydmljZXMjODUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTIuMTYuMTAuMDAjT3BodGhhbG1vbG9naXN0cyBzZXJ2aWNlcyM4NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMi4xNi4xMS4wMCNEZXJtYXRvbG9neSBzZXJ2aWNlcyM4NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMi4xNi4xMi4wMCNPcnRob3BlZGljcyBzZXJ2aWNlcyM4NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMi4xNi4xMy4wMCNQZWRpYXRyaWMgc2VydmljZXMjODUuMTIuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTIuMTYuMTQuMDAjTmVydm91cyBzeXN0ZW0gc3BlY2lhbGlzdCBzZXJ2aWNlcyM4NS4xMi4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMi4xNy4wMC4wMCNIZWFsdGhjYXJlIHByb3ZpZGVycyBzcGVjaWFsaXN0cyBzZXJ2aWNlcyM4NS4xMi4wMC4wMC4wMAotdW5zcHNjNyM4NS4xMi4xNy4wMS4wMCNQc3ljaG90aGVyYXBpc3RzIHNlcnZpY2VzIzg1LjEyLjE3LjAwLjAwCi11bnNwc2M3Izg1LjEyLjE3LjAyLjAwI09wdG9tZXRyaXN0cyBzZXJ2aWNlcyM4NS4xMi4xNy4wMC4wMAotdW5zcHNjNyM4NS4xMi4xNy4wMy4wMCNQb2RpYXRyaXN0cyBzZXJ2aWNlcyM4NS4xMi4xNy4wMC4wMAotdW5zcHNjNyM4NS4xMi4xNy4wNC4wMCNTcGVlY2ggc3BlY2lhbGlzdHMgc2VydmljZXMjODUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjODUuMTIuMTcuMDUuMDAjQWN1cHVuY3R1cmlzdHMgc2VydmljZXMjODUuMTIuMTcuMDAuMDAKLXVuc3BzYzcjODUuMTIuMTcuMDYuMDAjQ2hpcm9wcmFjdG9ycyBzZXJ2aWNlcyM4NS4xMi4xNy4wMC4wMAotdW5zcHNjNyM4NS4xMi4xOC4wMC4wMCNNZWRpY2FsIGxhYm9yYXRvcmllcyM4NS4xMi4wMC4wMC4wMAotdW5zcHNjNyM4NS4xMi4xOC4wMS4wMCNCbG9vZCBhbmFseXNpcyBsYWJvcmF0b3J5IHNlcnZpY2VzIzg1LjEyLjE4LjAwLjAwCi11bnNwc2M3Izg1LjEyLjE4LjAyLjAwI0JhY3RlcmlvbG9naWNhbCBsYWJvcmF0b3J5IHNlcnZpY2VzIzg1LjEyLjE4LjAwLjAwCi11bnNwc2M3Izg1LjEyLjE4LjAzLjAwI0Jpb2xvZ2ljYWwgbGFib3JhdG9yeSBzZXJ2aWNlcyM4NS4xMi4xOC4wMC4wMAotdW5zcHNjNyM4NS4xMi4xOC4wNC4wMCNQYXRob2xvZ2ljYWwgbGFib3JhdG9yeSBzZXJ2aWNlcyM4NS4xMi4xOC4wMC4wMAotdW5zcHNjNyM4NS4xMi4xOC4wNS4wMCNVcmluYWx5c2lzIGxhYm9yYXRvcnkgc2VydmljZXMjODUuMTIuMTguMDAuMDAKLXVuc3BzYzcjODUuMTIuMTguMDYuMDAjTmV1cm9sb2dpY2FsIGxhYm9yYXRvcnkgc2VydmljZXMjODUuMTIuMTguMDAuMDAKLXVuc3BzYzcjODUuMTIuMTguMDcuMDAjVWx0cmFzb3VuZCBsYWJvcmF0b3J5IHNlcnZpY2VzIzg1LjEyLjE4LjAwLjAwCi11bnNwc2M3Izg1LjEyLjE4LjA4LjAwI1ggcmF5IGxhYm9yYXRvcnkgc2VydmljZXMjODUuMTIuMTguMDAuMDAKLXVuc3BzYzcjODUuMTIuMTguMDkuMDAjQmxvb2Qgb3Igc3Blcm0gb3IgdHJhbnNwbGFudCBvcmdhbiBiYW5rcyBzZXJ2aWNlcyM4NS4xMi4xOC4wMC4wMAotdW5zcHNjNyM4NS4xMi4xOC4xMC4wMCNEcnVnIG9yIGFsY29ob2wgc2NyZWVuaW5nIzg1LjEyLjE4LjAwLjAwCi11bnNwc2M3Izg1LjEyLjE5LjAwLjAwI1BoYXJtYWNpc3RzIzg1LjEyLjAwLjAwLjAwCi11bnNwc2M3Izg1LjEyLjE5LjAxLjAwI1BoYXJtYWNldXRpY2FsIHByZXBhcmF0aW9uIHNlcnZpY2VzIzg1LjEyLjE5LjAwLjAwCi11bnNwc2M3Izg1LjEyLjE5LjAyLjAwI0NvbW1lcmNpYWwgcGhhcm1hY2V1dGljYWwgc2VydmljZXMjODUuMTIuMTkuMDAuMDAKLXVuc3BzYzcjODUuMTIuMjAuMDAuMDAjRGVudGFsIHNlcnZpY2VzIzg1LjEyLjAwLjAwLjAwCi11bnNwc2M3Izg1LjEyLjIwLjAxLjAwI0RlbnRpc3RzIHNlcnZpY2VzIzg1LjEyLjIwLjAwLjAwCi11bnNwc2M3Izg1LjEyLjIwLjAyLjAwI0RlbnRhbCBoeWdpZW5pc3RzIHNlcnZpY2VzIzg1LjEyLjIwLjAwLjAwCi11bnNwc2M3Izg1LjEyLjIwLjAzLjAwI0RlbnRpc3Qgc3VwcG9ydCBzdGFmZiBzZXJ2aWNlcyM4NS4xMi4yMC4wMC4wMAotdW5zcHNjNyM4NS4xMi4yMC4wNC4wMCNPcmFsIHN1cmdlb25zIHNlcnZpY2VzIzg1LjEyLjIwLjAwLjAwCi11bnNwc2M3Izg1LjEyLjIwLjA1LjAwI09ydGhvZG9udGljIHNlcnZpY2VzIzg1LjEyLjIwLjAwLjAwCi11bnNwc2M3Izg1LjEyLjIxLjAwLjAwI1JlaGFiaWxpdGF0aW9uIHNlcnZpY2VzIzg1LjEyLjAwLjAwLjAwCi11bnNwc2M3Izg1LjEyLjIxLjAxLjAwI1BoeXNpY2FsIHRoZXJhcHkgc2VydmljZXMjODUuMTIuMjEuMDAuMDAKLXVuc3BzYzcjODUuMTIuMjEuMDIuMDAjT2NjdXBhdGlvbmFsIHRoZXJhcHkgc2VydmljZXMjODUuMTIuMjEuMDAuMDAKLXVuc3BzYzcjODUuMTIuMjEuMDMuMDAjUmVoYWJpbGl0YXRpb24gc2VydmljZXMgZm9yIHN1YnN0YW5jZSBhYnVzZSM4NS4xMi4yMS4wMC4wMAotdW5zcHNjNyM4NS4xMi4yMS4wNC4wMCNBdGhsZXRpYyByZWhhYmlsaXRhdGlvbiBzZXJ2aWNlcyM4NS4xMi4yMS4wMC4wMAotdW5zcHNjNyM4NS4xMi4yMS4wNS4wMCNFYXRpbmcgZGlzb3JkZXJzIHNlcnZpY2VzIzg1LjEyLjIxLjAwLjAwCi11bnNwc2M3Izg1LjEyLjIxLjA2LjAwI0JyYWluIG9yIHNwaW5hbCBjb3JkIGluanVyeSBzZXJ2aWNlcyM4NS4xMi4yMS4wMC4wMAotdW5zcHNjNyM4NS4xMi4yMS4wNy4wMCNCbGluZCBvciB2aXNpb24gaW1wYWlyZWQgcmVoYWJpbGl0YXRpb24gc2VydmljZXMjODUuMTIuMjEuMDAuMDAKLXVuc3BzYzcjODUuMTIuMjEuMDguMDAjU3BlZWNoIG9yIGxhbmd1YWdlIHRoZXJhcHkjODUuMTIuMjEuMDAuMDAKLXVuc3BzYzcjODUuMTIuMjEuMDkuMDAjUmVoYWJpbGl0YXRpb24gc2VydmljZXMgZm9yIHBlb3BsZSB3aXRoIGNocm9uaWMgZGlzYWJpbGl0aWVzIzg1LjEyLjIxLjAwLjAwCi11bnNwc2M3Izg1LjEzLjAwLjAwLjAwI01lZGljYWwgc2NpZW5jZSByZXNlYXJjaCBhbmQgZXhwZXJpbWVudGF0aW9uIzg1LjAwLjAwLjAwLjAwCi11bnNwc2M3Izg1LjEzLjE1LjAwLjAwI0V4cGVyaW1lbnRhbCBtZWRpY2luZSBzZXJ2aWNlcyM4NS4xMy4wMC4wMC4wMAotdW5zcHNjNyM4NS4xMy4xNS4wMS4wMCNPcmdhbiB0cmFuc3BsYW50IHNlcnZpY2VzIzg1LjEzLjE1LjAwLjAwCi11bnNwc2M3Izg1LjEzLjE1LjAyLjAwI0NsaW5pY2FsIGh1bWFuIGRydWcgdHJpYWxzIzg1LjEzLjE1LjAwLjAwCi11bnNwc2M3Izg1LjEzLjE1LjAzLjAwI0FuaW1hbCBleHBlcmltZW50YXRpb24jODUuMTMuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTMuMTUuMDQuMDAjSHVtYW4gZXhwZXJpbWVudGF0aW9uIzg1LjEzLjE1LjAwLjAwCi11bnNwc2M3Izg1LjEzLjE1LjA1LjAwI1NwYWNlIGV4cGVyaW1lbnRhdGlvbiM4NS4xMy4xNS4wMC4wMAotdW5zcHNjNyM4NS4xMy4xNi4wMC4wMCNNZWRpY2FsIGV0aGljcyM4NS4xMy4wMC4wMC4wMAotdW5zcHNjNyM4NS4xMy4xNi4wMS4wMCNFdXRoYW5hc2lhIGlzc3VlcyM4NS4xMy4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMy4xNi4wMi4wMCNNZWRpY2FsIGNvZGUgb2YgY29uZHVjdCM4NS4xMy4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMy4xNi4wMy4wMCNNZWRpY2FsIHNvY2lldGllcyM4NS4xMy4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMy4xNi4wNC4wMCNJbnRlcm5hdGlvbmFsIGRydWcgbW9uaXRvcmluZyBzZXJ2aWNlcyM4NS4xMy4xNi4wMC4wMAotdW5zcHNjNyM4NS4xMy4xNy4wMC4wMCNNZWRpY2FsIHNjaWVuY2UgYW5kIHJlc2VhcmNoIzg1LjEzLjAwLjAwLjAwCi11bnNwc2M3Izg1LjEzLjE3LjAxLjAwI1BoYXJtYWNldXRpY2FsIHJlc2VhcmNoIHNlcnZpY2VzIzg1LjEzLjE3LjAwLjAwCi11bnNwc2M3Izg1LjEzLjE3LjAyLjAwI0JhY3RlcmlvbG9neSByZXNlYXJjaCBzZXJ2aWNlcyM4NS4xMy4xNy4wMC4wMAotdW5zcHNjNyM4NS4xMy4xNy4wMy4wMCNCaW9tZWRpY2FsIHJlc2VhcmNoIHNlcnZpY2VzIzg1LjEzLjE3LjAwLjAwCi11bnNwc2M3Izg1LjEzLjE3LjA0LjAwI0NhcmRpb2xvZ3kgcmVzZWFyY2ggc2VydmljZXMjODUuMTMuMTcuMDAuMDAKLXVuc3BzYzcjODUuMTMuMTcuMDUuMDAjQW5hdG9teSByZXNlYXJjaCBzZXJ2aWNlcyM4NS4xMy4xNy4wMC4wMAotdW5zcHNjNyM4NS4xMy4xNy4wNi4wMCNQYXRob2xvZ3kgcmVzZWFyY2ggc2VydmljZXMjODUuMTMuMTcuMDAuMDAKLXVuc3BzYzcjODUuMTMuMTcuMDcuMDAjRW1icnlvbG9neSByZXNlYXJjaCBzZXJ2aWNlcyM4NS4xMy4xNy4wMC4wMAotdW5zcHNjNyM4NS4xMy4xNy4wOC4wMCNFcGlkZW1pb2xvZ3kgcmVzZWFyY2ggc2VydmljZXMjODUuMTMuMTcuMDAuMDAKLXVuc3BzYzcjODUuMTMuMTcuMDkuMDAjR2VuZXRpY3MgcmVzZWFyY2ggc2VydmljZXMjODUuMTMuMTcuMDAuMDAKLXVuc3BzYzcjODUuMTMuMTcuMTAuMDAjSW1tdW5vbG9neSByZXNlYXJjaCBzZXJ2aWNlcyM4NS4xMy4xNy4wMC4wMAotdW5zcHNjNyM4NS4xMy4xNy4xMS4wMCNQaHlzaW9sb2d5IHJlc2VhcmNoIHNlcnZpY2VzIzg1LjEzLjE3LjAwLjAwCi11bnNwc2M3Izg1LjEzLjE3LjEyLjAwI1RveGljb2xvZ3kgcmVzZWFyY2ggc2VydmljZXMjODUuMTMuMTcuMDAuMDAKLXVuc3BzYzcjODUuMTMuMTcuMTMuMDAjTmV1cm9sb2d5IHJlc2VhcmNoIHNlcnZpY2VzIzg1LjEzLjE3LjAwLjAwCi11bnNwc2M3Izg1LjE0LjAwLjAwLjAwI0FsdGVybmF0aXZlIGFuZCBob2xpc3RpYyBtZWRpY2luZSM4NS4wMC4wMC4wMC4wMAotdW5zcHNjNyM4NS4xNC4xNS4wMC4wMCNGYWl0aCBoZWFsZXJzIzg1LjE0LjAwLjAwLjAwCi11bnNwc2M3Izg1LjE0LjE1LjAxLjAwI1dpdGNoIGRvY3RvcnMgb3Igdm9vZG9vIHNlcnZpY2VzIzg1LjE0LjE1LjAwLjAwCi11bnNwc2M3Izg1LjE0LjE1LjAyLjAwI0ZhaXRoIGhlYWxlcnMgc2VydmljZXMjODUuMTQuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTQuMTUuMDMuMDAjU2hhbWFucyM4NS4xNC4xNS4wMC4wMAotdW5zcHNjNyM4NS4xNC4xNS4wNC4wMCNFbmVyZ3kgd29yayM4NS4xNC4xNS4wMC4wMAotdW5zcHNjNyM4NS4xNC4xNi4wMC4wMCNIZXJiYWwgdHJlYXRtZW50cyM4NS4xNC4wMC4wMC4wMAotdW5zcHNjNyM4NS4xNC4xNi4wMS4wMCNIZXJiYWwgbWVkaWNpbmUgb3IgaGVyYmFsaXN0cyBzZXJ2aWNlcyM4NS4xNC4xNi4wMC4wMAotdW5zcHNjNyM4NS4xNC4xNi4wMi4wMCNBbGdhZSBvciBzZWEgd2VlZCBtZWRpY2FsIGN1cmVzIzg1LjE0LjE2LjAwLjAwCi11bnNwc2M3Izg1LjE0LjE2LjAzLjAwI0hvdCBzcHJpbmdzIGN1cmUgc2VydmljZXMjODUuMTQuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTQuMTcuMDAuMDAjSG9tZW9wYXRoaWMgcHJhY3RpY2UjODUuMTQuMDAuMDAuMDAKLXVuc3BzYzcjODUuMTQuMTcuMDEuMDAjSW5pdGlhbCBkaWFnbm9zdGljIGFzc2Vzc21lbnQjODUuMTQuMTcuMDAuMDAKLXVuc3BzYzcjODUuMTQuMTcuMDIuMDAjUmVtZWR5IGNvbnN1bHRhdGlvbnMjODUuMTQuMTcuMDAuMDAKLXVuc3BzYzcjODUuMTUuMDAuMDAuMDAjRm9vZCBhbmQgbnV0cml0aW9uIHNlcnZpY2VzIzg1LjAwLjAwLjAwLjAwCi11bnNwc2M3Izg1LjE1LjE1LjAwLjAwI0Zvb2QgdGVjaG5vbG9neSM4NS4xNS4wMC4wMC4wMAotdW5zcHNjNyM4NS4xNS4xNS4wMS4wMCNGb29kIGh5Z2llbmUgY29udHJvbCBzZXJ2aWNlcyM4NS4xNS4xNS4wMC4wMAotdW5zcHNjNyM4NS4xNS4xNS4wMi4wMCNGb29kIGNvbnRhbWluYXRpb24gY29udHJvbCBzZXJ2aWNlcyM4NS4xNS4xNS4wMC4wMAotdW5zcHNjNyM4NS4xNS4xNS4wMy4wMCNGb29kIHByZXNlcnZhdGlvbiBtYW5hZ2VtZW50IG9yIGNvbnRyb2wgc2VydmljZXMjODUuMTUuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTUuMTUuMDQuMDAjRm9vZCBwcmVwYXJhdGlvbiBjb3Vuc2VsaW5nIG9yIGNvbnRyb2wgc2VydmljZXMjODUuMTUuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTUuMTUuMDUuMDAjRm9vZCByZXNlYXJjaCBzZXJ2aWNlcyM4NS4xNS4xNS4wMC4wMAotdW5zcHNjNyM4NS4xNS4xNS4wNi4wMCNTdHVkaWVzIG9uIGZvb2RzIG9yIGZvb2QgaGFiaXRzIzg1LjE1LjE1LjAwLjAwCi11bnNwc2M3Izg1LjE1LjE1LjA3LjAwI0Zvb2QgYWRkaXRpdmUgb3IgcXVhbGl0eSBzdGFuZGFyZHMgc2VydmljZXMjODUuMTUuMTUuMDAuMDAKLXVuc3BzYzcjODUuMTUuMTUuMDguMDAjRm9vZCBhbmFseXNpcyBzZXJ2aWNlcyM4NS4xNS4xNS4wMC4wMAotdW5zcHNjNyM4NS4xNS4xNS4wOS4wMCNGb29kIGxlZ2lzbGF0aW9uIHNlcnZpY2VzIzg1LjE1LjE1LjAwLjAwCi11bnNwc2M3Izg1LjE1LjE2LjAwLjAwI051dHJpdGlvbiBpc3N1ZXMjODUuMTUuMDAuMDAuMDAKLXVuc3BzYzcjODUuMTUuMTYuMDEuMDAjTnV0cml0aW9uIHByb2dyYW1taW5nIHNlcnZpY2VzIzg1LjE1LjE2LjAwLjAwCi11bnNwc2M3Izg1LjE1LjE2LjAyLjAwI0JyZWFzdCBvciBib3R0bGUgZmVlZGluZyBwb2xpY3kjODUuMTUuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTUuMTYuMDMuMDAjTnV0cml0aW9uYWwgcmVoYWJpbGl0YXRpb24gc2VydmljZXMjODUuMTUuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTUuMTYuMDQuMDAjTnV0cml0aW9uIHByb2plY3QgZXZhbHVhdGlvbiM4NS4xNS4xNi4wMC4wMAotdW5zcHNjNyM4NS4xNS4xNi4wNS4wMCNGb29kIG9yIG51dHJpdGlvbiBkZXZlbG9wbWVudCBzdHJhdGVnaWVzIzg1LjE1LjE2LjAwLjAwCi11bnNwc2M3Izg1LjE1LjE2LjA2LjAwI051dHJpZW50IGRlZmljaWVuY3kgY29udHJvbCBwcm9ncmFtcyM4NS4xNS4xNi4wMC4wMAotdW5zcHNjNyM4NS4xNS4xNi4wNy4wMCNEaWV0IGNvbnRyb2wgb3IgcHJvZ3JhbXMjODUuMTUuMTYuMDAuMDAKLXVuc3BzYzcjODUuMTUuMTcuMDAuMDAjRm9vZCBwb2xpY3kgcGxhbm5pbmcgYW5kIGFpZCM4NS4xNS4wMC4wMC4wMAotdW5zcHNjNyM4NS4xNS4xNy4wMS4wMCNGb29kIHN0YW5kYXJkcyM4NS4xNS4xNy4wMC4wMAotdW5zcHNjNyM4NS4xNS4xNy4wMi4wMCNGb29kIGFpZCBnbG9iYWwgaW5mb3JtYXRpb24gb3IgZWFybHkgd2FybmluZyBzeXN0ZW1zIHNlcnZpY2VzIzg1LjE1LjE3LjAwLjAwCi11bnNwc2M3Izg1LjE1LjE3LjAzLjAwI0Fzc2Vzc21lbnQgb2YgZW1lcmdlbmN5IGZvb2QgcmVxdWlyZW1lbnRzIzg1LjE1LjE3LjAwLjAwCi11bnNwc2M3Izg1LjE1LjE3LjA0LjAwI05hdGlvbmFsIGZvb2QgaW50ZXJ2ZW50aW9uIHBvbGljeSBvciBwcm9ncmFtcyM4NS4xNS4xNy4wMC4wMAotdW5zcHNjNyM4NS4xNS4xNy4wNS4wMCNFdmFsdWF0aW9uIG9mIGZvb2QgYWlkIG51dHJpdGlvbmFsIGltcGFjdCM4NS4xNS4xNy4wMC4wMAotdW5zcHNjNyM4Ni4wMC4wMC4wMC4wMCNFZHVjYXRpb24gYW5kIFRyYWluaW5nIFNlcnZpY2VzIzg2LjAwLjAwLjAwLjAwCi11bnNwc2M3Izg2LjEwLjAwLjAwLjAwI1ZvY2F0aW9uYWwgdHJhaW5pbmcjODYuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTUuMDAuMDAjQWdyaWN1bHR1cmUgYW5kIGZvcmVzdHJ5IGFuZCBvdGhlciBuYXR1cmFsIHJlc291cmNlcyB0cmFpbmluZyBzZXJ2aWNlcyM4Ni4xMC4wMC4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNS4wMS4wMCNBZ3JvIGluZHVzdHJ5IHZvY2F0aW9uYWwgdHJhaW5pbmcjODYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTUuMDIuMDAjRGFpcnkgaW5kdXN0cnkgdm9jYXRpb25hbCB0cmFpbmluZyM4Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNS4wMy4wMCNNZWF0IGluZHVzdHJ5IHZvY2F0aW9uYWwgdHJhaW5pbmcjODYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTUuMDQuMDAjQWdyaWN1bHR1cmUgdm9jYXRpb25hbCB0cmFpbmluZyBzZXJ2aWNlcyM4Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNS4wNS4wMCNSdXJhbCB5b3V0aCBvciBmYXJtZXJzIHZvY2F0aW9uYWwgdHJhaW5pbmcgc2VydmljZXMjODYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTUuMDYuMDAjRm9yZXN0cnkgdm9jYXRpb25hbCB0cmFpbmluZyBzZXJ2aWNlcyM4Ni4xMC4xNS4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNS4wNy4wMCNGaXNoZXJ5IHZvY2F0aW9uYWwgdHJhaW5pbmcgc2VydmljZXMjODYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTUuMDguMDAjRW52aXJvbm1lbnRhbCB2b2NhdGlvbmFsIHRyYWluaW5nIHNlcnZpY2VzIzg2LjEwLjE1LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE1LjA5LjAwI05hdHVyYWwgcmVzb3VyY2VzIHZvY2F0aW9uYWwgdHJhaW5pbmcgc2VydmljZXMjODYuMTAuMTUuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTYuMDAuMDAjU2NpZW50aWZpYyB2b2NhdGlvbmFsIHRyYWluaW5nIHNlcnZpY2VzIzg2LjEwLjAwLjAwLjAwCi11bnNwc2M3Izg2LjEwLjE2LjAxLjAwI0NvbXB1dGVyIHZvY2F0aW9uYWwgdHJhaW5pbmcgc2VydmljZXMjODYuMTAuMTYuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTYuMDIuMDAjRW5lcmd5IHJlbGF0ZWQgdm9jYXRpb25hbCB0cmFpbmluZyBzZXJ2aWNlcyM4Ni4xMC4xNi4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNi4wMy4wMCNDaGVtaXN0cnkgdm9jYXRpb25hbCB0cmFpbmluZyBzZXJ2aWNlcyM4Ni4xMC4xNi4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNi4wNC4wMCNCaW9sb2d5IHZvY2F0aW9uYWwgdHJhaW5pbmcgc2VydmljZXMjODYuMTAuMTYuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTYuMDUuMDAjTWVkaWNhbCB2b2NhdGlvbmFsIHRyYWluaW5nIHNlcnZpY2VzIzg2LjEwLjE2LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE2LjA2LjAwI0VsZWN0cm9uaWNzIHZvY2F0aW9uYWwgdHJhaW5pbmcgc2VydmljZXMjODYuMTAuMTYuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTYuMDcuMDAjVGVsZWNvbW11bmljYXRpb25zIHZvY2F0aW9uYWwgdHJhaW5pbmcgc2VydmljZXMjODYuMTAuMTYuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTYuMDguMDAjSHlkcmF1bGljcyB2b2NhdGlvbmFsIHRyYWluaW5nIHNlcnZpY2VzIzg2LjEwLjE2LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE2LjA5LjAwI0luZHVzdHJpYWwgdm9jYXRpb25hbCB0cmFpbmluZyBzZXJ2aWNlcyM4Ni4xMC4xNi4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNi4xMC4wMCNFbmdpbmVlcmluZyB2b2NhdGlvbmFsIHRyYWluaW5nIHNlcnZpY2VzIzg2LjEwLjE2LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE3LjAwLjAwI05vbiBzY2llbnRpZmljIHZvY2F0aW9uYWwgdHJhaW5pbmcgc2VydmljZXMjODYuMTAuMDAuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTcuMDEuMDAjQ29tbXVuaWNhdGlvbnMgdm9jYXRpb25hbCB0cmFpbmluZyBzZXJ2aWNlcyM4Ni4xMC4xNy4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNy4wMi4wMCNUb3VyaXNtIHJlbGF0ZWQgdHJhaW5pbmcjODYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTcuMDMuMDAjTGlicmFyeSBvciBkb2N1bWVudGF0aW9uIHRyYWluaW5nIzg2LjEwLjE3LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE3LjA0LjAwI1Byb2N1cmVtZW50IG9yIHN1cHBseSBjaGFpbiB0cmFpbmluZyM4Ni4xMC4xNy4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNy4wNS4wMCNDbGVyaWNhbCB0cmFpbmluZyM4Ni4xMC4xNy4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNy4wNi4wMCNIZWFsdGggYXNzaXN0YW5jZSB2b2NhdGlvbmFsIHRyYWluaW5nIHNlcnZpY2VzIzg2LjEwLjE3LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE3LjA3LjAwI1BlcnNvbmFsIGNhcmUgdm9jYXRpb25hbCB0cmFpbmluZyBzZXJ2aWNlcyM4Ni4xMC4xNy4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNy4wOC4wMCNMaXRlcmFjeSBzZXJ2aWNlcyM4Ni4xMC4xNy4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNy4wOS4wMCNTYWZldHkgdHJhaW5pbmcgc2VydmljZXMjODYuMTAuMTcuMDAuMDAKLXVuc3BzYzcjODYuMTAuMTcuMTAuMDAjVGVhY2hlciB0cmFpbmluZyBzZXJ2aWNlcyM4Ni4xMC4xNy4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNy4xMS4wMCNGaXJlIGZpZ2h0aW5nIHRyYWluaW5nIHNlcnZpY2VzIzg2LjEwLjE3LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE3LjEyLjAwI0hhbmRjcmFmdHMgdm9jYXRpb25hbCB0cmFpbmluZyBzZXJ2aWNlcyM4Ni4xMC4xNy4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNy4xMy4wMCNMYXcgdm9jYXRpb25hbCB0cmFpbmluZyBzZXJ2aWNlcyM4Ni4xMC4xNy4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNy4xNC4wMCNMYXcgZW5mb3JjZW1lbnQgdm9jYXRpb25hbCB0cmFpbmluZyBzZXJ2aWNlcyM4Ni4xMC4xNy4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNy4xNS4wMCNSb2FkIG9yIHJhaWwgdHJhbnNwb3J0YXRpb24gdm9jYXRpb25hbCB0cmFpbmluZyBzZXJ2aWNlcyM4Ni4xMC4xNy4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xNy4xNi4wMCNTaGlwcGluZyB2b2NhdGlvbmFsIHRyYWluaW5nIHNlcnZpY2VzIzg2LjEwLjE3LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE4LjAwLjAwI0luIHNlcnZpY2UgdHJhaW5pbmcgYW5kIG1hbnBvd2VyIGRldmVsb3BtZW50Izg2LjEwLjAwLjAwLjAwCi11bnNwc2M3Izg2LjEwLjE4LjAxLjAwI0Jhbmsgb3IgZmluYW5jZSBzZWN0b3IgbWFucG93ZXIgZGV2ZWxvcG1lbnQjODYuMTAuMTguMDAuMDAKLXVuc3BzYzcjODYuMTAuMTguMDIuMDAjUmUgdHJhaW5pbmcgb3IgcmVmcmVzaGluZyB0cmFpbmluZyBzZXJ2aWNlcyM4Ni4xMC4xOC4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xOC4wMy4wMCNWb2NhdGlvbmFsIHJlaGFiaWxpdGF0aW9uIHNlcnZpY2VzIzg2LjEwLjE4LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE4LjA0LjAwI0NvbW1lcmNpYWwgc2VjdG9yIG1hbnBvd2VyIGRldmVsb3BtZW50Izg2LjEwLjE4LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE4LjA1LjAwI0luZHVzdHJpYWwgc2VjdG9yIG1hbnBvd2VyIGRldmVsb3BtZW50Izg2LjEwLjE4LjAwLjAwCi11bnNwc2M3Izg2LjEwLjE4LjA2LjAwI0hlYWx0aCBzZWN0b3IgbWFucG93ZXIgZGV2ZWxvcG1lbnQjODYuMTAuMTguMDAuMDAKLXVuc3BzYzcjODYuMTAuMTguMDcuMDAjTWFuYWdlbWVudCBzZWN0b3IgbWFucG93ZXIgZGV2ZWxvcG1lbnQjODYuMTAuMTguMDAuMDAKLXVuc3BzYzcjODYuMTAuMTguMDguMDAjUHVibGljIHNlY3RvciBtYW5wb3dlciBkZXZlbG9wbWVudCBzZXJ2aWNlcyM4Ni4xMC4xOC4wMC4wMAotdW5zcHNjNyM4Ni4xMC4xOC4wOS4wMCNNZXJjaGFudCBtYXJpbmUgdm9jYXRpb25hbCB0cmFpbmluZyBzZXJ2aWNlcyM4Ni4xMC4xOC4wMC4wMAotdW5zcHNjNyM4Ni4xMS4wMC4wMC4wMCNBbHRlcm5hdGl2ZSBlZHVjYXRpb25hbCBzeXN0ZW1zIzg2LjAwLjAwLjAwLjAwCi11bnNwc2M3Izg2LjExLjE1LjAwLjAwI0Rpc3RhbmNlIGxlYXJuaW5nIHNlcnZpY2VzIzg2LjExLjAwLjAwLjAwCi11bnNwc2M3Izg2LjExLjE1LjAxLjAwI0Rpc3RhbmNlIGxlYXJuaW5nIGd1aWRhbmNlIHNlcnZpY2VzIzg2LjExLjE1LjAwLjAwCi11bnNwc2M3Izg2LjExLjE1LjAyLjAwI0Rpc3RhbmNlIHRlYWNoaW5nIHNlcnZpY2VzIzg2LjExLjE1LjAwLjAwCi11bnNwc2M3Izg2LjExLjE1LjAzLjAwI0NlcnRpZmljYXRlZCBkaXN0YW5jZSBsZWFybmluZyBzZXJ2aWNlcyM4Ni4xMS4xNS4wMC4wMAotdW5zcHNjNyM4Ni4xMS4xNS4wNC4wMCNOb24gY2VydGlmaWNhdGVkIGRpc3RhbmNlIGxlYXJuaW5nIHNlcnZpY2VzIzg2LjExLjE1LjAwLjAwCi11bnNwc2M3Izg2LjExLjE1LjA1LjAwI0Rpc3RhbmNlIGxlYXJuaW5nIGFzc2Vzc21lbnQgc2VydmljZXMjODYuMTEuMTUuMDAuMDAKLXVuc3BzYzcjODYuMTEuMTYuMDAuMDAjQWR1bHQgZWR1Y2F0aW9uIzg2LjExLjAwLjAwLjAwCi11bnNwc2M3Izg2LjExLjE2LjAxLjAwI0V2ZW5pbmcgY291cnNlcyM4Ni4xMS4xNi4wMC4wMAotdW5zcHNjNyM4Ni4xMS4xNi4wMi4wMCNQYXJ0IHRpbWUgYWR1bHQgZWR1Y2F0aW9uIHNlcnZpY2VzIzg2LjExLjE2LjAwLjAwCi11bnNwc2M3Izg2LjExLjE2LjAzLjAwI1BhcmVudCBlZHVjYXRpb24jODYuMTEuMTYuMDAuMDAKLXVuc3BzYzcjODYuMTEuMTYuMDQuMDAjRW1wbG95ZWUgRWR1Y2F0aW9uIzg2LjExLjE2LjAwLjAwCi11bnNwc2M3Izg2LjExLjE3LjAwLjAwI0xhbmd1YWdlIHNjaG9vbGluZyM4Ni4xMS4wMC4wMC4wMAotdW5zcHNjNyM4Ni4xMS4xNy4wMS4wMCNDb252ZXJzYXRpb25hbCBmb3JlaWduIGxhbmd1YWdlIGluc3RydWN0aW9uIzg2LjExLjE3LjAwLjAwCi11bnNwc2M3Izg2LjExLjE3LjAyLjAwI0ZvcmVpZ24gbGFuZ3VhZ2UgaW1tZXJzaW9uIGluc3RydWN0aW9uIzg2LjExLjE3LjAwLjAwCi11bnNwc2M3Izg2LjExLjE4LjAwLjAwI0VkdWNhdGlvbmFsIGV4Y2hhbmdlcyM4Ni4xMS4wMC4wMC4wMAotdW5zcHNjNyM4Ni4xMS4xOC4wMS4wMCNFZHVjYXRpb25hbCBleGNoYW5nZXMgYmV0d2VlbiB1bml2ZXJzaXRpZXMjODYuMTEuMTguMDAuMDAKLXVuc3BzYzcjODYuMTEuMTguMDIuMDAjRWR1Y2F0aW9uYWwgZXhjaGFuZ2VzIGJldHdlZW4gc2Nob29scyM4Ni4xMS4xOC4wMC4wMAotdW5zcHNjNyM4Ni4xMi4wMC4wMC4wMCNFZHVjYXRpb25hbCBpbnN0aXR1dGlvbnMjODYuMDAuMDAuMDAuMDAKLXVuc3BzYzcjODYuMTIuMTUuMDAuMDAjRWxlbWVudGFyeSBhbmQgc2Vjb25kYXJ5IHNjaG9vbHMjODYuMTIuMDAuMDAuMDAKLXVuc3BzYzcjODYuMTIuMTUuMDEuMDAjUHJlIHNjaG9vbCBlZHVjYXRpb25hbCBzZXJ2aWNlcyM4Ni4xMi4xNS4wMC4wMAotdW5zcHNjNyM4Ni4xMi4xNS4wMi4wMCNSZWxpZ2lvdXMgZWxlbWVudGFyeSBvciBzZWNvbmRhcnkgc2Nob29scyM4Ni4xMi4xNS4wMC4wMAotdW5zcHNjNyM4Ni4xMi4xNS4wMy4wMCNQcml2YXRlIGVsZW1lbnRhcnkgb3Igc2Vjb25kYXJ5IHNjaG9vbHMjODYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjODYuMTIuMTUuMDQuMDAjUHVibGljIGVsZW1lbnRhcnkgb3Igc2Vjb25kYXJ5IHNjaG9vbHMjODYuMTIuMTUuMDAuMDAKLXVuc3BzYzcjODYuMTIuMTYuMDAuMDAjSnVuaW9yIGNvbGxlZ2VzIzg2LjEyLjAwLjAwLjAwCi11bnNwc2M3Izg2LjEyLjE2LjAxLjAwI0NvbW11bml0eSBjb2xsZWdlcyM4Ni4xMi4xNi4wMC4wMAotdW5zcHNjNyM4Ni4xMi4xNi4wMi4wMCNUZWNobmljYWwgaW5zdGl0dXRlcyM4Ni4xMi4xNi4wMC4wMAotdW5zcHNjNyM4Ni4xMi4xNy4wMC4wMCNVbml2ZXJzaXR5IGFuZCBjb2xsZWdlcyM4Ni4xMi4wMC4wMC4wMAotdW5zcHNjNyM4Ni4xMi4xNy4wMS4wMCNVbmRlcmdyYWR1YXRlIHByb2dyYW1zIzg2LjEyLjE3LjAwLjAwCi11bnNwc2M3Izg2LjEyLjE3LjAyLjAwI1Bvc3RncmFkdWF0ZSBwcm9ncmFtcyM4Ni4xMi4xNy4wMC4wMAotdW5zcHNjNyM4Ni4xMi4xOC4wMC4wMCNQcm9mZXNzaW9uYWwgc2Nob29scyM4Ni4xMi4wMC4wMC4wMAotdW5zcHNjNyM4Ni4xMi4xOC4wMi4wMCNUaGVvbG9naWNhbCBzZW1pbmFyaWVzIzg2LjEyLjE4LjAwLjAwCi11bnNwc2M3Izg2LjEyLjE4LjAzLjAwI1RlY2huaWNhbCBwcm9mZXNzaW9uYWwgc2Nob29scyM4Ni4xMi4xOC4wMC4wMAotdW5zcHNjNyM4Ni4xMi4xOC4wNC4wMCNOb24gdGVjaG5pY2FsIHByb2Zlc3Npb25hbCBzY2hvb2xzIzg2LjEyLjE4LjAwLjAwCi11bnNwc2M3Izg2LjEzLjAwLjAwLjAwI1NwZWNpYWxpemVkIGVkdWNhdGlvbmFsIHNlcnZpY2VzIzg2LjAwLjAwLjAwLjAwCi11bnNwc2M3Izg2LjEzLjE1LjAwLjAwI0ZpbmUgYXJ0cyM4Ni4xMy4wMC4wMC4wMAotdW5zcHNjNyM4Ni4xMy4xNS4wMS4wMCNUaGVhdGVyIHN0dWRpZXMjODYuMTMuMTUuMDAuMDAKLXVuc3BzYzcjODYuMTMuMTUuMDIuMDAjUGFpbnRpbmcjODYuMTMuMTUuMDAuMDAKLXVuc3BzYzcjODYuMTMuMTUuMDMuMDAjU2N1bHB0dXJlIzg2LjEzLjE1LjAwLjAwCi11bnNwc2M3Izg2LjEzLjE1LjA0LjAwI01lZGlhIHN0dWRpZXMjODYuMTMuMTUuMDAuMDAKLXVuc3BzYzcjODYuMTMuMTYuMDAuMDAjTXVzaWMgYW5kIGRyYW1hIzg2LjEzLjAwLjAwLjAwCi11bnNwc2M3Izg2LjEzLjE2LjAxLjAwI011c2ljIHNjaG9vbHMjODYuMTMuMTYuMDAuMDAKLXVuc3BzYzcjODYuMTMuMTYuMDIuMDAjRGFuY2UgZWR1Y2F0aW9uIzg2LjEzLjE2LjAwLjAwCi11bnNwc2M3Izg2LjEzLjE2LjAzLjAwI0RyYW1hIHN0dWRpZXMjODYuMTMuMTYuMDAuMDAKLXVuc3BzYzcjODYuMTMuMTcuMDAuMDAjRHJpdmluZyBhbmQgZmx5aW5nIGFuZCBzYWlsaW5nIzg2LjEzLjAwLjAwLjAwCi11bnNwc2M3Izg2LjEzLjE3LjAxLjAwI1ZlaGljbGUgZHJpdmluZyBzY2hvb2xzIHNlcnZpY2VzIzg2LjEzLjE3LjAwLjAwCi11bnNwc2M3Izg2LjEzLjE3LjAyLjAwI0ZsaWdodCBzY2hvb2wgc2VydmljZXMjODYuMTMuMTcuMDAuMDAKLXVuc3BzYzcjODYuMTMuMTcuMDMuMDAjWWFjaHRpbmcgb3IgYm9hdGluZyBzY2hvb2wgc2VydmljZXMjODYuMTMuMTcuMDAuMDAKLXVuc3BzYzcjODYuMTMuMTguMDAuMDAjTWlsaXRhcnkgZWR1Y2F0aW9uIzg2LjEzLjAwLjAwLjAwCi11bnNwc2M3Izg2LjEzLjE4LjAxLjAwI1NlcnZpY2UgYWNhZGVtaWVzIzg2LjEzLjE4LjAwLjAwCi11bnNwc2M3Izg2LjEzLjE4LjAyLjAwI1BpbG90IHNjaG9vbHMjODYuMTMuMTguMDAuMDAKLXVuc3BzYzcjODYuMTMuMTguMDMuMDAjTWlsaXRhcnkgcG9saWNlIHRyYWluaW5nIzg2LjEzLjE4LjAwLjAwCi11bnNwc2M3Izg2LjEzLjE4LjA0LjAwI1dhciBjb2xsZWdlIzg2LjEzLjE4LjAwLjAwCi11bnNwc2M3Izg2LjEzLjE5LjAwLjAwI1NjaG9vbHMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM4Ni4xMy4wMC4wMC4wMAotdW5zcHNjNyM4Ni4xMy4xOS4wMS4wMCNQcmltYXJ5IHNjaG9vbGluZyBzZXJ2aWNlcyBmb3IgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIzg2LjEzLjE5LjAwLjAwCi11bnNwc2M3Izg2LjEzLjE5LjAyLjAwI1NlY29uZGFyeSBzY2hvb2xpbmcgc2VydmljZXMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM4Ni4xMy4xOS4wMC4wMAotdW5zcHNjNyM4Ni4xMy4xOS4wMy4wMCNTcGVjaWFsaXplZCBzY2hvb2xzIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMjODYuMTMuMTkuMDAuMDAKLXVuc3BzYzcjODYuMTMuMTkuMDQuMDAjU3BlY2lhbGl6ZWQgcmVoYWJpbGl0YXRpb24gc2VydmljZXMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM4Ni4xMy4xOS4wMC4wMAotdW5zcHNjNyM4Ni4xNC4wMC4wMC4wMCNFZHVjYXRpb25hbCBmYWNpbGl0aWVzIzg2LjAwLjAwLjAwLjAwCi11bnNwc2M3Izg2LjE0LjE1LjAwLjAwI0VkdWNhdGlvbmFsIGd1aWRhbmNlIHNlcnZpY2VzIzg2LjE0LjAwLjAwLjAwCi11bnNwc2M3Izg2LjE0LjE1LjAxLjAwI0VkdWNhdGlvbmFsIGFkdmlzb3J5IHNlcnZpY2VzIzg2LjE0LjE1LjAwLjAwCi11bnNwc2M3Izg2LjE0LjE1LjAyLjAwI1VuaXZlcnNpdGllcyBjb29wZXJhdGlvbiBndWlkYW5jZSBzZXJ2aWNlcyM4Ni4xNC4xNS4wMC4wMAotdW5zcHNjNyM4Ni4xNC4xNS4wMy4wMCNTdHVkeSBhYnJvYWQgYWR2aXNvcnkgc2VydmljZXMjODYuMTQuMTUuMDAuMDAKLXVuc3BzYzcjODYuMTQuMTYuMDAuMDAjU3R1ZGVudHMgb3JnYW5pemF0aW9ucyM4Ni4xNC4wMC4wMC4wMAotdW5zcHNjNyM4Ni4xNC4xNi4wMS4wMCNTdHVkZW50cyBob2JieSBjbHVicyM4Ni4xNC4xNi4wMC4wMAotdW5zcHNjNyM4Ni4xNC4xNi4wMi4wMCNTdHVkZW50cyB1bmlvbnMjODYuMTQuMTYuMDAuMDAKLXVuc3BzYzcjODYuMTQuMTYuMDMuMDAjU3R1ZGVudHMgdHJhdmVsbGluZyBvcmdhbml6YXRpb25zIzg2LjE0LjE2LjAwLjAwCi11bnNwc2M3Izg2LjE0LjE3LjAwLjAwI0VkdWNhdGlvbmFsIHRlY2hub2xvZ3kjODYuMTQuMDAuMDAuMDAKLXVuc3BzYzcjODYuMTQuMTcuMDEuMDAjTGFuZ3VhZ2UgbGFib3JhdG9yaWVzIzg2LjE0LjE3LjAwLjAwCi11bnNwc2M3Izg2LjE0LjE3LjAyLjAwI0F1ZGlvIHZpc3VhbCB0ZWNobm9sb2d5Izg2LjE0LjE3LjAwLjAwCi11bnNwc2M3Izg2LjE0LjE3LjAzLjAwI0NvbXB1dGVyIHByb2dyYW1tZWQgaW5zdHJ1Y3Rpb24jODYuMTQuMTcuMDAuMDAKLXVuc3BzYzcjODYuMTQuMTcuMDQuMDAjTGlicmFyeSBvciBkb2N1bWVudGF0aW9uIHNlcnZpY2VzIzg2LjE0LjE3LjAwLjAwCi11bnNwc2M3IzkwLjAwLjAwLjAwLjAwI1RyYXZlbCBhbmQgRm9vZCBhbmQgTG9kZ2luZyBhbmQgRW50ZXJ0YWlubWVudCBTZXJ2aWNlcyM5MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM5MC4xMC4wMC4wMC4wMCNSZXN0YXVyYW50cyBhbmQgY2F0ZXJpbmcjOTAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjOTAuMTAuMTUuMDAuMDAjRWF0aW5nIGFuZCBkcmlua2luZyBlc3RhYmxpc2htZW50cyM5MC4xMC4wMC4wMC4wMAotdW5zcHNjNyM5MC4xMC4xNS4wMS4wMCNSZXN0YXVyYW50cyM5MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM5MC4xMC4xNS4wMi4wMCNCYXJzIzkwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzkwLjEwLjE1LjAzLjAwI0Zhc3QgZm9vZCBlc3RhYmxpc2htZW50cyM5MC4xMC4xNS4wMC4wMAotdW5zcHNjNyM5MC4xMC4xNS4wNC4wMCNPbiBzdHJlZXQgZm9vZCB2ZW5kb3JzIzkwLjEwLjE1LjAwLjAwCi11bnNwc2M3IzkwLjEwLjE2LjAwLjAwI0JhbnF1ZXQgYW5kIGNhdGVyaW5nIHNlcnZpY2VzIzkwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzkwLjEwLjE2LjAxLjAwI0JhbnF1ZXQgZmFjaWxpdGllcyM5MC4xMC4xNi4wMC4wMAotdW5zcHNjNyM5MC4xMC4xNi4wMi4wMCNQYXJ0eSB0ZW50IHNlcnZpY2VzIzkwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzkwLjEwLjE2LjAzLjAwI0NhdGVyaW5nIHNlcnZpY2VzIzkwLjEwLjE2LjAwLjAwCi11bnNwc2M3IzkwLjEwLjE2LjA0LjAwI0NvbnN0cnVjdGlvbiBvciB3b3JrIHNpdGUgY2F0ZXJpbmcgc2VydmljZXMjOTAuMTAuMTYuMDAuMDAKLXVuc3BzYzcjOTAuMTAuMTcuMDAuMDAjQ2FmZXRlcmlhIHNlcnZpY2VzIzkwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzkwLjEwLjE3LjAxLjAwI09uIHNpdGUgY2FmZXRlcmlhIG1hbmFnZW1lbnQjOTAuMTAuMTcuMDAuMDAKLXVuc3BzYzcjOTAuMTAuMTguMDAuMDAjQ2FycnlvdXQgYW5kIHRha2Vhd2F5IHNlcnZpY2VzIzkwLjEwLjAwLjAwLjAwCi11bnNwc2M3IzkwLjEwLjE4LjAxLjAwI1Byb2Zlc3Npb25hbGx5IHByZXBhcmVkIGNhcnJ5b3V0IG1lYWxzIzkwLjEwLjE4LjAwLjAwCi11bnNwc2M3IzkwLjEwLjE4LjAyLjAwI0RlbGl2ZXJlZCBtZWFscyBzZXJ2aWNlcyM5MC4xMC4xOC4wMC4wMAotdW5zcHNjNyM5MC4xMS4wMC4wMC4wMCNIb3RlbHMgYW5kIGxvZGdpbmcgYW5kIG1lZXRpbmcgZmFjaWxpdGllcyM5MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM5MC4xMS4xNS4wMC4wMCNIb3RlbHMgYW5kIG1vdGVscyBhbmQgaW5ucyM5MC4xMS4wMC4wMC4wMAotdW5zcHNjNyM5MC4xMS4xNS4wMS4wMCNIb3RlbHMjOTAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjOTAuMTEuMTUuMDIuMDAjTG9kZ2VzIG9yIHJlc29ydHMjOTAuMTEuMTUuMDAuMDAKLXVuc3BzYzcjOTAuMTEuMTUuMDMuMDAjQmVkIGFuZCBicmVha2Zhc3QgaW5ucyM5MC4xMS4xNS4wMC4wMAotdW5zcHNjNyM5MC4xMS4xNS4wNC4wMCNDb3R0YWdlIHJlbnRhbCBzZXJ2aWNlcyM5MC4xMS4xNS4wMC4wMAotdW5zcHNjNyM5MC4xMS4xNi4wMC4wMCNNZWV0aW5nIGZhY2lsaXRpZXMjOTAuMTEuMDAuMDAuMDAKLXVuc3BzYzcjOTAuMTEuMTYuMDEuMDAjQ29uZmVyZW5jZSBjZW50ZXJzIzkwLjExLjE2LjAwLjAwCi11bnNwc2M3IzkwLjExLjE2LjAyLjAwI1ZpZGVvY29uZmVyZW5jaW5nIGZhY2lsaXRpZXMjOTAuMTEuMTYuMDAuMDAKLXVuc3BzYzcjOTAuMTEuMTYuMDMuMDAjTWVldGluZyBvciBiYW5xdWV0IHJvb21zIzkwLjExLjE2LjAwLjAwCi11bnNwc2M3IzkwLjExLjE3LjAwLjAwI0NhbXBpbmcgYW5kIHdpbGRlcm5lc3MgZmFjaWxpdGllcyM5MC4xMS4wMC4wMC4wMAotdW5zcHNjNyM5MC4xMS4xNy4wMS4wMCNDYW1wc2l0ZXMjOTAuMTEuMTcuMDAuMDAKLXVuc3BzYzcjOTAuMTEuMTcuMDIuMDAjR292ZXJubWVudCBvd25lZCBwYXJrcyM5MC4xMS4xNy4wMC4wMAotdW5zcHNjNyM5MC4xMS4xNy4wMy4wMCNSZWNyZWF0aW9uYWwgdmVoaWNsZSBjYW1wc2l0ZSBmYWNpbGl0aWVzIzkwLjExLjE3LjAwLjAwCi11bnNwc2M3IzkwLjEyLjAwLjAwLjAwI1RyYXZlbCBmYWNpbGl0YXRpb24jOTAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjOTAuMTIuMTUuMDAuMDAjVHJhdmVsIGFnZW50cyM5MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM5MC4xMi4xNS4wMS4wMCNUb3VyIGFycmFuZ2VtZW50IHNlcnZpY2VzIzkwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzkwLjEyLjE1LjAyLjAwI1RyYXZlbCBhZ2VuY2llcyM5MC4xMi4xNS4wMC4wMAotdW5zcHNjNyM5MC4xMi4xNS4wMy4wMCNDaGFydGVyaW5nIHNlcnZpY2VzIzkwLjEyLjE1LjAwLjAwCi11bnNwc2M3IzkwLjEyLjE2LjAwLjAwI1RyYXZlbCBkb2N1bWVudCBhc3Npc3RhbmNlIzkwLjEyLjAwLjAwLjAwCi11bnNwc2M3IzkwLjEyLjE2LjAxLjAwI1Bhc3Nwb3J0IHNlcnZpY2VzIzkwLjEyLjE2LjAwLjAwCi11bnNwc2M3IzkwLjEyLjE2LjAyLjAwI1Zpc2Egb3IgYXV4aWxsaWFyeSBkb2N1bWVudCBzZXJ2aWNlcyM5MC4xMi4xNi4wMC4wMAotdW5zcHNjNyM5MC4xMi4xNy4wMC4wMCNHdWlkZXMgYW5kIGludGVycHJldGVycyM5MC4xMi4wMC4wMC4wMAotdW5zcHNjNyM5MC4xMi4xNy4wMS4wMCNBcmVhIG9yIHRvdXIgZ3VpZGVzIzkwLjEyLjE3LjAwLjAwCi11bnNwc2M3IzkwLjEyLjE3LjAyLjAwI0ludGVycHJldGVycyM5MC4xMi4xNy4wMC4wMAotdW5zcHNjNyM5MC4xMy4wMC4wMC4wMCNQZXJmb3JtaW5nIGFydHMjOTAuMDAuMDAuMDAuMDAKLXVuc3BzYzcjOTAuMTMuMTUuMDAuMDAjTGl2ZSBwZXJmb3JtYW5jZXMjOTAuMTMuMDAuMDAuMDAKLXVuc3BzYzcjOTAuMTMuMTUuMDEuMDAjVGhlYXRyaWNhbCBwZXJmb3JtYW5jZXMgb3IgcGxheXMjOTAuMTMuMTUuMDAuMDAKLXVuc3BzYzcjOTAuMTMuMTUuMDIuMDAjRGFuY2UgcGVyZm9ybWFuY2VzIzkwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzkwLjEzLjE1LjAzLjAwI09wZXJhIzkwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzkwLjEzLjE1LjA0LjAwI0NvbmNlcnRzIzkwLjEzLjE1LjAwLjAwCi11bnNwc2M3IzkwLjEzLjE2LjAwLjAwI1RhcGVkIG9yIG1vdGlvbiBwaWN0dXJlIHBlcmZvcm1hbmNlcyM5MC4xMy4wMC4wMC4wMAotdW5zcHNjNyM5MC4xMy4xNi4wMS4wMCNNb3Rpb24gcGljdHVyZXMjOTAuMTMuMTYuMDAuMDAKLXVuc3BzYzcjOTAuMTMuMTYuMDIuMDAjVmlkZW90YXBlZCBlbnRlcnRhaW5tZW50IzkwLjEzLjE2LjAwLjAwCi11bnNwc2M3IzkwLjE0LjAwLjAwLjAwI0NvbW1lcmNpYWwgc3BvcnRzIzkwLjAwLjAwLjAwLjAwCi11bnNwc2M3IzkwLjE0LjE1LjAwLjAwI1Byb2Zlc3Npb25hbCBzcG9ydGluZyBldmVudHMjOTAuMTQuMDAuMDAuMDAKLXVuc3BzYzcjOTAuMTQuMTUuMDEuMDAjTGVhZ3VlIHBsYXkjOTAuMTQuMTUuMDAuMDAKLXVuc3BzYzcjOTAuMTQuMTUuMDIuMDAjQ29tcGV0aXRpdmUgZXZlbnRzIzkwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzkwLjE0LjE1LjAzLjAwI0V4aGliaXRpb25zIzkwLjE0LjE1LjAwLjAwCi11bnNwc2M3IzkwLjE0LjE2LjAwLjAwI1Nwb3J0cyBldmVudCBwcm9tb3Rpb24gYW5kIHNwb25zb3JzaGlwIzkwLjE0LjAwLjAwLjAwCi11bnNwc2M3IzkwLjE0LjE2LjAxLjAwI0NvbXBhbnkgc3BvbnNvcmVkIHByb2Zlc3Npb25hbCBzcG9ydHMgZXZlbnRzIzkwLjE0LjE2LjAwLjAwCi11bnNwc2M3IzkwLjE0LjE2LjAyLjAwI0NvbXBhbnkgc3BvbnNvcmVkIGFtYXRldXIgc3BvcnRzIGV2ZW50cyM5MC4xNC4xNi4wMC4wMAotdW5zcHNjNyM5MC4xNC4xNi4wMy4wMCNTcG9ydGluZyBldmVudCBwcm9tb3Rpb24gc2VydmljZXMjOTAuMTQuMTYuMDAuMDAKLXVuc3BzYzcjOTAuMTQuMTcuMDAuMDAjQW1hdGV1ciBhbmQgcmVjcmVhdGlvbmFsIHNwb3J0cyM5MC4xNC4wMC4wMC4wMAotdW5zcHNjNyM5MC4xNC4xNy4wMS4wMCNZb3V0aCBjb21wZXRpdGl2ZSBzcG9ydHMgbGVhZ3VlcyM5MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM5MC4xNC4xNy4wMi4wMCNBZHVsdCBzcG9ydHMgbGVhZ3VlcyM5MC4xNC4xNy4wMC4wMAotdW5zcHNjNyM5MC4xNC4xNy4wMy4wMCNZb3V0aCBzcG9ydHMjOTAuMTQuMTcuMDAuMDAKLXVuc3BzYzcjOTAuMTUuMDAuMDAuMDAjRW50ZXJ0YWlubWVudCBzZXJ2aWNlcyM5MC4wMC4wMC4wMC4wMAotdW5zcHNjNyM5MC4xNS4xNS4wMC4wMCNUb3VyaXN0IGF0dHJhY3Rpb25zIzkwLjE1LjAwLjAwLjAwCi11bnNwc2M3IzkwLjE1LjE1LjAxLjAwI011c2V1bXMjOTAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjOTAuMTUuMTUuMDIuMDAjSGlzdG9yaWNhbCBvciBjdWx0dXJhbCBzaXRlcyM5MC4xNS4xNS4wMC4wMAotdW5zcHNjNyM5MC4xNS4xNS4wMy4wMCNab29sb2dpY2FsIGdhcmRlbnMjOTAuMTUuMTUuMDAuMDAKLXVuc3BzYzcjOTAuMTUuMTYuMDAuMDAjVHJhdmVsbGluZyBzaG93cyM5MC4xNS4wMC4wMC4wMAotdW5zcHNjNyM5MC4xNS4xNi4wMS4wMCNDaXJjdXNlcyM5MC4xNS4xNi4wMC4wMAotdW5zcHNjNyM5MC4xNS4xNi4wMi4wMCNUb3VyaW5nIGNvbXBhbmllcyM5MC4xNS4xNi4wMC4wMAotdW5zcHNjNyM5MC4xNS4xNi4wMy4wMCNBcnQgZXhoaWJpdGlvbnMjOTAuMTUuMTYuMDAuMDAKLXVuc3BzYzcjOTAuMTUuMTcuMDAuMDAjQW11c2VtZW50IHBhcmtzIzkwLjE1LjAwLjAwLjAwCi11bnNwc2M3IzkwLjE1LjE3LjAxLjAwI1RoZW1lIHBhcmtzIzkwLjE1LjE3LjAwLjAwCi11bnNwc2M3IzkwLjE1LjE3LjAyLjAwI1dhdGVyIHBhcmtzIzkwLjE1LjE3LjAwLjAwCi11bnNwc2M3IzkwLjE1LjE3LjAzLjAwI01pbmlhdHVyZSBnb2xmIGNvdXJzZXMjOTAuMTUuMTcuMDAuMDAKLXVuc3BzYzcjOTAuMTUuMTguMDAuMDAjQ2Fybml2YWxzIGFuZCBmYWlycyM5MC4xNS4wMC4wMC4wMAotdW5zcHNjNyM5MC4xNS4xOC4wMS4wMCNUcmF2ZWxsaW5nIGNhcm5pdmFscyM5MC4xNS4xOC4wMC4wMAotdW5zcHNjNyM5MC4xNS4xOC4wMi4wMCNGYWlyIG9yZ2FuaXphdGlvbiBvciBtYW5hZ2VtZW50IHNlcnZpY2VzIzkwLjE1LjE4LjAwLjAwCi11bnNwc2M3IzkwLjE1LjE5LjAwLjAwI0dhbWJsaW5nIGFuZCBiZXR0aW5nIGVzdGFibGlzaG1lbnRzIzkwLjE1LjAwLjAwLjAwCi11bnNwc2M3IzkwLjE1LjE5LjAxLjAwI0Nhc2lub3MjOTAuMTUuMTkuMDAuMDAKLXVuc3BzYzcjOTAuMTUuMTkuMDIuMDAjQ2FyZCBjbHVicyM5MC4xNS4xOS4wMC4wMAotdW5zcHNjNyM5MC4xNS4xOS4wMy4wMCNSYWNldHJhY2tzIzkwLjE1LjE5LjAwLjAwCi11bnNwc2M3IzkwLjE1LjIwLjAwLjAwI05pZ2h0Y2x1YnMgYW5kIGRhbmNlIGhhbGxzIzkwLjE1LjAwLjAwLjAwCi11bnNwc2M3IzkwLjE1LjIwLjAxLjAwI05pZ2h0Y2x1YnMjOTAuMTUuMjAuMDAuMDAKLXVuc3BzYzcjOTAuMTUuMjAuMDIuMDAjRGFuY2UgaGFsbHMjOTAuMTUuMjAuMDAuMDAKLXVuc3BzYzcjOTEuMDAuMDAuMDAuMDAjUGVyc29uYWwgYW5kIERvbWVzdGljIFNlcnZpY2VzIzkxLjAwLjAwLjAwLjAwCi11bnNwc2M3IzkxLjEwLjAwLjAwLjAwI1BlcnNvbmFsIGFwcGVhcmFuY2UjOTEuMDAuMDAuMDAuMDAKLXVuc3BzYzcjOTEuMTAuMTUuMDAuMDAjU3BhIGFuZCB3b3Jrb3V0IGFuZCByZWp1dmVuYXRpb24gZmFjaWxpdGllcyM5MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM5MS4xMC4xNS4wMS4wMCNIZWFsdGggb3IgZml0bmVzcyBjbHVicyM5MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM5MS4xMC4xNS4wMi4wMCNTcGFzIzkxLjEwLjE1LjAwLjAwCi11bnNwc2M3IzkxLjEwLjE1LjAzLjAwI01hc3NhZ2Ugc2VydmljZXMjOTEuMTAuMTUuMDAuMDAKLXVuc3BzYzcjOTEuMTAuMTUuMDQuMDAjQWVyb2JpY3Mgb3IgZXhlcmNpc2UgY2xhc3NlcyM5MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM5MS4xMC4xNS4wNS4wMCNUdXJraXNoIG9yIHN0ZWFtIG9yIHJpdHVhbCBiYXRocyM5MS4xMC4xNS4wMC4wMAotdW5zcHNjNyM5MS4xMC4xNi4wMC4wMCNGYWNlIGFuZCBib2R5IGNhcmUgYW5kIGFkb3JubWVudCM5MS4xMC4wMC4wMC4wMAotdW5zcHNjNyM5MS4xMC4xNi4wMS4wMCNGYWNpYWwgb3IgYm9keSB0cmVhdG1lbnRzIzkxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzkxLjEwLjE2LjAyLjAwI01ha2UgdXAgY29uc3VsdGF0aW9uIzkxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzkxLjEwLjE2LjAzLjAwI1RhdHRvbyBzZXJ2aWNlcyM5MS4xMC4xNi4wMC4wMAotdW5zcHNjNyM5MS4xMC4xNi4wNC4wMCNCb2R5IHBpZXJjaW5nIHNlcnZpY2VzIzkxLjEwLjE2LjAwLjAwCi11bnNwc2M3IzkxLjEwLjE2LjA1LjAwI0VsZWN0cm9seXNpcyM5MS4xMC4xNi4wMC4wMAotdW5zcHNjNyM5MS4xMC4xNy4wMC4wMCNIYWlyIGNhcmUjOTEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjOTEuMTAuMTcuMDEuMDAjSGFpciBjdXR0aW5nIG9yIGNvbG9yIHNlcnZpY2VzIzkxLjEwLjE3LjAwLjAwCi11bnNwc2M3IzkxLjEwLjE3LjAyLjAwI0hhaXIgd2VhdmluZyBvciByZXBsYWNlbWVudCBzZXJ2aWNlcyM5MS4xMC4xNy4wMC4wMAotdW5zcHNjNyM5MS4xMC4xOC4wMC4wMCNDbG90aGluZyByZW50YWwjOTEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjOTEuMTAuMTguMDEuMDAjVHV4ZWRvIG9yIGZvcm1hbHdlYXIgcmVudGFsIzkxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzkxLjEwLjE4LjAyLjAwI0V2ZW5pbmcgb3IgYnJpZGFsIGdvd24gb3IgZHJlc3MgcmVudGFsIzkxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzkxLjEwLjE4LjAzLjAwI0Nvc3R1bWUgcmVudGFsIzkxLjEwLjE4LjAwLjAwCi11bnNwc2M3IzkxLjEwLjE5LjAwLjAwI0Zhc2hpb24gY29uc3VsdGFudHMjOTEuMTAuMDAuMDAuMDAKLXVuc3BzYzcjOTEuMTAuMTkuMDEuMDAjQ29sb3IgY29uc3VsdGFudCM5MS4xMC4xOS4wMC4wMAotdW5zcHNjNyM5MS4xMC4xOS4wMi4wMCNGYXNoaW9uIHN0eWxpc3QjOTEuMTAuMTkuMDAuMDAKLXVuc3BzYzcjOTEuMTAuMTkuMDMuMDAjV2FyZHJvYmUgY29uc3VsdGFudCM5MS4xMC4xOS4wMC4wMAotdW5zcHNjNyM5MS4xMS4wMC4wMC4wMCNEb21lc3RpYyBhbmQgcGVyc29uYWwgYXNzaXN0YW5jZSM5MS4wMC4wMC4wMC4wMAotdW5zcHNjNyM5MS4xMS4xNS4wMC4wMCNMYXVuZGVyaW5nIHNlcnZpY2VzIzkxLjExLjAwLjAwLjAwCi11bnNwc2M3IzkxLjExLjE1LjAxLjAwI1VuaWZvcm0gcmVudGFsIzkxLjExLjE1LjAwLjAwCi11bnNwc2M3IzkxLjExLjE1LjAyLjAwI0xhdW5kcnkgc2VydmljZXMjOTEuMTEuMTUuMDAuMDAKLXVuc3BzYzcjOTEuMTEuMTUuMDMuMDAjRHJ5IGNsZWFuaW5nIzkxLjExLjE1LjAwLjAwCi11bnNwc2M3IzkxLjExLjE1LjA0LjAwI0NvaW4gb3BlcmF0ZWQgc2VsZiBzZXJ2aWNlIGxhdW5kcmllcyM5MS4xMS4xNS4wMC4wMAotdW5zcHNjNyM5MS4xMS4xNi4wMC4wMCNIb3VzZWhvbGQgYXNzaXN0YW5jZSBhbmQgY2FyZSM5MS4xMS4wMC4wMC4wMAotdW5zcHNjNyM5MS4xMS4xNi4wMS4wMCNIb3VzZWtlZXBpbmcgc2VydmljZXMjOTEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjOTEuMTEuMTYuMDIuMDAjWWFyZCBvciBwb29sIGNhcmUgc2VydmljZXMjOTEuMTEuMTYuMDAuMDAKLXVuc3BzYzcjOTEuMTEuMTYuMDMuMDAjQ29va2luZyBvciBmb29kIHByZXBhcmF0aW9uIHNlcnZpY2VzIzkxLjExLjE2LjAwLjAwCi11bnNwc2M3IzkxLjExLjE3LjAwLjAwI0NvbnN1bWVyIGJ1eWluZyBhbmQgYmFydGVyaW5nIHNlcnZpY2VzIzkxLjExLjAwLjAwLjAwCi11bnNwc2M3IzkxLjExLjE3LjAxLjAwI1VzZWQgY2xvdGhpbmcgY29uc2lnbm1lbnQgc2VydmljZXMjOTEuMTEuMTcuMDAuMDAKLXVuc3BzYzcjOTEuMTEuMTcuMDIuMDAjQmFydGVyIGNsdWJzIG9yIGNvbnNvcnRpdW1zIzkxLjExLjE3LjAwLjAwCi11bnNwc2M3IzkxLjExLjE3LjAzLjAwI1dhcmRyb2JlIGJ1eWluZyBzZXJ2aWNlcyM5MS4xMS4xNy4wMC4wMAotdW5zcHNjNyM5MS4xMS4xOC4wMC4wMCNQZXJzb25hbCBpdGVtIGNhcmUgYW5kIHN0b3JhZ2UjOTEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjOTEuMTEuMTguMDEuMDAjVmFsZXQgc2VydmljZXMjOTEuMTEuMTguMDAuMDAKLXVuc3BzYzcjOTEuMTEuMTguMDIuMDAjQ2hlY2sgcm9vbSBjb25jZXNzaW9ucyM5MS4xMS4xOC4wMC4wMAotdW5zcHNjNyM5MS4xMS4xOC4wMy4wMCNMb2NrZXIgcmVudGFsIzkxLjExLjE4LjAwLjAwCi11bnNwc2M3IzkxLjExLjE4LjA0LjAwI0Z1ciBzdG9yYWdlIzkxLjExLjE4LjAwLjAwCi11bnNwc2M3IzkxLjExLjE5LjAwLjAwI1BlcnNvbmFsIGNhcmUgc2VydmljZXMjOTEuMTEuMDAuMDAuMDAKLXVuc3BzYzcjOTEuMTEuMTkuMDEuMDAjSW5mYW50IG9yIGNoaWxkIGRheWNhcmUgc2VydmljZXMjOTEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjOTEuMTEuMTkuMDIuMDAjTmFubnkgb3IgYmFieXNpdHRpbmcgc2VydmljZXMjOTEuMTEuMTkuMDAuMDAKLXVuc3BzYzcjOTEuMTEuMTkuMDMuMDAjRWxkZXJseSBkYXljYXJlIHNlcnZpY2VzIzkxLjExLjE5LjAwLjAwCi11bnNwc2M3IzkxLjExLjE5LjA0LjAwI0Fzc2lzdGVkIGxpdmluZyBzZXJ2aWNlcyM5MS4xMS4xOS4wMC4wMAotdW5zcHNjNyM5Mi4wMC4wMC4wMC4wMCNOYXRpb25hbCBEZWZlbnNlIGFuZCBQdWJsaWMgT3JkZXIgYW5kIFNlY3VyaXR5IGFuZCBTYWZldHkgU2VydmljZXMjOTIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjOTIuMTAuMDAuMDAuMDAjUHVibGljIG9yZGVyIGFuZCBzYWZldHkjOTIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjOTIuMTAuMTUuMDAuMDAjUG9saWNlIHNlcnZpY2VzIzkyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzkyLjEwLjE1LjAxLjAwI1BvbGljaW5nIHNlcnZpY2VzIzkyLjEwLjE1LjAwLjAwCi11bnNwc2M3IzkyLjEwLjE1LjAyLjAwI1NwZWNpYWwgd2VhcG9ucyBhbmQgdGFjdGljcyAoU1dBVCkgb3IgcmlvdCB0ZWFtcyM5Mi4xMC4xNS4wMC4wMAotdW5zcHNjNyM5Mi4xMC4xNS4wMy4wMCNDb21tdW5pdHkgb3V0cmVhY2ggcHJvZ3JhbXMjOTIuMTAuMTUuMDAuMDAKLXVuc3BzYzcjOTIuMTAuMTUuMDQuMDAjQ3JpbWUgZGV0ZXJyZW5jZSBwcm9ncmFtcyM5Mi4xMC4xNS4wMC4wMAotdW5zcHNjNyM5Mi4xMC4xNi4wMC4wMCNGaXJlIHNlcnZpY2VzIzkyLjEwLjAwLjAwLjAwCi11bnNwc2M3IzkyLjEwLjE2LjAxLjAwI011bmljaXBhbCBvciBuYXRpb25hbCBmaXJlZmlnaHRpbmcgc2VydmljZXMjOTIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjOTIuMTAuMTYuMDIuMDAjVm9sdW50ZWVyIGZpcmUgZGVwYXJ0bWVudCBzZXJ2aWNlcyM5Mi4xMC4xNi4wMC4wMAotdW5zcHNjNyM5Mi4xMC4xNi4wMy4wMCNGaXJlIHByZXZlbnRpb24gc2VydmljZXMjOTIuMTAuMTYuMDAuMDAKLXVuc3BzYzcjOTIuMTAuMTYuMDQuMDAjRm9yZXN0IG9yIHdpbGRlcm5lc3MgZmlyZWZpZ2h0aW5nIHNlcnZpY2VzIzkyLjEwLjE2LjAwLjAwCi11bnNwc2M3IzkyLjEwLjE3LjAwLjAwI0phaWwgYW5kIHByaXNvbiBzeXN0ZW0jOTIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjOTIuMTAuMTcuMDEuMDAjSmFpbCBvciBwcmlzb24gb3IgcGVuaXRlbnRpYXJ5IHNlcnZpY2VzIzkyLjEwLjE3LjAwLjAwCi11bnNwc2M3IzkyLjEwLjE3LjAyLjAwI1lvdXRoIGNhbXBzIG9yIGZhY2lsaXRpZXMgc2VydmljZXMjOTIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjOTIuMTAuMTcuMDMuMDAjSGFsZiB3YXkgaG91c2Ugc2VydmljZXMjOTIuMTAuMTcuMDAuMDAKLXVuc3BzYzcjOTIuMTAuMTcuMDQuMDAjTWVudGFsbHkgaW1wYWlyZWQgY3JpbWluYWwgZmFjaWxpdGllcyM5Mi4xMC4xNy4wMC4wMAotdW5zcHNjNyM5Mi4xMC4xOC4wMC4wMCNDb3VydCBzeXN0ZW0jOTIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjOTIuMTAuMTguMDEuMDAjU2hlcmlmZnMgc2VydmljZXMjOTIuMTAuMTguMDAuMDAKLXVuc3BzYzcjOTIuMTAuMTguMDIuMDAjUGxlYSBiYXJnYWluIGFncmVlbWVudHMjOTIuMTAuMTguMDAuMDAKLXVuc3BzYzcjOTIuMTAuMTguMDMuMDAjQ2l2aWwgY2FzZSBjb3VydCBleHBlbnNlcyM5Mi4xMC4xOC4wMC4wMAotdW5zcHNjNyM5Mi4xMC4xOC4wNC4wMCNDcmltaW5hbCBjYXNlIGZlZXMgb3IgZmluZXMjOTIuMTAuMTguMDAuMDAKLXVuc3BzYzcjOTIuMTAuMTguMDUuMDAjQXBwZWFscyBwcm9jZXNzIG9yIGp1ZGljaWFsIHJldmlldyM5Mi4xMC4xOC4wMC4wMAotdW5zcHNjNyM5Mi4xMC4xOS4wMC4wMCNSZXNjdWUgc2VydmljZXMjOTIuMTAuMDAuMDAuMDAKLXVuc3BzYzcjOTIuMTAuMTkuMDEuMDAjU2VhcmNoIGFuZCByZXNjdWUgdGVhbXMjOTIuMTAuMTkuMDAuMDAKLXVuc3BzYzcjOTIuMTAuMTkuMDIuMDAjQW1idWxhbmNlIHNlcnZpY2VzIzkyLjEwLjE5LjAwLjAwCi11bnNwc2M3IzkyLjEwLjE5LjAzLjAwI0xpZmUgc2F2aW5nIGhlbGljb3B0ZXIgc2VydmljZXMjOTIuMTAuMTkuMDAuMDAKLXVuc3BzYzcjOTIuMTAuMTkuMDQuMDAjTGlmZWd1YXJkIHNlcnZpY2VzIGZvciBwb29sIG9yIGJlYWNoIzkyLjEwLjE5LjAwLjAwCi11bnNwc2M3IzkyLjExLjAwLjAwLjAwI01pbGl0YXJ5IHNlcnZpY2VzIGFuZCBuYXRpb25hbCBkZWZlbnNlIzkyLjAwLjAwLjAwLjAwCi11bnNwc2M3IzkyLjExLjE1LjAwLjAwI01haW50ZW5hbmNlIG9mIGludGVybmF0aW9uYWwgcGVhY2UgYW5kIHNlY3VyaXR5IzkyLjExLjAwLjAwLjAwCi11bnNwc2M3IzkyLjExLjE1LjAxLjAwI0Rpc3B1dGUgbWVkaWF0aW9uIG9yIGNvbmNpbGlhdGlvbiBvciBuZWdvdGlhdGlvbiBvciBzZXR0bGVtZW50IzkyLjExLjE1LjAwLjAwCi11bnNwc2M3IzkyLjExLjE1LjAyLjAwI1BlYWNlIGtlZXBpbmcgb3BlcmF0aW9ucyM5Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xNS4wMy4wMCNDZWFzZSBmaXJlIGFncmVlbWVudHMgb3IgdHJ1Y2Ugc3VwZXJ2aXNpb24jOTIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTUuMDQuMDAjRmFjdCBmaW5kaW5nIG1pc3Npb25zIzkyLjExLjE1LjAwLjAwCi11bnNwc2M3IzkyLjExLjE1LjA1LjAwI1dhciBwcmV2ZW50aW9uIHN0cmF0ZWdpZXMjOTIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTUuMDYuMDAjQ291bnRlcnRlcnJvcmlzbSM5Mi4xMS4xNS4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xNS4wNy4wMCNFbWJhcmdvZXMjOTIuMTEuMTUuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTYuMDAuMDAjRGlzYXJtYW1lbnQjOTIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTYuMDEuMDAjQXJtcyBsaW1pdGF0aW9ucyM5Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xNi4wMi4wMCNDb252ZW50aW9uYWwgYXJtcyBkaXNhcm1hbWVudCM5Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xNi4wMy4wMCNOdWNsZWFyIGZyZWV6ZXMgb3IgZGlzYXJtYW1lbnQjOTIuMTEuMTYuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTYuMDQuMDAjV2VhcG9ucyBkZXN0cnVjdGlvbiM5Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xNi4wNS4wMCNEaXNhcm1hbWVudCBuZWdvdGlhdGlvbnMgb3IgYWdyZWVtZW50cyM5Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xNi4wNi4wMCNNdXR1YWwgb3IgYmFsYW5jZWQgZm9yY2UgcmVkdWN0aW9ucyM5Mi4xMS4xNi4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xNy4wMC4wMCNNaWxpdGFyeSBzY2llbmNlIGFuZCByZXNlYXJjaCM5Mi4xMS4wMC4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xNy4wMS4wMCNNaWxpdGFyeSBoaXN0b3J5IzkyLjExLjE3LjAwLjAwCi11bnNwc2M3IzkyLjExLjE3LjAyLjAwI0NvbnZlbnRpb25hbCB3ZWFwb25zIHVzYWdlIzkyLjExLjE3LjAwLjAwCi11bnNwc2M3IzkyLjExLjE3LjAzLjAwI0NoZW1pY2FsIHdlYXBvbnMgdXNhZ2UjOTIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTcuMDQuMDAjR3VlcmlsbGEgd2FyZmFyZSM5Mi4xMS4xNy4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xNy4wNS4wMCNNaWxpdGFyeSBzdHJhdGVneSM5Mi4xMS4xNy4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xNy4wNi4wMCNBZXJpYWwgbWFuZXV2ZXJzIzkyLjExLjE3LjAwLjAwCi11bnNwc2M3IzkyLjExLjE3LjA3LjAwI05hdmFsIG9yIHN1Ym1hcmluZSBtYW5ldXZlcnMjOTIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTcuMDguMDAjTGFuZCBtYW5ldXZlcnMjOTIuMTEuMTcuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTguMDAuMDAjTWlsaXRhcnkgcGVyc29ubmVsIGFuZCBkaXNjaXBsaW5lIzkyLjExLjAwLjAwLjAwCi11bnNwc2M3IzkyLjExLjE4LjAxLjAwI0NpdmlsIGRlZmVuc2UjOTIuMTEuMTguMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTguMDIuMDAjQ29tcHVsc29yeSBtaWxpdGFyeSBzZXJ2aWNlcyM5Mi4xMS4xOC4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xOC4wMy4wMCNWb2x1bnRhcnkgbWlsaXRhcnkgc2VydmljZXMjOTIuMTEuMTguMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTguMDQuMDAjTWlsaXRhcnkgcmVzZXJ2aXN0cyM5Mi4xMS4xOC4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xOC4wNS4wMCNHdWVyaWxsYXMjOTIuMTEuMTguMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTguMDYuMDAjTWVyY2VuYXJpZXMjOTIuMTEuMTguMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTguMDcuMDAjVmV0ZXJhbnMjOTIuMTEuMTguMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTguMDguMDAjTWlsaXRhcnkgY291cnRzIzkyLjExLjE4LjAwLjAwCi11bnNwc2M3IzkyLjExLjE4LjA5LjAwI01pbGl0YXJ5IG9mZmVuc2VzIzkyLjExLjE4LjAwLjAwCi11bnNwc2M3IzkyLjExLjE4LjEwLjAwI01pbGl0YXJ5IHBlcnNvbm5lbCM5Mi4xMS4xOC4wMC4wMAotdW5zcHNjNyM5Mi4xMS4xOS4wMC4wMCNNaWxpdGFyeSBwb2xpY3kjOTIuMTEuMDAuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTkuMDEuMDAjTmF0aW9uYWwgc2VjdXJpdHkjOTIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTkuMDIuMDAjRGVmZW5zZSBjb250cmFjdHMjOTIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTkuMDMuMDAjTm9uIGZpcnN0IHVzZSBwb2xpY3kjOTIuMTEuMTkuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMTkuMDQuMDAjQXJtcyByYWNlIzkyLjExLjE5LjAwLjAwCi11bnNwc2M3IzkyLjExLjE5LjA1LjAwI01pbGl0YXJ5IHJlbGF0aW9ucyM5Mi4xMS4xOS4wMC4wMAotdW5zcHNjNyM5Mi4xMS4yMC4wMC4wMCNNaWxpdGFyeSB6b25lcyM5Mi4xMS4wMC4wMC4wMAotdW5zcHNjNyM5Mi4xMS4yMC4wMS4wMCNEZW1pbGl0YXJpemVkIHpvbmVzIzkyLjExLjIwLjAwLjAwCi11bnNwc2M3IzkyLjExLjIwLjAyLjAwI051Y2xlYXIgb3IgY2hlbWljYWwgd2VhcG9uIGZyZWUgem9uZXMjOTIuMTEuMjAuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMjAuMDMuMDAjUGVhY2Ugem9uZXMjOTIuMTEuMjAuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMjAuMDQuMDAjTm8gZmx5IHpvbmVzIzkyLjExLjIwLjAwLjAwCi11bnNwc2M3IzkyLjExLjIxLjAwLjAwI051Y2xlYXIgd2FyZmFyZSM5Mi4xMS4wMC4wMC4wMAotdW5zcHNjNyM5Mi4xMS4yMS4wMS4wMCNOdWNsZWFyIHNhZmVndWFyZHMjOTIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMjEuMDIuMDAjTnVjbGVhciB3ZWFwb24gdGVzdHMjOTIuMTEuMjEuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMjEuMDMuMDAjTnVjbGVhciBub24gcHJvbGlmZXJhdGlvbiM5Mi4xMS4yMS4wMC4wMAotdW5zcHNjNyM5Mi4xMS4yMi4wMC4wMCNNaWxpdGFyeSB0YWN0aWNzIzkyLjExLjAwLjAwLjAwCi11bnNwc2M3IzkyLjExLjIyLjAxLjAwI1dlYXBvbnMgZGVwbG95bWVudCM5Mi4xMS4yMi4wMC4wMAotdW5zcHNjNyM5Mi4xMS4yMi4wMi4wMCNNaWxpdGFyeSByZWNvbm5haXNzYW5jZSM5Mi4xMS4yMi4wMC4wMAotdW5zcHNjNyM5Mi4xMS4yMi4wMy4wMCNBcm1zIHRyYW5zZmVycyM5Mi4xMS4yMi4wMC4wMAotdW5zcHNjNyM5Mi4xMS4yMi4wNC4wMCNNaWxpdGFyeSBhc3Npc3RhbmNlIzkyLjExLjIyLjAwLjAwCi11bnNwc2M3IzkyLjExLjIyLjA1LjAwI1Ryb29wIHdpdGhkcmF3YWxzIzkyLjExLjIyLjAwLjAwCi11bnNwc2M3IzkyLjExLjIyLjA2LjAwI1JhcGlkIGRlcGxveW1lbnQgZm9yY2VzIzkyLjExLjIyLjAwLjAwCi11bnNwc2M3IzkyLjExLjIyLjA3LjAwI0Vudmlyb25tZW50YWwgd2FyZmFyZSM5Mi4xMS4yMi4wMC4wMAotdW5zcHNjNyM5Mi4xMS4yMy4wMC4wMCNNaWxpdGFyeSBiYXNlcyM5Mi4xMS4wMC4wMC4wMAotdW5zcHNjNyM5Mi4xMS4yMy4wMS4wMCNEb21lc3RpYyBtaWxpdGFyeSBiYXNlcyM5Mi4xMS4yMy4wMC4wMAotdW5zcHNjNyM5Mi4xMS4yMy4wMi4wMCNGb3JlaWduIG1pbGl0YXJ5IGJhc2VzIzkyLjExLjIzLjAwLjAwCi11bnNwc2M3IzkyLjExLjIzLjAzLjAwI05hdmFsIGJhc2VzIzkyLjExLjIzLjAwLjAwCi11bnNwc2M3IzkyLjExLjI0LjAwLjAwI0FybWVkIGNvbmZsaWN0cyBhbmQgaW5jaWRlbnRzIzkyLjExLjAwLjAwLjAwCi11bnNwc2M3IzkyLjExLjI0LjAxLjAwI0JvcmRlciBpbmNpZGVudHMjOTIuMTEuMjQuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMjQuMDIuMDAjTGltaXRlZCB3YXIjOTIuMTEuMjQuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMjQuMDMuMDAjTnVjbGVhciB3YXIjOTIuMTEuMjQuMDAuMDAKLXVuc3BzYzcjOTIuMTEuMjQuMDQuMDAjU3BhY2UgYmFzZWQgd2FyIzkyLjExLjI0LjAwLjAwCi11bnNwc2M3IzkyLjExLjI0LjA1LjAwI1Jlc3BvbnNlIHRvIHRlcnJvcmlzdCBhdHRhY2tzIzkyLjExLjI0LjAwLjAwCi11bnNwc2M3IzkyLjEyLjAwLjAwLjAwI1NlY3VyaXR5IGFuZCBwZXJzb25hbCBzYWZldHkjOTIuMDAuMDAuMDAuMDAKLXVuc3BzYzcjOTIuMTIuMTUuMDAuMDAjR3VhcmQgc2VydmljZXMjOTIuMTIuMDAuMDAuMDAKLXVuc3BzYzcjOTIuMTIuMTUuMDEuMDAjQXJtb3JlZCBjYXIgc2VydmljZXMjOTIuMTIuMTUuMDAuMDAKLXVuc3BzYzcjOTIuMTIuMTUuMDIuMDAjQnVyZ2xhcnkgcHJvdGVjdGlvbiBzZXJ2aWNlcyM5Mi4xMi4xNS4wMC4wMAotdW5zcHNjNyM5Mi4xMi4xNS4wMy4wMCNHdWFyZCBkb2cgcmVudGFsIzkyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzkyLjEyLjE1LjA0LjAwI1NlY3VyaXR5IGd1YXJkIHNlcnZpY2VzIzkyLjEyLjE1LjAwLjAwCi11bnNwc2M3IzkyLjEyLjE2LjAwLjAwI0RldGVjdGl2ZSBzZXJ2aWNlcyM5Mi4xMi4wMC4wMC4wMAotdW5zcHNjNyM5Mi4xMi4xNi4wMS4wMCNEZXRlY3RpdmUgYWdlbmNpZXMjOTIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjOTIuMTIuMTYuMDIuMDAjRmluZ2VycHJpbnQgc2VydmljZXMjOTIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjOTIuMTIuMTYuMDMuMDAjTGllIGRldGVjdGlvbiBzZXJ2aWNlcyM5Mi4xMi4xNi4wMC4wMAotdW5zcHNjNyM5Mi4xMi4xNi4wNC4wMCNQcml2YXRlIGludmVzdGlnYXRpb24gc2VydmljZXMjOTIuMTIuMTYuMDAuMDAKLXVuc3BzYzcjOTIuMTIuMTcuMDAuMDAjU2VjdXJpdHkgc3lzdGVtcyBzZXJ2aWNlcyM5Mi4xMi4wMC4wMC4wMAotdW5zcHNjNyM5Mi4xMi4xNy4wMS4wMCNTdXJ2ZWlsbGFuY2Ugb3IgYWxhcm0gbWFpbnRlbmFuY2Ugb3IgbW9uaXRvcmluZyM5Mi4xMi4xNy4wMC4wMAotdW5zcHNjNyM5Mi4xMi4xNy4wMi4wMCNGaXJlIGFsYXJtIG1haW50ZW5hbmNlIG9yIG1vbml0b3JpbmcjOTIuMTIuMTcuMDAuMDAKLXVuc3BzYzcjOTIuMTIuMTcuMDMuMDAjU3RvcmUgb3IgYnVzaW5lc3MgYW50aSB0aGVmdCBzZXJ2aWNlcyM5Mi4xMi4xNy4wMC4wMAotdW5zcHNjNyM5Mi4xMi4xNy4wNC4wMCNDb25maW5lbWVudCBzdXJ2ZWlsbGFuY2Ugc3lzdGVtcyBtYWludGVuYW5jZSBvciBtb25pdG9yaW5nIzkyLjEyLjE3LjAwLjAwCi11bnNwc2M3IzkzLjAwLjAwLjAwLjAwI1BvbGl0aWNzIGFuZCBDaXZpYyBBZmZhaXJzIFNlcnZpY2VzIzkzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzkzLjEwLjAwLjAwLjAwI1BvbGl0aWNhbCBzeXN0ZW1zIGFuZCBpbnN0aXR1dGlvbnMjOTMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTAuMTUuMDAuMDAjUG9saXRpY2FsIGJvZGllcyM5My4xMC4wMC4wMC4wMAotdW5zcHNjNyM5My4xMC4xNS4wMS4wMCNQb2xpdGljYWwgcGFydGllcyByZXByZXNlbnRhdGlvbiBzZXJ2aWNlcyM5My4xMC4xNS4wMC4wMAotdW5zcHNjNyM5My4xMC4xNS4wMi4wMCNQb2xpdGljYWwgcGFydGllcyBmdW5kIHJhaXNpbmcgc2VydmljZXMjOTMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTAuMTUuMDMuMDAjUG9saXRpY2FsIHBhcnRpZXMgcHVibGljIGFwcGVhcmFuY2Ugc2VydmljZXMjOTMuMTAuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTAuMTUuMDQuMDAjUG9saXRpY2FsIGxlZ2lzbGF0dXJlIHNlcnZpY2VzIzkzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzkzLjEwLjE1LjA1LjAwI1BvbGl0aWNhbCBqdWRpY2lhbCBwb3dlciBvciBzZXJ2aWNlcyM5My4xMC4xNS4wMC4wMAotdW5zcHNjNyM5My4xMC4xNS4wNi4wMCNQb2xpdGljYWwgZXhlY3V0aXZlIHBvd2VyIG9yIHNlcnZpY2VzIzkzLjEwLjE1LjAwLjAwCi11bnNwc2M3IzkzLjEwLjE2LjAwLjAwI1BvbGl0aWNhbCBvZmZpY2lhbHMjOTMuMTAuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTAuMTYuMDEuMDAjQ2FiaW5ldCBvZmZpY2VycyBzZXJ2aWNlcyM5My4xMC4xNi4wMC4wMAotdW5zcHNjNyM5My4xMC4xNi4wMi4wMCNHb3Zlcm5vcnMgc2VydmljZXMjOTMuMTAuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTAuMTYuMDMuMDAjSGVhZHMgb2Ygc3RhdGVzIHNlcnZpY2VzIzkzLjEwLjE2LjAwLjAwCi11bnNwc2M3IzkzLjEwLjE2LjA0LjAwI1ByZXNpZGVudGlhbCBzZXJ2aWNlcyM5My4xMC4xNi4wMC4wMAotdW5zcHNjNyM5My4xMC4xNi4wNS4wMCNQcmltZSBtaW5pc3RlcnMgc2VydmljZXMjOTMuMTAuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTAuMTYuMDYuMDAjTW9uYXJjaCBzZXJ2aWNlcyM5My4xMC4xNi4wMC4wMAotdW5zcHNjNyM5My4xMC4xNi4wNy4wMCNTdGF0ZXNtZW4gc2VydmljZXMjOTMuMTAuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTAuMTYuMDguMDAjUGFybGlhbWVudCBtZW1iZXJzIHNlcnZpY2VzIzkzLjEwLjE2LjAwLjAwCi11bnNwc2M3IzkzLjEwLjE3LjAwLjAwI0xlZ2lzbGF0aXZlIGJvZGllcyBhbmQgcHJhY3RpY2UjOTMuMTAuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTAuMTcuMDEuMDAjTmF0aW9uYWwgY291bmNpbCBzZXJ2aWNlcyM5My4xMC4xNy4wMC4wMAotdW5zcHNjNyM5My4xMC4xNy4wMi4wMCNDb3Jwb3JhdGUgc3RhdGVzIzkzLjEwLjE3LjAwLjAwCi11bnNwc2M3IzkzLjEwLjE3LjAzLjAwI0JpbGwgZHJhZnRpbmcgc2VydmljZXMjOTMuMTAuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTAuMTcuMDQuMDAjTGVnaXNsYXRpdmUgaGVhcmluZ3Mgc2VydmljZXMjOTMuMTAuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTAuMTcuMDUuMDAjSW50ZWxsaWdlbmNlIHNlcnZpY2VzIzkzLjEwLjE3LjAwLjAwCi11bnNwc2M3IzkzLjEwLjE3LjA2LjAwI0xlZ2lzbGF0b3JzIHNlcnZpY2VzIzkzLjEwLjE3LjAwLjAwCi11bnNwc2M3IzkzLjEwLjE3LjA3LjAwI1BhcmxpYW1lbnRhcnkgcHJhY3RpY2Ugc2VydmljZXMjOTMuMTAuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTEuMDAuMDAuMDAjU29jaW8gcG9saXRpY2FsIGNvbmRpdGlvbnMjOTMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTEuMTUuMDAuMDAjUG9saXRpY2FsIG1vdmVtZW50cyM5My4xMS4wMC4wMC4wMAotdW5zcHNjNyM5My4xMS4xNS4wMS4wMCNFeHRyZW1pc3QgbW92ZW1lbnRzIzkzLjExLjE1LjAwLjAwCi11bnNwc2M3IzkzLjExLjE1LjAyLjAwI1BlYWNlIG1vdmVtZW50cyM5My4xMS4xNS4wMC4wMAotdW5zcHNjNyM5My4xMS4xNS4wMy4wMCNQcm90ZXN0IG1vdmVtZW50cyM5My4xMS4xNS4wMC4wMAotdW5zcHNjNyM5My4xMS4xNS4wNC4wMCNVbmRlcmdyb3VuZCBtb3ZlbWVudHMjOTMuMTEuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTEuMTUuMDUuMDAjU3R1ZGVudCBtb3ZlbWVudHMjOTMuMTEuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTEuMTUuMDYuMDAjUGVhc2FudCBtb3ZlbWVudHMjOTMuMTEuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTEuMTUuMDcuMDAjT3Bwb3NpdGlvbiBtb3ZlbWVudHMjOTMuMTEuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTEuMTYuMDAuMDAjUG9saXRpY2FsIHJlcHJlc2VudGF0aW9uIGFuZCBwYXJ0aWNpcGF0aW9uIzkzLjExLjAwLjAwLjAwCi11bnNwc2M3IzkzLjExLjE2LjAxLjAwI1BvbGl0aWNhbCByZXByZXNlbnRhdGlvbiM5My4xMS4xNi4wMC4wMAotdW5zcHNjNyM5My4xMS4xNi4wMi4wMCNQb2xpdGljYWwgcGFydGljaXBhdGlvbiM5My4xMS4xNi4wMC4wMAotdW5zcHNjNyM5My4xMS4xNi4wMy4wMCNQcm9wb3J0aW9uYWwgcmVwcmVzZW50YXRpb24jOTMuMTEuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTEuMTYuMDQuMDAjVm90ZSBjYXRjaGVyIHNlcnZpY2VzIzkzLjExLjE2LjAwLjAwCi11bnNwc2M3IzkzLjExLjE2LjA1LjAwI1ZvdGVyIHJlZ2lzdHJhdGlvbiBvciBjb3VudGluZyBvciBhbmFseXNpcyBvciBzY3J1dGlueSBzZXJ2aWNlcyM5My4xMS4xNi4wMC4wMAotdW5zcHNjNyM5My4xMS4xNi4wNi4wMCNQcmVzc3VyZSBncm91cHMgcmVwcmVzZW50YXRpb24gb3IgcGFydGljaXBhdGlvbiBzZXJ2aWNlcyM5My4xMS4xNi4wMC4wMAotdW5zcHNjNyM5My4xMS4xNi4wNy4wMCNFbGVjdGlvbiBhbmFseXNpcyBzZXJ2aWNlcyM5My4xMS4xNi4wMC4wMAotdW5zcHNjNyM5My4xMS4xNi4wOC4wMCNFbGVjdGlvbiBvcmdhbml6YXRpb24gc2VydmljZXMjOTMuMTEuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMDAuMDAuMDAjSW50ZXJuYXRpb25hbCByZWxhdGlvbnMjOTMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMTUuMDAuMDAjRGlwbG9tYWN5IzkzLjEyLjAwLjAwLjAwCi11bnNwc2M3IzkzLjEyLjE1LjAxLjAwI0RpcGxvbWF0aWMgc2VydmljZXMjOTMuMTIuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMTUuMDIuMDAjQ29uc3VsYXIgc2VydmljZXMjOTMuMTIuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMTUuMDMuMDAjRGlwbG9tYXRzIHNlY3VyaXR5IHNlcnZpY2VzIzkzLjEyLjE1LjAwLjAwCi11bnNwc2M3IzkzLjEyLjE1LjA0LjAwI0RpcGxvbWF0aWMgcHJpdmlsZWdlcyBvciBpbW11bml0aWVzIHNlcnZpY2VzIzkzLjEyLjE1LjAwLjAwCi11bnNwc2M3IzkzLjEyLjE1LjA1LjAwI1N0YXRlIGltbXVuaXRpZXMgc2VydmljZXMjOTMuMTIuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMTUuMDYuMDAjRW1iYXNzaWVzIG9yIGFtYmFzc2Fkb3JzIHNlcnZpY2VzIzkzLjEyLjE1LjAwLjAwCi11bnNwc2M3IzkzLjEyLjE1LjA3LjAwI1N0YXRlIHZpc2l0cyBvcmdhbml6YXRpb24gc2VydmljZXMjOTMuMTIuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMTUuMDguMDAjSW50ZXJuYXRpb25hbCBsYXcgcHJlc2NyaXB0aW9uIHNlcnZpY2VzIzkzLjEyLjE1LjAwLjAwCi11bnNwc2M3IzkzLjEyLjE1LjA5LjAwI0ludGVybmF0aW9uYWwgbGF3IHByb21vdGlvbiBvciByZWNvZ25pdGlvbiBzZXJ2aWNlcyM5My4xMi4xNS4wMC4wMAotdW5zcHNjNyM5My4xMi4xNi4wMC4wMCNJbnRlcm5hdGlvbmFsIHJlbGF0aW9ucyBhbmQgY29vcGVyYXRpb24jOTMuMTIuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMTYuMDEuMDAjTXVsdGlsYXRlcmFsIGNvb3BlcmF0aW9uIHNlcnZpY2VzIzkzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzkzLjEyLjE2LjAyLjAwI01pbGl0YXJ5IGNvb3BlcmF0aW9uIHNlcnZpY2VzIzkzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzkzLjEyLjE2LjAzLjAwI1BvbGl0aWNhbCBjb29wZXJhdGlvbiBzZXJ2aWNlcyM5My4xMi4xNi4wMC4wMAotdW5zcHNjNyM5My4xMi4xNi4wNC4wMCNJbnRlcm5hdGlvbmFsIGVjb25vbWljIGNvb3BlcmF0aW9uIHNlcnZpY2VzIzkzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzkzLjEyLjE2LjA1LjAwI05vcnRoIHNvdXRoIGNvb3BlcmF0aW9uIHNlcnZpY2VzIzkzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzkzLjEyLjE2LjA2LjAwI0Vhc3Qgd2VzdCBjb29wZXJhdGlvbiBzZXJ2aWNlcyM5My4xMi4xNi4wMC4wMAotdW5zcHNjNyM5My4xMi4xNi4wNy4wMCNJbnRlcm5hdGlvbmFsIGNvb3BlcmF0aW9uIHNlcnZpY2VzIzkzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzkzLjEyLjE2LjA4LjAwI05vbiBnb3Zlcm5tZW50YWwgbGlhaXNvbiBzZXJ2aWNlcyM5My4xMi4xNi4wMC4wMAotdW5zcHNjNyM5My4xMi4xNi4wOS4wMCNOb24gYWxpZ25lZCBjb3VudHJpZXMgY29vcGVyYXRpb24jOTMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMTYuMTAuMDAjQWxpZ25lZCBjb3VudHJpZXMgY29vcGVyYXRpb24jOTMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMTYuMTEuMDAjUG9saXRpY2FsIGNyaW1lcyBjb29wZXJhdGlvbiBzZXJ2aWNlcyM5My4xMi4xNi4wMC4wMAotdW5zcHNjNyM5My4xMi4xNi4xMi4wMCNQZWFjZSB0cmVhdGllcyBjb29wZXJhdGlvbiM5My4xMi4xNi4wMC4wMAotdW5zcHNjNyM5My4xMi4xNi4xMy4wMCNUcmVhdHkgc2lnbmF0dXJlIG9yIGFjY2Vzc2lvbnMgb3IgcmVjdGlmaWNhdGlvbiBzZXJ2aWNlcyM5My4xMi4xNi4wMC4wMAotdW5zcHNjNyM5My4xMi4xNi4xNC4wMCNJbnRlcm5hdGlvbmFsIHdhdGVyY291cnNlIGNvb3BlcmF0aW9uIHNlcnZpY2VzIzkzLjEyLjE2LjAwLjAwCi11bnNwc2M3IzkzLjEyLjE2LjE1LjAwI1RlcnJpdG9yaWFsIGNsYWltcyBvciBuZWdvdGlhdGlvbnMgdGhpcmQgcGFydHkgc2VydmljZXMjOTMuMTIuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMTcuMDAuMDAjSW50ZXJuYXRpb25hbCBvcmdhbml6YXRpb25zIzkzLjEyLjAwLjAwLjAwCi11bnNwc2M3IzkzLjEyLjE3LjAxLjAwI1N5c3RlbSBvZiBvcmdhbml6YXRpb25zIHNlcnZpY2VzIzkzLjEyLjE3LjAwLjAwCi11bnNwc2M3IzkzLjEyLjE3LjAyLjAwI1NlY3VyaXR5IGNvdW5jaWwgc2VydmljZXMjOTMuMTIuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMTcuMDMuMDAjRWNvbm9taWMgb3Igc29jaWFsIGNvdW5jaWwgc2VydmljZXMjOTMuMTIuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMTcuMDQuMDAjU2VjcmV0YXJpYXQgc2VydmljZXMjOTMuMTIuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMTcuMDUuMDAjVHJ1c3RzaGlwIGNvdW5jaWwgc2VydmljZXMjOTMuMTIuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMTcuMDYuMDAjR2VuZXJhbCBhc3NlbWJseSBzZXJ2aWNlcyM5My4xMi4xNy4wMC4wMAotdW5zcHNjNyM5My4xMi4xNy4wNy4wMCNJbnRlcm5hdGlvbmFsIGNvdXJ0IG9mIGp1c3RpY2Ugc2VydmljZXMjOTMuMTIuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTIuMTcuMDguMDAjSW50ZXJuYXRpb25hbCBwb2xpdGljYWwgb3JnYW5pemF0aW9ucyBzZXJ2aWNlcyM5My4xMi4xNy4wMC4wMAotdW5zcHNjNyM5My4xMi4xNy4wOS4wMCNJbnRlcm5hdGlvbmFsIGNoYXJpdHkgb3JnYW5pemF0aW9ucyBzZXJ2aWNlcyM5My4xMi4xNy4wMC4wMAotdW5zcHNjNyM5My4xMi4xNy4xMC4wMCNJbnRlcm5hdGlvbmFsIGh1bWFuIHJlbGllZiBvcmdhbml6YXRpb25zIHNlcnZpY2VzIzkzLjEyLjE3LjAwLjAwCi11bnNwc2M3IzkzLjEyLjE3LjExLjAwI0ludGVybmF0aW9uYWwgaGVhbHRoIG9yZ2FuaXphdGlvbnMgc2VydmljZXMjOTMuMTIuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTMuMDAuMDAuMDAjSHVtYW5pdGFyaWFuIGFpZCBhbmQgcmVsaWVmIzkzLjAwLjAwLjAwLjAwCi11bnNwc2M3IzkzLjEzLjE1LjAwLjAwI1JlZnVnZWUgcHJvZ3JhbXMjOTMuMTMuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTMuMTUuMDEuMDAjUHJvdGVjdGlvbiBvZiBodW1hbiByaWdodHMgc2VydmljZXMjOTMuMTMuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTMuMTUuMDIuMDAjUHJvbW90aW9uIG9mIGh1bWFuIHJpZ2h0cyBzZXJ2aWNlcyM5My4xMy4xNS4wMC4wMAotdW5zcHNjNyM5My4xMy4xNS4wMy4wMCNIdW1hbiByaWdodHMgZWR1Y2F0aW9uIG9yIGluZm9ybWF0aW9uIGRpc3NlbWluYXRpb24gc2VydmljZXMjOTMuMTMuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTMuMTUuMDQuMDAjUmVmdWdlZSBlbWVyZ2VuY3kgYXNzaXN0YW5jZSBzZXJ2aWNlcyM5My4xMy4xNS4wMC4wMAotdW5zcHNjNyM5My4xMy4xNS4wNS4wMCNSZWZ1Z2VlIGNhbXBzIHNlcnZpY2VzIzkzLjEzLjE1LjAwLjAwCi11bnNwc2M3IzkzLjEzLjE1LjA2LjAwI1JlZnVnZWUgcmVzZXR0bGVtZW50cyBvciByZXBhdHJpYXRpb24gc2VydmljZXMjOTMuMTMuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTMuMTUuMDcuMDAjRGlzcGxhY2VkIHBlcnNvbnMgYXNzaXN0YW5jZSBzZXJ2aWNlcyM5My4xMy4xNS4wMC4wMAotdW5zcHNjNyM5My4xMy4xNi4wMC4wMCNGb29kIGFuZCBudXRyaXRpb24gcG9saWN5IHBsYW5uaW5nIGFuZCBwcm9ncmFtcyM5My4xMy4wMC4wMC4wMAotdW5zcHNjNyM5My4xMy4xNi4wMS4wMCNIdW5nZXIgZXJhZGljYXRpb24gcHJvZ3JhbXMjOTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTMuMTYuMDIuMDAjRW1lcmdlbmN5IGZvb2Qgc3VwcGx5IHNlcnZpY2VzIzkzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzkzLjEzLjE2LjAzLjAwI1dvcmxkIGZvb2QgcHJvZ3JhbSBzZXJ2aWNlcyM5My4xMy4xNi4wMC4wMAotdW5zcHNjNyM5My4xMy4xNi4wNC4wMCNGb29kIG9yIGFncmljdWx0dXJlIG9yZ2FuaXphdGlvbiBzZXJ2aWNlcyM5My4xMy4xNi4wMC4wMAotdW5zcHNjNyM5My4xMy4xNi4wNS4wMCNDb21tb24gZnVuZCBmb3IgY29tbW9kaXRpZXMgc2VydmljZXMjOTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTMuMTYuMDYuMDAjSW50ZXJuYXRpb25hbCBmdW5kIGZvciBhZ3JpY3VsdHVyYWwgZGV2ZWxvcG1lbnQgc2VydmljZXMjOTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTMuMTYuMDcuMDAjRm9vZCBkaXN0cmlidXRpb24gc2VydmljZXMjOTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTMuMTYuMDguMDAjRm9vZCBzdXBwbHkgc2VydmljZXMjOTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTMuMTYuMDkuMDAjRm9vZCBhaWQgcG9saWNpZXMgb3IgcHJvZ3JhbXMjOTMuMTMuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTMuMTYuMTAuMDAjRm9vZCBwbGFubmluZyBzZXJ2aWNlcyM5My4xMy4xNi4wMC4wMAotdW5zcHNjNyM5My4xMy4xNi4xMS4wMCNGb29kIHNlY3VyaXR5IHNlcnZpY2VzIzkzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzkzLjEzLjE2LjEyLjAwI0Zvb2QgcmVzZXJ2ZXMgbWFuYWdlbWVudCM5My4xMy4xNi4wMC4wMAotdW5zcHNjNyM5My4xMy4xNi4xMy4wMCNGb29kIHNob3J0YWdlIG9yIHN1cnBsdXMgbWFuYWdlbWVudCBvciBjb250cm9sIHNlcnZpY2VzIzkzLjEzLjE2LjAwLjAwCi11bnNwc2M3IzkzLjEzLjE3LjAwLjAwI0hlYWx0aCBwcm9ncmFtcyM5My4xMy4wMC4wMC4wMAotdW5zcHNjNyM5My4xMy4xNy4wMS4wMCNBbnRpIHRvYmFjY28gY2FtcGFpZ25zIzkzLjEzLjE3LjAwLjAwCi11bnNwc2M3IzkzLjEzLjE3LjAyLjAwI1Nhbml0YXRpb24gcHJvZ3JhbXMjOTMuMTMuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTMuMTcuMDMuMDAjUmVzZWFyY2ggcHJvZ3JhbXMjOTMuMTMuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTMuMTcuMDQuMDAjRGlzZWFzZSBwcmV2ZW50aW9uIG9yIGNvbnRyb2wgc2VydmljZXMjOTMuMTMuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTMuMTcuMDUuMDAjRHJ1ZyBhYnVzZSBwcmV2ZW50aW9uIG9yIGNvbnRyb2wgcHJvZ3JhbXMjOTMuMTMuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTMuMTguMDAuMDAjRGlzYXN0ZXIgcHJlcGFyZWRuZXNzIGFuZCByZWxpZWYjOTMuMTMuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTMuMTguMDEuMDAjRGlzYXN0ZXIgd2FybmluZyBzZXJ2aWNlcyM5My4xMy4xOC4wMC4wMAotdW5zcHNjNyM5My4xMy4xOC4wMi4wMCNEaXNhc3RlciBwcmVwYXJlZG5lc3MgcmVzcG9uc2Ugc2VydmljZXMjOTMuMTMuMTguMDAuMDAKLXVuc3BzYzcjOTMuMTMuMTguMDMuMDAjRW1lcmdlbmN5IGhvdXNpbmcgc2VydmljZXMjOTMuMTMuMTguMDAuMDAKLXVuc3BzYzcjOTMuMTQuMDAuMDAuMDAjQ29tbXVuaXR5IGFuZCBzb2NpYWwgc2VydmljZXMjOTMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTUuMDAuMDAjU29jaWFsIGRldmVsb3BtZW50IGFuZCBzZXJ2aWNlcyM5My4xNC4wMC4wMC4wMAotdW5zcHNjNyM5My4xNC4xNS4wMS4wMCNTb2NpYWwgcG9saWN5IHNlcnZpY2VzIzkzLjE0LjE1LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE1LjAyLjAwI1NvY2lhbCBzZWN1cml0eSBsZWdpc2xhdGlvbiBzZXJ2aWNlcyM5My4xNC4xNS4wMC4wMAotdW5zcHNjNyM5My4xNC4xNS4wMy4wMCNTb2NpYWwgcGxhbm5pbmcgc2VydmljZXMjOTMuMTQuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTUuMDQuMDAjRm9zdGVyIGhvbWUgY2FyZSBzZXJ2aWNlcyBvciBvcnBoYW5hZ2UjOTMuMTQuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTUuMDUuMDAjQWRvcHRpb24gc2VydmljZXMjOTMuMTQuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTUuMDYuMDAjU29jaWFsIHdlbGZhcmUgc2VydmljZXMjOTMuMTQuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTUuMDcuMDAjU29jaWFsIHdvcmsgYWRtaW5pc3RyYXRpb24gc2VydmljZXMjOTMuMTQuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTUuMDguMDAjVm9sdW50YXJ5IHNlcnZpY2UgbWFuYWdlbWVudCM5My4xNC4xNS4wMC4wMAotdW5zcHNjNyM5My4xNC4xNS4wOS4wMCNTb2NpYWwgcHJvYmxlbXMgYW5hbHlzaXMgb3IgbWFuYWdlbWVudCBzZXJ2aWNlcyM5My4xNC4xNS4wMC4wMAotdW5zcHNjNyM5My4xNC4xNS4xMC4wMCNTb2NpYWwgc3RydWN0dXJlIHN0dWRpZXMgb3IgcmVsYXRlZCBzZXJ2aWNlcyM5My4xNC4xNS4wMC4wMAotdW5zcHNjNyM5My4xNC4xNS4xMS4wMCNTb2NpYWwgZ3JvdXBzIHN0dWRpZXMgb3IgcmVsYXRlZCBzZXJ2aWNlcyM5My4xNC4xNS4wMC4wMAotdW5zcHNjNyM5My4xNC4xNS4xMi4wMCNZb3V0aCBtb3ZlbWVudHMgb3Igb3JnYW5pemF0aW9ucyBzZXJ2aWNlcyM5My4xNC4xNS4wMC4wMAotdW5zcHNjNyM5My4xNC4xNS4xMy4wMCNTb2NpYWwganVzdGljZSBvciBsZWdpc2xhdGlvbiBzZXJ2aWNlcyM5My4xNC4xNS4wMC4wMAotdW5zcHNjNyM5My4xNC4xNS4xNC4wMCNTb2NpbyBjdWx0dXJhbCBzZXJ2aWNlcyM5My4xNC4xNS4wMC4wMAotdW5zcHNjNyM5My4xNC4xNi4wMC4wMCNQb3B1bGF0aW9uIzkzLjE0LjAwLjAwLjAwCi11bnNwc2M3IzkzLjE0LjE2LjAxLjAwI1BvcHVsYXRpb24gY2Vuc3VzIHNlcnZpY2VzIzkzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE2LjAyLjAwI1BvcHVsYXRpb24gc2FtcGxlIHN1cnZleXMgc2VydmljZXMjOTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTYuMDMuMDAjQmlydGggcmVwb3J0aW5nIG9yIGNvbnRyb2wgc2VydmljZXMjOTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTYuMDQuMDAjUG9wdWxhdGlvbiBjb250cm9sIHNlcnZpY2VzIzkzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE2LjA1LjAwI1BvcHVsYXRpb24gdHJlbmRzIG9yIHByb2plY3Rpb25zIHNlcnZpY2VzIzkzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE2LjA2LjAwI0JpcnRoIHN0YXRpc3RpY3Mgc2VydmljZXMjOTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTYuMDcuMDAjTWFycmlhZ2UgcmVzZWFyY2ggb3Igc3RhdGlzdGljcyBzZXJ2aWNlcyM5My4xNC4xNi4wMC4wMAotdW5zcHNjNyM5My4xNC4xNi4wOC4wMCNQb3B1bGF0aW9uIGRpc3RyaWJ1dGlvbiBvciBhbmFseXNpcyBzZXJ2aWNlcyM5My4xNC4xNi4wMC4wMAotdW5zcHNjNyM5My4xNC4xNi4wOS4wMCNQb3B1bGF0aW9uIGNvbXBvc2l0aW9uIGFuYWx5c2lzIHNlcnZpY2VzIzkzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE2LjEwLjAwI0RlbW9ncmFwaGljIHN0dWRpZXMjOTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTYuMTEuMDAjSW1taWdyYXRpb24gYW5hbHlzaXMgb3Igc2VydmljZXMjOTMuMTQuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTYuMTIuMDAjRmFtaWx5IHBsYW5uaW5nIHByb2dyYW1zIG9yIHNlcnZpY2VzIzkzLjE0LjE2LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE2LjEzLjAwI0h1bWFuIHJlcHJvZHVjdGlvbiBhbmFseXNpcyM5My4xNC4xNi4wMC4wMAotdW5zcHNjNyM5My4xNC4xNy4wMC4wMCNDdWx0dXJlIzkzLjE0LjAwLjAwLjAwCi11bnNwc2M3IzkzLjE0LjE3LjAxLjAwI0N1bHR1cmFsIGV2ZW50cyBvcmdhbml6YXRpb25zIzkzLjE0LjE3LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE3LjAyLjAwI0N1bHR1cmUgcHJvbW90aW9uYWwgc2VydmljZXMjOTMuMTQuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTcuMDMuMDAjQXJ0IHJlbGF0ZWQgc2VydmljZXMjOTMuMTQuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTcuMDQuMDAjU29uZyB3cml0aW5nIHNlcnZpY2VzIzkzLjE0LjE3LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE3LjA1LjAwI0xpdGVyYXJ5IHdyaXRpbmcgc2VydmljZXMjOTMuMTQuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTcuMDYuMDAjTWlub3JpdGllcyBwcm90ZWN0aW9uIHNlcnZpY2VzIzkzLjE0LjE3LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE3LjA3LjAwI0N1bHR1cmFsIGhlcml0YWdlIHByZXNlcnZhdGlvbiBvciBwcm9tb3Rpb24gc2VydmljZXMjOTMuMTQuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTcuMDguMDAjTXVzZXVtIHNlcnZpY2VzIzkzLjE0LjE3LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE3LjA5LjAwI0N1bHR1cmFsIHBvbGljeSBzZXJ2aWNlcyM5My4xNC4xNy4wMC4wMAotdW5zcHNjNyM5My4xNC4xNy4xMC4wMCNBcmNoYWljIG9yIGluZGlnZW5vdXMgbGFuZ3VhZ2Ugc2VydmljZXMjOTMuMTQuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTcuMTEuMDAjVHJhZGl0aW9uYWwgaGFuZGNyYWZ0cyBwcm9tb3Rpb24gc2VydmljZXMjOTMuMTQuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTcuMTIuMDAjUHJvdGVjdGlvbiBvZiBpbnRlbGxlY3R1YWwgb3IgY3VsdHVyYWwgcHJvcGVydHkgc2VydmljZXMjOTMuMTQuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTcuMTMuMDAjSGlzdG9yaWMgc2l0ZXMgb3IgbW9udW1lbnRzIHByb3RlY3Rpb24gc2VydmljZXMjOTMuMTQuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTcuMTQuMDAjTXl0aG9sb2d5IzkzLjE0LjE3LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE4LjAwLjAwI0VtcGxveW1lbnQjOTMuMTQuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTguMDEuMDAjRW1wbG95bWVudCBwcm9tb3Rpb24gb3IgcGxhbm5pbmcgc2VydmljZXMjOTMuMTQuMTguMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTguMDIuMDAjUmVjcnVpdG1lbnQgc2VydmljZXMjOTMuMTQuMTguMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTguMDMuMDAjSW50ZXJuYXRpb25hbCBsYWJvciBzdGFuZGFyZHMgc2VydmljZXMjOTMuMTQuMTguMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTguMDQuMDAjSW50ZXJuYXRpb25hbCBsYWJvciByZWdpc3RyYXRpb24gc2VydmljZXMjOTMuMTQuMTguMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTguMDUuMDAjVW5lbXBsb3ltZW50IHNlcnZpY2VzIzkzLjE0LjE4LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE4LjA2LjAwI0VtcGxveW1lbnQgc3RhdGlzdGljcyBvciBmb3JlY2FzdGluZyBzZXJ2aWNlcyM5My4xNC4xOC4wMC4wMAotdW5zcHNjNyM5My4xNC4xOC4wNy4wMCNXb3JrIHRpbWUgYXJyYW5nZW1lbnRzIzkzLjE0LjE4LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE4LjA4LjAwI09jY3VwYXRpb25hbCBoZWFsdGggb3Igc2FmZXR5IHNlcnZpY2VzIzkzLjE0LjE4LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE4LjEwLjAwI0NhcmVlciBkZXZlbG9wbWVudCBzZXJ2aWNlcyM5My4xNC4xOC4wMC4wMAotdW5zcHNjNyM5My4xNC4xOC4xMS4wMCNQcm9tb3Rpb25hbCBzZXJ2aWNlcyM5My4xNC4xOC4wMC4wMAotdW5zcHNjNyM5My4xNC4xOC4xMi4wMCNMYWJvciBpbnNwZWN0aW9uIHNlcnZpY2VzIzkzLjE0LjE4LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE4LjEzLjAwI1dvcmsgY291bmNpbCBzZXJ2aWNlcyM5My4xNC4xOC4wMC4wMAotdW5zcHNjNyM5My4xNC4xOC4xNC4wMCNJbnRlcm5hdGlvbmFsIGxhYm9yIHNlcnZpY2VzIzkzLjE0LjE4LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE5LjAwLjAwI1J1cmFsIGRldmVsb3BtZW50IzkzLjE0LjAwLjAwLjAwCi11bnNwc2M3IzkzLjE0LjE5LjAxLjAwI0FncmljdWx0dXJhbCBjb21tZXJjaWFsIGJhbmtpbmcgc2VydmljZXMjOTMuMTQuMTkuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTkuMDIuMDAjUnVyYWwgaW52ZXN0bWVudCBzZXJ2aWNlcyM5My4xNC4xOS4wMC4wMAotdW5zcHNjNyM5My4xNC4xOS4wMy4wMCNBZ3JpY3VsdHVyYWwgaW5zdGl0dXRpb25zIG9yZ2FuaXphdGlvbiBvciBtYW5hZ2VtZW50IHNlcnZpY2VzIzkzLjE0LjE5LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE5LjA0LjAwI0FncmljdWx0dXJhbCBvciBydXJhbCBjb29wZXJhdGl2ZXMgc2VydmljZXMjOTMuMTQuMTkuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTkuMDUuMDAjQWdyaWN1bHR1cmFsIHJlc2VhcmNoIHNlcnZpY2VzIzkzLjE0LjE5LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE5LjA2LjAwI0Zhcm1lcnMgb3IgcGVhc2FudHMgb3JnYW5pemF0aW9ucyBzZXJ2aWNlcyM5My4xNC4xOS4wMC4wMAotdW5zcHNjNyM5My4xNC4xOS4wNy4wMCNXb21lbnMgc2VydmljZXMgaW4gYWdyaWN1bHR1cmFsIHByb2R1Y3Rpb24gb3IgcnVyYWwgZGV2ZWxvcG1lbnQjOTMuMTQuMTkuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMTkuMDguMDAjQWdyYXJpYW4gcmVmb3JtIG9yIGxhbmQgc2V0dGxlbWVudCBzZXJ2aWNlcyM5My4xNC4xOS4wMC4wMAotdW5zcHNjNyM5My4xNC4xOS4wOS4wMCNMYW5kIGFkbWluaXN0cmF0aW9uIHNlcnZpY2VzIzkzLjE0LjE5LjAwLjAwCi11bnNwc2M3IzkzLjE0LjE5LjEwLjAwI0lzbGFuZCBkZXZlbG9wbWVudCBzZXJ2aWNlcyM5My4xNC4xOS4wMC4wMAotdW5zcHNjNyM5My4xNC4yMC4wMC4wMCNVcmJhbiBkZXZlbG9wbWVudCM5My4xNC4wMC4wMC4wMAotdW5zcHNjNyM5My4xNC4yMC4wMS4wMCNVcmJhbiBkZXZlbG9wbWVudCBwbGFubmluZyBzZXJ2aWNlcyM5My4xNC4yMC4wMC4wMAotdW5zcHNjNyM5My4xNC4yMC4wMi4wMCNVcmJhbiBsYW5kIGFkbWluaXN0cmF0aW9uIHNlcnZpY2VzIzkzLjE0LjIwLjAwLjAwCi11bnNwc2M3IzkzLjE0LjIwLjAzLjAwI1VyYmFuIGludmVzdG1lbnQgcHJvZ3JhbW1pbmcgc2VydmljZXMjOTMuMTQuMjAuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMjAuMDQuMDAjU2x1bSByZWRldmxvcG1lbnQgc2VydmljZXMjOTMuMTQuMjAuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMjAuMDUuMDAjVXJiYW4gbGlnaHRpbmcgc2VydmljZXMjOTMuMTQuMjAuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMjAuMDYuMDAjVXJiYW4gZGV2ZWxvcG1lbnQgY29udHJvbCBvciByZWd1bGF0aW9ucyBzZXJ2aWNlcyM5My4xNC4yMC4wMC4wMAotdW5zcHNjNyM5My4xNC4yMC4wNy4wMCNVcmJhbiBidWlsZGluZyBzdGFuZGFyZHMgb3IgcmVndWxhdGlvbnMgc2VydmljZXMjOTMuMTQuMjAuMDAuMDAKLXVuc3BzYzcjOTMuMTQuMjAuMDguMDAjVXJiYW4gY29tbXVuaXR5IHNlcnZpY2VzIzkzLjE0LjIwLjAwLjAwCi11bnNwc2M3IzkzLjE0LjIwLjA5LjAwI1VyYmFuIHByb2plY3Qgb3IgcHJvZ3JhbSBhZG1pbmlzdHJhdGlvbiBvciBtYW5hZ2VtZW50IHNlcnZpY2VzIzkzLjE0LjIwLjAwLjAwCi11bnNwc2M3IzkzLjE0LjIxLjAwLjAwI1JlZ2lvbmFsIGRldmVsb3BtZW50IzkzLjE0LjAwLjAwLjAwCi11bnNwc2M3IzkzLjE0LjIxLjAxLjAwI1JlZ2lvbmFsIGRldmVsb3BtZW50IHBsYW5uaW5nIHNlcnZpY2VzIzkzLjE0LjIxLjAwLjAwCi11bnNwc2M3IzkzLjE0LjIxLjAyLjAwI0Vjb25vbWljIGNvb3BlcmF0aW9uIHNlcnZpY2VzIzkzLjE0LjIxLjAwLjAwCi11bnNwc2M3IzkzLjE0LjIxLjAzLjAwI1RlY2huaWNhbCBjb29wZXJhdGlvbiBzZXJ2aWNlcyM5My4xNC4yMS4wMC4wMAotdW5zcHNjNyM5My4xNC4yMS4wNC4wMCNTZWN0b3JhbCBwbGFubmluZyBzZXJ2aWNlcyM5My4xNC4yMS4wMC4wMAotdW5zcHNjNyM5My4xNS4wMC4wMC4wMCNQdWJsaWMgYWRtaW5pc3RyYXRpb24gYW5kIGZpbmFuY2Ugc2VydmljZXMjOTMuMDAuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTUuMTUuMDAuMDAjUHVibGljIGFkbWluaXN0cmF0aW9uIzkzLjE1LjAwLjAwLjAwCi11bnNwc2M3IzkzLjE1LjE1LjAxLjAwI1B1YmxpYyBlbnRlcnByaXNlcyBtYW5hZ2VtZW50IG9yIGZpbmFuY2lhbCBzZXJ2aWNlcyM5My4xNS4xNS4wMC4wMAotdW5zcHNjNyM5My4xNS4xNS4wMi4wMCNQdWJsaWMgZW50ZXJwcmlzZXMgaW5mb3JtYXRpb24gb3IgY29udHJvbCBzeXN0ZW1zIHNlcnZpY2VzIzkzLjE1LjE1LjAwLjAwCi11bnNwc2M3IzkzLjE1LjE1LjAzLjAwI1ByaXZhdGl6YXRpb24gcHJvZ3JhbXMjOTMuMTUuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTUuMTUuMDQuMDAjQWRtaW5pc3RyYXRpdmUgcmVmb3JtIHNlcnZpY2VzIzkzLjE1LjE1LjAwLjAwCi11bnNwc2M3IzkzLjE1LjE1LjA1LjAwI0FkbWluaXN0cmF0aXZlIGFnZW5jaWVzIHNlcnZpY2VzIzkzLjE1LjE1LjAwLjAwCi11bnNwc2M3IzkzLjE1LjE1LjA2LjAwI0FkbWluaXN0cmF0aXZlIGVjb25vbWljIGNvdW5jaWwgc2VydmljZXMjOTMuMTUuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTUuMTUuMDcuMDAjQWRtaW5pc3RyYXRpdmUgcHJvY2VkdXJlcyBvciBzZXJ2aWNlcyM5My4xNS4xNS4wMC4wMAotdW5zcHNjNyM5My4xNS4xNS4wOC4wMCNHb3Zlcm5tZW50IGRlcGFydG1lbnRzIHNlcnZpY2VzIzkzLjE1LjE1LjAwLjAwCi11bnNwc2M3IzkzLjE1LjE1LjA5LjAwI0dvdmVybm1lbnQgaW5mb3JtYXRpb24gc2VydmljZXMjOTMuMTUuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTUuMTUuMTAuMDAjQWRtaW5pc3RyYXRpdmUgZmVlcyBvciB0YXggY29sbGVjdGlvbiBzZXJ2aWNlcyM5My4xNS4xNS4wMC4wMAotdW5zcHNjNyM5My4xNS4xNS4xMS4wMCNBZG1pbmlzdHJhdGl2ZSBhY3RzIHJhdGlmaWNhdGlvbiBvciBpbXBsZW1lbnRhdGlvbiBzZXJ2aWNlcyM5My4xNS4xNS4wMC4wMAotdW5zcHNjNyM5My4xNS4xNS4xMi4wMCNQdWJsaWMgaW5zdGl0dXRpb25zIHNlcnZpY2VzIzkzLjE1LjE1LjAwLjAwCi11bnNwc2M3IzkzLjE1LjE1LjEzLjAwI011bHRpbmF0aW9uYWwgcHVibGljIGNvcnBvcmF0aW9ucyBzZXJ2aWNlcyM5My4xNS4xNS4wMC4wMAotdW5zcHNjNyM5My4xNS4xNS4xNC4wMCNPbWJ1ZHNtYW4gc2VydmljZXMjOTMuMTUuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTUuMTUuMTUuMDAjTmF0aW9uYWwgcGxhbm5pbmcgc2VydmljZXMjOTMuMTUuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTUuMTYuMDAuMDAjUHVibGljIGZpbmFuY2UjOTMuMTUuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTUuMTYuMDEuMDAjUHJvZ3JhbSBidWRnZXRpbmcgc2VydmljZXMjOTMuMTUuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTUuMTYuMDIuMDAjR292ZXJubWVudCBidWRnZXRpbmcgc2VydmljZXMjOTMuMTUuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTUuMTYuMDMuMDAjQnVkZ2V0IG9yIHB1YmxpYyBpbnZlc3RtZW50IG1hbmFnZW1lbnQjOTMuMTUuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTUuMTYuMDQuMDAjTWlsaXRhcnkgZXhwZW5kaXR1cmVzIGJ1ZGdldGluZyBzZXJ2aWNlcyM5My4xNS4xNi4wMC4wMAotdW5zcHNjNyM5My4xNS4xNi4wNS4wMCNHb3Zlcm5tZW50IGZpbmFuY2Ugc2VydmljZXMjOTMuMTUuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTUuMTYuMDYuMDAjR292ZXJubWVudCBhY2NvdW50aW5nIHNlcnZpY2VzIzkzLjE1LjE2LjAwLjAwCi11bnNwc2M3IzkzLjE1LjE2LjA3LjAwI0dvdmVybm1lbnQgYXVkaXRpbmcgc2VydmljZXMjOTMuMTUuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTUuMTYuMDguMDAjR292ZXJubWVudCBvciBjZW50cmFsIGJhbmsgc2VydmljZXMjOTMuMTUuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTUuMTYuMDkuMDAjTG90dGVyaWVzIHNlcnZpY2VzIzkzLjE1LjE2LjAwLjAwCi11bnNwc2M3IzkzLjE1LjE2LjEwLjAwI1RheCBjb2xsZWN0aW9uIHNlcnZpY2VzIzkzLjE1LjE2LjAwLjAwCi11bnNwc2M3IzkzLjE1LjE2LjExLjAwI1N1YnNpZGllcyM5My4xNS4xNi4wMC4wMAotdW5zcHNjNyM5My4xNS4xNy4wMC4wMCNDdXJyZW5jeSM5My4xNS4wMC4wMC4wMAotdW5zcHNjNyM5My4xNS4xNy4wMS4wMCNDdXJyZW5jaWVzIG9yIGNvaW5hZ2UjOTMuMTUuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTUuMTcuMDIuMDAjTmF0aW9uYWwgYmFuayBub3RlcyM5My4xNS4xNy4wMC4wMAotdW5zcHNjNyM5My4xNi4wMC4wMC4wMCNUYXhhdGlvbiM5My4wMC4wMC4wMC4wMAotdW5zcHNjNyM5My4xNi4xNS4wMC4wMCNJbmNvbWUgdGF4IzkzLjE2LjAwLjAwLjAwCi11bnNwc2M3IzkzLjE2LjE1LjAxLjAwI05hdGlvbmFsIGluY29tZSB0YXgjOTMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTYuMTUuMDIuMDAjTXVuaWNpcGFsIGluY29tZSB0YXgjOTMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTYuMTUuMDMuMDAjQ2FwaXRhbCBnYWlucyB0YXgjOTMuMTYuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTYuMTUuMDQuMDAjRXhjZXNzIHByb2ZpdHMgdGF4IzkzLjE2LjE1LjAwLjAwCi11bnNwc2M3IzkzLjE2LjE2LjAwLjAwI1RheGVzIG90aGVyIHRoYW4gaW5jb21lIHRheCM5My4xNi4wMC4wMC4wMAotdW5zcHNjNyM5My4xNi4xNi4wMS4wMCNQcm9wZXJ0eSB0YXgjOTMuMTYuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTYuMTYuMDIuMDAjTGFuZCB0YXgjOTMuMTYuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTYuMTYuMDMuMDAjVmFsdWUgYWRkZWQgdGF4IChWQVQpIzkzLjE2LjE2LjAwLjAwCi11bnNwc2M3IzkzLjE2LjE2LjA0LjAwI1BheXJvbGwgdGF4IzkzLjE2LjE2LjAwLjAwCi11bnNwc2M3IzkzLjE2LjE2LjA1LjAwI1NhbGVzIHRheCM5My4xNi4xNi4wMC4wMAotdW5zcHNjNyM5My4xNi4xNi4wNi4wMCNTb2NpYWwgc2VjdXJpdHkgdGF4IzkzLjE2LjE2LjAwLjAwCi11bnNwc2M3IzkzLjE2LjE2LjA3LjAwI0luaGVyaXRhbmNlIG9yIHRyYW5zZmVyIHRheCM5My4xNi4xNi4wMC4wMAotdW5zcHNjNyM5My4xNi4xNy4wMC4wMCNUYXggYWRtaW5pc3RyYXRpb24jOTMuMTYuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTYuMTcuMDEuMDAjVGF4IGNvbGxhdGlvbiM5My4xNi4xNy4wMC4wMAotdW5zcHNjNyM5My4xNi4xNy4wMi4wMCNUYXggaW5jZW50aXZlcyM5My4xNi4xNy4wMC4wMAotdW5zcHNjNyM5My4xNi4xNy4wMy4wMCNUYXggc3lzdGVtcyM5My4xNi4xNy4wMC4wMAotdW5zcHNjNyM5My4xNi4xNy4wNC4wMCNUYXggcmV2ZW51ZSBhZG1pbmlzdHJhdGlvbiM5My4xNi4xNy4wMC4wMAotdW5zcHNjNyM5My4xNi4xOC4wMC4wMCNUYXhhdGlvbiBpc3N1ZXMjOTMuMTYuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTYuMTguMDEuMDAjVGF4IHJlZm9ybSM5My4xNi4xOC4wMC4wMAotdW5zcHNjNyM5My4xNi4xOC4wMi4wMCNUYXhhdGlvbiBwb2xpY3kjOTMuMTYuMTguMDAuMDAKLXVuc3BzYzcjOTMuMTYuMTguMDMuMDAjVGF4IHJlc2VhcmNoIzkzLjE2LjE4LjAwLjAwCi11bnNwc2M3IzkzLjE2LjE4LjA0LjAwI0ludmVzdG1lbnQgdGF4IGNyZWRpdCM5My4xNi4xOC4wMC4wMAotdW5zcHNjNyM5My4xNi4xOC4wNS4wMCNUYXggZGVkdWN0aW9ucyM5My4xNi4xOC4wMC4wMAotdW5zcHNjNyM5My4xNi4xOC4wNi4wMCNUYXggZXZhc2lvbiM5My4xNi4xOC4wMC4wMAotdW5zcHNjNyM5My4xNi4xOC4wNy4wMCNUYXggc2hlbHRlcnMgb3IgaGF2ZW5zIzkzLjE2LjE4LjAwLjAwCi11bnNwc2M3IzkzLjE2LjE4LjA4LjAwI1RheCByZXR1cm5zIzkzLjE2LjE4LjAwLjAwCi11bnNwc2M3IzkzLjE3LjAwLjAwLjAwI1RyYWRlIHBvbGljeSBhbmQgcmVndWxhdGlvbiM5My4wMC4wMC4wMC4wMAotdW5zcHNjNyM5My4xNy4xNS4wMC4wMCNUcmFkZSBwb2xpY3kjOTMuMTcuMDAuMDAuMDAKLXVuc3BzYzcjOTMuMTcuMTUuMDEuMDAjVHJhZGUgYWdyZWVtZW50cyM5My4xNy4xNS4wMC4wMAotdW5zcHNjNyM5My4xNy4xNS4wMi4wMCNUcmFkZSBuZWdvdGlhdGlvbnMjOTMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTcuMTUuMDMuMDAjRm9ybXVsYXRpb24gb2YgbmF0aW9uYWwgY29tbW9kaXR5IHBvbGljaWVzIzkzLjE3LjE1LjAwLjAwCi11bnNwc2M3IzkzLjE3LjE1LjA0LjAwI0RldmVsb3BtZW50IG9mIHNtYWxsIHNjYWxlIGluZHVzdHJpZXMjOTMuMTcuMTUuMDAuMDAKLXVuc3BzYzcjOTMuMTcuMTYuMDAuMDAjSW50ZXJuYXRpb25hbCB0cmFkZSM5My4xNy4wMC4wMC4wMAotdW5zcHNjNyM5My4xNy4xNi4wMS4wMCNJbnRlcm5hdGlvbmFsIGNvbW1vZGl0eSBhZ3JlZW1lbnRzIzkzLjE3LjE2LjAwLjAwCi11bnNwc2M3IzkzLjE3LjE2LjAyLjAwI0V4cG9ydCBwb2xpY3kjOTMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTcuMTYuMDMuMDAjR2xvYmFsIHRyYWRlIHBvbGljaWVzIG9yIHByb2NlZHVyZXMjOTMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTcuMTYuMDQuMDAjQmlsYXRlcmFsIHRyYWRlIGFncmVlbWVudHMjOTMuMTcuMTYuMDAuMDAKLXVuc3BzYzcjOTMuMTcuMTcuMDAuMDAjQ3VzdG9tcyBhZG1pbmlzdHJhdGlvbiBhbmQgY29tcGxpYW5jZSM5My4xNy4wMC4wMC4wMAotdW5zcHNjNyM5My4xNy4xNy4wMS4wMCNDdXN0b21zIGNvbnZlbnRpb25zIzkzLjE3LjE3LjAwLjAwCi11bnNwc2M3IzkzLjE3LjE3LjAyLjAwI0N1c3RvbXMgZm9ybWFsaXRpZXMjOTMuMTcuMTcuMDAuMDAKLXVuc3BzYzcjOTMuMTcuMTcuMDMuMDAjQ3VzdG9tcyBvZmZlbmNlcyM5My4xNy4xNy4wMC4wMAotdW5zcHNjNyM5My4xNy4xOC4wMC4wMCNUcmFkZSBhbmFseXNpcyM5My4xNy4wMC4wMC4wMAotdW5zcHNjNyM5My4xNy4xOC4wMS4wMCNUcmFkZSBwcm9qZWN0aW9ucyM5My4xNy4xOC4wMC4wMAotdW5zcHNjNyM5My4xNy4xOC4wMi4wMCNCYWxhbmNlIG9mIHRyYWRlIHByb2plY3Rpb25zIzkzLjE3LjE4LjAwLjAwCi11bnNwc2M3IzkzLjE3LjE4LjAzLjAwI1RyYWRlIHN0YXRpc3RpY3MjOTMuMTcuMTguMDAuMDAKLXVuc3BzYzcjOTQuMDAuMDAuMDAuMDAjT3JnYW5pemF0aW9ucyBhbmQgQ2x1YnMjOTQuMDAuMDAuMDAuMDAKLXVuc3BzYzcjOTQuMTAuMDAuMDAuMDAjV29yayByZWxhdGVkIG9yZ2FuaXphdGlvbnMjOTQuMDAuMDAuMDAuMDAKLXVuc3BzYzcjOTQuMTAuMTUuMDAuMDAjQnVzaW5lc3MgYXNzb2NpYXRpb25zIzk0LjEwLjAwLjAwLjAwCi11bnNwc2M3Izk0LjEwLjE1LjAxLjAwI0FncmljdWx0dXJhbCBpbmR1c3RyeSBhc3NvY2lhdGlvbnMjOTQuMTAuMTUuMDAuMDAKLXVuc3BzYzcjOTQuMTAuMTUuMDIuMDAjUmVndWxhdG9yeSBhc3NvY2lhdGlvbnMjOTQuMTAuMTUuMDAuMDAKLXVuc3BzYzcjOTQuMTAuMTUuMDMuMDAjU2VjdG9yYWwgYnVzaW5lc3MgYXNzb2NpYXRpb25zIzk0LjEwLjE1LjAwLjAwCi11bnNwc2M3Izk0LjEwLjE1LjA0LjAwI0ludGVybmF0aW9uYWwgYnVzaW5lc3MgYXNzb2NpYXRpb25zIzk0LjEwLjE1LjAwLjAwCi11bnNwc2M3Izk0LjEwLjE1LjA1LjAwI0VtcGxveWVycyBhc3NvY2lhdGlvbnMjOTQuMTAuMTUuMDAuMDAKLXVuc3BzYzcjOTQuMTAuMTYuMDAuMDAjUHJvZmVzc2lvbmFsIGFzc29jaWF0aW9ucyM5NC4xMC4wMC4wMC4wMAotdW5zcHNjNyM5NC4xMC4xNi4wMS4wMCNEZW50YWwgYXNzb2NpYXRpb25zIzk0LjEwLjE2LjAwLjAwCi11bnNwc2M3Izk0LjEwLjE2LjAyLjAwI01lZGljYWwgaGVhbHRoIGFzc29jaWF0aW9ucyM5NC4xMC4xNi4wMC4wMAotdW5zcHNjNyM5NC4xMC4xNi4wMy4wMCNOdXJzaW5nIGFzc29jaWF0aW9ucyM5NC4xMC4xNi4wMC4wMAotdW5zcHNjNyM5NC4xMC4xNi4wNC4wMCNBY2NvdW50aW5nIGFzc29jaWF0aW9ucyM5NC4xMC4xNi4wMC4wMAotdW5zcHNjNyM5NC4xMC4xNi4wNS4wMCNBcmNoaXRlY3QgYXNzb2NpYXRpb25zIzk0LjEwLjE2LjAwLjAwCi11bnNwc2M3Izk0LjEwLjE2LjA2LjAwI0JhciBhc3NvY2lhdGlvbnMjOTQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjOTQuMTAuMTYuMDcuMDAjRWR1Y2F0aW9uYWwgb3IgdGVhY2hlciBhc3NvY2lhdGlvbnMjOTQuMTAuMTYuMDAuMDAKLXVuc3BzYzcjOTQuMTAuMTYuMDguMDAjRW5naW5lZXJpbmcgYXNzb2NpYXRpb25zIzk0LjEwLjE2LjAwLjAwCi11bnNwc2M3Izk0LjEwLjE2LjA5LjAwI1NjaWVudGlmaWMgYXNzb2NpYXRpb25zIzk0LjEwLjE2LjAwLjAwCi11bnNwc2M3Izk0LjEwLjE2LjEwLjAwI1Byb2Zlc3Npb25hbCBzdGFuZGFyZHMgcmV2aWV3IGJvYXJkcyM5NC4xMC4xNi4wMC4wMAotdW5zcHNjNyM5NC4xMC4xNy4wMC4wMCNTdGFmZiBhc3NvY2lhdGlvbnMjOTQuMTAuMDAuMDAuMDAKLXVuc3BzYzcjOTQuMTAuMTcuMDEuMDAjU3RhZmYgaG9iYnkgY2x1YnMjOTQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjOTQuMTAuMTcuMDIuMDAjU3RhZmYgc3BvcnRzIGFzc29jaWF0aW9ucyM5NC4xMC4xNy4wMC4wMAotdW5zcHNjNyM5NC4xMC4xNy4wMy4wMCNXb21lbiBzdGFmZiBhc3NvY2lhdGlvbnMjOTQuMTAuMTcuMDAuMDAKLXVuc3BzYzcjOTQuMTAuMTcuMDQuMDAjUGVuc2lvbm5pc3Qgc3RhZmYgYXNzb2NpYXRpb25zIzk0LjEwLjE3LjAwLjAwCi11bnNwc2M3Izk0LjEwLjE3LjA1LjAwI01hbmFnZW1lbnQgc3RhZmYgYXNzb2NpYXRpb25zIzk0LjEwLjE3LjAwLjAwCi11bnNwc2M3Izk0LjEwLjE4LjAwLjAwI1RyYWRlIHVuaW9ucyM5NC4xMC4wMC4wMC4wMAotdW5zcHNjNyM5NC4xMC4xOC4wMS4wMCNMYWJvciBvciBnZW5lcmFsIHdvcmtlcnMgdHJhZGUgdW5pb25zIzk0LjEwLjE4LjAwLjAwCi11bnNwc2M3Izk0LjEwLjE4LjAyLjAwI1RyYWRlIHVuaW9uIGFjdGl2aXN0cyBzZXJ2aWNlcyM5NC4xMC4xOC4wMC4wMAotdW5zcHNjNyM5NC4xMC4xOC4wMy4wMCNUcmFkZSB1bmlvbiBpbmZvcm1hdGlvbiBzZXJ2aWNlcyM5NC4xMC4xOC4wMC4wMAotdW5zcHNjNyM5NC4xMC4xOC4wNC4wMCNUcmFuc3BvcnQgdW5pb25zIzk0LjEwLjE4LjAwLjAwCi11bnNwc2M3Izk0LjEwLjE4LjA1LjAwI1RlYWNoZXJzIHVuaW9ucyM5NC4xMC4xOC4wMC4wMAotdW5zcHNjNyM5NC4xMC4xOC4wNi4wMCNNZWRpY2FsIHBlcnNvbm5lbCB1bmlvbnMjOTQuMTAuMTguMDAuMDAKLXVuc3BzYzcjOTQuMTAuMTguMDcuMDAjRW1wbG95ZXJzIHVuaW9ucyM5NC4xMC4xOC4wMC4wMAotdW5zcHNjNyM5NC4xMC4xOC4wOC4wMCNDaXZpbCBzZXJ2YW50cyB1bmlvbnMjOTQuMTAuMTguMDAuMDAKLXVuc3BzYzcjOTQuMTAuMTguMDkuMDAjUGVyc29uYWwgYXNzaXN0YW5jZSBzZXJ2aWNlcyM5NC4xMC4xOC4wMC4wMAotdW5zcHNjNyM5NC4xMC4xOC4xMC4wMCNBdmlhdGlvbiB1bmlvbnMjOTQuMTAuMTguMDAuMDAKLXVuc3BzYzcjOTQuMTEuMDAuMDAuMDAjUmVsaWdpb3VzIG9yZ2FuaXphdGlvbnMjOTQuMDAuMDAuMDAuMDAKLXVuc3BzYzcjOTQuMTEuMTcuMDAuMDAjUmVsaWdpb3VzIHJlc2lkZW5jZXMjOTQuMTEuMDAuMDAuMDAKLXVuc3BzYzcjOTQuMTEuMTcuMDEuMDAjUHJpdmF0ZSByZWxpZ2lvdXMgaG9tZSByZXNpZGVuY2VzIzk0LjExLjE3LjAwLjAwCi11bnNwc2M3Izk0LjExLjE3LjAyLjAwI0NvbW11bml0eSByZWxpZ2lvdXMgaG9tZSByZXNpZGVuY2VzIzk0LjExLjE3LjAwLjAwCi11bnNwc2M3Izk0LjExLjE3LjAzLjAwI1JlbGlnaW91cyByZXRyZWF0IHJlc2lkZW5jZXMjOTQuMTEuMTcuMDAuMDAKLXVuc3BzYzcjOTQuMTEuMTcuMDQuMDAjVGVtcG9yYXJ5IHJlbGlnaW91cyBob21lIHJlc2lkZW5jZXMjOTQuMTEuMTcuMDAuMDAKLXVuc3BzYzcjOTQuMTEuMTguMDAuMDAjUGlsZ3JpbWFnZSBvcmdhbml6YXRpb25zIGFuZCBzZXJ2aWNlcyM5NC4xMS4wMC4wMC4wMAotdW5zcHNjNyM5NC4xMS4xOC4wMS4wMCNNZWNjYSBwaWxncmltYWdlIG9yZ2FuaXphdGlvbnMgb3Igc2VydmljZXMjOTQuMTEuMTguMDAuMDAKLXVuc3BzYzcjOTQuMTEuMTguMDIuMDAjVmF0aWNhbiBwaWxncmltYWdlIG9yZ2FuaXphdGlvbnMgb3Igc2VydmljZXMjOTQuMTEuMTguMDAuMDAKLXVuc3BzYzcjOTQuMTEuMTguMDMuMDAjUGlsZ3JpbWFnZSB0cmF2ZWwgYXNzaXN0YW5jZSBzZXJ2aWNlcyM5NC4xMS4xOC4wMC4wMAotdW5zcHNjNyM5NC4xMS4xOC4wNC4wMCNQaWxncmltYWdlIHRvdXIgb3BlcmF0b3JzIHNlcnZpY2VzIzk0LjExLjE4LjAwLjAwCi11bnNwc2M3Izk0LjExLjE5LjAwLjAwI01pc3Npb25hcnkgc2VydmljZXMjOTQuMTEuMDAuMDAuMDAKLXVuc3BzYzcjOTQuMTEuMTkuMDEuMDAjUmVsaWdpb3VzIG9yZGVycyBzZXJ2aWNlcyM5NC4xMS4xOS4wMC4wMAotdW5zcHNjNyM5NC4xMS4xOS4wMi4wMCNFdmFuZ2VsaWNhbCBtaXNzaW9uYXJ5IHNlcnZpY2VzIzk0LjExLjE5LjAwLjAwCi11bnNwc2M3Izk0LjExLjE5LjAzLjAwI0VkdWNhdGlvbmFsIG1pc3Npb25hcnkgc2VydmljZXMjOTQuMTEuMTkuMDAuMDAKLXVuc3BzYzcjOTQuMTEuMjAuMDAuMDAjRGVub21pbmF0aW9uYWwgc2VydmljZXMjOTQuMTEuMDAuMDAuMDAKLXVuc3BzYzcjOTQuMTEuMjAuMDEuMDAjSGluZHVpc20gc2VydmljZXMjOTQuMTEuMjAuMDAuMDAKLXVuc3BzYzcjOTQuMTEuMjAuMDIuMDAjQnVkZGhpc20gc2VydmljZXMjOTQuMTEuMjAuMDAuMDAKLXVuc3BzYzcjOTQuMTEuMjAuMDMuMDAjQ2hyaXN0aWFuIHNlcnZpY2VzIzk0LjExLjIwLjAwLjAwCi11bnNwc2M3Izk0LjExLjIwLjA0LjAwI0lzbGFtIHNlcnZpY2VzIzk0LjExLjIwLjAwLjAwCi11bnNwc2M3Izk0LjExLjIwLjA1LjAwI0p1ZGFpc20gc2VydmljZXMjOTQuMTEuMjAuMDAuMDAKLXVuc3BzYzcjOTQuMTIuMDAuMDAuMDAjQ2x1YnMjOTQuMDAuMDAuMDAuMDAKLXVuc3BzYzcjOTQuMTIuMTUuMDAuMDAjU3BvcnQgY2x1YnMjOTQuMTIuMDAuMDAuMDAKLXVuc3BzYzcjOTQuMTIuMTUuMDEuMDAjSWNlIHNwb3J0cyBjbHVicyM5NC4xMi4xNS4wMC4wMAotdW5zcHNjNyM5NC4xMi4xNS4wMi4wMCNCb2F0aW5nIG9yIHN3aW1taW5nIHNwb3J0IGNsdWJzIzk0LjEyLjE1LjAwLjAwCi11bnNwc2M3Izk0LjEyLjE1LjAzLjAwI0d1biBvciBodW50aW5nIHNwb3J0IGNsdWJzIzk0LjEyLjE1LjAwLjAwCi11bnNwc2M3Izk0LjEyLjE1LjA0LjAwI091dGRvb3IgZmllbGQgc3BvcnQgY2x1YnMjOTQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjOTQuMTIuMTUuMDUuMDAjSW5kb29yIG9yIG91dGRvb3IgY291cnQgc3BvcnQgY2x1YnMjOTQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjOTQuMTIuMTUuMDYuMDAjV2ludGVyIHNwb3J0IGNsdWJzIzk0LjEyLjE1LjAwLjAwCi11bnNwc2M3Izk0LjEyLjE1LjA3LjAwI0JlYWNoIG9yIHdhdGVyIHNwb3J0IGNsdWJzIzk0LjEyLjE1LjAwLjAwCi11bnNwc2M3Izk0LjEyLjE1LjA4LjAwI0N5Y2xpbmcgc3BvcnQgY2x1YnMjOTQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjOTQuMTIuMTUuMDkuMDAjTW91bnRhaW5lZXJpbmcgc3BvcnQgY2x1YnMjOTQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjOTQuMTIuMTUuMTAuMDAjUmFjaW5nIHNwb3J0IGNsdWJzIzk0LjEyLjE1LjAwLjAwCi11bnNwc2M3Izk0LjEyLjE1LjExLjAwI0ZseWluZyBzcG9ydCBjbHVicyM5NC4xMi4xNS4wMC4wMAotdW5zcHNjNyM5NC4xMi4xNS4xMi4wMCNQcm9mZXNzaW9uYWwgb3Igc2VtaXByb2Zlc3Npb25hbCBzcG9ydHMgY2x1YnMjOTQuMTIuMTUuMDAuMDAKLXVuc3BzYzcjOTQuMTIuMTUuMTMuMDAjU3RhZGl1bSBldmVudCBvcGVyYXRvciBzZXJ2aWNlcyM5NC4xMi4xNS4wMC4wMAotdW5zcHNjNyM5NC4xMi4xNS4xNC4wMCNTcG9ydCBjbHViIG1hbmFnZXJzIG9yIHByb21vdGVycyBzZXJ2aWNlcyM5NC4xMi4xNS4wMC4wMAotdW5zcHNjNyM5NC4xMi4xNi4wMC4wMCNIb2JieSBjbHVicyM5NC4xMi4wMC4wMC4wMAotdW5zcHNjNyM5NC4xMi4xNi4wMS4wMCNQbGF5aW5nIGNhcmQgaG9iYnkgY2x1YnMjOTQuMTIuMTYuMDAuMDAKLXVuc3BzYzcjOTQuMTIuMTYuMDIuMDAjSGFuZGNyYWZ0cyBjbHVicyM5NC4xMi4xNi4wMC4wMAotdW5zcHNjNyM5NC4xMi4xNi4wMy4wMCNQb2V0cnkgb3IgbGl0ZXJhdHVyZSBob2JieSBjbHVicyM5NC4xMi4xNi4wMC4wMAotdW5zcHNjNyM5NC4xMi4xNi4wNC4wMCNDb29raW5nIGhvYmJ5IGNsdWJzIzk0LjEyLjE2LjAwLjAwCi11bnNwc2M3Izk0LjEyLjE2LjA1LjAwI0dhcmRlbmluZyBob2JieSBjbHVicyM5NC4xMi4xNi4wMC4wMAotdW5zcHNjNyM5NC4xMi4xNi4wNi4wMCNDb2xsZWN0b3IgaG9iYnkgY2x1YiM5NC4xMi4xNi4wMC4wMAotdW5zcHNjNyM5NC4xMi4xNi4wNy4wMCNTY291dGluZyBjbHViIzk0LjEyLjE2LjAwLjAwCi11bnNwc2M3Izk0LjEyLjE3LjAwLjAwI0FtYXRldXJzIGNsdWJzIzk0LjEyLjAwLjAwLjAwCi11bnNwc2M3Izk0LjEyLjE3LjAxLjAwI0FtYXRldXIgZHJhbWEgY2x1YnMgb3Igc2VydmljZXMjOTQuMTIuMTcuMDAuMDAKLXVuc3BzYzcjOTQuMTIuMTcuMDIuMDAjQW1hdGV1ciBtdXNpYyBjbHVicyBvciBzZXJ2aWNlcyM5NC4xMi4xNy4wMC4wMAotdW5zcHNjNyM5NC4xMi4xNy4wMy4wMCNBbWF0ZXVyIGRhbmNlIGNsdWJzIG9yIHNlcnZpY2VzIzk0LjEyLjE3LjAwLjAwCi11bnNwc2M3Izk0LjEyLjE3LjA0LjAwI0FtYXRldXIgZmluZSBhcnRzIGNsdWJzIG9yIHNlcnZpY2VzIzk0LjEyLjE3LjAwLjAwCi11bnNwc2M3Izk0LjEyLjE4LjAwLjAwI1NvY2lhbCBjbHVicyM5NC4xMi4wMC4wMC4wMAotdW5zcHNjNyM5NC4xMi4xOC4wMS4wMCNZb3V0aCBjbHVicyM5NC4xMi4xOC4wMC4wMAotdW5zcHNjNyM5NC4xMi4xOC4wMi4wMCNTZW5pb3IgY2l0aXplbnMgY2x1YnMjOTQuMTIuMTguMDAuMDAKLXVuc3BzYzcjOTQuMTIuMTguMDMuMDAjU29jaWFsIGdhdGhlcmluZyBjbHVicyM5NC4xMi4xOC4wMC4wMAotdW5zcHNjNyM5NC4xMi4xOC4wNC4wMCNTb2NpYWwgY2x1YnMgZm9yIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyM5NC4xMi4xOC4wMC4wMAotdW5zcHNjNyM5NC4xMi4xOC4wNS4wMCNXYXIgdmV0ZXJhbnMgc29jaWFsIGNsdWJzIzk0LjEyLjE4LjAwLjAwCi11bnNwc2M3Izk0LjEzLjAwLjAwLjAwI0NpdmljIG9yZ2FuaXphdGlvbnMgYW5kIGFzc29jaWF0aW9ucyBhbmQgbW92ZW1lbnRzIzk0LjAwLjAwLjAwLjAwCi11bnNwc2M3Izk0LjEzLjE1LjAwLjAwI05vbiBnb3Zlcm5tZW50YWwgb3JnYW5pemF0aW9ucyM5NC4xMy4wMC4wMC4wMAotdW5zcHNjNyM5NC4xMy4xNS4wMS4wMCNFbnZpcm9ubWVudGFsIG5vbiBnb3Zlcm5tZW50YWwgc2VydmljZXMjOTQuMTMuMTUuMDAuMDAKLXVuc3BzYzcjOTQuMTMuMTUuMDIuMDAjRW1lcmdlbmN5IHJlbGllZiBub24gZ292ZXJubWVudGFsIHNlcnZpY2VzIzk0LjEzLjE1LjAwLjAwCi11bnNwc2M3Izk0LjEzLjE1LjAzLjAwI1RlY2huaWNhbCBhc3Npc3RhbmNlIG5vbiBnb3Zlcm5tZW50YWwgc2VydmljZXMjOTQuMTMuMTUuMDAuMDAKLXVuc3BzYzcjOTQuMTMuMTUuMDQuMDAjRGV2ZWxvcG1lbnQgYWlkIG5vbiBnb3Zlcm5lbW50YWwgc2VydmljZXMjOTQuMTMuMTUuMDAuMDAKLXVuc3BzYzcjOTQuMTMuMTYuMDAuMDAjQ2hhcml0eSBvcmdhbml6YXRpb25zIzk0LjEzLjAwLjAwLjAwCi11bnNwc2M3Izk0LjEzLjE2LjAxLjAwI0NoYXJpdHkgb3JnYW5pemF0aW9ucyBzaGVsdGVyIHNlcnZpY2VzIzk0LjEzLjE2LjAwLjAwCi11bnNwc2M3Izk0LjEzLjE2LjAyLjAwI0Zvb2QgcmVsaWVmIHNlcnZpY2VzIzk0LjEzLjE2LjAwLjAwCi11bnNwc2M3Izk0LjEzLjE2LjAzLjAwI0xlZ2FsIGFzc2lzdGFuY2Ugc2VydmljZXMjOTQuMTMuMTYuMDAuMDAKLXVuc3BzYzcjOTQuMTMuMTYuMDQuMDAjUmVzb3VyY2UgbW9iaWxpemF0aW9uIHNlcnZpY2VzIzk0LjEzLjE2LjAwLjAwCi11bnNwc2M3Izk0LjEzLjE2LjA1LjAwI0ludGVybmF0aW9uYWwgYWlkIGFzc2lzdGFuY2Ugc2VydmljZXMjOTQuMTMuMTYuMDAuMDAKLXVuc3BzYzcjOTQuMTMuMTYuMDYuMDAjT3JwaGFuYWdlIG9yIGFkb3B0aW9uIHNlcnZpY2VzIzk0LjEzLjE2LjAwLjAwCi11bnNwc2M3Izk0LjEzLjE2LjA3LjAwI0VkZXJseSBhc3Npc3RhbmNlIG9yZ2FuaXphdGlvbnMjOTQuMTMuMTYuMDAuMDAKLXVuc3BzYzcjOTQuMTMuMTYuMDguMDAjUHJpc29uZXIgYXNzaXN0YW5jZSBvcmdhbml6YXRpb25zIzk0LjEzLjE2LjAwLjAwCi11bnNwc2M3Izk0LjEzLjE3LjAwLjAwI0dyZWVuIGFzc29jaWF0aW9ucyM5NC4xMy4wMC4wMC4wMAotdW5zcHNjNyM5NC4xMy4xNy4wMS4wMCNSYWRpY2FsIGdyZWVuIGFzc29jaWF0aW9ucyM5NC4xMy4xNy4wMC4wMAotdW5zcHNjNyM5NC4xMy4xNy4wMi4wMCNFY29mZW1pbmlzdHMgYXNzb2NpYXRpb25zIzk0LjEzLjE3LjAwLjAwCi11bnNwc2M3Izk0LjEzLjE3LjAzLjAwI0Vjb2xvZ2ljYWwgcG9saXRpY2FsIG9yZ2FuaXphdGlvbnMjOTQuMTMuMTcuMDAuMDAKLXVuc3BzYzcjOTQuMTMuMTcuMDQuMDAjR3JlZW4gYWN0aXZpc3RzIG1vdmVtZW50cyBvciBzZXJ2aWNlcyM5NC4xMy4xNy4wMC4wMAotdW5zcHNjNyM5NC4xMy4xOC4wMC4wMCNNb3ZlbWVudHMjOTQuMTMuMDAuMDAuMDAKLXVuc3BzYzcjOTQuMTMuMTguMDEuMDAjR2F5IG9yIGxlc2JpYW4gb3IgYmlzZXh1YWwgb3IgdHJhbnNnZW5kZXIgbW92ZW1lbnRzIzk0LjEzLjE4LjAwLjAwCi11bnNwc2M3Izk0LjEzLjE4LjAyLjAwI0FudGkgcmFjaXNtIG1vdmVtZW50cyM5NC4xMy4xOC4wMC4wMAotdW5zcHNjNyM5NC4xMy4xOC4wMy4wMCNXb21lbiBsaWJlcmF0aW9uIG1vdmVtZW50cyM5NC4xMy4xOC4wMC4wMAotdW5zcHNjNyM5NC4xMy4xOC4wNC4wMCNGcmF0ZXJuYWwgYXNzb2NpYXRpb25zIzk0LjEzLjE4LjAwLjAwCi11bnNwc2M3Izk0LjEzLjE4LjA1LjAwI0V0aG5pYyBtaW5vcml0aWVzIGN1bHR1cmFsIHByZXNlcnZhdGlvbiBzZXJ2aWNlcyM5NC4xMy4xOC4wMC4wMAotdW5zcHNjNyM5NC4xMy4xOS4wMC4wMCNBbmltYWwgcHJvdGVjdGlvbiBhc3NvY2lhdGlvbnMjOTQuMTMuMDAuMDAuMDAKLXVuc3BzYzcjOTQuMTMuMTkuMDEuMDAjQW5pbWFsIGxpYmVyYXRpb24gbW92ZW1lbnRzIzk0LjEzLjE5LjAwLjAwCi11bnNwc2M3Izk0LjEzLjE5LjAyLjAwI0VuZGFuZ2VyZWQgc3BlY2llcyBwcm90ZWN0aW9uIGFzc29jaWF0aW9ucyM5NC4xMy4xOS4wMC4wMAotdW5zcHNjNyM5NC4xMy4xOS4wMy4wMCNUaHJlYXRlbmVkIGFuaW1hbHMgcHJvdGVjdGlvbiBhc3NvY2lhdGlvbnMjOTQuMTMuMTkuMDAuMDAKLXVuc3BzYzcjOTQuMTMuMjAuMDAuMDAjSHVtYW4gcmlnaHRzIGFkdm9jYWN5IGFuZCBkZWZlbnNlIGFzc29jaWF0aW9ucyM5NC4xMy4wMC4wMC4wMAotdW5zcHNjNyM5NC4xMy4yMC4wMS4wMCNDaGlsZHJlbiByaWdodHMgZGVmZW5zZSBzZXJ2aWNlcyM5NC4xMy4yMC4wMC4wMAotdW5zcHNjNyM5NC4xMy4yMC4wMi4wMCNQcmlzb25lcnMgZGVmZW5zZSBzZXJ2aWNlcyM5NC4xMy4yMC4wMC4wMAotdW5zcHNjNyM5NC4xMy4yMC4wMy4wMCNQaHlzaWNhbCBvciBtZW50YWwgdG9ydHVyZSBkZWZlbnNlIGFzc29jaWF0aW9ucyM5NC4xMy4yMC4wMC4wMAotdW5zcHNjNyM5NC4xMy4yMC4wNC4wMCNGcmVlZG9tIG9mIHNwZWVjaCBkZWZlbnNlIGFzc29jaWF0aW9ucyM5NC4xMy4yMC4wMC4wMAotdW5zcHNjNyM5NC4xMy4yMC4wNS4wMCNWb3RpbmcgcmlnaHRzIGRlZmVuc2UgYXNzb2NpYXRpb25zIzk0LjEzLjIwLjAwLjAwCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9CdXNQdWJsaXNoU2VydmljZUFkdmFuY2VkRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvQnVzUHVibGlzaFNlcnZpY2VBZHZhbmNlZEZvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MGU5ZjlmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9CdXNQdWJsaXNoU2VydmljZUFkdmFuY2VkRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic3ViUXVlcnlLZXlQcm9wZXJ0eSIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlN1YlF1ZXJ5S2V5UHJvcGVydHkiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGZ1bmN0aW9uIHByb2Nlc3NQdWJsaXNoU2VydmljZUFkdmFuY2VkRm9ybShmb3JtKQotICB7Ci0gICAgaWYgKGhhbmRsZVN1Ym1pdChmb3JtKSkKLSAgICB7Ci0gICAgICBwcm9jZXNzUmVzdWx0VGFibGUoInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRTZXJ2aWNlSW50ZXJmYWNlIiwiPCU9VURESUFjdGlvbklucHV0cy5OT0RFSURfU0VSVklDRV9JTlRFUkZBQ0UlPiIsZm9ybSxmYWxzZSk7Ci0gICAgICBwcm9jZXNzTGFuZ3VhZ2VJbnB1dFRhYmxlKCJwdWJsaXNoU2VydmljZUFkdmFuY2VkTmFtZXMiLCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX05BTUVfTEFOR1VBR0UlPiIsIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTkFNRSU+Iixmb3JtKTsKLSAgICAgIHByb2Nlc3NMYW5ndWFnZUlucHV0VGFibGUoInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWREZXNjcmlwdGlvbnMiLCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0RFU0NSSVBUSU9OX0xBTkdVQUdFJT4iLCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0RFU0NSSVBUSU9OJT4iLGZvcm0pOwotICAgICAgcHJvY2Vzc0NhdGVnb3J5VGFibGUoInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRDYXRlZ29yaWVzIixmb3JtLGZhbHNlKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLTwvc2NyaXB0PgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlciA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci0gICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICBGb3JtVG9vbCBmb3JtVG9vbCA9IChGb3JtVG9vbCkoc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpKTsKLSAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJID0gKChNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSlmb3JtVG9vbCkuZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHN1YlF1ZXJ5S2V5UHJvcGVydHkuZ2V0U3ViUXVlcnlLZXkoKSk7Ci0lPgotPGRpdiBpZD0icHVibGlzaFNlcnZpY2VBZHZhbmNlZCIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL0J1c1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRBY3Rpb25KU1AuanNwIikpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG9uU3VibWl0PSJyZXR1cm4gcHJvY2Vzc0FkdmFuY2VkRm9ybSh0aGlzKSI+Ci0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3ViUXVlcnlHZXQiPgotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuTk9ERUlEX0JVU0lORVNTJT4iIHZhbHVlPSI8JT1zZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCklPiI+ICAKLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLk5FV19TVUJRVUVSWV9JTklUSUFURUQlPiI+Ci0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5ORVdfU1VCUVVFUllfUVVFUllfSVRFTSU+Ij4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTEwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9CVVNJTkVTU19QVUJMSVNIX1NFUlZJQ0VfQURWQU5DRURfREVTQyIpJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRBdXRoZW50aWNhdGlvbiIpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9hdXRoZW50aWNhdGlvbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIG5vd3JhcCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MzAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgIDxsYWJlbCBmb3I9ImlucHV0X2J1c2luZXNzX3B1Ymxpc2hfc2VydmljZV9hZHZhbmNlX3dzZGxfdXJsIj48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfV1NETF9VUkwiKSU+PC9sYWJlbD4KLTwlCi0gICBpZiAoIWZvcm1Ub29sUEkuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9XU0RMX1VSTCkpCi0gICB7Ci0lPgotICAgICAgICAgIDwlPUhUTUxVdGlscy5yZWRBc3RlcmlzaygpJT4KLTwlCi0gICB9Ci0lPgotICAgICAgICA8L3RkPgotICAgICAgICA8dGQgbm93cmFwIGhlaWdodD0zMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpvcGVuV1NETEJyb3dzZXIoJ3B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWQnLDwlPUFjdGlvbklucHV0cy5XU0RMX1RZUEVfU0VSVklDRSU+KSI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xJTktfQlJPV1NFIiklPjwvYT4KLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY29sc3Bhbj0zPgotICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iaW5wdXRfYnVzaW5lc3NfcHVibGlzaF9zZXJ2aWNlX2FkdmFuY2Vfd3NkbF91cmwiIG5hbWU9IjwlPUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XU0RMX1VSTCU+IiBjbGFzcz0idGV4dGVudGVyIj4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLTwlCi0gICBib29sZWFuIHRhYmxlSGFzRXJyb3JzID0gIWZvcm1Ub29sUEkuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX0lOVEVSRkFDRVMpOwotICAgU3RyaW5nW10gc2VydmljZUludGVyZmFjZVNwZWNpZmljSW5mbyA9IHsiRk9STV9MQUJFTF9TRVJWSUNFX0lOVEVSRkFDRVMiLChuZXcgQm9vbGVhbih0YWJsZUhhc0Vycm9ycykpLnRvU3RyaW5nKCksU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUyksInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWQiLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX0lOVEVSRkFDRVN9OwotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJwdWJsaXNoU2VydmljZUFkdmFuY2VkU2VydmljZUludGVyZmFjZSIpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKHNlcnZpY2VJbnRlcmZhY2VTcGVjaWZpY0luZm8pOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy91ZGRpT2JqZWN0c190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJwdWJsaXNoU2VydmljZUFkdmFuY2VkTmFtZXMiKTsKLSAgIFN0cmluZ1tdIG5hbWVTcGVjaWZpY0luZm8gPSB7IkZPUk1fTEFCRUxfTkFNRVMiLCJGT1JNX0xBQkVMX05BTUUiLFN0cmluZy52YWx1ZU9mKCFmb3JtVG9vbFBJLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTkFNRVMpKX07Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMobmFtZVNwZWNpZmljSW5mbyk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2xhbmd1YWdlSW5wdXRfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgicHVibGlzaFNlcnZpY2VBZHZhbmNlZERlc2NyaXB0aW9ucyIpOwotICAgU3RyaW5nW10gZGVzY1NwZWNpZmljSW5mbyA9IHsiRk9STV9MQUJFTF9ERVNDUklQVElPTlMiLCJGT1JNX0xBQkVMX0RFU0NSSVBUSU9OIixTdHJpbmcudmFsdWVPZighZm9ybVRvb2xQSS5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0RFU0NSSVBUSU9OUykpfTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhkZXNjU3BlY2lmaWNJbmZvKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvbGFuZ3VhZ2VJbnB1dF90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJwdWJsaXNoU2VydmljZUFkdmFuY2VkQ2F0ZWdvcmllcyIpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9jYXRlZ29yaWVzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvc2ltcGxlQ29tbW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgPC9mb3JtPgotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvQnVzUHVibGlzaFNlcnZpY2VGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9CdXNQdWJsaXNoU2VydmljZUZvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzEyMWQzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9CdXNQdWJsaXNoU2VydmljZUZvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjU5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuU2VsZWN0U3ViUXVlcnlJdGVtQWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLkxpc3RFbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudWRkaTRqLmRhdGF0eXBlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLlRNb2RlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIC8vIHNlbGVjdGVkTm9kZSBtdXN0IGJlIGEgYnVzaW5lc3Mgbm9kZS4KLSAgIE5vZGUgYnVzTm9kZSA9IG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICBGb3JtVG9vbCBmb3JtVG9vbCA9IChGb3JtVG9vbCkoYnVzTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKSk7Ci0lPgotPGpzcDp1c2VCZWFuIGlkPSJzdWJRdWVyeUtleVByb3BlcnR5IiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuU3ViUXVlcnlLZXlQcm9wZXJ0eSIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgIFN0cmluZyBzdWJRdWVyeUtleSA9IChTdHJpbmcpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVkpOwotICAgc3ViUXVlcnlLZXlQcm9wZXJ0eS5zZXRTdWJRdWVyeUtleShzdWJRdWVyeUtleSk7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTwlCi0gICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSA9ICgoTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UpZm9ybVRvb2wpLmdldEZvcm1Ub29sUHJvcGVydGllcyhzdWJRdWVyeUtleVByb3BlcnR5LmdldFN1YlF1ZXJ5S2V5KCkpOwotICAgLy8gYnVzaW5lc3MgcGFyZW50IG5vZGUgbWF5IGJlIGVpdGhlciB0aGUgcHVibGlzaGVkIGl0ZW1zIGZvbGRlciBvciBhIHF1ZXJ5IG5vZGUuCi0gICBVRERJTWFpbk5vZGUgdWRkaU1haW5Ob2RlID0gKFVERElNYWluTm9kZSluYXZpZ2F0b3JNYW5hZ2VyLmdldFJvb3ROb2RlKCk7Ci0gICBOb2RlIHJlZ05vZGUgPSB1ZGRpTWFpbk5vZGUuZ2V0UmVnaXN0cnlOb2RlKGJ1c05vZGUpOwotICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSU+Ci08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9CVVNJTkVTU19QVUJMSVNIX1NFUlZJQ0UiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvZm9ybXN1Ym1pdC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvdGFibGVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGl0YWJsZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHZhciBzZWN0aW9uSWRzID0gWyJwdWJsaXNoU2VydmljZVNpbXBsZSIsInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWQiXTsKLSAgdmFyIHN0eWxlRm9ybSA9ICJwdWJsaXNoU2VydmljZVN0eWxlIjsKLSAgCi0gIGZ1bmN0aW9uIHByb2Nlc3NBZHZhbmNlZEZvcm0oZm9ybSkKLSAgewotICAgIGlmIChoYW5kbGVTdWJtaXQoZm9ybSkpCi0gICAgewotICAgICAgcHJvY2Vzc1Jlc3VsdFRhYmxlKCJwdWJsaXNoU2VydmljZUFkdmFuY2VkU2VydmljZUludGVyZmFjZSIsIjwlPVVERElBY3Rpb25JbnB1dHMuTk9ERUlEX1NFUlZJQ0VfSU5URVJGQUNFJT4iLGZvcm0sZmFsc2UpOwotICAgICAgcHJvY2Vzc0xhbmd1YWdlSW5wdXRUYWJsZSgicHVibGlzaFNlcnZpY2VBZHZhbmNlZE5hbWVzIiwiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9OQU1FX0xBTkdVQUdFJT4iLCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX05BTUUlPiIsZm9ybSk7Ci0gICAgICBwcm9jZXNzTGFuZ3VhZ2VJbnB1dFRhYmxlKCJwdWJsaXNoU2VydmljZUFkdmFuY2VkRGVzY3JpcHRpb25zIiwiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9ERVNDUklQVElPTl9MQU5HVUFHRSU+IiwiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9ERVNDUklQVElPTiU+Iixmb3JtKTsKLSAgICAgIHByb2Nlc3NDYXRlZ29yeVRhYmxlKCJwdWJsaXNoU2VydmljZUFkdmFuY2VkQ2F0ZWdvcmllcyIsZm9ybSxmYWxzZSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICBmdW5jdGlvbiBzZXRBdXRoZW50aWNhdGlvblNlY3Rpb25EZWZhdWx0cyhmb3JtKQotICB7Ci08JQotICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSAoU3RyaW5nKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgU3RyaW5nIHVzZXJJZCA9IChTdHJpbmcpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgU3RyaW5nIHBhc3N3b3JkID0gKFN0cmluZylmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEKTsKLSU+Ci0gICAgZm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHB1Ymxpc2hVUkwpJT4iOwotICAgIGZvcm0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodXNlcklkKSU+IjsKLSAgICBmb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUocGFzc3dvcmQpJT4iOwotICB9Ci0gIAotICBmdW5jdGlvbiBzZXREZWZhdWx0cygpCi0gIHsKLTwlCi0gICBTdHJpbmcgcHVibGlzaFNlcnZpY2VTdHlsZUluZGV4ID0gKFN0cmluZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRVMpOwotJT4KLSAgICBkb2N1bWVudC5mb3Jtc1tzdHlsZUZvcm1dLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRVMlPls8JT1wdWJsaXNoU2VydmljZVN0eWxlSW5kZXglPl0uY2hlY2tlZCA9IHRydWU7Ci0gICAgCi0gICAgdmFyIHB1Ymxpc2hTZXJ2aWNlU2ltcGxlU2VjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNlY3Rpb25JZHNbPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TSU1QTEUlPl0pOwotICAgIHZhciBwdWJsaXNoU2VydmljZVNpbXBsZUZvcm0gPSBwdWJsaXNoU2VydmljZVNpbXBsZVNlY3Rpb24uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImZvcm0iKS5pdGVtKDApOwotICAgIHNldEF1dGhlbnRpY2F0aW9uU2VjdGlvbkRlZmF1bHRzKHB1Ymxpc2hTZXJ2aWNlU2ltcGxlRm9ybSk7Ci0gICAgcHVibGlzaFNlcnZpY2VTaW1wbGVGb3JtLjwlPUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XU0RMX1VSTCU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSgoU3RyaW5nKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9XU0RMX1VSTCkpJT4iOwotICAgIHB1Ymxpc2hTZXJ2aWNlU2ltcGxlRm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX05BTUUlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoKFN0cmluZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfTkFNRSkpJT4iOwotICAgIHB1Ymxpc2hTZXJ2aWNlU2ltcGxlRm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0RFU0NSSVBUSU9OJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0RFU0NSSVBUSU9OKSklPiI7Ci0gICAgCi0gICAgLy8gQWR2YW5jZWQgZm9ybSBkZXRhaWxzLgotICAgIHZhciBwdWJsaXNoU2VydmljZUFkdmFuY2VkU2VjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNlY3Rpb25JZHNbPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9BRFZBTkNFRCU+XSk7Ci0gICAgdmFyIHB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRGb3JtID0gcHVibGlzaFNlcnZpY2VBZHZhbmNlZFNlY3Rpb24uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImZvcm0iKS5pdGVtKDApOwotICAgIHNldEF1dGhlbnRpY2F0aW9uU2VjdGlvbkRlZmF1bHRzKHB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRGb3JtKTsKLSAgICB2YXIgcHVibGlzaFNlcnZpY2VBZHZhbmNlZE5hbWVzVGFibGUgPSBnZXRUYWJsZSgicHVibGlzaFNlcnZpY2VBZHZhbmNlZE5hbWVzIik7Ci0gICAgdmFyIHB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWREZXNjcmlwdGlvbnNUYWJsZSA9IGdldFRhYmxlKCJwdWJsaXNoU2VydmljZUFkdmFuY2VkRGVzY3JpcHRpb25zIik7Ci0gICAgcHVibGlzaFNlcnZpY2VBZHZhbmNlZEZvcm0uPCU9QWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dTRExfVVJMJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfV1NETF9VUkwpKSU+IjsKLTwlCi0gICBWZWN0b3Igc2VydmljZUludGVyZmFjZXMgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfSU5URVJGQUNFUyk7Ci0gICBWZWN0b3Igc2VydmljZUludGVyZmFjZXNDb3B5ID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX0lOVEVSRkFDRVNfQ09QWSk7Ci0gICBpZiAoc2VydmljZUludGVyZmFjZXMgIT0gbnVsbCkKLSAgIHsKLSAgICAgaWYgKHNlcnZpY2VJbnRlcmZhY2VzQ29weSA9PSBudWxsKQotICAgICAgIHNlcnZpY2VJbnRlcmZhY2VzQ29weSA9IG5ldyBWZWN0b3IoKTsKLSAgICAgZWxzZQotICAgICAgIHNlcnZpY2VJbnRlcmZhY2VzQ29weS5yZW1vdmVBbGxFbGVtZW50cygpOwotICAgICBmb3IgKGludCBpPTA7aTxzZXJ2aWNlSW50ZXJmYWNlcy5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpc2VydmljZUludGVyZmFjZXMuZWxlbWVudEF0KGkpOwotICAgICAgIGludCB0YXJnZXROb2RlSWQgPSBsaXN0RWxlbWVudC5nZXRUYXJnZXROb2RlSWQoKTsKLSAgICAgICBpbnQgdGFyZ2V0VG9vbElkID0gbGlzdEVsZW1lbnQuZ2V0VGFyZ2V0VG9vbElkKCk7Ci0gICAgICAgaW50IHRhcmdldFZpZXdJZCA9IGxpc3RFbGVtZW50LmdldFRhcmdldFZpZXdJZCgpOwotICAgICAgIFN0cmluZyB1cmwgPSBTZWxlY3RTdWJRdWVyeUl0ZW1BY3Rpb24uZ2V0QWN0aW9uTGluayh0YXJnZXROb2RlSWQsdGFyZ2V0VG9vbElkLHRhcmdldFZpZXdJZCxzdWJRdWVyeUtleVByb3BlcnR5LmdldFN1YlF1ZXJ5S2V5KCksVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfSU5URVJGQUNFUyxpLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVMsZmFsc2UpOwotICAgICAgIFRNb2RlbCB0TW9kZWwgPSAoVE1vZGVsKWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgIHNlcnZpY2VJbnRlcmZhY2VzQ29weS5hZGRFbGVtZW50KHNlcnZpY2VJbnRlcmZhY2VzLmVsZW1lbnRBdChpKSk7Ci0lPgotICAgIGFkZFJlc3VsdFJvdygicHVibGlzaFNlcnZpY2VBZHZhbmNlZFNlcnZpY2VJbnRlcmZhY2UiLDwlPXRhcmdldE5vZGVJZCU+LCI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQodXJsKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZSh0TW9kZWwuZ2V0TmFtZVN0cmluZygpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHRNb2RlbC5nZXREZWZhdWx0RGVzY3JpcHRpb25TdHJpbmcoKSklPiIpOwotPCUKLSAgICAgfQotICAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX0lOVEVSRkFDRVNfQ09QWSxzZXJ2aWNlSW50ZXJmYWNlc0NvcHkpOwotICAgfQotICAgZWxzZQotICAgewotICAgICBzZXJ2aWNlSW50ZXJmYWNlcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgc2VydmljZUludGVyZmFjZXNDb3B5ID0gbmV3IFZlY3RvcigpOwotICAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX0lOVEVSRkFDRVMsc2VydmljZUludGVyZmFjZXMpOwotICAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX0lOVEVSRkFDRVNfQ09QWSxzZXJ2aWNlSW50ZXJmYWNlc0NvcHkpOwotICAgfQotJT4KLTwlCi0gICBWZWN0b3Igc2VydmljZU5hbWVWZWN0b3IgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX05BTUVTKTsKLSAgIGlmIChzZXJ2aWNlTmFtZVZlY3RvciAhPSBudWxsKQotICAgewotICAgICBmb3IgKGludCBpPTA7aTxzZXJ2aWNlTmFtZVZlY3Rvci5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgTmFtZSBuYW1lID0gKE5hbWUpc2VydmljZU5hbWVWZWN0b3IuZWxlbWVudEF0KGkpOwotJT4KLSAgICBhZGRMYW5ndWFnZUlucHV0Um93KCJwdWJsaXNoU2VydmljZUFkdmFuY2VkTmFtZXMiLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9OQU1FX1RFWFRfVkFMVUUiKSklPiIpOwotICAgIHNldExhbmd1YWdlSW5wdXRSb3dTZXR0aW5ncygicHVibGlzaFNlcnZpY2VBZHZhbmNlZE5hbWVzIiw8JT1pJT4sIjwlPUhUTUxVdGlscy5KU01hbmdsZShuYW1lLmdldExhbmcoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShuYW1lLmdldFRleHQoKSklPiIpOwotPCUKLSAgICAgICBpZiAoIWZvcm1Ub29sUEkuaXNSb3dJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9OQU1FUyxpKSkKLSAgICAgICB7Ci0lPgotICAgIGhpZ2hsaWdodEVycmFudFJvdyhwdWJsaXNoU2VydmljZUFkdmFuY2VkTmFtZXNUYWJsZS5yb3dzWzwlPWklPitudW1iZXJPZkhlYWRlclJvd3NdLCJlcnJhbnRyb3ciKTsKLTwlCi0gICAgICAgfQotICAgICB9Ci0gICB9Ci0KLSAgIFZlY3RvciBzZXJ2aWNlRGVzY3JpcHRpb25WZWN0b3IgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0RFU0NSSVBUSU9OUyk7Ci0gICBpZiAoc2VydmljZURlc2NyaXB0aW9uVmVjdG9yICE9IG51bGwpCi0gICB7Ci0gICAgIGZvciAoaW50IGk9MDtpPHNlcnZpY2VEZXNjcmlwdGlvblZlY3Rvci5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgRGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSAoRGVzY3JpcHRpb24pc2VydmljZURlc2NyaXB0aW9uVmVjdG9yLmVsZW1lbnRBdChpKTsKLSU+Ci0gICAgYWRkTGFuZ3VhZ2VJbnB1dFJvdygicHVibGlzaFNlcnZpY2VBZHZhbmNlZERlc2NyaXB0aW9ucyIsIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX0RFU0NSSVBUSU9OX1RFWFRfVkFMVUUiKSklPiIpOwotICAgIHNldExhbmd1YWdlSW5wdXRSb3dTZXR0aW5ncygicHVibGlzaFNlcnZpY2VBZHZhbmNlZERlc2NyaXB0aW9ucyIsPCU9aSU+LCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoZGVzY3JpcHRpb24uZ2V0TGFuZygpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGRlc2NyaXB0aW9uLmdldFRleHQoKSklPiIpOwotPCUKLSAgICAgICBpZiAoIWZvcm1Ub29sUEkuaXNSb3dJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9ERVNDUklQVElPTlMsaSkpCi0gICAgICAgewotJT4KLSAgICBoaWdobGlnaHRFcnJhbnRSb3cocHVibGlzaFNlcnZpY2VBZHZhbmNlZERlc2NyaXB0aW9uc1RhYmxlLnJvd3NbPCU9aSU+K251bWJlck9mSGVhZGVyUm93c10sImVycmFudHJvdyIpOwotPCUKLSAgICAgICB9Ci0gICAgIH0KLSAgIH0KLQotICAgQ2F0ZWdvcnlCYWcgc2VydmljZUNhdEJhZyA9IChDYXRlZ29yeUJhZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9DQVRFR09SSUVTKTsKLSAgIGlmIChzZXJ2aWNlQ2F0QmFnICE9IG51bGwpCi0gICB7Ci0gICAgIFZlY3RvciBrZXllZFJlZmVyZW5jZVZlY3RvciA9IHNlcnZpY2VDYXRCYWcuZ2V0S2V5ZWRSZWZlcmVuY2VWZWN0b3IoKTsKLSAgICAgZm9yIChpbnQgaT0wO2k8a2V5ZWRSZWZlcmVuY2VWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gKEtleWVkUmVmZXJlbmNlKWtleWVkUmVmZXJlbmNlVmVjdG9yLmVsZW1lbnRBdChpKTsKLSU+Ci0gICAgYWRkQ2F0ZWdvcnlSb3coInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRDYXRlZ29yaWVzIik7Ci0gICAgc2V0Q2F0ZWdvcnlSb3dTZXR0aW5ncygicHVibGlzaFNlcnZpY2VBZHZhbmNlZENhdGVnb3JpZXMiLDwlPWklPiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldFRNb2RlbEtleSgpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldEtleU5hbWUoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRLZXlWYWx1ZSgpKSU+Iik7Ci08JQotICAgICB9Ci0gICB9Ci0gICAKLSAgIGlmICghcmVnRWxlbWVudC5pc0xvZ2dlZEluKCkpCi0gICB7Ci0lPgotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwdWJsaXNoU2VydmljZVNpbXBsZUF1dGhlbnRpY2F0aW9uIikuc3R5bGUuZGlzcGxheSA9ICIiOwotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwdWJsaXNoU2VydmljZUFkdmFuY2VkQXV0aGVudGljYXRpb24iKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci08JQotICAgfQotJT4KLSAgICBzaG93UHVibGlzaEZvcm0oPCU9cHVibGlzaFNlcnZpY2VTdHlsZUluZGV4JT4pOyAgICAKLSAgfQotICAKLSAgZnVuY3Rpb24gc2hvd1B1Ymxpc2hGb3JtKHN0eWxlKQotICB7Ci0gICAgY2xvc2VBbGxVZGRpQ2hpbGRXaW5kb3dzKCk7Ci0gICAgZm9yICh2YXIgaT0wO2k8c2VjdGlvbklkcy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIGlmIChpID09IHN0eWxlKQotICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzZWN0aW9uSWRzW2ldKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gICAgICBlbHNlCi0gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNlY3Rpb25JZHNbaV0pLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7Ci0gICAgfQotICAgIHZhciBsb2FkU2NyZWVuVGFibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9hZFNjcmVlbiIpOwotICAgIGlmIChsb2FkU2NyZWVuVGFibGUucm93cy5sZW5ndGggPiAwKQotICAgICAgbG9hZFNjcmVlblRhYmxlLmRlbGV0ZVJvdygwKTsKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWFpblNjcmVlbiIpLnN0eWxlLmRpc3BsYXkgPSAiIjsgICAgCi0gIH0KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iIG9uVW5sb2FkPSJjbG9zZUFsbFVkZGlDaGlsZFdpbmRvd3MoKSI+Ci0gIDxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICAgIDx0YWJsZSBpZD0ibG9hZFNjcmVlbiI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZD4KLSAgICAgICAgICA8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIk1TR19MT0FEX0lOX1BST0dSRVNTIiklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICAgIDxkaXYgaWQ9Im1haW5TY3JlZW4iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLTwlCi0gICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAidWRkaS9pbWFnZXMvcHVibGlzaF9zZXJ2aWNlX2hpZ2hsaWdodGVkLmdpZiI7Ci0gICBTdHJpbmcgdGl0bGUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1BVQkxJU0hfU0VSVklDRSIpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgICAgIDxmb3JtIG5hbWU9InB1Ymxpc2hTZXJ2aWNlU3R5bGUiIHN0eWxlPSJtYXJnaW4tdG9wOjA7Ij4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgICAgIDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1BVQkxJU0hfRk9STSIpJT4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgPC90cj4gICAgICAgIAotICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBpZD0icmFkaW9fYnVzaW5lc3NfcHVibGlzaF9zZXJ2aWNlX3NpbXBsZSIgY2xhc3M9InJhZGlvIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VTJT4iIG9uQ2xpY2s9InNob3dQdWJsaXNoRm9ybSg8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NJTVBMRSU+KSI+PGxhYmVsIGZvcj0icmFkaW9fYnVzaW5lc3NfcHVibGlzaF9zZXJ2aWNlX3NpbXBsZSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fUkFESU9fU0lNUExFIiklPjwvbGFiZWw+Ci0gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgaWQ9InJhZGlvX2J1c2luZXNzX3B1Ymxpc2hfc2VydmljZV9hZHZhbmNlIiBjbGFzcz0icmFkaW8iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRVMlPiIgb25DbGljaz0ic2hvd1B1Ymxpc2hGb3JtKDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQURWQU5DRUQlPikiPjxsYWJlbCBmb3I9InJhZGlvX2J1c2luZXNzX3B1Ymxpc2hfc2VydmljZV9hZHZhbmNlIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9SQURJT19BRFZBTkNFRCIpJT48L2xhYmVsPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotICAgICAgPC9mb3JtPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL0J1c1B1Ymxpc2hTZXJ2aWNlU2ltcGxlRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvQnVzUHVibGlzaFNlcnZpY2VBZHZhbmNlZEZvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgIDwvZGl2PgotICA8L2Rpdj4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBzZXREZWZhdWx0cygpOwotPC9zY3JpcHQ+ICAKLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9CdXNQdWJsaXNoU2VydmljZVNpbXBsZUZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL0J1c1B1Ymxpc2hTZXJ2aWNlU2ltcGxlRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1YTRkOTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL0J1c1B1Ymxpc2hTZXJ2aWNlU2ltcGxlRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzdWJRdWVyeUtleVByb3BlcnR5IiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuU3ViUXVlcnlLZXlQcm9wZXJ0eSIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgIEZvcm1Ub29sIGZvcm1Ub29sID0gKEZvcm1Ub29sKShzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkgPSAoKE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlKWZvcm1Ub29sKS5nZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXlQcm9wZXJ0eS5nZXRTdWJRdWVyeUtleSgpKTsKLSU+Ci08ZGl2IGlkPSJwdWJsaXNoU2VydmljZVNpbXBsZSIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL0J1c1B1Ymxpc2hTZXJ2aWNlU2ltcGxlQWN0aW9uSlNQLmpzcCIpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBvblN1Ym1pdD0icmV0dXJuIGhhbmRsZVN1Ym1pdCh0aGlzKSI+Ci0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5OT0RFSURfQlVTSU5FU1MlPiIgdmFsdWU9IjwlPXNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSU+Ij4KLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLk5FV19TVUJRVUVSWV9JTklUSUFURUQlPiI+Ci0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5ORVdfU1VCUVVFUllfUVVFUllfSVRFTSU+Ij4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTEwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9CVVNJTkVTU19QVUJMSVNIX1NFUlZJQ0VfU0lNUExFX0RFU0MiKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJwdWJsaXNoU2VydmljZVNpbXBsZUF1dGhlbnRpY2F0aW9uIik7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2F1dGhlbnRpY2F0aW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgbm93cmFwIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0zMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgPGxhYmVsIGZvcj0iaW5wdXRfYnVzaW5lc3NfcHVibGlzaF9zZXJ2aWNlX3NpbXBsZV93c2RsX3VybCI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1dTRExfVVJMIiklPjwvbGFiZWw+Ci08JQotICAgaWYgKCFmb3JtVG9vbFBJLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX1dTRExfVVJMKSkKLSAgIHsKLSU+Ci0gICAgICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotPCUKLSAgIH0KLSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICAgIDx0ZCBub3dyYXAgaGVpZ2h0PTMwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5XU0RMQnJvd3NlcigncHVibGlzaFNlcnZpY2VTaW1wbGUnLDwlPUFjdGlvbklucHV0cy5XU0RMX1RZUEVfU0VSVklDRSU+KSI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xJTktfQlJPV1NFIiklPjwvYT4KLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY29sc3Bhbj0zPgotICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iaW5wdXRfYnVzaW5lc3NfcHVibGlzaF9zZXJ2aWNlX3NpbXBsZV93c2RsX3VybCIgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dTRExfVVJMJT4iIGNsYXNzPSJ0ZXh0ZW50ZXIiPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNvbHNwYW49MyBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICA8bGFiZWwgZm9yPSJpbnB1dF9idXNpbmVzc19wdWJsaXNoX3NlcnZpY2Vfc2ltcGxlX25hbWUiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05BTUUiKSU+PC9sYWJlbD4KLTwlCi0gICBpZiAoIWZvcm1Ub29sUEkuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfTkFNRSkpCi0gICB7Ci0lPgotICAgICAgICAgIDwlPUhUTUxVdGlscy5yZWRBc3RlcmlzaygpJT4KLTwlCi0gICB9Ci0lPgotICAgICAgICA8L3RkPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY29sc3Bhbj0zPiA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImlucHV0X2J1c2luZXNzX3B1Ymxpc2hfc2VydmljZV9zaW1wbGVfbmFtZSIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9OQU1FJT4iIGNsYXNzPSJ0ZXh0ZW50ZXIiPiA8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNvbHNwYW49MyBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICA8bGFiZWwgZm9yPSJpbnB1dF9idXNpbmVzc19wdWJsaXNoX3NlcnZpY2Vfc2ltcGxlX2Rlc2MiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0RFU0NSSVBUSU9OIiklPjwvbGFiZWw+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY29sc3Bhbj0zPiA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImlucHV0X2J1c2luZXNzX3B1Ymxpc2hfc2VydmljZV9zaW1wbGVfZGVzYyIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9ERVNDUklQVElPTiU+IiBjbGFzcz0idGV4dGVudGVyIj4gPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvc2ltcGxlQ29tbW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgPC9mb3JtPgotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvQnVzaW5lc3NEZXRhaWxzRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvQnVzaW5lc3NEZXRhaWxzRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzMjcwNzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL0J1c2luZXNzRGV0YWlsc0Zvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjkzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai5kYXRhdHlwZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudWRkaTRqLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgVG9vbE1hbmFnZXIgY3VycmVudFRvb2xNYW5hZ2VyID0gc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpOwotICAgRm9ybVRvb2wgZm9ybVRvb2wgPSAoRm9ybVRvb2wpKGN1cnJlbnRUb29sTWFuYWdlci5nZXRTZWxlY3RlZFRvb2woKSk7Ci0gICBVRERJTWFpbk5vZGUgdWRkaU1haW5Ob2RlID0gKFVERElNYWluTm9kZSluYXZpZ2F0b3JNYW5hZ2VyLmdldFJvb3ROb2RlKCk7Ci0gICBSZWdpc3RyeU5vZGUgcmVnTm9kZSA9IHVkZGlNYWluTm9kZS5nZXRSZWdpc3RyeU5vZGUoc2VsZWN0ZWROb2RlKTsKLSAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0lPgotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fVElUTEVfQlVTSU5FU1NfREVUQUlMUyIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL3Jlc3VtZXByb3h5bG9hZHBhZ2UuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9mb3Jtc3VibWl0LmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL2RldGFpbHN0YWJsZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGZ1bmN0aW9uIHNldERlZmF1bHRzKCkKLSAgewotICAgIHZhciBidXNpbmVzc0RldGFpbHNEaXNjb3ZlcnlVUkxzVGFibGUgPSBnZXRUYWJsZSgiYnVzaW5lc3NEZXRhaWxzRGlzY292ZXJ5VVJMcyIpOwotICAgIHZhciBidXNpbmVzc0RldGFpbHNOYW1lc1RhYmxlID0gZ2V0VGFibGUoImJ1c2luZXNzRGV0YWlsc05hbWVzIik7Ci0gICAgdmFyIGJ1c2luZXNzRGV0YWlsc0Rlc2NyaXB0aW9uc1RhYmxlID0gZ2V0VGFibGUoImJ1c2luZXNzRGV0YWlsc0Rlc2NyaXB0aW9ucyIpOwotICAgIHZhciBidXNpbmVzc0RldGFpbHNJZGVudGlmaWVyc1RhYmxlID0gZ2V0VGFibGUoImJ1c2luZXNzRGV0YWlsc0lkZW50aWZpZXJzIik7Ci08JQotICAgVmVjdG9yIGRpc2NvdmVyeVVSTFZlY3RvciA9IChWZWN0b3IpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ESVNDT1ZFUllVUkxTKTsKLSAgIGlmIChkaXNjb3ZlcnlVUkxWZWN0b3IgIT0gbnVsbCkKLSAgIHsKLSAgICAgZm9yIChpbnQgaT0wO2k8ZGlzY292ZXJ5VVJMVmVjdG9yLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClkaXNjb3ZlcnlVUkxWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgIERpc2NvdmVyeVVSTCBkaXNjb3ZlcnlVUkwgPSAoRGlzY292ZXJ5VVJMKWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgIGJvb2xlYW4gaXNFcnJvciA9ICFmb3JtVG9vbC5pc1Jvd0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ESVNDT1ZFUllVUkxTLGkpOwotICAgICAgIGJvb2xlYW4gaXNOZXdJdGVtID0gKGxpc3RFbGVtZW50LmdldFRhcmdldFZpZXdJZCgpID09IEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCk7Ci0lPgotICAgIGFkZERldGFpbHNEaXNjb3ZlcnlVUkxSb3coImJ1c2luZXNzRGV0YWlsc0Rpc2NvdmVyeVVSTHMiLDwlPWlzRXJyb3J8fGlzTmV3SXRlbSU+KTsKLSAgICBzZXREZXRhaWxzRGlzY292ZXJ5VVJMUm93KCJidXNpbmVzc0RldGFpbHNEaXNjb3ZlcnlVUkxzIiw8JT1pJT4sPCU9bGlzdEVsZW1lbnQuZ2V0Vmlld0lkKCklPiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGRpc2NvdmVyeVVSTC5nZXRUZXh0KCkpJT4iKTsKLTwlCi0gICAgICAgaWYgKGlzRXJyb3IpCi0gICAgICAgewotJT4KLSAgICBoaWdobGlnaHRFcnJhbnRSb3coYnVzaW5lc3NEZXRhaWxzRGlzY292ZXJ5VVJMc1RhYmxlLnJvd3NbPCU9aSU+K251bWJlck9mSGVhZGVyUm93c10sImVycmFudFJvdyIpOwotPCUKLSAgICAgICB9Ci0gICAgIH0KLSAgIH0KLQotICAgVmVjdG9yIG5hbWVJbmRleFZlY3RvciA9IChWZWN0b3IpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19OQU1FUyk7Ci0gICBpZiAobmFtZUluZGV4VmVjdG9yICE9IG51bGwpCi0gICB7Ci0gICAgIGZvciAoaW50IGk9MDtpPG5hbWVJbmRleFZlY3Rvci5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpbmFtZUluZGV4VmVjdG9yLmVsZW1lbnRBdChpKTsKLSAgICAgICBOYW1lIG5hbWUgPSAoTmFtZSlsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICBib29sZWFuIGlzRXJyb3IgPSAhZm9ybVRvb2wuaXNSb3dJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTkFNRVMsaSk7Ci0gICAgICAgYm9vbGVhbiBpc05ld0l0ZW0gPSAobGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Vmlld0lkKCkgPT0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUKTsKLSU+Ci0gICAgYWRkRGV0YWlsc0xhbmd1YWdlSW5wdXRSb3coImJ1c2luZXNzRGV0YWlsc05hbWVzIiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfTkFNRV9URVhUX1ZBTFVFIikpJT4iLDwlPWlzRXJyb3J8fGlzTmV3SXRlbSU+KTsKLSAgICBzZXREZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvdygiYnVzaW5lc3NEZXRhaWxzTmFtZXMiLDwlPWklPiw8JT1saXN0RWxlbWVudC5nZXRWaWV3SWQoKSU+LCI8JT1uYW1lLmdldExhbmcoKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKG5hbWUuZ2V0VGV4dCgpKSU+Iik7Ci08JQotICAgICAgIGlmIChpc0Vycm9yKQotICAgICAgIHsKLSU+Ci0gICAgaGlnaGxpZ2h0RXJyYW50Um93KGJ1c2luZXNzRGV0YWlsc05hbWVzVGFibGUucm93c1s8JT1pJT4rbnVtYmVyT2ZIZWFkZXJSb3dzXSwiZXJyYW50Um93Iik7Ci08JQotICAgICAgIH0KLSAgICAgfQotICAgfQotCi0gICBWZWN0b3IgZGVzY3JpcHRpb25JbmRleFZlY3RvciA9IChWZWN0b3IpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ERVNDUklQVElPTlMpOwotICAgaWYgKGRlc2NyaXB0aW9uSW5kZXhWZWN0b3IgIT0gbnVsbCkKLSAgIHsKLSAgICAgZm9yIChpbnQgaT0wO2k8ZGVzY3JpcHRpb25JbmRleFZlY3Rvci5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpZGVzY3JpcHRpb25JbmRleFZlY3Rvci5lbGVtZW50QXQoaSk7Ci0gICAgICAgRGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSAoRGVzY3JpcHRpb24pbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgYm9vbGVhbiBpc0Vycm9yID0gIWZvcm1Ub29sLmlzUm93SW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RFU0NSSVBUSU9OUyxpKTsKLSAgICAgICBib29sZWFuIGlzTmV3SXRlbSA9IChsaXN0RWxlbWVudC5nZXRUYXJnZXRWaWV3SWQoKSA9PSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpOwotJT4KLSAgICBhZGREZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvdygiYnVzaW5lc3NEZXRhaWxzRGVzY3JpcHRpb25zIiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfREVTQ1JJUFRJT05fVEVYVF9WQUxVRSIpKSU+Iiw8JT1pc0Vycm9yfHxpc05ld0l0ZW0lPik7Ci0gICAgc2V0RGV0YWlsc0xhbmd1YWdlSW5wdXRSb3coImJ1c2luZXNzRGV0YWlsc0Rlc2NyaXB0aW9ucyIsPCU9aSU+LDwlPWxpc3RFbGVtZW50LmdldFZpZXdJZCgpJT4sIjwlPWRlc2NyaXB0aW9uLmdldExhbmcoKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGRlc2NyaXB0aW9uLmdldFRleHQoKSklPiIpOwotPCUKLSAgICAgICBpZiAoaXNFcnJvcikKLSAgICAgICB7Ci0lPgotICAgIGhpZ2hsaWdodEVycmFudFJvdyhidXNpbmVzc0RldGFpbHNEZXNjcmlwdGlvbnNUYWJsZS5yb3dzWzwlPWklPitudW1iZXJPZkhlYWRlclJvd3NdLCJlcnJhbnRSb3ciKTsKLTwlCi0gICAgICAgfQotICAgICB9Ci0gICB9Ci0KLSAgIFZlY3RvciBpZFZlY3RvciA9IChWZWN0b3IpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19JREVOVElGSUVSUyk7Ci0gICBpZiAoaWRWZWN0b3IgIT0gbnVsbCkKLSAgIHsKLSAgICAgZm9yIChpbnQgaT0wO2k8aWRWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KWlkVmVjdG9yLmVsZW1lbnRBdChpKTsKLSAgICAgICBLZXllZFJlZmVyZW5jZSBrciA9IChLZXllZFJlZmVyZW5jZSlsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICBib29sZWFuIGlzRXJyb3IgPSAhZm9ybVRvb2wuaXNSb3dJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfSURFTlRJRklFUlMsaSk7Ci0gICAgICAgYm9vbGVhbiBpc05ld0l0ZW0gPSAobGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Vmlld0lkKCkgPT0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUKTsKLSU+Ci0gICAgYWRkRGV0YWlsc0lkZW50aWZpZXJSb3coImJ1c2luZXNzRGV0YWlsc0lkZW50aWZpZXJzIiw8JT1pc0Vycm9yfHxpc05ld0l0ZW0lPik7Ci0gICAgc2V0RGV0YWlsc0lkZW50aWZpZXJSb3coImJ1c2luZXNzRGV0YWlsc0lkZW50aWZpZXJzIiw8JT1pJT4sPCU9bGlzdEVsZW1lbnQuZ2V0Vmlld0lkKCklPiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldFRNb2RlbEtleSgpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldEtleU5hbWUoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRLZXlWYWx1ZSgpKSU+Iik7Ci08JQotICAgICAgIGlmIChpc0Vycm9yKQotICAgICAgIHsKLSU+Ci0gICAgaGlnaGxpZ2h0RXJyYW50Um93KGJ1c2luZXNzRGV0YWlsc0lkZW50aWZpZXJzVGFibGUucm93c1s8JT1pJT4rbnVtYmVyT2ZIZWFkZXJSb3dzXSwiZXJyYW50Um93Iik7Ci08JSAgICAgICAKLSAgICAgICB9Ci0gICAgIH0KLSAgIH0KLQotICAgVmVjdG9yIGNhdFZlY3RvciA9IChWZWN0b3IpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19DQVRFR09SSUVTKTsKLSAgIGlmIChjYXRWZWN0b3IgIT0gbnVsbCkKLSAgIHsKLSAgICAgZm9yIChpbnQgaT0wO2k8Y2F0VmVjdG9yLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudCljYXRWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gKEtleWVkUmVmZXJlbmNlKWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgIGJvb2xlYW4gaXNFcnJvciA9ICFmb3JtVG9vbC5pc1Jvd0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19DQVRFR09SSUVTLGkpOwotICAgICAgIGJvb2xlYW4gaXNOZXdJdGVtID0gKGxpc3RFbGVtZW50LmdldFRhcmdldFZpZXdJZCgpID09IEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCk7Ci0lPgotICAgIGFkZERldGFpbHNDYXRlZ29yeVJvdygiYnVzaW5lc3NEZXRhaWxzQ2F0ZWdvcmllcyIsPCU9aXNFcnJvcnx8aXNOZXdJdGVtJT4pOwotICAgIHNldERldGFpbHNDYXRlZ29yeVJvdygiYnVzaW5lc3NEZXRhaWxzQ2F0ZWdvcmllcyIsPCU9aSU+LDwlPWxpc3RFbGVtZW50LmdldFZpZXdJZCgpJT4sIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRUTW9kZWxLZXkoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRLZXlOYW1lKCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0S2V5VmFsdWUoKSklPiIpOwotPCUKLSAgICAgICBpZiAoaXNFcnJvcikKLSAgICAgICB7Ci0lPgotICAgIGhpZ2hsaWdodEVycmFudFJvdyhidXNpbmVzc0RldGFpbHNDYXRlZ29yaWVzVGFibGUucm93c1s8JT1pJT4rbnVtYmVyT2ZIZWFkZXJSb3dzXSwiZXJyYW50Um93Iik7Ci08JQotICAgICAgIH0gICAgICAgCi0gICAgIH0KLSAgIH0KLQotICAgLy8gQXV0aGVudGljYXRpb24uCi0gICBTdHJpbmcgcHVibGlzaFVSTCA9IChTdHJpbmcpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICBTdHJpbmcgdXNlcklkID0gKFN0cmluZylmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICBTdHJpbmcgcGFzc3dvcmQgPSAoU3RyaW5nKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotJT4KLSAgICBkb2N1bWVudC5mb3Jtc1swXS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHB1Ymxpc2hVUkwpJT4iOwotICAgIGRvY3VtZW50LmZvcm1zWzBdLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVzZXJJZCklPiI7Ci0gICAgZG9jdW1lbnQuZm9ybXNbMF0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZShwYXNzd29yZCklPiI7Ci0gICAgaWYgKDwlPSFyZWdFbGVtZW50LmlzTG9nZ2VkSW4oKSU+KQotICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJ1c2luZXNzRGV0YWlsc0F1dGhlbnRpY2F0aW9uIikuc3R5bGUuZGlzcGxheSA9ICIiOwotCi0gICAgc2hvd01haW5Gb3JtKCk7Ci0gIH0KLQotICBmdW5jdGlvbiBzaG93TWFpbkZvcm0oKQotICB7Ci0gICAgY2xvc2VBbGxVZGRpQ2hpbGRXaW5kb3dzKCk7Ci0gICAgdmFyIGxvYWRTY3JlZW5UYWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2FkU2NyZWVuIik7Ci0gICAgaWYgKGxvYWRTY3JlZW5UYWJsZS5yb3dzLmxlbmd0aCA+IDApCi0gICAgICBsb2FkU2NyZWVuVGFibGUuZGVsZXRlUm93KDApOwotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluU2NyZWVuIikuc3R5bGUuZGlzcGxheSA9ICIiOwotICB9Ci0KLSAgZnVuY3Rpb24gcHJvY2Vzc0Zvcm0oZm9ybSkKLSAgewotICAgIGlmIChoYW5kbGVTdWJtaXQoZm9ybSkpCi0gICAgewotICAgICAgcHJvY2Vzc0RldGFpbHNEaXNjb3ZlcnlVUkxUYWJsZSgiYnVzaW5lc3NEZXRhaWxzRGlzY292ZXJ5VVJMcyIsIjwlPVVERElBY3Rpb25JbnB1dHMuRElTQ09WRVJZVVJMX01PRElGSUVEJT4iLCI8JT1VRERJQWN0aW9uSW5wdXRzLkRJU0NPVkVSWVVSTF9WSUVXSUQlPiIsIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfRElTQ09WRVJZVVJMJT4iLGZvcm0pOwotICAgICAgcHJvY2Vzc0RldGFpbHNMYW5ndWFnZUlucHV0VGFibGUoImJ1c2luZXNzRGV0YWlsc05hbWVzIiwiPCU9VURESUFjdGlvbklucHV0cy5OQU1FX01PRElGSUVEJT4iLCI8JT1VRERJQWN0aW9uSW5wdXRzLk5BTUVfVklFV0lEJT4iLCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX05BTUVfTEFOR1VBR0UlPiIsIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTkFNRSU+Iixmb3JtKTsKLSAgICAgIHByb2Nlc3NEZXRhaWxzTGFuZ3VhZ2VJbnB1dFRhYmxlKCJidXNpbmVzc0RldGFpbHNEZXNjcmlwdGlvbnMiLCI8JT1VRERJQWN0aW9uSW5wdXRzLkRFU0NSSVBUSU9OX01PRElGSUVEJT4iLCI8JT1VRERJQWN0aW9uSW5wdXRzLkRFU0NSSVBUSU9OX1ZJRVdJRCU+IiwiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9ERVNDUklQVElPTl9MQU5HVUFHRSU+IiwiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9ERVNDUklQVElPTiU+Iixmb3JtKTsKLSAgICAgIHByb2Nlc3NEZXRhaWxzSWRlbnRpZmllclRhYmxlKCJidXNpbmVzc0RldGFpbHNJZGVudGlmaWVycyIsZm9ybSk7Ci0gICAgICBwcm9jZXNzRGV0YWlsc0NhdGVnb3J5VGFibGUoImJ1c2luZXNzRGV0YWlsc0NhdGVnb3JpZXMiLGZvcm0pOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci0gIDxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICAgIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnMvVXBkYXRlQnVzaW5lc3NBY3Rpb25KU1AuanNwIikpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG9uU3VibWl0PSJyZXR1cm4gcHJvY2Vzc0Zvcm0odGhpcykiPgotICAgICAgPHRhYmxlIGlkPSJsb2FkU2NyZWVuIj4KLSAgICAgICAgPHRyPgotICAgICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICAgIDwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiTVNHX0xPQURfSU5fUFJPR1JFU1MiKSU+Ci0gICAgICAgICAgPC90ZD4KLSAgICAgICAgPC90cj4KLSAgICAgIDwvdGFibGU+Ci0gICAgICA8ZGl2IGlkPSJtYWluU2NyZWVuIiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci08JQotICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gImltYWdlcy9kZXRhaWxzX2hpZ2hsaWdodGVkLmdpZiI7Ci0gICBTdHJpbmcgdGl0bGUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0JVU0lORVNTX0RFVEFJTFMiKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9CVVNJTkVTU19LRVklPiIgdmFsdWU9IjwlPWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9CVVNJTkVTU19LRVkpJT4iPgotICAgICAgICA8dGFibGU+Ci0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9ERVRBSUxTX0VESVRBQkxFIixzZWxlY3RlZE5vZGUuZ2V0Tm9kZU5hbWUoKSklPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICA8L3RyPgotICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZCBoZWlnaHQ9MjA+Jm5ic3A7PC90ZD4KLSAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgIDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0JVU0lORVNTX0tFWSIpJT4KLSAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgICAgICA8JT1mb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfQlVTSU5FU1NfS0VZKSU+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJidXNpbmVzc0RldGFpbHNOYW1lcyIpOwotICAgU3RyaW5nW10gbmFtZVNwZWNpZmljSW5mbyA9IHsiRk9STV9MQUJFTF9OQU1FUyIsIkZPUk1fTEFCRUxfTkFNRSIsU3RyaW5nLnZhbHVlT2YoIWZvcm1Ub29sLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX05BTUVTKSl9OwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKG5hbWVTcGVjaWZpY0luZm8pOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9kZXRhaWxzTGFuZ3VhZ2VJbnB1dF90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJidXNpbmVzc0RldGFpbHNEZXNjcmlwdGlvbnMiKTsKLSAgIFN0cmluZ1tdIGRlc2NTcGVjaWZpY0luZm8gPSB7IkZPUk1fTEFCRUxfREVTQ1JJUFRJT05TIiwiRk9STV9MQUJFTF9ERVNDUklQVElPTiIsU3RyaW5nLnZhbHVlT2YoIWZvcm1Ub29sLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RFU0NSSVBUSU9OUykpfTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhkZXNjU3BlY2lmaWNJbmZvKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvZGV0YWlsc0xhbmd1YWdlSW5wdXRfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgiYnVzaW5lc3NEZXRhaWxzSWRlbnRpZmllcnMiKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvZGV0YWlsc0lkZW50aWZpZXJzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoImJ1c2luZXNzRGV0YWlsc0NhdGVnb3JpZXMiKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvZGV0YWlsc0NhdGVnb3JpZXNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgiYnVzaW5lc3NEZXRhaWxzRGlzY292ZXJ5VVJMcyIpOwotICAgQm9vbGVhbiBkaXNjb3ZlcnlVUkxTcGVjaWZpY0luZm8gPSBuZXcgQm9vbGVhbighZm9ybVRvb2wuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfRElTQ09WRVJZVVJMUykpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKGRpc2NvdmVyeVVSTFNwZWNpZmljSW5mbyk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2RldGFpbHNEaXNjb3ZlcnlVUkxzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoImJ1c2luZXNzRGV0YWlsc0F1dGhlbnRpY2F0aW9uIik7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2F1dGhlbnRpY2F0aW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6dXNlQmVhbiBpZD0iY3VycmVudFRvb2xNYW5hZ2VySGFzaCIgY2xhc3M9ImphdmEudXRpbC5IYXNodGFibGUiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gIGN1cnJlbnRUb29sTWFuYWdlckhhc2gucHV0KEFjdGlvbklucHV0cy5DVVJSRU5UX1RPT0xfTUFOQUdFUixjdXJyZW50VG9vbE1hbmFnZXIpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL290aGVyQWN0aW9ucy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL3NpbXBsZUNvbW1vbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgICA8L2Rpdj4KLSAgICA8L2Zvcm0+Ci0gIDwvZGl2PgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHNldERlZmF1bHRzKCk7Ci0gIHJlc3VtZVByb3h5TG9hZFBhZ2UoKTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL0dldEZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL0dldEZvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzcyZjYwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9HZXRGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDIxNyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai5kYXRhdHlwZS5idXNpbmVzcy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudWRkaTRqLmRhdGF0eXBlLnNlcnZpY2UuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ic3ViUXVlcnlUcmFuc2ZlclRhcmdldEhvbGRlciIgY2xhc3M9ImphdmEudXRpbC5WZWN0b3IiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gICBzdWJRdWVyeVRyYW5zZmVyVGFyZ2V0SG9sZGVyLnJlbW92ZUFsbEVsZW1lbnRzKCk7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICBGb3JtVG9vbCBmb3JtVG9vbCA9IChGb3JtVG9vbCkoc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpKTsKLSAgIFN0cmluZyBzdWJRdWVyeUtleSA9IChTdHJpbmcpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVkpOwotICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkgPSAoKE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlKWZvcm1Ub29sKS5nZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXkpOwotICAgVHJlZUVsZW1lbnQgdHJlZUVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgIFN0cmluZyBwYXJlbnRRdWVyeUtleTsKLSAgIGludCBsYXN0U2VwYXJhdG9yUG9zID0gc3ViUXVlcnlLZXkubGFzdEluZGV4T2YoJzonKTsKLSAgIGlmIChsYXN0U2VwYXJhdG9yUG9zID09IC0xKQotICAgICBwYXJlbnRRdWVyeUtleSA9ICIiOwotICAgZWxzZQotICAgICBwYXJlbnRRdWVyeUtleSA9IHN1YlF1ZXJ5S2V5LnN1YnN0cmluZygwLGxhc3RTZXBhcmF0b3JQb3MpOwotICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIHBhcmVudEZvcm1Ub29sUEkgPSAoKE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlKWZvcm1Ub29sKS5nZXRGb3JtVG9vbFByb3BlcnRpZXMocGFyZW50UXVlcnlLZXkpOwotICAgT2JqZWN0IHF1ZXJ5SXRlbVByb3BlcnR5ID0gcGFyZW50Rm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU0pOwotICAgT2JqZWN0IHF1ZXJ5U3R5bGVCdXMgPSBwYXJlbnRGb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQlVTSU5FU1NFUyk7Ci0gICBPYmplY3QgcXVlcnlTdHlsZVNlciA9IHBhcmVudEZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFUyk7Ci0gICBPYmplY3QgcXVlcnlTdHlsZVNlckludCA9IHBhcmVudEZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFX0lOVEVSRkFDRVMpOwotICAgSGFzaHRhYmxlIHBhcmVudFF1ZXJ5RGF0YSA9IG5ldyBIYXNodGFibGUoKTsKLSAgIGlmIChxdWVyeUl0ZW1Qcm9wZXJ0eSAhPSBudWxsKQotICAgICBwYXJlbnRRdWVyeURhdGEucHV0KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTSwgcXVlcnlJdGVtUHJvcGVydHkpOwotICAgaWYgKHF1ZXJ5U3R5bGVCdXMgIT0gbnVsbCkKLSAgICAgcGFyZW50UXVlcnlEYXRhLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0JVU0lORVNTRVMsIHF1ZXJ5U3R5bGVCdXMpOwotICAgaWYgKHF1ZXJ5U3R5bGVTZXIgIT0gbnVsbCkKLSAgICAgcGFyZW50UXVlcnlEYXRhLnB1dChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VTLCBxdWVyeVN0eWxlU2VyKTsKLSAgIGlmIChxdWVyeVN0eWxlU2VySW50ICE9IG51bGwpCi0gICAgIHBhcmVudFF1ZXJ5RGF0YS5wdXQoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFX0lOVEVSRkFDRVMsIHF1ZXJ5U3R5bGVTZXJJbnQpOwotICAgU3ViUXVlcnlUcmFuc2ZlclRhcmdldCBzdWJRdWVyeVRyYW5zZmVyVGFyZ2V0ID0gbmV3IFN1YlF1ZXJ5VHJhbnNmZXJUYXJnZXQoc2VsZWN0ZWROb2RlLHN1YlF1ZXJ5S2V5LHBhcmVudFF1ZXJ5RGF0YSk7Ci0gICB0cmVlRWxlbWVudC5zZXRQcm9wZXJ0eUFzT2JqZWN0KFVERElNb2RlbENvbnN0YW50cy5TVUJRVUVSWV9UUkFOU0ZFUl9UQVJHRVQsc3ViUXVlcnlUcmFuc2ZlclRhcmdldCk7Ci0gICBzdWJRdWVyeVRyYW5zZmVyVGFyZ2V0SG9sZGVyLmFkZEVsZW1lbnQoc3ViUXVlcnlUcmFuc2ZlclRhcmdldCk7Ci0gICBib29sZWFuIGhhc1RhcmdldCA9IHRydWU7Ci0lPgotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fVElUTEVfR0VUX0ZPUk0iKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvcmVzdWx0cy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgZnVuY3Rpb24gc2V0RGVmYXVsdHMoKQotICB7Ci08JQotICAgaW50IHF1ZXJ5SXRlbSA9IEludGVnZXIucGFyc2VJbnQoKFN0cmluZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTSkpOwotICAgSGFzaHRhYmxlIGFsbFVuaXF1ZU5vZGVzID0gbmV3IEhhc2h0YWJsZSgpOwotICAgVmVjdG9yIGFsbE5vZGVzID0gbmV3IFZlY3RvcigpOwotICAgVURESU1haW5Ob2RlIHVkZGlNYWluTm9kZSA9IChVRERJTWFpbk5vZGUpbm9kZU1hbmFnZXIuZ2V0Um9vdE5vZGUoKTsKLSAgIFJlZ2lzdHJ5Tm9kZSByZWdOb2RlID0gdWRkaU1haW5Ob2RlLmdldFJlZ2lzdHJ5Tm9kZShzZWxlY3RlZE5vZGUpOwotICAgc3dpdGNoIChxdWVyeUl0ZW0pCi0gICB7Ci0gICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVM6Ci0gICAgICAgcmVnTm9kZS5nZXRBbGxCdXNpbmVzc05vZGVzKGFsbE5vZGVzKTsKLSAgICAgICBicmVhazsKLSAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVM6Ci0gICAgICAgcmVnTm9kZS5nZXRBbGxTZXJ2aWNlTm9kZXMoYWxsTm9kZXMpOwotICAgICAgIGJyZWFrOwotICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVM6Ci0gICAgIGRlZmF1bHQ6Ci0gICAgICAgcmVnTm9kZS5nZXRBbGxTZXJ2aWNlSW50ZXJmYWNlTm9kZXMoYWxsTm9kZXMpOwotICAgfQotICAgCi0gICBmb3IgKGludCBpPTA7aTxhbGxOb2Rlcy5zaXplKCk7aSsrKQotICAgewotICAgICBOb2RlIG5vZGUgPSAoTm9kZSlhbGxOb2Rlcy5lbGVtZW50QXQoaSk7Ci0gICAgIGFsbFVuaXF1ZU5vZGVzLnB1dChub2RlLmdldFRyZWVFbGVtZW50KCkuZ2V0S2V5KCksbm9kZSk7Ci0gICB9Ci0KLSAgIGlmICghYWxsVW5pcXVlTm9kZXMuaXNFbXB0eSgpKQotICAgewotICAgICBPYmplY3RbXSBpdGVtTm9kZXMgPSBhbGxVbmlxdWVOb2Rlcy52YWx1ZXMoKS50b0FycmF5KCk7Ci0gICAgIFF1aWNrU29ydC5zb3J0KGl0ZW1Ob2RlcywwLGl0ZW1Ob2Rlcy5sZW5ndGgtMSk7Ci0gICAgIGZvciAoaW50IGk9MDtpPGl0ZW1Ob2Rlcy5sZW5ndGg7aSsrKQotICAgICB7Ci0gICAgICAgTm9kZSBpdGVtTm9kZSA9IChOb2RlKWl0ZW1Ob2Rlc1tpXTsKLSAgICAgICBTdHJpbmcgdXJsID0gU2VsZWN0TmF2aWdhdG9yTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKGl0ZW1Ob2RlLmdldE5vZGVJZCgpLGZhbHNlKTsKLSAgICAgICBTdHJpbmcgbmFtZSA9IG51bGw7Ci0gICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gbnVsbDsKLSAgICAgICBpZiAoaXRlbU5vZGUgaW5zdGFuY2VvZiBCdXNpbmVzc05vZGUpCi0gICAgICAgewotICAgICAgICAgQnVzaW5lc3NFbGVtZW50IGJ1c0VsZW1lbnQgPSAoQnVzaW5lc3NFbGVtZW50KWl0ZW1Ob2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICAgICBCdXNpbmVzc0VudGl0eSBiZSA9IGJ1c0VsZW1lbnQuZ2V0QnVzaW5lc3NFbnRpdHkoKTsKLSAgICAgICAgIG5hbWUgPSBiZS5nZXREZWZhdWx0TmFtZVN0cmluZygpOwotICAgICAgICAgZGVzY3JpcHRpb24gPSBiZS5nZXREZWZhdWx0RGVzY3JpcHRpb25TdHJpbmcoKTsKLSAgICAgICB9Ci0gICAgICAgZWxzZSBpZiAoaXRlbU5vZGUgaW5zdGFuY2VvZiBTZXJ2aWNlTm9kZSkKLSAgICAgICB7Ci0gICAgICAgICBTZXJ2aWNlRWxlbWVudCBzZXJ2aWNlRWxlbWVudCA9IChTZXJ2aWNlRWxlbWVudClpdGVtTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgICAgQnVzaW5lc3NTZXJ2aWNlIGJzID0gc2VydmljZUVsZW1lbnQuZ2V0QnVzaW5lc3NTZXJ2aWNlKCk7Ci0gICAgICAgICBuYW1lID0gYnMuZ2V0RGVmYXVsdE5hbWVTdHJpbmcoKTsKLSAgICAgICAgIGRlc2NyaXB0aW9uID0gYnMuZ2V0RGVmYXVsdERlc2NyaXB0aW9uU3RyaW5nKCk7Ci0gICAgICAgfQotICAgICAgIGVsc2UgaWYgKGl0ZW1Ob2RlIGluc3RhbmNlb2YgU2VydmljZUludGVyZmFjZU5vZGUpCi0gICAgICAgewotICAgICAgICAgU2VydmljZUludGVyZmFjZUVsZW1lbnQgc2lFbGVtZW50ID0gKFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KWl0ZW1Ob2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgICAgICBUTW9kZWwgdE1vZGVsID0gc2lFbGVtZW50LmdldFRNb2RlbCgpOwotICAgICAgICAgbmFtZSA9IHRNb2RlbC5nZXROYW1lU3RyaW5nKCk7Ci0gICAgICAgICBkZXNjcmlwdGlvbiA9IHRNb2RlbC5nZXREZWZhdWx0RGVzY3JpcHRpb25TdHJpbmcoKTsKLSAgICAgICB9Ci0lPgotICAgIGFkZFJlc3VsdFJvdygiR2V0Iiw8JT1pdGVtTm9kZS5nZXROb2RlSWQoKSU+LCI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQodXJsKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShuYW1lKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGRlc2NyaXB0aW9uKSU+Iik7Ci08JQotICAgICB9Ci0lPgotICAgIHZhciBsb2FkU2NyZWVuVGFibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9hZFNjcmVlbiIpOwotICAgIGlmIChsb2FkU2NyZWVuVGFibGUucm93cy5sZW5ndGggPiAwKQotICAgICAgbG9hZFNjcmVlblRhYmxlLmRlbGV0ZVJvdygwKTsKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWFpblNjcmVlbiIpLnN0eWxlLmRpc3BsYXkgPSAiIjsKLTwlCi0gICB9Ci0gICBlbHNlCi0gICB7Ci0lPgotICAgIHBlcnNwZWN0aXZlV29ya0FyZWEubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFRyYW5zZmVyU3ViUXVlcnlSZXN1bHRzQWN0aW9uLmdldEFjdGlvbkxpbmtGb3JSZXR1cm4oKSkpJT4iOwotPCUKLSAgIH0KLSU+Ci0gIH0KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci08ZGl2IGlkPSJjb250ZW50Ij4KLSAgPHRhYmxlIGlkPSJsb2FkU2NyZWVuIj4KLSAgICA8dHI+Ci0gICAgICA8dGQ+Ci0gICAgICAgIDwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiTVNHX0xPQURfSU5fUFJPR1JFU1MiKSU+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci0gIDxkaXYgaWQ9Im1haW5TY3JlZW4iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLTwlCi0gICBTdHJpbmcgdGl0bGUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0dFVCIpOwotICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gInVkZGkvaW1hZ2VzL2ZpbmRfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9mb3Jtcy9yZXN1bHRzZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgPGZvcm0gdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIG1ldGhvZD0icG9zdCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgc3R5bGU9Im1hcmdpbi10b3A6MTBweDsiPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBTdHJpbmcgdGFibGVUaXRsZTsKLSAgIHN3aXRjaCAocXVlcnlJdGVtKQotICAgewotICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTOgotICAgICAgIHRhYmxlVGl0bGUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fQlVTSU5FU1NFUyIpOwotICAgICAgIGJyZWFrOwotICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUzoKLSAgICAgICB0YWJsZVRpdGxlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX1NFUlZJQ0VTIik7Ci0gICAgICAgYnJlYWs7Ci0gICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUzoKLSAgICAgZGVmYXVsdDoKLSAgICAgICB0YWJsZVRpdGxlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX1NFUlZJQ0VfSU5URVJGQUNFUyIpOwotICAgfQotICAgU3RyaW5nW10gb3RoZXJQcm9wZXJ0aWVzID0ge3RhYmxlVGl0bGUsIiJ9OwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoIkdldCIpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKG90aGVyUHJvcGVydGllcyk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL3Jlc3VsdHNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgICAgPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTIgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgPHRyPgotICAgICAgICAgIDx0ZCBoZWlnaHQ9NDAgYWxpZ249ImJvdHRvbSIgbm93cmFwPgotICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0JVVFRPTl9UUkFOU0ZFUiIpJT4iIG9uQ2xpY2s9InRyYW5zZmVyU2VsZWN0aW9ucygnR2V0Jyx0aGlzLmZvcm0pIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICA8L3RkPgotICAgICAgICAgIDx0ZCBoZWlnaHQ9NDAgYWxpZ249ImJvdHRvbSIgbm93cmFwPgotICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9CVVRUT05fUkVGUkVTSCIpJT4iIG9uQ2xpY2s9InJlZnJlc2hTZWxlY3Rpb25zKCdHZXQnLHRoaXMuZm9ybSkiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgPHRkIGhlaWdodD00MCBhbGlnbj0iYm90dG9tIiBub3dyYXA+Ci0gICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQlVUVE9OX0FERF9UT19GQVZPUklURVMiKSU+IiBvbkNsaWNrPSJhZGRTZWxlY3Rpb25zVG9GYXZvcml0ZXMoJ0dldCcsdGhpcy5mb3JtKSIgY2xhc3M9ImJ1dHRvbiI+Ci0gICAgICAgICAgPC90ZD4KLSAgICAgICAgICA8dGQgaGVpZ2h0PTQwIGFsaWduPSJib3R0b20iIG5vd3JhcD4KLSAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9CVVRUT05fQ0xFQVIiKSU+IiBvbkNsaWNrPSJjbGVhclNlbGVjdGlvbnMoJ0dldCcsdGhpcy5mb3JtKSIgY2xhc3M9ImJ1dHRvbiI+Ci0gICAgICAgICAgPC90ZD4KLSAgICAgICAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gICAgICAgIDwvdHI+Ci0gICAgICA8L3RhYmxlPgotICAgIDwvZm9ybT4KLSAgPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHNldERlZmF1bHRzKCk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9JdGVtc1N1bW1hcnlGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9JdGVtc1N1bW1hcnlGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDdiM2I2Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvSXRlbXNTdW1tYXJ5Rm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyMTAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGouZGF0YXR5cGUuYnVzaW5lc3MuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai5kYXRhdHlwZS5zZXJ2aWNlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIGludCBxdWVyeUl0ZW0gPSBJbnRlZ2VyLnBhcnNlSW50KHJlcXVlc3QuZ2V0UGFyYW1ldGVyKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTSkpOwotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci0gICBVRERJTWFpbk5vZGUgdWRkaU1haW5Ob2RlID0gKFVERElNYWluTm9kZSlub2RlTWFuYWdlci5nZXRSb290Tm9kZSgpOwotICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgIFRvb2wgc2VsZWN0ZWRUb29sID0gc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpOwotICAgUmVnaXN0cnlOb2RlIHJlZ05vZGUgPSB1ZGRpTWFpbk5vZGUuZ2V0UmVnaXN0cnlOb2RlKHNlbGVjdGVkTm9kZSk7Ci0gICBUcmVlRWxlbWVudCB0cmVlRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgVmVjdG9yIHN1bW1hcnlOb2RlcyA9IG5ldyBWZWN0b3IoKTsKLSAgIGlmICh0cmVlRWxlbWVudCBpbnN0YW5jZW9mIFF1ZXJ5UGFyZW50RWxlbWVudCkKLSAgICAgcmVnTm9kZS5nZXREaXNjb3ZlcmVkTm9kZXMoc3VtbWFyeU5vZGVzLHF1ZXJ5SXRlbSk7Ci0gICBlbHNlIGlmICh0cmVlRWxlbWVudCBpbnN0YW5jZW9mIFB1Ymxpc2hlZEl0ZW1zRWxlbWVudCkKLSAgIHsKLSAgICAgc3dpdGNoIChxdWVyeUl0ZW0pCi0gICAgIHsKLSAgICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTOgotICAgICAgICAgcmVnTm9kZS5nZXRQdWJsaXNoZWRCdXNpbmVzc05vZGVzKHN1bW1hcnlOb2Rlcyk7Ci0gICAgICAgICBicmVhazsKLSAgICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUzoKLSAgICAgICAgIHJlZ05vZGUuZ2V0UHVibGlzaGVkU2VydmljZU5vZGVzKHN1bW1hcnlOb2Rlcyk7Ci0gICAgICAgICBicmVhazsKLSAgICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVM6Ci0gICAgICAgZGVmYXVsdDoKLSAgICAgICAgIHJlZ05vZGUuZ2V0UHVibGlzaGVkU2VydmljZUludGVyZmFjZU5vZGVzKHN1bW1hcnlOb2Rlcyk7Ci0gICAgIH0KLSAgIH0KLSAgIGJvb2xlYW4gaGFzVGFyZ2V0ID0gZmFsc2U7Ci0lPgotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fVElUTEVfSVRFTVNfU1VNTUFSWSIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL3Jlc3VtZXByb3h5bG9hZHBhZ2UuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9wYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy9yZXN1bHRzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBmdW5jdGlvbiBzZXREZWZhdWx0cygpCi0gIHsKLTwlICAgCi0gICBIYXNodGFibGUgYWxsVW5pcXVlTm9kZXMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICBmb3IgKGludCBpPTA7aTxzdW1tYXJ5Tm9kZXMuc2l6ZSgpO2krKykKLSAgIHsKLSAgICAgTm9kZSBzdW1tYXJ5Tm9kZSA9IChOb2RlKXN1bW1hcnlOb2Rlcy5lbGVtZW50QXQoaSk7Ci0gICAgIGFsbFVuaXF1ZU5vZGVzLnB1dChzdW1tYXJ5Tm9kZS5nZXRUcmVlRWxlbWVudCgpLmdldEtleSgpLHN1bW1hcnlOb2RlKTsKLSAgIH0KLSAgIAotICAgaWYgKCFhbGxVbmlxdWVOb2Rlcy5pc0VtcHR5KCkpCi0gICB7Ci0gICAgIE9iamVjdFtdIGl0ZW1Ob2RlcyA9IGFsbFVuaXF1ZU5vZGVzLnZhbHVlcygpLnRvQXJyYXkoKTsKLSAgICAgUXVpY2tTb3J0LnNvcnQoaXRlbU5vZGVzLDAsaXRlbU5vZGVzLmxlbmd0aC0xKTsKLSAgICAgZm9yIChpbnQgaT0wO2k8aXRlbU5vZGVzLmxlbmd0aDtpKyspCi0gICAgIHsKLSAgICAgICBOb2RlIGl0ZW1Ob2RlID0gKE5vZGUpaXRlbU5vZGVzW2ldOwotICAgICAgIFN0cmluZyB1cmwgPSBTZWxlY3ROYXZpZ2F0b3JOb2RlQWN0aW9uLmdldEFjdGlvbkxpbmsoaXRlbU5vZGUuZ2V0Tm9kZUlkKCksZmFsc2UpOwotICAgICAgIFN0cmluZyBuYW1lID0gbnVsbDsKLSAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSBudWxsOwotICAgICAgIGlmIChpdGVtTm9kZSBpbnN0YW5jZW9mIFF1ZXJ5Tm9kZSkKLSAgICAgICB7Ci0gICAgICAgICBRdWVyeUVsZW1lbnQgcXVlcnlFbGVtZW50ID0gKFF1ZXJ5RWxlbWVudClpdGVtTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgICAgbmFtZSA9IHF1ZXJ5RWxlbWVudC5nZXROYW1lKCk7Ci0gICAgICAgICBTdHJpbmcgbnVtYmVyT2ZDaGlsZE5vZGVzU3RyaW5nID0gU3RyaW5nLnZhbHVlT2YoaXRlbU5vZGUuZ2V0Q2hpbGROb2RlcygpLnNpemUoKSk7Ci0gICAgICAgICBzd2l0Y2ggKHF1ZXJ5RWxlbWVudC5nZXRRdWVyeVR5cGUoKSkKLSAgICAgICAgIHsKLSAgICAgICAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUzoKLSAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19CVVNJTkVTU0VTX0ZPVU5EIixudW1iZXJPZkNoaWxkTm9kZXNTdHJpbmcpOwotICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUzoKLSAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfSU5GT19TRVJWSUNFU19GT1VORCIsbnVtYmVyT2ZDaGlsZE5vZGVzU3RyaW5nKTsKLSAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTOgotICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19JTkZPX1NFUlZJQ0VfSU5URVJGQUNFU19GT1VORCIsbnVtYmVyT2ZDaGlsZE5vZGVzU3RyaW5nKTsKLSAgICAgICAgIH0gICAgICAgICAgICAgCi0gICAgICAgfQotICAgICAgIGVsc2UgaWYgKGl0ZW1Ob2RlIGluc3RhbmNlb2YgQnVzaW5lc3NOb2RlKQotICAgICAgIHsKLSAgICAgICAgIEJ1c2luZXNzRWxlbWVudCBidXNFbGVtZW50ID0gKEJ1c2luZXNzRWxlbWVudClpdGVtTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgICAgQnVzaW5lc3NFbnRpdHkgYmUgPSBidXNFbGVtZW50LmdldEJ1c2luZXNzRW50aXR5KCk7Ci0gICAgICAgICBuYW1lID0gYmUuZ2V0RGVmYXVsdE5hbWVTdHJpbmcoKTsKLSAgICAgICAgIGRlc2NyaXB0aW9uID0gYmUuZ2V0RGVmYXVsdERlc2NyaXB0aW9uU3RyaW5nKCk7Ci0gICAgICAgfQotICAgICAgIGVsc2UgaWYgKGl0ZW1Ob2RlIGluc3RhbmNlb2YgU2VydmljZU5vZGUpCi0gICAgICAgewotICAgICAgICAgU2VydmljZUVsZW1lbnQgc2VydmljZUVsZW1lbnQgPSAoU2VydmljZUVsZW1lbnQpaXRlbU5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgICAgIEJ1c2luZXNzU2VydmljZSBicyA9IHNlcnZpY2VFbGVtZW50LmdldEJ1c2luZXNzU2VydmljZSgpOwotICAgICAgICAgbmFtZSA9IGJzLmdldERlZmF1bHROYW1lU3RyaW5nKCk7Ci0gICAgICAgICBkZXNjcmlwdGlvbiA9IGJzLmdldERlZmF1bHREZXNjcmlwdGlvblN0cmluZygpOwotICAgICAgIH0KLSAgICAgICBlbHNlIGlmIChpdGVtTm9kZSBpbnN0YW5jZW9mIFNlcnZpY2VJbnRlcmZhY2VOb2RlKQotICAgICAgIHsKLSAgICAgICAgIFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50IHNpRWxlbWVudCA9IChTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudClpdGVtTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgICAgVE1vZGVsIHRNb2RlbCA9IHNpRWxlbWVudC5nZXRUTW9kZWwoKTsKLSAgICAgICAgIG5hbWUgPSB0TW9kZWwuZ2V0TmFtZVN0cmluZygpOwotICAgICAgICAgZGVzY3JpcHRpb24gPSB0TW9kZWwuZ2V0RGVmYXVsdERlc2NyaXB0aW9uU3RyaW5nKCk7Ci0gICAgICAgfQotJT4KLSAgICBhZGRSZXN1bHRSb3coIlN1bW1hcnkiLDwlPWl0ZW1Ob2RlLmdldE5vZGVJZCgpJT4sIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCh1cmwpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKG5hbWUpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoZGVzY3JpcHRpb24pJT4iKTsKLTwlCi0gICAgIH0KLSAgIH0KLSU+Ci0gICAgdmFyIGxvYWRTY3JlZW5UYWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2FkU2NyZWVuIik7Ci0gICAgaWYgKGxvYWRTY3JlZW5UYWJsZS5yb3dzLmxlbmd0aCA+IDApCi0gICAgICBsb2FkU2NyZWVuVGFibGUuZGVsZXRlUm93KDApOwotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluU2NyZWVuIikuc3R5bGUuZGlzcGxheSA9ICIiOwotICB9Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotPGRpdiBpZD0iY29udGVudCI+Ci0gIDx0YWJsZSBpZD0ibG9hZFNjcmVlbiI+Ci0gICAgPHRyPgotICAgICAgPHRkPgotICAgICAgICA8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIk1TR19MT0FEX0lOX1BST0dSRVNTIiklPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotICA8ZGl2IGlkPSJtYWluU2NyZWVuIiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci08JQotICAgU3RyaW5nIHRpdGxlID0gc2VsZWN0ZWRUb29sLmdldEFsdFRleHQoKTsKLSAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9IHNlbGVjdGVkVG9vbC5nZXRIaWdobGlnaHRlZEltYWdlTGluaygpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii91ZGRpL2Zvcm1zL3Jlc3VsdHNmb3JtaGVhZGVyLmluYyIgJT4KLSAgICA8Zm9ybSB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgbWV0aG9kPSJwb3N0IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBzdHlsZT0ibWFyZ2luLXRvcDoxMHB4OyI+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIFN0cmluZyB0YWJsZVRpdGxlOwotICAgc3dpdGNoIChxdWVyeUl0ZW0pCi0gICB7Ci0gICAgIGNhc2UgVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1FVRVJJRVM6Ci0gICAgICAgdGFibGVUaXRsZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1FVRVJJRVMiKTsKLSAgICAgICBicmVhazsKLSAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUzoKLSAgICAgICB0YWJsZVRpdGxlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0JVU0lORVNTRVMiKTsKLSAgICAgICBicmVhazsKLSAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVM6Ci0gICAgICAgdGFibGVUaXRsZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9TRVJWSUNFUyIpOwotICAgICAgIGJyZWFrOwotICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVM6Ci0gICAgIGRlZmF1bHQ6Ci0gICAgICAgdGFibGVUaXRsZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9TRVJWSUNFX0lOVEVSRkFDRVMiKTsKLSAgIH0KLSAgIFN0cmluZ1tdIG90aGVyUHJvcGVydGllcyA9IHt0YWJsZVRpdGxlLCIifTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJTdW1tYXJ5Iik7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMob3RoZXJQcm9wZXJ0aWVzKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvcmVzdWx0c190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgICA8dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MiBjZWxsc3BhY2luZz0wPgotICAgICAgICA8dHI+Ci0gICAgICAgICAgPHRkIGhlaWdodD00MCBhbGlnbj0iYm90dG9tIiBub3dyYXA+Ci0gICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0JVVFRPTl9SRUZSRVNIIiklPiIgb25DbGljaz0icmVmcmVzaFNlbGVjdGlvbnMoJ1N1bW1hcnknLHRoaXMuZm9ybSkiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgIDwvdGQ+Ci08JQotICAgaWYgKHF1ZXJ5SXRlbSAhPSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fUVVFUklFUykKLSAgIHsKLSU+ICAgICAgICAgICAgIAotICAgICAgICAgIDx0ZCBoZWlnaHQ9NDAgYWxpZ249ImJvdHRvbSIgbm93cmFwPgotICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0JVVFRPTl9BRERfVE9fRkFWT1JJVEVTIiklPiIgb25DbGljaz0iYWRkU2VsZWN0aW9uc1RvRmF2b3JpdGVzKCdTdW1tYXJ5Jyx0aGlzLmZvcm0pIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICA8L3RkPgotPCUKLSAgIH0KLSU+ICAgICAgICAgICAgIAotICAgICAgICAgIDx0ZCBoZWlnaHQ9NDAgYWxpZ249ImJvdHRvbSIgbm93cmFwPgotICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0JVVFRPTl9DTEVBUiIpJT4iIG9uQ2xpY2s9ImNsZWFyU2VsZWN0aW9ucygnU3VtbWFyeScsdGhpcy5mb3JtKSIgY2xhc3M9ImJ1dHRvbiI+Ci0gICAgICAgICAgPC90ZD4KLSAgICAgICAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gICAgICAgIDwvdHI+Ci0gICAgICA8L3RhYmxlPgotICAgIDwvZm9ybT4KLSAgPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHNldERlZmF1bHRzKCk7Ci0gIHJlc3VtZVByb3h5TG9hZFBhZ2UoKTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL0xvZ2luVWRkaUZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL0xvZ2luVWRkaUZvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMWU5Y2RmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9Mb2dpblVkZGlGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDI3ICAgMTM2NDQ5IGJydW5zc2VuQHVzLmlibS5jb20gLSBWaW5jZSBCcnVuc3NlbiAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGouZGF0YXR5cGUuYnVzaW5lc3MuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudWRkaTRqLmRhdGF0eXBlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGoudXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIC8vIHNlbGVjdGVkTm9kZSBtdXN0IGJlIGEgcmVnaXN0cnkgbm9kZS4KLSAgIE5vZGUgcmVnTm9kZSA9IG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICByZWdOb2RlLmdldFRvb2xNYW5hZ2VyKCkuc2V0U2VsZWN0ZWRUb29sSWQoMSk7Ci0gICBMaXN0IHRvb2xzID0gcmVnTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRUb29scygpOwotICAgSXRlcmF0b3IgaXRlciA9IHRvb2xzLml0ZXJhdG9yKCk7Ci0gICBUb29sIHQgPSBudWxsOwotICAgRm9ybVRvb2wgZm9ybVRvb2wgPSAoRm9ybVRvb2wpKHJlZ05vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSU+Ci08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT5OZXcgTG9naW4gRm9ybTwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL2Zvcm1zdWJtaXQuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGZ1bmN0aW9uIHNob3dNYWluRm9ybShwdWJsaXNoVmFsdWUpCi0gIHsKLSAgICB2YXIgbG9hZFNjcmVlblRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvYWRTY3JlZW4iKTsKLSAgICBpZiAobG9hZFNjcmVlblRhYmxlLnJvd3MubGVuZ3RoID4gMCkKLSAgICAgIGxvYWRTY3JlZW5UYWJsZS5kZWxldGVSb3coMCk7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1haW5TY3JlZW4iKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gIH0KLQotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotICA8ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLSAgICA8dGFibGUgaWQ9ImxvYWRTY3JlZW4iPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJNU0dfTE9BRF9JTl9QUk9HUkVTUyIpJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgICA8ZGl2IGlkPSJtYWluU2NyZWVuIiA+Ci08JQotICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gInVkZGkvaW1hZ2VzL3B1Ymxpc2hfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgIFN0cmluZyB0aXRsZSA9ICJMb2dpbiI7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotICAgIDwvZGl2PgotICAgIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnMvTG9naW5BZHZhbmNlZEFjdGlvbkpTUC5qc3AiKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI+Ci0gICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2xvZ2luX2F1dGhlbnRpY2F0aW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL3NpbXBsZUNvbW1vbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gIDwvZm9ybT4KLSAgPC9kaXY+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgc2hvd01haW5Gb3JtKDApOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvTWFuYWdlUHVibGlzaGVyQXNzZXJ0aW9uc0Zvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL01hbmFnZVB1Ymxpc2hlckFzc2VydGlvbnNGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjY3Zjc4Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvTWFuYWdlUHVibGlzaGVyQXNzZXJ0aW9uc0Zvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDA4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudWRkaTRqLnJlc3BvbnNlLkNvbXBsZXRpb25TdGF0dXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGouZGF0YXR5cGUuYnVzaW5lc3MuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBTdHJpbmcgcHViQXNzZXJ0aW9uRm9ybSA9ICJzaG93UHVibGlzaGVyQXNzZXJ0aW9uc0Zvcm0iOwotICAgU3RyaW5nIHB1Ymxpc2hlckFzc2VydGlvbnNCdXNpbmVzcyA9ICJwdWJsaXNoZXJBc3NlcnRpb25zQnVzaW5lc3MiOwotCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgVURESU1haW5Ob2RlIHVkZGlNYWluTm9kZSA9IChVRERJTWFpbk5vZGUpbmF2aWdhdG9yTWFuYWdlci5nZXRSb290Tm9kZSgpOwotICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgRm9ybVRvb2wgZm9ybVRvb2wgPSAoRm9ybVRvb2wpKHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKSk7ICAgCi0gICBSZWdpc3RyeU5vZGUgcmVnTm9kZSA9IHVkZGlNYWluTm9kZS5nZXRSZWdpc3RyeU5vZGUoc2VsZWN0ZWROb2RlKTsKLSAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLQotICAgU3RyaW5nIGRpdlB1Ymxpc2hlckFzc2VydGlvblRhYmxlID0gImRpdlB1Ymxpc2hlckFzc2VydGlvblRhYmxlIjsKLSAgIFN0cmluZyB4ZGl2UHVibGlzaGVyQXNzZXJ0aW9uVGFibGUgPSAieGRpdlB1Ymxpc2hlckFzc2VydGlvblRhYmxlIjsKLSU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0ic3ViUXVlcnlLZXlQcm9wZXJ0eSIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlN1YlF1ZXJ5S2V5UHJvcGVydHkiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gICBTdHJpbmcgc3ViUXVlcnlLZXkgPSAoU3RyaW5nKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZKTsKLSAgIHN1YlF1ZXJ5S2V5UHJvcGVydHkuc2V0U3ViUXVlcnlLZXkoc3ViUXVlcnlLZXkpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08JQotICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkgPSAoKE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlKWZvcm1Ub29sKS5nZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXlQcm9wZXJ0eS5nZXRTdWJRdWVyeUtleSgpKTsKLSU+Ci0KLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1RJVExFX01BTkFHRV9QVUJMSVNIRVJfQVNTRVJUSU9OUyIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLQotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotCi08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9yZXN1bWVwcm94eWxvYWRwYWdlLmpzIikpJT4iPgotPC9zY3JpcHQ+Ci0KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9mb3Jtc3VibWl0LmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGl0YWJsZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3Jlc3VsdHMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGZ1bmN0aW9uIHNldERlZmF1bHRzKCkKLSAgewotICAgIGNsb3NlQWxsVWRkaUNoaWxkV2luZG93cygpOwotPCUKLSAgIGlmICghcmVnRWxlbWVudC5pc0xvZ2dlZEluKCkpCi0gICB7Ci0gICAgIFN0cmluZyBwdWJsaXNoVVJMID0gKFN0cmluZylmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICAgU3RyaW5nIHVzZXJJZCA9IChTdHJpbmcpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgICBTdHJpbmcgcGFzc3dvcmQgPSAoU3RyaW5nKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotJT4KLSAgICBkb2N1bWVudC5mb3Jtc1swXS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHB1Ymxpc2hVUkwpJT4iOwotICAgIGRvY3VtZW50LmZvcm1zWzBdLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVzZXJJZCklPiI7Ci0gICAgZG9jdW1lbnQuZm9ybXNbMF0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZShwYXNzd29yZCklPiI7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIjwlPXB1YkFzc2VydGlvbkZvcm0lPiIpLnN0eWxlLmRpc3BsYXkgPSAiIjsKLTwlCi0gICB9Ci0gICAKLSAgIFZlY3RvciBidXNpbmVzcyA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FERF9QVUJMSVNIRVJfQVNTRVJUSU9OUyk7Ci0gICBMaXN0TWFuYWdlciBidXNpbmVzc0NvcHkgPSAoTGlzdE1hbmFnZXIpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FERF9QVUJMSVNIRVJfQVNTRVJUSU9OU19DT1BZKTsKLSAgIGlmIChidXNpbmVzcyAhPSBudWxsKQotICAgewotICAgICBpZiAoYnVzaW5lc3NDb3B5ID09IG51bGwpCi0gICAgICAgYnVzaW5lc3NDb3B5ID0gbmV3IExpc3RNYW5hZ2VyKCk7Ci0gICAgIGVsc2UKLSAgICAgICBidXNpbmVzc0NvcHkuY2xlYXIoKTsKLSAgICAgZm9yIChpbnQgaT0wO2k8YnVzaW5lc3Muc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KWJ1c2luZXNzLmVsZW1lbnRBdChpKTsKLSAgICAgICBpbnQgdGFyZ2V0Tm9kZUlkID0gbGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Tm9kZUlkKCk7Ci0gICAgICAgaW50IHRhcmdldFRvb2xJZCA9IGxpc3RFbGVtZW50LmdldFRhcmdldFRvb2xJZCgpOwotICAgICAgIGludCB0YXJnZXRWaWV3SWQgPSBsaXN0RWxlbWVudC5nZXRUYXJnZXRWaWV3SWQoKTsKLSAgICAgICBTdHJpbmcgdXJsID0gU2VsZWN0U3ViUXVlcnlJdGVtQWN0aW9uLmdldEFjdGlvbkxpbmsodGFyZ2V0Tm9kZUlkLHRhcmdldFRvb2xJZCx0YXJnZXRWaWV3SWQsc3ViUXVlcnlLZXlQcm9wZXJ0eS5nZXRTdWJRdWVyeUtleSgpLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQUREX1BVQkxJU0hFUl9BU1NFUlRJT05TLGksVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVMsZmFsc2UpOwotICAgICAgIEJ1c2luZXNzRW50aXR5IGJlID0gKEJ1c2luZXNzRW50aXR5KWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgIGJ1c2luZXNzQ29weS5hZGQobGlzdEVsZW1lbnQpOwotJT4KLSAgICBhZGRQdWJsaXNoZXJBc3NlcnRpb25SZXN1bHRSb3coIjwlPXB1Ymxpc2hlckFzc2VydGlvbnNCdXNpbmVzcyU+Iiw8JT1saXN0RWxlbWVudC5nZXRWaWV3SWQoKSU+LCI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQodXJsKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShiZS5nZXREZWZhdWx0TmFtZVN0cmluZygpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGJlLmdldERlZmF1bHREZXNjcmlwdGlvblN0cmluZygpKSU+Iik7Ci08JQotICAgICB9Ci0gICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRERfUFVCTElTSEVSX0FTU0VSVElPTlNfQ09QWSxidXNpbmVzc0NvcHkpOwotICAgfQotICAgZWxzZQotICAgewotICAgICBidXNpbmVzcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgYnVzaW5lc3NDb3B5ID0gbmV3IExpc3RNYW5hZ2VyKCk7Ci0gICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRERfUFVCTElTSEVSX0FTU0VSVElPTlMsYnVzaW5lc3MpOwotICAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQUREX1BVQkxJU0hFUl9BU1NFUlRJT05TX0NPUFksYnVzaW5lc3NDb3B5KTsKLSAgIH0KLSU+Ci0gIH0KLQotICBmdW5jdGlvbiBwb3B1bGF0ZUFzc2VydGlvblRhYmxlKCkgewotPCUKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgQnVzaW5lc3NFbGVtZW50KQotICAgIHsKLSAgICAgIExpc3RNYW5hZ2VyIHB1YkFzc2VydGlvbnMgPSAoKEJ1c2luZXNzRWxlbWVudClzZWxlY3RlZEVsZW1lbnQpLmdldFB1Ymxpc2hlckFzc2VydGlvbnMoKTsKLSAgICAgIGlmIChwdWJBc3NlcnRpb25zID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIFNob3dQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uIGFjdGlvbiA9IG5ldyBTaG93UHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbihjb250cm9sbGVyKTsKLSAgICAgICAgYWN0aW9uLnJ1bigpOwotJT4KLSAgICAgICAgc3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotPCUKLSAgICAgICAgcHViQXNzZXJ0aW9ucyA9ICgoQnVzaW5lc3NFbGVtZW50KXNlbGVjdGVkRWxlbWVudCkuZ2V0UHVibGlzaGVyQXNzZXJ0aW9ucygpOwotICAgICAgfQotCi0gICAgICBwdWJBc3NlcnRpb25zID0gKChCdXNpbmVzc0VsZW1lbnQpc2VsZWN0ZWRFbGVtZW50KS5nZXRQdWJsaXNoZXJBc3NlcnRpb25zKCk7Ci0gICAgICBFbnVtZXJhdGlvbiBlID0gKChwdWJBc3NlcnRpb25zICE9IG51bGwpID8gcHViQXNzZXJ0aW9ucy5nZXRMaXN0RWxlbWVudHMoKSA6IG51bGwpOwotICAgICAgd2hpbGUgKGUgIT0gbnVsbCAmJiBlLmhhc01vcmVFbGVtZW50cygpKQotICAgICAgewotICAgICAgICBMaXN0RWxlbWVudCBsZSA9IChMaXN0RWxlbWVudCllLm5leHRFbGVtZW50KCk7Ci0gICAgICAgIFB1Ymxpc2hlckFzc2VydGlvbkVsZW1lbnQgcHViQXNzZXJ0aW9uRWxlbWVudCA9IChQdWJsaXNoZXJBc3NlcnRpb25FbGVtZW50KWxlLmdldE9iamVjdCgpOwotICAgICAgICBpbnQgdmlld0lkID0gbGUuZ2V0Vmlld0lkKCk7Ci0gICAgICAgIFN0cmluZyBkaXJlY3Rpb247Ci0gICAgICAgIGlmICgoKEJ1c2luZXNzRWxlbWVudClzZWxlY3RlZEVsZW1lbnQpLmdldEJ1c2luZXNzRW50aXR5KCkuZ2V0QnVzaW5lc3NLZXkoKS5lcXVhbHMocHViQXNzZXJ0aW9uRWxlbWVudC5nZXRGcm9tS2V5KCkpKQotICAgICAgICAgIGRpcmVjdGlvbiA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9BU1NFUlRJT05fRElSRUNUSU9OX0ZST00iKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIGRpcmVjdGlvbiA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9BU1NFUlRJT05fRElSRUNUSU9OX1RPIik7Ci0gICAgICAgIExpc3RFbGVtZW50IHNwID0gKExpc3RFbGVtZW50KXB1YkFzc2VydGlvbkVsZW1lbnQuZ2V0U2VydmljZVByb3ZpZGVyKCk7Ci0gICAgICAgIGludCB0YXJnZXROb2RlSWQgPSBzcC5nZXRUYXJnZXROb2RlSWQoKTsKLSAgICAgICAgaW50IHRhcmdldFRvb2xJZCA9IHNwLmdldFRhcmdldFRvb2xJZCgpOwotICAgICAgICBpbnQgdGFyZ2V0Vmlld0lkID0gc3AuZ2V0VGFyZ2V0Vmlld0lkKCk7Ci0gICAgICAgIGludCBzdWJRdWVyeUl0ZW1JZCA9IHB1YkFzc2VydGlvbkVsZW1lbnQuZ2V0U3ViUXVlcnlJdGVtSWQoKTsKLSAgICAgICAgU3RyaW5nIHVybCA9IFNlbGVjdFN1YlF1ZXJ5SXRlbUFjdGlvbi5nZXRBY3Rpb25MaW5rKHRhcmdldE5vZGVJZCx0YXJnZXRUb29sSWQsdGFyZ2V0Vmlld0lkLHN1YlF1ZXJ5S2V5UHJvcGVydHkuZ2V0U3ViUXVlcnlLZXkoKSxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0VYSVNUSU5HX1BVQkxJU0hFUl9BU1NFUlRJT05TLHN1YlF1ZXJ5SXRlbUlkLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTLGZhbHNlKTsKLSAgICAgICAgU3RyaW5nIG5hbWUgPSAoKEJ1c2luZXNzRW50aXR5KXNwLmdldE9iamVjdCgpKS5nZXREZWZhdWx0TmFtZVN0cmluZygpOwotICAgICAgICBTdHJpbmcgZGVzYyA9ICgoQnVzaW5lc3NFbnRpdHkpc3AuZ2V0T2JqZWN0KCkpLmdldERlZmF1bHREZXNjcmlwdGlvblN0cmluZygpOwotICAgICAgICBTdHJpbmcgc3RhdHVzID0gcHViQXNzZXJ0aW9uRWxlbWVudC5nZXRTdGF0dXMoKTsKLSAgICAgICAgU3RyaW5nIHR5cGUgPSBwdWJBc3NlcnRpb25FbGVtZW50LmdldEtleWVkUmVmKCkuZ2V0S2V5VmFsdWUoKTsKLSU+Ci0gICAgICBhZGRBc3NlcnRpb24oIjwlPWRpdlB1Ymxpc2hlckFzc2VydGlvblRhYmxlJT4iLDwlPXZpZXdJZCU+LCI8JT1kaXJlY3Rpb24lPiIsIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCh1cmwpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKG5hbWUpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoZGVzYyklPiIsIjwlPXN0YXR1cyU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHR5cGUpJT4iKTsKLTwlCi0gICAgICB9Ci0gICAgfQotJT4KLSAgfQotCi0gIGZ1bmN0aW9uIGFkZEFzc2VydGlvbih0YWJsZUNvbnRhaW5lcklkLHZpZXdJZCxkaXJlY3Rpb24sdXJsLG5hbWUsZGVzYyxzdGF0dXMsdHlwZSkKLSAgewotICAgIHR3aXN0T3Blbih0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgdGFibGVCb2R5ID0gdGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlRCT0RZIikuaXRlbSgwKTsKLSAgICB2YXIgbmV3Um93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKLSAgICB2YXIgY29sdW1uMCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW4yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uMyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW41ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uNiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0KLSAgICB2YXIgcm93Q2hlY2tib3ggPSBjcmVhdGVSb3dDaGVja2JveCgpOwotICAgIHJvd0NoZWNrYm94Lm5hbWUgPSAiPCU9VURESUFjdGlvbklucHV0cy5QVUJMSVNIRVJfQVNTRVJUSU9OU19WSUVXSUQlPiI7Ci0gICAgcm93Q2hlY2tib3gudmFsdWUgPSB2aWV3SWQ7Ci0gICAgY29sdW1uMC5hcHBlbmRDaGlsZChyb3dDaGVja2JveCk7Ci0KLSAgICBjb2x1bW4xLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9USElTX0JVU0lORVNTIiklPiIpKTsKLQotICAgIGNvbHVtbjIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZGlyZWN0aW9uKSk7Ci0KLSAgICB2YXIgbmFtZURldGFpbHNMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotICAgIG5hbWVEZXRhaWxzTGluay5ocmVmID0gdXJsOwotICAgIG5hbWVEZXRhaWxzTGluay50YXJnZXQgPSAiPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IjsKLSAgICBuYW1lRGV0YWlsc0xpbmsuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobmFtZSkpOwotICAgIGNvbHVtbjMuYXBwZW5kQ2hpbGQobmFtZURldGFpbHNMaW5rKTsKLQotICAgIGNvbHVtbjQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZ2V0RGVmYXVsdERpc3BsYXlTdHJpbmcoZGVzYykpKTsKLQotICAgIGNvbHVtbjUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoc3RhdHVzKSk7Ci0KLSAgICBjb2x1bW42LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHR5cGUpKTsKLQotICAgIGNvbHVtbjAuY2xhc3NOYW1lID0gImNoZWNrYm94Y2VsbHMiOwotICAgIGNvbHVtbjEuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIGNvbHVtbjIuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIGNvbHVtbjMuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIGNvbHVtbjQuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIGNvbHVtbjUuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIGNvbHVtbjYuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4wKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMSk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjIpOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4zKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uNCk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjUpOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW42KTsKLSAgICB0YWJsZUJvZHkuYXBwZW5kQ2hpbGQobmV3Um93KTsKLQotICB9Ci0KLSAgZnVuY3Rpb24gYWRkUHVibGlzaGVyQXNzZXJ0aW9uUmVzdWx0Um93KHRhYmxlQ29udGFpbmVySWQsbm9kZUlkLHVybCxuYW1lLGRlc2NyaXB0aW9uKQotICB7Ci0gICAgdHdpc3RPcGVuKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciB0YWJsZUJvZHkgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVEJPRFkiKS5pdGVtKDApOwotICAgIHZhciBuZXdSb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpOwotICAgIHZhciBjb2x1bW4wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW4zID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uNCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotCi0gICAgdmFyIHJvd0NoZWNrYm94ID0gY3JlYXRlUm93Q2hlY2tib3goKTsKLSAgICBjb2x1bW4wLmFwcGVuZENoaWxkKHJvd0NoZWNrYm94KTsKLSAgICBjb2x1bW4wLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIiIsbm9kZUlkKSk7Ci0KLSAgICBjb2x1bW4xLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9USElTX0JVU0lORVNTIiklPiIpKTsKLQotICAgIHZhciBkaXJlY3Rpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKTsKLSAgICBkaXJlY3Rpb24uaWQgPSAibGFiZWxfcHVibGlzaGVyX2Fzc2VydGlvbl9kaXJlY3Rpb24iOwotICAgIGRpcmVjdGlvbi5uYW1lID0gIjwlPVVERElBY3Rpb25JbnB1dHMuUFVCTElTSEVSX0FTU0VSVElPTlNfRElSRUNUSU9OJT4iOwotICAgIGRpcmVjdGlvbi5jbGFzc05hbWUgPSAic2VsZWN0bGlzdCI7Ci0gICAgZGlyZWN0aW9uLm9wdGlvbnNbMF0gPSBuZXcgT3B0aW9uKCI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fQVNTRVJUSU9OX0RJUkVDVElPTl9GUk9NIiklPiIsICI8JT1TdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLkRJUkVDVElPTl9GUk9NKSU+Iik7Ci0gICAgZGlyZWN0aW9uLm9wdGlvbnNbMV0gPSBuZXcgT3B0aW9uKCI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fQVNTRVJUSU9OX0RJUkVDVElPTl9UTyIpJT4iLCAiPCU9U3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5ESVJFQ1RJT05fVE8pJT4iKTsKLSAgICBjb2x1bW4yLmFwcGVuZENoaWxkKGRpcmVjdGlvbik7Ci0KLSAgICB2YXIgbmFtZURldGFpbHNMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotICAgIG5hbWVEZXRhaWxzTGluay5ocmVmID0gdXJsOwotICAgIG5hbWVEZXRhaWxzTGluay50YXJnZXQgPSAiPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IjsKLSAgICBuYW1lRGV0YWlsc0xpbmsuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobmFtZSkpOwotICAgIGNvbHVtbjMuYXBwZW5kQ2hpbGQobmFtZURldGFpbHNMaW5rKTsKLQotICAgIGNvbHVtbjQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZ2V0RGVmYXVsdERpc3BsYXlTdHJpbmcoZGVzY3JpcHRpb24pKSk7Ci0KLSAgICB2YXIgYXNzZXJ0aW9uVHlwZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpOwotICAgIGFzc2VydGlvblR5cGUuaWQgPSAibGFiZWxfcHVibGlzaGVyX2Fzc2VydGlvbl90eXBlIjsKLSAgICBhc3NlcnRpb25UeXBlLm5hbWUgPSAiPCU9VURESUFjdGlvbklucHV0cy5QVUJMSVNIRVJfQVNTRVJUSU9OU19UWVBFJT4iOwotICAgIGFzc2VydGlvblR5cGUuY2xhc3NOYW1lID0gInNlbGVjdGxpc3QiOwotICAgIGFzc2VydGlvblR5cGUub3B0aW9uc1swXSA9IG5ldyBPcHRpb24oIjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9BU1NFUlRJT05fVFlQRV9QQVJFTlRfQ0hJTEQiKSU+IiwgIjwlPVN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUFVCTElTSEVSX0FTU0VSVElPTlNfVFlQRV9QQVJFTlRfQ0hJTEQpJT4iKTsKLSAgICBhc3NlcnRpb25UeXBlLm9wdGlvbnNbMV0gPSBuZXcgT3B0aW9uKCI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fQVNTRVJUSU9OX1RZUEVfUEVFUl9UT19QRUVSIiklPiIsICI8JT1TdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hFUl9BU1NFUlRJT05TX1RZUEVfUEVFUl9UT19QRUVSKSU+Iik7Ci0gICAgYXNzZXJ0aW9uVHlwZS5vcHRpb25zWzJdID0gbmV3IE9wdGlvbigiPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0FTU0VSVElPTl9UWVBFX0lERU5USVRZIiklPiIsICI8JT1TdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlBVQkxJU0hFUl9BU1NFUlRJT05TX1RZUEVfSURFTlRJVFkpJT4iKTsKLSAgICBjb2x1bW41LmFwcGVuZENoaWxkKGFzc2VydGlvblR5cGUpOwotCi0gICAgY29sdW1uMC5jbGFzc05hbWUgPSAiY2hlY2tib3hjZWxscyI7Ci0gICAgY29sdW1uMS5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgY29sdW1uMi5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgY29sdW1uMy5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgY29sdW1uNC5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgY29sdW1uNS5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjApOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4xKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMik7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjMpOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW40KTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uNSk7Ci0gICAgdGFibGVCb2R5LmFwcGVuZENoaWxkKG5ld1Jvdyk7Ci0gIH0KLQotICBmdW5jdGlvbiBzZXRGb3JtTG9jYXRpb25BbmRTdWJtaXQoZm9ybSxsb2NhdGlvbikKLSAgewotICAgIGZvcm0uYWN0aW9uID0gbG9jYXRpb247Ci0gICAgaWYgKGhhbmRsZVN1Ym1pdChmb3JtKSkKLSAgICB7Ci0gICAgICBwcm9jZXNzUmVzdWx0VGFibGUoIjwlPXB1Ymxpc2hlckFzc2VydGlvbnNCdXNpbmVzcyU+IiwgIjwlPVVERElBY3Rpb25JbnB1dHMuUFVCTElTSEVSX0FTU0VSVElPTlNfU0VMRUNURURfQlVTX0lEJT4iLCBmb3JtLCBmYWxzZSk7Ci0gICAgICBmb3JtLnN1Ym1pdCgpOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIGNoZWNrVGFibGVFbnRyaWVzQW5kU3VibWl0KHRhYmxlQ29udGFpbmVySWQsZm9ybSxsb2NhdGlvbikKLSAgewotICAgIGlmIChnZXROdW1iZXJPZlNlbGVjdGlvbnModGFibGVDb250YWluZXJJZCkgPiAwKSB7Ci0gICAgICBzZXRGb3JtTG9jYXRpb25BbmRTdWJtaXQoZm9ybSxsb2NhdGlvbik7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGFsZXJ0KCI8JT1jb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT1RISU5HX1NFTEVDVEVEIiklPiIpOwotICB9Ci0KLSAgZnVuY3Rpb24gY2hlY2tUYWJsZVNpemVBbmRTdWJtaXQodGFibGVDb250YWluZXJJZCxmb3JtLGxvY2F0aW9uKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgaWYgKHRhYmxlLnJvd3MubGVuZ3RoID4gbnVtYmVyT2ZIZWFkZXJSb3dzKSB7Ci0gICAgICBzZXRGb3JtTG9jYXRpb25BbmRTdWJtaXQoZm9ybSxsb2NhdGlvbik7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGFsZXJ0KCI8JT1jb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT1RISU5HX1NFTEVDVEVEIiklPiIpOwotICB9Ci0KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iIG9uVW5sb2FkPSJjbG9zZUFsbFVkZGlDaGlsZFdpbmRvd3MoKSI+Ci0gIDxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICAgIDxkaXYgaWQ9InB1Ymxpc2hlckFzc2VydGlvbnMiPgotICAgICAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvYWN0aW9ucy9TaG93UHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbkpTUC5qc3AiKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfR0VUJT4iPgotICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLk5FV19TVUJRVUVSWV9JTklUSUFURUQlPiI+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuTkVXX1NVQlFVRVJZX1FVRVJZX0lURU0lPiI+Ci0KLTwlCi0gICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAidWRkaS9pbWFnZXMvcHVibGlzaGVyX2Fzc2VydGlvbnNfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgIFN0cmluZyB0aXRsZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTUFOQUdFX1BVQkxJU0hFUl9BU1NFUlRJT05TIik7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotICAgICAgICA8dGFibGUgd2lkdGg9IjkwJSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICAgICAgPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTUFOQUdFX1BVQkxJU0hFUl9BU1NFUlRJT05TX0RFU0MiKSU+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0gICAgICAgIDx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT4KLSAgICAgICAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT1kaXZQdWJsaXNoZXJBc3NlcnRpb25UYWJsZSU+JywnPCU9eGRpdlB1Ymxpc2hlckFzc2VydGlvblRhYmxlJT4nKSI+PGltZyBuYW1lPSI8JT14ZGl2UHVibGlzaGVyQXNzZXJ0aW9uVGFibGUlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdGNsb3NlZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9DTE9TRUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgICAgICA8c3Ryb25nPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1BVQkxJU0hfQVNTRVJUSU9OUyIpJT48L3N0cm9uZz4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PTEwPjxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBoZWlnaHQ9MiB3aWR0aD0iMTAwJSI+PC90ZD4KLSAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgICAgIDxkaXYgaWQ9IjwlPWRpdlB1Ymxpc2hlckFzc2VydGlvblRhYmxlJT4iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgIDx0aCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJoYW5kbGVDaGVja0FsbENsaWNrKCc8JT1kaXZQdWJsaXNoZXJBc3NlcnRpb25UYWJsZSU+Jyx0aGlzKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9BTExfQ0hFQ0tfQk9YIiklPiI+PC90aD4KLSAgICAgICAgICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9KChCdXNpbmVzc0VsZW1lbnQpc2VsZWN0ZWRFbGVtZW50KS5nZXRCdXNpbmVzc0VudGl0eSgpLmdldERlZmF1bHROYW1lU3RyaW5nKCklPjwvdGg+Ci0gICAgICAgICAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjxsYWJlbCBmb3I9ImxhYmVsX3B1Ymxpc2hlcl9hc3NlcnRpb25fZGlyZWN0aW9uIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9ESVJFQ1RJT04iKSU+PC9sYWJlbD48L3RoPgotICAgICAgICAgICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9CVVNJTkVTUyIpJT48L3RoPgotICAgICAgICAgICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9ERVNDUklQVElPTiIpJT48L3RoPgotICAgICAgICAgICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9TVEFUVVMiKSU+PC90aD4KLSAgICAgICAgICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PGxhYmVsIGZvcj0ibGFiZWxfcHVibGlzaGVyX2Fzc2VydGlvbl90eXBlIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9BU1NFUlRJT05fVFlQRSIpJT48L2xhYmVsPjwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgPHRhYmxlIHdpZHRoPSI5MCUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgPHRkIGhlaWdodD0zMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9JTkNPTVBMRVRFX0FTU0VSVElPTlNfVklTSUJJTElUWV9ERVNDIiklPgotICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICA8L3RhYmxlPgotICAgICAgICA8L2Rpdj4KLQotPCUKLSAgIGJvb2xlYW4gdGFibGVIYXNFcnJvcnMgPSAhZm9ybVRvb2xQSS5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRERfUFVCTElTSEVSX0FTU0VSVElPTlMpOwotICAgU3RyaW5nW10gYnVzU3BlY2lmaWNJbmZvID0geyJGT1JNX0xBQkVMX0JVU0lORVNTRVMiLChuZXcgQm9vbGVhbih0YWJsZUhhc0Vycm9ycykpLnRvU3RyaW5nKCksU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVMpLCJwdWJsaXNoZXJBc3NlcnRpb25zIixVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FERF9QVUJMSVNIRVJfQVNTRVJUSU9OU307Ci0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQocHVibGlzaGVyQXNzZXJ0aW9uc0J1c2luZXNzKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhidXNTcGVjaWZpY0luZm8pOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy91ZGRpT2JqZWN0c1B1Ymxpc2hlckFzc2VydGlvbnNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotCi08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKHB1YkFzc2VydGlvbkZvcm0pOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSJhdXRoZW50aWNhdGlvbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgICAgIDxicj4KLSAgICAgICAgPHRhYmxlPgotICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0JVVFRPTl9TSE9XX0FMTF9QVUJMSVNIRVJfQVNTRVJUSU9OUyIpJT4iIG9uQ2xpY2s9InNldEZvcm1Mb2NhdGlvbkFuZFN1Ym1pdCh0aGlzLmZvcm0sJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL1Nob3dQdWJsaXNoZXJBc3NlcnRpb25zQWN0aW9uSlNQLmpzcCIpKSU+JykiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0JVVFRPTl9DT01QTEVURV9QVUJMSVNIRVJfQVNTRVJUSU9OUyIpJT4iIG9uQ2xpY2s9ImNoZWNrVGFibGVFbnRyaWVzQW5kU3VibWl0KCc8JT1kaXZQdWJsaXNoZXJBc3NlcnRpb25UYWJsZSU+Jyx0aGlzLmZvcm0sJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL0NvbXBsZXRlUHVibGlzaGVyQXNzZXJ0aW9uc0FjdGlvbkpTUC5qc3AiKSklPicpIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9CVVRUT05fQUREX1BVQkxJU0hFUl9BU1NFUlRJT05TIiklPiIgb25DbGljaz0iY2hlY2tUYWJsZVNpemVBbmRTdWJtaXQoJzwlPXB1Ymxpc2hlckFzc2VydGlvbnNCdXNpbmVzcyU+Jyx0aGlzLmZvcm0sJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL0FkZFB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb25KU1AuanNwIikpJT4nKSIgY2xhc3M9ImJ1dHRvbiI+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQlVUVE9OX1JFTU9WRV9QVUJMSVNIRVJfQVNTRVJUSU9OUyIpJT4iIG9uQ2xpY2s9ImNoZWNrVGFibGVFbnRyaWVzQW5kU3VibWl0KCc8JT1kaXZQdWJsaXNoZXJBc3NlcnRpb25UYWJsZSU+Jyx0aGlzLmZvcm0sJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL1JlbW92ZVB1Ymxpc2hlckFzc2VydGlvbnNBY3Rpb25KU1AuanNwIikpJT4nKSIgY2xhc3M9ImJ1dHRvbiI+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0gICAgICA8L2Zvcm0+Ci0KLSAgICA8L2Rpdj4KLSAgPC9kaXY+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgcG9wdWxhdGVBc3NlcnRpb25UYWJsZSgpOwotICBzZXREZWZhdWx0cygpOwotICByZXN1bWVQcm94eUxvYWRQYWdlKCk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9NYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9NYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmFmZGEzNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvTWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyMzEgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGouZGF0YXR5cGUuYnVzaW5lc3MuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai5kYXRhdHlwZS5zZXJ2aWNlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIFVERElNYWluTm9kZSB1ZGRpTWFpbk5vZGUgPSAoVURESU1haW5Ob2RlKW5hdmlnYXRvck1hbmFnZXIuZ2V0Um9vdE5vZGUoKTsKLSAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgIEZvcm1Ub29sIGZvcm1Ub29sID0gKEZvcm1Ub29sKShzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotICAgUmVnaXN0cnlOb2RlIHJlZ05vZGUgPSB1ZGRpTWFpbk5vZGUuZ2V0UmVnaXN0cnlOb2RlKHNlbGVjdGVkTm9kZSk7Ci0gICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgQnVzaW5lc3NFbGVtZW50IGJ1c0VsZW1lbnQgPSAoQnVzaW5lc3NFbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotJT4KLTxqc3A6dXNlQmVhbiBpZD0ic3ViUXVlcnlLZXlQcm9wZXJ0eSIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlN1YlF1ZXJ5S2V5UHJvcGVydHkiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gICBTdHJpbmcgc2sgPSAoU3RyaW5nKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZKTsKLSAgIHN1YlF1ZXJ5S2V5UHJvcGVydHkuc2V0U3ViUXVlcnlLZXkoc2spOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08aHRtbD4KLTxoZWFkPgotICA8dGl0bGU+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fVElUTEVfTUFOQUdFX1JFRkVSRU5DRURfU0VSVklDRVMiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy9yZXN1bHRzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBmdW5jdGlvbiBzZXREZWZhdWx0cygpCi0gIHsKLTwlCi0gICBpZiAoIXJlZ0VsZW1lbnQuaXNMb2dnZWRJbigpKQotICAgewotICAgICBTdHJpbmcgcHVibGlzaFVSTCA9IChTdHJpbmcpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICAgIFN0cmluZyB1c2VySWQgPSAoU3RyaW5nKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgICAgU3RyaW5nIHBhc3N3b3JkID0gKFN0cmluZylmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEKTsKLSU+Ci0gICAgZG9jdW1lbnQuZm9ybXNbMF0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZShwdWJsaXNoVVJMKSU+IjsKLSAgICBkb2N1bWVudC5mb3Jtc1swXS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1c2VySWQpJT4iOwotICAgIGRvY3VtZW50LmZvcm1zWzBdLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUocGFzc3dvcmQpJT4iOwotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNBdXRoZW50aWNhdGlvbiIpLnN0eWxlLmRpc3BsYXkgPSAiIjsKLTwlCi0gICB9Ci0gICBTdHJpbmcgc3ViUXVlcnlLZXkgPSBzdWJRdWVyeUtleVByb3BlcnR5LmdldFN1YlF1ZXJ5S2V5KCk7Ci0gICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSA9ICgoTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UpZm9ybVRvb2wpLmdldEZvcm1Ub29sUHJvcGVydGllcyhzdWJRdWVyeUtleSk7Ci0gICBWZWN0b3IgcmVmZXJlbmNlZFNlcnZpY2VzID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfUkVGRVJFTkNFRF9TRVJWSUNFUyk7Ci0gICBpZiAocmVmZXJlbmNlZFNlcnZpY2VzID09IG51bGwpCi0gICB7Ci0gICAgIHJlZmVyZW5jZWRTZXJ2aWNlcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgQnVzaW5lc3NFbnRpdHkgYnVzaW5lc3NFbnRpdHkgPSBidXNFbGVtZW50LmdldEJ1c2luZXNzRW50aXR5KCk7Ci0gICAgIFN0cmluZyBidXNpbmVzc0tleSA9IGJ1c2luZXNzRW50aXR5LmdldEJ1c2luZXNzS2V5KCk7Ci0gICAgIEJ1c2luZXNzU2VydmljZXMgYnVzaW5lc3NTdmNzID0gYnVzaW5lc3NFbnRpdHkuZ2V0QnVzaW5lc3NTZXJ2aWNlcygpOwotICAgICBpZiAoYnVzaW5lc3NTdmNzICE9IG51bGwpCi0gICAgIHsKLSAgICAgICBWZWN0b3IgYnVzaW5lc3NTdmNWZWN0b3IgPSBidXNpbmVzc1N2Y3MuZ2V0QnVzaW5lc3NTZXJ2aWNlVmVjdG9yKCk7Ci0gICAgICAgZm9yIChpbnQgaT0wO2k8YnVzaW5lc3NTdmNWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgICB7Ci0gICAgICAgICBCdXNpbmVzc1NlcnZpY2UgYnVzU2VydmljZSA9IChCdXNpbmVzc1NlcnZpY2UpYnVzaW5lc3NTdmNWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgICAgaWYgKCFidXNTZXJ2aWNlLmdldEJ1c2luZXNzS2V5KCkuZXF1YWxzKGJ1c2luZXNzS2V5KSkKLSAgICAgICAgIHsKLSAgICAgICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSBuZXcgTGlzdEVsZW1lbnQoYnVzU2VydmljZSk7Ci0gICAgICAgICAgIHJlZmVyZW5jZWRTZXJ2aWNlcy5hZGRFbGVtZW50KGxpc3RFbGVtZW50KTsKLSAgICAgICAgIH0KLSAgICAgICB9Ci0gICAgIH0KLSAgICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1JFRkVSRU5DRURfU0VSVklDRVMscmVmZXJlbmNlZFNlcnZpY2VzKTsKLSAgIH0KLQotICAgZm9yIChpbnQgaT0wO2k8cmVmZXJlbmNlZFNlcnZpY2VzLnNpemUoKTtpKyspCi0gICB7Ci0gICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KXJlZmVyZW5jZWRTZXJ2aWNlcy5lbGVtZW50QXQoaSk7Ci0gICAgIGludCB0YXJnZXROb2RlSWQgPSBsaXN0RWxlbWVudC5nZXRUYXJnZXROb2RlSWQoKTsKLSAgICAgaW50IHRhcmdldFRvb2xJZCA9IGxpc3RFbGVtZW50LmdldFRhcmdldFRvb2xJZCgpOwotICAgICBpbnQgdGFyZ2V0Vmlld0lkID0gbGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Vmlld0lkKCk7Ci0gICAgIFN0cmluZyB1cmwgPSBTZWxlY3RTdWJRdWVyeUl0ZW1BY3Rpb24uZ2V0QWN0aW9uTGluayh0YXJnZXROb2RlSWQsdGFyZ2V0VG9vbElkLHRhcmdldFZpZXdJZCxzdWJRdWVyeUtleSxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1JFRkVSRU5DRURfU0VSVklDRVMsaSxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVMsZmFsc2UpOwotICAgICBCdXNpbmVzc1NlcnZpY2UgYnMgPSAoQnVzaW5lc3NTZXJ2aWNlKWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICBTdHJpbmcgbmFtZSA9IGJzLmdldERlZmF1bHROYW1lU3RyaW5nKCk7Ci0gICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IGJzLmdldERlZmF1bHREZXNjcmlwdGlvblN0cmluZygpOwotJT4KLSAgICBhZGRSZXN1bHRSb3coIm1hbmFnZVJlZmVyZW5jZWRTZXJ2aWNlc1JlZmVyZW5jZXMiLDwlPXRhcmdldE5vZGVJZCU+LCI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQodXJsKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShuYW1lKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGRlc2NyaXB0aW9uKSU+Iik7Ci08JQotICAgfQotCi0gICBWZWN0b3Igc2VydmljZXMgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TRVJWSUNFUyk7Ci0gICBpZiAoc2VydmljZXMgIT0gbnVsbCkKLSAgIHsKLSAgICAgZm9yIChpbnQgaT0wO2k8c2VydmljZXMuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KXNlcnZpY2VzLmVsZW1lbnRBdChpKTsKLSAgICAgICBpbnQgdGFyZ2V0Tm9kZUlkID0gbGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Tm9kZUlkKCk7Ci0gICAgICAgaW50IHRhcmdldFRvb2xJZCA9IGxpc3RFbGVtZW50LmdldFRhcmdldFRvb2xJZCgpOwotICAgICAgIGludCB0YXJnZXRWaWV3SWQgPSBsaXN0RWxlbWVudC5nZXRUYXJnZXRWaWV3SWQoKTsKLSAgICAgICBTdHJpbmcgdXJsID0gU2VsZWN0U3ViUXVlcnlJdGVtQWN0aW9uLmdldEFjdGlvbkxpbmsodGFyZ2V0Tm9kZUlkLHRhcmdldFRvb2xJZCx0YXJnZXRWaWV3SWQsc3ViUXVlcnlLZXksVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TRVJWSUNFUyxpLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUyxmYWxzZSk7Ci0gICAgICAgQnVzaW5lc3NTZXJ2aWNlIGJzID0gKEJ1c2luZXNzU2VydmljZSlsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICBTdHJpbmcgbmFtZSA9IGJzLmdldERlZmF1bHROYW1lU3RyaW5nKCk7Ci0gICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gYnMuZ2V0RGVmYXVsdERlc2NyaXB0aW9uU3RyaW5nKCk7Ci0lPgotICAgIGFkZFJlc3VsdFJvdygibWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzU2VydmljZXMiLDwlPXRhcmdldE5vZGVJZCU+LCI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQodXJsKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShuYW1lKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGRlc2NyaXB0aW9uKSU+Iik7Ci08JQotICAgICB9Ci0gICB9Ci0lPgotICB9Ci0KLSAgZnVuY3Rpb24gcHJvY2Vzc1JlZmVyZW5jZVRhYmxlKHRhYmxlQ29udGFpbmVySWQsaW5wdXROYW1lLGZvcm0pCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICBmb3IgKHZhciBpPW51bWJlck9mSGVhZGVyUm93cztpPHRhYmxlLnJvd3MubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICB2YXIgaW5wdXRzID0gdGFibGUucm93c1tpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKTsKLSAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudChpbnB1dE5hbWUsaW5wdXRzLml0ZW0oMCkuY2hlY2tlZCkpOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIHByb2Nlc3NGb3JtKGZvcm0pCi0gIHsKLSAgICBpZiAoaGFuZGxlU3VibWl0KGZvcm0pKQotICAgIHsKLSAgICAgIHByb2Nlc3NSZWZlcmVuY2VUYWJsZSgibWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzUmVmZXJlbmNlcyIsIjwlPVVERElBY3Rpb25JbnB1dHMuUkVGRVJFTkNFRF9TRVJWSUNFX1NFTEVDVF9TVEFURSU+Iixmb3JtKTsKLSAgICAgIHByb2Nlc3NSZXN1bHRUYWJsZSgibWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzU2VydmljZXMiLCI8JT1VRERJQWN0aW9uSW5wdXRzLk5PREVJRF9TRVJWSUNFJT4iLGZvcm0sZmFsc2UpOwotICAgICAgZm9ybS5zdWJtaXQoKTsKLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBwcm9jZXNzQWRkU2VydmljZXMoZm9ybSkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKCJtYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNTZXJ2aWNlcyIpOwotICAgIGlmICh0YWJsZS5yb3dzLmxlbmd0aCA9PSBudW1iZXJPZkhlYWRlclJvd3MpCi0gICAgICBhbGVydCgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9fU0VSVklDRVMiKSklPiIpOwotICAgIGVsc2UKLSAgICB7Ci0gICAgICBmb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuTUFOQUdFX1JFRkVSRU5DRURfU0VSVklDRVNfT1BFUkFUSU9OJT4udmFsdWUgPSAiPCU9VURESUFjdGlvbklucHV0cy5NQU5BR0VfUkVGRVJFTkNFRF9TRVJWSUNFU19PUEVSQVRJT05fQUREJT4iOwotICAgICAgcHJvY2Vzc0Zvcm0oZm9ybSk7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gcHJvY2Vzc1JlbW92ZVJlZmVyZW5jZXMoZm9ybSkKLSAgewotICAgIHZhciBudW1iZXJPZlNlbGVjdGlvbnMgPSBnZXROdW1iZXJPZlNlbGVjdGlvbnMoIm1hbmFnZVJlZmVyZW5jZWRTZXJ2aWNlc1JlZmVyZW5jZXMiKTsKLSAgICBpZiAoZ2V0TnVtYmVyT2ZTZWxlY3Rpb25zKCJtYW5hZ2VSZWZlcmVuY2VkU2VydmljZXNSZWZlcmVuY2VzIikgPT0gMCkKLSAgICAgIGFsZXJ0KCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT19SRUZFUkVOQ0VfU0VMRUNURUQiKSklPiIpOwotICAgIGVsc2UKLSAgICB7Ci0gICAgICBmb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuTUFOQUdFX1JFRkVSRU5DRURfU0VSVklDRVNfT1BFUkFUSU9OJT4udmFsdWUgPSAiPCU9VURESUFjdGlvbklucHV0cy5NQU5BR0VfUkVGRVJFTkNFRF9TRVJWSUNFU19PUEVSQVRJT05fUkVNT1ZFJT4iOwotICAgICAgcHJvY2Vzc0Zvcm0oZm9ybSk7Ci0gICAgfQotICB9Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLSAgPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gICAgPGRpdiBpZD0ibWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzIj4KLTwlCi0gICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAidWRkaS9pbWFnZXMvcmVmZXJlbmNlZF9zZXJ2aWNlc19oaWdobGlnaHRlZC5naWYiOwotICAgU3RyaW5nIHRpdGxlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9NQU5BR0VfUkVGRVJFTkNFRF9TRVJWSUNFUyIpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgICAgIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnMvTWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzQWN0aW9uSlNQLmpzcCIpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBzdHlsZT0ibWFyZ2luLXRvcDowOyI+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZJT4iPgotICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0dFVCU+Ij4KLSAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5ORVdfU1VCUVVFUllfSU5JVElBVEVEJT4iPgotICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLk5FV19TVUJRVUVSWV9RVUVSWV9JVEVNJT4iPgotICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLk1BTkFHRV9SRUZFUkVOQ0VEX1NFUlZJQ0VTX09QRVJBVElPTiU+Ij4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5MCUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgICAgIDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX01BTkFHRV9SRUZFUkVOQ0VEX1NFUlZJQ0VTX0RFU0MiKSU+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci08JQotICAgU3RyaW5nW10gcHJvamVjdGlvbnNTcGVjaWZpY0luZm8gPSB7IkZPUk1fTEFCRUxfUkVGRVJFTkNFRF9TRVJWSUNFUyIsQm9vbGVhbi5GQUxTRS50b1N0cmluZygpLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUyksIm1hbmFnZVJlZmVyZW5jZWRTZXJ2aWNlcyIsVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9SRUZFUkVOQ0VEX1NFUlZJQ0VTfTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgibWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzUmVmZXJlbmNlcyIpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKHByb2plY3Rpb25zU3BlY2lmaWNJbmZvKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmVuYWJsZUR5bmFtaWMoZmFsc2UpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy91ZGRpT2JqZWN0c190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgU3RyaW5nW10gc2VydmljZXNTcGVjaWZpY0luZm8gPSB7IkZPUk1fT1BUSU9OX1NFUlZJQ0VTIixCb29sZWFuLkZBTFNFLnRvU3RyaW5nKCksU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTKSwibWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzIixVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NFUlZJQ0VTfTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgibWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzU2VydmljZXMiKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhzZXJ2aWNlc1NwZWNpZmljSW5mbyk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL3VkZGlPYmplY3RzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoIm1hbmFnZVJlZmVyZW5jZWRTZXJ2aWNlc0F1dGhlbnRpY2F0aW9uIik7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2F1dGhlbnRpY2F0aW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICAgICAgPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTIgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgaGVpZ2h0PTMwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQlVUVE9OX0FERF9TRVJWSUNFUyIpJT4iIG9uQ2xpY2s9InByb2Nlc3NBZGRTZXJ2aWNlcyh0aGlzLmZvcm0pIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8dGQgaGVpZ2h0PTMwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQlVUVE9OX1JFTU9WRV9SRUZFUkVOQ0VTIiklPiIgb25DbGljaz0icHJvY2Vzc1JlbW92ZVJlZmVyZW5jZXModGhpcy5mb3JtKSIgY2xhc3M9ImJ1dHRvbiI+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0gICAgICA8L2Zvcm0+Ci0gICAgPC9kaXY+Ci0gIDwvZGl2PgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHNldERlZmF1bHRzKCk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9PcGVuUmVnaXN0cnlGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9PcGVuUmVnaXN0cnlGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODgwYmMzZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvT3BlblJlZ2lzdHJ5Rm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNzggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA1MTUgICAxMzUzMDcgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZmF2b3JpdGVzLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci1Ob2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLVVERElNYWluTm9kZSB1ZGRpTWFpbk5vZGUgPSAoVURESU1haW5Ob2RlKW5hdmlnYXRvck1hbmFnZXIuZ2V0Um9vdE5vZGUoKTsKLU9wZW5SZWdpc3RyeVRvb2wgb3BlblJlZ2lzdHJ5VG9vbCA9IChPcGVuUmVnaXN0cnlUb29sKSh1ZGRpTWFpbk5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotRW51bWVyYXRpb24gZmF2b3JpdGVSZWdpc3RyeUVsZW1lbnRzID0gb3BlblJlZ2lzdHJ5VG9vbC5nZXRGYXZvcml0ZVJlZ2lzdHJ5RWxlbWVudHMoKTsKLVZlY3RvciBmYXZvcml0ZVJlZ2lzdHJ5TGlzdCA9IG5ldyBWZWN0b3IoKTsKLXdoaWxlIChmYXZvcml0ZVJlZ2lzdHJ5RWxlbWVudHMuaGFzTW9yZUVsZW1lbnRzKCkpCi0gIGZhdm9yaXRlUmVnaXN0cnlMaXN0LmFkZEVsZW1lbnQoZmF2b3JpdGVSZWdpc3RyeUVsZW1lbnRzLm5leHRFbGVtZW50KCkpOwotJT4KLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1RJVExFX09QRU5fUkVHSVNUUlkiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci0gIDxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9mb3Jtc3VibWl0LmpzcCIgZmx1c2g9InRydWUiLz4KLSAgPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL2Zvcm11dGlscy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgIGZ1bmN0aW9uIGZpbGxGYXZvcml0ZUluZm8oZmF2b3JpdGVSZWdpc3RyeVNlbGVjdCkKLSAgICB7Ci0gICAgICB2YXIgc2VsZWN0ZWRGYXZvcml0ZVJlZ2lzdHJ5SW5kZXggPSBmYXZvcml0ZVJlZ2lzdHJ5U2VsZWN0LnNlbGVjdGVkSW5kZXgtMTsKLSAgICAgIGlmIChzZWxlY3RlZEZhdm9yaXRlUmVnaXN0cnlJbmRleCA+PSAwKQotICAgICAgewotICAgICAgICB2YXIgZm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJvcGVuUmVnaXN0cnlGb3JtIik7Ci0gICAgICAgIHN3aXRjaCAoc2VsZWN0ZWRGYXZvcml0ZVJlZ2lzdHJ5SW5kZXgpCi0gICAgICAgIHsKLSAgICAgICAgICA8JQotICAgICAgICAgIGZvciAoaW50IGk9MDtpPGZhdm9yaXRlUmVnaXN0cnlMaXN0LnNpemUoKTtpKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgRmF2b3JpdGVzVURESVJlZ2lzdHJ5RWxlbWVudCBmYXZSZWdFbGVtZW50ID0gKEZhdm9yaXRlc1VERElSZWdpc3RyeUVsZW1lbnQpZmF2b3JpdGVSZWdpc3RyeUxpc3QuZWxlbWVudEF0KGkpOwotICAgICAgICAgICU+Ci0gICAgICAgICAgICBjYXNlIDwlPWklPjoKLSAgICAgICAgICAgICAgZm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlJFR0lTVFJZX05BTUUlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoZmF2UmVnRWxlbWVudC5nZXROYW1lKCkpJT4iOwotICAgICAgICAgICAgICBmb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuSU5RVUlSWV9VUkwlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoZmF2UmVnRWxlbWVudC5nZXRJbnF1aXJ5VVJMKCkpJT4iOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICA8JQotICAgICAgICAgIH0KLSAgICAgICAgICAlPgotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gc2V0RGVmYXVsdHMoKQotICAgIHsKLSAgICAgIHZhciBmb3JtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm9wZW5SZWdpc3RyeUZvcm0iKTsKLSAgICAgIGZvcm0uPCU9VURESUFjdGlvbklucHV0cy5SRUdJU1RSWV9OQU1FJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpb3BlblJlZ2lzdHJ5VG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlJFR0lTVFJZX05BTUUpKSU+IjsKLSAgICAgIGZvcm0uPCU9VURESUFjdGlvbklucHV0cy5JTlFVSVJZX1VSTCU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSgoU3RyaW5nKW9wZW5SZWdpc3RyeVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5JTlFVSVJZX1VSTCkpJT4iOwotICAgICAgc2hvd01haW5Gb3JtKCk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gc2hvd01haW5Gb3JtKCkKLSAgICB7Ci0gICAgICB2YXIgbG9hZFNjcmVlblRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvYWRTY3JlZW4iKTsKLSAgICAgIGlmIChsb2FkU2NyZWVuVGFibGUucm93cy5sZW5ndGggPiAwKQotICAgICAgICBsb2FkU2NyZWVuVGFibGUuZGVsZXRlUm93KDApOwotICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1haW5TY3JlZW4iKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gICAgfQotCi0gICAKLSAgPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci0gIDxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICAgIDx0YWJsZSBpZD0ibG9hZFNjcmVlbiI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICA8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIk1TR19MT0FEX0lOX1BST0dSRVNTIiklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICAgIDxkaXYgaWQ9Im1haW5TY3JlZW4iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgICAgIDwlCi0gICAgICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAidWRkaS9pbWFnZXMvb3Blbl9yZWdpc3RyeV9oaWdobGlnaHRlZC5naWYiOwotICAgICAgU3RyaW5nIHRpdGxlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9PUEVOX1JFR0lTVFJZIik7Ci0gICAgICAlPgotICAgICAgPCVAIGluY2x1ZGUgZmlsZT0iL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotICAgICAgPHRhYmxlPgotICAgICAgICA8dHI+Ci0gICAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgICAgPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfT1BFTl9SRUdJU1RSWV9ERVNDIiklPgotICAgICAgICAgIDwvdGQ+Ci0gICAgICAgIDwvdHI+Ci0gICAgICA8L3RhYmxlPgotICAgICAgCi0gICAgICA8Zm9ybSBpZD0ib3BlblJlZ2lzdHJ5Rm9ybSIgYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvYWN0aW9ucy9PcGVuUmVnaXN0cnlBY3Rpb25KU1AuanNwIikpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG9uU3VibWl0PSJyZXR1cm4gaGFuZGxlU3VibWl0KHRoaXMpIj4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgdmFsaWduPSJib3R0b20iIG5vd3JhcCBoZWlnaHQ9MjU+Ci0gICAgICAgICAgICAgIDxsYWJlbCBmb3I9ImZhdm9yaXRlUmVnaXN0cnkiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0ZBVk9SSVRFX1JFR0lTVFJZIiklPjwvbGFiZWw+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgICAgIDxzZWxlY3QgaWQ9ImZhdm9yaXRlUmVnaXN0cnkiIG9uQ2hhbmdlPSJmaWxsRmF2b3JpdGVJbmZvKHRoaXMpIiBjbGFzcz0ic2VsZWN0bGlzdCI+Ci0gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iIiBzZWxlY3RlZD4KLSAgICAgICAgICAgICAgICA8JQotICAgICAgICAgICAgICAgIGZvciAoaW50IGk9MDtpPGZhdm9yaXRlUmVnaXN0cnlMaXN0LnNpemUoKTtpKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgRmF2b3JpdGVzVURESVJlZ2lzdHJ5RWxlbWVudCBmYXZSZWdFbGVtZW50ID0gKEZhdm9yaXRlc1VERElSZWdpc3RyeUVsZW1lbnQpZmF2b3JpdGVSZWdpc3RyeUxpc3QuZWxlbWVudEF0KGkpOwotICAgICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI8JT1mYXZSZWdFbGVtZW50LmdldE5hbWUoKSU+Ij48JT1mYXZSZWdFbGVtZW50LmdldE5hbWUoKSU+Ci0gICAgICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgJT4KLSAgICAgICAgICAgICAgPC9zZWxlY3Q+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgICAgIDxsYWJlbCBmb3I9ImlucHV0X3JlZ2lzdHJ5X25hbWUiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1JFR0lTVFJZX05BTUUiKSU+PC9sYWJlbD4KLSAgICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgaWYgKCFvcGVuUmVnaXN0cnlUb29sLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlJFR0lTVFJZX05BTUUpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotICAgICAgICAgICAgICA8JQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImlucHV0X3JlZ2lzdHJ5X25hbWUiIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUkVHSVNUUllfTkFNRSU+IiBjbGFzcz0idGV4dGVudGVyIj4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTMwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iaW5wdXRfaW5xdWlyeV91cmwiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0lOUVVJUllfVVJMIiklPjwvbGFiZWw+Ci0gICAgICAgICAgICAgIDwlCi0gICAgICAgICAgICAgIGlmICghb3BlblJlZ2lzdHJ5VG9vbC5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5JTlFVSVJZX1VSTCkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgJT4KLSAgICAgICAgICAgICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci0gICAgICAgICAgICAgIDwlCi0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgJT4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iaW5wdXRfaW5xdWlyeV91cmwiIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuSU5RVUlSWV9VUkwlPiIgY2xhc3M9InRleHRlbnRlciI+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0gICAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvc2ltcGxlQ29tbW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICAgIDwvZm9ybT4KLSAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgICBzZXREZWZhdWx0cygpOwotICAgICAgPC9zY3JpcHQ+Ci0gICAgICAKLSAgICA8L2Rpdj4KLSAgPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUHJvY2Vzc1VERElGcmFtZXNldHNGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9Qcm9jZXNzVURESUZyYW1lc2V0c0Zvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjNlZGUwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9Qcm9jZXNzVURESUZyYW1lc2V0c0Zvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUFjdGlvbiIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImZvcm1GcmFtZU5hbWUiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoZm9ybUFjdGlvbi50b1N0cmluZygpKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgc3R5bGU9Im1hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjAiPgotICA8aW5wdXQgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLkZSQU1FX05BTUUlPiIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iPCU9Zm9ybUZyYW1lTmFtZSU+Ij4KLSAgPGlucHV0IG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuRlJBTUVTRVRfQ09MU19QRVJTUEVDVElWRV9DT05URU5UJT4iIHR5cGU9ImhpZGRlbiIgdmFsdWU9IjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKSU+Ij4KLSAgPGlucHV0IG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuRlJBTUVTRVRfUk9XU19BQ1RJT05TX0NPTlRBSU5FUiU+IiB0eXBlPSJoaWRkZW4iIHZhbHVlPSI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpJT4iPgotPC9mb3JtPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0RldGFpbHNGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdEZXRhaWxzRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkYmEyMjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0RldGFpbHNGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI2NyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDkxMiAgIDE0MTc5NiBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgRmF2b3JpdGVzUGVyc3BlY3RpdmUgZmF2UGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldEZhdm9yaXRlc1BlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIC8vIFRoZSBzZWxlY3RlZCBub2RlIG11c3QgYmUgYSByZWdpc3RyeSBub2RlLgotICAgTm9kZSByZWdpc3RyeU5vZGUgPSBuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgVG9vbE1hbmFnZXIgY3VycmVudFRvb2xNYW5hZ2VyID0gcmVnaXN0cnlOb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpOwotICAgRm9ybVRvb2wgZm9ybVRvb2wgPSAoRm9ybVRvb2wpKGN1cnJlbnRUb29sTWFuYWdlci5nZXRTZWxlY3RlZFRvb2woKSk7ICAgCi0gICBSZWdpc3RyeUVsZW1lbnQgcmVnRWxlbWVudCA9IChSZWdpc3RyeUVsZW1lbnQpcmVnaXN0cnlOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICByZWdFbGVtZW50LnJlZnJlc2hNZXRhKCk7Ci0lPgotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fVElUTEVfUkVHSVNUUllfREVUQUlMUyIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9mb3Jtc3VibWl0LmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL2RldGFpbHN0YWJsZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvcmVzdW1lcHJveHlsb2FkcGFnZS5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGZ1bmN0aW9uIHNldERlZmF1bHRzKCkKLSAgewotICAgIHZhciByZWdpc3RyeURldGFpbHNOYW1lVGFibGUgPSBnZXRUYWJsZSgicmVnaXN0cnlEZXRhaWxzTmFtZSIpOwotPCUKLSAgIFN0cmluZyBuYW1lID0gcmVnRWxlbWVudC5nZXROYW1lKCk7Ci0gICBib29sZWFuIGlzRXJyb3IgPSAhZm9ybVRvb2wuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUkVHSVNUUllfTkFNRSk7ICAgCi0lPgotICAgIGFkZERldGFpbHNTaW5nbGVJdGVtUm93KCJyZWdpc3RyeURldGFpbHNOYW1lIixmYWxzZSk7Ci0gICAgc2V0RGV0YWlsc05hbWVTaW5nbGVJdGVtUm93KCJyZWdpc3RyeURldGFpbHNOYW1lIiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKG5hbWUpJT4iKTsKLTwlCi0gICBpZiAoaXNFcnJvcikKLSAgIHsKLSU+Ci0gICAgaGlnaGxpZ2h0RXJyYW50Um93KHJlZ2lzdHJ5RGV0YWlsc05hbWVUYWJsZS5yb3dzW251bWJlck9mSGVhZGVyUm93c10sImVycmFudFJvdyIpOwotPCUKLSAgIH0KLSAgIAotICAgRW51bWVyYXRpb24gdXNlckRlZmluZWRDYXRlZ29yaWVzID0gcmVnRWxlbWVudC5nZXRVc2VyRGVmaW5lZENhdGVnb3JpZXMoKTsKLSAgIGJvb2xlYW4gY29udGFpbnNVc2VyRGVmaW5lZENhdGVnb3JpZXM7Ci0gICBpZiAodXNlckRlZmluZWRDYXRlZ29yaWVzICE9IG51bGwgJiYgdXNlckRlZmluZWRDYXRlZ29yaWVzLmhhc01vcmVFbGVtZW50cygpKQotICAgewotJT4KLSAgICB2YXIgcmVnaXN0cnlDYXRlZ29yaWVzVGFibGUgPSBnZXRUYWJsZSgicmVnaXN0cnlVc2VyRGVmaW5lZENhdGVnb3JpZXMiKTsKLTwlICAgCi0gICAgIGNvbnRhaW5zVXNlckRlZmluZWRDYXRlZ29yaWVzID0gdHJ1ZTsKLSAgICAgQXJyYXlMaXN0IHVzZXJEZWZpbmVkQ2F0ZWdvcmllc0xpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgIGRvCi0gICAgIHsKLSAgICAgICB1c2VyRGVmaW5lZENhdGVnb3JpZXNMaXN0LmFkZCh1c2VyRGVmaW5lZENhdGVnb3JpZXMubmV4dEVsZW1lbnQoKSk7Ci0gICAgIH0gd2hpbGUgKHVzZXJEZWZpbmVkQ2F0ZWdvcmllcy5oYXNNb3JlRWxlbWVudHMoKSk7Ci0gICAgIENhdGVnb3J5TW9kZWxbXSB1c2VyRGVmaW5lZENhdGVnb3JpZXNBcnJheSA9IG5ldyBDYXRlZ29yeU1vZGVsW3VzZXJEZWZpbmVkQ2F0ZWdvcmllc0xpc3Quc2l6ZSgpXTsKLSAgICAgdXNlckRlZmluZWRDYXRlZ29yaWVzTGlzdC50b0FycmF5KHVzZXJEZWZpbmVkQ2F0ZWdvcmllc0FycmF5KTsKLSAgICAgUXVpY2tTb3J0LnNvcnQodXNlckRlZmluZWRDYXRlZ29yaWVzQXJyYXksMCx1c2VyRGVmaW5lZENhdGVnb3JpZXNBcnJheS5sZW5ndGgtMSk7Ci0gICAgIFN0cmluZ0J1ZmZlciBmaWxlTmFtZSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgZm9yIChpbnQgaT0wO2k8dXNlckRlZmluZWRDYXRlZ29yaWVzQXJyYXkubGVuZ3RoO2krKykKLSAgICAgewotICAgICAgIG5hbWUgPSB1c2VyRGVmaW5lZENhdGVnb3JpZXNBcnJheVtpXS5nZXREaXNwbGF5TmFtZSgpOwotICAgICAgIFN0cmluZyB0TW9kZWxLZXkgPSB1c2VyRGVmaW5lZENhdGVnb3JpZXNBcnJheVtpXS5nZXRUTW9kZWxLZXkoKTsKLSAgICAgICBib29sZWFuIGNoZWNrZWQgPSB1c2VyRGVmaW5lZENhdGVnb3JpZXNBcnJheVtpXS5pc0NoZWNrZWQoKTsKLSAgICAgICBmaWxlTmFtZS5zZXRMZW5ndGgoMCk7Ci0gICAgICAgaWYgKHVzZXJEZWZpbmVkQ2F0ZWdvcmllc0FycmF5W2ldLmlzRGF0YUxvYWRlZCgpKQotICAgICAgICAgZmlsZU5hbWUuYXBwZW5kKHVzZXJEZWZpbmVkQ2F0ZWdvcmllc0FycmF5W2ldLmdldENhdGVnb3J5S2V5KCkpLmFwcGVuZCgiLnR4dCIpOwotICAgICAgIGVsc2UKLSAgICAgICAgIGZpbGVOYW1lLmFwcGVuZChjb250cm9sbGVyLmdldE1lc3NhZ2UoIlRBQkxFX0JMQU5LX1BMQUNFSE9MREVSIikpOwotICAgICAgIGJvb2xlYW4gaGFzRXJyb3IgPSAhZm9ybVRvb2wuaXNSb3dJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuVVNFUl9ERUZJTkVEX0NBVEVHT1JJRVMsdE1vZGVsS2V5KTsKLSU+Ci0gICAgYWRkRGV0YWlsc1VzZXJEZWZpbmVkQ2F0ZWdvcnlSb3coInJlZ2lzdHJ5VXNlckRlZmluZWRDYXRlZ29yaWVzIiwiPCU9dE1vZGVsS2V5JT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUobmFtZSklPiIsPCU9Y2hlY2tlZCU+LCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoZmlsZU5hbWUudG9TdHJpbmcoKSklPiIsPCU9aGFzRXJyb3IlPik7Ci08JQotICAgICAgIGlmIChoYXNFcnJvcikKLSAgICAgICB7Ci0lPgotICAgIGhpZ2hsaWdodEVycmFudFJvdyhyZWdpc3RyeUNhdGVnb3JpZXNUYWJsZS5yb3dzW251bWJlck9mSGVhZGVyUm93cys8JT1pJT5dLCJlcnJhbnRSb3ciKTsKLTwlICAgICAgIAotICAgICAgIH0KLSAgICAgfQotICAgfQotICAgZWxzZQotICAgICBjb250YWluc1VzZXJEZWZpbmVkQ2F0ZWdvcmllcyA9IGZhbHNlOyAgIAotJT4gICAgICAgCi0gICAgc2hvd01haW5Gb3JtKCk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIHNob3dNYWluRm9ybSgpCi0gIHsKLSAgICB2YXIgbG9hZFNjcmVlblRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvYWRTY3JlZW4iKTsKLSAgICBpZiAobG9hZFNjcmVlblRhYmxlLnJvd3MubGVuZ3RoID4gMCkKLSAgICAgIGxvYWRTY3JlZW5UYWJsZS5kZWxldGVSb3coMCk7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1haW5TY3JlZW4iKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIHByb2Nlc3NGb3JtKGZvcm0pCi0gIHsKLSAgICBpZiAoaGFuZGxlU3VibWl0KGZvcm0pKQotICAgIHsKLSAgICAgIHByb2Nlc3NEZXRhaWxzU2luZ2xlSXRlbVRhYmxlKCJyZWdpc3RyeURldGFpbHNOYW1lIiwiPCU9VURESUFjdGlvbklucHV0cy5OQU1FX01PRElGSUVEJT4iLCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1JFR0lTVFJZX05BTUUlPiIsZm9ybSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLSAgPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gICAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvYWN0aW9ucy9VcGRhdGVSZWdpc3RyeUFjdGlvbkpTUC5qc3AiKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgb25TdWJtaXQ9InJldHVybiBwcm9jZXNzRm9ybSh0aGlzKSI+Ci0gICAgICA8dGFibGUgaWQ9ImxvYWRTY3JlZW4iPgotICAgICAgICA8dHI+Ci0gICAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgICAgPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJNU0dfTE9BRF9JTl9QUk9HUkVTUyIpJT4KLSAgICAgICAgICA8L3RkPgotICAgICAgICA8L3RyPgotICAgICAgPC90YWJsZT4KLSAgICAgIDxkaXYgaWQ9Im1haW5TY3JlZW4iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLTwlCi0gICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAiaW1hZ2VzL2RldGFpbHNfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgIFN0cmluZyB0aXRsZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfUkVHSVNUUllfREVUQUlMUyIpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgICAgICAgPHRhYmxlPgotICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICAgICAgPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfREVUQUlMU19FRElUQUJMRSIscmVnaXN0cnlOb2RlLmdldE5vZGVOYW1lKCkpJT4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoInJlZ2lzdHJ5RGV0YWlsc05hbWUiKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9SRUdJU1RSWV9OQU1FIikpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9kZXRhaWxzU2luZ2xlSXRlbV90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgICAgIDx0YWJsZT4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgaGVpZ2h0PTIwPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgICAgIDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0lOUVVJUllfVVJMIiklPgotICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICA8L3RyPgotICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgICAgICAgIDwlPXJlZ0VsZW1lbnQuZ2V0SW5xdWlyeVVSTCgpJT4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLTwlCi0gICBTdHJpbmcgcHVibGlzaFVSTCA9IHJlZ0VsZW1lbnQuZ2V0UHVibGlzaFVSTCgpOwotICAgaWYgKFZhbGlkYXRvci52YWxpZGF0ZVVSTChwdWJsaXNoVVJMKSkKLSAgIHsKLSU+Ci0gICAgICAgIDx0YWJsZT4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgaGVpZ2h0PTIwPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgICAgIDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1BVQkxJU0hfVVJMIiklPgotICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICA8L3RyPgotICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgICAgICAgIDwlPXJlZ0VsZW1lbnQuZ2V0UHVibGlzaFVSTCgpJT4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLTwlCi0gICB9Ci0gICAKLSAgIGlmIChjb250YWluc1VzZXJEZWZpbmVkQ2F0ZWdvcmllcykKLSAgIHsKLSAgICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoInJlZ2lzdHJ5VXNlckRlZmluZWRDYXRlZ29yaWVzIik7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL3VkX2NhdGVnb3JpZXNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIH0KLSAgIGlmIChyZWdFbGVtZW50LmlzTG9nZ2VkSW4oKSkKLSAgIHsKLSU+Ci0gICAgICAgIDx0YWJsZT4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgaGVpZ2h0PTIwPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgICAgIDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1VTRVJJRCIpJT4KLSAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgICAgICA8JT1yZWdFbGVtZW50LmdldFVzZXJJZCgpJT4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLTwlCi0gICB9Ci0gICAKLSAgIFN0cmluZyByZWdpc3RyYXRpb25VUkwgPSByZWdFbGVtZW50LmdldFJlZ2lzdHJhdGlvblVSTCgpOwotICAgaWYgKFZhbGlkYXRvci52YWxpZGF0ZVVSTChyZWdpc3RyYXRpb25VUkwpKQotICAgewotJT4KLSAgICAgICAgPHRhYmxlPgotICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZCBoZWlnaHQ9MjA+Jm5ic3A7PC90ZD4KLSAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotICAgICAgICA8dGFibGU+Ci0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgPCU9ZmF2UGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9SRUdJU1RSWV9VUkwiLHJlZ2lzdHJhdGlvblVSTCklPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotPCUKLSAgIH0KLSU+Ci08anNwOnVzZUJlYW4gaWQ9ImN1cnJlbnRUb29sTWFuYWdlckhhc2giIGNsYXNzPSJqYXZhLnV0aWwuSGFzaHRhYmxlIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICBjdXJyZW50VG9vbE1hbmFnZXJIYXNoLnB1dChBY3Rpb25JbnB1dHMuQ1VSUkVOVF9UT09MX01BTkFHRVIsY3VycmVudFRvb2xNYW5hZ2VyKTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9vdGhlckFjdGlvbnMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9zaW1wbGVDb21tb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgICAgPC9kaXY+ICAgICAgCi0gICAgPC9mb3JtPgotICA8L2Rpdj4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBzZXREZWZhdWx0cygpOwotICByZXN1bWVQcm94eUxvYWRQYWdlKCk7ICAKLTwvc2NyaXB0PiAgICAKLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdGaW5kQnVzaW5lc3Nlc0FkdmFuY2VkRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnRmluZEJ1c2luZXNzZXNBZHZhbmNlZEZvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTA3ZDBmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdGaW5kQnVzaW5lc3Nlc0FkdmFuY2VkRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ic3ViUXVlcnlLZXlQcm9wZXJ0eSIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlN1YlF1ZXJ5S2V5UHJvcGVydHkiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0lPgotPGRpdiBpZD0iZmluZEJ1c2luZXNzZXNBZHZhbmNlZCI+Ci0gIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnMvUmVnRmluZEJ1c2luZXNzZXNBZHZhbmNlZEFjdGlvbkpTUC5qc3AiKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgb25TdWJtaXQ9InJldHVybiBwcm9jZXNzRmluZEJ1c2luZXNzZXNBZHZhbmNlZEZvcm0odGhpcykiPgotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZJT4iPgotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfR0VUJT4iPgotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuTkVXX1NVQlFVRVJZX0lOSVRJQVRFRCU+Ij4KLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLk5FV19TVUJRVUVSWV9RVUVSWV9JVEVNJT4iPgotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfTkFNRSU+Ij4KLSAgICA8dGFibGUgd2lkdGg9IjkwJSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9GSU5EX0FEVkFOQ0VEX0RFU0MiKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGhlaWdodD0zNSB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iaW5wdXRfZmluZF9idXNpbmVzc2VzX2FkdmFuY2Vfb3duZWQiIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfT1dORUQlPiIgb25DbGljaz0idG9nZ2xlQWR2YW5jZWRBdXRoZW50aWNhdGlvblNlY3Rpb24oPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVMlPix0aGlzLmNoZWNrZWQpIj4KLSAgICAgICAgICA8bGFiZWwgZm9yPSJpbnB1dF9maW5kX2J1c2luZXNzZXNfYWR2YW5jZV9vd25lZCI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfT1dORUQiKSU+PC9sYWJlbD4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoImZpbmRCdXNpbmVzc2VzQWR2YW5jZWRBdXRoZW50aWNhdGlvbiIpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9hdXRoZW50aWNhdGlvbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJmaW5kQnVzaW5lc3Nlc0FkdmFuY2VkTmFtZXMiKTsKLSAgIFN0cmluZ1tdIG5hbWVTcGVjaWZpY0luZm8gPSB7IkZPUk1fTEFCRUxfTkFNRVMiLCJGT1JNX0xBQkVMX05BTUUiLEJvb2xlYW4uRkFMU0UudG9TdHJpbmcoKX07Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMobmFtZVNwZWNpZmljSW5mbyk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2xhbmd1YWdlSW5wdXRfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgiZmluZEJ1c2luZXNzZXNBZHZhbmNlZElkZW50aWZpZXJzIik7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2lkZW50aWZpZXJzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoImZpbmRCdXNpbmVzc2VzQWR2YW5jZWRDYXRlZ29yaWVzIik7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2NhdGVnb3JpZXNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIFN0cmluZ1tdIHNpU3BlY2lmaWNJbmZvID0geyJGT1JNX0xBQkVMX1NFUlZJQ0VfSU5URVJGQUNFUyIsQm9vbGVhbi5GQUxTRS50b1N0cmluZygpLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVMpLCJmaW5kQnVzaW5lc3Nlc0FkdmFuY2VkIixVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX1NFUlZJQ0VfSU5URVJGQUNFU307Ci0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoImZpbmRCdXNpbmVzc2VzQWR2YW5jZWRTZXJ2aWNlSW50ZXJmYWNlcyIpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKHNpU3BlY2lmaWNJbmZvKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvdWRkaU9iamVjdHNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgiZmluZEJ1c2luZXNzZXNBZHZhbmNlZERpc2NvdmVyeVVSTHMiKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhuZXcgQm9vbGVhbihmYWxzZSkpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9kaXNjb3ZlcnlVUkxzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoImZpbmRCdXNpbmVzc2VzQWR2YW5jZWRGaW5kUXVhbGlmaWVycyIpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9maW5kUXVhbGlmaWVyc190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJmaW5kQnVzaW5lc3Nlc0FkdmFuY2VkQ29tbW9uIik7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2FkdmFuY2VkQ29tbW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvc2ltcGxlQ29tbW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgPC9mb3JtPgotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnRmluZEJ1c2luZXNzZXNGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdGaW5kQnVzaW5lc3Nlc0Zvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTE0ODM0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdGaW5kQnVzaW5lc3Nlc0Zvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4KLTxkaXYgaWQ9ImZpbmRCdXNpbmVzc2VzIiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gIDxmb3JtIG5hbWU9ImZpbmRCdXNpbmVzc2VzU3R5bGUiPgotICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9TRUFSQ0hfVFlQRSIpJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZD4KLSAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIGlkPSJyYWRpb19maW5kX2J1c2luZXNzX3NpbXBsZSIgY2xhc3M9InJhZGlvIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0JVU0lORVNTRVMlPiIgb25DbGljaz0ic2hvd0ZpbmRGb3JtKDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTJT4sPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TSU1QTEUlPikiPjxsYWJlbCBmb3I9InJhZGlvX2ZpbmRfYnVzaW5lc3Nfc2ltcGxlIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9SQURJT19TSU1QTEUiKSU+PC9sYWJlbD4KLSAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIGlkPSJyYWRpb19maW5kX2J1c2luZXNzX2FkdmFuY2UiIGNsYXNzPSJyYWRpbyIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9CVVNJTkVTU0VTJT4iIG9uQ2xpY2s9InNob3dGaW5kRm9ybSg8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUyU+LDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQURWQU5DRUQlPikiPjxsYWJlbCBmb3I9InJhZGlvX2ZpbmRfYnVzaW5lc3NfYWR2YW5jZSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fUkFESU9fQURWQU5DRUQiKSU+PC9sYWJlbD4KLSAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIGlkPSJyYWRpb19maW5kX2J1c2luZXNzX3V1aWQiIGNsYXNzPSJyYWRpbyIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9CVVNJTkVTU0VTJT4iIG9uQ2xpY2s9InNob3dGaW5kRm9ybSg8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUyU+LDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfVVVJRCU+KSI+PGxhYmVsIGZvcj0icmFkaW9fZmluZF9idXNpbmVzc191dWlkIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9SQURJT19VVUlEIiklPjwvbGFiZWw+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gIDwvZm9ybT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9SZWdGaW5kQnVzaW5lc3Nlc1NpbXBsZUZvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL1JlZ0ZpbmRCdXNpbmVzc2VzQWR2YW5jZWRGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgiZmluZEJ1c2luZXNzVVVJRCIpOwotICAgU3RyaW5nW10gb3RoZXJQcm9wZXJ0aWVzID0geyJ1ZGRpL2FjdGlvbnMvUmVnRmluZEJ1c2luZXNzVVVJREFjdGlvbkpTUC5qc3AiLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9CVVNJTkVTU19LRVksIkZPUk1fTEFCRUxfRklORF9CVVNJTkVTU19VVUlEX0RFU0MifTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhvdGhlclByb3BlcnRpZXMpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9SZWdGaW5kVVVJREZvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnRmluZEJ1c2luZXNzZXNTaW1wbGVGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdGaW5kQnVzaW5lc3Nlc1NpbXBsZUZvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzdlMzRhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdGaW5kQnVzaW5lc3Nlc1NpbXBsZUZvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic3ViUXVlcnlLZXlQcm9wZXJ0eSIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlN1YlF1ZXJ5S2V5UHJvcGVydHkiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIC8vIHNlbGVjdGVkTm9kZSBjb3VsZCBiZSB0aGUgcmVnaXN0cnkgb3IgcXVlcnkgbm9kZXMuCi0gICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICBGb3JtVG9vbCBmb3JtVG9vbCA9IChGb3JtVG9vbCkoc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpKTsKLSAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJID0gKChNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSlmb3JtVG9vbCkuZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHN1YlF1ZXJ5S2V5UHJvcGVydHkuZ2V0U3ViUXVlcnlLZXkoKSk7Ci0lPgotPGRpdiBpZD0iZmluZEJ1c2luZXNzZXNTaW1wbGUiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvYWN0aW9ucy9SZWdGaW5kQnVzaW5lc3Nlc1NpbXBsZUFjdGlvbkpTUC5qc3AiKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgb25TdWJtaXQ9InJldHVybiBwcm9jZXNzRm9ybSh0aGlzKSI+Ci0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVklPiI+Ci0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9OQU1FJT4iPgotICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MTAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgIDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0ZJTkRfQlVTSU5FU1NFU19TSU1QTEVfREVTQyIpJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MzAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgIDxsYWJlbCBmb3I9ImlucHV0X2ZpbmRfYnVzaW5lc3Nlc19zaW1wbGVfbmFtZSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTkFNRSIpJT48L2xhYmVsPgotPCUKLSAgIGlmICghZm9ybVRvb2xQSS5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfQlVTSU5FU1NfTkFNRSkpCi0gICB7Ci0lPgotICAgICAgICAgIDwlPUhUTUxVdGlscy5yZWRBc3RlcmlzaygpJT4KLTwlCi0gICB9Ci0lPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkPiA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImlucHV0X2ZpbmRfYnVzaW5lc3Nlc19zaW1wbGVfbmFtZSIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfQlVTSU5FU1NfTkFNRSU+IiBjbGFzcz0idGV4dGVudGVyIj4gPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvc2ltcGxlQ29tbW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgPC9mb3JtPgotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnRmluZEZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0ZpbmRGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjViMWY5My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnRmluZEZvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsNzA4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDI3ICAgMTI3NDQzIGplc3BlckBzZWxza2FiZXQub3JnIC0gSmVzcGVyIFMgTW9sbGVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGouZGF0YXR5cGUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai5kYXRhdHlwZS5idXNpbmVzcy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudWRkaTRqLmRhdGF0eXBlLnNlcnZpY2UuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgLy8gc2VsZWN0ZWROb2RlIGNvdWxkIGJlIHRoZSByZWdpc3RyeSBvciBxdWVyeSBub2Rlcy4KLSAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgIEZvcm1Ub29sIGZvcm1Ub29sID0gKEZvcm1Ub29sKShzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotJT4KLTxqc3A6dXNlQmVhbiBpZD0ic3ViUXVlcnlLZXlQcm9wZXJ0eSIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlN1YlF1ZXJ5S2V5UHJvcGVydHkiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gICBTdHJpbmcgc3ViUXVlcnlLZXkgPSAoU3RyaW5nKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZKTsKLSAgIHN1YlF1ZXJ5S2V5UHJvcGVydHkuc2V0U3ViUXVlcnlLZXkoc3ViUXVlcnlLZXkpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08JQotICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkgPSAoKE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlKWZvcm1Ub29sKS5nZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXlQcm9wZXJ0eS5nZXRTdWJRdWVyeUtleSgpKTsKLSAgIFVERElNYWluTm9kZSB1ZGRpTWFpbk5vZGUgPSAoVURESU1haW5Ob2RlKW5hdmlnYXRvck1hbmFnZXIuZ2V0Um9vdE5vZGUoKTsKLSAgIE5vZGUgcmVnTm9kZSA9IHVkZGlNYWluTm9kZS5nZXRSZWdpc3RyeU5vZGUoc2VsZWN0ZWROb2RlKTsKLSAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0lPgotCi08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9SRUdJU1RSWV9GSU5EIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL2Zvcm1zdWJtaXQuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL3RhYmxlcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpdGFibGVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICB2YXIgc2VjdGlvbklkcyA9IFsiZmluZEJ1c2luZXNzZXMiLCJmaW5kU2VydmljZXMiLCJmaW5kU2VydmljZUludGVyZmFjZXMiXTsKLSAgdmFyIGZpbmRCdXNpbmVzc2VzU2VjdGlvbklkcyA9IFsiZmluZEJ1c2luZXNzZXNTaW1wbGUiLCJmaW5kQnVzaW5lc3Nlc0FkdmFuY2VkIiwiZmluZEJ1c2luZXNzVVVJRCJdOwotICB2YXIgZmluZFNlcnZpY2VzU2VjdGlvbklkcyA9IFsiZmluZFNlcnZpY2VzU2ltcGxlIiwiZmluZFNlcnZpY2VzQWR2YW5jZWQiLCJmaW5kU2VydmljZVVVSUQiXTsKLSAgdmFyIGZpbmRTZXJ2aWNlSW50ZXJmYWNlc1NlY3Rpb25JZHMgPSBbImZpbmRTZXJ2aWNlSW50ZXJmYWNlc1NpbXBsZSIsImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkIiwiZmluZFNlcnZpY2VJbnRlcmZhY2VVVUlEIl07Ci0gIHZhciBzdHlsZUZvcm1zID0gWyJmaW5kQnVzaW5lc3Nlc1N0eWxlIiwiZmluZFNlcnZpY2VzU3R5bGUiLCJmaW5kU2VydmljZUludGVyZmFjZXNTdHlsZSJdOwotICB2YXIgYXV0aGVudGljYXRpb25TZWN0aW9uSWRzID0gWyJmaW5kQnVzaW5lc3Nlc0FkdmFuY2VkQXV0aGVudGljYXRpb24iLCJmaW5kU2VydmljZXNBZHZhbmNlZEF1dGhlbnRpY2F0aW9uIiwiZmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRBdXRoZW50aWNhdGlvbiJdOwotCi0gIGZ1bmN0aW9uIHZhbGlkYXRlUXVlcnlOYW1lKCkKLSAgewotPCUKLSAgIFN0cmluZyBzdWJRdWVyeUtleVZhbHVlID0gc3ViUXVlcnlLZXlQcm9wZXJ0eS5nZXRTdWJRdWVyeUtleSgpOwotICAgYm9vbGVhbiBpc1N1YlF1ZXJ5ID0gKHN1YlF1ZXJ5S2V5VmFsdWUgIT0gbnVsbCAmJiBzdWJRdWVyeUtleVZhbHVlLmxlbmd0aCgpID4gMCk7Ci0lPiAgIAotICAgIGlmICg8JT1pc1N1YlF1ZXJ5JT4pCi0gICAgewotICAgICAgLy8gU3VicXVlcmllcyBtdXN0IGhhdmUgYSBuYW1lIHdoaWNoIGlzIGRpZmZlcmVudCBmcm9tIHRoYXQgb2YgdGhlIGN1cnJlbnQgcXVlcnkgb3IgdGhlIGNsb3Nlc3QgcXVlcnkgZW5jbG9zaW5nIHRoaXMgb2JqZWN0LgotPCUKLSAgIFN0cmluZyBjdXJyZW50UXVlcnlOYW1lID0gIiI7Ci0gICBpZiAoc2VsZWN0ZWROb2RlIGluc3RhbmNlb2YgUXVlcnlOb2RlKQotICAgICBjdXJyZW50UXVlcnlOYW1lID0gc2VsZWN0ZWROb2RlLmdldE5vZGVOYW1lKCk7Ci0gICBlbHNlIGlmIChzZWxlY3RlZE5vZGUgaW5zdGFuY2VvZiBCdXNpbmVzc05vZGUpCi0gICB7Ci0gICAgIE5vZGUgcGFyZW50Tm9kZSA9IHNlbGVjdGVkTm9kZS5nZXRQYXJlbnQoKTsKLSAgICAgaWYgKHBhcmVudE5vZGUgaW5zdGFuY2VvZiBRdWVyeU5vZGUpCi0gICAgICAgY3VycmVudFF1ZXJ5TmFtZSA9IHBhcmVudE5vZGUuZ2V0Tm9kZU5hbWUoKTsKLSAgIH0KLSU+ICAgIAotICAgICAgdmFyIHF1ZXJ5TmFtZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJxdWVyeU5hbWUiKS52YWx1ZTsKLSAgICAgIGlmIChxdWVyeU5hbWUgPT0gIjwlPUhUTUxVdGlscy5KU01hbmdsZShjdXJyZW50UXVlcnlOYW1lKSU+IikKLSAgICAgIHsKLSAgICAgICAgYWxlcnQoIjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfUVVFUllfTkFNRV9DT05GTElDVCIpJT4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgZnVuY3Rpb24gcHJvY2Vzc0Zvcm0oZm9ybSkKLSAgewotICAgIGlmICghaGFuZGxlU3VibWl0KGZvcm0pKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghdmFsaWRhdGVRdWVyeU5hbWUoKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBmb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZJT4udmFsdWUgPSAiPCU9c3ViUXVlcnlLZXlQcm9wZXJ0eS5nZXRTdWJRdWVyeUtleSgpJT4iOwotICAgIGZvcm0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9OQU1FJT4udmFsdWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicXVlcnlOYW1lIikudmFsdWU7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBmdW5jdGlvbiBwcm9jZXNzRmluZEJ1c2luZXNzZXNBZHZhbmNlZEZvcm0oZm9ybSkKLSAgewotICAgIGlmIChwcm9jZXNzRm9ybShmb3JtKSkKLSAgICB7Ci0gICAgICBwcm9jZXNzTGFuZ3VhZ2VJbnB1dFRhYmxlKCJmaW5kQnVzaW5lc3Nlc0FkdmFuY2VkTmFtZXMiLCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX05BTUVfTEFOR1VBR0UlPiIsIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTkFNRSU+Iixmb3JtKTsKLSAgICAgIHByb2Nlc3NOYW1lRmluZFF1YWxpZmllcnMoImZpbmRCdXNpbmVzc2VzQWR2YW5jZWROYW1lcyIsZm9ybSk7Ci0gICAgICBwcm9jZXNzSWRlbnRpZmllclRhYmxlKCJmaW5kQnVzaW5lc3Nlc0FkdmFuY2VkSWRlbnRpZmllcnMiLGZvcm0pOwotICAgICAgcHJvY2Vzc0NhdGVnb3J5VGFibGUoImZpbmRCdXNpbmVzc2VzQWR2YW5jZWRDYXRlZ29yaWVzIixmb3JtLHRydWUpOwotICAgICAgcHJvY2Vzc1Jlc3VsdFRhYmxlKCJmaW5kQnVzaW5lc3Nlc0FkdmFuY2VkU2VydmljZUludGVyZmFjZXMiLCI8JT1VRERJQWN0aW9uSW5wdXRzLk5PREVJRF9TRVJWSUNFX0lOVEVSRkFDRSU+Iixmb3JtLGZhbHNlKTsKLSAgICAgIHByb2Nlc3NEaXNjb3ZlcnlVUkxUYWJsZSgiZmluZEJ1c2luZXNzZXNBZHZhbmNlZERpc2NvdmVyeVVSTHMiLGZvcm0pOwotICAgICAgcHJvY2Vzc0ZpbmRRdWFsaWZpZXJUYWJsZSgiZmluZEJ1c2luZXNzZXNBZHZhbmNlZEZpbmRRdWFsaWZpZXJzIixmb3JtKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBmdW5jdGlvbiBwcm9jZXNzRmluZFNlcnZpY2VzQWR2YW5jZWRGb3JtKGZvcm0pCi0gIHsKLSAgICBpZiAocHJvY2Vzc0Zvcm0oZm9ybSkpCi0gICAgewotICAgICAgcHJvY2Vzc1Jlc3VsdFRhYmxlKCJmaW5kU2VydmljZXNBZHZhbmNlZEJ1c2luZXNzIiwiPCU9VURESUFjdGlvbklucHV0cy5OT0RFSURfQlVTSU5FU1MlPiIsZm9ybSxmYWxzZSk7Ci0gICAgICBwcm9jZXNzTGFuZ3VhZ2VJbnB1dFRhYmxlKCJmaW5kU2VydmljZXNBZHZhbmNlZE5hbWVzIiwiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9OQU1FX0xBTkdVQUdFJT4iLCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX05BTUUlPiIsZm9ybSk7Ci0gICAgICBwcm9jZXNzTmFtZUZpbmRRdWFsaWZpZXJzKCJmaW5kU2VydmljZXNBZHZhbmNlZE5hbWVzIixmb3JtKTsKLSAgICAgIHByb2Nlc3NDYXRlZ29yeVRhYmxlKCJmaW5kU2VydmljZXNBZHZhbmNlZENhdGVnb3JpZXMiLGZvcm0sZmFsc2UpOwotICAgICAgcHJvY2Vzc1Jlc3VsdFRhYmxlKCJmaW5kU2VydmljZXNBZHZhbmNlZFNlcnZpY2VJbnRlcmZhY2VzIiwiPCU9VURESUFjdGlvbklucHV0cy5OT0RFSURfU0VSVklDRV9JTlRFUkZBQ0UlPiIsZm9ybSxmYWxzZSk7Ci0gICAgICBwcm9jZXNzRmluZFF1YWxpZmllclRhYmxlKCJmaW5kU2VydmljZXNBZHZhbmNlZEZpbmRRdWFsaWZpZXJzIixmb3JtKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBmdW5jdGlvbiBwcm9jZXNzRmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRGb3JtKGZvcm0pCi0gIHsKLSAgICBpZiAocHJvY2Vzc0Zvcm0oZm9ybSkpCi0gICAgewotICAgICAgcHJvY2Vzc1Jlc3VsdFRhYmxlKCJmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZFNlcnZpY2UiLCI8JT1VRERJQWN0aW9uSW5wdXRzLk5PREVJRF9TRVJWSUNFJT4iLGZvcm0sZmFsc2UpOwotICAgICAgcHJvY2Vzc05hbWVGaW5kUXVhbGlmaWVycygiZmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWROYW1lIixmb3JtKTsKLSAgICAgIHByb2Nlc3NJZGVudGlmaWVyVGFibGUoImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkSWRlbnRpZmllcnMiLGZvcm0pOwotICAgICAgcHJvY2Vzc0NhdGVnb3J5VGFibGUoImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkQ2F0ZWdvcmllcyIsZm9ybSxmYWxzZSk7Ci0gICAgICBwcm9jZXNzRmluZFF1YWxpZmllclRhYmxlKCJmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZEZpbmRRdWFsaWZpZXJzIixmb3JtKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBmdW5jdGlvbiBzZXREZWZhdWx0cygpCi0gIHsKLSAgICAvLyBTZXQgdGhlIHF1ZXJ5IG5hbWUKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicXVlcnlOYW1lIikudmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX05BTUUpKSU+IjsKLSAgICB2YXIgc2VhcmNoRm9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNlYXJjaEZvciIpOwotICAgIHNlYXJjaEZvci5zZWxlY3RlZEluZGV4ID0gPCU9Zm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU0pJT47Ci0gICAgc2V0RGVmYXVsdHNGb3JGaW5kQnVzaW5lc3Nlc0Zvcm1zKCk7Ci0gICAgc2V0RGVmYXVsdHNGb3JGaW5kU2VydmljZXNGb3JtcygpOwotICAgIHNldERlZmF1bHRzRm9yRmluZFNlcnZpY2VJbnRlcmZhY2VzRm9ybXMoKTsKLSAgICBzaG93TWFpbkZvcm0oc2VhcmNoRm9yLnZhbHVlKTsKLSAgfQotCi0gIGZ1bmN0aW9uIHNldEF1dGhlbnRpY2F0aW9uU2VjdGlvbkRlZmF1bHRzKGFkdmFuY2VkRm9ybSxxdWVyeUl0ZW1JbmRleCxpc093bmVkQ2hlY2tlZCkKLSAgewotPCUKLSAgIFN0cmluZyBwdWJsaXNoVVJMID0gKFN0cmluZylmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgIFN0cmluZyB1c2VySWQgPSAoU3RyaW5nKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKTsKLSAgIFN0cmluZyBwYXNzd29yZCA9IChTdHJpbmcpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCk7Ci0lPgotICAgIGFkdmFuY2VkRm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX09XTkVEJT4uY2hlY2tlZCA9IGlzT3duZWRDaGVja2VkOwotICAgIGFkdmFuY2VkRm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHB1Ymxpc2hVUkwpJT4iOwotICAgIGFkdmFuY2VkRm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1c2VySWQpJT4iOwotICAgIGFkdmFuY2VkRm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHBhc3N3b3JkKSU+IjsKLSAgICB0b2dnbGVBZHZhbmNlZEF1dGhlbnRpY2F0aW9uU2VjdGlvbihxdWVyeUl0ZW1JbmRleCxpc093bmVkQ2hlY2tlZCk7Ci0gIH0KLQotICBmdW5jdGlvbiBzZXRBZHZhbmNlZENvbW1vblNlY3Rpb25EZWZhdWx0cyhmb3JtLG1heFNlYXJjaFNldCxtYXhSZXN1bHRzKQotICB7Ci0gICAgZm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX01BWF9TRUFSQ0hfU0VUJT4udmFsdWUgPSBtYXhTZWFyY2hTZXQ7Ci0gICAgZm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX01BWF9SRVNVTFRTJT4udmFsdWUgPSBtYXhSZXN1bHRzOwotICB9Ci0KLSAgZnVuY3Rpb24gc2V0RGVmYXVsdHNGb3JGaW5kQnVzaW5lc3Nlc0Zvcm1zKCkKLSAgewotICAgIC8vIEluaXRpYWxpemUgdGhlIGZpbmRCdXNpbmVzc2VzIGZvcm0uCi08JQotICAgU3RyaW5nIGZpbmRCdXNpbmVzc2VzU3R5bGVJbmRleCA9IChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0JVU0lORVNTRVMpOwotJT4KLSAgICBkb2N1bWVudC5mb3Jtc1tzdHlsZUZvcm1zWzwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTJT5dXS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0JVU0lORVNTRVMlPls8JT1maW5kQnVzaW5lc3Nlc1N0eWxlSW5kZXglPl0uY2hlY2tlZCA9IHRydWU7Ci0gICAgdmFyIGZpbmRCdXNpbmVzc2VzU2ltcGxlU2VjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZpbmRCdXNpbmVzc2VzU2VjdGlvbklkc1s8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NJTVBMRSU+XSk7Ci0gICAgdmFyIGZpbmRCdXNpbmVzc2VzU2ltcGxlRm9ybSA9IGZpbmRCdXNpbmVzc2VzU2ltcGxlU2VjdGlvbi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZm9ybSIpLml0ZW0oMCk7Ci0gICAgZmluZEJ1c2luZXNzZXNTaW1wbGVGb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX0JVU0lORVNTX05BTUUlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoKFN0cmluZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX0JVU0lORVNTX05BTUUpKSU+IjsKLQotICAgIC8vIEFkdmFuY2VkIGZvcm0gZGV0YWlscy4KLSAgICB2YXIgZmluZEJ1c2luZXNzZXNBZHZhbmNlZFNlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmaW5kQnVzaW5lc3Nlc1NlY3Rpb25JZHNbPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9BRFZBTkNFRCU+XSk7Ci0gICAgdmFyIGZpbmRCdXNpbmVzc2VzQWR2YW5jZWRGb3JtID0gZmluZEJ1c2luZXNzZXNBZHZhbmNlZFNlY3Rpb24uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImZvcm0iKS5pdGVtKDApOwotICAgIHZhciBpc093bmVkQ2hlY2tlZCA9IDwlPShmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfT1dORUQpICE9IG51bGwpJT47Ci0gICAgc2V0QXV0aGVudGljYXRpb25TZWN0aW9uRGVmYXVsdHMoZmluZEJ1c2luZXNzZXNBZHZhbmNlZEZvcm0sPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVMlPixpc093bmVkQ2hlY2tlZCk7Ci08JQotICAgVmVjdG9yIGJ1c05hbWVWZWN0b3IgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19OQU1FUyk7Ci0gICBpZiAoYnVzTmFtZVZlY3RvciAhPSBudWxsKQotICAgewotICAgICBmb3IgKGludCBpPTA7aTxidXNOYW1lVmVjdG9yLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBOYW1lIG5hbWUgPSAoTmFtZSlidXNOYW1lVmVjdG9yLmVsZW1lbnRBdChpKTsKLSU+Ci0gICAgYWRkTGFuZ3VhZ2VJbnB1dFJvdygiZmluZEJ1c2luZXNzZXNBZHZhbmNlZE5hbWVzIiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfTkFNRV9URVhUX1ZBTFVFIikpJT4iKTsKLSAgICBzZXRMYW5ndWFnZUlucHV0Um93U2V0dGluZ3MoImZpbmRCdXNpbmVzc2VzQWR2YW5jZWROYW1lcyIsPCU9aSU+LCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUobmFtZS5nZXRMYW5nKCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUobmFtZS5nZXRUZXh0KCkpJT4iKTsKLTwlCi0gICAgIH0KLSAgIH0KLQotICAgSWRlbnRpZmllckJhZyBidXNJZEJhZyA9IChJZGVudGlmaWVyQmFnKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19JREVOVElGSUVSUyk7Ci0gICBpZiAoYnVzSWRCYWcgIT0gbnVsbCkKLSAgIHsKLSAgICAgVmVjdG9yIGtleWVkUmVmZXJlbmNlVmVjdG9yID0gYnVzSWRCYWcuZ2V0S2V5ZWRSZWZlcmVuY2VWZWN0b3IoKTsKLSAgICAgZm9yIChpbnQgaT0wO2k8a2V5ZWRSZWZlcmVuY2VWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gKEtleWVkUmVmZXJlbmNlKWtleWVkUmVmZXJlbmNlVmVjdG9yLmVsZW1lbnRBdChpKTsKLSU+Ci0gICAgYWRkSWRlbnRpZmllclJvdygiZmluZEJ1c2luZXNzZXNBZHZhbmNlZElkZW50aWZpZXJzIik7Ci0gICAgc2V0SWRlbnRpZmllclJvd1NldHRpbmdzKCJmaW5kQnVzaW5lc3Nlc0FkdmFuY2VkSWRlbnRpZmllcnMiLDwlPWklPiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldFRNb2RlbEtleSgpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldEtleU5hbWUoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRLZXlWYWx1ZSgpKSU+Iik7Ci08JQotICAgICB9Ci0gICB9Ci0KLSAgIENhdGVnb3J5QmFnIGJ1c0NhdEJhZyA9IChDYXRlZ29yeUJhZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfQ0FURUdPUklFUyk7Ci0gICBpZiAoYnVzQ2F0QmFnICE9IG51bGwpCi0gICB7Ci0gICAgIFZlY3RvciBrZXllZFJlZmVyZW5jZVZlY3RvciA9IGJ1c0NhdEJhZy5nZXRLZXllZFJlZmVyZW5jZVZlY3RvcigpOwotICAgICBmb3IgKGludCBpPTA7aTxrZXllZFJlZmVyZW5jZVZlY3Rvci5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSAoS2V5ZWRSZWZlcmVuY2Upa2V5ZWRSZWZlcmVuY2VWZWN0b3IuZWxlbWVudEF0KGkpOwotJT4KLSAgICBhZGRDYXRlZ29yeVJvdygiZmluZEJ1c2luZXNzZXNBZHZhbmNlZENhdGVnb3JpZXMiKTsKLSAgICBzZXRDYXRlZ29yeVJvd1NldHRpbmdzKCJmaW5kQnVzaW5lc3Nlc0FkdmFuY2VkQ2F0ZWdvcmllcyIsPCU9aSU+LCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0VE1vZGVsS2V5KCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0S2V5TmFtZSgpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldEtleVZhbHVlKCkpJT4iKTsKLTwlCi0gICAgIH0KLSAgIH0KLQotICAgVmVjdG9yIGJ1c1NlcnZpY2VJbnRlcmZhY2VzID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfU0VSVklDRV9JTlRFUkZBQ0VTKTsKLSAgIFZlY3RvciBidXNTZXJ2aWNlSW50ZXJmYWNlc0NvcHkgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19TRVJWSUNFX0lOVEVSRkFDRVNfQ09QWSk7Ci0gICBpZiAoYnVzU2VydmljZUludGVyZmFjZXMgIT0gbnVsbCkKLSAgIHsKLSAgICAgaWYgKGJ1c1NlcnZpY2VJbnRlcmZhY2VzQ29weSA9PSBudWxsKQotICAgICAgIGJ1c1NlcnZpY2VJbnRlcmZhY2VzQ29weSA9IG5ldyBWZWN0b3IoKTsKLSAgICAgZWxzZQotICAgICAgIGJ1c1NlcnZpY2VJbnRlcmZhY2VzQ29weS5yZW1vdmVBbGxFbGVtZW50cygpOwotICAgICBmb3IgKGludCBpPTA7aTxidXNTZXJ2aWNlSW50ZXJmYWNlcy5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpYnVzU2VydmljZUludGVyZmFjZXMuZWxlbWVudEF0KGkpOwotICAgICAgIGludCB0YXJnZXROb2RlSWQgPSBsaXN0RWxlbWVudC5nZXRUYXJnZXROb2RlSWQoKTsKLSAgICAgICBpbnQgdGFyZ2V0VG9vbElkID0gbGlzdEVsZW1lbnQuZ2V0VGFyZ2V0VG9vbElkKCk7Ci0gICAgICAgaW50IHRhcmdldFZpZXdJZCA9IGxpc3RFbGVtZW50LmdldFRhcmdldFZpZXdJZCgpOwotICAgICAgIFN0cmluZyB1cmwgPSBTZWxlY3RTdWJRdWVyeUl0ZW1BY3Rpb24uZ2V0QWN0aW9uTGluayh0YXJnZXROb2RlSWQsdGFyZ2V0VG9vbElkLHRhcmdldFZpZXdJZCxzdWJRdWVyeUtleVByb3BlcnR5LmdldFN1YlF1ZXJ5S2V5KCksVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19TRVJWSUNFX0lOVEVSRkFDRVMsaSxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTLGZhbHNlKTsKLSAgICAgICBUTW9kZWwgdE1vZGVsID0gKFRNb2RlbClsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICBidXNTZXJ2aWNlSW50ZXJmYWNlc0NvcHkuYWRkRWxlbWVudChidXNTZXJ2aWNlSW50ZXJmYWNlcy5lbGVtZW50QXQoaSkpOwotJT4KLSAgICBhZGRSZXN1bHRSb3coImZpbmRCdXNpbmVzc2VzQWR2YW5jZWRTZXJ2aWNlSW50ZXJmYWNlcyIsPCU9dGFyZ2V0Tm9kZUlkJT4sIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCh1cmwpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHRNb2RlbC5nZXROYW1lU3RyaW5nKCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodE1vZGVsLmdldERlZmF1bHREZXNjcmlwdGlvblN0cmluZygpKSU+Iik7Ci08JQotICAgICB9Ci0gICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19TRVJWSUNFX0lOVEVSRkFDRVNfQ09QWSxidXNTZXJ2aWNlSW50ZXJmYWNlc0NvcHkpOwotICAgfQotICAgZWxzZQotICAgewotICAgICBidXNTZXJ2aWNlSW50ZXJmYWNlcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgYnVzU2VydmljZUludGVyZmFjZXNDb3B5ID0gbmV3IFZlY3RvcigpOwotICAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfU0VSVklDRV9JTlRFUkZBQ0VTLGJ1c1NlcnZpY2VJbnRlcmZhY2VzKTsKLSAgICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX1NFUlZJQ0VfSU5URVJGQUNFU19DT1BZLGJ1c1NlcnZpY2VJbnRlcmZhY2VzQ29weSk7Ci0gICB9Ci0KLSAgIERpc2NvdmVyeVVSTHMgYnVzRGlzY292ZXJ5VVJMcyA9IChEaXNjb3ZlcnlVUkxzKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ESVNDT1ZFUllVUkxTKTsKLSAgIGlmIChidXNEaXNjb3ZlcnlVUkxzICE9IG51bGwpCi0gICB7Ci0gICAgIFZlY3RvciBkaXNjb3ZlcnlVUkxWZWN0b3IgPSBidXNEaXNjb3ZlcnlVUkxzLmdldERpc2NvdmVyeVVSTFZlY3RvcigpOwotICAgICBmb3IgKGludCBpPTA7aTxkaXNjb3ZlcnlVUkxWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIERpc2NvdmVyeVVSTCBkaXNjb3ZlcnlVUkwgPSAoRGlzY292ZXJ5VVJMKWRpc2NvdmVyeVVSTFZlY3Rvci5lbGVtZW50QXQoaSk7Ci0lPgotICAgIGFkZERpc2NvdmVyeVVSTFJvdygiZmluZEJ1c2luZXNzZXNBZHZhbmNlZERpc2NvdmVyeVVSTHMiKTsKLSAgICBzZXREaXNjb3ZlcnlVUkxSb3dTZXR0aW5ncygiZmluZEJ1c2luZXNzZXNBZHZhbmNlZERpc2NvdmVyeVVSTHMiLDwlPWklPiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGRpc2NvdmVyeVVSTC5nZXRUZXh0KCkpJT4iKTsKLTwlCi0gICAgIH0KLSAgIH0KLQotICAgRmluZFF1YWxpZmllcnMgYnVzRmluZFF1YWxpZmllcnMgPSAoRmluZFF1YWxpZmllcnMpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0ZJTkRRVUFMSUZJRVJTKTsKLSAgIGlmIChidXNGaW5kUXVhbGlmaWVycyAhPSBudWxsKQotICAgewotICAgICBWZWN0b3IgZmluZFF1YWxpZmllclZlY3RvciA9IGJ1c0ZpbmRRdWFsaWZpZXJzLmdldEZpbmRRdWFsaWZpZXJWZWN0b3IoKTsKLSAgICAgZm9yIChpbnQgaT0wO2k8ZmluZFF1YWxpZmllclZlY3Rvci5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgRmluZFF1YWxpZmllciBmaW5kUXVhbGlmaWVyID0gKEZpbmRRdWFsaWZpZXIpZmluZFF1YWxpZmllclZlY3Rvci5lbGVtZW50QXQoaSk7Ci0lPgotICAgIHNldEZpbmRRdWFsaWZpZXIoIjwlPUhUTUxVdGlscy5KU01hbmdsZShmaW5kUXVhbGlmaWVyLmdldFRleHQoKSklPiIsImZpbmRCdXNpbmVzc2VzQWR2YW5jZWROYW1lcyIsImZpbmRCdXNpbmVzc2VzQWR2YW5jZWRDYXRlZ29yaWVzIiwiZmluZEJ1c2luZXNzZXNBZHZhbmNlZEZpbmRRdWFsaWZpZXJzIik7Ci08JQotICAgICB9Ci0gICB9Ci0lPgotICAgIHNldEFkdmFuY2VkQ29tbW9uU2VjdGlvbkRlZmF1bHRzKGZpbmRCdXNpbmVzc2VzQWR2YW5jZWRGb3JtLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoKFN0cmluZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfTUFYX1NFQVJDSF9TRVQpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX01BWF9SRVNVTFRTKSklPiIpOwotCi0gICAgLy8gVVVJRCBmb3JtIGRldGFpbHMuCi0gICAgdmFyIGZpbmRCdXNpbmVzc2VzVVVJRFNlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmaW5kQnVzaW5lc3Nlc1NlY3Rpb25JZHNbPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9VVUlEJT5dKTsKLSAgICB2YXIgZmluZEJ1c2luZXNzZXNVVUlERm9ybSA9IGZpbmRCdXNpbmVzc2VzVVVJRFNlY3Rpb24uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImZvcm0iKS5pdGVtKDApOwotICAgIGZpbmRCdXNpbmVzc2VzVVVJREZvcm0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX0tFWSU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSgoU3RyaW5nKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX0JVU0lORVNTX0tFWSkpJT4iOwotCi0gICAgc2hvd0ZpbmRGb3JtKDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTJT4sPCU9ZmluZEJ1c2luZXNzZXNTdHlsZUluZGV4JT4pOwotICB9Ci0KLSAgZnVuY3Rpb24gc2V0RGVmYXVsdHNGb3JGaW5kU2VydmljZXNGb3JtcygpCi0gIHsKLSAgICAvLyBJbml0aWFsaXplIHRoZSBmaW5kU2VydmljZXMgZm9ybS4KLTwlCi0gICBTdHJpbmcgZmluZFNlcnZpY2VzU3R5bGVJbmRleCA9IChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VTKTsKLSU+Ci0gICAgZG9jdW1lbnQuZm9ybXNbc3R5bGVGb3Jtc1s8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVMlPl1dLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRVMlPls8JT1maW5kU2VydmljZXNTdHlsZUluZGV4JT5dLmNoZWNrZWQgPSB0cnVlOwotICAgIHZhciBmaW5kU2VydmljZXNTaW1wbGVTZWN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZmluZFNlcnZpY2VzU2VjdGlvbklkc1s8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NJTVBMRSU+XSk7Ci0gICAgdmFyIGZpbmRTZXJ2aWNlc1NpbXBsZUZvcm0gPSBmaW5kU2VydmljZXNTaW1wbGVTZWN0aW9uLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJmb3JtIikuaXRlbSgwKTsKLSAgICBmaW5kU2VydmljZXNTaW1wbGVGb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfTkFNRSU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSgoU3RyaW5nKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9OQU1FKSklPiI7Ci0KLSAgICAvLyBBZHZhbmNlZCBmb3JtIGRldGFpbHMuCi0gICAgdmFyIGZpbmRTZXJ2aWNlc0FkdmFuY2VkU2VjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZpbmRTZXJ2aWNlc1NlY3Rpb25JZHNbPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9BRFZBTkNFRCU+XSk7Ci0gICAgdmFyIGZpbmRTZXJ2aWNlc0FkdmFuY2VkRm9ybSA9IGZpbmRTZXJ2aWNlc0FkdmFuY2VkU2VjdGlvbi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZm9ybSIpLml0ZW0oMCk7Ci0gICAgdmFyIGlzT3duZWRDaGVja2VkID0gPCU9KGZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX09XTkVEKSAhPSBudWxsKSU+OwotICAgIHNldEF1dGhlbnRpY2F0aW9uU2VjdGlvbkRlZmF1bHRzKGZpbmRTZXJ2aWNlc0FkdmFuY2VkRm9ybSw8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVMlPixpc093bmVkQ2hlY2tlZCk7Ci08JQotICAgVmVjdG9yIHNlcnZpY2VCdXNpbmVzcyA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQlVTSU5FU1MpOwotICAgVmVjdG9yIHNlcnZpY2VCdXNpbmVzc0NvcHkgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0JVU0lORVNTX0NPUFkpOwotICAgaWYgKHNlcnZpY2VCdXNpbmVzcyAhPSBudWxsKQotICAgewotICAgICBpZiAoc2VydmljZUJ1c2luZXNzQ29weSA9PSBudWxsKQotICAgICAgIHNlcnZpY2VCdXNpbmVzc0NvcHkgPSBuZXcgVmVjdG9yKCk7Ci0gICAgIGVsc2UKLSAgICAgICBzZXJ2aWNlQnVzaW5lc3NDb3B5LnJlbW92ZUFsbEVsZW1lbnRzKCk7Ci0gICAgIGZvciAoaW50IGk9MDtpPHNlcnZpY2VCdXNpbmVzcy5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpc2VydmljZUJ1c2luZXNzLmVsZW1lbnRBdChpKTsKLSAgICAgICBpbnQgdGFyZ2V0Tm9kZUlkID0gbGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Tm9kZUlkKCk7Ci0gICAgICAgaW50IHRhcmdldFRvb2xJZCA9IGxpc3RFbGVtZW50LmdldFRhcmdldFRvb2xJZCgpOwotICAgICAgIGludCB0YXJnZXRWaWV3SWQgPSBsaXN0RWxlbWVudC5nZXRUYXJnZXRWaWV3SWQoKTsKLSAgICAgICBTdHJpbmcgdXJsID0gU2VsZWN0U3ViUXVlcnlJdGVtQWN0aW9uLmdldEFjdGlvbkxpbmsodGFyZ2V0Tm9kZUlkLHRhcmdldFRvb2xJZCx0YXJnZXRWaWV3SWQsc3ViUXVlcnlLZXlQcm9wZXJ0eS5nZXRTdWJRdWVyeUtleSgpLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9CVVNJTkVTUyxpLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTLGZhbHNlKTsKLSAgICAgICBCdXNpbmVzc0VudGl0eSBiZSA9IChCdXNpbmVzc0VudGl0eSlsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICBzZXJ2aWNlQnVzaW5lc3NDb3B5LmFkZEVsZW1lbnQoc2VydmljZUJ1c2luZXNzLmVsZW1lbnRBdChpKSk7Ci0lPgotICAgIGFkZFJlc3VsdFJvdygiZmluZFNlcnZpY2VzQWR2YW5jZWRCdXNpbmVzcyIsPCU9dGFyZ2V0Tm9kZUlkJT4sIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCh1cmwpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGJlLmdldERlZmF1bHROYW1lU3RyaW5nKCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoYmUuZ2V0RGVmYXVsdERlc2NyaXB0aW9uU3RyaW5nKCkpJT4iKTsKLTwlCi0gICAgIH0KLSAgICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQlVTSU5FU1NfQ09QWSxzZXJ2aWNlQnVzaW5lc3NDb3B5KTsKLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSAgICAgc2VydmljZUJ1c2luZXNzID0gbmV3IFZlY3RvcigpOwotICAgICBzZXJ2aWNlQnVzaW5lc3NDb3B5ID0gbmV3IFZlY3RvcigpOwotICAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9CVVNJTkVTUyxzZXJ2aWNlQnVzaW5lc3MpOwotICAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9CVVNJTkVTU19DT1BZLHNlcnZpY2VCdXNpbmVzc0NvcHkpOwotICAgfQotCi0gICBWZWN0b3Igc2VydmljZU5hbWVWZWN0b3IgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX05BTUVTKTsKLSAgIGlmIChzZXJ2aWNlTmFtZVZlY3RvciAhPSBudWxsKQotICAgewotICAgICBmb3IgKGludCBpPTA7aTxzZXJ2aWNlTmFtZVZlY3Rvci5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgTmFtZSBuYW1lID0gKE5hbWUpc2VydmljZU5hbWVWZWN0b3IuZWxlbWVudEF0KGkpOwotJT4KLSAgICBhZGRMYW5ndWFnZUlucHV0Um93KCJmaW5kU2VydmljZXNBZHZhbmNlZE5hbWVzIiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfTkFNRV9URVhUX1ZBTFVFIikpJT4iKTsKLSAgICBzZXRMYW5ndWFnZUlucHV0Um93U2V0dGluZ3MoImZpbmRTZXJ2aWNlc0FkdmFuY2VkTmFtZXMiLDwlPWklPiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKG5hbWUuZ2V0TGFuZygpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKG5hbWUuZ2V0VGV4dCgpKSU+Iik7Ci08JQotICAgICB9Ci0gICB9Ci0KLSAgIENhdGVnb3J5QmFnIHNlcnZpY2VDYXRCYWcgPSAoQ2F0ZWdvcnlCYWcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQ0FURUdPUklFUyk7Ci0gICBpZiAoc2VydmljZUNhdEJhZyAhPSBudWxsKQotICAgewotICAgICBWZWN0b3Iga2V5ZWRSZWZlcmVuY2VWZWN0b3IgPSBzZXJ2aWNlQ2F0QmFnLmdldEtleWVkUmVmZXJlbmNlVmVjdG9yKCk7Ci0gICAgIGZvciAoaW50IGk9MDtpPGtleWVkUmVmZXJlbmNlVmVjdG9yLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBLZXllZFJlZmVyZW5jZSBrciA9IChLZXllZFJlZmVyZW5jZSlrZXllZFJlZmVyZW5jZVZlY3Rvci5lbGVtZW50QXQoaSk7Ci0lPgotICAgIGFkZENhdGVnb3J5Um93KCJmaW5kU2VydmljZXNBZHZhbmNlZENhdGVnb3JpZXMiKTsKLSAgICBzZXRDYXRlZ29yeVJvd1NldHRpbmdzKCJmaW5kU2VydmljZXNBZHZhbmNlZENhdGVnb3JpZXMiLDwlPWklPiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldFRNb2RlbEtleSgpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldEtleU5hbWUoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRLZXlWYWx1ZSgpKSU+Iik7Ci08JQotICAgICB9Ci0gICB9Ci0KLSAgIFZlY3RvciBzZXJ2aWNlU2VydmljZUludGVyZmFjZXMgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfSU5URVJGQUNFUyk7Ci0gICBWZWN0b3Igc2VydmljZVNlcnZpY2VJbnRlcmZhY2VzQ29weSA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9JTlRFUkZBQ0VTX0NPUFkpOwotICAgaWYgKHNlcnZpY2VTZXJ2aWNlSW50ZXJmYWNlcyAhPSBudWxsKQotICAgewotICAgICBpZiAoc2VydmljZVNlcnZpY2VJbnRlcmZhY2VzQ29weSA9PSBudWxsKQotICAgICAgIHNlcnZpY2VTZXJ2aWNlSW50ZXJmYWNlc0NvcHkgPSBuZXcgVmVjdG9yKCk7Ci0gICAgIGVsc2UKLSAgICAgICBzZXJ2aWNlU2VydmljZUludGVyZmFjZXNDb3B5LnJlbW92ZUFsbEVsZW1lbnRzKCk7Ci0gICAgIGZvciAoaW50IGk9MDtpPHNlcnZpY2VTZXJ2aWNlSW50ZXJmYWNlcy5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpc2VydmljZVNlcnZpY2VJbnRlcmZhY2VzLmVsZW1lbnRBdChpKTsKLSAgICAgICBpbnQgdGFyZ2V0Tm9kZUlkID0gbGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Tm9kZUlkKCk7Ci0gICAgICAgaW50IHRhcmdldFRvb2xJZCA9IGxpc3RFbGVtZW50LmdldFRhcmdldFRvb2xJZCgpOwotICAgICAgIGludCB0YXJnZXRWaWV3SWQgPSBsaXN0RWxlbWVudC5nZXRUYXJnZXRWaWV3SWQoKTsKLSAgICAgICBTdHJpbmcgdXJsID0gU2VsZWN0U3ViUXVlcnlJdGVtQWN0aW9uLmdldEFjdGlvbkxpbmsodGFyZ2V0Tm9kZUlkLHRhcmdldFRvb2xJZCx0YXJnZXRWaWV3SWQsc3ViUXVlcnlLZXlQcm9wZXJ0eS5nZXRTdWJRdWVyeUtleSgpLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX0lOVEVSRkFDRVMsaSxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTLGZhbHNlKTsKLSAgICAgICBUTW9kZWwgdE1vZGVsID0gKFRNb2RlbClsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICBzZXJ2aWNlU2VydmljZUludGVyZmFjZXNDb3B5LmFkZEVsZW1lbnQoc2VydmljZVNlcnZpY2VJbnRlcmZhY2VzLmVsZW1lbnRBdChpKSk7Ci0lPgotICAgIGFkZFJlc3VsdFJvdygiZmluZFNlcnZpY2VzQWR2YW5jZWRTZXJ2aWNlSW50ZXJmYWNlcyIsPCU9dGFyZ2V0Tm9kZUlkJT4sIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCh1cmwpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHRNb2RlbC5nZXROYW1lU3RyaW5nKCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodE1vZGVsLmdldERlZmF1bHREZXNjcmlwdGlvblN0cmluZygpKSU+Iik7Ci08JQotICAgICB9Ci0gICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfSU5URVJGQUNFU19DT1BZLHNlcnZpY2VTZXJ2aWNlSW50ZXJmYWNlc0NvcHkpOwotICAgfQotICAgZWxzZQotICAgewotICAgICBzZXJ2aWNlU2VydmljZUludGVyZmFjZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgIHNlcnZpY2VTZXJ2aWNlSW50ZXJmYWNlc0NvcHkgPSBuZXcgVmVjdG9yKCk7Ci0gICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1NFUlZJQ0VfSU5URVJGQUNFUyxzZXJ2aWNlU2VydmljZUludGVyZmFjZXMpOwotICAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX0lOVEVSRkFDRVNfQ09QWSxzZXJ2aWNlU2VydmljZUludGVyZmFjZXNDb3B5KTsKLSAgIH0KLQotICAgRmluZFF1YWxpZmllcnMgc2VydmljZUZpbmRRdWFsaWZpZXJzID0gKEZpbmRRdWFsaWZpZXJzKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0ZJTkRRVUFMSUZJRVJTKTsKLSAgIGlmIChzZXJ2aWNlRmluZFF1YWxpZmllcnMgIT0gbnVsbCkKLSAgIHsKLSAgICAgVmVjdG9yIGZpbmRRdWFsaWZpZXJWZWN0b3IgPSBzZXJ2aWNlRmluZFF1YWxpZmllcnMuZ2V0RmluZFF1YWxpZmllclZlY3RvcigpOwotICAgICBmb3IgKGludCBpPTA7aTxmaW5kUXVhbGlmaWVyVmVjdG9yLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBGaW5kUXVhbGlmaWVyIGZpbmRRdWFsaWZpZXIgPSAoRmluZFF1YWxpZmllcilmaW5kUXVhbGlmaWVyVmVjdG9yLmVsZW1lbnRBdChpKTsKLSU+Ci0gICAgc2V0RmluZFF1YWxpZmllcigiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGZpbmRRdWFsaWZpZXIuZ2V0VGV4dCgpKSU+IiwiZmluZFNlcnZpY2VzQWR2YW5jZWROYW1lcyIsImZpbmRTZXJ2aWNlc0FkdmFuY2VkQ2F0ZWdvcmllcyIsImZpbmRTZXJ2aWNlc0FkdmFuY2VkRmluZFF1YWxpZmllcnMiKTsKLTwlCi0gICAgIH0KLSAgIH0KLSU+Ci0gICAgc2V0QWR2YW5jZWRDb21tb25TZWN0aW9uRGVmYXVsdHMoZmluZFNlcnZpY2VzQWR2YW5jZWRGb3JtLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoKFN0cmluZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9NQVhfU0VBUkNIX1NFVCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoKFN0cmluZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9NQVhfUkVTVUxUUykpJT4iKTsKLQotICAgIC8vIFVVSUQgZm9ybSBkZXRhaWxzLgotICAgIHZhciBmaW5kU2VydmljZXNVVUlEU2VjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZpbmRTZXJ2aWNlc1NlY3Rpb25JZHNbPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9VVUlEJT5dKTsKLSAgICB2YXIgZmluZFNlcnZpY2VzVVVJREZvcm0gPSBmaW5kU2VydmljZXNVVUlEU2VjdGlvbi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZm9ybSIpLml0ZW0oMCk7Ci0gICAgZmluZFNlcnZpY2VzVVVJREZvcm0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX0tFWSU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSgoU3RyaW5nKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfS0VZKSklPiI7Ci0KLSAgICBzaG93RmluZEZvcm0oPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTJT4sPCU9ZmluZFNlcnZpY2VzU3R5bGVJbmRleCU+KTsKLSAgfQotCi0gIGZ1bmN0aW9uIHNldERlZmF1bHRzRm9yRmluZFNlcnZpY2VJbnRlcmZhY2VzRm9ybXMoKQotICB7Ci0gICAgLy8gSW5pdGlhbGl6ZSB0aGUgZmluZFNlcnZpY2VJbnRlcmZhY2VzIGZvcm0uCi08JQotICAgU3RyaW5nIGZpbmRTZXJ2aWNlSW50ZXJmYWNlc1N0eWxlSW5kZXggPSAoU3RyaW5nKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFX0lOVEVSRkFDRVMpOwotJT4KLSAgICBkb2N1bWVudC5mb3Jtc1tzdHlsZUZvcm1zWzwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVMlPl1dLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRV9JTlRFUkZBQ0VTJT5bPCU9ZmluZFNlcnZpY2VJbnRlcmZhY2VzU3R5bGVJbmRleCU+XS5jaGVja2VkID0gdHJ1ZTsKLSAgICB2YXIgZmluZFNlcnZpY2VJbnRlcmZhY2VzU2ltcGxlU2VjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZpbmRTZXJ2aWNlSW50ZXJmYWNlc1NlY3Rpb25JZHNbPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TSU1QTEUlPl0pOwotICAgIHZhciBmaW5kU2VydmljZUludGVyZmFjZXNTaW1wbGVGb3JtID0gZmluZFNlcnZpY2VJbnRlcmZhY2VzU2ltcGxlU2VjdGlvbi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZm9ybSIpLml0ZW0oMCk7Ci0gICAgZmluZFNlcnZpY2VJbnRlcmZhY2VzU2ltcGxlRm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FKSklPiI7Ci0KLSAgICAvLyBBZHZhbmNlZCBmb3JtIGRldGFpbHMuCi0gICAgdmFyIGZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkU2VjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZpbmRTZXJ2aWNlSW50ZXJmYWNlc1NlY3Rpb25JZHNbPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9BRFZBTkNFRCU+XSk7Ci0gICAgdmFyIGZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkRm9ybSA9IGZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkU2VjdGlvbi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZm9ybSIpLml0ZW0oMCk7Ci0KLSAgICB2YXIgaXNPd25lZENoZWNrZWQgPSA8JT0oZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX09XTkVEKSAhPSBudWxsKSU+OwotICAgIHNldEF1dGhlbnRpY2F0aW9uU2VjdGlvbkRlZmF1bHRzKGZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkRm9ybSw8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTJT4saXNPd25lZENoZWNrZWQpOwotICAgIHZhciBpc1VzZVNlcnZpY2VDaGVja2VkID0gPCU9KGZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9VU0VfU0VSVklDRSkgIT0gbnVsbCklPjsKLSAgICBmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZEZvcm0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9VU0VfU0VSVklDRSU+LmNoZWNrZWQgPSBpc1VzZVNlcnZpY2VDaGVja2VkOwotICAgIHRvZ2dsZUZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkU2VydmljZVBhcmFtZXRlcnMoZmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRGb3JtKTsKLSAgICBmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZEZvcm0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUpKSU+IjsKLQotPCUKLSAgIFZlY3RvciBzaVNlcnZpY2UgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9TRVJWSUNFKTsKLSAgIFZlY3RvciBzaVNlcnZpY2VDb3B5ID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfU0VSVklDRV9DT1BZKTsKLSAgIGlmIChzaVNlcnZpY2UgIT0gbnVsbCkKLSAgIHsKLSAgICAgaWYgKHNpU2VydmljZUNvcHkgPT0gbnVsbCkKLSAgICAgICBzaVNlcnZpY2VDb3B5ID0gbmV3IFZlY3RvcigpOwotICAgICBlbHNlCi0gICAgICAgc2lTZXJ2aWNlQ29weS5yZW1vdmVBbGxFbGVtZW50cygpOwotICAgICBmb3IgKGludCBpPTA7aTxzaVNlcnZpY2Uuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KXNpU2VydmljZS5lbGVtZW50QXQoaSk7Ci0gICAgICAgaW50IHRhcmdldE5vZGVJZCA9IGxpc3RFbGVtZW50LmdldFRhcmdldE5vZGVJZCgpOwotICAgICAgIGludCB0YXJnZXRUb29sSWQgPSBsaXN0RWxlbWVudC5nZXRUYXJnZXRUb29sSWQoKTsKLSAgICAgICBpbnQgdGFyZ2V0Vmlld0lkID0gbGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Vmlld0lkKCk7Ci0gICAgICAgU3RyaW5nIHVybCA9IFNlbGVjdFN1YlF1ZXJ5SXRlbUFjdGlvbi5nZXRBY3Rpb25MaW5rKHRhcmdldE5vZGVJZCx0YXJnZXRUb29sSWQsdGFyZ2V0Vmlld0lkLHN1YlF1ZXJ5S2V5UHJvcGVydHkuZ2V0U3ViUXVlcnlLZXkoKSxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1NFUlZJQ0UsaSxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVMsZmFsc2UpOwotICAgICAgIEJ1c2luZXNzU2VydmljZSBicyA9IChCdXNpbmVzc1NlcnZpY2UpbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgc2lTZXJ2aWNlQ29weS5hZGRFbGVtZW50KHNpU2VydmljZS5lbGVtZW50QXQoaSkpOwotJT4KLSAgICBhZGRSZXN1bHRSb3coImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkU2VydmljZSIsPCU9dGFyZ2V0Tm9kZUlkJT4sIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCh1cmwpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGJzLmdldERlZmF1bHROYW1lU3RyaW5nKCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoYnMuZ2V0RGVmYXVsdERlc2NyaXB0aW9uU3RyaW5nKCkpJT4iKTsKLTwlCi0gICAgIH0KLSAgICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1NFUlZJQ0VfQ09QWSxzaVNlcnZpY2VDb3B5KTsKLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSAgICAgc2lTZXJ2aWNlID0gbmV3IFZlY3RvcigpOwotICAgICBzaVNlcnZpY2VDb3B5ID0gbmV3IFZlY3RvcigpOwotICAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfU0VSVklDRSxzaVNlcnZpY2UpOwotICAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfU0VSVklDRV9DT1BZLHNpU2VydmljZUNvcHkpOwotICAgfQotCi0gICBJZGVudGlmaWVyQmFnIHNpSWRCYWcgPSAoSWRlbnRpZmllckJhZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfSURFTlRJRklFUlMpOwotICAgaWYgKHNpSWRCYWcgIT0gbnVsbCkKLSAgIHsKLSAgICAgVmVjdG9yIGtleWVkUmVmZXJlbmNlVmVjdG9yID0gc2lJZEJhZy5nZXRLZXllZFJlZmVyZW5jZVZlY3RvcigpOwotICAgICBmb3IgKGludCBpPTA7aTxrZXllZFJlZmVyZW5jZVZlY3Rvci5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSAoS2V5ZWRSZWZlcmVuY2Upa2V5ZWRSZWZlcmVuY2VWZWN0b3IuZWxlbWVudEF0KGkpOwotJT4KLSAgICBhZGRJZGVudGlmaWVyUm93KCJmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZElkZW50aWZpZXJzIik7Ci0gICAgc2V0SWRlbnRpZmllclJvd1NldHRpbmdzKCJmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZElkZW50aWZpZXJzIiw8JT1pJT4sIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRUTW9kZWxLZXkoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRLZXlOYW1lKCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0S2V5VmFsdWUoKSklPiIpOwotPCUKLSAgICAgfQotICAgfQotCi0gICBDYXRlZ29yeUJhZyBzaUNhdEJhZyA9IChDYXRlZ29yeUJhZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfQ0FURUdPUklFUyk7Ci0gICBpZiAoc2lDYXRCYWcgIT0gbnVsbCkKLSAgIHsKLSAgICAgVmVjdG9yIGtleWVkUmVmZXJlbmNlVmVjdG9yID0gc2lDYXRCYWcuZ2V0S2V5ZWRSZWZlcmVuY2VWZWN0b3IoKTsKLSAgICAgZm9yIChpbnQgaT0wO2k8a2V5ZWRSZWZlcmVuY2VWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gKEtleWVkUmVmZXJlbmNlKWtleWVkUmVmZXJlbmNlVmVjdG9yLmVsZW1lbnRBdChpKTsKLSU+Ci0gICAgYWRkQ2F0ZWdvcnlSb3coImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkQ2F0ZWdvcmllcyIpOwotICAgIHNldENhdGVnb3J5Um93U2V0dGluZ3MoImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkQ2F0ZWdvcmllcyIsPCU9aSU+LCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0VE1vZGVsS2V5KCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0S2V5TmFtZSgpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldEtleVZhbHVlKCkpJT4iKTsKLTwlCi0gICAgIH0KLSAgIH0KLQotICAgRmluZFF1YWxpZmllcnMgc2lGaW5kUXVhbGlmaWVycyA9IChGaW5kUXVhbGlmaWVycylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfRklORFFVQUxJRklFUlMpOwotICAgaWYgKHNpRmluZFF1YWxpZmllcnMgIT0gbnVsbCkKLSAgIHsKLSAgICAgVmVjdG9yIGZpbmRRdWFsaWZpZXJWZWN0b3IgPSBzaUZpbmRRdWFsaWZpZXJzLmdldEZpbmRRdWFsaWZpZXJWZWN0b3IoKTsKLSAgICAgZm9yIChpbnQgaT0wO2k8ZmluZFF1YWxpZmllclZlY3Rvci5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgRmluZFF1YWxpZmllciBmaW5kUXVhbGlmaWVyID0gKEZpbmRRdWFsaWZpZXIpZmluZFF1YWxpZmllclZlY3Rvci5lbGVtZW50QXQoaSk7Ci0lPgotICAgIHNldEZpbmRRdWFsaWZpZXIoIjwlPUhUTUxVdGlscy5KU01hbmdsZShmaW5kUXVhbGlmaWVyLmdldFRleHQoKSklPiIsImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkTmFtZSIsImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkQ2F0ZWdvcmllcyIsImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkRmluZFF1YWxpZmllcnMiKTsKLTwlCi0gICAgIH0KLSAgIH0KLSU+Ci0gICAgc2V0QWR2YW5jZWRDb21tb25TZWN0aW9uRGVmYXVsdHMoZmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRGb3JtLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoKFN0cmluZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTUFYX1NFQVJDSF9TRVQpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX01BWF9SRVNVTFRTKSklPiIpOwotCi0gICAgLy8gVVVJRCBmb3JtIGRldGFpbHMuCi0gICAgdmFyIGZpbmRTZXJ2aWNlSW50ZXJmYWNlc1VVSURTZWN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZmluZFNlcnZpY2VJbnRlcmZhY2VzU2VjdGlvbklkc1s8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1VVSUQlPl0pOwotICAgIHZhciBmaW5kU2VydmljZUludGVyZmFjZXNVVUlERm9ybSA9IGZpbmRTZXJ2aWNlSW50ZXJmYWNlc1VVSURTZWN0aW9uLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJmb3JtIikuaXRlbSgwKTsKLSAgICBmaW5kU2VydmljZUludGVyZmFjZXNVVUlERm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfS0VZJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9JTlRFUkZBQ0VfS0VZKSklPiI7Ci0KLSAgICBzaG93RmluZEZvcm0oPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUyU+LDwlPWZpbmRTZXJ2aWNlSW50ZXJmYWNlc1N0eWxlSW5kZXglPik7Ci0gIH0KLQotICBmdW5jdGlvbiBzaG93TWFpbkZvcm0oc2VhcmNoRm9yVmFsdWVTdHJpbmcpCi0gIHsKLSAgICBjbG9zZUFsbFVkZGlDaGlsZFdpbmRvd3MoKTsKLSAgICB2YXIgcXVlcnlJbmZvSXRlbUxpc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicXVlcnlJbmZvSXRlbUxpc3QiKTsKLSAgICB2YXIgc2VhcmNoRm9ySW5kZXggPSBwYXJzZUludChzZWFyY2hGb3JWYWx1ZVN0cmluZyk7Ci0gICAgZm9yICh2YXIgaT0wO2k8c2VjdGlvbklkcy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIGlmIChpID09IHNlYXJjaEZvckluZGV4KQotICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzZWN0aW9uSWRzW2ldKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gICAgICBlbHNlCi0gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNlY3Rpb25JZHNbaV0pLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7Ci0gICAgfQotPCUKLSAgIGlmIChzdWJRdWVyeUtleVByb3BlcnR5LmdldFN1YlF1ZXJ5S2V5KCkubGVuZ3RoKCkgPCAxKQotICAgewotJT4KLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicXVlcnlJbmZvSXRlbUxpc3QiKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci08JQotICAgfQotJT4KLSAgICB2YXIgbG9hZFNjcmVlblRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvYWRTY3JlZW4iKTsKLSAgICBpZiAobG9hZFNjcmVlblRhYmxlLnJvd3MubGVuZ3RoID4gMCkKLSAgICAgIGxvYWRTY3JlZW5UYWJsZS5kZWxldGVSb3coMCk7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1haW5TY3JlZW4iKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gIH0KLQotICBmdW5jdGlvbiBzaG93RmluZEZvcm0ocXVlcnlJdGVtSW5kZXgsc3R5bGUpCi0gIHsKLSAgICBjbG9zZUFsbFVkZGlDaGlsZFdpbmRvd3MoKTsKLSAgICB2YXIgZmluZFNlY3Rpb25JZHM7Ci0gICAgc3dpdGNoIChxdWVyeUl0ZW1JbmRleCkKLSAgICB7Ci0gICAgICBjYXNlIDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTJT46Ci0gICAgICAgIGZpbmRTZWN0aW9uSWRzID0gZmluZEJ1c2luZXNzZXNTZWN0aW9uSWRzOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTJT46Ci0gICAgICAgIGZpbmRTZWN0aW9uSWRzID0gZmluZFNlcnZpY2VzU2VjdGlvbklkczsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVMlPjoKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGZpbmRTZWN0aW9uSWRzID0gZmluZFNlcnZpY2VJbnRlcmZhY2VzU2VjdGlvbklkczsKLSAgICB9Ci0gICAgZm9yICh2YXIgaT0wO2k8ZmluZFNlY3Rpb25JZHMubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICBpZiAoaSA9PSBzdHlsZSkKLSAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZmluZFNlY3Rpb25JZHNbaV0pLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICAgIGVsc2UKLSAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZmluZFNlY3Rpb25JZHNbaV0pLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gdG9nZ2xlQWR2YW5jZWRBdXRoZW50aWNhdGlvblNlY3Rpb24ocXVlcnlJdGVtSW5kZXgsaXNDaGVja2VkKQotICB7Ci0gICAgaWYgKGlzQ2hlY2tlZCAmJiA8JT0hcmVnRWxlbWVudC5pc0xvZ2dlZEluKCklPikKLSAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGF1dGhlbnRpY2F0aW9uU2VjdGlvbklkc1txdWVyeUl0ZW1JbmRleF0pLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICBlbHNlCi0gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhdXRoZW50aWNhdGlvblNlY3Rpb25JZHNbcXVlcnlJdGVtSW5kZXhdKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotICB9Ci0KLSAgZnVuY3Rpb24gdG9nZ2xlRmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRTZXJ2aWNlUGFyYW1ldGVycyhmb3JtKQotICB7Ci0gICAgdmFyIGlzVXNlU2VydmljZUNoZWNrZWQgPSBmb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfVVNFX1NFUlZJQ0UlPi5jaGVja2VkOwotICAgIHZhciBpc093bmVkQ2hlY2tlZCA9IGZvcm0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9PV05FRCU+LmNoZWNrZWQ7Ci0gICAgaWYgKGlzVXNlU2VydmljZUNoZWNrZWQpCi0gICAgewotICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkU2VydmljZVNlY3Rpb24iKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRPd25lZCIpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7Ci0gICAgICB0b2dnbGVBZHZhbmNlZEF1dGhlbnRpY2F0aW9uU2VjdGlvbig8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTJT4sZmFsc2UpOwotICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkTmFtZUZpbmRRdWFsaWZpZXJzU2VjdGlvbiIpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7Ci0gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRGaW5kUXVhbGlmaWVyc1NlY3Rpb24iKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkU2VydmljZVNlY3Rpb24iKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkT3duZWQiKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gICAgICB0b2dnbGVBZHZhbmNlZEF1dGhlbnRpY2F0aW9uU2VjdGlvbig8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTJT4saXNPd25lZENoZWNrZWQpOwotICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkTmFtZUZpbmRRdWFsaWZpZXJzU2VjdGlvbiIpLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZEZpbmRRdWFsaWZpZXJzU2VjdGlvbiIpLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICB9Ci0gIH0KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iIG9uVW5sb2FkPSJjbG9zZUFsbFVkZGlDaGlsZFdpbmRvd3MoKSI+Ci0gIDxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICAgIDx0YWJsZSBpZD0ibG9hZFNjcmVlbiI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICA8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIk1TR19MT0FEX0lOX1BST0dSRVNTIiklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICAgIDxkaXYgaWQ9Im1haW5TY3JlZW4iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLTwlCi0gICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAidWRkaS9pbWFnZXMvZmluZF9oaWdobGlnaHRlZC5naWYiOwotICAgU3RyaW5nIHRpdGxlOwotICAgU3RyaW5nIHN1YlF1ZXJ5S2V5ID0gc3ViUXVlcnlLZXlQcm9wZXJ0eS5nZXRTdWJRdWVyeUtleSgpOwotICAgaWYgKHN1YlF1ZXJ5S2V5ICE9IG51bGwgJiYgc3ViUXVlcnlLZXkubGVuZ3RoKCkgPiAwKQotICAgewotICAgICBpbnQgcXVlcnlJdGVtID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNKSk7Ci0gICAgIHN3aXRjaCAocXVlcnlJdGVtKQotICAgICB7Ci0gICAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUzoKLSAgICAgICAgIHRpdGxlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9TVUJRVUVSWSIsdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0JVU0lORVNTRVMiKSk7Ci0gICAgICAgICBicmVhazsKLSAgICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUzoKLSAgICAgICAgIHRpdGxlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9TVUJRVUVSWSIsdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX1NFUlZJQ0VTIikpOwotICAgICAgICAgYnJlYWs7Ci0gICAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTOgotICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICB0aXRsZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfU1VCUVVFUlkiLHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9TRVJWSUNFX0lOVEVSRkFDRVMiKSk7Ci0gICAgIH0KLSAgIH0KLSAgIGVsc2UKLSAgICAgdGl0bGUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX0ZJTkQiKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9mb3Jtcy9maW5kZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgICA8dHI+Ci0gICAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgICA8bGFiZWwgZm9yPSJxdWVyeU5hbWUiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1FVRVJZX05BTUUiKSU+PC9sYWJlbD4KLTwlCi0gICBpZiAoIWZvcm1Ub29sUEkuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfTkFNRSkpCi0gICB7Ci0lPgotICAgICAgICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotPCUKLSAgIH0KLSU+Ci0gICAgICAgICAgPC90ZD4KLSAgICAgICAgPC90cj4KLSAgICAgICAgPHRyPgotICAgICAgICAgIDx0ZD4gPGlucHV0IGlkPSJxdWVyeU5hbWUiIHR5cGU9InRleHQiIHZhbHVlPSI8JT1IVE1MVXRpbHMuY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzU3RyaWN0KHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJERUZBVUxUX1FVRVJZX05BTUUiKSklPiIgY2xhc3M9InRleHRlbnRlciI+IDwvdGQ+Ci0gICAgICAgIDwvdHI+Ci0gICAgICA8L3RhYmxlPgotICAgICAgPGRpdiBpZD0icXVlcnlJbmZvSXRlbUxpc3QiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgdmFsaWduPSJtaWRkbGUiIG5vd3JhcCBoZWlnaHQ9NDA+Ci0gICAgICAgICAgICAgIDxsYWJlbCBmb3I9InNlYXJjaEZvciI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfU0VBUkNIX0ZPUiIpJT48L2xhYmVsPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgbm93cmFwIGhlaWdodD00MD4KLSAgICAgICAgICAgICAgPHNlbGVjdCBpZD0ic2VhcmNoRm9yIiBvbkNoYW5nZT0ic2hvd01haW5Gb3JtKHRoaXMudmFsdWUpIiBjbGFzcz0ic2VsZWN0bGlzdCI+Ci0gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVMlPiI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0JVU0lORVNTRVMiKSU+Ci0gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTJT4iPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9TRVJWSUNFUyIpJT4KLSAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTJT4iPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9TRVJWSUNFX0lOVEVSRkFDRVMiKSU+Ci0gICAgICAgICAgICAgIDwvc2VsZWN0PgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDx0ZCB3aWR0aD0iOTAlIiBoZWlnaHQ9NDA+Jm5ic3A7PC90ZD4KLSAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotICAgICAgPC9kaXY+Ci0gICAgPC9kaXY+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvUmVnRmluZEJ1c2luZXNzZXNGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9SZWdGaW5kU2VydmljZXNGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9SZWdGaW5kU2VydmljZUludGVyZmFjZXNGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgPC9kaXY+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgc2V0RGVmYXVsdHMoKTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTFiYWQyYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ic3ViUXVlcnlLZXlQcm9wZXJ0eSIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlN1YlF1ZXJ5S2V5UHJvcGVydHkiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIC8vIHNlbGVjdGVkTm9kZSBjb3VsZCBiZSB0aGUgcmVnaXN0cnkgb3IgcXVlcnkgbm9kZXMuCi0gICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICBGb3JtVG9vbCBmb3JtVG9vbCA9IChGb3JtVG9vbCkoc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpKTsKLSAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJID0gKChNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSlmb3JtVG9vbCkuZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHN1YlF1ZXJ5S2V5UHJvcGVydHkuZ2V0U3ViUXVlcnlLZXkoKSk7Ci0lPgotPGRpdiBpZD0iZmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWQiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZEFjdGlvbkpTUC5qc3AiKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgb25TdWJtaXQ9InJldHVybiBwcm9jZXNzRmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRGb3JtKHRoaXMpIj4KLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSU+Ij4KLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0dFVCU+Ij4gICAgCi0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5ORVdfU1VCUVVFUllfSU5JVElBVEVEJT4iPgotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuTkVXX1NVQlFVRVJZX1FVRVJZX0lURU0lPiI+Ci0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9OQU1FJT4iPgotICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iPiA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9GSU5EX0FEVkFOQ0VEX0RFU0MiKSU+IDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJpbnB1dF9maW5kX3NlcnZpY2VfaW50ZXJmYWNlX2FkdmFuY2VfdXNlX3NlcnZpY2UiIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfVVNFX1NFUlZJQ0UlPiIgb25DbGljaz0idG9nZ2xlRmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRTZXJ2aWNlUGFyYW1ldGVycyh0aGlzLmZvcm0pIj48bGFiZWwgZm9yPSJpbnB1dF9maW5kX3NlcnZpY2VfaW50ZXJmYWNlX2FkdmFuY2VfdXNlX3NlcnZpY2UiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1VTRV9TRVJWSUNFIiklPjwvbGFiZWw+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci08JQotICAgU3RyaW5nW10gc2VydmljZVNwZWNpZmljSW5mbyA9IHsiRk9STV9MQUJFTF9TRVJWSUNFIixCb29sZWFuLkZBTFNFLnRvU3RyaW5nKCksU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTKSwiZmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWQiLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfU0VSVklDRX07Ci0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkU2VydmljZSIpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKHNlcnZpY2VTcGVjaWZpY0luZm8pOwotJT4KLTxkaXYgaWQ9ImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkU2VydmljZVNlY3Rpb24iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL3VkZGlPYmplY3RzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvZGl2PgotICAgIDxkaXYgaWQ9ImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkT3duZWQiPgotICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgPHRyPgotICAgICAgICAgIDx0ZCBoZWlnaHQ9MzUgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iaW5wdXRfZmluZF9zZXJ2aWNlX2ludGVyZmFjZV9hZHZhbmNlX293bmVkIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX09XTkVEJT4iIG9uQ2xpY2s9InRvZ2dsZUFkdmFuY2VkQXV0aGVudGljYXRpb25TZWN0aW9uKDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVMlPix0aGlzLmNoZWNrZWQpIj4KLSAgICAgICAgICAgIDxsYWJlbCBmb3I9ImlucHV0X2ZpbmRfc2VydmljZV9pbnRlcmZhY2VfYWR2YW5jZV9vd25lZCI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfT1dORUQiKSU+PC9sYWJlbD4KLSAgICAgICAgICA8L3RkPgotICAgICAgICA8L3RyPgotICAgICAgPC90YWJsZT4KLSAgICA8L2Rpdj4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkQXV0aGVudGljYXRpb24iKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvYXV0aGVudGljYXRpb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgIDxkaXYgaWQ9ImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkTmFtZSI+Ci0gICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgICA8dHI+Ci0gICAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgICA8bGFiZWwgZm9yPSJpbnB1dF9maW5kX3NlcnZpY2VfaW50ZXJmYWNlX2FkdmFuY2VkX25hbWUiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05BTUUiKSU+PC9sYWJlbD4KLTwlCi0gICBpZiAoIWZvcm1Ub29sUEkuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSkpCi0gICB7Ci0lPgotICAgICAgICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotPCUKLSAgIH0KLSU+Ci0gICAgICAgICAgPC90ZD4KLSAgICAgICAgPC90cj4KLSAgICAgICAgPHRyPgotICAgICAgICAgIDx0ZD48aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImlucHV0X2ZpbmRfc2VydmljZV9pbnRlcmZhY2VfYWR2YW5jZWRfbmFtZSIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FJT4iIGNsYXNzPSJ0ZXh0ZW50ZXIiPjwvdGQ+Ci0gICAgICAgIDwvdHI+Ci0gICAgICA8L3RhYmxlPgotPGRpdiBpZD0iZmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWROYW1lRmluZFF1YWxpZmllcnNTZWN0aW9uIj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9uYW1lc19maW5kUXVhbGlmaWVyc190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2Rpdj4KLSAgICA8L2Rpdj4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkSWRlbnRpZmllcnMiKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvaWRlbnRpZmllcnNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgiZmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRDYXRlZ29yaWVzIik7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2NhdGVnb3JpZXNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgiZmluZFNlcnZpY2VJbnRlcmZhY2VzQWR2YW5jZWRGaW5kUXVhbGlmaWVycyIpOwotJT4KLTxkaXYgaWQ9ImZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkRmluZFF1YWxpZmllcnNTZWN0aW9uIj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9maW5kUXVhbGlmaWVyc190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2Rpdj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9hZHZhbmNlZENvbW1vbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL3NpbXBsZUNvbW1vbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gIDwvZm9ybT4KLTwvZGl2PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlc0Zvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlc0Zvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OWVkOWM0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdGaW5kU2VydmljZUludGVyZmFjZXNGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSU+Ci08ZGl2IGlkPSJmaW5kU2VydmljZUludGVyZmFjZXMiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgPGZvcm0gbmFtZT0iZmluZFNlcnZpY2VJbnRlcmZhY2VzU3R5bGUiPgotICAgIDx0YWJsZT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkPiA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9TRUFSQ0hfVFlQRSIpJT4gPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZD4KLSAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIGlkPSJyYWRpb19maW5kX3NlcnZpY2VfaW50ZXJmYWNlX3NpbXBsZSIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFX0lOVEVSRkFDRVMlPiIgb25DbGljaz0ic2hvd0ZpbmRGb3JtKDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVMlPiw8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NJTVBMRSU+KSI+PGxhYmVsIGZvcj0icmFkaW9fZmluZF9zZXJ2aWNlX2ludGVyZmFjZV9zaW1wbGUiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1JBRElPX1NJTVBMRSIpJT48L2xhYmVsPgotICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgaWQ9InJhZGlvX2ZpbmRfc2VydmljZV9pbnRlcmZhY2VfYWR2YW5jZSIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFX0lOVEVSRkFDRVMlPiIgb25DbGljaz0ic2hvd0ZpbmRGb3JtKDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVMlPiw8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0FEVkFOQ0VEJT4pIj48bGFiZWwgZm9yPSJyYWRpb19maW5kX3NlcnZpY2VfaW50ZXJmYWNlX2FkdmFuY2UiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1JBRElPX0FEVkFOQ0VEIiklPjwvbGFiZWw+Ci0gICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBpZD0icmFkaW9fZmluZF9zZXJ2aWNlX2ludGVyZmFjZV91dWlkIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VfSU5URVJGQUNFUyU+IiBvbkNsaWNrPSJzaG93RmluZEZvcm0oPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUyU+LDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfVVVJRCU+KSI+PGxhYmVsIGZvcj0icmFkaW9fZmluZF9zZXJ2aWNlX2ludGVyZmFjZV91dWlkIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9SQURJT19VVUlEIiklPjwvbGFiZWw+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gIDwvZm9ybT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9SZWdGaW5kU2VydmljZUludGVyZmFjZXNTaW1wbGVGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9SZWdGaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZEZvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJmaW5kU2VydmljZUludGVyZmFjZVVVSUQiKTsKLSAgIFN0cmluZ1tdIG90aGVyUHJvcGVydGllcyA9IHsidWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlVVVJREFjdGlvbkpTUC5qc3AiLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9TRVJWSUNFX0lOVEVSRkFDRV9LRVksIkZPUk1fTEFCRUxfRklORF9TRVJWSUNFX0lOVEVSRkFDRV9VVUlEX0RFU0MifTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhvdGhlclByb3BlcnRpZXMpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9SZWdGaW5kVVVJREZvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VzU2ltcGxlRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VzU2ltcGxlRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzNTkzNGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0ZpbmRTZXJ2aWNlSW50ZXJmYWNlc1NpbXBsZUZvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic3ViUXVlcnlLZXlQcm9wZXJ0eSIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlN1YlF1ZXJ5S2V5UHJvcGVydHkiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIC8vIHNlbGVjdGVkTm9kZSBjb3VsZCBiZSB0aGUgcmVnaXN0cnkgb3IgcXVlcnkgbm9kZXMuCi0gICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICBGb3JtVG9vbCBmb3JtVG9vbCA9IChGb3JtVG9vbCkoc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpKTsKLSAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJID0gKChNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSlmb3JtVG9vbCkuZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHN1YlF1ZXJ5S2V5UHJvcGVydHkuZ2V0U3ViUXVlcnlLZXkoKSk7Ci0lPgotPGRpdiBpZD0iZmluZFNlcnZpY2VJbnRlcmZhY2VzU2ltcGxlIiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnMvUmVnRmluZFNlcnZpY2VJbnRlcmZhY2VzU2ltcGxlQWN0aW9uSlNQLmpzcCIpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBvblN1Ym1pdD0icmV0dXJuIHByb2Nlc3NGb3JtKHRoaXMpIj4KLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0tFWSU+Ij4KLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX05BTUUlPiI+Ci0gICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0xMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfRklORF9TRVJWSUNFX0lOVEVSRkFDRVNfU0lNUExFX0RFU0MiKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTMwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICA8bGFiZWwgZm9yPSJpbnB1dF9maW5kX3NlcnZpY2VfaW50ZXJmYWNlc19zaW1wbGVfbmFtZSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTkFNRSIpJT48L2xhYmVsPgotPCUKLSAgIGlmICghZm9ybVRvb2xQSS5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSkpCi0gICB7Ci0lPgotICAgICAgICAgIDwlPUhUTUxVdGlscy5yZWRBc3RlcmlzaygpJT4KLTwlCi0gICB9Ci0lPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkPiA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImlucHV0X2ZpbmRfc2VydmljZV9pbnRlcmZhY2VzX3NpbXBsZV9uYW1lIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FJT4iIGNsYXNzPSJ0ZXh0ZW50ZXIiPiA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9zaW1wbGVDb21tb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICA8L2Zvcm0+Ci08L2Rpdj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdGaW5kU2VydmljZXNBZHZhbmNlZEZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0ZpbmRTZXJ2aWNlc0FkdmFuY2VkRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2OTc2YTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0ZpbmRTZXJ2aWNlc0FkdmFuY2VkRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ic3ViUXVlcnlLZXlQcm9wZXJ0eSIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlN1YlF1ZXJ5S2V5UHJvcGVydHkiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0lPgotPGRpdiBpZD0iZmluZFNlcnZpY2VzQWR2YW5jZWQiPgotICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL1JlZ0ZpbmRTZXJ2aWNlc0FkdmFuY2VkQWN0aW9uSlNQLmpzcCIpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBvblN1Ym1pdD0icmV0dXJuIHByb2Nlc3NGaW5kU2VydmljZXNBZHZhbmNlZEZvcm0odGhpcykiPgotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZJT4iPgotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfR0VUJT4iPiAgICAKLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLk5FV19TVUJRVUVSWV9JTklUSUFURUQlPiI+Ci0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5ORVdfU1VCUVVFUllfUVVFUllfSVRFTSU+Ij4KLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX05BTUUlPiI+Ci0gICAgPHRhYmxlIHdpZHRoPSI5MCUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfRklORF9BRFZBTkNFRF9ERVNDIiklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBoZWlnaHQ9MzUgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImlucHV0X2ZpbmRfc2VydmljZXNfYWR2YW5jZV9vd25lZCIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9PV05FRCU+IiBvbkNsaWNrPSJ0b2dnbGVBZHZhbmNlZEF1dGhlbnRpY2F0aW9uU2VjdGlvbig8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVMlPix0aGlzLmNoZWNrZWQpIj4KLSAgICAgICAgICA8bGFiZWwgZm9yPSJpbnB1dF9maW5kX3NlcnZpY2VzX2FkdmFuY2Vfb3duZWQiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX09XTkVEIiklPjwvbGFiZWw+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJmaW5kU2VydmljZXNBZHZhbmNlZEF1dGhlbnRpY2F0aW9uIik7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2F1dGhlbnRpY2F0aW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBTdHJpbmdbXSBidXNTcGVjaWZpY0luZm8gPSB7IkZPUk1fTEFCRUxfQlVTSU5FU1MiLEJvb2xlYW4uRkFMU0UudG9TdHJpbmcoKSxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUyksImZpbmRTZXJ2aWNlc0FkdmFuY2VkIixVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQlVTSU5FU1N9OwotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJmaW5kU2VydmljZXNBZHZhbmNlZEJ1c2luZXNzIik7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMoYnVzU3BlY2lmaWNJbmZvKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvdWRkaU9iamVjdHNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgiZmluZFNlcnZpY2VzQWR2YW5jZWROYW1lcyIpOwotICAgU3RyaW5nW10gbmFtZVNwZWNpZmljSW5mbyA9IHsiRk9STV9MQUJFTF9OQU1FUyIsIkZPUk1fTEFCRUxfTkFNRSIsQm9vbGVhbi5GQUxTRS50b1N0cmluZygpfTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhuYW1lU3BlY2lmaWNJbmZvKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvbGFuZ3VhZ2VJbnB1dF90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJmaW5kU2VydmljZXNBZHZhbmNlZENhdGVnb3JpZXMiKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvY2F0ZWdvcmllc190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgU3RyaW5nW10gc2lTcGVjaWZpY0luZm8gPSB7IkZPUk1fTEFCRUxfU0VSVklDRV9JTlRFUkZBQ0VTIixCb29sZWFuLkZBTFNFLnRvU3RyaW5nKCksU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUyksImZpbmRTZXJ2aWNlc0FkdmFuY2VkIixVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9JTlRFUkZBQ0VTfTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgiZmluZFNlcnZpY2VzQWR2YW5jZWRTZXJ2aWNlSW50ZXJmYWNlcyIpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKHNpU3BlY2lmaWNJbmZvKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvdWRkaU9iamVjdHNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgiZmluZFNlcnZpY2VzQWR2YW5jZWRGaW5kUXVhbGlmaWVycyIpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9maW5kUXVhbGlmaWVyc190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvYWR2YW5jZWRDb21tb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9zaW1wbGVDb21tb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICA8L2Zvcm0+Ci08L2Rpdj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdGaW5kU2VydmljZXNGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdGaW5kU2VydmljZXNGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk0ZjM5My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnRmluZFNlcnZpY2VzRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0lPgotPGRpdiBpZD0iZmluZFNlcnZpY2VzIiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gIDxmb3JtIG5hbWU9ImZpbmRTZXJ2aWNlc1N0eWxlIj4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfU0VBUkNIX1RZUEUiKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQ+Ci0gICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBpZD0icmFkaW9fZmluZF9zZXJ2aWNlX3NpbXBsZSIgY2xhc3M9InJhZGlvIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VTJT4iIG9uQ2xpY2s9InNob3dGaW5kRm9ybSg8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVMlPiw8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NJTVBMRSU+KSI+PGxhYmVsIGZvcj0icmFkaW9fZmluZF9zZXJ2aWNlX3NpbXBsZSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fUkFESU9fU0lNUExFIiklPjwvbGFiZWw+Ci0gICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBpZD0icmFkaW9fZmluZF9zZXJ2aWNlX2FkdmFuY2UiIGNsYXNzPSJyYWRpbyIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFUyU+IiBvbkNsaWNrPSJzaG93RmluZEZvcm0oPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTJT4sPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9BRFZBTkNFRCU+KSI+PGxhYmVsIGZvcj0icmFkaW9fZmluZF9zZXJ2aWNlX2FkdmFuY2UiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1JBRElPX0FEVkFOQ0VEIiklPjwvbGFiZWw+Ci0gICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBpZD0icmFkaW9fZmluZF9zZXJ2aWNlX3V1aWQiIGNsYXNzPSJyYWRpbyIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFUyU+IiBvbkNsaWNrPSJzaG93RmluZEZvcm0oPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTJT4sPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9VVUlEJT4pIj48bGFiZWwgZm9yPSJyYWRpb19maW5kX3NlcnZpY2VfdXVpZCI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fUkFESU9fVVVJRCIpJT48L2xhYmVsPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICA8L2Zvcm0+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvUmVnRmluZFNlcnZpY2VzU2ltcGxlRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvUmVnRmluZFNlcnZpY2VzQWR2YW5jZWRGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgiZmluZFNlcnZpY2VVVUlEIik7Ci0gICBTdHJpbmdbXSBvdGhlclByb3BlcnRpZXMgPSB7InVkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZVVVSURBY3Rpb25KU1AuanNwIixVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9LRVksIkZPUk1fTEFCRUxfRklORF9TRVJWSUNFX1VVSURfREVTQyJ9OwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKG90aGVyUHJvcGVydGllcyk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL1JlZ0ZpbmRVVUlERm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2Rpdj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdGaW5kU2VydmljZXNTaW1wbGVGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdGaW5kU2VydmljZXNTaW1wbGVGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDBiNzI4MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnRmluZFNlcnZpY2VzU2ltcGxlRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzdWJRdWVyeUtleVByb3BlcnR5IiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuU3ViUXVlcnlLZXlQcm9wZXJ0eSIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgLy8gc2VsZWN0ZWROb2RlIGNvdWxkIGJlIHRoZSByZWdpc3RyeSBvciBxdWVyeSBub2Rlcy4KLSAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgIEZvcm1Ub29sIGZvcm1Ub29sID0gKEZvcm1Ub29sKShzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkgPSAoKE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlKWZvcm1Ub29sKS5nZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXlQcm9wZXJ0eS5nZXRTdWJRdWVyeUtleSgpKTsKLSU+Ci08ZGl2IGlkPSJmaW5kU2VydmljZXNTaW1wbGUiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvYWN0aW9ucy9SZWdGaW5kU2VydmljZXNTaW1wbGVBY3Rpb25KU1AuanNwIikpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG9uU3VibWl0PSJyZXR1cm4gcHJvY2Vzc0Zvcm0odGhpcykiPgotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZJT4iPgotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfTkFNRSU+Ij4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTEwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9GSU5EX1NFUlZJQ0VTX1NJTVBMRV9ERVNDIiklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0zMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgPGxhYmVsIGZvcj0iaW5wdXRfZmluZF9zZXJ2aWNlc19zaW1wbGVfbmFtZSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTkFNRSIpJT48L2xhYmVsPgotPCUKLSAgIGlmICghZm9ybVRvb2xQSS5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9OQU1FKSkKLSAgIHsKLSU+Ci0gICAgICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotPCUKLSAgIH0KLSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQ+IDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iaW5wdXRfZmluZF9zZXJ2aWNlc19zaW1wbGVfbmFtZSIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9OQU1FJT4iIGNsYXNzPSJ0ZXh0ZW50ZXIiPiA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9zaW1wbGVDb21tb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICA8L2Zvcm0+Ci08L2Rpdj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdGaW5kVVVJREZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0ZpbmRVVUlERm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlMzlkYjIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ0ZpbmRVVUlERm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzdWJRdWVyeUtleVByb3BlcnR5IiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuU3ViUXVlcnlLZXlQcm9wZXJ0eSIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIC8vIHNlbGVjdGVkTm9kZSBjb3VsZCBiZSB0aGUgcmVnaXN0cnkgb3IgcXVlcnkgbm9kZXMuCi0gICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICBGb3JtVG9vbCBmb3JtVG9vbCA9IChGb3JtVG9vbCkoc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpKTsKLSAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSBmb3JtVG9vbFBJID0gKChNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSlmb3JtVG9vbCkuZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHN1YlF1ZXJ5S2V5UHJvcGVydHkuZ2V0U3ViUXVlcnlLZXkoKSk7Ci0gICAKLSAgIFN0cmluZyBmb3JtQ29udGFpbmVySWQgPSBzZWN0aW9uSGVhZGVySW5mby5nZXRDb250YWluZXJJZCgpOwotICAgU3RyaW5nW10gb3RoZXJQcm9wZXJ0aWVzID0gKFN0cmluZ1tdKShzZWN0aW9uSGVhZGVySW5mby5nZXRPdGhlclByb3BlcnRpZXMoKSk7Ci0gICBTdHJpbmcgYWN0aW9uTGluayA9IChTdHJpbmcpb3RoZXJQcm9wZXJ0aWVzWzBdOwotICAgU3RyaW5nIHV1aWRFbnRyeUtleSA9IChTdHJpbmcpb3RoZXJQcm9wZXJ0aWVzWzFdOwotICAgU3RyaW5nIGRlc2NyaXB0aW9uS2V5ID0gKFN0cmluZylvdGhlclByb3BlcnRpZXNbMl07Ci0lPgotPGRpdiBpZD0iPCU9Zm9ybUNvbnRhaW5lcklkJT4iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoYWN0aW9uTGluaykpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG9uU3VibWl0PSJyZXR1cm4gcHJvY2Vzc0Zvcm0odGhpcykiPgotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuU1VCUVVFUllfS0VZJT4iPgotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfTkFNRSU+Ij4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTEwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZShkZXNjcmlwdGlvbktleSklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0zMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgPGxhYmVsIGZvcj0iPCU9KGZvcm1Db250YWluZXJJZCsiX2lucHV0X3V1aWRfa2V5IiklPiI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVVVJRF9LRVkiKSU+PC9sYWJlbD4KLTwlCi0gICBpZiAoIWZvcm1Ub29sUEkuaXNJbnB1dFZhbGlkKHV1aWRFbnRyeUtleSkpCi0gICB7Ci0lPgotICAgICAgICAgIDwlPUhUTUxVdGlscy5yZWRBc3RlcmlzaygpJT4KLTwlCi0gICB9Ci0lPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkPiA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9IjwlPShmb3JtQ29udGFpbmVySWQrIl9pbnB1dF91dWlkX2tleSIpJT4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9LRVklPiIgY2xhc3M9InRleHRlbnRlciI+IDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL3NpbXBsZUNvbW1vbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gIDwvZm9ybT4KLTwvZGl2PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnUHVibGlzaEJ1c2luZXNzQWR2YW5jZWRGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGRlMWE5My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnUHVibGlzaEJ1c2luZXNzQWR2YW5jZWRGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InN1YlF1ZXJ5S2V5UHJvcGVydHkiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5TdWJRdWVyeUtleVByb3BlcnR5IiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgRm9ybVRvb2wgZm9ybVRvb2wgPSAoRm9ybVRvb2wpKHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKSk7Ci0gICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSA9ICgoTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UpZm9ybVRvb2wpLmdldEZvcm1Ub29sUHJvcGVydGllcyhzdWJRdWVyeUtleVByb3BlcnR5LmdldFN1YlF1ZXJ5S2V5KCkpOwotJT4KLTxkaXYgaWQ9InB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkIiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnMvUmVnUHVibGlzaEJ1c2luZXNzQWR2YW5jZWRBY3Rpb25KU1AuanNwIikpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG9uU3VibWl0PSJyZXR1cm4gcHJvY2Vzc1B1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkRm9ybSh0aGlzKSI+Ci0gICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0xMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUFVCTElTSF9CVVNJTkVTU19BRFZBTkNFRF9ERVNDIiklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgicHVibGlzaEJ1c2luZXNzQWR2YW5jZWRBdXRoZW50aWNhdGlvbiIpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9hdXRoZW50aWNhdGlvbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJwdWJsaXNoQnVzaW5lc3NBZHZhbmNlZE5hbWVzIik7Ci0gICBTdHJpbmdbXSBuYW1lU3BlY2lmaWNJbmZvID0geyJGT1JNX0xBQkVMX05BTUVTIiwiRk9STV9MQUJFTF9OQU1FIixTdHJpbmcudmFsdWVPZighZm9ybVRvb2xQSS5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19OQU1FUykpfTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhuYW1lU3BlY2lmaWNJbmZvKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvbGFuZ3VhZ2VJbnB1dF90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJwdWJsaXNoQnVzaW5lc3NBZHZhbmNlZERlc2NyaXB0aW9ucyIpOwotICAgU3RyaW5nW10gZGVzY1NwZWNpZmljSW5mbyA9IHsiRk9STV9MQUJFTF9ERVNDUklQVElPTlMiLCJGT1JNX0xBQkVMX0RFU0NSSVBUSU9OIixTdHJpbmcudmFsdWVPZighZm9ybVRvb2xQSS5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ERVNDUklQVElPTlMpKX07Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMoZGVzY1NwZWNpZmljSW5mbyk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2xhbmd1YWdlSW5wdXRfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgicHVibGlzaEJ1c2luZXNzQWR2YW5jZWRJZGVudGlmaWVycyIpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9pZGVudGlmaWVyc190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJwdWJsaXNoQnVzaW5lc3NBZHZhbmNlZENhdGVnb3JpZXMiKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvY2F0ZWdvcmllc190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJwdWJsaXNoQnVzaW5lc3NBZHZhbmNlZERpc2NvdmVyeVVSTHMiKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhuZXcgQm9vbGVhbighZm9ybVRvb2xQSS5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ESVNDT1ZFUllVUkxTKSkpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9kaXNjb3ZlcnlVUkxzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4gICAKLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvc2ltcGxlQ29tbW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgPC9mb3JtPgotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnUHVibGlzaEJ1c2luZXNzRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnUHVibGlzaEJ1c2luZXNzRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3YjMwYzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hCdXNpbmVzc0Zvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4KLTxkaXYgaWQ9InB1Ymxpc2hCdXNpbmVzcyIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICA8Zm9ybSBuYW1lPSJwdWJsaXNoQnVzaW5lc3NTdHlsZSI+Ci0gICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgIDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1BVQkxJU0hfRk9STSIpJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZD4KLSAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIGlkPSJyYWRpb19wdWJsaXNoX2J1c2luZXNzX3NpbXBsZSIgY2xhc3M9InJhZGlvIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0JVU0lORVNTRVMlPiIgb25DbGljaz0ic2hvd1B1Ymxpc2hGb3JtKDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTJT4sPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TSU1QTEUlPikiPjxsYWJlbCBmb3I9InJhZGlvX3B1Ymxpc2hfYnVzaW5lc3Nfc2ltcGxlIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9SQURJT19TSU1QTEUiKSU+PC9sYWJlbD4KLSAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIGlkPSJyYWRpb19wdWJsaXNoX2J1c2luZXNzX2FkdmFuY2UiIGNsYXNzPSJyYWRpbyIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9CVVNJTkVTU0VTJT4iIG9uQ2xpY2s9InNob3dQdWJsaXNoRm9ybSg8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUyU+LDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQURWQU5DRUQlPikiPjxsYWJlbCBmb3I9InJhZGlvX3B1Ymxpc2hfYnVzaW5lc3NfYWR2YW5jZSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fUkFESU9fQURWQU5DRUQiKSU+PC9sYWJlbD4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgPC9mb3JtPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hCdXNpbmVzc1NpbXBsZUZvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2Rpdj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdQdWJsaXNoQnVzaW5lc3NTaW1wbGVGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdQdWJsaXNoQnVzaW5lc3NTaW1wbGVGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWMxOTNkNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnUHVibGlzaEJ1c2luZXNzU2ltcGxlRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzdWJRdWVyeUtleVByb3BlcnR5IiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuU3ViUXVlcnlLZXlQcm9wZXJ0eSIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgIEZvcm1Ub29sIGZvcm1Ub29sID0gKEZvcm1Ub29sKShzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkgPSAoKE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlKWZvcm1Ub29sKS5nZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXlQcm9wZXJ0eS5nZXRTdWJRdWVyeUtleSgpKTsKLSU+Ci08ZGl2IGlkPSJwdWJsaXNoQnVzaW5lc3NTaW1wbGUiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvYWN0aW9ucy9SZWdQdWJsaXNoQnVzaW5lc3NTaW1wbGVBY3Rpb25KU1AuanNwIikpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG9uU3VibWl0PSJyZXR1cm4gaGFuZGxlU3VibWl0KHRoaXMpIj4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTEwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9QVUJMSVNIX0JVU0lORVNTX1NJTVBMRV9ERVNDIiklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgicHVibGlzaEJ1c2luZXNzU2ltcGxlQXV0aGVudGljYXRpb24iKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvYXV0aGVudGljYXRpb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgIDxsYWJlbCBmb3I9ImlucHV0X3B1Ymxpc2hfYnVzaW5lc3Nfc2ltcGxlX25hbWUiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05BTUUiKSU+PC9sYWJlbD4KLTwlCi0gICBpZiAoIWZvcm1Ub29sUEkuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX0JVU0lORVNTX05BTUUpKQotICAgewotJT4KLSAgICAgICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci08JQotICAgfQotJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZD4gPGlucHV0IHR5cGU9InRleHQiIGlkPSJpbnB1dF9wdWJsaXNoX2J1c2luZXNzX3NpbXBsZV9uYW1lIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9CVVNJTkVTU19OQU1FJT4iIGNsYXNzPSJ0ZXh0ZW50ZXIiPiA8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgIDxsYWJlbCBmb3I9ImlucHV0X3B1Ymxpc2hfYnVzaW5lc3Nfc2ltcGxlX2Rlc2MiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0RFU0NSSVBUSU9OIiklPjwvbGFiZWw+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQ+IDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iaW5wdXRfcHVibGlzaF9idXNpbmVzc19zaW1wbGVfZGVzYyIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfQlVTSU5FU1NfREVTQ1JJUFRJT04lPiIgY2xhc3M9InRleHRlbnRlciI+IDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL3NpbXBsZUNvbW1vbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gIDwvZm9ybT4KLTwvZGl2PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdQdWJsaXNoRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5ZjFjMDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDU4MyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai5kYXRhdHlwZS5idXNpbmVzcy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGouZGF0YXR5cGUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIC8vIHNlbGVjdGVkTm9kZSBtdXN0IGJlIGEgcmVnaXN0cnkgbm9kZS4KLSAgIE5vZGUgcmVnTm9kZSA9IG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICBGb3JtVG9vbCBmb3JtVG9vbCA9IChGb3JtVG9vbCkocmVnTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKSk7Ci0lPgotPGpzcDp1c2VCZWFuIGlkPSJzdWJRdWVyeUtleVByb3BlcnR5IiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuU3ViUXVlcnlLZXlQcm9wZXJ0eSIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgIFN0cmluZyBzdWJRdWVyeUtleSA9IChTdHJpbmcpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9LRVkpOwotICAgc3ViUXVlcnlLZXlQcm9wZXJ0eS5zZXRTdWJRdWVyeUtleShzdWJRdWVyeUtleSk7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTwlCi0gICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSA9ICgoTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UpZm9ybVRvb2wpLmdldEZvcm1Ub29sUHJvcGVydGllcyhzdWJRdWVyeUtleVByb3BlcnR5LmdldFN1YlF1ZXJ5S2V5KCkpOwotICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSU+Ci08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9SRUdJU1RSWV9QVUJMSVNIIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL2Zvcm1zdWJtaXQuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXRhYmxlcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgdmFyIHNlY3Rpb25JZHMgPSBbInB1Ymxpc2hCdXNpbmVzcyIsInB1Ymxpc2hTZXJ2aWNlIiwicHVibGlzaFNlcnZpY2VJbnRlcmZhY2UiXTsKLSAgdmFyIHB1Ymxpc2hCdXNpbmVzc1NlY3Rpb25JZHMgPSBbInB1Ymxpc2hCdXNpbmVzc1NpbXBsZSIsInB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkIl07Ci0gIHZhciBwdWJsaXNoU2VydmljZVNlY3Rpb25JZHMgPSBbInB1Ymxpc2hTZXJ2aWNlU2ltcGxlIiwicHVibGlzaFNlcnZpY2VBZHZhbmNlZCJdOwotICB2YXIgcHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTZWN0aW9uSWRzID0gWyJwdWJsaXNoU2VydmljZUludGVyZmFjZVNpbXBsZSIsInB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWQiXTsKLSAgdmFyIHN0eWxlRm9ybXMgPSBbInB1Ymxpc2hCdXNpbmVzc1N0eWxlIiwicHVibGlzaFNlcnZpY2VTdHlsZSIsInB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU3R5bGUiXTsKLQotICBmdW5jdGlvbiBwcm9jZXNzUHVibGlzaEJ1c2luZXNzQWR2YW5jZWRGb3JtKGZvcm0pCi0gIHsKLSAgICBpZiAoaGFuZGxlU3VibWl0KGZvcm0pKQotICAgIHsKLSAgICAgIHByb2Nlc3NMYW5ndWFnZUlucHV0VGFibGUoInB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkTmFtZXMiLCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX05BTUVfTEFOR1VBR0UlPiIsIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTkFNRSU+Iixmb3JtKTsKLSAgICAgIHByb2Nlc3NMYW5ndWFnZUlucHV0VGFibGUoInB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkRGVzY3JpcHRpb25zIiwiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9ERVNDUklQVElPTl9MQU5HVUFHRSU+IiwiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9ERVNDUklQVElPTiU+Iixmb3JtKTsKLSAgICAgIHByb2Nlc3NJZGVudGlmaWVyVGFibGUoInB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkSWRlbnRpZmllcnMiLGZvcm0pOwotICAgICAgcHJvY2Vzc0NhdGVnb3J5VGFibGUoInB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkQ2F0ZWdvcmllcyIsZm9ybSxmYWxzZSk7Ci0gICAgICBwcm9jZXNzRGlzY292ZXJ5VVJMVGFibGUoInB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkRGlzY292ZXJ5VVJMcyIsZm9ybSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgZnVuY3Rpb24gcHJvY2Vzc1B1Ymxpc2hTZXJ2aWNlU2ltcGxlRm9ybShmb3JtKQotICB7Ci0gICAgaWYgKGhhbmRsZVN1Ym1pdChmb3JtKSkKLSAgICB7Ci0gICAgICBwcm9jZXNzUmVzdWx0VGFibGUoInB1Ymxpc2hTZXJ2aWNlU2ltcGxlQnVzaW5lc3MiLCI8JT1VRERJQWN0aW9uSW5wdXRzLk5PREVJRF9CVVNJTkVTUyU+Iixmb3JtLGZhbHNlKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBmdW5jdGlvbiBwcm9jZXNzUHVibGlzaFNlcnZpY2VBZHZhbmNlZEZvcm0oZm9ybSkKLSAgewotICAgIGlmIChoYW5kbGVTdWJtaXQoZm9ybSkpCi0gICAgewotICAgICAgcHJvY2Vzc1Jlc3VsdFRhYmxlKCJwdWJsaXNoU2VydmljZUFkdmFuY2VkQnVzaW5lc3MiLCI8JT1VRERJQWN0aW9uSW5wdXRzLk5PREVJRF9CVVNJTkVTUyU+Iixmb3JtLGZhbHNlKTsKLSAgICAgIHByb2Nlc3NSZXN1bHRUYWJsZSgicHVibGlzaFNlcnZpY2VBZHZhbmNlZFNlcnZpY2VJbnRlcmZhY2UiLCI8JT1VRERJQWN0aW9uSW5wdXRzLk5PREVJRF9TRVJWSUNFX0lOVEVSRkFDRSU+Iixmb3JtLGZhbHNlKTsKLSAgICAgIHByb2Nlc3NMYW5ndWFnZUlucHV0VGFibGUoInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWROYW1lcyIsIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTkFNRV9MQU5HVUFHRSU+IiwiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9OQU1FJT4iLGZvcm0pOwotICAgICAgcHJvY2Vzc0xhbmd1YWdlSW5wdXRUYWJsZSgicHVibGlzaFNlcnZpY2VBZHZhbmNlZERlc2NyaXB0aW9ucyIsIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfREVTQ1JJUFRJT05fTEFOR1VBR0UlPiIsIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfREVTQ1JJUFRJT04lPiIsZm9ybSk7Ci0gICAgICBwcm9jZXNzQ2F0ZWdvcnlUYWJsZSgicHVibGlzaFNlcnZpY2VBZHZhbmNlZENhdGVnb3JpZXMiLGZvcm0sZmFsc2UpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIGZ1bmN0aW9uIHByb2Nlc3NQdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkRm9ybShmb3JtKQotICB7Ci0gICAgaWYgKGhhbmRsZVN1Ym1pdChmb3JtKSkKLSAgICB7Ci0gICAgICBwcm9jZXNzTGFuZ3VhZ2VJbnB1dFRhYmxlKCJwdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkRGVzY3JpcHRpb25zIiwiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9ERVNDUklQVElPTl9MQU5HVUFHRSU+IiwiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9ERVNDUklQVElPTiU+Iixmb3JtKTsKLSAgICAgIHByb2Nlc3NJZGVudGlmaWVyVGFibGUoInB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWRJZGVudGlmaWVycyIsZm9ybSk7Ci0gICAgICBwcm9jZXNzQ2F0ZWdvcnlUYWJsZSgicHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZENhdGVnb3JpZXMiLGZvcm0sZmFsc2UpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIGZ1bmN0aW9uIHNldERlZmF1bHRzKCkKLSAgewotICAgIHZhciBwdWJsaXNoID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInB1Ymxpc2giKTsKLSAgICBwdWJsaXNoLnNlbGVjdGVkSW5kZXggPSA8JT1mb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTSklPjsKLSAgICBzZXREZWZhdWx0c0ZvclB1Ymxpc2hCdXNpbmVzc0Zvcm1zKCk7Ci0gICAgc2V0RGVmYXVsdHNGb3JQdWJsaXNoU2VydmljZUZvcm1zKCk7Ci0gICAgc2V0RGVmYXVsdHNGb3JQdWJsaXNoU2VydmljZUludGVyZmFjZUZvcm1zKCk7Ci08JQotICAgaWYgKCFyZWdFbGVtZW50LmlzTG9nZ2VkSW4oKSkKLSAgIHsKLSU+Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInB1Ymxpc2hCdXNpbmVzc1NpbXBsZUF1dGhlbnRpY2F0aW9uIikuc3R5bGUuZGlzcGxheSA9ICIiOwotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwdWJsaXNoQnVzaW5lc3NBZHZhbmNlZEF1dGhlbnRpY2F0aW9uIikuc3R5bGUuZGlzcGxheSA9ICIiOwotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwdWJsaXNoU2VydmljZVNpbXBsZUF1dGhlbnRpY2F0aW9uIikuc3R5bGUuZGlzcGxheSA9ICIiOwotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwdWJsaXNoU2VydmljZUFkdmFuY2VkQXV0aGVudGljYXRpb24iKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2ltcGxlQXV0aGVudGljYXRpb24iKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWRBdXRoZW50aWNhdGlvbiIpLnN0eWxlLmRpc3BsYXkgPSAiIjsKLTwlCi0gICB9Ci0lPgotICAgIHNob3dNYWluRm9ybShwdWJsaXNoLnZhbHVlKTsKLSAgfQotCi0gIGZ1bmN0aW9uIHNldEF1dGhlbnRpY2F0aW9uU2VjdGlvbkRlZmF1bHRzKGZvcm0pCi0gIHsKLTwlCi0gICBTdHJpbmcgcHVibGlzaFVSTCA9IChTdHJpbmcpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCk7Ci0gICBTdHJpbmcgdXNlcklkID0gKFN0cmluZylmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICBTdHJpbmcgcGFzc3dvcmQgPSAoU3RyaW5nKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotJT4KLSAgICBmb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUocHVibGlzaFVSTCklPiI7Ci0gICAgZm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1c2VySWQpJT4iOwotICAgIGZvcm0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZShwYXNzd29yZCklPiI7Ci0gIH0KLQotICBmdW5jdGlvbiBzZXREZWZhdWx0c0ZvclB1Ymxpc2hCdXNpbmVzc0Zvcm1zKCkKLSAgewotICAgIC8vIEluaXRpYWxpemUgdGhlIHB1Ymxpc2hCdXNpbmVzcyBmb3JtLgotPCUKLSAgIFN0cmluZyBwdWJsaXNoQnVzaW5lc3NTdHlsZUluZGV4ID0gKFN0cmluZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQlVTSU5FU1NFUyk7Ci0lPgotICAgIGRvY3VtZW50LmZvcm1zW3N0eWxlRm9ybXNbPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVMlPl1dLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQlVTSU5FU1NFUyU+WzwlPXB1Ymxpc2hCdXNpbmVzc1N0eWxlSW5kZXglPl0uY2hlY2tlZCA9IHRydWU7Ci0gICAgdmFyIHB1Ymxpc2hCdXNpbmVzc1NpbXBsZVNlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwdWJsaXNoQnVzaW5lc3NTZWN0aW9uSWRzWzwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0lNUExFJT5dKTsKLSAgICB2YXIgcHVibGlzaEJ1c2luZXNzU2ltcGxlRm9ybSA9IHB1Ymxpc2hCdXNpbmVzc1NpbXBsZVNlY3Rpb24uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImZvcm0iKS5pdGVtKDApOwotICAgIHNldEF1dGhlbnRpY2F0aW9uU2VjdGlvbkRlZmF1bHRzKHB1Ymxpc2hCdXNpbmVzc1NpbXBsZUZvcm0pOwotICAgIHB1Ymxpc2hCdXNpbmVzc1NpbXBsZUZvcm0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfQlVTSU5FU1NfTkFNRSU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSgoU3RyaW5nKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfQlVTSU5FU1NfTkFNRSkpJT4iOwotICAgIHB1Ymxpc2hCdXNpbmVzc1NpbXBsZUZvcm0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfQlVTSU5FU1NfREVTQ1JJUFRJT04lPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoKFN0cmluZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX0JVU0lORVNTX0RFU0NSSVBUSU9OKSklPiI7Ci0KLSAgICAvLyBBZHZhbmNlZCBmb3JtIGRldGFpbHMuCi0gICAgdmFyIHB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkU2VjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHB1Ymxpc2hCdXNpbmVzc1NlY3Rpb25JZHNbPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9BRFZBTkNFRCU+XSk7Ci0gICAgdmFyIHB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkRm9ybSA9IHB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkU2VjdGlvbi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZm9ybSIpLml0ZW0oMCk7Ci0gICAgc2V0QXV0aGVudGljYXRpb25TZWN0aW9uRGVmYXVsdHMocHVibGlzaEJ1c2luZXNzQWR2YW5jZWRGb3JtKTsKLSAgICB2YXIgcHVibGlzaEJ1c2luZXNzQWR2YW5jZWROYW1lc1RhYmxlID0gZ2V0VGFibGUoInB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkTmFtZXMiKTsKLSAgICB2YXIgcHVibGlzaEJ1c2luZXNzQWR2YW5jZWREZXNjcmlwdGlvbnNUYWJsZSA9IGdldFRhYmxlKCJwdWJsaXNoQnVzaW5lc3NBZHZhbmNlZERlc2NyaXB0aW9ucyIpOwotICAgIHZhciBwdWJsaXNoQnVzaW5lc3NBZHZhbmNlZERpc2NvdmVyeVVSTHNUYWJsZSA9IGdldFRhYmxlKCJwdWJsaXNoQnVzaW5lc3NBZHZhbmNlZERpc2NvdmVyeVVSTHMiKTsKLTwlCi0gICBWZWN0b3IgYnVzTmFtZVZlY3RvciA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX05BTUVTKTsKLSAgIGlmIChidXNOYW1lVmVjdG9yICE9IG51bGwpCi0gICB7Ci0gICAgIGZvciAoaW50IGk9MDtpPGJ1c05hbWVWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIE5hbWUgbmFtZSA9IChOYW1lKWJ1c05hbWVWZWN0b3IuZWxlbWVudEF0KGkpOwotJT4KLSAgICBhZGRMYW5ndWFnZUlucHV0Um93KCJwdWJsaXNoQnVzaW5lc3NBZHZhbmNlZE5hbWVzIiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfTkFNRV9URVhUX1ZBTFVFIikpJT4iKTsKLSAgICBzZXRMYW5ndWFnZUlucHV0Um93U2V0dGluZ3MoInB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkTmFtZXMiLDwlPWklPiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKG5hbWUuZ2V0TGFuZygpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKG5hbWUuZ2V0VGV4dCgpKSU+Iik7Ci08JQotICAgICAgIGlmICghZm9ybVRvb2xQSS5pc1Jvd0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19OQU1FUyxpKSkKLSAgICAgICB7Ci0lPgotICAgIGhpZ2hsaWdodEVycmFudFJvdyhwdWJsaXNoQnVzaW5lc3NBZHZhbmNlZE5hbWVzVGFibGUucm93c1s8JT1pJT4rbnVtYmVyT2ZIZWFkZXJSb3dzXSwiZXJyYW50cm93Iik7Ci08JQotICAgICAgIH0KLSAgICAgfQotICAgfQotCi0gICBWZWN0b3IgYnVzRGVzY3JpcHRpb25WZWN0b3IgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9CVVNJTkVTU19ERVNDUklQVElPTlMpOwotICAgaWYgKGJ1c0Rlc2NyaXB0aW9uVmVjdG9yICE9IG51bGwpCi0gICB7Ci0gICAgIGZvciAoaW50IGk9MDtpPGJ1c0Rlc2NyaXB0aW9uVmVjdG9yLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IChEZXNjcmlwdGlvbilidXNEZXNjcmlwdGlvblZlY3Rvci5lbGVtZW50QXQoaSk7Ci0lPgotICAgIGFkZExhbmd1YWdlSW5wdXRSb3coInB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkRGVzY3JpcHRpb25zIiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfREVTQ1JJUFRJT05fVEVYVF9WQUxVRSIpKSU+Iik7Ci0gICAgc2V0TGFuZ3VhZ2VJbnB1dFJvd1NldHRpbmdzKCJwdWJsaXNoQnVzaW5lc3NBZHZhbmNlZERlc2NyaXB0aW9ucyIsPCU9aSU+LCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoZGVzY3JpcHRpb24uZ2V0TGFuZygpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGRlc2NyaXB0aW9uLmdldFRleHQoKSklPiIpOwotPCUKLSAgICAgICBpZiAoIWZvcm1Ub29sUEkuaXNSb3dJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfREVTQ1JJUFRJT05TLGkpKQotICAgICAgIHsKLSU+Ci0gICAgaGlnaGxpZ2h0RXJyYW50Um93KHB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkRGVzY3JpcHRpb25zVGFibGUucm93c1s8JT1pJT4rbnVtYmVyT2ZIZWFkZXJSb3dzXSwiZXJyYW50cm93Iik7Ci08JQotICAgICAgIH0KLSAgICAgfQotICAgfQotCi0gICBJZGVudGlmaWVyQmFnIGJ1c0lkQmFnID0gKElkZW50aWZpZXJCYWcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0lERU5USUZJRVJTKTsKLSAgIGlmIChidXNJZEJhZyAhPSBudWxsKQotICAgewotICAgICBWZWN0b3Iga2V5ZWRSZWZlcmVuY2VWZWN0b3IgPSBidXNJZEJhZy5nZXRLZXllZFJlZmVyZW5jZVZlY3RvcigpOwotICAgICBmb3IgKGludCBpPTA7aTxrZXllZFJlZmVyZW5jZVZlY3Rvci5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSAoS2V5ZWRSZWZlcmVuY2Upa2V5ZWRSZWZlcmVuY2VWZWN0b3IuZWxlbWVudEF0KGkpOwotJT4KLSAgICBhZGRJZGVudGlmaWVyUm93KCJwdWJsaXNoQnVzaW5lc3NBZHZhbmNlZElkZW50aWZpZXJzIik7Ci0gICAgc2V0SWRlbnRpZmllclJvd1NldHRpbmdzKCJwdWJsaXNoQnVzaW5lc3NBZHZhbmNlZElkZW50aWZpZXJzIiw8JT1pJT4sIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRUTW9kZWxLZXkoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRLZXlOYW1lKCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0S2V5VmFsdWUoKSklPiIpOwotPCUKLSAgICAgfQotICAgfQotCi0gICBDYXRlZ29yeUJhZyBidXNDYXRCYWcgPSAoQ2F0ZWdvcnlCYWcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0NBVEVHT1JJRVMpOwotICAgaWYgKGJ1c0NhdEJhZyAhPSBudWxsKQotICAgewotICAgICBWZWN0b3Iga2V5ZWRSZWZlcmVuY2VWZWN0b3IgPSBidXNDYXRCYWcuZ2V0S2V5ZWRSZWZlcmVuY2VWZWN0b3IoKTsKLSAgICAgZm9yIChpbnQgaT0wO2k8a2V5ZWRSZWZlcmVuY2VWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gKEtleWVkUmVmZXJlbmNlKWtleWVkUmVmZXJlbmNlVmVjdG9yLmVsZW1lbnRBdChpKTsKLSU+Ci0gICAgYWRkQ2F0ZWdvcnlSb3coInB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkQ2F0ZWdvcmllcyIpOwotICAgIHNldENhdGVnb3J5Um93U2V0dGluZ3MoInB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkQ2F0ZWdvcmllcyIsPCU9aSU+LCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0VE1vZGVsS2V5KCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0S2V5TmFtZSgpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldEtleVZhbHVlKCkpJT4iKTsKLTwlCi0gICAgIH0KLSAgIH0KLSAgCi0gICBEaXNjb3ZlcnlVUkxzIGRpc2NvdmVyeVVSTHMgPSAoRGlzY292ZXJ5VVJMcylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQlVTSU5FU1NfRElTQ09WRVJZVVJMUyk7Ci0gICBpZiAoZGlzY292ZXJ5VVJMcyAhPSBudWxsKQotICAgewotICAgICBWZWN0b3IgZGlzY292ZXJ5VVJMVmVjdG9yID0gZGlzY292ZXJ5VVJMcy5nZXREaXNjb3ZlcnlVUkxWZWN0b3IoKTsKLSAgICAgZm9yIChpbnQgaT0wO2k8ZGlzY292ZXJ5VVJMVmVjdG9yLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBEaXNjb3ZlcnlVUkwgZGlzY292ZXJ5VVJMID0gKERpc2NvdmVyeVVSTClkaXNjb3ZlcnlVUkxWZWN0b3IuZWxlbWVudEF0KGkpOwotJT4KLSAgICBhZGREaXNjb3ZlcnlVUkxSb3coInB1Ymxpc2hCdXNpbmVzc0FkdmFuY2VkRGlzY292ZXJ5VVJMcyIpOwotICAgIHNldERpc2NvdmVyeVVSTFJvd1NldHRpbmdzKCJwdWJsaXNoQnVzaW5lc3NBZHZhbmNlZERpc2NvdmVyeVVSTHMiLDwlPWklPiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGRpc2NvdmVyeVVSTC5nZXRUZXh0KCkpJT4iKTsKLTwlCi0gICAgICAgaWYgKCFmb3JtVG9vbFBJLmlzUm93SW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0JVU0lORVNTX0RJU0NPVkVSWVVSTFMsaSkpCi0gICAgICAgewotJT4KLSAgICBoaWdobGlnaHRFcnJhbnRSb3cocHVibGlzaEJ1c2luZXNzQWR2YW5jZWREaXNjb3ZlcnlVUkxzVGFibGUucm93c1s8JT1pJT4rbnVtYmVyT2ZIZWFkZXJSb3dzXSwiZXJyYW50cm93Iik7Ci08JQotICAgICAgIH0KLSAgICAgfQotICAgfQotJT4gICAgICAgCi0gICAgc2hvd1B1Ymxpc2hGb3JtKDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTJT4sPCU9cHVibGlzaEJ1c2luZXNzU3R5bGVJbmRleCU+KTsKLSAgfQotCi0gIGZ1bmN0aW9uIHNldERlZmF1bHRzRm9yUHVibGlzaFNlcnZpY2VGb3JtcygpCi0gIHsKLTwlCi0gICBTdHJpbmcgcHVibGlzaFNlcnZpY2VTdHlsZUluZGV4ID0gKFN0cmluZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRVMpOwotJT4KLSAgICBkb2N1bWVudC5mb3Jtc1tzdHlsZUZvcm1zWzwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUyU+XV0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFUyU+WzwlPXB1Ymxpc2hTZXJ2aWNlU3R5bGVJbmRleCU+XS5jaGVja2VkID0gdHJ1ZTsKLSAgICB2YXIgcHVibGlzaFNlcnZpY2VTaW1wbGVTZWN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHVibGlzaFNlcnZpY2VTZWN0aW9uSWRzWzwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0lNUExFJT5dKTsKLSAgICB2YXIgcHVibGlzaFNlcnZpY2VTaW1wbGVGb3JtID0gcHVibGlzaFNlcnZpY2VTaW1wbGVTZWN0aW9uLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJmb3JtIikuaXRlbSgwKTsKLSAgICBzZXRBdXRoZW50aWNhdGlvblNlY3Rpb25EZWZhdWx0cyhwdWJsaXNoU2VydmljZVNpbXBsZUZvcm0pOwotPCUKLSAgIFZlY3RvciBzZXJ2aWNlQnVzaW5lc3MgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9CVVNJTkVTUyk7Ci0gICBWZWN0b3Igc2VydmljZUJ1c2luZXNzQ29weSA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0JVU0lORVNTX0NPUFkpOwotICAgaWYgKHNlcnZpY2VCdXNpbmVzcyAhPSBudWxsKQotICAgewotICAgICBpZiAoc2VydmljZUJ1c2luZXNzQ29weSA9PSBudWxsKQotICAgICAgIHNlcnZpY2VCdXNpbmVzc0NvcHkgPSBuZXcgVmVjdG9yKCk7Ci0gICAgIGVsc2UKLSAgICAgICBzZXJ2aWNlQnVzaW5lc3NDb3B5LnJlbW92ZUFsbEVsZW1lbnRzKCk7Ci0gICAgIGZvciAoaW50IGk9MDtpPHNlcnZpY2VCdXNpbmVzcy5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgTGlzdEVsZW1lbnQgbGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpc2VydmljZUJ1c2luZXNzLmVsZW1lbnRBdChpKTsKLSAgICAgICBpbnQgdGFyZ2V0Tm9kZUlkID0gbGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Tm9kZUlkKCk7Ci0gICAgICAgaW50IHRhcmdldFRvb2xJZCA9IGxpc3RFbGVtZW50LmdldFRhcmdldFRvb2xJZCgpOwotICAgICAgIGludCB0YXJnZXRWaWV3SWQgPSBsaXN0RWxlbWVudC5nZXRUYXJnZXRWaWV3SWQoKTsKLSAgICAgICBTdHJpbmcgdXJsID0gU2VsZWN0U3ViUXVlcnlJdGVtQWN0aW9uLmdldEFjdGlvbkxpbmsodGFyZ2V0Tm9kZUlkLHRhcmdldFRvb2xJZCx0YXJnZXRWaWV3SWQsc3ViUXVlcnlLZXlQcm9wZXJ0eS5nZXRTdWJRdWVyeUtleSgpLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfQlVTSU5FU1MsaSxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUyxmYWxzZSk7Ci0gICAgICAgQnVzaW5lc3NFbnRpdHkgYmUgPSAoQnVzaW5lc3NFbnRpdHkpbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgc2VydmljZUJ1c2luZXNzQ29weS5hZGRFbGVtZW50KHNlcnZpY2VCdXNpbmVzcy5lbGVtZW50QXQoaSkpOwotJT4KLSAgICBhZGRSZXN1bHRSb3coInB1Ymxpc2hTZXJ2aWNlU2ltcGxlQnVzaW5lc3MiLDwlPXRhcmdldE5vZGVJZCU+LCI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQodXJsKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShiZS5nZXREZWZhdWx0TmFtZVN0cmluZygpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGJlLmdldERlZmF1bHREZXNjcmlwdGlvblN0cmluZygpKSU+Iik7Ci08JQotICAgICB9Ci0gICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9CVVNJTkVTU19DT1BZLHNlcnZpY2VCdXNpbmVzc0NvcHkpOwotICAgfQotICAgZWxzZQotICAgewotICAgICBzZXJ2aWNlQnVzaW5lc3MgPSBuZXcgVmVjdG9yKCk7Ci0gICAgIHNlcnZpY2VCdXNpbmVzc0NvcHkgPSBuZXcgVmVjdG9yKCk7Ci0gICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9CVVNJTkVTUyxzZXJ2aWNlQnVzaW5lc3MpOwotICAgICBmb3JtVG9vbFBJLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfQlVTSU5FU1NfQ09QWSxzZXJ2aWNlQnVzaW5lc3NDb3B5KTsKLSAgIH0KLSU+Ci08JQotICAgVmVjdG9yIHNlcnZpY2VJbnRlcmZhY2VzID0gKFZlY3Rvcilmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX0lOVEVSRkFDRVMpOwotICAgVmVjdG9yIHNlcnZpY2VJbnRlcmZhY2VzQ29weSA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9JTlRFUkZBQ0VTX0NPUFkpOwotICAgaWYgKHNlcnZpY2VJbnRlcmZhY2VzICE9IG51bGwpCi0gICB7Ci0gICAgIGlmIChzZXJ2aWNlSW50ZXJmYWNlc0NvcHkgPT0gbnVsbCkKLSAgICAgICBzZXJ2aWNlSW50ZXJmYWNlc0NvcHkgPSBuZXcgVmVjdG9yKCk7Ci0gICAgIGVsc2UKLSAgICAgICBzZXJ2aWNlSW50ZXJmYWNlc0NvcHkucmVtb3ZlQWxsRWxlbWVudHMoKTsKLSAgICAgZm9yIChpbnQgaT0wO2k8c2VydmljZUludGVyZmFjZXMuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KXNlcnZpY2VJbnRlcmZhY2VzLmVsZW1lbnRBdChpKTsKLSAgICAgICBpbnQgdGFyZ2V0Tm9kZUlkID0gbGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Tm9kZUlkKCk7Ci0gICAgICAgaW50IHRhcmdldFRvb2xJZCA9IGxpc3RFbGVtZW50LmdldFRhcmdldFRvb2xJZCgpOwotICAgICAgIGludCB0YXJnZXRWaWV3SWQgPSBsaXN0RWxlbWVudC5nZXRUYXJnZXRWaWV3SWQoKTsKLSAgICAgICBTdHJpbmcgdXJsID0gU2VsZWN0U3ViUXVlcnlJdGVtQWN0aW9uLmdldEFjdGlvbkxpbmsodGFyZ2V0Tm9kZUlkLHRhcmdldFRvb2xJZCx0YXJnZXRWaWV3SWQsc3ViUXVlcnlLZXlQcm9wZXJ0eS5nZXRTdWJRdWVyeUtleSgpLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX0lOVEVSRkFDRVMsaSxVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTLGZhbHNlKTsKLSAgICAgICBUTW9kZWwgdE1vZGVsID0gKFRNb2RlbClsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICBzZXJ2aWNlSW50ZXJmYWNlc0NvcHkuYWRkRWxlbWVudChzZXJ2aWNlSW50ZXJmYWNlcy5lbGVtZW50QXQoaSkpOwotJT4KLSAgICBhZGRSZXN1bHRSb3coInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRTZXJ2aWNlSW50ZXJmYWNlIiw8JT10YXJnZXROb2RlSWQlPiwiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KHVybCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodE1vZGVsLmdldE5hbWVTdHJpbmcoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZSh0TW9kZWwuZ2V0RGVmYXVsdERlc2NyaXB0aW9uU3RyaW5nKCkpJT4iKTsKLTwlCi0gICAgIH0KLSAgICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9JTlRFUkZBQ0VTX0NPUFksc2VydmljZUludGVyZmFjZXNDb3B5KTsKLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSAgICAgc2VydmljZUludGVyZmFjZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgIHNlcnZpY2VJbnRlcmZhY2VzQ29weSA9IG5ldyBWZWN0b3IoKTsKLSAgICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9JTlRFUkZBQ0VTLHNlcnZpY2VJbnRlcmZhY2VzKTsKLSAgICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfU0VSVklDRV9JTlRFUkZBQ0VTX0NPUFksc2VydmljZUludGVyZmFjZXNDb3B5KTsKLSAgIH0KLSU+Ci0gICAgcHVibGlzaFNlcnZpY2VTaW1wbGVGb3JtLjwlPUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XU0RMX1VSTCU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSgoU3RyaW5nKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9XU0RMX1VSTCkpJT4iOwotICAgIHB1Ymxpc2hTZXJ2aWNlU2ltcGxlRm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX05BTUUlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoKFN0cmluZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfTkFNRSkpJT4iOwotICAgIHB1Ymxpc2hTZXJ2aWNlU2ltcGxlRm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0RFU0NSSVBUSU9OJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0RFU0NSSVBUSU9OKSklPiI7Ci0KLSAgICAvLyBBZHZhbmNlZCBmb3JtIGRldGFpbHMuCi0gICAgdmFyIHB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRTZWN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHVibGlzaFNlcnZpY2VTZWN0aW9uSWRzWzwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfQURWQU5DRUQlPl0pOwotICAgIHZhciBwdWJsaXNoU2VydmljZUFkdmFuY2VkRm9ybSA9IHB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRTZWN0aW9uLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJmb3JtIikuaXRlbSgwKTsKLSAgICBzZXRBdXRoZW50aWNhdGlvblNlY3Rpb25EZWZhdWx0cyhwdWJsaXNoU2VydmljZUFkdmFuY2VkRm9ybSk7Ci0gICAgdmFyIHB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWROYW1lc1RhYmxlID0gZ2V0VGFibGUoInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWROYW1lcyIpOwotICAgIHZhciBwdWJsaXNoU2VydmljZUFkdmFuY2VkRGVzY3JpcHRpb25zVGFibGUgPSBnZXRUYWJsZSgicHVibGlzaFNlcnZpY2VBZHZhbmNlZERlc2NyaXB0aW9ucyIpOwotPCUKLSAgIHNlcnZpY2VCdXNpbmVzcyA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQlVTSU5FU1MpOwotICAgc2VydmljZUJ1c2luZXNzQ29weSA9IChWZWN0b3IpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQlVTSU5FU1NfQ09QWSk7Ci0gICBpZiAoc2VydmljZUJ1c2luZXNzICE9IG51bGwpCi0gICB7Ci0gICAgIGlmIChzZXJ2aWNlQnVzaW5lc3NDb3B5ID09IG51bGwpCi0gICAgICAgc2VydmljZUJ1c2luZXNzQ29weSA9IG5ldyBWZWN0b3IoKTsKLSAgICAgZWxzZQotICAgICAgIHNlcnZpY2VCdXNpbmVzc0NvcHkucmVtb3ZlQWxsRWxlbWVudHMoKTsKLSAgICAgZm9yIChpbnQgaT0wO2k8c2VydmljZUJ1c2luZXNzLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClzZXJ2aWNlQnVzaW5lc3MuZWxlbWVudEF0KGkpOwotICAgICAgIGludCB0YXJnZXROb2RlSWQgPSBsaXN0RWxlbWVudC5nZXRUYXJnZXROb2RlSWQoKTsKLSAgICAgICBpbnQgdGFyZ2V0VG9vbElkID0gbGlzdEVsZW1lbnQuZ2V0VGFyZ2V0VG9vbElkKCk7Ci0gICAgICAgaW50IHRhcmdldFZpZXdJZCA9IGxpc3RFbGVtZW50LmdldFRhcmdldFZpZXdJZCgpOwotICAgICAgIFN0cmluZyB1cmwgPSBTZWxlY3RTdWJRdWVyeUl0ZW1BY3Rpb24uZ2V0QWN0aW9uTGluayh0YXJnZXROb2RlSWQsdGFyZ2V0VG9vbElkLHRhcmdldFZpZXdJZCxzdWJRdWVyeUtleVByb3BlcnR5LmdldFN1YlF1ZXJ5S2V5KCksVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0JVU0lORVNTLGksVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVMsZmFsc2UpOwotICAgICAgIEJ1c2luZXNzRW50aXR5IGJlID0gKEJ1c2luZXNzRW50aXR5KWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgIHNlcnZpY2VCdXNpbmVzc0NvcHkuYWRkRWxlbWVudChzZXJ2aWNlQnVzaW5lc3MuZWxlbWVudEF0KGkpKTsKLSU+Ci0gICAgYWRkUmVzdWx0Um93KCJwdWJsaXNoU2VydmljZUFkdmFuY2VkQnVzaW5lc3MiLDwlPXRhcmdldE5vZGVJZCU+LCI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQodXJsKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShiZS5nZXREZWZhdWx0TmFtZVN0cmluZygpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGJlLmdldERlZmF1bHREZXNjcmlwdGlvblN0cmluZygpKSU+Iik7Ci08JQotICAgICB9Ci0gICAgIGZvcm1Ub29sUEkuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0JVU0lORVNTX0NPUFksc2VydmljZUJ1c2luZXNzQ29weSk7Ci0gICB9Ci0gICBlbHNlCi0gICB7Ci0gICAgIHNlcnZpY2VCdXNpbmVzcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgc2VydmljZUJ1c2luZXNzQ29weSA9IG5ldyBWZWN0b3IoKTsKLSAgICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQlVTSU5FU1Msc2VydmljZUJ1c2luZXNzKTsKLSAgICAgZm9ybVRvb2xQSS5zZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfQlVTSU5FU1NfQ09QWSxzZXJ2aWNlQnVzaW5lc3NDb3B5KTsKLSAgIH0KLSU+Ci0gICAgcHVibGlzaFNlcnZpY2VBZHZhbmNlZEZvcm0uPCU9QWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dTRExfVVJMJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfV1NETF9VUkwpKSU+IjsKLTwlCi0gICBWZWN0b3Igc2VydmljZU5hbWVWZWN0b3IgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX05BTUVTKTsKLSAgIGlmIChzZXJ2aWNlTmFtZVZlY3RvciAhPSBudWxsKQotICAgewotICAgICBmb3IgKGludCBpPTA7aTxzZXJ2aWNlTmFtZVZlY3Rvci5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgTmFtZSBuYW1lID0gKE5hbWUpc2VydmljZU5hbWVWZWN0b3IuZWxlbWVudEF0KGkpOwotJT4KLSAgICBhZGRMYW5ndWFnZUlucHV0Um93KCJwdWJsaXNoU2VydmljZUFkdmFuY2VkTmFtZXMiLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9OQU1FX1RFWFRfVkFMVUUiKSklPiIpOwotICAgIHNldExhbmd1YWdlSW5wdXRSb3dTZXR0aW5ncygicHVibGlzaFNlcnZpY2VBZHZhbmNlZE5hbWVzIiw8JT1pJT4sIjwlPUhUTUxVdGlscy5KU01hbmdsZShuYW1lLmdldExhbmcoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShuYW1lLmdldFRleHQoKSklPiIpOwotPCUKLSAgICAgICBpZiAoIWZvcm1Ub29sUEkuaXNSb3dJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9OQU1FUyxpKSkKLSAgICAgICB7Ci0lPgotICAgIGhpZ2hsaWdodEVycmFudFJvdyhwdWJsaXNoU2VydmljZUFkdmFuY2VkTmFtZXNUYWJsZS5yb3dzWzwlPWklPitudW1iZXJPZkhlYWRlclJvd3NdLCJlcnJhbnRyb3ciKTsKLTwlCi0gICAgICAgfQotICAgICB9Ci0gICB9Ci0KLSAgIFZlY3RvciBzZXJ2aWNlRGVzY3JpcHRpb25WZWN0b3IgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0RFU0NSSVBUSU9OUyk7Ci0gICBpZiAoc2VydmljZURlc2NyaXB0aW9uVmVjdG9yICE9IG51bGwpCi0gICB7Ci0gICAgIGZvciAoaW50IGk9MDtpPHNlcnZpY2VEZXNjcmlwdGlvblZlY3Rvci5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgRGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSAoRGVzY3JpcHRpb24pc2VydmljZURlc2NyaXB0aW9uVmVjdG9yLmVsZW1lbnRBdChpKTsKLSU+Ci0gICAgYWRkTGFuZ3VhZ2VJbnB1dFJvdygicHVibGlzaFNlcnZpY2VBZHZhbmNlZERlc2NyaXB0aW9ucyIsIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX0RFU0NSSVBUSU9OX1RFWFRfVkFMVUUiKSklPiIpOwotICAgIHNldExhbmd1YWdlSW5wdXRSb3dTZXR0aW5ncygicHVibGlzaFNlcnZpY2VBZHZhbmNlZERlc2NyaXB0aW9ucyIsPCU9aSU+LCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoZGVzY3JpcHRpb24uZ2V0TGFuZygpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGRlc2NyaXB0aW9uLmdldFRleHQoKSklPiIpOwotPCUKLSAgICAgICBpZiAoIWZvcm1Ub29sUEkuaXNSb3dJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9ERVNDUklQVElPTlMsaSkpCi0gICAgICAgewotJT4KLSAgICBoaWdobGlnaHRFcnJhbnRSb3cocHVibGlzaFNlcnZpY2VBZHZhbmNlZERlc2NyaXB0aW9uc1RhYmxlLnJvd3NbPCU9aSU+K251bWJlck9mSGVhZGVyUm93c10sImVycmFudHJvdyIpOwotPCUKLSAgICAgICB9Ci0gICAgIH0KLSAgIH0KLQotICAgQ2F0ZWdvcnlCYWcgc2VydmljZUNhdEJhZyA9IChDYXRlZ29yeUJhZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9DQVRFR09SSUVTKTsKLSAgIGlmIChzZXJ2aWNlQ2F0QmFnICE9IG51bGwpCi0gICB7Ci0gICAgIFZlY3RvciBrZXllZFJlZmVyZW5jZVZlY3RvciA9IHNlcnZpY2VDYXRCYWcuZ2V0S2V5ZWRSZWZlcmVuY2VWZWN0b3IoKTsKLSAgICAgZm9yIChpbnQgaT0wO2k8a2V5ZWRSZWZlcmVuY2VWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gKEtleWVkUmVmZXJlbmNlKWtleWVkUmVmZXJlbmNlVmVjdG9yLmVsZW1lbnRBdChpKTsKLSU+Ci0gICAgYWRkQ2F0ZWdvcnlSb3coInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRDYXRlZ29yaWVzIik7Ci0gICAgc2V0Q2F0ZWdvcnlSb3dTZXR0aW5ncygicHVibGlzaFNlcnZpY2VBZHZhbmNlZENhdGVnb3JpZXMiLDwlPWklPiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldFRNb2RlbEtleSgpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldEtleU5hbWUoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRLZXlWYWx1ZSgpKSU+Iik7Ci08JQotICAgICB9Ci0gICB9Ci0lPgotICAgIHNob3dQdWJsaXNoRm9ybSg8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVMlPiw8JT1wdWJsaXNoU2VydmljZVN0eWxlSW5kZXglPik7Ci0gIH0KLQotICBmdW5jdGlvbiBzZXREZWZhdWx0c0ZvclB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlRm9ybXMoKQotICB7Ci08JQotICAgU3RyaW5nIHB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU3R5bGVJbmRleCA9IChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VfSU5URVJGQUNFUyk7Ci0lPgotICAgIGRvY3VtZW50LmZvcm1zW3N0eWxlRm9ybXNbPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUyU+XV0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFX0lOVEVSRkFDRVMlPls8JT1wdWJsaXNoU2VydmljZUludGVyZmFjZVN0eWxlSW5kZXglPl0uY2hlY2tlZCA9IHRydWU7Ci0gICAgdmFyIHB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2ltcGxlU2VjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2VjdGlvbklkc1s8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NJTVBMRSU+XSk7Ci0gICAgdmFyIHB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2ltcGxlRm9ybSA9IHB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2ltcGxlU2VjdGlvbi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZm9ybSIpLml0ZW0oMCk7Ci0gICAgc2V0QXV0aGVudGljYXRpb25TZWN0aW9uRGVmYXVsdHMocHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTaW1wbGVGb3JtKTsKLSAgICBwdWJsaXNoU2VydmljZUludGVyZmFjZVNpbXBsZUZvcm0uPCU9QWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dTRExfVVJMJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9XU0RMX1VSTCkpJT4iOwotICAgIHB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2ltcGxlRm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FKSklPiI7Ci0gICAgcHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTaW1wbGVGb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfSU5URVJGQUNFX0RFU0NSSVBUSU9OJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0lOVEVSRkFDRV9ERVNDUklQVElPTikpJT4iOwotCi0gICAgLy8gQWR2YW5jZWQgZm9ybSBkZXRhaWxzLgotICAgIHZhciBwdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkU2VjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2VjdGlvbklkc1s8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX0FEVkFOQ0VEJT5dKTsKLSAgICB2YXIgcHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZEZvcm0gPSBwdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkU2VjdGlvbi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZm9ybSIpLml0ZW0oMCk7Ci0gICAgc2V0QXV0aGVudGljYXRpb25TZWN0aW9uRGVmYXVsdHMocHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZEZvcm0pOwotICAgIHB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWRGb3JtLjwlPUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XU0RMX1VSTCU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSgoU3RyaW5nKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9XU0RMX1VSTCkpJT4iOwotICAgIHB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWRGb3JtLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSgoU3RyaW5nKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FKSklPiI7Ci0gICAgdmFyIHB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWREZXNjcmlwdGlvbnNUYWJsZSA9IGdldFRhYmxlKCJwdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkRGVzY3JpcHRpb25zIik7Ci08JQotICAgVmVjdG9yIHNpRGVzY3JpcHRpb25WZWN0b3IgPSAoVmVjdG9yKWZvcm1Ub29sUEkuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9ERVNDUklQVElPTlMpOwotICAgaWYgKHNpRGVzY3JpcHRpb25WZWN0b3IgIT0gbnVsbCkKLSAgIHsKLSAgICAgZm9yIChpbnQgaT0wO2k8c2lEZXNjcmlwdGlvblZlY3Rvci5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgRGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSAoRGVzY3JpcHRpb24pc2lEZXNjcmlwdGlvblZlY3Rvci5lbGVtZW50QXQoaSk7Ci0lPgotICAgIGFkZExhbmd1YWdlSW5wdXRSb3coInB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWREZXNjcmlwdGlvbnMiLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9ERVNDUklQVElPTl9URVhUX1ZBTFVFIikpJT4iKTsKLSAgICBzZXRMYW5ndWFnZUlucHV0Um93U2V0dGluZ3MoInB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWREZXNjcmlwdGlvbnMiLDwlPWklPiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGRlc2NyaXB0aW9uLmdldExhbmcoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShkZXNjcmlwdGlvbi5nZXRUZXh0KCkpJT4iKTsKLTwlCi0gICAgICAgaWYgKCFmb3JtVG9vbFBJLmlzUm93SW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0RFU0NSSVBUSU9OUyxpKSkKLSAgICAgICB7Ci0lPgotICAgIGhpZ2hsaWdodEVycmFudFJvdyhwdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkRGVzY3JpcHRpb25zVGFibGUucm93c1s8JT1pJT4rbnVtYmVyT2ZIZWFkZXJSb3dzXSwiZXJyYW50cm93Iik7Ci08JQotICAgICAgIH0KLSAgICAgfQotICAgfQotCi0gICBJZGVudGlmaWVyQmFnIHNpSWRCYWcgPSAoSWRlbnRpZmllckJhZylmb3JtVG9vbFBJLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfSURFTlRJRklFUlMpOwotICAgaWYgKHNpSWRCYWcgIT0gbnVsbCkKLSAgIHsKLSAgICAgVmVjdG9yIGtleWVkUmVmZXJlbmNlVmVjdG9yID0gc2lJZEJhZy5nZXRLZXllZFJlZmVyZW5jZVZlY3RvcigpOwotICAgICBmb3IgKGludCBpPTA7aTxrZXllZFJlZmVyZW5jZVZlY3Rvci5zaXplKCk7aSsrKQotICAgICB7Ci0gICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSAoS2V5ZWRSZWZlcmVuY2Upa2V5ZWRSZWZlcmVuY2VWZWN0b3IuZWxlbWVudEF0KGkpOwotJT4KLSAgICBhZGRJZGVudGlmaWVyUm93KCJwdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkSWRlbnRpZmllcnMiKTsKLSAgICBzZXRJZGVudGlmaWVyUm93U2V0dGluZ3MoInB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWRJZGVudGlmaWVycyIsPCU9aSU+LCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0VE1vZGVsS2V5KCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0S2V5TmFtZSgpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldEtleVZhbHVlKCkpJT4iKTsKLTwlCi0gICAgIH0KLSAgIH0KLQotICAgQ2F0ZWdvcnlCYWcgc2lDYXRCYWcgPSAoQ2F0ZWdvcnlCYWcpZm9ybVRvb2xQSS5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX0NBVEVHT1JJRVMpOwotICAgaWYgKHNpQ2F0QmFnICE9IG51bGwpCi0gICB7Ci0gICAgIFZlY3RvciBrZXllZFJlZmVyZW5jZVZlY3RvciA9IHNpQ2F0QmFnLmdldEtleWVkUmVmZXJlbmNlVmVjdG9yKCk7Ci0gICAgIGZvciAoaW50IGk9MDtpPGtleWVkUmVmZXJlbmNlVmVjdG9yLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBLZXllZFJlZmVyZW5jZSBrciA9IChLZXllZFJlZmVyZW5jZSlrZXllZFJlZmVyZW5jZVZlY3Rvci5lbGVtZW50QXQoaSk7Ci0lPgotICAgIGFkZENhdGVnb3J5Um93KCJwdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkQ2F0ZWdvcmllcyIpOwotICAgIHNldENhdGVnb3J5Um93U2V0dGluZ3MoInB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWRDYXRlZ29yaWVzIiw8JT1pJT4sIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRUTW9kZWxLZXkoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRLZXlOYW1lKCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0S2V5VmFsdWUoKSklPiIpOwotPCUKLSAgICAgfQotICAgfQotJT4KLSAgICBzaG93UHVibGlzaEZvcm0oPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUyU+LDwlPXB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU3R5bGVJbmRleCU+KTsKLSAgfQotCi0gIGZ1bmN0aW9uIHNob3dNYWluRm9ybShwdWJsaXNoVmFsdWUpCi0gIHsKLSAgICBjbG9zZUFsbFVkZGlDaGlsZFdpbmRvd3MoKTsKLSAgICB2YXIgcHVibGlzaCA9IHBhcnNlSW50KHB1Ymxpc2hWYWx1ZSk7Ci0gICAgZm9yICh2YXIgaT0wO2k8c2VjdGlvbklkcy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIGlmIChpID09IHB1Ymxpc2gpCi0gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNlY3Rpb25JZHNbaV0pLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICAgIGVsc2UKLSAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc2VjdGlvbklkc1tpXSkuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKLSAgICB9Ci0gICAgdmFyIGxvYWRTY3JlZW5UYWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2FkU2NyZWVuIik7Ci0gICAgaWYgKGxvYWRTY3JlZW5UYWJsZS5yb3dzLmxlbmd0aCA+IDApCi0gICAgICBsb2FkU2NyZWVuVGFibGUuZGVsZXRlUm93KDApOwotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluU2NyZWVuIikuc3R5bGUuZGlzcGxheSA9ICIiOwotICB9Ci0KLSAgZnVuY3Rpb24gc2hvd1B1Ymxpc2hGb3JtKHF1ZXJ5SXRlbUluZGV4LHN0eWxlKQotICB7Ci0gICAgY2xvc2VBbGxVZGRpQ2hpbGRXaW5kb3dzKCk7Ci0gICAgdmFyIHB1Ymxpc2hTZWN0aW9uSWRzOwotICAgIHN3aXRjaCAocXVlcnlJdGVtSW5kZXgpCi0gICAgewotICAgICAgY2FzZSA8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUyU+OgotICAgICAgICBwdWJsaXNoU2VjdGlvbklkcyA9IHB1Ymxpc2hCdXNpbmVzc1NlY3Rpb25JZHM7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSA8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVMlPjoKLSAgICAgICAgcHVibGlzaFNlY3Rpb25JZHMgPSBwdWJsaXNoU2VydmljZVNlY3Rpb25JZHM7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSA8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTJT46Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBwdWJsaXNoU2VjdGlvbklkcyA9IHB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2VjdGlvbklkczsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGZvciAodmFyIGk9MDtpPHB1Ymxpc2hTZWN0aW9uSWRzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgaWYgKGkgPT0gc3R5bGUpCi0gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHB1Ymxpc2hTZWN0aW9uSWRzW2ldKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gICAgICBlbHNlCi0gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHB1Ymxpc2hTZWN0aW9uSWRzW2ldKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotICAgIH0KLSAgfQotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiIgb25VbmxvYWQ9ImNsb3NlQWxsVWRkaUNoaWxkV2luZG93cygpIj4KLSAgPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gICAgPHRhYmxlIGlkPSJsb2FkU2NyZWVuIj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgIDwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiTVNHX0xPQURfSU5fUFJPR1JFU1MiKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gICAgPGRpdiBpZD0ibWFpblNjcmVlbiIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotPCUKLSAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJ1ZGRpL2ltYWdlcy9wdWJsaXNoX2hpZ2hsaWdodGVkLmdpZiI7Ci0gICBTdHJpbmcgdGl0bGUgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1BVQkxJU0giKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgICA8dHI+Ci0gICAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIHZhbGlnbj0ibWlkZGxlIiBub3dyYXA+Ci0gICAgICAgICAgICA8bGFiZWwgZm9yPSJwdWJsaXNoIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9QVUJMSVNIIiklPjwvbGFiZWw+Ci0gICAgICAgICAgPC90ZD4KLSAgICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIG5vd3JhcD4KLSAgICAgICAgICAgIDxzZWxlY3QgaWQ9InB1Ymxpc2giIG9uQ2hhbmdlPSJzaG93TWFpbkZvcm0odGhpcy52YWx1ZSkiIGNsYXNzPSJzZWxlY3RsaXN0Ij4KLSAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVMlPiI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0JVU0lORVNTIiklPgotICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVMlPiI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX1NFUlZJQ0UiKSU+Ci0gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVMlPiI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX1NFUlZJQ0VfSU5URVJGQUNFIiklPgotICAgICAgICAgICAgPC9zZWxlY3Q+Ci0gICAgICAgICAgPC90ZD4KLSAgICAgICAgICA8dGQgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgICAgICAgPC90cj4KLSAgICAgIDwvdGFibGU+Ci0gICAgPC9kaXY+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvUmVnUHVibGlzaEJ1c2luZXNzRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvUmVnUHVibGlzaFNlcnZpY2VGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9SZWdQdWJsaXNoU2VydmljZUludGVyZmFjZUZvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgotICA8L2Rpdj4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBzZXREZWZhdWx0cygpOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnUHVibGlzaFNlcnZpY2VBZHZhbmNlZEZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmVmNmMwYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnUHVibGlzaFNlcnZpY2VBZHZhbmNlZEZvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTA3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InN1YlF1ZXJ5S2V5UHJvcGVydHkiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5TdWJRdWVyeUtleVByb3BlcnR5IiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgRm9ybVRvb2wgZm9ybVRvb2wgPSAoRm9ybVRvb2wpKHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKSk7Ci0gICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSA9ICgoTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UpZm9ybVRvb2wpLmdldEZvcm1Ub29sUHJvcGVydGllcyhzdWJRdWVyeUtleVByb3BlcnR5LmdldFN1YlF1ZXJ5S2V5KCkpOwotJT4KLTxkaXYgaWQ9InB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWQiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvYWN0aW9ucy9SZWdQdWJsaXNoU2VydmljZUFkdmFuY2VkQWN0aW9uSlNQLmpzcCIpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBvblN1Ym1pdD0icmV0dXJuIHByb2Nlc3NQdWJsaXNoU2VydmljZUFkdmFuY2VkRm9ybSh0aGlzKSI+Ci0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9HRVQlPiI+ICAKLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLk5FV19TVUJRVUVSWV9JTklUSUFURUQlPiI+ICAgIAotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuTkVXX1NVQlFVRVJZX1FVRVJZX0lURU0lPiI+Ci0gICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0xMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUFVCTElTSF9TRVJWSUNFX0FEVkFOQ0VEX0RFU0MiKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJwdWJsaXNoU2VydmljZUFkdmFuY2VkQXV0aGVudGljYXRpb24iKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvYXV0aGVudGljYXRpb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIGJvb2xlYW4gdGFibGVIYXNFcnJvcnMgPSAhZm9ybVRvb2xQSS5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0JVU0lORVNTKTsKLSAgIFN0cmluZ1tdIGJ1c1NwZWNpZmljSW5mbyA9IHsiRk9STV9MQUJFTF9CVVNJTkVTUyIsKG5ldyBCb29sZWFuKHRhYmxlSGFzRXJyb3JzKSkudG9TdHJpbmcoKSxTdHJpbmcudmFsdWVPZihVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUyksInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWQiLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9CVVNJTkVTU307Ci0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRCdXNpbmVzcyIpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKGJ1c1NwZWNpZmljSW5mbyk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL3VkZGlPYmplY3RzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgbm93cmFwIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0zMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgPGxhYmVsIGZvcj0iaW5wdXRfcHVibGlzaF9zZXJ2aWNlX2FkdmFuY2Vfd3NkbF91cmwiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9XU0RMX1VSTCIpJT48L2xhYmVsPgotPCUKLSAgIGlmICghZm9ybVRvb2xQSS5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1dTRExfVVJMKSkKLSAgIHsKLSU+Ci0gICAgICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotPCUKLSAgIH0KLSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICAgIDx0ZCBub3dyYXAgaGVpZ2h0PTMwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5XU0RMQnJvd3NlcigncHVibGlzaFNlcnZpY2VBZHZhbmNlZCcsPCU9QWN0aW9uSW5wdXRzLldTRExfVFlQRV9TRVJWSUNFJT4pIj48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTElOS19CUk9XU0UiKSU+PC9hPgotICAgICAgICA8L3RkPgotICAgICAgICA8dGQgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjb2xzcGFuPTM+Ci0gICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJpbnB1dF9wdWJsaXNoX3NlcnZpY2VfYWR2YW5jZV93c2RsX3VybCIgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dTRExfVVJMJT4iIGNsYXNzPSJ0ZXh0ZW50ZXIiPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotPCUKLSAgIHRhYmxlSGFzRXJyb3JzID0gIWZvcm1Ub29sUEkuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX0lOVEVSRkFDRVMpOwotICAgU3RyaW5nW10gc2VydmljZUludGVyZmFjZVNwZWNpZmljSW5mbyA9IHsiRk9STV9MQUJFTF9TRVJWSUNFX0lOVEVSRkFDRVMiLChuZXcgQm9vbGVhbih0YWJsZUhhc0Vycm9ycykpLnRvU3RyaW5nKCksU3RyaW5nLnZhbHVlT2YoVURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUyksInB1Ymxpc2hTZXJ2aWNlQWR2YW5jZWQiLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9TRVJWSUNFX0lOVEVSRkFDRVN9OwotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJwdWJsaXNoU2VydmljZUFkdmFuY2VkU2VydmljZUludGVyZmFjZSIpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKHNlcnZpY2VJbnRlcmZhY2VTcGVjaWZpY0luZm8pOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy91ZGRpT2JqZWN0c190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJwdWJsaXNoU2VydmljZUFkdmFuY2VkTmFtZXMiKTsKLSAgIFN0cmluZ1tdIG5hbWVTcGVjaWZpY0luZm8gPSB7IkZPUk1fTEFCRUxfTkFNRVMiLCJGT1JNX0xBQkVMX05BTUUiLFN0cmluZy52YWx1ZU9mKCFmb3JtVG9vbFBJLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfTkFNRVMpKX07Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMobmFtZVNwZWNpZmljSW5mbyk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2xhbmd1YWdlSW5wdXRfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgicHVibGlzaFNlcnZpY2VBZHZhbmNlZERlc2NyaXB0aW9ucyIpOwotICAgU3RyaW5nW10gZGVzY1NwZWNpZmljSW5mbyA9IHsiRk9STV9MQUJFTF9ERVNDUklQVElPTlMiLCJGT1JNX0xBQkVMX0RFU0NSSVBUSU9OIixTdHJpbmcudmFsdWVPZighZm9ybVRvb2xQSS5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0RFU0NSSVBUSU9OUykpfTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhkZXNjU3BlY2lmaWNJbmZvKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvbGFuZ3VhZ2VJbnB1dF90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJwdWJsaXNoU2VydmljZUFkdmFuY2VkQ2F0ZWdvcmllcyIpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9jYXRlZ29yaWVzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvc2ltcGxlQ29tbW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgPC9mb3JtPgotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnUHVibGlzaFNlcnZpY2VGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdQdWJsaXNoU2VydmljZUZvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmEzZmY1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdQdWJsaXNoU2VydmljZUZvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4KLTxkaXYgaWQ9InB1Ymxpc2hTZXJ2aWNlIiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gIDxmb3JtIG5hbWU9InB1Ymxpc2hTZXJ2aWNlU3R5bGUiPgotICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9QVUJMSVNIX0ZPUk0iKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQ+Ci0gICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBpZD0icmFkaW9fcHVibGlzaF9zZXJ2aWNlX3NpbXBsZSIgY2xhc3M9InJhZGlvIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VTJT4iIG9uQ2xpY2s9InNob3dQdWJsaXNoRm9ybSg8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVMlPiw8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NJTVBMRSU+KSI+PGxhYmVsIGZvcj0icmFkaW9fcHVibGlzaF9zZXJ2aWNlX3NpbXBsZSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fUkFESU9fU0lNUExFIiklPjwvbGFiZWw+Ci0gICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBpZD0icmFkaW9fcHVibGlzaF9zZXJ2aWNlX2FkdmFuY2UiIGNsYXNzPSJyYWRpbyIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9TRVJWSUNFUyU+IiBvbkNsaWNrPSJzaG93UHVibGlzaEZvcm0oPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VTJT4sPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9BRFZBTkNFRCU+KSI+PGxhYmVsIGZvcj0icmFkaW9fcHVibGlzaF9zZXJ2aWNlX2FkdmFuY2UiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1JBRElPX0FEVkFOQ0VEIiklPjwvbGFiZWw+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gIDwvZm9ybT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9SZWdQdWJsaXNoU2VydmljZVNpbXBsZUZvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvZGl2PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWRGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdQdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0ZWNhNzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWRGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzdWJRdWVyeUtleVByb3BlcnR5IiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuU3ViUXVlcnlLZXlQcm9wZXJ0eSIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgIEZvcm1Ub29sIGZvcm1Ub29sID0gKEZvcm1Ub29sKShzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkgPSAoKE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlKWZvcm1Ub29sKS5nZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXlQcm9wZXJ0eS5nZXRTdWJRdWVyeUtleSgpKTsKLSU+Ci08ZGl2IGlkPSJwdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkIiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnMvUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZEFjdGlvbkpTUC5qc3AiKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgb25TdWJtaXQ9InJldHVybiBwcm9jZXNzUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZEZvcm0odGhpcykiPgotICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MTAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgIDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1BVQkxJU0hfU0VSVklDRV9JTlRFUkZBQ0VfQURWQU5DRURfREVTQyIpJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoInB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWRBdXRoZW50aWNhdGlvbiIpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9hdXRoZW50aWNhdGlvbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIG5vd3JhcCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MzAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgIDxsYWJlbCBmb3I9ImlucHV0X3B1Ymxpc2hfc2VydmljZV9pbnRlcmZhY2VfYWR2YW5jZV93c2RsX3VybCI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1dTRExfVVJMIiklPjwvbGFiZWw+Ci08JQotICAgaWYgKCFmb3JtVG9vbFBJLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX1dTRExfVVJMKSkKLSAgIHsKLSU+Ci0gICAgICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotPCUKLSAgIH0KLSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICAgIDx0ZCBub3dyYXAgaGVpZ2h0PTMwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5XU0RMQnJvd3NlcigncHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZCcsPCU9QWN0aW9uSW5wdXRzLldTRExfVFlQRV9TRVJWSUNFX0lOVEVSRkFDRSU+KSI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xJTktfQlJPV1NFIiklPjwvYT4KLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY29sc3Bhbj0zPgotICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iaW5wdXRfcHVibGlzaF9zZXJ2aWNlX2ludGVyZmFjZV9hZHZhbmNlX3dzZGxfdXJsIiBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV1NETF9VUkwlPiIgY2xhc3M9InRleHRlbnRlciI+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY29sc3Bhbj0zIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgIDxsYWJlbCBmb3I9ImlucHV0X3B1Ymxpc2hfc2VydmljZV9pbnRlcmZhY2VfYWR2YW5jZV9uYW1lIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9OQU1FIiklPjwvbGFiZWw+Ci08JQotICAgaWYgKCFmb3JtVG9vbFBJLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUpKQotICAgewotJT4KLSAgICAgICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci08JQotICAgfQotJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNvbHNwYW49Mz4gPGlucHV0IHR5cGU9InRleHQiIGlkPSJpbnB1dF9wdWJsaXNoX3NlcnZpY2VfaW50ZXJmYWNlX2FkdmFuY2VfbmFtZSIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9OQU1FJT4iIGNsYXNzPSJ0ZXh0ZW50ZXIiPiA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgicHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZERlc2NyaXB0aW9ucyIpOwotICAgU3RyaW5nW10gZGVzY1NwZWNpZmljSW5mbyA9IHsiRk9STV9MQUJFTF9ERVNDUklQVElPTlMiLCJGT1JNX0xBQkVMX0RFU0NSSVBUSU9OIixTdHJpbmcudmFsdWVPZighZm9ybVRvb2xQSS5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9ERVNDUklQVElPTlMpKX07Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMoZGVzY1NwZWNpZmljSW5mbyk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2xhbmd1YWdlSW5wdXRfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgicHVibGlzaFNlcnZpY2VJbnRlcmZhY2VBZHZhbmNlZElkZW50aWZpZXJzIik7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2lkZW50aWZpZXJzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoInB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlQWR2YW5jZWRDYXRlZ29yaWVzIik7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2NhdGVnb3JpZXNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9zaW1wbGVDb21tb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICA8L2Zvcm0+Ci08L2Rpdj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdQdWJsaXNoU2VydmljZUludGVyZmFjZUZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmYTgyY2QuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0lPgotPGRpdiBpZD0icHVibGlzaFNlcnZpY2VJbnRlcmZhY2UiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgPGZvcm0gbmFtZT0icHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTdHlsZSI+Ci0gICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgIDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1BVQkxJU0hfRk9STSIpJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZD4KLSAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIGlkPSJyYWRpb19wdWJsaXNoX3NlcnZpY2VfaW50ZXJmYWNlX3NpbXBsZSIgY2xhc3M9InJhZGlvIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX1NUWUxFX1NFUlZJQ0VfSU5URVJGQUNFUyU+IiBvbkNsaWNrPSJzaG93UHVibGlzaEZvcm0oPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX1NFUlZJQ0VfSU5URVJGQUNFUyU+LDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0lNUExFJT4pIj48bGFiZWwgZm9yPSJyYWRpb19wdWJsaXNoX3NlcnZpY2VfaW50ZXJmYWNlX3NpbXBsZSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fUkFESU9fU0lNUExFIiklPjwvbGFiZWw+Ci0gICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBpZD0icmFkaW9fcHVibGlzaF9zZXJ2aWNlX2ludGVyZmFjZV9hZHZhbmNlIiBjbGFzcz0icmFkaW8iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfU1RZTEVfU0VSVklDRV9JTlRFUkZBQ0VTJT4iIG9uQ2xpY2s9InNob3dQdWJsaXNoRm9ybSg8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTJT4sPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9TVFlMRV9BRFZBTkNFRCU+KSI+PGxhYmVsIGZvcj0icmFkaW9fcHVibGlzaF9zZXJ2aWNlX2ludGVyZmFjZV9hZHZhbmNlIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9SQURJT19BRFZBTkNFRCIpJT48L2xhYmVsPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICA8L2Zvcm0+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvUmVnUHVibGlzaFNlcnZpY2VJbnRlcmZhY2VTaW1wbGVGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9SZWdQdWJsaXNoU2VydmljZUludGVyZmFjZUFkdmFuY2VkRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2Rpdj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdQdWJsaXNoU2VydmljZUludGVyZmFjZVNpbXBsZUZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2ltcGxlRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1YjA2ZWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1JlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2ltcGxlRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzdWJRdWVyeUtleVByb3BlcnR5IiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuU3ViUXVlcnlLZXlQcm9wZXJ0eSIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgIEZvcm1Ub29sIGZvcm1Ub29sID0gKEZvcm1Ub29sKShzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkgPSAoKE11bHRpcGxlRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlKWZvcm1Ub29sKS5nZXRGb3JtVG9vbFByb3BlcnRpZXMoc3ViUXVlcnlLZXlQcm9wZXJ0eS5nZXRTdWJRdWVyeUtleSgpKTsKLSU+Ci08ZGl2IGlkPSJwdWJsaXNoU2VydmljZUludGVyZmFjZVNpbXBsZSIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL1JlZ1B1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2ltcGxlQWN0aW9uSlNQLmpzcCIpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBvblN1Ym1pdD0icmV0dXJuIGhhbmRsZVN1Ym1pdCh0aGlzKSI+Ci0gICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0xMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUFVCTElTSF9TRVJWSUNFX0lOVEVSRkFDRV9TSU1QTEVfREVTQyIpJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoInB1Ymxpc2hTZXJ2aWNlSW50ZXJmYWNlU2ltcGxlQXV0aGVudGljYXRpb24iKTsKLSU+ICAgICAgCi08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvYXV0aGVudGljYXRpb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPiAgCi0gICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIG5vd3JhcCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MzAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgIDxsYWJlbCBmb3I9ImlucHV0X3B1Ymxpc2hfc2VydmljZV9pbnRlcmZhY2Vfc2ltcGxlX3dzZGxfdXJsIj48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfV1NETF9VUkwiKSU+PC9sYWJlbD4KLTwlCi0gICBpZiAoIWZvcm1Ub29sUEkuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfSU5URVJGQUNFX1dTRExfVVJMKSkKLSAgIHsKLSU+Ci0gICAgICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotPCUKLSAgIH0KLSU+ICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkIG5vd3JhcCBoZWlnaHQ9MzAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6b3BlbldTRExCcm93c2VyKCdwdWJsaXNoU2VydmljZUludGVyZmFjZVNpbXBsZScsPCU9QWN0aW9uSW5wdXRzLldTRExfVFlQRV9TRVJWSUNFX0lOVEVSRkFDRSU+KSI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xJTktfQlJPV1NFIiklPjwvYT4KLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY29sc3Bhbj0zPgotICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iaW5wdXRfcHVibGlzaF9zZXJ2aWNlX2ludGVyZmFjZV9zaW1wbGVfd3NkbF91cmwiIG5hbWU9IjwlPUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XU0RMX1VSTCU+IiBjbGFzcz0idGV4dGVudGVyIj4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjb2xzcGFuPTMgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgPGxhYmVsIGZvcj0iaW5wdXRfcHVibGlzaF9zZXJ2aWNlX2ludGVyZmFjZV9zaW1wbGVfbmFtZSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTkFNRSIpJT48L2xhYmVsPgotPCUKLSAgIGlmICghZm9ybVRvb2xQSS5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSkpCi0gICB7Ci0lPgotICAgICAgICAgIDwlPUhUTUxVdGlscy5yZWRBc3RlcmlzaygpJT4KLTwlCi0gICB9Ci0lPgotICAgICAgICA8L3RkPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY29sc3Bhbj0zPiA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImlucHV0X3B1Ymxpc2hfc2VydmljZV9pbnRlcmZhY2Vfc2ltcGxlX25hbWUiIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUlPiIgY2xhc3M9InRleHRlbnRlciI+IDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY29sc3Bhbj0zIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgIDxsYWJlbCBmb3I9ImlucHV0X3B1Ymxpc2hfc2VydmljZV9pbnRlcmZhY2Vfc2ltcGxlX2Rlc2MiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0RFU0NSSVBUSU9OIiklPjwvbGFiZWw+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY29sc3Bhbj0zPiA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImlucHV0X3B1Ymxpc2hfc2VydmljZV9pbnRlcmZhY2Vfc2ltcGxlX2Rlc2MiIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfSU5URVJGQUNFX0RFU0NSSVBUSU9OJT4iIGNsYXNzPSJ0ZXh0ZW50ZXIiPiA8L3RkPgotICAgICAgPC90cj4gICAgICAgICAgCi0gICAgPC90YWJsZT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvc2ltcGxlQ29tbW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgPC9mb3JtPgotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVnUHVibGlzaFNlcnZpY2VTaW1wbGVGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdQdWJsaXNoU2VydmljZVNpbXBsZUZvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYWNhZjFlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZWdQdWJsaXNoU2VydmljZVNpbXBsZUZvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InN1YlF1ZXJ5S2V5UHJvcGVydHkiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS5TdWJRdWVyeUtleVByb3BlcnR5IiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgRm9ybVRvb2wgZm9ybVRvb2wgPSAoRm9ybVRvb2wpKHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2woKSk7Ci0gICBGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UgZm9ybVRvb2xQSSA9ICgoTXVsdGlwbGVGb3JtVG9vbFByb3BlcnRpZXNJbnRlcmZhY2UpZm9ybVRvb2wpLmdldEZvcm1Ub29sUHJvcGVydGllcyhzdWJRdWVyeUtleVByb3BlcnR5LmdldFN1YlF1ZXJ5S2V5KCkpOwotJT4KLTxkaXYgaWQ9InB1Ymxpc2hTZXJ2aWNlU2ltcGxlIiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnMvUmVnUHVibGlzaFNlcnZpY2VTaW1wbGVBY3Rpb25KU1AuanNwIikpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG9uU3VibWl0PSJyZXR1cm4gcHJvY2Vzc1B1Ymxpc2hTZXJ2aWNlU2ltcGxlRm9ybSh0aGlzKSI+Ci0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5TVUJRVUVSWV9HRVQlPiI+ICAKLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLk5FV19TVUJRVUVSWV9JTklUSUFURUQlPiI+Ci0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5ORVdfU1VCUVVFUllfUVVFUllfSVRFTSU+Ij4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTEwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9QVUJMSVNIX1NFUlZJQ0VfU0lNUExFX0RFU0MiKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJwdWJsaXNoU2VydmljZVNpbXBsZUF1dGhlbnRpY2F0aW9uIik7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2F1dGhlbnRpY2F0aW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBib29sZWFuIHRhYmxlSGFzRXJyb3JzID0gIWZvcm1Ub29sUEkuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfQlVTSU5FU1MpOwotICAgU3RyaW5nW10gYnVzU3BlY2lmaWNJbmZvID0geyJGT1JNX0xBQkVMX0JVU0lORVNTIiwobmV3IEJvb2xlYW4odGFibGVIYXNFcnJvcnMpKS50b1N0cmluZygpLFN0cmluZy52YWx1ZU9mKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9CVVNJTkVTU0VTKSwicHVibGlzaFNlcnZpY2VTaW1wbGUiLFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfQlVTSU5FU1N9OwotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJwdWJsaXNoU2VydmljZVNpbXBsZUJ1c2luZXNzIik7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMoYnVzU3BlY2lmaWNJbmZvKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvdWRkaU9iamVjdHNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBub3dyYXAgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTMwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICA8bGFiZWwgZm9yPSJpbnB1dF9wdWJsaXNoX3NlcnZpY2Vfc2ltcGxlX3dzZGxfdXJsIj48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfV1NETF9VUkwiKSU+PC9sYWJlbD4KLTwlCi0gICBpZiAoIWZvcm1Ub29sUEkuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfU0lNUExFX1NFUlZJQ0VfV1NETF9VUkwpKQotICAgewotJT4KLSAgICAgICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci08JQotICAgfQotJT4KLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkIG5vd3JhcCBoZWlnaHQ9MzAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6b3BlbldTRExCcm93c2VyKCdwdWJsaXNoU2VydmljZVNpbXBsZScsPCU9QWN0aW9uSW5wdXRzLldTRExfVFlQRV9TRVJWSUNFJT4pIj48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTElOS19CUk9XU0UiKSU+PC9hPgotICAgICAgICA8L3RkPgotICAgICAgICA8dGQgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjb2xzcGFuPTM+Ci0gICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJpbnB1dF9wdWJsaXNoX3NlcnZpY2Vfc2ltcGxlX3dzZGxfdXJsIiBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV1NETF9VUkwlPiIgY2xhc3M9InRleHRlbnRlciI+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY29sc3Bhbj0zIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgIDxsYWJlbCBmb3I9ImlucHV0X3B1Ymxpc2hfc2VydmljZV9zaW1wbGVfbmFtZSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTkFNRSIpJT48L2xhYmVsPgotPCUKLSAgIGlmICghZm9ybVRvb2xQSS5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9OQU1FKSkKLSAgIHsKLSU+Ci0gICAgICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotPCUKLSAgIH0KLSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjb2xzcGFuPTM+IDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iaW5wdXRfcHVibGlzaF9zZXJ2aWNlX3NpbXBsZV9uYW1lIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX05BTUUlPiIgY2xhc3M9InRleHRlbnRlciI+IDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY29sc3Bhbj0zIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgIDxsYWJlbCBmb3I9ImlucHV0X3B1Ymxpc2hfc2VydmljZV9zaW1wbGVfZGVzYyI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfREVTQ1JJUFRJT04iKSU+PC9sYWJlbD4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjb2xzcGFuPTM+IDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iaW5wdXRfcHVibGlzaF9zZXJ2aWNlX3NpbXBsZV9kZXNjIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1NJTVBMRV9TRVJWSUNFX0RFU0NSSVBUSU9OJT4iIGNsYXNzPSJ0ZXh0ZW50ZXIiPiA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9zaW1wbGVDb21tb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICA8L2Zvcm0+Ci08L2Rpdj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZXN1bHRzRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvUmVzdWx0c0Zvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZGYwMjE3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9SZXN1bHRzRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNzYgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGouZGF0YXR5cGUuYnVzaW5lc3MuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai5kYXRhdHlwZS5zZXJ2aWNlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9InN1YlF1ZXJ5VHJhbnNmZXJUYXJnZXRIb2xkZXIiIGNsYXNzPSJqYXZhLnV0aWwuVmVjdG9yIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICAgc3ViUXVlcnlUcmFuc2ZlclRhcmdldEhvbGRlci5yZW1vdmVBbGxFbGVtZW50cygpOwotJT4KLTwvanNwOnVzZUJlYW4+ICAgCi08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci0gICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgVHJlZUVsZW1lbnQgdHJlZUVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgIFN1YlF1ZXJ5VHJhbnNmZXJUYXJnZXQgc3ViUXVlcnlUcmFuc2ZlclRhcmdldCA9IG51bGw7Ci0gICBib29sZWFuIGhhc1RhcmdldCA9IGZhbHNlOwotICAgaWYgKHRyZWVFbGVtZW50IGluc3RhbmNlb2YgUXVlcnlFbGVtZW50KQotICAgewotICAgICBzdWJRdWVyeVRyYW5zZmVyVGFyZ2V0ID0gKFN1YlF1ZXJ5VHJhbnNmZXJUYXJnZXQpdHJlZUVsZW1lbnQuZ2V0UHJvcGVydHlBc09iamVjdChVRERJTW9kZWxDb25zdGFudHMuU1VCUVVFUllfVFJBTlNGRVJfVEFSR0VUKTsKLSAgICAgaWYgKHN1YlF1ZXJ5VHJhbnNmZXJUYXJnZXQgIT0gbnVsbCAmJiBzdWJRdWVyeVRyYW5zZmVyVGFyZ2V0LmdldFRhcmdldEZvcm1Ub29sKCkgIT0gbnVsbCkKLSAgICAgewotICAgICAgIHN1YlF1ZXJ5VHJhbnNmZXJUYXJnZXRIb2xkZXIucmVtb3ZlQWxsRWxlbWVudHMoKTsKLSAgICAgICBzdWJRdWVyeVRyYW5zZmVyVGFyZ2V0SG9sZGVyLmFkZEVsZW1lbnQoc3ViUXVlcnlUcmFuc2ZlclRhcmdldCk7Ci0gICAgICAgaGFzVGFyZ2V0ID0gdHJ1ZTsKLSAgICAgfQotICAgfQotJT4KLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1RJVExFX1JFU1VMVFMiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9yZXN1bWVwcm94eWxvYWRwYWdlLmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy9yZXN1bHRzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBmdW5jdGlvbiBzZXREZWZhdWx0cygpCi0gIHsKLTwlCi0gICBWZWN0b3IgY2hpbGROb2RlcyA9IHNlbGVjdGVkTm9kZS5nZXRDaGlsZE5vZGVzKCk7Ci0gICBmb3IgKGludCBpPTA7aTxjaGlsZE5vZGVzLnNpemUoKTtpKyspCi0gICB7Ci0gICAgIE5vZGUgY2hpbGROb2RlID0gKE5vZGUpY2hpbGROb2Rlcy5lbGVtZW50QXQoaSk7Ci0gICAgIFN0cmluZyB1cmwgPSBTZWxlY3ROYXZpZ2F0b3JOb2RlQWN0aW9uLmdldEFjdGlvbkxpbmsoY2hpbGROb2RlLmdldE5vZGVJZCgpLGZhbHNlKTsKLSAgICAgU3RyaW5nIG5hbWUgPSBudWxsOwotICAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSBudWxsOwotICAgICBpZiAoY2hpbGROb2RlIGluc3RhbmNlb2YgQnVzaW5lc3NOb2RlKQotICAgICB7Ci0gICAgICAgQnVzaW5lc3NFbGVtZW50IGJ1c0VsZW1lbnQgPSAoQnVzaW5lc3NFbGVtZW50KWNoaWxkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgIEJ1c2luZXNzRW50aXR5IGJlID0gYnVzRWxlbWVudC5nZXRCdXNpbmVzc0VudGl0eSgpOwotICAgICAgIG5hbWUgPSBiZS5nZXREZWZhdWx0TmFtZVN0cmluZygpOwotICAgICAgIGRlc2NyaXB0aW9uID0gYmUuZ2V0RGVmYXVsdERlc2NyaXB0aW9uU3RyaW5nKCk7Ci0gICAgIH0KLSAgICAgZWxzZSBpZiAoY2hpbGROb2RlIGluc3RhbmNlb2YgU2VydmljZU5vZGUpCi0gICAgIHsKLSAgICAgICBTZXJ2aWNlRWxlbWVudCBzZXJ2aWNlRWxlbWVudCA9IChTZXJ2aWNlRWxlbWVudCljaGlsZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgICBCdXNpbmVzc1NlcnZpY2UgYnMgPSBzZXJ2aWNlRWxlbWVudC5nZXRCdXNpbmVzc1NlcnZpY2UoKTsKLSAgICAgICBuYW1lID0gYnMuZ2V0RGVmYXVsdE5hbWVTdHJpbmcoKTsKLSAgICAgICBkZXNjcmlwdGlvbiA9IGJzLmdldERlZmF1bHREZXNjcmlwdGlvblN0cmluZygpOwotICAgICB9Ci0gICAgIGVsc2UgaWYgKGNoaWxkTm9kZSBpbnN0YW5jZW9mIFNlcnZpY2VJbnRlcmZhY2VOb2RlKQotICAgICB7Ci0gICAgICAgU2VydmljZUludGVyZmFjZUVsZW1lbnQgc2lFbGVtZW50ID0gKFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50KWNoaWxkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgICAgIFRNb2RlbCB0TW9kZWwgPSBzaUVsZW1lbnQuZ2V0VE1vZGVsKCk7Ci0gICAgICAgbmFtZSA9IHRNb2RlbC5nZXROYW1lU3RyaW5nKCk7Ci0gICAgICAgZGVzY3JpcHRpb24gPSB0TW9kZWwuZ2V0RGVmYXVsdERlc2NyaXB0aW9uU3RyaW5nKCk7Ci0gICAgIH0KLSU+Ci0gICAgYWRkUmVzdWx0Um93KCJSZXN1bHRzIiw8JT1jaGlsZE5vZGUuZ2V0Tm9kZUlkKCklPiwiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KHVybCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUobmFtZSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShkZXNjcmlwdGlvbiklPiIpOwotPCUKLSAgIH0KLSU+Ci0gICAgdmFyIGxvYWRTY3JlZW5UYWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2FkU2NyZWVuIik7Ci0gICAgaWYgKGxvYWRTY3JlZW5UYWJsZS5yb3dzLmxlbmd0aCA+IDApCi0gICAgICBsb2FkU2NyZWVuVGFibGUuZGVsZXRlUm93KDApOwotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluU2NyZWVuIikuc3R5bGUuZGlzcGxheSA9ICIiOwotICB9Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotPGRpdiBpZD0iY29udGVudCI+Ci0gIDx0YWJsZSBpZD0ibG9hZFNjcmVlbiI+Ci0gICAgPHRyPgotICAgICAgPHRkPgotICAgICAgICA8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIk1TR19MT0FEX0lOX1BST0dSRVNTIiklPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotICA8ZGl2IGlkPSJtYWluU2NyZWVuIiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci08JQotICAgU3RyaW5nIHRpdGxlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9RVUVSWV9SRVNVTFRTIik7Ci0gICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAiaW1hZ2VzL2RldGFpbHNfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvdWRkaS9mb3Jtcy9yZXN1bHRzZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgPGZvcm0gdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIG1ldGhvZD0icG9zdCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgc3R5bGU9Im1hcmdpbi10b3A6MTBweDsiPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBTdHJpbmcgdGFibGVUaXRsZTsKLSAgIGludCBpdGVtVHlwZSA9IEludGVnZXIucGFyc2VJbnQodHJlZUVsZW1lbnQuZ2V0UHJvcGVydHlBc1N0cmluZyhVRERJTW9kZWxDb25zdGFudHMuUVVFUllfVFlQRSkpOyAgIAotICAgc3dpdGNoIChpdGVtVHlwZSkKLSAgIHsKLSAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fQlVTSU5FU1NFUzoKLSAgICAgICB0YWJsZVRpdGxlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0JVU0lORVNTRVMiKTsKLSAgICAgICBicmVhazsKLSAgICAgY2FzZSBVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRVM6Ci0gICAgICAgdGFibGVUaXRsZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9TRVJWSUNFUyIpOwotICAgICAgIGJyZWFrOwotICAgICBjYXNlIFVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFX0lOVEVSRkFDRVM6Ci0gICAgIGRlZmF1bHQ6Ci0gICAgICAgdGFibGVUaXRsZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9TRVJWSUNFX0lOVEVSRkFDRVMiKTsKLSAgIH0KLSAgIFN0cmluZ1tdIG90aGVyUHJvcGVydGllcyA9IHt0YWJsZVRpdGxlLCIifTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJSZXN1bHRzIik7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMob3RoZXJQcm9wZXJ0aWVzKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvcmVzdWx0c190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgICA8dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MiBjZWxsc3BhY2luZz0wPgotICAgICAgICA8dHI+Ci08JQotICAgaWYgKGhhc1RhcmdldCkKLSAgIHsKLSU+Ci0gICAgICAgICAgPHRkIGhlaWdodD00MCBhbGlnbj0iYm90dG9tIiBub3dyYXA+Ci0gICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQlVUVE9OX1RSQU5TRkVSIiklPiIgb25DbGljaz0idHJhbnNmZXJTZWxlY3Rpb25zKCdSZXN1bHRzJyx0aGlzLmZvcm0pIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICA8L3RkPgotPCUKLSAgIH0KLSU+Ci0gICAgICAgICAgPHRkIGhlaWdodD00MCBhbGlnbj0iYm90dG9tIiBub3dyYXA+Ci0gICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0JVVFRPTl9SRUZSRVNIIiklPiIgb25DbGljaz0icmVmcmVzaFNlbGVjdGlvbnMoJ1Jlc3VsdHMnLHRoaXMuZm9ybSkiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgPHRkIGhlaWdodD00MCBhbGlnbj0iYm90dG9tIiBub3dyYXA+Ci0gICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQlVUVE9OX0FERF9UT19GQVZPUklURVMiKSU+IiBvbkNsaWNrPSJhZGRTZWxlY3Rpb25zVG9GYXZvcml0ZXMoJ1Jlc3VsdHMnLHRoaXMuZm9ybSkiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgPHRkIGhlaWdodD00MCBhbGlnbj0iYm90dG9tIiBub3dyYXA+Ci0gICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQlVUVE9OX0NMRUFSIiklPiIgb25DbGljaz0iY2xlYXJTZWxlY3Rpb25zKCdSZXN1bHRzJyx0aGlzLmZvcm0pIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICA8L3RkPgotICAgICAgICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgICAgICAgPC90cj4KLSAgICAgIDwvdGFibGU+Ci0gICAgPC9mb3JtPgotICA8L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgc2V0RGVmYXVsdHMoKTsKLSAgcmVzdW1lUHJveHlMb2FkUGFnZSgpOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvU2VydmljZURldGFpbHNGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9TZXJ2aWNlRGV0YWlsc0Zvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZWZjNTFiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9TZXJ2aWNlRGV0YWlsc0Zvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjc4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnV0aWwuVWRkaTRqSGVscGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGouZGF0YXR5cGUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgIFRvb2xNYW5hZ2VyIGN1cnJlbnRUb29sTWFuYWdlciA9IHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKTsKLSAgIEZvcm1Ub29sIGZvcm1Ub29sID0gKEZvcm1Ub29sKShjdXJyZW50VG9vbE1hbmFnZXIuZ2V0U2VsZWN0ZWRUb29sKCkpOwotICAgU2VydmljZUVsZW1lbnQgc2VydmljZUVsZW1lbnQgPSAoU2VydmljZUVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICBVRERJTWFpbk5vZGUgdWRkaU1haW5Ob2RlID0gKFVERElNYWluTm9kZSluYXZpZ2F0b3JNYW5hZ2VyLmdldFJvb3ROb2RlKCk7Ci0gICBSZWdpc3RyeU5vZGUgcmVnTm9kZSA9IHVkZGlNYWluTm9kZS5nZXRSZWdpc3RyeU5vZGUoc2VsZWN0ZWROb2RlKTsKLSAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0lPgotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fVElUTEVfU0VSVklDRV9ERVRBSUxTIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvcmVzdW1lcHJveHlsb2FkcGFnZS5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL2Zvcm1zdWJtaXQuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvZGV0YWlsc3RhYmxlcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgZnVuY3Rpb24gc2V0RGVmYXVsdHMoKQotICB7Ci0gICAgdmFyIHNlcnZpY2VEZXRhaWxzV1NETFVSTFRhYmxlID0gZ2V0VGFibGUoInNlcnZpY2VEZXRhaWxzV1NETFVSTCIpOwotICAgIHZhciBzZXJ2aWNlRGV0YWlsc05hbWVzVGFibGUgPSBnZXRUYWJsZSgic2VydmljZURldGFpbHNOYW1lcyIpOwotICAgIHZhciBzZXJ2aWNlRGV0YWlsc0Rlc2NyaXB0aW9uc1RhYmxlID0gZ2V0VGFibGUoInNlcnZpY2VEZXRhaWxzRGVzY3JpcHRpb25zIik7Ci08JQotICAgTGlzdEVsZW1lbnQgd3NkbFVSTExpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9XU0RMX1VSTCk7Ci0gICBTdHJpbmcgd3NkbFVSTCA9IG51bGw7Ci0gICBpZiAod3NkbFVSTExpc3RFbGVtZW50ID09IG51bGwpCi0gICB7Ci0gICAgIHRyeQotICAgICB7Ci0gICAgICAgVWRkaTRqSGVscGVyIHVkZGk0akhlbHBlciA9IG5ldyBVZGRpNGpIZWxwZXIoKTsKLSAgICAgICB3c2RsVVJMID0gdWRkaTRqSGVscGVyLmdldFdTREwoc2VydmljZUVsZW1lbnQuZ2V0QnVzaW5lc3NTZXJ2aWNlKCksIHNlcnZpY2VFbGVtZW50LmdldFJlZ2lzdHJ5RWxlbWVudCgpLmdldFByb3h5KCkpOwotICAgICAgIHVkZGk0akhlbHBlci5nZXRXU0RMRGVmaW5pdGlvbih3c2RsVVJMKTsKLSAgICAgICBpZiAod3NkbFVSTCA9PSBudWxsKQotICAgICAgICAgd3NkbFVSTCA9ICJ0ZW1wLndzZGwiOwotICAgICB9Ci0gICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICAgewotICAgICAgIHdzZGxVUkwgPSAiIjsKLSAgICAgICBmb3JtVG9vbC5mbGFnRXJyb3IoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX1dTRExfVVJMKTsKLSAgICAgfQotICAgICB3c2RsVVJMTGlzdEVsZW1lbnQgPSBuZXcgTGlzdEVsZW1lbnQod3NkbFVSTCk7Ci0gICAgIHdzZGxVUkxMaXN0RWxlbWVudC5zZXRUYXJnZXRWaWV3VG9vbEluZm8oLTEsLTEsMCk7Ci0gICAgIGZvcm1Ub29sLnNldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9XU0RMX1VSTCx3c2RsVVJMTGlzdEVsZW1lbnQpOwotICAgfQotICAgZWxzZQotICAgICB3c2RsVVJMID0gKFN0cmluZyl3c2RsVVJMTGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICBib29sZWFuIGlzRXJyb3IgPSAhZm9ybVRvb2wuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9XU0RMX1VSTCk7Ci0gICBib29sZWFuIGlzTmV3SXRlbSA9ICh3c2RsVVJMTGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Vmlld0lkKCkgPT0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUKTsKLSU+Ci0gICAgYWRkRGV0YWlsc1NpbmdsZUl0ZW1Sb3coInNlcnZpY2VEZXRhaWxzV1NETFVSTCIsPCU9aXNFcnJvcnx8aXNOZXdJdGVtJT4pOwotICAgIHNldERldGFpbHNXU0RMVVJMU2luZ2xlSXRlbVJvdygic2VydmljZURldGFpbHNXU0RMVVJMIiw8JT1VRERJQWN0aW9uSW5wdXRzLldTRExfVFlQRV9TRVJWSUNFJT4sIjwlPUhUTUxVdGlscy5KU01hbmdsZSh3c2RsVVJMKSU+Iik7Ci08JQotICAgaWYgKGlzRXJyb3IpCi0gICB7Ci0lPgotICAgIGhpZ2hsaWdodEVycmFudFJvdyhzZXJ2aWNlRGV0YWlsc1dTRExVUkxUYWJsZS5yb3dzW251bWJlck9mSGVhZGVyUm93c10sImVycmFudFJvdyIpOwotPCUKLSAgIH0KLQotICAgVmVjdG9yIG5hbWVJbmRleFZlY3RvciA9IChWZWN0b3IpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX05BTUVTKTsKLSAgIGlmIChuYW1lSW5kZXhWZWN0b3IgIT0gbnVsbCkKLSAgIHsKLSAgICAgZm9yIChpbnQgaT0wO2k8bmFtZUluZGV4VmVjdG9yLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudCluYW1lSW5kZXhWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgIE5hbWUgbmFtZSA9IChOYW1lKWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgIGlzRXJyb3IgPSAhZm9ybVRvb2wuaXNSb3dJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9OQU1FUyxpKTsKLSAgICAgICBpc05ld0l0ZW0gPSAobGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Vmlld0lkKCkgPT0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUKTsKLSU+Ci0gICAgYWRkRGV0YWlsc0xhbmd1YWdlSW5wdXRSb3coInNlcnZpY2VEZXRhaWxzTmFtZXMiLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9OQU1FX1RFWFRfVkFMVUUiKSklPiIsPCU9aXNFcnJvcnx8aXNOZXdJdGVtJT4pOwotICAgIHNldERldGFpbHNMYW5ndWFnZUlucHV0Um93KCJzZXJ2aWNlRGV0YWlsc05hbWVzIiw8JT1pJT4sPCU9bGlzdEVsZW1lbnQuZ2V0Vmlld0lkKCklPiwiPCU9bmFtZS5nZXRMYW5nKCklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShuYW1lLmdldFRleHQoKSklPiIpOwotPCUKLSAgICAgICBpZiAoaXNFcnJvcikKLSAgICAgICB7Ci0lPgotICAgIGhpZ2hsaWdodEVycmFudFJvdyhzZXJ2aWNlRGV0YWlsc05hbWVzVGFibGUucm93c1s8JT1pJT4rbnVtYmVyT2ZIZWFkZXJSb3dzXSwiZXJyYW50Um93Iik7Ci08JQotICAgICAgIH0KLSAgICAgfQotICAgfQotCi0gICBWZWN0b3IgZGVzY3JpcHRpb25JbmRleFZlY3RvciA9IChWZWN0b3IpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0RFU0NSSVBUSU9OUyk7Ci0gICBpZiAoZGVzY3JpcHRpb25JbmRleFZlY3RvciAhPSBudWxsKQotICAgewotICAgICBmb3IgKGludCBpPTA7aTxkZXNjcmlwdGlvbkluZGV4VmVjdG9yLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClkZXNjcmlwdGlvbkluZGV4VmVjdG9yLmVsZW1lbnRBdChpKTsKLSAgICAgICBEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IChEZXNjcmlwdGlvbilsaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgICAgICBpc0Vycm9yID0gIWZvcm1Ub29sLmlzUm93SW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfREVTQ1JJUFRJT05TLGkpOwotICAgICAgIGlzTmV3SXRlbSA9IChsaXN0RWxlbWVudC5nZXRUYXJnZXRWaWV3SWQoKSA9PSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpOwotJT4KLSAgICBhZGREZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvdygic2VydmljZURldGFpbHNEZXNjcmlwdGlvbnMiLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9ERVNDUklQVElPTl9URVhUX1ZBTFVFIikpJT4iLDwlPWlzRXJyb3J8fGlzTmV3SXRlbSU+KTsKLSAgICBzZXREZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvdygic2VydmljZURldGFpbHNEZXNjcmlwdGlvbnMiLDwlPWklPiw8JT1saXN0RWxlbWVudC5nZXRWaWV3SWQoKSU+LCI8JT1kZXNjcmlwdGlvbi5nZXRMYW5nKCklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShkZXNjcmlwdGlvbi5nZXRUZXh0KCkpJT4iKTsKLTwlCi0gICAgICAgaWYgKGlzRXJyb3IpCi0gICAgICAgewotJT4KLSAgICBoaWdobGlnaHRFcnJhbnRSb3coc2VydmljZURldGFpbHNEZXNjcmlwdGlvbnNUYWJsZS5yb3dzWzwlPWklPitudW1iZXJPZkhlYWRlclJvd3NdLCJlcnJhbnRSb3ciKTsKLTwlCi0gICAgICAgfQotICAgICB9Ci0gICB9Ci0KLSAgIFZlY3RvciBjYXRWZWN0b3IgPSAoVmVjdG9yKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9DQVRFR09SSUVTKTsKLSAgIGlmIChjYXRWZWN0b3IgIT0gbnVsbCkKLSAgIHsKLSAgICAgZm9yIChpbnQgaT0wO2k8Y2F0VmVjdG9yLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudCljYXRWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gKEtleWVkUmVmZXJlbmNlKWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgIGlzRXJyb3IgPSAhZm9ybVRvb2wuaXNSb3dJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9DQVRFR09SSUVTLGkpOwotICAgICAgIGlzTmV3SXRlbSA9IChsaXN0RWxlbWVudC5nZXRUYXJnZXRWaWV3SWQoKSA9PSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpOwotJT4KLSAgICBhZGREZXRhaWxzQ2F0ZWdvcnlSb3coInNlcnZpY2VEZXRhaWxzQ2F0ZWdvcmllcyIsPCU9aXNFcnJvcnx8aXNOZXdJdGVtJT4pOwotICAgIHNldERldGFpbHNDYXRlZ29yeVJvdygic2VydmljZURldGFpbHNDYXRlZ29yaWVzIiw8JT1pJT4sPCU9bGlzdEVsZW1lbnQuZ2V0Vmlld0lkKCklPiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldFRNb2RlbEtleSgpKSU+IiwiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGtyLmdldEtleU5hbWUoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRLZXlWYWx1ZSgpKSU+Iik7Ci08JQotICAgICB9Ci0gICB9Ci0KLSAgIC8vIEF1dGhlbnRpY2F0aW9uLgotICAgaWYgKCFyZWdFbGVtZW50LmlzTG9nZ2VkSW4oKSkKLSAgIHsKLSAgICAgU3RyaW5nIHB1Ymxpc2hVUkwgPSAoU3RyaW5nKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwpOwotICAgICBTdHJpbmcgdXNlcklkID0gKFN0cmluZylmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCk7Ci0gICAgIFN0cmluZyBwYXNzd29yZCA9IChTdHJpbmcpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCk7Ci0lPgotICAgIGRvY3VtZW50LmZvcm1zWzBdLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUFVCTElTSF9VUkwlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUocHVibGlzaFVSTCklPiI7Ci0gICAgZG9jdW1lbnQuZm9ybXNbMF0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodXNlcklkKSU+IjsKLSAgICBkb2N1bWVudC5mb3Jtc1swXS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHBhc3N3b3JkKSU+IjsKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2VydmljZURldGFpbHNBdXRoZW50aWNhdGlvbiIpLnN0eWxlLmRpc3BsYXkgPSAiIjsKLTwlCi0gICB9Ci0lPgotCi0gICAgc2hvd01haW5Gb3JtKCk7Ci0gIH0KLQotICBmdW5jdGlvbiBzaG93TWFpbkZvcm0oKQotICB7Ci0gICAgY2xvc2VBbGxVZGRpQ2hpbGRXaW5kb3dzKCk7Ci0gICAgdmFyIGxvYWRTY3JlZW5UYWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2FkU2NyZWVuIik7Ci0gICAgaWYgKGxvYWRTY3JlZW5UYWJsZS5yb3dzLmxlbmd0aCA+IDApCi0gICAgICBsb2FkU2NyZWVuVGFibGUuZGVsZXRlUm93KDApOwotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluU2NyZWVuIikuc3R5bGUuZGlzcGxheSA9ICIiOwotICB9Ci0KLSAgZnVuY3Rpb24gcHJvY2Vzc0Zvcm0oZm9ybSkKLSAgewotICAgIGlmIChoYW5kbGVTdWJtaXQoZm9ybSkpCi0gICAgewotICAgICAgcHJvY2Vzc0RldGFpbHNTaW5nbGVJdGVtVGFibGUoInNlcnZpY2VEZXRhaWxzV1NETFVSTCIsIjwlPVVERElBY3Rpb25JbnB1dHMuV1NETF9VUkxfTU9ESUZJRUQlPiIsIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9XU0RMX1VSTCU+Iixmb3JtKTsKLSAgICAgIHByb2Nlc3NEZXRhaWxzTGFuZ3VhZ2VJbnB1dFRhYmxlKCJzZXJ2aWNlRGV0YWlsc05hbWVzIiwiPCU9VURESUFjdGlvbklucHV0cy5OQU1FX01PRElGSUVEJT4iLCI8JT1VRERJQWN0aW9uSW5wdXRzLk5BTUVfVklFV0lEJT4iLCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX05BTUVfTEFOR1VBR0UlPiIsIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTkFNRSU+Iixmb3JtKTsKLSAgICAgIHByb2Nlc3NEZXRhaWxzTGFuZ3VhZ2VJbnB1dFRhYmxlKCJzZXJ2aWNlRGV0YWlsc0Rlc2NyaXB0aW9ucyIsIjwlPVVERElBY3Rpb25JbnB1dHMuREVTQ1JJUFRJT05fTU9ESUZJRUQlPiIsIjwlPVVERElBY3Rpb25JbnB1dHMuREVTQ1JJUFRJT05fVklFV0lEJT4iLCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0RFU0NSSVBUSU9OX0xBTkdVQUdFJT4iLCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0RFU0NSSVBUSU9OJT4iLGZvcm0pOwotICAgICAgcHJvY2Vzc0RldGFpbHNDYXRlZ29yeVRhYmxlKCJzZXJ2aWNlRGV0YWlsc0NhdGVnb3JpZXMiLGZvcm0pOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiIgb25VbmxvYWQ9ImNsb3NlQWxsVWRkaUNoaWxkV2luZG93cygpIj4KLSAgPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gICAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvYWN0aW9ucy9VcGRhdGVTZXJ2aWNlQWN0aW9uSlNQLmpzcCIpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBvblN1Ym1pdD0icmV0dXJuIHByb2Nlc3NGb3JtKHRoaXMpIj4KLSAgICAgIDx0YWJsZSBpZD0ibG9hZFNjcmVlbiI+Ci0gICAgICAgIDx0cj4KLSAgICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgICA8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIk1TR19MT0FEX0lOX1BST0dSRVNTIiklPgotICAgICAgICAgIDwvdGQ+Ci0gICAgICAgIDwvdHI+Ci0gICAgICA8L3RhYmxlPgotICAgICAgPGRpdiBpZD0ibWFpblNjcmVlbiIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotPCUKLSAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJpbWFnZXMvZGV0YWlsc19oaWdobGlnaHRlZC5naWYiOwotICAgU3RyaW5nIHRpdGxlID0gdWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9TRVJWSUNFX0RFVEFJTFMiKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9CVVNJTkVTU19LRVklPiIgdmFsdWU9IjwlPWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9CVVNJTkVTU19LRVkpJT4iPgotICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1VVSURfU0VSVklDRV9LRVklPiIgdmFsdWU9IjwlPWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfVVVJRF9TRVJWSUNFX0tFWSklPiI+Ci0gICAgICAgIDx0YWJsZT4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgICAgIDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0RFVEFJTFNfRURJVEFCTEUiLHNlbGVjdGVkTm9kZS5nZXROb2RlTmFtZSgpKSU+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGhlaWdodD0yMD4mbmJzcDs8L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfU0VSVklDRV9LRVkiKSU+Ci0gICAgICAgICAgICA8L3RoPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICAgICAgPCU9Zm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfS0VZKSU+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJzZXJ2aWNlRGV0YWlsc1dTRExVUkwiKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyhjb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfV1NETF9VUkwiKSk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2RldGFpbHNTaW5nbGVJdGVtX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoInNlcnZpY2VEZXRhaWxzTmFtZXMiKTsKLSAgIFN0cmluZ1tdIG5hbWVTcGVjaWZpY0luZm8gPSB7IkZPUk1fTEFCRUxfTkFNRVMiLCJGT1JNX0xBQkVMX05BTUUiLFN0cmluZy52YWx1ZU9mKCFmb3JtVG9vbC5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX05BTUVTKSl9OwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKG5hbWVTcGVjaWZpY0luZm8pOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9kZXRhaWxzTGFuZ3VhZ2VJbnB1dF90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJzZXJ2aWNlRGV0YWlsc0Rlc2NyaXB0aW9ucyIpOwotICAgU3RyaW5nW10gZGVzY1NwZWNpZmljSW5mbyA9IHsiRk9STV9MQUJFTF9ERVNDUklQVElPTlMiLCJGT1JNX0xBQkVMX0RFU0NSSVBUSU9OIixTdHJpbmcudmFsdWVPZighZm9ybVRvb2wuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9ERVNDUklQVElPTlMpKX07Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMoZGVzY1NwZWNpZmljSW5mbyk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2RldGFpbHNMYW5ndWFnZUlucHV0X3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoInNlcnZpY2VEZXRhaWxzQ2F0ZWdvcmllcyIpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9kZXRhaWxzQ2F0ZWdvcmllc190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJzZXJ2aWNlRGV0YWlsc0F1dGhlbnRpY2F0aW9uIik7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2F1dGhlbnRpY2F0aW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6dXNlQmVhbiBpZD0iY3VycmVudFRvb2xNYW5hZ2VySGFzaCIgY2xhc3M9ImphdmEudXRpbC5IYXNodGFibGUiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gIGN1cnJlbnRUb29sTWFuYWdlckhhc2gucHV0KEFjdGlvbklucHV0cy5DVVJSRU5UX1RPT0xfTUFOQUdFUixjdXJyZW50VG9vbE1hbmFnZXIpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL290aGVyQWN0aW9ucy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL3NpbXBsZUNvbW1vbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgICA8L2Rpdj4KLSAgICA8L2Zvcm0+Ci0gIDwvZGl2PgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHNldERlZmF1bHRzKCk7Ci0gIHJlc3VtZVByb3h5TG9hZFBhZ2UoKTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1NlcnZpY2VJbnRlcmZhY2VEZXRhaWxzRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvU2VydmljZUludGVyZmFjZURldGFpbHNGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzFlMzhjMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvU2VydmljZUludGVyZmFjZURldGFpbHNGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI5MiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS51dGlsLlVkZGk0akhlbHBlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudWRkaTRqLmRhdGF0eXBlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGoudXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlciA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci0gICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICBUb29sTWFuYWdlciBjdXJyZW50VG9vbE1hbmFnZXIgPSBzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCk7Ci0gICBGb3JtVG9vbCBmb3JtVG9vbCA9IChGb3JtVG9vbCkoY3VycmVudFRvb2xNYW5hZ2VyLmdldFNlbGVjdGVkVG9vbCgpKTsKLSAgIFNlcnZpY2VJbnRlcmZhY2VFbGVtZW50IHNpRWxlbWVudCA9IChTZXJ2aWNlSW50ZXJmYWNlRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsgICAKLSAgIFVERElNYWluTm9kZSB1ZGRpTWFpbk5vZGUgPSAoVURESU1haW5Ob2RlKW5hdmlnYXRvck1hbmFnZXIuZ2V0Um9vdE5vZGUoKTsKLSAgIFJlZ2lzdHJ5Tm9kZSByZWdOb2RlID0gdWRkaU1haW5Ob2RlLmdldFJlZ2lzdHJ5Tm9kZShzZWxlY3RlZE5vZGUpOwotICAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoUmVnaXN0cnlFbGVtZW50KXJlZ05vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSU+Ci08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9TRVJWSUNFX0lOVEVSRkFDRV9ERVRBSUxTIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvcmVzdW1lcHJveHlsb2FkcGFnZS5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL2Zvcm1zdWJtaXQuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvZGV0YWlsc3RhYmxlcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgZnVuY3Rpb24gc2V0RGVmYXVsdHMoKQotICB7Ci0gICAgdmFyIHNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzV1NETFVSTFRhYmxlID0gZ2V0VGFibGUoInNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzV1NETFVSTCIpOwotICAgIHZhciBzZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc05hbWVUYWJsZSA9IGdldFRhYmxlKCJzZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc05hbWUiKTsKLSAgICB2YXIgc2VydmljZUludGVyZmFjZURldGFpbHNEZXNjcmlwdGlvbnNUYWJsZSA9IGdldFRhYmxlKCJzZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc0Rlc2NyaXB0aW9ucyIpOwotICAgIHZhciBzZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc0lkZW50aWZpZXJzVGFibGUgPSBnZXRUYWJsZSgic2VydmljZUludGVyZmFjZURldGFpbHNJZGVudGlmaWVycyIpOwotICAgIHZhciBzZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc0NhdGVnb3JpZXNUYWJsZSA9IGdldFRhYmxlKCJzZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc0NhdGVnb3JpZXMiKTsKLTwlCi0gICBMaXN0RWxlbWVudCB3c2RsVVJMTGlzdEVsZW1lbnQgPSAoTGlzdEVsZW1lbnQpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9XU0RMX1VSTCk7Ci0gICBTdHJpbmcgd3NkbFVSTCA9IG51bGw7Ci0gICBpZiAod3NkbFVSTExpc3RFbGVtZW50ID09IG51bGwpCi0gICB7Ci0gICAgIHRyeQotICAgICB7Ci0gICAgICAgVWRkaTRqSGVscGVyIHVkZGk0akhlbHBlciA9IG5ldyBVZGRpNGpIZWxwZXIoKTsKLSAgICAgICB3c2RsVVJMID0gdWRkaTRqSGVscGVyLmdldFdTREwoc2lFbGVtZW50LmdldFRNb2RlbCgpKTsKLSAgICAgICB1ZGRpNGpIZWxwZXIuZ2V0V1NETERlZmluaXRpb24od3NkbFVSTCk7Ci0gICAgICAgaWYgKHdzZGxVUkwgPT0gbnVsbCkKLSAgICAgICAgIHdzZGxVUkwgPSAidGVtcC53c2RsIjsKLSAgICAgfQotICAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgIHsKLSAgICAgICB3c2RsVVJMID0gIiI7Ci0gICAgICAgZm9ybVRvb2wuZmxhZ0Vycm9yKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfV1NETF9VUkwpOwotICAgICB9Ci0gICAgIHdzZGxVUkxMaXN0RWxlbWVudCA9IG5ldyBMaXN0RWxlbWVudCh3c2RsVVJMKTsKLSAgICAgd3NkbFVSTExpc3RFbGVtZW50LnNldFRhcmdldFZpZXdUb29sSW5mbygtMSwtMSwwKTsKLSAgICAgZm9ybVRvb2wuc2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9XU0RMX1VSTCx3c2RsVVJMTGlzdEVsZW1lbnQpOwotICAgfQotICAgZWxzZQotICAgICB3c2RsVVJMID0gKFN0cmluZyl3c2RsVVJMTGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICBib29sZWFuIGlzRXJyb3IgPSAhZm9ybVRvb2wuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfV1NETF9VUkwpOwotICAgYm9vbGVhbiBpc05ld0l0ZW0gPSAod3NkbFVSTExpc3RFbGVtZW50LmdldFRhcmdldFZpZXdJZCgpID09IEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCk7Ci0lPgotICAgIGFkZERldGFpbHNTaW5nbGVJdGVtUm93KCJzZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc1dTRExVUkwiLDwlPWlzRXJyb3J8fGlzTmV3SXRlbSU+KTsKLSAgICBzZXREZXRhaWxzV1NETFVSTFNpbmdsZUl0ZW1Sb3coInNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzV1NETFVSTCIsPCU9QWN0aW9uSW5wdXRzLldTRExfVFlQRV9TRVJWSUNFX0lOVEVSRkFDRSU+LCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUod3NkbFVSTCklPiIpOwotPCUKLSAgIGlmIChpc0Vycm9yKQotICAgewotJT4KLSAgICBoaWdobGlnaHRFcnJhbnRSb3coc2VydmljZUludGVyZmFjZURldGFpbHNXU0RMVVJMVGFibGUucm93c1tudW1iZXJPZkhlYWRlclJvd3NdLCJlcnJhbnRSb3ciKTsKLTwlICAgCi0gICB9Ci0KLSAgIExpc3RFbGVtZW50IG5hbWVMaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX05BTUUpOwotICAgU3RyaW5nIG5hbWUgPSAoU3RyaW5nKW5hbWVMaXN0RWxlbWVudC5nZXRPYmplY3QoKTsKLSAgIGlzRXJyb3IgPSAhZm9ybVRvb2wuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSk7Ci0gICBpc05ld0l0ZW0gPSAobmFtZUxpc3RFbGVtZW50LmdldFRhcmdldFZpZXdJZCgpID09IEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCk7Ci0lPgotICAgIGFkZERldGFpbHNTaW5nbGVJdGVtUm93KCJzZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc05hbWUiLDwlPWlzRXJyb3J8fGlzTmV3SXRlbSU+KTsKLSAgICBzZXREZXRhaWxzTmFtZVNpbmdsZUl0ZW1Sb3coInNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzTmFtZSIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShuYW1lKSU+Iik7Ci08JQotICAgaWYgKGlzRXJyb3IpCi0gICB7Ci0lPgotICAgIGhpZ2hsaWdodEVycmFudFJvdyhzZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc05hbWVUYWJsZS5yb3dzW251bWJlck9mSGVhZGVyUm93c10sImVycmFudFJvdyIpOwotPCUKLSAgIH0KLSAgIAotICAgVmVjdG9yIGRlc2NyaXB0aW9uSW5kZXhWZWN0b3IgPSAoVmVjdG9yKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfREVTQ1JJUFRJT05TKTsKLSAgIGlmIChkZXNjcmlwdGlvbkluZGV4VmVjdG9yICE9IG51bGwpCi0gICB7Ci0gICAgIGZvciAoaW50IGk9MDtpPGRlc2NyaXB0aW9uSW5kZXhWZWN0b3Iuc2l6ZSgpO2krKykKLSAgICAgewotICAgICAgIExpc3RFbGVtZW50IGxpc3RFbGVtZW50ID0gKExpc3RFbGVtZW50KWRlc2NyaXB0aW9uSW5kZXhWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgIERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gKERlc2NyaXB0aW9uKWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgIGlzRXJyb3IgPSAhZm9ybVRvb2wuaXNSb3dJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfREVTQ1JJUFRJT05TLGkpOwotICAgICAgIGlzTmV3SXRlbSA9IChsaXN0RWxlbWVudC5nZXRUYXJnZXRWaWV3SWQoKSA9PSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpOwotJT4KLSAgICBhZGREZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvdygic2VydmljZUludGVyZmFjZURldGFpbHNEZXNjcmlwdGlvbnMiLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9ERVNDUklQVElPTl9URVhUX1ZBTFVFIikpJT4iLDwlPWlzRXJyb3J8fGlzTmV3SXRlbSU+KTsKLSAgICBzZXREZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvdygic2VydmljZUludGVyZmFjZURldGFpbHNEZXNjcmlwdGlvbnMiLDwlPWklPiw8JT1saXN0RWxlbWVudC5nZXRWaWV3SWQoKSU+LCI8JT1kZXNjcmlwdGlvbi5nZXRMYW5nKCklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShkZXNjcmlwdGlvbi5nZXRUZXh0KCkpJT4iKTsKLTwlCi0gICAgICAgaWYgKGlzRXJyb3IpCi0gICAgICAgewotJT4KLSAgICBoaWdobGlnaHRFcnJhbnRSb3coc2VydmljZUludGVyZmFjZURldGFpbHNEZXNjcmlwdGlvbnNUYWJsZS5yb3dzWzwlPWklPitudW1iZXJPZkhlYWRlclJvd3NdLCJlcnJhbnRSb3ciKTsKLTwlICAgICAgIAotICAgICAgIH0KLSAgICAgfQotICAgfQotICAgCi0gICBWZWN0b3IgaWRWZWN0b3IgPSAoVmVjdG9yKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfSURFTlRJRklFUlMpOwotICAgaWYgKGlkVmVjdG9yICE9IG51bGwpCi0gICB7Ci0gICAgIGZvciAoaW50IGk9MDtpPGlkVmVjdG9yLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudClpZFZlY3Rvci5lbGVtZW50QXQoaSk7Ci0gICAgICAgS2V5ZWRSZWZlcmVuY2Uga3IgPSAoS2V5ZWRSZWZlcmVuY2UpbGlzdEVsZW1lbnQuZ2V0T2JqZWN0KCk7Ci0gICAgICAgaXNFcnJvciA9ICFmb3JtVG9vbC5pc1Jvd0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9JREVOVElGSUVSUyxpKTsKLSAgICAgICBpc05ld0l0ZW0gPSAobGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Vmlld0lkKCkgPT0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUKTsKLSU+Ci0gICAgYWRkRGV0YWlsc0lkZW50aWZpZXJSb3coInNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzSWRlbnRpZmllcnMiLDwlPWlzRXJyb3J8fGlzTmV3SXRlbSU+KTsKLSAgICBzZXREZXRhaWxzSWRlbnRpZmllclJvdygic2VydmljZUludGVyZmFjZURldGFpbHNJZGVudGlmaWVycyIsPCU9aSU+LDwlPWxpc3RFbGVtZW50LmdldFZpZXdJZCgpJT4sIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRUTW9kZWxLZXkoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRLZXlOYW1lKCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0S2V5VmFsdWUoKSklPiIpOwotPCUgICAgICAgCi0gICAgIH0KLSAgIH0KLSAgIAotICAgVmVjdG9yIGNhdFZlY3RvciA9IChWZWN0b3IpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9DQVRFR09SSUVTKTsKLSAgIGlmIChjYXRWZWN0b3IgIT0gbnVsbCkKLSAgIHsKLSAgICAgZm9yIChpbnQgaT0wO2k8Y2F0VmVjdG9yLnNpemUoKTtpKyspCi0gICAgIHsKLSAgICAgICBMaXN0RWxlbWVudCBsaXN0RWxlbWVudCA9IChMaXN0RWxlbWVudCljYXRWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gKEtleWVkUmVmZXJlbmNlKWxpc3RFbGVtZW50LmdldE9iamVjdCgpOwotICAgICAgIGlzRXJyb3IgPSAhZm9ybVRvb2wuaXNSb3dJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfQ0FURUdPUklFUyxpKTsKLSAgICAgICBpc05ld0l0ZW0gPSAobGlzdEVsZW1lbnQuZ2V0VGFyZ2V0Vmlld0lkKCkgPT0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUKTsKLSU+Ci0gICAgYWRkRGV0YWlsc0NhdGVnb3J5Um93KCJzZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc0NhdGVnb3JpZXMiLDwlPWlzRXJyb3J8fGlzTmV3SXRlbSU+KTsKLSAgICBzZXREZXRhaWxzQ2F0ZWdvcnlSb3coInNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzQ2F0ZWdvcmllcyIsPCU9aSU+LDwlPWxpc3RFbGVtZW50LmdldFZpZXdJZCgpJT4sIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRUTW9kZWxLZXkoKSklPiIsIjwlPUhUTUxVdGlscy5KU01hbmdsZShrci5nZXRLZXlOYW1lKCkpJT4iLCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoa3IuZ2V0S2V5VmFsdWUoKSklPiIpOwotPCUKLSAgICAgfQotICAgfQotICAgCi0gICAvLyBBdXRoZW50aWNhdGlvbi4KLSAgIGlmICghcmVnRWxlbWVudC5pc0xvZ2dlZEluKCkpCi0gICB7Ci0gICAgIFN0cmluZyBwdWJsaXNoVVJMID0gKFN0cmluZylmb3JtVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKTsKLSAgICAgU3RyaW5nIHVzZXJJZCA9IChTdHJpbmcpZm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpOwotICAgICBTdHJpbmcgcGFzc3dvcmQgPSAoU3RyaW5nKWZvcm1Ub29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQpOwotJT4gICAKLSAgICBkb2N1bWVudC5mb3Jtc1swXS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHB1Ymxpc2hVUkwpJT4iOwotICAgIGRvY3VtZW50LmZvcm1zWzBdLjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVzZXJJZCklPiI7Ci0gICAgZG9jdW1lbnQuZm9ybXNbMF0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QQVNTV09SRCU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZShwYXNzd29yZCklPiI7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzQXV0aGVudGljYXRpb24iKS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci08JQotICAgfQotJT4gIAotICAgIHNob3dNYWluRm9ybSgpOwotICB9Ci0gIAotICBmdW5jdGlvbiBzaG93TWFpbkZvcm0oKQotICB7Ci0gICAgY2xvc2VBbGxVZGRpQ2hpbGRXaW5kb3dzKCk7Ci0gICAgdmFyIGxvYWRTY3JlZW5UYWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2FkU2NyZWVuIik7Ci0gICAgaWYgKGxvYWRTY3JlZW5UYWJsZS5yb3dzLmxlbmd0aCA+IDApCi0gICAgICBsb2FkU2NyZWVuVGFibGUuZGVsZXRlUm93KDApOwotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluU2NyZWVuIikuc3R5bGUuZGlzcGxheSA9ICIiOwotICB9Ci0gIAotICBmdW5jdGlvbiBwcm9jZXNzRm9ybShmb3JtKQotICB7Ci0gICAgaWYgKGhhbmRsZVN1Ym1pdChmb3JtKSkKLSAgICB7Ci0gICAgICBwcm9jZXNzRGV0YWlsc1NpbmdsZUl0ZW1UYWJsZSgic2VydmljZUludGVyZmFjZURldGFpbHNXU0RMVVJMIiwiPCU9VURESUFjdGlvbklucHV0cy5XU0RMX1VSTF9NT0RJRklFRCU+IiwiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0lOVEVSRkFDRV9XU0RMX1VSTCU+Iixmb3JtKTsKLSAgICAgIHByb2Nlc3NEZXRhaWxzU2luZ2xlSXRlbVRhYmxlKCJzZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc05hbWUiLCI8JT1VRERJQWN0aW9uSW5wdXRzLk5BTUVfTU9ESUZJRUQlPiIsIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTkFNRSU+Iixmb3JtKTsKLSAgICAgIHByb2Nlc3NEZXRhaWxzTGFuZ3VhZ2VJbnB1dFRhYmxlKCJzZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc0Rlc2NyaXB0aW9ucyIsIjwlPVVERElBY3Rpb25JbnB1dHMuREVTQ1JJUFRJT05fTU9ESUZJRUQlPiIsIjwlPVVERElBY3Rpb25JbnB1dHMuREVTQ1JJUFRJT05fVklFV0lEJT4iLCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0RFU0NSSVBUSU9OX0xBTkdVQUdFJT4iLCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0RFU0NSSVBUSU9OJT4iLGZvcm0pOwotICAgICAgcHJvY2Vzc0RldGFpbHNJZGVudGlmaWVyVGFibGUoInNlcnZpY2VJbnRlcmZhY2VEZXRhaWxzSWRlbnRpZmllcnMiLGZvcm0pOwotICAgICAgcHJvY2Vzc0RldGFpbHNDYXRlZ29yeVRhYmxlKCJzZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc0NhdGVnb3JpZXMiLGZvcm0pOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfSAgIAotPC9zY3JpcHQ+ICAKLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIiBvblVubG9hZD0iY2xvc2VBbGxVZGRpQ2hpbGRXaW5kb3dzKCkiPgotICA8ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLSAgICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zL1VwZGF0ZVNlcnZpY2VJbnRlcmZhY2VBY3Rpb25KU1AuanNwIikpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG9uU3VibWl0PSJyZXR1cm4gcHJvY2Vzc0Zvcm0odGhpcykiPiAgCi0gICAgICA8dGFibGUgaWQ9ImxvYWRTY3JlZW4iPgotICAgICAgICA8dHI+Ci0gICAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgICAgPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJNU0dfTE9BRF9JTl9QUk9HUkVTUyIpJT4KLSAgICAgICAgICA8L3RkPgotICAgICAgICA8L3RyPgotICAgICAgPC90YWJsZT4KLSAgICAgIDxkaXYgaWQ9Im1haW5TY3JlZW4iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLTwlCi0gICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAiaW1hZ2VzL2RldGFpbHNfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgIFN0cmluZyB0aXRsZSA9IHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfU0VSVklDRV9JTlRFUkZBQ0VfREVUQUlMUyIpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4gICAgICAKLSAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfSU5URVJGQUNFX0tFWSU+IiB2YWx1ZT0iPCU9Zm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfSU5URVJGQUNFX0tFWSklPiI+Ci0gICAgICAgIDx0YWJsZT4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgICAgIDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0RFVEFJTFNfRURJVEFCTEUiLHNlbGVjdGVkTm9kZS5nZXROb2RlTmFtZSgpKSU+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGhlaWdodD0yMD4mbmJzcDs8L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+ICAgICAgICAKLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9TRVJWSUNFX0lOVEVSRkFDRV9LRVkiKSU+Ci0gICAgICAgICAgICA8L3RoPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICAgICAgPCU9Zm9ybVRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9VVUlEX1NFUlZJQ0VfSU5URVJGQUNFX0tFWSklPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgic2VydmljZUludGVyZmFjZURldGFpbHNXU0RMVVJMIik7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMoY29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1dTRExfVVJMIikpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9kZXRhaWxzU2luZ2xlSXRlbV90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJzZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc05hbWUiKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldE90aGVyUHJvcGVydGllcyh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9OQU1FIikpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9kZXRhaWxzU2luZ2xlSXRlbV90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+ICAgCi08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJzZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc0Rlc2NyaXB0aW9ucyIpOwotICAgU3RyaW5nW10gZGVzY1NwZWNpZmljSW5mbyA9IHsiRk9STV9MQUJFTF9ERVNDUklQVElPTlMiLCJGT1JNX0xBQkVMX0RFU0NSSVBUSU9OIixTdHJpbmcudmFsdWVPZighZm9ybVRvb2wuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfREVTQ1JJUFRJT05TKSl9OwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKGRlc2NTcGVjaWZpY0luZm8pOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9kZXRhaWxzTGFuZ3VhZ2VJbnB1dF90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJzZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc0lkZW50aWZpZXJzIik7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2RldGFpbHNJZGVudGlmaWVyc190YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJzZXJ2aWNlSW50ZXJmYWNlRGV0YWlsc0NhdGVnb3JpZXMiKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvZGV0YWlsc0NhdGVnb3JpZXNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPiAgIAotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgic2VydmljZUludGVyZmFjZURldGFpbHNBdXRoZW50aWNhdGlvbiIpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9hdXRoZW50aWNhdGlvbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImN1cnJlbnRUb29sTWFuYWdlckhhc2giIGNsYXNzPSJqYXZhLnV0aWwuSGFzaHRhYmxlIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICBjdXJyZW50VG9vbE1hbmFnZXJIYXNoLnB1dChBY3Rpb25JbnB1dHMuQ1VSUkVOVF9UT09MX01BTkFHRVIsY3VycmVudFRvb2xNYW5hZ2VyKTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9vdGhlckFjdGlvbnMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9zaW1wbGVDb21tb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgICAgPC9kaXY+Ci0gICAgPC9mb3JtPgotICA8L2Rpdj4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBzZXREZWZhdWx0cygpOwotICByZXN1bWVQcm94eUxvYWRQYWdlKCk7ICAKLTwvc2NyaXB0PiAgICAKLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9VRERJSW1wb3J0V1NETFRvV29ya2JlbmNoRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvVURESUltcG9ydFdTRExUb1dvcmtiZW5jaEZvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDIyOGIyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9VRERJSW1wb3J0V1NETFRvV29ya2JlbmNoRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmb3JtUHJvcGVydGllcyIgY2xhc3M9ImphdmEudXRpbC5IYXNodGFibGUiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgU3RyaW5nIHdzZGxVUkw7Ci0gICAvLyBzZWxlY3RlZE5vZGUgc2hvdWxkIGJlIGVpdGhlciBhIHNlcnZpY2Ugb3IgYSBzZXJ2aWNlIGludGVyZmFjZSBub2RlLgotICAgaWYgKHNlbGVjdGVkTm9kZSBpbnN0YW5jZW9mIFNlcnZpY2VOb2RlKQotICAgewotICAgICBTZXJ2aWNlTm9kZSBzZXJ2aWNlTm9kZSA9IChTZXJ2aWNlTm9kZSlzZWxlY3RlZE5vZGU7Ci0gICAgIHdzZGxVUkwgPSBzZXJ2aWNlTm9kZS5nZXRXU0RMVVJMRnJvbURldGFpbHNUb29sKCk7Ci0gICB9Ci0gICBlbHNlCi0gICB7Ci0gICAgIFNlcnZpY2VJbnRlcmZhY2VOb2RlIHNpTm9kZSA9IChTZXJ2aWNlSW50ZXJmYWNlTm9kZSlzZWxlY3RlZE5vZGU7Ci0gICAgIHdzZGxVUkwgPSBzaU5vZGUuZ2V0V1NETFVSTEZyb21EZXRhaWxzVG9vbCgpOwotICAgfQotICAgZm9ybVByb3BlcnRpZXMucHV0KCJmb3JtQWN0aW9uTGluayIsInVkZGkvYWN0aW9ucy9VRERJSW1wb3J0V1NETFRvV29ya2JlbmNoQWN0aW9uSlNQLmpzcCIpOwotICAgZm9ybVByb3BlcnRpZXMucHV0KCJ3c2RsVVJMIix3c2RsVVJMKTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9JbXBvcnRUb1dvcmtiZW5jaEZvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1VERElMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvVURESUxhdW5jaFdlYlNlcnZpY2VXaXphcmRGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWZmYTI1Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvVURESUxhdW5jaFdlYlNlcnZpY2VXaXphcmRGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJmb3JtQWN0aW9uTGluayIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gICBmb3JtQWN0aW9uTGluay5hcHBlbmQoInVkZGkvYWN0aW9ucy9VRERJTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbkpTUC5qc3AiKTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9MYXVuY2hXZWJTZXJ2aWNlV2l6YXJkRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvVW5wdWJsaXNoRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvVW5wdWJsaXNoRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkMWRiMmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL1VucHVibGlzaEZvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsOTAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIFVERElNYWluTm9kZSB1ZGRpTWFpbk5vZGUgPSAoVURESU1haW5Ob2RlKW5hdmlnYXRvck1hbmFnZXIuZ2V0Um9vdE5vZGUoKTsKLSAgIFJlZ2lzdHJ5Tm9kZSByZWdOb2RlID0gdWRkaU1haW5Ob2RlLmdldFJlZ2lzdHJ5Tm9kZShuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpKTsKLSAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAKLSAgIEZvcm1Ub29sIHVucHVibGlzaFRvb2wgPSAoRm9ybVRvb2wpKG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCkuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotJT4KLQotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fVElUTEVfVU5QVUJMSVNIIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL2Zvcm1zdWJtaXQuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL3NjcmlwdHMvdWRkaXRhYmxlcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBmdW5jdGlvbiBzZXREZWZhdWx0cygpCi0gIHsKLTwlCi0gICBpZiAoIXJlZ0VsZW1lbnQuaXNMb2dnZWRJbigpKQotICAgewotJT4KLSAgICB2YXIgYXV0aGVudGljYXRpb25TZWN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInVucHVibGlzaEF1dGhlbnRpY2F0aW9uIik7Ci0gICAgYXV0aGVudGljYXRpb25TZWN0aW9uLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICB2YXIgZm9ybSA9IGRvY3VtZW50LmZvcm1zWzBdOwotICAgIGZvcm0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCU+LnZhbHVlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSgoU3RyaW5nKXVucHVibGlzaFRvb2wuZ2V0UHJvcGVydHkoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCkpJT4iOwotICAgIGZvcm0uPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQlPi52YWx1ZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoKFN0cmluZyl1bnB1Ymxpc2hUb29sLmdldFByb3BlcnR5KFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEKSklPiI7Ci0gICAgZm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEJT4udmFsdWUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpdW5wdWJsaXNoVG9vbC5nZXRQcm9wZXJ0eShVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEKSklPiI7ICAgIAotPCUKLSAgIH0KLSU+Ci0gIH0KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iIG9uVW5sb2FkPSJjbG9zZUFsbFVkZGlDaGlsZFdpbmRvd3MoKSI+Ci0gIDxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICAgIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnMvVW5wdWJsaXNoQWN0aW9uSlNQLmpzcCIpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBvblN1Ym1pdD0icmV0dXJuIGhhbmRsZVN1Ym1pdCh0aGlzKSI+Ci08JQotICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gdW5wdWJsaXNoVG9vbC5nZXRIaWdobGlnaHRlZEltYWdlTGluaygpOwotICAgU3RyaW5nIHRpdGxlID0gdW5wdWJsaXNoVG9vbC5nZXRBbHRUZXh0KCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotICAgIDx0YWJsZT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkPgotICAgICAgICAgIDwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1VOUFVCTElTSF9ERVNDIiklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotPCUKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLmNsZWFyKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRDb250YWluZXJJZCgidW5wdWJsaXNoQXV0aGVudGljYXRpb24iKTsKLSU+ICAgICAgIAotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL2F1dGhlbnRpY2F0aW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvc2ltcGxlQ29tbW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgPC9kaXY+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgc2V0RGVmYXVsdHMoKTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2FkdmFuY2VkQ29tbW9uX3RhYmxlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9hZHZhbmNlZENvbW1vbl90YWJsZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiZTg1M2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2FkdmFuY2VkQ29tbW9uX3RhYmxlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIE5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlIGZvcm1Ub29sUEkgPSAoRm9ybVRvb2xQcm9wZXJ0aWVzSW50ZXJmYWNlKShzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotJT4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgY29sc3Bhbj0zIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTUFYX1NFQVJDSF9TRVQiKSU+Ci08JQotICAgaWYgKCFmb3JtVG9vbFBJLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1NFUlZJQ0VfSU5URVJGQUNFX01BWF9TRUFSQ0hfU0VUKSkKLSAgIHsKLSU+Ci0gICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci08JQotICAgfQotJT4KLSAgICA8L3RkPgotICA8L3RyPgotICA8dHI+Ci0gICAgPHRkIGNvbHNwYW49Mz4KLSAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX01BWF9TRUFSQ0hfU0VUJT4iIGNsYXNzPSJzbXRleHRlbnRlciI+Ci0gICAgPC90ZD4KLSAgPC90cj4KLSAgPHRyPgotICAgIDx0ZCBjb2xzcGFuPTMgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9NQVhfUkVTVUxUUyIpJT4KLTwlCi0gICBpZiAoIWZvcm1Ub29sUEkuaXNJbnB1dFZhbGlkKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfTUFYX1JFU1VMVFMpKQotICAgewotJT4KLSAgICAgIDwlPUhUTUxVdGlscy5yZWRBc3RlcmlzaygpJT4KLTwlCi0gICB9Ci0lPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci0gIDx0cj4KLSAgICA8dGQgY29sc3Bhbj0zPgotICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTUFYX1JFU1VMVFMlPiIgY2xhc3M9InNtdGV4dGVudGVyIj4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9hdXRoZW50aWNhdGlvbl90YWJsZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvYXV0aGVudGljYXRpb25fdGFibGUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTc3OWM1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9hdXRoZW50aWNhdGlvbl90YWJsZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyNyAgIDEyNzQ0MyBqZXNwZXJAc2Vsc2thYmV0Lm9yZyAtIEplc3BlciBTIE1vbGxlcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLkFic3RyYWN0VURESUVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmRhdGFtb2RlbC5SZWdpc3RyeUVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLlRyZWVFbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic3ViUXVlcnlLZXlQcm9wZXJ0eSIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLlN1YlF1ZXJ5S2V5UHJvcGVydHkiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLVVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlciA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci1Ob2RlIHNlbGVjdGVkTm9kZSA9IG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci1UcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLUZvcm1Ub29sIGZvcm1Ub29sID0gKEZvcm1Ub29sKShzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotU3RyaW5nIHRhYmxlQ29udGFpbmVySWQgPSBzZWN0aW9uSGVhZGVySW5mby5nZXRDb250YWluZXJJZCgpOwotU3RyaW5nIHVzZXJuYW1lID0gbnVsbDsKLVN0cmluZyBwYXNzd29yZCA9IG51bGw7Ci1pZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgQWJzdHJhY3RVRERJRWxlbWVudCkKLXsKLSAgUmVnaXN0cnlFbGVtZW50IHJlZ0VsZW1lbnQgPSAoKEFic3RyYWN0VURESUVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50KS5nZXRSZWdpc3RyeUVsZW1lbnQoKTsKLSAgdXNlcm5hbWUgPSByZWdFbGVtZW50LmdldFVzZXJJZCgpOwotICBwYXNzd29yZCA9IHJlZ0VsZW1lbnQuZ2V0Q3JlZCgpOwotfQotaWYgKHVzZXJuYW1lID09IG51bGwpCi0gIHVzZXJuYW1lID0gIiI7Ci1pZiAocGFzc3dvcmQgPT0gbnVsbCkKLSAgcGFzc3dvcmQgPSAiIjsKLSU+Ci08ZGl2IGlkPSI8JT10YWJsZUNvbnRhaW5lcklkJT4iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICA8dHI+Ci0gICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTMwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgPGxhYmVsIGZvcj0iPCU9dGFibGVDb250YWluZXJJZCsiX2lucHV0X3B1Ymxpc2hfdXJsIiU+Ij48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9QVUJMSVNIX1VSTCIpJT48L2xhYmVsPgotICAgICAgICA8JQotICAgICAgICBpZiAoIWZvcm1Ub29sLmlzSW5wdXRWYWxpZChVRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMKSkKLSAgICAgICAgewotICAgICAgICAlPgotICAgICAgICAgIDwlPUhUTUxVdGlscy5yZWRBc3RlcmlzaygpJT4KLSAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgICAlPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4KLSAgICAgIDx0ZD48aW5wdXQgdHlwZT0idGV4dCIgaWQ9IjwlPXRhYmxlQ29udGFpbmVySWQrIl9pbnB1dF9wdWJsaXNoX3VybCIlPiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9QVUJMSVNIX1VSTCU+IiBjbGFzcz0idGV4dGVudGVyIj48L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPgotICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0zMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgIDxsYWJlbCBmb3I9IjwlPXRhYmxlQ29udGFpbmVySWQrIl9pbnB1dF91c2VyX2lkIiU+Ij48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9VU0VSSUQiKSU+PC9sYWJlbD4KLSAgICAgICAgPCUKLSAgICAgICAgaWYgKCFmb3JtVG9vbC5pc0lucHV0VmFsaWQoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9VU0VSSUQpKQotICAgICAgICB7Ci0gICAgICAgICU+Ci0gICAgICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotICAgICAgICA8JQotICAgICAgICB9Ci0gICAgICAgICU+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPgotICAgICAgPHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iPCU9dGFibGVDb250YWluZXJJZCsiX2lucHV0X3VzZXJfaWQiJT4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfVVNFUklEJT4iIHZhbHVlPSI8JT1IVE1MVXRpbHMuY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzU3RyaWN0KHVzZXJuYW1lKSU+IiBjbGFzcz0idGV4dGVudGVyIj48L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPgotICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0zMCB2YWxpZ249ImJvdHRvbSI+PGxhYmVsIGZvcj0iPCU9dGFibGVDb250YWluZXJJZCsiX2lucHV0X3Bhc3N3b3JkIiU+Ij48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9QQVNTV09SRCIpJT48L2xhYmVsPjwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHI+Ci0gICAgICA8dGQ+PGlucHV0IHR5cGU9InBhc3N3b3JkIiBpZD0iPCU9dGFibGVDb250YWluZXJJZCsiX2lucHV0X3Bhc3N3b3JkIiU+IiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BBU1NXT1JEJT4iIHZhbHVlPSI8JT1IVE1MVXRpbHMuY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzU3RyaWN0KHBhc3N3b3JkKSU+IiBjbGFzcz0idGV4dGVudGVyIj48L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9jYXRlZ29yaWVzX3RhYmxlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9jYXRlZ29yaWVzX3RhYmxlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTlmYmVlNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvY2F0ZWdvcmllc190YWJsZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIFN0cmluZyB0YWJsZUNvbnRhaW5lcklkID0gc2VjdGlvbkhlYWRlckluZm8uZ2V0Q29udGFpbmVySWQoKTsKLSAgIFN0cmluZ0J1ZmZlciB0d2lzdEltYWdlTmFtZSA9IG5ldyBTdHJpbmdCdWZmZXIoIngiKTsKLSAgIHR3aXN0SW1hZ2VOYW1lLmFwcGVuZCh0YWJsZUNvbnRhaW5lcklkKTsKLSU+Ci08dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT48YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT10YWJsZUNvbnRhaW5lcklkJT4nLCc8JT10d2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4nKSI+PGltZyBuYW1lPSI8JT10d2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RjbG9zZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfQ0xPU0VEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+PC90ZD4gCi0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxzdHJvbmc+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQ0FURUdPUklFUyIpJT48L3N0cm9uZz4KLSAgICA8L3RkPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmFkZENhdGVnb3J5Um93KCc8JT10YWJsZUNvbnRhaW5lcklkJT4nKSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19BREQiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6cmVtb3ZlU2VsZWN0ZWRDYXRlZ29yeVJvd3MoJzwlPXRhYmxlQ29udGFpbmVySWQlPicpIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX1JFTU9WRSIpJT48L2E+ICAKLSAgICA8L3RkPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgdmFsaWduPSJ0b3AiIGhlaWdodD0xMD48aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiPjwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotCi08ZGl2IGlkPSI8JT10YWJsZUNvbnRhaW5lcklkJT4iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgIDx0cj4KLSAgICAgIDx0aCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJoYW5kbGVDaGVja0FsbENsaWNrKCc8JT10YWJsZUNvbnRhaW5lcklkJT4nLHRoaXMpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX0FMTF9DSEVDS19CT1giKSU+Ij48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQ0FURUdPUllfVFlQRSIpJT48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfS0VZX05BTUUiKSU+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0tFWV9WQUxVRSIpJT48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0FDVElPTlMiKSU+PC90aD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPCUKLSAgIGlmICh0YWJsZUNvbnRhaW5lcklkLnN0YXJ0c1dpdGgoImZpbmRCdXNpbmVzc2VzIikpCi0gICB7Ly8gY29uZGl0aW9uIHRvIHR1cm4gb2ZmIGZvciBldmVyeXRoaW5nIG90aGVyIHRoYW4gZmluZCBieSBidXNpbmVzcyBzZWFyY2hlcy4KLSU+Ci0gIDx0YWJsZT4KLSAgICA8dHI+Ci0gICAgICA8dGQgaGVpZ2h0PTMwIHZhbGlnbj0iY2VudGVyIj4KLSAgICAgICAgPGxhYmVsIGZvcj0iYnVzaW5lc3NfY2F0ZWdvcmllcyI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQlVTSU5FU1NfQ0FURUdPUklFUyIpJT48L2xhYmVsPgotICAgICAgPC90ZD4KLSAgICAgIDx0ZCBoZWlnaHQ9MzAgdmFsaWduPSJjZW50ZXIiPgotICAgICAgICA8c2VsZWN0IGlkPSJidXNpbmVzc19jYXRlZ29yaWVzIiBjbGFzcz0ic2VsZWN0bGlzdCI+Ci0gICAgICAgICAgPG9wdGlvbj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fQlVTSU5FU1NFU19PTkxZIiklPgotICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjwlPUZpbmRRdWFsaWZpZXIuc2VydmljZVN1YnNldCU+Ij48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fU0VSVklDRVNfT05MWSIpJT4KLSAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI8JT1GaW5kUXVhbGlmaWVyLmNvbWJpbmVDYXRlZ29yeUJhZ3MlPiI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0JPVEgiKSU+Ci0gICAgICAgIDwvc2VsZWN0PgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPCUgICAKLSAgIH0KLSU+ICAgICAKLTwvZGl2PiAgCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvZGV0YWlsc0NhdGVnb3JpZXNfdGFibGUuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2RldGFpbHNDYXRlZ29yaWVzX3RhYmxlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGNhOTMyNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvZGV0YWlsc0NhdGVnb3JpZXNfdGFibGUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIFN0cmluZyB0YWJsZUNvbnRhaW5lcklkID0gc2VjdGlvbkhlYWRlckluZm8uZ2V0Q29udGFpbmVySWQoKTsKLSAgIFN0cmluZ0J1ZmZlciB0d2lzdEltYWdlTmFtZSA9IG5ldyBTdHJpbmdCdWZmZXIoIngiKTsKLSAgIHR3aXN0SW1hZ2VOYW1lLmFwcGVuZCh0YWJsZUNvbnRhaW5lcklkKTsKLSU+Ci08dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT48YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT10YWJsZUNvbnRhaW5lcklkJT4nLCc8JT10d2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4nKSI+PGltZyBuYW1lPSI8JT10d2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RjbG9zZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfQ0xPU0VEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+PC90ZD4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPHN0cm9uZz48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9DQVRFR09SSUVTIiklPjwvc3Ryb25nPgotICAgIDwvdGQ+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6YWRkRGV0YWlsc0NhdGVnb3J5Um93KCc8JT10YWJsZUNvbnRhaW5lcklkJT4nLHRydWUpIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0FERCIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpyZW1vdmVTZWxlY3RlZERldGFpbHNDYXRlZ29yeVJvd3MoJzwlPXRhYmxlQ29udGFpbmVySWQlPicpIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX1JFTU9WRSIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDplZGl0U2VsZWN0ZWREZXRhaWxzQ2F0ZWdvcnlSb3dzKCc8JT10YWJsZUNvbnRhaW5lcklkJT4nKSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19FRElUIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmNhbmNlbFNlbGVjdGVkRGV0YWlsc0NhdGVnb3J5Um93cygnPCU9dGFibGVDb250YWluZXJJZCU+JykiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfQ0FOQ0VMIiklPjwvYT4KLSAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotCi08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIHZhbGlnbj0idG9wIiBoZWlnaHQ9MTA+PGltZyBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2tleWxpbmUuZ2lmIikpJT4iIGhlaWdodD0yIHdpZHRoPSIxMDAlIj48L3RkPgotICA8L3RyPgotPC90YWJsZT4KLQotPGRpdiBpZD0iPCU9dGFibGVDb250YWluZXJJZCU+IiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gIDx0YWJsZSB3aWR0aD0iOTUlIiBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICA8dHI+Ci0gICAgICA8dGggY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25DbGljaz0iaGFuZGxlQ2hlY2tBbGxDbGljaygnPCU9dGFibGVDb250YWluZXJJZCU+Jyx0aGlzKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9BTExfQ0hFQ0tfQk9YIiklPiI+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0NBVEVHT1JZX1RZUEUiKSU+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0tFWV9OQU1FIiklPjwvdGg+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9LRVlfVkFMVUUiKSU+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9BQ1RJT05TIiklPjwvdGg+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLTwvZGl2PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2RldGFpbHNEaXNjb3ZlcnlVUkxzX3RhYmxlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9kZXRhaWxzRGlzY292ZXJ5VVJMc190YWJsZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmZjAyZWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2RldGFpbHNEaXNjb3ZlcnlVUkxzX3RhYmxlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBTdHJpbmcgdGFibGVDb250YWluZXJJZCA9IHNlY3Rpb25IZWFkZXJJbmZvLmdldENvbnRhaW5lcklkKCk7Ci0gICBTdHJpbmdCdWZmZXIgdHdpc3RJbWFnZU5hbWUgPSBuZXcgU3RyaW5nQnVmZmVyKCJ4Iik7Ci0gICBib29sZWFuIGhhc0Vycm9ycyA9ICgoQm9vbGVhbilzZWN0aW9uSGVhZGVySW5mby5nZXRPdGhlclByb3BlcnRpZXMoKSkuYm9vbGVhblZhbHVlKCk7Ci0gICB0d2lzdEltYWdlTmFtZS5hcHBlbmQodGFibGVDb250YWluZXJJZCk7Ci0lPgotPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+PGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9dGFibGVDb250YWluZXJJZCU+JywnPCU9dHdpc3RJbWFnZU5hbWUudG9TdHJpbmcoKSU+JykiPjxpbWcgbmFtZT0iPCU9dHdpc3RJbWFnZU5hbWUudG9TdHJpbmcoKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0Y2xvc2VkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX0NMT1NFRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPjwvdGQ+ICAKLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPHN0cm9uZz48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9ESVNDT1ZFUllVUkxTIiklPjwvc3Ryb25nPgotPCUKLSAgIGlmIChoYXNFcnJvcnMpCi0gICB7Ci0lPgotICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotPCUKLSAgIH0KLSU+ICAgICAgCi0gICAgPC90ZD4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDphZGREZXRhaWxzRGlzY292ZXJ5VVJMUm93KCc8JT10YWJsZUNvbnRhaW5lcklkJT4nLHRydWUpIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0FERCIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpyZW1vdmVTZWxlY3RlZERldGFpbHNEaXNjb3ZlcnlVUkxSb3dzKCc8JT10YWJsZUNvbnRhaW5lcklkJT4nKSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19SRU1PVkUiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6ZWRpdFNlbGVjdGVkRGV0YWlsc0Rpc2NvdmVyeVVSTFJvd3MoJzwlPXRhYmxlQ29udGFpbmVySWQlPicpIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0VESVQiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6Y2FuY2VsU2VsZWN0ZWREZXRhaWxzRGlzY292ZXJ5VVJMUm93cygnPCU9dGFibGVDb250YWluZXJJZCU+JykiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfQ0FOQ0VMIiklPjwvYT4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLQotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PTEwPjxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBoZWlnaHQ9MiB3aWR0aD0iMTAwJSI+PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTxkaXYgaWQ9IjwlPXRhYmxlQ29udGFpbmVySWQlPiIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICA8dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgPHRyPgotICAgICAgPHRoIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9ImhhbmRsZUNoZWNrQWxsQ2xpY2soJzwlPXRhYmxlQ29udGFpbmVySWQlPicsdGhpcykiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQUxMX0NIRUNLX0JPWCIpJT4iPjwvdGg+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9ESVNDT1ZFUllVUkwiKSU+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9BQ1RJT05TIiklPjwvdGg+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLTwvZGl2PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2RldGFpbHNJZGVudGlmaWVyc190YWJsZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvZGV0YWlsc0lkZW50aWZpZXJzX3RhYmxlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDhkOGNkZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvZGV0YWlsc0lkZW50aWZpZXJzX3RhYmxlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBTdHJpbmcgdGFibGVDb250YWluZXJJZCA9IHNlY3Rpb25IZWFkZXJJbmZvLmdldENvbnRhaW5lcklkKCk7Ci0gICBTdHJpbmdCdWZmZXIgdHdpc3RJbWFnZU5hbWUgPSBuZXcgU3RyaW5nQnVmZmVyKCJ4Iik7Ci0gICB0d2lzdEltYWdlTmFtZS5hcHBlbmQodGFibGVDb250YWluZXJJZCk7Ci0lPgotPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+PGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9dGFibGVDb250YWluZXJJZCU+JywnPCU9dHdpc3RJbWFnZU5hbWUudG9TdHJpbmcoKSU+JykiPjxpbWcgbmFtZT0iPCU9dHdpc3RJbWFnZU5hbWUudG9TdHJpbmcoKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0Y2xvc2VkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX0NMT1NFRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPjwvdGQ+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxzdHJvbmc+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfSURFTlRJRklFUlMiKSU+PC9zdHJvbmc+Ci0gICAgPC90ZD4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDphZGREZXRhaWxzSWRlbnRpZmllclJvdygnPCU9dGFibGVDb250YWluZXJJZCU+Jyx0cnVlKSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19BREQiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6cmVtb3ZlU2VsZWN0ZWREZXRhaWxzSWRlbnRpZmllclJvd3MoJzwlPXRhYmxlQ29udGFpbmVySWQlPicpIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX1JFTU9WRSIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDplZGl0U2VsZWN0ZWREZXRhaWxzSWRlbnRpZmllclJvd3MoJzwlPXRhYmxlQ29udGFpbmVySWQlPicpIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0VESVQiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6Y2FuY2VsU2VsZWN0ZWREZXRhaWxzSWRlbnRpZmllclJvd3MoJzwlPXRhYmxlQ29udGFpbmVySWQlPicpIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0NBTkNFTCIpJT48L2E+Ci0gICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLQotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PTEwPjxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBoZWlnaHQ9MiB3aWR0aD0iMTAwJSI+PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTxkaXYgaWQ9IjwlPXRhYmxlQ29udGFpbmVySWQlPiIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICA8dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgPHRyPgotICAgICAgPHRoIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9ImhhbmRsZUNoZWNrQWxsQ2xpY2soJzwlPXRhYmxlQ29udGFpbmVySWQlPicsdGhpcykiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQUxMX0NIRUNLX0JPWCIpJT4iPjwvdGg+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9JREVOVElGSUVSX1RZUEUiKSU+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0tFWV9OQU1FIiklPjwvdGg+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9LRVlfVkFMVUUiKSU+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9BQ1RJT05TIiklPjwvdGg+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLTwvZGl2PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2RldGFpbHNMYW5ndWFnZUlucHV0X3RhYmxlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9kZXRhaWxzTGFuZ3VhZ2VJbnB1dF90YWJsZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5NGYyYWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2RldGFpbHNMYW5ndWFnZUlucHV0X3RhYmxlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGoudXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBTdHJpbmcgdGFibGVDb250YWluZXJJZCA9IHNlY3Rpb25IZWFkZXJJbmZvLmdldENvbnRhaW5lcklkKCk7Ci0gICBTdHJpbmdbXSBvdGhlclByb3BlcnRpZXMgPSAoU3RyaW5nW10pc2VjdGlvbkhlYWRlckluZm8uZ2V0T3RoZXJQcm9wZXJ0aWVzKCk7Ci0gICBTdHJpbmdbXSB0aXRsZUtleXMgPSB7b3RoZXJQcm9wZXJ0aWVzWzBdLG90aGVyUHJvcGVydGllc1sxXX07Ci0gICBib29sZWFuIGhhc0Vycm9ycyA9IG90aGVyUHJvcGVydGllc1syXS5lcXVhbHMoQm9vbGVhbi5UUlVFLnRvU3RyaW5nKCkpOwotICAgU3RyaW5nQnVmZmVyIHR3aXN0SW1hZ2VOYW1lID0gbmV3IFN0cmluZ0J1ZmZlcigieCIpOwotICAgdHdpc3RJbWFnZU5hbWUuYXBwZW5kKHRhYmxlQ29udGFpbmVySWQpOwotJT4KLTx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPjxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPXRhYmxlQ29udGFpbmVySWQlPicsJzwlPXR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPicpIj48aW1nIG5hbWU9IjwlPXR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdGNsb3NlZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9DTE9TRUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT48L3RkPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8c3Ryb25nPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKHRpdGxlS2V5c1swXSklPjwvc3Ryb25nPgotPCUKLSAgIGlmIChoYXNFcnJvcnMpCi0gICB7Ci0lPgotICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotPCUKLSAgIH0KLSU+ICAgICAgCi0gICAgPC90ZD4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotPCUKLSAgIFN0cmluZyB0ZXh0Q29udHJvbFRpdGxlS2V5OwotICAgaWYgKHRpdGxlS2V5c1swXS5lcXVhbHMoIkZPUk1fTEFCRUxfTkFNRVMiKSkKLSAgICAgdGV4dENvbnRyb2xUaXRsZUtleSA9ICJGT1JNX0NPTlRST0xfVElUTEVfTkFNRV9URVhUX1ZBTFVFIjsKLSAgIGVsc2UKLSAgICAgdGV4dENvbnRyb2xUaXRsZUtleSA9ICJGT1JNX0NPTlRST0xfVElUTEVfREVTQ1JJUFRJT05fVEVYVF9WQUxVRSI7Ci0lPiAgICAgICAgIAotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDphZGREZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvdygnPCU9dGFibGVDb250YWluZXJJZCU+JywnPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKHRleHRDb250cm9sVGl0bGVLZXkpKSU+Jyx0cnVlKSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19BREQiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6cmVtb3ZlU2VsZWN0ZWREZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvd3MoJzwlPXRhYmxlQ29udGFpbmVySWQlPicpIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX1JFTU9WRSIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDplZGl0U2VsZWN0ZWREZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvd3MoJzwlPXRhYmxlQ29udGFpbmVySWQlPicpIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0VESVQiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6Y2FuY2VsU2VsZWN0ZWREZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvd3MoJzwlPXRhYmxlQ29udGFpbmVySWQlPicpIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0NBTkNFTCIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotCi08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIHZhbGlnbj0idG9wIiBoZWlnaHQ9MTA+PGltZyBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2tleWxpbmUuZ2lmIikpJT4iIGhlaWdodD0yIHdpZHRoPSIxMDAlIj48L3RkPgotICA8L3RyPgotPC90YWJsZT4KLQotPGRpdiBpZD0iPCU9dGFibGVDb250YWluZXJJZCU+IiBzdHlsZT0iZGlzcGxheTpub25lOyI+Ci0gIDx0YWJsZSB3aWR0aD0iOTUlIiBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICA8dHI+Ci0gICAgICA8dGggY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25DbGljaz0iaGFuZGxlQ2hlY2tBbGxDbGljaygnPCU9dGFibGVDb250YWluZXJJZCU+Jyx0aGlzKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9BTExfQ0hFQ0tfQk9YIiklPiI+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0xBTkdVQUdFIiklPjwvdGg+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSh0aXRsZUtleXNbMV0pJT48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0FDVElPTlMiKSU+PC90aD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvZGV0YWlsc1NpbmdsZUl0ZW1fdGFibGUuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2RldGFpbHNTaW5nbGVJdGVtX3RhYmxlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDFjN2NmZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvZGV0YWlsc1NpbmdsZUl0ZW1fdGFibGUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIFN0cmluZyB0YWJsZUNvbnRhaW5lcklkID0gc2VjdGlvbkhlYWRlckluZm8uZ2V0Q29udGFpbmVySWQoKTsKLSAgIFN0cmluZyBpdGVtSGVhZGVyID0gKFN0cmluZylzZWN0aW9uSGVhZGVySW5mby5nZXRPdGhlclByb3BlcnRpZXMoKTsKLSU+Ci08dGFibGU+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTIwPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPGRpdiBpZD0iPCU9dGFibGVDb250YWluZXJJZCU+Ij4KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgIDx0cj4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPWl0ZW1IZWFkZXIlPjwvdGg+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQUNUSU9OUyIpJT48L3RoPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9kaXNjb3ZlcnlVUkxzX3RhYmxlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9kaXNjb3ZlcnlVUkxzX3RhYmxlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDBlZWJjNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvZGlzY292ZXJ5VVJMc190YWJsZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgU3RyaW5nIHRhYmxlQ29udGFpbmVySWQgPSBzZWN0aW9uSGVhZGVySW5mby5nZXRDb250YWluZXJJZCgpOwotICAgYm9vbGVhbiBoYXNFcnJvcnMgPSAoKEJvb2xlYW4pc2VjdGlvbkhlYWRlckluZm8uZ2V0T3RoZXJQcm9wZXJ0aWVzKCkpLmJvb2xlYW5WYWx1ZSgpOwotICAgU3RyaW5nQnVmZmVyIHR3aXN0SW1hZ2VOYW1lID0gbmV3IFN0cmluZ0J1ZmZlcigieCIpOwotICAgdHdpc3RJbWFnZU5hbWUuYXBwZW5kKHRhYmxlQ29udGFpbmVySWQpOwotJT4KLTx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPjxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPXRhYmxlQ29udGFpbmVySWQlPicsJzwlPXR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPicpIj48aW1nIG5hbWU9IjwlPXR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdGNsb3NlZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9DTE9TRUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT48L3RkPiAgCi0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxzdHJvbmc+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfRElTQ09WRVJZVVJMUyIpJT48L3N0cm9uZz4KLTwlCi0gICBpZiAoaGFzRXJyb3JzKQotICAgewotJT4KLSAgICAgIDwlPUhUTUxVdGlscy5yZWRBc3RlcmlzaygpJT4KLTwlCi0gICB9Ci0lPiAgICAgICAgICAgICAgICAgIAotICAgIDwvdGQ+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6YWRkRGlzY292ZXJ5VVJMUm93KCc8JT10YWJsZUNvbnRhaW5lcklkJT4nKSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19BREQiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6cmVtb3ZlU2VsZWN0ZWRSb3dzKCc8JT10YWJsZUNvbnRhaW5lcklkJT4nKSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19SRU1PVkUiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLQotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PTEwPjxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBoZWlnaHQ9MiB3aWR0aD0iMTAwJSI+PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTxkaXYgaWQ9IjwlPXRhYmxlQ29udGFpbmVySWQlPiIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICA8dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgPHRyPgotICAgICAgPHRoIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9ImhhbmRsZUNoZWNrQWxsQ2xpY2soJzwlPXRhYmxlQ29udGFpbmVySWQlPicsdGhpcykiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQUxMX0NIRUNLX0JPWCIpJT4iPjwvdGg+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9ESVNDT1ZFUllVUkwiKSU+PC90aD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvZmluZFF1YWxpZmllcnNfdGFibGUuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2ZpbmRRdWFsaWZpZXJzX3RhYmxlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI2NmNhNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvZmluZFF1YWxpZmllcnNfdGFibGUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudWRkaTRqLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgU3RyaW5nIHRhYmxlQ29udGFpbmVySWQgPSBzZWN0aW9uSGVhZGVySW5mby5nZXRDb250YWluZXJJZCgpOwotICAgU3RyaW5nQnVmZmVyIHR3aXN0SW1hZ2VOYW1lID0gbmV3IFN0cmluZ0J1ZmZlcigieCIpOwotICAgdHdpc3RJbWFnZU5hbWUuYXBwZW5kKHRhYmxlQ29udGFpbmVySWQpOyAgIAotJT4KLTx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPjxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPXRhYmxlQ29udGFpbmVySWQlPicsJzwlPXR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPicpIj48aW1nIG5hbWU9IjwlPXR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdGNsb3NlZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9DTE9TRUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT48L3RkPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+PHN0cm9uZz48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9GSU5EUVVBTElGSUVSUyIpJT48L3N0cm9uZz48L3RkPgotICA8L3RyPgotPC90YWJsZT4KLQotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PTEwPjxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBoZWlnaHQ9MiB3aWR0aD0iMTAwJSI+PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTxkaXYgaWQ9IjwlPXRhYmxlQ29udGFpbmVySWQlPiIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICA8dGFibGU+Ci0gICAgPHRyPgotICAgICAgPHRkPjxsYWJlbCBmb3I9ImNvbWJpbmVfa2V5cyI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQ09NQklORV9LRVlTIiklPjwvbGFiZWw+PC90ZD4KLSAgICAgIDx0ZD4KLSAgICAgICAgPHNlbGVjdCBpZD0iY29tYmluZV9rZXlzIiBjbGFzcz0ic2VsZWN0bGlzdCI+Ci0gICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iPCU9RmluZFF1YWxpZmllci5hbmRBbGxLZXlzJT4iPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9BTkRBTExLRVlTIiklPgotICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjwlPUZpbmRRdWFsaWZpZXIub3JBbGxLZXlzJT4iPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9PUkFMTEtFWVMiKSU+Ci0gICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iPCU9RmluZFF1YWxpZmllci5vckxpa2VLZXlzJT4iPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9PUkxJS0VLRVlTIiklPgotICAgICAgICA8L3NlbGVjdD4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHI+Ci0gICAgICA8dGQ+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfU09SVF9CWV9OQU1FIiklPjwvdGQ+Ci0gICAgICA8dGQ+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgaWQ9ImFkdmFuY2Vfc29ydF9ieV9uYW1lX2FzYyIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TT1JUX0JZX05BTUUlPiIgdmFsdWU9IjwlPUZpbmRRdWFsaWZpZXIuc29ydEJ5TmFtZUFzYyU+IiBjaGVja2VkPjxsYWJlbCBmb3I9ImFkdmFuY2Vfc29ydF9ieV9uYW1lX2FzYyI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fUkFESU9fU09SVF9BU0MiKSU+PC9sYWJlbD4KLSAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBpZD0iYWR2YW5jZV9zb3J0X2J5X25hbWVfZGVzYyIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TT1JUX0JZX05BTUUlPiIgdmFsdWU9IjwlPUZpbmRRdWFsaWZpZXIuc29ydEJ5TmFtZURlc2MlPiI+PGxhYmVsIGZvcj0iYWR2YW5jZV9zb3J0X2J5X25hbWVfZGVzYyI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fUkFESU9fU09SVF9ERVNDIiklPjwvbGFiZWw+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPgotICAgICAgPHRkPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1NPUlRfQllfREFURSIpJT48L3RkPgotICAgICAgPHRkPgotICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIGlkPSJhZHZhbmNlX3NvcnRfYnlfZGF0ZV9hc2MiIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU09SVF9CWV9EQVRFJT4iIHZhbHVlPSI8JT1GaW5kUXVhbGlmaWVyLnNvcnRCeURhdGVBc2MlPiIgY2hlY2tlZD48bGFiZWwgZm9yPSJhZHZhbmNlX3NvcnRfYnlfZGF0ZV9hc2MiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1JBRElPX1NPUlRfQVNDIiklPjwvbGFiZWw+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgaWQ9ImFkdmFuY2Vfc29ydF9ieV9kYXRlX2Rlc2MiIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU09SVF9CWV9EQVRFJT4iIHZhbHVlPSI8JT1GaW5kUXVhbGlmaWVyLnNvcnRCeURhdGVEZXNjJT4iPjxsYWJlbCBmb3I9ImFkdmFuY2Vfc29ydF9ieV9kYXRlX2Rlc2MiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1JBRElPX1NPUlRfREVTQyIpJT48L2xhYmVsPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvZmluZGZvcm1oZWFkZXIuaW5jIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2ZpbmRmb3JtaGVhZGVyLmluYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzNmOTAxYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvZmluZGZvcm1oZWFkZXIuaW5jCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkPgotICAgICAgPGltZyBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCh0aXRsZUltYWdlUGF0aCkpJT4iPgotICAgICAgPHN0cm9uZz48JT10aXRsZSU+PC9zdHJvbmc+Ci0gICAgPC90ZD4KLSAgICA8dGQgd2lkdGg9IioiPiZuYnNwOzwvdGQ+Ci08JQotICAgaW50IGNvbHNwYW4gPSAyOwotICAgaWYgKHN1YlF1ZXJ5S2V5ICE9IG51bGwgJiYgc3ViUXVlcnlLZXkubGVuZ3RoKCkgPiAwKQotICAgewotICAgICBpbnQgbm9kZUlkID0gc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpOwotICAgICBpbnQgdG9vbElkID0gZm9ybVRvb2wuZ2V0VG9vbElkKCk7Ci0gICAgIGludCB2aWV3SWQgPSBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCk7Ci0gICAgIGludCB2aWV3VG9vbElkID0gc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sSWQoKTsKLSAgICAgaW50IGNvdW50ID0gMTsKLSU+Ci0gICAgPHRkIGFsaWduPSJyaWdodCI+Ci0gICAgICA8YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoU2VsZWN0RmluZFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWQsdG9vbElkLHZpZXdJZCx2aWV3VG9vbElkLCIiLGZhbHNlKSkpJT4iPjwlPWNvdW50JT48L2E+Ci0gICAgPC90ZD4KLTwlCi0gICAgIFN0cmluZyBjdXJyZW50U3ViUXVlcnlLZXkgPSBzdWJRdWVyeUtleTsKLSAgICAgaW50IHNlcGFyYXRvclBvcyA9IC0xOwotICAgICB3aGlsZSAoKHNlcGFyYXRvclBvcyA9IGN1cnJlbnRTdWJRdWVyeUtleS5pbmRleE9mKCc6JykpICE9IC0xKQotICAgICB7Ci0gICAgICAgY291bnQrKzsKLSU+Ci0gICAgPHRkIGFsaWduPSJyaWdodCI+Ci0gICAgICA8YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoU2VsZWN0RmluZFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhub2RlSWQsdG9vbElkLHZpZXdJZCx2aWV3VG9vbElkLGN1cnJlbnRTdWJRdWVyeUtleS5zdWJzdHJpbmcoMCxzZXBhcmF0b3JQb3MpLGZhbHNlKSkpJT4iPjwlPWNvdW50JT48L2E+Ci0gICAgPC90ZD4gICAgICAKLTwlICAgCi0gICAgICAgY3VycmVudFN1YlF1ZXJ5S2V5ID0gY3VycmVudFN1YlF1ZXJ5S2V5LnN1YnN0cmluZyhzZXBhcmF0b3JQb3MrMSxjdXJyZW50U3ViUXVlcnlLZXkubGVuZ3RoKCkpOwotICAgICB9Ci0gICAgIGNvbHNwYW4gKz0gY291bnQ7Ci0gICB9Ci0lPiAgICAKLSAgPC90cj4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjAgY29sc3Bhbj08JT1jb2xzcGFuJT4+IDxpbWcgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiIGFsaWduPSJ0b3AiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiI+IDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2lkZW50aWZpZXJzX3RhYmxlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9pZGVudGlmaWVyc190YWJsZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyOTk1ZjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2lkZW50aWZpZXJzX3RhYmxlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBTdHJpbmcgdGFibGVDb250YWluZXJJZCA9IHNlY3Rpb25IZWFkZXJJbmZvLmdldENvbnRhaW5lcklkKCk7Ci0gICBTdHJpbmdCdWZmZXIgdHdpc3RJbWFnZU5hbWUgPSBuZXcgU3RyaW5nQnVmZmVyKCJ4Iik7Ci0gICB0d2lzdEltYWdlTmFtZS5hcHBlbmQodGFibGVDb250YWluZXJJZCk7ICAgCi0lPgotPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+PGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9dGFibGVDb250YWluZXJJZCU+JywnPCU9dHdpc3RJbWFnZU5hbWUudG9TdHJpbmcoKSU+JykiPjxpbWcgbmFtZT0iPCU9dHdpc3RJbWFnZU5hbWUudG9TdHJpbmcoKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0Y2xvc2VkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX0NMT1NFRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPjwvdGQ+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxzdHJvbmc+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfSURFTlRJRklFUlMiKSU+PC9zdHJvbmc+Ci0gICAgPC90ZD4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDphZGRJZGVudGlmaWVyUm93KCc8JT10YWJsZUNvbnRhaW5lcklkJT4nKSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19BREQiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6cmVtb3ZlU2VsZWN0ZWRSb3dzKCc8JT10YWJsZUNvbnRhaW5lcklkJT4nKSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19SRU1PVkUiKSU+PC9hPiAgCi0gICAgPC90ZD4KLSAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotCi08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIHZhbGlnbj0idG9wIiBoZWlnaHQ9MTA+PGltZyBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2tleWxpbmUuZ2lmIikpJT4iIGhlaWdodD0yIHdpZHRoPSIxMDAlIj48L3RkPgotICA8L3RyPgotPC90YWJsZT4KLSAgICAKLTxkaXYgaWQ9IjwlPXRhYmxlQ29udGFpbmVySWQlPiIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICA8dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgPHRyPgotICAgICAgPHRoIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9ImhhbmRsZUNoZWNrQWxsQ2xpY2soJzwlPXRhYmxlQ29udGFpbmVySWQlPicsdGhpcykiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQUxMX0NIRUNLX0JPWCIpJT4iPjwvdGg+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9JREVOVElGSUVSX1RZUEUiKSU+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0tFWV9OQU1FIiklPjwvdGg+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9LRVlfVkFMVUUiKSU+PC90aD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvbGFuZ3VhZ2VJbnB1dF90YWJsZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvbGFuZ3VhZ2VJbnB1dF90YWJsZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0NTMyMTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2xhbmd1YWdlSW5wdXRfdGFibGUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnVkZGk0ai51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSAgIFN0cmluZyB0YWJsZUNvbnRhaW5lcklkID0gc2VjdGlvbkhlYWRlckluZm8uZ2V0Q29udGFpbmVySWQoKTsKLSAgIFN0cmluZ1tdIG90aGVyUHJvcGVydGllcyA9IChTdHJpbmdbXSlzZWN0aW9uSGVhZGVySW5mby5nZXRPdGhlclByb3BlcnRpZXMoKTsKLSAgIFN0cmluZ1tdIHRpdGxlS2V5cyA9IHtvdGhlclByb3BlcnRpZXNbMF0sb3RoZXJQcm9wZXJ0aWVzWzFdfTsKLSAgIGJvb2xlYW4gaGFzRXJyb3JzID0gb3RoZXJQcm9wZXJ0aWVzWzJdLmVxdWFscyhCb29sZWFuLlRSVUUudG9TdHJpbmcoKSk7Ci0gICBib29sZWFuIGlzRmluZCA9IHRhYmxlQ29udGFpbmVySWQuc3RhcnRzV2l0aCgiZmluZCIpOwotICAgU3RyaW5nQnVmZmVyIHR3aXN0SW1hZ2VOYW1lID0gbmV3IFN0cmluZ0J1ZmZlcigieCIpOwotICAgdHdpc3RJbWFnZU5hbWUuYXBwZW5kKHRhYmxlQ29udGFpbmVySWQpOwotJT4KLTx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPjxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPXRhYmxlQ29udGFpbmVySWQlPicsJzwlPXR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPicpIj48aW1nIG5hbWU9IjwlPXR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdGNsb3NlZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9DTE9TRUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT48L3RkPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8c3Ryb25nPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKHRpdGxlS2V5c1swXSklPjwvc3Ryb25nPgotPCUKLSAgIGlmIChoYXNFcnJvcnMpCi0gICB7Ci0lPgotICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotPCUKLSAgIH0KLSU+Ci0gICAgPC90ZD4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotPCUKLSAgIFN0cmluZyB0ZXh0Q29udHJvbFRpdGxlS2V5OwotICAgaWYgKHRpdGxlS2V5c1swXS5lcXVhbHMoIkZPUk1fTEFCRUxfTkFNRVMiKSkKLSAgICAgdGV4dENvbnRyb2xUaXRsZUtleSA9ICJGT1JNX0NPTlRST0xfVElUTEVfTkFNRV9URVhUX1ZBTFVFIjsKLSAgIGVsc2UKLSAgICAgdGV4dENvbnRyb2xUaXRsZUtleSA9ICJGT1JNX0NPTlRST0xfVElUTEVfREVTQ1JJUFRJT05fVEVYVF9WQUxVRSI7Ci0lPiAgICAgICAKLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6YWRkTGFuZ3VhZ2VJbnB1dFJvdygnPCU9dGFibGVDb250YWluZXJJZCU+JywnPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKHRleHRDb250cm9sVGl0bGVLZXkpKSU+JykiPgotICAgICAgICA8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0FERCIpJT4KLSAgICAgIDwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnJlbW92ZVNlbGVjdGVkUm93cygnPCU9dGFibGVDb250YWluZXJJZCU+JykiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfUkVNT1ZFIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgdmFsaWduPSJ0b3AiIGhlaWdodD0xMD48aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiPjwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotCi08ZGl2IGlkPSI8JT10YWJsZUNvbnRhaW5lcklkJT4iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgIDx0cj4KLSAgICAgIDx0aCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJoYW5kbGVDaGVja0FsbENsaWNrKCc8JT10YWJsZUNvbnRhaW5lcklkJT4nLHRoaXMpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX0FMTF9DSEVDS19CT1giKSU+Ij48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTEFOR1VBR0UiKSU+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKHRpdGxlS2V5c1sxXSklPjwvdGg+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLTwlIAotICAgaWYgKGlzRmluZCkKLSAgIHsvLyBjb25kaXRpb24gdG8gdHVybiBvZmYgd2hlbiBwdWJsaXNoaW5nIHRvIGNvbWUuCi0lPiAgICAgCi08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvbmFtZXNfZmluZFF1YWxpZmllcnNfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgIH0KLSU+ICAgICAKLTwvZGl2PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2xvZ2luX2F1dGhlbnRpY2F0aW9uX3RhYmxlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9sb2dpbl9hdXRoZW50aWNhdGlvbl90YWJsZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyYThjNWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL2xvZ2luX2F1dGhlbnRpY2F0aW9uX3RhYmxlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDI3ICAgMTM2NDQ5IGJydW5zc2VuQHVzLmlibS5jb20gLSBWaW5jZSBCcnVuc3NlbiAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5kYXRhbW9kZWwuQWJzdHJhY3RVRERJRWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLlJlZ2lzdHJ5RWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi1VRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLU5vZGVNYW5hZ2VyIG5hdmlnYXRvck1hbmFnZXIgPSB1ZGRpUGVyc3BlY3RpdmUuZ2V0TmF2aWdhdG9yTWFuYWdlcigpOwotTm9kZSBzZWxlY3RlZE5vZGUgPSBuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0KLVJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKChBYnN0cmFjdFVERElFbGVtZW50KXNlbGVjdGVkRWxlbWVudCkuZ2V0UmVnaXN0cnlFbGVtZW50KCk7Ci1TdHJpbmcgdXNlcm5hbWUgPSByZWdFbGVtZW50LmdldFVzZXJJZCgpOwotU3RyaW5nIHBhc3N3b3JkID0gcmVnRWxlbWVudC5nZXRDcmVkKCk7Ci1TdHJpbmcgcHVibGlzaFVSTCA9IHJlZ0VsZW1lbnQuZ2V0UHVibGlzaFVSTCgpOwotCi1pZiAodXNlcm5hbWUgPT0gbnVsbCkgewotCXVzZXJuYW1lID0gIiI7Ci19Ci0KLWlmIChwYXNzd29yZCA9PSBudWxsKSB7Ci0JcGFzc3dvcmQgPSAiIjsKLX0KLQotaWYgKHB1Ymxpc2hVUkwgPT0gbnVsbCkgewotCXB1Ymxpc2hVUkwgPSAiIjsKLX0KLQotJT4KLSAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9PV05FRCU+IiB2YWx1ZT0idHJ1ZSIvPgotICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX05BTUUlPiIgdmFsdWU9IlF1ZXJ5IFJlc3VsdHMiLz4KLSAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9NQVhfU0VBUkNIX1NFVCU+IiB2YWx1ZT0iMTAwIi8+Ci0gIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfTUFYX1JFU1VMVFMlPiIgdmFsdWU9IjEwIi8+Ci0gIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgPHRyPgotICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0zMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICA8bGFiZWw+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUFVCTElTSF9VUkwiKSU+PC9sYWJlbD4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHI+Ci0gICAgICAgPHRkPgotICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1BVQkxJU0hfVVJMJT4iIHZhbHVlPSI8JT1wdWJsaXNoVVJMJT4iIGNsYXNzPSJ0ZXh0ZW50ZXIiLz4KLSAgICAgICA8L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPgotICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0zMCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgIDxsYWJlbD48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9VU0VSSUQiKSU+PC9sYWJlbD4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHI+Ci0gICAgICA8dGQ+PGlucHV0IHR5cGU9InRleHQiIHZhbHVlPSI8JT11c2VybmFtZSU+IiBuYW1lPSI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX1VTRVJJRCU+IiBjbGFzcz0idGV4dGVudGVyIi8+PC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4KLSAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MzAgdmFsaWduPSJib3R0b20iPjxsYWJlbD48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9QQVNTV09SRCIpJT48L2xhYmVsPjwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHI+Ci0gICAgICA8dGQ+PGlucHV0IHR5cGU9InBhc3N3b3JkIiB2YWx1ZSA9IjwlPXBhc3N3b3JkJT4iIG5hbWU9IjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfUEFTU1dPUkQlPiIgY2xhc3M9InRleHRlbnRlciIvPjwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9uYW1lc19maW5kUXVhbGlmaWVyc190YWJsZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvbmFtZXNfZmluZFF1YWxpZmllcnNfdGFibGUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0M2VlNjhiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9uYW1lc19maW5kUXVhbGlmaWVyc190YWJsZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLnVkZGk0ai51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTx0YWJsZT4KLSAgPHRyPgotICAgIDx0ZD4KLSAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImZpbmRfcXVhbGlmaWVyX2V4YWN0X25hbWVfbWF0Y2giIHZhbHVlPSI8JT1GaW5kUXVhbGlmaWVyLmV4YWN0TmFtZU1hdGNoJT4iPjxsYWJlbCBmb3I9ImZpbmRfcXVhbGlmaWVyX2V4YWN0X25hbWVfbWF0Y2giPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0VYQUNUX05BTUVfTUFUQ0giKSU+PC9sYWJlbD4KLSAgICA8L3RkPgotICA8L3RyPgotICA8dHI+Ci0gICAgPHRkPgotICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iZmluZF9xdWFsaWZpZXJfY2FzZV9zZW5zaXRpdmVfbWF0Y2giIHZhbHVlPSI8JT1GaW5kUXVhbGlmaWVyLmNhc2VTZW5zaXRpdmVNYXRjaCU+Ij48bGFiZWwgZm9yPSJmaW5kX3F1YWxpZmllcl9jYXNlX3NlbnNpdGl2ZV9tYXRjaCI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQ0FTRV9TRU5TSVRJVkVfTUFUQ0giKSU+PC9sYWJlbD4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9yZXN1bHRzX3RhYmxlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy9yZXN1bHRzX3RhYmxlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRiNzgyZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvcmVzdWx0c190YWJsZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgU3RyaW5nIHRhYmxlQ29udGFpbmVySWQgPSBzZWN0aW9uSGVhZGVySW5mby5nZXRDb250YWluZXJJZCgpOwotICAgU3RyaW5nW10gc3BlY2lmaWNJbmZvID0gKFN0cmluZ1tdKXNlY3Rpb25IZWFkZXJJbmZvLmdldE90aGVyUHJvcGVydGllcygpOwotICAgU3RyaW5nIHRpdGxlID0gc3BlY2lmaWNJbmZvWzBdOwotICAgU3RyaW5nIHBhcmVudENvbnRhaW5lcklkID0gc3BlY2lmaWNJbmZvWzFdOwotICAgU3RyaW5nQnVmZmVyIHR3aXN0SW1hZ2VOYW1lID0gbmV3IFN0cmluZ0J1ZmZlcigieCIpOwotICAgdHdpc3RJbWFnZU5hbWUuYXBwZW5kKHRhYmxlQ29udGFpbmVySWQpOwotJT4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPjxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPXRhYmxlQ29udGFpbmVySWQlPicsJzwlPXR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPicpIj48aW1nIG5hbWU9IjwlPXR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdGNsb3NlZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9DTE9TRUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT48L3RkPgotICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8c3Ryb25nPjwlPXRpdGxlJT48L3N0cm9uZz4KLSAgICA8L3RkPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgdmFsaWduPSJ0b3AiIGhlaWdodD0xMD48aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiPjwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotCi08ZGl2IGlkPSI8JT10YWJsZUNvbnRhaW5lcklkJT4iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgIDx0cj4KLSAgICAgIDx0aCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJoYW5kbGVDaGVja0FsbENsaWNrKCc8JT10YWJsZUNvbnRhaW5lcklkJT4nLHRoaXMpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX0FMTF9DSEVDS19CT1giKSU+Ij48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTkFNRSIpJT48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfREVTQ1JJUFRJT04iKSU+PC90aD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvcmVzdWx0c2Zvcm1oZWFkZXIuaW5jIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL3Jlc3VsdHNmb3JtaGVhZGVyLmluYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjAzNzBlMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvcmVzdWx0c2Zvcm1oZWFkZXIuaW5jCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KHRpdGxlSW1hZ2VQYXRoKSklPiI+Ci0gICAgICA8c3Ryb25nPjwlPXRpdGxlJT48L3N0cm9uZz4KLSAgICA8L3RkPgotPCUKLSAgIGludCBjb2xzcGFuID0gMTsKLSAgIGlmIChoYXNUYXJnZXQpCi0gICB7Ci0gICAgIFN0cmluZyByZXR1cm5MaW5rID0gVHJhbnNmZXJTdWJRdWVyeVJlc3VsdHNBY3Rpb24uZ2V0QWN0aW9uTGlua0ZvclJldHVybigpOwotJT4KLSAgICA8dGQgbm93cmFwIHdpZHRoPSIqIj4mbmJzcDs8L3RkPgotICAgIDx0ZCBhbGlnbj0icmlnaHQiIG5vd3JhcD4KLSAgICAgIDxhIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChyZXR1cm5MaW5rKSklPiIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfVEFSR0VUIiklPjwvYT4KLSAgICA8L3RkPgotPCUKLSAgICAgY29sc3BhbiArPSAyOwotICAgfQotJT4KLSAgPC90cj4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjAgY29sc3Bhbj08JT1jb2xzcGFuJT4+IDxpbWcgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiIGFsaWduPSJ0b3AiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiI+IDwvdGQ+Ci0gIDwvdHI+Ci0gIDx0cj4KLSAgICA8dGQgY29sc3Bhbj08JT1jb2xzcGFuJT4+Ci08JQotICAgaWYgKGhhc1RhcmdldCkKLSAgIHsKLSU+Ci08JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9TVUJRVUVSWSIpJT4KLTwlCi0gICB9Ci0lPgotPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUVVFUlkiKSU+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvdWRfY2F0ZWdvcmllc190YWJsZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvdWRfY2F0ZWdvcmllc190YWJsZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjMzFhN2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL3VkX2NhdGVnb3JpZXNfdGFibGUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGoudXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBTdHJpbmcgdGFibGVDb250YWluZXJJZCA9IHNlY3Rpb25IZWFkZXJJbmZvLmdldENvbnRhaW5lcklkKCk7Ci0gICBTdHJpbmdCdWZmZXIgdHdpc3RJbWFnZU5hbWUgPSBuZXcgU3RyaW5nQnVmZmVyKCJ4Iik7Ci0gICB0d2lzdEltYWdlTmFtZS5hcHBlbmQodGFibGVDb250YWluZXJJZCk7Ci0lPgotPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+PGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9dGFibGVDb250YWluZXJJZCU+JywnPCU9dHdpc3RJbWFnZU5hbWUudG9TdHJpbmcoKSU+JykiPjxpbWcgbmFtZT0iPCU9dHdpc3RJbWFnZU5hbWUudG9TdHJpbmcoKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0b3BlbmVkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX09QRU5FRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPjwvdGQ+IAotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8c3Ryb25nPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1VTRVJfREVGSU5FRF9DQVRFR09SSUVTIiklPjwvc3Ryb25nPgotICAgIDwvdGQ+Ci0gICAgPCEtLQotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmVkaXRTZWxlY3RlZERldGFpbHNVc2VyRGVmaW5lZENhdGVnb3J5Um93cygnPCU9dGFibGVDb250YWluZXJJZCU+JykiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfRURJVCIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpjYW5jZWxTZWxlY3RlZERldGFpbHNVc2VyRGVmaW5lZENhdGVnb3J5Um93cygnPCU9dGFibGVDb250YWluZXJJZCU+JykiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfQ0FOQ0VMIiklPjwvYT4KLSAgICA8L3RkPgotICAgIC0tPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgdmFsaWduPSJ0b3AiIGhlaWdodD0xMD48aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiPjwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotCi08ZGl2IGlkPSI8JT10YWJsZUNvbnRhaW5lcklkJT4iIHN0eWxlPSJkaXNwbGF5OicnOyI+Ci0gIDx0YWJsZSB3aWR0aD0iOTUlIiBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICA8dHI+Ci0gICAgICA8IS0tCi0gICAgICA8dGggY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25DbGljaz0iaGFuZGxlQ2hlY2tBbGxDbGljaygnPCU9dGFibGVDb250YWluZXJJZCU+Jyx0aGlzKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9BTExfQ0hFQ0tfQk9YIiklPiI+PC90aD4KLSAgICAgIC0tPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciIgd2lkdGg9IjE1JSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTkFNRSIpJT48L3RoPgotICAgICAgPCEtLQotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciIgd2lkdGg9IjEwJSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQ0hFQ0tFRCIpJT48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciIgd2lkdGg9IjcwJSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfRklMRSIpJT48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciIgd2lkdGg9IioiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9BQ1RJT05TIiklPjwvdGg+Ci0gICAgICAtLT4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPC9kaXY+ICAKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy91ZGRpT2JqZWN0c1B1Ymxpc2hlckFzc2VydGlvbnNfdGFibGUuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL3VkZGlPYmplY3RzUHVibGlzaGVyQXNzZXJ0aW9uc190YWJsZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlZWZmZGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2Zvcm1zL3VkZGlPYmplY3RzUHVibGlzaGVyQXNzZXJ0aW9uc190YWJsZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLkJ1c2luZXNzRWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgU3RyaW5nIHRhYmxlQ29udGFpbmVySWQgPSBzZWN0aW9uSGVhZGVySW5mby5nZXRDb250YWluZXJJZCgpOwotICAgU3RyaW5nW10gc3BlY2lmaWNJbmZvID0gKFN0cmluZ1tdKXNlY3Rpb25IZWFkZXJJbmZvLmdldE90aGVyUHJvcGVydGllcygpOwotICAgU3RyaW5nIHRhYmxlVGl0bGVLZXkgPSBzcGVjaWZpY0luZm9bMF07Ci0gICBib29sZWFuIGhhc0Vycm9ycyA9IHNwZWNpZmljSW5mb1sxXS5lcXVhbHMoQm9vbGVhbi5UUlVFLnRvU3RyaW5nKCkpOwotICAgU3RyaW5nIHF1ZXJ5SXRlbVN0cmluZyA9IHNwZWNpZmljSW5mb1syXTsKLSAgIFN0cmluZyBwYXJlbnRDb250YWluZXJJZCA9IHNwZWNpZmljSW5mb1szXTsKLSAgIFN0cmluZyB0cmFuc2ZlclRhcmdldEtleSA9IHNwZWNpZmljSW5mb1s0XTsKLSAgIFN0cmluZ0J1ZmZlciB0d2lzdEltYWdlTmFtZSA9IG5ldyBTdHJpbmdCdWZmZXIoIngiKTsKLSAgIHR3aXN0SW1hZ2VOYW1lLmFwcGVuZCh0YWJsZUNvbnRhaW5lcklkKTsKLSU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT48YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT10YWJsZUNvbnRhaW5lcklkJT4nLCc8JT10d2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4nKSI+PGltZyBuYW1lPSI8JT10d2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RjbG9zZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfQ0xPU0VEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+PC90ZD4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPHN0cm9uZz48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSh0YWJsZVRpdGxlS2V5KSU+PC9zdHJvbmc+Ci08JQotICAgaWYgKGhhc0Vycm9ycykKLSAgIHsKLSU+Ci0gICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci08JQotICAgfQotJT4gICAgICAgICAKLSAgICA8L3RkPgotPCUKLSAgIGlmIChzZWN0aW9uSGVhZGVySW5mby5pc0R5bmFtaWMoKSkKLSAgIHsKLSU+ICAgICAgIAotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmluaXRpYXRlU3ViUXVlcnkoJzwlPXBhcmVudENvbnRhaW5lcklkJT4nLCc8JT10cmFuc2ZlclRhcmdldEtleSU+Jyw8JT1xdWVyeUl0ZW1TdHJpbmclPix0cnVlKSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19HRVQiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6aW5pdGlhdGVTdWJRdWVyeSgnPCU9cGFyZW50Q29udGFpbmVySWQlPicsJzwlPXRyYW5zZmVyVGFyZ2V0S2V5JT4nLDwlPXF1ZXJ5SXRlbVN0cmluZyU+LGZhbHNlKSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19GSU5EIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnJlbW92ZVNlbGVjdGVkUm93cygnPCU9dGFibGVDb250YWluZXJJZCU+JykiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfUkVNT1ZFIiklPjwvYT4KLSAgICA8L3RkPgotPCUKLSAgIH0KLSU+ICAgICAgIAotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgdmFsaWduPSJ0b3AiIGhlaWdodD0xMD48aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiPjwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotCi08ZGl2IGlkPSI8JT10YWJsZUNvbnRhaW5lcklkJT4iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgIDx0cj4KLSAgICAgIDx0aCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJoYW5kbGVDaGVja0FsbENsaWNrKCc8JT10YWJsZUNvbnRhaW5lcklkJT4nLHRoaXMpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX0FMTF9DSEVDS19CT1giKSU+Ij48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9KChCdXNpbmVzc0VsZW1lbnQpdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKS5nZXRUcmVlRWxlbWVudCgpKS5nZXRCdXNpbmVzc0VudGl0eSgpLmdldERlZmF1bHROYW1lU3RyaW5nKCklPjwvdGg+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9ESVJFQ1RJT04iKSU+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05BTUUiKSU+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0RFU0NSSVBUSU9OIiklPjwvdGg+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9BU1NFUlRJT05fVFlQRSIpJT48L3RoPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy91ZGRpT2JqZWN0c190YWJsZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvZm9ybXMvdWRkaU9iamVjdHNfdGFibGUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOGEwNjM2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9mb3Jtcy91ZGRpT2JqZWN0c190YWJsZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotICAgU3RyaW5nIHRhYmxlQ29udGFpbmVySWQgPSBzZWN0aW9uSGVhZGVySW5mby5nZXRDb250YWluZXJJZCgpOwotICAgU3RyaW5nW10gc3BlY2lmaWNJbmZvID0gKFN0cmluZ1tdKXNlY3Rpb25IZWFkZXJJbmZvLmdldE90aGVyUHJvcGVydGllcygpOwotICAgU3RyaW5nIHRhYmxlVGl0bGVLZXkgPSBzcGVjaWZpY0luZm9bMF07Ci0gICBib29sZWFuIGhhc0Vycm9ycyA9IHNwZWNpZmljSW5mb1sxXS5lcXVhbHMoQm9vbGVhbi5UUlVFLnRvU3RyaW5nKCkpOwotICAgU3RyaW5nIHF1ZXJ5SXRlbVN0cmluZyA9IHNwZWNpZmljSW5mb1syXTsKLSAgIFN0cmluZyBwYXJlbnRDb250YWluZXJJZCA9IHNwZWNpZmljSW5mb1szXTsKLSAgIFN0cmluZyB0cmFuc2ZlclRhcmdldEtleSA9IHNwZWNpZmljSW5mb1s0XTsKLSAgIFN0cmluZ0J1ZmZlciB0d2lzdEltYWdlTmFtZSA9IG5ldyBTdHJpbmdCdWZmZXIoIngiKTsKLSAgIHR3aXN0SW1hZ2VOYW1lLmFwcGVuZCh0YWJsZUNvbnRhaW5lcklkKTsKLSU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT48YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT10YWJsZUNvbnRhaW5lcklkJT4nLCc8JT10d2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4nKSI+PGltZyBuYW1lPSI8JT10d2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RjbG9zZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfQ0xPU0VEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+PC90ZD4KLSAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPHN0cm9uZz48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSh0YWJsZVRpdGxlS2V5KSU+PC9zdHJvbmc+Ci08JQotICAgaWYgKGhhc0Vycm9ycykKLSAgIHsKLSU+Ci0gICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci08JQotICAgfQotJT4gICAgICAgICAKLSAgICA8L3RkPgotPCUKLSAgIGlmIChzZWN0aW9uSGVhZGVySW5mby5pc0R5bmFtaWMoKSkKLSAgIHsKLSU+ICAgICAgIAotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmluaXRpYXRlU3ViUXVlcnkoJzwlPXBhcmVudENvbnRhaW5lcklkJT4nLCc8JT10cmFuc2ZlclRhcmdldEtleSU+Jyw8JT1xdWVyeUl0ZW1TdHJpbmclPix0cnVlKSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19HRVQiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6aW5pdGlhdGVTdWJRdWVyeSgnPCU9cGFyZW50Q29udGFpbmVySWQlPicsJzwlPXRyYW5zZmVyVGFyZ2V0S2V5JT4nLDwlPXF1ZXJ5SXRlbVN0cmluZyU+LGZhbHNlKSI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19GSU5EIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnJlbW92ZVNlbGVjdGVkUm93cygnPCU9dGFibGVDb250YWluZXJJZCU+JykiPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfUkVNT1ZFIiklPjwvYT4KLSAgICA8L3RkPgotPCUKLSAgIH0KLSU+ICAgICAgIAotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgdmFsaWduPSJ0b3AiIGhlaWdodD0xMD48aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiPjwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotCi08ZGl2IGlkPSI8JT10YWJsZUNvbnRhaW5lcklkJT4iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgIDx0cj4KLSAgICAgIDx0aCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJoYW5kbGVDaGVja0FsbENsaWNrKCc8JT10YWJsZUNvbnRhaW5lcklkJT4nLHRoaXMpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX0FMTF9DSEVDS19CT1giKSU+Ij48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTkFNRSIpJT48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfREVTQ1JJUFRJT04iKSU+PC90aD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvYnVzaW5lc3NfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL2J1c2luZXNzX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYWZkOTRhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvYnVzaW5lc3NfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL2J1c2luZXNzX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvYnVzaW5lc3NfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkM2Q2YTc3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvYnVzaW5lc3NfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9idXNpbmVzc2VzX2Nsb3NlZF9lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvYnVzaW5lc3Nlc19jbG9zZWRfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4NWMwOTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9idXNpbmVzc2VzX2Nsb3NlZF9lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvYnVzaW5lc3Nlc19jbG9zZWRfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9idXNpbmVzc2VzX2Nsb3NlZF9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmMzA0M2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9idXNpbmVzc2VzX2Nsb3NlZF9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL2J1c2luZXNzZXNfb3Blbl9oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL2J1c2luZXNzZXNfb3Blbl9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhZDdjZWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9idXNpbmVzc2VzX29wZW5faGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9jYXRlZ29yeS5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL2NhdGVnb3J5LmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDUxNGQ3ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL2NhdGVnb3J5LmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvZmluZF9lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvZmluZF9lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWMxOGQ3NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL2ZpbmRfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL2ZpbmRfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9maW5kX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDU0MGEwMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL2ZpbmRfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9vcGVuX3JlZ2lzdHJ5X2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9vcGVuX3JlZ2lzdHJ5X2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NzUwNjZiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvb3Blbl9yZWdpc3RyeV9lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvb3Blbl9yZWdpc3RyeV9oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL29wZW5fcmVnaXN0cnlfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDU2OTljLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvb3Blbl9yZWdpc3RyeV9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3B1Ymxpc2hfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3B1Ymxpc2hfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjNDI2M2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9wdWJsaXNoX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9wdWJsaXNoX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcHVibGlzaF9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyY2VmMWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9wdWJsaXNoX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcHVibGlzaF9zZXJ2aWNlX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9wdWJsaXNoX3NlcnZpY2VfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1ODk0ZmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9wdWJsaXNoX3NlcnZpY2VfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3B1Ymxpc2hfc2VydmljZV9oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3B1Ymxpc2hfc2VydmljZV9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0NWVhNWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9wdWJsaXNoX3NlcnZpY2VfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9wdWJsaXNoZXJfYXNzZXJ0aW9uc19lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcHVibGlzaGVyX2Fzc2VydGlvbnNfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlZmY4NTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9wdWJsaXNoZXJfYXNzZXJ0aW9uc19lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcHVibGlzaGVyX2Fzc2VydGlvbnNfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9wdWJsaXNoZXJfYXNzZXJ0aW9uc19oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0ZTk5MmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9wdWJsaXNoZXJfYXNzZXJ0aW9uc19oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3F1ZXJpZXNfY2xvc2VkX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9xdWVyaWVzX2Nsb3NlZF9lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzczN2Q3Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3F1ZXJpZXNfY2xvc2VkX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9xdWVyaWVzX2Nsb3NlZF9oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3F1ZXJpZXNfY2xvc2VkX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQ1NTAwYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3F1ZXJpZXNfY2xvc2VkX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcXVlcmllc19vcGVuX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcXVlcmllc19vcGVuX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjZjYTE1NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3F1ZXJpZXNfb3Blbl9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3F1ZXJ5LmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcXVlcnkuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjA3NjYwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcXVlcnkuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9yZWZlcmVuY2VkX3NlcnZpY2VzX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9yZWZlcmVuY2VkX3NlcnZpY2VzX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OWQ3OTZmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcmVmZXJlbmNlZF9zZXJ2aWNlc19lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcmVmZXJlbmNlZF9zZXJ2aWNlc19oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3JlZmVyZW5jZWRfc2VydmljZXNfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDE1MDZmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcmVmZXJlbmNlZF9zZXJ2aWNlc19oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3JlZ2lzdHJ5LmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcmVnaXN0cnkuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjQzY2FlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvcmVnaXN0cnkuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9yZWdzdHJ5Y2F0X29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3JlZ3N0cnljYXRfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDM3ZDU5ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3JlZ3N0cnljYXRfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvc2VydmljZV9oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3NlcnZpY2VfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTY3MTRiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvc2VydmljZV9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3NlcnZpY2VfaW50ZXJmYWNlX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvc2VydmljZV9pbnRlcmZhY2VfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTMyNWNhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvc2VydmljZV9pbnRlcmZhY2VfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9zZXJ2aWNlX2ludGVyZmFjZXNfY2xvc2VkX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9zZXJ2aWNlX2ludGVyZmFjZXNfY2xvc2VkX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYmU0YTc0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvc2VydmljZV9pbnRlcmZhY2VzX2Nsb3NlZF9lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvc2VydmljZV9pbnRlcmZhY2VzX2Nsb3NlZF9oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3NlcnZpY2VfaW50ZXJmYWNlc19jbG9zZWRfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmQ5ODIwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvc2VydmljZV9pbnRlcmZhY2VzX2Nsb3NlZF9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3NlcnZpY2VfaW50ZXJmYWNlc19vcGVuX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvc2VydmljZV9pbnRlcmZhY2VzX29wZW5faGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YWZjYzAxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvc2VydmljZV9pbnRlcmZhY2VzX29wZW5faGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9zZXJ2aWNlc19jbG9zZWRfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3NlcnZpY2VzX2Nsb3NlZF9lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzM5OGY2Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3NlcnZpY2VzX2Nsb3NlZF9lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvc2VydmljZXNfY2xvc2VkX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvc2VydmljZXNfY2xvc2VkX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWU2NTQ0Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3NlcnZpY2VzX2Nsb3NlZF9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3NlcnZpY2VzX29wZW5fZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3NlcnZpY2VzX29wZW5fZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4MmI0YzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9zZXJ2aWNlc19vcGVuX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9zZXJ2aWNlc19vcGVuX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvc2VydmljZXNfb3Blbl9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmODYwNTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy9zZXJ2aWNlc19vcGVuX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvdW5wdWJsaXNoLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvdW5wdWJsaXNoLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjY5MjJhYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3VucHVibGlzaC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3VucHVibGlzaF9idXNfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3VucHVibGlzaF9idXNfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyNTQxNjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy91bnB1Ymxpc2hfYnVzX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy91bnB1Ymxpc2hfYnVzX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvdW5wdWJsaXNoX2J1c19oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3MzBiMGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy91bnB1Ymxpc2hfYnVzX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvdW5wdWJsaXNoX3NlcnZpY2VfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3VucHVibGlzaF9zZXJ2aWNlX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTRkZDNjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvdW5wdWJsaXNoX3NlcnZpY2VfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3VucHVibGlzaF9zZXJ2aWNlX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvdW5wdWJsaXNoX3NlcnZpY2VfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OGJkODNmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvdW5wdWJsaXNoX3NlcnZpY2VfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL2ltYWdlcy91bnB1Ymxpc2hfc2VydmljZV9pbnRlcmZhY2VfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3VucHVibGlzaF9zZXJ2aWNlX2ludGVyZmFjZV9lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjBlYjE5OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3VucHVibGlzaF9zZXJ2aWNlX2ludGVyZmFjZV9lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvdW5wdWJsaXNoX3NlcnZpY2VfaW50ZXJmYWNlX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9pbWFnZXMvdW5wdWJsaXNoX3NlcnZpY2VfaW50ZXJmYWNlX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTk3MTNlMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvaW1hZ2VzL3VucHVibGlzaF9zZXJ2aWNlX2ludGVyZmFjZV9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvbmF2aWdhdG9yX2NvbnRhaW5lci5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvbmF2aWdhdG9yX2NvbnRhaW5lci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlOGZiYjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL25hdmlnYXRvcl9jb250YWluZXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfTkFWSUdBVE9SX0NPTlRBSU5FUiIpJT48L3RpdGxlPgotPC9oZWFkPgotPGZyYW1lc2V0IHJvd3M9IjMzLCoiIGJvcmRlcj0wIGJnY29sb3I9IiNFQ0U5RDgiPgotICA8ZnJhbWUgbmFtZT0iPCU9VURESUZyYW1lTmFtZXMuTkFWSUdBVE9SX1RPT0xCQVIlPiIgdGl0bGU9IjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9OQVZJR0FUT1JfVE9PTEJBUiIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL25hdmlnYXRvcl90b29sYmFyLmpzcCIpKSU+IiBub3Jlc2l6ZSBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci0gIDxmcmFtZSBuYW1lPSI8JT1VRERJRnJhbWVOYW1lcy5OQVZJR0FUT1JfQ09OVEVOVCU+IiB0aXRsZT0iPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX05BVklHQVRPUl9DT05URU5UIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvbmF2aWdhdG9yX2NvbnRlbnQuanNwIikpJT4iIG5vcmVzaXplIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTAgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MD4KLTwvZnJhbWVzZXQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvbmF2aWdhdG9yX2NvbnRlbnQuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL25hdmlnYXRvcl9jb250ZW50LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ3Mjk1MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvbmF2aWdhdG9yX2NvbnRlbnQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX05BVklHQVRPUl9DT05URU5UIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3RyZWV2aWV3LmNzcyIpKSU+Ij4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci0gIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci0gIDwvc2NyaXB0PgotICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy90cmVldmlldy5qcyIpKSU+Ij4KLSAgPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08JQotICAgU3RyaW5nIHNlbGVjdGVkQW5jaG9yTmFtZSA9ICIiOwotICAgTm9kZU1hbmFnZXIgbmF2aWdhdG9yTWFuYWdlciA9IHVkZGlQZXJzcGVjdGl2ZS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCk7Ci0gICBpbnQgZm9jdXNlZE5vZGVJZCA9IG5hdmlnYXRvck1hbmFnZXIuZ2V0Rm9jdXNlZE5vZGVJZCgpOwotICAgU3RyaW5nIGZvY3VzZWRBbmNob3JOYW1lID0gU3RyaW5nLnZhbHVlT2YoZm9jdXNlZE5vZGVJZCk7Ci0gICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5hdmlnYXRvck1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICBpZiAoc2VsZWN0ZWROb2RlICE9IG51bGwpCi0gICB7Ci0gICAgIHNlbGVjdGVkQW5jaG9yTmFtZSA9IHNlbGVjdGVkTm9kZS5nZXRBbmNob3JOYW1lKCk7Ci0gICAgIGlmIChmb2N1c2VkTm9kZUlkID09IHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSkKLSAgICAgICBmb2N1c2VkQW5jaG9yTmFtZSA9IHNlbGVjdGVkQW5jaG9yTmFtZTsKLSAgIH0KLSU+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIG9uTG9hZD0ic2VsZi5sb2NhdGlvbi5oYXNoPScjPCU9Zm9jdXNlZEFuY2hvck5hbWUlPic7c2V0U2VsZWN0ZWRBbmNob3JOYW1lKCc8JT1zZWxlY3RlZEFuY2hvck5hbWUlPicpIiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0idHJlZWNvbnRlbnRib3JkZXIiPgotPCU9bmF2aWdhdG9yTWFuYWdlci5yZW5kZXJUcmVlVmlldyhyZXNwb25zZSklPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvbmF2aWdhdG9yX3Rvb2xiYXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL25hdmlnYXRvcl90b29sYmFyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDE5NzRiYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvbmF2aWdhdG9yX3Rvb2xiYXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4KLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9OQVZJR0FUT1JfVE9PTEJBUiIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy90b29sYmFyLmNzcyIpKSU+Ij4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlmcmFtZXNldHMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvdG9vbGJhci5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0idG9vbGJhcmJvZHltYXJnaW4iPgotPGRpdiBpZD0idG9vbGJhcmJvcmRlciI+Ci0gIDxkaXYgaWQ9InRvb2xiYXIiIG9uZGJsY2xpY2s9InByb2Nlc3NGcmFtZXNldFNpemVzKGRvY3VtZW50LmZvcm1zWzBdKSI+Ci08anNwOnVzZUJlYW4gaWQ9ImZvcm1BY3Rpb24iIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICBmb3JtQWN0aW9uLmFwcGVuZCgidWRkaS9hY3Rpb25zL1Jlc2l6ZVVERElGcmFtZXNBY3Rpb25KU1AuanNwIik7Ci0lPiAgCi08L2pzcDp1c2VCZWFuPgotPGpzcDp1c2VCZWFuIGlkPSJmb3JtRnJhbWVOYW1lIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgIGZvcm1GcmFtZU5hbWUuYXBwZW5kKFVERElGcmFtZU5hbWVzLk5BVklHQVRPUl9DT05UQUlORVIpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvZm9ybXMvUHJvY2Vzc1VERElGcmFtZXNldHNGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8dGFibGUgd2lkdGg9IjEwMCUiIGhlaWdodD0yNSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgYm9yZGVyPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImNlbnRlciIgd2lkdGg9MjUgaGVpZ2h0PTI1PjxpbWcgY2xhc3M9Im5vcm1hbCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9uYXZpZ2F0b3IuZ2lmIikpJT4iIHdpZHRoPTE2IGhlaWdodD0xNj48L3RkPgotPCUKLSAgIFN0cmluZyBkb3VibGVDbGlja0NvbHVtblRpdGxlID0gbnVsbDsKLSAgIGlmICh1ZGRpUGVyc3BlY3RpdmUuZ2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCkuc3RhcnRzV2l0aCgiMTAwJSIpKQotICAgICBkb3VibGVDbGlja0NvbHVtblRpdGxlID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfRE9VQkxFX0NMSUNLX1RPX1JFU1RPUkUiKTsKLSAgIGVsc2UKLSAgICAgZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0RPVUJMRV9DTElDS19UT19NQVhJTUlaRSIpOwotJT4gICAgICAgIAotICAgICAgICA8dGQgaWQ9ImRvdWJsZWNsaWNrY29sdW1uIiB0aXRsZT0iPCU9ZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSU+IiB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImxlZnQiIHdpZHRoPSIqIiBoZWlnaHQ9MjUgbm93cmFwIGNsYXNzPSJ0ZXh0Ij48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9OQVZJR0FUT1IiKSU+PC90ZD4KLTwlCi0gICBTdHJpbmcgYWx0UmVmcmVzaCA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1JFRlJFU0giKTsKLSAgIFN0cmluZyBhbHRDbGVhciA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0NMRUFSIik7Ci0lPiAgIAotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiIHdpZHRoPTI1IGhlaWdodD0yNT48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvYWN0aW9ucy9SZWZyZXNoVURESU5vZGVBY3Rpb25KU1AuanNwIikpJT4iIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+Ij48aW1nIGNsYXNzPSJub3JtYWwiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvcmVmcmVzaF9lbmFibGVkLmdpZiIpKSU+IiB3aWR0aD0xNiBoZWlnaHQ9MTYgb25Nb3VzZU92ZXI9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvcmVmcmVzaF9oaWdobGlnaHRlZC5naWYiKSklPic7bW91c2VvdmVyKHRoaXMpIiBvbk1vdXNlT3V0PSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3JlZnJlc2hfZW5hYmxlZC5naWYiKSklPic7bW91c2VvdXQodGhpcykiIG9uTW91c2VEb3duPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3JlZnJlc2hfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlZG93bih0aGlzKSIgb25Nb3VzZVVwPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3JlZnJlc2hfZW5hYmxlZC5naWYiKSklPic7bW91c2V1cCh0aGlzKSIgYWx0PSI8JT1hbHRSZWZyZXNoJT4iIHRpdGxlPSI8JT1hbHRSZWZyZXNoJT4iPjwvYT48L3RkPgotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiIHdpZHRoPTI1IGhlaWdodD0yNT48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvYWN0aW9ucy9DbGVhck5hdmlnYXRvck5vZGVBY3Rpb25KU1AuanNwIikpJT4iIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+Ij48aW1nIGNsYXNzPSJub3JtYWwiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfZW5hYmxlZC5naWYiKSklPiIgd2lkdGg9MTYgaGVpZ2h0PTE2IG9uTW91c2VPdmVyPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2NsZWFyX2hpZ2hsaWdodGVkLmdpZiIpKSU+Jzttb3VzZW92ZXIodGhpcykiIG9uTW91c2VPdXQ9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfZW5hYmxlZC5naWYiKSklPic7bW91c2VvdXQodGhpcykiIG9uTW91c2VEb3duPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2NsZWFyX2hpZ2hsaWdodGVkLmdpZiIpKSU+Jzttb3VzZWRvd24odGhpcykiIG9uTW91c2VVcD0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9lbmFibGVkLmdpZiIpKSU+Jzttb3VzZXVwKHRoaXMpIiBhbHQ9IjwlPWFsdENsZWFyJT4iIHRpdGxlPSI8JT1hbHRDbGVhciU+Ij48L2E+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgPC9kaXY+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvcHJvcGVydGllc19jb250YWluZXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMmZiYjU0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9QUk9QRVJUSUVTX0NPTlRBSU5FUiIpJT48L3RpdGxlPgotPC9oZWFkPgotPGZyYW1lc2V0IHJvd3M9IjMzLCoiIGJvcmRlcj0wIGJnY29sb3I9IiNFQ0U5RDgiPgotICA8ZnJhbWUgbmFtZT0iPCU9VURESUZyYW1lTmFtZXMuUFJPUEVSVElFU19UT09MQkFSJT4iIHRpdGxlPSI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfUFJPUEVSVElFU19UT09MQkFSIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvcHJvcGVydGllc190b29sYmFyLmpzcCIpKSU+IiBub3Jlc2l6ZSBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci0gIDxmcmFtZSBuYW1lPSI8JT1VRERJRnJhbWVOYW1lcy5QUk9QRVJUSUVTX0NPTlRFTlQlPiIgdGl0bGU9IjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9QUk9QRVJUSUVTX0NPTlRFTlQiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIikpJT4iIG5vcmVzaXplIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTAgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MD4KLTwvZnJhbWVzZXQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvcHJvcGVydGllc19jb250ZW50LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDIzNzg3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9QUk9QRVJUSUVTX0NPTlRFTlQiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLTwlCi0gICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIE5vZGUgc2VsZWN0ZWROYXZpZ2F0b3JOb2RlID0gbmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgIGlmIChzZWxlY3RlZE5hdmlnYXRvck5vZGUgIT0gbnVsbCkKLSAgIHsKLSAgICAgVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXI7Ci0gICAgIGlmIChzZWxlY3RlZE5hdmlnYXRvck5vZGUuZ2V0Vmlld0lkKCkgPT0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUKQotICAgICAgIHRvb2xNYW5hZ2VyID0gc2VsZWN0ZWROYXZpZ2F0b3JOb2RlLmdldFRvb2xNYW5hZ2VyKCk7Ci0gICAgIGVsc2UKLSAgICAgICB0b29sTWFuYWdlciA9IHNlbGVjdGVkTmF2aWdhdG9yTm9kZS5nZXRWaWV3VG9vbE1hbmFnZXIoKTsKLSAgICAgVG9vbCBzZWxlY3RlZFRvb2wgPSB0b29sTWFuYWdlci5nZXRTZWxlY3RlZFRvb2woKTsKLSAgICAgaWYgKHNlbGVjdGVkVG9vbCAhPSBudWxsICYmIHNlbGVjdGVkVG9vbC5nZXRUb29sVHlwZSgpICE9IFRvb2xUeXBlcy5BQ1RJT04pCi0gICAgIHsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgbG9jYXRpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChzZWxlY3RlZFRvb2wuZ2V0Rm9ybUxpbmsoKSkpJT4iOwotPC9zY3JpcHQ+Ci08JQotICAgICB9Ci0gICAgIGVsc2UKLSAgICAgewotJT4KLTx0YWJsZT4KLSAgPHRyPgotICAgIDx0ZD4KLSAgICAgIDwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PX0FDVElPTl9TRUxFQ1RFRCIpJT4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTwlCi0gICAgIH0KLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSU+Ci08dGFibGU+Ci0gIDx0cj4KLSAgICA8dGQ+Ci0gICAgICA8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT19OT0RFX1NFTEVDVEVEIiklPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPCUKLSAgIH0KLSU+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9wcm9wZXJ0aWVzX3Rvb2xiYXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3Byb3BlcnRpZXNfdG9vbGJhci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5MzlhZDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3Byb3BlcnRpZXNfdG9vbGJhci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1BST1BFUlRJRVNfVE9PTEJBUiIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy90b29sYmFyLmNzcyIpKSU+Ij4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlmcmFtZXNldHMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvdG9vbGJhci5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0idG9vbGJhcmJvZHltYXJnaW4iPgotPGRpdiBpZD0idG9vbGJhcmJvcmRlciI+Ci0gIDxkaXYgaWQ9InRvb2xiYXIiIG9uZGJsY2xpY2s9InByb2Nlc3NGcmFtZXNldFNpemVzKGRvY3VtZW50LmZvcm1zWzBdKSI+Ci08anNwOnVzZUJlYW4gaWQ9ImZvcm1BY3Rpb24iIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICBmb3JtQWN0aW9uLmFwcGVuZCgidWRkaS9hY3Rpb25zL1Jlc2l6ZVVERElGcmFtZXNBY3Rpb25KU1AuanNwIik7Ci0lPiAgCi08L2pzcDp1c2VCZWFuPgotPGpzcDp1c2VCZWFuIGlkPSJmb3JtRnJhbWVOYW1lIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgIGZvcm1GcmFtZU5hbWUuYXBwZW5kKFVERElGcmFtZU5hbWVzLlBST1BFUlRJRVNfQ09OVEFJTkVSKTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii91ZGRpL2Zvcm1zL1Byb2Nlc3NVRERJRnJhbWVzZXRzRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPHRhYmxlIHdpZHRoPSIxMDAlIiBoZWlnaHQ9MjUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGJvcmRlcj0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiIHdpZHRoPTI1IGhlaWdodD0yNT48aW1nIGNsYXNzPSJub3JtYWwiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvYWN0aW9ucy5naWYiKSklPiIgd2lkdGg9MTYgaGVpZ2h0PTE2PjwvdGQ+Ci08JQotICAgU3RyaW5nIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBudWxsOwotICAgaWYgKHVkZGlQZXJzcGVjdGl2ZS5nZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKS5lbmRzV2l0aCgiMTAwJSIpKQotICAgewotICAgICBpZiAodWRkaVBlcnNwZWN0aXZlLmdldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoKS5zdGFydHNXaXRoKCIxMDAlIikpCi0gICAgICAgZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0RPVUJMRV9DTElDS19UT19SRVNUT1JFIik7Ci0gICB9Ci0gICBpZiAoZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9PSBudWxsKQotICAgICBkb3VibGVDbGlja0NvbHVtblRpdGxlID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfRE9VQkxFX0NMSUNLX1RPX01BWElNSVpFIik7Ci0lPiAgICAgICAgCi0gICAgICAgIDx0ZCBpZD0iZG91YmxlY2xpY2tjb2x1bW4iIHRpdGxlPSI8JT1kb3VibGVDbGlja0NvbHVtblRpdGxlJT4iIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0ibGVmdCIgd2lkdGg9IioiIGhlaWdodD0yNSBub3dyYXAgY2xhc3M9InRleHQiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0FDVElPTlMiKSU+PC90ZD4KLTwlCi0gICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIE5vZGUgc2VsZWN0ZWROYXZpZ2F0b3JOb2RlID0gbmF2aWdhdG9yTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgIGlmIChzZWxlY3RlZE5hdmlnYXRvck5vZGUgIT0gbnVsbCkKLSAgIHsKLSAgICAgVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXI7Ci0gICAgIGlmIChzZWxlY3RlZE5hdmlnYXRvck5vZGUuZ2V0Vmlld0lkKCkgPT0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUKQotICAgICAgIHRvb2xNYW5hZ2VyID0gc2VsZWN0ZWROYXZpZ2F0b3JOb2RlLmdldFRvb2xNYW5hZ2VyKCk7Ci0gICAgIGVsc2UKLSAgICAgICB0b29sTWFuYWdlciA9IHNlbGVjdGVkTmF2aWdhdG9yTm9kZS5nZXRWaWV3VG9vbE1hbmFnZXIoKTsKLSAgICAgZm9yIChpbnQgaT0wO2k8dG9vbE1hbmFnZXIuZ2V0TnVtYmVyT2ZUb29scygpO2krKykKLSAgICAgewotICAgICAgIFRvb2wgdG9vbCA9IChUb29sKXRvb2xNYW5hZ2VyLmdldFRvb2woaSk7Ci0lPgotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiIHdpZHRoPTI1IGhlaWdodD0yNT48JT10b29sLnJlbmRlclRvb2wocmVzcG9uc2UsY29udHJvbGxlciklPjwvdGQ+Ci08JQotICAgICB9Ci0gICB9Ci0lPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICA8L2Rpdj4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3NjcmlwdHMvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9zY3JpcHRzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3NjcmlwdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvc2NyaXB0cy9jYnBhbmVzLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9zY3JpcHRzL2NicGFuZXMuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzI3MTk4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9zY3JpcHRzL2NicGFuZXMuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qIiAlPgotCi08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgdmFyIGNhdGVnb3J5QnJvd3NlcldpbmRvdyA9IHRvcDsKLSAgdmFyIGNhdGVnb3J5QnJvd3NlcldpbmRvd1dvcmtBcmVhID0gdG9wLmZyYW1lc1siPCU9VURESUZyYW1lTmFtZXMuQ0FURUdPUklFU19XT1JLQVJFQSU+Il07Ci0gIHZhciBjYXRlZ29yeUJyb3dzZXJXaW5kb3dUb29sYmFyID0gY2F0ZWdvcnlCcm93c2VyV2luZG93LmZyYW1lc1siPCU9VURESUZyYW1lTmFtZXMuQ0FURUdPUklFU19UT09MQkFSJT4iXTsKLSAgdmFyIGNhdGVnb3J5QnJvd3NlcldpbmRvd0NvbnRlbnQgPSBjYXRlZ29yeUJyb3dzZXJXaW5kb3cuZnJhbWVzWyI8JT1VRERJRnJhbWVOYW1lcy5DQVRFR09SSUVTX0NPTlRFTlQlPiJdOwotPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvc2NyaXB0cy9kZXRhaWxzdGFibGVzLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9zY3JpcHRzL2RldGFpbHN0YWJsZXMuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmRlMzcwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9zY3JpcHRzL2RldGFpbHN0YWJsZXMuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTU1MCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpdGFibGVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgZnVuY3Rpb24gYWRkRGV0YWlsc0xhbmd1YWdlSW5wdXRSb3codGFibGVDb250YWluZXJJZCx0ZXh0Q29udHJvbFRpdGxlLGhhc0Vycm9yKQotICB7Ci0gICAgdHdpc3RPcGVuKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciB0YWJsZUJvZHkgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVEJPRFkiKS5pdGVtKDApOwotICAgIHZhciBuZXdSb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpOwotICAgIHZhciBjb2x1bW4wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW4zID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLQotICAgIGNvbHVtbjAuY2xhc3NOYW1lID0gImNoZWNrYm94Y2VsbHMiOwotICAgIGNvbHVtbjEuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIGNvbHVtbjIuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIGNvbHVtbjIud2lkdGggPSAiNzAlIjsKLSAgICBjb2x1bW4zLmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLQotICAgIHZhciByb3dDaGVja2JveCA9IGNyZWF0ZVJvd0NoZWNrYm94KCk7Ci0gICAgY29sdW1uMC5hcHBlbmRDaGlsZChyb3dDaGVja2JveCk7Ci0KLSAgICBjb2x1bW4xLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIiIsIjwlPUFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCU+IikpOyA8JS8vIHZpZXdJZCU+Ci0gICAgY29sdW1uMS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCIiLCIiKSk7IDwlLy8gb3JpZ2luYWwgbGFuZ3VhZ2UlPgotICAgIGNvbHVtbjEuYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiIiwiIikpOyA8JS8vIG9yaWdpbmFsIHRleHQlPgotICAgIGNvbHVtbjEuYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiIix0ZXh0Q29udHJvbFRpdGxlKSk7IDwlLy8gY29udHJvbCB0aXRsZSU+Ci0gICAgY29sdW1uMS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCIiLGhhc0Vycm9yKSk7IDwlLy8gbW9kZSU+Ci0gICAgaWYgKGhhc0Vycm9yKQotICAgIHsKLSAgICAgIHZhciBsYW5ndWFnZVNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpOwotICAgICAgbGFuZ3VhZ2VTZWxlY3QuY2xhc3NOYW1lID0gInNlbGVjdGxpc3QiOwotICAgICAgcG9wdWxhdGVMYW5ndWFnZVNlbGVjdChsYW5ndWFnZVNlbGVjdCk7Ci0gICAgICBjb2x1bW4xLmFwcGVuZENoaWxkKGxhbmd1YWdlU2VsZWN0KTsKLSAgICAgIAotICAgICAgdmFyIHRleHRJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Ci0gICAgICB0ZXh0SW5wdXQuY2xhc3NOYW1lID0gInRhYmxldGV4dGVudGVyIjsKLSAgICAgIHRleHRJbnB1dC50aXRsZSA9IHRleHRDb250cm9sVGl0bGU7Ci0gICAgICBjb2x1bW4yLmFwcGVuZENoaWxkKHRleHRJbnB1dCk7Ci0gICAgICAKLSAgICAgIGFkZERldGFpbHNMYW5ndWFnZUlucHV0Um93UmVtb3ZlQWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjMsdGFibGUucm93cy5sZW5ndGgpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgY29sdW1uMS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIikpOwotICAgICAgY29sdW1uMi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIikpOwotICAgICAgYWRkRGV0YWlsc0xhbmd1YWdlSW5wdXRSb3dFZGl0QWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjMsdGFibGUucm93cy5sZW5ndGgpOwotICAgIH0KLSAgICAKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMCk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjEpOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4yKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMyk7Ci0gICAgCi0gICAgdGFibGVCb2R5LmFwcGVuZENoaWxkKG5ld1Jvdyk7Ci0gIH0KLQotICBmdW5jdGlvbiByZW1vdmVDb2x1bW5DaGlsZHJlbihjb2x1bW4pCi0gIHsKLSAgICBmb3IgKHZhciBpPTA7aTxjb2x1bW4uY2hpbGROb2Rlcy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIGNvbHVtbi5yZW1vdmVDaGlsZChjb2x1bW4uY2hpbGROb2Rlc1tpXSk7Ci0gICAgICBpLS07Ci0gICAgfQotICB9Ci0gIAotICBmdW5jdGlvbiBhZGREZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvd1JlbW92ZUFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW4scm93SW5kZXgpCi0gIHsKLSAgICB2YXIgcmVtb3ZlTGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLSAgICBzZXRKU0xpbmtSb3dUYXJnZXQocmVtb3ZlTGluaywicmVtb3ZlRGV0YWlsc0xhbmd1YWdlSW5wdXRSb3ciLHRhYmxlQ29udGFpbmVySWQscm93SW5kZXgpOwotICAgIHJlbW92ZUxpbmsuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX1JFTU9WRSIpKSU+IikpOwotICAgIGNvbHVtbi5hcHBlbmRDaGlsZChyZW1vdmVMaW5rKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGFkZERldGFpbHNMYW5ndWFnZUlucHV0Um93RWRpdEFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW4scm93SW5kZXgpCi0gIHsKLSAgICB2YXIgZWRpdExpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0gICAgc2V0SlNMaW5rUm93VGFyZ2V0KGVkaXRMaW5rLCJlZGl0RGV0YWlsc0xhbmd1YWdlSW5wdXRSb3ciLHRhYmxlQ29udGFpbmVySWQscm93SW5kZXgpOwotICAgIGVkaXRMaW5rLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19FRElUIikpJT4iKSk7Ci0gICAgY29sdW1uLmFwcGVuZENoaWxkKGVkaXRMaW5rKTsgIAotICB9ICAKLSAgCi0gIGZ1bmN0aW9uIGFkZERldGFpbHNMYW5ndWFnZUlucHV0Um93Q2FuY2VsQWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbixyb3dJbmRleCkKLSAgewotICAgIHZhciBjYW5jZWxMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotICAgIHNldEpTTGlua1Jvd1RhcmdldChjYW5jZWxMaW5rLCJjYW5jZWxEZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvd0VkaXQiLHRhYmxlQ29udGFpbmVySWQscm93SW5kZXgpOwotICAgIGNhbmNlbExpbmsuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0NBTkNFTCIpKSU+IikpOwotICAgIGNvbHVtbi5hcHBlbmRDaGlsZChjYW5jZWxMaW5rKTsKLSAgfQotICAKLSAgZnVuY3Rpb24gZWRpdERldGFpbHNMYW5ndWFnZUlucHV0Um93KHRhYmxlQ29udGFpbmVySWQscm93SW5kZXgpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgcm93ID0gdGFibGUucm93c1tyb3dJbmRleF07Ci0gICAgdmFyIGNvbHVtbnMgPSByb3cuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgCi0gICAgdmFyIGNvbHVtbjEgPSBjb2x1bW5zLml0ZW0oMSk7Ci0gICAgdmFyIGNvbHVtbjIgPSBjb2x1bW5zLml0ZW0oMik7Ci0gICAgdmFyIGNvbHVtbjMgPSBjb2x1bW5zLml0ZW0oMyk7Ci0gICAgCi0gICAgdmFyIGxhbmdJZCA9IGNvbHVtbjEuY2hpbGROb2Rlc1sxXS52YWx1ZTsKLSAgICB2YXIgaW5wdXRWYWx1ZSA9IGNvbHVtbjEuY2hpbGROb2Rlc1syXS52YWx1ZTsKLSAgICB2YXIgdGV4dENvbnRyb2xUaXRsZSA9IGNvbHVtbjEuY2hpbGROb2Rlc1szXS52YWx1ZTsKLSAgICB2YXIgZWRpdGFibGUgPSAoY29sdW1uMS5jaGlsZE5vZGVzWzRdLnZhbHVlID09ICJ0cnVlIikKLSAgICBpZiAoZWRpdGFibGUpCi0gICAgICByZXR1cm47Ci0gICAgY29sdW1uMS5jaGlsZE5vZGVzWzRdLnZhbHVlID0gdHJ1ZTsKLSAgICB2YXIgY29sdW1uMUNvbnRyb2wgPSBjb2x1bW4xLmNoaWxkTm9kZXNbNV07Ci0gICAgCi0gICAgdmFyIGxhbmd1YWdlU2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2VsZWN0Iik7Ci0gICAgcG9wdWxhdGVMYW5ndWFnZVNlbGVjdChsYW5ndWFnZVNlbGVjdCk7Ci0gICAgY29sdW1uMS5yZXBsYWNlQ2hpbGQobGFuZ3VhZ2VTZWxlY3QsY29sdW1uMUNvbnRyb2wpOwotICAgIGxhbmd1YWdlU2VsZWN0LmNsYXNzTmFtZSA9ICJzZWxlY3RsaXN0IjsKLSAgICBzZXRMYW5ndWFnZVNlbGVjdChsYW5ndWFnZVNlbGVjdCxsYW5nSWQpOwotICAgIAotICAgIHZhciBjb2x1bW4yQ29udHJvbCA9IGNvbHVtbjIuY2hpbGROb2Rlc1swXTsKLSAgICB2YXIgdGV4dElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKLSAgICBjb2x1bW4yLnJlcGxhY2VDaGlsZCh0ZXh0SW5wdXQsY29sdW1uMkNvbnRyb2wpOwotICAgIHRleHRJbnB1dC5jbGFzc05hbWUgPSAidGFibGV0ZXh0ZW50ZXIiOwotICAgIHRleHRJbnB1dC50aXRsZSA9IHRleHRDb250cm9sVGl0bGU7Ci0gICAgdGV4dElucHV0LnZhbHVlID0gaW5wdXRWYWx1ZTsKLQotICAgIHJlbW92ZUNvbHVtbkNoaWxkcmVuKGNvbHVtbjMpOwotICAgIGFkZERldGFpbHNMYW5ndWFnZUlucHV0Um93Q2FuY2VsQWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjMscm93SW5kZXgpOwotICB9Ci0gIAotICBmdW5jdGlvbiBzZXREZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvdyh0YWJsZUNvbnRhaW5lcklkLGluZGV4LHZpZXdJZCxsYW5nSWQsaW5wdXRWYWx1ZSkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciByb3cgPSB0YWJsZS5yb3dzW251bWJlck9mSGVhZGVyUm93cytpbmRleF07Ci0gICAgdmFyIGNvbHVtbnMgPSByb3cuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgdmFyIGNvbHVtbjEgPSBjb2x1bW5zLml0ZW0oMSk7Ci0gICAgdmFyIGNvbHVtbjIgPSBjb2x1bW5zLml0ZW0oMik7Ci0gICAgY29sdW1uMS5jaGlsZE5vZGVzWzBdLnZhbHVlID0gdmlld0lkOwotICAgIGNvbHVtbjEuY2hpbGROb2Rlc1sxXS52YWx1ZSA9IGxhbmdJZDsKLSAgICBjb2x1bW4xLmNoaWxkTm9kZXNbMl0udmFsdWUgPSBpbnB1dFZhbHVlOwotICAgIHZhciBlZGl0YWJsZSA9IChjb2x1bW4xLmNoaWxkTm9kZXNbNF0udmFsdWUgPT0gInRydWUiKTsKLSAgICB2YXIgY29sdW1uMUNvbnRyb2wgPSBjb2x1bW4xLmNoaWxkTm9kZXNbNV07Ci0gICAgaWYgKGVkaXRhYmxlKQotICAgICAgc2V0TGFuZ3VhZ2VTZWxlY3QoY29sdW1uMUNvbnRyb2wsbGFuZ0lkKTsKLSAgICBlbHNlCi0gICAgewotICAgICAgdmFyIHRlbXBTZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKTsKLSAgICAgIHBvcHVsYXRlTGFuZ3VhZ2VTZWxlY3QodGVtcFNlbGVjdCk7Ci0gICAgICB2YXIgbGFuZ3VhZ2UgPSBzZXRMYW5ndWFnZVNlbGVjdCh0ZW1wU2VsZWN0LGxhbmdJZCk7Ci0gICAgICBjb2x1bW4xLnJlcGxhY2VDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShnZXREZWZhdWx0RGlzcGxheVN0cmluZyhsYW5ndWFnZSkpLGNvbHVtbjFDb250cm9sKTsKLSAgICB9Ci0gICAgCi0gICAgdmFyIGNvbHVtbjJDb250cm9sID0gY29sdW1uMi5jaGlsZE5vZGVzWzBdOwotICAgIGlmIChlZGl0YWJsZSkKLSAgICAgIGNvbHVtbjJDb250cm9sLnZhbHVlID0gaW5wdXRWYWx1ZTsKLSAgICBlbHNlCi0gICAgICBjb2x1bW4yLnJlcGxhY2VDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShnZXREZWZhdWx0RGlzcGxheVN0cmluZyhpbnB1dFZhbHVlKSksY29sdW1uMkNvbnRyb2wpCi0gIH0KLSAgCi0gIGZ1bmN0aW9uIHJlbW92ZURldGFpbHNMYW5ndWFnZUlucHV0Um93KHRhYmxlQ29udGFpbmVySWQscm93SW5kZXgpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB0YWJsZS5kZWxldGVSb3cocm93SW5kZXgpOwotICAgIGZpeERldGFpbHNMYW5ndWFnZUlucHV0Um93TGlua3ModGFibGVDb250YWluZXJJZCk7Ci0gIH0KLSAgICAKLSAgZnVuY3Rpb24gY2FuY2VsRGV0YWlsc0xhbmd1YWdlSW5wdXRSb3dFZGl0KHRhYmxlQ29udGFpbmVySWQscm93SW5kZXgpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgcm93ID0gdGFibGUucm93c1tyb3dJbmRleF07Ci0gICAgdmFyIGNvbHVtbnMgPSByb3cuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgdmFyIGNvbHVtbjEgPSBjb2x1bW5zLml0ZW0oMSk7Ci0gICAgdmFyIGNvbHVtbjIgPSBjb2x1bW5zLml0ZW0oMik7Ci0gICAgdmFyIGNvbHVtbjMgPSBjb2x1bW5zLml0ZW0oMyk7Ci0gICAgCi0gICAgdmFyIHZpZXdJZCA9IGNvbHVtbjEuY2hpbGROb2Rlc1swXS52YWx1ZTsKLSAgICB2YXIgbGFuZ0lkID0gY29sdW1uMS5jaGlsZE5vZGVzWzFdLnZhbHVlOwotICAgIHZhciBpbnB1dFZhbHVlID0gY29sdW1uMS5jaGlsZE5vZGVzWzJdLnZhbHVlOwotICAgIHZhciByb3dBY3Rpb25MaW5rSHJlZiA9IGNvbHVtbjMuY2hpbGROb2Rlc1tjb2x1bW4zLmNoaWxkTm9kZXMubGVuZ3RoLTFdLmhyZWY7Ci0gICAgaWYgKHJvd0FjdGlvbkxpbmtIcmVmLmluZGV4T2YoImphdmFzY3JpcHQ6Y2FuY2VsIikgIT0gMCkKLSAgICAgIHJldHVybjsKLSAgICAgIAotICAgIGNvbHVtbjEuY2hpbGROb2Rlc1s0XS52YWx1ZSA9IGZhbHNlOwotICAgIAotICAgIHZhciBjb2x1bW4xQ29udHJvbCA9IGNvbHVtbjEuY2hpbGROb2Rlc1s1XTsKLSAgICB2YXIgdGVtcFNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpOwotICAgIHBvcHVsYXRlTGFuZ3VhZ2VTZWxlY3QodGVtcFNlbGVjdCk7Ci0gICAgdmFyIGxhbmd1YWdlID0gc2V0TGFuZ3VhZ2VTZWxlY3QodGVtcFNlbGVjdCxsYW5nSWQpOwotICAgIGNvbHVtbjEucmVwbGFjZUNoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGdldERlZmF1bHREaXNwbGF5U3RyaW5nKGxhbmd1YWdlKSksY29sdW1uMUNvbnRyb2wpOwotICAgIAotICAgIHZhciBjb2x1bW4yQ29udHJvbCA9IGNvbHVtbjIuY2hpbGROb2Rlc1swXTsKLSAgICBjb2x1bW4yLnJlcGxhY2VDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShnZXREZWZhdWx0RGlzcGxheVN0cmluZyhpbnB1dFZhbHVlKSksY29sdW1uMkNvbnRyb2wpOwotCi0gICAgcmVtb3ZlQ29sdW1uQ2hpbGRyZW4oY29sdW1uMyk7Ci0gICAgYWRkRGV0YWlsc0xhbmd1YWdlSW5wdXRSb3dFZGl0QWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjMscm93SW5kZXgpOwotICB9Ci0KLSAgZnVuY3Rpb24gcmVtb3ZlU2VsZWN0ZWREZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvd3ModGFibGVDb250YWluZXJJZCkKLSAgewotICAgIHJlbW92ZVNlbGVjdGVkUm93cyh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICBmaXhEZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvd0xpbmtzKHRhYmxlQ29udGFpbmVySWQpOwotICB9Ci0gIAotICBmdW5jdGlvbiBmaXhEZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvd0xpbmtzKHRhYmxlQ29udGFpbmVySWQpCi0gIHsKLSAgICA8JS8vIEZpeCB0aGUgbGlua3MlPgotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIGZvciAodmFyIGk9bnVtYmVyT2ZIZWFkZXJSb3dzO2k8dGFibGUucm93cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIHZhciByb3cgPSB0YWJsZS5yb3dzW2ldOwotICAgICAgdmFyIGNvbHVtbnMgPSByb3cuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgICB2YXIgcm93Q2hlY2tib3ggPSBjb2x1bW5zLml0ZW0oMCkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IikuaXRlbSgwKTsKLSAgICAgIAotICAgICAgZm9yICh2YXIgaj0xO2o8Y29sdW1ucy5sZW5ndGg7aisrKQotICAgICAgewotICAgICAgICBpZiAocm93Q2hlY2tib3guY2hlY2tlZCkKLSAgICAgICAgICBjb2x1bW5zLml0ZW0oaikuY2xhc3NOYW1lID0gInJvd2NvbG9yIjsKLSAgICAgICAgZWxzZQotICAgICAgICAgIGNvbHVtbnMuaXRlbShqKS5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIHZhciBjb2x1bW4xID0gY29sdW1ucy5pdGVtKDEpOwotICAgICAgdmFyIGNvbHVtbjMgPSBjb2x1bW5zLml0ZW0oMyk7Ci0gICAgICB2YXIgbGluayA9IGNvbHVtbjMuY2hpbGROb2Rlc1tjb2x1bW4zLmNoaWxkTm9kZXMubGVuZ3RoLTFdOwotICAgICAgdmFyIHJlbW92ZUxpbms7Ci0gICAgICBpZiAobGluay5ocmVmLmluZGV4T2YoImphdmFzY3JpcHQ6cmVtb3ZlIikgPT0gMCkKLSAgICAgICAgcmVtb3ZlTGluayA9IHRydWU7Ci0gICAgICBlbHNlCi0gICAgICAgIHJlbW92ZUxpbmsgPSBmYWxzZTsKLSAgICAgICAgCi0gICAgICByZW1vdmVDb2x1bW5DaGlsZHJlbihjb2x1bW4zKTsgICAgICAgICAgICAKLSAgICAgIHZhciBlZGl0YWJsZSA9IChjb2x1bW4xLmNoaWxkTm9kZXNbNF0udmFsdWUgPT0gInRydWUiKTsKLSAgICAgIGlmIChsaW5rLmhyZWYuaW5kZXhPZigiamF2YXNjcmlwdDpyZW1vdmUiKSA9PSAwKQotICAgICAgICBhZGREZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvd1JlbW92ZUFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW4zLGkpOwotICAgICAgZWxzZSBpZiAobGluay5ocmVmLmluZGV4T2YoImphdmFzY3JpcHQ6Y2FuY2VsIikgPT0gMCkKLSAgICAgICAgYWRkRGV0YWlsc0xhbmd1YWdlSW5wdXRSb3dDYW5jZWxBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uMyxpKTsKLSAgICAgIGVsc2UgaWYgKGxpbmsuaHJlZi5pbmRleE9mKCJqYXZhc2NyaXB0OmVkaXQiKSA9PSAwKQotICAgICAgICBhZGREZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvd0VkaXRBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uMyxpKTsKLSAgICB9Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGVkaXRTZWxlY3RlZERldGFpbHNMYW5ndWFnZUlucHV0Um93cyh0YWJsZUNvbnRhaW5lcklkKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgZm9yICh2YXIgaT1udW1iZXJPZkhlYWRlclJvd3M7aTx0YWJsZS5yb3dzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgdmFyIHJvd0NoZWNrYm94ID0gdGFibGUucm93c1tpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKS5pdGVtKDApOwotICAgICAgaWYgKHJvd0NoZWNrYm94LmNoZWNrZWQpCi0gICAgICAgIGVkaXREZXRhaWxzTGFuZ3VhZ2VJbnB1dFJvdyh0YWJsZUNvbnRhaW5lcklkLGkpOwotICAgIH0KLSAgfQotICAgIAotICBmdW5jdGlvbiBjYW5jZWxTZWxlY3RlZERldGFpbHNMYW5ndWFnZUlucHV0Um93cyh0YWJsZUNvbnRhaW5lcklkKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgZm9yICh2YXIgaT1udW1iZXJPZkhlYWRlclJvd3M7aTx0YWJsZS5yb3dzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgdmFyIHJvd0NoZWNrYm94ID0gdGFibGUucm93c1tpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKS5pdGVtKDApOwotICAgICAgaWYgKHJvd0NoZWNrYm94LmNoZWNrZWQpCi0gICAgICAgIGNhbmNlbERldGFpbHNMYW5ndWFnZUlucHV0Um93RWRpdCh0YWJsZUNvbnRhaW5lcklkLGkpOwotICAgIH0KLSAgfQotICAKLSAgZnVuY3Rpb24gYWRkRGV0YWlsc0lkZW50aWZpZXJSb3codGFibGVDb250YWluZXJJZCxoYXNFcnJvcikKLSAgewotICAgIHR3aXN0T3Blbih0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgdGFibGVCb2R5ID0gdGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlRCT0RZIikuaXRlbSgwKTsKLSAgICB2YXIgbmV3Um93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKLSAgICB2YXIgY29sdW1uMCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW4yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uMyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIAotICAgIHZhciByb3dDaGVja2JveCA9IGNyZWF0ZVJvd0NoZWNrYm94KCk7Ci0gICAgY29sdW1uMC5hcHBlbmRDaGlsZChyb3dDaGVja2JveCk7Ci0gICAgCi0gICAgY29sdW1uMC5jbGFzc05hbWUgPSAiY2hlY2tib3hjZWxscyI7Ci0gICAgY29sdW1uMS5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgY29sdW1uMS53aWR0aCA9ICIxMCUiOwotICAgIGNvbHVtbjIuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIGNvbHVtbjIud2lkdGggPSAiNDAlIjsKLSAgICBjb2x1bW4zLmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICBjb2x1bW4zLndpZHRoID0gIjQwJSI7Ci0gICAgY29sdW1uNC5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0KLSAgICBjb2x1bW4xLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIiIsIjwlPUFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCU+IikpOyA8JS8vIHZpZXdJZCU+Ci0gICAgY29sdW1uMS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCIiLCIiKSk7IDwlLy8gb3JpZ2luYWwga2V5IHR5cGUlPgotICAgIGNvbHVtbjEuYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiIiwiIikpOyA8JS8vIG9yaWdpbmFsIGtleSBuYW1lJT4KLSAgICBjb2x1bW4xLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIiIsIiIpKTsgPCUvLyBvcmlnaW5hbCBrZXkgdmFsdWUlPgotICAgIGNvbHVtbjEuYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiIixoYXNFcnJvcikpOyA8JS8vIG1vZGUlPgotICAgIAotICAgIHZhciBpZGVudGlmaWVyVHlwZVNlbGVjdDsKLSAgICB2YXIga2V5TmFtZVRleHRJbnB1dDsKLSAgICBpZiAoaGFzRXJyb3IpCi0gICAgewotICAgICAgaWRlbnRpZmllclR5cGVTZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKTsKLSAgICAgIGlkZW50aWZpZXJUeXBlU2VsZWN0Lm9uY2hhbmdlID0gaGFuZGxlSWRlbnRpZmllckNoYW5nZTsKLSAgICAgIHBvcHVsYXRlSWRlbnRpZmllclR5cGVTZWxlY3QoaWRlbnRpZmllclR5cGVTZWxlY3QpOwotICAgICAgaWRlbnRpZmllclR5cGVTZWxlY3QuY2xhc3NOYW1lID0gInNlbGVjdGxpc3QiOwotICAgICAgY29sdW1uMS5hcHBlbmRDaGlsZChpZGVudGlmaWVyVHlwZVNlbGVjdCk7ICAgIAotICAgIAotICAgICAga2V5TmFtZVRleHRJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Ci0gICAgICBrZXlOYW1lVGV4dElucHV0LmNsYXNzTmFtZSA9ICJ0YWJsZXRleHRlbnRlciI7Ci0gICAgICBrZXlOYW1lVGV4dElucHV0LnRpdGxlID0gIjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfSURFTlRJRklFUl9LRVlfTkFNRSIpJT4iOwotICAgICAgY29sdW1uMi5hcHBlbmRDaGlsZChrZXlOYW1lVGV4dElucHV0KTsKLQotICAgICAgdmFyIGtleVZhbHVlVGV4dElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKLSAgICAgIGtleVZhbHVlVGV4dElucHV0LmNsYXNzTmFtZSA9ICJ0YWJsZXRleHRlbnRlciI7Ci0gICAgICBrZXlWYWx1ZVRleHRJbnB1dC50aXRsZSA9ICI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX0lERU5USUZJRVJfS0VZX1ZBTFVFIiklPiI7Ci0gICAgICBjb2x1bW4zLmFwcGVuZENoaWxkKGtleVZhbHVlVGV4dElucHV0KTsgICAgICAKLSAgICAgIGFkZERldGFpbHNJZGVudGlmaWVyUm93UmVtb3ZlQWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjQsdGFibGUucm93cy5sZW5ndGgpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgY29sdW1uMS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIikpOwotICAgICAgY29sdW1uMi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIikpOwotICAgICAgY29sdW1uMy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIikpOwotICAgICAgYWRkRGV0YWlsc0lkZW50aWZpZXJSb3dFZGl0QWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjQsdGFibGUucm93cy5sZW5ndGgpOwotICAgIH0KLSAgICAKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMCk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjEpOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4yKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMyk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjQpOwotICAgIHRhYmxlQm9keS5hcHBlbmRDaGlsZChuZXdSb3cpOwotICAgIGlmIChoYXNFcnJvcikKLSAgICAgIGtleU5hbWVUZXh0SW5wdXQudmFsdWUgPSBpZGVudGlmaWVyVHlwZVNlbGVjdC5vcHRpb25zWzBdLnRleHQ7Ci0gIH0KLQotICBmdW5jdGlvbiBhZGREZXRhaWxzSWRlbnRpZmllclJvd1JlbW92ZUFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW4scm93SW5kZXgpCi0gIHsKLSAgICB2YXIgcmVtb3ZlTGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLSAgICBzZXRKU0xpbmtSb3dUYXJnZXQocmVtb3ZlTGluaywicmVtb3ZlRGV0YWlsc0lkZW50aWZpZXJSb3ciLHRhYmxlQ29udGFpbmVySWQscm93SW5kZXgpOwotICAgIHJlbW92ZUxpbmsuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX1JFTU9WRSIpKSU+IikpOwotICAgIGNvbHVtbi5hcHBlbmRDaGlsZChyZW1vdmVMaW5rKTsKLSAgfQotICAKLSAgZnVuY3Rpb24gYWRkRGV0YWlsc0lkZW50aWZpZXJSb3dFZGl0QWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbixyb3dJbmRleCkKLSAgewotICAgIHZhciBlZGl0TGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLSAgICBzZXRKU0xpbmtSb3dUYXJnZXQoZWRpdExpbmssImVkaXREZXRhaWxzSWRlbnRpZmllclJvdyIsdGFibGVDb250YWluZXJJZCxyb3dJbmRleCk7Ci0gICAgZWRpdExpbmsuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0VESVQiKSklPiIpKTsKLSAgICBjb2x1bW4uYXBwZW5kQ2hpbGQoZWRpdExpbmspOwotICB9ICAKLQotICBmdW5jdGlvbiBhZGREZXRhaWxzSWRlbnRpZmllclJvd0NhbmNlbEFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW4scm93SW5kZXgpCi0gIHsKLSAgICB2YXIgY2FuY2VsTGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLSAgICBzZXRKU0xpbmtSb3dUYXJnZXQoY2FuY2VsTGluaywiY2FuY2VsRGV0YWlsc0lkZW50aWZpZXJSb3dFZGl0Iix0YWJsZUNvbnRhaW5lcklkLHJvd0luZGV4KTsKLSAgICBjYW5jZWxMaW5rLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19DQU5DRUwiKSklPiIpKTsKLSAgICBjb2x1bW4uYXBwZW5kQ2hpbGQoY2FuY2VsTGluayk7ICAKLSAgfQotCi0gIGZ1bmN0aW9uIGVkaXREZXRhaWxzSWRlbnRpZmllclJvdyh0YWJsZUNvbnRhaW5lcklkLHJvd0luZGV4KQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHJvdyA9IHRhYmxlLnJvd3Nbcm93SW5kZXhdOwotICAgIHZhciBjb2x1bW5zID0gcm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwotICAgIAotICAgIHZhciBjb2x1bW4xID0gY29sdW1ucy5pdGVtKDEpOwotICAgIHZhciBjb2x1bW4yID0gY29sdW1ucy5pdGVtKDIpOwotICAgIHZhciBjb2x1bW4zID0gY29sdW1ucy5pdGVtKDMpOwotICAgIHZhciBjb2x1bW40ID0gY29sdW1ucy5pdGVtKDQpOwotICAgIAotICAgIHZhciB0TW9kZWxLZXkgPSBjb2x1bW4xLmNoaWxkTm9kZXNbMV0udmFsdWUgICAgIAotICAgIHZhciBrZXlOYW1lID0gY29sdW1uMS5jaGlsZE5vZGVzWzJdLnZhbHVlOwotICAgIHZhciBrZXlWYWx1ZSA9IGNvbHVtbjEuY2hpbGROb2Rlc1szXS52YWx1ZTsKLSAgICB2YXIgZWRpdGFibGUgPSAoY29sdW1uMS5jaGlsZE5vZGVzWzRdLnZhbHVlID09ICJ0cnVlIikKLSAgICBpZiAoZWRpdGFibGUpCi0gICAgICByZXR1cm47Ci0gICAgY29sdW1uMS5jaGlsZE5vZGVzWzRdLnZhbHVlID0gdHJ1ZTsKLSAgICAKLSAgICB2YXIgY29sdW1uMUNvbnRyb2wgPSBjb2x1bW4xLmNoaWxkTm9kZXNbNV07Ci0gICAgdmFyIGlkZW50aWZpZXJUeXBlU2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2VsZWN0Iik7Ci0gICAgaWRlbnRpZmllclR5cGVTZWxlY3Qub25jaGFuZ2UgPSBoYW5kbGVJZGVudGlmaWVyQ2hhbmdlOwotICAgIHBvcHVsYXRlSWRlbnRpZmllclR5cGVTZWxlY3QoaWRlbnRpZmllclR5cGVTZWxlY3QpOwotICAgIGNvbHVtbjEucmVwbGFjZUNoaWxkKGlkZW50aWZpZXJUeXBlU2VsZWN0LGNvbHVtbjFDb250cm9sKTsKLSAgICBpZGVudGlmaWVyVHlwZVNlbGVjdC5jbGFzc05hbWUgPSAic2VsZWN0bGlzdCI7Ci0gICAgc2V0VE1vZGVsS2V5U2VsZWN0KGlkZW50aWZpZXJUeXBlU2VsZWN0LHRNb2RlbEtleSk7ICAgIAotICAgIAotICAgIHZhciBjb2x1bW4yQ29udHJvbCA9IGNvbHVtbjIuY2hpbGROb2Rlc1swXTsKLSAgICB2YXIga2V5TmFtZVRleHRJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Ci0gICAgY29sdW1uMi5yZXBsYWNlQ2hpbGQoa2V5TmFtZVRleHRJbnB1dCxjb2x1bW4yQ29udHJvbCk7Ci0gICAga2V5TmFtZVRleHRJbnB1dC5jbGFzc05hbWUgPSAidGFibGV0ZXh0ZW50ZXIiOwotICAgIGtleU5hbWVUZXh0SW5wdXQudGl0bGUgPSAiPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9JREVOVElGSUVSX0tFWV9OQU1FIiklPiI7Ci0gICAga2V5TmFtZVRleHRJbnB1dC52YWx1ZSA9IGtleU5hbWU7Ci0gICAgCi0gICAgdmFyIGNvbHVtbjNDb250cm9sID0gY29sdW1uMy5jaGlsZE5vZGVzWzBdOwotICAgIHZhciBrZXlWYWx1ZVRleHRJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Ci0gICAgY29sdW1uMy5yZXBsYWNlQ2hpbGQoa2V5VmFsdWVUZXh0SW5wdXQsY29sdW1uM0NvbnRyb2wpOwotICAgIGtleVZhbHVlVGV4dElucHV0LmNsYXNzTmFtZSA9ICJ0YWJsZXRleHRlbnRlciI7Ci0gICAga2V5VmFsdWVUZXh0SW5wdXQudGl0bGUgPSAiPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9JREVOVElGSUVSX0tFWV9WQUxVRSIpJT4iOwotICAgIGtleVZhbHVlVGV4dElucHV0LnZhbHVlID0ga2V5VmFsdWU7Ci0gICAKLSAgICByZW1vdmVDb2x1bW5DaGlsZHJlbihjb2x1bW40KTsKLSAgICAKLSAgICBhZGREZXRhaWxzSWRlbnRpZmllclJvd0NhbmNlbEFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW40LHJvd0luZGV4KTsKLSAgfQotCi0gIGZ1bmN0aW9uIHNldERldGFpbHNJZGVudGlmaWVyUm93KHRhYmxlQ29udGFpbmVySWQsaW5kZXgsdmlld0lkLHRNb2RlbEtleSxrZXlOYW1lLGtleVZhbHVlKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHJvdyA9IHRhYmxlLnJvd3NbbnVtYmVyT2ZIZWFkZXJSb3dzK2luZGV4XTsKLSAgICB2YXIgY29sdW1ucyA9IHJvdy5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKTsKLSAgICB2YXIgY29sdW1uMSA9IGNvbHVtbnMuaXRlbSgxKTsKLSAgICB2YXIgY29sdW1uMiA9IGNvbHVtbnMuaXRlbSgyKTsKLSAgICB2YXIgY29sdW1uMyA9IGNvbHVtbnMuaXRlbSgzKTsKLSAgICBjb2x1bW4xLmNoaWxkTm9kZXNbMF0udmFsdWUgPSB2aWV3SWQ7Ci0gICAgY29sdW1uMS5jaGlsZE5vZGVzWzFdLnZhbHVlID0gdE1vZGVsS2V5OwotICAgIGNvbHVtbjEuY2hpbGROb2Rlc1syXS52YWx1ZSA9IGtleU5hbWU7Ci0gICAgY29sdW1uMS5jaGlsZE5vZGVzWzNdLnZhbHVlID0ga2V5VmFsdWU7Ci0gICAgdmFyIGVkaXRhYmxlID0gKGNvbHVtbjEuY2hpbGROb2Rlc1s0XS52YWx1ZSA9PSAidHJ1ZSIpOwotICAgIHZhciBjb2x1bW4xQ29udHJvbCA9IGNvbHVtbjEuY2hpbGROb2Rlc1s1XTsKLSAgICBpZiAoZWRpdGFibGUpCi0gICAgICBzZXRUTW9kZWxLZXlTZWxlY3QoY29sdW1uMUNvbnRyb2wsdE1vZGVsS2V5KTsKLSAgICBlbHNlCi0gICAgewotICAgICAgdmFyIHRlbXBTZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKTsKLSAgICAgIHBvcHVsYXRlSWRlbnRpZmllclR5cGVTZWxlY3QodGVtcFNlbGVjdCk7Ci0gICAgICB2YXIgdE1vZGVsS2V5VmFsdWUgPSBzZXRUTW9kZWxLZXlTZWxlY3QodGVtcFNlbGVjdCx0TW9kZWxLZXkpOwotICAgICAgY29sdW1uMS5yZXBsYWNlQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodE1vZGVsS2V5VmFsdWUpLGNvbHVtbjFDb250cm9sKTsKLSAgICB9Ci0gICAgICAgIAotICAgIHZhciBjb2x1bW4yQ29udHJvbCA9IGNvbHVtbjIuY2hpbGROb2Rlc1swXTsKLSAgICBpZiAoZWRpdGFibGUpCi0gICAgICBjb2x1bW4yQ29udHJvbC52YWx1ZSA9IGtleU5hbWU7Ci0gICAgZWxzZQotICAgICAgY29sdW1uMi5yZXBsYWNlQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoa2V5TmFtZSksY29sdW1uMkNvbnRyb2wpOwotICAgICAgCi0gICAgdmFyIGNvbHVtbjNDb250cm9sID0gY29sdW1uMy5jaGlsZE5vZGVzWzBdOwotICAgIGlmIChlZGl0YWJsZSkKLSAgICAgIGNvbHVtbjNDb250cm9sLnZhbHVlID0ga2V5VmFsdWU7Ci0gICAgZWxzZQotICAgICAgY29sdW1uMy5yZXBsYWNlQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoa2V5VmFsdWUpLGNvbHVtbjNDb250cm9sKTsKLSAgfQotCi0gIGZ1bmN0aW9uIHJlbW92ZURldGFpbHNJZGVudGlmaWVyUm93KHRhYmxlQ29udGFpbmVySWQscm93SW5kZXgpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB0YWJsZS5kZWxldGVSb3cocm93SW5kZXgpOwotICAgIGZpeERldGFpbHNJZGVudGlmaWVyUm93TGlua3ModGFibGVDb250YWluZXJJZCk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGNhbmNlbERldGFpbHNJZGVudGlmaWVyUm93RWRpdCh0YWJsZUNvbnRhaW5lcklkLHJvd0luZGV4KQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHJvdyA9IHRhYmxlLnJvd3Nbcm93SW5kZXhdOwotICAgIHZhciBjb2x1bW5zID0gcm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwotICAgIHZhciBjb2x1bW4xID0gY29sdW1ucy5pdGVtKDEpOwotICAgIHZhciBjb2x1bW4yID0gY29sdW1ucy5pdGVtKDIpOwotICAgIHZhciBjb2x1bW4zID0gY29sdW1ucy5pdGVtKDMpOwotICAgIHZhciBjb2x1bW40ID0gY29sdW1ucy5pdGVtKDQpOwotICAgIAotICAgIHZhciB2aWV3SWQgPSBjb2x1bW4xLmNoaWxkTm9kZXNbMF0udmFsdWU7Ci0gICAgdmFyIHRNb2RlbEtleSA9IGNvbHVtbjEuY2hpbGROb2Rlc1sxXS52YWx1ZTsKLSAgICB2YXIga2V5TmFtZSA9IGNvbHVtbjEuY2hpbGROb2Rlc1syXS52YWx1ZTsKLSAgICB2YXIga2V5VmFsdWUgPSBjb2x1bW4xLmNoaWxkTm9kZXNbM10udmFsdWU7Ci0gICAgdmFyIHJvd0FjdGlvbkxpbmtIcmVmID0gY29sdW1uNC5jaGlsZE5vZGVzW2NvbHVtbjQuY2hpbGROb2Rlcy5sZW5ndGgtMV0uaHJlZjsKLSAgICBpZiAocm93QWN0aW9uTGlua0hyZWYuaW5kZXhPZigiamF2YXNjcmlwdDpjYW5jZWwiKSAhPSAwKQotICAgICAgcmV0dXJuOwotICAgIGNvbHVtbjEuY2hpbGROb2Rlc1s0XS52YWx1ZSA9IGZhbHNlOwotICAgIAotICAgIHZhciBjb2x1bW4xQ29udHJvbCA9IGNvbHVtbjEuY2hpbGROb2Rlc1s1XTsKLSAgICB2YXIgdGVtcFNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpOwotICAgIHBvcHVsYXRlSWRlbnRpZmllclR5cGVTZWxlY3QodGVtcFNlbGVjdCk7Ci0gICAgdmFyIHRNb2RlbEtleVZhbHVlID0gc2V0VE1vZGVsS2V5U2VsZWN0KHRlbXBTZWxlY3QsdE1vZGVsS2V5KTsKLSAgICBjb2x1bW4xLnJlcGxhY2VDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0TW9kZWxLZXlWYWx1ZSksY29sdW1uMUNvbnRyb2wpOwotICAgIAotICAgIHZhciBjb2x1bW4yQ29udHJvbCA9IGNvbHVtbjIuY2hpbGROb2Rlc1swXTsKLSAgICBjb2x1bW4yLnJlcGxhY2VDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShrZXlOYW1lKSxjb2x1bW4yQ29udHJvbCk7Ci0gICAgCi0gICAgdmFyIGNvbHVtbjNDb250cm9sID0gY29sdW1uMy5jaGlsZE5vZGVzWzBdOwotICAgIGNvbHVtbjMucmVwbGFjZUNoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGtleVZhbHVlKSxjb2x1bW4zQ29udHJvbCk7Ci0KLSAgICByZW1vdmVDb2x1bW5DaGlsZHJlbihjb2x1bW40KTsKLSAgICBhZGREZXRhaWxzSWRlbnRpZmllclJvd0VkaXRBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uNCxyb3dJbmRleCk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIHJlbW92ZVNlbGVjdGVkRGV0YWlsc0lkZW50aWZpZXJSb3dzKHRhYmxlQ29udGFpbmVySWQpCi0gIHsKLSAgICByZW1vdmVTZWxlY3RlZFJvd3ModGFibGVDb250YWluZXJJZCk7Ci0gICAgPCUvLyBGaXggdGhlIGxpbmtzJT4KLSAgICBmaXhEZXRhaWxzSWRlbnRpZmllclJvd0xpbmtzKHRhYmxlQ29udGFpbmVySWQpOwotICB9Ci0gIAotICBmdW5jdGlvbiBmaXhEZXRhaWxzSWRlbnRpZmllclJvd0xpbmtzKHRhYmxlQ29udGFpbmVySWQpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICBmb3IgKHZhciBpPW51bWJlck9mSGVhZGVyUm93cztpPHRhYmxlLnJvd3MubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICB2YXIgcm93ID0gdGFibGUucm93c1tpXTsKLSAgICAgIHZhciBjb2x1bW5zID0gcm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwotICAgICAgdmFyIHJvd0NoZWNrYm94ID0gY29sdW1ucy5pdGVtKDApLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLml0ZW0oMCk7Ci0gICAgICBmb3IgKHZhciBqPTE7ajxjb2x1bW5zLmxlbmd0aDtqKyspCi0gICAgICB7Ci0gICAgICAgIGlmIChyb3dDaGVja2JveC5jaGVja2VkKQotICAgICAgICAgIGNvbHVtbnMuaXRlbShqKS5jbGFzc05hbWUgPSAicm93Y29sb3IiOwotICAgICAgICBlbHNlCi0gICAgICAgICAgY29sdW1ucy5pdGVtKGopLmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICAgIH0KLSAgICAgIHZhciBjb2x1bW4xID0gY29sdW1ucy5pdGVtKDEpOwotICAgICAgdmFyIHZpZXdJZCA9IGNvbHVtbjEuY2hpbGROb2Rlc1swXS52YWx1ZTsKLSAgICAgIHZhciBjb2x1bW40ID0gY29sdW1ucy5pdGVtKDQpOwotICAgICAgdmFyIGxpbmsgPSBjb2x1bW40LmNoaWxkTm9kZXNbY29sdW1uNC5jaGlsZE5vZGVzLmxlbmd0aC0xXTsKLSAgICAgIHZhciByZW1vdmVMaW5rOwotICAgICAgaWYgKGxpbmsuaHJlZi5pbmRleE9mKCJqYXZhc2NyaXB0OnJlbW92ZSIpID09IDApCi0gICAgICAgIHJlbW92ZUxpbmsgPSB0cnVlOwotICAgICAgZWxzZQotICAgICAgICByZW1vdmVMaW5rID0gZmFsc2U7ICAgICAgCi0gICAgICByZW1vdmVDb2x1bW5DaGlsZHJlbihjb2x1bW40KTsKLSAgICAgIAotICAgICAgaWYgKGxpbmsuaHJlZi5pbmRleE9mKCJqYXZhc2NyaXB0OnJlbW92ZSIpID09IDApCi0gICAgICAgIGFkZERldGFpbHNJZGVudGlmaWVyUm93UmVtb3ZlQWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjQsaSk7Ci0gICAgICBlbHNlIGlmIChsaW5rLmhyZWYuaW5kZXhPZigiamF2YXNjcmlwdDplZGl0IikgPT0gMCkKLSAgICAgICAgYWRkRGV0YWlsc0lkZW50aWZpZXJSb3dFZGl0QWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjQsaSk7Ci0gICAgICBlbHNlIGlmIChsaW5rLmhyZWYuaW5kZXhPZigiamF2YXNjcmlwdDpjYW5jZWwiKSA9PSAwKQotICAgICAgICBhZGREZXRhaWxzSWRlbnRpZmllclJvd0NhbmNlbEFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW40LGkpOwotICAgIH0gIAotICB9Ci0gIAotICBmdW5jdGlvbiBlZGl0U2VsZWN0ZWREZXRhaWxzSWRlbnRpZmllclJvd3ModGFibGVDb250YWluZXJJZCkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIGZvciAodmFyIGk9bnVtYmVyT2ZIZWFkZXJSb3dzO2k8dGFibGUucm93cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIHZhciByb3dDaGVja2JveCA9IHRhYmxlLnJvd3NbaV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IikuaXRlbSgwKTsKLSAgICAgIGlmIChyb3dDaGVja2JveC5jaGVja2VkKQotICAgICAgICBlZGl0RGV0YWlsc0lkZW50aWZpZXJSb3codGFibGVDb250YWluZXJJZCxpKTsKLSAgICB9ICAKLSAgfQotICAKLSAgZnVuY3Rpb24gY2FuY2VsU2VsZWN0ZWREZXRhaWxzSWRlbnRpZmllclJvd3ModGFibGVDb250YWluZXJJZCkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIGZvciAodmFyIGk9bnVtYmVyT2ZIZWFkZXJSb3dzO2k8dGFibGUucm93cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIHZhciByb3dDaGVja2JveCA9IHRhYmxlLnJvd3NbaV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IikuaXRlbSgwKTsKLSAgICAgIGlmIChyb3dDaGVja2JveC5jaGVja2VkKQotICAgICAgICBjYW5jZWxEZXRhaWxzSWRlbnRpZmllclJvd0VkaXQodGFibGVDb250YWluZXJJZCxpKTsKLSAgICB9ICAKLSAgfQotICAKLSAgZnVuY3Rpb24gYWRkRGV0YWlsc0NhdGVnb3J5Um93KHRhYmxlQ29udGFpbmVySWQsaGFzRXJyb3IpCi0gIHsKLSAgICB0d2lzdE9wZW4odGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHRhYmxlQm9keSA9IHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJUQk9EWSIpLml0ZW0oMCk7Ci0gICAgdmFyIG5ld1JvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7Ci0gICAgdmFyIGNvbHVtbjAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW4xID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW40ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICAKLSAgICB2YXIgcm93Q2hlY2tib3ggPSBjcmVhdGVSb3dDaGVja2JveCgpOwotICAgIGNvbHVtbjAuYXBwZW5kQ2hpbGQocm93Q2hlY2tib3gpOwotICAgIAotICAgIGNvbHVtbjAuY2xhc3NOYW1lID0gImNoZWNrYm94Y2VsbHMiOwotICAgIGNvbHVtbjEuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIGNvbHVtbjEud2lkdGggPSAiNSUiOwotICAgIGNvbHVtbjIuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIGNvbHVtbjIud2lkdGggPSAiNTUlIjsKLSAgICBjb2x1bW4zLmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICBjb2x1bW4zLndpZHRoID0gIjI1JSI7Ci0gICAgY29sdW1uNC5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0KLSAgICBjb2x1bW4xLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIiIsIjwlPUFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCU+IikpOyA8JS8vIHZpZXdJZCU+Ci0gICAgY29sdW1uMS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCIiLCIiKSk7IDwlLy8gb3JpZ2luYWwga2V5IHR5cGUlPgotICAgIGNvbHVtbjEuYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiIiwiIikpOyA8JS8vIG9yaWdpbmFsIGtleSBuYW1lJT4KLSAgICBjb2x1bW4xLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIiIsIiIpKTsgPCUvLyBvcmlnaW5hbCBrZXkgdmFsdWUlPgotICAgIGNvbHVtbjEuYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiIixoYXNFcnJvcikpOyA8JS8vIG1vZGUlPgotICAgIAotICAgIGlmIChoYXNFcnJvcikKLSAgICB7Ci0gICAgICB2YXIgY2F0ZWdvcnlUeXBlU2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2VsZWN0Iik7Ci0gICAgICBwb3B1bGF0ZUNhdGVnb3J5VHlwZVNlbGVjdChjYXRlZ29yeVR5cGVTZWxlY3QpOwotICAgICAgY2F0ZWdvcnlUeXBlU2VsZWN0LmNsYXNzTmFtZSA9ICJzZWxlY3RsaXN0IjsKLSAgICAgIGNvbHVtbjEuYXBwZW5kQ2hpbGQoY2F0ZWdvcnlUeXBlU2VsZWN0KTsKLSAgICAgIAotICAgICAgdmFyIGtleU5hbWVUZXh0SW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotICAgICAga2V5TmFtZVRleHRJbnB1dC5jbGFzc05hbWUgPSAidGFibGV0ZXh0ZW50ZXIiOwotICAgICAga2V5TmFtZVRleHRJbnB1dC50aXRsZSA9ICI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX0NBVEVHT1JZX0tFWV9OQU1FIiklPiI7Ci0gICAgICBjb2x1bW4yLmFwcGVuZENoaWxkKGtleU5hbWVUZXh0SW5wdXQpOwotICAgICAgCi0gICAgICB2YXIga2V5VmFsdWVUZXh0SW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotICAgICAga2V5VmFsdWVUZXh0SW5wdXQuY2xhc3NOYW1lID0gInRhYmxldGV4dGVudGVyIjsKLSAgICAgIGtleVZhbHVlVGV4dElucHV0LnRpdGxlID0gIjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfQ0FURUdPUllfS0VZX1ZBTFVFIiklPiI7Ci0gICAgICBjb2x1bW4zLmFwcGVuZENoaWxkKGtleVZhbHVlVGV4dElucHV0KTsKLSAgICAgIGFkZENhdGVnb3J5Um93QnJvd3NlTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjQsdGFibGUucm93cy5sZW5ndGgpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgY29sdW1uMS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIikpOwotICAgICAgY29sdW1uMi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIikpOwotICAgICAgY29sdW1uMy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIikpOwotICAgICAgYWRkRGV0YWlsc0NhdGVnb3J5Um93RWRpdEFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW40LHRhYmxlLnJvd3MubGVuZ3RoKTsKLSAgICB9Ci0gICAgICAKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMCk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjEpOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4yKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMyk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjQpOwotICAgIHRhYmxlQm9keS5hcHBlbmRDaGlsZChuZXdSb3cpOyAgICAgIAotICB9Ci0KLSAgZnVuY3Rpb24gYWRkRGV0YWlsc0NhdGVnb3J5Um93Q2FuY2VsQWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbixyb3dJbmRleCkKLSAgewotICAgIHZhciBjYW5jZWxMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotICAgIHNldEpTTGlua1Jvd1RhcmdldChjYW5jZWxMaW5rLCJjYW5jZWxEZXRhaWxzQ2F0ZWdvcnlSb3dFZGl0Iix0YWJsZUNvbnRhaW5lcklkLHJvd0luZGV4KTsKLSAgICBjYW5jZWxMaW5rLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19DQU5DRUwiKSklPiIpKTsKLSAgICBjb2x1bW4uYXBwZW5kQ2hpbGQoY2FuY2VsTGluayk7ICAKLSAgfQotCi0gIGZ1bmN0aW9uIGFkZERldGFpbHNDYXRlZ29yeVJvd0Jyb3dzZUNhbmNlbEFjdGlvbkxpbmtzKHRhYmxlQ29udGFpbmVySWQsY29sdW1uLHJvd0luZGV4KQotICB7Ci0gICAgYWRkQ2F0ZWdvcnlSb3dCcm93c2VMaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uLHJvd0luZGV4KTsKLSAgICBjb2x1bW4uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiAiKSk7Ci0gICAgYWRkRGV0YWlsc0NhdGVnb3J5Um93Q2FuY2VsQWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbixyb3dJbmRleCk7Ci0gIH0KLQotICBmdW5jdGlvbiBhZGREZXRhaWxzQ2F0ZWdvcnlSb3dFZGl0QWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbixyb3dJbmRleCkKLSAgewotICAgIHZhciBlZGl0TGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLSAgICBzZXRKU0xpbmtSb3dUYXJnZXQoZWRpdExpbmssImVkaXREZXRhaWxzQ2F0ZWdvcnlSb3ciLHRhYmxlQ29udGFpbmVySWQscm93SW5kZXgpOwotICAgIGVkaXRMaW5rLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19FRElUIikpJT4iKSk7Ci0gICAgY29sdW1uLmFwcGVuZENoaWxkKGVkaXRMaW5rKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGFkZERldGFpbHNDYXRlZ29yeVJvd1JlbW92ZUFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW4scm93SW5kZXgpCi0gIHsKLSAgICB2YXIgcmVtb3ZlTGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLSAgICBzZXRKU0xpbmtSb3dUYXJnZXQocmVtb3ZlTGluaywicmVtb3ZlRGV0YWlsc0NhdGVnb3J5Um93Iix0YWJsZUNvbnRhaW5lcklkLHJvd0luZGV4KTsKLSAgICByZW1vdmVMaW5rLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19SRU1PVkUiKSklPiIpKTsKLSAgICBjb2x1bW4uYXBwZW5kQ2hpbGQocmVtb3ZlTGluayk7ICAKLSAgfQotCi0gIGZ1bmN0aW9uIGFkZERldGFpbHNDYXRlZ29yeVJvd0Jyb3dzZVJlbW92ZUFjdGlvbkxpbmtzKHRhYmxlQ29udGFpbmVySWQsY29sdW1uLHJvd0luZGV4KQotICB7Ci0gICAgYWRkQ2F0ZWdvcnlSb3dCcm93c2VMaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uLHJvd0luZGV4KTsKLSAgICBjb2x1bW4uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiAiKSk7Ci0gICAgYWRkRGV0YWlsc0NhdGVnb3J5Um93UmVtb3ZlQWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbixyb3dJbmRleCk7Ci0gIH0KLQotICBmdW5jdGlvbiBlZGl0RGV0YWlsc0NhdGVnb3J5Um93KHRhYmxlQ29udGFpbmVySWQscm93SW5kZXgpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgcm93ID0gdGFibGUucm93c1tyb3dJbmRleF07Ci0gICAgdmFyIGNvbHVtbnMgPSByb3cuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgCi0gICAgdmFyIGNvbHVtbjEgPSBjb2x1bW5zLml0ZW0oMSk7Ci0gICAgdmFyIGNvbHVtbjIgPSBjb2x1bW5zLml0ZW0oMik7Ci0gICAgdmFyIGNvbHVtbjMgPSBjb2x1bW5zLml0ZW0oMyk7Ci0gICAgdmFyIGNvbHVtbjQgPSBjb2x1bW5zLml0ZW0oNCk7Ci0gICAgCi0gICAgdmFyIHRNb2RlbEtleSA9IGNvbHVtbjEuY2hpbGROb2Rlc1sxXS52YWx1ZQotICAgIHZhciBrZXlOYW1lID0gY29sdW1uMS5jaGlsZE5vZGVzWzJdLnZhbHVlOwotICAgIHZhciBrZXlWYWx1ZSA9IGNvbHVtbjEuY2hpbGROb2Rlc1szXS52YWx1ZTsKLSAgICB2YXIgZWRpdGFibGUgPSAoY29sdW1uMS5jaGlsZE5vZGVzWzRdLnZhbHVlID09ICJ0cnVlIikKLSAgICBpZiAoZWRpdGFibGUpCi0gICAgICByZXR1cm47Ci0gICAgY29sdW1uMS5jaGlsZE5vZGVzWzRdLnZhbHVlID0gdHJ1ZTsKLSAgICAKLSAgICB2YXIgY29sdW1uMUNvbnRyb2wgPSBjb2x1bW4xLmNoaWxkTm9kZXNbNV07Ci0gICAgdmFyIGNhdGVnb3J5VHlwZVNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpOwotICAgIHBvcHVsYXRlQ2F0ZWdvcnlUeXBlU2VsZWN0KGNhdGVnb3J5VHlwZVNlbGVjdCk7Ci0gICAgY29sdW1uMS5yZXBsYWNlQ2hpbGQoY2F0ZWdvcnlUeXBlU2VsZWN0LGNvbHVtbjFDb250cm9sKTsKLSAgICBjYXRlZ29yeVR5cGVTZWxlY3QuY2xhc3NOYW1lID0gInNlbGVjdGxpc3QiOwotICAgIHNldFRNb2RlbEtleVNlbGVjdChjYXRlZ29yeVR5cGVTZWxlY3QsdE1vZGVsS2V5KTsgICAgCi0gICAgCi0gICAgdmFyIGNvbHVtbjJDb250cm9sID0gY29sdW1uMi5jaGlsZE5vZGVzWzBdOwotICAgIHZhciBrZXlOYW1lVGV4dElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKLSAgICBjb2x1bW4yLnJlcGxhY2VDaGlsZChrZXlOYW1lVGV4dElucHV0LGNvbHVtbjJDb250cm9sKTsKLSAgICBrZXlOYW1lVGV4dElucHV0LmNsYXNzTmFtZSA9ICJ0YWJsZXRleHRlbnRlciI7Ci0gICAga2V5TmFtZVRleHRJbnB1dC50aXRsZSA9ICI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX0NBVEVHT1JZX0tFWV9OQU1FIiklPiI7Ci0gICAga2V5TmFtZVRleHRJbnB1dC52YWx1ZSA9IGtleU5hbWU7Ci0gICAgCi0gICAgdmFyIGNvbHVtbjNDb250cm9sID0gY29sdW1uMy5jaGlsZE5vZGVzWzBdOwotICAgIHZhciBrZXlWYWx1ZVRleHRJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Ci0gICAgY29sdW1uMy5yZXBsYWNlQ2hpbGQoa2V5VmFsdWVUZXh0SW5wdXQsY29sdW1uM0NvbnRyb2wpOwotICAgIGtleVZhbHVlVGV4dElucHV0LmNsYXNzTmFtZSA9ICJ0YWJsZXRleHRlbnRlciI7Ci0gICAga2V5VmFsdWVUZXh0SW5wdXQudGl0bGUgPSAiPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9DQVRFR09SWV9LRVlfVkFMVUUiKSU+IjsKLSAgICBrZXlWYWx1ZVRleHRJbnB1dC52YWx1ZSA9IGtleVZhbHVlOwotICAgIAotICAgIHJlbW92ZUNvbHVtbkNoaWxkcmVuKGNvbHVtbjQpOwotICAgIAotICAgIGFkZERldGFpbHNDYXRlZ29yeVJvd0Jyb3dzZUNhbmNlbEFjdGlvbkxpbmtzKHRhYmxlQ29udGFpbmVySWQsY29sdW1uNCxyb3dJbmRleCk7Ci0gIH0KLQotICBmdW5jdGlvbiBzZXREZXRhaWxzQ2F0ZWdvcnlSb3codGFibGVDb250YWluZXJJZCxpbmRleCx2aWV3SWQsdE1vZGVsS2V5LGtleU5hbWUsa2V5VmFsdWUpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgcm93ID0gdGFibGUucm93c1tudW1iZXJPZkhlYWRlclJvd3MraW5kZXhdOwotICAgIHZhciBjb2x1bW5zID0gcm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwotICAgIHZhciBjb2x1bW4xID0gY29sdW1ucy5pdGVtKDEpOwotICAgIHZhciBjb2x1bW4yID0gY29sdW1ucy5pdGVtKDIpOwotICAgIHZhciBjb2x1bW4zID0gY29sdW1ucy5pdGVtKDMpOwotICAgIGNvbHVtbjEuY2hpbGROb2Rlc1swXS52YWx1ZSA9IHZpZXdJZDsKLSAgICBjb2x1bW4xLmNoaWxkTm9kZXNbMV0udmFsdWUgPSB0TW9kZWxLZXk7Ci0gICAgY29sdW1uMS5jaGlsZE5vZGVzWzJdLnZhbHVlID0ga2V5TmFtZTsKLSAgICBjb2x1bW4xLmNoaWxkTm9kZXNbM10udmFsdWUgPSBrZXlWYWx1ZTsKLSAgICB2YXIgZWRpdGFibGUgPSAoY29sdW1uMS5jaGlsZE5vZGVzWzRdLnZhbHVlID09ICJ0cnVlIik7Ci0gICAgCi0gICAgdmFyIGNvbHVtbjFDb250cm9sID0gY29sdW1uMS5jaGlsZE5vZGVzWzVdOwotICAgIGlmIChlZGl0YWJsZSkKLSAgICAgIHNldFRNb2RlbEtleVNlbGVjdChjb2x1bW4xQ29udHJvbCx0TW9kZWxLZXkpOwotICAgIGVsc2UKLSAgICB7Ci0gICAgICB2YXIgdGVtcFNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpOwotICAgICAgcG9wdWxhdGVDYXRlZ29yeVR5cGVTZWxlY3QodGVtcFNlbGVjdCk7Ci0gICAgICB2YXIgdE1vZGVsS2V5VmFsdWUgPSBzZXRUTW9kZWxLZXlTZWxlY3QodGVtcFNlbGVjdCx0TW9kZWxLZXkpOwotICAgICAgY29sdW1uMS5yZXBsYWNlQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodE1vZGVsS2V5VmFsdWUpLGNvbHVtbjFDb250cm9sKTsKLSAgICB9Ci0gICAgICAgIAotICAgIHZhciBjb2x1bW4yQ29udHJvbCA9IGNvbHVtbjIuY2hpbGROb2Rlc1swXTsKLSAgICBpZiAoZWRpdGFibGUpCi0gICAgICBjb2x1bW4yQ29udHJvbC52YWx1ZSA9IGtleU5hbWU7Ci0gICAgZWxzZQotICAgICAgY29sdW1uMi5yZXBsYWNlQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoa2V5TmFtZSksY29sdW1uMkNvbnRyb2wpOwotICAgICAgCi0gICAgdmFyIGNvbHVtbjNDb250cm9sID0gY29sdW1uMy5jaGlsZE5vZGVzWzBdOwotICAgIGlmIChlZGl0YWJsZSkKLSAgICAgIGNvbHVtbjNDb250cm9sLnZhbHVlID0ga2V5VmFsdWU7Ci0gICAgZWxzZQotICAgICAgY29sdW1uMy5yZXBsYWNlQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoa2V5VmFsdWUpLGNvbHVtbjNDb250cm9sKTsgCi0gIH0KLQotICBmdW5jdGlvbiByZW1vdmVEZXRhaWxzQ2F0ZWdvcnlSb3codGFibGVDb250YWluZXJJZCxyb3dJbmRleCkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHRhYmxlLmRlbGV0ZVJvdyhyb3dJbmRleCk7Ci0gICAgZml4RGV0YWlsc0NhdGVnb3J5Um93TGlua3ModGFibGVDb250YWluZXJJZCk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGNhbmNlbERldGFpbHNDYXRlZ29yeVJvd0VkaXQodGFibGVDb250YWluZXJJZCxyb3dJbmRleCkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciByb3cgPSB0YWJsZS5yb3dzW3Jvd0luZGV4XTsKLSAgICB2YXIgY29sdW1ucyA9IHJvdy5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKTsKLSAgICB2YXIgY29sdW1uMSA9IGNvbHVtbnMuaXRlbSgxKTsKLSAgICB2YXIgY29sdW1uMiA9IGNvbHVtbnMuaXRlbSgyKTsKLSAgICB2YXIgY29sdW1uMyA9IGNvbHVtbnMuaXRlbSgzKTsKLSAgICB2YXIgY29sdW1uNCA9IGNvbHVtbnMuaXRlbSg0KTsKLSAgICAKLSAgICB2YXIgdmlld0lkID0gY29sdW1uMS5jaGlsZE5vZGVzWzBdLnZhbHVlOwotICAgIHZhciB0TW9kZWxLZXkgPSBjb2x1bW4xLmNoaWxkTm9kZXNbMV0udmFsdWU7Ci0gICAgdmFyIGtleU5hbWUgPSBjb2x1bW4xLmNoaWxkTm9kZXNbMl0udmFsdWU7Ci0gICAgdmFyIGtleVZhbHVlID0gY29sdW1uMS5jaGlsZE5vZGVzWzNdLnZhbHVlOwotICAgIHZhciByb3dBY3Rpb25MaW5rSHJlZiA9IGNvbHVtbjQuY2hpbGROb2Rlc1tjb2x1bW40LmNoaWxkTm9kZXMubGVuZ3RoLTFdLmhyZWY7Ci0gICAgaWYgKHJvd0FjdGlvbkxpbmtIcmVmLmluZGV4T2YoImphdmFzY3JpcHQ6Y2FuY2VsIikgIT0gMCkKLSAgICAgIHJldHVybjsKLSAgICBjb2x1bW4xLmNoaWxkTm9kZXNbNF0udmFsdWUgPSBmYWxzZTsKLSAgICAKLSAgICB2YXIgY29sdW1uMUNvbnRyb2wgPSBjb2x1bW4xLmNoaWxkTm9kZXNbNV07Ci0gICAgdmFyIHRlbXBTZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKTsKLSAgICBwb3B1bGF0ZUNhdGVnb3J5VHlwZVNlbGVjdCh0ZW1wU2VsZWN0KTsKLSAgICB2YXIgdE1vZGVsS2V5VmFsdWUgPSBzZXRUTW9kZWxLZXlTZWxlY3QodGVtcFNlbGVjdCx0TW9kZWxLZXkpOwotICAgIGNvbHVtbjEucmVwbGFjZUNoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRNb2RlbEtleVZhbHVlKSxjb2x1bW4xQ29udHJvbCk7Ci0gICAgCi0gICAgdmFyIGNvbHVtbjJDb250cm9sID0gY29sdW1uMi5jaGlsZE5vZGVzWzBdOwotICAgIGNvbHVtbjIucmVwbGFjZUNoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGtleU5hbWUpLGNvbHVtbjJDb250cm9sKTsKLSAgICAKLSAgICB2YXIgY29sdW1uM0NvbnRyb2wgPSBjb2x1bW4zLmNoaWxkTm9kZXNbMF07Ci0gICAgY29sdW1uMy5yZXBsYWNlQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoa2V5VmFsdWUpLGNvbHVtbjNDb250cm9sKTsKLQotICAgIHJlbW92ZUNvbHVtbkNoaWxkcmVuKGNvbHVtbjQpOyAgICAKLSAgICBhZGREZXRhaWxzQ2F0ZWdvcnlSb3dFZGl0QWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjQscm93SW5kZXgpOwotICAgIGlmIChyb3dJbmRleCA9PSB0YXJnZXRDYXRlZ29yeVJvdykKLSAgICAgIGNsb3NlQ2F0ZWdvcnlCcm93c2VyKCk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIHJlbW92ZVNlbGVjdGVkRGV0YWlsc0NhdGVnb3J5Um93cyh0YWJsZUNvbnRhaW5lcklkKQotICB7Ci0gICAgcmVtb3ZlU2VsZWN0ZWRSb3dzKHRhYmxlQ29udGFpbmVySWQpOwotICAgIDwlLy8gRml4IHRoZSBsaW5rcyU+Ci0gICAgZml4RGV0YWlsc0NhdGVnb3J5Um93TGlua3ModGFibGVDb250YWluZXJJZCk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGZpeERldGFpbHNDYXRlZ29yeVJvd0xpbmtzKHRhYmxlQ29udGFpbmVySWQpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICBmb3IgKHZhciBpPW51bWJlck9mSGVhZGVyUm93cztpPHRhYmxlLnJvd3MubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICB2YXIgcm93ID0gdGFibGUucm93c1tpXTsKLSAgICAgIHZhciBjb2x1bW5zID0gcm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwotICAgICAgdmFyIHJvd0NoZWNrYm94ID0gY29sdW1ucy5pdGVtKDApLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLml0ZW0oMCk7Ci0gICAgICBmb3IgKHZhciBqPTE7ajxjb2x1bW5zLmxlbmd0aDtqKyspCi0gICAgICB7Ci0gICAgICAgIGlmIChyb3dDaGVja2JveC5jaGVja2VkKQotICAgICAgICAgIGNvbHVtbnMuaXRlbShqKS5jbGFzc05hbWUgPSAicm93Y29sb3IiOwotICAgICAgICBlbHNlCi0gICAgICAgICAgY29sdW1ucy5pdGVtKGopLmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICAgIH0KLSAgICAgIHZhciBjb2x1bW4xID0gY29sdW1ucy5pdGVtKDEpOwotICAgICAgdmFyIHZpZXdJZCA9IGNvbHVtbjEuY2hpbGROb2Rlc1swXS52YWx1ZTsKLSAgICAgIHZhciBjb2x1bW40ID0gY29sdW1ucy5pdGVtKDQpOwotPCUgICAgICAKLSAgICAgIC8vIEJyb3dzZSwgUmVtb3ZlCi0gICAgICAvLyBCcm93c2UsIENhbmNlbAotICAgICAgLy8gRWRpdAotICAgICAgLy8gQnJvd3NlCi0lPiAgICAgIAotICAgICAgdmFyIGxhc3RMaW5rID0gY29sdW1uNC5jaGlsZE5vZGVzW2NvbHVtbjQuY2hpbGROb2Rlcy5sZW5ndGgtMV07Ci0gICAgICByZW1vdmVDb2x1bW5DaGlsZHJlbihjb2x1bW40KTsKLSAgICAgIGlmIChsYXN0TGluay5ocmVmLmluZGV4T2YoImphdmFzY3JpcHQ6cmVtb3ZlIikgPT0gMCkKLSAgICAgICAgYWRkRGV0YWlsc0NhdGVnb3J5Um93QnJvd3NlUmVtb3ZlQWN0aW9uTGlua3ModGFibGVDb250YWluZXJJZCxjb2x1bW40LGkpOwotICAgICAgZWxzZSBpZiAobGFzdExpbmsuaHJlZi5pbmRleE9mKCJqYXZhc2NyaXB0OmNhbmNlbCIpID09IDApCi0gICAgICAgIGFkZERldGFpbHNDYXRlZ29yeVJvd0Jyb3dzZUNhbmNlbEFjdGlvbkxpbmtzKHRhYmxlQ29udGFpbmVySWQsY29sdW1uNCxpKTsKLSAgICAgIGVsc2UgaWYgKGxhc3RMaW5rLmhyZWYuaW5kZXhPZigiamF2YXNjcmlwdDplZGl0IikgPT0gMCkKLSAgICAgICAgYWRkRGV0YWlsc0NhdGVnb3J5Um93RWRpdEFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW40LGkpOwotICAgICAgZWxzZSBpZiAobGFzdExpbmsuaHJlZi5pbmRleE9mKCJqYXZhc2NyaXB0Om9wZW4iKSA9PSAwKQotICAgICAgICBhZGRDYXRlZ29yeVJvd0Jyb3dzZUxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW40LGkpOwotICAgIH0gIAotICB9Ci0gIAotICBmdW5jdGlvbiBlZGl0U2VsZWN0ZWREZXRhaWxzQ2F0ZWdvcnlSb3dzKHRhYmxlQ29udGFpbmVySWQpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICBmb3IgKHZhciBpPW51bWJlck9mSGVhZGVyUm93cztpPHRhYmxlLnJvd3MubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICB2YXIgcm93Q2hlY2tib3ggPSB0YWJsZS5yb3dzW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLml0ZW0oMCk7Ci0gICAgICBpZiAocm93Q2hlY2tib3guY2hlY2tlZCkKLSAgICAgICAgZWRpdERldGFpbHNDYXRlZ29yeVJvdyh0YWJsZUNvbnRhaW5lcklkLGkpOwotICAgIH0gIAotICB9Ci0gIAotICBmdW5jdGlvbiBjYW5jZWxTZWxlY3RlZERldGFpbHNDYXRlZ29yeVJvd3ModGFibGVDb250YWluZXJJZCkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIGZvciAodmFyIGk9bnVtYmVyT2ZIZWFkZXJSb3dzO2k8dGFibGUucm93cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIHZhciByb3dDaGVja2JveCA9IHRhYmxlLnJvd3NbaV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IikuaXRlbSgwKTsKLSAgICAgIGlmIChyb3dDaGVja2JveC5jaGVja2VkKQotICAgICAgICBjYW5jZWxEZXRhaWxzQ2F0ZWdvcnlSb3dFZGl0KHRhYmxlQ29udGFpbmVySWQsaSk7Ci0gICAgfSAgCi0gIH0KLSAgCi0gIGZ1bmN0aW9uIGFkZERldGFpbHNVc2VyRGVmaW5lZENhdGVnb3J5Um93KHRhYmxlQ29udGFpbmVySWQsdE1vZGVsS2V5LGNhdGVnb3J5TmFtZSxpc0NoZWNrZWQsZmlsZU5hbWUsaGFzRXJyb3IpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgdGFibGVCb2R5ID0gdGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlRCT0RZIikuaXRlbSgwKTsKLSAgICB2YXIgbmV3Um93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKLSAgICAvL3ZhciBjb2x1bW4wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgLy92YXIgY29sdW1uMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgLy92YXIgY29sdW1uMyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgLy92YXIgY29sdW1uNCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgCi0gICAgLy9jb2x1bW4wLmNsYXNzTmFtZSA9ICJjaGVja2JveGNlbGxzIjsKLSAgICBjb2x1bW4xLmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICBjb2x1bW4xLndpZHRoID0gIjE1JSI7Ci0gICAgLy9jb2x1bW4yLmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICAvL2NvbHVtbjIud2lkdGggPSAiMTAlIjsKLSAgICAvL2NvbHVtbjMuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIC8vY29sdW1uMy53aWR0aCA9ICI3MCUiOwotICAgIC8vY29sdW1uNC5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgCi0gICAgLy92YXIgcm93Q2hlY2tib3ggPSBjcmVhdGVSb3dDaGVja2JveCgpOwotICAgIC8vY29sdW1uMC5hcHBlbmRDaGlsZChyb3dDaGVja2JveCk7Ci0gICAgCi0gICAgLy9jb2x1bW4xLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIiIsZmlsZU5hbWUpKTsgIDwlLy8gb3JpZ2luYWwgZmlsZSBuYW1lJT4KLSAgICAvL2NvbHVtbjEuYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiIixoYXNFcnJvcikpOyAgPCUvLyBtb2RlJT4KLSAgICAvL2NvbHVtbjEuYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiIix0TW9kZWxLZXkpKTsgPCUvLyB0TW9kZWxLZXklPgotICAgIGNvbHVtbjEuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY2F0ZWdvcnlOYW1lKSk7Ci0gICAgCi0gICAgLy9jb2x1bW4yLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGlzQ2hlY2tlZCkpOwotICAgIAotICAgIC8vaWYgKGhhc0Vycm9yKQotICAgIC8vewotICAgIC8vICBjb2x1bW4zLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIjwlPVVERElBY3Rpb25JbnB1dHMuQ0FURUdPUllfVE1PREVMX0tFWSU+Iix0TW9kZWxLZXkpKTsKLSAgICAvLyAgdmFyIGZpbGVJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Ci0gICAgLy8gIGZpbGVJbnB1dC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCI8JT1VRERJQWN0aW9uSW5wdXRzLkNBVEVHT1JZX0ZJTEVOQU1FJT4iKTsKLSAgICAvLyAgZmlsZUlucHV0LnNldEF0dHJpYnV0ZSgidHlwZSIsImZpbGUiKTsKLSAgICAvLyAgZmlsZUlucHV0LnRpdGxlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX0NBVEVHT1JZX0ZJTEUiKSklPiI7Ci0gICAgLy8gIGZpbGVJbnB1dC5jbGFzc05hbWUgPSAidGFibGVmaWxlYnJvd3NlIjsKLSAgICAvLyAgY29sdW1uMy5hcHBlbmRDaGlsZChmaWxlSW5wdXQpOwotICAgIC8vICBhZGREZXRhaWxzVXNlckRlZmluZWRDYXRlZ29yeVJvd0NhbmNlbExpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW40LHRhYmxlLnJvd3MubGVuZ3RoKTsKLSAgICAvL30KLSAgICAvL2Vsc2UKLSAgICAvL3sKLSAgICAvLyAgY29sdW1uMy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShmaWxlTmFtZSkpOwotICAgIC8vICBhZGREZXRhaWxzVXNlckRlZmluZWRDYXRlZ29yeVJvd0VkaXRMaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uNCx0YWJsZS5yb3dzLmxlbmd0aCk7Ci0gICAgLy99Ci0gICAgCi0gICAgLy9uZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMCk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjEpOwotICAgIC8vbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjIpOwotICAgIC8vbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjMpOwotICAgIC8vbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjQpOwotICAgIAotICAgIHRhYmxlQm9keS5hcHBlbmRDaGlsZChuZXdSb3cpOwotICB9Ci0gIAotICBmdW5jdGlvbiBhZGREZXRhaWxzVXNlckRlZmluZWRDYXRlZ29yeVJvd0VkaXRMaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uLHJvd0luZGV4KQotICB7Ci0gICAgdmFyIGVkaXRMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotICAgIHNldEpTTGlua1Jvd1RhcmdldChlZGl0TGluaywiZWRpdERldGFpbHNVc2VyRGVmaW5lZENhdGVnb3J5Um93Iix0YWJsZUNvbnRhaW5lcklkLHJvd0luZGV4KTsKLSAgICBlZGl0TGluay5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfRURJVCIpKSU+IikpOwotICAgIGNvbHVtbi5hcHBlbmRDaGlsZChlZGl0TGluayk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGVkaXREZXRhaWxzVXNlckRlZmluZWRDYXRlZ29yeVJvdyh0YWJsZUNvbnRhaW5lcklkLHJvd0luZGV4KQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHJvdyA9IHRhYmxlLnJvd3Nbcm93SW5kZXhdOwotICAgIHZhciBjb2x1bW5zID0gcm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwotICAgIAotICAgIHZhciBjb2x1bW4xID0gY29sdW1ucy5pdGVtKDEpOyAgICAKLSAgICB2YXIgY29sdW1uMyA9IGNvbHVtbnMuaXRlbSgzKTsKLSAgICB2YXIgY29sdW1uNCA9IGNvbHVtbnMuaXRlbSg0KTsKLSAgICAKLSAgICB2YXIgZWRpdGFibGUgPSAoY29sdW1uMS5jaGlsZE5vZGVzWzFdLnZhbHVlID09ICJ0cnVlIik7Ci0gICAgaWYgKGVkaXRhYmxlKQotICAgICAgcmV0dXJuOwotICAgIHZhciB0TW9kZWxLZXkgPSBjb2x1bW4xLmNoaWxkTm9kZXNbMl0udmFsdWU7Ci0gICAgY29sdW1uMS5jaGlsZE5vZGVzWzFdLnZhbHVlID0gdHJ1ZTsKLSAgICAKLSAgICByZW1vdmVDb2x1bW5DaGlsZHJlbihjb2x1bW4zKTsKLSAgICBjb2x1bW4zLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIjwlPVVERElBY3Rpb25JbnB1dHMuQ0FURUdPUllfVE1PREVMX0tFWSU+Iix0TW9kZWxLZXkpKTsKLSAgICB2YXIgZmlsZUlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKLSAgICBmaWxlSW5wdXQuc2V0QXR0cmlidXRlKCJuYW1lIiwiPCU9VURESUFjdGlvbklucHV0cy5DQVRFR09SWV9GSUxFTkFNRSU+Iik7Ci0gICAgZmlsZUlucHV0LnNldEF0dHJpYnV0ZSgidHlwZSIsImZpbGUiKTsKLSAgICBmaWxlSW5wdXQudGl0bGUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfQ0FURUdPUllfRklMRSIpKSU+IjsKLSAgICBmaWxlSW5wdXQuY2xhc3NOYW1lID0gInRhYmxlZmlsZWJyb3dzZSI7Ci0gICAgY29sdW1uMy5hcHBlbmRDaGlsZChmaWxlSW5wdXQpOwotICAgIAotICAgIHJlbW92ZUNvbHVtbkNoaWxkcmVuKGNvbHVtbjQpOwotICAgIAotICAgIGFkZERldGFpbHNVc2VyRGVmaW5lZENhdGVnb3J5Um93Q2FuY2VsTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjQscm93SW5kZXgpOwotICB9Ci0gIAotICBmdW5jdGlvbiBhZGREZXRhaWxzVXNlckRlZmluZWRDYXRlZ29yeVJvd0NhbmNlbExpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW4scm93SW5kZXgpCi0gIHsKLSAgICB2YXIgY2FuY2VsTGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLSAgICBzZXRKU0xpbmtSb3dUYXJnZXQoY2FuY2VsTGluaywiY2FuY2VsRGV0YWlsc1VzZXJEZWZpbmVkQ2F0ZWdvcnlSb3dFZGl0Iix0YWJsZUNvbnRhaW5lcklkLHJvd0luZGV4KTsKLSAgICBjYW5jZWxMaW5rLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19DQU5DRUwiKSklPiIpKTsKLSAgICBjb2x1bW4uYXBwZW5kQ2hpbGQoY2FuY2VsTGluayk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGNhbmNlbERldGFpbHNVc2VyRGVmaW5lZENhdGVnb3J5Um93RWRpdCh0YWJsZUNvbnRhaW5lcklkLHJvd0luZGV4KQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHJvdyA9IHRhYmxlLnJvd3Nbcm93SW5kZXhdOwotICAgIHZhciBjb2x1bW5zID0gcm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwotICAgIAotICAgIHZhciBjb2x1bW4xID0gY29sdW1ucy5pdGVtKDEpOwotICAgIHZhciBjb2x1bW4zID0gY29sdW1ucy5pdGVtKDMpOwotICAgIHZhciBjb2x1bW40ID0gY29sdW1ucy5pdGVtKDQpOwotICAgIAotICAgIHZhciBlZGl0YWJsZSA9IChjb2x1bW4xLmNoaWxkTm9kZXNbMV0udmFsdWUgPT0gInRydWUiKTsKLSAgICBpZiAoIWVkaXRhYmxlKQotICAgICAgcmV0dXJuOwotICAgIGNvbHVtbjEuY2hpbGROb2Rlc1sxXS52YWx1ZSA9IGZhbHNlOwotICAgIAotICAgIHJlbW92ZUNvbHVtbkNoaWxkcmVuKGNvbHVtbjMpOwotICAgIGNvbHVtbjMuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY29sdW1uMS5jaGlsZE5vZGVzWzBdLnZhbHVlKSk7Ci0gICAgCi0gICAgcmVtb3ZlQ29sdW1uQ2hpbGRyZW4oY29sdW1uNCk7Ci0gICAgCi0gICAgYWRkRGV0YWlsc1VzZXJEZWZpbmVkQ2F0ZWdvcnlSb3dFZGl0TGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjQscm93SW5kZXgpOwotICB9Ci0gIAotICBmdW5jdGlvbiBlZGl0U2VsZWN0ZWREZXRhaWxzVXNlckRlZmluZWRDYXRlZ29yeVJvd3ModGFibGVDb250YWluZXJJZCkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIGZvciAodmFyIGk9bnVtYmVyT2ZIZWFkZXJSb3dzO2k8dGFibGUucm93cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIHZhciByb3dDaGVja2JveCA9IHRhYmxlLnJvd3NbaV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IikuaXRlbSgwKTsKLSAgICAgIGlmIChyb3dDaGVja2JveC5jaGVja2VkKQotICAgICAgICBlZGl0RGV0YWlsc1VzZXJEZWZpbmVkQ2F0ZWdvcnlSb3codGFibGVDb250YWluZXJJZCxpKTsKLSAgICB9Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGNhbmNlbFNlbGVjdGVkRGV0YWlsc1VzZXJEZWZpbmVkQ2F0ZWdvcnlSb3dzKHRhYmxlQ29udGFpbmVySWQpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICBmb3IgKHZhciBpPW51bWJlck9mSGVhZGVyUm93cztpPHRhYmxlLnJvd3MubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICB2YXIgcm93Q2hlY2tib3ggPSB0YWJsZS5yb3dzW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLml0ZW0oMCk7Ci0gICAgICBpZiAocm93Q2hlY2tib3guY2hlY2tlZCkKLSAgICAgICAgY2FuY2VsRGV0YWlsc1VzZXJEZWZpbmVkQ2F0ZWdvcnlSb3dFZGl0KHRhYmxlQ29udGFpbmVySWQsaSk7Ci0gICAgfQotICB9ICAKLSAgCi0gIGZ1bmN0aW9uIGFkZERldGFpbHNEaXNjb3ZlcnlVUkxSb3codGFibGVDb250YWluZXJJZCxoYXNFcnJvcikKLSAgewotICAgIHR3aXN0T3Blbih0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgdGFibGVCb2R5ID0gdGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlRCT0RZIikuaXRlbSgwKTsKLSAgICB2YXIgbmV3Um93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKLSAgICB2YXIgY29sdW1uMCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW4yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLQotICAgIGNvbHVtbjAuY2xhc3NOYW1lID0gImNoZWNrYm94Y2VsbHMiOwotICAgIGNvbHVtbjEuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIGNvbHVtbjEud2lkdGggPSAiODUlIjsKLSAgICBjb2x1bW4yLmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICAKLSAgICB2YXIgcm93Q2hlY2tib3ggPSBjcmVhdGVSb3dDaGVja2JveCgpOwotICAgIGNvbHVtbjAuYXBwZW5kQ2hpbGQocm93Q2hlY2tib3gpOwotICAgIAotICAgIGNvbHVtbjEuYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiIiwiPCU9QWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUJT4iKSk7IDwlLy8gdmlld0lkJT4KLSAgICBjb2x1bW4xLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIiIsIiIpKTsgPCUvLyBvcmlnaW5hbCBEaXNjb3ZlcnkgVVJMJT4KLSAgICBjb2x1bW4xLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIiIsaGFzRXJyb3IpKTsgPCUvLyBtb2RlJT4KLSAgICBpZiAoaGFzRXJyb3IpCi0gICAgewotICAgICAgdmFyIHRleHRJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Ci0gICAgICB0ZXh0SW5wdXQuY2xhc3NOYW1lID0gInRhYmxldGV4dGVudGVyIjsKLSAgICAgIHRleHRJbnB1dC50aXRsZSA9ICI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX0RJU0NPVkVSWV9VUkwiKSU+IjsKLSAgICAgIGNvbHVtbjEuYXBwZW5kQ2hpbGQodGV4dElucHV0KTsKLSAgICAgIGFkZERldGFpbHNEaXNjb3ZlcnlVUkxSb3dSZW1vdmVBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uMix0YWJsZS5yb3dzLmxlbmd0aCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBjb2x1bW4xLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKSk7Ci0gICAgICBhZGREZXRhaWxzRGlzY292ZXJ5VVJMUm93RWRpdEFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW4yLHRhYmxlLnJvd3MubGVuZ3RoKTsKLSAgICB9Ci0gICAgCi0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjApOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4xKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMik7Ci0gICAgCi0gICAgdGFibGVCb2R5LmFwcGVuZENoaWxkKG5ld1Jvdyk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGFkZERldGFpbHNEaXNjb3ZlcnlVUkxSb3dSZW1vdmVBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uLHJvd0luZGV4KQotICB7Ci0gICAgdmFyIHJlbW92ZUxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0gICAgc2V0SlNMaW5rUm93VGFyZ2V0KHJlbW92ZUxpbmssInJlbW92ZURldGFpbHNEaXNjb3ZlcnlVUkxSb3ciLHRhYmxlQ29udGFpbmVySWQscm93SW5kZXgpOwotICAgIHJlbW92ZUxpbmsuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX1JFTU9WRSIpKSU+IikpOwotICAgIGNvbHVtbi5hcHBlbmRDaGlsZChyZW1vdmVMaW5rKTsKLSAgfQotICAKLSAgZnVuY3Rpb24gYWRkRGV0YWlsc0Rpc2NvdmVyeVVSTFJvd0VkaXRBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uLHJvd0luZGV4KQotICB7Ci0gICAgdmFyIGVkaXRMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotICAgIHNldEpTTGlua1Jvd1RhcmdldChlZGl0TGluaywiZWRpdERldGFpbHNEaXNjb3ZlcnlVUkxSb3ciLHRhYmxlQ29udGFpbmVySWQscm93SW5kZXgpOwotICAgIGVkaXRMaW5rLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19FRElUIikpJT4iKSk7Ci0gICAgY29sdW1uLmFwcGVuZENoaWxkKGVkaXRMaW5rKTsKLSAgfQotICAKLSAgZnVuY3Rpb24gYWRkRGV0YWlsc0Rpc2NvdmVyeVVSTFJvd0NhbmNlbEFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW4scm93SW5kZXgpCi0gIHsKLSAgICB2YXIgY2FuY2VsTGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLSAgICBzZXRKU0xpbmtSb3dUYXJnZXQoY2FuY2VsTGluaywiY2FuY2VsRGV0YWlsc0Rpc2NvdmVyeVVSTFJvd0VkaXQiLHRhYmxlQ29udGFpbmVySWQscm93SW5kZXgpOwotICAgIGNhbmNlbExpbmsuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0NBTkNFTCIpKSU+IikpOwotICAgIGNvbHVtbi5hcHBlbmRDaGlsZChjYW5jZWxMaW5rKTsKLSAgfQotICAKLSAgZnVuY3Rpb24gZWRpdERldGFpbHNEaXNjb3ZlcnlVUkxSb3codGFibGVDb250YWluZXJJZCxyb3dJbmRleCkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciByb3cgPSB0YWJsZS5yb3dzW3Jvd0luZGV4XTsKLSAgICB2YXIgY29sdW1ucyA9IHJvdy5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKTsKLSAgICAKLSAgICB2YXIgY29sdW1uMSA9IGNvbHVtbnMuaXRlbSgxKTsKLSAgICB2YXIgY29sdW1uMiA9IGNvbHVtbnMuaXRlbSgyKTsKLSAgICAKLSAgICB2YXIgZGlzY292ZXJ5VVJMID0gY29sdW1uMS5jaGlsZE5vZGVzWzFdLnZhbHVlOwotICAgIHZhciBlZGl0YWJsZSA9IChjb2x1bW4xLmNoaWxkTm9kZXNbMl0udmFsdWUgPT0gInRydWUiKQotICAgIGlmIChlZGl0YWJsZSkKLSAgICAgIHJldHVybjsKLSAgICBjb2x1bW4xLmNoaWxkTm9kZXNbMl0udmFsdWUgPSB0cnVlOwotICAgIAotICAgIHZhciBjb2x1bW4xQ29udHJvbCA9IGNvbHVtbjEuY2hpbGROb2Rlc1szXTsKLSAgICB2YXIgdGV4dElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKLSAgICBjb2x1bW4xLnJlcGxhY2VDaGlsZCh0ZXh0SW5wdXQsY29sdW1uMUNvbnRyb2wpOwotICAgIHRleHRJbnB1dC5jbGFzc05hbWUgPSAidGFibGV0ZXh0ZW50ZXIiOwotICAgIHRleHRJbnB1dC50aXRsZSA9ICI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX0RJU0NPVkVSWV9VUkwiKSU+IjsKLSAgICB0ZXh0SW5wdXQudmFsdWUgPSBkaXNjb3ZlcnlVUkw7Ci0gICAgCi0gICAgcmVtb3ZlQ29sdW1uQ2hpbGRyZW4oY29sdW1uMik7Ci0gICAgYWRkRGV0YWlsc0Rpc2NvdmVyeVVSTFJvd0NhbmNlbEFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW4yLHJvd0luZGV4KTsKLSAgfQotICAKLSAgZnVuY3Rpb24gc2V0RGV0YWlsc0Rpc2NvdmVyeVVSTFJvdyh0YWJsZUNvbnRhaW5lcklkLGluZGV4LHZpZXdJZCxkaXNjb3ZlcnlVUkwpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgcm93ID0gdGFibGUucm93c1tudW1iZXJPZkhlYWRlclJvd3MraW5kZXhdOwotICAgIHZhciBjb2x1bW5zID0gcm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwotICAgIHZhciBjb2x1bW4xID0gY29sdW1ucy5pdGVtKDEpOwotICAgIGNvbHVtbjEuY2hpbGROb2Rlc1swXS52YWx1ZSA9IHZpZXdJZDsKLSAgICBjb2x1bW4xLmNoaWxkTm9kZXNbMV0udmFsdWUgPSBkaXNjb3ZlcnlVUkw7Ci0gICAgdmFyIGVkaXRhYmxlID0gKGNvbHVtbjEuY2hpbGROb2Rlc1syXS52YWx1ZSA9PSAidHJ1ZSIpOwotICAgIHZhciBjb2x1bW4xQ29udHJvbCA9IGNvbHVtbjEuY2hpbGROb2Rlc1szXTsKLSAgICBpZiAoZWRpdGFibGUpCi0gICAgICBjb2x1bW4xQ29udHJvbC52YWx1ZSA9IGRpc2NvdmVyeVVSTDsKLSAgICBlbHNlCi0gICAgICBjb2x1bW4xLnJlcGxhY2VDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShnZXREZWZhdWx0RGlzcGxheVN0cmluZyhkaXNjb3ZlcnlVUkwpKSxjb2x1bW4xQ29udHJvbCk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIHJlbW92ZURldGFpbHNEaXNjb3ZlcnlVUkxSb3codGFibGVDb250YWluZXJJZCxyb3dJbmRleCkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHRhYmxlLmRlbGV0ZVJvdyhyb3dJbmRleCk7Ci0gICAgZml4RGV0YWlsc0Rpc2NvdmVyeVVSTFJvd0xpbmtzKHRhYmxlQ29udGFpbmVySWQpOwotICB9Ci0gIAotICBmdW5jdGlvbiBjYW5jZWxEZXRhaWxzRGlzY292ZXJ5VVJMUm93RWRpdCh0YWJsZUNvbnRhaW5lcklkLHJvd0luZGV4KQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHJvdyA9IHRhYmxlLnJvd3Nbcm93SW5kZXhdOwotICAgIHZhciBjb2x1bW5zID0gcm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwotICAgIHZhciBjb2x1bW4xID0gY29sdW1ucy5pdGVtKDEpOwotICAgIHZhciBjb2x1bW4yID0gY29sdW1ucy5pdGVtKDIpOwotICAgIAotICAgIHZhciB2aWV3SWQgPSBjb2x1bW4xLmNoaWxkTm9kZXNbMF0udmFsdWU7Ci0gICAgdmFyIGRpc2NvdmVyeVVSTCA9IGNvbHVtbjEuY2hpbGROb2Rlc1sxXS52YWx1ZTsKLSAgICB2YXIgcm93QWN0aW9uTGlua0hyZWYgPSBjb2x1bW4yLmNoaWxkTm9kZXNbY29sdW1uMi5jaGlsZE5vZGVzLmxlbmd0aC0xXS5ocmVmOwotICAgIGlmIChyb3dBY3Rpb25MaW5rSHJlZi5pbmRleE9mKCJqYXZhc2NyaXB0OmNhbmNlbCIpICE9IDApCi0gICAgICByZXR1cm47Ci0gICAgICAKLSAgICBjb2x1bW4xLmNoaWxkTm9kZXNbMl0udmFsdWUgPSBmYWxzZTsKLSAgICAKLSAgICB2YXIgY29sdW1uMUNvbnRyb2wgPSBjb2x1bW4xLmNoaWxkTm9kZXNbM107Ci0gICAgY29sdW1uMS5yZXBsYWNlQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZ2V0RGVmYXVsdERpc3BsYXlTdHJpbmcoZGlzY292ZXJ5VVJMKSksY29sdW1uMUNvbnRyb2wpOwotICAgIAotICAgIHJlbW92ZUNvbHVtbkNoaWxkcmVuKGNvbHVtbjIpOwotICAgIGFkZERldGFpbHNEaXNjb3ZlcnlVUkxSb3dFZGl0QWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjIscm93SW5kZXgpOwotICB9Ci0gIAotICBmdW5jdGlvbiByZW1vdmVTZWxlY3RlZERldGFpbHNEaXNjb3ZlcnlVUkxSb3dzKHRhYmxlQ29udGFpbmVySWQpCi0gIHsKLSAgICByZW1vdmVTZWxlY3RlZFJvd3ModGFibGVDb250YWluZXJJZCk7Ci0gICAgZml4RGV0YWlsc0Rpc2NvdmVyeVVSTFJvd0xpbmtzKHRhYmxlQ29udGFpbmVySWQpOwotICB9Ci0gIAotICBmdW5jdGlvbiBmaXhEZXRhaWxzRGlzY292ZXJ5VVJMUm93TGlua3ModGFibGVDb250YWluZXJJZCkKLSAgewotICAgIDwlLy8gRml4IHRoZSBsaW5rcyU+Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgZm9yICh2YXIgaT1udW1iZXJPZkhlYWRlclJvd3M7aTx0YWJsZS5yb3dzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgdmFyIHJvdyA9IHRhYmxlLnJvd3NbaV07Ci0gICAgICB2YXIgY29sdW1ucyA9IHJvdy5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKTsKLSAgICAgIHZhciByb3dDaGVja2JveCA9IGNvbHVtbnMuaXRlbSgwKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKS5pdGVtKDApOwotICAgICAgCi0gICAgICBmb3IgKHZhciBqPTE7ajxjb2x1bW5zLmxlbmd0aDtqKyspCi0gICAgICB7Ci0gICAgICAgIGlmIChyb3dDaGVja2JveC5jaGVja2VkKQotICAgICAgICAgIGNvbHVtbnMuaXRlbShqKS5jbGFzc05hbWUgPSAicm93Y29sb3IiOwotICAgICAgICBlbHNlCi0gICAgICAgICAgY29sdW1ucy5pdGVtKGopLmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICAgIH0KLSAgICAgIAotICAgICAgdmFyIGNvbHVtbjEgPSBjb2x1bW5zLml0ZW0oMSk7Ci0gICAgICB2YXIgY29sdW1uMiA9IGNvbHVtbnMuaXRlbSgyKTsKLSAgICAgIHZhciBsaW5rID0gY29sdW1uMi5jaGlsZE5vZGVzW2NvbHVtbjIuY2hpbGROb2Rlcy5sZW5ndGgtMV07Ci0gICAgICByZW1vdmVDb2x1bW5DaGlsZHJlbihjb2x1bW4yKTsKLSAgICAgIHZhciBlZGl0YWJsZSA9IChjb2x1bW4xLmNoaWxkTm9kZXNbMl0udmFsdWUgPT0gInRydWUiKTsKLSAgICAgIGlmIChsaW5rLmhyZWYuaW5kZXhPZigiamF2YXNjcmlwdDpyZW1vdmUiKSA9PSAwKQotICAgICAgICBhZGREZXRhaWxzRGlzY292ZXJ5VVJMUm93UmVtb3ZlQWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjIsaSk7Ci0gICAgICBlbHNlIGlmIChsaW5rLmhyZWYuaW5kZXhPZigiamF2YXNjcmlwdDpjYW5jZWwiKSA9PSAwKQotICAgICAgICBhZGREZXRhaWxzRGlzY292ZXJ5VVJMUm93Q2FuY2VsQWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjIsaSk7Ci0gICAgICBlbHNlIGlmIChsaW5rLmhyZWYuaW5kZXhPZigiamF2YXNjcmlwdDplZGl0IikgPT0gMCkKLSAgICAgICAgYWRkRGV0YWlsc0Rpc2NvdmVyeVVSTFJvd0VkaXRBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uMixpKTsgCi0gICAgfQotICB9Ci0gIAotICBmdW5jdGlvbiBlZGl0U2VsZWN0ZWREZXRhaWxzRGlzY292ZXJ5VVJMUm93cyh0YWJsZUNvbnRhaW5lcklkKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgZm9yICh2YXIgaT1udW1iZXJPZkhlYWRlclJvd3M7aTx0YWJsZS5yb3dzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgdmFyIHJvd0NoZWNrYm94ID0gdGFibGUucm93c1tpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKS5pdGVtKDApOwotICAgICAgaWYgKHJvd0NoZWNrYm94LmNoZWNrZWQpCi0gICAgICAgIGVkaXREZXRhaWxzRGlzY292ZXJ5VVJMUm93KHRhYmxlQ29udGFpbmVySWQsaSk7Ci0gICAgfQotICB9Ci0gIAotICBmdW5jdGlvbiBjYW5jZWxTZWxlY3RlZERldGFpbHNEaXNjb3ZlcnlVUkxSb3dzKHRhYmxlQ29udGFpbmVySWQpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICBmb3IgKHZhciBpPW51bWJlck9mSGVhZGVyUm93cztpPHRhYmxlLnJvd3MubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICB2YXIgcm93Q2hlY2tib3ggPSB0YWJsZS5yb3dzW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLml0ZW0oMCk7Ci0gICAgICBpZiAocm93Q2hlY2tib3guY2hlY2tlZCkKLSAgICAgICAgY2FuY2VsRGV0YWlsc0Rpc2NvdmVyeVVSTFJvd0VkaXQodGFibGVDb250YWluZXJJZCxpKTsKLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBhZGREZXRhaWxzU2luZ2xlSXRlbVJvdyh0YWJsZUNvbnRhaW5lcklkLGhhc0Vycm9yKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHRhYmxlQm9keSA9IHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJUQk9EWSIpLml0ZW0oMCk7Ci0gICAgdmFyIG5ld1JvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7Ci0gICAgdmFyIGNvbHVtbjAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW4xID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICAKLSAgICBjb2x1bW4wLmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICBjb2x1bW4wLndpZHRoID0gIjkwJSI7Ci0gICAgY29sdW1uMS5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgCi0gICAgY29sdW1uMC5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCIiLCIiKSk7IDwlLy8gaXRlbSB2YWx1ZSU+Ci0gICAgY29sdW1uMC5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCIiLGhhc0Vycm9yKSk7IDwlLy8gbW9kZSU+Ci0gICAgCi0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjApOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4xKTsKLSAgICAKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMSk7Ci0gICAgdGFibGVCb2R5LmFwcGVuZENoaWxkKG5ld1Jvdyk7Ci0gIH0KLQotICBmdW5jdGlvbiBhZGREZXRhaWxzV1NETFVSTFNpbmdsZUl0ZW1Sb3dCcm93c2VBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsd3NkbFR5cGUsY29sdW1uKQotICB7Ci0gICAgdmFyIGJyb3dzZUxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0gICAgYnJvd3NlTGluay5ocmVmID0gImphdmFzY3JpcHQ6b3BlbldTRExCcm93c2VyKCdjb250ZW50Ym9yZGVyJywiK3dzZGxUeXBlKyIpIjsKLSAgICBicm93c2VMaW5rLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xJTktfQlJPV1NFIikpJT4iKSk7Ci0gICAgY29sdW1uLmFwcGVuZENoaWxkKGJyb3dzZUxpbmspOyAgICAKLSAgfQotICAKLSAgZnVuY3Rpb24gYWRkRGV0YWlsc1dTRExVUkxTaW5nbGVJdGVtUm93QnJvd3NlQ2FuY2VsQWN0aW9uTGlua3ModGFibGVDb250YWluZXJJZCx3c2RsVHlwZSxjb2x1bW4pCi0gIHsKLSAgICBhZGREZXRhaWxzV1NETFVSTFNpbmdsZUl0ZW1Sb3dCcm93c2VBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsd3NkbFR5cGUsY29sdW1uKTsKLSAgICBjb2x1bW4uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiAiKSk7Ci0gICAgdmFyIGNhbmNlbExpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0gICAgY2FuY2VsTGluay5ocmVmID0gImphdmFzY3JpcHQ6Y2FuY2VsRGV0YWlsc1dTRExVUkxTaW5nbGVJdGVtUm93RWRpdCgnIit0YWJsZUNvbnRhaW5lcklkKyInKSI7Ci0gICAgY2FuY2VsTGluay5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfQ0FOQ0VMIikpJT4iKSk7Ci0gICAgY29sdW1uLmFwcGVuZENoaWxkKGNhbmNlbExpbmspOwotICB9Ci0gIAotICBmdW5jdGlvbiBhZGREZXRhaWxzV1NETFVSTFNpbmdsZUl0ZW1Sb3dFZGl0QWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbikKLSAgewotICAgIHZhciBlZGl0TGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLSAgICBlZGl0TGluay5ocmVmID0gImphdmFzY3JpcHQ6ZWRpdERldGFpbHNXU0RMVVJMU2luZ2xlSXRlbVJvdygnIit0YWJsZUNvbnRhaW5lcklkKyInKSI7Ci0gICAgZWRpdExpbmsuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0VESVQiKSklPiIpKTsKLSAgICBjb2x1bW4uYXBwZW5kQ2hpbGQoZWRpdExpbmspOwotICB9Ci0gIAotICBmdW5jdGlvbiBjYW5jZWxEZXRhaWxzV1NETFVSTFNpbmdsZUl0ZW1Sb3dFZGl0KHRhYmxlQ29udGFpbmVySWQpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgY29sdW1ucyA9IHRhYmxlLnJvd3NbbnVtYmVyT2ZIZWFkZXJSb3dzXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKTsKLSAgICB2YXIgY29sdW1uMCA9IGNvbHVtbnMuaXRlbSgwKTsKLSAgICB2YXIgY29sdW1uMSA9IGNvbHVtbnMuaXRlbSgxKTsKLSAgICAKLSAgICBjb2x1bW4wLmNoaWxkTm9kZXNbMl0udmFsdWUgPSBmYWxzZTsKLSAgICAKLSAgICB2YXIgY29sdW1uMENvbnRyb2wgPSBjb2x1bW4wLmNoaWxkTm9kZXNbY29sdW1uMC5jaGlsZE5vZGVzLmxlbmd0aC0xXTsKLSAgICBjb2x1bW4wLnJlcGxhY2VDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShnZXRXU0RMVVJMRGlzcGxheShjb2x1bW4wLmNoaWxkTm9kZXNbMF0udmFsdWUpKSxjb2x1bW4wQ29udHJvbCk7Ci0gICAgCi0gICAgcmVtb3ZlQ29sdW1uQ2hpbGRyZW4oY29sdW1uMSk7Ci0gICAgCi0gICAgYWRkRGV0YWlsc1dTRExVUkxTaW5nbGVJdGVtUm93RWRpdEFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW4xKTsKLSAgfQotICAKLSAgZnVuY3Rpb24gZWRpdERldGFpbHNXU0RMVVJMU2luZ2xlSXRlbVJvdyh0YWJsZUNvbnRhaW5lcklkKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIGNvbHVtbnMgPSB0YWJsZS5yb3dzW251bWJlck9mSGVhZGVyUm93c10uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgdmFyIGNvbHVtbjAgPSBjb2x1bW5zLml0ZW0oMCk7Ci0gICAgdmFyIGNvbHVtbjEgPSBjb2x1bW5zLml0ZW0oMSk7Ci0gICAgCi0gICAgdmFyIHdzZGxUeXBlID0gY29sdW1uMC5jaGlsZE5vZGVzWzFdLnZhbHVlOwotICAgIGNvbHVtbjAuY2hpbGROb2Rlc1syXS52YWx1ZSA9IHRydWU7Ci0gICAgCi0gICAgdmFyIGNvbHVtbjBDb250cm9sID0gY29sdW1uMC5jaGlsZE5vZGVzW2NvbHVtbjAuY2hpbGROb2Rlcy5sZW5ndGgtMV07Ci0gICAgdmFyIHdzZGxVUkxFZGl0Q29udHJvbCA9IGNyZWF0ZVdTRExVUkxFZGl0Q29udHJvbCgpOwotICAgIGNvbHVtbjAucmVwbGFjZUNoaWxkKHdzZGxVUkxFZGl0Q29udHJvbCxjb2x1bW4wQ29udHJvbCk7Ci0gICAgd3NkbFVSTEVkaXRDb250cm9sLmNsYXNzTmFtZSA9ICJ0YWJsZXRleHRlbnRlciI7Ci0gICAgd3NkbFVSTEVkaXRDb250cm9sLnZhbHVlID0gZ2V0V1NETFVSTERpc3BsYXkoY29sdW1uMC5jaGlsZE5vZGVzWzBdLnZhbHVlKTsKLSAgICAKLSAgICByZW1vdmVDb2x1bW5DaGlsZHJlbihjb2x1bW4xKTsKLSAgICAKLSAgICBhZGREZXRhaWxzV1NETFVSTFNpbmdsZUl0ZW1Sb3dCcm93c2VDYW5jZWxBY3Rpb25MaW5rcyh0YWJsZUNvbnRhaW5lcklkLHdzZGxUeXBlLGNvbHVtbjEpOwotICB9Ci0gIAotICBmdW5jdGlvbiBjcmVhdGVXU0RMVVJMRWRpdENvbnRyb2woKQotICB7Ci0gICAgdmFyIGNvbnRyb2w7Ci0gICAgaWYgKGlzTWljcm9zb2Z0SW50ZXJuZXRFeHBsb3JlcigpKQotICAgICAgY29udHJvbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIjxpbnB1dCBuYW1lPSc8JT1BY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV1NETF9VUkwlPic+Iik7Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGNvbnRyb2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotICAgICAgY29udHJvbC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCI8JT1BY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV1NETF9VUkwlPiIpOwotICAgIH0KLSAgICByZXR1cm4gY29udHJvbDsKLSAgfQotICAKLSAgZnVuY3Rpb24gZ2V0V1NETFVSTERpc3BsYXkod3NkbFVSTCkKLSAgewotICAgIGlmICh3c2RsVVJMLmxlbmd0aCA8IDEpCi0gICAgICB3c2RsVVJMRGlzcGxheSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJNU0dfRVJST1JfV1NETF9VUkxfSVNfVU5SRUFDSEFCTEUiKSklPiI7Ci0gICAgZWxzZQotICAgICAgd3NkbFVSTERpc3BsYXkgPSB3c2RsVVJMOwotICAgIHJldHVybiB3c2RsVVJMRGlzcGxheTsKLSAgfQotICAKLSAgZnVuY3Rpb24gc2V0RGV0YWlsc1dTRExVUkxTaW5nbGVJdGVtUm93KHRhYmxlQ29udGFpbmVySWQsd3NkbFR5cGUsd3NkbFVSTCkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciBjb2x1bW5zID0gdGFibGUucm93c1tudW1iZXJPZkhlYWRlclJvd3NdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwotICAgIHZhciBjb2x1bW4wID0gY29sdW1ucy5pdGVtKDApOwotICAgIHZhciBjb2x1bW4xID0gY29sdW1ucy5pdGVtKDEpOwotCi0gICAgY29sdW1uMC5pbnNlcnRCZWZvcmUoY3JlYXRlSGlkZGVuRWxlbWVudCgiIix3c2RsVHlwZSksY29sdW1uMC5jaGlsZE5vZGVzWzFdKTsKLSAgICB2YXIgZWRpdGFibGUgPSAoY29sdW1uMC5jaGlsZE5vZGVzWzJdLnZhbHVlID09ICJ0cnVlIik7Ci0gICAgdmFyIHdzZGxVUkxEaXNwbGF5ID0gZ2V0V1NETFVSTERpc3BsYXkod3NkbFVSTCk7Ci0gICAgY29sdW1uMC5jaGlsZE5vZGVzWzBdLnZhbHVlID0gd3NkbFVSTDsKLSAgICAKLSAgICB2YXIgY29sdW1uMENvbnRyb2w7ICAgIAotICAgIGlmIChlZGl0YWJsZSkKLSAgICB7Ci0gICAgICBjb2x1bW4wQ29udHJvbCA9IGNyZWF0ZVdTRExVUkxFZGl0Q29udHJvbCgpOwotICAgICAgY29sdW1uMENvbnRyb2wuY2xhc3NOYW1lID0gInRhYmxldGV4dGVudGVyIjsKLSAgICAgIGFkZERldGFpbHNXU0RMVVJMU2luZ2xlSXRlbVJvd0Jyb3dzZUFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCx3c2RsVHlwZSxjb2x1bW4xKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGNvbHVtbjBDb250cm9sID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUod3NkbFVSTERpc3BsYXkpOwotICAgICAgYWRkRGV0YWlsc1dTRExVUkxTaW5nbGVJdGVtUm93RWRpdEFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW4xKTsKLSAgICB9Ci0gICAgY29sdW1uMC5hcHBlbmRDaGlsZChjb2x1bW4wQ29udHJvbCk7Ci0gICAgaWYgKGVkaXRhYmxlKQotICAgICAgY29sdW1uMENvbnRyb2wudmFsdWUgPSB3c2RsVVJMRGlzcGxheTsKLSAgfQotICAKLSAgZnVuY3Rpb24gYWRkRGV0YWlsc05hbWVTaW5nbGVJdGVtUm93Q2FuY2VsQWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbikKLSAgewotICAgIHZhciBjYW5jZWxMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotICAgIGNhbmNlbExpbmsuaHJlZiA9ICJqYXZhc2NyaXB0OmNhbmNlbERldGFpbHNOYW1lU2luZ2xlSXRlbVJvd0VkaXQoJyIrdGFibGVDb250YWluZXJJZCsiJykiOwotICAgIGNhbmNlbExpbmsuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0NBTkNFTCIpKSU+IikpOwotICAgIGNvbHVtbi5hcHBlbmRDaGlsZChjYW5jZWxMaW5rKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGFkZERldGFpbHNOYW1lU2luZ2xlSXRlbVJvd0VkaXRBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uKSAgCi0gIHsKLSAgICB2YXIgZWRpdExpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0gICAgZWRpdExpbmsuaHJlZiA9ICJqYXZhc2NyaXB0OmVkaXREZXRhaWxzTmFtZVNpbmdsZUl0ZW1Sb3coJyIrdGFibGVDb250YWluZXJJZCsiJykiOwotICAgIGVkaXRMaW5rLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19FRElUIikpJT4iKSk7Ci0gICAgY29sdW1uLmFwcGVuZENoaWxkKGVkaXRMaW5rKTsKLSAgfQotICAKLSAgZnVuY3Rpb24gZWRpdERldGFpbHNOYW1lU2luZ2xlSXRlbVJvdyh0YWJsZUNvbnRhaW5lcklkKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIGNvbHVtbnMgPSB0YWJsZS5yb3dzW251bWJlck9mSGVhZGVyUm93c10uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgdmFyIGNvbHVtbjAgPSBjb2x1bW5zLml0ZW0oMCk7Ci0gICAgdmFyIGNvbHVtbjEgPSBjb2x1bW5zLml0ZW0oMSk7Ci0gICAgCi0gICAgY29sdW1uMC5jaGlsZE5vZGVzWzFdLnZhbHVlID0gdHJ1ZTsKLSAgICAKLSAgICB2YXIgY29sdW1uMENvbnRyb2wgPSBjb2x1bW4wLmNoaWxkTm9kZXNbY29sdW1uMC5jaGlsZE5vZGVzLmxlbmd0aC0xXTsKLSAgICB2YXIgdGV4dElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKLSAgICBjb2x1bW4wLnJlcGxhY2VDaGlsZCh0ZXh0SW5wdXQsY29sdW1uMENvbnRyb2wpOwotICAgIHRleHRJbnB1dC5jbGFzc05hbWUgPSAidGFibGV0ZXh0ZW50ZXIiOwotICAgIHRleHRJbnB1dC50aXRsZSA9ICI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX0lOUFVUX1RFWFRfVkFMVUUiKSU+IjsKLSAgICB0ZXh0SW5wdXQudmFsdWUgPSBjb2x1bW4wLmNoaWxkTm9kZXNbMF0udmFsdWU7Ci0KLSAgICByZW1vdmVDb2x1bW5DaGlsZHJlbihjb2x1bW4xKTsKLSAgICAKLSAgICBhZGREZXRhaWxzTmFtZVNpbmdsZUl0ZW1Sb3dDYW5jZWxBY3Rpb25MaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uMSk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGNhbmNlbERldGFpbHNOYW1lU2luZ2xlSXRlbVJvd0VkaXQodGFibGVDb250YWluZXJJZCkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciBjb2x1bW5zID0gdGFibGUucm93c1tudW1iZXJPZkhlYWRlclJvd3NdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwotICAgIHZhciBjb2x1bW4wID0gY29sdW1ucy5pdGVtKDApOwotICAgIHZhciBjb2x1bW4xID0gY29sdW1ucy5pdGVtKDEpOwotICAgIAotICAgIGNvbHVtbjAuY2hpbGROb2Rlc1sxXS52YWx1ZSA9IGZhbHNlOwotICAgIAotICAgIHZhciBjb2x1bW4wQ29udHJvbCA9IGNvbHVtbjAuY2hpbGROb2Rlc1tjb2x1bW4wLmNoaWxkTm9kZXMubGVuZ3RoLTFdOwotICAgIGNvbHVtbjAucmVwbGFjZUNoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNvbHVtbjAuY2hpbGROb2Rlc1swXS52YWx1ZSksY29sdW1uMENvbnRyb2wpOwotICAgIAotICAgIGZvciAodmFyIGk9MDtpPGNvbHVtbjEuY2hpbGROb2Rlcy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIGNvbHVtbjEucmVtb3ZlQ2hpbGQoY29sdW1uMS5jaGlsZE5vZGVzW2ldKTsKLSAgICAgIGktLTsKLSAgICB9Ci0gICAgYWRkRGV0YWlsc05hbWVTaW5nbGVJdGVtUm93RWRpdEFjdGlvbkxpbmsodGFibGVDb250YWluZXJJZCxjb2x1bW4xKTsKLSAgfQotICAKLSAgZnVuY3Rpb24gc2V0RGV0YWlsc05hbWVTaW5nbGVJdGVtUm93KHRhYmxlQ29udGFpbmVySWQsbmFtZSkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciBjb2x1bW5zID0gdGFibGUucm93c1tudW1iZXJPZkhlYWRlclJvd3NdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwotICAgIHZhciBjb2x1bW4wID0gY29sdW1ucy5pdGVtKDApOwotICAgIHZhciBjb2x1bW4xID0gY29sdW1ucy5pdGVtKDEpOwotICAgIAotICAgIHZhciBlZGl0YWJsZSA9IChjb2x1bW4wLmNoaWxkTm9kZXNbMV0udmFsdWUgPT0gInRydWUiKTsKLSAgICBjb2x1bW4wLmNoaWxkTm9kZXNbMF0udmFsdWUgPSBuYW1lOwotICAgIAotICAgIHZhciBjb2x1bW4wQ29udHJvbDsKLSAgICBpZiAoZWRpdGFibGUpCi0gICAgewotICAgICAgY29sdW1uMENvbnRyb2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotICAgICAgY29sdW1uMENvbnRyb2wuY2xhc3NOYW1lID0gInRhYmxldGV4dGVudGVyIjsKLSAgICAgIGNvbHVtbjBDb250cm9sLnRpdGxlID0gIjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfSU5QVVRfVEVYVF9WQUxVRSIpJT4iOwotICAgICAgY29sdW1uMENvbnRyb2wudmFsdWUgPSBuYW1lOwotICAgICAgY29sdW1uMS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQUNUSU9OU19OT05FIiklPiIpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGNvbHVtbjBDb250cm9sID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobmFtZSk7Ci0gICAgICBhZGREZXRhaWxzTmFtZVNpbmdsZUl0ZW1Sb3dFZGl0QWN0aW9uTGluayh0YWJsZUNvbnRhaW5lcklkLGNvbHVtbjEpOwotICAgIH0KLSAgICBjb2x1bW4wLmFwcGVuZENoaWxkKGNvbHVtbjBDb250cm9sKTsKLSAgfQotICAKLSAgZnVuY3Rpb24gcHJvY2Vzc0RldGFpbHNEaXNjb3ZlcnlVUkxUYWJsZSh0YWJsZUNvbnRhaW5lcklkLG1vZGlmaWVkTmFtZSx2aWV3SWROYW1lLGRpc2NvdmVyeVVSTE5hbWUsZm9ybSkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIGZvciAodmFyIGk9bnVtYmVyT2ZIZWFkZXJSb3dzO2k8dGFibGUucm93cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIHZhciBjb2x1bW5zID0gdGFibGUucm93c1tpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKTsKLSAgICAgIHZhciBjb2x1bW4xID0gY29sdW1ucy5pdGVtKDEpOwotICAgICAgdmFyIHZpZXdJZCA9IGNvbHVtbjEuY2hpbGROb2Rlc1swXS52YWx1ZTsKLSAgICAgIHZhciBlZGl0YWJsZSA9IChjb2x1bW4xLmNoaWxkTm9kZXNbMl0udmFsdWUgPT0gInRydWUiKTsKLSAgICAgIHZhciBkaXNjb3ZlcnlVUkw7Ci0gICAgICBpZiAoZWRpdGFibGUpCi0gICAgICAgIGRpc2NvdmVyeVVSTCA9IGNvbHVtbjEuY2hpbGROb2Rlc1szXS52YWx1ZTsKLSAgICAgIGVsc2UKLSAgICAgICAgZGlzY292ZXJ5VVJMID0gY29sdW1uMS5jaGlsZE5vZGVzWzFdLnZhbHVlOwotICAgICAgZm9ybS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KHZpZXdJZE5hbWUsdmlld0lkKSk7Ci0gICAgICBmb3JtLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoZGlzY292ZXJ5VVJMTmFtZSxkaXNjb3ZlcnlVUkwpKTsKLSAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudChtb2RpZmllZE5hbWUsZWRpdGFibGUpKTsgICAgICAgIAotICAgIH0KLSAgfQotICAKLSAgZnVuY3Rpb24gcHJvY2Vzc0RldGFpbHNMYW5ndWFnZUlucHV0VGFibGUodGFibGVDb250YWluZXJJZCxtb2RpZmllZE5hbWUsdmlld0lkTmFtZSxsYW5nSWROYW1lLGlucHV0TmFtZSxmb3JtKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgZm9yICh2YXIgaT1udW1iZXJPZkhlYWRlclJvd3M7aTx0YWJsZS5yb3dzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgdmFyIGNvbHVtbnMgPSB0YWJsZS5yb3dzW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwotICAgICAgdmFyIGNvbHVtbjEgPSBjb2x1bW5zLml0ZW0oMSk7Ci0gICAgICB2YXIgdmlld0lkID0gY29sdW1uMS5jaGlsZE5vZGVzWzBdLnZhbHVlOwotICAgICAgdmFyIGVkaXRhYmxlID0gKGNvbHVtbjEuY2hpbGROb2Rlc1s0XS52YWx1ZSA9PSAidHJ1ZSIpOwotICAgICAgdmFyIGxhbmdJZCxpbnB1dFRleHQ7Ci0gICAgICBpZiAoZWRpdGFibGUpCi0gICAgICB7Ci0gICAgICAgIGxhbmdJZCA9IGNvbHVtbjEuY2hpbGROb2Rlc1s1XS52YWx1ZTsKLSAgICAgICAgdmFyIGNvbHVtbjIgPSBjb2x1bW5zLml0ZW0oMik7Ci0gICAgICAgIGlucHV0VGV4dCA9IGNvbHVtbjIuY2hpbGROb2Rlc1swXS52YWx1ZTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgbGFuZ0lkID0gY29sdW1uMS5jaGlsZE5vZGVzWzFdLnZhbHVlOwotICAgICAgICBpbnB1dFRleHQgPSBjb2x1bW4xLmNoaWxkTm9kZXNbMl0udmFsdWU7Ci0gICAgICB9Ci0gICAgICBmb3JtLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQodmlld0lkTmFtZSx2aWV3SWQpKTsKLSAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudChsYW5nSWROYW1lLGxhbmdJZCkpOwotICAgICAgZm9ybS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KGlucHV0TmFtZSxpbnB1dFRleHQpKTsKLSAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudChtb2RpZmllZE5hbWUsZWRpdGFibGUpKTsKLSAgICB9Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIHByb2Nlc3NEZXRhaWxzSWRlbnRpZmllclRhYmxlKHRhYmxlQ29udGFpbmVySWQsZm9ybSkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIGZvciAodmFyIGk9bnVtYmVyT2ZIZWFkZXJSb3dzO2k8dGFibGUucm93cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIHZhciBjb2x1bW5zID0gdGFibGUucm93c1tpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKTsKLSAgICAgIHZhciBjb2x1bW4xID0gY29sdW1ucy5pdGVtKDEpOwotICAgICAgdmFyIHZpZXdJZCA9IGNvbHVtbjEuY2hpbGROb2Rlc1swXS52YWx1ZTsKLSAgICAgIHZhciBlZGl0YWJsZSA9IChjb2x1bW4xLmNoaWxkTm9kZXNbNF0udmFsdWUgPT0gInRydWUiKTsKLSAgICAgIHZhciB0TW9kZWxLZXksaWRLZXlOYW1lLGlkS2V5VmFsdWU7Ci0gICAgICBpZiAoZWRpdGFibGUpCi0gICAgICB7Ci0gICAgICAgIHRNb2RlbEtleSA9IGNvbHVtbjEuY2hpbGROb2Rlc1s1XS52YWx1ZTsKLSAgICAgICAgdmFyIGNvbHVtbjIgPSBjb2x1bW5zLml0ZW0oMik7Ci0gICAgICAgIGlkS2V5TmFtZSA9IGNvbHVtbjIuY2hpbGROb2Rlc1swXS52YWx1ZTsKLSAgICAgICAgdmFyIGNvbHVtbjMgPSBjb2x1bW5zLml0ZW0oMyk7Ci0gICAgICAgIGlkS2V5VmFsdWUgPSBjb2x1bW4zLmNoaWxkTm9kZXNbMF0udmFsdWU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHRNb2RlbEtleSA9IGNvbHVtbjEuY2hpbGROb2Rlc1sxXS52YWx1ZTsKLSAgICAgICAgaWRLZXlOYW1lID0gY29sdW1uMS5jaGlsZE5vZGVzWzJdLnZhbHVlOwotICAgICAgICBpZEtleVZhbHVlID0gY29sdW1uMS5jaGlsZE5vZGVzWzNdLnZhbHVlOwotICAgICAgfQotICAgICAgZm9ybS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCI8JT1VRERJQWN0aW9uSW5wdXRzLklERU5USUZJRVJfVklFV0lEJT4iLHZpZXdJZCkpOwotICAgICAgZm9ybS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0lERU5USUZJRVJfVFlQRSU+Iix0TW9kZWxLZXkpKTsKLSAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9JREVOVElGSUVSX0tFWV9OQU1FJT4iLGlkS2V5TmFtZSkpOwotICAgICAgZm9ybS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0lERU5USUZJRVJfS0VZX1ZBTFVFJT4iLGlkS2V5VmFsdWUpKTsKLSAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiPCU9VURESUFjdGlvbklucHV0cy5JREVOVElGSUVSX01PRElGSUVEJT4iLGVkaXRhYmxlKSk7ICAgICAgCi0gICAgfQotICB9Ci0gIAotICBmdW5jdGlvbiBwcm9jZXNzRGV0YWlsc0NhdGVnb3J5VGFibGUodGFibGVDb250YWluZXJJZCxmb3JtKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgZm9yICh2YXIgaT1udW1iZXJPZkhlYWRlclJvd3M7aTx0YWJsZS5yb3dzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgdmFyIGNvbHVtbnMgPSB0YWJsZS5yb3dzW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwotICAgICAgdmFyIGNvbHVtbjEgPSBjb2x1bW5zLml0ZW0oMSk7Ci0gICAgICB2YXIgdmlld0lkID0gY29sdW1uMS5jaGlsZE5vZGVzWzBdLnZhbHVlOwotICAgICAgdmFyIGVkaXRhYmxlID0gKGNvbHVtbjEuY2hpbGROb2Rlc1s0XS52YWx1ZSA9PSAidHJ1ZSIpOwotICAgICAgdmFyIHRNb2RlbEtleSxjYXRLZXlOYW1lLGNhdEtleVZhbHVlOwotICAgICAgaWYgKGVkaXRhYmxlKQotICAgICAgewotICAgICAgICB0TW9kZWxLZXkgPSBjb2x1bW4xLmNoaWxkTm9kZXNbNV0udmFsdWU7Ci0gICAgICAgIHZhciBjb2x1bW4yID0gY29sdW1ucy5pdGVtKDIpOwotICAgICAgICBjYXRLZXlOYW1lID0gY29sdW1uMi5jaGlsZE5vZGVzWzBdLnZhbHVlOwotICAgICAgICB2YXIgY29sdW1uMyA9IGNvbHVtbnMuaXRlbSgzKTsKLSAgICAgICAgY2F0S2V5VmFsdWUgPSBjb2x1bW4zLmNoaWxkTm9kZXNbMF0udmFsdWU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHRNb2RlbEtleSA9IGNvbHVtbjEuY2hpbGROb2Rlc1sxXS52YWx1ZTsKLSAgICAgICAgY2F0S2V5TmFtZSA9IGNvbHVtbjEuY2hpbGROb2Rlc1syXS52YWx1ZTsKLSAgICAgICAgY2F0S2V5VmFsdWUgPSBjb2x1bW4xLmNoaWxkTm9kZXNbM10udmFsdWU7Ci0gICAgICB9Ci0gICAgICBmb3JtLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIjwlPVVERElBY3Rpb25JbnB1dHMuQ0FURUdPUllfVklFV0lEJT4iLHZpZXdJZCkpOwotICAgICAgZm9ybS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0NBVEVHT1JZX1RZUEUlPiIsdE1vZGVsS2V5KSk7Ci0gICAgICBmb3JtLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfQ0FURUdPUllfS0VZX05BTUUlPiIsY2F0S2V5TmFtZSkpOwotICAgICAgZm9ybS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0NBVEVHT1JZX0tFWV9WQUxVRSU+IixjYXRLZXlWYWx1ZSkpOwotICAgICAgZm9ybS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCI8JT1VRERJQWN0aW9uSW5wdXRzLkNBVEVHT1JZX01PRElGSUVEJT4iLGVkaXRhYmxlKSk7Ci0gICAgfQotICB9Ci0gIAotICBmdW5jdGlvbiBwcm9jZXNzRGV0YWlsc1NpbmdsZUl0ZW1UYWJsZSh0YWJsZUNvbnRhaW5lcklkLG1vZGlmaWVkTmFtZSxpbnB1dE5hbWUsZm9ybSkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciBjb2x1bW5zID0gdGFibGUucm93c1tudW1iZXJPZkhlYWRlclJvd3NdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwotICAgIHZhciBjb2x1bW4wID0gY29sdW1ucy5pdGVtKDApOwotICAgIHZhciBjb2x1bW4xID0gY29sdW1ucy5pdGVtKDEpOwotICAgIHZhciBlZGl0YWJsZSA9IChjb2x1bW4wLmNoaWxkTm9kZXNbY29sdW1uMC5jaGlsZE5vZGVzLmxlbmd0aC0yXS52YWx1ZSA9PSAidHJ1ZSIpOwotICAgIHZhciBpbnB1dFZhbHVlOwotICAgIGlmIChlZGl0YWJsZSkKLSAgICAgIGlucHV0VmFsdWUgPSBjb2x1bW4wLmNoaWxkTm9kZXNbY29sdW1uMC5jaGlsZE5vZGVzLmxlbmd0aC0xXS52YWx1ZTsKLSAgICBlbHNlCi0gICAgICBpbnB1dFZhbHVlID0gY29sdW1uMC5jaGlsZE5vZGVzWzBdLnZhbHVlOwotICAgIGZvcm0uYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudChpbnB1dE5hbWUsaW5wdXRWYWx1ZSkpOwotICAgIGZvcm0uYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudChtb2RpZmllZE5hbWUsZWRpdGFibGUpKTsgICAgCi0gIH0KLTwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3NjcmlwdHMvcmVzdWx0cy5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvc2NyaXB0cy9yZXN1bHRzLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzFiNjY3Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvc2NyaXB0cy9yZXN1bHRzLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEzNSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzdWJRdWVyeVRyYW5zZmVyVGFyZ2V0SG9sZGVyIiBjbGFzcz0iamF2YS51dGlsLlZlY3RvciIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvZm9ybXN1Ym1pdC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3VkZGkvc2NyaXB0cy91ZGRpdGFibGVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBmdW5jdGlvbiBnZXROdW1iZXJPZlNlbGVjdGlvbnModGFibGVDb250YWluZXJJZCkKLSAgewotICAgIHZhciBudW1iZXJTZWxlY3RlZCA9IDA7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgZm9yICh2YXIgaT1udW1iZXJPZkhlYWRlclJvd3M7aTx0YWJsZS5yb3dzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgdmFyIHJvd0NoZWNrYm94ID0gdGFibGUucm93c1tpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKS5pdGVtKDApOwotICAgICAgaWYgKHJvd0NoZWNrYm94LmNoZWNrZWQpCi0gICAgICAgIG51bWJlclNlbGVjdGVkKys7Ci0gICAgfQotICAgIHJldHVybiBudW1iZXJTZWxlY3RlZDsKLSAgfQotICAKLSAgZnVuY3Rpb24gcHJvY2Vzc1Jlc3VsdEZvcm0odGFibGVDb250YWluZXJJZCxmb3JtKQotICB7Ci0gICAgaWYgKGhhbmRsZVN1Ym1pdChmb3JtKSkKLSAgICB7Ci0gICAgICBwcm9jZXNzUmVzdWx0VGFibGUodGFibGVDb250YWluZXJJZCwiPCU9QWN0aW9uSW5wdXRzLk5PREVJRCU+Iixmb3JtLHRydWUpOwotICAgICAgZm9ybS5zdWJtaXQoKTsKLSAgICB9Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGNsZWFyU2VsZWN0aW9ucyh0YWJsZUNvbnRhaW5lcklkLGZvcm0pCi0gIHsKLSAgICBmb3JtLmFjdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvYWN0aW9ucy9DbGVhck5hdmlnYXRvck5vZGVzQWN0aW9uSlNQLmpzcCIpKSU+IjsKLSAgICAvLyBFbnN1cmUgdGhhdCBhdCBsZWFzdCBvbmUgaXRlbSBpcyBzZWxlY3RlZC4KLSAgICB2YXIgbnVtYmVyU2VsZWN0ZWQgPSBnZXROdW1iZXJPZlNlbGVjdGlvbnModGFibGVDb250YWluZXJJZCk7Ci0gICAgaWYgKG51bWJlclNlbGVjdGVkID4gMCkKLSAgICAgIHByb2Nlc3NSZXN1bHRGb3JtKHRhYmxlQ29udGFpbmVySWQsZm9ybSk7Ci0gICAgZWxzZQotICAgICAgYWxlcnQoIjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9USElOR19TRUxFQ1RFRCIpJT4iKTsKLSAgfQotICAKLSAgZnVuY3Rpb24gcmVmcmVzaFNlbGVjdGlvbnModGFibGVDb250YWluZXJJZCxmb3JtKQotICB7Ci0gICAgZm9ybS5hY3Rpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnMvUmVmcmVzaFVERElOb2Rlc0FjdGlvbkpTUC5qc3AiKSklPiI7Ci0gICAgLy8gRW5zdXJlIHRoYXQgYXQgbGVhc3Qgb25lIGl0ZW0gaXMgc2VsZWN0ZWQuCi0gICAgdmFyIG51bWJlclNlbGVjdGVkID0gZ2V0TnVtYmVyT2ZTZWxlY3Rpb25zKHRhYmxlQ29udGFpbmVySWQpOwotICAgIGlmIChudW1iZXJTZWxlY3RlZCA+IDApCi0gICAgICBwcm9jZXNzUmVzdWx0Rm9ybSh0YWJsZUNvbnRhaW5lcklkLGZvcm0pOwotICAgIGVsc2UKLSAgICAgIGFsZXJ0KCI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PVEhJTkdfU0VMRUNURUQiKSU+Iik7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGFkZFNlbGVjdGlvbnNUb0Zhdm9yaXRlcyh0YWJsZUNvbnRhaW5lcklkLGZvcm0pCi0gIHsKLSAgICBmb3JtLmFjdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvYWN0aW9ucy9BZGRJdGVtc1RvRmF2b3JpdGVzQWN0aW9uSlNQLmpzcCIpKSU+IjsKLSAgICAvLyBFbnN1cmUgdGhhdCBhdCBsZWFzdCBvbmUgaXRlbSBpcyBzZWxlY3RlZC4KLSAgICB2YXIgbnVtYmVyU2VsZWN0ZWQgPSBnZXROdW1iZXJPZlNlbGVjdGlvbnModGFibGVDb250YWluZXJJZCk7Ci0gICAgaWYgKG51bWJlclNlbGVjdGVkID4gMCkKLSAgICAgIHByb2Nlc3NSZXN1bHRGb3JtKHRhYmxlQ29udGFpbmVySWQsZm9ybSk7Ci0gICAgZWxzZQotICAgICAgYWxlcnQoIjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9USElOR19TRUxFQ1RFRCIpJT4iKTsKLSAgfQotICAKLTwlCi0gICBpZiAoc3ViUXVlcnlUcmFuc2ZlclRhcmdldEhvbGRlci5zaXplKCkgPiAwKQotICAgewotICAgICBTdWJRdWVyeVRyYW5zZmVyVGFyZ2V0IHN1YlF1ZXJ5VHJhbnNmZXJUYXJnZXQgPSAoU3ViUXVlcnlUcmFuc2ZlclRhcmdldClzdWJRdWVyeVRyYW5zZmVyVGFyZ2V0SG9sZGVyLmVsZW1lbnRBdCgwKTsKLSAgICAgU3RyaW5nIHN1YlF1ZXJ5S2V5ID0gc3ViUXVlcnlUcmFuc2ZlclRhcmdldC5nZXRTdWJRdWVyeUtleSgpOwotICAgICBpbnQgbGFzdFNlcGFyYXRvclBvcyA9IHN1YlF1ZXJ5S2V5Lmxhc3RJbmRleE9mKCc6Jyk7Ci0gICAgIFN0cmluZyB0YXJnZXRRdWVyeUtleTsKLSAgICAgaWYgKGxhc3RTZXBhcmF0b3JQb3MgPT0gLTEpCi0gICAgICAgdGFyZ2V0UXVlcnlLZXkgPSAiIjsKLSAgICAgZWxzZQotICAgICAgIHRhcmdldFF1ZXJ5S2V5ID0gc3ViUXVlcnlLZXkuc3Vic3RyaW5nKDAsbGFzdFNlcGFyYXRvclBvcyk7Ci0gICAgIFN0cmluZyB0YXJnZXRQcm9wZXJ0eSA9IHN1YlF1ZXJ5S2V5LnN1YnN0cmluZyhsYXN0U2VwYXJhdG9yUG9zKzEsc3ViUXVlcnlLZXkubGVuZ3RoKCkpOwotJT4gICAgIAotICBmdW5jdGlvbiB0cmFuc2ZlclNlbGVjdGlvbnModGFibGVDb250YWluZXJJZCxmb3JtKQotICB7Ci0gICAgZm9ybS5hY3Rpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL2FjdGlvbnMvVHJhbnNmZXJTdWJRdWVyeVJlc3VsdHNBY3Rpb25KU1AuanNwIikpJT4iOwotICAgIC8vIEVuc3VyZSB0aGF0IGF0IGxlYXN0IG9uZSBpdGVtIGlzIHNlbGVjdGVkLgotICAgIHZhciBudW1iZXJTZWxlY3RlZCA9IGdldE51bWJlck9mU2VsZWN0aW9ucyh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICBpZiAobnVtYmVyU2VsZWN0ZWQgPiAwKQotICAgIHsKLTwlCi0gICAgIGlmICh0YXJnZXRQcm9wZXJ0eS5lcXVhbHMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9TRVJWSUNFX0JVU0lORVNTKSB8fCB0YXJnZXRQcm9wZXJ0eS5lcXVhbHMoVURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9TSU1QTEVfU0VSVklDRV9CVVNJTkVTUykgfHwgdGFyZ2V0UHJvcGVydHkuZXF1YWxzKFVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfU0VSVklDRV9JTlRFUkZBQ0VfU0VSVklDRSkpCi0gICAgIHsKLSU+Ci0gICAgICBpZiAobnVtYmVyU2VsZWN0ZWQgIT0gMSkKLSAgICAgIHsKLSAgICAgICAgYWxlcnQoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX1NJTkdMRV9JVEVNIikpJT4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi08JQotICAgICAgIEZvcm1Ub29sIHRhcmdldEZvcm1Ub29sID0gc3ViUXVlcnlUcmFuc2ZlclRhcmdldC5nZXRUYXJnZXRGb3JtVG9vbCgpOwotICAgICAgIEZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSB0YXJnZXRGb3JtVG9vbFBJID0gKChNdWx0aXBsZUZvcm1Ub29sUHJvcGVydGllc0ludGVyZmFjZSl0YXJnZXRGb3JtVG9vbCkuZ2V0Rm9ybVRvb2xQcm9wZXJ0aWVzKHRhcmdldFF1ZXJ5S2V5KTsKLSAgICAgICBWZWN0b3Igc2VydmljZUJ1c2luZXNzID0gKFZlY3Rvcil0YXJnZXRGb3JtVG9vbFBJLmdldFByb3BlcnR5KHRhcmdldFByb3BlcnR5KTsKLSAgICAgICBpZiAoc2VydmljZUJ1c2luZXNzICE9IG51bGwgJiYgc2VydmljZUJ1c2luZXNzLnNpemUoKSA+IDApCi0gICAgICAgewotJT4KLSAgICAgIGlmICghY29uZmlybSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfUVVFU1RJT05fSVRFTV9SRVBMQUNFTUVOVCIpKSU+IikpCi0gICAgICAgIHJldHVybjsKLTwlCi0gICAgICAgfQotICAgICB9Ci0lPgotICAgICAgcHJvY2Vzc1Jlc3VsdEZvcm0odGFibGVDb250YWluZXJJZCxmb3JtKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgYWxlcnQoIjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9USElOR19TRUxFQ1RFRCIpJT4iKTsKLSAgfQotPCUKLSAgIH0KLSU+ICAgICAgIAotPC9zY3JpcHQ+ICAKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9zY3JpcHRzL3VkZGlmcmFtZXNldHMuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3NjcmlwdHMvdWRkaWZyYW1lc2V0cy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhMjRhZDUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3NjcmlwdHMvdWRkaWZyYW1lc2V0cy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9wYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBmdW5jdGlvbiBnZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXQoKQotICB7Ci0gICAgcmV0dXJuIHBlcnNwZWN0aXZlQ29udGVudC5mcmFtZXNbIjwlPVVERElGcmFtZU5hbWVzLkFDVElPTlNfQ09OVEFJTkVSJT4iXS5kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZnJhbWVzZXQiKS5pdGVtKDApOwotICB9Ci0KLSAgZnVuY3Rpb24gcHJvY2Vzc0ZyYW1lc2V0U2l6ZXMoZnJhbWVzZXRTaXplc0Zvcm0pCi0gIHsKLSAgICB0b2dnbGVEb3VibGVDbGlja0NvbHVtblRpdGxlKCk7Ci0gICAgdmFyIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0ID0gZ2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXQoKTsKLSAgICB2YXIgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0ID0gZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0KCk7Ci0gICAgZnJhbWVzZXRTaXplc0Zvcm0uPCU9VURESUFjdGlvbklucHV0cy5GUkFNRVNFVF9DT0xTX1BFUlNQRUNUSVZFX0NPTlRFTlQlPi52YWx1ZSA9IHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0LmNvbHM7Ci0gICAgZnJhbWVzZXRTaXplc0Zvcm0uPCU9VURESUFjdGlvbklucHV0cy5GUkFNRVNFVF9ST1dTX0FDVElPTlNfQ09OVEFJTkVSJT4udmFsdWUgPSBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXQucm93czsKLSAgICBmcmFtZXNldFNpemVzRm9ybS5zdWJtaXQoKTsKLSAgfQotPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3NjcmlwdHMvdWRkaXBhbmVzLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Q4NjRjYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvc2NyaXB0cy91ZGRpcGFuZXMuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL3BhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHZhciBuYXZpZ2F0b3JDb250YWluZXIgPSBwZXJzcGVjdGl2ZUNvbnRlbnQuZnJhbWVzWyI8JT1VRERJRnJhbWVOYW1lcy5OQVZJR0FUT1JfQ09OVEFJTkVSJT4iXTsKLSAgdmFyIG5hdmlnYXRvclRvb2xiYXIgPSBuYXZpZ2F0b3JDb250YWluZXIuZnJhbWVzWyI8JT1VRERJRnJhbWVOYW1lcy5OQVZJR0FUT1JfVE9PTEJBUiU+Il07Ci0gIHZhciBuYXZpZ2F0b3JDb250ZW50ID0gbmF2aWdhdG9yQ29udGFpbmVyLmZyYW1lc1siPCU9VURESUZyYW1lTmFtZXMuTkFWSUdBVE9SX0NPTlRFTlQlPiJdOwotICB2YXIgYWN0aW9uc0NvbnRhaW5lciA9IHBlcnNwZWN0aXZlQ29udGVudC5mcmFtZXNbIjwlPVVERElGcmFtZU5hbWVzLkFDVElPTlNfQ09OVEFJTkVSJT4iXTsKLSAgdmFyIHByb3BlcnRpZXNDb250YWluZXIgPSBhY3Rpb25zQ29udGFpbmVyLmZyYW1lc1siPCU9VURESUZyYW1lTmFtZXMuUFJPUEVSVElFU19DT05UQUlORVIlPiJdOwotICB2YXIgcHJvcGVydGllc1Rvb2xiYXIgPSBwcm9wZXJ0aWVzQ29udGFpbmVyLmZyYW1lc1siPCU9VURESUZyYW1lTmFtZXMuUFJPUEVSVElFU19UT09MQkFSJT4iXTsKLSAgdmFyIHByb3BlcnRpZXNDb250ZW50ID0gcHJvcGVydGllc0NvbnRhaW5lci5mcmFtZXNbIjwlPVVERElGcmFtZU5hbWVzLlBST1BFUlRJRVNfQ09OVEVOVCU+Il07Ci0gIHZhciBzdGF0dXNDb250YWluZXIgPSBhY3Rpb25zQ29udGFpbmVyLmZyYW1lc1siPCU9VURESUZyYW1lTmFtZXMuU1RBVFVTX0NPTlRBSU5FUiU+Il07Ci0gIHZhciBzdGF0dXNUb29sYmFyID0gc3RhdHVzQ29udGFpbmVyLmZyYW1lc1siPCU9VURESUZyYW1lTmFtZXMuU1RBVFVTX1RPT0xCQVIlPiJdOwotICB2YXIgc3RhdHVzQ29udGVudCA9IHN0YXR1c0NvbnRhaW5lci5mcmFtZXNbIjwlPVVERElGcmFtZU5hbWVzLlNUQVRVU19DT05URU5UJT4iXTsKLTwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3NjcmlwdHMvdWRkaXRhYmxlcy5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvc2NyaXB0cy91ZGRpdGFibGVzLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWZiMjc4NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvc2NyaXB0cy91ZGRpdGFibGVzLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDg5NCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy51ZGRpNGoudXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvd3NkbGJyb3dzZXIuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL3RhYmxlcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvZm9ybXV0aWxzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBTdHJpbmcgc2Vzc2lvbklkID0gc2Vzc2lvbi5nZXRJZCgpOwotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlTWFuYWdlciBuYXZpZ2F0b3JNYW5hZ2VyID0gdWRkaVBlcnNwZWN0aXZlLmdldE5hdmlnYXRvck1hbmFnZXIoKTsKLSAgIFVERElNYWluTm9kZSB1ZGRpTWFpbk5vZGUgPSAoVURESU1haW5Ob2RlKW5hdmlnYXRvck1hbmFnZXIuZ2V0Um9vdE5vZGUoKTsKLSAgIFJlZ2lzdHJ5Tm9kZSByZWdOb2RlID0gdWRkaU1haW5Ob2RlLmdldFJlZ2lzdHJ5Tm9kZShuYXZpZ2F0b3JNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpKTsKLSAgIFJlZ2lzdHJ5RWxlbWVudCByZWdFbGVtZW50ID0gKFJlZ2lzdHJ5RWxlbWVudClyZWdOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0lPgotPGpzcDp1c2VCZWFuIGlkPSJjb21tb25DYXRlZ29yeU1vZGVscyIgY2xhc3M9ImphdmEudXRpbC5IYXNodGFibGUiIHNjb3BlPSJhcHBsaWNhdGlvbiIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIC8vIFJlcXVpcmVzIGJyb3dzZXJkZXRlY3QuanMsIHRhYmxlcy5qc3AgKGV4cGxvcmVyKQotICB2YXIgcm93Q2hlY2tib3hOYW1lID0gInJvd0NoZWNrYm94TmFtZSI7Ci0gIHZhciBjYXRlZ29yeVdpbmRvdzsKLSAgdmFyIGNhdGVnb3J5V2luZG93Q2xvc2VkID0gdHJ1ZTsKLSAgdmFyIHRhcmdldENhdGVnb3J5Um93ID0gLTE7Ci0gIHZhciB0YXJnZXRDYXRlZ29yeUtleU5hbWVFbGVtZW50OwotICB2YXIgdGFyZ2V0Q2F0ZWdvcnlLZXlWYWx1ZUVsZW1lbnQ7Ci0gIHZhciBsYW5ndWFnZUFycmF5ID0gbmV3IEFycmF5KCk7Ci0gIHZhciBjYXRlZ29yeUFycmF5ID0gbmV3IEFycmF5KCk7Ci0gIHZhciB3aWxkY2FyZENhdGVnb3J5QnJvd3NlclVSTFJlID0gLyglKS87Ci0KLSAgZnVuY3Rpb24gY2xvc2VBbGxVZGRpQ2hpbGRXaW5kb3dzKCkKLSAgewotICAgIGNsb3NlQ2F0ZWdvcnlCcm93c2VyKCk7Ci0gICAgY2xvc2VXU0RMQnJvd3NlcigpOwotICB9Ci0KLSAgZnVuY3Rpb24gTGFuZ3VhZ2UoZGlzcGxheU5hbWUsbGFuZ0lkKQotICB7Ci0gICAgdGhpcy5kaXNwbGF5TmFtZSA9IGRpc3BsYXlOYW1lOwotICAgIHRoaXMubGFuZ0lkID0gbGFuZ0lkOwotICB9Ci0KLSAgZnVuY3Rpb24gY29tcGFyZUxhbmd1YWdlRGlzcGxheU5hbWVzKGEsYikKLSAgewotICAgIHZhciByZXN1bHQgPSBhLmRpc3BsYXlOYW1lLmxvY2FsZUNvbXBhcmUoYi5kaXNwbGF5TmFtZSk7Ci0gICAgaWYgKHJlc3VsdCA8IDApCi0gICAgICByZXR1cm4gLTE7Ci0gICAgZWxzZSBpZiAocmVzdWx0ID4gMCkKLSAgICAgIHJldHVybiAxOwotICAgIGVsc2UKLSAgICAgIHJldHVybiAwOwotICB9Ci0KLSAgZnVuY3Rpb24gc2V0VE1vZGVsS2V5U2VsZWN0KGl0ZW1TZWxlY3QsdE1vZGVsS2V5KQotICB7Ci0gICAgZm9yICh2YXIgaT0wO2k8aXRlbVNlbGVjdC5vcHRpb25zLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgaWYgKGl0ZW1TZWxlY3Qub3B0aW9uc1tpXS52YWx1ZS50b0xvd2VyQ2FzZSgpID09IHRNb2RlbEtleS50b0xvd2VyQ2FzZSgpKQotICAgICAgewotICAgICAgICBpdGVtU2VsZWN0Lm9wdGlvbnNbaV0uc2VsZWN0ZWQgPSB0cnVlOwotICAgICAgICByZXR1cm4gaXRlbVNlbGVjdC5vcHRpb25zW2ldLnRleHQ7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gc2V0TGFuZ3VhZ2VTZWxlY3QobGFuZ3VhZ2VTZWxlY3QsbGFuZ3VhZ2VWYWx1ZSkKLSAgewotICAgIHZhciBzdGFydDsKLTwlCi0gICAvLyBDb21wYXJlIHdpdGggdGhlIGVtcHR5IHN0cmluZyBvbmx5IGlmIHRoZSBsYW5ndWFnZVZhbHVlIGlzIHRoZSBlbXB0eSBzdHJpbmcuCi0lPgotICAgIGlmIChsYW5ndWFnZVZhbHVlLmxlbmd0aCA8IDEpCi0gICAgICBzdGFydCA9IDA7Ci0gICAgZWxzZQotICAgICAgc3RhcnQgPSAxOwotICAgIGZvciAodmFyIGk9c3RhcnQ7aTxsYW5ndWFnZVNlbGVjdC5vcHRpb25zLmxlbmd0aDtpKyspCi0gICAgewotPCUKLSAgIC8vIFVzZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBjaGVjayBpZiBsYW5ndWFnZVZhbHVlIGJlZ2lucyB3aXRoIGEga2V5IHdob3NlIGl0ZW0gaXMgaW4gdGhlIHBpY2sgbGlzdC4gVGhpcyBlbmFibGVzICJFbmdsaXNoIiB0byBiZSBzZWxlY3RlZAotICAgLy8gZm9yIGVuLXh4eCAoZGlhbGVjdHMpLgotJT4KLSAgICAgIHZhciByZWdFeHAgPSBuZXcgUmVnRXhwKCJeIitsYW5ndWFnZVNlbGVjdC5vcHRpb25zW2ldLnZhbHVlLCJpIik7Ci0gICAgICBpZiAocmVnRXhwLnRlc3QobGFuZ3VhZ2VWYWx1ZSkpCi0gICAgICB7Ci0gICAgICAgIGxhbmd1YWdlU2VsZWN0Lm9wdGlvbnNbaV0uc2VsZWN0ZWQgPSB0cnVlOwotICAgICAgICByZXR1cm4gbGFuZ3VhZ2VTZWxlY3Qub3B0aW9uc1tpXS50ZXh0OwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIHBvcHVsYXRlTGFuZ3VhZ2VTZWxlY3QobGFuZ3VhZ2VTZWxlY3QpCi0gIHsKLSAgICBpZiAobGFuZ3VhZ2VBcnJheS5sZW5ndGggPT0gMCkKLSAgICB7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiIiwiIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9FTiIpKSU+IiwiZW4iKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0FBIikpJT4iLCJhYSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfQUIiKSklPiIsImFiIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9BRiIpKSU+IiwiYWYiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0FNIikpJT4iLCJhbSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfQVIiKSklPiIsImFyIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9BUyIpKSU+IiwiYXMiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0FZIikpJT4iLCJheSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfQVoiKSklPiIsImF6Iik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9CQSIpKSU+IiwiYmEiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0JFIikpJT4iLCJiZSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfQkciKSklPiIsImJnIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9CSCIpKSU+IiwiYmgiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0JJIikpJT4iLCJiaSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfQk4iKSklPiIsImJuIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9CTyIpKSU+IiwiYm8iKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0JSIikpJT4iLCJiciIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfQ0EiKSklPiIsImNhIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9DTyIpKSU+IiwiY28iKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0NaIikpJT4iLCJjeiIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfQ1kiKSklPiIsImN5Iik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9EQSIpKSU+IiwiZGEiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0RFIikpJT4iLCJkZSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfRFoiKSklPiIsImR6Iik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9FTCIpKSU+IiwiZWwiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0VPIikpJT4iLCJlbyIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfRVMiKSklPiIsImVzIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9FVCIpKSU+IiwiZXQiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0VVIikpJT4iLCJldSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfRkEiKSklPiIsImZhIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9GSSIpKSU+IiwiZmkiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0ZKIikpJT4iLCJmaiIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfRk8iKSklPiIsImZvIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9GUiIpKSU+IiwiZnIiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0ZZIikpJT4iLCJmeSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfR0EiKSklPiIsImdhIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9HRCIpKSU+IiwiZ2QiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0dMIikpJT4iLCJnbCIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfR04iKSklPiIsImduIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9HVSIpKSU+IiwiZ3UiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0hBIikpJT4iLCJoYSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfSEkiKSklPiIsImhpIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9IUiIpKSU+IiwiaHIiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0hVIikpJT4iLCJodSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfSFkiKSklPiIsImh5Iik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9JQSIpKSU+IiwiaWEiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0lFIikpJT4iLCJpZSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfSUsiKSklPiIsImlrIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9JTiIpKSU+IiwiaW4iKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0lTIikpJT4iLCJpcyIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfSVQiKSklPiIsIml0Iik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9JVyIpKSU+IiwiaXciKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0pBIikpJT4iLCJqYSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfSkkiKSklPiIsImppIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9KVyIpKSU+IiwianciKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0tBIikpJT4iLCJrYSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfS0siKSklPiIsImtrIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9LTCIpKSU+Iiwia2wiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0tNIikpJT4iLCJrbSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfS04iKSklPiIsImtuIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9LTyIpKSU+Iiwia28iKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0tTIikpJT4iLCJrcyIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfS1UiKSklPiIsImt1Iik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9LWSIpKSU+Iiwia3kiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0xBIikpJT4iLCJsYSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfTE4iKSklPiIsImxuIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9MTyIpKSU+IiwibG8iKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX0xUIikpJT4iLCJsdCIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfTFYiKSklPiIsImx2Iik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9NRyIpKSU+IiwibWciKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX01JIikpJT4iLCJtaSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfTUsiKSklPiIsIm1rIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9NTCIpKSU+IiwibWwiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX01OIikpJT4iLCJtbiIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfTU8iKSklPiIsIm1vIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9NUiIpKSU+IiwibXIiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX01TIikpJT4iLCJtcyIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfTVQiKSklPiIsIm10Iik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9NWSIpKSU+IiwibXkiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX05BIikpJT4iLCJuYSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfTkUiKSklPiIsIm5lIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9OTCIpKSU+IiwibmwiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX05PIikpJT4iLCJubyIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfT0MiKSklPiIsIm9jIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9PTSIpKSU+Iiwib20iKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX09SIikpJT4iLCJvciIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfUEEiKSklPiIsInBhIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9QTCIpKSU+IiwicGwiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1BTIikpJT4iLCJwcyIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfUFQiKSklPiIsInB0Iik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9RVSIpKSU+IiwicXUiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1JNIikpJT4iLCJybSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfUk4iKSklPiIsInJuIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9STyIpKSU+Iiwicm8iKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1JVIikpJT4iLCJydSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfUlciKSklPiIsInJ3Iik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9TQSIpKSU+Iiwic2EiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1NEIikpJT4iLCJzZCIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfU0ciKSklPiIsInNnIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9TSCIpKSU+Iiwic2giKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1NJIikpJT4iLCJzaSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfU0siKSklPiIsInNrIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9TTCIpKSU+Iiwic2wiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1NNIikpJT4iLCJzbSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfU04iKSklPiIsInNuIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9TTyIpKSU+Iiwic28iKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1NRIikpJT4iLCJzcSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfU1IiKSklPiIsInNyIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9TUyIpKSU+Iiwic3MiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1NUIikpJT4iLCJzdCIpCi0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9TVSIpKSU+Iiwic3UiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1NWIikpJT4iLCJzdiIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfU1ciKSklPiIsInN3Iik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9UQSIpKSU+IiwidGEiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1RFIikpJT4iLCJ0ZSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfVEciKSklPiIsInRnIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9USCIpKSU+IiwidGgiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1RJIikpJT4iLCJ0aSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfVEsiKSklPiIsInRrIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9UTCIpKSU+IiwidGwiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1ROIikpJT4iLCJ0biIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfVE8iKSklPiIsInRvIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9UUiIpKSU+IiwidHIiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1RTIikpJT4iLCJ0cyIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfVFQiKSklPiIsInR0Iik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9UVyIpKSU+IiwidHciKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1VLIikpJT4iLCJ1ayIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfVVIiKSklPiIsInVyIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9VWiIpKSU+IiwidXoiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1ZJIikpJT4iLCJ2aSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfVk8iKSklPiIsInZvIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9XTyIpKSU+Iiwid28iKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1hIIikpJT4iLCJ4aCIpOwotICAgICAgbGFuZ3VhZ2VBcnJheVtsYW5ndWFnZUFycmF5Lmxlbmd0aF0gPSBuZXcgTGFuZ3VhZ2UoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fTEFOR1VBR0VfWU8iKSklPiIsInlvIik7Ci0gICAgICBsYW5ndWFnZUFycmF5W2xhbmd1YWdlQXJyYXkubGVuZ3RoXSA9IG5ldyBMYW5ndWFnZSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9MQU5HVUFHRV9aSCIpKSU+IiwiemgiKTsKLSAgICAgIGxhbmd1YWdlQXJyYXlbbGFuZ3VhZ2VBcnJheS5sZW5ndGhdID0gbmV3IExhbmd1YWdlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fT1BUSU9OX0xBTkdVQUdFX1pVIikpJT4iLCJ6dSIpOwotICAgICAgbGFuZ3VhZ2VBcnJheS5zb3J0KGNvbXBhcmVMYW5ndWFnZURpc3BsYXlOYW1lcyk7Ci0gICAgfQotCi0gICAgZm9yICh2YXIgaT0wO2k8bGFuZ3VhZ2VBcnJheS5sZW5ndGg7aSsrKQotICAgICAgbGFuZ3VhZ2VTZWxlY3Qub3B0aW9uc1tpXSA9IG5ldyBPcHRpb24obGFuZ3VhZ2VBcnJheVtpXS5kaXNwbGF5TmFtZSxsYW5ndWFnZUFycmF5W2ldLmxhbmdJZCk7Ci0gIH0KLQotICBmdW5jdGlvbiBzZXRMYW5ndWFnZUlucHV0Um93U2V0dGluZ3ModGFibGVDb250YWluZXJJZCxuYW1lSW5kZXgsbGFuZ3VhZ2VWYWx1ZSxuYW1lVGV4dFZhbHVlKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHJvdyA9IHRhYmxlLnJvd3NbbnVtYmVyT2ZIZWFkZXJSb3dzK25hbWVJbmRleF07Ci0gICAgdmFyIGxhbmd1YWdlU2VsZWN0ID0gcm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzZWxlY3QiKS5pdGVtKDApOwotICAgIHZhciBuYW1lVGV4dCA9IHJvdy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKS5pdGVtKDEpOwotICAgIHNldExhbmd1YWdlU2VsZWN0KGxhbmd1YWdlU2VsZWN0LGxhbmd1YWdlVmFsdWUpOwotICAgIG5hbWVUZXh0LnZhbHVlID0gbmFtZVRleHRWYWx1ZTsKLSAgfQotCi0gIGZ1bmN0aW9uIHJlbW92ZVNlbGVjdGVkQ2F0ZWdvcnlSb3dzKHRhYmxlQ29udGFpbmVySWQpCi0gIHsKLSAgICAvLyBDaGVjayBpZiBhbnkgcm93cyBhYm92ZSBhbmQgaW5jbHVkaW5nIHRoZSB0YXJnZXRDYXRlZ29yeVJvdyBhcmUgc2VsZWN0ZWQuCi0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIG5ld1RhcmdldENhdGVnb3J5Um93ID0gdGFyZ2V0Q2F0ZWdvcnlSb3c7Ci0gICAgZm9yICh2YXIgaT1udW1iZXJPZkhlYWRlclJvd3M7aTw9dGFyZ2V0Q2F0ZWdvcnlSb3c7aSsrKQotICAgIHsKLSAgICAgIHZhciB0YWJsZVJvdyA9IHRhYmxlLnJvd3NbaV07Ci0gICAgICB2YXIgcm93Q2hlY2tib3ggPSB0YWJsZVJvdy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKS5pdGVtKDApOwotICAgICAgaWYgKHJvd0NoZWNrYm94LmNoZWNrZWQpCi0gICAgICB7Ci0gICAgICAgIGlmIChpID09IHRhcmdldENhdGVnb3J5Um93KQotICAgICAgICAgIG5ld1RhcmdldENhdGVnb3J5Um93ID0gLTE7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBuZXdUYXJnZXRDYXRlZ29yeVJvdy0tOwotICAgICAgfQotICAgIH0KLSAgICBpZiAobmV3VGFyZ2V0Q2F0ZWdvcnlSb3cgPT0gLTEpCi0gICAgICBjbG9zZUNhdGVnb3J5QnJvd3NlcigpOwotICAgIHRhcmdldENhdGVnb3J5Um93ID0gbmV3VGFyZ2V0Q2F0ZWdvcnlSb3c7Ci0gICAgcmVtb3ZlU2VsZWN0ZWRSb3dzKHRhYmxlQ29udGFpbmVySWQpOwotICAgIC8vIEZpeCB0aGUgYnJvd3NlLi4uIGxpbmtzLgotICAgIGZvciAodmFyIGk9bnVtYmVyT2ZIZWFkZXJSb3dzO2k8dGFibGUucm93cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIHZhciB0YWJsZVJvdyA9IHRhYmxlLnJvd3NbaV07Ci0gICAgICB2YXIgYnJvd3NlTGluayA9IHRhYmxlUm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJhIikuaXRlbSgwKTsKLSAgICAgIHNldEpTTGlua1Jvd1RhcmdldChicm93c2VMaW5rLCJvcGVuQ2F0ZWdvcnlCcm93c2VyIix0YWJsZUNvbnRhaW5lcklkLGkpOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIGFkZExhbmd1YWdlSW5wdXRSb3codGFibGVDb250YWluZXJJZCx0ZXh0Q29udHJvbFRpdGxlKQotICB7Ci0gICAgdHdpc3RPcGVuKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciB0YWJsZUJvZHkgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVEJPRFkiKS5pdGVtKDApOwotICAgIHZhciBuZXdSb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpOwotICAgIHZhciBjb2x1bW4wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotCi0gICAgdmFyIHJvd0NoZWNrYm94ID0gY3JlYXRlUm93Q2hlY2tib3goKTsKLSAgICBjb2x1bW4wLmFwcGVuZENoaWxkKHJvd0NoZWNrYm94KTsKLQotICAgIHZhciBsYW5ndWFnZVNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpOwotICAgIHBvcHVsYXRlTGFuZ3VhZ2VTZWxlY3QobGFuZ3VhZ2VTZWxlY3QpOwotICAgIGNvbHVtbjEuYXBwZW5kQ2hpbGQobGFuZ3VhZ2VTZWxlY3QpOwotCi0gICAgdmFyIHRleHRJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Ci0gICAgY29sdW1uMi5hcHBlbmRDaGlsZCh0ZXh0SW5wdXQpOwotCi0gICAgY29sdW1uMC5jbGFzc05hbWUgPSAiY2hlY2tib3hjZWxscyI7Ci0gICAgbGFuZ3VhZ2VTZWxlY3QuY2xhc3NOYW1lID0gInNlbGVjdGxpc3QiOwotICAgIGNvbHVtbjEuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIHRleHRJbnB1dC5jbGFzc05hbWUgPSAidGFibGV0ZXh0ZW50ZXIiOwotICAgIHRleHRJbnB1dC50aXRsZSA9IHRleHRDb250cm9sVGl0bGU7Ci0gICAgY29sdW1uMi5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgY29sdW1uMi53aWR0aCA9ICI5MCUiOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4wKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMSk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjIpOwotICAgIHRhYmxlQm9keS5hcHBlbmRDaGlsZChuZXdSb3cpOwotICB9Ci0KLSAgZnVuY3Rpb24gc2V0SWRlbnRpZmllclJvd1NldHRpbmdzKHRhYmxlQ29udGFpbmVySWQsaWRlbnRpZmllckluZGV4LHRNb2RlbEtleSxrZXlOYW1lLGtleVZhbHVlKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHJvdyA9IHRhYmxlLnJvd3NbbnVtYmVyT2ZIZWFkZXJSb3dzK2lkZW50aWZpZXJJbmRleF07Ci0gICAgdmFyIGlkZW50aWZpZXJUeXBlU2VsZWN0ID0gcm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzZWxlY3QiKS5pdGVtKDApOwotICAgIHZhciByb3dFbGVtZW50Q29sbGVjdGlvbiA9IHJvdy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKTsKLSAgICB2YXIga2V5TmFtZVRleHQgPSByb3dFbGVtZW50Q29sbGVjdGlvbi5pdGVtKDEpOwotICAgIHZhciBrZXlWYWx1ZVRleHQgPSByb3dFbGVtZW50Q29sbGVjdGlvbi5pdGVtKDIpOwotICAgIHNldFRNb2RlbEtleVNlbGVjdChpZGVudGlmaWVyVHlwZVNlbGVjdCx0TW9kZWxLZXkpOwotICAgIGtleU5hbWVUZXh0LnZhbHVlID0ga2V5TmFtZTsKLSAgICBrZXlWYWx1ZVRleHQudmFsdWUgPSBrZXlWYWx1ZTsKLSAgfQotCi0gIGZ1bmN0aW9uIHBvcHVsYXRlSWRlbnRpZmllclR5cGVTZWxlY3QoaWRlbnRpZmllclR5cGVTZWxlY3QpCi0gIHsKLSAgICB2YXIgY291bnRlciA9IDA7Ci0gICAgaWRlbnRpZmllclR5cGVTZWxlY3Qub3B0aW9uc1tjb3VudGVyKytdID0gbmV3IE9wdGlvbigiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX09QVElPTl9JREVOVElGSUVSX0RVTlMiKSklPiIsIjwlPVRNb2RlbC5EX1VfTl9TX1RNT0RFTF9LRVklPiIpOwotICAgIGlkZW50aWZpZXJUeXBlU2VsZWN0Lm9wdGlvbnNbY291bnRlcisrXSA9IG5ldyBPcHRpb24oIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9PUFRJT05fSURFTlRJRklFUl9USE9NQVNfUkVHSVNUUlkiKSklPiIsIjwlPVRNb2RlbC5USE9NQVNfUkVHSVNURVJfVE1PREVMX0tFWSU+Iik7Ci0gIH0KLQotICBmdW5jdGlvbiBoYW5kbGVJZGVudGlmaWVyQ2hhbmdlKGUpCi0gIHsKLSAgICB2YXIgaWRlbnRpZmllclNlbGVjdDsKLSAgICBpZiAoaXNNaWNyb3NvZnRJbnRlcm5ldEV4cGxvcmVyKCkpCi0gICAgICBpZGVudGlmaWVyU2VsZWN0ID0gZXZlbnQuc3JjRWxlbWVudDsKLSAgICBlbHNlCi0gICAgICBpZGVudGlmaWVyU2VsZWN0ID0gZS50YXJnZXQ7Ci0gICAgdmFyIGNlbGwgPSBpZGVudGlmaWVyU2VsZWN0LnBhcmVudE5vZGU7Ci0gICAgdmFyIHJvdyA9IGNlbGwucGFyZW50Tm9kZTsKLSAgICB2YXIgaW5wdXRFbGVtZW50cyA9IHJvdy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKTsKLSAgICBmb3IgKHZhciBpPTA7aTxpbnB1dEVsZW1lbnRzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgaWYgKGlucHV0RWxlbWVudHMuaXRlbShpKS50eXBlID09ICJ0ZXh0IikKLSAgICAgIHsKLSAgICAgICAgaW5wdXRFbGVtZW50cy5pdGVtKGkpLnZhbHVlID0gaWRlbnRpZmllclNlbGVjdC5vcHRpb25zW2lkZW50aWZpZXJTZWxlY3Quc2VsZWN0ZWRJbmRleF0udGV4dDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gYWRkSWRlbnRpZmllclJvdyh0YWJsZUNvbnRhaW5lcklkKQotICB7Ci0gICAgdHdpc3RPcGVuKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciB0YWJsZUJvZHkgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVEJPRFkiKS5pdGVtKDApOwotICAgIHZhciBuZXdSb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpOwotICAgIHZhciBjb2x1bW4wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW4zID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLQotICAgIHZhciByb3dDaGVja2JveCA9IGNyZWF0ZVJvd0NoZWNrYm94KCk7Ci0gICAgY29sdW1uMC5hcHBlbmRDaGlsZChyb3dDaGVja2JveCk7Ci0KLSAgICB2YXIga2V5VHlwZVNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpOwotICAgIGtleVR5cGVTZWxlY3Qub25jaGFuZ2UgPSBoYW5kbGVJZGVudGlmaWVyQ2hhbmdlOwotICAgIHBvcHVsYXRlSWRlbnRpZmllclR5cGVTZWxlY3Qoa2V5VHlwZVNlbGVjdCk7Ci0gICAgY29sdW1uMS5hcHBlbmRDaGlsZChrZXlUeXBlU2VsZWN0KTsKLQotICAgIHZhciBrZXlOYW1lVGV4dElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKLSAgICBjb2x1bW4yLmFwcGVuZENoaWxkKGtleU5hbWVUZXh0SW5wdXQpOwotCi0gICAgdmFyIGtleVZhbHVlVGV4dElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKLSAgICBjb2x1bW4zLmFwcGVuZENoaWxkKGtleVZhbHVlVGV4dElucHV0KTsKLQotICAgIGNvbHVtbjAuY2xhc3NOYW1lID0gImNoZWNrYm94Y2VsbHMiOwotICAgIGtleVR5cGVTZWxlY3QuY2xhc3NOYW1lID0gInNlbGVjdGxpc3QiCi0gICAgY29sdW1uMS5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgY29sdW1uMS53aWR0aCA9ICI1JSI7Ci0gICAga2V5TmFtZVRleHRJbnB1dC5jbGFzc05hbWUgPSAidGFibGV0ZXh0ZW50ZXIiOwotICAgIGtleU5hbWVUZXh0SW5wdXQudGl0bGUgPSAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfSURFTlRJRklFUl9LRVlfTkFNRSIpKSU+IjsKLSAgICBjb2x1bW4yLmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICBjb2x1bW4yLndpZHRoID0gIjQwJSI7Ci0gICAga2V5VmFsdWVUZXh0SW5wdXQuY2xhc3NOYW1lID0gInRhYmxldGV4dGVudGVyIjsKLSAgICBrZXlWYWx1ZVRleHRJbnB1dC50aXRsZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9JREVOVElGSUVSX0tFWV9WQUxVRSIpKSU+IjsKLSAgICBjb2x1bW4zLmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICBjb2x1bW4zLndpZHRoID0gIjU1JSI7Ci0KLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMCk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjEpOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4yKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMyk7Ci0gICAgdGFibGVCb2R5LmFwcGVuZENoaWxkKG5ld1Jvdyk7Ci0gICAga2V5TmFtZVRleHRJbnB1dC52YWx1ZSA9IGtleVR5cGVTZWxlY3Qub3B0aW9uc1swXS50ZXh0OwotICB9Ci0gIAotICBmdW5jdGlvbiBDYXRlZ29yeShkaXNwbGF5TmFtZSx0TW9kZWxLZXkpCi0gIHsKLSAgICB0aGlzLmRpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7Ci0gICAgdGhpcy50TW9kZWxLZXkgPSB0TW9kZWxLZXk7Ci0gIH0KLQotICBmdW5jdGlvbiBjb21wYXJlQ2F0ZWdvcnlEaXNwbGF5TmFtZXMoYSxiKQotICB7Ci0gICAgdmFyIHJlc3VsdCA9IGEuZGlzcGxheU5hbWUubG9jYWxlQ29tcGFyZShiLmRpc3BsYXlOYW1lKTsKLSAgICBpZiAocmVzdWx0IDwgMCkKLSAgICAgIHJldHVybiAtMTsKLSAgICBlbHNlIGlmIChyZXN1bHQgPiAwKQotICAgICAgcmV0dXJuIDE7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIDA7Ci0gIH0gIAotCi0gIGZ1bmN0aW9uIHBvcHVsYXRlQ2F0ZWdvcnlUeXBlU2VsZWN0KGNhdGVnb3J5VHlwZVNlbGVjdCkKLSAgewotICAgIGlmIChjYXRlZ29yeUFycmF5Lmxlbmd0aCA9PSAwKQotICAgIHsKLTwlCi0gICBFbnVtZXJhdGlvbiBjb21tb25DYXRlZ29yaWVzID0gY29tbW9uQ2F0ZWdvcnlNb2RlbHMuZWxlbWVudHMoKTsKLSAgIHdoaWxlIChjb21tb25DYXRlZ29yaWVzLmhhc01vcmVFbGVtZW50cygpKQotICAgewotICAgICBDYXRlZ29yeU1vZGVsIGNvbW1vbkNhdGVnb3J5TW9kZWwgPSAoQ2F0ZWdvcnlNb2RlbCljb21tb25DYXRlZ29yaWVzLm5leHRFbGVtZW50KCk7Ci0lPgotICAgICAgY2F0ZWdvcnlBcnJheVtjYXRlZ29yeUFycmF5Lmxlbmd0aF0gPSBuZXcgQ2F0ZWdvcnkoIjwlPUhUTUxVdGlscy5KU01hbmdsZShjb21tb25DYXRlZ29yeU1vZGVsLmdldERpc3BsYXlOYW1lKCkpJT4iLCI8JT1jb21tb25DYXRlZ29yeU1vZGVsLmdldFRNb2RlbEtleSgpJT4iKTsKLTwlCi0gICB9Ci0gICBFbnVtZXJhdGlvbiB1c2VyRGVmaW5lZENhdGVnb3JpZXMgPSByZWdFbGVtZW50LmdldFVzZXJEZWZpbmVkQ2F0ZWdvcmllcygpOwotICAgaWYgKHVzZXJEZWZpbmVkQ2F0ZWdvcmllcyAhPSBudWxsKQotICAgewotICAgICB3aGlsZSAodXNlckRlZmluZWRDYXRlZ29yaWVzLmhhc01vcmVFbGVtZW50cygpKQotICAgICB7Ci0gICAgICAgQ2F0ZWdvcnlNb2RlbCB1c2VyRGVmaW5lZENhdGVnb3J5ID0gKENhdGVnb3J5TW9kZWwpdXNlckRlZmluZWRDYXRlZ29yaWVzLm5leHRFbGVtZW50KCk7Ci0lPgotICAgICAgY2F0ZWdvcnlBcnJheVtjYXRlZ29yeUFycmF5Lmxlbmd0aF0gPSBuZXcgQ2F0ZWdvcnkoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1c2VyRGVmaW5lZENhdGVnb3J5LmdldERpc3BsYXlOYW1lKCkpJT4iLCI8JT11c2VyRGVmaW5lZENhdGVnb3J5LmdldFRNb2RlbEtleSgpJT4iKTsKLTwlCi0gICAgIH0KLSAgIH0KLSU+Ci0gICAgICBjYXRlZ29yeUFycmF5LnNvcnQoY29tcGFyZUNhdGVnb3J5RGlzcGxheU5hbWVzKTsKLSAgICB9Ci0gICAgCi0gICAgZm9yICh2YXIgaT0wO2k8Y2F0ZWdvcnlBcnJheS5sZW5ndGg7aSsrKQotICAgICAgY2F0ZWdvcnlUeXBlU2VsZWN0Lm9wdGlvbnNbaV0gPSBuZXcgT3B0aW9uKGNhdGVnb3J5QXJyYXlbaV0uZGlzcGxheU5hbWUsY2F0ZWdvcnlBcnJheVtpXS50TW9kZWxLZXkpOwotICB9Ci0KLSAgZnVuY3Rpb24gc2V0SlNMaW5rUm93VGFyZ2V0KGxpbmssanNGdW5jdGlvbix0YWJsZUNvbnRhaW5lcklkLHJvdykKLSAgewotICAgIGxpbmsuaHJlZiA9ICJqYXZhc2NyaXB0OiIranNGdW5jdGlvbisiKCciK3RhYmxlQ29udGFpbmVySWQrIicsIityb3crIikiOwotICB9Ci0KLSAgZnVuY3Rpb24gb3BlbkNhdGVnb3J5QnJvd3Nlcih0YWJsZUNvbnRhaW5lcklkLHJvdykKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciBjYXRlZ29yeVNlbGVjdCA9IHRhYmxlLnJvd3Nbcm93XS5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2VsZWN0IikuaXRlbSgwKTsKLSAgICB2YXIgc2VsZWN0ZWRDYXRlZ29yeU9wdGlvbiA9IGNhdGVnb3J5U2VsZWN0Lm9wdGlvbnNbY2F0ZWdvcnlTZWxlY3Qub3B0aW9ucy5zZWxlY3RlZEluZGV4XTsKLSAgICB2YXIgY2F0ZWdvcnlUeXBlID0gdGFibGUucm93c1tyb3ddLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzZWxlY3QiKS5pdGVtKDApLm9wdGlvbnMuc2VsZWN0ZWRJbmRleDsKLSAgICB2YXIgY29sdW1ucyA9IHRhYmxlLnJvd3Nbcm93XS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKTsKLSAgICB0YXJnZXRDYXRlZ29yeVJvdyA9IHJvdzsKLSAgICB0YXJnZXRDYXRlZ29yeUtleU5hbWVFbGVtZW50ID0gY29sdW1ucy5pdGVtKDIpLmNoaWxkTm9kZXNbMF07Ci0gICAgdGFyZ2V0Q2F0ZWdvcnlLZXlWYWx1ZUVsZW1lbnQgPSBjb2x1bW5zLml0ZW0oMykuY2hpbGROb2Rlc1swXTsKLSAgICB2YXIgbGluayA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlbkNhdGVnb3J5QnJvd3NlckFjdGlvbi5nZXRXaWxkQ2FyZEFjdGlvbkxpbmsoc2Vzc2lvbklkKSkpJT4iOwotICAgIGNhdGVnb3J5V2luZG93ID0gd2luZG93Lm9wZW4obGluay5yZXBsYWNlKHdpbGRjYXJkQ2F0ZWdvcnlCcm93c2VyVVJMUmUsc2VsZWN0ZWRDYXRlZ29yeU9wdGlvbi52YWx1ZSksImNhdGVnb3J5V2luZG93IiwiaGVpZ2h0PTMwMCx3aWR0aD0zMDAsc3RhdHVzPXllcyxzY3JvbGxiYXJzPXllcyxyZXNpemFibGU9eWVzIik7Ci0gICAgaWYgKGNhdGVnb3J5V2luZG93LmZvY3VzKQotICAgICAgY2F0ZWdvcnlXaW5kb3cuZm9jdXMoKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGNsb3NlQ2F0ZWdvcnlCcm93c2VyKCkKLSAgewotICAgIGlmICghY2F0ZWdvcnlXaW5kb3dDbG9zZWQpCi0gICAgICBjYXRlZ29yeVdpbmRvdy5jbG9zZSgpOwotICB9Ci0KLSAgZnVuY3Rpb24gc2V0Q2F0ZWdvcnlSb3dTZXR0aW5ncyh0YWJsZUNvbnRhaW5lcklkLGNhdGVnb3J5SW5kZXgsdE1vZGVsS2V5LGtleU5hbWUsa2V5VmFsdWUpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgcm93ID0gdGFibGUucm93c1tudW1iZXJPZkhlYWRlclJvd3MrY2F0ZWdvcnlJbmRleF07Ci0gICAgdmFyIGNhdGVnb3J5VHlwZVNlbGVjdCA9IHJvdy5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2VsZWN0IikuaXRlbSgwKTsKLSAgICB2YXIgcm93RWxlbWVudENvbGxlY3Rpb24gPSByb3cuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0Iik7Ci0gICAgdmFyIGtleU5hbWVUZXh0ID0gcm93RWxlbWVudENvbGxlY3Rpb24uaXRlbSgxKTsKLSAgICB2YXIga2V5VmFsdWVUZXh0ID0gcm93RWxlbWVudENvbGxlY3Rpb24uaXRlbSgyKTsKLSAgICBzZXRUTW9kZWxLZXlTZWxlY3QoY2F0ZWdvcnlUeXBlU2VsZWN0LHRNb2RlbEtleSk7Ci0gICAga2V5TmFtZVRleHQudmFsdWUgPSBrZXlOYW1lOwotICAgIGtleVZhbHVlVGV4dC52YWx1ZSA9IGtleVZhbHVlOwotICB9Ci0KLSAgZnVuY3Rpb24gYWRkQ2F0ZWdvcnlSb3dCcm93c2VMaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uLHJvd0luZGV4KQotICB7Ci0gICAgdmFyIGJyb3dzZUxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0gICAgc2V0SlNMaW5rUm93VGFyZ2V0KGJyb3dzZUxpbmssIm9wZW5DYXRlZ29yeUJyb3dzZXIiLHRhYmxlQ29udGFpbmVySWQscm93SW5kZXgpOwotICAgIGJyb3dzZUxpbmsuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIjwlPUhUTUxVdGlscy5KU01hbmdsZShjb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTElOS19CUk9XU0UiKSklPiIpKTsKLSAgICBjb2x1bW4uYXBwZW5kQ2hpbGQoYnJvd3NlTGluayk7Ci0gIH0KLQotICBmdW5jdGlvbiBhZGRDYXRlZ29yeVJvdyh0YWJsZUNvbnRhaW5lcklkKQotICB7Ci0gICAgdHdpc3RPcGVuKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciB0YWJsZUJvZHkgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVEJPRFkiKS5pdGVtKDApOwotICAgIHZhciBuZXdSb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpOwotICAgIHZhciBjb2x1bW4wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW4zID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uNCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0KLSAgICB2YXIgcm93Q2hlY2tib3ggPSBjcmVhdGVSb3dDaGVja2JveCgpOwotICAgIGNvbHVtbjAuYXBwZW5kQ2hpbGQocm93Q2hlY2tib3gpOwotCi0gICAgdmFyIGNhdGVnb3J5VHlwZVNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpOwotICAgIHBvcHVsYXRlQ2F0ZWdvcnlUeXBlU2VsZWN0KGNhdGVnb3J5VHlwZVNlbGVjdCk7Ci0gICAgY29sdW1uMS5hcHBlbmRDaGlsZChjYXRlZ29yeVR5cGVTZWxlY3QpOwotCi0gICAgdmFyIGtleU5hbWVUZXh0SW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotICAgIGNvbHVtbjIuYXBwZW5kQ2hpbGQoa2V5TmFtZVRleHRJbnB1dCk7Ci0KLSAgICB2YXIga2V5VmFsdWVUZXh0SW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotICAgIGNvbHVtbjMuYXBwZW5kQ2hpbGQoa2V5VmFsdWVUZXh0SW5wdXQpOwotCi0gICAgYWRkQ2F0ZWdvcnlSb3dCcm93c2VMaW5rKHRhYmxlQ29udGFpbmVySWQsY29sdW1uNCx0YWJsZS5yb3dzLmxlbmd0aCk7Ci0KLSAgICBjb2x1bW4wLmNsYXNzTmFtZSA9ICJjaGVja2JveGNlbGxzIjsKLSAgICBjYXRlZ29yeVR5cGVTZWxlY3QuY2xhc3NOYW1lID0gInNlbGVjdGxpc3QiOwotICAgIGNvbHVtbjEuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIGNvbHVtbjEud2lkdGggPSAiNSUiOwotICAgIGtleU5hbWVUZXh0SW5wdXQuY2xhc3NOYW1lID0gInRhYmxldGV4dGVudGVyIjsKLSAgICBrZXlOYW1lVGV4dElucHV0LnRpdGxlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX0NBVEVHT1JZX0tFWV9OQU1FIikpJT4iOwotICAgIGNvbHVtbjIuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIGNvbHVtbjIud2lkdGggPSAiNTUlIjsKLSAgICBrZXlWYWx1ZVRleHRJbnB1dC5jbGFzc05hbWUgPSAidGFibGV0ZXh0ZW50ZXIiOwotICAgIGtleVZhbHVlVGV4dElucHV0LnRpdGxlID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX0NBVEVHT1JZX0tFWV9WQUxVRSIpKSU+IjsKLSAgICBjb2x1bW4zLmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICBjb2x1bW4zLndpZHRoID0gIjI1JSI7Ci0gICAgY29sdW1uNC5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0KLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMCk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjEpOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4yKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMyk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjQpOwotICAgIHRhYmxlQm9keS5hcHBlbmRDaGlsZChuZXdSb3cpOwotICB9Ci0KLSAgZnVuY3Rpb24gc2V0RGlzY292ZXJ5VVJMUm93U2V0dGluZ3ModGFibGVDb250YWluZXJJZCxkaXNjb3ZlcnlVUkxJbmRleCxkaXNjb3ZlcnlVUkwpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgcm93ID0gdGFibGUucm93c1tudW1iZXJPZkhlYWRlclJvd3MrZGlzY292ZXJ5VVJMSW5kZXhdOwotICAgIHZhciByb3dFbGVtZW50Q29sbGVjdGlvbiA9IHJvdy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKTsKLSAgICB2YXIgZGlzY292ZXJ5VVJMVGV4dElucHV0ID0gcm93RWxlbWVudENvbGxlY3Rpb24uaXRlbSgxKTsKLSAgICBkaXNjb3ZlcnlVUkxUZXh0SW5wdXQudmFsdWUgPSBkaXNjb3ZlcnlVUkw7Ci0gIH0KLQotICBmdW5jdGlvbiBhZGREaXNjb3ZlcnlVUkxSb3codGFibGVDb250YWluZXJJZCkKLSAgewotICAgIHR3aXN0T3Blbih0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgdGFibGVCb2R5ID0gdGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlRCT0RZIikuaXRlbSgwKTsKLSAgICB2YXIgbmV3Um93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKLSAgICB2YXIgY29sdW1uMCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotCi0gICAgdmFyIHJvd0NoZWNrYm94ID0gY3JlYXRlUm93Q2hlY2tib3goKTsKLSAgICBjb2x1bW4wLmFwcGVuZENoaWxkKHJvd0NoZWNrYm94KTsKLQotICAgIHZhciBkaXNjb3ZlcnlVUkxUZXh0SW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotICAgIGNvbHVtbjEuYXBwZW5kQ2hpbGQoZGlzY292ZXJ5VVJMVGV4dElucHV0KTsKLQotICAgIGNvbHVtbjAuY2xhc3NOYW1lID0gImNoZWNrYm94Y2VsbHMiOwotICAgIGRpc2NvdmVyeVVSTFRleHRJbnB1dC5jbGFzc05hbWUgPSAidGFibGV0ZXh0ZW50ZXIiOwotICAgIGRpc2NvdmVyeVVSTFRleHRJbnB1dC50aXRsZSA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUodWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9ESVNDT1ZFUllfVVJMIikpJT4iOwotICAgIGNvbHVtbjEuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIGNvbHVtbjEud2lkdGggPSAiOTUlIjsKLQotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4wKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMSk7Ci0gICAgdGFibGVCb2R5LmFwcGVuZENoaWxkKG5ld1Jvdyk7Ci0gIH0KLQotICBmdW5jdGlvbiBhZGRSZXN1bHRSb3codGFibGVDb250YWluZXJJZCxub2RlSWQsdXJsLG5hbWUsZGVzY3JpcHRpb24pCi0gIHsKLSAgICB0d2lzdE9wZW4odGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHRhYmxlQm9keSA9IHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJUQk9EWSIpLml0ZW0oMCk7Ci0gICAgdmFyIG5ld1JvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7Ci0gICAgdmFyIGNvbHVtbjAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW4xID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0KLSAgICB2YXIgcm93Q2hlY2tib3ggPSBjcmVhdGVSb3dDaGVja2JveCgpOwotICAgIGNvbHVtbjAuYXBwZW5kQ2hpbGQocm93Q2hlY2tib3gpOwotICAgIGNvbHVtbjAuYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiIixub2RlSWQpKTsKLQotICAgIHZhciBuYW1lRGV0YWlsc0xpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0gICAgbmFtZURldGFpbHNMaW5rLmhyZWYgPSB1cmw7Ci0gICAgbmFtZURldGFpbHNMaW5rLnRhcmdldCA9ICI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iOwotICAgIG5hbWVEZXRhaWxzTGluay5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShuYW1lKSk7Ci0gICAgY29sdW1uMS5hcHBlbmRDaGlsZChuYW1lRGV0YWlsc0xpbmspOwotCi0gICAgY29sdW1uMi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShnZXREZWZhdWx0RGlzcGxheVN0cmluZyhkZXNjcmlwdGlvbikpKTsKLQotICAgIGNvbHVtbjAuY2xhc3NOYW1lID0gImNoZWNrYm94Y2VsbHMiOwotICAgIGNvbHVtbjEuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIGNvbHVtbjIuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIGNvbHVtbjEud2lkdGggPSAiNDglIjsKLSAgICBjb2x1bW4yLndpZHRoID0gIjQ4JSI7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjApOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4xKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMik7Ci0gICAgdGFibGVCb2R5LmFwcGVuZENoaWxkKG5ld1Jvdyk7Ci0gIH0KLQotICBmdW5jdGlvbiBnZXRGaW5kUXVhbGlmaWVyVGFibGUoY29udGFpbmVySWQpCi0gIHsKLSAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29udGFpbmVySWQpOwotICAgIHJldHVybiBjb250YWluZXIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRhYmxlIikuaXRlbSgxKTsKLSAgfQotCi0gIGZ1bmN0aW9uIHNldEZpbmRRdWFsaWZpZXIoZmluZFF1YWxpZmllcixuYW1lVGFibGVDb250YWluZXJJZCxjYXRlZ29yeVRhYmxlQ29udGFpbmVySWQsZmluZFF1YWxpZmllcnNUYWJsZUNvbnRhaW5lcklkKQotICB7Ci0gICAgdmFyIHR3aXN0T3Blbk5hbWVzID0gZmFsc2U7Ci0gICAgdmFyIHR3aXN0T3BlbkNhdGVnb3JpZXMgPSBmYWxzZTsKLSAgICB2YXIgdHdpc3RPcGVuRmluZFF1YWxpZmllcnMgPSBmYWxzZTsKLQotICAgIGlmIChmaW5kUXVhbGlmaWVyID09ICI8JT1GaW5kUXVhbGlmaWVyLmV4YWN0TmFtZU1hdGNoJT4iKQotICAgIHsKLSAgICAgIHZhciBmcVRhYmxlID0gZ2V0RmluZFF1YWxpZmllclRhYmxlKG5hbWVUYWJsZUNvbnRhaW5lcklkKTsKLSAgICAgIHZhciBleGFjdE5hbWVNYXRjaENoZWNrYm94ID0gZnFUYWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKS5pdGVtKDApOwotICAgICAgZXhhY3ROYW1lTWF0Y2hDaGVja2JveC5jaGVja2VkID0gdHJ1ZTsKLSAgICAgIHR3aXN0T3Blbk5hbWVzID0gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZmluZFF1YWxpZmllciA9PSAiPCU9RmluZFF1YWxpZmllci5jYXNlU2Vuc2l0aXZlTWF0Y2glPiIpCi0gICAgewotICAgICAgdmFyIGZxVGFibGUgPSBnZXRGaW5kUXVhbGlmaWVyVGFibGUobmFtZVRhYmxlQ29udGFpbmVySWQpOwotICAgICAgdmFyIGNhc2VTZW5zaXRpdmVNYXRjaENoZWNrYm94ID0gZnFUYWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKS5pdGVtKDEpOwotICAgICAgY2FzZVNlbnNpdGl2ZU1hdGNoQ2hlY2tib3guY2hlY2tlZCA9IHRydWU7Ci0gICAgICB0d2lzdE9wZW5OYW1lcyA9IHRydWU7Ci0gICAgfQotICAgIGVsc2UgaWYgKGZpbmRRdWFsaWZpZXIgPT0gIjwlPUZpbmRRdWFsaWZpZXIuc2VydmljZVN1YnNldCU+IiB8fCBmaW5kUXVhbGlmaWVyID09ICI8JT1GaW5kUXVhbGlmaWVyLmNvbWJpbmVDYXRlZ29yeUJhZ3MlPiIpCi0gICAgewotICAgICAgdmFyIGZxVGFibGUgPSBnZXRGaW5kUXVhbGlmaWVyVGFibGUoY2F0ZWdvcnlUYWJsZUNvbnRhaW5lcklkKTsKLSAgICAgIHZhciBjYXRlZ29yeVNlbGVjdCA9IGZxVGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNlbGVjdCIpLml0ZW0oMCk7Ci0gICAgICBzZXRTZWxlY3QoY2F0ZWdvcnlTZWxlY3QsZmluZFF1YWxpZmllcik7Ci0gICAgICB0d2lzdE9wZW5DYXRlZ29yaWVzID0gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZmluZFF1YWxpZmllciA9PSAiPCU9RmluZFF1YWxpZmllci5hbmRBbGxLZXlzJT4iIHx8IGZpbmRRdWFsaWZpZXIgPT0gIjwlPUZpbmRRdWFsaWZpZXIub3JBbGxLZXlzJT4iIHx8IGZpbmRRdWFsaWZpZXIgPT0gIjwlPUZpbmRRdWFsaWZpZXIub3JMaWtlS2V5cyU+IikKLSAgICB7Ci0gICAgICB2YXIgZnFUYWJsZSA9IGdldFRhYmxlKGZpbmRRdWFsaWZpZXJzVGFibGVDb250YWluZXJJZCk7Ci0gICAgICB2YXIga2V5U2VsZWN0ID0gZnFUYWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2VsZWN0IikuaXRlbSgwKTsKLSAgICAgIHNldFNlbGVjdChrZXlTZWxlY3QsZmluZFF1YWxpZmllcik7Ci0gICAgICBpZiAoZmluZFF1YWxpZmllciAhPSAiPCU9RmluZFF1YWxpZmllci5hbmRBbGxLZXlzJT4iKQotICAgICAgICB0d2lzdE9wZW5GaW5kUXVhbGlmaWVycyA9IHRydWU7Ci0gICAgfQotICAgIGVsc2UgaWYgKGZpbmRRdWFsaWZpZXIgPT0gIjwlPUZpbmRRdWFsaWZpZXIuc29ydEJ5TmFtZUFzYyU+IiB8fCBmaW5kUXVhbGlmaWVyID09ICI8JT1GaW5kUXVhbGlmaWVyLnNvcnRCeU5hbWVEZXNjJT4iIHx8IGZpbmRRdWFsaWZpZXIgPT0gIjwlPUZpbmRRdWFsaWZpZXIuc29ydEJ5RGF0ZUFzYyU+IiB8fCBmaW5kUXVhbGlmaWVyID09ICI8JT1GaW5kUXVhbGlmaWVyLnNvcnRCeURhdGVEZXNjJT4iKQotICAgIHsKLSAgICAgIHZhciBmcVRhYmxlID0gZ2V0VGFibGUoZmluZFF1YWxpZmllcnNUYWJsZUNvbnRhaW5lcklkKTsKLSAgICAgIHZhciBzb3J0Q29sbGVjdGlvbiA9IGZxVGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0Iik7Ci0gICAgICBmb3IgKHZhciBpPTA7aTxzb3J0Q29sbGVjdGlvbi5sZW5ndGg7aSsrKQotICAgICAgewotICAgICAgICBpZiAoc29ydENvbGxlY3Rpb24uaXRlbShpKS52YWx1ZSA9PSBmaW5kUXVhbGlmaWVyKQotICAgICAgICAgIHNvcnRDb2xsZWN0aW9uLml0ZW0oaSkuY2hlY2tlZCA9IHRydWU7Ci0gICAgICB9Ci0gICAgICBpZiAoZmluZFF1YWxpZmllciAhPSAiPCU9RmluZFF1YWxpZmllci5zb3J0QnlOYW1lQXNjJT4iICYmIGZpbmRRdWFsaWZpZXIgIT0gIjwlPUZpbmRRdWFsaWZpZXIuc29ydEJ5RGF0ZUFzYyU+IikKLSAgICAgICAgdHdpc3RPcGVuRmluZFF1YWxpZmllcnMgPSB0cnVlOwotICAgIH0KLQotICAgIGlmICh0d2lzdE9wZW5OYW1lcykKLSAgICAgIHR3aXN0T3BlbihuYW1lVGFibGVDb250YWluZXJJZCk7Ci0gICAgaWYgKHR3aXN0T3BlbkNhdGVnb3JpZXMpCi0gICAgICB0d2lzdE9wZW4oY2F0ZWdvcnlUYWJsZUNvbnRhaW5lcklkKTsKLSAgICBpZiAodHdpc3RPcGVuRmluZFF1YWxpZmllcnMpCi0gICAgICB0d2lzdE9wZW4oZmluZFF1YWxpZmllcnNUYWJsZUNvbnRhaW5lcklkKTsKLSAgfQotCi0gIGZ1bmN0aW9uIHByb2Nlc3NMYW5ndWFnZUlucHV0VGFibGUodGFibGVDb250YWluZXJJZCxsYW5nVmFyLHRleHRWYXIsZm9ybSkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciBsYW5ndWFnZVNlbGVjdHMgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2VsZWN0Iik7Ci0gICAgdmFyIHRleHRJbnB1dHMgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKTsKLSAgICBmb3IgKHZhciBpPTA7aTxsYW5ndWFnZVNlbGVjdHMubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICB2YXIgaGlkZGVuTGFuZ3VhZ2VTZWxlY3QgPSBjcmVhdGVIaWRkZW5FbGVtZW50KGxhbmdWYXIsbGFuZ3VhZ2VTZWxlY3RzW2ldLnZhbHVlKTsKLSAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoaGlkZGVuTGFuZ3VhZ2VTZWxlY3QpOwotICAgIH0KLQotICAgIGZvciAodmFyIGk9MDtpPHRleHRJbnB1dHMubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICBpZiAodGV4dElucHV0c1tpXS50eXBlID09ICJ0ZXh0IikKLSAgICAgIHsKLSAgICAgICAgdmFyIGhpZGRlblRleHRJbnB1dCA9IGNyZWF0ZUhpZGRlbkVsZW1lbnQodGV4dFZhcix0ZXh0SW5wdXRzW2ldLnZhbHVlKTsKLSAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChoaWRkZW5UZXh0SW5wdXQpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIHByb2Nlc3NOYW1lRmluZFF1YWxpZmllcnModGFibGVDb250YWluZXJJZCxmb3JtKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0RmluZFF1YWxpZmllclRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIHZhciBuYW1lRmluZFF1YWxpZmllckNoZWNrYm94ZXMgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKTsKLSAgICBmb3IgKHZhciBpPTA7aTxuYW1lRmluZFF1YWxpZmllckNoZWNrYm94ZXMubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICB2YXIgaXRlbSA9IG5hbWVGaW5kUXVhbGlmaWVyQ2hlY2tib3hlcy5pdGVtKGkpOwotICAgICAgaWYgKGl0ZW0uY2hlY2tlZCkKLSAgICAgIHsKLSAgICAgICAgdmFyIGhpZGRlbkZpbmRRdWFsaWZpZXIgPSBjcmVhdGVIaWRkZW5FbGVtZW50KCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0ZJTkRRVUFMSUZJRVIlPiIsaXRlbS52YWx1ZSk7Ci0gICAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoaGlkZGVuRmluZFF1YWxpZmllcik7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gcHJvY2Vzc0lkZW50aWZpZXJUYWJsZSh0YWJsZUNvbnRhaW5lcklkLGZvcm0pCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgaWRlbnRpZmllclR5cGVTZWxlY3RzID0gdGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNlbGVjdCIpOwotICAgIHZhciB0ZXh0SW5wdXRzID0gdGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0Iik7Ci0gICAgZm9yICh2YXIgaT0wO2k8aWRlbnRpZmllclR5cGVTZWxlY3RzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgdmFyIGhpZGRlbklkZW50aWZpZXJUeXBlU2VsZWN0ID0gY3JlYXRlSGlkZGVuRWxlbWVudCgiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9JREVOVElGSUVSX1RZUEUlPiIsaWRlbnRpZmllclR5cGVTZWxlY3RzW2ldLnZhbHVlKTsKLSAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoaGlkZGVuSWRlbnRpZmllclR5cGVTZWxlY3QpOwotICAgIH0KLQotICAgIHZhciBpc0tleU5hbWUgPSB0cnVlOwotICAgIGZvciAodmFyIGk9MDtpPHRleHRJbnB1dHMubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICBpZiAodGV4dElucHV0c1tpXS50eXBlID09ICJ0ZXh0IikKLSAgICAgIHsKLSAgICAgICAgdmFyIG5hbWU7Ci0gICAgICAgIGlmIChpc0tleU5hbWUpCi0gICAgICAgICAgbmFtZSA9ICI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0lERU5USUZJRVJfS0VZX05BTUUlPiI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBuYW1lID0gIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfSURFTlRJRklFUl9LRVlfVkFMVUUlPiI7Ci0gICAgICAgIHZhciBoaWRkZW5UZXh0SW5wdXQgPSBjcmVhdGVIaWRkZW5FbGVtZW50KG5hbWUsdGV4dElucHV0c1tpXS52YWx1ZSk7Ci0gICAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoaGlkZGVuVGV4dElucHV0KTsKLSAgICAgICAgaXNLZXlOYW1lID0gIWlzS2V5TmFtZTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBwcm9jZXNzQ2F0ZWdvcnlUYWJsZSh0YWJsZUNvbnRhaW5lcklkLGZvcm0saXNGaW5kQnVzaW5lc3MpCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgY2F0ZWdvcnlUeXBlU2VsZWN0cyA9IHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzZWxlY3QiKTsKLSAgICB2YXIgdGV4dElucHV0cyA9IHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpOwotICAgIGZvciAodmFyIGk9MDtpPGNhdGVnb3J5VHlwZVNlbGVjdHMubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICB2YXIgaGlkZGVuQ2F0ZWdvcnlUeXBlU2VsZWN0ID0gY3JlYXRlSGlkZGVuRWxlbWVudCgiPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9BRFZBTkNFRF9DQVRFR09SWV9UWVBFJT4iLGNhdGVnb3J5VHlwZVNlbGVjdHNbaV0udmFsdWUpOwotICAgICAgZm9ybS5hcHBlbmRDaGlsZChoaWRkZW5DYXRlZ29yeVR5cGVTZWxlY3QpOwotICAgIH0KLQotICAgIHZhciBpc0tleU5hbWUgPSB0cnVlOwotICAgIGZvciAodmFyIGk9MDtpPHRleHRJbnB1dHMubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICBpZiAodGV4dElucHV0c1tpXS50eXBlID09ICJ0ZXh0IikKLSAgICAgIHsKLSAgICAgICAgdmFyIG5hbWU7Ci0gICAgICAgIGlmIChpc0tleU5hbWUpCi0gICAgICAgICAgbmFtZSA9ICI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0NBVEVHT1JZX0tFWV9OQU1FJT4iOwotICAgICAgICBlbHNlCi0gICAgICAgICAgbmFtZSA9ICI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0NBVEVHT1JZX0tFWV9WQUxVRSU+IjsKLSAgICAgICAgdmFyIGhpZGRlblRleHRJbnB1dCA9IGNyZWF0ZUhpZGRlbkVsZW1lbnQobmFtZSx0ZXh0SW5wdXRzW2ldLnZhbHVlKTsKLSAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChoaWRkZW5UZXh0SW5wdXQpOwotICAgICAgICBpc0tleU5hbWUgPSAhaXNLZXlOYW1lOwotICAgICAgfQotICAgIH0KLQotICAgIGlmIChpc0ZpbmRCdXNpbmVzcykKLSAgICB7Ci0gICAgICB0YWJsZSA9IGdldEZpbmRRdWFsaWZpZXJUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICAgIHZhciBjYXRlZ29yeUZpbmRRdWFsaWZpZXIgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2VsZWN0IikuaXRlbSgwKTsKLSAgICAgIGlmIChjYXRlZ29yeUZpbmRRdWFsaWZpZXIuc2VsZWN0ZWRJbmRleCAhPSAwKQotICAgICAgewotICAgICAgICB2YXIgaGlkZGVuRmluZFF1YWxpZmllciA9IGNyZWF0ZUhpZGRlbkVsZW1lbnQoIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfRklORFFVQUxJRklFUiU+IixjYXRlZ29yeUZpbmRRdWFsaWZpZXIudmFsdWUpOwotICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGhpZGRlbkZpbmRRdWFsaWZpZXIpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIHByb2Nlc3NEaXNjb3ZlcnlVUkxUYWJsZSh0YWJsZUNvbnRhaW5lcklkLGZvcm0pCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgdGV4dElucHV0cyA9IHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpOwotICAgIGZvciAodmFyIGk9MDtpPHRleHRJbnB1dHMubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICBpZiAodGV4dElucHV0c1tpXS50eXBlID09ICJ0ZXh0IikKLSAgICAgIHsKLSAgICAgICAgdmFyIGhpZGRlblRleHRJbnB1dCA9IGNyZWF0ZUhpZGRlbkVsZW1lbnQoIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfRElTQ09WRVJZVVJMJT4iLHRleHRJbnB1dHNbaV0udmFsdWUpOwotICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGhpZGRlblRleHRJbnB1dCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gcHJvY2Vzc0ZpbmRRdWFsaWZpZXJUYWJsZSh0YWJsZUNvbnRhaW5lcklkLGZvcm0pCi0gIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICB2YXIgZmluZFF1YWxpZmllclNlbGVjdHMgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2VsZWN0Iik7Ci0gICAgZm9yICh2YXIgaT0wO2k8ZmluZFF1YWxpZmllclNlbGVjdHMubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICB2YXIgZmluZFF1YWxpZmllclNlbGVjdCA9IGZpbmRRdWFsaWZpZXJTZWxlY3RzLml0ZW0oaSk7Ci0gICAgICB2YXIgaGlkZGVuRmluZFF1YWxpZmllciA9IGNyZWF0ZUhpZGRlbkVsZW1lbnQoIjwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfQURWQU5DRURfRklORFFVQUxJRklFUiU+IixmaW5kUXVhbGlmaWVyU2VsZWN0LnZhbHVlKTsKLSAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoaGlkZGVuRmluZFF1YWxpZmllcik7Ci0gICAgfQotCi0gICAgdmFyIGZpbmRRdWFsaWZpZXJTb3J0UmFkaW9zID0gdGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0Iik7Ci0gICAgZm9yICh2YXIgaT0wO2k8ZmluZFF1YWxpZmllclNvcnRSYWRpb3MubGVuZ3RoO2krKykKLSAgICB7Ci0gICAgICBpZiAoZmluZFF1YWxpZmllclNvcnRSYWRpb3MuaXRlbShpKS5jaGVja2VkKQotICAgICAgewotICAgICAgICB2YXIgaGlkZGVuU29ydEVsZW1lbnQgPSBjcmVhdGVIaWRkZW5FbGVtZW50KCI8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX0FEVkFOQ0VEX0ZJTkRRVUFMSUZJRVIlPiIsZmluZFF1YWxpZmllclNvcnRSYWRpb3MuaXRlbShpKS52YWx1ZSk7Ci0gICAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoaGlkZGVuU29ydEVsZW1lbnQpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIHByb2Nlc3NSZXN1bHRUYWJsZSh0YWJsZUNvbnRhaW5lcklkLGlucHV0TmFtZSxmb3JtLHNlbGVjdGVkT25seSkKLSAgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySWQpOwotICAgIGZvciAodmFyIGk9bnVtYmVyT2ZIZWFkZXJSb3dzO2k8dGFibGUucm93cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIHZhciBpbnB1dHMgPSB0YWJsZS5yb3dzW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpOwotICAgICAgaWYgKHNlbGVjdGVkT25seSkKLSAgICAgIHsKLSAgICAgICAgaWYgKGlucHV0cy5pdGVtKDApLmNoZWNrZWQpCi0gICAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KGlucHV0TmFtZSxpbnB1dHMuaXRlbSgxKS52YWx1ZSkpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoaW5wdXROYW1lLGlucHV0cy5pdGVtKDEpLnZhbHVlKSk7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gaW5pdGlhdGVTdWJRdWVyeShmb3JtQ29udGFpbmVySWQsbmV3U3ViUXVlcnlLZXkscXVlcnlJdGVtLGlzR2V0KQotICB7Ci0gICAgaWYgKGlzR2V0KQotICAgIHsKLSAgICAgIHZhciBoYXNHZXRJdGVtcyA9IGZhbHNlOwotICAgICAgc3dpdGNoIChxdWVyeUl0ZW0pCi0gICAgICB7Ci0gICAgICAgIGNhc2UgPCU9VURESUFjdGlvbklucHV0cy5RVUVSWV9JVEVNX0JVU0lORVNTRVMlPjoKLSAgICAgICAgICBoYXNHZXRJdGVtcyA9IDwlPXJlZ05vZGUuaGFzQnVzaW5lc3MoKSU+OwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDwlPVVERElBY3Rpb25JbnB1dHMuUVVFUllfSVRFTV9TRVJWSUNFUyU+OgotICAgICAgICAgIGhhc0dldEl0ZW1zID0gPCU9cmVnTm9kZS5oYXNTZXJ2aWNlKCklPjsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA8JT1VRERJQWN0aW9uSW5wdXRzLlFVRVJZX0lURU1fU0VSVklDRV9JTlRFUkZBQ0VTJT46Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgaGFzR2V0SXRlbXMgPSA8JT1yZWdOb2RlLmhhc1NlcnZpY2VJbnRlcmZhY2UoKSU+OwotICAgICAgfQotICAgICAgaWYgKCFoYXNHZXRJdGVtcykKLSAgICAgIHsKLSAgICAgICAgYWxlcnQoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh1ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PX0lURU1TX1RPX0dFVCIpKSU+Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICB9Ci0gICAgdmFyIGZvcm1Db250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmb3JtQ29udGFpbmVySWQpOwotICAgIHZhciBmb3JtID0gZm9ybUNvbnRhaW5lci5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZm9ybSIpLml0ZW0oMCk7Ci0gICAgZm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLlNVQlFVRVJZX0dFVCU+LnZhbHVlID0gaXNHZXQ7Ci0gICAgZm9ybS48JT1VRERJQWN0aW9uSW5wdXRzLk5FV19TVUJRVUVSWV9JTklUSUFURUQlPi52YWx1ZSA9IG5ld1N1YlF1ZXJ5S2V5OwotICAgIGZvcm0uPCU9VURESUFjdGlvbklucHV0cy5ORVdfU1VCUVVFUllfUVVFUllfSVRFTSU+LnZhbHVlID0gcXVlcnlJdGVtOwotICAgIHZhciBva1RvU3VibWl0ID0gZmFsc2U7Ci0gICAgaWYgKGZvcm1Db250YWluZXJJZCA9PSAiZmluZEJ1c2luZXNzZXNBZHZhbmNlZCIpCi0gICAgICBva1RvU3VibWl0ID0gcHJvY2Vzc0ZpbmRCdXNpbmVzc2VzQWR2YW5jZWRGb3JtKGZvcm0pOwotICAgIGVsc2UgaWYgKGZvcm1Db250YWluZXJJZCA9PSAiZmluZFNlcnZpY2VzQWR2YW5jZWQiKQotICAgICAgb2tUb1N1Ym1pdCA9IHByb2Nlc3NGaW5kU2VydmljZXNBZHZhbmNlZEZvcm0oZm9ybSk7Ci0gICAgZWxzZSBpZiAoZm9ybUNvbnRhaW5lcklkID09ICJmaW5kU2VydmljZUludGVyZmFjZXNBZHZhbmNlZCIpCi0gICAgICBva1RvU3VibWl0ID0gcHJvY2Vzc0ZpbmRTZXJ2aWNlSW50ZXJmYWNlc0FkdmFuY2VkRm9ybShmb3JtKTsKLSAgICBlbHNlIGlmIChmb3JtQ29udGFpbmVySWQgPT0gInB1Ymxpc2hTZXJ2aWNlU2ltcGxlIikKLSAgICAgIG9rVG9TdWJtaXQgPSBwcm9jZXNzUHVibGlzaFNlcnZpY2VTaW1wbGVGb3JtKGZvcm0pOwotICAgIGVsc2UgaWYgKGZvcm1Db250YWluZXJJZCA9PSAicHVibGlzaFNlcnZpY2VBZHZhbmNlZCIpCi0gICAgICBva1RvU3VibWl0ID0gcHJvY2Vzc1B1Ymxpc2hTZXJ2aWNlQWR2YW5jZWRGb3JtKGZvcm0pOwotICAgIGVsc2UgaWYgKGZvcm1Db250YWluZXJJZCA9PSAicHVibGlzaGVyQXNzZXJ0aW9ucyIpCi0gICAgICBva1RvU3VibWl0ID0gaGFuZGxlU3VibWl0KGZvcm0pOwotICAgIGVsc2UgaWYgKGZvcm1Db250YWluZXJJZCA9PSAibWFuYWdlUmVmZXJlbmNlZFNlcnZpY2VzIikKLSAgICAgIG9rVG9TdWJtaXQgPSBwcm9jZXNzRm9ybShmb3JtKTsKLSAgICBpZiAob2tUb1N1Ym1pdCkKLSAgICAgIGZvcm0uc3VibWl0KCk7Ci0gIH0KLTwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3N0YXR1c19jb250YWluZXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3N0YXR1c19jb250YWluZXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjg4ODgwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9zdGF0dXNfY29udGFpbmVyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udWRkaS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1NUQVRVU19DT05UQUlORVIiKSU+PC90aXRsZT4KLTwvaGVhZD4KLTxmcmFtZXNldCByb3dzPSIzMywqIiBib3JkZXI9MCBiZ2NvbG9yPSIjRUNFOUQ4Ij4KLSAgPGZyYW1lIG5hbWU9IjwlPVVERElGcmFtZU5hbWVzLlNUQVRVU19UT09MQkFSJT4iIHRpdGxlPSI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfU1RBVFVTX1RPT0xCQVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9zdGF0dXNfdG9vbGJhci5qc3AiKSklPiIgbm9yZXNpemUgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MCBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wPgotICA8ZnJhbWUgbmFtZT0iPCU9VURESUZyYW1lTmFtZXMuU1RBVFVTX0NPTlRFTlQlPiIgdGl0bGU9IjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9TVEFUVVNfQ09OVEVOVCIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL3N0YXR1c19jb250ZW50LmpzcCIpKSU+IiBub3Jlc2l6ZSBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci08L2ZyYW1lc2V0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3N0YXR1c19jb250ZW50LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9zdGF0dXNfY29udGVudC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkNjI2ZWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci91ZGRpL3N0YXR1c19jb250ZW50LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDI3ICAgMTI3NDQzIGplc3BlckBzZWxza2FiZXQub3JnIC0gSmVzcGVyIFMgTW9sbGVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0Jb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgVURESVBlcnNwZWN0aXZlIHVkZGlQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0VURESVBlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1NUQVRVU19DT05URU5UIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gIDx0YWJsZT4KLSAgICA8dHI+Ci0gICAgICA8dGQ+Ci0gICAgICAgIDxwcmU+Ci08JT1IVE1MVXRpbHMuY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzU3RyaWN0KHVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlUXVldWUoKS5nZXRNZXNzYWdlc0Zyb21MaXN0KCkpJT4KLSAgICAgICAgPC9wcmU+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9zdGF0dXNfdG9vbGJhci5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvc3RhdHVzX3Rvb2xiYXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMzgzZjhjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS9zdGF0dXNfdG9vbGJhci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFVERElQZXJzcGVjdGl2ZSB1ZGRpUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFVERElQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXVkZGlQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9TVEFUVVNfVE9PTEJBUiIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy90b29sYmFyLmNzcyIpKSU+Ij4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9zY3JpcHRzL3VkZGlmcmFtZXNldHMuanNwIiBmbHVzaD0idHJ1ZSIvPiAgCi08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy90b29sYmFyLmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJ0b29sYmFyYm9keW1hcmdpbiI+Ci08ZGl2IGlkPSJ0b29sYmFyYm9yZGVyIj4KLSAgPGRpdiBpZD0idG9vbGJhciIgb25kYmxjbGljaz0icHJvY2Vzc0ZyYW1lc2V0U2l6ZXMoZG9jdW1lbnQuZm9ybXNbMF0pIj4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUFjdGlvbiIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gIGZvcm1BY3Rpb24uYXBwZW5kKCJ1ZGRpL2FjdGlvbnMvUmVzaXplVURESUZyYW1lc0FjdGlvbkpTUC5qc3AiKTsKLSU+ICAKLTwvanNwOnVzZUJlYW4+Ci08anNwOnVzZUJlYW4gaWQ9ImZvcm1GcmFtZU5hbWUiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICAgZm9ybUZyYW1lTmFtZS5hcHBlbmQoVURESUZyYW1lTmFtZXMuU1RBVFVTX0NPTlRBSU5FUik7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvdWRkaS9mb3Jtcy9Qcm9jZXNzVURESUZyYW1lc2V0c0Zvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgIDx0YWJsZSB3aWR0aD0iMTAwJSIgaGVpZ2h0PTI1IGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBib3JkZXI9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0yNSBoZWlnaHQ9MjU+PGltZyBjbGFzcz0ibm9ybWFsIiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3N0YXR1cy5naWYiKSklPiIgd2lkdGg9MTYgaGVpZ2h0PTE2PjwvdGQ+Ci08JQotICAgU3RyaW5nIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBudWxsOwotICAgaWYgKHVkZGlQZXJzcGVjdGl2ZS5nZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKS5lbmRzV2l0aCgiMTAwJSIpKQotICAgewotICAgICBpZiAodWRkaVBlcnNwZWN0aXZlLmdldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoKS5lbmRzV2l0aCgiMTAwJSIpKQotICAgICAgIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9ET1VCTEVfQ0xJQ0tfVE9fUkVTVE9SRSIpOwotICAgfQotICAgaWYgKGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPT0gbnVsbCkKLSAgICAgZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0RPVUJMRV9DTElDS19UT19NQVhJTUlaRSIpOwotJT4gICAgICAgIAotICAgICAgICA8dGQgaWQ9ImRvdWJsZWNsaWNrY29sdW1uIiB0aXRsZT0iPCU9ZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSU+IiB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImxlZnQiIHdpZHRoPSIqIiBoZWlnaHQ9MjUgbm93cmFwIGNsYXNzPSJ0ZXh0Ij48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9TVEFUVVMiKSU+PC90ZD4KLTwlCi0gICBTdHJpbmcgYWx0Q2xlYXIgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9DTEVBUiIpOwotJT4gICAgICAgICAgIAotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiIHdpZHRoPTI1IGhlaWdodD0yNT48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInVkZGkvc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iIHRhcmdldD0iPCU9VURESUZyYW1lTmFtZXMuU1RBVFVTX0NPTlRFTlQlPiI+PGltZyBjbGFzcz0ibm9ybWFsIiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2NsZWFyX2VuYWJsZWQuZ2lmIikpJT4iIHdpZHRoPTE2IGhlaWdodD0xNiBvbk1vdXNlT3Zlcj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9oaWdobGlnaHRlZC5naWYiKSklPic7bW91c2VvdmVyKHRoaXMpIiBvbk1vdXNlT3V0PSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2NsZWFyX2VuYWJsZWQuZ2lmIikpJT4nO21vdXNlb3V0KHRoaXMpIiBvbk1vdXNlRG93bj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9oaWdobGlnaHRlZC5naWYiKSklPic7bW91c2Vkb3duKHRoaXMpIiBvbk1vdXNlVXA9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfZW5hYmxlZC5naWYiKSklPic7bW91c2V1cCh0aGlzKSIgYWx0PSI8JT1hbHRDbGVhciU+IiB0aXRsZT0iPCU9YWx0Q2xlYXIlPiI+PC9hPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gIDwvZGl2PgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3VkZGkvdWRkaV9wZXJzcGVjdGl2ZV9jb250ZW50LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS91ZGRpX3BlcnNwZWN0aXZlX2NvbnRlbnQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NjYxYmRmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvdWRkaS91ZGRpX3BlcnNwZWN0aXZlX2NvbnRlbnQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51ZGRpLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBVRERJUGVyc3BlY3RpdmUgdWRkaVBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfVURESV9QRVJTUEVDVElWRV9DT05URU5UIiklPjwvdGl0bGU+Ci08L2hlYWQ+Ci08ZnJhbWVzZXQgY29scz0iPCU9dWRkaVBlcnNwZWN0aXZlLmdldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpJT4iIGJnY29sb3I9I0VDRTlEOD4KLSAgPCUKLSAgaWYgKG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmlzUlRMKCkpCi0gIHsKLSAgJT4KLSAgPGZyYW1lIG5hbWU9IjwlPVVERElGcmFtZU5hbWVzLkFDVElPTlNfQ09OVEFJTkVSJT4iIHRpdGxlPSI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfQUNUSU9OU19DT05UQUlORVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zX2NvbnRhaW5lci5qc3AiKSklPiIgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MCBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0xPgotICA8ZnJhbWUgbmFtZT0iPCU9VURESUZyYW1lTmFtZXMuTkFWSUdBVE9SX0NPTlRBSU5FUiU+IiB0aXRsZT0iPCU9dWRkaVBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX05BVklHQVRPUl9DT05UQUlORVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9uYXZpZ2F0b3JfY29udGFpbmVyLmpzcCIpKSU+IiBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTE+Ci0gIDwlCi0gIH0KLSAgZWxzZQotICB7Ci0gICU+Ci0gIDxmcmFtZSBuYW1lPSI8JT1VRERJRnJhbWVOYW1lcy5OQVZJR0FUT1JfQ09OVEFJTkVSJT4iIHRpdGxlPSI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfTkFWSUdBVE9SX0NPTlRBSU5FUiIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ1ZGRpL25hdmlnYXRvcl9jb250YWluZXIuanNwIikpJT4iIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTAgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MT4KLSAgPGZyYW1lIG5hbWU9IjwlPVVERElGcmFtZU5hbWVzLkFDVElPTlNfQ09OVEFJTkVSJT4iIHRpdGxlPSI8JT11ZGRpUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfQUNUSU9OU19DT05UQUlORVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgidWRkaS9hY3Rpb25zX2NvbnRhaW5lci5qc3AiKSklPiIgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MCBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0xPgotICA8JQotICB9Ci0gICU+Ci08L2ZyYW1lc2V0PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL0NsZWFyV1NETEFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9DbGVhcldTRExBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Yjc1OGU4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL0NsZWFyV1NETEFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLkNsZWFyV1NETEFjdGlvbiIlPgotCi08anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvc2NyaXB0cy93c2RscGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotQ2xlYXJXU0RMQWN0aW9uIGFjdGlvbiA9IG5ldyBDbGVhcldTRExBY3Rpb24oY29udHJvbGxlcik7Ci0KLS8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi1ib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2FjdGlvbnMvQ2xlYXJOb2RlQWN0aW9uLmluYyIgJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL0NyZWF0ZUluc3RhbmNlQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL0NyZWF0ZUluc3RhbmNlQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjc4ZWViMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9DcmVhdGVJbnN0YW5jZUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLldTRExGcmFtZU5hbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkZyYW1lTmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5GcmFnbWVudENvbnN0YW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy5DcmVhdGVJbnN0YW5jZUFjdGlvbiIlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9zY3JpcHRzL3dzZGxwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotICA8JQotICBDcmVhdGVJbnN0YW5jZUFjdGlvbiBhY3Rpb24gPSBuZXcgQ3JlYXRlSW5zdGFuY2VBY3Rpb24oY29udHJvbGxlcik7Ci0gIGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0gIGFjdGlvbi5leGVjdXRlKCk7Ci0gICU+Ci0gIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgIHdzZGxQcm9wZXJ0aWVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIikpJT4iOwotICA8L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL0ludm9rZVdTRExIdHRwR2V0T3BlcmF0aW9uRm9ybUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9JbnZva2VXU0RMSHR0cEdldE9wZXJhdGlvbkZvcm1BY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDljOWVmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL0ludm9rZVdTRExIdHRwR2V0T3BlcmF0aW9uRm9ybUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvc2NyaXB0cy93c2RscGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLSAgPCUKLSAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICBJbnZva2VXU0RMSHR0cEdldE9wZXJhdGlvbkZvcm1BY3Rpb24gYWN0aW9uID0gbmV3IEludm9rZVdTRExIdHRwR2V0T3BlcmF0aW9uRm9ybUFjdGlvbihjb250cm9sbGVyKTsKLQotICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgYm9vbGVhbiBpbnB1dHNWYWxpZCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgaWYgKGlucHV0c1ZhbGlkKQotICB7Ci0gICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotICB9Ci0gICU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgd3NkbFByb3BlcnRpZXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX3Byb3BlcnRpZXNfY29udGVudC5qc3AiKSklPiI7Ci0gIHdzZGxTdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvSW52b2tlV1NETEh0dHBQb3N0T3BlcmF0aW9uRm9ybUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9JbnZva2VXU0RMSHR0cFBvc3RPcGVyYXRpb25Gb3JtQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNmNGU1Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9JbnZva2VXU0RMSHR0cFBvc3RPcGVyYXRpb25Gb3JtQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9zY3JpcHRzL3dzZGxwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotICA8JQotICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gIEludm9rZVdTRExIdHRwUG9zdE9wZXJhdGlvbkZvcm1BY3Rpb24gYWN0aW9uID0gbmV3IEludm9rZVdTRExIdHRwUG9zdE9wZXJhdGlvbkZvcm1BY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gIGlmIChpbnB1dHNWYWxpZCkKLSAgewotICAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLSAgfQotICAlPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHdzZGxQcm9wZXJ0aWVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIikpJT4iOwotICB3c2RsU3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL0ludm9rZVdTRExTT0FQT3BlcmF0aW9uRm9ybUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9JbnZva2VXU0RMU09BUE9wZXJhdGlvbkZvcm1BY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjMzYmE1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL0ludm9rZVdTRExTT0FQT3BlcmF0aW9uRm9ybUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNDEgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA0MTMgICAxNzY0OTMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTRTogTWFrZSBtZXNzYWdlL3RyYW5zcG9ydCBzdGFjayBwbHVnZ2FibGUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5NZXNzYWdlUXVldWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5XU0RMQWN0aW9uSW5wdXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS5XU0RMUGVyc3BlY3RpdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnRyYW5zcG9ydC5IVFRQVHJhbnNwb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LkhUVFBUcmFuc3BvcnRFeGNlcHRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1bi5taXNjLkJBU0U2NERlY29kZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlIiU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLS8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLUludm9rZVdTRExTT0FQT3BlcmF0aW9uRm9ybUFjdGlvbiBhY3Rpb24gPSBuZXcgSW52b2tlV1NETFNPQVBPcGVyYXRpb25Gb3JtQWN0aW9uKGNvbnRyb2xsZXIpOwotU3RyaW5nIGh0dHBCYXNpY0F1dGhEYXRhID0gcmVxdWVzdC5nZXRIZWFkZXIoSFRUUFRyYW5zcG9ydC5IVFRQX0hFQURFUl9BVVRIKTsKLWlmIChodHRwQmFzaWNBdXRoRGF0YSAhPSBudWxsICYmIGh0dHBCYXNpY0F1dGhEYXRhLmxlbmd0aCgpID4gMCkKLXsKLSAgaW50IGJhc2ljSW5kZXggPSBodHRwQmFzaWNBdXRoRGF0YS5pbmRleE9mKEhUVFBUcmFuc3BvcnQuQkFTSUMpOwotICBpZiAoYmFzaWNJbmRleCAhPSAtMSkKLSAgewotICAgIEJBU0U2NERlY29kZXIgZGVjb2RlciA9IG5ldyBCQVNFNjREZWNvZGVyKCk7Ci0gICAgaHR0cEJhc2ljQXV0aERhdGEgPSBuZXcgU3RyaW5nKGRlY29kZXIuZGVjb2RlQnVmZmVyKGh0dHBCYXNpY0F1dGhEYXRhLnN1YnN0cmluZyhiYXNpY0luZGV4ICsgSFRUUFRyYW5zcG9ydC5CQVNJQy5sZW5ndGgoKSArIDEpKSk7Ci0gICAgaW50IGNvbG9uSW5kZXggPSBodHRwQmFzaWNBdXRoRGF0YS5pbmRleE9mKEhUVFBUcmFuc3BvcnQuQ09MT04pOwotICAgIGlmIChjb2xvbkluZGV4ICE9IC0xKQotICAgIHsKLSAgICAgIGFjdGlvbi5hZGRQcm9wZXJ0eShXU0RMQWN0aW9uSW5wdXRzLkhUVFBfQkFTSUNfQVVUSF9VU0VSTkFNRSwgaHR0cEJhc2ljQXV0aERhdGEuc3Vic3RyaW5nKDAsIGNvbG9uSW5kZXgpKTsKLSAgICAgIGFjdGlvbi5hZGRQcm9wZXJ0eShXU0RMQWN0aW9uSW5wdXRzLkhUVFBfQkFTSUNfQVVUSF9QQVNTV09SRCwgaHR0cEJhc2ljQXV0aERhdGEuc3Vic3RyaW5nKGNvbG9uSW5kZXggKyAxLCBodHRwQmFzaWNBdXRoRGF0YS5sZW5ndGgoKSkpOwotICAgIH0KLSAgfQotfQotCi0vLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLWJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotaWYgKCFpbnB1dHNWYWxpZCkKLXsKLSU+Ci0gIDxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9zY3JpcHRzL3dzZGxwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gIDxodG1sPgotICAgIDxoZWFkPgotICAgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij48L3NjcmlwdD4KLSAgICA8L2hlYWQ+Ci0gICAgPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLSAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgICB3c2RsUHJvcGVydGllc0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfcHJvcGVydGllc19jb250ZW50LmpzcCIpKSU+IjsKLSAgICAgICAgd3NkbFN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotICAgICAgPC9zY3JpcHQ+Ci0gICAgPC9ib2R5PgotICA8L2h0bWw+Ci08JQotfQotZWxzZQotewotICB0cnkKLSAgewotICAgIC8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotICAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLSU+Ci0gICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL3NjcmlwdHMvd3NkbHBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8aHRtbD4KLSAgICAgIDxoZWFkPgotICAgICAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+PC9zY3JpcHQ+Ci0gICAgICA8L2hlYWQ+Ci0gICAgICA8Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgICAgICB3c2RsUHJvcGVydGllc0NvbnRhaW5lci5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiKSklPiI7Ci0gICAgICAgICAgPCUKLSAgICAgICAgICBpZiAoYWN0aW9uUmVzdWx0KQotICAgICAgICAgIHsKLSAgICAgICAgICAlPgotICAgICAgICAgICAgd3NkbFN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfcmVzdWx0X2NvbnRlbnQuanNwIikpJT4iOwotICAgICAgICAgIDwlCi0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgJT4KLSAgICAgICAgICAgIHdzZGxTdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgICAgICAgICA8JQotICAgICAgICAgIH0KLSAgICAgICAgICAlPgotICAgICAgICA8L3NjcmlwdD4KLSAgICAgIDwvYm9keT4KLSAgICA8L2h0bWw+Ci08JQotICB9Ci0gIGNhdGNoIChIVFRQVHJhbnNwb3J0RXhjZXB0aW9uIGh0dHBlKQotICB7Ci0gICAgaW50IGNvZGUgPSBodHRwZS5nZXRTdGF0dXNDb2RlKCk7Ci0gICAgaWYgKGNvZGUgPT0gSHR0cFNlcnZsZXRSZXNwb25zZS5TQ19VTkFVVEhPUklaRUQpCi0gICAgewotICAgICAgcmVzcG9uc2Uuc2V0U3RhdHVzKGNvZGUpOwotICAgICAgcmVzcG9uc2Uuc2V0SGVhZGVyKEhUVFBUcmFuc3BvcnQuSFRUUF9IRUFERVJfQ09OVEVOVF9MRU5HVEgsIFN0cmluZy52YWx1ZU9mKDApKTsKLSAgICAgIFN0cmluZyB3d3dBdXRoRGF0YSA9IGh0dHBlLmdldEhlYWRlcihIVFRQVHJhbnNwb3J0LkhUVFBfSEVBREVSX1dXV19BVVRILnRvTG93ZXJDYXNlKCkpOwotICAgICAgaWYgKHd3d0F1dGhEYXRhID09IG51bGwpCi0gICAgICAgIHd3d0F1dGhEYXRhID0gaHR0cGUuZ2V0SGVhZGVyKEhUVFBUcmFuc3BvcnQuSFRUUF9IRUFERVJfV1dXX0FVVEgpOwotICAgICAgaWYgKHd3d0F1dGhEYXRhID09IG51bGwpCi0gICAgICAgIHd3d0F1dGhEYXRhID0gSFRUUFRyYW5zcG9ydC5CQVNJQzsKLSAgICAgIHJlc3BvbnNlLnNldEhlYWRlcihIVFRQVHJhbnNwb3J0LkhUVFBfSEVBREVSX1dXV19BVVRILCB3d3dBdXRoRGF0YSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShjb250cm9sbGVyLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9VTkVYUEVDVEVEIikpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoU3RyaW5nLnZhbHVlT2YoY29kZSkpOwotICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoaHR0cGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICU+Ci0gICAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9zY3JpcHRzL3dzZGxwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgICAgIDxodG1sPgotICAgICAgICAgIDxoZWFkPgotICAgICAgICAgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICAgICAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij48L3NjcmlwdD4KLSAgICAgICAgICA8L2hlYWQ+Ci0gICAgICAgICAgPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLSAgICAgICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgICAgICAgICB3c2RsUHJvcGVydGllc0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfcHJvcGVydGllc19jb250ZW50LmpzcCIpKSU+IjsKLSAgICAgICAgICAgICAgd3NkbFN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotICAgICAgICAgICAgPC9zY3JpcHQ+Ci0gICAgICAgICAgPC9ib2R5PgotICAgICAgICA8L2h0bWw+Ci0gICAgICA8JQotICAgIH0KLSAgfQotfQotJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL0ludm9rZVdTRExTT0FQT3BlcmF0aW9uU291cmNlQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL0ludm9rZVdTRExTT0FQT3BlcmF0aW9uU291cmNlQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQ4OTI3Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9JbnZva2VXU0RMU09BUE9wZXJhdGlvblNvdXJjZUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNzUgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA0MTMgICAxNzY0OTMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTRTogTWFrZSBtZXNzYWdlL3RyYW5zcG9ydCBzdGFjayBwbHVnZ2FibGUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLldTRExBY3Rpb25JbnB1dHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnRyYW5zcG9ydC5IVFRQVHJhbnNwb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LkhUVFBUcmFuc3BvcnRFeGNlcHRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1bi5taXNjLkJBU0U2NERlY29kZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC53c2RsLioiJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotSW52b2tlV1NETFNPQVBPcGVyYXRpb25Tb3VyY2VBY3Rpb24gYWN0aW9uID0gbmV3IEludm9rZVdTRExTT0FQT3BlcmF0aW9uU291cmNlQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0vLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLWJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotICAKLWlmIChhY3Rpb24ud2FzU2F2ZUFzU2VsZWN0ZWQoKSkKLXsKLSAgLy8gd3JpdGUgdG8gZmlsZSBzeXN0ZW0KLSAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIpOwotICByZXNwb25zZS5zZXRIZWFkZXIoIkNvbnRlbnQtRGlzcG9zaXRpb24iLCJhdHRhY2htZW50O2ZpbGVuYW1lPSIrYWN0aW9uLmdldERlZmF1bHRTYXZlQXNGaWxlTmFtZSgpKTsKLSAgYWN0aW9uLndyaXRlU291cmNlQ29udGVudChyZXNwb25zZS5nZXRPdXRwdXRTdHJlYW0oKSk7ICAgIAotfQotZWxzZQotewotICBpZiAoIWlucHV0c1ZhbGlkKQotICB7Ci0gICU+Ci0gICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL3NjcmlwdHMvd3NkbHBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8aHRtbD4KLSAgICAgIDxoZWFkPgotICAgICAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+PC9zY3JpcHQ+Ci0gICAgICA8L2hlYWQ+Ci0gICAgICA8Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgICAgICB3c2RsUHJvcGVydGllc0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfcHJvcGVydGllc19jb250ZW50LmpzcCIpKSU+IjsKLSAgICAgICAgICB3c2RsU3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci0gICAgICAgIDwvc2NyaXB0PgotICAgICAgPC9ib2R5PgotICAgIDwvaHRtbD4KLSAgPCUKLSAgfQotICBlbHNlCi0gIHsKLSAgICBpZiAoYWN0aW9uLndhc05ld0ZpbGVTZWxlY3RlZCgpKQotICAgIHsgICAgIAotICAlPgotICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL3NjcmlwdHMvd3NkbHBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICAgIDxodG1sPgotICAgICAgICA8aGVhZD4KLSAgICAgICAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gICAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij48L3NjcmlwdD4KLSAgICAgICAgPC9oZWFkPgotICAgICAgICA8Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotICAgICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgICAgICAgd3NkbFByb3BlcnRpZXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX3Byb3BlcnRpZXNfY29udGVudC5qc3AiKSklPiI7Ci0gICAgICAgICAgICB3c2RsU3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci0gICAgICAgICAgPC9zY3JpcHQ+Ci0gICAgICAgIDwvYm9keT4KLSAgICAgIDwvaHRtbD4KLSAgICA8JSAgICAKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIFN0cmluZyBodHRwQmFzaWNBdXRoRGF0YSA9IHJlcXVlc3QuZ2V0SGVhZGVyKEhUVFBUcmFuc3BvcnQuSFRUUF9IRUFERVJfQVVUSCk7Ci0gICAgICBpZiAoaHR0cEJhc2ljQXV0aERhdGEgIT0gbnVsbCAmJiBodHRwQmFzaWNBdXRoRGF0YS5sZW5ndGgoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIGludCBiYXNpY0luZGV4ID0gaHR0cEJhc2ljQXV0aERhdGEuaW5kZXhPZihIVFRQVHJhbnNwb3J0LkJBU0lDKTsKLSAgICAgICAgaWYgKGJhc2ljSW5kZXggIT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICBCQVNFNjREZWNvZGVyIGRlY29kZXIgPSBuZXcgQkFTRTY0RGVjb2RlcigpOwotICAgICAgICAgIGh0dHBCYXNpY0F1dGhEYXRhID0gbmV3IFN0cmluZyhkZWNvZGVyLmRlY29kZUJ1ZmZlcihodHRwQmFzaWNBdXRoRGF0YS5zdWJzdHJpbmcoYmFzaWNJbmRleCArIEhUVFBUcmFuc3BvcnQuQkFTSUMubGVuZ3RoKCkgKyAxKSkpOwotICAgICAgICAgIGludCBjb2xvbkluZGV4ID0gaHR0cEJhc2ljQXV0aERhdGEuaW5kZXhPZihIVFRQVHJhbnNwb3J0LkNPTE9OKTsKLSAgICAgICAgICBpZiAoY29sb25JbmRleCAhPSAtMSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBhY3Rpb24uYWRkUHJvcGVydHkoV1NETEFjdGlvbklucHV0cy5IVFRQX0JBU0lDX0FVVEhfVVNFUk5BTUUsIGh0dHBCYXNpY0F1dGhEYXRhLnN1YnN0cmluZygwLCBjb2xvbkluZGV4KSk7Ci0gICAgICAgICAgICBhY3Rpb24uYWRkUHJvcGVydHkoV1NETEFjdGlvbklucHV0cy5IVFRQX0JBU0lDX0FVVEhfUEFTU1dPUkQsIGh0dHBCYXNpY0F1dGhEYXRhLnN1YnN0cmluZyhjb2xvbkluZGV4ICsgMSwgaHR0cEJhc2ljQXV0aERhdGEubGVuZ3RoKCkpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHRyeQotICAgICAgewotICAgICAgICAvLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLSAgICAgICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotICAgICU+Ci0gICAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9zY3JpcHRzL3dzZGxwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgICAgIDxodG1sPgotICAgICAgICAgIDxoZWFkPgotICAgICAgICAgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICAgICAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij48L3NjcmlwdD4KLSAgICAgICAgICA8L2hlYWQ+Ci0gICAgICAgICAgPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLSAgICAgICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgICAgICAgICB3c2RsUHJvcGVydGllc0NvbnRhaW5lci5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiKSklPiI7Ci0gICAgICAgICAgICAgIDwlCi0gICAgICAgICAgICAgIGlmIChhY3Rpb25SZXN1bHQpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgJT4KLSAgICAgICAgICAgICAgICB3c2RsU3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9yZXN1bHRfY29udGVudC5qc3AiKSklPiI7Ci0gICAgICAgICAgICAgIDwlCi0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICAgICAgd3NkbFN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotICAgICAgICAgICAgICA8JQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICA8L3NjcmlwdD4KLSAgICAgICAgICA8L2JvZHk+Ci0gICAgICAgIDwvaHRtbD4KLTwlCi0gICAgICB9Ci0gICAgICBjYXRjaCAoSFRUUFRyYW5zcG9ydEV4Y2VwdGlvbiBodHRwZSkKLSAgICAgIHsKLSAgICAgICAgaW50IGNvZGUgPSBodHRwZS5nZXRTdGF0dXNDb2RlKCk7Ci0gICAgICAgIGlmIChjb2RlID09IEh0dHBTZXJ2bGV0UmVzcG9uc2UuU0NfVU5BVVRIT1JJWkVEKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzcG9uc2Uuc2V0U3RhdHVzKGNvZGUpOwotICAgICAgICAgIHJlc3BvbnNlLnNldEhlYWRlcihIVFRQVHJhbnNwb3J0LkhUVFBfSEVBREVSX0NPTlRFTlRfTEVOR1RILCBTdHJpbmcudmFsdWVPZigwKSk7Ci0gICAgICAgICAgU3RyaW5nIHd3d0F1dGhEYXRhID0gaHR0cGUuZ2V0SGVhZGVyKEhUVFBUcmFuc3BvcnQuSFRUUF9IRUFERVJfV1dXX0FVVEgudG9Mb3dlckNhc2UoKSk7Ci0gICAgICAgICAgaWYgKHd3d0F1dGhEYXRhID09IG51bGwpCi0gICAgICAgICAgICB3d3dBdXRoRGF0YSA9IGh0dHBlLmdldEhlYWRlcihIVFRQVHJhbnNwb3J0LkhUVFBfSEVBREVSX1dXV19BVVRIKTsKLSAgICAgICAgICBpZiAod3d3QXV0aERhdGEgPT0gbnVsbCkKLSAgICAgICAgICAgIHd3d0F1dGhEYXRhID0gSFRUUFRyYW5zcG9ydC5CQVNJQzsKLSAgICAgICAgICByZXNwb25zZS5zZXRIZWFkZXIoSFRUUFRyYW5zcG9ydC5IVFRQX0hFQURFUl9XV1dfQVVUSCwgd3d3QXV0aERhdGEpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgICAgICAgIE1lc3NhZ2VRdWV1ZSBtZXNzYWdlUXVldWUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCk7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoY29udHJvbGxlci5nZXRNZXNzYWdlKCJNU0dfRVJST1JfVU5FWFBFQ1RFRCIpKTsKLSAgICAgICAgICBtZXNzYWdlUXVldWUuYWRkTWVzc2FnZShTdHJpbmcudmFsdWVPZihjb2RlKSk7Ci0gICAgICAgICAgbWVzc2FnZVF1ZXVlLmFkZE1lc3NhZ2UoaHR0cGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgICAlPgotICAgICAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9zY3JpcHRzL3dzZGxwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgICAgICAgPGh0bWw+Ci0gICAgICAgICAgICA8aGVhZD4KLSAgICAgICAgICAgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICAgICAgICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPjwvc2NyaXB0PgotICAgICAgICAgICAgPC9oZWFkPgotICAgICAgICAgICAgPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLSAgICAgICAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICAgICAgICAgICAgd3NkbFByb3BlcnRpZXNDb250YWluZXIubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfcHJvcGVydGllc19jb250YWluZXIuanNwIikpJT4iOwotICAgICAgICAgICAgICAgIHdzZGxTdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgICAgICAgICAgICAgPC9zY3JpcHQ+Ci0gICAgICAgICAgICA8L2JvZHk+Ci0gICAgICAgICAgPC9odG1sPgotICAgICAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KLSU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9PcGVuV1NETEFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9PcGVuV1NETEFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyM2FkNzcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvT3BlbldTRExBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5XU0RMRnJhbWVOYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5GcmFtZU5hbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLk9wZW5XU0RMQWN0aW9uIiU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL3NjcmlwdHMvd3NkbHBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLSAgPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICBPcGVuV1NETEFjdGlvbiBhY3Rpb24gPSBuZXcgT3BlbldTRExBY3Rpb24oY29udHJvbGxlcik7Ci0KLSAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gIGJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotICBpZiAoIWlucHV0c1ZhbGlkKSB7Ci0lPgotICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICB3c2RsUHJvcGVydGllc0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfcHJvcGVydGllc19jb250ZW50LmpzcCIpKSU+IjsKLSAgICB3c2RsU3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci0gIDwvc2NyaXB0PgotPCUKLSAgfQotICBlbHNlIHsKLSAgICAvLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLSAgICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0lPgotICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgIGlmIChpc01pY3Jvc29mdEludGVybmV0RXhwbG9yZXIoKSkgewotICAgICAgd3NkbE5hdmlnYXRvckNvbnRlbnQubG9jYXRpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX25hdmlnYXRvcl9jb250ZW50LmpzcCIpKSU+IjsKLSAgICAgIHdzZGxQcm9wZXJ0aWVzQ29udGFpbmVyLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCIpKSU+IjsKLSAgICAgIHdzZGxTdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICBwZXJzcGVjdGl2ZUNvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfcGVyc3BlY3RpdmVfY29udGVudC5qc3AiKSklPiI7Ci0gICAgfQotICAgIDwvc2NyaXB0PgotPCUKLSAgfQotJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1JlZnJlc2hXU0RMQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1JlZnJlc2hXU0RMQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODFmYzdmNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9SZWZyZXNoV1NETEFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy5SZWZyZXNoV1NETEFjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy5DbGVhcldTRExBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLldTRExQZXJzcGVjdGl2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvc2NyaXB0cy93c2RscGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLS8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLVJlZnJlc2hXU0RMQWN0aW9uIGFjdGlvbiA9IG5ldyBSZWZyZXNoV1NETEFjdGlvbihjb250cm9sbGVyKTsKLQotLy8gVGhlIGFjdGlvbiBtYXkgYmUgZXhlY3V0ZWQgdmlhIHByb2dyYW0gbGluay4KLWJvb2xlYW4gcGFyYW1zVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotaWYgKHBhcmFtc1ZhbGlkKSB7Ci0gIGludCBub2RlSUQgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpYWN0aW9uLmdldFByb3BlcnR5VGFibGUoKS5nZXQoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgTm9kZSB3c2RsTm9kZSA9IG5vZGVNYW5hZ2VyLmdldE5vZGUobm9kZUlEKTsKLSAgCi0gIC8vIFJ1biB0aGUgYWN0aW9uLgotICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0gIAotICBpZiAoYWN0aW9uUmVzdWx0KSB7Ci0gICU+Ci0gIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgIGlmIChpc01pY3Jvc29mdEludGVybmV0RXhwbG9yZXIoKSkgewotICAgICAgd3NkbE5hdmlnYXRvckNvbnRlbnQubG9jYXRpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX25hdmlnYXRvcl9jb250ZW50LmpzcCIpKSU+IjsKLSAgICAgIHdzZGxQcm9wZXJ0aWVzQ29udGFpbmVyLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCIpKSU+IjsKLSAgICAgIHdzZGxTdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICBwZXJzcGVjdGl2ZUNvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfcGVyc3BlY3RpdmVfY29udGVudC5qc3AiKSklPiI7Ci0gICAgfQotICA8L3NjcmlwdD4KLSAgPCUKLSAgfQotICBlbHNlIHsKLSAgJT4KLSAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgaWYgKGNvbmZpcm0oIjwlPUhUTUxVdGlscy5KU01hbmdsZSh3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX1FVRVNUSU9OX1JFTU9WRV9XU0RMX05PREUiLCB3c2RsTm9kZS5nZXROb2RlTmFtZSgpKSklPiIpKQotICAgICAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoQ2xlYXJXU0RMQWN0aW9uLmdldEFjdGlvbkxpbmsobm9kZUlEKSkpJT4iOwotICAgIGVsc2UgewotICAgICAgd3NkbFByb3BlcnRpZXNDb250YWluZXIubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfcHJvcGVydGllc19jb250YWluZXIuanNwIikpJT4iOwotICAgICAgd3NkbFN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotICAgIH0KLSAgPC9zY3JpcHQ+Ci0gIDwlCi0gIH0KLX0KLSU+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvUmVzaXplV1NETEZyYW1lc0FjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9SZXNpemVXU0RMRnJhbWVzQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWZiYWY1Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9SZXNpemVXU0RMRnJhbWVzQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIC8vIENyZWF0ZSB0aGUgYWN0aW9uLgotICAgUmVzaXplV1NETEZyYW1lc0FjdGlvbiBhY3Rpb24gPSBuZXcgUmVzaXplV1NETEZyYW1lc0FjdGlvbihjb250cm9sbGVyKTsKLSAgIAotICAgLy8gUG9wdWxhdGUgdGhlIGFjdGlvbiB3aXRoIHRoZSByZXF1ZXN0IHByb3BlcnRpZXMuCi0gICBib29sZWFuIHJlc3VsdCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0lPgotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL3NjcmlwdHMvd3NkbGZyYW1lc2V0cy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIGlmIChyZXN1bHQpCi0gICB7Ci0gICAgIGFjdGlvbi5leGVjdXRlKGZhbHNlKTsKLSAgICAgCi0gICAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBpZiAoaXNNaWNyb3NvZnRJbnRlcm5ldEV4cGxvcmVyKCkpCi0gIHsKLSAgICB2YXIgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXQgPSBnZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldCgpOwotICAgIHZhciBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXQgPSBnZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXQoKTsgIAotICAgIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0LnNldEF0dHJpYnV0ZSgiY29scyIsIjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKSU+Iik7Ci0gICAgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0LnNldEF0dHJpYnV0ZSgicm93cyIsIjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKCklPiIpOwotICB9Ci0gIGVsc2UKLSAgICBwZXJzcGVjdGl2ZUNvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfcGVyc3BlY3RpdmVfY29udGVudC5qc3AiKSklPiI7Ci08L3NjcmlwdD4KLTwlCi0gICB9Ci0lPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvU2VsZWN0V1NETE5hdmlnYXRvck5vZGVBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvU2VsZWN0V1NETE5hdmlnYXRvck5vZGVBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjE0NDlkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1NlbGVjdFdTRExOYXZpZ2F0b3JOb2RlQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy5TZWxlY3RXU0RMTmF2aWdhdG9yTm9kZUFjdGlvbiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotU2VsZWN0V1NETE5hdmlnYXRvck5vZGVBY3Rpb24gYWN0aW9uID0gbmV3IFNlbGVjdFdTRExOYXZpZ2F0b3JOb2RlQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0vLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLWFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLS8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotCi0vLyBEZXRlcm1pbmUgaWYgdGhlIGFjdGlvbiB3YXMgYWRkZWQgdG8gdGhlIGhpc3RvcnkgbGlzdC4KLWJvb2xlYW4gaXNBZGRlZFRvSGlzdG9yeSA9IGFjdGlvbi5pc0FkZGVkVG9IaXN0b3J5KCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2FjdGlvbnMvU2VsZWN0Tm9kZUFjdGlvbi5pbmMiICU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9TZWxlY3RXU0RMUHJvcGVydGllc1Rvb2xBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvU2VsZWN0V1NETFByb3BlcnRpZXNUb29sQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQ3NjQxNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9TZWxlY3RXU0RMUHJvcGVydGllc1Rvb2xBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLlNlbGVjdFdTRExQcm9wZXJ0aWVzVG9vbEFjdGlvbiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotU2VsZWN0V1NETFByb3BlcnRpZXNUb29sQWN0aW9uIGFjdGlvbiA9IG5ldyBTZWxlY3RXU0RMUHJvcGVydGllc1Rvb2xBY3Rpb24oY29udHJvbGxlcik7Ci0KLS8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi1ib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0KLS8vIERldGVybWluZSBpZiB0aGUgYWN0aW9uIHdhcyBhZGRlZCB0byB0aGUgaGlzdG9yeSBsaXN0LgotYm9vbGVhbiBpc0FkZGVkVG9IaXN0b3J5ID0gYWN0aW9uLmlzQWRkZWRUb0hpc3RvcnkoKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvYWN0aW9ucy9TZWxlY3ROb2RlVG9vbEFjdGlvbi5pbmMiICU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9Td2l0Y2hQZXJzcGVjdGl2ZUZyb21XU0RMQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1N3aXRjaFBlcnNwZWN0aXZlRnJvbVdTRExBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDFjNzY2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1N3aXRjaFBlcnNwZWN0aXZlRnJvbVdTRExBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLS8vIFByZXBhcmUgdGhlIGFjdGlvbgotU3dpdGNoUGVyc3BlY3RpdmVGcm9tV1NETEFjdGlvbiBhY3Rpb24gPSBuZXcgU3dpdGNoUGVyc3BlY3RpdmVGcm9tV1NETEFjdGlvbihjb250cm9sbGVyKTsKLSAgIAotLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi1hY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotICAgCi0vLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLWJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLSAgIAotLy8gRGV0ZXJtaW5lIGlmIHRoZSBhY3Rpb24gd2FzIGFkZGVkIHRvIHRoZSBoaXN0b3J5IGxpc3QuCi1ib29sZWFuIGlzQWRkZWRUb0hpc3RvcnkgPSBhY3Rpb24uaXNBZGRlZFRvSGlzdG9yeSgpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9zd2l0Y2hwZXJzcGVjdGl2ZS5qc3AiIGZsdXNoPSJ0cnVlIi8+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9Td2l0Y2hSZWFkT25seUZyYWdtZW50Vmlld3NBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvU3dpdGNoUmVhZE9ubHlGcmFnbWVudFZpZXdzQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTFkNjRhMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9Td2l0Y2hSZWFkT25seUZyYWdtZW50Vmlld3NBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuRnJhbWVOYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy5XU0RMRnJhbWVOYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLldTRExQZXJzcGVjdGl2ZSIlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9zY3JpcHRzL3dzZGxwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLWlmICh3c2RsUGVyc3BlY3RpdmUuZ2V0U3RhdHVzQ29udGVudFR5cGUoKSA9PSBXU0RMUGVyc3BlY3RpdmUuU1RBVFVTX0NPTlRFTlRfUkVTVUxUX0ZPUk0pCi0gIHdzZGxQZXJzcGVjdGl2ZS5zZXRTdGF0dXNDb250ZW50VHlwZShXU0RMUGVyc3BlY3RpdmUuU1RBVFVTX0NPTlRFTlRfUkVTVUxUX1NPVVJDRSk7Ci1lbHNlCi0gIHdzZGxQZXJzcGVjdGl2ZS5zZXRTdGF0dXNDb250ZW50VHlwZShXU0RMUGVyc3BlY3RpdmUuU1RBVFVTX0NPTlRFTlRfUkVTVUxUX0ZPUk0pOwotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICB3c2RsU3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9yZXN1bHRfY29udGVudC5qc3AiKSklPiI7Ci08L3NjcmlwdD4KLQotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1N3aXRjaFdTRExEZXRhaWxzVmlld3NBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvU3dpdGNoV1NETERldGFpbHNWaWV3c0FjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2MTM4YjIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvU3dpdGNoV1NETERldGFpbHNWaWV3c0FjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5GcmFtZU5hbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuV1NETEZyYW1lTmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS5XU0RMUGVyc3BlY3RpdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS5XU0RMRGV0YWlsc1Rvb2wiJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvc2NyaXB0cy93c2RscGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotCi08JQotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci1Ob2RlIHdzZGxOb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlKCk7Ci1XU0RMRGV0YWlsc1Rvb2wgd3NkbERldGFpbHNUb29sID0gKFdTRExEZXRhaWxzVG9vbCl3c2RsTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpOwotd3NkbERldGFpbHNUb29sLnRvZ2dsZVZpZXdJZCgpOwotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICB3c2RsUHJvcGVydGllc0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfcHJvcGVydGllc19jb250ZW50LmpzcCIpKSU+IjsKLTwvc2NyaXB0PgotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1N5bmNocm9uaXplRnJhZ21lbnRWaWV3c0FjdGlvbkFib3J0SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1N5bmNocm9uaXplRnJhZ21lbnRWaWV3c0FjdGlvbkFib3J0SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjkxMWNlYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9TeW5jaHJvbml6ZUZyYWdtZW50Vmlld3NBY3Rpb25BYm9ydEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5GcmFtZU5hbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLldTRExGcmFtZU5hbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLkZyYWdtZW50Q29uc3RhbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuSW52b2tlV1NETE9wZXJhdGlvblRvb2wiJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvc2NyaXB0cy93c2RscGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotCi08JQotSW52b2tlV1NETE9wZXJhdGlvblRvb2wgaW52b2tlV1NETE9wZXJhdGlvblRvb2wgPSAoSW52b2tlV1NETE9wZXJhdGlvblRvb2wpY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpOwotaWYgKGludm9rZVdTRExPcGVyYXRpb25Ub29sLmdldEZyYWdtZW50Vmlld0lEKCkuZXF1YWxzKEZyYWdtZW50Q29uc3RhbnRzLkZSQUdNRU5UX1ZJRVdfU1dJVENIX1NPVVJDRV9UT19GT1JNKSkKLSAgaW52b2tlV1NETE9wZXJhdGlvblRvb2wuc2V0RnJhZ21lbnRWaWV3SUQoRnJhZ21lbnRDb25zdGFudHMuRlJBR01FTlRfVklFV19TV0lUQ0hfRk9STV9UT19TT1VSQ0UpOwotZWxzZQotICBpbnZva2VXU0RMT3BlcmF0aW9uVG9vbC5zZXRGcmFnbWVudFZpZXdJRChGcmFnbWVudENvbnN0YW50cy5GUkFHTUVOVF9WSUVXX1NXSVRDSF9TT1VSQ0VfVE9fRk9STSk7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHdzZGxQcm9wZXJ0aWVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIikpJT4iOwotPC9zY3JpcHQ+Ci0KLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9TeW5jaHJvbml6ZUZyYWdtZW50Vmlld3NBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvU3luY2hyb25pemVGcmFnbWVudFZpZXdzQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGNhNjhmZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9TeW5jaHJvbml6ZUZyYWdtZW50Vmlld3NBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuRnJhbWVOYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLldTRExGcmFtZU5hbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuRnJhZ21lbnRDb25zdGFudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuU3luY2hyb25pemVGcmFnbWVudFZpZXdzQWN0aW9uIiU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL3NjcmlwdHMvd3NkbHBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLQotPCUKLVN5bmNocm9uaXplRnJhZ21lbnRWaWV3c0FjdGlvbiBhY3Rpb24gPSBuZXcgU3luY2hyb25pemVGcmFnbWVudFZpZXdzQWN0aW9uKGNvbnRyb2xsZXIpOwotYm9vbGVhbiBwYXJhbVZhbGlkID0gYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLVN0cmluZyB2aWV3SUQgPSAoU3RyaW5nKWFjdGlvbi5nZXRQcm9wZXJ0eVRhYmxlKCkuZ2V0KEZyYWdtZW50Q29uc3RhbnRzLkZSQUdNRU5UX1ZJRVdfSUQpOwotYm9vbGVhbiBzb3VyY2VUb0Zvcm0gPSB2aWV3SUQuZXF1YWxzKEZyYWdtZW50Q29uc3RhbnRzLkZSQUdNRU5UX1ZJRVdfU1dJVENIX1NPVVJDRV9UT19GT1JNKTsKLWlmIChzb3VyY2VUb0Zvcm0pIHsKLSAgaWYgKHBhcmFtVmFsaWQpIHsKLSU+Ci0gICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICBpZiAoIWNvbmZpcm0oIjwlPWNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCkuZ2V0TWVzc2FnZSgiTVNHX1FVRVNUSU9OX1NZTkNfVklFV1MiKSU+IikpCi0gICAgICAgIHBlcnNwZWN0aXZlV29ya0FyZWEubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL2FjdGlvbnMvU3luY2hyb25pemVGcmFnbWVudFZpZXdzQWN0aW9uQWJvcnRKU1AuanNwIikpJT4iOwotICAgIDwvc2NyaXB0PgotPCUKLSAgfQotICBlbHNlIHsKLSU+Ci0gICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICBpZiAoIWNvbmZpcm0oIjwlPWNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCkuZ2V0TWVzc2FnZSgiTVNHX1FVRVNUSU9OX1NZTkNfVklFV1NfREVTUElURV9JTlZBTElEX1NPVVJDRV9DT05URU5UIiklPiIpKQotICAgICAgICBwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC9hY3Rpb25zL1N5bmNocm9uaXplRnJhZ21lbnRWaWV3c0FjdGlvbkFib3J0SlNQLmpzcCIpKSU+IjsKLSAgICA8L3NjcmlwdD4KLTwlCi0gIH0KLX0KLWFjdGlvbi5leGVjdXRlKCk7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHdzZGxQcm9wZXJ0aWVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIikpJT4iOwotPC9zY3JpcHQ+Ci0KLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9Ub2dnbGVXU0RMTmF2aWdhdG9yTm9kZUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9Ub2dnbGVXU0RMTmF2aWdhdG9yTm9kZUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlNTg2ZDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvVG9nZ2xlV1NETE5hdmlnYXRvck5vZGVBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLS8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLVRvZ2dsZVdTRExOYXZpZ2F0b3JOb2RlQWN0aW9uIGFjdGlvbiA9IG5ldyBUb2dnbGVXU0RMTmF2aWdhdG9yTm9kZUFjdGlvbihjb250cm9sbGVyKTsKLQotLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi1hY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0vLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLWJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLQotLy8gRGV0ZXJtaW5lIGlmIHRoZSBhY3Rpb24gd2FzIGFkZGVkIHRvIHRoZSBoaXN0b3J5IGxpc3QuCi1ib29sZWFuIGlzQWRkZWRUb0hpc3RvcnkgPSBhY3Rpb24uaXNBZGRlZFRvSGlzdG9yeSgpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9hY3Rpb25zL1RvZ2dsZU5vZGVBY3Rpb24uaW5jIiAlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvVXBkYXRlV1NETEJpbmRpbmdBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvVXBkYXRlV1NETEJpbmRpbmdBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMWIxYTI0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1VwZGF0ZVdTRExCaW5kaW5nQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuV1NETEZyYW1lTmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuRnJhbWVOYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy5VcGRhdGVXU0RMQmluZGluZ0FjdGlvbiIlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9zY3JpcHRzL3dzZGxwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgVXBkYXRlV1NETEJpbmRpbmdBY3Rpb24gYWN0aW9uID0gbmV3IFVwZGF0ZVdTRExCaW5kaW5nQWN0aW9uKGNvbnRyb2xsZXIpOwotICBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotICBhY3Rpb24uZXhlY3V0ZSgpOwotJT4KLSAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgd3NkbFByb3BlcnRpZXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC93c2RsX3Byb3BlcnRpZXNfY29udGVudC5qc3AiKSklPiI7Ci0gICAgd3NkbFN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotICA8L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1dTRExBZGRUb0Zhdm9yaXRlc0FjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9XU0RMQWRkVG9GYXZvcml0ZXNBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjhjOGQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1dTRExBZGRUb0Zhdm9yaXRlc0FjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy5XU0RMQWRkVG9GYXZvcml0ZXNBY3Rpb24iJT4KLQotCi08anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvc2NyaXB0cy93c2RscGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotV1NETEFkZFRvRmF2b3JpdGVzQWN0aW9uIGFjdGlvbiA9IG5ldyBXU0RMQWRkVG9GYXZvcml0ZXNBY3Rpb24oY29udHJvbGxlcik7Ci0KLS8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi1ib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0lPgotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICB3c2RsUHJvcGVydGllc0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfcHJvcGVydGllc19jb250ZW50LmpzcCIpKSU+IjsKLSAgd3NkbFN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL3dzZGxfc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9XU0RMQ2hlY2tGYXZvcml0ZUV4aXN0c0FjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9XU0RMQ2hlY2tGYXZvcml0ZUV4aXN0c0FjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4MzI1OGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvV1NETENoZWNrRmF2b3JpdGVFeGlzdHNBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotCi08anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvc2NyaXB0cy93c2RscGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci0KLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC9hY3Rpb25zL1dTRExBZGRUb0Zhdm9yaXRlc0FjdGlvbkpTUC5qc3AiKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI+Ci08JQotRW51bWVyYXRpb24gcGFyYW1OYW1lcyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyTmFtZXMoKTsKLXdoaWxlIChwYXJhbU5hbWVzLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gIFN0cmluZyBwYXJhbU5hbWUgPSAoU3RyaW5nKXBhcmFtTmFtZXMubmV4dEVsZW1lbnQoKTsKLSAgU3RyaW5nW10gcGFyYW1WYWx1ZXMgPSByZXF1ZXN0LmdldFBhcmFtZXRlclZhbHVlcyhwYXJhbU5hbWUpOwotICBmb3IgKGludCBpID0gMDsgaSA8IHBhcmFtVmFsdWVzLmxlbmd0aDsgaSsrKSB7Ci0lPgotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPXBhcmFtTmFtZSU+IiB2YWx1ZT0iPCU9cGFyYW1WYWx1ZXNbaV0lPiI+Ci08JQotICB9Ci19Ci0lPgotPC9mb3JtPgotPC9ib2R5PgotPC9odG1sPgotCi08JQotLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotV1NETEFkZFRvRmF2b3JpdGVzQWN0aW9uIGFjdGlvbiA9IG5ldyBXU0RMQWRkVG9GYXZvcml0ZXNBY3Rpb24oY29udHJvbGxlcik7Ci0vLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLWFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci1pZiAoYWN0aW9uLmZhdm9yaXRlRXhpc3RzKCkpIHsKLSU+Ci0gIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgIGlmIChjb25maXJtKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKS5nZXRNZXNzYWdlKCJNU0dfUVVFU1RJT05fT1ZFUldSSVRFX0ZBVk9SSVRFUyIpKSU+IikpCi0gICAgICBkb2N1bWVudC5mb3Jtc1swXS5zdWJtaXQoKTsKLSAgPC9zY3JpcHQ+Ci08JQotfQotZWxzZSB7Ci0lPgotICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICBkb2N1bWVudC5mb3Jtc1swXS5zdWJtaXQoKTsKLSAgPC9zY3JpcHQ+Ci08JQotfQotJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1dTRExJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9hY3Rpb25zL1dTRExJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGRmMDJkYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9XU0RMSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy5XU0RMSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmlvLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLS8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLVdTRExJbXBvcnRXU0RMVG9GaWxlU3lzdGVtQWN0aW9uIGFjdGlvbiA9IG5ldyBXU0RMSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbihjb250cm9sbGVyKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvYWN0aW9ucy9JbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24uaW5jIiAlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvV1NETEltcG9ydFdTRExUb1dvcmtiZW5jaEFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9XU0RMSW1wb3J0V1NETFRvV29ya2JlbmNoQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDAyMzgyZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9XU0RMSW1wb3J0V1NETFRvV29ya2JlbmNoQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLldTRExJbXBvcnRXU0RMVG9Xb3JrYmVuY2hBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotV1NETEltcG9ydFdTRExUb1dvcmtiZW5jaEFjdGlvbiBhY3Rpb24gPSBuZXcgV1NETEltcG9ydFdTRExUb1dvcmtiZW5jaEFjdGlvbihjb250cm9sbGVyKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvYWN0aW9ucy9JbXBvcnRUb1dvcmtiZW5jaEFjdGlvbi5pbmMiICU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9XU0RMTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvYWN0aW9ucy9XU0RMTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmODc2MGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2FjdGlvbnMvV1NETExhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuV1NETExhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24iICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLVdTRExMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uIGFjdGlvbiA9IG5ldyBXU0RMTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbihjb250cm9sbGVyKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvYWN0aW9ucy9MYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uLmluYyIgJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL0ZyYWdtZW50c0Zvcm1WaWV3LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9GcmFnbWVudHNGb3JtVmlldy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3ZjMwMzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL0ZyYWdtZW50c0Zvcm1WaWV3LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEwOCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDMwNSAgIDExNzAzNCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHNob3VsZCBzdXBwb3J0IFNPQVAgSGVhZGVycwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwueHNkLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC53c2RsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKTsKLW5vZGVJRC5kZWxldGUoMCwgbm9kZUlELmxlbmd0aCgpKTsKLW5vZGVJRC5hcHBlbmQoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpKTsKLUludm9rZVdTRExPcGVyYXRpb25Ub29sIGludm9rZVdTRExPcGVyYXRpb25Ub29sID0gKEludm9rZVdTRExPcGVyYXRpb25Ub29sKShzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCkpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0KLUl0ZXJhdG9yIGl0ID0gb3BlckVsZW1lbnQuZ2V0U09BUEhlYWRlcnMoKS5pdGVyYXRvcigpOwotCi1pZiAoaXQuaGFzTmV4dCgpKSB7Ci0JU3RyaW5nIGhlYWRlckRpdklkID0gIkhlYWRlciI7Ci0JU3RyaW5nIGhlYWRlckltZ0lkID0gInhIZWFkZXIiOwotICAgICU+Ci0JPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLQkgIDx0cj4KLQkgICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT48YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT1oZWFkZXJEaXZJZCU+JywnPCU9aGVhZGVySW1nSWQlPicpIj48aW1nIG5hbWU9IjwlPWhlYWRlckltZ0lkJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RvcGVuZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfT1BFTkVEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+PC90ZD4KLQkgICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj48c3Ryb25nPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0hFQURFUiIpJT48L3N0cm9uZz48L3RkPgotCSAgPC90cj4KLQk8L3RhYmxlPgotCQotCTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0JICA8dHI+Ci0JICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PTEwPjxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBoZWlnaHQ9MiB3aWR0aD0iMTAwJSI+PC90ZD4KLQkgIDwvdHI+Ci0JPC90YWJsZT4KLQkKLQk8ZGl2IGlkPSI8JT1oZWFkZXJEaXZJZCU+Ij4KLQk8JQotCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLQkgIFNPQVBIZWFkZXIgc29hcEhlYWRlciA9IChTT0FQSGVhZGVyKSBpdC5uZXh0KCk7Ci0JICBJWFNERnJhZ21lbnQgZnJhZyA9IG9wZXJFbGVtZW50LmdldEhlYWRlckZyYWdtZW50KHNvYXBIZWFkZXIpOwkgICAKLQkgIGZyYWdJRC5kZWxldGUoMCwgZnJhZ0lELmxlbmd0aCgpKTsKLQkgIGZyYWdJRC5hcHBlbmQoZnJhZy5nZXRJRCgpKTsKLQkgICU+Ci0JICA8anNwOmluY2x1ZGUgcGFnZT0iPCU9ZnJhZy5nZXRXcml0ZUZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLQkgIDwlICAKLQl9Ci0JJT4KLQk8L2Rpdj4KLSAgICA8JSAgICAKLX0KLQotYm9vbGVhbiBoYXNJbnB1dCA9IEJvb2xlYW4ucGFyc2VCb29sZWFuKHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJoYXNJbnB1dCIpKTsKLVN0cmluZyBib2R5RGl2SWQgPSAiQm9keSI7Ci0KLWlmIChoYXNJbnB1dCkgewotCVN0cmluZyBib2R5SW1nSWQgPSAieEJvZHkiOwotICAgICU+Ci0JPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLQkgIDx0cj4KLQkgICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT48YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT1ib2R5RGl2SWQlPicsJzwlPWJvZHlJbWdJZCU+JykiPjxpbWcgbmFtZT0iPCU9Ym9keUltZ0lkJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RvcGVuZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfT1BFTkVEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+PC90ZD4KLQkgICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj48c3Ryb25nPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0JPRFkiKSU+PC9zdHJvbmc+PC90ZD4KLQkgIDwvdHI+Ci0JPC90YWJsZT4gCi0JCi0JPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLQkgIDx0cj4KLQkgICAgPHRkIHZhbGlnbj0idG9wIiBoZWlnaHQ9MTA+PGltZyBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2tleWxpbmUuZ2lmIikpJT4iIGhlaWdodD0yIHdpZHRoPSIxMDAlIj48L3RkPgotCSAgPC90cj4KLQk8L3RhYmxlPgotICAgIDwlCi19Ci0lPgotCi08ZGl2IGlkPSI8JT1ib2R5RGl2SWQlPiIgY2xhc3M9ImZyYWdhcmVhIj4KLTwlCi1pdCA9IG9wZXJFbGVtZW50LmdldE9yZGVyZWRCb2R5UGFydHMoKS5pdGVyYXRvcigpOwotd2hpbGUgKGl0Lmhhc05leHQoKSkgewotICBQYXJ0IHBhcnQgPSAoUGFydClpdC5uZXh0KCk7Ci0gIElYU0RGcmFnbWVudCBmcmFnID0gb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnQocGFydCk7Ci0gIGZyYWdJRC5kZWxldGUoMCwgZnJhZ0lELmxlbmd0aCgpKTsKLSAgZnJhZ0lELmFwcGVuZChmcmFnLmdldElEKCkpOwotICAlPgotICA8anNwOmluY2x1ZGUgcGFnZT0iPCU9ZnJhZy5nZXRXcml0ZUZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLSAgPCUKLX0KLSU+Ci08L2Rpdj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvRnJhZ21lbnRzU29hcFZpZXcuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL0ZyYWdtZW50c1NvYXBWaWV3LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGVjNmFkOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvRnJhZ21lbnRzU29hcFZpZXcuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzc2ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjIyICAgMTI3NDQzIGplc3BlckBzZWxza2FiZXQub3JnIC0gSmVzcGVyIFMgTW9sbGVyCi0gKiAyMDA2MDcyNiAgIDE0NDgyNCBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24KLSAqIDIwMDcwMzA1ICAgMTE3MDM0IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXZWIgU2VydmljZXMgRXhwbG9yZXIgc2hvdWxkIHN1cHBvcnQgU09BUCBIZWFkZXJzCi0gKiAyMDA3MDQxMyAgIDE3NjQ5MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV1NFOiBNYWtlIG1lc3NhZ2UvdHJhbnNwb3J0IHN0YWNrIHBsdWdnYWJsZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIudHJhbnNwb3J0LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcudzNjLmRvbS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC53c2RsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgIFdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KSh3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKS5nZXRUcmVlRWxlbWVudCgpKTsKLSAgIElTT0FQVHJhbnNwb3J0IHNvYXBUcmFuc3BvcnQgPSBvcGVyRWxlbWVudC5nZXRTT0FQVHJhbnNwb3J0UHJvdmlkZXIoKS5uZXdUcmFuc3BvcnQoKTsKLSAgIElTT0FQTWVzc2FnZSBzb2FwTWVzc2FnZSA9IHNvYXBUcmFuc3BvcnQubmV3TWVzc2FnZShvcGVyRWxlbWVudC5nZXRNZXNzYWdlQ29udGV4dCgpKTsKLSAgIG9wZXJFbGVtZW50LnNldFByb3BlcnR5QXNPYmplY3QoV1NETE1vZGVsQ29uc3RhbnRzLlBST1BfU09BUF9SRVFVRVNUX1RNUCwgc29hcE1lc3NhZ2UpOwotICAgCi0gICBIYXNodGFibGUgc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUgPSBuZXcgSGFzaHRhYmxlKHNvYXBNZXNzYWdlLmdldE5hbWVzcGFjZVRhYmxlKCkpOyAgICAgIAotICAgCi0gICBTdHJpbmcgY2FjaGVkSGVhZGVyQ29udGVudCA9IG9wZXJFbGVtZW50LmdldFByb3BlcnR5QXNTdHJpbmcoV1NETE1vZGVsQ29uc3RhbnRzLlBST1BfU09VUkNFX0NPTlRFTlRfSEVBREVSKTsKLSAgIFN0cmluZyBjYWNoZWRCb2R5Q29udGVudCA9IG9wZXJFbGVtZW50LmdldFByb3BlcnR5QXNTdHJpbmcoV1NETE1vZGVsQ29uc3RhbnRzLlBST1BfU09VUkNFX0NPTlRFTlQpOwotICAgCi0gICAvLyBpZiBlaXRoZXIgaGVhZGVyIG9yIGJvZHkgaGFzIGJlZW4gY2FjaGVkLCBuZWVkIHRvIGVuc3VyZSBuYW1lc3BhY2UgdGFibGUgaXMgdXBkYXRlZAotICAgLy8gZnJvbSB0aGUgY2FjaGVkIGNvcHkKLSAgIGlmIChjYWNoZWRIZWFkZXJDb250ZW50ICE9IG51bGwgfHwgY2FjaGVkQm9keUNvbnRlbnQgIT0gbnVsbCkgewotCSAgIGlmIChTT0FQTWVzc2FnZVV0aWxzLmRlY29kZU5hbWVzcGFjZVRhYmxlKHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLCBvcGVyRWxlbWVudCkpCi0JCSAgIHNvYXBNZXNzYWdlLnNldE5hbWVzcGFjZVRhYmxlKHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlKTsKLSAgIH0KLQkgICAgICAgICAgICAKLSAgIFN0cmluZyBoZWFkZXJDb250ZW50OwotICAgU3RyaW5nIGJvZHlDb250ZW50OwotICAgCi0gICBpZiAoY2FjaGVkSGVhZGVyQ29udGVudCAhPSBudWxsKQotICAgICAgIGhlYWRlckNvbnRlbnQgPSBjYWNoZWRIZWFkZXJDb250ZW50OwotICAgZWxzZSB7Ci0JICAgdHJ5IHsKLQkgICAgICAgU09BUE1lc3NhZ2VVdGlscy5zZXRIZWFkZXJDb250ZW50RnJvbU1vZGVsKHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLCBvcGVyRWxlbWVudCwgc29hcE1lc3NhZ2UpOwotCSAgICAgICAKLQkgICAgICAgLy8gZW5zdXJlIG5hbWVzcGFjZSB0YWJsZSB1cGRhdGVkIGluIG1lc3NhZ2UgYmVmb3JlIHNlcmlhbGl6ZSBvcGVyYXRpb24KLQkgICAgICAgc29hcE1lc3NhZ2Uuc2V0TmFtZXNwYWNlVGFibGUoc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUpOwotCSAgICAgICBoZWFkZXJDb250ZW50ID0gc29hcFRyYW5zcG9ydC5uZXdTZXJpYWxpemVyKCkuc2VyaWFsaXplKElTT0FQTWVzc2FnZS5IRUFERVJfQ09OVEVOVCwgc29hcE1lc3NhZ2UpOwotCSAgIH0KLQkgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJICAgaGVhZGVyQ29udGVudCA9ICIiOwotCSAgIH0KLSAgIH0KLSAgIAotICAgaWYgKGNhY2hlZEJvZHlDb250ZW50ICE9IG51bGwpCi0JICAgYm9keUNvbnRlbnQgPSBjYWNoZWRCb2R5Q29udGVudDsKLSAgIGVsc2UgewotCSAgIHRyeSB7Ci0JICAgICAgIFNPQVBNZXNzYWdlVXRpbHMuc2V0Qm9keUNvbnRlbnRGcm9tTW9kZWwoc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUsIG9wZXJFbGVtZW50LCBzb2FwTWVzc2FnZSk7Ci0JICAgICAgIAotCSAgICAgICAvLyBlbnN1cmUgbmFtZXNwYWNlIHRhYmxlIHVwZGF0ZWQgaW4gbWVzc2FnZSBiZWZvcmUgc2VyaWFsaXplIG9wZXJhdGlvbgotCSAgICAgICBzb2FwTWVzc2FnZS5zZXROYW1lc3BhY2VUYWJsZShzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZSk7Ci0JICAgICAgIGJvZHlDb250ZW50ID0gc29hcFRyYW5zcG9ydC5uZXdTZXJpYWxpemVyKCkuc2VyaWFsaXplKElTT0FQTWVzc2FnZS5CT0RZX0NPTlRFTlQsIHNvYXBNZXNzYWdlKTsKLQkgICB9Ci0JICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCSAgIGJvZHlDb250ZW50ID0gIiI7Ci0JICAgfQotICAgfSAgICAgIAotICAgCi0gICAvLyBjYWNoZSB0aGUgbmFtZXNwYWNlIHRhYmxlCi0gICBFbnVtZXJhdGlvbiBlbm0gPSBzb2FwRW52ZWxvcGVOYW1lc3BhY2VUYWJsZS5rZXlzKCk7Ci0gICB3aGlsZSAoZW5tLmhhc01vcmVFbGVtZW50cygpKQotICAgewotICAgICBTdHJpbmcgdXJpID0gKFN0cmluZyllbm0ubmV4dEVsZW1lbnQoKTsKLSAgICAgU3RyaW5nIHByZWZpeCA9IChTdHJpbmcpc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUuZ2V0KHVyaSk7Ci0gICAgIFN0cmluZyB2YWx1ZSA9IFNvYXBIZWxwZXIuZW5jb2RlTmFtZXNwYWNlRGVjbGFyYXRpb24ocHJlZml4LCB1cmkpOwotICAgICAlPgotICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1GcmFnbWVudENvbnN0YW50cy5TT1VSQ0VfQ09OVEVOVF9OQU1FU1BBQ0UlPiIgdmFsdWU9IjwlPXZhbHVlJT4iPgotICAgICA8JQotICAgfQotJT4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTMwIHZhbGlnbj0iYm90dG9tIiBjbGFzcz0ibGFiZWxzIj4KLTwlCi0JRWxlbWVudCBzb2FwRW52ZWxvcGVFbGVtZW50ID0gc29hcE1lc3NhZ2UuZ2V0RW52ZWxvcGUoZmFsc2UpOwotICAgIFN0cmluZ0J1ZmZlciBoZWFkZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCI8Iik7Ci0gICAgaGVhZGVyLmFwcGVuZChzb2FwRW52ZWxvcGVFbGVtZW50LmdldFRhZ05hbWUoKSk7Ci0gICAgTmFtZWROb2RlTWFwIGF0dHJpYnV0ZXMgPSBzb2FwRW52ZWxvcGVFbGVtZW50LmdldEF0dHJpYnV0ZXMoKTsKLSAgICBpbnQgbnVtYmVyT2ZBdHRyaWJ1dGVzID0gYXR0cmlidXRlcy5nZXRMZW5ndGgoKTsKLSAgICBpZiAobnVtYmVyT2ZBdHRyaWJ1dGVzID09IDApCi0gICAgICBoZWFkZXIuYXBwZW5kKCc+Jyk7Ci0lPgotICAgICAgPCU9SFRNTFV0aWxzLmNoYXJhY3RlcnNUb0hUTUxFbnRpdGllc1N0cmljdChoZWFkZXIudG9TdHJpbmcoKSklPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPCUKLSAgICBmb3IgKGludCBpPTA7aTxudW1iZXJPZkF0dHJpYnV0ZXM7aSsrKQotICAgIHsKLSAgICAgIGhlYWRlci5zZXRMZW5ndGgoMCk7Ci0gICAgICBOb2RlIGF0dHJOb2RlID0gYXR0cmlidXRlcy5pdGVtKGkpOwotICAgICAgaGVhZGVyLmFwcGVuZChhdHRyTm9kZS5nZXROb2RlTmFtZSgpKS5hcHBlbmQoIj1cIiIpLmFwcGVuZChhdHRyTm9kZS5nZXROb2RlVmFsdWUoKSkuYXBwZW5kKCdcIicpOwotICAgICAgaWYgKGkgPT0gbnVtYmVyT2ZBdHRyaWJ1dGVzLTEpCi0gICAgICAgIGhlYWRlci5hcHBlbmQoJz4nKTsKLSU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIHdpZHRoPTg+Ci0gICAgICA8aW1nIHdpZHRoPTggaGVpZ2h0PTE2IHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvc3BhY2UuZ2lmIikpJT4iPgotICAgIDwvdGQ+Ci0gICAgPHRkIHZhbGlnbj0iYm90dG9tIiBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDwlPUhUTUxVdGlscy5jaGFyYWN0ZXJzVG9IVE1MRW50aXRpZXMoaGVhZGVyLnRvU3RyaW5nKCkpJT4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTwlCi0gICAgfQotICAgIAotICAgIEVsZW1lbnQgc29hcEhlYWRlckVsZW1lbnQgPSBzb2FwTWVzc2FnZS5nZXRIZWFkZXIoZmFsc2UpOwotICAgIGhlYWRlci5zZXRMZW5ndGgoMCk7Ci0gICAgaGVhZGVyLmFwcGVuZCgnPCcpLmFwcGVuZChzb2FwSGVhZGVyRWxlbWVudC5nZXRUYWdOYW1lKCkpOwotICAgIGF0dHJpYnV0ZXMgPSBzb2FwSGVhZGVyRWxlbWVudC5nZXRBdHRyaWJ1dGVzKCk7Ci0gICAgbnVtYmVyT2ZBdHRyaWJ1dGVzID0gYXR0cmlidXRlcy5nZXRMZW5ndGgoKTsKLSAgICBpZiAobnVtYmVyT2ZBdHRyaWJ1dGVzID09IDApCi0gICAgICBoZWFkZXIuYXBwZW5kKCc+Jyk7Ci0lPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCB3aWR0aD04PgotICAgICAgPGltZyB3aWR0aD04IGhlaWdodD0xNiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3NwYWNlLmdpZiIpKSU+Ij4KLSAgICA8L3RkPgotICAgIDx0ZCB2YWxpZ249ImJvdHRvbSIgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8JT1IVE1MVXRpbHMuY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzKGhlYWRlci50b1N0cmluZygpKSU+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08JQotICAgIGZvciAoaW50IGk9MDtpPG51bWJlck9mQXR0cmlidXRlcztpKyspCi0gICAgewotICAgICAgaGVhZGVyLnNldExlbmd0aCgwKTsKLSAgICAgIE5vZGUgYXR0ck5vZGUgPSBhdHRyaWJ1dGVzLml0ZW0oaSk7Ci0gICAgICBoZWFkZXIuYXBwZW5kKGF0dHJOb2RlLmdldE5vZGVOYW1lKCkpLmFwcGVuZCgiPVwiIikuYXBwZW5kKGF0dHJOb2RlLmdldE5vZGVWYWx1ZSgpKS5hcHBlbmQoJ1wiJyk7Ci0gICAgICBpZiAoaSA9PSBudW1iZXJPZkF0dHJpYnV0ZXMtMSkKLSAgICAgICAgaGVhZGVyLmFwcGVuZCgnPicpOwotJT4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgd2lkdGg9MTY+Ci0gICAgICA8aW1nIHdpZHRoPTE2IGhlaWdodD0xNiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3NwYWNlLmdpZiIpKSU+Ij4KLSAgICA8L3RkPgotICAgIDx0ZCB2YWxpZ249ImJvdHRvbSIgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8JT1IVE1MVXRpbHMuY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzKGhlYWRlci50b1N0cmluZygpKSU+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08JQotICAgIH0KLSU+Ci08dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0zPgotICA8dHI+Ci0gICAgPHRkIHdpZHRoPSIxNiI+Ci0gICAgICA8aW1nIHdpZHRoPSIxNiIgaGVpZ2h0PTE2IHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvc3BhY2UuZ2lmIikpJT4iPgotICAgIDwvdGQ+ICAgIAotICAgIDx0ZCB2YWxpZ249ImNlbnRlciIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxpbnB1dCB0eXBlPSJmaWxlIiBuYW1lPSI8JT1XU0RMQWN0aW9uSW5wdXRzLlNFTEVDVEVEX0ZJTEVfSEVBREVSJT4iIHRpdGxlPSI8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NPQVBfRklMRSIpJT4iPgotICAgIDwvdGQ+Ci0gICAgPHRkIHZhbGlnbj0iY2VudGVyIiBhbGlnbj0ibGVmdCIgY2xhc3M9ImxhYmVscyIgbm93cmFwPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpkb0FjdGlvbignPCU9V1NETEFjdGlvbklucHV0cy5TVUJNSVNTSU9OX0FDVElPTl9CUk9XU0VfRklMRV9IRUFERVIlPicpIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQlVUVE9OX0xBQkVMX0xPQUQiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIHZhbGlnbj0iY2VudGVyIiBhbGlnbj0ibGVmdCIgY2xhc3M9ImxhYmVscyIgbm93cmFwPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpkb0FjdGlvbignPCU9V1NETEFjdGlvbklucHV0cy5TVUJNSVNTSU9OX0FDVElPTl9TQVZFX0FTX0hFQURFUiU+JykiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJCVVRUT05fTEFCRUxfU0FWRV9BUyIpJT48L2E+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0zPgotICA8dHI+Ci0gICAgPHRkIHdpZHRoPSIxNiI+Ci0gICAgICA8aW1nIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9zcGFjZS5naWYiKSklPiI+Ci0gICAgPC90ZD4KLSAgICA8dGQgd2lkdGg9IjEwMCUiPgotICAgICAgPHRleHRhcmVhIGlkPSJzb2FwX2hlYWRlcl9jb250ZW50IiBuYW1lPSI8JT1GcmFnbWVudENvbnN0YW50cy5TT1VSQ0VfQ09OVEVOVF9IRUFERVIlPiIgY2xhc3M9InRleHRhcmVhZW50ZXIiPjwlPUhUTUxVdGlscy5jaGFyYWN0ZXJzVG9IVE1MRW50aXRpZXNTdHJpY3QoaGVhZGVyQ29udGVudCklPjwvdGV4dGFyZWE+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08JQotICAgIGhlYWRlci5zZXRMZW5ndGgoMCk7Ci0gICAgaGVhZGVyLmFwcGVuZCgiPC8iKS5hcHBlbmQoc29hcEhlYWRlckVsZW1lbnQuZ2V0VGFnTmFtZSgpKS5hcHBlbmQoJz4nKTsKLSU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MSBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIHdpZHRoPTg+Ci0gICAgICA8aW1nIHdpZHRoPTggaGVpZ2h0PTE2IHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvc3BhY2UuZ2lmIikpJT4iPgotICAgIDwvdGQ+Ci0gICAgPHRkIHZhbGlnbj0iYm90dG9tIiBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDwlPUhUTUxVdGlscy5jaGFyYWN0ZXJzVG9IVE1MRW50aXRpZXMoaGVhZGVyLnRvU3RyaW5nKCkpJT4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTwlCi0gICAgRWxlbWVudCBzb2FwQm9keUVsZW1lbnQgPSBzb2FwTWVzc2FnZS5nZXRCb2R5KGZhbHNlKTsKLSAgICBoZWFkZXIuc2V0TGVuZ3RoKDApOwotICAgIGhlYWRlci5hcHBlbmQoJzwnKS5hcHBlbmQoc29hcEJvZHlFbGVtZW50LmdldFRhZ05hbWUoKSk7Ci0gICAgYXR0cmlidXRlcyA9IHNvYXBCb2R5RWxlbWVudC5nZXRBdHRyaWJ1dGVzKCk7Ci0gICAgbnVtYmVyT2ZBdHRyaWJ1dGVzID0gYXR0cmlidXRlcy5nZXRMZW5ndGgoKTsKLSAgICBpZiAobnVtYmVyT2ZBdHRyaWJ1dGVzID09IDApCi0gICAgICBoZWFkZXIuYXBwZW5kKCc+Jyk7Ci0lPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCB3aWR0aD04PgotICAgICAgPGltZyB3aWR0aD04IGhlaWdodD0xNiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3NwYWNlLmdpZiIpKSU+Ij4KLSAgICA8L3RkPgotICAgIDx0ZCB2YWxpZ249ImJvdHRvbSIgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8JT1IVE1MVXRpbHMuY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzKGhlYWRlci50b1N0cmluZygpKSU+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08JQotICAgIGZvciAoaW50IGk9MDtpPG51bWJlck9mQXR0cmlidXRlcztpKyspCi0gICAgewotICAgICAgaGVhZGVyLnNldExlbmd0aCgwKTsKLSAgICAgIE5vZGUgYXR0ck5vZGUgPSBhdHRyaWJ1dGVzLml0ZW0oaSk7Ci0gICAgICBoZWFkZXIuYXBwZW5kKGF0dHJOb2RlLmdldE5vZGVOYW1lKCkpLmFwcGVuZCgiPVwiIikuYXBwZW5kKGF0dHJOb2RlLmdldE5vZGVWYWx1ZSgpKS5hcHBlbmQoJ1wiJyk7Ci0gICAgICBpZiAoaSA9PSBudW1iZXJPZkF0dHJpYnV0ZXMtMSkKLSAgICAgICAgaGVhZGVyLmFwcGVuZCgnPicpOwotJT4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgd2lkdGg9MTY+Ci0gICAgICA8aW1nIHdpZHRoPTE2IGhlaWdodD0xNiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3NwYWNlLmdpZiIpKSU+Ij4KLSAgICA8L3RkPgotICAgIDx0ZCB2YWxpZ249ImJvdHRvbSIgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8JT1IVE1MVXRpbHMuY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzKGhlYWRlci50b1N0cmluZygpKSU+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08JQotICAgIH0KLQotICAgIEVsZW1lbnQgd3JhcHBlckVsZW1lbnQgPSBudWxsOwotICAgIGlmICghb3BlckVsZW1lbnQuaXNEb2N1bWVudFN0eWxlKCkpCi0gICAgeyAgICAgIAotICAgICAgLy8gR2VuZXJhdGUgYW4gUlBDIHN0eWxlIHdyYXBwZXIgZWxlbWVudC4gICAgICAKLSAgICAgIHdyYXBwZXJFbGVtZW50ID0gKEVsZW1lbnQpIHNvYXBCb2R5RWxlbWVudC5nZXRGaXJzdENoaWxkKCk7Ci0gICAgICBoZWFkZXIuc2V0TGVuZ3RoKDApOwotICAgICAgaGVhZGVyLmFwcGVuZCgnPCcpLmFwcGVuZCh3cmFwcGVyRWxlbWVudC5nZXRUYWdOYW1lKCkpOwotICAgICAgYXR0cmlidXRlcyA9IHdyYXBwZXJFbGVtZW50LmdldEF0dHJpYnV0ZXMoKTsKLSAgICAgIG51bWJlck9mQXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMuZ2V0TGVuZ3RoKCk7Ci0gICAgICBpZiAobnVtYmVyT2ZBdHRyaWJ1dGVzID09IDApCi0gICAgICAgIGhlYWRlci5hcHBlbmQoJz4nKTsKLSU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIHdpZHRoPTE2PgotICAgICAgPGltZyB3aWR0aD0xNiBoZWlnaHQ9MTYgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9zcGFjZS5naWYiKSklPiI+Ci0gICAgPC90ZD4KLSAgICA8dGQgdmFsaWduPSJib3R0b20iIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPCU9SFRNTFV0aWxzLmNoYXJhY3RlcnNUb0hUTUxFbnRpdGllcyhoZWFkZXIudG9TdHJpbmcoKSklPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPCUKLSAgICAgIGZvciAoaW50IGk9MDtpPG51bWJlck9mQXR0cmlidXRlcztpKyspCi0gICAgICB7Ci0gICAgICAgIGhlYWRlci5zZXRMZW5ndGgoMCk7Ci0gICAgICAgIE5vZGUgYXR0ck5vZGUgPSBhdHRyaWJ1dGVzLml0ZW0oaSk7Ci0gICAgICAgIGhlYWRlci5hcHBlbmQoYXR0ck5vZGUuZ2V0Tm9kZU5hbWUoKSkuYXBwZW5kKCI9XCIiKS5hcHBlbmQoYXR0ck5vZGUuZ2V0Tm9kZVZhbHVlKCkpLmFwcGVuZCgnXCInKTsKLSAgICAgICAgaWYgKGkgPT0gbnVtYmVyT2ZBdHRyaWJ1dGVzLTEpCi0gICAgICAgICAgaGVhZGVyLmFwcGVuZCgnPicpOwotJT4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgd2lkdGg9MjQ+Ci0gICAgICA8aW1nIHdpZHRoPTI0IGhlaWdodD0xNiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3NwYWNlLmdpZiIpKSU+Ij4KLSAgICA8L3RkPgotICAgIDx0ZCB2YWxpZ249ImJvdHRvbSIgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8JT1IVE1MVXRpbHMuY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzKGhlYWRlci50b1N0cmluZygpKSU+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08JQotICAgICAgfQotICAgIH0KLQotICAgIGludCBzb3VyY2VDb250ZW50SW5kZW50YXRpb25JbWFnZVdpZHRoID0gMTY7Ci0gICAgaWYgKHdyYXBwZXJFbGVtZW50ICE9IG51bGwpCi0gICAgICBzb3VyY2VDb250ZW50SW5kZW50YXRpb25JbWFnZVdpZHRoICs9IDg7Ci0lPgotPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9Mz4KLSAgPHRyPgotICAgIDx0ZCB3aWR0aD08JT1zb3VyY2VDb250ZW50SW5kZW50YXRpb25JbWFnZVdpZHRoJT4+Ci0gICAgICA8aW1nIHdpZHRoPTwlPXNvdXJjZUNvbnRlbnRJbmRlbnRhdGlvbkltYWdlV2lkdGglPiBoZWlnaHQ9MTYgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9zcGFjZS5naWYiKSklPiI+Ci0gICAgPC90ZD4gICAgCi0gICAgPHRkIHZhbGlnbj0iY2VudGVyIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGlucHV0IHR5cGU9ImZpbGUiIG5hbWU9IjwlPVdTRExBY3Rpb25JbnB1dHMuU0VMRUNURURfRklMRSU+IiB0aXRsZT0iPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TT0FQX0ZJTEUiKSU+Ij4KLSAgICA8L3RkPgotICAgIDx0ZCB2YWxpZ249ImNlbnRlciIgYWxpZ249ImxlZnQiIGNsYXNzPSJsYWJlbHMiIG5vd3JhcD4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6ZG9BY3Rpb24oJzwlPVdTRExBY3Rpb25JbnB1dHMuU1VCTUlTU0lPTl9BQ1RJT05fQlJPV1NFX0ZJTEUlPicpIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQlVUVE9OX0xBQkVMX0xPQUQiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIHZhbGlnbj0iY2VudGVyIiBhbGlnbj0ibGVmdCIgY2xhc3M9ImxhYmVscyIgbm93cmFwPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpkb0FjdGlvbignPCU9V1NETEFjdGlvbklucHV0cy5TVUJNSVNTSU9OX0FDVElPTl9TQVZFX0FTJT4nKSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkJVVFRPTl9MQUJFTF9TQVZFX0FTIiklPjwvYT4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTM+Ci0gIDx0cj4KLSAgICA8dGQgd2lkdGg9PCU9c291cmNlQ29udGVudEluZGVudGF0aW9uSW1hZ2VXaWR0aCU+PgotICAgICAgPGltZyB3aWR0aD08JT1zb3VyY2VDb250ZW50SW5kZW50YXRpb25JbWFnZVdpZHRoJT4gaGVpZ2h0PTE2IHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvc3BhY2UuZ2lmIikpJT4iPgotICAgIDwvdGQ+Ci0gICAgPHRkIHdpZHRoPSIxMDAlIj4KLSAgICAgIDx0ZXh0YXJlYSBpZD0ic29hcF9ib2R5X2NvbnRlbnQiIG5hbWU9IjwlPUZyYWdtZW50Q29uc3RhbnRzLlNPVVJDRV9DT05URU5UJT4iIGNsYXNzPSJiaWd0ZXh0YXJlYWVudGVyIj48JT1IVE1MVXRpbHMuY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzU3RyaWN0KGJvZHlDb250ZW50KSU+PC90ZXh0YXJlYT4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTwlCi0gICBpZiAod3JhcHBlckVsZW1lbnQgIT0gbnVsbCkKLSAgIHsKLSAgICAgaGVhZGVyLnNldExlbmd0aCgwKTsKLSAgICAgaGVhZGVyLmFwcGVuZCgiPC8iKS5hcHBlbmQod3JhcHBlckVsZW1lbnQuZ2V0VGFnTmFtZSgpKS5hcHBlbmQoJz4nKTsKLSU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIHdpZHRoPTE2PgotICAgICAgPGltZyB3aWR0aD0xNiBoZWlnaHQ9MTYgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9zcGFjZS5naWYiKSklPiI+Ci0gICAgPC90ZD4KLSAgICA8dGQgdmFsaWduPSJib3R0b20iIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPCU9SFRNTFV0aWxzLmNoYXJhY3RlcnNUb0hUTUxFbnRpdGllcyhoZWFkZXIudG9TdHJpbmcoKSklPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPCUKLSAgIH0KLQotICAgaGVhZGVyLnNldExlbmd0aCgwKTsKLSAgIGhlYWRlci5hcHBlbmQoIjwvIikuYXBwZW5kKHNvYXBCb2R5RWxlbWVudC5nZXRUYWdOYW1lKCkpLmFwcGVuZCgnPicpOwotJT4KLTx0YWJsZSB3aWR0aD0iOTUlIiBjZWxscGFkZGluZz0xIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgd2lkdGg9OD4KLSAgICAgIDxpbWcgd2lkdGg9OCBoZWlnaHQ9MTYgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9zcGFjZS5naWYiKSklPiI+Ci0gICAgPC90ZD4KLSAgICA8dGQgdmFsaWduPSJib3R0b20iIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPCU9SFRNTFV0aWxzLmNoYXJhY3RlcnNUb0hUTUxFbnRpdGllcyhoZWFkZXIudG9TdHJpbmcoKSklPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPCUKLSAgIGhlYWRlci5zZXRMZW5ndGgoMCk7Ci0gICBoZWFkZXIuYXBwZW5kKCI8LyIpLmFwcGVuZChzb2FwRW52ZWxvcGVFbGVtZW50LmdldFRhZ05hbWUoKSkuYXBwZW5kKCc+Jyk7Ci0lPgotPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTEgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCB2YWxpZ249ImJvdHRvbSIgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8JT1IVE1MVXRpbHMuY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzKGhlYWRlci50b1N0cmluZygpKSU+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvSW52b2tlV1NETE9wZXJhdGlvbkZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL0ludm9rZVdTRExPcGVyYXRpb25Gb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmFhZmE2NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvSW52b2tlV1NETE9wZXJhdGlvbkZvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjA4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTEyICAgMTIxMjEwIG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbgotICogMjAwNzAzMDUgICAxMTcwMzQgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBzaG91bGQgc3VwcG9ydCBTT0FQIEhlYWRlcnMgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgud3NkbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImZyYWdJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci0KLTwlCi0gIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICBOb2RlIHNlbGVjdGVkTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpOwotICBJbnZva2VXU0RMT3BlcmF0aW9uVG9vbCBpbnZva2VXU0RMT3BlcmF0aW9uVG9vbCA9IChJbnZva2VXU0RMT3BlcmF0aW9uVG9vbCkoc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpKTsKLSAgV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gIFN0cmluZyBmcmFnbWVudFZpZXdJRCA9IGludm9rZVdTRExPcGVyYXRpb25Ub29sLmdldEZyYWdtZW50Vmlld0lEKCk7Ci0gIGludCBvcGVyYXRpb25UeXBlID0gb3BlckVsZW1lbnQuZ2V0T3BlcmF0aW9uVHlwZSgpOwotICBTdHJpbmcgaW52b2tlV1NETE9wZXJhdGlvblVSTCA9IHJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChpbnZva2VXU0RMT3BlcmF0aW9uVG9vbC5nZXRGb3JtQWN0aW9uTGluayhvcGVyYXRpb25UeXBlLGZyYWdtZW50Vmlld0lEKSkpOwotJT4KLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1RJVExFX0lOVk9LRV9XU0RMX09QRVJBVElPTiIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9mb3Jtc3VibWl0LmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9zY3JpcHRzL2ZyYWdtZW50dGFibGVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9zY3JpcHRzL3dzZGxwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgZnVuY3Rpb24gZG9BY3Rpb24oYWN0aW9uKQotICB7Ci0gICAgdmFyIGZvcm0gPSBkb2N1bWVudC5mb3Jtc1swXTsKLSAgICBpZiAoaGFuZGxlU3VibWl0KGZvcm0pKQotICAgIHsKLSAgICAgIGZvcm0uPCU9V1NETEFjdGlvbklucHV0cy5TVUJNSVNTSU9OX0FDVElPTiU+LnZhbHVlID0gYWN0aW9uOwotICAgICAgZm9ybS5zdWJtaXQoKTsKLSAgICAgIGZvcm0uPCU9V1NETEFjdGlvbklucHV0cy5TVUJNSVNTSU9OX0FDVElPTiU+LnZhbHVlID0gIjwlPWludm9rZVdTRExPcGVyYXRpb25VUkwlPiI7Ci0gICAgICByZXNldFN1Ym1pc3Npb24oKTsKLSAgICB9Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGNsb3NlQ2hpbGRXaW5kb3dzKCkKLSAgewotICAgIGNsb3NlWFNESW5mb0RpYWxvZygpOwotICAgIGNsb3NlQ2FsZW5kYXJCcm93c2VyKCk7Ci0gIH0KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iIG9uVW5sb2FkPSJjbG9zZUNoaWxkV2luZG93cygpIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICA8Zm9ybSBhY3Rpb249IjwlPWludm9rZVdTRExPcGVyYXRpb25VUkwlPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI+Ci0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9V1NETEFjdGlvbklucHV0cy5TVUJNSVNTSU9OX0FDVElPTiU+IiB2YWx1ZT0iPCU9V1NETEFjdGlvbklucHV0cy5TVUJNSVNTSU9OX0FDVElPTl9GT1JNJT4iPgotICAgIDwlCi0gICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gIndzZGwvaW1hZ2VzL2ludm9rZV93c2RsX29wZXJhdGlvbl9oaWdobGlnaHRlZC5naWYiOwotICAgIFN0cmluZyB0aXRsZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfSU5WT0tFX1dTRExfT1BFUkFUSU9OIik7Ci0gICAgaWYgKG9wZXJhdGlvblR5cGUgPT0gV1NETE9wZXJhdGlvbkVsZW1lbnQuT1BFUkFUSU9OX1RZUEVfU09BUCkKLSAgICB7Ci0gICAgJT4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQ+Ci0gICAgICA8aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KHRpdGxlSW1hZ2VQYXRoKSklPiIgYWx0PSIiPgotICAgICAgPHN0cm9uZz48JT10aXRsZSU+PC9zdHJvbmc+Ci0gICAgPC90ZD4KLSAgICA8dGQgd2lkdGg9IioiPiZuYnNwOzwvdGQ+Ci0gICAgPHRkIGFsaWduPSJyaWdodCIgY2xhc3M9ImxhYmVscyI+Ci08JQotICAgaWYgKGZyYWdtZW50Vmlld0lELmVxdWFscyhGcmFnbWVudENvbnN0YW50cy5GUkFHTUVOVF9WSUVXX1NXSVRDSF9GT1JNX1RPX1NPVVJDRSkpCi0gICB7Ci0lPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpzeW5jaHJvbml6ZUZyYWdtZW50Vmlld3MoJzwlPUZyYWdtZW50Q29uc3RhbnRzLkZSQUdNRU5UX1ZJRVdfU1dJVENIX1NPVVJDRV9UT19GT1JNJT4nKSIgdGl0bGU9IjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfU1dJVENIX1RPX0ZPUk1fVklFVyIpJT4iPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfRk9STSIpJT48L2E+Ci08JQotICAgfQotICAgZWxzZQotICAgewotJT4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6c3luY2hyb25pemVGcmFnbWVudFZpZXdzKCc8JT1GcmFnbWVudENvbnN0YW50cy5GUkFHTUVOVF9WSUVXX1NXSVRDSF9GT1JNX1RPX1NPVVJDRSU+JykiIHRpdGxlPSI8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1NXSVRDSF9UT19TT1VSQ0VfVklFVyIpJT4iPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfU09VUkNFIiklPjwvYT4KLTwlCi0gICB9Ci0lPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTIwIGNvbHNwYW49Mz48aW1nIGhlaWdodD0yIHdpZHRoPSIxMDAlIiBhbGlnbj0idG9wIiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2tleWxpbmUuZ2lmIikpJT4iPjwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotICAgIDwlCi0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgJT4KLSAgICA8JUAgaW5jbHVkZSBmaWxlID0gIi9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgICA8JQotICAgIH0KLSAgICAlPgotICAgIDx0YWJsZT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiPgotCi0gICAgICAgIDwlICAgICAgICAgICAKLQkJLy9oZXJlIHdlIGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55IGlucHV0IHBhcmFtZXRlcnMgZm9yIHRoaXMgb3BlcmF0aW9uCi0JCWJvb2xlYW4gaGFzSW5wdXQgPSB0cnVlOwotCQlzZWxlY3RlZE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKTsgIAotCQlJdGVyYXRvciBpdGVyID0gb3BlckVsZW1lbnQuZ2V0T3JkZXJlZEJvZHlQYXJ0cygpLml0ZXJhdG9yKCk7ICAgICAgICAKLQkJU3RyaW5nIG9wZXJhdGlvbk5hbWUgPSBvcGVyRWxlbWVudC5nZXROYW1lKCk7Ci0KLQkJd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKQotCQl7Ci0JCQlQYXJ0IHBhcnQgPSAoUGFydClpdGVyLm5leHQoKTsgCi0JCQlJWFNERnJhZ21lbnQgZnJhZyA9IG9wZXJFbGVtZW50LmdldEZyYWdtZW50KHBhcnQpOyAgCi0JCQlvcmcuZWNsaXBzZS54c2QuWFNEVHlwZURlZmluaXRpb24gZGVmID0gZnJhZy5nZXRYU0RUeXBlRGVmaW5pdGlvbigpOwotCQkJLy93ZSBjaGVjayB0aGUgdHlwZSBvZiB0aGUgb3BlcmF0aW9uJ3MgaW5wdXQgbWVzc2FnZQotCQkJaWYgKGRlZiA9PSBudWxsKQotCQkJewotCQkJCS8vdGhpcyBpcyB0aGUgcGF0dGVybiA8ZWxlbWVudCBuYW1lPSJmb28iPjwvZWxlbWVudD4KLQkJCQloYXNJbnB1dCA9IGZhbHNlOwotCQkJfQotCQkJZWxzZQotCQkJewotCQkJCW9yZy53M2MuZG9tLkVsZW1lbnQgZWxlbWVudCA9IGRlZi5nZXRFbGVtZW50KCk7CQkJCQotCQkJCWlmIChlbGVtZW50LmdldExvY2FsTmFtZSgpLmVxdWFscygiY29tcGxleFR5cGUiKSAmJiAhZWxlbWVudC5oYXNDaGlsZE5vZGVzKCkpCi0JCQkJewkvL3RoaXMgaXMgdGhlIHBhdHRlcm4gIDxlbGVtZW50IG5hbWU9ImZvbyI+PGNvbXBsZXhUeXBlLz48L2VsZW1lbnQ+Ci0JCQkJCS8vdGhlcmUgY291bGQgYmUgb3RoZXIgcGF0dGVybnMgd2l0aCBubyBpbnB1dCBidXQgdGhleSBhcmUgdW5jb21tb24KLQkJCQkJaGFzSW5wdXQgPSBmYWxzZTsKLQkJCQl9Ci0JCQl9IAotICAgICAgCX0KLQkJaWYgKGhhc0lucHV0IHx8ICFvcGVyRWxlbWVudC5nZXRTT0FQSGVhZGVycygpLmlzRW1wdHkoKSkKLQkJewotCQkJb3V0LnByaW50KHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0lOVk9LRV9XU0RMX09QRVJBVElPTl9ERVNDIikpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJb3V0LnByaW50KHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0lOVk9LRV9XU0RMX09QRVJBVElPTl9ERVNDX05PX0lOUFVUIiwgb3BlcmF0aW9uTmFtZSApKTsKLQkJfQotICAgICAgICAlPgotICAgICAgICAgCi0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkPgotICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0ia2V5bGluZWZpZWxkc2V0Ij4KLSAgICAgICAgICAgIDxsZWdlbmQgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgICAgIDxsYWJlbCBmb3I9IjwlPVdTRExBY3Rpb25JbnB1dHMuRU5EX1BPSU5UJT4iPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0VORF9QT0lOVFMiKSU+PC9sYWJlbD4KLSAgICAgICAgICAgIDwvbGVnZW5kPgotICAgICAgICAgICAgPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTEwIGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICA8c2VsZWN0IGlkPSI8JT1XU0RMQWN0aW9uSW5wdXRzLkVORF9QT0lOVCU+IiBuYW1lPSI8JT1XU0RMQWN0aW9uSW5wdXRzLkVORF9QT0lOVCU+IiBjbGFzcz0ic2VsZWN0bGlzdCI+Ci0gICAgICAgICAgICAgICAgICAgIDwlCi0gICAgICAgICAgICAgICAgICAgIFdTRExCaW5kaW5nRWxlbWVudCBiaW5kaW5nRWxlbWVudCA9IChXU0RMQmluZGluZ0VsZW1lbnQpb3BlckVsZW1lbnQuZ2V0UGFyZW50RWxlbWVudCgpOwotICAgICAgICAgICAgICAgICAgICBTdHJpbmdbXSBlbmRQb2ludHMgPSBiaW5kaW5nRWxlbWVudC5nZXRFbmRQb2ludHMoKTsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGN1cnJFbmRQb2ludCA9IGludm9rZVdTRExPcGVyYXRpb25Ub29sLmdldEVuZFBvaW50KCk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZW5kUG9pbnRzLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iPCU9ZW5kUG9pbnRzW2ldJT4iIDwlaWYgKGVuZFBvaW50c1tpXS5lcXVhbHMoY3VyckVuZFBvaW50KSkgeyU+c2VsZWN0ZWQ8JX0lPj48JT1lbmRQb2ludHNbaV0lPgotICAgICAgICAgICAgICAgICAgICA8JQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICAgICAgICA8L3NlbGVjdD4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICA8L2ZpZWxkc2V0PgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICAgIDwlCi0gICAgaWYgKGZyYWdtZW50Vmlld0lELmVxdWFscyhGcmFnbWVudENvbnN0YW50cy5GUkFHTUVOVF9WSUVXX1NXSVRDSF9GT1JNX1RPX1NPVVJDRSkpCi0gICAgewotICAgICU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvZm9ybXMvRnJhZ21lbnRzU29hcFZpZXcuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgIDwlCi0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9mb3Jtcy9GcmFnbWVudHNGb3JtVmlldy5qc3AiIGZsdXNoPSJ0cnVlIj4KLQk8anNwOnBhcmFtIG5hbWU9Imhhc0lucHV0IiB2YWx1ZT0iPCU9aGFzSW5wdXQlPiIvPgotPC9qc3A6aW5jbHVkZT4KLSAgICA8JQotICAgIH0KLSAgICAlPgotICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvc2ltcGxlQ29tbW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgPC9mb3JtPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvT3BlbldTRExGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9PcGVuV1NETEZvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNWFlNTJlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9PcGVuV1NETEZvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA0MjcgICAxMjc0NDMgamVzcGVyQHNlbHNrYWJldC5vcmcgLSBKZXNwZXIgUyBNb2xsZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkZvcm1Ub29sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuV1NETFBlcnNwZWN0aXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuSFRNTFV0aWxzIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICBGb3JtVG9vbCBmb3JtVG9vbCA9IChGb3JtVG9vbCl3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpOwotJT4KLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1RJVExFX09QRU5fV1NETCIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9zY3JpcHRzL3dzZGxwYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvZm9ybXN1Ym1pdC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvZm9ybXV0aWxzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy93c2RsYnJvd3Nlci5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiIgb25VbmxvYWQ9ImNsb3NlV1NETEJyb3dzZXIoKSI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLSAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvYWN0aW9ucy9PcGVuV1NETEFjdGlvbkpTUC5qc3AiKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgb25TdWJtaXQ9InJldHVybiBoYW5kbGVTdWJtaXQodGhpcykiPgotICAgIDwlCi0gICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gIndzZGwvaW1hZ2VzL29wZW5fd3NkbF9oaWdobGlnaHRlZC5naWYiOwotICAgIFN0cmluZyB0aXRsZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfT1BFTl9XU0RMIik7Ci0gICAgJT4KLSAgICA8JUAgaW5jbHVkZSBmaWxlID0gIi9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgICAgIDx0YWJsZT4KLSAgICAgICAgPHRyPgotICAgICAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICAgIDwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX09QRU5fV1NETF9ERVNDIiklPgotICAgICAgICAgIDwvdGQ+Ci0gICAgICAgIDwvdHI+Ci0gICAgICA8L3RhYmxlPiAgICAgICAgCi0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgbm93cmFwPgotICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJpbnB1dF93c2RsX3VybCI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1dTRExfVVJMIiklPjwvbGFiZWw+Ci0gICAgICAgICAgICAgIDwlCi0gICAgICAgICAgICAgIGlmICghZm9ybVRvb2wuaXNJbnB1dFZhbGlkKEFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XU0RMX1VSTCkpIHsKLSAgICAgICAgICAgICAgJT4KLSAgICAgICAgICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotICAgICAgICAgICAgICA8JQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIFN0cmluZyB3c2RsVXJsID0gKFN0cmluZylmb3JtVG9vbC5nZXRQcm9wZXJ0eShBY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV1NETF9VUkwpOwotICAgICAgICAgICAgICBpZiAod3NkbFVybCA9PSBudWxsKQotICAgICAgICAgICAgICAgIHdzZGxVcmwgPSAiIjsKLSAgICAgICAgICAgICAgJT4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8dGQgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBub3dyYXA+Ci0gICAgICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6b3BlbldTRExCcm93c2VyKCdjb250ZW50Ym9yZGVyJyw8JT1BY3Rpb25JbnB1dHMuV1NETF9UWVBFX1NFUlZJQ0UlPikiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0JST1dTRSIpJT48L2E+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPHRkIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgPC90cj4KLSAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgY29sc3Bhbj0zPgotICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImlucHV0X3dzZGxfdXJsIiBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV1NETF9VUkwlPiIgdmFsdWU9IjwlPUhUTUxVdGlscy5jaGFyYWN0ZXJzVG9IVE1MRW50aXRpZXNTdHJpY3Qod3NkbFVybCklPiIgc2l6ZT0iNTAiIGNsYXNzPSJ0ZXh0ZW50ZXIiPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9zaW1wbGVDb21tb25fdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgIDwvZm9ybT4KLTwvZGl2PgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGNsb3NlV1NETEJyb3dzZXIoKTsKLTwvc2NyaXB0PiAgCi08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvUHJvY2Vzc1dTRExGcmFtZXNldHNGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9Qcm9jZXNzV1NETEZyYW1lc2V0c0Zvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTUyZjRkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9Qcm9jZXNzV1NETEZyYW1lc2V0c0Zvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUFjdGlvbiIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImZvcm1GcmFtZU5hbWUiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoZm9ybUFjdGlvbi50b1N0cmluZygpKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgc3R5bGU9Im1hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjAiPgotICA8aW5wdXQgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLkZSQU1FX05BTUUlPiIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iPCU9Zm9ybUZyYW1lTmFtZSU+Ij4KLSAgPGlucHV0IG5hbWU9IjwlPVdTRExBY3Rpb25JbnB1dHMuRlJBTUVTRVRfQ09MU19QRVJTUEVDVElWRV9DT05URU5UJT4iIHR5cGU9ImhpZGRlbiIgdmFsdWU9IjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKSU+Ij4KLSAgPGlucHV0IG5hbWU9IjwlPVdTRExBY3Rpb25JbnB1dHMuRlJBTUVTRVRfUk9XU19BQ1RJT05TX0NPTlRBSU5FUiU+IiB0eXBlPSJoaWRkZW4iIHZhbHVlPSI8JT13c2RsUGVyc3BlY3RpdmUuZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpJT4iPgotPC9mb3JtPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL1JlYWRPbmx5RnJhZ21lbnRzRm9ybVZpZXcuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL1JlYWRPbmx5RnJhZ21lbnRzRm9ybVZpZXcuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjVhNTVlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9SZWFkT25seUZyYWdtZW50c0Zvcm1WaWV3LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDIyOSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDMwNSAgIDExNzAzNCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHNob3VsZCBzdXBwb3J0IFNPQVAgSGVhZGVycwotICogMjAwNzA0MTMgICAxNzY0OTMgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdTRTogTWFrZSBtZXNzYWdlL3RyYW5zcG9ydCBzdGFjayBwbHVnZ2FibGUKLSAqIDIwMDcwNTA3ICAgMTg1NjAwIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0Ugc3RhdHVzIHBhbmUncyAiaGVhZGVyIiB0d2lzdGllIHNob3VsZCBub3QgYXBwZWFyIGZvciByZXNwb25zZXMgd2l0aG91dCBoZWFkZXJzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwueHNkLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwudXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Ob2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnRyYW5zcG9ydC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnczYy5kb20uKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgud3NkbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC54bWwucGFyc2Vycy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImZyYWdJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5vZGVJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci13c2RsUGVyc3BlY3RpdmUuc2V0U3RhdHVzQ29udGVudFR5cGUoV1NETFBlcnNwZWN0aXZlLlNUQVRVU19DT05URU5UX1JFU1VMVF9GT1JNKTsKLU5vZGUgb3Blck5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0T3BlcmF0aW9uTm9kZSgpOwotbm9kZUlELmRlbGV0ZSgwLCBub2RlSUQubGVuZ3RoKCkpOwotbm9kZUlELmFwcGVuZChvcGVyTm9kZS5nZXROb2RlSWQoKSk7Ci1XU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClvcGVyTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotT3BlcmF0aW9uIG9wZXIgPSBvcGVyRWxlbWVudC5nZXRPcGVyYXRpb24oKTsKLWlmIChvcGVyLmdldE91dHB1dCgpID09IG51bGwpCi17Ci0lPgotICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotICAgIDx0cj4KLSAgICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTk9USElOR19UT19ESVNQTEFZX0lOX0ZPUk1fVklFVyIpJT4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLTwlCi19Ci1lbHNlCi17Ci0gIElTT0FQTWVzc2FnZSBzb2FwTWVzc2FnZSA9IChJU09BUE1lc3NhZ2UpIG9wZXJFbGVtZW50LmdldFByb3BlcnR5QXNPYmplY3QoV1NETE1vZGVsQ29uc3RhbnRzLlBST1BfU09BUF9SRVNQT05TRSk7Ci0gIEVsZW1lbnRbXSBoZWFkZXJDb250ZW50ID0gc29hcE1lc3NhZ2UuZ2V0SGVhZGVyQ29udGVudCgpOzsKLSAgRWxlbWVudFtdIGJvZHlDb250ZW50ICAgPSBzb2FwTWVzc2FnZS5nZXRCb2R5Q29udGVudCgpOwotICAKLSAgYm9vbGVhbiBjYWNoZWQgPSAoKEJvb2xlYW4pb3BlckVsZW1lbnQuZ2V0UHJvcGVydHlBc09iamVjdChXU0RMQWN0aW9uSW5wdXRzLlNPQVBfUkVTUE9OU0VfQ0FDSEVEKSkuYm9vbGVhblZhbHVlKCk7Ci0KLSAgaWYgKHNvYXBNZXNzYWdlLmdldEJvZHkoZmFsc2UpID09IG51bGwpIC8vIGJvZHkgaXMgbWFuZGF0b3J5Ci0gIHsKLSAgJT4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfU09BUF9SRVNQT05TRV9GQUlMRURfVkFMSURBVElPTl9JTl9GT1JNX1ZJRVciKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gIDwlCi0gIH0KLSAgZWxzZQotICB7Ci0JaWYgKGhlYWRlckNvbnRlbnQgIT0gbnVsbCAmJiBoZWFkZXJDb250ZW50Lmxlbmd0aCA+IDApIHsJCQotCi0JCVN0cmluZyBoZWFkZXJEaXZJZCA9ICJIZWFkZXIiOwotCQlTdHJpbmcgaGVhZGVySW1nSWQgPSAieEhlYWRlciI7CQkKLQkgICAgJT4KLQkgICAgPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLQkJICA8dHI+Ci0JCSAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPjxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPWhlYWRlckRpdklkJT4nLCc8JT1oZWFkZXJJbWdJZCU+JykiPjxpbWcgbmFtZT0iPCU9aGVhZGVySW1nSWQlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdG9wZW5lZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9PUEVORUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT48L3RkPgotCQkgICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj48c3Ryb25nPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0hFQURFUiIpJT48L3N0cm9uZz48L3RkPgotCQkgIDwvdHI+Ci0JCTwvdGFibGU+Ci0JCQotCQk8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPgotCQkgIDx0cj4KLQkJICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PTEwPjxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBoZWlnaHQ9MiB3aWR0aD0iMTAwJSI+PC90ZD4KLQkJICA8L3RyPgotCQk8L3RhYmxlPgotCQkKLQkJPGRpdiBpZD0iPCU9aGVhZGVyRGl2SWQlPiIgY2xhc3M9ImZyYWdhcmVhIj4KLQkJPCUKLQkJYm9vbGVhbiBoYXNTT0FQSGVhZGVycyA9IGZhbHNlOwkJCi0JCUl0ZXJhdG9yIGl0ID0gb3BlckVsZW1lbnQuZ2V0U09BUEhlYWRlcnMoZmFsc2UpLml0ZXJhdG9yKCk7Ci0JCWludCBzdGFydCA9IDA7Ci0JCXdoaWxlIChpdC5oYXNOZXh0KCkgJiYgc3RhcnQgPCBoZWFkZXJDb250ZW50Lmxlbmd0aCkgewotCQkJU09BUEhlYWRlciBzb2FwSGVhZGVyID0gKFNPQVBIZWFkZXIpIGl0Lm5leHQoKTsJCQkJCQkJCQkKLQkJCUlYU0RGcmFnbWVudCBmcmFnbWVudCA9IG9wZXJFbGVtZW50LmdldEhlYWRlckZyYWdtZW50KHNvYXBIZWFkZXIsIGZhbHNlKTsKLQkJCQotCQkJaWYgKCFjYWNoZWQpIHsJCQkJCi0JCQkJaW50IHBvcyA9IFNPQVBNZXNzYWdlVXRpbHMuZmluZEZpcnN0TWF0Y2hpbmdFbGVtZW50KAotCQkJCQlzb2FwSGVhZGVyLmdldEVQYXJ0KCksCi0JCQkJCWhlYWRlckNvbnRlbnQsCi0JCQkJCXNvYXBNZXNzYWdlLmdldE5hbWVzcGFjZVRhYmxlKCksCi0JCQkJCWZyYWdtZW50LmdldE5hbWUoKSwKLQkJCQkJc3RhcnQpOwotCQkJCQotCQkJCWlmIChwb3MgPT0gLTEpCi0JCQkJCWNvbnRpbnVlOwotCQkJCQotCQkJCUVsZW1lbnQgZWxlbWVudCA9IGhlYWRlckNvbnRlbnRbcG9zXTsKLQkJCQlzdGFydCA9IHBvcyArIDE7Ci0JCQkJCi0JCQkJaWYgKCFmcmFnbWVudC5zZXRQYXJhbWV0ZXJWYWx1ZXNGcm9tSW5zdGFuY2VEb2N1bWVudHMobmV3IEVsZW1lbnRbXSB7IGVsZW1lbnQgfSkpCi0JCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJZWxzZSBpZiAoIWZyYWdtZW50LnZhbGlkYXRlQWxsUGFyYW1ldGVyVmFsdWVzKCkpCi0JCQkJY29udGludWU7Ci0JCQkKLQkJCWhhc1NPQVBIZWFkZXJzID0gdHJ1ZTsJCQkJCi0JCQlmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0JCQlmcmFnSUQuYXBwZW5kKGZyYWdtZW50LmdldElEKCkpOwotCQkJJT4KLQkJCTxqc3A6aW5jbHVkZSBwYWdlPSI8JT1mcmFnbWVudC5nZXRSZWFkRnJhZ21lbnQoKSU+IiBmbHVzaD0idHJ1ZSIvPgotCQkJPCUgIAotCQl9CQkKLQkJaWYgKCFoYXNTT0FQSGVhZGVycykgewotCQkJJT4KLQkJCTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0JCSAgICAgIDx0cj4KLQkJICAgICAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgY2xhc3M9ImxhYmVscyI+Ci0JCSAgICAgICAgICA8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9DQU5OT1RfRElTUExBWV9IRUFERVJfSU5fRk9STV9WSUVXIiklPgotCQkgICAgICAgIDwvdGQ+Ci0JCSAgICAgIDwvdHI+Ci0JCSAgICA8L3RhYmxlPgotCQkJPCUKLQkJfQotCQklPgotCQk8L2Rpdj4KLQkJPCUgICAKLQl9Ci0JCQotCVN0cmluZyBib2R5RGl2SWQgPSAiQm9keSI7Ci0JU3RyaW5nIGJvZHlJbWdJZCA9ICJ4Qm9keSI7CSAgCQkKLQklPgkJCQotCTx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0JICA8dHI+Ci0JICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+PGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9Ym9keURpdklkJT4nLCc8JT1ib2R5SW1nSWQlPicpIj48aW1nIG5hbWU9IjwlPWJvZHlJbWdJZCU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0b3BlbmVkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX09QRU5FRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPjwvdGQ+Ci0JICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+PHN0cm9uZz48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9CT0RZIiklPjwvc3Ryb25nPjwvdGQ+Ci0JICA8L3RyPgotCTwvdGFibGU+IAotCQotCTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0JICA8dHI+Ci0JICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PTEwPjxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBoZWlnaHQ9MiB3aWR0aD0iMTAwJSI+PC90ZD4KLQkgIDwvdHI+Ci0JPC90YWJsZT4KLQkKLQk8ZGl2IGlkPSI8JT1ib2R5RGl2SWQlPiIgY2xhc3M9ImZyYWdhcmVhIj4KLQk8JQkKLQlib29sZWFuIGhhc1NPQVBCb2R5ID0gZmFsc2U7Ci0JaWYgKGJvZHlDb250ZW50ICE9IG51bGwgJiYgYm9keUNvbnRlbnQubGVuZ3RoID4gMCkgewkJCQkKLQkJCi0JICAgIE1hcCBwYXJ0c01hcCA9IG9wZXIuZ2V0T3V0cHV0KCkuZ2V0TWVzc2FnZSgpLmdldFBhcnRzKCk7Ci0JICAgIEl0ZXJhdG9yIGl0ID0gcGFydHNNYXAudmFsdWVzKCkuaXRlcmF0b3IoKTsKLQkgICAgSGFzaHRhYmxlIHVyaVJlZmVyZW5jZXMgPSBudWxsOwotCSAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotCSAgICB7Ci0JICAgICAgSVhTREZyYWdtZW50IGZyYWdtZW50ID0gb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnQoKFBhcnQpaXQubmV4dCgpLCBmYWxzZSk7Ci0JICAgICAgaWYgKCFjYWNoZWQpCi0JICAgICAgewotCSAgICAgICAgaWYgKCFvcGVyRWxlbWVudC5pc1VzZUxpdGVyYWwoKSAmJiAoZnJhZ21lbnQgaW5zdGFuY2VvZiBJU09BUEVuY29kaW5nV3JhcHBlckZyYWdtZW50KSkKLQkgICAgICAgIHsKLQkgICAgICAgICAgaWYgKHVyaVJlZmVyZW5jZXMgPT0gbnVsbCkKLQkgICAgICAgICAgICB1cmlSZWZlcmVuY2VzID0gU09BUEVuY29kaW5nV3JhcHBlckZyYWdtZW50LnBhcnNlVVJJUmVmZXJlbmNlcyhzb2FwTWVzc2FnZS5nZXRFbnZlbG9wZSh0cnVlKSwgdHJ1ZSk7Ci0JICAgICAgICAgICgoSVNPQVBFbmNvZGluZ1dyYXBwZXJGcmFnbWVudClmcmFnbWVudCkuc2V0VVJJUmVmZXJlbmNlcyh1cmlSZWZlcmVuY2VzKTsKLQkgICAgICAgIH0KLQkgICAgICAgIGlmICghZnJhZ21lbnQuc2V0UGFyYW1ldGVyVmFsdWVzRnJvbUluc3RhbmNlRG9jdW1lbnRzKGJvZHlDb250ZW50KSkKLQkgICAgICAgIAljb250aW51ZTsKLQkgICAgICB9Ci0JICAgICAgZWxzZSBpZiAoIWZyYWdtZW50LnZhbGlkYXRlQWxsUGFyYW1ldGVyVmFsdWVzKCkpCi0JCQljb250aW51ZTsKLQkJCQotCQkgIGhhc1NPQVBCb2R5ID0gdHJ1ZTsJCQkJCi0JICAgICAgZnJhZ0lELmRlbGV0ZSgwLCBmcmFnSUQubGVuZ3RoKCkpOwotCSAgICAgIGZyYWdJRC5hcHBlbmQoZnJhZ21lbnQuZ2V0SUQoKSk7Ci0JICAgICAgJT4KLQkgICAgICA8anNwOmluY2x1ZGUgcGFnZT0iPCU9ZnJhZ21lbnQuZ2V0UmVhZEZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLQkgICAgICA8JQotCSAgICB9Ci0JICAgIG9wZXJFbGVtZW50LnNldFByb3BlcnR5QXNPYmplY3QoV1NETEFjdGlvbklucHV0cy5TT0FQX1JFU1BPTlNFX0NBQ0hFRCwgbmV3IEJvb2xlYW4odHJ1ZSkpOwotCX0KLQkKLQlpZiAoc29hcE1lc3NhZ2UuZ2V0RmF1bHQoKSA9PSBudWxsICYmIChib2R5Q29udGVudCA9PSBudWxsIHx8IGJvZHlDb250ZW50Lmxlbmd0aCA9PSAwKSkgewotCQklPgotCQk8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotCSAgICAgIDx0cj4KLQkgICAgICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBjbGFzcz0ibGFiZWxzIj4KLQkgICAgICAgICAgPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQk9EWV9JU19FTVBUWSIpJT4KLQkgICAgICAgIDwvdGQ+Ci0JICAgICAgPC90cj4KLQkgICAgPC90YWJsZT4KLQkJPCUKLSAgICB9Ci0JZWxzZSBpZiAoIWhhc1NPQVBCb2R5KSB7Ci0JCSU+Ci0JCTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0JICAgICAgPHRyPgotCSAgICAgICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIGNsYXNzPSJsYWJlbHMiPgotCSAgICAgICAgICA8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9DQU5OT1RfRElTUExBWV9CT0RZX0lOX0ZPUk1fVklFVyIpJT4KLQkgICAgICAgIDwvdGQ+Ci0JICAgICAgPC90cj4KLQkgICAgPC90YWJsZT4KLQkJPCUKLQl9IAotICAgICU+Ci0gICAgPC9kaXY+Ci0gICAgPCUKLSAgfQotfQotJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9SZWFkT25seUZyYWdtZW50c1NvYXBWaWV3LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9SZWFkT25seUZyYWdtZW50c1NvYXBWaWV3LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDkzMWViZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvUmVhZE9ubHlGcmFnbWVudHNTb2FwVmlldy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA1MDkgICAxMDMwNzIgbWFodXRjaEBjYS5pYm0uY29tIC0gTWFyayBIdXRjaGluc29uCi0gKiAyMDA2MDUxNSAgIDE0MDYwNyBtYWh1dGNoQGNhLmlibS5jb20gLSBNYXJrIEh1dGNoaW5zb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLk5vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuV1NETE9wZXJhdGlvbkVsZW1lbnQiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotCi08JQotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci13c2RsUGVyc3BlY3RpdmUuc2V0U3RhdHVzQ29udGVudFR5cGUoV1NETFBlcnNwZWN0aXZlLlNUQVRVU19DT05URU5UX1JFU1VMVF9TT1VSQ0UpOwotTm9kZSBvcGVyTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXRPcGVyYXRpb25Ob2RlKCk7Ci1XU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClvcGVyTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotU3RyaW5nIHNvYXBSZXF1ZXN0VGFibGVDb250YWluZXJJZCA9ICJTT0FQUmVxdWVzdCI7Ci1TdHJpbmdCdWZmZXIgc29hcFJlcXVlc3RUd2lzdEltYWdlTmFtZSA9IG5ldyBTdHJpbmdCdWZmZXIoIngiKTsKLXNvYXBSZXF1ZXN0VHdpc3RJbWFnZU5hbWUuYXBwZW5kKHNvYXBSZXF1ZXN0VGFibGVDb250YWluZXJJZCk7Ci1TdHJpbmcgc29hcFJlc3BvbnNlVGFibGVDb250YWluZXJJZCA9ICJTT0FQUmVzcG9uc2UiOwotU3RyaW5nQnVmZmVyIHNvYXBSZXNwb25zZVR3aXN0SW1hZ2VOYW1lID0gbmV3IFN0cmluZ0J1ZmZlcigieCIpOwotc29hcFJlc3BvbnNlVHdpc3RJbWFnZU5hbWUuYXBwZW5kKHNvYXBSZXNwb25zZVRhYmxlQ29udGFpbmVySWQpOwotJT4KLQotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHZhciBzZWN0aW9uSWRzID0gWyI8JT1zb2FwUmVxdWVzdFRhYmxlQ29udGFpbmVySWQlPiIsIjwlPXNvYXBSZXNwb25zZVRhYmxlQ29udGFpbmVySWQlPiJdOwotICBmdW5jdGlvbiB0b2dnbGVTT0FQRW52ZWxvcGUoc29hcEVudmVsb3BlVHlwZSx0d2lzdEltYWdlTmFtZSkKLSAgewotPCUKLSAgICAvLyBJZiBib3RoIGVudmVsb3BlcyBhcmUgZXhwYW5kZWQsIGVhY2ggc2hvdWxkIGhhdmUgNTAlIGhlaWdodC4gT3RoZXJ3aXNlLCB0aGUgcmVtYWluaW5nIGRpc3BsYXllZCBlbnZlbG9wZSBzaG91bGQgYmUgcmVzZXQgdG8gMTAwJSBoZWlnaHQuCi0lPgotICAgIHZhciBzb2FwU2VjdGlvbklkID0gc2VjdGlvbklkc1tzb2FwRW52ZWxvcGVUeXBlXTsKLSAgICB2YXIgc29hcFNlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzb2FwU2VjdGlvbklkKTsKLSAgICB2YXIgc29hcFNlY3Rpb25UYWJsZSA9IGdldFRhYmxlKHNvYXBTZWN0aW9uSWQpOwotICAgIHZhciBvdGhlclNvYXBTZWN0aW9uSWQgPSBzZWN0aW9uSWRzWzEtc29hcEVudmVsb3BlVHlwZV07Ci0gICAgdmFyIG90aGVyU29hcFNlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChvdGhlclNvYXBTZWN0aW9uSWQpOwotICAgIHZhciBvdGhlclNvYXBTZWN0aW9uVGFibGUgPSBnZXRUYWJsZShvdGhlclNvYXBTZWN0aW9uSWQpOwotICAgIGlmIChzb2FwU2VjdGlvbi5zdHlsZS5kaXNwbGF5ID09ICJub25lIikKLSAgICB7Ci0gICAgICBpZiAob3RoZXJTb2FwU2VjdGlvbi5zdHlsZS5kaXNwbGF5ID09ICIiKQotICAgICAgewotICAgICAgICBzb2FwU2VjdGlvblRhYmxlLmhlaWdodCA9ICI1MCUiOwotICAgICAgICBvdGhlclNvYXBTZWN0aW9uVGFibGUuaGVpZ2h0ID0gIjUwJSI7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIHNvYXBTZWN0aW9uVGFibGUuaGVpZ2h0ID0gIjEwMCUiOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgaWYgKG90aGVyU29hcFNlY3Rpb24uc3R5bGUuZGlzcGxheSA9PSAiIikKLSAgICAgICAgb3RoZXJTb2FwU2VjdGlvblRhYmxlLmhlaWdodCA9ICIxMDAlIjsKLSAgICB9Ci0gICAgdHdpc3Qoc29hcFNlY3Rpb25JZCx0d2lzdEltYWdlTmFtZSk7Ci0gIH0KLTwvc2NyaXB0PgotCi08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT48YSBocmVmPSJqYXZhc2NyaXB0OnRvZ2dsZVNPQVBFbnZlbG9wZSg8JT1XU0RMQWN0aW9uSW5wdXRzLlNPQVBfRU5WRUxPUEVfVFlQRV9SRVFVRVNUJT4sJzwlPXNvYXBSZXF1ZXN0VHdpc3RJbWFnZU5hbWUudG9TdHJpbmcoKSU+JykiPjxpbWcgbmFtZT0iPCU9c29hcFJlcXVlc3RUd2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RjbG9zZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfQ0xPU0VEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+PC90ZD4KLSAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgPHN0cm9uZz48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9TT0FQX1JFUVVFU1RfRU5WRUxPUEUiKSU+PC9zdHJvbmc+Ci0gICAgPC90ZD4KLSAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPGRpdiBpZD0iPCU9c29hcFJlcXVlc3RUYWJsZUNvbnRhaW5lcklkJT4iIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgotICA8dGFibGUgd2lkdGg9Ijk1JSIgaGVpZ2h0PSI1MCUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHBhZGRpbmc9MD4KLSAgICA8dHI+Ci0gICAgICA8dGQ+Ci0gICAgICAgIDxpZnJhbWUgbmFtZT0icmVxdWVzdEVudmVsb3BlRnJhbWUiIGZyYW1lYm9yZGVyPTAgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQod3NkbFBlcnNwZWN0aXZlLmdldFNPQVBFbnZlbG9wZVhNTExpbmsoV1NETEFjdGlvbklucHV0cy5TT0FQX0VOVkVMT1BFX1RZUEVfUkVRVUVTVCkpKSU+IiB3aWR0aD0iOTUlIiBoZWlnaHQ9IjEwMCUiPjwvaWZyYW1lPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPC9kaXY+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgdHdpc3QoIjwlPXNvYXBSZXF1ZXN0VGFibGVDb250YWluZXJJZCU+IiwiPCU9c29hcFJlcXVlc3RUd2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4iKTsKLTwvc2NyaXB0PgotCi08JQotaWYgKG9wZXJFbGVtZW50LmdldE9wZXJhdGlvbigpLmdldE91dHB1dCgpICE9IG51bGwpCi17Ci0lPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+PGEgaHJlZj0iamF2YXNjcmlwdDp0b2dnbGVTT0FQRW52ZWxvcGUoPCU9V1NETEFjdGlvbklucHV0cy5TT0FQX0VOVkVMT1BFX1RZUEVfUkVTUE9OU0UlPiwnPCU9c29hcFJlc3BvbnNlVHdpc3RJbWFnZU5hbWUudG9TdHJpbmcoKSU+JykiPjxpbWcgbmFtZT0iPCU9c29hcFJlc3BvbnNlVHdpc3RJbWFnZU5hbWUudG9TdHJpbmcoKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0Y2xvc2VkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX0NMT1NFRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPjwvdGQ+Ci0gICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgIDxzdHJvbmc+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfU09BUF9SRVNQT05TRV9FTlZFTE9QRSIpJT48L3N0cm9uZz4KLSAgICA8L3RkPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08ZGl2IGlkPSI8JT1zb2FwUmVzcG9uc2VUYWJsZUNvbnRhaW5lcklkJT4iIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgotICA8dGFibGUgd2lkdGg9Ijk1JSIgaGVpZ2h0PSI1MCUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHBhZGRpbmc9MD4KLSAgICA8dHI+Ci0gICAgICA8dGQ+Ci0gICAgICAJPCEtLSB0aGUgb25sb2FkIGNhbGwgaXMgdG8gZml4IGJ1ZyAxNDA2MDcgaW4gYnVnemlsbGEgLS0+Ci0gICAgICAgIDxpZnJhbWUgb25sb2FkPSJqYXZhc2NyaXB0OnJlcXVlc3RFbnZlbG9wZUZyYW1lLmRvY3VtZW50LmxvY2F0aW9uLnJlbG9hZCgpIiBmcmFtZWJvcmRlcj0wIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KHdzZGxQZXJzcGVjdGl2ZS5nZXRTT0FQRW52ZWxvcGVYTUxMaW5rKFdTRExBY3Rpb25JbnB1dHMuU09BUF9FTlZFTE9QRV9UWVBFX1JFU1BPTlNFKSkpJT4iIHdpZHRoPSI5NSUiIGhlaWdodD0iMTAwJSI+PC9pZnJhbWU+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICB0d2lzdCgiPCU9c29hcFJlc3BvbnNlVGFibGVDb250YWluZXJJZCU+IiwiPCU9c29hcFJlc3BvbnNlVHdpc3RJbWFnZU5hbWUudG9TdHJpbmcoKSU+Iik7Ci08L3NjcmlwdD4KLTwlCi19Ci0lPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL1dTRExCaW5kaW5nRGV0YWlsc0Zvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL1dTRExCaW5kaW5nRGV0YWlsc0Zvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NjQ3MTkxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9XU0RMQmluZGluZ0RldGFpbHNGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gIE5vZGUgYmluZGluZ05vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKTsKLSU+Ci08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9XU0RMX0JJTkRJTkdfREVUQUlMUyIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICB2YXIgcm93Q2hlY2tib3hOYW1lID0gInJvd0NoZWNrYm94TmFtZSI7Ci08L3NjcmlwdD4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy90YWJsZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL2Zvcm1zdWJtaXQuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL2Zvcm11dGlscy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLTxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL2FjdGlvbnMvVXBkYXRlV1NETEJpbmRpbmdBY3Rpb25KU1AuanNwIikpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG9uU3VibWl0PSJyZXR1cm4gaGFuZGxlU3VibWl0KHRoaXMpIj4KLTwlCi0gICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAid3NkbC9pbWFnZXMvb3Blbl93c2RsX2hpZ2hsaWdodGVkLmdpZiI7Ci0gICBTdHJpbmcgdGl0bGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1dTRExfQklORElOR19ERVRBSUxTIik7Ci0gICBXU0RMQmluZGluZ0VsZW1lbnQgd3NkbEJpbmRpbmdFbGVtZW50ID0gKFdTRExCaW5kaW5nRWxlbWVudCliaW5kaW5nTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgVmVjdG9yIG9wZXJhdGlvbk5vZGVzID0gYmluZGluZ05vZGUuZ2V0Q2hpbGROb2RlcygpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGUgPSAiL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLk5PREVJRCU+IiB2YWx1ZT0iPCU9YmluZGluZ05vZGUuZ2V0Tm9kZUlkKCklPiI+Ci08dGFibGU+Ci0gIDx0cj4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQklORElOR19ERVRBSUxTX0RFU0MiLHdzZGxQZXJzcGVjdGl2ZS5nZXRCaW5kaW5nVHlwZVN0cmluZyh3c2RsQmluZGluZ0VsZW1lbnQuZ2V0QmluZGluZ1R5cGUoKSkpJT48L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTwlCi0gICBTdHJpbmcgZG9jdW1lbnRhdGlvbiA9IHdzZGxCaW5kaW5nRWxlbWVudC5nZXRQcm9wZXJ0eUFzU3RyaW5nKFdTRExNb2RlbENvbnN0YW50cy5QUk9QX0RPQ1VNRU5UQVRJT04pOwotICAgaWYgKGRvY3VtZW50YXRpb24ubGVuZ3RoKCkgPiAwKQotICAgewotJT4KLTx0YWJsZT4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGNsYXNzPSJsYWJlbHMiPjwlPWRvY3VtZW50YXRpb24lPjwvdGQ+Ci0gIDwvdHI+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTEwPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPCUKLSAgIH0KLQotICAgc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLSAgIHNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJPcGVyYXRpb25zIik7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMob3BlcmF0aW9uTm9kZXMpOwotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9mb3Jtcy9vcGVyYXRpb25zX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gICBpZiAob3BlcmF0aW9uTm9kZXMuc2l6ZSgpID4gMCkKLSAgIHsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgdHdpc3QoIk9wZXJhdGlvbnMiLCJ4T3BlcmF0aW9ucyIpOwotPC9zY3JpcHQ+Ci08JQotICAgfQotCi0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoIkVuZHBvaW50cyIpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKHdzZGxCaW5kaW5nRWxlbWVudCk7Ci0lPgotPHRhYmxlPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD0yMD4mbmJzcDs8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9mb3Jtcy9lbmRwb2ludF90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICBpZiAod3NkbEJpbmRpbmdFbGVtZW50LmdldEVuZFBvaW50cygpLmxlbmd0aCA+IDApCi0gIHsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgdHdpc3RPcGVuKCJFbmRwb2ludHMiKTsKLTwvc2NyaXB0PgotPCUKLSAgfQotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvc2ltcGxlQ29tbW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvZm9ybT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL1dTRExEZXRhaWxzRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvV1NETERldGFpbHNGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVhZDA3NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvV1NETERldGFpbHNGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICBOb2RlIHdzZGxOb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gIFRvb2xNYW5hZ2VyIGN1cnJlbnRUb29sTWFuYWdlciA9IHdzZGxOb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpOwotICBXU0RMRGV0YWlsc1Rvb2wgd3NkbERldGFpbHNUb29sID0gKFdTRExEZXRhaWxzVG9vbCljdXJyZW50VG9vbE1hbmFnZXIuZ2V0U2VsZWN0ZWRUb29sKCk7Ci0lPgotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fVElUTEVfV1NETF9ERVRBSUxTIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL3RhYmxlcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGZ1bmN0aW9uIHN3aXRjaFdTRExEZXRhaWxzVmlldygpIHsKLSAgICBwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC9hY3Rpb25zL1N3aXRjaFdTRExEZXRhaWxzVmlld3NBY3Rpb25KU1AuanNwIikpJT4iOwotICB9Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotPCUKLSAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJ3c2RsL2ltYWdlcy9vcGVuX3dzZGxfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgIFN0cmluZyB0aXRsZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfV1NETF9ERVRBSUxTIik7Ci0lPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZD4KLSAgICAgIDxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQodGl0bGVJbWFnZVBhdGgpKSU+IiBhbHQ9IiI+Ci0gICAgICA8c3Ryb25nPjwlPXRpdGxlJT48L3N0cm9uZz4KLSAgICA8L3RkPgotICAgIDx0ZCB3aWR0aD0iKiI+Jm5ic3A7PC90ZD4KLSAgICA8dGQgYWxpZ249InJpZ2h0IiBjbGFzcz0ibGFiZWxzIj4KLTwlCi0gICBpZiAod3NkbERldGFpbHNUb29sLmdldFZpZXdJZCgpID09IFdTRExEZXRhaWxzVG9vbC5TT1VSQ0VfVklFV19JRCkKLSAgIHsgICAgIAotJT4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6c3dpdGNoV1NETERldGFpbHNWaWV3KCkiIHRpdGxlPSI8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1NXSVRDSF9UT19GT1JNX1ZJRVciKSU+Ij48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0ZPUk0iKSU+PC9hPgotPCUKLSAgIH0KLSAgIGVsc2UKLSAgIHsKLSU+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnN3aXRjaFdTRExEZXRhaWxzVmlldygpIiB0aXRsZT0iPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9TV0lUQ0hfVE9fU09VUkNFX1ZJRVciKSU+Ij48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX1NPVVJDRSIpJT48L2E+Ci08JQotICAgfQotJT4gICAKLSAgICA8L3RkPgotICA8L3RyPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD0yMCBjb2xzcGFuPTM+PGltZyBoZWlnaHQ9MiB3aWR0aD0iMTAwJSIgYWxpZ249InRvcCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+Ij48L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTwlCi0gIGlmICh3c2RsRGV0YWlsc1Rvb2wuZ2V0Vmlld0lkKCkgPT0gV1NETERldGFpbHNUb29sLkZPUk1fVklFV19JRCkKLSAgewotJT4KLSAgICA8anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvZm9ybXMvV1NETERldGFpbHNGb3JtVmlldy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICB9Ci0gIGVsc2UKLSAgewotJT4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgaGVpZ2h0PSIxMDAlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxwYWRkaW5nPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZD4KLSAgICAgICAgICA8aWZyYW1lIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCIvd3NkbC9mb3Jtcy9XU0RMRGV0YWlsc1NvdXJjZVZpZXcuanNwIikpJT4iIHdpZHRoPSI5NSUiIGhlaWdodD0iMTAwJSI+PC9pZnJhbWU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci08JQotICB9Ci0lPgotPGpzcDp1c2VCZWFuIGlkPSJjdXJyZW50VG9vbE1hbmFnZXJIYXNoIiBjbGFzcz0iamF2YS51dGlsLkhhc2h0YWJsZSIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgY3VycmVudFRvb2xNYW5hZ2VySGFzaC5wdXQoQWN0aW9uSW5wdXRzLkNVUlJFTlRfVE9PTF9NQU5BR0VSLGN1cnJlbnRUb29sTWFuYWdlcik7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvb3RoZXJBY3Rpb25zLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL1dTRExEZXRhaWxzRm9ybVZpZXcuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL1dTRExEZXRhaWxzRm9ybVZpZXcuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTI1YzUzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9XU0RMRGV0YWlsc0Zvcm1WaWV3LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ic2VjdGlvbkhlYWRlckluZm8iIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuU2VjdGlvbkhlYWRlckluZm8iIHNjb3BlPSJyZXF1ZXN0Ii8+Ci0KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSU+Ci08dGFibGU+Ci0gIDx0cj4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfV1NETF9ERVRBSUxTX0RFU0MiKSU+PC90ZD4KLSAgPC90cj4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjA+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08JQotTm9kZSB3c2RsTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpOwotV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQgPSAoV1NETEVsZW1lbnQpd3NkbE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLVN0cmluZyBkb2N1bWVudGF0aW9uID0gd3NkbEVsZW1lbnQuZ2V0UHJvcGVydHlBc1N0cmluZyhXU0RMTW9kZWxDb25zdGFudHMuUFJPUF9ET0NVTUVOVEFUSU9OKTsKLWlmIChkb2N1bWVudGF0aW9uICE9IG51bGwgJiYgZG9jdW1lbnRhdGlvbi5sZW5ndGgoKSA+IDApCi17Ci0lPgotPHRhYmxlPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgY2xhc3M9ImxhYmVscyI+PCU9ZG9jdW1lbnRhdGlvbiU+PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08JQotfQotJT4KLTx0YWJsZSB3aWR0aD0iOTUlIiBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgPHRyPgotICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9XU0RMX1VSTCIpJT48L3RoPgotICA8L3RyPgotICA8dHI+Ci0gICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj48JT13c2RsRWxlbWVudC5nZXRXc2RsVXJsKCklPjwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPHRhYmxlPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD0xMD4mbmJzcDs8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTwlICAgCi1zZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoIlNlcnZpY2VzIik7Ci1WZWN0b3Igc2VydmljZU5vZGVzID0gd3NkbE5vZGUuZ2V0Q2hpbGROb2RlcygpOwotc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKHNlcnZpY2VOb2Rlcyk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL2Zvcm1zL3NlcnZpY2VzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTx0YWJsZT4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MTA+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08JSAgIAotVmVjdG9yIGJpbmRpbmdOb2RlcyA9IG5ldyBWZWN0b3IoKTsKLWZvciAoaW50IGk9MDtpPHNlcnZpY2VOb2Rlcy5zaXplKCk7aSsrKQotewotICBOb2RlIHNlcnZpY2VOb2RlID0gKE5vZGUpc2VydmljZU5vZGVzLmVsZW1lbnRBdChpKTsKLSAgVmVjdG9yIHNlcnZpY2VCaW5kaW5nTm9kZXMgPSBzZXJ2aWNlTm9kZS5nZXRDaGlsZE5vZGVzKCk7Ci0gIGZvciAoaW50IGo9MDtqPHNlcnZpY2VCaW5kaW5nTm9kZXMuc2l6ZSgpO2orKykKLSAgewotICAgIE5vZGUgc2VydmljZUJpbmRpbmdOb2RlID0gKE5vZGUpc2VydmljZUJpbmRpbmdOb2Rlcy5lbGVtZW50QXQoaik7Ci0gICAgYmluZGluZ05vZGVzLmFkZEVsZW1lbnQoc2VydmljZUJpbmRpbmdOb2RlKTsKLSAgfQotfQotc2VjdGlvbkhlYWRlckluZm8uY2xlYXIoKTsKLXNlY3Rpb25IZWFkZXJJbmZvLnNldENvbnRhaW5lcklkKCJCaW5kaW5ncyIpOwotc2VjdGlvbkhlYWRlckluZm8uc2V0T3RoZXJQcm9wZXJ0aWVzKGJpbmRpbmdOb2Rlcyk7Ci0lPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL2Zvcm1zL2JpbmRpbmdzX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotPCUKLWlmIChzZXJ2aWNlTm9kZXMuc2l6ZSgpID4gMCkKLXsKLSU+Ci0gIHR3aXN0KCJTZXJ2aWNlcyIsInhTZXJ2aWNlcyIpOwotPCUKLX0KLWlmIChiaW5kaW5nTm9kZXMuc2l6ZSgpID4gMCkKLXsKLSU+Ci0gIHR3aXN0KCJCaW5kaW5ncyIsInhCaW5kaW5ncyIpOwotPCUKLX0KLSU+Ci08L3NjcmlwdD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9XU0RMRGV0YWlsc1NvdXJjZVZpZXcuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL1dTRExEZXRhaWxzU291cmNlVmlldy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3MGE0YjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL1dTRExEZXRhaWxzU291cmNlVmlldy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L3htbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwud3NkbDRqLldTRExGYWN0b3J5SW1wbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmlvLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgud3NkbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LndzZGwueG1sLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgud3NkbC5mYWN0b3J5LioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLU5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci1XU0RMRWxlbWVudCB3c2RsRWxlbWVudCA9IChXU0RMRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLURlZmluaXRpb24gZGVmaW5pdGlvbiA9IHdzZGxFbGVtZW50LmdldERlZmluaXRpb24oKTsKLVdTRExGYWN0b3J5IHdzZGxGYWN0b3J5ID0gbmV3IFdTRExGYWN0b3J5SW1wbCgpOwotV1NETFdyaXRlciB3c2RsV3JpdGVyID0gd3NkbEZhY3RvcnkubmV3V1NETFdyaXRlcigpOwotU3RyaW5nV3JpdGVyIHN0cmluZ1dyaXRlciA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLXRyeQotewotICB3c2RsV3JpdGVyLndyaXRlV1NETChkZWZpbml0aW9uLCBzdHJpbmdXcml0ZXIpOwotICAlPgotICA8JT1zdHJpbmdXcml0ZXIudG9TdHJpbmcoKSU+Ci0gIDwlCi19Ci1jYXRjaCAoV1NETEV4Y2VwdGlvbiB3c2RsZSkKLXsKLSAgJT4KLSAgPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci0gIDwlCi19Ci0lPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL1dTRExJbXBvcnRXU0RMVG9Xb3JrYmVuY2hGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9XU0RMSW1wb3J0V1NETFRvV29ya2JlbmNoRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhZDlkNWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL1dTRExJbXBvcnRXU0RMVG9Xb3JrYmVuY2hGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS5XU0RMUGVyc3BlY3RpdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC5XU0RMRWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmb3JtUHJvcGVydGllcyIgY2xhc3M9ImphdmEudXRpbC5IYXNodGFibGUiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgU3RyaW5nIHdzZGxVcmwgPSAoKFdTRExFbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpKS5nZXRXc2RsVXJsKCk7Ci0gICBmb3JtUHJvcGVydGllcy5wdXQoImZvcm1BY3Rpb25MaW5rIiwid3NkbC9hY3Rpb25zL1dTRExJbXBvcnRXU0RMVG9Xb3JrYmVuY2hBY3Rpb25KU1AuanNwIik7Ci0gICBmb3JtUHJvcGVydGllcy5wdXQoIndzZGxVUkwiLHdzZGxVcmwpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL0ltcG9ydFdTRExBbmRXU0lMVG9Xb3JrYmVuY2hGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9XU0RMTGF1bmNoV2ViU2VydmljZVdpemFyZEZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL1dTRExMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5M2Q4MGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL1dTRExMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUFjdGlvbkxpbmsiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCI+Ci08JQotZm9ybUFjdGlvbkxpbmsuYXBwZW5kKCJ3c2RsL2FjdGlvbnMvV1NETExhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb25KU1AuanNwIik7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvTGF1bmNoV2ViU2VydmljZVdpemFyZEZvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL1dTRExTZXJ2aWNlRGV0YWlsc0Zvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL1dTRExTZXJ2aWNlRGV0YWlsc0Zvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYWJiOTI3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9XU0RMU2VydmljZURldGFpbHNGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gIE5vZGUgc2VydmljZU5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKTsKLSU+Ci08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9XU0RMX1NFUlZJQ0VfREVUQUlMUyIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy90YWJsZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci08JQotICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gIndzZGwvaW1hZ2VzL29wZW5fd3NkbF9oaWdobGlnaHRlZC5naWYiOwotICAgU3RyaW5nIHRpdGxlID0gd3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9XU0RMX1NFUlZJQ0VfREVUQUlMUyIpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGUgPSAiL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotPHRhYmxlPgotICA8dHI+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1NFUlZJQ0VfREVUQUlMU19ERVNDIiklPjwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPCUKLSAgIFdTRExTZXJ2aWNlRWxlbWVudCB3c2RsU2VydmljZUVsZW1lbnQgPSAoV1NETFNlcnZpY2VFbGVtZW50KXNlcnZpY2VOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICBTdHJpbmcgZG9jdW1lbnRhdGlvbiA9IHdzZGxTZXJ2aWNlRWxlbWVudC5nZXRQcm9wZXJ0eUFzU3RyaW5nKFdTRExNb2RlbENvbnN0YW50cy5QUk9QX0RPQ1VNRU5UQVRJT04pOwotICAgaWYgKGRvY3VtZW50YXRpb24ubGVuZ3RoKCkgPiAwKQotICAgewotJT4KLTx0YWJsZT4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGNsYXNzPSJsYWJlbHMiPjwlPWRvY3VtZW50YXRpb24lPjwvdGQ+Ci0gIDwvdHI+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTEwPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPCUKLSAgIH0KLSAgIFZlY3RvciBiaW5kaW5nTm9kZXMgPSBzZXJ2aWNlTm9kZS5nZXRDaGlsZE5vZGVzKCk7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5jbGVhcigpOwotICAgc2VjdGlvbkhlYWRlckluZm8uc2V0Q29udGFpbmVySWQoIkJpbmRpbmdzIik7Ci0gICBzZWN0aW9uSGVhZGVySW5mby5zZXRPdGhlclByb3BlcnRpZXMoYmluZGluZ05vZGVzKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvZm9ybXMvYmluZGluZ3NfdGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9kaXY+Ci08JQotICAgaWYgKGJpbmRpbmdOb2Rlcy5zaXplKCkgPiAwKQotICAgewotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICB0d2lzdCgiQmluZGluZ3MiLCJ4QmluZGluZ3MiKTsKLTwvc2NyaXB0PgotPCUKLSAgIH0KLSU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvYmluZGluZ3NfdGFibGUuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL2JpbmRpbmdzX3RhYmxlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTEwY2EwNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvYmluZGluZ3NfdGFibGUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgud3NkbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgU3RyaW5nIHRhYmxlQ29udGFpbmVySWQgPSBzZWN0aW9uSGVhZGVySW5mby5nZXRDb250YWluZXJJZCgpOwotICAgU3RyaW5nQnVmZmVyIHR3aXN0SW1hZ2VOYW1lID0gbmV3IFN0cmluZ0J1ZmZlcigieCIpOwotICAgdHdpc3RJbWFnZU5hbWUuYXBwZW5kKHRhYmxlQ29udGFpbmVySWQpOwotJT4KLTx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPjxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPXRhYmxlQ29udGFpbmVySWQlPicsJzwlPXR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPicpIj48aW1nIG5hbWU9IjwlPXR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdGNsb3NlZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9DTE9TRUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT48L3RkPgotICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+PHN0cm9uZz48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9CSU5ESU5HUyIpJT48L3N0cm9uZz48L3RkPgotICA8L3RyPgotPC90YWJsZT4KLQotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PTEwPjxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBoZWlnaHQ9MiB3aWR0aD0iMTAwJSI+PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTxkaXYgaWQ9IjwlPXRhYmxlQ29udGFpbmVySWQlPiIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICA8dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgPHRyPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciIgd2lkdGg9IjIwJSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTkFNRSIpJT48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciIgd2lkdGg9IjIwJSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQklORElOR19UWVBFIiklPjwvdGg+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9ET0NVTUVOVEFUSU9OIiklPjwvdGg+Ci0gICAgPC90cj4KLTwlCi0gICBWZWN0b3IgYmluZGluZ05vZGVzID0gKFZlY3RvcilzZWN0aW9uSGVhZGVySW5mby5nZXRPdGhlclByb3BlcnRpZXMoKTsKLSAgIGZvciAoaW50IGk9MDtpPGJpbmRpbmdOb2Rlcy5zaXplKCk7aSsrKQotICAgewotICAgICBOb2RlIGJpbmRpbmdOb2RlID0gKE5vZGUpYmluZGluZ05vZGVzLmVsZW1lbnRBdChpKTsKLSAgICAgV1NETEJpbmRpbmdFbGVtZW50IHdzZGxCaW5kaW5nRWxlbWVudCA9IChXU0RMQmluZGluZ0VsZW1lbnQpYmluZGluZ05vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgQmluZGluZyBiaW5kaW5nID0gd3NkbEJpbmRpbmdFbGVtZW50LmdldEJpbmRpbmcoKTsKLSU+Ci0gICAgPHRyPgotICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoU2VsZWN0V1NETE5hdmlnYXRvck5vZGVBY3Rpb24uZ2V0QWN0aW9uTGluayhiaW5kaW5nTm9kZS5nZXROb2RlSWQoKSxmYWxzZSkpKSU+Ij48JT1iaW5kaW5nLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCklPjwvdGQ+Ci0gICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRCaW5kaW5nVHlwZVN0cmluZyh3c2RsQmluZGluZ0VsZW1lbnQuZ2V0QmluZGluZ1R5cGUoKSklPjwvdGQ+Ci08JQotICAgICBXU0RMU2VydmljZUVsZW1lbnQgd3NkbFNlcnZpY2VFbGVtZW50ID0gKFdTRExTZXJ2aWNlRWxlbWVudCl3c2RsQmluZGluZ0VsZW1lbnQuZ2V0UGFyZW50RWxlbWVudCgpOwotICAgICBTdHJpbmcgZG9jdW1lbnRhdGlvbiA9IHdzZGxTZXJ2aWNlRWxlbWVudC5nZXRQcm9wZXJ0eUFzU3RyaW5nKFdTRExNb2RlbENvbnN0YW50cy5QUk9QX0RPQ1VNRU5UQVRJT04pOwotICAgICBpZiAoZG9jdW1lbnRhdGlvbi5sZW5ndGgoKSA8IDEpCi0gICAgICAgZG9jdW1lbnRhdGlvbiA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiVEFCTEVfQkxBTktfUExBQ0VIT0xERVIiKTsgICAgIAotJT4KLSAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+PCU9ZG9jdW1lbnRhdGlvbiU+PC90ZD4KLSAgICA8L3RyPgotPCUKLSAgIH0KLSU+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9lbmRwb2ludF90YWJsZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvZW5kcG9pbnRfdGFibGUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzN2VjNmQ0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mb3Jtcy9lbmRwb2ludF90YWJsZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMzkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9InNlY3Rpb25IZWFkZXJJbmZvIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLlNlY3Rpb25IZWFkZXJJbmZvIiBzY29wZT0icmVxdWVzdCIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGZ1bmN0aW9uIGFkZEVuZHBvaW50KHRhYmxlQ29udGFpbmVySUQsIGlkLCBuYW1lLCB2YWx1ZSwgaXNSZW1vdmFibGUpCi0gIHsKLSAgICB0d2lzdE9wZW4odGFibGVDb250YWluZXJJRCk7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJRCk7Ci0gICAgdmFyIHRhYmxlQm9keSA9IHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpLml0ZW0oMCk7Ci0gICAgdmFyIG5ld1JvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7Ci0gICAgdmFyIGNvbHVtbjAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW4xID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLQotICAgIHZhciByb3dDaGVja2JveCA9IGNyZWF0ZVJvd0NoZWNrYm94KCk7Ci0gICAgaWYgKCFpc1JlbW92YWJsZSkKLSAgICB7Ci0gICAgICByb3dDaGVja2JveC5kaXNhYmxlZCA9IHRydWU7Ci0gICAgfQotICAgIGNvbHVtbjAuYXBwZW5kQ2hpbGQocm93Q2hlY2tib3gpOwotCi0gICAgdmFyIGVuZFBvaW50OwotICAgIGlmIChpc1JlbW92YWJsZSkKLSAgICB7Ci0gICAgICBlbmRQb2ludCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Ci0gICAgICBlbmRQb2ludC50eXBlID0gInRleHQiOwotICAgICAgZW5kUG9pbnQuaWQgPSBpZDsKLSAgICAgIGVuZFBvaW50Lm5hbWUgPSBuYW1lOwotICAgICAgaWYgKHZhbHVlICE9IG51bGwpCi0gICAgICAgIGVuZFBvaW50LnZhbHVlID0gdmFsdWU7Ci0gICAgICBlbmRQb2ludC5jbGFzc05hbWUgPSAidGFibGV0ZXh0ZW50ZXIiOwotICAgIH0KLSAgICBlbHNlCi0gICAgICBlbmRQb2ludCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHZhbHVlKTsKLSAgICBjb2x1bW4xLmFwcGVuZENoaWxkKGVuZFBvaW50KTsKLQotICAgIGNvbHVtbjAuY2xhc3NOYW1lID0gImNoZWNrYm94Y2VsbHMiOwotICAgIGNvbHVtbjEuY2xhc3NOYW1lID0gInRhYmxlY2VsbHMiOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4wKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMSk7Ci0gICAgdGFibGVCb2R5LmFwcGVuZENoaWxkKG5ld1Jvdyk7Ci0gIH0KLQotICBmdW5jdGlvbiBoYW5kbGVFbmRwb2ludENoZWNrQWxsQ2xpY2sodGFibGVDb250YWluZXJJZCxjaGVja0FsbENoZWNrYm94KQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJZCk7Ci0gICAgZm9yICh2YXIgaT1udW1iZXJPZkhlYWRlclJvd3M7aTx0YWJsZS5yb3dzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgdmFyIHJvd0NoZWNrYm94Q2VsbCA9IHRhYmxlLnJvd3NbaV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIikuaXRlbSgwKTsKLSAgICAgIHZhciByb3dDaGVja2JveCA9IHJvd0NoZWNrYm94Q2VsbC5jaGlsZE5vZGVzWzBdOwotICAgICAgaWYgKCFyb3dDaGVja2JveC5kaXNhYmxlZCkKLSAgICAgIHsKLSAgICAgICAgcm93Q2hlY2tib3guY2hlY2tlZCA9IGNoZWNrQWxsQ2hlY2tib3guY2hlY2tlZDsKLSAgICAgICAgaWYgKHJvd0NoZWNrYm94LmNoZWNrZWQpCi0gICAgICAgICAgaGlnaGxpZ2h0Um93KHRhYmxlLnJvd3NbaV0sInJvd2NvbG9yIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBoaWdobGlnaHRSb3codGFibGUucm93c1tpXSwidGFibGVjZWxscyIpOwotICAgICAgfQotICAgIH0KLSAgfQotPC9zY3JpcHQ+Ci08JQotICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICBTdHJpbmcgdGFibGVDb250YWluZXJJRCA9IHNlY3Rpb25IZWFkZXJJbmZvLmdldENvbnRhaW5lcklkKCk7Ci0gICBTdHJpbmdCdWZmZXIgdHdpc3RJbWFnZU5hbWUgPSBuZXcgU3RyaW5nQnVmZmVyKCJ4Iik7Ci0gICB0d2lzdEltYWdlTmFtZS5hcHBlbmQodGFibGVDb250YWluZXJJRCk7ICAgCi0gICBXU0RMQmluZGluZ0VsZW1lbnQgYmluZGluZ0VsZW1lbnQgPSAoV1NETEJpbmRpbmdFbGVtZW50KXNlY3Rpb25IZWFkZXJJbmZvLmdldE90aGVyUHJvcGVydGllcygpOwotICAgU3RyaW5nW10gZW5kcG9pbnRzID0gYmluZGluZ0VsZW1lbnQuZ2V0RW5kUG9pbnRzKCk7Ci0gICBTdHJpbmcgYWRkcmVzc0xvY2F0aW9uID0gKChXU0RMU2VydmljZUVsZW1lbnQpYmluZGluZ0VsZW1lbnQuZ2V0UGFyZW50RWxlbWVudCgpKS5nZXRBZGRyZXNzTG9jYXRpb24oYmluZGluZ0VsZW1lbnQuZ2V0QmluZGluZygpKTsgICAKLSU+Ci08dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsJzwlPXR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPicpIj48aW1nIG5hbWU9IjwlPXR3aXN0SW1hZ2VOYW1lLnRvU3RyaW5nKCklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdGNsb3NlZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9DTE9TRUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICA8c3Ryb25nPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0VORF9QT0lOVFMiKSU+PC9zdHJvbmc+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDphZGRFbmRwb2ludCgnPCU9dGFibGVDb250YWluZXJJRCU+JywgJzwlPVdTRExBY3Rpb25JbnB1dHMuRU5EX1BPSU5UJT4nLCAnPCU9V1NETEFjdGlvbklucHV0cy5FTkRfUE9JTlQlPicsICc8JT1hZGRyZXNzTG9jYXRpb24lPicsIHRydWUpIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0FERCIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpyZW1vdmVTZWxlY3RlZFJvd3MoJzwlPXRhYmxlQ29udGFpbmVySUQlPicpIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX1JFTU9WRSIpJT48L2E+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgdmFsaWduPSJ0b3AiIGhlaWdodD0xMD48aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiPjwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotCi08ZGl2IGlkPSI8JT10YWJsZUNvbnRhaW5lcklEJT4iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgIDx0cj4KLSAgICAgIDx0aCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJoYW5kbGVFbmRwb2ludENoZWNrQWxsQ2xpY2soJzwlPXRhYmxlQ29udGFpbmVySUQlPicsdGhpcykiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQUxMX0NIRUNLX0JPWCIpJT4iPjwvdGg+Ci0gICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9FTkRfUE9JTlRTIiklPjwvdGg+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLTwvZGl2PgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci08JQotICBib29sZWFuIGlzRGVmYXVsdEFkZGVkID0gZmFsc2U7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZW5kcG9pbnRzLmxlbmd0aDsgaSsrKQotICB7Ci0gICAgaWYgKGVuZHBvaW50c1tpXS5lcXVhbHMoYWRkcmVzc0xvY2F0aW9uKSAmJiAhaXNEZWZhdWx0QWRkZWQpCi0gICAgewotJT4KLSAgICBhZGRFbmRwb2ludCgnPCU9dGFibGVDb250YWluZXJJRCU+JywgJzwlPVdTRExBY3Rpb25JbnB1dHMuRU5EX1BPSU5UJT4nLCAiIiwgJzwlPWVuZHBvaW50c1tpXSU+JywgZmFsc2UpOwotICAgIAotPCUKLSAgICAgIGlzRGVmYXVsdEFkZGVkID0gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSU+Ci0gICAgYWRkRW5kcG9pbnQoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsICc8JT1XU0RMQWN0aW9uSW5wdXRzLkVORF9QT0lOVCU+JywgJzwlPVdTRExBY3Rpb25JbnB1dHMuRU5EX1BPSU5UJT4nLCAnPCU9ZW5kcG9pbnRzW2ldJT4nLCB0cnVlKTsKLTwlCi0gICAgfQotICB9Ci0lPgotPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvb3BlcmF0aW9uc190YWJsZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvb3BlcmF0aW9uc190YWJsZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhYjE5ZTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL29wZXJhdGlvbnNfdGFibGUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgIFN0cmluZyB0YWJsZUNvbnRhaW5lcklkID0gc2VjdGlvbkhlYWRlckluZm8uZ2V0Q29udGFpbmVySWQoKTsKLSAgIFN0cmluZ0J1ZmZlciB0d2lzdEltYWdlTmFtZSA9IG5ldyBTdHJpbmdCdWZmZXIoIngiKTsKLSAgIHR3aXN0SW1hZ2VOYW1lLmFwcGVuZCh0YWJsZUNvbnRhaW5lcklkKTsgICAKLSU+Ci08dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT48YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT10YWJsZUNvbnRhaW5lcklkJT4nLCc8JT10d2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4nKSI+PGltZyBuYW1lPSI8JT10d2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RjbG9zZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfQ0xPU0VEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+PC90ZD4KLSAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPjxzdHJvbmc+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfT1BFUkFUSU9OUyIpJT48L3N0cm9uZz48L3RkPgotICA8L3RyPgotPC90YWJsZT4KLQotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PTEwPjxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBoZWlnaHQ9MiB3aWR0aD0iMTAwJSI+PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTxkaXYgaWQ9IjwlPXRhYmxlQ29udGFpbmVySWQlPiIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICA8dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgPHRyPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciIgd2lkdGg9IjIwJSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTkFNRSIpJT48L3RoPgotICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfRE9DVU1FTlRBVElPTiIpJT48L3RoPgotICAgIDwvdHI+Ci08JQotICAgVmVjdG9yIG9wZXJhdGlvbk5vZGVzID0gKFZlY3RvcilzZWN0aW9uSGVhZGVySW5mby5nZXRPdGhlclByb3BlcnRpZXMoKTsKLSAgIGZvciAoaW50IGk9MDtpPG9wZXJhdGlvbk5vZGVzLnNpemUoKTtpKyspCi0gICB7Ci0gICAgIE5vZGUgb3BlcmF0aW9uTm9kZSA9IChOb2RlKW9wZXJhdGlvbk5vZGVzLmVsZW1lbnRBdChpKTsKLSAgICAgV1NETE9wZXJhdGlvbkVsZW1lbnQgd3NkbE9wZXJhdGlvbkVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpb3BlcmF0aW9uTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotJT4KLSAgICA8dHI+Ci0gICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPjxhIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChTZWxlY3RXU0RMTmF2aWdhdG9yTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKG9wZXJhdGlvbk5vZGUuZ2V0Tm9kZUlkKCksZmFsc2UpKSklPiI+PCU9d3NkbE9wZXJhdGlvbkVsZW1lbnQuZ2V0T3BlcmF0aW9uKCkuZ2V0TmFtZSgpJT48L2E+PC90ZD4KLTwlICAgICAKLSAgICAgU3RyaW5nIGRvY3VtZW50YXRpb24gPSB3c2RsT3BlcmF0aW9uRWxlbWVudC5nZXRQcm9wZXJ0eUFzU3RyaW5nKFdTRExNb2RlbENvbnN0YW50cy5QUk9QX0RPQ1VNRU5UQVRJT04pOwotICAgICBpZiAoZG9jdW1lbnRhdGlvbi5sZW5ndGgoKSA8IDEpCi0gICAgICAgZG9jdW1lbnRhdGlvbiA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiVEFCTEVfQkxBTktfUExBQ0VIT0xERVIiKTsKLSU+Ci0gICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPjwlPWRvY3VtZW50YXRpb24lPjwvdGQ+Ci0gICAgPC90cj4KLTwlICAgCi0gICB9ICAgCi0lPgotICA8L3RhYmxlPgotPC9kaXY+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvc2VydmljZXNfdGFibGUuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2Zvcm1zL3NlcnZpY2VzX3RhYmxlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMThjOTkwMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZm9ybXMvc2VydmljZXNfdGFibGUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJzZWN0aW9uSGVhZGVySW5mbyIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5TZWN0aW9uSGVhZGVySW5mbyIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgIFN0cmluZyB0YWJsZUNvbnRhaW5lcklkID0gc2VjdGlvbkhlYWRlckluZm8uZ2V0Q29udGFpbmVySWQoKTsKLSAgIFN0cmluZ0J1ZmZlciB0d2lzdEltYWdlTmFtZSA9IG5ldyBTdHJpbmdCdWZmZXIoIngiKTsKLSAgIHR3aXN0SW1hZ2VOYW1lLmFwcGVuZCh0YWJsZUNvbnRhaW5lcklkKTsgICAKLSU+Ci08dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT48YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT10YWJsZUNvbnRhaW5lcklkJT4nLCc8JT10d2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4nKSI+PGltZyBuYW1lPSI8JT10d2lzdEltYWdlTmFtZS50b1N0cmluZygpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RjbG9zZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfQ0xPU0VEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+PC90ZD4KLSAgICA8dGQgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPjxzdHJvbmc+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfU0VSVklDRVMiKSU+PC9zdHJvbmc+PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgdmFsaWduPSJ0b3AiIGhlaWdodD0xMD48aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiPjwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotCi08ZGl2IGlkPSI8JT10YWJsZUNvbnRhaW5lcklkJT4iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgIDx0cj4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiIHdpZHRoPSIyMCUiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05BTUUiKSU+PC90aD4KLSAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0RPQ1VNRU5UQVRJT04iKSU+PC90aD4KLSAgICA8L3RyPgotPCUKLSAgIFZlY3RvciBzZXJ2aWNlTm9kZXMgPSAoVmVjdG9yKXNlY3Rpb25IZWFkZXJJbmZvLmdldE90aGVyUHJvcGVydGllcygpOwotICAgZm9yIChpbnQgaT0wO2k8c2VydmljZU5vZGVzLnNpemUoKTtpKyspCi0gICB7Ci0gICAgIE5vZGUgc2VydmljZU5vZGUgPSAoTm9kZSlzZXJ2aWNlTm9kZXMuZWxlbWVudEF0KGkpOwotICAgICBXU0RMU2VydmljZUVsZW1lbnQgd3NkbFNlcnZpY2VFbGVtZW50ID0gKFdTRExTZXJ2aWNlRWxlbWVudClzZXJ2aWNlTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotJT4KLSAgICA8dHI+Ci0gICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPjxhIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChTZWxlY3RXU0RMTmF2aWdhdG9yTm9kZUFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlcnZpY2VOb2RlLmdldE5vZGVJZCgpLGZhbHNlKSkpJT4iPjwlPXdzZGxTZXJ2aWNlRWxlbWVudC5nZXRTZXJ2aWNlKCkuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSU+PC9hPjwvdGQ+Ci08JSAgICAgCi0gICAgIFN0cmluZyBkb2N1bWVudGF0aW9uID0gd3NkbFNlcnZpY2VFbGVtZW50LmdldFByb3BlcnR5QXNTdHJpbmcoV1NETE1vZGVsQ29uc3RhbnRzLlBST1BfRE9DVU1FTlRBVElPTik7Ci0gICAgIGlmIChkb2N1bWVudGF0aW9uLmxlbmd0aCgpIDwgMSkKLSAgICAgICBkb2N1bWVudGF0aW9uID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJUQUJMRV9CTEFOS19QTEFDRUhPTERFUiIpOwotJT4KLSAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+PCU9ZG9jdW1lbnRhdGlvbiU+PC90ZD4KLSAgICA8L3RyPgotPCUgICAKLSAgIH0gICAKLSU+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50Ly5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50Ly5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1NPQVBFbmNBcnJheUZpeFdGcmFnbWVudEpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvU09BUEVuY0FycmF5Rml4V0ZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGU4MDJiOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvU09BUEVuY0FycmF5Rml4V0ZyYWdtZW50SlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotCi08JQotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci1Ob2RlIHNlbGVjdGVkTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQudG9TdHJpbmcoKSkpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1JU09BUEVuY0FycmF5RnJhZ21lbnQgZnJhZyA9IChJU09BUEVuY0FycmF5RnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdJRC50b1N0cmluZygpKTsKLVhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IGZyYWcuZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLVN0cmluZyB0YWJsZUNvbnRhaW5lcklEID0gKG5ldyBTdHJpbmdCdWZmZXIoRnJhZ21lbnRDb25zdGFudHMuVEFCTEVfSUQpKS5hcHBlbmQoZnJhZy5nZXRJRCgpKS50b1N0cmluZygpOwotU3RyaW5nIHR3aXN0SW1hZ2VOYW1lID0gKG5ldyBTdHJpbmdCdWZmZXIoIngiKSkuYXBwZW5kKHRhYmxlQ29udGFpbmVySUQpLnRvU3RyaW5nKCk7Ci0lPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCc8JT10d2lzdEltYWdlTmFtZSU+JykiPjxpbWcgbmFtZT0iPCU9dHdpc3RJbWFnZU5hbWUlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdG9wZW5lZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9PUEVORUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5YU0RJbmZvRGlhbG9nKCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlblhTREluZm9EaWFsb2dBY3Rpb24uZ2V0QWN0aW9uTGluayhzZXNzaW9uLmdldElkKCksc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLGZyYWdJRC50b1N0cmluZygpKSkpJT4nKSI+PCU9ZnJhZy5nZXROYW1lKCklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08c3BhbiBpZD0iPCU9dGFibGVDb250YWluZXJJRCU+Ij4KLTx0YWJsZSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gImZpeGZyYWd0YWJsZSIgOiAiaW5uZXJmaXhmcmFndGFibGUiKSU+Ij4KLSAgPHRyPgotICAgIDx0ZCB3aWR0aD0xNj4KLSAgICAgIDxpbWcgd2lkdGg9MTYgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9zcGFjZS5naWYiKSklPiI+Ci0gICAgPC90ZD4KLSAgICA8dGQ+Ci0gICAgICA8anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBTZXFGaXhXRnJhZ21lbnRKU1AuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPC9zcGFuPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1NPQVBFbmNBcnJheVJGcmFnbWVudEpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvU09BUEVuY0FycmF5UkZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjA4NDE0ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvU09BUEVuY0FycmF5UkZyYWdtZW50SlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBvcGVyTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQudG9TdHJpbmcoKSkpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpb3Blck5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLUlTT0FQRW5jQXJyYXlGcmFnbWVudCBmcmFnID0gKElTT0FQRW5jQXJyYXlGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZnJhZy5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotU3RyaW5nIHRhYmxlQ29udGFpbmVySURCYXNlID0gKG5ldyBTdHJpbmdCdWZmZXIoRnJhZ21lbnRDb25zdGFudHMuVEFCTEVfSUQpKS5hcHBlbmQoZnJhZy5nZXRJRCgpKS50b1N0cmluZygpOwotU3RyaW5nIHR3aXN0SW1hZ2VOYW1lQmFzZSA9IChuZXcgU3RyaW5nQnVmZmVyKCJ4IikpLmFwcGVuZCh0YWJsZUNvbnRhaW5lcklEQmFzZSkudG9TdHJpbmcoKTsKLVN0cmluZ1tdIGdyb3VwSURzID0gZnJhZy5nZXRHcm91cElEcygpOwotZm9yIChpbnQgaSA9IDA7IGkgPCBncm91cElEcy5sZW5ndGg7IGkrKykgewotJT4KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICA8dHI+Ci0gICAgICA8dGQgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT1pICsgdGFibGVDb250YWluZXJJREJhc2UlPicsJzwlPWkgKyB0d2lzdEltYWdlTmFtZUJhc2UlPicpIj48aW1nIG5hbWU9IjwlPWkgKyB0d2lzdEltYWdlTmFtZUJhc2UlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdG9wZW5lZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9PUEVORUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICAgIDwvdGQ+Ci0gICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgICA8JT1mcmFnLmdldE5hbWUoKSU+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci0gIDxzcGFuIGlkPSI8JT1pICsgdGFibGVDb250YWluZXJJREJhc2UlPiI+Ci0gIDx0YWJsZSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gImZpeGZyYWd0YWJsZSIgOiAiaW5uZXJmaXhmcmFndGFibGUiKSU+Ij4KLTwlCi0gICAgSVhTREZyYWdtZW50W10gY2hpbGRGcmFnbWVudHMgPSBmcmFnLmdldEdyb3VwTWVtYmVyRnJhZ21lbnRzKGdyb3VwSURzW2ldKTsKLSAgICBmb3IgKGludCBqID0gMDsgaiA8IGNoaWxkRnJhZ21lbnRzLmxlbmd0aDsgaisrKSB7Ci0gICAgICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gICAgICBmcmFnSUQuYXBwZW5kKGNoaWxkRnJhZ21lbnRzW2pdLmdldElEKCkpOwotJT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIHdpZHRoPTE2PgotICAgICAgICAgIDxpbWcgd2lkdGg9MTYgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9zcGFjZS5naWYiKSklPiI+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICAgIDx0ZD4KLSAgICAgICAgICA8anNwOmluY2x1ZGUgcGFnZT0iPCU9Y2hpbGRGcmFnbWVudHNbal0uZ2V0UmVhZEZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci08JQotICAgIH0KLSU+Ci0gIDwvdGFibGU+Ci0gIDwvc3Bhbj4KLTwlCi19Ci0lPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1NPQVBFbmNBcnJheVJhbmdlV0ZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9TT0FQRW5jQXJyYXlSYW5nZVdGcmFnbWVudEpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwMmE2OTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1NPQVBFbmNBcnJheVJhbmdlV0ZyYWdtZW50SlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotCi08JQotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci1Ob2RlIHNlbGVjdGVkTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQudG9TdHJpbmcoKSkpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1JWFNER3JvdXBTZXFGcmFnbWVudCBmcmFnID0gKElYU0RHcm91cFNlcUZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnSUQudG9TdHJpbmcoKSk7Ci1YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSBmcmFnLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci1TdHJpbmcgdGFibGVDb250YWluZXJJRCA9IChuZXcgU3RyaW5nQnVmZmVyKEZyYWdtZW50Q29uc3RhbnRzLlRBQkxFX0lEKSkuYXBwZW5kKGZyYWcuZ2V0SUQoKSkudG9TdHJpbmcoKTsKLVN0cmluZyB0d2lzdEltYWdlTmFtZSA9IChuZXcgU3RyaW5nQnVmZmVyKCJ4IikpLmFwcGVuZCh0YWJsZUNvbnRhaW5lcklEKS50b1N0cmluZygpOwotU3RyaW5nIG5hbWVBbmNob3JJRCA9IChuZXcgU3RyaW5nQnVmZmVyKEZyYWdtZW50Q29uc3RhbnRzLk5BTUVfQU5DSE9SX0lEKSkuYXBwZW5kKGZyYWcuZ2V0SUQoKSkudG9TdHJpbmcoKTsKLSU+Ci08YSBuYW1lPSI8JT1uYW1lQW5jaG9ySUQlPiIvPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCc8JT10d2lzdEltYWdlTmFtZSU+JykiPjxpbWcgbmFtZT0iPCU9dHdpc3RJbWFnZU5hbWUlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdG9wZW5lZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9PUEVORUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5YU0RJbmZvRGlhbG9nKCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlblhTREluZm9EaWFsb2dBY3Rpb24uZ2V0QWN0aW9uTGluayhzZXNzaW9uLmdldElkKCksc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLGZyYWdJRC50b1N0cmluZygpKSkpJT4nKSI+PCU9ZnJhZy5nZXROYW1lKCklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmNyZWF0ZUluc3RhbmNlKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCA8JT14c2RDb25maWcuZ2V0TWF4T2NjdXJzKCklPiwgJzwlPWZyYWdJRCU+JywgJzwlPW5hbWVBbmNob3JJRCU+JykiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfQUREIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmNoZWNrTWluT2NjdXJzQW5kUmVtb3ZlU2VsZWN0ZWRSb3dzKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCA8JT14c2RDb25maWcuZ2V0TWluT2NjdXJzKCklPikiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfUkVNT1ZFIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08c3BhbiBpZD0iPCU9dGFibGVDb250YWluZXJJRCU+Ij4KLTx0YWJsZSBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gInJhbmdlZnJhZ3RhYmxlIiA6ICJpbm5lcnJhbmdlZnJhZ3RhYmxlIiklPiI+Ci0gIDx0cj4KLSAgICA8dGggY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25DbGljaz0iaGFuZGxlQ2hlY2tBbGxDbGljaygnPCU9dGFibGVDb250YWluZXJJRCU+Jyx0aGlzKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9BTExfQ0hFQ0tfQk9YIiklPiI+PC90aD4KLSAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9TT0FQX0VOQ19BUlJBWVMiKSU+PC90aD4KLSAgPC90cj4KLSAgPCUKLSAgU3RyaW5nW10gZ3JvdXBJRHMgPSBmcmFnLmdldEdyb3VwSURzKCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZ3JvdXBJRHMubGVuZ3RoIHx8IGkgPCB4c2RDb25maWcuZ2V0TWluT2NjdXJzKCk7IGkrKykgewotICAgIFN0cmluZyBncm91cElEOwotICAgIGlmIChpIDwgZ3JvdXBJRHMubGVuZ3RoKQotICAgICAgZ3JvdXBJRCA9IGdyb3VwSURzW2ldOwotICAgIGVsc2UKLSAgICAgIGdyb3VwSUQgPSBmcmFnLmNyZWF0ZUdyb3VwU2VxSW5zdGFuY2UoKTsKLSAgICBJWFNERnJhZ21lbnRbXSBncm91cE1lbWJlckZyYWdtZW50cyA9IGZyYWcuZ2V0R3JvdXBNZW1iZXJGcmFnbWVudHMoZ3JvdXBJRCk7Ci0gICU+Ci0gIDx0cj4KLSAgICA8dGQgY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPgotICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJoYW5kbGVSb3dDaGVja2JveENsaWNrKCkiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfUk9XX0NIRUNLX0JPWCIpJT4iPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPWZyYWcuZ2V0SUQoKSU+IiB2YWx1ZT0iPCU9Z3JvdXBJRCU+Ij4KLSAgICAgIDwlCi0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgZ3JvdXBNZW1iZXJGcmFnbWVudHMubGVuZ3RoOyBqKyspIHsKLSAgICAgICAgICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gICAgICAgICAgZnJhZ0lELmFwcGVuZChncm91cE1lbWJlckZyYWdtZW50c1tqXS5nZXRJRCgpKTsKLSAgICAgICU+Ci0gICAgICA8anNwOmluY2x1ZGUgcGFnZT0iPCU9Z3JvdXBNZW1iZXJGcmFnbWVudHNbal0uZ2V0V3JpdGVGcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+Ci0gICAgICA8JQotICAgICAgICB9Ci0gICAgICAlPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci0gIDwlCi0gIH0KLSAgJT4KLTwvdGFibGU+Ci08L3NwYW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvU09BUEhlYWRlcldyYXBwZXJXRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1NPQVBIZWFkZXJXcmFwcGVyV0ZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQ5MThjMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvU09BUEhlYWRlcldyYXBwZXJXRnJhZ21lbnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzAzMDUgICAxMTcwMzQgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBzaG91bGQgc3VwcG9ydCBTT0FQIEhlYWRlcnMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LmltcGwuU09BUEhlYWRlcldyYXBwZXJGcmFnbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotCi08JQotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci1Ob2RlIHNlbGVjdGVkTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQudG9TdHJpbmcoKSkpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1TT0FQSGVhZGVyV3JhcHBlckZyYWdtZW50IHdyYXBwZXJGcmFnbWVudCA9IChTT0FQSGVhZGVyV3JhcHBlckZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnSUQudG9TdHJpbmcoKSk7Ci1JWFNERnJhZ21lbnQgZGVsZWdhdGlvbkZyYWdtZW50ID0gd3JhcHBlckZyYWdtZW50LmdldFhTRERlbGVnYXRpb25GcmFnbWVudCgpOwotZnJhZ0lELmRlbGV0ZSgwLCBmcmFnSUQubGVuZ3RoKCkpOwotZnJhZ0lELmFwcGVuZChkZWxlZ2F0aW9uRnJhZ21lbnQuZ2V0SUQoKSk7Ci0KLVN0cmluZyBtdXN0VW5kZXJzdGFuZElEID0gd3JhcHBlckZyYWdtZW50LmdldE11c3RVbmRlcnN0YW5kSUQoKTsKLVN0cmluZyBhY3RvcklEID0gd3JhcHBlckZyYWdtZW50LmdldEFjdG9ySUQoKTsKLQotU3RyaW5nIGZpZWxkc2V0Q2xhc3MgPSAgQnJvd3NlckRldGVjdC5pc01pY3Jvc29mdEludGVybmV0RXhwbG9yZXIocmVxdWVzdCkgPyAiIiA6ICJoZWFkZXJmaWVsZHNldCI7Ci0lPgotPHRhYmxlIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9ImZpeGZyYWd0YWJsZSI+Ci0gIDx0cj4KLSAgICA8dGQ+Ci0JICA8ZmllbGRzZXQgY2xhc3M9IjwlPWZpZWxkc2V0Q2xhc3MlPiI+Ci0JCTxqc3A6aW5jbHVkZSBwYWdlPSI8JT1kZWxlZ2F0aW9uRnJhZ21lbnQuZ2V0V3JpdGVGcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+CSAgICAgIAkgIAotCQk8dGFibGUgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0iZml4ZnJhZ3RhYmxlIj4KLQkJICA8dHI+Ci0JCSAgICA8dGQgaGVpZ2h0PSIzIj48IS0tIHNwYWNlciAtLT48L3RkPgotCQkgIDwvdHI+Ci0JCSAgPHRyPgotCQkgICAgPHRkPgotCQkgICAgICA8JSBpZiAod3JhcHBlckZyYWdtZW50LmlzTXVzdFVuZGVyc3RhbmQoKSkgeyAlPiAgICAJCi0JCSAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iPCU9bXVzdFVuZGVyc3RhbmRJRCU+IiBuYW1lPSI8JT1tdXN0VW5kZXJzdGFuZElEJT4iIGNoZWNrZWQvPgotCQkgICAgICA8JSB9IGVsc2UgeyAlPgotCQkgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9IjwlPW11c3RVbmRlcnN0YW5kSUQlPiIgbmFtZT0iPCU9bXVzdFVuZGVyc3RhbmRJRCU+Ii8+Ci0JCSAgICAgIDwlIH0gJT4gICAgICAJCi0JCSAgICA8L3RkPgotCQkgICAgPHRkIGNsYXNzPSJsYWJlbCI+Ci0JCSAgICAgIDxsYWJlbCBmb3I9IjwlPW11c3RVbmRlcnN0YW5kSUQlPiI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTVVTVFVOREVSU1RBTkQiKSU+PC9sYWJlbD4KLQkJICAgIDwvdGQ+Ci0JCSAgICA8dGQ+fDwvdGQ+Ci0JCSAgICA8dGQgY2xhc3M9ImxhYmVsIj4KLQkJICAgICAgPGxhYmVsIGZvcj0iPCU9YWN0b3JJRCU+Ij48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9BQ1RPUiIpJT48L2xhYmVsPgotCQkgICAgPC90ZD4KLQkJICAgIDx0ZD4KLQkJICAgICAgPGRpdiBzdHlsZT0id2lkdGg6IDVweCI+Ci0gICAgICAJCSAgICA8JSBpZiAoIXdyYXBwZXJGcmFnbWVudC52YWxpZGF0ZUFjdG9yKCkpIHsgJT4KLSAgICAgIAkJICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotICAgICAgICAgICAgICAgIDwlIH0gJT4KLSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgCQk8L3RkPiAgICAJCi0JCSAgICA8dGQgd2lkdGg9IjEwMCUiPiAgICAJCi0JCSAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iPCU9YWN0b3JJRCU+IiBuYW1lPSI8JT1hY3RvcklEJT4iIHZhbHVlPSI8JT13cmFwcGVyRnJhZ21lbnQuZ2V0QWN0b3IoKSU+IiBjbGFzcz0idGFibGV0ZXh0ZW50ZXIiLz4KLQkJICAgIDwvdGQ+Ci0JCSAgPC90cj4KLQkJICA8dHI+Ci0JCSAgICA8dGQgaGVpZ2h0PSIzIj48IS0tIHNwYWNlciAtLT48L3RkPgotCQkgIDwvdHI+ICAgIAotCQk8L3RhYmxlPgotCSAgPC9maWVsZHNldD4KLQk8L3RkPgotICA8L3RyPgotICA8dHI+Ci0JPHRkIGhlaWdodD0iNSI+PCEtLSBzcGFjZXIgLS0+PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEQ29tcGxleEZpeFdGcmFnbWVudEpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEQ29tcGxleEZpeFdGcmFnbWVudEpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmODAzMTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRENvbXBsZXhGaXhXRnJhZ21lbnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTIzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNTE2ICAgMTg1NTk2IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXZWIgU2VydmljZXMgRXhwbG9yZXIgbWlzaW50ZXJwcmV0cyByZXNwb25zZSBtZXNzYWdlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImZyYWdJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5vZGVJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImVsZW1lbnRJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImF0dHJpYnV0ZSIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci0KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLU5vZGUgc2VsZWN0ZWROb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRC50b1N0cmluZygpKSk7Ci1XU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLUlYU0RDb21wbGV4RnJhZ21lbnQgZnJhZyA9IChJWFNEQ29tcGxleEZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnSUQudG9TdHJpbmcoKSk7Ci1JWFNERWxlbWVudEZyYWdtZW50IGVsZW1lbnRGcmFnbWVudCA9IChJWFNERWxlbWVudEZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChlbGVtZW50SUQudG9TdHJpbmcoKSk7Ci1YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSBmcmFnLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci1TdHJpbmcgdGFibGVDb250YWluZXJJRCA9IChuZXcgU3RyaW5nQnVmZmVyKEZyYWdtZW50Q29uc3RhbnRzLlRBQkxFX0lEKSkuYXBwZW5kKGZyYWcuZ2V0SUQoKSkudG9TdHJpbmcoKTsKLVN0cmluZyB0d2lzdEltYWdlTmFtZSA9IChuZXcgU3RyaW5nQnVmZmVyKCJ4IikpLmFwcGVuZCh0YWJsZUNvbnRhaW5lcklEKS50b1N0cmluZygpOwotJT4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9dGFibGVDb250YWluZXJJRCU+JywnPCU9dHdpc3RJbWFnZU5hbWUlPicpIj48aW1nIG5hbWU9IjwlPXR3aXN0SW1hZ2VOYW1lJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RvcGVuZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfT1BFTkVEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpvcGVuWFNESW5mb0RpYWxvZygnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KE9wZW5YU0RJbmZvRGlhbG9nQWN0aW9uLmdldEFjdGlvbkxpbmsoc2Vzc2lvbi5nZXRJZCgpLHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSxmcmFnSUQudG9TdHJpbmcoKSkpKSU+JykiPjwlPWZyYWcuZ2V0TmFtZSgpJT48L2E+Ci0gICAgPC90ZD4KLSAgICAKLSAgICA8JSAKLSAgICAgIGlmKGVsZW1lbnRGcmFnbWVudCAhPSBudWxsICYmIGVsZW1lbnRGcmFnbWVudC5pc05pbGxhYmxlKCkpewotICAgICAgICBpZihlbGVtZW50RnJhZ21lbnQuaXNOaWwoKSl7Ci0gICAgICAgICAgJT4gIAotICAgICAgICAgIDx0ZCB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9IjwlPSgoSVhTREVsZW1lbnRGcmFnbWVudCllbGVtZW50RnJhZ21lbnQpLmdldE5pbElEKCklPiIgdmFsdWU9IjwlPUlYU0RFbGVtZW50RnJhZ21lbnQuTklMX1ZBTFVFJT4iIGNoZWNrZWQ+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9OSUwiKSU+PC90ZD4gCi0gICAgICAgICAgPCUKLSAgICAgICAgfSAKLSAgICAgICAgZWxzZXsKLSAgICAgICAgICAlPiAgCi0gICAgICAgICAgPHRkIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPCU9KChJWFNERWxlbWVudEZyYWdtZW50KWVsZW1lbnRGcmFnbWVudCkuZ2V0TmlsSUQoKSU+IiB2YWx1ZT0iPCU9SVhTREVsZW1lbnRGcmFnbWVudC5OSUxfVkFMVUUlPiIgPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTklMIiklPjwvdGQ+IAotICAgICAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgICU+Ci0gICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTxzcGFuIGlkPSI8JT10YWJsZUNvbnRhaW5lcklEJT4iPgotPHRhYmxlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBjbGFzcz0iPCU9KHhzZENvbmZpZy5nZXRJc1dTRExQYXJ0KCkgPyAiZml4ZnJhZ3RhYmxlIiA6ICJpbm5lcmZpeGZyYWd0YWJsZSIpJT4iPgotICA8JQotICBJWFNERnJhZ21lbnRbXSBjaGlsZEZyYWdzID0gZnJhZy5nZXRBbGxGcmFnbWVudHMoKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCB4c2RDb25maWcuZ2V0TWF4T2NjdXJzKCk7IGkrKykgewotICAgIElYU0RGcmFnbWVudCBjaGlsZEZyYWc7Ci0gICAgU3RyaW5nIGNoaWxkRnJhZ0lEOwotICAgIGlmIChpIDwgY2hpbGRGcmFncy5sZW5ndGgpIHsKLSAgICAgIGNoaWxkRnJhZyA9IGNoaWxkRnJhZ3NbaV07Ci0gICAgICBjaGlsZEZyYWdJRCA9IGNoaWxkRnJhZy5nZXRJRCgpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgIGNoaWxkRnJhZ0lEID0gZnJhZy5jcmVhdGVDb21wbGV4SW5zdGFuY2UoKTsKLSAgICAgIGNoaWxkRnJhZyA9IGZyYWcuZ2V0RnJhZ21lbnQoY2hpbGRGcmFnSUQpOwotICAgIH0KLSAgICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gICAgZnJhZ0lELmFwcGVuZChjaGlsZEZyYWdJRCk7Ci0gICAgYXR0cmlidXRlLmRlbGV0ZSgwLCBhdHRyaWJ1dGUubGVuZ3RoKCkpOwotICAgIGF0dHJpYnV0ZS5hcHBlbmQoImZhbHNlIik7Ci0gICU+Ci0gIDx0cj4KLSAgICA8dGQgd2lkdGg9MTY+Ci0gICAgICA8aW1nIHdpZHRoPTE2IHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvc3BhY2UuZ2lmIikpJT4iPgotICAgIDwvdGQ+Ci0gICAgPHRkPgotICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9ZnJhZy5nZXRJRCgpJT4iIHZhbHVlPSI8JT1jaGlsZEZyYWdJRCU+Ij4KLSAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1jaGlsZEZyYWcuZ2V0V3JpdGVGcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPC90ZD4KLSAgPC90cj4KLSAgPCUKLSAKLSAgSVhTREF0dHJpYnV0ZUZyYWdtZW50W10gYXR0cmlidXRlRnJhZ21lbnRzID0gZnJhZy5nZXRBbGxBdHRyaWJ1dGVGcmFnbWVudHMoKTsKLSAgSVhTREF0dHJpYnV0ZUZyYWdtZW50IGF0dHJpYnV0ZUZyYWdtZW50OwotICBmb3IoaW50IGogPSAwOyBqIDwgYXR0cmlidXRlRnJhZ21lbnRzLmxlbmd0aDsgaisrKXsKLSAgICBhdHRyaWJ1dGVGcmFnbWVudCA9IGF0dHJpYnV0ZUZyYWdtZW50c1tqXTsKLSAgICAKLSAgICBpZihhdHRyaWJ1dGVGcmFnbWVudC5nZXRJRCgpLnN0YXJ0c1dpdGgoY2hpbGRGcmFnSUQpKXsKLSAgICAgIElYU0RGcmFnbWVudCBkZWxlZ2F0aW9uRnJhZ21lbnQgPSBhdHRyaWJ1dGVGcmFnbWVudC5nZXRYU0REZWxlZ2F0aW9uRnJhZ21lbnQoKTsKLSAgICAgIGZyYWdJRC5kZWxldGUoMCwgZnJhZ0lELmxlbmd0aCgpKTsKLSAgICAgIGZyYWdJRC5hcHBlbmQoZGVsZWdhdGlvbkZyYWdtZW50LmdldElEKCkpOwotICAgICAgYXR0cmlidXRlLmRlbGV0ZSgwLCBhdHRyaWJ1dGUubGVuZ3RoKCkpOwotICAgICAgYXR0cmlidXRlLmFwcGVuZCgidHJ1ZSIpOwotICAgICAgJT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIHdpZHRoPTE2PgotICAgICAgICAgIDxpbWcgd2lkdGg9MTYgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9zcGFjZS5naWYiKSklPiI+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICAgIDx0ZD4KLSAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1mcmFnLmdldElEKCklPiIgdmFsdWU9IjwlPWF0dHJpYnV0ZUZyYWdtZW50LmdldElEKCklPiI+Ci0gICAgICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9IjwlPWRlbGVnYXRpb25GcmFnbWVudC5nZXRXcml0ZUZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8JQotICAgIH0gIAotICB9ICAKLX0KLSAgJT4KLTwvdGFibGU+Ci08L3NwYW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEQ29tcGxleFJGcmFnbWVudEpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEQ29tcGxleFJGcmFnbWVudEpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyYTJmNDUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRENvbXBsZXhSRnJhZ21lbnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA1MTYgICAxODU1OTYgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBtaXNpbnRlcnByZXRzIHJlc3BvbnNlIG1lc3NhZ2UKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImZyYWdJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5vZGVJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImVsZW1lbnRJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImF0dHJpYnV0ZSIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci0KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLU5vZGUgb3Blck5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KW9wZXJOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1JWFNEQ29tcGxleEZyYWdtZW50IGZyYWcgPSAoSVhTRENvbXBsZXhGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZnJhZy5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotU3RyaW5nIHRhYmxlQ29udGFpbmVySURCYXNlID0gKG5ldyBTdHJpbmdCdWZmZXIoRnJhZ21lbnRDb25zdGFudHMuVEFCTEVfSUQpKS5hcHBlbmQoZnJhZy5nZXRJRCgpKS50b1N0cmluZygpOwotU3RyaW5nIHR3aXN0SW1hZ2VOYW1lQmFzZSA9IChuZXcgU3RyaW5nQnVmZmVyKCJ4IikpLmFwcGVuZCh0YWJsZUNvbnRhaW5lcklEQmFzZSkudG9TdHJpbmcoKTsKLUlYU0RGcmFnbWVudFtdIGNoaWxkRnJhZ3MgPSBmcmFnLmdldEFsbEZyYWdtZW50cygpOwotZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZEZyYWdzLmxlbmd0aDsgaSsrKSB7Ci0gIGZyYWdJRC5kZWxldGUoMCwgZnJhZ0lELmxlbmd0aCgpKTsKLSAgZnJhZ0lELmFwcGVuZChjaGlsZEZyYWdzW2ldLmdldElEKCkpOwotJT4KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICA8dHI+Ci0gICAgICA8dGQgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT1pICsgdGFibGVDb250YWluZXJJREJhc2UlPicsJzwlPWkgKyB0d2lzdEltYWdlTmFtZUJhc2UlPicpIj48aW1nIG5hbWU9IjwlPWkgKyB0d2lzdEltYWdlTmFtZUJhc2UlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdG9wZW5lZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9PUEVORUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICAgIDwvdGQ+Ci0gICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgICA8JT1mcmFnLmdldE5hbWUoKSU+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci0gIDxzcGFuIGlkPSI8JT1pICsgdGFibGVDb250YWluZXJJREJhc2UlPiI+Ci0gIDx0YWJsZSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gImZpeGZyYWd0YWJsZSIgOiAiaW5uZXJmaXhmcmFndGFibGUiKSU+Ij4KLSAgICA8dHI+Ci0gICAgICA8dGQgd2lkdGg9MTY+Ci0gICAgICAgIDxpbWcgd2lkdGg9MTYgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9zcGFjZS5naWYiKSklPiI+Ci0gICAgICA8L3RkPgotICAgICAgPHRkPgotICAgICAgICA8anNwOmluY2x1ZGUgcGFnZT0iPCU9Y2hpbGRGcmFnc1tpXS5nZXRSZWFkRnJhZ21lbnQoKSU+IiBmbHVzaD0idHJ1ZSIvPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8JQotCi0gIElYU0RBdHRyaWJ1dGVGcmFnbWVudFtdIGF0dHJpYnV0ZUZyYWdtZW50cyA9IGZyYWcuZ2V0QWxsQXR0cmlidXRlRnJhZ21lbnRzKCk7Ci0gIElYU0RBdHRyaWJ1dGVGcmFnbWVudCBhdHRyaWJ1dGVGcmFnbWVudDsKLSAgZm9yKGludCBqID0gMDsgaiA8IGF0dHJpYnV0ZUZyYWdtZW50cy5sZW5ndGg7IGorKyl7Ci0gICAgYXR0cmlidXRlRnJhZ21lbnQgPSBhdHRyaWJ1dGVGcmFnbWVudHNbal07Ci0gICAgCi0gICAgaWYgKGF0dHJpYnV0ZUZyYWdtZW50LmdldElEKCkuc3RhcnRzV2l0aChjaGlsZEZyYWdzW2ldLmdldElEKCkpKSB7Ci0gICAgICBJWFNERnJhZ21lbnQgZGVsZWdhdGlvbkZyYWdtZW50ID0gYXR0cmlidXRlRnJhZ21lbnQuZ2V0WFNERGVsZWdhdGlvbkZyYWdtZW50KCk7Ci0gICAgICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gICAgICBmcmFnSUQuYXBwZW5kKGRlbGVnYXRpb25GcmFnbWVudC5nZXRJRCgpKTsKLSAgICAgIGF0dHJpYnV0ZS5kZWxldGUoMCwgYXR0cmlidXRlLmxlbmd0aCgpKTsKLSAgICAgIGF0dHJpYnV0ZS5hcHBlbmQoInRydWUiKTsKLSAgICAgICU+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCB3aWR0aD0xNj4KLSAgICAgICAgICA8aW1nIHdpZHRoPTE2IHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvc3BhY2UuZ2lmIikpJT4iPgotICAgICAgICA8L3RkPgotICAgICAgICA8dGQ+Ci0gICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9ZnJhZy5nZXRJRCgpJT4iIHZhbHVlPSI8JT1hdHRyaWJ1dGVGcmFnbWVudC5nZXRJRCgpJT4iPgotICAgICAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1kZWxlZ2F0aW9uRnJhZ21lbnQuZ2V0UmVhZEZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8JQotICAgIH0gIAotICB9Ci19ICAKLSAgJT4KLSAgCi0gIDwvdGFibGU+Ci0gIDwvc3Bhbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RDb21wbGV4UmFuZ2VXRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRENvbXBsZXhSYW5nZVdGcmFnbWVudEpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjMTdkMTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRENvbXBsZXhSYW5nZVdGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImZyYWdJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5vZGVJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImVsZW1lbnRJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImF0dHJpYnV0ZSIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci0KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLU5vZGUgc2VsZWN0ZWROb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRC50b1N0cmluZygpKSk7Ci1XU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLUlYU0RDb21wbGV4RnJhZ21lbnQgZnJhZyA9IChJWFNEQ29tcGxleEZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnSUQudG9TdHJpbmcoKSk7Ci1JWFNERWxlbWVudEZyYWdtZW50IGVsZW1lbnRGcmFnbWVudCA9IChJWFNERWxlbWVudEZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChlbGVtZW50SUQudG9TdHJpbmcoKSk7Ci1YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSBmcmFnLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci1TdHJpbmcgdGFibGVDb250YWluZXJJRCA9IChuZXcgU3RyaW5nQnVmZmVyKEZyYWdtZW50Q29uc3RhbnRzLlRBQkxFX0lEKSkuYXBwZW5kKGZyYWcuZ2V0SUQoKSkudG9TdHJpbmcoKTsKLVN0cmluZyB0d2lzdEltYWdlTmFtZSA9IChuZXcgU3RyaW5nQnVmZmVyKCJ4IikpLmFwcGVuZCh0YWJsZUNvbnRhaW5lcklEKS50b1N0cmluZygpOwotU3RyaW5nIG5hbWVBbmNob3JJRCA9IChuZXcgU3RyaW5nQnVmZmVyKEZyYWdtZW50Q29uc3RhbnRzLk5BTUVfQU5DSE9SX0lEKSkuYXBwZW5kKGZyYWcuZ2V0SUQoKSkudG9TdHJpbmcoKTsKLSU+Ci08YSBuYW1lPSI8JT1uYW1lQW5jaG9ySUQlPiIvPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCc8JT10d2lzdEltYWdlTmFtZSU+JykiPjxpbWcgbmFtZT0iPCU9dHdpc3RJbWFnZU5hbWUlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdG9wZW5lZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9PUEVORUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5YU0RJbmZvRGlhbG9nKCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlblhTREluZm9EaWFsb2dBY3Rpb24uZ2V0QWN0aW9uTGluayhzZXNzaW9uLmdldElkKCksc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLGZyYWdJRC50b1N0cmluZygpKSkpJT4nKSI+PCU9ZnJhZy5nZXROYW1lKCklPjwvYT4KLSAgICA8L3RkPgotICAgIDwlIAotICAgICAgaWYoZWxlbWVudEZyYWdtZW50ICE9IG51bGwgJiYgZWxlbWVudEZyYWdtZW50LmlzTmlsbGFibGUoKSl7Ci0gICAgICAgIGlmKGVsZW1lbnRGcmFnbWVudC5pc05pbCgpKXsKLSAgICAgICAgICAlPiAgCi0gICAgICAgICAgPHRkIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPCU9KChJWFNERWxlbWVudEZyYWdtZW50KWVsZW1lbnRGcmFnbWVudCkuZ2V0TmlsSUQoKSU+IiB2YWx1ZT0iPCU9SVhTREVsZW1lbnRGcmFnbWVudC5OSUxfVkFMVUUlPiIgY2hlY2tlZD48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX05JTCIpJT48L3RkPiAKLSAgICAgICAgICA8JQotICAgICAgICB9IAotICAgICAgICBlbHNlewotICAgICAgICAgICU+ICAKLSAgICAgICAgICA8dGQgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSI8JT0oKElYU0RFbGVtZW50RnJhZ21lbnQpZWxlbWVudEZyYWdtZW50KS5nZXROaWxJRCgpJT4iIHZhbHVlPSI8JT1JWFNERWxlbWVudEZyYWdtZW50Lk5JTF9WQUxVRSU+IiA+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9OSUwiKSU+PC90ZD4gCi0gICAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgfQotICAgICU+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6Y3JlYXRlSW5zdGFuY2UoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsIDwlPXhzZENvbmZpZy5nZXRNYXhPY2N1cnMoKSU+LCAnPCU9ZnJhZ0lEJT4nLCAnPCU9bmFtZUFuY2hvcklEJT4nKSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19BREQiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6Y2hlY2tNaW5PY2N1cnNBbmRSZW1vdmVTZWxlY3RlZFJvd3NBdHRyaWJ1dGUoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsIDwlPXhzZENvbmZpZy5nZXRNaW5PY2N1cnMoKSU+KSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19SRU1PVkUiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTxzcGFuIGlkPSI8JT10YWJsZUNvbnRhaW5lcklEJT4iPgotPHRhYmxlIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0iPCU9KHhzZENvbmZpZy5nZXRJc1dTRExQYXJ0KCkgPyAicmFuZ2VmcmFndGFibGUiIDogImlubmVycmFuZ2VmcmFndGFibGUiKSU+Ij4KLSAgPHRyPgotICAgIDx0aCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJoYW5kbGVDaGVja0FsbENsaWNrKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLHRoaXMpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX0FMTF9DSEVDS19CT1giKSU+Ij48L3RoPgotICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0NPTlRFTlQiKSU+PC90aD4KLSAgPC90cj4KLSAgPCUKLSAgSVhTREZyYWdtZW50W10gY2hpbGRGcmFncyA9IGZyYWcuZ2V0QWxsRnJhZ21lbnRzKCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRGcmFncy5sZW5ndGggfHwgaSA8IHhzZENvbmZpZy5nZXRNaW5PY2N1cnMoKTsgaSsrKSB7Ci0gICAgSVhTREZyYWdtZW50IGNoaWxkRnJhZzsKLSAgICBTdHJpbmcgY2hpbGRGcmFnSUQ7Ci0gICAgaWYgKGkgPCBjaGlsZEZyYWdzLmxlbmd0aCkgewotICAgICAgY2hpbGRGcmFnID0gY2hpbGRGcmFnc1tpXTsKLSAgICAgIGNoaWxkRnJhZ0lEID0gY2hpbGRGcmFnLmdldElEKCk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgY2hpbGRGcmFnSUQgPSBmcmFnLmNyZWF0ZUNvbXBsZXhJbnN0YW5jZSgpOwotICAgICAgY2hpbGRGcmFnID0gZnJhZy5nZXRGcmFnbWVudChjaGlsZEZyYWdJRCk7Ci0gICAgfQotICAgIGZyYWdJRC5kZWxldGUoMCwgZnJhZ0lELmxlbmd0aCgpKTsKLSAgICBmcmFnSUQuYXBwZW5kKGNoaWxkRnJhZ0lEKTsKLSAgJT4KLSAgPHRyPgotICAgIDx0ZCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+Ci0gICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9ImhhbmRsZVJvd0NoZWNrYm94Q2xpY2soKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9ST1dfQ0hFQ0tfQk9YIiklPiI+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9ZnJhZy5nZXRJRCgpJT4iIHZhbHVlPSI8JT1jaGlsZEZyYWdJRCU+Ij4KLSAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1jaGlsZEZyYWcuZ2V0V3JpdGVGcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPC90ZD4KLSAgPC90cj4KLSAgPCUKLSAgCi0gIElYU0RBdHRyaWJ1dGVGcmFnbWVudFtdIGF0dHJpYnV0ZUZyYWdtZW50cyA9IGZyYWcuZ2V0QWxsQXR0cmlidXRlRnJhZ21lbnRzKCk7Ci0gIElYU0RBdHRyaWJ1dGVGcmFnbWVudCBhdHRyaWJ1dGVGcmFnbWVudDsKLSAgZm9yKGludCBqID0gMDsgaiA8IGF0dHJpYnV0ZUZyYWdtZW50cy5sZW5ndGg7IGorKyl7Ci0gICAgYXR0cmlidXRlRnJhZ21lbnQgPSBhdHRyaWJ1dGVGcmFnbWVudHNbal07Ci0gICAgCi0gICAgaWYoYXR0cmlidXRlRnJhZ21lbnQuZ2V0SUQoKS5zdGFydHNXaXRoKGNoaWxkRnJhZ0lEKSl7Ci0gICAgICBJWFNERnJhZ21lbnQgZGVsZWdhdGlvbkZyYWdtZW50ID0gYXR0cmlidXRlRnJhZ21lbnQuZ2V0WFNERGVsZWdhdGlvbkZyYWdtZW50KCk7Ci0gICAgICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gICAgICBmcmFnSUQuYXBwZW5kKGRlbGVnYXRpb25GcmFnbWVudC5nZXRJRCgpKTsKLSAgICAgIGF0dHJpYnV0ZS5kZWxldGUoMCwgYXR0cmlidXRlLmxlbmd0aCgpKTsKLSAgICAgIGF0dHJpYnV0ZS5hcHBlbmQoInRydWUiKTsKLSAgICAgICAlPgotICAgICAgCi0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyIgd2lkdGg9MTA+Ci0gICAgICAgICAgCi0gICAgICAgIDwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9ZnJhZy5nZXRJRCgpJT4iIHZhbHVlPSI8JT1hdHRyaWJ1dGVGcmFnbWVudC5nZXRJRCgpJT4iPgotICAgICAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1kZWxlZ2F0aW9uRnJhZ21lbnQuZ2V0V3JpdGVGcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+Ci0gICAgICAgIDwvdGQ+Ci0gICAgIDwvdHI+Ci0gICAgIDwlCi0gICAgCi0gICAgCi0gICAgfSAgCi0gIH0KLX0KLSU+Ci08L3RhYmxlPgotPC9zcGFuPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRENvbXBsZXhTaW1wbGVDb250ZW50Rml4V0ZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RDb21wbGV4U2ltcGxlQ29udGVudEZpeFdGcmFnbWVudEpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxNTYzODguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRENvbXBsZXhTaW1wbGVDb250ZW50Rml4V0ZyYWdtZW50SlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEyOSArMCwwIEBACi08JQotLyoqCi0qIDxjb3B5cmlnaHQ+Ci0qCi0qIExpY2Vuc2VkIE1hdGVyaWFsIC0gUHJvcGVydHkgb2YgSUJNCi0qIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDIgLSBBbGwgUmlnaHRzIFJlc2VydmVkLgotKiBVUyBHb3Zlcm5tZW50IFVzZXJzIFJlc3RyaWN0ZWQgUmlnaHRzIC0gVXNlLCBkdXBsaWNhdGlvbiBvciBkaXNjbG9zdXJlCi0qIHJlc3RyaWN0ZWQgYnkgR1NBIEFEUCBTY2hlZHVsZSBDb250cmFjdCB3aXRoIElCTSBDb3JwLgotKgotKiA8L2NvcHlyaWdodD4KLSoKLSogRmlsZSBwbHVnaW5zL2NvbS5pYm0uZXRvb2xzLndlYnNlcnZpY2UuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRENvbXBsZXhGaXhXRnJhZ21lbnRKU1AuanNwLCB3c2EuZXRvb2xzLndzLmV4cGxvcmVyLCBsdW5hci01LjEuMiAyCi0qIFZlcnNpb24gMS4yIDA1LzA1LzI2IDE2OjE4OjIzCi0qLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iZWxlbWVudElEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iYXR0cmlidXRlIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVhTRENvbXBsZXhGcmFnbWVudCBmcmFnID0gKElYU0RDb21wbGV4RnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdJRC50b1N0cmluZygpKTsKLUlYU0RFbGVtZW50RnJhZ21lbnQgZWxlbWVudEZyYWdtZW50ID0gKElYU0RFbGVtZW50RnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGVsZW1lbnRJRC50b1N0cmluZygpKTsKLVhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IGZyYWcuZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLVN0cmluZyB0YWJsZUNvbnRhaW5lcklEID0gKG5ldyBTdHJpbmdCdWZmZXIoRnJhZ21lbnRDb25zdGFudHMuVEFCTEVfSUQpKS5hcHBlbmQoZnJhZy5nZXRJRCgpKS50b1N0cmluZygpOwotU3RyaW5nIHR3aXN0SW1hZ2VOYW1lID0gKG5ldyBTdHJpbmdCdWZmZXIoIngiKSkuYXBwZW5kKHRhYmxlQ29udGFpbmVySUQpLnRvU3RyaW5nKCk7Ci0lPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCc8JT10d2lzdEltYWdlTmFtZSU+JykiPjxpbWcgbmFtZT0iPCU9dHdpc3RJbWFnZU5hbWUlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdG9wZW5lZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9PUEVORUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5YU0RJbmZvRGlhbG9nKCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlblhTREluZm9EaWFsb2dBY3Rpb24uZ2V0QWN0aW9uTGluayhzZXNzaW9uLmdldElkKCksc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLGZyYWdJRC50b1N0cmluZygpKSkpJT4nKSI+PCU9ZnJhZy5nZXROYW1lKCklPjwvYT4KLSAgICA8L3RkPgotICAgIAotICAgIDwlIAotICAgICAgaWYoZWxlbWVudEZyYWdtZW50ICE9IG51bGwgJiYgZWxlbWVudEZyYWdtZW50LmlzTmlsbGFibGUoKSl7Ci0gICAgICAgIGlmKGVsZW1lbnRGcmFnbWVudC5pc05pbCgpKXsKLSAgICAgICAgICAlPiAgCi0gICAgICAgICAgPHRkIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPCU9KChJWFNERWxlbWVudEZyYWdtZW50KWVsZW1lbnRGcmFnbWVudCkuZ2V0TmlsSUQoKSU+IiB2YWx1ZT0iPCU9SVhTREVsZW1lbnRGcmFnbWVudC5OSUxfVkFMVUUlPiIgY2hlY2tlZD48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX05JTCIpJT48L3RkPiAKLSAgICAgICAgICA8JQotICAgICAgICB9IAotICAgICAgICBlbHNlewotICAgICAgICAgICU+ICAKLSAgICAgICAgICA8dGQgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSI8JT0oKElYU0RFbGVtZW50RnJhZ21lbnQpZWxlbWVudEZyYWdtZW50KS5nZXROaWxJRCgpJT4iIHZhbHVlPSI8JT1JWFNERWxlbWVudEZyYWdtZW50Lk5JTF9WQUxVRSU+IiA+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9OSUwiKSU+PC90ZD4gCi0gICAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgfQotICAgICAgJT4KLSAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPHNwYW4gaWQ9IjwlPXRhYmxlQ29udGFpbmVySUQlPiI+Ci08dGFibGUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGNsYXNzPSI8JT0oeHNkQ29uZmlnLmdldElzV1NETFBhcnQoKSA/ICJmaXhmcmFndGFibGUiIDogImlubmVyZml4ZnJhZ3RhYmxlIiklPiI+Ci0gIDwlCi0gIAotICAKLSAgCi0gICAgCi0gIElYU0RGcmFnbWVudFtdIGNoaWxkRnJhZ3MgPSBmcmFnLmdldEFsbEZyYWdtZW50cygpOwotICBmb3IgKGludCBpID0gMDsgaSA8IHhzZENvbmZpZy5nZXRNYXhPY2N1cnMoKTsgaSsrKSB7Ci0gICAgSVhTREZyYWdtZW50IGNoaWxkRnJhZzsKLSAgICBTdHJpbmcgY2hpbGRGcmFnSUQ7Ci0gICAgaWYgKGkgPCBjaGlsZEZyYWdzLmxlbmd0aCkgewotICAgICAgY2hpbGRGcmFnID0gY2hpbGRGcmFnc1tpXTsKLSAgICAgIGNoaWxkRnJhZ0lEID0gY2hpbGRGcmFnLmdldElEKCk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgY2hpbGRGcmFnSUQgPSBmcmFnLmNyZWF0ZUNvbXBsZXhJbnN0YW5jZSgpOwotICAgICAgY2hpbGRGcmFnID0gZnJhZy5nZXRGcmFnbWVudChjaGlsZEZyYWdJRCk7Ci0gICAgfQotICAgIGZyYWdJRC5kZWxldGUoMCwgZnJhZ0lELmxlbmd0aCgpKTsKLSAgICBmcmFnSUQuYXBwZW5kKGNoaWxkRnJhZ0lEKTsKLSAgICBhdHRyaWJ1dGUuZGVsZXRlKDAsIGF0dHJpYnV0ZS5sZW5ndGgoKSk7Ci0gICAgYXR0cmlidXRlLmFwcGVuZCgiZmFsc2UiKTsKLSAgJT4KLSAgPHRyPgotICAgIDx0ZCB3aWR0aD0xNj4KLSAgICAgIDxpbWcgd2lkdGg9MTYgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9zcGFjZS5naWYiKSklPiI+Ci0gICAgPC90ZD4KLSAgICA8dGQ+Ci0gICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1mcmFnLmdldElEKCklPiIgdmFsdWU9IjwlPWNoaWxkRnJhZ0lEJT4iPgotICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9IjwlPWNoaWxkRnJhZy5nZXRXcml0ZUZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLSAgICA8L3RkPgotICA8L3RyPgotICA8JQotICAKLSAgCi0gCi0gIElYU0RBdHRyaWJ1dGVGcmFnbWVudFtdIGF0dHJpYnV0ZUZyYWdtZW50cyA9IGZyYWcuZ2V0QWxsQXR0cmlidXRlRnJhZ21lbnRzKCk7Ci0gIElYU0RBdHRyaWJ1dGVGcmFnbWVudCBhdHRyaWJ1dGVGcmFnbWVudDsKLSAgZm9yKGludCBqID0gMDsgaiA8IGF0dHJpYnV0ZUZyYWdtZW50cy5sZW5ndGg7IGorKyl7Ci0gICAgYXR0cmlidXRlRnJhZ21lbnQgPSBhdHRyaWJ1dGVGcmFnbWVudHNbal07Ci0gICAgaWYoYXR0cmlidXRlRnJhZ21lbnQuZ2V0SUQoKS5zdGFydHNXaXRoKGNoaWxkRnJhZ0lEKSl7Ci0gICAgSVhTREZyYWdtZW50IGRlbGVnYXRpb25GcmFnbWVudCA9IGF0dHJpYnV0ZUZyYWdtZW50LmdldFhTRERlbGVnYXRpb25GcmFnbWVudCgpOwotICAgIGZyYWdJRC5kZWxldGUoMCwgZnJhZ0lELmxlbmd0aCgpKTsKLSAgICBmcmFnSUQuYXBwZW5kKGRlbGVnYXRpb25GcmFnbWVudC5nZXRJRCgpKTsKLSAgICBhdHRyaWJ1dGUuZGVsZXRlKDAsIGF0dHJpYnV0ZS5sZW5ndGgoKSk7Ci0gICAgYXR0cmlidXRlLmFwcGVuZCgidHJ1ZSIpOwotICAgICAgJT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIHdpZHRoPTE2PgotICAgICAgICAgIDxpbWcgd2lkdGg9MTYgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9zcGFjZS5naWYiKSklPiI+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICAgIDx0ZD4KLSAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1mcmFnLmdldElEKCklPiIgdmFsdWU9IjwlPWF0dHJpYnV0ZUZyYWdtZW50LmdldElEKCklPiI+Ci0gICAgICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9IjwlPWRlbGVnYXRpb25GcmFnbWVudC5nZXRXcml0ZUZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLSAgICAgIDwvdGQ+Ci0gICAgIDwvdHI+Ci0gICAgCi0gICAgPCUKLSAgICB9Ci0gIH0gICAgCi19Ci0gICU+Ci08L3RhYmxlPgotPC9zcGFuPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRENvbXBsZXhTaW1wbGVDb250ZW50UkZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RDb21wbGV4U2ltcGxlQ29udGVudFJGcmFnbWVudEpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlYTQ5YmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRENvbXBsZXhTaW1wbGVDb250ZW50UkZyYWdtZW50SlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLTwlCi0vKioKLSogPGNvcHlyaWdodD4KLSoKLSogTGljZW5zZWQgTWF0ZXJpYWwgLSBQcm9wZXJ0eSBvZiBJQk0KLSogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwMiAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0qIFVTIEdvdmVybm1lbnQgVXNlcnMgUmVzdHJpY3RlZCBSaWdodHMgLSBVc2UsIGR1cGxpY2F0aW9uIG9yIGRpc2Nsb3N1cmUKLSogcmVzdHJpY3RlZCBieSBHU0EgQURQIFNjaGVkdWxlIENvbnRyYWN0IHdpdGggSUJNIENvcnAuCi0qCi0qIDwvY29weXJpZ2h0PgotKgotKiBGaWxlIHBsdWdpbnMvY29tLmlibS5ldG9vbHMud2Vic2VydmljZS5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEQ29tcGxleFJGcmFnbWVudEpTUC5qc3AsIHdzYS5ldG9vbHMud3MuZXhwbG9yZXIsIGx1bmFyLTUuMS4yIDEKLSogVmVyc2lvbiAxLjEgMDMvMDIvMjggMTU6MzM6NTcKLSovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iZWxlbWVudElEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iYXR0cmlidXRlIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBvcGVyTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQudG9TdHJpbmcoKSkpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpb3Blck5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLUlYU0RDb21wbGV4RnJhZ21lbnQgZnJhZyA9IChJWFNEQ29tcGxleEZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnSUQudG9TdHJpbmcoKSk7Ci1YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSBmcmFnLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci1TdHJpbmcgdGFibGVDb250YWluZXJJREJhc2UgPSAobmV3IFN0cmluZ0J1ZmZlcihGcmFnbWVudENvbnN0YW50cy5UQUJMRV9JRCkpLmFwcGVuZChmcmFnLmdldElEKCkpLnRvU3RyaW5nKCk7Ci1TdHJpbmcgdHdpc3RJbWFnZU5hbWVCYXNlID0gKG5ldyBTdHJpbmdCdWZmZXIoIngiKSkuYXBwZW5kKHRhYmxlQ29udGFpbmVySURCYXNlKS50b1N0cmluZygpOwotSVhTREZyYWdtZW50W10gY2hpbGRGcmFncyA9IGZyYWcuZ2V0QWxsRnJhZ21lbnRzKCk7Ci1mb3IgKGludCBpID0gMDsgaSA8IGNoaWxkRnJhZ3MubGVuZ3RoOyBpKyspIHsKLSAgZnJhZ0lELmRlbGV0ZSgwLCBmcmFnSUQubGVuZ3RoKCkpOwotICBmcmFnSUQuYXBwZW5kKGNoaWxkRnJhZ3NbaV0uZ2V0SUQoKSk7Ci0lPgotICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgIDx0cj4KLSAgICAgIDx0ZCBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPWkgKyB0YWJsZUNvbnRhaW5lcklEQmFzZSU+JywnPCU9aSArIHR3aXN0SW1hZ2VOYW1lQmFzZSU+JykiPjxpbWcgbmFtZT0iPCU9aSArIHR3aXN0SW1hZ2VOYW1lQmFzZSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0b3BlbmVkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX09QRU5FRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPgotICAgICAgPC90ZD4KLSAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICAgIDwlPWZyYWcuZ2V0TmFtZSgpJT4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLSAgPHNwYW4gaWQ9IjwlPWkgKyB0YWJsZUNvbnRhaW5lcklEQmFzZSU+Ij4KLSAgPHRhYmxlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBjbGFzcz0iPCU9KHhzZENvbmZpZy5nZXRJc1dTRExQYXJ0KCkgPyAiZml4ZnJhZ3RhYmxlIiA6ICJpbm5lcmZpeGZyYWd0YWJsZSIpJT4iPgotICAgIDx0cj4KLSAgICAgIDx0ZCB3aWR0aD0xNj4KLSAgICAgICAgPGltZyB3aWR0aD0xNiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3NwYWNlLmdpZiIpKSU+Ij4KLSAgICAgIDwvdGQ+Ci0gICAgICA8dGQ+Ci0gICAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1jaGlsZEZyYWdzW2ldLmdldFJlYWRGcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwlCi0KLSAgSVhTREF0dHJpYnV0ZUZyYWdtZW50W10gYXR0cmlidXRlRnJhZ21lbnRzID0gZnJhZy5nZXRBbGxBdHRyaWJ1dGVGcmFnbWVudHMoKTsKLSAgSVhTREF0dHJpYnV0ZUZyYWdtZW50IGF0dHJpYnV0ZUZyYWdtZW50OwotICBmb3IoaW50IGogPSAwOyBqIDwgYXR0cmlidXRlRnJhZ21lbnRzLmxlbmd0aDsgaisrKXsKLSAgICBhdHRyaWJ1dGVGcmFnbWVudCA9IGF0dHJpYnV0ZUZyYWdtZW50c1tqXTsKLSAgICAKLSAgICBpZihhdHRyaWJ1dGVGcmFnbWVudC5nZXRJRCgpLnN0YXJ0c1dpdGgoY2hpbGRGcmFnc1tpXS5nZXRJRCgpKSl7Ci0gICAgICBJWFNERnJhZ21lbnQgZGVsZWdhdGlvbkZyYWdtZW50ID0gYXR0cmlidXRlRnJhZ21lbnQuZ2V0WFNERGVsZWdhdGlvbkZyYWdtZW50KCk7Ci0gICAgICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gICAgICBmcmFnSUQuYXBwZW5kKGRlbGVnYXRpb25GcmFnbWVudC5nZXRJRCgpKTsKLSAgICAgIGF0dHJpYnV0ZS5kZWxldGUoMCwgYXR0cmlidXRlLmxlbmd0aCgpKTsKLSAgICAgIGF0dHJpYnV0ZS5hcHBlbmQoInRydWUiKTsKLSAgICAKLSAgICAgIAotICAgICAgJT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIHdpZHRoPTE2PgotICAgICAgICAgIDxpbWcgd2lkdGg9MTYgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9zcGFjZS5naWYiKSklPiI+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICAgIDx0ZD4KLSAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1mcmFnLmdldElEKCklPiIgdmFsdWU9IjwlPWF0dHJpYnV0ZUZyYWdtZW50LmdldElEKCklPiI+Ci0gICAgICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9IjwlPWRlbGVnYXRpb25GcmFnbWVudC5nZXRSZWFkRnJhZ21lbnQoKSU+IiBmbHVzaD0idHJ1ZSIvPgotICAgICAgPC90ZD4KLSAgICAgPC90cj4KLSAgICA8JQotICAgIAotICAgIAotICAgIH0gIAotICB9Ci19Ci0gICU+Ci0gIAotICA8L3RhYmxlPgotICA8L3NwYW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEQ29tcGxleFNpbXBsZUNvbnRlbnRSYW5nZVdGcmFnbWVudEpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEQ29tcGxleFNpbXBsZUNvbnRlbnRSYW5nZVdGcmFnbWVudEpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5NDJmMTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRENvbXBsZXhTaW1wbGVDb250ZW50UmFuZ2VXRnJhZ21lbnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTM3ICswLDAgQEAKLTwlCi0vKioKLSogPGNvcHlyaWdodD4KLSoKLSogTGljZW5zZWQgTWF0ZXJpYWwgLSBQcm9wZXJ0eSBvZiBJQk0KLSogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwMiAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0qIFVTIEdvdmVybm1lbnQgVXNlcnMgUmVzdHJpY3RlZCBSaWdodHMgLSBVc2UsIGR1cGxpY2F0aW9uIG9yIGRpc2Nsb3N1cmUKLSogcmVzdHJpY3RlZCBieSBHU0EgQURQIFNjaGVkdWxlIENvbnRyYWN0IHdpdGggSUJNIENvcnAuCi0qCi0qIDwvY29weXJpZ2h0PgotKgotKiBGaWxlIHBsdWdpbnMvY29tLmlibS5ldG9vbHMud2Vic2VydmljZS5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEQ29tcGxleFJhbmdlV0ZyYWdtZW50SlNQLmpzcCwgd3NhLmV0b29scy53cy5leHBsb3JlciwgbHVuYXItNS4xLjIgMgotKiBWZXJzaW9uIDEuMiAwNS8wNS8yNiAxNjoxODoyNAotKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImZyYWdJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5vZGVJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImVsZW1lbnRJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImF0dHJpYnV0ZSIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci0KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLU5vZGUgc2VsZWN0ZWROb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRC50b1N0cmluZygpKSk7Ci1XU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLUlYU0RDb21wbGV4RnJhZ21lbnQgZnJhZyA9IChJWFNEQ29tcGxleEZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnSUQudG9TdHJpbmcoKSk7Ci1JWFNERWxlbWVudEZyYWdtZW50IGVsZW1lbnRGcmFnbWVudCA9IChJWFNERWxlbWVudEZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChlbGVtZW50SUQudG9TdHJpbmcoKSk7Ci1YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSBmcmFnLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci1TdHJpbmcgdGFibGVDb250YWluZXJJRCA9IChuZXcgU3RyaW5nQnVmZmVyKEZyYWdtZW50Q29uc3RhbnRzLlRBQkxFX0lEKSkuYXBwZW5kKGZyYWcuZ2V0SUQoKSkudG9TdHJpbmcoKTsKLVN0cmluZyB0d2lzdEltYWdlTmFtZSA9IChuZXcgU3RyaW5nQnVmZmVyKCJ4IikpLmFwcGVuZCh0YWJsZUNvbnRhaW5lcklEKS50b1N0cmluZygpOwotU3RyaW5nIG5hbWVBbmNob3JJRCA9IChuZXcgU3RyaW5nQnVmZmVyKEZyYWdtZW50Q29uc3RhbnRzLk5BTUVfQU5DSE9SX0lEKSkuYXBwZW5kKGZyYWcuZ2V0SUQoKSkudG9TdHJpbmcoKTsKLSU+Ci08YSBuYW1lPSI8JT1uYW1lQW5jaG9ySUQlPiIvPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCc8JT10d2lzdEltYWdlTmFtZSU+JykiPjxpbWcgbmFtZT0iPCU9dHdpc3RJbWFnZU5hbWUlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdG9wZW5lZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9PUEVORUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5YU0RJbmZvRGlhbG9nKCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlblhTREluZm9EaWFsb2dBY3Rpb24uZ2V0QWN0aW9uTGluayhzZXNzaW9uLmdldElkKCksc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLGZyYWdJRC50b1N0cmluZygpKSkpJT4nKSI+PCU9ZnJhZy5nZXROYW1lKCklPjwvYT4KLSAgICA8L3RkPgotICAgIDwlIAotICAgICAgaWYoZWxlbWVudEZyYWdtZW50ICE9IG51bGwgJiYgZWxlbWVudEZyYWdtZW50LmlzTmlsbGFibGUoKSl7Ci0gICAgICAgIGlmKGVsZW1lbnRGcmFnbWVudC5pc05pbCgpKXsKLSAgICAgICAgICAlPiAgCi0gICAgICAgICAgPHRkIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPCU9KChJWFNERWxlbWVudEZyYWdtZW50KWVsZW1lbnRGcmFnbWVudCkuZ2V0TmlsSUQoKSU+IiB2YWx1ZT0iPCU9SVhTREVsZW1lbnRGcmFnbWVudC5OSUxfVkFMVUUlPiIgY2hlY2tlZD48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX05JTCIpJT48L3RkPiAKLSAgICAgICAgICA8JQotICAgICAgICB9IAotICAgICAgICBlbHNlewotICAgICAgICAgICU+ICAKLSAgICAgICAgICA8dGQgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSI8JT0oKElYU0RFbGVtZW50RnJhZ21lbnQpZWxlbWVudEZyYWdtZW50KS5nZXROaWxJRCgpJT4iIHZhbHVlPSI8JT1JWFNERWxlbWVudEZyYWdtZW50Lk5JTF9WQUxVRSU+IiA+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9OSUwiKSU+PC90ZD4gCi0gICAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgfQotICAgICU+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6Y3JlYXRlSW5zdGFuY2UoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsIDwlPXhzZENvbmZpZy5nZXRNYXhPY2N1cnMoKSU+LCAnPCU9ZnJhZ0lEJT4nLCAnPCU9bmFtZUFuY2hvcklEJT4nKSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19BREQiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6Y2hlY2tNaW5PY2N1cnNBbmRSZW1vdmVTZWxlY3RlZFJvd3NBdHRyaWJ1dGUoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsIDwlPXhzZENvbmZpZy5nZXRNaW5PY2N1cnMoKSU+KSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19SRU1PVkUiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTxzcGFuIGlkPSI8JT10YWJsZUNvbnRhaW5lcklEJT4iPgotPHRhYmxlIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0iPCU9KHhzZENvbmZpZy5nZXRJc1dTRExQYXJ0KCkgPyAicmFuZ2VmcmFndGFibGUiIDogImlubmVycmFuZ2VmcmFndGFibGUiKSU+Ij4KLSAgPHRyPgotICAgIDx0aCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJoYW5kbGVDaGVja0FsbENsaWNrKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLHRoaXMpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX0FMTF9DSEVDS19CT1giKSU+Ij48L3RoPgotICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0NPTlRFTlQiKSU+PC90aD4KLSAgPC90cj4KLSAgPCUKLSAKLSAgSVhTREZyYWdtZW50W10gY2hpbGRGcmFncyA9IGZyYWcuZ2V0QWxsRnJhZ21lbnRzKCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRGcmFncy5sZW5ndGggfHwgaSA8IHhzZENvbmZpZy5nZXRNaW5PY2N1cnMoKTsgaSsrKSB7Ci0gICAgSVhTREZyYWdtZW50IGNoaWxkRnJhZzsKLSAgICBTdHJpbmcgY2hpbGRGcmFnSUQ7Ci0gICAgaWYgKGkgPCBjaGlsZEZyYWdzLmxlbmd0aCkgewotICAgICAgY2hpbGRGcmFnID0gY2hpbGRGcmFnc1tpXTsKLSAgICAgIGNoaWxkRnJhZ0lEID0gY2hpbGRGcmFnLmdldElEKCk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgY2hpbGRGcmFnSUQgPSBmcmFnLmNyZWF0ZUNvbXBsZXhJbnN0YW5jZSgpOwotICAgICAgY2hpbGRGcmFnID0gZnJhZy5nZXRGcmFnbWVudChjaGlsZEZyYWdJRCk7Ci0gICAgfQotICAgIGZyYWdJRC5kZWxldGUoMCwgZnJhZ0lELmxlbmd0aCgpKTsKLSAgICBmcmFnSUQuYXBwZW5kKGNoaWxkRnJhZ0lEKTsKLSAgJT4KLSAgCi0gIDx0cj4KLSAgICA8dGQgY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPgotICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJoYW5kbGVSb3dDaGVja2JveENsaWNrKCkiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfUk9XX0NIRUNLX0JPWCIpJT4iPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPWZyYWcuZ2V0SUQoKSU+IiB2YWx1ZT0iPCU9Y2hpbGRGcmFnSUQlPiI+Ci0gICAgICA8anNwOmluY2x1ZGUgcGFnZT0iPCU9Y2hpbGRGcmFnLmdldFdyaXRlRnJhZ21lbnQoKSU+IiBmbHVzaD0idHJ1ZSIvPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci0gIAotICA8JQotICBJWFNEQXR0cmlidXRlRnJhZ21lbnRbXSBhdHRyaWJ1dGVGcmFnbWVudHMgPSBmcmFnLmdldEFsbEF0dHJpYnV0ZUZyYWdtZW50cygpOwotICBJWFNEQXR0cmlidXRlRnJhZ21lbnQgYXR0cmlidXRlRnJhZ21lbnQ7Ci0gIGZvcihpbnQgaiA9IDA7IGogPCBhdHRyaWJ1dGVGcmFnbWVudHMubGVuZ3RoOyBqKyspewotICAgIGF0dHJpYnV0ZUZyYWdtZW50ID0gYXR0cmlidXRlRnJhZ21lbnRzW2pdOwotICAgIAotICAgIGlmKGF0dHJpYnV0ZUZyYWdtZW50LmdldElEKCkuc3RhcnRzV2l0aChjaGlsZEZyYWdJRCkpewotICAgICAgSVhTREZyYWdtZW50IGRlbGVnYXRpb25GcmFnbWVudCA9IGF0dHJpYnV0ZUZyYWdtZW50LmdldFhTRERlbGVnYXRpb25GcmFnbWVudCgpOwotICAgICAgZnJhZ0lELmRlbGV0ZSgwLCBmcmFnSUQubGVuZ3RoKCkpOwotICAgICAgZnJhZ0lELmFwcGVuZChkZWxlZ2F0aW9uRnJhZ21lbnQuZ2V0SUQoKSk7Ci0gICAgICBhdHRyaWJ1dGUuZGVsZXRlKDAsIGF0dHJpYnV0ZS5sZW5ndGgoKSk7Ci0gICAgICBhdHRyaWJ1dGUuYXBwZW5kKCJ0cnVlIik7Ci0gICAgICAgJT4KLSAgICAgIAotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiIHdpZHRoPTEwPgotICAgICAgICAgIAotICAgICAgICA8L3RkPgotICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPWZyYWcuZ2V0SUQoKSU+IiB2YWx1ZT0iPCU9YXR0cmlidXRlRnJhZ21lbnQuZ2V0SUQoKSU+Ij4KLSAgICAgICAgICA8anNwOmluY2x1ZGUgcGFnZT0iPCU9ZGVsZWdhdGlvbkZyYWdtZW50LmdldFdyaXRlRnJhZ21lbnQoKSU+IiBmbHVzaD0idHJ1ZSIvPgotICAgICAgICA8L3RkPgotICAgICA8L3RyPgotICAgICA8JQotICAgIAotICAgIAotICAgIH0gIAotICB9Ci19Ci0lPgotPC90YWJsZT4KLTwvc3Bhbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0REZWZhdWx0SW5mb0ZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0REZWZhdWx0SW5mb0ZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2E4YWQ4Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNERGVmYXVsdEluZm9GcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyMDEgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS54c2QuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnczYy5kb20uRWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnczYy5kb20uTm9kZUxpc3QiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0ic2Vzc2lvbklEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUhCi1wcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWE1MTlNfTEFORyA9ICJ4bWw6bGFuZyI7Ci1wcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9YTUxOU19MQU5HID0gImVuLVVTIjsKLSU+Ci0KLTwlCi1IdHRwU2Vzc2lvbiBjdXJyZW50U2Vzc2lvbiA9IChIdHRwU2Vzc2lvbilhcHBsaWNhdGlvbi5nZXRBdHRyaWJ1dGUoc2Vzc2lvbklELnRvU3RyaW5nKCkpOwotQ29udHJvbGxlciBjb250cm9sbGVyID0gKENvbnRyb2xsZXIpY3VycmVudFNlc3Npb24uZ2V0QXR0cmlidXRlKCJjb250cm9sbGVyIik7Ci1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLU5vZGUgc2VsZWN0ZWROb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRC50b1N0cmluZygpKSk7Ci1XU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLUlYU0RGcmFnbWVudCBmcmFnID0gb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdJRC50b1N0cmluZygpKTsKLVhTRENvbXBvbmVudCB4c2RDb21wb25lbnQgPSBmcmFnLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCkuZ2V0WFNEQ29tcG9uZW50KCk7Ci1YU0RBbm5vdGF0aW9uIGFubm90YXRpb24gPSBudWxsOwotRUxpc3QgYXBwSW5mb0xpc3QgPSBudWxsOwotRUxpc3QgZG9jTGlzdCA9IG51bGw7Ci1pZiAoeHNkQ29tcG9uZW50IGluc3RhbmNlb2YgWFNEVHlwZURlZmluaXRpb24pCi0gIGFubm90YXRpb24gPSAoKFhTRFR5cGVEZWZpbml0aW9uKXhzZENvbXBvbmVudCkuZ2V0QW5ub3RhdGlvbigpOwotZWxzZSBpZiAoeHNkQ29tcG9uZW50IGluc3RhbmNlb2YgWFNERWxlbWVudERlY2xhcmF0aW9uKQotICBhbm5vdGF0aW9uID0gKChYU0RFbGVtZW50RGVjbGFyYXRpb24peHNkQ29tcG9uZW50KS5nZXRBbm5vdGF0aW9uKCk7Ci1pZiAoYW5ub3RhdGlvbiAhPSBudWxsKSB7Ci0gIGFwcEluZm9MaXN0ID0gYW5ub3RhdGlvbi5nZXRBcHBsaWNhdGlvbkluZm9ybWF0aW9uKCk7Ci0gIGRvY0xpc3QgPSBhbm5vdGF0aW9uLmdldFVzZXJJbmZvcm1hdGlvbigpOwotfQotU3RyaW5nIGFwcEluZm9Db250YWluZXJJRCA9ICI6OmFwcEluZm8iOwotU3RyaW5nIHhhcHBJbmZvQ29udGFpbmVySUQgPSAieDo6YXBwSW5mbyI7Ci1TdHJpbmcgZG9jdW1lbnRhdGlvbkNvbnRhaW5lcklEID0gIjo6ZG9jdW1lbnRhdGlvbiI7Ci1TdHJpbmcgeGRvY3VtZW50YXRpb25Db250YWluZXJJRCA9ICJ4Ojpkb2N1bWVudGF0aW9uIjsKLSU+Ci0KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBmdW5jdGlvbiB0d2lzdCh0YWJsZUNvbnRhaW5lcklkLHR3aXN0SW1hZ2VOYW1lKQotICB7Ci0gICAgdmFyIHRhYmxlQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFibGVDb250YWluZXJJZCk7Ci0gICAgdmFyIHR3aXN0SW1hZ2UgPSBkb2N1bWVudC5pbWFnZXNbdHdpc3RJbWFnZU5hbWVdOwotICAgIGlmICh0YWJsZUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID09ICJub25lIikKLSAgICB7Ci0gICAgICB0YWJsZUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gICAgICB0d2lzdEltYWdlLnNyYyA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdG9wZW5lZC5naWYiKSklPiI7Ci0gICAgICB0d2lzdEltYWdlLmFsdCA9ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfT1BFTkVEIikpJT4iOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgdGFibGVDb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKLSAgICAgIHR3aXN0SW1hZ2Uuc3JjID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0Y2xvc2VkLmdpZiIpKSU+IjsKLSAgICAgIHR3aXN0SW1hZ2UuYWx0ID0gIjwlPUhUTUxVdGlscy5KU01hbmdsZShjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9DTE9TRUQiKSklPiI7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gdHdpc3RDbG9zZSh0YWJsZUNvbnRhaW5lcklkKQotICB7Ci0gICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhYmxlQ29udGFpbmVySWQpLnN0eWxlLmRpc3BsYXkgPT0gIiIpCi0gICAgICB0d2lzdCh0YWJsZUNvbnRhaW5lcklkLCJ4Iit0YWJsZUNvbnRhaW5lcklkKTsKLSAgfQotPC9zY3JpcHQ+Ci0KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9YXBwSW5mb0NvbnRhaW5lcklEJT4nLCc8JT14YXBwSW5mb0NvbnRhaW5lcklEJT4nKSI+PGltZyBuYW1lPSI8JT14YXBwSW5mb0NvbnRhaW5lcklEJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RvcGVuZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfT1BFTkVEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICA8c3Ryb25nPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1hTRF9BUFBMSUNBVElPTl9JTkZPUk1BVElPTiIpJT48L3N0cm9uZz4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTxzcGFuIGlkPSI8JT1hcHBJbmZvQ29udGFpbmVySUQlPiI+Ci08dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gIDx0cj4KLSAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9MQU5HVUFHRSIpJT48L3RoPgotICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiIHdpZHRoPSIxMDAlIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9YU0RfQVBQTElDQVRJT05fSU5GT1JNQVRJT04iKSU+PC90aD4KLSAgPC90cj4KLSAgPCUKLSAgYm9vbGVhbiBvcGVuQXBwSW5mb1RhYmxlID0gZmFsc2U7Ci0gIGlmIChhcHBJbmZvTGlzdCAhPSBudWxsKSB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcHBJbmZvTGlzdC5zaXplKCk7IGkrKykgewotICAgICAgRWxlbWVudCBlID0gKEVsZW1lbnQpYXBwSW5mb0xpc3QuZ2V0KGkpOwotICAgICAgU3RyaW5nIGFwcEluZm9MYW5nID0gZS5nZXRBdHRyaWJ1dGUoWE1MTlNfTEFORyk7Ci0gICAgICBTdHJpbmcgYXBwSW5mb1RleHQgPSBudWxsOwotICAgICAgTm9kZUxpc3QgbmwgPSBlLmdldENoaWxkTm9kZXMoKTsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbmwuZ2V0TGVuZ3RoKCk7IGorKykgewotICAgICAgICBpZiAobmwuaXRlbShqKS5nZXROb2RlVHlwZSgpID09IG9yZy53M2MuZG9tLk5vZGUuVEVYVF9OT0RFKSB7Ci0gICAgICAgICAgYXBwSW5mb1RleHQgPSBubC5pdGVtKGopLmdldE5vZGVWYWx1ZSgpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAoYXBwSW5mb1RleHQgIT0gbnVsbCkKLSAgICAgIHsgCi0gICAgICAgIG9wZW5BcHBJbmZvVGFibGUgPSB0cnVlOwotICAgICAgICBpZiAoYXBwSW5mb1RleHQudHJpbSgpLmxlbmd0aCgpIDwgMSkKLSAgICAgICAgICBhcHBJbmZvVGV4dCA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiVEFCTEVfQkxBTktfUExBQ0VIT0xERVIiKTsKLSAgJT4KLSAgPHRyPgotICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+PCU9KChhcHBJbmZvTGFuZyAhPSBudWxsICYmIGFwcEluZm9MYW5nLmxlbmd0aCgpID4gMCkgPyBhcHBJbmZvTGFuZyA6IERFRkFVTFRfWE1MTlNfTEFORyklPjwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj48JT1hcHBJbmZvVGV4dCU+PC90ZD4KLSAgPC90cj4KLSAgPCUKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgJT4KLTwvdGFibGU+Ci08L3NwYW4+Ci08JQotaWYgKCFvcGVuQXBwSW5mb1RhYmxlKSB7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHR3aXN0Q2xvc2UoJzwlPWFwcEluZm9Db250YWluZXJJRCU+Jyk7Ci08L3NjcmlwdD4KLTwlCi19Ci0lPgotCi08dGFibGU+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTIwPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotCi08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPWRvY3VtZW50YXRpb25Db250YWluZXJJRCU+JywnPCU9eGRvY3VtZW50YXRpb25Db250YWluZXJJRCU+JykiPjxpbWcgbmFtZT0iPCU9eGRvY3VtZW50YXRpb25Db250YWluZXJJRCU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0b3BlbmVkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX09QRU5FRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgPHN0cm9uZz48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9YU0RfRE9DVU1FTlRBVElPTiIpJT48L3N0cm9uZz4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTxzcGFuIGlkPSI8JT1kb2N1bWVudGF0aW9uQ29udGFpbmVySUQlPiI+Ci08dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gIDx0cj4KLSAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9MQU5HVUFHRSIpJT48L3RoPgotICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiIHdpZHRoPSIxMDAlIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9YU0RfRE9DVU1FTlRBVElPTiIpJT48L3RoPgotICA8L3RyPgotICA8JQotICBib29sZWFuIG9wZW5Eb2NUYWJsZSA9IGZhbHNlOwotICBpZiAoZG9jTGlzdCAhPSBudWxsKSB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkb2NMaXN0LnNpemUoKTsgaSsrKSB7Ci0gICAgICBFbGVtZW50IGUgPSAoRWxlbWVudClkb2NMaXN0LmdldChpKTsKLSAgICAgIFN0cmluZyBkb2NMYW5nID0gZS5nZXRBdHRyaWJ1dGUoWE1MTlNfTEFORyk7Ci0gICAgICBTdHJpbmcgZG9jVGV4dCA9IG51bGw7Ci0gICAgICBOb2RlTGlzdCBubCA9IGUuZ2V0Q2hpbGROb2RlcygpOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBubC5nZXRMZW5ndGgoKTsgaisrKSB7Ci0gICAgICAgIGlmIChubC5pdGVtKGopLmdldE5vZGVUeXBlKCkgPT0gb3JnLnczYy5kb20uTm9kZS5URVhUX05PREUpIHsKLSAgICAgICAgICBkb2NUZXh0ID0gbmwuaXRlbShqKS5nZXROb2RlVmFsdWUoKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfSAgICAgIAotICAgICAgaWYgKGRvY1RleHQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgb3BlbkRvY1RhYmxlID0gdHJ1ZTsKLSAgICAgICAgaWYgKGRvY1RleHQudHJpbSgpLmxlbmd0aCgpIDwgMSkKLSAgICAgICAgICBkb2NUZXh0ID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJUQUJMRV9CTEFOS19QTEFDRUhPTERFUiIpOwotICAlPgotICA8dHI+Ci0gICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj48JT0oKGRvY0xhbmcgIT0gbnVsbCAmJiBkb2NMYW5nLmxlbmd0aCgpID4gMCkgPyBkb2NMYW5nIDogREVGQVVMVF9YTUxOU19MQU5HKSU+PC90ZD4KLSAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPjwlPWRvY1RleHQlPjwvdGQ+Ci0gIDwvdHI+Ci0gIDwlCi0gICAgICB9Ci0gICAgfQotICB9Ci0gICU+Ci08L3RhYmxlPgotPC9zcGFuPgotPCUKLWlmICghb3BlbkRvY1RhYmxlKSB7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHR3aXN0Q2xvc2UoJzwlPWRvY3VtZW50YXRpb25Db250YWluZXJJRCU+Jyk7Ci08L3NjcmlwdD4KLTwlCi19Ci0lPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRERlZmF1bHRSRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRERlZmF1bHRSRnJhZ21lbnRKU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzljOWYwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0REZWZhdWx0UkZyYWdtZW50SlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjIyICAgMTI3NDQzIGplc3BlckBzZWxza2FiZXQub3JnIC0gSmVzcGVyIFMgTW9sbGVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuTm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnczYy5kb20uRWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgueG1sLnJwYy5OYW1lc3BhY2VDb25zdGFudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC5IYXNodGFibGUiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotCi08JQotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci1Ob2RlIG9wZXJOb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRC50b1N0cmluZygpKSk7Ci1XU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClvcGVyTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVhTREZyYWdtZW50IGZyYWcgPSBvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZnJhZy5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotSGFzaHRhYmxlIHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlID0gbmV3IEhhc2h0YWJsZSgpOwotLy8gVE9ETzogUmVwbGFjZSAiU09BUC1FTlYiIGJ5IE5hbWVzcGFjZUNvbnN0YW50cy5OU1BSRUZJWF9TT0FQX0VOVkVMT1BFICg9InNvYXBlbnYiKQotc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUucHV0KE5hbWVzcGFjZUNvbnN0YW50cy5OU1VSSV9TT0FQX0VOVkVMT1BFLCJTT0FQLUVOViIpOwotc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUucHV0KE5hbWVzcGFjZUNvbnN0YW50cy5OU1VSSV9TQ0hFTUFfWFNJLE5hbWVzcGFjZUNvbnN0YW50cy5OU1BSRUZJWF9TQ0hFTUFfWFNJKTsKLXNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLnB1dChOYW1lc3BhY2VDb25zdGFudHMuTlNVUklfU0NIRU1BX1hTRCxOYW1lc3BhY2VDb25zdGFudHMuTlNQUkVGSVhfU0NIRU1BX1hTRCk7Ci1FbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMgPSBmcmFnLmdlbkluc3RhbmNlRG9jdW1lbnRzRnJvbVBhcmFtZXRlclZhbHVlcyghb3BlckVsZW1lbnQuaXNVc2VMaXRlcmFsKCksIHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLCBYTUxVdGlscy5jcmVhdGVOZXdEb2N1bWVudChudWxsKSk7Ci1TdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci1mb3IgKGludCBpID0gMDsgaSA8IGluc3RhbmNlRG9jdW1lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gIGlmIChpbnN0YW5jZURvY3VtZW50c1tpXSA9PSBudWxsKQotICAgIGNvbnRpbnVlOwotICBzYi5hcHBlbmQoWE1MVXRpbHMuc2VyaWFsaXplKGluc3RhbmNlRG9jdW1lbnRzW2ldLCB0cnVlKSk7Ci0gIHNiLmFwcGVuZChIVE1MVXRpbHMuTElORV9TRVBBUkFUT1IpOwotfQotJT4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGxhYmVsIGZvcj0iPCU9ZnJhZy5nZXRJRCgpJT4iPjwlPWZyYWcuZ2V0TmFtZSgpJT48L2xhYmVsPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPHRhYmxlIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0iPCU9KHhzZENvbmZpZy5nZXRJc1dTRExQYXJ0KCkgPyAiZml4ZnJhZ3RhYmxlIiA6ICJpbm5lcmZpeGZyYWd0YWJsZSIpJT4iPgotICA8dHI+Ci0gICAgPHRkPgotICAgICAgPHRleHRhcmVhIGlkPSI8JT1mcmFnLmdldElEKCklPiIgbmFtZT0iPCU9ZnJhZy5nZXRJRCgpJT4iIGNsYXNzPSJ0ZXh0YXJlYWVudGVyIiByZWFkb25seT48JT1IVE1MVXRpbHMuY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzU3RyaWN0KHNiLnRvU3RyaW5nKCkpJT48L3RleHRhcmVhPgotPCUKLSAgICAgIC8qCi0gICAgICBTdHJpbmdCdWZmZXIgdXJsID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgdXJsLmFwcGVuZChyZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIi93c2RsL2ZyYWdtZW50L1hTRERlZmF1bHRSRnJhZ21lbnRYTUwuanNwPyIpKSk7Ci0gICAgICB1cmwuYXBwZW5kKFdTRExBY3Rpb25JbnB1dHMuRlJBR01FTlRfSUQpLmFwcGVuZCgiPSIpLmFwcGVuZChmcmFnSUQpLmFwcGVuZCgiJiIpOwotICAgICAgdXJsLmFwcGVuZChBY3Rpb25JbnB1dHMuTk9ERUlEKS5hcHBlbmQoIj0iKS5hcHBlbmQobm9kZUlEKS5hcHBlbmQoIiYiKTsKLSAgICAgIHVybC5hcHBlbmQoQWN0aW9uSW5wdXRzLlNFU1NJT05JRCkuYXBwZW5kKCI9IikuYXBwZW5kKHNlc3Npb24uZ2V0SWQoKSk7Ci0gICAgICAqLwotJT4KLSAgICAgIDwhLS0KLSAgICAgIDxpZnJhbWUgc3JjPSIiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjE1MHB4Ij48L2lmcmFtZT4KLSAgICAgIC0tPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRERlZmF1bHRSRnJhZ21lbnRYTUwuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRERlZmF1bHRSRnJhZ21lbnRYTUwuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZWUwMzEzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0REZWZhdWx0UkZyYWdtZW50WE1MLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIyMiAgIDEyNzQ0MyBqZXNwZXJAc2Vsc2thYmV0Lm9yZyAtIEplc3BlciBTIE1vbGxlcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQveG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UueHNkLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy53M2MuZG9tLkVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy54bWwuc2F4LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy54bWwuc2F4LmhlbHBlcnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgueG1sLnJwYy5OYW1lc3BhY2VDb25zdGFudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LnhtbC5wYXJzZXJzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEuaW8uKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLioiICU+Ci08JQotU3RyaW5nIGZyYWdJRCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKFdTRExBY3Rpb25JbnB1dHMuRlJBR01FTlRfSUQpOwotU3RyaW5nIG5vZGVJRCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5OT0RFSUQpOwotU3RyaW5nIHNlc3Npb25JZCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpOwotSHR0cFNlc3Npb24gY3VycmVudFNlc3Npb24gPSAoSHR0cFNlc3Npb24pYXBwbGljYXRpb24uZ2V0QXR0cmlidXRlKHNlc3Npb25JZCk7Ci1Db250cm9sbGVyIGNvbnRyb2xsZXIgPSAoQ29udHJvbGxlciljdXJyZW50U2Vzc2lvbi5nZXRBdHRyaWJ1dGUoImNvbnRyb2xsZXIiKTsKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBvcGVyTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KW9wZXJOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1JWFNERnJhZ21lbnQgZnJhZyA9IG9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnSUQpOwotWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZnJhZy5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotSGFzaHRhYmxlIHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlID0gbmV3IEhhc2h0YWJsZSgpOwotLy8gVE9ETzogUmVwbGFjZSAiU09BUC1FTlYiIGJ5IE5hbWVzcGFjZUNvbnN0YW50cy5OU1BSRUZJWF9TT0FQX0VOVkVMT1BFICg9InNvYXBlbnYiKQotc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUucHV0KE5hbWVzcGFjZUNvbnN0YW50cy5OU1VSSV9TT0FQX0VOVkVMT1BFLCJTT0FQLUVOViIpOwotc29hcEVudmVsb3BlTmFtZXNwYWNlVGFibGUucHV0KE5hbWVzcGFjZUNvbnN0YW50cy5OU1VSSV9TQ0hFTUFfWFNJLE5hbWVzcGFjZUNvbnN0YW50cy5OU1BSRUZJWF9TQ0hFTUFfWFNJKTsKLXNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLnB1dChOYW1lc3BhY2VDb25zdGFudHMuTlNVUklfU0NIRU1BX1hTRCxOYW1lc3BhY2VDb25zdGFudHMuTlNQUkVGSVhfU0NIRU1BX1hTRCk7Ci1FbGVtZW50W10gaW5zdGFuY2VEb2N1bWVudHMgPSBuZXcgRWxlbWVudFswXTsKLVN0cmluZ0J1ZmZlciBzYiA9IG51bGw7Ci10cnkKLXsKLSAgaW5zdGFuY2VEb2N1bWVudHMgPSBmcmFnLmdlbkluc3RhbmNlRG9jdW1lbnRzRnJvbVBhcmFtZXRlclZhbHVlcyghb3BlckVsZW1lbnQuaXNVc2VMaXRlcmFsKCksIHNvYXBFbnZlbG9wZU5hbWVzcGFjZVRhYmxlLCBYTUxVdGlscy5jcmVhdGVOZXdEb2N1bWVudChudWxsKSk7Ci0gIGlmIChpbnN0YW5jZURvY3VtZW50cy5sZW5ndGggPT0gMSkKLSAgewotICAgIGJ5dGVbXSBiID0gWE1MVXRpbHMuc2VyaWFsaXplKGluc3RhbmNlRG9jdW1lbnRzWzBdLCB0cnVlKS5nZXRCeXRlcyhIVE1MVXRpbHMuVVRGOF9FTkNPRElORyk7Ci0gICAgQnl0ZUFycmF5SW5wdXRTdHJlYW0gYmFpcyA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShiKTsKLSAgICBTQVhQYXJzZXJGYWN0b3J5IHNheEZhY3RvcnkgPSBTQVhQYXJzZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0gICAgc2F4RmFjdG9yeS5zZXRWYWxpZGF0aW5nKHRydWUpOwotICAgIFNBWFBhcnNlciBzYXhQYXJzZXIgPSBzYXhGYWN0b3J5Lm5ld1NBWFBhcnNlcigpOwotICAgIHNheFBhcnNlci5wYXJzZShiYWlzLAotICAgICAgbmV3IERlZmF1bHRIYW5kbGVyKCkKLSAgICAgIHsKLSAgICAgICAgcHVibGljIHZvaWQgZXJyb3IoU0FYUGFyc2VFeGNlcHRpb24gZSkgdGhyb3dzIFNBWEV4Y2VwdGlvbgotICAgICAgICB7Ci0gICAgICAgICAgdGhyb3cgZTsKLSAgICAgICAgfQotICAgIAotICAgICAgICBwdWJsaWMgdm9pZCBmYXRhbEVycm9yKFNBWFBhcnNlRXhjZXB0aW9uIGUpIHRocm93cyBTQVhFeGNlcHRpb24KLSAgICAgICAgewotICAgICAgICAgIHRocm93IGU7Ci0gICAgICAgIH0KLSAgICAKLSAgICAgICAgcHVibGljIHZvaWQgd2FybmluZyhTQVhQYXJzZUV4Y2VwdGlvbiBlKSB0aHJvd3MgU0FYRXhjZXB0aW9uCi0gICAgICAgIHsKLSAgICAgICAgICB0aHJvdyBlOwotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICBiYWlzLmNsb3NlKCk7Ci0gICAgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKG5ldyBTdHJpbmcoYikpOwotICB9Ci19Ci1jYXRjaCAoVGhyb3dhYmxlIHQpCi17Ci19Ci1pZiAoc2IgPT0gbnVsbCkKLXsKLSU+Ci08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT1mcmFnLmdldE5hbWUoKSU+PC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotICBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIpOwotICBmb3IgKGludCBpID0gMDsgaSA8IGluc3RhbmNlRG9jdW1lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgaWYgKGluc3RhbmNlRG9jdW1lbnRzW2ldID09IG51bGwpCi0gICAgICBjb250aW51ZTsKLSAgICBzYi5hcHBlbmQoSFRNTFV0aWxzLmNoYXJhY3RlcnNUb0hUTUxFbnRpdGllc1N0cmljdChYTUxVdGlscy5zZXJpYWxpemUoaW5zdGFuY2VEb2N1bWVudHNbaV0sIHRydWUpKSk7Ci0gIH0KLSU+Ci08JT1zYi50b1N0cmluZygpJT4KLTwvYm9keT4KLTwvaHRtbD4KLTwlCi19Ci1lbHNlCi17Ci0lPgotPCU9c2IudG9TdHJpbmcoKSU+Ci08JQotfQotJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0REZWZhdWx0V0ZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0REZWZhdWx0V0ZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmU4NTIwZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNERGVmYXVsdFdGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIyMiAgIDEyNzQ0MyBqZXNwZXJAc2Vsc2thYmV0Lm9yZyAtIEplc3BlciBTIE1vbGxlcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImZyYWdJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5vZGVJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImVsZW1lbnRJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci0KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLU5vZGUgc2VsZWN0ZWROb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRC50b1N0cmluZygpKSk7Ci1XU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLUlYU0RGcmFnbWVudCBmcmFnID0gb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdJRC50b1N0cmluZygpKTsKLUlYU0RFbGVtZW50RnJhZ21lbnQgZWxlbWVudEZyYWdtZW50ID0gKElYU0RFbGVtZW50RnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGVsZW1lbnRJRC50b1N0cmluZygpKTsKLVhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IGZyYWcuZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLVN0cmluZyBwYXJhbSA9IGZyYWcuZ2V0UGFyYW1ldGVyVmFsdWUoZnJhZy5nZXRJRCgpLCAwKTsKLSU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxsYWJlbCBmb3I9IjwlPWZyYWcuZ2V0SUQoKSU+Ij48YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5YU0RJbmZvRGlhbG9nKCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlblhTREluZm9EaWFsb2dBY3Rpb24uZ2V0QWN0aW9uTGluayhzZXNzaW9uLmdldElkKCksc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLGZyYWdJRC50b1N0cmluZygpKSkpJT4nKSI+PCU9ZnJhZy5nZXROYW1lKCklPjwvYT48L2xhYmVsPgotICAgIDwvdGQ+Ci0gICAgPCUgCi0gICAgICBpZihlbGVtZW50RnJhZ21lbnQgIT0gbnVsbCAmJiBlbGVtZW50RnJhZ21lbnQuaXNOaWxsYWJsZSgpKXsKLSAgICAgICAgaWYoZWxlbWVudEZyYWdtZW50LmlzTmlsKCkpewotICAgICAgICAgICU+ICAKLSAgICAgICAgICA8dGQgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSI8JT0oKElYU0RFbGVtZW50RnJhZ21lbnQpZWxlbWVudEZyYWdtZW50KS5nZXROaWxJRCgpJT4iIHZhbHVlPSI8JT1JWFNERWxlbWVudEZyYWdtZW50Lk5JTF9WQUxVRSU+IiBjaGVja2VkPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTklMIiklPjwvdGQ+IAotICAgICAgICAgIDwlCi0gICAgICAgIH0gCi0gICAgICAgIGVsc2V7Ci0gICAgICAgICAgJT4gIAotICAgICAgICAgIDx0ZCB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9IjwlPSgoSVhTREVsZW1lbnRGcmFnbWVudCllbGVtZW50RnJhZ21lbnQpLmdldE5pbElEKCklPiIgdmFsdWU9IjwlPUlYU0RFbGVtZW50RnJhZ21lbnQuTklMX1ZBTFVFJT4iID48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX05JTCIpJT48L3RkPiAKLSAgICAgICAgICA8JQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgJT4KLSAgICA8dGQ+Ci0gICAgICA8JQotICAgICAgaWYgKCFmcmFnLnZhbGlkYXRlQWxsUGFyYW1ldGVyVmFsdWVzKCkpIHsKLSAgICAgICU+Ci0gICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci0gICAgICA8JQotICAgICAgfQotICAgICAgJT4KLSAgICA8L3RkPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08dGFibGUgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSI8JT0oeHNkQ29uZmlnLmdldElzV1NETFBhcnQoKSA/ICJmaXhmcmFndGFibGUiIDogImlubmVyZml4ZnJhZ3RhYmxlIiklPiI+Ci0gIDx0cj4KLSAgICA8dGQ+Ci0gICAgICA8dGV4dGFyZWEgaWQ9IjwlPWZyYWcuZ2V0SUQoKSU+IiBuYW1lPSI8JT1mcmFnLmdldElEKCklPiIgY2xhc3M9InRleHRhcmVhZW50ZXIiPjwlPSgocGFyYW0gIT0gbnVsbCkgPyBIVE1MVXRpbHMuY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzU3RyaWN0KHBhcmFtKSA6ICIiKSU+PC90ZXh0YXJlYT4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0REZWxlZ2F0aW9uUkZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0REZWxlZ2F0aW9uUkZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDA5MzFmMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNERGVsZWdhdGlvblJGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBvcGVyTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQudG9TdHJpbmcoKSkpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpb3Blck5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLUlYU0REZWxlZ2F0aW9uRnJhZ21lbnQgd3JhcHBlckZyYWdtZW50ID0gKElYU0REZWxlZ2F0aW9uRnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdJRC50b1N0cmluZygpKTsKLUlYU0RGcmFnbWVudCBkZWxlZ2F0aW9uRnJhZ21lbnQgPSB3cmFwcGVyRnJhZ21lbnQuZ2V0WFNERGVsZWdhdGlvbkZyYWdtZW50KCk7Ci1YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSB3cmFwcGVyRnJhZ21lbnQuZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLWZyYWdJRC5kZWxldGUoMCwgZnJhZ0lELmxlbmd0aCgpKTsKLWZyYWdJRC5hcHBlbmQoZGVsZWdhdGlvbkZyYWdtZW50LmdldElEKCkpOwotJT4KLTx0YWJsZSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gImZpeGZyYWd0YWJsZSIgOiAiaW5uZXJmaXhmcmFndGFibGUiKSU+Ij4KLSAgPHRyPgotICAgIDx0ZD4KLSAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1kZWxlZ2F0aW9uRnJhZ21lbnQuZ2V0UmVhZEZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0REZWxlZ2F0aW9uV0ZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0REZWxlZ2F0aW9uV0ZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzM0NjA3YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNERGVsZWdhdGlvbldGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVhTRERlbGVnYXRpb25GcmFnbWVudCB3cmFwcGVyRnJhZ21lbnQgPSAoSVhTRERlbGVnYXRpb25GcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotSVhTREZyYWdtZW50IGRlbGVnYXRpb25GcmFnbWVudCA9IHdyYXBwZXJGcmFnbWVudC5nZXRYU0REZWxlZ2F0aW9uRnJhZ21lbnQoKTsKLVhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IHdyYXBwZXJGcmFnbWVudC5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotZnJhZ0lELmRlbGV0ZSgwLCBmcmFnSUQubGVuZ3RoKCkpOwotZnJhZ0lELmFwcGVuZChkZWxlZ2F0aW9uRnJhZ21lbnQuZ2V0SUQoKSk7Ci0lPgotPHRhYmxlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBjbGFzcz0iPCU9KHhzZENvbmZpZy5nZXRJc1dTRExQYXJ0KCkgPyAiZml4ZnJhZ3RhYmxlIiA6ICJpbm5lcmZpeGZyYWd0YWJsZSIpJT4iPgotICA8dHI+Ci0gICAgPHRkPgotICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9IjwlPWRlbGVnYXRpb25GcmFnbWVudC5nZXRXcml0ZUZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RFbGVtZW50UkZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RFbGVtZW50UkZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJjMjYyOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNERWxlbWVudFJGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi08JQotLyoqCi0qIDxjb3B5cmlnaHQ+Ci0qCi0qIExpY2Vuc2VkIE1hdGVyaWFsIC0gUHJvcGVydHkgb2YgSUJNCi0qIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDIgLSBBbGwgUmlnaHRzIFJlc2VydmVkLgotKiBVUyBHb3Zlcm5tZW50IFVzZXJzIFJlc3RyaWN0ZWQgUmlnaHRzIC0gVXNlLCBkdXBsaWNhdGlvbiBvciBkaXNjbG9zdXJlCi0qIHJlc3RyaWN0ZWQgYnkgR1NBIEFEUCBTY2hlZHVsZSBDb250cmFjdCB3aXRoIElCTSBDb3JwLgotKgotKiA8L2NvcHlyaWdodD4KLSoKLSogRmlsZSBwbHVnaW5zL2NvbS5pYm0uZXRvb2xzLndlYnNlcnZpY2UuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRERlbGVnYXRpb25XRnJhZ21lbnRKU1AuanNwLCB3c2EuZXRvb2xzLndzLmV4cGxvcmVyLCBsdW5hci01LjEuMiwgMjAwMzEyMzFhIDEKLSogVmVyc2lvbiAxLjEgMDMvMDIvMjggMTU6MzQ6MDQKLSovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJlbGVtZW50SUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotCi08JQotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci1Ob2RlIHNlbGVjdGVkTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQudG9TdHJpbmcoKSkpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1JWFNERWxlbWVudEZyYWdtZW50IGVsZW1lbnRGcmFnbWVudCA9IChJWFNERWxlbWVudEZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnSUQudG9TdHJpbmcoKSk7Ci1JWFNERnJhZ21lbnQgZGVsZWdhdGlvbkZyYWdtZW50ID0gZWxlbWVudEZyYWdtZW50LmdldFhTRERlbGVnYXRpb25GcmFnbWVudCgpOwotWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZWxlbWVudEZyYWdtZW50LmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci1mcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci1mcmFnSUQuYXBwZW5kKGRlbGVnYXRpb25GcmFnbWVudC5nZXRJRCgpKTsKLWVsZW1lbnRJRC5kZWxldGUoMCwgZWxlbWVudElELmxlbmd0aCgpKTsKLWVsZW1lbnRJRC5hcHBlbmQoZWxlbWVudEZyYWdtZW50LmdldElEKCkpOwotJT4KLQotIAotCi08dGFibGUgIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBjbGFzcz0iPCU9KCJpbm5lcmZpeGZyYWd0YWJsZSIpJT4iPgotICA8dHI+Ci0gICAgPHRkPgotICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9IjwlPWRlbGVnYXRpb25GcmFnbWVudC5nZXRSZWFkRnJhZ21lbnQoKSU+IiBmbHVzaD0idHJ1ZSIvPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotCi0gCi0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RFbGVtZW50V0ZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RFbGVtZW50V0ZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDE1NjQ0YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNERWxlbWVudFdGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDMwNSAgIDExNzAzNCBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHNob3VsZCBzdXBwb3J0IFNPQVAgSGVhZGVycwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iZWxlbWVudElEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVhTREVsZW1lbnRGcmFnbWVudCBlbGVtZW50RnJhZ21lbnQgPSAoSVhTREVsZW1lbnRGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotSVhTREZyYWdtZW50IGRlbGVnYXRpb25GcmFnbWVudCA9IGVsZW1lbnRGcmFnbWVudC5nZXRYU0REZWxlZ2F0aW9uRnJhZ21lbnQoKTsKLVhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IGVsZW1lbnRGcmFnbWVudC5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotZnJhZ0lELmRlbGV0ZSgwLCBmcmFnSUQubGVuZ3RoKCkpOwotZnJhZ0lELmFwcGVuZChkZWxlZ2F0aW9uRnJhZ21lbnQuZ2V0SUQoKSk7Ci1lbGVtZW50SUQuZGVsZXRlKDAsIGVsZW1lbnRJRC5sZW5ndGgoKSk7Ci1lbGVtZW50SUQuYXBwZW5kKGVsZW1lbnRGcmFnbWVudC5nZXRJRCgpKTsKLSU+Ci0KLSAKLQotPHRhYmxlICBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gImZpeGZyYWd0YWJsZSIgOiAiaW5uZXJmaXhmcmFndGFibGUiKSU+Ij4KLSAgPHRyPgotICAgIDx0ZD4KLSAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1kZWxlZ2F0aW9uRnJhZ21lbnQuZ2V0V3JpdGVGcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLSAKLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTREVtcHR5UkZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RFbXB0eVJGcmFnbWVudEpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhM2NlZWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTREVtcHR5UkZyYWdtZW50SlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RFbXB0eVdGcmFnbWVudEpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNERW1wdHlXRnJhZ21lbnRKU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OWE0OTQzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RFbXB0eVdGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVhTREZyYWdtZW50IGZyYWcgPSBvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZnJhZy5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotaW50IG1pbk9jY3VycyA9IHhzZENvbmZpZy5nZXRNaW5PY2N1cnMoKTsKLWludCBtYXhPY2N1cnMgPSB4c2RDb25maWcuZ2V0TWF4T2NjdXJzKCk7Ci1pZiAobWluT2NjdXJzID09IG1heE9jY3VycykgewotJT4KLTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPWZyYWcuZ2V0SUQoKSU+IiB2YWx1ZT0iPCU9bWF4T2NjdXJzJT4iLz4KLTwlCi19IGVsc2UgewotICBTdHJpbmdbXSBwYXJhbXMgPSBmcmFnLmdldFBhcmFtZXRlclZhbHVlcyhmcmFnLmdldElEKCkpOwotJT4KLSAgPHRhYmxlIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0iPCU9KHhzZENvbmZpZy5nZXRJc1dTRExQYXJ0KCkgPyAiZml4ZnJhZ3RhYmxlIiA6ICJpbm5lcmZpeGZyYWd0YWJsZSIpJT4iPgotICAgIDx0cj4KLSAgICAgIDx0ZD4KLSAgICAgICAgPGxhYmVsIGZvcj0iPCU9ZnJhZy5nZXRJRCgpJT4iPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX09DQ1VSQU5DRSIpJT4mbmJzcDs8YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5YU0RJbmZvRGlhbG9nKCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlblhTREluZm9EaWFsb2dBY3Rpb24uZ2V0QWN0aW9uTGluayhzZXNzaW9uLmdldElkKCksc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLGZyYWdJRC50b1N0cmluZygpKSkpJT4nKSI+PCU9ZnJhZy5nZXROYW1lKCklPjwvYT48L2xhYmVsPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4KLSAgICAgIDx0ZD4KLSAgICAgIDwlCi0gICAgICBpZiAobWF4T2NjdXJzICE9IEZyYWdtZW50Q29uc3RhbnRzLlVOQk9VTkRFRCkgewotICAgICAgJT4KLSAgICAgICAgPHNlbGVjdCBpZD0iPCU9ZnJhZy5nZXRJRCgpJT4iIG5hbWU9IjwlPWZyYWcuZ2V0SUQoKSU+IiBjbGFzcz0ic2VsZWN0bGlzdCI+Ci0gICAgICAgIDwlCi0gICAgICAgIGZvciAoaW50IGkgPSBtaW5PY2N1cnM7IGkgPD0gbWF4T2NjdXJzOyBpKyspIHsKLSAgICAgICAgJT4KLSAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI8JT1pJT4iIDwlIGlmIChwYXJhbXMgIT0gbnVsbCAmJiBpID09IHBhcmFtcy5sZW5ndGgpIHsgJT5zZWxlY3RlZDwlIH0gJT4+PCU9aSU+Ci0gICAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgICAgJT4KLSAgICAgICAgPC9zZWxlY3Q+Ci0gICAgICA8JQotICAgICAgfSBlbHNlIHsKLSAgICAgICU+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iPCU9ZnJhZy5nZXRJRCgpJT4iIG5hbWU9IjwlPWZyYWcuZ2V0SUQoKSU+IiB2YWx1ZT0iPCU9KChwYXJhbXMgIT0gbnVsbCkgPyBTdHJpbmcudmFsdWVPZihwYXJhbXMubGVuZ3RoKSA6ICIiKSU+IiBjbGFzcz0idGFibGV0ZXh0ZW50ZXIiPgotICAgICAgPCUKLSAgICAgICAgaWYgKCFmcmFnLnZhbGlkYXRlUGFyYW1ldGVyVmFsdWVzKGZyYWcuZ2V0SUQoKSkpIHsKLSAgICAgICAgJT4KLSAgICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotICAgICAgICA8JQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAlPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPCUKLX0KLSU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBBbGxXRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTREdyb3VwQWxsV0ZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTU5MDI5Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBBbGxXRnJhZ21lbnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTkwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVhTREdyb3VwQWxsRnJhZ21lbnQgZnJhZyA9IChJWFNER3JvdXBBbGxGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZnJhZy5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotYm9vbGVhbiBlbmFibGVHcm91cCA9ICh4c2RDb25maWcuZ2V0TWluT2NjdXJzKCkgPiAwIHx8IGZyYWcuZ2V0R3JvdXBJRHMoKS5sZW5ndGggPiAwKTsKLVN0cmluZyB0YWJsZUNvbnRhaW5lcklEID0gKG5ldyBTdHJpbmdCdWZmZXIoRnJhZ21lbnRDb25zdGFudHMuVEFCTEVfSUQpKS5hcHBlbmQoZnJhZy5nZXRJRCgpKS50b1N0cmluZygpOwotU3RyaW5nIHR3aXN0SW1hZ2VOYW1lID0gKG5ldyBTdHJpbmdCdWZmZXIoIngiKSkuYXBwZW5kKHRhYmxlQ29udGFpbmVySUQpLnRvU3RyaW5nKCk7Ci1TdHJpbmcgZ3JvdXBJRCA9IGZyYWcuZ2V0R3JvdXBBbGxJbnN0YW5jZSgpOwotU3RyaW5nIGdyb3VwQ2hlY2tib3hJRCA9IChuZXcgU3RyaW5nQnVmZmVyKEZyYWdtZW50Q29uc3RhbnRzLlhTRF9BTExfR1JPVVBfSUQpKS5hcHBlbmQoZnJhZy5nZXRJRCgpKS50b1N0cmluZygpOwotU3RyaW5nIGdyb3VwTWVtYmVyUmFkaW9JRCA9IChuZXcgU3RyaW5nQnVmZmVyKGdyb3VwQ2hlY2tib3hJRCkpLmFwcGVuZChmcmFnLmdldElEKCkpLnRvU3RyaW5nKCk7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGZ1bmN0aW9uIGluaXRHcm91cEFsbCh0YWJsZUNvbnRhaW5lcklELCB0d2lzdEltYWdlTmFtZSwgZnJhZ0lELCBncm91cElELCBncm91cENoZWNrYm94SUQsIGVuYWJsZSkgewotICAgIHZhciBjaGVja2JveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGdyb3VwQ2hlY2tib3hJRCk7Ci0gICAgY2hlY2tib3guY2hlY2tlZCA9IGVuYWJsZTsKLSAgICBlbmFibGVHcm91cEFsbCh0YWJsZUNvbnRhaW5lcklELCB0d2lzdEltYWdlTmFtZSwgZnJhZ0lELCBncm91cElELCBjaGVja2JveCk7Ci0gIH0KLQotICBmdW5jdGlvbiBlbmFibGVHcm91cEFsbCh0YWJsZUNvbnRhaW5lcklELCB0d2lzdEltYWdlTmFtZSwgZnJhZ0lELCBncm91cElELCBjaGVja2JveCkgewotICAgIHZhciB0YWJsZUNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhYmxlQ29udGFpbmVySUQpOwotICAgIHZhciBjaGVja2JveFRhYmxlID0gY2hlY2tib3gucGFyZW50Tm9kZS5wYXJlbnROb2RlLnBhcmVudE5vZGU7Ci0gICAgaWYgKGNoZWNrYm94LmNoZWNrZWQpIHsKLSAgICAgIGlmICh0YWJsZUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID09ICJub25lIikKLSAgICAgICAgdHdpc3QodGFibGVDb250YWluZXJJRCwgdHdpc3RJbWFnZU5hbWUpOwotICAgICAgY2hlY2tib3gubmFtZSA9IGZyYWdJRDsKLSAgICAgIGNoZWNrYm94LnZhbHVlID0gZ3JvdXBJRDsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICBpZiAodGFibGVDb250YWluZXIuc3R5bGUuZGlzcGxheSA9PSAiIikKLSAgICAgICAgdHdpc3QodGFibGVDb250YWluZXJJRCwgdHdpc3RJbWFnZU5hbWUpOwotICAgICAgY2hlY2tib3gubmFtZSA9ICIiOwotICAgICAgY2hlY2tib3gudmFsdWUgPSAiIjsKLSAgICB9Ci0gICAgdmFyIHRkcyA9IGNoZWNrYm94VGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgdmFyIGNoZWNrYm94Q2VsbEluZGV4ID0gY2hlY2tib3gucGFyZW50Tm9kZS5jZWxsSW5kZXg7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZHMubGVuZ3RoOyBpKyspIHsKLSAgICAgIGlmIChpID09IGNoZWNrYm94Q2VsbEluZGV4IHx8IGNoZWNrYm94LmNoZWNrZWQpCi0gICAgICAgIHRkcy5pdGVtKGkpLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICAgIGVsc2UKLSAgICAgICAgdGRzLml0ZW0oaSkuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBncm91cEFsbE9yZGVyaW5nTW92ZVVwKHRhYmxlQ29udGFpbmVySUQpIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklEKTsKLSAgICBpZiAodGFibGUucm93c1tudW1iZXJPZkhlYWRlclJvd3NdLmNlbGxzWzBdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLml0ZW0oMCkuY2hlY2tlZCkgewotICAgICAgYWxlcnQoJzwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfQ0FOTk9UX01PVkVfRklSU1RfRUxFTUVOVF9VUCIpJT4nKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZm9yICh2YXIgaSA9IG51bWJlck9mSGVhZGVyUm93cyArIDE7IGkgPCB0YWJsZS5yb3dzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBpZiAodGFibGUucm93c1tpXS5jZWxsc1swXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKS5pdGVtKDApLmNoZWNrZWQpIHsKLSAgICAgICAgc3dhcFJvd3ModGFibGUsIGktMSwgaSk7Ci0gICAgICAgIHRhYmxlLnJvd3NbaS0xXS5jZWxsc1swXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKS5pdGVtKDApLmNoZWNrZWQgPSB0cnVlOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotICAgIGFsZXJ0KCc8JT1jb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT1RISU5HX1NFTEVDVEVEIiklPicpOwotICB9Ci0KLSAgZnVuY3Rpb24gZ3JvdXBBbGxPcmRlcmluZ01vdmVEb3duKHRhYmxlQ29udGFpbmVySUQpIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklEKTsKLSAgICBpZiAodGFibGUucm93c1t0YWJsZS5yb3dzLmxlbmd0aCAtIDFdLmNlbGxzWzBdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLml0ZW0oMCkuY2hlY2tlZCkgewotICAgICAgYWxlcnQoJzwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfQ0FOTk9UX01PVkVfTEFTVF9FTEVNRU5UX0RPV04iKSU+Jyk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGZvciAodmFyIGkgPSBudW1iZXJPZkhlYWRlclJvd3M7IGkgPCB0YWJsZS5yb3dzLmxlbmd0aCAtIDE7IGkrKykgewotICAgICAgaWYgKHRhYmxlLnJvd3NbaV0uY2VsbHNbMF0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IikuaXRlbSgwKS5jaGVja2VkKSB7Ci0gICAgICAgIHN3YXBSb3dzKHRhYmxlLCBpLCBpKzEpOwotICAgICAgICB0YWJsZS5yb3dzW2krMV0uY2VsbHNbMF0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IikuaXRlbSgwKS5jaGVja2VkID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgIH0KLSAgICBhbGVydCgnPCU9Y29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9USElOR19TRUxFQ1RFRCIpJT4nKTsKLSAgfQotCi0gIDwlCi0gIC8vIHJvd0luZGV4MSBtdXN0IGJlIHNtYWxsZXIgdGhhbiByb3dJbmRleDIgaW4gb3JkZXIgdG8gd29yawotICAlPgotICBmdW5jdGlvbiBzd2FwUm93cyh0YWJsZSwgcm93SW5kZXgxLCByb3dJbmRleDIpIHsKLSAgICB2YXIgcm93MUNoaWxkTm9kZXMgPSBjbG9uZUFycmF5KHRhYmxlLnJvd3Nbcm93SW5kZXgxXS5jaGlsZE5vZGVzKTsKLSAgICB2YXIgcm93MkNoaWxkTm9kZXMgPSBjbG9uZUFycmF5KHRhYmxlLnJvd3Nbcm93SW5kZXgyXS5jaGlsZE5vZGVzKTsKLSAgICB0YWJsZS5kZWxldGVSb3cocm93SW5kZXgyKTsKLSAgICB0YWJsZS5kZWxldGVSb3cocm93SW5kZXgxKTsKLSAgICB2YXIgcm93MSA9IHRhYmxlLmluc2VydFJvdyhyb3dJbmRleDEpOwotICAgIHZhciByb3cyID0gdGFibGUuaW5zZXJ0Um93KHJvd0luZGV4Mik7Ci0gICAgYXBwZW5kVG9Sb3cocm93MSwgcm93MkNoaWxkTm9kZXMpOwotICAgIGFwcGVuZFRvUm93KHJvdzIsIHJvdzFDaGlsZE5vZGVzKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGNsb25lQXJyYXkob2xkQXJyYXkpIHsKLSAgICB2YXIgYXJyYXlDbG9uZSA9IG5ldyBBcnJheSgpOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2xkQXJyYXkubGVuZ3RoOyBpKyspIHsKLSAgICAgIGFycmF5Q2xvbmVbaV0gPSBvbGRBcnJheVtpXS5jbG9uZU5vZGUodHJ1ZSk7Ci0gICAgfQotICAgIHJldHVybiBhcnJheUNsb25lOwotICB9Ci0KLSAgZnVuY3Rpb24gYXBwZW5kVG9Sb3cocm93LCBub2Rlc0FycmF5KSB7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlc0FycmF5Lmxlbmd0aDsgaSsrKSB7Ci0gICAgICByb3cuYXBwZW5kQ2hpbGQobm9kZXNBcnJheVtpXSk7Ci0gICAgfQotICB9Ci08L3NjcmlwdD4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9dGFibGVDb250YWluZXJJRCU+JywnPCU9dHdpc3RJbWFnZU5hbWUlPicpIj48aW1nIG5hbWU9IjwlPXR3aXN0SW1hZ2VOYW1lJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RvcGVuZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfT1BFTkVEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgPC90ZD4KLSAgICA8JQotICAgIGlmICh4c2RDb25maWcuZ2V0TWluT2NjdXJzKCkgPiAwKSB7Ci0gICAgJT4KLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1mcmFnLmdldElEKCklPiIgdmFsdWU9IjwlPWdyb3VwSUQlPiI+Ci0gICAgPCUKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgJT4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iPCU9Z3JvdXBDaGVja2JveElEJT4iIG5hbWU9IjwlPWZyYWcuZ2V0SUQoKSU+IiB2YWx1ZT0iPCU9Z3JvdXBJRCU+IiB0aXRsZT0iPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9FTkFCTEVfRElTQUJMRV9HUk9VUCIpJT4iIG9uQ2xpY2s9ImphdmFzY3JpcHQ6ZW5hYmxlR3JvdXBBbGwoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsICc8JT10d2lzdEltYWdlTmFtZSU+JywgJzwlPWZyYWcuZ2V0SUQoKSU+JywgJzwlPWdyb3VwSUQlPicsIHRoaXMpIiBjaGVja2VkPjxsYWJlbCBmb3I9IjwlPWdyb3VwQ2hlY2tib3hJRCU+Ij48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9FTkFCTEVfRElTQUJMRV9HUk9VUCIpJT48L2xhYmVsPgotICAgIDwvdGQ+Ci0gICAgPCUKLSAgICB9Ci0gICAgJT4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpncm91cEFsbE9yZGVyaW5nTW92ZVVwKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nKSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfR1JPVVBfQUxMX09SREVSSU5HX01PVkVfVVAiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6Z3JvdXBBbGxPcmRlcmluZ01vdmVEb3duKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nKSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfR1JPVVBfQUxMX09SREVSSU5HX01PVkVfRE9XTiIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPHNwYW4gaWQ9IjwlPXRhYmxlQ29udGFpbmVySUQlPiI+Ci08dGFibGUgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSI8JT0oeHNkQ29uZmlnLmdldElzV1NETFBhcnQoKSA/ICJyYW5nZWZyYWd0YWJsZSIgOiAiaW5uZXJyYW5nZWZyYWd0YWJsZSIpJT4iPgotICA8dHI+Ci0gICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciIgd2lkdGg9MTA+PC90aD4KLSAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9FTEVNRU5UUyIpJT48L3RoPgotICA8L3RyPgotICA8JQotICBJWFNERnJhZ21lbnRbXSBncm91cE1lbWJlckZyYWdtZW50cyA9IGZyYWcuZ2V0R3JvdXBNZW1iZXJGcmFnbWVudHMoZ3JvdXBJRCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZ3JvdXBNZW1iZXJGcmFnbWVudHMubGVuZ3RoOyBpKyspIHsKLSAgICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gICAgZnJhZ0lELmFwcGVuZChncm91cE1lbWJlckZyYWdtZW50c1tpXS5nZXRJRCgpKTsKLSAgJT4KLSAgPHRyPgotICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIGNsYXNzPSJyYWRpbyIgbmFtZT0iPCU9Z3JvdXBNZW1iZXJSYWRpb0lEJT4iIHZhbHVlPSI8JT1mcmFnSUQudG9TdHJpbmcoKSU+IiB0aXRsZT0iPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfRUxFTUVOVF9JTl9HUk9VUCIpJT4iPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIiB3aWR0aD0iMTAwJSI+Ci0gICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1ncm91cElEJT4iIHZhbHVlPSI8JT1mcmFnSUQudG9TdHJpbmcoKSU+Ij4KLSAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1ncm91cE1lbWJlckZyYWdtZW50c1tpXS5nZXRXcml0ZUZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLSAgICA8L3RkPgotICA8L3RyPgotICA8JQotICB9Ci0gICU+Ci08L3RhYmxlPgotPC9zcGFuPgotPCUKLWlmICghZW5hYmxlR3JvdXApIHsKLSU+Ci0gIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgIGluaXRHcm91cEFsbCgnPCU9dGFibGVDb250YWluZXJJRCU+JywgJzwlPXR3aXN0SW1hZ2VOYW1lJT4nLCAnPCU9ZnJhZy5nZXRJRCgpJT4nLCAnPCU9Z3JvdXBJRCU+JywgJzwlPWdyb3VwQ2hlY2tib3hJRCU+JywgPCU9ZW5hYmxlR3JvdXAlPik7Ci0gIDwvc2NyaXB0PgotPCUKLX0KLSU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBDaG9pY2VGaXhXRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTREdyb3VwQ2hvaWNlRml4V0ZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWMyM2RjMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBDaG9pY2VGaXhXRnJhZ21lbnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTE5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLnhzZC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGZ1bmN0aW9uIGNob29zZShzZWxlY3QpIHsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGVjdC5vcHRpb25zLmxlbmd0aDsgaSsrKSB7Ci0gICAgICB2YXIgdGFibGVDb250YWluZXJJRCA9ICc8JT1GcmFnbWVudENvbnN0YW50cy5UQUJMRV9JRCU+JzsKLSAgICAgIHRhYmxlQ29udGFpbmVySUQgKz0gc2VsZWN0Lm9wdGlvbnMoaSkudmFsdWU7Ci0gICAgICBzaG93VGFibGUodGFibGVDb250YWluZXJJRCwgc2VsZWN0Lm9wdGlvbnMoaSkuc2VsZWN0ZWQpOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIHNob3dUYWJsZSh0YWJsZUNvbnRhaW5lcklELCBzaG93KSB7Ci0gICAgdmFyIHRhYmxlQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFibGVDb250YWluZXJJRCk7Ci0gICAgaWYgKHNob3cpCi0gICAgICB0YWJsZUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gICAgZWxzZQotICAgICAgdGFibGVDb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKLSAgfQotPC9zY3JpcHQ+Ci0KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLU5vZGUgc2VsZWN0ZWROb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRC50b1N0cmluZygpKSk7Ci1XU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLUlYU0RHcm91cENob2ljZUZyYWdtZW50IGZyYWcgPSAoSVhTREdyb3VwQ2hvaWNlRnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdJRC50b1N0cmluZygpKTsKLVhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IGZyYWcuZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLSU+Ci08dGFibGUgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSI8JT0oeHNkQ29uZmlnLmdldElzV1NETFBhcnQoKSA/ICJyYW5nZWZyYWd0YWJsZSIgOiAiaW5uZXJyYW5nZWZyYWd0YWJsZSIpJT4iPgotICA8dHI+Ci0gICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciIgbm93cmFwPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0NIT0lDRVMiKSU+PC90aD4KLSAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIiB3aWR0aD0iMTAwJSIgbm93cmFwPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0VMRU1FTlRTIiklPjwvdGg+Ci0gIDwvdHI+Ci08JQotICBYU0RQYXJ0aWNsZVtdIGNob2ljZXMgPSBmcmFnLmdldENob2ljZXMoKTsKLSAgU3RyaW5nW10gZ3JvdXBJRHMgPSBmcmFnLmdldEdyb3VwSURzKCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgeHNkQ29uZmlnLmdldE1heE9jY3VycygpOyBpKyspIHsKLSAgICBTdHJpbmcgZ3JvdXBJRDsKLSAgICBpbnQgY2hvaWNlSW5kZXg7Ci0gICAgaWYgKGkgPCBncm91cElEcy5sZW5ndGgpIHsKLSAgICAgIGdyb3VwSUQgPSBncm91cElEc1tpXTsKLSAgICAgIGNob2ljZUluZGV4ID0gZnJhZy5nZXRDaG9pY2VJbmRleChncm91cElEKTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICBncm91cElEID0gZnJhZy5jcmVhdGVHcm91cENob2ljZUluc3RhbmNlKDApOwotICAgICAgY2hvaWNlSW5kZXggPSAwOwotICAgIH0KLSAgICBJWFNERnJhZ21lbnRbXSBjaG9pY2VGcmFncyA9IGZyYWcuZ2V0R3JvdXBNZW1iZXJGcmFnbWVudHMoZ3JvdXBJRCk7Ci0lPgotICAgIDx0cj4KLSAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPWZyYWcuZ2V0SUQoKSU+IiB2YWx1ZT0iPCU9Z3JvdXBJRCU+Ij4KLSAgICAgICAgPHNlbGVjdCBpZD0iPCU9Z3JvdXBJRCU+IiBuYW1lPSI8JT1ncm91cElEJT4iIG9uQ2hhbmdlPSJqYXZhc2NyaXB0OmNob29zZSh0aGlzKSIgdGl0bGU9IjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX0NIT0lDRVMiKSU+Ij4KLTwlCi0gICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjaG9pY2VGcmFncy5sZW5ndGg7IGorKykgewotICAgICAgICAgICAgWFNEQ29tcG9uZW50IHhzZENvbXBvbmVudCA9IGNob2ljZUZyYWdzW2pdLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCkuZ2V0WFNEQ29tcG9uZW50KCk7Ci0gICAgICAgICAgICBTdHJpbmcgbmFtZSA9ICIiOwotICAgICAgICAgICAgaWYoeHNkQ29tcG9uZW50IGluc3RhbmNlb2YgWFNERWxlbWVudERlY2xhcmF0aW9uKQotICAgICAgICAgICAgICBuYW1lID0gKChYU0RFbGVtZW50RGVjbGFyYXRpb24peHNkQ29tcG9uZW50KS5nZXRRTmFtZSgpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBuYW1lID0geHNkQ29tcG9uZW50LmdldEVsZW1lbnQoKS5nZXRUYWdOYW1lKCk7ICAKLSAgICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaiA9PSBjaG9pY2VJbmRleCkgewotJT4KLSAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iPCU9Y2hvaWNlRnJhZ3Nbal0uZ2V0SUQoKSU+IiBzZWxlY3RlZD48JT1uYW1lJT4KLTwlCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSU+Ci0gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjwlPWNob2ljZUZyYWdzW2pdLmdldElEKCklPiI+PCU9bmFtZSU+Ci08JQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSU+Ci0gICAgICAgIDwvc2VsZWN0PgotICAgICAgPC90ZD4KLSAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci08JQotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGNob2ljZUZyYWdzLmxlbmd0aDsgaisrKSB7Ci0gICAgICAgICAgZnJhZ0lELmRlbGV0ZSgwLCBmcmFnSUQubGVuZ3RoKCkpOwotICAgICAgICAgIGZyYWdJRC5hcHBlbmQoY2hvaWNlRnJhZ3Nbal0uZ2V0SUQoKSk7Ci0gICAgICAgICAgU3RyaW5nIGNob2ljZUZyYWdUYWJsZUNvbnRhaW5lcklEID0gKG5ldyBTdHJpbmdCdWZmZXIoRnJhZ21lbnRDb25zdGFudHMuVEFCTEVfSUQpKS5hcHBlbmQoY2hvaWNlRnJhZ3Nbal0uZ2V0SUQoKSkudG9TdHJpbmcoKTsKLSU+Ci0gICAgICAgICAgPHNwYW4gaWQ9IjwlPWNob2ljZUZyYWdUYWJsZUNvbnRhaW5lcklEJT4iPgotICAgICAgICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9IjwlPWNob2ljZUZyYWdzW2pdLmdldFdyaXRlRnJhZ21lbnQoKSU+IiBmbHVzaD0idHJ1ZSIvPgotICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgICAgICAgIHNob3dUYWJsZSgnPCU9Y2hvaWNlRnJhZ1RhYmxlQ29udGFpbmVySUQlPicsIDwlPShqID09IGNob2ljZUluZGV4KSU+KTsKLSAgICAgICAgICA8L3NjcmlwdD4KLTwlCi0gICAgICAgIH0KLSU+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci08JQotICB9Ci0lPgotPC90YWJsZT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RHcm91cENob2ljZVJGcmFnbWVudEpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBDaG9pY2VSRnJhZ21lbnRKU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTRjYzFjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RHcm91cENob2ljZVJGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImZyYWdJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5vZGVJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci0KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLU5vZGUgb3Blck5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KW9wZXJOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1JWFNER3JvdXBDaG9pY2VGcmFnbWVudCBmcmFnID0gKElYU0RHcm91cENob2ljZUZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnSUQudG9TdHJpbmcoKSk7Ci1YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSBmcmFnLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci1TdHJpbmcgdGFibGVDb250YWluZXJJREJhc2UgPSAobmV3IFN0cmluZ0J1ZmZlcihGcmFnbWVudENvbnN0YW50cy5UQUJMRV9JRCkpLmFwcGVuZChmcmFnLmdldElEKCkpLnRvU3RyaW5nKCk7Ci1TdHJpbmcgdHdpc3RJbWFnZU5hbWVCYXNlID0gKG5ldyBTdHJpbmdCdWZmZXIoIngiKSkuYXBwZW5kKHRhYmxlQ29udGFpbmVySURCYXNlKS50b1N0cmluZygpOwotU3RyaW5nW10gZ3JvdXBJRHMgPSBmcmFnLmdldEdyb3VwSURzKCk7Ci1pZiAoZ3JvdXBJRHMubGVuZ3RoID09IDEpIHsKLSAgaW50IGNob2ljZUluZGV4ID0gZnJhZy5nZXRDaG9pY2VJbmRleChncm91cElEc1swXSk7Ci0gIElYU0RGcmFnbWVudCBjaG9pY2VGcmFnID0gZnJhZy5nZXRHcm91cE1lbWJlckZyYWdtZW50cyhncm91cElEc1swXSlbY2hvaWNlSW5kZXhdOwotICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gIGZyYWdJRC5hcHBlbmQoY2hvaWNlRnJhZy5nZXRJRCgpKTsKLSU+Ci0gIDx0YWJsZSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gImZpeGZyYWd0YWJsZSIgOiAiaW5uZXJmaXhmcmFndGFibGUiKSU+Ij4KLSAgICA8dHI+Ci0gICAgICA8dGQ+Ci0gICAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1jaG9pY2VGcmFnLmdldFJlYWRGcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci08JQotfQotZWxzZSB7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZ3JvdXBJRHMubGVuZ3RoOyBpKyspIHsKLSAgICBpbnQgY2hvaWNlSW5kZXggPSBmcmFnLmdldENob2ljZUluZGV4KGdyb3VwSURzW2ldKTsKLSAgICBJWFNERnJhZ21lbnQgY2hvaWNlRnJhZyA9IGZyYWcuZ2V0R3JvdXBNZW1iZXJGcmFnbWVudHMoZ3JvdXBJRHNbaV0pW2Nob2ljZUluZGV4XTsKLSAgICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gICAgZnJhZ0lELmFwcGVuZChjaG9pY2VGcmFnLmdldElEKCkpOwotJT4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPWkgKyB0YWJsZUNvbnRhaW5lcklEQmFzZSU+JywnPCU9aSArIHR3aXN0SW1hZ2VOYW1lQmFzZSU+JykiPjxpbWcgbmFtZT0iPCU9aSArIHR3aXN0SW1hZ2VOYW1lQmFzZSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0b3BlbmVkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX09QRU5FRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPgotICAgICAgICA8L3RkPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgICAgIDwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0dST1VQX05VTUJFUiIsIFN0cmluZy52YWx1ZU9mKGkgKyAxKSklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICAgIDxzcGFuIGlkPSI8JT1pICsgdGFibGVDb250YWluZXJJREJhc2UlPiI+Ci0gICAgPHRhYmxlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBjbGFzcz0iPCU9KHhzZENvbmZpZy5nZXRJc1dTRExQYXJ0KCkgPyAiZml4ZnJhZ3RhYmxlIiA6ICJpbm5lcmZpeGZyYWd0YWJsZSIpJT4iPgotICAgICAgPHRyPgotICAgICAgICA8dGQgd2lkdGg9MTY+Ci0gICAgICAgICAgPGltZyB3aWR0aD0xNiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3NwYWNlLmdpZiIpKSU+Ij4KLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkPgotICAgICAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1jaG9pY2VGcmFnLmdldFJlYWRGcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gICAgPC9zcGFuPgotPCUKLSAgfQotfQotJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RHcm91cENob2ljZVJhbmdlV0ZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RHcm91cENob2ljZVJhbmdlV0ZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQ5MWI3Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBDaG9pY2VSYW5nZVdGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNTIgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UueHNkLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJlbGVtZW50SUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotCi08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgZnVuY3Rpb24gY2hvb3NlKHNlbGVjdCkgewotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZWN0Lm9wdGlvbnMubGVuZ3RoOyBpKyspIHsKLSAgICAgIHZhciB0YWJsZUNvbnRhaW5lcklEID0gJzwlPUZyYWdtZW50Q29uc3RhbnRzLlRBQkxFX0lEJT4nOwotICAgICAgdGFibGVDb250YWluZXJJRCArPSBzZWxlY3Qub3B0aW9ucyhpKS52YWx1ZTsKLSAgICAgIHNob3dUYWJsZSh0YWJsZUNvbnRhaW5lcklELCBzZWxlY3Qub3B0aW9ucyhpKS5zZWxlY3RlZCk7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gc2hvd1RhYmxlKHRhYmxlQ29udGFpbmVySUQsIHNob3cpIHsKLSAgICB2YXIgdGFibGVDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0YWJsZUNvbnRhaW5lcklEKTsKLSAgICBpZiAoc2hvdykKLSAgICAgIHRhYmxlQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICBlbHNlCi0gICAgICB0YWJsZUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotICB9Ci08L3NjcmlwdD4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVhTREdyb3VwQ2hvaWNlRnJhZ21lbnQgZnJhZyA9IChJWFNER3JvdXBDaG9pY2VGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotSVhTREVsZW1lbnRGcmFnbWVudCBlbGVtZW50RnJhZ21lbnQgPSAoSVhTREVsZW1lbnRGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZWxlbWVudElELnRvU3RyaW5nKCkpOwotWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZnJhZy5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotU3RyaW5nIHRhYmxlQ29udGFpbmVySUQgPSAobmV3IFN0cmluZ0J1ZmZlcihGcmFnbWVudENvbnN0YW50cy5UQUJMRV9JRCkpLmFwcGVuZChmcmFnLmdldElEKCkpLnRvU3RyaW5nKCk7Ci1TdHJpbmcgdHdpc3RJbWFnZU5hbWUgPSAobmV3IFN0cmluZ0J1ZmZlcigieCIpKS5hcHBlbmQodGFibGVDb250YWluZXJJRCkudG9TdHJpbmcoKTsKLVN0cmluZyBuYW1lQW5jaG9ySUQgPSAobmV3IFN0cmluZ0J1ZmZlcihGcmFnbWVudENvbnN0YW50cy5OQU1FX0FOQ0hPUl9JRCkpLmFwcGVuZChmcmFnLmdldElEKCkpLnRvU3RyaW5nKCk7Ci0lPgotPGEgbmFtZT0iPCU9bmFtZUFuY2hvcklEJT4iLz4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9dGFibGVDb250YWluZXJJRCU+JywnPCU9dHdpc3RJbWFnZU5hbWUlPicpIj48aW1nIG5hbWU9IjwlPXR3aXN0SW1hZ2VOYW1lJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RvcGVuZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfT1BFTkVEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpjcmVhdGVJbnN0YW5jZSgnPCU9dGFibGVDb250YWluZXJJRCU+JywgPCU9eHNkQ29uZmlnLmdldE1heE9jY3VycygpJT4sICc8JT1mcmFnSUQlPicsICc8JT1uYW1lQW5jaG9ySUQlPicpIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0FERCIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8JSAKLSAgICAgIGlmKGVsZW1lbnRGcmFnbWVudCAhPSBudWxsICYmIGVsZW1lbnRGcmFnbWVudC5pc05pbGxhYmxlKCkpewotICAgICAgICBpZihlbGVtZW50RnJhZ21lbnQuaXNOaWwoKSl7Ci0gICAgICAgICAgJT4gIAotICAgICAgICAgIDx0ZCB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9IjwlPSgoSVhTREVsZW1lbnRGcmFnbWVudCllbGVtZW50RnJhZ21lbnQpLmdldE5pbElEKCklPiIgdmFsdWU9IjwlPUlYU0RFbGVtZW50RnJhZ21lbnQuTklMX1ZBTFVFJT4iIGNoZWNrZWQ+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9OSUwiKSU+PC90ZD4gCi0gICAgICAgICAgPCUKLSAgICAgICAgfSAKLSAgICAgICAgZWxzZXsKLSAgICAgICAgICAlPiAgCi0gICAgICAgICAgPHRkIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPCU9KChJWFNERWxlbWVudEZyYWdtZW50KWVsZW1lbnRGcmFnbWVudCkuZ2V0TmlsSUQoKSU+IiB2YWx1ZT0iPCU9SVhTREVsZW1lbnRGcmFnbWVudC5OSUxfVkFMVUUlPiIgPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTklMIiklPjwvdGQ+IAotICAgICAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICAlPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmNoZWNrTWluT2NjdXJzQW5kUmVtb3ZlU2VsZWN0ZWRSb3dzKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCA8JT14c2RDb25maWcuZ2V0TWluT2NjdXJzKCklPikiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfUkVNT1ZFIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08c3BhbiBpZD0iPCU9dGFibGVDb250YWluZXJJRCU+Ij4KLTx0YWJsZSBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gInJhbmdlZnJhZ3RhYmxlIiA6ICJpbm5lcnJhbmdlZnJhZ3RhYmxlIiklPiI+Ci0gIDx0cj4KLSAgICA8dGggY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25DbGljaz0iaGFuZGxlQ2hlY2tBbGxDbGljaygnPCU9dGFibGVDb250YWluZXJJRCU+Jyx0aGlzKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9BTExfQ0hFQ0tfQk9YIiklPiI+PC90aD4KLSAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIiBub3dyYXA+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQ0hPSUNFUyIpJT48L3RoPgotICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiIHdpZHRoPSIxMDAlIiBub3dyYXA+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfRUxFTUVOVFMiKSU+PC90aD4KLSAgPC90cj4KLTwlCi0gIFhTRFBhcnRpY2xlW10gY2hvaWNlcyA9IGZyYWcuZ2V0Q2hvaWNlcygpOwotICBTdHJpbmdbXSBncm91cElEcyA9IGZyYWcuZ2V0R3JvdXBJRHMoKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBncm91cElEcy5sZW5ndGggfHwgaSA8IHhzZENvbmZpZy5nZXRNaW5PY2N1cnMoKTsgaSsrKSB7Ci0gICAgU3RyaW5nIGdyb3VwSUQ7Ci0gICAgaW50IGNob2ljZUluZGV4OwotICAgIGlmIChpIDwgZ3JvdXBJRHMubGVuZ3RoKSB7Ci0gICAgICBncm91cElEID0gZ3JvdXBJRHNbaV07Ci0gICAgICBjaG9pY2VJbmRleCA9IGZyYWcuZ2V0Q2hvaWNlSW5kZXgoZ3JvdXBJRCk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgZ3JvdXBJRCA9IGZyYWcuY3JlYXRlR3JvdXBDaG9pY2VJbnN0YW5jZSgwKTsKLSAgICAgIGNob2ljZUluZGV4ID0gMDsKLSAgICB9Ci0gICAgSVhTREZyYWdtZW50W10gY2hvaWNlRnJhZ3MgPSBmcmFnLmdldEdyb3VwTWVtYmVyRnJhZ21lbnRzKGdyb3VwSUQpOwotJT4KLSAgICA8dHI+Ci0gICAgICA8dGQgY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPgotICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9ImhhbmRsZVJvd0NoZWNrYm94Q2xpY2soKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9ST1dfQ0hFQ0tfQk9YIiklPiI+Ci0gICAgICA8L3RkPgotICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9ZnJhZy5nZXRJRCgpJT4iIHZhbHVlPSI8JT1ncm91cElEJT4iPgotICAgICAgICA8c2VsZWN0IGlkPSI8JT1ncm91cElEJT4iIG5hbWU9IjwlPWdyb3VwSUQlPiIgb25DaGFuZ2U9ImphdmFzY3JpcHQ6Y2hvb3NlKHRoaXMpIiB0aXRsZT0iPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQ0hPSUNFUyIpJT4iPgotPCUKLSAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGNob2ljZUZyYWdzLmxlbmd0aDsgaisrKSB7Ci0gICAgICAgICAgICBYU0RFbGVtZW50RGVjbGFyYXRpb24geHNkRWxlbWVudCA9IChYU0RFbGVtZW50RGVjbGFyYXRpb24pY2hvaWNlRnJhZ3Nbal0uZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKS5nZXRYU0RDb21wb25lbnQoKTsKLSAgICAgICAgICAgIGlmIChqID09IGNob2ljZUluZGV4KSB7Ci0lPgotICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI8JT1jaG9pY2VGcmFnc1tqXS5nZXRJRCgpJT4iIHNlbGVjdGVkPjwlPXhzZEVsZW1lbnQuZ2V0UU5hbWUoKSU+Ci08JQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0lPgotICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI8JT1jaG9pY2VGcmFnc1tqXS5nZXRJRCgpJT4iPjwlPXhzZEVsZW1lbnQuZ2V0UU5hbWUoKSU+Ci08JQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSU+Ci0gICAgICAgIDwvc2VsZWN0PgotICAgICAgPC90ZD4KLSAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci08JQotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGNob2ljZUZyYWdzLmxlbmd0aDsgaisrKSB7Ci0gICAgICAgICAgZnJhZ0lELmRlbGV0ZSgwLCBmcmFnSUQubGVuZ3RoKCkpOwotICAgICAgICAgIGZyYWdJRC5hcHBlbmQoY2hvaWNlRnJhZ3Nbal0uZ2V0SUQoKSk7Ci0gICAgICAgICAgU3RyaW5nIGNob2ljZUZyYWdUYWJsZUNvbnRhaW5lcklEID0gKG5ldyBTdHJpbmdCdWZmZXIoRnJhZ21lbnRDb25zdGFudHMuVEFCTEVfSUQpKS5hcHBlbmQoY2hvaWNlRnJhZ3Nbal0uZ2V0SUQoKSkudG9TdHJpbmcoKTsKLSU+Ci0gICAgICAgICAgPHNwYW4gaWQ9IjwlPWNob2ljZUZyYWdUYWJsZUNvbnRhaW5lcklEJT4iPgotICAgICAgICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9IjwlPWNob2ljZUZyYWdzW2pdLmdldFdyaXRlRnJhZ21lbnQoKSU+IiBmbHVzaD0idHJ1ZSIvPgotICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgICAgICAgIHNob3dUYWJsZSgnPCU9Y2hvaWNlRnJhZ1RhYmxlQ29udGFpbmVySUQlPicsIDwlPShqID09IGNob2ljZUluZGV4KSU+KTsKLSAgICAgICAgICA8L3NjcmlwdD4KLTwlCi0gICAgICAgIH0KLSU+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci08JQotICB9Ci0lPgotPC90YWJsZT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RHcm91cFJGcmFnbWVudEpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNER3JvdXBSRnJhZ21lbnRKU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MGQ3ZGI1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RHcm91cFJGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImZyYWdJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5vZGVJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci0KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLU5vZGUgb3Blck5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KW9wZXJOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1JWFNER3JvdXBGcmFnbWVudCBmcmFnID0gKElYU0RHcm91cEZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnSUQudG9TdHJpbmcoKSk7Ci1YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSBmcmFnLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci1TdHJpbmcgdGFibGVDb250YWluZXJJREJhc2UgPSAobmV3IFN0cmluZ0J1ZmZlcihGcmFnbWVudENvbnN0YW50cy5UQUJMRV9JRCkpLmFwcGVuZChmcmFnLmdldElEKCkpLnRvU3RyaW5nKCk7Ci1TdHJpbmcgdHdpc3RJbWFnZU5hbWVCYXNlID0gKG5ldyBTdHJpbmdCdWZmZXIoIngiKSkuYXBwZW5kKHRhYmxlQ29udGFpbmVySURCYXNlKS50b1N0cmluZygpOwotU3RyaW5nW10gZ3JvdXBJRHMgPSBmcmFnLmdldEdyb3VwSURzKCk7Ci1pZiAoZ3JvdXBJRHMubGVuZ3RoID09IDEpIHsKLSAgSVhTREZyYWdtZW50W10gZ3JvdXBNZW1iZXJGcmFnbWVudHMgPSBmcmFnLmdldEdyb3VwTWVtYmVyRnJhZ21lbnRzKGdyb3VwSURzWzBdKTsKLSU+Ci0gIDx0YWJsZSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gImZpeGZyYWd0YWJsZSIgOiAiaW5uZXJmaXhmcmFndGFibGUiKSU+Ij4KLTwlCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgZ3JvdXBNZW1iZXJGcmFnbWVudHMubGVuZ3RoOyBpKyspIHsKLSAgICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gICAgZnJhZ0lELmFwcGVuZChncm91cE1lbWJlckZyYWdtZW50c1tpXS5nZXRJRCgpKTsKLSU+Ci0gICAgPHRyPgotICAgICAgPHRkPgotICAgICAgICA8anNwOmluY2x1ZGUgcGFnZT0iPCU9Z3JvdXBNZW1iZXJGcmFnbWVudHNbaV0uZ2V0UmVhZEZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLTwlCi0gIH0KLSU+Ci0gIDwvdGFibGU+Ci08JQotfQotZWxzZSB7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZ3JvdXBJRHMubGVuZ3RoOyBpKyspIHsKLSAgICBJWFNERnJhZ21lbnRbXSBncm91cE1lbWJlckZyYWdtZW50cyA9IGZyYWcuZ2V0R3JvdXBNZW1iZXJGcmFnbWVudHMoZ3JvdXBJRHNbaV0pOwotJT4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPWkgKyB0YWJsZUNvbnRhaW5lcklEQmFzZSU+JywnPCU9aSArIHR3aXN0SW1hZ2VOYW1lQmFzZSU+JykiPjxpbWcgbmFtZT0iPCU9aSArIHR3aXN0SW1hZ2VOYW1lQmFzZSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0b3BlbmVkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX09QRU5FRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPgotICAgICAgICA8L3RkPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgICAgIDwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0dST1VQX05VTUJFUiIsIFN0cmluZy52YWx1ZU9mKGkgKyAxKSklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICAgIDxzcGFuIGlkPSI8JT1pICsgdGFibGVDb250YWluZXJJREJhc2UlPiI+Ci0gICAgPHRhYmxlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBjbGFzcz0iPCU9KHhzZENvbmZpZy5nZXRJc1dTRExQYXJ0KCkgPyAiZml4ZnJhZ3RhYmxlIiA6ICJpbm5lcmZpeGZyYWd0YWJsZSIpJT4iPgotPCUKLSAgICBmb3IgKGludCBqID0gMDsgaiA8IGdyb3VwTWVtYmVyRnJhZ21lbnRzLmxlbmd0aDsgaisrKSB7Ci0gICAgICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gICAgICBmcmFnSUQuYXBwZW5kKGdyb3VwTWVtYmVyRnJhZ21lbnRzW2pdLmdldElEKCkpOwotJT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIHdpZHRoPTE2PgotICAgICAgICAgIDxpbWcgd2lkdGg9MTYgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9zcGFjZS5naWYiKSklPiI+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICAgIDx0ZD4KLSAgICAgICAgICA8anNwOmluY2x1ZGUgcGFnZT0iPCU9Z3JvdXBNZW1iZXJGcmFnbWVudHNbal0uZ2V0UmVhZEZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci08JQotICAgIH0KLSU+Ci0gICAgPC90YWJsZT4KLSAgICA8L3NwYW4+Ci08JQotICB9Ci19Ci0lPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTREdyb3VwU2VxRml4V0ZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RHcm91cFNlcUZpeFdGcmFnbWVudEpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1ZDgxYzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTREdyb3VwU2VxRml4V0ZyYWdtZW50SlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotCi08JQotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci1Ob2RlIHNlbGVjdGVkTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQudG9TdHJpbmcoKSkpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1JWFNER3JvdXBTZXFGcmFnbWVudCBmcmFnID0gKElYU0RHcm91cFNlcUZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnSUQudG9TdHJpbmcoKSk7Ci1YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSBmcmFnLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci1TdHJpbmdbXSBncm91cElEcyA9IGZyYWcuZ2V0R3JvdXBJRHMoKTsKLWZvciAoaW50IGkgPSAwOyBpIDwgeHNkQ29uZmlnLmdldE1heE9jY3VycygpOyBpKyspIHsKLSAgU3RyaW5nIGdyb3VwSUQ7Ci0gIGlmIChpIDwgZ3JvdXBJRHMubGVuZ3RoKQotICAgIGdyb3VwSUQgPSBncm91cElEc1tpXTsKLSAgZWxzZQotICAgIGdyb3VwSUQgPSBmcmFnLmNyZWF0ZUdyb3VwU2VxSW5zdGFuY2UoKTsKLSAgSVhTREZyYWdtZW50W10gZ3JvdXBNZW1iZXJGcmFnbWVudHMgPSBmcmFnLmdldEdyb3VwTWVtYmVyRnJhZ21lbnRzKGdyb3VwSUQpOwotJT4KLSAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9ZnJhZy5nZXRJRCgpJT4iIHZhbHVlPSI8JT1ncm91cElEJT4iPgotICA8dGFibGUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGNsYXNzPSI8JT0oeHNkQ29uZmlnLmdldElzV1NETFBhcnQoKSA/ICJmaXhmcmFndGFibGUiIDogImlubmVyZml4ZnJhZ3RhYmxlIiklPiI+Ci08JQotICBmb3IgKGludCBqID0gMDsgaiA8IGdyb3VwTWVtYmVyRnJhZ21lbnRzLmxlbmd0aDsgaisrKSB7Ci0gICAgZnJhZ0lELmRlbGV0ZSgwLCBmcmFnSUQubGVuZ3RoKCkpOwotICAgIGZyYWdJRC5hcHBlbmQoZ3JvdXBNZW1iZXJGcmFnbWVudHNbal0uZ2V0SUQoKSk7Ci0lPgotICAgIDx0cj4KLSAgICAgIDx0ZD4KLSAgICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9IjwlPWdyb3VwTWVtYmVyRnJhZ21lbnRzW2pdLmdldFdyaXRlRnJhZ21lbnQoKSU+IiBmbHVzaD0idHJ1ZSIvPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotPCUKLSAgfQotJT4KLSAgPC90YWJsZT4KLTwlCi19Ci0lPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTREdyb3VwU2VxUmFuZ2VXRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTREdyb3VwU2VxUmFuZ2VXRnJhZ21lbnRKU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZmM0MWVhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RHcm91cFNlcVJhbmdlV0ZyYWdtZW50SlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImZyYWdJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5vZGVJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImVsZW1lbnRJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci0KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLU5vZGUgc2VsZWN0ZWROb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRC50b1N0cmluZygpKSk7Ci1XU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLUlYU0RHcm91cFNlcUZyYWdtZW50IGZyYWcgPSAoSVhTREdyb3VwU2VxRnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdJRC50b1N0cmluZygpKTsKLUlYU0RFbGVtZW50RnJhZ21lbnQgZWxlbWVudEZyYWdtZW50ID0gKElYU0RFbGVtZW50RnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGVsZW1lbnRJRC50b1N0cmluZygpKTsKLVhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IGZyYWcuZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLVN0cmluZyB0YWJsZUNvbnRhaW5lcklEID0gKG5ldyBTdHJpbmdCdWZmZXIoRnJhZ21lbnRDb25zdGFudHMuVEFCTEVfSUQpKS5hcHBlbmQoZnJhZy5nZXRJRCgpKS50b1N0cmluZygpOwotU3RyaW5nIHR3aXN0SW1hZ2VOYW1lID0gKG5ldyBTdHJpbmdCdWZmZXIoIngiKSkuYXBwZW5kKHRhYmxlQ29udGFpbmVySUQpLnRvU3RyaW5nKCk7Ci1TdHJpbmcgbmFtZUFuY2hvcklEID0gKG5ldyBTdHJpbmdCdWZmZXIoRnJhZ21lbnRDb25zdGFudHMuTkFNRV9BTkNIT1JfSUQpKS5hcHBlbmQoZnJhZy5nZXRJRCgpKS50b1N0cmluZygpOwotJT4KLTxhIG5hbWU9IjwlPW5hbWVBbmNob3JJRCU+Ii8+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsJzwlPXR3aXN0SW1hZ2VOYW1lJT4nKSI+PGltZyBuYW1lPSI8JT10d2lzdEltYWdlTmFtZSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0b3BlbmVkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX09QRU5FRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6Y3JlYXRlSW5zdGFuY2UoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsIDwlPXhzZENvbmZpZy5nZXRNYXhPY2N1cnMoKSU+LCAnPCU9ZnJhZ0lEJT4nLCAnPCU9bmFtZUFuY2hvcklEJT4nKSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19BREQiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPCUgCi0gICAgICBpZihlbGVtZW50RnJhZ21lbnQgIT0gbnVsbCAmJiBlbGVtZW50RnJhZ21lbnQuaXNOaWxsYWJsZSgpKXsKLSAgICAgICAgaWYoZWxlbWVudEZyYWdtZW50LmlzTmlsKCkpewotICAgICAgICAgICU+ICAKLSAgICAgICAgICA8dGQgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSI8JT0oKElYU0RFbGVtZW50RnJhZ21lbnQpZWxlbWVudEZyYWdtZW50KS5nZXROaWxJRCgpJT4iIHZhbHVlPSI8JT1JWFNERWxlbWVudEZyYWdtZW50Lk5JTF9WQUxVRSU+IiBjaGVja2VkPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTklMIiklPjwvdGQ+IAotICAgICAgICAgIDwlCi0gICAgICAgIH0gCi0gICAgICAgIGVsc2V7Ci0gICAgICAgICAgJT4gIAotICAgICAgICAgIDx0ZCB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9IjwlPSgoSVhTREVsZW1lbnRGcmFnbWVudCllbGVtZW50RnJhZ21lbnQpLmdldE5pbElEKCklPiIgdmFsdWU9IjwlPUlYU0RFbGVtZW50RnJhZ21lbnQuTklMX1ZBTFVFJT4iID48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX05JTCIpJT48L3RkPiAKLSAgICAgICAgICA8JQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgJT4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpjaGVja01pbk9jY3Vyc0FuZFJlbW92ZVNlbGVjdGVkUm93cygnPCU9dGFibGVDb250YWluZXJJRCU+JywgPCU9eHNkQ29uZmlnLmdldE1pbk9jY3VycygpJT4pIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX1JFTU9WRSIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPHNwYW4gaWQ9IjwlPXRhYmxlQ29udGFpbmVySUQlPiI+Ci08dGFibGUgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSI8JT0oeHNkQ29uZmlnLmdldElzV1NETFBhcnQoKSA/ICJyYW5nZWZyYWd0YWJsZSIgOiAiaW5uZXJyYW5nZWZyYWd0YWJsZSIpJT4iPgotICA8dHI+Ci0gICAgPHRoIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9ImhhbmRsZUNoZWNrQWxsQ2xpY2soJzwlPXRhYmxlQ29udGFpbmVySUQlPicsdGhpcykiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQUxMX0NIRUNLX0JPWCIpJT4iPjwvdGg+Ci0gICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfRUxFTUVOVFMiKSU+PC90aD4KLSAgPC90cj4KLSAgPCUKLSAgU3RyaW5nW10gZ3JvdXBJRHMgPSBmcmFnLmdldEdyb3VwSURzKCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZ3JvdXBJRHMubGVuZ3RoIHx8IGkgPCB4c2RDb25maWcuZ2V0TWluT2NjdXJzKCk7IGkrKykgewotICAgIFN0cmluZyBncm91cElEOwotICAgIGlmIChpIDwgZ3JvdXBJRHMubGVuZ3RoKQotICAgICAgZ3JvdXBJRCA9IGdyb3VwSURzW2ldOwotICAgIGVsc2UKLSAgICAgIGdyb3VwSUQgPSBmcmFnLmNyZWF0ZUdyb3VwU2VxSW5zdGFuY2UoKTsKLSAgICBJWFNERnJhZ21lbnRbXSBncm91cE1lbWJlckZyYWdtZW50cyA9IGZyYWcuZ2V0R3JvdXBNZW1iZXJGcmFnbWVudHMoZ3JvdXBJRCk7Ci0gICU+Ci0gIDx0cj4KLSAgICA8dGQgY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPgotICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJoYW5kbGVSb3dDaGVja2JveENsaWNrKCkiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfUk9XX0NIRUNLX0JPWCIpJT4iPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPWZyYWcuZ2V0SUQoKSU+IiB2YWx1ZT0iPCU9Z3JvdXBJRCU+Ij4KLSAgICAgIDwlCi0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgZ3JvdXBNZW1iZXJGcmFnbWVudHMubGVuZ3RoOyBqKyspIHsKLSAgICAgICAgICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gICAgICAgICAgZnJhZ0lELmFwcGVuZChncm91cE1lbWJlckZyYWdtZW50c1tqXS5nZXRJRCgpKTsKLSAgICAgICU+Ci0gICAgICA8anNwOmluY2x1ZGUgcGFnZT0iPCU9Z3JvdXBNZW1iZXJGcmFnbWVudHNbal0uZ2V0V3JpdGVGcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+Ci0gICAgICA8JQotICAgICAgICB9Ci0gICAgICAlPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci0gIDwlCi0gIH0KLSAgJT4KLTwvdGFibGU+Ci08L3NwYW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNESW5mb0RpYWxvZy5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNESW5mb0RpYWxvZy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2Yzg2ZWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTREluZm9EaWFsb2cuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLm5ldC4qIiAlPgotCi08JQotICAgU3RyaW5nIHNlc3Npb25JZCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpOwotICAgSHR0cFNlc3Npb24gY3VycmVudFNlc3Npb24gPSAoSHR0cFNlc3Npb24pYXBwbGljYXRpb24uZ2V0QXR0cmlidXRlKHNlc3Npb25JZCk7Ci0gICBDb250cm9sbGVyIGNvbnRyb2xsZXIgPSAoQ29udHJvbGxlciljdXJyZW50U2Vzc2lvbi5nZXRBdHRyaWJ1dGUoImNvbnRyb2xsZXIiKTsKLSAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgU3RyaW5nIG5vZGVJZCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5OT0RFSUQpOwotICAgU3RyaW5nIGZyYWdtZW50SWQgPSByZXF1ZXN0LmdldFBhcmFtZXRlcihXU0RMQWN0aW9uSW5wdXRzLkZSQUdNRU5UX0lEKTsKLSU+Ci08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT4KLSAgICA8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiVElUTEVfWFNEX0lORk9STUFUSU9OX0RJQUxPRyIpJT4KLSAgPC90aXRsZT4KLTwvaGVhZD4KLTxmcmFtZXNldCByb3dzPSIzMywqIiBib3JkZXI9MCBiZ2NvbG9yPSIjRUNFOUQ4Ij4KLTwlCi0gICBTdHJpbmdCdWZmZXIgbGluayA9IG5ldyBTdHJpbmdCdWZmZXIoIndzZGwvZnJhZ21lbnQvWFNESW5mb190b29sYmFyLmpzcD8iKTsKLSAgIGxpbmsuYXBwZW5kKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpLmFwcGVuZCgnPScpLmFwcGVuZChzZXNzaW9uSWQpOwotICAgbGluay5hcHBlbmQoJyYnKS5hcHBlbmQoQWN0aW9uSW5wdXRzLk5PREVJRCkuYXBwZW5kKCc9JykuYXBwZW5kKG5vZGVJZCk7Ci0gICBsaW5rLmFwcGVuZCgnJicpLmFwcGVuZChXU0RMQWN0aW9uSW5wdXRzLkZSQUdNRU5UX0lEKS5hcHBlbmQoJz0nKS5hcHBlbmQoZnJhZ21lbnRJZCk7Ci0lPgotICA8ZnJhbWUgbmFtZT0iPCU9V1NETEZyYW1lTmFtZXMuWFNEX0lORk9fVE9PTEJBUiU+IiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9YU0RfSU5GT1JNQVRJT05fVE9PTEJBUiIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGxpbmsudG9TdHJpbmcoKSkpJT4iIG5vcmVzaXplIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTAgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MD4KLTwlICAgICAgCi0gICBsaW5rLnNldExlbmd0aCgwKTsKLSAgIGxpbmsuYXBwZW5kKCJ3c2RsL2ZyYWdtZW50L1hTREluZm9fY29udGVudC5qc3A/Iik7Ci0gICBsaW5rLmFwcGVuZChBY3Rpb25JbnB1dHMuU0VTU0lPTklEKS5hcHBlbmQoJz0nKS5hcHBlbmQoc2Vzc2lvbklkKTsKLSAgIGxpbmsuYXBwZW5kKCcmJykuYXBwZW5kKEFjdGlvbklucHV0cy5OT0RFSUQpLmFwcGVuZCgnPScpLmFwcGVuZChub2RlSWQpOwotICAgbGluay5hcHBlbmQoJyYnKS5hcHBlbmQoV1NETEFjdGlvbklucHV0cy5GUkFHTUVOVF9JRCkuYXBwZW5kKCc9JykuYXBwZW5kKGZyYWdtZW50SWQpOwotJT4gIAotICA8ZnJhbWUgbmFtZT0iPCU9V1NETEZyYW1lTmFtZXMuWFNEX0lORk9fQ09OVEVOVCU+IiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9YU0RfSU5GT1JNQVRJT05fQ09OVEVOVCIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGxpbmsudG9TdHJpbmcoKSkpJT4iIG5vcmVzaXplIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTAgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MD4KLTwvZnJhbWVzZXQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNESW5mb19jb250ZW50LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RJbmZvX2NvbnRlbnQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MWVkMmFjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RJbmZvX2NvbnRlbnQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0ic2Vzc2lvbklEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBzZXNzaW9uSUQuYXBwZW5kKHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpKTsKLSAgIGZyYWdJRC5hcHBlbmQocmVxdWVzdC5nZXRQYXJhbWV0ZXIoV1NETEFjdGlvbklucHV0cy5GUkFHTUVOVF9JRCkpOwotCi0gICBIdHRwU2Vzc2lvbiBjdXJyZW50U2Vzc2lvbiA9IChIdHRwU2Vzc2lvbilhcHBsaWNhdGlvbi5nZXRBdHRyaWJ1dGUoc2Vzc2lvbklELnRvU3RyaW5nKCkpOwotICAgQ29udHJvbGxlciBjb250cm9sbGVyID0gKENvbnRyb2xsZXIpY3VycmVudFNlc3Npb24uZ2V0QXR0cmlidXRlKCJjb250cm9sbGVyIik7Ci0gICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgIG5vZGVJRC5hcHBlbmQocmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLk5PREVJRCkpOwotICAgTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLSAgIFdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgSVhTREZyYWdtZW50IGZyYWcgPSBvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotJT4KLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9YU0RfSU5GT1JNQVRJT05fQ09OVEVOVCIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotPGpzcDppbmNsdWRlIHBhZ2U9IjwlPWZyYWcuZ2V0SW5mb3JtYXRpb25GcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RJbmZvX3Rvb2xiYXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTREluZm9fdG9vbGJhci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1YTAwOGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTREluZm9fdG9vbGJhci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08JQotICAgU3RyaW5nIHNlc3Npb25JZCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpOwotICAgSHR0cFNlc3Npb24gY3VycmVudFNlc3Npb24gPSAoSHR0cFNlc3Npb24pYXBwbGljYXRpb24uZ2V0QXR0cmlidXRlKHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpKTsKLSAgIENvbnRyb2xsZXIgY29udHJvbGxlciA9IChDb250cm9sbGVyKWN1cnJlbnRTZXNzaW9uLmdldEF0dHJpYnV0ZSgiY29udHJvbGxlciIpOwotICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlIHNlbGVjdGVkTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChyZXF1ZXN0LmdldFBhcmFtZXRlcihBY3Rpb25JbnB1dHMuTk9ERUlEKSkpOwotICAgV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICBJWFNERnJhZ21lbnQgZnJhZyA9IG9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChyZXF1ZXN0LmdldFBhcmFtZXRlcihXU0RMQWN0aW9uSW5wdXRzLkZSQUdNRU5UX0lEKSk7ICAgCi0lPgotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1hTRF9JTkZPUk1BVElPTl9UT09MQkFSIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3Rvb2xiYXIuY3NzIikpJT4iPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBvblVubG9hZD0idG9wLm9wZW5lci54c2RJbmZvRGlhbG9nQ2xvc2VkPXRydWUiIGNsYXNzPSJ0b29sYmFyYm9keW1hcmdpbiI+Ci08ZGl2IGlkPSJ0b29sYmFyYm9yZGVyIj4KLSAgPGRpdiBpZD0idG9vbGJhciI+Ci0gICAgPHRhYmxlIHdpZHRoPSIxMDAlIiBoZWlnaHQ9MjUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGJvcmRlcj0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiIHdpZHRoPTI1IGhlaWdodD0yNT48aW1nIGNsYXNzPSJub3JtYWwiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvd3NkbC5naWYiKSklPiIgd2lkdGg9MTYgaGVpZ2h0PTE2PjwvdGQ+Ci0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImxlZnQiIHdpZHRoPSIqIiBoZWlnaHQ9MjUgbm93cmFwIGNsYXNzPSJ0ZXh0Ij48JT1mcmFnLmdldE5hbWUoKSU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgPC9kaXY+Ci08L2Rpdj4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICB0b3Aub3BlbmVyLnhzZEluZm9EaWFsb2dDbG9zZWQgPSBmYWxzZTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY0RhdGVUaW1lRml4V0ZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVBdG9taWNEYXRlVGltZUZpeFdGcmFnbWVudEpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlYzRkM2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY0RhdGVUaW1lRml4V0ZyYWdtZW50SlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjIyICAgMTI3NDQzIGplc3BlckBzZWxza2FiZXQub3JnIC0gSmVzcGVyIFMgTW9sbGVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQudXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC5pbXBsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UueHNkLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJlbGVtZW50SUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotCi08JQotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci1Ob2RlIHNlbGVjdGVkTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQudG9TdHJpbmcoKSkpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1TdHJpbmcgZnJhZ0lEU3RyaW5nID0gZnJhZ0lELnRvU3RyaW5nKCk7Ci1JWFNERnJhZ21lbnQgZnJhZyA9IG9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnSUQudG9TdHJpbmcoKSk7Ci1JWFNERWxlbWVudEZyYWdtZW50IGVsZW1lbnRGcmFnbWVudCA9IChJWFNERWxlbWVudEZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChlbGVtZW50SUQudG9TdHJpbmcoKSk7Ci1YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSBmcmFnLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci1YU0RTaW1wbGVUeXBlRGVmaW5pdGlvbiBzaW1wbGVUeXBlID0gKFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uKWZyYWcuZ2V0WFNEVHlwZURlZmluaXRpb24oKTsKLVhTRFR5cGVEZWZpbml0aW9uIHhzZEJ1aWx0SW5UeXBlID0gWFNEVHlwZURlZmluaXRpb25VdGlsLnJlc29sdmVUb1hTREJ1aWx0SW5UeXBlRGVmaW5pdGlvbihzaW1wbGVUeXBlKTsKLSU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxsYWJlbCBmb3I9IjwlPWZyYWdJRFN0cmluZyU+Ij48YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5YU0RJbmZvRGlhbG9nKCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlblhTREluZm9EaWFsb2dBY3Rpb24uZ2V0QWN0aW9uTGluayhzZXNzaW9uLmdldElkKCksc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLGZyYWdJRC50b1N0cmluZygpKSkpJT4nKSI+PCU9ZnJhZy5nZXROYW1lKCklPjwvYT48L2xhYmVsPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDwlPSh4c2RCdWlsdEluVHlwZSAhPSBudWxsID8geHNkQnVpbHRJblR5cGUuZ2V0TmFtZSgpIDogc2ltcGxlVHlwZS5nZXROYW1lKCkpJT4KLSAgICA8L3RkPgotICAgIDwlIAotICAgICAgaWYoZWxlbWVudEZyYWdtZW50ICE9IG51bGwgJiYgZWxlbWVudEZyYWdtZW50LmlzTmlsbGFibGUoKSl7Ci0gICAgICAgIGlmKGVsZW1lbnRGcmFnbWVudC5pc05pbCgpKXsKLSAgICAgICAgICAlPiAgCi0gICAgICAgICAgPHRkIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPCU9KChJWFNERWxlbWVudEZyYWdtZW50KWVsZW1lbnRGcmFnbWVudCkuZ2V0TmlsSUQoKSU+IiB2YWx1ZT0iPCU9SVhTREVsZW1lbnRGcmFnbWVudC5OSUxfVkFMVUUlPiIgY2hlY2tlZD48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX05JTCIpJT48L3RkPiAKLSAgICAgICAgICA8JQotICAgICAgICB9IAotICAgICAgICBlbHNlewotICAgICAgICAgICU+ICAKLSAgICAgICAgICA8dGQgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSI8JT0oKElYU0RFbGVtZW50RnJhZ21lbnQpZWxlbWVudEZyYWdtZW50KS5nZXROaWxJRCgpJT4iIHZhbHVlPSI8JT1JWFNERWxlbWVudEZyYWdtZW50Lk5JTF9WQUxVRSU+IiA+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9OSUwiKSU+PC90ZD4gCi0gICAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgfQotICAgICU+Ci0gICAgPHRkPgotICAgICAgPCUKLSAgICAgIGlmICghZnJhZy52YWxpZGF0ZVBhcmFtZXRlclZhbHVlcyhmcmFnSURTdHJpbmcpKSB7Ci0gICAgICAlPgotICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotICAgICAgPCUKLSAgICAgIH0KLSAgICAgICU+Ci0gICAgPC90ZD4KLSAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPHRhYmxlIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0iPCU9KHhzZENvbmZpZy5nZXRJc1dTRExQYXJ0KCkgPyAiZml4ZnJhZ3RhYmxlIiA6ICJpbm5lcmZpeGZyYWd0YWJsZSIpJT4iPgotICA8JQotICBmb3IgKGludCBpID0gMDsgaSA8IHhzZENvbmZpZy5nZXRNYXhPY2N1cnMoKTsgaSsrKSB7Ci0gICU+Ci0gIDx0cj4KLSAgICA8dGQgd2lkdGg9IjYwJSI+Ci0gICAgICA8JQotICAgICAgU3RyaW5nIHZhbHVlID0gZnJhZy5nZXRQYXJhbWV0ZXJWYWx1ZShmcmFnLmdldElEKCksIGkpOwotICAgICAgJT4KLSAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iPCU9ZnJhZy5nZXRJRCgpJT4iIG5hbWU9IjwlPWZyYWdJRFN0cmluZyU+IiB2YWx1ZT0iPCU9KCh2YWx1ZSAhPSBudWxsKSA/IEhUTUxVdGlscy5jaGFyYWN0ZXJzVG9IVE1MRW50aXRpZXNTdHJpY3QodmFsdWUpIDogIiIpJT4iIHNpemU9IjUwIiBjbGFzcz0idGFibGV0ZXh0ZW50ZXIiPgotICAgIDwvdGQ+Ci0gICAgPHRkIHZhbGlnbj0iY2VudGVyIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpvcGVuQ2FsZW5kYXJCcm93c2VyKDwlPXJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5DQUxFTkRBUl9UWVBFKSU+LCdjb250ZW50Ym9yZGVyJywnPCU9ZnJhZ0lEU3RyaW5nJT4nLDwlPWklPikiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0JST1dTRSIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgbm93cmFwIHdpZHRoPSIzMCUiPiZuYnNwOzwvdGQ+ICAgIAotICA8L3RyPgotICA8JQotICB9Ci0gICU+Ci08L3RhYmxlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY0RhdGVUaW1lUmFuZ2VXRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY0RhdGVUaW1lUmFuZ2VXRnJhZ21lbnRKU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjUyM2VhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVBdG9taWNEYXRlVGltZVJhbmdlV0ZyYWdtZW50SlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UueHNkLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJlbGVtZW50SUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVhTREZyYWdtZW50IGZyYWcgPSBvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotSVhTREVsZW1lbnRGcmFnbWVudCBlbGVtZW50RnJhZ21lbnQgPSAoSVhTREVsZW1lbnRGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZWxlbWVudElELnRvU3RyaW5nKCkpOwotWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZnJhZy5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotWFNEU2ltcGxlVHlwZURlZmluaXRpb24gc2ltcGxlVHlwZSA9IChYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbilmcmFnLmdldFhTRFR5cGVEZWZpbml0aW9uKCk7Ci1YU0RUeXBlRGVmaW5pdGlvbiB4c2RCdWlsdEluVHlwZSA9IFhTRFR5cGVEZWZpbml0aW9uVXRpbC5yZXNvbHZlVG9YU0RCdWlsdEluVHlwZURlZmluaXRpb24oc2ltcGxlVHlwZSk7Ci1TdHJpbmcgdGFibGVDb250YWluZXJJRCA9IChuZXcgU3RyaW5nQnVmZmVyKEZyYWdtZW50Q29uc3RhbnRzLlRBQkxFX0lEKSkuYXBwZW5kKGZyYWcuZ2V0SUQoKSkudG9TdHJpbmcoKTsKLVN0cmluZyB0d2lzdEltYWdlTmFtZSA9IChuZXcgU3RyaW5nQnVmZmVyKCJ4IikpLmFwcGVuZCh0YWJsZUNvbnRhaW5lcklEKS50b1N0cmluZygpOwotaW50IGNhbGVuZGFyVHlwZSA9IEludGVnZXIucGFyc2VJbnQocmVxdWVzdC5nZXRQYXJhbWV0ZXIoQWN0aW9uSW5wdXRzLkNBTEVOREFSX1RZUEUpKTsKLSU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsJzwlPXR3aXN0SW1hZ2VOYW1lJT4nKSI+PGltZyBuYW1lPSI8JT10d2lzdEltYWdlTmFtZSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0b3BlbmVkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX09QRU5FRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxsYWJlbCBmb3I9IjwlPWZyYWcuZ2V0SUQoKSU+Ij48YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5YU0RJbmZvRGlhbG9nKCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlblhTREluZm9EaWFsb2dBY3Rpb24uZ2V0QWN0aW9uTGluayhzZXNzaW9uLmdldElkKCksc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLGZyYWdJRC50b1N0cmluZygpKSkpJT4nKSI+PCU9ZnJhZy5nZXROYW1lKCklPjwvYT48L2xhYmVsPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDwlPSh4c2RCdWlsdEluVHlwZSAhPSBudWxsID8geHNkQnVpbHRJblR5cGUuZ2V0TmFtZSgpIDogc2ltcGxlVHlwZS5nZXROYW1lKCkpJT4KLSAgICA8L3RkPgotICAgIDwlIAotICAgICAgaWYoZWxlbWVudEZyYWdtZW50ICE9IG51bGwgJiYgZWxlbWVudEZyYWdtZW50LmlzTmlsbGFibGUoKSl7Ci0gICAgICAgIGlmKGVsZW1lbnRGcmFnbWVudC5pc05pbCgpKXsKLSAgICAgICAgICAlPiAgCi0gICAgICAgICAgPHRkIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPCU9KChJWFNERWxlbWVudEZyYWdtZW50KWVsZW1lbnRGcmFnbWVudCkuZ2V0TmlsSUQoKSU+IiB2YWx1ZT0iPCU9SVhTREVsZW1lbnRGcmFnbWVudC5OSUxfVkFMVUUlPiIgY2hlY2tlZD48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX05JTCIpJT48L3RkPiAKLSAgICAgICAgICA8JQotICAgICAgICB9IAotICAgICAgICBlbHNlewotICAgICAgICAgICU+ICAKLSAgICAgICAgICA8dGQgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSI8JT0oKElYU0RFbGVtZW50RnJhZ21lbnQpZWxlbWVudEZyYWdtZW50KS5nZXROaWxJRCgpJT4iIHZhbHVlPSI8JT1JWFNERWxlbWVudEZyYWdtZW50Lk5JTF9WQUxVRSU+IiA+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9OSUwiKSU+PC90ZD4gCi0gICAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgfQotICAgICAlPgotICAgIAotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmFkZFNpbXBsZUF0b21pY0RhdGVUaW1lUm93cyg8JT1jYWxlbmRhclR5cGUlPiwnPCU9dGFibGVDb250YWluZXJJRCU+JywgJzwlPWZyYWcuZ2V0SUQoKSU+JywgJzwlPWZyYWcuZ2V0SUQoKSU+JywgbnVsbCwgPCU9eHNkQ29uZmlnLmdldE1heE9jY3VycygpJT4pIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0FERCIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpjaGVja01pbk9jY3Vyc0FuZFJlbW92ZVNlbGVjdGVkRGF0ZVRpbWVSb3dzKDwlPWNhbGVuZGFyVHlwZSU+LCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLDwlPXhzZENvbmZpZy5nZXRNaW5PY2N1cnMoKSU+KSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19SRU1PVkUiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkPgotICAgICAgPCUKLSAgICAgIGlmICghZnJhZy52YWxpZGF0ZVBhcmFtZXRlclZhbHVlcyhmcmFnLmdldElEKCkpKSB7Ci0gICAgICAlPgotICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotICAgICAgPCUKLSAgICAgIH0KLSAgICAgICU+Ci0gICAgPC90ZD4KLSAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPHNwYW4gaWQ9IjwlPXRhYmxlQ29udGFpbmVySUQlPiI+Ci08dGFibGUgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSI8JT0oeHNkQ29uZmlnLmdldElzV1NETFBhcnQoKSA/ICJyYW5nZWZyYWd0YWJsZSIgOiAiaW5uZXJyYW5nZWZyYWd0YWJsZSIpJT4iPgotICA8dHI+Ci0gICAgPHRoIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9ImhhbmRsZUNoZWNrQWxsQ2xpY2soJzwlPXRhYmxlQ29udGFpbmVySUQlPicsdGhpcykiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQUxMX0NIRUNLX0JPWCIpJT4iPjwvdGg+Ci0gICAgPHRoIHdpZHRoPSI5MCUiIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVkFMVUVTIiklPjwvdGg+Ci0gICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0FDVElPTlMiKSU+PC90aD4KLSAgPC90cj4KLTwvdGFibGU+Ci08L3NwYW4+Ci08JQotU3RyaW5nW10gdmFsdWVzID0gZnJhZy5nZXRQYXJhbWV0ZXJWYWx1ZXMoZnJhZy5nZXRJRCgpKTsKLWludCBpID0gMDsKLWlmICh2YWx1ZXMgIT0gbnVsbCkgewotICBmb3IgKCA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHsKLSU+Ci0gICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICBhZGRTaW1wbGVBdG9taWNEYXRlVGltZVJvd3MoPCU9Y2FsZW5kYXJUeXBlJT4sIjwlPXRhYmxlQ29udGFpbmVySUQlPiIsIjwlPWZyYWcuZ2V0SUQoKSU+IiwiPCU9ZnJhZy5nZXRJRCgpJT4iLCI8JT12YWx1ZXNbaV0lPiIsPCU9eHNkQ29uZmlnLmdldE1heE9jY3VycygpJT4pOwotICAgIDwvc2NyaXB0PgotPCUKLSAgfQotfQotZm9yICggOyBpIDwgeHNkQ29uZmlnLmdldE1pbk9jY3VycygpOyBpKyspIHsKLSU+Ci0gIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgIGFkZFNpbXBsZUF0b21pY0RhdGVUaW1lUm93cyg8JT1jYWxlbmRhclR5cGUlPiwiPCU9dGFibGVDb250YWluZXJJRCU+IiwiPCU9ZnJhZy5nZXRJRCgpJT4iLCI8JT1mcmFnLmdldElEKCklPiIsbnVsbCw8JT14c2RDb25maWcuZ2V0TWF4T2NjdXJzKCklPik7Ci0gIDwvc2NyaXB0PgotPCUKLX0KLSU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlQXRvbWljRW51bUZpeFdGcmFnbWVudEpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlQXRvbWljRW51bUZpeFdGcmFnbWVudEpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5OTczMWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY0VudW1GaXhXRnJhZ21lbnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLnhzZC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iZWxlbWVudElEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgIE5vZGUgc2VsZWN0ZWROb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRC50b1N0cmluZygpKSk7Ci0gICBXU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgIFhTRFNpbXBsZUF0b21pY0VudW1GcmFnbWVudCBmcmFnID0gKFhTRFNpbXBsZUF0b21pY0VudW1GcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotICAgSVhTREVsZW1lbnRGcmFnbWVudCBlbGVtZW50RnJhZ21lbnQgPSAoSVhTREVsZW1lbnRGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZWxlbWVudElELnRvU3RyaW5nKCkpOwotICAgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZnJhZy5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotICAgWFNEU2ltcGxlVHlwZURlZmluaXRpb24gc2ltcGxlVHlwZSA9IChYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbilmcmFnLmdldFhTRFR5cGVEZWZpbml0aW9uKCk7Ci0gICBYU0RUeXBlRGVmaW5pdGlvbiB4c2RCdWlsdEluVHlwZSA9IFhTRFR5cGVEZWZpbml0aW9uVXRpbC5yZXNvbHZlVG9YU0RCdWlsdEluVHlwZURlZmluaXRpb24oc2ltcGxlVHlwZSk7Ci0lPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8bGFiZWwgZm9yPSI8JT1mcmFnLmdldElEKCklPiI+PGEgaHJlZj0iamF2YXNjcmlwdDpvcGVuWFNESW5mb0RpYWxvZygnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KE9wZW5YU0RJbmZvRGlhbG9nQWN0aW9uLmdldEFjdGlvbkxpbmsoc2Vzc2lvbi5nZXRJZCgpLHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSxmcmFnSUQudG9TdHJpbmcoKSkpKSU+JykiPjwlPWZyYWcuZ2V0TmFtZSgpJT48L2E+PC9sYWJlbD4KLSAgICA8L3RkPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8JT0oeHNkQnVpbHRJblR5cGUgIT0gbnVsbCA/IHhzZEJ1aWx0SW5UeXBlLmdldE5hbWUoKSA6IHNpbXBsZVR5cGUuZ2V0TmFtZSgpKSU+Ci0gICAgPC90ZD4KLSAgICAgIDwlIAotICAgICAgaWYoZWxlbWVudEZyYWdtZW50ICE9IG51bGwgJiYgZWxlbWVudEZyYWdtZW50LmlzTmlsbGFibGUoKSl7Ci0gICAgICAgIGlmKGVsZW1lbnRGcmFnbWVudC5pc05pbCgpKXsKLSAgICAgICAgICAlPiAgCi0gICAgICAgICAgPHRkIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPCU9KChJWFNERWxlbWVudEZyYWdtZW50KWVsZW1lbnRGcmFnbWVudCkuZ2V0TmlsSUQoKSU+IiB2YWx1ZT0iPCU9SVhTREVsZW1lbnRGcmFnbWVudC5OSUxfVkFMVUUlPiIgY2hlY2tlZD48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX05JTCIpJT48L3RkPiAKLSAgICAgICAgICA8JQotICAgICAgICB9IAotICAgICAgICBlbHNlewotICAgICAgICAgICU+ICAKLSAgICAgICAgICA8dGQgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSI8JT0oKElYU0RFbGVtZW50RnJhZ21lbnQpZWxlbWVudEZyYWdtZW50KS5nZXROaWxJRCgpJT4iIHZhbHVlPSI8JT1JWFNERWxlbWVudEZyYWdtZW50Lk5JTF9WQUxVRSU+IiA+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9OSUwiKSU+PC90ZD4gCi0gICAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgfQotICAgICAgJT4KLSAgICA8dGQ+Ci08JQotICAgaWYgKCFmcmFnLnZhbGlkYXRlUGFyYW1ldGVyVmFsdWVzKGZyYWcuZ2V0SUQoKSkpCi0gICB7Ci0lPgotICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotPCUKLSAgIH0KLSU+Ci0gICAgPC90ZD4KLSAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPHRhYmxlIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0iPCU9KHhzZENvbmZpZy5nZXRJc1dTRExQYXJ0KCkgPyAiZml4ZnJhZ3RhYmxlIiA6ICJpbm5lcmZpeGZyYWd0YWJsZSIpJT4iPgotPCUKLSAgIE9wdGlvblZlY3RvciBvcHRpb25WZWN0b3IgPSBmcmFnLmdldE9wdGlvblZlY3RvcigpOwotICAgZm9yIChpbnQgaSA9IDA7IGkgPCB4c2RDb25maWcuZ2V0TWF4T2NjdXJzKCk7IGkrKykKLSAgIHsKLSU+Ci0gIDx0cj4KLSAgICA8dGQ+Ci08JQotICAgICBTdHJpbmcgc2VsZWN0ZWRWYWx1ZSA9IGZyYWcuZ2V0UGFyYW1ldGVyVmFsdWUoZnJhZy5nZXRJRCgpLCBpKTsKLSU+Ci0gICAgICA8c2VsZWN0IGlkPSI8JT1mcmFnLmdldElEKCklPiIgbmFtZT0iPCU9ZnJhZy5nZXRJRCgpJT4iIGNsYXNzPSJzZWxlY3RsaXN0Ij4KLTwlICAgICAgICAgICAgICAKLSAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBvcHRpb25WZWN0b3Iuc2l6ZSgpOyBqKyspCi0gICAgIHsKLSAgICAgICBTdHJpbmcgZGlzcGxheVZhbHVlID0gb3B0aW9uVmVjdG9yLmdldERpc3BsYXlWYWx1ZShqKTsKLSAgICAgICBTdHJpbmcgdmFsdWUgPSBvcHRpb25WZWN0b3IuZ2V0VmFsdWUoaik7Ci0gICAgICAgaWYgKHZhbHVlLmVxdWFscyhzZWxlY3RlZFZhbHVlKSkKLSAgICAgICB7Ci0lPgotICAgICAgICA8b3B0aW9uIHZhbHVlPSI8JT12YWx1ZSU+IiBzZWxlY3RlZD48JT1kaXNwbGF5VmFsdWUlPgotPCUKLSAgICAgICB9Ci0gICAgICAgZWxzZQotICAgICAgIHsKLSU+Ci0gICAgICAgIDxvcHRpb24gdmFsdWU9IjwlPXZhbHVlJT4iPjwlPWRpc3BsYXlWYWx1ZSU+Ci08JQotICAgICAgIH0KLSAgICAgfQotJT4KLSAgICAgIDwvc2VsZWN0PgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08JQotICAgfQotICAlPgotPC90YWJsZT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVBdG9taWNFbnVtUmFuZ2VXRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY0VudW1SYW5nZVdGcmFnbWVudEpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxN2E5ZWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY0VudW1SYW5nZVdGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNjUgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UueHNkLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJlbGVtZW50SUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotCi08JQotICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICBOb2RlIHNlbGVjdGVkTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQudG9TdHJpbmcoKSkpOwotICAgV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICBYU0RTaW1wbGVBdG9taWNFbnVtRnJhZ21lbnQgZnJhZyA9IChYU0RTaW1wbGVBdG9taWNFbnVtRnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdJRC50b1N0cmluZygpKTsKLSAgIElYU0RFbGVtZW50RnJhZ21lbnQgZWxlbWVudEZyYWdtZW50ID0gKElYU0RFbGVtZW50RnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGVsZW1lbnRJRC50b1N0cmluZygpKTsKLSAgIE9wdGlvblZlY3RvciBvcHRpb25WZWN0b3IgPSBmcmFnLmdldE9wdGlvblZlY3RvcigpOwotICAgWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZnJhZy5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotICAgWFNEU2ltcGxlVHlwZURlZmluaXRpb24gc2ltcGxlVHlwZSA9IChYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbilmcmFnLmdldFhTRFR5cGVEZWZpbml0aW9uKCk7Ci0gICBYU0RUeXBlRGVmaW5pdGlvbiB4c2RCdWlsdEluVHlwZSA9IFhTRFR5cGVEZWZpbml0aW9uVXRpbC5yZXNvbHZlVG9YU0RCdWlsdEluVHlwZURlZmluaXRpb24oc2ltcGxlVHlwZSk7Ci0gICBTdHJpbmcgdGFibGVDb250YWluZXJJRCA9IChuZXcgU3RyaW5nQnVmZmVyKEZyYWdtZW50Q29uc3RhbnRzLlRBQkxFX0lEKSkuYXBwZW5kKGZyYWcuZ2V0SUQoKSkudG9TdHJpbmcoKTsKLSAgIFN0cmluZyB0d2lzdEltYWdlTmFtZSA9IChuZXcgU3RyaW5nQnVmZmVyKCJ4IikpLmFwcGVuZCh0YWJsZUNvbnRhaW5lcklEKS50b1N0cmluZygpOwotICAgU3RyaW5nIG9wdGlvbnNDb250YWluZXJJRCA9IChuZXcgU3RyaW5nQnVmZmVyKEZyYWdtZW50Q29uc3RhbnRzLlhTRF9BVE9NSUNfRU5VTV9JRCkpLmFwcGVuZChmcmFnLmdldElEKCkpLnRvU3RyaW5nKCk7Ci0lPgotPHNwYW4gaWQ9IjwlPW9wdGlvbnNDb250YWluZXJJRCU+Ij4KLTwlCi0gICBmb3IgKGludCBqID0gMDsgaiA8IG9wdGlvblZlY3Rvci5zaXplKCk7IGorKykgewotJT4KLSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1vcHRpb25zQ29udGFpbmVySUQlPiIgdmFsdWU9IjwlPW9wdGlvblZlY3Rvci5nZXREaXNwbGF5VmFsdWUoaiklPiI+Ci0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9b3B0aW9uc0NvbnRhaW5lcklEJT4iIHZhbHVlPSI8JT1vcHRpb25WZWN0b3IuZ2V0VmFsdWUoaiklPiI+Ci08JQotICAgfQotJT4KLTwvc3Bhbj4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBmdW5jdGlvbiBhZGRTaW1wbGVBdG9taWNFbnVtUm93cyh0YWJsZUNvbnRhaW5lcklELCBvcHRpb25zQ29udGFpbmVySUQsIGlkLCBuYW1lLCB2YWx1ZSwgbWF4T2NjdXJzKSB7Ci0gICAgaWYgKGNoZWNrTWF4T2NjdXJzUmVhY2hlZCh0YWJsZUNvbnRhaW5lcklELCBtYXhPY2N1cnMpKQotICAgICAgcmV0dXJuOwotICAgIHR3aXN0T3Blbih0YWJsZUNvbnRhaW5lcklEKTsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklEKTsKLSAgICB2YXIgdGFibGVCb2R5ID0gdGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IikuaXRlbSgwKTsKLSAgICB2YXIgbmV3Um93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKLSAgICB2YXIgY29sdW1uMCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdmFyIGNvbHVtbjEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotCi0gICAgdmFyIHJvd0NoZWNrYm94ID0gY3JlYXRlUm93Q2hlY2tib3goKTsKLSAgICBjb2x1bW4wLmFwcGVuZENoaWxkKHJvd0NoZWNrYm94KTsKLQotICAgIHZhciBzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKTsKLSAgICBjb2x1bW4xLmFwcGVuZENoaWxkKHNlbGVjdCk7Ci0gICAgc2VsZWN0LmlkID0gaWQ7Ci0gICAgc2VsZWN0Lm5hbWUgPSBuYW1lOwotICAgIHNlbGVjdC5jbGFzc05hbWUgPSAic2VsZWN0bGlzdCI7Ci0gICAgdmFyIG9wdGlvbnMgPSBnZXRPcHRpb25zKG9wdGlvbnNDb250YWluZXJJRCk7Ci0gICAgdmFyIGluZGV4ID0gMDsKLSAgICBmb3IgKHZhciBrID0gMDsgayA8IG9wdGlvbnMubGVuZ3RoOyBrICs9IDIpIHsKLSAgICAgIHNlbGVjdC5vcHRpb25zW2luZGV4XSA9IG5ldyBPcHRpb24ob3B0aW9uc1trXS52YWx1ZSxvcHRpb25zW2srMV0udmFsdWUpOwotICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUgPT0gb3B0aW9uc1trKzFdLnZhbHVlKQotICAgICAgICBzZWxlY3Qub3B0aW9uc1tpbmRleF0uc2VsZWN0ZWQgPSB0cnVlOwotICAgICAgaW5kZXgrKzsKLSAgICB9Ci0KLSAgICBjb2x1bW4wLmNsYXNzTmFtZSA9ICJjaGVja2JveGNlbGxzIjsKLSAgICBjb2x1bW4xLmNsYXNzTmFtZSA9ICJ0YWJsZWNlbGxzIjsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMCk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjEpOwotICAgIHRhYmxlQm9keS5hcHBlbmRDaGlsZChuZXdSb3cpOwotICB9Ci0KLSAgZnVuY3Rpb24gZ2V0T3B0aW9ucyhvcHRpb25zQ29udGFpbmVySUQpIHsKLSAgICB2YXIgb3B0aW9uc0NvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG9wdGlvbnNDb250YWluZXJJRCk7Ci0gICAgdmFyIG9wdGlvbnMgPSBvcHRpb25zQ29udGFpbmVyLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpOwotICAgIHJldHVybiBvcHRpb25zOwotICB9Ci08L3NjcmlwdD4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9dGFibGVDb250YWluZXJJRCU+JywnPCU9dHdpc3RJbWFnZU5hbWUlPicpIj48aW1nIG5hbWU9IjwlPXR3aXN0SW1hZ2VOYW1lJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RvcGVuZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfT1BFTkVEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGxhYmVsIGZvcj0iPCU9ZnJhZy5nZXRJRCgpJT4iPjxhIGhyZWY9ImphdmFzY3JpcHQ6b3BlblhTREluZm9EaWFsb2coJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChPcGVuWFNESW5mb0RpYWxvZ0FjdGlvbi5nZXRBY3Rpb25MaW5rKHNlc3Npb24uZ2V0SWQoKSxzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksZnJhZ0lELnRvU3RyaW5nKCkpKSklPicpIj48JT1mcmFnLmdldE5hbWUoKSU+PC9hPjwvbGFiZWw+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPCU9KHhzZEJ1aWx0SW5UeXBlICE9IG51bGwgPyB4c2RCdWlsdEluVHlwZS5nZXROYW1lKCkgOiBzaW1wbGVUeXBlLmdldE5hbWUoKSklPgotICAgIDwvdGQ+Ci0gICAgICA8JSAKLSAgICAgIGlmKGVsZW1lbnRGcmFnbWVudCAhPSBudWxsICYmIGVsZW1lbnRGcmFnbWVudC5pc05pbGxhYmxlKCkpewotICAgICAgICBpZihlbGVtZW50RnJhZ21lbnQuaXNOaWwoKSl7Ci0gICAgICAgICAgJT4gIAotICAgICAgICAgIDx0ZCB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9IjwlPSgoSVhTREVsZW1lbnRGcmFnbWVudCllbGVtZW50RnJhZ21lbnQpLmdldE5pbElEKCklPiIgdmFsdWU9IjwlPUlYU0RFbGVtZW50RnJhZ21lbnQuTklMX1ZBTFVFJT4iIGNoZWNrZWQ+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9OSUwiKSU+PC90ZD4gCi0gICAgICAgICAgPCUKLSAgICAgICAgfSAKLSAgICAgICAgZWxzZXsKLSAgICAgICAgICAlPiAgCi0gICAgICAgICAgPHRkIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPCU9KChJWFNERWxlbWVudEZyYWdtZW50KWVsZW1lbnRGcmFnbWVudCkuZ2V0TmlsSUQoKSU+IiB2YWx1ZT0iPCU9SVhTREVsZW1lbnRGcmFnbWVudC5OSUxfVkFMVUUlPiIgPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTklMIiklPjwvdGQ+IAotICAgICAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgICU+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6YWRkU2ltcGxlQXRvbWljRW51bVJvd3MoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsICc8JT1vcHRpb25zQ29udGFpbmVySUQlPicsICc8JT1mcmFnLmdldElEKCklPicsICc8JT1mcmFnLmdldElEKCklPicsIG51bGwsIDwlPXhzZENvbmZpZy5nZXRNYXhPY2N1cnMoKSU+KSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19BREQiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6Y2hlY2tNaW5PY2N1cnNBbmRSZW1vdmVTZWxlY3RlZFJvd3MoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsIDwlPXhzZENvbmZpZy5nZXRNaW5PY2N1cnMoKSU+KSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19SRU1PVkUiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkPgotICAgICAgPCUKLSAgICAgIGlmICghZnJhZy52YWxpZGF0ZVBhcmFtZXRlclZhbHVlcyhmcmFnLmdldElEKCkpKSB7Ci0gICAgICAlPgotICAgICAgPCU9SFRNTFV0aWxzLnJlZEFzdGVyaXNrKCklPgotICAgICAgPCUKLSAgICAgIH0KLSAgICAgICU+Ci0gICAgPC90ZD4KLSAgICA8dGQgbm93cmFwIHdpZHRoPSI5MCUiPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPHNwYW4gaWQ9IjwlPXRhYmxlQ29udGFpbmVySUQlPiI+Ci08dGFibGUgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSI8JT0oeHNkQ29uZmlnLmdldElzV1NETFBhcnQoKSA/ICJyYW5nZWZyYWd0YWJsZSIgOiAiaW5uZXJyYW5nZWZyYWd0YWJsZSIpJT4iPgotICA8dHI+Ci0gICAgPHRoIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9ImhhbmRsZUNoZWNrQWxsQ2xpY2soJzwlPXRhYmxlQ29udGFpbmVySUQlPicsdGhpcykiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQUxMX0NIRUNLX0JPWCIpJT4iPjwvdGg+Ci0gICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVkFMVUVTIiklPjwvdGg+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPC9zcGFuPgotPCUKLVN0cmluZ1tdIHZhbHVlcyA9IGZyYWcuZ2V0UGFyYW1ldGVyVmFsdWVzKGZyYWcuZ2V0SUQoKSk7Ci1pbnQgaSA9IDA7Ci1pZiAodmFsdWVzICE9IG51bGwpIHsKLSAgZm9yICggOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7Ci0lPgotICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgYWRkU2ltcGxlQXRvbWljRW51bVJvd3MoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsICc8JT1vcHRpb25zQ29udGFpbmVySUQlPicsICc8JT1mcmFnLmdldElEKCklPicsICc8JT1mcmFnLmdldElEKCklPicsICc8JT12YWx1ZXNbaV0lPicsICc8JT14c2RDb25maWcuZ2V0TWF4T2NjdXJzKCklPicpOwotICAgIDwvc2NyaXB0PgotPCUKLSAgfQotfQotZm9yICggOyBpIDwgeHNkQ29uZmlnLmdldE1pbk9jY3VycygpOyBpKyspIHsKLSU+Ci0gIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgIGFkZFNpbXBsZUF0b21pY0VudW1Sb3dzKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCAnPCU9b3B0aW9uc0NvbnRhaW5lcklEJT4nLCAnPCU9ZnJhZy5nZXRJRCgpJT4nLCAnPCU9ZnJhZy5nZXRJRCgpJT4nLCBudWxsLCAnPCU9eHNkQ29uZmlnLmdldE1heE9jY3VycygpJT4nKTsKLSAgPC9zY3JpcHQ+Ci08JQotfQotJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVBdG9taWNGaXhXRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY0ZpeFdGcmFnbWVudEpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiNmFkODEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY0ZpeFdGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDIyMiAgIDEyNzQ0MyBqZXNwZXJAc2Vsc2thYmV0Lm9yZyAtIEplc3BlciBTIE1vbGxlcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LnV0aWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuaW1wbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS54c2QuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImZyYWdJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5vZGVJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImVsZW1lbnRJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImF0dHJpYnV0ZSIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci0KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLU5vZGUgc2VsZWN0ZWROb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRC50b1N0cmluZygpKSk7Ci1XU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLUlYU0RGcmFnbWVudCBmcmFnID0gb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdJRC50b1N0cmluZygpKTsKLUlYU0RFbGVtZW50RnJhZ21lbnQgZWxlbWVudEZyYWdtZW50ID0gKElYU0RFbGVtZW50RnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGVsZW1lbnRJRC50b1N0cmluZygpKTsKLVhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IGZyYWcuZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLVhTRFNpbXBsZVR5cGVEZWZpbml0aW9uIHNpbXBsZVR5cGUgPSAoWFNEU2ltcGxlVHlwZURlZmluaXRpb24pZnJhZy5nZXRYU0RUeXBlRGVmaW5pdGlvbigpOwotWFNEVHlwZURlZmluaXRpb24geHNkQnVpbHRJblR5cGUgPSBYU0RUeXBlRGVmaW5pdGlvblV0aWwucmVzb2x2ZVRvWFNEQnVpbHRJblR5cGVEZWZpbml0aW9uKHNpbXBsZVR5cGUpOwotYm9vbGVhbiBhdHRyaWJ1dGVCb29sID0gQm9vbGVhbi52YWx1ZU9mKGF0dHJpYnV0ZS50b1N0cmluZygpKS5ib29sZWFuVmFsdWUoKSA7Ci0KLSU+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxsYWJlbCBmb3I9IjwlPWZyYWcuZ2V0SUQoKSU+Ij48YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5YU0RJbmZvRGlhbG9nKCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlblhTREluZm9EaWFsb2dBY3Rpb24uZ2V0QWN0aW9uTGluayhzZXNzaW9uLmdldElkKCksc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLGZyYWdJRC50b1N0cmluZygpKSkpJT4nKSI+PCU9ZnJhZy5nZXROYW1lKCklPjwvYT48L2xhYmVsPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDwlPSh4c2RCdWlsdEluVHlwZSAhPSBudWxsID8geHNkQnVpbHRJblR5cGUuZ2V0TmFtZSgpIDogc2ltcGxlVHlwZS5nZXROYW1lKCkpJT4KLSAgICA8L3RkPgotICAgIDwlIAotICAgICAgaWYoZWxlbWVudEZyYWdtZW50ICE9IG51bGwgJiYgZWxlbWVudEZyYWdtZW50LmlzTmlsbGFibGUoKSAmJiAhKGF0dHJpYnV0ZUJvb2wpICl7Ci0gICAgICAgIGlmKGVsZW1lbnRGcmFnbWVudC5pc05pbCgpKXsKLSAgICAgICAgICAlPiAgCi0gICAgICAgICAgPHRkIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPCU9KChJWFNERWxlbWVudEZyYWdtZW50KWVsZW1lbnRGcmFnbWVudCkuZ2V0TmlsSUQoKSU+IiB2YWx1ZT0iPCU9SVhTREVsZW1lbnRGcmFnbWVudC5OSUxfVkFMVUUlPiIgY2hlY2tlZD48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX05JTCIpJT48L3RkPiAKLSAgICAgICAgICA8JQotICAgICAgICB9IAotICAgICAgICBlbHNlewotICAgICAgICAgICU+ICAKLSAgICAgICAgICA8dGQgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSI8JT0oKElYU0RFbGVtZW50RnJhZ21lbnQpZWxlbWVudEZyYWdtZW50KS5nZXROaWxJRCgpJT4iIHZhbHVlPSI8JT1JWFNERWxlbWVudEZyYWdtZW50Lk5JTF9WQUxVRSU+IiA+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9OSUwiKSU+PC90ZD4gCi0gICAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgfQotICAgICAgJT4KLSAgICAKLSAgICA8dGQ+Ci0gICAgICA8JQotICAgICAgaWYgKCFmcmFnLnZhbGlkYXRlUGFyYW1ldGVyVmFsdWVzKGZyYWcuZ2V0SUQoKSkpIHsKLSAgICAgICU+Ci0gICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci0gICAgICA8JQotICAgICAgfQotICAgICAgJT4KLSAgICA8L3RkPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08dGFibGUgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSI8JT0oeHNkQ29uZmlnLmdldElzV1NETFBhcnQoKSA/ICJmaXhmcmFndGFibGUiIDogImlubmVyZml4ZnJhZ3RhYmxlIiklPiI+Ci0gIDwlCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgeHNkQ29uZmlnLmdldE1heE9jY3VycygpOyBpKyspIHsKLSAgJT4KLSAgPHRyPgotICAgIDx0ZD4KLSAgICAgIDwlCi0gICAgICBTdHJpbmcgdmFsdWUgPSBmcmFnLmdldFBhcmFtZXRlclZhbHVlKGZyYWcuZ2V0SUQoKSwgaSk7Ci0gICAgICAlPgotICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSI8JT1mcmFnLmdldElEKCklPiIgbmFtZT0iPCU9ZnJhZy5nZXRJRCgpJT4iIHZhbHVlPSI8JT0oKHZhbHVlICE9IG51bGwpID8gSFRNTFV0aWxzLmNoYXJhY3RlcnNUb0hUTUxFbnRpdGllc1N0cmljdCh2YWx1ZSkgOiAiIiklPiIgc2l6ZT0iNTAiIGNsYXNzPSJ0YWJsZXRleHRlbnRlciI+Ci0gICAgPC90ZD4KLSAgPC90cj4KLSAgPCUKLSAgfQotICAlPgotPC90YWJsZT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVBdG9taWNJbmZvRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY0luZm9GcmFnbWVudEpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyY2VmZmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUF0b21pY0luZm9GcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzMjMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLnhzZC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJzZXNzaW9uSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLUh0dHBTZXNzaW9uIGN1cnJlbnRTZXNzaW9uID0gKEh0dHBTZXNzaW9uKWFwcGxpY2F0aW9uLmdldEF0dHJpYnV0ZShzZXNzaW9uSUQudG9TdHJpbmcoKSk7Ci1Db250cm9sbGVyIGNvbnRyb2xsZXIgPSAoQ29udHJvbGxlciljdXJyZW50U2Vzc2lvbi5nZXRBdHRyaWJ1dGUoImNvbnRyb2xsZXIiKTsKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVhTREZyYWdtZW50IGZyYWcgPSBvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotWFNEU2ltcGxlVHlwZURlZmluaXRpb24gc2ltcGxlVHlwZSA9IChYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbilmcmFnLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCkuZ2V0WFNEQ29tcG9uZW50KCk7Ci0KLWludCBtaW5MZW5ndGggPSAtMTsKLWludCBtYXhMZW5ndGggPSAtMTsKLVZlY3RvciBwYXR0ZXJuVmVjdG9yID0gbmV3IFZlY3RvcigpOwotU3RyaW5nIHdoaXRlU3BhY2UgPSBudWxsOwotYm9vbGVhbiBtaW5FeGNsdXNpdmUgPSB0cnVlOwotT2JqZWN0IG1pbiA9IG51bGw7Ci1ib29sZWFuIG1heEV4Y2x1c2l2ZSA9IHRydWU7Ci1PYmplY3QgbWF4ID0gbnVsbDsKLWludCB0b3RhbERpZ2l0cyA9IC0xOwotaW50IGZyYWN0aW9uRGlnaXRzID0gLTE7Ci0KLVhTRFNpbXBsZVR5cGVEZWZpbml0aW9uIGN1cnJUeXBlID0gc2ltcGxlVHlwZTsKLXdoaWxlICghWFNEVHlwZURlZmluaXRpb25VdGlsLmlzUm9vdFR5cGVEZWZpbml0aW9uKGN1cnJUeXBlKSkgewotICAvLyBtaW5MZW5ndGgKLSAgaWYgKG1pbkxlbmd0aCA8IDApIHsKLSAgICBYU0RMZW5ndGhGYWNldCB4c2RMZW5ndGhGYWNldCA9IGN1cnJUeXBlLmdldExlbmd0aEZhY2V0KCk7Ci0gICAgWFNETWluTGVuZ3RoRmFjZXQgeHNkTWluTGVuZ3RoRmFjZXQgPSBjdXJyVHlwZS5nZXRNaW5MZW5ndGhGYWNldCgpOwotICAgIC8vIHBvcnQgdG8gb3JnLmVjbGlwc2UueHNkCi0gICAgaWYgKHhzZExlbmd0aEZhY2V0ICE9IG51bGwpCi0gICAgICBtaW5MZW5ndGggPSB4c2RMZW5ndGhGYWNldC5nZXRWYWx1ZSgpOwotICAgIGVsc2UgaWYgKHhzZE1pbkxlbmd0aEZhY2V0ICE9IG51bGwpCi0gICAgICBtaW5MZW5ndGggPSB4c2RNaW5MZW5ndGhGYWNldC5nZXRWYWx1ZSgpOwotICB9Ci0gIC8vIG1heExlbmd0aAotICBpZiAobWF4TGVuZ3RoIDwgMCkgewotICAgIFhTRExlbmd0aEZhY2V0IHhzZExlbmd0aEZhY2V0ID0gY3VyclR5cGUuZ2V0TGVuZ3RoRmFjZXQoKTsKLSAgICBYU0RNYXhMZW5ndGhGYWNldCB4c2RNYXhMZW5ndGhGYWNldCA9IGN1cnJUeXBlLmdldE1heExlbmd0aEZhY2V0KCk7Ci0gICAgLy8gcG9ydCB0byBvcmcuZWNsaXBzZS54c2QKLSAgICBpZiAoeHNkTGVuZ3RoRmFjZXQgIT0gbnVsbCkKLSAgICAgIG1heExlbmd0aCA9IHhzZExlbmd0aEZhY2V0LmdldFZhbHVlKCk7Ci0gICAgZWxzZSBpZiAoeHNkTWF4TGVuZ3RoRmFjZXQgIT0gbnVsbCkKLSAgICAgIG1heExlbmd0aCA9IHhzZE1heExlbmd0aEZhY2V0LmdldFZhbHVlKCk7Ci0gIH0KLSAgLy8gcGF0dGVyblZlY3RvcgotICBFTGlzdCB4c2RQYXR0ZXJuRmFjZXRzID0gY3VyclR5cGUuZ2V0UGF0dGVybkZhY2V0cygpOwotICBpZiAoeHNkUGF0dGVybkZhY2V0cyAhPSBudWxsKSB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB4c2RQYXR0ZXJuRmFjZXRzLnNpemUoKTsgaSsrKSB7Ci0gICAgICBYU0RQYXR0ZXJuRmFjZXQgeHNkUGF0dGVybkZhY2V0ID0gKFhTRFBhdHRlcm5GYWNldCl4c2RQYXR0ZXJuRmFjZXRzLmdldChpKTsKLSAgICAgIEVMaXN0IHBhdHRlcm5zID0geHNkUGF0dGVybkZhY2V0LmdldFZhbHVlKCk7Ci0gICAgICBmb3IgKGludCBqID0gMDsgaiA8IHBhdHRlcm5zLnNpemUoKTsgaisrKSB7Ci0gICAgICAgIHBhdHRlcm5WZWN0b3IuYWRkKHBhdHRlcm5zLmdldChqKSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIC8vIHdoaXRlU3BhY2UKLSAgaWYgKHdoaXRlU3BhY2UgPT0gbnVsbCkgewotICAgIFhTRFdoaXRlU3BhY2VGYWNldCB4c2RXaGl0ZVNwYWNlRmFjZXQgPSBjdXJyVHlwZS5nZXRXaGl0ZVNwYWNlRmFjZXQoKTsKLSAgICAvLyBwb3J0IHRvIG9yZy5lY2xpcHNlLnhzZAotICAgIGlmICh4c2RXaGl0ZVNwYWNlRmFjZXQgIT0gbnVsbCkKLSAgICAgIHdoaXRlU3BhY2UgPSB4c2RXaGl0ZVNwYWNlRmFjZXQuZ2V0VmFsdWUoKS5nZXROYW1lKCk7Ci0gIH0KLSAgLy8gbWluIGluL2V4Y2x1c2l2ZQotICBpZiAobWluID09IG51bGwgKSB7Ci0gICAgWFNETWluRXhjbHVzaXZlRmFjZXQgeHNkTWluRXhjbHVzaXZlRmFjZXQgPSBjdXJyVHlwZS5nZXRNaW5FeGNsdXNpdmVGYWNldCgpOwotICAgIFhTRE1pbkluY2x1c2l2ZUZhY2V0IHhzZE1pbkluY2x1c2l2ZUZhY2V0ID0gY3VyclR5cGUuZ2V0TWluSW5jbHVzaXZlRmFjZXQoKTsKLSAgICBpZiAoeHNkTWluRXhjbHVzaXZlRmFjZXQgIT0gbnVsbCkgewotICAgICAgbWluID0geHNkTWluRXhjbHVzaXZlRmFjZXQuZ2V0VmFsdWUoKTsKLSAgICAgIG1pbkV4Y2x1c2l2ZSA9IHRydWU7Ci0gICAgfQotICAgIGVsc2UgaWYgKHhzZE1pbkluY2x1c2l2ZUZhY2V0ICE9IG51bGwpIHsKLSAgICAgIG1pbiA9IHhzZE1pbkluY2x1c2l2ZUZhY2V0LmdldFZhbHVlKCk7Ci0gICAgICBtaW5FeGNsdXNpdmUgPSBmYWxzZTsKLSAgICB9Ci0gIH0KLSAgLy8gbWF4IGluL2V4Y2x1c2l2ZQotICBpZiAobWF4ID09IG51bGwpIHsKLSAgICBYU0RNYXhFeGNsdXNpdmVGYWNldCB4c2RNYXhFeGNsdXNpdmVGYWNldCA9IGN1cnJUeXBlLmdldE1heEV4Y2x1c2l2ZUZhY2V0KCk7Ci0gICAgWFNETWF4SW5jbHVzaXZlRmFjZXQgeHNkTWF4SW5jbHVzaXZlRmFjZXQgPSBjdXJyVHlwZS5nZXRNYXhJbmNsdXNpdmVGYWNldCgpOwotICAgIGlmICh4c2RNYXhFeGNsdXNpdmVGYWNldCAhPSBudWxsKSB7Ci0gICAgICBtYXggPSB4c2RNYXhFeGNsdXNpdmVGYWNldC5nZXRWYWx1ZSgpOwotICAgICAgbWF4RXhjbHVzaXZlID0gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoeHNkTWF4SW5jbHVzaXZlRmFjZXQgIT0gbnVsbCkgewotICAgICAgbWF4ID0geHNkTWF4SW5jbHVzaXZlRmFjZXQuZ2V0VmFsdWUoKTsKLSAgICAgIG1heEV4Y2x1c2l2ZSA9IGZhbHNlOwotICAgIH0KLSAgfQotICAvLyB0b3RhbERpZ2l0cwotICBpZiAodG90YWxEaWdpdHMgPCAwKSB7Ci0gICAgWFNEVG90YWxEaWdpdHNGYWNldCB4c2RUb3RhbERpZ2l0c0ZhY2V0ID0gY3VyclR5cGUuZ2V0VG90YWxEaWdpdHNGYWNldCgpOwotICAgIGlmICh4c2RUb3RhbERpZ2l0c0ZhY2V0ICE9IG51bGwpCi0gICAgICB0b3RhbERpZ2l0cyA9IHhzZFRvdGFsRGlnaXRzRmFjZXQuZ2V0VmFsdWUoKTsKLSAgfQotICAvLyBmcmFjdGlvbkRpZ2l0cwotICBpZiAoZnJhY3Rpb25EaWdpdHMgPCAwKSB7Ci0gICAgWFNERnJhY3Rpb25EaWdpdHNGYWNldCB4c2RGcmFjdGlvbkRpZ2l0c0ZhY2V0ID0gY3VyclR5cGUuZ2V0RnJhY3Rpb25EaWdpdHNGYWNldCgpOwotICAgIGlmICh4c2RGcmFjdGlvbkRpZ2l0c0ZhY2V0ICE9IG51bGwpCi0gICAgICBmcmFjdGlvbkRpZ2l0cyA9IHhzZEZyYWN0aW9uRGlnaXRzRmFjZXQuZ2V0VmFsdWUoKTsKLSAgfQotICAvLyB3YWxrIHRvIGJhc2UgdHlwZQotICBjdXJyVHlwZSA9IGN1cnJUeXBlLmdldEJhc2VUeXBlRGVmaW5pdGlvbigpOwotfQotJT4KLQotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL2ZyYWdtZW50L1hTRERlZmF1bHRJbmZvRnJhZ21lbnRKU1AuanNwIiBmbHVzaD0idHJ1ZSIvPgotCi08dGFibGU+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTIwPiZuYnNwOzwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICA8dHI+Ci0gICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICA8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9CQVNFX1RZUEUiKSU+Ci0gICAgPC90aD4KLSAgPC90cj4KLSAgPHRyPgotICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICA8JT1YU0RUeXBlRGVmaW5pdGlvblV0aWwucmVzb2x2ZVRvWFNEQnVpbHRJblR5cGVEZWZpbml0aW9uKHNpbXBsZVR5cGUpLmdldE5hbWUoKSU+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTwlCi1TdHJpbmcgbWluTGVuZ3RoU3RyaW5nID0gKG1pbkxlbmd0aCA8IDApID8gd3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVU5CT1VOREVEIikgOiBTdHJpbmcudmFsdWVPZihtaW5MZW5ndGgpOwotU3RyaW5nIG1heExlbmd0aFN0cmluZyA9IChtYXhMZW5ndGggPCAwKSA/IHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1VOQk9VTkRFRCIpIDogU3RyaW5nLnZhbHVlT2YobWF4TGVuZ3RoKTsKLVN0cmluZ1tdIGxlbmd0aFZhbHVlcyA9IHttaW5MZW5ndGhTdHJpbmcsIG1heExlbmd0aFN0cmluZ307Ci1pZiAobWluTGVuZ3RoID49IDAgfHwgbWF4TGVuZ3RoID49IDApIHsKLSU+Ci0gIDx0YWJsZT4KLSAgICA8dHI+Ci0gICAgICA8dGQgaGVpZ2h0PTIwPiZuYnNwOzwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgIDx0cj4KLSAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICA8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9MRU5HVEgiKSU+Ci0gICAgICA8L3RoPgotICAgIDwvdHI+Ci0gICAgPHRyPgotICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTEVOR1RIX1ZBTFVFIiwgbGVuZ3RoVmFsdWVzKSU+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci08JQotfQotJT4KLQotPCUKLWlmIChwYXR0ZXJuVmVjdG9yLnNpemUoKSA+IDApIHsKLSAgU3RyaW5nIHBhdHRlcm5Db250YWluZXJJRCA9ICI6OnBhdHRlcm4iOwotICBTdHJpbmcgeHBhdHRlcm5Db250YWluZXJJRCA9ICJ4OjpwYXR0ZXJuIjsKLSU+Ci0gIDx0YWJsZT4KLSAgICA8dHI+Ci0gICAgICA8dGQgaGVpZ2h0PTIwPiZuYnNwOzwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICA8dHI+Ci0gICAgICA8dGQgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT1wYXR0ZXJuQ29udGFpbmVySUQlPicsJzwlPXhwYXR0ZXJuQ29udGFpbmVySUQlPicpIj48aW1nIG5hbWU9IjwlPXhwYXR0ZXJuQ29udGFpbmVySUQlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdG9wZW5lZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9PUEVORUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICAgIDwvdGQ+Ci0gICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgIDxzdHJvbmc+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUEFUVEVSTiIpJT48L3N0cm9uZz4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLSAgPHNwYW4gaWQ9IjwlPXBhdHRlcm5Db250YWluZXJJRCU+Ij4KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgIDx0cj4KLSAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICA8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9QQVRURVJOIiklPgotICAgICAgPC90aD4KLSAgICA8L3RyPgotICAgIDwlCi0gICAgZm9yIChpbnQgayA9IDA7IGsgPCBwYXR0ZXJuVmVjdG9yLnNpemUoKTsgaysrKSB7Ci0gICAgJT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICA8JT0oU3RyaW5nKXBhdHRlcm5WZWN0b3IuZ2V0KGspJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPCUKLSAgICB9Ci0gICAgJT4KLSAgPC90YWJsZT4KLSAgPC9zcGFuPgotPCUKLX0KLSU+Ci0KLTwlCi1pZiAod2hpdGVTcGFjZSAhPSBudWxsKSB7Ci0lPgotICA8dGFibGU+Ci0gICAgPHRyPgotICAgICAgPHRkIGhlaWdodD0yMD4mbmJzcDs8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci0gIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICA8dHI+Ci0gICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfV0hJVEVTUEFDRSIpJT4KLSAgICAgIDwvdGg+Ci0gICAgPC90cj4KLSAgICA8dHI+Ci0gICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICA8JT13aGl0ZVNwYWNlJT4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLTwlCi19Ci0lPgotCi08JQotU3RyaW5nIGxvd2VyQm91bmQ7Ci1pZiAobWluRXhjbHVzaXZlKQotICBsb3dlckJvdW5kID0gd3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTUlOX0VYQ0xVU0lWRSIsIChtaW4gPT0gbnVsbCkgPyB3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9VTkJPVU5ERUQiKSA6IG1pbi50b1N0cmluZygpKTsKLWVsc2UKLSAgbG93ZXJCb3VuZCA9IHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX01JTl9JTkNMVVNJVkUiLCAobWluID09IG51bGwpID8gd3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVU5CT1VOREVEIikgOiBtaW4udG9TdHJpbmcoKSk7Ci1TdHJpbmcgdXBwZXJCb3VuZDsKLWlmIChtYXhFeGNsdXNpdmUpCi0gIHVwcGVyQm91bmQgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9NQVhfRVhDTFVTSVZFIiwgKG1heCA9PSBudWxsKSA/IHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1VOQk9VTkRFRCIpIDogbWF4LnRvU3RyaW5nKCkpOwotZWxzZQotICB1cHBlckJvdW5kID0gd3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTUFYX0lOQ0xVU0lWRSIsIChtYXggPT0gbnVsbCkgPyB3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9VTkJPVU5ERUQiKSA6IG1heC50b1N0cmluZygpKTsKLWlmIChtaW4gIT0gbnVsbCB8fCBtYXggIT0gbnVsbCkgewotJT4KLSAgPHRhYmxlPgotICAgIDx0cj4KLSAgICAgIDx0ZCBoZWlnaHQ9MjA+Jm5ic3A7PC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgPHRyPgotICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgIDwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1JBTkdFX09GX1ZBTFVFUyIpJT4KLSAgICAgIDwvdGg+Ci0gICAgPC90cj4KLSAgICA8dHI+Ci0gICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICA8JT1sb3dlckJvdW5kICsgdXBwZXJCb3VuZCU+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci08JQotfQotJT4KLQotPCUKLWlmICh0b3RhbERpZ2l0cyA+PSAwKSB7Ci0lPgotICA8dGFibGU+Ci0gICAgPHRyPgotICAgICAgPHRkIGhlaWdodD0yMD4mbmJzcDs8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci0gIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICA8dHI+Ci0gICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVE9UQUxfRElHSVRTIiklPgotICAgICAgPC90aD4KLSAgICA8L3RyPgotICAgIDx0cj4KLSAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgIDwlPXRvdGFsRGlnaXRzJT4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLTwlCi19Ci0lPgotCi08JQotaWYgKGZyYWN0aW9uRGlnaXRzID49IDApIHsKLSU+Ci0gIDx0YWJsZT4KLSAgICA8dHI+Ci0gICAgICA8dGQgaGVpZ2h0PTIwPiZuYnNwOzwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgIDx0cj4KLSAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICA8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9GUkFDVElPTl9ESUdJVFMiKSU+Ci0gICAgICA8L3RoPgotICAgIDwvdHI+Ci0gICAgPHRyPgotICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgPCU9ZnJhY3Rpb25EaWdpdHMlPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPCUKLX0KLSU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlQXRvbWljUkZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVBdG9taWNSRnJhZ21lbnRKU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZmRkNGI2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVBdG9taWNSRnJhZ21lbnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLnhzZC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBvcGVyTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQudG9TdHJpbmcoKSkpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpb3Blck5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLUlYU0RGcmFnbWVudCBmcmFnID0gb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdJRC50b1N0cmluZygpKTsKLVhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IGZyYWcuZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLVhTRFNpbXBsZVR5cGVEZWZpbml0aW9uIHNpbXBsZVR5cGUgPSAoWFNEU2ltcGxlVHlwZURlZmluaXRpb24pZnJhZy5nZXRYU0RUeXBlRGVmaW5pdGlvbigpOwotWFNEVHlwZURlZmluaXRpb24geHNkQnVpbHRJblR5cGUgPSBYU0RUeXBlRGVmaW5pdGlvblV0aWwucmVzb2x2ZVRvWFNEQnVpbHRJblR5cGVEZWZpbml0aW9uKHNpbXBsZVR5cGUpOwotU3RyaW5nW10gbGFiZWxBcmdzID0ge2ZyYWcuZ2V0TmFtZSgpLCAoeHNkQnVpbHRJblR5cGUgIT0gbnVsbCA/IHhzZEJ1aWx0SW5UeXBlLmdldE5hbWUoKSA6IHNpbXBsZVR5cGUuZ2V0TmFtZSgpKX07Ci1TdHJpbmdbXSBwYXJhbXMgPSBmcmFnLmdldFBhcmFtZXRlclZhbHVlcyhmcmFnLmdldElEKCkpOwotJT4KLTx0YWJsZSBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gImZpeGZyYWd0YWJsZSIgOiAiaW5uZXJmaXhmcmFndGFibGUiKSU+Ij4KLSAgPHRyPgotICAgIDx0aCBpZD0iPCU9ZnJhZy5nZXRJRCgpJT4iIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0FUT01JQ19OQU1FX1RZUEUiLCBsYWJlbEFyZ3MpJT4KLSAgICA8L3RoPgotICAgIDx0ZCBoZWFkZXJzPSI8JT1mcmFnLmdldElEKCklPiIgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHdpZHRoPSIxMDAlIiB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDwlPSgocGFyYW1zICE9IG51bGwgJiYgcGFyYW1zLmxlbmd0aCA+IDApID8gSFRNTFV0aWxzLmNoYXJhY3RlcnNUb0hUTUxFbnRpdGllcyhwYXJhbXNbMF0pIDogd3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTlVMTCIpKSU+Ci0gICAgPC90ZD4KLSAgPC90cj4KLSAgPCUKLSAgaWYgKHBhcmFtcyAhPSBudWxsKSB7Ci0gICAgZm9yIChpbnQgaSA9IDE7IGkgPCBwYXJhbXMubGVuZ3RoOyBpKyspIHsKLSAgICAlPgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPjwvdGQ+Ci0gICAgICAgIDx0ZCBoZWFkZXJzPSI8JT1mcmFnLmdldElEKCklPiIgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHdpZHRoPSIxMDAlIiB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgICAgICA8JT1IVE1MVXRpbHMuY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzKHBhcmFtc1tpXSklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8JQotICAgIH0KLSAgfQotICAlPgotPC90YWJsZT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVBdG9taWNSYW5nZVdGcmFnbWVudEpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlQXRvbWljUmFuZ2VXRnJhZ21lbnRKU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjY4ZDc3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVBdG9taWNSYW5nZVdGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNDAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQudXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS54c2QuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImZyYWdJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5vZGVJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImVsZW1lbnRJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci0KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLU5vZGUgc2VsZWN0ZWROb2RlID0gd3NkbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCkuZ2V0Tm9kZShJbnRlZ2VyLnBhcnNlSW50KG5vZGVJRC50b1N0cmluZygpKSk7Ci1XU0RMT3BlcmF0aW9uRWxlbWVudCBvcGVyRWxlbWVudCA9IChXU0RMT3BlcmF0aW9uRWxlbWVudClzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLUlYU0RGcmFnbWVudCBmcmFnID0gb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdJRC50b1N0cmluZygpKTsKLUlYU0RFbGVtZW50RnJhZ21lbnQgZWxlbWVudEZyYWdtZW50ID0gKElYU0RFbGVtZW50RnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGVsZW1lbnRJRC50b1N0cmluZygpKTsKLVhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IGZyYWcuZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLVhTRFNpbXBsZVR5cGVEZWZpbml0aW9uIHNpbXBsZVR5cGUgPSAoWFNEU2ltcGxlVHlwZURlZmluaXRpb24pZnJhZy5nZXRYU0RUeXBlRGVmaW5pdGlvbigpOwotWFNEVHlwZURlZmluaXRpb24geHNkQnVpbHRJblR5cGUgPSBYU0RUeXBlRGVmaW5pdGlvblV0aWwucmVzb2x2ZVRvWFNEQnVpbHRJblR5cGVEZWZpbml0aW9uKHNpbXBsZVR5cGUpOwotU3RyaW5nIHRhYmxlQ29udGFpbmVySUQgPSAobmV3IFN0cmluZ0J1ZmZlcihGcmFnbWVudENvbnN0YW50cy5UQUJMRV9JRCkpLmFwcGVuZChmcmFnLmdldElEKCkpLnRvU3RyaW5nKCk7Ci1TdHJpbmcgdHdpc3RJbWFnZU5hbWUgPSAobmV3IFN0cmluZ0J1ZmZlcigieCIpKS5hcHBlbmQodGFibGVDb250YWluZXJJRCkudG9TdHJpbmcoKTsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgZnVuY3Rpb24gYWRkU2ltcGxlQXRvbWljUm93cyh0YWJsZUNvbnRhaW5lcklELCBpZCwgbmFtZSwgdmFsdWUsIG1heE9jY3VycykgewotICAgIGlmIChjaGVja01heE9jY3Vyc1JlYWNoZWQodGFibGVDb250YWluZXJJRCwgbWF4T2NjdXJzKSkKLSAgICAgIHJldHVybjsKLSAgICB0d2lzdE9wZW4odGFibGVDb250YWluZXJJRCk7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJRCk7Ci0gICAgdmFyIHRhYmxlQm9keSA9IHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpLml0ZW0oMCk7Ci0gICAgdmFyIG5ld1JvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7Ci0gICAgdmFyIGNvbHVtbjAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW4xID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLQotICAgIHZhciByb3dDaGVja2JveCA9IGNyZWF0ZVJvd0NoZWNrYm94KCk7Ci0gICAgY29sdW1uMC5hcHBlbmRDaGlsZChyb3dDaGVja2JveCk7Ci0KLSAgICB2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotICAgIGNvbHVtbjEuYXBwZW5kQ2hpbGQoaW5wdXQpOwotICAgIGlucHV0LnR5cGUgPSAidGV4dCI7Ci0gICAgaW5wdXQuaWQgPSBpZDsKLSAgICBpbnB1dC5uYW1lID0gbmFtZTsKLSAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZS5sZW5ndGggPiAwKQotICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZTsKLSAgICBpbnB1dC5jbGFzc05hbWUgPSAidGFibGV0ZXh0ZW50ZXIiOwotCi0gICAgY29sdW1uMC5jbGFzc05hbWUgPSAiY2hlY2tib3hjZWxscyI7Ci0gICAgY29sdW1uMS5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjApOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4xKTsKLSAgICB0YWJsZUJvZHkuYXBwZW5kQ2hpbGQobmV3Um93KTsKLSAgfQotPC9zY3JpcHQ+Ci08dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICA8dHI+Ci0gICAgPHRkIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsJzwlPXR3aXN0SW1hZ2VOYW1lJT4nKSI+PGltZyBuYW1lPSI8JT10d2lzdEltYWdlTmFtZSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0b3BlbmVkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX09QRU5FRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxsYWJlbCBmb3I9IjwlPWZyYWcuZ2V0SUQoKSU+Ij48YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5YU0RJbmZvRGlhbG9nKCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlblhTREluZm9EaWFsb2dBY3Rpb24uZ2V0QWN0aW9uTGluayhzZXNzaW9uLmdldElkKCksc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLGZyYWdJRC50b1N0cmluZygpKSkpJT4nKSI+PCU9ZnJhZy5nZXROYW1lKCklPjwvYT48L2xhYmVsPgotICAgIDwvdGQ+Ci0gICAgPCUgCi0gICAgICBpZihlbGVtZW50RnJhZ21lbnQgIT0gbnVsbCAmJiBlbGVtZW50RnJhZ21lbnQuaXNOaWxsYWJsZSgpKXsKLSAgICAgICAgaWYoZWxlbWVudEZyYWdtZW50LmlzTmlsKCkpewotICAgICAgICAgICU+ICAKLSAgICAgICAgICA8dGQgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSI8JT0oKElYU0RFbGVtZW50RnJhZ21lbnQpZWxlbWVudEZyYWdtZW50KS5nZXROaWxJRCgpJT4iIHZhbHVlPSI8JT1JWFNERWxlbWVudEZyYWdtZW50Lk5JTF9WQUxVRSU+IiBjaGVja2VkPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTklMIiklPjwvdGQ+IAotICAgICAgICAgIDwlCi0gICAgICAgIH0gCi0gICAgICAgIGVsc2V7Ci0gICAgICAgICAgJT4gIAotICAgICAgICAgIDx0ZCB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9IjwlPSgoSVhTREVsZW1lbnRGcmFnbWVudCllbGVtZW50RnJhZ21lbnQpLmdldE5pbElEKCklPiIgdmFsdWU9IjwlPUlYU0RFbGVtZW50RnJhZ21lbnQuTklMX1ZBTFVFJT4iID48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX05JTCIpJT48L3RkPiAKLSAgICAgICAgICA8JQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgJT4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPCU9KHhzZEJ1aWx0SW5UeXBlICE9IG51bGwgPyB4c2RCdWlsdEluVHlwZS5nZXROYW1lKCkgOiBzaW1wbGVUeXBlLmdldE5hbWUoKSklPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6YWRkU2ltcGxlQXRvbWljUm93cygnPCU9dGFibGVDb250YWluZXJJRCU+JywgJzwlPWZyYWcuZ2V0SUQoKSU+JywgJzwlPWZyYWcuZ2V0SUQoKSU+JywgbnVsbCwgPCU9eHNkQ29uZmlnLmdldE1heE9jY3VycygpJT4pIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX0FERCIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpjaGVja01pbk9jY3Vyc0FuZFJlbW92ZVNlbGVjdGVkUm93cygnPCU9dGFibGVDb250YWluZXJJRCU+JywgPCU9eHNkQ29uZmlnLmdldE1pbk9jY3VycygpJT4pIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX1JFTU9WRSIpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQ+Ci0gICAgICA8JQotICAgICAgaWYgKCFmcmFnLnZhbGlkYXRlUGFyYW1ldGVyVmFsdWVzKGZyYWcuZ2V0SUQoKSkpIHsKLSAgICAgICU+Ci0gICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci0gICAgICA8JQotICAgICAgfQotICAgICAgJT4KLSAgICA8L3RkPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08c3BhbiBpZD0iPCU9dGFibGVDb250YWluZXJJRCU+Ij4KLTx0YWJsZSBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gInJhbmdlZnJhZ3RhYmxlIiA6ICJpbm5lcnJhbmdlZnJhZ3RhYmxlIiklPiI+Ci0gIDx0cj4KLSAgICA8dGggY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25DbGljaz0iaGFuZGxlQ2hlY2tBbGxDbGljaygnPCU9dGFibGVDb250YWluZXJJRCU+Jyx0aGlzKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9BTExfQ0hFQ0tfQk9YIiklPiI+PC90aD4KLSAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9WQUxVRVMiKSU+PC90aD4KLSAgPC90cj4KLTwvdGFibGU+Ci08L3NwYW4+Ci08JQotU3RyaW5nW10gdmFsdWVzID0gZnJhZy5nZXRQYXJhbWV0ZXJWYWx1ZXMoZnJhZy5nZXRJRCgpKTsKLWludCBpID0gMDsKLWlmICh2YWx1ZXMgIT0gbnVsbCkgewotICBmb3IgKCA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHsKLSU+Ci0gICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICBhZGRTaW1wbGVBdG9taWNSb3dzKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCAnPCU9ZnJhZy5nZXRJRCgpJT4nLCAnPCU9ZnJhZy5nZXRJRCgpJT4nLCAnPCU9dmFsdWVzW2ldJT4nLCAnPCU9eHNkQ29uZmlnLmdldE1heE9jY3VycygpJT4nKTsKLSAgICA8L3NjcmlwdD4KLTwlCi0gIH0KLX0KLWZvciAoIDsgaSA8IHhzZENvbmZpZy5nZXRNaW5PY2N1cnMoKTsgaSsrKSB7Ci0lPgotICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICBhZGRTaW1wbGVBdG9taWNSb3dzKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCAnPCU9ZnJhZy5nZXRJRCgpJT4nLCAnPCU9ZnJhZy5nZXRJRCgpJT4nLCBudWxsLCAnPCU9eHNkQ29uZmlnLmdldE1heE9jY3VycygpJT4nKTsKLSAgPC9zY3JpcHQ+Ci08JQotfQotJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVMaXN0Rml4V0ZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVMaXN0Rml4V0ZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDljMjMwMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlTGlzdEZpeFdGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVhTRFNpbXBsZUxpc3RGcmFnbWVudCBmcmFnID0gKElYU0RTaW1wbGVMaXN0RnJhZ21lbnQpb3BlckVsZW1lbnQuZ2V0RnJhZ21lbnRCeUlEKGZyYWdJRC50b1N0cmluZygpKTsKLVhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uIHhzZENvbmZpZyA9IGZyYWcuZ2V0WFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24oKTsKLUlYU0RGcmFnbWVudFtdIGNoaWxkRnJhZ3MgPSBmcmFnLmdldEFsbEZyYWdtZW50cygpOwotJT4KLTx0YWJsZSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gImZpeGZyYWd0YWJsZSIgOiAiaW5uZXJmaXhmcmFndGFibGUiKSU+Ij4KLTwlCi1mb3IgKGludCBpID0gMDsgaSA8IHhzZENvbmZpZy5nZXRNYXhPY2N1cnMoKTsgaSsrKSB7Ci0gIElYU0RGcmFnbWVudCBjaGlsZEZyYWc7Ci0gIFN0cmluZyBjaGlsZEZyYWdJRDsKLSAgaWYgKGkgPCBjaGlsZEZyYWdzLmxlbmd0aCkgewotICAgIGNoaWxkRnJhZyA9IGNoaWxkRnJhZ3NbaV07Ci0gICAgY2hpbGRGcmFnSUQgPSBjaGlsZEZyYWcuZ2V0SUQoKTsKLSAgfQotICBlbHNlIHsKLSAgICBjaGlsZEZyYWdJRCA9IGZyYWcuY3JlYXRlTGlzdEluc3RhbmNlKCk7Ci0gICAgY2hpbGRGcmFnID0gZnJhZy5nZXRGcmFnbWVudChjaGlsZEZyYWdJRCk7Ci0gIH0KLSAgZnJhZ0lELmRlbGV0ZSgwLCBmcmFnSUQubGVuZ3RoKCkpOwotICBmcmFnSUQuYXBwZW5kKGNoaWxkRnJhZ0lEKTsKLSU+Ci0gIDx0cj4KLSAgICA8dGQ+Ci0gICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1mcmFnLmdldElEKCklPiIgdmFsdWU9IjwlPWNoaWxkRnJhZ0lEJT4iPgotICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9IjwlPWNoaWxkRnJhZy5nZXRXcml0ZUZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLSAgICA8L3RkPgotICA8L3RyPgotPCUKLX0KLSU+Ci08L3RhYmxlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUxpc3RSRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZUxpc3RSRnJhZ21lbnRKU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzI4NjE4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVMaXN0UkZyYWdtZW50SlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZnJhZ21lbnQuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImZyYWdJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5vZGVJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci0KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLU5vZGUgb3Blck5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KW9wZXJOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1JWFNEU2ltcGxlTGlzdEZyYWdtZW50IGZyYWcgPSAoSVhTRFNpbXBsZUxpc3RGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZnJhZy5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotSVhTREZyYWdtZW50W10gY2hpbGRGcmFncyA9IGZyYWcuZ2V0QWxsRnJhZ21lbnRzKCk7Ci0lPgotPHRhYmxlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBjbGFzcz0iPCU9KHhzZENvbmZpZy5nZXRJc1dTRExQYXJ0KCkgPyAiZml4ZnJhZ3RhYmxlIiA6ICJpbm5lcmZpeGZyYWd0YWJsZSIpJT4iPgotPCUKLWZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRGcmFncy5sZW5ndGg7IGkrKykgewotICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gIGZyYWdJRC5hcHBlbmQoY2hpbGRGcmFnc1tpXS5nZXRJRCgpKTsKLSU+Ci0gIDx0cj4KLSAgICA8dGQ+Ci0gICAgICA8anNwOmluY2x1ZGUgcGFnZT0iPCU9Y2hpbGRGcmFnc1tpXS5nZXRSZWFkRnJhZ21lbnQoKSU+IiBmbHVzaD0idHJ1ZSIvPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08JQotfQotJT4KLTwvdGFibGU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlTGlzdFJhbmdlV0ZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVMaXN0UmFuZ2VXRnJhZ21lbnRKU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyN2ViYmEzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVMaXN0UmFuZ2VXRnJhZ21lbnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJmcmFnSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJub2RlSUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJlbGVtZW50SUQiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotCi08JQotV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci1Ob2RlIHNlbGVjdGVkTm9kZSA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpLmdldE5vZGUoSW50ZWdlci5wYXJzZUludChub2RlSUQudG9TdHJpbmcoKSkpOwotV1NETE9wZXJhdGlvbkVsZW1lbnQgb3BlckVsZW1lbnQgPSAoV1NETE9wZXJhdGlvbkVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1JWFNEU2ltcGxlTGlzdEZyYWdtZW50IGZyYWcgPSAoSVhTRFNpbXBsZUxpc3RGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotSVhTREVsZW1lbnRGcmFnbWVudCBlbGVtZW50RnJhZ21lbnQgPSAoSVhTREVsZW1lbnRGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZWxlbWVudElELnRvU3RyaW5nKCkpOwotWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZnJhZy5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotU3RyaW5nIHRhYmxlQ29udGFpbmVySUQgPSAobmV3IFN0cmluZ0J1ZmZlcihGcmFnbWVudENvbnN0YW50cy5UQUJMRV9JRCkpLmFwcGVuZChmcmFnLmdldElEKCkpLnRvU3RyaW5nKCk7Ci1TdHJpbmcgdHdpc3RJbWFnZU5hbWUgPSAobmV3IFN0cmluZ0J1ZmZlcigieCIpKS5hcHBlbmQodGFibGVDb250YWluZXJJRCkudG9TdHJpbmcoKTsKLVN0cmluZyBuYW1lQW5jaG9ySUQgPSAobmV3IFN0cmluZ0J1ZmZlcihGcmFnbWVudENvbnN0YW50cy5OQU1FX0FOQ0hPUl9JRCkpLmFwcGVuZChmcmFnLmdldElEKCkpLnRvU3RyaW5nKCk7Ci0lPgotPGEgbmFtZT0iPCU9bmFtZUFuY2hvcklEJT4iLz4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9dGFibGVDb250YWluZXJJRCU+JywnPCU9dHdpc3RJbWFnZU5hbWUlPicpIj48aW1nIG5hbWU9IjwlPXR3aXN0SW1hZ2VOYW1lJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RvcGVuZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfT1BFTkVEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpvcGVuWFNESW5mb0RpYWxvZygnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KE9wZW5YU0RJbmZvRGlhbG9nQWN0aW9uLmdldEFjdGlvbkxpbmsoc2Vzc2lvbi5nZXRJZCgpLHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSxmcmFnSUQudG9TdHJpbmcoKSkpKSU+JykiPjwlPWZyYWcuZ2V0TmFtZSgpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8JSAKLSAgICAgIGlmKGVsZW1lbnRGcmFnbWVudCAhPSBudWxsICYmIGVsZW1lbnRGcmFnbWVudC5pc05pbGxhYmxlKCkpewotICAgICAgICBpZihlbGVtZW50RnJhZ21lbnQuaXNOaWwoKSl7Ci0gICAgICAgICAgJT4gIAotICAgICAgICAgIDx0ZCB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9IjwlPSgoSVhTREVsZW1lbnRGcmFnbWVudCllbGVtZW50RnJhZ21lbnQpLmdldE5pbElEKCklPiIgdmFsdWU9IjwlPUlYU0RFbGVtZW50RnJhZ21lbnQuTklMX1ZBTFVFJT4iIGNoZWNrZWQ+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9OSUwiKSU+PC90ZD4gCi0gICAgICAgICAgPCUKLSAgICAgICAgfSAKLSAgICAgICAgZWxzZXsKLSAgICAgICAgICAlPiAgCi0gICAgICAgICAgPHRkIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPCU9KChJWFNERWxlbWVudEZyYWdtZW50KWVsZW1lbnRGcmFnbWVudCkuZ2V0TmlsSUQoKSU+IiB2YWx1ZT0iPCU9SVhTREVsZW1lbnRGcmFnbWVudC5OSUxfVkFMVUUlPiIgPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTklMIiklPjwvdGQ+IAotICAgICAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICAlPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmNyZWF0ZUluc3RhbmNlKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCA8JT14c2RDb25maWcuZ2V0TWF4T2NjdXJzKCklPiwgJzwlPWZyYWdJRCU+JywgJzwlPW5hbWVBbmNob3JJRCU+JykiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfQUREIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmNoZWNrTWluT2NjdXJzQW5kUmVtb3ZlU2VsZWN0ZWRSb3dzKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCA8JT14c2RDb25maWcuZ2V0TWluT2NjdXJzKCklPikiPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfUkVNT1ZFIiklPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08c3BhbiBpZD0iPCU9dGFibGVDb250YWluZXJJRCU+Ij4KLTx0YWJsZSBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gInJhbmdlZnJhZ3RhYmxlIiA6ICJpbm5lcnJhbmdlZnJhZ3RhYmxlIiklPiI+Ci0gIDx0cj4KLSAgICA8dGggY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25DbGljaz0iaGFuZGxlQ2hlY2tBbGxDbGljaygnPCU9dGFibGVDb250YWluZXJJRCU+Jyx0aGlzKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9BTExfQ0hFQ0tfQk9YIiklPiI+PC90aD4KLSAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9MSVNUX0lURU1TIiklPjwvdGg+Ci0gIDwvdHI+Ci0gIDwlCi0gIElYU0RGcmFnbWVudFtdIGNoaWxkRnJhZ3MgPSBmcmFnLmdldEFsbEZyYWdtZW50cygpOwotICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkRnJhZ3MubGVuZ3RoIHx8IGkgPCB4c2RDb25maWcuZ2V0TWluT2NjdXJzKCk7IGkrKykgewotICAgIElYU0RGcmFnbWVudCBjaGlsZEZyYWc7Ci0gICAgU3RyaW5nIGNoaWxkRnJhZ0lEOwotICAgIGlmIChpIDwgY2hpbGRGcmFncy5sZW5ndGgpIHsKLSAgICAgIGNoaWxkRnJhZyA9IGNoaWxkRnJhZ3NbaV07Ci0gICAgICBjaGlsZEZyYWdJRCA9IGNoaWxkRnJhZy5nZXRJRCgpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgIGNoaWxkRnJhZ0lEID0gZnJhZy5jcmVhdGVMaXN0SW5zdGFuY2UoKTsKLSAgICAgIGNoaWxkRnJhZyA9IGZyYWcuZ2V0RnJhZ21lbnQoY2hpbGRGcmFnSUQpOwotICAgIH0KLSAgICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gICAgZnJhZ0lELmFwcGVuZChjaGlsZEZyYWdJRCk7Ci0gICU+Ci0gIDx0cj4KLSAgICA8dGQgY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPgotICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJoYW5kbGVSb3dDaGVja2JveENsaWNrKCkiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfUk9XX0NIRUNLX0JPWCIpJT4iPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPWZyYWcuZ2V0SUQoKSU+IiB2YWx1ZT0iPCU9Y2hpbGRGcmFnSUQlPiI+Ci0gICAgICA8anNwOmluY2x1ZGUgcGFnZT0iPCU9Y2hpbGRGcmFnLmdldFdyaXRlRnJhZ21lbnQoKSU+IiBmbHVzaD0idHJ1ZSIvPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci0gIDwlCi0gIH0KLSAgJT4KLTwvdGFibGU+Ci08L3NwYW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlVW5pb25GaXhXRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZVVuaW9uRml4V0ZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWFkODM0Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlVW5pb25GaXhXRnJhZ21lbnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLnhzZC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iZWxlbWVudElEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVhTRFNpbXBsZVVuaW9uRnJhZ21lbnQgZnJhZyA9IChJWFNEU2ltcGxlVW5pb25GcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotSVhTREVsZW1lbnRGcmFnbWVudCBlbGVtZW50RnJhZ21lbnQgPSAoSVhTREVsZW1lbnRGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZWxlbWVudElELnRvU3RyaW5nKCkpOwotWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZnJhZy5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotU3RyaW5nIHRhYmxlQ29udGFpbmVySUQgPSAobmV3IFN0cmluZ0J1ZmZlcihGcmFnbWVudENvbnN0YW50cy5UQUJMRV9JRCkpLmFwcGVuZChmcmFnLmdldElEKCkpLnRvU3RyaW5nKCk7Ci1TdHJpbmcgdHdpc3RJbWFnZU5hbWUgPSAobmV3IFN0cmluZ0J1ZmZlcigieCIpKS5hcHBlbmQodGFibGVDb250YWluZXJJRCkudG9TdHJpbmcoKTsKLSU+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgZnVuY3Rpb24gY2hhbmdlVW5pb25NZW1iZXJUeXBlKHNlbGVjdCkgewotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZWN0Lm9wdGlvbnMubGVuZ3RoOyBpKyspIHsKLSAgICAgIHZhciB0YWJsZUNvbnRhaW5lcklEID0gJzwlPUZyYWdtZW50Q29uc3RhbnRzLlRBQkxFX0lEJT4nOwotICAgICAgdGFibGVDb250YWluZXJJRCArPSBzZWxlY3Qub3B0aW9ucyhpKS52YWx1ZTsKLSAgICAgIHNob3dUYWJsZSh0YWJsZUNvbnRhaW5lcklELCBzZWxlY3Qub3B0aW9ucyhpKS5zZWxlY3RlZCk7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gc2hvd1RhYmxlKHRhYmxlQ29udGFpbmVySUQsIHNob3cpIHsKLSAgICB2YXIgdGFibGVDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0YWJsZUNvbnRhaW5lcklEKTsKLSAgICBpZiAoc2hvdykKLSAgICAgIHRhYmxlQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICBlbHNlCi0gICAgICB0YWJsZUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotICB9Ci08L3NjcmlwdD4KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gIDx0cj4KLSAgICA8dGQgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9dGFibGVDb250YWluZXJJRCU+JywnPCU9dHdpc3RJbWFnZU5hbWUlPicpIj48aW1nIG5hbWU9IjwlPXR3aXN0SW1hZ2VOYW1lJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RvcGVuZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfT1BFTkVEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwPgotICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpvcGVuWFNESW5mb0RpYWxvZygnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KE9wZW5YU0RJbmZvRGlhbG9nQWN0aW9uLmdldEFjdGlvbkxpbmsoc2Vzc2lvbi5nZXRJZCgpLHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSxmcmFnSUQudG9TdHJpbmcoKSkpKSU+JykiPjwlPWZyYWcuZ2V0TmFtZSgpJT48L2E+Ci0gICAgPC90ZD4KLSAgICA8JSAKLSAgICAgIGlmKGVsZW1lbnRGcmFnbWVudCAhPSBudWxsICYmIGVsZW1lbnRGcmFnbWVudC5pc05pbGxhYmxlKCkpewotICAgICAgICBpZihlbGVtZW50RnJhZ21lbnQuaXNOaWwoKSl7Ci0gICAgICAgICAgJT4gIAotICAgICAgICAgIDx0ZCB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9IjwlPSgoSVhTREVsZW1lbnRGcmFnbWVudCllbGVtZW50RnJhZ21lbnQpLmdldE5pbElEKCklPiIgdmFsdWU9IjwlPUlYU0RFbGVtZW50RnJhZ21lbnQuTklMX1ZBTFVFJT4iIGNoZWNrZWQ+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9OSUwiKSU+PC90ZD4gCi0gICAgICAgICAgPCUKLSAgICAgICAgfSAKLSAgICAgICAgZWxzZXsKLSAgICAgICAgICAlPiAgCi0gICAgICAgICAgPHRkIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPCU9KChJWFNERWxlbWVudEZyYWdtZW50KWVsZW1lbnRGcmFnbWVudCkuZ2V0TmlsSUQoKSU+IiB2YWx1ZT0iPCU9SVhTREVsZW1lbnRGcmFnbWVudC5OSUxfVkFMVUUlPiIgPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfTklMIiklPjwvdGQ+IAotICAgICAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICAlPgotICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08c3BhbiBpZD0iPCU9dGFibGVDb250YWluZXJJRCU+Ij4KLTx0YWJsZSBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9IjwlPSh4c2RDb25maWcuZ2V0SXNXU0RMUGFydCgpID8gInJhbmdlZnJhZ3RhYmxlIiA6ICJpbm5lcnJhbmdlZnJhZ3RhYmxlIiklPiI+Ci0gIDx0cj4KLSAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIiBub3dyYXA+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVU5JT05fVFlQRSIpJT48L3RoPgotICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiIHdpZHRoPSIxMDAlIiBub3dyYXA+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVU5JT05fTUVNQkVSUyIpJT48L3RoPgotICA8L3RyPgotICA8JQotICBYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbltdIG1lbWJlclR5cGVzID0gZnJhZy5nZXRNZW1iZXJUeXBlRGVmaW5pdGlvbnMoKTsKLSAgSVhTREZyYWdtZW50W10gbWVtYmVyRnJhZ3MgPSBmcmFnLmdldEFsbEZyYWdtZW50cygpOwotICBmb3IgKGludCBpID0gMDsgaSA8IHhzZENvbmZpZy5nZXRNYXhPY2N1cnMoKTsgaSsrKSB7Ci0gICAgaW50IHR5cGVTZWxlY3Rpb25JbmRleCA9IDA7Ci0gICAgU3RyaW5nW10gbmV3TWVtYmVyRnJhZ0lEcyA9IG5ldyBTdHJpbmdbbWVtYmVyVHlwZXMubGVuZ3RoXTsKLSAgICBJWFNERnJhZ21lbnRbXSBuZXdNZW1iZXJGcmFncyA9IG5ldyBJWFNERnJhZ21lbnRbbWVtYmVyVHlwZXMubGVuZ3RoXTsKLSAgICBmb3IgKGludCBqID0gMDsgaiA8IG1lbWJlclR5cGVzLmxlbmd0aDsgaisrKSB7Ci0gICAgICBpZiAoaSA8IG1lbWJlckZyYWdzLmxlbmd0aCAmJiBtZW1iZXJGcmFnc1tpXS5nZXRYU0RUeXBlRGVmaW5pdGlvbigpLmdldFFOYW1lKCkuZXF1YWxzKG1lbWJlclR5cGVzW2pdLmdldFFOYW1lKCkpKSB7Ci0gICAgICAgIG5ld01lbWJlckZyYWdJRHNbal0gPSBtZW1iZXJGcmFnc1tpXS5nZXRJRCgpOwotICAgICAgICBuZXdNZW1iZXJGcmFnc1tqXSA9IG1lbWJlckZyYWdzW2ldOwotICAgICAgICB0eXBlU2VsZWN0aW9uSW5kZXggPSBqOwotICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgIG5ld01lbWJlckZyYWdJRHNbal0gPSBmcmFnLmNyZWF0ZVVuaW9uSW5zdGFuY2Uoaik7Ci0gICAgICAgIG5ld01lbWJlckZyYWdzW2pdID0gZnJhZy5nZXRGcmFnbWVudChuZXdNZW1iZXJGcmFnSURzW2pdKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgJT4KLSAgICA8dHI+Ci0gICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICA8c2VsZWN0IGlkPSI8JT1mcmFnLmdldElEKCklPiIgbmFtZT0iPCU9ZnJhZy5nZXRJRCgpJT4iIG9uQ2hhbmdlPSJqYXZhc2NyaXB0OmNoYW5nZVVuaW9uTWVtYmVyVHlwZSh0aGlzKSIgdGl0bGU9IjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX1VOSU9OX1RZUEUiKSU+Ij4KLSAgICAgICAgICA8JQotICAgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgbWVtYmVyVHlwZXMubGVuZ3RoOyBrKyspIHsKLSAgICAgICAgICAgIGlmIChrID09IHR5cGVTZWxlY3Rpb25JbmRleCkgewotICAgICAgICAgICAgICAlPgotICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI8JT1uZXdNZW1iZXJGcmFnSURzW2tdJT4iIHNlbGVjdGVkPjwlPW1lbWJlclR5cGVzW2tdLmdldFFOYW1lKCklPgotICAgICAgICAgICAgICA8JQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjwlPW5ld01lbWJlckZyYWdJRHNba10lPiI+PCU9bWVtYmVyVHlwZXNba10uZ2V0UU5hbWUoKSU+Ci0gICAgICAgICAgICAgIDwlCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgICU+Ci0gICAgICAgIDwvc2VsZWN0PgotICAgICAgPC90ZD4KLSAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgIDwlCi0gICAgICAgIGZvciAoaW50IGwgPSAwOyBsIDwgbWVtYmVyVHlwZXMubGVuZ3RoOyBsKyspIHsKLSAgICAgICAgICBmcmFnSUQuZGVsZXRlKDAsIGZyYWdJRC5sZW5ndGgoKSk7Ci0gICAgICAgICAgZnJhZ0lELmFwcGVuZChuZXdNZW1iZXJGcmFnSURzW2xdKTsKLSAgICAgICAgICBTdHJpbmcgbWVtYmVyVGFibGVDb250YWluZXJJRCA9IChuZXcgU3RyaW5nQnVmZmVyKEZyYWdtZW50Q29uc3RhbnRzLlRBQkxFX0lEKSkuYXBwZW5kKG5ld01lbWJlckZyYWdzW2xdLmdldElEKCkpLnRvU3RyaW5nKCk7Ci0gICAgICAgICU+Ci0gICAgICAgIDxzcGFuIGlkPSI8JT1tZW1iZXJUYWJsZUNvbnRhaW5lcklEJT4iPgotICAgICAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1uZXdNZW1iZXJGcmFnc1tsXS5nZXRXcml0ZUZyYWdtZW50KCklPiIgZmx1c2g9InRydWUiLz4KLSAgICAgICAgPC9zcGFuPgotICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgICAgICBzaG93VGFibGUoJzwlPW1lbWJlclRhYmxlQ29udGFpbmVySUQlPicsIDwlPShsID09IHR5cGVTZWxlY3Rpb25JbmRleCklPik7Ci0gICAgICAgIDwvc2NyaXB0PgotICAgICAgICA8JQotICAgICAgICB9Ci0gICAgICAgICU+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwlCi0gIH0KLSAgJT4KLTwvdGFibGU+Ci08L3NwYW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlVW5pb25SRnJhZ21lbnRKU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ZyYWdtZW50L1hTRFNpbXBsZVVuaW9uUkZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWU2MWZlNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlVW5pb25SRnJhZ21lbnRKU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5mcmFnbWVudC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImZyYWdJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5vZGVJRCIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci0KLTwlCi1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLU5vZGUgb3Blck5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KW9wZXJOb2RlLmdldFRyZWVFbGVtZW50KCk7Ci1JWFNEU2ltcGxlVW5pb25GcmFnbWVudCBmcmFnID0gKElYU0RTaW1wbGVVbmlvbkZyYWdtZW50KW9wZXJFbGVtZW50LmdldEZyYWdtZW50QnlJRChmcmFnSUQudG9TdHJpbmcoKSk7Ci1YU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbiB4c2RDb25maWcgPSBmcmFnLmdldFhTRFRvRnJhZ21lbnRDb25maWd1cmF0aW9uKCk7Ci1JWFNERnJhZ21lbnRbXSBjaGlsZEZyYWdzID0gZnJhZy5nZXRBbGxGcmFnbWVudHMoKTsKLSU+Ci08dGFibGUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGNsYXNzPSI8JT0oeHNkQ29uZmlnLmdldElzV1NETFBhcnQoKSA/ICJmaXhmcmFndGFibGUiIDogImlubmVyZml4ZnJhZ3RhYmxlIiklPiI+Ci08JQotZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZEZyYWdzLmxlbmd0aDsgaSsrKSB7Ci0gIGZyYWdJRC5kZWxldGUoMCwgZnJhZ0lELmxlbmd0aCgpKTsKLSAgZnJhZ0lELmFwcGVuZChjaGlsZEZyYWdzW2ldLmdldElEKCkpOwotJT4KLSAgPHRyPgotICAgIDx0ZD4KLSAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSI8JT1jaGlsZEZyYWdzW2ldLmdldFJlYWRGcmFnbWVudCgpJT4iIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwlCi19Ci0lPgotPC90YWJsZT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVVbmlvblJhbmdlV0ZyYWdtZW50SlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9mcmFnbWVudC9YU0RTaW1wbGVVbmlvblJhbmdlV0ZyYWdtZW50SlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTU2MTEwMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvZnJhZ21lbnQvWFNEU2ltcGxlVW5pb25SYW5nZVdGcmFnbWVudEpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNTcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmZyYWdtZW50LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLnhzZC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iZnJhZ0lEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibm9kZUlEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iZWxlbWVudElEIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPCUKLVdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotTm9kZSBzZWxlY3RlZE5vZGUgPSB3c2RsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXROb2RlKEludGVnZXIucGFyc2VJbnQobm9kZUlELnRvU3RyaW5nKCkpKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KXNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotSVhTRFNpbXBsZVVuaW9uRnJhZ21lbnQgZnJhZyA9IChJWFNEU2ltcGxlVW5pb25GcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZnJhZ0lELnRvU3RyaW5nKCkpOwotWFNEVG9GcmFnbWVudENvbmZpZ3VyYXRpb24geHNkQ29uZmlnID0gZnJhZy5nZXRYU0RUb0ZyYWdtZW50Q29uZmlndXJhdGlvbigpOwotSVhTREVsZW1lbnRGcmFnbWVudCBlbGVtZW50RnJhZ21lbnQgPSAoSVhTREVsZW1lbnRGcmFnbWVudClvcGVyRWxlbWVudC5nZXRGcmFnbWVudEJ5SUQoZWxlbWVudElELnRvU3RyaW5nKCkpOwotU3RyaW5nIHRhYmxlQ29udGFpbmVySUQgPSAobmV3IFN0cmluZ0J1ZmZlcihGcmFnbWVudENvbnN0YW50cy5UQUJMRV9JRCkpLmFwcGVuZChmcmFnLmdldElEKCkpLnRvU3RyaW5nKCk7Ci1TdHJpbmcgdHdpc3RJbWFnZU5hbWUgPSAobmV3IFN0cmluZ0J1ZmZlcigieCIpKS5hcHBlbmQodGFibGVDb250YWluZXJJRCkudG9TdHJpbmcoKTsKLVN0cmluZyBuYW1lQW5jaG9ySUQgPSAobmV3IFN0cmluZ0J1ZmZlcihGcmFnbWVudENvbnN0YW50cy5OQU1FX0FOQ0hPUl9JRCkpLmFwcGVuZChmcmFnLmdldElEKCkpLnRvU3RyaW5nKCk7Ci0lPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGZ1bmN0aW9uIGNoYW5nZVVuaW9uTWVtYmVyVHlwZShzZWxlY3QpIHsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGVjdC5vcHRpb25zLmxlbmd0aDsgaSsrKSB7Ci0gICAgICB2YXIgdGFibGVDb250YWluZXJJRCA9ICc8JT1GcmFnbWVudENvbnN0YW50cy5UQUJMRV9JRCU+JzsKLSAgICAgIHRhYmxlQ29udGFpbmVySUQgKz0gc2VsZWN0Lm9wdGlvbnMoaSkudmFsdWU7Ci0gICAgICBzaG93VGFibGUodGFibGVDb250YWluZXJJRCwgc2VsZWN0Lm9wdGlvbnMoaSkuc2VsZWN0ZWQpOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIHNob3dUYWJsZSh0YWJsZUNvbnRhaW5lcklELCBzaG93KSB7Ci0gICAgdmFyIHRhYmxlQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFibGVDb250YWluZXJJRCk7Ci0gICAgaWYgKHNob3cpCi0gICAgICB0YWJsZUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gICAgZWxzZQotICAgICAgdGFibGVDb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKLSAgfQotPC9zY3JpcHQ+Ci08YSBuYW1lPSI8JT1uYW1lQW5jaG9ySUQlPiIvPgotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgPHRyPgotICAgIDx0ZCBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLCc8JT10d2lzdEltYWdlTmFtZSU+JykiPjxpbWcgbmFtZT0iPCU9dHdpc3RJbWFnZU5hbWUlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdG9wZW5lZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9PUEVORUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICA8L3RkPgotICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXA+Ci0gICAgICA8YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5YU0RJbmZvRGlhbG9nKCc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlblhTREluZm9EaWFsb2dBY3Rpb24uZ2V0QWN0aW9uTGluayhzZXNzaW9uLmdldElkKCksc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLGZyYWdJRC50b1N0cmluZygpKSkpJT4nKSI+PCU9ZnJhZy5nZXROYW1lKCklPjwvYT4KLSAgICA8L3RkPgotICAgIDwlIAotICAgICAgaWYoZWxlbWVudEZyYWdtZW50ICE9IG51bGwgJiYgZWxlbWVudEZyYWdtZW50LmlzTmlsbGFibGUoKSl7Ci0gICAgICAgIGlmKGVsZW1lbnRGcmFnbWVudC5pc05pbCgpKXsKLSAgICAgICAgICAlPiAgCi0gICAgICAgICAgPHRkIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPCU9KChJWFNERWxlbWVudEZyYWdtZW50KWVsZW1lbnRGcmFnbWVudCkuZ2V0TmlsSUQoKSU+IiB2YWx1ZT0iPCU9SVhTREVsZW1lbnRGcmFnbWVudC5OSUxfVkFMVUUlPiIgY2hlY2tlZD48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX05JTCIpJT48L3RkPiAKLSAgICAgICAgICA8JQotICAgICAgICB9IAotICAgICAgICBlbHNlewotICAgICAgICAgICU+ICAKLSAgICAgICAgICA8dGQgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSI8JT0oKElYU0RFbGVtZW50RnJhZ21lbnQpZWxlbWVudEZyYWdtZW50KS5nZXROaWxJRCgpJT4iIHZhbHVlPSI8JT1JWFNERWxlbWVudEZyYWdtZW50Lk5JTF9WQUxVRSU+IiA+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9OSUwiKSU+PC90ZD4gCi0gICAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgfQotICAgICU+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6Y3JlYXRlSW5zdGFuY2UoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsIDwlPXhzZENvbmZpZy5nZXRNYXhPY2N1cnMoKSU+LCAnPCU9ZnJhZ0lEJT4nLCAnPCU9bmFtZUFuY2hvcklEJT4nKSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19BREQiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcD4KLSAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6Y2hlY2tNaW5PY2N1cnNBbmRSZW1vdmVTZWxlY3RlZFJvd3MoJzwlPXRhYmxlQ29udGFpbmVySUQlPicsIDwlPXhzZENvbmZpZy5nZXRNaW5PY2N1cnMoKSU+KSI+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTElOS19SRU1PVkUiKSU+PC9hPgotICAgIDwvdGQ+Ci0gICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTxzcGFuIGlkPSI8JT10YWJsZUNvbnRhaW5lcklEJT4iPgotPHRhYmxlIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0iPCU9KHhzZENvbmZpZy5nZXRJc1dTRExQYXJ0KCkgPyAicmFuZ2VmcmFndGFibGUiIDogImlubmVycmFuZ2VmcmFndGFibGUiKSU+Ij4KLSAgPHRyPgotICAgIDx0aCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJoYW5kbGVDaGVja0FsbENsaWNrKCc8JT10YWJsZUNvbnRhaW5lcklEJT4nLHRoaXMpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX0FMTF9DSEVDS19CT1giKSU+Ij48L3RoPgotICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiIG5vd3JhcD48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9VTklPTl9UWVBFIiklPjwvdGg+Ci0gICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciIgd2lkdGg9IjEwMCUiIG5vd3JhcD48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9VTklPTl9NRU1CRVJTIiklPjwvdGg+Ci0gIDwvdHI+Ci0gIDwlCi0gIFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uW10gbWVtYmVyVHlwZXMgPSBmcmFnLmdldE1lbWJlclR5cGVEZWZpbml0aW9ucygpOwotICBJWFNERnJhZ21lbnRbXSBtZW1iZXJGcmFncyA9IGZyYWcuZ2V0QWxsRnJhZ21lbnRzKCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgbWVtYmVyRnJhZ3MubGVuZ3RoIHx8IGkgPCB4c2RDb25maWcuZ2V0TWluT2NjdXJzKCk7IGkrKykgewotICAgIGludCB0eXBlU2VsZWN0aW9uSW5kZXggPSAwOwotICAgIFN0cmluZ1tdIG5ld01lbWJlckZyYWdJRHMgPSBuZXcgU3RyaW5nW21lbWJlclR5cGVzLmxlbmd0aF07Ci0gICAgSVhTREZyYWdtZW50W10gbmV3TWVtYmVyRnJhZ3MgPSBuZXcgSVhTREZyYWdtZW50W21lbWJlclR5cGVzLmxlbmd0aF07Ci0gICAgZm9yIChpbnQgaiA9IDA7IGogPCBtZW1iZXJUeXBlcy5sZW5ndGg7IGorKykgewotICAgICAgaWYgKGkgPCBtZW1iZXJGcmFncy5sZW5ndGggJiYgbWVtYmVyRnJhZ3NbaV0uZ2V0WFNEVHlwZURlZmluaXRpb24oKS5nZXRRTmFtZSgpLmVxdWFscyhtZW1iZXJUeXBlc1tqXS5nZXRRTmFtZSgpKSkgewotICAgICAgICBuZXdNZW1iZXJGcmFnSURzW2pdID0gbWVtYmVyRnJhZ3NbaV0uZ2V0SUQoKTsKLSAgICAgICAgbmV3TWVtYmVyRnJhZ3Nbal0gPSBtZW1iZXJGcmFnc1tpXTsKLSAgICAgICAgdHlwZVNlbGVjdGlvbkluZGV4ID0gajsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICBuZXdNZW1iZXJGcmFnSURzW2pdID0gZnJhZy5jcmVhdGVVbmlvbkluc3RhbmNlKGopOwotICAgICAgICBuZXdNZW1iZXJGcmFnc1tqXSA9IGZyYWcuZ2V0RnJhZ21lbnQobmV3TWVtYmVyRnJhZ0lEc1tqXSk7Ci0gICAgICB9Ci0gICAgfQotICAgICU+Ci0gICAgPHRyPgotICAgICAgPHRkIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD4KLSAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJoYW5kbGVSb3dDaGVja2JveENsaWNrKCkiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfUk9XX0NIRUNLX0JPWCIpJT4iPgotICAgICAgPC90ZD4KLSAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgIDxzZWxlY3QgaWQ9IjwlPWZyYWcuZ2V0SUQoKSU+IiBuYW1lPSI8JT1mcmFnLmdldElEKCklPiIgb25DaGFuZ2U9ImphdmFzY3JpcHQ6Y2hhbmdlVW5pb25NZW1iZXJUeXBlKHRoaXMpIiB0aXRsZT0iPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfVU5JT05fVFlQRSIpJT4iPgotICAgICAgICAgIDwlCi0gICAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBtZW1iZXJUeXBlcy5sZW5ndGg7IGsrKykgewotICAgICAgICAgICAgaWYgKGsgPT0gdHlwZVNlbGVjdGlvbkluZGV4KSB7Ci0gICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjwlPW5ld01lbWJlckZyYWdJRHNba10lPiIgc2VsZWN0ZWQ+PCU9bWVtYmVyVHlwZXNba10uZ2V0UU5hbWUoKSU+Ci0gICAgICAgICAgICAgIDwlCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgJT4KLSAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iPCU9bmV3TWVtYmVyRnJhZ0lEc1trXSU+Ij48JT1tZW1iZXJUeXBlc1trXS5nZXRRTmFtZSgpJT4KLSAgICAgICAgICAgICAgPCUKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgJT4KLSAgICAgICAgPC9zZWxlY3Q+Ci0gICAgICA8L3RkPgotICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgPCUKLSAgICAgICAgZm9yIChpbnQgbCA9IDA7IGwgPCBtZW1iZXJUeXBlcy5sZW5ndGg7IGwrKykgewotICAgICAgICAgIGZyYWdJRC5kZWxldGUoMCwgZnJhZ0lELmxlbmd0aCgpKTsKLSAgICAgICAgICBmcmFnSUQuYXBwZW5kKG5ld01lbWJlckZyYWdJRHNbbF0pOwotICAgICAgICAgIFN0cmluZyBtZW1iZXJUYWJsZUNvbnRhaW5lcklEID0gKG5ldyBTdHJpbmdCdWZmZXIoRnJhZ21lbnRDb25zdGFudHMuVEFCTEVfSUQpKS5hcHBlbmQobmV3TWVtYmVyRnJhZ3NbbF0uZ2V0SUQoKSkudG9TdHJpbmcoKTsKLSAgICAgICAgJT4KLSAgICAgICAgPHNwYW4gaWQ9IjwlPW1lbWJlclRhYmxlQ29udGFpbmVySUQlPiI+Ci0gICAgICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9IjwlPW5ld01lbWJlckZyYWdzW2xdLmdldFdyaXRlRnJhZ21lbnQoKSU+IiBmbHVzaD0idHJ1ZSIvPgotICAgICAgICA8L3NwYW4+Ci0gICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgICAgIHNob3dUYWJsZSgnPCU9bWVtYmVyVGFibGVDb250YWluZXJJRCU+JywgPCU9KGwgPT0gdHlwZVNlbGVjdGlvbkluZGV4KSU+KTsKLSAgICAgICAgPC9zY3JpcHQ+Ci0gICAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgICAgJT4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgPCUKLSAgfQotICAlPgotPC90YWJsZT4KLTwvc3Bhbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9pbWFnZXMvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9pbWFnZXMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvaW1hZ2VzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ltYWdlcy9pbnZva2Vfd3NkbF9vcGVyYXRpb25fZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvaW1hZ2VzL2ludm9rZV93c2RsX29wZXJhdGlvbl9lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGYwNTU5Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvaW1hZ2VzL2ludm9rZV93c2RsX29wZXJhdGlvbl9lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9pbWFnZXMvaW52b2tlX3dzZGxfb3BlcmF0aW9uX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9pbWFnZXMvaW52b2tlX3dzZGxfb3BlcmF0aW9uX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmNmYzQwMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvaW1hZ2VzL2ludm9rZV93c2RsX29wZXJhdGlvbl9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvaW1hZ2VzL29wZW5fd3NkbF9lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9pbWFnZXMvb3Blbl93c2RsX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZmZhODE4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9pbWFnZXMvb3Blbl93c2RsX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ltYWdlcy9vcGVuX3dzZGxfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ltYWdlcy9vcGVuX3dzZGxfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDU1YmFlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9pbWFnZXMvb3Blbl93c2RsX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9pbWFnZXMvd3NkbF9iaW5kaW5nX25vZGUuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ltYWdlcy93c2RsX2JpbmRpbmdfbm9kZS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlMzg2YzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ltYWdlcy93c2RsX2JpbmRpbmdfbm9kZS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvaW1hZ2VzL3dzZGxfb3BlcmF0aW9uX25vZGUuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ltYWdlcy93c2RsX29wZXJhdGlvbl9ub2RlLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzIxMWJhMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvaW1hZ2VzL3dzZGxfb3BlcmF0aW9uX25vZGUuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL2ltYWdlcy93c2RsX3NlcnZpY2Vfbm9kZS5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvaW1hZ2VzL3dzZGxfc2VydmljZV9ub2RlLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTVkMDhiZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvaW1hZ2VzL3dzZGxfc2VydmljZV9ub2RlLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9zY3JpcHRzLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvc2NyaXB0cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9zY3JpcHRzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3NjcmlwdHMvZnJhZ21lbnR0YWJsZXMuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3NjcmlwdHMvZnJhZ21lbnR0YWJsZXMuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzBjZGNlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9zY3JpcHRzL2ZyYWdtZW50dGFibGVzLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDIwMiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy90YWJsZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL2Zvcm11dGlscy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvY2FsZW5kYXJicm93c2VyLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLQotPCUKLSAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotJT4KLQotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIHZhciB4c2RJbmZvRGlhbG9nOwotICB2YXIgeHNkSW5mb0RpYWxvZ0Nsb3NlZCA9IHRydWU7Ci0gIHZhciByb3dDaGVja2JveE5hbWUgPSAicm93Q2hlY2tib3hOYW1lIjsKLSAgdmFyIHVuYm91bmRlZCA9IDwlPUZyYWdtZW50Q29uc3RhbnRzLlVOQk9VTkRFRCU+OwotCi0gIGZ1bmN0aW9uIGNoZWNrTWF4T2NjdXJzUmVhY2hlZCh0YWJsZUNvbnRhaW5lcklELCBtYXhPY2N1cnMpIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklEKTsKLSAgICBpZiAobWF4T2NjdXJzICE9IHVuYm91bmRlZCAmJiAodGFibGUucm93cy5sZW5ndGggLSBudW1iZXJPZkhlYWRlclJvd3MpID49IG1heE9jY3VycykgewotICAgICAgYWxlcnQoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX01BWF9PQ0NVUlNfVklPTEFUSU9OIikpJT4iKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBmdW5jdGlvbiBjaGVja01pbk9jY3Vyc0FuZFJlbW92ZVNlbGVjdGVkUm93cyh0YWJsZUNvbnRhaW5lcklELCBtaW5PY2N1cnMpIHsKLSAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklEKTsKLSAgICB2YXIgcm93c0xlbmd0aCA9IHRhYmxlLnJvd3MubGVuZ3RoIC0gbnVtYmVyT2ZIZWFkZXJSb3dzOwotICAgIHZhciBjaGVja2VkUm93cyA9IDA7Ci0gICAgZm9yICh2YXIgaSA9IG51bWJlck9mSGVhZGVyUm93czsgaSA8IHRhYmxlLnJvd3MubGVuZ3RoOyBpKyspIHsKLSAgICAgIHZhciB0YWJsZVJvdyA9IHRhYmxlLnJvd3NbaV07Ci0gICAgICB2YXIgcm93Q2hlY2tib3ggPSB0YWJsZVJvdy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKS5pdGVtKDApOwotICAgICAgaWYgKHJvd0NoZWNrYm94LmNoZWNrZWQpCi0gICAgICAgIGNoZWNrZWRSb3dzKys7Ci0gICAgfQotICAgIGlmIChjaGVja2VkUm93cyA9PSAwKQotICAgICAgYWxlcnQoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PVEhJTkdfU0VMRUNURUQiKSklPiIpOwotICAgIGVsc2UgaWYgKChyb3dzTGVuZ3RoIC0gY2hlY2tlZFJvd3MpIDwgbWluT2NjdXJzKQotICAgICAgYWxlcnQoIjwlPUhUTUxVdGlscy5KU01hbmdsZSh3c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX01JTl9PQ0NVUlNfVklPTEFUSU9OIikpJT4iKTsKLSAgICBlbHNlCi0gICAgICByZW1vdmVTZWxlY3RlZFJvd3ModGFibGVDb250YWluZXJJRCk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGNoZWNrTWluT2NjdXJzQW5kUmVtb3ZlU2VsZWN0ZWRSb3dzQXR0cmlidXRlKHRhYmxlQ29udGFpbmVySUQsIG1pbk9jY3VycykgewotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySUQpOwotICAgIHZhciByb3dzTGVuZ3RoID0gdGFibGUucm93cy5sZW5ndGggLSBudW1iZXJPZkhlYWRlclJvd3M7Ci0gICAgdmFyIGNoZWNrZWRSb3dzID0gMDsKLSAgICBmb3IgKHZhciBpID0gbnVtYmVyT2ZIZWFkZXJSb3dzOyBpIDwgdGFibGUucm93cy5sZW5ndGg7IGkrKykgewotICAgICAgdmFyIHRhYmxlUm93ID0gdGFibGUucm93c1tpXTsKLSAgICAgIHZhciByb3dDaGVja2JveCA9IHRhYmxlUm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLml0ZW0oMCk7Ci0gICAgICBpZiAocm93Q2hlY2tib3guY2hlY2tlZCkKLSAgICAgICAgY2hlY2tlZFJvd3MrKzsKLSAgICB9Ci0gICAgaWYgKGNoZWNrZWRSb3dzID09IDApCi0gICAgICBhbGVydCgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9USElOR19TRUxFQ1RFRCIpKSU+Iik7Ci0gICAgZWxzZSBpZiAoKHJvd3NMZW5ndGggLSBjaGVja2VkUm93cykgPCBtaW5PY2N1cnMpCi0gICAgICBhbGVydCgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKHdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTUlOX09DQ1VSU19WSU9MQVRJT04iKSklPiIpOwotICAgIGVsc2UKLSAgICAgIHJlbW92ZVNlbGVjdGVkUm93c0F0dHJpYnV0ZSh0YWJsZUNvbnRhaW5lcklEKTsKLSAgfQotICAKLSAgCi0gIGZ1bmN0aW9uIGNoZWNrTWluT2NjdXJzQW5kUmVtb3ZlU2VsZWN0ZWREYXRlVGltZVJvd3MoY2FsZW5kYXJUeXBlLHRhYmxlQ29udGFpbmVySUQsbWluT2NjdXJzKQotICB7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJRCk7Ci0gICAgdmFyIG5ld0NhbGVuZGFyVGFyZ2V0Um93ID0gY2FsZW5kYXJUYXJnZXRSb3c7Ci0gICAgZm9yICh2YXIgaT1udW1iZXJPZkhlYWRlclJvd3M7aTx0YWJsZS5yb3dzLmxlbmd0aDtpKyspCi0gICAgewotICAgICAgdmFyIGNvbHVtbnMgPSB0YWJsZS5yb3dzW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwotICAgICAgdmFyIHJvd0NoZWNrYm94ID0gY29sdW1ucy5pdGVtKDApLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLml0ZW0oMCk7Ci0gICAgICBpZiAocm93Q2hlY2tib3guY2hlY2tlZCkKLSAgICAgIHsKLSAgICAgICAgaWYgKGktbnVtYmVyT2ZIZWFkZXJSb3dzID09IGNhbGVuZGFyVGFyZ2V0Um93KQotICAgICAgICAgIG5ld0NhbGVuZGFyVGFyZ2V0Um93ID0gLTE7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBuZXdDYWxlbmRhclRhcmdldFJvdy0tOwotICAgICAgfQotICAgIH0KLSAgICBpZiAobmV3Q2FsZW5kYXJUYXJnZXRSb3cgPT0gLTEpCi0gICAgICBjbG9zZUNhbGVuZGFyQnJvd3NlcigpOwotICAgIGNhbGVuZGFyVGFyZ2V0Um93ID0gbmV3Q2FsZW5kYXJUYXJnZXRSb3c7Ci0gICAgICAKLSAgICBjaGVja01pbk9jY3Vyc0FuZFJlbW92ZVNlbGVjdGVkUm93cyh0YWJsZUNvbnRhaW5lcklELG1pbk9jY3Vycyk7Ci08JQotICAgLy8gRml4IHRoZSBicm93c2UuLi4gbGlua3MuCi0lPgotICAgIHZhciB0YWJsZSA9IGdldFRhYmxlKHRhYmxlQ29udGFpbmVySUQpOwotICAgIGZvciAodmFyIGk9bnVtYmVyT2ZIZWFkZXJSb3dzO2k8dGFibGUucm93cy5sZW5ndGg7aSsrKQotICAgIHsKLSAgICAgIHZhciBjb2x1bW5zID0gdGFibGUucm93c1tpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKTsKLSAgICAgIHZhciBkYXRlVGltZVRleHRGaWVsZCA9IGNvbHVtbnMuaXRlbSgxKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKS5pdGVtKDApOwotICAgICAgc2V0RGF0ZVRpbWVCcm93c2VMaW5rSHJlZihjb2x1bW5zLml0ZW0oMikuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKS5pdGVtKDApLGNhbGVuZGFyVHlwZSxkYXRlVGltZVRleHRGaWVsZC5uYW1lLGktbnVtYmVyT2ZIZWFkZXJSb3dzKTsKLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBjcmVhdGVJbnN0YW5jZSh0YWJsZUNvbnRhaW5lcklELCBtYXhPY2N1cnMsIGZyYWdtZW50SUQsIG5hbWVBbmNob3JJRCkgewotICAgIGlmIChjaGVja01heE9jY3Vyc1JlYWNoZWQodGFibGVDb250YWluZXJJRCwgbWF4T2NjdXJzKSkKLSAgICAgIHJldHVybjsKLSAgICB0d2lzdE9wZW4odGFibGVDb250YWluZXJJRCk7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJRCk7Ci0gICAgdmFyIHRhYmxlQm9keSA9IHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpLml0ZW0oMCk7Ci0gICAgdmFyIG5ld1JvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7Ci0gICAgdmFyIG5ld0NvbHVtbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgbmV3Q29sdW1uLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIjwlPUZyYWdtZW50Q29uc3RhbnRzLkZSQUdNRU5UX0lEJT4iLCBmcmFnbWVudElEKSk7Ci0gICAgbmV3Q29sdW1uLmFwcGVuZENoaWxkKGNyZWF0ZUhpZGRlbkVsZW1lbnQoIjwlPUZyYWdtZW50Q29uc3RhbnRzLk5BTUVfQU5DSE9SX0lEJT4iLCBuYW1lQW5jaG9ySUQpKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQobmV3Q29sdW1uKTsKLSAgICB0YWJsZUJvZHkuYXBwZW5kQ2hpbGQobmV3Um93KTsKLSAgICB2YXIgZm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJmb3JtIik7Ci0gICAgZm9ybVswXS5hY3Rpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2RsL2FjdGlvbnMvQ3JlYXRlSW5zdGFuY2VBY3Rpb25KU1AuanNwIikpJT4iOwotICAgIGZvcm1bMF0uc3VibWl0KCk7Ci0gIH0KLQotICBmdW5jdGlvbiBvcGVuWFNESW5mb0RpYWxvZyhsaW5rKSB7Ci0gICAgeHNkSW5mb0RpYWxvZyA9IHdpbmRvdy5vcGVuKGxpbmssICJYU0RJbmZvcm1hdGlvbkRpYWxvZyIsICJoZWlnaHQ9NTAwLHdpZHRoPTUwMCxzY3JvbGxiYXJzPW5vLHJlc2l6YWJsZT15ZXMiKTsKLSAgICBpZiAoeHNkSW5mb0RpYWxvZy5mb2N1cykKLSAgICAgIHhzZEluZm9EaWFsb2cuZm9jdXMoKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGNsb3NlWFNESW5mb0RpYWxvZygpCi0gIHsKLSAgICBpZiAoIXhzZEluZm9EaWFsb2dDbG9zZWQpCi0gICAgICB4c2RJbmZvRGlhbG9nLmNsb3NlKCk7Ci0gIH0KLQotICBmdW5jdGlvbiBzeW5jaHJvbml6ZUZyYWdtZW50Vmlld3Modmlld0lEKSB7Ci0gICAgdmFyIGZvcm0gPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZm9ybSIpOwotICAgIGlmICh2aWV3SUQgPT0gIjwlPUZyYWdtZW50Q29uc3RhbnRzLkZSQUdNRU5UX1ZJRVdfU1dJVENIX0ZPUk1fVE9fU09VUkNFJT4iKQotICAgICAgZm9ybVswXS5hcHBlbmRDaGlsZChjcmVhdGVIaWRkZW5FbGVtZW50KCI8JT1GcmFnbWVudENvbnN0YW50cy5GUkFHTUVOVF9WSUVXX0lEJT4iLCI8JT1GcmFnbWVudENvbnN0YW50cy5GUkFHTUVOVF9WSUVXX1NXSVRDSF9GT1JNX1RPX1NPVVJDRSU+IikpOwotICAgIGVsc2UKLSAgICAgIGZvcm1bMF0uYXBwZW5kQ2hpbGQoY3JlYXRlSGlkZGVuRWxlbWVudCgiPCU9RnJhZ21lbnRDb25zdGFudHMuRlJBR01FTlRfVklFV19JRCU+IiwiPCU9RnJhZ21lbnRDb25zdGFudHMuRlJBR01FTlRfVklFV19TV0lUQ0hfU09VUkNFX1RPX0ZPUk0lPiIpKTsKLSAgICBmb3JtWzBdLmFjdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvYWN0aW9ucy9TeW5jaHJvbml6ZUZyYWdtZW50Vmlld3NBY3Rpb25KU1AuanNwIikpJT4iOwotICAgIGZvcm1bMF0uc3VibWl0KCk7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGFkZFNpbXBsZUF0b21pY0RhdGVUaW1lUm93cyhjYWxlbmRhclR5cGUsdGFibGVDb250YWluZXJJRCxpZCxuYW1lLHZhbHVlLG1heE9jY3VycykgewotICAgIGlmIChjaGVja01heE9jY3Vyc1JlYWNoZWQodGFibGVDb250YWluZXJJRCwgbWF4T2NjdXJzKSkKLSAgICAgIHJldHVybjsKLSAgICB0d2lzdE9wZW4odGFibGVDb250YWluZXJJRCk7Ci0gICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJRCk7Ci0gICAgdmFyIHRhYmxlQm9keSA9IHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpLml0ZW0oMCk7Ci0gICAgdmFyIG5ld1JvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7Ci0gICAgdmFyIGNvbHVtbjAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHZhciBjb2x1bW4xID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB2YXIgY29sdW1uMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0KLSAgICB2YXIgcm93Q2hlY2tib3ggPSBjcmVhdGVSb3dDaGVja2JveCgpOwotICAgIGNvbHVtbjAuYXBwZW5kQ2hpbGQocm93Q2hlY2tib3gpOwotCi0gICAgdmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKLSAgICBpbnB1dC50eXBlID0gInRleHQiOwotICAgIGlucHV0LmlkID0gaWQ7Ci0gICAgaW5wdXQubmFtZSA9IG5hbWU7Ci0gICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUubGVuZ3RoID4gMCkKLSAgICAgIGlucHV0LnZhbHVlID0gdmFsdWU7Ci0gICAgaW5wdXQuY2xhc3NOYW1lID0gInRhYmxldGV4dGVudGVyIjsKLSAgICBjb2x1bW4xLmFwcGVuZENoaWxkKGlucHV0KTsKLSAgICAKLSAgICBjb2x1bW4yLmFwcGVuZENoaWxkKGNyZWF0ZURhdGVUaW1lQnJvd3NlTGluayhjYWxlbmRhclR5cGUsbmFtZSx0YWJsZS5yb3dzLmxlbmd0aC0xKSk7Ci0gICAgY29sdW1uMi53aWR0aCA9ICI5MCUiOwotCi0gICAgY29sdW1uMC5jbGFzc05hbWUgPSAiY2hlY2tib3hjZWxscyI7Ci0gICAgY29sdW1uMS5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgY29sdW1uMi5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGNvbHVtbjApOwotICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChjb2x1bW4xKTsKLSAgICBuZXdSb3cuYXBwZW5kQ2hpbGQoY29sdW1uMik7Ci0gICAgdGFibGVCb2R5LmFwcGVuZENoaWxkKG5ld1Jvdyk7Ci0gIH0gIAotICAKLSAgZnVuY3Rpb24gY3JlYXRlRGF0ZVRpbWVCcm93c2VMaW5rKGNhbGVuZGFyVHlwZSxuYW1lLHBvc2l0aW9uKQotICB7Ci0gICAgdmFyIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0gICAgc2V0RGF0ZVRpbWVCcm93c2VMaW5rSHJlZihsaW5rLGNhbGVuZGFyVHlwZSxuYW1lLHBvc2l0aW9uKTsKLSAgICBsaW5rLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xJTktfQlJPV1NFIikpJT4iKSk7Ci0gICAgcmV0dXJuIGxpbms7Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIHNldERhdGVUaW1lQnJvd3NlTGlua0hyZWYobGluayxjYWxlbmRhclR5cGUsbmFtZSxwb3NpdGlvbikKLSAgewotICAgIGxpbmsuaHJlZiA9ICJqYXZhc2NyaXB0Om9wZW5DYWxlbmRhckJyb3dzZXIoIitjYWxlbmRhclR5cGUrIiwnY29udGVudGJvcmRlcicsJyIrbmFtZSsiJywiK3Bvc2l0aW9uKyIpIjsKLSAgICByZXR1cm4gbGluazsKLSAgfQotPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvc2NyaXB0cy93c2RsZnJhbWVzZXRzLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9zY3JpcHRzL3dzZGxmcmFtZXNldHMuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMGMzODQ5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9zY3JpcHRzL3dzZGxmcmFtZXNldHMuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9wYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgZnVuY3Rpb24gZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0KCkKLSAgewotICAgIHJldHVybiBwZXJzcGVjdGl2ZUNvbnRlbnQuZnJhbWVzWyI8JT1XU0RMRnJhbWVOYW1lcy5XU0RMX0FDVElPTlNfQ09OVEFJTkVSJT4iXS5kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZnJhbWVzZXQiKS5pdGVtKDApOwotICB9Ci0gIAotICBmdW5jdGlvbiBwcm9jZXNzRnJhbWVzZXRTaXplcyhmcmFtZXNldFNpemVzRm9ybSkKLSAgewotICAgIHRvZ2dsZURvdWJsZUNsaWNrQ29sdW1uVGl0bGUoKTsKLSAgICB2YXIgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXQgPSBnZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldCgpOwotICAgIHZhciBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXQgPSBnZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXQoKTsKLSAgICBmcmFtZXNldFNpemVzRm9ybS48JT1XU0RMQWN0aW9uSW5wdXRzLkZSQU1FU0VUX0NPTFNfUEVSU1BFQ1RJVkVfQ09OVEVOVCU+LnZhbHVlID0gcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXQuY29sczsKLSAgICBmcmFtZXNldFNpemVzRm9ybS48JT1XU0RMQWN0aW9uSW5wdXRzLkZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIlPi52YWx1ZSA9IGFjdGlvbnNDb250YWluZXJGcmFtZXNldC5yb3dzOwotICAgIGZyYW1lc2V0U2l6ZXNGb3JtLnN1Ym1pdCgpOwotICB9Ci08L3NjcmlwdD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9zY3JpcHRzL3dzZGxwYW5lcy5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvc2NyaXB0cy93c2RscGFuZXMuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjUwOWMwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9zY3JpcHRzL3dzZGxwYW5lcy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiIgJT4KLQotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL3BhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICB2YXIgd3NkbE5hdmlnYXRvckNvbnRhaW5lciA9IHBlcnNwZWN0aXZlQ29udGVudC5mcmFtZXNbIjwlPVdTRExGcmFtZU5hbWVzLldTRExfTkFWSUdBVE9SX0NPTlRBSU5FUiU+Il07Ci0gIHZhciB3c2RsTmF2aWdhdG9yVG9vbGJhciA9IHdzZGxOYXZpZ2F0b3JDb250YWluZXIuZnJhbWVzWyI8JT1XU0RMRnJhbWVOYW1lcy5XU0RMX05BVklHQVRPUl9UT09MQkFSJT4iXTsKLSAgdmFyIHdzZGxOYXZpZ2F0b3JDb250ZW50ID0gd3NkbE5hdmlnYXRvckNvbnRhaW5lci5mcmFtZXNbIjwlPVdTRExGcmFtZU5hbWVzLldTRExfTkFWSUdBVE9SX0NPTlRFTlQlPiJdOwotICB2YXIgd3NkbEFjdGlvbnNDb250YWluZXIgPSBwZXJzcGVjdGl2ZUNvbnRlbnQuZnJhbWVzWyI8JT1XU0RMRnJhbWVOYW1lcy5XU0RMX0FDVElPTlNfQ09OVEFJTkVSJT4iXTsKLSAgdmFyIHdzZGxQcm9wZXJ0aWVzQ29udGFpbmVyID0gd3NkbEFjdGlvbnNDb250YWluZXIuZnJhbWVzWyI8JT1XU0RMRnJhbWVOYW1lcy5XU0RMX1BST1BFUlRJRVNfQ09OVEFJTkVSJT4iXTsKLSAgdmFyIHdzZGxQcm9wZXJ0aWVzVG9vbGJhciA9IHdzZGxQcm9wZXJ0aWVzQ29udGFpbmVyLmZyYW1lc1siPCU9V1NETEZyYW1lTmFtZXMuV1NETF9QUk9QRVJUSUVTX1RPT0xCQVIlPiJdOwotICB2YXIgd3NkbFByb3BlcnRpZXNDb250ZW50ID0gd3NkbFByb3BlcnRpZXNDb250YWluZXIuZnJhbWVzWyI8JT1XU0RMRnJhbWVOYW1lcy5XU0RMX1BST1BFUlRJRVNfQ09OVEVOVCU+Il07Ci0gIHZhciB3c2RsU3RhdHVzQ29udGFpbmVyID0gd3NkbEFjdGlvbnNDb250YWluZXIuZnJhbWVzWyI8JT1XU0RMRnJhbWVOYW1lcy5XU0RMX1NUQVRVU19DT05UQUlORVIlPiJdOwotICB2YXIgd3NkbFN0YXR1c1Rvb2xiYXIgPSB3c2RsU3RhdHVzQ29udGFpbmVyLmZyYW1lc1siPCU9V1NETEZyYW1lTmFtZXMuV1NETF9TVEFUVVNfVE9PTEJBUiU+Il07Ci0gIHZhciB3c2RsU3RhdHVzQ29udGVudCA9IHdzZGxTdGF0dXNDb250YWluZXIuZnJhbWVzWyI8JT1XU0RMRnJhbWVOYW1lcy5XU0RMX1NUQVRVU19DT05URU5UJT4iXTsKLTwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3NvYXBfZW52ZWxvcGVfeG1sLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC9zb2FwX2VudmVsb3BlX3htbC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiZWVjOTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3NvYXBfZW52ZWxvcGVfeG1sLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNDEzICAgMTc2NDkzIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0U6IE1ha2UgbWVzc2FnZS90cmFuc3BvcnQgc3RhY2sgcGx1Z2dhYmxlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+PCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQveG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmRhdGFtb2RlbC5XU0RMT3BlcmF0aW9uRWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci50cmFuc3BvcnQuKiIgJT48anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz48JQotaW50IHNvYXBFbnZlbG9wZVR5cGUgPSBJbnRlZ2VyLnBhcnNlSW50KHJlcXVlc3QuZ2V0UGFyYW1ldGVyKFdTRExBY3Rpb25JbnB1dHMuU09BUF9FTlZFTE9QRV9UWVBFKSk7Ci1XU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLVdTRExPcGVyYXRpb25FbGVtZW50IG9wZXJFbGVtZW50ID0gKFdTRExPcGVyYXRpb25FbGVtZW50KSB3c2RsUGVyc3BlY3RpdmUuZ2V0T3BlcmF0aW9uTm9kZSgpLmdldFRyZWVFbGVtZW50KCk7Ci1JU09BUE1lc3NhZ2Ugc29hcE1lc3NhZ2U7Ci1zd2l0Y2ggKHNvYXBFbnZlbG9wZVR5cGUpCi17Ci0gIGNhc2UgV1NETEFjdGlvbklucHV0cy5TT0FQX0VOVkVMT1BFX1RZUEVfUkVRVUVTVDoKLSAgICBzb2FwTWVzc2FnZSA9IChJU09BUE1lc3NhZ2UpIG9wZXJFbGVtZW50LmdldFByb3BlcnR5QXNPYmplY3QoV1NETE1vZGVsQ29uc3RhbnRzLlBST1BfU09BUF9SRVFVRVNUKTsKLSAgICBicmVhazsKLSAgY2FzZSBXU0RMQWN0aW9uSW5wdXRzLlNPQVBfRU5WRUxPUEVfVFlQRV9SRVNQT05TRToKLSAgZGVmYXVsdDoKLSAgICBzb2FwTWVzc2FnZSA9IChJU09BUE1lc3NhZ2UpIG9wZXJFbGVtZW50LmdldFByb3BlcnR5QXNPYmplY3QoV1NETE1vZGVsQ29uc3RhbnRzLlBST1BfU09BUF9SRVNQT05TRSk7Ci0gICAgYnJlYWs7Ci19Ci1TdHJpbmcgbWVzc2FnZXMgPSBzb2FwTWVzc2FnZS50b1hNTCgpOwotJT48JT1tZXNzYWdlcyU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvd3NkbF9hY3Rpb25zX2NvbnRhaW5lci5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvd3NkbF9hY3Rpb25zX2NvbnRhaW5lci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwYzNkMDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3dzZGxfYWN0aW9uc19jb250YWluZXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfQUNUSU9OU19DT05UQUlORVIiKSU+PC90aXRsZT4KLTwvaGVhZD4KLTxmcmFtZXNldCByb3dzPSI8JT13c2RsUGVyc3BlY3RpdmUuZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpJT4iIGJnY29sb3I9IiNFQ0U5RDgiPgotICA8ZnJhbWUgbmFtZT0iPCU9V1NETEZyYW1lTmFtZXMuV1NETF9QUk9QRVJUSUVTX0NPTlRBSU5FUiU+IiB0aXRsZT0iPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1BST1BFUlRJRVNfQ09OVEFJTkVSIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoIndzZGxfcHJvcGVydGllc19jb250YWluZXIuanNwIiklPiIgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MSBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wPgotICA8ZnJhbWUgbmFtZT0iPCU9V1NETEZyYW1lTmFtZXMuV1NETF9TVEFUVVNfQ09OVEFJTkVSJT4iIHRpdGxlPSI8JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfU1RBVFVTX0NPTlRBSU5FUiIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKCJ3c2RsX3N0YXR1c19jb250YWluZXIuanNwIiklPiIgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MSBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wPgotPC9mcmFtZXNldD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC93c2RsX25hdmlnYXRvcl9jb250YWluZXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3dzZGxfbmF2aWdhdG9yX2NvbnRhaW5lci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4MjBkZTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3dzZGxfbmF2aWdhdG9yX2NvbnRhaW5lci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTwvaGVhZD4KLTxmcmFtZXNldCByb3dzPSIzMywqIiBib3JkZXI9MCBiZ2NvbG9yPSIjRUNFOUQ4Ij4KLSAgPGZyYW1lIG5hbWU9IjwlPVdTRExGcmFtZU5hbWVzLldTRExfTkFWSUdBVE9SX1RPT0xCQVIlPiIgdGl0bGU9IjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9OQVZJR0FUT1JfVE9PTEJBUiIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKCJ3c2RsX25hdmlnYXRvcl90b29sYmFyLmpzcCIpJT4iIG5vcmVzaXplIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTAgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MD4KLSAgPGZyYW1lIG5hbWU9IjwlPVdTRExGcmFtZU5hbWVzLldTRExfTkFWSUdBVE9SX0NPTlRFTlQlPiIgdGl0bGU9IjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9OQVZJR0FUT1JfQ09OVEVOVCIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKCJ3c2RsX25hdmlnYXRvcl9jb250ZW50LmpzcCIpJT4iIG5vcmVzaXplIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTAgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MD4KLTwvZnJhbWVzZXQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvd3NkbF9uYXZpZ2F0b3JfY29udGVudC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvd3NkbF9uYXZpZ2F0b3JfY29udGVudC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiNDdlNGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3dzZGxfbmF2aWdhdG9yX2NvbnRlbnQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0lPiAgICAgIAotPGh0bWw+Ci08aGVhZD4KLSAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gICAgPHRpdGxlPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9OQVZJR0FUT1JfQ09OVEVOVCIpJT48L3RpdGxlPgotICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3RyZWV2aWV3LmNzcyIpKSU+Ij4KLSAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLSAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotICAgIDwvc2NyaXB0PgotICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL3RyZWV2aWV3LmpzIikpJT4iPgotICAgIDwvc2NyaXB0PgotPC9oZWFkPgotPCUKLSAgICBTdHJpbmcgc2VsZWN0ZWRBbmNob3JOYW1lID0gIiI7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgaW50IGZvY3VzZWROb2RlSWQgPSBub2RlTWFuYWdlci5nZXRGb2N1c2VkTm9kZUlkKCk7Ci0gICAgU3RyaW5nIGZvY3VzZWRBbmNob3JOYW1lID0gU3RyaW5nLnZhbHVlT2YoZm9jdXNlZE5vZGVJZCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBpZiAoc2VsZWN0ZWROb2RlICE9IG51bGwpIHsKLSAgICAgICAgc2VsZWN0ZWRBbmNob3JOYW1lID0gc2VsZWN0ZWROb2RlLmdldEFuY2hvck5hbWUoKTsKLSAgICAgICAgaWYgKGZvY3VzZWROb2RlSWQgPT0gc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpKQotICAgICAgICAgICAgZm9jdXNlZEFuY2hvck5hbWUgPSBzZWxlY3RlZEFuY2hvck5hbWU7Ci0gICAgfQotJT4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgb25Mb2FkPSJzZWxmLmxvY2F0aW9uLmhhc2g9JyM8JT1mb2N1c2VkQW5jaG9yTmFtZSU+JztzZXRTZWxlY3RlZEFuY2hvck5hbWUoJzwlPXNlbGVjdGVkQW5jaG9yTmFtZSU+JykiIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci0gICAgPGRpdiBpZD0idHJlZWNvbnRlbnRib3JkZXIiPgotICAgICAgICA8JT1ub2RlTWFuYWdlci5yZW5kZXJUcmVlVmlldyhyZXNwb25zZSklPgotICAgIDwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3dzZGxfbmF2aWdhdG9yX3Rvb2xiYXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3dzZGxfbmF2aWdhdG9yX3Rvb2xiYXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmM1MjNjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC93c2RsX25hdmlnYXRvcl90b29sYmFyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfTkFWSUdBVE9SX1RPT0xCQVIiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3MvdG9vbGJhci5jc3MiKSklPiI+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvc2NyaXB0cy93c2RsZnJhbWVzZXRzLmpzcCIgZmx1c2g9InRydWUiLz4gIAotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvdG9vbGJhci5qcyIpKSU+Ij4KLTwvc2NyaXB0PiAgCi08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJ0b29sYmFyYm9keW1hcmdpbiI+Ci08ZGl2IGlkPSJ0b29sYmFyYm9yZGVyIj4KLSAgPGRpdiBpZD0idG9vbGJhciIgb25kYmxjbGljaz0icHJvY2Vzc0ZyYW1lc2V0U2l6ZXMoZG9jdW1lbnQuZm9ybXNbMF0pIj4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUFjdGlvbiIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gIGZvcm1BY3Rpb24uYXBwZW5kKCJ3c2RsL2FjdGlvbnMvUmVzaXplV1NETEZyYW1lc0FjdGlvbkpTUC5qc3AiKTsKLSU+ICAKLTwvanNwOnVzZUJlYW4+Ci08anNwOnVzZUJlYW4gaWQ9ImZvcm1GcmFtZU5hbWUiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICAgZm9ybUZyYW1lTmFtZS5hcHBlbmQoV1NETEZyYW1lTmFtZXMuV1NETF9OQVZJR0FUT1JfQ09OVEFJTkVSKTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2RsL2Zvcm1zL1Byb2Nlc3NXU0RMRnJhbWVzZXRzRm9ybS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPHRhYmxlIHdpZHRoPSIxMDAlIiBoZWlnaHQ9MjUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGJvcmRlcj0wPgotICAgICAgPHRyPgotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiIHdpZHRoPTI1IGhlaWdodD0yNT48aW1nIGNsYXNzPSJub3JtYWwiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvbmF2aWdhdG9yLmdpZiIpKSU+IiB3aWR0aD0xNiBoZWlnaHQ9MTY+PC90ZD4KLTwlCi0gICBTdHJpbmcgZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9IG51bGw7Ci0gICBpZiAod3NkbFBlcnNwZWN0aXZlLmdldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpLnN0YXJ0c1dpdGgoIjEwMCUiKSkKLSAgICAgZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0RPVUJMRV9DTElDS19UT19SRVNUT1JFIik7Ci0gICBlbHNlCi0gICAgIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9ET1VCTEVfQ0xJQ0tfVE9fTUFYSU1JWkUiKTsKLSU+ICAgICAgICAKLSAgICAgICAgPHRkIGlkPSJkb3VibGVjbGlja2NvbHVtbiIgdGl0bGU9IjwlPWRvdWJsZUNsaWNrQ29sdW1uVGl0bGUlPiIgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJsZWZ0IiB3aWR0aD0iKiIgaGVpZ2h0PTI1IG5vd3JhcCBjbGFzcz0idGV4dCI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfTkFWSUdBVE9SIiklPjwvdGQ+Ci08JQotICAgU3RyaW5nIGFsdFJlZnJlc2ggPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9SRUZSRVNIIik7Ci0gICBTdHJpbmcgYWx0Q2xlYXIgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9DTEVBUiIpOwotJT4gICAgICAgICAgIAotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiIHdpZHRoPTI1IGhlaWdodD0yNT48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvYWN0aW9ucy9SZWZyZXNoV1NETEFjdGlvbkpTUC5qc3AiKSklPiIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iPjxpbWcgY2xhc3M9Im5vcm1hbCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9yZWZyZXNoX2VuYWJsZWQuZ2lmIikpJT4iIHdpZHRoPTE2IGhlaWdodD0xNiBvbk1vdXNlT3Zlcj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9yZWZyZXNoX2hpZ2hsaWdodGVkLmdpZiIpKSU+Jzttb3VzZW92ZXIodGhpcykiIG9uTW91c2VPdXQ9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvcmVmcmVzaF9lbmFibGVkLmdpZiIpKSU+Jzttb3VzZW91dCh0aGlzKSIgb25Nb3VzZURvd249InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvcmVmcmVzaF9oaWdobGlnaHRlZC5naWYiKSklPic7bW91c2Vkb3duKHRoaXMpIiBvbk1vdXNlVXA9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvcmVmcmVzaF9lbmFibGVkLmdpZiIpKSU+Jzttb3VzZXVwKHRoaXMpIiBhbHQ9IjwlPWFsdFJlZnJlc2glPiIgdGl0bGU9IjwlPWFsdFJlZnJlc2glPiI+PC9hPjwvdGQ+Ci0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImNlbnRlciIgd2lkdGg9MjUgaGVpZ2h0PTI1PjxhIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC9hY3Rpb25zL0NsZWFyV1NETEFjdGlvbkpTUC5qc3AiKSklPiIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iPjxpbWcgY2xhc3M9Im5vcm1hbCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9lbmFibGVkLmdpZiIpKSU+IiB3aWR0aD0xNiBoZWlnaHQ9MTYgb25Nb3VzZU92ZXI9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlb3Zlcih0aGlzKSIgb25Nb3VzZU91dD0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9lbmFibGVkLmdpZiIpKSU+Jzttb3VzZW91dCh0aGlzKSIgb25Nb3VzZURvd249InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlZG93bih0aGlzKSIgb25Nb3VzZVVwPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2NsZWFyX2VuYWJsZWQuZ2lmIikpJT4nO21vdXNldXAodGhpcykiIGFsdD0iPCU9YWx0Q2xlYXIlPiIgdGl0bGU9IjwlPWFsdENsZWFyJT4iPjwvYT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICA8L2Rpdj4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3dzZGxfcGVyc3BlY3RpdmVfY29udGVudC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvd3NkbF9wZXJzcGVjdGl2ZV9jb250ZW50LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWFiODZjOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvd3NkbF9wZXJzcGVjdGl2ZV9jb250ZW50LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPC9oZWFkPgotPGZyYW1lc2V0IGNvbHM9IjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKSU+IiBiZ2NvbG9yPSIjRUNFOUQ4Ij4KLSAgPCUKLSAgaWYgKG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmlzUlRMKCkpCi0gIHsKLSAgJT4KLSAgPGZyYW1lIG5hbWU9IjwlPVdTRExGcmFtZU5hbWVzLldTRExfQUNUSU9OU19DT05UQUlORVIlPiIgdGl0bGU9IjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9BQ1RJT05TX0NPTlRBSU5FUiIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKCJ3c2RsX2FjdGlvbnNfY29udGFpbmVyLmpzcCIpJT4iIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTAgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MT4KLSAgPGZyYW1lIG5hbWU9IjwlPVdTRExGcmFtZU5hbWVzLldTRExfTkFWSUdBVE9SX0NPTlRBSU5FUiU+IiB0aXRsZT0iPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX05BVklHQVRPUl9DT05UQUlORVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTCgid3NkbF9uYXZpZ2F0b3JfY29udGFpbmVyLmpzcCIpJT4iIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTAgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MT4KLSAgPCUKLSAgfQotICBlbHNlCi0gIHsKLSAgJT4KLSAgPGZyYW1lIG5hbWU9IjwlPVdTRExGcmFtZU5hbWVzLldTRExfTkFWSUdBVE9SX0NPTlRBSU5FUiU+IiB0aXRsZT0iPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX05BVklHQVRPUl9DT05UQUlORVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTCgid3NkbF9uYXZpZ2F0b3JfY29udGFpbmVyLmpzcCIpJT4iIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTAgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MT4KLSAgPGZyYW1lIG5hbWU9IjwlPVdTRExGcmFtZU5hbWVzLldTRExfQUNUSU9OU19DT05UQUlORVIlPiIgdGl0bGU9IjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9BQ1RJT05TX0NPTlRBSU5FUiIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKCJ3c2RsX2FjdGlvbnNfY29udGFpbmVyLmpzcCIpJT4iIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTAgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MT4KLSAgPCUKLSAgfQotICAlPgotPC9mcmFtZXNldD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC93c2RsX3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC93c2RsX3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTU4ZTIzMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvd3NkbF9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9QUk9QRVJUSUVTX0NPTlRBSU5FUiIpJT48L3RpdGxlPgotPC9oZWFkPgotPGZyYW1lc2V0IHJvd3M9IjMzLCoiIGJvcmRlcj0wIGJnY29sb3I9IiNFQ0U5RDgiPgotICA8ZnJhbWUgbmFtZT0iPCU9V1NETEZyYW1lTmFtZXMuV1NETF9QUk9QRVJUSUVTX1RPT0xCQVIlPiIgdGl0bGU9IjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9QUk9QRVJUSUVTX1RPT0xCQVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTCgid3NkbF9wcm9wZXJ0aWVzX3Rvb2xiYXIuanNwIiklPiIgbm9yZXNpemUgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MCBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wPgotICA8ZnJhbWUgbmFtZT0iPCU9V1NETEZyYW1lTmFtZXMuV1NETF9QUk9QRVJUSUVTX0NPTlRFTlQlPiIgdGl0bGU9IjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9QUk9QRVJUSUVTX0NPTlRFTlQiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTCgid3NkbF9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwIiklPiIgbm9yZXNpemUgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MCBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wPgotPC9mcmFtZXNldD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC93c2RsX3Byb3BlcnRpZXNfY29udGVudC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvd3NkbF9wcm9wZXJ0aWVzX2NvbnRlbnQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NzZlMzZkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC93c2RsX3Byb3BlcnRpZXNfY29udGVudC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1BST1BFUlRJRVNfQ09OVEVOVCIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotPCUKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgaWYgKHNlbGVjdGVkTm9kZSAhPSBudWxsKQotICAgIHsKLSAgICAgICAgVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXI7Ci0gICAgICAgIGlmIChzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCkgPT0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUKQotICAgICAgICAgICAgdG9vbE1hbmFnZXIgPSBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdG9vbE1hbmFnZXIgPSBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xNYW5hZ2VyKCk7Ci0gICAgICAgIFRvb2wgc2VsZWN0ZWRUb29sID0gdG9vbE1hbmFnZXIuZ2V0U2VsZWN0ZWRUb29sKCk7Ci0gICAgICAgIGlmIChzZWxlY3RlZFRvb2wgIT0gbnVsbCAmJiBzZWxlY3RlZFRvb2wuZ2V0VG9vbFR5cGUoKSAhPSBUb29sVHlwZXMuQUNUSU9OKSB7Ci0gICAgICAgICU+Ci0gICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgICAgICAgbG9jYXRpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChzZWxlY3RlZFRvb2wuZ2V0Rm9ybUxpbmsoKSkpJT4iOwotICAgICAgICA8L3NjcmlwdD4KLSAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgJT4KLTx0YWJsZT4KLSAgPHRyPgotICAgIDx0ZD4KLSAgICAgIDwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PX0FDVElPTl9TRUxFQ1RFRCIpJT4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLSAgICAgICAgPCUKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIHsKLSAgICAlPgotPHRhYmxlPgotICA8dHI+Ci0gICAgPHRkPgotICAgICAgPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9fTk9ERV9TRUxFQ1RFRCIpJT4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLSAgICA8JQotICAgIH0KLSU+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC93c2RsX3Byb3BlcnRpZXNfdG9vbGJhci5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvd3NkbF9wcm9wZXJ0aWVzX3Rvb2xiYXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODgyYzMwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC93c2RsX3Byb3BlcnRpZXNfdG9vbGJhci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzZGwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9QUk9QRVJUSUVTX1RPT0xCQVIiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3MvdG9vbGJhci5jc3MiKSklPiI+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvc2NyaXB0cy93c2RsZnJhbWVzZXRzLmpzcCIgZmx1c2g9InRydWUiLz4gIAotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvdG9vbGJhci5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0idG9vbGJhcmJvZHltYXJnaW4iPgotPGRpdiBpZD0idG9vbGJhcmJvcmRlciI+Ci0gIDxkaXYgaWQ9InRvb2xiYXIiIG9uZGJsY2xpY2s9InByb2Nlc3NGcmFtZXNldFNpemVzKGRvY3VtZW50LmZvcm1zWzBdKSI+Ci08anNwOnVzZUJlYW4gaWQ9ImZvcm1BY3Rpb24iIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICBmb3JtQWN0aW9uLmFwcGVuZCgid3NkbC9hY3Rpb25zL1Jlc2l6ZVdTRExGcmFtZXNBY3Rpb25KU1AuanNwIik7Ci0lPiAgCi08L2pzcDp1c2VCZWFuPgotPGpzcDp1c2VCZWFuIGlkPSJmb3JtRnJhbWVOYW1lIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgIGZvcm1GcmFtZU5hbWUuYXBwZW5kKFdTRExGcmFtZU5hbWVzLldTRExfUFJPUEVSVElFU19DT05UQUlORVIpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvZm9ybXMvUHJvY2Vzc1dTRExGcmFtZXNldHNGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8dGFibGUgd2lkdGg9IjEwMCUiIGhlaWdodD0yNSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgYm9yZGVyPTA+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImNlbnRlciIgd2lkdGg9MjUgaGVpZ2h0PTI1PjxpbWcgY2xhc3M9Im5vcm1hbCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9hY3Rpb25zLmdpZiIpKSU+IiB3aWR0aD0xNiBoZWlnaHQ9MTY+PC90ZD4KLTwlCi0gICBTdHJpbmcgZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9IG51bGw7Ci0gICBpZiAod3NkbFBlcnNwZWN0aXZlLmdldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpLmVuZHNXaXRoKCIxMDAlIikpCi0gICB7Ci0gICAgIGlmICh3c2RsUGVyc3BlY3RpdmUuZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpLnN0YXJ0c1dpdGgoIjEwMCUiKSkKLSAgICAgICBkb3VibGVDbGlja0NvbHVtblRpdGxlID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfRE9VQkxFX0NMSUNLX1RPX1JFU1RPUkUiKTsKLSAgIH0KLSAgIGlmIChkb3VibGVDbGlja0NvbHVtblRpdGxlID09IG51bGwpCi0gICAgIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9ET1VCTEVfQ0xJQ0tfVE9fTUFYSU1JWkUiKTsKLSU+ICAgICAgICAKLSAgICAgICAgPHRkIGlkPSJkb3VibGVjbGlja2NvbHVtbiIgdGl0bGU9IjwlPWRvdWJsZUNsaWNrQ29sdW1uVGl0bGUlPiIgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJsZWZ0IiB3aWR0aD0iKiIgaGVpZ2h0PTI1IG5vd3JhcCBjbGFzcz0idGV4dCI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfQUNUSU9OUyIpJT48L3RkPgotPCUKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHdzZGxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgaWYgKHNlbGVjdGVkTm9kZSAhPSBudWxsKSB7Ci0gICAgICAgIFRvb2xNYW5hZ2VyIHRvb2xNYW5hZ2VyOwotICAgICAgICBpZiAoc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpID09IEFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCkKLSAgICAgICAgICAgIHRvb2xNYW5hZ2VyID0gc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRvb2xNYW5hZ2VyID0gc2VsZWN0ZWROb2RlLmdldFZpZXdUb29sTWFuYWdlcigpOwotICAgICAgICBmb3IoaW50IGk9MDsgaTx0b29sTWFuYWdlci5nZXROdW1iZXJPZlRvb2xzKCk7IGkrKykgewotICAgICAgICAgICAgVG9vbCB0b29sID0gKFRvb2wpdG9vbE1hbmFnZXIuZ2V0VG9vbChpKTsKLSAgICAgICAgICAgICU+Ci0gICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImNlbnRlciIgd2lkdGg9MjUgaGVpZ2h0PTI1PjwlPXRvb2wucmVuZGVyVG9vbChyZXNwb25zZSxjb250cm9sbGVyKSU+PC90ZD4KLSAgICAgICAgICAgIDwlCi0gICAgICAgIH0KLSAgICB9Ci0lPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICA8L2Rpdj4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3dzZGxfcmVzdWx0X2NvbnRlbnQuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3dzZGxfcmVzdWx0X2NvbnRlbnQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NGU3OWY2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC93c2RsX3Jlc3VsdF9jb250ZW50LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgV1NETFBlcnNwZWN0aXZlIHdzZGxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFBlcnNwZWN0aXZlKCk7Ci0gICBpbnQgdmlld0lEID0gd3NkbFBlcnNwZWN0aXZlLmdldFN0YXR1c0NvbnRlbnRUeXBlKCk7Ci0lPgotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1NUQVRVU19DT05URU5UIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL3RhYmxlcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvcGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gIGZ1bmN0aW9uIHN3aXRjaFJlYWRPbmx5RnJhZ21lbnRzVmlldygpIHsKLSAgICBwZXJzcGVjdGl2ZVdvcmtBcmVhLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NkbC9hY3Rpb25zL1N3aXRjaFJlYWRPbmx5RnJhZ21lbnRWaWV3c0FjdGlvbkpTUC5qc3AiKSklPiI7Ci0gIH0KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgPHRyPgotICAgICAgPHRkIGFsaWduPSJyaWdodCIgY2xhc3M9ImxhYmVscyI+Ci08JQotICAgICAgICBpZiAodmlld0lEID09IHdzZGxQZXJzcGVjdGl2ZS5TVEFUVVNfQ09OVEVOVF9SRVNVTFRfU09VUkNFKQotICAgICAgICB7ICAgICAKLSU+Ci0gICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpzd2l0Y2hSZWFkT25seUZyYWdtZW50c1ZpZXcoKSIgdGl0bGU9IjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfU1dJVENIX1RPX0ZPUk1fVklFVyIpJT4iPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xJTktfRk9STSIpJT48L2E+Ci08JQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotJT4KLSAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnN3aXRjaFJlYWRPbmx5RnJhZ21lbnRzVmlldygpIiB0aXRsZT0iPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9TV0lUQ0hfVE9fU09VUkNFX1ZJRVciKSU+Ij48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MSU5LX1NPVVJDRSIpJT48L2E+Ci08JQotICAgICAgICB9Ci0lPiAgIAotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPCUKLSAgaWYgKHZpZXdJRCA9PSB3c2RsUGVyc3BlY3RpdmUuU1RBVFVTX0NPTlRFTlRfUkVTVUxUX1NPVVJDRSkKLSAgewotJT4KLSAgICA8anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvZm9ybXMvUmVhZE9ubHlGcmFnbWVudHNTb2FwVmlldy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICB9Ci0gIGVsc2UKLSAgewotJT4KLSAgICA8anNwOmluY2x1ZGUgcGFnZT0iL3dzZGwvZm9ybXMvUmVhZE9ubHlGcmFnbWVudHNGb3JtVmlldy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08JQotICB9Ci0lPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvd3NkbF9zdGF0dXNfY29udGFpbmVyLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC93c2RsX3N0YXR1c19jb250YWluZXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDNhY2VmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC93c2RsX3N0YXR1c19jb250YWluZXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2RsLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBXU0RMUGVyc3BlY3RpdmUgd3NkbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0RMUGVyc3BlY3RpdmUoKTsKLSAgIFN0cmluZyBzdGF0dXNDb250ZW50U3JjID0gIndzZGxfc3RhdHVzX2NvbnRlbnQuanNwIjsKLSAgIHN3aXRjaCAod3NkbFBlcnNwZWN0aXZlLmdldFN0YXR1c0NvbnRlbnRUeXBlKCkpCi0gICB7Ci0gICAgIGNhc2UgV1NETFBlcnNwZWN0aXZlLlNUQVRVU19DT05URU5UX1JFU1VMVF9GT1JNOgotICAgICAgIHN0YXR1c0NvbnRlbnRTcmMgPSAid3NkbF9yZXN1bHRfY29udGVudC5qc3AiOwotICAgICAgIGJyZWFrOwotICAgICBjYXNlIFdTRExQZXJzcGVjdGl2ZS5TVEFUVVNfQ09OVEVOVF9SRVNVTFRfU09VUkNFOgotICAgICAJc3RhdHVzQ29udGVudFNyYyA9ICJ3c2RsX3Jlc3VsdF9jb250ZW50LmpzcCI7Ci0gICAgIAlicmVhazsKLSAgIH0KLSU+ICAgCi08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfU1RBVFVTX0NPTlRBSU5FUiIpJT48L3RpdGxlPgotPC9oZWFkPgotPGZyYW1lc2V0IHJvd3M9IjMzLCoiIGJvcmRlcj0wIGJnY29sb3I9IiNFQ0U5RDgiPgotICA8ZnJhbWUgbmFtZT0iPCU9V1NETEZyYW1lTmFtZXMuV1NETF9TVEFUVVNfVE9PTEJBUiU+IiB0aXRsZT0iPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1NUQVRVU19UT09MQkFSIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoIndzZGxfc3RhdHVzX3Rvb2xiYXIuanNwIiklPiIgbm9yZXNpemUgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MCBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wPgotICA8ZnJhbWUgbmFtZT0iPCU9V1NETEZyYW1lTmFtZXMuV1NETF9TVEFUVVNfQ09OVEVOVCU+IiB0aXRsZT0iPCU9d3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1NUQVRVU19DT05URU5UIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoc3RhdHVzQ29udGVudFNyYyklPiIgbm9yZXNpemUgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MCBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wPgotPC9mcmFtZXNldD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC93c2RsX3N0YXR1c19jb250ZW50LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC93c2RsX3N0YXR1c19jb250ZW50LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODYzZWIyZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGwvd3NkbF9zdGF0dXNfY29udGVudC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyNyAgIDEyNzQ0MyBqZXNwZXJAc2Vsc2thYmV0Lm9yZyAtIEplc3BlciBTIE1vbGxlcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotCW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotICAgd3NkbFBlcnNwZWN0aXZlLnNldFN0YXR1c0NvbnRlbnRUeXBlKFdTRExQZXJzcGVjdGl2ZS5TVEFUVVNfQ09OVEVOVF9ERUZBVUxUKTsKLSU+ICAgCi08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT13c2RsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfU1RBVFVTX0NPTlRFTlQiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLSAgPHRhYmxlPgotICAgIDx0cj4KLSAgICAgIDx0ZD4KLSAgICAgICAgPHByZT4KLTwlPUhUTUxVdGlscy5jaGFyYWN0ZXJzVG9IVE1MRW50aXRpZXNTdHJpY3Qod3NkbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2VRdWV1ZSgpLmdldE1lc3NhZ2VzRnJvbUxpc3QoKSklPgotICAgICAgICA8L3ByZT4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3dzZGxfc3RhdHVzX3Rvb2xiYXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsL3dzZGxfc3RhdHVzX3Rvb2xiYXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTE2NGU1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbC93c2RsX3N0YXR1c190b29sYmFyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NkbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFdTRExQZXJzcGVjdGl2ZSB3c2RsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTRExQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXdzZGxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9TVEFUVVNfVE9PTEJBUiIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy90b29sYmFyLmNzcyIpKSU+Ij4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9zY3JpcHRzL3dzZGxmcmFtZXNldHMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvdG9vbGJhci5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0idG9vbGJhcmJvZHltYXJnaW4iPgotPGRpdiBpZD0idG9vbGJhcmJvcmRlciI+Ci0gIDxkaXYgaWQ9InRvb2xiYXIiIG9uZGJsY2xpY2s9InByb2Nlc3NGcmFtZXNldFNpemVzKGRvY3VtZW50LmZvcm1zWzBdKSI+Ci08anNwOnVzZUJlYW4gaWQ9ImZvcm1BY3Rpb24iIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICBmb3JtQWN0aW9uLmFwcGVuZCgid3NkbC9hY3Rpb25zL1Jlc2l6ZVdTRExGcmFtZXNBY3Rpb25KU1AuanNwIik7Ci0lPiAgCi08L2pzcDp1c2VCZWFuPgotPGpzcDp1c2VCZWFuIGlkPSJmb3JtRnJhbWVOYW1lIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgIGZvcm1GcmFtZU5hbWUuYXBwZW5kKFdTRExGcmFtZU5hbWVzLldTRExfU1RBVFVTX0NPTlRBSU5FUik7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NkbC9mb3Jtcy9Qcm9jZXNzV1NETEZyYW1lc2V0c0Zvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgIDx0YWJsZSB3aWR0aD0iMTAwJSIgaGVpZ2h0PTI1IGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBib3JkZXI9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0yNSBoZWlnaHQ9MjU+PGltZyBjbGFzcz0ibm9ybWFsIiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3N0YXR1cy5naWYiKSklPiIgd2lkdGg9MTYgaGVpZ2h0PTE2PjwvdGQ+Ci08JQotICAgU3RyaW5nIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBudWxsOwotICAgaWYgKHdzZGxQZXJzcGVjdGl2ZS5nZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKS5lbmRzV2l0aCgiMTAwJSIpKQotICAgewotICAgICBpZiAod3NkbFBlcnNwZWN0aXZlLmdldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoKS5lbmRzV2l0aCgiMTAwJSIpKQotICAgICAgIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9ET1VCTEVfQ0xJQ0tfVE9fUkVTVE9SRSIpOwotICAgfQotICAgaWYgKGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPT0gbnVsbCkKLSAgICAgZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0RPVUJMRV9DTElDS19UT19NQVhJTUlaRSIpOwotJT4gICAgICAgIAotICAgICAgICA8dGQgaWQ9ImRvdWJsZWNsaWNrY29sdW1uIiB0aXRsZT0iPCU9ZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSU+IiB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImxlZnQiIHdpZHRoPSIqIiBoZWlnaHQ9MjUgbm93cmFwIGNsYXNzPSJ0ZXh0Ij48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9TVEFUVVMiKSU+PC90ZD4KLTwlCi0gICBTdHJpbmcgYWx0Q2xlYXIgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9DTEVBUiIpOwotJT4gICAgICAgICAgIAotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiIHdpZHRoPTI1IGhlaWdodD0yNT48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzZGwvd3NkbF9zdGF0dXNfY29udGVudC5qc3AiKSklPiIgdGFyZ2V0PSI8JT1XU0RMRnJhbWVOYW1lcy5XU0RMX1NUQVRVU19DT05URU5UJT4iPjxpbWcgY2xhc3M9Im5vcm1hbCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9lbmFibGVkLmdpZiIpKSU+IiB3aWR0aD0xNiBoZWlnaHQ9MTYgb25Nb3VzZU92ZXI9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlb3Zlcih0aGlzKSIgb25Nb3VzZU91dD0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9lbmFibGVkLmdpZiIpKSU+Jzttb3VzZW91dCh0aGlzKSIgb25Nb3VzZURvd249InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlZG93bih0aGlzKSIgb25Nb3VzZVVwPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2NsZWFyX2VuYWJsZWQuZ2lmIikpJT4nO21vdXNldXAodGhpcykiIGFsdD0iPCU9YWx0Q2xlYXIlPiIgdGl0bGU9IjwlPWFsdENsZWFyJT4iPjwvYT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICA8L2Rpdj4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsX2Jyb3dzZXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsX2Jyb3dzZXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzZiZjk2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbF9icm93c2VyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLm5ldC4qIiAlPgotCi08JQotICAgU3RyaW5nIHNlc3Npb25JZCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpOwotICAgSHR0cFNlc3Npb24gY3VycmVudFNlc3Npb24gPSAoSHR0cFNlc3Npb24pYXBwbGljYXRpb24uZ2V0QXR0cmlidXRlKHNlc3Npb25JZCk7Ci0gICBDb250cm9sbGVyIGNvbnRyb2xsZXIgPSAoQ29udHJvbGxlciljdXJyZW50U2Vzc2lvbi5nZXRBdHRyaWJ1dGUoImNvbnRyb2xsZXIiKTsKLSAgIFN0cmluZyB3c2RsVHlwZVN0cmluZyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5XU0RMX1RZUEUpOwotICAgaW50IHdzZGxUeXBlID0gQWN0aW9uSW5wdXRzLldTRExfVFlQRV9TRVJWSUNFX0lOVEVSRkFDRTsKLSAgIHRyeQotICAgewotICAgICB3c2RsVHlwZSA9IEludGVnZXIucGFyc2VJbnQod3NkbFR5cGVTdHJpbmcpOwotICAgfQotICAgY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKQotICAgewotICAgfQotICAgY29udHJvbGxlci5zZXRXU0RMVHlwZSh3c2RsVHlwZSk7Ci0lPgotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+Ci08JQotICAgU3RyaW5nIHdzZGxTb3VyY2U7Ci0gICBpZiAod3NkbFR5cGUgPT0gQWN0aW9uSW5wdXRzLldTRExfVFlQRV9TRVJWSUNFX0lOVEVSRkFDRSkKLSAgICAgd3NkbFNvdXJjZSA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiV1NETF9UWVBFX1NFUlZJQ0VfSU5URVJGQUNFUyIpOwotICAgZWxzZQotICAgICB3c2RsU291cmNlID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJXU0RMX1RZUEVfU0VSVklDRVMiKTsKLSAgICAgCi0gICBTdHJpbmdCdWZmZXIgc2Vzc2lvbklkUGFyYW0gPSBuZXcgU3RyaW5nQnVmZmVyKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpOwotICAgc2Vzc2lvbklkUGFyYW0uYXBwZW5kKCc9JykuYXBwZW5kKHNlc3Npb25JZCk7Ci0gICAKLSAgIFN0cmluZ0J1ZmZlciB0b29sYmFyTGluayA9IG5ldyBTdHJpbmdCdWZmZXIoIndzZGxfdG9vbGJhci5qc3A/Iik7Ci0gICB0b29sYmFyTGluay5hcHBlbmQoQWN0aW9uSW5wdXRzLlNFU1NJT05JRCkuYXBwZW5kKCc9JykuYXBwZW5kKHNlc3Npb25JZCk7Ci0lPgotICAgIDwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiVElUTEVfV1NETF9CUk9XU0VSIix3c2RsU291cmNlKSU+Ci0gIDwvdGl0bGU+Ci08L2hlYWQ+Ci08ZnJhbWVzZXQgcm93cz0iMzMsKiIgYm9yZGVyPTAgYmdjb2xvcj0iI0VDRTlEOCI+Ci0gIDxmcmFtZSBuYW1lPSI8JT1GcmFtZU5hbWVzLldTRExfVE9PTEJBUiU+IiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9XU0RMX1RPT0xCQVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCh0b29sYmFyTGluay50b1N0cmluZygpKSklPiIgbm9yZXNpemUgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MCBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wPgotICA8ZnJhbWUgbmFtZT0iPCU9RnJhbWVOYW1lcy5XU0RMX0NPTlRFTlQlPiIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfV1NETF9DT05URU5UIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoUHJveHlMb2FkUGFnZUFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlc3Npb25JZCwid3NkbF9jb250ZW50LmpzcCIpKSklPiIgbm9yZXNpemUgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MCBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wPgotPC9mcmFtZXNldD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbF9jb250ZW50LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbF9jb250ZW50LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQyNmZlOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZGxfY29udGVudC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0MDQgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAzMTcgICAxMjc0NTYgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkKLSAqIDIwMDYwNTI0ICAgMTQyNDk5IGplZmZsaXVAY2EuaWJtLmNvbSAtIEplZmZyZXkgTGl1Ci0gKiAyMDA3MDEwOSAgIDE2OTU1MyBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1hawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkudXRpbC5VZGRpNGpIZWxwZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5mYXZvcml0ZXMucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmZhdm9yaXRlcy5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlSW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzZmluZGVyLldlYlNlcnZpY2VGaW5kZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c2ZpbmRlci5XZWJTZXJ2aWNlQ2F0ZWdvcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LndzZGwuZXh0ZW5zaW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC53c2RsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLm5ldC4qIiAlPgotCi08JQotICAgU3RyaW5nIHNlc3Npb25JZCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpOwotICAgSHR0cFNlc3Npb24gY3VycmVudFNlc3Npb24gPSAoSHR0cFNlc3Npb24pYXBwbGljYXRpb24uZ2V0QXR0cmlidXRlKHNlc3Npb25JZCk7Ci0gICBDb250cm9sbGVyIGNvbnRyb2xsZXIgPSAoQ29udHJvbGxlciljdXJyZW50U2Vzc2lvbi5nZXRBdHRyaWJ1dGUoImNvbnRyb2xsZXIiKTsKLSAgIGludCB3c2RsVHlwZSA9IGNvbnRyb2xsZXIuZ2V0V1NETFR5cGUoKTsKLSAgIAotICAgVmVjdG9yIHdzSW5mb0NhY2hlID0gbmV3IFZlY3RvcigpOwotICAgaW50IHdvcmtzcGFjZVN0YXJ0ID0gLTE7Ci0gICBpbnQgd29ya3NwYWNlRW5kICAgPSAtMTsKLSAgIAotJT4KLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KLSAgPHRpdGxlPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfV1NETF9DT05URU5UIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvcmVzdW1lcHJveHlsb2FkcGFnZS5qcyIpKSU+Ij4KLTwvc2NyaXB0PiAgCi08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgCi0gIAotICBmdW5jdGlvbiBmaWxsQ2F0ZWdvcmllcygpCi0gIHsKLSAgICB2YXIgeSA9IDA7Ci0gICAgdmFyIHggPSAwOwotICAgICBkb2N1bWVudC5mb3Jtc1swXS48JT1BY3Rpb25JbnB1dHMuQ0FURUdPUlklPi5vcHRpb25zW3grK10gPSBuZXcgT3B0aW9uKCI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfV1NETF9BbGwiKSU+IiwiPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1dTRExfQWxsIiklPiIpOwotICAgICBkb2N1bWVudC5mb3Jtc1swXS48JT1BY3Rpb25JbnB1dHMuQ0FURUdPUlklPi5vcHRpb25zW3grK10gPSBuZXcgT3B0aW9uKCI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfV1NETF9TT1VSQ0VfRkFWT1JJVEVTIiklPiIsIjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9XU0RMX1NPVVJDRV9GQVZPUklURVMiKSU+Iik7Ci08JQotICAgewotICAgICBXZWJTZXJ2aWNlQ2F0ZWdvcnlbXSBjYXRlZ29yaWVzID0gV2ViU2VydmljZUZpbmRlci5pbnN0YW5jZSgpLmdldFdlYlNlcnZpY2VDYXRlZ29yaWVzKCk7Ci0gICAgIGZvciAoaW50IGk9MDtpPGNhdGVnb3JpZXMubGVuZ3RoO2krKykKLSAgICAgewotICAgICAgIFN0cmluZyBsYWJlbCA9IEhUTUxVdGlscy5KU01hbmdsZShjYXRlZ29yaWVzW2ldLmdldExhYmVsKCkpOwotICAgICAgIGlmKGNhdGVnb3JpZXNbaV0uZ2V0SWQoKS5lcXVhbHMoIm9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c2ZpbmRlci5jYXRlZ29yeS53b3Jrc3BhY2UiKSl7Ci0lPgotICAgIHZhciB5ID0geDsKLTwlICAgIAotICAgICAgIH0gICAgCi0lPiAgICAKLSAgICBkb2N1bWVudC5mb3Jtc1swXS48JT1BY3Rpb25JbnB1dHMuQ0FURUdPUlklPi5vcHRpb25zW3grK10gPSBuZXcgT3B0aW9uKCI8JT1sYWJlbCU+IiwiPCU9bGFiZWwlPiIpOwotPCUgICAgICAgCi0gICAgIH0KLSAgIH0gCi0lPgotICAgIGlmIChkb2N1bWVudC5mb3Jtc1swXS48JT1BY3Rpb25JbnB1dHMuQ0FURUdPUlklPi5vcHRpb25zLmxlbmd0aCA+IDApCi0gICAgewotICAgICAgZG9jdW1lbnQuZm9ybXNbMF0uPCU9QWN0aW9uSW5wdXRzLkNBVEVHT1JZJT4ub3B0aW9uc1t5XS5zZWxlY3RlZCA9IHRydWU7Ci0gICAgICBmaWxsV1NETEZpbGVzQnlDYXRlZ29yeShkb2N1bWVudC5mb3Jtc1swXS48JT1BY3Rpb25JbnB1dHMuQ0FURUdPUlklPi5vcHRpb25zW3ldLnZhbHVlKTsKLSAgICB9Ci0gIAotICB9ICAgIAotICAKLSAgZnVuY3Rpb24gZmlsbFdlYlByb2plY3RzKCkKLSAgewotICAgIHZhciB4ID0gMDsKLTwlCi0gICB7Ci0gICAgIElXb3Jrc3BhY2VSb290IGlXb3Jrc3BhY2VSb290ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLSAgICAgSVByb2plY3RbXSBwcm9qZWN0cyA9IGlXb3Jrc3BhY2VSb290LmdldFByb2plY3RzKCk7Ci0gICAgIGZvciAoaW50IGk9MDtpPHByb2plY3RzLmxlbmd0aDtpKyspCi0gICAgIHsKLSAgICAgICBpZiAoIXByb2plY3RzW2ldLmlzT3BlbigpKQotICAgICAgICAgY29udGludWU7Ci0gICAgICAgU3RyaW5nIG5hbWUgPSBIVE1MVXRpbHMuSlNNYW5nbGUocHJvamVjdHNbaV0uZ2V0TmFtZSgpKTsKLSU+Ci0gICAgZG9jdW1lbnQuZm9ybXNbMF0uPCU9QWN0aW9uSW5wdXRzLlBST0pFQ1QlPi5vcHRpb25zW3grK10gPSBuZXcgT3B0aW9uKCI8JT1uYW1lJT4iLCI8JT1uYW1lJT4iKTsKLTwlCi0gICAgIH0KLSAgIH0KLSU+Ci0gICAgaWYgKGRvY3VtZW50LmZvcm1zWzBdLjwlPUFjdGlvbklucHV0cy5QUk9KRUNUJT4ub3B0aW9ucy5sZW5ndGggPiAwKQotICAgIHsKLSAgICAgIGRvY3VtZW50LmZvcm1zWzBdLjwlPUFjdGlvbklucHV0cy5QUk9KRUNUJT4ub3B0aW9uc1swXS5zZWxlY3RlZCA9IHRydWU7Ci0gICAgICBmaWxsV1NETEZpbGVzKGRvY3VtZW50LmZvcm1zWzBdLjwlPUFjdGlvbklucHV0cy5QUk9KRUNUJT4ub3B0aW9uc1swXS52YWx1ZSk7Ci0gICAgfQotICB9Ci0KLTwlISBwcml2YXRlIFZlY3RvciB3c2RsVVJMc18gPSBuZXcgVmVjdG9yKCk7ICU+Ci0KLSAgIGZ1bmN0aW9uIGZpbGxXU0RMRmlsZXNCeUNhdGVnb3J5KHdlYlNlcnZpY2VGaW5kZXJMYWJlbCkKLSAgIHsKLSAgICB2YXIgY3VycmVudE51bWJlck9mT3B0aW9ucyA9IGRvY3VtZW50LmZvcm1zWzBdLjwlPUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XRUJQUk9KRUNUX1dTRExfVVJMJT4ub3B0aW9ucy5sZW5ndGg7Ci0gICAgZm9yICh2YXIgaT0wO2k8Y3VycmVudE51bWJlck9mT3B0aW9ucztpKyspCi0gICAgICBkb2N1bWVudC5mb3Jtc1swXS48JT1BY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV0VCUFJPSkVDVF9XU0RMX1VSTCU+Lm9wdGlvbnNbMF0gPSBudWxsOwotICAgIGlmICh3ZWJTZXJ2aWNlRmluZGVyTGFiZWwgPT0gIjwlPUhUTUxVdGlscy5KU01hbmdsZShjb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfV1NETF9BbGwiKSklPiIpewotICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInByb2plY3RzIikuc3R5bGUuZGlzcGxheSA9ICJub25lIjsgCi0gICAgICBmaWxsQWxsV1NETEZpbGVzKCk7Ci0gICAgfQotICAgIGlmICh3ZWJTZXJ2aWNlRmluZGVyTGFiZWwgPT0gIjwlPUhUTUxVdGlscy5KU01hbmdsZShjb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfV1NETF9TT1VSQ0VfRkFWT1JJVEVTIikpJT4iKXsKLSAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwcm9qZWN0cyIpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7IAotICAgICAgZmlsbEZhdm9yaXRlV1NETEZpbGVzKCk7Ci0gICAgfQotICAgIAotPCUKLSAgIHsKLSAgICAgICAgIAotICAgICBXZWJTZXJ2aWNlRmluZGVyIGZpbmRlciA9IFdlYlNlcnZpY2VGaW5kZXIuaW5zdGFuY2UoKTsKLSAgICAgV2ViU2VydmljZUNhdGVnb3J5W10gY2F0ZWdvcmllcyA9IGZpbmRlci5nZXRXZWJTZXJ2aWNlQ2F0ZWdvcmllcygpOwotICAgICBmb3IgKGludCBpPTA7aTxjYXRlZ29yaWVzLmxlbmd0aDtpKyspCi0gICAgIHsKLSAgICAgICBXZWJTZXJ2aWNlQ2F0ZWdvcnkgY2F0ZWdvcnkgPSBjYXRlZ29yaWVzW2ldOwotJT4KLSAgICBpZiAod2ViU2VydmljZUZpbmRlckxhYmVsID09ICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoY2F0ZWdvcnkuZ2V0TGFiZWwoKSklPiIpCi0gICAgewotICAgIHZhciB4ID0gMDsKLSAgICAgICAgCi08JQotICAgICAgIEl0ZXJhdG9yIGl0ID0gZmluZGVyLmdldFdlYlNlcnZpY2VzQnlDYXRlZ29yeShjYXRlZ29yeSxudWxsKTsKLSAgICAgICBpZihjYXRlZ29yeS5nZXRJZCgpLmVxdWFscygib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzZmluZGVyLmNhdGVnb3J5LndvcmtzcGFjZSIpKXsKLQotICAgIAkgICB3b3Jrc3BhY2VTdGFydCA9IHdzSW5mb0NhY2hlLnNpemUoKTsKLSAgICAJICAgd29ya3NwYWNlRW5kICAgPSB3b3Jrc3BhY2VTdGFydDsKLSAgICAJICAgCi0gICAgCSAgIHdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLSAgICAgICAgCSAgIHdzSW5mb0NhY2hlLmFkZChpdC5uZXh0KCkpOwotICAgICAgICAJICAgd29ya3NwYWNlRW5kKys7Ci0gICAgCSAgIH0KLSU+Ci0gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHJvamVjdHMiKS5zdHlsZS5kaXNwbGF5ID0gIiI7IAotICAgICAgZmlsbFdlYlByb2plY3RzKCk7Ci08JQotICAgICAgIH0KLSAgICAgICBlbHNlewotJT4KLSAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwcm9qZWN0cyIpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7Ci0gICAgICAKLTwlICAKLSAgICAgICAgIHdoaWxlKGl0Lmhhc05leHQoKSkKLSAgICAgICAgIHsKLSAgICAgICAgICAgV2ViU2VydmljZUluZm8gd3NpID0gKFdlYlNlcnZpY2VJbmZvKWl0Lm5leHQoKTsKLSAgICAgICAgICAgU3RyaW5nIHdzZGwgPSBIVE1MVXRpbHMuSlNNYW5nbGUod3NpLmdldFdzZGxVUkwoKSk7Ci0lPgotICAgICAgZG9jdW1lbnQuZm9ybXNbMF0uPCU9QWN0aW9uSW5wdXRzLlFVRVJZX0lOUFVUX1dFQlBST0pFQ1RfV1NETF9VUkwlPi5vcHRpb25zW3grK10gPSBuZXcgT3B0aW9uKCI8JT13c2RsJT4iLCAiPCU9d3NkbCU+Iik7IAotPCUKLSAgICAgICAgICAgd3NJbmZvQ2FjaGUuYWRkKHdzaSk7Ci0gICAgICAgICB9Ci0gICAgICAgfQotJT4KLSAgICB9Ci08JQotICAgICB9Ci0gICB9Ci0lPgotICB9Ci0gIAotICBmdW5jdGlvbiBmaWxsQWxsV1NETEZpbGVzKCkKLSAgewotICAgIHZhciB4ID0gMDsKLSAgICB2YXIgY3VycmVudE51bWJlck9mT3B0aW9ucyA9IGRvY3VtZW50LmZvcm1zWzBdLndlYlByb2plY3RXU0RMVVJMLm9wdGlvbnMubGVuZ3RoOwotICAgIGZvciAodmFyIGk9MDtpPGN1cnJlbnROdW1iZXJPZk9wdGlvbnM7aSsrKQotICAgICAgZG9jdW1lbnQuZm9ybXNbMF0ud2ViUHJvamVjdFdTRExVUkwub3B0aW9uc1swXSA9IG51bGw7Ci08JQotICAgICBUcmVlU2V0IHVybHMgPSBuZXcgVHJlZVNldCgpOwotICAgICBJdGVyYXRvciB3c0l0ZXJhdG9yID0gd3NJbmZvQ2FjaGUuaXRlcmF0b3IoKTsKLSAgICAgd2hpbGUgKHdzSXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICB7Ci0gICAgICAgV2ViU2VydmljZUluZm8gd3NJbmZvID0gKFdlYlNlcnZpY2VJbmZvKXdzSXRlcmF0b3IubmV4dCgpOwotICAgICAgIFN0cmluZyB3c2RsID0gSFRNTFV0aWxzLkpTTWFuZ2xlKHdzSW5mby5nZXRXc2RsVVJMKCkpOwotICAgICAgIHVybHMuYWRkKHdzZGwpOwotICAgICB9Ci0gICAgIAotICAgICBGYXZvcml0ZXNQZXJzcGVjdGl2ZSBmYXZvcml0ZXNQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0RmF2b3JpdGVzUGVyc3BlY3RpdmUoKTsKLSAgICAgTm9kZU1hbmFnZXIgZmF2b3JpdGVzTm9kZU1hbmFnZXIgPSBmYXZvcml0ZXNQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgICBUcmVlRWxlbWVudCBmYXZvcml0ZXNNYWluRWxlbWVudCA9IGZhdm9yaXRlc05vZGVNYW5hZ2VyLmdldFJvb3ROb2RlKCkuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICAgVHJlZUVsZW1lbnQgZmF2b3JpdGVXU0RMU2VydmljZXNFbGVtZW50ID0gKFRyZWVFbGVtZW50KShmYXZvcml0ZXNNYWluRWxlbWVudC5nZXRFbGVtZW50cyhGYXZvcml0ZXNNb2RlbENvbnN0YW50cy5SRUxfV1NETF9TRVJWSUNFX0ZPTERFUl9OT0RFKS5uZXh0RWxlbWVudCgpKTsKLSAgICAgRW51bWVyYXRpb24gZmF2b3JpdGVXU0RMU2VydmljZUVsZW1lbnRzID0gZmF2b3JpdGVXU0RMU2VydmljZXNFbGVtZW50LmdldEVsZW1lbnRzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9XU0RMX1NFUlZJQ0VfTk9ERSk7Ci0gICAgIHdoaWxlIChmYXZvcml0ZVdTRExTZXJ2aWNlRWxlbWVudHMuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgIHsKLSAgICAgICBGYXZvcml0ZXNXU0RMU2VydmljZUVsZW1lbnQgZmF2b3JpdGVXU0RMU2VydmljZUVsZW1lbnQgPSAoRmF2b3JpdGVzV1NETFNlcnZpY2VFbGVtZW50KWZhdm9yaXRlV1NETFNlcnZpY2VFbGVtZW50cy5uZXh0RWxlbWVudCgpOwotICAgICAgIFN0cmluZyB3c2RsID0gSFRNTFV0aWxzLkpTTWFuZ2xlKChmYXZvcml0ZVdTRExTZXJ2aWNlRWxlbWVudC5nZXRTZXJ2aWNlKCkuZ2V0RGVzY3JpcHRpb25zKCkpWzBdLmdldExvY2F0aW9uKCkpOwotICAgICAgIHVybHMuYWRkKHdzZGwpOwotICAgICB9Ci0gICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gdXJscy5pdGVyYXRvcigpOwotICAgICB3aGlsZShpdGVyYXRvci5oYXNOZXh0KCkpewotICAgICAgIFN0cmluZyB3c2RsID0gSFRNTFV0aWxzLkpTTWFuZ2xlKGl0ZXJhdG9yLm5leHQoKS50b1N0cmluZygpKTsKLSU+Ci0gICAgIGRvY3VtZW50LmZvcm1zWzBdLjwlPUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XRUJQUk9KRUNUX1dTRExfVVJMJT4ub3B0aW9uc1t4KytdID0gbmV3IE9wdGlvbigiPCU9d3NkbCU+IiwgIjwlPXdzZGwlPiIpOyAKLTwlCi0KLSAgICAgfQotICAgCi0lPiAgICAgIAotICB9Ci0gIAotICBmdW5jdGlvbiBmaWxsV1NETEZpbGVzKHNlbGVjdGVkV2ViUHJvamVjdE5hbWUpCi0gIHsKLSAgICB2YXIgY3VycmVudE51bWJlck9mT3B0aW9ucyA9IGRvY3VtZW50LmZvcm1zWzBdLjwlPUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XRUJQUk9KRUNUX1dTRExfVVJMJT4ub3B0aW9ucy5sZW5ndGg7Ci0gICAgZm9yICh2YXIgaT0wO2k8Y3VycmVudE51bWJlck9mT3B0aW9ucztpKyspCi0gICAgICBkb2N1bWVudC5mb3Jtc1swXS48JT1BY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV0VCUFJPSkVDVF9XU0RMX1VSTCU+Lm9wdGlvbnNbMF0gPSBudWxsOwotPCUKLSAgIHsKLQotICAgICBJV29ya3NwYWNlUm9vdCBpV29ya3NwYWNlUm9vdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7Ci0gICAgIElQcm9qZWN0W10gcHJvamVjdHMgPSBpV29ya3NwYWNlUm9vdC5nZXRQcm9qZWN0cygpOwotICAgICAgIAotICAgICBmb3IgKGludCBpPTA7aTxwcm9qZWN0cy5sZW5ndGg7aSsrKQotICAgICB7Ci0gICAgICAgaWYgKCFwcm9qZWN0c1tpXS5pc09wZW4oKSkKLSAgICAgICAgIGNvbnRpbnVlOwotICAgICAgIHsKLSU+Ci0gICAgaWYgKHNlbGVjdGVkV2ViUHJvamVjdE5hbWUgPT0gIjwlPUhUTUxVdGlscy5KU01hbmdsZShwcm9qZWN0c1tpXS5nZXROYW1lKCkpJT4iKQotICAgIHsKLSAgICAgIHZhciB4PTA7Ci08JQotICAgICAgICAgU3RyaW5nIHBsYXRmb3JtUHJvdG9jb2wgPSAicGxhdGZvcm06L3Jlc291cmNlIjsKLSAgICAgICAgIFN0cmluZyBodHRwUHJvdG9jb2wgPSAiaHR0cDovLyI7Ci0gICAgICAgICBTdHJpbmcgaHR0cHNQcm90b2NvbCA9ICJodHRwczovLyI7Ci0gICAgICAgICB3c2RsVVJMc18ucmVtb3ZlQWxsRWxlbWVudHMoKTsKLQotCQkgSXRlcmF0b3Igd3MgPSB3c0luZm9DYWNoZS5zdWJMaXN0KHdvcmtzcGFjZVN0YXJ0LCB3b3Jrc3BhY2VFbmQpLml0ZXJhdG9yKCk7Ci0KLSAgICAgICAgIHdoaWxlICh3cy5oYXNOZXh0KCkpCi0gICAgICAgICB7Ci0gICAgICAgICAgICBXZWJTZXJ2aWNlSW5mbyB3c0luZm8gPSAoV2ViU2VydmljZUluZm8pd3MubmV4dCgpOwotICAgICAgICAgICAgU3RyaW5nIHVybCA9IHdzSW5mby5nZXRXc2RsVVJMKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAvLyBmaWx0ZXIgd3NkbCBVUkxzIHdpdGggc2FtZSBwcm9qZWN0IG5hbWUgYXMgc2VsZWN0ZWQgcHJvamVjdAotICAgICAgICAgIC8vIG9ubHkgbG9vayBhdCB3b3Jrc3BhY2UgVVJMcyByZXR1cm5lZCBmcm9tIHRoZSB3ZWIgc2VydmljZSBmaW5kZXIKLSAgICAgICAgICBpZiAodXJsLnN0YXJ0c1dpdGgocGxhdGZvcm1Qcm90b2NvbCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgIC8vc3RyaXAgb2ZmIHBsYXRmb3JtUHJvdG9jb2wgdG8gbG9vayBhdCB0aGUgd29ya3NwYWNlIHBhdGgKLSAgICAgICAgICAgICBQYXRoIHdzZGxQYXRoID0gbmV3IFBhdGgodXJsLnN1YnN0cmluZyhwbGF0Zm9ybVByb3RvY29sLmxlbmd0aCgpKzEpKTsKLSAgICAgICAgICAgICBTdHJpbmcgcGF0aFByb2pOYW1lID0gd3NkbFBhdGguc2VnbWVudCgwKTsgICAgICAgICAgICAgICAgICAgICAgICAgIAotCi0gICAgICAgICAgICAgaWYgKHBhdGhQcm9qTmFtZS5lcXVhbHMocHJvamVjdHNbaV0uZ2V0TmFtZSgpKSkKLSAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICB3c2RsVVJMc18uYWRkKHVybCk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICAvLyBhbHNvIGFkZCBhbnkgaHR0cCBvciBodHRwcyBVUkxzIHJldHVybmVkCi0gICAgICAgICAgZWxzZSBpZiAodXJsLnN0YXJ0c1dpdGgoaHR0cFByb3RvY29sKSB8fCB1cmwuc3RhcnRzV2l0aChodHRwc1Byb3RvY29sKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAgICB3c2RsVVJMc18uYWRkKHVybCk7Ci0gICAgICAgICAgfQotICAgICAgICAgfQotICAgICAgICAgaWYgKHdzZGxUeXBlID09IEFjdGlvbklucHV0cy5XU0RMX1RZUEVfU0VSVklDRV9JTlRFUkZBQ0UpCi0gICAgICAgICB7Ci0gICAgICAgICAKLSAgICAgICAgIH0KLQotICAgICAgICAgZm9yIChJdGVyYXRvciBpdCA9IHdzZGxVUkxzXy5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgICAgICAgewotICAgICAgICAgICAgIFN0cmluZyB3c2RsID0gSFRNTFV0aWxzLkpTTWFuZ2xlKGl0Lm5leHQoKS50b1N0cmluZygpKTsKLSAgICAgICAgICAgICAlPgotICAgICAgICAgICAgICBkb2N1bWVudC5mb3Jtc1swXS48JT1BY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV0VCUFJPSkVDVF9XU0RMX1VSTCU+Lm9wdGlvbnNbeCsrXSA9IG5ldyBPcHRpb24oIjwlPXdzZGwlPiIsICI8JT13c2RsJT4iKTsgCi0gICAgICAgICAgICAgPCUKLSAgICAgICAgIH0KLSU+Ci0gICAgfQotPCUKLSAgICAgICB9Ci0gICAgIH0KLSAgIH0KLSU+Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGZpbGxGYXZvcml0ZVdTRExGaWxlcygpCi0gIHsKLSAgICB2YXIgY3VycmVudE51bWJlck9mT3B0aW9ucyA9IGRvY3VtZW50LmZvcm1zWzBdLjwlPUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XRUJQUk9KRUNUX1dTRExfVVJMJT4ub3B0aW9ucy5sZW5ndGg7Ci0gICAgZm9yICh2YXIgaT0wO2k8Y3VycmVudE51bWJlck9mT3B0aW9ucztpKyspCi0gICAgICBkb2N1bWVudC5mb3Jtc1swXS48JT1BY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV0VCUFJPSkVDVF9XU0RMX1VSTCU+Lm9wdGlvbnNbMF0gPSBudWxsOwotICAgIHZhciB4ID0gMDsKLTwlCi0gICBFbnVtZXJhdGlvbiBmYXZvcml0ZVdTRExTZXJ2aWNlRWxlbWVudHMyID0gZmF2b3JpdGVXU0RMU2VydmljZXNFbGVtZW50LmdldEVsZW1lbnRzKEZhdm9yaXRlc01vZGVsQ29uc3RhbnRzLlJFTF9XU0RMX1NFUlZJQ0VfTk9ERSk7Ci0gICB3aGlsZSAoZmF2b3JpdGVXU0RMU2VydmljZUVsZW1lbnRzMi5oYXNNb3JlRWxlbWVudHMoKSkKLSAgIHsKLSAgICAgRmF2b3JpdGVzV1NETFNlcnZpY2VFbGVtZW50IGZhdm9yaXRlV1NETFNlcnZpY2VFbGVtZW50ID0gKEZhdm9yaXRlc1dTRExTZXJ2aWNlRWxlbWVudClmYXZvcml0ZVdTRExTZXJ2aWNlRWxlbWVudHMyLm5leHRFbGVtZW50KCk7Ci0gICAgIFN0cmluZyB1cmwgPSBIVE1MVXRpbHMuSlNNYW5nbGUoKGZhdm9yaXRlV1NETFNlcnZpY2VFbGVtZW50LmdldFNlcnZpY2UoKS5nZXREZXNjcmlwdGlvbnMoKSlbMF0uZ2V0TG9jYXRpb24oKSk7Ci0lPgotICAgIGRvY3VtZW50LmZvcm1zWzBdLjwlPUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XRUJQUk9KRUNUX1dTRExfVVJMJT4ub3B0aW9uc1t4KytdID0gbmV3IE9wdGlvbigiPCU9dXJsJT4iLCI8JT11cmwlPiIpOwotPCUgICAgIAotICAgfQotJT4gIAotICAKLSAgfQotICAKLSAgCi0gIAotICBmdW5jdGlvbiBzZXREZWZhdWx0cygpCi0gIHsKLSAgICBmaWxsQ2F0ZWdvcmllcygpOwotICAgIHZhciBsb2FkU2NyZWVuVGFibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9hZFNjcmVlbiIpOwotICAgIGlmIChsb2FkU2NyZWVuVGFibGUucm93cy5sZW5ndGggPiAwKQotICAgICAgbG9hZFNjcmVlblRhYmxlLmRlbGV0ZVJvdygwKTsKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWFpblNjcmVlbiIpLnN0eWxlLmRpc3BsYXkgPSAiIjsgICAgICAKLSAgfQotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci0KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLSAgPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gICAgPHRhYmxlIGlkPSJsb2FkU2NyZWVuIj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkPgotICAgICAgICAgIDwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiTVNHX0xPQURfSU5fUFJPR1JFU1MiKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gICAgPGRpdiBpZD0ibWFpblNjcmVlbiIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICAgICAgPGZvcm0gc3R5bGU9Im1hcmdpbi10b3A6MCI+Ci0KLSAgICAgICAgPHRhYmxlPgotICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZD4gPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1dTRExfU09VUkNFIiklPiA8L3RkPgotICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0gICAgICAgIDxkaXYgaWQ9IndvcmtiZW5jaCIgPgotICAgICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9MzAgdmFsaWduPSJib3R0b20iIGNsYXNzPSJsYWJlbHMiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9XU0RMX0NBVEVHT1JZIiklPjwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICA8dGQgbm93cmFwPgotICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLkNBVEVHT1JZJT4iIG9uQ2hhbmdlPSJmaWxsV1NETEZpbGVzQnlDYXRlZ29yeSh0aGlzLnZhbHVlKSIgY2xhc3M9InNlbGVjdGxpc3QiPgotICAgICAgICAgICAgICAgIDwvc2VsZWN0PgotICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQlVUVE9OX1JFRlJFU0giKSU+IiBvbkNsaWNrPSJkb2N1bWVudC5sb2NhdGlvbi5yZWxvYWQoKSIgY2xhc3M9ImJ1dHRvbiI+Ci0gICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgIDwvdGFibGU+ICAgIAotICAgICAgICAgIDxkaXYgaWQ9InByb2plY3RzIiBzdHlsZT0iZGlzcGxheTpub25lOyI+ICAgICAgICAgIAotICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4gICAgICAgICAgICAgIAotICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD0zMCB2YWxpZ249ImJvdHRvbSIgY2xhc3M9ImxhYmVscyI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1dTRExfU09VUkNFX1dFQlBST0pFQ1RTIiklPjwvdGQ+Ci0gICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgbm93cmFwPgotICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJwcm9qZWN0IiBvbkNoYW5nZT0iZmlsbFdTRExGaWxlcyh0aGlzLnZhbHVlKSIgY2xhc3M9InNlbGVjdGxpc3QiPgotICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+Ci0gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0JVVFRPTl9SRUZSRVNIIiklPiIgb25DbGljaz0iZG9jdW1lbnQubG9jYXRpb24ucmVsb2FkKCkiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgIDwvZGl2PgotICAgICAgICAgIDx0YWJsZT4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgPHRkIGhlaWdodD0xMCB2YWxpZ249ImJvdHRvbSIgY2xhc3M9ImxhYmVscyI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1dTRExfVVJMIiklPjwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuUVVFUllfSU5QVVRfV0VCUFJPSkVDVF9XU0RMX1VSTCU+IiBjbGFzcz0ic2VsZWN0bGlzdCI+Ci0gICAgICAgICAgICAgICAgPC9zZWxlY3Q+Ci0gICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTIgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgPHRkIGhlaWdodD0zMCB2YWxpZ249ImJvdHRvbSIgbm93cmFwIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0JVVFRPTl9HTyIpJT4iIG9uQ2xpY2s9InRvcC5vcGVuZXIudGFyZ2V0V1NETFVSTEVsZW1lbnQudmFsdWU9dGhpcy5mb3JtLjwlPUFjdGlvbklucHV0cy5RVUVSWV9JTlBVVF9XRUJQUk9KRUNUX1dTRExfVVJMJT4udmFsdWU7dG9wLmNsb3NlKCkiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTMwIHZhbGlnbj0iYm90dG9tIiBub3dyYXAgYWxpZ249ImxlZnQiPgotICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQlVUVE9OX0NBTkNFTCIpJT4iIG9uQ2xpY2s9InRvcC5jbG9zZSgpIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICA8L3RhYmxlPgotICAgICAgICA8L2Rpdj4KLSAgIAotICAgICAgPC9mb3JtPgotICAgIDwvZGl2PgotICA8L2Rpdj4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBzZXREZWZhdWx0cygpOwotICByZXN1bWVQcm94eUxvYWRQYWdlKCk7Ci08L3NjcmlwdD4gIAotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsX3Rvb2xiYXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2RsX3Rvb2xiYXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkN2M4MzhkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NkbF90b29sYmFyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08JQotICAgU3RyaW5nIHNlc3Npb25JZCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKEFjdGlvbklucHV0cy5TRVNTSU9OSUQpOwotICAgSHR0cFNlc3Npb24gY3VycmVudFNlc3Npb24gPSAoSHR0cFNlc3Npb24pYXBwbGljYXRpb24uZ2V0QXR0cmlidXRlKHNlc3Npb25JZCk7Ci0gICBDb250cm9sbGVyIGNvbnRyb2xsZXIgPSAoQ29udHJvbGxlciljdXJyZW50U2Vzc2lvbi5nZXRBdHRyaWJ1dGUoImNvbnRyb2xsZXIiKTsKLSU+Ci08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1dTRExfVE9PTEJBUiIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy90b29sYmFyLmNzcyIpKSU+Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgb25VbmxvYWQ9InRvcC5vcGVuZXIud3NkbFdpbmRvd0Nsb3NlZD10cnVlIiBjbGFzcz0idG9vbGJhcmJvZHltYXJnaW4iPgotPGRpdiBpZD0idG9vbGJhcmJvcmRlciI+Ci0gIDxkaXYgaWQ9InRvb2xiYXIiPgotICAgIDx0YWJsZSB3aWR0aD0iMTAwJSIgaGVpZ2h0PTI1IGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBib3JkZXI9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0yNSBoZWlnaHQ9MjU+PGltZyBjbGFzcz0ibm9ybWFsIiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3dzZGwuZ2lmIikpJT4iIHdpZHRoPTE2IGhlaWdodD0xNj48L3RkPgotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJsZWZ0IiB3aWR0aD0iKiIgaGVpZ2h0PTI1IG5vd3JhcCBjbGFzcz0idGV4dCI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfV1NETF9CUk9XU0VSIiklPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gIDwvZGl2PgotPC9kaXY+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgdG9wLm9wZW5lci53c2RsV2luZG93Q2xvc2VkID0gZmFsc2U7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NleHBsb3Jlci5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzZXhwbG9yZXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTBhYThiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NleHBsb3Jlci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLlVSTFV0aWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuRW51bWVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEubmV0LiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEuaW8uKiIlPgotCi08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgIGZ1bmN0aW9uIGluaXRXaW5kb3dOYW1lKG5hbWUpCi0gICAgewotICAgICAgd2luZG93Lm5hbWUgPSBuYW1lOwotICAgIH0KLSAgPC9zY3JpcHQ+Ci0gIDwlCi0gIFN0cmluZyBzZXNzaW9uSWQgPSBzZXNzaW9uLmdldElkKCk7Ci0gICU+Ci0gIDxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiI+Ci0gICAgPCUKLSAgICAvLyBBZGQgdGhlIHNlc3Npb24gdG8gdGhlIGFwcGxpY2F0aW9uLiBUaGlzIGFsbG93cyB1cyB0byByZXN1cnJlY3QgdGhlIHNlc3Npb24gZXZlbiBpZiB0aGUgYnJvd3NlciBjaG9vc2VzIG5vdCB0byBwYXJ0aWNpcGF0ZS4KLSAgICBhcHBsaWNhdGlvbi5zZXRBdHRyaWJ1dGUoc2Vzc2lvbklkLHNlc3Npb24pOwotCi0gICAgaWYgKHNlc3Npb24uZ2V0TWF4SW5hY3RpdmVJbnRlcnZhbCgpID4gMCkKLSAgICAgIHNlc3Npb24uc2V0TWF4SW5hY3RpdmVJbnRlcnZhbCgtMSk7Ci0KLSAgICAvLyBMYXVuY2hPcHRpb25NYW5hZ2VyIChiZWxvdykgaGFuZGxlcyBtb3N0IG9wdGlvbnMsCi0gICAgLy8gYnV0IG5lZWQgdG8gZ2V0IHN0YXRlIGFuZCBpbnN0YWxsIGxvY2F0aW9ucyBlYXJsaWVyLAotICAgIC8vIHNwZWNpZmljYWxseSBiZWZvcmUgY29udHJvbGxlci5pbml0KCkuCi0gICAgRW51bWVyYXRpb24gcGFyYW1OYW1lcyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyTmFtZXMoKTsKLSAgICB3aGlsZSAocGFyYW1OYW1lcy5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICB7Ci0gICAgICBTdHJpbmcgcGFyYW1OYW1lID0gKFN0cmluZylwYXJhbU5hbWVzLm5leHRFbGVtZW50KCk7Ci0gICAgICBTdHJpbmdbXSBwYXJhbVZhbHVlcyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyVmFsdWVzKHBhcmFtTmFtZSk7Ci0gICAgICBpZiAocGFyYW1WYWx1ZXMgIT0gbnVsbCAmJiBwYXJhbVZhbHVlcy5sZW5ndGggPiAwKQotICAgICAgewotICAgICAgICBTdHJpbmcgZGVjb2RlZFBhcmFtTmFtZSA9IFVSTFV0aWxzLmRlY29kZShwYXJhbU5hbWUpOwotICAgICAgICBpZiAoZGVjb2RlZFBhcmFtTmFtZS5lcXVhbHMoTGF1bmNoT3B0aW9ucy5ERUZBVUxUX0ZBVk9SSVRFU19MT0NBVElPTikpCi0gICAgICAgIHsKLSAgICAgICAgICBjb250cm9sbGVyLnNldERlZmF1bHRGYXZvcml0ZXNMb2NhdGlvbihwYXJhbVZhbHVlc1swXSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoZGVjb2RlZFBhcmFtTmFtZS5lcXVhbHMoTGF1bmNoT3B0aW9ucy5TVEFURV9MT0NBVElPTikpCi0gICAgICAgIHsKLSAgICAgICAgICBjb250cm9sbGVyLnNldFN0YXRlTG9jYXRpb24ocGFyYW1WYWx1ZXNbMF0pOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gY29udHJvbGxlci5pbml0KCkKLSAgICBjb250cm9sbGVyLmluaXQoc2Vzc2lvbklkLGFwcGxpY2F0aW9uLHJlcXVlc3QuZ2V0Q29udGV4dFBhdGgoKSk7Ci0gICAgJT4KLSAgPC9qc3A6dXNlQmVhbj4KLSAgPCUKLSAgLy8gcHJlbG9hZCBmcm9tIExhdW5jaE9wdGlvbk1hbmFnZXIKLSAgU3RyaW5nIGtleSA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKFVSTFV0aWxzLmVuY29kZShXU0V4cGxvcmVyQ29udGV4dC5JRCkpOwotICBpZiAoa2V5ICE9IG51bGwgJiYga2V5Lmxlbmd0aCgpID4gMCkKLSAgewotICAgIExhdW5jaE9wdGlvbnNNYW5hZ2VyIG1hbmFnZXIgPSBMYXVuY2hPcHRpb25zTWFuYWdlci5nZXRJbnN0YW5jZSgpOwotICAgIG1hbmFnZXIubWFuYWdlKGtleSwgc2Vzc2lvbklkLCBhcHBsaWNhdGlvbik7Ci0gIH0KLSAgJT4KLSAgPGpzcDppbmNsdWRlIHBhZ2U9Ii9hY3Rpb25lbmdpbmUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICA8dGl0bGU+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJUSVRMRV9XU0VYUExPUkVSIiklPjwvdGl0bGU+Ci08L2hlYWQ+Ci08JQotLy8gcmVzZXQgcGVyc3BlY3RpdmUgY29udGVudCB0byBibGFuawotY29udHJvbGxlci5lbmFibGVQZXJzcGVjdGl2ZUNvbnRlbnRCbGFuayh0cnVlKTsKLSU+Ci08ZnJhbWVzZXQgcm93cz0iMCwzNSwqIiBib3JkZXI9MCBvbmxvYWQ9ImphdmFzY3JpcHQ6aW5pdFdpbmRvd05hbWUoJzwlPUZyYW1lTmFtZXMuV0lORE9XX05BTUVfV1NFWFBMT1JFUl9KU1AlPicpIj4KLSAgPGZyYW1lIG5hbWU9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfUEVSU1BFQ1RJVkVfV09SS0FSRUEiKSU+IiBmcmFtZWJvcmRlcj0wIG5vcmVzaXplPgotICA8ZnJhbWUgbmFtZT0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9UT09MQkFSJT4iIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1BFUlNQRUNUSVZFX1RPT0xCQVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgicGVyc3BlY3RpdmVfdG9vbGJhci5qc3AiKSklPiIgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MCBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG5vcmVzaXplPgotICA8ZnJhbWUgbmFtZT0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9DT05URU5UJT4iIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1BFUlNQRUNUSVZFX0NPTlRFTlQiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgicGVyc3BlY3RpdmVfY29udGVudC5qc3AiKSklPiIgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MCBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wPgotPC9mcmFtZXNldD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotKi5qYXZhCi0qLmNsYXNzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9DbGVhck5vZGVDb25maXJtSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL0NsZWFyTm9kZUNvbmZpcm1KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZmUzMmJhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL0NsZWFyTm9kZUNvbmZpcm1KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA5MDYgMTU1NDM0ICAgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIEJhY2sgU2xhc2ggJ1wnIG5vdCBhcHBlYXJpbmcgaW4gIldTSUwgbm8gbG9uZ2VyIHJlc29sdmFibGUiIGVycm9yIG1lc3NhZ2UKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLldzaWxGcmFtZU5hbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5DbGVhcldTSUxBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC4qIiU+Ci0KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NpbC9zY3JpcHRzL3dzaWxQYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxodG1sPgotPGhlYWQ+Ci0gICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLSAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgICAgaWYgKGNvbmZpcm0oIjwlPUhUTUxVdGlscy5KU01hbmdsZShjb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpLmdldE1lc3NhZ2UoIk1TR19DT05GSVJNX1JFTU9WRV9OT0RFIiwgY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpLmdldFNlbGVjdGVkTm9kZSgpLmdldE5vZGVOYW1lKCkpKSU+IikpIHsKLSAgICAgICAgICAgIHBlcnNwZWN0aXZlV29ya0FyZWEubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KENsZWFyV1NJTEFjdGlvbi5nZXRBY3Rpb25MaW5rKGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCkuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKS5nZXROb2RlSWQoKSkpKSU+IjsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHdzaWxQcm9wZXJ0aWVzQ29udGFpbmVyLmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NpbC93c2lsX3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCIpKSU+IjsKLSAgICAgICAgICAgIHdzaWxTdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NpbC93c2lsX3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgICAgICAgfQotICAgIDwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvQ2xlYXJXU0lMQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL0NsZWFyV1NJTEFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxYmIxM2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvQ2xlYXJXU0lMQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnVkZGkuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuQ2xlYXJXU0lMQWN0aW9uIiU+Ci0KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NpbC9zY3JpcHRzL3dzaWxQYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgIENsZWFyV1NJTEFjdGlvbiBhY3Rpb24gPSBuZXcgQ2xlYXJXU0lMQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgICBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gICAgIC8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotICAgICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2FjdGlvbnMvQ2xlYXJOb2RlQWN0aW9uLmluYyIgJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL0ltcG9ydFdTRExUb0ZpbGVTeXN0ZW1BY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1NWI5NDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEuaW8uKiIgJT4KLQotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbiBhY3Rpb24gPSBuZXcgSW1wb3J0V1NETFRvRmlsZVN5c3RlbUFjdGlvbihjb250cm9sbGVyKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvYWN0aW9ucy9JbXBvcnRUb0ZpbGVTeXN0ZW1BY3Rpb24uaW5jIiAlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvSW1wb3J0V1NJTFRvRmlsZVN5c3RlbUFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9JbXBvcnRXU0lMVG9GaWxlU3lzdGVtQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGVkY2Q4ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9JbXBvcnRXU0lMVG9GaWxlU3lzdGVtQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5pby4qIiAlPgotCi0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICBJbXBvcnRXU0lMVG9GaWxlU3lzdGVtQWN0aW9uIGFjdGlvbiA9IG5ldyBJbXBvcnRXU0lMVG9GaWxlU3lzdGVtQWN0aW9uKGNvbnRyb2xsZXIpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9hY3Rpb25zL0ltcG9ydFRvRmlsZVN5c3RlbUFjdGlvbi5pbmMiICU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9PcGVuV1NJTEFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9PcGVuV1NJTEFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzYTRjNDcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvT3BlbldTSUxBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvc2NyaXB0cy93c2lsUGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotICA8L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci08JQotLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotT3BlbldTSUxBY3Rpb24gYWN0aW9uID0gbmV3IE9wZW5XU0lMQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0vLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLWJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotaWYgKCFpbnB1dHNWYWxpZCkgewotJT4KLSAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgd3NpbFByb3BlcnRpZXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NpbC93c2lsX3Byb3BlcnRpZXNfY29udGVudC5qc3AiKSklPiI7Ci0gICAgd3NpbFN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2lsL3dzaWxfc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotICA8L3NjcmlwdD4KLTwlCi19Ci1lbHNlIHsKLSAgLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi0gIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLSAgaWYgKGFjdGlvblJlc3VsdCkgewotJT4KLSAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgIGlmIChpc01pY3Jvc29mdEludGVybmV0RXhwbG9yZXIoKSkgewotICAgICAgICB3c2lsTmF2aWdhdG9yQ29udGVudC5sb2NhdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2lsL3dzaWxfbmF2aWdhdG9yX2NvbnRlbnQuanNwIikpJT4iOwotICAgICAgICB3c2lsUHJvcGVydGllc0NvbnRhaW5lci5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzaWwvd3NpbF9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiKSklPiI7Ci0gICAgICAgIHdzaWxTdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NpbC93c2lsX3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgcGVyc3BlY3RpdmVDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NpbC93c2lsX3BlcnNwZWN0aXZlX2NvbnRlbnQuanNwIikpJT4iOwotICAgIDwvc2NyaXB0PgotPCUKLSAgfQotICBlbHNlIHsKLSU+Ci0gICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICB3c2lsUHJvcGVydGllc0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2lsL3dzaWxfcHJvcGVydGllc19jb250ZW50LmpzcCIpKSU+IjsKLSAgICAgIHdzaWxTdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NpbC93c2lsX3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgICA8L3NjcmlwdD4KLTwlCi0gIH0KLX0KLSU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9PcGVuV1NJTExpbmtBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvT3BlbldTSUxMaW5rQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWNhNzVlNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9PcGVuV1NJTExpbmtBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy5Xc2lsRnJhbWVOYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuRnJhbWVOYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuT3BlbldTSUxMaW5rQWN0aW9uIiU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbFBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLSAgPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLS8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLU9wZW5XU0lMTGlua0FjdGlvbiBhY3Rpb24gPSBuZXcgT3BlbldTSUxMaW5rQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0vLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLWJvb2xlYW4gaW5wdXRzVmFsaWQgPSBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotaWYgKCFpbnB1dHNWYWxpZCkgewotJT4KLSAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgd3NpbFByb3BlcnRpZXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NpbC93c2lsX3Byb3BlcnRpZXNfY29udGVudC5qc3AiKSklPiI7Ci0gICAgd3NpbFN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2lsL3dzaWxfc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotICA8L3NjcmlwdD4KLTwlCi19Ci1lbHNlIHsKLSAgLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi0gIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLSAgaWYgKGFjdGlvblJlc3VsdCkgewotJT4KLSAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgIGlmIChpc01pY3Jvc29mdEludGVybmV0RXhwbG9yZXIoKSkgewotICAgICAgICB3c2lsTmF2aWdhdG9yQ29udGVudC5sb2NhdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2lsL3dzaWxfbmF2aWdhdG9yX2NvbnRlbnQuanNwIikpJT4iOwotICAgICAgICB3c2lsUHJvcGVydGllc0NvbnRhaW5lci5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzaWwvd3NpbF9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiKSklPiI7Ci0gICAgICAgIHdzaWxTdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NpbC93c2lsX3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgcGVyc3BlY3RpdmVDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NpbC93c2lsX3BlcnNwZWN0aXZlX2NvbnRlbnQuanNwIikpJT4iOwotICAgIDwvc2NyaXB0PgotPCUKLSAgfQotICBlbHNlIHsKLSU+Ci0gICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICB3c2lsUHJvcGVydGllc0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2lsL3dzaWxfcHJvcGVydGllc19jb250ZW50LmpzcCIpKSU+IjsKLSAgICAgIHdzaWxTdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NpbC93c2lsX3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgICA8L3NjcmlwdD4KLTwlCi0gIH0KLX0KLSU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9SZWZyZXNoQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL1JlZnJlc2hBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYWYzZTFhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL1JlZnJlc2hBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy5Xc2lsRnJhbWVOYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLkFjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuKiIlPgotCi08anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvc2NyaXB0cy93c2lsUGFuZXMuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgIC8vIFByZXBhcmUgdGhlIGFjdGlvbi4KLSAgICBBY3Rpb24gYWN0aW9uID0gUmVmcmVzaEFjdGlvbi5uZXdBY3Rpb24ocmVxdWVzdCwgY29udHJvbGxlcik7Ci0KLSAgICAvLyBMb2FkIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uIGZyb20gdGhlIHNlcnZsZXQgcmVxdWVzdC4KLSAgICBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0gICAgLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi0gICAgYm9vbGVhbiBhY3Rpb25SZXN1bHQgPSBhY3Rpb24uZXhlY3V0ZSgpOwotJT4KLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiI+Ci0gICAgPCUKLSAgICBpZiAoIWFjdGlvblJlc3VsdCkgewotICAgICAgICBpZiAoYWN0aW9uIGluc3RhbmNlb2YgUmVmcmVzaFdTSUxBY3Rpb24pIHsKLSAgICAgICAgJT4KLSAgICAgICAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvd3NpbC9hY3Rpb25zL0NsZWFyTm9kZUNvbmZpcm1KU1AuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgICAgICA8JQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAlPgotICAgICAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICAgICAgICAgICAgd3NpbFByb3BlcnRpZXNDb250YWluZXIubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2lsL3dzaWxfcHJvcGVydGllc19jb250YWluZXIuanNwIikpJT4iOwotICAgICAgICAgICAgICAgIHdzaWxTdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NpbC93c2lsX3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgICAgICAgICAgIDwvc2NyaXB0PgotICAgICAgICA8JQotICAgICAgICB9Ci0gICAgICAgICU+Ci0gICAgPCUKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgJT4KLSAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICAgICAgICB3c2lsUHJvcGVydGllc0NvbnRhaW5lci5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzaWwvd3NpbF9wcm9wZXJ0aWVzX2NvbnRhaW5lci5qc3AiKSklPiI7Ci0gICAgICAgICAgICB3c2lsU3RhdHVzQ29udGVudC5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzaWwvd3NpbF9zdGF0dXNfY29udGVudC5qc3AiKSklPiI7Ci0gICAgICAgIDwvc2NyaXB0PgotICAgIDwlCi0gICAgfQotICAgICU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9SZXNpemVXU0lMRnJhbWVzQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL1Jlc2l6ZVdTSUxGcmFtZXNBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOWUzNzZiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL1Jlc2l6ZVdTSUxGcmFtZXNBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIC8vIENyZWF0ZSB0aGUgYWN0aW9uLgotICAgUmVzaXplV1NJTEZyYW1lc0FjdGlvbiBhY3Rpb24gPSBuZXcgUmVzaXplV1NJTEZyYW1lc0FjdGlvbihjb250cm9sbGVyKTsKLSAgIAotICAgLy8gUG9wdWxhdGUgdGhlIGFjdGlvbiB3aXRoIHRoZSByZXF1ZXN0IHByb3BlcnRpZXMuCi0gICBib29sZWFuIHJlc3VsdCA9IGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0lPgotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbGZyYW1lc2V0cy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy9icm93c2VyZGV0ZWN0LmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotPCUKLSAgIGlmIChyZXN1bHQpCi0gICB7Ci0gICAgIGFjdGlvbi5leGVjdXRlKGZhbHNlKTsKLSAgICAgCi0gICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotJT4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICBpZiAoaXNNaWNyb3NvZnRJbnRlcm5ldEV4cGxvcmVyKCkpCi0gIHsKLSAgICB2YXIgcGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXQgPSBnZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldCgpOwotICAgIHZhciBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXQgPSBnZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXQoKTsKLSAgICBwZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldC5zZXRBdHRyaWJ1dGUoImNvbHMiLCI8JT13c2lsUGVyc3BlY3RpdmUuZ2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCklPiIpOwotICAgIGFjdGlvbnNDb250YWluZXJGcmFtZXNldC5zZXRBdHRyaWJ1dGUoInJvd3MiLCI8JT13c2lsUGVyc3BlY3RpdmUuZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0Um93cygpJT4iKTsKLSAgfQotICBlbHNlCi0gICAgcGVyc3BlY3RpdmVDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NpbC93c2lsX3BlcnNwZWN0aXZlX2NvbnRlbnQuanNwIikpJT4iOwotPC9zY3JpcHQ+Ci08JQotICAgfQotJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL1NlbGVjdFdTSUxOb2RlQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL1NlbGVjdFdTSUxOb2RlQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Y5NGM4OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9TZWxlY3RXU0lMTm9kZUFjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlNlbGVjdFdTSUxOb2RlQWN0aW9uIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICAgIFNlbGVjdFdTSUxOb2RlQWN0aW9uIGFjdGlvbiA9IG5ldyBTZWxlY3RXU0lMTm9kZUFjdGlvbihjb250cm9sbGVyKTsKLQotICAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgIGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgICAvLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLSAgICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0KLSAgICAvLyBEZXRlcm1pbmUgaWYgdGhlIGFjdGlvbiB3YXMgYWRkZWQgdG8gdGhlIGhpc3RvcnkgbGlzdC4KLSAgICBib29sZWFuIGlzQWRkZWRUb0hpc3RvcnkgPSBhY3Rpb24uaXNBZGRlZFRvSGlzdG9yeSgpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9hY3Rpb25zL1NlbGVjdE5vZGVBY3Rpb24uaW5jIiAlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvU2VsZWN0V1NJTFRvb2xBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvU2VsZWN0V1NJTFRvb2xBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzhkZmQ2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL1NlbGVjdFdTSUxUb29sQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuU2VsZWN0V1NJTFRvb2xBY3Rpb24iICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gICAgU2VsZWN0V1NJTFRvb2xBY3Rpb24gYWN0aW9uID0gbmV3IFNlbGVjdFdTSUxUb29sQWN0aW9uKGNvbnRyb2xsZXIpOwotCi0gICAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gICAgYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotICAgIC8vIFJ1biB0aGUgYWN0aW9uIGFuZCBvYnRhaW4gdGhlIHJldHVybiBjb2RlIChmYWlsL3N1Y2Nlc3MpLgotICAgIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLQotICAgIC8vIERldGVybWluZSBpZiB0aGUgYWN0aW9uIHdhcyBhZGRlZCB0byB0aGUgaGlzdG9yeSBsaXN0LgotICAgIGJvb2xlYW4gaXNBZGRlZFRvSGlzdG9yeSA9IGFjdGlvbi5pc0FkZGVkVG9IaXN0b3J5KCk7Ci0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL2FjdGlvbnMvU2VsZWN0Tm9kZVRvb2xBY3Rpb24uaW5jIiAlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvU3dpdGNoUGVyc3BlY3RpdmVGcm9tV1NJTEFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9Td2l0Y2hQZXJzcGVjdGl2ZUZyb21XU0lMQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTdkMDdiMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9Td2l0Y2hQZXJzcGVjdGl2ZUZyb21XU0lMQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24KLSAgIFN3aXRjaFBlcnNwZWN0aXZlRnJvbVdTSUxBY3Rpb24gYWN0aW9uID0gbmV3IFN3aXRjaFBlcnNwZWN0aXZlRnJvbVdTSUxBY3Rpb24oY29udHJvbGxlcik7Ci0gICAKLSAgIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICAgYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLSAgIAotICAgLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi0gICBib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0gICAKLSAgIC8vIERldGVybWluZSBpZiB0aGUgYWN0aW9uIHdhcyBhZGRlZCB0byB0aGUgaGlzdG9yeSBsaXN0LgotICAgYm9vbGVhbiBpc0FkZGVkVG9IaXN0b3J5ID0gYWN0aW9uLmlzQWRkZWRUb0hpc3RvcnkoKTsKLSU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvc3dpdGNocGVyc3BlY3RpdmUuanNwIiBmbHVzaD0idHJ1ZSIvPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvV1NJTEltcG9ydFdTSUxUb1dvcmtiZW5jaEFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9XU0lMSW1wb3J0V1NJTFRvV29ya2JlbmNoQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQ1MzEzMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9XU0lMSW1wb3J0V1NJTFRvV29ya2JlbmNoQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgV1NJTEltcG9ydFdTSUxUb1dvcmtiZW5jaEFjdGlvbiBhY3Rpb24gPSBuZXcgV1NJTEltcG9ydFdTSUxUb1dvcmtiZW5jaEFjdGlvbihjb250cm9sbGVyKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvYWN0aW9ucy9JbXBvcnRUb1dvcmtiZW5jaEFjdGlvbi5pbmMiICU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9Xc2lsQWRkVG9GYXZvcml0ZXNBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvV3NpbEFkZFRvRmF2b3JpdGVzQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDA4MzY4Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9Xc2lsQWRkVG9GYXZvcml0ZXNBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy5Xc2lsRnJhbWVOYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy5GcmFtZU5hbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLkFkZFRvRmF2b3JpdGVzQWN0aW9uIiU+Ci0KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NpbC9zY3JpcHRzL3dzaWxQYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0vLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi1BZGRUb0Zhdm9yaXRlc0FjdGlvbiBhY3Rpb24gPSBBZGRUb0Zhdm9yaXRlc0FjdGlvbi5uZXdBY3Rpb24ocmVxdWVzdCwgY29udHJvbGxlcik7Ci0KLS8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotLy8gUnVuIHRoZSBhY3Rpb24KLWFjdGlvbi5leGVjdXRlKCk7Ci0lPgotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLSAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgd3NpbFByb3BlcnRpZXNDb250YWluZXIubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2lsL3dzaWxfcHJvcGVydGllc19jb250YWluZXIuanNwIikpJT4iOwotICAgIHdzaWxTdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NpbC93c2lsX3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9Xc2lsQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvV3NpbEFkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDhhMzdiOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9Xc2lsQWRkVG9VRERJUGVyc3BlY3RpdmVBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9wYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gIDxqc3A6aW5jbHVkZSBwYWdlPSIvd3NpbC9zY3JpcHRzL3dzaWxQYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iPgotICA8JQotICAvLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi0gIEFjdGlvbiBhY3Rpb24gPSBBZGRUb1VERElQZXJzcGVjdGl2ZUFjdGlvbi5uZXdBY3Rpb24ocmVxdWVzdCwgY29udHJvbGxlcik7Ci0KLSAgLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi0gIGFjdGlvbi5wb3B1bGF0ZVByb3BlcnR5VGFibGUocmVxdWVzdCk7Ci0KLSAgLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi0gIGJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLQotICBpZiAoYWN0aW9uUmVzdWx0KQotICB7Ci0gICAgY29udHJvbGxlci5nZXRVRERJUGVyc3BlY3RpdmUoKS5nZXROYXZpZ2F0b3JNYW5hZ2VyKCkubWFrZVNlbGVjdGVkTm9kZVZpc2libGUoKTsKLSAgJT4KLSAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgICAgIHBlcnNwZWN0aXZlV29ya0FyZWEubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFNob3dQZXJzcGVjdGl2ZUFjdGlvbi5nZXRBY3Rpb25MaW5rKEFjdGlvbklucHV0cy5QRVJTUEVDVElWRV9VRERJLGZhbHNlKSkpJT4iOwotICAgIDwvc2NyaXB0PgotICA8JQotICB9Ci0gIGVsc2UKLSAgewotICAlPgotICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgd3NpbFByb3BlcnRpZXNDb250YWluZXIubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2lsL3dzaWxfcHJvcGVydGllc19jb250YWluZXIuanNwIikpJT4iOwotICAgICAgd3NpbFN0YXR1c0NvbnRlbnQubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2lsL3dzaWxfc3RhdHVzX2NvbnRlbnQuanNwIikpJT4iOwotICAgIDwvc2NyaXB0PgotICA8JQotICB9Ci0gICU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9Xc2lsQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvV3NpbEFkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTFmNDlkYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9Xc2lsQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmFjdGlvbnMuU2hvd1BlcnNwZWN0aXZlQWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuV3NpbEZyYW1lTmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuV3NpbEFkZFRvV1NETFBlcnNwZWN0aXZlQWN0aW9uIiU+Ci0KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NpbC9zY3JpcHRzL3dzaWxQYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLQotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLTwlCi0vLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi1Xc2lsQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb24gYWN0aW9uID0gbmV3IFdzaWxBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbihjb250cm9sbGVyKTsKLQotLy8gTG9hZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiBmcm9tIHRoZSBzZXJ2bGV0IHJlcXVlc3QuCi1hY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotCi0vLyBSdW4gdGhlIGFjdGlvbiBhbmQgb2J0YWluIHRoZSByZXR1cm4gY29kZSAoZmFpbC9zdWNjZXNzKS4KLWJvb2xlYW4gYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmV4ZWN1dGUoKTsKLQotaWYgKGFjdGlvblJlc3VsdCkgewotJT4KLSAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgcGVyc3BlY3RpdmVXb3JrQXJlYS5sb2NhdGlvbiA9ICI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoU2hvd1BlcnNwZWN0aXZlQWN0aW9uLmdldEFjdGlvbkxpbmsoQWN0aW9uSW5wdXRzLlBFUlNQRUNUSVZFX1dTREwsZmFsc2UpKSklPiI7Ci0gIDwvc2NyaXB0PgotPCUKLX0KLWVsc2UgewotJT4KLSAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgd3NpbFByb3BlcnRpZXNDb250YWluZXIubG9jYXRpb24gPSAiPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2lsL3dzaWxfcHJvcGVydGllc19jb250YWluZXIuanNwIikpJT4iOwotICAgIHdzaWxTdGF0dXNDb250ZW50LmxvY2F0aW9uID0gIjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NpbC93c2lsX3N0YXR1c19jb250ZW50LmpzcCIpKSU+IjsKLSAgPC9zY3JpcHQ+Ci08JQotfQotJT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL1dzaWxDaGVja0Zhdm9yaXRlRXhpc3RzQWN0aW9uSlNQLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL1dzaWxDaGVja0Zhdm9yaXRlRXhpc3RzQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhOTkwMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9Xc2lsQ2hlY2tGYXZvcml0ZUV4aXN0c0FjdGlvbkpTUC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLkFkZFRvRmF2b3JpdGVzQWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuSFRNTFV0aWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgamF2YS51dGlsLkVudW1lcmF0aW9uIiU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbFBhbmVzLmpzcCIgZmx1c2g9InRydWUiLz4KLQotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+Ij4KLSAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzaWwvYWN0aW9ucy9Xc2lsQWRkVG9GYXZvcml0ZXNBY3Rpb25KU1AuanNwIikpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iPgotPCUKLSAgICBFbnVtZXJhdGlvbiBwYXJhbU5hbWVzID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXJOYW1lcygpOwotICAgIHdoaWxlIChwYXJhbU5hbWVzLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICBTdHJpbmcgcGFyYW1OYW1lID0gKFN0cmluZylwYXJhbU5hbWVzLm5leHRFbGVtZW50KCk7Ci0gICAgICBTdHJpbmdbXSBwYXJhbVZhbHVlcyA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyVmFsdWVzKHBhcmFtTmFtZSk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhcmFtVmFsdWVzLmxlbmd0aDsgaSsrKSB7Ci0lPgotICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1wYXJhbU5hbWUlPiIgdmFsdWU9IjwlPXBhcmFtVmFsdWVzW2ldJT4iPgotPCUKLSAgICAgIH0KLSAgICB9Ci0lPgotICA8L2Zvcm0+Ci08L2JvZHk+Ci08L2h0bWw+Ci08JQotaWYgKHJlcXVlc3QuZ2V0UGFyYW1ldGVyKFdzaWxBY3Rpb25JbnB1dHMuTVVMVElQTEVfTElOS19BQ1RJT04pID09IG51bGwpIHsKLSAgLy8gUHJlcGFyZSB0aGUgYWN0aW9uLgotICBBZGRUb0Zhdm9yaXRlc0FjdGlvbiBhY3Rpb24gPSBBZGRUb0Zhdm9yaXRlc0FjdGlvbi5uZXdBY3Rpb24ocmVxdWVzdCwgY29udHJvbGxlcik7Ci0gIC8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotICBhY3Rpb24ucG9wdWxhdGVQcm9wZXJ0eVRhYmxlKHJlcXVlc3QpOwotICBpZiAoYWN0aW9uLmZhdm9yaXRlRXhpc3RzKCkpIHsKLSU+Ci0gICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICBpZiAoY29uZmlybSgiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCkuZ2V0TWVzc2FnZSgiTVNHX1FVRVNUSU9OX09WRVJXUklURV9GQVZPUklURVMiKSklPiIpKQotICAgICAgICBkb2N1bWVudC5mb3Jtc1swXS5zdWJtaXQoKTsKLSAgICA8L3NjcmlwdD4KLTwlCi0gIH0KLSAgZWxzZSB7Ci0lPgotICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgZG9jdW1lbnQuZm9ybXNbMF0uc3VibWl0KCk7Ci0gICAgPC9zY3JpcHQ+Ci08JQotICB9Ci19Ci1lbHNlIHsKLSU+Ci0gIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgIGRvY3VtZW50LmZvcm1zWzBdLnN1Ym1pdCgpOwotICA8L3NjcmlwdD4KLTwlCi19Ci0lPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvV3NpbEltcG9ydFdTRExUb1dvcmtiZW5jaEFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9Xc2lsSW1wb3J0V1NETFRvV29ya2JlbmNoQWN0aW9uSlNQLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RhYWM2OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9Xc2lsSW1wb3J0V1NETFRvV29ya2JlbmNoQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgV3NpbEltcG9ydFdTRExUb1dvcmtiZW5jaEFjdGlvbiBhY3Rpb24gPSBuZXcgV3NpbEltcG9ydFdTRExUb1dvcmtiZW5jaEFjdGlvbihjb250cm9sbGVyKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvYWN0aW9ucy9JbXBvcnRUb1dvcmtiZW5jaEFjdGlvbi5pbmMiICU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9Xc2lsTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbkpTUC5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvYWN0aW9ucy9Xc2lsTGF1bmNoV2ViU2VydmljZVdpemFyZEFjdGlvbkpTUC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4NGM4MzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvV3NpbExhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb25KU1AuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgV3NpbExhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24gYWN0aW9uID0gbmV3IFdzaWxMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uKGNvbnRyb2xsZXIpOwotJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9hY3Rpb25zL0xhdW5jaFdlYlNlcnZpY2VXaXphcmRBY3Rpb24uaW5jIiAlPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvV3NpbFRvZ2dsZU5vZGVBY3Rpb25KU1AuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2FjdGlvbnMvV3NpbFRvZ2dsZU5vZGVBY3Rpb25KU1AuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODJjZGIwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9hY3Rpb25zL1dzaWxUb2dnbGVOb2RlQWN0aW9uSlNQLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5hY3Rpb25zLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0vLyBQcmVwYXJlIHRoZSBhY3Rpb24uCi1Xc2lsVG9nZ2xlTm9kZUFjdGlvbiBhY3Rpb24gPSBuZXcgV3NpbFRvZ2dsZU5vZGVBY3Rpb24oY29udHJvbGxlcik7Ci0KLS8vIExvYWQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb24gZnJvbSB0aGUgc2VydmxldCByZXF1ZXN0LgotYWN0aW9uLnBvcHVsYXRlUHJvcGVydHlUYWJsZShyZXF1ZXN0KTsKLQotLy8gUnVuIHRoZSBhY3Rpb24gYW5kIG9idGFpbiB0aGUgcmV0dXJuIGNvZGUgKGZhaWwvc3VjY2VzcykuCi1ib29sZWFuIGFjdGlvblJlc3VsdCA9IGFjdGlvbi5leGVjdXRlKCk7Ci0KLS8vIERldGVybWluZSBpZiB0aGUgYWN0aW9uIHdhcyBhZGRlZCB0byB0aGUgaGlzdG9yeSBsaXN0LgotYm9vbGVhbiBpc0FkZGVkVG9IaXN0b3J5ID0gYWN0aW9uLmlzQWRkZWRUb0hpc3RvcnkoKTsKLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvYWN0aW9ucy9Ub2dnbGVOb2RlQWN0aW9uLmluYyIgJT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9mb3Jtcy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2Zvcm1zLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2Zvcm1zLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSouamF2YQotKi5jbGFzcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2Zvcm1zL09wZW5XU0lMRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvZm9ybXMvT3BlbldTSUxGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTk5MTUwZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvZm9ybXMvT3BlbldTSUxGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyNyAgIDEyNzQ0MyBqZXNwZXJAc2Vsc2thYmV0Lm9yZyAtIEplc3BlciBTIE1vbGxlcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLkZyYW1lTmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuRm9ybVRvb2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5XU0lMUGVyc3BlY3RpdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkhUTUxVdGlscyIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci1Gb3JtVG9vbCBmb3JtVG9vbCA9IChGb3JtVG9vbCl3c2lsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKS5nZXRTZWxlY3RlZE5vZGUoKS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbCgpOwotJT4KLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1RJVExFX09QRU5fV1NJTCIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NpbC9zY3JpcHRzL3dzaWxQYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvZm9ybXN1Ym1pdC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvZm9ybXV0aWxzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NpbC9hY3Rpb25zL09wZW5XU0lMQWN0aW9uSlNQLmpzcCIpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBvblN1Ym1pdD0icmV0dXJuIGhhbmRsZVN1Ym1pdCh0aGlzKSI+Ci0gIDwlCi0gIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJ3c2lsL2ltYWdlcy9vcGVuX3dzaWxfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgU3RyaW5nIHRpdGxlID0gd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9PUEVOX1dTSUwiKTsKLSAgJT4KLSAgPCVAIGluY2x1ZGUgZmlsZSA9ICIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gIDx0YWJsZT4KLSAgICA8dHI+Ci0gICAgICA8dGQgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgIDwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX09QRU5fV1NJTF9ERVNDIiklPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPiAgICAgICAgCi0gIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTA+Ci0gICAgPHRyPgotICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgIDxsYWJlbCBmb3I9ImlucHV0X3dzaWxfdXJsIj48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiV1NJTF9VUkwiKSU+PC9sYWJlbD4KLSAgICAgICAgPCUKLSAgICAgICAgaWYgKCFmb3JtVG9vbC5pc0lucHV0VmFsaWQoV3NpbEFjdGlvbklucHV0cy5XU0lMX1VSTCkpIHsKLSAgICAgICAgJT4KLSAgICAgICAgICA8JT1IVE1MVXRpbHMucmVkQXN0ZXJpc2soKSU+Ci0gICAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgICAgU3RyaW5nIHdzaWxVUkwgPSAoU3RyaW5nKWZvcm1Ub29sLmdldFByb3BlcnR5KFdzaWxBY3Rpb25JbnB1dHMuV1NJTF9VUkwpOwotICAgICAgICBpZiAod3NpbFVSTCA9PSBudWxsKQotICAgICAgICAgIHdzaWxVUkwgPSAiIjsKLSAgICAgICAgJT4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHI+Ci0gICAgICA8dGQ+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iaW5wdXRfd3NpbF91cmwiIG5hbWU9IjwlPVdzaWxBY3Rpb25JbnB1dHMuV1NJTF9VUkwlPiIgdmFsdWU9IjwlPUhUTUxVdGlscy5jaGFyYWN0ZXJzVG9IVE1MRW50aXRpZXNTdHJpY3Qod3NpbFVSTCklPiIgc2l6ZT0iNTAiIGNsYXNzPSJ0ZXh0ZW50ZXIiPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotICA8JQotICBTdHJpbmcgaW5zcGVjdGlvblR5cGVTdHJpbmcgPSAoU3RyaW5nKWZvcm1Ub29sLmdldFByb3BlcnR5KFdzaWxBY3Rpb25JbnB1dHMuV1NJTF9JTlNQRUNUSU9OX1RZUEUpOwotICBpbnQgaW5zcGVjdGlvblR5cGUgPSBXc2lsQWN0aW9uSW5wdXRzLldTSUxfREVUQUlMUzsKLSAgaWYgKGluc3BlY3Rpb25UeXBlU3RyaW5nICE9IG51bGwpCi0gICAgaW5zcGVjdGlvblR5cGUgPSBJbnRlZ2VyLnBhcnNlSW50KGluc3BlY3Rpb25UeXBlU3RyaW5nKTsKLSAgJT4KLSAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MD4KLSAgICA8dHI+Ci0gICAgICA8dGQgY2xhc3M9ImxhYmVscyIgaGVpZ2h0PTMwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgPGxhYmVsIGZvcj0iaW5zcGVjdGlvbl90eXBlIj48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9DSE9PU0VfV1NJTF9JTlNQRUNUSU9OX1RZUEUiKSU+PC9sYWJlbD4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHI+Ci0gICAgICA8dGQgdmFsaWduPSJib3R0b20iPgotICAgICAgICA8c2VsZWN0IGlkPSJpbnNwZWN0aW9uX3R5cGUiIG5hbWU9IjwlPVdzaWxBY3Rpb25JbnB1dHMuV1NJTF9JTlNQRUNUSU9OX1RZUEUlPiIgY2xhc3M9InNlbGVjdGxpc3QiPgotICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjwlPVdzaWxBY3Rpb25JbnB1dHMuV1NJTF9ERVRBSUxTJT4iIDwlIGlmIChpbnNwZWN0aW9uVHlwZSA9PSBXc2lsQWN0aW9uSW5wdXRzLldTSUxfREVUQUlMUykgeyAlPnNlbGVjdGVkPCUgfSAlPj48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9XU0lMIiklPgotICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjwlPVdzaWxBY3Rpb25JbnB1dHMuV1NETF9TRVJWSUNFUyU+IiA8JSBpZiAoaW5zcGVjdGlvblR5cGUgPT0gV3NpbEFjdGlvbklucHV0cy5XU0RMX1NFUlZJQ0VTKSB7ICU+c2VsZWN0ZWQ8JSB9ICU+PjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1dTRExfU0VSVklDRSIpJT4KLSAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI8JT1Xc2lsQWN0aW9uSW5wdXRzLlVERElfU0VSVklDRVMlPiIgPCUgaWYgKGluc3BlY3Rpb25UeXBlID09IFdzaWxBY3Rpb25JbnB1dHMuVURESV9TRVJWSUNFUykgeyAlPnNlbGVjdGVkPCUgfSAlPj48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9VRERJX1NFUlZJQ0UiKSU+Ci0gICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iPCU9V3NpbEFjdGlvbklucHV0cy5VRERJX0JVU0lORVNTRVMlPiIgPCUgaWYgKGluc3BlY3Rpb25UeXBlID09IFdzaWxBY3Rpb25JbnB1dHMuVURESV9CVVNJTkVTU0VTKSB7ICU+c2VsZWN0ZWQ8JSB9ICU+PjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1VERElfQlVTSU5FU1MiKSU+Ci0gICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iPCU9V3NpbEFjdGlvbklucHV0cy5XU0lMX0xJTktTJT4iIDwlIGlmIChpbnNwZWN0aW9uVHlwZSA9PSBXc2lsQWN0aW9uSW5wdXRzLldTSUxfTElOS1MpIHsgJT5zZWxlY3RlZDwlIH0gJT4+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfV1NJTF9MSU5LUyIpJT4KLSAgICAgICAgPC9zZWxlY3Q+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gIDwvdGFibGU+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL3NpbXBsZUNvbW1vbl90YWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gIDwvZm9ybT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2Zvcm1zL1Byb2Nlc3NXU0lMRnJhbWVzZXRzRm9ybS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvZm9ybXMvUHJvY2Vzc1dTSUxGcmFtZXNldHNGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTMyZTZkYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvZm9ybXMvUHJvY2Vzc1dTSUxGcmFtZXNldHNGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08anNwOnVzZUJlYW4gaWQ9ImZvcm1BY3Rpb24iIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJmb3JtRnJhbWVOYW1lIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiLz4KLTxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KGZvcm1BY3Rpb24udG9TdHJpbmcoKSkpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIHN0eWxlPSJtYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowIj4KLSAgPGlucHV0IG5hbWU9IjwlPUFjdGlvbklucHV0cy5GUkFNRV9OQU1FJT4iIHR5cGU9ImhpZGRlbiIgdmFsdWU9IjwlPWZvcm1GcmFtZU5hbWUlPiI+Ci0gIDxpbnB1dCBuYW1lPSI8JT1Xc2lsQWN0aW9uSW5wdXRzLkZSQU1FU0VUX0NPTFNfUEVSU1BFQ1RJVkVfQ09OVEVOVCU+IiB0eXBlPSJoaWRkZW4iIHZhbHVlPSI8JT13c2lsUGVyc3BlY3RpdmUuZ2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCklPiI+Ci0gIDxpbnB1dCBuYW1lPSI8JT1Xc2lsQWN0aW9uSW5wdXRzLkZSQU1FU0VUX1JPV1NfQUNUSU9OU19DT05UQUlORVIlPiIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iPCU9d3NpbFBlcnNwZWN0aXZlLmdldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoKSU+Ij4KLTwvZm9ybT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9mb3Jtcy9VZGRpQnVzaW5lc3NEZXRhaWxzUGFnZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvZm9ybXMvVWRkaUJ1c2luZXNzRGV0YWlsc1BhZ2UuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYWI4YmM3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9mb3Jtcy9VZGRpQnVzaW5lc3NEZXRhaWxzUGFnZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuQWRkVG9GYXZvcml0ZXNBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLkFkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5SZWZyZXNoQWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuV1NJTFBlcnNwZWN0aXZlIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iYWJzdHJhY3RMYW5ncyIgY2xhc3M9ImphdmEudXRpbC5WZWN0b3IiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImFic3RyYWN0cyIgY2xhc3M9ImphdmEudXRpbC5WZWN0b3IiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gd3NpbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBUb29sTWFuYWdlciBjdXJyZW50VG9vbE1hbmFnZXIgPSBzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCk7Ci0gICAgaW50IHZpZXdJRCA9IHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBTdHJpbmcgaW5xdWlyeUFQSSA9IG51bGw7Ci0gICAgU3RyaW5nIGJ1c2luZXNzS2V5ID0gbnVsbDsKLSAgICBTdHJpbmcgZGlzY292ZXJ5VVJMID0gbnVsbDsKLSAgICBXc2lsVWRkaUJ1c2luZXNzRWxlbWVudCBsaW5rID0gbnVsbDsKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgV3NpbEVsZW1lbnQpIHsKLSAgICAgICAgTGlzdEVsZW1lbnQgbGUgPSAoKFdzaWxFbGVtZW50KXNlbGVjdGVkRWxlbWVudCkuZ2V0QWxsVURESUxpbmtzKCkuZ2V0RWxlbWVudFdpdGhWaWV3SWQodmlld0lEKTsKLSAgICAgICAgbGluayA9IChXc2lsVWRkaUJ1c2luZXNzRWxlbWVudClsZS5nZXRPYmplY3QoKTsKLSAgICAgICAgaWYgKGxpbmsgIT0gbnVsbCkgewotICAgICAgICAgICAgYWJzdHJhY3RzLmFkZEFsbChsaW5rLmdldExpbmtBYnN0cmFjdHMoKSk7Ci0gICAgICAgICAgICBhYnN0cmFjdExhbmdzLmFkZEFsbChsaW5rLmdldExpbmtBYnN0cmFjdExhbmdzKCkpOwotICAgICAgICAgICAgaW5xdWlyeUFQSSA9IGxpbmsuZ2V0VURESUxpbmtJbnF1aXJ5QVBJKCk7Ci0gICAgICAgICAgICBidXNpbmVzc0tleSA9IGxpbmsuZ2V0VURESUxpbmtCdXNpbmVzc0tleSgpOwotICAgICAgICAgICAgZGlzY292ZXJ5VVJMID0gbGluay5nZXRVRERJTGlua0Rpc2NvdmVyeVVSTCgpOwotICAgICAgICB9Ci0gICAgfQotJT4KLTxodG1sPgotPGhlYWQ+Ci0gICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICAgIDx0aXRsZT48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9VRERJX0JVU0lORVNTX0RFVEFJTFMiKSU+PC90aXRsZT4KLSAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLSAgICA8anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvc2NyaXB0cy93c2lsRm9ybVN1Ym1pdC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLSAgICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChBZGRUb0Zhdm9yaXRlc0FjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI+Ci0KLSAgICA8JQotICAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJpbWFnZXMvZGV0YWlsc19oaWdobGlnaHRlZC5naWYiOwotICAgIFN0cmluZyB0aXRsZSA9IHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfVURESV9MSU5LX0RFVEFJTFMiKTsKLSAgICAlPgotICAgIDwlQCBpbmNsdWRlIGZpbGUgPSAiL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotICAgIDwlCi0gICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIFdzaWxFbGVtZW50ICYmIGxpbmsgIT0gbnVsbCkgewotICAgICU+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPUFjdGlvbklucHV0cy5OT0RFSUQlPiIgdmFsdWU9IjwlPXNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSU+Ij4KLSAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLlZJRVdJRCU+IiB2YWx1ZT0iPCU9dmlld0lEJT4iPgotCi0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgICAgICAgPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfSU5RVUlSWV9BUEkiKSU+Ci0gICAgICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICAgICAgICAgICAgPCU9KChpbnF1aXJ5QVBJICE9IG51bGwpID8gaW5xdWlyeUFQSSA6IHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05BIikpJT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8YnI+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgICAgICAgPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQlVTSU5FU1NfS0VZIiklPgotICAgICAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPSgoYnVzaW5lc3NLZXkgIT0gbnVsbCkgPyBidXNpbmVzc0tleSA6IHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05BIikpJT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8YnI+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgICAgICAgPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfRElTQ09WRVJZX1VSTCIpJT4KLSAgICAgICAgICAgICAgICA8L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgICAgICAgICAgICA8JT0oKGRpc2NvdmVyeVVSTCAhPSBudWxsKSA/IGRpc2NvdmVyeVVSTCA6IHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05BIikpJT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvc2NyaXB0cy93c2lsQWJzdHJhY3RUYWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY3VycmVudFRvb2xNYW5hZ2VySGFzaCIgY2xhc3M9ImphdmEudXRpbC5IYXNodGFibGUiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gIGN1cnJlbnRUb29sTWFuYWdlckhhc2gucHV0KEFjdGlvbklucHV0cy5DVVJSRU5UX1RPT0xfTUFOQUdFUixjdXJyZW50VG9vbE1hbmFnZXIpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL290aGVyQWN0aW9ucy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0KLSAgICA8JQotICAgIH0KLSU+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9mb3Jtcy9VZGRpU2VydmljZURldGFpbHNQYWdlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9mb3Jtcy9VZGRpU2VydmljZURldGFpbHNQYWdlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTAxZTM5Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvZm9ybXMvVWRkaVNlcnZpY2VEZXRhaWxzUGFnZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuQWRkVG9GYXZvcml0ZXNBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLkFkZFRvVURESVBlcnNwZWN0aXZlQWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5SZWZyZXNoQWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuV1NJTFBlcnNwZWN0aXZlIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0ibmFtZUxhbmdzIiBjbGFzcz0iamF2YS51dGlsLlZlY3RvciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0ibmFtZXMiIGNsYXNzPSJqYXZhLnV0aWwuVmVjdG9yIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJhYnN0cmFjdExhbmdzIiBjbGFzcz0iamF2YS51dGlsLlZlY3RvciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iYWJzdHJhY3RzIiBjbGFzcz0iamF2YS51dGlsLlZlY3RvciIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIFRvb2xNYW5hZ2VyIGN1cnJlbnRUb29sTWFuYWdlciA9IHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKTsKLSAgICBpbnQgdmlld0lEID0gc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpOwotICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIFN0cmluZyBpbnF1aXJ5QVBJID0gbnVsbDsKLSAgICBTdHJpbmcgc2VydmljZUtleSA9IG51bGw7Ci0gICAgU3RyaW5nIGRpc2NvdmVyeVVSTCA9IG51bGw7Ci0gICAgV3NpbFNlcnZpY2VFbGVtZW50IHNlcnZpY2UgPSBudWxsOwotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBXc2lsRWxlbWVudCkgewotICAgICAgICBMaXN0RWxlbWVudCBsZSA9ICgoV3NpbEVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50KS5nZXRBbGxVRERJU2VydmljZXMoKS5nZXRFbGVtZW50V2l0aFZpZXdJZCh2aWV3SUQpOwotICAgICAgICBzZXJ2aWNlID0gKFdzaWxTZXJ2aWNlRWxlbWVudClsZS5nZXRPYmplY3QoKTsKLSAgICAgICAgaWYgKHNlcnZpY2UgIT0gbnVsbCkgewotICAgICAgICAgICAgbmFtZXMuYWRkQWxsKHNlcnZpY2UuZ2V0U2VydmljZU5hbWVzKCkpOwotICAgICAgICAgICAgbmFtZUxhbmdzLmFkZEFsbChzZXJ2aWNlLmdldFNlcnZpY2VOYW1lTGFuZ3MoKSk7Ci0gICAgICAgICAgICBhYnN0cmFjdHMuYWRkQWxsKHNlcnZpY2UuZ2V0U2VydmljZUFic3RyYWN0cygpKTsKLSAgICAgICAgICAgIGFic3RyYWN0TGFuZ3MuYWRkQWxsKHNlcnZpY2UuZ2V0U2VydmljZUFic3RyYWN0TGFuZ3MoKSk7Ci0gICAgICAgICAgICBpbnF1aXJ5QVBJID0gKChXc2lsVWRkaVNlcnZpY2VFbGVtZW50KXNlcnZpY2UpLmdldFVERElTZXJ2aWNlSW5xdWlyeUFQSSgpOwotICAgICAgICAgICAgc2VydmljZUtleSA9ICgoV3NpbFVkZGlTZXJ2aWNlRWxlbWVudClzZXJ2aWNlKS5nZXRVRERJU2VydmljZUtleSgpOwotICAgICAgICAgICAgZGlzY292ZXJ5VVJMID0gKChXc2lsVWRkaVNlcnZpY2VFbGVtZW50KXNlcnZpY2UpLmdldFVERElTZXJ2aWNlRGlzY292ZXJ5VVJMKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0lPgotPGh0bWw+Ci08aGVhZD4KLSAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gICAgPHRpdGxlPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX1RJVExFX1VERElfU0VSVklDRV9ERVRBSUxTIiklPjwvdGl0bGU+Ci0gICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci0gICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbEZvcm1TdWJtaXQuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gICAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoQWRkVG9GYXZvcml0ZXNBY3Rpb24uZ2V0QmFzZUFjdGlvbkxpbmsoKSkpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iPgotCi0gICAgPCUKLSAgICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAiaW1hZ2VzL2RldGFpbHNfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgICBTdHJpbmcgdGl0bGUgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1dTSUxfU0VSVklDRV9ERVRBSUxTIik7Ci0gICAgJT4KLSAgICA8JUAgaW5jbHVkZSBmaWxlID0gIi9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgICA8JQotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBXc2lsRWxlbWVudCAmJiBzZXJ2aWNlICE9IG51bGwpIHsKLSAgICAlPgotICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuTk9ERUlEJT4iIHZhbHVlPSI8JT1zZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCklPiI+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPUFjdGlvbklucHV0cy5WSUVXSUQlPiIgdmFsdWU9IjwlPXZpZXdJRCU+Ij4KLQotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfSU5RVUlSWV9BUEkiKSU+PC9zdHJvbmc+Ci0gICAgICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICAgICAgICAgICAgPCU9KChpbnF1aXJ5QVBJICE9IG51bGwpID8gaW5xdWlyeUFQSSA6IHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05BIikpJT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8YnI+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9TRVJWSUNFX0tFWSIpJT48L3N0cm9uZz4KLSAgICAgICAgICAgICAgICA8L3RoPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPgotICAgICAgICAgICAgICAgICAgICA8JT0oKHNlcnZpY2VLZXkgIT0gbnVsbCkgPyBzZXJ2aWNlS2V5IDogd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTkEiKSklPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgICAgIDxicj4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0ic2luZ2xlaGVhZGVyY29sb3IiIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiPgotICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0RJU0NPVkVSWV9VUkwiKSU+PC9zdHJvbmc+Ci0gICAgICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj4KLSAgICAgICAgICAgICAgICAgICAgPCU9KChkaXNjb3ZlcnlVUkwgIT0gbnVsbCkgPyBkaXNjb3ZlcnlVUkwgOiB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9OQSIpKSU+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbE5hbWVUYWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0KLSAgICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbEFic3RyYWN0VGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotCi08anNwOnVzZUJlYW4gaWQ9ImN1cnJlbnRUb29sTWFuYWdlckhhc2giIGNsYXNzPSJqYXZhLnV0aWwuSGFzaHRhYmxlIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICBjdXJyZW50VG9vbE1hbmFnZXJIYXNoLnB1dChBY3Rpb25JbnB1dHMuQ1VSUkVOVF9UT09MX01BTkFHRVIsY3VycmVudFRvb2xNYW5hZ2VyKTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9vdGhlckFjdGlvbnMuanNwIiBmbHVzaD0idHJ1ZSIvPgotCi0gICAgPCUKLSAgICB9Ci0lPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvZm9ybXMvV1NJTEltcG9ydFdTSUxUb1dvcmtiZW5jaEZvcm0uanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2Zvcm1zL1dTSUxJbXBvcnRXU0lMVG9Xb3JrYmVuY2hGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmJmNTJkNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvZm9ybXMvV1NJTEltcG9ydFdTSUxUb1dvcmtiZW5jaEZvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDI3ICAgMTI3NDQzIGplc3BlckBzZWxza2FiZXQub3JnIC0gSmVzcGVyIFMgTW9sbGVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi1XU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLU5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gd3NpbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci1Ob2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotV3NpbEVsZW1lbnQgd3NpbEVsZW1lbnQgPSAoV3NpbEVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0lPgotCi08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fVElUTEVfSU1QT1JUX1RPX1dPUktCRU5DSCIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLSAgPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL2Zvcm1zdWJtaXQuanNwIiBmbHVzaD0idHJ1ZSIvPgotICA8anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvZm9ybXV0aWxzLmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgid3NpbC9hY3Rpb25zL1dTSUxJbXBvcnRXU0lMVG9Xb3JrYmVuY2hBY3Rpb25KU1AuanNwIikpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiPgotICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuSU1QT1JUX0ZJTEUlPiIgdmFsdWU9IjwlPUFjdGlvbklucHV0cy5JTVBPUlRfRklMRSU+Ij4KLSAgPCUKLSAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gImltYWdlcy9pbXBvcnRfdG9fd29ya2JlbmNoX2hpZ2hsaWdodGVkLmdpZiI7Ci0gIFN0cmluZyB0aXRsZSA9IHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBVExfSU1QT1JUX1dTSUxfVE9fV09SS0JFTkNIIik7Ci0gICU+Ci0gIDwlQCBpbmNsdWRlIGZpbGUgPSAiL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotICA8dGFibGU+Ci0gICAgPHRyPgotICAgICAgPHRkPgotICAgICAgICA8JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9JTVBPUlRfV1NJTF9UT19XT1JLQkVOQ0hfREVTQyIpJT4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLSAgPHRhYmxlPgotICAgIDx0cj4KLSAgICAgIDx0ZCBjbGFzcz0ibGFiZWxzIiBoZWlnaHQ9NDAgdmFsaWduPSJjZW50ZXIiPgotICAgICAgICA8bGFiZWwgZm9yPSJzZWxlY3Rfd29ya2JlbmNoX3Byb2plY3RfbmFtZSI+PCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJXT1JLQkVOQ0hfUFJPSkVDVF9OQU1FIiklPjwvbGFiZWw+Ci0gICAgICA8L3RkPgotICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiIGhlaWdodD00MCB2YWxpZ249ImNlbnRlciIgbm93cmFwPgotICAgICAgICA8JQotICAgICAgICBJV29ya3NwYWNlUm9vdCBpV29ya3NwYWNlUm9vdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7Ci0gICAgICAgIElQcm9qZWN0W10gcHJvamVjdHMgPSBpV29ya3NwYWNlUm9vdC5nZXRQcm9qZWN0cygpOwotICAgICAgICAlPgotICAgICAgICA8c2VsZWN0IGlkPSJzZWxlY3Rfd29ya2JlbmNoX3Byb2plY3RfbmFtZSIgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLldPUktCRU5DSF9QUk9KRUNUX05BTUUlPiIgY2xhc3M9InNlbGVjdGxpc3QiPgotICAgICAgICA8JQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHByb2plY3RzLmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKCFwcm9qZWN0c1tpXS5pc09wZW4oKSkKLSAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBTdHJpbmcgcHJvamVjdE5hbWUgPSBwcm9qZWN0c1tpXS5nZXROYW1lKCk7Ci0gICAgICAgICU+Ci0gICAgICAgIDxvcHRpb24gdmFsdWU9IjwlPXByb2plY3ROYW1lJT4iPjwlPXByb2plY3ROYW1lJT4KLSAgICAgICAgPCUKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQotICAgICAgICB9Ci0gICAgICAgICU+Ci0gICAgICAgIDwvc2VsZWN0PgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wPgotICAgIDx0cj4KLSAgICAgIDx0ZD4KLSAgICAgICAgPGxhYmVsIGZvcj0iaW5wdXRfaW1wb3J0ZWRfd3NpbF9maWxlX25hbWUiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiV1NJTF9GSUxFX05BTUUiKSU+PC9sYWJlbD4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHI+Ci0gICAgICA8dGQgaGVpZ2h0PTEwIHZhbGlnbj0iYm90dG9tIiB3aWR0aD0iNjAlIj4KLTwlCi0gU3RyaW5nIHdzaWxGaWxlTmFtZSA9ICJ0ZW1wLndzaWwiOwotIFN0cmluZyB3c2lsVVJMID0gd3NpbEVsZW1lbnQuZ2V0V3NpbFVybCgpOwotIGlmICh3c2lsVVJMLmVuZHNXaXRoKCIud3NpbCIpKQotIHsKLSAgIGludCBsYXN0U2VwYXJhdG9yUG9zID0gTWF0aC5tYXgod3NpbFVSTC5sYXN0SW5kZXhPZigiLyIpLCB3c2lsVVJMLmxhc3RJbmRleE9mKCJcXCIpKTsKLSAgIGlmIChsYXN0U2VwYXJhdG9yUG9zID4gMCkKLSAgICAgd3NpbEZpbGVOYW1lID0gd3NpbFVSTC5zdWJzdHJpbmcobGFzdFNlcGFyYXRvclBvcysxLCB3c2lsVVJMLmxlbmd0aCgpKTsKLSB9Ci0lPiAgIAotICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImlucHV0X2ltcG9ydGVkX3dzaWxfZmlsZV9uYW1lIiBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuSU1QT1JURURfRklMRV9OQU1FJT4iIHZhbHVlPSI8JT1IVE1MVXRpbHMuY2hhcmFjdGVyc1RvSFRNTEVudGl0aWVzU3RyaWN0KHdzaWxGaWxlTmFtZSklPiIgc2l6ZT01MCBjbGFzcz0idGV4dGVudGVyIj4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgPC90YWJsZT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvc2ltcGxlQ29tbW9uX3RhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4gICAgCi0gIDwvZm9ybT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2Zvcm1zL1dzZGxTZXJ2aWNlRGV0YWlsc1BhZ2UuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2Zvcm1zL1dzZGxTZXJ2aWNlRGV0YWlsc1BhZ2UuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTdlNmQ0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9mb3Jtcy9Xc2RsU2VydmljZURldGFpbHNQYWdlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE0OCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uZGF0YW1vZGVsLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLldTSUxQZXJzcGVjdGl2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5BZGRUb0Zhdm9yaXRlc0FjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUud3NpbC5RTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC5WZWN0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuRW51bWVyYXRpb24iICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJuYW1lTGFuZ3MiIGNsYXNzPSJqYXZhLnV0aWwuVmVjdG9yIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJuYW1lcyIgY2xhc3M9ImphdmEudXRpbC5WZWN0b3IiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImFic3RyYWN0TGFuZ3MiIGNsYXNzPSJqYXZhLnV0aWwuVmVjdG9yIiBzY29wZT0icmVxdWVzdCIvPgotPGpzcDp1c2VCZWFuIGlkPSJhYnN0cmFjdHMiIGNsYXNzPSJqYXZhLnV0aWwuVmVjdG9yIiBzY29wZT0icmVxdWVzdCIvPgotPCUKLSAgICBTdHJpbmcgYmluZGluZ1RhYmxlID0gImJpbmRpbmdUYWJsZSI7Ci0gICAgU3RyaW5nIHhiaW5kaW5nVGFibGUgPSAieGJpbmRpbmdUYWJsZSI7Ci0KLSAgICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID1jb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gd3NpbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBUb29sTWFuYWdlciBjdXJyZW50VG9vbE1hbmFnZXIgPSBzZWxlY3RlZE5vZGUuZ2V0Q3VycmVudFRvb2xNYW5hZ2VyKCk7Ci0gICAgaW50IHZpZXdJRCA9IHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSAgICBXc2lsU2VydmljZUVsZW1lbnQgc2VydmljZSA9IG51bGw7Ci0gICAgU3RyaW5nIHdzZGxVUkwgPSBudWxsOwotICAgIFZlY3RvciB3c2RsQmluZGluZ3MgPSBuZXcgVmVjdG9yKCk7Ci0gICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIFdzaWxFbGVtZW50KSB7Ci0gICAgICAgIExpc3RFbGVtZW50IGxlID0gKChXc2lsRWxlbWVudClzZWxlY3RlZEVsZW1lbnQpLmdldEFsbFdTRExTZXJ2aWNlcygpLmdldEVsZW1lbnRXaXRoVmlld0lkKHZpZXdJRCk7Ci0gICAgICAgIHNlcnZpY2UgPSAoV3NpbFNlcnZpY2VFbGVtZW50KWxlLmdldE9iamVjdCgpOwotICAgICAgICBpZiAoc2VydmljZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBuYW1lcy5hZGRBbGwoc2VydmljZS5nZXRTZXJ2aWNlTmFtZXMoKSk7Ci0gICAgICAgICAgICBuYW1lTGFuZ3MuYWRkQWxsKHNlcnZpY2UuZ2V0U2VydmljZU5hbWVMYW5ncygpKTsKLSAgICAgICAgICAgIGFic3RyYWN0cy5hZGRBbGwoc2VydmljZS5nZXRTZXJ2aWNlQWJzdHJhY3RzKCkpOwotICAgICAgICAgICAgYWJzdHJhY3RMYW5ncy5hZGRBbGwoc2VydmljZS5nZXRTZXJ2aWNlQWJzdHJhY3RMYW5ncygpKTsKLSAgICAgICAgICAgIHdzZGxVUkwgPSAoKFdzaWxXc2RsU2VydmljZUVsZW1lbnQpc2VydmljZSkuZ2V0V1NETFNlcnZpY2VVUkwoKTsKLSAgICAgICAgICAgIHdzZGxCaW5kaW5ncyA9ICgoV3NpbFdzZGxTZXJ2aWNlRWxlbWVudClzZXJ2aWNlKS5nZXRXU0RMQmluZGluZygpOwotICAgICAgICB9Ci0gICAgfQotJT4KLTxodG1sPgotPGhlYWQ+Ci0gICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICAgIDx0aXRsZT48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9XU0RMX1NFUlZJQ0VfREVUQUlMUyIpJT48L3RpdGxlPgotICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvd3NpbC9zY3JpcHRzL3dzaWxUYWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbEZvcm1TdWJtaXQuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gICAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoQWRkVG9GYXZvcml0ZXNBY3Rpb24uZ2V0QmFzZUFjdGlvbkxpbmsoKSkpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iPgotCi0gICAgPCUKLSAgICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAiaW1hZ2VzL2RldGFpbHNfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgICBTdHJpbmcgdGl0bGUgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1dTSUxfU0VSVklDRV9ERVRBSUxTIik7Ci0gICAgJT4KLSAgICA8JUAgaW5jbHVkZSBmaWxlID0gIi9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgICA8JQotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBXc2lsRWxlbWVudCAmJiBzZXJ2aWNlICE9IG51bGwpIHsKLSAgICAlPgotICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuTk9ERUlEJT4iIHZhbHVlPSI8JT1zZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCklPiI+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPUFjdGlvbklucHV0cy5WSUVXSUQlPiIgdmFsdWU9IjwlPXZpZXdJRCU+Ij4KLQotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVVJMIiklPjwvc3Ryb25nPgotICAgICAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPXdzZGxVUkwlPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvd3NpbC9zY3JpcHRzL3dzaWxOYW1lVGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotCi0gICAgICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvd3NpbC9zY3JpcHRzL3dzaWxBYnN0cmFjdFRhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLQotICAgICAgICA8dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPWJpbmRpbmdUYWJsZSU+JywnPCU9eGJpbmRpbmdUYWJsZSU+JykiPjxpbWcgbmFtZT0iPCU9eGJpbmRpbmdUYWJsZSU+IiBzcmM9Ii93c2V4cGxvcmVyL2ltYWdlcy90d2lzdGNsb3NlZC5naWYiIGNsYXNzPSJ0d2lzdCI+PC9hPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9XU0RMX0JJTkRJTkdTIiklPjwvc3Ryb25nPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIHZhbGlnbj0idG9wIiBoZWlnaHQ9MTA+PGltZyBzcmM9Ii93c2V4cGxvcmVyL2ltYWdlcy9rZXlsaW5lLmdpZiIgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiPjwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgICAgIDxkaXYgaWQ9IjwlPWJpbmRpbmdUYWJsZSU+Ij4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05BTUVTUEFDRV9VUkkiKSU+PC90aD4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9MT0NBTF9OQU1FIiklPjwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPCUKLSAgICAgICAgICAgIEVudW1lcmF0aW9uIGUgPSB3c2RsQmluZGluZ3MuZWxlbWVudHMoKTsKLSAgICAgICAgICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgUU5hbWUgcW5hbWUgPSAoUU5hbWUpZS5uZXh0RWxlbWVudCgpOwotICAgICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIiBub3dyYXA+PCU9cW5hbWUuZ2V0TmFtZXNwYWNlVVJJKCklPjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyIgbm93cmFwPjwlPXFuYW1lLmdldExvY2FsTmFtZSgpJT48L3RkPgotICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgIDwlCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAlPgotICAgICAgICA8L3RhYmxlPgotICAgICAgICA8L2Rpdj4KLSAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICAgICAgICB0d2lzdEluaXQoJzwlPWJpbmRpbmdUYWJsZSU+JywnPCU9eGJpbmRpbmdUYWJsZSU+Jyk7Ci0gICAgICAgIDwvc2NyaXB0PgotCi08anNwOnVzZUJlYW4gaWQ9ImN1cnJlbnRUb29sTWFuYWdlckhhc2giIGNsYXNzPSJqYXZhLnV0aWwuSGFzaHRhYmxlIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICBjdXJyZW50VG9vbE1hbmFnZXJIYXNoLnB1dChBY3Rpb25JbnB1dHMuQ1VSUkVOVF9UT09MX01BTkFHRVIsY3VycmVudFRvb2xNYW5hZ2VyKTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9vdGhlckFjdGlvbnMuanNwIiBmbHVzaD0idHJ1ZSIvPgotCi0gICAgICAgIDwlCi0gICAgfQotJT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2Zvcm1zL1dzaWxEZXRhaWxzUGFnZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvZm9ybXMvV3NpbERldGFpbHNQYWdlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M3MDA5Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvZm9ybXMvV3NpbERldGFpbHNQYWdlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuVHJlZUVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLldTSUxQZXJzcGVjdGl2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC5Xc2lsRWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuQWRkVG9GYXZvcml0ZXNBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlJlZnJlc2hBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuRW51bWVyYXRpb24iICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJhYnN0cmFjdExhbmdzIiBjbGFzcz0iamF2YS51dGlsLlZlY3RvciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iYWJzdHJhY3RzIiBjbGFzcz0iamF2YS51dGlsLlZlY3RvciIgc2NvcGU9InJlcXVlc3QiLz4KLTwlCi0gICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9Y29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHdzaWxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgVG9vbE1hbmFnZXIgY3VycmVudFRvb2xNYW5hZ2VyID0gc2VsZWN0ZWROb2RlLmdldEN1cnJlbnRUb29sTWFuYWdlcigpOwotICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIFdzaWxFbGVtZW50IHdzaWxFbGVtZW50ID0gbnVsbDsKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgV3NpbEVsZW1lbnQpIHsKLSAgICAgICAgd3NpbEVsZW1lbnQgPSAoV3NpbEVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50OwotICAgICAgICBhYnN0cmFjdHMuYWRkQWxsKHdzaWxFbGVtZW50LmdldFdTSUxBYnN0cmFjdHMoKSk7Ci0gICAgICAgIGFic3RyYWN0TGFuZ3MuYWRkQWxsKHdzaWxFbGVtZW50LmdldFdTSUxBYnN0cmFjdExhbmdzKCkpOwotICAgIH0KLSU+Ci08aHRtbD4KLTxoZWFkPgotICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgICA8dGl0bGU+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fVElUTEVfV1NJTF9ERVRBSUxTIiklPjwvdGl0bGU+Ci0gICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci0gICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbEZvcm1TdWJtaXQuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gICAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoQWRkVG9GYXZvcml0ZXNBY3Rpb24uZ2V0QmFzZUFjdGlvbkxpbmsoKSkpJT4iIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iPgotCi0gICAgPCUKLSAgICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAiaW1hZ2VzL2RldGFpbHNfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgICBTdHJpbmcgdGl0bGUgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1dTSUxfREVUQUlMUyIpOwotICAgICU+Ci0gICAgPCVAIGluY2x1ZGUgZmlsZSA9ICIvZm9ybXMvZm9ybWhlYWRlci5pbmMiICU+Ci0gICAgPCUKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgV3NpbEVsZW1lbnQpIHsKLSAgICAlPgotICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuTk9ERUlEJT4iIHZhbHVlPSI8JT1zZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCklPiI+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPUFjdGlvbklucHV0cy5WSUVXSUQlPiIgdmFsdWU9IjwlPUFjdGlvbklucHV0cy5WSUVXSURfREVGQVVMVCU+Ij4KLQotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJzaW5nbGVoZWFkZXJjb2xvciIgaGVpZ2h0PTIwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCI+Ci0gICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVVJMIiklPjwvc3Ryb25nPgotICAgICAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPXdzaWxFbGVtZW50LmdldFdzaWxVcmwoKSU+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICAgICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbEFic3RyYWN0VGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotCi08anNwOnVzZUJlYW4gaWQ9ImN1cnJlbnRUb29sTWFuYWdlckhhc2giIGNsYXNzPSJqYXZhLnV0aWwuSGFzaHRhYmxlIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICBjdXJyZW50VG9vbE1hbmFnZXJIYXNoLnB1dChBY3Rpb25JbnB1dHMuQ1VSUkVOVF9UT09MX01BTkFHRVIsY3VycmVudFRvb2xNYW5hZ2VyKTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9vdGhlckFjdGlvbnMuanNwIiBmbHVzaD0idHJ1ZSIvPgotCi0gICAgPCUKLSAgICB9Ci0gICAgJT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2Zvcm1zL1dzaWxJbXBvcnRXU0RMVG9Xb3JrYmVuY2hGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9mb3Jtcy9Xc2lsSW1wb3J0V1NETFRvV29ya2JlbmNoRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlYWZmN2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2Zvcm1zL1dzaWxJbXBvcnRXU0RMVG9Xb3JrYmVuY2hGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiIgJT4KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0gIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gd3NpbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gIFRvb2wgc2VsZWN0ZWRUb29sID0gc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sKCk7Ci0lPgotPGpzcDp1c2VCZWFuIGlkPSJmb3JtUHJvcGVydGllcyIgY2xhc3M9ImphdmEudXRpbC5IYXNodGFibGUiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gIGlmIChzZWxlY3RlZFRvb2wgaW5zdGFuY2VvZiBMaXN0V1NETFNlcnZpY2VzVG9vbCkKLSAgewotICAgIGludCB2aWV3SWQgPSBzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCk7Ci0gICAgV3NpbEVsZW1lbnQgd3NpbEVsZW1lbnQgPSAoV3NpbEVsZW1lbnQpc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0gICAgTGlzdEVsZW1lbnQgbGUgPSB3c2lsRWxlbWVudC5nZXRBbGxXU0RMU2VydmljZXMoKS5nZXRFbGVtZW50V2l0aFZpZXdJZCh2aWV3SWQpOwotICAgIFdzaWxXc2RsU2VydmljZUVsZW1lbnQgd3NpbFdzZGxTZXJ2aWNlRWxlbWVudCA9IChXc2lsV3NkbFNlcnZpY2VFbGVtZW50KWxlLmdldE9iamVjdCgpOwotICAgIGZvcm1Qcm9wZXJ0aWVzLnB1dCgid3NkbFVSTCIsd3NpbFdzZGxTZXJ2aWNlRWxlbWVudC5nZXRXU0RMU2VydmljZVVSTCgpKTsKLSAgfQotICBmb3JtUHJvcGVydGllcy5wdXQoImZvcm1BY3Rpb25MaW5rIiwid3NpbC9hY3Rpb25zL1dzaWxJbXBvcnRXU0RMVG9Xb3JrYmVuY2hBY3Rpb25KU1AuanNwIik7Ci0lPiAgIAotPC9qc3A6dXNlQmVhbj4KLTwlCi0gIGlmIChzZWxlY3RlZFRvb2wgaW5zdGFuY2VvZiBMaXN0V1NETFNlcnZpY2VzVG9vbCkKLSAgewotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvSW1wb3J0V1NETEFuZFdTSUxUb1dvcmtiZW5jaEZvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgotPCUKLSAgfQotICBlbHNlIGlmIChzZWxlY3RlZFRvb2wgaW5zdGFuY2VvZiBMaXN0VURESVNlcnZpY2VzVG9vbCkKLSAgewotJT4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvZm9ybXMvSW1wb3J0VG9Xb3JrYmVuY2hGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KLTwlCi0gIH0KLSU+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvZm9ybXMvV3NpbExhdW5jaFdlYlNlcnZpY2VXaXphcmRGb3JtLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9mb3Jtcy9Xc2lsTGF1bmNoV2ViU2VydmljZVdpemFyZEZvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTkxOTVlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9mb3Jtcy9Xc2lsTGF1bmNoV2ViU2VydmljZVdpemFyZEZvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImZvcm1BY3Rpb25MaW5rIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgIGZvcm1BY3Rpb25MaW5rLmFwcGVuZCgid3NpbC9hY3Rpb25zL1dzaWxMYXVuY2hXZWJTZXJ2aWNlV2l6YXJkQWN0aW9uSlNQLmpzcCIpOwotJT4KLTwvanNwOnVzZUJlYW4+Ci08anNwOmluY2x1ZGUgcGFnZT0iL2Zvcm1zL0xhdW5jaFdlYlNlcnZpY2VXaXphcmRGb3JtLmpzcCIgZmx1c2g9InRydWUiLz4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9mb3Jtcy9Xc2lsTGlua0RldGFpbHNQYWdlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9mb3Jtcy9Xc2lsTGlua0RldGFpbHNQYWdlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTBjMWYzZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvZm9ybXMvV3NpbExpbmtEZXRhaWxzUGFnZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTxqc3A6dXNlQmVhbiBpZD0iYWJzdHJhY3RMYW5ncyIgY2xhc3M9ImphdmEudXRpbC5WZWN0b3IiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9ImFic3RyYWN0cyIgY2xhc3M9ImphdmEudXRpbC5WZWN0b3IiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08JQotICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPWNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIFRvb2xNYW5hZ2VyIGN1cnJlbnRUb29sTWFuYWdlciA9IHNlbGVjdGVkTm9kZS5nZXRDdXJyZW50VG9vbE1hbmFnZXIoKTsKLSAgICBpbnQgdmlld0lEID0gc2VsZWN0ZWROb2RlLmdldFZpZXdJZCgpOwotICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotICAgIFdzaWxXc2lsTGlua0VsZW1lbnQgbGluayA9IG51bGw7Ci0gICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIFdzaWxFbGVtZW50KSB7Ci0gICAgICAgIExpc3RFbGVtZW50IGxlID0gKChXc2lsRWxlbWVudClzZWxlY3RlZEVsZW1lbnQpLmdldEFsbFdTSUxMaW5rcygpLmdldEVsZW1lbnRXaXRoVmlld0lkKHZpZXdJRCk7Ci0gICAgICAgIGxpbmsgPSAoV3NpbFdzaWxMaW5rRWxlbWVudClsZS5nZXRPYmplY3QoKTsKLSAgICAgICAgaWYgKGxpbmsgIT0gbnVsbCkgewotICAgICAgICAgICAgYWJzdHJhY3RMYW5ncy5hZGRBbGwobGluay5nZXRMaW5rQWJzdHJhY3RMYW5ncygpKTsKLSAgICAgICAgICAgIGFic3RyYWN0cy5hZGRBbGwobGluay5nZXRMaW5rQWJzdHJhY3RzKCkpOwotICAgICAgICB9Ci0gICAgfQotJT4KLTxodG1sPgotPGhlYWQ+Ci0gICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICAgIDx0aXRsZT48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9USVRMRV9XU0lMX0xJTktfREVUQUlMUyIpJT48L3RpdGxlPgotICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gICAgPCUKLSAgICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAiaW1hZ2VzL2RldGFpbHNfaGlnaGxpZ2h0ZWQuZ2lmIjsKLSAgICBTdHJpbmcgdGl0bGUgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiQUxUX1dTSUxfTElOS19ERVRBSUxTIik7Ci0gICAgJT4KLSAgICA8JUAgaW5jbHVkZSBmaWxlID0gIi9mb3Jtcy9mb3JtaGVhZGVyLmluYyIgJT4KLSAgICA8JQotICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBXc2lsRWxlbWVudCAmJiBsaW5rICE9IG51bGwpIHsKLSAgICAlPgotCi0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgY2xhc3M9InRhYmxlYm9yZGVyIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9InNpbmdsZWhlYWRlcmNvbG9yIiBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0Ij4KLSAgICAgICAgICAgICAgICAgICAgPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVVJMIiklPgotICAgICAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyI+Ci0gICAgICAgICAgICAgICAgICAgIDwlPWxpbmsuZ2V0V1NJTExpbmtMb2NhdGlvbigpJT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvc2NyaXB0cy93c2lsQWJzdHJhY3RUYWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08anNwOnVzZUJlYW4gaWQ9ImN1cnJlbnRUb29sTWFuYWdlckhhc2giIGNsYXNzPSJqYXZhLnV0aWwuSGFzaHRhYmxlIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICBjdXJyZW50VG9vbE1hbmFnZXJIYXNoLnB1dChBY3Rpb25JbnB1dHMuQ1VSUkVOVF9UT09MX01BTkFHRVIsY3VycmVudFRvb2xNYW5hZ2VyKTsKLSU+Ci08L2pzcDp1c2VCZWFuPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9mb3Jtcy9vdGhlckFjdGlvbnMuanNwIiBmbHVzaD0idHJ1ZSIvPiAgICAgICAgCi0KLSAgICA8JQotICAgIH0KLSAgICAlPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzhmZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvYWRkX3RvX1VERElfcGVyc3BlY3RpdmVfZW5hYmxlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzL2FkZF90b19VRERJX3BlcnNwZWN0aXZlX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjVkMTlhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvYWRkX3RvX1VERElfcGVyc3BlY3RpdmVfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzL2FkZF90b19VRERJX3BlcnNwZWN0aXZlX2hpZ2hsaWdodGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvYWRkX3RvX1VERElfcGVyc3BlY3RpdmVfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWEzZGRjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvYWRkX3RvX1VERElfcGVyc3BlY3RpdmVfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy9saXN0X1VERElfc2VydmljZV9lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvbGlzdF9VRERJX3NlcnZpY2VfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzNTFkYWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy9saXN0X1VERElfc2VydmljZV9lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvbGlzdF9VRERJX3NlcnZpY2VfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy9saXN0X1VERElfc2VydmljZV9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzZTEzMzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy9saXN0X1VERElfc2VydmljZV9oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzL2xpc3RfV1NETF9zZXJ2aWNlX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy9saXN0X1dTRExfc2VydmljZV9lbmFibGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRjMDI4NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzL2xpc3RfV1NETF9zZXJ2aWNlX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy9saXN0X1dTRExfc2VydmljZV9oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzL2xpc3RfV1NETF9zZXJ2aWNlX2hpZ2hsaWdodGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI4YzhlYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzL2xpc3RfV1NETF9zZXJ2aWNlX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvbGlzdF9XU0lMX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy9saXN0X1dTSUxfZW5hYmxlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmYTA5ODQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy9saXN0X1dTSUxfZW5hYmxlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzL2xpc3RfV1NJTF9oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzL2xpc3RfV1NJTF9oaWdobGlnaHRlZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzNGJiZTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy9saXN0X1dTSUxfaGlnaGxpZ2h0ZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy9saXN0X2J1c2luZXNzX2VuYWJsZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy9saXN0X2J1c2luZXNzX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDFlMzdhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvbGlzdF9idXNpbmVzc19lbmFibGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvbGlzdF9idXNpbmVzc19oaWdobGlnaHRlZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzL2xpc3RfYnVzaW5lc3NfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTFiOTc1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvbGlzdF9idXNpbmVzc19oaWdobGlnaHRlZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzL29wZW5fd3NpbF9lbmFibGVkLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvb3Blbl93c2lsX2VuYWJsZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTljYzZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvb3Blbl93c2lsX2VuYWJsZWQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy9vcGVuX3dzaWxfaGlnaGxpZ2h0ZWQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL2ltYWdlcy9vcGVuX3dzaWxfaGlnaGxpZ2h0ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjE3NzVmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvb3Blbl93c2lsX2hpZ2hsaWdodGVkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvd3NpbF9ub2RlLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9pbWFnZXMvd3NpbF9ub2RlLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2M1OTE2Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvaW1hZ2VzL3dzaWxfbm9kZS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvc2NyaXB0cy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3NjcmlwdHMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczOGZmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvc2NyaXB0cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9zY3JpcHRzL3dzaWxBYnN0cmFjdFRhYmxlLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9zY3JpcHRzL3dzaWxBYnN0cmFjdFRhYmxlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA4MzIzMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvc2NyaXB0cy93c2lsQWJzdHJhY3RUYWJsZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS5XU0lMUGVyc3BlY3RpdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5IVE1MVXRpbHMiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDp1c2VCZWFuIGlkPSJhYnN0cmFjdExhbmdzIiBjbGFzcz0iamF2YS51dGlsLlZlY3RvciIgc2NvcGU9InJlcXVlc3QiLz4KLTxqc3A6dXNlQmVhbiBpZD0iYWJzdHJhY3RzIiBjbGFzcz0iamF2YS51dGlsLlZlY3RvciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbFRhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLQotPCUKLVN0cmluZyBhYnN0cmFjdFRhYmxlID0gImFic3RyYWN0VGFibGUiOwotU3RyaW5nIHhhYnN0cmFjdFRhYmxlID0gInhhYnN0cmFjdFRhYmxlIjsKLVN0cmluZyBzaG93QWxsQWJzdHJhY3RJRCA9ICJzaG93QWxsQWJzdHJhY3RJRCI7Ci1XU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID1jb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotJT4KLQotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgZnVuY3Rpb24gc2hvd0Fic3RyYWN0KHRhYmxlQ29udGFpbmVySUQpIHsKLSAgICAgICAgdmFyIHRhYmxlID0gZ2V0VGFibGUodGFibGVDb250YWluZXJJRCk7Ci0gICAgICAgIHZhciB0YWJsZUJvZHkgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVEJPRFkiKS5pdGVtKDApOwotICAgICAgICB2YXIgaGlkZGVuSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnPCU9c2hvd0FsbEFic3RyYWN0SUQlPicpOwotICAgICAgICA8JQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFic3RyYWN0cy5zaXplKCk7IGkrKykgewotICAgICAgICAlPgotICAgICAgICAgICBhZGRSb3dUb0Fic3RyYWN0VGFibGUodGFibGVCb2R5LAotICAgICAgICAgICAgICAgIjwlPUhUTUxVdGlscy5KU01hbmdsZSgoU3RyaW5nKWFic3RyYWN0TGFuZ3MuZWxlbWVudEF0KGkpKSU+IiwKLSAgICAgICAgICAgICAgICI8JT1IVE1MVXRpbHMuSlNNYW5nbGUoKFN0cmluZylhYnN0cmFjdHMuZWxlbWVudEF0KGkpKSU+Iik7Ci0gICAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgICAgJT4KLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBhZGRSb3dUb0Fic3RyYWN0VGFibGUodGFibGVCb2R5LCBsYW5nLCBhYnN0KSB7Ci0gICAgICAgIHZhciBuZXdSb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpOwotICAgICAgICBhZGRLZXlWYWx1ZVRvUm93KG5ld1JvdywgbGFuZywgYWJzdCk7Ci0gICAgICAgIHRhYmxlQm9keS5hcHBlbmRDaGlsZChuZXdSb3cpOwotICAgIH0KLTwvc2NyaXB0PgotCi08dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotICAgIDx0cj4KLSAgICAgICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCB3aWR0aD0xMT4KLSAgICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPWFic3RyYWN0VGFibGUlPicsJzwlPXhhYnN0cmFjdFRhYmxlJT4nKSI+PGltZyBuYW1lPSI8JT14YWJzdHJhY3RUYWJsZSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0Y2xvc2VkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX0NMT1NFRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPgotICAgICAgICA8L3RkPgotICAgICAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgICAgPHN0cm9uZz48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9BQlNUUkFDVCIpJT48L3N0cm9uZz4KLSAgICAgICAgPC90ZD4KLSAgICA8L3RyPgotPC90YWJsZT4KLQotPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgICA8dHI+Ci0gICAgICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PTEwPjxpbWcgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9rZXlsaW5lLmdpZiIpKSU+IiBoZWlnaHQ9MiB3aWR0aD0iMTAwJSI+PC90ZD4KLSAgICA8L3RyPgotPC90YWJsZT4KLQotPGRpdiBpZD0iPCU9YWJzdHJhY3RUYWJsZSU+Ij4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0xBTkdVQUdFIiklPjwvdGg+Ci0gICAgICAgICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIiB3aWR0aD0iMTAwJSI+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQUJTVFJBQ1QiKSU+PC90aD4KLSAgICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotPC9kaXY+Ci0KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgIHNob3dBYnN0cmFjdCgnPCU9YWJzdHJhY3RUYWJsZSU+Jyk7Ci0gICAgdHdpc3RJbml0KCc8JT1hYnN0cmFjdFRhYmxlJT4nLCc8JT14YWJzdHJhY3RUYWJsZSU+Jyk7Ci08L3NjcmlwdD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9zY3JpcHRzL3dzaWxGb3JtU3VibWl0LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9zY3JpcHRzL3dzaWxGb3JtU3VibWl0LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWIyNWYwMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvc2NyaXB0cy93c2lsRm9ybVN1Ym1pdC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii9zY3JpcHRzL2Zvcm1zdWJtaXQuanNwIiBmbHVzaD0idHJ1ZSIvPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbFRhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgIGZ1bmN0aW9uIGlzU29tZXRoaW5nU2VsZWN0ZWQodGFibGVDb250YWluZXJJZCkgewotICAgICAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICAgICAgZm9yICh2YXIgaT1udW1iZXJPZkhlYWRlclJvd3M7IGk8dGFibGUucm93cy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgdmFyIHJvd0NoZWNrYm94Q2VsbCA9IHRhYmxlLnJvd3NbaV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIikuaXRlbSgwKTsKLSAgICAgICAgICAgIHZhciByb3dDaGVja2JveCA9IHJvd0NoZWNrYm94Q2VsbC5jaGlsZE5vZGVzWzBdOwotICAgICAgICAgICAgaWYgKHJvd0NoZWNrYm94LmNoZWNrZWQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgYWxlcnQoIjwlPWNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCkuZ2V0TWVzc2FnZSgiTVNHX0VSUk9SX05PVEhJTkdfU0VMRUNURUQiKSU+Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBzZXRGb3JtTG9jYXRpb25BbmRTdWJtaXQodGFibGVDb250YWluZXJJZCwgZm9ybSwgbG9jYXRpb24pIHsKLSAgICAgICAgaWYgKGlzU29tZXRoaW5nU2VsZWN0ZWQodGFibGVDb250YWluZXJJZCkpCi0gICAgICAgICAgICBzZXRMb2NhdGlvbkFuZFN1Ym1pdChmb3JtLCBsb2NhdGlvbik7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gc2V0TG9jYXRpb25BbmRTdWJtaXQoZm9ybSwgbG9jYXRpb24pIHsKLSAgICAgICAgaWYgKGhhbmRsZVN1Ym1pdChmb3JtKSkKLSAgICAgICAgewotICAgICAgICAgIGZvcm0uYWN0aW9uID0gbG9jYXRpb247Ci0gICAgICAgICAgZm9ybS5zdWJtaXQoKTsKLSAgICAgICAgfQotICAgIH0KLTwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3NjcmlwdHMvd3NpbE5hbWVUYWJsZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvc2NyaXB0cy93c2lsTmFtZVRhYmxlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTYyODg3ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvc2NyaXB0cy93c2lsTmFtZVRhYmxlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLldTSUxQZXJzcGVjdGl2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkhUTUxVdGlscyIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOnVzZUJlYW4gaWQ9Im5hbWVMYW5ncyIgY2xhc3M9ImphdmEudXRpbC5WZWN0b3IiIHNjb3BlPSJyZXF1ZXN0Ii8+Ci08anNwOnVzZUJlYW4gaWQ9Im5hbWVzIiBjbGFzcz0iamF2YS51dGlsLlZlY3RvciIgc2NvcGU9InJlcXVlc3QiLz4KLQotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbFRhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLQotPCUKLVN0cmluZyBuYW1lVGFibGUgPSAibmFtZVRhYmxlIjsKLVN0cmluZyB4bmFtZVRhYmxlID0gInhuYW1lVGFibGUiOwotU3RyaW5nIHNob3dBbGxOYW1lSUQgPSAic2hvd0FsbE5hbWVJRCI7Ci1XU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID1jb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotJT4KLQotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgZnVuY3Rpb24gc2hvd05hbWUodGFibGVDb250YWluZXJJRCkgewotICAgICAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklEKTsKLSAgICAgICAgdmFyIHRhYmxlQm9keSA9IHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJUQk9EWSIpLml0ZW0oMCk7Ci0gICAgICAgIHZhciBoaWRkZW5JbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCc8JT1zaG93QWxsTmFtZUlEJT4nKTsKLSAgICAgICAgPCUKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYW1lcy5zaXplKCk7IGkrKykgewotICAgICAgICAlPgotICAgICAgICAgICBhZGRSb3dUb05hbWVUYWJsZSh0YWJsZUJvZHksCi0gICAgICAgICAgICAgICAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpbmFtZUxhbmdzLmVsZW1lbnRBdChpKSklPiIsCi0gICAgICAgICAgICAgICAiPCU9SFRNTFV0aWxzLkpTTWFuZ2xlKChTdHJpbmcpbmFtZXMuZWxlbWVudEF0KGkpKSU+Iik7Ci0gICAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgICAgJT4KLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBhZGRSb3dUb05hbWVUYWJsZSh0YWJsZUJvZHksIGxhbmcsIG5hbWUpIHsKLSAgICAgICAgdmFyIG5ld1JvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7Ci0gICAgICAgIGFkZEtleVZhbHVlVG9Sb3cobmV3Um93LCBsYW5nLCBuYW1lKTsKLSAgICAgICAgdGFibGVCb2R5LmFwcGVuZENoaWxkKG5ld1Jvdyk7Ci0gICAgfQotPC9zY3JpcHQ+Ci0KLTx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz02IGNlbGxzcGFjaW5nPTA+Ci0gICAgPHRyPgotICAgICAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp0d2lzdCgnPCU9bmFtZVRhYmxlJT4nLCc8JT14bmFtZVRhYmxlJT4nKSI+PGltZyBuYW1lPSI8JT14bmFtZVRhYmxlJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvdHdpc3RjbG9zZWQuZ2lmIikpJT4iIGFsdD0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfVFdJU1RfQ0xPU0VEIiklPiIgY2xhc3M9InR3aXN0Ij48L2E+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgICA8c3Ryb25nPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX05BTUUiKSU+PC9zdHJvbmc+Ci0gICAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLTwvdGFibGU+Ci0KLTx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gICAgPHRyPgotICAgICAgICA8dGQgdmFsaWduPSJ0b3AiIGhlaWdodD0xMD48aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiPjwvdGQ+Ci0gICAgPC90cj4KLTwvdGFibGU+Ci0KLTxkaXYgaWQ9IjwlPW5hbWVUYWJsZSU+Ij4KLSAgICA8dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0xBTkdVQUdFIiklPjwvdGg+Ci0gICAgICAgICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIiB3aWR0aD0iMTAwJSI+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfTkFNRSIpJT48L3RoPgotICAgICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci08L2Rpdj4KLQotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgc2hvd05hbWUoJzwlPW5hbWVUYWJsZSU+Jyk7Ci0gICAgdHdpc3RJbml0KCc8JT1uYW1lVGFibGUlPicsJzwlPXhuYW1lVGFibGUlPicpOwotPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvc2NyaXB0cy93c2lsUGFuZXMuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3NjcmlwdHMvd3NpbFBhbmVzLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDdjNWIzYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvc2NyaXB0cy93c2lsUGFuZXMuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9wYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgdmFyIHdzaWxOYXZpZ2F0b3JDb250YWluZXIgPSBwZXJzcGVjdGl2ZUNvbnRlbnQuZnJhbWVzWyI8JT1Xc2lsRnJhbWVOYW1lcy5XU0lMX05BVklHQVRPUl9DT05UQUlORVIlPiJdOwotICB2YXIgd3NpbE5hdmlnYXRvclRvb2xiYXIgPSB3c2lsTmF2aWdhdG9yQ29udGFpbmVyLmZyYW1lc1siPCU9V3NpbEZyYW1lTmFtZXMuV1NJTF9OQVZJR0FUT1JfVE9PTEJBUiU+Il07Ci0gIHZhciB3c2lsTmF2aWdhdG9yQ29udGVudCA9IHdzaWxOYXZpZ2F0b3JDb250YWluZXIuZnJhbWVzWyI8JT1Xc2lsRnJhbWVOYW1lcy5XU0lMX05BVklHQVRPUl9DT05URU5UJT4iXTsKLSAgdmFyIHdzaWxBY3Rpb25zQ29udGFpbmVyID0gcGVyc3BlY3RpdmVDb250ZW50LmZyYW1lc1siPCU9V3NpbEZyYW1lTmFtZXMuV1NJTF9BQ1RJT05TX0NPTlRBSU5FUiU+Il07Ci0gIHZhciB3c2lsUHJvcGVydGllc0NvbnRhaW5lciA9IHdzaWxBY3Rpb25zQ29udGFpbmVyLmZyYW1lc1siPCU9V3NpbEZyYW1lTmFtZXMuV1NJTF9QUk9QRVJUSUVTX0NPTlRBSU5FUiU+Il07Ci0gIHZhciB3c2lsUHJvcGVydGllc1Rvb2xiYXIgPSB3c2lsUHJvcGVydGllc0NvbnRhaW5lci5mcmFtZXNbIjwlPVdzaWxGcmFtZU5hbWVzLldTSUxfUFJPUEVSVElFU19UT09MQkFSJT4iXTsKLSAgdmFyIHdzaWxQcm9wZXJ0aWVzQ29udGVudCA9IHdzaWxQcm9wZXJ0aWVzQ29udGFpbmVyLmZyYW1lc1siPCU9V3NpbEZyYW1lTmFtZXMuV1NJTF9QUk9QRVJUSUVTX0NPTlRFTlQlPiJdOwotICB2YXIgd3NpbFN0YXR1c0NvbnRhaW5lciA9IHdzaWxBY3Rpb25zQ29udGFpbmVyLmZyYW1lc1siPCU9V3NpbEZyYW1lTmFtZXMuV1NJTF9TVEFUVVNfQ09OVEFJTkVSJT4iXTsKLSAgdmFyIHdzaWxTdGF0dXNUb29sYmFyID0gd3NpbFN0YXR1c0NvbnRhaW5lci5mcmFtZXNbIjwlPVdzaWxGcmFtZU5hbWVzLldTSUxfU1RBVFVTX1RPT0xCQVIlPiJdOwotICB2YXIgd3NpbFN0YXR1c0NvbnRlbnQgPSB3c2lsU3RhdHVzQ29udGFpbmVyLmZyYW1lc1siPCU9V3NpbEZyYW1lTmFtZXMuV1NJTF9TVEFUVVNfQ09OVEVOVCU+Il07Ci08L3NjcmlwdD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9zY3JpcHRzL3dzaWxUYWJsZS5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvc2NyaXB0cy93c2lsVGFibGUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjUxMjZiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9zY3JpcHRzL3dzaWxUYWJsZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3NjcmlwdHMvdGFibGVzLmpzcCIgZmx1c2g9InRydWUiLz4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL2Jyb3dzZXJkZXRlY3QuanMiKSklPiI+Ci08L3NjcmlwdD4KLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotCi0gICAgZnVuY3Rpb24gd3NpbEhhbmRsZUNoZWNrQWxsQ2xpY2sodGFibGVDb250YWluZXJJZCwgY2hlY2tBbGxDaGVja2JveCkgewotICAgICAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICAgICAgZm9yICh2YXIgaT1udW1iZXJPZkhlYWRlclJvd3M7IGk8dGFibGUucm93cy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgdmFyIHJvd0NoZWNrYm94Q2VsbCA9IHRhYmxlLnJvd3NbaV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIikuaXRlbSgwKTsKLSAgICAgICAgICAgIHZhciByb3dDaGVja2JveCA9IHJvd0NoZWNrYm94Q2VsbC5jaGlsZE5vZGVzWzBdOwotICAgICAgICAgICAgcm93Q2hlY2tib3guY2hlY2tlZCA9IGNoZWNrQWxsQ2hlY2tib3guY2hlY2tlZDsKLSAgICAgICAgICAgIGlmIChyb3dDaGVja2JveC5jaGVja2VkKSB7Ci0gICAgICAgICAgICAgICAgaGlnaGxpZ2h0Um93KHRhYmxlLnJvd3NbaV0sInJvd2NvbG9yIik7Ci0gICAgICAgICAgICAgICAgcm93Q2hlY2tib3gubmFtZSA9ICI8JT1BY3Rpb25JbnB1dHMuVklFV0lEJT4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgaGlnaGxpZ2h0Um93KHRhYmxlLnJvd3NbaV0sInRhYmxlY2VsbHMiKTsKLSAgICAgICAgICAgICAgICByb3dDaGVja2JveC5uYW1lID0gIiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmdW5jdGlvbiB2YWxpZGF0ZUNoZWNrQm94SW5wdXQoY2hlY2tib3gsIGlzQ2hlY2tlZCkgewotICAgICAgICBpZiAoaXNDaGVja2VkKSB7Ci0gICAgICAgICAgICBjaGVja2JveC5uYW1lID0gIjwlPUFjdGlvbklucHV0cy5WSUVXSUQlPiI7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBjaGVja2JveC5uYW1lID0gIiI7Ci0gICAgICAgIH0KLSAgICAgICAgaGFuZGxlUm93Q2hlY2tib3hDbGljaygpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHR3aXN0SW5pdCh0YWJsZUNvbnRhaW5lcklkLHR3aXN0SW1hZ2VOYW1lKSB7Ci0gICAgICAgIHZhciB0YWJsZUNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhYmxlQ29udGFpbmVySWQpOwotICAgICAgICB2YXIgdGFibGUgPSBnZXRUYWJsZSh0YWJsZUNvbnRhaW5lcklkKTsKLSAgICAgICAgaWYgKHRhYmxlLnJvd3MubGVuZ3RoID4gbnVtYmVyT2ZIZWFkZXJSb3dzKSB7Ci0gICAgICAgICAgICB0YWJsZUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotICAgICAgICAgICAgdHdpc3QodGFibGVDb250YWluZXJJZCwgdHdpc3RJbWFnZU5hbWUpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgdGFibGVDb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICIiOwotICAgICAgICAgICAgdHdpc3QodGFibGVDb250YWluZXJJZCwgdHdpc3RJbWFnZU5hbWUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gYWRkS2V5VmFsdWVUb1Jvdyhyb3csIGtleSwgdmFsdWUpIHsKLSAgICAgICAgdmFyIGtleVRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShrZXkpOwotICAgICAgICB2YXIgdmFsdWVUZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodmFsdWUpOwotICAgICAgICB2YXIgbmV3Q29sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICAgICAgdmFyIG5ld0NvbDIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgICAgICBuZXdDb2wuYXBwZW5kQ2hpbGQoa2V5VGV4dCk7Ci0gICAgICAgIG5ld0NvbC5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgICAgIG5ld0NvbDIuYXBwZW5kQ2hpbGQodmFsdWVUZXh0KTsKLSAgICAgICAgbmV3Q29sMi5jbGFzc05hbWUgPSAidGFibGVjZWxscyI7Ci0gICAgICAgIHJvdy5hcHBlbmRDaGlsZChuZXdDb2wpOwotICAgICAgICByb3cuYXBwZW5kQ2hpbGQobmV3Q29sMik7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gY2xlYXJUYWJsZSh0YWJsZUJvZHksIG51bUhlYWRlcikgewotICAgICAgICBmb3IodmFyIGkgPSBudW1IZWFkZXI7IGkgPCB0YWJsZUJvZHkucm93cy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgdGFibGVCb2R5LmRlbGV0ZVJvdyhpKTsKLSAgICAgICAgICAgIGktLTsKLSAgICAgICAgfQotICAgIH0KLQotPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvc2NyaXB0cy93c2lsZnJhbWVzZXRzLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9zY3JpcHRzL3dzaWxmcmFtZXNldHMuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODI2NzNmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC9zY3JpcHRzL3dzaWxmcmFtZXNldHMuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLioiICU+Ci0KLTxqc3A6aW5jbHVkZSBwYWdlPSIvc2NyaXB0cy9wYW5lcy5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KLSAgZnVuY3Rpb24gZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0KCkKLSAgewotICAgIHJldHVybiBwZXJzcGVjdGl2ZUNvbnRlbnQuZnJhbWVzWyI8JT1Xc2lsRnJhbWVOYW1lcy5XU0lMX0FDVElPTlNfQ09OVEFJTkVSJT4iXS5kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZnJhbWVzZXQiKS5pdGVtKDApOwotICB9Ci0KLSAgZnVuY3Rpb24gcHJvY2Vzc0ZyYW1lc2V0U2l6ZXMoZnJhbWVzZXRTaXplc0Zvcm0pCi0gIHsKLSAgICB0b2dnbGVEb3VibGVDbGlja0NvbHVtblRpdGxlKCk7Ci0gICAgdmFyIHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0ID0gZ2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXQoKTsKLSAgICB2YXIgYWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0ID0gZ2V0QWN0aW9uc0NvbnRhaW5lckZyYW1lc2V0KCk7Ci0gICAgZnJhbWVzZXRTaXplc0Zvcm0uPCU9V3NpbEFjdGlvbklucHV0cy5GUkFNRVNFVF9DT0xTX1BFUlNQRUNUSVZFX0NPTlRFTlQlPi52YWx1ZSA9IHBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0LmNvbHM7Ci0gICAgZnJhbWVzZXRTaXplc0Zvcm0uPCU9V3NpbEFjdGlvbklucHV0cy5GUkFNRVNFVF9ST1dTX0FDVElPTlNfQ09OVEFJTkVSJT4udmFsdWUgPSBhY3Rpb25zQ29udGFpbmVyRnJhbWVzZXQucm93czsKLSAgICBmcmFtZXNldFNpemVzRm9ybS5zdWJtaXQoKTsKLSAgfQotPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvdmlld3MvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC92aWV3cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzM4ZmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC92aWV3cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0qLmphdmEKLSouY2xhc3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC92aWV3cy9VZGRpQnVzaW5lc3NWaWV3LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC92aWV3cy9VZGRpQnVzaW5lc3NWaWV3LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTE3ZmFlMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvdmlld3MvVWRkaUJ1c2luZXNzVmlldy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNTcgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9ImphdmEudXRpbC5WZWN0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuRW51bWVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5RdWlja1NvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuV1NJTFBlcnNwZWN0aXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5TZWxlY3RXU0lMVG9vbEFjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuQWRkVG9GYXZvcml0ZXNBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLkFkZEJ1c2luZXNzVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlJlZnJlc2hBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5kYXRhbW9kZWwuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgIFN0cmluZyBkaXZVRERJQnVzaW5lc3NMaXN0ID0gImRpdlVERElCdXNpbmVzc0xpc3QiOwotICAgIFN0cmluZyB4ZGl2VURESUJ1c2luZXNzTGlzdCA9ICJ4ZGl2VURESUJ1c2luZXNzTGlzdCI7Ci0KLSAgICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHdzaWxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0lPgotPGh0bWw+Ci08aGVhZD4KLSAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gICAgPHRpdGxlPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJWSUVXX1RJVExFX1VERElfQlVTSU5FU1NFUyIpJT48L3RpdGxlPgotICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL3Jlc3VtZXByb3h5bG9hZHBhZ2UuanMiKSklPiI+Ci0gICAgPC9zY3JpcHQ+Ci0gICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbFRhYmxlLmpzcCIgZmx1c2g9InRydWUiLz4KLSAgICA8anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvc2NyaXB0cy93c2lsRm9ybVN1Ym1pdC5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJjb250ZW50Ym9keW1hcmdpbiI+Ci08ZGl2IGlkPSJjb250ZW50Ym9yZGVyIj4KLSAgICA8JQotICAgIFN0cmluZyB0aXRsZUltYWdlUGF0aCA9ICJ3c2lsL2ltYWdlcy9saXN0X2J1c2luZXNzX2hpZ2hsaWdodGVkLmdpZiI7Ci0gICAgU3RyaW5nIHRpdGxlID0gd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9MSVNUX1VERElfTElOS1MiKTsKLSAgICAlPgotICAgIDwlQCBpbmNsdWRlIGZpbGUgPSAiL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotICAgIDx0YWJsZT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgIDwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0xJU1RfVURESV9CVVNJTkVTU0VTX0RFU0MiKSU+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+ICAgIAotICAgIDxmb3JtIGFjdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KEFkZFRvRmF2b3JpdGVzQWN0aW9uLmdldEJhc2VBY3Rpb25MaW5rKCkpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBzdHlsZT0ibWFyZ2luLXRvcDoxMHB4OyI+Ci0gICAgPCUKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgV3NpbEVsZW1lbnQpIHsKLSAgICAlPgotICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuTk9ERUlEJT4iIHZhbHVlPSI8JT1zZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCklPiI+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVdzaWxBY3Rpb25JbnB1dHMuTVVMVElQTEVfTElOS19BQ1RJT04lPiIgdmFsdWU9IjEiPgotICAgICAgICA8dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPWRpdlVERElCdXNpbmVzc0xpc3QlPicsJzwlPXhkaXZVRERJQnVzaW5lc3NMaXN0JT4nKSI+PGltZyBuYW1lPSI8JT14ZGl2VURESUJ1c2luZXNzTGlzdCU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0Y2xvc2VkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX0NMT1NFRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9VRERJX0JVU0lORVNTIiklPjwvc3Ryb25nPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIHZhbGlnbj0idG9wIiBoZWlnaHQ9MTA+PGltZyBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2tleWxpbmUuZ2lmIikpJT4iIGhlaWdodD0yIHdpZHRoPSIxMDAlIj48L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8ZGl2IGlkPSI8JT1kaXZVRERJQnVzaW5lc3NMaXN0JT4iPgotICAgICAgICA8dGFibGUgd2lkdGg9Ijk1JSIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIGNsYXNzPSJ0YWJsZWJvcmRlciI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9IndzaWxIYW5kbGVDaGVja0FsbENsaWNrKCc8JT1kaXZVRERJQnVzaW5lc3NMaXN0JT4nLHRoaXMpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX0FMTF9DSEVDS19CT1giKSU+Ij48L3RoPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0lURU1fTlVNQkVSIiklPjwvdGg+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVURESV9CVVNJTkVTU19OQU1FIiklPjwvdGg+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgICBMaXN0TWFuYWdlciB1ZGRpTGlua3MgPSAoKFdzaWxFbGVtZW50KXNlbGVjdGVkRWxlbWVudCkuZ2V0QWxsVURESUxpbmtzKCk7Ci0gICAgICAgICAgICAgICAgRW51bWVyYXRpb24gZSA9IHVkZGlMaW5rcy5nZXRMaXN0RWxlbWVudHMoKTsKLSAgICAgICAgICAgICAgICBpbnQgaXRlbU51bSA9IDE7Ci0gICAgICAgICAgICAgICAgVmVjdG9yIHNvcnRlZFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgICAgICAgICAgIAlzb3J0ZWRWZWN0b3IuYWRkKGUubmV4dEVsZW1lbnQoKSk7Ci0gICAgICAgICAgICAgCSAgfQotICAgICAgICAgICAgICAgIFF1aWNrU29ydC5zb3J0KHNvcnRlZFZlY3Rvcik7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzb3J0ZWRWZWN0b3Iuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgTGlzdEVsZW1lbnQgbGUgPSAoTGlzdEVsZW1lbnQpc29ydGVkVmVjdG9yLmVsZW1lbnRBdChpKTsKLSAgICAgICAgICAgICAgICAgICAgV3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQgdWRkaUxpbmsgPSAoV3NpbFVkZGlCdXNpbmVzc0VsZW1lbnQpbGUuZ2V0T2JqZWN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gdWRkaUxpbmsuZ2V0TmFtZSgpOwotICAgICAgICAgICAgICAgICAgICAlPgotICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgIG5hbWU9IjwlPUFjdGlvbklucHV0cy5WSUVXSUQlPiIgdmFsdWU9IjwlPWxlLmdldFZpZXdJZCgpJT4iIG9uQ2xpY2s9InZhbGlkYXRlQ2hlY2tCb3hJbnB1dCh0aGlzLCB0aGlzLmNoZWNrZWQpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX1JPV19DSEVDS19CT1giKSU+Ij48L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICU+Ci0JICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiIG5vd3JhcD48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIGxlLmdldFZpZXdJZCgpLCAwLCBmYWxzZSkpKSU+IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI+PCU9U3RyaW5nLnZhbHVlT2YoaXRlbU51bSklPjwvYT48L3RkPgotICAgICAgIAkgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIj48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIGxlLmdldFZpZXdJZCgpLCAwLCBmYWxzZSkpKSU+IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI+PCU9bmFtZSU+PC9hPjwvdGQ+Ci0gICAgICAgCSAgICAgICAgICA8JQotICAgICAgIAkgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAlPgotCSAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIiBub3dyYXA+PCU9U3RyaW5nLnZhbHVlT2YoaXRlbU51bSklPjwvdGQ+Ci0gICAgICAgCSAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1VOQVZBSUxBQkxFX1VERElfQlVTSU5FU1MiKSU+Jm5ic3A7PCU9dWRkaUxpbmsuZ2V0VURESUxpbmtCdXNpbmVzc0tleSgpJT48L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgIDwlCi0gICAgICAgICAgICAgICAgICAgIGl0ZW1OdW0rKzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAlPgotICAgICAgICA8L3RhYmxlPgotICAgICAgICA8L2Rpdj4KLSAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICAgICAgICB0d2lzdEluaXQoJzwlPWRpdlVERElCdXNpbmVzc0xpc3QlPicsJzwlPXhkaXZVRERJQnVzaW5lc3NMaXN0JT4nKTsKLSAgICAgICAgPC9zY3JpcHQ+Ci0KLSAgICAgICAgPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTIgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0FERF9UT19VRERJX1BFUlNQRUNUSVZFIiklPiIgb25DbGljaz0ic2V0Rm9ybUxvY2F0aW9uQW5kU3VibWl0KCc8JT1kaXZVRERJQnVzaW5lc3NMaXN0JT4nLCB0aGlzLmZvcm0sICc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoQWRkQnVzaW5lc3NUb1VERElQZXJzcGVjdGl2ZUFjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPicpIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQUREX1RPX0ZBVk9SSVRFUyIpJT4iIG9uQ2xpY2s9InNldEZvcm1Mb2NhdGlvbkFuZFN1Ym1pdCgnPCU9ZGl2VURESUJ1c2luZXNzTGlzdCU+JywgdGhpcy5mb3JtLCAnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KEFkZFRvRmF2b3JpdGVzQWN0aW9uLmdldEJhc2VBY3Rpb25MaW5rKCkpKSU+JykiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9SRUZSRVNIIiklPiIgb25DbGljaz0ic2V0Rm9ybUxvY2F0aW9uQW5kU3VibWl0KCc8JT1kaXZVRERJQnVzaW5lc3NMaXN0JT4nLCB0aGlzLmZvcm0sICc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoUmVmcmVzaEFjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPicpIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICA8JQotICAgIH0KLSU+Ci08L2Rpdj4KLQotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgcmVzdW1lUHJveHlMb2FkUGFnZSgpOwotPC9zY3JpcHQ+Ci0KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC92aWV3cy9VZGRpU2VydmljZXNWaWV3LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC92aWV3cy9VZGRpU2VydmljZXNWaWV3LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjNiMDQ0NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvdmlld3MvVWRkaVNlcnZpY2VzVmlldy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNTggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9ImphdmEudXRpbC5WZWN0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuRW51bWVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5RdWlja1NvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuU2VsZWN0V1NJTFRvb2xBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLkFkZFRvRmF2b3JpdGVzQWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5BZGRTZXJ2aWNlVG9VRERJUGVyc3BlY3RpdmVBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLlJlZnJlc2hBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLldTSUxQZXJzcGVjdGl2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAgU3RyaW5nIGRpdlVERElTZXJ2aWNlTGlzdCA9ICJkaXZVRERJU2VydmljZUxpc3QiOwotICAgIFN0cmluZyB4ZGl2VURESVNlcnZpY2VMaXN0ID0gInhkaXZVRERJU2VydmljZUxpc3QiOwotCi0gICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0gICAgTm9kZU1hbmFnZXIgbm9kZU1hbmFnZXIgPSB3c2lsUGVyc3BlY3RpdmUuZ2V0Tm9kZU1hbmFnZXIoKTsKLSAgICBOb2RlIHNlbGVjdGVkTm9kZSA9IG5vZGVNYW5hZ2VyLmdldFNlbGVjdGVkTm9kZSgpOwotICAgIFRyZWVFbGVtZW50IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkTm9kZS5nZXRUcmVlRWxlbWVudCgpOwotJT4KLTxodG1sPgotPGhlYWQ+Ci0gICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICAgIDx0aXRsZT48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiVklFV19USVRMRV9VRERJX1NFUlZJQ0VTIiklPjwvdGl0bGU+Ci0gICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci0gICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvcmVzdW1lcHJveHlsb2FkcGFnZS5qcyIpKSU+Ij4KLSAgICA8L3NjcmlwdD4KLSAgICA8anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvc2NyaXB0cy93c2lsVGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvd3NpbC9zY3JpcHRzL3dzaWxGb3JtU3VibWl0LmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICAgIDwlCi0gICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gIndzaWwvaW1hZ2VzL2xpc3RfVURESV9zZXJ2aWNlX2hpZ2hsaWdodGVkLmdpZiI7Ci0gICAgU3RyaW5nIHRpdGxlID0gd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9MSVNUX1VERElfU0VSVklDRVMiKTsKLSAgICAlPgotICAgIDwlQCBpbmNsdWRlIGZpbGUgPSAiL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotICAgIDx0YWJsZT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgIDwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0xJU1RfVURESV9TRVJWSUNFU19ERVNDIiklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPiAgICAKLSAgICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChBZGRUb0Zhdm9yaXRlc0FjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgc3R5bGU9Im1hcmdpbi10b3A6MTBweDsiPgotCi0gICAgPCUKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgV3NpbEVsZW1lbnQpIHsKLSAgICAlPgotICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuTk9ERUlEJT4iIHZhbHVlPSI8JT1zZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCklPiI+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVdzaWxBY3Rpb25JbnB1dHMuTVVMVElQTEVfTElOS19BQ1RJT04lPiIgdmFsdWU9IjEiPgotICAgICAgICA8dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9MjAgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPWRpdlVERElTZXJ2aWNlTGlzdCU+JywnPCU9eGRpdlVERElTZXJ2aWNlTGlzdCU+JykiPjxpbWcgbmFtZT0iPCU9eGRpdlVERElTZXJ2aWNlTGlzdCU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0Y2xvc2VkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX0NMT1NFRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD0yMCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9VRERJX1NFUlZJQ0UiKSU+PC9zdHJvbmc+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgdmFsaWduPSJ0b3AiIGhlaWdodD0xMD48aW1nIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMva2V5bGluZS5naWYiKSklPiIgaGVpZ2h0PTIgd2lkdGg9IjEwMCUiPjwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgICAgIDxkaXYgaWQ9IjwlPWRpdlVERElTZXJ2aWNlTGlzdCU+Ij4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJ3c2lsSGFuZGxlQ2hlY2tBbGxDbGljaygnPCU9ZGl2VURESVNlcnZpY2VMaXN0JT4nLHRoaXMpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX0FMTF9DSEVDS19CT1giKSU+Ij48L3RoPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iaGVhZGVyY29sb3IiPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0lURU1fTlVNQkVSIiklPjwvdGg+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfVURESV9TRVJWSUNFX05BTUUiKSU+PC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8JQotICAgICAgICAgICAgICAgIExpc3RNYW5hZ2VyIHVkZGlTZXJ2aWNlcyA9ICgoV3NpbEVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50KS5nZXRBbGxVRERJU2VydmljZXMoKTsKLSAgICAgICAgICAgICAgICBFbnVtZXJhdGlvbiBlID0gdWRkaVNlcnZpY2VzLmdldExpc3RFbGVtZW50cygpOwotICAgICAgICAgICAgICAgIGludCBpdGVtTnVtID0gMTsKLSAgICAgICAgICAgICAgICBWZWN0b3Igc29ydGVkVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgICAgICAgICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgCXNvcnRlZFZlY3Rvci5hZGQoZS5uZXh0RWxlbWVudCgpKTsKLSAgICAgICAgICAgICAJICB9Ci0gICAgICAgICAgICAgICAgUXVpY2tTb3J0LnNvcnQoc29ydGVkVmVjdG9yKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNvcnRlZFZlY3Rvci5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBMaXN0RWxlbWVudCBsZSA9IChMaXN0RWxlbWVudClzb3J0ZWRWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgICAgICAgICAgICAgICBXc2lsVWRkaVNlcnZpY2VFbGVtZW50IHVkZGlTZXJ2aWNlID0gKFdzaWxVZGRpU2VydmljZUVsZW1lbnQpbGUuZ2V0T2JqZWN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gdWRkaVNlcnZpY2UuZ2V0TmFtZSgpOwotICAgICAgICAgICAgICAgICAgICAlPgotICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNoZWNrYm94Y2VsbHMiIHdpZHRoPTEwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgIG5hbWU9IjwlPUFjdGlvbklucHV0cy5WSUVXSUQlPiIgdmFsdWU9IjwlPWxlLmdldFZpZXdJZCgpJT4iIG9uQ2xpY2s9InZhbGlkYXRlQ2hlY2tCb3hJbnB1dCh0aGlzLCB0aGlzLmNoZWNrZWQpIiB0aXRsZT0iPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJGT1JNX0NPTlRST0xfVElUTEVfU0VMRUNUX1JPV19DSEVDS19CT1giKSU+Ij48L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAJPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIiBub3dyYXA+PGEgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFNlbGVjdFdTSUxUb29sQWN0aW9uLmdldEFjdGlvbkxpbmsoc2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpLCBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKS5nZXRTZWxlY3RlZFRvb2xJZCgpLCBsZS5nZXRWaWV3SWQoKSwgMCwgZmFsc2UpKSklPiIgdGFyZ2V0PSI8JT1GcmFtZU5hbWVzLlBFUlNQRUNUSVZFX1dPUktBUkVBJT4iPjwlPVN0cmluZy52YWx1ZU9mKGl0ZW1OdW0pJT48L2E+PC90ZD4KLQkgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiIG5vd3JhcD48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIGxlLmdldFZpZXdJZCgpLCAwLCBmYWxzZSkpKSU+IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI+PCU9bmFtZSU+PC9hPjwvdGQ+Ci0JICAgICAgICAgICAgICAgICA8JQotCSAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAlPgotICAgICAgICAgICAgICAgICAgICAgICAgCTx0ZCBjbGFzcz0idGFibGVjZWxscyIgbm93cmFwPjwlPVN0cmluZy52YWx1ZU9mKGl0ZW1OdW0pJT48L3RkPgotCQkJCTx0ZCBjbGFzcz0idGFibGVjZWxscyIgbm93cmFwPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX1VOQVZBSUxBQkxFX1VERElfU0VSVklDRSIpJT4mbmJzcDs8JT11ZGRpU2VydmljZS5nZXRVRERJU2VydmljZUtleSgpJT48L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgPCUKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgIDwlCi0gICAgICAgICAgICAgICAgICAgIGl0ZW1OdW0rKzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAlPgotICAgICAgICA8L3RhYmxlPgotICAgICAgICA8L2Rpdj4KLSAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICAgICAgICB0d2lzdEluaXQoJzwlPWRpdlVERElTZXJ2aWNlTGlzdCU+JywnPCU9eGRpdlVERElTZXJ2aWNlTGlzdCU+Jyk7Ci0gICAgICAgIDwvc2NyaXB0PgotCi0gICAgICAgIDx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz0yIGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9BRERfVE9fVURESV9QRVJTUEVDVElWRSIpJT4iIG9uQ2xpY2s9InNldEZvcm1Mb2NhdGlvbkFuZFN1Ym1pdCgnPCU9ZGl2VURESVNlcnZpY2VMaXN0JT4nLCB0aGlzLmZvcm0sICc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoQWRkU2VydmljZVRvVURESVBlcnNwZWN0aXZlQWN0aW9uLmdldEJhc2VBY3Rpb25MaW5rKCkpKSU+JykiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD00MCB2YWxpZ249ImJvdHRvbSI+Ci0gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9BRERfVE9fRkFWT1JJVEVTIiklPiIgb25DbGljaz0ic2V0Rm9ybUxvY2F0aW9uQW5kU3VibWl0KCc8JT1kaXZVRERJU2VydmljZUxpc3QlPicsIHRoaXMuZm9ybSwgJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChBZGRUb0Zhdm9yaXRlc0FjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPicpIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfUkVGUkVTSCIpJT4iIG9uQ2xpY2s9InNldEZvcm1Mb2NhdGlvbkFuZFN1Ym1pdCgnPCU9ZGl2VURESVNlcnZpY2VMaXN0JT4nLCB0aGlzLmZvcm0sICc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoUmVmcmVzaEFjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPicpIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICA8JQotICAgIH0KLSU+Ci08L2Rpdj4KLQotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgcmVzdW1lUHJveHlMb2FkUGFnZSgpOwotPC9zY3JpcHQ+Ci0KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC92aWV3cy9Xc2RsU2VydmljZXNWaWV3LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC92aWV3cy9Xc2RsU2VydmljZXNWaWV3LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTY0NjliMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvdmlld3MvV3NkbFNlcnZpY2VzVmlldy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMzQgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9ImphdmEudXRpbC5WZWN0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuRW51bWVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5RdWlja1NvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuU2VsZWN0V1NJTFRvb2xBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5hY3Rpb25zLkFkZFRvRmF2b3JpdGVzQWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5Xc2lsQWRkVG9XU0RMUGVyc3BlY3RpdmVBY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLldTSUxQZXJzcGVjdGl2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmRhdGFtb2RlbC4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICAgU3RyaW5nIGRpdldTRExMaXN0ID0gImRpdldTRExMaXN0IjsKLSAgICBTdHJpbmcgeGRpdldTRExMaXN0ID0gInhkaXZXU0RMTGlzdCI7Ci0KLSAgICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSAgICBOb2RlTWFuYWdlciBub2RlTWFuYWdlciA9IHdzaWxQZXJzcGVjdGl2ZS5nZXROb2RlTWFuYWdlcigpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgVHJlZUVsZW1lbnQgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWROb2RlLmdldFRyZWVFbGVtZW50KCk7Ci0lPgotPGh0bWw+Ci08aGVhZD4KLSAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gICAgPHRpdGxlPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJWSUVXX1RJVExFX1dTRExfU0VSVklDRVMiKSU+PC90aXRsZT4KLSAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLSAgICA8anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvc2NyaXB0cy93c2lsVGFibGUuanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvd3NpbC9zY3JpcHRzL3dzaWxGb3JtU3VibWl0LmpzcCIgZmx1c2g9InRydWUiLz4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICAgIDwlCi0gICAgU3RyaW5nIHRpdGxlSW1hZ2VQYXRoID0gIndzaWwvaW1hZ2VzL2xpc3RfV1NETF9zZXJ2aWNlX2hpZ2hsaWdodGVkLmdpZiI7Ci0gICAgU3RyaW5nIHRpdGxlID0gd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9MSVNUX1dTRExfU0VSVklDRVMiKTsKLSAgICAlPgotICAgIDwlQCBpbmNsdWRlIGZpbGUgPSAiL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotICAgIDx0YWJsZT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgIDwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0xJU1RfV1NETF9TRVJWSUNFU19ERVNDIiklPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPiAgICAKLSAgICA8Zm9ybSBhY3Rpb249IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChBZGRUb0Zhdm9yaXRlc0FjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPiIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiIgc3R5bGU9Im1hcmdpbi10b3A6MTBweDsiPgotICAgIDwlCi0gICAgaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIFdzaWxFbGVtZW50KSB7Ci0gICAgJT4KLSAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLk5PREVJRCU+IiB2YWx1ZT0iPCU9c2VsZWN0ZWROb2RlLmdldE5vZGVJZCgpJT4iPgotICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1Xc2lsQWN0aW9uSW5wdXRzLk1VTFRJUExFX0xJTktfQUNUSU9OJT4iIHZhbHVlPSIxIj4KLSAgICAgICAgPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTYgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTI1IHZhbGlnbj0iYm90dG9tIiBhbGlnbj0ibGVmdCIgbm93cmFwIHdpZHRoPTExPgotICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnR3aXN0KCc8JT1kaXZXU0RMTGlzdCU+JywnPCU9eGRpdldTRExMaXN0JT4nKSI+PGltZyBuYW1lPSI8JT14ZGl2V1NETExpc3QlPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy90d2lzdGNsb3NlZC5naWYiKSklPiIgYWx0PSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9UV0lTVF9DTE9TRUQiKSU+IiBjbGFzcz0idHdpc3QiPjwvYT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgY2xhc3M9ImxhYmVscyI+Ci0gICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfV1NETF9TRVJWSUNFIiklPjwvc3Ryb25nPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIHZhbGlnbj0idG9wIiBoZWlnaHQ9MTA+PGltZyBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2tleWxpbmUuZ2lmIikpJT4iIGhlaWdodD0yIHdpZHRoPSIxMDAlIj48L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8ZGl2IGlkPSI8JT1kaXZXU0RMTGlzdCU+Ij4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJ3c2lsSGFuZGxlQ2hlY2tBbGxDbGljaygnPCU9ZGl2V1NETExpc3QlPicsdGhpcykiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQUxMX0NIRUNLX0JPWCIpJT4iPjwvdGg+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfSVRFTV9OVU1CRVIiKSU+PC90aD4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9VUkwiKSU+PC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8JQotICAgICAgICAgICAgICAgIExpc3RNYW5hZ2VyIHdzZGxTZXJ2aWNlcyA9ICgoV3NpbEVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50KS5nZXRBbGxXU0RMU2VydmljZXMoKTsKLSAgICAgICAgICAgICAgICBFbnVtZXJhdGlvbiBlID0gd3NkbFNlcnZpY2VzLmdldExpc3RFbGVtZW50cygpOwotICAgICAgICAgICAgICAgIGludCBpdGVtTnVtID0gMTsKLSAgICAgICAgICAgICAgICBWZWN0b3Igc29ydGVkVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgICAgICAgICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgCXNvcnRlZFZlY3Rvci5hZGQoZS5uZXh0RWxlbWVudCgpKTsKLSAgICAgICAgICAgICAJICB9Ci0gICAgICAgICAgICAgICAgUXVpY2tTb3J0LnNvcnQoc29ydGVkVmVjdG9yKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNvcnRlZFZlY3Rvci5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBMaXN0RWxlbWVudCBsZSA9IChMaXN0RWxlbWVudClzb3J0ZWRWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgICAgICAgICAgICAgICBXc2lsV3NkbFNlcnZpY2VFbGVtZW50IHdzZGxTZXJ2aWNlID0gKFdzaWxXc2RsU2VydmljZUVsZW1lbnQpbGUuZ2V0T2JqZWN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyB3c2RsVVJMID0gd3NkbFNlcnZpY2UuZ2V0V1NETFNlcnZpY2VVUkwoKTsKLSAgICAgICAgICAgICAgICAgICAgJT4KLSAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjaGVja2JveGNlbGxzIiB3aWR0aD0xMD48aW5wdXQgdHlwZT0iY2hlY2tib3giICBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuVklFV0lEJT4iIHZhbHVlPSI8JT1sZS5nZXRWaWV3SWQoKSU+IiBvbkNsaWNrPSJ2YWxpZGF0ZUNoZWNrQm94SW5wdXQodGhpcywgdGhpcy5jaGVja2VkKSIgdGl0bGU9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiRk9STV9DT05UUk9MX1RJVExFX1NFTEVDVF9ST1dfQ0hFQ0tfQk9YIiklPiI+PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFibGVjZWxscyIgbm93cmFwPjxhIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChTZWxlY3RXU0lMVG9vbEFjdGlvbi5nZXRBY3Rpb25MaW5rKHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSwgc2VsZWN0ZWROb2RlLmdldFRvb2xNYW5hZ2VyKCkuZ2V0U2VsZWN0ZWRUb29sSWQoKSwgbGUuZ2V0Vmlld0lkKCksIDAsIGZhbHNlKSkpJT4iIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+Ij48JT1TdHJpbmcudmFsdWVPZihpdGVtTnVtKSU+PC9hPjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiIG5vd3JhcD48JT13c2RsVVJMJT48L3RkPgotICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICA8JQotICAgICAgICAgICAgICAgICAgICBpdGVtTnVtKys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgJT4KLSAgICAgICAgPC90YWJsZT4KLSAgICAgICAgPC9kaXY+Ci0gICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgICAgICAgdHdpc3RJbml0KCc8JT1kaXZXU0RMTGlzdCU+JywnPCU9eGRpdldTRExMaXN0JT4nKTsKLSAgICAgICAgPC9zY3JpcHQ+Ci0KLSAgICAgICAgPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTIgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0FERF9UT19XU0RMX1BFUlNQRUNUSVZFIiklPiIgb25DbGljaz0ic2V0Rm9ybUxvY2F0aW9uQW5kU3VibWl0KCc8JT1kaXZXU0RMTGlzdCU+JywgdGhpcy5mb3JtLCAnPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KFdzaWxBZGRUb1dTRExQZXJzcGVjdGl2ZUFjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPicpIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9NDAgdmFsaWduPSJib3R0b20iPgotICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfQUREX1RPX0ZBVk9SSVRFUyIpJT4iIG9uQ2xpY2s9InNldEZvcm1Mb2NhdGlvbkFuZFN1Ym1pdCgnPCU9ZGl2V1NETExpc3QlPicsIHRoaXMuZm9ybSwgJzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dChBZGRUb0Zhdm9yaXRlc0FjdGlvbi5nZXRCYXNlQWN0aW9uTGluaygpKSklPicpIiBjbGFzcz0iYnV0dG9uIj4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBub3dyYXAgd2lkdGg9IjkwJSI+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvdGFibGU+Ci0KLSAgICA8JQotICAgIH0KLSU+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC92aWV3cy9Xc2lsTGlua3NWaWV3LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC92aWV3cy9Xc2lsTGlua3NWaWV3LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQ5N2RhNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvdmlld3MvV3NpbExpbmtzVmlldy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMzAgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9ImphdmEudXRpbC5WZWN0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuRW51bWVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5RdWlja1NvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5kYXRhbW9kZWwuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuV1NJTFBlcnNwZWN0aXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuYWN0aW9ucy5TZWxlY3RXU0lMVG9vbEFjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmFjdGlvbnMuT3BlbldTSUxMaW5rQWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuZGF0YW1vZGVsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgICBTdHJpbmcgZGl2V1NJTExpc3QgPSAiZGl2V1NJTExpc3QiOwotICAgIFN0cmluZyB4ZGl2V1NJTExpc3QgPSAieGRpdldTSUxMaXN0IjsKLQotICAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gd3NpbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBUcmVlRWxlbWVudCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZE5vZGUuZ2V0VHJlZUVsZW1lbnQoKTsKLSU+Ci08aHRtbD4KLTxoZWFkPgotICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgICA8dGl0bGU+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIlZJRVdfVElUTEVfV1NJTF9MSU5LUyIpJT48L3RpdGxlPgotICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotICAgIDxqc3A6aW5jbHVkZSBwYWdlPSIvd3NpbC9zY3JpcHRzL3dzaWxUYWJsZS5qc3AiIGZsdXNoPSJ0cnVlIi8+Ci0gICAgPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbEZvcm1TdWJtaXQuanNwIiBmbHVzaD0idHJ1ZSIvPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci0gICAgPCUKLSAgICBTdHJpbmcgdGl0bGVJbWFnZVBhdGggPSAid3NpbC9pbWFnZXMvbGlzdF9XU0lMX2hpZ2hsaWdodGVkLmdpZiI7Ci0gICAgU3RyaW5nIHRpdGxlID0gd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9MSVNUX1dTSUxfTElOS1MiKTsKLSAgICAlPgotICAgIDwlQCBpbmNsdWRlIGZpbGUgPSAiL2Zvcm1zL2Zvcm1oZWFkZXIuaW5jIiAlPgotICAgIDx0YWJsZT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbHMiPgotICAgICAgICAgIDwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0xJU1RfV1NJTF9MSU5LUyIpJT4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90YWJsZT4gICAgCi0gICAgPGZvcm0gYWN0aW9uPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlbldTSUxMaW5rQWN0aW9uLmdldEJhc2VBY3Rpb25MaW5rKCkpKSU+IiBtZXRob2Q9InBvc3QiIHRhcmdldD0iPCU9RnJhbWVOYW1lcy5QRVJTUEVDVElWRV9XT1JLQVJFQSU+IiBzdHlsZT0ibWFyZ2luLXRvcDoxMHB4OyI+Ci0gICAgPCUKLSAgICBpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgV3NpbEVsZW1lbnQpIHsKLSAgICAlPgotICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8JT1BY3Rpb25JbnB1dHMuTk9ERUlEJT4iIHZhbHVlPSI8JT1zZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCklPiI+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IjwlPVdzaWxBY3Rpb25JbnB1dHMuTVVMVElQTEVfTElOS19BQ1RJT04lPiIgdmFsdWU9IjEiPgotICAgICAgICA8dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9NiBjZWxsc3BhY2luZz0wPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9MjUgdmFsaWduPSJib3R0b20iIGFsaWduPSJsZWZ0IiBub3dyYXAgd2lkdGg9MTE+Ci0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6dHdpc3QoJzwlPWRpdldTSUxMaXN0JT4nLCc8JT14ZGl2V1NJTExpc3QlPicpIj48aW1nIG5hbWU9IjwlPXhkaXZXU0lMTGlzdCU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3R3aXN0Y2xvc2VkLmdpZiIpKSU+IiBhbHQ9IjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX1RXSVNUX0NMT1NFRCIpJT4iIGNsYXNzPSJ0d2lzdCI+PC9hPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIGhlaWdodD0yNSB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImxlZnQiIG5vd3JhcCBjbGFzcz0ibGFiZWxzIj4KLSAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9XU0lMX0xJTktTIiklPjwvc3Ryb25nPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgICAgIDx0YWJsZSB3aWR0aD0iOTUlIiBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIHZhbGlnbj0idG9wIiBoZWlnaHQ9MTA+PGltZyBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2tleWxpbmUuZ2lmIikpJT4iIGhlaWdodD0yIHdpZHRoPSIxMDAlIj48L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgICAgICA8ZGl2IGlkPSI8JT1kaXZXU0lMTGlzdCU+Ij4KLSAgICAgICAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCBjbGFzcz0idGFibGVib3JkZXIiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJ3c2lsSGFuZGxlQ2hlY2tBbGxDbGljaygnPCU9ZGl2V1NJTExpc3QlPicsdGhpcykiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfQUxMX0NIRUNLX0JPWCIpJT4iPjwvdGg+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJoZWFkZXJjb2xvciI+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZPUk1fTEFCRUxfSVRFTV9OVU1CRVIiKSU+PC90aD4KLSAgICAgICAgICAgICAgICA8dGggY2xhc3M9ImhlYWRlcmNvbG9yIj48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRk9STV9MQUJFTF9VUkwiKSU+PC90aD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8JQotICAgICAgICAgICAgICAgIExpc3RNYW5hZ2VyIHdzaWxMaW5rcyA9ICgoV3NpbEVsZW1lbnQpc2VsZWN0ZWRFbGVtZW50KS5nZXRBbGxXU0lMTGlua3MoKTsKLSAgICAgICAgICAgICAgICBFbnVtZXJhdGlvbiBlID0gd3NpbExpbmtzLmdldExpc3RFbGVtZW50cygpOwotICAgICAgICAgICAgICAgIGludCBpdGVtTnVtID0gMTsKLSAgICAgICAgICAgICAgICBWZWN0b3Igc29ydGVkVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgICAgICAgICAgICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgCXNvcnRlZFZlY3Rvci5hZGQoZS5uZXh0RWxlbWVudCgpKTsKLSAgICAgICAgICAgICAJICB9Ci0gICAgICAgICAgICAgICAgUXVpY2tTb3J0LnNvcnQoc29ydGVkVmVjdG9yKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNvcnRlZFZlY3Rvci5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBMaXN0RWxlbWVudCBsZSA9IChMaXN0RWxlbWVudClzb3J0ZWRWZWN0b3IuZWxlbWVudEF0KGkpOwotICAgICAgICAgICAgICAgICAgICBXc2lsV3NpbExpbmtFbGVtZW50IHdzaWxMaW5rID0gKFdzaWxXc2lsTGlua0VsZW1lbnQpbGUuZ2V0T2JqZWN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyB1cmwgPSB3c2lsTGluay5nZXRXU0lMTGlua0xvY2F0aW9uKCk7Ci0gICAgICAgICAgICAgICAgICAgICU+Ci0gICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY2hlY2tib3hjZWxscyIgd2lkdGg9MTA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiAgbmFtZT0iPCU9QWN0aW9uSW5wdXRzLlZJRVdJRCU+IiB2YWx1ZT0iPCU9bGUuZ2V0Vmlld0lkKCklPiIgb25DbGljaz0idmFsaWRhdGVDaGVja0JveElucHV0KHRoaXMsIHRoaXMuY2hlY2tlZCkiIHRpdGxlPSI8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkZPUk1fQ09OVFJPTF9USVRMRV9TRUxFQ1RfUk9XX0NIRUNLX0JPWCIpJT4iPjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRhYmxlY2VsbHMiIG5vd3JhcD48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoU2VsZWN0V1NJTFRvb2xBY3Rpb24uZ2V0QWN0aW9uTGluayhzZWxlY3RlZE5vZGUuZ2V0Tm9kZUlkKCksIHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpLmdldFNlbGVjdGVkVG9vbElkKCksIGxlLmdldFZpZXdJZCgpLCAwLCBmYWxzZSkpKSU+IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI+PCU9U3RyaW5nLnZhbHVlT2YoaXRlbU51bSklPjwvYT48L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YWJsZWNlbGxzIiBub3dyYXA+PCU9dXJsJT48L3RkPgotICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICA8JQotICAgICAgICAgICAgICAgICAgICBpdGVtTnVtKys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgJT4KLSAgICAgICAgPC90YWJsZT4KLSAgICAgICAgPC9kaXY+Ci0gICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgotICAgICAgICAgICAgdHdpc3RJbml0KCc8JT1kaXZXU0lMTGlzdCU+JywnPCU9eGRpdldTSUxMaXN0JT4nKTsKLSAgICAgICAgPC9zY3JpcHQ+Ci0KLSAgICAgICAgPHRhYmxlIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTIgY2VsbHNwYWNpbmc9MD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTQwIHZhbGlnbj0iYm90dG9tIj4KLSAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGT1JNX0xBQkVMX0FERF9UT19OQVZJR0FUT1IiKSU+IiBvbkNsaWNrPSJzZXRGb3JtTG9jYXRpb25BbmRTdWJtaXQoJzwlPWRpdldTSUxMaXN0JT4nLCB0aGlzLmZvcm0sICc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoT3BlbldTSUxMaW5rQWN0aW9uLmdldEJhc2VBY3Rpb25MaW5rKCkpKSU+JykiIGNsYXNzPSJidXR0b24iPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIG5vd3JhcCB3aWR0aD0iOTAlIj4mbmJzcDs8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90YWJsZT4KLQotICAgIDwlCi0gICAgfQotJT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3dzaWxfYWN0aW9uc19jb250YWluZXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3dzaWxfYWN0aW9uc19jb250YWluZXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWNlY2MzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC93c2lsX2FjdGlvbnNfY29udGFpbmVyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX0FDVElPTlNfQ09OVEFJTkVSIiklPjwvdGl0bGU+Ci08L2hlYWQ+Ci08ZnJhbWVzZXQgcm93cz0iPCU9d3NpbFBlcnNwZWN0aXZlLmdldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoKSU+IiBiZ2NvbG9yPSIjRUNFOUQ4Ij4KLSAgPGZyYW1lIG5hbWU9IjwlPVdzaWxGcmFtZU5hbWVzLldTSUxfUFJPUEVSVElFU19DT05UQUlORVIlPiIgdGl0bGU9IjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9QUk9QRVJUSUVTX0NPTlRBSU5FUiIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKCJ3c2lsX3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcCIpJT4iIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTEgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MD4KLSAgPGZyYW1lIG5hbWU9IjwlPVdzaWxGcmFtZU5hbWVzLldTSUxfU1RBVFVTX0NPTlRBSU5FUiU+IiB0aXRsZT0iPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1NUQVRVU19DT05UQUlORVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTCgid3NpbF9zdGF0dXNfY29udGFpbmVyLmpzcCIpJT4iIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPTEgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MD4KLTwvZnJhbWVzZXQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvd3NpbF9uYXZpZ2F0b3JfY29udGFpbmVyLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC93c2lsX25hdmlnYXRvcl9jb250YWluZXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMmJhMjZiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC93c2lsX25hdmlnYXRvcl9jb250YWluZXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08L2hlYWQ+Ci08ZnJhbWVzZXQgcm93cz0iMzMsKiIgYm9yZGVyPTAgYmdjb2xvcj0iI0VDRTlEOCI+Ci0gIDxmcmFtZSBuYW1lPSI8JT1Xc2lsRnJhbWVOYW1lcy5XU0lMX05BVklHQVRPUl9UT09MQkFSJT4iIHRpdGxlPSI8JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfTkFWSUdBVE9SX1RPT0xCQVIiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTCgid3NpbF9uYXZpZ2F0b3JfdG9vbGJhci5qc3AiKSU+IiBub3Jlc2l6ZSBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci0gIDxmcmFtZSBuYW1lPSI8JT1Xc2lsRnJhbWVOYW1lcy5XU0lMX05BVklHQVRPUl9DT05URU5UJT4iIHRpdGxlPSI8JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfTkFWSUdBVE9SX0NPTlRFTlQiKSU+IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTCgid3NpbF9uYXZpZ2F0b3JfY29udGVudC5qc3AiKSU+IiBub3Jlc2l6ZSBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci08L2ZyYW1lc2V0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3dzaWxfbmF2aWdhdG9yX2NvbnRlbnQuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3dzaWxfbmF2aWdhdG9yX2NvbnRlbnQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjNjNGJjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC93c2lsX25hdmlnYXRvcl9jb250ZW50LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotJT4gICAgICAKLTxodG1sPgotPGhlYWQ+Ci0gICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICAgIDx0aXRsZT48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfTkFWSUdBVE9SX0NPTlRFTlQiKSU+PC90aXRsZT4KLSAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy90cmVldmlldy5jc3MiKSklPiI+Ci0gICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3Mvd2luZG93cy5jc3MiKSklPiI+Ci0gICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvYnJvd3NlcmRldGVjdC5qcyIpKSU+Ij4KLSAgICA8L3NjcmlwdD4KLSAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy90cmVldmlldy5qcyIpKSU+Ij4KLSAgICA8L3NjcmlwdD4KLTwvaGVhZD4KLTwlCi0gICAgU3RyaW5nIHNlbGVjdGVkQW5jaG9yTmFtZSA9ICIiOwotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKS5nZXROb2RlTWFuYWdlcigpOwotICAgIGludCBmb2N1c2VkTm9kZUlkID0gbm9kZU1hbmFnZXIuZ2V0Rm9jdXNlZE5vZGVJZCgpOwotICAgIFN0cmluZyBmb2N1c2VkQW5jaG9yTmFtZSA9IFN0cmluZy52YWx1ZU9mKGZvY3VzZWROb2RlSWQpOwotICAgIE5vZGUgc2VsZWN0ZWROb2RlID0gbm9kZU1hbmFnZXIuZ2V0U2VsZWN0ZWROb2RlKCk7Ci0gICAgaWYgKHNlbGVjdGVkTm9kZSAhPSBudWxsKSB7Ci0gICAgICAgIHNlbGVjdGVkQW5jaG9yTmFtZSA9IHNlbGVjdGVkTm9kZS5nZXRBbmNob3JOYW1lKCk7Ci0gICAgICAgIGlmIChmb2N1c2VkTm9kZUlkID09IHNlbGVjdGVkTm9kZS5nZXROb2RlSWQoKSkKLSAgICAgICAgICAgIGZvY3VzZWRBbmNob3JOYW1lID0gc2VsZWN0ZWRBbmNob3JOYW1lOwotICAgIH0KLSU+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIG9uTG9hZD0ic2VsZi5sb2NhdGlvbi5oYXNoPScjPCU9Zm9jdXNlZEFuY2hvck5hbWUlPic7c2V0U2VsZWN0ZWRBbmNob3JOYW1lKCc8JT1zZWxlY3RlZEFuY2hvck5hbWUlPicpIiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotICAgIDxkaXYgaWQ9InRyZWVjb250ZW50Ym9yZGVyIj4KLSAgICAgICAgPCU9bm9kZU1hbmFnZXIucmVuZGVyVHJlZVZpZXcocmVzcG9uc2UpJT4KLSAgICA8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC93c2lsX25hdmlnYXRvcl90b29sYmFyLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC93c2lsX25hdmlnYXRvcl90b29sYmFyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWY0MjI0NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvd3NpbF9uYXZpZ2F0b3JfdG9vbGJhci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotJT4KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwucGVyc3BlY3RpdmUuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLndzaWwuY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX05BVklHQVRPUl9UT09MQkFSIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3Rvb2xiYXIuY3NzIikpJT4iPgotPGpzcDppbmNsdWRlIHBhZ2U9Ii93c2lsL3NjcmlwdHMvd3NpbGZyYW1lc2V0cy5qc3AiIGZsdXNoPSJ0cnVlIi8+ICAKLTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJzY3JpcHRzL3Rvb2xiYXIuanMiKSklPiI+Ci08L3NjcmlwdD4gIAotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0idG9vbGJhcmJvZHltYXJnaW4iPgotPGRpdiBpZD0idG9vbGJhcmJvcmRlciI+Ci0gIDxkaXYgaWQ9InRvb2xiYXIiIG9uZGJsY2xpY2s9InByb2Nlc3NGcmFtZXNldFNpemVzKGRvY3VtZW50LmZvcm1zWzBdKSI+Ci08anNwOnVzZUJlYW4gaWQ9ImZvcm1BY3Rpb24iIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICBmb3JtQWN0aW9uLmFwcGVuZCgid3NpbC9hY3Rpb25zL1Jlc2l6ZVdTSUxGcmFtZXNBY3Rpb25KU1AuanNwIik7Ci0lPiAgCi08L2pzcDp1c2VCZWFuPgotPGpzcDp1c2VCZWFuIGlkPSJmb3JtRnJhbWVOYW1lIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgIGZvcm1GcmFtZU5hbWUuYXBwZW5kKFdzaWxGcmFtZU5hbWVzLldTSUxfTkFWSUdBVE9SX0NPTlRBSU5FUik7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NpbC9mb3Jtcy9Qcm9jZXNzV1NJTEZyYW1lc2V0c0Zvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgIDx0YWJsZSB3aWR0aD0iMTAwJSIgaGVpZ2h0PTI1IGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBib3JkZXI9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0yNSBoZWlnaHQ9MjU+PGltZyBjbGFzcz0ibm9ybWFsIiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL25hdmlnYXRvci5naWYiKSklPiIgd2lkdGg9MTYgaGVpZ2h0PTE2PjwvdGQ+Ci08JQotICAgU3RyaW5nIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBudWxsOwotICAgaWYgKHdzaWxQZXJzcGVjdGl2ZS5nZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKS5zdGFydHNXaXRoKCIxMDAlIikpCi0gICAgIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9ET1VCTEVfQ0xJQ0tfVE9fUkVTVE9SRSIpOwotICAgZWxzZQotICAgICBkb3VibGVDbGlja0NvbHVtblRpdGxlID0gY29udHJvbGxlci5nZXRNZXNzYWdlKCJBTFRfRE9VQkxFX0NMSUNLX1RPX01BWElNSVpFIik7Ci0lPiAgICAgICAgCi0gICAgICAgIDx0ZCBpZD0iZG91YmxlY2xpY2tjb2x1bW4iIHRpdGxlPSI8JT1kb3VibGVDbGlja0NvbHVtblRpdGxlJT4iIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0ibGVmdCIgd2lkdGg9IioiIGhlaWdodD0yNSBub3dyYXAgY2xhc3M9InRleHQiPjwlPWNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX05BVklHQVRPUiIpJT48L3RkPgotPCUKLSAgIFN0cmluZyBhbHRSZWZyZXNoID0gd3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkFMVF9SRUZSRVNIX1dTSUwiKTsKLSAgIFN0cmluZyBhbHRDbGVhciA9IHdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJBTFRfQ0xFQVJfV1NJTCIpOwotJT4gICAgICAgICAgIAotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiIHdpZHRoPTI1IGhlaWdodD0yNT48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzaWwvYWN0aW9ucy9SZWZyZXNoQWN0aW9uSlNQLmpzcCIpKSU+IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI+PGltZyBjbGFzcz0ibm9ybWFsIiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3JlZnJlc2hfZW5hYmxlZC5naWYiKSklPiIgd2lkdGg9MTYgaGVpZ2h0PTE2IG9uTW91c2VPdmVyPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3JlZnJlc2hfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlb3Zlcih0aGlzKSIgb25Nb3VzZU91dD0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9yZWZyZXNoX2VuYWJsZWQuZ2lmIikpJT4nO21vdXNlb3V0KHRoaXMpIiBvbk1vdXNlRG93bj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9yZWZyZXNoX2hpZ2hsaWdodGVkLmdpZiIpKSU+Jzttb3VzZWRvd24odGhpcykiIG9uTW91c2VVcD0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9yZWZyZXNoX2VuYWJsZWQuZ2lmIikpJT4nO21vdXNldXAodGhpcykiIGFsdD0iPCU9YWx0UmVmcmVzaCU+IiB0aXRsZT0iPCU9YWx0UmVmcmVzaCU+Ij48L2E+PC90ZD4KLSAgICAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0yNSBoZWlnaHQ9MjU+PGEgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJ3c2lsL2FjdGlvbnMvQ2xlYXJXU0lMQWN0aW9uSlNQLmpzcCIpKSU+IiB0YXJnZXQ9IjwlPUZyYW1lTmFtZXMuUEVSU1BFQ1RJVkVfV09SS0FSRUElPiI+PGltZyBjbGFzcz0ibm9ybWFsIiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2NsZWFyX2VuYWJsZWQuZ2lmIikpJT4iIHdpZHRoPTE2IGhlaWdodD0xNiBvbk1vdXNlT3Zlcj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9oaWdobGlnaHRlZC5naWYiKSklPic7bW91c2VvdmVyKHRoaXMpIiBvbk1vdXNlT3V0PSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2NsZWFyX2VuYWJsZWQuZ2lmIikpJT4nO21vdXNlb3V0KHRoaXMpIiBvbk1vdXNlRG93bj0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9oaWdobGlnaHRlZC5naWYiKSklPic7bW91c2Vkb3duKHRoaXMpIiBvbk1vdXNlVXA9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfZW5hYmxlZC5naWYiKSklPic7bW91c2V1cCh0aGlzKSIgYWx0PSI8JT1hbHRDbGVhciU+IiB0aXRsZT0iPCU9YWx0Q2xlYXIlPiI+PC9hPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gIDwvZGl2PgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvd3NpbF9wZXJzcGVjdGl2ZV9jb250ZW50LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC93c2lsX3BlcnNwZWN0aXZlX2NvbnRlbnQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OGRlZDRiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC93c2lsX3BlcnNwZWN0aXZlX2NvbnRlbnQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08L2hlYWQ+Ci08ZnJhbWVzZXQgY29scz0iPCU9d3NpbFBlcnNwZWN0aXZlLmdldFBlcnNwZWN0aXZlQ29udGVudEZyYW1lc2V0Q29scygpJT4iIGJnY29sb3I9IiNFQ0U5RDgiPgotICA8JQotICBpZiAob3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuaXNSVEwoKSkKLSAgewotICAlPgotICA8ZnJhbWUgbmFtZT0iPCU9V3NpbEZyYW1lTmFtZXMuV1NJTF9BQ1RJT05TX0NPTlRBSU5FUiU+IiB0aXRsZT0iPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX0FDVElPTlNfQ09OVEFJTkVSIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoIndzaWxfYWN0aW9uc19jb250YWluZXIuanNwIiklPiIgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MCBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0xPgotICA8ZnJhbWUgbmFtZT0iPCU9V3NpbEZyYW1lTmFtZXMuV1NJTF9OQVZJR0FUT1JfQ09OVEFJTkVSJT4iIHRpdGxlPSI8JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfTkFWSUdBVE9SX0NPTlRBSU5FUiIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKCJ3c2lsX25hdmlnYXRvcl9jb250YWluZXIuanNwIiklPiIgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MCBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0xPgotICA8JQotICB9Ci0gIGVsc2UKLSAgewotICAlPgotICA8ZnJhbWUgbmFtZT0iPCU9V3NpbEZyYW1lTmFtZXMuV1NJTF9OQVZJR0FUT1JfQ09OVEFJTkVSJT4iIHRpdGxlPSI8JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfTkFWSUdBVE9SX0NPTlRBSU5FUiIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKCJ3c2lsX25hdmlnYXRvcl9jb250YWluZXIuanNwIiklPiIgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MCBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0xPgotICA8ZnJhbWUgbmFtZT0iPCU9V3NpbEZyYW1lTmFtZXMuV1NJTF9BQ1RJT05TX0NPTlRBSU5FUiU+IiB0aXRsZT0iPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX0FDVElPTlNfQ09OVEFJTkVSIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoIndzaWxfYWN0aW9uc19jb250YWluZXIuanNwIiklPiIgbWFyZ2lud2lkdGg9MCBtYXJnaW5oZWlnaHQ9MCBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0xPgotICA8JQotICB9Ci0gICU+Ci08L2ZyYW1lc2V0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3dzaWxfcHJvcGVydGllc19jb250YWluZXIuanNwIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3dzaWxfcHJvcGVydGllc19jb250YWluZXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzM2ZTU0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC93c2lsX3Byb3BlcnRpZXNfY29udGFpbmVyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1BST1BFUlRJRVNfQ09OVEFJTkVSIiklPjwvdGl0bGU+Ci08L2hlYWQ+Ci08ZnJhbWVzZXQgcm93cz0iMzMsKiIgYm9yZGVyPTAgYmdjb2xvcj0iI0VDRTlEOCI+Ci0gIDxmcmFtZSBuYW1lPSI8JT1Xc2lsRnJhbWVOYW1lcy5XU0lMX1BST1BFUlRJRVNfVE9PTEJBUiU+IiB0aXRsZT0iPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1BST1BFUlRJRVNfVE9PTEJBUiIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKCJ3c2lsX3Byb3BlcnRpZXNfdG9vbGJhci5qc3AiKSU+IiBub3Jlc2l6ZSBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci0gIDxmcmFtZSBuYW1lPSI8JT1Xc2lsRnJhbWVOYW1lcy5XU0lMX1BST1BFUlRJRVNfQ09OVEVOVCU+IiB0aXRsZT0iPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1BST1BFUlRJRVNfQ09OVEVOVCIpJT4iIHNyYz0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKCJ3c2lsX3Byb3BlcnRpZXNfY29udGVudC5qc3AiKSU+IiBub3Jlc2l6ZSBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0wIG1hcmdpbndpZHRoPTAgbWFyZ2luaGVpZ2h0PTA+Ci08L2ZyYW1lc2V0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3dzaWxfcHJvcGVydGllc19jb250ZW50LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC93c2lsX3Byb3BlcnRpZXNfY29udGVudC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3MmNjNzQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3dzaWxfcHJvcGVydGllc19jb250ZW50LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0uY29uc3RhbnRzLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfUFJPUEVSVElFU19DT05URU5UIiklPjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiY3NzL3dpbmRvd3MuY3NzIikpJT4iPgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0iY29udGVudGJvZHltYXJnaW4iPgotPGRpdiBpZD0iY29udGVudGJvcmRlciI+Ci08JQotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gd3NpbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBpZiAoc2VsZWN0ZWROb2RlICE9IG51bGwpCi0gICAgewotICAgICAgICBUb29sTWFuYWdlciB0b29sTWFuYWdlcjsKLSAgICAgICAgaWYgKHNlbGVjdGVkTm9kZS5nZXRWaWV3SWQoKSA9PSBBY3Rpb25JbnB1dHMuVklFV0lEX0RFRkFVTFQpCi0gICAgICAgICAgICB0b29sTWFuYWdlciA9IHNlbGVjdGVkTm9kZS5nZXRUb29sTWFuYWdlcigpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0b29sTWFuYWdlciA9IHNlbGVjdGVkTm9kZS5nZXRWaWV3VG9vbE1hbmFnZXIoKTsKLSAgICAgICAgVG9vbCBzZWxlY3RlZFRvb2wgPSB0b29sTWFuYWdlci5nZXRTZWxlY3RlZFRvb2woKTsKLSAgICAgICAgaWYgKHNlbGVjdGVkVG9vbCAhPSBudWxsICYmIHNlbGVjdGVkVG9vbC5nZXRUb29sVHlwZSgpICE9IFRvb2xUeXBlcy5BQ1RJT04pIHsKLSAgICAgICAgJT4KLSAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Ci0gICAgICAgICAgICBsb2NhdGlvbj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KHNlbGVjdGVkVG9vbC5nZXRGb3JtTGluaygpKSklPiI7Ci0gICAgICAgIDwvc2NyaXB0PgotICAgICAgICA8JQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAlPgotPHRhYmxlPgotICA8dHI+Ci0gICAgPHRkPgotICAgICAgPCU9Y29udHJvbGxlci5nZXRNZXNzYWdlKCJNU0dfRVJST1JfTk9fQUNUSU9OX1NFTEVDVEVEIiklPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotICAgICAgICA8JQotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgewotICAgICU+Ci08dGFibGU+Ci0gIDx0cj4KLSAgICA8dGQ+Ci0gICAgICA8JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIk1TR19FUlJPUl9OT19OT0RFX1NFTEVDVEVEIiklPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotICAgIDwlCi0gICAgfQotJT4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3dzaWxfcHJvcGVydGllc190b29sYmFyLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC93c2lsX3Byb3BlcnRpZXNfdG9vbGJhci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5YWE1MDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3dzaWxfcHJvcGVydGllc190b29sYmFyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLTwlCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5jb25zdGFudHMuKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5jb25zdGFudHMuKiIgJT4KLQotPGpzcDp1c2VCZWFuIGlkPSJjb250cm9sbGVyIiBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnBlcnNwZWN0aXZlLkNvbnRyb2xsZXIiIHNjb3BlPSJzZXNzaW9uIi8+Ci08JQotICAgV1NJTFBlcnNwZWN0aXZlIHdzaWxQZXJzcGVjdGl2ZSA9IGNvbnRyb2xsZXIuZ2V0V1NJTFBlcnNwZWN0aXZlKCk7Ci0lPiAgIAotPGh0bWw+Ci08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotICA8dGl0bGU+PCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1BST1BFUlRJRVNfVE9PTEJBUiIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy90b29sYmFyLmNzcyIpKSU+Ij4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NpbC9zY3JpcHRzL3dzaWxmcmFtZXNldHMuanNwIiBmbHVzaD0idHJ1ZSIvPiAgCi08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgic2NyaXB0cy90b29sYmFyLmpzIikpJT4iPgotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBkaXI9IjwlPW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLkRpclV0aWxzLmdldERpcigpJT4iIGNsYXNzPSJ0b29sYmFyYm9keW1hcmdpbiI+Ci08ZGl2IGlkPSJ0b29sYmFyYm9yZGVyIj4KLSAgPGRpdiBpZD0idG9vbGJhciIgb25kYmxjbGljaz0icHJvY2Vzc0ZyYW1lc2V0U2l6ZXMoZG9jdW1lbnQuZm9ybXNbMF0pIj4KLTxqc3A6dXNlQmVhbiBpZD0iZm9ybUFjdGlvbiIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmdCdWZmZXIiIHNjb3BlPSJyZXF1ZXN0Ij4KLTwlCi0gIGZvcm1BY3Rpb24uYXBwZW5kKCJ3c2lsL2FjdGlvbnMvUmVzaXplV1NJTEZyYW1lc0FjdGlvbkpTUC5qc3AiKTsKLSU+ICAKLTwvanNwOnVzZUJlYW4+Ci08anNwOnVzZUJlYW4gaWQ9ImZvcm1GcmFtZU5hbWUiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICAgZm9ybUZyYW1lTmFtZS5hcHBlbmQoV3NpbEZyYW1lTmFtZXMuV1NJTF9QUk9QRVJUSUVTX0NPTlRBSU5FUik7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NpbC9mb3Jtcy9Qcm9jZXNzV1NJTEZyYW1lc2V0c0Zvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgIDx0YWJsZSB3aWR0aD0iMTAwJSIgaGVpZ2h0PTI1IGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBib3JkZXI9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0yNSBoZWlnaHQ9MjU+PGltZyBjbGFzcz0ibm9ybWFsIiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2FjdGlvbnMuZ2lmIikpJT4iIHdpZHRoPTE2IGhlaWdodD0xNj48L3RkPgotPCUKLSAgIFN0cmluZyBkb3VibGVDbGlja0NvbHVtblRpdGxlID0gbnVsbDsKLSAgIGlmICh3c2lsUGVyc3BlY3RpdmUuZ2V0UGVyc3BlY3RpdmVDb250ZW50RnJhbWVzZXRDb2xzKCkuZW5kc1dpdGgoIjEwMCUiKSkKLSAgIHsKLSAgICAgaWYgKHdzaWxQZXJzcGVjdGl2ZS5nZXRBY3Rpb25zQ29udGFpbmVyRnJhbWVzZXRSb3dzKCkuc3RhcnRzV2l0aCgiMTAwJSIpKQotICAgICAgIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9ET1VCTEVfQ0xJQ0tfVE9fUkVTVE9SRSIpOwotICAgfQotICAgaWYgKGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPT0gbnVsbCkKLSAgICAgZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0RPVUJMRV9DTElDS19UT19NQVhJTUlaRSIpOwotJT4gICAgICAgIAotICAgICAgICA8dGQgaWQ9ImRvdWJsZWNsaWNrY29sdW1uIiB0aXRsZT0iPCU9ZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSU+IiB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImxlZnQiIHdpZHRoPSIqIiBoZWlnaHQ9MjUgbm93cmFwIGNsYXNzPSJ0ZXh0Ij48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9BQ1RJT05TIiklPjwvdGQ+Ci08JQotICAgIE5vZGVNYW5hZ2VyIG5vZGVNYW5hZ2VyID0gd3NpbFBlcnNwZWN0aXZlLmdldE5vZGVNYW5hZ2VyKCk7Ci0gICAgTm9kZSBzZWxlY3RlZE5vZGUgPSBub2RlTWFuYWdlci5nZXRTZWxlY3RlZE5vZGUoKTsKLSAgICBpZiAoc2VsZWN0ZWROb2RlICE9IG51bGwpIHsKLSAgICAgICAgVG9vbE1hbmFnZXIgdG9vbE1hbmFnZXI7Ci0gICAgICAgIGlmIChzZWxlY3RlZE5vZGUuZ2V0Vmlld0lkKCkgPT0gQWN0aW9uSW5wdXRzLlZJRVdJRF9ERUZBVUxUKQotICAgICAgICAgICAgdG9vbE1hbmFnZXIgPSBzZWxlY3RlZE5vZGUuZ2V0VG9vbE1hbmFnZXIoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdG9vbE1hbmFnZXIgPSBzZWxlY3RlZE5vZGUuZ2V0Vmlld1Rvb2xNYW5hZ2VyKCk7Ci0gICAgICAgIGZvcihpbnQgaT0wOyBpPHRvb2xNYW5hZ2VyLmdldE51bWJlck9mVG9vbHMoKTsgaSsrKSB7Ci0gICAgICAgICAgICBUb29sIHRvb2wgPSAoVG9vbCl0b29sTWFuYWdlci5nZXRUb29sKGkpOwotICAgICAgICAgICAgJT4KLSAgICAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0yNSBoZWlnaHQ9MjU+PCU9dG9vbC5yZW5kZXJUb29sKHJlc3BvbnNlLGNvbnRyb2xsZXIpJT48L3RkPgotICAgICAgICAgICAgPCUKLSAgICAgICAgfQotICAgIH0KLSU+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gIDwvZGl2PgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvd3NpbF9zdGF0dXNfY29udGFpbmVyLmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC93c2lsX3N0YXR1c19jb250YWluZXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDgzNGM1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC93c2lsX3N0YXR1c19jb250YWluZXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfU1RBVFVTX0NPTlRBSU5FUiIpJT48L3RpdGxlPgotPC9oZWFkPgotPGZyYW1lc2V0IHJvd3M9IjMzLCoiIGJvcmRlcj0wIGJnY29sb3I9IiNFQ0U5RDgiPgotICA8ZnJhbWUgbmFtZT0iPCU9V3NpbEZyYW1lTmFtZXMuV1NJTF9TVEFUVVNfVE9PTEJBUiU+IiB0aXRsZT0iPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1NUQVRVU19UT09MQkFSIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoIndzaWxfc3RhdHVzX3Rvb2xiYXIuanNwIiklPiIgbm9yZXNpemUgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MCBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wPgotICA8ZnJhbWUgbmFtZT0iPCU9V3NpbEZyYW1lTmFtZXMuV1NJTF9TVEFUVVNfQ09OVEVOVCU+IiB0aXRsZT0iPCU9d3NpbFBlcnNwZWN0aXZlLmdldE1lc3NhZ2UoIkZSQU1FX1RJVExFX1NUQVRVU19DT05URU5UIiklPiIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoIndzaWxfc3RhdHVzX2NvbnRlbnQuanNwIiklPiIgbm9yZXNpemUgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9MCBtYXJnaW53aWR0aD0wIG1hcmdpbmhlaWdodD0wPgotPC9mcmFtZXNldD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC93c2lsX3N0YXR1c19jb250ZW50LmpzcCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLmV4cGxvcmVyL3dzZXhwbG9yZXIvd3NpbC93c2lsX3N0YXR1c19jb250ZW50LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTUxNDRmOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvd3NpbF9zdGF0dXNfY29udGVudC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi08JQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyNyAgIDEyNzQ0MyBqZXNwZXJAc2Vsc2thYmV0Lm9yZyAtIEplc3BlciBTIE1vbGxlcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0lPgotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaW1wb3J0PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ud3NpbC5wZXJzcGVjdGl2ZS4qLAotCW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS51dGlsLioiICU+Ci0KLTxqc3A6dXNlQmVhbiBpZD0iY29udHJvbGxlciIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS5wZXJzcGVjdGl2ZS5Db250cm9sbGVyIiBzY29wZT0ic2Vzc2lvbiIvPgotPCUKLSAgIFdTSUxQZXJzcGVjdGl2ZSB3c2lsUGVyc3BlY3RpdmUgPSBjb250cm9sbGVyLmdldFdTSUxQZXJzcGVjdGl2ZSgpOwotJT4gICAKLTxodG1sPgotPGhlYWQ+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLSAgPHRpdGxlPjwlPXdzaWxQZXJzcGVjdGl2ZS5nZXRNZXNzYWdlKCJGUkFNRV9USVRMRV9TVEFUVVNfQ09OVEVOVCIpJT48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImNzcy93aW5kb3dzLmNzcyIpKSU+Ij4KLTwvaGVhZD4KLTxib2R5IGRpcj0iPCU9b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBsYXRmb3JtLnV0aWwuRGlyVXRpbHMuZ2V0RGlyKCklPiIgY2xhc3M9ImNvbnRlbnRib2R5bWFyZ2luIj4KLTxkaXYgaWQ9ImNvbnRlbnRib3JkZXIiPgotICA8dGFibGU+Ci0gICAgPHRyPgotICAgICAgPHRkPgotICAgICAgICA8cHJlPgotPCU9SFRNTFV0aWxzLmNoYXJhY3RlcnNUb0hUTUxFbnRpdGllc1N0cmljdCh3c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZVF1ZXVlKCkuZ2V0TWVzc2FnZXNGcm9tTGlzdCgpKSU+Ci0gICAgICAgIDwvcHJlPgotICAgICAgPC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvd3NpbF9zdGF0dXNfdG9vbGJhci5qc3AgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5leHBsb3Jlci93c2V4cGxvcmVyL3dzaWwvd3NpbF9zdGF0dXNfdG9vbGJhci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkNGYzMGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MuZXhwbG9yZXIvd3NleHBsb3Jlci93c2lsL3dzaWxfc3RhdHVzX3Rvb2xiYXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotPCUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSU+Ci08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBpbXBvcnQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLnBlcnNwZWN0aXZlLiosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHBsb3Jlci5wbGF0Zm9ybS53c2lsLmNvbnN0YW50cy4qIiAlPgotCi08anNwOnVzZUJlYW4gaWQ9ImNvbnRyb2xsZXIiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0ucGVyc3BlY3RpdmUuQ29udHJvbGxlciIgc2NvcGU9InNlc3Npb24iLz4KLTwlCi0gICBXU0lMUGVyc3BlY3RpdmUgd3NpbFBlcnNwZWN0aXZlID0gY29udHJvbGxlci5nZXRXU0lMUGVyc3BlY3RpdmUoKTsKLSU+ICAgCi08aHRtbD4KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci0gIDx0aXRsZT48JT13c2lsUGVyc3BlY3RpdmUuZ2V0TWVzc2FnZSgiRlJBTUVfVElUTEVfU1RBVFVTX1RPT0xCQVIiKSU+PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJjc3MvdG9vbGJhci5jc3MiKSklPiI+Ci08anNwOmluY2x1ZGUgcGFnZT0iL3dzaWwvc2NyaXB0cy93c2lsZnJhbWVzZXRzLmpzcCIgZmx1c2g9InRydWUiLz4gIAotPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoInNjcmlwdHMvdG9vbGJhci5qcyIpKSU+Ij4KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgZGlyPSI8JT1vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucGxhdGZvcm0udXRpbC5EaXJVdGlscy5nZXREaXIoKSU+IiBjbGFzcz0idG9vbGJhcmJvZHltYXJnaW4iPgotPGRpdiBpZD0idG9vbGJhcmJvcmRlciI+Ci0gIDxkaXYgaWQ9InRvb2xiYXIiIG9uZGJsY2xpY2s9InByb2Nlc3NGcmFtZXNldFNpemVzKGRvY3VtZW50LmZvcm1zWzBdKSI+Ci08anNwOnVzZUJlYW4gaWQ9ImZvcm1BY3Rpb24iIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIiBzY29wZT0icmVxdWVzdCI+Ci08JQotICBmb3JtQWN0aW9uLmFwcGVuZCgid3NpbC9hY3Rpb25zL1Jlc2l6ZVdTSUxGcmFtZXNBY3Rpb25KU1AuanNwIik7Ci0lPiAgCi08L2pzcDp1c2VCZWFuPgotPGpzcDp1c2VCZWFuIGlkPSJmb3JtRnJhbWVOYW1lIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZ0J1ZmZlciIgc2NvcGU9InJlcXVlc3QiPgotPCUKLSAgIGZvcm1GcmFtZU5hbWUuYXBwZW5kKFdzaWxGcmFtZU5hbWVzLldTSUxfU1RBVFVTX0NPTlRBSU5FUik7Ci0lPgotPC9qc3A6dXNlQmVhbj4KLTxqc3A6aW5jbHVkZSBwYWdlPSIvd3NpbC9mb3Jtcy9Qcm9jZXNzV1NJTEZyYW1lc2V0c0Zvcm0uanNwIiBmbHVzaD0idHJ1ZSIvPgotICAgIDx0YWJsZSB3aWR0aD0iMTAwJSIgaGVpZ2h0PTI1IGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBib3JkZXI9MD4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0yNSBoZWlnaHQ9MjU+PGltZyBjbGFzcz0ibm9ybWFsIiBzcmM9IjwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL3N0YXR1cy5naWYiKSklPiIgd2lkdGg9MTYgaGVpZ2h0PTE2PjwvdGQ+Ci08JQotICAgU3RyaW5nIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBudWxsOwotICAgaWYgKHdzaWxQZXJzcGVjdGl2ZS5nZXRQZXJzcGVjdGl2ZUNvbnRlbnRGcmFtZXNldENvbHMoKS5lbmRzV2l0aCgiMTAwJSIpKQotICAgewotICAgICBpZiAod3NpbFBlcnNwZWN0aXZlLmdldEFjdGlvbnNDb250YWluZXJGcmFtZXNldFJvd3MoKS5lbmRzV2l0aCgiMTAwJSIpKQotICAgICAgIGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9ET1VCTEVfQ0xJQ0tfVE9fUkVTVE9SRSIpOwotICAgfQotICAgaWYgKGRvdWJsZUNsaWNrQ29sdW1uVGl0bGUgPT0gbnVsbCkKLSAgICAgZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSA9IGNvbnRyb2xsZXIuZ2V0TWVzc2FnZSgiQUxUX0RPVUJMRV9DTElDS19UT19NQVhJTUlaRSIpOwotJT4gICAgICAgIAotICAgICAgICA8dGQgaWQ9ImRvdWJsZWNsaWNrY29sdW1uIiB0aXRsZT0iPCU9ZG91YmxlQ2xpY2tDb2x1bW5UaXRsZSU+IiB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImxlZnQiIHdpZHRoPSIqIiBoZWlnaHQ9MjUgbm93cmFwIGNsYXNzPSJ0ZXh0Ij48JT1jb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9TVEFUVVMiKSU+PC90ZD4KLTwlCi0gICBTdHJpbmcgYWx0Q2xlYXIgPSBjb250cm9sbGVyLmdldE1lc3NhZ2UoIkFMVF9DTEVBUiIpOwotJT4gICAgICAgICAgIAotICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiIHdpZHRoPTI1IGhlaWdodD0yNT48YSBocmVmPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoIndzaWwvd3NpbF9zdGF0dXNfY29udGVudC5qc3AiKSklPiIgdGFyZ2V0PSI8JT1Xc2lsRnJhbWVOYW1lcy5XU0lMX1NUQVRVU19DT05URU5UJT4iPjxpbWcgY2xhc3M9Im5vcm1hbCIgc3JjPSI8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9lbmFibGVkLmdpZiIpKSU+IiB3aWR0aD0xNiBoZWlnaHQ9MTYgb25Nb3VzZU92ZXI9InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlb3Zlcih0aGlzKSIgb25Nb3VzZU91dD0ic3JjPSc8JT1yZXNwb25zZS5lbmNvZGVVUkwoY29udHJvbGxlci5nZXRQYXRoV2l0aENvbnRleHQoImltYWdlcy9jbGVhcl9lbmFibGVkLmdpZiIpKSU+Jzttb3VzZW91dCh0aGlzKSIgb25Nb3VzZURvd249InNyYz0nPCU9cmVzcG9uc2UuZW5jb2RlVVJMKGNvbnRyb2xsZXIuZ2V0UGF0aFdpdGhDb250ZXh0KCJpbWFnZXMvY2xlYXJfaGlnaGxpZ2h0ZWQuZ2lmIikpJT4nO21vdXNlZG93bih0aGlzKSIgb25Nb3VzZVVwPSJzcmM9JzwlPXJlc3BvbnNlLmVuY29kZVVSTChjb250cm9sbGVyLmdldFBhdGhXaXRoQ29udGV4dCgiaW1hZ2VzL2NsZWFyX2VuYWJsZWQuZ2lmIikpJT4nO21vdXNldXAodGhpcykiIGFsdD0iPCU9YWx0Q2xlYXIlPiIgdGl0bGU9IjwlPWFsdENsZWFyJT4iPjwvYT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICA8L2Rpdj4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyLy5jbGFzc3BhdGggYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2U3MzkzMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNCIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGI5YjJlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1iaW4KLS5jZHRwcm9qZWN0Ci1idWlsZC54bWwKLXRlbXAuZm9sZGVyCi1wYXJzZXIuamFyCi1AZG90Ci1zcmMuemlwCi1qYXZhQ29tcGlsZXIuLi5hcmdzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvLnByb2plY3QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlYjY2NDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlcjwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWIwN2Q5ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotI1dlZCBKdW4gMDYgMTQ6MzM6NTMgRURUIDIwMDcKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjViMGI2OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSNNb24gSmFuIDMwIDEwOjM5OjU5IEVTVCAyMDA2Ci1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0xCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0xCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGEzNTk4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVQTFVHSU5fTkFNRQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlcgotQnVuZGxlLVZlcnNpb246IDEuMC4yMDEucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLnBsdWdpbi5QYXJzZXJQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVQTFVHSU5fUFJPVklERVIKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZGlzY287eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmRpc2NvdmVyeTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZmF2b3JpdGVzO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5wbHVnaW47eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2Uud3N0LndzZGw7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIGphdmF4LndzZGw7YnVuZGxlLXZlcnNpb249IlsxLjQuMCwxLjUuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmFwYWNoZS53c2lsNGo7YnVuZGxlLXZlcnNpb249IlsxLjAuMCwxLjEuMCkiLAotIG9yZy51ZGRpNGo7YnVuZGxlLXZlcnNpb249IlsyLjAuNCwyLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIgotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL2Fib3V0Lmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkYjM2ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL2J1aWxkLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTMyM2Q3MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLWJpbi5pbmNsdWRlcyA9IC4sXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwKLXNvdXJjZS4uID0gc3JjLwotb3V0cHV0Li4gPSBiaW4vCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvcGx1Z2luLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5NWFjNmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgTWVzc2FnZXMgaW4gcGx1Z2luLnhtbC4KLSMKLVBMVUdJTl9OQU1FPVdlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBQYXJzZXIKLVBMVUdJTl9QUk9WSURFUj1FY2xpcHNlLm9yZwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Rpc2NvL0RJU0NPQ29udHJhY3RSZWZlcmVuY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9kaXNjby9ESVNDT0NvbnRyYWN0UmVmZXJlbmNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiYjQwYTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Rpc2NvL0RJU0NPQ29udHJhY3RSZWZlcmVuY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5kaXNjbzsKLQotcHVibGljIGNsYXNzIERJU0NPQ29udHJhY3RSZWZlcmVuY2UgZXh0ZW5kcyBESVNDT1JlZmVyZW5jZQotewotICBwcml2YXRlIFN0cmluZyBkb2NSZWZfOwotICAKLSAgcHVibGljIERJU0NPQ29udHJhY3RSZWZlcmVuY2UoU3RyaW5nIHJlZixTdHJpbmcgZG9jUmVmKQotICB7Ci0gICAgc3VwZXIocmVmKTsKLSAgICBkb2NSZWZfID0gZG9jUmVmOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldERvY1JlZigpCi0gIHsKLSAgICByZXR1cm4gZG9jUmVmXzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Rpc2NvL0RJU0NPUGFyc2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZGlzY28vRElTQ09QYXJzZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWM1YjdiOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZGlzY28vRElTQ09QYXJzZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZGlzY287Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlcjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotaW1wb3J0IG9yZy54bWwuc2F4LklucHV0U291cmNlOwotCi0vKioKLSAqIFNlZSBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL21zZG5tYWcvaXNzdWVzLzAyLzAyL3htbC9kZWZhdWx0LmFzcHggZm9yIG1vcmUKLSAqIGRldGFpbHMgb24gRElTQ08uCi0gKi8KLXB1YmxpYyBjbGFzcyBESVNDT1BhcnNlcgotewotICBwcml2YXRlIERvY3VtZW50QnVpbGRlciBwYXJzZXJfOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBOU19ESVNDTyA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9kaXNjby8iOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBESVNDT1ZFUlkgPSAiZGlzY292ZXJ5IjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgRElTQ09WRVJZX1JFRiA9ICJkaXNjb3ZlcnlSZWYiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBOU19DT05UUkFDVF9SRUYgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvZGlzY28vc2NsLyI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIENPTlRSQUNUX1JFRiA9ICJjb250cmFjdFJlZiI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFJFRiA9ICJyZWYiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBET0NfUkVGID0gImRvY1JlZiI7Ci0KLSAgcHVibGljIERJU0NPUGFyc2VyKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIERvY3VtZW50QnVpbGRlckZhY3RvcnkgZG9jQnVpbGRlckZhY3RvcnkgPSBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0gICAgICBkb2NCdWlsZGVyRmFjdG9yeS5zZXROYW1lc3BhY2VBd2FyZSh0cnVlKTsKLSAgICAgIHBhcnNlcl8gPSBkb2NCdWlsZGVyRmFjdG9yeS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gcGNlKQotICAgIHsKLSAgICAgIHBhcnNlcl8gPSBudWxsOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBESVNDT1JlZmVyZW5jZVtdIHBhcnNlKFN0cmluZyBkaXNjb1VSSSwgSW5wdXRTb3VyY2Ugc291cmNlKSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICBpZiAocGFyc2VyXyAhPSBudWxsKQotICAgIHsKLSAgICAgIERvY3VtZW50IGRvYyA9IHBhcnNlcl8ucGFyc2Uoc291cmNlKTsKLSAgICAgIEVsZW1lbnQgcm9vdEVsZW1lbnQgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICAvLyBSb290IGVsZW1lbnQgbXVzdCBieSA8ZGlzY286ZGlzY292ZXJ5Ci0gICAgICAvLyB4bWxuczpkaXNjbz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvZGlzY28vIj4KLSAgICAgIGlmIChyb290RWxlbWVudCAhPSBudWxsICYmIHJvb3RFbGVtZW50LmdldE5hbWVzcGFjZVVSSSgpLmVxdWFscyhOU19ESVNDTykgJiYgcm9vdEVsZW1lbnQuZ2V0TG9jYWxOYW1lKCkuZXF1YWxzKERJU0NPVkVSWSkpCi0gICAgICB7Ci0gICAgICAgIE5vZGVMaXN0IGNoaWxkTm9kZXMgPSByb290RWxlbWVudC5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICAgIFZlY3RvciBkaXNjb1JlZmVyZW5jZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGROb2Rlcy5nZXRMZW5ndGgoKTsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgTm9kZSBjaGlsZE5vZGUgPSBjaGlsZE5vZGVzLml0ZW0oaSk7Ci0gICAgICAgICAgaWYgKGNoaWxkTm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQpCi0gICAgICAgICAgewotICAgICAgICAgICAgRWxlbWVudCBlbGVtZW50ID0gKEVsZW1lbnQpY2hpbGROb2RlOwotICAgICAgICAgICAgU3RyaW5nIGxvY2FsTmFtZSA9IGVsZW1lbnQuZ2V0TG9jYWxOYW1lKCk7Ci0gICAgICAgICAgICBTdHJpbmcgbnNVUkkgPSBlbGVtZW50LmdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgICAgICAgaWYgKG5zVVJJLmVxdWFscyhOU19ESVNDTykgJiYgbG9jYWxOYW1lLmVxdWFscyhESVNDT1ZFUllfUkVGKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gRElTQ08gbGluay4KLSAgICAgICAgICAgICAgU3RyaW5nIHJlZiA9IGNvbnZlcnRUb0Fic29sdXRlVVJJKGRpc2NvVVJJLCBlbGVtZW50LmdldEF0dHJpYnV0ZShSRUYpKTsKLSAgICAgICAgICAgICAgZGlzY29SZWZlcmVuY2VzLmFkZEVsZW1lbnQobmV3IERJU0NPUmVmZXJlbmNlKHJlZikpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobnNVUkkuZXF1YWxzKE5TX0NPTlRSQUNUX1JFRikgJiYgbG9jYWxOYW1lLmVxdWFscyhDT05UUkFDVF9SRUYpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvLyBXU0RMIGxpbmsuCi0gICAgICAgICAgICAgIFN0cmluZyByZWYgPSBjb252ZXJ0VG9BYnNvbHV0ZVVSSShkaXNjb1VSSSwgZWxlbWVudC5nZXRBdHRyaWJ1dGUoUkVGKSk7Ci0gICAgICAgICAgICAgIFN0cmluZyBkb2NSZWYgPSBjb252ZXJ0VG9BYnNvbHV0ZVVSSShkaXNjb1VSSSwgZWxlbWVudC5nZXRBdHRyaWJ1dGUoRE9DX1JFRikpOwotICAgICAgICAgICAgICBkaXNjb1JlZmVyZW5jZXMuYWRkRWxlbWVudChuZXcgRElTQ09Db250cmFjdFJlZmVyZW5jZShyZWYsIGRvY1JlZikpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpbnQgbnVtYmVyT2ZESVNDT1JlZmVyZW5jZXMgPSBkaXNjb1JlZmVyZW5jZXMuc2l6ZSgpOwotICAgICAgICBpZiAobnVtYmVyT2ZESVNDT1JlZmVyZW5jZXMgPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgRElTQ09SZWZlcmVuY2VbXSByZWZlcmVuY2VzID0gbmV3IERJU0NPUmVmZXJlbmNlW251bWJlck9mRElTQ09SZWZlcmVuY2VzXTsKLSAgICAgICAgICBkaXNjb1JlZmVyZW5jZXMuY29weUludG8ocmVmZXJlbmNlcyk7Ci0gICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXM7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gVGhlIGRvY3VtZW50IGlzIG5vdCBhIHZhbGlkIERJU0NPIGRvY3VtZW50LgotICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgY29udmVydFRvQWJzb2x1dGVVUkkoU3RyaW5nIGRpc2NvVVJJLCBTdHJpbmcgcmVmVVJJKQotICB7Ci0gICAgaWYgKHJlZlVSSSAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChyZWZVUkkuaW5kZXhPZigiOi8vIikgPiAtMSkKLSAgICAgIHsKLSAgICAgICAgLy8gcmVmVVJJIGlzIGFscmVhZHkgYWJzb2x1dGUuCi0gICAgICAgIHJldHVybiByZWZVUkk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIFN0cmluZ0J1ZmZlciBhYnNvbHV0ZVVSSSA9IG5ldyBTdHJpbmdCdWZmZXIoZGlzY29VUkkuc3Vic3RyaW5nKDAsIE1hdGgubWF4KGRpc2NvVVJJLmxhc3RJbmRleE9mKCdcXCcpLCBkaXNjb1VSSS5sYXN0SW5kZXhPZignLycpICsgMSkpKTsKLSAgICAgICAgYWJzb2x1dGVVUkkuYXBwZW5kKHJlZlVSSSk7Ci0gICAgICAgIHJldHVybiBhYnNvbHV0ZVVSSS50b1N0cmluZygpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Rpc2NvL0RJU0NPUmVmZXJlbmNlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZGlzY28vRElTQ09SZWZlcmVuY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRlZDNjMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZGlzY28vRElTQ09SZWZlcmVuY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5kaXNjbzsKLQotcHVibGljIGNsYXNzIERJU0NPUmVmZXJlbmNlCi17Ci0gIHByaXZhdGUgU3RyaW5nIHJlZl87Ci0gIAotICBwdWJsaWMgRElTQ09SZWZlcmVuY2UoU3RyaW5nIHJlZikKLSAgewotICAgIHJlZl8gPSByZWY7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVmKCkKLSAgewotICAgIHJldHVybiByZWZfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZGlzY292ZXJ5L05ldFV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZGlzY292ZXJ5L05ldFV0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1ZjA0YTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Rpc2NvdmVyeS9OZXRVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmRpc2NvdmVyeTsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEubmV0LlVSTENvbm5lY3Rpb247Ci0KLWltcG9ydCBzdW4ubWlzYy5CQVNFNjRFbmNvZGVyOwotCi1wdWJsaWMgZmluYWwgY2xhc3MgTmV0VXRpbHMKLXsKLQotICAvKioKLSAgICogR2V0IHRoZSBqYXZhLm5ldC5VUkxDb25uZWN0aW9uIGdpdmVuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgVVJMLiBUaGlzIGNsYXNzIGVuc3VyZXMKLSAgICogdGhhdCBwcm94eSBzZXR0aW5ncyBpbiBXU0FEIGFyZSByZXNwZWN0ZWQuCi0gICAqIEBwYXJhbSB1cmxTdHJpbmcgU3RyaW5nIHJlcHJlc2VudGluZyB0aGUgVVJMLgotICAgKiBAcmV0dXJuIGphdmEubmV0LlVSTENEb25uZWN0aW9uIFVSTENvbm5lY3Rpb24gdG8gdGhlIFVSTC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgVVJMQ29ubmVjdGlvbiBnZXRVUkxDb25uZWN0aW9uKFN0cmluZyB1cmxTdHJpbmcpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBVUkwgdXJsID0gY3JlYXRlVVJMKHVybFN0cmluZyk7Ci0gICAgICBVUkxDb25uZWN0aW9uIHVjID0gdXJsLm9wZW5Db25uZWN0aW9uKCk7Ci0gICAgICBTdHJpbmcgcHJveHlVc2VyTmFtZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgiaHR0cC5wcm94eVVzZXJOYW1lIik7Ci0gICAgICBTdHJpbmcgcHJveHlQYXNzd29yZCA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgiaHR0cC5wcm94eVBhc3N3b3JkIik7Ci0gICAgICBpZiAocHJveHlVc2VyTmFtZSAhPSBudWxsICYmIHByb3h5UGFzc3dvcmQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nQnVmZmVyIHVzZXJOYW1lUGFzc3dvcmQgPSBuZXcgU3RyaW5nQnVmZmVyKHByb3h5VXNlck5hbWUpOwotICAgICAgICB1c2VyTmFtZVBhc3N3b3JkLmFwcGVuZCgnOicpLmFwcGVuZChwcm94eVBhc3N3b3JkKTsKLSAgICAgICAgQkFTRTY0RW5jb2RlciBlbmNvZGVyID0gbmV3IEJBU0U2NEVuY29kZXIoKTsKLSAgICAgICAgU3RyaW5nIGVuY29kaW5nID0gZW5jb2Rlci5lbmNvZGUodXNlck5hbWVQYXNzd29yZC50b1N0cmluZygpLmdldEJ5dGVzKCkpOwotICAgICAgICB1c2VyTmFtZVBhc3N3b3JkLnNldExlbmd0aCgwKTsKLSAgICAgICAgdXNlck5hbWVQYXNzd29yZC5hcHBlbmQoIkJhc2ljICIpLmFwcGVuZChlbmNvZGluZyk7Ci0gICAgICAgIHVjLnNldFJlcXVlc3RQcm9wZXJ0eSgiUHJveHktYXV0aG9yaXphdGlvbiIsdXNlck5hbWVQYXNzd29yZC50b1N0cmluZygpKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiB1YzsKLSAgICB9Ci0gICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgewotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgamF2YS5pby5JbnB1dFN0cmVhbSBmb3IgYSBVUkwgZ2l2ZW4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBVUkwuIFRoaXMgY2xhc3MKLSAgICogZW5zdXJlcyB0aGF0IHByb3h5IHNldHRpbmdzIGluIFdTQUQgYXJlIHJlc3BlY3RlZC4KLSAgICogQHBhcmFtIHVybFN0cmluZyBTdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBVUkwuCi0gICAqIEByZXR1cm4gamF2YS5pby5JbnB1dFN0cmVhbSBJbnB1dFN0cmVhbSBmb3IgcmVhZGluZyB0aGUgVVJMIHN0cmVhbS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgSW5wdXRTdHJlYW0gZ2V0VVJMSW5wdXRTdHJlYW0oU3RyaW5nIHVybFN0cmluZykKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIFVSTENvbm5lY3Rpb24gdWMgPSBnZXRVUkxDb25uZWN0aW9uKHVybFN0cmluZyk7Ci0gICAgICBpZiAodWMgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSB1Yy5nZXRJbnB1dFN0cmVhbSgpOwotICAgICAgICByZXR1cm4gaXM7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgIHsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIGEgVVJMIGZyb20gYSBzdHJpbmcuCi0gICAqIEBwYXJhbSB1cmxTdHJpbmcgU3RyaW5nIHJlcHJlc2VudGluZyB0aGUgVVJMLgotICAgKiBAcmV0dXJuIFVSTCBqYXZhLmxhbmcuVVJMIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBVUkwuCi0gICAqIEB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFVSTCBjcmVhdGVVUkwoU3RyaW5nIHVybFN0cmluZykgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbgotICB7Ci0gIAlyZXR1cm4gbmV3IFVSTCh1cmxTdHJpbmcpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZGlzY292ZXJ5L1dlYlNlcnZpY2VzUGFyc2VyRXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZGlzY292ZXJ5L1dlYlNlcnZpY2VzUGFyc2VyRXh0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjNzhiY2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Rpc2NvdmVyeS9XZWJTZXJ2aWNlc1BhcnNlckV4dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmRpc2NvdmVyeTsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci0KLXB1YmxpYyBjbGFzcyBXZWJTZXJ2aWNlc1BhcnNlckV4dCBleHRlbmRzIFdlYlNlcnZpY2VzUGFyc2VyIHsKLQotICAgIHB1YmxpYyBXZWJTZXJ2aWNlc1BhcnNlckV4dCgpIHsKLSAgICAgICAgc3VwZXIoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgV2ViU2VydmljZXNQYXJzZXJFeHQoU3RyaW5nIHVyaSkgewotICAgICAgICBzdXBlcih1cmkpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBVUkwgY3JlYXRlVVJMKFN0cmluZyB1cmwpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24gewotICAgICAgICByZXR1cm4gTmV0VXRpbHMuY3JlYXRlVVJMKHVybCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9GYXZvcml0ZXNDb25zdGFudHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvRmF2b3JpdGVzQ29uc3RhbnRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyMDU5M2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9GYXZvcml0ZXNDb25zdGFudHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZmF2b3JpdGVzOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzQ29uc3RhbnRzCi17Ci0gIC8vIE5hbWVzcGFjZQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FU1BBQ0VfV1NETCA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUVTUEFDRV9VRERJX1YxID0gInVybjp1ZGRpLW9yZzphcGkiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FU1BBQ0VfVURESV9WMiA9ICJ1cm46dWRkaS1vcmc6YXBpX3YyIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRVNQQUNFX1VERElfQklORElORyA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDAxLzEwL2luc3BlY3Rpb24vdWRkaS8iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FU1BBQ0VfV1NJTF9JTlNQRUNUSU9OID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDEvMTAvaW5zcGVjdGlvbi8iOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9GYXZvcml0ZXNMaW5rLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0Zhdm9yaXRlc0xpbmsuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWM4MTBkZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0Zhdm9yaXRlc0xpbmsuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZmF2b3JpdGVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLkxpbms7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNMaW5rCi17Ci0gIHByb3RlY3RlZCBMaW5rIGxpbmtfOwotCi0gIHB1YmxpYyBGYXZvcml0ZXNMaW5rKCkKLSAgewotICAgIGxpbmtfID0gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBMaW5rIGdldExpbmsoKQotICB7Ci0gICAgcmV0dXJuIGxpbmtfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0TGluayhMaW5rIGxpbmspCi0gIHsKLSAgICBsaW5rXyA9IGxpbms7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvRmF2b3JpdGVzUmVnaXN0cnlUeXBlQWJzdHJhY3QuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvRmF2b3JpdGVzUmVnaXN0cnlUeXBlQWJzdHJhY3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzhiMTU2NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0Zhdm9yaXRlc1JlZ2lzdHJ5VHlwZUFic3RyYWN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5mYXZvcml0ZXM7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5BYnN0cmFjdDsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLkluc3BlY3Rpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLkxpbms7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLlNlcnZpY2VOYW1lOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5XU0lMRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLldTSUxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLmV4dGVuc2lvbi51ZGRpLkJ1c2luZXNzRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLmV4dGVuc2lvbi51ZGRpLlNlcnZpY2VEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuaW1wbC5BYnN0cmFjdEltcGw7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLmltcGwuRGVzY3JpcHRpb25JbXBsOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5pbXBsLkxpbmtJbXBsOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5pbXBsLlNlcnZpY2VJbXBsOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5pbXBsLlNlcnZpY2VOYW1lSW1wbDsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuaW1wbC5leHRlbnNpb24udWRkaS5CdXNpbmVzc0Rlc2NyaXB0aW9uSW1wbDsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuaW1wbC5leHRlbnNpb24udWRkaS5TZXJ2aWNlRGVzY3JpcHRpb25JbXBsOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5CdXNpbmVzc0tleTsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuU2VydmljZUtleTsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEZhdm9yaXRlc1JlZ2lzdHJ5VHlwZUFic3RyYWN0IGltcGxlbWVudHMgSUZhdm9yaXRlc1JlZ2lzdHJ5VHlwZQotewotICBwdWJsaWMgRmF2b3JpdGVzUmVnaXN0cnlUeXBlQWJzdHJhY3QoKQotICB7Ci0gIH0KLQotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFJlYWRMb2NhdGlvbigpOwotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFdyaXRlTG9jYXRpb24oKTsKLSAgcHJvdGVjdGVkIGFic3RyYWN0IFdTSUxEb2N1bWVudCBnZXRXU0lMRG9jdW1lbnQoKTsKLQotICBwdWJsaWMgdm9pZCBpbml0KCkKLSAgewotICAgIGdldFdTSUxEb2N1bWVudCgpOwotICB9Ci0KLSAgcHJvdGVjdGVkIFdTSUxEb2N1bWVudCBsb2FkV1NJTERvY3VtZW50KFN0cmluZyBwYXRoLCBib29sZWFuIGZvcmNlKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgV1NJTERvY3VtZW50IHdzaWxEb2MgPSBXU0lMRG9jdW1lbnQubmV3SW5zdGFuY2UoKTsKLSAgICAgIHdzaWxEb2MucmVhZChuZXcgRmlsZVJlYWRlcihuZXcgRmlsZShwYXRoKSkpOwotICAgICAgcmV0dXJuIHdzaWxEb2M7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLSAgICB7Ci0gICAgICBpZiAoZm9yY2UpCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIFdTSUxEb2N1bWVudC5uZXdJbnN0YW5jZSgpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChFeGNlcHRpb24gdDIpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEZhdm9yaXRlc1ZlcnNpb24oKQotICB7Ci0gICAgV1NJTERvY3VtZW50IHdzaWxEb2MgPSBnZXRXU0lMRG9jdW1lbnQoKTsKLSAgICBJbnNwZWN0aW9uIGluc3BlY3Rpb24gPSB3c2lsRG9jLmdldEluc3BlY3Rpb24oKTsKLSAgICBBYnN0cmFjdFtdIGFic3RyYWN0cyA9IGluc3BlY3Rpb24uZ2V0QWJzdHJhY3RzKCk7Ci0gICAgaWYgKGFic3RyYWN0cy5sZW5ndGggPiAwKQotICAgICAgcmV0dXJuIGFic3RyYWN0c1swXS5nZXRUZXh0KCk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRGYXZvcml0ZXNWZXJzaW9uKFN0cmluZyB2ZXJzaW9uKQotICB7Ci0gICAgV1NJTERvY3VtZW50IHdzaWxEb2MgPSBnZXRXU0lMRG9jdW1lbnQoKTsKLSAgICBJbnNwZWN0aW9uIGluc3BlY3Rpb24gPSB3c2lsRG9jLmdldEluc3BlY3Rpb24oKTsKLSAgICBBYnN0cmFjdCBhYnN0ID0gbmV3IEFic3RyYWN0SW1wbCgpOwotICAgIGFic3Quc2V0VGV4dCh2ZXJzaW9uKTsKLSAgICBpbnNwZWN0aW9uLnJlbW92ZUFic3RyYWN0cygpOwotICAgIGluc3BlY3Rpb24uYWRkQWJzdHJhY3QoYWJzdCk7Ci0gIH0KLQotICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgc2F2ZSgpIHRocm93cyBXU0lMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbgotICB7Ci0gICAgV1NJTERvY3VtZW50IHdzaWxEb2MgPSBnZXRXU0lMRG9jdW1lbnQoKTsKLSAgICBpZiAod3NpbERvYyAhPSBudWxsKQotICAgICAgd3NpbERvYy53cml0ZShnZXRXcml0ZUxvY2F0aW9uKCkpOwotICB9Ci0KLSAgcHVibGljIElGYXZvcml0ZXNVRERJUmVnaXN0cnlbXSBnZXRGYXZvcml0ZXNVRERJUmVnaXN0cmllcygpCi0gIHsKLSAgICBMaW5rW10gbGlua3MgPSBsb2FkVURESVJlZ2lzdHJpZXMoKTsKLSAgICBGYXZvcml0ZXNVRERJUmVnaXN0cnlbXSByZWdpc3RyaWVzID0gbmV3IEZhdm9yaXRlc1VERElSZWdpc3RyeVtsaW5rcy5sZW5ndGhdOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlua3MubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgcmVnaXN0cmllc1tpXSA9IG5ldyBGYXZvcml0ZXNVRERJUmVnaXN0cnkoKTsKLSAgICAgIHJlZ2lzdHJpZXNbaV0uc2V0TGluayhsaW5rc1tpXSk7Ci0gICAgfQotICAgIHJldHVybiByZWdpc3RyaWVzOwotICB9Ci0KLSAgcHVibGljIElGYXZvcml0ZXNVRERJQnVzaW5lc3NbXSBnZXRGYXZvcml0ZXNVRERJQnVzaW5lc3NlcygpCi0gIHsKLSAgICBMaW5rW10gbGlua3MgPSBsb2FkVURESUJ1c2luZXNzZXMoKTsKLSAgICBGYXZvcml0ZXNVRERJQnVzaW5lc3NbXSBidXNpbmVzc2VzID0gbmV3IEZhdm9yaXRlc1VERElCdXNpbmVzc1tsaW5rcy5sZW5ndGhdOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlua3MubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgYnVzaW5lc3Nlc1tpXSA9IG5ldyBGYXZvcml0ZXNVRERJQnVzaW5lc3MoKTsKLSAgICAgIGJ1c2luZXNzZXNbaV0uc2V0TGluayhsaW5rc1tpXSk7Ci0gICAgfQotICAgIHJldHVybiBidXNpbmVzc2VzOwotICB9Ci0KLSAgcHVibGljIElGYXZvcml0ZXNVRERJU2VydmljZVtdIGdldEZhdm9yaXRlc1VERElTZXJ2aWNlcygpCi0gIHsKLSAgICBTZXJ2aWNlW10gc2VydmljZXMgPSBsb2FkVURESVNlcnZpY2VzKCk7Ci0gICAgRmF2b3JpdGVzVURESVNlcnZpY2VbXSB1ZGRpU2VydmljZXMgPSBuZXcgRmF2b3JpdGVzVURESVNlcnZpY2Vbc2VydmljZXMubGVuZ3RoXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNlcnZpY2VzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIHVkZGlTZXJ2aWNlc1tpXSA9IG5ldyBGYXZvcml0ZXNVRERJU2VydmljZSgpOwotICAgICAgdWRkaVNlcnZpY2VzW2ldLnNldFNlcnZpY2Uoc2VydmljZXNbaV0pOwotICAgIH0KLSAgICByZXR1cm4gdWRkaVNlcnZpY2VzOwotICB9Ci0KLSAgcHVibGljIElGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZVtdIGdldEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlcygpCi0gIHsKLSAgICBTZXJ2aWNlW10gc2VydmljZXMgPSBsb2FkVURESVNlcnZpY2VJbnRlcmZhY2VzKCk7Ci0gICAgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VbXSBzZXJJbnRzID0gbmV3IEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlW3NlcnZpY2VzLmxlbmd0aF07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZXJ2aWNlcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBzZXJJbnRzW2ldID0gbmV3IEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlKCk7Ci0gICAgICBzZXJJbnRzW2ldLnNldFNlcnZpY2Uoc2VydmljZXNbaV0pOwotICAgIH0KLSAgICByZXR1cm4gc2VySW50czsKLSAgfQotCi0gIHB1YmxpYyBJRmF2b3JpdGVzV1NETFtdIGdldEZhdm9yaXRlc1dTRExzKCkKLSAgewotICAgIFNlcnZpY2VbXSBzZXJ2aWNlcyA9IGxvYWRXU0RMU2VydmljZXMoKTsKLSAgICBGYXZvcml0ZXNXU0RMW10gd3NkbHMgPSBuZXcgRmF2b3JpdGVzV1NETFtzZXJ2aWNlcy5sZW5ndGhdOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VydmljZXMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgd3NkbHNbaV0gPSBuZXcgRmF2b3JpdGVzV1NETCgpOwotICAgICAgd3NkbHNbaV0uc2V0U2VydmljZShzZXJ2aWNlc1tpXSk7Ci0gICAgfQotICAgIHJldHVybiB3c2RsczsKLSAgfQotCi0gIHB1YmxpYyBJRmF2b3JpdGVzV1NJTFtdIGdldEZhdm9yaXRlc1dTSUxzKCkKLSAgewotICAgIExpbmtbXSBsaW5rcyA9IGxvYWRXU0lMcygpOwotICAgIEZhdm9yaXRlc1dTSUxbXSB3c2lscyA9IG5ldyBGYXZvcml0ZXNXU0lMW2xpbmtzLmxlbmd0aF07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaW5rcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICB3c2lsc1tpXSA9IG5ldyBGYXZvcml0ZXNXU0lMKCk7Ci0gICAgICB3c2lsc1tpXS5zZXRMaW5rKGxpbmtzW2ldKTsKLSAgICB9Ci0gICAgcmV0dXJuIHdzaWxzOwotICB9Ci0KLSAgcHVibGljIExpbmtbXSBsb2FkVURESVJlZ2lzdHJpZXMoKSB7Ci0gICAgcmV0dXJuIGxvYWRMaW5rc0J5TmFtZXNwYWNlKEZhdm9yaXRlc0NvbnN0YW50cy5OQU1FU1BBQ0VfVURESV9WMSk7Ci0gIH0KLSAgICAKLSAgcHVibGljIExpbmtbXSBsb2FkVURESUJ1c2luZXNzZXMoKSB7Ci0gICAgcmV0dXJuIGxvYWRMaW5rc0J5TmFtZXNwYWNlKEZhdm9yaXRlc0NvbnN0YW50cy5OQU1FU1BBQ0VfVURESV9WMik7Ci0gIH0KLQotICBwdWJsaWMgU2VydmljZVtdIGxvYWRVRERJU2VydmljZXMoKSB7Ci0gICAgcmV0dXJuIGxvYWRTZXJ2aWNlc0J5TmFtZXNwYWNlKEZhdm9yaXRlc0NvbnN0YW50cy5OQU1FU1BBQ0VfVURESV9WMik7Ci0gIH0KLQotICBwdWJsaWMgU2VydmljZVtdIGxvYWRVRERJU2VydmljZUludGVyZmFjZXMoKSB7Ci0gICAgcmV0dXJuIGxvYWRTZXJ2aWNlc0J5TmFtZXNwYWNlKEZhdm9yaXRlc0NvbnN0YW50cy5OQU1FU1BBQ0VfVURESV9WMSk7Ci0gIH0KLQotICBwdWJsaWMgU2VydmljZVtdIGxvYWRXU0RMU2VydmljZXMoKSB7Ci0gICAgcmV0dXJuIGxvYWRTZXJ2aWNlc0J5TmFtZXNwYWNlKEZhdm9yaXRlc0NvbnN0YW50cy5OQU1FU1BBQ0VfV1NETCk7Ci0gIH0KLQotICBwdWJsaWMgTGlua1tdIGxvYWRXU0lMcygpIHsKLSAgICByZXR1cm4gbG9hZExpbmtzQnlOYW1lc3BhY2UoRmF2b3JpdGVzQ29uc3RhbnRzLk5BTUVTUEFDRV9XU0lMX0lOU1BFQ1RJT04pOwotICB9Ci0KLSAgcHJpdmF0ZSBTZXJ2aWNlW10gbG9hZFNlcnZpY2VzQnlOYW1lc3BhY2UoU3RyaW5nIG5hbWVzcGFjZSkgewotICAgIFZlY3RvciBzZXJ2aWNlVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgIFdTSUxEb2N1bWVudCB3c2lsRG9jID0gZ2V0V1NJTERvY3VtZW50KCk7Ci0gICAgaWYgKHdzaWxEb2MgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJbnNwZWN0aW9uIGluc3BlY3Rpb24gPSB3c2lsRG9jLmdldEluc3BlY3Rpb24oKTsKLSAgICAgIFNlcnZpY2VbXSBzZXJ2aWNlcyA9IGluc3BlY3Rpb24uZ2V0U2VydmljZXMoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VydmljZXMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgICBEZXNjcmlwdGlvbltdIGRlc2MgPSBzZXJ2aWNlc1tpXS5nZXREZXNjcmlwdGlvbnMoKTsKLSAgICAgICAgIGlmIChkZXNjWzBdLmdldFJlZmVyZW5jZWROYW1lc3BhY2UoKS5lcXVhbHMobmFtZXNwYWNlKSkKLSAgICAgICAgICAgc2VydmljZVZlY3Rvci5hZGQoc2VydmljZXNbaV0pOwotICAgICAgfQotICAgIH0KLSAgICBTZXJ2aWNlW10gc2VydmljZXMgPSBuZXcgU2VydmljZVtzZXJ2aWNlVmVjdG9yLnNpemUoKV07Ci0gICAgc2VydmljZVZlY3Rvci5jb3B5SW50byhzZXJ2aWNlcyk7Ci0gICAgcmV0dXJuIHNlcnZpY2VzOwotICB9Ci0KLSAgcHJpdmF0ZSBMaW5rW10gbG9hZExpbmtzQnlOYW1lc3BhY2UoU3RyaW5nIG5hbWVzcGFjZSkgewotICAgIFZlY3RvciBsaW5rVmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgIFdTSUxEb2N1bWVudCB3c2lsRG9jID0gZ2V0V1NJTERvY3VtZW50KCk7Ci0gICAgaWYgKHdzaWxEb2MgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJbnNwZWN0aW9uIGluc3BlY3Rpb24gPSB3c2lsRG9jLmdldEluc3BlY3Rpb24oKTsKLSAgICAgIExpbmtbXSBsaW5rcyA9IGluc3BlY3Rpb24uZ2V0TGlua3MoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlua3MubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIGlmIChsaW5rc1tpXS5nZXRSZWZlcmVuY2VkTmFtZXNwYWNlKCkuZXF1YWxzKG5hbWVzcGFjZSkpCi0gICAgICAgICAgbGlua1ZlY3Rvci5hZGQobGlua3NbaV0pOwotICAgICAgfQotICAgIH0KLSAgICBMaW5rW10gbGlua3MgPSBuZXcgTGlua1tsaW5rVmVjdG9yLnNpemUoKV07Ci0gICAgbGlua1ZlY3Rvci5jb3B5SW50byhsaW5rcyk7Ci0gICAgcmV0dXJuIGxpbmtzOwotICB9Ci0KLSAgcHVibGljIHZvaWQgYWRkRmF2b3JpdGVzVURESVJlZ2lzdHJ5KElGYXZvcml0ZXNVRERJUmVnaXN0cnkgcmVnaXN0cnkpCi0gIHsKLSAgICBhZGRVRERJUmVnaXN0cnkocmVnaXN0cnkuZ2V0TmFtZSgpLCByZWdpc3RyeS5nZXRJbnF1aXJ5VVJMKCksIHJlZ2lzdHJ5LmdldFB1Ymxpc2hVUkwoKSwgcmVnaXN0cnkuZ2V0UmVnaXN0cmF0aW9uVVJMKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgYWRkRmF2b3JpdGVzVURESUJ1c2luZXNzKElGYXZvcml0ZXNVRERJQnVzaW5lc3MgYnVzaW5lc3MpCi0gIHsKLSAgICBhZGRVRERJQnVzaW5lc3MoYnVzaW5lc3MuZ2V0TmFtZSgpLCBidXNpbmVzcy5nZXRJbnF1aXJ5VVJMKCksIGJ1c2luZXNzLmdldEJ1c2luZXNzS2V5KCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgYWRkRmF2b3JpdGVzVURESVNlcnZpY2UoSUZhdm9yaXRlc1VERElTZXJ2aWNlIHNlcnZpY2UpCi0gIHsKLSAgICBhZGRVRERJU2VydmljZShzZXJ2aWNlLmdldE5hbWUoKSwgc2VydmljZS5nZXRJbnF1aXJ5VVJMKCksIHNlcnZpY2UuZ2V0U2VydmljZUtleSgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlKElGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZSBzZXJ2aWNlSW50ZXJmYWNlKQotICB7Ci0gICAgYWRkVURESVNlcnZpY2VJbnRlcmZhY2Uoc2VydmljZUludGVyZmFjZS5nZXROYW1lKCksIHNlcnZpY2VJbnRlcmZhY2UuZ2V0SW5xdWlyeVVSTCgpLCBzZXJ2aWNlSW50ZXJmYWNlLmdldFNlcnZpY2VJbnRlcmZhY2VLZXkoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBhZGRGYXZvcml0ZXNXU0RMKElGYXZvcml0ZXNXU0RMIHdzZGwpCi0gIHsKLSAgICBhZGRXU0RMU2VydmljZSh3c2RsLmdldFdzZGxVcmwoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBhZGRGYXZvcml0ZXNXU0lMKElGYXZvcml0ZXNXU0lMIHdzaWwpCi0gIHsKLSAgICBhZGRXU0lMTGluayh3c2lsLmdldFdzaWxVcmwoKSk7Ci0gIH0KLQotICBwdWJsaWMgTGluayBhZGRVRERJUmVnaXN0cnkoU3RyaW5nIHJlZ2lzdHJ5TmFtZSwgU3RyaW5nIGlucXVpcnlBUEksIFN0cmluZyBwdWJsaXNoQVBJLCBTdHJpbmcgcmVnaXN0cmF0aW9uVVJMKSB7Ci0gICAgV1NJTERvY3VtZW50IHdzaWxEb2MgPSBnZXRXU0lMRG9jdW1lbnQoKTsKLSAgICBJbnNwZWN0aW9uIGluc3BlY3Rpb24gPSB3c2lsRG9jLmdldEluc3BlY3Rpb24oKTsKLSAgICBMaW5rIGxpbmsgPSBuZXcgTGlua0ltcGwoKTsKLSAgICAvLyByZWdpc3RyeSBuYW1lCi0gICAgQWJzdHJhY3QgYWJzdCA9IG5ldyBBYnN0cmFjdEltcGwoKTsKLSAgICBhYnN0LnNldFRleHQocmVnaXN0cnlOYW1lKTsKLSAgICBsaW5rLmFkZEFic3RyYWN0KGFic3QpOwotICAgIC8vIGlucXVpcnkgVVJMCi0gICAgQWJzdHJhY3QgYWJzdDIgPSBuZXcgQWJzdHJhY3RJbXBsKCk7Ci0gICAgYWJzdDIuc2V0VGV4dChpbnF1aXJ5QVBJKTsKLSAgICBsaW5rLmFkZEFic3RyYWN0KGFic3QyKTsKLSAgICAvLyBwdWJsaXNoIFVSTAotICAgIEFic3RyYWN0IGFic3QzID0gbmV3IEFic3RyYWN0SW1wbCgpOwotICAgIGlmIChwdWJsaXNoQVBJICE9IG51bGwpCi0gICAgICBhYnN0My5zZXRUZXh0KHB1Ymxpc2hBUEkpOwotICAgIGVsc2UKLSAgICAgIGFic3QzLnNldFRleHQoIiIpOwotICAgIGxpbmsuYWRkQWJzdHJhY3QoYWJzdDMpOwotICAgIC8vIHJlZ2lzdHJhdGlvbiBVUkwKLSAgICBBYnN0cmFjdCBhYnN0NCA9IG5ldyBBYnN0cmFjdEltcGwoKTsKLSAgICBpZiAocmVnaXN0cmF0aW9uVVJMICE9IG51bGwpCi0gICAgICBhYnN0NC5zZXRUZXh0KHJlZ2lzdHJhdGlvblVSTCk7Ci0gICAgZWxzZQotICAgICAgYWJzdDQuc2V0VGV4dCgiIik7Ci0gICAgbGluay5hZGRBYnN0cmFjdChhYnN0NCk7Ci0gICAgLy8gYWRkIG5hbWVzcGFjZQotICAgIGxpbmsuc2V0UmVmZXJlbmNlZE5hbWVzcGFjZShGYXZvcml0ZXNDb25zdGFudHMuTkFNRVNQQUNFX1VERElfVjEpOwotICAgIGluc3BlY3Rpb24uYWRkTGluayhsaW5rKTsKLSAgICByZXR1cm4gbGluazsKLSAgfQotCi0gIHB1YmxpYyBMaW5rIGFkZFVERElCdXNpbmVzcyhTdHJpbmcgYnVzaW5lc3NOYW1lLCBTdHJpbmcgaW5xdWlyeUFQSSwgU3RyaW5nIGJ1c2luZXNzS2V5KSB7Ci0gICAgV1NJTERvY3VtZW50IHdzaWxEb2MgPSBnZXRXU0lMRG9jdW1lbnQoKTsKLSAgICBJbnNwZWN0aW9uIGluc3BlY3Rpb24gPSB3c2lsRG9jLmdldEluc3BlY3Rpb24oKTsKLSAgICBMaW5rIGxpbmsgPSBuZXcgTGlua0ltcGwoKTsKLSAgICBBYnN0cmFjdCBhYnN0ID0gbmV3IEFic3RyYWN0SW1wbCgpOwotICAgIGFic3Quc2V0VGV4dChidXNpbmVzc05hbWUpOwotICAgIGxpbmsuYWRkQWJzdHJhY3QoYWJzdCk7Ci0gICAgbGluay5zZXRSZWZlcmVuY2VkTmFtZXNwYWNlKEZhdm9yaXRlc0NvbnN0YW50cy5OQU1FU1BBQ0VfVURESV9WMik7Ci0gICAgQnVzaW5lc3NEZXNjcmlwdGlvbiBiZCA9IG5ldyBCdXNpbmVzc0Rlc2NyaXB0aW9uSW1wbCgpOwotICAgIGJkLnNldExvY2F0aW9uKGlucXVpcnlBUEkpOwotICAgIEJ1c2luZXNzS2V5IGtleSA9IG5ldyBCdXNpbmVzc0tleShidXNpbmVzc0tleSk7Ci0gICAgYmQuc2V0QnVzaW5lc3NLZXkoa2V5KTsKLSAgICBsaW5rLnNldEV4dGVuc2lvbkVsZW1lbnQoYmQpOwotICAgIGluc3BlY3Rpb24uYWRkTGluayhsaW5rKTsKLSAgICByZXR1cm4gbGluazsKLSAgfQotCi0gIHB1YmxpYyBTZXJ2aWNlIGFkZFVERElTZXJ2aWNlKFN0cmluZyBzZXJ2aWNlTmFtZSwgU3RyaW5nIGlucXVpcnlBUEksIFN0cmluZyBzZXJ2aWNlS2V5KSB7Ci0gICAgV1NJTERvY3VtZW50IHdzaWxEb2MgPSBnZXRXU0lMRG9jdW1lbnQoKTsKLSAgICBJbnNwZWN0aW9uIGluc3BlY3Rpb24gPSB3c2lsRG9jLmdldEluc3BlY3Rpb24oKTsKLSAgICBTZXJ2aWNlIHNlcnZpY2UgPSBuZXcgU2VydmljZUltcGwoKTsKLSAgICBTZXJ2aWNlTmFtZSBuYW1lID0gbmV3IFNlcnZpY2VOYW1lSW1wbCgpOwotICAgIG5hbWUuc2V0VGV4dChzZXJ2aWNlTmFtZSk7Ci0gICAgc2VydmljZS5hZGRTZXJ2aWNlTmFtZShuYW1lKTsKLSAgICBEZXNjcmlwdGlvbiBkZXNjID0gbmV3IERlc2NyaXB0aW9uSW1wbCgpOwotICAgIGRlc2Muc2V0UmVmZXJlbmNlZE5hbWVzcGFjZShGYXZvcml0ZXNDb25zdGFudHMuTkFNRVNQQUNFX1VERElfVjIpOwotICAgIFNlcnZpY2VEZXNjcmlwdGlvbiBzZCA9IG5ldyBTZXJ2aWNlRGVzY3JpcHRpb25JbXBsKCk7Ci0gICAgc2Quc2V0TG9jYXRpb24oaW5xdWlyeUFQSSk7Ci0gICAgU2VydmljZUtleSBrZXkgPSBuZXcgU2VydmljZUtleShzZXJ2aWNlS2V5KTsKLSAgICBzZC5zZXRTZXJ2aWNlS2V5KGtleSk7Ci0gICAgZGVzYy5zZXRFeHRlbnNpb25FbGVtZW50KHNkKTsKLSAgICBzZXJ2aWNlLmFkZERlc2NyaXB0aW9uKGRlc2MpOwotICAgIGluc3BlY3Rpb24uYWRkU2VydmljZShzZXJ2aWNlKTsKLSAgICByZXR1cm4gc2VydmljZTsKLSAgfQotCi0gIHB1YmxpYyBTZXJ2aWNlIGFkZFVERElTZXJ2aWNlSW50ZXJmYWNlKFN0cmluZyBzZXJJbnROYW1lLCBTdHJpbmcgaW5xdWlyeUFQSSwgU3RyaW5nIHNlckludEtleSkgewotICAgIFdTSUxEb2N1bWVudCB3c2lsRG9jID0gZ2V0V1NJTERvY3VtZW50KCk7Ci0gICAgSW5zcGVjdGlvbiBpbnNwZWN0aW9uID0gd3NpbERvYy5nZXRJbnNwZWN0aW9uKCk7Ci0gICAgU2VydmljZSBzZXJ2aWNlID0gbmV3IFNlcnZpY2VJbXBsKCk7Ci0gICAgU2VydmljZU5hbWUgbmFtZSA9IG5ldyBTZXJ2aWNlTmFtZUltcGwoKTsKLSAgICBuYW1lLnNldFRleHQoc2VySW50TmFtZSk7Ci0gICAgc2VydmljZS5hZGRTZXJ2aWNlTmFtZShuYW1lKTsKLSAgICBEZXNjcmlwdGlvbiBkZXNjID0gbmV3IERlc2NyaXB0aW9uSW1wbCgpOwotICAgIGRlc2Muc2V0UmVmZXJlbmNlZE5hbWVzcGFjZShGYXZvcml0ZXNDb25zdGFudHMuTkFNRVNQQUNFX1VERElfVjEpOwotICAgIFNlcnZpY2VEZXNjcmlwdGlvbiBzZCA9IG5ldyBTZXJ2aWNlRGVzY3JpcHRpb25JbXBsKCk7Ci0gICAgc2Quc2V0TG9jYXRpb24oaW5xdWlyeUFQSSk7Ci0gICAgU2VydmljZUtleSBrZXkgPSBuZXcgU2VydmljZUtleShzZXJJbnRLZXkpOwotICAgIHNkLnNldFNlcnZpY2VLZXkoa2V5KTsKLSAgICBkZXNjLnNldEV4dGVuc2lvbkVsZW1lbnQoc2QpOwotICAgIHNlcnZpY2UuYWRkRGVzY3JpcHRpb24oZGVzYyk7Ci0gICAgaW5zcGVjdGlvbi5hZGRTZXJ2aWNlKHNlcnZpY2UpOwotICAgIHJldHVybiBzZXJ2aWNlOwotICB9Ci0KLSAgcHVibGljIFNlcnZpY2UgYWRkV1NETFNlcnZpY2UoU3RyaW5nIHVybCkgewotICAgIFdTSUxEb2N1bWVudCB3c2lsRG9jID0gZ2V0V1NJTERvY3VtZW50KCk7Ci0gICAgSW5zcGVjdGlvbiBpbnNwZWN0aW9uID0gd3NpbERvYy5nZXRJbnNwZWN0aW9uKCk7Ci0gICAgU2VydmljZSBzZXJ2aWNlID0gbmV3IFNlcnZpY2VJbXBsKCk7Ci0gICAgRGVzY3JpcHRpb24gZGVzYyA9IG5ldyBEZXNjcmlwdGlvbkltcGwoKTsKLSAgICBkZXNjLnNldExvY2F0aW9uKHVybCk7Ci0gICAgZGVzYy5zZXRSZWZlcmVuY2VkTmFtZXNwYWNlKEZhdm9yaXRlc0NvbnN0YW50cy5OQU1FU1BBQ0VfV1NETCk7Ci0gICAgc2VydmljZS5hZGREZXNjcmlwdGlvbihkZXNjKTsKLSAgICBpbnNwZWN0aW9uLmFkZFNlcnZpY2Uoc2VydmljZSk7Ci0gICAgcmV0dXJuIHNlcnZpY2U7Ci0gIH0KLQotICBwdWJsaWMgTGluayBhZGRXU0lMTGluayhTdHJpbmcgdXJsKSB7Ci0gICAgV1NJTERvY3VtZW50IHdzaWxEb2MgPSBnZXRXU0lMRG9jdW1lbnQoKTsKLSAgICBJbnNwZWN0aW9uIGluc3BlY3Rpb24gPSB3c2lsRG9jLmdldEluc3BlY3Rpb24oKTsKLSAgICBMaW5rIGxpbmsgPSBuZXcgTGlua0ltcGwoKTsKLSAgICBsaW5rLnNldExvY2F0aW9uKHVybCk7Ci0gICAgbGluay5zZXRSZWZlcmVuY2VkTmFtZXNwYWNlKEZhdm9yaXRlc0NvbnN0YW50cy5OQU1FU1BBQ0VfV1NJTF9JTlNQRUNUSU9OKTsKLSAgICBpbnNwZWN0aW9uLmFkZExpbmsobGluayk7Ci0gICAgcmV0dXJuIGxpbms7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZW1vdmVGYXZvcml0ZXNVRERJUmVnaXN0cnkoSUZhdm9yaXRlc1VERElSZWdpc3RyeSByZWdpc3RyeSkKLSAgewotICAgIGlmIChyZWdpc3RyeSBpbnN0YW5jZW9mIEZhdm9yaXRlc1VERElSZWdpc3RyeSkKLSAgICAgIHJlbW92ZUxpbmsoKChGYXZvcml0ZXNVRERJUmVnaXN0cnkpcmVnaXN0cnkpLmdldExpbmsoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZW1vdmVGYXZvcml0ZXNVRERJQnVzaW5lc3MoSUZhdm9yaXRlc1VERElCdXNpbmVzcyBidXNpbmVzcykKLSAgewotICAgIGlmIChidXNpbmVzcyBpbnN0YW5jZW9mIEZhdm9yaXRlc1VERElCdXNpbmVzcykKLSAgICAgIHJlbW92ZUxpbmsoKChGYXZvcml0ZXNVRERJQnVzaW5lc3MpYnVzaW5lc3MpLmdldExpbmsoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZW1vdmVGYXZvcml0ZXNVRERJU2VydmljZShJRmF2b3JpdGVzVURESVNlcnZpY2Ugc2VydmljZSkKLSAgewotICAgIGlmIChzZXJ2aWNlIGluc3RhbmNlb2YgRmF2b3JpdGVzVURESVNlcnZpY2UpCi0gICAgICByZW1vdmVTZXJ2aWNlKCgoRmF2b3JpdGVzVURESVNlcnZpY2Upc2VydmljZSkuZ2V0U2VydmljZSgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlbW92ZUZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlKElGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZSBzZXJ2aWNlSW50ZXJmYWNlKQotICB7Ci0gICAgaWYgKHNlcnZpY2VJbnRlcmZhY2UgaW5zdGFuY2VvZiBGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZSkKLSAgICAgIHJlbW92ZVNlcnZpY2UoKChGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZSlzZXJ2aWNlSW50ZXJmYWNlKS5nZXRTZXJ2aWNlKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVtb3ZlRmF2b3JpdGVzV1NETChJRmF2b3JpdGVzV1NETCB3c2RsKQotICB7Ci0gICAgaWYgKHdzZGwgaW5zdGFuY2VvZiBGYXZvcml0ZXNXU0RMKQotICAgICAgcmVtb3ZlU2VydmljZSgoKEZhdm9yaXRlc1dTREwpd3NkbCkuZ2V0U2VydmljZSgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlbW92ZUZhdm9yaXRlc1dTSUwoSUZhdm9yaXRlc1dTSUwgd3NpbCkKLSAgewotICAgIGlmICh3c2lsIGluc3RhbmNlb2YgRmF2b3JpdGVzV1NJTCkKLSAgICAgIHJlbW92ZUxpbmsoKChGYXZvcml0ZXNXU0lMKXdzaWwpLmdldExpbmsoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZW1vdmVTZXJ2aWNlKFNlcnZpY2Ugc2VydmljZSkKLSAgewotICAgIFdTSUxEb2N1bWVudCB3c2lsRG9jID0gZ2V0V1NJTERvY3VtZW50KCk7Ci0gICAgSW5zcGVjdGlvbiBpbnNwZWN0aW9uID0gd3NpbERvYy5nZXRJbnNwZWN0aW9uKCk7Ci0gICAgaW5zcGVjdGlvbi5yZW1vdmVTZXJ2aWNlKHNlcnZpY2UpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVtb3ZlTGluayhMaW5rIGxpbmspCi0gIHsKLSAgICBXU0lMRG9jdW1lbnQgd3NpbERvYyA9IGdldFdTSUxEb2N1bWVudCgpOwotICAgIEluc3BlY3Rpb24gaW5zcGVjdGlvbiA9IHdzaWxEb2MuZ2V0SW5zcGVjdGlvbigpOwotICAgIGluc3BlY3Rpb24ucmVtb3ZlTGluayhsaW5rKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9GYXZvcml0ZXNTZXJ2aWNlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0Zhdm9yaXRlc1NlcnZpY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWI3NWZlNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0Zhdm9yaXRlc1NlcnZpY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZmF2b3JpdGVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLlNlcnZpY2U7Ci0KLXB1YmxpYyBjbGFzcyBGYXZvcml0ZXNTZXJ2aWNlCi17Ci0gIHByb3RlY3RlZCBTZXJ2aWNlIHNlcnZpY2VfOwotCi0gIHB1YmxpYyBGYXZvcml0ZXNTZXJ2aWNlKCkKLSAgewotICAgIHNlcnZpY2VfID0gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBTZXJ2aWNlIGdldFNlcnZpY2UoKQotICB7Ci0gICAgcmV0dXJuIHNlcnZpY2VfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0U2VydmljZShTZXJ2aWNlIHNlcnZpY2UpCi0gIHsKLSAgICBzZXJ2aWNlXyA9IHNlcnZpY2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvRmF2b3JpdGVzVURESUJ1c2luZXNzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0Zhdm9yaXRlc1VERElCdXNpbmVzcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDUxY2JmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvRmF2b3JpdGVzVURESUJ1c2luZXNzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmZhdm9yaXRlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5leHRlbnNpb24udWRkaS5CdXNpbmVzc0Rlc2NyaXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzVURESUJ1c2luZXNzIGV4dGVuZHMgRmF2b3JpdGVzTGluayBpbXBsZW1lbnRzIElGYXZvcml0ZXNVRERJQnVzaW5lc3MKLXsKLSAgcHVibGljIEZhdm9yaXRlc1VERElCdXNpbmVzcygpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLSAgewotICAgIHJldHVybiAobGlua18uZ2V0QWJzdHJhY3RzKCkpWzBdLmdldFRleHQoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5xdWlyeVVSTCgpCi0gIHsKLSAgICByZXR1cm4gKChCdXNpbmVzc0Rlc2NyaXB0aW9uKWxpbmtfLmdldEV4dGVuc2lvbkVsZW1lbnQoKSkuZ2V0TG9jYXRpb24oKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0QnVzaW5lc3NLZXkoKQotICB7Ci0gICAgcmV0dXJuICgoQnVzaW5lc3NEZXNjcmlwdGlvbilsaW5rXy5nZXRFeHRlbnNpb25FbGVtZW50KCkpLmdldEJ1c2luZXNzS2V5KCkuZ2V0VGV4dCgpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkKLSAgewotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0SW5xdWlyeVVSTChTdHJpbmcgaW5xdWlyeVVSTCkKLSAgewotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0QnVzaW5lc3NLZXkoU3RyaW5nIGtleSkKLSAgewotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0Zhdm9yaXRlc1VERElSZWdpc3RyeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9GYXZvcml0ZXNVRERJUmVnaXN0cnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjNlMjhhNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0Zhdm9yaXRlc1VERElSZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5mYXZvcml0ZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuQWJzdHJhY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5wbHVnaW4uUGFyc2VyUGx1Z2luOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzVURESVJlZ2lzdHJ5IGV4dGVuZHMgRmF2b3JpdGVzTGluayBpbXBsZW1lbnRzIElGYXZvcml0ZXNVRERJUmVnaXN0cnkKLXsKLSAgcHVibGljIEZhdm9yaXRlc1VERElSZWdpc3RyeSgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLSAgewotICAgIFN0cmluZyBuYW1lID0gKGxpbmtfLmdldEFic3RyYWN0cygpKVswXS5nZXRUZXh0KCk7Ci0gICAgaWYgKG5hbWUuc3RhcnRzV2l0aCgiJSIpKQotICAgIHsKLSAgICAgIFN0cmluZyB0cmFuc2xhdGVkTmFtZSA9IFBhcnNlclBsdWdpbi5nZXRNZXNzYWdlKG5hbWUpOwotICAgICAgaWYgKHRyYW5zbGF0ZWROYW1lICE9IG51bGwpCi0gICAgICAgIG5hbWUgPSB0cmFuc2xhdGVkTmFtZTsKLSAgICB9Ci0gICAgcmV0dXJuIG5hbWU7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldElucXVpcnlVUkwoKQotICB7Ci0gICAgcmV0dXJuIChsaW5rXy5nZXRBYnN0cmFjdHMoKSlbMV0uZ2V0VGV4dCgpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRQdWJsaXNoVVJMKCkKLSAgewotICAgIEFic3RyYWN0W10gYWJzdHJhY3RzID0gbGlua18uZ2V0QWJzdHJhY3RzKCk7Ci0gICAgaWYgKGFic3RyYWN0cy5sZW5ndGggPiAyKQotICAgIHsKLSAgICAgIFN0cmluZyBwdWJsaXNoVVJMID0gYWJzdHJhY3RzWzJdLmdldFRleHQoKTsKLSAgICAgIGlmIChwdWJsaXNoVVJMICE9IG51bGwgJiYgcHVibGlzaFVSTC5sZW5ndGgoKSA+IDApCi0gICAgICAgIHJldHVybiBwdWJsaXNoVVJMOwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVnaXN0cmF0aW9uVVJMKCkKLSAgewotICAgIEFic3RyYWN0W10gYWJzdHJhY3RzID0gbGlua18uZ2V0QWJzdHJhY3RzKCk7Ci0gICAgaWYgKGFic3RyYWN0cy5sZW5ndGggPiAzKQotICAgIHsKLSAgICAgIFN0cmluZyByZWdpc3RyYXRpb25VUkwgPSBhYnN0cmFjdHNbM10uZ2V0VGV4dCgpOwotICAgICAgaWYgKHJlZ2lzdHJhdGlvblVSTCAhPSBudWxsICYmIHJlZ2lzdHJhdGlvblVSTC5sZW5ndGgoKSA+IDApCi0gICAgICAgIHJldHVybiByZWdpc3RyYXRpb25VUkw7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgIChsaW5rXy5nZXRBYnN0cmFjdHMoKSlbMF0uc2V0VGV4dChuYW1lKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldElucXVpcnlVUkwoU3RyaW5nIGlucXVpcnlVUkwpCi0gIHsKLSAgICAobGlua18uZ2V0QWJzdHJhY3RzKCkpWzFdLnNldFRleHQoaW5xdWlyeVVSTCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRQdWJsaXNoVVJMKFN0cmluZyBwdWJsaXNoVVJMKQotICB7Ci0gICAgQWJzdHJhY3RbXSBhYnN0cmFjdHMgPSBsaW5rXy5nZXRBYnN0cmFjdHMoKTsKLSAgICBpZiAoYWJzdHJhY3RzLmxlbmd0aCA+IDIpCi0gICAgICBhYnN0cmFjdHNbMl0uc2V0VGV4dChwdWJsaXNoVVJMKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFJlZ2lzdHJhdGlvblVSTChTdHJpbmcgcmVnaXN0cmF0aW9uVVJMKQotICB7Ci0gICAgQWJzdHJhY3RbXSBhYnN0cmFjdHMgPSBsaW5rXy5nZXRBYnN0cmFjdHMoKTsKLSAgICBpZiAoYWJzdHJhY3RzLmxlbmd0aCA+IDMpCi0gICAgICBhYnN0cmFjdHNbM10uc2V0VGV4dChyZWdpc3RyYXRpb25VUkwpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0Zhdm9yaXRlc1VERElTZXJ2aWNlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0Zhdm9yaXRlc1VERElTZXJ2aWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjMDA5YTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9GYXZvcml0ZXNVRERJU2VydmljZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5mYXZvcml0ZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuZXh0ZW5zaW9uLnVkZGkuU2VydmljZURlc2NyaXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgRmF2b3JpdGVzVURESVNlcnZpY2UgZXh0ZW5kcyBGYXZvcml0ZXNTZXJ2aWNlIGltcGxlbWVudHMgSUZhdm9yaXRlc1VERElTZXJ2aWNlCi17Ci0gIHB1YmxpYyBGYXZvcml0ZXNVRERJU2VydmljZSgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLSAgewotICAgIHJldHVybiAoc2VydmljZV8uZ2V0U2VydmljZU5hbWVzKCkpWzBdLmdldFRleHQoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5xdWlyeVVSTCgpCi0gIHsKLSAgICBTZXJ2aWNlRGVzY3JpcHRpb24gc2QgPSAoU2VydmljZURlc2NyaXB0aW9uKShzZXJ2aWNlXy5nZXREZXNjcmlwdGlvbnMoKSlbMF0uZ2V0RXh0ZW5zaW9uRWxlbWVudCgpOwotICAgIHJldHVybiBzZC5nZXRMb2NhdGlvbigpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlS2V5KCkKLSAgewotICAgIFNlcnZpY2VEZXNjcmlwdGlvbiBzZCA9IChTZXJ2aWNlRGVzY3JpcHRpb24pKHNlcnZpY2VfLmdldERlc2NyaXB0aW9ucygpKVswXS5nZXRFeHRlbnNpb25FbGVtZW50KCk7Ci0gICAgcmV0dXJuIHNkLmdldFNlcnZpY2VLZXkoKS5nZXRUZXh0KCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRJbnF1aXJ5VVJMKFN0cmluZyBpbnF1aXJ5VVJMKQotICB7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlS2V5KFN0cmluZyBrZXkpCi0gIHsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9GYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9GYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjJkOWZjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZmF2b3JpdGVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLmV4dGVuc2lvbi51ZGRpLlNlcnZpY2VEZXNjcmlwdGlvbjsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlIGV4dGVuZHMgRmF2b3JpdGVzU2VydmljZSBpbXBsZW1lbnRzIElGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZQotewotICBwdWJsaWMgRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2UoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gKHNlcnZpY2VfLmdldFNlcnZpY2VOYW1lcygpKVswXS5nZXRUZXh0KCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldElucXVpcnlVUkwoKQotICB7Ci0gICAgU2VydmljZURlc2NyaXB0aW9uIHNkID0gKFNlcnZpY2VEZXNjcmlwdGlvbikoc2VydmljZV8uZ2V0RGVzY3JpcHRpb25zKCkpWzBdLmdldEV4dGVuc2lvbkVsZW1lbnQoKTsKLSAgICByZXR1cm4gc2QuZ2V0TG9jYXRpb24oKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmljZUludGVyZmFjZUtleSgpCi0gIHsKLSAgICBTZXJ2aWNlRGVzY3JpcHRpb24gc2QgPSAoU2VydmljZURlc2NyaXB0aW9uKShzZXJ2aWNlXy5nZXREZXNjcmlwdGlvbnMoKSlbMF0uZ2V0RXh0ZW5zaW9uRWxlbWVudCgpOwotICAgIHJldHVybiBzZC5nZXRTZXJ2aWNlS2V5KCkuZ2V0VGV4dCgpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkKLSAgewotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0SW5xdWlyeVVSTChTdHJpbmcgaW5xdWlyeVVSTCkKLSAgewotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0U2VydmljZUludGVyZmFjZUtleShTdHJpbmcga2V5KQotICB7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvRmF2b3JpdGVzV1NETC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9GYXZvcml0ZXNXU0RMLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExNTMyYjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9GYXZvcml0ZXNXU0RMLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmZhdm9yaXRlczsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1dTREwgZXh0ZW5kcyBGYXZvcml0ZXNTZXJ2aWNlIGltcGxlbWVudHMgSUZhdm9yaXRlc1dTREwKLXsKLSAgcHVibGljIEZhdm9yaXRlc1dTREwoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0V3NkbFVybCgpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXc2RsVXJsKCkKLSAgewotICAgIHJldHVybiAoc2VydmljZV8uZ2V0RGVzY3JpcHRpb25zKCkpWzBdLmdldExvY2F0aW9uKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRXc2RsVXJsKFN0cmluZyB3c2RsVVJMKQotICB7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvRmF2b3JpdGVzV1NJTC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9GYXZvcml0ZXNXU0lMLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjY2YzMmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9GYXZvcml0ZXNXU0lMLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmZhdm9yaXRlczsKLQotcHVibGljIGNsYXNzIEZhdm9yaXRlc1dTSUwgZXh0ZW5kcyBGYXZvcml0ZXNMaW5rIGltcGxlbWVudHMgSUZhdm9yaXRlc1dTSUwKLXsKLSAgcHVibGljIEZhdm9yaXRlc1dTSUwoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0V3NpbFVybCgpOwotICB9Ci0KLQotICBwdWJsaWMgU3RyaW5nIGdldFdzaWxVcmwoKQotICB7Ci0gICAgcmV0dXJuIGxpbmtfLmdldExvY2F0aW9uKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRXc2lsVXJsKFN0cmluZyB3c2lsVVJMKQotICB7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvSUZhdm9yaXRlc1JlZ2lzdHJ5VHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9JRmF2b3JpdGVzUmVnaXN0cnlUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5Yzk0YTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9JRmF2b3JpdGVzUmVnaXN0cnlUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmZhdm9yaXRlczsKLQotcHVibGljIGludGVyZmFjZSBJRmF2b3JpdGVzUmVnaXN0cnlUeXBlCi17Ci0gIHB1YmxpYyBJRmF2b3JpdGVzVURESVJlZ2lzdHJ5W10gZ2V0RmF2b3JpdGVzVURESVJlZ2lzdHJpZXMoKTsKLSAgcHVibGljIElGYXZvcml0ZXNVRERJQnVzaW5lc3NbXSBnZXRGYXZvcml0ZXNVRERJQnVzaW5lc3NlcygpOwotICBwdWJsaWMgSUZhdm9yaXRlc1VERElTZXJ2aWNlW10gZ2V0RmF2b3JpdGVzVURESVNlcnZpY2VzKCk7Ci0gIHB1YmxpYyBJRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2VbXSBnZXRGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZXMoKTsKLSAgcHVibGljIElGYXZvcml0ZXNXU0RMW10gZ2V0RmF2b3JpdGVzV1NETHMoKTsKLSAgcHVibGljIElGYXZvcml0ZXNXU0lMW10gZ2V0RmF2b3JpdGVzV1NJTHMoKTsKLQotICBwdWJsaWMgdm9pZCBhZGRGYXZvcml0ZXNVRERJUmVnaXN0cnkoSUZhdm9yaXRlc1VERElSZWdpc3RyeSByZWdpc3RyeSk7Ci0gIHB1YmxpYyB2b2lkIGFkZEZhdm9yaXRlc1VERElCdXNpbmVzcyhJRmF2b3JpdGVzVURESUJ1c2luZXNzIGJ1c2luZXNzKTsKLSAgcHVibGljIHZvaWQgYWRkRmF2b3JpdGVzVURESVNlcnZpY2UoSUZhdm9yaXRlc1VERElTZXJ2aWNlIHNlcnZpY2UpOwotICBwdWJsaWMgdm9pZCBhZGRGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZShJRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2Ugc2VydmljZUludGVyZmFjZSk7Ci0gIHB1YmxpYyB2b2lkIGFkZEZhdm9yaXRlc1dTREwoSUZhdm9yaXRlc1dTREwgd3NkbCk7Ci0gIHB1YmxpYyB2b2lkIGFkZEZhdm9yaXRlc1dTSUwoSUZhdm9yaXRlc1dTSUwgd3NpbCk7Ci0KLSAgcHVibGljIHZvaWQgcmVtb3ZlRmF2b3JpdGVzVURESVJlZ2lzdHJ5KElGYXZvcml0ZXNVRERJUmVnaXN0cnkgcmVnaXN0cnkpOwotICBwdWJsaWMgdm9pZCByZW1vdmVGYXZvcml0ZXNVRERJQnVzaW5lc3MoSUZhdm9yaXRlc1VERElCdXNpbmVzcyBidXNpbmVzcyk7Ci0gIHB1YmxpYyB2b2lkIHJlbW92ZUZhdm9yaXRlc1VERElTZXJ2aWNlKElGYXZvcml0ZXNVRERJU2VydmljZSBzZXJ2aWNlKTsKLSAgcHVibGljIHZvaWQgcmVtb3ZlRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2UoSUZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlIHNlcnZpY2VJbnRlcmZhY2UpOwotICBwdWJsaWMgdm9pZCByZW1vdmVGYXZvcml0ZXNXU0RMKElGYXZvcml0ZXNXU0RMIHdzZGwpOwotICBwdWJsaWMgdm9pZCByZW1vdmVGYXZvcml0ZXNXU0lMKElGYXZvcml0ZXNXU0lMIHdzaWwpOyAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0lGYXZvcml0ZXNVRERJQnVzaW5lc3MuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvSUZhdm9yaXRlc1VERElCdXNpbmVzcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTU1ZjM1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvSUZhdm9yaXRlc1VERElCdXNpbmVzcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5mYXZvcml0ZXM7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSUZhdm9yaXRlc1VERElCdXNpbmVzcwotewotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKTsKLSAgcHVibGljIFN0cmluZyBnZXRJbnF1aXJ5VVJMKCk7Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0QnVzaW5lc3NLZXkoKTsKLQotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKTsKLSAgcHVibGljIHZvaWQgc2V0SW5xdWlyeVVSTChTdHJpbmcgaW5xdWlyeVVSTCk7Ci0gIHB1YmxpYyB2b2lkIHNldEJ1c2luZXNzS2V5KFN0cmluZyBrZXkpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9JRmF2b3JpdGVzVURESVJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0lGYXZvcml0ZXNVRERJUmVnaXN0cnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmM3MzMzMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0lGYXZvcml0ZXNVRERJUmVnaXN0cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZmF2b3JpdGVzOwotCi1wdWJsaWMgaW50ZXJmYWNlIElGYXZvcml0ZXNVRERJUmVnaXN0cnkKLXsKLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCk7Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5xdWlyeVVSTCgpOwotICBwdWJsaWMgU3RyaW5nIGdldFB1Ymxpc2hVUkwoKTsKLSAgcHVibGljIFN0cmluZyBnZXRSZWdpc3RyYXRpb25VUkwoKTsKLQotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKTsKLSAgcHVibGljIHZvaWQgc2V0SW5xdWlyeVVSTChTdHJpbmcgaW5xdWlyeVVSTCk7Ci0gIHB1YmxpYyB2b2lkIHNldFB1Ymxpc2hVUkwoU3RyaW5nIHB1Ymxpc2hVUkwpOwotICBwdWJsaWMgdm9pZCBzZXRSZWdpc3RyYXRpb25VUkwoU3RyaW5nIHJlZ2lzdHJhdGlvblVSTCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0lGYXZvcml0ZXNVRERJU2VydmljZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9JRmF2b3JpdGVzVURESVNlcnZpY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQ4MGE0MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0lGYXZvcml0ZXNVRERJU2VydmljZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5mYXZvcml0ZXM7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSUZhdm9yaXRlc1VERElTZXJ2aWNlCi17Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpOwotICBwdWJsaWMgU3RyaW5nIGdldElucXVpcnlVUkwoKTsKLSAgcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlS2V5KCk7Ci0KLSAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSk7Ci0gIHB1YmxpYyB2b2lkIHNldElucXVpcnlVUkwoU3RyaW5nIGlucXVpcnlVUkwpOwotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlS2V5KFN0cmluZyBrZXkpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9JRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvSUZhdm9yaXRlc1VERElTZXJ2aWNlSW50ZXJmYWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0MjdjODUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9JRmF2b3JpdGVzVURESVNlcnZpY2VJbnRlcmZhY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZmF2b3JpdGVzOwotCi1wdWJsaWMgaW50ZXJmYWNlIElGYXZvcml0ZXNVRERJU2VydmljZUludGVyZmFjZQotewotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKTsKLSAgcHVibGljIFN0cmluZyBnZXRJbnF1aXJ5VVJMKCk7Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmljZUludGVyZmFjZUtleSgpOwotCi0gIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpOwotICBwdWJsaWMgdm9pZCBzZXRJbnF1aXJ5VVJMKFN0cmluZyBpbnF1aXJ5VVJMKTsKLSAgcHVibGljIHZvaWQgc2V0U2VydmljZUludGVyZmFjZUtleShTdHJpbmcga2V5KTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvSUZhdm9yaXRlc1dTREwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvSUZhdm9yaXRlc1dTREwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjlmMzY2Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvZmF2b3JpdGVzL0lGYXZvcml0ZXNXU0RMLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmZhdm9yaXRlczsKLQotcHVibGljIGludGVyZmFjZSBJRmF2b3JpdGVzV1NETAotewotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKTsKLSAgcHVibGljIFN0cmluZyBnZXRXc2RsVXJsKCk7Ci0KLSAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSk7Ci0gIHB1YmxpYyB2b2lkIHNldFdzZGxVcmwoU3RyaW5nIHdzZGxVUkwpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9JRmF2b3JpdGVzV1NJTC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL2Zhdm9yaXRlcy9JRmF2b3JpdGVzV1NJTC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODhkYzQ0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci9mYXZvcml0ZXMvSUZhdm9yaXRlc1dTSUwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZmF2b3JpdGVzOwotCi1wdWJsaWMgaW50ZXJmYWNlIElGYXZvcml0ZXNXU0lMCi17Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpOwotICBwdWJsaWMgU3RyaW5nIGdldFdzaWxVcmwoKTsKLQotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKTsKLSAgcHVibGljIHZvaWQgc2V0V3NpbFVybChTdHJpbmcgd3NpbFVSTCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvcGx1Z2luL1BhcnNlclBsdWdpbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL3BsdWdpbi9QYXJzZXJQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjUzMmIyMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvcGx1Z2luL1BhcnNlclBsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5wbHVnaW47Ci0KLWltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKLWltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuY29tbW9uLk1lc3NhZ2VVdGlsczsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIFBhcnNlclBsdWdpbiBleHRlbmRzIFBsdWdpbiB7Ci0JLy9UaGUgc2hhcmVkIGluc3RhbmNlLgotCXByaXZhdGUgc3RhdGljIFBhcnNlclBsdWdpbiBwbHVnaW47Ci0JLy9SZXNvdXJjZSBidW5kbGUuCi0JcHJpdmF0ZSBSZXNvdXJjZUJ1bmRsZSByZXNvdXJjZUJ1bmRsZTsKLQkKLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIFBhcnNlclBsdWdpbigpIHsKLQkJc3VwZXIoKTsKLQkJcGx1Z2luID0gdGhpczsKLQkJdHJ5IHsKLQkJCXJlc291cmNlQnVuZGxlICAgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIuUGFyc2VyUGx1Z2luUmVzb3VyY2VzIik7Ci0JCX0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiB4KSB7Ci0JCQlyZXNvdXJjZUJ1bmRsZSA9IG51bGw7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBQYXJzZXJQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzdHJpbmcgZnJvbSB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqIG9yICdrZXknIGlmIG5vdCBmb3VuZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRSZXNvdXJjZVN0cmluZyhTdHJpbmcga2V5KSB7Ci0JCVJlc291cmNlQnVuZGxlIGJ1bmRsZSA9IFBhcnNlclBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UmVzb3VyY2VCdW5kbGUoKTsKLQkJdHJ5IHsKLQkJCXJldHVybiAoYnVuZGxlICE9IG51bGwpID8gYnVuZGxlLmdldFN0cmluZyhrZXkpIDoga2V5OwotCQl9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIGtleTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0UmVzb3VyY2VCdW5kbGUoKSB7Ci0JCXJldHVybiByZXNvdXJjZUJ1bmRsZTsKLQl9Ci0KLQkgLyoqCi0JICAqIFJldHVybnMgdGhlIG1lc3NhZ2Ugc3RyaW5nIGlkZW50aWZpZWQgYnkgdGhlIGdpdmVuIGtleSBmcm9tCi0JICAqIHRoZSBwbHVnaW4ucHJvcGVydGllcyBmaWxlIGZvciB0aGUgYXBwcm9wcmlhdGUgbG9jYWxlLgotCSAgKiBAcGFyYW0ga2V5IFRoZSBtZXNzYWdlIGtleSBzdHJpbmcgcHJlZml4ZWQgYnkgYSAiJSIgc3ltYm9sLgotCSAgKiBUaGF0IGlzLCB0aGUgc3RyaW5nIHBhc3NlZCBpbiBtdXN0IGJlIG9mIHRoZSBmb3JtICIlS0VZIgotCSAgKiB3aGVyZSB0aGUgcGx1Z2luLnByb3BlcnRpZXMgZmlsZSBjb250YWlucyBhIGxpbmUgb2YgdGhlCi0JICAqIGZvcm06ICJLRVkgPSB2YWx1ZSIuCi0JICAqIEByZXR1cm4gVGhlIGxvY2FsZS1zcGVjaWZpYyBtZXNzYWdlLgotCSAgKi8KLQkgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldE1lc3NhZ2UgKCBTdHJpbmcga2V5ICkKLQkgIHsKLQkgICAgTWVzc2FnZVV0aWxzIG1zZ1V0aWxzID0gbmV3IE1lc3NhZ2VVdGlscyggIm9yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIucGx1Z2luIiwgcGx1Z2luICk7Ci0JICAgIAotCSAgICBpZigga2V5LnN0YXJ0c1dpdGgoIiUiKSkKLQkgICAgewotCSAgICAgIGtleSA9IGtleS5zdWJzdHJpbmcoIDEsIGtleS5sZW5ndGgoKSApOwotCSAgICB9Ci0JICAgIAotCSAgICByZXR1cm4gbXNnVXRpbHMuZ2V0TWVzc2FnZShrZXkpOwotCSAgfQotCi0JICAvKioKLQkgICogUmV0dXJucyB0aGUgbWVzc2FnZSBzdHJpbmcgaWRlbnRpZmllZCBieSB0aGUgZ2l2ZW4ga2V5IGZyb20KLQkgICogdGhlIHBsdWdpbi5wcm9wZXJ0aWVzIGZpbGUgZm9yIHRoZSBhcHByb3ByaWF0ZSBsb2NhbGUuCi0JICAqIFN1YnN0aXR1dGlvbiBzZXF1ZW5jZXMgaW4gdGhlIG1lc3NhZ2Ugc3RyaW5nCi0JICAqIGFyZSByZXBsYWNlZCBieSB0aGUgZ2l2ZW4gYXJyYXkgb2Ygc3Vic3RpdHV0aW9uIG9iamVjdHMgKHdoaWNoCi0JICAqIGFyZSBtb3N0IGZyZXF1ZW50bHkgc3RyaW5ncykuIFNlZSBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdCBmb3IKLQkgICogZnVydGhlciBkZXRhaWxzIG9uIHN1YnN0aXR1dGlvbi4KLQkgICogQHBhcmFtIGtleSBUaGUgbWVzc2FnZSBrZXkgc3RyaW5nIHByZWZpeGVkIGJ5IGEgIiUiIHN5bWJvbC4KLQkgICogVGhhdCBpcywgdGhlIHN0cmluZyBwYXNzZWQgaW4gbXVzdCBiZSBvZiB0aGUgZm9ybSAiJUtFWSIKLQkgICogd2hlcmUgdGhlIHBsdWdpbi5wcm9wZXJ0aWVzIGZpbGUgY29udGFpbnMgYSBsaW5lIG9mIHRoZQotCSAgKiBmb3JtOiAiS0VZID0gdmFsdWUiLgotCSAgKiBAcGFyYW0gYXJncyBUaGUgc3Vic3RpdHV0aW9uIHZhbHVlcyBmb3IgdGhlIG1lc3NhZ2UKLQkgICogYXMgcmVxdWlyZWQgYnkgdGhlIG1lc3NhZ2UgaW4gcGx1Z2luLnByb3BlcnRpZXMgYW5kCi0JICAqIGJ5IHRoZSBydWxlcyBvZiBjbGFzcyBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdC4KLQkgICogQHJldHVybiBUaGUgbG9jYWxlLXNwZWNpZmljIG1lc3NhZ2UuCi0JICAqLwotCSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0TWVzc2FnZSAoIFN0cmluZyBrZXksIE9iamVjdFtdIGFyZ3MgKQotCSAgewotCSAgICByZXR1cm4gTWVzc2FnZUZvcm1hdC5mb3JtYXQoZ2V0TWVzc2FnZShrZXkpLGFyZ3MpOwotCSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL3dzaWwvSFRNTEhlYWRIYW5kbGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvd3NpbC9IVE1MSGVhZEhhbmRsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTYzYzYwZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvd3NpbC9IVE1MSGVhZEhhbmRsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA1MTcgICAxNDIzMjQgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWw7Ci0KLWltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy54bWwuc2F4LkF0dHJpYnV0ZXM7Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uOwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWFBhcnNlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy54bWwuc2F4LmhlbHBlcnMuRGVmYXVsdEhhbmRsZXI7Ci0KLXB1YmxpYyBjbGFzcyBIVE1MSGVhZEhhbmRsZXIgZXh0ZW5kcyBEZWZhdWx0SGFuZGxlcgotewotICBwcml2YXRlIGZpbmFsIGNoYXIgU1RBUlRfVEFHID0gJzwnOwotICBwcml2YXRlIGZpbmFsIGNoYXIgRU5EX1RBRyA9ICc+JzsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSEVBRF9TVEFSVF9UQUcgPSAiPGhlYWQ+IjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSEVBRF9FTkRfVEFHID0gIjwvaGVhZD4iOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBST09UX1NUQVJUX1RBRyA9ICI8cm9vdD4iOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBST09UX0VORF9UQUcgPSAiPC9yb290PiI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFVURjggPSAiVVRGLTgiOwotICAKLSAgLy9IVE1MIE1FVEEgdGFnIGluZm9ybWF0aW9uIHVzZWQgdG8gZGV0ZWN0IHRoZSBjaGFyc2V0LgotICBwcml2YXRlIGZpbmFsIFN0cmluZyBIVE1MX0NPTlRFTlQgPSAiY29udGVudCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEhUVFBfRVFVSVYgPSAiaHR0cC1lcXVpdiI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEhUVFBfRVFVSVZfQ09OVEVOVF9UWVBFID0gIkNvbnRlbnQtVHlwZSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIENIQVJTRVQgPSAiY2hhcnNldCI7Ci0gIAotICAvLyBXU0lMIHRhZyBpbmZvcm1hdGlvbi4KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgTUVUQSA9ICJtZXRhIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgTkFNRSA9ICJuYW1lIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgU0VSVklDRV9JTlNQRUNUSU9OID0gInNlcnZpY2VJbnNwZWN0aW9uIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgQ09OVEVOVCA9ICJjb250ZW50IjsKLSAgCi0gIC8vIERJU0NPIHRhZyBpbmZvcm1hdGlvbi4KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgTElOSyA9ICJsaW5rIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgVFlQRSA9ICJ0eXBlIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgVEVYVF9YTUwgPSAidGV4dC94bWwiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBSRUwgPSAicmVsIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgQUxURVJOQVRFID0gImFsdGVybmF0ZSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEhSRUYgPSAiaHJlZiI7Ci0gICAgCi0gIHByaXZhdGUgU3RyaW5nIGJhc2VVUklfOwotICBwcml2YXRlIFZlY3RvciB3c2lsc187Ci0gIHByaXZhdGUgVmVjdG9yIGRpc2Nvc187Ci0gIHByaXZhdGUgU3RyaW5nIGJ5dGVFbmNvZGluZyA9IFVURjg7IC8vRGVmYXVsdCB0byBVVEYtOC4KLSAgCi0gIHB1YmxpYyBIVE1MSGVhZEhhbmRsZXIoU3RyaW5nIGJhc2VVUkkpCi0gIHsKLSAgICBzdXBlcigpOwotICAgIGJhc2VVUklfID0gYmFzZVVSSTsKLSAgICB3c2lsc18gPSBuZXcgVmVjdG9yKCk7Ci0gICAgZGlzY29zXyA9IG5ldyBWZWN0b3IoKTsKLSAgfQotIAotICBwdWJsaWMgU3RyaW5nW10gZ2V0V3NpbHMoKQotICB7Ci0gICAgU3RyaW5nW10gd3NpbHMgPSBuZXcgU3RyaW5nW3dzaWxzXy5zaXplKCldOwotICAgIHdzaWxzXy5jb3B5SW50byh3c2lscyk7Ci0gICAgcmV0dXJuIHdzaWxzOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nW10gZ2V0RGlzY29zKCkKLSAgewotICAgIFN0cmluZ1tdIGRpc2NvcyA9IG5ldyBTdHJpbmdbZGlzY29zXy5zaXplKCldOwotICAgIGRpc2Nvc18uY29weUludG8oZGlzY29zKTsKLSAgICByZXR1cm4gZGlzY29zOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzdGFydEVsZW1lbnQoU3RyaW5nIHVyaSwgU3RyaW5nIGxvY2FsTmFtZSwgU3RyaW5nIHFOYW1lLCBBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpIHRocm93cyBTQVhFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyBxTmFtZUxDID0gcU5hbWUudG9Mb3dlckNhc2UoKTsKLSAgICBpZiAocU5hbWVMQy5lcXVhbHMoTUVUQSkpCi0gICAgewotICAgICAgU3RyaW5nIG5hbWVWYWx1ZSA9IGF0dHJpYnV0ZXMuZ2V0VmFsdWUoTkFNRSk7Ci0gICAgICBpZiAoU0VSVklDRV9JTlNQRUNUSU9OLmVxdWFscyhuYW1lVmFsdWUpKQotICAgICAgewotICAgICAgICBTdHJpbmcgd3NpbFVSSSA9IGF0dHJpYnV0ZXMuZ2V0VmFsdWUoQ09OVEVOVCk7Ci0gICAgICAgIGlmIChiYXNlVVJJXyAhPSBudWxsICYmIHdzaWxVUkkuaW5kZXhPZigiOi8iKSA9PSAtMSkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgICBzYi5hcHBlbmQoYmFzZVVSSV8uc3Vic3RyaW5nKDAsIGJhc2VVUklfLmxhc3RJbmRleE9mKCIvIikrMSkpOwotICAgICAgICAgIHNiLmFwcGVuZCh3c2lsVVJJKTsKLSAgICAgICAgICB3c2lsVVJJID0gc2IudG9TdHJpbmcoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIXdzaWxzXy5jb250YWlucyh3c2lsVVJJKSkKLSAgICAgICAgICB3c2lsc18uYWRkKHdzaWxVUkkpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmIChxTmFtZUxDLmVxdWFscyhMSU5LKSkKLSAgICB7Ci0gICAgICAvLyBTZWUgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9tc2RubWFnL2lzc3Vlcy8wMi8wMi94bWwvZGVmYXVsdC5hc3B4IGZvciBtb3JlIGRldGFpbHMgb24gRElTQ08uCi0gICAgICBTdHJpbmcgdHlwZSA9IGF0dHJpYnV0ZXMuZ2V0VmFsdWUoVFlQRSk7Ci0gICAgICBTdHJpbmcgcmVsID0gYXR0cmlidXRlcy5nZXRWYWx1ZShSRUwpOwotICAgICAgU3RyaW5nIGhyZWYgPSBhdHRyaWJ1dGVzLmdldFZhbHVlKEhSRUYpOwotICAgICAgaWYgKFRFWFRfWE1MLmVxdWFscyh0eXBlKSAmJiBBTFRFUk5BVEUuZXF1YWxzKHJlbCkgJiYgaHJlZiAhPSBudWxsKQotICAgICAgewotICAgICAgICBTdHJpbmcgZGlzY29VUkkgPSBocmVmOwotICAgICAgICBpZiAoZGlzY29VUkkuaW5kZXhPZigiOi8iKSA9PSAtMSkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgICBzYi5hcHBlbmQoYmFzZVVSSV8uc3Vic3RyaW5nKDAsYmFzZVVSSV8ubGFzdEluZGV4T2YoIi8iKSsxKSk7Ci0gICAgICAgICAgc2IuYXBwZW5kKGRpc2NvVVJJKTsKLSAgICAgICAgICBkaXNjb1VSSSA9IHNiLnRvU3RyaW5nKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFkaXNjb3NfLmNvbnRhaW5zKGRpc2NvVVJJKSkKLSAgICAgICAgICBkaXNjb3NfLmFkZChkaXNjb1VSSSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBlcnJvcihTQVhQYXJzZUV4Y2VwdGlvbiBlKSB0aHJvd3MgU0FYRXhjZXB0aW9uCi0gIHsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgZmF0YWxFcnJvcihTQVhQYXJzZUV4Y2VwdGlvbiBlKSB0aHJvd3MgU0FYRXhjZXB0aW9uCi0gIHsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgd2FybmluZyhTQVhQYXJzZUV4Y2VwdGlvbiBlKSB0aHJvd3MgU0FYRXhjZXB0aW9uCi0gIHsKLSAgfQotICAKLSAgLyoqCi0gICAqIEFwcGVuZHMgdGhlIGVsZW1lbnRzIG9mIHRoZSBwcm92aWRlZCB0YWcgaW4gdGhlIHByb3ZpZGVkIGRvY3VtZW50IHRvIHRoZSBwcm92aWRlZCBTdHJpbmdCdWZmZXIuCi0gICAqIEBwYXJhbSB0YXJnZXQKLSAgICogQHBhcmFtIGRvY3VtZW50Ci0gICAqIEBwYXJhbSB0YWcKLSAgICogQHBhcmFtIGVuY29kaW5nCi0gICAqIEByZXR1cm4gYm9vbGVhbiBmYWxzZSBpZiB0aGUgdmFsdWUgb2YgdGhlIGVuY29kaW5nIHBhcmFtZXRlciBtYXRjaGVkIHRoZSBkZXRlY3RlZCBjaGFyc2V0IG9yIGlmIG5vIGNoYXJzZXQgd2FzIGRldGVjdGVkLgotICAgKiBSZXR1cm5zIHRydWUgaWYgYSBjaGFyc2V0IHdhcyBkZXRlY3RlZCBhbmQgaXQgZGlkIG5vdCBlcXVhbCB0aGUgZW5jb2RpbmcgcGFyYW1ldGVyLiBJZiB0cnVlIGlzIHJldHVybmVkCi0gICAqIHRoZSBoYXJ2ZXN0aW5nIG9mIHRoZSB0YWdzIHdvdWxkIGhhdmUgc3RvcHBlZCBhdCB0aGUgcG9pbnQgdGhlIGNoYXJzZXQgd2FzIGRldGVjdGVkLiBUaGUgY2FsbGVyCi0gICAqIHNob3VsZCBjYWxsIHRoaXMgbWV0aG9kIGFnYWluIHdpdGggdGhlIGNvcnJlY3QgZW5jb2RpbmcuCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gaGFydmVzdFRhZ3MoU3RyaW5nQnVmZmVyIHRhcmdldCxTdHJpbmcgZG9jdW1lbnQsU3RyaW5nIHRhZywgU3RyaW5nIGVuY29kaW5nKQotICB7Ci0JYm9vbGVhbiBjaGFuZ2VFbmNvZGluZyA9IGZhbHNlOwotICAgIGludCBpbmRleCA9IGRvY3VtZW50LmluZGV4T2YoU1RBUlRfVEFHKTsKLSAgICBpbnQgZG9jdW1lbnRMZW5ndGggPSBkb2N1bWVudC5sZW5ndGgoKTsKLSAgICBpbnQgdGFnTGVuZ3RoID0gdGFnLmxlbmd0aCgpOwotICAgIHdoaWxlIChpbmRleCAhPSAtMSAmJiAoaW5kZXgrMSt0YWdMZW5ndGgpPGRvY3VtZW50TGVuZ3RoKQotICAgIHsKLSAgICAgIFN0cmluZyBzdHIgPSBkb2N1bWVudC5zdWJzdHJpbmcoaW5kZXgrMSxpbmRleCsxK3RhZ0xlbmd0aCk7Ci0gICAgICBpZiAoc3RyLnRvTG93ZXJDYXNlKCkuZXF1YWxzKHRhZykpCi0gICAgICB7Ci0gICAgICAgIHN0ciA9IGRvY3VtZW50LnN1YnN0cmluZyhpbmRleCxkb2N1bWVudC5pbmRleE9mKEVORF9UQUcsaW5kZXgrMSkrMSk7Ci0gICAgICAgIHRhcmdldC5hcHBlbmQoc3RyKTsKLSAgICAgICAgaW5kZXggKz0gc3RyLmxlbmd0aCgpOwotICAgICAgICAKLSAgICAgICAgLy9JZiB0YWcgaXMgTUVUQSBhbmQgZGVjbGFyZXMgdGhlIGNoYXJzZXQsIGZpbmQgb3V0IHdoYXQgaXQgaXMKLSAgICAgICAgLy9hbmQgaWYgaXQgbWF0Y2hlcyB3aGF0IHdhcyBwYXNzZWQgaW4uIElmIGl0IG1hdGNoZXMsIGNvbnRpbnVlIAotICAgICAgICAvL3dpdGggdGhlIHBhcnNpbmcgYW5kIHJldHVybiBmYWxzZSB3aGVuIGNvbXBsZXRlLiAKLSAgICAgICAgLy9JZiB0aGUgZGV0ZWN0ZWQgY2hhcnNldCBpcyBkaWZmZXJlbnQgZnJvbSB3aGF0IHdhcyBwYXNzZWQgaW4sIAotICAgICAgICAvLy0gY2hhbmdlIGJ5dGVFbmNvZGluZyB0byBlcXVhbCB0aGUgZGV0ZWN0ZWQgY2hhcnNldC4KLSAgICAgICAgLy8tIHN0b3AgcGFyc2luZy4KLSAgICAgICAgLy8tIHJldHVybiB0cnVlLgotICAgICAgICBpZiAodGFnLmVxdWFscyhNRVRBKSkKLSAgICAgICAgewotICAgICAgICAgIGludCBpZHhPZkNvbnRlbnQgPSBzdHIuaW5kZXhPZihIVE1MX0NPTlRFTlQpOwotICAgICAgICAgIGludCBpZHhPZkhUVFBFUVVJViA9IHN0ci5pbmRleE9mKEhUVFBfRVFVSVYpOwotICAgICAgICAgIGlmIChpZHhPZkhUVFBFUVVJViE9IC0xICYmIGlkeE9mQ29udGVudCAhPSAtMSkKLSAgICAgICAgICB7Ci0gICAgICAgIAkvL0NoZWNrIGlmIHRoZSBodHRwLWVxdWl2IGF0dHJpYnV0ZSBpcyBzZXQgdG8gQ29udGVudC1UeXBlLgotICAgICAgICAgIAlpbnQgaWR4T2ZIVFRQRVFVSVZPcGVuUXVvdGUgPSBzdHIuaW5kZXhPZigiXCIiLCBpZHhPZkhUVFBFUVVJVisxKTsKLSAgICAgICAgCWludCBpZHhPZkhUVFBFUVVJVkNsb3NpbmdRdW90ZSA9IHN0ci5pbmRleE9mKCJcIiIsIGlkeE9mSFRUUEVRVUlWT3BlblF1b3RlKzEpOwotICAgICAgICAJU3RyaW5nIGhUVFBFUVVJVlZhbHVlVW50cmltbWVkID0gc3RyLnN1YnN0cmluZyhpZHhPZkhUVFBFUVVJVk9wZW5RdW90ZSsxLCBpZHhPZkhUVFBFUVVJVkNsb3NpbmdRdW90ZSk7Ci0gICAgICAgIAlpZiAoaFRUUEVRVUlWVmFsdWVVbnRyaW1tZWQudHJpbSgpLmVxdWFscyhIVFRQX0VRVUlWX0NPTlRFTlRfVFlQRSkpCi0gICAgICAgIAl7Ci0gICAgICAgIAkgIC8vVGhpcyBNRVRBIHRhZyBjb250YWlucyB0aGUgY2hhcnNldC4gR2V0IHRoZSB2YWx1ZSBvZiB0aGUgY29udGVudCBhdHRyaWJ1dGUKLSAgICAgICAgCSAgaW50IGlkeE9mT3BlblF1b3RlID0gc3RyLmluZGV4T2YoIlwiIiwgaWR4T2ZDb250ZW50KzEpOwotICAgICAgICAJICBpbnQgaWR4T2ZDbG9zaW5nUXVvdGUgPSBzdHIuaW5kZXhPZigiXCIiLCBpZHhPZk9wZW5RdW90ZSsxKTsKLSAgICAgICAgCSAgU3RyaW5nIGNvbnRlbnRWYWx1ZSA9IHN0ci5zdWJzdHJpbmcoaWR4T2ZPcGVuUXVvdGUrMSwgaWR4T2ZDbG9zaW5nUXVvdGUpOwotICAgICAgICAJICAKLSAgICAgICAgCSAgLy9HZXQgdGhlIGNoYXJzZXQKLSAgICAgICAgCSAgaW50IGlkeE9mQ2hhclNldCA9IGNvbnRlbnRWYWx1ZS5pbmRleE9mKENIQVJTRVQpOwotICAgICAgICAJICBpbnQgaWR4T2ZFcXVhbHMgPSBjb250ZW50VmFsdWUuaW5kZXhPZigiPSIsIGlkeE9mQ2hhclNldCtDSEFSU0VULmxlbmd0aCgpKTsKLSAgICAgICAgCSAgU3RyaW5nIGRldGVjdGVkRW5jb2RpbmdWYWx1ZVVudHJpbW1lZCA9IGNvbnRlbnRWYWx1ZS5zdWJzdHJpbmcoaWR4T2ZFcXVhbHMrMSk7Ci0gICAgICAgIAkgIFN0cmluZyBkZXRlY3RlZEVuY29kaW5nVmFsdWUgPSBkZXRlY3RlZEVuY29kaW5nVmFsdWVVbnRyaW1tZWQudHJpbSgpOwotICAgICAgICAJICBpZiAoIWRldGVjdGVkRW5jb2RpbmdWYWx1ZS5lcXVhbHMoZW5jb2RpbmcpKQotICAgICAgICAJICB7Ci0gICAgICAgIAkgICAgYnl0ZUVuY29kaW5nID0gZGV0ZWN0ZWRFbmNvZGluZ1ZhbHVlOwotICAgICAgICAJICAgIGNoYW5nZUVuY29kaW5nID0gdHJ1ZTsKLSAgICAgICAgCSAgICBicmVhazsKLSAgICAgICAgCSAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICBpbmRleCsrOwotICAgICAgaW5kZXggPSBkb2N1bWVudC5pbmRleE9mKFNUQVJUX1RBRyxpbmRleCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBjaGFuZ2VFbmNvZGluZzsKLSAgfQotICAKLQotICAvKioKLSAgICogSWYgdGhlIHByb3ZpZGVkIGJ5dGUgYXJyYXkgcmVwZXJlc2VudHMgdGhlIGNvbnRlbnRzIG9mIGFuIEhUTUwKLSAgICogZG9jdW1lbnQsIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIGEgYnl0ZSBhcnJheSBpbiB3aGljaAotICAgKiA8dWw+Ci0gICAqIDxsaT50aGUgb3BlbmluZyBhbmQgY2xvc2luZyBIRUFEIHRhZ3MgYXJlIHJlbW92ZWQgYW5kIHJlcGxhY2VkIHdpdGggCi0gICAqIG9wZW5pbmcgYW5kIGNsb3NpbmcgPHJvb3Q+IHRhZ3M8L2xpPgotICAgKiA8bGk+b25seSB0aGUgTUVUQSBhbmQgTElOSyBlbGVtZW50cyBhcmUgaW4gdGhlIEhUTUwgZG9jdW1lbnQKLSAgICogYXJlIGluY2x1ZGVkIGluIHRoZSBjb250ZW50cyBiZXR3ZWVuIHRoZSBvcGVuaW5nIGFuZCBjbG9zaW5nCi0gICAqIDxyb290PiB0YWdzLgotICAgKiA8L3VsPgotICAgKiBUaGlzIG1ldGhvZCB3aWxsIG1vZGlmeSB0aGUgdmFsdWUgb2YgdGhlIGJ5dGVFbmNvZGluZyBTdHJpbmcKLSAgICogYXR0cmlidXRlIG9uIHRoaXMgY2xhc3MgaWYgaXQgaXMgc29tZXRoaW5nIG90aGVyIHRoYW4KLSAgICogVVRGLTguIENhbGxlcnMgb2YgdGhpcyBtZXRob2Qgc2hvdWxkIGNhbGwgZ2V0Qnl0ZUVuY29kaW5nKCkKLSAgICogYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCBpZiB0aGV5IG5lZWQgdG8ga25vdyB0aGUgY2hhcnNldAotICAgKiB2YWx1ZSB1c2VkIGJ5IHRoaXMgbWV0aG9kIHRvIGRlY29kZS9lbmRjb2RlIHRoZSBieXRlIGFycmF5LgotICAgKiBAcGFyYW0gYgotICAgKiBAcmV0dXJuIGJ5dGVbXQotICAgKi8KLSAgcHVibGljIGJ5dGVbXSBoYXJ2ZXN0SGVhZFRhZ3MoYnl0ZVtdIGIpCi0gIHsKLSAgICBTdHJpbmcgczsKLSAgICAKLSAgICB0cnkKLSAgICB7Ci0gICAgCS8vQXNzdW1lIHRoZSBkZWZhdWx0IGJ5dGUgZW5jb2Rpbmcgb2YgVVRGLTggZm9yIG5vdy4KLSAgICAJcyA9IG5ldyBTdHJpbmcoYiwgYnl0ZUVuY29kaW5nKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gdWVlKQotICAgIHsKLSAgICAgIHMgPSBuZXcgU3RyaW5nKGIpOwotICAgIH0KLSAgICBTdHJpbmcgaGVhZCA9IHMudG9Mb3dlckNhc2UoKTsKLSAgICBpbnQgaGVhZFN0YXJ0SW5kZXggPSBoZWFkLmluZGV4T2YoSEVBRF9TVEFSVF9UQUcpOwotICAgIGludCBoZWFkRW5kSW5kZXggPSBoZWFkLmluZGV4T2YoSEVBRF9FTkRfVEFHKTsKLSAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgc2IuYXBwZW5kKFJPT1RfU1RBUlRfVEFHKTsKLSAgICBpZiAoaGVhZFN0YXJ0SW5kZXggIT0gLTEgJiYgaGVhZEVuZEluZGV4ICE9IC0xKQotICAgIHsKLSAgICAgIGhlYWQgPSBzLnN1YnN0cmluZyhoZWFkU3RhcnRJbmRleCwgaGVhZEVuZEluZGV4K0hFQURfRU5EX1RBRy5sZW5ndGgoKSk7Ci0gICAgICBib29sZWFuIGVuY29kaW5nQ2hhbmdlZCA9IGhhcnZlc3RUYWdzKHNiLGhlYWQsTUVUQSwgYnl0ZUVuY29kaW5nKTsKLSAgICAgIGlmIChlbmNvZGluZ0NoYW5nZWQpCi0gICAgICB7Ci0gICAgCSAgLy9UaGUgaGFydmVzdFRhZ3MgbWV0aG9kIGRldGVjdGVkIGEgZGlmZmVyZW50IGNoYXJzZXQKLSAgICAJICAvL3RoYW4gdGhlIG9uZSB0aGF0IHdhcyBwYXNzZWQgaW4uIFN0YXJ0IGZyb20gdGhlIGJlZ2lubmluZwotICAgIAkgIC8vd2l0aCB0aGUgY29ycmVjdCBjaGFyc2V0LgotICAgIAkgICAgU3RyaW5nIHMyOwotICAgIAkgICAgdHJ5Ci0gICAgCSAgICB7Ci0gICAgCSAgICAJczIgPSBuZXcgU3RyaW5nKGIsIGJ5dGVFbmNvZGluZyk7Ci0gICAgCSAgICB9Ci0gICAgCSAgICBjYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiB1ZWUpCi0gICAgCSAgICB7Ci0gICAgCSAgICAgIHMyID0gbmV3IFN0cmluZyhiKTsKLSAgICAJICAgIH0KLSAgICAJICAgIFN0cmluZyBoZWFkMiA9IHMyLnRvTG93ZXJDYXNlKCk7Ci0gICAgCSAgICBpbnQgaGVhZDJTdGFydEluZGV4ID0gaGVhZDIuaW5kZXhPZihIRUFEX1NUQVJUX1RBRyk7Ci0gICAgCSAgICBpbnQgaGVhZDJFbmRJbmRleCA9IGhlYWQyLmluZGV4T2YoSEVBRF9FTkRfVEFHKTsKLSAgICAJICAgIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIAkgICAgc2IuYXBwZW5kKFJPT1RfU1RBUlRfVEFHKTsKLSAgICAJICAgIGlmIChoZWFkMlN0YXJ0SW5kZXggIT0gLTEgJiYgaGVhZDJFbmRJbmRleCAhPSAtMSkKLSAgICAJICAgIHsKLSAgICAJICAgICAgaGVhZDIgPSBzMi5zdWJzdHJpbmcoaGVhZDJTdGFydEluZGV4LCBoZWFkMkVuZEluZGV4K0hFQURfRU5EX1RBRy5sZW5ndGgoKSk7Ci0gICAgCSAgICAgIGhhcnZlc3RUYWdzKHNiLGhlYWQyLE1FVEEsIGJ5dGVFbmNvZGluZyk7Ci0gICAgCSAgICAgIGhhcnZlc3RUYWdzKHNiLGhlYWQyLExJTkssYnl0ZUVuY29kaW5nKTsKLSAgICAJICAgIH0gICAgCSAgCi0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGhhcnZlc3RUYWdzKHNiLGhlYWQsTElOSyxieXRlRW5jb2RpbmcpOwotICAgICAgfQotICAgIH0KLSAgICBzYi5hcHBlbmQoUk9PVF9FTkRfVEFHKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgCXJldHVybiBzYi50b1N0cmluZygpLmdldEJ5dGVzKGJ5dGVFbmNvZGluZyk7ICAgICAgCi0gICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiB1ZWUpCi0gICAgewotICAgICAgcmV0dXJuIHNiLnRvU3RyaW5nKCkuZ2V0Qnl0ZXMoKTsKLSAgICB9ICAgIAotICAgIAotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldEJ5dGVFbmNvZGluZygpCi0gIHsKLQkgIHJldHVybiBieXRlRW5jb2Rpbmc7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci93c2lsL0lsbGVnYWxBcmd1bWVudHNFeGNlcHRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci93c2lsL0lsbGVnYWxBcmd1bWVudHNFeGNlcHRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWE3ZmUxYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvd3NpbC9JbGxlZ2FsQXJndW1lbnRzRXhjZXB0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbDsKLQotcHVibGljIGNsYXNzIElsbGVnYWxBcmd1bWVudHNFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24KLXsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gLTI1MzM5ODExNzYyODU1NjEyMzRMOwotCi0gIHB1YmxpYyBJbGxlZ2FsQXJndW1lbnRzRXhjZXB0aW9uKFN0cmluZyBhcmcpCi0gIHsKLSAgICBzdXBlcihhcmcpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvd3NpbC9VRERJVVJJSGVscGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvd3NpbC9VRERJVVJJSGVscGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjM2U4OTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL3dzaWwvVURESVVSSUhlbHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWw7Ci0KLWltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKLWltcG9ydCBqYXZhLnRleHQuUGFyc2VFeGNlcHRpb247Ci0KLXB1YmxpYyBjbGFzcyBVRERJVVJJSGVscGVyCi17Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWVNFUlZJQ0VfVVJJX1RFTVBMQVRFID0gInVkZGlzZXJ2aWNlOnF1ZXJ5OnswfTpxdWVyeTp7MX0iOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VSVklDRUtFWV9VUklfVEVNUExBVEUgPSAidWRkaXNlcnZpY2U6c2VydmljZUtleTp7MH06c2VydmljZUtleTp7MX0iOwotICAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0UXVlcnlTZXJ2aWNlVVJJKFN0cmluZyBxdWVyeSxTdHJpbmcgaW5xdWlyeVVSTCkKLSAgewotICAgIFN0cmluZ1tdIHVyaVBhcmFtcyA9IHtxdWVyeSxpbnF1aXJ5VVJMfTsKLSAgICByZXR1cm4gTWVzc2FnZUZvcm1hdC5mb3JtYXQoUVVFUllTRVJWSUNFX1VSSV9URU1QTEFURSx1cmlQYXJhbXMpOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRTZXJ2aWNlS2V5VVJJKFN0cmluZyBzZXJ2aWNlS2V5LFN0cmluZyBpbnF1aXJ5VVJMKQotICB7Ci0gICAgU3RyaW5nW10gdXJpUGFyYW1zID0ge3NlcnZpY2VLZXksaW5xdWlyeVVSTH07Ci0gICAgcmV0dXJuIE1lc3NhZ2VGb3JtYXQuZm9ybWF0KFNFUlZJQ0VLRVlfVVJJX1RFTVBMQVRFLHVyaVBhcmFtcyk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIHBhcnNlVVJJKFN0cmluZyBwYXR0ZXJuLFN0cmluZyB1cmkpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBNZXNzYWdlRm9ybWF0IG1mID0gbmV3IE1lc3NhZ2VGb3JtYXQocGF0dGVybik7Ci0gICAgICBPYmplY3RbXSBwYXJzZWRSZXN1bHRzID0gbWYucGFyc2UodXJpKTsKLSAgICAgIGlmIChwYXJzZWRSZXN1bHRzICE9IG51bGwgJiYgcGFyc2VkUmVzdWx0cy5sZW5ndGggPiAwKQotICAgICAgewotICAgICAgICBTdHJpbmdbXSByZXN1bHRzID0gbmV3IFN0cmluZ1twYXJzZWRSZXN1bHRzLmxlbmd0aF07Ci0gICAgICAgIGZvciAoaW50IGk9MDtpPHBhcnNlZFJlc3VsdHMubGVuZ3RoO2krKykKLSAgICAgICAgICByZXN1bHRzW2ldID0gKFN0cmluZylwYXJzZWRSZXN1bHRzW2ldOwotICAgICAgICByZXR1cm4gcmVzdWx0czsKLSAgICAgIH0gICAgICAgIAotICAgIH0KLSAgICBjYXRjaCAoUGFyc2VFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZ1tdIHBhcnNlU2VydmljZUtleVVSSShTdHJpbmcgdXJpKQotICB7Ci0gICAgcmV0dXJuIHBhcnNlVVJJKFNFUlZJQ0VLRVlfVVJJX1RFTVBMQVRFLHVyaSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nW10gcGFyc2VRdWVyeVNlcnZpY2VVUkkoU3RyaW5nIHVyaSkKLSAgewotICAgIHJldHVybiBwYXJzZVVSSShRVUVSWVNFUlZJQ0VfVVJJX1RFTVBMQVRFLHVyaSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci93c2lsL1dTSUxNZXNzYWdlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL3dzaWwvV1NJTE1lc3NhZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyODZiYTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL3dzaWwvV1NJTE1lc3NhZ2VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLXB1YmxpYyBjbGFzcyBXU0lMTWVzc2FnZXMgZXh0ZW5kcyBOTFMKLXsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gIm9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC53c2lsIjsgLy8kTk9OLU5MUy0xJAotICAKLSAgc3RhdGljCi0gIHsKLSAgICBOTFMuaW5pdGlhbGl6ZU1lc3NhZ2VzKEJVTkRMRV9OQU1FLCBXU0lMTWVzc2FnZXMuY2xhc3MpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX0lOVkFMSURfQVJHVU1FTlRTOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfSUxMRUdBTF9BUkdVTUVOVFM7Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9JTlZBTElEX1dTRExfVVJJOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfSU5WQUxJRF9XU0lMX1VSSTsKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1VOUkVTT0xWQUJMRV9XU0RMOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfVU5FWFBFQ1RFRF9FWENFUFRJT047Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9NQUxGT1JNRURfV1NETDsKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1dSSVRFX1dTSUw7Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL3dzaWwvV1dXQXV0aGVudGljYXRpb25FeGNlcHRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci93c2lsL1dXV0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmNmFlMzQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL3dzaWwvV1dXQXV0aGVudGljYXRpb25FeGNlcHRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotcHVibGljIGNsYXNzIFdXV0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uCi17Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IC00OTE4MjExMDIxNjIwMzE2MDQ5TDsKLQotICBwcml2YXRlIElPRXhjZXB0aW9uIGlvZV87Ci0gIHByaXZhdGUgU3RyaW5nIHd3d0F1dGhNc2dfOwotICBwcml2YXRlIFN0cmluZyB1cmxfOwotCi0gIHB1YmxpYyBXV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbihJT0V4Y2VwdGlvbiBpb2UsIFN0cmluZyB3d3dBdXRoTXNnLCBTdHJpbmcgdXJsKQotICB7Ci0gICAgc3VwZXIoaW9lLmdldE1lc3NhZ2UoKSk7Ci0gICAgaW9lXyA9IGlvZTsKLSAgICB3d3dBdXRoTXNnXyA9IHd3d0F1dGhNc2c7Ci0gICAgdXJsXyA9IHVybDsKLSAgfQotCi0gIHB1YmxpYyBJT0V4Y2VwdGlvbiBnZXRJT0V4Y2VwdGlvbigpCi0gIHsKLSAgICByZXR1cm4gaW9lXzsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V1dXQXV0aGVudGljYXRpb25Nc2coKQotICB7Ci0gICAgcmV0dXJuIHd3d0F1dGhNc2dfOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRVUkwoKQotICB7Ci0gICAgcmV0dXJuIHVybF87Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci93c2lsL1dXV0F1dGhlbnRpY2F0aW9uSGFuZGxlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL3dzaWwvV1dXQXV0aGVudGljYXRpb25IYW5kbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2ZGViYWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL3dzaWwvV1dXQXV0aGVudGljYXRpb25IYW5kbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbDsKLQotcHVibGljIGludGVyZmFjZSBXV1dBdXRoZW50aWNhdGlvbkhhbmRsZXIKLXsKLSAgcHVibGljIHZvaWQgaGFuZGxlV1dXQXV0aGVudGljYXRpb24oV1dXQXV0aGVudGljYXRpb25FeGNlcHRpb24gd3d3YWUpOwotICBwdWJsaWMgU3RyaW5nIGdldFVzZXJuYW1lKCk7Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0UGFzc3dvcmQoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci93c2lsL1dlYlNlcnZpY2VFbnRpdHkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BhcnNlci93c2lsL1dlYlNlcnZpY2VFbnRpdHkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDkxN2JkZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvd3NpbC9XZWJTZXJ2aWNlRW50aXR5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZUVudGl0eQotewotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUWVBFX1VOS05PV04gPSAtMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVFlQRV9IVE1MID0gMDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVFlQRV9XU0lMID0gMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVFlQRV9XU0RMID0gMjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVFlQRV9VRERJX1NFUlZJQ0UgPSAzOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUWVBFX0RJU0NPID0gNDsKLQotICBwcml2YXRlIE9iamVjdCBwYXJlbnRfOwotICBwcml2YXRlIExpc3QgY2hpbGRyZW5fOwotICBwcml2YXRlIGludCB0eXBlXzsKLSAgcHJpdmF0ZSBTdHJpbmcgdXJpXzsKLSAgcHJpdmF0ZSBieXRlW10gYnl0ZXNfOwotICBwcml2YXRlIFN0cmluZyBodHRwVXNlcm5hbWVfOwotICBwcml2YXRlIFN0cmluZyBodHRwUGFzc3dvcmRfOwotICBwcml2YXRlIFN0cmluZyBkb2N1bWVudGF0aW9uXzsKLSAgcHJpdmF0ZSBPYmplY3QgbW9kZWxfOwotCi0gIHB1YmxpYyBXZWJTZXJ2aWNlRW50aXR5KCkKLSAgewotICAgIHBhcmVudF8gPSBudWxsOwotICAgIGNoaWxkcmVuXyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICB0eXBlXyA9IFRZUEVfVU5LTk9XTjsKLSAgICB1cmlfID0gbnVsbDsKLSAgICBieXRlc18gPSBudWxsOwotICAgIGh0dHBVc2VybmFtZV8gPSBudWxsOwotICAgIGh0dHBQYXNzd29yZF8gPSBudWxsOwotICAgIGRvY3VtZW50YXRpb25fID0gbnVsbDsKLSAgICBtb2RlbF8gPSBudWxsOwotICB9Ci0KLSAgcHVibGljIE9iamVjdCBnZXRQYXJlbnQoKQotICB7Ci0gICAgcmV0dXJuIHBhcmVudF87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRQYXJlbnQoT2JqZWN0IHBhcmVudCkKLSAgewotICAgIHBhcmVudF8gPSBwYXJlbnQ7Ci0gIH0KLQotICBwdWJsaWMgTGlzdCBnZXRDaGlsZHJlbigpCi0gIHsKLSAgICByZXR1cm4gY2hpbGRyZW5fOwotICB9Ci0KLSAgcHVibGljIHZvaWQgYWRkQ2hpbGQoT2JqZWN0IGNoaWxkKQotICB7Ci0gICAgY2hpbGRyZW5fLmFkZChjaGlsZCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZW1vdmVDaGlsZChPYmplY3QgY2hpbGQpCi0gIHsKLSAgICBjaGlsZHJlbl8ucmVtb3ZlKGNoaWxkKTsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0VHlwZSgpCi0gIHsKLSAgICByZXR1cm4gdHlwZV87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRUeXBlKGludCB0eXBlKQotICB7Ci0gICAgdHlwZV8gPSB0eXBlOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRVUkkoKQotICB7Ci0gICAgcmV0dXJuIHVyaV87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRVUkkoU3RyaW5nIHVyaSkKLSAgewotICAgIHVyaV8gPSB1cmk7Ci0gIH0KLQotICBwdWJsaWMgYnl0ZVtdIGdldEJ5dGVzKCkKLSAgewotICAgIHJldHVybiBieXRlc187Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRCeXRlcyhieXRlW10gYnl0ZXMpCi0gIHsKLSAgICBieXRlc18gPSBieXRlczsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SFRUUFVzZXJuYW1lKCkKLSAgewotICAgIHJldHVybiBodHRwVXNlcm5hbWVfOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0SFRUUFVzZXJuYW1lKFN0cmluZyBodHRwVXNlcm5hbWUpCi0gIHsKLSAgICBodHRwVXNlcm5hbWVfID0gaHR0cFVzZXJuYW1lOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRIVFRQUGFzc3dvcmQoKQotICB7Ci0gICAgcmV0dXJuIGh0dHBQYXNzd29yZF87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRIVFRQUGFzc3dvcmQoU3RyaW5nIGh0dHBQYXNzd29yZCkKLSAgewotICAgIGh0dHBQYXNzd29yZF8gPSBodHRwUGFzc3dvcmQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RG9jdW1lbnRhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gZG9jdW1lbnRhdGlvbl87Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldERvY3VtZW50YXRpb24oU3RyaW5nIGRvY3VtZW50YXRpb24pCi0gIHsKLSAgICBkb2N1bWVudGF0aW9uXyA9IGRvY3VtZW50YXRpb247Ci0gIH0KLSAgCi0gIHB1YmxpYyBPYmplY3QgZ2V0TW9kZWwoKQotICB7Ci0gICAgcmV0dXJuIG1vZGVsXzsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0TW9kZWwoT2JqZWN0IG1vZGVsKQotICB7Ci0gICAgbW9kZWxfID0gbW9kZWw7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc0VudGl0eVJlc29sdmVkKCkKLSAgewotICAgIHJldHVybiAoYnl0ZXNfICE9IG51bGwpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvd3NpbC9XZWJTZXJ2aWNlc1BhcnNlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL3dzaWwvV2ViU2VydmljZXNQYXJzZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODVjYjQxYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvd3NpbC9XZWJTZXJ2aWNlc1BhcnNlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDUwNCAgIDExOTI5NiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKiAyMDA2MDUxNyAgIDE0MjMyNCByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqIDIwMDYwNzExICAgMTUwMzAxIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDYwODE4ICAgMTU0MzkzIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDYwOTA2ICAgMTU2NDIwIHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbDsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLm5ldC5VUkxDb25uZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLmZhY3RvcnkuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgud3NkbC54bWwuV1NETFJlYWRlcjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlNBWFBhcnNlcjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5TQVhQYXJzZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5BYnN0cmFjdDsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLkluc3BlY3Rpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLkxpbms7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLldTSUxDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLldTSUxEb2N1bWVudDsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuV1NJTEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuZXh0ZW5zaW9uLkV4dGVuc2lvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLmV4dGVuc2lvbi51ZGRpLlNlcnZpY2VEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuZXh0ZW5zaW9uLnVkZGkuVURESUNvbnN0YW50czsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuZXh0ZW5zaW9uLndzZGwuV1NETENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZGlzY28uRElTQ09Db250cmFjdFJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmRpc2NvLkRJU0NPUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIuZGlzY28uRElTQ09SZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBsdWdpbjsKLWltcG9ydCBvcmcueG1sLnNheC5JbnB1dFNvdXJjZTsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci1pbXBvcnQgc3VuLm1pc2MuQkFTRTY0RW5jb2RlcjsKLQotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VzUGFyc2VyCi17Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBBUlNFX05PTkUgPSAwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQQVJTRV9XU0lMID0gMTw8MDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUEFSU0VfV1NETCA9IDE8PDE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBBUlNFX0xJTktTID0gMTw8MjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUEFSU0VfRElTQ08gPSAxPDwzOwotCi0gIHByaXZhdGUgU3RyaW5nIHVyaV87Ci0gIHByaXZhdGUgSGFzaHRhYmxlIHVyaVRvRW50aXR5VGFibGVfOwotCi0gIHByaXZhdGUgU3RyaW5nIGh0dHBCYXNpY0F1dGhVc2VybmFtZV87Ci0gIHByaXZhdGUgU3RyaW5nIGh0dHBCYXNpY0F1dGhQYXNzd29yZF87Ci0KLSAgcHVibGljIFdlYlNlcnZpY2VzUGFyc2VyKCkKLSAgewotICAgIHRoaXMobnVsbCk7Ci0gIH0KLQotICBwdWJsaWMgV2ViU2VydmljZXNQYXJzZXIoU3RyaW5nIHVyaSkKLSAgewotICAgIHVyaV8gPSB1cmk7Ci0gICAgdXJpVG9FbnRpdHlUYWJsZV8gPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgaHR0cEJhc2ljQXV0aFVzZXJuYW1lXyA9IG51bGw7Ci0gICAgaHR0cEJhc2ljQXV0aFBhc3N3b3JkXyA9IG51bGw7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFVSSSgpCi0gIHsKLSAgICByZXR1cm4gdXJpXzsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFVSSShTdHJpbmcgdXJpKQotICB7Ci0gICAgdXJpXyA9IHVyaTsKLSAgfQotCi0gIHB1YmxpYyBXZWJTZXJ2aWNlRW50aXR5IGdldFdlYlNlcnZpY2VFbnRpdHlCeVVSSShTdHJpbmcgdXJpKQotICB7Ci0gICAgaWYgKHVyaSAhPSBudWxsKQotICAgICAgcmV0dXJuIChXZWJTZXJ2aWNlRW50aXR5KXVyaVRvRW50aXR5VGFibGVfLmdldCh1cmkpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIAotICAgKiBAcGFyYW0gd3NpbFVSSQotICAgKiBAcmV0dXJuCi0gICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIHdpdGggZ2V0V1NJTERvY3VtZW50VmVyYm9zZShTdHJpbmcsIFN0cmluZykKLSAgICovCi0gIHB1YmxpYyBXU0lMRG9jdW1lbnQgZ2V0V1NJTERvY3VtZW50KFN0cmluZyB3c2lsVVJJICkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHJldHVybiBnZXRXU0lMRG9jdW1lbnRWZXJib3NlKHdzaWxVUkksICJVVEYtOCIgKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgIHsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiAKLSAgICogQHBhcmFtIHdzaWxVUkkKLSAgICogQHJldHVybgotICAgKiBAdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbgotICAgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0gICAqIEB0aHJvd3MgV1dXQXV0aGVudGljYXRpb25FeGNlcHRpb24KLSAgICogQHRocm93cyBXU0lMRXhjZXB0aW9uCi0gICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIHdpdGggZ2V0V1NJTERvY3VtZW50VmVyYm9zZShTdHJpbmcsIFN0cmluZykKLSAgICovCi0gIHB1YmxpYyBXU0lMRG9jdW1lbnQgZ2V0V1NJTERvY3VtZW50VmVyYm9zZShTdHJpbmcgd3NpbFVSSSApIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBXV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbiwgV1NJTEV4Y2VwdGlvbgotICB7Ci0gICAgcmV0dXJuIGdldFdTSUxEb2N1bWVudFZlcmJvc2UoIHdzaWxVUkksICJVVEYtOCIgKTsKLSAgfQotICAKLSAgcHVibGljIFdTSUxEb2N1bWVudCBnZXRXU0lMRG9jdW1lbnRWZXJib3NlKFN0cmluZyB3c2lsVVJJLCBTdHJpbmcgYnl0ZUVuY29kaW5nICkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIFdXV0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uLCBXU0lMRXhjZXB0aW9uCi0gIHsKLSAgICBXZWJTZXJ2aWNlRW50aXR5IHdzRW50aXR5ID0gZ2V0V2ViU2VydmljZUVudGl0eUJ5VVJJKHdzaWxVUkkpOwotICAgIAotICAgIGlmICh3c0VudGl0eSA9PSBudWxsKQotICAgIHsKLSAgICAgIHdzRW50aXR5ID0gbmV3IFdlYlNlcnZpY2VFbnRpdHkoKTsKLSAgICAgIHdzRW50aXR5LnNldFVSSSh3c2lsVVJJKTsKLSAgICAgIHVyaVRvRW50aXR5VGFibGVfLnB1dCh3c2lsVVJJLCB3c0VudGl0eSk7Ci0gICAgfQotICAgIAotICAgIFdTSUxEb2N1bWVudCB3c2lsRG9jdW1lbnQgPSAoV1NJTERvY3VtZW50KXdzRW50aXR5LmdldE1vZGVsKCk7Ci0gICAgCi0gICAgaWYgKHdzaWxEb2N1bWVudCA9PSBudWxsKQotICAgIHsKLSAgICAgIC8vIEZvciBzb21lIHJlYXNvbiBXU0RMNEogaXMgbm90IHJlYWRpbmcgdGhlIGNvbnRlbnQgdHlwZSBwcm9wZXJseSBmb3IgcGxhdGZvcm0gcmVzb3VyY2VzLiAgVGhlcmVmb3JlLCB3ZSB3aWxsIGdldAotICAgICAgLy8gdGhlIHN0cmVhbSBkaXJlY3RseSBmcm9tIEVjbGlwc2UgaWYgd2UgZmluZCBhIHBsYXRmb3JtIHByb3RvY29sIHNwZWNpZmllZCBpbiB0aGUgVVJMLgotICAgICAgaWYoIHdzaWxVUkkuc3RhcnRzV2l0aCggInBsYXRmb3JtOi9yZXNvdXJjZSIgKSApCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyAgICBwYXRoICAgICA9IHdzaWxVUkkuc3Vic3RyaW5nKDE4KTsKLSAgICAgICAgSVJlc291cmNlIHJlc291cmNlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5maW5kTWVtYmVyKCBwYXRoICk7Ci0gICAgICAgIAotICAgICAgICBpZiggcmVzb3VyY2UgaW5zdGFuY2VvZiBJRmlsZSApCi0gICAgICAgIHsKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBJRmlsZSAgICAgICAgICAgICBmaWxlICAgPSAoSUZpbGUpcmVzb3VyY2U7Ci0gICAgICAgICAgICBJbnB1dFN0cmVhbSAgICAgICBzdHJlYW0gPSBmaWxlLmdldENvbnRlbnRzKCk7Ci0gICAgICAgICAgICBJbnB1dFN0cmVhbVJlYWRlciByZWFkZXIgPSBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoIHN0cmVhbSwgZmlsZS5nZXRDaGFyc2V0KCkgKTsKLSAgICAgICAgICAKLSAgICAgICAgICAgIHdzaWxEb2N1bWVudCA9IFdTSUxEb2N1bWVudC5uZXdJbnN0YW5jZSgpOwotICAgICAgICAgICAgd3NpbERvY3VtZW50LnJlYWQoIHJlYWRlciApOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCggQ29yZUV4Y2VwdGlvbiBleGMgKXt9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gVE9ETyB0aGUgZm9sbG93aW5nIDMgbGluZXMgb2YgY29kZSBzaG91bGQgcHJvYmFibHkgYmUgcmVtb3ZlZCwgc2luY2UKLSAgICAgICAgLy8gdGhlIFdTREw0SiBwYXJzZXIgZG9lcyBub3QgbmVlZCBhIGJ5dGUgc3RyZWFtLgotICAgICAgICBieXRlW10gYiA9IGdldElucHV0U3RyZWFtQXNCeXRlQXJyYXkod3NpbFVSSSk7Ci0gICAgICAgIHdzRW50aXR5LnNldEJ5dGVzKGIpOwotICAgICAgICBzZXRIVFRQU2V0dGluZ3Mod3NFbnRpdHkpOwotICAgICAgCi0gICAgICAgIC8vIFRoaXMgcGFyc2VyIG9ubHkgY2hlY2tzIHRoZSBoZWFkZXIgb2YgSFRNTCBmb3IgYSBwYXJ0aWN1bGFyIGVuY29kaW5nLgotICAgICAgICAvLyBJdCBkb2Vzbid0IGNoZWNrIHRoZSBlbmNvZGluZyBmb3IgZ2VuZXJhbCBYTUwgZG9jdW1lbnRzIGxpa2UgV1NETCBhbmQgV1NJTC4KLSAgICAgICAgLy8gVGhpcyBjYXVzaW5nIHRoaXMgcGFyc2VyIHRvIGFsd2F5IHVzZSBVVEYtOCBhcyB0aGUgZW5jb2RpbmcuICBUaGVyZWZvcmUsCi0gICAgICAgIC8vIHNpbmNlIHdlIGNhbiBub3QgdHJ1c3QgdGhlIGVuY29kaW5nIHNwZWNpZmllZCB3ZSB3aWxsIG5vdCB1c2UgaXQuICBJbnN0ZWFkLAotICAgICAgICAvLyB3ZSB3aWxsIGp1c3QgbGV0IHRoZSBXU0lMIHBhcnNlciBmaWd1cmUgb3V0IHdoYXQgZW5jb2RpbmcgdG8gdXNlLgotICAgICAgCi0gICAgICAgIC8vSW5wdXRTdHJlYW1SZWFkZXIgaXNyID0gbmV3IElucHV0U3RyZWFtUmVhZGVyKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShiKSwgYnl0ZUVuY29kaW5nICk7Ci0gICAgICAgIHdzaWxEb2N1bWVudCA9IFdTSUxEb2N1bWVudC5uZXdJbnN0YW5jZSgpOwotICAgICAgICB3c2lsRG9jdW1lbnQucmVhZCh3c2lsVVJJKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgd3NFbnRpdHkuc2V0VHlwZShXZWJTZXJ2aWNlRW50aXR5LlRZUEVfV1NJTCk7Ci0gICAgICB3c0VudGl0eS5zZXRNb2RlbCh3c2lsRG9jdW1lbnQpOwotICAgIH0KLSAgICByZXR1cm4gd3NpbERvY3VtZW50OwotICB9Ci0KLSAgcHVibGljIERlZmluaXRpb24gZ2V0V1NETERlZmluaXRpb24oU3RyaW5nIHdzZGxVUkkpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICByZXR1cm4gZ2V0V1NETERlZmluaXRpb25WZXJib3NlKHdzZGxVUkkpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0gICAgewotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBEZWZpbml0aW9uIGdldFdTRExEZWZpbml0aW9uVmVyYm9zZShTdHJpbmcgd3NkbFVSSSkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIFdXV0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uLCBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBXZWJTZXJ2aWNlRW50aXR5IHdzRW50aXR5ID0gZ2V0V2ViU2VydmljZUVudGl0eUJ5VVJJKHdzZGxVUkkpOwotICAgIGlmICh3c0VudGl0eSA9PSBudWxsKQotICAgIHsKLSAgICAgIHdzRW50aXR5ID0gbmV3IFdlYlNlcnZpY2VFbnRpdHkoKTsKLSAgICAgIHdzRW50aXR5LnNldFVSSSh3c2RsVVJJKTsKLSAgICAgIHVyaVRvRW50aXR5VGFibGVfLnB1dCh3c2RsVVJJLCB3c0VudGl0eSk7Ci0gICAgfQotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKXdzRW50aXR5LmdldE1vZGVsKCk7Ci0gICAgaWYgKGRlZmluaXRpb24gPT0gbnVsbCkKLSAgICB7Ci0gICAgICBieXRlW10gYiA9IGdldElucHV0U3RyZWFtQXNCeXRlQXJyYXkod3NkbFVSSSk7Ci0gICAgICB3c0VudGl0eS5zZXRCeXRlcyhiKTsKLSAgICAgIHNldEhUVFBTZXR0aW5ncyh3c0VudGl0eSk7Ci0gICAgICBCeXRlQXJyYXlJbnB1dFN0cmVhbSBiYWlzID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGIpOwotICAgICAgV1NETEZhY3RvcnkgZmFjdG9yeSA9IFdTRExQbHVnaW4uSU5TVEFOQ0UuY3JlYXRlV1NETDRKRmFjdG9yeSgpOwotICAgICAgV1NETFJlYWRlciB3c2RsUmVhZGVyID0gZmFjdG9yeS5uZXdXU0RMUmVhZGVyKCk7Ci0gICAgICBkZWZpbml0aW9uID0gd3NkbFJlYWRlci5yZWFkV1NETCh3c2RsVVJJLCBuZXcgSW5wdXRTb3VyY2UoYmFpcykpOwotICAgICAgd3NFbnRpdHkuc2V0VHlwZShXZWJTZXJ2aWNlRW50aXR5LlRZUEVfV1NETCk7Ci0gICAgICB3c0VudGl0eS5zZXRNb2RlbChkZWZpbml0aW9uKTsKLSAgICB9Ci0gICAgcmV0dXJuIGRlZmluaXRpb247Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBwYXJzZSgpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uLCBTQVhFeGNlcHRpb24sIFdXV0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uCi0gIHsKLSAgICBwYXJzZVVSTChQQVJTRV9XU0lMIHwgUEFSU0VfV1NETCB8IFBBUlNFX0xJTktTIHwgUEFSU0VfRElTQ08pOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcGFyc2UoaW50IHBhcnNlT3B0aW9uKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiwgU0FYRXhjZXB0aW9uLCBXV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbgotICB7Ci0gICAgcGFyc2VVUkwocGFyc2VPcHRpb24pOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHBhcnNlVVJMKGludCBwYXJzZU9wdGlvbikgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24sIFNBWEV4Y2VwdGlvbiwgV1dXQXV0aGVudGljYXRpb25FeGNlcHRpb24KLSAgewotICAgIFdlYlNlcnZpY2VFbnRpdHkgd3NFbnRpdHkgPSBuZXcgV2ViU2VydmljZUVudGl0eSgpOwotICAgIAotICAgIC8vIFRoaXMgdmFyaWFibGUgbWFrZXMgdGhpcyBvYmplY3QgYSBsaXR0bGUgbW9yZSB0aHJlYWQgc2FmZSB0aGFuIGl0IHdhcwotICAgIC8vIGJlZm9yZSwgYWx0aG91Z2ggdGhpcyBvYmplY3QgaXMgbm90IGNvbXBsZXRlbHkgdGhyZWFkIHNhZmUuICBUaGUgc2NlbmFyaW8KLSAgICAvLyB0aGF0IHdlIGFyZSB0cnlpbmcgdG8gYXZvaWQgaXMgd2hlcmUgb25lIGNhbGwgdG8gdGhpcyBtZXRob2QgZ2V0cyBibG9ja2VkCi0gICAgLy8gYXQgdGhlIGdldElucHV0U3RyZWFtQXNCeXRlQXJyYXkgY2FsbC4gIFRoZW4gYSBzZWNvbmQgY2FsbCB0byB0aGUgbWV0aG9kCi0gICAgLy8gaXMgbWFkZSB0aGF0IGNoYW5nZXMgdGhlIHVyaV8gZ2xvYmFsIHZhcmlhYmxlLiAgV2hlbiB0aGUgZmlyc3QgY2FsbAotICAgIC8vIGNvbXBsZXRlcyBpdCB3b3VsZCB1c2UgdXJpXyB2YWx1ZSBmcm9tIHRoZSBzZWNvbmQgaW52b2NhdGlvbiBpbnN0ZWFkCi0gICAgLy8gb2YgdGhlIHZhbHVlIGZyb20gdGhlIGZpcnN0LiAgU3RvcmluZyB0aGUgdXJpXyBpbnRvIHRoaXMgdmFyaWFibGUgaGVscHMgCi0gICAgLy8gYXZvaWQgdGhpcyBiYWQgc2NlbmFyaW8uCi0gICAgU3RyaW5nIHRoZVVyaSA9IHVyaV87Ci0gICAgCi0gICAgd3NFbnRpdHkuc2V0VVJJKHRoZVVyaSk7Ci0gICAgYnl0ZVtdIGIgPSBnZXRJbnB1dFN0cmVhbUFzQnl0ZUFycmF5KHRoZVVyaSk7Ci0gICAgd3NFbnRpdHkuc2V0Qnl0ZXMoYik7Ci0gICAgc2V0SFRUUFNldHRpbmdzKHdzRW50aXR5KTsKLSAgICB1cmlUb0VudGl0eVRhYmxlXy5wdXQodGhlVXJpLCB3c0VudGl0eSk7Ci0gICAgLy8gcGFyc2UgdXJpXyBhcyBhIEhUTUwgZG9jdW1lbnQKLSAgICBIVE1MSGVhZEhhbmRsZXIgaGVhZEhhbmRsZXIgPSBuZXcgSFRNTEhlYWRIYW5kbGVyKHRoZVVyaSk7Ci0gICAgYnl0ZVtdIGhlYWQgPSBoZWFkSGFuZGxlci5oYXJ2ZXN0SGVhZFRhZ3MoYik7Ci0gICAgU3RyaW5nIGJ5dGVFbmNvZGluZyA9IGhlYWRIYW5kbGVyLmdldEJ5dGVFbmNvZGluZygpOwotICAgIFNBWFBhcnNlckZhY3RvcnkgZmFjdG9yeSA9IFNBWFBhcnNlckZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLSAgICBmYWN0b3J5LnNldE5hbWVzcGFjZUF3YXJlKGZhbHNlKTsKLSAgICBmYWN0b3J5LnNldFZhbGlkYXRpbmcoZmFsc2UpOwotICAgIFNBWFBhcnNlciBwYXJzZXIgPSBmYWN0b3J5Lm5ld1NBWFBhcnNlcigpOwotICAgIHRyeQotICAgIHsKLSAgICAgIEJ5dGVBcnJheUlucHV0U3RyZWFtIGJhaXMgPSBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oaGVhZCk7Ci0gICAgICBJbnB1dFN0cmVhbVJlYWRlciBpc3IgPSBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoYmFpcywgYnl0ZUVuY29kaW5nKTsKLSAgICAgIElucHV0U291cmNlIGlzID0gbmV3IElucHV0U291cmNlKGlzcik7Ci0gICAgICBwYXJzZXIucGFyc2UoaXMsIGhlYWRIYW5kbGVyKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgIHsKLSAgICB9Ci0gICAgU3RyaW5nW10gd3NpbFVSSXMgPSBoZWFkSGFuZGxlci5nZXRXc2lscygpOwotICAgIFN0cmluZ1tdIGRpc2NvVVJJcyA9IGhlYWRIYW5kbGVyLmdldERpc2NvcygpOwotICAgIC8vIHRydWUgaWYgdXJpXyBpcyBhIEhUTUwgZG9jdW1lbnQKLSAgICBpZiAod3NpbFVSSXMubGVuZ3RoID4gMCB8fCBkaXNjb1VSSXMubGVuZ3RoID4gMCkKLSAgICB7Ci0gICAgICB3c0VudGl0eS5zZXRUeXBlKFdlYlNlcnZpY2VFbnRpdHkuVFlQRV9IVE1MKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgd3NpbFVSSXMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBhYnNvbHV0ZVVSSSA9IGNvbnZlcnRUb0Fic29sdXRlVVJJKHRoZVVyaSwgd3NpbFVSSXNbaV0pOwotICAgICAgICBXZWJTZXJ2aWNlRW50aXR5IHdzaWxFbnRpdHkgPSBuZXcgV2ViU2VydmljZUVudGl0eSgpOwotICAgICAgICB3c2lsRW50aXR5LnNldFR5cGUoV2ViU2VydmljZUVudGl0eS5UWVBFX1dTSUwpOwotICAgICAgICB3c2lsRW50aXR5LnNldFVSSShhYnNvbHV0ZVVSSSk7Ci0gICAgICAgIGFzc29jaWF0ZSh3c0VudGl0eSwgd3NpbEVudGl0eSk7Ci0gICAgICAgIHVyaVRvRW50aXR5VGFibGVfLnB1dChhYnNvbHV0ZVVSSSwgd3NpbEVudGl0eSk7Ci0gICAgICAgIGlmICgocGFyc2VPcHRpb24gfCBQQVJTRV9XU0lMKSA9PSBwYXJzZU9wdGlvbikKLSAgICAgICAgewotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHBhcnNlV1NJTChhYnNvbHV0ZVVSSSwgcGFyc2VPcHRpb24sIGJ5dGVFbmNvZGluZyApOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0gICAgICAgICAgewotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgZm9yIChpbnQgaT0wO2k8ZGlzY29VUklzLmxlbmd0aDtpKyspCi0gICAgICB7Ci0gICAgICAgIFdlYlNlcnZpY2VFbnRpdHkgZGlzY29FbnRpdHkgPSBuZXcgV2ViU2VydmljZUVudGl0eSgpOwotICAgICAgICBkaXNjb0VudGl0eS5zZXRUeXBlKFdlYlNlcnZpY2VFbnRpdHkuVFlQRV9ESVNDTyk7Ci0gICAgICAgIGRpc2NvRW50aXR5LnNldFVSSShkaXNjb1VSSXNbaV0pOwotICAgICAgICBhc3NvY2lhdGUod3NFbnRpdHksZGlzY29FbnRpdHkpOwotICAgICAgICB1cmlUb0VudGl0eVRhYmxlXy5wdXQoZGlzY29VUklzW2ldLGRpc2NvRW50aXR5KTsKLSAgICAgICAgaWYgKChwYXJzZU9wdGlvbiB8IFBBUlNFX0RJU0NPKSA9PSBwYXJzZU9wdGlvbikKLSAgICAgICAgewotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHBhcnNlRElTQ08oZGlzY29VUklzW2ldLHBhcnNlT3B0aW9uKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgICAgICAgIHsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gZmFsc2UgaWYgdXJpXyBpcyBub3QgYSBIVE1MIGRvY3VtZW50Ci0gICAgLy8gdGhlbiBwYXJzZSB1cmlfIGFzIGEgV1NJTCBkb2N1bWVudAotICAgIGVsc2UKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgcGFyc2VXU0lMKHRoZVVyaSwgcGFyc2VPcHRpb24sIGJ5dGVFbmNvZGluZyApOwotICAgICAgICAvLyBubyBleGNlcHRpb24gdGhyb3duIGlmIHVyaV8gaXMgYSBXU0lMIGRvY3VtZW50Ci0gICAgICAgIHdzRW50aXR5LnNldFR5cGUoV2ViU2VydmljZUVudGl0eS5UWVBFX1dTSUwpOwotICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgICAgewotICAgICAgICAvLyBleGNlcHRpb24gdGhyb3duIGlmIHVyaV8gaXMgbm90IGEgV1NJTCBkb2N1bWVudAotICAgICAgICAvLyB0aGVuIHBhcnNlIHVyaV8gYXMgYSBESVNDTyBkb2N1bWVudC4KLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBwYXJzZURJU0NPKHRoZVVyaSwgcGFyc2VPcHRpb24pOwotICAgICAgICAgIC8vIG5vIGV4Y2VwdGlvbiB0aHJvd24gaWYgdXJpXyBpcyBhIERJU0NPIGRvY3VtZW50Ci0gICAgICAgICAgd3NFbnRpdHkuc2V0VHlwZShXZWJTZXJ2aWNlRW50aXR5LlRZUEVfRElTQ08pOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChFeGNlcHRpb24gdDIpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBleGNlcHRpb24gdGhyb3duIGlmIHVyaV8gaXMgbm90IGEgRElTQ08gZG9jdW1lbnQKLSAgICAgICAgICAvLyB0aGVuIHBhcnNlIHVyaV8gYXMgYSBXU0RMIGRvY3VtZW50Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgcGFyc2VXU0RMKHRoZVVyaSk7Ci0gICAgICAgICAgICAvLyBubyBleGNlcHRpb24gdGhyb3duIGlmIHVyaV8gaXMgYSBXU0RMIGRvY3VtZW50Ci0gICAgICAgICAgICB3c0VudGl0eS5zZXRUeXBlKFdlYlNlcnZpY2VFbnRpdHkuVFlQRV9XU0RMKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiB0MykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBleGNlcHRpb24gdGhyb3duIGlmIHVyaV8gaXMgbm90IGEgV1NETCBkb2N1bWVudAotICAgICAgICAgICAgLy8gdGhlbiBkbyBub3RoaW5nCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHBhcnNlV1NJTChTdHJpbmcgd3NpbFVSSSwgaW50IHBhcnNlT3B0aW9uLCBTdHJpbmcgYnl0ZUVuY29kaW5nICkgdGhyb3dzIFdTSUxFeGNlcHRpb24sIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIFdTRExFeGNlcHRpb24sIFdXV0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uCi0gIHsKLSAgICBXZWJTZXJ2aWNlRW50aXR5IHdzaWxFbnRpdHkgPSBnZXRXZWJTZXJ2aWNlRW50aXR5QnlVUkkod3NpbFVSSSk7Ci0gICAgV1NJTERvY3VtZW50IHdzaWxEb2MgPSAoV1NJTERvY3VtZW50KXdzaWxFbnRpdHkuZ2V0TW9kZWwoKTsKLSAgICBpZiAod3NpbERvYyAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIFByZXZlbnQgaW5maW5pdGUgbG9vcHMgZnJvbSBvY2N1cnJpbmcgd2hlbiBhIFdTSUwgY3ljbGVzIG9jY3VyLgotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICB3c2lsRG9jID0gZ2V0V1NJTERvY3VtZW50VmVyYm9zZSh3c2lsVVJJLCBieXRlRW5jb2RpbmcgKTsKLSAgICBJbnNwZWN0aW9uIGluc3BlY3Rpb24gPSB3c2lsRG9jLmdldEluc3BlY3Rpb24oKTsKLSAgICBTZXJ2aWNlW10gc2VydmljZXMgPSBpbnNwZWN0aW9uLmdldFNlcnZpY2VzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZXJ2aWNlcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBEZXNjcmlwdGlvbltdIGRlc2NzID0gc2VydmljZXNbaV0uZ2V0RGVzY3JpcHRpb25zKCk7Ci0gICAgICAvLyBTZXQgdGhlIGRvY3VtZW50YXRpb24gdG8gdGhlIDxzZXJ2aWNlPiBlbGVtZW50J3MgZmlyc3QgYWJzdHJhY3QuCi0gICAgICBTdHJpbmcgZG9jdW1lbnRhdGlvbiA9IG51bGw7Ci0gICAgICBBYnN0cmFjdFtdIGFic3RyYWN0cyA9IHNlcnZpY2VzW2ldLmdldEFic3RyYWN0cygpOwotICAgICAgaWYgKGFic3RyYWN0cyAhPSBudWxsICYmIGFic3RyYWN0cy5sZW5ndGggPiAwKQotICAgICAgICBkb2N1bWVudGF0aW9uID0gYWJzdHJhY3RzWzBdLmdldFRleHQoKTsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgZGVzY3MubGVuZ3RoOyBqKyspCi0gICAgICB7Ci0gICAgICAJU3RyaW5nIHJlZmVyZW5jZWROUyA9IGRlc2NzW2pdLmdldFJlZmVyZW5jZWROYW1lc3BhY2UoKTsKLSAgICAgIAkvLyBJZiBhIDxkZXNjcmlwdGlvbj4gZWxlbWVudCBjb250YWlucyBhbiBhYnN0cmFjdCwgdXNlIGl0IHRvIG92ZXJyaWRlIHRoZSBzZXJ2aWNlIGRvY3VtZW50YXRpb24uICAgICAgCQotICAgICAgCWFic3RyYWN0cyA9IGRlc2NzW2pdLmdldEFic3RyYWN0cygpOwotICAgICAgCWlmIChhYnN0cmFjdHMgIT0gbnVsbCAmJiBhYnN0cmFjdHMubGVuZ3RoID4gMCkKLSAgICAgIAkgIGRvY3VtZW50YXRpb24gPSBhYnN0cmFjdHNbMF0uZ2V0VGV4dCgpOwotICAgICAgICBpZiAoV1NETENvbnN0YW50cy5OU19VUklfV1NETC5lcXVhbHMocmVmZXJlbmNlZE5TKSkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBsb2NhdGlvbiA9IGRlc2NzW2pdLmdldExvY2F0aW9uKCk7Ci0gICAgICAgICAgaWYgKGxvY2F0aW9uICE9IG51bGwgJiYgbG9jYXRpb24ubGVuZ3RoKCkgPiAwKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBhYnNvbHV0ZVVSSSA9IGNvbnZlcnRUb0Fic29sdXRlVVJJKHdzaWxVUkksIGxvY2F0aW9uKTsKLSAgICAgICAgICAgIFdlYlNlcnZpY2VFbnRpdHkgd3NkbEVudGl0eSA9IG5ldyBXZWJTZXJ2aWNlRW50aXR5KCk7Ci0gICAgICAgICAgICB3c2RsRW50aXR5LnNldFR5cGUoV2ViU2VydmljZUVudGl0eS5UWVBFX1dTREwpOwotICAgICAgICAgICAgd3NkbEVudGl0eS5zZXRVUkkoYWJzb2x1dGVVUkkpOwotICAgICAgICAgICAgd3NkbEVudGl0eS5zZXREb2N1bWVudGF0aW9uKGRvY3VtZW50YXRpb24pOwotICAgICAgICAgICAgYXNzb2NpYXRlKHdzaWxFbnRpdHksIHdzZGxFbnRpdHkpOwotICAgICAgICAgICAgdXJpVG9FbnRpdHlUYWJsZV8ucHV0KGFic29sdXRlVVJJLCB3c2RsRW50aXR5KTsKLSAgICAgICAgICAgIGlmICgocGFyc2VPcHRpb24gfCBQQVJTRV9XU0RMKSA9PSBwYXJzZU9wdGlvbikKLSAgICAgICAgICAgICAgcGFyc2VXU0RMKGFic29sdXRlVVJJKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoVURESUNvbnN0YW50cy5OU19VUklfVURESV9WMi5lcXVhbHMocmVmZXJlbmNlZE5TKSkKLSAgICAgICAgewotICAgICAgICAgIEV4dGVuc2lvbkVsZW1lbnQgZWUgPSBkZXNjc1tqXS5nZXRFeHRlbnNpb25FbGVtZW50KCk7Ci0gICAgICAgICAgaWYgKGVlIGluc3RhbmNlb2YgU2VydmljZURlc2NyaXB0aW9uKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFNlcnZpY2VEZXNjcmlwdGlvbiBzZCA9IChTZXJ2aWNlRGVzY3JpcHRpb24pZWU7Ci0gICAgICAgICAgICBTdHJpbmcgaW5xdWlyeVVSTCA9IHNkLmdldExvY2F0aW9uKCk7Ci0gICAgICAgICAgICBTdHJpbmcgc2VydmljZUtleSA9IHNkLmdldFNlcnZpY2VLZXkoKS5nZXRUZXh0KCk7Ci0gICAgICAgICAgICBXZWJTZXJ2aWNlRW50aXR5IHVkZGlTZXJ2aWNlRW50aXR5ID0gbmV3IFdlYlNlcnZpY2VFbnRpdHkoKTsKLSAgICAgICAgICAgIHVkZGlTZXJ2aWNlRW50aXR5LnNldFR5cGUoV2ViU2VydmljZUVudGl0eS5UWVBFX1VERElfU0VSVklDRSk7Ci0gICAgICAgICAgICBTdHJpbmcgdWRkaVNlcnZpY2VLZXlVUkkgPSBVRERJVVJJSGVscGVyLmdldFNlcnZpY2VLZXlVUkkoc2VydmljZUtleSxpbnF1aXJ5VVJMKTsKLSAgICAgICAgICAgIHVkZGlTZXJ2aWNlRW50aXR5LnNldFVSSSh1ZGRpU2VydmljZUtleVVSSSk7Ci0gICAgICAgICAgICB1ZGRpU2VydmljZUVudGl0eS5zZXREb2N1bWVudGF0aW9uKGRvY3VtZW50YXRpb24pOwotICAgICAgICAgICAgYXNzb2NpYXRlKHdzaWxFbnRpdHksdWRkaVNlcnZpY2VFbnRpdHkpOwotICAgICAgICAgICAgdXJpVG9FbnRpdHlUYWJsZV8ucHV0KHVkZGlTZXJ2aWNlS2V5VVJJLHVkZGlTZXJ2aWNlRW50aXR5KTsKLSAgICAgICAgICAgIC8vIFRPRE86IHBhcnNlIFdTREwgaWYgbmVjZXNzYXJ5Li4uCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIExpbmtbXSBsaW5rcyA9IGluc3BlY3Rpb24uZ2V0TGlua3MoKTsgICAgCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaW5rcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpZiAoV1NJTENvbnN0YW50cy5OU19VUklfV1NJTC5lcXVhbHMobGlua3NbaV0uZ2V0UmVmZXJlbmNlZE5hbWVzcGFjZSgpKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIGRvY3VtZW50YXRpb24gPSBudWxsOwotICAgICAgICBBYnN0cmFjdFtdIGFic3RyYWN0cyA9IGxpbmtzW2ldLmdldEFic3RyYWN0cygpOwotICAgICAgICBpZiAoYWJzdHJhY3RzICE9IG51bGwgJiYgYWJzdHJhY3RzLmxlbmd0aCA+IDApCi0gICAgICAgICAgZG9jdW1lbnRhdGlvbiA9IGFic3RyYWN0c1swXS5nZXRUZXh0KCk7Ci0gICAgICAgIFN0cmluZyBsaW5rTG9jYXRpb24gPSBsaW5rc1tpXS5nZXRMb2NhdGlvbigpOwotICAgICAgICBTdHJpbmcgYWJzb2x1dGVVUkkgPSBjb252ZXJ0VG9BYnNvbHV0ZVVSSSh3c2lsVVJJLCBsaW5rTG9jYXRpb24pOwotICAgICAgICAvLyBQcmV2ZW50IGN5Y2xlcy4KLSAgICAgICAgV2ViU2VydmljZUVudGl0eSB3c2lsTGlua0VudGl0eSA9IGdldFdlYlNlcnZpY2VFbnRpdHlCeVVSSShhYnNvbHV0ZVVSSSk7Ci0gICAgICAgIGlmICh3c2lsTGlua0VudGl0eSA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgd3NpbExpbmtFbnRpdHkgPSBuZXcgV2ViU2VydmljZUVudGl0eSgpOwotICAgICAgICAgIHdzaWxMaW5rRW50aXR5LnNldFR5cGUoV2ViU2VydmljZUVudGl0eS5UWVBFX1dTSUwpOwotICAgICAgICAgIHdzaWxMaW5rRW50aXR5LnNldFVSSShhYnNvbHV0ZVVSSSk7Ci0gICAgICAgICAgd3NpbExpbmtFbnRpdHkuc2V0RG9jdW1lbnRhdGlvbihkb2N1bWVudGF0aW9uKTsKLSAgICAgICAgICB1cmlUb0VudGl0eVRhYmxlXy5wdXQoYWJzb2x1dGVVUkksIHdzaWxMaW5rRW50aXR5KTsKLSAgICAgICAgICBpZiAoKHBhcnNlT3B0aW9uIHwgUEFSU0VfTElOS1MpID09IHBhcnNlT3B0aW9uKQotICAgICAgICAgICAgcGFyc2VXU0lMKGFic29sdXRlVVJJLCBwYXJzZU9wdGlvbiwgYnl0ZUVuY29kaW5nICk7Ci0gICAgICAgIH0KLSAgICAgICAgYXNzb2NpYXRlKHdzaWxFbnRpdHksd3NpbExpbmtFbnRpdHkpOwotICAgICAgfQotICAgIH0KLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIHBhcnNlRElTQ08oU3RyaW5nIGRpc2NvVVJJLCBpbnQgcGFyc2VPcHRpb24pIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIFdXV0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uLCBFeGNlcHRpb24KLSAgewotICAgIFdlYlNlcnZpY2VFbnRpdHkgZGlzY29FbnRpdHkgPSBnZXRXZWJTZXJ2aWNlRW50aXR5QnlVUkkoZGlzY29VUkkpOwotICAgIGJ5dGVbXSBiID0gZ2V0SW5wdXRTdHJlYW1Bc0J5dGVBcnJheShkaXNjb1VSSSk7Ci0gICAgZGlzY29FbnRpdHkuc2V0Qnl0ZXMoYik7Ci0gICAgc2V0SFRUUFNldHRpbmdzKGRpc2NvRW50aXR5KTsKLSAgICBCeXRlQXJyYXlJbnB1dFN0cmVhbSBiYWlzID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGIpOwotICAgIERJU0NPUGFyc2VyIHBhcnNlciA9IG5ldyBESVNDT1BhcnNlcigpOwotICAgIERJU0NPUmVmZXJlbmNlW10gcmVmZXJlbmNlcyA9IHBhcnNlci5wYXJzZShkaXNjb1VSSSxuZXcgSW5wdXRTb3VyY2UoYmFpcykpOwotICAgIGlmIChyZWZlcmVuY2VzICE9IG51bGwgJiYgcmVmZXJlbmNlcy5sZW5ndGggPiAwKQotICAgIHsKLSAgICAgIGZvciAoaW50IGk9MDtpPHJlZmVyZW5jZXMubGVuZ3RoO2krKykKLSAgICAgIHsKLSAgICAgICAgaWYgKHJlZmVyZW5jZXNbaV0gaW5zdGFuY2VvZiBESVNDT0NvbnRyYWN0UmVmZXJlbmNlKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gY29udHJhY3RSZWYKLSAgICAgICAgICBESVNDT0NvbnRyYWN0UmVmZXJlbmNlIHJlZmVyZW5jZSA9IChESVNDT0NvbnRyYWN0UmVmZXJlbmNlKXJlZmVyZW5jZXNbaV07Ci0gICAgICAgICAgU3RyaW5nIHJlZiA9IHJlZmVyZW5jZS5nZXRSZWYoKTsKLSAgICAgICAgICBTdHJpbmcgZG9jUmVmID0gcmVmZXJlbmNlLmdldERvY1JlZigpOwotICAgICAgICAgIFdlYlNlcnZpY2VFbnRpdHkgd3NkbEVudGl0eSA9IG5ldyBXZWJTZXJ2aWNlRW50aXR5KCk7Ci0gICAgICAgICAgd3NkbEVudGl0eS5zZXRUeXBlKFdlYlNlcnZpY2VFbnRpdHkuVFlQRV9XU0RMKTsKLSAgICAgICAgICB3c2RsRW50aXR5LnNldFVSSShyZWYpOwotICAgICAgICAgIHdzZGxFbnRpdHkuc2V0RG9jdW1lbnRhdGlvbihkb2NSZWYpOwotICAgICAgICAgIGFzc29jaWF0ZShkaXNjb0VudGl0eSx3c2RsRW50aXR5KTsKLSAgICAgICAgICB1cmlUb0VudGl0eVRhYmxlXy5wdXQocmVmLHdzZGxFbnRpdHkpOwotICAgICAgICAgIGlmICgocGFyc2VPcHRpb24gfCBQQVJTRV9XU0RMKSA9PSBwYXJzZU9wdGlvbikKLSAgICAgICAgICAgIHBhcnNlV1NETChyZWYpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIC8vIGRpc2NvdmVyeVJlZgotICAgICAgICAgIFN0cmluZyByZWYgPSByZWZlcmVuY2VzW2ldLmdldFJlZigpOwotICAgICAgICAgIC8vIFByZXZlbnQgY3ljbGVzLgotICAgICAgICAgIFdlYlNlcnZpY2VFbnRpdHkgZGlzY29MaW5rRW50aXR5ID0gZ2V0V2ViU2VydmljZUVudGl0eUJ5VVJJKHJlZik7Ci0gICAgICAgICAgaWYgKGRpc2NvTGlua0VudGl0eSA9PSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGRpc2NvTGlua0VudGl0eSA9IG5ldyBXZWJTZXJ2aWNlRW50aXR5KCk7Ci0gICAgICAgICAgICBkaXNjb0xpbmtFbnRpdHkuc2V0VHlwZShXZWJTZXJ2aWNlRW50aXR5LlRZUEVfRElTQ08pOwotICAgICAgICAgICAgZGlzY29MaW5rRW50aXR5LnNldFVSSShyZWYpOwotICAgICAgICAgICAgdXJpVG9FbnRpdHlUYWJsZV8ucHV0KHJlZixkaXNjb0xpbmtFbnRpdHkpOwotICAgICAgICAgICAgaWYgKChwYXJzZU9wdGlvbiB8IFBBUlNFX0xJTktTKSA9PSBwYXJzZU9wdGlvbikKLSAgICAgICAgICAgICAgcGFyc2VESVNDTyhyZWYscGFyc2VPcHRpb24pOwotICAgICAgICAgIH0KLSAgICAgICAgICBhc3NvY2lhdGUoZGlzY29FbnRpdHksZGlzY29MaW5rRW50aXR5KTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgRGVmaW5pdGlvbiBwYXJzZVdTREwoU3RyaW5nIHdzZGxVUkkpIHRocm93cyBXU0RMRXhjZXB0aW9uLCBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBXV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbgotICB7Ci0gICAgcmV0dXJuIGdldFdTRExEZWZpbml0aW9uVmVyYm9zZSh3c2RsVVJJKTsKLSAgfQotCi0gIHByaXZhdGUgYnl0ZVtdIGdldElucHV0U3RyZWFtQXNCeXRlQXJyYXkoU3RyaW5nIHVyaVN0cmluZykgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIFdXV0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBUcnkgdG8gZ2V0IGEgY2FjaGVkIGNvcHkgb2YgdGhlIGJ5dGVbXQotICAgIFdlYlNlcnZpY2VFbnRpdHkgd3NFbnRpdHkgPSBnZXRXZWJTZXJ2aWNlRW50aXR5QnlVUkkodXJpU3RyaW5nKTsKLSAgICBpZiAod3NFbnRpdHkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBieXRlW10gYnl0ZXMgPSB3c0VudGl0eS5nZXRCeXRlcygpOwotICAgICAgaWYgKGJ5dGVzICE9IG51bGwpCi0gICAgICAgIHJldHVybiBieXRlczsKLSAgICB9Ci0gICAgLy8gR2V0IHRoZSBieXRlW10gYnkgb3BlbmluZyBhIHN0cmVhbSB0byB0aGUgVVJJCi0gICAgVVJMIHVybCA9IGNyZWF0ZVVSTCh1cmlTdHJpbmcpOwotICAgIFVSTENvbm5lY3Rpb24gY29ubiA9IHVybC5vcGVuQ29ubmVjdGlvbigpOwotICAgIC8vIHByb3h5IHNlcnZlciBzZXR0aW5nCi0gICAgU3RyaW5nIHByb3h5VXNlck5hbWUgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImh0dHAucHJveHlVc2VyTmFtZSIpOwotICAgIFN0cmluZyBwcm94eVBhc3N3b3JkID0gU3lzdGVtLmdldFByb3BlcnR5KCJodHRwLnByb3h5UGFzc3dvcmQiKTsKLSAgICBpZiAocHJveHlVc2VyTmFtZSAhPSBudWxsICYmIHByb3h5UGFzc3dvcmQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmdCdWZmZXIgdXNlck5hbWVQYXNzd29yZCA9IG5ldyBTdHJpbmdCdWZmZXIocHJveHlVc2VyTmFtZSk7Ci0gICAgICB1c2VyTmFtZVBhc3N3b3JkLmFwcGVuZCgnOicpLmFwcGVuZChwcm94eVBhc3N3b3JkKTsKLSAgICAgIEJBU0U2NEVuY29kZXIgZW5jb2RlciA9IG5ldyBCQVNFNjRFbmNvZGVyKCk7Ci0gICAgICBTdHJpbmcgZW5jb2RpbmcgPSBlbmNvZGVyLmVuY29kZSh1c2VyTmFtZVBhc3N3b3JkLnRvU3RyaW5nKCkuZ2V0Qnl0ZXMoKSk7Ci0gICAgICB1c2VyTmFtZVBhc3N3b3JkLnNldExlbmd0aCgwKTsKLSAgICAgIHVzZXJOYW1lUGFzc3dvcmQuYXBwZW5kKCJCYXNpYyAiKS5hcHBlbmQoZW5jb2RpbmcpOwotICAgICAgY29ubi5zZXRSZXF1ZXN0UHJvcGVydHkoIlByb3h5LWF1dGhvcml6YXRpb24iLCB1c2VyTmFtZVBhc3N3b3JkLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgICAvLyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uIHNldHRpbmcKLSAgICBpZiAoaHR0cEJhc2ljQXV0aFVzZXJuYW1lXyAhPSBudWxsICYmIGh0dHBCYXNpY0F1dGhQYXNzd29yZF8gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKGh0dHBCYXNpY0F1dGhVc2VybmFtZV8pOwotICAgICAgc2IuYXBwZW5kKCc6JykuYXBwZW5kKGh0dHBCYXNpY0F1dGhQYXNzd29yZF8pOwotICAgICAgQkFTRTY0RW5jb2RlciBlbmNvZGVyID0gbmV3IEJBU0U2NEVuY29kZXIoKTsKLSAgICAgIFN0cmluZyBlbmNvZGluZyA9IGVuY29kZXIuZW5jb2RlKHNiLnRvU3RyaW5nKCkuZ2V0Qnl0ZXMoKSk7Ci0gICAgICBzYi5zZXRMZW5ndGgoMCk7Ci0gICAgICBzYi5hcHBlbmQoIkJhc2ljICIpLmFwcGVuZChlbmNvZGluZyk7Ci0gICAgICBjb25uLnNldFJlcXVlc3RQcm9wZXJ0eSgiQXV0aG9yaXphdGlvbiIsIHNiLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgICBJbnB1dFN0cmVhbSBpcyA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgaXMgPSBjb25uLmdldElucHV0U3RyZWFtKCk7Ci0gICAgICBTdHJpbmcgd3d3QXV0aE1zZyA9IGNvbm4uZ2V0SGVhZGVyRmllbGQoIldXVy1BdXRoZW50aWNhdGUiKTsKLSAgICAgIGlmICh3d3dBdXRoTXNnICE9IG51bGwpCi0gICAgICAgIHRocm93IG5ldyBXV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbihuZXcgSU9FeGNlcHRpb24oKSwgd3d3QXV0aE1zZywgdXJpU3RyaW5nKTsKLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkKLSAgICB7Ci0gICAgICBTdHJpbmcgd3d3QXV0aE1zZyA9IGNvbm4uZ2V0SGVhZGVyRmllbGQoIldXVy1BdXRoZW50aWNhdGUiKTsKLSAgICAgIGlmICh3d3dBdXRoTXNnICE9IG51bGwpCi0gICAgICAgIHRocm93IG5ldyBXV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbihpb2UsIHd3d0F1dGhNc2csIHVyaVN0cmluZyk7Ci0gICAgICBlbHNlCi0gICAgICAgIHRocm93IGlvZTsKLSAgICB9Ci0gICAgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJhb3MgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7Ci0gICAgYnl0ZVtdIGIgPSBuZXcgYnl0ZVsxMDI0XTsKLSAgICBpbnQgYnl0ZVJlYWQgPSBpcy5yZWFkKGIpOwotICAgIHdoaWxlIChieXRlUmVhZCAhPSAtMSkKLSAgICB7Ci0gICAgICBiYW9zLndyaXRlKGIsIDAsIGJ5dGVSZWFkKTsKLSAgICAgIGJ5dGVSZWFkID0gaXMucmVhZChiKTsKLSAgICB9Ci0gICAgaXMuY2xvc2UoKTsKLSAgICByZXR1cm4gYmFvcy50b0J5dGVBcnJheSgpOwotICB9Ci0KLSAgcHJvdGVjdGVkIFVSTCBjcmVhdGVVUkwoU3RyaW5nIHVybCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbgotICB7Ci0gICAgcmV0dXJuIG5ldyBVUkwodXJsKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBhc3NvY2lhdGUoV2ViU2VydmljZUVudGl0eSBwYXJlbnQsIFdlYlNlcnZpY2VFbnRpdHkgY2hpbGQpCi0gIHsKLSAgICBwYXJlbnQuYWRkQ2hpbGQoY2hpbGQpOwotICAgIGNoaWxkLnNldFBhcmVudChwYXJlbnQpOwotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgY29udmVydFRvQWJzb2x1dGVVUkkoU3RyaW5nIGJhc2VVUkksU3RyaW5nIHJlZlVSSSkKLSAgewotICAgIGlmIChyZWZVUkkgIT0gbnVsbCAmJiByZWZVUkkuaW5kZXhPZigiOiIpIDwgMCkKLSAgICB7Ci0gICAgICBTdHJpbmdCdWZmZXIgYWJzb2x1dGVVUkkgPSBuZXcgU3RyaW5nQnVmZmVyKGJhc2VVUkkuc3Vic3RyaW5nKDAsTWF0aC5tYXgoYmFzZVVSSS5sYXN0SW5kZXhPZignXFwnKSxiYXNlVVJJLmxhc3RJbmRleE9mKCcvJykrMSkpKTsKLSAgICAgIGFic29sdXRlVVJJLmFwcGVuZChyZWZVUkkpOwotICAgICAgcmV0dXJuIGFic29sdXRlVVJJLnRvU3RyaW5nKCk7Ci0gICAgfQotICAgIHJldHVybiByZWZVUkk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc2V0SFRUUFNldHRpbmdzKFdlYlNlcnZpY2VFbnRpdHkgZW50aXR5KQotICB7Ci0gICAgaWYgKGh0dHBCYXNpY0F1dGhVc2VybmFtZV8gIT0gbnVsbCAmJiBodHRwQmFzaWNBdXRoUGFzc3dvcmRfICE9IG51bGwpCi0gICAgewotICAgICAgZW50aXR5LnNldEhUVFBVc2VybmFtZShodHRwQmFzaWNBdXRoVXNlcm5hbWVfKTsKLSAgICAgIGVudGl0eS5zZXRIVFRQUGFzc3dvcmQoaHR0cEJhc2ljQXV0aFBhc3N3b3JkXyk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRIVFRQQmFzaWNBdXRoVXNlcm5hbWUoKQotICB7Ci0gICAgcmV0dXJuIGh0dHBCYXNpY0F1dGhVc2VybmFtZV87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRIVFRQQmFzaWNBdXRoVXNlcm5hbWUoU3RyaW5nIHVzZXJuYW1lKQotICB7Ci0gICAgaHR0cEJhc2ljQXV0aFVzZXJuYW1lXyA9IHVzZXJuYW1lOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRIVFRQQmFzaWNBdXRoUGFzc3dvcmQoKQotICB7Ci0gICAgcmV0dXJuIGh0dHBCYXNpY0F1dGhQYXNzd29yZF87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRIVFRQQmFzaWNBdXRoUGFzc3dvcmQoU3RyaW5nIHBhc3N3b3JkKQotICB7Ci0gICAgaHR0cEJhc2ljQXV0aFBhc3N3b3JkXyA9IHBhc3N3b3JkOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvd3NpbC93c2lsLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wYXJzZXIvd3NpbC93c2lsLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzNDUzMGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGFyc2VyL3dzaWwvd3NpbC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgTWVzc2FnZXMgZm9yIEFkZFdTRExUb1dTSUxDb21tYW5kCi0jCi1NU0dfRVJST1JfSU5WQUxJRF9BUkdVTUVOVFM9SVdBQjAwNTVFIEludmFsaWQgY29tbWFuZCBhcmd1bWVudHMuCi1NU0dfRVJST1JfSUxMRUdBTF9BUkdVTUVOVFM9SVdBQjAxMDVFIElsbGVnYWwgYXJndW1lbnQuCi1NU0dfRVJST1JfSU5WQUxJRF9XU0RMX1VSST1JV0FCMDE4NUUgSW52YWxpZCBXU0RMIFVSSS4KLU1TR19FUlJPUl9JTlZBTElEX1dTSUxfVVJJPUlXQUIwMjA2RSBJbnZhbGlkIFdTSUwgVVJJLgotTVNHX0VSUk9SX1VOUkVTT0xWQUJMRV9XU0RMPUlXQUIwNDA1RSBXU0RMIGlzIHVucmVzb2x2YWJsZS4KLU1TR19FUlJPUl9VTkVYUEVDVEVEX0VYQ0VQVElPTj1JV0FCMDQ1MUUgQW4gdW5leHBlY3RlZCBleGNlcHRpb24gaGFzIG9jY3VyZWQuCi1NU0dfRVJST1JfTUFMRk9STUVEX1dTREw9SVdBQjA0NTJFIFdTREwgaXMgbWFsZm9ybWVkLCBlcnJvciBwYXJzaW5nIFdTREwuCi1NU0dfRVJST1JfV1JJVEVfV1NJTD1JV0FCMDQ1M0UgRXJyb3Igd3JpdGluZyBXU0lMLgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvcGFyc2VyL1BsdWdpbk1lc3NhZ2VzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9wYXJzZXIvUGx1Z2luTWVzc2FnZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTkzNDQwZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9wYXJzZXIvUGx1Z2luTWVzc2FnZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLQotcHVibGljIGNsYXNzIFBsdWdpbk1lc3NhZ2VzIGV4dGVuZHMgTkxTCi17Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyLnBsdWdpbiI7IC8vJE5PTi1OTFMtMSQKLSAgCi0gIHN0YXRpYwotICB7Ci0gICAgTkxTLmluaXRpYWxpemVNZXNzYWdlcyhCVU5ETEVfTkFNRSwgUGx1Z2luTWVzc2FnZXMuY2xhc3MpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgUFVCTElDVURESVJFR0lTVFJZVFlQRV9OQU1FX1NBUDsKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgUFVCTElDVURESVJFR0lTVFJZVFlQRV9OQU1FX1NBUF9URVNUOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBQVUJMSUNVRERJUkVHSVNUUllUWVBFX05BTUVfWE1FVEhPRFM7Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFBVQkxJQ1VERElSRUdJU1RSWVRZUEVfTkFNRV9OVFRDT01NOwotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3BhcnNlci9wbHVnaW4ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlci9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL3BhcnNlci9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRiNjc0ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9wYXJzZXIvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgUHVibGljVURESVJlZ2lzdHJ5VHlwZQotIwotUFVCTElDVURESVJFR0lTVFJZVFlQRV9OQU1FX1NBUD1TQVAgVURESSBSZWdpc3RyeQotUFVCTElDVURESVJFR0lTVFJZVFlQRV9OQU1FX1NBUF9URVNUPVNBUCBVRERJIFRlc3QgUmVnaXN0cnkKLVBVQkxJQ1VERElSRUdJU1RSWVRZUEVfTkFNRV9YTUVUSE9EUz1YTWV0aG9kcyBSZWdpc3RyeQotUFVCTElDVURESVJFR0lTVFJZVFlQRV9OQU1FX05UVENPTU09TlRUIENvbW11bmljYXRpb25zIFJlZ2lzdHJ5CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS8uY2xhc3NwYXRoIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2U3MzkzMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDg2N2JhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLWJpbgotdGVtcC5mb2xkZXIKLXdzdWkuamFyCi1idWlsZC54bWwKLUBkb3QKLXNyYy56aXAKLWphdmFDb21waWxlci4uLmFyZ3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpLy5wcm9qZWN0IGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExNDg3ZDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Qud3MudWk8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjY1NGJkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLSNNb24gSmFuIDMwIDEwOjM4OjE1IEVTVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzc5NjkwYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotI01vbiBKYW4gMzAgMTA6Mzk6NDYgRVNUIDIwMDYKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTEKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTEKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmJhMGNiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJVBMVUdJTl9OQU1FCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3Qud3MudWk7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4zMDMucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkucGx1Z2luLldTVUlQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVQTFVHSU5fUFJPVklERVIKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS5jb21tYW5kO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLnBsdWdpbjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS5wcmVmZXJlbmNlczt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS51dGlscywKLSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkud3NpLnByZWZlcmVuY2VzO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLndzaS5wcm9wZXJ0aWVzO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLndzcnQ7eC1pbnRlcm5hbDo9dHJ1ZQotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLnVpO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsMy40LjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWk7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3JrcztidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2UuZW1mLmNvbW1vbjtidW5kbGUtdmVyc2lvbj0iWzIuMi4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2UudWkuaWRlO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIgotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvYWJvdXQuaHRtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGIzNmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvYnVpbGQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlN2VjZDUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotc291cmNlLi4gPSBzcmMvCi1vdXRwdXQuLiA9IGJpbi8KLWJpbi5pbmNsdWRlcyA9IHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgLixcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvcGx1Z2luLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjA5NzUyNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotIyAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyAyMDA3MDgyMCAgIDE5MTU4NSBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgTWVzc2FnZXMgaW4gcGx1Z2luLnhtbC4KLSMKLVBMVUdJTl9OQU1FPVdlYiBTZXJ2aWNlcyBVSQotUExVR0lOX1BST1ZJREVSPUVjbGlwc2Uub3JnCi0KLVBMVUdJTl9ORVdfQ0FURUdPUllfTkFNRV9XUz1XZWIgU2VydmljZXMKLVBSRUZFUkVOQ0VfQ0FURUdPUllfV1NJPVByb2ZpbGUgQ29tcGxpYW5jZSBhbmQgVmFsaWRhdGlvbgotCi0jCi0jIFBvcHVwIGFjdGlvbiBDYXRlZ29yeQotIwotTEFCRUxfUE9QVVBfQ0FURUdPUllfV0VCX1NFUlZJQ0VTPVdlYiBTZXJ2aWNlcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvcGx1Z2luLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiMmZmNTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci08cGx1Z2luPgotCi0gICAgCTxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wcmVmZXJlbmNlUGFnZXMiPgotCi0gICAgICA8cGFnZQotICAgICAgICAgICAgbmFtZT0iJVBMVUdJTl9ORVdfQ0FURUdPUllfTkFNRV9XUyIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkucHJlZmVyZW5jZXMuV2ViU2VydmljZXNQcmVmZXJlbmNlUGFnZSIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkucHJlZmVyZW5jZXMubmFtZSI+Ci0gICAgICA8L3BhZ2U+Ci0gICAgICAKLSAgICAgIDxwYWdlCi0gICAgICAgICAgICBuYW1lPSIlUFJFRkVSRU5DRV9DQVRFR09SWV9XU0kiCi0gICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLnByZWZlcmVuY2VzLm5hbWUiCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLndzaS5wcmVmZXJlbmNlcy5XU0lDb21wbGlhbmNlUHJlZmVyZW5jZVBhZ2UiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLndzaS5wcmVmZXJlbmNlcy5XU0lDb21wbGlhbmNlUHJlZmVyZW5jZVBhZ2UiPgotICAgICAgPC9wYWdlPgotCi0gICA8L2V4dGVuc2lvbj4KLQotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnByb3BlcnR5UGFnZXMiPgotCi0gICAgICA8cGFnZQotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0IgotICAgICAgICAgICAgYWRhcHRhYmxlPSJ0cnVlIgotICAgICAgICAgICAgbmFtZT0iJVBSRUZFUkVOQ0VfQ0FURUdPUllfV1NJIgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS53c2kucHJvcGVydGllcy5XU0lDb21wbGlhbmNlUHJvcGVydHlQYWdlIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS53c2kucHJvcGVydGllcy5XU0lDb21wbGlhbmNlUHJvcGVydHlQYWdlIj4KLSAgICAgIDwvcGFnZT4KLQotICAgPC9leHRlbnNpb24+Ci0gICAKLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wb3B1cE1lbnVzIj4KLQotICAgICAgPCEtLSBUaGUgaWQgZm9yIHRoaXMgY2F0ZWdvcnkgc2hvdWxkIGJlIGNoYW5nZWQgZnJvbSBqc3QgdG8gd3N0IGluIHZlcnNpb24gMy4wLi0tPgotICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZSIKLSAgICAgICAgICAgIGFkYXB0YWJsZT0idHJ1ZSIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuYXRrLnVpLndlYnNlcnZpY2UuY2F0ZWdvcnkucG9wdXBNZW51Ij4KLSAgICAgICAgIDxtZW51Ci0gICAgICAgICAgICAgICBsYWJlbD0iJUxBQkVMX1BPUFVQX0NBVEVHT1JZX1dFQl9TRVJWSUNFUyIKLSAgICAgICAgICAgICAgIHBhdGg9ImFkZGl0aW9ucyIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuYXRrLnVpLndlYnNlcnZpY2UuY2F0ZWdvcnkucG9wdXBNZW51Ij4KLSAgICAgICAgICAgIDxzZXBhcmF0b3IKLSAgICAgICAgICAgICAgICAgIG5hbWU9InBvcHVwQWN0aW9ucyI+Ci0gICAgICAgICAgICA8L3NlcGFyYXRvcj4KLSAgICAgICAgIDwvbWVudT4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPgotICAgPC9leHRlbnNpb24+ICAgCi08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvdWkvV3N0V1NVSVBsdWdpbi5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC91aS9Xc3RXU1VJUGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmMWYwN2QuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC91aS9Xc3RXU1VJUGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSMgLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgMjAwNjA4MTYgICAxNTE2MzIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4sIFJlbW92ZWQgdW51c2VkIHByb3BlcnRpZXMgZm9yICJXYWl0IGZvciB3aXphcmQgV1NETCB2YWxpZGF0aW9uIgotIyAyMDA3MDQyNCAgIDE4MjM3NiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgTWVzc2FnZXMgaW4gcGx1Z2luLnhtbC4KLSMKLVBMVUdJTl9OQU1FPVdlYiBTZXJ2aWNlcyBVSQotUExVR0lOX1ZFTkRPUj1FY2xpcHNlLm9yZwotUExVR0lOX0RFU0M9XAotVGhlIFdlYiBzZXJ2aWNlcyBHVUkgcGx1Z2luIGRlbGl2ZXJzIHRoZSBncmFwaGljYWwgXAotdXNlciBpbnRlcmZhY2UgdG8gdGhlIFdlYiBzZXJ2aWNlcyBmdW5jdGlvbiBpbiB0aGUgV1NUIHN1YnByb2plY3QuCi0KLVBMVUdJTl9ORVdfQ0FURUdPUllfTkFNRV9XUz1XZWIgU2VydmljZXMKLQotCi0jCi0jICBXUy1JIFByZWZlcmVuY2UgcGFnZXMKLSMKLSMgV1MtSSBDb21wbGlhbmNlIFBhZ2UKLSMKLVBSRUZFUkVOQ0VfQ0FURUdPUllfV1NJPVdTLUkgQ29tcGxpYW5jZQotU1RPUF9OT05fV1NJPVJlcXVpcmUgY29tcGxpYW5jZQotV0FSTl9OT05fV1NJPVN1Z2dlc3QgY29tcGxpYW5jZQotSUdOT1JFX05PTl9XU0k9SWdub3JlIGNvbXBsaWFuY2UKLUZPTExPV19XU0lfUFJFRkVSRU5DRT1Gb2xsb3cgUHJlZmVyZW5jZQotCi1UT09MVElQX1BXU0lfUEFHRT1XZWIgU2VydmljZXMgSW50ZXJvcGVyYWJpbGl0eQotVE9PTFRJUF9QV1NJX1JBRElPX1NUT1BfTk9OX1dTST1TdG9wIGFuZCBwcm9kdWNlIGFuIGVycm9yIG1lc3NhZ2UgaWYgeW91IG1ha2UgYSBjaG9pY2UgdGhhdCBkb2VzIG5vdCBjb21wbHkgd2l0aCBXUy1JLgotVE9PTFRJUF9QV1NJX1JBRElPX1dBUk5JTkdfTk9OX1dTST1Qcm9kdWNlIGEgd2FybmluZyBtZXNzYWdlIGlmIHlvdSBtYWtlIGEgY2hvaWNlIHRoYXQgZG9lcyBub3QgY29tcGx5IHdpdGggV1MtSS4KLVRPT0xUSVBfUFdTSV9SQURJT19JR05PUkVfTk9OX1dTST1TaWxlbnRseSBhbGxvdyBjaG9pY2VzIHRoYXQgZG8gbm90IGNvbXBseSB3aXRoIFdTLUkuCi1UT09MVElQX1BXU0lfUkFESU9fRk9MTE9XX1dTSV9QUkVGRVJFTkNFPVByb2plY3Qgd291bGQgdXNlIFdTLUkgY29tcGxpYW5jZSBsZXZlbCBzZXQgaW4gV29ya3NwYWNlIFByZWZlcmVuY2UuCi0KLUxBQkVMX1dTSV9TU0JQPVdTLUkgUyZTQlAgY29tcGxpYW5jZSBsZXZlbAotVE9PTFRJUF9QV1NJX1NTQlBfTEFCRUw9V1MtSSBTaW1wbGUgU09BUCBCaW5kaW5nIFByb2ZpbGUgY29tcGxpYW5jZSBsZXZlbAotVE9PTFRJUF9QV1NJX1NTQlBfQ09NQk89Q2hvb3NlIHRoZSBXUy1JIFNpbXBsZSBTT0FQIEJpbmRpbmcgUHJvZmlsZSBjb21wbGlhbmNlIGxldmVsCi0KLUxBQkVMX1dTSV9BUD1XUy1JIEEmUCBjb21wbGlhbmNlIGxldmVsCi1UT09MVElQX1BXU0lfQVBfTEFCRUw9V1MtSSBBdHRhY2htZW50IFByb2ZpbGUgY29tcGxpYW5jZSBsZXZlbAotVE9PTFRJUF9QV1NJX0FQX0NPTUJPPUNob29zZSB0aGUgV1MtSSBBdHRhY2htZW50IFByb2ZpbGUgY29tcGxpYW5jZSBsZXZlbAotCi0jCi0jCVdTREwgVmFsaWRhdGlvbgotIwotTEFCRUxfV1NETFZBTD1TZWxlY3Qgd2hldGhlciBXU0RMIHZhbGlkYXRpb24gc2hvdWxkIGJlIHBlcmZvcm1lZCBvbiB3aXphcmRzIHRoYXQgY29uc3VtZSBXU0RMIGZpbGVzCi1MQUJFTF9XU0RMVkFMX05PTkU9Jk5vIHdpemFyZCBXU0RMIHZhbGlkYXRpb24KLUxBQkVMX1dTRExWQUxfUkVNT1RFPVdpemFyZCBXU0RMIHZhbGlkYXRpb24gZm9yICZyZW1vdGUgZmlsZXMgb25seQotTEFCRUxfV1NETFZBTF9BTEw9V2l6YXJkIFdTREwgdmFsaWRhdGlvbiBmb3IgJmFsbCBXU0RMIGZpbGVzCi1UT09MVElQX1BXU0lfUkFESU9fV1NETFZBTF9OT05FPURvIG5vdCBwZXJmb3JtIFdTREwgdmFsaWRhdGlvbiBvbiB0aGUgV1NETCBmaWxlIG9yIFVSTCBpbnB1dCB0byB0aGUgV2ViIFNlcnZpY2VzIHdpemFyZAotVE9PTFRJUF9QV1NJX1JBRElPX1dTRExWQUxfUkVNT1RFPU9ubHkgcGVyZm9ybSBXU0RMIHZhbGlkYXRpb24gb24gcmVtb3RlIFdTREwgZmlsZSBvciBVUkwgaW5wdXQgdG8gdGhlIFdlYiBTZXJ2aWNlcyB3aXphcmQKLVRPT0xUSVBfUFdTSV9SQURJT19XU0RMVkFMX0FMTD1QZXJmb3JtIFdTREwgdmFsaWRhdGlvbiBvbiBhbGwgV1NETCBmaWxlIG9yIFVSTCBpbnB1dCB0byB0aGUgV2ViIFNlcnZpY2VzIHdpemFyZAotVE9PTFRJUF9QV1NJX1dTRExWQUxfTEFCRUw9U2VsZWN0IHdoZXRoZXIgV1NETCB2YWxpZGF0aW9uIHNob3VsZCBiZSBwZXJmb3JtZWQgb24gd2l6YXJkcyB0aGF0IGNvbnN1bWUgV1NETCBmaWxlcywgXG5mb3IgZXhhbXBsZSwgV2ViIFNlcnZpY2Ugd2l6YXJkIGluIHNrZWxldG9uIHNjZW5hcmlvIGFuZCBXZWIgU2VydmljZSBDbGllbnQgd2l6YXJkLgotCi0KLVdFQlNFUlZJQ0VfQ0FURUdPUllfUFJFRj1FeHBhbmQgdGhpcyBwcmVmZXJlbmNlcyBjYXRlZ29yeSB0byBzZXQgc3BlY2lmaWMgV2ViIHNlcnZpY2VzIHByZWZlcmVuY2VzLgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC91aS9Xc3RXU1VJUGx1Z2luTWVzc2FnZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvdWkvV3N0V1NVSVBsdWdpbk1lc3NhZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4NjkwMmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC91aS9Xc3RXU1VJUGx1Z2luTWVzc2FnZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDcyOCAgIDE1MTYzMiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzA0MjQgICAxODIzNzYgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBXc3RXU1VJUGx1Z2luTWVzc2FnZXMgZXh0ZW5kcyBOTFMgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gIm9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS5Xc3RXU1VJUGx1Z2luIjsvLyROT04tTkxTLTEkCi0KLQlwcml2YXRlIFdzdFdTVUlQbHVnaW5NZXNzYWdlcygpIHsKLQkJLy8gRG8gbm90IGluc3RhbnRpYXRlCi0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgUExVR0lOX05BTUU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUExVR0lOX1ZFTkRPUjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQTFVHSU5fREVTQzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQTFVHSU5fTkVXX0NBVEVHT1JZX05BTUVfV1M7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUFJFRkVSRU5DRV9DQVRFR09SWV9XU0k7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgU1RPUF9OT05fV1NJOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdBUk5fTk9OX1dTSTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJR05PUkVfTk9OX1dTSTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBGT0xMT1dfV1NJX1BSRUZFUkVOQ0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV1NJX1BBR0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV1NJX1JBRElPX1NUT1BfTk9OX1dTSTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXU0lfUkFESU9fV0FSTklOR19OT05fV1NJOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdTSV9SQURJT19JR05PUkVfTk9OX1dTSTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXU0lfUkFESU9fRk9MTE9XX1dTSV9QUkVGRVJFTkNFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1dTSV9TU0JQOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdTSV9TU0JQX0xBQkVMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdTSV9TU0JQX0NPTUJPOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1dTSV9BUDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXU0lfQVBfTEFCRUw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV1NJX0FQX0NPTUJPOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1dTRExWQUw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTEFCRUxfV1NETFZBTF9OT05FOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1dTRExWQUxfUkVNT1RFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIExBQkVMX1dTRExWQUxfQUxMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdTSV9SQURJT19XU0RMVkFMX05PTkU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVE9PTFRJUF9QV1NJX1JBRElPX1dTRExWQUxfUkVNT1RFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRPT0xUSVBfUFdTSV9SQURJT19XU0RMVkFMX0FMTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUT09MVElQX1BXU0lfV1NETFZBTF9MQUJFTDsKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgV0VCU0VSVklDRV9DQVRFR09SWV9QUkVGOwotCi0Jc3RhdGljIHsKLQkJTkxTLmluaXRpYWxpemVNZXNzYWdlcyhCVU5ETEVfTkFNRSwgV3N0V1NVSVBsdWdpbk1lc3NhZ2VzLmNsYXNzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3VpL2NvbW1hbmQvT3BlbkVkaXRvckNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvdWkvY29tbWFuZC9PcGVuRWRpdG9yQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Y2ZhYWViLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvdWkvY29tbWFuZC9PcGVuRWRpdG9yQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDgxMCAgIDEzNTM5NSBtYWthbmRyZUBjYS5pYm0uY29tIC0gQW5kcmV3IE1haywgRW5hYmxlIFdUUCBXZWIgc2VydmljZSBmcmFtZXdvcmsgb3BlbmluZyBKYXZhIGVkaXRvcgotICogMjAwNjEwMjUgICAxNjIyODggbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIHdvcmtzcGFjZSBwYXRocyB3aXRoIHNwYWNlcyBicmVhayBKYXZhIEVkaXRvciBMYXVuY2gKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkuY29tbWFuZDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaWRlLklERTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS5wbHVnaW4uV1NVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JV2ViU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlU2NlbmFyaW87Ci0KLS8qKgotICogQSBjb21tYW5kIHdoaWNoLCB3aGVuIGdpdmVuIGFuIGFycmF5IG9mIGltcGxlbWVudGF0aW9uIFVSTHMsIHdpbGwKLSAqIG9wZW4gdGhlbSB3aXRoaW4gRWNsaXBzZSB1c2luZyB0aGUgZWRpdG9yIHJlZ2lzdGVyZWQgd2l0aCB0aGUKLSAqIGZpbGUgZXh0ZW5zaW9ucy4KLSAqLwotcHVibGljIGNsYXNzIE9wZW5FZGl0b3JDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24gewotCi0JcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIEZJTEVfUFJPVE9DT0wgICAgID0gImZpbGU6LyI7Ci0JcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIFBMQVRGT1JNX1JFU09VUkNFID0gInBsYXRmb3JtOi9yZXNvdXJjZS8iOwotCQotCXByaXZhdGUgSVdlYlNlcnZpY2Ugd2ViU2VydmljZTsKLQlwcml2YXRlIElDb250ZXh0CWNvbnRleHQ7Ci0gCi0JLyoqCi0JICogU2V0dGVyIGZvciB0aGUgSVdlYlNlcnZpY2UKLQkgKiAKLQkgKiBAcGFyYW0gd2ViU2VydmljZSBUaGUgSVdlYlNlcnZpY2UKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlKElXZWJTZXJ2aWNlIHdlYlNlcnZpY2UpIHsKLQkJdGhpcy53ZWJTZXJ2aWNlID0gd2ViU2VydmljZTsgIAotCX0KLQkgIAotCS8qKgotCSAqIFNldHRlciBmb3IgdGhlIElDb250ZXh0Ci0JICogCi0JICogQHBhcmFtIGNvbnRleHQgVGhlIElDb250ZXh0Ci0JICovCi0JcHVibGljIHZvaWQgc2V0Q29udGV4dCAoSUNvbnRleHQgY29udGV4dCkgewotCQl0aGlzLmNvbnRleHQgPSBjb250ZXh0OwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLm9wZXJhdGlvbnMuQWJzdHJhY3RPcGVyYXRpb24jZXhlY3V0ZShvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvciwgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGUpCi0JICovCi0JcHVibGljIElTdGF0dXMgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgaW5mbykKLQkJCXRocm93cyBFeGVjdXRpb25FeGNlcHRpb24gewotCQotCQlpZiAoY29udGV4dC5nZXRTY2VuYXJpbygpLmdldFZhbHVlKCkgIT0gV2ViU2VydmljZVNjZW5hcmlvLlRPUERPV04pCi0JCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQkJCi0JCVN0cmluZ1tdIGltcGxVUkxzID0gd2ViU2VydmljZS5nZXRXZWJTZXJ2aWNlSW5mbygpLmdldEltcGxVUkxzKCk7Ci0JCQkKLQkJLy8gbm90aGluZyB0byBvcGVuCi0JCWlmIChpbXBsVVJMcyA9PSBudWxsKQotCQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JCQotCQlJRmlsZSBmaWxlOwotCQkKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBpbXBsVVJMcy5sZW5ndGg7IGkrKykgewotCQkJdHJ5IHsgICAgCQkJCQkJCi0JCQkJU3RyaW5nIGltcGxVUkwgPSBpbXBsVVJMc1tpXTsKLQkJCQlmaWxlID0gbnVsbDsKLQkJCQkKLQkJCQkvLyBsb2NhbCBmaWxlc3lzdGVtIHBhdGgKLQkJCQlpZiAoaW1wbFVSTC5zdGFydHNXaXRoKEZJTEVfUFJPVE9DT0wpKSB7Ci0JCQkJCWltcGxVUkwgPSBpbXBsVVJMLnN1YnN0cmluZyhGSUxFX1BST1RPQ09MLmxlbmd0aCgpKTsJCQkJCi0JCQkJCWZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGVGb3JMb2NhdGlvbihuZXcgUGF0aChpbXBsVVJMKSk7Ci0JCQkJfQotCQkJCWVsc2UgewkKLQkJCQkJLy8gcGxhdGZvcm0gcGF0aAotCQkJCQlpZiAoaW1wbFVSTC5zdGFydHNXaXRoKFBMQVRGT1JNX1JFU09VUkNFKSkKLQkJCQkJCWltcGxVUkwgPSBpbXBsVVJMLnN1YnN0cmluZyhQTEFURk9STV9SRVNPVVJDRS5sZW5ndGgoKSk7Ci0JCQkJCi0JCQkJCWlmIChpbXBsVVJMLmluZGV4T2YoJzonKSAhPSAtMSkKLQkJCQkJCWNvbnRpbnVlOwotCQkJCQkKLQkJCQkJZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aChpbXBsVVJMKSk7Ci0JCQkJfQotCQkJCQkJCi0JCQkJaWYgKGZpbGUgPT0gbnVsbCB8fCAhZmlsZS5leGlzdHMoKSkKLQkJCQkJY29udGludWU7Ci0JCQkJCi0JCQkJSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpOwotCQkJCQotCQkJCWlmIChwYWdlID09IG51bGwpCi0JCQkJCWNvbnRpbnVlOwotCQkJCQkJCQkKLQkJCQlJREUub3BlbkVkaXRvcihwYWdlLCBmaWxlLCB0cnVlKTsKLQkJCX0KLQkJCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCS8vVE9ETzogZm9yIFdUUCAyLjAsIHJldHVybiBwcm9wZXIgc3RhdHVzICh3aXRoIE5MUykKLQkJCQlXU1VJUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0TG9nKCkubG9nKAotCQkJCQkJbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBXU1VJUGx1Z2luLklELCAwLCBlLmdldE1lc3NhZ2UoKSwgZSkpOwotCQkJfQkJCQotCQl9Ci0JCQotCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQl9CQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC91aS9wbHVnaW4vV1NVSVBsdWdpbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC91aS9wbHVnaW4vV1NVSVBsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZTA5OTAxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvdWkvcGx1Z2luL1dTVUlQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLnBsdWdpbjsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0qIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotKiAKLSogQ29udHJpYnV0b3JzOgotKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsKLQotCi0vKioKLSogVGhpcyBpcyB0aGUgcGx1Z2luIGNsYXNzIGZvciB0aGUgV2ViIFNlcnZpY2VzIHBsdWdpbi4KLSogPHA+Ci0qIFRoaXMgcGx1Z2luIGNvbnRhaW5zIHRoZSBncmFwaGljIHVzZXIgaW50ZXJmYWNlIHRvIHRoZQotKiBXZWIgU2VydmljZXMgcnVudGltZSBmb3VuZCBpbiBvcmcuZWNsaXBzZS5qc3Qud3MuCi0qLwotcHVibGljIGNsYXNzIFdTVUlQbHVnaW4gZXh0ZW5kcyBBYnN0cmFjdFVJUGx1Z2luCi17Ci0KLSAvKioKLSAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBkZXNjcmlwdG9yIG9mIHRoaXMgcGx1Z2luIGluIHBsdWdpbi54bWwuCi0gKi8KLSBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRCA9ICJvcmcuZWNsaXBzZS53c3Qud3MudWkiOwotCi0gLyoqCi0gKiBUaGUgcmVmZXJlbmNlIHRvIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBwbHVnaW4uCi0gKi8KLSBwcml2YXRlIHN0YXRpYyBXU1VJUGx1Z2luIGluc3RhbmNlXzsKLSAKLSAvKioKLSAgKiBDb25zdHJ1Y3RzIGEgcnVudGltZSBwbHVnaW4gb2JqZWN0IGZvciB0aGlzIHBsdWdpbi4KLSAgKi8KLSBwdWJsaWMgV1NVSVBsdWdpbigpIHsKLQlzdXBlcigpOwotCWluc3RhbmNlXyA9IHRoaXM7Ci0gfQotCi0gLyoqCi0gKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBwbHVnaW4uIEVxdWl2YWxlbnQgdG8gY2FsbGluZwotICogKFdTVUlQbHVnaW4pUGxhdGZvcm0uZ2V0UGx1Z2luKCJvcmcuZWNsaXBzZS53c3Qud3MudWkiKTsKLSAqIEByZXR1cm4gVGhlIFdTVUlQbHVnaW4gc2luZ2xldG9uLgotICovCi0gc3RhdGljIHB1YmxpYyBXU1VJUGx1Z2luIGdldEluc3RhbmNlKCkgewotICAgcmV0dXJuIGluc3RhbmNlXzsKLSB9Ci0KLSAvKioKLSAqIFJldHVybnMgYW4gaW1hZ2UgZGVzY3JpcHRvciBmb3IgdGhlIG5hbWVkIHJlc291cmNlCi0gKiBhcyByZWxhdGl2ZSB0byB0aGUgcGx1Z2luIGluc3RhbGwgbG9jYXRpb24uCi0gKiBAcmV0dXJuIEFuIGltYWdlIGRlc2NyaXB0b3IsIHBvc3NpYmx5IG51bGwuCi0gKi8KLQlwdWJsaWMgc3RhdGljIEltYWdlRGVzY3JpcHRvciBnZXRJbWFnZURlc2NyaXB0b3IoU3RyaW5nIG5hbWUpIHsKLQkJdHJ5IHsKLQkJCVVSTCBpbnN0YWxsVVJMID0gaW5zdGFuY2VfLmdldEJ1bmRsZSgpLmdldEVudHJ5KCIvIik7Ci0JCQlVUkwgaW1hZ2VVUkwgPSBuZXcgVVJMKGluc3RhbGxVUkwsIG5hbWUpOwotCQkJcmV0dXJuIEltYWdlRGVzY3JpcHRvci5jcmVhdGVGcm9tVVJMKGltYWdlVVJMKTsKLQkJfSBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpIHsKLSAgICAgcmV0dXJuIG51bGw7Ci0gICB9Ci0gfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3VpL3ByZWZlcmVuY2VzL1dlYlNlcnZpY2VzUHJlZmVyZW5jZVBhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvdWkvcHJlZmVyZW5jZXMvV2ViU2VydmljZXNQcmVmZXJlbmNlUGFnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDM4NjdiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvdWkvcHJlZmVyZW5jZXMvV2ViU2VydmljZXNQcmVmZXJlbmNlUGFnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNDI0ICAgMTgyMzc2IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkucHJlZmVyZW5jZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLlByZWZlcmVuY2VQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLldzdFdTVUlQbHVnaW5NZXNzYWdlczsKLQotLyoqCi0gKiBUaGUgV2ViU2VydmljZXNQcmVmZXJlbmNlUGFnZQotICovCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZXNQcmVmZXJlbmNlUGFnZSBleHRlbmRzIFByZWZlcmVuY2VQYWdlIGltcGxlbWVudHMgSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlIHsKLQotLyoqCi0gKiBDcmVhdGVzIGFuZCByZXR1cm5zIHRoZSBTV1QgY29udHJvbCBmb3IgdGhlIGN1c3RvbWl6ZWQgYm9keSAKLSAqIG9mIHRoaXMgcHJlZmVyZW5jZSBwYWdlIHVuZGVyIHRoZSBnaXZlbiBwYXJlbnQgY29tcG9zaXRlLgotICogPHA+Ci0gKiBUaGlzIGZyYW1ld29yayBtZXRob2QgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBjb25jcmV0ZQotICogc3ViY2xhc3Nlcy4KLSAqIDwvcD4KLSAqCi0gKiBAcGFyYW0gcGFyZW50IHRoZSBwYXJlbnQgY29tcG9zaXRlCi0gKiBAcmV0dXJuIHRoZSBuZXcgY29udHJvbAotICovCi1wcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVDb250ZW50cyhvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUgcGFyZW50KSAKLXsKLSAgQ29tcG9zaXRlIGNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUoIHBhcmVudCwgU1dULk5PTkUgKTsKLSAgVGV4dCAgICAgIG1lc3NhZ2UgICA9IG5ldyBUZXh0KCBjb21wb3NpdGUsIFNXVC5SRUFEX09OTFkgfCBTV1QuV1JBUCApOwotICAKLSAgY29tcG9zaXRlLnNldExheW91dCggbmV3IEdyaWRMYXlvdXQoKSApOyAKLSAgbWVzc2FnZS5zZXRUZXh0KCBXc3RXU1VJUGx1Z2luTWVzc2FnZXMuV0VCU0VSVklDRV9DQVRFR09SWV9QUkVGICk7Ci0gIG5vRGVmYXVsdEFuZEFwcGx5QnV0dG9uKCk7Ci0gIERpYWxvZy5hcHBseURpYWxvZ0ZvbnQoIGNvbXBvc2l0ZSApOyAgICAKLQlyZXR1cm4gcGFyZW50OwotfQotLyoqCi0gKiBEbyBhbnkgaW5pdGlhbGl6YXRpb24gcmVxdWlyZWQgYnkgdGhlIGRlc2t0b3AuIEJ5IGRlZmF1bHQgZG8gbm90aGluZy4KLSAqLwotcHVibGljIHZvaWQgaW5pdChJV29ya2JlbmNoIGRlc2t0b3ApIHt9Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvdWkvdXRpbHMvQWRhcHRlclV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3VpL3V0aWxzL0FkYXB0ZXJVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTdkZjIxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvdWkvdXRpbHMvQWRhcHRlclV0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzAzMjcgICAxNzIzMzkga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDcwNzE2ICAgMTkxMzU3IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLnV0aWxzOwotCi1pbXBvcnQgamF2YS5uZXQuVVJJOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotCi0vKioKLSAqIFRoZSBBZGFwdGVyVXRpbHMgY2xhc3MgcHJvdmlkZXMgdXRpbGl0eSBtZXRob2RzIHRvIGdldCBvYmplY3RzIGZyb20gdGhlIFBsYXRmb3JtJ3MgYWRhcHRlciBleHRlbnNpb24uCi0gKgotICovCi1wdWJsaWMgY2xhc3MgQWRhcHRlclV0aWxzIHsJCi0JCi0JLyoqCi0JICogQHBhcmFtIG9iamVjdCBPYmplY3QgdG8gYWRhcHQKLQkgKiBAcmV0dXJuIFRoZSBhZGFwdGVkIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGZpbGUgb3IgU3RyaW5nIGlmIGFuIGFkYXB0ZXIgaXMgZm91bmQuIAotCSAqICAgICAgICAgUmV0dXJucyBudWxsIGlmIGFuIGFkYXB0ZXIgaXMgbm90IGZvdW5kLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgT2JqZWN0IGdldEFkYXB0ZWRPYmplY3QgKE9iamVjdCBvYmplY3QpIHsgCi0JCWlmIChvYmplY3QgPT0gbnVsbCkgCi0JCQlyZXR1cm4gbnVsbDsKLQkJT2JqZWN0IGFkYXB0ZWRPYmplY3QgPSBQbGF0Zm9ybS5nZXRBZGFwdGVyTWFuYWdlcigpLmxvYWRBZGFwdGVyKG9iamVjdCwgIm9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlIik7Ci0JCWlmIChhZGFwdGVkT2JqZWN0ID09IG51bGwpIHsKLQkJCWFkYXB0ZWRPYmplY3QgPSBQbGF0Zm9ybS5nZXRBZGFwdGVyTWFuYWdlcigpLmxvYWRBZGFwdGVyKG9iamVjdCwgImphdmEubGFuZy5TdHJpbmciKTsKLQkJfQotCQlyZXR1cm4gYWRhcHRlZE9iamVjdDsKLQl9Ci0JCi0JLyoqCi0JICAgKiBAcGFyYW0gb2JqZWN0IExvb2sgdXAgYW4gYWRhcHRlciBtYXBwaW5nIHRoZSBvYmplY3QgdG8gSUZpbGUgb3IgU3RyaW5nLgotCSAgICogQHJldHVybiBUaGUgV1NETCB1cmkgcmV0dXJuZWQgYnkgdGhlIGFkYXB0ZXIgb3IgbnVsbCBpZiBubyBhZGFwdGVyIGlzIGZvdW5kLgotCSAgICovCi0JICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBZGFwdGVkV1NETCAoT2JqZWN0IG9iamVjdCkgewotCQkgIFN0cmluZyB3c2RsVVJJID0gbnVsbDsKLQkJICBPYmplY3QgYWRhcHRlZE9iamVjdCA9IEFkYXB0ZXJVdGlscy5nZXRBZGFwdGVkT2JqZWN0KG9iamVjdCk7Ci0JCSAgaWYgKCBhZGFwdGVkT2JqZWN0ICE9IG51bGwpIHsKLQkJCSAgaWYgKGFkYXB0ZWRPYmplY3QgaW5zdGFuY2VvZiBJRmlsZSkKLQkJCSAgewotCQkJCSAgVVJJIHVyaSA9ICgoSUZpbGUpYWRhcHRlZE9iamVjdCkuZ2V0TG9jYXRpb25VUkkoKTsKLQkJCQkgIGlmICh1cmkgIT0gbnVsbCkgewotCQkJCQkgIHdzZGxVUkkgPSB1cmkudG9TdHJpbmcoKTsKLQkJCQkgIH0KLQkJCQkgIAotCQkJICB9IGVsc2UgaWYgKGFkYXB0ZWRPYmplY3QgaW5zdGFuY2VvZiBTdHJpbmcpIHsKLQkJCQkgIHdzZGxVUkkgPSAoU3RyaW5nKSBhZGFwdGVkT2JqZWN0OwotCQkJICB9Ci0JCSAgfQotCQkgIHJldHVybiB3c2RsVVJJOwotCSAgfQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC91aS93c2kvcHJlZmVyZW5jZXMvV1NJQ29tcGxpYW5jZVByZWZlcmVuY2VQYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3VpL3dzaS9wcmVmZXJlbmNlcy9XU0lDb21wbGlhbmNlUHJlZmVyZW5jZVBhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmYxODJkOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3VpL3dzaS9wcmVmZXJlbmNlcy9XU0lDb21wbGlhbmNlUHJlZmVyZW5jZVBhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAzMTAgICAxMzEzNTIgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNjA3MjggICAxNTE2MzIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkud3NpLnByZWZlcmVuY2VzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5QcmVmZXJlbmNlUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhlbHAuSVdvcmtiZW5jaEhlbHBTeXN0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbi5XU1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXMuUGVyc2lzdGVudFdTRExWYWxpZGF0aW9uQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXMuUGVyc2lzdGVudFdTSUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLldzdFdTVUlQbHVnaW5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkucGx1Z2luLldTVUlQbHVnaW47Ci0KLQotCi1wdWJsaWMgY2xhc3MgV1NJQ29tcGxpYW5jZVByZWZlcmVuY2VQYWdlIGV4dGVuZHMgUHJlZmVyZW5jZVBhZ2UgaW1wbGVtZW50cyBJV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2UsIFNlbGVjdGlvbkxpc3RlbmVyLCBMaXN0ZW5lcgotCi17Ci0JICAKLSAgLypDT05URVhUX0lEIFBXU0kwMDAxIGZvciB0aGUgV1MtSSBQcmVmZXJlbmNlIFBhZ2UqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BXU0lfUEFHRSA9IFdTVUlQbHVnaW4uSUQgKyAiLlBXU0kwMDAwIjsKLSAgLy8KLQotICBwcml2YXRlIExhYmVsIHdzaV9zc2JwX0xhYmVsXzsKLSAgcHJpdmF0ZSBDb21ibyB3c2lfc3NicF9UeXBlc187Ci0gIAotICAvKkNPTlRFWFRfSUQgUFdTSTAwMDQgZm9yIHRoZSBXUy1JIFNTQlAgdHlwZSBjb21ibyBib3ggb24gdGhlIFByb2ZpbGUgQ29tcGxpYW5jZSBhbmQgVmFsaWRhdGlvbiBwYWdlKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QV1NJX1NTQlBfQ09NQk9fVFlQRSA9IFdTVUlQbHVnaW4uSUQgKyAiLlBXU0kwMDA0IjsKLSAgLypDT05URVhUX0lEIFBXU0kwMDA4IGZvciB0aGUgV1MtSSBBUCB0eXBlIGNvbWJvIGJveCBvbiB0aGUgUHJvZmlsZSBDb21wbGlhbmNlIGFuZCBWYWxpZGF0aW9uIHBhZ2UqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BXU0lfQVBfQ09NQk9fVFlQRSA9IFdTVUlQbHVnaW4uSUQgKyAiLlBXU0kwMDA4IjsKLSAgICAgIAotICBwcml2YXRlIExhYmVsIHdzaV9hcF9MYWJlbF87Ci0gIHByaXZhdGUgQ29tYm8gd3NpX2FwX1R5cGVzXzsKLSAgCi0gIHByaXZhdGUgaW50IHNhdmVkU1NCUFNldHRpbmdfID0gLTE7Ci0gIAotICBwcml2YXRlIEdyb3VwIHZhbGlkYXRpb25TZWxlY3Rpb25Hcm91cF87Ci0gIAotICBwcml2YXRlIFRleHQgd3NkbFZhbGlkYXRpb25MYWJlbF87Ci0gIC8qQ09OVEVYVF9JRCBQV1NJMDAwOSBmb3IgdGhlIE5vIFdpemFyZCBXU0RMIHZhbGlkYXRpb24gYnV0dG9uIG9uIHRoZSBQcm9maWxlIENvbXBsaWFuY2UgYW5kIFZhbGlkYXRpb24gcGFnZSovCi0gIHByaXZhdGUgQnV0dG9uIHZhbGlkYXRlTm9Xc2RsQnV0dG9uXzsKLSAgLypDT05URVhUX0lEIFBXU0kwMDAxMCBmb3IgdGhlIFdpemFyZCBXU0RMIHZhbGlkYXRpb24gZm9yIHJlbW90ZSBmaWxlcyBvbmx5IGJ1dHRvbiBvbiB0aGUgUHJvZmlsZSBDb21wbGlhbmNlIGFuZCBWYWxpZGF0aW9uIHBhZ2UqLwotICBwcml2YXRlIEJ1dHRvbiB2YWxpZGF0ZVJlbW90ZVdzZGxCdXR0b25fOwotICAvKkNPTlRFWFRfSUQgUFdTSTAwMDExIGZvciB0aGUgV2l6YXJkIFdTREwgdmFsaWRhdGlvbiBmb3IgYWxsIGZpbGVzIGJ1dHRvbiBvbiB0aGUgUHJvZmlsZSBDb21wbGlhbmNlIGFuZCBWYWxpZGF0aW9uIHBhZ2UqLwotICBwcml2YXRlIEJ1dHRvbiB2YWxpZGF0ZUFsbFdzZGxCdXR0b25fOwotICAKLQotICAvKgotICAgKiBDT05URVhUX0lEIFBXUlMwMDA5IGZvciB0aGUgbm8gd3NkbCB2YWxpZGF0aW9uIHJhZGlvIGJ1dHRvbiBvZiB0aGUgcHJvZmlsZSB2YWxpZGF0aW9uIHByZWZlcmVuY2UgcGFnZQotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QV1NJX1JBRElPX1dTRExWQUxfTk9ORSA9IFdTVUlQbHVnaW4uSUQgKyAiLlBXU0kwMDA5IjsKLSAgLyoKLSAgICogQ09OVEVYVF9JRCBQV1JTMDAxMCBmb3IgdGhlIHdzZGwgdmFsaWRhdGlvbiBvbiByZW1vdGUgZG9jdW1lbnQgcmFkaW8gYnV0dG9uIG9mIHRoZSBwcm9maWxlIHZhbGlkYXRpb24gcHJlZmVyZW5jZSBwYWdlCi0gICAqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BXU0lfUkFESU9fV1NETFZBTF9SRU1PVEUgPSBXU1VJUGx1Z2luLklEICsgIi5QV1NJMDAwMTAiOwotICAvKgotICAgKiBDT05URVhUX0lEIFBXUlMwMDExIGZvciB0aGUgd3NkbCB2YWxpZGF0aW9uIG9uIGFsbCBkb2N1bWVudCByYWRpbyBidXR0b24gb2YgdGhlIHByb2ZpbGUgdmFsaWRhdGlvbiBwcmVmZXJlbmNlIHBhZ2UKLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIElORk9QT1BfUFdTSV9SQURJT19XU0RMVkFMX0FMTCA9IFdTVUlQbHVnaW4uSUQgKyAiLlBXU0kwMDExIjsKLSAgLyoKLSAgICogQ09OVEVYVF9JRCBQV1JTMDAxMiBmb3IgdGhlIHdzZGwgdmFsaWRhdGlvbiBsYWJlbCBvZiB0aGUgcHJvZmlsZSB2YWxpZGF0aW9uIHByZWZlcmVuY2UgcGFnZQotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QV1NJX1dTRExWQUxfTEFCRUwgPSBXU1VJUGx1Z2luLklEICsgIi5QV1NJMDAxMiI7Ci0KLSAvKioKLSAgICogQ3JlYXRlcyBwcmVmZXJlbmNlIHBhZ2UgY29udHJvbHMgb24gZGVtYW5kLgotICAgKiAgIEBwYXJhbSBwYXJlbnQgIHRoZSBwYXJlbnQgZm9yIHRoZSBwcmVmZXJlbmNlIHBhZ2UKLSAgICovCi0gIHByb3RlY3RlZCBDb250cm9sIGNyZWF0ZUNvbnRlbnRzKENvbXBvc2l0ZSBzdXBlcnBhcmVudCkKLSAgewotICAgCi0gICAgSVdvcmtiZW5jaEhlbHBTeXN0ZW0gaGVscFN5c3RlbSA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpOwotCQotICAgIENvbXBvc2l0ZSAgIHBhcmVudCA9IG5ldyBDb21wb3NpdGUoIHN1cGVycGFyZW50LCBTV1QuTk9ORSApOwkKLSAgICBHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgbGF5b3V0Lm51bUNvbHVtbnMgPSAxOwotICAgIHBhcmVudC5zZXRMYXlvdXQoIGxheW91dCApOwotICAgIHBhcmVudC5zZXRMYXlvdXREYXRhKCBuZXcgR3JpZERhdGEoIEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCApICk7Ci0gICAgcGFyZW50LnNldFRvb2xUaXBUZXh0KFdzdFdTVUlQbHVnaW5NZXNzYWdlcy5UT09MVElQX1BXU0lfUEFHRSk7Ci0gICAgaGVscFN5c3RlbS5zZXRIZWxwKHBhcmVudCxJTkZPUE9QX1BXU0lfUEFHRSk7Ci0KLSAgICBHcmlkTGF5b3V0IGdsID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBnbC5udW1Db2x1bW5zID0gMTsKLSAgICBnbC5tYXJnaW5IZWlnaHQgPSAwOwotICAgIGdsLm1hcmdpbldpZHRoID0gMDsKLQotICAgIENvbXBvc2l0ZSB3c2lfQ29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZSAocGFyZW50LCBTV1QuTk9ORSk7Ci0gICAgd3NpX0NvbXBvc2l0ZS5zZXRMYXlvdXQoZ2wpOwotICAgIHdzaV9Db21wb3NpdGUuc2V0TGF5b3V0RGF0YSggbmV3IEdyaWREYXRhKCBHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwgKSApOwotICAgIAotICAgIHdzaV9hcF9MYWJlbF8gPSBuZXcgTGFiZWwod3NpX0NvbXBvc2l0ZSwgU1dULk5PTkUpOwotICAgIHdzaV9hcF9MYWJlbF8uc2V0VGV4dChXc3RXU1VJUGx1Z2luTWVzc2FnZXMuTEFCRUxfV1NJX0FQKTsKLSAgICB3c2lfYXBfTGFiZWxfLnNldFRvb2xUaXBUZXh0KFdzdFdTVUlQbHVnaW5NZXNzYWdlcy5UT09MVElQX1BXU0lfQVBfTEFCRUwpOwotICAgIHdzaV9hcF9UeXBlc18gPSBuZXcgQ29tYm8od3NpX0NvbXBvc2l0ZSwgU1dULkRST1BfRE9XTiB8IFNXVC5SRUFEX09OTFkpOwotICAgIHdzaV9hcF9UeXBlc18uc2V0TGF5b3V0RGF0YSggbmV3IEdyaWREYXRhKCBHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwgKSApOwotICAgIHdzaV9hcF9UeXBlc18uc2V0VG9vbFRpcFRleHQoV3N0V1NVSVBsdWdpbk1lc3NhZ2VzLlRPT0xUSVBfUFdTSV9BUF9DT01CTyk7Ci0gICAgaGVscFN5c3RlbS5zZXRIZWxwKHdzaV9hcF9UeXBlc18sSU5GT1BPUF9QV1NJX0FQX0NPTUJPX1RZUEUpOwotICAgIAotICAgIHdzaV9hcF9UeXBlc18uYWRkKFdzdFdTVUlQbHVnaW5NZXNzYWdlcy5TVE9QX05PTl9XU0kpOwotICAgIHdzaV9hcF9UeXBlc18uYWRkKFdzdFdTVUlQbHVnaW5NZXNzYWdlcy5XQVJOX05PTl9XU0kpOwotICAgIHdzaV9hcF9UeXBlc18uYWRkKFdzdFdTVUlQbHVnaW5NZXNzYWdlcy5JR05PUkVfTk9OX1dTSSk7Ci0gICAgCi0gICAgd3NpX2FwX1R5cGVzXy5hZGRTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKLSAgICAKLSAgICB3c2lfc3NicF9MYWJlbF8gPSBuZXcgTGFiZWwod3NpX0NvbXBvc2l0ZSwgU1dULk5PTkUpOwotICAgIHdzaV9zc2JwX0xhYmVsXy5zZXRUZXh0KFdzdFdTVUlQbHVnaW5NZXNzYWdlcy5MQUJFTF9XU0lfU1NCUCk7Ci0gICAgd3NpX3NzYnBfTGFiZWxfLnNldFRvb2xUaXBUZXh0KFdzdFdTVUlQbHVnaW5NZXNzYWdlcy5UT09MVElQX1BXU0lfU1NCUF9MQUJFTCk7Ci0gICAgd3NpX3NzYnBfVHlwZXNfID0gbmV3IENvbWJvKHdzaV9Db21wb3NpdGUsIFNXVC5EUk9QX0RPV04gfCBTV1QuUkVBRF9PTkxZKTsKLSAgICB3c2lfc3NicF9UeXBlc18uc2V0TGF5b3V0RGF0YSggbmV3IEdyaWREYXRhKCBHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwgKSApOwotICAgIHdzaV9zc2JwX1R5cGVzXy5zZXRUb29sVGlwVGV4dChXc3RXU1VJUGx1Z2luTWVzc2FnZXMuVE9PTFRJUF9QV1NJX1NTQlBfQ09NQk8pOwotICAgIGhlbHBTeXN0ZW0uc2V0SGVscCh3c2lfc3NicF9UeXBlc18sSU5GT1BPUF9QV1NJX1NTQlBfQ09NQk9fVFlQRSk7Ci0gICAgCi0gICAgd3NpX3NzYnBfVHlwZXNfLmFkZChXc3RXU1VJUGx1Z2luTWVzc2FnZXMuU1RPUF9OT05fV1NJKTsKLSAgICB3c2lfc3NicF9UeXBlc18uYWRkKFdzdFdTVUlQbHVnaW5NZXNzYWdlcy5XQVJOX05PTl9XU0kpOwotICAgIHdzaV9zc2JwX1R5cGVzXy5hZGQoV3N0V1NVSVBsdWdpbk1lc3NhZ2VzLklHTk9SRV9OT05fV1NJKTsKLSAgCi0gICAgLy8gV1NETCB2YWxpZGF0aW9uIHByZWZlcmVuY2VzCi0gICAgdmFsaWRhdGlvblNlbGVjdGlvbkdyb3VwXyA9IG5ldyBHcm91cCh3c2lfQ29tcG9zaXRlLCBTV1QuTk9ORSk7Ci0gICAgZ2wgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGdsLm1hcmdpbkhlaWdodCA9IDA7Ci0gICAgZ2wubWFyZ2luV2lkdGggPSAwOwotICAgIHZhbGlkYXRpb25TZWxlY3Rpb25Hcm91cF8uc2V0TGF5b3V0KGdsKTsKLSAgICBHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwpOwotICAgIHZhbGlkYXRpb25TZWxlY3Rpb25Hcm91cF8uc2V0TGF5b3V0RGF0YShnZCk7Ci0gICAgCi0gICAgd3NkbFZhbGlkYXRpb25MYWJlbF8gPSBuZXcgVGV4dCh2YWxpZGF0aW9uU2VsZWN0aW9uR3JvdXBfLCBTV1QuUkVBRF9PTkxZKTsKLSAgICB3c2RsVmFsaWRhdGlvbkxhYmVsXy5zZXRUZXh0KFdzdFdTVUlQbHVnaW5NZXNzYWdlcy5MQUJFTF9XU0RMVkFMKTsKLSAgICB3c2RsVmFsaWRhdGlvbkxhYmVsXy5zZXRUb29sVGlwVGV4dChXc3RXU1VJUGx1Z2luTWVzc2FnZXMuVE9PTFRJUF9QV1NJX1dTRExWQUxfTEFCRUwpOwotICAgIGhlbHBTeXN0ZW0uc2V0SGVscCh3c2RsVmFsaWRhdGlvbkxhYmVsXywgSU5GT1BPUF9QV1NJX1dTRExWQUxfTEFCRUwpOwotICAgIAotICAgIHZhbGlkYXRlTm9Xc2RsQnV0dG9uXyA9IG5ldyBCdXR0b24odmFsaWRhdGlvblNlbGVjdGlvbkdyb3VwXywgU1dULlJBRElPKTsKLSAgICB2YWxpZGF0ZU5vV3NkbEJ1dHRvbl8uc2V0VGV4dChXc3RXU1VJUGx1Z2luTWVzc2FnZXMuTEFCRUxfV1NETFZBTF9OT05FKTsKLSAgICB2YWxpZGF0ZU5vV3NkbEJ1dHRvbl8uYWRkTGlzdGVuZXIoU1dULlNlbGVjdGlvbiwgdGhpcyk7Ci0gICAgdmFsaWRhdGVOb1dzZGxCdXR0b25fLnNldFRvb2xUaXBUZXh0KFdzdFdTVUlQbHVnaW5NZXNzYWdlcy5UT09MVElQX1BXU0lfUkFESU9fV1NETFZBTF9OT05FKTsKLSAgICBoZWxwU3lzdGVtLnNldEhlbHAodmFsaWRhdGVOb1dzZGxCdXR0b25fLCBJTkZPUE9QX1BXU0lfUkFESU9fV1NETFZBTF9OT05FKTsKLSAgICAKLSAgICB2YWxpZGF0ZVJlbW90ZVdzZGxCdXR0b25fID0gbmV3IEJ1dHRvbih2YWxpZGF0aW9uU2VsZWN0aW9uR3JvdXBfLCBTV1QuUkFESU8pOwotICAgIHZhbGlkYXRlUmVtb3RlV3NkbEJ1dHRvbl8uc2V0VGV4dChXc3RXU1VJUGx1Z2luTWVzc2FnZXMuTEFCRUxfV1NETFZBTF9SRU1PVEUpOwotICAgIHZhbGlkYXRlUmVtb3RlV3NkbEJ1dHRvbl8uYWRkTGlzdGVuZXIoU1dULlNlbGVjdGlvbiwgdGhpcyk7Ci0gICAgdmFsaWRhdGVSZW1vdGVXc2RsQnV0dG9uXy5zZXRUb29sVGlwVGV4dChXc3RXU1VJUGx1Z2luTWVzc2FnZXMuVE9PTFRJUF9QV1NJX1JBRElPX1dTRExWQUxfUkVNT1RFKTsKLSAgICBoZWxwU3lzdGVtLnNldEhlbHAodmFsaWRhdGVSZW1vdGVXc2RsQnV0dG9uXywgSU5GT1BPUF9QV1NJX1JBRElPX1dTRExWQUxfUkVNT1RFKTsKLSAgICAKLSAgICB2YWxpZGF0ZUFsbFdzZGxCdXR0b25fID0gbmV3IEJ1dHRvbih2YWxpZGF0aW9uU2VsZWN0aW9uR3JvdXBfLCBTV1QuUkFESU8pOwotICAgIHZhbGlkYXRlQWxsV3NkbEJ1dHRvbl8uc2V0VGV4dChXc3RXU1VJUGx1Z2luTWVzc2FnZXMuTEFCRUxfV1NETFZBTF9BTEwpOwotICAgIHZhbGlkYXRlQWxsV3NkbEJ1dHRvbl8uYWRkTGlzdGVuZXIoU1dULlNlbGVjdGlvbiwgdGhpcyk7Ci0gICAgdmFsaWRhdGVBbGxXc2RsQnV0dG9uXy5zZXRUb29sVGlwVGV4dChXc3RXU1VJUGx1Z2luTWVzc2FnZXMuVE9PTFRJUF9QV1NJX1JBRElPX1dTRExWQUxfQUxMKTsKLSAgICBoZWxwU3lzdGVtLnNldEhlbHAodmFsaWRhdGVBbGxXc2RsQnV0dG9uXywgSU5GT1BPUF9QV1NJX1JBRElPX1dTRExWQUxfQUxMKTsKLSAgICAKLSAgICBuZXcgTGFiZWwodmFsaWRhdGlvblNlbGVjdGlvbkdyb3VwXywgU1dULk5PTkUpOzsKLSAgICAgICAgCi0gICAgaW5pdGlhbGl6ZVZhbHVlcygpOwotICAgIG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nLmFwcGx5RGlhbG9nRm9udChzdXBlcnBhcmVudCk7ICAgIAotICAgIHJldHVybiBwYXJlbnQ7Ci0gIH0KLQotICAvKioKLSAgICogRG9lcyBhbnl0aGluZyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgZGVmYXVsdCBidXR0b24gaGFzIGJlZW4gcHJlc3NlZC4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHBlcmZvcm1EZWZhdWx0cygpCi0gIHsKLSAgICBzdXBlci5wZXJmb3JtRGVmYXVsdHMoKTsKLSAgICBpbml0aWFsaXplRGVmYXVsdHMoKTsKLSAgfQotCi0gIC8qKgotICAgKiBEbyBhbnl0aGluZyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgT0sgYnV0dG9uIGhhcyBiZWVuIHByZXNzZWQuCi0gICAqICBAcmV0dXJuIHdoZXRoZXIgaXQgaXMgb2theSB0byBjbG9zZSB0aGUgcHJlZmVyZW5jZSBwYWdlCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwZXJmb3JtT2soKQotICB7Ci0gICAgc3RvcmVWYWx1ZXMoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHBlcmZvcm1BcHBseSgpCi0gIHsKLSAgICBwZXJmb3JtT2soKTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIElXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZQotICAgKi8KLSAgcHVibGljIHZvaWQgaW5pdChJV29ya2JlbmNoIHdvcmtiZW5jaCkgICB7IH0KLQotICAvKioKLSAgICogSW5pdGlhbGl6ZXMgc3RhdGVzIG9mIHRoZSBjb250cm9scyB1c2luZyBkZWZhdWx0IHZhbHVlcwotICAgKiBpbiB0aGUgcHJlZmVyZW5jZSBzdG9yZS4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBpbml0aWFsaXplRGVmYXVsdHMoKQotICB7Ci0gICAgLy8gZm9yY2UgV1NJIGNvbXBsaWFuY2UgYnkgZGVmYXVsdAotICAgIAotICAgIHdzaV9zc2JwX1R5cGVzXy5zZWxlY3Qod3NpX3NzYnBfVHlwZXNfLmluZGV4T2YoV3N0V1NVSVBsdWdpbk1lc3NhZ2VzLldBUk5fTk9OX1dTSSkpOwotICAgIGludCBhcFNlbGVjdGlvbiA9IHdzaV9hcF9UeXBlc18uaW5kZXhPZihXc3RXU1VJUGx1Z2luTWVzc2FnZXMuV0FSTl9OT05fV1NJKTsKLSAgICB3c2lfYXBfVHlwZXNfLnNlbGVjdChhcFNlbGVjdGlvbik7Ci0gICAgc2F2ZWRTU0JQU2V0dGluZ18gPSAtMTsgIC8vIGRvIG5vdCByZXN0b3JlIHNhdmVkIFNTQlAgc2V0dGluZwotICAgIHByb2Nlc3NBUFNlbGVjdGlvbihhcFNlbGVjdGlvbik7Ci0KLSAgICBQZXJzaXN0ZW50V1NETFZhbGlkYXRpb25Db250ZXh0IHdzZGxWYWxpZGF0aW9uQ29udGV4dCA9IFdTUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0V1NETFZhbGlkYXRpb25Db250ZXh0KCk7Ci0gICAgU3RyaW5nIHZhbGlkYXRpb25TZWxlY3Rpb24gPSB3c2RsVmFsaWRhdGlvbkNvbnRleHQuZ2V0RGVmYXVsdCgpOwotICAgIHdzZGxWYWxpZGF0aW9uQ29udGV4dC51cGRhdGVXU0RMVmFsaWRhdGlvbih2YWxpZGF0aW9uU2VsZWN0aW9uKTsKLSAgICB2YWxpZGF0ZU5vV3NkbEJ1dHRvbl8uc2V0U2VsZWN0aW9uKGZhbHNlKTsKLSAgICB2YWxpZGF0ZVJlbW90ZVdzZGxCdXR0b25fLnNldFNlbGVjdGlvbihmYWxzZSk7Ci0gICAgdmFsaWRhdGVBbGxXc2RsQnV0dG9uXy5zZXRTZWxlY3Rpb24oZmFsc2UpOwotICAgIHByb2Nlc3NXU0RMVmFsaWRhdGlvblNlbGVjdGlvbih2YWxpZGF0aW9uU2VsZWN0aW9uKTsKLSAgICAKLSAgICBXU1BsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFdhaXRGb3JXU0RMVmFsaWRhdGlvbkNvbnRleHQoKS5zZXRXYWl0Rm9yV1NETFZhbGlkYXRpb24oV1NQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRXYWl0Rm9yV1NETFZhbGlkYXRpb25Db250ZXh0KCkuZ2V0RGVmYXVsdCgpKTsKLSAgICAKLSAgfQotCi0gIC8qKgotICAgKiBJbml0aWFsaXplcyBzdGF0ZXMgb2YgdGhlIGNvbnRyb2xzIGZyb20gdGhlIHByZWZlcmVuY2Ugc3RvcmUuCi0gICAqLwotICBwcml2YXRlIHZvaWQgaW5pdGlhbGl6ZVZhbHVlcygpCi0gIHsKLSAgICAKLQlTdHJpbmcgV1NJVGV4dCA9IGdldFdTSVNlbGVjdGlvbihXU1BsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFdTSVNTQlBDb250ZXh0KCkpOwotICAgIHdzaV9zc2JwX1R5cGVzXy5zZWxlY3Qod3NpX3NzYnBfVHlwZXNfLmluZGV4T2YoV1NJVGV4dCkpOwotICAgIAotICAgIGludCBhcFNlbGVjdGlvbiA9IHdzaV9hcF9UeXBlc18uaW5kZXhPZihnZXRXU0lTZWxlY3Rpb24oV1NQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRXU0lBUENvbnRleHQoKSkpOwotICAgIHdzaV9hcF9UeXBlc18uc2VsZWN0KGFwU2VsZWN0aW9uKTsKLSAgICBzYXZlZFNTQlBTZXR0aW5nXyA9IC0xOyAgLy8gZG8gbm90IHJlc3RvcmUgc2F2ZWQgU1NCUCBzZXR0aW5nCi0gICAgcHJvY2Vzc0FQU2VsZWN0aW9uKGFwU2VsZWN0aW9uKTsKLSAgICAKLSAgICBTdHJpbmcgdmFsaWRhdGlvblNlbGVjdGlvbiA9IFdTUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0V1NETFZhbGlkYXRpb25Db250ZXh0KCkuZ2V0UGVyc2lzdGVudFdTRExWYWxpZGF0aW9uKCk7Ci0gICAgcHJvY2Vzc1dTRExWYWxpZGF0aW9uU2VsZWN0aW9uKHZhbGlkYXRpb25TZWxlY3Rpb24pOwotICAgIAotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHByb2Nlc3NXU0RMVmFsaWRhdGlvblNlbGVjdGlvbihTdHJpbmcgdmFsaWRhdGlvblNlbGVjdGlvbikgewotCi0JCWlmIChQZXJzaXN0ZW50V1NETFZhbGlkYXRpb25Db250ZXh0LlZBTElEQVRFX05PX1dTREwuZXF1YWxzKHZhbGlkYXRpb25TZWxlY3Rpb24pKSB7Ci0JCQl2YWxpZGF0ZU5vV3NkbEJ1dHRvbl8uc2V0U2VsZWN0aW9uKHRydWUpOwotCQl9IGVsc2UgaWYgKFBlcnNpc3RlbnRXU0RMVmFsaWRhdGlvbkNvbnRleHQuVkFMSURBVEVfUkVNT1RFX1dTREwuZXF1YWxzKHZhbGlkYXRpb25TZWxlY3Rpb24pKSB7Ci0JCQl2YWxpZGF0ZVJlbW90ZVdzZGxCdXR0b25fLnNldFNlbGVjdGlvbih0cnVlKTsKLQkJfSBlbHNlIGlmIChQZXJzaXN0ZW50V1NETFZhbGlkYXRpb25Db250ZXh0LlZBTElEQVRFX0FMTF9XU0RMLmVxdWFscyh2YWxpZGF0aW9uU2VsZWN0aW9uKSkgewotCQkJdmFsaWRhdGVBbGxXc2RsQnV0dG9uXy5zZXRTZWxlY3Rpb24odHJ1ZSk7Ci0JCX0KLQotCX0KLQotcHJpdmF0ZSBTdHJpbmcgZ2V0V1NJU2VsZWN0aW9uKFBlcnNpc3RlbnRXU0lDb250ZXh0IGNvbnRleHQpCi0gIHsKLSAgICAKLSAgICBTdHJpbmcgV1NJdmFsdWUgPSBjb250ZXh0LmdldFBlcnNpc3RlbnRXU0lDb21wbGlhbmNlKCk7Ci0gICAgU3RyaW5nIFdTSVRleHQgPSBXc3RXU1VJUGx1Z2luTWVzc2FnZXMuV0FSTl9OT05fV1NJOwotICAgIGlmIChQZXJzaXN0ZW50V1NJQ29udGV4dC5TVE9QX05PTl9XU0kuZXF1YWxzKFdTSXZhbHVlKSkgewotCQlXU0lUZXh0ID0gV3N0V1NVSVBsdWdpbk1lc3NhZ2VzLlNUT1BfTk9OX1dTSTsKLQl9IGVsc2UgaWYgKFBlcnNpc3RlbnRXU0lDb250ZXh0LklHTk9SRV9OT05fV1NJLmVxdWFscyhXU0l2YWx1ZSkpIHsKLQkJV1NJVGV4dCA9IFdzdFdTVUlQbHVnaW5NZXNzYWdlcy5JR05PUkVfTk9OX1dTSTsKLQl9Ci0JcmV0dXJuIFdTSVRleHQ7Ci0gIH0KLSAgLyoqCi0gICAqIFN0b3JlcyB0aGUgdmFsdWVzIG9mIHRoZSBjb250cm9scyBiYWNrIHRvIHRoZSBwcmVmZXJlbmNlIHN0b3JlLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHN0b3JlVmFsdWVzKCkKLSAgewotICAJdXBkYXRlV1NJQ29udGV4dCh3c2lfc3NicF9UeXBlc18uZ2V0U2VsZWN0aW9uSW5kZXgoKSwgV1NQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRXU0lTU0JQQ29udGV4dCgpKTsKLSAgCXVwZGF0ZVdTSUNvbnRleHQod3NpX2FwX1R5cGVzXy5nZXRTZWxlY3Rpb25JbmRleCgpLCBXU1BsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFdTSUFQQ29udGV4dCgpKTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVdTSUNvbnRleHQoaW50IHNlbGVjdGlvbkluZGV4LCBQZXJzaXN0ZW50V1NJQ29udGV4dCBjb250ZXh0KQotICB7Ci0gICAgLy8gZ2V0IHRoZSBwZXJzaXN0ZW50IGNvbnRleHQgZnJvbSB0aGUgcGx1Z2luCi0gICAgCi0gICAgU3RyaW5nIHZhbHVlPW51bGw7Ci0gICAgc3dpdGNoIChzZWxlY3Rpb25JbmRleCkgewotICAgIAljYXNlIDA6Ci0gICAgCQl2YWx1ZSA9IFBlcnNpc3RlbnRXU0lDb250ZXh0LlNUT1BfTk9OX1dTSTsKLSAgICAJCWJyZWFrOwotICAgIAljYXNlIDE6Ci0gICAgCQl2YWx1ZSA9IFBlcnNpc3RlbnRXU0lDb250ZXh0LldBUk5fTk9OX1dTSTsKLSAgICAJCWJyZWFrOwotICAgIAljYXNlIDI6Ci0gICAgCQl2YWx1ZSA9IFBlcnNpc3RlbnRXU0lDb250ZXh0LklHTk9SRV9OT05fV1NJOwkJCi0gICAgCQlicmVhazsKLSAgICB9Ci0gICAgY29udGV4dC51cGRhdGVXU0lDb21wbGlhbmNlcyh2YWx1ZSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0gIHsKLSAgCQotICAJcHJvY2Vzc0FQU2VsZWN0aW9uKCB3c2lfYXBfVHlwZXNfLmdldFNlbGVjdGlvbkluZGV4KCkgKTsKLSAgCQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBwcm9jZXNzQVBTZWxlY3Rpb24oaW50IHNlbGVjdGlvbikgewotICAJaWYgKHNlbGVjdGlvbiA9PSAyKSB7IC8vIHJlc2V0IFNTQlAgdG8gZGVmYXVsdCBpZiBBUCBpcyBpZ25vcmUKLSAgCQl3c2lfc3NicF9UeXBlc18uc2V0RW5hYmxlZCh0cnVlKTsKLSAgCQlpZiAoc2F2ZWRTU0JQU2V0dGluZ18gIT0gLTEpICB7Ci0gIAkJCS8vIHJlc3RvcmUgc2F2ZWQgU1NCUCBzZXR0aW5nLCBpZiBhbnkKLSAgCQkJd3NpX3NzYnBfVHlwZXNfLnNlbGVjdChzYXZlZFNTQlBTZXR0aW5nXyk7Ci0gIAkJCXNhdmVkU1NCUFNldHRpbmdfID0gLTE7Ci0gIAkJfQotICAJfSBlbHNlIHsgLy8gc2V0IFNTQlAgdG8gZm9sbG93IEFQIHNldHRpbmcgaWYgU1RPUCBvciBXQVJOIGNob3NlbgotICAJCWlmIChzYXZlZFNTQlBTZXR0aW5nXyA9PSAtMSkgIHsgIC8vIFNTQlAgc2V0dGluZyBub3Qgc2F2ZWQKLSAgCQkJc2F2ZWRTU0JQU2V0dGluZ18gPSB3c2lfc3NicF9UeXBlc18uZ2V0U2VsZWN0aW9uSW5kZXgoKTsKLSAgCQl9Ci0gIAkJd3NpX3NzYnBfVHlwZXNfLnNlbGVjdChzZWxlY3Rpb24pOwotICAJCXdzaV9zc2JwX1R5cGVzXy5zZXRFbmFibGVkKGZhbHNlKTsKLSAgCQkKLSAgCX0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JCi0gIH0KLSAgCi0gIC8qKgotICAgKiBDYWxsZWQgd2hlbiBhbiBldmVudCBvY2N1cnMgb24gdGhlIHBhZ2UuIEhhbmRsZXMgdGhlIGV2ZW50IGFuZCByZXZhbGlkYXRlcyB0aGUgcGFnZS4KLSAgICogCi0gICAqIEBwYXJhbSBldmVudAotICAgKiAgICAgICAgICBUaGUgZXZlbnQgdGhhdCBvY2N1cmVkLgotICAgKi8KLSAgcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQgZXZlbnQpIHsKLQkgIAotCSAgU3RyaW5nIHdzZGxWYWxkYXRpb25TZWxlY3Rpb24gPSBudWxsOwotCSAgaWYgKHZhbGlkYXRlTm9Xc2RsQnV0dG9uXyA9PSBldmVudC53aWRnZXQpIHsKLQkJICB3c2RsVmFsZGF0aW9uU2VsZWN0aW9uID0gUGVyc2lzdGVudFdTRExWYWxpZGF0aW9uQ29udGV4dC5WQUxJREFURV9OT19XU0RMOwotCSAgfQotCSAgZWxzZSBpZiAodmFsaWRhdGVSZW1vdGVXc2RsQnV0dG9uXyA9PSBldmVudC53aWRnZXQpIHsKLQkJICB3c2RsVmFsZGF0aW9uU2VsZWN0aW9uID0gUGVyc2lzdGVudFdTRExWYWxpZGF0aW9uQ29udGV4dC5WQUxJREFURV9SRU1PVEVfV1NETDsKLQkgIH0KLQkgIGVsc2UgaWYgKHZhbGlkYXRlQWxsV3NkbEJ1dHRvbl8gPT0gZXZlbnQud2lkZ2V0KSB7Ci0JCSAgd3NkbFZhbGRhdGlvblNlbGVjdGlvbiA9IFBlcnNpc3RlbnRXU0RMVmFsaWRhdGlvbkNvbnRleHQuVkFMSURBVEVfQUxMX1dTREw7Ci0JICB9Ci0JICBXU1BsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFdTRExWYWxpZGF0aW9uQ29udGV4dCgpLnVwZGF0ZVdTRExWYWxpZGF0aW9uKHdzZGxWYWxkYXRpb25TZWxlY3Rpb24pOwotCSAgCi0gIH0KLQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3VpL3dzaS9wcm9wZXJ0aWVzL1dTSUNvbXBsaWFuY2VQcm9wZXJ0eVBhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvdWkvd3NpL3Byb3BlcnRpZXMvV1NJQ29tcGxpYW5jZVByb3BlcnR5UGFnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODJjMjBkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvdWkvd3NpL3Byb3BlcnRpZXMvV1NJQ29tcGxpYW5jZVByb3BlcnR5UGFnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDYwNyAgIDE0NDk3OCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS53c2kucHJvcGVydGllczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5Qcm9wZXJ0eVBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaGVscC5JV29ya2JlbmNoSGVscFN5c3RlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V1NJQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudWkuV3N0V1NVSVBsdWdpbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS5wbHVnaW4uV1NVSVBsdWdpbjsKLQotCi1wdWJsaWMgY2xhc3MgV1NJQ29tcGxpYW5jZVByb3BlcnR5UGFnZSBleHRlbmRzIFByb3BlcnR5UGFnZSBpbXBsZW1lbnRzIFNlbGVjdGlvbkxpc3RlbmVyCi17Ci0JCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFHRV9JRD0gIm9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS53c2kucHJvcGVydGllcy5XU0lDb21wbGlhbmNlUHJvcGVydHlQYWdlIjsgLy8kTk9OLU5MUy0xJAotCQotICAKLSAgLypDT05URVhUX0lEIFBXU0kwMDAxIGZvciB0aGUgV1MtSSBQcmVmZXJlbmNlIFBhZ2UqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BXU0lfUEFHRSA9IFdTVUlQbHVnaW4uSUQgKyAiLlBXU0kwMDAwIjsKLSAgLy8KLQotICBwcml2YXRlIExhYmVsIHdzaV9zc2JwX0xhYmVsXzsKLSAgcHJpdmF0ZSBDb21ibyB3c2lfc3NicF9UeXBlc187Ci0gIAotICAvKkNPTlRFWFRfSUQgUFdTSTAwMDQgZm9yIHRoZSBXUy1JIFNTQlAgdHlwZSBjb21ibyBib3ggb24gdGhlIFdTLUkgQVAgTm9uIGNvbXBsaWFuY2UgUHJlZmVyZW5jZSBQYWdlKi8KLSAgcHJpdmF0ZSBTdHJpbmcgSU5GT1BPUF9QV1NJX1NTQlBfQ09NQk9fVFlQRSA9IFdTVUlQbHVnaW4uSUQgKyAiLlBXU0kwMDA0IjsKLSAgLypDT05URVhUX0lEIFBXU0kwMDA4IGZvciB0aGUgV1MtSSBBUCB0eXBlIGNvbWJvIGJveCBvbiB0aGUgV1MtSSBBUCBOb24gY29tcGxpYW5jZSBQcmVmZXJlbmNlIFBhZ2UqLwotICBwcml2YXRlIFN0cmluZyBJTkZPUE9QX1BXU0lfQVBfQ09NQk9fVFlQRSA9IFdTVUlQbHVnaW4uSUQgKyAiLlBXU0kwMDA4IjsKLQotICBwcml2YXRlIExhYmVsIHdzaV9hcF9MYWJlbF87Ci0gIHByaXZhdGUgQ29tYm8gd3NpX2FwX1R5cGVzXzsKLSAgcHJpdmF0ZSBpbnQgc2F2ZWRTU0JQU2V0dGluZ18gPSAtMTsKLSAgCi0gLyoqCi0gICAqIENyZWF0ZXMgcHJlZmVyZW5jZSBwYWdlIGNvbnRyb2xzIG9uIGRlbWFuZC4KLSAgICogICBAcGFyYW0gcGFyZW50ICB0aGUgcGFyZW50IGZvciB0aGUgcHJlZmVyZW5jZSBwYWdlCi0gICAqLwotICBwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVDb250ZW50cyhDb21wb3NpdGUgc3VwZXJwYXJlbnQpCi0gIHsKLQkKLSAgICBJV29ya2JlbmNoSGVscFN5c3RlbSBoZWxwU3lzdGVtID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCk7Ci0gICAgCi0gICAgQ29tcG9zaXRlICAgcGFyZW50ID0gbmV3IENvbXBvc2l0ZSggc3VwZXJwYXJlbnQsIFNXVC5OT05FICk7CQotICAgIEdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBsYXlvdXQubnVtQ29sdW1ucyA9IDE7Ci0gICAgcGFyZW50LnNldExheW91dCggbGF5b3V0ICk7Ci0gICAgcGFyZW50LnNldExheW91dERhdGEoIG5ldyBHcmlkRGF0YSggR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMICkgKTsKLSAgICBwYXJlbnQuc2V0VG9vbFRpcFRleHQoV3N0V1NVSVBsdWdpbk1lc3NhZ2VzLlRPT0xUSVBfUFdTSV9QQUdFKTsKLSAgICBoZWxwU3lzdGVtLnNldEhlbHAocGFyZW50LCBJTkZPUE9QX1BXU0lfUEFHRSk7Ci0KLSAgICBHcmlkTGF5b3V0IGdsID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBnbC5udW1Db2x1bW5zID0gMjsKLSAgICBnbC5tYXJnaW5IZWlnaHQgPSAwOwotICAgIGdsLm1hcmdpbldpZHRoID0gMDsKLQotICAgIENvbXBvc2l0ZSB3c2lfQ29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZSAocGFyZW50LCBTV1QuTk9ORSk7Ci0gICAgd3NpX0NvbXBvc2l0ZS5zZXRMYXlvdXQoZ2wpOwotICAgIHdzaV9Db21wb3NpdGUuc2V0TGF5b3V0RGF0YSggbmV3IEdyaWREYXRhKCBHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwgKSApOwotICAgICAgICAKLSAgICB3c2lfYXBfTGFiZWxfID0gbmV3IExhYmVsKHdzaV9Db21wb3NpdGUsIFNXVC5OT05FKTsKLSAgICB3c2lfYXBfTGFiZWxfLnNldFRleHQoV3N0V1NVSVBsdWdpbk1lc3NhZ2VzLkxBQkVMX1dTSV9BUCk7Ci0gICAgd3NpX2FwX0xhYmVsXy5zZXRUb29sVGlwVGV4dChXc3RXU1VJUGx1Z2luTWVzc2FnZXMuVE9PTFRJUF9QV1NJX0FQX0xBQkVMKTsKLSAgICB3c2lfYXBfVHlwZXNfID0gbmV3IENvbWJvKHdzaV9Db21wb3NpdGUsIFNXVC5EUk9QX0RPV04gfCBTV1QuUkVBRF9PTkxZKTsKLSAgICB3c2lfYXBfVHlwZXNfLnNldFRvb2xUaXBUZXh0KFdzdFdTVUlQbHVnaW5NZXNzYWdlcy5UT09MVElQX1BXU0lfQVBfQ09NQk8pOwotICAgIHdzaV9hcF9UeXBlc18uc2V0TGF5b3V0RGF0YSggbmV3IEdyaWREYXRhKCBHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwgKSApOwotICAgIGhlbHBTeXN0ZW0uc2V0SGVscCh3c2lfYXBfVHlwZXNfLElORk9QT1BfUFdTSV9BUF9DT01CT19UWVBFKTsKLSAgICAKLSAgICB3c2lfYXBfVHlwZXNfLmFkZChXc3RXU1VJUGx1Z2luTWVzc2FnZXMuU1RPUF9OT05fV1NJKTsKLSAgICB3c2lfYXBfVHlwZXNfLmFkZChXc3RXU1VJUGx1Z2luTWVzc2FnZXMuV0FSTl9OT05fV1NJKTsKLSAgICB3c2lfYXBfVHlwZXNfLmFkZChXc3RXU1VJUGx1Z2luTWVzc2FnZXMuSUdOT1JFX05PTl9XU0kpOwotICAgIHdzaV9hcF9UeXBlc18uYWRkKFdzdFdTVUlQbHVnaW5NZXNzYWdlcy5GT0xMT1dfV1NJX1BSRUZFUkVOQ0UpOwotCi0gICAgd3NpX2FwX1R5cGVzXy5hZGRTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKLSAgICAKLSAgICB3c2lfc3NicF9MYWJlbF8gPSBuZXcgTGFiZWwod3NpX0NvbXBvc2l0ZSwgU1dULk5PTkUpOwotICAgIHdzaV9zc2JwX0xhYmVsXy5zZXRUZXh0KFdzdFdTVUlQbHVnaW5NZXNzYWdlcy5MQUJFTF9XU0lfU1NCUCk7Ci0gICAgd3NpX3NzYnBfTGFiZWxfLnNldFRvb2xUaXBUZXh0KFdzdFdTVUlQbHVnaW5NZXNzYWdlcy5UT09MVElQX1BXU0lfU1NCUF9MQUJFTCk7Ci0gICAgd3NpX3NzYnBfVHlwZXNfID0gbmV3IENvbWJvKHdzaV9Db21wb3NpdGUsIFNXVC5EUk9QX0RPV04gfCBTV1QuUkVBRF9PTkxZKTsKLSAgICB3c2lfc3NicF9UeXBlc18uc2V0VG9vbFRpcFRleHQoV3N0V1NVSVBsdWdpbk1lc3NhZ2VzLlRPT0xUSVBfUFdTSV9TU0JQX0NPTUJPKTsKLSAgICB3c2lfc3NicF9UeXBlc18uc2V0TGF5b3V0RGF0YSggbmV3IEdyaWREYXRhKCBHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwgKSApOwotICAgIGhlbHBTeXN0ZW0uc2V0SGVscCh3c2lfc3NicF9UeXBlc18sSU5GT1BPUF9QV1NJX1NTQlBfQ09NQk9fVFlQRSk7Ci0gICAgCi0gICAgd3NpX3NzYnBfVHlwZXNfLmFkZChXc3RXU1VJUGx1Z2luTWVzc2FnZXMuU1RPUF9OT05fV1NJKTsKLSAgICB3c2lfc3NicF9UeXBlc18uYWRkKFdzdFdTVUlQbHVnaW5NZXNzYWdlcy5XQVJOX05PTl9XU0kpOwotICAgIHdzaV9zc2JwX1R5cGVzXy5hZGQoV3N0V1NVSVBsdWdpbk1lc3NhZ2VzLklHTk9SRV9OT05fV1NJKTsKLSAgICB3c2lfc3NicF9UeXBlc18uYWRkKFdzdFdTVUlQbHVnaW5NZXNzYWdlcy5GT0xMT1dfV1NJX1BSRUZFUkVOQ0UpOwotCi0gICAgaW5pdGlhbGl6ZVZhbHVlcygpOwotICAgIG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nLmFwcGx5RGlhbG9nRm9udChzdXBlcnBhcmVudCk7ICAgIAotICAgIHJldHVybiBwYXJlbnQ7Ci0gIH0KLQotICAvKioKLSAgICogRG9lcyBhbnl0aGluZyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgZGVmYXVsdCBidXR0b24gaGFzIGJlZW4gcHJlc3NlZC4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHBlcmZvcm1EZWZhdWx0cygpCi0gIHsKLSAgICBzdXBlci5wZXJmb3JtRGVmYXVsdHMoKTsKLSAgICBpbml0aWFsaXplRGVmYXVsdHMoKTsKLSAgfQotCi0gIC8qKgotICAgKiBEbyBhbnl0aGluZyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgT0sgYnV0dG9uIGhhcyBiZWVuIHByZXNzZWQuCi0gICAqICBAcmV0dXJuIHdoZXRoZXIgaXQgaXMgb2theSB0byBjbG9zZSB0aGUgcHJlZmVyZW5jZSBwYWdlCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwZXJmb3JtT2soKQotICB7Ci0gICAgc3RvcmVWYWx1ZXMoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHBlcmZvcm1BcHBseSgpCi0gIHsKLSAgICBwZXJmb3JtT2soKTsKLSAgfQotCi0gIC8qKgotICAgKiBJbml0aWFsaXplcyBzdGF0ZXMgb2YgdGhlIGNvbnRyb2xzIHVzaW5nIGRlZmF1bHQgdmFsdWVzCi0gICAqIGluIHRoZSBwcmVmZXJlbmNlIHN0b3JlLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGluaXRpYWxpemVEZWZhdWx0cygpCi0gIHsKLSAgICB3c2lfc3NicF9UeXBlc18uc2VsZWN0KHdzaV9zc2JwX1R5cGVzXy5pbmRleE9mKFdzdFdTVUlQbHVnaW5NZXNzYWdlcy5GT0xMT1dfV1NJX1BSRUZFUkVOQ0UpKTsKLSAgICBpbnQgYXBTZWxlY3Rpb24gPSB3c2lfYXBfVHlwZXNfLmluZGV4T2YoV3N0V1NVSVBsdWdpbk1lc3NhZ2VzLkZPTExPV19XU0lfUFJFRkVSRU5DRSk7Ci0gICAgd3NpX2FwX1R5cGVzXy5zZWxlY3QoYXBTZWxlY3Rpb24pOwotICAgIHNhdmVkU1NCUFNldHRpbmdfID0gLTE7ICAvLyBkbyBub3QgcmVzdG9yZSBzYXZlZCBTU0JQIHNldHRpbmcKLSAgICBwcm9jZXNzQVBTZWxlY3Rpb24oYXBTZWxlY3Rpb24pOwotICB9Ci0KLSAgLyoqCi0gICAqIEluaXRpYWxpemVzIHN0YXRlcyBvZiB0aGUgY29udHJvbHMgZnJvbSB0aGUgcHJlZmVyZW5jZSBzdG9yZS4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBpbml0aWFsaXplVmFsdWVzKCkgewotICAJU3RyaW5nIFdTSVRleHQgPSBnZXRXU0lTZWxlY3Rpb24oV1NQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRXU0lTU0JQQ29udGV4dCgpKTsKLSAgICB3c2lfc3NicF9UeXBlc18uc2VsZWN0KHdzaV9zc2JwX1R5cGVzXy5pbmRleE9mKFdTSVRleHQpKTsKLSAgICAKLSAgICBpbnQgYXBTZWxlY3Rpb24gPSB3c2lfYXBfVHlwZXNfLmluZGV4T2YoZ2V0V1NJU2VsZWN0aW9uKFdTUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0V1NJQVBDb250ZXh0KCkpKTsKLSAgICB3c2lfYXBfVHlwZXNfLnNlbGVjdChhcFNlbGVjdGlvbik7Ci0gICAgc2F2ZWRTU0JQU2V0dGluZ18gPSAtMTsgIC8vIGRvIG5vdCByZXN0b3JlIHNhdmVkIFNTQlAgc2V0dGluZwotICAgIHByb2Nlc3NBUFNlbGVjdGlvbihhcFNlbGVjdGlvbik7Ci0JfQotCi0gIHByaXZhdGUgU3RyaW5nIGdldFdTSVNlbGVjdGlvbihQZXJzaXN0ZW50V1NJQ29udGV4dCBjb250ZXh0KQotICB7Ci0gICAgCi0gIAlJUHJvamVjdCBwcm9qZWN0ID0gKElQcm9qZWN0KSBnZXRFbGVtZW50KCk7Ci0gIAlTdHJpbmcgV1NJdmFsdWUgPSBjb250ZXh0LmdldFByb2plY3RXU0lDb21wbGlhbmNlKHByb2plY3QpOwotCVN0cmluZyBXU0lUZXh0ID0gV3N0V1NVSVBsdWdpbk1lc3NhZ2VzLkZPTExPV19XU0lfUFJFRkVSRU5DRTsKLQlpZiAoUGVyc2lzdGVudFdTSUNvbnRleHQuU1RPUF9OT05fV1NJLmVxdWFscyhXU0l2YWx1ZSkpIHsKLQkJV1NJVGV4dCA9IFdzdFdTVUlQbHVnaW5NZXNzYWdlcy5TVE9QX05PTl9XU0k7Ci0JfSBlbHNlIGlmIChQZXJzaXN0ZW50V1NJQ29udGV4dC5XQVJOX05PTl9XU0kuZXF1YWxzKFdTSXZhbHVlKSkgewotCQlXU0lUZXh0ID0gV3N0V1NVSVBsdWdpbk1lc3NhZ2VzLldBUk5fTk9OX1dTSTsKLQl9IGVsc2UgaWYgKFBlcnNpc3RlbnRXU0lDb250ZXh0LklHTk9SRV9OT05fV1NJLmVxdWFscyhXU0l2YWx1ZSkpIHsKLQkJV1NJVGV4dCA9IFdzdFdTVUlQbHVnaW5NZXNzYWdlcy5JR05PUkVfTk9OX1dTSTsKLQl9Ci0JcmV0dXJuIFdTSVRleHQ7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBTdG9yZXMgdGhlIHZhbHVlcyBvZiB0aGUgY29udHJvbHMgYmFjayB0byB0aGUgcHJlZmVyZW5jZSBzdG9yZS4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBzdG9yZVZhbHVlcygpCi0gIHsKLSAgCXVwZGF0ZVdTSUNvbnRleHQod3NpX3NzYnBfVHlwZXNfLmdldFNlbGVjdGlvbkluZGV4KCksIFdTUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0V1NJU1NCUENvbnRleHQoKSk7Ci0gIAl1cGRhdGVXU0lDb250ZXh0KHdzaV9hcF9UeXBlc18uZ2V0U2VsZWN0aW9uSW5kZXgoKSwgV1NQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRXU0lBUENvbnRleHQoKSk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCB1cGRhdGVXU0lDb250ZXh0KGludCBzZWxlY3Rpb25JbmRleCwgUGVyc2lzdGVudFdTSUNvbnRleHQgY29udGV4dCkKLSAgeyAgICAKLSAgCVN0cmluZyB2YWx1ZSA9IFBlcnNpc3RlbnRXU0lDb250ZXh0LkZPTExPV19XU0lfUFJFRkVSRU5DRTsKLSAgICBJUHJvamVjdCBwcm9qZWN0ID0gKElQcm9qZWN0KSBnZXRFbGVtZW50KCk7Ci0gICAgCi0gICAgc3dpdGNoIChzZWxlY3Rpb25JbmRleCkgewotICAgIAljYXNlIDA6Ci0gICAgCQl2YWx1ZSA9IFBlcnNpc3RlbnRXU0lDb250ZXh0LlNUT1BfTk9OX1dTSTsKLSAgICAJCWJyZWFrOwotICAgIAljYXNlIDE6Ci0gICAgCQl2YWx1ZSA9IFBlcnNpc3RlbnRXU0lDb250ZXh0LldBUk5fTk9OX1dTSTsKLSAgICAJCWJyZWFrOwotICAgIAljYXNlIDI6Ci0gICAgCQl2YWx1ZSA9IFBlcnNpc3RlbnRXU0lDb250ZXh0LklHTk9SRV9OT05fV1NJOwkJCi0gICAgCQlicmVhazsKLSAgICAJY2FzZSAzOgotICAgIAkJdmFsdWUgPSBQZXJzaXN0ZW50V1NJQ29udGV4dC5GT0xMT1dfV1NJX1BSRUZFUkVOQ0U7CQkKLSAgICAJCWJyZWFrOwotICAgIH0KLSAgICBjb250ZXh0LnVwZGF0ZVByb2plY3RXU0lDb21wbGlhbmNlcyhwcm9qZWN0LCB2YWx1ZSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0gIHsKLSAgCQotICAJcHJvY2Vzc0FQU2VsZWN0aW9uKCB3c2lfYXBfVHlwZXNfLmdldFNlbGVjdGlvbkluZGV4KCkgKTsKLSAgCQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBwcm9jZXNzQVBTZWxlY3Rpb24oaW50IHNlbGVjdGlvbikgewotICAJaWYgKHNlbGVjdGlvbiA9PSAyKSB7IC8vIHJlc2V0IFNTQlAgdG8gZGVmYXVsdCBpZiBBUCBpcyBpZ25vcmUKLSAgCQl3c2lfc3NicF9UeXBlc18uc2V0RW5hYmxlZCh0cnVlKTsKLSAgCQlpZiAoc2F2ZWRTU0JQU2V0dGluZ18gIT0gLTEpICB7Ci0gIAkJCS8vIHJlc3RvcmUgc2F2ZWQgU1NCUCBzZXR0aW5nLCBpZiBhbnkKLSAgCQkJd3NpX3NzYnBfVHlwZXNfLnNlbGVjdChzYXZlZFNTQlBTZXR0aW5nXyk7Ci0gIAkJCXNhdmVkU1NCUFNldHRpbmdfID0gLTE7Ci0gIAkJfQotICAJfSBlbHNlIGlmIChzZWxlY3Rpb24gPT0gMCB8fCBzZWxlY3Rpb24gPT0gMSkgeyAvLyBzZXQgU1NCUCB0byBmb2xsb3cgQVAgc2V0dGluZyBpZiBTVE9QIG9yIFdBUk4gY2hvc2VuCi0gIAkJaWYgKHNhdmVkU1NCUFNldHRpbmdfID09IC0xKSAgeyAgLy8gU1NCUCBzZXR0aW5nIG5vdCBzYXZlZAotICAJCQlzYXZlZFNTQlBTZXR0aW5nXyA9IHdzaV9zc2JwX1R5cGVzXy5nZXRTZWxlY3Rpb25JbmRleCgpOwotICAJCX0KLSAgCQl3c2lfc3NicF9UeXBlc18uc2VsZWN0KHNlbGVjdGlvbik7Ci0gIAkJd3NpX3NzYnBfVHlwZXNfLnNldEVuYWJsZWQoZmFsc2UpOwotICAJCQotICAJfQotICB9Ci0KLSAgcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLQkKLSAgfQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3VpL3dzcnQvSU9iamVjdFNlbGVjdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3VpL3dzcnQvSU9iamVjdFNlbGVjdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1OWU2OGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC91aS93c3J0L0lPYmplY3RTZWxlY3Rvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51aS53c3J0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS53aWRnZXRzLldpZGdldERhdGFFdmVudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSVNlbGVjdGlvbjsKLQotcHVibGljIGludGVyZmFjZSBJT2JqZWN0U2VsZWN0b3IgewotCQotCXB1YmxpYyB2b2lkIHNldEluaXRpYWxTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWwpOwotCXB1YmxpYyBJU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpOwotCXB1YmxpYyBTdHJpbmcgZ2V0UHJvamVjdCgpOwotCXB1YmxpYyBJU3RhdHVzIHZhbGlkYXRlU2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsKTsKLQlwdWJsaWMgV2lkZ2V0RGF0YUV2ZW50cyBhZGRDb250cm9scyhDb21wb3NpdGUgcGFyZW50LCBMaXN0ZW5lciBzdGF0dXNMaXN0ZW5lcik7Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLy5jbGFzc3BhdGggYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDRlODYxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMTg4ZDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotYmluCi10ZW1wLmZvbGRlcgotYnVpbGQueG1sCi13cy5qYXIKLUBkb3QKLXNyYy56aXAKLWphdmFDb21waWxlci4uLmFyZ3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLy5wcm9qZWN0IGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0OTRlMmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Qud3M8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDEyNTE2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLSNUaHUgTWF5IDMxIDEzOjEyOjUzIEVEVCAyMDA3Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZmU1NmUwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jTW9uIEphbiAzMCAxMDo0MDoxMiBFU1QgMjAwNgotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjMzhlODcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlUExVR0lOX05BTUUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC53czsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjMwMy5xdWFsaWZpZXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW4uV1NQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVQTFVHSU5fUFJPVklERVIKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5jb21tb247eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXh0O3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4dGVuc2lvbnM7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5O3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5pbXBsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS51dGlsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4O3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmltcGw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXgudXRpbDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXk7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LnV0aWw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmltcGw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS51dGlsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vbml0b3I7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnJlZ2lzdHJ5O3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnV0aWw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NmaW5kZXI7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NpbDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0O3gtaW50ZXJuYWw6PXRydWUKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAyLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMiwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53cy5wYXJzZXI7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAwLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2UuZW1mLmNvbW1vbjtidW5kbGUtdmVyc2lvbj0iWzIuMi4wLDMuMC4wKSIsCi0gamF2YXgud3NkbDtidW5kbGUtdmVyc2lvbj0iWzEuNC4wLDEuNS4wKSIsCi0gb3JnLmFwYWNoZS53c2lsNGo7YnVuZGxlLXZlcnNpb249IlsxLjAuMCwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsMy40LjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnY7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50O2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLmVtZi5lY29yZTtidW5kbGUtdmVyc2lvbj0iWzIuMi4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaTtidW5kbGUtdmVyc2lvbj0iWzIuMi4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2UueHNkO2J1bmRsZS12ZXJzaW9uPSJbMi4zLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjEwMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53c2RsO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIgotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvUlQuZ2VubW9kZWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9SVC5nZW5tb2RlbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWFhYTRmMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9SVC5nZW5tb2RlbAorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGdlbm1vZGVsOkdlbk1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiCi0gICAgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczplY29yZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIKLSAgICB4bWxuczpnZW5tb2RlbD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCIgbW9kZWxEaXJlY3Rvcnk9Ii9SZWdpc3RyeU1vZGVsMi9zcmMiCi0gICAgZWRpdERpcmVjdG9yeT0iL1JlZ2lzdHJ5TW9kZWwyLmVkaXQvc3JjIiBlZGl0b3JEaXJlY3Rvcnk9Ii9SZWdpc3RyeU1vZGVsMi5lZGl0b3Ivc3JjIgotICAgIG1vZGVsUGx1Z2luSUQ9IlJlZ2lzdHJ5TW9kZWwyIiBydW50aW1lSmFyPSJ0cnVlIiBtb2RlbE5hbWU9IlJUIiBlZGl0UGx1Z2luQ2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5wcm92aWRlci5SVEVkaXRQbHVnaW4iCi0gICAgZWRpdG9yUGx1Z2luQ2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5wcmVzZW50YXRpb24uUlRFZGl0b3JQbHVnaW4iCi0gICAgcnVudGltZUNvbXBhdGliaWxpdHk9ImZhbHNlIj4KLSAgPGZvcmVpZ25Nb2RlbD5JbmRleC54c2Q8L2ZvcmVpZ25Nb2RlbD4KLSAgPGZvcmVpZ25Nb2RlbD5SZWdpc3RyeS54c2Q8L2ZvcmVpZ25Nb2RlbD4KLSAgPGZvcmVpZ25Nb2RlbD5VRERJUmVnaXN0cnkueHNkPC9mb3JlaWduTW9kZWw+Ci0gIDxmb3JlaWduTW9kZWw+VGF4b25vbXkueHNkPC9mb3JlaWduTW9kZWw+Ci0gIDxnZW5QYWNrYWdlcyBwcmVmaXg9IlJUSW5kZXgiIGJhc2VQYWNrYWdlPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwIgotICAgICAgcmVzb3VyY2U9IlhNTCIgZWNvcmVQYWNrYWdlPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguZWNvcmUjLyI+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlIy8vRGVzY3JpcHRpb24iPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5lY29yZSMvL0Rlc2NyaXB0aW9uL3ZhbHVlIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlIy8vRGVzY3JpcHRpb24vbGFuZyIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguZWNvcmUjLy9Eb2N1bWVudFJvb3QiPgotICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlIy8vRG9jdW1lbnRSb290L21peGVkIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlIy8vRG9jdW1lbnRSb290L3hNTE5TUHJlZml4TWFwIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlIy8vRG9jdW1lbnRSb290L3hTSVNjaGVtYUxvY2F0aW9uIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlIy8vRG9jdW1lbnRSb290L2Rlc2NyaXB0aW9uIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlIy8vRG9jdW1lbnRSb290L2luZGV4Ii8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlIy8vRG9jdW1lbnRSb290L25hbWUiLz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlIy8vSW5kZXgiPgotICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguZWNvcmUjLy9JbmRleC9uYW1lIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5lY29yZSMvL0luZGV4L2Rlc2NyaXB0aW9uIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5lY29yZSMvL0luZGV4L3JlZ2lzdHJ5Ii8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5lY29yZSMvL0luZGV4L3RheG9ub215Ii8+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5lY29yZSMvL05hbWUiPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5lY29yZSMvL05hbWUvdmFsdWUiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguZWNvcmUjLy9OYW1lL2xhbmciLz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gIDwvZ2VuUGFja2FnZXM+Ci0gIDxnZW5QYWNrYWdlcyBwcmVmaXg9IlRheG9ub215IiBiYXNlUGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMCIKLSAgICAgIHJlc291cmNlPSJYTUwiIGVjb3JlUGFja2FnZT0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvIj4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8vQ2F0ZWdvcnkiPgotICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8vQ2F0ZWdvcnkvbmxuYW1lIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9DYXRlZ29yeS9jYXRlZ29yeSIvPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9DYXRlZ29yeS9jb2RlIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL0NhdGVnb3J5L25hbWUiLz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL0RvY3VtZW50Um9vdCI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8vRG9jdW1lbnRSb290L21peGVkIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL0RvY3VtZW50Um9vdC94TUxOU1ByZWZpeE1hcCIvPgotICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9Eb2N1bWVudFJvb3QveFNJU2NoZW1hTG9jYXRpb24iLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8vRG9jdW1lbnRSb290L2NhdGVnb3J5Ii8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL0RvY3VtZW50Um9vdC9uYW1lIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL0RvY3VtZW50Um9vdC90YXhvbm9teSIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8vTmFtZSI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL05hbWUvdmFsdWUiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8vTmFtZS9sYW5nIi8+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9UYXhvbm9teSI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9UYXhvbm9teS9ubG5hbWUiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL1RheG9ub215L2NhdGVnb3J5Ii8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL1RheG9ub215L2lkIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL1RheG9ub215L2xvY2F0aW9uIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL1RheG9ub215L25hbWUiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8vVGF4b25vbXkvcmVmIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL1RheG9ub215L3Rtb2RlbEtleSIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgPC9nZW5QYWNrYWdlcz4KLSAgPGdlblBhY2thZ2VzIHByZWZpeD0iUmVnaXN0cnkiIGJhc2VQYWNrYWdlPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwIgotICAgICAgcmVzb3VyY2U9IlhNTCIgZWNvcmVQYWNrYWdlPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmVjb3JlIy8iPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUjLy9EZXNjcmlwdGlvbiI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvL0Rlc2NyaXB0aW9uL3ZhbHVlIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvL0Rlc2NyaXB0aW9uL2xhbmciLz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvL0RvY3VtZW50Um9vdCI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmVjb3JlIy8vRG9jdW1lbnRSb290L21peGVkIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvL0RvY3VtZW50Um9vdC94TUxOU1ByZWZpeE1hcCIvPgotICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUjLy9Eb2N1bWVudFJvb3QveFNJU2NoZW1hTG9jYXRpb24iLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmVjb3JlIy8vRG9jdW1lbnRSb290L2Rlc2NyaXB0aW9uIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvL0RvY3VtZW50Um9vdC9uYW1lIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvL0RvY3VtZW50Um9vdC9yZWdpc3RyeSIvPgotICAgIDwvZ2VuQ2xhc3Nlcz4KLSAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmVjb3JlIy8vTmFtZSI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvL05hbWUvdmFsdWUiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmVjb3JlIy8vTmFtZS9sYW5nIi8+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUjLy9SZWdpc3RyeSI+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUjLy9SZWdpc3RyeS9uYW1lIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUjLy9SZWdpc3RyeS9kZXNjcmlwdGlvbiIvPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUjLy9SZWdpc3RyeS9pZCIvPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUjLy9SZWdpc3RyeS9sb2NhdGlvbiIvPgotICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUjLy9SZWdpc3RyeS9yZWYiLz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gIDwvZ2VuUGFja2FnZXM+Ci0gIDxnZW5QYWNrYWdlcyBwcmVmaXg9IlVERElSZWdpc3RyeSIgYmFzZVBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAiCi0gICAgICByZXNvdXJjZT0iWE1MIiBlY29yZVBhY2thZ2U9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmVjb3JlIy8iPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmVjb3JlIy8vRG9jdW1lbnRSb290Ij4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmVjb3JlIy8vRG9jdW1lbnRSb290L21peGVkIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLy9Eb2N1bWVudFJvb3QveE1MTlNQcmVmaXhNYXAiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5lY29yZSMvL0RvY3VtZW50Um9vdC94U0lTY2hlbWFMb2NhdGlvbiIvPgotICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmVjb3JlIy8vRG9jdW1lbnRSb290L3RheG9ub21pZXMiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5lY29yZSMvL0RvY3VtZW50Um9vdC91ZGRpUmVnaXN0cnkiLz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLy9UYXhvbm9taWVzIj4KLSAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLy9UYXhvbm9taWVzL3RheG9ub215Ii8+Ci0gICAgPC9nZW5DbGFzc2VzPgotICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmVjb3JlIy8vVURESVJlZ2lzdHJ5Ij4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5lY29yZSMvL1VERElSZWdpc3RyeS92ZXJzaW9uIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLy9VRERJUmVnaXN0cnkvZGlzY292ZXJ5VVJMIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLy9VRERJUmVnaXN0cnkvcHVibGljYXRpb25VUkwiLz4KLSAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5lY29yZSMvL1VERElSZWdpc3RyeS9zZWN1cmVkRGlzY292ZXJ5VVJMIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLy9VRERJUmVnaXN0cnkvc2VjdXJlZFB1YmxpY2F0aW9uVVJMIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLy9VRERJUmVnaXN0cnkvZGVmYXVsdExvZ2luIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLy9VRERJUmVnaXN0cnkvZGVmYXVsdFBhc3N3b3JkIi8+Ci0gICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmVjb3JlIy8vVURESVJlZ2lzdHJ5L3RheG9ub21pZXMiLz4KLSAgICA8L2dlbkNsYXNzZXM+Ci0gIDwvZ2VuUGFja2FnZXM+Ci08L2dlbm1vZGVsOkdlbk1vZGVsPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvUlQueHNkMmVjb3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvUlQueHNkMmVjb3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYmRhZTgwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL1JULnhzZDJlY29yZQorKysgL2Rldi9udWxsCkBAIC0xLDEyMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJBU0NJSSI/PgotPHhzZDJlY29yZTpYU0QyRWNvcmVNYXBwaW5nUm9vdCB4bWk6dmVyc2lvbj0iMi4wIgotICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNkMmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL1hTRDJFY29yZSIgaW5wdXRzPSJJbmRleC54c2QjLyBodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC54c2QjLyBUYXhvbm9teS54c2QjLyBSZWdpc3RyeS54c2QjLyBVRERJUmVnaXN0cnkueHNkIy8iCi0gICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUjLyBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguZWNvcmUjLyBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5lY29yZSMvIgotICAgIHRvcFRvQm90dG9tPSJ0cnVlIj4KLSAgPG5lc3RlZCBpbnB1dHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCMvL2Jhc2U7WFNEQXR0cmlidXRlRGVjbGFyYXRpb249MiIKLSAgICAgIG91dHB1dHM9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSMvL1hNTE5hbWVzcGFjZURvY3VtZW50Um9vdC9iYXNlIi8+Ci0gIDxuZXN0ZWQgaW5wdXRzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC54c2QjLy9pZDtYU0RBdHRyaWJ1dGVEZWNsYXJhdGlvbj0zIiBvdXRwdXRzPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UjLy9YTUxOYW1lc3BhY2VEb2N1bWVudFJvb3QvaWQiLz4KLSAgPG5lc3RlZCBpbnB1dHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCMvL2xhbmc7WFNEQXR0cmlidXRlRGVjbGFyYXRpb24iIG91dHB1dHM9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSMvL1hNTE5hbWVzcGFjZURvY3VtZW50Um9vdC9sYW5nIi8+Ci0gIDxuZXN0ZWQgaW5wdXRzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC54c2QjLy9sYW5nO1hTREF0dHJpYnV0ZURlY2xhcmF0aW9uL1hTRFNpbXBsZVR5cGVEZWZpbml0aW9uIgotICAgICAgb3V0cHV0cz0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMy9YTUxUeXBlIy8vTGFuZ3VhZ2UiLz4KLSAgPG5lc3RlZCBpbnB1dHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCMvL3NwYWNlO1hTREF0dHJpYnV0ZURlY2xhcmF0aW9uPTEiCi0gICAgICBvdXRwdXRzPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UjLy9YTUxOYW1lc3BhY2VEb2N1bWVudFJvb3Qvc3BhY2UiLz4KLSAgPG5lc3RlZCBpbnB1dHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCMvL3NwYWNlO1hTREF0dHJpYnV0ZURlY2xhcmF0aW9uPTEvWFNEU2ltcGxlVHlwZURlZmluaXRpb24iCi0gICAgICBvdXRwdXRzPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UjLy9TcGFjZVR5cGUiLz4KLSAgPG5lc3RlZCBpbnB1dHM9ImJ1bmRsZWVudHJ5Oi8vMTgzOS9jYWNoZS93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLnhzZCMvL3N0cmluZztYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbj03IgotICAgICAgb3V0cHV0cz0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMy9YTUxUeXBlIy8vU3RyaW5nIi8+Ci0gIDxuZXN0ZWQgaW5wdXRzPSJUYXhvbm9teS54c2QjLy9OYW1lO1hTRENvbXBsZXhUeXBlRGVmaW5pdGlvbj0yIiBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8vTmFtZSI+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlRheG9ub215LnhzZCMvL05hbWU7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uPTIvWFNEQXR0cmlidXRlVXNlIgotICAgICAgICBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8vTmFtZS9sYW5nIi8+Ci0gIDwvbmVzdGVkPgotICA8bmVzdGVkIGlucHV0cz0iVGF4b25vbXkueHNkIy8vQ2F0ZWdvcnk7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uPTEiIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9DYXRlZ29yeSI+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlRheG9ub215LnhzZCMvL0NhdGVnb3J5O1hTRENvbXBsZXhUeXBlRGVmaW5pdGlvbj0xL1hTRFBhcnRpY2xlL1hTRE1vZGVsR3JvdXAvWFNEUGFydGljbGUiCi0gICAgICAgIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9DYXRlZ29yeS9ubG5hbWUiLz4KLSAgICA8bmVzdGVkIGlucHV0cz0iVGF4b25vbXkueHNkIy8vQ2F0ZWdvcnk7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uPTEvWFNEUGFydGljbGUvWFNETW9kZWxHcm91cC9YU0RQYXJ0aWNsZT0xIgotICAgICAgICBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8vQ2F0ZWdvcnkvY2F0ZWdvcnkiLz4KLSAgICA8bmVzdGVkIGlucHV0cz0iVGF4b25vbXkueHNkIy8vQ2F0ZWdvcnk7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uPTEvWFNEQXR0cmlidXRlVXNlPTEiCi0gICAgICAgIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9DYXRlZ29yeS9jb2RlIi8+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlRheG9ub215LnhzZCMvL0NhdGVnb3J5O1hTRENvbXBsZXhUeXBlRGVmaW5pdGlvbj0xL1hTREF0dHJpYnV0ZVVzZSIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL0NhdGVnb3J5L25hbWUiLz4KLSAgPC9uZXN0ZWQ+Ci0gIDxuZXN0ZWQgaW5wdXRzPSJUYXhvbm9teS54c2QjLy9jYXRlZ29yeTtYU0RFbGVtZW50RGVjbGFyYXRpb249MSIgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL0RvY3VtZW50Um9vdC9jYXRlZ29yeSIvPgotICA8bmVzdGVkIGlucHV0cz0iUmVnaXN0cnkueHNkIy8vRGVzY3JpcHRpb247WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uPTIiIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUjLy9EZXNjcmlwdGlvbiI+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlJlZ2lzdHJ5LnhzZCMvL0Rlc2NyaXB0aW9uO1hTRENvbXBsZXhUeXBlRGVmaW5pdGlvbj0yL1hTREF0dHJpYnV0ZVVzZSIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvL0Rlc2NyaXB0aW9uL2xhbmciLz4KLSAgPC9uZXN0ZWQ+Ci0gIDxuZXN0ZWQgaW5wdXRzPSJSZWdpc3RyeS54c2QjLy9kZXNjcmlwdGlvbjtYU0RFbGVtZW50RGVjbGFyYXRpb249MiIgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvL0RvY3VtZW50Um9vdC9kZXNjcmlwdGlvbiIvPgotICA8bmVzdGVkIGlucHV0cz0iSW5kZXgueHNkIy8vRGVzY3JpcHRpb247WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uPTIiIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5lY29yZSMvL0Rlc2NyaXB0aW9uIj4KLSAgICA8bmVzdGVkIGlucHV0cz0iSW5kZXgueHNkIy8vRGVzY3JpcHRpb247WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uPTIvWFNEQXR0cmlidXRlVXNlIgotICAgICAgICBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguZWNvcmUjLy9EZXNjcmlwdGlvbi9sYW5nIi8+Ci0gIDwvbmVzdGVkPgotICA8bmVzdGVkIGlucHV0cz0iSW5kZXgueHNkIy8vZGVzY3JpcHRpb247WFNERWxlbWVudERlY2xhcmF0aW9uPTIiIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5lY29yZSMvL0RvY3VtZW50Um9vdC9kZXNjcmlwdGlvbiIvPgotICA8bmVzdGVkIGlucHV0cz0iSW5kZXgueHNkIy8vTmFtZTtYU0RDb21wbGV4VHlwZURlZmluaXRpb249MSIgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlIy8vTmFtZSI+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IkluZGV4LnhzZCMvL05hbWU7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uPTEvWFNEQXR0cmlidXRlVXNlIiBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguZWNvcmUjLy9OYW1lL2xhbmciLz4KLSAgPC9uZXN0ZWQ+Ci0gIDxuZXN0ZWQgaW5wdXRzPSJSZWdpc3RyeS54c2QjLy9OYW1lO1hTRENvbXBsZXhUeXBlRGVmaW5pdGlvbj0xIiBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmVjb3JlIy8vTmFtZSI+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlJlZ2lzdHJ5LnhzZCMvL05hbWU7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uPTEvWFNEQXR0cmlidXRlVXNlIgotICAgICAgICBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmVjb3JlIy8vTmFtZS9sYW5nIi8+Ci0gIDwvbmVzdGVkPgotICA8bmVzdGVkIGlucHV0cz0iYnVuZGxlZW50cnk6Ly8xODM5L2NhY2hlL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEueHNkIy8vYW55VVJJO1hTRFNpbXBsZVR5cGVEZWZpbml0aW9uPTIzIgotICAgICAgb3V0cHV0cz0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMy9YTUxUeXBlIy8vQW55VVJJIi8+Ci0gIDxuZXN0ZWQgaW5wdXRzPSJSZWdpc3RyeS54c2QjLy9SZWdpc3RyeTtYU0RDb21wbGV4VHlwZURlZmluaXRpb24iIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUjLy9SZWdpc3RyeSI+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlJlZ2lzdHJ5LnhzZCMvL1JlZ2lzdHJ5O1hTRENvbXBsZXhUeXBlRGVmaW5pdGlvbi9YU0RQYXJ0aWNsZS9YU0RNb2RlbEdyb3VwL1hTRFBhcnRpY2xlIgotICAgICAgICBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmVjb3JlIy8vUmVnaXN0cnkvbmFtZSIvPgotICAgIDxuZXN0ZWQgaW5wdXRzPSJSZWdpc3RyeS54c2QjLy9SZWdpc3RyeTtYU0RDb21wbGV4VHlwZURlZmluaXRpb24vWFNEUGFydGljbGUvWFNETW9kZWxHcm91cC9YU0RQYXJ0aWNsZT0xIgotICAgICAgICBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmVjb3JlIy8vUmVnaXN0cnkvZGVzY3JpcHRpb24iLz4KLSAgICA8bmVzdGVkIGlucHV0cz0iUmVnaXN0cnkueHNkIy8vUmVnaXN0cnk7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uL1hTREF0dHJpYnV0ZVVzZSIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvL1JlZ2lzdHJ5L2lkIi8+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlJlZ2lzdHJ5LnhzZCMvL1JlZ2lzdHJ5O1hTRENvbXBsZXhUeXBlRGVmaW5pdGlvbi9YU0RBdHRyaWJ1dGVVc2U9MiIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvL1JlZ2lzdHJ5L2xvY2F0aW9uIi8+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlJlZ2lzdHJ5LnhzZCMvL1JlZ2lzdHJ5O1hTRENvbXBsZXhUeXBlRGVmaW5pdGlvbi9YU0RBdHRyaWJ1dGVVc2U9MSIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvL1JlZ2lzdHJ5L3JlZiIvPgotICA8L25lc3RlZD4KLSAgPG5lc3RlZCBpbnB1dHM9IlRheG9ub215LnhzZCMvL1RheG9ub215O1hTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiIgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL1RheG9ub215Ij4KLSAgICA8bmVzdGVkIGlucHV0cz0iVGF4b25vbXkueHNkIy8vVGF4b25vbXk7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uL1hTRFBhcnRpY2xlL1hTRE1vZGVsR3JvdXAvWFNEUGFydGljbGUiCi0gICAgICAgIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9UYXhvbm9teS9ubG5hbWUiLz4KLSAgICA8bmVzdGVkIGlucHV0cz0iVGF4b25vbXkueHNkIy8vVGF4b25vbXk7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uL1hTRFBhcnRpY2xlL1hTRE1vZGVsR3JvdXAvWFNEUGFydGljbGU9MSIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL1RheG9ub215L2NhdGVnb3J5Ii8+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlRheG9ub215LnhzZCMvL1RheG9ub215O1hTRENvbXBsZXhUeXBlRGVmaW5pdGlvbi9YU0RBdHRyaWJ1dGVVc2UiCi0gICAgICAgIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9UYXhvbm9teS9pZCIvPgotICAgIDxuZXN0ZWQgaW5wdXRzPSJUYXhvbm9teS54c2QjLy9UYXhvbm9teTtYU0RDb21wbGV4VHlwZURlZmluaXRpb24vWFNEQXR0cmlidXRlVXNlPTIiCi0gICAgICAgIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9UYXhvbm9teS9sb2NhdGlvbiIvPgotICAgIDxuZXN0ZWQgaW5wdXRzPSJUYXhvbm9teS54c2QjLy9UYXhvbm9teTtYU0RDb21wbGV4VHlwZURlZmluaXRpb24vWFNEQXR0cmlidXRlVXNlPTMiCi0gICAgICAgIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9UYXhvbm9teS9uYW1lIi8+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlRheG9ub215LnhzZCMvL1RheG9ub215O1hTRENvbXBsZXhUeXBlRGVmaW5pdGlvbi9YU0RBdHRyaWJ1dGVVc2U9MSIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL1RheG9ub215L3JlZiIvPgotICAgIDxuZXN0ZWQgaW5wdXRzPSJUYXhvbm9teS54c2QjLy9UYXhvbm9teTtYU0RDb21wbGV4VHlwZURlZmluaXRpb24vWFNEQXR0cmlidXRlVXNlPTQiCi0gICAgICAgIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9UYXhvbm9teS90bW9kZWxLZXkiLz4KLSAgPC9uZXN0ZWQ+Ci0gIDxuZXN0ZWQgaW5wdXRzPSJJbmRleC54c2QjLy9JbmRleDtYU0RDb21wbGV4VHlwZURlZmluaXRpb24iIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5lY29yZSMvL0luZGV4Ij4KLSAgICA8bmVzdGVkIGlucHV0cz0iSW5kZXgueHNkIy8vSW5kZXg7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uL1hTRFBhcnRpY2xlL1hTRE1vZGVsR3JvdXAvWFNEUGFydGljbGUiCi0gICAgICAgIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5lY29yZSMvL0luZGV4L25hbWUiLz4KLSAgICA8bmVzdGVkIGlucHV0cz0iSW5kZXgueHNkIy8vSW5kZXg7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uL1hTRFBhcnRpY2xlL1hTRE1vZGVsR3JvdXAvWFNEUGFydGljbGU9MSIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlIy8vSW5kZXgvZGVzY3JpcHRpb24iLz4KLSAgICA8bmVzdGVkIGlucHV0cz0iSW5kZXgueHNkIy8vSW5kZXg7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uL1hTRFBhcnRpY2xlL1hTRE1vZGVsR3JvdXAvWFNEUGFydGljbGU9MiIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlIy8vSW5kZXgvcmVnaXN0cnkiLz4KLSAgICA8bmVzdGVkIGlucHV0cz0iSW5kZXgueHNkIy8vSW5kZXg7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uL1hTRFBhcnRpY2xlL1hTRE1vZGVsR3JvdXAvWFNEUGFydGljbGU9MyIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlIy8vSW5kZXgvdGF4b25vbXkiLz4KLSAgPC9uZXN0ZWQ+Ci0gIDxuZXN0ZWQgaW5wdXRzPSJJbmRleC54c2QjLy9pbmRleDtYU0RFbGVtZW50RGVjbGFyYXRpb24iIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5lY29yZSMvL0RvY3VtZW50Um9vdC9pbmRleCIvPgotICA8bmVzdGVkIGlucHV0cz0iUmVnaXN0cnkueHNkIy8vbmFtZTtYU0RFbGVtZW50RGVjbGFyYXRpb249MSIgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZSMvL0RvY3VtZW50Um9vdC9uYW1lIi8+Ci0gIDxuZXN0ZWQgaW5wdXRzPSJJbmRleC54c2QjLy9uYW1lO1hTREVsZW1lbnREZWNsYXJhdGlvbj0xIiBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguZWNvcmUjLy9Eb2N1bWVudFJvb3QvbmFtZSIvPgotICA8bmVzdGVkIGlucHV0cz0iVGF4b25vbXkueHNkIy8vbmFtZTtYU0RFbGVtZW50RGVjbGFyYXRpb249MiIgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL0RvY3VtZW50Um9vdC9uYW1lIi8+Ci0gIDxuZXN0ZWQgaW5wdXRzPSJSZWdpc3RyeS54c2QjLy9yZWdpc3RyeTtYU0RFbGVtZW50RGVjbGFyYXRpb24iIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUjLy9Eb2N1bWVudFJvb3QvcmVnaXN0cnkiLz4KLSAgPG5lc3RlZCBpbnB1dHM9IlRheG9ub215LnhzZCMvL3RheG9ub215O1hTREVsZW1lbnREZWNsYXJhdGlvbiIgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZSMvL0RvY3VtZW50Um9vdC90YXhvbm9teSIvPgotICA8bmVzdGVkIGlucHV0cz0iVURESVJlZ2lzdHJ5LnhzZCMvL1RheG9ub21pZXM7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uPTEiIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmVjb3JlIy8vVGF4b25vbWllcyI+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlVERElSZWdpc3RyeS54c2QjLy9UYXhvbm9taWVzO1hTRENvbXBsZXhUeXBlRGVmaW5pdGlvbj0xL1hTRFBhcnRpY2xlL1hTRE1vZGVsR3JvdXAvWFNEUGFydGljbGUiCi0gICAgICAgIG91dHB1dHM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmVjb3JlIy8vVGF4b25vbWllcy90YXhvbm9teSIvPgotICA8L25lc3RlZD4KLSAgPG5lc3RlZCBpbnB1dHM9IlVERElSZWdpc3RyeS54c2QjLy90YXhvbm9taWVzO1hTREVsZW1lbnREZWNsYXJhdGlvbj0xIiBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5lY29yZSMvL0RvY3VtZW50Um9vdC90YXhvbm9taWVzIi8+Ci0gIDxuZXN0ZWQgaW5wdXRzPSJVRERJUmVnaXN0cnkueHNkIy8vVURESVJlZ2lzdHJ5O1hTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiIgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLy9VRERJUmVnaXN0cnkiPgotICAgIDxuZXN0ZWQgaW5wdXRzPSJVRERJUmVnaXN0cnkueHNkIy8vVURESVJlZ2lzdHJ5O1hTRENvbXBsZXhUeXBlRGVmaW5pdGlvbi9YU0RQYXJ0aWNsZS9YU0RNb2RlbEdyb3VwL1hTRFBhcnRpY2xlIgotICAgICAgICBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5lY29yZSMvL1VERElSZWdpc3RyeS92ZXJzaW9uIi8+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlVERElSZWdpc3RyeS54c2QjLy9VRERJUmVnaXN0cnk7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uL1hTRFBhcnRpY2xlL1hTRE1vZGVsR3JvdXAvWFNEUGFydGljbGU9MSIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLy9VRERJUmVnaXN0cnkvZGlzY292ZXJ5VVJMIi8+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlVERElSZWdpc3RyeS54c2QjLy9VRERJUmVnaXN0cnk7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uL1hTRFBhcnRpY2xlL1hTRE1vZGVsR3JvdXAvWFNEUGFydGljbGU9MiIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLy9VRERJUmVnaXN0cnkvcHVibGljYXRpb25VUkwiLz4KLSAgICA8bmVzdGVkIGlucHV0cz0iVURESVJlZ2lzdHJ5LnhzZCMvL1VERElSZWdpc3RyeTtYU0RDb21wbGV4VHlwZURlZmluaXRpb24vWFNEUGFydGljbGUvWFNETW9kZWxHcm91cC9YU0RQYXJ0aWNsZT0zIgotICAgICAgICBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5lY29yZSMvL1VERElSZWdpc3RyeS9zZWN1cmVkRGlzY292ZXJ5VVJMIi8+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlVERElSZWdpc3RyeS54c2QjLy9VRERJUmVnaXN0cnk7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uL1hTRFBhcnRpY2xlL1hTRE1vZGVsR3JvdXAvWFNEUGFydGljbGU9NCIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLy9VRERJUmVnaXN0cnkvc2VjdXJlZFB1YmxpY2F0aW9uVVJMIi8+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlVERElSZWdpc3RyeS54c2QjLy9VRERJUmVnaXN0cnk7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uL1hTRFBhcnRpY2xlL1hTRE1vZGVsR3JvdXAvWFNEUGFydGljbGU9NSIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLy9VRERJUmVnaXN0cnkvZGVmYXVsdExvZ2luIi8+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlVERElSZWdpc3RyeS54c2QjLy9VRERJUmVnaXN0cnk7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uL1hTRFBhcnRpY2xlL1hTRE1vZGVsR3JvdXAvWFNEUGFydGljbGU9NiIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLy9VRERJUmVnaXN0cnkvZGVmYXVsdFBhc3N3b3JkIi8+Ci0gICAgPG5lc3RlZCBpbnB1dHM9IlVERElSZWdpc3RyeS54c2QjLy9VRERJUmVnaXN0cnk7WFNEQ29tcGxleFR5cGVEZWZpbml0aW9uL1hTRFBhcnRpY2xlL1hTRE1vZGVsR3JvdXAvWFNEUGFydGljbGU9NyIKLSAgICAgICAgb3V0cHV0cz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuZWNvcmUjLy9VRERJUmVnaXN0cnkvdGF4b25vbWllcyIvPgotICA8L25lc3RlZD4KLSAgPG5lc3RlZCBpbnB1dHM9IlVERElSZWdpc3RyeS54c2QjLy91ZGRpUmVnaXN0cnk7WFNERWxlbWVudERlY2xhcmF0aW9uIiBvdXRwdXRzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5lY29yZSMvL0RvY3VtZW50Um9vdC91ZGRpUmVnaXN0cnkiLz4KLTwveHNkMmVjb3JlOlhTRDJFY29yZU1hcHBpbmdSb290PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvYWJvdXQuaHRtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGIzNmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvYnVpbGQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3ZGE1N2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLXNvdXJjZS4uID0gc3JjLwotb3V0cHV0Li4gPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIC4sXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgam1lcmdlci8KLXNyYy5pbmNsdWRlcyA9IGNvbXBvbmVudC54bWwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL2NvbXBvbmVudC54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9jb21wb25lbnQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwY2UzNWM2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL2NvbXBvbmVudC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNvbXBvbmVudCB4bWxucz0iaHR0cDovL2VjbGlwc2Uub3JnL3d0cC9yZWxlbmcvdG9vbHMvY29tcG9uZW50LW1vZGVsIiBuYW1lPSJvcmcuZWNsaXBzZS53c3Qud3MiPgotICAgPGNvbXBvbmVudC1kZXBlbmRzIHVucmVzdHJpY3RlZD0idHJ1ZSI+Ci0gICA8L2NvbXBvbmVudC1kZXBlbmRzPgotICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2Uud3N0LndzIiBmcmFnbWVudD0iZmFsc2UiLz4KLSAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIiIGZyYWdtZW50PSJmYWxzZSIvPgotICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2Uud3N0LndzLnVpIiBmcmFnbWVudD0iZmFsc2UiLz4KLSAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLndzdC53cy5leHBsb3JlciIgZnJhZ21lbnQ9ImZhbHNlIi8+Ci0gICA8cGx1Z2luIGlkPSJvcmcuYXBhY2hlLmF4aXMiIGZyYWdtZW50PSJmYWxzZSIvPgotICAgPHBsdWdpbiBpZD0ib3JnLmFwYWNoZS53c2lsNGoiIGZyYWdtZW50PSJmYWxzZSIvPgotICAgPHBsdWdpbiBpZD0ib3JnLnVkZGk0aiIgZnJhZ21lbnQ9ImZhbHNlIi8+Ci08L2NvbXBvbmVudD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL2ptZXJnZXIvbWVyZ2UueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvam1lcmdlci9tZXJnZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxZTIxMzQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvam1lcmdlci9tZXJnZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSBNZXJnZSBydWxlcyB1c2VkIGJ5IEpNZXJnZXIgLS0+Ci08bWVyZ2U6b3B0aW9ucyAKLQl4bWxuczptZXJnZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZWNsaXBzZS9lbWYvY29kZWdlbi9qbWVyZ2UvT3B0aW9ucyI+Ci0JPG1lcmdlOnB1bGwgCi0JCXNvdXJjZUdldD0iTWV0aG9kL2dldFJldHVyblR5cGUiIAotCQl0YXJnZXRQdXQ9Ik1ldGhvZC9zZXRSZXR1cm5UeXBlIi8+Ci0JPG1lcmdlOnB1bGwgCi0JCXNvdXJjZUdldD0iTWV0aG9kL2dldEV4Y2VwdGlvbnMiIAotCQl0YXJnZXRQdXQ9Ik1ldGhvZC9hZGRFeGNlcHRpb24iLz4KLQotPCEtLSBNZXJnZSBydWxlcyB0byBoYW5kbGUgYW5ub3RhdGlvbjoKLQktIFdpdGggdGhpcyBwdWxsIHJ1bGUsIGFubm90YXRpb25zIGluIHRoZSB0YXJnZXQgaXMgcmVwbGFjZWQgYnkgYW5ub3RhdGlvbnMgb2YgdGhlIAotCXNhbWUgbmFtZSBpbiB0aGUgc291cmNlLgotCS0gV2l0aCB0aGlzIHN3ZWVwIHJ1bGUsIGFueSBhbm5vdGF0aW9uIGluIHRoZSB0YXJnZXQgdGhhdCBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSAKLSAgCXNvdXJjZSBpcyBjb21tZW50ZWQgb3V0LiAKLSAgCS0gQnkgZGVmYXVsdCwgYW55IGFubm90YXRpb24gaW4gdGhlIHNvdXJjZSB0aGF0IGlzIG5vdCBpbiB0aGUgdGFyZ2V0IGFyZSBwdWxsZWQgaW50byB0aGUgdGFyZ2V0LgotLS0+Ci0KLQk8bWVyZ2U6cHVsbCAKLSAgICAJc291cmNlR2V0PSJBbm5vdGF0aW9uL2dldENvbnRlbnRzIgotICAgIAl0YXJnZXRQdXQ9IkFubm90YXRpb24vc2V0Q29udGVudHMiLz4KLSAgIAotICAJPG1lcmdlOnN3ZWVwIHNlbGVjdD0iQW5ub3RhdGlvbiIgYWN0aW9uPSJjb21tZW50Ii8+Ci0JCQotPC9tZXJnZTpvcHRpb25zPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvbW9kZWwvSW5kZXgueHNkIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvbW9kZWwvSW5kZXgueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZGNmNTQwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL21vZGVsL0luZGV4LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYQoteG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLXhtbG5zOnJ0aT0iaHR0cDovL2VjbGlwc2Uub3JnL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleCIKLXhtbG5zOnJlZz0iaHR0cDovL2VjbGlwc2Uub3JnL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkiCi14bWxuczp0YXg9Imh0dHA6Ly9lY2xpcHNlLm9yZy93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215IgotdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZWNsaXBzZS5vcmcvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4Ij4KLQotCTx4c2Q6aW1wb3J0Ci0JbmFtZXNwYWNlPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiCi0Jc2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCIvPgotCi0JPHhzZDppbXBvcnQKLQluYW1lc3BhY2U9Imh0dHA6Ly9lY2xpcHNlLm9yZy93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5IgotCXNjaGVtYUxvY2F0aW9uPSIuL1JlZ2lzdHJ5LnhzZCIvPgotCi0JPHhzZDppbXBvcnQKLQluYW1lc3BhY2U9Imh0dHA6Ly9lY2xpcHNlLm9yZy93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215IgotCXNjaGVtYUxvY2F0aW9uPSIuL1RheG9ub215LnhzZCIvPgotCi0JPHhzZDplbGVtZW50IG5hbWU9ImluZGV4IiB0eXBlPSJydGk6SW5kZXgiLz4KLQkKLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkluZGV4Ij4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJuYW1lIiB0eXBlPSJydGk6TmFtZSIgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImRlc2NyaXB0aW9uIiB0eXBlPSJydGk6RGVzY3JpcHRpb24iIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9InJlZzpyZWdpc3RyeSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPHhzZDplbGVtZW50IHJlZj0idGF4OnRheG9ub215IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDplbGVtZW50IG5hbWU9Im5hbWUiIHR5cGU9InJ0aTpOYW1lIi8+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik5hbWUiPgotCQk8eHNkOnNpbXBsZUNvbnRlbnQ+Ci0JCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLQkJCQk8eHNkOmF0dHJpYnV0ZSByZWY9InhtbDpsYW5nIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCQk8L3hzZDpleHRlbnNpb24+Ci0JCTwveHNkOnNpbXBsZUNvbnRlbnQ+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0iZGVzY3JpcHRpb24iIHR5cGU9InJ0aTpEZXNjcmlwdGlvbiIvPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJEZXNjcmlwdGlvbiI+Ci0JCTx4c2Q6c2ltcGxlQ29udGVudD4KLQkJCTx4c2Q6ZXh0ZW5zaW9uIGJhc2U9InhzZDpzdHJpbmciPgotCQkJCTx4c2Q6YXR0cmlidXRlIHJlZj0ieG1sOmxhbmciIHVzZT0ib3B0aW9uYWwiLz4KLQkJCTwveHNkOmV4dGVuc2lvbj4KLQkJPC94c2Q6c2ltcGxlQ29udGVudD4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL21vZGVsL1JlZ2lzdHJ5LnhzZCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL21vZGVsL1JlZ2lzdHJ5LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWFlMTk2OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9tb2RlbC9SZWdpc3RyeS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEKLXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi14bWxuczpyZWc9Imh0dHA6Ly9lY2xpcHNlLm9yZy93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5IgotdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZWNsaXBzZS5vcmcvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeSI+Ci0KLQk8eHNkOmltcG9ydAotCW5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIgotCXNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC54c2QiLz4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJyZWdpc3RyeSIgdHlwZT0icmVnOlJlZ2lzdHJ5Ii8+Ci0JCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJSZWdpc3RyeSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0ibmFtZSIgdHlwZT0icmVnOk5hbWUiIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJkZXNjcmlwdGlvbiIgdHlwZT0icmVnOkRlc2NyaXB0aW9uIiBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCTwveHNkOnNlcXVlbmNlPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ieHNkOmFueVVSSSIgdXNlPSJvcHRpb25hbCIvPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJyZWYiIHR5cGU9InhzZDphbnlVUkkiIHVzZT0ib3B0aW9uYWwiLz4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ibG9jYXRpb24iIHR5cGU9InhzZDphbnlVUkkiIHVzZT0ib3B0aW9uYWwiLz4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJuYW1lIiB0eXBlPSJyZWc6TmFtZSIvPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJOYW1lIj4KLQkJPHhzZDpzaW1wbGVDb250ZW50PgotCQkJPHhzZDpleHRlbnNpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0JCQkJPHhzZDphdHRyaWJ1dGUgcmVmPSJ4bWw6bGFuZyIgdXNlPSJvcHRpb25hbCIvPgotCQkJPC94c2Q6ZXh0ZW5zaW9uPgotCQk8L3hzZDpzaW1wbGVDb250ZW50PgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDplbGVtZW50IG5hbWU9ImRlc2NyaXB0aW9uIiB0eXBlPSJyZWc6RGVzY3JpcHRpb24iLz4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iRGVzY3JpcHRpb24iPgotCQk8eHNkOnNpbXBsZUNvbnRlbnQ+Ci0JCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLQkJCQk8eHNkOmF0dHJpYnV0ZSByZWY9InhtbDpsYW5nIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCQk8L3hzZDpleHRlbnNpb24+Ci0JCTwveHNkOnNpbXBsZUNvbnRlbnQ+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9tb2RlbC9UYXhvbm9teS54c2QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9tb2RlbC9UYXhvbm9teS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiNTZhZWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvbW9kZWwvVGF4b25vbXkueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hCi14bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgoteG1sbnM6dGF4PSJodHRwOi8vZWNsaXBzZS5vcmcvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teSIKLXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2VjbGlwc2Uub3JnL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkiPgotCi0JPHhzZDppbXBvcnQKLQluYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIKLQlzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkIi8+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0idGF4b25vbXkiIHR5cGU9InRheDpUYXhvbm9teSIvPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJUYXhvbm9teSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0ibmxuYW1lIiB0eXBlPSJ0YXg6TmFtZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImNhdGVnb3J5IiB0eXBlPSJ0YXg6Q2F0ZWdvcnkiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJ4c2Q6YW55VVJJIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9InJlZiIgdHlwZT0ieHNkOmFueVVSSSIgdXNlPSJvcHRpb25hbCIvPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJsb2NhdGlvbiIgdHlwZT0ieHNkOmFueVVSSSIgdXNlPSJvcHRpb25hbCIvPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4c2Q6c3RyaW5nIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9InRtb2RlbEtleSIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJyZXF1aXJlZCIvPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDplbGVtZW50IG5hbWU9ImNhdGVnb3J5IiB0eXBlPSJ0YXg6Q2F0ZWdvcnkiLz4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iQ2F0ZWdvcnkiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9Im5sbmFtZSIgdHlwZT0idGF4Ok5hbWUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJjYXRlZ29yeSIgdHlwZT0idGF4OkNhdGVnb3J5IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCTwveHNkOnNlcXVlbmNlPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImNvZGUiIHR5cGU9InhzZDpzdHJpbmciLz4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJuYW1lIiB0eXBlPSJ0YXg6TmFtZSIvPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJOYW1lIj4KLQkJPHhzZDpzaW1wbGVDb250ZW50PgotCQkJPHhzZDpleHRlbnNpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0JCQkJPHhzZDphdHRyaWJ1dGUgcmVmPSJ4bWw6bGFuZyIgdXNlPSJvcHRpb25hbCIvPgotCQkJPC94c2Q6ZXh0ZW5zaW9uPgotCQk8L3hzZDpzaW1wbGVDb250ZW50PgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvbW9kZWwvVURESVJlZ2lzdHJ5LnhzZCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL21vZGVsL1VERElSZWdpc3RyeS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjMzYyNjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvbW9kZWwvVURESVJlZ2lzdHJ5LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYQoteG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLXhtbG5zOnVyZz0iaHR0cDovL2VjbGlwc2Uub3JnL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5IgoteG1sbnM6cmVnPSJodHRwOi8vZWNsaXBzZS5vcmcvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeSIKLXhtbG5zOnRheD0iaHR0cDovL2VjbGlwc2Uub3JnL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkiCi10YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9lY2xpcHNlLm9yZy93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeSI+Ci0KLQk8eHNkOmltcG9ydAotCW5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIgotCXNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC54c2QiLz4KLQkKLQk8eHNkOmltcG9ydAotCW5hbWVzcGFjZT0iaHR0cDovL2VjbGlwc2Uub3JnL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkiCi0Jc2NoZW1hTG9jYXRpb249Ii4vUmVnaXN0cnkueHNkIi8+Ci0KLQk8eHNkOmltcG9ydAotCW5hbWVzcGFjZT0iaHR0cDovL2VjbGlwc2Uub3JnL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkiCi0Jc2NoZW1hTG9jYXRpb249Ii4vVGF4b25vbXkueHNkIi8+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0idWRkaVJlZ2lzdHJ5IiB0eXBlPSJ1cmc6VURESVJlZ2lzdHJ5Ii8+Ci0JCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJVRERJUmVnaXN0cnkiPgotCQk8eHNkOmNvbXBsZXhDb250ZW50PgotCQkJPHhzZDpleHRlbnNpb24gYmFzZT0icmVnOlJlZ2lzdHJ5Ij4KLQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0idmVyc2lvbiIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIxIi8+Ci0JCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJkaXNjb3ZlcnlVUkwiIHR5cGU9InhzZDphbnlVUkkiIG1pbk9jY3Vycz0iMSIvPgotCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0icHVibGljYXRpb25VUkwiIHR5cGU9InhzZDphbnlVUkkiIG1pbk9jY3Vycz0iMSIvPgotCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0ic2VjdXJlZERpc2NvdmVyeVVSTCIgdHlwZT0ieHNkOmFueVVSSSIgbWluT2NjdXJzPSIxIi8+Ci0JCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJzZWN1cmVkUHVibGljYXRpb25VUkwiIHR5cGU9InhzZDphbnlVUkkiIG1pbk9jY3Vycz0iMSIvPgotCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iZGVmYXVsdExvZ2luIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjEiLz4KLQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImRlZmF1bHRQYXNzd29yZCIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIxIi8+Ci0JCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJ0YXhvbm9taWVzIiB0eXBlPSJ1cmc6VGF4b25vbWllcyIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQk8L3hzZDpleHRlbnNpb24+Ci0JCTwveHNkOmNvbXBsZXhDb250ZW50PgotCTwveHNkOmNvbXBsZXhUeXBlPgotCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJ0YXhvbm9taWVzIiB0eXBlPSJ1cmc6VGF4b25vbWllcyIvPgotCQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iVGF4b25vbWllcyI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJ0YXg6dGF4b25vbXkiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmVjb3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5lY29yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQwNDJkNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmVjb3JlCisrKyAvZGV2L251bGwKQEAgLTEsMTQxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZWNvcmU6RVBhY2thZ2UgeG1pOnZlcnNpb249IjIuMCIKLSAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0gICAgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiIG5hbWU9InJlZ2lzdHJ5IgotICAgIG5zVVJJPSJodHRwOi8vZWNsaXBzZS5vcmcvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeSIgbnNQcmVmaXg9InJlZ2lzdHJ5Ij4KLSAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IiYjeEQ7JiN4QTsgICBTZWUgaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlLmh0bWwgYW5kJiN4RDsmI3hBOyAgIGh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy14bWwgZm9yIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgbmFtZXNwYWNlLiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgIFRoaXMgc2NoZW1hIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgWE1MIG5hbWVzcGFjZSwgaW4gYSBmb3JtJiN4RDsmI3hBOyAgICBzdWl0YWJsZSBmb3IgaW1wb3J0IGJ5IG90aGVyIHNjaGVtYSBkb2N1bWVudHMuICAmI3hEOyYjeEE7JiN4RDsmI3hBOyAgICBOb3RlIHRoYXQgbG9jYWwgbmFtZXMgaW4gdGhpcyBuYW1lc3BhY2UgYXJlIGludGVuZGVkIHRvIGJlIGRlZmluZWQmI3hEOyYjeEE7ICAgIG9ubHkgYnkgdGhlIFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0gb3IgaXRzIHN1Ymdyb3Vwcy4gIFRoZSYjeEQ7JiN4QTsgICAgZm9sbG93aW5nIG5hbWVzIGFyZSBjdXJyZW50bHkgZGVmaW5lZCBpbiB0aGlzIG5hbWVzcGFjZSBhbmQgc2hvdWxkJiN4RDsmI3hBOyAgICBub3QgYmUgdXNlZCB3aXRoIGNvbmZsaWN0aW5nIHNlbWFudGljcyBieSBhbnkgV29ya2luZyBHcm91cCwmI3hEOyYjeEE7ICAgIHNwZWNpZmljYXRpb24sIG9yIGRvY3VtZW50IGluc3RhbmNlOiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgIGJhc2UgKGFzIGFuIGF0dHJpYnV0ZSBuYW1lKTogZGVub3RlcyBhbiBhdHRyaWJ1dGUgd2hvc2UgdmFsdWUmI3hEOyYjeEE7ICAgICAgICAgcHJvdmlkZXMgYSBVUkkgdG8gYmUgdXNlZCBhcyB0aGUgYmFzZSBmb3IgaW50ZXJwcmV0aW5nIGFueSYjeEQ7JiN4QTsgICAgICAgICByZWxhdGl2ZSBVUklzIGluIHRoZSBzY29wZSBvZiB0aGUgZWxlbWVudCBvbiB3aGljaCBpdCYjeEQ7JiN4QTsgICAgICAgICBhcHBlYXJzOyBpdHMgdmFsdWUgaXMgaW5oZXJpdGVkLiAgVGhpcyBuYW1lIGlzIHJlc2VydmVkJiN4RDsmI3hBOyAgICAgICAgIGJ5IHZpcnR1ZSBvZiBpdHMgZGVmaW5pdGlvbiBpbiB0aGUgWE1MIEJhc2Ugc3BlY2lmaWNhdGlvbi4mI3hEOyYjeEE7JiN4RDsmI3hBOyAgICBpZCAgIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlIHZhbHVlJiN4RDsmI3hBOyAgICAgICAgIHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBpZiBkZWNsYXJlZCB0byBiZSBvZiB0eXBlIElELiYjeEQ7JiN4QTsgICAgICAgICBUaGUgeG1sOmlkIHNwZWNpZmljYXRpb24gaXMgbm90IHlldCBhIFczQyBSZWNvbW1lbmRhdGlvbiwmI3hEOyYjeEE7ICAgICAgICAgYnV0IHRoaXMgYXR0cmlidXRlIGlzIGluY2x1ZGVkIGhlcmUgdG8gZmFjaWxpdGF0ZSBleHBlcmltZW50YXRpb24mI3hEOyYjeEE7ICAgICAgICAgd2l0aCB0aGUgbWVjaGFuaXNtcyBpdCBwcm9wb3Nlcy4gIE5vdGUgdGhhdCBpdCBpcyBfbm90XyBpbmNsdWRlZCYjeEQ7JiN4QTsgICAgICAgICBpbiB0aGUgc3BlY2lhbEF0dHJzIGF0dHJpYnV0ZSBncm91cC4mI3hEOyYjeEE7JiN4RDsmI3hBOyAgICBsYW5nIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlIHZhbHVlJiN4RDsmI3hBOyAgICAgICAgIGlzIGEgbGFuZ3VhZ2UgY29kZSBmb3IgdGhlIG5hdHVyYWwgbGFuZ3VhZ2Ugb2YgdGhlIGNvbnRlbnQgb2YmI3hEOyYjeEE7ICAgICAgICAgYW55IGVsZW1lbnQ7IGl0cyB2YWx1ZSBpcyBpbmhlcml0ZWQuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQmI3hEOyYjeEE7ICAgICAgICAgYnkgdmlydHVlIG9mIGl0cyBkZWZpbml0aW9uIGluIHRoZSBYTUwgc3BlY2lmaWNhdGlvbi4mI3hEOyYjeEE7ICAmI3hEOyYjeEE7ICAgIHNwYWNlIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlJiN4RDsmI3hBOyAgICAgICAgIHZhbHVlIGlzIGEga2V5d29yZCBpbmRpY2F0aW5nIHdoYXQgd2hpdGVzcGFjZSBwcm9jZXNzaW5nJiN4RDsmI3hBOyAgICAgICAgIGRpc2NpcGxpbmUgaXMgaW50ZW5kZWQgZm9yIHRoZSBjb250ZW50IG9mIHRoZSBlbGVtZW50OyBpdHMmI3hEOyYjeEE7ICAgICAgICAgdmFsdWUgaXMgaW5oZXJpdGVkLiAgVGhpcyBuYW1lIGlzIHJlc2VydmVkIGJ5IHZpcnR1ZSBvZiBpdHMmI3hEOyYjeEE7ICAgICAgICAgZGVmaW5pdGlvbiBpbiB0aGUgWE1MIHNwZWNpZmljYXRpb24uJiN4RDsmI3hBOyYjeEQ7JiN4QTsgICAgRmF0aGVyIChpbiBhbnkgY29udGV4dCBhdCBhbGwpOiBkZW5vdGVzIEpvbiBCb3NhaywgdGhlIGNoYWlyIG9mICYjeEQ7JiN4QTsgICAgICAgICB0aGUgb3JpZ2luYWwgWE1MIFdvcmtpbmcgR3JvdXAuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQgYnkgJiN4RDsmI3hBOyAgICAgICAgIHRoZSBmb2xsb3dpbmcgZGVjaXNpb24gb2YgdGhlIFczQyBYTUwgUGxlbmFyeSBhbmQgJiN4RDsmI3hBOyAgICAgICAgIFhNTCBDb29yZGluYXRpb24gZ3JvdXBzOiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgICAgICAgICAgIEluIGFwcHJlY2lhdGlvbiBmb3IgaGlzIHZpc2lvbiwgbGVhZGVyc2hpcCBhbmQgZGVkaWNhdGlvbiYjeEQ7JiN4QTsgICAgICAgICAgICAgdGhlIFczQyBYTUwgUGxlbmFyeSBvbiB0aGlzIDEwdGggZGF5IG9mIEZlYnJ1YXJ5LCAyMDAwJiN4RDsmI3hBOyAgICAgICAgICAgICByZXNlcnZlcyBmb3IgSm9uIEJvc2FrIGluIHBlcnBldHVpdHkgdGhlIFhNTCBuYW1lJiN4RDsmI3hBOyAgICAgICAgICAgICB4bWw6RmF0aGVyJiN4RDsmI3hBOyAgJiN4RDsmI3hBO1RoaXMgc2NoZW1hIGRlZmluZXMgYXR0cmlidXRlcyBhbmQgYW4gYXR0cmlidXRlIGdyb3VwJiN4RDsmI3hBOyAgICAgICAgc3VpdGFibGUgZm9yIHVzZSBieSYjeEQ7JiN4QTsgICAgICAgIHNjaGVtYXMgd2lzaGluZyB0byBhbGxvdyB4bWw6YmFzZSwgeG1sOmxhbmcsIHhtbDpzcGFjZSBvciB4bWw6aWQmI3hEOyYjeEE7ICAgICAgICBhdHRyaWJ1dGVzIG9uIGVsZW1lbnRzIHRoZXkgZGVmaW5lLiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgICAgICBUbyBlbmFibGUgdGhpcywgc3VjaCBhIHNjaGVtYSBtdXN0IGltcG9ydCB0aGlzIHNjaGVtYSYjeEQ7JiN4QTsgICAgICAgIGZvciB0aGUgWE1MIG5hbWVzcGFjZSwgZS5nLiBhcyBmb2xsb3dzOiYjeEQ7JiN4QTsgICAgICAgICZhbXA7bHQ7c2NoZW1hIC4gLiAuJmFtcDtndDsmI3hEOyYjeEE7ICAgICAgICAgLiAuIC4mI3hEOyYjeEE7ICAgICAgICAgJmFtcDtsdDtpbXBvcnQgbmFtZXNwYWNlPSZxdW90O2h0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSZxdW90OyYjeEQ7JiN4QTsgICAgICAgICAgICAgICAgICAgIHNjaGVtYUxvY2F0aW9uPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCZxdW90Oy8mYW1wO2d0OyYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgICAgICBTdWJzZXF1ZW50bHksIHF1YWxpZmllZCByZWZlcmVuY2UgdG8gYW55IG9mIHRoZSBhdHRyaWJ1dGVzJiN4RDsmI3hBOyAgICAgICAgb3IgdGhlIGdyb3VwIGRlZmluZWQgYmVsb3cgd2lsbCBoYXZlIHRoZSBkZXNpcmVkIGVmZmVjdCwgZS5nLiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgICAgICAmYW1wO2x0O3R5cGUgLiAuIC4mYW1wO2d0OyYjeEQ7JiN4QTsgICAgICAgICAuIC4gLiYjeEQ7JiN4QTsgICAgICAgICAmYW1wO2x0O2F0dHJpYnV0ZUdyb3VwIHJlZj0mcXVvdDt4bWw6c3BlY2lhbEF0dHJzJnF1b3Q7LyZhbXA7Z3Q7JiN4RDsmI3hBOyAmI3hEOyYjeEE7ICAgICAgICAgd2lsbCBkZWZpbmUgYSB0eXBlIHdoaWNoIHdpbGwgc2NoZW1hLXZhbGlkYXRlIGFuIGluc3RhbmNlJiN4RDsmI3hBOyAgICAgICAgIGVsZW1lbnQgd2l0aCBhbnkgb2YgdGhvc2UgYXR0cmlidXRlcyYjeEQ7JiN4QTtJbiBrZWVwaW5nIHdpdGggdGhlIFhNTCBTY2hlbWEgV0cncyBzdGFuZGFyZCB2ZXJzaW9uaW5nJiN4RDsmI3hBOyAgIHBvbGljeSwgdGhpcyBzY2hlbWEgZG9jdW1lbnQgd2lsbCBwZXJzaXN0IGF0JiN4RDsmI3hBOyAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDUvMDgveG1sLnhzZC4mI3hEOyYjeEE7ICAgQXQgdGhlIGRhdGUgb2YgaXNzdWUgaXQgY2FuIGFsc28gYmUgZm91bmQgYXQmI3hEOyYjeEE7ICAgaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkLiYjeEQ7JiN4QTsgICBUaGUgc2NoZW1hIGRvY3VtZW50IGF0IHRoYXQgVVJJIG1heSBob3dldmVyIGNoYW5nZSBpbiB0aGUgZnV0dXJlLCYjeEQ7JiN4QTsgICBpbiBvcmRlciB0byByZW1haW4gY29tcGF0aWJsZSB3aXRoIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBYTUwgU2NoZW1hJiN4RDsmI3hBOyAgIGl0c2VsZiwgb3Igd2l0aCB0aGUgWE1MIG5hbWVzcGFjZSBpdHNlbGYuICBJbiBvdGhlciB3b3JkcywgaWYgdGhlIFhNTCYjeEQ7JiN4QTsgICBTY2hlbWEgb3IgWE1MIG5hbWVzcGFjZXMgY2hhbmdlLCB0aGUgdmVyc2lvbiBvZiB0aGlzIGRvY3VtZW50IGF0JiN4RDsmI3hBOyAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCB3aWxsIGNoYW5nZSYjeEQ7JiN4QTsgICBhY2NvcmRpbmdseTsgdGhlIHZlcnNpb24gYXQmI3hEOyYjeEE7ICAgaHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC94bWwueHNkIHdpbGwgbm90IGNoYW5nZS4mI3hEOyYjeEE7ICAiLz4KLSAgPC9lQW5ub3RhdGlvbnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iRGVzY3JpcHRpb24iPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iRGVzY3JpcHRpb24iLz4KLSAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9InNpbXBsZSIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ2YWx1ZSIgdW5pcXVlPSJmYWxzZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAzL1hNTFR5cGUjLy9TdHJpbmciPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9IjowIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9InNpbXBsZSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJsYW5nIiB1bmlxdWU9ImZhbHNlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDMvWE1MVHlwZSMvL0xhbmd1YWdlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJhdHRyaWJ1dGUiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0ibGFuZyIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWVzcGFjZSIgdmFsdWU9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJEb2N1bWVudFJvb3QiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iIi8+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJtaXhlZCIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJtaXhlZCIgdW5pcXVlPSJmYWxzZSIgdXBwZXJCb3VuZD0iLTEiCi0gICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VGZWF0dXJlTWFwRW50cnkiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImVsZW1lbnRXaWxkY2FyZCIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSI6bWl4ZWQiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ieE1MTlNQcmVmaXhNYXAiIHVuaXF1ZT0iZmFsc2UiCi0gICAgICAgIHVwcGVyQm91bmQ9Ii0xIiBlVHlwZT0iZWNvcmU6RUNsYXNzIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nVG9TdHJpbmdNYXBFbnRyeSIKLSAgICAgICAgdHJhbnNpZW50PSJ0cnVlIiBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJhdHRyaWJ1dGUiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0ieG1sbnM6cHJlZml4Ii8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InhTSVNjaGVtYUxvY2F0aW9uIiB1bmlxdWU9ImZhbHNlIgotICAgICAgICB1cHBlckJvdW5kPSItMSIgZVR5cGU9ImVjb3JlOkVDbGFzcyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZ1RvU3RyaW5nTWFwRW50cnkiCi0gICAgICAgIHRyYW5zaWVudD0idHJ1ZSIgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iYXR0cmlidXRlIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9InhzaTpzY2hlbWFMb2NhdGlvbiIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJkZXNjcmlwdGlvbiIgdXBwZXJCb3VuZD0iLTIiCi0gICAgICAgIGVUeXBlPSIjLy9EZXNjcmlwdGlvbiIgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgZGVyaXZlZD0idHJ1ZSIgY29udGFpbm1lbnQ9InRydWUiCi0gICAgICAgIHJlc29sdmVQcm94aWVzPSJmYWxzZSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudCIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJkZXNjcmlwdGlvbiIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWVzcGFjZSIgdmFsdWU9IiMjdGFyZ2V0TmFtZXNwYWNlIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9Im5hbWUiIHVwcGVyQm91bmQ9Ii0yIiBlVHlwZT0iIy8vTmFtZSIKLSAgICAgICAgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgZGVyaXZlZD0idHJ1ZSIgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudCIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJuYW1lIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZXNwYWNlIiB2YWx1ZT0iIyN0YXJnZXROYW1lc3BhY2UiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0icmVnaXN0cnkiIHVwcGVyQm91bmQ9Ii0yIgotICAgICAgICBlVHlwZT0iIy8vUmVnaXN0cnkiIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGRlcml2ZWQ9InRydWUiIGNvbnRhaW5tZW50PSJ0cnVlIgotICAgICAgICByZXNvbHZlUHJveGllcz0iZmFsc2UiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImVsZW1lbnQiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0icmVnaXN0cnkiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lc3BhY2UiIHZhbHVlPSIjI3RhcmdldE5hbWVzcGFjZSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJOYW1lIj4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9Ik5hbWUiLz4KLSAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9InNpbXBsZSIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ2YWx1ZSIgdW5pcXVlPSJmYWxzZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAzL1hNTFR5cGUjLy9TdHJpbmciPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9IjowIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9InNpbXBsZSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJsYW5nIiB1bmlxdWU9ImZhbHNlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDMvWE1MVHlwZSMvL0xhbmd1YWdlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJhdHRyaWJ1dGUiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0ibGFuZyIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWVzcGFjZSIgdmFsdWU9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJSZWdpc3RyeSI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJSZWdpc3RyeSIvPgotICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudE9ubHkiLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ibmFtZSIgbG93ZXJCb3VuZD0iMSIgdXBwZXJCb3VuZD0iLTEiCi0gICAgICAgIGVUeXBlPSIjLy9OYW1lIiBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9Im5hbWUiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZGVzY3JpcHRpb24iIGxvd2VyQm91bmQ9IjEiCi0gICAgICAgIHVwcGVyQm91bmQ9Ii0xIiBlVHlwZT0iIy8vRGVzY3JpcHRpb24iIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImVsZW1lbnQiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iZGVzY3JpcHRpb24iLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaWQiIHVuaXF1ZT0iZmFsc2UiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMy9YTUxUeXBlIy8vQW55VVJJIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJhdHRyaWJ1dGUiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iaWQiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibG9jYXRpb24iIHVuaXF1ZT0iZmFsc2UiCi0gICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMy9YTUxUeXBlIy8vQW55VVJJIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJhdHRyaWJ1dGUiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0ibG9jYXRpb24iLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0icmVmIiB1bmlxdWU9ImZhbHNlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDMvWE1MVHlwZSMvL0FueVVSSSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iYXR0cmlidXRlIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9InJlZiIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICA8L2VDbGFzc2lmaWVycz4KLTwvZWNvcmU6RVBhY2thZ2U+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguZWNvcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguZWNvcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhMDk1YzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmVjb3JlCisrKyAvZGV2L251bGwKQEAgLTEsMTQwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZWNvcmU6RVBhY2thZ2UgeG1pOnZlcnNpb249IjIuMCIKLSAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0gICAgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiIG5hbWU9InJ0aW5kZXgiCi0gICAgbnNVUkk9Imh0dHA6Ly9lY2xpcHNlLm9yZy93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgiIG5zUHJlZml4PSJydGluZGV4Ij4KLSAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IiYjeEQ7JiN4QTsgICBTZWUgaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlLmh0bWwgYW5kJiN4RDsmI3hBOyAgIGh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy14bWwgZm9yIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgbmFtZXNwYWNlLiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgIFRoaXMgc2NoZW1hIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgWE1MIG5hbWVzcGFjZSwgaW4gYSBmb3JtJiN4RDsmI3hBOyAgICBzdWl0YWJsZSBmb3IgaW1wb3J0IGJ5IG90aGVyIHNjaGVtYSBkb2N1bWVudHMuICAmI3hEOyYjeEE7JiN4RDsmI3hBOyAgICBOb3RlIHRoYXQgbG9jYWwgbmFtZXMgaW4gdGhpcyBuYW1lc3BhY2UgYXJlIGludGVuZGVkIHRvIGJlIGRlZmluZWQmI3hEOyYjeEE7ICAgIG9ubHkgYnkgdGhlIFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0gb3IgaXRzIHN1Ymdyb3Vwcy4gIFRoZSYjeEQ7JiN4QTsgICAgZm9sbG93aW5nIG5hbWVzIGFyZSBjdXJyZW50bHkgZGVmaW5lZCBpbiB0aGlzIG5hbWVzcGFjZSBhbmQgc2hvdWxkJiN4RDsmI3hBOyAgICBub3QgYmUgdXNlZCB3aXRoIGNvbmZsaWN0aW5nIHNlbWFudGljcyBieSBhbnkgV29ya2luZyBHcm91cCwmI3hEOyYjeEE7ICAgIHNwZWNpZmljYXRpb24sIG9yIGRvY3VtZW50IGluc3RhbmNlOiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgIGJhc2UgKGFzIGFuIGF0dHJpYnV0ZSBuYW1lKTogZGVub3RlcyBhbiBhdHRyaWJ1dGUgd2hvc2UgdmFsdWUmI3hEOyYjeEE7ICAgICAgICAgcHJvdmlkZXMgYSBVUkkgdG8gYmUgdXNlZCBhcyB0aGUgYmFzZSBmb3IgaW50ZXJwcmV0aW5nIGFueSYjeEQ7JiN4QTsgICAgICAgICByZWxhdGl2ZSBVUklzIGluIHRoZSBzY29wZSBvZiB0aGUgZWxlbWVudCBvbiB3aGljaCBpdCYjeEQ7JiN4QTsgICAgICAgICBhcHBlYXJzOyBpdHMgdmFsdWUgaXMgaW5oZXJpdGVkLiAgVGhpcyBuYW1lIGlzIHJlc2VydmVkJiN4RDsmI3hBOyAgICAgICAgIGJ5IHZpcnR1ZSBvZiBpdHMgZGVmaW5pdGlvbiBpbiB0aGUgWE1MIEJhc2Ugc3BlY2lmaWNhdGlvbi4mI3hEOyYjeEE7JiN4RDsmI3hBOyAgICBpZCAgIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlIHZhbHVlJiN4RDsmI3hBOyAgICAgICAgIHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBpZiBkZWNsYXJlZCB0byBiZSBvZiB0eXBlIElELiYjeEQ7JiN4QTsgICAgICAgICBUaGUgeG1sOmlkIHNwZWNpZmljYXRpb24gaXMgbm90IHlldCBhIFczQyBSZWNvbW1lbmRhdGlvbiwmI3hEOyYjeEE7ICAgICAgICAgYnV0IHRoaXMgYXR0cmlidXRlIGlzIGluY2x1ZGVkIGhlcmUgdG8gZmFjaWxpdGF0ZSBleHBlcmltZW50YXRpb24mI3hEOyYjeEE7ICAgICAgICAgd2l0aCB0aGUgbWVjaGFuaXNtcyBpdCBwcm9wb3Nlcy4gIE5vdGUgdGhhdCBpdCBpcyBfbm90XyBpbmNsdWRlZCYjeEQ7JiN4QTsgICAgICAgICBpbiB0aGUgc3BlY2lhbEF0dHJzIGF0dHJpYnV0ZSBncm91cC4mI3hEOyYjeEE7JiN4RDsmI3hBOyAgICBsYW5nIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlIHZhbHVlJiN4RDsmI3hBOyAgICAgICAgIGlzIGEgbGFuZ3VhZ2UgY29kZSBmb3IgdGhlIG5hdHVyYWwgbGFuZ3VhZ2Ugb2YgdGhlIGNvbnRlbnQgb2YmI3hEOyYjeEE7ICAgICAgICAgYW55IGVsZW1lbnQ7IGl0cyB2YWx1ZSBpcyBpbmhlcml0ZWQuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQmI3hEOyYjeEE7ICAgICAgICAgYnkgdmlydHVlIG9mIGl0cyBkZWZpbml0aW9uIGluIHRoZSBYTUwgc3BlY2lmaWNhdGlvbi4mI3hEOyYjeEE7ICAmI3hEOyYjeEE7ICAgIHNwYWNlIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlJiN4RDsmI3hBOyAgICAgICAgIHZhbHVlIGlzIGEga2V5d29yZCBpbmRpY2F0aW5nIHdoYXQgd2hpdGVzcGFjZSBwcm9jZXNzaW5nJiN4RDsmI3hBOyAgICAgICAgIGRpc2NpcGxpbmUgaXMgaW50ZW5kZWQgZm9yIHRoZSBjb250ZW50IG9mIHRoZSBlbGVtZW50OyBpdHMmI3hEOyYjeEE7ICAgICAgICAgdmFsdWUgaXMgaW5oZXJpdGVkLiAgVGhpcyBuYW1lIGlzIHJlc2VydmVkIGJ5IHZpcnR1ZSBvZiBpdHMmI3hEOyYjeEE7ICAgICAgICAgZGVmaW5pdGlvbiBpbiB0aGUgWE1MIHNwZWNpZmljYXRpb24uJiN4RDsmI3hBOyYjeEQ7JiN4QTsgICAgRmF0aGVyIChpbiBhbnkgY29udGV4dCBhdCBhbGwpOiBkZW5vdGVzIEpvbiBCb3NhaywgdGhlIGNoYWlyIG9mICYjeEQ7JiN4QTsgICAgICAgICB0aGUgb3JpZ2luYWwgWE1MIFdvcmtpbmcgR3JvdXAuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQgYnkgJiN4RDsmI3hBOyAgICAgICAgIHRoZSBmb2xsb3dpbmcgZGVjaXNpb24gb2YgdGhlIFczQyBYTUwgUGxlbmFyeSBhbmQgJiN4RDsmI3hBOyAgICAgICAgIFhNTCBDb29yZGluYXRpb24gZ3JvdXBzOiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgICAgICAgICAgIEluIGFwcHJlY2lhdGlvbiBmb3IgaGlzIHZpc2lvbiwgbGVhZGVyc2hpcCBhbmQgZGVkaWNhdGlvbiYjeEQ7JiN4QTsgICAgICAgICAgICAgdGhlIFczQyBYTUwgUGxlbmFyeSBvbiB0aGlzIDEwdGggZGF5IG9mIEZlYnJ1YXJ5LCAyMDAwJiN4RDsmI3hBOyAgICAgICAgICAgICByZXNlcnZlcyBmb3IgSm9uIEJvc2FrIGluIHBlcnBldHVpdHkgdGhlIFhNTCBuYW1lJiN4RDsmI3hBOyAgICAgICAgICAgICB4bWw6RmF0aGVyJiN4RDsmI3hBOyAgJiN4RDsmI3hBO1RoaXMgc2NoZW1hIGRlZmluZXMgYXR0cmlidXRlcyBhbmQgYW4gYXR0cmlidXRlIGdyb3VwJiN4RDsmI3hBOyAgICAgICAgc3VpdGFibGUgZm9yIHVzZSBieSYjeEQ7JiN4QTsgICAgICAgIHNjaGVtYXMgd2lzaGluZyB0byBhbGxvdyB4bWw6YmFzZSwgeG1sOmxhbmcsIHhtbDpzcGFjZSBvciB4bWw6aWQmI3hEOyYjeEE7ICAgICAgICBhdHRyaWJ1dGVzIG9uIGVsZW1lbnRzIHRoZXkgZGVmaW5lLiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgICAgICBUbyBlbmFibGUgdGhpcywgc3VjaCBhIHNjaGVtYSBtdXN0IGltcG9ydCB0aGlzIHNjaGVtYSYjeEQ7JiN4QTsgICAgICAgIGZvciB0aGUgWE1MIG5hbWVzcGFjZSwgZS5nLiBhcyBmb2xsb3dzOiYjeEQ7JiN4QTsgICAgICAgICZhbXA7bHQ7c2NoZW1hIC4gLiAuJmFtcDtndDsmI3hEOyYjeEE7ICAgICAgICAgLiAuIC4mI3hEOyYjeEE7ICAgICAgICAgJmFtcDtsdDtpbXBvcnQgbmFtZXNwYWNlPSZxdW90O2h0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSZxdW90OyYjeEQ7JiN4QTsgICAgICAgICAgICAgICAgICAgIHNjaGVtYUxvY2F0aW9uPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCZxdW90Oy8mYW1wO2d0OyYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgICAgICBTdWJzZXF1ZW50bHksIHF1YWxpZmllZCByZWZlcmVuY2UgdG8gYW55IG9mIHRoZSBhdHRyaWJ1dGVzJiN4RDsmI3hBOyAgICAgICAgb3IgdGhlIGdyb3VwIGRlZmluZWQgYmVsb3cgd2lsbCBoYXZlIHRoZSBkZXNpcmVkIGVmZmVjdCwgZS5nLiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgICAgICAmYW1wO2x0O3R5cGUgLiAuIC4mYW1wO2d0OyYjeEQ7JiN4QTsgICAgICAgICAuIC4gLiYjeEQ7JiN4QTsgICAgICAgICAmYW1wO2x0O2F0dHJpYnV0ZUdyb3VwIHJlZj0mcXVvdDt4bWw6c3BlY2lhbEF0dHJzJnF1b3Q7LyZhbXA7Z3Q7JiN4RDsmI3hBOyAmI3hEOyYjeEE7ICAgICAgICAgd2lsbCBkZWZpbmUgYSB0eXBlIHdoaWNoIHdpbGwgc2NoZW1hLXZhbGlkYXRlIGFuIGluc3RhbmNlJiN4RDsmI3hBOyAgICAgICAgIGVsZW1lbnQgd2l0aCBhbnkgb2YgdGhvc2UgYXR0cmlidXRlcyYjeEQ7JiN4QTtJbiBrZWVwaW5nIHdpdGggdGhlIFhNTCBTY2hlbWEgV0cncyBzdGFuZGFyZCB2ZXJzaW9uaW5nJiN4RDsmI3hBOyAgIHBvbGljeSwgdGhpcyBzY2hlbWEgZG9jdW1lbnQgd2lsbCBwZXJzaXN0IGF0JiN4RDsmI3hBOyAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDUvMDgveG1sLnhzZC4mI3hEOyYjeEE7ICAgQXQgdGhlIGRhdGUgb2YgaXNzdWUgaXQgY2FuIGFsc28gYmUgZm91bmQgYXQmI3hEOyYjeEE7ICAgaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkLiYjeEQ7JiN4QTsgICBUaGUgc2NoZW1hIGRvY3VtZW50IGF0IHRoYXQgVVJJIG1heSBob3dldmVyIGNoYW5nZSBpbiB0aGUgZnV0dXJlLCYjeEQ7JiN4QTsgICBpbiBvcmRlciB0byByZW1haW4gY29tcGF0aWJsZSB3aXRoIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBYTUwgU2NoZW1hJiN4RDsmI3hBOyAgIGl0c2VsZiwgb3Igd2l0aCB0aGUgWE1MIG5hbWVzcGFjZSBpdHNlbGYuICBJbiBvdGhlciB3b3JkcywgaWYgdGhlIFhNTCYjeEQ7JiN4QTsgICBTY2hlbWEgb3IgWE1MIG5hbWVzcGFjZXMgY2hhbmdlLCB0aGUgdmVyc2lvbiBvZiB0aGlzIGRvY3VtZW50IGF0JiN4RDsmI3hBOyAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCB3aWxsIGNoYW5nZSYjeEQ7JiN4QTsgICBhY2NvcmRpbmdseTsgdGhlIHZlcnNpb24gYXQmI3hEOyYjeEE7ICAgaHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC94bWwueHNkIHdpbGwgbm90IGNoYW5nZS4mI3hEOyYjeEE7ICAiLz4KLSAgPC9lQW5ub3RhdGlvbnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iRGVzY3JpcHRpb24iPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iRGVzY3JpcHRpb24iLz4KLSAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9InNpbXBsZSIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ2YWx1ZSIgdW5pcXVlPSJmYWxzZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAzL1hNTFR5cGUjLy9TdHJpbmciPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9IjowIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9InNpbXBsZSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJsYW5nIiB1bmlxdWU9ImZhbHNlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDMvWE1MVHlwZSMvL0xhbmd1YWdlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJhdHRyaWJ1dGUiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0ibGFuZyIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWVzcGFjZSIgdmFsdWU9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJEb2N1bWVudFJvb3QiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iIi8+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJtaXhlZCIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJtaXhlZCIgdW5pcXVlPSJmYWxzZSIgdXBwZXJCb3VuZD0iLTEiCi0gICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VGZWF0dXJlTWFwRW50cnkiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImVsZW1lbnRXaWxkY2FyZCIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSI6bWl4ZWQiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ieE1MTlNQcmVmaXhNYXAiIHVuaXF1ZT0iZmFsc2UiCi0gICAgICAgIHVwcGVyQm91bmQ9Ii0xIiBlVHlwZT0iZWNvcmU6RUNsYXNzIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nVG9TdHJpbmdNYXBFbnRyeSIKLSAgICAgICAgdHJhbnNpZW50PSJ0cnVlIiBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJhdHRyaWJ1dGUiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0ieG1sbnM6cHJlZml4Ii8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InhTSVNjaGVtYUxvY2F0aW9uIiB1bmlxdWU9ImZhbHNlIgotICAgICAgICB1cHBlckJvdW5kPSItMSIgZVR5cGU9ImVjb3JlOkVDbGFzcyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZ1RvU3RyaW5nTWFwRW50cnkiCi0gICAgICAgIHRyYW5zaWVudD0idHJ1ZSIgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iYXR0cmlidXRlIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9InhzaTpzY2hlbWFMb2NhdGlvbiIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJkZXNjcmlwdGlvbiIgdXBwZXJCb3VuZD0iLTIiCi0gICAgICAgIGVUeXBlPSIjLy9EZXNjcmlwdGlvbiIgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgZGVyaXZlZD0idHJ1ZSIgY29udGFpbm1lbnQ9InRydWUiCi0gICAgICAgIHJlc29sdmVQcm94aWVzPSJmYWxzZSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudCIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJkZXNjcmlwdGlvbiIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWVzcGFjZSIgdmFsdWU9IiMjdGFyZ2V0TmFtZXNwYWNlIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImluZGV4IiB1cHBlckJvdW5kPSItMiIKLSAgICAgICAgZVR5cGU9IiMvL0luZGV4IiB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIiBjb250YWlubWVudD0idHJ1ZSIKLSAgICAgICAgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9ImluZGV4Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZXNwYWNlIiB2YWx1ZT0iIyN0YXJnZXROYW1lc3BhY2UiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ibmFtZSIgdXBwZXJCb3VuZD0iLTIiIGVUeXBlPSIjLy9OYW1lIgotICAgICAgICB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIiBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9Im5hbWUiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lc3BhY2UiIHZhbHVlPSIjI3RhcmdldE5hbWVzcGFjZSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJbmRleCI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJJbmRleCIvPgotICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudE9ubHkiLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ibmFtZSIgbG93ZXJCb3VuZD0iMSIgdXBwZXJCb3VuZD0iLTEiCi0gICAgICAgIGVUeXBlPSIjLy9OYW1lIiBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9Im5hbWUiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZGVzY3JpcHRpb24iIGxvd2VyQm91bmQ9IjEiCi0gICAgICAgIHVwcGVyQm91bmQ9Ii0xIiBlVHlwZT0iIy8vRGVzY3JpcHRpb24iIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImVsZW1lbnQiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iZGVzY3JpcHRpb24iLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0icmVnaXN0cnkiIHVwcGVyQm91bmQ9Ii0xIgotICAgICAgICBlVHlwZT0iZWNvcmU6RUNsYXNzIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUjLy9SZWdpc3RyeSIKLSAgICAgICAgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudCIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJyZWdpc3RyeSIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWVzcGFjZSIgdmFsdWU9Imh0dHA6Ly9lY2xpcHNlLm9yZy93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5Ii8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InRheG9ub215IiB1cHBlckJvdW5kPSItMSIKLSAgICAgICAgZVR5cGU9ImVjb3JlOkVDbGFzcyBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIy8vVGF4b25vbXkiCi0gICAgICAgIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImVsZW1lbnQiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0idGF4b25vbXkiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lc3BhY2UiIHZhbHVlPSJodHRwOi8vZWNsaXBzZS5vcmcvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICA8L2VDbGFzc2lmaWVycz4KLSAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJOYW1lIj4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9Ik5hbWUiLz4KLSAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9InNpbXBsZSIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ2YWx1ZSIgdW5pcXVlPSJmYWxzZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAzL1hNTFR5cGUjLy9TdHJpbmciPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9IjowIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9InNpbXBsZSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJsYW5nIiB1bmlxdWU9ImZhbHNlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDMvWE1MVHlwZSMvL0xhbmd1YWdlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJhdHRyaWJ1dGUiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0ibGFuZyIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWVzcGFjZSIgdmFsdWU9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICA8L2VDbGFzc2lmaWVycz4KLTwvZWNvcmU6RVBhY2thZ2U+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5lY29yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDE4ODliMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmVjb3JlCisrKyAvZGV2L251bGwKQEAgLTEsMTY3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZWNvcmU6RVBhY2thZ2UgeG1pOnZlcnNpb249IjIuMCIKLSAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0gICAgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiIG5hbWU9InRheG9ub215IgotICAgIG5zVVJJPSJodHRwOi8vZWNsaXBzZS5vcmcvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teSIgbnNQcmVmaXg9InRheG9ub215Ij4KLSAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IiYjeEQ7JiN4QTsgICBTZWUgaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlLmh0bWwgYW5kJiN4RDsmI3hBOyAgIGh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy14bWwgZm9yIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgbmFtZXNwYWNlLiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgIFRoaXMgc2NoZW1hIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgWE1MIG5hbWVzcGFjZSwgaW4gYSBmb3JtJiN4RDsmI3hBOyAgICBzdWl0YWJsZSBmb3IgaW1wb3J0IGJ5IG90aGVyIHNjaGVtYSBkb2N1bWVudHMuICAmI3hEOyYjeEE7JiN4RDsmI3hBOyAgICBOb3RlIHRoYXQgbG9jYWwgbmFtZXMgaW4gdGhpcyBuYW1lc3BhY2UgYXJlIGludGVuZGVkIHRvIGJlIGRlZmluZWQmI3hEOyYjeEE7ICAgIG9ubHkgYnkgdGhlIFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0gb3IgaXRzIHN1Ymdyb3Vwcy4gIFRoZSYjeEQ7JiN4QTsgICAgZm9sbG93aW5nIG5hbWVzIGFyZSBjdXJyZW50bHkgZGVmaW5lZCBpbiB0aGlzIG5hbWVzcGFjZSBhbmQgc2hvdWxkJiN4RDsmI3hBOyAgICBub3QgYmUgdXNlZCB3aXRoIGNvbmZsaWN0aW5nIHNlbWFudGljcyBieSBhbnkgV29ya2luZyBHcm91cCwmI3hEOyYjeEE7ICAgIHNwZWNpZmljYXRpb24sIG9yIGRvY3VtZW50IGluc3RhbmNlOiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgIGJhc2UgKGFzIGFuIGF0dHJpYnV0ZSBuYW1lKTogZGVub3RlcyBhbiBhdHRyaWJ1dGUgd2hvc2UgdmFsdWUmI3hEOyYjeEE7ICAgICAgICAgcHJvdmlkZXMgYSBVUkkgdG8gYmUgdXNlZCBhcyB0aGUgYmFzZSBmb3IgaW50ZXJwcmV0aW5nIGFueSYjeEQ7JiN4QTsgICAgICAgICByZWxhdGl2ZSBVUklzIGluIHRoZSBzY29wZSBvZiB0aGUgZWxlbWVudCBvbiB3aGljaCBpdCYjeEQ7JiN4QTsgICAgICAgICBhcHBlYXJzOyBpdHMgdmFsdWUgaXMgaW5oZXJpdGVkLiAgVGhpcyBuYW1lIGlzIHJlc2VydmVkJiN4RDsmI3hBOyAgICAgICAgIGJ5IHZpcnR1ZSBvZiBpdHMgZGVmaW5pdGlvbiBpbiB0aGUgWE1MIEJhc2Ugc3BlY2lmaWNhdGlvbi4mI3hEOyYjeEE7JiN4RDsmI3hBOyAgICBpZCAgIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlIHZhbHVlJiN4RDsmI3hBOyAgICAgICAgIHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBpZiBkZWNsYXJlZCB0byBiZSBvZiB0eXBlIElELiYjeEQ7JiN4QTsgICAgICAgICBUaGUgeG1sOmlkIHNwZWNpZmljYXRpb24gaXMgbm90IHlldCBhIFczQyBSZWNvbW1lbmRhdGlvbiwmI3hEOyYjeEE7ICAgICAgICAgYnV0IHRoaXMgYXR0cmlidXRlIGlzIGluY2x1ZGVkIGhlcmUgdG8gZmFjaWxpdGF0ZSBleHBlcmltZW50YXRpb24mI3hEOyYjeEE7ICAgICAgICAgd2l0aCB0aGUgbWVjaGFuaXNtcyBpdCBwcm9wb3Nlcy4gIE5vdGUgdGhhdCBpdCBpcyBfbm90XyBpbmNsdWRlZCYjeEQ7JiN4QTsgICAgICAgICBpbiB0aGUgc3BlY2lhbEF0dHJzIGF0dHJpYnV0ZSBncm91cC4mI3hEOyYjeEE7JiN4RDsmI3hBOyAgICBsYW5nIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlIHZhbHVlJiN4RDsmI3hBOyAgICAgICAgIGlzIGEgbGFuZ3VhZ2UgY29kZSBmb3IgdGhlIG5hdHVyYWwgbGFuZ3VhZ2Ugb2YgdGhlIGNvbnRlbnQgb2YmI3hEOyYjeEE7ICAgICAgICAgYW55IGVsZW1lbnQ7IGl0cyB2YWx1ZSBpcyBpbmhlcml0ZWQuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQmI3hEOyYjeEE7ICAgICAgICAgYnkgdmlydHVlIG9mIGl0cyBkZWZpbml0aW9uIGluIHRoZSBYTUwgc3BlY2lmaWNhdGlvbi4mI3hEOyYjeEE7ICAmI3hEOyYjeEE7ICAgIHNwYWNlIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlJiN4RDsmI3hBOyAgICAgICAgIHZhbHVlIGlzIGEga2V5d29yZCBpbmRpY2F0aW5nIHdoYXQgd2hpdGVzcGFjZSBwcm9jZXNzaW5nJiN4RDsmI3hBOyAgICAgICAgIGRpc2NpcGxpbmUgaXMgaW50ZW5kZWQgZm9yIHRoZSBjb250ZW50IG9mIHRoZSBlbGVtZW50OyBpdHMmI3hEOyYjeEE7ICAgICAgICAgdmFsdWUgaXMgaW5oZXJpdGVkLiAgVGhpcyBuYW1lIGlzIHJlc2VydmVkIGJ5IHZpcnR1ZSBvZiBpdHMmI3hEOyYjeEE7ICAgICAgICAgZGVmaW5pdGlvbiBpbiB0aGUgWE1MIHNwZWNpZmljYXRpb24uJiN4RDsmI3hBOyYjeEQ7JiN4QTsgICAgRmF0aGVyIChpbiBhbnkgY29udGV4dCBhdCBhbGwpOiBkZW5vdGVzIEpvbiBCb3NhaywgdGhlIGNoYWlyIG9mICYjeEQ7JiN4QTsgICAgICAgICB0aGUgb3JpZ2luYWwgWE1MIFdvcmtpbmcgR3JvdXAuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQgYnkgJiN4RDsmI3hBOyAgICAgICAgIHRoZSBmb2xsb3dpbmcgZGVjaXNpb24gb2YgdGhlIFczQyBYTUwgUGxlbmFyeSBhbmQgJiN4RDsmI3hBOyAgICAgICAgIFhNTCBDb29yZGluYXRpb24gZ3JvdXBzOiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgICAgICAgICAgIEluIGFwcHJlY2lhdGlvbiBmb3IgaGlzIHZpc2lvbiwgbGVhZGVyc2hpcCBhbmQgZGVkaWNhdGlvbiYjeEQ7JiN4QTsgICAgICAgICAgICAgdGhlIFczQyBYTUwgUGxlbmFyeSBvbiB0aGlzIDEwdGggZGF5IG9mIEZlYnJ1YXJ5LCAyMDAwJiN4RDsmI3hBOyAgICAgICAgICAgICByZXNlcnZlcyBmb3IgSm9uIEJvc2FrIGluIHBlcnBldHVpdHkgdGhlIFhNTCBuYW1lJiN4RDsmI3hBOyAgICAgICAgICAgICB4bWw6RmF0aGVyJiN4RDsmI3hBOyAgJiN4RDsmI3hBO1RoaXMgc2NoZW1hIGRlZmluZXMgYXR0cmlidXRlcyBhbmQgYW4gYXR0cmlidXRlIGdyb3VwJiN4RDsmI3hBOyAgICAgICAgc3VpdGFibGUgZm9yIHVzZSBieSYjeEQ7JiN4QTsgICAgICAgIHNjaGVtYXMgd2lzaGluZyB0byBhbGxvdyB4bWw6YmFzZSwgeG1sOmxhbmcsIHhtbDpzcGFjZSBvciB4bWw6aWQmI3hEOyYjeEE7ICAgICAgICBhdHRyaWJ1dGVzIG9uIGVsZW1lbnRzIHRoZXkgZGVmaW5lLiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgICAgICBUbyBlbmFibGUgdGhpcywgc3VjaCBhIHNjaGVtYSBtdXN0IGltcG9ydCB0aGlzIHNjaGVtYSYjeEQ7JiN4QTsgICAgICAgIGZvciB0aGUgWE1MIG5hbWVzcGFjZSwgZS5nLiBhcyBmb2xsb3dzOiYjeEQ7JiN4QTsgICAgICAgICZhbXA7bHQ7c2NoZW1hIC4gLiAuJmFtcDtndDsmI3hEOyYjeEE7ICAgICAgICAgLiAuIC4mI3hEOyYjeEE7ICAgICAgICAgJmFtcDtsdDtpbXBvcnQgbmFtZXNwYWNlPSZxdW90O2h0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSZxdW90OyYjeEQ7JiN4QTsgICAgICAgICAgICAgICAgICAgIHNjaGVtYUxvY2F0aW9uPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCZxdW90Oy8mYW1wO2d0OyYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgICAgICBTdWJzZXF1ZW50bHksIHF1YWxpZmllZCByZWZlcmVuY2UgdG8gYW55IG9mIHRoZSBhdHRyaWJ1dGVzJiN4RDsmI3hBOyAgICAgICAgb3IgdGhlIGdyb3VwIGRlZmluZWQgYmVsb3cgd2lsbCBoYXZlIHRoZSBkZXNpcmVkIGVmZmVjdCwgZS5nLiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgICAgICAmYW1wO2x0O3R5cGUgLiAuIC4mYW1wO2d0OyYjeEQ7JiN4QTsgICAgICAgICAuIC4gLiYjeEQ7JiN4QTsgICAgICAgICAmYW1wO2x0O2F0dHJpYnV0ZUdyb3VwIHJlZj0mcXVvdDt4bWw6c3BlY2lhbEF0dHJzJnF1b3Q7LyZhbXA7Z3Q7JiN4RDsmI3hBOyAmI3hEOyYjeEE7ICAgICAgICAgd2lsbCBkZWZpbmUgYSB0eXBlIHdoaWNoIHdpbGwgc2NoZW1hLXZhbGlkYXRlIGFuIGluc3RhbmNlJiN4RDsmI3hBOyAgICAgICAgIGVsZW1lbnQgd2l0aCBhbnkgb2YgdGhvc2UgYXR0cmlidXRlcyYjeEQ7JiN4QTtJbiBrZWVwaW5nIHdpdGggdGhlIFhNTCBTY2hlbWEgV0cncyBzdGFuZGFyZCB2ZXJzaW9uaW5nJiN4RDsmI3hBOyAgIHBvbGljeSwgdGhpcyBzY2hlbWEgZG9jdW1lbnQgd2lsbCBwZXJzaXN0IGF0JiN4RDsmI3hBOyAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDUvMDgveG1sLnhzZC4mI3hEOyYjeEE7ICAgQXQgdGhlIGRhdGUgb2YgaXNzdWUgaXQgY2FuIGFsc28gYmUgZm91bmQgYXQmI3hEOyYjeEE7ICAgaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkLiYjeEQ7JiN4QTsgICBUaGUgc2NoZW1hIGRvY3VtZW50IGF0IHRoYXQgVVJJIG1heSBob3dldmVyIGNoYW5nZSBpbiB0aGUgZnV0dXJlLCYjeEQ7JiN4QTsgICBpbiBvcmRlciB0byByZW1haW4gY29tcGF0aWJsZSB3aXRoIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBYTUwgU2NoZW1hJiN4RDsmI3hBOyAgIGl0c2VsZiwgb3Igd2l0aCB0aGUgWE1MIG5hbWVzcGFjZSBpdHNlbGYuICBJbiBvdGhlciB3b3JkcywgaWYgdGhlIFhNTCYjeEQ7JiN4QTsgICBTY2hlbWEgb3IgWE1MIG5hbWVzcGFjZXMgY2hhbmdlLCB0aGUgdmVyc2lvbiBvZiB0aGlzIGRvY3VtZW50IGF0JiN4RDsmI3hBOyAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCB3aWxsIGNoYW5nZSYjeEQ7JiN4QTsgICBhY2NvcmRpbmdseTsgdGhlIHZlcnNpb24gYXQmI3hEOyYjeEE7ICAgaHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC94bWwueHNkIHdpbGwgbm90IGNoYW5nZS4mI3hEOyYjeEE7ICAiLz4KLSAgPC9lQW5ub3RhdGlvbnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iQ2F0ZWdvcnkiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iQ2F0ZWdvcnkiLz4KLSAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImVsZW1lbnRPbmx5Ii8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9Im5sbmFtZSIgdXBwZXJCb3VuZD0iLTEiCi0gICAgICAgIGVUeXBlPSIjLy9OYW1lIiBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9Im5sbmFtZSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJjYXRlZ29yeSIgdXBwZXJCb3VuZD0iLTEiCi0gICAgICAgIGVUeXBlPSIjLy9DYXRlZ29yeSIgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudCIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJjYXRlZ29yeSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJjb2RlIiB1bmlxdWU9ImZhbHNlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDMvWE1MVHlwZSMvL1N0cmluZyI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iYXR0cmlidXRlIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9ImNvZGUiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibmFtZSIgdW5pcXVlPSJmYWxzZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAzL1hNTFR5cGUjLy9TdHJpbmciPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImF0dHJpYnV0ZSIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJuYW1lIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkRvY3VtZW50Um9vdCI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSIiLz4KLSAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9Im1peGVkIi8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im1peGVkIiB1bmlxdWU9ImZhbHNlIiB1cHBlckJvdW5kPSItMSIKLSAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUZlYXR1cmVNYXBFbnRyeSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudFdpbGRjYXJkIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9IjptaXhlZCIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJ4TUxOU1ByZWZpeE1hcCIgdW5pcXVlPSJmYWxzZSIKLSAgICAgICAgdXBwZXJCb3VuZD0iLTEiIGVUeXBlPSJlY29yZTpFQ2xhc3MgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmdUb1N0cmluZ01hcEVudHJ5IgotICAgICAgICB0cmFuc2llbnQ9InRydWUiIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImF0dHJpYnV0ZSIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJ4bWxuczpwcmVmaXgiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ieFNJU2NoZW1hTG9jYXRpb24iIHVuaXF1ZT0iZmFsc2UiCi0gICAgICAgIHVwcGVyQm91bmQ9Ii0xIiBlVHlwZT0iZWNvcmU6RUNsYXNzIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nVG9TdHJpbmdNYXBFbnRyeSIKLSAgICAgICAgdHJhbnNpZW50PSJ0cnVlIiBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJhdHRyaWJ1dGUiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0ieHNpOnNjaGVtYUxvY2F0aW9uIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImNhdGVnb3J5IiB1cHBlckJvdW5kPSItMiIKLSAgICAgICAgZVR5cGU9IiMvL0NhdGVnb3J5IiB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIiBjb250YWlubWVudD0idHJ1ZSIKLSAgICAgICAgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9ImNhdGVnb3J5Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZXNwYWNlIiB2YWx1ZT0iIyN0YXJnZXROYW1lc3BhY2UiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ibmFtZSIgdXBwZXJCb3VuZD0iLTIiIGVUeXBlPSIjLy9OYW1lIgotICAgICAgICB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIiBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9Im5hbWUiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lc3BhY2UiIHZhbHVlPSIjI3RhcmdldE5hbWVzcGFjZSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJ0YXhvbm9teSIgdXBwZXJCb3VuZD0iLTIiCi0gICAgICAgIGVUeXBlPSIjLy9UYXhvbm9teSIgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgZGVyaXZlZD0idHJ1ZSIgY29udGFpbm1lbnQ9InRydWUiCi0gICAgICAgIHJlc29sdmVQcm94aWVzPSJmYWxzZSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudCIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJ0YXhvbm9teSIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWVzcGFjZSIgdmFsdWU9IiMjdGFyZ2V0TmFtZXNwYWNlIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9Ik5hbWUiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iTmFtZSIvPgotICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0ic2ltcGxlIi8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InZhbHVlIiB1bmlxdWU9ImZhbHNlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDMvWE1MVHlwZSMvL1N0cmluZyI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iOjAiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0ic2ltcGxlIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImxhbmciIHVuaXF1ZT0iZmFsc2UiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMy9YTUxUeXBlIy8vTGFuZ3VhZ2UiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImF0dHJpYnV0ZSIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJsYW5nIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZXNwYWNlIiB2YWx1ZT0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlRheG9ub215Ij4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9IlRheG9ub215Ii8+Ci0gICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50T25seSIvPgotICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJubG5hbWUiIHVwcGVyQm91bmQ9Ii0xIgotICAgICAgICBlVHlwZT0iIy8vTmFtZSIgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudCIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJubG5hbWUiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iY2F0ZWdvcnkiIHVwcGVyQm91bmQ9Ii0xIgotICAgICAgICBlVHlwZT0iIy8vQ2F0ZWdvcnkiIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImVsZW1lbnQiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iY2F0ZWdvcnkiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaWQiIHVuaXF1ZT0iZmFsc2UiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMy9YTUxUeXBlIy8vQW55VVJJIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJhdHRyaWJ1dGUiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iaWQiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibG9jYXRpb24iIHVuaXF1ZT0iZmFsc2UiCi0gICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMy9YTUxUeXBlIy8vQW55VVJJIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJhdHRyaWJ1dGUiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0ibG9jYXRpb24iLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibmFtZSIgdW5pcXVlPSJmYWxzZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAzL1hNTFR5cGUjLy9TdHJpbmciPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImF0dHJpYnV0ZSIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJuYW1lIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InJlZiIgdW5pcXVlPSJmYWxzZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAzL1hNTFR5cGUjLy9BbnlVUkkiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImF0dHJpYnV0ZSIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJyZWYiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idG1vZGVsS2V5IiB1bmlxdWU9ImZhbHNlIgotICAgICAgICBsb3dlckJvdW5kPSIxIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDMvWE1MVHlwZSMvL1N0cmluZyI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iYXR0cmlidXRlIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9InRtb2RlbEtleSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICA8L2VDbGFzc2lmaWVycz4KLTwvZWNvcmU6RVBhY2thZ2U+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9vcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5lY29yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL29yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmVjb3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGNlNjAyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL29yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmVjb3JlCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZWNvcmU6RVBhY2thZ2UgeG1pOnZlcnNpb249IjIuMCIKLSAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0gICAgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiIG5hbWU9InVkZGlyZWdpc3RyeSIKLSAgICBuc1VSST0iaHR0cDovL2VjbGlwc2Uub3JnL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5IiBuc1ByZWZpeD0idWRkaXJlZ2lzdHJ5Ij4KLSAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgotICAgIDxkZXRhaWxzIGtleT0iZG9jdW1lbnRhdGlvbiIgdmFsdWU9IiYjeEQ7JiN4QTsgICBTZWUgaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlLmh0bWwgYW5kJiN4RDsmI3hBOyAgIGh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy14bWwgZm9yIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgbmFtZXNwYWNlLiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgIFRoaXMgc2NoZW1hIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgWE1MIG5hbWVzcGFjZSwgaW4gYSBmb3JtJiN4RDsmI3hBOyAgICBzdWl0YWJsZSBmb3IgaW1wb3J0IGJ5IG90aGVyIHNjaGVtYSBkb2N1bWVudHMuICAmI3hEOyYjeEE7JiN4RDsmI3hBOyAgICBOb3RlIHRoYXQgbG9jYWwgbmFtZXMgaW4gdGhpcyBuYW1lc3BhY2UgYXJlIGludGVuZGVkIHRvIGJlIGRlZmluZWQmI3hEOyYjeEE7ICAgIG9ubHkgYnkgdGhlIFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0gb3IgaXRzIHN1Ymdyb3Vwcy4gIFRoZSYjeEQ7JiN4QTsgICAgZm9sbG93aW5nIG5hbWVzIGFyZSBjdXJyZW50bHkgZGVmaW5lZCBpbiB0aGlzIG5hbWVzcGFjZSBhbmQgc2hvdWxkJiN4RDsmI3hBOyAgICBub3QgYmUgdXNlZCB3aXRoIGNvbmZsaWN0aW5nIHNlbWFudGljcyBieSBhbnkgV29ya2luZyBHcm91cCwmI3hEOyYjeEE7ICAgIHNwZWNpZmljYXRpb24sIG9yIGRvY3VtZW50IGluc3RhbmNlOiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgIGJhc2UgKGFzIGFuIGF0dHJpYnV0ZSBuYW1lKTogZGVub3RlcyBhbiBhdHRyaWJ1dGUgd2hvc2UgdmFsdWUmI3hEOyYjeEE7ICAgICAgICAgcHJvdmlkZXMgYSBVUkkgdG8gYmUgdXNlZCBhcyB0aGUgYmFzZSBmb3IgaW50ZXJwcmV0aW5nIGFueSYjeEQ7JiN4QTsgICAgICAgICByZWxhdGl2ZSBVUklzIGluIHRoZSBzY29wZSBvZiB0aGUgZWxlbWVudCBvbiB3aGljaCBpdCYjeEQ7JiN4QTsgICAgICAgICBhcHBlYXJzOyBpdHMgdmFsdWUgaXMgaW5oZXJpdGVkLiAgVGhpcyBuYW1lIGlzIHJlc2VydmVkJiN4RDsmI3hBOyAgICAgICAgIGJ5IHZpcnR1ZSBvZiBpdHMgZGVmaW5pdGlvbiBpbiB0aGUgWE1MIEJhc2Ugc3BlY2lmaWNhdGlvbi4mI3hEOyYjeEE7JiN4RDsmI3hBOyAgICBpZCAgIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlIHZhbHVlJiN4RDsmI3hBOyAgICAgICAgIHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBpZiBkZWNsYXJlZCB0byBiZSBvZiB0eXBlIElELiYjeEQ7JiN4QTsgICAgICAgICBUaGUgeG1sOmlkIHNwZWNpZmljYXRpb24gaXMgbm90IHlldCBhIFczQyBSZWNvbW1lbmRhdGlvbiwmI3hEOyYjeEE7ICAgICAgICAgYnV0IHRoaXMgYXR0cmlidXRlIGlzIGluY2x1ZGVkIGhlcmUgdG8gZmFjaWxpdGF0ZSBleHBlcmltZW50YXRpb24mI3hEOyYjeEE7ICAgICAgICAgd2l0aCB0aGUgbWVjaGFuaXNtcyBpdCBwcm9wb3Nlcy4gIE5vdGUgdGhhdCBpdCBpcyBfbm90XyBpbmNsdWRlZCYjeEQ7JiN4QTsgICAgICAgICBpbiB0aGUgc3BlY2lhbEF0dHJzIGF0dHJpYnV0ZSBncm91cC4mI3hEOyYjeEE7JiN4RDsmI3hBOyAgICBsYW5nIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlIHZhbHVlJiN4RDsmI3hBOyAgICAgICAgIGlzIGEgbGFuZ3VhZ2UgY29kZSBmb3IgdGhlIG5hdHVyYWwgbGFuZ3VhZ2Ugb2YgdGhlIGNvbnRlbnQgb2YmI3hEOyYjeEE7ICAgICAgICAgYW55IGVsZW1lbnQ7IGl0cyB2YWx1ZSBpcyBpbmhlcml0ZWQuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQmI3hEOyYjeEE7ICAgICAgICAgYnkgdmlydHVlIG9mIGl0cyBkZWZpbml0aW9uIGluIHRoZSBYTUwgc3BlY2lmaWNhdGlvbi4mI3hEOyYjeEE7ICAmI3hEOyYjeEE7ICAgIHNwYWNlIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlJiN4RDsmI3hBOyAgICAgICAgIHZhbHVlIGlzIGEga2V5d29yZCBpbmRpY2F0aW5nIHdoYXQgd2hpdGVzcGFjZSBwcm9jZXNzaW5nJiN4RDsmI3hBOyAgICAgICAgIGRpc2NpcGxpbmUgaXMgaW50ZW5kZWQgZm9yIHRoZSBjb250ZW50IG9mIHRoZSBlbGVtZW50OyBpdHMmI3hEOyYjeEE7ICAgICAgICAgdmFsdWUgaXMgaW5oZXJpdGVkLiAgVGhpcyBuYW1lIGlzIHJlc2VydmVkIGJ5IHZpcnR1ZSBvZiBpdHMmI3hEOyYjeEE7ICAgICAgICAgZGVmaW5pdGlvbiBpbiB0aGUgWE1MIHNwZWNpZmljYXRpb24uJiN4RDsmI3hBOyYjeEQ7JiN4QTsgICAgRmF0aGVyIChpbiBhbnkgY29udGV4dCBhdCBhbGwpOiBkZW5vdGVzIEpvbiBCb3NhaywgdGhlIGNoYWlyIG9mICYjeEQ7JiN4QTsgICAgICAgICB0aGUgb3JpZ2luYWwgWE1MIFdvcmtpbmcgR3JvdXAuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQgYnkgJiN4RDsmI3hBOyAgICAgICAgIHRoZSBmb2xsb3dpbmcgZGVjaXNpb24gb2YgdGhlIFczQyBYTUwgUGxlbmFyeSBhbmQgJiN4RDsmI3hBOyAgICAgICAgIFhNTCBDb29yZGluYXRpb24gZ3JvdXBzOiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgICAgICAgICAgIEluIGFwcHJlY2lhdGlvbiBmb3IgaGlzIHZpc2lvbiwgbGVhZGVyc2hpcCBhbmQgZGVkaWNhdGlvbiYjeEQ7JiN4QTsgICAgICAgICAgICAgdGhlIFczQyBYTUwgUGxlbmFyeSBvbiB0aGlzIDEwdGggZGF5IG9mIEZlYnJ1YXJ5LCAyMDAwJiN4RDsmI3hBOyAgICAgICAgICAgICByZXNlcnZlcyBmb3IgSm9uIEJvc2FrIGluIHBlcnBldHVpdHkgdGhlIFhNTCBuYW1lJiN4RDsmI3hBOyAgICAgICAgICAgICB4bWw6RmF0aGVyJiN4RDsmI3hBOyAgJiN4RDsmI3hBO1RoaXMgc2NoZW1hIGRlZmluZXMgYXR0cmlidXRlcyBhbmQgYW4gYXR0cmlidXRlIGdyb3VwJiN4RDsmI3hBOyAgICAgICAgc3VpdGFibGUgZm9yIHVzZSBieSYjeEQ7JiN4QTsgICAgICAgIHNjaGVtYXMgd2lzaGluZyB0byBhbGxvdyB4bWw6YmFzZSwgeG1sOmxhbmcsIHhtbDpzcGFjZSBvciB4bWw6aWQmI3hEOyYjeEE7ICAgICAgICBhdHRyaWJ1dGVzIG9uIGVsZW1lbnRzIHRoZXkgZGVmaW5lLiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgICAgICBUbyBlbmFibGUgdGhpcywgc3VjaCBhIHNjaGVtYSBtdXN0IGltcG9ydCB0aGlzIHNjaGVtYSYjeEQ7JiN4QTsgICAgICAgIGZvciB0aGUgWE1MIG5hbWVzcGFjZSwgZS5nLiBhcyBmb2xsb3dzOiYjeEQ7JiN4QTsgICAgICAgICZhbXA7bHQ7c2NoZW1hIC4gLiAuJmFtcDtndDsmI3hEOyYjeEE7ICAgICAgICAgLiAuIC4mI3hEOyYjeEE7ICAgICAgICAgJmFtcDtsdDtpbXBvcnQgbmFtZXNwYWNlPSZxdW90O2h0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSZxdW90OyYjeEQ7JiN4QTsgICAgICAgICAgICAgICAgICAgIHNjaGVtYUxvY2F0aW9uPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCZxdW90Oy8mYW1wO2d0OyYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgICAgICBTdWJzZXF1ZW50bHksIHF1YWxpZmllZCByZWZlcmVuY2UgdG8gYW55IG9mIHRoZSBhdHRyaWJ1dGVzJiN4RDsmI3hBOyAgICAgICAgb3IgdGhlIGdyb3VwIGRlZmluZWQgYmVsb3cgd2lsbCBoYXZlIHRoZSBkZXNpcmVkIGVmZmVjdCwgZS5nLiYjeEQ7JiN4QTsmI3hEOyYjeEE7ICAgICAgICAmYW1wO2x0O3R5cGUgLiAuIC4mYW1wO2d0OyYjeEQ7JiN4QTsgICAgICAgICAuIC4gLiYjeEQ7JiN4QTsgICAgICAgICAmYW1wO2x0O2F0dHJpYnV0ZUdyb3VwIHJlZj0mcXVvdDt4bWw6c3BlY2lhbEF0dHJzJnF1b3Q7LyZhbXA7Z3Q7JiN4RDsmI3hBOyAmI3hEOyYjeEE7ICAgICAgICAgd2lsbCBkZWZpbmUgYSB0eXBlIHdoaWNoIHdpbGwgc2NoZW1hLXZhbGlkYXRlIGFuIGluc3RhbmNlJiN4RDsmI3hBOyAgICAgICAgIGVsZW1lbnQgd2l0aCBhbnkgb2YgdGhvc2UgYXR0cmlidXRlcyYjeEQ7JiN4QTtJbiBrZWVwaW5nIHdpdGggdGhlIFhNTCBTY2hlbWEgV0cncyBzdGFuZGFyZCB2ZXJzaW9uaW5nJiN4RDsmI3hBOyAgIHBvbGljeSwgdGhpcyBzY2hlbWEgZG9jdW1lbnQgd2lsbCBwZXJzaXN0IGF0JiN4RDsmI3hBOyAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDUvMDgveG1sLnhzZC4mI3hEOyYjeEE7ICAgQXQgdGhlIGRhdGUgb2YgaXNzdWUgaXQgY2FuIGFsc28gYmUgZm91bmQgYXQmI3hEOyYjeEE7ICAgaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkLiYjeEQ7JiN4QTsgICBUaGUgc2NoZW1hIGRvY3VtZW50IGF0IHRoYXQgVVJJIG1heSBob3dldmVyIGNoYW5nZSBpbiB0aGUgZnV0dXJlLCYjeEQ7JiN4QTsgICBpbiBvcmRlciB0byByZW1haW4gY29tcGF0aWJsZSB3aXRoIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBYTUwgU2NoZW1hJiN4RDsmI3hBOyAgIGl0c2VsZiwgb3Igd2l0aCB0aGUgWE1MIG5hbWVzcGFjZSBpdHNlbGYuICBJbiBvdGhlciB3b3JkcywgaWYgdGhlIFhNTCYjeEQ7JiN4QTsgICBTY2hlbWEgb3IgWE1MIG5hbWVzcGFjZXMgY2hhbmdlLCB0aGUgdmVyc2lvbiBvZiB0aGlzIGRvY3VtZW50IGF0JiN4RDsmI3hBOyAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCB3aWxsIGNoYW5nZSYjeEQ7JiN4QTsgICBhY2NvcmRpbmdseTsgdGhlIHZlcnNpb24gYXQmI3hEOyYjeEE7ICAgaHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC94bWwueHNkIHdpbGwgbm90IGNoYW5nZS4mI3hEOyYjeEE7ICAiLz4KLSAgPC9lQW5ub3RhdGlvbnM+Ci0gIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iRG9jdW1lbnRSb290Ij4KLSAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9IiIvPgotICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0ibWl4ZWQiLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibWl4ZWQiIHVuaXF1ZT0iZmFsc2UiIHVwcGVyQm91bmQ9Ii0xIgotICAgICAgICBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FRmVhdHVyZU1hcEVudHJ5Ij4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50V2lsZGNhcmQiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iOm1peGVkIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InhNTE5TUHJlZml4TWFwIiB1bmlxdWU9ImZhbHNlIgotICAgICAgICB1cHBlckJvdW5kPSItMSIgZVR5cGU9ImVjb3JlOkVDbGFzcyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZ1RvU3RyaW5nTWFwRW50cnkiCi0gICAgICAgIHRyYW5zaWVudD0idHJ1ZSIgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iYXR0cmlidXRlIi8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9InhtbG5zOnByZWZpeCIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJ4U0lTY2hlbWFMb2NhdGlvbiIgdW5pcXVlPSJmYWxzZSIKLSAgICAgICAgdXBwZXJCb3VuZD0iLTEiIGVUeXBlPSJlY29yZTpFQ2xhc3MgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmdUb1N0cmluZ01hcEVudHJ5IgotICAgICAgICB0cmFuc2llbnQ9InRydWUiIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImF0dHJpYnV0ZSIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJ4c2k6c2NoZW1hTG9jYXRpb24iLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0idGF4b25vbWllcyIgdXBwZXJCb3VuZD0iLTIiCi0gICAgICAgIGVUeXBlPSIjLy9UYXhvbm9taWVzIiB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIiBjb250YWlubWVudD0idHJ1ZSIKLSAgICAgICAgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9InRheG9ub21pZXMiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lc3BhY2UiIHZhbHVlPSIjI3RhcmdldE5hbWVzcGFjZSIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJ1ZGRpUmVnaXN0cnkiIHVwcGVyQm91bmQ9Ii0yIgotICAgICAgICBlVHlwZT0iIy8vVURESVJlZ2lzdHJ5IiB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIiBjb250YWlubWVudD0idHJ1ZSIKLSAgICAgICAgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9InVkZGlSZWdpc3RyeSIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWVzcGFjZSIgdmFsdWU9IiMjdGFyZ2V0TmFtZXNwYWNlIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlRheG9ub21pZXMiPgotICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0iVGF4b25vbWllcyIvPgotICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudE9ubHkiLz4KLSAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0idGF4b25vbXkiIHVwcGVyQm91bmQ9Ii0xIgotICAgICAgICBlVHlwZT0iZWNvcmU6RUNsYXNzIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuZWNvcmUjLy9UYXhvbm9teSIKLSAgICAgICAgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudCIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJ0YXhvbm9teSIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWVzcGFjZSIgdmFsdWU9Imh0dHA6Ly9lY2xpcHNlLm9yZy93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215Ii8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gIDwvZUNsYXNzaWZpZXJzPgotICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlVERElSZWdpc3RyeSIgZVN1cGVyVHlwZXM9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuZWNvcmUjLy9SZWdpc3RyeSI+Ci0gICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJVRERJUmVnaXN0cnkiLz4KLSAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImVsZW1lbnRPbmx5Ii8+Ci0gICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InZlcnNpb24iIHVuaXF1ZT0iZmFsc2UiCi0gICAgICAgIGxvd2VyQm91bmQ9IjEiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMy9YTUxUeXBlIy8vU3RyaW5nIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9InZlcnNpb24iLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZGlzY292ZXJ5VVJMIiB1bmlxdWU9ImZhbHNlIgotICAgICAgICBsb3dlckJvdW5kPSIxIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDMvWE1MVHlwZSMvL0FueVVSSSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudCIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJkaXNjb3ZlcnlVUkwiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0icHVibGljYXRpb25VUkwiIHVuaXF1ZT0iZmFsc2UiCi0gICAgICAgIGxvd2VyQm91bmQ9IjEiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMy9YTUxUeXBlIy8vQW55VVJJIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9InB1YmxpY2F0aW9uVVJMIi8+Ci0gICAgICA8L2VBbm5vdGF0aW9ucz4KLSAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+Ci0gICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InNlY3VyZWREaXNjb3ZlcnlVUkwiIHVuaXF1ZT0iZmFsc2UiCi0gICAgICAgIGxvd2VyQm91bmQ9IjEiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMy9YTUxUeXBlIy8vQW55VVJJIj4KLSAgICAgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiPgotICAgICAgICA8ZGV0YWlscyBrZXk9ImtpbmQiIHZhbHVlPSJlbGVtZW50Ii8+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ibmFtZSIgdmFsdWU9InNlY3VyZWREaXNjb3ZlcnlVUkwiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ic2VjdXJlZFB1YmxpY2F0aW9uVVJMIgotICAgICAgICB1bmlxdWU9ImZhbHNlIiBsb3dlckJvdW5kPSIxIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDMvWE1MVHlwZSMvL0FueVVSSSI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudCIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJzZWN1cmVkUHVibGljYXRpb25VUkwiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZGVmYXVsdExvZ2luIiB1bmlxdWU9ImZhbHNlIgotICAgICAgICBsb3dlckJvdW5kPSIxIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDMvWE1MVHlwZSMvL1N0cmluZyI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudCIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJkZWZhdWx0TG9naW4iLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZGVmYXVsdFBhc3N3b3JkIiB1bmlxdWU9ImZhbHNlIgotICAgICAgICBsb3dlckJvdW5kPSIxIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDMvWE1MVHlwZSMvL1N0cmluZyI+Ci0gICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIj4KLSAgICAgICAgPGRldGFpbHMga2V5PSJraW5kIiB2YWx1ZT0iZWxlbWVudCIvPgotICAgICAgICA8ZGV0YWlscyBrZXk9Im5hbWUiIHZhbHVlPSJkZWZhdWx0UGFzc3dvcmQiLz4KLSAgICAgIDwvZUFubm90YXRpb25zPgotICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KLSAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0idGF4b25vbWllcyIgZVR5cGU9IiMvL1RheG9ub21pZXMiCi0gICAgICAgIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiPgotICAgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI+Ci0gICAgICAgIDxkZXRhaWxzIGtleT0ia2luZCIgdmFsdWU9ImVsZW1lbnQiLz4KLSAgICAgICAgPGRldGFpbHMga2V5PSJuYW1lIiB2YWx1ZT0idGF4b25vbWllcyIvPgotICAgICAgPC9lQW5ub3RhdGlvbnM+Ci0gICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgotICA8L2VDbGFzc2lmaWVycz4KLTwvZWNvcmU6RVBhY2thZ2U+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9wbHVnaW4ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Nzk2YjdkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jCi0jIE1lc3NhZ2VzIGluIHBsdWdpbi54bWwuCi0jCi1QTFVHSU5fTkFNRT1XZWIgU2VydmljZXMKLVBMVUdJTl9QUk9WSURFUj1FY2xpcHNlLm9yZwotCi0jIEV4dGVuc2lvbiBwb2ludCBuYW1lcwotWFBfV0VCX1NFUlZJQ0VfTE9DQVRPUj1XZWIgU2VydmljZSBMb2NhdG9yCi1YX1dFQl9TRVJWSUNFX0xPQ0FUT1JfV09SS1NQQUNFPVdvcmtzcGFjZSBXZWIgU2VydmljZSBMb2NhdG9yCi1YX1dFQl9TRVJWSUNFX0xPQ0FUT1JfQ0FURUdPUllfV09SS1NQQUNFPVdvcmtzcGFjZSBXU0RMIGRvY3VtZW50cwotWF9XU0lMX0NPTlRFTlRfVFlQRT1XZWIgU2VydmljZXMgSW5zcGVjdGlvbiBMYW5ndWFnZSBEb2N1bWVudAotCi1NU0dfRVJST1JfVU5BQkxFX1RPX1NUQVJUX01PTklUT1I9SVdBQjAwMDFFIFVuYWJsZSB0byBtb25pdG9yIHBvcnQgezB9IG9mIHsxfS4KLQotIyBDdXJyZW50bHkga25vd24gcHVibGljIFVEREkgcmVnaXN0cmllcwotUFVCTElDVURESVJFR0lTVFJZVFlQRV9OQU1FX1NBUD1TQVAgVURESSBSZWdpc3RyeQotUFVCTElDVURESVJFR0lTVFJZVFlQRV9OQU1FX1NBUF9URVNUPVNBUCBVRERJIFRlc3QgUmVnaXN0cnkKLVBVQkxJQ1VERElSRUdJU1RSWVRZUEVfTkFNRV9YTUVUSE9EUz1YTWV0aG9kcyBSZWdpc3RyeQotUFVCTElDVURESVJFR0lTVFJZVFlQRV9OQU1FX05UVENPTU09TlRUIENvbW11bmljYXRpb25zIFJlZ2lzdHJ5CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9wbHVnaW4ueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3MvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Q2ODZlMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLQotPHBsdWdpbj4KLQotICAgPCEtLSBUaGUgZm9sbG93aW5nIGV4dGVuc2lvbiBwb2ludCBpcyBpbnRlcm5hbCwgdGhvdWdoIGxpa2VseSB0byBiZSBwcm9tb3RlZCBmb3IgcHVibGljIHVzZSwgcG9zc2libHkgd2l0aCBjaGFuZ2VzLCBpbiBhIGZ1dHVyZSByZWxlYXNlLiAtLT4KLSAgIDxleHRlbnNpb24tcG9pbnQgaWQ9ImxvY2F0b3IiIG5hbWU9IiVYUF9XRUJfU0VSVklDRV9MT0NBVE9SIiBzY2hlbWE9InNjaGVtYS93ZWJTZXJ2aWNlTG9jYXRvci5leHNkIi8+Ci0KLSAgIDwhLS0gRXh0ZW5zaW9uIHByb3ZpZGluZyB3b3Jrc3BhY2UgV1NETCBkaXNjb3ZlcnkgLS0+ICAgCi0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LndzLmxvY2F0b3IiPgotCi0gICAgICA8d2ViU2VydmljZUxvY2F0b3JDYXRlZ29yeQotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c2ZpbmRlci5jYXRlZ29yeS53b3Jrc3BhY2UiCi0gICAgICAgICAgICBsYWJlbD0iJVhfV0VCX1NFUlZJQ0VfTE9DQVRPUl9DQVRFR09SWV9XT1JLU1BBQ0UiLz4KLQotICAgICAgPHdlYlNlcnZpY2VMb2NhdG9yCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzZmluZGVyLldvcmtzcGFjZVdTRExMb2NhdG9yIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c2ZpbmRlci5Xb3Jrc3BhY2VXU0RMTG9jYXRvciIKLSAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NmaW5kZXIuY2F0ZWdvcnkud29ya3NwYWNlIgotICAgICAgICAgICAgbGFiZWw9IiVYX1dFQl9TRVJWSUNFX0xPQ0FUT1JfV09SS1NQQUNFIj4KLSAgICAgIDwvd2ViU2VydmljZUxvY2F0b3I+Ci0KLSAgIDwvZXh0ZW5zaW9uPgotICAgCi0gICA8IS0tIEV4dGVuc2lvbiB0byBiaW5kIGEgZmlsZSB0eXBlIHRvIFdTSUwgZmlsZXMgLS0+Ci0gICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS50ZWFtLmNvcmUuZmlsZVR5cGVzIj4KLSAgICAgIDxmaWxlVHlwZXMKLSAgICAgICAgICAgIHR5cGU9InRleHQiCi0gICAgICAgICAgICBleHRlbnNpb249IndzaWwiLz4KLSAgIDwvZXh0ZW5zaW9uPgotCi0gICA8IS0tIEV4dGVuc2lvbiB0byBkZWZpbmUgYSBjb250ZW50IHR5cGUgZm9yIFdTSUwgZmlsZXMgLS0+Ci0gICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuY29udGVudFR5cGVzIj4KLSAgICAgIDxjb250ZW50LXR5cGUKLSAgICAgICAgICAgIHByaW9yaXR5PSJoaWdoIgotICAgICAgICAgICAgbmFtZT0iJVhfV1NJTF9DT05URU5UX1RZUEUiCi0gICAgICAgICAgICBpZD0id3NpbHNvdXJjZSIKLSAgICAgICAgICAgIGJhc2UtdHlwZT0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnhtbCIKLSAgICAgICAgICAgIGRlZmF1bHQtY2hhcnNldD0iVVRGLTgiCi0gICAgICAgICAgICBmaWxlLWV4dGVuc2lvbnM9IndzaWwiLz4KLSAgIDwvZXh0ZW5zaW9uPgotICAgIAotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zY2hlbWEvd2ViU2VydmljZUxvY2F0b3IuZXhzZCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NjaGVtYS93ZWJTZXJ2aWNlTG9jYXRvci5leHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDk3ZDBkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NjaGVtYS93ZWJTZXJ2aWNlTG9jYXRvci5leHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTk3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Ci08IS0tIFNjaGVtYSBmaWxlIHdyaXR0ZW4gYnkgUERFIC0tPgotPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Im9yZy5lY2xpcHNlLndzdC53cyI+Ci08YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2NoZW1hIHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LndzIiBpZD0id2ViU2VydmljZUxvY2F0b3IiIG5hbWU9IldlYiBTZXJ2aWNlIExvY2F0b3IiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhpcyBleHRlbnNpb24gcG9pbnQgaXMgcHJvdmlkZWQgdG8gcmVnaXN0ZXIgbG9jYXRvcnMgdGhhdCBleHRlbmQgQWJzdHJhY3RXZWJTZXJ2aWNlTG9jYXRvci4KLSAgICAgICAgIFRoZXNlIGxvY2F0b3JzIGFyZSB1c2VkIGJ5IFdlYlNlcnZpY2VGaW5kZXIgdG8gbG9jYXRlIFdlYiBzZXJ2aWNlcyBmb3IgdGhlIHB1cnBvc2Ugb2YgV2ViIHNlcnZpY2UgZGlzY292ZXJ5LgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGFsbD4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0id2ViU2VydmljZUxvY2F0b3IiIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0id2ViU2VydmljZUxvY2F0b3JDYXRlZ29yeSIgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgPC9hbGw+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIEEgZnVsbHkgcXVhbGlmaWVkIGlkZW50aWZpZXIgb2YgdGhlIHRhcmdldCBleHRlbnNpb24gcG9pbnQuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgQW4gb3B0aW9uYWwgaWRlbnRpZmllciBvZiB0aGUgZXh0ZW5zaW9uIGluc3RhbmNlLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgQW4gb3B0aW9uYWwgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uIGluc3RhbmNlLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcEluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUgdHJhbnNsYXRhYmxlPSJ0cnVlIi8+Ci0gICAgICAgICAgICAgICA8L2FwcEluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9IndlYlNlcnZpY2VMb2NhdG9yIj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIFdlYiBTZXJ2aWNlIExvY2F0b3IuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY2xhc3MiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIGZ1bGx5IHF1YWxpZmllZCBjbGFzcyBuYW1lIGZvciB0aGUgbG9jYXRvciBjbGFzcyB3aGljaCBleHRlbmRzIEFic3RyYWN0V2ViU2VydmljZUxvY2F0b3IuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibGFiZWwiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgQSBzaG9ydCBsYWJlbCB0byBpZGVudGlmeSB0aGUgV2ViIFNlcnZpY2UgTG9jYXRvci4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgIDxhcHBJbmZvPgotICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIHRyYW5zbGF0YWJsZT0idHJ1ZSIvPgotICAgICAgICAgICAgICAgPC9hcHBJbmZvPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImRlc2NyaXB0aW9uIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIE9wdGlvbmFsbHksIGEgZGVzY3JpcHRpb24gb2YgdGhlIHB1cnBvc2Ugb2YgdGhlIFdlYiBTZXJ2aWNlIExvY2F0b3IuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICA8YXBwSW5mbz4KLSAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSB0cmFuc2xhdGFibGU9InRydWUiLz4KLSAgICAgICAgICAgICAgIDwvYXBwSW5mbz4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpY29uIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIE9wdGlvbmFsbHksIGFuIGljb24gdGhhdCByZXByZXNlbnRzIHRoZSBXZWIgU2VydmljZSBMb2NhdG9yLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImNhdGVnb3J5IiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIE9wdGlvbmFsbHksIGEgY2F0ZWdvcnkgdG8gd2hpY2ggdGhlIFdlYiBTZXJ2aWNlIExvY2F0b3Igc2hvdWxkIGJlbG9uZy4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGVsZW1lbnQgbmFtZT0id2ViU2VydmljZUxvY2F0b3JDYXRlZ29yeSI+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIEEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBjYXRlZ29yeSBvZiBXZWIgU2VydmljZSBMb2NhdG9ycy4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJsYWJlbCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBBIHNob3J0IGxhYmVsIGZvciB0aGUgY2F0ZWdvcnkgb2YgV2ViIFNlcnZpY2UgTG9jYXRvcnMuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICA8YXBwSW5mbz4KLSAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSB0cmFuc2xhdGFibGU9InRydWUiLz4KLSAgICAgICAgICAgICAgIDwvYXBwSW5mbz4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJkZXNjcmlwdGlvbiIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBPcHRpb25hbGx5LCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBjYXRlZ29yeSBvZiBXZWIgU2VydmljZSBMb2NhdG9ycy4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgIDxhcHBJbmZvPgotICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIHRyYW5zbGF0YWJsZT0idHJ1ZSIvPgotICAgICAgICAgICAgICAgPC9hcHBJbmZvPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Imljb24iIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgT3B0aW9uYWxseSwgYW4gaWNvbiB0aGF0IHJlcHJlc2VudHMgdGhlIGNhdGVnb3J5IG9mIFdlYiBTZXJ2aWNlIExvY2F0b3JzLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImNhdGVnb3J5IiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIE9wdGlvbmFsbHksIGEgcGFyZW50IGNhdGVnb3J5IHVuZGVyIHdoaWNoIHRoZSBXZWIgU2VydmljZSBMb2NhdG9yCi0gICAgICAgICAgICAgICAgICBjYXRlZ29yeSBzaG91bGQgYmUgZ3JvdXBlZC4gSWYgYWJzZW50LCB0aGUgY2F0ZWdvcnkgaXMgY29uc2lkZXJlZAotICAgICAgICAgICAgICAgICAgdG8gYmUgYSByb290IGNhdGVnb3J5LgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJzaW5jZSIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAmbHQ7YiZndDtUaGlzIGV4dGVuc2lvbiBwb2ludCBpcyBwYXJ0IG9mIGFuIGludGVyaW0gQVBJIHRoYXQgaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnQgYW5kIGV4cGVjdGVkIHRvIGNoYW5nZSBzaWduaWZpY2FudGx5IGJlZm9yZSByZWFjaGluZyBzdGFiaWxpdHkuIEl0IGlzIGJlaW5nIG1hZGUgYXZhaWxhYmxlIGF0IHRoaXMgZWFybHkgc3RhZ2UgdG8gc29saWNpdCBmZWVkYmFjayBmcm9tIHBpb25lZXJpbmcgYWRvcHRlcnMgb24gdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBhbnkgY29kZSB0aGF0IHVzZXMgdGhpcyBBUEkgd2lsbCBhbG1vc3QgY2VydGFpbmx5IGJlIGJyb2tlbiAocmVwZWF0ZWRseSkgYXMgdGhlIEFQSSBldm9sdmVzLiZsdDsvYiZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iZXhhbXBsZXMiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImFwaUluZm8iLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgRXh0ZW5kZXJzIHNob3VsZCBpbXBsZW1lbnQgJmx0O2NvZGUmZ3Q7b3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzZmluZGVyLkFic3RyYWN0V2ViU2VydmljZUxvY2F0b3ImbHQ7L2NvZGUmZ3Q7LiAgVGhlIFdlYlNlcnZpY2VMb2NhdG9yUmVnaXN0cnkgdXNlcyB0aGlzIGV4dGVuc2lvbiBwb2ludCB0byByZXRyaWV2ZSBhbGwgbG9jYXRvcnMuCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImltcGxlbWVudGF0aW9uIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIAotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJjb3B5cmlnaHQiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiZsdDticiZndDsKLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgCi1hdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgCi10aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAmbHQ7YQotaHJlZj0mcXVvdDtodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCZxdW90OyZndDtodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCZsdDsvYSZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL1dzdFdTUGx1Z2luLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL1dzdFdTUGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzODdjNmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9Xc3RXU1BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0jIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIDIwMDYwNDIwICAgMTIwNzE0IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0jIDIwMDcwMTI1ICAgMTcxMDcxIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrCi0jIDIwMDcwNDA5ICAgMTgxNjM1IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgR2V0TW9uaXRvckNvbW1hbmQKLSMKLU1TR19FUlJPUl9VTkFCTEVfVE9fU1RBUlRfTU9OSVRPUj1JV0FCMDAwMUUgVW5hYmxlIHRvIG1vbml0b3IgcG9ydCB7MH0gb2YgezF9LgotCi0jCi0jIFdTRExVdGlsaXR5Ci0jCi1NU0dfVU5BQkxFX1RPX1JFU09MVkVfSFRUUD1Db3VsZCBub3QgcmVzb2x2ZSBzZXJ2aWNlIGRlZmluaXRpb24gaHR0cDovL3swfS4gIFNlcnZpY2UgbWF5IG5vdCBiZSBydW5uaW5nIG9uIHRoZSBzZXJ2ZXIuCi1NU0dfVU5BQkxFX1RPX1JFU09MVkVfUExBVEZPUk1fVVJJPUNvdWxkIG5vdCBwYXJzZSBwbGF0Zm9ybTovcmVzb3VyY2V7MH0uCi0KLSMKLSMgV1NJQ29tcGxpYW5jZVV0aWxzCi0jCi1JR05PUkVfTEFCRUw9SWdub3JlCi1JR05PUkVfREVTQ1JJUFRJT049SWdub3JlIHRoZSBXUy1JIG5vbi1jb21wbGlhbmNlIGFuZCBjb250aW51ZQotSUdOT1JFX0FMTF9MQUJFTD1JZ25vcmUgQWxsCi1JR05PUkVfQUxMX0RFU0NSSVBUSU9OPUFsd2F5cyBpZ25vcmUgdGhlIFdTLUkgbm9uLWNvbXBsaWFuY2UgYW5kIGNvbnRpbnVlCi1DQU5DRUxfTEFCRUw9Q2FuY2VsCi1DQU5DRUxfREVTQ1JJUFRJT049Q2FuY2VsCi0KLSMKLSMJV1MtSSBDb21wbGlhbmNlIE1lc3NhZ2VzCi0jCi1XU0lfU1NCUF9FUlJPUj1Zb3UgaGF2ZSBtYWRlIGEgY2hvaWNlIHRoYXQgbWF5IHJlc3VsdCBpbiBhIFdlYiBzZXJ2aWNlIHRoYXQgZG9lcyBub3QgY29tcGx5IHdpdGggdGhlIFdTLUkgU2ltcGxlIFNPQVAgQmluZGluZyBQcm9maWxlLiBZb3VyIGN1cnJlbnQgV2ViIHNlcnZpY2VzIHByZWZlcmVuY2UgaXMgc2V0IHRvIHJlcXVpcmUgY29tcGxpYW5jZSB3aXRoIFdTLUkgU1NCUC4KLVdTSV9TU0JQX1dBUk5JTkc9WW91IGhhdmUgbWFkZSBhIGNob2ljZSB0aGF0IG1heSByZXN1bHQgaW4gYSBXZWIgc2VydmljZSB0aGF0IGRvZXMgbm90IGNvbXBseSB3aXRoIHRoZSBXUy1JIFNpbXBsZSBTT0FQIEJpbmRpbmcgUHJvZmlsZS4gRG8geW91IHdpc2ggdG8gaWdub3JlIHRoaXMgd2FybmluZyBhbmQgY29udGludWU/Ci1XU0lfU1NCUF9JTkNPTVBMSUFOVF9SVU5USU1FPVRoZSBzZWxlY3RlZCBXZWIgU2VydmljZSBydW50aW1lIGRvZXMgbm90IGNvbXBseSB3aXRoIHRoZSBXUy1JIFNpbXBsZSBTT0FQIEJpbmRpbmcgUHJvZmlsZS4KLVdTSV9BUF9FUlJPUj1Zb3UgaGF2ZSBtYWRlIGEgY2hvaWNlIHRoYXQgbWF5IHJlc3VsdCBpbiBhIFdlYiBzZXJ2aWNlIHRoYXQgZG9lcyBub3QgY29tcGx5IHdpdGggdGhlIFdTLUkgQXR0YWNobWVudCBQcm9maWxlLiBZb3VyIGN1cnJlbnQgV2ViIHNlcnZpY2VzIHByZWZlcmVuY2UgaXMgc2V0IHRvIHJlcXVpcmUgY29tcGxpYW5jZSB3aXRoIFdTLUkgQVAuCi1XU0lfQVBfV0FSTklORz1Zb3UgaGF2ZSBtYWRlIGEgY2hvaWNlIHRoYXQgbWF5IHJlc3VsdCBpbiBhIFdlYiBzZXJ2aWNlIHRoYXQgZG9lcyBub3QgY29tcGx5IHdpdGggdGhlIFdTLUkgQXR0YWNobWVudCBQcm9maWxlLiBEbyB5b3Ugd2lzaCB0byBpZ25vcmUgdGhpcyB3YXJuaW5nIGFuZCBjb250aW51ZT8KLVdTSV9BUF9JTkNPTVBMSUFOVF9SVU5USU1FPVRoZSBzZWxlY3RlZCBXZWIgU2VydmljZSBydW50aW1lIGRvZXMgbm90IGNvbXBseSB3aXRoIHRoZSBXUy1JIEF0dGFjaG1lbnQgUHJvZmlsZS4KLQotCi0jCi0jIFdTRExDb3BpZXIgTWVzc2FnZXMKLSMKLU1TR19FUlJPUl9DT1BZX1dTREw9RmFpbGVkIHRvIGNvcHkgV1NETCAiezB9IiB0byAiezF9Ii4KLU1TR19FUlJPUl9UQVJHRVRfRk9MREVSX05PVF9TUEVDSUZJRUQ9QSB0YXJnZXQgZm9sZGVyIHdhcyBub3Qgc3BlY2lmaWVkLgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9Xc3RXU1BsdWdpbk1lc3NhZ2VzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL1dzdFdTUGx1Z2luTWVzc2FnZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2JiMjM4NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL1dzdFdTUGx1Z2luTWVzc2FnZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQyMCAgIDEyMDcxNCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzAxMjUgICAxNzEwNzEgbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWsKLSAqIDIwMDcwNDA5ICAgMTgxNjM1IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0RMQ29waWVyIHV0aWxpdHkgc2hvdWxkIGNyZWF0ZSB0YXJnZXQgZm9sZGVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLQotcHVibGljIGZpbmFsIGNsYXNzIFdzdFdTUGx1Z2luTWVzc2FnZXMgZXh0ZW5kcyBOTFMgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gIm9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5Xc3RXU1BsdWdpbiI7Ly8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBXc3RXU1BsdWdpbk1lc3NhZ2VzKCkgewotCQkvLyBEbyBub3QgaW5zdGFudGlhdGUKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfRVJST1JfVU5BQkxFX1RPX1NUQVJUX01PTklUT1I7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX1VOQUJMRV9UT19SRVNPTFZFX1BMQVRGT1JNX1VSSTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNU0dfVU5BQkxFX1RPX1JFU09MVkVfSFRUUDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJR05PUkVfTEFCRUw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSUdOT1JFX0RFU0NSSVBUSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElHTk9SRV9BTExfTEFCRUw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSUdOT1JFX0FMTF9ERVNDUklQVElPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBDQU5DRUxfTEFCRUw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQ0FOQ0VMX0RFU0NSSVBUSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTSV9TU0JQX0VSUk9SOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTSV9TU0JQX1dBUk5JTkc7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NJX1NTQlBfSU5DT01QTElBTlRfUlVOVElNRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0lfQVBfRVJST1I7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NJX0FQX1dBUk5JTkc7CQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTSV9BUF9JTkNPTVBMSUFOVF9SVU5USU1FOwotCQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1TR19FUlJPUl9DT1BZX1dTREw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVNHX0VSUk9SX1RBUkdFVF9GT0xERVJfTk9UX1NQRUNJRklFRDsKLQotCXN0YXRpYyB7Ci0JCU5MUy5pbml0aWFsaXplTWVzc2FnZXMoQlVORExFX05BTUUsIFdzdFdTUGx1Z2luTWVzc2FnZXMuY2xhc3MpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvY29tbW9uL0J1bmRsZVV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2NvbW1vbi9CdW5kbGVVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGI2NWI3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvY29tbW9uL0J1bmRsZVV0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA1MDEgICAxODQ1MDUga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuY29tbW9uOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuVmVyc2lvbjsKLQotcHVibGljIGNsYXNzIEJ1bmRsZVV0aWxzCi17Ci0Jc3RhdGljIHB1YmxpYyBVUkwgZ2V0VVJMRnJvbUJ1bmRsZSggU3RyaW5nIGJ1bmRsZUlkLCBTdHJpbmcgcGF0aCApIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24KLQl7Ci0JCUJ1bmRsZSAgICAgIGJ1bmRsZSAgICAgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoIGJ1bmRsZUlkICk7Ci0JCVVSTCAgICAgICAgIGluc3RhbGxVUkwgPSBidW5kbGUuZ2V0RW50cnkoIi8iKTsKLQkJVVJMICAgICAgICAgZmlsZVVSTCAgICA9IG5ldyBVUkwoaW5zdGFsbFVSTCwgcGF0aCApOwotCi0JCXJldHVybiBmaWxlVVJMOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBidW5kbGVJZAotCSAqIEByZXR1cm4gUmV0dXJucyB0aGUgcGF0aCBmb3IgdGhlIEphcnJlZCBwbHVnaW4uICBSZXR1cm5zIG51bGwgaWYgcGF0aCBub3QgZm91bmQuCi0JICovCi0Jc3RhdGljIHB1YmxpYyBJUGF0aCBnZXRKYXJyZWRQbHVnaW5QYXRoKFN0cmluZyBidW5kbGVJZCkgewotCQlJUGF0aCByZXN1bHQgPSBudWxsOwotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKGJ1bmRsZUlkKTsKLQkJaWYgKGJ1bmRsZSAhPSBudWxsKSB7Ci0JCQlQYXRoIHJ1bnRpbWVMaWJGdWxsUGF0aCA9IG51bGw7Ci0JCQlTdHJpbmcgamFyUGx1Z2luTG9jYXRpb24gPSBidW5kbGUuZ2V0TG9jYXRpb24oKS5zdWJzdHJpbmcoNyk7Ci0JCQlQYXRoIGphclBsdWdpblBhdGggPSBuZXcgUGF0aChqYXJQbHVnaW5Mb2NhdGlvbik7Ci0JCQkvLyBoYW5kbGUgY2FzZSB3aGVyZSBqYXJzIGFyZSBpbnN0YWxsZWQgb3V0c2lkZSBvZiBlY2xpcHNlIGluc3RhbGxhdGlvbgotCQkJaWYgKGphclBsdWdpblBhdGguaXNBYnNvbHV0ZSgpKQotCQkJCXJ1bnRpbWVMaWJGdWxsUGF0aCA9IGphclBsdWdpblBhdGg7Ci0JCQkvLyBoYW5kbGUgbm9ybWFsIGNhc2Ugd2hlcmUgYWxsIHBsdWdpbnMgdW5kZXIgZWNsaXBzZSBpbnN0YWxsCi0JCQllbHNlIHsKLQkJCQlTdHJpbmcgaW5zdGFsbFBhdGggPSBQbGF0Zm9ybS5nZXRJbnN0YWxsTG9jYXRpb24oKS5nZXRVUkwoKS5nZXRQYXRoKCk7Ci0JCQkJcnVudGltZUxpYkZ1bGxQYXRoID0gbmV3IFBhdGgoaW5zdGFsbFBhdGggKyAiLyIgKyBqYXJQbHVnaW5Mb2NhdGlvbik7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQkJCXJlc3VsdCA9IHJ1bnRpbWVMaWJGdWxsUGF0aDsKLQkJfQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBidW5kbGVJZAotCSAqIEByZXR1cm4gVGhlIHZlcnNvaW4gb2YgdGhlIHBsdWdpbiB3aXRoIHRoYXQgYnVuZGxlIElECi0JICovCi0Jc3RhdGljIHB1YmxpYyBWZXJzaW9uIGdldFZlcnNpb24oU3RyaW5nIGJ1bmRsZUlkKSB7Ci0JCVZlcnNpb24gcmVzdWx0ID0gbnVsbDsKLQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShidW5kbGVJZCk7Ci0JCVN0cmluZyB2ZXJzaW9uU3RyaW5nID0gKFN0cmluZykgYnVuZGxlLmdldEhlYWRlcnMoKS5nZXQoIkJ1bmRsZS1WZXJzaW9uIik7Ci0JCXJlc3VsdCA9IG5ldyBWZXJzaW9uKHZlcnNpb25TdHJpbmcpOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9jb21tb24vSFRUUFV0aWxpdHkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvY29tbW9uL0hUVFBVdGlsaXR5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmNTExMmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9jb21tb24vSFRUUFV0aWxpdHkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDEyNCAgIDE2NzQ4NyBnaWxiZXJ0YUBjYS5pYm0uY29tIC0gR2lsYmVydCBBbmRyZXdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmNvbW1vbjsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuSHR0cFVSTENvbm5lY3Rpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEubmV0LlVSTENvbm5lY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBIVFRQVXRpbGl0eSB7Ci0KLQlwdWJsaWMgU3RyaW5nIGhhbmRsZVJlZGlyZWN0KFN0cmluZyB1cmxTdHJpbmcpewotCQlVUkxDb25uZWN0aW9uIGNvbm4gPSBudWxsOwotCQlTdHJpbmcgdXJsUmVkaXJlY3QgPSB1cmxTdHJpbmc7Ci0JCWludCB0aW1lID0gMDsKLQkJd2hpbGUodXJsUmVkaXJlY3QhPSBudWxsKXsKLQkJCWlmICh0aW1lID09IDYpIHJldHVybiB1cmxSZWRpcmVjdDsKLQkJCXRyeXsKLQkJCQlVUkwgdXJsID0gbmV3IFVSTCh1cmxSZWRpcmVjdCk7Ci0JCQkJY29ubiA9IHVybC5vcGVuQ29ubmVjdGlvbigpOwotCQkJfWNhdGNoKEV4Y2VwdGlvbiBleGMpewotCQkJCXJldHVybiB1cmxSZWRpcmVjdDsKLQkJCX0KLQkJCWlmIChjb25uIGluc3RhbmNlb2YgSHR0cFVSTENvbm5lY3Rpb24pCi0JCQkJewotCQkJCUh0dHBVUkxDb25uZWN0aW9uIGh0dHAgPSAoSHR0cFVSTENvbm5lY3Rpb24pIGNvbm47Ci0JCQkJaHR0cC5zZXRJbnN0YW5jZUZvbGxvd1JlZGlyZWN0cyhmYWxzZSk7Ci0JICAgICAgICAgCi0JCQkJdHJ5ewotCQkJCQlpbnQgY29kZSA9IGh0dHAuZ2V0UmVzcG9uc2VDb2RlKCk7Ci0JCQkJCWlmIChjb2RlID49IDMwMCAmJiBjb2RlIDw9IDMwNyAmJiBjb2RlICE9IDMwNiAmJgotCSAgICAgICAgCQkJIGNvZGUgIT0gSHR0cFVSTENvbm5lY3Rpb24uSFRUUF9OT1RfTU9ESUZJRUQpCi0JCQkJCXsKLQkJCQkJCVN0cmluZyB1cmxSZWRpcmVjdDIgPSBjaGFuZ2VTbGFzaChodHRwLmdldEhlYWRlckZpZWxkKCJMb2NhdGlvbiIpKTsKLQkgICAgICAgICAgIAkgCQlpZiAodXJsUmVkaXJlY3QyID09IG51bGwgfHwgdXJsUmVkaXJlY3QuZXF1YWxzKHVybFJlZGlyZWN0MikpIHJldHVybiB1cmxSZWRpcmVjdDsKLQkgICAgICAgICAgCSAJCWVsc2UgdXJsUmVkaXJlY3QgPSB1cmxSZWRpcmVjdDI7Ci0JCQkJCX1lbHNlIHJldHVybiB1cmxSZWRpcmVjdDsKLQkJCQkKLQkJCQkKLQkJCQl9Y2F0Y2goSU9FeGNlcHRpb24gZXhjKXsKLQkJCQkJcmV0dXJuIHVybFJlZGlyZWN0OyAKLQkJCQl9Ci0JCQl9Ci0JCQllbHNlIHJldHVybiB1cmxSZWRpcmVjdDsKLQkJCXRpbWUrKzsKLQkJfQotCQlyZXR1cm4gdXJsU3RyaW5nOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgY2hhbmdlU2xhc2goU3RyaW5nIHVybCl7Ci0JCVN0cmluZyB0ZW1wID0gIiI7Ci0JCXRyeXsKLQkJCXRlbXAgPSB1cmwucmVwbGFjZSgnXFwnLCAnLycpOwotCQl9Y2F0Y2goRXhjZXB0aW9uIGV4Yyl7Ci0JCQlyZXR1cm4gdXJsOwotCQl9Ci0JCXJldHVybiB0ZW1wOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvY29tbW9uL0xpdmVXU0RMRmlsdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2NvbW1vbi9MaXZlV1NETEZpbHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2RjNjBhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvY29tbW9uL0xpdmVXU0RMRmlsdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmNvbW1vbjsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5TZXJ2aWNlOwotaW1wb3J0IGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUEFkZHJlc3M7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEFkZHJlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci5kaXNjb3ZlcnkuV2ViU2VydmljZXNQYXJzZXJFeHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldXV0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgTGl2ZVdTRExGaWx0ZXIgZXh0ZW5kcyBUaHJlYWQKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgd3NkbFVSTF87Ci0gIHByaXZhdGUgYm9vbGVhbiBmaW5pc2hfOwotICBwcml2YXRlIGJvb2xlYW4gbGl2ZV87Ci0KLSAgcHVibGljIExpdmVXU0RMRmlsdGVyKFN0cmluZyB3c2RsVVJMKQotICB7Ci0gICAgd3NkbFVSTF8gPSB3c2RsVVJMOwotICAgIGZpbmlzaF8gPSBmYWxzZTsKLSAgICBsaXZlXyA9IGZhbHNlOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXU0RMVVJMKCkKLSAgewotICAgIHJldHVybiB3c2RsVVJMXzsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzRmluaXNoKCkKLSAgewotICAgIHJldHVybiBmaW5pc2hfOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNXU0RMTGl2ZSgpCi0gIHsKLSAgICByZXR1cm4gbGl2ZV87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBydW4oKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgbGl2ZV8gPSB2YWxpZGF0ZVdTREwoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgIHsKLSAgICAJU3lzdGVtLm91dC5wcmludGxuKCJUaHJvd2luZyBleGNlcHRpb24gIiArIHQuZ2V0TWVzc2FnZSgpKTsKLSAgICAgIGxpdmVfID0gZmFsc2U7Ci0gICAgfQotICAgIGZpbmFsbHkKLSAgICB7Ci0gICAgICBmaW5pc2hfID0gdHJ1ZTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gdmFsaWRhdGVXU0RMKCkgdGhyb3dzIFdTRExFeGNlcHRpb24sIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIFdXV0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uCi0gIHsKLSAgCVdlYlNlcnZpY2VzUGFyc2VyRXh0IHBhcnNlciA9IG5ldyBXZWJTZXJ2aWNlc1BhcnNlckV4dCgpOwotICAJRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gcGFyc2VyLmdldFdTRExEZWZpbml0aW9uVmVyYm9zZSh3c2RsVVJMXyk7Ci0gIAlTeXN0ZW0ub3V0LnByaW50bG4oIndzZGxVUkxfICIgKyB3c2RsVVJMXy50b1N0cmluZygpKTsKLSAgICBNYXAgc2VydmljZXMgPSBkZWZpbml0aW9uLmdldFNlcnZpY2VzKCk7Ci0gICAgSXRlcmF0b3Igc2VydmljZUl0ZXJhdG9yID0gc2VydmljZXMudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICBTeXN0ZW0ub3V0LnByaW50bG4oInNlcnZpY2VJdGVyYXRvciAiICsgc2VydmljZUl0ZXJhdG9yLnRvU3RyaW5nKCkpOwotICAgIHdoaWxlIChzZXJ2aWNlSXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIFNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKXNlcnZpY2VJdGVyYXRvci5uZXh0KCk7Ci0gICAgICBNYXAgcG9ydHMgPSBzZXJ2aWNlLmdldFBvcnRzKCk7Ci0gICAgICBJdGVyYXRvciBwb3J0SXRlcmF0b3IgPSBwb3J0cy52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKHBvcnRJdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIFBvcnQgcG9ydCA9IChQb3J0KXBvcnRJdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgIExpc3QgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzID0gcG9ydC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgICAgSXRlcmF0b3IgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzSXRlcmF0b3IgPSBleHRlbnNpYmlsaXR5RWxlbWVudHMuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKGV4dGVuc2liaWxpdHlFbGVtZW50c0l0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuc2liaWxpdHlFbGVtZW50ID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWV4dGVuc2liaWxpdHlFbGVtZW50c0l0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgICBpZiAoKGV4dGVuc2liaWxpdHlFbGVtZW50IGluc3RhbmNlb2YgU09BUEFkZHJlc3MpIHx8IChleHRlbnNpYmlsaXR5RWxlbWVudCBpbnN0YW5jZW9mIEhUVFBBZGRyZXNzKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9jb21tb24vV1NETFV0aWxpdHkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvY29tbW9uL1dTRExVdGlsaXR5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2MTYwYzQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9jb21tb24vV1NETFV0aWxpdHkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuY29tbW9uOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5TZXJ2aWNlOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQQWRkcmVzczsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQWRkcmVzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuV3N0V1NQbHVnaW5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci0KLS8qKgotICogVXRpbGl0aWVzIGZvciB3b3JraW5nIHdpdGggYSB3b3Jrc3BhY2UgV1NETCBmaWxlIHJlc291cmNlLgotICogCi0gKiBAYXV0aG9yIGpvYW4KLSAqCi0gKi8KLQotcHVibGljIGNsYXNzIFdTRExVdGlsaXR5IHsKLQotCXByb3RlY3RlZCBEZWZpbml0aW9uIGRlZmluaXRpb25fID0gbnVsbDsKLQlwcm90ZWN0ZWQgSVJlc291cmNlIHJlc291cmNlXyA9IG51bGw7Ci0JcHJvdGVjdGVkIFN0cmluZyBzZXJ2aWNlTmFtZV8gPSAiIjsKLQlwcm90ZWN0ZWQgVVJMIHVybF8gPSBudWxsOwotCQotCXB1YmxpYyBXU0RMVXRpbGl0eShJUmVzb3VyY2UgcmVzKQotCXsKLSAJCXN1cGVyKCk7Ci0JCXJlc291cmNlXyA9IHJlczsKLQkJYnVpbGREZWZpbml0aW9uKCk7CQkKLQl9Ci0JCi0JcHJvdGVjdGVkIGJvb2xlYW4gYnVpbGREZWZpbml0aW9uKCkKLQl7CQkKLQkJaWYgKHJlc291cmNlXy5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZJTEUpCi0JICAgIHsgICAgICAgIAotCSAgICAgICAgU3RyaW5nIGV4dCA9IHJlc291cmNlXy5nZXRGaWxlRXh0ZW5zaW9uKCk7Ci0JICAgICAgICBTdHJpbmcgcmVzUGF0aCA9IHJlc291cmNlXy5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCk7Ci0JICAgICAgICBpZiAoZXh0ICE9IG51bGwpCi0JICAgICAgICB7Ci0JCSAgICAgIAkKLQkJICAgICAgICBXZWJTZXJ2aWNlc1BhcnNlciBwYXJzZXIgPSBuZXcgV2ViU2VydmljZXNQYXJzZXIoKTsKLQkJICAgICAgCQkJICAgICAgCQotCQkgICAgICAJdHJ5IHsKLQkJICAgICAgCQlkZWZpbml0aW9uXyA9IHBhcnNlci5nZXRXU0RMRGVmaW5pdGlvbigicGxhdGZvcm06IiArIHJlc1BhdGgpOwotCQkgICAgICAJICAgaWYgKGRlZmluaXRpb25fID09IG51bGwpewkJICAgICAgCQkgICAKLQkJICAgICAgCQkgdGhyb3cgbmV3IEV4Y2VwdGlvbihOTFMuYmluZChXc3RXU1BsdWdpbk1lc3NhZ2VzLk1TR19VTkFCTEVfVE9fUkVTT0xWRV9QTEFURk9STV9VUkksIHJlc1BhdGgpKTsJCSAgICAgIAkJIAotCQkgICAgICAJICAgfQotCQkgICAgICAJfQotCQkgICAgICAJY2F0Y2ggKEV4Y2VwdGlvbiBlKXsKLQkJICAgICAgCQlyZXR1cm4gZmFsc2U7Ci0JCSAgICAgIAl9Ci0JICAgICAgICB9Ci0JICAgICAgICBlbHNlIGlmIChyZXNQYXRoLmluZGV4T2YoJz8nKSA+IDApICAvL2RlcGxveWVkIHJlc291cmNlCi0JICAgICAgICB7Ci0JICAgICAgICAJV2ViU2VydmljZXNQYXJzZXIgcGFyc2VyID0gbmV3IFdlYlNlcnZpY2VzUGFyc2VyKCk7Ci0JCSAgICAgIAkJCSAgICAgIAkKLQkJICAgICAgCXRyeSB7Ci0JCSAgICAgIAkJZGVmaW5pdGlvbl8gPSBwYXJzZXIuZ2V0V1NETERlZmluaXRpb24oImh0dHA6IiArIHJlc1BhdGgpOwotCQkgICAgICAJICAgaWYgKGRlZmluaXRpb25fID09IG51bGwpewotCQkgICAgICAJCSB0aHJvdyBuZXcgRXhjZXB0aW9uKE5MUy5iaW5kKFdzdFdTUGx1Z2luTWVzc2FnZXMuTVNHX1VOQUJMRV9UT19SRVNPTFZFX0hUVFAsIHJlc1BhdGgpKTsJCSAgICAgIAkJCi0KLQkJICAgICAgCSAgIH0KLQkJICAgICAgCX0KLQkJICAgICAgCWNhdGNoIChFeGNlcHRpb24gZSl7Ci0JCSAgICAgIAkJcmV0dXJuIGZhbHNlOwotCQkgICAgICAJfQotCSAgICAgICAgfQotCSAgICB9Ci0JCXNlcnZpY2VOYW1lXyA9ICIiOwkJCi0JCXJldHVybiB0cnVlOwotCX0KLQkKLQkvKioKLQkgKiBEZXRlcm1pbmVzIHRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlIGRlZmluZWQgaW4gdGhlIFdTREwgZmlsZQotCSAqIAotCSAqIEBwYXJhbSByZXNvdXJjZSBUaGUgd29ya3NwYWNlIHJlc291cmNlIGZvciB0aGUgV1NETCBmaWxlCi0JICogQHJldHVybiBSZXR1cm5zIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHZhbHVlIG9mIHRoZSBuYW1lIGF0dHJpYnV0ZSBvZiB0aGUgc2VydmljZSBlbGVtZW50IAotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0U2VydmljZU5hbWUoKQotCXsKLQkJaWYgKHNlcnZpY2VOYW1lXy5lcXVhbHMoIiIpKQotCQl7Ci0JCQlpZiAoZGVmaW5pdGlvbl8gIT0gbnVsbCkKLQkJCXsKLQkJCQkgICBNYXAgc2VydmljZXNNYXAgPSBkZWZpbml0aW9uXy5nZXRTZXJ2aWNlcygpOyAgLy9qdmggLSBuZWVkIHRvIGhhbmRsZSBudWxsIGRlZmluaXRpb24gaGVyZS4uLi4KLQkJCSAgCSAgIE9iamVjdFtdIHNlcnZpY2VzID0gc2VydmljZXNNYXAudmFsdWVzKCkudG9BcnJheSgpOwotCQkJICAJICAgCi0JCQkgIAkgICAvLyBUT0RPOiBoZXJlIGNhbiBkZXRlY3QgaWYgbm8gc2VydmljZSB0YWcgLSBzZW5kIGFwcHJvcHJpYXRlIG1lc3NhZ2UKLQkJCSAgCSAgIC8vIFRPRE86IHdoYXQgaWYgPiAxIHNlcnZpY2UgZGVmaW5lZCBpbiB0aGUgV1NETD8KLQkJCSAgCSAgIC8vIGZvciBub3cgcmV0dXJuIHRoZSBmaXJzdCBzZXJ2aWNlIG5hbWUgZm91bmQuLi4KLQkJCSAgCSAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VydmljZXMubGVuZ3RoOyBpKyspIHsKLQkJCQkJICAgU2VydmljZSBzID0gKFNlcnZpY2Upc2VydmljZXNbaV07Ci0JCQkJCSAgIFN0cmluZyBxU3RyaW5nID0gcy5nZXRRTmFtZSgpLnRvU3RyaW5nKCk7Ci0JCQkJCSAgIAotCQkJCQkgICAvL2dldCBuYW1lIG9ubHkgZnJvbSBxdWFsaWZpZWQgc3RyaW5nCi0JCQkJCSAgIGludCBpbmRleDEgPSBxU3RyaW5nLmluZGV4T2YoIn0iKSsxOyAgLy8kTk9OLU5MUy0xJAotCQkJCQkgICBpbnQgaW5kZXgyID0gcVN0cmluZy5sZW5ndGgoKTsKLQkJCQkJICAgCi0JCQkJCSAgIHNlcnZpY2VOYW1lXyA9IHFTdHJpbmcuc3Vic3RyaW5nKGluZGV4MSwgaW5kZXgyKTsJCQkJICAgCi0JCQkgIAkgICB9ICAJCi0JCQl9CQkJCSAgCi0JCX0KLQkgIAlyZXR1cm4gc2VydmljZU5hbWVfOwotCX0KLQkKLQlwdWJsaWMgVVJMIGdldFdTRExBZGRyZXNzKCkgCi0gICAgewotCSAgIGlmICh1cmxfID09IG51bGwpCi0JICAgewkgICAKLQkgICAgICAgU3RyaW5nIGxvY2F0aW9uVVJJID0gbnVsbDsKLQkgICAgICAgaWYgKGRlZmluaXRpb25fICE9IG51bGwpCi0JICAgICAgIHsKLQkgICAgCSAgIE1hcCBzZXJ2aWNlc01hcCA9IGRlZmluaXRpb25fLmdldFNlcnZpY2VzKCk7Ci0JCSAgCSAgIE9iamVjdFtdIHNlcnZpY2VzID0gc2VydmljZXNNYXAudmFsdWVzKCkudG9BcnJheSgpOwotCQkgIAkgICAKLQkJICAJICAgLy8gVE9ETzogaGVyZSBjYW4gZGV0ZWN0IGlmIG5vIHNlcnZpY2UgdGFnIC0gc2VuZCBhcHByb3ByaWF0ZSBtZXNzYWdlCi0JCSAgCSAgIC8vIFRPRE86IHdoYXQgaWYgPiAxIHNlcnZpY2UgZGVmaW5lZCBpbiB0aGUgV1NETD8KLQkJICAJICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZXJ2aWNlcy5sZW5ndGg7IGkrKykgewotCQkJCSAgIFNlcnZpY2UgcyA9IChTZXJ2aWNlKXNlcnZpY2VzW2ldOwotCQkJCSAgIE1hcCBwb3J0c01hcCA9IHMuZ2V0UG9ydHMoKTsKLQkJCQkgICBPYmplY3RbXSBwb3J0cyA9IHBvcnRzTWFwLnZhbHVlcygpLnRvQXJyYXkoKTsKLQkJCi0JCQkJICAgLy8gVE9ETzogaGVyZSBjYW4gZGV0ZWN0IGlmID4gMSBwb3J0IGZvciB0aGUgc2VydmljZSAtIGRldGVybWluZSBob3cgdG8gaGFuZGxlCi0JCQkJICAgZm9yIChpbnQgaiA9IDA7IGogPCBwb3J0cy5sZW5ndGg7IGorKykgewotCQkJCQkJUG9ydCBwID0gKFBvcnQpcG9ydHNbal07Ci0JCQkJCQlMaXN0IGV4dExpc3QgPSBwLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotCQkJCQkJCi0JCQkJCQlmb3IgKGludCBrID0gMDsgaiA8IGV4dExpc3Quc2l6ZSgpOyBqKyspewotCQkJCQkJICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0RWxlbWVudCA9IChFeHRlbnNpYmlsaXR5RWxlbWVudClleHRMaXN0LmdldChrKTsKLQkJCQkJCSAgICAgIGlmIChleHRFbGVtZW50IGluc3RhbmNlb2YgU09BUEFkZHJlc3MpCi0JCQkJCQkgICAgICB7ICAKLQkJCQkJCSAgICAgICAgbG9jYXRpb25VUkkgPSAoKFNPQVBBZGRyZXNzKWV4dEVsZW1lbnQpLmdldExvY2F0aW9uVVJJKCk7Ci0JCQkJCQkgICAgICB9Ci0JCQkJCQkgICAgICBlbHNlIGlmIChleHRFbGVtZW50IGluc3RhbmNlb2YgSFRUUEFkZHJlc3MpCi0JCQkJCQkgICAgICAgewotCQkJCQkJICAgICAgICBsb2NhdGlvblVSSSA9ICgoSFRUUEFkZHJlc3MpZXh0RWxlbWVudCkuZ2V0TG9jYXRpb25VUkkoKTsJCQkJCQkgICAgICAgIAotCQkJCQkJICAgICAgfQotCQkJCQkJICAgICAgZWxzZQotCQkJCQkJICAgICAgewotCQkJCQkJICAgIAkgIC8vVE9ETzogaWYgbm90IFNPQVAgb3IgSFRUUCAtIGhvdyBkbyB3ZSB3YW50IHRvIGhhbmRsZSBpdC4uLiAKLQkJCQkJCSAgICAgIH0KLQkJCQkJCSB9CQkJCQkKLQkJCQkgICB9Ci0JCSAgCSAgIH0gIAkJICAgIAkKLQkJICAJIAotCQkJICAgIHRyeSB7Ci0JCQkgICAgICAgICB1cmxfID0gbmV3IFVSTChsb2NhdGlvblVSSSArICI/IiArIHJlc291cmNlXy5nZXRGaWxlRXh0ZW5zaW9uKCkpOwkgICAgICAgICAKLQkJCSAgICB9Ci0JCQkgICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBtYWxFeGMpe30KLSAgICAgICAgICAgIH0JICAJCSAgICAgIAotCSAgICB9Ci0JICAgcmV0dXJuIHVybF87Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhL0xhYmVsc0FuZElkcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhL0xhYmVsc0FuZElkcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODI4ZDY3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YS9MYWJlbHNBbmRJZHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGE7Ci0KLXB1YmxpYyBjbGFzcyBMYWJlbHNBbmRJZHMKLXsKLSAgcHJpdmF0ZSBTdHJpbmdbXSBsYWJlbHNfOwotICBwcml2YXRlIFN0cmluZ1tdIGlkc187Ci0gIAotICAvKioKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBpZHNfLgotICAgKi8KLSAgcHVibGljIFN0cmluZ1tdIGdldElkc18oKQotICB7Ci0gICAgcmV0dXJuIGlkc187Ci0gIH0KLSAgLyoqCi0gICAqIEBwYXJhbSBpZHNfIFRoZSBpZHNfIHRvIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldElkc18oU3RyaW5nW10gaWRzXykKLSAgewotICAgIHRoaXMuaWRzXyA9IGlkc187Ci0gIH0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgbGFiZWxzXy4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRMYWJlbHNfKCkKLSAgewotICAgIHJldHVybiBsYWJlbHNfOwotICB9Ci0gIC8qKgotICAgKiBAcGFyYW0gbGFiZWxzXyBUaGUgbGFiZWxzXyB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRMYWJlbHNfKFN0cmluZ1tdIGxhYmVsc18pCi0gIHsKLSAgICB0aGlzLmxhYmVsc18gPSBsYWJlbHNfOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9CYXNpY0Nvbm5lY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL0Jhc2ljQ29ubmVjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOGYxMmRhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL0Jhc2ljQ29ubmVjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbDsKLQotcHVibGljIGNsYXNzIEJhc2ljQ29ubmVjdGlvbiBpbXBsZW1lbnRzIENvbm5lY3Rpb24KLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICBwcml2YXRlIFJlbCBmUmVsOwotICBwcml2YXRlIEVsZW1lbnQgZkVsZW1lbnQ7Ci0gIHByaXZhdGUgQ29ubmVjdGlvbiBmT3Bwb3NpbmdDb25uZWN0aW9uOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9VVEJPVU5EID0gMDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5CT1VORCA9IDE7Ci0KLSAgcHVibGljIHN0YXRpYyBDb25uZWN0aW9uW10gY3JlYXRlUGFpciAoIFJlbCBvdXRib3VuZFJlbCwgRWxlbWVudCB0YXJnZXRFbGVtZW50LCBSZWwgaW5ib3VuZFJlbCwgRWxlbWVudCBzb3VyY2VFbGVtZW50ICkKLSAgewotICAgIEJhc2ljQ29ubmVjdGlvbiBvdXRib3VuZENvbm5lY3Rpb24gPSBuZXcgQmFzaWNDb25uZWN0aW9uKG91dGJvdW5kUmVsLHRhcmdldEVsZW1lbnQpOwotICAgIEJhc2ljQ29ubmVjdGlvbiBpbmJvdW5kQ29ubmVjdGlvbiA9IG5ldyBCYXNpY0Nvbm5lY3Rpb24oaW5ib3VuZFJlbCxzb3VyY2VFbGVtZW50KTsKLSAgICBvdXRib3VuZENvbm5lY3Rpb24uZk9wcG9zaW5nQ29ubmVjdGlvbiA9IGluYm91bmRDb25uZWN0aW9uOwotICAgIGluYm91bmRDb25uZWN0aW9uLmZPcHBvc2luZ0Nvbm5lY3Rpb24gPSBvdXRib3VuZENvbm5lY3Rpb247Ci0gICAgcmV0dXJuIG5ldyBDb25uZWN0aW9uW10ge291dGJvdW5kQ29ubmVjdGlvbixpbmJvdW5kQ29ubmVjdGlvbn07Ci0gIH0KLQotICBwdWJsaWMgQmFzaWNDb25uZWN0aW9uICggUmVsIHJlbCwgRWxlbWVudCBlbGVtZW50ICkKLSAgewotICAgIGZSZWwgPSByZWw7Ci0gICAgZkVsZW1lbnQgPSBlbGVtZW50OwotICAgIGZPcHBvc2luZ0Nvbm5lY3Rpb24gPSBudWxsOwotICB9Ci0KLSAgcHVibGljIFJlbCBnZXRSZWwgKCkKLSAgewotICAgIHJldHVybiBmUmVsOwotICB9Ci0KLSAgcHVibGljIEVsZW1lbnQgZ2V0RWxlbWVudCAoKQotICB7Ci0gICAgcmV0dXJuIGZFbGVtZW50OwotICB9Ci0KLSAgcHVibGljIENvbm5lY3Rpb24gZ2V0T3Bwb3NpbmdDb25uZWN0aW9uICgpCi0gIHsKLSAgICByZXR1cm4gZk9wcG9zaW5nQ29ubmVjdGlvbjsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcgKCkKLSAgewotICAgIHJldHVybiBmRWxlbWVudC5nZXROYW1lKCk7Ci0gIH0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvQmFzaWNFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9CYXNpY0VsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFkZmI4Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9CYXNpY0VsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotcHVibGljIGNsYXNzIEJhc2ljRWxlbWVudCBpbXBsZW1lbnRzIEVsZW1lbnQKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICBwcml2YXRlIFN0cmluZyBmTmFtZTsKLSAgcHJpdmF0ZSBTdHJpbmcgZk1VSUQ7Ci0gIHByaXZhdGUgTW9kZWwgZk1vZGVsOwotICBwcml2YXRlIEhhc2h0YWJsZSBmUmVsczsKLSAgcHJpdmF0ZSBIYXNodGFibGUgZlByb3BlcnRpZXM7Ci0gIHByaXZhdGUgVmVjdG9yIGZMaXN0ZW5lcnM7Ci0KLSAgcHVibGljIEJhc2ljRWxlbWVudCAoIFN0cmluZyBuYW1lLCBNb2RlbCBtb2RlbCApCi0gIHsKLSAgICBmTmFtZSA9IG5hbWU7Ci0gICAgc2V0TVVJRChtb2RlbC5tYWtlTVVJRChuYW1lKSk7Ci0gICAgbW9kZWwuYWRkRWxlbWVudCh0aGlzKTsKLSAgICBmTW9kZWwgPSBtb2RlbDsKLSAgICBmUmVscyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBmTGlzdGVuZXJzID0gbmV3IFZlY3RvcigpOwotICAgIGZQcm9wZXJ0aWVzID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIGZQcm9wZXJ0aWVzLnB1dChQcm9wZXJ0eS5OQU1FLG5ldyBCYXNpY1Byb3BlcnR5KFByb3BlcnR5Lk5BTUUsZk5hbWUpKTsKLSAgfQotCi0gIHB1YmxpYyBCYXNpY0VsZW1lbnQgKCBTdHJpbmcgbmFtZSwgRWxlbWVudCBlbGVtZW50LCBTdHJpbmcgb3V0Ym91bmRSZWxOYW1lLCBTdHJpbmcgaW5ib3VuZFJlbE5hbWUgKQotICB7Ci0gICAgdGhpcyhuYW1lLGVsZW1lbnQuZ2V0TW9kZWwoKSk7Ci0gICAgY29ubmVjdChlbGVtZW50LG91dGJvdW5kUmVsTmFtZSxpbmJvdW5kUmVsTmFtZSk7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIGEgY2xvbmUgb2YgdGhpcyA8Y29kZT5FbGVtZW50PC9jb2RlPgotICAqIG9mIHRoZSBzYW1lIGNsYXNzIGFuZCB3aXRoIHRoZSBzYW1lIG5hbWUgYW5kIG1vZGVsLAotICAqIGJ1dCB3aXRoIG5vIFByb3BlcnRpZXMsIFJlbHMgb3IgTGlzdGVuZXJzIGV4Y2VwdCBmb3IKLSAgKiB0aGUge0BsaW5rIFByb3BlcnR5I05BTUUgTkFNRX0gcHJvcGVydHkuCi0gICogQHJldHVybiBPYmplY3QgQSBuZXcgRWxlbWVudC4KLSAgKi8KLSAgcHVibGljIEVsZW1lbnQgc2hhbGxvd0Nsb25lICgpCi0gIHsKLSAgICByZXR1cm4gbmV3IEJhc2ljRWxlbWVudChmTmFtZSxmTW9kZWwpOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyBhIGNsb25lIG9mIHRoaXMgPGNvZGU+RWxlbWVudDwvY29kZT4KLSAgKiBvZiB0aGUgc2FtZSBjbGFzcyBhbmQgd2l0aCB0aGUgc2FtZSBuYW1lIGFuZCBtb2RlbAotICAqIGFuZCB3aXRoIGEgY29weSBvZiB0aGUgb3JpZ2luYWwgRWxlbWVudCdzIFByb3BlcnRpZXMuCi0gICogVGhlIFJlbHMgYW5kIExpc3RlbmVycyBhcmUgbm90IGNsb25lZC4KLSAgKiBAcmV0dXJuIEVsZW1lbnQgQSBuZXcgRWxlbWVudC4KLSAgKi8KLSAgcHVibGljIGZpbmFsIEVsZW1lbnQgZGVlcENsb25lICgpCi0gIHsKLSAgICBFbGVtZW50IG5ld0VsZW1lbnQgPSBzaGFsbG93Q2xvbmUoKTsKLSAgICBFbnVtZXJhdGlvbiBlID0gZ2V0UHJvcGVydGllcygpOwotICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIFByb3BlcnR5IHByb3BlcnR5ID0gKFByb3BlcnR5KWUubmV4dEVsZW1lbnQoKTsKLSAgICAgIFByb3BlcnR5IG5ld1Byb3BlcnR5ID0gKFByb3BlcnR5KXByb3BlcnR5LnNoYWxsb3dDbG9uZSgpOwotICAgICAgbmV3RWxlbWVudC5zZXRQcm9wZXJ0eShuZXdQcm9wZXJ0eSk7Ci0gICAgfQotICAgIHJldHVybiBuZXdFbGVtZW50OwotICB9Ci0KLSAgLyoqCi0gICogTW9kZWwtVmlldy1Db250cm9sbGVyOiBBbGwgcHJvcGVydHkgY2hhbmdlcyB0byB0aGUgbW9kZWwKLSAgKiAoc3VjaCBhcyB0aG9zZSBtYWRlIGJ5IGEgd2l6YXJkIGluIHRoZSByb2xlIG9mIGEgQ29udHJvbGxlcikKLSAgKiBzaG91bGQgeWllbGQgZXZlbnRzIHRvIHdoaWNoIGFuIGludGVyZXN0ZWQgcGFydHkgY2FuIGxpc3RlbgotICAqIChzdWNoIGFzIGEgd2l6YXJkIGluIHRoZSByb2xlIG9mIGEgVmlld2VyKS4KLSAgKiBAcGFyYW0gdG1sIFRoZSBsaXN0ZW5lciB0byBhZGQuCi0gICovCi0gIHB1YmxpYyB2b2lkIGFkZExpc3RlbmVyICggRWxlbWVudExpc3RlbmVyIGxpc3RlbmVyICkKLSAgewotICAgIGZMaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsKLSAgfQotCi0gIHB1YmxpYyBNb2RlbCBnZXRNb2RlbCAoKQotICB7Ci0gICAgcmV0dXJuIGZNb2RlbDsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzVmFsaWQgKCkKLSAgewotICAgIHJldHVybiAoZk1vZGVsICE9IG51bGwgJiYgZk1vZGVsLmNvbnRhaW5zRWxlbWVudCh0aGlzKSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiByZW1vdmUgKCkKLSAgewotICAgIHJldHVybiBmTW9kZWwucmVtb3ZlRWxlbWVudCh0aGlzKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldE5hbWUgKCBTdHJpbmcgbmFtZSApCi0gIHsKLSAgICBmTmFtZSA9IG5hbWU7Ci0gICAgZlByb3BlcnRpZXMucHV0KFByb3BlcnR5Lk5BTUUsbmV3IEJhc2ljUHJvcGVydHkoUHJvcGVydHkuTkFNRSxmTmFtZSkpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXROYW1lICgpCi0gIHsKLSAgICByZXR1cm4gZk5hbWU7Ci0gIH0KLQotICAvKgotICAqIFRoZSBnZXR0ZXIgZm9yIHRoZSBNVUlECi0gICogVGhlIE1VSUQgaXMgdGhlIE1vZGVsIFVuaXF1ZSBJZGVudGlmaWVyLCBtYWRlIGZyb20gdGhlIG5hbWUgYW5kIGFuCi0gICogYXBwZW5kZWQgdW5pcXVlIG51bWJlciAKLSAgKiBAcmV0dXJuIFN0cmluZyBhIHVuaXF1ZSBpZCBmb3IgdGhpcyBlbGVtZW50IHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgbW9kZWwgCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TVVJRCgpCi0gIHsKLSAgICByZXR1cm4gZk1VSUQ7Ci0gIH0KLQotICAvKgotICAqCi0gICoKLSAgKi8KLSAgcHVibGljIGludCBnZXROdW1iZXJJRCgpCi0gIHsKLSAgICBTdHJpbmcgbnVtYmVyID0gZ2V0TVVJRCgpLnN1YnN0cmluZyhnZXROYW1lKCkubGVuZ3RoKCkpOyAgCi0gICAgcmV0dXJuIEludGVnZXIucGFyc2VJbnQobnVtYmVyKTsKLSAgfQotCi0gIC8qCi0gICogU2V0IHRoZSBNVUlEIHdoaWNoIHdhcyBtYWRlIGJ5IHRoZSBtb2RlbAotICAqIFNob3VsZCBvbmx5IGJlIHNldHRhYmxlIHdpdGhpbiB0aGlzIGVsZW1lbnQKLSAgKiBTZXQgb25jZSB1cG9uIGNyZWF0aW9uLCB5b3UgY2FuIGNoYW5nZSB0aGUgbmFtZQotICAqIGJ1dCB0aGUgaWQgd2lsbCByZW1haW4gY29uc3RhbnQuCi0gICovCi0gIHByaXZhdGUgdm9pZCBzZXRNVUlEKFN0cmluZyBNVUlEKQotICB7Ci0gICAgZk1VSUQgPSBNVUlEOwotICB9Ci0gCi0gIHB1YmxpYyB2b2lkIHNldFByb3BlcnR5ICggUHJvcGVydHkgcHJvcGVydHkgKQotICB7Ci0gICAgU3RyaW5nIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5LmdldE5hbWUoKTsKLSAgICBQcm9wZXJ0eSBvbGRQcm9wZXJ0eSA9IGdldFByb3BlcnR5KHByb3BlcnR5TmFtZSk7Ci0gICAgZlByb3BlcnRpZXMucHV0KHByb3BlcnR5TmFtZSxwcm9wZXJ0eSk7Ci0gICAgaWYgKG9sZFByb3BlcnR5ID09IG51bGwpCi0gICAgewotICAgICAgUHJvcGVydHlBZGRFdmVudCBldmVudCA9IG5ldyBQcm9wZXJ0eUFkZEV2ZW50KHRoaXMscHJvcGVydHkpOwotICAgICAgRW51bWVyYXRpb24gZSA9IGZMaXN0ZW5lcnMuZWxlbWVudHMoKTsKLSAgICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKQotICAgICAgewotICAgICAgICAoKEVsZW1lbnRMaXN0ZW5lcillLm5leHRFbGVtZW50KCkpLnByb3BlcnR5QWRkZWQoZXZlbnQpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgT2JqZWN0IG9sZFZhbHVlID0gb2xkUHJvcGVydHkuZ2V0VmFsdWUoKTsKLSAgICAgIE9iamVjdCBuZXdWYWx1ZSA9IHByb3BlcnR5LmdldFZhbHVlKCk7Ci0gICAgICBpZiAob2xkVmFsdWUgIT0gbmV3VmFsdWUpCi0gICAgICB7Ci0gICAgICAgIGlmIChvbGRWYWx1ZSA9PSBudWxsIHx8IG5ld1ZhbHVlID09IG51bGwgfHwgKCFvbGRWYWx1ZS5lcXVhbHMobmV3VmFsdWUpKSkKLSAgICAgICAgewotICAgICAgICAgIFByb3BlcnR5Q2hhbmdlRXZlbnQgZXZlbnQgPSBuZXcgUHJvcGVydHlDaGFuZ2VFdmVudCh0aGlzLHByb3BlcnR5LG9sZFByb3BlcnR5KTsKLSAgICAgICAgICBFbnVtZXJhdGlvbiBlID0gZkxpc3RlbmVycy5lbGVtZW50cygpOwotICAgICAgICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgICgoRWxlbWVudExpc3RlbmVyKWUubmV4dEVsZW1lbnQoKSkucHJvcGVydHlDaGFuZ2VkKGV2ZW50KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHByb3BlcnR5TmFtZS5lcXVhbHMoUHJvcGVydHkuTkFNRSkpIGZOYW1lID0gcHJvcGVydHkuZ2V0VmFsdWUoKS50b1N0cmluZygpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0UHJvcGVydHlBc09iamVjdCAoIFN0cmluZyBuYW1lLCBPYmplY3QgdmFsdWUgKQotICB7Ci0gICAgc2V0UHJvcGVydHkobmV3IEJhc2ljUHJvcGVydHkobmFtZSx2YWx1ZSkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0UHJvcGVydHlBc1N0cmluZyAoIFN0cmluZyBuYW1lLCBTdHJpbmcgdmFsdWUgKQotICB7Ci0gICAgc2V0UHJvcGVydHkobmV3IEJhc2ljUHJvcGVydHkobmFtZSx2YWx1ZSkpOwotICB9Ci0KLSAgcHVibGljIFByb3BlcnR5IGdldFByb3BlcnR5ICggU3RyaW5nIG5hbWUgKQotICB7Ci0gICAgcmV0dXJuIChQcm9wZXJ0eSlmUHJvcGVydGllcy5nZXQobmFtZSk7Ci0gIH0KLQotICBwdWJsaWMgT2JqZWN0IGdldFByb3BlcnR5QXNPYmplY3QgKCBTdHJpbmcgbmFtZSApCi0gIHsKLSAgICBQcm9wZXJ0eSBwcm9wZXJ0eSA9IGdldFByb3BlcnR5KG5hbWUpOwotICAgIHJldHVybiAocHJvcGVydHkgPT0gbnVsbCA/IG51bGwgOiBwcm9wZXJ0eS5nZXRWYWx1ZSgpKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHlBc1N0cmluZyAoIFN0cmluZyBuYW1lICkKLSAgewotICAgIFByb3BlcnR5IHByb3BlcnR5ID0gZ2V0UHJvcGVydHkobmFtZSk7Ci0gICAgcmV0dXJuIChwcm9wZXJ0eSA9PSBudWxsID8gbnVsbCA6IHByb3BlcnR5LmdldFZhbHVlQXNTdHJpbmcoKSk7Ci0gIH0KLQotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0UHJvcGVydGllcyAoKQotICB7Ci0gICAgcmV0dXJuIGZQcm9wZXJ0aWVzLmVsZW1lbnRzKCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBjb25uZWN0ICggRWxlbWVudCB0YXJnZXRFbGVtZW50LCBTdHJpbmcgb3V0Ym91bmRSZWxOYW1lLCBTdHJpbmcgaW5ib3VuZFJlbE5hbWUgKQotICB7Ci0gICAgaWYgKGZNb2RlbCA9PSBudWxsIHx8IGZNb2RlbCAhPSB0YXJnZXRFbGVtZW50LmdldE1vZGVsKCkpIHJldHVybiBmYWxzZTsKLQotICAgIEVsZW1lbnQgc291cmNlRWxlbWVudCA9IHRoaXM7Ci0gICAgUmVsIG91dGJvdW5kUmVsID0gc291cmNlRWxlbWVudC5nZXRSZWwob3V0Ym91bmRSZWxOYW1lKTsKLSAgICBSZWwgaW5ib3VuZFJlbCA9IHRhcmdldEVsZW1lbnQuZ2V0UmVsKGluYm91bmRSZWxOYW1lKTsKLSAgICBDb25uZWN0aW9uW10gcGFpciA9IEJhc2ljQ29ubmVjdGlvbi5jcmVhdGVQYWlyKG91dGJvdW5kUmVsLHRhcmdldEVsZW1lbnQsaW5ib3VuZFJlbCxzb3VyY2VFbGVtZW50KTsKLSAgICBvdXRib3VuZFJlbC5hZGRDb25uZWN0aW9uKHBhaXJbQmFzaWNDb25uZWN0aW9uLk9VVEJPVU5EXSk7Ci0gICAgaW5ib3VuZFJlbC5hZGRDb25uZWN0aW9uKHBhaXJbQmFzaWNDb25uZWN0aW9uLklOQk9VTkRdKTsKLSAgICBSZWxBZGRFdmVudCBldmVudCA9IG5ldyBSZWxBZGRFdmVudChwYWlyKTsKLSAgICBFbnVtZXJhdGlvbiBlU291cmNlID0gZ2V0TGlzdGVuZXJzKCk7Ci0gICAgRW51bWVyYXRpb24gZVRhcmdldCA9IHRhcmdldEVsZW1lbnQuZ2V0TGlzdGVuZXJzKCk7Ci0gICAgd2hpbGUgKGVTb3VyY2UuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgewotICAgICAgKChFbGVtZW50TGlzdGVuZXIpZVNvdXJjZS5uZXh0RWxlbWVudCgpKS5yZWxBZGRlZChldmVudCk7Ci0gICAgfQotCi0gICAgd2hpbGUgKGVUYXJnZXQuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgewotICAgICAgKChFbGVtZW50TGlzdGVuZXIpZVRhcmdldC5uZXh0RWxlbWVudCgpKS5yZWxBZGRlZChldmVudCk7Ci0gICAgfQotCi0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGRpc2Nvbm5lY3QgKCBFbGVtZW50IHRhcmdldEVsZW1lbnQsIFN0cmluZyBvdXRib3VuZFJlbE5hbWUgKQotICB7Ci0gICAgcmV0dXJuIGRpc2Nvbm5lY3QodGFyZ2V0RWxlbWVudCxnZXRSZWwob3V0Ym91bmRSZWxOYW1lKSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBkaXNjb25uZWN0UmVsICggU3RyaW5nIG91dGJvdW5kUmVsTmFtZSApCi0gIHsKLSAgICByZXR1cm4gZGlzY29ubmVjdFJlbChnZXRSZWwob3V0Ym91bmRSZWxOYW1lKSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBkaXNjb25uZWN0QWxsICgpCi0gIHsKLSAgICBpZiAoZk1vZGVsID09IG51bGwpIHJldHVybiBmYWxzZTsKLSAgICBFbnVtZXJhdGlvbiBlID0gZlJlbHMuZWxlbWVudHMoKTsKLSAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICB7Ci0gICAgICBSZWwgcmVsID0gKFJlbCllLm5leHRFbGVtZW50KCk7Ci0gICAgICBkaXNjb25uZWN0UmVsKHJlbCk7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIEVudW1lcmF0aW9uIGdldEVsZW1lbnRzICggU3RyaW5nIHJlbE5hbWUgKQotICB7Ci0gICAgcmV0dXJuIGdldFJlbChyZWxOYW1lKS5nZXRUYXJnZXRFbGVtZW50cygpOwotICB9Ci0KLSAgcHVibGljIGludCBnZXROdW1iZXJPZkVsZW1lbnRzICggU3RyaW5nIHJlbE5hbWUgKQotICB7Ci0gICAgcmV0dXJuIGdldFJlbChyZWxOYW1lKS5nZXROdW1iZXJPZlRhcmdldEVsZW1lbnRzKCk7Ci0gIH0KLQotICBwdWJsaWMgUmVsIGdldFJlbCAoIFN0cmluZyByZWxOYW1lICkKLSAgewotICAgIFJlbCByZWwgPSAoUmVsKWZSZWxzLmdldChyZWxOYW1lKTsKLSAgICBpZiAocmVsID09IG51bGwpCi0gICAgewotICAgICAgcmVsID0gbmV3IEJhc2ljUmVsKHJlbE5hbWUsdGhpcyk7Ci0gICAgICBmUmVscy5wdXQocmVsTmFtZSxyZWwpOwotICAgIH0KLSAgICByZXR1cm4gcmVsOwotICB9Ci0KLSAgcHVibGljIEVudW1lcmF0aW9uIGdldFJlbHMgKCkKLSAgewotICAgIHJldHVybiBmUmVscy5lbGVtZW50cygpOwotICB9Ci0KLSAgcHVibGljIEVudW1lcmF0aW9uIGdldExpc3RlbmVycygpCi0gIHsKLSAgICByZXR1cm4gZkxpc3RlbmVycy5lbGVtZW50cygpOwotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gZGlzY29ubmVjdCAoIEVsZW1lbnQgdGFyZ2V0RWxlbWVudCwgUmVsIG91dGJvdW5kUmVsICkKLSAgewotICAgIGlmIChmTW9kZWwgPT0gbnVsbCB8fCBmTW9kZWwgIT0gdGFyZ2V0RWxlbWVudC5nZXRNb2RlbCgpIHx8IG91dGJvdW5kUmVsID09IG51bGwpIHJldHVybiBmYWxzZTsKLSAgICBDb25uZWN0aW9uIG91dGJvdW5kQ29ubmVjdGlvbiA9IG91dGJvdW5kUmVsLmdldENvbm5lY3Rpb25Ubyh0YXJnZXRFbGVtZW50KTsKLSAgICBpZiAob3V0Ym91bmRDb25uZWN0aW9uID09IG51bGwpIHJldHVybiBmYWxzZTsKLSAgICBDb25uZWN0aW9uIGluYm91bmRDb25uZWN0aW9uID0gb3V0Ym91bmRDb25uZWN0aW9uLmdldE9wcG9zaW5nQ29ubmVjdGlvbigpOwotICAgIFJlbFJlbW92ZUV2ZW50IGV2ZW50ID0gbmV3IFJlbFJlbW92ZUV2ZW50KG5ldyBDb25uZWN0aW9uIFtdIHtvdXRib3VuZENvbm5lY3Rpb24saW5ib3VuZENvbm5lY3Rpb259KTsKLSAgICAgIEVudW1lcmF0aW9uIGUgPSBmTGlzdGVuZXJzLmVsZW1lbnRzKCk7Ci0gICAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgIHsKLSAgICAgICAgKChFbGVtZW50TGlzdGVuZXIpZS5uZXh0RWxlbWVudCgpKS5yZWxSZW1vdmVkKGV2ZW50KTsKLSAgICAgIH0KLQotICAgIEVudW1lcmF0aW9uIGVUYXJnZXQgPSB0YXJnZXRFbGVtZW50LmdldExpc3RlbmVycygpOwotICAgIHdoaWxlIChlVGFyZ2V0Lmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgICgoRWxlbWVudExpc3RlbmVyKWVUYXJnZXQubmV4dEVsZW1lbnQoKSkucmVsUmVtb3ZlZChldmVudCk7Ci0gICAgfQotCi0gICAgUmVsIGluYm91bmRSZWwgPSBpbmJvdW5kQ29ubmVjdGlvbi5nZXRSZWwoKTsKLSAgICBib29sZWFuIGRvbmUgPSBvdXRib3VuZFJlbC5yZW1vdmVDb25uZWN0aW9uKG91dGJvdW5kQ29ubmVjdGlvbik7Ci0gICAgaW5ib3VuZFJlbC5yZW1vdmVDb25uZWN0aW9uKGluYm91bmRDb25uZWN0aW9uKTsKLSAgICByZXR1cm4gZG9uZTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIGRpc2Nvbm5lY3RSZWwgKCBSZWwgb3V0Ym91bmRSZWwgKQotICB7Ci0gICAgaWYgKGZNb2RlbCA9PSBudWxsIHx8IG91dGJvdW5kUmVsID09IG51bGwpIHJldHVybiBmYWxzZTsKLSAgICBFbGVtZW50W10gZWxlbWVudHMgPSBuZXcgRWxlbWVudFtvdXRib3VuZFJlbC5nZXROdW1iZXJPZlRhcmdldEVsZW1lbnRzKCldOwotICAgIGludCBpID0gMDsKLSAgICBFbnVtZXJhdGlvbiBlID0gb3V0Ym91bmRSZWwuZ2V0VGFyZ2V0RWxlbWVudHMoKTsKLSAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICB7Ci0gICAgICBlbGVtZW50c1tpKytdID0gKEVsZW1lbnQpZS5uZXh0RWxlbWVudCgpOwotICAgIH0KLSAgICB3aGlsZSAoaS0tID4gMCkKLSAgICB7Ci0gICAgICBkaXNjb25uZWN0KGVsZW1lbnRzW2ldLG91dGJvdW5kUmVsKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nICgpCi0gIHsKLSAgICByZXR1cm4gZ2V0TmFtZSgpOwotICB9Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL0Jhc2ljTW9kZWwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL0Jhc2ljTW9kZWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2JkMjA2MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9CYXNpY01vZGVsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLXB1YmxpYyBjbGFzcyBCYXNpY01vZGVsIGltcGxlbWVudHMgTW9kZWwKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICBwcml2YXRlIFN0cmluZyBmTmFtZTsKLSAgcHJpdmF0ZSBIYXNodGFibGUgZkVsZW1lbnRzOwotICBwcml2YXRlIEVsZW1lbnQgZlJvb3Q7Ci0gIC8vVGhpcyBpcyB1c2VkIGJ5IHRoZSBNVUlECi0gIHByaXZhdGUgaW50IGZVbmlxdWVOdW1iZXJDb3VudGVyOwotCi0gIHB1YmxpYyBCYXNpY01vZGVsICggU3RyaW5nIG5hbWUgKQotICB7Ci0gICAgZk5hbWUgPSBuYW1lOwotICAgIGZFbGVtZW50cyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBmUm9vdCA9IG51bGw7Ci0gICAgZlVuaXF1ZU51bWJlckNvdW50ZXIgPSAwOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0TmFtZSAoIFN0cmluZyBuYW1lICkKLSAgewotICAgIGZOYW1lID0gbmFtZTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSAoKQotICB7Ci0gICAgcmV0dXJuIGZOYW1lOwotICB9Ci0KLQotICAvKgotICAqIHNpbXBsZSBjb3VudGVyIHRoYXQgaW5jcmVtZW50cyBlYWNoIGNhbGwgCi0gICovCi0gIHB1YmxpYyBpbnQgZ2V0VW5pcXVlTnVtYmVyKCkKLSAgewotICAgIGZVbmlxdWVOdW1iZXJDb3VudGVyKys7Ci0gICAgcmV0dXJuIGZVbmlxdWVOdW1iZXJDb3VudGVyOwotICB9Ci0KLSAgLyoKLSAgKiBUaGlzIHdpbGwgdXNlIGEgdW5pcXVlIG51bWJlciBhbmQgYXBwZW5kIGl0IHRvIHRoZSBlbmQgb2YgdGhlIG5hbWUgCi0gICogQHBhcmFtIFN0cmluZyBuYW1lIG9mIHRoZSBlbGVtZW50Ci0gICogQHJldHVybiBTdHJpbmcgTVVJRAotICAqLwotICBwdWJsaWMgU3RyaW5nIG1ha2VNVUlEKFN0cmluZyBuYW1lKQotICB7Ci0gICAgU3RyaW5nIG51bSA9IFN0cmluZy52YWx1ZU9mKGdldFVuaXF1ZU51bWJlcigpKTsKLSAgICBTdHJpbmcgbXVpZCA9IG5hbWUgKyBudW07Ci0gICAgcmV0dXJuIG11aWQ7Ci0gIH0KLQotCi0gIHB1YmxpYyBib29sZWFuIHNldFJvb3RFbGVtZW50ICggRWxlbWVudCByb290ICkKLSAgewotICAgIGlmIChyb290LmdldE1vZGVsKCkgPT0gbnVsbCkKLSAgICAgIGFkZEVsZW1lbnQocm9vdCk7Ci0gICAgZWxzZSBpZiAocm9vdC5nZXRNb2RlbCgpICE9IHRoaXMpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZlJvb3QgPSByb290OwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIEVsZW1lbnQgZ2V0Um9vdEVsZW1lbnQgKCkKLSAgewotICAgIGlmIChmUm9vdCA9PSBudWxsKSBmUm9vdCA9IGdldEZpcnN0RWxlbWVudCgpOwotICAgIHJldHVybiBmUm9vdDsKLSAgfQotCi0KLSAgLyoqCi0gICogR2V0IHRoZSBlbGVtZW50cyB0aGF0IGhhdmUgdGhpcyBuYW1lCi0gICogQHBhcmFtIFN0cmluZyBuYW1lIHRoZSBuYW1lIG9mIHRoZSBlbGVtZW50IAotICAqIEByZXR1cm4gVmVjdG9yIGEgdmVjdG9yIG9mIGVsZW1lbnRzIHRoYXQgaGF2ZSB0aGlzIG5hbWUKLSAgKiBUaGVzZSBlbGVtZW50cyBtYXkgYmUgb2YgZGlmZmVyZW50IHR5cGVzCi0gICoqLwotCi0gIHB1YmxpYyBWZWN0b3IgZ2V0RWxlbWVudHNCeU5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBWZWN0b3IgdmVjdG9yID0gbmV3IFZlY3RvcigpOwotICAgIEVudW1lcmF0aW9uIGUgPSBmRWxlbWVudHMua2V5cygpOwotICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKXsKLSAgICAgICBFbGVtZW50IGVsZW1lbnQgPSAoRWxlbWVudCllLm5leHRFbGVtZW50KCk7Ci0gICAgICAgaWYgKGVsZW1lbnQuZ2V0TmFtZSgpLmVxdWFscyhuYW1lKSkgdmVjdG9yLmFkZEVsZW1lbnQoZWxlbWVudCk7Ci0gICAgfQotICAgIHJldHVybiB2ZWN0b3I7Ci0gIH0KLQotIAotCi0gIHB1YmxpYyBib29sZWFuIGFkZEVsZW1lbnQgKCBFbGVtZW50IGVsZW1lbnQgKQotICB7Ci0gICAgaWYgKGVsZW1lbnQuZ2V0TW9kZWwoKSAhPSBudWxsKSByZXR1cm4gZmFsc2U7Ci0gICAgZkVsZW1lbnRzLnB1dChlbGVtZW50LGVsZW1lbnQpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcmVtb3ZlRWxlbWVudCAoIEVsZW1lbnQgZWxlbWVudCApCi0gIHsKLSAgICBpZiAoZWxlbWVudC5nZXRNb2RlbCgpICE9IHRoaXMpIHJldHVybiBmYWxzZTsKLSAgICBlbGVtZW50LmRpc2Nvbm5lY3RBbGwoKTsKLSAgICBpZiAoZlJvb3QgPT0gZWxlbWVudCkgZlJvb3QgPSBudWxsOwotICAgIHJldHVybiAoZkVsZW1lbnRzLnJlbW92ZShlbGVtZW50KSA9PSBlbGVtZW50KTsKLSAgfQotCi0gIHB1YmxpYyBFbnVtZXJhdGlvbiBnZXRFbGVtZW50cyAoKQotICB7Ci0gICAgcmV0dXJuIGZFbGVtZW50cy5lbGVtZW50cygpOwotICB9Ci0KLSAgcHVibGljIGludCBnZXROdW1iZXJPZkVsZW1lbnRzICgpCi0gIHsKLSAgICByZXR1cm4gZkVsZW1lbnRzLnNpemUoKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGNvbnRhaW5zRWxlbWVudCAoIEVsZW1lbnQgZWxlbWVudCApCi0gIHsKLSAgICByZXR1cm4gZkVsZW1lbnRzLmNvbnRhaW5zKGVsZW1lbnQpOwotICB9Ci0KLSAgcHJpdmF0ZSBFbGVtZW50IGdldEZpcnN0RWxlbWVudCAoKQotICB7Ci0gICAgRW51bWVyYXRpb24gZSA9IGdldEVsZW1lbnRzKCk7Ci0gICAgcmV0dXJuIChlLmhhc01vcmVFbGVtZW50cygpID8gKEVsZW1lbnQpZS5uZXh0RWxlbWVudCgpIDogbnVsbCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nICgpCi0gIHsKLSAgICByZXR1cm4gZ2V0TmFtZSgpOwotICB9Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL0Jhc2ljUHJvcGVydHkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL0Jhc2ljUHJvcGVydHkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE0YzNkMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9CYXNpY1Byb3BlcnR5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsOwotCi1wdWJsaWMgY2xhc3MgQmFzaWNQcm9wZXJ0eSBpbXBsZW1lbnRzIFByb3BlcnR5Ci17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgZk5hbWU7Ci0gIHByaXZhdGUgT2JqZWN0IGZWYWx1ZTsKLQotICBwdWJsaWMgQmFzaWNQcm9wZXJ0eSAoIFN0cmluZyBuYW1lICkKLSAgewotICAgIGZOYW1lID0gbmFtZTsKLSAgfQotCi0gIHB1YmxpYyBCYXNpY1Byb3BlcnR5ICggU3RyaW5nIG5hbWUsIE9iamVjdCB2YWx1ZSApCi0gIHsKLSAgICBmTmFtZSA9IG5hbWU7Ci0gICAgZlZhbHVlID0gdmFsdWU7Ci0gIH0KLQotICAvKioKLSAgKiBSZXR1cm5zIGEgc2hhbGxvdyBjbG9uZSBvZiB0aGlzIDxjb2RlPlByb3BlcnR5PC9jb2RlPi4KLSAgKiBQcm9wZXJ0eSBrZXkgYW5kIHZhbHVlIHJlZmVyZW5jZXMgYXJlIGNsb25lZCwKLSAgKiBidXQgdGhlIHZhbHVlIG9iamVjdHMgdGhlbXNlbHZlcyBhcmUgbm90IGNsb25lZC4KLSAgKiBAcmV0dXJuIFByb3BlcnR5IEEgbmV3IFByb3BlcnR5LgotICAqLwotICBwdWJsaWMgUHJvcGVydHkgc2hhbGxvd0Nsb25lICgpCi0gIHsKLSAgICByZXR1cm4gbmV3IEJhc2ljUHJvcGVydHkoZk5hbWUsZlZhbHVlKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSAoKQotICB7Ci0gICAgcmV0dXJuIGZOYW1lOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0VmFsdWUgKCBPYmplY3QgdmFsdWUgKQotICB7Ci0gICAgZlZhbHVlID0gdmFsdWU7Ci0gIH0KLQotICBwdWJsaWMgT2JqZWN0IGdldFZhbHVlICgpCi0gIHsKLSAgICByZXR1cm4gZlZhbHVlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0VmFsdWVBc1N0cmluZyAoIFN0cmluZyB2YWx1ZSApCi0gIHsKLSAgICBmVmFsdWUgPSB2YWx1ZTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VmFsdWVBc1N0cmluZyAoKQotICB7Ci0gICAgcmV0dXJuIChmVmFsdWUgIT0gbnVsbCA/IGZWYWx1ZS50b1N0cmluZygpIDogbnVsbCk7Ci0gIH0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvQmFzaWNSZWwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL0Jhc2ljUmVsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwNWYwODUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvQmFzaWNSZWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLXB1YmxpYyBjbGFzcyBCYXNpY1JlbCBpbXBsZW1lbnRzIFJlbAotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIHByaXZhdGUgU3RyaW5nIGZOYW1lOwotICBwcml2YXRlIEVsZW1lbnQgZlNvdXJjZUVsZW1lbnQ7Ci0gIHByaXZhdGUgVmVjdG9yIGZDb25uZWN0aW9uczsKLQotICBwdWJsaWMgQmFzaWNSZWwgKCBTdHJpbmcgbmFtZSwgRWxlbWVudCBzb3VyY2VFbGVtZW50ICkKLSAgewotICAgIGZOYW1lID0gbmFtZTsKLSAgICBmU291cmNlRWxlbWVudCA9IHNvdXJjZUVsZW1lbnQ7Ci0gICAgZkNvbm5lY3Rpb25zID0gbmV3IFZlY3RvcigpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXROYW1lICgpCi0gIHsKLSAgICByZXR1cm4gZk5hbWU7Ci0gIH0KLQotICBwdWJsaWMgRWxlbWVudCBnZXRTb3VyY2VFbGVtZW50ICgpCi0gIHsKLSAgICByZXR1cm4gZlNvdXJjZUVsZW1lbnQ7Ci0gIH0KLQotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0VGFyZ2V0RWxlbWVudHMgKCkKLSAgewotICAgIHJldHVybiBuZXcgRWxlbWVudEVudW1lcmF0aW9uKGZDb25uZWN0aW9ucy5lbGVtZW50cygpKTsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0TnVtYmVyT2ZUYXJnZXRFbGVtZW50cyAoKQotICB7Ci0gICAgcmV0dXJuIGZDb25uZWN0aW9ucy5zaXplKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBhZGRDb25uZWN0aW9uICggQ29ubmVjdGlvbiBjb25uZWN0aW9uICkKLSAgewotICAgIGZDb25uZWN0aW9ucy5hZGRFbGVtZW50KGNvbm5lY3Rpb24pOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcmVtb3ZlQ29ubmVjdGlvbiAoIENvbm5lY3Rpb24gY29ubmVjdGlvbiApCi0gIHsKLSAgICByZXR1cm4gZkNvbm5lY3Rpb25zLnJlbW92ZUVsZW1lbnQoY29ubmVjdGlvbik7Ci0gIH0KLQotICBwdWJsaWMgQ29ubmVjdGlvbiBnZXRDb25uZWN0aW9uVG8gKCBFbGVtZW50IHRhcmdldEVsZW1lbnQgKQotICB7Ci0gICAgRW51bWVyYXRpb24gZSA9IGZDb25uZWN0aW9ucy5lbGVtZW50cygpOwotICAgIHdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIENvbm5lY3Rpb24gYyA9IChDb25uZWN0aW9uKWUubmV4dEVsZW1lbnQoKTsKLSAgICAgIGlmIChjLmdldEVsZW1lbnQoKSA9PSB0YXJnZXRFbGVtZW50KSByZXR1cm4gYzsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nICgpCi0gIHsKLSAgICByZXR1cm4gZ2V0TmFtZSgpOwotICB9Ci0KLSAgcHJpdmF0ZSBjbGFzcyBFbGVtZW50RW51bWVyYXRpb24gaW1wbGVtZW50cyBFbnVtZXJhdGlvbgotICB7Ci0gICAgcHJpdmF0ZSBFbnVtZXJhdGlvbiBmQ29ubmVjdGlvbkVudW1lcmF0aW9uOwotCi0gICAgcHVibGljIEVsZW1lbnRFbnVtZXJhdGlvbiAoIEVudW1lcmF0aW9uIGNvbm5lY3Rpb25FbnVtZXJhdGlvbiApCi0gICAgewotICAgICAgZkNvbm5lY3Rpb25FbnVtZXJhdGlvbiA9IGNvbm5lY3Rpb25FbnVtZXJhdGlvbjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBoYXNNb3JlRWxlbWVudHMgKCkKLSAgICB7Ci0gICAgICByZXR1cm4gZkNvbm5lY3Rpb25FbnVtZXJhdGlvbi5oYXNNb3JlRWxlbWVudHMoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgT2JqZWN0IG5leHRFbGVtZW50ICgpCi0gICAgewotICAgICAgcmV0dXJuICgoQ29ubmVjdGlvbilmQ29ubmVjdGlvbkVudW1lcmF0aW9uLm5leHRFbGVtZW50KCkpLmdldEVsZW1lbnQoKTsKLSAgICB9Ci0gIH0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvQ29ubmVjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvQ29ubmVjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmM2RjZjZjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL0Nvbm5lY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWw7Ci0KLS8qKgotKiBUaGlzIGlzIHRoZSBhYnN0cmFjdCBjbGFzcyBmb3IgYSBjb25uZWN0aW9uIHRoYXQgdGllcyBhIFJlbCB0byBhIE5vZGUuCi0qIE5vcm1hbGx5IENvbm5lY3Rpb24gb2JqZWN0cyBhcmUgbWFudWZhY3R1cmVkIGFuZCBtYW5hZ2VkIHdpdGhpbiB0aGUKLSogZGVyaXZlZCBjbGFzc2VzIG9mIHRoZSBNb2RlbCBmcmFtZXdvcmssIGFuZCBhcmUgbm90IG1hbmlwdWxhdGVkIGJ5Ci0qIHRoZSBjYWxsZXIgZGlyZWN0bHkuCi0qLwotcHVibGljIGludGVyZmFjZSBDb25uZWN0aW9uCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgUmVsIHRoYXQgb3ducyB0aGlzIGNvbm5lY3Rpb24uCi0gICogQHJldHVybiBSZWwgVGhlIFJlbCB0aGF0IG93bnMgdGhpcyBjb25uZWN0aW9uLgotICAqIFRoaXMgbWV0aG9kIG5ldmVyIHJldHVybnMgbnVsbCwgdGhhdCBpcywgYSBDb25uZWN0aW9uCi0gICogY2Fubm90IGV4aXN0IHdpdGhvdXQgYSBSZWwgdG8gb3duIGl0LgotICAqLwotICBwdWJsaWMgUmVsIGdldFJlbCAoKTsKLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBOb2RlIHRoYXQgdGhpcyBjb25uZWN0aW9uIHBvaW50cyB0by4KLSAgKiBAcmV0dXJuIE5vZGUgVGhlIE5vZGUgdGhpcyBjb25uZWN0aW9uIHBvaW50cyB0by4KLSAgKiBUaGlzIG1ldGhvZCBuZXZlciByZXR1cm5zIG51bGwsIHRoYXQgaXMsIGEgQ29ubmVjdGlvbgotICAqIGNhbm5vdCBleGlzdCB3aXRob3V0IGEgTm9kZSB0byBwb2ludCB0by4KLSAgKi8KLSAgcHVibGljIEVsZW1lbnQgZ2V0RWxlbWVudCAoKTsKLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBvcHBvc2luZyBjb25uZWN0aW9uIHRvIHRoaXMgY29ubmVjdGlvbi4KLSAgKiBDb25uZWN0aW9uIG9iamVjdHMgYWx3YXlzIGV4aXN0IGluIHBhaXJzLCB0aGF0IGlzLAotICAqIGlmIG5vZGUgIlBhcmVudCIgaGFzIGEgcmVsYXRpb25zaGlwIG5hbWVkICJDaGlsZHJlbiIKLSAgKiBjb250YWluaW5nIGEgY29ubmVjdGlvbiB0byBub2RlICJDaGlsZCIsIHRoZW4gdGhlcmUKLSAgKiBtdXN0IGV4aXN0IGFuIG9wcG9zaW5nIGNvbm5lY3Rpb24gZnJvbSAiQ2hpbGQiIHRvCi0gICogIlBhcmVudCIgaW4gc29tZSByZWxhdGlvbnNoaXAgb2YgIkNoaWxkIiAoZm9yIGV4YW1wbGUsCi0gICogaW4gYSByZWxhdGlvbnNoaXAgY2FsbGVkICJQYXJlbnRzIikuCi0gICogQHJldHVybiBDb25uZWN0aW9uIFRoZSBvcHBvc2luZyBjb25uZWN0aW9uLgotICAqIEFzIGEgZ2VuZXJhbCBydWxlLCB0aGlzIG1ldGhvZCBzaG91bGQgbmV2ZXIgcmV0dXJuIG51bGwuCi0gICogSXQgbWF5IG9ubHkgcmV0dXJuIG51bGwgZHVyaW5nIGNvbnN0cnVjdGlvbiBvZiB0aGUgcGFpcgotICAqIG9mIGNvbm5lY3Rpb25zLgotICAqLwotICBwdWJsaWMgQ29ubmVjdGlvbiBnZXRPcHBvc2luZ0Nvbm5lY3Rpb24gKCk7Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL0VsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL0VsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzUwNTdjMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9FbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLQotLyoqCi0qIFRoaXMgaXMgdGhlIGFic3RyYWN0IGNsYXNzIGZvciBlbGVtZW50cyB0aGF0IGNhbiBiZSBtYW5hZ2VkIGJ5IGEgTW9kZWwuCi0qIEV2ZXJ5IGVsZW1lbnQgaGFzIGEgbmFtZSwgYSBzZXQgb2YgcHJvcGVydGllcywgYW5kIGEgc2V0IG9mIHJlbGF0aW9uc2hpcHMKLSogdG8gb3RoZXIgZWxlbWVudHMuCi0qLwotcHVibGljIGludGVyZmFjZSBFbGVtZW50Ci17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgLyoqCi0gICogUmV0dXJucyBhIGNsb25lIG9mIHRoaXMgPGNvZGU+RWxlbWVudDwvY29kZT4KLSAgKiBvZiB0aGUgc2FtZSBjbGFzcyBhbmQgd2l0aCB0aGUgc2FtZSBuYW1lIGFuZCBtb2RlbCwKLSAgKiBidXQgd2l0aCBubyBQcm9wZXJ0aWVzLCBSZWxzIG9yIExpc3RlbmVycyBleGNlcHQgZm9yCi0gICogdGhlIHtAbGluayBQcm9wZXJ0eSNOQU1FIE5BTUV9IHByb3BlcnR5LgotICAqIEByZXR1cm4gT2JqZWN0IEEgbmV3IEVsZW1lbnQuCi0gICovCi0gIHB1YmxpYyBFbGVtZW50IHNoYWxsb3dDbG9uZSAoKTsKLQotICAvKioKLSAgKiBSZXR1cm5zIGEgY2xvbmUgb2YgdGhpcyA8Y29kZT5FbGVtZW50PC9jb2RlPgotICAqIG9mIHRoZSBzYW1lIGNsYXNzIGFuZCB3aXRoIHRoZSBzYW1lIG5hbWUgYW5kIG1vZGVsCi0gICogYW5kIHdpdGggYSBjb3B5IG9mIHRoZSBvcmlnaW5hbCBFbGVtZW50J3MgUHJvcGVydGllcy4KLSAgKiBUaGUgUmVscyBhbmQgTGlzdGVuZXJzIGFyZSBub3QgY2xvbmVkLgotICAqIEByZXR1cm4gRWxlbWVudCBBIG5ldyBFbGVtZW50LgotICAqLwotICBwdWJsaWMgRWxlbWVudCBkZWVwQ2xvbmUgKCk7Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbW9kZWwgdGhpcyBlbGVtZW50IGJlbG9uZ3MgdG8sIG9yIG51bGwgaWYgdGhlIGVsZW1lbnQKLSAgKiBoYXMgbm90IGJlZW4gYWRkZWQgdG8gYSBtb2RlbC4gU2VlIGFsc28ge0BsaW5rICNpc1ZhbGlkIGlzVmFsaWQoKX0uCi0gICogQHJldHVybiBNb2RlbCBUaGUgbW9kZWwgdGhpcyBlbGVtZW50IGJlbG9uZ3MgdG8sIG9yIG51bGwgaWYgbm9uZS4KLSAgKi8KLSAgcHVibGljIE1vZGVsIGdldE1vZGVsICgpOwotCi0gIC8qKgotICAqIFJldHVybnMgdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGlzIGVsZW1lbnQgYmVsb25ncyB0byBhIG1vZGVsLgotICAqIFNlZSBhbHNvIHtAbGluayAjZ2V0TW9kZWwgZ2V0TW9kZWwoKX0uCi0gICogQHJldHVybiBib29sZWFuIFRydWUgaWYgYW5kIG9ubHkgaWYgdGhpcyBlbGVtZW50IGJlbG9uZ3MgdG8gYSBtb2RlbC4KLSAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNWYWxpZCAoKTsKLQotICAvKioKLSAgKiBSZW1vdmVzIHRoaXMgZWxlbWVudCBmcm9tIHRoZSBtb2RlbCB0byB3aGljaCBpdCBjdXJyZW50bHkgYmVsb25ncy4KLSAgKiBBZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kLCB7QGxpbmsgI2dldE1vZGVsIGdldE1vZGVsKCl9IHdpbGwgcmV0dXJuCi0gICogbnVsbCBhbmQge0BsaW5rICNpc1ZhbGlkIGlzVmFsaWQoKX0gd2lsbCByZXR1cm4gZmFsc2UuCi0gICogQHJldHVybiBib29sZWFuIFRydWUgaWYgdGhlIGVsZW1lbnQgd2FzIHN1Y2Nlc3NmdWxseSByZW1vdmVkIGZyb20KLSAgKiBpdHMgbW9kZWwuIFRoaXMgbWV0aG9kIHJldHVybnMgZmFsc2UgaWYgdGhlIGVsZW1lbnQgZG9lcyBub3QgYmVsb25nCi0gICogdG8gYW55IG1vZGVsLgotICAqLwotICBwdWJsaWMgYm9vbGVhbiByZW1vdmUgKCk7Ci0KLSAgLyoqCi0gICogU2V0cyB0aGUgbmFtZSBvZiB0aGlzIGVsZW1lbnQgYW5kIHVwZGF0ZXMgdGhlICJuYW1lIiBwcm9wZXJ0eS4KLSAgKiBFdmVyeSBlbGVtZW50IGluY2x1ZGVzIGEgcHJvcGVydHkgY2FsbGVkICJuYW1lIiAoc2VlIFByb3BlcnR5Lk5BTUUpCi0gICogd2hvc2UgdmFsdWUgaXMgdGhlIHNhbWUgc3RyaW5nIGFzIHBhc3NlZCBpbnRvIHNldE5hbWUoKS4KLSAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGlzIGVsZW1lbnQuCi0gICovCi0gIHB1YmxpYyB2b2lkIHNldE5hbWUgKCBTdHJpbmcgbmFtZSApOwotCi0gIC8qKgotICAqCi0gICovCi0gIHB1YmxpYyB2b2lkIGFkZExpc3RlbmVyICggRWxlbWVudExpc3RlbmVyIGxpc3RlbmVyICk7Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGlzIGVsZW1lbnQuCi0gICogQHJldHVybiBTdHJpbmcgVGhlIG5hbWUgb2YgdGhpcyBlbGVtZW50LgotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUgKCk7Ci0KLSAgLyoqCi0gICogQWRkcyBvciBzZXRzIGEgcHJvcGVydHkgb2YgdGhpcyBlbGVtZW50LgotICAqIFByb3BlcnRpZXMgc2V0IHVzaW5nIHRoaXMgbWV0aG9kIGNhbiBiZSByZXRyaWV2ZWQgdXNpbmcgZWl0aGVyCi0gICoge0BsaW5rICNnZXRQcm9wZXJ0eSBnZXRQcm9wZXJ0eSgpfSBvcgotICAqIHtAbGluayAjZ2V0UHJvcGVydHlBc09iamVjdCBnZXRQcm9wZXJ0eUFzT2JqZWN0KCl9LgotICAqIEV2ZXJ5IGVsZW1lbnQgaW5jbHVkZXMgYSBwcm9wZXJ0eSBjYWxsZWQgIm5hbWUiIChzZWUgUHJvcGVydHkuTkFNRSkKLSAgKiB3aG9zZSB2YWx1ZSBpcyB0aGUgc2FtZSBzdHJpbmcgYXMgcGFzc2VkIGludG8ge0BsaW5rICNzZXROYW1lIHNldE5hbWUoKX0uCi0gICogQW55IHByZXZpb3VzIHByb3BlcnR5IHdpdGggdGhlIHNhbWUgbmFtZSBpcyByZXBsYWNlZC4KLSAgKiBAcGFyYW0gcHJvcGVydHkgVGhlIHByb3BlcnR5IHRvIHNldC4KLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0UHJvcGVydHkgKCBQcm9wZXJ0eSBwcm9wZXJ0eSApOwotCi0gIC8qKgotICAqIEFkZHMgb3Igc2V0cyBhIHByb3BlcnR5IG9mIHRoaXMgZWxlbWVudC4KLSAgKiBQcm9wZXJ0aWVzIHNldCB1c2luZyB0aGlzIG1ldGhvZCBjYW4gYmUgcmV0cmlldmVkIHVzaW5nIGVpdGhlcgotICAqIHtAbGluayAjZ2V0UHJvcGVydHkgZ2V0UHJvcGVydHkoKX0gb3IKLSAgKiB7QGxpbmsgI2dldFByb3BlcnR5QXNPYmplY3QgZ2V0UHJvcGVydHlBc09iamVjdCgpfS4KLSAgKiBFdmVyeSBlbGVtZW50IGluY2x1ZGVzIGEgcHJvcGVydHkgY2FsbGVkICJuYW1lIiAoc2VlIFByb3BlcnR5Lk5BTUUpCi0gICogd2hvc2UgdmFsdWUgaXMgdGhlIHNhbWUgc3RyaW5nIGFzIHBhc3NlZCBpbnRvIHtAbGluayAjc2V0TmFtZSBzZXROYW1lKCl9LgotICAqIEFueSBwcmV2aW91cyBwcm9wZXJ0eSB3aXRoIHRoZSBzYW1lIG5hbWUgaXMgcmVwbGFjZWQuCi0gICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIHNldC4KLSAgKiBAcGFyYW0gdmFsdWUgVGhlIE9iamVjdCB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgdG8gc2V0LgotICAqLwotICBwdWJsaWMgdm9pZCBzZXRQcm9wZXJ0eUFzT2JqZWN0ICggU3RyaW5nIG5hbWUsIE9iamVjdCB2YWx1ZSApOwotCi0gIC8qKgotICAqIEFkZHMgb3Igc2V0cyBhIFN0cmluZyBwcm9wZXJ0eSBvZiB0aGlzIGVsZW1lbnQuCi0gICogUHJvcGVydGllcyBzZXQgdXNpbmcgdGhpcyBtZXRob2QgY2FuIGJlIHJldHJpZXZlZCB1c2luZyBlaXRoZXIKLSAgKiB7QGxpbmsgI2dldFByb3BlcnR5IGdldFByb3BlcnR5KCl9LAotICAqIHtAbGluayAjZ2V0UHJvcGVydHlBc09iamVjdCBnZXRQcm9wZXJ0eUFzT2JqZWN0KCl9IG9yCi0gICoge0BsaW5rICNnZXRQcm9wZXJ0eUFzU3RyaW5nIGdldFByb3BlcnR5QXNTdHJpbmcoKX0uCi0gICogRXZlcnkgZWxlbWVudCBpbmNsdWRlcyBhIHByb3BlcnR5IGNhbGxlZCAibmFtZSIgKHNlZSBQcm9wZXJ0eS5OQU1FKQotICAqIHdob3NlIHZhbHVlIGlzIHRoZSBzYW1lIHN0cmluZyBhcyBwYXNzZWQgaW50byB7QGxpbmsgI3NldE5hbWUgc2V0TmFtZSgpfS4KLSAgKiBBbnkgcHJldmlvdXMgcHJvcGVydHkgd2l0aCB0aGUgc2FtZSBuYW1lIGlzIHJlcGxhY2VkLgotICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBzZXQuCi0gICogQHBhcmFtIHZhbHVlIFRoZSBTdHJpbmcgdmFsdWUgb2YgdGhlIHByb3BlcnR5IHRvIHNldC4KLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0UHJvcGVydHlBc1N0cmluZyAoIFN0cmluZyBuYW1lLCBTdHJpbmcgdmFsdWUgKTsKLQotICAvKioKLSAgKiBSZXR1cm5zIGEgcHJvcGVydHkgb2YgdGhlIGdpdmVuIG5hbWUgb3IgbnVsbCBpZiB0aGVyZSBpcyBub25lLgotICAqIEV2ZXJ5IGVsZW1lbnQgaW5jbHVkZXMgYSBwcm9wZXJ0eSBjYWxsZWQgIm5hbWUiIChzZWUgUHJvcGVydHkuTkFNRSkKLSAgKiB3aG9zZSB2YWx1ZSBpcyB0aGUgc2FtZSBzdHJpbmcgYXMgcGFzc2VkIGludG8ge0BsaW5rICNzZXROYW1lIHNldE5hbWUoKX0uCi0gICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIHJldHVybi4KLSAgKiBAcmV0dXJuIFByb3BlcnR5IFRoZSBwcm9wZXJ0eSwgb3IgbnVsbCBpZiBub25lLgotICAqLwotICBwdWJsaWMgUHJvcGVydHkgZ2V0UHJvcGVydHkgKCBTdHJpbmcgbmFtZSApOwotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIE9iamVjdCB2YWx1ZSBvZiBhIHByb3BlcnR5IG9mIHRoZSBnaXZlbiBuYW1lIG9yIG51bGwKLSAgKiBpZiB0aGVyZSBpcyBub25lLgotICAqIEV2ZXJ5IGVsZW1lbnQgaW5jbHVkZXMgYSBwcm9wZXJ0eSBjYWxsZWQgIm5hbWUiIChzZWUgUHJvcGVydHkuTkFNRSkKLSAgKiB3aG9zZSB2YWx1ZSBpcyB0aGUgc2FtZSBzdHJpbmcgYXMgcGFzc2VkIGludG8ge0BsaW5rICNzZXROYW1lIHNldE5hbWUoKX0uCi0gICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIHJldHVybi4KLSAgKiBAcmV0dXJuIE9iamVjdCBUaGUgcHJvcGVydHkgdmFsdWUgYXMgYW4gT2JqZWN0LCBvciBudWxsIGlmIG5vbmUuCi0gICovCi0gIHB1YmxpYyBPYmplY3QgZ2V0UHJvcGVydHlBc09iamVjdCAoIFN0cmluZyBuYW1lICk7Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgU3RyaW5nIHZhbHVlIG9mIGEgcHJvcGVydHkgb2YgdGhlIGdpdmVuIG5hbWUgb3IgbnVsbAotICAqIGlmIHRoZXJlIGlzIG5vbmUuCi0gICogRXZlcnkgZWxlbWVudCBpbmNsdWRlcyBhIHByb3BlcnR5IGNhbGxlZCAibmFtZSIgKHNlZSBQcm9wZXJ0eS5OQU1FKQotICAqIHdob3NlIHZhbHVlIGlzIHRoZSBzYW1lIHN0cmluZyBhcyBwYXNzZWQgaW50byB7QGxpbmsgI3NldE5hbWUgc2V0TmFtZSgpfS4KLSAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gcmV0dXJuLgotICAqIEByZXR1cm4gU3RyaW5nIFRoZSBwcm9wZXJ0eSB2YWx1ZSBhcyBhIFN0cmluZywgb3IgbnVsbCBpZiBub25lLgotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5QXNTdHJpbmcgKCBTdHJpbmcgbmFtZSApOwotCi0gIC8qKgotICAqIFJldHVybnMgYW4gZW51bWVyYXRpb24gb2YgYWxsIHByb3BlcnRpZXMgb2YgdGhpcyBlbGVtZW50LgotICAqIFRoZXJlIGlzIGFsd2F5cyBhdCBsZWFzdCBvbmUgcHJvcGVydHkgdGhhdCBjYXJyaWVzIHRoZQotICAqIG5hbWUgb2YgdGhpcyBlbGVtZW50IChzZWUge0BsaW5rICNzZXROYW1lIHNldE5hbWUoKX0pLgotICAqIEByZXR1cm4gRW51bWVyYXRpb24gQW4gZW51bWVyYXRpb24gb2YgYWxsIHByb3BlcnRpZXMgb2YgdGhpcyBlbGVtZW50LgotICAqLwotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0UHJvcGVydGllcyAoKTsKLQotICAvKioKLSAgKiBDcmVhdGVzIGEgYmlkaXJlY3Rpb25hbCByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGlzIGVsZW1lbnQgYW5kIGFub3RoZXIuCi0gICogQm90aCByZWxhdGlvbnNoaXBzIGFyZSBpZGVudGlmaWVkIGJ5IG5hbWVzLiBUaGUgbmFtZXMgb2YgYWxsIHRoZQotICAqIG91dGJvdW5kIHJlbGF0aW9uc2hpcHMgb2YgYSBlbGVtZW50IG11c3QgYmUgbXV0dWFsbHkgdW5pcXVlLgotICAqIEBwYXJhbSBlbGVtZW50IFRoZSBlbGVtZW50IHRvIGNvbm5lY3QgdG8uCi0gICogQHBhcmFtIG91dGJvdW5kUmVsTmFtZSBUaGUgbmFtZSBvZiB0aGUgcmVsYXRpb25zaGlwIHRvIGNvbnRhaW4gdGhlCi0gICogY29ubmVjdGlvbiB0byB0aGUgZWxlbWVudC4KLSAgKiBAcGFyYW0gaW5ib3VuZFJlbE5hbWUgVGhlIG5hbWUgb2YgdGhlIHJlbGF0aW9uc2hpcCB0byBjb250YWluIHRoZQotICAqIGludmVyc2UgY29ubmVjdGlvbiBiYWNrIHRvIHRoaXMgZWxlbWVudC4KLSAgKiBAcmV0dXJuIGJvb2xlYW4gVHJ1ZSBpZiB0aGUgY29ubmVjdGlvbiBpcyBjcmVhdGVkIHN1Y2Nlc3NmdWxseS4KLSAgKiBCb3RoIGVsZW1lbnRzIG11c3QgYmVsb25nIHRvIHRoZSBzYW1lIG1vZGVsLCBvdGhlciBmYWxzZSBpcyByZXR1cm5lZC4KLSAgKi8KLSAgcHVibGljIGJvb2xlYW4gY29ubmVjdCAoIEVsZW1lbnQgZWxlbWVudCwgU3RyaW5nIG91dGJvdW5kUmVsTmFtZSwgU3RyaW5nIGluYm91bmRSZWxOYW1lICk7Ci0KLSAgLyoqCi0gICogRGlzbWFudGxlcyB0aGUgY29ubmVjdGlvbiB0byBhbm90aGVyIGVsZW1lbnQgaW4gYSBnaXZlbiByZWxhdGlvbnNoaXAuCi0gICogVGhlIGludmVyc2UgY29ubmVjdGlvbiBpcyBhbHNvIGF1dG9tYXRpY2FsbHkgZGlzbWFudGxlZC4KLSAgKiBAcGFyYW0gZWxlbWVudCBUaGUgZWxlbWVudCB0byBkaXNjb25uZWN0IGZyb20uCi0gICogQHBhcmFtIG91dGJvdW5kUmVsTmFtZSBUaGUgbmFtZSBvZiB0aGUgcmVsYXRpb25zaGlwIGNvbnRhaW5pbmcKLSAgKiB0aGUgY29ubmVjdGlvbiB0byB0aGUgZWxlbWVudC4KLSAgKiBAcmV0dXJuIGJvb2xlYW4gVHJ1ZSBpZiB0aGUgY29ubmVjdGlvbiBpcyByZW1vdmVkIHN1Y2Nlc3NmdWxseS4KLSAgKiBCb3RoIGVsZW1lbnRzIG11c3QgYmVsb25nIHRvIHRoZSBzYW1lIG1vZGVsLCBvdGhlciBmYWxzZSBpcyByZXR1cm5lZC4KLSAgKiBJZiB0aGUgZWxlbWVudHMgYXJlIG5vdCBjb25uZWN0ZWQgdGhyb3VnaCB0aGUgZ2l2ZW4gcmVsYXRpb25zaGlwLCB0aGVuCi0gICogZmFsc2UgaXMgcmV0dXJuZWQuCi0gICovCi0gIHB1YmxpYyBib29sZWFuIGRpc2Nvbm5lY3QgKCBFbGVtZW50IGVsZW1lbnQsIFN0cmluZyBvdXRib3VuZFJlbE5hbWUgKTsKLQotICAvKioKLSAgKiBEaXNtYW50bGVzIHRoZSBjb25uZWN0aW9uIHRvIGFsbCBlbGVtZW50cyBpbiB0aGUgZ2l2ZW4gcmVsYXRpb25zaGlwLgotICAqIFRoZSBpbnZlcnNlIGNvbm5lY3Rpb25zIGFyZSBhbHNvIGF1dG9tYXRpY2FsbHkgZGlzbWFudGxlZC4KLSAgKiBAcGFyYW0gb3V0Ym91bmRSZWxOYW1lIFRoZSBuYW1lIG9mIHRoZSByZWxhdGlvbnNoaXAuCi0gICogQHJldHVybiBib29sZWFuIFRydWUgaWYgYWxsIGNvbm5lY3Rpb25zIGFyZSByZW1vdmVkIHN1Y2Nlc3NmdWxseS4KLSAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGZhbHNlIGlmIHRoZSBlbGVtZW50IGRvZXMgbm90IGJlbG9uZyB0byBhIG1vZGVsLgotICAqLwotICBwdWJsaWMgYm9vbGVhbiBkaXNjb25uZWN0UmVsICggU3RyaW5nIG91dGJvdW5kUmVsTmFtZSApOwotCi0gIC8qKgotICAqIERpc21hbnRsZXMgYWxsIGNvbm5lY3Rpb25zIGZyb20gdGhpcyBlbGVtZW50LgotICAqIEByZXR1cm4gYm9vbGVhbiBUcnVlIGlmIGFsbCBjb25uZWN0aW9ucyBhcmUgcmVtb3ZlZCBzdWNjZXNzZnVsbHkuCi0gICogVGhpcyBtZXRob2QgcmV0dXJucyBmYWxzZSBpZiB0aGUgZWxlbWVudCBkb2VzIG5vdCBiZWxvbmcgdG8gYSBtb2RlbC4KLSAgKi8KLSAgcHVibGljIGJvb2xlYW4gZGlzY29ubmVjdEFsbCAoKTsKLQotICAvKioKLSAgKiBSZXR1cm5zIGFuIGVudW1lcmF0aW9uIG9mIGFsbCBlbGVtZW50cwotICAqIGNvbm5lY3RlZCB0aHJ1IHRoZSBnaXZlbiByZWxhdGlvbnNoaXAuCi0gICogQHBhcmFtIHJlbE5hbWUgVGhlIG5hbWUgb2YgdGhlIHJlbGF0aW9uc2hpcC4KLSAgKiBAcmV0dXJuIEVudW1lcmF0aW9uIFRoZSBlbGVtZW50cyBpbiB0aGUgcmVsYXRpb25zaGlwLgotICAqIFRoaXMgbWV0aG9kIG5ldmVyIHJldHVybnMgbnVsbC4KLSAgKi8KLSAgcHVibGljIEVudW1lcmF0aW9uIGdldEVsZW1lbnRzICggU3RyaW5nIHJlbE5hbWUgKTsKLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGdpdmVuIHJlbGF0aW9uc2hpcC4KLSAgKiBAcGFyYW0gcmVsTmFtZSBUaGUgbmFtZSBvZiB0aGUgcmVsYXRpb25zaGlwLgotICAqIEByZXR1cm4gaW50IFRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIHJlbGF0aW9uc2hpcC4KLSAgKiBUaGlzIG1ldGhvZCBuZXZlciByZXR1cm5zIGEgbmVnYXRpdmUgdmFsdWUuCi0gICovCi0KLSAgcHVibGljIEVudW1lcmF0aW9uIGdldExpc3RlbmVycygpOwotCi0gIHB1YmxpYyBpbnQgZ2V0TnVtYmVyT2ZFbGVtZW50cyAoIFN0cmluZyByZWxOYW1lICk7Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgcmVsYXRpb25zaGlwIG9iamVjdCBvZiB0aGUgZ2l2ZW4gbmFtZS4KLSAgKiBAcGFyYW0gcmVsTmFtZSBUaGUgbmFtZSBvZiB0aGUgcmVsYXRpb25zaGlwLgotICAqIEByZXR1cm4gaW50IFRoZSByZWxhdGlvbnNoaXAuIFRoaXMgbWV0aG9kIG5ldmVyIHJldHVybnMgbnVsbC4KLSAgKiBJbiBvdGhlciB3b3JkcywgYW55IHJlZmVyZW5jZSB0byBhIHJlbGF0aW9uc2hpcCBuYW1lIGF1dG9tYXRpY2FsbHkKLSAgKiBicmluZ3MgYSBjb3JyZXNwb25kaW5nIFJlbCBvYmplY3QgaW50byBleGlzdGVuY2UuIENhcmVsZXNzIG5hbWluZwotICAqIG1heSByZXN1bHQgaW4gdGhlIHtAbGluayAjZ2V0UmVscyBnZXRSZWxzKCl9IG1ldGhvZCByZXR1cm5pbmcgYW4gZW51bWVyYXRpb24gb2YKLSAgKiBtb3JlIHJlbGF0aW9uc2hpcHMgdGhhbiB3b3VsZCBiZSBtZWFuaW5nZnVsLCBlZmZpY2llbnQgb3IgdXNlZnVsLgotICAqLwotICBwdWJsaWMgUmVsIGdldFJlbCAoIFN0cmluZyByZWxOYW1lICk7Ci0KLSAgLyoqCi0gICogUmV0dXJucyBhbiBlbnVtZXJhdGlvbiBvZiBhbGwga25vd24gcmVsYXRpb25zaGlwcy4KLSAgKiBAcmV0dXJuIEVudW1lcmF0aW9uIFRoZSBvdXRib3VuZCByZWxhdGlvbnNoaXBzIG9mIHRoZSBlbGVtZW50LgotICAqIFRoaXMgbWV0aG9kIG5ldmVyIHJldHVybnMgbnVsbC4KLSAgKi8KLSAgcHVibGljIEVudW1lcmF0aW9uIGdldFJlbHMgKCk7Ci0KLQotICAvKgotICAqIFRoZXJlIGlzIGEgbmVlZCBzb21ldGltZXMgZm9yIGVhY2ggZWxlbWVudCBpbiBhIG1vZGVsIHRvIGhhdmUgYSB1bmlxdWUgaWRlbnRpZmllci4KLSAgKiBOb3JtYWxseSB0aGlzIHdvdWxkIGJlIGxlZnQgdG8gYSBuYW1lLCBidXQgc2luY2UgdGhlIGVsZW1lbnQgbWFrZXIgZ2l2ZXMgaXQgaXRzIG5hbWUKLSAgKiB0aGVyZSBpcyBhIGNoYW5jZSB0aGF0IGEgbW9kZWwgY291bGQgaGF2ZSB0d28gZWxlbWVudHMgd2l0aCB0aGUgc2FtZSBuYW1lLiBJZiB0aGV5IAotICAqIGFyZSB0aGUgc2FtZSBlbGVtZW50IHR5cGUgdGhlbiB0aGVyZSB3b3VsZCBiZSBubyB3YXkgdG8gZGlmZmVyZW5jaWF0ZSBiZXR3ZWVuIHRoZSB0d28uCi0gICogVGhlIGZvbGxvd2luZyBnZXR0ZXIgYW5kIHNldHRlciB3aWxsIHByb3ZpZGUgYSB1bmlxdWUgaWRlbnRpZmllci4gVGhpcyBpZGVudGlmaWVyIHdpbGwgYmUga25vd24gCi0gICogYXMgdGhlIG11aWQgb3IgTW9kZWwgVW5pcXVlIElkZW50aWZpZXIuIFVubGlrZSBhIHV1aWQgaXQgd2lsbCBvbmx5IGJlIGFzc3VyZWQgdW5pcXVlbmVzcyAKLSAgKiB3aXRoaW4gaXRzIG93biBtb2RlbC4gVGhlIGludGVudGlvbiBpcyB0byB1c2UgYSB1bmlxdWUgbnVtYmVyIGFwcGVuZGVkIHRvIHRoZSBlbmQgCi0gICogb2YgdGhlIG5hbWUuCi0gICogVGhlIGZvbGxvd2luZyBpcyB0aGUgZ2V0dGVyCi0gICogQHJldHVybiBTdHJpbmcgdGhlIHVuaXF1ZSBpZGVudGlmaWVyCi0gICovCi0KLSAgcHVibGljIFN0cmluZyBnZXRNVUlEKCk7Ci0gIAotICAKLQotCi19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL0VsZW1lbnRBZGFwdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9FbGVtZW50QWRhcHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWJjMTdiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL0VsZW1lbnRBZGFwdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsOwotCi0vKioKLSogVGhpcyBpcyB3aGVyZSB3ZSBzdG9yZSBhbGwgdGhlIHN0YXRlIGRhdGEgdGhhdCB2YXJpb3VzIFVJcwotKiAoc3VjaCBhcyB0aGUgTmV3V1NETENyZWF0aW9uV2l6YXJkKSBjYXB0dXJlIGZyb20gdGhlIHVzZXIKLSogYW5kIHRoZW4gbmVlZCB0byBwcm9jZXNzLgotKi8KLXB1YmxpYyBjbGFzcyBFbGVtZW50QWRhcHRlciBpbXBsZW1lbnRzIEVsZW1lbnRMaXN0ZW5lcgotewotICAvKioKLSAgKiBDYWxsZWQgd2hlbiBhIHByb3BlcnR5IGlzIGFkZGVkIHRvIHRoZSBtb2RlbC4KLSAgKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IGNvbnRhaW5pbmcgdGhlIG1vZGVsLCBwcm9wZXJ0eSBhbmQgdmFsdWUuCi0gICovCi0gIHB1YmxpYyB2b2lkIHByb3BlcnR5QWRkZWQgKCBQcm9wZXJ0eUFkZEV2ZW50IGV2ZW50ICkKLSAgewotICB9Ci0KLSAgLyoqCi0gICogQ2FsbGVkIHdoZW4gYSBwcm9wZXJ0eSBpbiB0aGUgbW9kZWwgY2hhbmdlcy4KLSAgKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IGNvbnRhaW5pbmcgdGhlIG1vZGVsLCBwcm9wZXJ0eSwgb2xkIHZhbHVlCi0gICogYW5kIG5ldyB2YWx1ZS4KLSAgKi8KLSAgcHVibGljIHZvaWQgcHJvcGVydHlDaGFuZ2VkICggUHJvcGVydHlDaGFuZ2VFdmVudCBldmVudCApCi0gIHsKLSAgfQotCi0gIC8qKgotICAqIENhbGxlZCB3aGVuIGEgcHJvcGVydHkgaW4gdGhlIG1vZGVsIGlzIHJlbW92ZWQuCi0gICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCBjb250YWluaW5nIHRoZSBtb2RlbCwgcHJvcGVydHkgYW5kIG9sZCB2YWx1ZS4KLSAgKi8KLSAgcHVibGljIHZvaWQgcHJvcGVydHlSZW1vdmVkICggUHJvcGVydHlSZW1vdmVFdmVudCBldmVudCApCi0gIHsKLSAgfQotCi0gIC8qKgotICAqIENhbGxlZCB3aGVuIGEgcHJvcGVydHkgaXMgYWRkZWQgdG8gdGhlIG1vZGVsLgotICAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQgY29udGFpbmluZyB0aGUgbW9kZWwsIHByb3BlcnR5IGFuZCB2YWx1ZS4KLSAgKi8KLSAgcHVibGljIHZvaWQgcmVsQWRkZWQgKCBSZWxBZGRFdmVudCBldmVudCApCi0gIHsKLSAgfQotCi0gIC8qKgotICAqIENhbGxlZCB3aGVuIGEgcHJvcGVydHkgaXMgYWRkZWQgdG8gdGhlIG1vZGVsLgotICAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQgY29udGFpbmluZyB0aGUgbW9kZWwsIHByb3BlcnR5IGFuZCB2YWx1ZS4KLSAgKi8KLSAgcHVibGljIHZvaWQgcmVsUmVtb3ZlZCAoIFJlbFJlbW92ZUV2ZW50IGV2ZW50ICkKLSAgewotICB9Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL0VsZW1lbnRMaXN0ZW5lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvRWxlbWVudExpc3RlbmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0MDk2ZjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvRWxlbWVudExpc3RlbmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsOwotCi0vKioKLSogVGhpcyBpcyB3aGVyZSB3ZSBzdG9yZSBhbGwgdGhlIHN0YXRlIGRhdGEgdGhhdCB2YXJpb3VzIFVJcwotKiAoc3VjaCBhcyB0aGUgTmV3V1NETENyZWF0aW9uV2l6YXJkKSBjYXB0dXJlIGZyb20gdGhlIHVzZXIKLSogYW5kIHRoZW4gbmVlZCB0byBwcm9jZXNzLgotKi8KLXB1YmxpYyBpbnRlcmZhY2UgRWxlbWVudExpc3RlbmVyCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgLyoqCi0gICogQ2FsbGVkIHdoZW4gYSBwcm9wZXJ0eSBpcyBhZGRlZCB0byB0aGUgbW9kZWwuCi0gICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCBjb250YWluaW5nIHRoZSBtb2RlbCwgcHJvcGVydHkgYW5kIHZhbHVlLgotICAqLwotICBwdWJsaWMgdm9pZCBwcm9wZXJ0eUFkZGVkICggUHJvcGVydHlBZGRFdmVudCBldmVudCApOwotCi0gIC8qKgotICAqIENhbGxlZCB3aGVuIGEgcHJvcGVydHkgaW4gdGhlIG1vZGVsIGNoYW5nZXMuCi0gICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCBjb250YWluaW5nIHRoZSBtb2RlbCwgcHJvcGVydHksIG9sZCB2YWx1ZQotICAqIGFuZCBuZXcgdmFsdWUuCi0gICovCi0gIHB1YmxpYyB2b2lkIHByb3BlcnR5Q2hhbmdlZCAoIFByb3BlcnR5Q2hhbmdlRXZlbnQgZXZlbnQgKTsKLQotICAvKioKLSAgKiBDYWxsZWQgd2hlbiBhIHByb3BlcnR5IGluIHRoZSBtb2RlbCBpcyByZW1vdmVkLgotICAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQgY29udGFpbmluZyB0aGUgbW9kZWwsIHByb3BlcnR5IGFuZCBvbGQgdmFsdWUuCi0gICovCi0gIHB1YmxpYyB2b2lkIHByb3BlcnR5UmVtb3ZlZCAoIFByb3BlcnR5UmVtb3ZlRXZlbnQgZXZlbnQgKTsKLQotICAvKioKLSAgKiBDYWxsZWQgd2hlbiBhIHByb3BlcnR5IGlzIGFkZGVkIHRvIHRoZSBtb2RlbC4KLSAgKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IGNvbnRhaW5pbmcgdGhlIG1vZGVsLCBwcm9wZXJ0eSBhbmQgdmFsdWUuCi0gICovCi0gIHB1YmxpYyB2b2lkIHJlbEFkZGVkICggUmVsQWRkRXZlbnQgZXZlbnQgKTsKLQotICAvKioKLSAgKiBDYWxsZWQgd2hlbiBhIHByb3BlcnR5IGlzIGFkZGVkIHRvIHRoZSBtb2RlbC4KLSAgKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IGNvbnRhaW5pbmcgdGhlIG1vZGVsLCBwcm9wZXJ0eSBhbmQgdmFsdWUuCi0gICovCi0gIHB1YmxpYyB2b2lkIHJlbFJlbW92ZWQgKCBSZWxSZW1vdmVFdmVudCBldmVudCApOwotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9Nb2RlbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvTW9kZWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmFhNWRmNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9Nb2RlbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotLyoqCi0qIFRoaXMgaXMgdGhlIGFic3RyYWN0IGNsYXNzIGZvciBhIHNpbXBsZSBkYXRhIG1vZGVsIGNvbnNpc3Rpbmcgb2YKLSogYSBuZXR3b3JrIG9mIG5hbWVkIG5vZGVzIChjbGFzcyBOb2RlKS4gRXZlcnkgbm9kZSBjYXJyaWVzIGEgc2V0Ci0qIG9mIG5hbWVkIHByb3BlcnRpZXMgKGNsYXNzIFByb3BlcnR5KS4gTm9kZXMgYXJlIGludGVycmVsYXRlZCBieQotKiByZWxhdGlvbnNoaXBzIChjbGFzcyBSZWwpIGFuZCBjb25uZWN0aW9ucyAoY2xhc3MgQ29ubmVjdGlvbikuCi0qIEVhY2ggTW9kZWwga2VlcHMgYSByZWdpc3RyeSBvZiBhbGwgb2YgaXRzIG5vZGVzLCBhbmQga2VlcHMgYQotKiByZWZlcmVuY2UgdG8gb25lICJyb290IiBub2RlIHRoYXQgY2FuIGJlIHVzZWQgYXMgYSBzdGFydGluZwotKiBwb2ludCBmb3IgbmF2aWdhdGlvbi4KLSovCi1wdWJsaWMgaW50ZXJmYWNlIE1vZGVsCi17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgLyoqCi0gICogU2V0cyB0aGUgbmFtZSBvZiB0aGUgbW9kZWwuCi0gICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIG1vZGVsLgotICAqLwotICBwdWJsaWMgdm9pZCBzZXROYW1lICggU3RyaW5nIG5hbWUgKTsKLQotICAvKioKLSAgKiBHZXRzIHRoZSBuYW1lIG9mIHRoZSBtb2RlbC4KLSAgKiBAcmV0dXJuIFN0cmluZyBUaGUgbmFtZSBvZiB0aGUgbW9kZWwuIFRoaXMgbXVzdCBub3QgYmUgbnVsbC4KLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXROYW1lICgpOwotCi0gIC8qKgotICAqIFNldHMgYSBub2RlIGFzIHRoZSByb290IG9mIHRoZSBtb2RlbC4gSWYgdGhlIG5vZGUgZG9lcyBub3QKLSAgKiBiZWxvbmcgdG8gYSBtb2RlbCwgdGhlbiBpdCBpcyBhZGRlZCBhdXRvbWF0aWNhbGx5LiBJZiB0aGUKLSAgKiBub2RlIGFscmVhZHkgYmVsb25ncyB0byBhbm90aGVyIG1vZGVsLCB0aGVuIHRoZSByb290IG5vZGUKLSAgKiBpcyBub3Qgc2V0IGFuZCBtZXRob2QgcmV0dXJucyBmYWxzZS4KLSAgKiBAcGFyYW0gcm9vdCBUaGUgbm9kZSB0byBzZXQgYXMgdGhlIHJvb3QuIFRoZSBub2RlIG11c3QKLSAgKiBiZWxvbmcgZWl0aGVyIHRvIHRoaXMgbW9kZWwgb3IgdG8gbm8gbW9kZWwuIFRoaXMgbXVzdAotICAqIG5vdCBiZSBudWxsLgotICAqIEByZXR1cm4gYm9vbGVhbiBUcnVlIGlmIHRoZSBub2RlIHdhcyBzZXQgYXMgdGhlIHJvb3QuCi0gICogVGhpcyBtZXRob2QgcmV0dXJucyBmYWxzZSBpZiB0aGUgZ2l2ZW4gbm9kZSBhbHJlYWR5IGJlbG9uZ3MKLSAgKiB0byBhbm90aGVyIG1vZGVsLgotICAqLwotICBwdWJsaWMgYm9vbGVhbiBzZXRSb290RWxlbWVudCAoIEVsZW1lbnQgcm9vdCApOwotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIHJvb3Qgbm9kZS4gVGhpcyBtZXRob2QgYWx3YXlzIHJldHVybnMgYSBub2RlCi0gICogZXhjZXB0IG9uIGFuIGVtcHR5IE1vZGVsLiBJZiBzZXRSb290Tm9kZSgpIGhhcyBub3QgYmVlbgotICAqIGNhbGxlZCwgb3IgaWYgdGhlIGxhc3Qgcm9vdCBub2RlIHdhcyByZW1vdmVkIGZyb20gdGhlIG1vZGVsLAotICAqIHRoZW4gdGhlIG1ldGhvZCB3aWxsIHNlbGVjdCBhbmQgcmV0dXJuIGFuIGFyYml0cmFyeSBub2RlIGFzCi0gICogdGhlIHJvb3QuIFRoaXMgbWV0aG9kIHdpbGwgY29uc2lzdGVudGx5IHJldHVybiB0aGUgc2FtZSBub2RlCi0gICogdW50aWwgZWl0aGVyCi0gICogKGEpIHNldFJvb3ROb2RlKCkgaXMgY2FsbGVkIHdpdGggYSBkaWZmZXJlbnQgbm9kZSBvcgotICAqIChiKSByZW1vdmVOb2RlKCkgaXMgY2FsbGVkIHRvIHJlbW92ZSB0aGUgbm9kZSBmcm9tIHRoZSBtb2RlbC4KLSAgKiBAcmV0dXJuIE5vZGUgVGhlIGN1cnJlbnQgcm9vdCBub2RlLCBvciBudWxsIGlmIHRoZSBtb2RlbCBpcyBlbXB0eS4KLSAgKi8KLQotICBwdWJsaWMgRWxlbWVudCBnZXRSb290RWxlbWVudCAoKTsKLQotICAvKioKLSAgKiBHZXQgdGhlIGVsZW1lbnRzIHRoYXQgaGF2ZSB0aGlzIG5hbWUKLSAgKiBAcGFyYW0gU3RyaW5nIG5hbWUgdGhlIG5hbWUgb2YgdGhlIGVsZW1lbnQgCi0gICogQHJldHVybiBWZWN0b3IgYSB2ZWN0b3Igb2YgZWxlbWVudHMgdGhhdCBoYXZlIHRoaXMgbmFtZQotICAqIFRoZXNlIGVsZW1lbnRzIG1heSBiZSBvZiBkaWZmZXJlbnQgdHlwZXMKLSAgKiovCi0KLSAgcHVibGljIFZlY3RvciBnZXRFbGVtZW50c0J5TmFtZShTdHJpbmcgbmFtZSk7Ci0KLSAgLyoqCi0gICogQWRkcyBhIG5vZGUgdG8gdGhlIG1vZGVsLiBJZiB0aGUgbm9kZSBhbHJlYWR5IGJlbG9uZ3MgdG8gYW5vdGhlcgotICAqIG1vZGVsIHRoZW4gaXQgd2lsbCBub3QgYmUgYWRkZWQuCi0gICogQHBhcmFtIG5vZGUgVGhlIG5vZGUgdG8gYWRkLiBUaGlzIG11c3Qgbm90IGJlIG51bGwuCi0gICogQHJldHVybiBib29sZWFuIFRydWUgaWYgdGhlIG5vZGUgd2FzIGFkZGVkIHN1Y2Nlc3NmdWxseS4KLSAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGZhbHNlIGlmIHRoZSBnaXZlbiBub2RlIGFscmVhZHkgYmVsb25ncyB0bwotICAqIHRoZSBjdXJyZW50IG1vZGVsIG9yIHRvIGFub3RoZXIgbW9kZWwuCi0gICovCi0gIHB1YmxpYyBib29sZWFuIGFkZEVsZW1lbnQgKCBFbGVtZW50IGVsZW1lbnQgKTsKLQotICAvKioKLSAgKiBSZW1vdmVzIGEgbm9kZSBmcm9tIHRoZSBtb2RlbC4KLSAgKiBAcGFyYW0gbm9kZSBUaGUgbm9kZSB0byByZW1vdmUuIFRoaXMgbXVzdCBub3QgYmUgbnVsbC4KLSAgKiBAcmV0dXJuIGJvb2xlYW4gVHJ1ZSBpZiB0aGUgbm9kZSB3YXMgcmVtb3ZlZCBzdWNjZXNzZnVsbHkuCi0gICogVGhpcyBtZXRob2QgcmV0dXJucyBmYWxzZSBpZiB0aGUgZ2l2ZW4gbm9kZSBkb2VzIG5vdCBiZWxvbmcKLSAgKiB0byB0aGlzIG1vZGVsLgotICAqLwotICBwdWJsaWMgYm9vbGVhbiByZW1vdmVFbGVtZW50ICggRWxlbWVudCBlbGVtZW50ICk7Ci0KLSAgLyoqCi0gICogUmV0dXJucyBhbiBlbnVtZXJhdGlvbiBvZiBhbGwgbm9kZXMgaW4gdGhlIG1vZGVsIGFuZCBpbiBubwotICAqIHBhcnRpY3VsYXIgb3JkZXIsCi0gICogQHJldHVybiBFbnVtZXJhdGlvbiBBbiBlbnVtZXJhdGlvbiBvZiBhbGwgbm9kZXMgaW4gdGhlIG1vZGVsLgotICAqIFRoaXMgbWV0aG9kIG5ldmVyIHJldHVybnMgbnVsbC4KLSAgKi8KLSAgcHVibGljIEVudW1lcmF0aW9uIGdldEVsZW1lbnRzICgpOwotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBub2RlcyBpbiB0aGUgbW9kZWwuCi0gICogQHJldHVybiBpbnQgVGhlIG51bWJlciBvZiBub2RlcyBpbiB0aGUgbW9kZWwuCi0gICogVGhpcyBtZXRob2QgbmV2ZXIgcmV0dXJucyBhIG5lZ2F0aXZlIHZhbHVlLgotICAqLwotICBwdWJsaWMgaW50IGdldE51bWJlck9mRWxlbWVudHMgKCk7Ci0KLSAgLyoqCi0gICogRGV0ZXJtaW5lcyBpZiB0aGlzIG1vZGVsIGNvbnRhaW5zIHRoZSBnaXZlbiBub2RlLgotICAqIEBwYXJhbSBub2RlIFRoZSBub2RlIHRvIGNoZWNrIGZvci4gVGhpcyBtdXN0IG5vdCBiZSBudWxsLgotICAqIEByZXR1cm4gYm9vbGVhbiBUcnVlIGlmIGFuZCBvbmx5IGlmIHRoZSBtb2RlbCBjb250YWlucyB0aGUgbm9kZS4KLSAgKi8KLSAgcHVibGljIGJvb2xlYW4gY29udGFpbnNFbGVtZW50ICggRWxlbWVudCBlbGVtZW50ICk7Ci0KLSAgLyoKLSAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcHJvdmlkZSB0aGUgbmV4dCBudW1iZXIgaW4gdGhlIHF1ZXVlIGZvciB0aGUgTVVJRAotICAqCi0gICovCi0gIHB1YmxpYyBpbnQgZ2V0VW5pcXVlTnVtYmVyKCk7Ci0KLSAgLyoKLSAgKiBoZXJlcyB3aGF0IHdlIGNhbGwgZnJvbSB0aGUgZWxlbWVudAotICAqLwotICBwdWJsaWMgU3RyaW5nIG1ha2VNVUlEKFN0cmluZyBuYW1lKTsKLQotCi19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL1Byb3BlcnR5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9Qcm9wZXJ0eS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjNkMjFiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL1Byb3BlcnR5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsOwotCi0vKioKLSogVGhpcyBpcyB0aGUgYWJzdHJhY3QgY2xhc3MgZm9yIHByb3BlcnRpZXMgb2YgYSBOb2RlLgotKiBFdmVyeSBwcm9wZXJ0eSBoYXMgYW4gaW1tdXRhYmxlIG5hbWUgYW5kIGEgdmFsdWUgb2YgdHlwZSBPYmplY3QuCi0qLwotcHVibGljIGludGVyZmFjZSBQcm9wZXJ0eQotewotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIC8qKgotICAqIEV2ZXJ5IE5vZGUgaGFzIGEgcHJvcGVydHkgY2FsbGVkICJuYW1lIiB0aGF0IGlzIGVxdWl2YWxlbnQKLSAgKiB0byBhbmQga2VwdCBzeW5jaHJvbml6ZWQgd2l0aCBOb2RlLmdldE5hbWUoKSBhbmQgTm9kZS5zZXROYW1lKCkuCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUUgPSAibmFtZSI7Ci0KLSAgLyoqCi0gICogUmV0dXJucyBhIHNoYWxsb3cgY2xvbmUgb2YgdGhpcyA8Y29kZT5Qcm9wZXJ0eTwvY29kZT4uCi0gICogUHJvcGVydHkga2V5IGFuZCB2YWx1ZSByZWZlcmVuY2VzIGFyZSBjbG9uZWQsCi0gICogYnV0IHRoZSB2YWx1ZSBvYmplY3RzIHRoZW1zZWx2ZXMgYXJlIG5vdCBjbG9uZWQuCi0gICogQHJldHVybiBQcm9wZXJ0eSBBIG5ldyBQcm9wZXJ0eS4KLSAgKi8KLSAgcHVibGljIFByb3BlcnR5IHNoYWxsb3dDbG9uZSAoKTsKLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoaXMgbm9kZS4KLSAgKiBAcmV0dXJuIFN0cmluZyBUaGUgbmFtZSBvZiB0aGlzIG5vZGUuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSAoKTsKLQotICAvKioKLSAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGlzIHByb3BlcnR5LgotICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LiBBbnkgcHJldmlvdXMgdmFsdWUgaXMgcmVwbGFjZWQuCi0gICovCi0gIHB1YmxpYyB2b2lkIHNldFZhbHVlICggT2JqZWN0IHZhbHVlICk7Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eS4KLSAgKiBAcmV0dXJuIE9iamVjdCBUaGUgdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eSwgcG9zc2libHkgbnVsbC4KLSAgKi8KLSAgcHVibGljIE9iamVjdCBnZXRWYWx1ZSAoKTsKLQotICAvKioKLSAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGlzIHByb3BlcnR5IGFzIGEgc3RyaW5nLgotICAqIEBwYXJhbSB2YWx1ZSBUaGUgc3RyaW5nIHRvIHNldC4gQW55IHByZXZpb3VzIHZhbHVlIGlzIHJlcGxhY2VkLgotICAqIFRoZSB0eXBlIG9mIHRoZSBwcmV2aW91cyB2YWx1ZSwgaWYgYW55LCBpcyBvZiBubyBjb25zZXF1ZW5jZS4KLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0VmFsdWVBc1N0cmluZyAoIFN0cmluZyB2YWx1ZSApOwotCi0gIC8qKgotICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoaXMgcHJvcGVydHkgYXMgYSBzdHJpbmcuCi0gICogQHJldHVybiBTdHJpbmcgdGhlIHZhbHVlIG9mIHRoaXMgcHJvcGVydHkgYXMgYSBzdHJpbmcsIHBvc3NpYmx5IG51bGwuCi0gICogSWYgdGhlIHNldCB2YWx1ZSBpcyBhbiBhcmJpdHJhcnkgT2JqZWN0LCB0aGVuIE9iamVjdC50b1N0cmluZygpIGlzCi0gICogcmV0dXJuZWQuCi0gICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VmFsdWVBc1N0cmluZyAoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL1Byb3BlcnR5QWRkRXZlbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL1Byb3BlcnR5QWRkRXZlbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmEyN2NhMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9Qcm9wZXJ0eUFkZEV2ZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsOwotCi0vKioKLSogQ2FycmllcyBkYXRhIHJlbGV2YW50IHRvIHdoZW4gYSBwcm9wZXJ0eSBpcyBhZGRlZCB0byB0aGUgbW9kZWwuCi0qLwotcHVibGljIGNsYXNzIFByb3BlcnR5QWRkRXZlbnQKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAvKioKLSAgKiBUaGUgbW9kZWwgdGhlIGNoYW5nZWQuCi0gICovCi0gIHByb3RlY3RlZCBCYXNpY0VsZW1lbnQgZkVsZW1lbnQ7Ci0KLSAgLyoqCi0gICogVGhlIHByb3BlcnR5IHRoYXQgd2FzIGFkZGVkLgotICAqLwotICBwcm90ZWN0ZWQgUHJvcGVydHkgZlByb3BlcnR5OwotCi0gCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICogQHBhcmFtIG1vZGVsIFRoZSBtb2RlbCB0aGF0IGNoYW5nZWQuCi0gICAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgcHJvcGVydHkgdGhhdCB3YXMgYWRkZWQuCi0gICAqIEBwYXJhbSB2YWx1ZSBUaGUgcHJvcGVydHkncyB2YWx1ZS4KLSAgICovCi0gIHB1YmxpYyBQcm9wZXJ0eUFkZEV2ZW50ICggQmFzaWNFbGVtZW50IGVsZW1lbnQsIFByb3BlcnR5IHByb3BlcnR5KQotICB7Ci0gICAgZkVsZW1lbnQgPSBlbGVtZW50OwotICAgIGZQcm9wZXJ0eSA9IHByb3BlcnR5OwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1vZGVsIHRoYXQgY2hhbmdlZCAodGhhdCBwcm9kdWNlZCB0aGlzIGV2ZW50KS4KLSAgICogQHJldHVybiBUaW55TW9kZWwgVGhlIG1vZGVsIHRoYXQgY2hhbmdlZC4KLSAgICovCi0gIHB1YmxpYyBCYXNpY0VsZW1lbnQgZ2V0RWxlbWVudCAoKQotICB7Ci0gICAgcmV0dXJuIGZFbGVtZW50OwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1vZGVsIHByb3BlcnR5IHRoYXQgd2FzIGFkZGVkLgotICAgKiBAcmV0dXJuIFRpbnlNb2RlbCBUaGUgcHJvcGVydHkgdGhhdCB3YXMgYWRkZWQuCi0gICAqLwotICBwdWJsaWMgUHJvcGVydHkgZ2V0UHJvcGVydHkgKCkKLSAgewotICAgIHJldHVybiBmUHJvcGVydHk7Ci0gIH0KLQotICAKLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvUHJvcGVydHlDaGFuZ2VFdmVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvUHJvcGVydHlDaGFuZ2VFdmVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YmYwMTMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL1Byb3BlcnR5Q2hhbmdlRXZlbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWw7Ci0KLS8qKgotKiBDYXJyaWVzIGRhdGEgcmVsZXZhbnQgdG8gd2hlbiBhIHByb3BlcnR5IGlzIGNoYW5nZWQgaW4gdGhlIG1vZGVsLgotKi8KLXB1YmxpYyBjbGFzcyBQcm9wZXJ0eUNoYW5nZUV2ZW50Ci17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgLyoqCi0gICogVGhlIG1vZGVsIHRoZSBjaGFuZ2VkLgotICAqLwotICBwcm90ZWN0ZWQgQmFzaWNFbGVtZW50IGZFbGVtZW50OwotCi0gIC8qKgotICAqIFRoZSBwcm9wZXJ0eSB0aGF0IGNoYW5nZWQuCi0gICovCi0gIHByb3RlY3RlZCBQcm9wZXJ0eSBmUHJvcGVydHk7Ci0KLSAgLyoqCi0gICogVGhlIHByb3BlcnR5J3Mgb2xkIHZhbHVlLgotICAqLwotICBwcm90ZWN0ZWQgUHJvcGVydHkgZk9sZFByb3BlcnR5OwotCi0gICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIEBwYXJhbSBtb2RlbCBUaGUgbW9kZWwgdGhhdCBjaGFuZ2VkLgotICAgKiBAcGFyYW0gcHJvcGVydHkgVGhlIHByb3BlcnR5IHRoYXQgY2hhbmdlZC4KLSAgICogQHBhcmFtIG9sZFZhbHVlIFRoZSBwcm9wZXJ0eSdzIG9sZCB2YWx1ZS4KLSAgICogQHBhcmFtIG5ld1ZhbHVlIFRoZSBwcm9wZXJ0eSdzIG5ldyB2YWx1ZS4KLSAgICovCi0gIHB1YmxpYyBQcm9wZXJ0eUNoYW5nZUV2ZW50ICggQmFzaWNFbGVtZW50IGVsZW1lbnQgLCBQcm9wZXJ0eSBwcm9wZXJ0eSwgUHJvcGVydHkgb2xkUHJvcGVydHkgKQotICB7Ci0gICAgZkVsZW1lbnQgPSBlbGVtZW50OwotICAgIGZQcm9wZXJ0eSA9IHByb3BlcnR5OwotICAgIGZPbGRQcm9wZXJ0eSA9IG9sZFByb3BlcnR5OwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1vZGVsIHRoYXQgY2hhbmdlZCAodGhhdCBwcm9kdWNlZCB0aGlzIGV2ZW50KS4KLSAgICogQHJldHVybiBUaW55TW9kZWwgVGhlIG1vZGVsIHRoYXQgY2hhbmdlZC4KLSAgICovCi0gIHB1YmxpYyBCYXNpY0VsZW1lbnQgZ2V0RWxlbWVudCAoKQotICB7Ci0gICAgcmV0dXJuIGZFbGVtZW50OwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG1vZGVsIHByb3BlcnR5IHRoYXQgY2hhbmdlZC4KLSAgICogQHJldHVybiBUaW55TW9kZWwgVGhlIHByb3BlcnR5IHRoYXQgY2hhbmdlZC4KLSAgICovCi0gIHB1YmxpYyBQcm9wZXJ0eSBnZXRQcm9wZXJ0eSAoKQotICB7Ci0gICAgcmV0dXJuIGZQcm9wZXJ0eTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtb2RlbCBwcm9wZXJ0eSdzIG9sZCB2YWx1ZS4KLSAgICogQHJldHVybiBUaW55TW9kZWwgVGhlIHByb3BlcnR5J3Mgb2xkIHZhbHVlLgotICAgKi8KLSAgcHVibGljIFByb3BlcnR5IGdldE9sZFByb3BlcnR5ICgpCi0gIHsKLSAgICByZXR1cm4gZk9sZFByb3BlcnR5OwotICB9Ci0KLSAgCi19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL1Byb3BlcnR5UmVtb3ZlRXZlbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL1Byb3BlcnR5UmVtb3ZlRXZlbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDgxYTE4My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9Qcm9wZXJ0eVJlbW92ZUV2ZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsOwotCi0vKioKLSogQ2FycmllcyBkYXRhIHJlbGV2YW50IHRvIHdoZW4gYSBwcm9wZXJ0eSBpcyByZW1vdmVkIGZyb20gdGhlIG1vZGVsLgotKi8KLXB1YmxpYyBjbGFzcyBQcm9wZXJ0eVJlbW92ZUV2ZW50Ci17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgLyoqCi0gICogVGhlIG1vZGVsIHRoZSBjaGFuZ2VkLgotICAqLwotICBwcm90ZWN0ZWQgQmFzaWNFbGVtZW50IGZFbGVtZW50OwotCi0gIC8qKgotICAqIFRoZSBwcm9wZXJ0eSB0aGF0IHdhcyByZW1vdmVkLgotICAqLwotICBwcm90ZWN0ZWQgUHJvcGVydHkgZlByb3BlcnR5OwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICogQHBhcmFtIG1vZGVsIFRoZSBtb2RlbCB0aGF0IGNoYW5nZWQuCi0gICAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgcHJvcGVydHkgdGhhdCB3YXMgcmVtb3ZlZC4KLSAgICogQHBhcmFtIHZhbHVlIFRoZSBwcm9wZXJ0eSdzIHZhbHVlLgotICAgKi8KLSAgcHVibGljIFByb3BlcnR5UmVtb3ZlRXZlbnQgKCBCYXNpY0VsZW1lbnQgZWxlbWVudCwgUHJvcGVydHkgcHJvcGVydHkpCi0gIHsKLSAgICBmRWxlbWVudCA9IGVsZW1lbnQ7Ci0gICAgZlByb3BlcnR5ID0gcHJvcGVydHk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbW9kZWwgdGhhdCBjaGFuZ2VkICh0aGF0IHByb2R1Y2VkIHRoaXMgZXZlbnQpLgotICAgKiBAcmV0dXJuIFRpbnlNb2RlbCBUaGUgbW9kZWwgdGhhdCBjaGFuZ2VkLgotICAgKi8KLSAgcHVibGljIEJhc2ljRWxlbWVudCBnZXRFbGVtZW50ICgpCi0gIHsKLSAgICByZXR1cm4gZkVsZW1lbnQ7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbW9kZWwgcHJvcGVydHkgdGhhdCB3YXMgcmVtb3ZlZC4KLSAgICogQHJldHVybiBUaW55TW9kZWwgVGhlIHByb3BlcnR5IHRoYXQgd2FzIHJlbW92ZWQuCi0gICAqLwotICBwdWJsaWMgUHJvcGVydHkgZ2V0UHJvcGVydHkgKCkKLSAgewotICAgIHJldHVybiBmUHJvcGVydHk7Ci0gIH0KLQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9SZWwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL1JlbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZmIyOTJiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL1JlbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmRhdGFtb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLQotLyoqCi0qIFRoaXMgaXMgdGhlIGFic3RyYWN0IGNsYXNzIGZvciByZWxhdGlvbnNoaXBzIGluIGEgTW9kZWwuCi0qLwotcHVibGljIGludGVyZmFjZSBSZWwKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoaXMgcmVsYXRpb25zaGlwLiBSZWxhdGlvbnNoaXAgbmFtZXMKLSAgKiBjYW5ub3QgYmUgY2hhbmdlZC4KLSAgKiBAcmV0dXJuIFN0cmluZyBUaGUgbmFtZSBvZiB0aGUgcmVsYXRpb25zaGlwLgotICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUgKCk7Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbm9kZSB0aGF0IG93bnMgdGhpcyByZWxhdGlvbnNoaXAuCi0gICogQHJldHVybiBOb2RlIFRoZSBub2RlIHRoYXQgb3ducyB0aGlzIHJlbGF0aW9uc2hpcC4KLSAgKiBUaGlzIG1ldGhvZCBuZXZlciByZXR1cm5zIG51bGwsIHRoYXQgaXMsIHJlbGF0aW9uc2hpcHMKLSAgKiBjYW5ub3QgZXhpc3QgaW4gdGhlIGFic2VuY2Ugb2YgYSBub2RlLgotICAqLwotICBwdWJsaWMgRWxlbWVudCBnZXRTb3VyY2VFbGVtZW50KCk7Ci0KLSAgLyoqCi0gICogUmV0dXJucyBhbiBlbnVtZXJhdGlvbiBvZiBhbGwgbm9kZXMgaW4gdGhpcyByZWxhdGlvbnNoaXAuCi0gICogQHJldHVybiBFbnVtZXJhdGlvbiBUaGUgbm9kZXMgaW4gdGhpcyByZWxhdGlvbnNoaXAuCi0gICogVGhpcyBtZXRob2QgbmV2ZXIgcmV0dXJucyBudWxsLgotICAqLwotICBwdWJsaWMgRW51bWVyYXRpb24gZ2V0VGFyZ2V0RWxlbWVudHMgKCk7Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIG5vZGVzIGluIHRoaXMgcmVsYXRpb25zaGlwLgotICAqIEByZXR1cm4gaW50IFRoZSBudW1iZXIgb2Ygbm9kZXMgaW4gdGhpcyByZWxhdGlvbnNoaXAuCi0gICogVGhpcyBtZXRob2QgbmV2ZXIgcmV0dXJucyBhIG5lZ2F0aXZlIHZhbHVlLgotICAqLwotICBwdWJsaWMgaW50IGdldE51bWJlck9mVGFyZ2V0RWxlbWVudHMgKCk7Ci0KLSAgLyoqCi0gICogQWRkcyBhIGNvbm5lY3Rpb24gdG8gdGhpcyByZWxhdGlvbnNoaXAuIFRoaXMgbWV0aG9kIGlzCi0gICogaW50ZW5kZWQgZm9yIHVzZSBieSBkZXJpdmF0aW9ucyBvZiB0aGUgTW9kZWwgZnJhbWV3b3JrLAotICAqIG5vdCBieSB1c2VycyBvZiB0aGUgZnJhbWV3b3JrLiBDb25uZWN0aW9uIG9iamVjdHMgc2hvdWxkCi0gICogb25seSBiZSBjb25zdHJ1Y3RlZCwgYWRkZWQsIHJlbW92ZWQgYW5kIHJldHJpZXZlZCBieQotICAqIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgTm9kZSBhbmQgUmVsIGludGVyZmFjZXMuCi0gICogQHBhcmFtIGNvbm5lY3Rpb24gVGhlIGNvbm5lY3Rpb24gdG8gYWRkLgotICAqLwotICBwdWJsaWMgdm9pZCBhZGRDb25uZWN0aW9uICggQ29ubmVjdGlvbiBjb25uZWN0aW9uICk7Ci0KLSAgLyoqCi0gICogUmVtb3ZlcyBhIGNvbm5lY3Rpb24gZnJvbSB0aGlzIHJlbGF0aW9uc2hpcC4gVGhpcyBtZXRob2QgaXMKLSAgKiBpbnRlbmRlZCBmb3IgdXNlIGJ5IGRlcml2YXRpb25zIG9mIHRoZSBNb2RlbCBmcmFtZXdvcmssCi0gICogbm90IGJ5IHVzZXJzIG9mIHRoZSBmcmFtZXdvcmsuIENvbm5lY3Rpb24gb2JqZWN0cyBzaG91bGQKLSAgKiBvbmx5IGJlIGNvbnN0cnVjdGVkLCBhZGRlZCwgcmVtb3ZlZCBhbmQgcmV0cmlldmVkIGJ5Ci0gICogaW1wbGVtZW50YXRpb25zIG9mIHRoZSBOb2RlIGFuZCBSZWwgaW50ZXJmYWNlcy4KLSAgKiBAcGFyYW0gY29ubmVjdGlvbiBUaGUgY29ubmVjdGlvbiB0byByZW1vdmUuCi0gICogQHJldHVybiBib29sZWFuIFRydWUgaWYgdGhlIGNvbm5lY3Rpb24gd2FzIGZvdW5kIGFuZCByZW1vdmVkLgotICAqLwotICBwdWJsaWMgYm9vbGVhbiByZW1vdmVDb25uZWN0aW9uICggQ29ubmVjdGlvbiBjb25uZWN0aW9uICk7Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgQ29ubmVjdGlvbiBvYmplY3QgZm9yIHRoZSBnaXZlbiB0YXJnZXQgbm9kZS4KLSAgKiBUaGlzIG1ldGhvZCBpcyBpbnRlbmRlZCBmb3IgdXNlIGJ5IGRlcml2YXRpb25zIG9mIHRoZSBNb2RlbAotICAqIGZyYW1ld29yaywgbm90IGJ5IHVzZXJzIG9mIHRoZSBmcmFtZXdvcmsuIENvbm5lY3Rpb24gb2JqZWN0cwotICAqIHNob3VsZCBvbmx5IGJlIGNvbnN0cnVjdGVkLCBhZGRlZCwgcmVtb3ZlZCBhbmQgcmV0cmlldmVkIGJ5Ci0gICogaW1wbGVtZW50YXRpb25zIG9mIHRoZSBOb2RlIGFuZCBSZWwgaW50ZXJmYWNlcy4KLSAgKiBAcGFyYW0gdGFyZ2V0Tm9kZSBUaGUgbm9kZSB0byBmaW5kIHRoZSBDb25uZWN0aW9uIHRvLgotICAqIEByZXR1cm4gQ29ubmVjdGlvbiBUaGUgY29ubmVjdGlvbiwgb3IgbnVsbCBpZiBub25lLgotICAqLwotICBwdWJsaWMgQ29ubmVjdGlvbiBnZXRDb25uZWN0aW9uVG8gKCBFbGVtZW50IHRhcmdldEVsZW1lbnQgKTsKLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvUmVsQWRkRXZlbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL1JlbEFkZEV2ZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzY2M0OWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9kYXRhbW9kZWwvUmVsQWRkRXZlbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZGF0YW1vZGVsOwotCi0vKioKLSogQ2FycmllcyBkYXRhIHJlbGV2YW50IHRvIHdoZW4gYSBwcm9wZXJ0eSBpcyBhZGRlZCB0byB0aGUgbW9kZWwuCi0qLwotcHVibGljIGNsYXNzIFJlbEFkZEV2ZW50Ci17Ci0KLSAgLy8gQ29weXJpZ2h0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAwLCAyMDAyLiI7Ci0KLSAgLyoqCi0gICogVGhlIG1vZGVsIHRoZSBjaGFuZ2VkLgotICAqLwotICBwcm90ZWN0ZWQgQ29ubmVjdGlvbiBmT3V0Qm91bmQ7Ci0KLSAgLyoqCi0gICogVGhlIG1vZGVsIHRoZSBjaGFuZ2VkLgotICAqLwotICBwcm90ZWN0ZWQgQ29ubmVjdGlvbiBmSW5Cb3VuZDsKLQotICAvKioKLSAgKiBUaGUgcHJvcGVydHkgdGhhdCB3YXMgYWRkZWQuCi0gICovCi0gIHByb3RlY3RlZCBQcm9wZXJ0eSBmUHJvcGVydHk7Ci0KLSAKLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKiBAcGFyYW0gbW9kZWwgVGhlIG1vZGVsIHRoYXQgY2hhbmdlZC4KLSAgICogQHBhcmFtIHByb3BlcnR5IFRoZSBwcm9wZXJ0eSB0aGF0IHdhcyBhZGRlZC4KLSAgICogQHBhcmFtIHZhbHVlIFRoZSBwcm9wZXJ0eSdzIHZhbHVlLgotICAgKi8KLSAgcHVibGljIFJlbEFkZEV2ZW50IChDb25uZWN0aW9uW10gcGFpcikKLSAgewotICAgICBmT3V0Qm91bmQgPSBwYWlyW0Jhc2ljQ29ubmVjdGlvbi5PVVRCT1VORF07Ci0gICAgIGZJbkJvdW5kID0gcGFpcltCYXNpY0Nvbm5lY3Rpb24uSU5CT1VORF07Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgb3V0Ym91bmQgY29ubmVjdGlvbiB0aGF0IGNoYW5nZWQgCi0gICoqLwotICBwdWJsaWMgQ29ubmVjdGlvbiBnZXRPdXRCb3VuZENvbm5lY3Rpb24gKCkKLSAgewotICAgIHJldHVybiBmT3V0Qm91bmQ7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgY2hhbmdlZCByZWwgbmFtZSAKLSAgKiovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0T3V0Qm91bmRSZWxOYW1lKCkKLSAgewotICAgIHJldHVybiBmT3V0Qm91bmQuZ2V0UmVsKCkuZ2V0TmFtZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGNoYW5nZWQgcmVsCi0gICoqLwotICBwdWJsaWMgUmVsIGdldE91dEJvdW5kUmVsKCkKLSAgewotICAgIHJldHVybiBmT3V0Qm91bmQuZ2V0UmVsKCk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgY2hhbmdlZCByZWwgbmFtZSAKLSAgKiovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5Cb3VuZFJlbE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIGZJbkJvdW5kLmdldFJlbCgpLmdldE5hbWUoKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBjaGFuZ2VkIHJlbAotICAqKi8KLSAgcHVibGljIFJlbCBnZXRJbkJvdW5kUmVsKCkKLSAgewotICAgIHJldHVybiBmSW5Cb3VuZC5nZXRSZWwoKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBvdXRib3VuZCBlbGVtZW50IHRoYXQgY2hhbmdlZCAKLSAgKiovCi0gIHB1YmxpYyBFbGVtZW50IGdldFBhcmVudEVsZW1lbnQgKCkKLSAgewotICAgIHJldHVybiBmT3V0Qm91bmQuZ2V0RWxlbWVudCgpOwotICB9Ci0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBpbmJvdW5kIGNvbm5lY3Rpb24gdGhhdCBjaGFuZ2VkIAotICAqKi8KLSAgcHVibGljIEVsZW1lbnQgZ2V0Q2hpbGRFbGVtZW50ICgpCi0gIHsKLSAgICByZXR1cm4gZkluQm91bmQuZ2V0RWxlbWVudCgpOwotICB9Ci0KLSAgCi19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL1JlbFJlbW92ZUV2ZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2RhdGFtb2RlbC9SZWxSZW1vdmVFdmVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTlhNmI2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZGF0YW1vZGVsL1JlbFJlbW92ZUV2ZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhbW9kZWw7Ci0KLS8qKgotKiBDYXJyaWVzIGRhdGEgcmVsZXZhbnQgdG8gd2hlbiBhIHByb3BlcnR5IGlzIGFkZGVkIHRvIHRoZSBtb2RlbC4KLSovCi1wdWJsaWMgY2xhc3MgUmVsUmVtb3ZlRXZlbnQKLXsKLQotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQotICAvKioKLSAgKiBUaGUgbW9kZWwgdGhlIGNoYW5nZWQuCi0gICovCi0gIHByb3RlY3RlZCBDb25uZWN0aW9uIGZPdXRCb3VuZDsKLQotICAvKioKLSAgKiBUaGUgbW9kZWwgdGhlIGNoYW5nZWQuCi0gICovCi0gIHByb3RlY3RlZCBDb25uZWN0aW9uIGZJbkJvdW5kOwotCi0gIC8qKgotICAqIFRoZSBwcm9wZXJ0eSB0aGF0IHdhcyBhZGRlZC4KLSAgKi8KLSAgcHJvdGVjdGVkIFByb3BlcnR5IGZQcm9wZXJ0eTsKLQotIAotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIEBwYXJhbSBtb2RlbCBUaGUgbW9kZWwgdGhhdCBjaGFuZ2VkLgotICAgKiBAcGFyYW0gcHJvcGVydHkgVGhlIHByb3BlcnR5IHRoYXQgd2FzIGFkZGVkLgotICAgKiBAcGFyYW0gdmFsdWUgVGhlIHByb3BlcnR5J3MgdmFsdWUuCi0gICAqLwotICBwdWJsaWMgUmVsUmVtb3ZlRXZlbnQgKENvbm5lY3Rpb25bXSBwYWlyKQotICB7Ci0gICAgIGZPdXRCb3VuZCA9IHBhaXJbQmFzaWNDb25uZWN0aW9uLk9VVEJPVU5EXTsKLSAgICAgZkluQm91bmQgPSBwYWlyW0Jhc2ljQ29ubmVjdGlvbi5JTkJPVU5EXTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtb2RlbCB0aGF0IGNoYW5nZWQgKHRoYXQgcHJvZHVjZWQgdGhpcyBldmVudCkuCi0gICAqIEByZXR1cm4gVGlueU1vZGVsIFRoZSBtb2RlbCB0aGF0IGNoYW5nZWQuCi0gICAqLwotICBwdWJsaWMgQ29ubmVjdGlvbiBnZXRPdXRCb3VuZCAoKQotICB7Ci0gICAgcmV0dXJuIGZPdXRCb3VuZDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtb2RlbCBwcm9wZXJ0eSB0aGF0IHdhcyBhZGRlZC4KLSAgICogQHJldHVybiBUaW55TW9kZWwgVGhlIHByb3BlcnR5IHRoYXQgd2FzIGFkZGVkLgotICAgKi8KLSAgcHVibGljIENvbm5lY3Rpb24gZ2V0SW5Cb3VuZCAoKQotICB7Ci0gICAgcmV0dXJuIGZJbkJvdW5kOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGNoYW5nZWQgcmVsIG5hbWUgCi0gICoqLwotICBwdWJsaWMgU3RyaW5nIGdldE91dEJvdW5kUmVsTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gZk91dEJvdW5kLmdldFJlbCgpLmdldE5hbWUoKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBjaGFuZ2VkIHJlbAotICAqKi8KLSAgcHVibGljIFJlbCBnZXRPdXRCb3VuZFJlbCgpCi0gIHsKLSAgICByZXR1cm4gZk91dEJvdW5kLmdldFJlbCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGNoYW5nZWQgcmVsIG5hbWUgCi0gICoqLwotICBwdWJsaWMgU3RyaW5nIGdldEluQm91bmRSZWxOYW1lKCkKLSAgewotICAgIHJldHVybiBmSW5Cb3VuZC5nZXRSZWwoKS5nZXROYW1lKCk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgY2hhbmdlZCByZWwKLSAgKiovCi0gIHB1YmxpYyBSZWwgZ2V0SW5Cb3VuZFJlbCgpCi0gIHsKLSAgICByZXR1cm4gZkluQm91bmQuZ2V0UmVsKCk7Ci0gIH0KLSAgCi0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG91dGJvdW5kIGVsZW1lbnQgdGhhdCBjaGFuZ2VkIAotICAqKi8KLSAgcHVibGljIEVsZW1lbnQgZ2V0T3V0Qm91bmRFbGVtZW50ICgpCi0gIHsKLSAgICByZXR1cm4gZk91dEJvdW5kLmdldEVsZW1lbnQoKTsKLSAgfQotCi0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgaW5ib3VuZCBjb25uZWN0aW9uIHRoYXQgY2hhbmdlZCAKLSAgKiovCi0gIHB1YmxpYyBFbGVtZW50IGdldEluYm91bmRFbGVtZW50ICgpCi0gIHsKLSAgICByZXR1cm4gZkluQm91bmQuZ2V0RWxlbWVudCgpOwotICB9Ci0gIAotCi0gIAotfQotCi0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0L1dlYlNlcnZpY2VFeGVjdXRhYmxlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dC9XZWJTZXJ2aWNlRXhlY3V0YWJsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTRhNjg1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0L1dlYlNlcnZpY2VFeGVjdXRhYmxlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXh0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLQotLyoqCi0qIEFsbCBFeHRlbnNpb25zIHdpdGggZXhlY3R1dGFibGUgZXh0ZW5zaW9ucyBzaG91bGQgaW1wbGVtZW50IHRoaXMgCi0qIHRvIGZpdCBvdXIgZnJhbWV3b3JrCi0qLwotcHVibGljIGludGVyZmFjZSBXZWJTZXJ2aWNlRXhlY3V0YWJsZQotewotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLSAgLyoqCi0gICpSZXR1cm5zIGEgd2l6YXJkIGZyYWdtZW50IGZvciB0aGlzIGV4ZW50aW9uIHR5cGUgCi0gICoKLSAgKi8KLSAgcHVibGljIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIGdldEZpbmlzaENvbW1hbmQoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0L1dlYlNlcnZpY2VFeHRlbnNpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0L1dlYlNlcnZpY2VFeHRlbnNpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQwNjkyMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dC9XZWJTZXJ2aWNlRXh0ZW5zaW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXh0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLQotCi0vKioKLSogVGhpcyByZXByZXNlbnRzIGFuIGV4dGVuc2lvbiBpbiB0aGUgcGx1Z2luIHJlZ2lzdHJ5IAotKiBJdCBqb2IgaXMgdG8gYWN0IGFzIGEgcHJveHkgdG8gdGhlIGljb25maWdlbGVtZW50Ci0qLwotcHVibGljIGludGVyZmFjZSBXZWJTZXJ2aWNlRXh0ZW5zaW9uCi17Ci0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIC8qKgotICAqIElmIHRoZSBleHRlbnNpb24gaGFzIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBleGVjdXRlZCBvciBhIGZyYWdtZW50IGFkZGVkCi0gICogQHJldHVybiBXZWJTZXJ2aWNlRXhlY3V0YWJsZSB0aGlzIGludGVyZmFjZSBob2xkcyBleGVjdXRhYmxlIGNvZGUgYW5kIGEgCi0gICogZnJhZ21lbnQKLSAgKi8KLSAgcHVibGljIE9iamVjdCBnZXRXZWJTZXJ2aWNlRXhlY3V0YWJsZUV4dGVuc2lvbigpOwotCi0gIC8qKgotICAqIFRoaXMgaXMgdGhlIGNvbmZpZyBlbGVtZW50IHRoYXQgaG9sZHMgdGhlIGV4dGVuc2lvbiBpbmZvCi0gICogQHBhcmFtIElDb25maWd1cmF0aW9uRWxlbWVudCBFeHRlbnNpb24gZWxlbWVudAotICAqLwotICBwdWJsaWMgdm9pZCBzZXRDb25maWdFbGVtZW50KElDb25maWd1cmF0aW9uRWxlbWVudCBjb25maWdFbGVtZW50KTsKLSAKLSAgLyoqCi0gICogSWYgdGhlIGV4dGVuc2lvbiBoYXMgY29kZSB0aGF0IAotICAqIEByZXR1cm4gSUNvbmZpZ3VyYXRpb25FbGVtZW50IEV4dGVuc2lvbiBlbGVtZW50Ci0gICovCi0gIHB1YmxpYyBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZ2V0Q29uZmlnRWxlbWVudCgpOwotfQotCi0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0L1dlYlNlcnZpY2VFeHRlbnNpb25JbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dC9XZWJTZXJ2aWNlRXh0ZW5zaW9uSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjJmN2RhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0L1dlYlNlcnZpY2VFeHRlbnNpb25JbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4dDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5FbnZpcm9ubWVudFNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JTG9nOwotCi0KLQotCi0KLS8qKgotKiBUaGlzIHJlcHJlc2VudHMgYW4gZXh0ZW5zaW9uIGluIHRoZSBwbHVnaW4gcmVnaXN0cnkgCi0qIEl0IGpvYiBpcyB0byBhY3QgYXMgYSBwcm94eSB0byB0aGUgaWNvbmZpZ2VsZW1lbnQKLSovCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZUV4dGVuc2lvbkltcGwgaW1wbGVtZW50cyBXZWJTZXJ2aWNlRXh0ZW5zaW9uCi17Ci0KLQlwcml2YXRlIElMb2cJbG9nXzsKLQkKLSAgLyoKLSAgKiBUaGUgQ29uZmlnRWxlbWVudCB0aGF0IGhvbGRzIGV4dGVuc2lvbiBpbmZvCi0gICovCi0gIHByb3RlY3RlZCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgY29uZmlnRWxlbWVudF87Ci0KLSAgLyoKLSAgKiBUaGUgZXh0ZW5zaW9uIGV4ZWN1dGFibGUgCi0gICovCi0gIHByb3RlY3RlZCBXZWJTZXJ2aWNlRXhlY3V0YWJsZSB3ZWJTZXJ2aWNlRXhlY3V0YWJsZV87Ci0gIAotCi0gIHB1YmxpYyBXZWJTZXJ2aWNlRXh0ZW5zaW9uSW1wbChJQ29uZmlndXJhdGlvbkVsZW1lbnQgY29uZmlnRWxlbWVudCkKLSAgewotICAgIGNvbmZpZ0VsZW1lbnRfID0gY29uZmlnRWxlbWVudDsKLSAgICBsb2dfID0gRW52aXJvbm1lbnRTZXJ2aWNlLmdldEVjbGlwc2VMb2coKTsKLSAgfQotCi0gIC8vIENvcHlyaWdodAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIC8qKgotICAqIElmIHRoZSBleHRlbnNpb24gaGFzIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBleGVjdXRlZCBvciBhIGZyYWdtZW50IGFkZGVkCi0gICogQHJldHVybiBXZWJTZXJ2aWNlRXhlY3V0YWJsZSB0aGlzIGludGVyZmFjZSBob2xkcyBleGVjdXRhYmxlIGNvZGUgYW5kIGEgCi0gICogZnJhZ21lbnQKLSAgKi8KLSAgcHVibGljIE9iamVjdCBnZXRXZWJTZXJ2aWNlRXhlY3V0YWJsZUV4dGVuc2lvbigpCi0gIHsKLSAgICBpZih3ZWJTZXJ2aWNlRXhlY3V0YWJsZV8gIT0gbnVsbCkgcmV0dXJuIHdlYlNlcnZpY2VFeGVjdXRhYmxlXzsKLQotICAgIHRyeXsKLSAgICAgIHJldHVybiBjb25maWdFbGVtZW50Xy5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKCJjbGFzcyIpOwotICAgIH1jYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKXsKLSAgICAgIGxvZ18ubG9nKElMb2cuRVJST1IsIDUwMjksIHRoaXMsICJnZXRXZWJTZXJ2aWNlRXhlY3V0YWJsZUV4dGVuc2lvbiIsZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgKiBUaGlzIGlzIHRoZSBjb25maWcgZWxlbWVudCB0aGF0IGhvbGRzIHRoZSBleHRlbnNpb24gaW5mbwotICAqIEBwYXJhbSBJQ29uZmlndXJhdGlvbkVsZW1lbnQgRXh0ZW5zaW9uIGVsZW1lbnQKLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q29uZmlnRWxlbWVudChJQ29uZmlndXJhdGlvbkVsZW1lbnQgY29uZmlnRWxlbWVudCkKLSAgewotICAgIGNvbmZpZ0VsZW1lbnRfID0gY29uZmlnRWxlbWVudDsKLSAgfQkKLQotICAvKioKLSAgKiBUaGlzIGlzIHRoZSBjb25maWcgZWxlbWVudCB0aGF0IGhvbGRzIHRoZSBleHRlbnNpb24gaW5mbwotICAqIEByZXR1cm4gSUNvbmZpZ3VyYXRpb25FbGVtZW50IEV4dGVuc2lvbiBlbGVtZW50Ci0gICovCi0gIHB1YmxpYyBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZ2V0Q29uZmlnRWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gY29uZmlnRWxlbWVudF87Ci0gIH0KLSAgCi0gIC8qKgotICAqIFRoZSBuYW1lIG9mIHRoZSBleHRlbnNpb24gYmVpbmcgdXNlZAotICAqIEByZXR1cm4gU3RyaW5nIG5hbWUgb2YgdGhpcyBleHRlbnNpb24KLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLSAgewotICAgIHJldHVybiBnZXRDb25maWdFbGVtZW50KCkuZ2V0QXR0cmlidXRlKCAibmFtZSIgKTsKLSAgfQotCi0KLX0KLQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dC9XZWJTZXJ2aWNlRXh0ZW5zaW9uUmVnaXN0cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0L1dlYlNlcnZpY2VFeHRlbnNpb25SZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NjZlY2NlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0L1dlYlNlcnZpY2VFeHRlbnNpb25SZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4dDsKLQotCi0vKioKLSogUmV0dXJucyB0aGUgbmFtZXMgb2YgdGhlIGV4dGVuc2lvbnMgZm9yIGEgZ2l2ZW4gZXh0ZW5zaW9uLXBvaW50IAotKiBhbHNvIHJldHVybnMgdGhlIGV4dGVuc2lvbiBvYmplY3RzIAotKgotKi8KLXB1YmxpYyBpbnRlcmZhY2UgV2ViU2VydmljZUV4dGVuc2lvblJlZ2lzdHJ5Ci17Ci0gIAotICAvKioKLSAgKiBSZXR1cm5zIHRoZSBuYW1lcyBvZiBhbGwgcmVnaXN0ZXJlZCBleHRlbnNpb25zCi0gICogQHJldHVybiBUaGUgbmFtZXMgb2YgYWxsIHJlZ2lzdGVyZWQgZXh0ZW5zaW9ucy4KLSAgKi8KLSAgcHVibGljIFN0cmluZ1tdIGdldFdlYlNlcnZpY2VFeHRlbnNpb25OYW1lcyAoKTsKLSAgCi0gIC8qKgotICAqIFJldHVybnMgdGhlIGV4dGVuc2lvbiBvYmplY3Qgb2YgdGhlIGdpdmVuIG5hbWUKLSAgKkByZXR1cm4gV2ViU2VydmljZUV4dGVuc2lvbiBvYmplY3QKLSAgKi8KLSAgcHVibGljIFdlYlNlcnZpY2VFeHRlbnNpb24gZ2V0V2ViU2VydmljZUV4dGVuc2lvbnNCeU5hbWUoIFN0cmluZyBuYW1lKTsKLQotICAvKioKLSAgKiBSZXR1cm5zIEFsbCBleHRlbnRpb24gb2JqZWN0cyBpbiB0aGlzIHJlZ2lzdHJ5Ci0gICpAcmV0dXJuIFdlYlNlcnZpY2VFeHRlbnNpb24gb2JqZWN0cwotICAqLwotICBwdWJsaWMgV2ViU2VydmljZUV4dGVuc2lvbltdIGdldFdlYlNlcnZpY2VFeHRlbnNpb25zKCk7Ci0gIAotICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0L1dlYlNlcnZpY2VFeHRlbnNpb25SZWdpc3RyeUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0L1dlYlNlcnZpY2VFeHRlbnNpb25SZWdpc3RyeUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzlkNGRmNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dC9XZWJTZXJ2aWNlRXh0ZW5zaW9uUmVnaXN0cnlJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4dDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5kYXRhLkxhYmVsc0FuZElkczsKLQotCi0vKioKLSogVGhpcyBpcyBhIGdlbmVyaWMgcmVnaXN0cnkgd2hpY2ggc2V0cyB1cCBnZW5lcmFsIGNvZGUgaW4gaGFuZGxpbmcgICAKLSogSUNvbmZpZ0VsZW1lbnRzIGZvciBhbiBleHRlbnNpb24KLSovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgV2ViU2VydmljZUV4dGVuc2lvblJlZ2lzdHJ5SW1wbCBpbXBsZW1lbnRzIFdlYlNlcnZpY2VFeHRlbnNpb25SZWdpc3RyeQotewotICAvLyBDb3B5cmlnaHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLSAgCi0gIHByaXZhdGUgSGFzaHRhYmxlIG5hbWVFeHRlbnNpb25UYWJsZV87Ci0gIHByaXZhdGUgVmVjdG9yIGlkXzsKLSAgcHJpdmF0ZSBWZWN0b3IgbGFiZWxfOwotICBwcml2YXRlIExhYmVsc0FuZElkcyBsYWJlbHNhbmRpZHNfOwotICAgIAotICBwdWJsaWMgV2ViU2VydmljZUV4dGVuc2lvblJlZ2lzdHJ5SW1wbCgpCi0gIHsKLSAgICBuYW1lRXh0ZW5zaW9uVGFibGVfID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIGxhYmVsXyA9IG5ldyBWZWN0b3IoKTsKLSAgICBpZF8gPSBuZXcgVmVjdG9yKCk7Ci0gICAgbG9hZEV4dGVuc2lvbnMoKTsKLSAgfQotICAKLSAgLyoqCi0gICogQ2hpbGRyZW4gcmVnaXN0cmllcyB3aWxsIGhhdmUgZGlmZmVyZW50IGV4dGVuc2lvbiB0eXBlcyAKLSAgKiBAcmV0dXJuIFdlYnNlcnZpY2VFeHRlbnNpb24gaG9sZHMgYSBjb25maWcgZWxlbQotICAqIGZvciB0aGF0IGV4dGVuc2lvbiBjYXBhYmxlIG9mIGNyZWF0aW5nIGFuIGV4ZWN1dGFibGUgZmlsZQotICAqLwotICBwdWJsaWMgYWJzdHJhY3QgV2ViU2VydmljZUV4dGVuc2lvbiBjcmVhdGVXZWJTZXJ2aWNlRXh0ZW5zaW9uKElDb25maWd1cmF0aW9uRWxlbWVudCBjb25maWdFbGVtZW50KTsKLQotICAvKioKLSAgKiBDaGlsZHJlbiBtdXN0IGltcGxlbWVudCBob3cgdGhleSBnZXQgdGhlIElDb25maWd1cmF0aW9uRWxlbWVudFtdIAotICAqIEByZXR1cm4gSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gYW4gYXJyYXkgb2YgZWxlbWVudHMgcGFydGljdWxhciB0byB0aGF0Ci0gICogZXh0ZW5zaW9uCi0gICovCi0gIHB1YmxpYyBhYnN0cmFjdCBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBnZXRDb25maWdFbGVtZW50cygpOwotCi0gIC8qCi0gICogTG9hZHMgV2ViU2VydmljZUV4dGVuc2lvbnMgZm9yIFdlYlNlcnZpY2VDbGllbnRUZXN0IGludG8gdGhpcyByZWdpc3RyeS4KLSAgKiBUaGlzIGlzIGRvbmUgYnkgcXVlcnlpbmcgdGhlIHBsdWdpbiByZWdpc3RyeSBmb3IgYWxsIGV4dGVuc2lvbnMKLSAgKiB0aGF0IGV4dGVuZCB3ZWJTZXJ2aWNlQ2xpZW50VGVzdCAgCi0gICovCi0gIHByaXZhdGUgdm9pZCBsb2FkRXh0ZW5zaW9ucyAoKQotICB7ICAgIAotICAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGNvbmZpZyA9IGdldENvbmZpZ0VsZW1lbnRzKCk7Ci0KLSAgICBmb3IoaW50IGlkeD0wOyBpZHg8Y29uZmlnLmxlbmd0aDsgaWR4KyspIAotICAgIHsKLSAgICAgIElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtID0gY29uZmlnW2lkeF07Ci0gICAgICBTdHJpbmcgbGFiZWwgPSBlbGVtLmdldEF0dHJpYnV0ZSggImxhYmVsIiApOwotICAgICAgU3RyaW5nIGlkID0gICBlbGVtLmdldEF0dHJpYnV0ZSggImlkIiApOyAgICAgIAotICAgICAgV2ViU2VydmljZUV4dGVuc2lvbiB3ZWJTZXJ2aWNlRXh0ZW5zaW9uID0gY3JlYXRlV2ViU2VydmljZUV4dGVuc2lvbihlbGVtKTsJCi0gICAgICBuYW1lRXh0ZW5zaW9uVGFibGVfLnB1dChsYWJlbCx3ZWJTZXJ2aWNlRXh0ZW5zaW9uKTsKLSAgICAgIGxhYmVsXy5hZGQobGFiZWwpOwotICAgICAgaWRfLmFkZChpZCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgbmFtZXMgb2YgYWxsIHJlZ2lzdGVyZWQgZXh0ZW5zaW9ucwotICAqIEByZXR1cm4gVGhlIG5hbWVzIG9mIGFsbCByZWdpc3RlcmVkIGV4dGVuc2lvbnMuCi0gICovCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRXZWJTZXJ2aWNlRXh0ZW5zaW9uTmFtZXMgKCkKLSAgewotICAgIHJldHVybiAoU3RyaW5nW10pbmFtZUV4dGVuc2lvblRhYmxlXy5rZXlTZXQoKS50b0FycmF5KCBuZXcgU3RyaW5nWzBdICk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJuIHRoZSBuYW1lcyBhbmQgSWRzIAotICAgKi8KLSAgcHVibGljIExhYmVsc0FuZElkcyBnZXRMYWJlbHNBbmRJRHMoKQotICB7Ci0gIAlsYWJlbHNhbmRpZHNfID0gbmV3IExhYmVsc0FuZElkcygpOwotICAJbGFiZWxzYW5kaWRzXy5zZXRMYWJlbHNfKChTdHJpbmdbXSlsYWJlbF8udG9BcnJheSggbmV3IFN0cmluZ1swXSApKTsKLSAgCWxhYmVsc2FuZGlkc18uc2V0SWRzXygoU3RyaW5nW10paWRfLnRvQXJyYXkoIG5ldyBTdHJpbmdbMF0gKSk7Ci0gIAlyZXR1cm4gbGFiZWxzYW5kaWRzXzsKLSAgfQotICAKLSAgLyoqCi0gICogUmV0dXJucyB0aGUgZXh0ZW5zaW9uIG9iamVjdCBvZiB0aGUgZ2l2ZW4gbmFtZQotICAqIEByZXR1cm4gV2ViU2VydmljZUV4dGVuc2lvbiBvYmplY3QKLSAgKi8KLSAgcHVibGljIFdlYlNlcnZpY2VFeHRlbnNpb24gZ2V0V2ViU2VydmljZUV4dGVuc2lvbnNCeU5hbWUoIFN0cmluZyBuYW1lKQotICB7Ci0gICAgcmV0dXJuIChXZWJTZXJ2aWNlRXh0ZW5zaW9uKW5hbWVFeHRlbnNpb25UYWJsZV8uZ2V0KG5hbWUpOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyBBbGwgZXh0ZW50aW9uIG9iamVjdHMgaW4gdGhpcyByZWdpc3RyeQotICAqQHJldHVybiBXZWJTZXJ2aWNlRXh0ZW5zaW9uIG9iamVjdHMKLSAgKi8KLSAgcHVibGljIFdlYlNlcnZpY2VFeHRlbnNpb25bXSBnZXRXZWJTZXJ2aWNlRXh0ZW5zaW9ucygpCi0gIHsKLSAgICByZXR1cm4gKFdlYlNlcnZpY2VFeHRlbnNpb25bXSluYW1lRXh0ZW5zaW9uVGFibGVfLnZhbHVlcygpLnRvQXJyYXkoIG5ldyBXZWJTZXJ2aWNlRXh0ZW5zaW9uWzBdICk7Ci0gIH0KLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dGVuc2lvbnMvQWJzdHJhY3RDbGllbnRGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHRlbnNpb25zL0Fic3RyYWN0Q2xpZW50RnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGUyNzdmZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dGVuc2lvbnMvQWJzdHJhY3RDbGllbnRGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHRlbnNpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZhY3RvcnlGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklXZWJTZXJ2aWNlQ2xpZW50OwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RDbGllbnRGcmFnbWVudCBleHRlbmRzIENvbW1hbmRGYWN0b3J5RnJhZ21lbnQKLXsKLSAgcHJvdGVjdGVkIElXZWJTZXJ2aWNlQ2xpZW50IHdlYlNlcnZpY2VDbGllbnRfOwotICBwcm90ZWN0ZWQgSUVudmlyb25tZW50ICAgICAgIGVudmlyb25tZW50XzsKLSAgcHJvdGVjdGVkIElDb250ZXh0ICAgICAgICAgIGNvbnRleHRfOwotICBwcm90ZWN0ZWQgSVNlbGVjdGlvbiAgICAgICAgc2VsZWN0aW9uXzsKLSAgcHJvdGVjdGVkIFN0cmluZyAgICAgICAgICAgIHByb2plY3RfOwotICBwcm90ZWN0ZWQgU3RyaW5nICAgICAgICAgICAgbW9kdWxlXzsKLSAgcHJvdGVjdGVkIFN0cmluZyAgICAgICAgICAgIGVhclByb2plY3RfOwotICBwcm90ZWN0ZWQgU3RyaW5nICAgICAgICAgICAgZWFyXzsKLSAgICAKLSAgcHVibGljIEFic3RyYWN0Q2xpZW50RnJhZ21lbnQoKQotICB7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBBYnN0cmFjdENsaWVudEZyYWdtZW50KCBBYnN0cmFjdENsaWVudEZyYWdtZW50IGZyYWdtZW50ICkKLSAgewotCXN1cGVyKCBmcmFnbWVudCApOyAKLQkKLQl3ZWJTZXJ2aWNlQ2xpZW50XyA9IGZyYWdtZW50LndlYlNlcnZpY2VDbGllbnRfOwotCWVudmlyb25tZW50XyAgICAgID0gZnJhZ21lbnQuZW52aXJvbm1lbnRfOwotCWNvbnRleHRfICAgICAgICAgID0gZnJhZ21lbnQuY29udGV4dF87Ci0Jc2VsZWN0aW9uXyAgICAgICAgPSBmcmFnbWVudC5zZWxlY3Rpb25fOwotCW1vZHVsZV8gICAgICAgICAgID0gZnJhZ21lbnQubW9kdWxlXzsKLQllYXJfICAgICAgICAgICAgICA9IGZyYWdtZW50LmVhcl87Ci0gIH0KLSAgICAKLSAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZSggSVdlYlNlcnZpY2VDbGllbnQgd2ViU2VydmljZSApCi0gIHsKLQl3ZWJTZXJ2aWNlQ2xpZW50XyA9IHdlYlNlcnZpY2U7ICAKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEVudmlyb25tZW50KCBJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQgKQotICB7Ci0JZW52aXJvbm1lbnRfID0gZW52aXJvbm1lbnQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENvbnRleHQoIElDb250ZXh0IGNvbnRleHQgKQotICB7CSAgCi0JY29udGV4dF8gPSBjb250ZXh0OwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb24oIElTZWxlY3Rpb24gc2VsZWN0aW9uICkKLSAgewotCXNlbGVjdGlvbl8gPSBzZWxlY3Rpb247ICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0UHJvamVjdCggU3RyaW5nIHByb2plY3QpCi0gIHsKLSAgICBwcm9qZWN0XyA9IHByb2plY3Q7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldE1vZHVsZSggU3RyaW5nIG1vZHVsZSApCi0gIHsKLQltb2R1bGVfID0gbW9kdWxlOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRFYXJQcm9qZWN0KFN0cmluZyBlYXJQcm9qZWN0KQotICB7Ci0gICAgZWFyUHJvamVjdF8gPSBlYXJQcm9qZWN0OyAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEVhciggU3RyaW5nIGVhciApCi0gIHsKLQllYXJfID0gZWFyOyAgCi0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0ZW5zaW9ucy9BYnN0cmFjdFNlcnZpY2VGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHRlbnNpb25zL0Fic3RyYWN0U2VydmljZUZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3ZjZkN2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHRlbnNpb25zL0Fic3RyYWN0U2VydmljZUZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4dGVuc2lvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5mcmFnbWVudC5Db21tYW5kRmFjdG9yeUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSVdlYlNlcnZpY2U7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFNlcnZpY2VGcmFnbWVudCBleHRlbmRzIENvbW1hbmRGYWN0b3J5RnJhZ21lbnQKLXsKLSAgcHJvdGVjdGVkIElXZWJTZXJ2aWNlIHdlYlNlcnZpY2VfOwotICBwcm90ZWN0ZWQgSUVudmlyb25tZW50IGVudmlyb25tZW50XzsKLSAgcHJvdGVjdGVkIElDb250ZXh0ICAgIGNvbnRleHRfOwotICBwcm90ZWN0ZWQgSVNlbGVjdGlvbiAgc2VsZWN0aW9uXzsKLSAgcHJvdGVjdGVkIFN0cmluZyAgICAgIHByb2plY3RfOwotICBwcm90ZWN0ZWQgU3RyaW5nICAgICAgbW9kdWxlXzsKLSAgcHJvdGVjdGVkIFN0cmluZyAgICAgIGVhclByb2plY3RfOwotICBwcm90ZWN0ZWQgU3RyaW5nICAgICAgZWFyXzsKLSAgICAKLSAgcHVibGljIEFic3RyYWN0U2VydmljZUZyYWdtZW50KCkKLSAgewotICB9Ci0gIAotICBwcm90ZWN0ZWQgQWJzdHJhY3RTZXJ2aWNlRnJhZ21lbnQoIEFic3RyYWN0U2VydmljZUZyYWdtZW50IGZyYWdtZW50ICkKLSAgewotCXN1cGVyKCBmcmFnbWVudCApOyAKLQkKLQl3ZWJTZXJ2aWNlXyAgPSBmcmFnbWVudC53ZWJTZXJ2aWNlXzsKLQllbnZpcm9ubWVudF8gPSBmcmFnbWVudC5lbnZpcm9ubWVudF87Ci0JY29udGV4dF8gICAgID0gZnJhZ21lbnQuY29udGV4dF87Ci0Jc2VsZWN0aW9uXyAgID0gZnJhZ21lbnQuc2VsZWN0aW9uXzsKLQltb2R1bGVfICAgICAgPSBmcmFnbWVudC5tb2R1bGVfOwotCWVhcl8gICAgICAgICA9IGZyYWdtZW50LmVhcl87Ci0gIH0KLSAgICAKLSAgcHVibGljIHZvaWQgc2V0V2ViU2VydmljZSggSVdlYlNlcnZpY2Ugd2ViU2VydmljZSApCi0gIHsKLQl3ZWJTZXJ2aWNlXyA9IHdlYlNlcnZpY2U7ICAKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEVudmlyb25tZW50KCBJRW52aXJvbm1lbnQgZW52aXJvbm1lbnQgKQotICB7Ci0JZW52aXJvbm1lbnRfID0gZW52aXJvbm1lbnQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENvbnRleHQoIElDb250ZXh0IGNvbnRleHQgKQotICB7CSAgCi0JY29udGV4dF8gPSBjb250ZXh0OwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb24oIElTZWxlY3Rpb24gc2VsZWN0aW9uICkKLSAgewotCXNlbGVjdGlvbl8gPSBzZWxlY3Rpb247ICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0UHJvamVjdCggU3RyaW5nIHByb2plY3QpCi0gIHsKLSAgICBwcm9qZWN0XyA9IHByb2plY3Q7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldE1vZHVsZSggU3RyaW5nIG1vZHVsZSApCi0gIHsKLQltb2R1bGVfID0gbW9kdWxlOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRFYXJQcm9qZWN0KFN0cmluZyBlYXJQcm9qZWN0KQotICB7Ci0gICAgZWFyUHJvamVjdF8gPSBlYXJQcm9qZWN0OyAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEVhciggU3RyaW5nIGVhciApCi0gIHsKLQllYXJfID0gZWFyOyAgCi0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0ZW5zaW9ucy9Bc3NlbWJsZUNsaWVudEZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dGVuc2lvbnMvQXNzZW1ibGVDbGllbnRGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjJiNTNmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0ZW5zaW9ucy9Bc3NlbWJsZUNsaWVudEZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA1MjkgICAxNDE0MjIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHRlbnNpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLklDb21tYW5kRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5TaW1wbGVDb21tYW5kRmFjdG9yeTsKLQotcHVibGljIGNsYXNzIEFzc2VtYmxlQ2xpZW50RnJhZ21lbnQgZXh0ZW5kcyBBYnN0cmFjdENsaWVudEZyYWdtZW50IAotewotICBwdWJsaWMgQXNzZW1ibGVDbGllbnRGcmFnbWVudCgpCi0gIHsKLSAgfQotICAKLSAgcHJvdGVjdGVkIEFzc2VtYmxlQ2xpZW50RnJhZ21lbnQoIEFzc2VtYmxlQ2xpZW50RnJhZ21lbnQgZnJhZ21lbnQgKQotICB7Ci0Jc3VwZXIoIGZyYWdtZW50ICk7ICAKLSAgfQotICAKLSAgcHVibGljIE9iamVjdCBjbG9uZSgpIAotICB7Ci0JcmV0dXJuIG5ldyBBc3NlbWJsZUNsaWVudEZyYWdtZW50KCk7Ci0gIH0KLQotICBwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IGdldElDb21tYW5kRmFjdG9yeSgpIAotICB7Ci0JSUNvbW1hbmRGYWN0b3J5IGZhY3RvcnkgPSBudWxsOwotCQotCWlmKCB3ZWJTZXJ2aWNlQ2xpZW50XyA9PSBudWxsIHx8IGNvbnRleHRfID09IG51bGwgfHwgIWNvbnRleHRfLmdldEFzc2VtYmxlKCkpCi0JewotCSAgZmFjdG9yeSA9IG5ldyBTaW1wbGVDb21tYW5kRmFjdG9yeSggbmV3IFZlY3RvcigpICk7Ci0JfQotCWVsc2UKLQl7Ci0JICBmYWN0b3J5ID0gd2ViU2VydmljZUNsaWVudF8uYXNzZW1ibGUoIGVudmlyb25tZW50XywgY29udGV4dF8sIHNlbGVjdGlvbl8sIHByb2plY3RfLCBlYXJQcm9qZWN0Xyk7CQotCX0KLQkKLQlyZXR1cm4gZmFjdG9yeTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHRlbnNpb25zL0Fzc2VtYmxlU2VydmljZUZyYWdtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dGVuc2lvbnMvQXNzZW1ibGVTZXJ2aWNlRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDdjOWQ4OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dGVuc2lvbnMvQXNzZW1ibGVTZXJ2aWNlRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDUyOSAgIDE0MTQyMiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4dGVuc2lvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuSUNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLlNpbXBsZUNvbW1hbmRGYWN0b3J5OwotCi1wdWJsaWMgY2xhc3MgQXNzZW1ibGVTZXJ2aWNlRnJhZ21lbnQgZXh0ZW5kcyBBYnN0cmFjdFNlcnZpY2VGcmFnbWVudCAKLXsKLSAgcHVibGljIEFzc2VtYmxlU2VydmljZUZyYWdtZW50KCkKLSAgewotICB9Ci0gIAotICBwcm90ZWN0ZWQgQXNzZW1ibGVTZXJ2aWNlRnJhZ21lbnQoIEFzc2VtYmxlU2VydmljZUZyYWdtZW50IGZyYWdtZW50ICkKLSAgewotCXN1cGVyKCBmcmFnbWVudCApOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBPYmplY3QgY2xvbmUoKSAKLSAgewotCXJldHVybiBuZXcgQXNzZW1ibGVTZXJ2aWNlRnJhZ21lbnQoKTsKLSAgfQotCi0gIHB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgZ2V0SUNvbW1hbmRGYWN0b3J5KCkgCi0gIHsKLQlJQ29tbWFuZEZhY3RvcnkgZmFjdG9yeSA9IG51bGw7Ci0JCi0JaWYoIHdlYlNlcnZpY2VfID09IG51bGwgfHwgY29udGV4dF8gPT0gbnVsbCB8fCAhY29udGV4dF8uZ2V0QXNzZW1ibGUoKSkKLQl7Ci0JICBmYWN0b3J5ID0gbmV3IFNpbXBsZUNvbW1hbmRGYWN0b3J5KCBuZXcgVmVjdG9yKCkgKTsKLQl9Ci0JZWxzZQotCXsKLQkgIGZhY3RvcnkgPSB3ZWJTZXJ2aWNlXy5hc3NlbWJsZSggZW52aXJvbm1lbnRfLCBjb250ZXh0Xywgc2VsZWN0aW9uXywgcHJvamVjdF8sIGVhclByb2plY3RfKTsJCi0JfQotCQotCXJldHVybiBmYWN0b3J5OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dGVuc2lvbnMvRGVwbG95Q2xpZW50RnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0ZW5zaW9ucy9EZXBsb3lDbGllbnRGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNmVmYzIwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0ZW5zaW9ucy9EZXBsb3lDbGllbnRGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMjIxICAgMTE5MTExIHJzaW5oYUBjYS5pYm0uY29tIC0gUnVwYW0gS3VlaG5lcgotICogMjAwNjA1MjkgICAxNDE0MjIga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5leHRlbnNpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLklDb21tYW5kRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5TaW1wbGVDb21tYW5kRmFjdG9yeTsKLQotcHVibGljIGNsYXNzIERlcGxveUNsaWVudEZyYWdtZW50IGV4dGVuZHMgQWJzdHJhY3RDbGllbnRGcmFnbWVudCAKLXsKLSAgcHVibGljIERlcGxveUNsaWVudEZyYWdtZW50KCkKLSAgewotICB9Ci0gIAotICBwcm90ZWN0ZWQgRGVwbG95Q2xpZW50RnJhZ21lbnQoIERlcGxveUNsaWVudEZyYWdtZW50IGZyYWdtZW50ICkKLSAgewotCXN1cGVyKCBmcmFnbWVudCApOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBPYmplY3QgY2xvbmUoKSAKLSAgewotCXJldHVybiBuZXcgRGVwbG95Q2xpZW50RnJhZ21lbnQoKTsKLSAgfQotCi0gIHB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgZ2V0SUNvbW1hbmRGYWN0b3J5KCkgCi0gIHsKLQlJQ29tbWFuZEZhY3RvcnkgZmFjdG9yeSA9IG51bGw7Ci0JCi0JaWYoIHdlYlNlcnZpY2VDbGllbnRfID09IG51bGwgfHwgY29udGV4dF8gPT0gbnVsbCB8fCAhY29udGV4dF8uZ2V0RGVwbG95KCkpCi0JewotCSAgZmFjdG9yeSA9IG5ldyBTaW1wbGVDb21tYW5kRmFjdG9yeSggbmV3IFZlY3RvcigpICk7Ci0JfQotCWVsc2UKLQl7Ci0JICBmYWN0b3J5ID0gd2ViU2VydmljZUNsaWVudF8uZGVwbG95KCBlbnZpcm9ubWVudF8sIGNvbnRleHRfLCBzZWxlY3Rpb25fLCBwcm9qZWN0XywgZWFyUHJvamVjdF8pOwkKLQl9Ci0JCi0JcmV0dXJuIGZhY3Rvcnk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0ZW5zaW9ucy9EZXBsb3lTZXJ2aWNlRnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0ZW5zaW9ucy9EZXBsb3lTZXJ2aWNlRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjliZTk5Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dGVuc2lvbnMvRGVwbG95U2VydmljZUZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMjEgICAxMTkxMTEgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKiAyMDA2MDUyOSAgIDE0MTQyMiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4dGVuc2lvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuSUNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLlNpbXBsZUNvbW1hbmRGYWN0b3J5OwotCi1wdWJsaWMgY2xhc3MgRGVwbG95U2VydmljZUZyYWdtZW50IGV4dGVuZHMgQWJzdHJhY3RTZXJ2aWNlRnJhZ21lbnQgCi17Ci0gIHB1YmxpYyBEZXBsb3lTZXJ2aWNlRnJhZ21lbnQoKQotICB7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBEZXBsb3lTZXJ2aWNlRnJhZ21lbnQoIERlcGxveVNlcnZpY2VGcmFnbWVudCBmcmFnbWVudCApCi0gIHsKLQlzdXBlciggZnJhZ21lbnQgKTsgIAotICB9Ci0gIAotICBwdWJsaWMgT2JqZWN0IGNsb25lKCkgCi0gIHsKLQlyZXR1cm4gbmV3IERlcGxveVNlcnZpY2VGcmFnbWVudCgpOwotICB9Ci0KLSAgcHVibGljIElDb21tYW5kRmFjdG9yeSBnZXRJQ29tbWFuZEZhY3RvcnkoKSAKLSAgewotCUlDb21tYW5kRmFjdG9yeSBmYWN0b3J5ID0gbnVsbDsKLQkKLQlpZiggd2ViU2VydmljZV8gPT0gbnVsbCB8fCBjb250ZXh0XyA9PSBudWxsIHx8ICFjb250ZXh0Xy5nZXREZXBsb3koKSkKLQl7Ci0JICBmYWN0b3J5ID0gbmV3IFNpbXBsZUNvbW1hbmRGYWN0b3J5KCBuZXcgVmVjdG9yKCkgKTsKLQl9Ci0JZWxzZQotCXsKLQkgIGZhY3RvcnkgPSB3ZWJTZXJ2aWNlXy5kZXBsb3koIGVudmlyb25tZW50XywgY29udGV4dF8sIHNlbGVjdGlvbl8sIHByb2plY3RfLCBlYXJQcm9qZWN0Xyk7CQotCX0KLQkKLQlyZXR1cm4gZmFjdG9yeTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHRlbnNpb25zL0RldmVsb3BDbGllbnRGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHRlbnNpb25zL0RldmVsb3BDbGllbnRGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZGY4ZTI4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0ZW5zaW9ucy9EZXZlbG9wQ2xpZW50RnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDUyOSAgIDE0MTQyMiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4dGVuc2lvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuSUNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLlNpbXBsZUNvbW1hbmRGYWN0b3J5OwotCi1wdWJsaWMgY2xhc3MgRGV2ZWxvcENsaWVudEZyYWdtZW50IGV4dGVuZHMgQWJzdHJhY3RDbGllbnRGcmFnbWVudCAKLXsKLSAgcHVibGljIERldmVsb3BDbGllbnRGcmFnbWVudCgpCi0gIHsKLSAgfQotICAKLSAgcHJvdGVjdGVkIERldmVsb3BDbGllbnRGcmFnbWVudCggRGV2ZWxvcENsaWVudEZyYWdtZW50IGZyYWdtZW50ICkKLSAgewotCXN1cGVyKCBmcmFnbWVudCApOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBPYmplY3QgY2xvbmUoKSAKLSAgewotCXJldHVybiBuZXcgRGV2ZWxvcENsaWVudEZyYWdtZW50KCk7Ci0gIH0KLQotICBwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IGdldElDb21tYW5kRmFjdG9yeSgpIAotICB7Ci0JSUNvbW1hbmRGYWN0b3J5IGZhY3RvcnkgPSBudWxsOwotCQotCWlmKCB3ZWJTZXJ2aWNlQ2xpZW50XyA9PSBudWxsIHx8IGNvbnRleHRfID09IG51bGwgfHwgIWNvbnRleHRfLmdldERldmVsb3AoKSApCi0JewotCSAgZmFjdG9yeSA9IG5ldyBTaW1wbGVDb21tYW5kRmFjdG9yeSggbmV3IFZlY3RvcigpICk7Ci0JfQotCWVsc2UKLQl7Ci0JICBmYWN0b3J5ID0gd2ViU2VydmljZUNsaWVudF8uZGV2ZWxvcCggZW52aXJvbm1lbnRfLCBjb250ZXh0Xywgc2VsZWN0aW9uXywgcHJvamVjdF8sIGVhclByb2plY3RfKTsJCi0JfQotCQotCXJldHVybiBmYWN0b3J5OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dGVuc2lvbnMvRGV2ZWxvcFNlcnZpY2VGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHRlbnNpb25zL0RldmVsb3BTZXJ2aWNlRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDM1Mzg2ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dGVuc2lvbnMvRGV2ZWxvcFNlcnZpY2VGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTI5ICAgMTQxNDIyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXh0ZW5zaW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5JQ29tbWFuZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuU2ltcGxlQ29tbWFuZEZhY3Rvcnk7Ci0KLXB1YmxpYyBjbGFzcyBEZXZlbG9wU2VydmljZUZyYWdtZW50IGV4dGVuZHMgQWJzdHJhY3RTZXJ2aWNlRnJhZ21lbnQgCi17Ci0gIHB1YmxpYyBEZXZlbG9wU2VydmljZUZyYWdtZW50KCkKLSAgewotICB9Ci0gIAotICBwcm90ZWN0ZWQgRGV2ZWxvcFNlcnZpY2VGcmFnbWVudCggRGV2ZWxvcFNlcnZpY2VGcmFnbWVudCBmcmFnbWVudCApCi0gIHsKLQlzdXBlciggZnJhZ21lbnQgKTsgIAotICB9Ci0gIAotICBwdWJsaWMgT2JqZWN0IGNsb25lKCkgCi0gIHsKLQlyZXR1cm4gbmV3IERldmVsb3BTZXJ2aWNlRnJhZ21lbnQoKTsKLSAgfQotCi0gIHB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgZ2V0SUNvbW1hbmRGYWN0b3J5KCkgCi0gIHsKLQlJQ29tbWFuZEZhY3RvcnkgZmFjdG9yeSA9IG51bGw7Ci0JCi0JaWYoIHdlYlNlcnZpY2VfID09IG51bGwgfHwgY29udGV4dF8gPT0gbnVsbCB8fCAhY29udGV4dF8uZ2V0RGV2ZWxvcCgpKQotCXsKLQkgIGZhY3RvcnkgPSBuZXcgU2ltcGxlQ29tbWFuZEZhY3RvcnkoIG5ldyBWZWN0b3IoKSApOwotCX0KLQllbHNlCi0JewotCSAgZmFjdG9yeSA9IHdlYlNlcnZpY2VfLmRldmVsb3AoIGVudmlyb25tZW50XywgY29udGV4dF8sIHNlbGVjdGlvbl8sIHByb2plY3RfLCBlYXJQcm9qZWN0Xyk7CQotCX0KLQkKLQlyZXR1cm4gZmFjdG9yeTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHRlbnNpb25zL0luc3RhbGxDbGllbnRGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHRlbnNpb25zL0luc3RhbGxDbGllbnRGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTYzN2ViLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0ZW5zaW9ucy9JbnN0YWxsQ2xpZW50RnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDUyOSAgIDE0MTQyMiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4dGVuc2lvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuSUNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLlNpbXBsZUNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklDb250ZXh0OwotCi1wdWJsaWMgY2xhc3MgSW5zdGFsbENsaWVudEZyYWdtZW50IGV4dGVuZHMgQWJzdHJhY3RDbGllbnRGcmFnbWVudCAKLXsKLQlwcml2YXRlIElDb250ZXh0IGNvbnRleHRfOwotCQotICBwdWJsaWMgSW5zdGFsbENsaWVudEZyYWdtZW50KCkKLSAgewotICB9Ci0gIAotICBwcm90ZWN0ZWQgSW5zdGFsbENsaWVudEZyYWdtZW50KCBJbnN0YWxsQ2xpZW50RnJhZ21lbnQgZnJhZ21lbnQgKQotICB7Ci0Jc3VwZXIoIGZyYWdtZW50ICk7ICAKLSAgfQotICAKLSAgcHVibGljIE9iamVjdCBjbG9uZSgpIAotICB7Ci0JcmV0dXJuIG5ldyBJbnN0YWxsQ2xpZW50RnJhZ21lbnQoKTsKLSAgfQotCi0gIHB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgZ2V0SUNvbW1hbmRGYWN0b3J5KCkgCi0gIHsKLQlJQ29tbWFuZEZhY3RvcnkgZmFjdG9yeSA9IG51bGw7Ci0JCi0JaWYoIHdlYlNlcnZpY2VDbGllbnRfID09IG51bGwgfHwgY29udGV4dF8gPT0gbnVsbCB8fCAhY29udGV4dF8uZ2V0SW5zdGFsbCgpKQotCXsKLQkgIGZhY3RvcnkgPSBuZXcgU2ltcGxlQ29tbWFuZEZhY3RvcnkoIG5ldyBWZWN0b3IoKSApOwotCX0KLQllbHNlCi0JewotCSAgZmFjdG9yeSA9IHdlYlNlcnZpY2VDbGllbnRfLmluc3RhbGwoIGVudmlyb25tZW50XywgY29udGV4dF8sIHNlbGVjdGlvbl8sIHByb2plY3RfLCBlYXJQcm9qZWN0Xyk7CQotCX0KLQkKLQlyZXR1cm4gZmFjdG9yeTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0Q29udGV4dChJQ29udGV4dCBjb250ZXh0KQotICB7Ci0JICBjb250ZXh0Xz1jb250ZXh0OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dGVuc2lvbnMvSW5zdGFsbFNlcnZpY2VGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHRlbnNpb25zL0luc3RhbGxTZXJ2aWNlRnJhZ21lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQ3ZTY0MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dGVuc2lvbnMvSW5zdGFsbFNlcnZpY2VGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTI5ICAgMTQxNDIyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXh0ZW5zaW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5JQ29tbWFuZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuU2ltcGxlQ29tbWFuZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSUNvbnRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBJbnN0YWxsU2VydmljZUZyYWdtZW50IGV4dGVuZHMgQWJzdHJhY3RTZXJ2aWNlRnJhZ21lbnQgCi17Ci0JcHJpdmF0ZSBJQ29udGV4dCBjb250ZXh0XzsKLQkKLSAgcHVibGljIEluc3RhbGxTZXJ2aWNlRnJhZ21lbnQoKQotICB7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBJbnN0YWxsU2VydmljZUZyYWdtZW50KCBJbnN0YWxsU2VydmljZUZyYWdtZW50IGZyYWdtZW50ICkKLSAgewotCXN1cGVyKCBmcmFnbWVudCApOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBPYmplY3QgY2xvbmUoKSAKLSAgewotCXJldHVybiBuZXcgSW5zdGFsbFNlcnZpY2VGcmFnbWVudCgpOwotICB9Ci0KLSAgcHVibGljIElDb21tYW5kRmFjdG9yeSBnZXRJQ29tbWFuZEZhY3RvcnkoKSAKLSAgewotCUlDb21tYW5kRmFjdG9yeSBmYWN0b3J5ID0gbnVsbDsKLQkKLQlpZiggd2ViU2VydmljZV8gPT0gbnVsbCB8fCBjb250ZXh0XyA9PSBudWxsIHx8ICFjb250ZXh0Xy5nZXRJbnN0YWxsKCkpCi0JewotCSAgZmFjdG9yeSA9IG5ldyBTaW1wbGVDb21tYW5kRmFjdG9yeSggbmV3IFZlY3RvcigpICk7Ci0JfQotCWVsc2UKLQl7Ci0JICBmYWN0b3J5ID0gd2ViU2VydmljZV8uaW5zdGFsbCggZW52aXJvbm1lbnRfLCBjb250ZXh0Xywgc2VsZWN0aW9uXywgcHJvamVjdF8sIGVhclByb2plY3RfKTsJCi0JfQotCQotCXJldHVybiBmYWN0b3J5OwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRDb250ZXh0KElDb250ZXh0IGNvbnRleHQpCi0gIHsKLQkgIGNvbnRleHRfPWNvbnRleHQ7Ci0gIH0KLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL2V4dGVuc2lvbnMvUnVuQ2xpZW50RnJhZ21lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0ZW5zaW9ucy9SdW5DbGllbnRGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjE5YjY4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0ZW5zaW9ucy9SdW5DbGllbnRGcmFnbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTI5ICAgMTQxNDIyIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXh0ZW5zaW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5JQ29tbWFuZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuU2ltcGxlQ29tbWFuZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuSUNvbnRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBSdW5DbGllbnRGcmFnbWVudCBleHRlbmRzIEFic3RyYWN0Q2xpZW50RnJhZ21lbnQgCi17Ci0JcHJpdmF0ZSBJQ29udGV4dCBjb250ZXh0XzsKLQkKLSAgcHVibGljIFJ1bkNsaWVudEZyYWdtZW50KCkKLSAgewotICB9Ci0gIAotICBwcm90ZWN0ZWQgUnVuQ2xpZW50RnJhZ21lbnQoIFJ1bkNsaWVudEZyYWdtZW50IGZyYWdtZW50ICkKLSAgewotCXN1cGVyKCBmcmFnbWVudCApOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBPYmplY3QgY2xvbmUoKSAKLSAgewotCXJldHVybiBuZXcgUnVuQ2xpZW50RnJhZ21lbnQoKTsKLSAgfQotCi0gIHB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgZ2V0SUNvbW1hbmRGYWN0b3J5KCkgCi0gIHsKLQlJQ29tbWFuZEZhY3RvcnkgZmFjdG9yeSA9IG51bGw7Ci0JCi0JaWYoIHdlYlNlcnZpY2VDbGllbnRfID09IG51bGwgfHwgY29udGV4dF8gPT0gbnVsbCB8fCAhY29udGV4dF8uZ2V0UnVuKCkpCi0JewotCSAgZmFjdG9yeSA9IG5ldyBTaW1wbGVDb21tYW5kRmFjdG9yeSggbmV3IFZlY3RvcigpICk7Ci0JfQotCWVsc2UKLQl7Ci0JICBmYWN0b3J5ID0gd2ViU2VydmljZUNsaWVudF8ucnVuKCBlbnZpcm9ubWVudF8sIGNvbnRleHRfLCBzZWxlY3Rpb25fLCBwcm9qZWN0XywgZWFyUHJvamVjdF8pOwkKLQl9Ci0JCi0JcmV0dXJuIGZhY3Rvcnk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENvbnRleHQoSUNvbnRleHQgY29udGV4dCkKLSAgewotCSAgY29udGV4dF89Y29udGV4dDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHRlbnNpb25zL1J1blNlcnZpY2VGcmFnbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9leHRlbnNpb25zL1J1blNlcnZpY2VGcmFnbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NWZlODk1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvZXh0ZW5zaW9ucy9SdW5TZXJ2aWNlRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDUyOSAgIDE0MTQyMiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4dGVuc2lvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuSUNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLlNpbXBsZUNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LklDb250ZXh0OwotCi1wdWJsaWMgY2xhc3MgUnVuU2VydmljZUZyYWdtZW50IGV4dGVuZHMgQWJzdHJhY3RTZXJ2aWNlRnJhZ21lbnQgCi17Ci0JCi0JcHJpdmF0ZSBJQ29udGV4dCBjb250ZXh0XzsKLQkKLSAgcHVibGljIFJ1blNlcnZpY2VGcmFnbWVudCgpCi0gIHsKLSAgfQotICAKLSAgcHJvdGVjdGVkIFJ1blNlcnZpY2VGcmFnbWVudCggUnVuU2VydmljZUZyYWdtZW50IGZyYWdtZW50ICkKLSAgewotCXN1cGVyKCBmcmFnbWVudCApOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBPYmplY3QgY2xvbmUoKSAKLSAgewotCXJldHVybiBuZXcgUnVuU2VydmljZUZyYWdtZW50KCk7Ci0gIH0KLQotICBwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IGdldElDb21tYW5kRmFjdG9yeSgpIAotICB7Ci0JSUNvbW1hbmRGYWN0b3J5IGZhY3RvcnkgPSBudWxsOwotCQotCWlmKCB3ZWJTZXJ2aWNlXyA9PSBudWxsIHx8IGNvbnRleHRfID09IG51bGwgfHwgIWNvbnRleHRfLmdldFJ1bigpKQotCXsKLQkgIGZhY3RvcnkgPSBuZXcgU2ltcGxlQ29tbWFuZEZhY3RvcnkoIG5ldyBWZWN0b3IoKSApOwotCX0KLQllbHNlCi0JewotCSAgZmFjdG9yeSA9IHdlYlNlcnZpY2VfLnJ1biggZW52aXJvbm1lbnRfLCBjb250ZXh0Xywgc2VsZWN0aW9uXywgcHJvamVjdF8sIGVhclByb2plY3RfKTsJCi0JfQotCQotCXJldHVybiBmYWN0b3J5OwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRDb250ZXh0KElDb250ZXh0IGNvbnRleHQpCi0gIHsKLQkgIGNvbnRleHRfPWNvbnRleHQ7CSAgCi0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L0Rlc2NyaXB0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS9EZXNjcmlwdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDgwNzQyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L0Rlc2NyaXB0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IERlc2NyaXB0aW9uLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0OSBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RGVzY3JpcHRpb248L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5EZXNjcmlwdGlvbiNnZXRWYWx1ZSA8ZW0+VmFsdWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRGVzY3JpcHRpb24jZ2V0TGFuZyA8ZW0+TGFuZzwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeVBhY2thZ2UjZ2V0RGVzY3JpcHRpb24oKQotICogQG1vZGVsIAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIERlc2NyaXB0aW9uIGV4dGVuZHMgRU9iamVjdCB7Ci0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlZhbHVlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlZhbHVlPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNzZXRWYWx1ZShTdHJpbmcpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5UGFja2FnZSNnZXREZXNjcmlwdGlvbl9WYWx1ZSgpCi0JICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuU3RyaW5nIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZ2V0VmFsdWUoKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRGVzY3JpcHRpb24jZ2V0VmFsdWUgPGVtPlZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5WYWx1ZTwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjZ2V0VmFsdWUoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldFZhbHVlKFN0cmluZyB2YWx1ZSk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5MYW5nPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5MYW5nPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkxhbmc8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI3NldExhbmcoU3RyaW5nKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeVBhY2thZ2UjZ2V0RGVzY3JpcHRpb25fTGFuZygpCi0JICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuTGFuZ3VhZ2UiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVN0cmluZyBnZXRMYW5nKCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRlc2NyaXB0aW9uI2dldExhbmcgPGVtPkxhbmc8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkxhbmc8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI2dldExhbmcoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldExhbmcoU3RyaW5nIHZhbHVlKTsKLQotfSAvLyBEZXNjcmlwdGlvbgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvRG9jdW1lbnRSb290LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS9Eb2N1bWVudFJvb3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjMwODgyNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS9Eb2N1bWVudFJvb3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NSArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IERvY3VtZW50Um9vdC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDkgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVNYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkZlYXR1cmVNYXA7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRvY3VtZW50IFJvb3Q8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5Eb2N1bWVudFJvb3QjZ2V0TWl4ZWQgPGVtPk1peGVkPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRvY3VtZW50Um9vdCNnZXRYTUxOU1ByZWZpeE1hcCA8ZW0+WE1MTlMgUHJlZml4IE1hcDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5Eb2N1bWVudFJvb3QjZ2V0WFNJU2NoZW1hTG9jYXRpb24gPGVtPlhTSSBTY2hlbWEgTG9jYXRpb248L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRG9jdW1lbnRSb290I2dldERlc2NyaXB0aW9uIDxlbT5EZXNjcmlwdGlvbjwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5Eb2N1bWVudFJvb3QjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5Eb2N1bWVudFJvb3QjZ2V0UmVnaXN0cnkgPGVtPlJlZ2lzdHJ5PC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5UGFja2FnZSNnZXREb2N1bWVudFJvb3QoKQotICogQG1vZGVsIAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIERvY3VtZW50Um9vdCBleHRlbmRzIEVPYmplY3QgewotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk1peGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KLQkgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRmVhdHVyZU1hcC5FbnRyeX0uCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5NaXhlZDwvZW0+JyBhdHRyaWJ1dGUgbGlzdCBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk1peGVkPC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeVBhY2thZ2UjZ2V0RG9jdW1lbnRSb290X01peGVkKCkKLQkgKiBAbW9kZWwgdW5pcXVlPSJmYWxzZSIgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRmVhdHVyZU1hcEVudHJ5IiBtYW55PSJ0cnVlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlGZWF0dXJlTWFwIGdldE1peGVkKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5YTUxOUyBQcmVmaXggTWFwPC9iPjwvZW0+JyBtYXAuCi0JICogVGhlIGtleSBpcyBvZiB0eXBlIHtAbGluayBqYXZhLmxhbmcuU3RyaW5nfSwKLQkgKiBhbmQgdGhlIHZhbHVlIGlzIG9mIHR5cGUge0BsaW5rIGphdmEubGFuZy5TdHJpbmd9LAotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+WE1MTlMgUHJlZml4IE1hcDwvZW0+JyBtYXAgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5YTUxOUyBQcmVmaXggTWFwPC9lbT4nIG1hcC4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnlQYWNrYWdlI2dldERvY3VtZW50Um9vdF9YTUxOU1ByZWZpeE1hcCgpCi0JICogQG1vZGVsIG1hcFR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RyaW5nVG9TdHJpbmdNYXBFbnRyeSIga2V5VHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdmFsdWVUeXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0cmFuc2llbnQ9InRydWUiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVNYXAgZ2V0WE1MTlNQcmVmaXhNYXAoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlhTSSBTY2hlbWEgTG9jYXRpb248L2I+PC9lbT4nIG1hcC4KLQkgKiBUaGUga2V5IGlzIG9mIHR5cGUge0BsaW5rIGphdmEubGFuZy5TdHJpbmd9LAotCSAqIGFuZCB0aGUgdmFsdWUgaXMgb2YgdHlwZSB7QGxpbmsgamF2YS5sYW5nLlN0cmluZ30sCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5YU0kgU2NoZW1hIExvY2F0aW9uPC9lbT4nIG1hcCBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlhTSSBTY2hlbWEgTG9jYXRpb248L2VtPicgbWFwLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeVBhY2thZ2UjZ2V0RG9jdW1lbnRSb290X1hTSVNjaGVtYUxvY2F0aW9uKCkKLQkgKiBAbW9kZWwgbWFwVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJpbmdUb1N0cmluZ01hcEVudHJ5IiBrZXlUeXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB2YWx1ZVR5cGU9ImphdmEubGFuZy5TdHJpbmciIHRyYW5zaWVudD0idHJ1ZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRU1hcCBnZXRYU0lTY2hlbWFMb2NhdGlvbigpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RGVzY3JpcHRpb248L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkRlc2NyaXB0aW9uPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRlc2NyaXB0aW9uPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiBAc2VlICNzZXREZXNjcmlwdGlvbihEZXNjcmlwdGlvbikKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnlQYWNrYWdlI2dldERvY3VtZW50Um9vdF9EZXNjcmlwdGlvbigpCi0JICogQG1vZGVsIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiIHRyYW5zaWVudD0idHJ1ZSIgdm9sYXRpbGU9InRydWUiIGRlcml2ZWQ9InRydWUiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCURlc2NyaXB0aW9uIGdldERlc2NyaXB0aW9uKCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRvY3VtZW50Um9vdCNnZXREZXNjcmlwdGlvbiA8ZW0+RGVzY3JpcHRpb248L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkRlc2NyaXB0aW9uPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiBAc2VlICNnZXREZXNjcmlwdGlvbigpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0RGVzY3JpcHRpb24oRGVzY3JpcHRpb24gdmFsdWUpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiBAc2VlICNzZXROYW1lKE5hbWUpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5UGFja2FnZSNnZXREb2N1bWVudFJvb3RfTmFtZSgpCi0JICogQG1vZGVsIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiIHRyYW5zaWVudD0idHJ1ZSIgdm9sYXRpbGU9InRydWUiIGRlcml2ZWQ9InRydWUiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCU5hbWUgZ2V0TmFtZSgpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5Eb2N1bWVudFJvb3QjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogQHNlZSAjZ2V0TmFtZSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0TmFtZShOYW1lIHZhbHVlKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlJlZ2lzdHJ5PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5SZWdpc3RyeTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5SZWdpc3RyeTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogQHNlZSAjc2V0UmVnaXN0cnkoUmVnaXN0cnkpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5UGFja2FnZSNnZXREb2N1bWVudFJvb3RfUmVnaXN0cnkoKQotCSAqIEBtb2RlbCBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIiB0cmFuc2llbnQ9InRydWUiIHZvbGF0aWxlPSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlSZWdpc3RyeSBnZXRSZWdpc3RyeSgpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5Eb2N1bWVudFJvb3QjZ2V0UmVnaXN0cnkgPGVtPlJlZ2lzdHJ5PC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5SZWdpc3RyeTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogQHNlZSAjZ2V0UmVnaXN0cnkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldFJlZ2lzdHJ5KFJlZ2lzdHJ5IHZhbHVlKTsKLQotfSAvLyBEb2N1bWVudFJvb3QKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L05hbWUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L05hbWUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWMzZGQzOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS9OYW1lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IE5hbWUuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ5IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5OYW1lPC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuTmFtZSNnZXRWYWx1ZSA8ZW0+VmFsdWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuTmFtZSNnZXRMYW5nIDxlbT5MYW5nPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5UGFja2FnZSNnZXROYW1lXygpCi0gKiBAbW9kZWwgCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgTmFtZSBleHRlbmRzIEVPYmplY3QgewotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5WYWx1ZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5WYWx1ZTwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjc2V0VmFsdWUoU3RyaW5nKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeVBhY2thZ2UjZ2V0TmFtZV9WYWx1ZSgpCi0JICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuU3RyaW5nIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZ2V0VmFsdWUoKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuTmFtZSNnZXRWYWx1ZSA8ZW0+VmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlZhbHVlPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNnZXRWYWx1ZSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0VmFsdWUoU3RyaW5nIHZhbHVlKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkxhbmc8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkxhbmc8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TGFuZzwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjc2V0TGFuZyhTdHJpbmcpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5UGFja2FnZSNnZXROYW1lX0xhbmcoKQotCSAqIEBtb2RlbCB1bmlxdWU9ImZhbHNlIiBkYXRhVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLkxhbmd1YWdlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZ2V0TGFuZygpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5OYW1lI2dldExhbmcgPGVtPkxhbmc8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkxhbmc8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI2dldExhbmcoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldExhbmcoU3RyaW5nIHZhbHVlKTsKLQotfSAvLyBOYW1lCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS9SZWdpc3RyeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvUmVnaXN0cnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTk5MmRhMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS9SZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogUmVnaXN0cnkuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ5IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5SZWdpc3RyeTwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5I2dldE5hbWUgPGVtPk5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnkjZ2V0RGVzY3JpcHRpb24gPGVtPkRlc2NyaXB0aW9uPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5I2dldElkIDxlbT5JZDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeSNnZXRMb2NhdGlvbiA8ZW0+TG9jYXRpb248L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnkjZ2V0UmVmIDxlbT5SZWY8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnlQYWNrYWdlI2dldFJlZ2lzdHJ5KCkKLSAqIEBtb2RlbCAKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBSZWdpc3RyeSBleHRlbmRzIEVPYmplY3QgewotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5Lk5hbWV9LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5UGFja2FnZSNnZXRSZWdpc3RyeV9OYW1lKCkKLQkgKiBAbW9kZWwgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5OYW1lIiBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIiByZXF1aXJlZD0idHJ1ZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUxpc3QgZ2V0TmFtZSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RGVzY3JpcHRpb248L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRlc2NyaXB0aW9ufS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkRlc2NyaXB0aW9uPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RGVzY3JpcHRpb248L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5UGFja2FnZSNnZXRSZWdpc3RyeV9EZXNjcmlwdGlvbigpCi0JICogQG1vZGVsIHR5cGU9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRGVzY3JpcHRpb24iIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiIHJlcXVpcmVkPSJ0cnVlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFTGlzdCBnZXREZXNjcmlwdGlvbigpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPklkPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPklkPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNzZXRJZChTdHJpbmcpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5UGFja2FnZSNnZXRSZWdpc3RyeV9JZCgpCi0JICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuQW55VVJJIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZ2V0SWQoKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnkjZ2V0SWQgPGVtPklkPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JZDwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjZ2V0SWQoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldElkKFN0cmluZyB2YWx1ZSk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Mb2NhdGlvbjwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TG9jYXRpb248L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TG9jYXRpb248L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI3NldExvY2F0aW9uKFN0cmluZykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnlQYWNrYWdlI2dldFJlZ2lzdHJ5X0xvY2F0aW9uKCkKLQkgKiBAbW9kZWwgdW5pcXVlPSJmYWxzZSIgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZS5BbnlVUkkiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVN0cmluZyBnZXRMb2NhdGlvbigpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeSNnZXRMb2NhdGlvbiA8ZW0+TG9jYXRpb248L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkxvY2F0aW9uPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNnZXRMb2NhdGlvbigpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0TG9jYXRpb24oU3RyaW5nIHZhbHVlKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlJlZjwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+UmVmPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlJlZjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjc2V0UmVmKFN0cmluZykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnlQYWNrYWdlI2dldFJlZ2lzdHJ5X1JlZigpCi0JICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuQW55VVJJIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZ2V0UmVmKCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5I2dldFJlZiA8ZW0+UmVmPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5SZWY8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI2dldFJlZigpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0UmVmKFN0cmluZyB2YWx1ZSk7Ci0KLX0gLy8gUmVnaXN0cnkKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L1JlZ2lzdHJ5RmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvUmVnaXN0cnlGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjMjQxMzIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvUmVnaXN0cnlGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IFJlZ2lzdHJ5RmFjdG9yeS5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDkgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVGYWN0b3J5OwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBUaGUgPGI+RmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KLSAqIEl0IHByb3ZpZGVzIGEgY3JlYXRlIG1ldGhvZCBmb3IgZWFjaCBub24tYWJzdHJhY3QgY2xhc3Mgb2YgdGhlIG1vZGVsLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnlQYWNrYWdlCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgUmVnaXN0cnlGYWN0b3J5IGV4dGVuZHMgRUZhY3RvcnkgewotCS8qKgotCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JUmVnaXN0cnlGYWN0b3J5IGVJTlNUQU5DRSA9IG5ldyBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmltcGwuUmVnaXN0cnlGYWN0b3J5SW1wbCgpOwotCi0JLyoqCi0JICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5EZXNjcmlwdGlvbjwvZW0+Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RGVzY3JpcHRpb248L2VtPicuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCURlc2NyaXB0aW9uIGNyZWF0ZURlc2NyaXB0aW9uKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRvY3VtZW50IFJvb3Q8L2VtPicuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRvY3VtZW50IFJvb3Q8L2VtPicuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCURvY3VtZW50Um9vdCBjcmVhdGVEb2N1bWVudFJvb3QoKTsKLQotCS8qKgotCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TmFtZTwvZW0+Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TmFtZTwvZW0+Jy4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JTmFtZSBjcmVhdGVOYW1lKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlJlZ2lzdHJ5PC9lbT4nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5SZWdpc3RyeTwvZW0+Jy4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JUmVnaXN0cnkgY3JlYXRlUmVnaXN0cnkoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JUmVnaXN0cnlQYWNrYWdlIGdldFJlZ2lzdHJ5UGFja2FnZSgpOwotCi19IC8vUmVnaXN0cnlGYWN0b3J5CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS9SZWdpc3RyeVBhY2thZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L1JlZ2lzdHJ5UGFja2FnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDhmMWU1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L1JlZ2lzdHJ5UGFja2FnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTcwICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogUmVnaXN0cnlQYWNrYWdlLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0OSBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogVGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGUgbW9kZWwuCi0gKiBJdCBjb250YWlucyBhY2Nlc3NvcnMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdG8gcmVwcmVzZW50Ci0gKiA8dWw+Ci0gKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+Ci0gKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgotICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+Ci0gKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgotICogPC91bD4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPCEtLSBiZWdpbi1tb2RlbC1kb2MgLS0+Ci0gKiAKLSAqICAgIFNlZSBodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UuaHRtbCBhbmQKLSAqICAgIGh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy14bWwgZm9yIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgbmFtZXNwYWNlLgotICogCi0gKiAgICAgVGhpcyBzY2hlbWEgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBYTUwgbmFtZXNwYWNlLCBpbiBhIGZvcm0KLSAqICAgICBzdWl0YWJsZSBmb3IgaW1wb3J0IGJ5IG90aGVyIHNjaGVtYSBkb2N1bWVudHMuICAKLSAqIAotICogICAgIE5vdGUgdGhhdCBsb2NhbCBuYW1lcyBpbiB0aGlzIG5hbWVzcGFjZSBhcmUgaW50ZW5kZWQgdG8gYmUgZGVmaW5lZAotICogICAgIG9ubHkgYnkgdGhlIFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0gb3IgaXRzIHN1Ymdyb3Vwcy4gIFRoZQotICogICAgIGZvbGxvd2luZyBuYW1lcyBhcmUgY3VycmVudGx5IGRlZmluZWQgaW4gdGhpcyBuYW1lc3BhY2UgYW5kIHNob3VsZAotICogICAgIG5vdCBiZSB1c2VkIHdpdGggY29uZmxpY3Rpbmcgc2VtYW50aWNzIGJ5IGFueSBXb3JraW5nIEdyb3VwLAotICogICAgIHNwZWNpZmljYXRpb24sIG9yIGRvY3VtZW50IGluc3RhbmNlOgotICogCi0gKiAgICAgYmFzZSAoYXMgYW4gYXR0cmlidXRlIG5hbWUpOiBkZW5vdGVzIGFuIGF0dHJpYnV0ZSB3aG9zZSB2YWx1ZQotICogICAgICAgICAgcHJvdmlkZXMgYSBVUkkgdG8gYmUgdXNlZCBhcyB0aGUgYmFzZSBmb3IgaW50ZXJwcmV0aW5nIGFueQotICogICAgICAgICAgcmVsYXRpdmUgVVJJcyBpbiB0aGUgc2NvcGUgb2YgdGhlIGVsZW1lbnQgb24gd2hpY2ggaXQKLSAqICAgICAgICAgIGFwcGVhcnM7IGl0cyB2YWx1ZSBpcyBpbmhlcml0ZWQuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQKLSAqICAgICAgICAgIGJ5IHZpcnR1ZSBvZiBpdHMgZGVmaW5pdGlvbiBpbiB0aGUgWE1MIEJhc2Ugc3BlY2lmaWNhdGlvbi4KLSAqIAotICogICAgIGlkICAgKGFzIGFuIGF0dHJpYnV0ZSBuYW1lKTogZGVub3RlcyBhbiBhdHRyaWJ1dGUgd2hvc2UgdmFsdWUKLSAqICAgICAgICAgIHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBpZiBkZWNsYXJlZCB0byBiZSBvZiB0eXBlIElELgotICogICAgICAgICAgVGhlIHhtbDppZCBzcGVjaWZpY2F0aW9uIGlzIG5vdCB5ZXQgYSBXM0MgUmVjb21tZW5kYXRpb24sCi0gKiAgICAgICAgICBidXQgdGhpcyBhdHRyaWJ1dGUgaXMgaW5jbHVkZWQgaGVyZSB0byBmYWNpbGl0YXRlIGV4cGVyaW1lbnRhdGlvbgotICogICAgICAgICAgd2l0aCB0aGUgbWVjaGFuaXNtcyBpdCBwcm9wb3Nlcy4gIE5vdGUgdGhhdCBpdCBpcyBfbm90XyBpbmNsdWRlZAotICogICAgICAgICAgaW4gdGhlIHNwZWNpYWxBdHRycyBhdHRyaWJ1dGUgZ3JvdXAuCi0gKiAKLSAqICAgICBsYW5nIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlIHZhbHVlCi0gKiAgICAgICAgICBpcyBhIGxhbmd1YWdlIGNvZGUgZm9yIHRoZSBuYXR1cmFsIGxhbmd1YWdlIG9mIHRoZSBjb250ZW50IG9mCi0gKiAgICAgICAgICBhbnkgZWxlbWVudDsgaXRzIHZhbHVlIGlzIGluaGVyaXRlZC4gIFRoaXMgbmFtZSBpcyByZXNlcnZlZAotICogICAgICAgICAgYnkgdmlydHVlIG9mIGl0cyBkZWZpbml0aW9uIGluIHRoZSBYTUwgc3BlY2lmaWNhdGlvbi4KLSAqICAgCi0gKiAgICAgc3BhY2UgKGFzIGFuIGF0dHJpYnV0ZSBuYW1lKTogZGVub3RlcyBhbiBhdHRyaWJ1dGUgd2hvc2UKLSAqICAgICAgICAgIHZhbHVlIGlzIGEga2V5d29yZCBpbmRpY2F0aW5nIHdoYXQgd2hpdGVzcGFjZSBwcm9jZXNzaW5nCi0gKiAgICAgICAgICBkaXNjaXBsaW5lIGlzIGludGVuZGVkIGZvciB0aGUgY29udGVudCBvZiB0aGUgZWxlbWVudDsgaXRzCi0gKiAgICAgICAgICB2YWx1ZSBpcyBpbmhlcml0ZWQuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQgYnkgdmlydHVlIG9mIGl0cwotICogICAgICAgICAgZGVmaW5pdGlvbiBpbiB0aGUgWE1MIHNwZWNpZmljYXRpb24uCi0gKiAKLSAqICAgICBGYXRoZXIgKGluIGFueSBjb250ZXh0IGF0IGFsbCk6IGRlbm90ZXMgSm9uIEJvc2FrLCB0aGUgY2hhaXIgb2YgCi0gKiAgICAgICAgICB0aGUgb3JpZ2luYWwgWE1MIFdvcmtpbmcgR3JvdXAuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQgYnkgCi0gKiAgICAgICAgICB0aGUgZm9sbG93aW5nIGRlY2lzaW9uIG9mIHRoZSBXM0MgWE1MIFBsZW5hcnkgYW5kIAotICogICAgICAgICAgWE1MIENvb3JkaW5hdGlvbiBncm91cHM6Ci0gKiAKLSAqICAgICAgICAgICAgICBJbiBhcHByZWNpYXRpb24gZm9yIGhpcyB2aXNpb24sIGxlYWRlcnNoaXAgYW5kIGRlZGljYXRpb24KLSAqICAgICAgICAgICAgICB0aGUgVzNDIFhNTCBQbGVuYXJ5IG9uIHRoaXMgMTB0aCBkYXkgb2YgRmVicnVhcnksIDIwMDAKLSAqICAgICAgICAgICAgICByZXNlcnZlcyBmb3IgSm9uIEJvc2FrIGluIHBlcnBldHVpdHkgdGhlIFhNTCBuYW1lCi0gKiAgICAgICAgICAgICAgeG1sOkZhdGhlcgotICogICAKLSAqIFRoaXMgc2NoZW1hIGRlZmluZXMgYXR0cmlidXRlcyBhbmQgYW4gYXR0cmlidXRlIGdyb3VwCi0gKiAgICAgICAgIHN1aXRhYmxlIGZvciB1c2UgYnkKLSAqICAgICAgICAgc2NoZW1hcyB3aXNoaW5nIHRvIGFsbG93IHhtbDpiYXNlLCB4bWw6bGFuZywgeG1sOnNwYWNlIG9yIHhtbDppZAotICogICAgICAgICBhdHRyaWJ1dGVzIG9uIGVsZW1lbnRzIHRoZXkgZGVmaW5lLgotICogCi0gKiAgICAgICAgIFRvIGVuYWJsZSB0aGlzLCBzdWNoIGEgc2NoZW1hIG11c3QgaW1wb3J0IHRoaXMgc2NoZW1hCi0gKiAgICAgICAgIGZvciB0aGUgWE1MIG5hbWVzcGFjZSwgZS5nLiBhcyBmb2xsb3dzOgotICogICAgICAgICAmbHQ7c2NoZW1hIC4gLiAuJmd0OwotICogICAgICAgICAgLiAuIC4KLSAqICAgICAgICAgICZsdDtpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiCi0gKiAgICAgICAgICAgICAgICAgICAgIHNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC54c2QiLyZndDsKLSAqIAotICogICAgICAgICBTdWJzZXF1ZW50bHksIHF1YWxpZmllZCByZWZlcmVuY2UgdG8gYW55IG9mIHRoZSBhdHRyaWJ1dGVzCi0gKiAgICAgICAgIG9yIHRoZSBncm91cCBkZWZpbmVkIGJlbG93IHdpbGwgaGF2ZSB0aGUgZGVzaXJlZCBlZmZlY3QsIGUuZy4KLSAqIAotICogICAgICAgICAmbHQ7dHlwZSAuIC4gLiZndDsKLSAqICAgICAgICAgIC4gLiAuCi0gKiAgICAgICAgICAmbHQ7YXR0cmlidXRlR3JvdXAgcmVmPSJ4bWw6c3BlY2lhbEF0dHJzIi8mZ3Q7Ci0gKiAgCi0gKiAgICAgICAgICB3aWxsIGRlZmluZSBhIHR5cGUgd2hpY2ggd2lsbCBzY2hlbWEtdmFsaWRhdGUgYW4gaW5zdGFuY2UKLSAqICAgICAgICAgIGVsZW1lbnQgd2l0aCBhbnkgb2YgdGhvc2UgYXR0cmlidXRlcwotICogSW4ga2VlcGluZyB3aXRoIHRoZSBYTUwgU2NoZW1hIFdHJ3Mgc3RhbmRhcmQgdmVyc2lvbmluZwotICogICAgcG9saWN5LCB0aGlzIHNjaGVtYSBkb2N1bWVudCB3aWxsIHBlcnNpc3QgYXQKLSAqICAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDUvMDgveG1sLnhzZC4KLSAqICAgIEF0IHRoZSBkYXRlIG9mIGlzc3VlIGl0IGNhbiBhbHNvIGJlIGZvdW5kIGF0Ci0gKiAgICBodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC54c2QuCi0gKiAgICBUaGUgc2NoZW1hIGRvY3VtZW50IGF0IHRoYXQgVVJJIG1heSBob3dldmVyIGNoYW5nZSBpbiB0aGUgZnV0dXJlLAotICogICAgaW4gb3JkZXIgdG8gcmVtYWluIGNvbXBhdGlibGUgd2l0aCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgWE1MIFNjaGVtYQotICogICAgaXRzZWxmLCBvciB3aXRoIHRoZSBYTUwgbmFtZXNwYWNlIGl0c2VsZi4gIEluIG90aGVyIHdvcmRzLCBpZiB0aGUgWE1MCi0gKiAgICBTY2hlbWEgb3IgWE1MIG5hbWVzcGFjZXMgY2hhbmdlLCB0aGUgdmVyc2lvbiBvZiB0aGlzIGRvY3VtZW50IGF0Ci0gKiAgICBodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC54c2Qgd2lsbCBjaGFuZ2UKLSAqICAgIGFjY29yZGluZ2x5OyB0aGUgdmVyc2lvbiBhdAotICogICAgaHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC94bWwueHNkIHdpbGwgbm90IGNoYW5nZS4KLSAqICAgCi0gKiA8IS0tIGVuZC1tb2RlbC1kb2MgLS0+Ci0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnlGYWN0b3J5Ci0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgUmVnaXN0cnlQYWNrYWdlIGV4dGVuZHMgRVBhY2thZ2UgewotCS8qKgotCSAqIFRoZSBwYWNrYWdlIG5hbWUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGVOQU1FID0gInJlZ2lzdHJ5IjsKLQotCS8qKgotCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBVUkkuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGVOU19VUkkgPSAiaHR0cDovL2VjbGlwc2Uub3JnL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkiOwotCi0JLyoqCi0JICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIG5hbWUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGVOU19QUkVGSVggPSAicmVnaXN0cnkiOwotCi0JLyoqCi0JICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgcGFja2FnZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlSZWdpc3RyeVBhY2thZ2UgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5pbXBsLlJlZ2lzdHJ5UGFja2FnZUltcGwuaW5pdCgpOwotCi0JLyoqCi0JICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmltcGwuRGVzY3JpcHRpb25JbXBsIDxlbT5EZXNjcmlwdGlvbjwvZW0+fScgY2xhc3MuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbC5EZXNjcmlwdGlvbkltcGwKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbC5SZWdpc3RyeVBhY2thZ2VJbXBsI2dldERlc2NyaXB0aW9uKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JaW50IERFU0NSSVBUSU9OID0gMDsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5WYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IERFU0NSSVBUSU9OX19WQUxVRSA9IDA7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFuZzwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IERFU0NSSVBUSU9OX19MQU5HID0gMTsKLQotCS8qKgotCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgdGhlICc8ZW0+RGVzY3JpcHRpb248L2VtPicgY2xhc3MuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgREVTQ1JJUFRJT05fRkVBVFVSRV9DT1VOVCA9IDI7Ci0KLQkvKioKLQkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbC5Eb2N1bWVudFJvb3RJbXBsIDxlbT5Eb2N1bWVudCBSb290PC9lbT59JyBjbGFzcy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5pbXBsLkRvY3VtZW50Um9vdEltcGwKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbC5SZWdpc3RyeVBhY2thZ2VJbXBsI2dldERvY3VtZW50Um9vdCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCWludCBET0NVTUVOVF9ST09UID0gMTsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5NaXhlZDwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgRE9DVU1FTlRfUk9PVF9fTUlYRUQgPSAwOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlhNTE5TIFByZWZpeCBNYXA8L2I+PC9lbT4nIG1hcC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBET0NVTUVOVF9ST09UX19YTUxOU19QUkVGSVhfTUFQID0gMTsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5YU0kgU2NoZW1hIExvY2F0aW9uPC9iPjwvZW0+JyBtYXAuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTiA9IDI7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVzY3JpcHRpb248L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBET0NVTUVOVF9ST09UX19ERVNDUklQVElPTiA9IDM7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IERPQ1VNRU5UX1JPT1RfX05BTUUgPSA0OwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlZ2lzdHJ5PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgRE9DVU1FTlRfUk9PVF9fUkVHSVNUUlkgPSA1OwotCi0JLyoqCi0JICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSB0aGUgJzxlbT5Eb2N1bWVudCBSb290PC9lbT4nIGNsYXNzLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IERPQ1VNRU5UX1JPT1RfRkVBVFVSRV9DT1VOVCA9IDY7Ci0KLQkvKioKLQkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbC5OYW1lSW1wbCA8ZW0+TmFtZTwvZW0+fScgY2xhc3MuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbC5OYW1lSW1wbAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5pbXBsLlJlZ2lzdHJ5UGFja2FnZUltcGwjZ2V0TmFtZV8oKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlpbnQgTkFNRSA9IDI7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBOQU1FX19WQUxVRSA9IDA7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFuZzwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IE5BTUVfX0xBTkcgPSAxOwotCi0JLyoqCi0JICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSB0aGUgJzxlbT5OYW1lPC9lbT4nIGNsYXNzLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IE5BTUVfRkVBVFVSRV9DT1VOVCA9IDI7Ci0KLQkvKioKLQkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbC5SZWdpc3RyeUltcGwgPGVtPlJlZ2lzdHJ5PC9lbT59JyBjbGFzcy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5pbXBsLlJlZ2lzdHJ5SW1wbAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5pbXBsLlJlZ2lzdHJ5UGFja2FnZUltcGwjZ2V0UmVnaXN0cnkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlpbnQgUkVHSVNUUlkgPSAzOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IFJFR0lTVFJZX19OQU1FID0gMDsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EZXNjcmlwdGlvbjwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgUkVHSVNUUllfX0RFU0NSSVBUSU9OID0gMTsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JZDwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IFJFR0lTVFJZX19JRCA9IDI7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TG9jYXRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBSRUdJU1RSWV9fTE9DQVRJT04gPSAzOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlZjwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IFJFR0lTVFJZX19SRUYgPSA0OwotCi0JLyoqCi0JICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSB0aGUgJzxlbT5SZWdpc3RyeTwvZW0+JyBjbGFzcy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBSRUdJU1RSWV9GRUFUVVJFX0NPVU5UID0gNTsKLQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5EZXNjcmlwdGlvbiA8ZW0+RGVzY3JpcHRpb248L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+RGVzY3JpcHRpb248L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRlc2NyaXB0aW9uCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVDbGFzcyBnZXREZXNjcmlwdGlvbigpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRlc2NyaXB0aW9uI2dldFZhbHVlIDxlbT5WYWx1ZTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlZhbHVlPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5EZXNjcmlwdGlvbiNnZXRWYWx1ZSgpCi0JICogQHNlZSAjZ2V0RGVzY3JpcHRpb24oKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQXR0cmlidXRlIGdldERlc2NyaXB0aW9uX1ZhbHVlKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRGVzY3JpcHRpb24jZ2V0TGFuZyA8ZW0+TGFuZzwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkxhbmc8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRlc2NyaXB0aW9uI2dldExhbmcoKQotCSAqIEBzZWUgI2dldERlc2NyaXB0aW9uKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUF0dHJpYnV0ZSBnZXREZXNjcmlwdGlvbl9MYW5nKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRvY3VtZW50Um9vdCA8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5Eb2N1bWVudCBSb290PC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5Eb2N1bWVudFJvb3QKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUNsYXNzIGdldERvY3VtZW50Um9vdCgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRG9jdW1lbnRSb290I2dldE1peGVkIDxlbT5NaXhlZDwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSBsaXN0ICc8ZW0+TWl4ZWQ8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRvY3VtZW50Um9vdCNnZXRNaXhlZCgpCi0JICogQHNlZSAjZ2V0RG9jdW1lbnRSb290KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUF0dHJpYnV0ZSBnZXREb2N1bWVudFJvb3RfTWl4ZWQoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgbWFwICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5Eb2N1bWVudFJvb3QjZ2V0WE1MTlNQcmVmaXhNYXAgPGVtPlhNTE5TIFByZWZpeCBNYXA8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBtYXAgJzxlbT5YTUxOUyBQcmVmaXggTWFwPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5Eb2N1bWVudFJvb3QjZ2V0WE1MTlNQcmVmaXhNYXAoKQotCSAqIEBzZWUgI2dldERvY3VtZW50Um9vdCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVSZWZlcmVuY2UgZ2V0RG9jdW1lbnRSb290X1hNTE5TUHJlZml4TWFwKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIG1hcCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRG9jdW1lbnRSb290I2dldFhTSVNjaGVtYUxvY2F0aW9uIDxlbT5YU0kgU2NoZW1hIExvY2F0aW9uPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgbWFwICc8ZW0+WFNJIFNjaGVtYSBMb2NhdGlvbjwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRG9jdW1lbnRSb290I2dldFhTSVNjaGVtYUxvY2F0aW9uKCkKLQkgKiBAc2VlICNnZXREb2N1bWVudFJvb3QoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9YU0lTY2hlbWFMb2NhdGlvbigpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRvY3VtZW50Um9vdCNnZXREZXNjcmlwdGlvbiA8ZW0+RGVzY3JpcHRpb248L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJzxlbT5EZXNjcmlwdGlvbjwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRG9jdW1lbnRSb290I2dldERlc2NyaXB0aW9uKCkKLQkgKiBAc2VlICNnZXREb2N1bWVudFJvb3QoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9EZXNjcmlwdGlvbigpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRvY3VtZW50Um9vdCNnZXROYW1lIDxlbT5OYW1lPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICc8ZW0+TmFtZTwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRG9jdW1lbnRSb290I2dldE5hbWUoKQotCSAqIEBzZWUgI2dldERvY3VtZW50Um9vdCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVSZWZlcmVuY2UgZ2V0RG9jdW1lbnRSb290X05hbWUoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5Eb2N1bWVudFJvb3QjZ2V0UmVnaXN0cnkgPGVtPlJlZ2lzdHJ5PC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICc8ZW0+UmVnaXN0cnk8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRvY3VtZW50Um9vdCNnZXRSZWdpc3RyeSgpCi0JICogQHNlZSAjZ2V0RG9jdW1lbnRSb290KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRVJlZmVyZW5jZSBnZXREb2N1bWVudFJvb3RfUmVnaXN0cnkoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuTmFtZSA8ZW0+TmFtZTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5OYW1lPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5OYW1lCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVDbGFzcyBnZXROYW1lXygpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5Lk5hbWUjZ2V0VmFsdWUgPGVtPlZhbHVlPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VmFsdWU8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5Lk5hbWUjZ2V0VmFsdWUoKQotCSAqIEBzZWUgI2dldE5hbWVfKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUF0dHJpYnV0ZSBnZXROYW1lX1ZhbHVlKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuTmFtZSNnZXRMYW5nIDxlbT5MYW5nPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TGFuZzwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuTmFtZSNnZXRMYW5nKCkKLQkgKiBAc2VlICNnZXROYW1lXygpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVBdHRyaWJ1dGUgZ2V0TmFtZV9MYW5nKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5IDxlbT5SZWdpc3RyeTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5SZWdpc3RyeTwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUNsYXNzIGdldFJlZ2lzdHJ5KCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeSNnZXROYW1lIDxlbT5OYW1lPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxlbT5OYW1lPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeSNnZXROYW1lKCkKLQkgKiBAc2VlICNnZXRSZWdpc3RyeSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVSZWZlcmVuY2UgZ2V0UmVnaXN0cnlfTmFtZSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnkjZ2V0RGVzY3JpcHRpb24gPGVtPkRlc2NyaXB0aW9uPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxlbT5EZXNjcmlwdGlvbjwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnkjZ2V0RGVzY3JpcHRpb24oKQotCSAqIEBzZWUgI2dldFJlZ2lzdHJ5KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRVJlZmVyZW5jZSBnZXRSZWdpc3RyeV9EZXNjcmlwdGlvbigpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5I2dldElkIDxlbT5JZDwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPklkPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeSNnZXRJZCgpCi0JICogQHNlZSAjZ2V0UmVnaXN0cnkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQXR0cmlidXRlIGdldFJlZ2lzdHJ5X0lkKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnkjZ2V0TG9jYXRpb24gPGVtPkxvY2F0aW9uPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TG9jYXRpb248L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5I2dldExvY2F0aW9uKCkKLQkgKiBAc2VlICNnZXRSZWdpc3RyeSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVBdHRyaWJ1dGUgZ2V0UmVnaXN0cnlfTG9jYXRpb24oKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeSNnZXRSZWYgPGVtPlJlZjwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlJlZjwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnkjZ2V0UmVmKCkKLQkgKiBAc2VlICNnZXRSZWdpc3RyeSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVBdHRyaWJ1dGUgZ2V0UmVnaXN0cnlfUmVmKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlSZWdpc3RyeUZhY3RvcnkgZ2V0UmVnaXN0cnlGYWN0b3J5KCk7Ci0KLX0gLy9SZWdpc3RyeVBhY2thZ2UKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L2ltcGwvRGVzY3JpcHRpb25JbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS9pbXBsL0Rlc2NyaXB0aW9uSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTFkOTQ3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L2ltcGwvRGVzY3JpcHRpb25JbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTYgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBEZXNjcmlwdGlvbkltcGwuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ3IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU9iamVjdEltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnlQYWNrYWdlOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RGVzY3JpcHRpb248L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbC5EZXNjcmlwdGlvbkltcGwjZ2V0VmFsdWUgPGVtPlZhbHVlPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmltcGwuRGVzY3JpcHRpb25JbXBsI2dldExhbmcgPGVtPkxhbmc8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBEZXNjcmlwdGlvbkltcGwgZXh0ZW5kcyBFT2JqZWN0SW1wbCBpbXBsZW1lbnRzIERlc2NyaXB0aW9uIHsKLQkvKioKLQkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmFsdWUoKSA8ZW0+VmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldFZhbHVlKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBWQUxVRV9FREVGQVVMVCA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRWYWx1ZSgpIDxlbT5WYWx1ZTwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0VmFsdWUoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBTdHJpbmcgdmFsdWUgPSBWQUxVRV9FREVGQVVMVDsKLQotCS8qKgotCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRMYW5nKCkgPGVtPkxhbmc8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldExhbmcoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIExBTkdfRURFRkFVTFQgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TGFuZygpIDxlbT5MYW5nPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRMYW5nKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgU3RyaW5nIGxhbmcgPSBMQU5HX0VERUZBVUxUOwotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIERlc2NyaXB0aW9uSW1wbCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKLQkJcmV0dXJuIFJlZ2lzdHJ5UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RGVzY3JpcHRpb24oKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFZhbHVlKCkgewotCQlyZXR1cm4gdmFsdWU7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0VmFsdWUoU3RyaW5nIG5ld1ZhbHVlKSB7Ci0JCVN0cmluZyBvbGRWYWx1ZSA9IHZhbHVlOwotCQl2YWx1ZSA9IG5ld1ZhbHVlOwotCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0JCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBSZWdpc3RyeVBhY2thZ2UuREVTQ1JJUFRJT05fX1ZBTFVFLCBvbGRWYWx1ZSwgdmFsdWUpKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldExhbmcoKSB7Ci0JCXJldHVybiBsYW5nOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldExhbmcoU3RyaW5nIG5ld0xhbmcpIHsKLQkJU3RyaW5nIG9sZExhbmcgPSBsYW5nOwotCQlsYW5nID0gbmV3TGFuZzsKLQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgUmVnaXN0cnlQYWNrYWdlLkRFU0NSSVBUSU9OX19MQU5HLCBvbGRMYW5nLCBsYW5nKSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBlR2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSwgYm9vbGVhbiByZXNvbHZlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuREVTQ1JJUFRJT05fX1ZBTFVFOgotCQkJCXJldHVybiBnZXRWYWx1ZSgpOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuREVTQ1JJUFRJT05fX0xBTkc6Ci0JCQkJcmV0dXJuIGdldExhbmcoKTsKLQkJfQotCQlyZXR1cm4gZUR5bmFtaWNHZXQoZUZlYXR1cmUsIHJlc29sdmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGVTZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlLCBPYmplY3QgbmV3VmFsdWUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ERVNDUklQVElPTl9fVkFMVUU6Ci0JCQkJc2V0VmFsdWUoKFN0cmluZyluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuREVTQ1JJUFRJT05fX0xBTkc6Ci0JCQkJc2V0TGFuZygoU3RyaW5nKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCX0KLQkJZUR5bmFtaWNTZXQoZUZlYXR1cmUsIG5ld1ZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBlVW5zZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuREVTQ1JJUFRJT05fX1ZBTFVFOgotCQkJCXNldFZhbHVlKFZBTFVFX0VERUZBVUxUKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ERVNDUklQVElPTl9fTEFORzoKLQkJCQlzZXRMYW5nKExBTkdfRURFRkFVTFQpOwotCQkJCXJldHVybjsKLQkJfQotCQllRHluYW1pY1Vuc2V0KGVGZWF0dXJlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuREVTQ1JJUFRJT05fX1ZBTFVFOgotCQkJCXJldHVybiBWQUxVRV9FREVGQVVMVCA9PSBudWxsID8gdmFsdWUgIT0gbnVsbCA6ICFWQUxVRV9FREVGQVVMVC5lcXVhbHModmFsdWUpOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuREVTQ1JJUFRJT05fX0xBTkc6Ci0JCQkJcmV0dXJuIExBTkdfRURFRkFVTFQgPT0gbnVsbCA/IGxhbmcgIT0gbnVsbCA6ICFMQU5HX0VERUZBVUxULmVxdWFscyhsYW5nKTsKLQkJfQotCQlyZXR1cm4gZUR5bmFtaWNJc1NldChlRmVhdHVyZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOwotCi0JCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOwotCQlyZXN1bHQuYXBwZW5kKCIgKHZhbHVlOiAiKTsKLQkJcmVzdWx0LmFwcGVuZCh2YWx1ZSk7Ci0JCXJlc3VsdC5hcHBlbmQoIiwgbGFuZzogIik7Ci0JCXJlc3VsdC5hcHBlbmQobGFuZyk7Ci0JCXJlc3VsdC5hcHBlbmQoJyknKTsKLQkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotCX0KLQotfSAvL0Rlc2NyaXB0aW9uSW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvaW1wbC9Eb2N1bWVudFJvb3RJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS9pbXBsL0RvY3VtZW50Um9vdEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWEzMmUzOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS9pbXBsL0RvY3VtZW50Um9vdEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2NyArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IERvY3VtZW50Um9vdEltcGwuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ3IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5pbXBsOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FY29yZVBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVPYmplY3RJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVTdHJpbmdUb1N0cmluZ01hcEVudHJ5SW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkJhc2ljRmVhdHVyZU1hcDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZUVNYXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRmVhdHVyZU1hcDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5JbnRlcm5hbEVMaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5EZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRvY3VtZW50Um9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5Lk5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5UGFja2FnZTsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRvY3VtZW50IFJvb3Q8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbC5Eb2N1bWVudFJvb3RJbXBsI2dldE1peGVkIDxlbT5NaXhlZDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5pbXBsLkRvY3VtZW50Um9vdEltcGwjZ2V0WE1MTlNQcmVmaXhNYXAgPGVtPlhNTE5TIFByZWZpeCBNYXA8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbC5Eb2N1bWVudFJvb3RJbXBsI2dldFhTSVNjaGVtYUxvY2F0aW9uIDxlbT5YU0kgU2NoZW1hIExvY2F0aW9uPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmltcGwuRG9jdW1lbnRSb290SW1wbCNnZXREZXNjcmlwdGlvbiA8ZW0+RGVzY3JpcHRpb248L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbC5Eb2N1bWVudFJvb3RJbXBsI2dldE5hbWUgPGVtPk5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbC5Eb2N1bWVudFJvb3RJbXBsI2dldFJlZ2lzdHJ5IDxlbT5SZWdpc3RyeTwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIERvY3VtZW50Um9vdEltcGwgZXh0ZW5kcyBFT2JqZWN0SW1wbCBpbXBsZW1lbnRzIERvY3VtZW50Um9vdCB7Ci0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TWl4ZWQoKSA8ZW0+TWl4ZWQ8L2VtPn0nIGF0dHJpYnV0ZSBsaXN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0TWl4ZWQoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBGZWF0dXJlTWFwIG1peGVkID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFhNTE5TUHJlZml4TWFwKCkgPGVtPlhNTE5TIFByZWZpeCBNYXA8L2VtPn0nIG1hcC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldFhNTE5TUHJlZml4TWFwKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRU1hcCB4TUxOU1ByZWZpeE1hcCA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRYU0lTY2hlbWFMb2NhdGlvbigpIDxlbT5YU0kgU2NoZW1hIExvY2F0aW9uPC9lbT59JyBtYXAuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRYU0lTY2hlbWFMb2NhdGlvbigpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIEVNYXAgeFNJU2NoZW1hTG9jYXRpb24gPSBudWxsOwotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIERvY3VtZW50Um9vdEltcGwoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7Ci0JCXJldHVybiBSZWdpc3RyeVBhY2thZ2UuZUlOU1RBTkNFLmdldERvY3VtZW50Um9vdCgpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBGZWF0dXJlTWFwIGdldE1peGVkKCkgewotCQlpZiAobWl4ZWQgPT0gbnVsbCkgewotCQkJbWl4ZWQgPSBuZXcgQmFzaWNGZWF0dXJlTWFwKHRoaXMsIFJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19NSVhFRCk7Ci0JCX0KLQkJcmV0dXJuIG1peGVkOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFTWFwIGdldFhNTE5TUHJlZml4TWFwKCkgewotCQlpZiAoeE1MTlNQcmVmaXhNYXAgPT0gbnVsbCkgewotCQkJeE1MTlNQcmVmaXhNYXAgPSBuZXcgRWNvcmVFTWFwKEVjb3JlUGFja2FnZS5lSU5TVEFOQ0UuZ2V0RVN0cmluZ1RvU3RyaW5nTWFwRW50cnkoKSwgRVN0cmluZ1RvU3RyaW5nTWFwRW50cnlJbXBsLmNsYXNzLCB0aGlzLCBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWE1MTlNfUFJFRklYX01BUCk7Ci0JCX0KLQkJcmV0dXJuIHhNTE5TUHJlZml4TWFwOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFTWFwIGdldFhTSVNjaGVtYUxvY2F0aW9uKCkgewotCQlpZiAoeFNJU2NoZW1hTG9jYXRpb24gPT0gbnVsbCkgewotCQkJeFNJU2NoZW1hTG9jYXRpb24gPSBuZXcgRWNvcmVFTWFwKEVjb3JlUGFja2FnZS5lSU5TVEFOQ0UuZ2V0RVN0cmluZ1RvU3RyaW5nTWFwRW50cnkoKSwgRVN0cmluZ1RvU3RyaW5nTWFwRW50cnlJbXBsLmNsYXNzLCB0aGlzLCBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTik7Ci0JCX0KLQkJcmV0dXJuIHhTSVNjaGVtYUxvY2F0aW9uOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBEZXNjcmlwdGlvbiBnZXREZXNjcmlwdGlvbigpIHsKLQkJcmV0dXJuIChEZXNjcmlwdGlvbilnZXRNaXhlZCgpLmdldChSZWdpc3RyeVBhY2thZ2UuZUlOU1RBTkNFLmdldERvY3VtZW50Um9vdF9EZXNjcmlwdGlvbigpLCB0cnVlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gYmFzaWNTZXREZXNjcmlwdGlvbihEZXNjcmlwdGlvbiBuZXdEZXNjcmlwdGlvbiwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgewotCQlyZXR1cm4gKChGZWF0dXJlTWFwLkludGVybmFsKWdldE1peGVkKCkpLmJhc2ljQWRkKFJlZ2lzdHJ5UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RG9jdW1lbnRSb290X0Rlc2NyaXB0aW9uKCksIG5ld0Rlc2NyaXB0aW9uLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXREZXNjcmlwdGlvbihEZXNjcmlwdGlvbiBuZXdEZXNjcmlwdGlvbikgewotCQkoKEZlYXR1cmVNYXAuSW50ZXJuYWwpZ2V0TWl4ZWQoKSkuc2V0KFJlZ2lzdHJ5UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RG9jdW1lbnRSb290X0Rlc2NyaXB0aW9uKCksIG5ld0Rlc2NyaXB0aW9uKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgTmFtZSBnZXROYW1lKCkgewotCQlyZXR1cm4gKE5hbWUpZ2V0TWl4ZWQoKS5nZXQoUmVnaXN0cnlQYWNrYWdlLmVJTlNUQU5DRS5nZXREb2N1bWVudFJvb3RfTmFtZSgpLCB0cnVlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gYmFzaWNTZXROYW1lKE5hbWUgbmV3TmFtZSwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgewotCQlyZXR1cm4gKChGZWF0dXJlTWFwLkludGVybmFsKWdldE1peGVkKCkpLmJhc2ljQWRkKFJlZ2lzdHJ5UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RG9jdW1lbnRSb290X05hbWUoKSwgbmV3TmFtZSwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0TmFtZShOYW1lIG5ld05hbWUpIHsKLQkJKChGZWF0dXJlTWFwLkludGVybmFsKWdldE1peGVkKCkpLnNldChSZWdpc3RyeVBhY2thZ2UuZUlOU1RBTkNFLmdldERvY3VtZW50Um9vdF9OYW1lKCksIG5ld05hbWUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBSZWdpc3RyeSBnZXRSZWdpc3RyeSgpIHsKLQkJcmV0dXJuIChSZWdpc3RyeSlnZXRNaXhlZCgpLmdldChSZWdpc3RyeVBhY2thZ2UuZUlOU1RBTkNFLmdldERvY3VtZW50Um9vdF9SZWdpc3RyeSgpLCB0cnVlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gYmFzaWNTZXRSZWdpc3RyeShSZWdpc3RyeSBuZXdSZWdpc3RyeSwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgewotCQlyZXR1cm4gKChGZWF0dXJlTWFwLkludGVybmFsKWdldE1peGVkKCkpLmJhc2ljQWRkKFJlZ2lzdHJ5UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RG9jdW1lbnRSb290X1JlZ2lzdHJ5KCksIG5ld1JlZ2lzdHJ5LCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRSZWdpc3RyeShSZWdpc3RyeSBuZXdSZWdpc3RyeSkgewotCQkoKEZlYXR1cmVNYXAuSW50ZXJuYWwpZ2V0TWl4ZWQoKSkuc2V0KFJlZ2lzdHJ5UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RG9jdW1lbnRSb290X1JlZ2lzdHJ5KCksIG5ld1JlZ2lzdHJ5KTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gZUludmVyc2VSZW1vdmUoSW50ZXJuYWxFT2JqZWN0IG90aGVyRW5kLCBpbnQgZmVhdHVyZUlELCBDbGFzcyBiYXNlQ2xhc3MsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKLQkJaWYgKGZlYXR1cmVJRCA+PSAwKSB7Ci0JCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChmZWF0dXJlSUQsIGJhc2VDbGFzcykpIHsKLQkJCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19NSVhFRDoKLQkJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRNaXhlZCgpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0JCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWE1MTlNfUFJFRklYX01BUDoKLQkJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRYTUxOU1ByZWZpeE1hcCgpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0JCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTjoKLQkJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRYU0lTY2hlbWFMb2NhdGlvbigpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0JCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fREVTQ1JJUFRJT046Ci0JCQkJCXJldHVybiBiYXNpY1NldERlc2NyaXB0aW9uKG51bGwsIG1zZ3MpOwotCQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX05BTUU6Ci0JCQkJCXJldHVybiBiYXNpY1NldE5hbWUobnVsbCwgbXNncyk7Ci0JCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fUkVHSVNUUlk6Ci0JCQkJCXJldHVybiBiYXNpY1NldFJlZ2lzdHJ5KG51bGwsIG1zZ3MpOwotCQkJCWRlZmF1bHQ6Ci0JCQkJCXJldHVybiBlRHluYW1pY0ludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgYmFzZUNsYXNzLCBtc2dzKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZUJhc2ljU2V0Q29udGFpbmVyKG51bGwsIGZlYXR1cmVJRCwgbXNncyk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBlR2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSwgYm9vbGVhbiByZXNvbHZlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fTUlYRUQ6Ci0JCQkJcmV0dXJuIGdldE1peGVkKCk7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19YTUxOU19QUkVGSVhfTUFQOgotCQkJCXJldHVybiBnZXRYTUxOU1ByZWZpeE1hcCgpOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTjoKLQkJCQlyZXR1cm4gZ2V0WFNJU2NoZW1hTG9jYXRpb24oKTsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX0RFU0NSSVBUSU9OOgotCQkJCXJldHVybiBnZXREZXNjcmlwdGlvbigpOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fTkFNRToKLQkJCQlyZXR1cm4gZ2V0TmFtZSgpOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fUkVHSVNUUlk6Ci0JCQkJcmV0dXJuIGdldFJlZ2lzdHJ5KCk7Ci0JCX0KLQkJcmV0dXJuIGVEeW5hbWljR2V0KGVGZWF0dXJlLCByZXNvbHZlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBlU2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSwgT2JqZWN0IG5ld1ZhbHVlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fTUlYRUQ6Ci0JCQkJZ2V0TWl4ZWQoKS5jbGVhcigpOwotCQkJCWdldE1peGVkKCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19YTUxOU19QUkVGSVhfTUFQOgotCQkJCWdldFhNTE5TUHJlZml4TWFwKCkuY2xlYXIoKTsKLQkJCQlnZXRYTUxOU1ByZWZpeE1hcCgpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTjoKLQkJCQlnZXRYU0lTY2hlbWFMb2NhdGlvbigpLmNsZWFyKCk7Ci0JCQkJZ2V0WFNJU2NoZW1hTG9jYXRpb24oKS5hZGRBbGwoKENvbGxlY3Rpb24pbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX0RFU0NSSVBUSU9OOgotCQkJCXNldERlc2NyaXB0aW9uKChEZXNjcmlwdGlvbiluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fTkFNRToKLQkJCQlzZXROYW1lKChOYW1lKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19SRUdJU1RSWToKLQkJCQlzZXRSZWdpc3RyeSgoUmVnaXN0cnkpbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJfQotCQllRHluYW1pY1NldChlRmVhdHVyZSwgbmV3VmFsdWUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGVVbnNldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19NSVhFRDoKLQkJCQlnZXRNaXhlZCgpLmNsZWFyKCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWE1MTlNfUFJFRklYX01BUDoKLQkJCQlnZXRYTUxOU1ByZWZpeE1hcCgpLmNsZWFyKCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTjoKLQkJCQlnZXRYU0lTY2hlbWFMb2NhdGlvbigpLmNsZWFyKCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fREVTQ1JJUFRJT046Ci0JCQkJc2V0RGVzY3JpcHRpb24oKERlc2NyaXB0aW9uKW51bGwpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX05BTUU6Ci0JCQkJc2V0TmFtZSgoTmFtZSludWxsKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19SRUdJU1RSWToKLQkJCQlzZXRSZWdpc3RyeSgoUmVnaXN0cnkpbnVsbCk7Ci0JCQkJcmV0dXJuOwotCQl9Ci0JCWVEeW5hbWljVW5zZXQoZUZlYXR1cmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBib29sZWFuIGVJc1NldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19NSVhFRDoKLQkJCQlyZXR1cm4gbWl4ZWQgIT0gbnVsbCAmJiAhbWl4ZWQuaXNFbXB0eSgpOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWE1MTlNfUFJFRklYX01BUDoKLQkJCQlyZXR1cm4geE1MTlNQcmVmaXhNYXAgIT0gbnVsbCAmJiAheE1MTlNQcmVmaXhNYXAuaXNFbXB0eSgpOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTjoKLQkJCQlyZXR1cm4geFNJU2NoZW1hTG9jYXRpb24gIT0gbnVsbCAmJiAheFNJU2NoZW1hTG9jYXRpb24uaXNFbXB0eSgpOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fREVTQ1JJUFRJT046Ci0JCQkJcmV0dXJuIGdldERlc2NyaXB0aW9uKCkgIT0gbnVsbDsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX05BTUU6Ci0JCQkJcmV0dXJuIGdldE5hbWUoKSAhPSBudWxsOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fUkVHSVNUUlk6Ci0JCQkJcmV0dXJuIGdldFJlZ2lzdHJ5KCkgIT0gbnVsbDsKLQkJfQotCQlyZXR1cm4gZUR5bmFtaWNJc1NldChlRmVhdHVyZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOwotCi0JCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOwotCQlyZXN1bHQuYXBwZW5kKCIgKG1peGVkOiAiKTsKLQkJcmVzdWx0LmFwcGVuZChtaXhlZCk7Ci0JCXJlc3VsdC5hcHBlbmQoJyknKTsKLQkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotCX0KLQotfSAvL0RvY3VtZW50Um9vdEltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L2ltcGwvTmFtZUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L2ltcGwvTmFtZUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWNjZWY3Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS9pbXBsL05hbWVJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTYgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBOYW1lSW1wbC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDcgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FT2JqZWN0SW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5UGFja2FnZTsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbC5OYW1lSW1wbCNnZXRWYWx1ZSA8ZW0+VmFsdWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbC5OYW1lSW1wbCNnZXRMYW5nIDxlbT5MYW5nPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgTmFtZUltcGwgZXh0ZW5kcyBFT2JqZWN0SW1wbCBpbXBsZW1lbnRzIE5hbWUgewotCS8qKgotCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRWYWx1ZSgpIDxlbT5WYWx1ZTwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0VmFsdWUoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFZBTFVFX0VERUZBVUxUID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZhbHVlKCkgPGVtPlZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRWYWx1ZSgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIFN0cmluZyB2YWx1ZSA9IFZBTFVFX0VERUZBVUxUOwotCi0JLyoqCi0JICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldExhbmcoKSA8ZW0+TGFuZzwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0TGFuZygpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgTEFOR19FREVGQVVMVCA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRMYW5nKCkgPGVtPkxhbmc8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldExhbmcoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBTdHJpbmcgbGFuZyA9IExBTkdfRURFRkFVTFQ7Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgTmFtZUltcGwoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7Ci0JCXJldHVybiBSZWdpc3RyeVBhY2thZ2UuZUlOU1RBTkNFLmdldE5hbWVfKCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRWYWx1ZSgpIHsKLQkJcmV0dXJuIHZhbHVlOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldFZhbHVlKFN0cmluZyBuZXdWYWx1ZSkgewotCQlTdHJpbmcgb2xkVmFsdWUgPSB2YWx1ZTsKLQkJdmFsdWUgPSBuZXdWYWx1ZTsKLQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgUmVnaXN0cnlQYWNrYWdlLk5BTUVfX1ZBTFVFLCBvbGRWYWx1ZSwgdmFsdWUpKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldExhbmcoKSB7Ci0JCXJldHVybiBsYW5nOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldExhbmcoU3RyaW5nIG5ld0xhbmcpIHsKLQkJU3RyaW5nIG9sZExhbmcgPSBsYW5nOwotCQlsYW5nID0gbmV3TGFuZzsKLQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgUmVnaXN0cnlQYWNrYWdlLk5BTUVfX0xBTkcsIG9sZExhbmcsIGxhbmcpKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGVHZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlLCBib29sZWFuIHJlc29sdmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5OQU1FX19WQUxVRToKLQkJCQlyZXR1cm4gZ2V0VmFsdWUoKTsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLk5BTUVfX0xBTkc6Ci0JCQkJcmV0dXJuIGdldExhbmcoKTsKLQkJfQotCQlyZXR1cm4gZUR5bmFtaWNHZXQoZUZlYXR1cmUsIHJlc29sdmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGVTZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlLCBPYmplY3QgbmV3VmFsdWUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5OQU1FX19WQUxVRToKLQkJCQlzZXRWYWx1ZSgoU3RyaW5nKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5OQU1FX19MQU5HOgotCQkJCXNldExhbmcoKFN0cmluZyluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQl9Ci0JCWVEeW5hbWljU2V0KGVGZWF0dXJlLCBuZXdWYWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgZVVuc2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLk5BTUVfX1ZBTFVFOgotCQkJCXNldFZhbHVlKFZBTFVFX0VERUZBVUxUKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5OQU1FX19MQU5HOgotCQkJCXNldExhbmcoTEFOR19FREVGQVVMVCk7Ci0JCQkJcmV0dXJuOwotCQl9Ci0JCWVEeW5hbWljVW5zZXQoZUZlYXR1cmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBib29sZWFuIGVJc1NldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5OQU1FX19WQUxVRToKLQkJCQlyZXR1cm4gVkFMVUVfRURFRkFVTFQgPT0gbnVsbCA/IHZhbHVlICE9IG51bGwgOiAhVkFMVUVfRURFRkFVTFQuZXF1YWxzKHZhbHVlKTsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLk5BTUVfX0xBTkc6Ci0JCQkJcmV0dXJuIExBTkdfRURFRkFVTFQgPT0gbnVsbCA/IGxhbmcgIT0gbnVsbCA6ICFMQU5HX0VERUZBVUxULmVxdWFscyhsYW5nKTsKLQkJfQotCQlyZXR1cm4gZUR5bmFtaWNJc1NldChlRmVhdHVyZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOwotCi0JCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOwotCQlyZXN1bHQuYXBwZW5kKCIgKHZhbHVlOiAiKTsKLQkJcmVzdWx0LmFwcGVuZCh2YWx1ZSk7Ci0JCXJlc3VsdC5hcHBlbmQoIiwgbGFuZzogIik7Ci0JCXJlc3VsdC5hcHBlbmQobGFuZyk7Ci0JCXJlc3VsdC5hcHBlbmQoJyknKTsKLQkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotCX0KLQotfSAvL05hbWVJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS9pbXBsL1JlZ2lzdHJ5RmFjdG9yeUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L2ltcGwvUmVnaXN0cnlGYWN0b3J5SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzY2YyYzE2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L2ltcGwvUmVnaXN0cnlGYWN0b3J5SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogUmVnaXN0cnlGYWN0b3J5SW1wbC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDcgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRUZhY3RvcnlJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS4qOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+RmFjdG9yeTwvYj4uCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFJlZ2lzdHJ5RmFjdG9yeUltcGwgZXh0ZW5kcyBFRmFjdG9yeUltcGwgaW1wbGVtZW50cyBSZWdpc3RyeUZhY3RvcnkgewotCS8qKgotCSAqIENyZWF0ZXMgYW5kIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBSZWdpc3RyeUZhY3RvcnlJbXBsKCkgewotCQlzdXBlcigpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFT2JqZWN0IGNyZWF0ZShFQ2xhc3MgZUNsYXNzKSB7Ci0JCXN3aXRjaCAoZUNsYXNzLmdldENsYXNzaWZpZXJJRCgpKSB7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ERVNDUklQVElPTjogcmV0dXJuIGNyZWF0ZURlc2NyaXB0aW9uKCk7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UOiByZXR1cm4gY3JlYXRlRG9jdW1lbnRSb290KCk7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5OQU1FOiByZXR1cm4gY3JlYXRlTmFtZSgpOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUlk6IHJldHVybiBjcmVhdGVSZWdpc3RyeSgpOwotCQkJZGVmYXVsdDoKLQkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgY2xhc3MgJyIgKyBlQ2xhc3MuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIERlc2NyaXB0aW9uIGNyZWF0ZURlc2NyaXB0aW9uKCkgewotCQlEZXNjcmlwdGlvbkltcGwgZGVzY3JpcHRpb24gPSBuZXcgRGVzY3JpcHRpb25JbXBsKCk7Ci0JCXJldHVybiBkZXNjcmlwdGlvbjsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRG9jdW1lbnRSb290IGNyZWF0ZURvY3VtZW50Um9vdCgpIHsKLQkJRG9jdW1lbnRSb290SW1wbCBkb2N1bWVudFJvb3QgPSBuZXcgRG9jdW1lbnRSb290SW1wbCgpOwotCQlyZXR1cm4gZG9jdW1lbnRSb290OwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBOYW1lIGNyZWF0ZU5hbWUoKSB7Ci0JCU5hbWVJbXBsIG5hbWUgPSBuZXcgTmFtZUltcGwoKTsKLQkJcmV0dXJuIG5hbWU7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFJlZ2lzdHJ5IGNyZWF0ZVJlZ2lzdHJ5KCkgewotCQlSZWdpc3RyeUltcGwgcmVnaXN0cnkgPSBuZXcgUmVnaXN0cnlJbXBsKCk7Ci0JCXJldHVybiByZWdpc3RyeTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgUmVnaXN0cnlQYWNrYWdlIGdldFJlZ2lzdHJ5UGFja2FnZSgpIHsKLQkJcmV0dXJuIChSZWdpc3RyeVBhY2thZ2UpZ2V0RVBhY2thZ2UoKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBkZXByZWNhdGVkCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVnaXN0cnlQYWNrYWdlIGdldFBhY2thZ2UoKSB7Ci0JCXJldHVybiBSZWdpc3RyeVBhY2thZ2UuZUlOU1RBTkNFOwotCX0KLQotfSAvL1JlZ2lzdHJ5RmFjdG9yeUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L2ltcGwvUmVnaXN0cnlJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS9pbXBsL1JlZ2lzdHJ5SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTcxZTdmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L2ltcGwvUmVnaXN0cnlJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNjggKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBSZWdpc3RyeUltcGwuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ3IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5pbXBsOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uQ2hhaW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVPYmplY3RJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRU9iamVjdENvbnRhaW5tZW50RUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuSW50ZXJuYWxFTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5OYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeVBhY2thZ2U7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5SZWdpc3RyeTwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5pbXBsLlJlZ2lzdHJ5SW1wbCNnZXROYW1lIDxlbT5OYW1lPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmltcGwuUmVnaXN0cnlJbXBsI2dldERlc2NyaXB0aW9uIDxlbT5EZXNjcmlwdGlvbjwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5pbXBsLlJlZ2lzdHJ5SW1wbCNnZXRJZCA8ZW0+SWQ8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbC5SZWdpc3RyeUltcGwjZ2V0TG9jYXRpb24gPGVtPkxvY2F0aW9uPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmltcGwuUmVnaXN0cnlJbXBsI2dldFJlZiA8ZW0+UmVmPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgUmVnaXN0cnlJbXBsIGV4dGVuZHMgRU9iamVjdEltcGwgaW1wbGVtZW50cyBSZWdpc3RyeSB7Ci0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmFtZSgpIDxlbT5OYW1lPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldE5hbWUoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBFTGlzdCBuYW1lID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERlc2NyaXB0aW9uKCkgPGVtPkRlc2NyaXB0aW9uPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldERlc2NyaXB0aW9uKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRUxpc3QgZGVzY3JpcHRpb24gPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldElkKCkgPGVtPklkPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRJZCgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURfRURFRkFVTFQgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SWQoKSA8ZW0+SWQ8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldElkKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgU3RyaW5nIGlkID0gSURfRURFRkFVTFQ7Ci0KLQkvKioKLQkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TG9jYXRpb24oKSA8ZW0+TG9jYXRpb248L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldExvY2F0aW9uKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBMT0NBVElPTl9FREVGQVVMVCA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRMb2NhdGlvbigpIDxlbT5Mb2NhdGlvbjwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0TG9jYXRpb24oKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBTdHJpbmcgbG9jYXRpb24gPSBMT0NBVElPTl9FREVGQVVMVDsKLQotCS8qKgotCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSZWYoKSA8ZW0+UmVmPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRSZWYoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFJFRl9FREVGQVVMVCA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSZWYoKSA8ZW0+UmVmPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRSZWYoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBTdHJpbmcgcmVmID0gUkVGX0VERUZBVUxUOwotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIFJlZ2lzdHJ5SW1wbCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKLQkJcmV0dXJuIFJlZ2lzdHJ5UGFja2FnZS5lSU5TVEFOQ0UuZ2V0UmVnaXN0cnkoKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUxpc3QgZ2V0TmFtZSgpIHsKLQkJaWYgKG5hbWUgPT0gbnVsbCkgewotCQkJbmFtZSA9IG5ldyBFT2JqZWN0Q29udGFpbm1lbnRFTGlzdChOYW1lLmNsYXNzLCB0aGlzLCBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfX05BTUUpOwotCQl9Ci0JCXJldHVybiBuYW1lOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFTGlzdCBnZXREZXNjcmlwdGlvbigpIHsKLQkJaWYgKGRlc2NyaXB0aW9uID09IG51bGwpIHsKLQkJCWRlc2NyaXB0aW9uID0gbmV3IEVPYmplY3RDb250YWlubWVudEVMaXN0KERlc2NyaXB0aW9uLmNsYXNzLCB0aGlzLCBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfX0RFU0NSSVBUSU9OKTsKLQkJfQotCQlyZXR1cm4gZGVzY3JpcHRpb247Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRJZCgpIHsKLQkJcmV0dXJuIGlkOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldElkKFN0cmluZyBuZXdJZCkgewotCQlTdHJpbmcgb2xkSWQgPSBpZDsKLQkJaWQgPSBuZXdJZDsKLQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX19JRCwgb2xkSWQsIGlkKSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRMb2NhdGlvbigpIHsKLQkJcmV0dXJuIGxvY2F0aW9uOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldExvY2F0aW9uKFN0cmluZyBuZXdMb2NhdGlvbikgewotCQlTdHJpbmcgb2xkTG9jYXRpb24gPSBsb2NhdGlvbjsKLQkJbG9jYXRpb24gPSBuZXdMb2NhdGlvbjsKLQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX19MT0NBVElPTiwgb2xkTG9jYXRpb24sIGxvY2F0aW9uKSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRSZWYoKSB7Ci0JCXJldHVybiByZWY7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0UmVmKFN0cmluZyBuZXdSZWYpIHsKLQkJU3RyaW5nIG9sZFJlZiA9IHJlZjsKLQkJcmVmID0gbmV3UmVmOwotCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0JCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfX1JFRiwgb2xkUmVmLCByZWYpKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gZUludmVyc2VSZW1vdmUoSW50ZXJuYWxFT2JqZWN0IG90aGVyRW5kLCBpbnQgZmVhdHVyZUlELCBDbGFzcyBiYXNlQ2xhc3MsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKLQkJaWYgKGZlYXR1cmVJRCA+PSAwKSB7Ci0JCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChmZWF0dXJlSUQsIGJhc2VDbGFzcykpIHsKLQkJCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5SRUdJU1RSWV9fTkFNRToKLQkJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXROYW1lKCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKLQkJCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5SRUdJU1RSWV9fREVTQ1JJUFRJT046Ci0JCQkJCXJldHVybiAoKEludGVybmFsRUxpc3QpZ2V0RGVzY3JpcHRpb24oKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOwotCQkJCWRlZmF1bHQ6Ci0JCQkJCXJldHVybiBlRHluYW1pY0ludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgYmFzZUNsYXNzLCBtc2dzKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZUJhc2ljU2V0Q29udGFpbmVyKG51bGwsIGZlYXR1cmVJRCwgbXNncyk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBlR2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSwgYm9vbGVhbiByZXNvbHZlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfX05BTUU6Ci0JCQkJcmV0dXJuIGdldE5hbWUoKTsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX19ERVNDUklQVElPTjoKLQkJCQlyZXR1cm4gZ2V0RGVzY3JpcHRpb24oKTsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX19JRDoKLQkJCQlyZXR1cm4gZ2V0SWQoKTsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX19MT0NBVElPTjoKLQkJCQlyZXR1cm4gZ2V0TG9jYXRpb24oKTsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX19SRUY6Ci0JCQkJcmV0dXJuIGdldFJlZigpOwotCQl9Ci0JCXJldHVybiBlRHluYW1pY0dldChlRmVhdHVyZSwgcmVzb2x2ZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgZVNldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUsIE9iamVjdCBuZXdWYWx1ZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX19OQU1FOgotCQkJCWdldE5hbWUoKS5jbGVhcigpOwotCQkJCWdldE5hbWUoKS5hZGRBbGwoKENvbGxlY3Rpb24pbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX19ERVNDUklQVElPTjoKLQkJCQlnZXREZXNjcmlwdGlvbigpLmNsZWFyKCk7Ci0JCQkJZ2V0RGVzY3JpcHRpb24oKS5hZGRBbGwoKENvbGxlY3Rpb24pbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX19JRDoKLQkJCQlzZXRJZCgoU3RyaW5nKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5SRUdJU1RSWV9fTE9DQVRJT046Ci0JCQkJc2V0TG9jYXRpb24oKFN0cmluZyluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfX1JFRjoKLQkJCQlzZXRSZWYoKFN0cmluZyluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQl9Ci0JCWVEeW5hbWljU2V0KGVGZWF0dXJlLCBuZXdWYWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgZVVuc2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX19OQU1FOgotCQkJCWdldE5hbWUoKS5jbGVhcigpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX19ERVNDUklQVElPTjoKLQkJCQlnZXREZXNjcmlwdGlvbigpLmNsZWFyKCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfX0lEOgotCQkJCXNldElkKElEX0VERUZBVUxUKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5SRUdJU1RSWV9fTE9DQVRJT046Ci0JCQkJc2V0TG9jYXRpb24oTE9DQVRJT05fRURFRkFVTFQpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX19SRUY6Ci0JCQkJc2V0UmVmKFJFRl9FREVGQVVMVCk7Ci0JCQkJcmV0dXJuOwotCQl9Ci0JCWVEeW5hbWljVW5zZXQoZUZlYXR1cmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBib29sZWFuIGVJc1NldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5SRUdJU1RSWV9fTkFNRToKLQkJCQlyZXR1cm4gbmFtZSAhPSBudWxsICYmICFuYW1lLmlzRW1wdHkoKTsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX19ERVNDUklQVElPTjoKLQkJCQlyZXR1cm4gZGVzY3JpcHRpb24gIT0gbnVsbCAmJiAhZGVzY3JpcHRpb24uaXNFbXB0eSgpOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfX0lEOgotCQkJCXJldHVybiBJRF9FREVGQVVMVCA9PSBudWxsID8gaWQgIT0gbnVsbCA6ICFJRF9FREVGQVVMVC5lcXVhbHMoaWQpOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfX0xPQ0FUSU9OOgotCQkJCXJldHVybiBMT0NBVElPTl9FREVGQVVMVCA9PSBudWxsID8gbG9jYXRpb24gIT0gbnVsbCA6ICFMT0NBVElPTl9FREVGQVVMVC5lcXVhbHMobG9jYXRpb24pOwotCQkJY2FzZSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfX1JFRjoKLQkJCQlyZXR1cm4gUkVGX0VERUZBVUxUID09IG51bGwgPyByZWYgIT0gbnVsbCA6ICFSRUZfRURFRkFVTFQuZXF1YWxzKHJlZik7Ci0JCX0KLQkJcmV0dXJuIGVEeW5hbWljSXNTZXQoZUZlYXR1cmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKLQotCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKLQkJcmVzdWx0LmFwcGVuZCgiIChpZDogIik7Ci0JCXJlc3VsdC5hcHBlbmQoaWQpOwotCQlyZXN1bHQuYXBwZW5kKCIsIGxvY2F0aW9uOiAiKTsKLQkJcmVzdWx0LmFwcGVuZChsb2NhdGlvbik7Ci0JCXJlc3VsdC5hcHBlbmQoIiwgcmVmOiAiKTsKLQkJcmVzdWx0LmFwcGVuZChyZWYpOwotCQlyZXN1bHQuYXBwZW5kKCcpJyk7Ci0JCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLQl9Ci0KLX0gLy9SZWdpc3RyeUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L2ltcGwvUmVnaXN0cnlQYWNrYWdlSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvaW1wbC9SZWdpc3RyeVBhY2thZ2VJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzZjliZWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvaW1wbC9SZWdpc3RyeVBhY2thZ2VJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1ODYgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBSZWdpc3RyeVBhY2thZ2VJbXBsLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0NyBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRVBhY2thZ2VJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLlhNTFR5cGVQYWNrYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLmltcGwuWE1MVHlwZVBhY2thZ2VJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5EZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRvY3VtZW50Um9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5Lk5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeVBhY2thZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguUlRJbmRleFBhY2thZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguaW1wbC5SVEluZGV4UGFja2FnZUltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215UGFja2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbC5UYXhvbm9teVBhY2thZ2VJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5UGFja2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmltcGwuVURESVJlZ2lzdHJ5UGFja2FnZUltcGw7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPi4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgUmVnaXN0cnlQYWNrYWdlSW1wbCBleHRlbmRzIEVQYWNrYWdlSW1wbCBpbXBsZW1lbnRzIFJlZ2lzdHJ5UGFja2FnZSB7Ci0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJpdmF0ZSBFQ2xhc3MgZGVzY3JpcHRpb25FQ2xhc3MgPSBudWxsOwotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJpdmF0ZSBFQ2xhc3MgZG9jdW1lbnRSb290RUNsYXNzID0gbnVsbDsKLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByaXZhdGUgRUNsYXNzIG5hbWVFQ2xhc3MgPSBudWxsOwotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJpdmF0ZSBFQ2xhc3MgcmVnaXN0cnlFQ2xhc3MgPSBudWxsOwotCi0JLyoqCi0JICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4sIHJlZ2lzdGVyZWQgd2l0aAotCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkgRVBhY2thZ2UuUmVnaXN0cnl9IGJ5IHRoZSBwYWNrYWdlCi0JICogcGFja2FnZSBVUkkgdmFsdWUuCi0JICogPHA+Tm90ZTogdGhlIGNvcnJlY3Qgd2F5IHRvIGNyZWF0ZSB0aGUgcGFja2FnZSBpcyB2aWEgdGhlIHN0YXRpYwotCSAqIGZhY3RvcnkgbWV0aG9kIHtAbGluayAjaW5pdCBpbml0KCl9LCB3aGljaCBhbHNvIHBlcmZvcm1zCi0JICogaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UsIG9yIHJldHVybnMgdGhlIHJlZ2lzdGVyZWQgcGFja2FnZSwKLQkgKiBpZiBvbmUgYWxyZWFkeSBleGlzdHMuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeVBhY2thZ2UjZU5TX1VSSQotCSAqIEBzZWUgI2luaXQoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcml2YXRlIFJlZ2lzdHJ5UGFja2FnZUltcGwoKSB7Ci0JCXN1cGVyKGVOU19VUkksIFJlZ2lzdHJ5RmFjdG9yeS5lSU5TVEFOQ0UpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNJbml0ZWQgPSBmYWxzZTsKLQotCS8qKgotCSAqIENyZWF0ZXMsIHJlZ2lzdGVycywgYW5kIGluaXRpYWxpemVzIHRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhpcwotCSAqIG1vZGVsLCBhbmQgZm9yIGFueSBvdGhlcnMgdXBvbiB3aGljaCBpdCBkZXBlbmRzLiAgU2ltcGxlCi0JICogZGVwZW5kZW5jaWVzIGFyZSBzYXRpc2ZpZWQgYnkgY2FsbGluZyB0aGlzIG1ldGhvZCBvbiBhbGwKLQkgKiBkZXBlbmRlbnQgcGFja2FnZXMgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UuICBUaGlzIG1ldGhvZCBkcml2ZXMKLQkgKiBpbml0aWFsaXphdGlvbiBmb3IgaW50ZXJkZXBlbmRlbnQgcGFja2FnZXMgZGlyZWN0bHksIGluIHBhcmFsbGVsCi0JICogd2l0aCB0aGlzIHBhY2thZ2UsIGl0c2VsZi4KLQkgKiA8cD5PZiB0aGlzIHBhY2thZ2UgYW5kIGl0cyBpbnRlcmRlcGVuZGVuY2llcywgYWxsIHBhY2thZ2VzIHdoaWNoCi0JICogaGF2ZSBub3QgeWV0IGJlZW4gcmVnaXN0ZXJlZCBieSB0aGVpciBVUkkgdmFsdWVzIGFyZSBmaXJzdCBjcmVhdGVkCi0JICogYW5kIHJlZ2lzdGVyZWQuICBUaGUgcGFja2FnZXMgYXJlIHRoZW4gaW5pdGlhbGl6ZWQgaW4gdHdvIHN0ZXBzOgotCSAqIG1ldGEtbW9kZWwgb2JqZWN0cyBmb3IgYWxsIG9mIHRoZSBwYWNrYWdlcyBhcmUgY3JlYXRlZCBiZWZvcmUgYW55Ci0JICogYXJlIGluaXRpYWxpemVkLCBzaW5jZSBvbmUgcGFja2FnZSdzIG1ldGEtbW9kZWwgb2JqZWN0cyBtYXkgcmVmZXIgdG8KLQkgKiB0aG9zZSBvZiBhbm90aGVyLgotCSAqIDxwPkludm9jYXRpb24gb2YgdGhpcyBtZXRob2Qgd2lsbCBub3QgYWZmZWN0IGFueSBwYWNrYWdlcyB0aGF0IGhhdmUKLQkgKiBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNlTlNfVVJJCi0JICogQHNlZSAjY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkKLQkgKiBAc2VlICNpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHN0YXRpYyBSZWdpc3RyeVBhY2thZ2UgaW5pdCgpIHsKLQkJaWYgKGlzSW5pdGVkKSByZXR1cm4gKFJlZ2lzdHJ5UGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShSZWdpc3RyeVBhY2thZ2UuZU5TX1VSSSk7Ci0KLQkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgcGFja2FnZQotCQlSZWdpc3RyeVBhY2thZ2VJbXBsIHRoZVJlZ2lzdHJ5UGFja2FnZSA9IChSZWdpc3RyeVBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShlTlNfVVJJKSBpbnN0YW5jZW9mIFJlZ2lzdHJ5UGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShlTlNfVVJJKSA6IG5ldyBSZWdpc3RyeVBhY2thZ2VJbXBsKCkpOwotCi0JCWlzSW5pdGVkID0gdHJ1ZTsKLQotCQkvLyBJbml0aWFsaXplIHNpbXBsZSBkZXBlbmRlbmNpZXMKLQkJWE1MVHlwZVBhY2thZ2VJbXBsLmluaXQoKTsKLQotCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBpbnRlcmRlcGVuZGVuY2llcwotCQlSVEluZGV4UGFja2FnZUltcGwgdGhlUlRJbmRleFBhY2thZ2UgPSAoUlRJbmRleFBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShSVEluZGV4UGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFJUSW5kZXhQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFJUSW5kZXhQYWNrYWdlLmVOU19VUkkpIDogUlRJbmRleFBhY2thZ2VJbXBsLmVJTlNUQU5DRSk7Ci0JCVRheG9ub215UGFja2FnZUltcGwgdGhlVGF4b25vbXlQYWNrYWdlID0gKFRheG9ub215UGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFRheG9ub215UGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFRheG9ub215UGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShUYXhvbm9teVBhY2thZ2UuZU5TX1VSSSkgOiBUYXhvbm9teVBhY2thZ2VJbXBsLmVJTlNUQU5DRSk7Ci0JCVVERElSZWdpc3RyeVBhY2thZ2VJbXBsIHRoZVVERElSZWdpc3RyeVBhY2thZ2UgPSAoVURESVJlZ2lzdHJ5UGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFVERElSZWdpc3RyeVBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBVRERJUmVnaXN0cnlQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFVERElSZWdpc3RyeVBhY2thZ2UuZU5TX1VSSSkgOiBVRERJUmVnaXN0cnlQYWNrYWdlSW1wbC5lSU5TVEFOQ0UpOwotCi0JCS8vIENyZWF0ZSBwYWNrYWdlIG1ldGEtZGF0YSBvYmplY3RzCi0JCXRoZVJlZ2lzdHJ5UGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKLQkJdGhlUlRJbmRleFBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7Ci0JCXRoZVRheG9ub215UGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKLQkJdGhlVURESVJlZ2lzdHJ5UGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKLQotCQkvLyBJbml0aWFsaXplIGNyZWF0ZWQgbWV0YS1kYXRhCi0JCXRoZVJlZ2lzdHJ5UGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7Ci0JCXRoZVJUSW5kZXhQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKLQkJdGhlVGF4b25vbXlQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKLQkJdGhlVURESVJlZ2lzdHJ5UGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7Ci0KLQkJLy8gTWFyayBtZXRhLWRhdGEgdG8gaW5kaWNhdGUgaXQgY2FuJ3QgYmUgY2hhbmdlZAotCQl0aGVSZWdpc3RyeVBhY2thZ2UuZnJlZXplKCk7Ci0KLQkJcmV0dXJuIHRoZVJlZ2lzdHJ5UGFja2FnZTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUNsYXNzIGdldERlc2NyaXB0aW9uKCkgewotCQlyZXR1cm4gZGVzY3JpcHRpb25FQ2xhc3M7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVzY3JpcHRpb25fVmFsdWUoKSB7Ci0JCXJldHVybiAoRUF0dHJpYnV0ZSlkZXNjcmlwdGlvbkVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQXR0cmlidXRlIGdldERlc2NyaXB0aW9uX0xhbmcoKSB7Ci0JCXJldHVybiAoRUF0dHJpYnV0ZSlkZXNjcmlwdGlvbkVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQ2xhc3MgZ2V0RG9jdW1lbnRSb290KCkgewotCQlyZXR1cm4gZG9jdW1lbnRSb290RUNsYXNzOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQXR0cmlidXRlIGdldERvY3VtZW50Um9vdF9NaXhlZCgpIHsKLQkJcmV0dXJuIChFQXR0cmlidXRlKWRvY3VtZW50Um9vdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9YTUxOU1ByZWZpeE1hcCgpIHsKLQkJcmV0dXJuIChFUmVmZXJlbmNlKWRvY3VtZW50Um9vdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9YU0lTY2hlbWFMb2NhdGlvbigpIHsKLQkJcmV0dXJuIChFUmVmZXJlbmNlKWRvY3VtZW50Um9vdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9EZXNjcmlwdGlvbigpIHsKLQkJcmV0dXJuIChFUmVmZXJlbmNlKWRvY3VtZW50Um9vdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9OYW1lKCkgewotCQlyZXR1cm4gKEVSZWZlcmVuY2UpZG9jdW1lbnRSb290RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVSZWZlcmVuY2UgZ2V0RG9jdW1lbnRSb290X1JlZ2lzdHJ5KCkgewotCQlyZXR1cm4gKEVSZWZlcmVuY2UpZG9jdW1lbnRSb290RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVDbGFzcyBnZXROYW1lXygpIHsKLQkJcmV0dXJuIG5hbWVFQ2xhc3M7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVBdHRyaWJ1dGUgZ2V0TmFtZV9WYWx1ZSgpIHsKLQkJcmV0dXJuIChFQXR0cmlidXRlKW5hbWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUF0dHJpYnV0ZSBnZXROYW1lX0xhbmcoKSB7Ci0JCXJldHVybiAoRUF0dHJpYnV0ZSluYW1lRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVDbGFzcyBnZXRSZWdpc3RyeSgpIHsKLQkJcmV0dXJuIHJlZ2lzdHJ5RUNsYXNzOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFUmVmZXJlbmNlIGdldFJlZ2lzdHJ5X05hbWUoKSB7Ci0JCXJldHVybiAoRVJlZmVyZW5jZSlyZWdpc3RyeUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFUmVmZXJlbmNlIGdldFJlZ2lzdHJ5X0Rlc2NyaXB0aW9uKCkgewotCQlyZXR1cm4gKEVSZWZlcmVuY2UpcmVnaXN0cnlFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRSZWdpc3RyeV9JZCgpIHsKLQkJcmV0dXJuIChFQXR0cmlidXRlKXJlZ2lzdHJ5RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVBdHRyaWJ1dGUgZ2V0UmVnaXN0cnlfTG9jYXRpb24oKSB7Ci0JCXJldHVybiAoRUF0dHJpYnV0ZSlyZWdpc3RyeUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQXR0cmlidXRlIGdldFJlZ2lzdHJ5X1JlZigpIHsKLQkJcmV0dXJuIChFQXR0cmlidXRlKXJlZ2lzdHJ5RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFJlZ2lzdHJ5RmFjdG9yeSBnZXRSZWdpc3RyeUZhY3RvcnkoKSB7Ci0JCXJldHVybiAoUmVnaXN0cnlGYWN0b3J5KWdldEVGYWN0b3J5SW5zdGFuY2UoKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcml2YXRlIGJvb2xlYW4gaXNDcmVhdGVkID0gZmFsc2U7Ci0KLQkvKioKLQkgKiBDcmVhdGVzIHRoZSBtZXRhLW1vZGVsIG9iamVjdHMgZm9yIHRoZSBwYWNrYWdlLiAgVGhpcyBtZXRob2QgaXMKLQkgKiBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkgewotCQlpZiAoaXNDcmVhdGVkKSByZXR1cm47Ci0JCWlzQ3JlYXRlZCA9IHRydWU7Ci0KLQkJLy8gQ3JlYXRlIGNsYXNzZXMgYW5kIHRoZWlyIGZlYXR1cmVzCi0JCWRlc2NyaXB0aW9uRUNsYXNzID0gY3JlYXRlRUNsYXNzKERFU0NSSVBUSU9OKTsKLQkJY3JlYXRlRUF0dHJpYnV0ZShkZXNjcmlwdGlvbkVDbGFzcywgREVTQ1JJUFRJT05fX1ZBTFVFKTsKLQkJY3JlYXRlRUF0dHJpYnV0ZShkZXNjcmlwdGlvbkVDbGFzcywgREVTQ1JJUFRJT05fX0xBTkcpOwotCi0JCWRvY3VtZW50Um9vdEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhET0NVTUVOVF9ST09UKTsKLQkJY3JlYXRlRUF0dHJpYnV0ZShkb2N1bWVudFJvb3RFQ2xhc3MsIERPQ1VNRU5UX1JPT1RfX01JWEVEKTsKLQkJY3JlYXRlRVJlZmVyZW5jZShkb2N1bWVudFJvb3RFQ2xhc3MsIERPQ1VNRU5UX1JPT1RfX1hNTE5TX1BSRUZJWF9NQVApOwotCQljcmVhdGVFUmVmZXJlbmNlKGRvY3VtZW50Um9vdEVDbGFzcywgRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTik7Ci0JCWNyZWF0ZUVSZWZlcmVuY2UoZG9jdW1lbnRSb290RUNsYXNzLCBET0NVTUVOVF9ST09UX19ERVNDUklQVElPTik7Ci0JCWNyZWF0ZUVSZWZlcmVuY2UoZG9jdW1lbnRSb290RUNsYXNzLCBET0NVTUVOVF9ST09UX19OQU1FKTsKLQkJY3JlYXRlRVJlZmVyZW5jZShkb2N1bWVudFJvb3RFQ2xhc3MsIERPQ1VNRU5UX1JPT1RfX1JFR0lTVFJZKTsKLQotCQluYW1lRUNsYXNzID0gY3JlYXRlRUNsYXNzKE5BTUUpOwotCQljcmVhdGVFQXR0cmlidXRlKG5hbWVFQ2xhc3MsIE5BTUVfX1ZBTFVFKTsKLQkJY3JlYXRlRUF0dHJpYnV0ZShuYW1lRUNsYXNzLCBOQU1FX19MQU5HKTsKLQotCQlyZWdpc3RyeUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhSRUdJU1RSWSk7Ci0JCWNyZWF0ZUVSZWZlcmVuY2UocmVnaXN0cnlFQ2xhc3MsIFJFR0lTVFJZX19OQU1FKTsKLQkJY3JlYXRlRVJlZmVyZW5jZShyZWdpc3RyeUVDbGFzcywgUkVHSVNUUllfX0RFU0NSSVBUSU9OKTsKLQkJY3JlYXRlRUF0dHJpYnV0ZShyZWdpc3RyeUVDbGFzcywgUkVHSVNUUllfX0lEKTsKLQkJY3JlYXRlRUF0dHJpYnV0ZShyZWdpc3RyeUVDbGFzcywgUkVHSVNUUllfX0xPQ0FUSU9OKTsKLQkJY3JlYXRlRUF0dHJpYnV0ZShyZWdpc3RyeUVDbGFzcywgUkVHSVNUUllfX1JFRik7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJpdmF0ZSBib29sZWFuIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQotCS8qKgotCSAqIENvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSBhbmQgaXRzIG1ldGEtbW9kZWwuICBUaGlzCi0JICogbWV0aG9kIGlzIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkgewotCQlpZiAoaXNJbml0aWFsaXplZCkgcmV0dXJuOwotCQlpc0luaXRpYWxpemVkID0gdHJ1ZTsKLQotCQkvLyBJbml0aWFsaXplIHBhY2thZ2UKLQkJc2V0TmFtZShlTkFNRSk7Ci0JCXNldE5zUHJlZml4KGVOU19QUkVGSVgpOwotCQlzZXROc1VSSShlTlNfVVJJKTsKLQotCQkvLyBPYnRhaW4gb3RoZXIgZGVwZW5kZW50IHBhY2thZ2VzCi0JCVhNTFR5cGVQYWNrYWdlSW1wbCB0aGVYTUxUeXBlUGFja2FnZSA9IChYTUxUeXBlUGFja2FnZUltcGwpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoWE1MVHlwZVBhY2thZ2UuZU5TX1VSSSk7Ci0KLQkJLy8gQWRkIHN1cGVydHlwZXMgdG8gY2xhc3NlcwotCi0JCS8vIEluaXRpYWxpemUgY2xhc3NlcyBhbmQgZmVhdHVyZXM7IGFkZCBvcGVyYXRpb25zIGFuZCBwYXJhbWV0ZXJzCi0JCWluaXRFQ2xhc3MoZGVzY3JpcHRpb25FQ2xhc3MsIERlc2NyaXB0aW9uLmNsYXNzLCAiRGVzY3JpcHRpb24iLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7Ci0JCWluaXRFQXR0cmlidXRlKGdldERlc2NyaXB0aW9uX1ZhbHVlKCksIHRoZVhNTFR5cGVQYWNrYWdlLmdldFN0cmluZygpLCAidmFsdWUiLCBudWxsLCAwLCAxLCBEZXNjcmlwdGlvbi5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFQXR0cmlidXRlKGdldERlc2NyaXB0aW9uX0xhbmcoKSwgdGhlWE1MVHlwZVBhY2thZ2UuZ2V0TGFuZ3VhZ2UoKSwgImxhbmciLCBudWxsLCAwLCAxLCBEZXNjcmlwdGlvbi5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0KLQkJaW5pdEVDbGFzcyhkb2N1bWVudFJvb3RFQ2xhc3MsIERvY3VtZW50Um9vdC5jbGFzcywgIkRvY3VtZW50Um9vdCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKLQkJaW5pdEVBdHRyaWJ1dGUoZ2V0RG9jdW1lbnRSb290X01peGVkKCksIGVjb3JlUGFja2FnZS5nZXRFRmVhdHVyZU1hcEVudHJ5KCksICJtaXhlZCIsIG51bGwsIDAsIC0xLCBudWxsLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVSZWZlcmVuY2UoZ2V0RG9jdW1lbnRSb290X1hNTE5TUHJlZml4TWFwKCksIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nVG9TdHJpbmdNYXBFbnRyeSgpLCBudWxsLCAieE1MTlNQcmVmaXhNYXAiLCBudWxsLCAwLCAtMSwgbnVsbCwgSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVSZWZlcmVuY2UoZ2V0RG9jdW1lbnRSb290X1hTSVNjaGVtYUxvY2F0aW9uKCksIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nVG9TdHJpbmdNYXBFbnRyeSgpLCBudWxsLCAieFNJU2NoZW1hTG9jYXRpb24iLCBudWxsLCAwLCAtMSwgbnVsbCwgSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVSZWZlcmVuY2UoZ2V0RG9jdW1lbnRSb290X0Rlc2NyaXB0aW9uKCksIHRoaXMuZ2V0RGVzY3JpcHRpb24oKSwgbnVsbCwgImRlc2NyaXB0aW9uIiwgbnVsbCwgMCwgLTIsIG51bGwsIElTX1RSQU5TSUVOVCwgSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFUmVmZXJlbmNlKGdldERvY3VtZW50Um9vdF9OYW1lKCksIHRoaXMuZ2V0TmFtZV8oKSwgbnVsbCwgIm5hbWUiLCBudWxsLCAwLCAtMiwgbnVsbCwgSVNfVFJBTlNJRU5ULCBJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCBJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVSZWZlcmVuY2UoZ2V0RG9jdW1lbnRSb290X1JlZ2lzdHJ5KCksIHRoaXMuZ2V0UmVnaXN0cnkoKSwgbnVsbCwgInJlZ2lzdHJ5IiwgbnVsbCwgMCwgLTIsIG51bGwsIElTX1RSQU5TSUVOVCwgSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0KLQkJaW5pdEVDbGFzcyhuYW1lRUNsYXNzLCBOYW1lLmNsYXNzLCAiTmFtZSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKLQkJaW5pdEVBdHRyaWJ1dGUoZ2V0TmFtZV9WYWx1ZSgpLCB0aGVYTUxUeXBlUGFja2FnZS5nZXRTdHJpbmcoKSwgInZhbHVlIiwgbnVsbCwgMCwgMSwgTmFtZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFQXR0cmlidXRlKGdldE5hbWVfTGFuZygpLCB0aGVYTUxUeXBlUGFja2FnZS5nZXRMYW5ndWFnZSgpLCAibGFuZyIsIG51bGwsIDAsIDEsIE5hbWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCi0JCWluaXRFQ2xhc3MocmVnaXN0cnlFQ2xhc3MsIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnkuY2xhc3MsICJSZWdpc3RyeSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKLQkJaW5pdEVSZWZlcmVuY2UoZ2V0UmVnaXN0cnlfTmFtZSgpLCB0aGlzLmdldE5hbWVfKCksIG51bGwsICJuYW1lIiwgbnVsbCwgMSwgLTEsIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnkuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFUmVmZXJlbmNlKGdldFJlZ2lzdHJ5X0Rlc2NyaXB0aW9uKCksIHRoaXMuZ2V0RGVzY3JpcHRpb24oKSwgbnVsbCwgImRlc2NyaXB0aW9uIiwgbnVsbCwgMSwgLTEsIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnkuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFQXR0cmlidXRlKGdldFJlZ2lzdHJ5X0lkKCksIHRoZVhNTFR5cGVQYWNrYWdlLmdldEFueVVSSSgpLCAiaWQiLCBudWxsLCAwLCAxLCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVBdHRyaWJ1dGUoZ2V0UmVnaXN0cnlfTG9jYXRpb24oKSwgdGhlWE1MVHlwZVBhY2thZ2UuZ2V0QW55VVJJKCksICJsb2NhdGlvbiIsIG51bGwsIDAsIDEsIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnkuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RUF0dHJpYnV0ZShnZXRSZWdpc3RyeV9SZWYoKSwgdGhlWE1MVHlwZVBhY2thZ2UuZ2V0QW55VVJJKCksICJyZWYiLCBudWxsLCAwLCAxLCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQotCQkvLyBDcmVhdGUgcmVzb3VyY2UKLQkJY3JlYXRlUmVzb3VyY2UoZU5TX1VSSSk7Ci0KLQkJLy8gQ3JlYXRlIGFubm90YXRpb25zCi0JCS8vIGh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YQotCQljcmVhdGVFeHRlbmRlZE1ldGFEYXRhQW5ub3RhdGlvbnMoKTsKLQl9Ci0KLQkvKioKLQkgKiBJbml0aWFsaXplcyB0aGUgYW5ub3RhdGlvbnMgZm9yIDxiPmh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YTwvYj4uCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgY3JlYXRlRXh0ZW5kZWRNZXRhRGF0YUFubm90YXRpb25zKCkgewotCQlTdHJpbmcgc291cmNlID0gImh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI7CQkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZGVzY3JpcHRpb25FQ2xhc3MsIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJuYW1lIiwgIkRlc2NyaXB0aW9uIiwKLQkJCSAia2luZCIsICJzaW1wbGUiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0RGVzY3JpcHRpb25fVmFsdWUoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgIm5hbWUiLCAiOjAiLAotCQkJICJraW5kIiwgInNpbXBsZSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXREZXNjcmlwdGlvbl9MYW5nKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImF0dHJpYnV0ZSIsCi0JCQkgIm5hbWUiLCAibGFuZyIsCi0JCQkgIm5hbWVzcGFjZSIsICJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZG9jdW1lbnRSb290RUNsYXNzLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAibmFtZSIsICIiLAotCQkJICJraW5kIiwgIm1peGVkIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldERvY3VtZW50Um9vdF9NaXhlZCgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJlbGVtZW50V2lsZGNhcmQiLAotCQkJICJuYW1lIiwgIjptaXhlZCIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXREb2N1bWVudFJvb3RfWE1MTlNQcmVmaXhNYXAoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiYXR0cmlidXRlIiwKLQkJCSAibmFtZSIsICJ4bWxuczpwcmVmaXgiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0RG9jdW1lbnRSb290X1hTSVNjaGVtYUxvY2F0aW9uKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImF0dHJpYnV0ZSIsCi0JCQkgIm5hbWUiLCAieHNpOnNjaGVtYUxvY2F0aW9uIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldERvY3VtZW50Um9vdF9EZXNjcmlwdGlvbigpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJlbGVtZW50IiwKLQkJCSAibmFtZSIsICJkZXNjcmlwdGlvbiIsCi0JCQkgIm5hbWVzcGFjZSIsICIjI3RhcmdldE5hbWVzcGFjZSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXREb2N1bWVudFJvb3RfTmFtZSgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJlbGVtZW50IiwKLQkJCSAibmFtZSIsICJuYW1lIiwKLQkJCSAibmFtZXNwYWNlIiwgIiMjdGFyZ2V0TmFtZXNwYWNlIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldERvY3VtZW50Um9vdF9SZWdpc3RyeSgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJlbGVtZW50IiwKLQkJCSAibmFtZSIsICJyZWdpc3RyeSIsCi0JCQkgIm5hbWVzcGFjZSIsICIjI3RhcmdldE5hbWVzcGFjZSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChuYW1lRUNsYXNzLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAibmFtZSIsICJOYW1lIiwKLQkJCSAia2luZCIsICJzaW1wbGUiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0TmFtZV9WYWx1ZSgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAibmFtZSIsICI6MCIsCi0JCQkgImtpbmQiLCAic2ltcGxlIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldE5hbWVfTGFuZygpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJhdHRyaWJ1dGUiLAotCQkJICJuYW1lIiwgImxhbmciLAotCQkJICJuYW1lc3BhY2UiLCAiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKHJlZ2lzdHJ5RUNsYXNzLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAibmFtZSIsICJSZWdpc3RyeSIsCi0JCQkgImtpbmQiLCAiZWxlbWVudE9ubHkiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0UmVnaXN0cnlfTmFtZSgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJlbGVtZW50IiwKLQkJCSAibmFtZSIsICJuYW1lIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldFJlZ2lzdHJ5X0Rlc2NyaXB0aW9uKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImVsZW1lbnQiLAotCQkJICJuYW1lIiwgImRlc2NyaXB0aW9uIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldFJlZ2lzdHJ5X0lkKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImF0dHJpYnV0ZSIsCi0JCQkgIm5hbWUiLCAiaWQiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0UmVnaXN0cnlfTG9jYXRpb24oKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiYXR0cmlidXRlIiwKLQkJCSAibmFtZSIsICJsb2NhdGlvbiIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXRSZWdpc3RyeV9SZWYoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiYXR0cmlidXRlIiwKLQkJCSAibmFtZSIsICJyZWYiCi0JCSAgIH0pOwotCX0KLQotfSAvL1JlZ2lzdHJ5UGFja2FnZUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L3V0aWwvUmVnaXN0cnlBZGFwdGVyRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvdXRpbC9SZWdpc3RyeUFkYXB0ZXJGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExYjIwNTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvdXRpbC9SZWdpc3RyeUFkYXB0ZXJGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzEgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBSZWdpc3RyeUFkYXB0ZXJGYWN0b3J5LmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo1MSBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkudXRpbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJGYWN0b3J5SW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS4qOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBUaGUgPGI+QWRhcHRlciBGYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgotICogSXQgcHJvdmlkZXMgYW4gYWRhcHRlciA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeVBhY2thZ2UKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFJlZ2lzdHJ5QWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUltcGwgewotCS8qKgotCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIFJlZ2lzdHJ5UGFja2FnZSBtb2RlbFBhY2thZ2U7Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBhZGFwdGVyIGZhY3RvcnkuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFJlZ2lzdHJ5QWRhcHRlckZhY3RvcnkoKSB7Ci0JCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgewotCQkJbW9kZWxQYWNrYWdlID0gUmVnaXN0cnlQYWNrYWdlLmVJTlNUQU5DRTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgb2JqZWN0IGlzIGVpdGhlciB0aGUgbW9kZWwncyBwYWNrYWdlIG9yIGlzIGFuIGluc3RhbmNlIG9iamVjdCBvZiB0aGUgbW9kZWwuCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCBvYmplY3QpIHsKLQkJaWYgKG9iamVjdCA9PSBtb2RlbFBhY2thZ2UpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCWlmIChvYmplY3QgaW5zdGFuY2VvZiBFT2JqZWN0KSB7Ci0JCQlyZXR1cm4gKChFT2JqZWN0KW9iamVjdCkuZUNsYXNzKCkuZ2V0RVBhY2thZ2UoKSA9PSBtb2RlbFBhY2thZ2U7Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qKgotCSAqIFRoZSBzd2l0Y2ggdGhlIGRlbGVnYXRlcyB0byB0aGUgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2RzLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBSZWdpc3RyeVN3aXRjaCBtb2RlbFN3aXRjaCA9Ci0JCW5ldyBSZWdpc3RyeVN3aXRjaCgpIHsKLQkJCXB1YmxpYyBPYmplY3QgY2FzZURlc2NyaXB0aW9uKERlc2NyaXB0aW9uIG9iamVjdCkgewotCQkJCXJldHVybiBjcmVhdGVEZXNjcmlwdGlvbkFkYXB0ZXIoKTsKLQkJCX0KLQkJCXB1YmxpYyBPYmplY3QgY2FzZURvY3VtZW50Um9vdChEb2N1bWVudFJvb3Qgb2JqZWN0KSB7Ci0JCQkJcmV0dXJuIGNyZWF0ZURvY3VtZW50Um9vdEFkYXB0ZXIoKTsKLQkJCX0KLQkJCXB1YmxpYyBPYmplY3QgY2FzZU5hbWUoTmFtZSBvYmplY3QpIHsKLQkJCQlyZXR1cm4gY3JlYXRlTmFtZUFkYXB0ZXIoKTsKLQkJCX0KLQkJCXB1YmxpYyBPYmplY3QgY2FzZVJlZ2lzdHJ5KFJlZ2lzdHJ5IG9iamVjdCkgewotCQkJCXJldHVybiBjcmVhdGVSZWdpc3RyeUFkYXB0ZXIoKTsKLQkJCX0KLQkJCXB1YmxpYyBPYmplY3QgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKLQkJCQlyZXR1cm4gY3JlYXRlRU9iamVjdEFkYXB0ZXIoKTsKLQkJCX0KLQkJfTsKLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdGFyZ2V0IHRoZSBvYmplY3QgdG8gYWRhcHQuCi0JICogQHJldHVybiB0aGUgYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUFkYXB0ZXIoTm90aWZpZXIgdGFyZ2V0KSB7Ci0JCXJldHVybiAoQWRhcHRlciltb2RlbFN3aXRjaC5kb1N3aXRjaCgoRU9iamVjdCl0YXJnZXQpOwotCX0KLQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRlc2NyaXB0aW9uIDxlbT5EZXNjcmlwdGlvbjwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0JICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRlc2NyaXB0aW9uCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZURlc2NyaXB0aW9uQWRhcHRlcigpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRvY3VtZW50Um9vdCA8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0JICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LkRvY3VtZW50Um9vdAotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgQWRhcHRlciBjcmVhdGVEb2N1bWVudFJvb3RBZGFwdGVyKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuTmFtZSA8ZW0+TmFtZTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0JICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5Lk5hbWUKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEFkYXB0ZXIgY3JlYXRlTmFtZUFkYXB0ZXIoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeSA8ZW0+UmVnaXN0cnk8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgQWRhcHRlciBjcmVhdGVSZWdpc3RyeUFkYXB0ZXIoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgdGhlIGRlZmF1bHQgY2FzZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwuCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLX0gLy9SZWdpc3RyeUFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS91dGlsL1JlZ2lzdHJ5UmVzb3VyY2VGYWN0b3J5SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvdXRpbC9SZWdpc3RyeVJlc291cmNlRmFjdG9yeUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI3ODcyMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS91dGlsL1JlZ2lzdHJ5UmVzb3VyY2VGYWN0b3J5SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBSZWdpc3RyeVJlc291cmNlRmFjdG9yeUltcGwuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjUxIGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS51dGlsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkV4dGVuZGVkTWV0YURhdGE7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLlhNTFJlc291cmNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5pbXBsLlhNTFJlc291cmNlRmFjdG9yeUltcGw7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5SZXNvdXJjZSBGYWN0b3J5PC9iPiBhc3NvY2lhdGVkIHdpdGggdGhlIHBhY2thZ2UuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS51dGlsLlJlZ2lzdHJ5UmVzb3VyY2VJbXBsCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBSZWdpc3RyeVJlc291cmNlRmFjdG9yeUltcGwgZXh0ZW5kcyBYTUxSZXNvdXJjZUZhY3RvcnlJbXBsIHsKLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRXh0ZW5kZWRNZXRhRGF0YSBleHRlbmRlZE1ldGFEYXRhOwotCi0JLyoqCi0JICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgcmVzb3VyY2UgZmFjdG9yeS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgUmVnaXN0cnlSZXNvdXJjZUZhY3RvcnlJbXBsKCkgewotCQlzdXBlcigpOwotCQlleHRlbmRlZE1ldGFEYXRhID0gRXh0ZW5kZWRNZXRhRGF0YS5JTlNUQU5DRTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSByZXNvdXJjZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2UgY3JlYXRlUmVzb3VyY2UoVVJJIHVyaSkgewotCQlYTUxSZXNvdXJjZSByZXN1bHQgPSBuZXcgUmVnaXN0cnlSZXNvdXJjZUltcGwodXJpKTsKLQkJcmVzdWx0LmdldERlZmF1bHRTYXZlT3B0aW9ucygpLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fRVhURU5ERURfTUVUQV9EQVRBLCBleHRlbmRlZE1ldGFEYXRhKTsKLQkJcmVzdWx0LmdldERlZmF1bHRMb2FkT3B0aW9ucygpLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fRVhURU5ERURfTUVUQV9EQVRBLCBleHRlbmRlZE1ldGFEYXRhKTsKLQotCQlyZXN1bHQuZ2V0RGVmYXVsdFNhdmVPcHRpb25zKCkucHV0KFhNTFJlc291cmNlLk9QVElPTl9TQ0hFTUFfTE9DQVRJT04sIEJvb2xlYW4uVFJVRSk7Ci0JCXJlc3VsdC5nZXREZWZhdWx0U2F2ZU9wdGlvbnMoKS5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX1VTRV9FTkNPREVEX0FUVFJJQlVURV9TVFlMRSwgQm9vbGVhbi5UUlVFKTsKLQotCQlyZXN1bHQuZ2V0RGVmYXVsdExvYWRPcHRpb25zKCkucHV0KFhNTFJlc291cmNlLk9QVElPTl9VU0VfTEVYSUNBTF9IQU5ETEVSLCBCb29sZWFuLlRSVUUpOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotfSAvL1JlZ2lzdHJ5UmVzb3VyY2VGYWN0b3J5SW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvdXRpbC9SZWdpc3RyeVJlc291cmNlSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcmVnaXN0cnkvdXRpbC9SZWdpc3RyeVJlc291cmNlSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWJmYzAwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L3V0aWwvUmVnaXN0cnlSZXNvdXJjZUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogUmVnaXN0cnlSZXNvdXJjZUltcGwuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjUxIGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS51dGlsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuaW1wbC5YTUxSZXNvdXJjZUltcGw7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5SZXNvdXJjZSA8L2I+IGFzc29jaWF0ZWQgd2l0aCB0aGUgcGFja2FnZS4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LnV0aWwuUmVnaXN0cnlSZXNvdXJjZUZhY3RvcnlJbXBsCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBSZWdpc3RyeVJlc291cmNlSW1wbCBleHRlbmRzIFhNTFJlc291cmNlSW1wbCB7Ci0JLyoqCi0JICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgcmVzb3VyY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdXJpIHRoZSBVUkkgb2YgdGhlIG5ldyByZXNvdXJjZS4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFJlZ2lzdHJ5UmVzb3VyY2VJbXBsKFVSSSB1cmkpIHsKLQkJc3VwZXIodXJpKTsKLQl9Ci0KLX0gLy9SZWdpc3RyeVJlc291cmNlRmFjdG9yeUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L3V0aWwvUmVnaXN0cnlTd2l0Y2guamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3JlZ2lzdHJ5L3V0aWwvUmVnaXN0cnlTd2l0Y2guamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjc5MzcwZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeS91dGlsL1JlZ2lzdHJ5U3dpdGNoLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTMgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBSZWdpc3RyeVN3aXRjaC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NTEgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5Lio7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5Td2l0Y2g8L2I+IGZvciB0aGUgbW9kZWwncyBpbmhlcml0YW5jZSBoaWVyYXJjaHkuCi0gKiBJdCBzdXBwb3J0cyB0aGUgY2FsbCB7QGxpbmsgI2RvU3dpdGNoKEVPYmplY3QpIGRvU3dpdGNoKG9iamVjdCl9Ci0gKiB0byBpbnZva2UgdGhlIDxjb2RlPmNhc2VYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwsCi0gKiBzdGFydGluZyB3aXRoIHRoZSBhY3R1YWwgY2xhc3Mgb2YgdGhlIG9iamVjdAotICogYW5kIHByb2NlZWRpbmcgdXAgdGhlIGluaGVyaXRhbmNlIGhpZXJhcmNoeQotICogdW50aWwgYSBub24tbnVsbCByZXN1bHQgaXMgcmV0dXJuZWQsCi0gKiB3aGljaCBpcyB0aGUgcmVzdWx0IG9mIHRoZSBzd2l0Y2guCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeVBhY2thZ2UKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFJlZ2lzdHJ5U3dpdGNoIHsKLQkvKioKLQkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIFJlZ2lzdHJ5UGFja2FnZSBtb2RlbFBhY2thZ2U7Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBzd2l0Y2guCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFJlZ2lzdHJ5U3dpdGNoKCkgewotCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsKLQkJCW1vZGVsUGFja2FnZSA9IFJlZ2lzdHJ5UGFja2FnZS5lSU5TVEFOQ0U7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBPYmplY3QgZG9Td2l0Y2goRU9iamVjdCB0aGVFT2JqZWN0KSB7Ci0JCXJldHVybiBkb1N3aXRjaCh0aGVFT2JqZWN0LmVDbGFzcygpLCB0aGVFT2JqZWN0KTsKLQl9Ci0KLQkvKioKLQkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBPYmplY3QgZG9Td2l0Y2goRUNsYXNzIHRoZUVDbGFzcywgRU9iamVjdCB0aGVFT2JqZWN0KSB7Ci0JCWlmICh0aGVFQ2xhc3MuZUNvbnRhaW5lcigpID09IG1vZGVsUGFja2FnZSkgewotCQkJcmV0dXJuIGRvU3dpdGNoKHRoZUVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSwgdGhlRU9iamVjdCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlMaXN0IGVTdXBlclR5cGVzID0gdGhlRUNsYXNzLmdldEVTdXBlclR5cGVzKCk7Ci0JCQlyZXR1cm4KLQkJCQllU3VwZXJUeXBlcy5pc0VtcHR5KCkgPwotCQkJCQlkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KSA6Ci0JCQkJCWRvU3dpdGNoKChFQ2xhc3MpZVN1cGVyVHlwZXMuZ2V0KDApLCB0aGVFT2JqZWN0KTsKLQkJfQotCX0KLQotCS8qKgotCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIE9iamVjdCBkb1N3aXRjaChpbnQgY2xhc3NpZmllcklELCBFT2JqZWN0IHRoZUVPYmplY3QpIHsKLQkJc3dpdGNoIChjbGFzc2lmaWVySUQpIHsKLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLkRFU0NSSVBUSU9OOiB7Ci0JCQkJRGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSAoRGVzY3JpcHRpb24pdGhlRU9iamVjdDsKLQkJCQlPYmplY3QgcmVzdWx0ID0gY2FzZURlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKTsKLQkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotCQkJCXJldHVybiByZXN1bHQ7Ci0JCQl9Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UOiB7Ci0JCQkJRG9jdW1lbnRSb290IGRvY3VtZW50Um9vdCA9IChEb2N1bWVudFJvb3QpdGhlRU9iamVjdDsKLQkJCQlPYmplY3QgcmVzdWx0ID0gY2FzZURvY3VtZW50Um9vdChkb2N1bWVudFJvb3QpOwotCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0JCQkJcmV0dXJuIHJlc3VsdDsKLQkJCX0KLQkJCWNhc2UgUmVnaXN0cnlQYWNrYWdlLk5BTUU6IHsKLQkJCQlOYW1lIG5hbWUgPSAoTmFtZSl0aGVFT2JqZWN0OwotCQkJCU9iamVjdCByZXN1bHQgPSBjYXNlTmFtZShuYW1lKTsKLQkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotCQkJCXJldHVybiByZXN1bHQ7Ci0JCQl9Ci0JCQljYXNlIFJlZ2lzdHJ5UGFja2FnZS5SRUdJU1RSWTogewotCQkJCVJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gKFJlZ2lzdHJ5KXRoZUVPYmplY3Q7Ci0JCQkJT2JqZWN0IHJlc3VsdCA9IGNhc2VSZWdpc3RyeShyZWdpc3RyeSk7Ci0JCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLQkJCQlyZXR1cm4gcmVzdWx0OwotCQkJfQotCQkJZGVmYXVsdDogcmV0dXJuIGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRlc2NyaXB0aW9uPC9lbT4nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0JICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0JICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRlc2NyaXB0aW9uPC9lbT4nLgotCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGNhc2VEZXNjcmlwdGlvbihEZXNjcmlwdGlvbiBvYmplY3QpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRvY3VtZW50IFJvb3Q8L2VtPicuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLQkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLQkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+Jy4KLQkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBjYXNlRG9jdW1lbnRSb290KERvY3VtZW50Um9vdCBvYmplY3QpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk5hbWU8L2VtPicuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLQkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLQkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TmFtZTwvZW0+Jy4KLQkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBjYXNlTmFtZShOYW1lIG9iamVjdCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UmVnaXN0cnk8L2VtPicuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLQkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLQkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UmVnaXN0cnk8L2VtPicuCi0JICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBPYmplY3QgY2FzZVJlZ2lzdHJ5KFJlZ2lzdHJ5IG9iamVjdCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLCBidXQgdGhpcyBpcyB0aGUgbGFzdCBjYXNlIGFueXdheS4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLQkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KLQkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLX0gLy9SZWdpc3RyeVN3aXRjaApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC9EZXNjcmlwdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC9EZXNjcmlwdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTc3NjMwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvRGVzY3JpcHRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogRGVzY3JpcHRpb24uamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ4IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRlc2NyaXB0aW9uPC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5EZXNjcmlwdGlvbiNnZXRWYWx1ZSA8ZW0+VmFsdWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5EZXNjcmlwdGlvbiNnZXRMYW5nIDxlbT5MYW5nPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguUlRJbmRleFBhY2thZ2UjZ2V0RGVzY3JpcHRpb24oKQotICogQG1vZGVsIAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIERlc2NyaXB0aW9uIGV4dGVuZHMgRU9iamVjdCB7Ci0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlZhbHVlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlZhbHVlPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNzZXRWYWx1ZShTdHJpbmcpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguUlRJbmRleFBhY2thZ2UjZ2V0RGVzY3JpcHRpb25fVmFsdWUoKQotCSAqIEBtb2RlbCB1bmlxdWU9ImZhbHNlIiBkYXRhVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLlN0cmluZyIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGdldFZhbHVlKCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRGVzY3JpcHRpb24jZ2V0VmFsdWUgPGVtPlZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5WYWx1ZTwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjZ2V0VmFsdWUoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldFZhbHVlKFN0cmluZyB2YWx1ZSk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5MYW5nPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5MYW5nPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkxhbmc8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI3NldExhbmcoU3RyaW5nKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LlJUSW5kZXhQYWNrYWdlI2dldERlc2NyaXB0aW9uX0xhbmcoKQotCSAqIEBtb2RlbCB1bmlxdWU9ImZhbHNlIiBkYXRhVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLkxhbmd1YWdlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZ2V0TGFuZygpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRlc2NyaXB0aW9uI2dldExhbmcgPGVtPkxhbmc8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkxhbmc8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI2dldExhbmcoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldExhbmcoU3RyaW5nIHZhbHVlKTsKLQotfSAvLyBEZXNjcmlwdGlvbgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC9Eb2N1bWVudFJvb3QuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvRG9jdW1lbnRSb290LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1MzM4OGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC9Eb2N1bWVudFJvb3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NSArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IERvY3VtZW50Um9vdC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDggY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXg7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRU1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRmVhdHVyZU1hcDsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RG9jdW1lbnQgUm9vdDwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRG9jdW1lbnRSb290I2dldE1peGVkIDxlbT5NaXhlZDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRvY3VtZW50Um9vdCNnZXRYTUxOU1ByZWZpeE1hcCA8ZW0+WE1MTlMgUHJlZml4IE1hcDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRvY3VtZW50Um9vdCNnZXRYU0lTY2hlbWFMb2NhdGlvbiA8ZW0+WFNJIFNjaGVtYSBMb2NhdGlvbjwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRvY3VtZW50Um9vdCNnZXREZXNjcmlwdGlvbiA8ZW0+RGVzY3JpcHRpb248L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5Eb2N1bWVudFJvb3QjZ2V0SW5kZXggPGVtPkluZGV4PC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRG9jdW1lbnRSb290I2dldE5hbWUgPGVtPk5hbWU8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5SVEluZGV4UGFja2FnZSNnZXREb2N1bWVudFJvb3QoKQotICogQG1vZGVsIAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIERvY3VtZW50Um9vdCBleHRlbmRzIEVPYmplY3QgewotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk1peGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KLQkgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRmVhdHVyZU1hcC5FbnRyeX0uCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5NaXhlZDwvZW0+JyBhdHRyaWJ1dGUgbGlzdCBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk1peGVkPC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LlJUSW5kZXhQYWNrYWdlI2dldERvY3VtZW50Um9vdF9NaXhlZCgpCi0JICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUZlYXR1cmVNYXBFbnRyeSIgbWFueT0idHJ1ZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRmVhdHVyZU1hcCBnZXRNaXhlZCgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+WE1MTlMgUHJlZml4IE1hcDwvYj48L2VtPicgbWFwLgotCSAqIFRoZSBrZXkgaXMgb2YgdHlwZSB7QGxpbmsgamF2YS5sYW5nLlN0cmluZ30sCi0JICogYW5kIHRoZSB2YWx1ZSBpcyBvZiB0eXBlIHtAbGluayBqYXZhLmxhbmcuU3RyaW5nfSwKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlhNTE5TIFByZWZpeCBNYXA8L2VtPicgbWFwIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+WE1MTlMgUHJlZml4IE1hcDwvZW0+JyBtYXAuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguUlRJbmRleFBhY2thZ2UjZ2V0RG9jdW1lbnRSb290X1hNTE5TUHJlZml4TWFwKCkKLQkgKiBAbW9kZWwgbWFwVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJpbmdUb1N0cmluZ01hcEVudHJ5IiBrZXlUeXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB2YWx1ZVR5cGU9ImphdmEubGFuZy5TdHJpbmciIHRyYW5zaWVudD0idHJ1ZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRU1hcCBnZXRYTUxOU1ByZWZpeE1hcCgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+WFNJIFNjaGVtYSBMb2NhdGlvbjwvYj48L2VtPicgbWFwLgotCSAqIFRoZSBrZXkgaXMgb2YgdHlwZSB7QGxpbmsgamF2YS5sYW5nLlN0cmluZ30sCi0JICogYW5kIHRoZSB2YWx1ZSBpcyBvZiB0eXBlIHtAbGluayBqYXZhLmxhbmcuU3RyaW5nfSwKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlhTSSBTY2hlbWEgTG9jYXRpb248L2VtPicgbWFwIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+WFNJIFNjaGVtYSBMb2NhdGlvbjwvZW0+JyBtYXAuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguUlRJbmRleFBhY2thZ2UjZ2V0RG9jdW1lbnRSb290X1hTSVNjaGVtYUxvY2F0aW9uKCkKLQkgKiBAbW9kZWwgbWFwVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJpbmdUb1N0cmluZ01hcEVudHJ5IiBrZXlUeXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB2YWx1ZVR5cGU9ImphdmEubGFuZy5TdHJpbmciIHRyYW5zaWVudD0idHJ1ZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRU1hcCBnZXRYU0lTY2hlbWFMb2NhdGlvbigpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RGVzY3JpcHRpb248L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkRlc2NyaXB0aW9uPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRlc2NyaXB0aW9uPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiBAc2VlICNzZXREZXNjcmlwdGlvbihEZXNjcmlwdGlvbikKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5SVEluZGV4UGFja2FnZSNnZXREb2N1bWVudFJvb3RfRGVzY3JpcHRpb24oKQotCSAqIEBtb2RlbCBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIiB0cmFuc2llbnQ9InRydWUiIHZvbGF0aWxlPSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlEZXNjcmlwdGlvbiBnZXREZXNjcmlwdGlvbigpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRvY3VtZW50Um9vdCNnZXREZXNjcmlwdGlvbiA8ZW0+RGVzY3JpcHRpb248L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkRlc2NyaXB0aW9uPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiBAc2VlICNnZXREZXNjcmlwdGlvbigpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0RGVzY3JpcHRpb24oRGVzY3JpcHRpb24gdmFsdWUpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SW5kZXg8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkluZGV4PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkluZGV4PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiBAc2VlICNzZXRJbmRleChJbmRleCkKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5SVEluZGV4UGFja2FnZSNnZXREb2N1bWVudFJvb3RfSW5kZXgoKQotCSAqIEBtb2RlbCBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIiB0cmFuc2llbnQ9InRydWUiIHZvbGF0aWxlPSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlJbmRleCBnZXRJbmRleCgpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRvY3VtZW50Um9vdCNnZXRJbmRleCA8ZW0+SW5kZXg8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkluZGV4PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiBAc2VlICNnZXRJbmRleCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0SW5kZXgoSW5kZXggdmFsdWUpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiBAc2VlICNzZXROYW1lKE5hbWUpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguUlRJbmRleFBhY2thZ2UjZ2V0RG9jdW1lbnRSb290X05hbWUoKQotCSAqIEBtb2RlbCBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIiB0cmFuc2llbnQ9InRydWUiIHZvbGF0aWxlPSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlOYW1lIGdldE5hbWUoKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5Eb2N1bWVudFJvb3QjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogQHNlZSAjZ2V0TmFtZSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0TmFtZShOYW1lIHZhbHVlKTsKLQotfSAvLyBEb2N1bWVudFJvb3QKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvSW5kZXguamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvSW5kZXguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThhYTRhYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L0luZGV4LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IEluZGV4LmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0OCBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5JbmRleDwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguSW5kZXgjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkluZGV4I2dldERlc2NyaXB0aW9uIDxlbT5EZXNjcmlwdGlvbjwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkluZGV4I2dldFJlZ2lzdHJ5IDxlbT5SZWdpc3RyeTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkluZGV4I2dldFRheG9ub215IDxlbT5UYXhvbm9teTwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LlJUSW5kZXhQYWNrYWdlI2dldEluZGV4KCkKLSAqIEBtb2RlbCAKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBJbmRleCBleHRlbmRzIEVPYmplY3QgewotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguTmFtZX0uCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5SVEluZGV4UGFja2FnZSNnZXRJbmRleF9OYW1lKCkKLQkgKiBAbW9kZWwgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4Lk5hbWUiIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiIHJlcXVpcmVkPSJ0cnVlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFTGlzdCBnZXROYW1lKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5EZXNjcmlwdGlvbjwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5EZXNjcmlwdGlvbn0uCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5EZXNjcmlwdGlvbjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRlc2NyaXB0aW9uPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LlJUSW5kZXhQYWNrYWdlI2dldEluZGV4X0Rlc2NyaXB0aW9uKCkKLQkgKiBAbW9kZWwgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRlc2NyaXB0aW9uIiBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIiByZXF1aXJlZD0idHJ1ZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUxpc3QgZ2V0RGVzY3JpcHRpb24oKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlJlZ2lzdHJ5PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeX0uCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5SZWdpc3RyeTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlJlZ2lzdHJ5PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LlJUSW5kZXhQYWNrYWdlI2dldEluZGV4X1JlZ2lzdHJ5KCkKLQkgKiBAbW9kZWwgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeSIgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUxpc3QgZ2V0UmVnaXN0cnkoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlRheG9ub215PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teX0uCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5UYXhvbm9teTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlRheG9ub215PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LlJUSW5kZXhQYWNrYWdlI2dldEluZGV4X1RheG9ub215KCkKLQkgKiBAbW9kZWwgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teSIgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUxpc3QgZ2V0VGF4b25vbXkoKTsKLQotfSAvLyBJbmRleApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC9OYW1lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L05hbWUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDE0NWZiMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L05hbWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogTmFtZS5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDggY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXg7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TmFtZTwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguTmFtZSNnZXRWYWx1ZSA8ZW0+VmFsdWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5OYW1lI2dldExhbmcgPGVtPkxhbmc8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5SVEluZGV4UGFja2FnZSNnZXROYW1lXygpCi0gKiBAbW9kZWwgCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgTmFtZSBleHRlbmRzIEVPYmplY3QgewotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5WYWx1ZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5WYWx1ZTwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjc2V0VmFsdWUoU3RyaW5nKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LlJUSW5kZXhQYWNrYWdlI2dldE5hbWVfVmFsdWUoKQotCSAqIEBtb2RlbCB1bmlxdWU9ImZhbHNlIiBkYXRhVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLlN0cmluZyIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGdldFZhbHVlKCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguTmFtZSNnZXRWYWx1ZSA8ZW0+VmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlZhbHVlPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNnZXRWYWx1ZSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0VmFsdWUoU3RyaW5nIHZhbHVlKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkxhbmc8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkxhbmc8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TGFuZzwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjc2V0TGFuZyhTdHJpbmcpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguUlRJbmRleFBhY2thZ2UjZ2V0TmFtZV9MYW5nKCkKLQkgKiBAbW9kZWwgdW5pcXVlPSJmYWxzZSIgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZS5MYW5ndWFnZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGdldExhbmcoKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5OYW1lI2dldExhbmcgPGVtPkxhbmc8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkxhbmc8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI2dldExhbmcoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldExhbmcoU3RyaW5nIHZhbHVlKTsKLQotfSAvLyBOYW1lCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L1JUSW5kZXhGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L1JUSW5kZXhGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0ZGI3MDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC9SVEluZGV4RmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBSVEluZGV4RmFjdG9yeS5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDggY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXg7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUZhY3Rvcnk7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5GYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgotICogSXQgcHJvdmlkZXMgYSBjcmVhdGUgbWV0aG9kIGZvciBlYWNoIG5vbi1hYnN0cmFjdCBjbGFzcyBvZiB0aGUgbW9kZWwuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LlJUSW5kZXhQYWNrYWdlCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgUlRJbmRleEZhY3RvcnkgZXh0ZW5kcyBFRmFjdG9yeSB7Ci0JLyoqCi0JICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlSVEluZGV4RmFjdG9yeSBlSU5TVEFOQ0UgPSBuZXcgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmltcGwuUlRJbmRleEZhY3RvcnlJbXBsKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRlc2NyaXB0aW9uPC9lbT4nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5EZXNjcmlwdGlvbjwvZW0+Jy4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRGVzY3JpcHRpb24gY3JlYXRlRGVzY3JpcHRpb24oKTsKLQotCS8qKgotCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+Jy4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRG9jdW1lbnRSb290IGNyZWF0ZURvY3VtZW50Um9vdCgpOwotCi0JLyoqCi0JICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5JbmRleDwvZW0+Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+SW5kZXg8L2VtPicuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUluZGV4IGNyZWF0ZUluZGV4KCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk5hbWU8L2VtPicuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk5hbWU8L2VtPicuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCU5hbWUgY3JlYXRlTmFtZSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlSVEluZGV4UGFja2FnZSBnZXRSVEluZGV4UGFja2FnZSgpOwotCi19IC8vUlRJbmRleEZhY3RvcnkKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvUlRJbmRleFBhY2thZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvUlRJbmRleFBhY2thZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2FkMmJkMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L1JUSW5kZXhQYWNrYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NTAgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBSVEluZGV4UGFja2FnZS5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDggY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXg7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogVGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGUgbW9kZWwuCi0gKiBJdCBjb250YWlucyBhY2Nlc3NvcnMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdG8gcmVwcmVzZW50Ci0gKiA8dWw+Ci0gKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+Ci0gKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgotICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+Ci0gKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgotICogPC91bD4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPCEtLSBiZWdpbi1tb2RlbC1kb2MgLS0+Ci0gKiAKLSAqICAgIFNlZSBodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UuaHRtbCBhbmQKLSAqICAgIGh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy14bWwgZm9yIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgbmFtZXNwYWNlLgotICogCi0gKiAgICAgVGhpcyBzY2hlbWEgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBYTUwgbmFtZXNwYWNlLCBpbiBhIGZvcm0KLSAqICAgICBzdWl0YWJsZSBmb3IgaW1wb3J0IGJ5IG90aGVyIHNjaGVtYSBkb2N1bWVudHMuICAKLSAqIAotICogICAgIE5vdGUgdGhhdCBsb2NhbCBuYW1lcyBpbiB0aGlzIG5hbWVzcGFjZSBhcmUgaW50ZW5kZWQgdG8gYmUgZGVmaW5lZAotICogICAgIG9ubHkgYnkgdGhlIFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0gb3IgaXRzIHN1Ymdyb3Vwcy4gIFRoZQotICogICAgIGZvbGxvd2luZyBuYW1lcyBhcmUgY3VycmVudGx5IGRlZmluZWQgaW4gdGhpcyBuYW1lc3BhY2UgYW5kIHNob3VsZAotICogICAgIG5vdCBiZSB1c2VkIHdpdGggY29uZmxpY3Rpbmcgc2VtYW50aWNzIGJ5IGFueSBXb3JraW5nIEdyb3VwLAotICogICAgIHNwZWNpZmljYXRpb24sIG9yIGRvY3VtZW50IGluc3RhbmNlOgotICogCi0gKiAgICAgYmFzZSAoYXMgYW4gYXR0cmlidXRlIG5hbWUpOiBkZW5vdGVzIGFuIGF0dHJpYnV0ZSB3aG9zZSB2YWx1ZQotICogICAgICAgICAgcHJvdmlkZXMgYSBVUkkgdG8gYmUgdXNlZCBhcyB0aGUgYmFzZSBmb3IgaW50ZXJwcmV0aW5nIGFueQotICogICAgICAgICAgcmVsYXRpdmUgVVJJcyBpbiB0aGUgc2NvcGUgb2YgdGhlIGVsZW1lbnQgb24gd2hpY2ggaXQKLSAqICAgICAgICAgIGFwcGVhcnM7IGl0cyB2YWx1ZSBpcyBpbmhlcml0ZWQuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQKLSAqICAgICAgICAgIGJ5IHZpcnR1ZSBvZiBpdHMgZGVmaW5pdGlvbiBpbiB0aGUgWE1MIEJhc2Ugc3BlY2lmaWNhdGlvbi4KLSAqIAotICogICAgIGlkICAgKGFzIGFuIGF0dHJpYnV0ZSBuYW1lKTogZGVub3RlcyBhbiBhdHRyaWJ1dGUgd2hvc2UgdmFsdWUKLSAqICAgICAgICAgIHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBpZiBkZWNsYXJlZCB0byBiZSBvZiB0eXBlIElELgotICogICAgICAgICAgVGhlIHhtbDppZCBzcGVjaWZpY2F0aW9uIGlzIG5vdCB5ZXQgYSBXM0MgUmVjb21tZW5kYXRpb24sCi0gKiAgICAgICAgICBidXQgdGhpcyBhdHRyaWJ1dGUgaXMgaW5jbHVkZWQgaGVyZSB0byBmYWNpbGl0YXRlIGV4cGVyaW1lbnRhdGlvbgotICogICAgICAgICAgd2l0aCB0aGUgbWVjaGFuaXNtcyBpdCBwcm9wb3Nlcy4gIE5vdGUgdGhhdCBpdCBpcyBfbm90XyBpbmNsdWRlZAotICogICAgICAgICAgaW4gdGhlIHNwZWNpYWxBdHRycyBhdHRyaWJ1dGUgZ3JvdXAuCi0gKiAKLSAqICAgICBsYW5nIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlIHZhbHVlCi0gKiAgICAgICAgICBpcyBhIGxhbmd1YWdlIGNvZGUgZm9yIHRoZSBuYXR1cmFsIGxhbmd1YWdlIG9mIHRoZSBjb250ZW50IG9mCi0gKiAgICAgICAgICBhbnkgZWxlbWVudDsgaXRzIHZhbHVlIGlzIGluaGVyaXRlZC4gIFRoaXMgbmFtZSBpcyByZXNlcnZlZAotICogICAgICAgICAgYnkgdmlydHVlIG9mIGl0cyBkZWZpbml0aW9uIGluIHRoZSBYTUwgc3BlY2lmaWNhdGlvbi4KLSAqICAgCi0gKiAgICAgc3BhY2UgKGFzIGFuIGF0dHJpYnV0ZSBuYW1lKTogZGVub3RlcyBhbiBhdHRyaWJ1dGUgd2hvc2UKLSAqICAgICAgICAgIHZhbHVlIGlzIGEga2V5d29yZCBpbmRpY2F0aW5nIHdoYXQgd2hpdGVzcGFjZSBwcm9jZXNzaW5nCi0gKiAgICAgICAgICBkaXNjaXBsaW5lIGlzIGludGVuZGVkIGZvciB0aGUgY29udGVudCBvZiB0aGUgZWxlbWVudDsgaXRzCi0gKiAgICAgICAgICB2YWx1ZSBpcyBpbmhlcml0ZWQuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQgYnkgdmlydHVlIG9mIGl0cwotICogICAgICAgICAgZGVmaW5pdGlvbiBpbiB0aGUgWE1MIHNwZWNpZmljYXRpb24uCi0gKiAKLSAqICAgICBGYXRoZXIgKGluIGFueSBjb250ZXh0IGF0IGFsbCk6IGRlbm90ZXMgSm9uIEJvc2FrLCB0aGUgY2hhaXIgb2YgCi0gKiAgICAgICAgICB0aGUgb3JpZ2luYWwgWE1MIFdvcmtpbmcgR3JvdXAuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQgYnkgCi0gKiAgICAgICAgICB0aGUgZm9sbG93aW5nIGRlY2lzaW9uIG9mIHRoZSBXM0MgWE1MIFBsZW5hcnkgYW5kIAotICogICAgICAgICAgWE1MIENvb3JkaW5hdGlvbiBncm91cHM6Ci0gKiAKLSAqICAgICAgICAgICAgICBJbiBhcHByZWNpYXRpb24gZm9yIGhpcyB2aXNpb24sIGxlYWRlcnNoaXAgYW5kIGRlZGljYXRpb24KLSAqICAgICAgICAgICAgICB0aGUgVzNDIFhNTCBQbGVuYXJ5IG9uIHRoaXMgMTB0aCBkYXkgb2YgRmVicnVhcnksIDIwMDAKLSAqICAgICAgICAgICAgICByZXNlcnZlcyBmb3IgSm9uIEJvc2FrIGluIHBlcnBldHVpdHkgdGhlIFhNTCBuYW1lCi0gKiAgICAgICAgICAgICAgeG1sOkZhdGhlcgotICogICAKLSAqIFRoaXMgc2NoZW1hIGRlZmluZXMgYXR0cmlidXRlcyBhbmQgYW4gYXR0cmlidXRlIGdyb3VwCi0gKiAgICAgICAgIHN1aXRhYmxlIGZvciB1c2UgYnkKLSAqICAgICAgICAgc2NoZW1hcyB3aXNoaW5nIHRvIGFsbG93IHhtbDpiYXNlLCB4bWw6bGFuZywgeG1sOnNwYWNlIG9yIHhtbDppZAotICogICAgICAgICBhdHRyaWJ1dGVzIG9uIGVsZW1lbnRzIHRoZXkgZGVmaW5lLgotICogCi0gKiAgICAgICAgIFRvIGVuYWJsZSB0aGlzLCBzdWNoIGEgc2NoZW1hIG11c3QgaW1wb3J0IHRoaXMgc2NoZW1hCi0gKiAgICAgICAgIGZvciB0aGUgWE1MIG5hbWVzcGFjZSwgZS5nLiBhcyBmb2xsb3dzOgotICogICAgICAgICAmbHQ7c2NoZW1hIC4gLiAuJmd0OwotICogICAgICAgICAgLiAuIC4KLSAqICAgICAgICAgICZsdDtpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiCi0gKiAgICAgICAgICAgICAgICAgICAgIHNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC54c2QiLyZndDsKLSAqIAotICogICAgICAgICBTdWJzZXF1ZW50bHksIHF1YWxpZmllZCByZWZlcmVuY2UgdG8gYW55IG9mIHRoZSBhdHRyaWJ1dGVzCi0gKiAgICAgICAgIG9yIHRoZSBncm91cCBkZWZpbmVkIGJlbG93IHdpbGwgaGF2ZSB0aGUgZGVzaXJlZCBlZmZlY3QsIGUuZy4KLSAqIAotICogICAgICAgICAmbHQ7dHlwZSAuIC4gLiZndDsKLSAqICAgICAgICAgIC4gLiAuCi0gKiAgICAgICAgICAmbHQ7YXR0cmlidXRlR3JvdXAgcmVmPSJ4bWw6c3BlY2lhbEF0dHJzIi8mZ3Q7Ci0gKiAgCi0gKiAgICAgICAgICB3aWxsIGRlZmluZSBhIHR5cGUgd2hpY2ggd2lsbCBzY2hlbWEtdmFsaWRhdGUgYW4gaW5zdGFuY2UKLSAqICAgICAgICAgIGVsZW1lbnQgd2l0aCBhbnkgb2YgdGhvc2UgYXR0cmlidXRlcwotICogSW4ga2VlcGluZyB3aXRoIHRoZSBYTUwgU2NoZW1hIFdHJ3Mgc3RhbmRhcmQgdmVyc2lvbmluZwotICogICAgcG9saWN5LCB0aGlzIHNjaGVtYSBkb2N1bWVudCB3aWxsIHBlcnNpc3QgYXQKLSAqICAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDUvMDgveG1sLnhzZC4KLSAqICAgIEF0IHRoZSBkYXRlIG9mIGlzc3VlIGl0IGNhbiBhbHNvIGJlIGZvdW5kIGF0Ci0gKiAgICBodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC54c2QuCi0gKiAgICBUaGUgc2NoZW1hIGRvY3VtZW50IGF0IHRoYXQgVVJJIG1heSBob3dldmVyIGNoYW5nZSBpbiB0aGUgZnV0dXJlLAotICogICAgaW4gb3JkZXIgdG8gcmVtYWluIGNvbXBhdGlibGUgd2l0aCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgWE1MIFNjaGVtYQotICogICAgaXRzZWxmLCBvciB3aXRoIHRoZSBYTUwgbmFtZXNwYWNlIGl0c2VsZi4gIEluIG90aGVyIHdvcmRzLCBpZiB0aGUgWE1MCi0gKiAgICBTY2hlbWEgb3IgWE1MIG5hbWVzcGFjZXMgY2hhbmdlLCB0aGUgdmVyc2lvbiBvZiB0aGlzIGRvY3VtZW50IGF0Ci0gKiAgICBodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC54c2Qgd2lsbCBjaGFuZ2UKLSAqICAgIGFjY29yZGluZ2x5OyB0aGUgdmVyc2lvbiBhdAotICogICAgaHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC94bWwueHNkIHdpbGwgbm90IGNoYW5nZS4KLSAqICAgCi0gKiA8IS0tIGVuZC1tb2RlbC1kb2MgLS0+Ci0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5SVEluZGV4RmFjdG9yeQotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIFJUSW5kZXhQYWNrYWdlIGV4dGVuZHMgRVBhY2thZ2UgewotCS8qKgotCSAqIFRoZSBwYWNrYWdlIG5hbWUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGVOQU1FID0gInJ0aW5kZXgiOwotCi0JLyoqCi0JICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIFVSSS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZU5TX1VSSSA9ICJodHRwOi8vZWNsaXBzZS5vcmcvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4IjsKLQotCS8qKgotCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBuYW1lLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCVN0cmluZyBlTlNfUFJFRklYID0gInJ0aW5kZXgiOwotCi0JLyoqCi0JICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgcGFja2FnZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlSVEluZGV4UGFja2FnZSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguaW1wbC5SVEluZGV4UGFja2FnZUltcGwuaW5pdCgpOwotCi0JLyoqCi0JICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguaW1wbC5EZXNjcmlwdGlvbkltcGwgPGVtPkRlc2NyaXB0aW9uPC9lbT59JyBjbGFzcy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmltcGwuRGVzY3JpcHRpb25JbXBsCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguaW1wbC5SVEluZGV4UGFja2FnZUltcGwjZ2V0RGVzY3JpcHRpb24oKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlpbnQgREVTQ1JJUFRJT04gPSAwOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgREVTQ1JJUFRJT05fX1ZBTFVFID0gMDsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYW5nPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgREVTQ1JJUFRJT05fX0xBTkcgPSAxOwotCi0JLyoqCi0JICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSB0aGUgJzxlbT5EZXNjcmlwdGlvbjwvZW0+JyBjbGFzcy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBERVNDUklQVElPTl9GRUFUVVJFX0NPVU5UID0gMjsKLQotCS8qKgotCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmltcGwuRG9jdW1lbnRSb290SW1wbCA8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+fScgY2xhc3MuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5pbXBsLkRvY3VtZW50Um9vdEltcGwKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5pbXBsLlJUSW5kZXhQYWNrYWdlSW1wbCNnZXREb2N1bWVudFJvb3QoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlpbnQgRE9DVU1FTlRfUk9PVCA9IDE7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TWl4ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IERPQ1VNRU5UX1JPT1RfX01JWEVEID0gMDsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5YTUxOUyBQcmVmaXggTWFwPC9iPjwvZW0+JyBtYXAuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgRE9DVU1FTlRfUk9PVF9fWE1MTlNfUFJFRklYX01BUCA9IDE7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+WFNJIFNjaGVtYSBMb2NhdGlvbjwvYj48L2VtPicgbWFwLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IERPQ1VNRU5UX1JPT1RfX1hTSV9TQ0hFTUFfTE9DQVRJT04gPSAyOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlc2NyaXB0aW9uPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgRE9DVU1FTlRfUk9PVF9fREVTQ1JJUFRJT04gPSAzOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluZGV4PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgRE9DVU1FTlRfUk9PVF9fSU5ERVggPSA0OwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBET0NVTUVOVF9ST09UX19OQU1FID0gNTsKLQotCS8qKgotCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgdGhlICc8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+JyBjbGFzcy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBET0NVTUVOVF9ST09UX0ZFQVRVUkVfQ09VTlQgPSA2OwotCi0JLyoqCi0JICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguaW1wbC5JbmRleEltcGwgPGVtPkluZGV4PC9lbT59JyBjbGFzcy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmltcGwuSW5kZXhJbXBsCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguaW1wbC5SVEluZGV4UGFja2FnZUltcGwjZ2V0SW5kZXgoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlpbnQgSU5ERVggPSAyOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IElOREVYX19OQU1FID0gMDsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EZXNjcmlwdGlvbjwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgSU5ERVhfX0RFU0NSSVBUSU9OID0gMTsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZWdpc3RyeTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgSU5ERVhfX1JFR0lTVFJZID0gMjsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UYXhvbm9teTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgSU5ERVhfX1RBWE9OT01ZID0gMzsKLQotCS8qKgotCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgdGhlICc8ZW0+SW5kZXg8L2VtPicgY2xhc3MuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgSU5ERVhfRkVBVFVSRV9DT1VOVCA9IDQ7Ci0KLQkvKioKLQkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5pbXBsLk5hbWVJbXBsIDxlbT5OYW1lPC9lbT59JyBjbGFzcy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmltcGwuTmFtZUltcGwKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5pbXBsLlJUSW5kZXhQYWNrYWdlSW1wbCNnZXROYW1lXygpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCWludCBOQU1FID0gMzsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5WYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IE5BTUVfX1ZBTFVFID0gMDsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYW5nPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgTkFNRV9fTEFORyA9IDE7Ci0KLQkvKioKLQkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlIHRoZSAnPGVtPk5hbWU8L2VtPicgY2xhc3MuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgTkFNRV9GRUFUVVJFX0NPVU5UID0gMjsKLQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRlc2NyaXB0aW9uIDxlbT5EZXNjcmlwdGlvbjwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5EZXNjcmlwdGlvbjwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5EZXNjcmlwdGlvbgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQ2xhc3MgZ2V0RGVzY3JpcHRpb24oKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRlc2NyaXB0aW9uI2dldFZhbHVlIDxlbT5WYWx1ZTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlZhbHVlPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRlc2NyaXB0aW9uI2dldFZhbHVlKCkKLQkgKiBAc2VlICNnZXREZXNjcmlwdGlvbigpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVBdHRyaWJ1dGUgZ2V0RGVzY3JpcHRpb25fVmFsdWUoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRlc2NyaXB0aW9uI2dldExhbmcgPGVtPkxhbmc8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5MYW5nPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRlc2NyaXB0aW9uI2dldExhbmcoKQotCSAqIEBzZWUgI2dldERlc2NyaXB0aW9uKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUF0dHJpYnV0ZSBnZXREZXNjcmlwdGlvbl9MYW5nKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRG9jdW1lbnRSb290IDxlbT5Eb2N1bWVudCBSb290PC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkRvY3VtZW50IFJvb3Q8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRG9jdW1lbnRSb290Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCUVDbGFzcyBnZXREb2N1bWVudFJvb3QoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRG9jdW1lbnRSb290I2dldE1peGVkIDxlbT5NaXhlZDwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSBsaXN0ICc8ZW0+TWl4ZWQ8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRG9jdW1lbnRSb290I2dldE1peGVkKCkKLQkgKiBAc2VlICNnZXREb2N1bWVudFJvb3QoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQXR0cmlidXRlIGdldERvY3VtZW50Um9vdF9NaXhlZCgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBtYXAgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRG9jdW1lbnRSb290I2dldFhNTE5TUHJlZml4TWFwIDxlbT5YTUxOUyBQcmVmaXggTWFwPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgbWFwICc8ZW0+WE1MTlMgUHJlZml4IE1hcDwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5Eb2N1bWVudFJvb3QjZ2V0WE1MTlNQcmVmaXhNYXAoKQotCSAqIEBzZWUgI2dldERvY3VtZW50Um9vdCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVSZWZlcmVuY2UgZ2V0RG9jdW1lbnRSb290X1hNTE5TUHJlZml4TWFwKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIG1hcCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5Eb2N1bWVudFJvb3QjZ2V0WFNJU2NoZW1hTG9jYXRpb24gPGVtPlhTSSBTY2hlbWEgTG9jYXRpb248L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBtYXAgJzxlbT5YU0kgU2NoZW1hIExvY2F0aW9uPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRvY3VtZW50Um9vdCNnZXRYU0lTY2hlbWFMb2NhdGlvbigpCi0JICogQHNlZSAjZ2V0RG9jdW1lbnRSb290KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRVJlZmVyZW5jZSBnZXREb2N1bWVudFJvb3RfWFNJU2NoZW1hTG9jYXRpb24oKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRvY3VtZW50Um9vdCNnZXREZXNjcmlwdGlvbiA8ZW0+RGVzY3JpcHRpb248L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJzxlbT5EZXNjcmlwdGlvbjwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5Eb2N1bWVudFJvb3QjZ2V0RGVzY3JpcHRpb24oKQotCSAqIEBzZWUgI2dldERvY3VtZW50Um9vdCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVSZWZlcmVuY2UgZ2V0RG9jdW1lbnRSb290X0Rlc2NyaXB0aW9uKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5Eb2N1bWVudFJvb3QjZ2V0SW5kZXggPGVtPkluZGV4PC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICc8ZW0+SW5kZXg8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRG9jdW1lbnRSb290I2dldEluZGV4KCkKLQkgKiBAc2VlICNnZXREb2N1bWVudFJvb3QoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9JbmRleCgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRG9jdW1lbnRSb290I2dldE5hbWUgPGVtPk5hbWU8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJzxlbT5OYW1lPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRvY3VtZW50Um9vdCNnZXROYW1lKCkKLQkgKiBAc2VlICNnZXREb2N1bWVudFJvb3QoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9OYW1lKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguSW5kZXggPGVtPkluZGV4PC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkluZGV4PC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkluZGV4Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCUVDbGFzcyBnZXRJbmRleCgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5JbmRleCNnZXROYW1lIDxlbT5OYW1lPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxlbT5OYW1lPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkluZGV4I2dldE5hbWUoKQotCSAqIEBzZWUgI2dldEluZGV4KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRVJlZmVyZW5jZSBnZXRJbmRleF9OYW1lKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkluZGV4I2dldERlc2NyaXB0aW9uIDxlbT5EZXNjcmlwdGlvbjwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8ZW0+RGVzY3JpcHRpb248L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguSW5kZXgjZ2V0RGVzY3JpcHRpb24oKQotCSAqIEBzZWUgI2dldEluZGV4KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRVJlZmVyZW5jZSBnZXRJbmRleF9EZXNjcmlwdGlvbigpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5JbmRleCNnZXRSZWdpc3RyeSA8ZW0+UmVnaXN0cnk8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPlJlZ2lzdHJ5PC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkluZGV4I2dldFJlZ2lzdHJ5KCkKLQkgKiBAc2VlICNnZXRJbmRleCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVSZWZlcmVuY2UgZ2V0SW5kZXhfUmVnaXN0cnkoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguSW5kZXgjZ2V0VGF4b25vbXkgPGVtPlRheG9ub215PC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxlbT5UYXhvbm9teTwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5JbmRleCNnZXRUYXhvbm9teSgpCi0JICogQHNlZSAjZ2V0SW5kZXgoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFUmVmZXJlbmNlIGdldEluZGV4X1RheG9ub215KCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguTmFtZSA8ZW0+TmFtZTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5OYW1lPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4Lk5hbWUKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUNsYXNzIGdldE5hbWVfKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5OYW1lI2dldFZhbHVlIDxlbT5WYWx1ZTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlZhbHVlPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4Lk5hbWUjZ2V0VmFsdWUoKQotCSAqIEBzZWUgI2dldE5hbWVfKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUF0dHJpYnV0ZSBnZXROYW1lX1ZhbHVlKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5OYW1lI2dldExhbmcgPGVtPkxhbmc8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5MYW5nPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4Lk5hbWUjZ2V0TGFuZygpCi0JICogQHNlZSAjZ2V0TmFtZV8oKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQXR0cmlidXRlIGdldE5hbWVfTGFuZygpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JUlRJbmRleEZhY3RvcnkgZ2V0UlRJbmRleEZhY3RvcnkoKTsKLQotfSAvL1JUSW5kZXhQYWNrYWdlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L2ltcGwvRGVzY3JpcHRpb25JbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L2ltcGwvRGVzY3JpcHRpb25JbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmOGNiNTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC9pbXBsL0Rlc2NyaXB0aW9uSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjE2ICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogRGVzY3JpcHRpb25JbXBsLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0OCBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU9iamVjdEltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LlJUSW5kZXhQYWNrYWdlOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RGVzY3JpcHRpb248L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5pbXBsLkRlc2NyaXB0aW9uSW1wbCNnZXRWYWx1ZSA8ZW0+VmFsdWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5pbXBsLkRlc2NyaXB0aW9uSW1wbCNnZXRMYW5nIDxlbT5MYW5nPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgRGVzY3JpcHRpb25JbXBsIGV4dGVuZHMgRU9iamVjdEltcGwgaW1wbGVtZW50cyBEZXNjcmlwdGlvbiB7Ci0JLyoqCi0JICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZhbHVlKCkgPGVtPlZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRWYWx1ZSgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgVkFMVUVfRURFRkFVTFQgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmFsdWUoKSA8ZW0+VmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldFZhbHVlKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgU3RyaW5nIHZhbHVlID0gVkFMVUVfRURFRkFVTFQ7Ci0KLQkvKioKLQkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TGFuZygpIDxlbT5MYW5nPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRMYW5nKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBMQU5HX0VERUZBVUxUID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldExhbmcoKSA8ZW0+TGFuZzwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0TGFuZygpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIFN0cmluZyBsYW5nID0gTEFOR19FREVGQVVMVDsKLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBEZXNjcmlwdGlvbkltcGwoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7Ci0JCXJldHVybiBSVEluZGV4UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RGVzY3JpcHRpb24oKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFZhbHVlKCkgewotCQlyZXR1cm4gdmFsdWU7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0VmFsdWUoU3RyaW5nIG5ld1ZhbHVlKSB7Ci0JCVN0cmluZyBvbGRWYWx1ZSA9IHZhbHVlOwotCQl2YWx1ZSA9IG5ld1ZhbHVlOwotCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0JCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBSVEluZGV4UGFja2FnZS5ERVNDUklQVElPTl9fVkFMVUUsIG9sZFZhbHVlLCB2YWx1ZSkpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0TGFuZygpIHsKLQkJcmV0dXJuIGxhbmc7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0TGFuZyhTdHJpbmcgbmV3TGFuZykgewotCQlTdHJpbmcgb2xkTGFuZyA9IGxhbmc7Ci0JCWxhbmcgPSBuZXdMYW5nOwotCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0JCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBSVEluZGV4UGFja2FnZS5ERVNDUklQVElPTl9fTEFORywgb2xkTGFuZywgbGFuZykpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBPYmplY3QgZUdldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUsIGJvb2xlYW4gcmVzb2x2ZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuREVTQ1JJUFRJT05fX1ZBTFVFOgotCQkJCXJldHVybiBnZXRWYWx1ZSgpOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ERVNDUklQVElPTl9fTEFORzoKLQkJCQlyZXR1cm4gZ2V0TGFuZygpOwotCQl9Ci0JCXJldHVybiBlRHluYW1pY0dldChlRmVhdHVyZSwgcmVzb2x2ZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgZVNldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUsIE9iamVjdCBuZXdWYWx1ZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuREVTQ1JJUFRJT05fX1ZBTFVFOgotCQkJCXNldFZhbHVlKChTdHJpbmcpbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuREVTQ1JJUFRJT05fX0xBTkc6Ci0JCQkJc2V0TGFuZygoU3RyaW5nKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCX0KLQkJZUR5bmFtaWNTZXQoZUZlYXR1cmUsIG5ld1ZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBlVW5zZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ERVNDUklQVElPTl9fVkFMVUU6Ci0JCQkJc2V0VmFsdWUoVkFMVUVfRURFRkFVTFQpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuREVTQ1JJUFRJT05fX0xBTkc6Ci0JCQkJc2V0TGFuZyhMQU5HX0VERUZBVUxUKTsKLQkJCQlyZXR1cm47Ci0JCX0KLQkJZUR5bmFtaWNVbnNldChlRmVhdHVyZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIGJvb2xlYW4gZUlzU2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuREVTQ1JJUFRJT05fX1ZBTFVFOgotCQkJCXJldHVybiBWQUxVRV9FREVGQVVMVCA9PSBudWxsID8gdmFsdWUgIT0gbnVsbCA6ICFWQUxVRV9FREVGQVVMVC5lcXVhbHModmFsdWUpOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ERVNDUklQVElPTl9fTEFORzoKLQkJCQlyZXR1cm4gTEFOR19FREVGQVVMVCA9PSBudWxsID8gbGFuZyAhPSBudWxsIDogIUxBTkdfRURFRkFVTFQuZXF1YWxzKGxhbmcpOwotCQl9Ci0JCXJldHVybiBlRHluYW1pY0lzU2V0KGVGZWF0dXJlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7Ci0KLQkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7Ci0JCXJlc3VsdC5hcHBlbmQoIiAodmFsdWU6ICIpOwotCQlyZXN1bHQuYXBwZW5kKHZhbHVlKTsKLQkJcmVzdWx0LmFwcGVuZCgiLCBsYW5nOiAiKTsKLQkJcmVzdWx0LmFwcGVuZChsYW5nKTsKLQkJcmVzdWx0LmFwcGVuZCgnKScpOwotCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0JfQotCi19IC8vRGVzY3JpcHRpb25JbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L2ltcGwvRG9jdW1lbnRSb290SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC9pbXBsL0RvY3VtZW50Um9vdEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQ4ZGJjMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L2ltcGwvRG9jdW1lbnRSb290SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzY3ICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogRG9jdW1lbnRSb290SW1wbC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDggY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguaW1wbDsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uQ2hhaW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRU1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRWNvcmVQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FT2JqZWN0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FU3RyaW5nVG9TdHJpbmdNYXBFbnRyeUltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5CYXNpY0ZlYXR1cmVNYXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVFTWFwOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkZlYXR1cmVNYXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuSW50ZXJuYWxFTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5EZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRG9jdW1lbnRSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5JbmRleDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguUlRJbmRleFBhY2thZ2U7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Eb2N1bWVudCBSb290PC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguaW1wbC5Eb2N1bWVudFJvb3RJbXBsI2dldE1peGVkIDxlbT5NaXhlZDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmltcGwuRG9jdW1lbnRSb290SW1wbCNnZXRYTUxOU1ByZWZpeE1hcCA8ZW0+WE1MTlMgUHJlZml4IE1hcDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmltcGwuRG9jdW1lbnRSb290SW1wbCNnZXRYU0lTY2hlbWFMb2NhdGlvbiA8ZW0+WFNJIFNjaGVtYSBMb2NhdGlvbjwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmltcGwuRG9jdW1lbnRSb290SW1wbCNnZXREZXNjcmlwdGlvbiA8ZW0+RGVzY3JpcHRpb248L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5pbXBsLkRvY3VtZW50Um9vdEltcGwjZ2V0SW5kZXggPGVtPkluZGV4PC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguaW1wbC5Eb2N1bWVudFJvb3RJbXBsI2dldE5hbWUgPGVtPk5hbWU8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBEb2N1bWVudFJvb3RJbXBsIGV4dGVuZHMgRU9iamVjdEltcGwgaW1wbGVtZW50cyBEb2N1bWVudFJvb3QgewotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE1peGVkKCkgPGVtPk1peGVkPC9lbT59JyBhdHRyaWJ1dGUgbGlzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldE1peGVkKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRmVhdHVyZU1hcCBtaXhlZCA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRYTUxOU1ByZWZpeE1hcCgpIDxlbT5YTUxOUyBQcmVmaXggTWFwPC9lbT59JyBtYXAuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRYTUxOU1ByZWZpeE1hcCgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIEVNYXAgeE1MTlNQcmVmaXhNYXAgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0WFNJU2NoZW1hTG9jYXRpb24oKSA8ZW0+WFNJIFNjaGVtYSBMb2NhdGlvbjwvZW0+fScgbWFwLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0WFNJU2NoZW1hTG9jYXRpb24oKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBFTWFwIHhTSVNjaGVtYUxvY2F0aW9uID0gbnVsbDsKLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBEb2N1bWVudFJvb3RJbXBsKCkgewotCQlzdXBlcigpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgewotCQlyZXR1cm4gUlRJbmRleFBhY2thZ2UuZUlOU1RBTkNFLmdldERvY3VtZW50Um9vdCgpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBGZWF0dXJlTWFwIGdldE1peGVkKCkgewotCQlpZiAobWl4ZWQgPT0gbnVsbCkgewotCQkJbWl4ZWQgPSBuZXcgQmFzaWNGZWF0dXJlTWFwKHRoaXMsIFJUSW5kZXhQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX01JWEVEKTsKLQkJfQotCQlyZXR1cm4gbWl4ZWQ7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVNYXAgZ2V0WE1MTlNQcmVmaXhNYXAoKSB7Ci0JCWlmICh4TUxOU1ByZWZpeE1hcCA9PSBudWxsKSB7Ci0JCQl4TUxOU1ByZWZpeE1hcCA9IG5ldyBFY29yZUVNYXAoRWNvcmVQYWNrYWdlLmVJTlNUQU5DRS5nZXRFU3RyaW5nVG9TdHJpbmdNYXBFbnRyeSgpLCBFU3RyaW5nVG9TdHJpbmdNYXBFbnRyeUltcGwuY2xhc3MsIHRoaXMsIFJUSW5kZXhQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hNTE5TX1BSRUZJWF9NQVApOwotCQl9Ci0JCXJldHVybiB4TUxOU1ByZWZpeE1hcDsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRU1hcCBnZXRYU0lTY2hlbWFMb2NhdGlvbigpIHsKLQkJaWYgKHhTSVNjaGVtYUxvY2F0aW9uID09IG51bGwpIHsKLQkJCXhTSVNjaGVtYUxvY2F0aW9uID0gbmV3IEVjb3JlRU1hcChFY29yZVBhY2thZ2UuZUlOU1RBTkNFLmdldEVTdHJpbmdUb1N0cmluZ01hcEVudHJ5KCksIEVTdHJpbmdUb1N0cmluZ01hcEVudHJ5SW1wbC5jbGFzcywgdGhpcywgUlRJbmRleFBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTik7Ci0JCX0KLQkJcmV0dXJuIHhTSVNjaGVtYUxvY2F0aW9uOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBEZXNjcmlwdGlvbiBnZXREZXNjcmlwdGlvbigpIHsKLQkJcmV0dXJuIChEZXNjcmlwdGlvbilnZXRNaXhlZCgpLmdldChSVEluZGV4UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RG9jdW1lbnRSb290X0Rlc2NyaXB0aW9uKCksIHRydWUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBiYXNpY1NldERlc2NyaXB0aW9uKERlc2NyaXB0aW9uIG5ld0Rlc2NyaXB0aW9uLCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7Ci0JCXJldHVybiAoKEZlYXR1cmVNYXAuSW50ZXJuYWwpZ2V0TWl4ZWQoKSkuYmFzaWNBZGQoUlRJbmRleFBhY2thZ2UuZUlOU1RBTkNFLmdldERvY3VtZW50Um9vdF9EZXNjcmlwdGlvbigpLCBuZXdEZXNjcmlwdGlvbiwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0RGVzY3JpcHRpb24oRGVzY3JpcHRpb24gbmV3RGVzY3JpcHRpb24pIHsKLQkJKChGZWF0dXJlTWFwLkludGVybmFsKWdldE1peGVkKCkpLnNldChSVEluZGV4UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RG9jdW1lbnRSb290X0Rlc2NyaXB0aW9uKCksIG5ld0Rlc2NyaXB0aW9uKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgSW5kZXggZ2V0SW5kZXgoKSB7Ci0JCXJldHVybiAoSW5kZXgpZ2V0TWl4ZWQoKS5nZXQoUlRJbmRleFBhY2thZ2UuZUlOU1RBTkNFLmdldERvY3VtZW50Um9vdF9JbmRleCgpLCB0cnVlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gYmFzaWNTZXRJbmRleChJbmRleCBuZXdJbmRleCwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgewotCQlyZXR1cm4gKChGZWF0dXJlTWFwLkludGVybmFsKWdldE1peGVkKCkpLmJhc2ljQWRkKFJUSW5kZXhQYWNrYWdlLmVJTlNUQU5DRS5nZXREb2N1bWVudFJvb3RfSW5kZXgoKSwgbmV3SW5kZXgsIG51bGwpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldEluZGV4KEluZGV4IG5ld0luZGV4KSB7Ci0JCSgoRmVhdHVyZU1hcC5JbnRlcm5hbClnZXRNaXhlZCgpKS5zZXQoUlRJbmRleFBhY2thZ2UuZUlOU1RBTkNFLmdldERvY3VtZW50Um9vdF9JbmRleCgpLCBuZXdJbmRleCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE5hbWUgZ2V0TmFtZSgpIHsKLQkJcmV0dXJuIChOYW1lKWdldE1peGVkKCkuZ2V0KFJUSW5kZXhQYWNrYWdlLmVJTlNUQU5DRS5nZXREb2N1bWVudFJvb3RfTmFtZSgpLCB0cnVlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gYmFzaWNTZXROYW1lKE5hbWUgbmV3TmFtZSwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgewotCQlyZXR1cm4gKChGZWF0dXJlTWFwLkludGVybmFsKWdldE1peGVkKCkpLmJhc2ljQWRkKFJUSW5kZXhQYWNrYWdlLmVJTlNUQU5DRS5nZXREb2N1bWVudFJvb3RfTmFtZSgpLCBuZXdOYW1lLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXROYW1lKE5hbWUgbmV3TmFtZSkgewotCQkoKEZlYXR1cmVNYXAuSW50ZXJuYWwpZ2V0TWl4ZWQoKSkuc2V0KFJUSW5kZXhQYWNrYWdlLmVJTlNUQU5DRS5nZXREb2N1bWVudFJvb3RfTmFtZSgpLCBuZXdOYW1lKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gZUludmVyc2VSZW1vdmUoSW50ZXJuYWxFT2JqZWN0IG90aGVyRW5kLCBpbnQgZmVhdHVyZUlELCBDbGFzcyBiYXNlQ2xhc3MsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKLQkJaWYgKGZlYXR1cmVJRCA+PSAwKSB7Ci0JCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChmZWF0dXJlSUQsIGJhc2VDbGFzcykpIHsKLQkJCQljYXNlIFJUSW5kZXhQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX01JWEVEOgotCQkJCQlyZXR1cm4gKChJbnRlcm5hbEVMaXN0KWdldE1peGVkKCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKLQkJCQljYXNlIFJUSW5kZXhQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hNTE5TX1BSRUZJWF9NQVA6Ci0JCQkJCXJldHVybiAoKEludGVybmFsRUxpc3QpZ2V0WE1MTlNQcmVmaXhNYXAoKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOwotCQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTjoKLQkJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRYU0lTY2hlbWFMb2NhdGlvbigpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0JCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ET0NVTUVOVF9ST09UX19ERVNDUklQVElPTjoKLQkJCQkJcmV0dXJuIGJhc2ljU2V0RGVzY3JpcHRpb24obnVsbCwgbXNncyk7Ci0JCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ET0NVTUVOVF9ST09UX19JTkRFWDoKLQkJCQkJcmV0dXJuIGJhc2ljU2V0SW5kZXgobnVsbCwgbXNncyk7Ci0JCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ET0NVTUVOVF9ST09UX19OQU1FOgotCQkJCQlyZXR1cm4gYmFzaWNTZXROYW1lKG51bGwsIG1zZ3MpOwotCQkJCWRlZmF1bHQ6Ci0JCQkJCXJldHVybiBlRHluYW1pY0ludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgYmFzZUNsYXNzLCBtc2dzKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZUJhc2ljU2V0Q29udGFpbmVyKG51bGwsIGZlYXR1cmVJRCwgbXNncyk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBlR2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSwgYm9vbGVhbiByZXNvbHZlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ET0NVTUVOVF9ST09UX19NSVhFRDoKLQkJCQlyZXR1cm4gZ2V0TWl4ZWQoKTsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWE1MTlNfUFJFRklYX01BUDoKLQkJCQlyZXR1cm4gZ2V0WE1MTlNQcmVmaXhNYXAoKTsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTjoKLQkJCQlyZXR1cm4gZ2V0WFNJU2NoZW1hTG9jYXRpb24oKTsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fREVTQ1JJUFRJT046Ci0JCQkJcmV0dXJuIGdldERlc2NyaXB0aW9uKCk7Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX0lOREVYOgotCQkJCXJldHVybiBnZXRJbmRleCgpOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ET0NVTUVOVF9ST09UX19OQU1FOgotCQkJCXJldHVybiBnZXROYW1lKCk7Ci0JCX0KLQkJcmV0dXJuIGVEeW5hbWljR2V0KGVGZWF0dXJlLCByZXNvbHZlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBlU2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSwgT2JqZWN0IG5ld1ZhbHVlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ET0NVTUVOVF9ST09UX19NSVhFRDoKLQkJCQlnZXRNaXhlZCgpLmNsZWFyKCk7Ci0JCQkJZ2V0TWl4ZWQoKS5hZGRBbGwoKENvbGxlY3Rpb24pbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWE1MTlNfUFJFRklYX01BUDoKLQkJCQlnZXRYTUxOU1ByZWZpeE1hcCgpLmNsZWFyKCk7Ci0JCQkJZ2V0WE1MTlNQcmVmaXhNYXAoKS5hZGRBbGwoKENvbGxlY3Rpb24pbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTjoKLQkJCQlnZXRYU0lTY2hlbWFMb2NhdGlvbigpLmNsZWFyKCk7Ci0JCQkJZ2V0WFNJU2NoZW1hTG9jYXRpb24oKS5hZGRBbGwoKENvbGxlY3Rpb24pbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fREVTQ1JJUFRJT046Ci0JCQkJc2V0RGVzY3JpcHRpb24oKERlc2NyaXB0aW9uKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX0lOREVYOgotCQkJCXNldEluZGV4KChJbmRleCluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ET0NVTUVOVF9ST09UX19OQU1FOgotCQkJCXNldE5hbWUoKE5hbWUpbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJfQotCQllRHluYW1pY1NldChlRmVhdHVyZSwgbmV3VmFsdWUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGVVbnNldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX01JWEVEOgotCQkJCWdldE1peGVkKCkuY2xlYXIoKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hNTE5TX1BSRUZJWF9NQVA6Ci0JCQkJZ2V0WE1MTlNQcmVmaXhNYXAoKS5jbGVhcigpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTjoKLQkJCQlnZXRYU0lTY2hlbWFMb2NhdGlvbigpLmNsZWFyKCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ET0NVTUVOVF9ST09UX19ERVNDUklQVElPTjoKLQkJCQlzZXREZXNjcmlwdGlvbigoRGVzY3JpcHRpb24pbnVsbCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ET0NVTUVOVF9ST09UX19JTkRFWDoKLQkJCQlzZXRJbmRleCgoSW5kZXgpbnVsbCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ET0NVTUVOVF9ST09UX19OQU1FOgotCQkJCXNldE5hbWUoKE5hbWUpbnVsbCk7Ci0JCQkJcmV0dXJuOwotCQl9Ci0JCWVEeW5hbWljVW5zZXQoZUZlYXR1cmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBib29sZWFuIGVJc1NldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX01JWEVEOgotCQkJCXJldHVybiBtaXhlZCAhPSBudWxsICYmICFtaXhlZC5pc0VtcHR5KCk7Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hNTE5TX1BSRUZJWF9NQVA6Ci0JCQkJcmV0dXJuIHhNTE5TUHJlZml4TWFwICE9IG51bGwgJiYgIXhNTE5TUHJlZml4TWFwLmlzRW1wdHkoKTsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTjoKLQkJCQlyZXR1cm4geFNJU2NoZW1hTG9jYXRpb24gIT0gbnVsbCAmJiAheFNJU2NoZW1hTG9jYXRpb24uaXNFbXB0eSgpOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ET0NVTUVOVF9ST09UX19ERVNDUklQVElPTjoKLQkJCQlyZXR1cm4gZ2V0RGVzY3JpcHRpb24oKSAhPSBudWxsOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ET0NVTUVOVF9ST09UX19JTkRFWDoKLQkJCQlyZXR1cm4gZ2V0SW5kZXgoKSAhPSBudWxsOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ET0NVTUVOVF9ST09UX19OQU1FOgotCQkJCXJldHVybiBnZXROYW1lKCkgIT0gbnVsbDsKLQkJfQotCQlyZXR1cm4gZUR5bmFtaWNJc1NldChlRmVhdHVyZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOwotCi0JCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOwotCQlyZXN1bHQuYXBwZW5kKCIgKG1peGVkOiAiKTsKLQkJcmVzdWx0LmFwcGVuZChtaXhlZCk7Ci0JCXJlc3VsdC5hcHBlbmQoJyknKTsKLQkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotCX0KLQotfSAvL0RvY3VtZW50Um9vdEltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvaW1wbC9JbmRleEltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvaW1wbC9JbmRleEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOThkYzA4ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L2ltcGwvSW5kZXhJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNjcgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBJbmRleEltcGwuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ4IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmltcGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbkNoYWluOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FT2JqZWN0SW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVPYmplY3RDb250YWlubWVudEVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkludGVybmFsRUxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5JbmRleDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguUlRJbmRleFBhY2thZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215OwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SW5kZXg8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5pbXBsLkluZGV4SW1wbCNnZXROYW1lIDxlbT5OYW1lPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguaW1wbC5JbmRleEltcGwjZ2V0RGVzY3JpcHRpb24gPGVtPkRlc2NyaXB0aW9uPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguaW1wbC5JbmRleEltcGwjZ2V0UmVnaXN0cnkgPGVtPlJlZ2lzdHJ5PC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguaW1wbC5JbmRleEltcGwjZ2V0VGF4b25vbXkgPGVtPlRheG9ub215PC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgSW5kZXhJbXBsIGV4dGVuZHMgRU9iamVjdEltcGwgaW1wbGVtZW50cyBJbmRleCB7Ci0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmFtZSgpIDxlbT5OYW1lPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldE5hbWUoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBFTGlzdCBuYW1lID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERlc2NyaXB0aW9uKCkgPGVtPkRlc2NyaXB0aW9uPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldERlc2NyaXB0aW9uKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRUxpc3QgZGVzY3JpcHRpb24gPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UmVnaXN0cnkoKSA8ZW0+UmVnaXN0cnk8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0UmVnaXN0cnkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBFTGlzdCByZWdpc3RyeSA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUYXhvbm9teSgpIDxlbT5UYXhvbm9teTwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRUYXhvbm9teSgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIEVMaXN0IHRheG9ub215ID0gbnVsbDsKLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBJbmRleEltcGwoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7Ci0JCXJldHVybiBSVEluZGV4UGFja2FnZS5lSU5TVEFOQ0UuZ2V0SW5kZXgoKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUxpc3QgZ2V0TmFtZSgpIHsKLQkJaWYgKG5hbWUgPT0gbnVsbCkgewotCQkJbmFtZSA9IG5ldyBFT2JqZWN0Q29udGFpbm1lbnRFTGlzdChOYW1lLmNsYXNzLCB0aGlzLCBSVEluZGV4UGFja2FnZS5JTkRFWF9fTkFNRSk7Ci0JCX0KLQkJcmV0dXJuIG5hbWU7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVMaXN0IGdldERlc2NyaXB0aW9uKCkgewotCQlpZiAoZGVzY3JpcHRpb24gPT0gbnVsbCkgewotCQkJZGVzY3JpcHRpb24gPSBuZXcgRU9iamVjdENvbnRhaW5tZW50RUxpc3QoRGVzY3JpcHRpb24uY2xhc3MsIHRoaXMsIFJUSW5kZXhQYWNrYWdlLklOREVYX19ERVNDUklQVElPTik7Ci0JCX0KLQkJcmV0dXJuIGRlc2NyaXB0aW9uOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFTGlzdCBnZXRSZWdpc3RyeSgpIHsKLQkJaWYgKHJlZ2lzdHJ5ID09IG51bGwpIHsKLQkJCXJlZ2lzdHJ5ID0gbmV3IEVPYmplY3RDb250YWlubWVudEVMaXN0KFJlZ2lzdHJ5LmNsYXNzLCB0aGlzLCBSVEluZGV4UGFja2FnZS5JTkRFWF9fUkVHSVNUUlkpOwotCQl9Ci0JCXJldHVybiByZWdpc3RyeTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUxpc3QgZ2V0VGF4b25vbXkoKSB7Ci0JCWlmICh0YXhvbm9teSA9PSBudWxsKSB7Ci0JCQl0YXhvbm9teSA9IG5ldyBFT2JqZWN0Q29udGFpbm1lbnRFTGlzdChUYXhvbm9teS5jbGFzcywgdGhpcywgUlRJbmRleFBhY2thZ2UuSU5ERVhfX1RBWE9OT01ZKTsKLQkJfQotCQlyZXR1cm4gdGF4b25vbXk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgQ2xhc3MgYmFzZUNsYXNzLCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7Ci0JCWlmIChmZWF0dXJlSUQgPj0gMCkgewotCQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZmVhdHVyZUlELCBiYXNlQ2xhc3MpKSB7Ci0JCQkJY2FzZSBSVEluZGV4UGFja2FnZS5JTkRFWF9fTkFNRToKLQkJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXROYW1lKCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKLQkJCQljYXNlIFJUSW5kZXhQYWNrYWdlLklOREVYX19ERVNDUklQVElPTjoKLQkJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXREZXNjcmlwdGlvbigpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0JCQkJY2FzZSBSVEluZGV4UGFja2FnZS5JTkRFWF9fUkVHSVNUUlk6Ci0JCQkJCXJldHVybiAoKEludGVybmFsRUxpc3QpZ2V0UmVnaXN0cnkoKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOwotCQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuSU5ERVhfX1RBWE9OT01ZOgotCQkJCQlyZXR1cm4gKChJbnRlcm5hbEVMaXN0KWdldFRheG9ub215KCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKLQkJCQlkZWZhdWx0OgotCQkJCQlyZXR1cm4gZUR5bmFtaWNJbnZlcnNlUmVtb3ZlKG90aGVyRW5kLCBmZWF0dXJlSUQsIGJhc2VDbGFzcywgbXNncyk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGVCYXNpY1NldENvbnRhaW5lcihudWxsLCBmZWF0dXJlSUQsIG1zZ3MpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBPYmplY3QgZUdldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUsIGJvb2xlYW4gcmVzb2x2ZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuSU5ERVhfX05BTUU6Ci0JCQkJcmV0dXJuIGdldE5hbWUoKTsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuSU5ERVhfX0RFU0NSSVBUSU9OOgotCQkJCXJldHVybiBnZXREZXNjcmlwdGlvbigpOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5JTkRFWF9fUkVHSVNUUlk6Ci0JCQkJcmV0dXJuIGdldFJlZ2lzdHJ5KCk7Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLklOREVYX19UQVhPTk9NWToKLQkJCQlyZXR1cm4gZ2V0VGF4b25vbXkoKTsKLQkJfQotCQlyZXR1cm4gZUR5bmFtaWNHZXQoZUZlYXR1cmUsIHJlc29sdmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGVTZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlLCBPYmplY3QgbmV3VmFsdWUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLklOREVYX19OQU1FOgotCQkJCWdldE5hbWUoKS5jbGVhcigpOwotCQkJCWdldE5hbWUoKS5hZGRBbGwoKENvbGxlY3Rpb24pbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuSU5ERVhfX0RFU0NSSVBUSU9OOgotCQkJCWdldERlc2NyaXB0aW9uKCkuY2xlYXIoKTsKLQkJCQlnZXREZXNjcmlwdGlvbigpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5JTkRFWF9fUkVHSVNUUlk6Ci0JCQkJZ2V0UmVnaXN0cnkoKS5jbGVhcigpOwotCQkJCWdldFJlZ2lzdHJ5KCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLklOREVYX19UQVhPTk9NWToKLQkJCQlnZXRUYXhvbm9teSgpLmNsZWFyKCk7Ci0JCQkJZ2V0VGF4b25vbXkoKS5hZGRBbGwoKENvbGxlY3Rpb24pbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJfQotCQllRHluYW1pY1NldChlRmVhdHVyZSwgbmV3VmFsdWUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGVVbnNldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLklOREVYX19OQU1FOgotCQkJCWdldE5hbWUoKS5jbGVhcigpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuSU5ERVhfX0RFU0NSSVBUSU9OOgotCQkJCWdldERlc2NyaXB0aW9uKCkuY2xlYXIoKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLklOREVYX19SRUdJU1RSWToKLQkJCQlnZXRSZWdpc3RyeSgpLmNsZWFyKCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5JTkRFWF9fVEFYT05PTVk6Ci0JCQkJZ2V0VGF4b25vbXkoKS5jbGVhcigpOwotCQkJCXJldHVybjsKLQkJfQotCQllRHluYW1pY1Vuc2V0KGVGZWF0dXJlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5JTkRFWF9fTkFNRToKLQkJCQlyZXR1cm4gbmFtZSAhPSBudWxsICYmICFuYW1lLmlzRW1wdHkoKTsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuSU5ERVhfX0RFU0NSSVBUSU9OOgotCQkJCXJldHVybiBkZXNjcmlwdGlvbiAhPSBudWxsICYmICFkZXNjcmlwdGlvbi5pc0VtcHR5KCk7Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLklOREVYX19SRUdJU1RSWToKLQkJCQlyZXR1cm4gcmVnaXN0cnkgIT0gbnVsbCAmJiAhcmVnaXN0cnkuaXNFbXB0eSgpOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5JTkRFWF9fVEFYT05PTVk6Ci0JCQkJcmV0dXJuIHRheG9ub215ICE9IG51bGwgJiYgIXRheG9ub215LmlzRW1wdHkoKTsKLQkJfQotCQlyZXR1cm4gZUR5bmFtaWNJc1NldChlRmVhdHVyZSk7Ci0JfQotCi19IC8vSW5kZXhJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L2ltcGwvTmFtZUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvaW1wbC9OYW1lSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjY4NTI0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvaW1wbC9OYW1lSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjE2ICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogTmFtZUltcGwuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ4IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FT2JqZWN0SW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5OYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5SVEluZGV4UGFja2FnZTsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5pbXBsLk5hbWVJbXBsI2dldFZhbHVlIDxlbT5WYWx1ZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmltcGwuTmFtZUltcGwjZ2V0TGFuZyA8ZW0+TGFuZzwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIE5hbWVJbXBsIGV4dGVuZHMgRU9iamVjdEltcGwgaW1wbGVtZW50cyBOYW1lIHsKLQkvKioKLQkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmFsdWUoKSA8ZW0+VmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldFZhbHVlKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBWQUxVRV9FREVGQVVMVCA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRWYWx1ZSgpIDxlbT5WYWx1ZTwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0VmFsdWUoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBTdHJpbmcgdmFsdWUgPSBWQUxVRV9FREVGQVVMVDsKLQotCS8qKgotCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRMYW5nKCkgPGVtPkxhbmc8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldExhbmcoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIExBTkdfRURFRkFVTFQgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TGFuZygpIDxlbT5MYW5nPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRMYW5nKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgU3RyaW5nIGxhbmcgPSBMQU5HX0VERUZBVUxUOwotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIE5hbWVJbXBsKCkgewotCQlzdXBlcigpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgewotCQlyZXR1cm4gUlRJbmRleFBhY2thZ2UuZUlOU1RBTkNFLmdldE5hbWVfKCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRWYWx1ZSgpIHsKLQkJcmV0dXJuIHZhbHVlOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldFZhbHVlKFN0cmluZyBuZXdWYWx1ZSkgewotCQlTdHJpbmcgb2xkVmFsdWUgPSB2YWx1ZTsKLQkJdmFsdWUgPSBuZXdWYWx1ZTsKLQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgUlRJbmRleFBhY2thZ2UuTkFNRV9fVkFMVUUsIG9sZFZhbHVlLCB2YWx1ZSkpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0TGFuZygpIHsKLQkJcmV0dXJuIGxhbmc7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0TGFuZyhTdHJpbmcgbmV3TGFuZykgewotCQlTdHJpbmcgb2xkTGFuZyA9IGxhbmc7Ci0JCWxhbmcgPSBuZXdMYW5nOwotCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0JCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBSVEluZGV4UGFja2FnZS5OQU1FX19MQU5HLCBvbGRMYW5nLCBsYW5nKSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBlR2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSwgYm9vbGVhbiByZXNvbHZlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5OQU1FX19WQUxVRToKLQkJCQlyZXR1cm4gZ2V0VmFsdWUoKTsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuTkFNRV9fTEFORzoKLQkJCQlyZXR1cm4gZ2V0TGFuZygpOwotCQl9Ci0JCXJldHVybiBlRHluYW1pY0dldChlRmVhdHVyZSwgcmVzb2x2ZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgZVNldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUsIE9iamVjdCBuZXdWYWx1ZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuTkFNRV9fVkFMVUU6Ci0JCQkJc2V0VmFsdWUoKFN0cmluZyluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5OQU1FX19MQU5HOgotCQkJCXNldExhbmcoKFN0cmluZyluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQl9Ci0JCWVEeW5hbWljU2V0KGVGZWF0dXJlLCBuZXdWYWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgZVVuc2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuTkFNRV9fVkFMVUU6Ci0JCQkJc2V0VmFsdWUoVkFMVUVfRURFRkFVTFQpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuTkFNRV9fTEFORzoKLQkJCQlzZXRMYW5nKExBTkdfRURFRkFVTFQpOwotCQkJCXJldHVybjsKLQkJfQotCQllRHluYW1pY1Vuc2V0KGVGZWF0dXJlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5OQU1FX19WQUxVRToKLQkJCQlyZXR1cm4gVkFMVUVfRURFRkFVTFQgPT0gbnVsbCA/IHZhbHVlICE9IG51bGwgOiAhVkFMVUVfRURFRkFVTFQuZXF1YWxzKHZhbHVlKTsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuTkFNRV9fTEFORzoKLQkJCQlyZXR1cm4gTEFOR19FREVGQVVMVCA9PSBudWxsID8gbGFuZyAhPSBudWxsIDogIUxBTkdfRURFRkFVTFQuZXF1YWxzKGxhbmcpOwotCQl9Ci0JCXJldHVybiBlRHluYW1pY0lzU2V0KGVGZWF0dXJlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7Ci0KLQkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7Ci0JCXJlc3VsdC5hcHBlbmQoIiAodmFsdWU6ICIpOwotCQlyZXN1bHQuYXBwZW5kKHZhbHVlKTsKLQkJcmVzdWx0LmFwcGVuZCgiLCBsYW5nOiAiKTsKLQkJcmVzdWx0LmFwcGVuZChsYW5nKTsKLQkJcmVzdWx0LmFwcGVuZCgnKScpOwotCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0JfQotCi19IC8vTmFtZUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvaW1wbC9SVEluZGV4RmFjdG9yeUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvaW1wbC9SVEluZGV4RmFjdG9yeUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWVmYTMzYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L2ltcGwvUlRJbmRleEZhY3RvcnlJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDggKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBSVEluZGV4RmFjdG9yeUltcGwuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ4IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRUZhY3RvcnlJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4Lio7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5GYWN0b3J5PC9iPi4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgUlRJbmRleEZhY3RvcnlJbXBsIGV4dGVuZHMgRUZhY3RvcnlJbXBsIGltcGxlbWVudHMgUlRJbmRleEZhY3RvcnkgewotCS8qKgotCSAqIENyZWF0ZXMgYW5kIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBSVEluZGV4RmFjdG9yeUltcGwoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVPYmplY3QgY3JlYXRlKEVDbGFzcyBlQ2xhc3MpIHsKLQkJc3dpdGNoIChlQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCkpIHsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuREVTQ1JJUFRJT046IHJldHVybiBjcmVhdGVEZXNjcmlwdGlvbigpOwotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5ET0NVTUVOVF9ST09UOiByZXR1cm4gY3JlYXRlRG9jdW1lbnRSb290KCk7Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLklOREVYOiByZXR1cm4gY3JlYXRlSW5kZXgoKTsKLQkJCWNhc2UgUlRJbmRleFBhY2thZ2UuTkFNRTogcmV0dXJuIGNyZWF0ZU5hbWUoKTsKLQkJCWRlZmF1bHQ6Ci0JCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlIGNsYXNzICciICsgZUNsYXNzLmdldE5hbWUoKSArICInIGlzIG5vdCBhIHZhbGlkIGNsYXNzaWZpZXIiKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBEZXNjcmlwdGlvbiBjcmVhdGVEZXNjcmlwdGlvbigpIHsKLQkJRGVzY3JpcHRpb25JbXBsIGRlc2NyaXB0aW9uID0gbmV3IERlc2NyaXB0aW9uSW1wbCgpOwotCQlyZXR1cm4gZGVzY3JpcHRpb247Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIERvY3VtZW50Um9vdCBjcmVhdGVEb2N1bWVudFJvb3QoKSB7Ci0JCURvY3VtZW50Um9vdEltcGwgZG9jdW1lbnRSb290ID0gbmV3IERvY3VtZW50Um9vdEltcGwoKTsKLQkJcmV0dXJuIGRvY3VtZW50Um9vdDsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgSW5kZXggY3JlYXRlSW5kZXgoKSB7Ci0JCUluZGV4SW1wbCBpbmRleCA9IG5ldyBJbmRleEltcGwoKTsKLQkJcmV0dXJuIGluZGV4OwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBOYW1lIGNyZWF0ZU5hbWUoKSB7Ci0JCU5hbWVJbXBsIG5hbWUgPSBuZXcgTmFtZUltcGwoKTsKLQkJcmV0dXJuIG5hbWU7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFJUSW5kZXhQYWNrYWdlIGdldFJUSW5kZXhQYWNrYWdlKCkgewotCQlyZXR1cm4gKFJUSW5kZXhQYWNrYWdlKWdldEVQYWNrYWdlKCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZGVwcmVjYXRlZAotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFJUSW5kZXhQYWNrYWdlIGdldFBhY2thZ2UoKSB7Ci0JCXJldHVybiBSVEluZGV4UGFja2FnZS5lSU5TVEFOQ0U7Ci0JfQotCi19IC8vUlRJbmRleEZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L2ltcGwvUlRJbmRleFBhY2thZ2VJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L2ltcGwvUlRJbmRleFBhY2thZ2VJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5OTc1NWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC9pbXBsL1JUSW5kZXhQYWNrYWdlSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTczICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogUlRJbmRleFBhY2thZ2VJbXBsLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0OCBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FUGFja2FnZUltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuWE1MVHlwZVBhY2thZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuaW1wbC5YTUxUeXBlUGFja2FnZUltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5UGFja2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbC5SZWdpc3RyeVBhY2thZ2VJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5Eb2N1bWVudFJvb3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkluZGV4OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5OYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5SVEluZGV4RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguUlRJbmRleFBhY2thZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215UGFja2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbC5UYXhvbm9teVBhY2thZ2VJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5UGFja2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmltcGwuVURESVJlZ2lzdHJ5UGFja2FnZUltcGw7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPi4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgUlRJbmRleFBhY2thZ2VJbXBsIGV4dGVuZHMgRVBhY2thZ2VJbXBsIGltcGxlbWVudHMgUlRJbmRleFBhY2thZ2UgewotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByaXZhdGUgRUNsYXNzIGRlc2NyaXB0aW9uRUNsYXNzID0gbnVsbDsKLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByaXZhdGUgRUNsYXNzIGRvY3VtZW50Um9vdEVDbGFzcyA9IG51bGw7Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcml2YXRlIEVDbGFzcyBpbmRleEVDbGFzcyA9IG51bGw7Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcml2YXRlIEVDbGFzcyBuYW1lRUNsYXNzID0gbnVsbDsKLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LCByZWdpc3RlcmVkIHdpdGgKLQkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5IEVQYWNrYWdlLlJlZ2lzdHJ5fSBieSB0aGUgcGFja2FnZQotCSAqIHBhY2thZ2UgVVJJIHZhbHVlLgotCSAqIDxwPk5vdGU6IHRoZSBjb3JyZWN0IHdheSB0byBjcmVhdGUgdGhlIHBhY2thZ2UgaXMgdmlhIHRoZSBzdGF0aWMKLQkgKiBmYWN0b3J5IG1ldGhvZCB7QGxpbmsgI2luaXQgaW5pdCgpfSwgd2hpY2ggYWxzbyBwZXJmb3JtcwotCSAqIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlLCBvciByZXR1cm5zIHRoZSByZWdpc3RlcmVkIHBhY2thZ2UsCi0JICogaWYgb25lIGFscmVhZHkgZXhpc3RzLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5SVEluZGV4UGFja2FnZSNlTlNfVVJJCi0JICogQHNlZSAjaW5pdCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXByaXZhdGUgUlRJbmRleFBhY2thZ2VJbXBsKCkgewotCQlzdXBlcihlTlNfVVJJLCBSVEluZGV4RmFjdG9yeS5lSU5TVEFOQ0UpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNJbml0ZWQgPSBmYWxzZTsKLQotCS8qKgotCSAqIENyZWF0ZXMsIHJlZ2lzdGVycywgYW5kIGluaXRpYWxpemVzIHRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhpcwotCSAqIG1vZGVsLCBhbmQgZm9yIGFueSBvdGhlcnMgdXBvbiB3aGljaCBpdCBkZXBlbmRzLiAgU2ltcGxlCi0JICogZGVwZW5kZW5jaWVzIGFyZSBzYXRpc2ZpZWQgYnkgY2FsbGluZyB0aGlzIG1ldGhvZCBvbiBhbGwKLQkgKiBkZXBlbmRlbnQgcGFja2FnZXMgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UuICBUaGlzIG1ldGhvZCBkcml2ZXMKLQkgKiBpbml0aWFsaXphdGlvbiBmb3IgaW50ZXJkZXBlbmRlbnQgcGFja2FnZXMgZGlyZWN0bHksIGluIHBhcmFsbGVsCi0JICogd2l0aCB0aGlzIHBhY2thZ2UsIGl0c2VsZi4KLQkgKiA8cD5PZiB0aGlzIHBhY2thZ2UgYW5kIGl0cyBpbnRlcmRlcGVuZGVuY2llcywgYWxsIHBhY2thZ2VzIHdoaWNoCi0JICogaGF2ZSBub3QgeWV0IGJlZW4gcmVnaXN0ZXJlZCBieSB0aGVpciBVUkkgdmFsdWVzIGFyZSBmaXJzdCBjcmVhdGVkCi0JICogYW5kIHJlZ2lzdGVyZWQuICBUaGUgcGFja2FnZXMgYXJlIHRoZW4gaW5pdGlhbGl6ZWQgaW4gdHdvIHN0ZXBzOgotCSAqIG1ldGEtbW9kZWwgb2JqZWN0cyBmb3IgYWxsIG9mIHRoZSBwYWNrYWdlcyBhcmUgY3JlYXRlZCBiZWZvcmUgYW55Ci0JICogYXJlIGluaXRpYWxpemVkLCBzaW5jZSBvbmUgcGFja2FnZSdzIG1ldGEtbW9kZWwgb2JqZWN0cyBtYXkgcmVmZXIgdG8KLQkgKiB0aG9zZSBvZiBhbm90aGVyLgotCSAqIDxwPkludm9jYXRpb24gb2YgdGhpcyBtZXRob2Qgd2lsbCBub3QgYWZmZWN0IGFueSBwYWNrYWdlcyB0aGF0IGhhdmUKLQkgKiBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNlTlNfVVJJCi0JICogQHNlZSAjY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkKLQkgKiBAc2VlICNpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHN0YXRpYyBSVEluZGV4UGFja2FnZSBpbml0KCkgewotCQlpZiAoaXNJbml0ZWQpIHJldHVybiAoUlRJbmRleFBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoUlRJbmRleFBhY2thZ2UuZU5TX1VSSSk7Ci0KLQkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgcGFja2FnZQotCQlSVEluZGV4UGFja2FnZUltcGwgdGhlUlRJbmRleFBhY2thZ2UgPSAoUlRJbmRleFBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShlTlNfVVJJKSBpbnN0YW5jZW9mIFJUSW5kZXhQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKGVOU19VUkkpIDogbmV3IFJUSW5kZXhQYWNrYWdlSW1wbCgpKTsKLQotCQlpc0luaXRlZCA9IHRydWU7Ci0KLQkJLy8gSW5pdGlhbGl6ZSBzaW1wbGUgZGVwZW5kZW5jaWVzCi0JCVhNTFR5cGVQYWNrYWdlSW1wbC5pbml0KCk7Ci0KLQkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgaW50ZXJkZXBlbmRlbmNpZXMKLQkJVGF4b25vbXlQYWNrYWdlSW1wbCB0aGVUYXhvbm9teVBhY2thZ2UgPSAoVGF4b25vbXlQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoVGF4b25vbXlQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgVGF4b25vbXlQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFRheG9ub215UGFja2FnZS5lTlNfVVJJKSA6IFRheG9ub215UGFja2FnZUltcGwuZUlOU1RBTkNFKTsKLQkJUmVnaXN0cnlQYWNrYWdlSW1wbCB0aGVSZWdpc3RyeVBhY2thZ2UgPSAoUmVnaXN0cnlQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoUmVnaXN0cnlQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgUmVnaXN0cnlQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFJlZ2lzdHJ5UGFja2FnZS5lTlNfVVJJKSA6IFJlZ2lzdHJ5UGFja2FnZUltcGwuZUlOU1RBTkNFKTsKLQkJVURESVJlZ2lzdHJ5UGFja2FnZUltcGwgdGhlVURESVJlZ2lzdHJ5UGFja2FnZSA9IChVRERJUmVnaXN0cnlQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoVURESVJlZ2lzdHJ5UGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFVERElSZWdpc3RyeVBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoVURESVJlZ2lzdHJ5UGFja2FnZS5lTlNfVVJJKSA6IFVERElSZWdpc3RyeVBhY2thZ2VJbXBsLmVJTlNUQU5DRSk7Ci0KLQkJLy8gQ3JlYXRlIHBhY2thZ2UgbWV0YS1kYXRhIG9iamVjdHMKLQkJdGhlUlRJbmRleFBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7Ci0JCXRoZVRheG9ub215UGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKLQkJdGhlUmVnaXN0cnlQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOwotCQl0aGVVRERJUmVnaXN0cnlQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOwotCi0JCS8vIEluaXRpYWxpemUgY3JlYXRlZCBtZXRhLWRhdGEKLQkJdGhlUlRJbmRleFBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOwotCQl0aGVUYXhvbm9teVBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOwotCQl0aGVSZWdpc3RyeVBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOwotCQl0aGVVRERJUmVnaXN0cnlQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKLQotCQkvLyBNYXJrIG1ldGEtZGF0YSB0byBpbmRpY2F0ZSBpdCBjYW4ndCBiZSBjaGFuZ2VkCi0JCXRoZVJUSW5kZXhQYWNrYWdlLmZyZWV6ZSgpOwotCi0JCXJldHVybiB0aGVSVEluZGV4UGFja2FnZTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUNsYXNzIGdldERlc2NyaXB0aW9uKCkgewotCQlyZXR1cm4gZGVzY3JpcHRpb25FQ2xhc3M7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVzY3JpcHRpb25fVmFsdWUoKSB7Ci0JCXJldHVybiAoRUF0dHJpYnV0ZSlkZXNjcmlwdGlvbkVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQXR0cmlidXRlIGdldERlc2NyaXB0aW9uX0xhbmcoKSB7Ci0JCXJldHVybiAoRUF0dHJpYnV0ZSlkZXNjcmlwdGlvbkVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQ2xhc3MgZ2V0RG9jdW1lbnRSb290KCkgewotCQlyZXR1cm4gZG9jdW1lbnRSb290RUNsYXNzOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQXR0cmlidXRlIGdldERvY3VtZW50Um9vdF9NaXhlZCgpIHsKLQkJcmV0dXJuIChFQXR0cmlidXRlKWRvY3VtZW50Um9vdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9YTUxOU1ByZWZpeE1hcCgpIHsKLQkJcmV0dXJuIChFUmVmZXJlbmNlKWRvY3VtZW50Um9vdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9YU0lTY2hlbWFMb2NhdGlvbigpIHsKLQkJcmV0dXJuIChFUmVmZXJlbmNlKWRvY3VtZW50Um9vdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9EZXNjcmlwdGlvbigpIHsKLQkJcmV0dXJuIChFUmVmZXJlbmNlKWRvY3VtZW50Um9vdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9JbmRleCgpIHsKLQkJcmV0dXJuIChFUmVmZXJlbmNlKWRvY3VtZW50Um9vdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDQpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9OYW1lKCkgewotCQlyZXR1cm4gKEVSZWZlcmVuY2UpZG9jdW1lbnRSb290RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVDbGFzcyBnZXRJbmRleCgpIHsKLQkJcmV0dXJuIGluZGV4RUNsYXNzOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFUmVmZXJlbmNlIGdldEluZGV4X05hbWUoKSB7Ci0JCXJldHVybiAoRVJlZmVyZW5jZSlpbmRleEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFUmVmZXJlbmNlIGdldEluZGV4X0Rlc2NyaXB0aW9uKCkgewotCQlyZXR1cm4gKEVSZWZlcmVuY2UpaW5kZXhFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRVJlZmVyZW5jZSBnZXRJbmRleF9SZWdpc3RyeSgpIHsKLQkJcmV0dXJuIChFUmVmZXJlbmNlKWluZGV4RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVSZWZlcmVuY2UgZ2V0SW5kZXhfVGF4b25vbXkoKSB7Ci0JCXJldHVybiAoRVJlZmVyZW5jZSlpbmRleEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQ2xhc3MgZ2V0TmFtZV8oKSB7Ci0JCXJldHVybiBuYW1lRUNsYXNzOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQXR0cmlidXRlIGdldE5hbWVfVmFsdWUoKSB7Ci0JCXJldHVybiAoRUF0dHJpYnV0ZSluYW1lRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVBdHRyaWJ1dGUgZ2V0TmFtZV9MYW5nKCkgewotCQlyZXR1cm4gKEVBdHRyaWJ1dGUpbmFtZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBSVEluZGV4RmFjdG9yeSBnZXRSVEluZGV4RmFjdG9yeSgpIHsKLQkJcmV0dXJuIChSVEluZGV4RmFjdG9yeSlnZXRFRmFjdG9yeUluc3RhbmNlKCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJpdmF0ZSBib29sZWFuIGlzQ3JlYXRlZCA9IGZhbHNlOwotCi0JLyoqCi0JICogQ3JlYXRlcyB0aGUgbWV0YS1tb2RlbCBvYmplY3RzIGZvciB0aGUgcGFja2FnZS4gIFRoaXMgbWV0aG9kIGlzCi0JICogZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGNyZWF0ZVBhY2thZ2VDb250ZW50cygpIHsKLQkJaWYgKGlzQ3JlYXRlZCkgcmV0dXJuOwotCQlpc0NyZWF0ZWQgPSB0cnVlOwotCi0JCS8vIENyZWF0ZSBjbGFzc2VzIGFuZCB0aGVpciBmZWF0dXJlcwotCQlkZXNjcmlwdGlvbkVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhERVNDUklQVElPTik7Ci0JCWNyZWF0ZUVBdHRyaWJ1dGUoZGVzY3JpcHRpb25FQ2xhc3MsIERFU0NSSVBUSU9OX19WQUxVRSk7Ci0JCWNyZWF0ZUVBdHRyaWJ1dGUoZGVzY3JpcHRpb25FQ2xhc3MsIERFU0NSSVBUSU9OX19MQU5HKTsKLQotCQlkb2N1bWVudFJvb3RFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoRE9DVU1FTlRfUk9PVCk7Ci0JCWNyZWF0ZUVBdHRyaWJ1dGUoZG9jdW1lbnRSb290RUNsYXNzLCBET0NVTUVOVF9ST09UX19NSVhFRCk7Ci0JCWNyZWF0ZUVSZWZlcmVuY2UoZG9jdW1lbnRSb290RUNsYXNzLCBET0NVTUVOVF9ST09UX19YTUxOU19QUkVGSVhfTUFQKTsKLQkJY3JlYXRlRVJlZmVyZW5jZShkb2N1bWVudFJvb3RFQ2xhc3MsIERPQ1VNRU5UX1JPT1RfX1hTSV9TQ0hFTUFfTE9DQVRJT04pOwotCQljcmVhdGVFUmVmZXJlbmNlKGRvY3VtZW50Um9vdEVDbGFzcywgRE9DVU1FTlRfUk9PVF9fREVTQ1JJUFRJT04pOwotCQljcmVhdGVFUmVmZXJlbmNlKGRvY3VtZW50Um9vdEVDbGFzcywgRE9DVU1FTlRfUk9PVF9fSU5ERVgpOwotCQljcmVhdGVFUmVmZXJlbmNlKGRvY3VtZW50Um9vdEVDbGFzcywgRE9DVU1FTlRfUk9PVF9fTkFNRSk7Ci0KLQkJaW5kZXhFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSU5ERVgpOwotCQljcmVhdGVFUmVmZXJlbmNlKGluZGV4RUNsYXNzLCBJTkRFWF9fTkFNRSk7Ci0JCWNyZWF0ZUVSZWZlcmVuY2UoaW5kZXhFQ2xhc3MsIElOREVYX19ERVNDUklQVElPTik7Ci0JCWNyZWF0ZUVSZWZlcmVuY2UoaW5kZXhFQ2xhc3MsIElOREVYX19SRUdJU1RSWSk7Ci0JCWNyZWF0ZUVSZWZlcmVuY2UoaW5kZXhFQ2xhc3MsIElOREVYX19UQVhPTk9NWSk7Ci0KLQkJbmFtZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhOQU1FKTsKLQkJY3JlYXRlRUF0dHJpYnV0ZShuYW1lRUNsYXNzLCBOQU1FX19WQUxVRSk7Ci0JCWNyZWF0ZUVBdHRyaWJ1dGUobmFtZUVDbGFzcywgTkFNRV9fTEFORyk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJpdmF0ZSBib29sZWFuIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQotCS8qKgotCSAqIENvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSBhbmQgaXRzIG1ldGEtbW9kZWwuICBUaGlzCi0JICogbWV0aG9kIGlzIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkgewotCQlpZiAoaXNJbml0aWFsaXplZCkgcmV0dXJuOwotCQlpc0luaXRpYWxpemVkID0gdHJ1ZTsKLQotCQkvLyBJbml0aWFsaXplIHBhY2thZ2UKLQkJc2V0TmFtZShlTkFNRSk7Ci0JCXNldE5zUHJlZml4KGVOU19QUkVGSVgpOwotCQlzZXROc1VSSShlTlNfVVJJKTsKLQotCQkvLyBPYnRhaW4gb3RoZXIgZGVwZW5kZW50IHBhY2thZ2VzCi0JCVhNTFR5cGVQYWNrYWdlSW1wbCB0aGVYTUxUeXBlUGFja2FnZSA9IChYTUxUeXBlUGFja2FnZUltcGwpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoWE1MVHlwZVBhY2thZ2UuZU5TX1VSSSk7Ci0JCVJlZ2lzdHJ5UGFja2FnZUltcGwgdGhlUmVnaXN0cnlQYWNrYWdlID0gKFJlZ2lzdHJ5UGFja2FnZUltcGwpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoUmVnaXN0cnlQYWNrYWdlLmVOU19VUkkpOwotCQlUYXhvbm9teVBhY2thZ2VJbXBsIHRoZVRheG9ub215UGFja2FnZSA9IChUYXhvbm9teVBhY2thZ2VJbXBsKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFRheG9ub215UGFja2FnZS5lTlNfVVJJKTsKLQotCQkvLyBBZGQgc3VwZXJ0eXBlcyB0byBjbGFzc2VzCi0KLQkJLy8gSW5pdGlhbGl6ZSBjbGFzc2VzIGFuZCBmZWF0dXJlczsgYWRkIG9wZXJhdGlvbnMgYW5kIHBhcmFtZXRlcnMKLQkJaW5pdEVDbGFzcyhkZXNjcmlwdGlvbkVDbGFzcywgRGVzY3JpcHRpb24uY2xhc3MsICJEZXNjcmlwdGlvbiIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKLQkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVzY3JpcHRpb25fVmFsdWUoKSwgdGhlWE1MVHlwZVBhY2thZ2UuZ2V0U3RyaW5nKCksICJ2YWx1ZSIsIG51bGwsIDAsIDEsIERlc2NyaXB0aW9uLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVzY3JpcHRpb25fTGFuZygpLCB0aGVYTUxUeXBlUGFja2FnZS5nZXRMYW5ndWFnZSgpLCAibGFuZyIsIG51bGwsIDAsIDEsIERlc2NyaXB0aW9uLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQotCQlpbml0RUNsYXNzKGRvY3VtZW50Um9vdEVDbGFzcywgRG9jdW1lbnRSb290LmNsYXNzLCAiRG9jdW1lbnRSb290IiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOwotCQlpbml0RUF0dHJpYnV0ZShnZXREb2N1bWVudFJvb3RfTWl4ZWQoKSwgZWNvcmVQYWNrYWdlLmdldEVGZWF0dXJlTWFwRW50cnkoKSwgIm1peGVkIiwgbnVsbCwgMCwgLTEsIG51bGwsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RVJlZmVyZW5jZShnZXREb2N1bWVudFJvb3RfWE1MTlNQcmVmaXhNYXAoKSwgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmdUb1N0cmluZ01hcEVudHJ5KCksIG51bGwsICJ4TUxOU1ByZWZpeE1hcCIsIG51bGwsIDAsIC0xLCBudWxsLCBJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RVJlZmVyZW5jZShnZXREb2N1bWVudFJvb3RfWFNJU2NoZW1hTG9jYXRpb24oKSwgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmdUb1N0cmluZ01hcEVudHJ5KCksIG51bGwsICJ4U0lTY2hlbWFMb2NhdGlvbiIsIG51bGwsIDAsIC0xLCBudWxsLCBJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RVJlZmVyZW5jZShnZXREb2N1bWVudFJvb3RfRGVzY3JpcHRpb24oKSwgdGhpcy5nZXREZXNjcmlwdGlvbigpLCBudWxsLCAiZGVzY3JpcHRpb24iLCBudWxsLCAwLCAtMiwgbnVsbCwgSVNfVFJBTlNJRU5ULCBJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCBJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVSZWZlcmVuY2UoZ2V0RG9jdW1lbnRSb290X0luZGV4KCksIHRoaXMuZ2V0SW5kZXgoKSwgbnVsbCwgImluZGV4IiwgbnVsbCwgMCwgLTIsIG51bGwsIElTX1RSQU5TSUVOVCwgSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFUmVmZXJlbmNlKGdldERvY3VtZW50Um9vdF9OYW1lKCksIHRoaXMuZ2V0TmFtZV8oKSwgbnVsbCwgIm5hbWUiLCBudWxsLCAwLCAtMiwgbnVsbCwgSVNfVFJBTlNJRU5ULCBJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCBJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQotCQlpbml0RUNsYXNzKGluZGV4RUNsYXNzLCBJbmRleC5jbGFzcywgIkluZGV4IiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOwotCQlpbml0RVJlZmVyZW5jZShnZXRJbmRleF9OYW1lKCksIHRoaXMuZ2V0TmFtZV8oKSwgbnVsbCwgIm5hbWUiLCBudWxsLCAxLCAtMSwgSW5kZXguY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFUmVmZXJlbmNlKGdldEluZGV4X0Rlc2NyaXB0aW9uKCksIHRoaXMuZ2V0RGVzY3JpcHRpb24oKSwgbnVsbCwgImRlc2NyaXB0aW9uIiwgbnVsbCwgMSwgLTEsIEluZGV4LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RVJlZmVyZW5jZShnZXRJbmRleF9SZWdpc3RyeSgpLCB0aGVSZWdpc3RyeVBhY2thZ2UuZ2V0UmVnaXN0cnkoKSwgbnVsbCwgInJlZ2lzdHJ5IiwgbnVsbCwgMCwgLTEsIEluZGV4LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RVJlZmVyZW5jZShnZXRJbmRleF9UYXhvbm9teSgpLCB0aGVUYXhvbm9teVBhY2thZ2UuZ2V0VGF4b25vbXkoKSwgbnVsbCwgInRheG9ub215IiwgbnVsbCwgMCwgLTEsIEluZGV4LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCi0JCWluaXRFQ2xhc3MobmFtZUVDbGFzcywgTmFtZS5jbGFzcywgIk5hbWUiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7Ci0JCWluaXRFQXR0cmlidXRlKGdldE5hbWVfVmFsdWUoKSwgdGhlWE1MVHlwZVBhY2thZ2UuZ2V0U3RyaW5nKCksICJ2YWx1ZSIsIG51bGwsIDAsIDEsIE5hbWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RUF0dHJpYnV0ZShnZXROYW1lX0xhbmcoKSwgdGhlWE1MVHlwZVBhY2thZ2UuZ2V0TGFuZ3VhZ2UoKSwgImxhbmciLCBudWxsLCAwLCAxLCBOYW1lLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQotCQkvLyBDcmVhdGUgcmVzb3VyY2UKLQkJY3JlYXRlUmVzb3VyY2UoZU5TX1VSSSk7Ci0KLQkJLy8gQ3JlYXRlIGFubm90YXRpb25zCi0JCS8vIGh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YQotCQljcmVhdGVFeHRlbmRlZE1ldGFEYXRhQW5ub3RhdGlvbnMoKTsKLQl9Ci0KLQkvKioKLQkgKiBJbml0aWFsaXplcyB0aGUgYW5ub3RhdGlvbnMgZm9yIDxiPmh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YTwvYj4uCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgY3JlYXRlRXh0ZW5kZWRNZXRhRGF0YUFubm90YXRpb25zKCkgewotCQlTdHJpbmcgc291cmNlID0gImh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI7CQkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZGVzY3JpcHRpb25FQ2xhc3MsIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJuYW1lIiwgIkRlc2NyaXB0aW9uIiwKLQkJCSAia2luZCIsICJzaW1wbGUiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0RGVzY3JpcHRpb25fVmFsdWUoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgIm5hbWUiLCAiOjAiLAotCQkJICJraW5kIiwgInNpbXBsZSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXREZXNjcmlwdGlvbl9MYW5nKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImF0dHJpYnV0ZSIsCi0JCQkgIm5hbWUiLCAibGFuZyIsCi0JCQkgIm5hbWVzcGFjZSIsICJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZG9jdW1lbnRSb290RUNsYXNzLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAibmFtZSIsICIiLAotCQkJICJraW5kIiwgIm1peGVkIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldERvY3VtZW50Um9vdF9NaXhlZCgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJlbGVtZW50V2lsZGNhcmQiLAotCQkJICJuYW1lIiwgIjptaXhlZCIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXREb2N1bWVudFJvb3RfWE1MTlNQcmVmaXhNYXAoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiYXR0cmlidXRlIiwKLQkJCSAibmFtZSIsICJ4bWxuczpwcmVmaXgiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0RG9jdW1lbnRSb290X1hTSVNjaGVtYUxvY2F0aW9uKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImF0dHJpYnV0ZSIsCi0JCQkgIm5hbWUiLCAieHNpOnNjaGVtYUxvY2F0aW9uIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldERvY3VtZW50Um9vdF9EZXNjcmlwdGlvbigpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJlbGVtZW50IiwKLQkJCSAibmFtZSIsICJkZXNjcmlwdGlvbiIsCi0JCQkgIm5hbWVzcGFjZSIsICIjI3RhcmdldE5hbWVzcGFjZSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXREb2N1bWVudFJvb3RfSW5kZXgoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiZWxlbWVudCIsCi0JCQkgIm5hbWUiLCAiaW5kZXgiLAotCQkJICJuYW1lc3BhY2UiLCAiIyN0YXJnZXROYW1lc3BhY2UiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0RG9jdW1lbnRSb290X05hbWUoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiZWxlbWVudCIsCi0JCQkgIm5hbWUiLCAibmFtZSIsCi0JCQkgIm5hbWVzcGFjZSIsICIjI3RhcmdldE5hbWVzcGFjZSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChpbmRleEVDbGFzcywgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgIm5hbWUiLCAiSW5kZXgiLAotCQkJICJraW5kIiwgImVsZW1lbnRPbmx5IgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldEluZGV4X05hbWUoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiZWxlbWVudCIsCi0JCQkgIm5hbWUiLCAibmFtZSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXRJbmRleF9EZXNjcmlwdGlvbigpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJlbGVtZW50IiwKLQkJCSAibmFtZSIsICJkZXNjcmlwdGlvbiIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXRJbmRleF9SZWdpc3RyeSgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJlbGVtZW50IiwKLQkJCSAibmFtZSIsICJyZWdpc3RyeSIsCi0JCQkgIm5hbWVzcGFjZSIsICJodHRwOi8vZWNsaXBzZS5vcmcvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9yZWdpc3RyeSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXRJbmRleF9UYXhvbm9teSgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJlbGVtZW50IiwKLQkJCSAibmFtZSIsICJ0YXhvbm9teSIsCi0JCQkgIm5hbWVzcGFjZSIsICJodHRwOi8vZWNsaXBzZS5vcmcvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChuYW1lRUNsYXNzLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAibmFtZSIsICJOYW1lIiwKLQkJCSAia2luZCIsICJzaW1wbGUiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0TmFtZV9WYWx1ZSgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAibmFtZSIsICI6MCIsCi0JCQkgImtpbmQiLCAic2ltcGxlIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldE5hbWVfTGFuZygpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJhdHRyaWJ1dGUiLAotCQkJICJuYW1lIiwgImxhbmciLAotCQkJICJuYW1lc3BhY2UiLCAiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIgotCQkgICB9KTsKLQl9Ci0KLX0gLy9SVEluZGV4UGFja2FnZUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvdXRpbC9SVEluZGV4QWRhcHRlckZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3J0aW5kZXgvdXRpbC9SVEluZGV4QWRhcHRlckZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDlkZTQxNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L3V0aWwvUlRJbmRleEFkYXB0ZXJGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzEgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBSVEluZGV4QWRhcHRlckZhY3RvcnkuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ3IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LnV0aWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC4qOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBUaGUgPGI+QWRhcHRlciBGYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgotICogSXQgcHJvdmlkZXMgYW4gYWRhcHRlciA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LlJUSW5kZXhQYWNrYWdlCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBSVEluZGV4QWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUltcGwgewotCS8qKgotCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIFJUSW5kZXhQYWNrYWdlIG1vZGVsUGFja2FnZTsKLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGFkYXB0ZXIgZmFjdG9yeS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgUlRJbmRleEFkYXB0ZXJGYWN0b3J5KCkgewotCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsKLQkJCW1vZGVsUGFja2FnZSA9IFJUSW5kZXhQYWNrYWdlLmVJTlNUQU5DRTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgb2JqZWN0IGlzIGVpdGhlciB0aGUgbW9kZWwncyBwYWNrYWdlIG9yIGlzIGFuIGluc3RhbmNlIG9iamVjdCBvZiB0aGUgbW9kZWwuCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCBvYmplY3QpIHsKLQkJaWYgKG9iamVjdCA9PSBtb2RlbFBhY2thZ2UpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCWlmIChvYmplY3QgaW5zdGFuY2VvZiBFT2JqZWN0KSB7Ci0JCQlyZXR1cm4gKChFT2JqZWN0KW9iamVjdCkuZUNsYXNzKCkuZ2V0RVBhY2thZ2UoKSA9PSBtb2RlbFBhY2thZ2U7Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qKgotCSAqIFRoZSBzd2l0Y2ggdGhlIGRlbGVnYXRlcyB0byB0aGUgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2RzLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBSVEluZGV4U3dpdGNoIG1vZGVsU3dpdGNoID0KLQkJbmV3IFJUSW5kZXhTd2l0Y2goKSB7Ci0JCQlwdWJsaWMgT2JqZWN0IGNhc2VEZXNjcmlwdGlvbihEZXNjcmlwdGlvbiBvYmplY3QpIHsKLQkJCQlyZXR1cm4gY3JlYXRlRGVzY3JpcHRpb25BZGFwdGVyKCk7Ci0JCQl9Ci0JCQlwdWJsaWMgT2JqZWN0IGNhc2VEb2N1bWVudFJvb3QoRG9jdW1lbnRSb290IG9iamVjdCkgewotCQkJCXJldHVybiBjcmVhdGVEb2N1bWVudFJvb3RBZGFwdGVyKCk7Ci0JCQl9Ci0JCQlwdWJsaWMgT2JqZWN0IGNhc2VJbmRleChJbmRleCBvYmplY3QpIHsKLQkJCQlyZXR1cm4gY3JlYXRlSW5kZXhBZGFwdGVyKCk7Ci0JCQl9Ci0JCQlwdWJsaWMgT2JqZWN0IGNhc2VOYW1lKE5hbWUgb2JqZWN0KSB7Ci0JCQkJcmV0dXJuIGNyZWF0ZU5hbWVBZGFwdGVyKCk7Ci0JCQl9Ci0JCQlwdWJsaWMgT2JqZWN0IGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7Ci0JCQkJcmV0dXJuIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCk7Ci0JCQl9Ci0JCX07Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHRhcmdldCB0aGUgb2JqZWN0IHRvIGFkYXB0LgotCSAqIEByZXR1cm4gdGhlIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgQWRhcHRlciBjcmVhdGVBZGFwdGVyKE5vdGlmaWVyIHRhcmdldCkgewotCQlyZXR1cm4gKEFkYXB0ZXIpbW9kZWxTd2l0Y2guZG9Td2l0Y2goKEVPYmplY3QpdGFyZ2V0KTsKLQl9Ci0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRlc2NyaXB0aW9uIDxlbT5EZXNjcmlwdGlvbjwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0JICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRGVzY3JpcHRpb24KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEFkYXB0ZXIgY3JlYXRlRGVzY3JpcHRpb25BZGFwdGVyKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5Eb2N1bWVudFJvb3QgPGVtPkRvY3VtZW50IFJvb3Q8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRvY3VtZW50Um9vdAotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgQWRhcHRlciBjcmVhdGVEb2N1bWVudFJvb3RBZGFwdGVyKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5JbmRleCA8ZW0+SW5kZXg8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkluZGV4Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUluZGV4QWRhcHRlcigpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguTmFtZSA8ZW0+TmFtZTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0JICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguTmFtZQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgQWRhcHRlciBjcmVhdGVOYW1lQWRhcHRlcigpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciB0aGUgZGVmYXVsdCBjYXNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbC4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEFkYXB0ZXIgY3JlYXRlRU9iamVjdEFkYXB0ZXIoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotfSAvL1JUSW5kZXhBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC91dGlsL1JUSW5kZXhSZXNvdXJjZUZhY3RvcnlJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L3V0aWwvUlRJbmRleFJlc291cmNlRmFjdG9yeUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQwOWZjYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L3V0aWwvUlRJbmRleFJlc291cmNlRmFjdG9yeUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogUlRJbmRleFJlc291cmNlRmFjdG9yeUltcGwuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ3IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LnV0aWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRXh0ZW5kZWRNZXRhRGF0YTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuWE1MUmVzb3VyY2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLmltcGwuWE1MUmVzb3VyY2VGYWN0b3J5SW1wbDsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogVGhlIDxiPlJlc291cmNlIEZhY3Rvcnk8L2I+IGFzc29jaWF0ZWQgd2l0aCB0aGUgcGFja2FnZS4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXgudXRpbC5SVEluZGV4UmVzb3VyY2VJbXBsCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBSVEluZGV4UmVzb3VyY2VGYWN0b3J5SW1wbCBleHRlbmRzIFhNTFJlc291cmNlRmFjdG9yeUltcGwgewotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBFeHRlbmRlZE1ldGFEYXRhIGV4dGVuZGVkTWV0YURhdGE7Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSByZXNvdXJjZSBmYWN0b3J5LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBSVEluZGV4UmVzb3VyY2VGYWN0b3J5SW1wbCgpIHsKLQkJc3VwZXIoKTsKLQkJZXh0ZW5kZWRNZXRhRGF0YSA9IEV4dGVuZGVkTWV0YURhdGEuSU5TVEFOQ0U7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgcmVzb3VyY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFJlc291cmNlIGNyZWF0ZVJlc291cmNlKFVSSSB1cmkpIHsKLQkJWE1MUmVzb3VyY2UgcmVzdWx0ID0gbmV3IFJUSW5kZXhSZXNvdXJjZUltcGwodXJpKTsKLQkJcmVzdWx0LmdldERlZmF1bHRTYXZlT3B0aW9ucygpLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fRVhURU5ERURfTUVUQV9EQVRBLCBleHRlbmRlZE1ldGFEYXRhKTsKLQkJcmVzdWx0LmdldERlZmF1bHRMb2FkT3B0aW9ucygpLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fRVhURU5ERURfTUVUQV9EQVRBLCBleHRlbmRlZE1ldGFEYXRhKTsKLQotCQlyZXN1bHQuZ2V0RGVmYXVsdFNhdmVPcHRpb25zKCkucHV0KFhNTFJlc291cmNlLk9QVElPTl9TQ0hFTUFfTE9DQVRJT04sIEJvb2xlYW4uVFJVRSk7Ci0JCXJlc3VsdC5nZXREZWZhdWx0U2F2ZU9wdGlvbnMoKS5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX1VTRV9FTkNPREVEX0FUVFJJQlVURV9TVFlMRSwgQm9vbGVhbi5UUlVFKTsKLQotCQlyZXN1bHQuZ2V0RGVmYXVsdExvYWRPcHRpb25zKCkucHV0KFhNTFJlc291cmNlLk9QVElPTl9VU0VfTEVYSUNBTF9IQU5ETEVSLCBCb29sZWFuLlRSVUUpOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotfSAvL1JUSW5kZXhSZXNvdXJjZUZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L3V0aWwvUlRJbmRleFJlc291cmNlSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC91dGlsL1JUSW5kZXhSZXNvdXJjZUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWUzMTY0OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L3V0aWwvUlRJbmRleFJlc291cmNlSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBSVEluZGV4UmVzb3VyY2VJbXBsLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0NyBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC51dGlsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuaW1wbC5YTUxSZXNvdXJjZUltcGw7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5SZXNvdXJjZSA8L2I+IGFzc29jaWF0ZWQgd2l0aCB0aGUgcGFja2FnZS4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXgudXRpbC5SVEluZGV4UmVzb3VyY2VGYWN0b3J5SW1wbAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgUlRJbmRleFJlc291cmNlSW1wbCBleHRlbmRzIFhNTFJlc291cmNlSW1wbCB7Ci0JLyoqCi0JICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgcmVzb3VyY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdXJpIHRoZSBVUkkgb2YgdGhlIG5ldyByZXNvdXJjZS4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFJUSW5kZXhSZXNvdXJjZUltcGwoVVJJIHVyaSkgewotCQlzdXBlcih1cmkpOwotCX0KLQotfSAvL1JUSW5kZXhSZXNvdXJjZUZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L3V0aWwvUlRJbmRleFN3aXRjaC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvcnRpbmRleC91dGlsL1JUSW5kZXhTd2l0Y2guamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmU4NWJlMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC9ydGluZGV4L3V0aWwvUlRJbmRleFN3aXRjaC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkzICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogUlRJbmRleFN3aXRjaC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDcgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXgudXRpbDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC4qOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBUaGUgPGI+U3dpdGNoPC9iPiBmb3IgdGhlIG1vZGVsJ3MgaW5oZXJpdGFuY2UgaGllcmFyY2h5LgotICogSXQgc3VwcG9ydHMgdGhlIGNhbGwge0BsaW5rICNkb1N3aXRjaChFT2JqZWN0KSBkb1N3aXRjaChvYmplY3QpfQotICogdG8gaW52b2tlIHRoZSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLAotICogc3RhcnRpbmcgd2l0aCB0aGUgYWN0dWFsIGNsYXNzIG9mIHRoZSBvYmplY3QKLSAqIGFuZCBwcm9jZWVkaW5nIHVwIHRoZSBpbmhlcml0YW5jZSBoaWVyYXJjaHkKLSAqIHVudGlsIGEgbm9uLW51bGwgcmVzdWx0IGlzIHJldHVybmVkLAotICogd2hpY2ggaXMgdGhlIHJlc3VsdCBvZiB0aGUgc3dpdGNoLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5SVEluZGV4UGFja2FnZQotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgUlRJbmRleFN3aXRjaCB7Ci0JLyoqCi0JICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBSVEluZGV4UGFja2FnZSBtb2RlbFBhY2thZ2U7Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBzd2l0Y2guCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFJUSW5kZXhTd2l0Y2goKSB7Ci0JCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgewotCQkJbW9kZWxQYWNrYWdlID0gUlRJbmRleFBhY2thZ2UuZUlOU1RBTkNFOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGRvU3dpdGNoKEVPYmplY3QgdGhlRU9iamVjdCkgewotCQlyZXR1cm4gZG9Td2l0Y2godGhlRU9iamVjdC5lQ2xhc3MoKSwgdGhlRU9iamVjdCk7Ci0JfQotCi0JLyoqCi0JICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgT2JqZWN0IGRvU3dpdGNoKEVDbGFzcyB0aGVFQ2xhc3MsIEVPYmplY3QgdGhlRU9iamVjdCkgewotCQlpZiAodGhlRUNsYXNzLmVDb250YWluZXIoKSA9PSBtb2RlbFBhY2thZ2UpIHsKLQkJCXJldHVybiBkb1N3aXRjaCh0aGVFQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCksIHRoZUVPYmplY3QpOwotCQl9Ci0JCWVsc2UgewotCQkJTGlzdCBlU3VwZXJUeXBlcyA9IHRoZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpOwotCQkJcmV0dXJuCi0JCQkJZVN1cGVyVHlwZXMuaXNFbXB0eSgpID8KLQkJCQkJZGVmYXVsdENhc2UodGhlRU9iamVjdCkgOgotCQkJCQlkb1N3aXRjaCgoRUNsYXNzKWVTdXBlclR5cGVzLmdldCgwKSwgdGhlRU9iamVjdCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBPYmplY3QgZG9Td2l0Y2goaW50IGNsYXNzaWZpZXJJRCwgRU9iamVjdCB0aGVFT2JqZWN0KSB7Ci0JCXN3aXRjaCAoY2xhc3NpZmllcklEKSB7Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLkRFU0NSSVBUSU9OOiB7Ci0JCQkJRGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSAoRGVzY3JpcHRpb24pdGhlRU9iamVjdDsKLQkJCQlPYmplY3QgcmVzdWx0ID0gY2FzZURlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKTsKLQkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotCQkJCXJldHVybiByZXN1bHQ7Ci0JCQl9Ci0JCQljYXNlIFJUSW5kZXhQYWNrYWdlLkRPQ1VNRU5UX1JPT1Q6IHsKLQkJCQlEb2N1bWVudFJvb3QgZG9jdW1lbnRSb290ID0gKERvY3VtZW50Um9vdCl0aGVFT2JqZWN0OwotCQkJCU9iamVjdCByZXN1bHQgPSBjYXNlRG9jdW1lbnRSb290KGRvY3VtZW50Um9vdCk7Ci0JCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLQkJCQlyZXR1cm4gcmVzdWx0OwotCQkJfQotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5JTkRFWDogewotCQkJCUluZGV4IGluZGV4ID0gKEluZGV4KXRoZUVPYmplY3Q7Ci0JCQkJT2JqZWN0IHJlc3VsdCA9IGNhc2VJbmRleChpbmRleCk7Ci0JCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLQkJCQlyZXR1cm4gcmVzdWx0OwotCQkJfQotCQkJY2FzZSBSVEluZGV4UGFja2FnZS5OQU1FOiB7Ci0JCQkJTmFtZSBuYW1lID0gKE5hbWUpdGhlRU9iamVjdDsKLQkJCQlPYmplY3QgcmVzdWx0ID0gY2FzZU5hbWUobmFtZSk7Ci0JCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLQkJCQlyZXR1cm4gcmVzdWx0OwotCQkJfQotCQkJZGVmYXVsdDogcmV0dXJuIGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRlc2NyaXB0aW9uPC9lbT4nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0JICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0JICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRlc2NyaXB0aW9uPC9lbT4nLgotCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGNhc2VEZXNjcmlwdGlvbihEZXNjcmlwdGlvbiBvYmplY3QpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRvY3VtZW50IFJvb3Q8L2VtPicuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLQkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLQkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+Jy4KLQkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBjYXNlRG9jdW1lbnRSb290KERvY3VtZW50Um9vdCBvYmplY3QpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkluZGV4PC9lbT4nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0JICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0JICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkluZGV4PC9lbT4nLgotCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGNhc2VJbmRleChJbmRleCBvYmplY3QpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk5hbWU8L2VtPicuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLQkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLQkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TmFtZTwvZW0+Jy4KLQkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBjYXNlTmFtZShOYW1lIG9iamVjdCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLCBidXQgdGhpcyBpcyB0aGUgbGFzdCBjYXNlIGFueXdheS4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLQkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KLQkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLX0gLy9SVEluZGV4U3dpdGNoCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS9DYXRlZ29yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvQ2F0ZWdvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTUzZDk2Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS9DYXRlZ29yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogQ2F0ZWdvcnkuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ5IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5DYXRlZ29yeTwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkNhdGVnb3J5I2dldE5sbmFtZSA8ZW0+TmxuYW1lPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkNhdGVnb3J5I2dldENhdGVnb3J5IDxlbT5DYXRlZ29yeTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5DYXRlZ29yeSNnZXRDb2RlIDxlbT5Db2RlPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkNhdGVnb3J5I2dldE5hbWUgPGVtPk5hbWU8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXlQYWNrYWdlI2dldENhdGVnb3J5KCkKLSAqIEBtb2RlbCAKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBDYXRlZ29yeSBleHRlbmRzIEVPYmplY3QgewotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk5sbmFtZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuTmFtZX0uCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5ObG5hbWU8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5ObG5hbWU8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215UGFja2FnZSNnZXRDYXRlZ29yeV9ObG5hbWUoKQotCSAqIEBtb2RlbCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215Lk5hbWUiIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVMaXN0IGdldE5sbmFtZSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+Q2F0ZWdvcnk8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkNhdGVnb3J5fS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkNhdGVnb3J5PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+Q2F0ZWdvcnk8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215UGFja2FnZSNnZXRDYXRlZ29yeV9DYXRlZ29yeSgpCi0JICogQG1vZGVsIHR5cGU9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuQ2F0ZWdvcnkiIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVMaXN0IGdldENhdGVnb3J5KCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Db2RlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Db2RlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkNvZGU8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI3NldENvZGUoU3RyaW5nKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2UjZ2V0Q2F0ZWdvcnlfQ29kZSgpCi0JICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuU3RyaW5nIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZ2V0Q29kZSgpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5DYXRlZ29yeSNnZXRDb2RlIDxlbT5Db2RlPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Db2RlPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNnZXRDb2RlKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0Jdm9pZCBzZXRDb2RlKFN0cmluZyB2YWx1ZSk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI3NldE5hbWUoU3RyaW5nKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2UjZ2V0Q2F0ZWdvcnlfTmFtZSgpCi0JICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuU3RyaW5nIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZ2V0TmFtZSgpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5DYXRlZ29yeSNnZXROYW1lIDxlbT5OYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNnZXROYW1lKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0Jdm9pZCBzZXROYW1lKFN0cmluZyB2YWx1ZSk7Ci0KLX0gLy8gQ2F0ZWdvcnkKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L0RvY3VtZW50Um9vdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvRG9jdW1lbnRSb290LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3MDI0ZTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvRG9jdW1lbnRSb290LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjUgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBEb2N1bWVudFJvb3QuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ5IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5GZWF0dXJlTWFwOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Eb2N1bWVudCBSb290PC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuRG9jdW1lbnRSb290I2dldE1peGVkIDxlbT5NaXhlZDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5Eb2N1bWVudFJvb3QjZ2V0WE1MTlNQcmVmaXhNYXAgPGVtPlhNTE5TIFByZWZpeCBNYXA8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuRG9jdW1lbnRSb290I2dldFhTSVNjaGVtYUxvY2F0aW9uIDxlbT5YU0kgU2NoZW1hIExvY2F0aW9uPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkRvY3VtZW50Um9vdCNnZXRDYXRlZ29yeSA8ZW0+Q2F0ZWdvcnk8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuRG9jdW1lbnRSb290I2dldE5hbWUgPGVtPk5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuRG9jdW1lbnRSb290I2dldFRheG9ub215IDxlbT5UYXhvbm9teTwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2UjZ2V0RG9jdW1lbnRSb290KCkKLSAqIEBtb2RlbCAKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBEb2N1bWVudFJvb3QgZXh0ZW5kcyBFT2JqZWN0IHsKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5NaXhlZDwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QuCi0JICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkZlYXR1cmVNYXAuRW50cnl9LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TWl4ZWQ8L2VtPicgYXR0cmlidXRlIGxpc3QgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5NaXhlZDwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXlQYWNrYWdlI2dldERvY3VtZW50Um9vdF9NaXhlZCgpCi0JICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUZlYXR1cmVNYXBFbnRyeSIgbWFueT0idHJ1ZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRmVhdHVyZU1hcCBnZXRNaXhlZCgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+WE1MTlMgUHJlZml4IE1hcDwvYj48L2VtPicgbWFwLgotCSAqIFRoZSBrZXkgaXMgb2YgdHlwZSB7QGxpbmsgamF2YS5sYW5nLlN0cmluZ30sCi0JICogYW5kIHRoZSB2YWx1ZSBpcyBvZiB0eXBlIHtAbGluayBqYXZhLmxhbmcuU3RyaW5nfSwKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlhNTE5TIFByZWZpeCBNYXA8L2VtPicgbWFwIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+WE1MTlMgUHJlZml4IE1hcDwvZW0+JyBtYXAuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215UGFja2FnZSNnZXREb2N1bWVudFJvb3RfWE1MTlNQcmVmaXhNYXAoKQotCSAqIEBtb2RlbCBtYXBUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cmluZ1RvU3RyaW5nTWFwRW50cnkiIGtleVR5cGU9ImphdmEubGFuZy5TdHJpbmciIHZhbHVlVHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHJhbnNpZW50PSJ0cnVlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFTWFwIGdldFhNTE5TUHJlZml4TWFwKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5YU0kgU2NoZW1hIExvY2F0aW9uPC9iPjwvZW0+JyBtYXAuCi0JICogVGhlIGtleSBpcyBvZiB0eXBlIHtAbGluayBqYXZhLmxhbmcuU3RyaW5nfSwKLQkgKiBhbmQgdGhlIHZhbHVlIGlzIG9mIHR5cGUge0BsaW5rIGphdmEubGFuZy5TdHJpbmd9LAotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+WFNJIFNjaGVtYSBMb2NhdGlvbjwvZW0+JyBtYXAgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5YU0kgU2NoZW1hIExvY2F0aW9uPC9lbT4nIG1hcC4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXlQYWNrYWdlI2dldERvY3VtZW50Um9vdF9YU0lTY2hlbWFMb2NhdGlvbigpCi0JICogQG1vZGVsIG1hcFR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RyaW5nVG9TdHJpbmdNYXBFbnRyeSIga2V5VHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdmFsdWVUeXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB0cmFuc2llbnQ9InRydWUiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVNYXAgZ2V0WFNJU2NoZW1hTG9jYXRpb24oKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkNhdGVnb3J5PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5DYXRlZ29yeTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5DYXRlZ29yeTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogQHNlZSAjc2V0Q2F0ZWdvcnkoQ2F0ZWdvcnkpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215UGFja2FnZSNnZXREb2N1bWVudFJvb3RfQ2F0ZWdvcnkoKQotCSAqIEBtb2RlbCBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIiB0cmFuc2llbnQ9InRydWUiIHZvbGF0aWxlPSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlDYXRlZ29yeSBnZXRDYXRlZ29yeSgpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5Eb2N1bWVudFJvb3QjZ2V0Q2F0ZWdvcnkgPGVtPkNhdGVnb3J5PC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5DYXRlZ29yeTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogQHNlZSAjZ2V0Q2F0ZWdvcnkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldENhdGVnb3J5KENhdGVnb3J5IHZhbHVlKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogQHNlZSAjc2V0TmFtZShOYW1lKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2UjZ2V0RG9jdW1lbnRSb290X05hbWUoKQotCSAqIEBtb2RlbCBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIiB0cmFuc2llbnQ9InRydWUiIHZvbGF0aWxlPSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlOYW1lIGdldE5hbWUoKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuRG9jdW1lbnRSb290I2dldE5hbWUgPGVtPk5hbWU8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIEBzZWUgI2dldE5hbWUoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldE5hbWUoTmFtZSB2YWx1ZSk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5UYXhvbm9teTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VGF4b25vbXk8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VGF4b25vbXk8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIEBzZWUgI3NldFRheG9ub215KFRheG9ub215KQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2UjZ2V0RG9jdW1lbnRSb290X1RheG9ub215KCkKLQkgKiBAbW9kZWwgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIgdHJhbnNpZW50PSJ0cnVlIiB2b2xhdGlsZT0idHJ1ZSIgZGVyaXZlZD0idHJ1ZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JVGF4b25vbXkgZ2V0VGF4b25vbXkoKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuRG9jdW1lbnRSb290I2dldFRheG9ub215IDxlbT5UYXhvbm9teTwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VGF4b25vbXk8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIEBzZWUgI2dldFRheG9ub215KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0Jdm9pZCBzZXRUYXhvbm9teShUYXhvbm9teSB2YWx1ZSk7Ci0KLX0gLy8gRG9jdW1lbnRSb290CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS9OYW1lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS9OYW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwMWVjZWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvTmFtZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBOYW1lLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0OSBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TmFtZTwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqCi0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215Lk5hbWUjZ2V0VmFsdWUgPGVtPlZhbHVlPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215Lk5hbWUjZ2V0TGFuZyA8ZW0+TGFuZzwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2UjZ2V0TmFtZV8oKQotICogQG1vZGVsIAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIE5hbWUgZXh0ZW5kcyBFT2JqZWN0IHsKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5WYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VmFsdWU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VmFsdWU8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI3NldFZhbHVlKFN0cmluZykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXlQYWNrYWdlI2dldE5hbWVfVmFsdWUoKQotCSAqIEBtb2RlbCB1bmlxdWU9ImZhbHNlIiBkYXRhVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLlN0cmluZyIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGdldFZhbHVlKCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215Lk5hbWUjZ2V0VmFsdWUgPGVtPlZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5WYWx1ZTwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjZ2V0VmFsdWUoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldFZhbHVlKFN0cmluZyB2YWx1ZSk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5MYW5nPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5MYW5nPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkxhbmc8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI3NldExhbmcoU3RyaW5nKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2UjZ2V0TmFtZV9MYW5nKCkKLQkgKiBAbW9kZWwgdW5pcXVlPSJmYWxzZSIgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZS5MYW5ndWFnZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGdldExhbmcoKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuTmFtZSNnZXRMYW5nIDxlbT5MYW5nPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5MYW5nPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNnZXRMYW5nKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0Jdm9pZCBzZXRMYW5nKFN0cmluZyB2YWx1ZSk7Ci0KLX0gLy8gTmFtZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvVGF4b25vbXkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L1RheG9ub215LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxNGJlMDcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvVGF4b25vbXkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5OCArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IFRheG9ub215LmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0OSBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VGF4b25vbXk8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teSNnZXRObG5hbWUgPGVtPk5sbmFtZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teSNnZXRDYXRlZ29yeSA8ZW0+Q2F0ZWdvcnk8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXkjZ2V0SWQgPGVtPklkPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215I2dldExvY2F0aW9uIDxlbT5Mb2NhdGlvbjwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teSNnZXROYW1lIDxlbT5OYW1lPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215I2dldFJlZiA8ZW0+UmVmPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215I2dldFRtb2RlbEtleSA8ZW0+VG1vZGVsIEtleTwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2UjZ2V0VGF4b25vbXkoKQotICogQG1vZGVsIAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIFRheG9ub215IGV4dGVuZHMgRU9iamVjdCB7Ci0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TmxuYW1lPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5OYW1lfS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk5sbmFtZTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk5sbmFtZTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXlQYWNrYWdlI2dldFRheG9ub215X05sbmFtZSgpCi0JICogQG1vZGVsIHR5cGU9Im9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuTmFtZSIgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUxpc3QgZ2V0TmxuYW1lKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5DYXRlZ29yeTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuQ2F0ZWdvcnl9LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+Q2F0ZWdvcnk8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5DYXRlZ29yeTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXlQYWNrYWdlI2dldFRheG9ub215X0NhdGVnb3J5KCkKLQkgKiBAbW9kZWwgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5DYXRlZ29yeSIgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUxpc3QgZ2V0Q2F0ZWdvcnkoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPklkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JZDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JZDwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjc2V0SWQoU3RyaW5nKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2UjZ2V0VGF4b25vbXlfSWQoKQotCSAqIEBtb2RlbCB1bmlxdWU9ImZhbHNlIiBkYXRhVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLkFueVVSSSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGdldElkKCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215I2dldElkIDxlbT5JZDwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SWQ8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI2dldElkKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0Jdm9pZCBzZXRJZChTdHJpbmcgdmFsdWUpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TG9jYXRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkxvY2F0aW9uPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkxvY2F0aW9uPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNzZXRMb2NhdGlvbihTdHJpbmcpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215UGFja2FnZSNnZXRUYXhvbm9teV9Mb2NhdGlvbigpCi0JICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuQW55VVJJIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZ2V0TG9jYXRpb24oKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXkjZ2V0TG9jYXRpb24gPGVtPkxvY2F0aW9uPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Mb2NhdGlvbjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjZ2V0TG9jYXRpb24oKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldExvY2F0aW9uKFN0cmluZyB2YWx1ZSk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI3NldE5hbWUoU3RyaW5nKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2UjZ2V0VGF4b25vbXlfTmFtZSgpCi0JICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuU3RyaW5nIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZ2V0TmFtZSgpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teSNnZXROYW1lIDxlbT5OYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5OYW1lPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNnZXROYW1lKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0Jdm9pZCBzZXROYW1lKFN0cmluZyB2YWx1ZSk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5SZWY8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlJlZjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5SZWY8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI3NldFJlZihTdHJpbmcpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215UGFja2FnZSNnZXRUYXhvbm9teV9SZWYoKQotCSAqIEBtb2RlbCB1bmlxdWU9ImZhbHNlIiBkYXRhVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLkFueVVSSSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGdldFJlZigpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teSNnZXRSZWYgPGVtPlJlZjwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+UmVmPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNnZXRSZWYoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldFJlZihTdHJpbmcgdmFsdWUpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VG1vZGVsIEtleTwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VG1vZGVsIEtleTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5UbW9kZWwgS2V5PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNzZXRUbW9kZWxLZXkoU3RyaW5nKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2UjZ2V0VGF4b25vbXlfVG1vZGVsS2V5KCkKLQkgKiBAbW9kZWwgdW5pcXVlPSJmYWxzZSIgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZS5TdHJpbmciIHJlcXVpcmVkPSJ0cnVlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZ2V0VG1vZGVsS2V5KCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215I2dldFRtb2RlbEtleSA8ZW0+VG1vZGVsIEtleTwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VG1vZGVsIEtleTwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjZ2V0VG1vZGVsS2V5KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0Jdm9pZCBzZXRUbW9kZWxLZXkoU3RyaW5nIHZhbHVlKTsKLQotfSAvLyBUYXhvbm9teQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvVGF4b25vbXlGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS9UYXhvbm9teUZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjA2ZmRiZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS9UYXhvbm9teUZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogVGF4b25vbXlGYWN0b3J5LmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0OSBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUZhY3Rvcnk7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5GYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgotICogSXQgcHJvdmlkZXMgYSBjcmVhdGUgbWV0aG9kIGZvciBlYWNoIG5vbi1hYnN0cmFjdCBjbGFzcyBvZiB0aGUgbW9kZWwuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2UKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBUYXhvbm9teUZhY3RvcnkgZXh0ZW5kcyBFRmFjdG9yeSB7Ci0JLyoqCi0JICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlUYXhvbm9teUZhY3RvcnkgZUlOU1RBTkNFID0gbmV3IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbC5UYXhvbm9teUZhY3RvcnlJbXBsKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkNhdGVnb3J5PC9lbT4nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5DYXRlZ29yeTwvZW0+Jy4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JQ2F0ZWdvcnkgY3JlYXRlQ2F0ZWdvcnkoKTsKLQotCS8qKgotCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+Jy4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRG9jdW1lbnRSb290IGNyZWF0ZURvY3VtZW50Um9vdCgpOwotCi0JLyoqCi0JICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5OYW1lPC9lbT4nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5OYW1lPC9lbT4nLgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlOYW1lIGNyZWF0ZU5hbWUoKTsKLQotCS8qKgotCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+VGF4b25vbXk8L2VtPicuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlRheG9ub215PC9lbT4nLgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlUYXhvbm9teSBjcmVhdGVUYXhvbm9teSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlUYXhvbm9teVBhY2thZ2UgZ2V0VGF4b25vbXlQYWNrYWdlKCk7Ci0KLX0gLy9UYXhvbm9teUZhY3RvcnkKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L1RheG9ub215UGFja2FnZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvVGF4b25vbXlQYWNrYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiZDk2ZjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvVGF4b25vbXlQYWNrYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NTAgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBUYXhvbm9teVBhY2thZ2UuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ5IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBUaGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoZSBtb2RlbC4KLSAqIEl0IGNvbnRhaW5zIGFjY2Vzc29ycyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0byByZXByZXNlbnQKLSAqIDx1bD4KLSAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4KLSAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+Ci0gKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KLSAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+Ci0gKiA8L3VsPgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8IS0tIGJlZ2luLW1vZGVsLWRvYyAtLT4KLSAqIAotICogICAgU2VlIGh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZS5odG1sIGFuZAotICogICAgaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLXhtbCBmb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBuYW1lc3BhY2UuCi0gKiAKLSAqICAgICBUaGlzIHNjaGVtYSBkb2N1bWVudCBkZXNjcmliZXMgdGhlIFhNTCBuYW1lc3BhY2UsIGluIGEgZm9ybQotICogICAgIHN1aXRhYmxlIGZvciBpbXBvcnQgYnkgb3RoZXIgc2NoZW1hIGRvY3VtZW50cy4gIAotICogCi0gKiAgICAgTm90ZSB0aGF0IGxvY2FsIG5hbWVzIGluIHRoaXMgbmFtZXNwYWNlIGFyZSBpbnRlbmRlZCB0byBiZSBkZWZpbmVkCi0gKiAgICAgb25seSBieSB0aGUgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSBvciBpdHMgc3ViZ3JvdXBzLiAgVGhlCi0gKiAgICAgZm9sbG93aW5nIG5hbWVzIGFyZSBjdXJyZW50bHkgZGVmaW5lZCBpbiB0aGlzIG5hbWVzcGFjZSBhbmQgc2hvdWxkCi0gKiAgICAgbm90IGJlIHVzZWQgd2l0aCBjb25mbGljdGluZyBzZW1hbnRpY3MgYnkgYW55IFdvcmtpbmcgR3JvdXAsCi0gKiAgICAgc3BlY2lmaWNhdGlvbiwgb3IgZG9jdW1lbnQgaW5zdGFuY2U6Ci0gKiAKLSAqICAgICBiYXNlIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlIHZhbHVlCi0gKiAgICAgICAgICBwcm92aWRlcyBhIFVSSSB0byBiZSB1c2VkIGFzIHRoZSBiYXNlIGZvciBpbnRlcnByZXRpbmcgYW55Ci0gKiAgICAgICAgICByZWxhdGl2ZSBVUklzIGluIHRoZSBzY29wZSBvZiB0aGUgZWxlbWVudCBvbiB3aGljaCBpdAotICogICAgICAgICAgYXBwZWFyczsgaXRzIHZhbHVlIGlzIGluaGVyaXRlZC4gIFRoaXMgbmFtZSBpcyByZXNlcnZlZAotICogICAgICAgICAgYnkgdmlydHVlIG9mIGl0cyBkZWZpbml0aW9uIGluIHRoZSBYTUwgQmFzZSBzcGVjaWZpY2F0aW9uLgotICogCi0gKiAgICAgaWQgICAoYXMgYW4gYXR0cmlidXRlIG5hbWUpOiBkZW5vdGVzIGFuIGF0dHJpYnV0ZSB3aG9zZSB2YWx1ZQotICogICAgICAgICAgc2hvdWxkIGJlIGludGVycHJldGVkIGFzIGlmIGRlY2xhcmVkIHRvIGJlIG9mIHR5cGUgSUQuCi0gKiAgICAgICAgICBUaGUgeG1sOmlkIHNwZWNpZmljYXRpb24gaXMgbm90IHlldCBhIFczQyBSZWNvbW1lbmRhdGlvbiwKLSAqICAgICAgICAgIGJ1dCB0aGlzIGF0dHJpYnV0ZSBpcyBpbmNsdWRlZCBoZXJlIHRvIGZhY2lsaXRhdGUgZXhwZXJpbWVudGF0aW9uCi0gKiAgICAgICAgICB3aXRoIHRoZSBtZWNoYW5pc21zIGl0IHByb3Bvc2VzLiAgTm90ZSB0aGF0IGl0IGlzIF9ub3RfIGluY2x1ZGVkCi0gKiAgICAgICAgICBpbiB0aGUgc3BlY2lhbEF0dHJzIGF0dHJpYnV0ZSBncm91cC4KLSAqIAotICogICAgIGxhbmcgKGFzIGFuIGF0dHJpYnV0ZSBuYW1lKTogZGVub3RlcyBhbiBhdHRyaWJ1dGUgd2hvc2UgdmFsdWUKLSAqICAgICAgICAgIGlzIGEgbGFuZ3VhZ2UgY29kZSBmb3IgdGhlIG5hdHVyYWwgbGFuZ3VhZ2Ugb2YgdGhlIGNvbnRlbnQgb2YKLSAqICAgICAgICAgIGFueSBlbGVtZW50OyBpdHMgdmFsdWUgaXMgaW5oZXJpdGVkLiAgVGhpcyBuYW1lIGlzIHJlc2VydmVkCi0gKiAgICAgICAgICBieSB2aXJ0dWUgb2YgaXRzIGRlZmluaXRpb24gaW4gdGhlIFhNTCBzcGVjaWZpY2F0aW9uLgotICogICAKLSAqICAgICBzcGFjZSAoYXMgYW4gYXR0cmlidXRlIG5hbWUpOiBkZW5vdGVzIGFuIGF0dHJpYnV0ZSB3aG9zZQotICogICAgICAgICAgdmFsdWUgaXMgYSBrZXl3b3JkIGluZGljYXRpbmcgd2hhdCB3aGl0ZXNwYWNlIHByb2Nlc3NpbmcKLSAqICAgICAgICAgIGRpc2NpcGxpbmUgaXMgaW50ZW5kZWQgZm9yIHRoZSBjb250ZW50IG9mIHRoZSBlbGVtZW50OyBpdHMKLSAqICAgICAgICAgIHZhbHVlIGlzIGluaGVyaXRlZC4gIFRoaXMgbmFtZSBpcyByZXNlcnZlZCBieSB2aXJ0dWUgb2YgaXRzCi0gKiAgICAgICAgICBkZWZpbml0aW9uIGluIHRoZSBYTUwgc3BlY2lmaWNhdGlvbi4KLSAqIAotICogICAgIEZhdGhlciAoaW4gYW55IGNvbnRleHQgYXQgYWxsKTogZGVub3RlcyBKb24gQm9zYWssIHRoZSBjaGFpciBvZiAKLSAqICAgICAgICAgIHRoZSBvcmlnaW5hbCBYTUwgV29ya2luZyBHcm91cC4gIFRoaXMgbmFtZSBpcyByZXNlcnZlZCBieSAKLSAqICAgICAgICAgIHRoZSBmb2xsb3dpbmcgZGVjaXNpb24gb2YgdGhlIFczQyBYTUwgUGxlbmFyeSBhbmQgCi0gKiAgICAgICAgICBYTUwgQ29vcmRpbmF0aW9uIGdyb3VwczoKLSAqIAotICogICAgICAgICAgICAgIEluIGFwcHJlY2lhdGlvbiBmb3IgaGlzIHZpc2lvbiwgbGVhZGVyc2hpcCBhbmQgZGVkaWNhdGlvbgotICogICAgICAgICAgICAgIHRoZSBXM0MgWE1MIFBsZW5hcnkgb24gdGhpcyAxMHRoIGRheSBvZiBGZWJydWFyeSwgMjAwMAotICogICAgICAgICAgICAgIHJlc2VydmVzIGZvciBKb24gQm9zYWsgaW4gcGVycGV0dWl0eSB0aGUgWE1MIG5hbWUKLSAqICAgICAgICAgICAgICB4bWw6RmF0aGVyCi0gKiAgIAotICogVGhpcyBzY2hlbWEgZGVmaW5lcyBhdHRyaWJ1dGVzIGFuZCBhbiBhdHRyaWJ1dGUgZ3JvdXAKLSAqICAgICAgICAgc3VpdGFibGUgZm9yIHVzZSBieQotICogICAgICAgICBzY2hlbWFzIHdpc2hpbmcgdG8gYWxsb3cgeG1sOmJhc2UsIHhtbDpsYW5nLCB4bWw6c3BhY2Ugb3IgeG1sOmlkCi0gKiAgICAgICAgIGF0dHJpYnV0ZXMgb24gZWxlbWVudHMgdGhleSBkZWZpbmUuCi0gKiAKLSAqICAgICAgICAgVG8gZW5hYmxlIHRoaXMsIHN1Y2ggYSBzY2hlbWEgbXVzdCBpbXBvcnQgdGhpcyBzY2hlbWEKLSAqICAgICAgICAgZm9yIHRoZSBYTUwgbmFtZXNwYWNlLCBlLmcuIGFzIGZvbGxvd3M6Ci0gKiAgICAgICAgICZsdDtzY2hlbWEgLiAuIC4mZ3Q7Ci0gKiAgICAgICAgICAuIC4gLgotICogICAgICAgICAgJmx0O2ltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIKLSAqICAgICAgICAgICAgICAgICAgICAgc2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCIvJmd0OwotICogCi0gKiAgICAgICAgIFN1YnNlcXVlbnRseSwgcXVhbGlmaWVkIHJlZmVyZW5jZSB0byBhbnkgb2YgdGhlIGF0dHJpYnV0ZXMKLSAqICAgICAgICAgb3IgdGhlIGdyb3VwIGRlZmluZWQgYmVsb3cgd2lsbCBoYXZlIHRoZSBkZXNpcmVkIGVmZmVjdCwgZS5nLgotICogCi0gKiAgICAgICAgICZsdDt0eXBlIC4gLiAuJmd0OwotICogICAgICAgICAgLiAuIC4KLSAqICAgICAgICAgICZsdDthdHRyaWJ1dGVHcm91cCByZWY9InhtbDpzcGVjaWFsQXR0cnMiLyZndDsKLSAqICAKLSAqICAgICAgICAgIHdpbGwgZGVmaW5lIGEgdHlwZSB3aGljaCB3aWxsIHNjaGVtYS12YWxpZGF0ZSBhbiBpbnN0YW5jZQotICogICAgICAgICAgZWxlbWVudCB3aXRoIGFueSBvZiB0aG9zZSBhdHRyaWJ1dGVzCi0gKiBJbiBrZWVwaW5nIHdpdGggdGhlIFhNTCBTY2hlbWEgV0cncyBzdGFuZGFyZCB2ZXJzaW9uaW5nCi0gKiAgICBwb2xpY3ksIHRoaXMgc2NoZW1hIGRvY3VtZW50IHdpbGwgcGVyc2lzdCBhdAotICogICAgaHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC94bWwueHNkLgotICogICAgQXQgdGhlIGRhdGUgb2YgaXNzdWUgaXQgY2FuIGFsc28gYmUgZm91bmQgYXQKLSAqICAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZC4KLSAqICAgIFRoZSBzY2hlbWEgZG9jdW1lbnQgYXQgdGhhdCBVUkkgbWF5IGhvd2V2ZXIgY2hhbmdlIGluIHRoZSBmdXR1cmUsCi0gKiAgICBpbiBvcmRlciB0byByZW1haW4gY29tcGF0aWJsZSB3aXRoIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBYTUwgU2NoZW1hCi0gKiAgICBpdHNlbGYsIG9yIHdpdGggdGhlIFhNTCBuYW1lc3BhY2UgaXRzZWxmLiAgSW4gb3RoZXIgd29yZHMsIGlmIHRoZSBYTUwKLSAqICAgIFNjaGVtYSBvciBYTUwgbmFtZXNwYWNlcyBjaGFuZ2UsIHRoZSB2ZXJzaW9uIG9mIHRoaXMgZG9jdW1lbnQgYXQKLSAqICAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCB3aWxsIGNoYW5nZQotICogICAgYWNjb3JkaW5nbHk7IHRoZSB2ZXJzaW9uIGF0Ci0gKiAgICBodHRwOi8vd3d3LnczLm9yZy8yMDA1LzA4L3htbC54c2Qgd2lsbCBub3QgY2hhbmdlLgotICogICAKLSAqIDwhLS0gZW5kLW1vZGVsLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teUZhY3RvcnkKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBUYXhvbm9teVBhY2thZ2UgZXh0ZW5kcyBFUGFja2FnZSB7Ci0JLyoqCi0JICogVGhlIHBhY2thZ2UgbmFtZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZU5BTUUgPSAidGF4b25vbXkiOwotCi0JLyoqCi0JICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIFVSSS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZU5TX1VSSSA9ICJodHRwOi8vZWNsaXBzZS5vcmcvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teSI7Ci0KLQkvKioKLQkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgbmFtZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZU5TX1BSRUZJWCA9ICJ0YXhvbm9teSI7Ci0KLQkvKioKLQkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBwYWNrYWdlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCVRheG9ub215UGFja2FnZSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGwuVGF4b25vbXlQYWNrYWdlSW1wbC5pbml0KCk7Ci0KLQkvKioKLQkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbC5DYXRlZ29yeUltcGwgPGVtPkNhdGVnb3J5PC9lbT59JyBjbGFzcy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsLkNhdGVnb3J5SW1wbAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsLlRheG9ub215UGFja2FnZUltcGwjZ2V0Q2F0ZWdvcnkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlpbnQgQ0FURUdPUlkgPSAwOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5sbmFtZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgQ0FURUdPUllfX05MTkFNRSA9IDA7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q2F0ZWdvcnk8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IENBVEVHT1JZX19DQVRFR09SWSA9IDE7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q29kZTwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IENBVEVHT1JZX19DT0RFID0gMjsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgQ0FURUdPUllfX05BTUUgPSAzOwotCi0JLyoqCi0JICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSB0aGUgJzxlbT5DYXRlZ29yeTwvZW0+JyBjbGFzcy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBDQVRFR09SWV9GRUFUVVJFX0NPVU5UID0gNDsKLQotCS8qKgotCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsLkRvY3VtZW50Um9vdEltcGwgPGVtPkRvY3VtZW50IFJvb3Q8L2VtPn0nIGNsYXNzLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGwuRG9jdW1lbnRSb290SW1wbAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsLlRheG9ub215UGFja2FnZUltcGwjZ2V0RG9jdW1lbnRSb290KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JaW50IERPQ1VNRU5UX1JPT1QgPSAxOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk1peGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBET0NVTUVOVF9ST09UX19NSVhFRCA9IDA7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+WE1MTlMgUHJlZml4IE1hcDwvYj48L2VtPicgbWFwLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IERPQ1VNRU5UX1JPT1RfX1hNTE5TX1BSRUZJWF9NQVAgPSAxOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlhTSSBTY2hlbWEgTG9jYXRpb248L2I+PC9lbT4nIG1hcC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBET0NVTUVOVF9ST09UX19YU0lfU0NIRU1BX0xPQ0FUSU9OID0gMjsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DYXRlZ29yeTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IERPQ1VNRU5UX1JPT1RfX0NBVEVHT1JZID0gMzsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgRE9DVU1FTlRfUk9PVF9fTkFNRSA9IDQ7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGF4b25vbXk8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBET0NVTUVOVF9ST09UX19UQVhPTk9NWSA9IDU7Ci0KLQkvKioKLQkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlIHRoZSAnPGVtPkRvY3VtZW50IFJvb3Q8L2VtPicgY2xhc3MuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgRE9DVU1FTlRfUk9PVF9GRUFUVVJFX0NPVU5UID0gNjsKLQotCS8qKgotCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsLk5hbWVJbXBsIDxlbT5OYW1lPC9lbT59JyBjbGFzcy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsLk5hbWVJbXBsCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGwuVGF4b25vbXlQYWNrYWdlSW1wbCNnZXROYW1lXygpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCWludCBOQU1FID0gMjsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5WYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IE5BTUVfX1ZBTFVFID0gMDsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYW5nPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgTkFNRV9fTEFORyA9IDE7Ci0KLQkvKioKLQkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlIHRoZSAnPGVtPk5hbWU8L2VtPicgY2xhc3MuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgTkFNRV9GRUFUVVJFX0NPVU5UID0gMjsKLQotCS8qKgotCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsLlRheG9ub215SW1wbCA8ZW0+VGF4b25vbXk8L2VtPn0nIGNsYXNzLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGwuVGF4b25vbXlJbXBsCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGwuVGF4b25vbXlQYWNrYWdlSW1wbCNnZXRUYXhvbm9teSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCWludCBUQVhPTk9NWSA9IDM7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmxuYW1lPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBUQVhPTk9NWV9fTkxOQU1FID0gMDsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DYXRlZ29yeTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgVEFYT05PTVlfX0NBVEVHT1JZID0gMTsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JZDwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IFRBWE9OT01ZX19JRCA9IDI7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TG9jYXRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBUQVhPTk9NWV9fTE9DQVRJT04gPSAzOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBUQVhPTk9NWV9fTkFNRSA9IDQ7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVmPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgVEFYT05PTVlfX1JFRiA9IDU7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VG1vZGVsIEtleTwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IFRBWE9OT01ZX19UTU9ERUxfS0VZID0gNjsKLQotCS8qKgotCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgdGhlICc8ZW0+VGF4b25vbXk8L2VtPicgY2xhc3MuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgVEFYT05PTVlfRkVBVFVSRV9DT1VOVCA9IDc7Ci0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuQ2F0ZWdvcnkgPGVtPkNhdGVnb3J5PC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkNhdGVnb3J5PC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5DYXRlZ29yeQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQ2xhc3MgZ2V0Q2F0ZWdvcnkoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkNhdGVnb3J5I2dldE5sbmFtZSA8ZW0+TmxuYW1lPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxlbT5ObG5hbWU8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkNhdGVnb3J5I2dldE5sbmFtZSgpCi0JICogQHNlZSAjZ2V0Q2F0ZWdvcnkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFUmVmZXJlbmNlIGdldENhdGVnb3J5X05sbmFtZSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuQ2F0ZWdvcnkjZ2V0Q2F0ZWdvcnkgPGVtPkNhdGVnb3J5PC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxlbT5DYXRlZ29yeTwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuQ2F0ZWdvcnkjZ2V0Q2F0ZWdvcnkoKQotCSAqIEBzZWUgI2dldENhdGVnb3J5KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRVJlZmVyZW5jZSBnZXRDYXRlZ29yeV9DYXRlZ29yeSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkNhdGVnb3J5I2dldENvZGUgPGVtPkNvZGU8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Db2RlPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5DYXRlZ29yeSNnZXRDb2RlKCkKLQkgKiBAc2VlICNnZXRDYXRlZ29yeSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVBdHRyaWJ1dGUgZ2V0Q2F0ZWdvcnlfQ29kZSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkNhdGVnb3J5I2dldE5hbWUgPGVtPk5hbWU8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5OYW1lPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5DYXRlZ29yeSNnZXROYW1lKCkKLQkgKiBAc2VlICNnZXRDYXRlZ29yeSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVBdHRyaWJ1dGUgZ2V0Q2F0ZWdvcnlfTmFtZSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5Eb2N1bWVudFJvb3QgPGVtPkRvY3VtZW50IFJvb3Q8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuRG9jdW1lbnRSb290Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCUVDbGFzcyBnZXREb2N1bWVudFJvb3QoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkRvY3VtZW50Um9vdCNnZXRNaXhlZCA8ZW0+TWl4ZWQ8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgbGlzdCAnPGVtPk1peGVkPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5Eb2N1bWVudFJvb3QjZ2V0TWl4ZWQoKQotCSAqIEBzZWUgI2dldERvY3VtZW50Um9vdCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVBdHRyaWJ1dGUgZ2V0RG9jdW1lbnRSb290X01peGVkKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIG1hcCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuRG9jdW1lbnRSb290I2dldFhNTE5TUHJlZml4TWFwIDxlbT5YTUxOUyBQcmVmaXggTWFwPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgbWFwICc8ZW0+WE1MTlMgUHJlZml4IE1hcDwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuRG9jdW1lbnRSb290I2dldFhNTE5TUHJlZml4TWFwKCkKLQkgKiBAc2VlICNnZXREb2N1bWVudFJvb3QoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9YTUxOU1ByZWZpeE1hcCgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBtYXAgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkRvY3VtZW50Um9vdCNnZXRYU0lTY2hlbWFMb2NhdGlvbiA8ZW0+WFNJIFNjaGVtYSBMb2NhdGlvbjwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIG1hcCAnPGVtPlhTSSBTY2hlbWEgTG9jYXRpb248L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkRvY3VtZW50Um9vdCNnZXRYU0lTY2hlbWFMb2NhdGlvbigpCi0JICogQHNlZSAjZ2V0RG9jdW1lbnRSb290KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRVJlZmVyZW5jZSBnZXREb2N1bWVudFJvb3RfWFNJU2NoZW1hTG9jYXRpb24oKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5Eb2N1bWVudFJvb3QjZ2V0Q2F0ZWdvcnkgPGVtPkNhdGVnb3J5PC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICc8ZW0+Q2F0ZWdvcnk8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkRvY3VtZW50Um9vdCNnZXRDYXRlZ29yeSgpCi0JICogQHNlZSAjZ2V0RG9jdW1lbnRSb290KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRVJlZmVyZW5jZSBnZXREb2N1bWVudFJvb3RfQ2F0ZWdvcnkoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5Eb2N1bWVudFJvb3QjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPGVtPk5hbWU8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkRvY3VtZW50Um9vdCNnZXROYW1lKCkKLQkgKiBAc2VlICNnZXREb2N1bWVudFJvb3QoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9OYW1lKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuRG9jdW1lbnRSb290I2dldFRheG9ub215IDxlbT5UYXhvbm9teTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPGVtPlRheG9ub215PC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5Eb2N1bWVudFJvb3QjZ2V0VGF4b25vbXkoKQotCSAqIEBzZWUgI2dldERvY3VtZW50Um9vdCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVSZWZlcmVuY2UgZ2V0RG9jdW1lbnRSb290X1RheG9ub215KCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215Lk5hbWUgPGVtPk5hbWU8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+TmFtZTwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuTmFtZQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQ2xhc3MgZ2V0TmFtZV8oKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5OYW1lI2dldFZhbHVlIDxlbT5WYWx1ZTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlZhbHVlPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5OYW1lI2dldFZhbHVlKCkKLQkgKiBAc2VlICNnZXROYW1lXygpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVBdHRyaWJ1dGUgZ2V0TmFtZV9WYWx1ZSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215Lk5hbWUjZ2V0TGFuZyA8ZW0+TGFuZzwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkxhbmc8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215Lk5hbWUjZ2V0TGFuZygpCi0JICogQHNlZSAjZ2V0TmFtZV8oKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQXR0cmlidXRlIGdldE5hbWVfTGFuZygpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teSA8ZW0+VGF4b25vbXk8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+VGF4b25vbXk8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCUVDbGFzcyBnZXRUYXhvbm9teSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXkjZ2V0TmxuYW1lIDxlbT5ObG5hbWU8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPk5sbmFtZTwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXkjZ2V0TmxuYW1lKCkKLQkgKiBAc2VlICNnZXRUYXhvbm9teSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVSZWZlcmVuY2UgZ2V0VGF4b25vbXlfTmxuYW1lKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teSNnZXRDYXRlZ29yeSA8ZW0+Q2F0ZWdvcnk8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPkNhdGVnb3J5PC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teSNnZXRDYXRlZ29yeSgpCi0JICogQHNlZSAjZ2V0VGF4b25vbXkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFUmVmZXJlbmNlIGdldFRheG9ub215X0NhdGVnb3J5KCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXkjZ2V0SWQgPGVtPklkPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SWQ8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215I2dldElkKCkKLQkgKiBAc2VlICNnZXRUYXhvbm9teSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVBdHRyaWJ1dGUgZ2V0VGF4b25vbXlfSWQoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teSNnZXRMb2NhdGlvbiA8ZW0+TG9jYXRpb248L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Mb2NhdGlvbjwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXkjZ2V0TG9jYXRpb24oKQotCSAqIEBzZWUgI2dldFRheG9ub215KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUF0dHJpYnV0ZSBnZXRUYXhvbm9teV9Mb2NhdGlvbigpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215I2dldE5hbWUgPGVtPk5hbWU8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5OYW1lPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teSNnZXROYW1lKCkKLQkgKiBAc2VlICNnZXRUYXhvbm9teSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVBdHRyaWJ1dGUgZ2V0VGF4b25vbXlfTmFtZSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215I2dldFJlZiA8ZW0+UmVmPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+UmVmPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teSNnZXRSZWYoKQotCSAqIEBzZWUgI2dldFRheG9ub215KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUF0dHJpYnV0ZSBnZXRUYXhvbm9teV9SZWYoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teSNnZXRUbW9kZWxLZXkgPGVtPlRtb2RlbCBLZXk8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5UbW9kZWwgS2V5PC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teSNnZXRUbW9kZWxLZXkoKQotCSAqIEBzZWUgI2dldFRheG9ub215KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUF0dHJpYnV0ZSBnZXRUYXhvbm9teV9UbW9kZWxLZXkoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVRheG9ub215RmFjdG9yeSBnZXRUYXhvbm9teUZhY3RvcnkoKTsKLQotfSAvL1RheG9ub215UGFja2FnZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvaW1wbC9DYXRlZ29yeUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L2ltcGwvQ2F0ZWdvcnlJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1YjJlM2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvaW1wbC9DYXRlZ29yeUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxMyArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IENhdGVnb3J5SW1wbC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDggY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU9iamVjdEltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FT2JqZWN0Q29udGFpbm1lbnRFTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5JbnRlcm5hbEVMaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5DYXRlZ29yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215Lk5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2U7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5DYXRlZ29yeTwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsLkNhdGVnb3J5SW1wbCNnZXRObG5hbWUgPGVtPk5sbmFtZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsLkNhdGVnb3J5SW1wbCNnZXRDYXRlZ29yeSA8ZW0+Q2F0ZWdvcnk8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbC5DYXRlZ29yeUltcGwjZ2V0Q29kZSA8ZW0+Q29kZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsLkNhdGVnb3J5SW1wbCNnZXROYW1lIDxlbT5OYW1lPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgQ2F0ZWdvcnlJbXBsIGV4dGVuZHMgRU9iamVjdEltcGwgaW1wbGVtZW50cyBDYXRlZ29yeSB7Ci0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmxuYW1lKCkgPGVtPk5sbmFtZTwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRObG5hbWUoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBFTGlzdCBubG5hbWUgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0Q2F0ZWdvcnkoKSA8ZW0+Q2F0ZWdvcnk8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0Q2F0ZWdvcnkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBFTGlzdCBjYXRlZ29yeSA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0Q29kZSgpIDxlbT5Db2RlPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRDb2RlKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBDT0RFX0VERUZBVUxUID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldENvZGUoKSA8ZW0+Q29kZTwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0Q29kZSgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIFN0cmluZyBjb2RlID0gQ09ERV9FREVGQVVMVDsKLQotCS8qKgotCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROYW1lKCkgPGVtPk5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldE5hbWUoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUVfRURFRkFVTFQgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmFtZSgpIDxlbT5OYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXROYW1lKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgU3RyaW5nIG5hbWUgPSBOQU1FX0VERUZBVUxUOwotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIENhdGVnb3J5SW1wbCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKLQkJcmV0dXJuIFRheG9ub215UGFja2FnZS5lSU5TVEFOQ0UuZ2V0Q2F0ZWdvcnkoKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUxpc3QgZ2V0TmxuYW1lKCkgewotCQlpZiAobmxuYW1lID09IG51bGwpIHsKLQkJCW5sbmFtZSA9IG5ldyBFT2JqZWN0Q29udGFpbm1lbnRFTGlzdChOYW1lLmNsYXNzLCB0aGlzLCBUYXhvbm9teVBhY2thZ2UuQ0FURUdPUllfX05MTkFNRSk7Ci0JCX0KLQkJcmV0dXJuIG5sbmFtZTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUxpc3QgZ2V0Q2F0ZWdvcnkoKSB7Ci0JCWlmIChjYXRlZ29yeSA9PSBudWxsKSB7Ci0JCQljYXRlZ29yeSA9IG5ldyBFT2JqZWN0Q29udGFpbm1lbnRFTGlzdChDYXRlZ29yeS5jbGFzcywgdGhpcywgVGF4b25vbXlQYWNrYWdlLkNBVEVHT1JZX19DQVRFR09SWSk7Ci0JCX0KLQkJcmV0dXJuIGNhdGVnb3J5OwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0Q29kZSgpIHsKLQkJcmV0dXJuIGNvZGU7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0Q29kZShTdHJpbmcgbmV3Q29kZSkgewotCQlTdHJpbmcgb2xkQ29kZSA9IGNvZGU7Ci0JCWNvZGUgPSBuZXdDb2RlOwotCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0JCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBUYXhvbm9teVBhY2thZ2UuQ0FURUdPUllfX0NPREUsIG9sZENvZGUsIGNvZGUpKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0JCXJldHVybiBuYW1lOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5ld05hbWUpIHsKLQkJU3RyaW5nIG9sZE5hbWUgPSBuYW1lOwotCQluYW1lID0gbmV3TmFtZTsKLQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVGF4b25vbXlQYWNrYWdlLkNBVEVHT1JZX19OQU1FLCBvbGROYW1lLCBuYW1lKSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgQ2xhc3MgYmFzZUNsYXNzLCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7Ci0JCWlmIChmZWF0dXJlSUQgPj0gMCkgewotCQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZmVhdHVyZUlELCBiYXNlQ2xhc3MpKSB7Ci0JCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuQ0FURUdPUllfX05MTkFNRToKLQkJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRObG5hbWUoKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOwotCQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkNBVEVHT1JZX19DQVRFR09SWToKLQkJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRDYXRlZ29yeSgpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0JCQkJZGVmYXVsdDoKLQkJCQkJcmV0dXJuIGVEeW5hbWljSW52ZXJzZVJlbW92ZShvdGhlckVuZCwgZmVhdHVyZUlELCBiYXNlQ2xhc3MsIG1zZ3MpOwotCQkJfQotCQl9Ci0JCXJldHVybiBlQmFzaWNTZXRDb250YWluZXIobnVsbCwgZmVhdHVyZUlELCBtc2dzKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGVHZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlLCBib29sZWFuIHJlc29sdmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5DQVRFR09SWV9fTkxOQU1FOgotCQkJCXJldHVybiBnZXRObG5hbWUoKTsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkNBVEVHT1JZX19DQVRFR09SWToKLQkJCQlyZXR1cm4gZ2V0Q2F0ZWdvcnkoKTsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkNBVEVHT1JZX19DT0RFOgotCQkJCXJldHVybiBnZXRDb2RlKCk7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5DQVRFR09SWV9fTkFNRToKLQkJCQlyZXR1cm4gZ2V0TmFtZSgpOwotCQl9Ci0JCXJldHVybiBlRHluYW1pY0dldChlRmVhdHVyZSwgcmVzb2x2ZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgZVNldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUsIE9iamVjdCBuZXdWYWx1ZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkNBVEVHT1JZX19OTE5BTUU6Ci0JCQkJZ2V0TmxuYW1lKCkuY2xlYXIoKTsKLQkJCQlnZXRObG5hbWUoKS5hZGRBbGwoKENvbGxlY3Rpb24pbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkNBVEVHT1JZX19DQVRFR09SWToKLQkJCQlnZXRDYXRlZ29yeSgpLmNsZWFyKCk7Ci0JCQkJZ2V0Q2F0ZWdvcnkoKS5hZGRBbGwoKENvbGxlY3Rpb24pbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkNBVEVHT1JZX19DT0RFOgotCQkJCXNldENvZGUoKFN0cmluZyluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuQ0FURUdPUllfX05BTUU6Ci0JCQkJc2V0TmFtZSgoU3RyaW5nKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCX0KLQkJZUR5bmFtaWNTZXQoZUZlYXR1cmUsIG5ld1ZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBlVW5zZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuQ0FURUdPUllfX05MTkFNRToKLQkJCQlnZXRObG5hbWUoKS5jbGVhcigpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkNBVEVHT1JZX19DQVRFR09SWToKLQkJCQlnZXRDYXRlZ29yeSgpLmNsZWFyKCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuQ0FURUdPUllfX0NPREU6Ci0JCQkJc2V0Q29kZShDT0RFX0VERUZBVUxUKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5DQVRFR09SWV9fTkFNRToKLQkJCQlzZXROYW1lKE5BTUVfRURFRkFVTFQpOwotCQkJCXJldHVybjsKLQkJfQotCQllRHluYW1pY1Vuc2V0KGVGZWF0dXJlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuQ0FURUdPUllfX05MTkFNRToKLQkJCQlyZXR1cm4gbmxuYW1lICE9IG51bGwgJiYgIW5sbmFtZS5pc0VtcHR5KCk7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5DQVRFR09SWV9fQ0FURUdPUlk6Ci0JCQkJcmV0dXJuIGNhdGVnb3J5ICE9IG51bGwgJiYgIWNhdGVnb3J5LmlzRW1wdHkoKTsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkNBVEVHT1JZX19DT0RFOgotCQkJCXJldHVybiBDT0RFX0VERUZBVUxUID09IG51bGwgPyBjb2RlICE9IG51bGwgOiAhQ09ERV9FREVGQVVMVC5lcXVhbHMoY29kZSk7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5DQVRFR09SWV9fTkFNRToKLQkJCQlyZXR1cm4gTkFNRV9FREVGQVVMVCA9PSBudWxsID8gbmFtZSAhPSBudWxsIDogIU5BTUVfRURFRkFVTFQuZXF1YWxzKG5hbWUpOwotCQl9Ci0JCXJldHVybiBlRHluYW1pY0lzU2V0KGVGZWF0dXJlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7Ci0KLQkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7Ci0JCXJlc3VsdC5hcHBlbmQoIiAoY29kZTogIik7Ci0JCXJlc3VsdC5hcHBlbmQoY29kZSk7Ci0JCXJlc3VsdC5hcHBlbmQoIiwgbmFtZTogIik7Ci0JCXJlc3VsdC5hcHBlbmQobmFtZSk7Ci0JCXJlc3VsdC5hcHBlbmQoJyknKTsKLQkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotCX0KLQotfSAvL0NhdGVnb3J5SW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvaW1wbC9Eb2N1bWVudFJvb3RJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS9pbXBsL0RvY3VtZW50Um9vdEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjc3ODc0NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS9pbXBsL0RvY3VtZW50Um9vdEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2NyArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IERvY3VtZW50Um9vdEltcGwuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ4IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FY29yZVBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVPYmplY3RJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVTdHJpbmdUb1N0cmluZ01hcEVudHJ5SW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkJhc2ljRmVhdHVyZU1hcDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZUVNYXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRmVhdHVyZU1hcDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5JbnRlcm5hbEVMaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5DYXRlZ29yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkRvY3VtZW50Um9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215Lk5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215UGFja2FnZTsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRvY3VtZW50IFJvb3Q8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbC5Eb2N1bWVudFJvb3RJbXBsI2dldE1peGVkIDxlbT5NaXhlZDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsLkRvY3VtZW50Um9vdEltcGwjZ2V0WE1MTlNQcmVmaXhNYXAgPGVtPlhNTE5TIFByZWZpeCBNYXA8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbC5Eb2N1bWVudFJvb3RJbXBsI2dldFhTSVNjaGVtYUxvY2F0aW9uIDxlbT5YU0kgU2NoZW1hIExvY2F0aW9uPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGwuRG9jdW1lbnRSb290SW1wbCNnZXRDYXRlZ29yeSA8ZW0+Q2F0ZWdvcnk8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbC5Eb2N1bWVudFJvb3RJbXBsI2dldE5hbWUgPGVtPk5hbWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbC5Eb2N1bWVudFJvb3RJbXBsI2dldFRheG9ub215IDxlbT5UYXhvbm9teTwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIERvY3VtZW50Um9vdEltcGwgZXh0ZW5kcyBFT2JqZWN0SW1wbCBpbXBsZW1lbnRzIERvY3VtZW50Um9vdCB7Ci0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TWl4ZWQoKSA8ZW0+TWl4ZWQ8L2VtPn0nIGF0dHJpYnV0ZSBsaXN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0TWl4ZWQoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBGZWF0dXJlTWFwIG1peGVkID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFhNTE5TUHJlZml4TWFwKCkgPGVtPlhNTE5TIFByZWZpeCBNYXA8L2VtPn0nIG1hcC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldFhNTE5TUHJlZml4TWFwKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRU1hcCB4TUxOU1ByZWZpeE1hcCA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRYU0lTY2hlbWFMb2NhdGlvbigpIDxlbT5YU0kgU2NoZW1hIExvY2F0aW9uPC9lbT59JyBtYXAuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRYU0lTY2hlbWFMb2NhdGlvbigpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIEVNYXAgeFNJU2NoZW1hTG9jYXRpb24gPSBudWxsOwotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIERvY3VtZW50Um9vdEltcGwoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7Ci0JCXJldHVybiBUYXhvbm9teVBhY2thZ2UuZUlOU1RBTkNFLmdldERvY3VtZW50Um9vdCgpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBGZWF0dXJlTWFwIGdldE1peGVkKCkgewotCQlpZiAobWl4ZWQgPT0gbnVsbCkgewotCQkJbWl4ZWQgPSBuZXcgQmFzaWNGZWF0dXJlTWFwKHRoaXMsIFRheG9ub215UGFja2FnZS5ET0NVTUVOVF9ST09UX19NSVhFRCk7Ci0JCX0KLQkJcmV0dXJuIG1peGVkOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFTWFwIGdldFhNTE5TUHJlZml4TWFwKCkgewotCQlpZiAoeE1MTlNQcmVmaXhNYXAgPT0gbnVsbCkgewotCQkJeE1MTlNQcmVmaXhNYXAgPSBuZXcgRWNvcmVFTWFwKEVjb3JlUGFja2FnZS5lSU5TVEFOQ0UuZ2V0RVN0cmluZ1RvU3RyaW5nTWFwRW50cnkoKSwgRVN0cmluZ1RvU3RyaW5nTWFwRW50cnlJbXBsLmNsYXNzLCB0aGlzLCBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWE1MTlNfUFJFRklYX01BUCk7Ci0JCX0KLQkJcmV0dXJuIHhNTE5TUHJlZml4TWFwOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFTWFwIGdldFhTSVNjaGVtYUxvY2F0aW9uKCkgewotCQlpZiAoeFNJU2NoZW1hTG9jYXRpb24gPT0gbnVsbCkgewotCQkJeFNJU2NoZW1hTG9jYXRpb24gPSBuZXcgRWNvcmVFTWFwKEVjb3JlUGFja2FnZS5lSU5TVEFOQ0UuZ2V0RVN0cmluZ1RvU3RyaW5nTWFwRW50cnkoKSwgRVN0cmluZ1RvU3RyaW5nTWFwRW50cnlJbXBsLmNsYXNzLCB0aGlzLCBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTik7Ci0JCX0KLQkJcmV0dXJuIHhTSVNjaGVtYUxvY2F0aW9uOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBDYXRlZ29yeSBnZXRDYXRlZ29yeSgpIHsKLQkJcmV0dXJuIChDYXRlZ29yeSlnZXRNaXhlZCgpLmdldChUYXhvbm9teVBhY2thZ2UuZUlOU1RBTkNFLmdldERvY3VtZW50Um9vdF9DYXRlZ29yeSgpLCB0cnVlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gYmFzaWNTZXRDYXRlZ29yeShDYXRlZ29yeSBuZXdDYXRlZ29yeSwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgewotCQlyZXR1cm4gKChGZWF0dXJlTWFwLkludGVybmFsKWdldE1peGVkKCkpLmJhc2ljQWRkKFRheG9ub215UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RG9jdW1lbnRSb290X0NhdGVnb3J5KCksIG5ld0NhdGVnb3J5LCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRDYXRlZ29yeShDYXRlZ29yeSBuZXdDYXRlZ29yeSkgewotCQkoKEZlYXR1cmVNYXAuSW50ZXJuYWwpZ2V0TWl4ZWQoKSkuc2V0KFRheG9ub215UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RG9jdW1lbnRSb290X0NhdGVnb3J5KCksIG5ld0NhdGVnb3J5KTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgTmFtZSBnZXROYW1lKCkgewotCQlyZXR1cm4gKE5hbWUpZ2V0TWl4ZWQoKS5nZXQoVGF4b25vbXlQYWNrYWdlLmVJTlNUQU5DRS5nZXREb2N1bWVudFJvb3RfTmFtZSgpLCB0cnVlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gYmFzaWNTZXROYW1lKE5hbWUgbmV3TmFtZSwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgewotCQlyZXR1cm4gKChGZWF0dXJlTWFwLkludGVybmFsKWdldE1peGVkKCkpLmJhc2ljQWRkKFRheG9ub215UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RG9jdW1lbnRSb290X05hbWUoKSwgbmV3TmFtZSwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0TmFtZShOYW1lIG5ld05hbWUpIHsKLQkJKChGZWF0dXJlTWFwLkludGVybmFsKWdldE1peGVkKCkpLnNldChUYXhvbm9teVBhY2thZ2UuZUlOU1RBTkNFLmdldERvY3VtZW50Um9vdF9OYW1lKCksIG5ld05hbWUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBUYXhvbm9teSBnZXRUYXhvbm9teSgpIHsKLQkJcmV0dXJuIChUYXhvbm9teSlnZXRNaXhlZCgpLmdldChUYXhvbm9teVBhY2thZ2UuZUlOU1RBTkNFLmdldERvY3VtZW50Um9vdF9UYXhvbm9teSgpLCB0cnVlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gYmFzaWNTZXRUYXhvbm9teShUYXhvbm9teSBuZXdUYXhvbm9teSwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgewotCQlyZXR1cm4gKChGZWF0dXJlTWFwLkludGVybmFsKWdldE1peGVkKCkpLmJhc2ljQWRkKFRheG9ub215UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RG9jdW1lbnRSb290X1RheG9ub215KCksIG5ld1RheG9ub215LCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRUYXhvbm9teShUYXhvbm9teSBuZXdUYXhvbm9teSkgewotCQkoKEZlYXR1cmVNYXAuSW50ZXJuYWwpZ2V0TWl4ZWQoKSkuc2V0KFRheG9ub215UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RG9jdW1lbnRSb290X1RheG9ub215KCksIG5ld1RheG9ub215KTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gZUludmVyc2VSZW1vdmUoSW50ZXJuYWxFT2JqZWN0IG90aGVyRW5kLCBpbnQgZmVhdHVyZUlELCBDbGFzcyBiYXNlQ2xhc3MsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKLQkJaWYgKGZlYXR1cmVJRCA+PSAwKSB7Ci0JCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChmZWF0dXJlSUQsIGJhc2VDbGFzcykpIHsKLQkJCQljYXNlIFRheG9ub215UGFja2FnZS5ET0NVTUVOVF9ST09UX19NSVhFRDoKLQkJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRNaXhlZCgpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0JCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWE1MTlNfUFJFRklYX01BUDoKLQkJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRYTUxOU1ByZWZpeE1hcCgpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0JCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTjoKLQkJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRYU0lTY2hlbWFMb2NhdGlvbigpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0JCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fQ0FURUdPUlk6Ci0JCQkJCXJldHVybiBiYXNpY1NldENhdGVnb3J5KG51bGwsIG1zZ3MpOwotCQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX05BTUU6Ci0JCQkJCXJldHVybiBiYXNpY1NldE5hbWUobnVsbCwgbXNncyk7Ci0JCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fVEFYT05PTVk6Ci0JCQkJCXJldHVybiBiYXNpY1NldFRheG9ub215KG51bGwsIG1zZ3MpOwotCQkJCWRlZmF1bHQ6Ci0JCQkJCXJldHVybiBlRHluYW1pY0ludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgYmFzZUNsYXNzLCBtc2dzKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZUJhc2ljU2V0Q29udGFpbmVyKG51bGwsIGZlYXR1cmVJRCwgbXNncyk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBlR2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSwgYm9vbGVhbiByZXNvbHZlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fTUlYRUQ6Ci0JCQkJcmV0dXJuIGdldE1peGVkKCk7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5ET0NVTUVOVF9ST09UX19YTUxOU19QUkVGSVhfTUFQOgotCQkJCXJldHVybiBnZXRYTUxOU1ByZWZpeE1hcCgpOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTjoKLQkJCQlyZXR1cm4gZ2V0WFNJU2NoZW1hTG9jYXRpb24oKTsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX0NBVEVHT1JZOgotCQkJCXJldHVybiBnZXRDYXRlZ29yeSgpOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fTkFNRToKLQkJCQlyZXR1cm4gZ2V0TmFtZSgpOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fVEFYT05PTVk6Ci0JCQkJcmV0dXJuIGdldFRheG9ub215KCk7Ci0JCX0KLQkJcmV0dXJuIGVEeW5hbWljR2V0KGVGZWF0dXJlLCByZXNvbHZlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBlU2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSwgT2JqZWN0IG5ld1ZhbHVlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fTUlYRUQ6Ci0JCQkJZ2V0TWl4ZWQoKS5jbGVhcigpOwotCQkJCWdldE1peGVkKCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5ET0NVTUVOVF9ST09UX19YTUxOU19QUkVGSVhfTUFQOgotCQkJCWdldFhNTE5TUHJlZml4TWFwKCkuY2xlYXIoKTsKLQkJCQlnZXRYTUxOU1ByZWZpeE1hcCgpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTjoKLQkJCQlnZXRYU0lTY2hlbWFMb2NhdGlvbigpLmNsZWFyKCk7Ci0JCQkJZ2V0WFNJU2NoZW1hTG9jYXRpb24oKS5hZGRBbGwoKENvbGxlY3Rpb24pbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX0NBVEVHT1JZOgotCQkJCXNldENhdGVnb3J5KChDYXRlZ29yeSluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fTkFNRToKLQkJCQlzZXROYW1lKChOYW1lKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5ET0NVTUVOVF9ST09UX19UQVhPTk9NWToKLQkJCQlzZXRUYXhvbm9teSgoVGF4b25vbXkpbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJfQotCQllRHluYW1pY1NldChlRmVhdHVyZSwgbmV3VmFsdWUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGVVbnNldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5ET0NVTUVOVF9ST09UX19NSVhFRDoKLQkJCQlnZXRNaXhlZCgpLmNsZWFyKCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWE1MTlNfUFJFRklYX01BUDoKLQkJCQlnZXRYTUxOU1ByZWZpeE1hcCgpLmNsZWFyKCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTjoKLQkJCQlnZXRYU0lTY2hlbWFMb2NhdGlvbigpLmNsZWFyKCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fQ0FURUdPUlk6Ci0JCQkJc2V0Q2F0ZWdvcnkoKENhdGVnb3J5KW51bGwpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX05BTUU6Ci0JCQkJc2V0TmFtZSgoTmFtZSludWxsKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5ET0NVTUVOVF9ST09UX19UQVhPTk9NWToKLQkJCQlzZXRUYXhvbm9teSgoVGF4b25vbXkpbnVsbCk7Ci0JCQkJcmV0dXJuOwotCQl9Ci0JCWVEeW5hbWljVW5zZXQoZUZlYXR1cmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBib29sZWFuIGVJc1NldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5ET0NVTUVOVF9ST09UX19NSVhFRDoKLQkJCQlyZXR1cm4gbWl4ZWQgIT0gbnVsbCAmJiAhbWl4ZWQuaXNFbXB0eSgpOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWE1MTlNfUFJFRklYX01BUDoKLQkJCQlyZXR1cm4geE1MTlNQcmVmaXhNYXAgIT0gbnVsbCAmJiAheE1MTlNQcmVmaXhNYXAuaXNFbXB0eSgpOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTjoKLQkJCQlyZXR1cm4geFNJU2NoZW1hTG9jYXRpb24gIT0gbnVsbCAmJiAheFNJU2NoZW1hTG9jYXRpb24uaXNFbXB0eSgpOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fQ0FURUdPUlk6Ci0JCQkJcmV0dXJuIGdldENhdGVnb3J5KCkgIT0gbnVsbDsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX05BTUU6Ci0JCQkJcmV0dXJuIGdldE5hbWUoKSAhPSBudWxsOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fVEFYT05PTVk6Ci0JCQkJcmV0dXJuIGdldFRheG9ub215KCkgIT0gbnVsbDsKLQkJfQotCQlyZXR1cm4gZUR5bmFtaWNJc1NldChlRmVhdHVyZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOwotCi0JCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOwotCQlyZXN1bHQuYXBwZW5kKCIgKG1peGVkOiAiKTsKLQkJcmVzdWx0LmFwcGVuZChtaXhlZCk7Ci0JCXJlc3VsdC5hcHBlbmQoJyknKTsKLQkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotCX0KLQotfSAvL0RvY3VtZW50Um9vdEltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L2ltcGwvTmFtZUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L2ltcGwvTmFtZUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmM1NWJkOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS9pbXBsL05hbWVJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTYgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBOYW1lSW1wbC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDggY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FT2JqZWN0SW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215UGFja2FnZTsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbC5OYW1lSW1wbCNnZXRWYWx1ZSA8ZW0+VmFsdWU8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbC5OYW1lSW1wbCNnZXRMYW5nIDxlbT5MYW5nPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgTmFtZUltcGwgZXh0ZW5kcyBFT2JqZWN0SW1wbCBpbXBsZW1lbnRzIE5hbWUgewotCS8qKgotCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRWYWx1ZSgpIDxlbT5WYWx1ZTwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0VmFsdWUoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFZBTFVFX0VERUZBVUxUID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZhbHVlKCkgPGVtPlZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRWYWx1ZSgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIFN0cmluZyB2YWx1ZSA9IFZBTFVFX0VERUZBVUxUOwotCi0JLyoqCi0JICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldExhbmcoKSA8ZW0+TGFuZzwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0TGFuZygpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgTEFOR19FREVGQVVMVCA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRMYW5nKCkgPGVtPkxhbmc8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldExhbmcoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBTdHJpbmcgbGFuZyA9IExBTkdfRURFRkFVTFQ7Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgTmFtZUltcGwoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7Ci0JCXJldHVybiBUYXhvbm9teVBhY2thZ2UuZUlOU1RBTkNFLmdldE5hbWVfKCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRWYWx1ZSgpIHsKLQkJcmV0dXJuIHZhbHVlOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldFZhbHVlKFN0cmluZyBuZXdWYWx1ZSkgewotCQlTdHJpbmcgb2xkVmFsdWUgPSB2YWx1ZTsKLQkJdmFsdWUgPSBuZXdWYWx1ZTsKLQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVGF4b25vbXlQYWNrYWdlLk5BTUVfX1ZBTFVFLCBvbGRWYWx1ZSwgdmFsdWUpKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldExhbmcoKSB7Ci0JCXJldHVybiBsYW5nOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldExhbmcoU3RyaW5nIG5ld0xhbmcpIHsKLQkJU3RyaW5nIG9sZExhbmcgPSBsYW5nOwotCQlsYW5nID0gbmV3TGFuZzsKLQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVGF4b25vbXlQYWNrYWdlLk5BTUVfX0xBTkcsIG9sZExhbmcsIGxhbmcpKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGVHZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlLCBib29sZWFuIHJlc29sdmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5OQU1FX19WQUxVRToKLQkJCQlyZXR1cm4gZ2V0VmFsdWUoKTsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLk5BTUVfX0xBTkc6Ci0JCQkJcmV0dXJuIGdldExhbmcoKTsKLQkJfQotCQlyZXR1cm4gZUR5bmFtaWNHZXQoZUZlYXR1cmUsIHJlc29sdmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGVTZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlLCBPYmplY3QgbmV3VmFsdWUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5OQU1FX19WQUxVRToKLQkJCQlzZXRWYWx1ZSgoU3RyaW5nKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5OQU1FX19MQU5HOgotCQkJCXNldExhbmcoKFN0cmluZyluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQl9Ci0JCWVEeW5hbWljU2V0KGVGZWF0dXJlLCBuZXdWYWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgZVVuc2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLk5BTUVfX1ZBTFVFOgotCQkJCXNldFZhbHVlKFZBTFVFX0VERUZBVUxUKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5OQU1FX19MQU5HOgotCQkJCXNldExhbmcoTEFOR19FREVGQVVMVCk7Ci0JCQkJcmV0dXJuOwotCQl9Ci0JCWVEeW5hbWljVW5zZXQoZUZlYXR1cmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBib29sZWFuIGVJc1NldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5OQU1FX19WQUxVRToKLQkJCQlyZXR1cm4gVkFMVUVfRURFRkFVTFQgPT0gbnVsbCA/IHZhbHVlICE9IG51bGwgOiAhVkFMVUVfRURFRkFVTFQuZXF1YWxzKHZhbHVlKTsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLk5BTUVfX0xBTkc6Ci0JCQkJcmV0dXJuIExBTkdfRURFRkFVTFQgPT0gbnVsbCA/IGxhbmcgIT0gbnVsbCA6ICFMQU5HX0VERUZBVUxULmVxdWFscyhsYW5nKTsKLQkJfQotCQlyZXR1cm4gZUR5bmFtaWNJc1NldChlRmVhdHVyZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOwotCi0JCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOwotCQlyZXN1bHQuYXBwZW5kKCIgKHZhbHVlOiAiKTsKLQkJcmVzdWx0LmFwcGVuZCh2YWx1ZSk7Ci0JCXJlc3VsdC5hcHBlbmQoIiwgbGFuZzogIik7Ci0JCXJlc3VsdC5hcHBlbmQobGFuZyk7Ci0JCXJlc3VsdC5hcHBlbmQoJyknKTsKLQkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotCX0KLQotfSAvL05hbWVJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS9pbXBsL1RheG9ub215RmFjdG9yeUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L2ltcGwvVGF4b25vbXlGYWN0b3J5SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjViNTRlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L2ltcGwvVGF4b25vbXlGYWN0b3J5SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogVGF4b25vbXlGYWN0b3J5SW1wbC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDggY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRUZhY3RvcnlJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS4qOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+RmFjdG9yeTwvYj4uCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFRheG9ub215RmFjdG9yeUltcGwgZXh0ZW5kcyBFRmFjdG9yeUltcGwgaW1wbGVtZW50cyBUYXhvbm9teUZhY3RvcnkgewotCS8qKgotCSAqIENyZWF0ZXMgYW5kIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBUYXhvbm9teUZhY3RvcnlJbXBsKCkgewotCQlzdXBlcigpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFT2JqZWN0IGNyZWF0ZShFQ2xhc3MgZUNsYXNzKSB7Ci0JCXN3aXRjaCAoZUNsYXNzLmdldENsYXNzaWZpZXJJRCgpKSB7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5DQVRFR09SWTogcmV0dXJuIGNyZWF0ZUNhdGVnb3J5KCk7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5ET0NVTUVOVF9ST09UOiByZXR1cm4gY3JlYXRlRG9jdW1lbnRSb290KCk7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5OQU1FOiByZXR1cm4gY3JlYXRlTmFtZSgpOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuVEFYT05PTVk6IHJldHVybiBjcmVhdGVUYXhvbm9teSgpOwotCQkJZGVmYXVsdDoKLQkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgY2xhc3MgJyIgKyBlQ2xhc3MuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIENhdGVnb3J5IGNyZWF0ZUNhdGVnb3J5KCkgewotCQlDYXRlZ29yeUltcGwgY2F0ZWdvcnkgPSBuZXcgQ2F0ZWdvcnlJbXBsKCk7Ci0JCXJldHVybiBjYXRlZ29yeTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRG9jdW1lbnRSb290IGNyZWF0ZURvY3VtZW50Um9vdCgpIHsKLQkJRG9jdW1lbnRSb290SW1wbCBkb2N1bWVudFJvb3QgPSBuZXcgRG9jdW1lbnRSb290SW1wbCgpOwotCQlyZXR1cm4gZG9jdW1lbnRSb290OwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBOYW1lIGNyZWF0ZU5hbWUoKSB7Ci0JCU5hbWVJbXBsIG5hbWUgPSBuZXcgTmFtZUltcGwoKTsKLQkJcmV0dXJuIG5hbWU7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFRheG9ub215IGNyZWF0ZVRheG9ub215KCkgewotCQlUYXhvbm9teUltcGwgdGF4b25vbXkgPSBuZXcgVGF4b25vbXlJbXBsKCk7Ci0JCXJldHVybiB0YXhvbm9teTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgVGF4b25vbXlQYWNrYWdlIGdldFRheG9ub215UGFja2FnZSgpIHsKLQkJcmV0dXJuIChUYXhvbm9teVBhY2thZ2UpZ2V0RVBhY2thZ2UoKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBkZXByZWNhdGVkCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBzdGF0aWMgVGF4b25vbXlQYWNrYWdlIGdldFBhY2thZ2UoKSB7Ci0JCXJldHVybiBUYXhvbm9teVBhY2thZ2UuZUlOU1RBTkNFOwotCX0KLQotfSAvL1RheG9ub215RmFjdG9yeUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L2ltcGwvVGF4b25vbXlJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS9pbXBsL1RheG9ub215SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTc4OTUyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L2ltcGwvVGF4b25vbXlJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NzYgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBUYXhvbm9teUltcGwuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjQ4IGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uQ2hhaW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVPYmplY3RJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRU9iamVjdENvbnRhaW5tZW50RUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuSW50ZXJuYWxFTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuQ2F0ZWdvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5OYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2U7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5UYXhvbm9teTwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsLlRheG9ub215SW1wbCNnZXRObG5hbWUgPGVtPk5sbmFtZTwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsLlRheG9ub215SW1wbCNnZXRDYXRlZ29yeSA8ZW0+Q2F0ZWdvcnk8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbC5UYXhvbm9teUltcGwjZ2V0SWQgPGVtPklkPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGwuVGF4b25vbXlJbXBsI2dldExvY2F0aW9uIDxlbT5Mb2NhdGlvbjwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5pbXBsLlRheG9ub215SW1wbCNnZXROYW1lIDxlbT5OYW1lPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGwuVGF4b25vbXlJbXBsI2dldFJlZiA8ZW0+UmVmPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGwuVGF4b25vbXlJbXBsI2dldFRtb2RlbEtleSA8ZW0+VG1vZGVsIEtleTwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFRheG9ub215SW1wbCBleHRlbmRzIEVPYmplY3RJbXBsIGltcGxlbWVudHMgVGF4b25vbXkgewotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5sbmFtZSgpIDxlbT5ObG5hbWU8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0TmxuYW1lKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRUxpc3QgbmxuYW1lID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldENhdGVnb3J5KCkgPGVtPkNhdGVnb3J5PC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldENhdGVnb3J5KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRUxpc3QgY2F0ZWdvcnkgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldElkKCkgPGVtPklkPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRJZCgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURfRURFRkFVTFQgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SWQoKSA8ZW0+SWQ8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldElkKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgU3RyaW5nIGlkID0gSURfRURFRkFVTFQ7Ci0KLQkvKioKLQkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TG9jYXRpb24oKSA8ZW0+TG9jYXRpb248L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldExvY2F0aW9uKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBMT0NBVElPTl9FREVGQVVMVCA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRMb2NhdGlvbigpIDxlbT5Mb2NhdGlvbjwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0TG9jYXRpb24oKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBTdHJpbmcgbG9jYXRpb24gPSBMT0NBVElPTl9FREVGQVVMVDsKLQotCS8qKgotCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROYW1lKCkgPGVtPk5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldE5hbWUoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUVfRURFRkFVTFQgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmFtZSgpIDxlbT5OYW1lPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXROYW1lKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgU3RyaW5nIG5hbWUgPSBOQU1FX0VERUZBVUxUOwotCi0JLyoqCi0JICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFJlZigpIDxlbT5SZWY8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldFJlZigpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVGX0VERUZBVUxUID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFJlZigpIDxlbT5SZWY8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldFJlZigpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIFN0cmluZyByZWYgPSBSRUZfRURFRkFVTFQ7Ci0KLQkvKioKLQkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VG1vZGVsS2V5KCkgPGVtPlRtb2RlbCBLZXk8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldFRtb2RlbEtleSgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgVE1PREVMX0tFWV9FREVGQVVMVCA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUbW9kZWxLZXkoKSA8ZW0+VG1vZGVsIEtleTwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0VG1vZGVsS2V5KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgU3RyaW5nIHRtb2RlbEtleSA9IFRNT0RFTF9LRVlfRURFRkFVTFQ7Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgVGF4b25vbXlJbXBsKCkgewotCQlzdXBlcigpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgewotCQlyZXR1cm4gVGF4b25vbXlQYWNrYWdlLmVJTlNUQU5DRS5nZXRUYXhvbm9teSgpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFTGlzdCBnZXRObG5hbWUoKSB7Ci0JCWlmIChubG5hbWUgPT0gbnVsbCkgewotCQkJbmxuYW1lID0gbmV3IEVPYmplY3RDb250YWlubWVudEVMaXN0KE5hbWUuY2xhc3MsIHRoaXMsIFRheG9ub215UGFja2FnZS5UQVhPTk9NWV9fTkxOQU1FKTsKLQkJfQotCQlyZXR1cm4gbmxuYW1lOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFTGlzdCBnZXRDYXRlZ29yeSgpIHsKLQkJaWYgKGNhdGVnb3J5ID09IG51bGwpIHsKLQkJCWNhdGVnb3J5ID0gbmV3IEVPYmplY3RDb250YWlubWVudEVMaXN0KENhdGVnb3J5LmNsYXNzLCB0aGlzLCBUYXhvbm9teVBhY2thZ2UuVEFYT05PTVlfX0NBVEVHT1JZKTsKLQkJfQotCQlyZXR1cm4gY2F0ZWdvcnk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRJZCgpIHsKLQkJcmV0dXJuIGlkOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldElkKFN0cmluZyBuZXdJZCkgewotCQlTdHJpbmcgb2xkSWQgPSBpZDsKLQkJaWQgPSBuZXdJZDsKLQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVGF4b25vbXlQYWNrYWdlLlRBWE9OT01ZX19JRCwgb2xkSWQsIGlkKSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRMb2NhdGlvbigpIHsKLQkJcmV0dXJuIGxvY2F0aW9uOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldExvY2F0aW9uKFN0cmluZyBuZXdMb2NhdGlvbikgewotCQlTdHJpbmcgb2xkTG9jYXRpb24gPSBsb2NhdGlvbjsKLQkJbG9jYXRpb24gPSBuZXdMb2NhdGlvbjsKLQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVGF4b25vbXlQYWNrYWdlLlRBWE9OT01ZX19MT0NBVElPTiwgb2xkTG9jYXRpb24sIGxvY2F0aW9uKSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotCQlyZXR1cm4gbmFtZTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuZXdOYW1lKSB7Ci0JCVN0cmluZyBvbGROYW1lID0gbmFtZTsKLQkJbmFtZSA9IG5ld05hbWU7Ci0JCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFRheG9ub215UGFja2FnZS5UQVhPTk9NWV9fTkFNRSwgb2xkTmFtZSwgbmFtZSkpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0UmVmKCkgewotCQlyZXR1cm4gcmVmOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldFJlZihTdHJpbmcgbmV3UmVmKSB7Ci0JCVN0cmluZyBvbGRSZWYgPSByZWY7Ci0JCXJlZiA9IG5ld1JlZjsKLQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVGF4b25vbXlQYWNrYWdlLlRBWE9OT01ZX19SRUYsIG9sZFJlZiwgcmVmKSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRUbW9kZWxLZXkoKSB7Ci0JCXJldHVybiB0bW9kZWxLZXk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0VG1vZGVsS2V5KFN0cmluZyBuZXdUbW9kZWxLZXkpIHsKLQkJU3RyaW5nIG9sZFRtb2RlbEtleSA9IHRtb2RlbEtleTsKLQkJdG1vZGVsS2V5ID0gbmV3VG1vZGVsS2V5OwotCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0JCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBUYXhvbm9teVBhY2thZ2UuVEFYT05PTVlfX1RNT0RFTF9LRVksIG9sZFRtb2RlbEtleSwgdG1vZGVsS2V5KSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgQ2xhc3MgYmFzZUNsYXNzLCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7Ci0JCWlmIChmZWF0dXJlSUQgPj0gMCkgewotCQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZmVhdHVyZUlELCBiYXNlQ2xhc3MpKSB7Ci0JCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuVEFYT05PTVlfX05MTkFNRToKLQkJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRObG5hbWUoKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOwotCQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLlRBWE9OT01ZX19DQVRFR09SWToKLQkJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRDYXRlZ29yeSgpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0JCQkJZGVmYXVsdDoKLQkJCQkJcmV0dXJuIGVEeW5hbWljSW52ZXJzZVJlbW92ZShvdGhlckVuZCwgZmVhdHVyZUlELCBiYXNlQ2xhc3MsIG1zZ3MpOwotCQkJfQotCQl9Ci0JCXJldHVybiBlQmFzaWNTZXRDb250YWluZXIobnVsbCwgZmVhdHVyZUlELCBtc2dzKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGVHZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlLCBib29sZWFuIHJlc29sdmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5UQVhPTk9NWV9fTkxOQU1FOgotCQkJCXJldHVybiBnZXRObG5hbWUoKTsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLlRBWE9OT01ZX19DQVRFR09SWToKLQkJCQlyZXR1cm4gZ2V0Q2F0ZWdvcnkoKTsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLlRBWE9OT01ZX19JRDoKLQkJCQlyZXR1cm4gZ2V0SWQoKTsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLlRBWE9OT01ZX19MT0NBVElPTjoKLQkJCQlyZXR1cm4gZ2V0TG9jYXRpb24oKTsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLlRBWE9OT01ZX19OQU1FOgotCQkJCXJldHVybiBnZXROYW1lKCk7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5UQVhPTk9NWV9fUkVGOgotCQkJCXJldHVybiBnZXRSZWYoKTsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLlRBWE9OT01ZX19UTU9ERUxfS0VZOgotCQkJCXJldHVybiBnZXRUbW9kZWxLZXkoKTsKLQkJfQotCQlyZXR1cm4gZUR5bmFtaWNHZXQoZUZlYXR1cmUsIHJlc29sdmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGVTZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlLCBPYmplY3QgbmV3VmFsdWUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5UQVhPTk9NWV9fTkxOQU1FOgotCQkJCWdldE5sbmFtZSgpLmNsZWFyKCk7Ci0JCQkJZ2V0TmxuYW1lKCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5UQVhPTk9NWV9fQ0FURUdPUlk6Ci0JCQkJZ2V0Q2F0ZWdvcnkoKS5jbGVhcigpOwotCQkJCWdldENhdGVnb3J5KCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5UQVhPTk9NWV9fSUQ6Ci0JCQkJc2V0SWQoKFN0cmluZyluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuVEFYT05PTVlfX0xPQ0FUSU9OOgotCQkJCXNldExvY2F0aW9uKChTdHJpbmcpbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLlRBWE9OT01ZX19OQU1FOgotCQkJCXNldE5hbWUoKFN0cmluZyluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuVEFYT05PTVlfX1JFRjoKLQkJCQlzZXRSZWYoKFN0cmluZyluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuVEFYT05PTVlfX1RNT0RFTF9LRVk6Ci0JCQkJc2V0VG1vZGVsS2V5KChTdHJpbmcpbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJfQotCQllRHluYW1pY1NldChlRmVhdHVyZSwgbmV3VmFsdWUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGVVbnNldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5UQVhPTk9NWV9fTkxOQU1FOgotCQkJCWdldE5sbmFtZSgpLmNsZWFyKCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuVEFYT05PTVlfX0NBVEVHT1JZOgotCQkJCWdldENhdGVnb3J5KCkuY2xlYXIoKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5UQVhPTk9NWV9fSUQ6Ci0JCQkJc2V0SWQoSURfRURFRkFVTFQpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLlRBWE9OT01ZX19MT0NBVElPTjoKLQkJCQlzZXRMb2NhdGlvbihMT0NBVElPTl9FREVGQVVMVCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuVEFYT05PTVlfX05BTUU6Ci0JCQkJc2V0TmFtZShOQU1FX0VERUZBVUxUKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5UQVhPTk9NWV9fUkVGOgotCQkJCXNldFJlZihSRUZfRURFRkFVTFQpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLlRBWE9OT01ZX19UTU9ERUxfS0VZOgotCQkJCXNldFRtb2RlbEtleShUTU9ERUxfS0VZX0VERUZBVUxUKTsKLQkJCQlyZXR1cm47Ci0JCX0KLQkJZUR5bmFtaWNVbnNldChlRmVhdHVyZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIGJvb2xlYW4gZUlzU2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLlRBWE9OT01ZX19OTE5BTUU6Ci0JCQkJcmV0dXJuIG5sbmFtZSAhPSBudWxsICYmICFubG5hbWUuaXNFbXB0eSgpOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuVEFYT05PTVlfX0NBVEVHT1JZOgotCQkJCXJldHVybiBjYXRlZ29yeSAhPSBudWxsICYmICFjYXRlZ29yeS5pc0VtcHR5KCk7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5UQVhPTk9NWV9fSUQ6Ci0JCQkJcmV0dXJuIElEX0VERUZBVUxUID09IG51bGwgPyBpZCAhPSBudWxsIDogIUlEX0VERUZBVUxULmVxdWFscyhpZCk7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5UQVhPTk9NWV9fTE9DQVRJT046Ci0JCQkJcmV0dXJuIExPQ0FUSU9OX0VERUZBVUxUID09IG51bGwgPyBsb2NhdGlvbiAhPSBudWxsIDogIUxPQ0FUSU9OX0VERUZBVUxULmVxdWFscyhsb2NhdGlvbik7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5UQVhPTk9NWV9fTkFNRToKLQkJCQlyZXR1cm4gTkFNRV9FREVGQVVMVCA9PSBudWxsID8gbmFtZSAhPSBudWxsIDogIU5BTUVfRURFRkFVTFQuZXF1YWxzKG5hbWUpOwotCQkJY2FzZSBUYXhvbm9teVBhY2thZ2UuVEFYT05PTVlfX1JFRjoKLQkJCQlyZXR1cm4gUkVGX0VERUZBVUxUID09IG51bGwgPyByZWYgIT0gbnVsbCA6ICFSRUZfRURFRkFVTFQuZXF1YWxzKHJlZik7Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5UQVhPTk9NWV9fVE1PREVMX0tFWToKLQkJCQlyZXR1cm4gVE1PREVMX0tFWV9FREVGQVVMVCA9PSBudWxsID8gdG1vZGVsS2V5ICE9IG51bGwgOiAhVE1PREVMX0tFWV9FREVGQVVMVC5lcXVhbHModG1vZGVsS2V5KTsKLQkJfQotCQlyZXR1cm4gZUR5bmFtaWNJc1NldChlRmVhdHVyZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOwotCi0JCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOwotCQlyZXN1bHQuYXBwZW5kKCIgKGlkOiAiKTsKLQkJcmVzdWx0LmFwcGVuZChpZCk7Ci0JCXJlc3VsdC5hcHBlbmQoIiwgbG9jYXRpb246ICIpOwotCQlyZXN1bHQuYXBwZW5kKGxvY2F0aW9uKTsKLQkJcmVzdWx0LmFwcGVuZCgiLCBuYW1lOiAiKTsKLQkJcmVzdWx0LmFwcGVuZChuYW1lKTsKLQkJcmVzdWx0LmFwcGVuZCgiLCByZWY6ICIpOwotCQlyZXN1bHQuYXBwZW5kKHJlZik7Ci0JCXJlc3VsdC5hcHBlbmQoIiwgdG1vZGVsS2V5OiAiKTsKLQkJcmVzdWx0LmFwcGVuZCh0bW9kZWxLZXkpOwotCQlyZXN1bHQuYXBwZW5kKCcpJyk7Ci0JCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLQl9Ci0KLX0gLy9UYXhvbm9teUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L2ltcGwvVGF4b25vbXlQYWNrYWdlSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvaW1wbC9UYXhvbm9teVBhY2thZ2VJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmZjdkYTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvaW1wbC9UYXhvbm9teVBhY2thZ2VJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NTggKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBUYXhvbm9teVBhY2thZ2VJbXBsLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0OCBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRVBhY2thZ2VJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLlhNTFR5cGVQYWNrYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLmltcGwuWE1MVHlwZVBhY2thZ2VJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeVBhY2thZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LmltcGwuUmVnaXN0cnlQYWNrYWdlSW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5SVEluZGV4UGFja2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucnRpbmRleC5pbXBsLlJUSW5kZXhQYWNrYWdlSW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuQ2F0ZWdvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5Eb2N1bWVudFJvb3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5OYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnlQYWNrYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuaW1wbC5VRERJUmVnaXN0cnlQYWNrYWdlSW1wbDsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBUYXhvbm9teVBhY2thZ2VJbXBsIGV4dGVuZHMgRVBhY2thZ2VJbXBsIGltcGxlbWVudHMgVGF4b25vbXlQYWNrYWdlIHsKLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcml2YXRlIEVDbGFzcyBjYXRlZ29yeUVDbGFzcyA9IG51bGw7Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcml2YXRlIEVDbGFzcyBkb2N1bWVudFJvb3RFQ2xhc3MgPSBudWxsOwotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJpdmF0ZSBFQ2xhc3MgbmFtZUVDbGFzcyA9IG51bGw7Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcml2YXRlIEVDbGFzcyB0YXhvbm9teUVDbGFzcyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPiwgcmVnaXN0ZXJlZCB3aXRoCi0JICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeSBFUGFja2FnZS5SZWdpc3RyeX0gYnkgdGhlIHBhY2thZ2UKLQkgKiBwYWNrYWdlIFVSSSB2YWx1ZS4KLQkgKiA8cD5Ob3RlOiB0aGUgY29ycmVjdCB3YXkgdG8gY3JlYXRlIHRoZSBwYWNrYWdlIGlzIHZpYSB0aGUgc3RhdGljCi0JICogZmFjdG9yeSBtZXRob2Qge0BsaW5rICNpbml0IGluaXQoKX0sIHdoaWNoIGFsc28gcGVyZm9ybXMKLQkgKiBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSwgb3IgcmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBwYWNrYWdlLAotCSAqIGlmIG9uZSBhbHJlYWR5IGV4aXN0cy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5Ci0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215UGFja2FnZSNlTlNfVVJJCi0JICogQHNlZSAjaW5pdCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXByaXZhdGUgVGF4b25vbXlQYWNrYWdlSW1wbCgpIHsKLQkJc3VwZXIoZU5TX1VSSSwgVGF4b25vbXlGYWN0b3J5LmVJTlNUQU5DRSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0luaXRlZCA9IGZhbHNlOwotCi0JLyoqCi0JICogQ3JlYXRlcywgcmVnaXN0ZXJzLCBhbmQgaW5pdGlhbGl6ZXMgdGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGlzCi0JICogbW9kZWwsIGFuZCBmb3IgYW55IG90aGVycyB1cG9uIHdoaWNoIGl0IGRlcGVuZHMuICBTaW1wbGUKLQkgKiBkZXBlbmRlbmNpZXMgYXJlIHNhdGlzZmllZCBieSBjYWxsaW5nIHRoaXMgbWV0aG9kIG9uIGFsbAotCSAqIGRlcGVuZGVudCBwYWNrYWdlcyBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZS4gIFRoaXMgbWV0aG9kIGRyaXZlcwotCSAqIGluaXRpYWxpemF0aW9uIGZvciBpbnRlcmRlcGVuZGVudCBwYWNrYWdlcyBkaXJlY3RseSwgaW4gcGFyYWxsZWwKLQkgKiB3aXRoIHRoaXMgcGFja2FnZSwgaXRzZWxmLgotCSAqIDxwPk9mIHRoaXMgcGFja2FnZSBhbmQgaXRzIGludGVyZGVwZW5kZW5jaWVzLCBhbGwgcGFja2FnZXMgd2hpY2gKLQkgKiBoYXZlIG5vdCB5ZXQgYmVlbiByZWdpc3RlcmVkIGJ5IHRoZWlyIFVSSSB2YWx1ZXMgYXJlIGZpcnN0IGNyZWF0ZWQKLQkgKiBhbmQgcmVnaXN0ZXJlZC4gIFRoZSBwYWNrYWdlcyBhcmUgdGhlbiBpbml0aWFsaXplZCBpbiB0d28gc3RlcHM6Ci0JICogbWV0YS1tb2RlbCBvYmplY3RzIGZvciBhbGwgb2YgdGhlIHBhY2thZ2VzIGFyZSBjcmVhdGVkIGJlZm9yZSBhbnkKLQkgKiBhcmUgaW5pdGlhbGl6ZWQsIHNpbmNlIG9uZSBwYWNrYWdlJ3MgbWV0YS1tb2RlbCBvYmplY3RzIG1heSByZWZlciB0bwotCSAqIHRob3NlIG9mIGFub3RoZXIuCi0JICogPHA+SW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCB3aWxsIG5vdCBhZmZlY3QgYW55IHBhY2thZ2VzIHRoYXQgaGF2ZQotCSAqIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2VOU19VUkkKLQkgKiBAc2VlICNjcmVhdGVQYWNrYWdlQ29udGVudHMoKQotCSAqIEBzZWUgI2luaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFRheG9ub215UGFja2FnZSBpbml0KCkgewotCQlpZiAoaXNJbml0ZWQpIHJldHVybiAoVGF4b25vbXlQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFRheG9ub215UGFja2FnZS5lTlNfVVJJKTsKLQotCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBwYWNrYWdlCi0JCVRheG9ub215UGFja2FnZUltcGwgdGhlVGF4b25vbXlQYWNrYWdlID0gKFRheG9ub215UGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKGVOU19VUkkpIGluc3RhbmNlb2YgVGF4b25vbXlQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKGVOU19VUkkpIDogbmV3IFRheG9ub215UGFja2FnZUltcGwoKSk7Ci0KLQkJaXNJbml0ZWQgPSB0cnVlOwotCi0JCS8vIEluaXRpYWxpemUgc2ltcGxlIGRlcGVuZGVuY2llcwotCQlYTUxUeXBlUGFja2FnZUltcGwuaW5pdCgpOwotCi0JCS8vIE9idGFpbiBvciBjcmVhdGUgYW5kIHJlZ2lzdGVyIGludGVyZGVwZW5kZW5jaWVzCi0JCVJUSW5kZXhQYWNrYWdlSW1wbCB0aGVSVEluZGV4UGFja2FnZSA9IChSVEluZGV4UGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFJUSW5kZXhQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgUlRJbmRleFBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoUlRJbmRleFBhY2thZ2UuZU5TX1VSSSkgOiBSVEluZGV4UGFja2FnZUltcGwuZUlOU1RBTkNFKTsKLQkJUmVnaXN0cnlQYWNrYWdlSW1wbCB0aGVSZWdpc3RyeVBhY2thZ2UgPSAoUmVnaXN0cnlQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoUmVnaXN0cnlQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgUmVnaXN0cnlQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFJlZ2lzdHJ5UGFja2FnZS5lTlNfVVJJKSA6IFJlZ2lzdHJ5UGFja2FnZUltcGwuZUlOU1RBTkNFKTsKLQkJVURESVJlZ2lzdHJ5UGFja2FnZUltcGwgdGhlVURESVJlZ2lzdHJ5UGFja2FnZSA9IChVRERJUmVnaXN0cnlQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoVURESVJlZ2lzdHJ5UGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFVERElSZWdpc3RyeVBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoVURESVJlZ2lzdHJ5UGFja2FnZS5lTlNfVVJJKSA6IFVERElSZWdpc3RyeVBhY2thZ2VJbXBsLmVJTlNUQU5DRSk7Ci0KLQkJLy8gQ3JlYXRlIHBhY2thZ2UgbWV0YS1kYXRhIG9iamVjdHMKLQkJdGhlVGF4b25vbXlQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOwotCQl0aGVSVEluZGV4UGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKLQkJdGhlUmVnaXN0cnlQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOwotCQl0aGVVRERJUmVnaXN0cnlQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOwotCi0JCS8vIEluaXRpYWxpemUgY3JlYXRlZCBtZXRhLWRhdGEKLQkJdGhlVGF4b25vbXlQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKLQkJdGhlUlRJbmRleFBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOwotCQl0aGVSZWdpc3RyeVBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOwotCQl0aGVVRERJUmVnaXN0cnlQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKLQotCQkvLyBNYXJrIG1ldGEtZGF0YSB0byBpbmRpY2F0ZSBpdCBjYW4ndCBiZSBjaGFuZ2VkCi0JCXRoZVRheG9ub215UGFja2FnZS5mcmVlemUoKTsKLQotCQlyZXR1cm4gdGhlVGF4b25vbXlQYWNrYWdlOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQ2xhc3MgZ2V0Q2F0ZWdvcnkoKSB7Ci0JCXJldHVybiBjYXRlZ29yeUVDbGFzczsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRVJlZmVyZW5jZSBnZXRDYXRlZ29yeV9ObG5hbWUoKSB7Ci0JCXJldHVybiAoRVJlZmVyZW5jZSljYXRlZ29yeUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFUmVmZXJlbmNlIGdldENhdGVnb3J5X0NhdGVnb3J5KCkgewotCQlyZXR1cm4gKEVSZWZlcmVuY2UpY2F0ZWdvcnlFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRDYXRlZ29yeV9Db2RlKCkgewotCQlyZXR1cm4gKEVBdHRyaWJ1dGUpY2F0ZWdvcnlFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRDYXRlZ29yeV9OYW1lKCkgewotCQlyZXR1cm4gKEVBdHRyaWJ1dGUpY2F0ZWdvcnlFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUNsYXNzIGdldERvY3VtZW50Um9vdCgpIHsKLQkJcmV0dXJuIGRvY3VtZW50Um9vdEVDbGFzczsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREb2N1bWVudFJvb3RfTWl4ZWQoKSB7Ci0JCXJldHVybiAoRUF0dHJpYnV0ZSlkb2N1bWVudFJvb3RFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRVJlZmVyZW5jZSBnZXREb2N1bWVudFJvb3RfWE1MTlNQcmVmaXhNYXAoKSB7Ci0JCXJldHVybiAoRVJlZmVyZW5jZSlkb2N1bWVudFJvb3RFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRVJlZmVyZW5jZSBnZXREb2N1bWVudFJvb3RfWFNJU2NoZW1hTG9jYXRpb24oKSB7Ci0JCXJldHVybiAoRVJlZmVyZW5jZSlkb2N1bWVudFJvb3RFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRVJlZmVyZW5jZSBnZXREb2N1bWVudFJvb3RfQ2F0ZWdvcnkoKSB7Ci0JCXJldHVybiAoRVJlZmVyZW5jZSlkb2N1bWVudFJvb3RFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRVJlZmVyZW5jZSBnZXREb2N1bWVudFJvb3RfTmFtZSgpIHsKLQkJcmV0dXJuIChFUmVmZXJlbmNlKWRvY3VtZW50Um9vdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDQpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9UYXhvbm9teSgpIHsKLQkJcmV0dXJuIChFUmVmZXJlbmNlKWRvY3VtZW50Um9vdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQ2xhc3MgZ2V0TmFtZV8oKSB7Ci0JCXJldHVybiBuYW1lRUNsYXNzOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQXR0cmlidXRlIGdldE5hbWVfVmFsdWUoKSB7Ci0JCXJldHVybiAoRUF0dHJpYnV0ZSluYW1lRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVBdHRyaWJ1dGUgZ2V0TmFtZV9MYW5nKCkgewotCQlyZXR1cm4gKEVBdHRyaWJ1dGUpbmFtZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQ2xhc3MgZ2V0VGF4b25vbXkoKSB7Ci0JCXJldHVybiB0YXhvbm9teUVDbGFzczsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRVJlZmVyZW5jZSBnZXRUYXhvbm9teV9ObG5hbWUoKSB7Ci0JCXJldHVybiAoRVJlZmVyZW5jZSl0YXhvbm9teUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFUmVmZXJlbmNlIGdldFRheG9ub215X0NhdGVnb3J5KCkgewotCQlyZXR1cm4gKEVSZWZlcmVuY2UpdGF4b25vbXlFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRUYXhvbm9teV9JZCgpIHsKLQkJcmV0dXJuIChFQXR0cmlidXRlKXRheG9ub215RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVBdHRyaWJ1dGUgZ2V0VGF4b25vbXlfTG9jYXRpb24oKSB7Ci0JCXJldHVybiAoRUF0dHJpYnV0ZSl0YXhvbm9teUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQXR0cmlidXRlIGdldFRheG9ub215X05hbWUoKSB7Ci0JCXJldHVybiAoRUF0dHJpYnV0ZSl0YXhvbm9teUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDQpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQXR0cmlidXRlIGdldFRheG9ub215X1JlZigpIHsKLQkJcmV0dXJuIChFQXR0cmlidXRlKXRheG9ub215RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVBdHRyaWJ1dGUgZ2V0VGF4b25vbXlfVG1vZGVsS2V5KCkgewotCQlyZXR1cm4gKEVBdHRyaWJ1dGUpdGF4b25vbXlFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg2KTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgVGF4b25vbXlGYWN0b3J5IGdldFRheG9ub215RmFjdG9yeSgpIHsKLQkJcmV0dXJuIChUYXhvbm9teUZhY3RvcnkpZ2V0RUZhY3RvcnlJbnN0YW5jZSgpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByaXZhdGUgYm9vbGVhbiBpc0NyZWF0ZWQgPSBmYWxzZTsKLQotCS8qKgotCSAqIENyZWF0ZXMgdGhlIG1ldGEtbW9kZWwgb2JqZWN0cyBmb3IgdGhlIHBhY2thZ2UuICBUaGlzIG1ldGhvZCBpcwotCSAqIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBjcmVhdGVQYWNrYWdlQ29udGVudHMoKSB7Ci0JCWlmIChpc0NyZWF0ZWQpIHJldHVybjsKLQkJaXNDcmVhdGVkID0gdHJ1ZTsKLQotCQkvLyBDcmVhdGUgY2xhc3NlcyBhbmQgdGhlaXIgZmVhdHVyZXMKLQkJY2F0ZWdvcnlFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoQ0FURUdPUlkpOwotCQljcmVhdGVFUmVmZXJlbmNlKGNhdGVnb3J5RUNsYXNzLCBDQVRFR09SWV9fTkxOQU1FKTsKLQkJY3JlYXRlRVJlZmVyZW5jZShjYXRlZ29yeUVDbGFzcywgQ0FURUdPUllfX0NBVEVHT1JZKTsKLQkJY3JlYXRlRUF0dHJpYnV0ZShjYXRlZ29yeUVDbGFzcywgQ0FURUdPUllfX0NPREUpOwotCQljcmVhdGVFQXR0cmlidXRlKGNhdGVnb3J5RUNsYXNzLCBDQVRFR09SWV9fTkFNRSk7Ci0KLQkJZG9jdW1lbnRSb290RUNsYXNzID0gY3JlYXRlRUNsYXNzKERPQ1VNRU5UX1JPT1QpOwotCQljcmVhdGVFQXR0cmlidXRlKGRvY3VtZW50Um9vdEVDbGFzcywgRE9DVU1FTlRfUk9PVF9fTUlYRUQpOwotCQljcmVhdGVFUmVmZXJlbmNlKGRvY3VtZW50Um9vdEVDbGFzcywgRE9DVU1FTlRfUk9PVF9fWE1MTlNfUFJFRklYX01BUCk7Ci0JCWNyZWF0ZUVSZWZlcmVuY2UoZG9jdW1lbnRSb290RUNsYXNzLCBET0NVTUVOVF9ST09UX19YU0lfU0NIRU1BX0xPQ0FUSU9OKTsKLQkJY3JlYXRlRVJlZmVyZW5jZShkb2N1bWVudFJvb3RFQ2xhc3MsIERPQ1VNRU5UX1JPT1RfX0NBVEVHT1JZKTsKLQkJY3JlYXRlRVJlZmVyZW5jZShkb2N1bWVudFJvb3RFQ2xhc3MsIERPQ1VNRU5UX1JPT1RfX05BTUUpOwotCQljcmVhdGVFUmVmZXJlbmNlKGRvY3VtZW50Um9vdEVDbGFzcywgRE9DVU1FTlRfUk9PVF9fVEFYT05PTVkpOwotCi0JCW5hbWVFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoTkFNRSk7Ci0JCWNyZWF0ZUVBdHRyaWJ1dGUobmFtZUVDbGFzcywgTkFNRV9fVkFMVUUpOwotCQljcmVhdGVFQXR0cmlidXRlKG5hbWVFQ2xhc3MsIE5BTUVfX0xBTkcpOwotCi0JCXRheG9ub215RUNsYXNzID0gY3JlYXRlRUNsYXNzKFRBWE9OT01ZKTsKLQkJY3JlYXRlRVJlZmVyZW5jZSh0YXhvbm9teUVDbGFzcywgVEFYT05PTVlfX05MTkFNRSk7Ci0JCWNyZWF0ZUVSZWZlcmVuY2UodGF4b25vbXlFQ2xhc3MsIFRBWE9OT01ZX19DQVRFR09SWSk7Ci0JCWNyZWF0ZUVBdHRyaWJ1dGUodGF4b25vbXlFQ2xhc3MsIFRBWE9OT01ZX19JRCk7Ci0JCWNyZWF0ZUVBdHRyaWJ1dGUodGF4b25vbXlFQ2xhc3MsIFRBWE9OT01ZX19MT0NBVElPTik7Ci0JCWNyZWF0ZUVBdHRyaWJ1dGUodGF4b25vbXlFQ2xhc3MsIFRBWE9OT01ZX19OQU1FKTsKLQkJY3JlYXRlRUF0dHJpYnV0ZSh0YXhvbm9teUVDbGFzcywgVEFYT05PTVlfX1JFRik7Ci0JCWNyZWF0ZUVBdHRyaWJ1dGUodGF4b25vbXlFQ2xhc3MsIFRBWE9OT01ZX19UTU9ERUxfS0VZKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcml2YXRlIGJvb2xlYW4gaXNJbml0aWFsaXplZCA9IGZhbHNlOwotCi0JLyoqCi0JICogQ29tcGxldGUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlIGFuZCBpdHMgbWV0YS1tb2RlbC4gIFRoaXMKLQkgKiBtZXRob2QgaXMgZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKSB7Ci0JCWlmIChpc0luaXRpYWxpemVkKSByZXR1cm47Ci0JCWlzSW5pdGlhbGl6ZWQgPSB0cnVlOwotCi0JCS8vIEluaXRpYWxpemUgcGFja2FnZQotCQlzZXROYW1lKGVOQU1FKTsKLQkJc2V0TnNQcmVmaXgoZU5TX1BSRUZJWCk7Ci0JCXNldE5zVVJJKGVOU19VUkkpOwotCi0JCS8vIE9idGFpbiBvdGhlciBkZXBlbmRlbnQgcGFja2FnZXMKLQkJWE1MVHlwZVBhY2thZ2VJbXBsIHRoZVhNTFR5cGVQYWNrYWdlID0gKFhNTFR5cGVQYWNrYWdlSW1wbClFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShYTUxUeXBlUGFja2FnZS5lTlNfVVJJKTsKLQotCQkvLyBBZGQgc3VwZXJ0eXBlcyB0byBjbGFzc2VzCi0KLQkJLy8gSW5pdGlhbGl6ZSBjbGFzc2VzIGFuZCBmZWF0dXJlczsgYWRkIG9wZXJhdGlvbnMgYW5kIHBhcmFtZXRlcnMKLQkJaW5pdEVDbGFzcyhjYXRlZ29yeUVDbGFzcywgQ2F0ZWdvcnkuY2xhc3MsICJDYXRlZ29yeSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKLQkJaW5pdEVSZWZlcmVuY2UoZ2V0Q2F0ZWdvcnlfTmxuYW1lKCksIHRoaXMuZ2V0TmFtZV8oKSwgbnVsbCwgIm5sbmFtZSIsIG51bGwsIDAsIC0xLCBDYXRlZ29yeS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVSZWZlcmVuY2UoZ2V0Q2F0ZWdvcnlfQ2F0ZWdvcnkoKSwgdGhpcy5nZXRDYXRlZ29yeSgpLCBudWxsLCAiY2F0ZWdvcnkiLCBudWxsLCAwLCAtMSwgQ2F0ZWdvcnkuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFQXR0cmlidXRlKGdldENhdGVnb3J5X0NvZGUoKSwgdGhlWE1MVHlwZVBhY2thZ2UuZ2V0U3RyaW5nKCksICJjb2RlIiwgbnVsbCwgMCwgMSwgQ2F0ZWdvcnkuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RUF0dHJpYnV0ZShnZXRDYXRlZ29yeV9OYW1lKCksIHRoZVhNTFR5cGVQYWNrYWdlLmdldFN0cmluZygpLCAibmFtZSIsIG51bGwsIDAsIDEsIENhdGVnb3J5LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQotCQlpbml0RUNsYXNzKGRvY3VtZW50Um9vdEVDbGFzcywgRG9jdW1lbnRSb290LmNsYXNzLCAiRG9jdW1lbnRSb290IiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOwotCQlpbml0RUF0dHJpYnV0ZShnZXREb2N1bWVudFJvb3RfTWl4ZWQoKSwgZWNvcmVQYWNrYWdlLmdldEVGZWF0dXJlTWFwRW50cnkoKSwgIm1peGVkIiwgbnVsbCwgMCwgLTEsIG51bGwsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RVJlZmVyZW5jZShnZXREb2N1bWVudFJvb3RfWE1MTlNQcmVmaXhNYXAoKSwgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmdUb1N0cmluZ01hcEVudHJ5KCksIG51bGwsICJ4TUxOU1ByZWZpeE1hcCIsIG51bGwsIDAsIC0xLCBudWxsLCBJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RVJlZmVyZW5jZShnZXREb2N1bWVudFJvb3RfWFNJU2NoZW1hTG9jYXRpb24oKSwgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmdUb1N0cmluZ01hcEVudHJ5KCksIG51bGwsICJ4U0lTY2hlbWFMb2NhdGlvbiIsIG51bGwsIDAsIC0xLCBudWxsLCBJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RVJlZmVyZW5jZShnZXREb2N1bWVudFJvb3RfQ2F0ZWdvcnkoKSwgdGhpcy5nZXRDYXRlZ29yeSgpLCBudWxsLCAiY2F0ZWdvcnkiLCBudWxsLCAwLCAtMiwgbnVsbCwgSVNfVFJBTlNJRU5ULCBJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCBJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVSZWZlcmVuY2UoZ2V0RG9jdW1lbnRSb290X05hbWUoKSwgdGhpcy5nZXROYW1lXygpLCBudWxsLCAibmFtZSIsIG51bGwsIDAsIC0yLCBudWxsLCBJU19UUkFOU0lFTlQsIElTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsIElTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RVJlZmVyZW5jZShnZXREb2N1bWVudFJvb3RfVGF4b25vbXkoKSwgdGhpcy5nZXRUYXhvbm9teSgpLCBudWxsLCAidGF4b25vbXkiLCBudWxsLCAwLCAtMiwgbnVsbCwgSVNfVFJBTlNJRU5ULCBJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCBJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQotCQlpbml0RUNsYXNzKG5hbWVFQ2xhc3MsIE5hbWUuY2xhc3MsICJOYW1lIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOwotCQlpbml0RUF0dHJpYnV0ZShnZXROYW1lX1ZhbHVlKCksIHRoZVhNTFR5cGVQYWNrYWdlLmdldFN0cmluZygpLCAidmFsdWUiLCBudWxsLCAwLCAxLCBOYW1lLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVBdHRyaWJ1dGUoZ2V0TmFtZV9MYW5nKCksIHRoZVhNTFR5cGVQYWNrYWdlLmdldExhbmd1YWdlKCksICJsYW5nIiwgbnVsbCwgMCwgMSwgTmFtZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0KLQkJaW5pdEVDbGFzcyh0YXhvbm9teUVDbGFzcywgVGF4b25vbXkuY2xhc3MsICJUYXhvbm9teSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKLQkJaW5pdEVSZWZlcmVuY2UoZ2V0VGF4b25vbXlfTmxuYW1lKCksIHRoaXMuZ2V0TmFtZV8oKSwgbnVsbCwgIm5sbmFtZSIsIG51bGwsIDAsIC0xLCBUYXhvbm9teS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVSZWZlcmVuY2UoZ2V0VGF4b25vbXlfQ2F0ZWdvcnkoKSwgdGhpcy5nZXRDYXRlZ29yeSgpLCBudWxsLCAiY2F0ZWdvcnkiLCBudWxsLCAwLCAtMSwgVGF4b25vbXkuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFQXR0cmlidXRlKGdldFRheG9ub215X0lkKCksIHRoZVhNTFR5cGVQYWNrYWdlLmdldEFueVVSSSgpLCAiaWQiLCBudWxsLCAwLCAxLCBUYXhvbm9teS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFQXR0cmlidXRlKGdldFRheG9ub215X0xvY2F0aW9uKCksIHRoZVhNTFR5cGVQYWNrYWdlLmdldEFueVVSSSgpLCAibG9jYXRpb24iLCBudWxsLCAwLCAxLCBUYXhvbm9teS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFQXR0cmlidXRlKGdldFRheG9ub215X05hbWUoKSwgdGhlWE1MVHlwZVBhY2thZ2UuZ2V0U3RyaW5nKCksICJuYW1lIiwgbnVsbCwgMCwgMSwgVGF4b25vbXkuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RUF0dHJpYnV0ZShnZXRUYXhvbm9teV9SZWYoKSwgdGhlWE1MVHlwZVBhY2thZ2UuZ2V0QW55VVJJKCksICJyZWYiLCBudWxsLCAwLCAxLCBUYXhvbm9teS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFQXR0cmlidXRlKGdldFRheG9ub215X1Rtb2RlbEtleSgpLCB0aGVYTUxUeXBlUGFja2FnZS5nZXRTdHJpbmcoKSwgInRtb2RlbEtleSIsIG51bGwsIDEsIDEsIFRheG9ub215LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQotCQkvLyBDcmVhdGUgcmVzb3VyY2UKLQkJY3JlYXRlUmVzb3VyY2UoZU5TX1VSSSk7Ci0KLQkJLy8gQ3JlYXRlIGFubm90YXRpb25zCi0JCS8vIGh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YQotCQljcmVhdGVFeHRlbmRlZE1ldGFEYXRhQW5ub3RhdGlvbnMoKTsKLQl9Ci0KLQkvKioKLQkgKiBJbml0aWFsaXplcyB0aGUgYW5ub3RhdGlvbnMgZm9yIDxiPmh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YTwvYj4uCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgY3JlYXRlRXh0ZW5kZWRNZXRhRGF0YUFubm90YXRpb25zKCkgewotCQlTdHJpbmcgc291cmNlID0gImh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSI7CQkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoY2F0ZWdvcnlFQ2xhc3MsIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJuYW1lIiwgIkNhdGVnb3J5IiwKLQkJCSAia2luZCIsICJlbGVtZW50T25seSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXRDYXRlZ29yeV9ObG5hbWUoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiZWxlbWVudCIsCi0JCQkgIm5hbWUiLCAibmxuYW1lIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldENhdGVnb3J5X0NhdGVnb3J5KCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImVsZW1lbnQiLAotCQkJICJuYW1lIiwgImNhdGVnb3J5IgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldENhdGVnb3J5X0NvZGUoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiYXR0cmlidXRlIiwKLQkJCSAibmFtZSIsICJjb2RlIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldENhdGVnb3J5X05hbWUoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiYXR0cmlidXRlIiwKLQkJCSAibmFtZSIsICJuYW1lIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGRvY3VtZW50Um9vdEVDbGFzcywgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgIm5hbWUiLCAiIiwKLQkJCSAia2luZCIsICJtaXhlZCIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXREb2N1bWVudFJvb3RfTWl4ZWQoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiZWxlbWVudFdpbGRjYXJkIiwKLQkJCSAibmFtZSIsICI6bWl4ZWQiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0RG9jdW1lbnRSb290X1hNTE5TUHJlZml4TWFwKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImF0dHJpYnV0ZSIsCi0JCQkgIm5hbWUiLCAieG1sbnM6cHJlZml4IgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldERvY3VtZW50Um9vdF9YU0lTY2hlbWFMb2NhdGlvbigpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJhdHRyaWJ1dGUiLAotCQkJICJuYW1lIiwgInhzaTpzY2hlbWFMb2NhdGlvbiIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXREb2N1bWVudFJvb3RfQ2F0ZWdvcnkoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiZWxlbWVudCIsCi0JCQkgIm5hbWUiLCAiY2F0ZWdvcnkiLAotCQkJICJuYW1lc3BhY2UiLCAiIyN0YXJnZXROYW1lc3BhY2UiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0RG9jdW1lbnRSb290X05hbWUoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiZWxlbWVudCIsCi0JCQkgIm5hbWUiLCAibmFtZSIsCi0JCQkgIm5hbWVzcGFjZSIsICIjI3RhcmdldE5hbWVzcGFjZSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXREb2N1bWVudFJvb3RfVGF4b25vbXkoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiZWxlbWVudCIsCi0JCQkgIm5hbWUiLCAidGF4b25vbXkiLAotCQkJICJuYW1lc3BhY2UiLCAiIyN0YXJnZXROYW1lc3BhY2UiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAobmFtZUVDbGFzcywgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgIm5hbWUiLCAiTmFtZSIsCi0JCQkgImtpbmQiLCAic2ltcGxlIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldE5hbWVfVmFsdWUoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgIm5hbWUiLCAiOjAiLAotCQkJICJraW5kIiwgInNpbXBsZSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXROYW1lX0xhbmcoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiYXR0cmlidXRlIiwKLQkJCSAibmFtZSIsICJsYW5nIiwKLQkJCSAibmFtZXNwYWNlIiwgImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgICh0YXhvbm9teUVDbGFzcywgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgIm5hbWUiLCAiVGF4b25vbXkiLAotCQkJICJraW5kIiwgImVsZW1lbnRPbmx5IgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldFRheG9ub215X05sbmFtZSgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJlbGVtZW50IiwKLQkJCSAibmFtZSIsICJubG5hbWUiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0VGF4b25vbXlfQ2F0ZWdvcnkoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiZWxlbWVudCIsCi0JCQkgIm5hbWUiLCAiY2F0ZWdvcnkiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0VGF4b25vbXlfSWQoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiYXR0cmlidXRlIiwKLQkJCSAibmFtZSIsICJpZCIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXRUYXhvbm9teV9Mb2NhdGlvbigpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJhdHRyaWJ1dGUiLAotCQkJICJuYW1lIiwgImxvY2F0aW9uIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldFRheG9ub215X05hbWUoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiYXR0cmlidXRlIiwKLQkJCSAibmFtZSIsICJuYW1lIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldFRheG9ub215X1JlZigpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJhdHRyaWJ1dGUiLAotCQkJICJuYW1lIiwgInJlZiIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXRUYXhvbm9teV9UbW9kZWxLZXkoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiYXR0cmlidXRlIiwKLQkJCSAibmFtZSIsICJ0bW9kZWxLZXkiCi0JCSAgIH0pOwotCX0KLQotfSAvL1RheG9ub215UGFja2FnZUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L3V0aWwvVGF4b25vbXlBZGFwdGVyRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvdXRpbC9UYXhvbm9teUFkYXB0ZXJGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzMmI3MGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvdXRpbC9UYXhvbm9teUFkYXB0ZXJGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzEgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBUYXhvbm9teUFkYXB0ZXJGYWN0b3J5LmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo1MCBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkudXRpbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJGYWN0b3J5SW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS4qOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBUaGUgPGI+QWRhcHRlciBGYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgotICogSXQgcHJvdmlkZXMgYW4gYWRhcHRlciA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2UKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFRheG9ub215QWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUltcGwgewotCS8qKgotCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIFRheG9ub215UGFja2FnZSBtb2RlbFBhY2thZ2U7Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBhZGFwdGVyIGZhY3RvcnkuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFRheG9ub215QWRhcHRlckZhY3RvcnkoKSB7Ci0JCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgewotCQkJbW9kZWxQYWNrYWdlID0gVGF4b25vbXlQYWNrYWdlLmVJTlNUQU5DRTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgb2JqZWN0IGlzIGVpdGhlciB0aGUgbW9kZWwncyBwYWNrYWdlIG9yIGlzIGFuIGluc3RhbmNlIG9iamVjdCBvZiB0aGUgbW9kZWwuCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCBvYmplY3QpIHsKLQkJaWYgKG9iamVjdCA9PSBtb2RlbFBhY2thZ2UpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCWlmIChvYmplY3QgaW5zdGFuY2VvZiBFT2JqZWN0KSB7Ci0JCQlyZXR1cm4gKChFT2JqZWN0KW9iamVjdCkuZUNsYXNzKCkuZ2V0RVBhY2thZ2UoKSA9PSBtb2RlbFBhY2thZ2U7Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qKgotCSAqIFRoZSBzd2l0Y2ggdGhlIGRlbGVnYXRlcyB0byB0aGUgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2RzLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBUYXhvbm9teVN3aXRjaCBtb2RlbFN3aXRjaCA9Ci0JCW5ldyBUYXhvbm9teVN3aXRjaCgpIHsKLQkJCXB1YmxpYyBPYmplY3QgY2FzZUNhdGVnb3J5KENhdGVnb3J5IG9iamVjdCkgewotCQkJCXJldHVybiBjcmVhdGVDYXRlZ29yeUFkYXB0ZXIoKTsKLQkJCX0KLQkJCXB1YmxpYyBPYmplY3QgY2FzZURvY3VtZW50Um9vdChEb2N1bWVudFJvb3Qgb2JqZWN0KSB7Ci0JCQkJcmV0dXJuIGNyZWF0ZURvY3VtZW50Um9vdEFkYXB0ZXIoKTsKLQkJCX0KLQkJCXB1YmxpYyBPYmplY3QgY2FzZU5hbWUoTmFtZSBvYmplY3QpIHsKLQkJCQlyZXR1cm4gY3JlYXRlTmFtZUFkYXB0ZXIoKTsKLQkJCX0KLQkJCXB1YmxpYyBPYmplY3QgY2FzZVRheG9ub215KFRheG9ub215IG9iamVjdCkgewotCQkJCXJldHVybiBjcmVhdGVUYXhvbm9teUFkYXB0ZXIoKTsKLQkJCX0KLQkJCXB1YmxpYyBPYmplY3QgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKLQkJCQlyZXR1cm4gY3JlYXRlRU9iamVjdEFkYXB0ZXIoKTsKLQkJCX0KLQkJfTsKLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdGFyZ2V0IHRoZSBvYmplY3QgdG8gYWRhcHQuCi0JICogQHJldHVybiB0aGUgYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUFkYXB0ZXIoTm90aWZpZXIgdGFyZ2V0KSB7Ci0JCXJldHVybiAoQWRhcHRlciltb2RlbFN3aXRjaC5kb1N3aXRjaCgoRU9iamVjdCl0YXJnZXQpOwotCX0KLQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkNhdGVnb3J5IDxlbT5DYXRlZ29yeTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0JICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkNhdGVnb3J5Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUNhdGVnb3J5QWRhcHRlcigpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkRvY3VtZW50Um9vdCA8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0JICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkRvY3VtZW50Um9vdAotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgQWRhcHRlciBjcmVhdGVEb2N1bWVudFJvb3RBZGFwdGVyKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuTmFtZSA8ZW0+TmFtZTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0JICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215Lk5hbWUKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEFkYXB0ZXIgY3JlYXRlTmFtZUFkYXB0ZXIoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teSA8ZW0+VGF4b25vbXk8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgQWRhcHRlciBjcmVhdGVUYXhvbm9teUFkYXB0ZXIoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgdGhlIGRlZmF1bHQgY2FzZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwuCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLX0gLy9UYXhvbm9teUFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS91dGlsL1RheG9ub215UmVzb3VyY2VGYWN0b3J5SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvdXRpbC9UYXhvbm9teVJlc291cmNlRmFjdG9yeUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODVkNWNjNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS91dGlsL1RheG9ub215UmVzb3VyY2VGYWN0b3J5SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBUYXhvbm9teVJlc291cmNlRmFjdG9yeUltcGwuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjUwIGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS51dGlsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkV4dGVuZGVkTWV0YURhdGE7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLlhNTFJlc291cmNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5pbXBsLlhNTFJlc291cmNlRmFjdG9yeUltcGw7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5SZXNvdXJjZSBGYWN0b3J5PC9iPiBhc3NvY2lhdGVkIHdpdGggdGhlIHBhY2thZ2UuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS51dGlsLlRheG9ub215UmVzb3VyY2VJbXBsCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBUYXhvbm9teVJlc291cmNlRmFjdG9yeUltcGwgZXh0ZW5kcyBYTUxSZXNvdXJjZUZhY3RvcnlJbXBsIHsKLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRXh0ZW5kZWRNZXRhRGF0YSBleHRlbmRlZE1ldGFEYXRhOwotCi0JLyoqCi0JICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgcmVzb3VyY2UgZmFjdG9yeS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgVGF4b25vbXlSZXNvdXJjZUZhY3RvcnlJbXBsKCkgewotCQlzdXBlcigpOwotCQlleHRlbmRlZE1ldGFEYXRhID0gRXh0ZW5kZWRNZXRhRGF0YS5JTlNUQU5DRTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSByZXNvdXJjZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2UgY3JlYXRlUmVzb3VyY2UoVVJJIHVyaSkgewotCQlYTUxSZXNvdXJjZSByZXN1bHQgPSBuZXcgVGF4b25vbXlSZXNvdXJjZUltcGwodXJpKTsKLQkJcmVzdWx0LmdldERlZmF1bHRTYXZlT3B0aW9ucygpLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fRVhURU5ERURfTUVUQV9EQVRBLCBleHRlbmRlZE1ldGFEYXRhKTsKLQkJcmVzdWx0LmdldERlZmF1bHRMb2FkT3B0aW9ucygpLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fRVhURU5ERURfTUVUQV9EQVRBLCBleHRlbmRlZE1ldGFEYXRhKTsKLQotCQlyZXN1bHQuZ2V0RGVmYXVsdFNhdmVPcHRpb25zKCkucHV0KFhNTFJlc291cmNlLk9QVElPTl9TQ0hFTUFfTE9DQVRJT04sIEJvb2xlYW4uVFJVRSk7Ci0JCXJlc3VsdC5nZXREZWZhdWx0U2F2ZU9wdGlvbnMoKS5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX1VTRV9FTkNPREVEX0FUVFJJQlVURV9TVFlMRSwgQm9vbGVhbi5UUlVFKTsKLQotCQlyZXN1bHQuZ2V0RGVmYXVsdExvYWRPcHRpb25zKCkucHV0KFhNTFJlc291cmNlLk9QVElPTl9VU0VfTEVYSUNBTF9IQU5ETEVSLCBCb29sZWFuLlRSVUUpOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotfSAvL1RheG9ub215UmVzb3VyY2VGYWN0b3J5SW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvdXRpbC9UYXhvbm9teVJlc291cmNlSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkvdXRpbC9UYXhvbm9teVJlc291cmNlSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Y2JlZDliLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L3V0aWwvVGF4b25vbXlSZXNvdXJjZUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogVGF4b25vbXlSZXNvdXJjZUltcGwuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjUwIGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS51dGlsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuaW1wbC5YTUxSZXNvdXJjZUltcGw7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5SZXNvdXJjZSA8L2I+IGFzc29jaWF0ZWQgd2l0aCB0aGUgcGFja2FnZS4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LnV0aWwuVGF4b25vbXlSZXNvdXJjZUZhY3RvcnlJbXBsCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBUYXhvbm9teVJlc291cmNlSW1wbCBleHRlbmRzIFhNTFJlc291cmNlSW1wbCB7Ci0JLyoqCi0JICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgcmVzb3VyY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdXJpIHRoZSBVUkkgb2YgdGhlIG5ldyByZXNvdXJjZS4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFRheG9ub215UmVzb3VyY2VJbXBsKFVSSSB1cmkpIHsKLQkJc3VwZXIodXJpKTsKLQl9Ci0KLX0gLy9UYXhvbm9teVJlc291cmNlRmFjdG9yeUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L3V0aWwvVGF4b25vbXlTd2l0Y2guamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3RheG9ub215L3V0aWwvVGF4b25vbXlTd2l0Y2guamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJkZGM3OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC90YXhvbm9teS91dGlsL1RheG9ub215U3dpdGNoLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTMgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBUYXhvbm9teVN3aXRjaC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NTAgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215Lio7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5Td2l0Y2g8L2I+IGZvciB0aGUgbW9kZWwncyBpbmhlcml0YW5jZSBoaWVyYXJjaHkuCi0gKiBJdCBzdXBwb3J0cyB0aGUgY2FsbCB7QGxpbmsgI2RvU3dpdGNoKEVPYmplY3QpIGRvU3dpdGNoKG9iamVjdCl9Ci0gKiB0byBpbnZva2UgdGhlIDxjb2RlPmNhc2VYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwsCi0gKiBzdGFydGluZyB3aXRoIHRoZSBhY3R1YWwgY2xhc3Mgb2YgdGhlIG9iamVjdAotICogYW5kIHByb2NlZWRpbmcgdXAgdGhlIGluaGVyaXRhbmNlIGhpZXJhcmNoeQotICogdW50aWwgYSBub24tbnVsbCByZXN1bHQgaXMgcmV0dXJuZWQsCi0gKiB3aGljaCBpcyB0aGUgcmVzdWx0IG9mIHRoZSBzd2l0Y2guCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2UKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFRheG9ub215U3dpdGNoIHsKLQkvKioKLQkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIFRheG9ub215UGFja2FnZSBtb2RlbFBhY2thZ2U7Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBzd2l0Y2guCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFRheG9ub215U3dpdGNoKCkgewotCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsKLQkJCW1vZGVsUGFja2FnZSA9IFRheG9ub215UGFja2FnZS5lSU5TVEFOQ0U7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBPYmplY3QgZG9Td2l0Y2goRU9iamVjdCB0aGVFT2JqZWN0KSB7Ci0JCXJldHVybiBkb1N3aXRjaCh0aGVFT2JqZWN0LmVDbGFzcygpLCB0aGVFT2JqZWN0KTsKLQl9Ci0KLQkvKioKLQkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBPYmplY3QgZG9Td2l0Y2goRUNsYXNzIHRoZUVDbGFzcywgRU9iamVjdCB0aGVFT2JqZWN0KSB7Ci0JCWlmICh0aGVFQ2xhc3MuZUNvbnRhaW5lcigpID09IG1vZGVsUGFja2FnZSkgewotCQkJcmV0dXJuIGRvU3dpdGNoKHRoZUVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSwgdGhlRU9iamVjdCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlMaXN0IGVTdXBlclR5cGVzID0gdGhlRUNsYXNzLmdldEVTdXBlclR5cGVzKCk7Ci0JCQlyZXR1cm4KLQkJCQllU3VwZXJUeXBlcy5pc0VtcHR5KCkgPwotCQkJCQlkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KSA6Ci0JCQkJCWRvU3dpdGNoKChFQ2xhc3MpZVN1cGVyVHlwZXMuZ2V0KDApLCB0aGVFT2JqZWN0KTsKLQkJfQotCX0KLQotCS8qKgotCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIE9iamVjdCBkb1N3aXRjaChpbnQgY2xhc3NpZmllcklELCBFT2JqZWN0IHRoZUVPYmplY3QpIHsKLQkJc3dpdGNoIChjbGFzc2lmaWVySUQpIHsKLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLkNBVEVHT1JZOiB7Ci0JCQkJQ2F0ZWdvcnkgY2F0ZWdvcnkgPSAoQ2F0ZWdvcnkpdGhlRU9iamVjdDsKLQkJCQlPYmplY3QgcmVzdWx0ID0gY2FzZUNhdGVnb3J5KGNhdGVnb3J5KTsKLQkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotCQkJCXJldHVybiByZXN1bHQ7Ci0JCQl9Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5ET0NVTUVOVF9ST09UOiB7Ci0JCQkJRG9jdW1lbnRSb290IGRvY3VtZW50Um9vdCA9IChEb2N1bWVudFJvb3QpdGhlRU9iamVjdDsKLQkJCQlPYmplY3QgcmVzdWx0ID0gY2FzZURvY3VtZW50Um9vdChkb2N1bWVudFJvb3QpOwotCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0JCQkJcmV0dXJuIHJlc3VsdDsKLQkJCX0KLQkJCWNhc2UgVGF4b25vbXlQYWNrYWdlLk5BTUU6IHsKLQkJCQlOYW1lIG5hbWUgPSAoTmFtZSl0aGVFT2JqZWN0OwotCQkJCU9iamVjdCByZXN1bHQgPSBjYXNlTmFtZShuYW1lKTsKLQkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotCQkJCXJldHVybiByZXN1bHQ7Ci0JCQl9Ci0JCQljYXNlIFRheG9ub215UGFja2FnZS5UQVhPTk9NWTogewotCQkJCVRheG9ub215IHRheG9ub215ID0gKFRheG9ub215KXRoZUVPYmplY3Q7Ci0JCQkJT2JqZWN0IHJlc3VsdCA9IGNhc2VUYXhvbm9teSh0YXhvbm9teSk7Ci0JCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLQkJCQlyZXR1cm4gcmVzdWx0OwotCQkJfQotCQkJZGVmYXVsdDogcmV0dXJuIGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNhdGVnb3J5PC9lbT4nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0JICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0JICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNhdGVnb3J5PC9lbT4nLgotCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGNhc2VDYXRlZ29yeShDYXRlZ29yeSBvYmplY3QpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRvY3VtZW50IFJvb3Q8L2VtPicuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLQkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLQkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+Jy4KLQkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBjYXNlRG9jdW1lbnRSb290KERvY3VtZW50Um9vdCBvYmplY3QpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldHRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk5hbWU8L2VtPicuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLQkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLQkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TmFtZTwvZW0+Jy4KLQkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBjYXNlTmFtZShOYW1lIG9iamVjdCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VGF4b25vbXk8L2VtPicuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLQkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLQkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VGF4b25vbXk8L2VtPicuCi0JICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBPYmplY3QgY2FzZVRheG9ub215KFRheG9ub215IG9iamVjdCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLCBidXQgdGhpcyBpcyB0aGUgbGFzdCBjYXNlIGFueXdheS4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLQkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KLQkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLX0gLy9UYXhvbm9teVN3aXRjaApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L0RvY3VtZW50Um9vdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L0RvY3VtZW50Um9vdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OThkY2I2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS9Eb2N1bWVudFJvb3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzOCArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IERvY3VtZW50Um9vdC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDkgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5GZWF0dXJlTWFwOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Eb2N1bWVudCBSb290PC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LkRvY3VtZW50Um9vdCNnZXRNaXhlZCA8ZW0+TWl4ZWQ8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LkRvY3VtZW50Um9vdCNnZXRYTUxOU1ByZWZpeE1hcCA8ZW0+WE1MTlMgUHJlZml4IE1hcDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuRG9jdW1lbnRSb290I2dldFhTSVNjaGVtYUxvY2F0aW9uIDxlbT5YU0kgU2NoZW1hIExvY2F0aW9uPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5Eb2N1bWVudFJvb3QjZ2V0VGF4b25vbWllcyA8ZW0+VGF4b25vbWllczwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuRG9jdW1lbnRSb290I2dldFVkZGlSZWdpc3RyeSA8ZW0+VWRkaSBSZWdpc3RyeTwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5UGFja2FnZSNnZXREb2N1bWVudFJvb3QoKQotICogQG1vZGVsIAotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIERvY3VtZW50Um9vdCBleHRlbmRzIEVPYmplY3QgewotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk1peGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KLQkgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRmVhdHVyZU1hcC5FbnRyeX0uCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5NaXhlZDwvZW0+JyBhdHRyaWJ1dGUgbGlzdCBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk1peGVkPC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5UGFja2FnZSNnZXREb2N1bWVudFJvb3RfTWl4ZWQoKQotCSAqIEBtb2RlbCB1bmlxdWU9ImZhbHNlIiBkYXRhVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVGZWF0dXJlTWFwRW50cnkiIG1hbnk9InRydWUiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUZlYXR1cmVNYXAgZ2V0TWl4ZWQoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlhNTE5TIFByZWZpeCBNYXA8L2I+PC9lbT4nIG1hcC4KLQkgKiBUaGUga2V5IGlzIG9mIHR5cGUge0BsaW5rIGphdmEubGFuZy5TdHJpbmd9LAotCSAqIGFuZCB0aGUgdmFsdWUgaXMgb2YgdHlwZSB7QGxpbmsgamF2YS5sYW5nLlN0cmluZ30sCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5YTUxOUyBQcmVmaXggTWFwPC9lbT4nIG1hcCBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlhNTE5TIFByZWZpeCBNYXA8L2VtPicgbWFwLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5UGFja2FnZSNnZXREb2N1bWVudFJvb3RfWE1MTlNQcmVmaXhNYXAoKQotCSAqIEBtb2RlbCBtYXBUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cmluZ1RvU3RyaW5nTWFwRW50cnkiIGtleVR5cGU9ImphdmEubGFuZy5TdHJpbmciIHZhbHVlVHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdHJhbnNpZW50PSJ0cnVlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFTWFwIGdldFhNTE5TUHJlZml4TWFwKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5YU0kgU2NoZW1hIExvY2F0aW9uPC9iPjwvZW0+JyBtYXAuCi0JICogVGhlIGtleSBpcyBvZiB0eXBlIHtAbGluayBqYXZhLmxhbmcuU3RyaW5nfSwKLQkgKiBhbmQgdGhlIHZhbHVlIGlzIG9mIHR5cGUge0BsaW5rIGphdmEubGFuZy5TdHJpbmd9LAotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+WFNJIFNjaGVtYSBMb2NhdGlvbjwvZW0+JyBtYXAgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5YU0kgU2NoZW1hIExvY2F0aW9uPC9lbT4nIG1hcC4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeVBhY2thZ2UjZ2V0RG9jdW1lbnRSb290X1hTSVNjaGVtYUxvY2F0aW9uKCkKLQkgKiBAbW9kZWwgbWFwVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJpbmdUb1N0cmluZ01hcEVudHJ5IiBrZXlUeXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB2YWx1ZVR5cGU9ImphdmEubGFuZy5TdHJpbmciIHRyYW5zaWVudD0idHJ1ZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRU1hcCBnZXRYU0lTY2hlbWFMb2NhdGlvbigpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VGF4b25vbWllczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VGF4b25vbWllczwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5UYXhvbm9taWVzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiBAc2VlICNzZXRUYXhvbm9taWVzKFRheG9ub21pZXMpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnlQYWNrYWdlI2dldERvY3VtZW50Um9vdF9UYXhvbm9taWVzKCkKLQkgKiBAbW9kZWwgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIgdHJhbnNpZW50PSJ0cnVlIiB2b2xhdGlsZT0idHJ1ZSIgZGVyaXZlZD0idHJ1ZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JVGF4b25vbWllcyBnZXRUYXhvbm9taWVzKCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5Eb2N1bWVudFJvb3QjZ2V0VGF4b25vbWllcyA8ZW0+VGF4b25vbWllczwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VGF4b25vbWllczwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogQHNlZSAjZ2V0VGF4b25vbWllcygpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0VGF4b25vbWllcyhUYXhvbm9taWVzIHZhbHVlKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlVkZGkgUmVnaXN0cnk8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlVkZGkgUmVnaXN0cnk8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VWRkaSBSZWdpc3RyeTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogQHNlZSAjc2V0VWRkaVJlZ2lzdHJ5KFVERElSZWdpc3RyeSkKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeVBhY2thZ2UjZ2V0RG9jdW1lbnRSb290X1VkZGlSZWdpc3RyeSgpCi0JICogQG1vZGVsIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiIHRyYW5zaWVudD0idHJ1ZSIgdm9sYXRpbGU9InRydWUiIGRlcml2ZWQ9InRydWUiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVVERElSZWdpc3RyeSBnZXRVZGRpUmVnaXN0cnkoKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LkRvY3VtZW50Um9vdCNnZXRVZGRpUmVnaXN0cnkgPGVtPlVkZGkgUmVnaXN0cnk8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlVkZGkgUmVnaXN0cnk8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIEBzZWUgI2dldFVkZGlSZWdpc3RyeSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0VWRkaVJlZ2lzdHJ5KFVERElSZWdpc3RyeSB2YWx1ZSk7Ci0KLX0gLy8gRG9jdW1lbnRSb290CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvVGF4b25vbWllcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L1RheG9ub21pZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmM3ZWJjZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvVGF4b25vbWllcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBUYXhvbm9taWVzLmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0OSBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlRheG9ub21pZXM8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVGF4b25vbWllcyNnZXRUYXhvbm9teSA8ZW0+VGF4b25vbXk8L2VtPn08L2xpPgotICogPC91bD4KLSAqIDwvcD4KLSAqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeVBhY2thZ2UjZ2V0VGF4b25vbWllcygpCi0gKiBAbW9kZWwgCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgVGF4b25vbWllcyBleHRlbmRzIEVPYmplY3QgewotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlRheG9ub215PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teX0uCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5UYXhvbm9teTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlRheG9ub215PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5UGFja2FnZSNnZXRUYXhvbm9taWVzX1RheG9ub215KCkKLQkgKiBAbW9kZWwgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teSIgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUxpc3QgZ2V0VGF4b25vbXkoKTsKLQotfSAvLyBUYXhvbm9taWVzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvVURESVJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvVURESVJlZ2lzdHJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjZjIxMTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L1VERElSZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQzICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogVURESVJlZ2lzdHJ5LmphdmEsdiAxLjIgMjAwNS8xMi8wMyAwNDowNjo0OSBjYnJlYWxleSBFeHAgJAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeTsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VURESVJlZ2lzdHJ5PC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICoKLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeSNnZXRWZXJzaW9uIDxlbT5WZXJzaW9uPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkjZ2V0RGlzY292ZXJ5VVJMIDxlbT5EaXNjb3ZlcnkgVVJMPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkjZ2V0UHVibGljYXRpb25VUkwgPGVtPlB1YmxpY2F0aW9uIFVSTDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5I2dldFNlY3VyZWREaXNjb3ZlcnlVUkwgPGVtPlNlY3VyZWQgRGlzY292ZXJ5IFVSTDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5I2dldFNlY3VyZWRQdWJsaWNhdGlvblVSTCA8ZW0+U2VjdXJlZCBQdWJsaWNhdGlvbiBVUkw8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeSNnZXREZWZhdWx0TG9naW4gPGVtPkRlZmF1bHQgTG9naW48L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeSNnZXREZWZhdWx0UGFzc3dvcmQgPGVtPkRlZmF1bHQgUGFzc3dvcmQ8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeSNnZXRUYXhvbm9taWVzIDxlbT5UYXhvbm9taWVzPC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnlQYWNrYWdlI2dldFVERElSZWdpc3RyeSgpCi0gKiBAbW9kZWwgCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgVURESVJlZ2lzdHJ5IGV4dGVuZHMgUmVnaXN0cnkgewotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlZlcnNpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlZlcnNpb248L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VmVyc2lvbjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjc2V0VmVyc2lvbihTdHJpbmcpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnlQYWNrYWdlI2dldFVERElSZWdpc3RyeV9WZXJzaW9uKCkKLQkgKiBAbW9kZWwgdW5pcXVlPSJmYWxzZSIgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZS5TdHJpbmciIHJlcXVpcmVkPSJ0cnVlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZ2V0VmVyc2lvbigpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5I2dldFZlcnNpb24gPGVtPlZlcnNpb248L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlZlcnNpb248L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI2dldFZlcnNpb24oKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldFZlcnNpb24oU3RyaW5nIHZhbHVlKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkRpc2NvdmVyeSBVUkw8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkRpc2NvdmVyeSBVUkw8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RGlzY292ZXJ5IFVSTDwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjc2V0RGlzY292ZXJ5VVJMKFN0cmluZykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeVBhY2thZ2UjZ2V0VURESVJlZ2lzdHJ5X0Rpc2NvdmVyeVVSTCgpCi0JICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuQW55VVJJIiByZXF1aXJlZD0idHJ1ZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGdldERpc2NvdmVyeVVSTCgpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5I2dldERpc2NvdmVyeVVSTCA8ZW0+RGlzY292ZXJ5IFVSTDwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RGlzY292ZXJ5IFVSTDwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjZ2V0RGlzY292ZXJ5VVJMKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0Jdm9pZCBzZXREaXNjb3ZlcnlVUkwoU3RyaW5nIHZhbHVlKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlB1YmxpY2F0aW9uIFVSTDwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+UHVibGljYXRpb24gVVJMPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlB1YmxpY2F0aW9uIFVSTDwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjc2V0UHVibGljYXRpb25VUkwoU3RyaW5nKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5UGFja2FnZSNnZXRVRERJUmVnaXN0cnlfUHVibGljYXRpb25VUkwoKQotCSAqIEBtb2RlbCB1bmlxdWU9ImZhbHNlIiBkYXRhVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLkFueVVSSSIgcmVxdWlyZWQ9InRydWUiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVN0cmluZyBnZXRQdWJsaWNhdGlvblVSTCgpOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5I2dldFB1YmxpY2F0aW9uVVJMIDxlbT5QdWJsaWNhdGlvbiBVUkw8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlB1YmxpY2F0aW9uIFVSTDwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjZ2V0UHVibGljYXRpb25VUkwoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldFB1YmxpY2F0aW9uVVJMKFN0cmluZyB2YWx1ZSk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5TZWN1cmVkIERpc2NvdmVyeSBVUkw8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlNlY3VyZWQgRGlzY292ZXJ5IFVSTDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5TZWN1cmVkIERpc2NvdmVyeSBVUkw8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI3NldFNlY3VyZWREaXNjb3ZlcnlVUkwoU3RyaW5nKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5UGFja2FnZSNnZXRVRERJUmVnaXN0cnlfU2VjdXJlZERpc2NvdmVyeVVSTCgpCi0JICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuQW55VVJJIiByZXF1aXJlZD0idHJ1ZSIKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGdldFNlY3VyZWREaXNjb3ZlcnlVUkwoKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeSNnZXRTZWN1cmVkRGlzY292ZXJ5VVJMIDxlbT5TZWN1cmVkIERpc2NvdmVyeSBVUkw8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlNlY3VyZWQgRGlzY292ZXJ5IFVSTDwvZW0+JyBhdHRyaWJ1dGUuCi0JICogQHNlZSAjZ2V0U2VjdXJlZERpc2NvdmVyeVVSTCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0U2VjdXJlZERpc2NvdmVyeVVSTChTdHJpbmcgdmFsdWUpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+U2VjdXJlZCBQdWJsaWNhdGlvbiBVUkw8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlNlY3VyZWQgUHVibGljYXRpb24gVVJMPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlNlY3VyZWQgUHVibGljYXRpb24gVVJMPC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiBAc2VlICNzZXRTZWN1cmVkUHVibGljYXRpb25VUkwoU3RyaW5nKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5UGFja2FnZSNnZXRVRERJUmVnaXN0cnlfU2VjdXJlZFB1YmxpY2F0aW9uVVJMKCkKLQkgKiBAbW9kZWwgdW5pcXVlPSJmYWxzZSIgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZS5BbnlVUkkiIHJlcXVpcmVkPSJ0cnVlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZ2V0U2VjdXJlZFB1YmxpY2F0aW9uVVJMKCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkjZ2V0U2VjdXJlZFB1YmxpY2F0aW9uVVJMIDxlbT5TZWN1cmVkIFB1YmxpY2F0aW9uIFVSTDwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+U2VjdXJlZCBQdWJsaWNhdGlvbiBVUkw8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI2dldFNlY3VyZWRQdWJsaWNhdGlvblVSTCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0U2VjdXJlZFB1YmxpY2F0aW9uVVJMKFN0cmluZyB2YWx1ZSk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5EZWZhdWx0IExvZ2luPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5EZWZhdWx0IExvZ2luPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRlZmF1bHQgTG9naW48L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI3NldERlZmF1bHRMb2dpbihTdHJpbmcpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnlQYWNrYWdlI2dldFVERElSZWdpc3RyeV9EZWZhdWx0TG9naW4oKQotCSAqIEBtb2RlbCB1bmlxdWU9ImZhbHNlIiBkYXRhVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLlN0cmluZyIgcmVxdWlyZWQ9InRydWUiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVN0cmluZyBnZXREZWZhdWx0TG9naW4oKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeSNnZXREZWZhdWx0TG9naW4gPGVtPkRlZmF1bHQgTG9naW48L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkRlZmF1bHQgTG9naW48L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI2dldERlZmF1bHRMb2dpbigpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0RGVmYXVsdExvZ2luKFN0cmluZyB2YWx1ZSk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5EZWZhdWx0IFBhc3N3b3JkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5EZWZhdWx0IFBhc3N3b3JkPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRlZmF1bHQgUGFzc3dvcmQ8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI3NldERlZmF1bHRQYXNzd29yZChTdHJpbmcpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnlQYWNrYWdlI2dldFVERElSZWdpc3RyeV9EZWZhdWx0UGFzc3dvcmQoKQotCSAqIEBtb2RlbCB1bmlxdWU9ImZhbHNlIiBkYXRhVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLlN0cmluZyIgcmVxdWlyZWQ9InRydWUiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVN0cmluZyBnZXREZWZhdWx0UGFzc3dvcmQoKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeSNnZXREZWZhdWx0UGFzc3dvcmQgPGVtPkRlZmF1bHQgUGFzc3dvcmQ8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkRlZmF1bHQgUGFzc3dvcmQ8L2VtPicgYXR0cmlidXRlLgotCSAqIEBzZWUgI2dldERlZmF1bHRQYXNzd29yZCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0RGVmYXVsdFBhc3N3b3JkKFN0cmluZyB2YWx1ZSk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5UYXhvbm9taWVzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5UYXhvbm9taWVzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlRheG9ub21pZXM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIEBzZWUgI3NldFRheG9ub21pZXMoVGF4b25vbWllcykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeVBhY2thZ2UjZ2V0VURESVJlZ2lzdHJ5X1RheG9ub21pZXMoKQotCSAqIEBtb2RlbCBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlUYXhvbm9taWVzIGdldFRheG9ub21pZXMoKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeSNnZXRUYXhvbm9taWVzIDxlbT5UYXhvbm9taWVzPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5UYXhvbm9taWVzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiBAc2VlICNnZXRUYXhvbm9taWVzKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0Jdm9pZCBzZXRUYXhvbm9taWVzKFRheG9ub21pZXMgdmFsdWUpOwotCi19IC8vIFVERElSZWdpc3RyeQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L1VERElSZWdpc3RyeUZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS9VRERJUmVnaXN0cnlGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyMTBjNzIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L1VERElSZWdpc3RyeUZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogVURESVJlZ2lzdHJ5RmFjdG9yeS5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDkgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRmFjdG9yeTsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogVGhlIDxiPkZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuCi0gKiBJdCBwcm92aWRlcyBhIGNyZWF0ZSBtZXRob2QgZm9yIGVhY2ggbm9uLWFic3RyYWN0IGNsYXNzIG9mIHRoZSBtb2RlbC4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnlQYWNrYWdlCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgVURESVJlZ2lzdHJ5RmFjdG9yeSBleHRlbmRzIEVGYWN0b3J5IHsKLQkvKioKLQkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCVVERElSZWdpc3RyeUZhY3RvcnkgZUlOU1RBTkNFID0gbmV3IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmltcGwuVURESVJlZ2lzdHJ5RmFjdG9yeUltcGwoKTsKLQotCS8qKgotCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+Jy4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRG9jdW1lbnRSb290IGNyZWF0ZURvY3VtZW50Um9vdCgpOwotCi0JLyoqCi0JICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5UYXhvbm9taWVzPC9lbT4nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5UYXhvbm9taWVzPC9lbT4nLgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlUYXhvbm9taWVzIGNyZWF0ZVRheG9ub21pZXMoKTsKLQotCS8qKgotCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+VURESVJlZ2lzdHJ5PC9lbT4nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5VRERJUmVnaXN0cnk8L2VtPicuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVVERElSZWdpc3RyeSBjcmVhdGVVRERJUmVnaXN0cnkoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JVURESVJlZ2lzdHJ5UGFja2FnZSBnZXRVRERJUmVnaXN0cnlQYWNrYWdlKCk7Ci0KLX0gLy9VRERJUmVnaXN0cnlGYWN0b3J5CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvVURESVJlZ2lzdHJ5UGFja2FnZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L1VERElSZWdpc3RyeVBhY2thZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzFlNWFlMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvVURESVJlZ2lzdHJ5UGFja2FnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTY4ICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogVURESVJlZ2lzdHJ5UGFja2FnZS5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NDkgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeVBhY2thZ2U7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhlIG1vZGVsLgotICogSXQgY29udGFpbnMgYWNjZXNzb3JzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRvIHJlcHJlc2VudAotICogPHVsPgotICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgotICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KLSAqICAgPGxpPmVhY2ggZW51bSw8L2xpPgotICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KLSAqIDwvdWw+Ci0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDwhLS0gYmVnaW4tbW9kZWwtZG9jIC0tPgotICogCi0gKiAgICBTZWUgaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlLmh0bWwgYW5kCi0gKiAgICBodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMteG1sIGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIG5hbWVzcGFjZS4KLSAqIAotICogICAgIFRoaXMgc2NoZW1hIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgWE1MIG5hbWVzcGFjZSwgaW4gYSBmb3JtCi0gKiAgICAgc3VpdGFibGUgZm9yIGltcG9ydCBieSBvdGhlciBzY2hlbWEgZG9jdW1lbnRzLiAgCi0gKiAKLSAqICAgICBOb3RlIHRoYXQgbG9jYWwgbmFtZXMgaW4gdGhpcyBuYW1lc3BhY2UgYXJlIGludGVuZGVkIHRvIGJlIGRlZmluZWQKLSAqICAgICBvbmx5IGJ5IHRoZSBXb3JsZCBXaWRlIFdlYiBDb25zb3J0aXVtIG9yIGl0cyBzdWJncm91cHMuICBUaGUKLSAqICAgICBmb2xsb3dpbmcgbmFtZXMgYXJlIGN1cnJlbnRseSBkZWZpbmVkIGluIHRoaXMgbmFtZXNwYWNlIGFuZCBzaG91bGQKLSAqICAgICBub3QgYmUgdXNlZCB3aXRoIGNvbmZsaWN0aW5nIHNlbWFudGljcyBieSBhbnkgV29ya2luZyBHcm91cCwKLSAqICAgICBzcGVjaWZpY2F0aW9uLCBvciBkb2N1bWVudCBpbnN0YW5jZToKLSAqIAotICogICAgIGJhc2UgKGFzIGFuIGF0dHJpYnV0ZSBuYW1lKTogZGVub3RlcyBhbiBhdHRyaWJ1dGUgd2hvc2UgdmFsdWUKLSAqICAgICAgICAgIHByb3ZpZGVzIGEgVVJJIHRvIGJlIHVzZWQgYXMgdGhlIGJhc2UgZm9yIGludGVycHJldGluZyBhbnkKLSAqICAgICAgICAgIHJlbGF0aXZlIFVSSXMgaW4gdGhlIHNjb3BlIG9mIHRoZSBlbGVtZW50IG9uIHdoaWNoIGl0Ci0gKiAgICAgICAgICBhcHBlYXJzOyBpdHMgdmFsdWUgaXMgaW5oZXJpdGVkLiAgVGhpcyBuYW1lIGlzIHJlc2VydmVkCi0gKiAgICAgICAgICBieSB2aXJ0dWUgb2YgaXRzIGRlZmluaXRpb24gaW4gdGhlIFhNTCBCYXNlIHNwZWNpZmljYXRpb24uCi0gKiAKLSAqICAgICBpZCAgIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlIHZhbHVlCi0gKiAgICAgICAgICBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgYXMgaWYgZGVjbGFyZWQgdG8gYmUgb2YgdHlwZSBJRC4KLSAqICAgICAgICAgIFRoZSB4bWw6aWQgc3BlY2lmaWNhdGlvbiBpcyBub3QgeWV0IGEgVzNDIFJlY29tbWVuZGF0aW9uLAotICogICAgICAgICAgYnV0IHRoaXMgYXR0cmlidXRlIGlzIGluY2x1ZGVkIGhlcmUgdG8gZmFjaWxpdGF0ZSBleHBlcmltZW50YXRpb24KLSAqICAgICAgICAgIHdpdGggdGhlIG1lY2hhbmlzbXMgaXQgcHJvcG9zZXMuICBOb3RlIHRoYXQgaXQgaXMgX25vdF8gaW5jbHVkZWQKLSAqICAgICAgICAgIGluIHRoZSBzcGVjaWFsQXR0cnMgYXR0cmlidXRlIGdyb3VwLgotICogCi0gKiAgICAgbGFuZyAoYXMgYW4gYXR0cmlidXRlIG5hbWUpOiBkZW5vdGVzIGFuIGF0dHJpYnV0ZSB3aG9zZSB2YWx1ZQotICogICAgICAgICAgaXMgYSBsYW5ndWFnZSBjb2RlIGZvciB0aGUgbmF0dXJhbCBsYW5ndWFnZSBvZiB0aGUgY29udGVudCBvZgotICogICAgICAgICAgYW55IGVsZW1lbnQ7IGl0cyB2YWx1ZSBpcyBpbmhlcml0ZWQuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQKLSAqICAgICAgICAgIGJ5IHZpcnR1ZSBvZiBpdHMgZGVmaW5pdGlvbiBpbiB0aGUgWE1MIHNwZWNpZmljYXRpb24uCi0gKiAgIAotICogICAgIHNwYWNlIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk6IGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlCi0gKiAgICAgICAgICB2YWx1ZSBpcyBhIGtleXdvcmQgaW5kaWNhdGluZyB3aGF0IHdoaXRlc3BhY2UgcHJvY2Vzc2luZwotICogICAgICAgICAgZGlzY2lwbGluZSBpcyBpbnRlbmRlZCBmb3IgdGhlIGNvbnRlbnQgb2YgdGhlIGVsZW1lbnQ7IGl0cwotICogICAgICAgICAgdmFsdWUgaXMgaW5oZXJpdGVkLiAgVGhpcyBuYW1lIGlzIHJlc2VydmVkIGJ5IHZpcnR1ZSBvZiBpdHMKLSAqICAgICAgICAgIGRlZmluaXRpb24gaW4gdGhlIFhNTCBzcGVjaWZpY2F0aW9uLgotICogCi0gKiAgICAgRmF0aGVyIChpbiBhbnkgY29udGV4dCBhdCBhbGwpOiBkZW5vdGVzIEpvbiBCb3NhaywgdGhlIGNoYWlyIG9mIAotICogICAgICAgICAgdGhlIG9yaWdpbmFsIFhNTCBXb3JraW5nIEdyb3VwLiAgVGhpcyBuYW1lIGlzIHJlc2VydmVkIGJ5IAotICogICAgICAgICAgdGhlIGZvbGxvd2luZyBkZWNpc2lvbiBvZiB0aGUgVzNDIFhNTCBQbGVuYXJ5IGFuZCAKLSAqICAgICAgICAgIFhNTCBDb29yZGluYXRpb24gZ3JvdXBzOgotICogCi0gKiAgICAgICAgICAgICAgSW4gYXBwcmVjaWF0aW9uIGZvciBoaXMgdmlzaW9uLCBsZWFkZXJzaGlwIGFuZCBkZWRpY2F0aW9uCi0gKiAgICAgICAgICAgICAgdGhlIFczQyBYTUwgUGxlbmFyeSBvbiB0aGlzIDEwdGggZGF5IG9mIEZlYnJ1YXJ5LCAyMDAwCi0gKiAgICAgICAgICAgICAgcmVzZXJ2ZXMgZm9yIEpvbiBCb3NhayBpbiBwZXJwZXR1aXR5IHRoZSBYTUwgbmFtZQotICogICAgICAgICAgICAgIHhtbDpGYXRoZXIKLSAqICAgCi0gKiBUaGlzIHNjaGVtYSBkZWZpbmVzIGF0dHJpYnV0ZXMgYW5kIGFuIGF0dHJpYnV0ZSBncm91cAotICogICAgICAgICBzdWl0YWJsZSBmb3IgdXNlIGJ5Ci0gKiAgICAgICAgIHNjaGVtYXMgd2lzaGluZyB0byBhbGxvdyB4bWw6YmFzZSwgeG1sOmxhbmcsIHhtbDpzcGFjZSBvciB4bWw6aWQKLSAqICAgICAgICAgYXR0cmlidXRlcyBvbiBlbGVtZW50cyB0aGV5IGRlZmluZS4KLSAqIAotICogICAgICAgICBUbyBlbmFibGUgdGhpcywgc3VjaCBhIHNjaGVtYSBtdXN0IGltcG9ydCB0aGlzIHNjaGVtYQotICogICAgICAgICBmb3IgdGhlIFhNTCBuYW1lc3BhY2UsIGUuZy4gYXMgZm9sbG93czoKLSAqICAgICAgICAgJmx0O3NjaGVtYSAuIC4gLiZndDsKLSAqICAgICAgICAgIC4gLiAuCi0gKiAgICAgICAgICAmbHQ7aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIgotICogICAgICAgICAgICAgICAgICAgICBzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkIi8mZ3Q7Ci0gKiAKLSAqICAgICAgICAgU3Vic2VxdWVudGx5LCBxdWFsaWZpZWQgcmVmZXJlbmNlIHRvIGFueSBvZiB0aGUgYXR0cmlidXRlcwotICogICAgICAgICBvciB0aGUgZ3JvdXAgZGVmaW5lZCBiZWxvdyB3aWxsIGhhdmUgdGhlIGRlc2lyZWQgZWZmZWN0LCBlLmcuCi0gKiAKLSAqICAgICAgICAgJmx0O3R5cGUgLiAuIC4mZ3Q7Ci0gKiAgICAgICAgICAuIC4gLgotICogICAgICAgICAgJmx0O2F0dHJpYnV0ZUdyb3VwIHJlZj0ieG1sOnNwZWNpYWxBdHRycyIvJmd0OwotICogIAotICogICAgICAgICAgd2lsbCBkZWZpbmUgYSB0eXBlIHdoaWNoIHdpbGwgc2NoZW1hLXZhbGlkYXRlIGFuIGluc3RhbmNlCi0gKiAgICAgICAgICBlbGVtZW50IHdpdGggYW55IG9mIHRob3NlIGF0dHJpYnV0ZXMKLSAqIEluIGtlZXBpbmcgd2l0aCB0aGUgWE1MIFNjaGVtYSBXRydzIHN0YW5kYXJkIHZlcnNpb25pbmcKLSAqICAgIHBvbGljeSwgdGhpcyBzY2hlbWEgZG9jdW1lbnQgd2lsbCBwZXJzaXN0IGF0Ci0gKiAgICBodHRwOi8vd3d3LnczLm9yZy8yMDA1LzA4L3htbC54c2QuCi0gKiAgICBBdCB0aGUgZGF0ZSBvZiBpc3N1ZSBpdCBjYW4gYWxzbyBiZSBmb3VuZCBhdAotICogICAgaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkLgotICogICAgVGhlIHNjaGVtYSBkb2N1bWVudCBhdCB0aGF0IFVSSSBtYXkgaG93ZXZlciBjaGFuZ2UgaW4gdGhlIGZ1dHVyZSwKLSAqICAgIGluIG9yZGVyIHRvIHJlbWFpbiBjb21wYXRpYmxlIHdpdGggdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIFhNTCBTY2hlbWEKLSAqICAgIGl0c2VsZiwgb3Igd2l0aCB0aGUgWE1MIG5hbWVzcGFjZSBpdHNlbGYuICBJbiBvdGhlciB3b3JkcywgaWYgdGhlIFhNTAotICogICAgU2NoZW1hIG9yIFhNTCBuYW1lc3BhY2VzIGNoYW5nZSwgdGhlIHZlcnNpb24gb2YgdGhpcyBkb2N1bWVudCBhdAotICogICAgaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkIHdpbGwgY2hhbmdlCi0gKiAgICBhY2NvcmRpbmdseTsgdGhlIHZlcnNpb24gYXQKLSAqICAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDUvMDgveG1sLnhzZCB3aWxsIG5vdCBjaGFuZ2UuCi0gKiAgIAotICogPCEtLSBlbmQtbW9kZWwtZG9jIC0tPgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnlGYWN0b3J5Ci0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgVURESVJlZ2lzdHJ5UGFja2FnZSBleHRlbmRzIEVQYWNrYWdlIHsKLQkvKioKLQkgKiBUaGUgcGFja2FnZSBuYW1lLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCVN0cmluZyBlTkFNRSA9ICJ1ZGRpcmVnaXN0cnkiOwotCi0JLyoqCi0JICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIFVSSS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTdHJpbmcgZU5TX1VSSSA9ICJodHRwOi8vZWNsaXBzZS5vcmcvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkiOwotCi0JLyoqCi0JICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIG5hbWUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JU3RyaW5nIGVOU19QUkVGSVggPSAidWRkaXJlZ2lzdHJ5IjsKLQotCS8qKgotCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIHBhY2thZ2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JVURESVJlZ2lzdHJ5UGFja2FnZSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5pbXBsLlVERElSZWdpc3RyeVBhY2thZ2VJbXBsLmluaXQoKTsKLQotCS8qKgotCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuaW1wbC5Eb2N1bWVudFJvb3RJbXBsIDxlbT5Eb2N1bWVudCBSb290PC9lbT59JyBjbGFzcy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuaW1wbC5Eb2N1bWVudFJvb3RJbXBsCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5pbXBsLlVERElSZWdpc3RyeVBhY2thZ2VJbXBsI2dldERvY3VtZW50Um9vdCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCWludCBET0NVTUVOVF9ST09UID0gMDsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5NaXhlZDwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgRE9DVU1FTlRfUk9PVF9fTUlYRUQgPSAwOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlhNTE5TIFByZWZpeCBNYXA8L2I+PC9lbT4nIG1hcC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBET0NVTUVOVF9ST09UX19YTUxOU19QUkVGSVhfTUFQID0gMTsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5YU0kgU2NoZW1hIExvY2F0aW9uPC9iPjwvZW0+JyBtYXAuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTiA9IDI7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGF4b25vbWllczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IERPQ1VNRU5UX1JPT1RfX1RBWE9OT01JRVMgPSAzOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVkZGkgUmVnaXN0cnk8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBET0NVTUVOVF9ST09UX19VRERJX1JFR0lTVFJZID0gNDsKLQotCS8qKgotCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgdGhlICc8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+JyBjbGFzcy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBET0NVTUVOVF9ST09UX0ZFQVRVUkVfQ09VTlQgPSA1OwotCi0JLyoqCi0JICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5pbXBsLlRheG9ub21pZXNJbXBsIDxlbT5UYXhvbm9taWVzPC9lbT59JyBjbGFzcy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuaW1wbC5UYXhvbm9taWVzSW1wbAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuaW1wbC5VRERJUmVnaXN0cnlQYWNrYWdlSW1wbCNnZXRUYXhvbm9taWVzKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JaW50IFRBWE9OT01JRVMgPSAxOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRheG9ub215PC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBUQVhPTk9NSUVTX19UQVhPTk9NWSA9IDA7Ci0KLQkvKioKLQkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlIHRoZSAnPGVtPlRheG9ub21pZXM8L2VtPicgY2xhc3MuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgVEFYT05PTUlFU19GRUFUVVJFX0NPVU5UID0gMTsKLQotCS8qKgotCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuaW1wbC5VRERJUmVnaXN0cnlJbXBsIDxlbT5VRERJUmVnaXN0cnk8L2VtPn0nIGNsYXNzLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5pbXBsLlVERElSZWdpc3RyeUltcGwKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmltcGwuVURESVJlZ2lzdHJ5UGFja2FnZUltcGwjZ2V0VURESVJlZ2lzdHJ5KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JaW50IFVERElfUkVHSVNUUlkgPSAyOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IFVERElfUkVHSVNUUllfX05BTUUgPSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfX05BTUU7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVzY3JpcHRpb248L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IFVERElfUkVHSVNUUllfX0RFU0NSSVBUSU9OID0gUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX19ERVNDUklQVElPTjsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JZDwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IFVERElfUkVHSVNUUllfX0lEID0gUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX19JRDsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Mb2NhdGlvbjwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IFVERElfUkVHSVNUUllfX0xPQ0FUSU9OID0gUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX19MT0NBVElPTjsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZWY8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBVRERJX1JFR0lTVFJZX19SRUYgPSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfX1JFRjsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5WZXJzaW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgVURESV9SRUdJU1RSWV9fVkVSU0lPTiA9IFJlZ2lzdHJ5UGFja2FnZS5SRUdJU1RSWV9GRUFUVVJFX0NPVU5UICsgMDsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EaXNjb3ZlcnkgVVJMPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgVURESV9SRUdJU1RSWV9fRElTQ09WRVJZX1VSTCA9IFJlZ2lzdHJ5UGFja2FnZS5SRUdJU1RSWV9GRUFUVVJFX0NPVU5UICsgMTsKLQotCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5QdWJsaWNhdGlvbiBVUkw8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBVRERJX1JFR0lTVFJZX19QVUJMSUNBVElPTl9VUkwgPSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfRkVBVFVSRV9DT1VOVCArIDI7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U2VjdXJlZCBEaXNjb3ZlcnkgVVJMPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgVURESV9SRUdJU1RSWV9fU0VDVVJFRF9ESVNDT1ZFUllfVVJMID0gUmVnaXN0cnlQYWNrYWdlLlJFR0lTVFJZX0ZFQVRVUkVfQ09VTlQgKyAzOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlNlY3VyZWQgUHVibGljYXRpb24gVVJMPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgVURESV9SRUdJU1RSWV9fU0VDVVJFRF9QVUJMSUNBVElPTl9VUkwgPSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfRkVBVFVSRV9DT1VOVCArIDQ7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVmYXVsdCBMb2dpbjwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IFVERElfUkVHSVNUUllfX0RFRkFVTFRfTE9HSU4gPSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfRkVBVFVSRV9DT1VOVCArIDU7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVmYXVsdCBQYXNzd29yZDwvYj48L2VtPicgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IFVERElfUkVHSVNUUllfX0RFRkFVTFRfUEFTU1dPUkQgPSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfRkVBVFVSRV9DT1VOVCArIDY7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGF4b25vbWllczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IFVERElfUkVHSVNUUllfX1RBWE9OT01JRVMgPSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfRkVBVFVSRV9DT1VOVCArIDc7Ci0KLQkvKioKLQkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlIHRoZSAnPGVtPlVERElSZWdpc3RyeTwvZW0+JyBjbGFzcy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBVRERJX1JFR0lTVFJZX0ZFQVRVUkVfQ09VTlQgPSBSZWdpc3RyeVBhY2thZ2UuUkVHSVNUUllfRkVBVFVSRV9DT1VOVCArIDg7Ci0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LkRvY3VtZW50Um9vdCA8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5Eb2N1bWVudCBSb290PC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuRG9jdW1lbnRSb290Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCUVDbGFzcyBnZXREb2N1bWVudFJvb3QoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5Eb2N1bWVudFJvb3QjZ2V0TWl4ZWQgPGVtPk1peGVkPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlIGxpc3QgJzxlbT5NaXhlZDwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LkRvY3VtZW50Um9vdCNnZXRNaXhlZCgpCi0JICogQHNlZSAjZ2V0RG9jdW1lbnRSb290KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUF0dHJpYnV0ZSBnZXREb2N1bWVudFJvb3RfTWl4ZWQoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgbWFwICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuRG9jdW1lbnRSb290I2dldFhNTE5TUHJlZml4TWFwIDxlbT5YTUxOUyBQcmVmaXggTWFwPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgbWFwICc8ZW0+WE1MTlMgUHJlZml4IE1hcDwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LkRvY3VtZW50Um9vdCNnZXRYTUxOU1ByZWZpeE1hcCgpCi0JICogQHNlZSAjZ2V0RG9jdW1lbnRSb290KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRVJlZmVyZW5jZSBnZXREb2N1bWVudFJvb3RfWE1MTlNQcmVmaXhNYXAoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgbWFwICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuRG9jdW1lbnRSb290I2dldFhTSVNjaGVtYUxvY2F0aW9uIDxlbT5YU0kgU2NoZW1hIExvY2F0aW9uPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgbWFwICc8ZW0+WFNJIFNjaGVtYSBMb2NhdGlvbjwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LkRvY3VtZW50Um9vdCNnZXRYU0lTY2hlbWFMb2NhdGlvbigpCi0JICogQHNlZSAjZ2V0RG9jdW1lbnRSb290KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRVJlZmVyZW5jZSBnZXREb2N1bWVudFJvb3RfWFNJU2NoZW1hTG9jYXRpb24oKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuRG9jdW1lbnRSb290I2dldFRheG9ub21pZXMgPGVtPlRheG9ub21pZXM8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJzxlbT5UYXhvbm9taWVzPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuRG9jdW1lbnRSb290I2dldFRheG9ub21pZXMoKQotCSAqIEBzZWUgI2dldERvY3VtZW50Um9vdCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVSZWZlcmVuY2UgZ2V0RG9jdW1lbnRSb290X1RheG9ub21pZXMoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuRG9jdW1lbnRSb290I2dldFVkZGlSZWdpc3RyeSA8ZW0+VWRkaSBSZWdpc3RyeTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPGVtPlVkZGkgUmVnaXN0cnk8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5Eb2N1bWVudFJvb3QjZ2V0VWRkaVJlZ2lzdHJ5KCkKLQkgKiBAc2VlICNnZXREb2N1bWVudFJvb3QoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFUmVmZXJlbmNlIGdldERvY3VtZW50Um9vdF9VZGRpUmVnaXN0cnkoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlRheG9ub21pZXMgPGVtPlRheG9ub21pZXM8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+VGF4b25vbWllczwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlRheG9ub21pZXMKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUNsYXNzIGdldFRheG9ub21pZXMoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5UYXhvbm9taWVzI2dldFRheG9ub215IDxlbT5UYXhvbm9teTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8ZW0+VGF4b25vbXk8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5UYXhvbm9taWVzI2dldFRheG9ub215KCkKLQkgKiBAc2VlICNnZXRUYXhvbm9taWVzKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRVJlZmVyZW5jZSBnZXRUYXhvbm9taWVzX1RheG9ub215KCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkgPGVtPlVERElSZWdpc3RyeTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5VRERJUmVnaXN0cnk8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUNsYXNzIGdldFVERElSZWdpc3RyeSgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkjZ2V0VmVyc2lvbiA8ZW0+VmVyc2lvbjwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlZlcnNpb248L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkjZ2V0VmVyc2lvbigpCi0JICogQHNlZSAjZ2V0VURESVJlZ2lzdHJ5KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUF0dHJpYnV0ZSBnZXRVRERJUmVnaXN0cnlfVmVyc2lvbigpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkjZ2V0RGlzY292ZXJ5VVJMIDxlbT5EaXNjb3ZlcnkgVVJMPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RGlzY292ZXJ5IFVSTDwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeSNnZXREaXNjb3ZlcnlVUkwoKQotCSAqIEBzZWUgI2dldFVERElSZWdpc3RyeSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVBdHRyaWJ1dGUgZ2V0VURESVJlZ2lzdHJ5X0Rpc2NvdmVyeVVSTCgpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkjZ2V0UHVibGljYXRpb25VUkwgPGVtPlB1YmxpY2F0aW9uIFVSTDwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlB1YmxpY2F0aW9uIFVSTDwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeSNnZXRQdWJsaWNhdGlvblVSTCgpCi0JICogQHNlZSAjZ2V0VURESVJlZ2lzdHJ5KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRUF0dHJpYnV0ZSBnZXRVRERJUmVnaXN0cnlfUHVibGljYXRpb25VUkwoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5I2dldFNlY3VyZWREaXNjb3ZlcnlVUkwgPGVtPlNlY3VyZWQgRGlzY292ZXJ5IFVSTDwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlNlY3VyZWQgRGlzY292ZXJ5IFVSTDwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeSNnZXRTZWN1cmVkRGlzY292ZXJ5VVJMKCkKLQkgKiBAc2VlICNnZXRVRERJUmVnaXN0cnkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQXR0cmlidXRlIGdldFVERElSZWdpc3RyeV9TZWN1cmVkRGlzY292ZXJ5VVJMKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeSNnZXRTZWN1cmVkUHVibGljYXRpb25VUkwgPGVtPlNlY3VyZWQgUHVibGljYXRpb24gVVJMPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+U2VjdXJlZCBQdWJsaWNhdGlvbiBVUkw8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkjZ2V0U2VjdXJlZFB1YmxpY2F0aW9uVVJMKCkKLQkgKiBAc2VlICNnZXRVRERJUmVnaXN0cnkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQXR0cmlidXRlIGdldFVERElSZWdpc3RyeV9TZWN1cmVkUHVibGljYXRpb25VUkwoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5I2dldERlZmF1bHRMb2dpbiA8ZW0+RGVmYXVsdCBMb2dpbjwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkRlZmF1bHQgTG9naW48L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkjZ2V0RGVmYXVsdExvZ2luKCkKLQkgKiBAc2VlICNnZXRVRERJUmVnaXN0cnkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQXR0cmlidXRlIGdldFVERElSZWdpc3RyeV9EZWZhdWx0TG9naW4oKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5I2dldERlZmF1bHRQYXNzd29yZCA8ZW0+RGVmYXVsdCBQYXNzd29yZDwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkRlZmF1bHQgUGFzc3dvcmQ8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnkjZ2V0RGVmYXVsdFBhc3N3b3JkKCkKLQkgKiBAc2VlICNnZXRVRERJUmVnaXN0cnkoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlFQXR0cmlidXRlIGdldFVERElSZWdpc3RyeV9EZWZhdWx0UGFzc3dvcmQoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5I2dldFRheG9ub21pZXMgPGVtPlRheG9ub21pZXM8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJzxlbT5UYXhvbm9taWVzPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5I2dldFRheG9ub21pZXMoKQotCSAqIEBzZWUgI2dldFVERElSZWdpc3RyeSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVSZWZlcmVuY2UgZ2V0VURESVJlZ2lzdHJ5X1RheG9ub21pZXMoKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCVVERElSZWdpc3RyeUZhY3RvcnkgZ2V0VURESVJlZ2lzdHJ5RmFjdG9yeSgpOwotCi19IC8vVURESVJlZ2lzdHJ5UGFja2FnZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L2ltcGwvRG9jdW1lbnRSb290SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L2ltcGwvRG9jdW1lbnRSb290SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODAyZDNmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS9pbXBsL0RvY3VtZW50Um9vdEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyNiArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IERvY3VtZW50Um9vdEltcGwuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjUwIGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuaW1wbDsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uQ2hhaW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRU1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRWNvcmVQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FT2JqZWN0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FU3RyaW5nVG9TdHJpbmdNYXBFbnRyeUltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5CYXNpY0ZlYXR1cmVNYXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVFTWFwOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkZlYXR1cmVNYXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuSW50ZXJuYWxFTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LkRvY3VtZW50Um9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5UYXhvbm9taWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnlQYWNrYWdlOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RG9jdW1lbnQgUm9vdDwvYj48L2VtPicuCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIDxwPgotICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Ci0gKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuaW1wbC5Eb2N1bWVudFJvb3RJbXBsI2dldE1peGVkIDxlbT5NaXhlZDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuaW1wbC5Eb2N1bWVudFJvb3RJbXBsI2dldFhNTE5TUHJlZml4TWFwIDxlbT5YTUxOUyBQcmVmaXggTWFwPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5pbXBsLkRvY3VtZW50Um9vdEltcGwjZ2V0WFNJU2NoZW1hTG9jYXRpb24gPGVtPlhTSSBTY2hlbWEgTG9jYXRpb248L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmltcGwuRG9jdW1lbnRSb290SW1wbCNnZXRUYXhvbm9taWVzIDxlbT5UYXhvbm9taWVzPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5pbXBsLkRvY3VtZW50Um9vdEltcGwjZ2V0VWRkaVJlZ2lzdHJ5IDxlbT5VZGRpIFJlZ2lzdHJ5PC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgRG9jdW1lbnRSb290SW1wbCBleHRlbmRzIEVPYmplY3RJbXBsIGltcGxlbWVudHMgRG9jdW1lbnRSb290IHsKLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRNaXhlZCgpIDxlbT5NaXhlZDwvZW0+fScgYXR0cmlidXRlIGxpc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRNaXhlZCgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIEZlYXR1cmVNYXAgbWl4ZWQgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0WE1MTlNQcmVmaXhNYXAoKSA8ZW0+WE1MTlMgUHJlZml4IE1hcDwvZW0+fScgbWFwLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0WE1MTlNQcmVmaXhNYXAoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBFTWFwIHhNTE5TUHJlZml4TWFwID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFhTSVNjaGVtYUxvY2F0aW9uKCkgPGVtPlhTSSBTY2hlbWEgTG9jYXRpb248L2VtPn0nIG1hcC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldFhTSVNjaGVtYUxvY2F0aW9uKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRU1hcCB4U0lTY2hlbWFMb2NhdGlvbiA9IG51bGw7Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRG9jdW1lbnRSb290SW1wbCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKLQkJcmV0dXJuIFVERElSZWdpc3RyeVBhY2thZ2UuZUlOU1RBTkNFLmdldERvY3VtZW50Um9vdCgpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBGZWF0dXJlTWFwIGdldE1peGVkKCkgewotCQlpZiAobWl4ZWQgPT0gbnVsbCkgewotCQkJbWl4ZWQgPSBuZXcgQmFzaWNGZWF0dXJlTWFwKHRoaXMsIFVERElSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fTUlYRUQpOwotCQl9Ci0JCXJldHVybiBtaXhlZDsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRU1hcCBnZXRYTUxOU1ByZWZpeE1hcCgpIHsKLQkJaWYgKHhNTE5TUHJlZml4TWFwID09IG51bGwpIHsKLQkJCXhNTE5TUHJlZml4TWFwID0gbmV3IEVjb3JlRU1hcChFY29yZVBhY2thZ2UuZUlOU1RBTkNFLmdldEVTdHJpbmdUb1N0cmluZ01hcEVudHJ5KCksIEVTdHJpbmdUb1N0cmluZ01hcEVudHJ5SW1wbC5jbGFzcywgdGhpcywgVURESVJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19YTUxOU19QUkVGSVhfTUFQKTsKLQkJfQotCQlyZXR1cm4geE1MTlNQcmVmaXhNYXA7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVNYXAgZ2V0WFNJU2NoZW1hTG9jYXRpb24oKSB7Ci0JCWlmICh4U0lTY2hlbWFMb2NhdGlvbiA9PSBudWxsKSB7Ci0JCQl4U0lTY2hlbWFMb2NhdGlvbiA9IG5ldyBFY29yZUVNYXAoRWNvcmVQYWNrYWdlLmVJTlNUQU5DRS5nZXRFU3RyaW5nVG9TdHJpbmdNYXBFbnRyeSgpLCBFU3RyaW5nVG9TdHJpbmdNYXBFbnRyeUltcGwuY2xhc3MsIHRoaXMsIFVERElSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTik7Ci0JCX0KLQkJcmV0dXJuIHhTSVNjaGVtYUxvY2F0aW9uOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBUYXhvbm9taWVzIGdldFRheG9ub21pZXMoKSB7Ci0JCXJldHVybiAoVGF4b25vbWllcylnZXRNaXhlZCgpLmdldChVRERJUmVnaXN0cnlQYWNrYWdlLmVJTlNUQU5DRS5nZXREb2N1bWVudFJvb3RfVGF4b25vbWllcygpLCB0cnVlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gYmFzaWNTZXRUYXhvbm9taWVzKFRheG9ub21pZXMgbmV3VGF4b25vbWllcywgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgewotCQlyZXR1cm4gKChGZWF0dXJlTWFwLkludGVybmFsKWdldE1peGVkKCkpLmJhc2ljQWRkKFVERElSZWdpc3RyeVBhY2thZ2UuZUlOU1RBTkNFLmdldERvY3VtZW50Um9vdF9UYXhvbm9taWVzKCksIG5ld1RheG9ub21pZXMsIG51bGwpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldFRheG9ub21pZXMoVGF4b25vbWllcyBuZXdUYXhvbm9taWVzKSB7Ci0JCSgoRmVhdHVyZU1hcC5JbnRlcm5hbClnZXRNaXhlZCgpKS5zZXQoVURESVJlZ2lzdHJ5UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RG9jdW1lbnRSb290X1RheG9ub21pZXMoKSwgbmV3VGF4b25vbWllcyk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFVERElSZWdpc3RyeSBnZXRVZGRpUmVnaXN0cnkoKSB7Ci0JCXJldHVybiAoVURESVJlZ2lzdHJ5KWdldE1peGVkKCkuZ2V0KFVERElSZWdpc3RyeVBhY2thZ2UuZUlOU1RBTkNFLmdldERvY3VtZW50Um9vdF9VZGRpUmVnaXN0cnkoKSwgdHJ1ZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGJhc2ljU2V0VWRkaVJlZ2lzdHJ5KFVERElSZWdpc3RyeSBuZXdVZGRpUmVnaXN0cnksIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKLQkJcmV0dXJuICgoRmVhdHVyZU1hcC5JbnRlcm5hbClnZXRNaXhlZCgpKS5iYXNpY0FkZChVRERJUmVnaXN0cnlQYWNrYWdlLmVJTlNUQU5DRS5nZXREb2N1bWVudFJvb3RfVWRkaVJlZ2lzdHJ5KCksIG5ld1VkZGlSZWdpc3RyeSwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0VWRkaVJlZ2lzdHJ5KFVERElSZWdpc3RyeSBuZXdVZGRpUmVnaXN0cnkpIHsKLQkJKChGZWF0dXJlTWFwLkludGVybmFsKWdldE1peGVkKCkpLnNldChVRERJUmVnaXN0cnlQYWNrYWdlLmVJTlNUQU5DRS5nZXREb2N1bWVudFJvb3RfVWRkaVJlZ2lzdHJ5KCksIG5ld1VkZGlSZWdpc3RyeSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgQ2xhc3MgYmFzZUNsYXNzLCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7Ci0JCWlmIChmZWF0dXJlSUQgPj0gMCkgewotCQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZmVhdHVyZUlELCBiYXNlQ2xhc3MpKSB7Ci0JCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX01JWEVEOgotCQkJCQlyZXR1cm4gKChJbnRlcm5hbEVMaXN0KWdldE1peGVkKCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKLQkJCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWE1MTlNfUFJFRklYX01BUDoKLQkJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdClnZXRYTUxOU1ByZWZpeE1hcCgpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0JCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hTSV9TQ0hFTUFfTE9DQVRJT046Ci0JCQkJCXJldHVybiAoKEludGVybmFsRUxpc3QpZ2V0WFNJU2NoZW1hTG9jYXRpb24oKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOwotCQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19UQVhPTk9NSUVTOgotCQkJCQlyZXR1cm4gYmFzaWNTZXRUYXhvbm9taWVzKG51bGwsIG1zZ3MpOwotCQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19VRERJX1JFR0lTVFJZOgotCQkJCQlyZXR1cm4gYmFzaWNTZXRVZGRpUmVnaXN0cnkobnVsbCwgbXNncyk7Ci0JCQkJZGVmYXVsdDoKLQkJCQkJcmV0dXJuIGVEeW5hbWljSW52ZXJzZVJlbW92ZShvdGhlckVuZCwgZmVhdHVyZUlELCBiYXNlQ2xhc3MsIG1zZ3MpOwotCQkJfQotCQl9Ci0JCXJldHVybiBlQmFzaWNTZXRDb250YWluZXIobnVsbCwgZmVhdHVyZUlELCBtc2dzKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGVHZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlLCBib29sZWFuIHJlc29sdmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fTUlYRUQ6Ci0JCQkJcmV0dXJuIGdldE1peGVkKCk7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWE1MTlNfUFJFRklYX01BUDoKLQkJCQlyZXR1cm4gZ2V0WE1MTlNQcmVmaXhNYXAoKTsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19YU0lfU0NIRU1BX0xPQ0FUSU9OOgotCQkJCXJldHVybiBnZXRYU0lTY2hlbWFMb2NhdGlvbigpOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1RBWE9OT01JRVM6Ci0JCQkJcmV0dXJuIGdldFRheG9ub21pZXMoKTsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19VRERJX1JFR0lTVFJZOgotCQkJCXJldHVybiBnZXRVZGRpUmVnaXN0cnkoKTsKLQkJfQotCQlyZXR1cm4gZUR5bmFtaWNHZXQoZUZlYXR1cmUsIHJlc29sdmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGVTZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlLCBPYmplY3QgbmV3VmFsdWUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fTUlYRUQ6Ci0JCQkJZ2V0TWl4ZWQoKS5jbGVhcigpOwotCQkJCWdldE1peGVkKCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWE1MTlNfUFJFRklYX01BUDoKLQkJCQlnZXRYTUxOU1ByZWZpeE1hcCgpLmNsZWFyKCk7Ci0JCQkJZ2V0WE1MTlNQcmVmaXhNYXAoKS5hZGRBbGwoKENvbGxlY3Rpb24pbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19YU0lfU0NIRU1BX0xPQ0FUSU9OOgotCQkJCWdldFhTSVNjaGVtYUxvY2F0aW9uKCkuY2xlYXIoKTsKLQkJCQlnZXRYU0lTY2hlbWFMb2NhdGlvbigpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1RBWE9OT01JRVM6Ci0JCQkJc2V0VGF4b25vbWllcygoVGF4b25vbWllcyluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1VERElfUkVHSVNUUlk6Ci0JCQkJc2V0VWRkaVJlZ2lzdHJ5KChVRERJUmVnaXN0cnkpbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJfQotCQllRHluYW1pY1NldChlRmVhdHVyZSwgbmV3VmFsdWUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGVVbnNldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fTUlYRUQ6Ci0JCQkJZ2V0TWl4ZWQoKS5jbGVhcigpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19YTUxOU19QUkVGSVhfTUFQOgotCQkJCWdldFhNTE5TUHJlZml4TWFwKCkuY2xlYXIoKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fWFNJX1NDSEVNQV9MT0NBVElPTjoKLQkJCQlnZXRYU0lTY2hlbWFMb2NhdGlvbigpLmNsZWFyKCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1RBWE9OT01JRVM6Ci0JCQkJc2V0VGF4b25vbWllcygoVGF4b25vbWllcyludWxsKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fVURESV9SRUdJU1RSWToKLQkJCQlzZXRVZGRpUmVnaXN0cnkoKFVERElSZWdpc3RyeSludWxsKTsKLQkJCQlyZXR1cm47Ci0JCX0KLQkJZUR5bmFtaWNVbnNldChlRmVhdHVyZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIGJvb2xlYW4gZUlzU2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19NSVhFRDoKLQkJCQlyZXR1cm4gbWl4ZWQgIT0gbnVsbCAmJiAhbWl4ZWQuaXNFbXB0eSgpOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLkRPQ1VNRU5UX1JPT1RfX1hNTE5TX1BSRUZJWF9NQVA6Ci0JCQkJcmV0dXJuIHhNTE5TUHJlZml4TWFwICE9IG51bGwgJiYgIXhNTE5TUHJlZml4TWFwLmlzRW1wdHkoKTsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UX19YU0lfU0NIRU1BX0xPQ0FUSU9OOgotCQkJCXJldHVybiB4U0lTY2hlbWFMb2NhdGlvbiAhPSBudWxsICYmICF4U0lTY2hlbWFMb2NhdGlvbi5pc0VtcHR5KCk7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fVEFYT05PTUlFUzoKLQkJCQlyZXR1cm4gZ2V0VGF4b25vbWllcygpICE9IG51bGw7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVF9fVURESV9SRUdJU1RSWToKLQkJCQlyZXR1cm4gZ2V0VWRkaVJlZ2lzdHJ5KCkgIT0gbnVsbDsKLQkJfQotCQlyZXR1cm4gZUR5bmFtaWNJc1NldChlRmVhdHVyZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOwotCi0JCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOwotCQlyZXN1bHQuYXBwZW5kKCIgKG1peGVkOiAiKTsKLQkJcmVzdWx0LmFwcGVuZChtaXhlZCk7Ci0JCXJlc3VsdC5hcHBlbmQoJyknKTsKLQkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotCX0KLQotfSAvL0RvY3VtZW50Um9vdEltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS9pbXBsL1RheG9ub21pZXNJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvaW1wbC9UYXhvbm9taWVzSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDc1YmY3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS9pbXBsL1RheG9ub21pZXNJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTUgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBUYXhvbm9taWVzSW1wbC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NTAgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5pbXBsOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU9iamVjdEltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FT2JqZWN0Q29udGFpbm1lbnRFTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5JbnRlcm5hbEVMaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlRheG9ub21pZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5UGFja2FnZTsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlRheG9ub21pZXM8L2I+PC9lbT4nLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiA8cD4KLSAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgotICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmltcGwuVGF4b25vbWllc0ltcGwjZ2V0VGF4b25vbXkgPGVtPlRheG9ub215PC9lbT59PC9saT4KLSAqIDwvdWw+Ci0gKiA8L3A+Ci0gKgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgVGF4b25vbWllc0ltcGwgZXh0ZW5kcyBFT2JqZWN0SW1wbCBpbXBsZW1lbnRzIFRheG9ub21pZXMgewotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFRheG9ub215KCkgPGVtPlRheG9ub215PC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldFRheG9ub215KCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRUxpc3QgdGF4b25vbXkgPSBudWxsOwotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIFRheG9ub21pZXNJbXBsKCkgewotCQlzdXBlcigpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgewotCQlyZXR1cm4gVURESVJlZ2lzdHJ5UGFja2FnZS5lSU5TVEFOQ0UuZ2V0VGF4b25vbWllcygpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFTGlzdCBnZXRUYXhvbm9teSgpIHsKLQkJaWYgKHRheG9ub215ID09IG51bGwpIHsKLQkJCXRheG9ub215ID0gbmV3IEVPYmplY3RDb250YWlubWVudEVMaXN0KFRheG9ub215LmNsYXNzLCB0aGlzLCBVRERJUmVnaXN0cnlQYWNrYWdlLlRBWE9OT01JRVNfX1RBWE9OT01ZKTsKLQkJfQotCQlyZXR1cm4gdGF4b25vbXk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgQ2xhc3MgYmFzZUNsYXNzLCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7Ci0JCWlmIChmZWF0dXJlSUQgPj0gMCkgewotCQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZmVhdHVyZUlELCBiYXNlQ2xhc3MpKSB7Ci0JCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlRBWE9OT01JRVNfX1RBWE9OT01ZOgotCQkJCQlyZXR1cm4gKChJbnRlcm5hbEVMaXN0KWdldFRheG9ub215KCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKLQkJCQlkZWZhdWx0OgotCQkJCQlyZXR1cm4gZUR5bmFtaWNJbnZlcnNlUmVtb3ZlKG90aGVyRW5kLCBmZWF0dXJlSUQsIGJhc2VDbGFzcywgbXNncyk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGVCYXNpY1NldENvbnRhaW5lcihudWxsLCBmZWF0dXJlSUQsIG1zZ3MpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBPYmplY3QgZUdldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUsIGJvb2xlYW4gcmVzb2x2ZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5UQVhPTk9NSUVTX19UQVhPTk9NWToKLQkJCQlyZXR1cm4gZ2V0VGF4b25vbXkoKTsKLQkJfQotCQlyZXR1cm4gZUR5bmFtaWNHZXQoZUZlYXR1cmUsIHJlc29sdmUpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIGVTZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlLCBPYmplY3QgbmV3VmFsdWUpIHsKLQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZUZlYXR1cmUpKSB7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVEFYT05PTUlFU19fVEFYT05PTVk6Ci0JCQkJZ2V0VGF4b25vbXkoKS5jbGVhcigpOwotCQkJCWdldFRheG9ub215KCkuYWRkQWxsKChDb2xsZWN0aW9uKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCX0KLQkJZUR5bmFtaWNTZXQoZUZlYXR1cmUsIG5ld1ZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBlVW5zZXQoRVN0cnVjdHVyYWxGZWF0dXJlIGVGZWF0dXJlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlRBWE9OT01JRVNfX1RBWE9OT01ZOgotCQkJCWdldFRheG9ub215KCkuY2xlYXIoKTsKLQkJCQlyZXR1cm47Ci0JCX0KLQkJZUR5bmFtaWNVbnNldChlRmVhdHVyZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIGJvb2xlYW4gZUlzU2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5UQVhPTk9NSUVTX19UQVhPTk9NWToKLQkJCQlyZXR1cm4gdGF4b25vbXkgIT0gbnVsbCAmJiAhdGF4b25vbXkuaXNFbXB0eSgpOwotCQl9Ci0JCXJldHVybiBlRHluYW1pY0lzU2V0KGVGZWF0dXJlKTsKLQl9Ci0KLX0gLy9UYXhvbm9taWVzSW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L2ltcGwvVURESVJlZ2lzdHJ5RmFjdG9yeUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS9pbXBsL1VERElSZWdpc3RyeUZhY3RvcnlJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlODAzM2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L2ltcGwvVURESVJlZ2lzdHJ5RmFjdG9yeUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogVURESVJlZ2lzdHJ5RmFjdG9yeUltcGwuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjUwIGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FRmFjdG9yeUltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS4qOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+RmFjdG9yeTwvYj4uCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFVERElSZWdpc3RyeUZhY3RvcnlJbXBsIGV4dGVuZHMgRUZhY3RvcnlJbXBsIGltcGxlbWVudHMgVURESVJlZ2lzdHJ5RmFjdG9yeSB7Ci0JLyoqCi0JICogQ3JlYXRlcyBhbmQgaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFVERElSZWdpc3RyeUZhY3RvcnlJbXBsKCkgewotCQlzdXBlcigpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFT2JqZWN0IGNyZWF0ZShFQ2xhc3MgZUNsYXNzKSB7Ci0JCXN3aXRjaCAoZUNsYXNzLmdldENsYXNzaWZpZXJJRCgpKSB7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuRE9DVU1FTlRfUk9PVDogcmV0dXJuIGNyZWF0ZURvY3VtZW50Um9vdCgpOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlRBWE9OT01JRVM6IHJldHVybiBjcmVhdGVUYXhvbm9taWVzKCk7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWTogcmV0dXJuIGNyZWF0ZVVERElSZWdpc3RyeSgpOwotCQkJZGVmYXVsdDoKLQkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgY2xhc3MgJyIgKyBlQ2xhc3MuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIERvY3VtZW50Um9vdCBjcmVhdGVEb2N1bWVudFJvb3QoKSB7Ci0JCURvY3VtZW50Um9vdEltcGwgZG9jdW1lbnRSb290ID0gbmV3IERvY3VtZW50Um9vdEltcGwoKTsKLQkJcmV0dXJuIGRvY3VtZW50Um9vdDsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgVGF4b25vbWllcyBjcmVhdGVUYXhvbm9taWVzKCkgewotCQlUYXhvbm9taWVzSW1wbCB0YXhvbm9taWVzID0gbmV3IFRheG9ub21pZXNJbXBsKCk7Ci0JCXJldHVybiB0YXhvbm9taWVzOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBVRERJUmVnaXN0cnkgY3JlYXRlVURESVJlZ2lzdHJ5KCkgewotCQlVRERJUmVnaXN0cnlJbXBsIHVkZGlSZWdpc3RyeSA9IG5ldyBVRERJUmVnaXN0cnlJbXBsKCk7Ci0JCXJldHVybiB1ZGRpUmVnaXN0cnk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFVERElSZWdpc3RyeVBhY2thZ2UgZ2V0VURESVJlZ2lzdHJ5UGFja2FnZSgpIHsKLQkJcmV0dXJuIChVRERJUmVnaXN0cnlQYWNrYWdlKWdldEVQYWNrYWdlKCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZGVwcmVjYXRlZAotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFVERElSZWdpc3RyeVBhY2thZ2UgZ2V0UGFja2FnZSgpIHsKLQkJcmV0dXJuIFVERElSZWdpc3RyeVBhY2thZ2UuZUlOU1RBTkNFOwotCX0KLQotfSAvL1VERElSZWdpc3RyeUZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvaW1wbC9VRERJUmVnaXN0cnlJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvaW1wbC9VRERJUmVnaXN0cnlJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4ZTM4YjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L2ltcGwvVURESVJlZ2lzdHJ5SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjMxICswLDAgQEAKLS8qKgotICogPGNvcHlyaWdodD4KLSAqIDwvY29weXJpZ2h0PgotICoKLSAqICRJZDogVURESVJlZ2lzdHJ5SW1wbC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NTAgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5pbXBsOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uQ2hhaW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuSW50ZXJuYWxFTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbC5SZWdpc3RyeUltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5UYXhvbm9taWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnlQYWNrYWdlOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VURESVJlZ2lzdHJ5PC9iPjwvZW0+Jy4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogPHA+Ci0gKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKLSAqIDx1bD4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5pbXBsLlVERElSZWdpc3RyeUltcGwjZ2V0VmVyc2lvbiA8ZW0+VmVyc2lvbjwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuaW1wbC5VRERJUmVnaXN0cnlJbXBsI2dldERpc2NvdmVyeVVSTCA8ZW0+RGlzY292ZXJ5IFVSTDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuaW1wbC5VRERJUmVnaXN0cnlJbXBsI2dldFB1YmxpY2F0aW9uVVJMIDxlbT5QdWJsaWNhdGlvbiBVUkw8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmltcGwuVURESVJlZ2lzdHJ5SW1wbCNnZXRTZWN1cmVkRGlzY292ZXJ5VVJMIDxlbT5TZWN1cmVkIERpc2NvdmVyeSBVUkw8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LmltcGwuVURESVJlZ2lzdHJ5SW1wbCNnZXRTZWN1cmVkUHVibGljYXRpb25VUkwgPGVtPlNlY3VyZWQgUHVibGljYXRpb24gVVJMPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5pbXBsLlVERElSZWdpc3RyeUltcGwjZ2V0RGVmYXVsdExvZ2luIDxlbT5EZWZhdWx0IExvZ2luPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5pbXBsLlVERElSZWdpc3RyeUltcGwjZ2V0RGVmYXVsdFBhc3N3b3JkIDxlbT5EZWZhdWx0IFBhc3N3b3JkPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5pbXBsLlVERElSZWdpc3RyeUltcGwjZ2V0VGF4b25vbWllcyA8ZW0+VGF4b25vbWllczwvZW0+fTwvbGk+Ci0gKiA8L3VsPgotICogPC9wPgotICoKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFVERElSZWdpc3RyeUltcGwgZXh0ZW5kcyBSZWdpc3RyeUltcGwgaW1wbGVtZW50cyBVRERJUmVnaXN0cnkgewotCS8qKgotCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRWZXJzaW9uKCkgPGVtPlZlcnNpb248L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldFZlcnNpb24oKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFZFUlNJT05fRURFRkFVTFQgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmVyc2lvbigpIDxlbT5WZXJzaW9uPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRWZXJzaW9uKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgU3RyaW5nIHZlcnNpb24gPSBWRVJTSU9OX0VERUZBVUxUOwotCi0JLyoqCi0JICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERpc2NvdmVyeVVSTCgpIDxlbT5EaXNjb3ZlcnkgVVJMPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXREaXNjb3ZlcnlVUkwoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIERJU0NPVkVSWV9VUkxfRURFRkFVTFQgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGlzY292ZXJ5VVJMKCkgPGVtPkRpc2NvdmVyeSBVUkw8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldERpc2NvdmVyeVVSTCgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIFN0cmluZyBkaXNjb3ZlcnlVUkwgPSBESVNDT1ZFUllfVVJMX0VERUZBVUxUOwotCi0JLyoqCi0JICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFB1YmxpY2F0aW9uVVJMKCkgPGVtPlB1YmxpY2F0aW9uIFVSTDwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0UHVibGljYXRpb25VUkwoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBVQkxJQ0FUSU9OX1VSTF9FREVGQVVMVCA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRQdWJsaWNhdGlvblVSTCgpIDxlbT5QdWJsaWNhdGlvbiBVUkw8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldFB1YmxpY2F0aW9uVVJMKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgU3RyaW5nIHB1YmxpY2F0aW9uVVJMID0gUFVCTElDQVRJT05fVVJMX0VERUZBVUxUOwotCi0JLyoqCi0JICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFNlY3VyZWREaXNjb3ZlcnlVUkwoKSA8ZW0+U2VjdXJlZCBEaXNjb3ZlcnkgVVJMPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRTZWN1cmVkRGlzY292ZXJ5VVJMKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBTRUNVUkVEX0RJU0NPVkVSWV9VUkxfRURFRkFVTFQgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U2VjdXJlZERpc2NvdmVyeVVSTCgpIDxlbT5TZWN1cmVkIERpc2NvdmVyeSBVUkw8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldFNlY3VyZWREaXNjb3ZlcnlVUkwoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBTdHJpbmcgc2VjdXJlZERpc2NvdmVyeVVSTCA9IFNFQ1VSRURfRElTQ09WRVJZX1VSTF9FREVGQVVMVDsKLQotCS8qKgotCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRTZWN1cmVkUHVibGljYXRpb25VUkwoKSA8ZW0+U2VjdXJlZCBQdWJsaWNhdGlvbiBVUkw8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldFNlY3VyZWRQdWJsaWNhdGlvblVSTCgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VDVVJFRF9QVUJMSUNBVElPTl9VUkxfRURFRkFVTFQgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U2VjdXJlZFB1YmxpY2F0aW9uVVJMKCkgPGVtPlNlY3VyZWQgUHVibGljYXRpb24gVVJMPC9lbT59JyBhdHRyaWJ1dGUuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRTZWN1cmVkUHVibGljYXRpb25VUkwoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBTdHJpbmcgc2VjdXJlZFB1YmxpY2F0aW9uVVJMID0gU0VDVVJFRF9QVUJMSUNBVElPTl9VUkxfRURFRkFVTFQ7Ci0KLQkvKioKLQkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGVmYXVsdExvZ2luKCkgPGVtPkRlZmF1bHQgTG9naW48L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldERlZmF1bHRMb2dpbigpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9MT0dJTl9FREVGQVVMVCA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREZWZhdWx0TG9naW4oKSA8ZW0+RGVmYXVsdCBMb2dpbjwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0RGVmYXVsdExvZ2luKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgU3RyaW5nIGRlZmF1bHRMb2dpbiA9IERFRkFVTFRfTE9HSU5fRURFRkFVTFQ7Ci0KLQkvKioKLQkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGVmYXVsdFBhc3N3b3JkKCkgPGVtPkRlZmF1bHQgUGFzc3dvcmQ8L2VtPn0nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldERlZmF1bHRQYXNzd29yZCgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9QQVNTV09SRF9FREVGQVVMVCA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREZWZhdWx0UGFzc3dvcmQoKSA8ZW0+RGVmYXVsdCBQYXNzd29yZDwvZW0+fScgYXR0cmlidXRlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0RGVmYXVsdFBhc3N3b3JkKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgU3RyaW5nIGRlZmF1bHRQYXNzd29yZCA9IERFRkFVTFRfUEFTU1dPUkRfRURFRkFVTFQ7Ci0KLQkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUYXhvbm9taWVzKCkgPGVtPlRheG9ub21pZXM8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldFRheG9ub21pZXMoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBUYXhvbm9taWVzIHRheG9ub21pZXMgPSBudWxsOwotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIFVERElSZWdpc3RyeUltcGwoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7Ci0JCXJldHVybiBVRERJUmVnaXN0cnlQYWNrYWdlLmVJTlNUQU5DRS5nZXRVRERJUmVnaXN0cnkoKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFZlcnNpb24oKSB7Ci0JCXJldHVybiB2ZXJzaW9uOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldFZlcnNpb24oU3RyaW5nIG5ld1ZlcnNpb24pIHsKLQkJU3RyaW5nIG9sZFZlcnNpb24gPSB2ZXJzaW9uOwotCQl2ZXJzaW9uID0gbmV3VmVyc2lvbjsKLQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19WRVJTSU9OLCBvbGRWZXJzaW9uLCB2ZXJzaW9uKSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyBnZXREaXNjb3ZlcnlVUkwoKSB7Ci0JCXJldHVybiBkaXNjb3ZlcnlVUkw7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0RGlzY292ZXJ5VVJMKFN0cmluZyBuZXdEaXNjb3ZlcnlVUkwpIHsKLQkJU3RyaW5nIG9sZERpc2NvdmVyeVVSTCA9IGRpc2NvdmVyeVVSTDsKLQkJZGlzY292ZXJ5VVJMID0gbmV3RGlzY292ZXJ5VVJMOwotCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0JCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX0RJU0NPVkVSWV9VUkwsIG9sZERpc2NvdmVyeVVSTCwgZGlzY292ZXJ5VVJMKSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRQdWJsaWNhdGlvblVSTCgpIHsKLQkJcmV0dXJuIHB1YmxpY2F0aW9uVVJMOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldFB1YmxpY2F0aW9uVVJMKFN0cmluZyBuZXdQdWJsaWNhdGlvblVSTCkgewotCQlTdHJpbmcgb2xkUHVibGljYXRpb25VUkwgPSBwdWJsaWNhdGlvblVSTDsKLQkJcHVibGljYXRpb25VUkwgPSBuZXdQdWJsaWNhdGlvblVSTDsKLQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19QVUJMSUNBVElPTl9VUkwsIG9sZFB1YmxpY2F0aW9uVVJMLCBwdWJsaWNhdGlvblVSTCkpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0U2VjdXJlZERpc2NvdmVyeVVSTCgpIHsKLQkJcmV0dXJuIHNlY3VyZWREaXNjb3ZlcnlVUkw7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0U2VjdXJlZERpc2NvdmVyeVVSTChTdHJpbmcgbmV3U2VjdXJlZERpc2NvdmVyeVVSTCkgewotCQlTdHJpbmcgb2xkU2VjdXJlZERpc2NvdmVyeVVSTCA9IHNlY3VyZWREaXNjb3ZlcnlVUkw7Ci0JCXNlY3VyZWREaXNjb3ZlcnlVUkwgPSBuZXdTZWN1cmVkRGlzY292ZXJ5VVJMOwotCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0JCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX1NFQ1VSRURfRElTQ09WRVJZX1VSTCwgb2xkU2VjdXJlZERpc2NvdmVyeVVSTCwgc2VjdXJlZERpc2NvdmVyeVVSTCkpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0U2VjdXJlZFB1YmxpY2F0aW9uVVJMKCkgewotCQlyZXR1cm4gc2VjdXJlZFB1YmxpY2F0aW9uVVJMOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldFNlY3VyZWRQdWJsaWNhdGlvblVSTChTdHJpbmcgbmV3U2VjdXJlZFB1YmxpY2F0aW9uVVJMKSB7Ci0JCVN0cmluZyBvbGRTZWN1cmVkUHVibGljYXRpb25VUkwgPSBzZWN1cmVkUHVibGljYXRpb25VUkw7Ci0JCXNlY3VyZWRQdWJsaWNhdGlvblVSTCA9IG5ld1NlY3VyZWRQdWJsaWNhdGlvblVSTDsKLQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19TRUNVUkVEX1BVQkxJQ0FUSU9OX1VSTCwgb2xkU2VjdXJlZFB1YmxpY2F0aW9uVVJMLCBzZWN1cmVkUHVibGljYXRpb25VUkwpKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldERlZmF1bHRMb2dpbigpIHsKLQkJcmV0dXJuIGRlZmF1bHRMb2dpbjsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXREZWZhdWx0TG9naW4oU3RyaW5nIG5ld0RlZmF1bHRMb2dpbikgewotCQlTdHJpbmcgb2xkRGVmYXVsdExvZ2luID0gZGVmYXVsdExvZ2luOwotCQlkZWZhdWx0TG9naW4gPSBuZXdEZWZhdWx0TG9naW47Ci0JCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fREVGQVVMVF9MT0dJTiwgb2xkRGVmYXVsdExvZ2luLCBkZWZhdWx0TG9naW4pKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldERlZmF1bHRQYXNzd29yZCgpIHsKLQkJcmV0dXJuIGRlZmF1bHRQYXNzd29yZDsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXREZWZhdWx0UGFzc3dvcmQoU3RyaW5nIG5ld0RlZmF1bHRQYXNzd29yZCkgewotCQlTdHJpbmcgb2xkRGVmYXVsdFBhc3N3b3JkID0gZGVmYXVsdFBhc3N3b3JkOwotCQlkZWZhdWx0UGFzc3dvcmQgPSBuZXdEZWZhdWx0UGFzc3dvcmQ7Ci0JCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fREVGQVVMVF9QQVNTV09SRCwgb2xkRGVmYXVsdFBhc3N3b3JkLCBkZWZhdWx0UGFzc3dvcmQpKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgVGF4b25vbWllcyBnZXRUYXhvbm9taWVzKCkgewotCQlyZXR1cm4gdGF4b25vbWllczsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gYmFzaWNTZXRUYXhvbm9taWVzKFRheG9ub21pZXMgbmV3VGF4b25vbWllcywgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgewotCQlUYXhvbm9taWVzIG9sZFRheG9ub21pZXMgPSB0YXhvbm9taWVzOwotCQl0YXhvbm9taWVzID0gbmV3VGF4b25vbWllczsKLQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKSB7Ci0JCQlFTm90aWZpY2F0aW9uSW1wbCBub3RpZmljYXRpb24gPSBuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19UQVhPTk9NSUVTLCBvbGRUYXhvbm9taWVzLCBuZXdUYXhvbm9taWVzKTsKLQkJCWlmIChtc2dzID09IG51bGwpIG1zZ3MgPSBub3RpZmljYXRpb247IGVsc2UgbXNncy5hZGQobm90aWZpY2F0aW9uKTsKLQkJfQotCQlyZXR1cm4gbXNnczsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRUYXhvbm9taWVzKFRheG9ub21pZXMgbmV3VGF4b25vbWllcykgewotCQlpZiAobmV3VGF4b25vbWllcyAhPSB0YXhvbm9taWVzKSB7Ci0JCQlOb3RpZmljYXRpb25DaGFpbiBtc2dzID0gbnVsbDsKLQkJCWlmICh0YXhvbm9taWVzICE9IG51bGwpCi0JCQkJbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KXRheG9ub21pZXMpLmVJbnZlcnNlUmVtb3ZlKHRoaXMsIEVPUFBPU0lURV9GRUFUVVJFX0JBU0UgLSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX1RBWE9OT01JRVMsIG51bGwsIG1zZ3MpOwotCQkJaWYgKG5ld1RheG9ub21pZXMgIT0gbnVsbCkKLQkJCQltc2dzID0gKChJbnRlcm5hbEVPYmplY3QpbmV3VGF4b25vbWllcykuZUludmVyc2VBZGQodGhpcywgRU9QUE9TSVRFX0ZFQVRVUkVfQkFTRSAtIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fVEFYT05PTUlFUywgbnVsbCwgbXNncyk7Ci0JCQltc2dzID0gYmFzaWNTZXRUYXhvbm9taWVzKG5ld1RheG9ub21pZXMsIG1zZ3MpOwotCQkJaWYgKG1zZ3MgIT0gbnVsbCkgbXNncy5kaXNwYXRjaCgpOwotCQl9Ci0JCWVsc2UgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19UQVhPTk9NSUVTLCBuZXdUYXhvbm9taWVzLCBuZXdUYXhvbm9taWVzKSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgQ2xhc3MgYmFzZUNsYXNzLCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7Ci0JCWlmIChmZWF0dXJlSUQgPj0gMCkgewotCQkJc3dpdGNoIChlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoZmVhdHVyZUlELCBiYXNlQ2xhc3MpKSB7Ci0JCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX05BTUU6Ci0JCQkJCXJldHVybiAoKEludGVybmFsRUxpc3QpZ2V0TmFtZSgpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7Ci0JCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX0RFU0NSSVBUSU9OOgotCQkJCQlyZXR1cm4gKChJbnRlcm5hbEVMaXN0KWdldERlc2NyaXB0aW9uKCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKLQkJCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fVEFYT05PTUlFUzoKLQkJCQkJcmV0dXJuIGJhc2ljU2V0VGF4b25vbWllcyhudWxsLCBtc2dzKTsKLQkJCQlkZWZhdWx0OgotCQkJCQlyZXR1cm4gZUR5bmFtaWNJbnZlcnNlUmVtb3ZlKG90aGVyRW5kLCBmZWF0dXJlSUQsIGJhc2VDbGFzcywgbXNncyk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGVCYXNpY1NldENvbnRhaW5lcihudWxsLCBmZWF0dXJlSUQsIG1zZ3MpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBPYmplY3QgZUdldChFU3RydWN0dXJhbEZlYXR1cmUgZUZlYXR1cmUsIGJvb2xlYW4gcmVzb2x2ZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19OQU1FOgotCQkJCXJldHVybiBnZXROYW1lKCk7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fREVTQ1JJUFRJT046Ci0JCQkJcmV0dXJuIGdldERlc2NyaXB0aW9uKCk7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fSUQ6Ci0JCQkJcmV0dXJuIGdldElkKCk7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fTE9DQVRJT046Ci0JCQkJcmV0dXJuIGdldExvY2F0aW9uKCk7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fUkVGOgotCQkJCXJldHVybiBnZXRSZWYoKTsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19WRVJTSU9OOgotCQkJCXJldHVybiBnZXRWZXJzaW9uKCk7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fRElTQ09WRVJZX1VSTDoKLQkJCQlyZXR1cm4gZ2V0RGlzY292ZXJ5VVJMKCk7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fUFVCTElDQVRJT05fVVJMOgotCQkJCXJldHVybiBnZXRQdWJsaWNhdGlvblVSTCgpOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX1NFQ1VSRURfRElTQ09WRVJZX1VSTDoKLQkJCQlyZXR1cm4gZ2V0U2VjdXJlZERpc2NvdmVyeVVSTCgpOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX1NFQ1VSRURfUFVCTElDQVRJT05fVVJMOgotCQkJCXJldHVybiBnZXRTZWN1cmVkUHVibGljYXRpb25VUkwoKTsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19ERUZBVUxUX0xPR0lOOgotCQkJCXJldHVybiBnZXREZWZhdWx0TG9naW4oKTsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19ERUZBVUxUX1BBU1NXT1JEOgotCQkJCXJldHVybiBnZXREZWZhdWx0UGFzc3dvcmQoKTsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19UQVhPTk9NSUVTOgotCQkJCXJldHVybiBnZXRUYXhvbm9taWVzKCk7Ci0JCX0KLQkJcmV0dXJuIGVEeW5hbWljR2V0KGVGZWF0dXJlLCByZXNvbHZlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBlU2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSwgT2JqZWN0IG5ld1ZhbHVlKSB7Ci0JCXN3aXRjaCAoZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGVGZWF0dXJlKSkgewotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX05BTUU6Ci0JCQkJZ2V0TmFtZSgpLmNsZWFyKCk7Ci0JCQkJZ2V0TmFtZSgpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX0RFU0NSSVBUSU9OOgotCQkJCWdldERlc2NyaXB0aW9uKCkuY2xlYXIoKTsKLQkJCQlnZXREZXNjcmlwdGlvbigpLmFkZEFsbCgoQ29sbGVjdGlvbiluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX0lEOgotCQkJCXNldElkKChTdHJpbmcpbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19MT0NBVElPTjoKLQkJCQlzZXRMb2NhdGlvbigoU3RyaW5nKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fUkVGOgotCQkJCXNldFJlZigoU3RyaW5nKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fVkVSU0lPTjoKLQkJCQlzZXRWZXJzaW9uKChTdHJpbmcpbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19ESVNDT1ZFUllfVVJMOgotCQkJCXNldERpc2NvdmVyeVVSTCgoU3RyaW5nKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fUFVCTElDQVRJT05fVVJMOgotCQkJCXNldFB1YmxpY2F0aW9uVVJMKChTdHJpbmcpbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19TRUNVUkVEX0RJU0NPVkVSWV9VUkw6Ci0JCQkJc2V0U2VjdXJlZERpc2NvdmVyeVVSTCgoU3RyaW5nKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fU0VDVVJFRF9QVUJMSUNBVElPTl9VUkw6Ci0JCQkJc2V0U2VjdXJlZFB1YmxpY2F0aW9uVVJMKChTdHJpbmcpbmV3VmFsdWUpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19ERUZBVUxUX0xPR0lOOgotCQkJCXNldERlZmF1bHRMb2dpbigoU3RyaW5nKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fREVGQVVMVF9QQVNTV09SRDoKLQkJCQlzZXREZWZhdWx0UGFzc3dvcmQoKFN0cmluZyluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX1RBWE9OT01JRVM6Ci0JCQkJc2V0VGF4b25vbWllcygoVGF4b25vbWllcyluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQl9Ci0JCWVEeW5hbWljU2V0KGVGZWF0dXJlLCBuZXdWYWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgZVVuc2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19OQU1FOgotCQkJCWdldE5hbWUoKS5jbGVhcigpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19ERVNDUklQVElPTjoKLQkJCQlnZXREZXNjcmlwdGlvbigpLmNsZWFyKCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX0lEOgotCQkJCXNldElkKElEX0VERUZBVUxUKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fTE9DQVRJT046Ci0JCQkJc2V0TG9jYXRpb24oTE9DQVRJT05fRURFRkFVTFQpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19SRUY6Ci0JCQkJc2V0UmVmKFJFRl9FREVGQVVMVCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX1ZFUlNJT046Ci0JCQkJc2V0VmVyc2lvbihWRVJTSU9OX0VERUZBVUxUKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fRElTQ09WRVJZX1VSTDoKLQkJCQlzZXREaXNjb3ZlcnlVUkwoRElTQ09WRVJZX1VSTF9FREVGQVVMVCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX1BVQkxJQ0FUSU9OX1VSTDoKLQkJCQlzZXRQdWJsaWNhdGlvblVSTChQVUJMSUNBVElPTl9VUkxfRURFRkFVTFQpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19TRUNVUkVEX0RJU0NPVkVSWV9VUkw6Ci0JCQkJc2V0U2VjdXJlZERpc2NvdmVyeVVSTChTRUNVUkVEX0RJU0NPVkVSWV9VUkxfRURFRkFVTFQpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19TRUNVUkVEX1BVQkxJQ0FUSU9OX1VSTDoKLQkJCQlzZXRTZWN1cmVkUHVibGljYXRpb25VUkwoU0VDVVJFRF9QVUJMSUNBVElPTl9VUkxfRURFRkFVTFQpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19ERUZBVUxUX0xPR0lOOgotCQkJCXNldERlZmF1bHRMb2dpbihERUZBVUxUX0xPR0lOX0VERUZBVUxUKTsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fREVGQVVMVF9QQVNTV09SRDoKLQkJCQlzZXREZWZhdWx0UGFzc3dvcmQoREVGQVVMVF9QQVNTV09SRF9FREVGQVVMVCk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX1RBWE9OT01JRVM6Ci0JCQkJc2V0VGF4b25vbWllcygoVGF4b25vbWllcyludWxsKTsKLQkJCQlyZXR1cm47Ci0JCX0KLQkJZUR5bmFtaWNVbnNldChlRmVhdHVyZSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIGJvb2xlYW4gZUlzU2V0KEVTdHJ1Y3R1cmFsRmVhdHVyZSBlRmVhdHVyZSkgewotCQlzd2l0Y2ggKGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChlRmVhdHVyZSkpIHsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19OQU1FOgotCQkJCXJldHVybiBuYW1lICE9IG51bGwgJiYgIW5hbWUuaXNFbXB0eSgpOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX0RFU0NSSVBUSU9OOgotCQkJCXJldHVybiBkZXNjcmlwdGlvbiAhPSBudWxsICYmICFkZXNjcmlwdGlvbi5pc0VtcHR5KCk7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fSUQ6Ci0JCQkJcmV0dXJuIElEX0VERUZBVUxUID09IG51bGwgPyBpZCAhPSBudWxsIDogIUlEX0VERUZBVUxULmVxdWFscyhpZCk7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fTE9DQVRJT046Ci0JCQkJcmV0dXJuIExPQ0FUSU9OX0VERUZBVUxUID09IG51bGwgPyBsb2NhdGlvbiAhPSBudWxsIDogIUxPQ0FUSU9OX0VERUZBVUxULmVxdWFscyhsb2NhdGlvbik7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fUkVGOgotCQkJCXJldHVybiBSRUZfRURFRkFVTFQgPT0gbnVsbCA/IHJlZiAhPSBudWxsIDogIVJFRl9FREVGQVVMVC5lcXVhbHMocmVmKTsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19WRVJTSU9OOgotCQkJCXJldHVybiBWRVJTSU9OX0VERUZBVUxUID09IG51bGwgPyB2ZXJzaW9uICE9IG51bGwgOiAhVkVSU0lPTl9FREVGQVVMVC5lcXVhbHModmVyc2lvbik7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fRElTQ09WRVJZX1VSTDoKLQkJCQlyZXR1cm4gRElTQ09WRVJZX1VSTF9FREVGQVVMVCA9PSBudWxsID8gZGlzY292ZXJ5VVJMICE9IG51bGwgOiAhRElTQ09WRVJZX1VSTF9FREVGQVVMVC5lcXVhbHMoZGlzY292ZXJ5VVJMKTsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19QVUJMSUNBVElPTl9VUkw6Ci0JCQkJcmV0dXJuIFBVQkxJQ0FUSU9OX1VSTF9FREVGQVVMVCA9PSBudWxsID8gcHVibGljYXRpb25VUkwgIT0gbnVsbCA6ICFQVUJMSUNBVElPTl9VUkxfRURFRkFVTFQuZXF1YWxzKHB1YmxpY2F0aW9uVVJMKTsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19TRUNVUkVEX0RJU0NPVkVSWV9VUkw6Ci0JCQkJcmV0dXJuIFNFQ1VSRURfRElTQ09WRVJZX1VSTF9FREVGQVVMVCA9PSBudWxsID8gc2VjdXJlZERpc2NvdmVyeVVSTCAhPSBudWxsIDogIVNFQ1VSRURfRElTQ09WRVJZX1VSTF9FREVGQVVMVC5lcXVhbHMoc2VjdXJlZERpc2NvdmVyeVVSTCk7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fU0VDVVJFRF9QVUJMSUNBVElPTl9VUkw6Ci0JCQkJcmV0dXJuIFNFQ1VSRURfUFVCTElDQVRJT05fVVJMX0VERUZBVUxUID09IG51bGwgPyBzZWN1cmVkUHVibGljYXRpb25VUkwgIT0gbnVsbCA6ICFTRUNVUkVEX1BVQkxJQ0FUSU9OX1VSTF9FREVGQVVMVC5lcXVhbHMoc2VjdXJlZFB1YmxpY2F0aW9uVVJMKTsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5VRERJX1JFR0lTVFJZX19ERUZBVUxUX0xPR0lOOgotCQkJCXJldHVybiBERUZBVUxUX0xPR0lOX0VERUZBVUxUID09IG51bGwgPyBkZWZhdWx0TG9naW4gIT0gbnVsbCA6ICFERUZBVUxUX0xPR0lOX0VERUZBVUxULmVxdWFscyhkZWZhdWx0TG9naW4pOwotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUllfX0RFRkFVTFRfUEFTU1dPUkQ6Ci0JCQkJcmV0dXJuIERFRkFVTFRfUEFTU1dPUkRfRURFRkFVTFQgPT0gbnVsbCA/IGRlZmF1bHRQYXNzd29yZCAhPSBudWxsIDogIURFRkFVTFRfUEFTU1dPUkRfRURFRkFVTFQuZXF1YWxzKGRlZmF1bHRQYXNzd29yZCk7Ci0JCQljYXNlIFVERElSZWdpc3RyeVBhY2thZ2UuVURESV9SRUdJU1RSWV9fVEFYT05PTUlFUzoKLQkJCQlyZXR1cm4gdGF4b25vbWllcyAhPSBudWxsOwotCQl9Ci0JCXJldHVybiBlRHluYW1pY0lzU2V0KGVGZWF0dXJlKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7Ci0KLQkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7Ci0JCXJlc3VsdC5hcHBlbmQoIiAodmVyc2lvbjogIik7Ci0JCXJlc3VsdC5hcHBlbmQodmVyc2lvbik7Ci0JCXJlc3VsdC5hcHBlbmQoIiwgZGlzY292ZXJ5VVJMOiAiKTsKLQkJcmVzdWx0LmFwcGVuZChkaXNjb3ZlcnlVUkwpOwotCQlyZXN1bHQuYXBwZW5kKCIsIHB1YmxpY2F0aW9uVVJMOiAiKTsKLQkJcmVzdWx0LmFwcGVuZChwdWJsaWNhdGlvblVSTCk7Ci0JCXJlc3VsdC5hcHBlbmQoIiwgc2VjdXJlZERpc2NvdmVyeVVSTDogIik7Ci0JCXJlc3VsdC5hcHBlbmQoc2VjdXJlZERpc2NvdmVyeVVSTCk7Ci0JCXJlc3VsdC5hcHBlbmQoIiwgc2VjdXJlZFB1YmxpY2F0aW9uVVJMOiAiKTsKLQkJcmVzdWx0LmFwcGVuZChzZWN1cmVkUHVibGljYXRpb25VUkwpOwotCQlyZXN1bHQuYXBwZW5kKCIsIGRlZmF1bHRMb2dpbjogIik7Ci0JCXJlc3VsdC5hcHBlbmQoZGVmYXVsdExvZ2luKTsKLQkJcmVzdWx0LmFwcGVuZCgiLCBkZWZhdWx0UGFzc3dvcmQ6ICIpOwotCQlyZXN1bHQuYXBwZW5kKGRlZmF1bHRQYXNzd29yZCk7Ci0JCXJlc3VsdC5hcHBlbmQoJyknKTsKLQkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotCX0KLQotfSAvL1VERElSZWdpc3RyeUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS9pbXBsL1VERElSZWdpc3RyeVBhY2thZ2VJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvaW1wbC9VRERJUmVnaXN0cnlQYWNrYWdlSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Nzc1MjhiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS9pbXBsL1VERElSZWdpc3RyeVBhY2thZ2VJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NDIgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBVRERJUmVnaXN0cnlQYWNrYWdlSW1wbC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NTAgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5pbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FUGFja2FnZUltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuWE1MVHlwZVBhY2thZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuaW1wbC5YTUxUeXBlUGFja2FnZUltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5UGFja2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuaW1wbC5SZWdpc3RyeVBhY2thZ2VJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LlJUSW5kZXhQYWNrYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LmltcGwuUlRJbmRleFBhY2thZ2VJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teVBhY2thZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LmltcGwuVGF4b25vbXlQYWNrYWdlSW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LkRvY3VtZW50Um9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5UYXhvbm9taWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnlGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeVBhY2thZ2U7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPi4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgVURESVJlZ2lzdHJ5UGFja2FnZUltcGwgZXh0ZW5kcyBFUGFja2FnZUltcGwgaW1wbGVtZW50cyBVRERJUmVnaXN0cnlQYWNrYWdlIHsKLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcml2YXRlIEVDbGFzcyBkb2N1bWVudFJvb3RFQ2xhc3MgPSBudWxsOwotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJpdmF0ZSBFQ2xhc3MgdGF4b25vbWllc0VDbGFzcyA9IG51bGw7Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcml2YXRlIEVDbGFzcyB1ZGRpUmVnaXN0cnlFQ2xhc3MgPSBudWxsOwotCi0JLyoqCi0JICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4sIHJlZ2lzdGVyZWQgd2l0aAotCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkgRVBhY2thZ2UuUmVnaXN0cnl9IGJ5IHRoZSBwYWNrYWdlCi0JICogcGFja2FnZSBVUkkgdmFsdWUuCi0JICogPHA+Tm90ZTogdGhlIGNvcnJlY3Qgd2F5IHRvIGNyZWF0ZSB0aGUgcGFja2FnZSBpcyB2aWEgdGhlIHN0YXRpYwotCSAqIGZhY3RvcnkgbWV0aG9kIHtAbGluayAjaW5pdCBpbml0KCl9LCB3aGljaCBhbHNvIHBlcmZvcm1zCi0JICogaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UsIG9yIHJldHVybnMgdGhlIHJlZ2lzdGVyZWQgcGFja2FnZSwKLQkgKiBpZiBvbmUgYWxyZWFkeSBleGlzdHMuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5UGFja2FnZSNlTlNfVVJJCi0JICogQHNlZSAjaW5pdCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXByaXZhdGUgVURESVJlZ2lzdHJ5UGFja2FnZUltcGwoKSB7Ci0JCXN1cGVyKGVOU19VUkksIFVERElSZWdpc3RyeUZhY3RvcnkuZUlOU1RBTkNFKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzSW5pdGVkID0gZmFsc2U7Ci0KLQkvKioKLQkgKiBDcmVhdGVzLCByZWdpc3RlcnMsIGFuZCBpbml0aWFsaXplcyB0aGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoaXMKLQkgKiBtb2RlbCwgYW5kIGZvciBhbnkgb3RoZXJzIHVwb24gd2hpY2ggaXQgZGVwZW5kcy4gIFNpbXBsZQotCSAqIGRlcGVuZGVuY2llcyBhcmUgc2F0aXNmaWVkIGJ5IGNhbGxpbmcgdGhpcyBtZXRob2Qgb24gYWxsCi0JICogZGVwZW5kZW50IHBhY2thZ2VzIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLiAgVGhpcyBtZXRob2QgZHJpdmVzCi0JICogaW5pdGlhbGl6YXRpb24gZm9yIGludGVyZGVwZW5kZW50IHBhY2thZ2VzIGRpcmVjdGx5LCBpbiBwYXJhbGxlbAotCSAqIHdpdGggdGhpcyBwYWNrYWdlLCBpdHNlbGYuCi0JICogPHA+T2YgdGhpcyBwYWNrYWdlIGFuZCBpdHMgaW50ZXJkZXBlbmRlbmNpZXMsIGFsbCBwYWNrYWdlcyB3aGljaAotCSAqIGhhdmUgbm90IHlldCBiZWVuIHJlZ2lzdGVyZWQgYnkgdGhlaXIgVVJJIHZhbHVlcyBhcmUgZmlyc3QgY3JlYXRlZAotCSAqIGFuZCByZWdpc3RlcmVkLiAgVGhlIHBhY2thZ2VzIGFyZSB0aGVuIGluaXRpYWxpemVkIGluIHR3byBzdGVwczoKLQkgKiBtZXRhLW1vZGVsIG9iamVjdHMgZm9yIGFsbCBvZiB0aGUgcGFja2FnZXMgYXJlIGNyZWF0ZWQgYmVmb3JlIGFueQotCSAqIGFyZSBpbml0aWFsaXplZCwgc2luY2Ugb25lIHBhY2thZ2UncyBtZXRhLW1vZGVsIG9iamVjdHMgbWF5IHJlZmVyIHRvCi0JICogdGhvc2Ugb2YgYW5vdGhlci4KLQkgKiA8cD5JbnZvY2F0aW9uIG9mIHRoaXMgbWV0aG9kIHdpbGwgbm90IGFmZmVjdCBhbnkgcGFja2FnZXMgdGhhdCBoYXZlCi0JICogYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZU5TX1VSSQotCSAqIEBzZWUgI2NyZWF0ZVBhY2thZ2VDb250ZW50cygpCi0JICogQHNlZSAjaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBzdGF0aWMgVURESVJlZ2lzdHJ5UGFja2FnZSBpbml0KCkgewotCQlpZiAoaXNJbml0ZWQpIHJldHVybiAoVURESVJlZ2lzdHJ5UGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShVRERJUmVnaXN0cnlQYWNrYWdlLmVOU19VUkkpOwotCi0JCS8vIE9idGFpbiBvciBjcmVhdGUgYW5kIHJlZ2lzdGVyIHBhY2thZ2UKLQkJVURESVJlZ2lzdHJ5UGFja2FnZUltcGwgdGhlVURESVJlZ2lzdHJ5UGFja2FnZSA9IChVRERJUmVnaXN0cnlQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoZU5TX1VSSSkgaW5zdGFuY2VvZiBVRERJUmVnaXN0cnlQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKGVOU19VUkkpIDogbmV3IFVERElSZWdpc3RyeVBhY2thZ2VJbXBsKCkpOwotCi0JCWlzSW5pdGVkID0gdHJ1ZTsKLQotCQkvLyBJbml0aWFsaXplIHNpbXBsZSBkZXBlbmRlbmNpZXMKLQkJWE1MVHlwZVBhY2thZ2VJbXBsLmluaXQoKTsKLQotCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBpbnRlcmRlcGVuZGVuY2llcwotCQlSVEluZGV4UGFja2FnZUltcGwgdGhlUlRJbmRleFBhY2thZ2UgPSAoUlRJbmRleFBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShSVEluZGV4UGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFJUSW5kZXhQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFJUSW5kZXhQYWNrYWdlLmVOU19VUkkpIDogUlRJbmRleFBhY2thZ2VJbXBsLmVJTlNUQU5DRSk7Ci0JCVRheG9ub215UGFja2FnZUltcGwgdGhlVGF4b25vbXlQYWNrYWdlID0gKFRheG9ub215UGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFRheG9ub215UGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFRheG9ub215UGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShUYXhvbm9teVBhY2thZ2UuZU5TX1VSSSkgOiBUYXhvbm9teVBhY2thZ2VJbXBsLmVJTlNUQU5DRSk7Ci0JCVJlZ2lzdHJ5UGFja2FnZUltcGwgdGhlUmVnaXN0cnlQYWNrYWdlID0gKFJlZ2lzdHJ5UGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFJlZ2lzdHJ5UGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFJlZ2lzdHJ5UGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShSZWdpc3RyeVBhY2thZ2UuZU5TX1VSSSkgOiBSZWdpc3RyeVBhY2thZ2VJbXBsLmVJTlNUQU5DRSk7Ci0KLQkJLy8gQ3JlYXRlIHBhY2thZ2UgbWV0YS1kYXRhIG9iamVjdHMKLQkJdGhlVURESVJlZ2lzdHJ5UGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKLQkJdGhlUlRJbmRleFBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7Ci0JCXRoZVRheG9ub215UGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKLQkJdGhlUmVnaXN0cnlQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOwotCi0JCS8vIEluaXRpYWxpemUgY3JlYXRlZCBtZXRhLWRhdGEKLQkJdGhlVURESVJlZ2lzdHJ5UGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7Ci0JCXRoZVJUSW5kZXhQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKLQkJdGhlVGF4b25vbXlQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKLQkJdGhlUmVnaXN0cnlQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKLQotCQkvLyBNYXJrIG1ldGEtZGF0YSB0byBpbmRpY2F0ZSBpdCBjYW4ndCBiZSBjaGFuZ2VkCi0JCXRoZVVERElSZWdpc3RyeVBhY2thZ2UuZnJlZXplKCk7Ci0KLQkJcmV0dXJuIHRoZVVERElSZWdpc3RyeVBhY2thZ2U7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVDbGFzcyBnZXREb2N1bWVudFJvb3QoKSB7Ci0JCXJldHVybiBkb2N1bWVudFJvb3RFQ2xhc3M7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVBdHRyaWJ1dGUgZ2V0RG9jdW1lbnRSb290X01peGVkKCkgewotCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZG9jdW1lbnRSb290RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVSZWZlcmVuY2UgZ2V0RG9jdW1lbnRSb290X1hNTE5TUHJlZml4TWFwKCkgewotCQlyZXR1cm4gKEVSZWZlcmVuY2UpZG9jdW1lbnRSb290RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVSZWZlcmVuY2UgZ2V0RG9jdW1lbnRSb290X1hTSVNjaGVtYUxvY2F0aW9uKCkgewotCQlyZXR1cm4gKEVSZWZlcmVuY2UpZG9jdW1lbnRSb290RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVSZWZlcmVuY2UgZ2V0RG9jdW1lbnRSb290X1RheG9ub21pZXMoKSB7Ci0JCXJldHVybiAoRVJlZmVyZW5jZSlkb2N1bWVudFJvb3RFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRVJlZmVyZW5jZSBnZXREb2N1bWVudFJvb3RfVWRkaVJlZ2lzdHJ5KCkgewotCQlyZXR1cm4gKEVSZWZlcmVuY2UpZG9jdW1lbnRSb290RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVDbGFzcyBnZXRUYXhvbm9taWVzKCkgewotCQlyZXR1cm4gdGF4b25vbWllc0VDbGFzczsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRVJlZmVyZW5jZSBnZXRUYXhvbm9taWVzX1RheG9ub215KCkgewotCQlyZXR1cm4gKEVSZWZlcmVuY2UpdGF4b25vbWllc0VDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQ2xhc3MgZ2V0VURESVJlZ2lzdHJ5KCkgewotCQlyZXR1cm4gdWRkaVJlZ2lzdHJ5RUNsYXNzOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQXR0cmlidXRlIGdldFVERElSZWdpc3RyeV9WZXJzaW9uKCkgewotCQlyZXR1cm4gKEVBdHRyaWJ1dGUpdWRkaVJlZ2lzdHJ5RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVBdHRyaWJ1dGUgZ2V0VURESVJlZ2lzdHJ5X0Rpc2NvdmVyeVVSTCgpIHsKLQkJcmV0dXJuIChFQXR0cmlidXRlKXVkZGlSZWdpc3RyeUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQXR0cmlidXRlIGdldFVERElSZWdpc3RyeV9QdWJsaWNhdGlvblVSTCgpIHsKLQkJcmV0dXJuIChFQXR0cmlidXRlKXVkZGlSZWdpc3RyeUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQXR0cmlidXRlIGdldFVERElSZWdpc3RyeV9TZWN1cmVkRGlzY292ZXJ5VVJMKCkgewotCQlyZXR1cm4gKEVBdHRyaWJ1dGUpdWRkaVJlZ2lzdHJ5RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVBdHRyaWJ1dGUgZ2V0VURESVJlZ2lzdHJ5X1NlY3VyZWRQdWJsaWNhdGlvblVSTCgpIHsKLQkJcmV0dXJuIChFQXR0cmlidXRlKXVkZGlSZWdpc3RyeUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDQpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBFQXR0cmlidXRlIGdldFVERElSZWdpc3RyeV9EZWZhdWx0TG9naW4oKSB7Ci0JCXJldHVybiAoRUF0dHJpYnV0ZSl1ZGRpUmVnaXN0cnlFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg1KTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRVRERJUmVnaXN0cnlfRGVmYXVsdFBhc3N3b3JkKCkgewotCQlyZXR1cm4gKEVBdHRyaWJ1dGUpdWRkaVJlZ2lzdHJ5RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNik7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEVSZWZlcmVuY2UgZ2V0VURESVJlZ2lzdHJ5X1RheG9ub21pZXMoKSB7Ci0JCXJldHVybiAoRVJlZmVyZW5jZSl1ZGRpUmVnaXN0cnlFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg3KTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgVURESVJlZ2lzdHJ5RmFjdG9yeSBnZXRVRERJUmVnaXN0cnlGYWN0b3J5KCkgewotCQlyZXR1cm4gKFVERElSZWdpc3RyeUZhY3RvcnkpZ2V0RUZhY3RvcnlJbnN0YW5jZSgpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByaXZhdGUgYm9vbGVhbiBpc0NyZWF0ZWQgPSBmYWxzZTsKLQotCS8qKgotCSAqIENyZWF0ZXMgdGhlIG1ldGEtbW9kZWwgb2JqZWN0cyBmb3IgdGhlIHBhY2thZ2UuICBUaGlzIG1ldGhvZCBpcwotCSAqIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBjcmVhdGVQYWNrYWdlQ29udGVudHMoKSB7Ci0JCWlmIChpc0NyZWF0ZWQpIHJldHVybjsKLQkJaXNDcmVhdGVkID0gdHJ1ZTsKLQotCQkvLyBDcmVhdGUgY2xhc3NlcyBhbmQgdGhlaXIgZmVhdHVyZXMKLQkJZG9jdW1lbnRSb290RUNsYXNzID0gY3JlYXRlRUNsYXNzKERPQ1VNRU5UX1JPT1QpOwotCQljcmVhdGVFQXR0cmlidXRlKGRvY3VtZW50Um9vdEVDbGFzcywgRE9DVU1FTlRfUk9PVF9fTUlYRUQpOwotCQljcmVhdGVFUmVmZXJlbmNlKGRvY3VtZW50Um9vdEVDbGFzcywgRE9DVU1FTlRfUk9PVF9fWE1MTlNfUFJFRklYX01BUCk7Ci0JCWNyZWF0ZUVSZWZlcmVuY2UoZG9jdW1lbnRSb290RUNsYXNzLCBET0NVTUVOVF9ST09UX19YU0lfU0NIRU1BX0xPQ0FUSU9OKTsKLQkJY3JlYXRlRVJlZmVyZW5jZShkb2N1bWVudFJvb3RFQ2xhc3MsIERPQ1VNRU5UX1JPT1RfX1RBWE9OT01JRVMpOwotCQljcmVhdGVFUmVmZXJlbmNlKGRvY3VtZW50Um9vdEVDbGFzcywgRE9DVU1FTlRfUk9PVF9fVURESV9SRUdJU1RSWSk7Ci0KLQkJdGF4b25vbWllc0VDbGFzcyA9IGNyZWF0ZUVDbGFzcyhUQVhPTk9NSUVTKTsKLQkJY3JlYXRlRVJlZmVyZW5jZSh0YXhvbm9taWVzRUNsYXNzLCBUQVhPTk9NSUVTX19UQVhPTk9NWSk7Ci0KLQkJdWRkaVJlZ2lzdHJ5RUNsYXNzID0gY3JlYXRlRUNsYXNzKFVERElfUkVHSVNUUlkpOwotCQljcmVhdGVFQXR0cmlidXRlKHVkZGlSZWdpc3RyeUVDbGFzcywgVURESV9SRUdJU1RSWV9fVkVSU0lPTik7Ci0JCWNyZWF0ZUVBdHRyaWJ1dGUodWRkaVJlZ2lzdHJ5RUNsYXNzLCBVRERJX1JFR0lTVFJZX19ESVNDT1ZFUllfVVJMKTsKLQkJY3JlYXRlRUF0dHJpYnV0ZSh1ZGRpUmVnaXN0cnlFQ2xhc3MsIFVERElfUkVHSVNUUllfX1BVQkxJQ0FUSU9OX1VSTCk7Ci0JCWNyZWF0ZUVBdHRyaWJ1dGUodWRkaVJlZ2lzdHJ5RUNsYXNzLCBVRERJX1JFR0lTVFJZX19TRUNVUkVEX0RJU0NPVkVSWV9VUkwpOwotCQljcmVhdGVFQXR0cmlidXRlKHVkZGlSZWdpc3RyeUVDbGFzcywgVURESV9SRUdJU1RSWV9fU0VDVVJFRF9QVUJMSUNBVElPTl9VUkwpOwotCQljcmVhdGVFQXR0cmlidXRlKHVkZGlSZWdpc3RyeUVDbGFzcywgVURESV9SRUdJU1RSWV9fREVGQVVMVF9MT0dJTik7Ci0JCWNyZWF0ZUVBdHRyaWJ1dGUodWRkaVJlZ2lzdHJ5RUNsYXNzLCBVRERJX1JFR0lTVFJZX19ERUZBVUxUX1BBU1NXT1JEKTsKLQkJY3JlYXRlRVJlZmVyZW5jZSh1ZGRpUmVnaXN0cnlFQ2xhc3MsIFVERElfUkVHSVNUUllfX1RBWE9OT01JRVMpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByaXZhdGUgYm9vbGVhbiBpc0luaXRpYWxpemVkID0gZmFsc2U7Ci0KLQkvKioKLQkgKiBDb21wbGV0ZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UgYW5kIGl0cyBtZXRhLW1vZGVsLiAgVGhpcwotCSAqIG1ldGhvZCBpcyBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIHZvaWQgaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpIHsKLQkJaWYgKGlzSW5pdGlhbGl6ZWQpIHJldHVybjsKLQkJaXNJbml0aWFsaXplZCA9IHRydWU7Ci0KLQkJLy8gSW5pdGlhbGl6ZSBwYWNrYWdlCi0JCXNldE5hbWUoZU5BTUUpOwotCQlzZXROc1ByZWZpeChlTlNfUFJFRklYKTsKLQkJc2V0TnNVUkkoZU5TX1VSSSk7Ci0KLQkJLy8gT2J0YWluIG90aGVyIGRlcGVuZGVudCBwYWNrYWdlcwotCQlUYXhvbm9teVBhY2thZ2VJbXBsIHRoZVRheG9ub215UGFja2FnZSA9IChUYXhvbm9teVBhY2thZ2VJbXBsKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFRheG9ub215UGFja2FnZS5lTlNfVVJJKTsKLQkJUmVnaXN0cnlQYWNrYWdlSW1wbCB0aGVSZWdpc3RyeVBhY2thZ2UgPSAoUmVnaXN0cnlQYWNrYWdlSW1wbClFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShSZWdpc3RyeVBhY2thZ2UuZU5TX1VSSSk7Ci0JCVhNTFR5cGVQYWNrYWdlSW1wbCB0aGVYTUxUeXBlUGFja2FnZSA9IChYTUxUeXBlUGFja2FnZUltcGwpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoWE1MVHlwZVBhY2thZ2UuZU5TX1VSSSk7Ci0KLQkJLy8gQWRkIHN1cGVydHlwZXMgdG8gY2xhc3NlcwotCQl1ZGRpUmVnaXN0cnlFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlUmVnaXN0cnlQYWNrYWdlLmdldFJlZ2lzdHJ5KCkpOwotCi0JCS8vIEluaXRpYWxpemUgY2xhc3NlcyBhbmQgZmVhdHVyZXM7IGFkZCBvcGVyYXRpb25zIGFuZCBwYXJhbWV0ZXJzCi0JCWluaXRFQ2xhc3MoZG9jdW1lbnRSb290RUNsYXNzLCBEb2N1bWVudFJvb3QuY2xhc3MsICJEb2N1bWVudFJvb3QiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7Ci0JCWluaXRFQXR0cmlidXRlKGdldERvY3VtZW50Um9vdF9NaXhlZCgpLCBlY29yZVBhY2thZ2UuZ2V0RUZlYXR1cmVNYXBFbnRyeSgpLCAibWl4ZWQiLCBudWxsLCAwLCAtMSwgbnVsbCwgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFUmVmZXJlbmNlKGdldERvY3VtZW50Um9vdF9YTUxOU1ByZWZpeE1hcCgpLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZ1RvU3RyaW5nTWFwRW50cnkoKSwgbnVsbCwgInhNTE5TUHJlZml4TWFwIiwgbnVsbCwgMCwgLTEsIG51bGwsIElTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFUmVmZXJlbmNlKGdldERvY3VtZW50Um9vdF9YU0lTY2hlbWFMb2NhdGlvbigpLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZ1RvU3RyaW5nTWFwRW50cnkoKSwgbnVsbCwgInhTSVNjaGVtYUxvY2F0aW9uIiwgbnVsbCwgMCwgLTEsIG51bGwsIElTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFUmVmZXJlbmNlKGdldERvY3VtZW50Um9vdF9UYXhvbm9taWVzKCksIHRoaXMuZ2V0VGF4b25vbWllcygpLCBudWxsLCAidGF4b25vbWllcyIsIG51bGwsIDAsIC0yLCBudWxsLCBJU19UUkFOU0lFTlQsIElTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsIElTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RVJlZmVyZW5jZShnZXREb2N1bWVudFJvb3RfVWRkaVJlZ2lzdHJ5KCksIHRoaXMuZ2V0VURESVJlZ2lzdHJ5KCksIG51bGwsICJ1ZGRpUmVnaXN0cnkiLCBudWxsLCAwLCAtMiwgbnVsbCwgSVNfVFJBTlNJRU5ULCBJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCBJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQotCQlpbml0RUNsYXNzKHRheG9ub21pZXNFQ2xhc3MsIFRheG9ub21pZXMuY2xhc3MsICJUYXhvbm9taWVzIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOwotCQlpbml0RVJlZmVyZW5jZShnZXRUYXhvbm9taWVzX1RheG9ub215KCksIHRoZVRheG9ub215UGFja2FnZS5nZXRUYXhvbm9teSgpLCBudWxsLCAidGF4b25vbXkiLCBudWxsLCAwLCAtMSwgVGF4b25vbWllcy5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQotCQlpbml0RUNsYXNzKHVkZGlSZWdpc3RyeUVDbGFzcywgVURESVJlZ2lzdHJ5LmNsYXNzLCAiVURESVJlZ2lzdHJ5IiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOwotCQlpbml0RUF0dHJpYnV0ZShnZXRVRERJUmVnaXN0cnlfVmVyc2lvbigpLCB0aGVYTUxUeXBlUGFja2FnZS5nZXRTdHJpbmcoKSwgInZlcnNpb24iLCBudWxsLCAxLCAxLCBVRERJUmVnaXN0cnkuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RUF0dHJpYnV0ZShnZXRVRERJUmVnaXN0cnlfRGlzY292ZXJ5VVJMKCksIHRoZVhNTFR5cGVQYWNrYWdlLmdldEFueVVSSSgpLCAiZGlzY292ZXJ5VVJMIiwgbnVsbCwgMSwgMSwgVURESVJlZ2lzdHJ5LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVBdHRyaWJ1dGUoZ2V0VURESVJlZ2lzdHJ5X1B1YmxpY2F0aW9uVVJMKCksIHRoZVhNTFR5cGVQYWNrYWdlLmdldEFueVVSSSgpLCAicHVibGljYXRpb25VUkwiLCBudWxsLCAxLCAxLCBVRERJUmVnaXN0cnkuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RUF0dHJpYnV0ZShnZXRVRERJUmVnaXN0cnlfU2VjdXJlZERpc2NvdmVyeVVSTCgpLCB0aGVYTUxUeXBlUGFja2FnZS5nZXRBbnlVUkkoKSwgInNlY3VyZWREaXNjb3ZlcnlVUkwiLCBudWxsLCAxLCAxLCBVRERJUmVnaXN0cnkuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RUF0dHJpYnV0ZShnZXRVRERJUmVnaXN0cnlfU2VjdXJlZFB1YmxpY2F0aW9uVVJMKCksIHRoZVhNTFR5cGVQYWNrYWdlLmdldEFueVVSSSgpLCAic2VjdXJlZFB1YmxpY2F0aW9uVVJMIiwgbnVsbCwgMSwgMSwgVURESVJlZ2lzdHJ5LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKLQkJaW5pdEVBdHRyaWJ1dGUoZ2V0VURESVJlZ2lzdHJ5X0RlZmF1bHRMb2dpbigpLCB0aGVYTUxUeXBlUGFja2FnZS5nZXRTdHJpbmcoKSwgImRlZmF1bHRMb2dpbiIsIG51bGwsIDEsIDEsIFVERElSZWdpc3RyeS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0JCWluaXRFQXR0cmlidXRlKGdldFVERElSZWdpc3RyeV9EZWZhdWx0UGFzc3dvcmQoKSwgdGhlWE1MVHlwZVBhY2thZ2UuZ2V0U3RyaW5nKCksICJkZWZhdWx0UGFzc3dvcmQiLCBudWxsLCAxLCAxLCBVRERJUmVnaXN0cnkuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOwotCQlpbml0RVJlZmVyZW5jZShnZXRVRERJUmVnaXN0cnlfVGF4b25vbWllcygpLCB0aGlzLmdldFRheG9ub21pZXMoKSwgbnVsbCwgInRheG9ub21pZXMiLCBudWxsLCAwLCAxLCBVRERJUmVnaXN0cnkuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7Ci0KLQkJLy8gQ3JlYXRlIHJlc291cmNlCi0JCWNyZWF0ZVJlc291cmNlKGVOU19VUkkpOwotCi0JCS8vIENyZWF0ZSBhbm5vdGF0aW9ucwotCQkvLyBodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEKLQkJY3JlYXRlRXh0ZW5kZWRNZXRhRGF0YUFubm90YXRpb25zKCk7Ci0JfQotCi0JLyoqCi0JICogSW5pdGlhbGl6ZXMgdGhlIGFubm90YXRpb25zIGZvciA8Yj5odHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGE8L2I+LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUV4dGVuZGVkTWV0YURhdGFBbm5vdGF0aW9ucygpIHsKLQkJU3RyaW5nIHNvdXJjZSA9ICJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiOwkJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGRvY3VtZW50Um9vdEVDbGFzcywgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgIm5hbWUiLCAiIiwKLQkJCSAia2luZCIsICJtaXhlZCIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXREb2N1bWVudFJvb3RfTWl4ZWQoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiZWxlbWVudFdpbGRjYXJkIiwKLQkJCSAibmFtZSIsICI6bWl4ZWQiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0RG9jdW1lbnRSb290X1hNTE5TUHJlZml4TWFwKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImF0dHJpYnV0ZSIsCi0JCQkgIm5hbWUiLCAieG1sbnM6cHJlZml4IgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldERvY3VtZW50Um9vdF9YU0lTY2hlbWFMb2NhdGlvbigpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJhdHRyaWJ1dGUiLAotCQkJICJuYW1lIiwgInhzaTpzY2hlbWFMb2NhdGlvbiIKLQkJICAgfSk7CQkKLQkJYWRkQW5ub3RhdGlvbgotCQkgIChnZXREb2N1bWVudFJvb3RfVGF4b25vbWllcygpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJlbGVtZW50IiwKLQkJCSAibmFtZSIsICJ0YXhvbm9taWVzIiwKLQkJCSAibmFtZXNwYWNlIiwgIiMjdGFyZ2V0TmFtZXNwYWNlIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldERvY3VtZW50Um9vdF9VZGRpUmVnaXN0cnkoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiZWxlbWVudCIsCi0JCQkgIm5hbWUiLCAidWRkaVJlZ2lzdHJ5IiwKLQkJCSAibmFtZXNwYWNlIiwgIiMjdGFyZ2V0TmFtZXNwYWNlIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKHRheG9ub21pZXNFQ2xhc3MsIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJuYW1lIiwgIlRheG9ub21pZXMiLAotCQkJICJraW5kIiwgImVsZW1lbnRPbmx5IgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldFRheG9ub21pZXNfVGF4b25vbXkoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiZWxlbWVudCIsCi0JCQkgIm5hbWUiLCAidGF4b25vbXkiLAotCQkJICJuYW1lc3BhY2UiLCAiaHR0cDovL2VjbGlwc2Uub3JnL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdGF4b25vbXkiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAodWRkaVJlZ2lzdHJ5RUNsYXNzLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAibmFtZSIsICJVRERJUmVnaXN0cnkiLAotCQkJICJraW5kIiwgImVsZW1lbnRPbmx5IgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldFVERElSZWdpc3RyeV9WZXJzaW9uKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImVsZW1lbnQiLAotCQkJICJuYW1lIiwgInZlcnNpb24iCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0VURESVJlZ2lzdHJ5X0Rpc2NvdmVyeVVSTCgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJlbGVtZW50IiwKLQkJCSAibmFtZSIsICJkaXNjb3ZlcnlVUkwiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0VURESVJlZ2lzdHJ5X1B1YmxpY2F0aW9uVVJMKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImVsZW1lbnQiLAotCQkJICJuYW1lIiwgInB1YmxpY2F0aW9uVVJMIgotCQkgICB9KTsJCQotCQlhZGRBbm5vdGF0aW9uCi0JCSAgKGdldFVERElSZWdpc3RyeV9TZWN1cmVkRGlzY292ZXJ5VVJMKCksIAotCQkgICBzb3VyY2UsIAotCQkgICBuZXcgU3RyaW5nW10gewotCQkJICJraW5kIiwgImVsZW1lbnQiLAotCQkJICJuYW1lIiwgInNlY3VyZWREaXNjb3ZlcnlVUkwiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0VURESVJlZ2lzdHJ5X1NlY3VyZWRQdWJsaWNhdGlvblVSTCgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJlbGVtZW50IiwKLQkJCSAibmFtZSIsICJzZWN1cmVkUHVibGljYXRpb25VUkwiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0VURESVJlZ2lzdHJ5X0RlZmF1bHRMb2dpbigpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJlbGVtZW50IiwKLQkJCSAibmFtZSIsICJkZWZhdWx0TG9naW4iCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0VURESVJlZ2lzdHJ5X0RlZmF1bHRQYXNzd29yZCgpLCAKLQkJICAgc291cmNlLCAKLQkJICAgbmV3IFN0cmluZ1tdIHsKLQkJCSAia2luZCIsICJlbGVtZW50IiwKLQkJCSAibmFtZSIsICJkZWZhdWx0UGFzc3dvcmQiCi0JCSAgIH0pOwkJCi0JCWFkZEFubm90YXRpb24KLQkJICAoZ2V0VURESVJlZ2lzdHJ5X1RheG9ub21pZXMoKSwgCi0JCSAgIHNvdXJjZSwgCi0JCSAgIG5ldyBTdHJpbmdbXSB7Ci0JCQkgImtpbmQiLCAiZWxlbWVudCIsCi0JCQkgIm5hbWUiLCAidGF4b25vbWllcyIKLQkJICAgfSk7Ci0JfQotCi19IC8vVURESVJlZ2lzdHJ5UGFja2FnZUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS91dGlsL1VERElSZWdpc3RyeUFkYXB0ZXJGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvdXRpbC9VRERJUmVnaXN0cnlBZGFwdGVyRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzhlMGM2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS91dGlsL1VERElSZWdpc3RyeUFkYXB0ZXJGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzMgKzAsMCBAQAotLyoqCi0gKiA8Y29weXJpZ2h0PgotICogPC9jb3B5cmlnaHQ+Ci0gKgotICogJElkOiBVRERJUmVnaXN0cnlBZGFwdGVyRmFjdG9yeS5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NTAgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS51dGlsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuKjsKLQotLyoqCi0gKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotICogVGhlIDxiPkFkYXB0ZXIgRmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KLSAqIEl0IHByb3ZpZGVzIGFuIGFkYXB0ZXIgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeVBhY2thZ2UKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFVERElSZWdpc3RyeUFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgQWRhcHRlckZhY3RvcnlJbXBsIHsKLQkvKioKLQkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBVRERJUmVnaXN0cnlQYWNrYWdlIG1vZGVsUGFja2FnZTsKLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGFkYXB0ZXIgZmFjdG9yeS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgVURESVJlZ2lzdHJ5QWRhcHRlckZhY3RvcnkoKSB7Ci0JCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgewotCQkJbW9kZWxQYWNrYWdlID0gVURESVJlZ2lzdHJ5UGFja2FnZS5lSU5TVEFOQ0U7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIG9iamVjdCBpcyBlaXRoZXIgdGhlIG1vZGVsJ3MgcGFja2FnZSBvciBpcyBhbiBpbnN0YW5jZSBvYmplY3Qgb2YgdGhlIG1vZGVsLgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3Qgb2JqZWN0KSB7Ci0JCWlmIChvYmplY3QgPT0gbW9kZWxQYWNrYWdlKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgRU9iamVjdCkgewotCQkJcmV0dXJuICgoRU9iamVjdClvYmplY3QpLmVDbGFzcygpLmdldEVQYWNrYWdlKCkgPT0gbW9kZWxQYWNrYWdlOwotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkvKioKLQkgKiBUaGUgc3dpdGNoIHRoZSBkZWxlZ2F0ZXMgdG8gdGhlIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kcy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgVURESVJlZ2lzdHJ5U3dpdGNoIG1vZGVsU3dpdGNoID0KLQkJbmV3IFVERElSZWdpc3RyeVN3aXRjaCgpIHsKLQkJCXB1YmxpYyBPYmplY3QgY2FzZURvY3VtZW50Um9vdChEb2N1bWVudFJvb3Qgb2JqZWN0KSB7Ci0JCQkJcmV0dXJuIGNyZWF0ZURvY3VtZW50Um9vdEFkYXB0ZXIoKTsKLQkJCX0KLQkJCXB1YmxpYyBPYmplY3QgY2FzZVRheG9ub21pZXMoVGF4b25vbWllcyBvYmplY3QpIHsKLQkJCQlyZXR1cm4gY3JlYXRlVGF4b25vbWllc0FkYXB0ZXIoKTsKLQkJCX0KLQkJCXB1YmxpYyBPYmplY3QgY2FzZVVERElSZWdpc3RyeShVRERJUmVnaXN0cnkgb2JqZWN0KSB7Ci0JCQkJcmV0dXJuIGNyZWF0ZVVERElSZWdpc3RyeUFkYXB0ZXIoKTsKLQkJCX0KLQkJCXB1YmxpYyBPYmplY3QgY2FzZVJlZ2lzdHJ5KFJlZ2lzdHJ5IG9iamVjdCkgewotCQkJCXJldHVybiBjcmVhdGVSZWdpc3RyeUFkYXB0ZXIoKTsKLQkJCX0KLQkJCXB1YmxpYyBPYmplY3QgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKLQkJCQlyZXR1cm4gY3JlYXRlRU9iamVjdEFkYXB0ZXIoKTsKLQkJCX0KLQkJfTsKLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdGFyZ2V0IHRoZSBvYmplY3QgdG8gYWRhcHQuCi0JICogQHJldHVybiB0aGUgYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUFkYXB0ZXIoTm90aWZpZXIgdGFyZ2V0KSB7Ci0JCXJldHVybiAoQWRhcHRlciltb2RlbFN3aXRjaC5kb1N3aXRjaCgoRU9iamVjdCl0YXJnZXQpOwotCX0KLQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5Eb2N1bWVudFJvb3QgPGVtPkRvY3VtZW50IFJvb3Q8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuRG9jdW1lbnRSb290Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZURvY3VtZW50Um9vdEFkYXB0ZXIoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVGF4b25vbWllcyA8ZW0+VGF4b25vbWllczwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0JICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5UYXhvbm9taWVzCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVRheG9ub21pZXNBZGFwdGVyKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeSA8ZW0+VURESVJlZ2lzdHJ5PC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLQkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgQWRhcHRlciBjcmVhdGVVRERJUmVnaXN0cnlBZGFwdGVyKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnkgPGVtPlJlZ2lzdHJ5PC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLQkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEFkYXB0ZXIgY3JlYXRlUmVnaXN0cnlBZGFwdGVyKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIHRoZSBkZWZhdWx0IGNhc2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsLgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgQWRhcHRlciBjcmVhdGVFT2JqZWN0QWRhcHRlcigpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi19IC8vVURESVJlZ2lzdHJ5QWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS91dGlsL1VERElSZWdpc3RyeVJlc291cmNlRmFjdG9yeUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS91dGlsL1VERElSZWdpc3RyeVJlc291cmNlRmFjdG9yeUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTEzMTVhZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvdXRpbC9VRERJUmVnaXN0cnlSZXNvdXJjZUZhY3RvcnlJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IFVERElSZWdpc3RyeVJlc291cmNlRmFjdG9yeUltcGwuamF2YSx2IDEuMiAyMDA1LzEyLzAzIDA0OjA2OjUwIGNicmVhbGV5IEV4cCAkCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkudXRpbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FeHRlbmRlZE1ldGFEYXRhOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5YTUxSZXNvdXJjZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuaW1wbC5YTUxSZXNvdXJjZUZhY3RvcnlJbXBsOwotCi0vKioKLSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0gKiBUaGUgPGI+UmVzb3VyY2UgRmFjdG9yeTwvYj4gYXNzb2NpYXRlZCB3aXRoIHRoZSBwYWNrYWdlLgotICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LnV0aWwuVURESVJlZ2lzdHJ5UmVzb3VyY2VJbXBsCi0gKiBAZ2VuZXJhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBVRERJUmVnaXN0cnlSZXNvdXJjZUZhY3RvcnlJbXBsIGV4dGVuZHMgWE1MUmVzb3VyY2VGYWN0b3J5SW1wbCB7Ci0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIEV4dGVuZGVkTWV0YURhdGEgZXh0ZW5kZWRNZXRhRGF0YTsKLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHJlc291cmNlIGZhY3RvcnkuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFVERElSZWdpc3RyeVJlc291cmNlRmFjdG9yeUltcGwoKSB7Ci0JCXN1cGVyKCk7Ci0JCWV4dGVuZGVkTWV0YURhdGEgPSBFeHRlbmRlZE1ldGFEYXRhLklOU1RBTkNFOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHJlc291cmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBSZXNvdXJjZSBjcmVhdGVSZXNvdXJjZShVUkkgdXJpKSB7Ci0JCVhNTFJlc291cmNlIHJlc3VsdCA9IG5ldyBVRERJUmVnaXN0cnlSZXNvdXJjZUltcGwodXJpKTsKLQkJcmVzdWx0LmdldERlZmF1bHRTYXZlT3B0aW9ucygpLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fRVhURU5ERURfTUVUQV9EQVRBLCBleHRlbmRlZE1ldGFEYXRhKTsKLQkJcmVzdWx0LmdldERlZmF1bHRMb2FkT3B0aW9ucygpLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fRVhURU5ERURfTUVUQV9EQVRBLCBleHRlbmRlZE1ldGFEYXRhKTsKLQotCQlyZXN1bHQuZ2V0RGVmYXVsdFNhdmVPcHRpb25zKCkucHV0KFhNTFJlc291cmNlLk9QVElPTl9TQ0hFTUFfTE9DQVRJT04sIEJvb2xlYW4uVFJVRSk7Ci0JCXJlc3VsdC5nZXREZWZhdWx0U2F2ZU9wdGlvbnMoKS5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX1VTRV9FTkNPREVEX0FUVFJJQlVURV9TVFlMRSwgQm9vbGVhbi5UUlVFKTsKLQotCQlyZXN1bHQuZ2V0RGVmYXVsdExvYWRPcHRpb25zKCkucHV0KFhNTFJlc291cmNlLk9QVElPTl9VU0VfTEVYSUNBTF9IQU5ETEVSLCBCb29sZWFuLlRSVUUpOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotfSAvL1VERElSZWdpc3RyeVJlc291cmNlRmFjdG9yeUltcGwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9kZWwvdjEwL3VkZGlyZWdpc3RyeS91dGlsL1VERElSZWdpc3RyeVJlc291cmNlSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L3V0aWwvVURESVJlZ2lzdHJ5UmVzb3VyY2VJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkMDI5YzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L3V0aWwvVURESVJlZ2lzdHJ5UmVzb3VyY2VJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IFVERElSZWdpc3RyeVJlc291cmNlSW1wbC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NTAgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS51dGlsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuaW1wbC5YTUxSZXNvdXJjZUltcGw7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5SZXNvdXJjZSA8L2I+IGFzc29jaWF0ZWQgd2l0aCB0aGUgcGFja2FnZS4KLSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS51dGlsLlVERElSZWdpc3RyeVJlc291cmNlRmFjdG9yeUltcGwKLSAqIEBnZW5lcmF0ZWQKLSAqLwotcHVibGljIGNsYXNzIFVERElSZWdpc3RyeVJlc291cmNlSW1wbCBleHRlbmRzIFhNTFJlc291cmNlSW1wbCB7Ci0JLyoqCi0JICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgcmVzb3VyY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gdXJpIHRoZSBVUkkgb2YgdGhlIG5ldyByZXNvdXJjZS4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFVERElSZWdpc3RyeVJlc291cmNlSW1wbChVUkkgdXJpKSB7Ci0JCXN1cGVyKHVyaSk7Ci0JfQotCi19IC8vVURESVJlZ2lzdHJ5UmVzb3VyY2VGYWN0b3J5SW1wbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb2RlbC92MTAvdWRkaXJlZ2lzdHJ5L3V0aWwvVURESVJlZ2lzdHJ5U3dpdGNoLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvdXRpbC9VRERJUmVnaXN0cnlTd2l0Y2guamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQzZDhhZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL21vZGVsL3YxMC91ZGRpcmVnaXN0cnkvdXRpbC9VRERJUmVnaXN0cnlTd2l0Y2guamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5MCArMCwwIEBACi0vKioKLSAqIDxjb3B5cmlnaHQ+Ci0gKiA8L2NvcHlyaWdodD4KLSAqCi0gKiAkSWQ6IFVERElSZWdpc3RyeVN3aXRjaC5qYXZhLHYgMS4yIDIwMDUvMTIvMDMgMDQ6MDY6NTAgY2JyZWFsZXkgRXhwICQKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5Lio7Ci0KLS8qKgotICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAqIFRoZSA8Yj5Td2l0Y2g8L2I+IGZvciB0aGUgbW9kZWwncyBpbmhlcml0YW5jZSBoaWVyYXJjaHkuCi0gKiBJdCBzdXBwb3J0cyB0aGUgY2FsbCB7QGxpbmsgI2RvU3dpdGNoKEVPYmplY3QpIGRvU3dpdGNoKG9iamVjdCl9Ci0gKiB0byBpbnZva2UgdGhlIDxjb2RlPmNhc2VYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwsCi0gKiBzdGFydGluZyB3aXRoIHRoZSBhY3R1YWwgY2xhc3Mgb2YgdGhlIG9iamVjdAotICogYW5kIHByb2NlZWRpbmcgdXAgdGhlIGluaGVyaXRhbmNlIGhpZXJhcmNoeQotICogdW50aWwgYSBub24tbnVsbCByZXN1bHQgaXMgcmV0dXJuZWQsCi0gKiB3aGljaCBpcyB0aGUgcmVzdWx0IG9mIHRoZSBzd2l0Y2guCi0gKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5UGFja2FnZQotICogQGdlbmVyYXRlZAotICovCi1wdWJsaWMgY2xhc3MgVURESVJlZ2lzdHJ5U3dpdGNoIHsKLQkvKioKLQkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIFVERElSZWdpc3RyeVBhY2thZ2UgbW9kZWxQYWNrYWdlOwotCi0JLyoqCi0JICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgc3dpdGNoLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBVRERJUmVnaXN0cnlTd2l0Y2goKSB7Ci0JCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgewotCQkJbW9kZWxQYWNrYWdlID0gVURESVJlZ2lzdHJ5UGFja2FnZS5lSU5TVEFOQ0U7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBPYmplY3QgZG9Td2l0Y2goRU9iamVjdCB0aGVFT2JqZWN0KSB7Ci0JCXJldHVybiBkb1N3aXRjaCh0aGVFT2JqZWN0LmVDbGFzcygpLCB0aGVFT2JqZWN0KTsKLQl9Ci0KLQkvKioKLQkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXByb3RlY3RlZCBPYmplY3QgZG9Td2l0Y2goRUNsYXNzIHRoZUVDbGFzcywgRU9iamVjdCB0aGVFT2JqZWN0KSB7Ci0JCWlmICh0aGVFQ2xhc3MuZUNvbnRhaW5lcigpID09IG1vZGVsUGFja2FnZSkgewotCQkJcmV0dXJuIGRvU3dpdGNoKHRoZUVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSwgdGhlRU9iamVjdCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlMaXN0IGVTdXBlclR5cGVzID0gdGhlRUNsYXNzLmdldEVTdXBlclR5cGVzKCk7Ci0JCQlyZXR1cm4KLQkJCQllU3VwZXJUeXBlcy5pc0VtcHR5KCkgPwotCQkJCQlkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KSA6Ci0JCQkJCWRvU3dpdGNoKChFQ2xhc3MpZVN1cGVyVHlwZXMuZ2V0KDApLCB0aGVFT2JqZWN0KTsKLQkJfQotCX0KLQotCS8qKgotCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHJvdGVjdGVkIE9iamVjdCBkb1N3aXRjaChpbnQgY2xhc3NpZmllcklELCBFT2JqZWN0IHRoZUVPYmplY3QpIHsKLQkJc3dpdGNoIChjbGFzc2lmaWVySUQpIHsKLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5ET0NVTUVOVF9ST09UOiB7Ci0JCQkJRG9jdW1lbnRSb290IGRvY3VtZW50Um9vdCA9IChEb2N1bWVudFJvb3QpdGhlRU9iamVjdDsKLQkJCQlPYmplY3QgcmVzdWx0ID0gY2FzZURvY3VtZW50Um9vdChkb2N1bWVudFJvb3QpOwotCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0JCQkJcmV0dXJuIHJlc3VsdDsKLQkJCX0KLQkJCWNhc2UgVURESVJlZ2lzdHJ5UGFja2FnZS5UQVhPTk9NSUVTOiB7Ci0JCQkJVGF4b25vbWllcyB0YXhvbm9taWVzID0gKFRheG9ub21pZXMpdGhlRU9iamVjdDsKLQkJCQlPYmplY3QgcmVzdWx0ID0gY2FzZVRheG9ub21pZXModGF4b25vbWllcyk7Ci0JCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKLQkJCQlyZXR1cm4gcmVzdWx0OwotCQkJfQotCQkJY2FzZSBVRERJUmVnaXN0cnlQYWNrYWdlLlVERElfUkVHSVNUUlk6IHsKLQkJCQlVRERJUmVnaXN0cnkgdWRkaVJlZ2lzdHJ5ID0gKFVERElSZWdpc3RyeSl0aGVFT2JqZWN0OwotCQkJCU9iamVjdCByZXN1bHQgPSBjYXNlVURESVJlZ2lzdHJ5KHVkZGlSZWdpc3RyeSk7Ci0JCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlUmVnaXN0cnkodWRkaVJlZ2lzdHJ5KTsKLQkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwotCQkJCXJldHVybiByZXN1bHQ7Ci0JCQl9Ci0JCQlkZWZhdWx0OiByZXR1cm4gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RG9jdW1lbnQgUm9vdDwvZW0+Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Eb2N1bWVudCBSb290PC9lbT4nLgotCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGNhc2VEb2N1bWVudFJvb3QoRG9jdW1lbnRSb290IG9iamVjdCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VGF4b25vbWllczwvZW0+Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgotCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5UYXhvbm9taWVzPC9lbT4nLgotCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGNhc2VUYXhvbm9taWVzKFRheG9ub21pZXMgb2JqZWN0KSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXR0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5VRERJUmVnaXN0cnk8L2VtPicuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLQkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLQkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VURESVJlZ2lzdHJ5PC9lbT4nLgotCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGNhc2VVRERJUmVnaXN0cnkoVURESVJlZ2lzdHJ5IG9iamVjdCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UmVnaXN0cnk8L2VtPicuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLQkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLQkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UmVnaXN0cnk8L2VtPicuCi0JICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBPYmplY3QgY2FzZVJlZ2lzdHJ5KFJlZ2lzdHJ5IG9iamVjdCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOwotCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLCBidXQgdGhpcyBpcyB0aGUgbGFzdCBjYXNlIGFueXdheS4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLQkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0dGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KLQkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIE9iamVjdCBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLX0gLy9VRERJUmVnaXN0cnlTd2l0Y2gKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvbW9uaXRvci9HZXRNb25pdG9yQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb25pdG9yL0dldE1vbml0b3JDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjZGVlNjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9tb25pdG9yL0dldE1vbml0b3JDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb25pdG9yOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuUG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBBZGRyZXNzOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBBZGRyZXNzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LlN0YXR1c0V4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MuZGF0YW1vZGVsLkFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9uaXRvcldvcmtpbmdDb3B5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuTW9uaXRvckNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLnV0aWwuU29ja2V0VXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuV3N0V1NQbHVnaW5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV2ViU2VydmljZXNQYXJzZXI7Ci0KLXB1YmxpYyBjbGFzcyBHZXRNb25pdG9yQ29tbWFuZCBleHRlbmRzIEFic3RyYWN0RGF0YU1vZGVsT3BlcmF0aW9uIHsKLQlwcml2YXRlIGJvb2xlYW4gbW9uaXRvclNlcnZpY2U7Ci0KLQlwcml2YXRlIGJvb2xlYW4gY3JlYXRlOwotCi0JcHJpdmF0ZSBXZWJTZXJ2aWNlc1BhcnNlciB3ZWJTZXJ2aWNlc1BhcnNlcjsKLQotCXByaXZhdGUgU3RyaW5nIHdzZGxVUkk7Ci0KLQlwcml2YXRlIExpc3QgZW5kcG9pbnRzOwotCi0JcHVibGljIEdldE1vbml0b3JDb21tYW5kKCkgewotCQltb25pdG9yU2VydmljZSA9IHRydWU7Ci0JCWNyZWF0ZSA9IHRydWU7Ci0JfQotCi0JcHVibGljIElTdGF0dXMgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlKSB7Ci0JCUlFbnZpcm9ubWVudCBlbnYgPSBnZXRFbnZpcm9ubWVudCgpOwotCi0JCWVuZHBvaW50cyA9IG5ldyBWZWN0b3IoKTsKLQkJaWYgKG1vbml0b3JTZXJ2aWNlICYmIHdlYlNlcnZpY2VzUGFyc2VyICE9IG51bGwgJiYgd3NkbFVSSSAhPSBudWxsICYmIHdzZGxVUkkubGVuZ3RoKCkgPiAwKSB7Ci0JCQlEZWZpbml0aW9uIGRlZmluaXRpb24gPSB3ZWJTZXJ2aWNlc1BhcnNlci5nZXRXU0RMRGVmaW5pdGlvbih3c2RsVVJJKTsKLQkJCWlmIChkZWZpbml0aW9uICE9IG51bGwpIHsKLQkJCQlNYXAgc2VydmljZXMgPSBkZWZpbml0aW9uLmdldFNlcnZpY2VzKCk7Ci0JCQkJZm9yIChJdGVyYXRvciBzZXJ2aWNlc0l0ID0gc2VydmljZXMudmFsdWVzKCkuaXRlcmF0b3IoKTsgc2VydmljZXNJdC5oYXNOZXh0KCk7KSB7Ci0JCQkJCVNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKSBzZXJ2aWNlc0l0Lm5leHQoKTsKLQkJCQkJTWFwIHBvcnRzID0gc2VydmljZS5nZXRQb3J0cygpOwotCQkJCQlmb3IgKEl0ZXJhdG9yIHBvcnRzSXQgPSBwb3J0cy52YWx1ZXMoKS5pdGVyYXRvcigpOyBwb3J0c0l0Lmhhc05leHQoKTspIHsKLQkJCQkJCVBvcnQgd3NkbFBvcnQgPSAoUG9ydCkgcG9ydHNJdC5uZXh0KCk7Ci0JCQkJCQlMaXN0IGV4dEVsZW1lbnRzID0gd3NkbFBvcnQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0JCQkJCQlmb3IgKEl0ZXJhdG9yIGV4dEVsZW1lbnRzSXQgPSBleHRFbGVtZW50cy5pdGVyYXRvcigpOyBleHRFbGVtZW50c0l0Lmhhc05leHQoKTspIHsKLQkJCQkJCQlFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtZW50ID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBleHRFbGVtZW50c0l0Lm5leHQoKTsKLQkJCQkJCQlTdHJpbmcgZW5kcG9pbnQgPSBudWxsOwotCQkJCQkJCVVSTCBlbmRwb2ludFVSTCA9IG51bGw7Ci0JCQkJCQkJaWYgKGV4dEVsZW1lbnQgaW5zdGFuY2VvZiBTT0FQQWRkcmVzcykKLQkJCQkJCQkJZW5kcG9pbnQgPSAoKFNPQVBBZGRyZXNzKSBleHRFbGVtZW50KS5nZXRMb2NhdGlvblVSSSgpOwotCQkJCQkJCWVsc2UgaWYgKGV4dEVsZW1lbnQgaW5zdGFuY2VvZiBIVFRQQWRkcmVzcykKLQkJCQkJCQkJZW5kcG9pbnQgPSAoKEhUVFBBZGRyZXNzKSBleHRFbGVtZW50KS5nZXRMb2NhdGlvblVSSSgpOwotCQkJCQkJCWlmIChlbmRwb2ludCAhPSBudWxsKSB7Ci0JCQkJCQkJCXRyeSB7Ci0JCQkJCQkJCQllbmRwb2ludFVSTCA9IG5ldyBVUkwoZW5kcG9pbnQpOwotCQkJCQkJCQl9Ci0JCQkJCQkJCWNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gbXVybGUpIHsKLQkJCQkJCQkJfQotCQkJCQkJCX0KLQkJCQkJCQlpZiAoZW5kcG9pbnRVUkwgIT0gbnVsbCkgewotCQkJCQkJCQlTdHJpbmcgcHJvdG9jb2wgPSBlbmRwb2ludFVSTC5nZXRQcm90b2NvbCgpOwotCQkJCQkJCQlTdHJpbmcgaG9zdCA9IGVuZHBvaW50VVJMLmdldEhvc3QoKTsKLQkJCQkJCQkJaW50IHBvcnQgPSBlbmRwb2ludFVSTC5nZXRQb3J0KCk7Ci0JCQkJCQkJCWlmIChwb3J0ID09IC0xKSB7Ci0JCQkJCQkJCQlpZiAoImh0dHAiLmVxdWFsc0lnbm9yZUNhc2UocHJvdG9jb2wpKQotCQkJCQkJCQkJCXBvcnQgPSA4MDsKLQkJCQkJCQkJCWVsc2UgaWYgKCJodHRwcyIuZXF1YWxzSWdub3JlQ2FzZShwcm90b2NvbCkpCi0JCQkJCQkJCQkJcG9ydCA9IDQ0MzsKLQkJCQkJCQkJfQotCQkJCQkJCQlpZiAocHJvdG9jb2wgIT0gbnVsbCAmJiBwcm90b2NvbC5zdGFydHNXaXRoKCJodHRwIikgJiYgaG9zdCAhPSBudWxsICYmIGhvc3QubGVuZ3RoKCkgPiAwICYmIHBvcnQgIT0gLTEpIHsKLQkJCQkJCQkJCUlNb25pdG9yIG0gPSBudWxsOwotCQkJCQkJCQkJSU1vbml0b3JbXSBtb25pdG9ycyA9IE1vbml0b3JDb3JlLmdldE1vbml0b3JzKCk7Ci0JCQkJCQkJCQlmb3IgKGludCBpID0gMDsgaSA8IG1vbml0b3JzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJCQkJCQkJaWYgKGhvc3QuZXF1YWxzSWdub3JlQ2FzZShtb25pdG9yc1tpXS5nZXRSZW1vdGVIb3N0KCkpICYmIHBvcnQgPT0gbW9uaXRvcnNbaV0uZ2V0UmVtb3RlUG9ydCgpKSB7Ci0JCQkJCQkJCQkJCW0gPSBtb25pdG9yc1tpXTsKLQkJCQkJCQkJCQkJYnJlYWs7Ci0JCQkJCQkJCQkJfQotCQkJCQkJCQkJfQotCQkJCQkJCQkJaWYgKG0gPT0gbnVsbCAmJiBjcmVhdGUpIHsKLQkJCQkJCQkJCQlpbnQgbW9uaXRvcmVkUG9ydCA9IFNvY2tldFV0aWwuZmluZFVudXNlZFBvcnQoNTAwMCwgMTUwMDApOwotCQkJCQkJCQkJCUlNb25pdG9yV29ya2luZ0NvcHkgbW9uaXRvcldvcmtpbmdDb3B5ID0gTW9uaXRvckNvcmUuY3JlYXRlTW9uaXRvcigpOwotCQkJCQkJCQkJCW1vbml0b3JXb3JraW5nQ29weS5zZXRMb2NhbFBvcnQobW9uaXRvcmVkUG9ydCk7Ci0JCQkJCQkJCQkJbW9uaXRvcldvcmtpbmdDb3B5LnNldFJlbW90ZUhvc3QoaG9zdCk7Ci0JCQkJCQkJCQkJbW9uaXRvcldvcmtpbmdDb3B5LnNldFJlbW90ZVBvcnQocG9ydCk7Ci0JCQkJCQkJCQkJbW9uaXRvcldvcmtpbmdDb3B5LnNldFByb3RvY29sKCJIVFRQIik7Ci0JCQkJCQkJCQkJdHJ5IHsKLQkJCQkJCQkJCQkJbSA9IG1vbml0b3JXb3JraW5nQ29weS5zYXZlKCk7Ci0JCQkJCQkJCQkJfQotCQkJCQkJCQkJCWNhdGNoIChFeGNlcHRpb24gdCkgewotCQkJCQkJCQkJCQlJU3RhdHVzIHdhcm5pbmcgPSBTdGF0dXNVdGlscy53YXJuaW5nU3RhdHVzKE5MUy5iaW5kKFdzdFdTUGx1Z2luTWVzc2FnZXMuTVNHX0VSUk9SX1VOQUJMRV9UT19TVEFSVF9NT05JVE9SLCBuZXcgT2JqZWN0W117U3RyaW5nLnZhbHVlT2YocG9ydCksIGVuZHBvaW50fSksIHQpOwotCQkJCQkJCQkJCQl0cnkgewotCQkJCQkJCQkJCQkJaWYgKGVudiAhPSBudWxsKQotCQkJCQkJCQkJCQkJCWVudi5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0KHdhcm5pbmcpOwotCQkJCQkJCQkJCQl9Ci0JCQkJCQkJCQkJCWNhdGNoIChTdGF0dXNFeGNlcHRpb24gc2UpIHsKLQkJCQkJCQkJCQkJfQotCQkJCQkJCQkJCX0KLQkJCQkJCQkJCX0KLQkJCQkJCQkJCWlmIChtICE9IG51bGwpIHsKLQkJCQkJCQkJCQl0cnkgewotCQkJCQkJCQkJCQlpZiAoIW0uaXNSdW5uaW5nKCkpCi0JCQkJCQkJCQkJCQltLnN0YXJ0KCk7Ci0JCQkJCQkJCQkJCVN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoZW5kcG9pbnRVUkwuZ2V0UHJvdG9jb2woKSk7Ci0JCQkJCQkJCQkJCXNiLmFwcGVuZCgiOi8vbG9jYWxob3N0OiIpOwotCQkJCQkJCQkJCQlzYi5hcHBlbmQoU3RyaW5nLnZhbHVlT2YobS5nZXRMb2NhbFBvcnQoKSkpOwotCQkJCQkJCQkJCQlzYi5hcHBlbmQoZW5kcG9pbnRVUkwuZ2V0RmlsZSgpKTsKLQkJCQkJCQkJCQkJZW5kcG9pbnRzLmFkZChzYi50b1N0cmluZygpKTsKLQkJCQkJCQkJCQl9Ci0JCQkJCQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiB0KSB7Ci0JCQkJCQkJCQkJCUlTdGF0dXMgd2FybmluZyA9IFN0YXR1c1V0aWxzLndhcm5pbmdTdGF0dXMoTkxTLmJpbmQoV3N0V1NQbHVnaW5NZXNzYWdlcy5NU0dfRVJST1JfVU5BQkxFX1RPX1NUQVJUX01PTklUT1IsIG5ldyBPYmplY3RbXXtTdHJpbmcudmFsdWVPZihwb3J0KSwgZW5kcG9pbnR9KSwgdCk7Ci0JCQkJCQkJCQkJCXRyeSB7Ci0JCQkJCQkJCQkJCQlpZiAoZW52ICE9IG51bGwpCi0JCQkJCQkJCQkJCQkJZW52LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnQod2FybmluZyk7Ci0JCQkJCQkJCQkJCX0KLQkJCQkJCQkJCQkJY2F0Y2ggKFN0YXR1c0V4Y2VwdGlvbiBzZSkgewotCQkJCQkJCQkJCQl9Ci0JCQkJCQkJCQkJfQotCQkJCQkJCQkJfQotCQkJCQkJCQl9Ci0JCQkJCQkJfQotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldE1vbml0b3JTZXJ2aWNlKGJvb2xlYW4gbW9uaXRvclNlcnZpY2UpIHsKLQkJdGhpcy5tb25pdG9yU2VydmljZSA9IG1vbml0b3JTZXJ2aWNlOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldERlZmluaXRpb24oRGVmaW5pdGlvbiBkZWZpbml0aW9uKSB7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0V2ViU2VydmljZXNQYXJzZXIoV2ViU2VydmljZXNQYXJzZXIgd2ViU2VydmljZXNQYXJzZXIpIHsKLQkJdGhpcy53ZWJTZXJ2aWNlc1BhcnNlciA9IHdlYlNlcnZpY2VzUGFyc2VyOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFdzZGxVUkkoU3RyaW5nIHdzZGxVUkkpIHsKLQkJdGhpcy53c2RsVVJJID0gd3NkbFVSSTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRDcmVhdGUoYm9vbGVhbiBjcmVhdGUpIHsKLQkJdGhpcy5jcmVhdGUgPSBjcmVhdGU7Ci0JfQotCi0JcHVibGljIExpc3QgZ2V0RW5kcG9pbnRzKCkgewotCQlyZXR1cm4gZW5kcG9pbnRzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGx1Z2luL1dTUGx1Z2luLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BsdWdpbi9XU1BsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTVmMjlmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGx1Z2luL1dTUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDAzIDEyODgyNyAgIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA2MDQyNCAgIDExNTY5MCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50TWVyZ2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V1NETFZhbGlkYXRpb25Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V1NJQVBDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V1NJQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXMuUGVyc2lzdGVudFdTSVNTQlBDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V2FpdEZvcldTRExWYWxpZGF0aW9uQ29udGV4dDsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIFdTUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHsKLQotCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JcHJpdmF0ZSBzdGF0aWMgV1NQbHVnaW4gcGx1Z2luOwotCQotCXByaXZhdGUgUGVyc2lzdGVudFdTSVNTQlBDb250ZXh0IHdzaVNTQlBDb250ZXh0XzsKLQlwcml2YXRlIFBlcnNpc3RlbnRXU0lBUENvbnRleHQgd3NpQVBDb250ZXh0XzsKLQlwcml2YXRlIFBlcnNpc3RlbnRXU0RMVmFsaWRhdGlvbkNvbnRleHQgd3NkbFZhbGlkYXRpb25Db250ZXh0XzsKLQlwcml2YXRlIFBlcnNpc3RlbnRXYWl0Rm9yV1NETFZhbGlkYXRpb25Db250ZXh0IHdhaXRGb3JXc2RsVmFsaWRhdGlvbkNvbnRleHRfOwotCXByaXZhdGUgUGVyc2lzdGVudE1lcmdlQ29udGV4dCBtZXJnZUNvbnRleHRfOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSUQgPSAib3JnLmVjbGlwc2Uud3N0LndzIjsKLQkKLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIFdTUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlwbHVnaW4gPSB0aGlzOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGlzIHBsdWdpbi4gRXF1aXZhbGVudCB0byBjYWxsaW5nCi0JICogKFdTUGx1Z2luKVBsYXRmb3JtLmdldFBsdWdpbigib3JnLmVjbGlwc2Uud3N0LndzIik7Ci0JICogQHJldHVybiBUaGUgV1NQbHVnaW4gc2luZ2xldG9uLgotCSAqLwotCSBzdGF0aWMgcHVibGljIFdTUGx1Z2luIGdldEluc3RhbmNlKCkgewotCSAgIHJldHVybiBwbHVnaW47Ci0JIH0KLQkgCi0JLyoqCi0JICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHVwb24gcGx1Zy1pbiBhY3RpdmF0aW9uCi0JICovCi0JcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RhcnQoY29udGV4dCk7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIHBsdWctaW4gaXMgc3RvcHBlZAotCSAqLwotCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RvcChjb250ZXh0KTsKLQkJcGx1Z2luID0gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBXU1BsdWdpbiBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQotCi0JLyoqCi0JICogR2V0IFdTSSBDb250ZXh0Ci0JICogQGRlcHJlY2F0ZWQgdXNlIGdldFdTSVNTQlBDb250ZXh0IG9yIGdldFdTSUFQQ29udGV4dCBpbnN0ZWFkCi0JICogCi0JICovIAotIHB1YmxpYyBQZXJzaXN0ZW50V1NJQ29udGV4dCBnZXRXU0lDb250ZXh0KCkgCi0gCXsgLy8gZGVmYXVsdGluZyB0byBnZXQgV1NJIFNpbXBsZSBTT0FQIEJpbmRpbmcgUHJvZmlsZSBjb250ZXh0Ci0gCSAgcmV0dXJuIGdldFdTSVNTQlBDb250ZXh0KCk7Ci0gCX0KLSAKLSAvKioKLQkgKiBHZXQgV1NJIFNpbXBsZSBTT0FQIEJpbmRpbmcgUHJvZmlsZSBDb250ZXh0Ci0JICogCi0JICovIAotIHB1YmxpYyBQZXJzaXN0ZW50V1NJU1NCUENvbnRleHQgZ2V0V1NJU1NCUENvbnRleHQoKSAKLQl7Ci0JICBpZiAod3NpU1NCUENvbnRleHRfID09IG51bGwpCi0JICAJewotCSAgCQl3c2lTU0JQQ29udGV4dF8gPSBuZXcgUGVyc2lzdGVudFdTSVNTQlBDb250ZXh0KCk7Ci0JICAJCXdzaVNTQlBDb250ZXh0Xy5sb2FkKCk7Ci0JICAJfQotCSAgcmV0dXJuIHdzaVNTQlBDb250ZXh0XzsKLQl9Ci0gCi0gLyoqCi0JICogR2V0IFdTSSBBdHRhY2htZW50IFByb2ZpbGUgQ29udGV4dAotCSAqIAotCSAqLyAKLSBwdWJsaWMgUGVyc2lzdGVudFdTSUFQQ29udGV4dCBnZXRXU0lBUENvbnRleHQoKSAKLQl7Ci0JICBpZiAod3NpQVBDb250ZXh0XyA9PSBudWxsKQotCSAgCXsKLQkgIAkJd3NpQVBDb250ZXh0XyA9IG5ldyBQZXJzaXN0ZW50V1NJQVBDb250ZXh0KCk7Ci0JICAJCXdzaUFQQ29udGV4dF8ubG9hZCgpOwotCSAgCX0KLQkgIHJldHVybiB3c2lBUENvbnRleHRfOwotCX0KLQotCSAvKioKLQkgKiBHZXQgV1NETCBWYWxpYXRpb24gQ29udGV4dAotCSAqIAotCSAqLyAKLQotCXB1YmxpYyBQZXJzaXN0ZW50V1NETFZhbGlkYXRpb25Db250ZXh0IGdldFdTRExWYWxpZGF0aW9uQ29udGV4dCgpIHsKLQkJaWYgKHdzZGxWYWxpZGF0aW9uQ29udGV4dF8gPT0gbnVsbCkgewotCQkJd3NkbFZhbGlkYXRpb25Db250ZXh0XyA9IG5ldyBQZXJzaXN0ZW50V1NETFZhbGlkYXRpb25Db250ZXh0KCk7Ci0JCQl3c2RsVmFsaWRhdGlvbkNvbnRleHRfLmxvYWQoKTsKLQkJfQotCQlyZXR1cm4gd3NkbFZhbGlkYXRpb25Db250ZXh0XzsKLQl9Ci0JCi0JLyoqCi0JICogR2V0IFdhaXQgZm9yIFdTREwgVmFsaWF0aW9uIENvbnRleHQKLQkgKiAKLQkgKi8gCi0KLQlwdWJsaWMgUGVyc2lzdGVudFdhaXRGb3JXU0RMVmFsaWRhdGlvbkNvbnRleHQgZ2V0V2FpdEZvcldTRExWYWxpZGF0aW9uQ29udGV4dCgpIHsKLQkJaWYgKHdhaXRGb3JXc2RsVmFsaWRhdGlvbkNvbnRleHRfID09IG51bGwpIHsKLQkJCXdhaXRGb3JXc2RsVmFsaWRhdGlvbkNvbnRleHRfID0gbmV3IFBlcnNpc3RlbnRXYWl0Rm9yV1NETFZhbGlkYXRpb25Db250ZXh0KCk7Ci0JCQl3YWl0Rm9yV3NkbFZhbGlkYXRpb25Db250ZXh0Xy5sb2FkKCk7Ci0JCX0KLQkJcmV0dXJuIHdhaXRGb3JXc2RsVmFsaWRhdGlvbkNvbnRleHRfOwotCX0KLQkKLQkvKioKLQkgKiBHZXQgU2tlbGV0b24gTWVyZ2UgQ29udGV4dAotCSAqIAotCSAqLyAKLSBwdWJsaWMgUGVyc2lzdGVudE1lcmdlQ29udGV4dCBnZXRNZXJnZUNvbnRleHQoKSAKLQl7Ci0JICBpZiAobWVyZ2VDb250ZXh0XyA9PSBudWxsKQotCSAgCXsKLQkJICBtZXJnZUNvbnRleHRfID0gbmV3IFBlcnNpc3RlbnRNZXJnZUNvbnRleHQoKTsKLQkJICBtZXJnZUNvbnRleHRfLmxvYWQoKTsKLQkgIAl9Ci0JICByZXR1cm4gbWVyZ2VDb250ZXh0XzsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3ByZWZlcmVuY2VzL01lcmdlRGVmYXVsdHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcHJlZmVyZW5jZXMvTWVyZ2VEZWZhdWx0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzY0YThjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcHJlZmVyZW5jZXMvTWVyZ2VEZWZhdWx0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNDAzICAgMTI4ODI3IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzOwotCi1wdWJsaWMgY2xhc3MgTWVyZ2VEZWZhdWx0cwotewotIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gUFJFRkVSRU5DRV9TS0VMRVRPTl9NRVJHRV9ERUZBVUxUID0gZmFsc2U7Ci0gCi0gLyoqCi0gICogCi0gICogQHJldHVybiByZXR1cm5zIHRoZSBkZWZhdWx0IHNldHRpbmcgZm9yIHNrZWxldG9uIG1lcmdlLgotICAqLwotIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBnZXRTa2VsZXRvbk1lcmdlRGVmYXVsdCgpCi0gewotCXJldHVybiBQUkVGRVJFTkNFX1NLRUxFVE9OX01FUkdFX0RFRkFVTFQ7Ci0gfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wcmVmZXJlbmNlcy9QZXJzaXN0ZW50TWVyZ2VDb250ZXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3ByZWZlcmVuY2VzL1BlcnNpc3RlbnRNZXJnZUNvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWNjMDdjYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3ByZWZlcmVuY2VzL1BlcnNpc3RlbnRNZXJnZUNvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDQwMyAgIDEyODgyNyBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb250ZXh0LlBlcnNpc3RlbnRDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW4uV1NQbHVnaW47Ci0KLQotcHVibGljIGNsYXNzIFBlcnNpc3RlbnRNZXJnZUNvbnRleHQgZXh0ZW5kcyBQZXJzaXN0ZW50Q29udGV4dAotewotCSAvKioKLQkgICogVGhpcyBjb25zdGFudCBzdHJpbmcgaXMgdXNlZCB0byBsb29rdXAgdGhlIGVuYWJsZSBza2VsZXRvbiBtZXJnZSBnZW5lcmFsIHByZWZlcmVuY2UgZnJvbQotCSAgKiB0aGUgcGx1Z2lucyBsb2NhbCBwcmVmZXJlbmNlcyBzdG9yZS4KLQkqKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUkVGRVJFTkNFX1NLRUxFVE9OX01FUkdFID0gInNrZWxldG9uTWVyZ2UiOwotCQotICBwcml2YXRlIHN0YXRpYyBQZXJzaXN0ZW50TWVyZ2VDb250ZXh0IGNvbnRleHRfID0gbnVsbDsKLSAgCi0gIHB1YmxpYyBzdGF0aWMgUGVyc2lzdGVudE1lcmdlQ29udGV4dCBnZXRJbnN0YW5jZSgpCi0gIHsKLSAgICBpZiggY29udGV4dF8gPT0gbnVsbCApCi0gICAgewotICAgICAgY29udGV4dF8gPSBuZXcgUGVyc2lzdGVudE1lcmdlQ29udGV4dCgpOwotICAgICAgY29udGV4dF8ubG9hZCgpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gY29udGV4dF87Ci0gIH0KLSAgCi0gIHB1YmxpYyBQZXJzaXN0ZW50TWVyZ2VDb250ZXh0KCkKLSAgewotCSAgc3VwZXIoV1NQbHVnaW4uZ2V0SW5zdGFuY2UoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBsb2FkKCkKLSAgewotICAgIHNldERlZmF1bHQoUFJFRkVSRU5DRV9TS0VMRVRPTl9NRVJHRSwgTWVyZ2VEZWZhdWx0cy5nZXRTa2VsZXRvbk1lcmdlRGVmYXVsdCgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFNrZWxldG9uTWVyZ2VFbmFibGVkKGJvb2xlYW4gZW5hYmxlKQotICB7Ci0gICAgc2V0VmFsdWUoUFJFRkVSRU5DRV9TS0VMRVRPTl9NRVJHRSwgZW5hYmxlKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzU2tlbGV0b25NZXJnZUVuYWJsZWQoKQotICB7Ci0gICAgcmV0dXJuIGdldFZhbHVlQXNCb29sZWFuKFBSRUZFUkVOQ0VfU0tFTEVUT05fTUVSR0UpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcHJlZmVyZW5jZXMvUGVyc2lzdGVudFdTRExWYWxpZGF0aW9uQ29udGV4dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wcmVmZXJlbmNlcy9QZXJzaXN0ZW50V1NETFZhbGlkYXRpb25Db250ZXh0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiMWMwNDcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wcmVmZXJlbmNlcy9QZXJzaXN0ZW50V1NETFZhbGlkYXRpb25Db250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbnRleHQuUGVyc2lzdGVudENvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbi5XU1BsdWdpbjsKLQotCi0KLXB1YmxpYyBjbGFzcyBQZXJzaXN0ZW50V1NETFZhbGlkYXRpb25Db250ZXh0IGV4dGVuZHMgUGVyc2lzdGVudENvbnRleHQKLXsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBWQUxJREFURV9OT19XU0RMID0gIjAiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFZBTElEQVRFX1JFTU9URV9XU0RMID0gIjEiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFZBTElEQVRFX0FMTF9XU0RMID0gIjIiOwotCi0JcHJpdmF0ZSBTdHJpbmcgd3NkbF92YWxpZGF0aW9uID0gIldTRExfVkFMSURBVElPTiI7Ci0KLXB1YmxpYyBQZXJzaXN0ZW50V1NETFZhbGlkYXRpb25Db250ZXh0ICgpIAotewotCXN1cGVyKCAgV1NQbHVnaW4uZ2V0SW5zdGFuY2UoKSk7Ci0JCi19Ci0KLXB1YmxpYyB2b2lkIGxvYWQoKSAKLXsKLQlzZXREZWZhdWx0KHdzZGxfdmFsaWRhdGlvbiwgVkFMSURBVEVfTk9fV1NETCk7Ci19Ci0KLS8vIHRvIGJlIHVzZWQgb25seSBieSB0aGUgcHJlZmVyZW5jZSBwYWdlCi1wdWJsaWMgdm9pZCB1cGRhdGVXU0RMVmFsaWRhdGlvbiAoIFN0cmluZyB2YWx1ZSkKLXsKLSAJCXNldFZhbHVlKCB3c2RsX3ZhbGlkYXRpb24sIHZhbHVlKTsKLX0KLQotcHVibGljIFN0cmluZyBnZXRQZXJzaXN0ZW50V1NETFZhbGlkYXRpb24gKCkKLXsKLQlTdHJpbmcgcHJvcGVydHkgPSBnZXRWYWx1ZUFzU3RyaW5nKHdzZGxfdmFsaWRhdGlvbik7Ci0vLwkgZGVmYXVsdCB0byBJZ25vcmUgaWYgbm8gaW5pdCBoYXMgYmVlbiBkb25lIGZyb20gaW5pIGZpbGUKLQlpZiAocHJvcGVydHkgPT0gbnVsbCB8fCBwcm9wZXJ0eS5lcXVhbHMoIiIpKSB7Ci0JCXNldFZhbHVlKCB3c2RsX3ZhbGlkYXRpb24sIFZBTElEQVRFX05PX1dTREwpOwotCQlyZXR1cm4gVkFMSURBVEVfTk9fV1NETDsKLQl9Ci0JZWxzZQotCQlyZXR1cm4gcHJvcGVydHk7Ci19Ci0KLXB1YmxpYyBTdHJpbmcgZ2V0RGVmYXVsdCgpCi17Ci0JcmV0dXJuIGdldERlZmF1bHRTdHJpbmcod3NkbF92YWxpZGF0aW9uKTsKLX0KLQotcHVibGljIGJvb2xlYW4gVmFsaWRhdGVOb1dTREwoKQotewotCSByZXR1cm4gVkFMSURBVEVfTk9fV1NETC5lcXVhbHMoZ2V0UGVyc2lzdGVudFdTRExWYWxpZGF0aW9uKCkpOwotfQotCi1wdWJsaWMgYm9vbGVhbiBXYXJuTm9uV1NJQ29tcGxpYW5jZXMoKQotewotCSByZXR1cm4gVkFMSURBVEVfUkVNT1RFX1dTREwuZXF1YWxzKGdldFBlcnNpc3RlbnRXU0RMVmFsaWRhdGlvbigpKTsKLX0KLQotcHVibGljIGJvb2xlYW4gSWdub3JlTm9uV1NJQ29tcGxpYW5jZXMoKQotewotCSByZXR1cm4gVkFMSURBVEVfQUxMX1dTREwuZXF1YWxzKGdldFBlcnNpc3RlbnRXU0RMVmFsaWRhdGlvbigpKTsKLX0KLQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3ByZWZlcmVuY2VzL1BlcnNpc3RlbnRXU0lBUENvbnRleHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcHJlZmVyZW5jZXMvUGVyc2lzdGVudFdTSUFQQ29udGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjVkODk4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcHJlZmVyZW5jZXMvUGVyc2lzdGVudFdTSUFQQ29udGV4dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5RdWFsaWZpZWROYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5Xc3RXU1BsdWdpbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW4uV1NQbHVnaW47Ci0KLQotCi1wdWJsaWMgY2xhc3MgUGVyc2lzdGVudFdTSUFQQ29udGV4dCBleHRlbmRzIFBlcnNpc3RlbnRXU0lDb250ZXh0Ci17Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE5PTl9XU0lfQVBfQ09NUExJQU5DRSA9ICJub25XU0lBUENvbXBsaWFuY2UiOwotCi1wdWJsaWMgUGVyc2lzdGVudFdTSUFQQ29udGV4dCAoKSAKLXsKLQlzdXBlcigpOwotCW5vbl93c2lfY29tcGxpYW5jZSA9IE5PTl9XU0lfQVBfQ09NUExJQU5DRTsKLQluYW1lID0gbmV3IFF1YWxpZmllZE5hbWUoV1NQbHVnaW4uSUQgLCBub25fd3NpX2NvbXBsaWFuY2UpOwotCXdzaVdhcm5pbmdfID0gV3N0V1NQbHVnaW5NZXNzYWdlcy5XU0lfQVBfV0FSTklORzsKLQl3c2lFcnJvcl8gPSBXc3RXU1BsdWdpbk1lc3NhZ2VzLldTSV9BUF9FUlJPUjsKLX0KLQotcHVibGljIFN0cmluZyBnZXRQZXJzaXN0ZW50V1NJQ29tcGxpYW5jZSAoKQotewotCVN0cmluZyBwcm9wZXJ0eSA9IGdldFZhbHVlQXNTdHJpbmcobm9uX3dzaV9jb21wbGlhbmNlKTsKLQkvLyBkZWZhdWx0IHRvIFdhcm5pbmcgaWYgbm8gaW5pdCBoYXMgYmVlbiBkb25lIGZyb20gaW5pIGZpbGUKLQlpZiAocHJvcGVydHkgPT0gbnVsbCB8fCBwcm9wZXJ0eS5lcXVhbHMoIiIpKSB7Ci0JCXNldFZhbHVlKCBub25fd3NpX2NvbXBsaWFuY2UsIFdBUk5fTk9OX1dTSSk7Ci0JCXJldHVybiBXQVJOX05PTl9XU0k7Ci0JfQotCWVsc2UKLQkJcmV0dXJuIHByb3BlcnR5OwotfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wcmVmZXJlbmNlcy9QZXJzaXN0ZW50V1NJQ29udGV4dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wcmVmZXJlbmNlcy9QZXJzaXN0ZW50V1NJQ29udGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjRmZDBkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcHJlZmVyZW5jZXMvUGVyc2lzdGVudFdTSUNvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlF1YWxpZmllZE5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbnRleHQuUGVyc2lzdGVudENvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5FbnZpcm9ubWVudFNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JTG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5Xc3RXU1BsdWdpbk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW4uV1NQbHVnaW47Ci0KLQotCi1wdWJsaWMgY2xhc3MgUGVyc2lzdGVudFdTSUNvbnRleHQgZXh0ZW5kcyBQZXJzaXN0ZW50Q29udGV4dAotewotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNUT1BfTk9OX1dTSSA9ICIwIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBXQVJOX05PTl9XU0kgPSAiMSI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSUdOT1JFX05PTl9XU0kgPSAiMiI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9MTE9XX1dTSV9QUkVGRVJFTkNFID0gIjMiOwotCi0JcHJvdGVjdGVkIFF1YWxpZmllZE5hbWUgbmFtZSA9IG51bGw7IC8vIHNldCBpbiBzdWJjbGFzcwotCXByb3RlY3RlZCBTdHJpbmcgbm9uX3dzaV9jb21wbGlhbmNlOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBOT05fV1NJX1NTQlBfQ09NUExJQU5DRSA9ICJub25XU0lTU0JQQ29tcGxpYW5jZSI7Ci0JcHJvdGVjdGVkIFN0cmluZyB3c2lXYXJuaW5nXzsgLy8gc2V0IGluIHN1YmNsYXNzCi0JcHJvdGVjdGVkIFN0cmluZyB3c2lFcnJvcl87IC8vIHNldCBpbiBzdWJjbGFzcwotCi1wdWJsaWMgUGVyc2lzdGVudFdTSUNvbnRleHQgKCkgCi17Ci0Jc3VwZXIoICBXU1BsdWdpbi5nZXRJbnN0YW5jZSgpKTsKLQkKLS8vICBOT1RFOiAgbmFtZSwgd3NpV2FybmluZ18gYW5kIHdzaUVycm9yXyBzaG91bGQgYmUgc2V0IGluIHRoZSBzdWJjbGFzc2VzLiAgVGhpcyBpcyBwcm92aWRpbmcgZGVmYXVsdGluZyBvbmx5LgotCW5vbl93c2lfY29tcGxpYW5jZSA9IE5PTl9XU0lfU1NCUF9DT01QTElBTkNFOwotCW5hbWUgPSBuZXcgUXVhbGlmaWVkTmFtZShXU1BsdWdpbi5JRCAsIG5vbl93c2lfY29tcGxpYW5jZSk7Ci0Jd3NpV2FybmluZ18gPSBXc3RXU1BsdWdpbk1lc3NhZ2VzLldTSV9TU0JQX1dBUk5JTkc7Ci0Jd3NpRXJyb3JfID0gV3N0V1NQbHVnaW5NZXNzYWdlcy5XU0lfU1NCUF9FUlJPUjsKLX0KLQotcHVibGljIHZvaWQgbG9hZCgpIAotewotCS8vIGxldCB0aGUgZGVmYXVsdCBiZSByZWFkIGZyb20gcGx1Z2luX2Nvc3RvbWl6YXRpb24uaW5pIGZpbGUKLQkvLyBzZXREZWZhdWx0KG5vbl93c2lfY29tcGxpYW5jZSwgV0FSTl9OT05fV1NJKTsKLX0KLQotLy8gdG8gYmUgdXNlZCBvbmx5IGJ5IHRoZSBwcmVmZXJlbmNlIHBhZ2UKLXB1YmxpYyB2b2lkIHVwZGF0ZVdTSUNvbXBsaWFuY2VzICggU3RyaW5nIHZhbHVlKQotewotIAkJc2V0VmFsdWUoIG5vbl93c2lfY29tcGxpYW5jZSwgdmFsdWUpOwotfQotCi1wdWJsaWMgU3RyaW5nIGdldFBlcnNpc3RlbnRXU0lDb21wbGlhbmNlICgpCi17Ci0JU3RyaW5nIHByb3BlcnR5ID0gZ2V0VmFsdWVBc1N0cmluZyhub25fd3NpX2NvbXBsaWFuY2UpOwotLy8JIGRlZmF1bHQgdG8gV2FybmluZyBpZiBubyBpbml0IGhhcyBiZWVuIGRvbmUgZnJvbSBpbmkgZmlsZQotCWlmIChwcm9wZXJ0eSA9PSBudWxsIHx8IHByb3BlcnR5LmVxdWFscygiIikpIHsKLQkJc2V0VmFsdWUoIG5vbl93c2lfY29tcGxpYW5jZSwgV0FSTl9OT05fV1NJKTsKLQkJcmV0dXJuIFdBUk5fTk9OX1dTSTsKLQl9Ci0JZWxzZQotCQlyZXR1cm4gcHJvcGVydHk7Ci19Ci0KLXB1YmxpYyBib29sZWFuIFN0b3BOb25XU0lDb21wbGlhbmNlcygpCi17Ci0JIHJldHVybiBTVE9QX05PTl9XU0kuZXF1YWxzKGdldFBlcnNpc3RlbnRXU0lDb21wbGlhbmNlKCkpOwotfQotCi1wdWJsaWMgYm9vbGVhbiBXYXJuTm9uV1NJQ29tcGxpYW5jZXMoKQotewotCSByZXR1cm4gV0FSTl9OT05fV1NJLmVxdWFscyhnZXRQZXJzaXN0ZW50V1NJQ29tcGxpYW5jZSgpKTsKLX0KLQotcHVibGljIGJvb2xlYW4gSWdub3JlTm9uV1NJQ29tcGxpYW5jZXMoKQotewotCSByZXR1cm4gSUdOT1JFX05PTl9XU0kuZXF1YWxzKGdldFBlcnNpc3RlbnRXU0lDb21wbGlhbmNlKCkpOwotfQotCi0vLyB0byBiZSB1c2VkIG9ubHkgYnkgdGhlIHByb3BlcnR5IHBhZ2UKLXB1YmxpYyB2b2lkIHVwZGF0ZVByb2plY3RXU0lDb21wbGlhbmNlcyAoIElQcm9qZWN0IHByb2plY3QsIFN0cmluZyB2YWx1ZSkKLXsKLSAgICB0cnkgewotCQlwcm9qZWN0LnNldFBlcnNpc3RlbnRQcm9wZXJ0eShuYW1lLCB2YWx1ZSk7Ci0gICAgfQotICAgIGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsgCi0gICAgCVN5c3RlbS5vdXQucHJpbnRsbigiTm8gc3VjaCBQcm9qZWN0Iik7Ci0gICAgCUlMb2cgbG9nID0gRW52aXJvbm1lbnRTZXJ2aWNlLmdldEVjbGlwc2VMb2coKTsKLSAgICAJbG9nLmxvZyhJTG9nLklORk8sIDUwODQsIHRoaXMsICJ1cGRhdGVQcm9qZWN0V1NJQ29tcGxpYW5jZXMiLCAiTm8gc3VjaCBQcm9qZWN0ICIrcHJvamVjdCk7Ci0gICAgfQotfQotCi1wdWJsaWMgYm9vbGVhbiBwcm9qZWN0U3RvcE5vbldTSUNvbXBsaWFuY2VzKElQcm9qZWN0IHByb2plY3QpCi17Ci0gCXJldHVybiBTVE9QX05PTl9XU0kuZXF1YWxzKGdldFByb2plY3RQZXJzaXN0ZW50UHJvcGVydHkocHJvamVjdCkpOyAgICAKLX0KLQotcHVibGljIGJvb2xlYW4gcHJvamVjdFdhcm5Ob25XU0lDb21wbGlhbmNlcyhJUHJvamVjdCBwcm9qZWN0KQotewotIAlyZXR1cm4gV0FSTl9OT05fV1NJLmVxdWFscyhnZXRQcm9qZWN0UGVyc2lzdGVudFByb3BlcnR5KHByb2plY3QpKTsgICAgCi19Ci0KLXB1YmxpYyBib29sZWFuIHByb2plY3RJZ25vcmVOb25XU0lDb21wbGlhbmNlcyhJUHJvamVjdCBwcm9qZWN0KQotewotIAlyZXR1cm4gSUdOT1JFX05PTl9XU0kuZXF1YWxzKGdldFByb2plY3RQZXJzaXN0ZW50UHJvcGVydHkocHJvamVjdCkpOyAgICAKLX0KLQotCi0vLyB0byBiZSB1c2VkIG9ubHkgYnkgdGhlIHByb3BlcnR5IHBhZ2UKLXB1YmxpYyBib29sZWFuIHByb2plY3RGb2xsb3dXU0lQcmVmZXJhbmNlKElQcm9qZWN0IHByb2plY3QpCi17Ci0gICAgdHJ5IHsKLSAJU3RyaW5nIHByb3BlcnR5ID0gcHJvamVjdC5nZXRQZXJzaXN0ZW50UHJvcGVydHkobmFtZSk7Ci0gICAgcmV0dXJuIChwcm9wZXJ0eSA9PSBudWxsIHx8IHByb3BlcnR5LmVxdWFscygiIikgfHwgcHJvcGVydHkuZXF1YWxzKEZPTExPV19XU0lfUFJFRkVSRU5DRSkpOwotICAgIAl9Ci0gICAgY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgICAgIHsKLSAgICAJcmV0dXJuIHRydWU7Ci0gICAgIH0gICAgIAotfQotCi1wcml2YXRlIFN0cmluZyBnZXRQcm9qZWN0UGVyc2lzdGVudFByb3BlcnR5KElQcm9qZWN0IHByb2plY3QpCi17Ci0JU3RyaW5nIHByb3BlcnR5ID0gZ2V0UHJvamVjdFdTSUNvbXBsaWFuY2UocHJvamVjdCk7Ci0JaWYgKHByb3BlcnR5LmVxdWFscyhGT0xMT1dfV1NJX1BSRUZFUkVOQ0UpKSB7Ci0JCXByb3BlcnR5ID0gZ2V0UGVyc2lzdGVudFdTSUNvbXBsaWFuY2UoKTsKLQl9Ci0JcmV0dXJuIHByb3BlcnR5OwotIH0KLQotcHVibGljIFN0cmluZyBnZXRQcm9qZWN0V1NJQ29tcGxpYW5jZShJUHJvamVjdCBwcm9qZWN0KQotewotICB0cnkgewotICAgICAJU3RyaW5nIHByb3BlcnR5ID0gcHJvamVjdC5nZXRQZXJzaXN0ZW50UHJvcGVydHkobmFtZSk7Ci0gICAgIAlpZiAocHJvcGVydHkgPT0gbnVsbCB8fCBwcm9wZXJ0eS5lcXVhbHMoIiIpKQotICAgICAJewotICAgICAJCXByb3BlcnR5ID0gRk9MTE9XX1dTSV9QUkVGRVJFTkNFOwotICAgICAJfQotICAgICAJcmV0dXJuIHByb3BlcnR5OwotICAgICB9Ci0gICAgIGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpICAgICB7Ci0gICAgCVN5c3RlbS5vdXQucHJpbnRsbigiTm8gc3VjaCBQcm9qZWN0Iik7Ci0gICAgCXJldHVybiBnZXRQZXJzaXN0ZW50V1NJQ29tcGxpYW5jZSgpOwotICAgICB9ICAgICAKLX0KLQotcHVibGljIFN0cmluZyBnZXRXYXJuaW5nKCkKLXsKLQlyZXR1cm4gd3NpV2FybmluZ187Ci19Ci0KLXB1YmxpYyBTdHJpbmcgZ2V0RXJyb3IoKQotewotCXJldHVybiB3c2lFcnJvcl87Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcHJlZmVyZW5jZXMvUGVyc2lzdGVudFdTSVNTQlBDb250ZXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3ByZWZlcmVuY2VzL1BlcnNpc3RlbnRXU0lTU0JQQ29udGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNWRhN2RlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcHJlZmVyZW5jZXMvUGVyc2lzdGVudFdTSVNTQlBDb250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlF1YWxpZmllZE5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLldzdFdTUGx1Z2luTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbi5XU1BsdWdpbjsKLQotCi0KLXB1YmxpYyBjbGFzcyBQZXJzaXN0ZW50V1NJU1NCUENvbnRleHQgZXh0ZW5kcyBQZXJzaXN0ZW50V1NJQ29udGV4dAotewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBOT05fV1NJX1NTQlBfQ09NUExJQU5DRSA9ICJub25XU0lTU0JQQ29tcGxpYW5jZSI7Ci0KLXB1YmxpYyBQZXJzaXN0ZW50V1NJU1NCUENvbnRleHQgKCkgCi17Ci0Jc3VwZXIoKTsKLQlub25fd3NpX2NvbXBsaWFuY2UgPSBOT05fV1NJX1NTQlBfQ09NUExJQU5DRTsKLQluYW1lID0gbmV3IFF1YWxpZmllZE5hbWUoV1NQbHVnaW4uSUQgLCBub25fd3NpX2NvbXBsaWFuY2UpOwotCXdzaVdhcm5pbmdfID0gV3N0V1NQbHVnaW5NZXNzYWdlcy5XU0lfU1NCUF9XQVJOSU5HOwotCXdzaUVycm9yXyA9IFdzdFdTUGx1Z2luTWVzc2FnZXMuV1NJX1NTQlBfRVJST1I7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcHJlZmVyZW5jZXMvUGVyc2lzdGVudFdhaXRGb3JXU0RMVmFsaWRhdGlvbkNvbnRleHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcHJlZmVyZW5jZXMvUGVyc2lzdGVudFdhaXRGb3JXU0RMVmFsaWRhdGlvbkNvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWNlZDIxMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3ByZWZlcmVuY2VzL1BlcnNpc3RlbnRXYWl0Rm9yV1NETFZhbGlkYXRpb25Db250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbnRleHQuUGVyc2lzdGVudENvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbi5XU1BsdWdpbjsKLQotCi0KLXB1YmxpYyBjbGFzcyBQZXJzaXN0ZW50V2FpdEZvcldTRExWYWxpZGF0aW9uQ29udGV4dCBleHRlbmRzIFBlcnNpc3RlbnRDb250ZXh0Ci17Ci0KLQlwcml2YXRlIFN0cmluZyB3YWl0X2Zvcl93c2RsX3ZhbGlkYXRpb24gPSAiV0FJVF9GT1JfV1NETF9WQUxJREFUSU9OIjsKLQotcHVibGljIFBlcnNpc3RlbnRXYWl0Rm9yV1NETFZhbGlkYXRpb25Db250ZXh0ICgpIAotewotCXN1cGVyKCAgV1NQbHVnaW4uZ2V0SW5zdGFuY2UoKSk7Ci0JCi19Ci0KLXB1YmxpYyB2b2lkIGxvYWQoKSAKLXsKLQlzZXREZWZhdWx0KHdhaXRfZm9yX3dzZGxfdmFsaWRhdGlvbiwgdHJ1ZSk7Ci19Ci0KLS8vIHRvIGJlIHVzZWQgb25seSBieSB0aGUgcHJlZmVyZW5jZSBwYWdlCi1wdWJsaWMgdm9pZCBzZXRXYWl0Rm9yV1NETFZhbGlkYXRpb24gKCBib29sZWFuIHZhbHVlKQotewotIAkJc2V0VmFsdWUoIHdhaXRfZm9yX3dzZGxfdmFsaWRhdGlvbiwgdmFsdWUpOwotfQotCi1wdWJsaWMgYm9vbGVhbiBnZXRQZXJzaXN0ZW50V2FpdEZvcldTRExWYWxpZGF0aW9uICgpCi17Ci0JcmV0dXJuIGdldFZhbHVlQXNCb29sZWFuKHdhaXRfZm9yX3dzZGxfdmFsaWRhdGlvbik7Ci0KLX0KLQotcHVibGljIGJvb2xlYW4gZ2V0RGVmYXVsdCgpCi17Ci0JcmV0dXJuIGdldERlZmF1bHRCb29sZWFuKHdhaXRfZm9yX3dzZGxfdmFsaWRhdGlvbik7Ci19Ci0KLQotCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcHJlZmVyZW5jZXMvV1NJQ29tcGxpYW5jZVV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3ByZWZlcmVuY2VzL1dTSUNvbXBsaWFuY2VVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTcxMzgzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcHJlZmVyZW5jZXMvV1NJQ29tcGxpYW5jZVV0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5DaG9pY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JU3RhdHVzSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuV3N0V1NQbHVnaW5NZXNzYWdlczsKLQotCi1wdWJsaWMgY2xhc3MgV1NJQ29tcGxpYW5jZVV0aWxzCi17Ci0KLS8qKgotICogQHBhcmFtIHByb2plY3QKLSAqIEBwYXJhbSBjb250ZXh0Ci0gKiBAcmV0dXJuCi0gKi8KLXB1YmxpYyBzdGF0aWMgaW50IGdldFdTSVNldmVyaXR5IChJUHJvamVjdCBwcm9qZWN0LCBQZXJzaXN0ZW50V1NJQ29udGV4dCBjb250ZXh0KQotewotCWlmIChjb250ZXh0LnByb2plY3RTdG9wTm9uV1NJQ29tcGxpYW5jZXMocHJvamVjdCkpCi0JCXJldHVybiBTdGF0dXMuRVJST1I7Ci0JZWxzZSBpZiAoY29udGV4dC5wcm9qZWN0V2Fybk5vbldTSUNvbXBsaWFuY2VzKHByb2plY3QpKQotCQlyZXR1cm4gU3RhdHVzLldBUk5JTkc7Ci0JZWxzZQotCQlyZXR1cm4gU3RhdHVzLklORk87Ci19Ci0KLS8qKgotICogQHBhcmFtIG1vbml0b3IgSVN0YXR1c0hhbmRsZXIKLSAqIEBwYXJhbSBzdGF0dXMgU3RhdHVzW10KLSAqIEBwYXJhbSBwcm9qZWN0IElQcm9qZWN0Ci0gKiBAcGFyYW0gY29udGV4dCBQZXJzaXN0ZW50V1NJQ29udGV4dAotICogQHJldHVybiBib29sZWFuIHRydWUgaWYgdG8gY29udGludWUKLSAqLwotcHVibGljIHN0YXRpYyBib29sZWFuIGNoZWNrV1NJQ29tcGxpYW5jZSAoIElTdGF0dXNIYW5kbGVyIG1vbml0b3IsIFN0YXR1c1tdIHN0YXR1cywgSVByb2plY3QgcHJvamVjdCwgUGVyc2lzdGVudFdTSUNvbnRleHQgY29udGV4dCkKLXsKLSAgCWlmIChjb250ZXh0LnByb2plY3RTdG9wTm9uV1NJQ29tcGxpYW5jZXMocHJvamVjdCkpCi0gIAkJewotICAgICAgCi0gIAkJCS8vIGVtaXQgYW4gZXJyb3IgbWVzc2FnZSBhbmQgcmV0dXJuIGZhbHNlCi0gIAkJCUlTdGF0dXMgc3RhdHVzXyA9IFN0YXR1c1V0aWxzLm11bHRpU3RhdHVzKCBjb250ZXh0LmdldEVycm9yKCksIHN0YXR1cyApOwotCQkJbW9uaXRvci5yZXBvcnRFcnJvcihzdGF0dXNfKTsKLSAgCQkJcmV0dXJuIGZhbHNlOwotICAJCX0KLSAgCWVsc2UgaWYgKGNvbnRleHQucHJvamVjdFdhcm5Ob25XU0lDb21wbGlhbmNlcyhwcm9qZWN0KSkKLSAgCQl7Ci0gIAkJCS8vIGdpdmUgYSB3YXJuaW5nIG1lc3NhZ2Ugd2l0aCB0aGUgb3B0aW9ucyB0byBzdG9wLCBpZ25vcmUgdGhpcyBvbmUsIG9yIGlnbm9yZSBhbGwgY29taW5nIG1lc3NhZ2VzCi0gIAkJCUlTdGF0dXMgc3RhdHVzXyA9IFN0YXR1c1V0aWxzLm11bHRpU3RhdHVzKCBjb250ZXh0LmdldFdhcm5pbmcoKSwgc3RhdHVzKTsKLQotICAJCQlDaG9pY2UgaWdub3JlQ2hvaWNlID0gbmV3IENob2ljZSgnSScsIFdzdFdTUGx1Z2luTWVzc2FnZXMuSUdOT1JFX0xBQkVMLCBXc3RXU1BsdWdpbk1lc3NhZ2VzLklHTk9SRV9ERVNDUklQVElPTik7Ci0gIAkJCUNob2ljZSBpZ25vcmVBbGxDaG9pY2UgPSBuZXcgQ2hvaWNlKCdBJywgV3N0V1NQbHVnaW5NZXNzYWdlcy5JR05PUkVfQUxMX0xBQkVMLCBXc3RXU1BsdWdpbk1lc3NhZ2VzLklHTk9SRV9BTExfREVTQ1JJUFRJT04pOwotICAJCQlDaG9pY2UgY2FuY2VsQ2hvaWNlID0gbmV3IENob2ljZSgnQycsIFdzdFdTUGx1Z2luTWVzc2FnZXMuQ0FOQ0VMX0xBQkVMLCBXc3RXU1BsdWdpbk1lc3NhZ2VzLkNBTkNFTF9ERVNDUklQVElPTik7Ci0gIAkJCUNob2ljZSByZXN1bHQgPSBtb25pdG9yLnJlcG9ydChzdGF0dXNfLCBuZXcgQ2hvaWNlW117aWdub3JlQ2hvaWNlLCBpZ25vcmVBbGxDaG9pY2UsIGNhbmNlbENob2ljZX0pOwotICAJCQkKLSAgCQkJLy8gaWYgdGhlIHVzZXIgY2xvc2VzIHRoZSBtZXNzYWdlIGJveCBvciBzZWxlY3RzIGlnbm9yZSBjb250aW51ZQotICAJCQlpZiAocmVzdWx0ID09IG51bGwgfHwgKHJlc3VsdC5nZXRMYWJlbCgpLmVxdWFscyhpZ25vcmVDaG9pY2UuZ2V0TGFiZWwoKSkpKQotICAgICAgICAJCQlyZXR1cm4gdHJ1ZTsKLSAgCQkJLy8gaWYgdGhlIHVzZXIgc2VsZWN0cyBpZ25vcmUgYWxsLCBjaGFuZ2UgdGhlIHByZWZlcmVuY2UKLQkgICAgICAgIGVsc2UgIGlmIChyZXN1bHQuZ2V0TGFiZWwoKS5lcXVhbHMoaWdub3JlQWxsQ2hvaWNlLmdldExhYmVsKCkpKQotCSAgICAgICAgCXsKLQkgICAgICAgIAkJY29udGV4dC51cGRhdGVQcm9qZWN0V1NJQ29tcGxpYW5jZXMocHJvamVjdCwgUGVyc2lzdGVudFdTSUNvbnRleHQuSUdOT1JFX05PTl9XU0kpOwotCSAgICAgICAgCQlyZXR1cm4gdHJ1ZTsKLQkgICAgICAgIAl9Ci0JCQkvLyBpZiB0aGUgdXNlciBzZWxlY3RzIHRvIGNhbmNlbCAsIGRvIG5vdCBjb250aW51ZSB3aXRoIHRoZSBjb21tYW5kCi0gICAgICAgIAllbHNlIGlmIChyZXN1bHQuZ2V0TGFiZWwoKS5lcXVhbHMoY2FuY2VsQ2hvaWNlLmdldExhYmVsKCkpKQotCQkJCQkJcmV0dXJuIGZhbHNlOwotICAJCX0KLSAgcmV0dXJuIHRydWU7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9yZWdpc3RyeS9HZW5lcmljUmVzb3VyY2VGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3JlZ2lzdHJ5L0dlbmVyaWNSZXNvdXJjZUZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDUzNmQwZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3JlZ2lzdHJ5L0dlbmVyaWNSZXNvdXJjZUZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucmVnaXN0cnk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FeHRlbmRlZE1ldGFEYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuWE1MUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5pbXBsLlhNTFJlc291cmNlRmFjdG9yeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5pbXBsLlhNTFJlc291cmNlSW1wbDsKLQotLyoqCi0gKiBQYXR0ZXJuZWQgYWZ0ZXIgdGhlIFJlc291cmNlRmFjdG9yeSBjbGFzc2VzIGdlbmVyYXRlZAotICogYnkgdGhlIEVNRiB0b29scywgdGhpcyBnZW5lcmljIGZhY3RvcnkgaGFuZGxlcyBjcmVhdGlvbgotICogb2YgRU1GIHJlc291cmNlcyBmb3IgWE1MIGRvY3VtZW50cyBpbiBnZW5lcmFsLgotICovCi1wdWJsaWMgY2xhc3MgR2VuZXJpY1Jlc291cmNlRmFjdG9yeSBleHRlbmRzIFhNTFJlc291cmNlRmFjdG9yeUltcGwKLXsKLQkvKioKLQkgKiBIb2xkcyBhbiBpbnN0YW5jZSBvZiA8Y29kZT5FeHRlbmRlZE1ldGFEYXRhPC9jb2RlPgotCSAqIGZvciBhc3NvY2lhdGluZyBleHRlbmRlZCBtZXRhZGF0YSB3aXRoIHRoZQotCSAqIDxjb2RlPlJlc291cmNlPC9jb2RlPiByZXR1cm5lZCBieSA8Y29kZT5jcmVhdGVSZXNvdXJjZTwvY29kZT4uCi0JICovCi0JcHJvdGVjdGVkIEV4dGVuZGVkTWV0YURhdGEgZXh0ZW5kZWRNZXRhRGF0YTsKLQotCS8qKgotCSAqIENvbnN0cnVjdHMgYSBuZXcgPGNvZGU+R2VuZXJpY1Jlc291cmNlRmFjdG9yeTwvY29kZT4uCi0JICovCi0JcHVibGljIEdlbmVyaWNSZXNvdXJjZUZhY3RvcnkoKQotCXsKLQkJc3VwZXIoKTsKLQkJZXh0ZW5kZWRNZXRhRGF0YSA9IEV4dGVuZGVkTWV0YURhdGEuSU5TVEFOQ0U7Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlJEZhY3RvcnkjY3JlYXRlUmVzb3VyY2Uob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSSkKLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2UgY3JlYXRlUmVzb3VyY2UoVVJJIHVyaSkKLQl7Ci0JCVhNTFJlc291cmNlIHJlc3VsdCA9IG5ldyBYTUxSZXNvdXJjZUltcGwodXJpKTsKLQkJcmVzdWx0LmdldERlZmF1bHRTYXZlT3B0aW9ucygpLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fRVhURU5ERURfTUVUQV9EQVRBLCBleHRlbmRlZE1ldGFEYXRhKTsKLQkJcmVzdWx0LmdldERlZmF1bHRMb2FkT3B0aW9ucygpLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fRVhURU5ERURfTUVUQV9EQVRBLCBleHRlbmRlZE1ldGFEYXRhKTsKLQkJcmVzdWx0LmdldERlZmF1bHRTYXZlT3B0aW9ucygpLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fU0NIRU1BX0xPQ0FUSU9OLCBCb29sZWFuLlRSVUUpOwotCQlyZXN1bHQuZ2V0RGVmYXVsdFNhdmVPcHRpb25zKCkucHV0KFhNTFJlc291cmNlLk9QVElPTl9VU0VfRU5DT0RFRF9BVFRSSUJVVEVfU1RZTEUsIEJvb2xlYW4uVFJVRSk7Ci0JCXJlc3VsdC5nZXREZWZhdWx0TG9hZE9wdGlvbnMoKS5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX1VTRV9MRVhJQ0FMX0hBTkRMRVIsIEJvb2xlYW4uVFJVRSk7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9yZWdpc3RyeS9JUmVnaXN0cnlNYW5hZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3JlZ2lzdHJ5L0lSZWdpc3RyeU1hbmFnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOThiNzkwMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3JlZ2lzdHJ5L0lSZWdpc3RyeU1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwOTA2ICAgMTQxNzk2IGdpbGJlcnRhQGNhLmlibS5jb20gLSBHaWxiZXJ0IEFuZHJld3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5yZWdpc3RyeTsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXk7Ci0KLS8qKgotICogQW4gSVJlZ2lzdHJ5TWFuYWdlciBtYW5hZ2VzIGEgZmFtaWx5IG9mIDxjb2RlPlJlZ2lzdHJ5PC9jb2RlPgotICogYW5kIDxjb2RlPlRheG9ub215PC9jb2RlPiBtb2RlbHMgcGVyc2lzdGVkIHdpdGhpbiBzb21lCi0gKiBhZGRyZXNzYWJsZSBsb2NhdGlvbiBzdWNoIGFzIHVuZGVyIGEgZGlyZWN0b3J5IGluIHRoZQotICogZmlsZXN5c3RlbSBvciB1bmRlciBhIGZvbGRlciBpbiB0aGUgRWNsaXBzZSB3b3Jrc3BhY2UsCi0gKiBhbmQgcmVmZXJlbmNlZCBmcm9tIGFuIGluZGV4IGRvY3VtZW50IGF0IHRoZSBzYW1lIGxvY2F0aW9uLiAKLSAqIDxwPgotICogQ2FsbCA8Y29kZT5SZWdpc3RlcnlTZXJ2aWNlLmdldERlZmF1bHRSZWdpc3RyeU1hbmFnZXIoKTwvY29kZT4KLSAqIG9yIDxjb2RlPlJlZ2lzdGVyeVNlcnZpY2UuZ2V0UmVnaXN0cnlNYW5hZ2VyKFVSTCk8L2NvZGU+IHRvCi0gKiBnZXQgYSBuZXcgSVJlZ2lzdHJ5TWFuYWdlci4KLSAqIAotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucmVnaXN0cnkuUmVnaXN0cnlTZXJ2aWNlI2luc3RhbmNlKCkKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeQotICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215Ci0gKiBAYXV0aG9yIGNicmVhbGV5Ci0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSVJlZ2lzdHJ5TWFuYWdlcgotewotCS8qKgotCSAqIEEgY29uc3RhbnQgZm9yIHVzZSBpbiB0aGUgPGNvZGU+cmVtb3ZlUmVnaXN0cnkoLi4uKTwvY29kZT4KLQkgKiBhbmQgPGNvZGU+cmVtb3ZlVGF4b25vbXkoLi4uKTwvY29kZT4gbWV0aG9kcyB0aGF0IHdpbGwKLQkgKiBjYXVzZSB0aGUgZ2l2ZW4gcmVnaXN0cnkgb3IgdGF4b25vbXkgZG9jdW1lbnQgdG8gYmUgcmVtb3ZlZAotCSAqIGZyb20gdGhlIGluZGV4LCBidXQgbm90IGRlbGV0ZWQuCi0JICogCi0JICogQHNlZSAjcmVtb3ZlUmVnaXN0cnkoU3RyaW5nLCBib29sZWFuKQotCSAqIEBzZWUgI3JlbW92ZVRheG9ub215KFN0cmluZywgYm9vbGVhbikKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBLRUVQX0RPQ1VNRU5UID0gZmFsc2U7Ci0KLQkvKioKLQkgKiBBIGNvbnN0YW50IGZvciB1c2UgaW4gdGhlIDxjb2RlPnJlbW92ZVJlZ2lzdHJ5KC4uLik8L2NvZGU+Ci0JICogYW5kIDxjb2RlPnJlbW92ZVRheG9ub215KC4uLik8L2NvZGU+IG1ldGhvZHMgdGhhdCB3aWxsCi0JICogY2F1c2UgdGhlIGdpdmVuIHJlZ2lzdHJ5IG9yIHRheG9ub215IGRvY3VtZW50IHRvIGJlIHJlbW92ZWQKLQkgKiBmcm9tIHRoZSBpbmRleCBhbmQgZGVsZXRlZC4KLQkgKiAKLQkgKiBAc2VlICNyZW1vdmVSZWdpc3RyeShTdHJpbmcsIGJvb2xlYW4pCi0JICogQHNlZSAjcmVtb3ZlVGF4b25vbXkoU3RyaW5nLCBib29sZWFuKQotCSAqLwotCXB1YmxpYyBib29sZWFuIERFTEVURV9ET0NVTUVOVCA9IHRydWU7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBVUkwgb2YgdGhlIFhNTCBpbmRleCBkb2N1bWVudCB0aGF0IHJlZmVyZW5jZXMKLQkgKiB0aGUgWE1MIHJlZ2lzdHJ5IGFuZCB0YXhvbm9teSBtb2RlbHMgbWFuYWdlZCBieSB0aGlzCi0JICogUmVnaXN0cnkgTWFuYWdlci4KLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBVUkwgb2YgdGhlIG1hbmFnaW5nIGRvY3VtZW50LgotCSAqIEB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uIElmIGEgVVJMIHRvIHRoZSBtYW5hZ2luZwotCSAqIGRvY3VtZW50IGNhbm5vdCBiZSBkZXRlcm1pbmVkIG9yIGNyZWF0ZWQuCi0JICovCi0JcHVibGljIFVSTCBnZXRVUkwgKCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLQotCS8qKgotCSAqIEFkZHMgYW4gPGNvZGU+SVRheG9ub215RmluZGVyPC9jb2RlPiB0aGF0IHRoZQotCSAqIDxjb2RlPklSZWdpc3RyeU1hbmFnZXI8L2NvZGU+IGNhbiB1c2UgdG8gZmluZAotCSAqIHRoZSBzZXQgb2YgPGNvZGU+VGF4b25vbXk8L2NvZGU+IG1vZGVscyB1c2VkCi0JICogYnkgYSBnaXZlbiA8Y29kZT5SZWdpc3RyeTwvY29kZT4gbW9kZWwuCi0JICogPGNvZGU+SVJlZ2lzdHJ5TWFuYWdlci5zYXZlKHJlZ2lzdHJ5KTwvY29kZT4gbmVlZHMgaGVscCBmaW5kaW5nCi0JICogdGhlIDxjb2RlPlRheG9ub215PC9jb2RlPiBtb2RlbHMgdXNlZCBieSBhIDxjb2RlPlJlZ2lzdHJ5PC9jb2RlPiwKLQkgKiBpZiBhbnkuCi0JICogCi0JICogQHBhcmFtIGNsYXNzTmFtZSBUaGUgbmFtZSBvZiB0aGUgY29uY3JldGUgPGNvZGU+UmVnaXN0cnk8Y29kZT4KLQkgKiBjbGFzcyBmb3Igd2hpY2ggdGhlIDxjb2RlPklUYXhvbm9teUZpbmRlcjwvY29kZT4gaXMgYmVpbmcgYWRkZWQuCi0JICogQHBhcmFtIHRheG9ub215RmluZGVyIEFuIDxjb2RlPklUYXhvbm9teUZpbmRlcjwvY29kZT4gdGhhdCBrbm93cwotCSAqIGhvdyB0byBkZXRlcm1pbmUgdGhlIHNldCBvZiA8Y29kZT5UYXhvbm9teTwvY29kZT4gbW9kZWxzIGEgZ2l2ZW4KLQkgKiBjb25jcmV0ZSA8Y29kZT5SZWdpc3RyeTwvY29kZT4gbW9kZWwgaXMgdXNpbmcuCi0JICogQHNlZSBJVGF4b25vbXlGaW5kZXIKLQkgKiBAc2VlICNzYXZlUmVnaXN0cnkoUmVnaXN0cnkpCi0JICovCi0JcHVibGljIHZvaWQgYWRkVGF4b25vbXlGaW5kZXIgKCBTdHJpbmcgY2xhc3NOYW1lLCBJVGF4b25vbXlGaW5kZXIgdGF4b25vbXlGaW5kZXIgKTsKLQotICAgIC8qKgotICAgICAqIERlc3Ryb3lzIHRoZSBpbmRleCBvZiByZWdpc3RyaWVzIGFuZCB0YXhvbm9taWVzIGluIG1lbW9yeS4KLSAgICAgKiBTdWJzZXF1ZW50IGNhbGxzIHRvIDxjb2RlPmdldEluZGV4KCk8L2NvZGU+IGFuZCBvdGhlciBtZXRob2RzCi0gICAgICogb2YgdGhpcyBpbnRlcmZhY2Ugd2lsbCBjYXVzZSB0aGUgaW5kZXggdG8gYmUgcmVsb2FkZWQuCi0gICAgICogVGhpcyBtZXRob2Qgc2hvdWxkIGJlIGNhbGxlZCBhbnl0aW1lIHRoZSBjYWxsZXIgc3VzcGVjdHMgdGhlCi0gICAgICogcGVyc2lzdGVudCBpbmRleCBoYXMgY2hhbmdlZCBhbmQgd2lzaGVzIHRvIGxvYWQgdGhlIGNoYW5nZXMKLSAgICAgKiBpbnRvIHRoZSBjdXJyZW50IDxjb2RlPklSZWdpc3RyeU1hbmFnZXI8L2NvZGU+LgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHJlZnJlc2hNYW5hZ2VyICgpOwotCi0JLyoqCi0JICogU2F2ZXMgYSA8Y29kZT5UYXhvbm9teTwvY29kZT4gbW9kZWwgdG8gYW4gWE1MIGRvY3VtZW50Ci0JICogbG9jYXRlZCByZWxhdGl2ZSB0byB0aGUgaW5kZXggWE1MIGRvY3VtZW50IGFzIGlkZW50aWZpZWQgYnkKLQkgKiA8Y29kZT5nZXRVUkwoKTwvY29kZT4sIGFuZCB1cGRhdGVzIHRoZSBpbmRleCBYTUwgZG9jdW1lbnQKLQkgKiB3aXRoIHJlZmVyZW5jZXMgdG8gdGhlIHNhdmVkIHRheG9ub215IGRvY3VtZW50LgotCSAqIFRoZSByZWxhdGl2ZSBwYXRobmFtZSB0byB0aGUgdGF4b25vbXkgWE1MIGRvY3VtZW50IGlzCi0JICogY29tcHV0ZWQgYnkgdGhlIDxjb2RlPklSZWdpc3RyeU1hbmFnZXI8L2NvZGU+IGFuZCBjYW5ub3QKLQkgKiBiZSBpbmZsdWVuY2VkIGJ5IHRoZSBjYWxsZXIuCi0JICogCi0JICogQHBhcmFtIHJlZ2lzdHJ5IFRoZSA8Y29kZT5SZWdpc3RyeTwvY29kZT4gbW9kZWwgKGFuZAotCSAqIHJlZmVyZW5jZWQgPGNvZGU+VGF4b25vbXk8L2NvZGU+IG1vZGVscykgdG8gc2F2ZS4KLQkgKiBAcmV0dXJuIEEgPGNvZGU+UmVnaXN0cnk8L2NvZGU+IHJlZmVyZW5jZS4KLQkgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24gSWYgdGhlIG9wZXJhdGlvbiBmYWlscyBmb3IgYW55IHJlYXNvbiwKLQkgKiBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIG1hbGZvcm1lZCBsb2NhdGlvbiBVUklzIGluIHRoZQotCSAqIGluZGV4IG9yIGdlbmVyYWwgaW5wdXQvb3V0cHV0IGVycm9yIGNvbmRpdGlvbnMuCi0JICogQHNlZSBSZWdpc3RyeQotCSAqIEBzZWUgI2FkZFRheG9ub215RmluZGVyKFN0cmluZywgSVRheG9ub215RmluZGVyKQotCSAqLwotCXB1YmxpYyBSZWdpc3RyeSBzYXZlUmVnaXN0cnkgKCBSZWdpc3RyeSByZWdpc3RyeSApIHRocm93cyBDb3JlRXhjZXB0aW9uOwotCi0JLyoqCi0JICogTG9hZHMgYXMgbmVjZXNzYXJ5IGFuZCByZXR1cm5zIGEgZnVsbCA8Y29kZT5SZWdpc3RyeTwvY29kZT4KLQkgKiBtb2RlbCBhcyBpZGVudGlmaWVkIGJ5IHRoZSBnaXZlbiBVUkkgYW5kIHJlZmVyZW5jZWQgZnJvbQotCSAqIHRoZSBpbmRleCBYTUwgZG9jdW1lbnQgbG9jYXRlZCBhdCA8Y29kZT5nZXRVUkwoKTwvY29kZT4uCi0JICogCi0JICogQHBhcmFtIHVyaSBUaGUgVVJJIGlkZW50aWZpZXIgb2YgdGhlIHJlZ2lzdHJ5LgotCSAqIEByZXR1cm4gVGhlIDxjb2RlPlJlZ2lzdHJ5PC9jb2RlPiBtb2RlbAotCSAqIG9yIG51bGwgaWYgbm8gc3VjaCBtb2RlbCBjYW4gYmUgZm91bmQuCi0JICogQHRocm93cyBDb3JlRXhjZXB0aW9uIElmIHRoZSBvcGVyYXRpb24gZmFpbHMgZm9yIGFueSByZWFzb24sCi0JICogaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBtYWxmb3JtZWQgbG9jYXRpb24gVVJJcyBpbiB0aGUKLQkgKiBpbmRleCBvciBnZW5lcmFsIGlucHV0L291dHB1dCBlcnJvciBjb25kaXRpb25zLgotCSAqIEBzZWUgUmVnaXN0cnkKLQkgKi8KLQlwdWJsaWMgUmVnaXN0cnkgbG9hZFJlZ2lzdHJ5ICggU3RyaW5nIHVyaSApIHRocm93cyBDb3JlRXhjZXB0aW9uOwotCi0JLyoqCi0JICogTG9hZHMgYXMgbmVjZXNzYXJ5IGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIGZ1bGwgPGNvZGU+UmVnaXN0cnk8L2NvZGU+Ci0JICogbW9kZWxzIGFzIGlkZW50aWZpZWQgYnkgdGhlIGdpdmVuIGFycmF5IG9mIFVSSXMgYW5kIHJlZmVyZW5jZWQgZnJvbQotCSAqIHRoZSBpbmRleCBYTUwgZG9jdW1lbnQgbG9jYXRlZCBhdCA8Y29kZT5nZXRVUkwoKTwvY29kZT4uCi0JICogVXNlZnVsIGluIGNvbmp1bmN0aW9uIHdpdGggPGNvZGU+Z2V0UmVnaXN0cnlVUklzKCk8L2NvZGU+LgotCSAqIE5vdGUgdGhhdCB0aGUgbGVuZ3RoIG9mIHRoZSByZXR1cm5lZCBhcnJheSBtYXkgYmUgbGVzcyB0aGFuCi0JICogdGhlIGxlbmd0aCBvZiB0aGUgYXJyYXkgb2YgVVJJcyBpbiBjYXNlcyB3aGVyZSBvbmUgb3IgbW9yZQotCSAqIFVSSXMgZmFpbCB0byByZXNvbHZlIHRvIGEgbG9hZGFibGUgbW9kZWwuCi0JICogCi0JICogQHBhcmFtIHVyaXMgVGhlIFVSSSBpZGVudGlmaWVycyBvZiB0aGUgcmVnaXN0cmllcy4KLQkgKiBAcmV0dXJuIFRoZSBhcnJheSBvZiA8Y29kZT5SZWdpc3RyeTwvY29kZT4gbW9kZWxzLAotCSAqIG5ldmVyIG51bGwsIGJ1dCBwb3NzaWJseSBlbXB0eS4KLQkgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24gSWYgdGhlIG9wZXJhdGlvbiBmYWlscyBmb3IgYW55IHJlYXNvbiwKLQkgKiBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIG1hbGZvcm1lZCBsb2NhdGlvbiBVUklzIGluIHRoZQotCSAqIGluZGV4IG9yIGdlbmVyYWwgaW5wdXQvb3V0cHV0IGVycm9yIGNvbmRpdGlvbnMuCi0JICogQHNlZSBSZWdpc3RyeQotCSAqLwotCXB1YmxpYyBSZWdpc3RyeVtdIGxvYWRSZWdpc3RyaWVzICggU3RyaW5nW10gdXJpcyApIHRocm93cyBDb3JlRXhjZXB0aW9uOwotCi0JLyoqCi0JICogUmV0dXJucyBhbiBhcnJheSBvZiBVUkkgaWRlbnRpZmllcnMgdG8gPGNvZGU+UmVnaXN0cnk8L2NvZGU+Ci0JICogbW9kZWxzIGluIHRoZSBpbmRleCBtYW5hZ2VkIGJ5IHRoaXMgPGNvZGU+SVJlZ2lzdHJ5TWFuYWdlcjwvY29kZT4uCi0JICogCi0JICogQHJldHVybiBBbiBhcnJheSBvZiBVUkkgaWRlbnRpZmllcnMsIHBvc3NpYmx5IGVtcHR5IGJ1dCBuZXZlciBudWxsLAotCSAqIHRvIHJlZ2lzdGVyZWQgPGNvZGU+UmVnaXN0cnk8L2NvZGU+IG1vZGVscy4KLQkgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24gSWYgdGhlIG9wZXJhdGlvbiBmYWlscyBmb3IgYW55IHJlYXNvbiwKLQkgKiBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIG1hbGZvcm1lZCBsb2NhdGlvbiBVUklzIGluIHRoZQotCSAqIGluZGV4IG9yIGdlbmVyYWwgaW5wdXQvb3V0cHV0IGVycm9yIGNvbmRpdGlvbnMuCi0JICogQHNlZSBSZWdpc3RyeQotCSAqLwotCXB1YmxpYyBTdHJpbmdbXSBnZXRSZWdpc3RyeVVSSXMgKCkgdGhyb3dzIENvcmVFeGNlcHRpb247Ci0KLQkvKioKLQkgKiBSZW1vdmVzIHRoZSA8Y29kZT5SZWdpc3RyeTwvY29kZT4gbW9kZWwgaWRlbnRpZmllZCBieSB0aGUKLQkgKiBnaXZlbiA8Y29kZT51cmk8L2NvZGU+IGZyb20gdGhlIGluZGV4IGFuZCBlaXRoZXIga2VlcHMgb3IKLQkgKiBkZWxldGVzIHRoZSBjb3JyZXNwb25kaW5nIDxjb2RlPlJlZ2lzdHJ5PC9jb2RlPiBkb2N1bWVudAotCSAqIGJhc2VkIG9uIHRoZSB2YWx1ZSBnaXZlbiBmb3IgPGNvZGU+ZGVsZXRlRG9jdW1lbnQ8L2NvZGU+LgotCSAqIAotCSAqIEBwYXJhbSB1cmkgVGhlIFVSSSBpZGVudGlmaWVyIG9mIHRoZSBtb2RlbCB0byBkZWxldGUuCi0JICogQHBhcmFtIGRlbGV0ZURvY3VtZW50IEVpdGhlciA8Y29kZT5LRUVQX0RPQ1VNRU5UPC9jb2RlPgotCSAqIG9yIDxjb2RlPkRFTEVURV9ET0NVTUVOVDwvY29kZT4gZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlCi0JICogbW9kZWwgZG9jdW1lbnQgc2hvdWxkIGJlIGtlcHQgb3IgZGVsZXRlZC4KLQkgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24gSWYgdGhlIG9wZXJhdGlvbiBmYWlscyBmb3IgYW55IHJlYXNvbiwKLQkgKiBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIG1hbGZvcm1lZCBsb2NhdGlvbiBVUklzIGluIHRoZQotCSAqIGluZGV4IG9yIGdlbmVyYWwgaW5wdXQvb3V0cHV0IGVycm9yIGNvbmRpdGlvbnMuCi0JICogQHNlZSBSZWdpc3RyeQotCSAqIEBzZWUgI0tFRVBfRE9DVU1FTlQKLQkgKiBAc2VlICNERUxFVEVfRE9DVU1FTlQKLQkgKi8KLQlwdWJsaWMgdm9pZCByZW1vdmVSZWdpc3RyeSAoIFN0cmluZyB1cmksIGJvb2xlYW4gZGVsZXRlRG9jdW1lbnQgKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbjsKLQotCS8qKgotCSAqIFNhdmVzIGEgPGNvZGU+VGF4b25vbXk8L2NvZGU+IG1vZGVsIHRvIGFuIFhNTCBkb2N1bWVudAotCSAqIGxvY2F0ZWQgcmVsYXRpdmUgdG8gdGhlIGluZGV4IFhNTCBkb2N1bWVudCBhcyBpZGVudGlmaWVkIGJ5Ci0JICogPGNvZGU+Z2V0VVJMKCk8L2NvZGU+LCBhbmQgdXBkYXRlcyB0aGUgaW5kZXggWE1MIGRvY3VtZW50Ci0JICogd2l0aCByZWZlcmVuY2VzIHRvIHRoZSBzYXZlZCB0YXhvbm9teSBkb2N1bWVudC4KLQkgKiBUaGUgcmVsYXRpdmUgcGF0aG5hbWUgdG8gdGhlIHRheG9ub215IFhNTCBkb2N1bWVudCBpcwotCSAqIGNvbXB1dGVkIGJ5IHRoZSA8Y29kZT5JUmVnaXN0cnlNYW5hZ2VyPC9jb2RlPiBhbmQgY2Fubm90Ci0JICogYmUgaW5mbHVlbmNlZCBieSB0aGUgY2FsbGVyLgotCSAqIAotCSAqIEBwYXJhbSB0YXhvbm9teSBUaGUgPGNvZGU+VGF4b25vbXk8L2NvZGU+IG1vZGVsIHRvIHNhdmUuCi0JICogQHJldHVybiBBIDxjb2RlPlRheG9ub215PC9jb2RlPiByZWZlcmVuY2UuCi0JICogQHRocm93cyBDb3JlRXhjZXB0aW9uIElmIHRoZSBvcGVyYXRpb24gZmFpbHMgZm9yIGFueSByZWFzb24sCi0JICogaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBtYWxmb3JtZWQgbG9jYXRpb24gVVJJcyBpbiB0aGUKLQkgKiBpbmRleCBvciBnZW5lcmFsIGlucHV0L291dHB1dCBlcnJvciBjb25kaXRpb25zLgotCSAqIEBzZWUgVGF4b25vbXkKLQkgKi8KLQlwdWJsaWMgVGF4b25vbXkgc2F2ZVRheG9ub215ICggVGF4b25vbXkgdGF4b25vbXkgKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbjsKLQotCS8qKgotCSAqIExvYWRzIGFzIG5lY2Vzc2FyeSBhbmQgcmV0dXJucyBhIGZ1bGwgPGNvZGU+VGF4b25vbXk8L2NvZGU+Ci0JICogbW9kZWwgYXMgaWRlbnRpZmllZCBieSB0aGUgZ2l2ZW4gVVJJIGFuZCByZWZlcmVuY2VkIGZyb20KLQkgKiB0aGUgaW5kZXggWE1MIGRvY3VtZW50IGxvY2F0ZWQgYXQgPGNvZGU+Z2V0VVJMKCk8L2NvZGU+LgotCSAqIAotCSAqIEBwYXJhbSB1cmkgVGhlIFVSSSBpZGVudGlmaWVyIG9mIHRoZSB0YXhvbm9teS4KLQkgKiBAcmV0dXJuIFRoZSA8Y29kZT5UYXhvbm9teTwvY29kZT4gbW9kZWwKLQkgKiBvciBudWxsIGlmIG5vIHN1Y2ggbW9kZWwgY2FuIGJlIGZvdW5kLgotCSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbiBJZiB0aGUgb3BlcmF0aW9uIGZhaWxzIGZvciBhbnkgcmVhc29uLAotCSAqIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gbWFsZm9ybWVkIGxvY2F0aW9uIFVSSXMgaW4gdGhlCi0JICogaW5kZXggb3IgZ2VuZXJhbCBpbnB1dC9vdXRwdXQgZXJyb3IgY29uZGl0aW9ucy4KLQkgKiBAc2VlIFRheG9ub215Ci0JICovCi0JcHVibGljIFRheG9ub215IGxvYWRUYXhvbm9teSAoIFN0cmluZyB1cmkgKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbjsKLQotCS8qKgotCSAqIExvYWRzIGFzIG5lY2Vzc2FyeSBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiBmdWxsIDxjb2RlPlRheG9ub215PC9jb2RlPgotCSAqIG1vZGVscyBhcyBpZGVudGlmaWVkIGJ5IHRoZSBnaXZlbiBhcnJheSBvZiBVUklzIGFuZCByZWZlcmVuY2VkIGZyb20KLQkgKiB0aGUgaW5kZXggWE1MIGRvY3VtZW50IGxvY2F0ZWQgYXQgPGNvZGU+Z2V0VVJMKCk8L2NvZGU+LgotCSAqIFVzZWZ1bCBpbiBjb25qdW5jdGlvbiB3aXRoIDxjb2RlPmdldFRheG9ub215VVJJcygpPC9jb2RlPi4KLQkgKiBOb3RlIHRoYXQgdGhlIGxlbmd0aCBvZiB0aGUgcmV0dXJuZWQgYXJyYXkgbWF5IGJlIGxlc3MgdGhhbgotCSAqIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5IG9mIFVSSXMgaW4gY2FzZXMgd2hlcmUgb25lIG9yIG1vcmUKLQkgKiBVUklzIGZhaWwgdG8gcmVzb2x2ZSB0byBhIGxvYWRhYmxlIG1vZGVsLiAKLQkgKiAKLQkgKiBAcGFyYW0gdXJpcyBUaGUgVVJJIGlkZW50aWZpZXJzIG9mIHRoZSB0YXhvbm9taWVzLgotCSAqIEByZXR1cm4gVGhlIGFycmF5IG9mIDxjb2RlPlRheG9ub215PC9jb2RlPiBtb2RlbHMsCi0JICogbmV2ZXIgbnVsbCwgYnV0IHBvc3NpYmx5IGVtcHR5LgotCSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbiBJZiB0aGUgb3BlcmF0aW9uIGZhaWxzIGZvciBhbnkgcmVhc29uLAotCSAqIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gbWFsZm9ybWVkIGxvY2F0aW9uIFVSSXMgaW4gdGhlCi0JICogaW5kZXggb3IgZ2VuZXJhbCBpbnB1dC9vdXRwdXQgZXJyb3IgY29uZGl0aW9ucy4KLQkgKiBAc2VlIFJlZ2lzdHJ5Ci0JICovCi0JcHVibGljIFRheG9ub215W10gbG9hZFRheG9ub21pZXMgKCBTdHJpbmdbXSB1cmlzICkgdGhyb3dzIENvcmVFeGNlcHRpb247Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGFuIGFycmF5IG9mIFVSSSBpZGVudGlmaWVycyB0byA8Y29kZT5UYXhvbm9teTwvY29kZT4KLQkgKiBtb2RlbHMgaW4gdGhlIGluZGV4IG1hbmFnZWQgYnkgdGhpcyA8Y29kZT5JUmVnaXN0cnlNYW5hZ2VyPC9jb2RlPi4KLQkgKiAKLQkgKiBAcmV0dXJuIEFuIGFycmF5IG9mIFVSSSBpZGVudGlmaWVycywgcG9zc2libHkgZW1wdHkgYnV0IG5ldmVyIG51bGwsCi0JICogdG8gcmVnaXN0ZXJlZCA8Y29kZT5UYXhvbm9teTwvY29kZT4gbW9kZWxzLgotCSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbiBJZiB0aGUgb3BlcmF0aW9uIGZhaWxzIGZvciBhbnkgcmVhc29uLAotCSAqIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gbWFsZm9ybWVkIGxvY2F0aW9uIFVSSXMgaW4gdGhlCi0JICogaW5kZXggb3IgZ2VuZXJhbCBpbnB1dC9vdXRwdXQgZXJyb3IgY29uZGl0aW9ucy4KLQkgKiBAc2VlIFRheG9ub215Ci0JICovCi0JcHVibGljIFN0cmluZ1tdIGdldFRheG9ub215VVJJcyAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbjsKLQotCS8qKgotCSAqIFJlbW92ZXMgdGhlIDxjb2RlPlRheG9ub215PC9jb2RlPiBtb2RlbCBpZGVudGlmaWVkIGJ5IHRoZQotCSAqIGdpdmVuIDxjb2RlPnVyaTwvY29kZT4gZnJvbSB0aGUgaW5kZXggYW5kIGVpdGhlciBrZWVwcyBvcgotCSAqIGRlbGV0ZXMgdGhlIGNvcnJlc3BvbmRpbmcgPGNvZGU+VGF4b25vbXk8L2NvZGU+IGRvY3VtZW50Ci0JICogYmFzZWQgb24gdGhlIHZhbHVlIGdpdmVuIGZvciA8Y29kZT5kZWxldGVEb2N1bWVudDwvY29kZT4uCi0JICogCi0JICogQHBhcmFtIHVyaSBUaGUgVVJJIGlkZW50aWZpZXIgb2YgdGhlIG1vZGVsIHRvIGRlbGV0ZS4KLQkgKiBAcGFyYW0gZGVsZXRlRG9jdW1lbnQgRWl0aGVyIDxjb2RlPktFRVBfRE9DVU1FTlQ8L2NvZGU+Ci0JICogb3IgPGNvZGU+REVMRVRFX0RPQ1VNRU5UPC9jb2RlPiBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUKLQkgKiBtb2RlbCBkb2N1bWVudCBzaG91bGQgYmUga2VwdCBvciBkZWxldGVkLgotCSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbiBJZiB0aGUgb3BlcmF0aW9uIGZhaWxzIGZvciBhbnkgcmVhc29uLAotCSAqIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gbWFsZm9ybWVkIGxvY2F0aW9uIFVSSXMgaW4gdGhlCi0JICogaW5kZXggb3IgZ2VuZXJhbCBpbnB1dC9vdXRwdXQgZXJyb3IgY29uZGl0aW9ucy4KLQkgKiBAc2VlIFRheG9ub215Ci0JICogQHNlZSAjS0VFUF9ET0NVTUVOVAotCSAqIEBzZWUgI0RFTEVURV9ET0NVTUVOVAotCSAqLwotCXB1YmxpYyB2b2lkIHJlbW92ZVRheG9ub215ICggU3RyaW5nIHVyaSwgYm9vbGVhbiBkZWxldGVEb2N1bWVudCApIHRocm93cyBDb3JlRXhjZXB0aW9uOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9yZWdpc3RyeS9JVGF4b25vbXlGaW5kZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcmVnaXN0cnkvSVRheG9ub215RmluZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3OGZjYzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9yZWdpc3RyeS9JVGF4b25vbXlGaW5kZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucmVnaXN0cnk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXk7Ci0KLS8qKgotICogQW4gPGNvZGU+SVRheG9ub215RmluZGVyPC9jb2RlPiBjb21wdXRlcyB0aGUgc2V0IG9mCi0gKiA8Y29kZT5UYXhvbm9teTwvY29kZT4gbW9kZWxzIHJlZmVyZW5jZWQgb3IgdXNlZCBieSBhCi0gKiA8Y29kZT5SZWdpc3RyeTwvY29kZT4uCi0gKiBAYXV0aG9yIGdpbGJlcnRhQGNhLmlibS5jb20KLSAqIEBzZWUgSVJlZ2lzdHJ5TWFuYWdlcgotICovCi1wdWJsaWMgaW50ZXJmYWNlIElUYXhvbm9teUZpbmRlcgotewotCS8qKgotCSAqIFJldHVybnMgYW4gYXJyYXkgdGF4b25vbWllcyB1c2VkIGJ5IHRoZSBnaXZlbgotCSAqIDxjb2RlPnJlZ2lzdHJ5PC9jb2RlPi4gVGhpcyBtZXRob2QgbmV2ZXIgcmV0dXJucyBudWxsLgotCSAqCi0JICogQHBhcmFtIHJlZ2lzdHJ5IFRoZSA8Y29kZT5SZWdpc3RyeTwvY29kZT4gZm9yIHdoaWNoCi0JICogYSBzZXQgb2YgdGF4b25vbWllcyBtaWdodCBiZSBmb3VuZC4KLQkgKiBAcmV0dXJuIFRoZSBhcnJheSBvZiB0YXhvbm9taWVzLCBwb3NzaWJseSBlbXB0eS4KLQkgKi8KLQlwdWJsaWMgVGF4b25vbXlbXSB0YXhvbm9taWVzICggUmVnaXN0cnkgcmVnaXN0cnkgKTsJCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9yZWdpc3RyeS9SZWdpc3RyeU1hbmFnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcmVnaXN0cnkvUmVnaXN0cnlNYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4M2NjZDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9yZWdpc3RyeS9SZWdpc3RyeU1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUzMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwNTE3ICAgMTMxNTgyIG1haHV0Y2hAY2EuaWJtLmNvbSAtIE1hcmsgSHV0Y2hpbnNvbgotICogMjAwNjA5MDYgICAxNDE3OTYgZ2lsYmVydGFAY2EuaWJtLmNvbSAtIEdpbGJlcnQgQW5kcmV3cwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnJlZ2lzdHJ5OwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguSW5kZXg7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LlJUSW5kZXhGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbi5XU1BsdWdpbjsKLQotLyoqCi0gKiBBIHR5cGljYWwgaW1wbGVtZW50YXRpb24gb2YgPGNvZGU+SVJlZ2lzdHJ5TWFuYWdlcjwvY29kZT4uCi0gKiBAYXV0aG9yIGNicmVhbGV5Ci0gKiBAc2VlIElSZWdpc3RyeU1hbmFnZXIKLSAqLwotcHVibGljIGNsYXNzIFJlZ2lzdHJ5TWFuYWdlciBpbXBsZW1lbnRzIElSZWdpc3RyeU1hbmFnZXIKLXsKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgUkVHSVNUUlkgPSAiUmVnaXN0cnkiOwotCXByaXZhdGUgc3RhdGljIFN0cmluZyBUQVhPTk9NWSA9ICJUYXhvbm9teSI7Ci0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIFhNTCA9ICJ4bWwiOwotCXByaXZhdGUgSGFzaHRhYmxlIHRheG9ub215RmluZGVyc187Ci0JcHJpdmF0ZSBJbmRleCBpbmRleF87Ci0JcHJpdmF0ZSBHZW5lcmljUmVzb3VyY2VGYWN0b3J5IHJlc291cmNlRmFjdG9yeV8gPSBuZXcgR2VuZXJpY1Jlc291cmNlRmFjdG9yeSgpOwotCXByaXZhdGUgVVJMIHJlZ2lzdHJ5VVJMXz0gbnVsbDsKLQlwcml2YXRlIFN0cmluZyByZWdpc3RyeVBhdGhuYW1lXyA9IG51bGw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RzIGEgbmV3IFJlZ2lzdHJ5TWFuYWdlciBmb3IgdGhlIGluZGV4IFhNTCBmaWxlCi0JICogYXQgdGhlIGdpdmVuIDxjb2RlPnVybDwvY29kZT4uCi0JICogQHBhcmFtIHVybCBUaGUgVVJMIHRvIHRoZSBpbmRleCBYTUwgZmlsZS4KLQkgKi8KLQlSZWdpc3RyeU1hbmFnZXIgKCBVUkwgdXJsICkKLQl7Ci0JCXJlZ2lzdHJ5VVJMXyA9IHVybDsKLQkJdGF4b25vbXlGaW5kZXJzXyA9IG5ldyBIYXNodGFibGUoKTsKLQl9Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RzIGEgbmV3IFJlZ2lzdHJ5TWFuYWdlciBmb3IgdGhlIGluZGV4IFhNTCBmaWxlCi0JICogYXQgdGhlIGdpdmVuIDxjb2RlPnBhdGhuYW1lPC9jb2RlPi4KLQkgKiBAcGFyYW0gcGF0aG5hbWUgVGhlIHBhdGhuYW1lIHRvIHRoZSBpbmRleCBYTUwgZmlsZS4KLQkgKi8KLQlSZWdpc3RyeU1hbmFnZXIgKCBTdHJpbmcgcGF0aG5hbWUgKQotCXsKLQkJcmVnaXN0cnlQYXRobmFtZV8gPSBwYXRobmFtZTsKLQkJdGF4b25vbXlGaW5kZXJzXyA9IG5ldyBIYXNodGFibGUoKTsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucmVnaXN0cnkuSVJlZ2lzdHJ5TWFuYWdlciNnZXRVUkwoKQotCSAqLwotCXB1YmxpYyBVUkwgZ2V0VVJMICgpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24KLQl7Ci0JCWlmIChyZWdpc3RyeVVSTF8gPT0gbnVsbCkKLQkJewotCQkJcmVnaXN0cnlVUkxfID0gbmV3IEZpbGUocmVnaXN0cnlQYXRobmFtZV8pLnRvVVJMKCk7Ci0JCX0KLQkJcmV0dXJuIHJlZ2lzdHJ5VVJMXzsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGFuIGFic29sdXRlIFVSTCBjb21wdXRlZCBmcm9tIHRoZSBhYnNvbHV0ZSBVUkwgb2YgdGhlCi0JICogaW5kZXggWE1MIGRvY3VtZW50IG1hbmFnZWQgYnkgdGhpcyA8Y29kZT5SZWdpc3RyeU1hbmFnZXI8L2NvZGU+Ci0JICogYW5kIHRoZSBnaXZlbiA8Y29kZT5pZDwvY29kZT4uIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZGV0ZXJtaW5lCi0JICogYSByZWFzb25hYmxlIGxvY2F0aW9uIFVSTCBmb3IgcmVnaXN0cnkgYW5kIHRheG9ub215IGRvY3VtZW50cwotCSAqIHdoZW4gcmVmZXJlbmNlcyB0byB0aGVtIGFyZSBmaXJzdCB0byBiZSBhZGRlZCB0byB0aGUgaW5kZXggWE1MCi0JICogZG9jdW1lbnQuIFRoaXMgbWV0aG9kIGlzIGlkZW1wb3RlbnQgaW5zb2ZhciBhcyBpdCB3aWxsIGFsd2F5cwotCSAqIGNvbXB1dGUgdGhlIHNhbWUgVVJMIGZvciBhIGdpdmVuIDxjb2RlPlJlZ2lzdHJ5TWFuYWdlcjwvY29kZT4KLQkgKiBhbmQgYSBnaXZlbiA8Y29kZT5pZDwvY29kZT4uCi0JICogCi0JICogQHBhcmFtIGlkIFRoZSBpZCBvZiB0aGUgcmVmZXJlbmNlZCByZWdpc3RyeSBvciB0YXhvbm9teSBkb2N1bWVudC4gCi0JICogQHJldHVybiBUaGUgYWJzb2x1dGUgVVJMIHRvIHRoZSByZWZlcmVuY2VkIGRvY3VtZW50LgotCSAqIEB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uIElmIGEgdmlhYmxlIGFic29sdXRlIFVSTCBjYW5ub3QKLQkgKiBiZSBjb21wdXRlZC4KLQkgKi8KLQlwcml2YXRlIFVSTCBnZXRVUkwgKCBTdHJpbmcgaWQgKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uCi0JewotCQlTdHJpbmcgYmFzZVVybCA9ICIiOyAKLQkJVVJMIGluZGV4VXJsID0gZ2V0VVJMKCk7Ci0JCVN0cmluZyBpbmRleFN0cmluZyA9IGluZGV4VXJsLnRvU3RyaW5nKCk7Ci0JCWludCBpbmRleCA9IGluZGV4U3RyaW5nLmxhc3RJbmRleE9mKCIvIik7IAotCQliYXNlVXJsID0gaW5kZXhTdHJpbmcuc3Vic3RyaW5nKDAsaW5kZXggKyAxKTsKLQkJU3RyaW5nIHVybFN0cmluZyA9IGJhc2VVcmwgKyBpZCArICIuIiArIFhNTDsKLQkJcmV0dXJuIG5ldyBVUkwodXJsU3RyaW5nKTsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucmVnaXN0cnkuSVJlZ2lzdHJ5TWFuYWdlciNyZWZyZXNoTWFuYWdlcigpCi0JICovCi0JcHVibGljIHZvaWQgcmVmcmVzaE1hbmFnZXIgKCkKLQl7Ci0JCWluZGV4XyA9IG51bGw7Ci0JfQotCQotCS8qKgotCSAqIENhY2hlcyBhbmQgcmV0dXJucyB0aGUgaW5kZXggbW9kZWwuIE9uIGZpcnN0IGNhbGwsCi0JICogaWYgYW4gaW5kZXggZG9jdW1lbnQgZXhpc3RzLCB0aGUgaW5kZXggaXMgbG9hZGVkCi0JICogZnJvbSBpdCwgb3RoZXJ3aXNlLCBhIG5ldyBpbmRleCBpcyByZXR1cm5lZC4KLQkgKiBAcmV0dXJuIFRoZSBpbmRleC4KLQkgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24gSWYgdGhlIGluZGV4IGNhbm5vdCBiZSBsb2FkZWQgZm9yIGFueSByZWFzb24uCi0JICovCi0JcHJpdmF0ZSBJbmRleCBnZXRJbmRleCAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJaWYgKGluZGV4XyA9PSBudWxsKQotCQl7Ci0JCQl0cnkKLQkJCXsKLQkJCQlVUkwgaW5kZXhVUkwgPSBnZXRVUkwoKTsKLQkJCQlpZiAoUmVnaXN0cnlTZXJ2aWNlLmV4aXN0cyhpbmRleFVSTCkpCi0JCQkJewotCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlRmFjdG9yeV8uY3JlYXRlUmVzb3VyY2UoVVJJLmNyZWF0ZVVSSSgiKi54bWwiKSk7Ci0JCQkJCXJlc291cmNlLmxvYWQoUmVnaXN0cnlTZXJ2aWNlLmdldElucHV0U3RyZWFtRm9yKGluZGV4VVJMKSxudWxsKTsKLQkJCQkJb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRvY3VtZW50Um9vdCBkb2N1bWVudCA9IChvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguRG9jdW1lbnRSb290KXJlc291cmNlLmdldENvbnRlbnRzKCkuZ2V0KDApOwotCQkJCQlpbmRleF8gPSBkb2N1bWVudC5nZXRJbmRleCgpOwotCQkJCX0KLQkJCQllbHNlCi0JCQkJewotCQkJCQlpbmRleF8gPSBSVEluZGV4RmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlSW5kZXgoKTsKLQkJCQl9Ci0JCQl9Ci0JCQljYXRjaCAoSU9FeGNlcHRpb24gZSkKLQkJCXsKLQkJCQkvL1RPRE86IE5lZWQgYSBtZXNzYWdlIGZvciB0aGlzIFN0YXR1cy4KLQkJCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsV1NQbHVnaW4uSUQsMCwiIixlKSk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGluZGV4XzsKLQl9Ci0KLQkvKioKLQkgKiBTYXZlcyB0aGUgaW5kZXggbW9kZWwgdG8gYW4gWE1MIGRvY3VtZW50LgkKLQkgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24gSWYgdGhlIHNhdmUgZmFpbHMgZm9yIGFueSByZWFzb24uCi0JICovCi0JcHJpdmF0ZSB2b2lkIHNhdmVJbmRleCAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5ydGluZGV4LkRvY3VtZW50Um9vdCBkb2N1bWVudCA9IFJUSW5kZXhGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVEb2N1bWVudFJvb3QoKTsKLQkJZG9jdW1lbnQuc2V0SW5kZXgoZ2V0SW5kZXgoKSk7Ci0JCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VGYWN0b3J5Xy5jcmVhdGVSZXNvdXJjZShVUkkuY3JlYXRlVVJJKCIqLnhtbCIpKTsKLQkJcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5hZGQoZG9jdW1lbnQpOwotCQl0cnkKLQkJewotCQkJcmVzb3VyY2Uuc2F2ZShSZWdpc3RyeVNlcnZpY2UuZ2V0T3V0cHV0U3RyZWFtRm9yKGdldFVSTCgpKSxudWxsKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkKLQkJewotCQkJLy9UT0RPOiBOZWVkIGEgbWVzc2FnZSBmb3IgdGhpcyBTdGF0dXMuCi0JCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsV1NQbHVnaW4uSUQsMCwiIixlKSk7Ci0JCX0KLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnJlZ2lzdHJ5LklSZWdpc3RyeU1hbmFnZXIjYWRkVGF4b25vbXlGaW5kZXIoamF2YS5sYW5nLlN0cmluZywgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnJlZ2lzdHJ5LklUYXhvbm9teUZpbmRlcikKLQkgKi8KLQlwdWJsaWMgdm9pZCBhZGRUYXhvbm9teUZpbmRlcihTdHJpbmcgY2xhc3NOYW1lLCBJVGF4b25vbXlGaW5kZXIgdGF4b25vbXlGaW5kZXIpCi0JewotCQl0YXhvbm9teUZpbmRlcnNfLnB1dChjbGFzc05hbWUsdGF4b25vbXlGaW5kZXIpOwotCX0KLQkKLQkvKioKLQkgKiBBZGRzIHRoZSBnaXZlbiA8Y29kZT5yZWdpc3RyeTwvY29kZT4gYXMtaXMsIHdoZXRoZXIgZnVsbCBtb2RlbAotCSAqIG9yIHJlZmVyZW5jZSwgdG8gdGhlIGluZGV4IG9ubHkgaWYgYSByZWdpc3RyeSB3aXRoIHRoZSBzYW1lIElECi0JICogb3IgcmVmZXJlbmNlIGlzIG5vdCBhbHJlYWR5IHN0b3JlZCB0aGVyZS4KLQkgKiBAcGFyYW0gcmVnaXN0cnkgVGhlIHJlZ2lzdHJ5IHRvIGFkZC4KLQkgKi8KLQlwcml2YXRlIHZvaWQgYWRkUmVnaXN0cnlUb0luZGV4KFJlZ2lzdHJ5IHJlZ2lzdHJ5KSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJU3RyaW5nIGlkID0gcmVnaXN0cnkuZ2V0SWQoKTsKLQkJaWYgKGlkID09IG51bGwpIGlkID0gcmVnaXN0cnkuZ2V0UmVmKCk7Ci0JCWlmIChpZCAhPSBudWxsICYmIGdldFJlZ2lzdHJ5KGlkKSA9PSBudWxsKQotCQl7Ci0JCQlnZXRJbmRleCgpLmdldFJlZ2lzdHJ5KCkuYWRkKHJlZ2lzdHJ5KTsKLQkJfQotCX0KLQkKLQkvKioKLQkgKiBBZGRzIHRoZSBnaXZlbiA8Y29kZT50YXhvbm9teTwvY29kZT4gYXMtaXMsIHdoZXRoZXIgZnVsbCBtb2RlbAotCSAqIG9yIHJlZmVyZW5jZSwgdG8gdGhlIGluZGV4IG9ubHkgaWYgYSB0YXhvbm9teSB3aXRoIHRoZSBzYW1lIElECi0JICogb3IgcmVmZXJlbmNlIGlzIG5vdCBhbHJlYWR5IHN0b3JlZCB0aGVyZS4KLQkgKiBAcGFyYW0gdGF4b25vbXkgVGhlIHRheG9ub215IHRvIGFkZC4KLQkgKi8KLQlwcml2YXRlIHZvaWQgYWRkVGF4b25vbXlUb0luZGV4KFRheG9ub215IHRheG9ub215KSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJU3RyaW5nIGlkID0gdGF4b25vbXkuZ2V0SWQoKTsKLQkJaWYgKGlkID09IG51bGwpIGlkID0gdGF4b25vbXkuZ2V0UmVmKCk7Ci0JCWlmIChpZCAhPSBudWxsICYmIGdldFRheG9ub215KGlkKSA9PSBudWxsKQotCQl7Ci0JCSAJZ2V0SW5kZXgoKS5nZXRUYXhvbm9teSgpLmFkZCh0YXhvbm9teSk7CQotCQl9Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5yZWdpc3RyeS5JUmVnaXN0cnlNYW5hZ2VyI3NhdmVSZWdpc3RyeShvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5KQotCSAqLwotCXB1YmxpYyBSZWdpc3RyeSBzYXZlUmVnaXN0cnkgKCBSZWdpc3RyeSByZWdpc3RyeSApIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlSZWdpc3RyeVNlcnZpY2UgcmVnaXN0cnlTZXJ2aWNlID0gUmVnaXN0cnlTZXJ2aWNlLmluc3RhbmNlKCk7Ci0JCVJlZ2lzdHJ5IHJlZ2lzdHJ5UmVmID0gbnVsbDsKLQkJdHJ5Ci0JCXsKLQkJCVVSTCB1cmwgPSBnZXRVUkwoUkVHSVNUUlkgKyByZWdpc3RyeS5nZXRJZCgpKTsKLQkJCXJlZ2lzdHJ5U2VydmljZS5zYXZlUmVnaXN0cnkodXJsLHJlZ2lzdHJ5KTsKLQkJCXJlZ2lzdHJ5UmVmID0gcmVnaXN0cnlTZXJ2aWNlLm5ld1JlZ2lzdHJ5UmVmZXJlbmNlKHJlZ2lzdHJ5KTsKLQkJCXJlZ2lzdHJ5UmVmLnNldExvY2F0aW9uKHVybC50b1N0cmluZygpKTsKLQkJCWFkZFJlZ2lzdHJ5VG9JbmRleChyZWdpc3RyeVJlZik7Ci0JCQlzYXZlSW5kZXgoKTsKLQkJCS8qCi0JCQkgKiBUT0RPOiBUaGUgZm9sbG93aW5nIHBpbGUgb2YgY29kZSBpcyBjb21tZW50ZWQgb3V0Ci0JCQkgKiBzaW5jZSB0aGVyZSBpc24ndCBhIHJlbGlhYmxlIHdheSB1bmRlciB0aGUgY3VycmVudAotCQkJICogZGVzaWduIHRvIHNhdmUgdGF4b25vbXkgbW9kZWxzIGhlbGQgaW4gYSByZWdpc3RyeSBtb2RlbAotCQkJICogCi0JCQlJVGF4b25vbXlGaW5kZXIgZmluZGVyID0gKElUYXhvbm9teUZpbmRlcil0YXhvbm9teUZpbmRlcnNfLmdldChyZWdpc3RyeS5nZXRDbGFzcygpLmdldE5hbWUoKSk7Ci0JCQlpZiAoZmluZGVyICE9IG51bGwpCi0JCQl7Ci0JCQkJVGF4b25vbXlbXSB0YXhvbm9taWVzID0gZmluZGVyLnRheG9ub21pZXMocmVnaXN0cnkpOwotCQkJCWZvciAoaW50IGk9MDsgaTx0YXhvbm9taWVzLmxlbmd0aDsgaSsrKQotCQkJCXsKLQkJCQkJU3RyaW5nIGlkID0gdGF4b25vbWllc1tpXS5nZXRJZCgpOwotCQkJCQlTdHJpbmcgcmVmID0gdGF4b25vbWllc1tpXS5nZXRSZWYoKTsKLQkJCQkJaWYgKGlkICE9IG51bGwpCi0JCQkJCXsKLQkJCQkJCVVSTCB0YXhvbm9teVVSTCA9IGdldFVSTChUQVhPTk9NWSArIGlkKTsKLQkJCQkJCXJlZ2lzdHJ5U2VydmljZS5zYXZlVGF4b25vbXkodGF4b25vbXlVUkwsdGF4b25vbWllc1tpXSk7Ci0JCQkJCQlUYXhvbm9teSB0YXhvbm9teVJlZiA9IHJlZ2lzdHJ5U2VydmljZS5uZXdUYXhvbm9teVJlZmVyZW5jZSh0YXhvbm9taWVzW2ldKTsKLQkJCQkJCXRheG9ub215UmVmLnNldExvY2F0aW9uKHRheG9ub215VVJMLnRvU3RyaW5nKCkpOwotCQkJCQkJYWRkVGF4b25vbXlUb0luZGV4KHRheG9ub215UmVmKTsKLQkJCQkJfQotCQkJCQllbHNlIGlmIChyZWYgIT0gbnVsbCkKLQkJCQkJewotCQkJCQkJaWYgKHRheG9ub21pZXNbaV0uZ2V0TG9jYXRpb24oKSA9PSBudWxsKQotCQkJCQkJewotCQkJCQkJCVN0cmluZyBsb2NhdGlvbiA9IG51bGw7Ci0JCQkJCQkJVGF4b25vbXkgdGF4b25vbXkgPSBnZXRUYXhvbm9teShyZWYpOwotCQkJCQkJCWlmICh0YXhvbm9teSAhPSBudWxsKSBsb2NhdGlvbiA9IHRheG9ub215LmdldExvY2F0aW9uKCk7Ci0JCQkJCQkJaWYgKGxvY2F0aW9uID09IG51bGwpIGxvY2F0aW9uID0gZ2V0VVJMKFRBWE9OT01ZICsgcmVmKS50b1N0cmluZygpOwotCQkJCQkJCXRheG9ub21pZXNbaV0uc2V0TG9jYXRpb24obG9jYXRpb24pOwotCQkJCQkJCWlmICh0YXhvbm9teSA9PSBudWxsKQotCQkJCQkJCXsKLQkJCQkJCQkJYWRkVGF4b25vbXlUb0luZGV4KHJlZ2lzdHJ5U2VydmljZS5uZXdUYXhvbm9teVJlZmVyZW5jZSh0YXhvbm9taWVzW2ldKSk7Ci0JCQkJCQkJfQotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkgICAgKi8KLQkJfQotCQljYXRjaCAoIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBtZSApCi0JCXsKLQkJCS8vVE9ETzogTWVzc2FnZSB0ZXh0IHJlcXVpcmVkLgotCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLFdTUGx1Z2luLklELDAsIiIsbWUpKTsKLQkJfQotCQlyZXR1cm4gcmVnaXN0cnlTZXJ2aWNlLm5ld1JlZ2lzdHJ5UmVmZXJlbmNlKHJlZ2lzdHJ5UmVmKTsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucmVnaXN0cnkuSVJlZ2lzdHJ5TWFuYWdlciNsb2FkUmVnaXN0cnkoamF2YS5sYW5nLlN0cmluZykKLQkgKi8KLQlwdWJsaWMgUmVnaXN0cnkgbG9hZFJlZ2lzdHJ5ICggU3RyaW5nIHVyaSApIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlSZWdpc3RyeVNlcnZpY2UgcmVnaXN0cnlTZXJ2aWNlID0gUmVnaXN0cnlTZXJ2aWNlLmluc3RhbmNlKCk7Ci0JCXRyeQotCQl7Ci0JCQlSZWdpc3RyeSByZWdpc3RyeSA9IGdldFJlZ2lzdHJ5KHVyaSk7Ci0JCQlpZiAocmVnaXN0cnkgPT0gbnVsbCkgcmV0dXJuIG51bGw7Ci0KLQkJCS8vIElmIHRoZSBSZWdpc3RyeSBoYXMgYW4gSUQsIGl0J3MgYSBmdWxsIG1vZGVsCi0JCQkvLyBpbmxpbmVkIHdpdGhpbiB0aGUgSW5kZXggYW5kIGlzIHJldHVybmVkIGFzLWlzLgotCQkJaWYgKHJlZ2lzdHJ5LmdldElkKCkgIT0gbnVsbCkgcmV0dXJuIHJlZ2lzdHJ5OwotCi0JCQkvLyBPdGhlcndpc2UgaXQncyBhIHJlZmVyZW5jZSB0byBhIGZ1bGwgbW9kZWwKLQkJCS8vIHdoaWNoIHdlIGxvYWQgZnJvbSB0aGUgcmVmZXJlbmNlJ3MgbG9jYXRpb24uCi0JCQlTdHJpbmcgdXJsU3RyaW5nID0gcmVnaXN0cnkuZ2V0TG9jYXRpb24oKTsKLQkJCWlmICh1cmxTdHJpbmcgPT0gbnVsbCkgcmV0dXJuIG51bGw7Ci0JCQlVUkwgdXJsID0gbmV3IFVSTCh1cmxTdHJpbmcpOwotCQkJcmV0dXJuIHJlZ2lzdHJ5U2VydmljZS5sb2FkUmVnaXN0cnkodXJsKTsKLQkJfQotCQljYXRjaCAoIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBtZSApCi0JCXsKLQkJCS8vVE9ETzogTWVzc2FnZSB0ZXh0IHJlcXVpcmVkLgotCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLFdTUGx1Z2luLklELDAsIiIsbWUpKTsKLQkJfQotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucmVnaXN0cnkuSVJlZ2lzdHJ5TWFuYWdlciNsb2FkUmVnaXN0cmllcyhqYXZhLmxhbmcuU3RyaW5nW10pCi0JICovCi0JcHVibGljIFJlZ2lzdHJ5W10gbG9hZFJlZ2lzdHJpZXMgKCBTdHJpbmdbXSB1cmlzICkgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCUxpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QodXJpcy5sZW5ndGgpOwotCQlmb3IgKGludCBpPTA7IGk8dXJpcy5sZW5ndGg7IGkrKykKLQkJewotCQkJUmVnaXN0cnkgcmVnaXN0cnkgPSBsb2FkUmVnaXN0cnkodXJpc1tpXSk7Ci0JCQlpZiAocmVnaXN0cnkgIT0gbnVsbCkKLQkJCXsKLQkJCQlsaXN0LmFkZChyZWdpc3RyeSk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIChSZWdpc3RyeVtdKWxpc3QudG9BcnJheShuZXcgUmVnaXN0cnlbMF0pOwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5yZWdpc3RyeS5JUmVnaXN0cnlNYW5hZ2VyI2dldFJlZ2lzdHJ5VVJJcygpCi0JICovCi0JcHVibGljIFN0cmluZ1tdIGdldFJlZ2lzdHJ5VVJJcyAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJRUxpc3QgbGlzdCA9IGdldEluZGV4KCkuZ2V0UmVnaXN0cnkoKTsKLQkJTGlzdCByZWdpc3RyeVVSSXMgPSBuZXcgQXJyYXlMaXN0KGxpc3Quc2l6ZSgpKTsKLQkJSXRlcmF0b3IgaXRlcmF0b3IgPSBsaXN0Lml0ZXJhdG9yKCk7Ci0JCXdoaWxlKGl0ZXJhdG9yLmhhc05leHQoKSkKLQkJewotCQkJLy8gRWFjaCBSZWdpc3RyeSBmb3VuZCBpbiB0aGUgaW5kZXggbWF5IGJlCi0JCQkvLyBlaXRoZXIgYSBmdWxsIG1vZGVsIG9yIGEgcmVmZXJlbmNlIHRvIG9uZS4KLQkJCVJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gKFJlZ2lzdHJ5KWl0ZXJhdG9yLm5leHQoKTsKLQkJCWlmIChyZWdpc3RyeS5nZXRJZCgpICE9IG51bGwpCi0JCQl7Ci0JCQkJcmVnaXN0cnlVUklzLmFkZChyZWdpc3RyeS5nZXRJZCgpKTsKLQkJCX0KLQkJCWVsc2UgaWYgKHJlZ2lzdHJ5LmdldFJlZigpICE9IG51bGwpCi0JCQl7Ci0JCQkJcmVnaXN0cnlVUklzLmFkZChyZWdpc3RyeS5nZXRSZWYoKSk7Ci0JCQl9Ci0JCX0JCi0JCXJldHVybiAoU3RyaW5nW10pcmVnaXN0cnlVUklzLnRvQXJyYXkobmV3IFN0cmluZ1swXSk7Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnJlZ2lzdHJ5LklSZWdpc3RyeU1hbmFnZXIjcmVtb3ZlUmVnaXN0cnkoamF2YS5sYW5nLlN0cmluZywgYm9vbGVhbikKLQkgKi8KLQlwdWJsaWMgdm9pZCByZW1vdmVSZWdpc3RyeSAoIFN0cmluZyB1cmksIGJvb2xlYW4gZGVsZXRlRG9jdW1lbnQgKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJRUxpc3QgbGlzdCA9IGdldEluZGV4KCkuZ2V0UmVnaXN0cnkoKTsKLQkJUmVnaXN0cnkgcmVnaXN0cnkgPSBnZXRSZWdpc3RyeSh1cmkpOwotCQlpZiAocmVnaXN0cnkgIT0gbnVsbCkKLQkJewotCQkJbGlzdC5yZW1vdmUocmVnaXN0cnkpOwotCQkJc2F2ZUluZGV4KCk7Ci0JCQkvLyBUaGUgaWRlbnRpZmllZCBSZWdpc3RyeSBtYXkgYmUgZWl0aGVyIGEgZnVsbCBtb2RlbAotCQkJLy8gKGllLiBpbmxpbmVkIGluIHRoZSBJbmRleCkgb3IgYSByZWZlcmVuY2UgdG8gb25lLgotCQkJLy8gT25seSBpbiB0aGUgbGF0dGVyIGNhc2UgaXMgdGhlcmUgYSBmaWxlIHRvIGRlbGV0ZS4KLQkJCWlmIChkZWxldGVEb2N1bWVudCAmJiByZWdpc3RyeS5nZXRMb2NhdGlvbigpICE9IG51bGwpCi0JCQl7Ci0JCQkJLy9UT0RPOiBJbXBsZW1lbnQgbWUuCi0JCQl9Ci0JCX0KLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucmVnaXN0cnkuSVJlZ2lzdHJ5TWFuYWdlciNzYXZlVGF4b25vbXkob3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teSkKLQkgKi8KLQlwdWJsaWMgVGF4b25vbXkgc2F2ZVRheG9ub215ICggVGF4b25vbXkgdGF4b25vbXkgKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJUmVnaXN0cnlTZXJ2aWNlIHJlZ2lzdHJ5U2VydmljZSA9IFJlZ2lzdHJ5U2VydmljZS5pbnN0YW5jZSgpOwotCQlUYXhvbm9teSB0YXhvbm9teVJlZiA9IG51bGw7Ci0JCXRyeQotCQl7Ci0JCQlVUkwJdXJsID0gZ2V0VVJMKFRBWE9OT01ZICsgdGF4b25vbXkuZ2V0SWQoKSk7Ci0JCSAgICByZWdpc3RyeVNlcnZpY2Uuc2F2ZVRheG9ub215KHVybCx0YXhvbm9teSk7Ci0JCQl0YXhvbm9teVJlZiA9IHJlZ2lzdHJ5U2VydmljZS5uZXdUYXhvbm9teVJlZmVyZW5jZSh0YXhvbm9teSk7Ci0JCQl0YXhvbm9teVJlZi5zZXRMb2NhdGlvbih1cmwudG9TdHJpbmcoKSk7Ci0JCQlhZGRUYXhvbm9teVRvSW5kZXgodGF4b25vbXlSZWYpOwotCQkJc2F2ZUluZGV4KCk7Ci0JCX0KLQkJY2F0Y2ggKCBNYWxmb3JtZWRVUkxFeGNlcHRpb24gbWUgKQotCQl7Ci0JCQkvL1RPRE86IE1lc3NhZ2UgdGV4dCByZXF1aXJlZC4KLQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUixXU1BsdWdpbi5JRCwwLCIiLG1lKSk7Ci0JCX0KLQkJcmV0dXJuIHJlZ2lzdHJ5U2VydmljZS5uZXdUYXhvbm9teVJlZmVyZW5jZSh0YXhvbm9teVJlZik7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5yZWdpc3RyeS5JUmVnaXN0cnlNYW5hZ2VyI2xvYWRUYXhvbm9teShqYXZhLmxhbmcuU3RyaW5nKQotCSAqLwotCXB1YmxpYyBUYXhvbm9teSBsb2FkVGF4b25vbXkgKCBTdHJpbmcgdXJpICkgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCVJlZ2lzdHJ5U2VydmljZSByZWdpc3RyeVNlcnZpY2UgPSBSZWdpc3RyeVNlcnZpY2UuaW5zdGFuY2UoKTsKLQkJdHJ5Ci0JCXsKLQkJCVRheG9ub215IHRheG9ub215ID0gZ2V0VGF4b25vbXkodXJpKTsKLQkJCWlmICh0YXhvbm9teSA9PSBudWxsKSByZXR1cm4gbnVsbDsKLQotCQkJLy8gSWYgdGhlIFRheG9ub215IGhhcyBhbiBJRCwgaXQncyBhIGZ1bGwgbW9kZWwKLQkJCS8vIGlubGluZWQgd2l0aGluIHRoZSBJbmRleCBhbmQgaXMgcmV0dXJuZWQgYXMtaXMuCi0JCQlpZiAodGF4b25vbXkuZ2V0SWQoKSAhPSBudWxsKSByZXR1cm4gdGF4b25vbXk7Ci0KLQkJCS8vIE90aGVyd2lzZSBpdCdzIGEgcmVmZXJlbmNlIHRvIGEgZnVsbCBtb2RlbAotCQkJLy8gd2hpY2ggd2UgbG9hZCBmcm9tIHRoZSByZWZlcmVuY2UncyBsb2NhdGlvbi4KLQkJCVN0cmluZyB1cmxTdHJpbmcgPSB0YXhvbm9teS5nZXRMb2NhdGlvbigpOwotCQkJaWYgKHVybFN0cmluZyA9PSBudWxsKSByZXR1cm4gbnVsbDsKLQkJCVVSTCB1cmwgPSBuZXcgVVJMKHVybFN0cmluZyk7Ci0JCQlyZXR1cm4gcmVnaXN0cnlTZXJ2aWNlLmxvYWRUYXhvbm9teSh1cmwpOwotCQl9Ci0JCWNhdGNoICggTWFsZm9ybWVkVVJMRXhjZXB0aW9uIG1lICkKLQkJewotCQkJLy9UT0RPOiBNZXNzYWdlIHRleHQgcmVxdWlyZWQuCi0JCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsV1NQbHVnaW4uSUQsMCwiIixtZSkpOwotCQl9Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5yZWdpc3RyeS5JUmVnaXN0cnlNYW5hZ2VyI2xvYWRUYXhvbm9taWVzKGphdmEubGFuZy5TdHJpbmdbXSkKLQkgKi8KLQlwdWJsaWMgVGF4b25vbXlbXSBsb2FkVGF4b25vbWllcyAoIFN0cmluZ1tdIHVyaXMgKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCh1cmlzLmxlbmd0aCk7Ci0JCWZvciAoaW50IGk9MDsgaTx1cmlzLmxlbmd0aDsgaSsrKQotCQl7Ci0JCQlUYXhvbm9teSB0YXhvbm9teSA9IGxvYWRUYXhvbm9teSh1cmlzW2ldKTsKLQkJCWlmICh0YXhvbm9teSAhPSBudWxsKQotCQkJewotCQkJCWxpc3QuYWRkKHRheG9ub215KTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gKFRheG9ub215W10pbGlzdC50b0FycmF5KG5ldyBUYXhvbm9teVswXSk7Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnJlZ2lzdHJ5LklSZWdpc3RyeU1hbmFnZXIjZ2V0VGF4b25vbXlVUklzKCkKLQkgKi8KLQlwdWJsaWMgU3RyaW5nW10gZ2V0VGF4b25vbXlVUklzICgpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlFTGlzdCBsaXN0ID0gZ2V0SW5kZXgoKS5nZXRUYXhvbm9teSgpOwotCQlMaXN0IHRheG9ub215VVJJcyA9IG5ldyBBcnJheUxpc3QobGlzdC5zaXplKCkpOwotCQlJdGVyYXRvciBpdGVyYXRvciA9IGxpc3QuaXRlcmF0b3IoKTsKLQkJd2hpbGUoaXRlcmF0b3IuaGFzTmV4dCgpKQotCQl7Ci0JCQkvLyBFYWNoIFRheG9ub215IGZvdW5kIGluIHRoZSBpbmRleCBtYXkgYmUKLQkJCS8vIGVpdGhlciBhIGZ1bGwgbW9kZWwgb3IgYSByZWZlcmVuY2UgdG8gb25lLgotCQkJVGF4b25vbXkgdGF4b25vbXkgPSAoVGF4b25vbXkpaXRlcmF0b3IubmV4dCgpOwotCQkJaWYgKHRheG9ub215LmdldElkKCkgIT0gbnVsbCkKLQkJCXsKLQkJCQl0YXhvbm9teVVSSXMuYWRkKHRheG9ub215LmdldElkKCkpOwotCQkJfQotCQkJZWxzZSBpZiAodGF4b25vbXkuZ2V0UmVmKCkgIT0gbnVsbCkKLQkJCXsKLQkJCQl0YXhvbm9teVVSSXMuYWRkKHRheG9ub215LmdldFJlZigpKTsKLQkJCX0KLQkJfQkKLQkJcmV0dXJuIChTdHJpbmdbXSl0YXhvbm9teVVSSXMudG9BcnJheShuZXcgU3RyaW5nWzBdKTsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucmVnaXN0cnkuSVJlZ2lzdHJ5TWFuYWdlciNyZW1vdmVUYXhvbm9teShqYXZhLmxhbmcuU3RyaW5nLCBib29sZWFuKQotCSAqLwotCXB1YmxpYyB2b2lkIHJlbW92ZVRheG9ub215ICggU3RyaW5nIHVyaSwgYm9vbGVhbiBkZWxldGVEb2N1bWVudCApIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlFTGlzdCBsaXN0ID0gZ2V0SW5kZXgoKS5nZXRUYXhvbm9teSgpOwotCQlUYXhvbm9teSB0YXhvbm9teSA9IGdldFRheG9ub215KHVyaSk7Ci0JCWlmICh0YXhvbm9teSAhPSBudWxsKQotCQl7Ci0JCQlsaXN0LnJlbW92ZSh0YXhvbm9teSk7Ci0JCQlzYXZlSW5kZXgoKTsKLQkJCS8vIFRoZSBpZGVudGlmaWVkIFRheG9ub215IG1heSBiZSBlaXRoZXIgYSBmdWxsIG1vZGVsCi0JCQkvLyAoaWUuIGlubGluZWQgaW4gdGhlIEluZGV4KSBvciBhIHJlZmVyZW5jZSB0byBvbmUuCi0JCQkvLyBPbmx5IGluIHRoZSBsYXR0ZXIgY2FzZSBpcyB0aGVyZSBhIGZpbGUgdG8gZGVsZXRlLgotCQkJaWYgKGRlbGV0ZURvY3VtZW50ICYmIHRheG9ub215LmdldExvY2F0aW9uKCkgIT0gbnVsbCkKLQkJCXsKLQkJCQkvL1RPRE86IEltcGxlbWVudCBtZS4KLQkJCX0KLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIFJlZ2lzdHJ5IGZyb20gdGhlIGluZGV4IHdob3NlIElEIG9yIFJlZmVyZW5jZQotCSAqIG1hdGNoZXMgdGhlIGdpdmVuIFVSSS4gQXMgc3VjaCwgdGhpcyBtZXRob2QgbWF5IHJldHVybiBhCi0JICogZnVsbCBtb2RlbCBvciBhIHJlZmVyZW5jZSB0byBhIGZ1bGwgbW9kZWwuCi0JICogQHBhcmFtIHVyaSBUaGUgVVJJIGlkZW50aWZpZXIgb2YgdGhlIFJlZ2lzdHJ5Ci0JICogQHJldHVybiBUaGUgPGNvZGU+UmVnaXN0cnk8L2NvZGU+IG9iamVjdCB3aG9zZSBJRCBvciByZWZlcmVuY2UKLQkgKiBtYXRjaGVzIHRoZSBnaXZlbiA8Y29kZT51cmk8L2NvZGU+LCBvciBudWxsIGlmIG5vbmUgbWF0Y2guCi0JICovCi0gICAgcHJpdmF0ZSBSZWdpc3RyeSBnZXRSZWdpc3RyeSAoIFN0cmluZyB1cmkgKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotICAgIHsKLQkJRUxpc3QgbGlzdCA9IGdldEluZGV4KCkuZ2V0UmVnaXN0cnkoKTsJCi0JCUl0ZXJhdG9yIGl0ID0gbGlzdC5pdGVyYXRvcigpOwotCQl3aGlsZSAoaXQuaGFzTmV4dCgpKXsKLQkJCVJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gKFJlZ2lzdHJ5KWl0Lm5leHQoKTsKLQkJCWlmICh1cmkuZXF1YWxzKHJlZ2lzdHJ5LmdldElkKCkpIHx8IHVyaS5lcXVhbHMocmVnaXN0cnkuZ2V0UmVmKCkpKXsKLQkJCQlyZXR1cm4gcmVnaXN0cnk7ICAKLQkJCX0KLQkJfQkKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIFRheG9ub215IGZyb20gdGhlIGluZGV4IHdob3NlIElEIG9yIFJlZmVyZW5jZQotCSAqIG1hdGNoZXMgdGhlIGdpdmVuIFVSSS4gQXMgc3VjaCwgdGhpcyBtZXRob2QgbWF5IHJldHVybiBhCi0JICogZnVsbCBtb2RlbCBvciBhIHJlZmVyZW5jZSB0byBhIGZ1bGwgbW9kZWwuCi0JICogQHBhcmFtIHVyaSBUaGUgVVJJIGlkZW50aWZpZXIgb2YgdGhlIFRheG9ub215Ci0JICogQHJldHVybiBUaGUgPGNvZGU+VGF4b25vbXk8L2NvZGU+IG9iamVjdCB3aG9zZSBJRCBvciByZWZlcmVuY2UKLQkgKiBtYXRjaGVzIHRoZSBnaXZlbiA8Y29kZT51cmk8L2NvZGU+LCBvciBudWxsIGlmIG5vbmUgbWF0Y2guCi0JICovCi0gICAgcHJpdmF0ZSBUYXhvbm9teSBnZXRUYXhvbm9teSAoIFN0cmluZyB1cmkgKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotICAgIHsKLQkJRUxpc3QgbGlzdCA9IGdldEluZGV4KCkuZ2V0VGF4b25vbXkoKTsJCi0JCUl0ZXJhdG9yIGl0ID0gbGlzdC5pdGVyYXRvcigpOwotCQl3aGlsZSAoaXQuaGFzTmV4dCgpKXsKLQkJCVRheG9ub215IHRheG9ub215ID0gKFRheG9ub215KWl0Lm5leHQoKTsKLQkJCWlmICh1cmkuZXF1YWxzKHRheG9ub215LmdldElkKCkpIHx8IHVyaS5lcXVhbHModGF4b25vbXkuZ2V0UmVmKCkpKXsKLQkJCQlyZXR1cm4gdGF4b25vbXk7Ci0JCQl9Ci0JCX0JCi0gICAgICAgIHJldHVybiBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcmVnaXN0cnkvUmVnaXN0cnlTZXJ2aWNlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3JlZ2lzdHJ5L1JlZ2lzdHJ5U2VydmljZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZThjODE4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcmVnaXN0cnkvUmVnaXN0cnlTZXJ2aWNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5yZWdpc3RyeTsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLm5ldC5VUkxDb25uZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5UGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJ0aW5kZXguUlRJbmRleFBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215UGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotCi0vKioKLSAqIFJlZ2lzdHJ5U2VydmljZSBpcyB0aGUgc3RhcnRpbmcgY2xhc3Mgb2YgdGhlIFdlYiBzZXJ2aWNlIHJlZ2lzdHJ5Ci0gKiBwcm9ncmFtbWluZyBtb2RlbC4gQ2FsbCB0aGUgPGNvZGU+UmVnaXN0cnlTZXJ2aWNlLmluc3RhbmNlKCk8L2NvZGU+Ci0gKiBzdGF0aWMgbWV0aG9kIHRvIGdldCB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MuCi0gKiA8cD4KLSAqIFJlZ2lzdHJ5U2VydmljZSBwcm92aWRlcyBmYWN0b3J5IG1ldGhvZHMgZm9yIGdldHRpbmcgbmV3Ci0gKiBpbnN0YW5jZXMgb2YgPGNvZGU+SVJlZ2lzdHJ5TWFuYWdlcjwvY29kZT4gb2JqZWN0cyB3aGljaCwKLSAqIGluIHR1cm4sIHByb3ZpZGUgdGhlIG1lYW5zIGZvciByZWdpc3RlcmluZyBhbmQgdW5yZWdpc3RlcmluZwotICogZ3JvdXBzIG9mIDxjb2RlPlJlZ2lzdHJ5PC9jb2RlPiBhbmQgPGNvZGU+VGF4b25vbXk8L2NvZGU+IG1vZGVscwotICogYXQgVVJMIGFkZHJlc3NhYmxlIGxvY2F0aW9ucyBpbiB0aGUgZmlsZXN5c3RlbSBvciBlbHNld2hlcmUuCi0gKiA8cD4KLSAqIFJlZ2lzdHJ5U2VydmljZSBwcm92aWRlcyB1dGlsaXR5IG1ldGhvZHMgdG8gZWFzZSB0aGUgY3JlYXRpb24sCi0gKiBsb2FkaW5nIGFuZCBzYXZpbmcgcmF3IGluc3RhbmNlcyBvZiB0aGUgPGNvZGU+UmVnaXN0cnk8L2NvZGU+Ci0gKiBhbmQgPGNvZGU+VGF4b25vbXk8L2NvZGU+IG1vZGVscywgYW5kIHRvIHNpbXBsaWZ5IHRoZSBwcm9jZXNzIG9mCi0gKiBjb21wb3NpbmcgYW5kIGZpbmRpbmcgPGNvZGU+VGF4b25vbXk8L2NvZGU+IG1vZGVscyBpbgotICogPGNvZGU+UmVnaXN0cnk8L2NvZGU+IG1vZGVscy4KLSAqIDxwPgotICogQSB0eXBpY2FsIHVzZSBvZiA8Y29kZT5SZWdpc3RyeVNlcnZpY2U8L2NvZGU+IGFuZCBpdHMgcmVsYXRlZAotICogY2xhc3NlcyB0byBjcmVhdGUgYW5kIHNhdmUgYSBuZXcgZmFtaWx5IG9mIG1vZGVscyBpczoKLSAqIDxibG9ja3F1b3RlPgotICogPGNvZGU+Ci0gKiBSZWdpc3RyeVNlcnZpY2UgcmVnaXN0cnlTZXJ2aWNlID0gUmVnaXN0cnlTZXJ2aWNlLmluc3RhbmNlKCk7Ci0gKiBNeVJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gTXlSZWdpc3RyeUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU15UmVnaXN0cnkoKTsKLSAqIC8vIGJ1aWxkIHVwIHlvdXIgcmVnaXN0cnkgbW9kZWwgaGVyZQotICogVGF4b25vbXkgdGF4b25vbXkgPSByZWdpc3RyeVNlcnZpY2UubmV3VGF4b25vbXkoKTsKLSAqIC8vIGJ1aWxkIHVwIHlvdXIgdGF4b25vbXkgbW9kZWwgaGVyZQotICogcmVnaXN0cnlTZXJ2aWNlLmFkZFRheG9ub215KHJlZ2lzdHJ5LHRheG9ub215KTsKLSAqIElSZWdpc3RyeU1hbmFnZXIgcmVnaXN0cnlNYW5hZ2VyID0gcmVnaXN0cnlTZXJ2aWNlLmdldERlZmF1bHRSZWdpc3RyeU1hbmFnZXIoKTsKLSAqIHJlZ2lzdHJ5TWFuYWdlci5zYXZlUmVnaXN0cnkocmVnaXN0cnkpOwotICogPC9jb2RlPgotICogPC9ibG9ja3F1b3RlPgotICogQHNlZSAjaW5zdGFuY2UoKQotICogQHNlZSBJUmVnaXN0cnlNYW5hZ2VyCi0gKiBAc2VlIFJlZ2lzdHJ5Ci0gKiBAc2VlIFRheG9ub215Ci0gKiBAYXV0aG9yIGNicmVhbGV5Ci0gKi8KLXB1YmxpYyBjbGFzcyBSZWdpc3RyeVNlcnZpY2UKLXsKLQlwcml2YXRlIHN0YXRpYyBSZWdpc3RyeVNlcnZpY2UgaW5zdGFuY2VfOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX0lOREVYX1hNTF9GSUxFID0gIkRlZmF1bHRJbmRleC54bWwiOwotCXByaXZhdGUgSGFzaHRhYmxlIHJlZ2lzdHJ5TWFuYWdlcnNfID0gbmV3IEhhc2h0YWJsZSgpOwotCXByaXZhdGUgSVJlZ2lzdHJ5TWFuYWdlciBkZWZhdWx0UmVnaXN0cnlNYW5hZ2VyXyA9IG51bGw7Ci0JcHJpdmF0ZSBHZW5lcmljUmVzb3VyY2VGYWN0b3J5IHJlc291cmNlRmFjdG9yeV8gPSBuZXcgR2VuZXJpY1Jlc291cmNlRmFjdG9yeSgpOwotCi0JLyoqCi0JICogQSBSZWdpc3RyeVNlcnZpY2UgY2Fubm90IGJlIGRpcmVjdGx5IGNvbnN0cnVjdGVkLgotCSAqIFVzZSBAbGluayAjaW5zdGFuY2UoKSB0byBnZXQgdGhlIHNpbmdsZXRvbiBvZiB0aGlzIGNsYXNzLgotCSAqLwotCXByaXZhdGUgUmVnaXN0cnlTZXJ2aWNlICgpCi0JewotCQlSZXNvdXJjZS5GYWN0b3J5LlJlZ2lzdHJ5LklOU1RBTkNFLmdldEV4dGVuc2lvblRvRmFjdG9yeU1hcCgpLnB1dCgieG1sIixyZXNvdXJjZUZhY3RvcnlfKTsKLQkJUmVnaXN0cnlQYWNrYWdlLmVJTlNUQU5DRS5nZXRDbGFzcygpOwotCQlUYXhvbm9teVBhY2thZ2UuZUlOU1RBTkNFLmdldENsYXNzKCk7Ci0JCVJUSW5kZXhQYWNrYWdlLmVJTlNUQU5DRS5nZXRDbGFzcygpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBvZiB0aGlzIGNsYXNzLgotCSAqIEByZXR1cm4gVGhlIHNpbmdsZXRvbiBvZiB0aGlzIGNsYXNzLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgUmVnaXN0cnlTZXJ2aWNlIGluc3RhbmNlICgpCi0JewotCQlpZiAoaW5zdGFuY2VfID09IG51bGwpCi0JCXsKLQkJCWluc3RhbmNlXyA9IG5ldyBSZWdpc3RyeVNlcnZpY2UoKTsKLQkJfQotCQlyZXR1cm4gaW5zdGFuY2VfOwotCX0KLQkKLQkvKioKLQkgKiBDcmVhdGVzIGEgZGVmYXVsdCA8Y29kZT5JUmVnaXN0cnlNYW5hZ2VyPC9jb2RlPiBmb3IgdGhlIHN5c3RlbS4KLQkgKiBAcmV0dXJuIFRoZSBkZWZhdWx0IDxjb2RlPklSZWdpc3RyeU1hbmFnZXI8L2NvZGU+IGZvciB0aGUgc3lzdGVtLgotCSAqIEBzZWUgSVJlZ2lzdHJ5TWFuYWdlcgotCSAqLwotCXB1YmxpYyBJUmVnaXN0cnlNYW5hZ2VyIGdldERlZmF1bHRSZWdpc3RyeU1hbmFnZXIgKCkKLQl7Ci0JCWlmIChkZWZhdWx0UmVnaXN0cnlNYW5hZ2VyXyA9PSBudWxsKQotCQl7Ci0JCQlTdHJpbmcgaW5kZXhGaWxlbmFtZSA9IFdTUGx1Z2luLmdldERlZmF1bHQoKS5nZXRTdGF0ZUxvY2F0aW9uKCkuYXBwZW5kKERFRkFVTFRfSU5ERVhfWE1MX0ZJTEUpLnRvU3RyaW5nKCk7Ci0JCQlkZWZhdWx0UmVnaXN0cnlNYW5hZ2VyXyA9IG5ldyBSZWdpc3RyeU1hbmFnZXIoaW5kZXhGaWxlbmFtZSk7Ci0JCX0KLQkJcmV0dXJuIGRlZmF1bHRSZWdpc3RyeU1hbmFnZXJfOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgb3IgZXhpc3RpbmcgPGNvZGU+SVJlZ2lzdHJ5TWFuYWdlcjwvY29kZT4gZm9yIHRoZSBnaXZlbiBVUkwuCi0JICogQHBhcmFtIHVybCBBIFVSTCB0byB0aGUgWE1MIGRvY3VtZW50IHRoYXQgcGVyc2lzdHMKLQkgKiB0aGUgc2V0IG9mIHJlZ2lzdHJpZXMgbWFuYWdlZCBieSB0aGlzIDxjb2RlPklSZWdpc3RyeU1hbmFnZXI8L2NvZGU+LgotCSAqIEByZXR1cm4gVGhlIG5ldyBvciBleGlzdGluZyA8Y29kZT5SZWdpc3RyeU1hbmFnZXI8L2NvZGU+IGZvciB0aGUgZ2l2ZW4gVVJMLgotCSAqIEBzZWUgSVJlZ2lzdHJ5TWFuYWdlcgotCSAqLwotCXB1YmxpYyBJUmVnaXN0cnlNYW5hZ2VyIGdldFJlZ2lzdHJ5TWFuYWdlciAoIFVSTCB1cmwgKQotCXsKLQkJSVJlZ2lzdHJ5TWFuYWdlciByZWdpc3RyeU1hbmFnZXIgPSAoSVJlZ2lzdHJ5TWFuYWdlcilyZWdpc3RyeU1hbmFnZXJzXy5nZXQodXJsKTsKLQkJaWYgKHJlZ2lzdHJ5TWFuYWdlciA9PSBudWxsKQotCQl7Ci0JCQlyZWdpc3RyeU1hbmFnZXIgPSBuZXcgUmVnaXN0cnlNYW5hZ2VyKHVybCk7Ci0JCQlyZWdpc3RyeU1hbmFnZXJzXy5wdXQodXJsLHJlZ2lzdHJ5TWFuYWdlcik7Ci0JCX0KLQkJcmV0dXJuIHJlZ2lzdHJ5TWFuYWdlcjsKLQl9Ci0JCi0JLyoqCi0JICogUmVtb3ZlcyB0aGUgPGNvZGU+SVJlZ2lzdHJ5TWFuYWdlcjwvY29kZT4gZm9yIHRoZSBnaXZlbiBVUkwuCi0JICogTm8gcGh5c2ljYWwgcmVzb3VyY2VzIGFyZSBkZWxldGVkLgotCSAqIEBwYXJhbSB1cmwgQSBVUkwgdG8gdGhlIFhNTCBkb2N1bWVudCB0aGF0IHBlcnNpc3RzCi0JICogdGhlIHNldCBvZiByZWdpc3RyaWVzIG1hbmFnZWQgYnkgdGhpcyA8Y29kZT5JUmVnaXN0cnlNYW5hZ2VyPC9jb2RlPi4KLQkgKiBAc2VlIElSZWdpc3RyeU1hbmFnZXIKLQkgKi8KLQlwdWJsaWMgdm9pZCByZW1vdmVSZWdpc3RyeU1hbmFnZXIgKCBVUkwgdXJsICkKLQl7Ci0JCXJlZ2lzdHJ5TWFuYWdlcnNfLnJlbW92ZSh1cmwpOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYW5kIHJldHVybnMgYSBuZXcgPGNvZGU+UmVnaXN0cnk8L2NvZGU+IG1vZGVsLgotCSAqIEFzIGEgZ2VuZXJhbCBydWxlLCB0aGlzIG1ldGhvZCBoYXMgbGl0dGxlIGFjdHVhbCB2YWx1ZSBhcwotCSAqIG1vc3QgY29uY3JldGUgcmVnaXN0cnkgbW9kZWxzIHdpbGwgYmUgb2YgdHlwZXMgdGhhdCBleHRlbmQKLQkgKiB0aGUgYmFzZSBSZWdpc3RyeSBtb2RlbCwgc3VjaCBhcyA8Y29kZT5VRERJUmVnaXN0cnk8L2NvZGU+LgotCSAqIEZvciBleGFtcGxlLCA8Y29kZT5VRERJUmVnaXN0cnlTZXJ2aWNlLm5ld1VERElSZWdpc3RyeSgpPC9jb2RlPgotCSAqIHJldHVybnMgYSBuZXcgPGNvZGU+VURESVJlZ2lzdHJ5PC9jb2RlPi4gUHJvdmlkZXJzIG9mIG90aGVyCi0JICogY29uY3JldGUgdHlwZXMgb2YgcmVnaXN0cmllcyBtYXkgcHJvdmlkZSBzaW1pbGFyIGZhY2lsaXRpZXMuCi0JICogQHJldHVybiBBIG5ldyA8Y29kZT5SZWdpc3RyeTwvY29kZT4gbW9kZWwuIE5ldmVyIHJldHVybnMgbnVsbC4KLQkgKiBAc2VlIFJlZ2lzdHJ5Ci0JICogQHNlZSBVRERJUmVnaXN0cnlTZXJ2aWNlI25ld1VERElSZWdpc3RyeSgpCi0JICovCi0JcHVibGljIFJlZ2lzdHJ5IG5ld1JlZ2lzdHJ5ICgpCi0JewotCQlyZXR1cm4gUmVnaXN0cnlGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVSZWdpc3RyeSgpOwotCX0KLQkKLQkvKioKLQkgKiBMb2FkcyB0aGUgPGNvZGU+UmVnaXN0cnk8L2NvZGU+IG1vZGVsIGZyb20gYW4gWE1MIGRvY3VtZW50LgotCSAqIElmIGxvYWRpbmcgdGhlIG1vZGVsIG9mIGEgcmVnaXN0cnkgdGhhdCBleHRlbmRzIHRoZSBiYXNlCi0JICogUmVnaXN0cnkgaW50ZXJmYWNlIGFuZCBTY2hlbWEsIHlvdSBtdXN0IGluaXRpYWxpemUgdGhlIEVNRgotCSAqIGVDb3JlIHBhY2thZ2UgKGVnLiA8Y29kZT5NeVJlZ2lzdHJ5UGFja2FnZS5lSU5TVEFOQ0U8L2NvZGU+Ci0JICogZm9yIHlvdXIgbW9kZWwgYmVmb3JlIGNhbGxpbmcgdGhpcyBsb2FkIG1ldGhvZC4KLQkgKiBGb3IgVURESSBSZWdpc3RyeSBtb2RlbHMsIHRoaXMgaXMgZG9uZSBhdXRvbWF0aWNhbGx5IGJ5Ci0JICogY2FsbGluZyA8Y29kZT5VRERJUmVnaXN0cnlTZXJ2aWNlLmluc3RhbmNlKCk8L2NvZGU+LgotCSAqIEBwYXJhbSB1cmwgVGhlIFVSTCB0byB0aGUgWE1MIGRvY3VtZW50IHRvIGxvYWQuCi0JICogQHJldHVybiBUaGUgPGNvZGU+UmVnaXN0cnk8L2NvZGU+IG1vZGVsLgotCSAqIEB0aHJvd3MgPGNvZGU+Q29yZUV4Y2VwdGlvbjwvY29kZT4gSWYgdGhlIG1vZGVsIGNhbm5vdCBiZSBsb2FkZWQuCi0JICogQHNlZSBSZWdpc3RyeQotCSAqIEBzZWUgVURESVJlZ2lzdHJ5U2VydmljZSNpbnN0YW5jZSgpCi0JICovCi0JcHVibGljIFJlZ2lzdHJ5IGxvYWRSZWdpc3RyeSAoIFVSTCB1cmwgKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZUZhY3RvcnlfLmNyZWF0ZVJlc291cmNlKFVSSS5jcmVhdGVVUkkoIioueG1sIikpOwotCQl0cnkKLQkJewotCQkJcmVzb3VyY2UubG9hZChnZXRJbnB1dFN0cmVhbUZvcih1cmwpLG51bGwpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKQotCQl7Ci0JCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsV1NQbHVnaW4uSUQsMCwiIixlKSk7Ci0JCX0KLQkJb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5Eb2N1bWVudFJvb3QgZG9jdW1lbnQgPSAob3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC5yZWdpc3RyeS5Eb2N1bWVudFJvb3QpcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5nZXQoMCk7Ci0JCXJldHVybiBkb2N1bWVudC5nZXRSZWdpc3RyeSgpOwotCX0KLQotCS8qKgotCSAqIFNhdmVzIHRoZSA8Y29kZT5SZWdpc3RyeTwvY29kZT4gbW9kZWwgdG8gYW4gWE1MIGRvY3VtZW50LgotCSAqIEBwYXJhbSB1cmwgVGhlIFVSTCB0byB0aGUgWE1MIGRvY3VtZW50IHRvIHNhdmUuCi0JICogQHBhcmFtIHJlZ2lzdHJ5IFRoZSA8Y29kZT5SZWdpc3RyeTwvY29kZT4gbW9kZWwgdG8gc2F2ZS4KLQkgKiBAdGhyb3dzIDxjb2RlPkNvcmVFeGNlcHRpb248L2NvZGU+IElmIHRoZSBtb2RlbCBjYW5ub3QgYmUgc2F2ZWQuCi0JICogQHNlZSBSZWdpc3RyeQotCSAqLwotCXB1YmxpYyB2b2lkIHNhdmVSZWdpc3RyeSAoIFVSTCB1cmwsIFJlZ2lzdHJ5IHJlZ2lzdHJ5ICkgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCW9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuRG9jdW1lbnRSb290IGRvY3VtZW50ID0gUmVnaXN0cnlGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVEb2N1bWVudFJvb3QoKTsKLQkJZG9jdW1lbnQuc2V0UmVnaXN0cnkocmVnaXN0cnkpOwotCQlSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlRmFjdG9yeV8uY3JlYXRlUmVzb3VyY2UoVVJJLmNyZWF0ZVVSSSgiKi54bWwiKSk7Ci0JCXJlc291cmNlLmdldENvbnRlbnRzKCkuYWRkKGRvY3VtZW50KTsKLQkJdHJ5Ci0JCXsKLQkJCXJlc291cmNlLnNhdmUoZ2V0T3V0cHV0U3RyZWFtRm9yKHVybCksbnVsbCk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0JCXsKLQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUixXU1BsdWdpbi5JRCwwLCIiLGUpKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYW5kIHJldHVybnMgYSBuZXcgPGNvZGU+VGF4b25vbXk8L2NvZGU+IG1vZGVsLgotCSAqIEByZXR1cm4gQSBuZXcgPGNvZGU+VGF4b25vbXk8L2NvZGU+IG1vZGVsLiBOZXZlciByZXR1cm5zIG51bGwuCi0JICogQHNlZSBUYXhvbm9teQotCSAqLwotCXB1YmxpYyBUYXhvbm9teSBuZXdUYXhvbm9teSAoKQotCXsKLQkJcmV0dXJuIFRheG9ub215RmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlVGF4b25vbXkoKTsKLQl9Ci0JCi0JLyoqCi0JICogTG9hZHMgdGhlIDxjb2RlPlRheG9ub215PC9jb2RlPiBtb2RlbCBmcm9tIGFuIFhNTCBkb2N1bWVudC4KLQkgKiBAcGFyYW0gdXJsIFRoZSBVUkwgdG8gdGhlIFhNTCBkb2N1bWVudCB0byBsb2FkLgotCSAqIEByZXR1cm4gdGhlIDxjb2RlPlRheG9ub215PC9jb2RlPiBtb2RlbC4KLQkgKiBAdGhyb3dzIDxjb2RlPkNvcmVFeGNlcHRpb248L2NvZGU+IElmIHRoZSBtb2RlbCBjYW5ub3QgYmUgbG9hZGVkLgotCSAqIEBzZWUgVGF4b25vbXkKLQkgKi8KLQlwdWJsaWMgVGF4b25vbXkgbG9hZFRheG9ub215ICggVVJMIHVybCApIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlRmFjdG9yeV8uY3JlYXRlUmVzb3VyY2UoVVJJLmNyZWF0ZVVSSSgiKi54bWwiKSk7Ci0JCXRyeQotCQl7Ci0JCQlyZXNvdXJjZS5sb2FkKGdldElucHV0U3RyZWFtRm9yKHVybCksbnVsbCk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0JCXsKLQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUixXU1BsdWdpbi5JRCwwLCIiLGUpKTsKLQkJfQotCQlvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkRvY3VtZW50Um9vdCBkb2N1bWVudCA9IChvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LkRvY3VtZW50Um9vdClyZXNvdXJjZS5nZXRDb250ZW50cygpLmdldCgwKTsKLQkJcmV0dXJuIGRvY3VtZW50LmdldFRheG9ub215KCk7Ci0JfQotCi0JLyoqCi0JICogU2F2ZXMgdGhlIDxjb2RlPlRheG9ub215PC9jb2RlPiBtb2RlbCB0byBhbiBYTUwgZG9jdW1lbnQuCi0JICogQHBhcmFtIHVybCBUaGUgVVJMIHRvIHRoZSBYTUwgZG9jdW1lbnQgdG8gc2F2ZS4KLQkgKiBAcGFyYW0gdGF4b25vbXkgVGhlIDxjb2RlPlRheG9ub215PC9jb2RlPiBtb2RlbCB0byBzYXZlLgotCSAqIEB0aHJvd3MgPGNvZGU+Q29yZUV4Y2VwdGlvbjwvY29kZT4gSWYgdGhlIG1vZGVsIGNhbm5vdCBiZSBzYXZlZC4KLQkgKiBAc2VlIFRheG9ub215Ci0JICovCi0JcHVibGljIHZvaWQgc2F2ZVRheG9ub215ICggVVJMIHVybCwgVGF4b25vbXkgdGF4b25vbXkgKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5Eb2N1bWVudFJvb3QgZG9jdW1lbnQgPSBUYXhvbm9teUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZURvY3VtZW50Um9vdCgpOwotCQlkb2N1bWVudC5zZXRUYXhvbm9teSh0YXhvbm9teSk7Ci0JCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VGYWN0b3J5Xy5jcmVhdGVSZXNvdXJjZShVUkkuY3JlYXRlVVJJKCIqLnhtbCIpKTsKLQkJcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5hZGQoZG9jdW1lbnQpOwotCQl0cnkKLQkJewotCQkJcmVzb3VyY2Uuc2F2ZShnZXRPdXRwdXRTdHJlYW1Gb3IodXJsKSxudWxsKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkKLQkJewotCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLFdTUGx1Z2luLklELDAsIiIsZSkpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQ29uc3RydWN0cyBhbmQgcmV0dXJucyBhIG5ldyBSZWdpc3RyeSBtb2RlbCBjb25maWd1cmVkCi0JICogdG8gcmVmZXJlbmNlIHRoZSBnaXZlbiA8Y29kZT5yZWdpc3RyeTwvY29kZT4uCi0JICogPHA+Ci0JICogVGhlIGdpdmVuIDxjb2RlPnJlZ2lzdHJ5PC9jb2RlPiBjYW4gYmUgZWl0aGVyIGEgZnVsbAotCSAqIG1vZGVsIGFzIHNpZ25pZmllZCBieSBoYXZpbmcgYSBub24tbnVsbCwgbm9uLWVtcHR5Ci0JICogaWRlbnRpZmllciAoPGNvZGU+cmVnaXN0cnkuZ2V0SWQoKTwvY29kZT4pLCBvciBhCi0JICogcmVmZXJlbmNlIGl0c2VsZiBhcyBzaWduaWZpZWQgYnkgaGF2aW5nIGEgbm9uLW51bGwsCi0JICogbm9uLWVtcHR5IHJlZmVyZW5jZSAoPGNvZGU+cmVnaXN0cnkuZ2V0UmVmKCk8L2NvZGU+KS4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgZ2l2ZW4gPGNvZGU+cmVnaXN0cnk8L2NvZGU+IGlzIGEgZnVsbCBtb2RlbCwKLQkgKiB0aGVuIGEgbmV3IDxjb2RlPlJlZ2lzdHJ5PC9jb2RlPiBpcyByZXR1cm5lZCBzdWNoIHRoYXQKLQkgKiA8dWw+Ci0JICogPGxpPjxjb2RlPmdldFJlZigpPC9jb2RlPiBlcXVhbHMgPGNvZGU+cmVnaXN0cnkuZ2V0SWQoKTwvY29kZT48L2xpPgotCSAqIDxsaT48Y29kZT5nZXRMb2NhdGlvbigpPC9jb2RlPiBpcyBudWxsPC9saT4KLQkgKiA8bGk+PGNvZGU+Z2V0SWQoKTwvY29kZT4gaXMgbnVsbDwvbGk+Ci0JICogPC91bD4KLQkgKiA8cD4KLQkgKiBJbiB0aGUgZ2l2ZW4gPGNvZGU+cmVnaXN0cnk8L2NvZGU+IGlzIGl0c2VsZiBhIHJlZmVyZW5jZSwKLQkgKiB0aGVuIGEgbmV3IDxjb2RlPlJlZ2lzdHJ5PC9jb2RlPiBpcyByZXR1cm5lZCBzdWNoIHRoYXQKLQkgKiA8dWw+Ci0JICogPGxpPjxjb2RlPmdldFJlZigpPC9jb2RlPiBlcXVhbHMgPGNvZGU+cmVnaXN0cnkuZ2V0UmVmKCk8L2NvZGU+PC9saT4KLQkgKiA8bGk+PGNvZGU+Z2V0TG9jYXRpb24oKTwvY29kZT4gZXF1YWxzIDxjb2RlPnJlZ2lzdHJ5LmdldExvY2F0aW9uKCk8L2NvZGU+PC9saT4KLQkgKiA8bGk+PGNvZGU+Z2V0SWQoKTwvY29kZT4gaXMgbnVsbDwvbGk+Ci0JICogPC91bD4KLQkgKiAKLQkgKiBAcGFyYW0gcmVnaXN0cnkgVGhlIDxjb2RlPlJlZ2lzdHJ5PC9jb2RlPiBtb2RlbCB0byBjbG9uZSBvcgotCSAqIHJlZmVyIHRvIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBnaXZlbiA8Y29kZT5yZWdpc3RyeTwvY29kZT4KLQkgKiBpcyBhIGZ1bGwgbW9kZWwgb3IgYSByZWZlcmVuY2UuCi0JICogQHJldHVybiBBIG5ldyA8Y29kZT5SZWdpc3RyeTwvY29kZT4sIGd1YXJhbnRlZWQgdG8gYmUgYSByZWZlcmVuY2UuCi0JICovCi0JcHVibGljIFJlZ2lzdHJ5IG5ld1JlZ2lzdHJ5UmVmZXJlbmNlICggUmVnaXN0cnkgcmVnaXN0cnkgKQotCXsKLQkJU3RyaW5nIGlkID0gcmVnaXN0cnkuZ2V0SWQoKTsKLQkJU3RyaW5nIHJlZiA9IHJlZ2lzdHJ5LmdldFJlZigpOwotCQlSZWdpc3RyeSByZWdpc3RyeVJlZiA9IG5ld1JlZ2lzdHJ5KCk7Ci0JCWlmIChyZWYgPT0gbnVsbCB8fCAiIi5lcXVhbHMocmVmKSkKLQkJewotCQkJcmVnaXN0cnlSZWYuc2V0UmVmKGlkKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCXJlZ2lzdHJ5UmVmLnNldFJlZihyZWYpOwotCQkJcmVnaXN0cnlSZWYuc2V0TG9jYXRpb24ocmVnaXN0cnkuZ2V0TG9jYXRpb24oKSk7Ci0JCX0KLQkJcmV0dXJuIHJlZ2lzdHJ5UmVmOwotCX0KLQotCS8qKgotCSAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYSBuZXcgVGF4b25vbXkgbW9kZWwgY29uZmlndXJlZAotCSAqIHRvIHJlZmVyZW5jZSB0aGUgZ2l2ZW4gPGNvZGU+dGF4b25vbXk8L2NvZGU+LgotCSAqIDxwPgotCSAqIFRoZSBnaXZlbiA8Y29kZT50YXhvbm9teTwvY29kZT4gY2FuIGJlIGVpdGhlciBhIGZ1bGwKLQkgKiBtb2RlbCBhcyBzaWduaWZpZWQgYnkgaGF2aW5nIGEgbm9uLW51bGwsIG5vbi1lbXB0eQotCSAqIGlkZW50aWZpZXIgKDxjb2RlPnRheG9ub215LmdldElkKCk8L2NvZGU+KSwgb3IgYQotCSAqIHJlZmVyZW5jZSBpdHNlbGYgYXMgc2lnbmlmaWVkIGJ5IGhhdmluZyBhIG5vbi1udWxsLAotCSAqIG5vbi1lbXB0eSByZWZlcmVuY2UgKDxjb2RlPnRheG9ub215LmdldFJlZigpPC9jb2RlPikuCi0JICogPHA+Ci0JICogSWYgdGhlIGdpdmVuIDxjb2RlPnRheG9ub215PC9jb2RlPiBpcyBhIGZ1bGwgbW9kZWwsCi0JICogdGhlbiBhIG5ldyA8Y29kZT5UYXhvbm9teTwvY29kZT4gaXMgcmV0dXJuZWQgc3VjaCB0aGF0Ci0JICogPHVsPgotCSAqIDxsaT48Y29kZT5nZXRSZWYoKTwvY29kZT4gZXF1YWxzIDxjb2RlPnRheG9ub215LmdldElkKCk8L2NvZGU+PC9saT4KLQkgKiA8bGk+PGNvZGU+Z2V0TG9jYXRpb24oKTwvY29kZT4gaXMgbnVsbDwvbGk+Ci0JICogPGxpPjxjb2RlPmdldElkKCk8L2NvZGU+IGlzIG51bGw8L2xpPgotCSAqIDwvdWw+Ci0JICogPHA+Ci0JICogSW4gdGhlIGdpdmVuIDxjb2RlPnRheG9ub215PC9jb2RlPiBpcyBpdHNlbGYgYSByZWZlcmVuY2UsCi0JICogdGhlbiBhIG5ldyA8Y29kZT5UYXhvbm9teTwvY29kZT4gaXMgcmV0dXJuZWQgc3VjaCB0aGF0Ci0JICogPHVsPgotCSAqIDxsaT48Y29kZT5nZXRSZWYoKTwvY29kZT4gZXF1YWxzIDxjb2RlPnRheG9ub215LmdldFJlZigpPC9jb2RlPjwvbGk+Ci0JICogPGxpPjxjb2RlPmdldExvY2F0aW9uKCk8L2NvZGU+IGVxdWFscyA8Y29kZT50YXhvbm9teS5nZXRMb2NhdGlvbigpPC9jb2RlPjwvbGk+Ci0JICogPGxpPjxjb2RlPmdldElkKCk8L2NvZGU+IGlzIG51bGw8L2xpPgotCSAqIDwvdWw+Ci0JICogCi0JICogQHBhcmFtIHRheG9ub215IFRoZSA8Y29kZT5UYXhvbm9teTwvY29kZT4gbW9kZWwgdG8gY2xvbmUgb3IKLQkgKiByZWZlciB0byBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgZ2l2ZW4gPGNvZGU+dGF4b25vbXk8L2NvZGU+Ci0JICogaXMgYSBmdWxsIG1vZGVsIG9yIGEgcmVmZXJlbmNlLgotCSAqIEByZXR1cm4gQSBuZXcgPGNvZGU+VGF4b25vbXk8L2NvZGU+LCBndWFyYW50ZWVkIHRvIGJlIGEgcmVmZXJlbmNlLgotCSAqLwotCXB1YmxpYyBUYXhvbm9teSBuZXdUYXhvbm9teVJlZmVyZW5jZSAoIFRheG9ub215IHRheG9ub215ICkKLQl7Ci0JCVN0cmluZyBpZCA9IHRheG9ub215LmdldElkKCk7Ci0JCVN0cmluZyByZWYgPSB0YXhvbm9teS5nZXRSZWYoKTsKLQkJVGF4b25vbXkgdGF4b25vbXlSZWYgPSBuZXdUYXhvbm9teSgpOwotCQlpZiAocmVmID09IG51bGwgfHwgIiIuZXF1YWxzKHJlZikpCi0JCXsKLQkJCXRheG9ub215UmVmLnNldFJlZihpZCk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQl0YXhvbm9teVJlZi5zZXRSZWYocmVmKTsKLQkJCXRheG9ub215UmVmLnNldExvY2F0aW9uKHRheG9ub215LmdldExvY2F0aW9uKCkpOwotCQl9Ci0JCXJldHVybiB0YXhvbm9teVJlZjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRydWUgaWYgYW5kIG9ubHkgaWYgdGhlIGdpdmVuIFVSTCBpZGVudGlmaWVzCi0JICogYSByZXNvdXJjZSB0aGF0IGV4aXN0cyBhbmQgaXMgYSBmaWxlLgotCSAqIEBwYXJhbSB1cmwgVGhlIFVSTCBvZiB0aGUgcmVzb3VyY2UgdG8gY2hlY2sgZm9yIGV4aXN0ZW5jZS4KLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhlIFVSTCByZXNvdXJjZSBleGlzdHMgYW5kIGlzIGEgZmlsZSwKLQkgKiBvciBmYWxzZSBvdGhlcndpc2UuCi0JICovCi0Jc3RhdGljIGJvb2xlYW4gZXhpc3RzICggVVJMIHVybCApCi0JewotCQlpZiAoInBsYXRmb3JtIi5lcXVhbHModXJsLmdldFByb3RvY29sKCkpKQotCQl7Ci0JCQlTdHJpbmcgdXJsRmlsZSA9IHVybC5nZXRGaWxlKCkudHJpbSgpOwotCQkJSVBhdGggcGF0aCA9IG5ldyBQYXRoKHVybEZpbGUpLnJlbW92ZUZpcnN0U2VnbWVudHMoMSk7Ci0JCQlpZiAocGF0aC5zZWdtZW50Q291bnQoKSA8PSAxKQotCQkJewotCQkJCXJldHVybiBmYWxzZTsKLQkJCX0KLQkJCUlQYXRoIG9zUGF0aCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShwYXRoKS5nZXRMb2NhdGlvbigpOwotCQkJaWYgKG9zUGF0aCA9PSBudWxsKQotCQkJewotCQkJCXJldHVybiBmYWxzZTsKLQkJCX0KLQkJCUZpbGUgZmlsZSA9IG5ldyBGaWxlKG9zUGF0aC50b1N0cmluZygpKTsKLQkJCXJldHVybiAoZmlsZS5leGlzdHMoKSAmJiAhZmlsZS5pc0RpcmVjdG9yeSgpKTsKLQkJfQotCQllbHNlIGlmICgiZmlsZSIuZXF1YWxzKHVybC5nZXRQcm90b2NvbCgpKSkKLQkJewotCQkJRmlsZSBmaWxlID0gbmV3IEZpbGUodXJsLmdldEZpbGUoKS50cmltKCkpOwotCQkJcmV0dXJuIChmaWxlLmV4aXN0cygpICYmICFmaWxlLmlzRGlyZWN0b3J5KCkpOwotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkvKioKLQkgKiBPcGVucyBhbiA8Y29kZT5PdXRwdXRTdHJlYW08L2NvZGU+IGZvciB3cml0aW5nIHRvCi0JICogdGhlIGdpdmVuIDxjb2RlPnVybDwvY29kZT4uCi0JICogQHBhcmFtIHVybCBUaGUgVVJMIG9mIHRoZSByZXNvdXJjZSB0byB3cml0ZS4KLQkgKiBAcmV0dXJuIEFuIE91cHR1dFN0cmVhbSB0byB3cml0ZSB0by4KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uIElmIHRoZSBzdHJlYW0gY291bGQgbm90IGJlIG9wZW5lZC4KLQkgKi8KLQlzdGF0aWMgT3V0cHV0U3RyZWFtIGdldE91dHB1dFN0cmVhbUZvciAoIFVSTCB1cmwgKSB0aHJvd3MgSU9FeGNlcHRpb24KLQl7Ci0JCU91dHB1dFN0cmVhbSBvdXRwdXRTdHJlYW0gPSBudWxsOwotCQlpZiAoInBsYXRmb3JtIi5lcXVhbHModXJsLmdldFByb3RvY29sKCkpKQotCQl7Ci0JCQlTdHJpbmcgdXJsRmlsZSA9IHVybC5nZXRGaWxlKCkudHJpbSgpOwotCQkJSVBhdGggcGF0aCA9IG5ldyBQYXRoKHVybEZpbGUpLnJlbW92ZUZpcnN0U2VnbWVudHMoMSk7Ci0JCQlpZiAocGF0aC5zZWdtZW50Q291bnQoKSA8PSAxKQotCQkJewotCQkJCXRocm93IG5ldyBJT0V4Y2VwdGlvbigiVGhlIFBsYXRmb3JtIFVSTCB7MH0gaXMgbm90IGJvdW5kIHRvIGEgbG9jYWwsIHdyaXRhYmxlIGZpbGUuIik7Ci0JCQl9Ci0JCQlJUGF0aCBvc1BhdGggPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUocGF0aCkuZ2V0TG9jYXRpb24oKTsKLQkJCWlmIChvc1BhdGggPT0gbnVsbCkKLQkJCXsKLQkJCQl0aHJvdyBuZXcgSU9FeGNlcHRpb24oIlRoZSBQbGF0Zm9ybSBVUkwgezB9IGlzIG5vdCBib3VuZCB0byBhIGxvY2FsLCB3cml0YWJsZSBmaWxlLiIpOwotCQkJfQotCQkJRmlsZSBmaWxlID0gbmV3IEZpbGUob3NQYXRoLnRvU3RyaW5nKCkpOwotCQkJaWYgKGZpbGUuaXNEaXJlY3RvcnkoKSkKLQkJCXsKLQkJCQl0aHJvdyBuZXcgSU9FeGNlcHRpb24oIlRoZSBQbGF0Zm9ybSBVUkwgezB9IGlzIGJvdW5kIHRvIGEgZm9sZGVyLiIpOwotCQkJfQotCQkJb3V0cHV0U3RyZWFtID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oZmlsZSk7Ci0JCX0KLQkJZWxzZSBpZiAoImZpbGUiLmVxdWFscyh1cmwuZ2V0UHJvdG9jb2woKSkpCi0JCXsKLQkJCUZpbGUgZmlsZSA9IG5ldyBGaWxlKHVybC5nZXRGaWxlKCkudHJpbSgpKTsKLQkJCWlmIChmaWxlLmlzRGlyZWN0b3J5KCkpCi0JCQl7Ci0JCQkJdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJUaGUgRmlsZSBVUkwgezB9IGlzIGJvdW5kIHRvIGEgZGlyZWN0b3J5LiIpOwotCQkJfQotCQkJb3V0cHV0U3RyZWFtID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oZmlsZSk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlVUkxDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKLQkJCWNvbm5lY3Rpb24uc2V0RG9PdXRwdXQodHJ1ZSk7Ci0JCQlvdXRwdXRTdHJlYW0gPSBjb25uZWN0aW9uLmdldE91dHB1dFN0cmVhbSgpOwotCQl9Ci0JCXJldHVybiBvdXRwdXRTdHJlYW07Ci0JfQotCi0JLyoqCi0JICogT3BlbnMgYW4gPGNvZGU+SW5wdXRTdHJlYW08L2NvZGU+IGZvciByZWFkaW5nIGZyb20KLQkgKiB0aGUgZ2l2ZW4gPGNvZGU+dXJsPC9jb2RlPi4KLQkgKiBAcGFyYW0gdXJsIFRoZSBVUkwgb2YgdGhlIHJlc291cmNlIHRvIHJlYWQuCi0JICogQHJldHVybiBBbiBJbnB1dFN0cmVhbSB0byByZWFkIGZyb20uCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbiBJZiB0aGUgc3RyZWFtIGNvdWxkIG5vdCBiZSBvcGVuZWQuCi0JICovCi0Jc3RhdGljIElucHV0U3RyZWFtIGdldElucHV0U3RyZWFtRm9yICggVVJMIHVybCApIHRocm93cyBJT0V4Y2VwdGlvbgotCXsKLQkJcmV0dXJuIHVybC5vcGVuU3RyZWFtKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9yZWdpc3RyeS9VRERJUmVnaXN0cnlTZXJ2aWNlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3JlZ2lzdHJ5L1VERElSZWdpc3RyeVNlcnZpY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWIzY2ExYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3JlZ2lzdHJ5L1VERElSZWdpc3RyeVNlcnZpY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnJlZ2lzdHJ5OwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVGF4b25vbWllczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnlQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW4uV1NQbHVnaW47Ci0KLS8qKgotICogVURESVJlZ2lzdHJ5U2VydmljZSBpcyBhbiBhZGp1bmN0IHRvIDxjb2RlPlJlZ2lzdHJ5U2VydmljZTwvY29kZT4uCi0gKiBDYWxsIHRoZSA8Y29kZT5SZWdpc3RyeVNlcnZpY2UuaW5zdGFuY2UoKTwvY29kZT4gc3RhdGljIG1ldGhvZCB0bwotICogZ2V0IHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcy4KLSAqIDxwPgotICogVURESVJlZ2lzdHJ5U2VydmljZSBwcm92aWRlcyB1dGlsaXR5IG1ldGhvZHMgdG8gZWFzZSB0aGUgY3JlYXRpb24KLSAqIG9mIG5ldyA8Y29kZT5VRERJUmVnaXN0cnk8L2NvZGU+IG1vZGVscyBhbmQgdGhlIG1hbmFnZW1lbnQgb2YgdGhlaXIKLSAqIHJlbGF0aW9uc2hpcHMgdG8gPGNvZGU+VGF4b25vbXk8L2NvZGU+IG1vZGVscy4KLSAqIDxwPgotICogVXRpbGl0eSBtZXRob2RzIGZvciBsb2FkaW5nIGFuZCBzYXZpbmcgPGNvZGU+UmVnaXN0cnk8L2NvZGU+IGFuZAotICogPGNvZGU+VGF4b25vbXk8L2NvZGU+IG1vZGVscyBhcmUgb24gPGNvZGU+UmVnaXN0cnlTZXJ2aWNlPC9jb2RlPi4KLSAqIE1ldGhvZHMgZm9yIG1hbmFnaW5nIGFuIGluZGV4ZWQgZmFtaWx5IG9mIDxjb2RlPlJlZ2lzdHJ5PC9jb2RlPiBhbmQKLSAqIDxjb2RlPlRheG9ub215PC9jb2RlPiBtb2RlbHMgYXJlIG9uIDxjb2RlPklSZWdpc3RyeU1hbmFnZXI8L2NvZGU+LgotICogPHA+Ci0gKiBBIHR5cGljYWwgdXNlIG9mIDxjb2RlPlVERElSZWdpc3RyeVNlcnZpY2U8L2NvZGU+IGFuZCBpdHMgcmVsYXRlZAotICogY2xhc3NlcyB0byBjcmVhdGUgYW5kIHNhdmUgYSBuZXcgZmFtaWx5IG9mIG1vZGVscyBpczoKLSAqIDxibG9ja3F1b3RlPgotICogPGNvZGU+Ci0gKiBSZWdpc3RyeVNlcnZpY2UgcmVnaXN0cnlTZXJ2aWNlID0gUmVnaXN0cnlTZXJ2aWNlLmluc3RhbmNlKCk7Ci0gKiBVRERJUmVnaXN0cnlTZXJ2aWNlIHVkZGlSZWdpc3RyeVNlcnZpY2UgPSBVRERJUmVnaXN0cnlTZXJ2aWNlLmluc3RhbmNlKCk7Ci0gKiBVRERJUmVnaXN0cnkgdWRkaVJlZ2lzdHJ5ID0gdWRkaVJlZ2lzdHJ5U2VydmljZS5uZXdVRERJUmVnaXN0cnkoKTsKLSAqIC8vIGJ1aWxkIHVwIHlvdXIgcmVnaXN0cnkgbW9kZWwgaGVyZQotICogVGF4b25vbXkgdGF4b25vbXkgPSByZWdpc3RyeVNlcnZpY2UubmV3VGF4b25vbXkoKTsKLSAqIC8vIGJ1aWxkIHVwIHlvdXIgdGF4b25vbXkgbW9kZWwgaGVyZQotICogdWRkaVJlZ2lzdHJ5U2VydmljZS5hZGRUYXhvbm9teSh1ZGRpUmVnaXN0cnksdGF4b25vbXkpOwotICogSVJlZ2lzdHJ5TWFuYWdlciByZWdpc3RyeU1hbmFnZXIgPSByZWdpc3RyeVNlcnZpY2UuZ2V0RGVmYXVsdFJlZ2lzdHJ5TWFuYWdlcigpOwotICogcmVnaXN0cnlNYW5hZ2VyLnNhdmVSZWdpc3RyeSh1ZGRpUmVnaXN0cnkpOwotICogPC9jb2RlPgotICogPC9ibG9ja3F1b3RlPgotICogQHNlZSAjaW5zdGFuY2UoKQotICogQHNlZSBSZWdpc3RyeVNlcnZpY2UKLSAqIEBzZWUgSVJlZ2lzdHJ5TWFuYWdlcgotICogQHNlZSBVRERJUmVnaXN0cnkKLSAqIEBzZWUgVGF4b25vbXkKLSAqIEBhdXRob3IgY2JyZWFsZXkKLSAqLwotcHVibGljIGNsYXNzIFVERElSZWdpc3RyeVNlcnZpY2UKLXsKLQlwcml2YXRlIHN0YXRpYyBVRERJUmVnaXN0cnlTZXJ2aWNlIGluc3RhbmNlXzsKLQotCS8qKgotCSAqIEEgVURESVJlZ2lzdHJ5U2VydmljZSBjYW5ub3QgYmUgZGlyZWN0bHkgY29uc3RydWN0ZWQuCi0JICogVXNlIEBsaW5rICNpbnN0YW5jZSgpIHRvIGdldCB0aGUgc2luZ2xldG9uIG9mIHRoaXMgY2xhc3MuCi0JICovCi0JcHJpdmF0ZSBVRERJUmVnaXN0cnlTZXJ2aWNlICgpCi0JewotCQlVRERJUmVnaXN0cnlQYWNrYWdlLmVJTlNUQU5DRS5nZXRDbGFzcygpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBvZiB0aGlzIGNsYXNzLgotCSAqIEByZXR1cm4gVGhlIHNpbmdsZXRvbiBvZiB0aGlzIGNsYXNzLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgVURESVJlZ2lzdHJ5U2VydmljZSBpbnN0YW5jZSAoKQotCXsKLQkJaWYgKGluc3RhbmNlXyA9PSBudWxsKQotCQl7Ci0JCQlpbnN0YW5jZV8gPSBuZXcgVURESVJlZ2lzdHJ5U2VydmljZSgpOwotCQl9Ci0JCXJldHVybiBpbnN0YW5jZV87Ci0JfQotCQotCS8qKgotCSAqIEFkZHMgYSByZWZlcmVuY2UgZnJvbSB0aGUgZ2l2ZW4gPGNvZGU+VURESVJlZ2lzdHJ5PC9jb2RlPgotCSAqIHRvIHRoZSBnaXZlbiA8Y29kZT5UYXhvbm9teTwvY29kZT4gb2JqZWN0LgotCSAqIEBwYXJhbSB1ZGRpUmVnaXN0cnkgVGhlIDxjb2RlPlVERElSZWdpc3RyeTwvY29kZT4gdG8gd2hpY2ggdGhlIHJlZmVyZW5jZQotCSAqIHRvIHRoZSBnaXZlbiA8Y29kZT5UYXhvbm9teTwvY29kZT4gb2JqZWN0IHNob3VsZCBiZSBhZGRlZC4KLQkgKiBAcGFyYW0gdGF4b25vbXkgVGhlIDxjb2RlPlRheG9ub215PC9jb2RlPiBvYmplY3QgdG8gYWRkLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vdmVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5Ci0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215Ci0JICovCi0JcHVibGljIHZvaWQgYWRkVGF4b25vbXkgKCBVRERJUmVnaXN0cnkgdWRkaVJlZ2lzdHJ5LCBUYXhvbm9teSB0YXhvbm9teSApCi0JewotCQlhZGRUYXhvbm9taWVzKHVkZGlSZWdpc3RyeSxuZXcgVGF4b25vbXlbXSB7dGF4b25vbXl9KTsKLQl9Ci0KLQkvKioKLQkgKiBBZGRzIHRoZSBnaXZlbiA8Y29kZT5UYXhvbm9teTwvY29kZT4gb2JqZWN0cyBhcy1pcwotCSAqICh3aGV0aGVyIHRoZXkgYXJlIHJlZmVyZW5jZXMgb3IgZnVsbCBtb2RlbHMpCi0JICogdG8gdGhlIGdpdmVuIDxjb2RlPlVERElSZWdpc3RyeTwvY29kZT4uCi0JICogQHBhcmFtIHVkZGlSZWdpc3RyeSBUaGUgPGNvZGU+VURESVJlZ2lzdHJ5PC9jb2RlPiB0byB3aGljaAotCSAqIHRoZSBnaXZlbiA8Y29kZT5UYXhvbm9teTwvY29kZT4gb2JqZWN0cyBzaG91bGQgYmUgYWRkZWQuCi0JICogQHBhcmFtIHRheG9ub21pZXMgVGhlIGFycmF5IG9mIDxjb2RlPlRheG9ub215PC9jb2RlPiBvYmplY3RzIHRvIGFkZC4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb3ZlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teQotCSAqLwotCXB1YmxpYyB2b2lkIGFkZFRheG9ub21pZXMgKCBVRERJUmVnaXN0cnkgdWRkaVJlZ2lzdHJ5LCBUYXhvbm9teVtdIHRheG9ub21pZXMgKQotCXsKLQkJaWYgKHRheG9ub21pZXMubGVuZ3RoID4gMCkKLQkJewotCQkJVGF4b25vbWllcyB0YXhvbm9teVNldCA9IHVkZGlSZWdpc3RyeS5nZXRUYXhvbm9taWVzKCk7Ci0JCQlpZiAodGF4b25vbXlTZXQgPT0gbnVsbCkKLQkJCXsKLQkJCQl0YXhvbm9teVNldCA9IFVERElSZWdpc3RyeUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVRheG9ub21pZXMoKTsKLQkJCQl1ZGRpUmVnaXN0cnkuc2V0VGF4b25vbWllcyh0YXhvbm9teVNldCk7Ci0JCQl9Ci0JCQlFTGlzdCBsaXN0ID0gdGF4b25vbXlTZXQuZ2V0VGF4b25vbXkoKTsKLQkJCWZvciAoaW50IGk9MDsgaTx0YXhvbm9taWVzLmxlbmd0aDsgaSsrKQotCQkJewotCQkJCWxpc3QuYWRkKHRheG9ub21pZXNbaV0pOwotCQkJfQotCQl9Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgYW4gYXJyYXkgb2YgVVJJIGlkZW50aWZpZXJzIHRvIDxjb2RlPlRheG9ub215PC9jb2RlPgotCSAqIG1vZGVscyBjb250YWluZWQgaW4gb3IgcmVmZXJlbmNlZCBieSB0aGUgPGNvZGU+dWRkaVJlZ2lzdHJ5PC9jb2RlPi4KLQkgKiBQYXNzaW5nIHRoZSByZXN1bHQgdG8gPGNvZGU+SVJlZ2lzdHJ5TWFuYWdlci5sb2FkVGF4b25vbWllcygpPC9jb2RlPgotCSAqIGlzIGEgaGFuZHkgd2F5IHRvIHJlc29sdmUgYW5kIGxvYWQgdGhlIGZ1bGwgdGF4b25vbXkgbW9kZWxzIHVzZWQKLQkgKiBieSB0aGUgVURESSByZWdpc3RyeS4KLQkgKiAKLQkgKiBAcmV0dXJuIEFuIGFycmF5IG9mIFVSSSBpZGVudGlmaWVycywgcG9zc2libHkgZW1wdHkgYnV0IG5ldmVyIG51bGwsCi0JICogdG8gPGNvZGU+VGF4b25vbXk8L2NvZGU+IG1vZGVscy4KLQkgKiBAc2VlIFRheG9ub215Ci0JICogQHNlZSBJUmVnaXN0cnlNYW5hZ2VyI2xvYWRUYXhvbm9taWVzKFN0cmluZ1tdKQotCSAqLwotCXB1YmxpYyBTdHJpbmdbXSBnZXRUYXhvbm9teVVSSXMgKCBVRERJUmVnaXN0cnkgdWRkaVJlZ2lzdHJ5ICkKLQl7Ci0JCVRheG9ub21pZXMgdGF4b25vbWllcyA9IHVkZGlSZWdpc3RyeS5nZXRUYXhvbm9taWVzKCk7Ci0JCWlmICh0YXhvbm9taWVzID09IG51bGwpIHJldHVybiBuZXcgU3RyaW5nWzBdOwotCQlFTGlzdCB0YXhvbm9teUxpc3QgPSB0YXhvbm9taWVzLmdldFRheG9ub215KCk7Ci0JCUxpc3QgdGF4b25vbXlVUklzID0gbmV3IEFycmF5TGlzdCh0YXhvbm9teUxpc3Quc2l6ZSgpKTsKLQkJSXRlcmF0b3IgaSA9IHRheG9ub215TGlzdC5pdGVyYXRvcigpOwotCQl3aGlsZSAoaS5oYXNOZXh0KCkpCi0JCXsKLQkJCVRheG9ub215IHRheG9ub215ID0gKFRheG9ub215KWkubmV4dCgpOwotCQkJaWYgKHRheG9ub215LmdldElkKCkgIT0gbnVsbCkKLQkJCXsKLQkJCQl0YXhvbm9teVVSSXMuYWRkKHRheG9ub215LmdldElkKCkpOwotCQkJfQotCQkJZWxzZSBpZiAodGF4b25vbXkuZ2V0UmVmKCkgIT0gbnVsbCkKLQkJCXsKLQkJCQl0YXhvbm9teVVSSXMuYWRkKHRheG9ub215LmdldFJlZigpKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gKFN0cmluZ1tdKXRheG9ub215VVJJcy50b0FycmF5KG5ldyBTdHJpbmdbMF0pOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgYW4gYXJyYXkgb2YgZnVsbCA8Y29kZT5UYXhvbm9teTwvY29kZT4gbW9kZWxzCi0JICogY29udGFpbmVkIGluIG9yIHJlZmVyZW5jZWQgYnkgdGhlIGdpdmVuIDxjb2RlPnVkZGlSZWdpc3RyeTwvY29kZT4uCi0JICogSW5saW5lIHRheG9ub21pZXMgYXJlIHJldHVybmVkIGFzLWlzLiBSZWZlcmVuY2VzIHRvIHRheG9ub21pZXMgYXJlCi0JICogcmVzb2x2ZWQgYnkgZm9sbG93aW5nIHRoZSBsb2NhdGlvbnMgb2YgdGhlIHJlZmVyZW5jZXMgYW5kIGxvYWRpbmcKLQkgKiB0aGUgbW9kZWxzIGF0IHRoZSBsb2NhdGlvbiBVUkxzLgotCSAqIFRoaXMgbWV0aG9kIG5ldmVyIHJldHVybnMgbnVsbCwgYnV0IG1heSByZXR1cm4gYW4gZW1wdHkgYXJyYXkuCi0JICogQHBhcmFtIHJlZ2lzdHJ5IFRoZSA8Y29kZT5VRERJUmVnaXN0cnk8L2NvZGU+IHdob3NlCi0JICogPGNvZGU+VGF4b25vbXk8L2NvZGU+IG1vZGVscyB0byBmaW5kLgotCSAqIEByZXR1cm4gVGhlIGFycmF5LCBuZXZlciBudWxsIGJ1dCBwb3NzaWJseSBsZW5ndGggemVybywKLQkgKiBvZiA8Y29kZT5UYXhvbm9teTwvY29kZT4gbW9kZWxzLgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vdmVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5Ci0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215Ci0JICogQHNlZSAjZ2V0VGF4b25vbXlVUklzKFVERElSZWdpc3RyeSkKLQkgKiBAc2VlIElSZWdpc3RyeU1hbmFnZXIjbG9hZFRheG9ub21pZXMoU3RyaW5nW10pCi0JICogQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2Qgc3VmZmVycyBmcm9tIGEgbGFjayBvZiBhd2FyZW5lc3Mgb2YgdGhlCi0JICogSW5kZXggWE1MIGRvY3VtZW50IHRoYXQgaXMgb2Z0ZW4gcmVzcG9uc2libGUgZm9yIG1hcHBpbmcgVVJJcwotCSAqIHRvIGxvY2F0aW9uIFVSTHMuIFVzZQotCSAqIDxjb2RlPklSZWdpc3RyeU1hbmFnZXIubG9hZFRheG9ub21pZXMoZ2V0VGF4b25vbXlVUklzKHVkZGlSZWdpc3RyeSkpPC9jb2RlPgotCSAqIGluc3RlYWQuCi0JICovCi0JcHVibGljIFRheG9ub215W10gZ2V0VGF4b25vbWllcyAoIFVERElSZWdpc3RyeSB1ZGRpUmVnaXN0cnkgKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJUmVnaXN0cnlTZXJ2aWNlIHJlZ2lzdHJ5U2VydmljZSA9IFJlZ2lzdHJ5U2VydmljZS5pbnN0YW5jZSgpOwotCQlUYXhvbm9taWVzIHRheG9ub21pZXMgPSB1ZGRpUmVnaXN0cnkuZ2V0VGF4b25vbWllcygpOwotCQlpZiAodGF4b25vbWllcyA9PSBudWxsKSByZXR1cm4gbmV3IFRheG9ub215WzBdOwotCQlFTGlzdCBsaXRlcmFsVGF4b25vbXlMaXN0ID0gdGF4b25vbWllcy5nZXRUYXhvbm9teSgpOwotCQlMaXN0IHJlc29sdmVkVGF4b25vbXlMaXN0ID0gbmV3IEFycmF5TGlzdChsaXRlcmFsVGF4b25vbXlMaXN0LnNpemUoKSk7Ci0JCUl0ZXJhdG9yIGkgPSBsaXRlcmFsVGF4b25vbXlMaXN0Lml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChpLmhhc05leHQoKSkKLQkJewotCQkJVGF4b25vbXkgbGl0ZXJhbFRheG9ub215ID0gKFRheG9ub215KWkubmV4dCgpOwotCQkJaWYgKGxpdGVyYWxUYXhvbm9teS5nZXRJZCgpICE9IG51bGwpCi0JCQl7Ci0JCQkJcmVzb2x2ZWRUYXhvbm9teUxpc3QuYWRkKGxpdGVyYWxUYXhvbm9teSk7Ci0JCQl9Ci0JCQllbHNlIGlmIChsaXRlcmFsVGF4b25vbXkuZ2V0TG9jYXRpb24oKSAhPSBudWxsKQotCQkJewotCQkJCXRyeQotCQkJCXsKLQkJCQkJVGF4b25vbXkgcmVzb2x2ZWRUYXhvbm9teSA9IHJlZ2lzdHJ5U2VydmljZS5sb2FkVGF4b25vbXkobmV3IFVSTChsaXRlcmFsVGF4b25vbXkuZ2V0TG9jYXRpb24oKSkpOwotCQkJCQlyZXNvbHZlZFRheG9ub215TGlzdC5hZGQocmVzb2x2ZWRUYXhvbm9teSk7Ci0JCQkJfQotCQkJCWNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLQkJCQl7Ci0JCQkJCS8vVE9ETzogTmVlZCBtZXNzYWdlIHRleHQgaGVyZQotCQkJCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIFdTUGx1Z2luLklELCAwLCAiIiwgZSkpOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gKFRheG9ub215W10pcmVzb2x2ZWRUYXhvbm9teUxpc3QudG9BcnJheShuZXcgVGF4b25vbXlbMF0pOwotCX0KLQkKLQkvKioKLQkgKiBDcmVhdGVzIGFuZCByZXR1cm5zIGEgbmV3IDxjb2RlPlVERElSZWdpc3RyeTwvY29kZT4gbW9kZWwuCi0JICogQHJldHVybiBBIG5ldyA8Y29kZT5VRERJUmVnaXN0cnk8L2NvZGU+IG1vZGVsLCBuZXZlciBudWxsLgotCSAqLwotCXB1YmxpYyBVRERJUmVnaXN0cnkgbmV3VURESVJlZ2lzdHJ5ICgpCi0JewotCQlyZXR1cm4gVURESVJlZ2lzdHJ5RmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlVURESVJlZ2lzdHJ5KCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9yZWdpc3RyeS9VRERJVGF4b25vbXlGaW5kZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcmVnaXN0cnkvVURESVRheG9ub215RmluZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkNGNlODQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9yZWdpc3RyeS9VRERJVGF4b25vbXlGaW5kZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucmVnaXN0cnk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuVGF4b25vbXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC51ZGRpcmVnaXN0cnkuVURESVJlZ2lzdHJ5OwotCi0vKioKLSAqIFRoaXMgPGNvZGU+SVRheG9ub215RmluZGVyPC9jb2RlPiBmb3IgVURESSByZWdpc3RyaWVzCi0gKiByZXR1cm5zIGFuIGFycmF5IG9mIDxjb2RlPlRheG9ub215PC9jb2RlPgotICogbW9kZWxzIHVzZWQgKHN1cHBvcnRlZCBieSkgdGhlIHJlZ2lzdHJ5LgotICogQGF1dGhvciBnaWxiZXJ0YUBjYS5pYm0uY29tCi0gKiBAc2VlIFVERElSZWdpc3RyeQotICovCi1wdWJsaWMgY2xhc3MgVURESVRheG9ub215RmluZGVyIGltcGxlbWVudHMgSVRheG9ub215RmluZGVyCi17Ci0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnJlZ2lzdHJ5LklUYXhvbm9teUZpbmRlciN0YXhvbm9taWVzKG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnkpCi0JICovCi0JcHVibGljIFRheG9ub215W10gdGF4b25vbWllcyAoIFJlZ2lzdHJ5IHJlZ2lzdHJ5ICkKLQl7Ci0JCWlmICggcmVnaXN0cnkgaW5zdGFuY2VvZiBVRERJUmVnaXN0cnkgKQotCQl7Ci0JCQlVRERJUmVnaXN0cnkgdWRkaVJlZ2lzdHJ5ID0gKFVERElSZWdpc3RyeSlyZWdpc3RyeTsJICAKLQkJCXJldHVybiAoVGF4b25vbXlbXSl1ZGRpUmVnaXN0cnkuZ2V0VGF4b25vbWllcygpLmdldFRheG9ub215KCkudG9BcnJheShuZXcgVGF4b25vbXlbMF0pOwotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvdXRpbC9Vbml2ZXJzYWxQYXRoVHJhbnNmb3JtZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvdXRpbC9Vbml2ZXJzYWxQYXRoVHJhbnNmb3JtZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRiMWFhMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3V0aWwvVW5pdmVyc2FsUGF0aFRyYW5zZm9ybWVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwODI1ICAgMTM1NTcwIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBTZXJ2aWNlIGltcGxlbWVudGF0aW9uIFVSTCBub3QgZGlzcGxheWVkIHByb3Blcmx5IG9uIGZpcnN0IHBhZ2UKLSAqIDIwMDcwMTI1ICAgMTcxMDcxIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBDcmVhdGUgcHVibGljIHV0aWxpdHkgbWV0aG9kIGZvciBjb3B5aW5nIFdTREwgZmlsZXMgCi0gKiAyMDA3MDUwOSAgIDE4MjI3NCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC51dGlsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotCi0vKioKLSAqIDxwPkEgdXRpbGl0eSBjbGFzcyBmb3IgdHJhbnNmb3JtaW5nIGEgcGF0aCB0byBhbmQgZnJvbSB0aGUgZm9sbG93aW5nIGZvcm1hdHM6PC9wPgotICogPHVsPgotICogPGxpPkFuIGFic29sdXRlIGVjbGlwc2UgcGF0aCAoaS5lLiBzdGFydHMgd2l0aCAvUHJvamVjdE5hbWUvLi4uKTwvbGk+Ci0gKiA8bGk+QW4gYWJzb2x1dGUgZmlsZXN5c3RlbSBVUkkgcGF0aCAoaS5lLiBmaWxlOi9DOi9NeVdvcmtzcGFjZS9Qcm9qZWN0TmFtZS8uLi4pPC9saT4KLSAqIDxsaT5BIHBsYXRmb3JtIFVSSSBwYXRoIChpLmUuIHBsYXRmb3JtOi9yZXNvdXJjZS9Qcm9qZWN0TmFtZS8uLi4pPC9saT4gCi0gKiA8L3VsPiAKLSAqIDxwPkluIGFsbCBjYXNlcywgaWYgdGhlIHRyYW5zZm9ybWVyIGNvdWxkIG5vdCBjb252ZXJ0IHRoZSBwYXRoLCBpdCBpcyByZXR1cm5lZCB1bmNoYW5nZWQuPC9wPgotICovCi1wdWJsaWMgY2xhc3MgVW5pdmVyc2FsUGF0aFRyYW5zZm9ybWVyIHsKLQkKLQkvKioKLQkgKiBQcmVmaXggb2YgcGxhdGZvcm0gVVJJcy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTEFURk9STV9QUkVGSVggPSAicGxhdGZvcm06L3Jlc291cmNlLyI7Ci0JCi0JLyoqCi0JICogUHJlZml4IG9mIGZpbGVzeXN0ZW0gVVJJcy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBMT0NBVElPTl9QUkVGSVggPSAiZmlsZTovIjsKLQotCXByaXZhdGUgc3RhdGljIFN0cmluZyBQUk9UT0NPTF9NQVJLRVIgPSAiOiI7Ci0JcHJpdmF0ZSBzdGF0aWMgY2hhciBQQVRIX1NFUEFSQVRPUiAgICA9ICcvJzsKLSAJCi0JLyoqCi0JICogRGV0ZXJtaW5lcyBpZiBhIFVSSSBzdHJpbmcgc3RhcnRzIHdpdGggdGhlIGdpdmVuIHByZWZpeC4gIFRoaXMgbWV0aG9kIGlzIGNhc2UtaW5zZW5zaXRpdmUuIAotCSAqIAotCSAqIEBwYXJhbSB1cmkgVGhlIFVSSSBzdHJpbmcgdG8gY2hlY2suCi0JICogQHBhcmFtIHByZWZpeCBUaGUgcHJlZml4LgotCSAqIEByZXR1cm4gdHJ1ZSBpZmYgcHJlZml4IGlzIGEgc3RyaWN0IHByZWZpeCBvZiB0aGUgVVJJIHN0cmluZyAoaS5lLiBwcmVmaXggIT0gdXJpKSwgZmFsc2UKLQkgKiBpcyByZXR1cm5lZCBvdGhlcndpc2UuCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1ByZWZpeChTdHJpbmcgdXJpLCBTdHJpbmcgcHJlZml4KSB7Ci0JCWlmIChwcmVmaXgubGVuZ3RoKCkgPj0gdXJpLmxlbmd0aCgpKQotCQkJcmV0dXJuIGZhbHNlOwotCQkKLQkJcmV0dXJuIHVyaS5zdWJzdHJpbmcoMCwgcHJlZml4Lmxlbmd0aCgpKS5lcXVhbHNJZ25vcmVDYXNlKHByZWZpeCk7Ci0JfQotCi0JLyoqCi0JICogVHJhbnNmb3JtIHRoZSBnaXZlbiBwYXRoIHRvIGFuIGVjbGlwc2UgcGF0aC4gIElmIHRoZSBnaXZlbiBwYXRoIGlzIGEgZmlsZXN5c3RlbSBVUkksIGl0IG11c3QgbWFwIHRvCi0JICogYSByZWFsIHJlc291cmNlIGluIHRoZSB3b3Jrc3BhY2UuCi0JICogCi0JICogQHBhcmFtIHN0ciBUaGUgcGF0aCB0byB0cmFuc2Zvcm0uCi0JICogQHJldHVybiBSZXR1cm5zIGFuIGVjbGlwc2UgcGF0aCBlcXVpdmFsZW50IG9mIHRoZSBnaXZlbiBwYXRoLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIHRvUGF0aChTdHJpbmcgc3RyKSB7Ci0JCQotCQlpZiAoc3RyID09IG51bGwgfHwgc3RyLmxlbmd0aCgpID09IDApCi0JCQlyZXR1cm4gc3RyOwotCQkKLQkJaWYgKGlzUHJlZml4KHN0ciwgUExBVEZPUk1fUFJFRklYKSkgewotCQkJc3RyID0gc3RyLnN1YnN0cmluZyhQTEFURk9STV9QUkVGSVgubGVuZ3RoKCkgLSAxKTsKLQkJfQotCQllbHNlIGlmIChpc1ByZWZpeChzdHIsIExPQ0FUSU9OX1BSRUZJWCkpIHsKLQkJCVN0cmluZyBzID0gc3RyLnN1YnN0cmluZyhMT0NBVElPTl9QUkVGSVgubGVuZ3RoKCkpOwotCQkJSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZUZvckxvY2F0aW9uKG5ldyBQYXRoKHMpKTsKLQkJCWlmIChmaWxlICE9IG51bGwpCi0JCQkJc3RyID0gZmlsZS5nZXRGdWxsUGF0aCgpLm1ha2VBYnNvbHV0ZSgpLnRvU3RyaW5nKCk7Ci0JCX0KLQkJCi0JCXJldHVybiBzdHI7Ci0JfQotCi0JLyoqCi0JICogVHJhbnNmb3JtIHRoZSBnaXZlbiBwYXRoIHRvIGEgcGxhdGZvcm0gVVJJIHBhdGguICBJZiB0aGUgZ2l2ZW4gcGF0aCBpcyBhIGZpbGVzeXN0ZW0gVVJJLCBpdCBtdXN0IG1hcCB0bwotCSAqIGEgcmVhbCByZXNvdXJjZSBpbiB0aGUgd29ya3NwYWNlLgotCSAqIAotCSAqIEBwYXJhbSBzdHIgVGhlIHBhdGggdG8gdHJhbnNmb3JtLgotCSAqIEByZXR1cm4gUmV0dXJucyBhIHBsYXRmb3JtIFVSSSBwYXRoIGVxdWl2YWxlbnQgb2YgdGhlIGdpdmVuIHBhdGguCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgdG9QbGF0Zm9ybVBhdGgoU3RyaW5nIHN0cikgewotCi0JCWlmIChzdHIgPT0gbnVsbCB8fCBzdHIubGVuZ3RoKCkgPT0gMCkKLQkJCXJldHVybiBzdHI7CQkKLQkJCi0JCWlmIChpc1ByZWZpeChzdHIsIExPQ0FUSU9OX1BSRUZJWCkpIHsKLQkJCVN0cmluZyBzID0gc3RyLnN1YnN0cmluZyhMT0NBVElPTl9QUkVGSVgubGVuZ3RoKCkpOwotCQkJSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZUZvckxvY2F0aW9uKG5ldyBQYXRoKHMpKTsKLQkJCWlmIChmaWxlICE9IG51bGwpCi0JCQkJc3RyID0gUExBVEZPUk1fUFJFRklYICsgZmlsZS5nZXRGdWxsUGF0aCgpLm1ha2VSZWxhdGl2ZSgpOwotCQl9CQkJCi0JCWVsc2UgaWYgKHN0ci5pbmRleE9mKFBST1RPQ09MX01BUktFUikgPT0gLTEpIHsKLQkJCWlmIChzdHIuY2hhckF0KDApID09IFBBVEhfU0VQQVJBVE9SKQotCQkJCXN0ciA9IFBMQVRGT1JNX1BSRUZJWCArIHN0ci5zdWJzdHJpbmcoMSk7Ci0JCQllbHNlCi0JCQkJc3RyID0gUExBVEZPUk1fUFJFRklYICsgc3RyOwotCQl9Ci0JCQotCQlyZXR1cm4gc3RyOwotCX0KLQkKLQkvKioKLQkgKiBUcmFuc2Zvcm0gdGhlIGdpdmVuIHBhdGggdG8gYSBmaWxlc3lzdGVtIFVSSSBwYXRoLiAgVGhlIHBhdGggbXVzdCBiZSBhIHZhbGlkCi0JICogZWNsaXBzZSByZXNvdXJjZS4KLQkgKiAKLQkgKiBAcGFyYW0gc3RyIFRoZSBwYXRoIHRvIHRyYW5zZm9ybS4KLQkgKiBAcmV0dXJuIFJldHVybnMgYSBmaWxlc3lzdGVtIFVSSSBwYXRoIGVxdWl2YWxlbnQgb2YgdGhlIGdpdmVuIHBhdGguCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgdG9Mb2NhdGlvbihTdHJpbmcgc3RyKSB7Ci0JCQotCQlpZiAoc3RyID09IG51bGwgfHwgc3RyLmxlbmd0aCgpID09IDApCi0JCQlyZXR1cm4gc3RyOwotCQkKLQkJU3RyaW5nIHMgPSBzdHI7Ci0JCQotCQlpZiAoaXNQcmVmaXgocywgUExBVEZPUk1fUFJFRklYKSkKLQkJCXMgPSB0b1BhdGgocyk7Ci0JCQotCQlpZiAocy5pbmRleE9mKFBST1RPQ09MX01BUktFUikgPT0gLTEpIHsJCQkKLQkJCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgocykpOwotCQkJaWYgKGZpbGUgIT0gbnVsbCkKLQkJCQlzdHIgPSBmaWxlLmdldExvY2F0aW9uVVJJKCkudG9TdHJpbmcoKTsKLQkJfQotCQkJCQotCQlyZXR1cm4gc3RyOwotCX0JCi0JCi0JLyoqCi0JICogVHJhbnNmb3JtIHRoZSBnaXZlbiBVUkkgdG8gYW4gSUZpbGUuICBSZXR1cm5zIG51bGwgaWYgdGhlIFVSSSBpcyBub3QgaW4gdGhlIHdvcmtzcGFjZS4KLQkgKiAKLQkgKiBAcGFyYW0gc3RyIFRoZSBVUkkgdG8gdHJhbnNmb3JtLgotCSAqIEByZXR1cm4gUmV0dXJucyBJRmlsZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgSUZpbGUgdG9GaWxlKFN0cmluZyBzdHIpIHsKLQkJCi0JCUlGaWxlIGZpbGUgPSBudWxsOwotCQkKLQkJLy8gbG9jYWwgZmlsZXN5c3RlbSBwYXRoCi0JCWlmIChzdHIuc3RhcnRzV2l0aChMT0NBVElPTl9QUkVGSVgpKSB7Ci0JCQlzdHIgPSBzdHIuc3Vic3RyaW5nKExPQ0FUSU9OX1BSRUZJWC5sZW5ndGgoKSk7CQkJCQotCQkJZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZUZvckxvY2F0aW9uKG5ldyBQYXRoKHN0cikpOwotCQl9Ci0JCWVsc2UgewkKLQkJCS8vIHBsYXRmb3JtIHBhdGgKLQkJCWlmIChzdHIuc3RhcnRzV2l0aChQTEFURk9STV9QUkVGSVgpKQotCQkJCXN0ciA9IHN0ci5zdWJzdHJpbmcoUExBVEZPUk1fUFJFRklYLmxlbmd0aCgpKTsKLQkJCi0JCQlpZiAoc3RyLmluZGV4T2YoJzonKSA9PSAtMSkgewkJCQotCQkJCWZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoc3RyKSk7Ci0JCQl9Ci0JCX0KLQkJCQkJCQkJCi0JCXJldHVybiBmaWxlOwotCX0JCi0JCi0JLyoqCi0JICogVHJhbnNmb3JtIHRoZSBnaXZlbiBVUklzIHRvIGFuIElGaWxlcy4gIAotCSAqIElGaWxlIHNldCB0byBudWxsIGlmIHRoZSBVUkkgaXMgbm90IGluIHRoZSB3b3Jrc3BhY2UuCi0JICogCi0JICogQHBhcmFtIHN0ciBUaGUgVVJJcyB0byB0cmFuc2Zvcm0uCi0JICogQHJldHVybiBSZXR1cm5zIElGaWxlW10KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElGaWxlW10gdG9GaWxlcyhTdHJpbmdbXSB1cmlzKSB7Ci0JCQotCQlJRmlsZVtdIGZpbGVzID0gbnVsbDsKLQkJaWYgKHVyaXMgIT0gbnVsbCkgewotCQkJZmlsZXMgPSBuZXcgSUZpbGVbdXJpcy5sZW5ndGhdOwkJCi0JCQlmb3IgKGludCBpID0gMDsgaSA8IHVyaXMubGVuZ3RoOyBpKyspIHsKLQkJCQlTdHJpbmcgdXJpID0gdXJpc1tpXTsKLQkJCQlmaWxlc1tpXSA9IFVuaXZlcnNhbFBhdGhUcmFuc2Zvcm1lci50b0ZpbGUodXJpKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZmlsZXM7Ci0JfQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvdXRpbC9XU0RMQ29waWVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3V0aWwvV1NETENvcGllci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTQ0ZDc2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvdXRpbC9XU0RMQ29waWVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMTI1ICAgMTcxMDcxIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBDcmVhdGUgcHVibGljIHV0aWxpdHkgbWV0aG9kIGZvciBjb3B5aW5nIFdTREwgZmlsZXMKLSAqIDIwMDcwNDA5ICAgMTgxNjM1IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0RMQ29waWVyIHV0aWxpdHkgc2hvdWxkIGNyZWF0ZSB0YXJnZXQgZm9sZGVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudXRpbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJJOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuSW1wb3J0OwotaW1wb3J0IGphdmF4LndzZGwuVHlwZXM7Ci1pbXBvcnQgamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZmFjdG9yeS5XU0RMRmFjdG9yeTsKLWltcG9ydCBqYXZheC53c2RsLnhtbC5XU0RMV3JpdGVyOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uT3V0cHV0S2V5czsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5kb20uRE9NU291cmNlOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uc3RyZWFtLlN0cmVhbVJlc3VsdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSdW5uYWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb21tb24uU3RhdHVzVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5FbnZpcm9ubWVudFNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC51cmkuSVVSSVNjaGVtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LnVyaS5TaW1wbGVVUklGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQudXJpLlVSSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyLmludGVybmFsLnV0aWwuVVJJRW5jb2RlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuV3N0V1NQbHVnaW5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLmRpc2NvdmVyeS5OZXRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV1dXQXV0aGVudGljYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBhcnNlci53c2lsLldlYlNlcnZpY2VzUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwud3NkbDRqLldTRExGYWN0b3J5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWFEaXJlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLmltcGwuWFNEU2NoZW1hSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QudXRpbC5YU0RQYXJzZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotLyoqCi0gKiA8cD5UaGlzIGlzIGEgdXRpbGl0eSBjbGFzcyB0aGF0IGNhbiBiZSB1c2VkIHRvIGNvcHkgYSBXU0RMIGZpbGUgYW5kIGl0cyByZWxhdGl2ZSBpbXBvcnRzCi0gKiAoYm90aCB3c2RsOmltcG9ydCBhbmQgeHNkOmltcG9ydCkgdG8gYSBmb2xkZXIgaW4gdGhlIGZpbGVzeXN0ZW0uICBUaGUgY29kZSB3aWxsIGFuYWx5emUKLSAqIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGFuZCBkb2VzIHRoZSBmb2xsb3dpbmc6Ci0gKiA8b2w+Ci0gKiAgICA8bGk+ZmluZCBhbGwgZmlsZXMgdGhhdCBuZWVkcyB0byBiZSBjb3BpZWQgYW5kIHRhZyB0aGVtIGFzIHN1Y2guPC9saT4KLSAqICAgIDxsaT5maW5kIHRoZSBjb21tb24gcGFyZW50IGRpcmVjdG9yeSBvZiBhbGwgdGhlIGZpbGVzIHRoYXQgYXJlIHRhZ2dlZDsgdGhpcyBpcyB0aGUgCi0gKiAgICByb290IG9mIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlLjwvbGk+Ci0gKiA8L29sPgotICogRHVyaW5nIHRoZSBjb3B5LCB0aGUgcm9vdCBvZiB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBpcyBiZSBtYXBwZWQgdG8gdGhlIAotICogc3BlY2lmaWVkIHRhcmdldCBmb2xkZXIgYW5kIGFsbCB0YWdnZWQgZmlsZXMgd2lsbCBiZSBkdXBsaWNhdGVkIHVuZGVyIGl0LjwvcD4KLSAqIAotICogPHA+SWYgdGhlIFdTREwgc291cmNlIGFuZCB0aGUgdGFyZ2V0IGxvY2F0aW9uIGFyZSB0aGUgc2FtZSwgdGhpcyB1dGlsaXR5IG9ubHkgZ3VhcmFudGVlcwotICogdGhhdCB0aGUgc3RhcnRpbmcgV1NETCBmaWxlIGlzICJyZS1jb3BpZWQiIG9udG8gaXRzZWxmIChzaW5jZSB0aGUgV1NETCBkZWZpbml0aW9uIGNvdWxkIAotICogaGF2ZSBiZWVuIGFsdGVyZWQpLiAgTm8gZ3VhcmFudGVlIGlzIG1hZGUgZm9yIHRoZSBvdGhlciBmaWxlcyB0aGF0IHRoZSBXU0RMIGZpbGUgaW1wb3J0cy48L3A+Ci0gKiAKLSAqIDxwPk5vdGUgdGhhdCBXU0RMQ29waWVyIGRvZXMgbm90IGRvIGEgZGlyZWN0IGZpbGUgY29weS4gIFRoZSBzb3VyY2UgZmlsZXMgYXJlIHJlYWQgaW50bwotICogYSBtb2RlbCBhbmQgdGhlbiB3cml0dGVuIG91dCB0byB0aGUgdGFyZ2V0IGZvbGRlciwgaGVuY2UgdGhlIG91dHB1dCBmaWxlIG1pZ2h0IG5vdCBiZQotICogc3ludGFjdGljYWxseSBpZGVudGljYWwgdG8gdGhlIHNvdXJjZSBmaWxlIGJ1dCB0aGV5IHdpbGwgYmUgc3RydWN0dXJhbGx5IGlkZW50aWNhbC48L3A+Ci0gKiAKLSAqIDxwPlNpbmNlIHRoaXMgdXRpbGl0eSBpbXBsZW1lbnRzIElXb3Jrc3BhY2VSdW5uYWJsZSwgaXQgY2FuIGJlIHJ1biBieSB0aGUgd29ya3NwYWNlIGFzCi0gKiBhbiBhdG9taWMgd29ya3NwYWNlIG9wZXJhdGlvbi48L3A+Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMQ29waWVyIGltcGxlbWVudHMgSVdvcmtzcGFjZVJ1bm5hYmxlIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYU0QgPSAiLnhzZCI7Ci0JCi0JLyoqCi0JICogSGVscGVyIGNsYXNzIGhvbGRpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZpbGVzIHdlIG5lZWQgdG8gY29weQotCSAqLwotCXByaXZhdGUgY2xhc3MgWE1MT2JqZWN0SW5mbyB7Ci0JICAJCi0JCXB1YmxpYyBJUGF0aCAgcGF0aDsKLQkgIAlwdWJsaWMgT2JqZWN0IGNvbnRlbnQ7Ci0JICAJICAJCi0JICAJLyoqCi0JICAJICogQ29uc3RydWN0b3IuCi0JICAJICogCi0JICAJICogQHBhcmFtIHBhdGggVGhlIHBhdGggb2YgdGhlIHNvdXJjZSBmaWxlLgotCSAgCSAqIEBwYXJhbSBjb250ZW50IEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNvdXJjZSBmaWxlIChlaXRoZXIgd3NkbCBvciB4c2QpCi0JICAJICovCi0JICAJcHVibGljIFhNTE9iamVjdEluZm8oSVBhdGggcGF0aCwgT2JqZWN0IGNvbnRlbnQpIHsKLQkgIAkJdGhpcy5wYXRoICAgID0gcGF0aC5zZXREZXZpY2UobnVsbCk7IC8vIHdlIHdhbnQgYSBkZXZpY2UgaW5kZXBlbmRlbnQgcGF0aCAgCQkKLQkgIAkJdGhpcy5jb250ZW50ID0gY29udGVudDsKLQkgIAl9Ci0JfQkgIAotCQotCXByaXZhdGUgV2ViU2VydmljZXNQYXJzZXIgcGFyc2VyCT0gbnVsbDsJCQkJCS8vIHBhcnNlciB0byBwYXJzZSB0aGUgd3NkbCBhbmQgeHNkIGZpbGVzCi0JCi0JcHJpdmF0ZSBTdHJpbmcgc291cmNlVVJJCQkJPSAiIjsJCQkJCS8vIHVyaSBvZiB0aGUgc3RhcnRpbmcgd3NkbAotCXByaXZhdGUgRGVmaW5pdGlvbiBkZWZpbml0aW9uCQk9IG51bGw7CQkJCQkvLyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RhcnRpbmcgd3NkbAotCQotCXByaXZhdGUgU3RyaW5nIHRhcmdldEZvbGRlclVSSQkJPSBudWxsOwkJCQkJLy8gdXJpIG9mIHRoZSBmb2xkZXIgdG8gY29weSB0bwotCXByaXZhdGUgU3RyaW5nIHRhcmdldEZpbGVuYW1lCQk9IG51bGw7CQkJCQkvLyBvcHRpb25hbCBuZXcgZmlsZW5hbWUgZm9yIHRoZSBzdGFydGluZyB3c2RsCi0JCi0JcHJpdmF0ZSBJUGF0aCBwYXRoUHJlZml4CQkJPSBudWxsOyAgCQkJCS8vIHRoZSBzaG9ydGVzdCBjb21tb24gcGF0aCBvZiBhbGwgZmlsZXMgd2UgbmVlZCB0byBjb3B5Ci0JcHJpdmF0ZSBJUGF0aCB3c2RsUmVsUGF0aAkJCT0gbnVsbDsJCQkJCS8vIHJlbGF0aXZlIHBhdGggb2YgdGhlIHN0YXJ0aW5nIHdzZGwgdG8gdGhlIHRhcmdldCBmb2xkZXIKLQkJCi0JcHJpdmF0ZSBNYXAgeG1sT2JqZWN0SW5mb3MJCQk9IG5ldyBMaW5rZWRIYXNoTWFwKCk7CS8vIHRhYmxlIHRvIHN0b3JlIGluZm8gYWJvdXQgdGhlIGZpbGVzIHdlIG5lZWQgdG8gY29weQotCQotCXByaXZhdGUgU2ltcGxlVVJJRmFjdG9yeSB1cmlGYWN0b3J5ID0gbnVsbDsKLQkKLQkvKioKLQkgKiBEZWZhdWx0IGNvbnN0cnVjdG9yLiAgQSBuZXcgV2ViU2VydmljZXNQYXJzZXIgaXMgY29uc3RydWN0ZWQgZm9yIHVzZS4KLQkgKi8KLQlwdWJsaWMgV1NETENvcGllcigpIHsKLQkJdGhpcyhudWxsKTsKLQl9Ci0JCi0JLyoqCi0JICogQ29uc3RydWN0b3IuICBUaGUgZ2l2ZW4gV2ViU2VydmljZXNQYXJzZXIgd2lsbCBiZSB1c2VkLgotCSAqIAotCSAqIEBwYXJhbSBwYXJzZXIgQSBXZWJTZXJ2aWNlc1BhcnNlciBmb3IgV1NETENvcGllciB0byB1c2UuICBJZiBudWxsLCBhIG5ldyBvbmUgd2lsbCBiZSBjb25zdHJ1Y3RlZC4KLQkgKi8KLQlwdWJsaWMgV1NETENvcGllcihXZWJTZXJ2aWNlc1BhcnNlciBwYXJzZXIpIHsKLQkJaWYgKHBhcnNlciA9PSBudWxsKQotCQkJdGhpcy5wYXJzZXIgPSBuZXcgV2ViU2VydmljZXNQYXJzZXIoKTsKLQkJZWxzZQotCQkJdGhpcy5wYXJzZXIgPSBwYXJzZXI7Ci0JCQotCQlJVVJJU2NoZW1lIGVjbGlwc2VTY2hlbWUgPSBFbnZpcm9ubWVudFNlcnZpY2UuZ2V0RWNsaXBzZVNjaGVtZSgpOwotCSAgICBJVVJJU2NoZW1lIGZpbGVTY2hlbWUgICAgPSBFbnZpcm9ubWVudFNlcnZpY2UuZ2V0RmlsZVNjaGVtZSgpOwotCSAgICB1cmlGYWN0b3J5ID0gbmV3IFNpbXBsZVVSSUZhY3RvcnkoKTsKLQkgICAgdXJpRmFjdG9yeS5yZWdpc3RlclNjaGVtZSgicGxhdGZvcm0iLCBlY2xpcHNlU2NoZW1lKTsKLQkgICAgdXJpRmFjdG9yeS5yZWdpc3RlclNjaGVtZSgiZmlsZSIsIGZpbGVTY2hlbWUpOwotCX0KLQotCS8qKgotCSAqIFNldHMgdGhlIFVSSSBvZiB0aGUgc3RhcnRpbmcgd3NkbCBkb2N1bWVudC4gIFRoZSBVUkkgbXVzdCBiZSBhbiBhYnNvbHV0ZSBVUkkKLQkgKiB3aXRoIGEgdmFsaWQgcHJvdG9jb2wuICBGb3IgbG9jYWwgZmlsZXMsIGJvdGggZmlsZTovIGFuZCBwbGF0Zm9ybTovcmVzb3VyY2UgCi0JICogcHJvdG9jb2wgYXJlIGFjY2VwdGFibGUuIAotCSAqIAotCSAqIEBwYXJhbSB1cmkgVGhlIFVSSSBvZiB0aGUgc3RhcnRpbmcgd3NkbCBkb2N1bWVudC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRTb3VyY2VVUkkoU3RyaW5nIHVyaSkgewotCQlzZXRTb3VyY2VVUkkodXJpLCBudWxsKTsKLQl9Ci0JCi0JLyoqCi0JICogU2FtZSBhcyBzZXRTb3VyY2VVUkkoU3RyaW5nIHVyaSkgdmVyc2lvbiwgZXhjZXB0IHRoYXQgYW4gYWxyZWFkeSBwYXJzZWQKLQkgKiByZXByZXNlbnRhdGlvbiBvZiB0aGUgd3NkbCBkb2N1bWVudCBjYW4gYmUgcGFzc2VkIHRvIHRoaXMgbWV0aG9kIHRvIGF2b2lkCi0JICogaGF2aW5nIHRvIHBhcnNlIGl0IGEgc2Vjb25kIHRpbWUuCi0JICogCi0JICogQHBhcmFtIHVyaSBUaGUgVVJJIG9mIHRoZSBzdGFydGluZyB3c2RsIGRvY3VtZW50LgotCSAqIEBwYXJhbSBkZWZpbml0aW9uIEEgcGFyc2VkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdGFydGluZyB3c2RsIGRvY3VtZW50LgotCSAqLwotCXB1YmxpYyB2b2lkIHNldFNvdXJjZVVSSShTdHJpbmcgdXJpLCBEZWZpbml0aW9uIGRlZmluaXRpb24pIHsKLQkJaWYgKHVyaSAhPSBudWxsKQotCQkJdXJpID0gdXJpLnJlcGxhY2UoJ1xcJywgJy8nKTsKLQkJc291cmNlVVJJID0gdXJpOwotCQl0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotCX0KLQkKLQkvKioKLQkgKiBTcGVjaWZ5IHRoZSB0YXJnZXQgZm9sZGVyIFVSSSBmb3IgV1NETENvcGllciB0byBjb3B5IHRoZSB3c2RsIHRvLiAgVGhlIFVSSSBtdXN0IGJlCi0JICogYW4gYWJzb2x1dGUgVVJJIHdpdGggYSB2YWxpZCBwcm90b2NvbC4gIEJvdGggZmlsZTovIGFuZCBwbGF0Zm9ybTovcmVzb3VyY2UgcHJvdG9jb2wKLQkgKiBhcmUgYWNjZXB0YWJsZS4gIFRoZSBlbnRpcmUgZGlyZWN0b3J5IHN0cnVjdHVyZSB3aXRoIGFsbCB0aGUgZmlsZXMgdGhhdCB0aGUgd3NkbCAKLQkgKiBpbXBvcnRzIHdpbGwgYmUgZHVwbGljYXRlZCB1bmRlciB0aGlzIGZvbGRlci4gIElmIHRoZSB0YXJnZXQgZm9sZGVyIGRvZXMgbm90IGV4aXN0LCAKLQkgKiBpdCB3aWxsIGJlIGNyZWF0ZWQuIAotCSAqIAotCSAqIEBwYXJhbSB1cmkgVGhlIHRhcmdldCBmb2xkZXIgVVJJIHdoZXJlIHRoZSB3c2RsIHN0cnVjdHVyZSBpcyBjb3BpZWQgdG8uCi0JICovCi0JcHVibGljIHZvaWQgc2V0VGFyZ2V0Rm9sZGVyVVJJKFN0cmluZyB1cmkpIHsKLQkJaWYgKHVyaSAhPSBudWxsKQotCQkJdXJpID0gdXJpLnJlcGxhY2UoJ1xcJywgJy8nKTsKLQkJdGFyZ2V0Rm9sZGVyVVJJID0gdXJpOwotCX0KLQkKLQkvKioKLQkgKiBPcHRpb25hbGx5IHNldCBhIG5ldyBmaWxlbmFtZSBmb3IgdGhlIHN0YXJ0aW5nIHdzZGwgZG9jdW1lbnQgdG8gdXNlIGFmdGVyIGl0IGlzCi0JICogY29waWVkLiAgSWYgbm90IHNwZWNpZmllZCwgdGhlIG9yaWdpbmFsIG5hbWUgb2YgdGhlIHdzZGwgaXMgdXNlZC4KLQkgKiAKLQkgKiBAcGFyYW0gZmlsZW5hbWUgQSBmaWxlbmFtZS4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRUYXJnZXRGaWxlbmFtZShTdHJpbmcgZmlsZW5hbWUpIHsKLQkJdGFyZ2V0RmlsZW5hbWUgPSBmaWxlbmFtZTsKLQl9IAotCQotCS8qCi0JICogQ29tcGFyZSB0aGUgcGF0aCBwcmVmaXggd2l0aCB0aGUgcGF0aCBpbiB0aGUgaW5mbyBvYmplY3QsCi0JICogbW9kaWZ5IHRoZSBwYXRoIHByZWZpeCBhY2NvcmRpbmdseS4KLQkgKi8KLQlwcml2YXRlIHZvaWQgdXBkYXRlUGF0aFByZWZpeChYTUxPYmplY3RJbmZvIGluZm8pIHsKLQkgIAlpZiAocGF0aFByZWZpeCA9PSBudWxsKQotCSAgICAgICAgcGF0aFByZWZpeCA9IGluZm8ucGF0aC5yZW1vdmVMYXN0U2VnbWVudHMoMSk7Ci0JICAgIGVsc2UgewotCSAgICAJaW50IG1hdGNoaW5nID0gcGF0aFByZWZpeC5tYXRjaGluZ0ZpcnN0U2VnbWVudHMoaW5mby5wYXRoKTsKLQkgICAgCQotCSAgICAJaWYgKG1hdGNoaW5nIDwgcGF0aFByZWZpeC5zZWdtZW50Q291bnQoKSkKLQkgICAgCQlwYXRoUHJlZml4ID0gcGF0aFByZWZpeC51cHRvU2VnbWVudChtYXRjaGluZyk7Ci0JICAgIH0KLQl9ICAgIAkKLQkKLQkvKgotCSAqIERldGVybWluZSBpZiB0aGUgZ2l2ZW4gVVJJIGlzIGEgcmVsYXRpdmUgVVJJLiAKLQkgKi8KLQlwcml2YXRlIGJvb2xlYW4gaXNSZWxhdGl2ZShTdHJpbmcgdXJpKSB7Ci0JCXJldHVybiB1cmkuaW5kZXhPZignOicpID09IC0xOwotCX0KLQotCS8qCi0JICogQW5hbHl6ZSB0aGUgd3NkbCBkb2N1bWVudCBhdCB0aGUgZ2l2ZW4gVVJJLCBhbmQgdHJhdmVyc2UgYW55IHJlbGF0aXZlIGZpbGVzIHRoYXQKLQkgKiBpdCBpbXBvcnRzLiBDYW4gb3B0aW9uYWxseSBwYXNzIGluIGEgcGFyc2VkIERlZmluaXRpb24gaWYgb25lJ3MgYXZhaWxhYmxlIHNvCi0JICogd2UgZG9uJ3QgaGF2ZSB0byBwYXJzZSB0aGUgd3NkbCBhZ2FpbiAob3RoZXJ3aXNlIGp1c3QgcGFzcyBpbiBudWxsKS4gCi0JICovCi0JcHJpdmF0ZSB2b2lkIGFuYWx5emVXU0RMKFVSSSB1cmksIERlZmluaXRpb24gZGVmaW5pdGlvbikgdGhyb3dzIAotCQlNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBXU0RMRXhjZXB0aW9uLCBXV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbiB7Ci0JCQotCQl1cmkgPSB1cmkubm9ybWFsaXplKCk7Ci0JCQotCQkvLyBhbHJlYWR5IHNlZW4gdGhpcyB3c2RsLCBza2lwCi0JCWlmICh4bWxPYmplY3RJbmZvcy5jb250YWluc0tleSh1cmkudG9TdHJpbmcoKSkpCi0JCQlyZXR1cm47Ci0JCQkJCi0JCS8vIG5lZWQgdG8gcGFyc2UgdGhlIHdzZGwgb3Vyc2VsdmVzCi0JCWlmIChkZWZpbml0aW9uID09IG51bGwpCi0JCQlkZWZpbml0aW9uID0gcGFyc2VyLmdldFdTRExEZWZpbml0aW9uVmVyYm9zZSh1cmkudG9TdHJpbmcoKSk7Ci0JCQotCQkvLyBzYXZlIGEgcmVmZXJlbmNlIHRvIHRoZSBzdGFydGluZyB3c2RsCi0JCWlmICh0aGlzLmRlZmluaXRpb24gPT0gbnVsbCkKLQkJCXRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247Ci0JCQotCQlJUGF0aCBwYXRoID0gbmV3IFBhdGgodXJpLmdldFBhdGgoKSk7Ci0JCQotCQkvLyBhIHRhcmdldCBmaWxlbmFtZSB3YXMgZ2l2ZW4sIHNvIHdlIG5lZWQgdG8gbW9kaWZ5IHRoZSBwYXRoIHdpdGggdGhlIG5ldyBuYW1lCi0JCWlmIChkZWZpbml0aW9uID09IHRoaXMuZGVmaW5pdGlvbiAmJiB0YXJnZXRGaWxlbmFtZSAhPSBudWxsKQotCQkJcGF0aCA9IHBhdGgucmVtb3ZlTGFzdFNlZ21lbnRzKDEpLmFwcGVuZCh0YXJnZXRGaWxlbmFtZSk7Ci0JCSAJCQotCSAgICBYTUxPYmplY3RJbmZvIGluZm8gPSBuZXcgWE1MT2JqZWN0SW5mbyhwYXRoLCBkZWZpbml0aW9uKTsJICAgIAotCSAgICB4bWxPYmplY3RJbmZvcy5wdXQodXJpLnRvU3RyaW5nKCksIGluZm8pOwotCSAgICB1cGRhdGVQYXRoUHJlZml4KGluZm8pOwotCQkKLQkgICAgLy8gbm93IGxvb2sgYXQgd3NkbCBpbXBvcnRzCi0JICAgIAotCSAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gZGVmaW5pdGlvbi5nZXRJbXBvcnRzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykgewotCi0JICAgIAlMaXN0IGxpc3QgPSAoTGlzdCkgaXQubmV4dCgpOwotCSAgICAgIAotCSAgICAJZm9yIChJdGVyYXRvciBsaXN0SXQgPSBsaXN0Lml0ZXJhdG9yKCk7IGxpc3RJdC5oYXNOZXh0KCk7KSB7Ci0JICAgIAkJCi0JCSAgICAgICAgSW1wb3J0IHdzZGxJbXBvcnQgPSAoSW1wb3J0KSBsaXN0SXQubmV4dCgpOwotCQkgICAgICAgIFN0cmluZyB3c2RsSW1wb3J0TG9jYXRpb24gPSB3c2RsSW1wb3J0LmdldExvY2F0aW9uVVJJKCk7Ci0KLQkJICAgICAgICAvLyBhbmFseXplIGFueSByZWxhdGl2ZSBpbXBvcnRzIHdlIGZpbmQKLQkJICAgICAgICBpZiAod3NkbEltcG9ydExvY2F0aW9uICE9IG51bGwgJiYgaXNSZWxhdGl2ZSh3c2RsSW1wb3J0TG9jYXRpb24pKSB7Ci0KLQkJICAgICAgICAJLy8gYmFkIGZvcm0sIGltcG9ydGluZyB4c2Qgd2l0aCB3c2RsOmltcG9ydCwgYnV0IG5lZWQgdG8gaGFuZGxlCi0JCSAgICAgICAgCWlmICh3c2RsSW1wb3J0TG9jYXRpb24uZW5kc1dpdGgoWFNEKSkKLQkJICAgICAgICAJCWFuYWx5emVYU0QodXJpLnJlc29sdmUod3NkbEltcG9ydExvY2F0aW9uKSk7Ci0JCSAgICAgICAgCWVsc2UJCi0JCSAgICAgICAgCQlhbmFseXplV1NETCh1cmkucmVzb2x2ZSh3c2RsSW1wb3J0TG9jYXRpb24pLCBudWxsKTsKLQkJICAgICAgICB9Ci0JICAgIAl9Ci0JICAgIH0KLQkgICAgCi0JICAgIC8vIG5vdyBsb29rIGF0IHhzZCBpbXBvcnRzCi0KLQkgICAgVHlwZXMgdHlwZXMgPSBkZWZpbml0aW9uLmdldFR5cGVzKCk7Ci0JICAgIAotCSAgICAvLyB0aGVyZSdzIG5vIHdzZGw6dHlwZXMsIHdlJ3JlIGRvbmUKLQkgICAgaWYgKHR5cGVzID09IG51bGwpCi0JICAgIAlyZXR1cm47Ci0JICAgICAgICAJCi0gICAgCWZvciAoSXRlcmF0b3IgaXQgPSB0eXBlcy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KSB7CQkJCi0JCQkKLSAgICAJCUV4dGVuc2liaWxpdHlFbGVtZW50IGV4dEVsZW1lbnQgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGl0Lm5leHQoKTsgICAgCQkKLSAgICAJCUVsZW1lbnQgZWxlbWVudDsKLSAgICAJCQotICAgIAkJLy8gd2UnbGwgdHJ5IHRvIHBhcnNlIGFueSBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnRzIGFuZAotICAgIAkJLy8gWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRzIGludG8gYW4gWFNEIHNjaGVtYSAgICAJCQotICAgIAkJCi0gICAgCQlpZiAoZXh0RWxlbWVudCBpbnN0YW5jZW9mIFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCkKLSAgICAJCQllbGVtZW50ID0gKChVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGV4dEVsZW1lbnQpLmdldEVsZW1lbnQoKTsKLSAgIAkJCWVsc2UgaWYgKGV4dEVsZW1lbnQgaW5zdGFuY2VvZiBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCkKLSAgIAkJCQllbGVtZW50ID0gKChYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCkgZXh0RWxlbWVudCkuZ2V0RWxlbWVudCgpOwotICAgCQkJZWxzZQotICAgCQkJCWNvbnRpbnVlOwotICAgIAkJCSAgICAJCQkKLQkJCXRyeSB7Ci0JCQkJWFNEU2NoZW1hIHhzZFNjaGVtYSA9IFhTRFNjaGVtYUltcGwuY3JlYXRlU2NoZW1hKGVsZW1lbnQpOwotCQkJCQotCQkJCS8vIGFuYWx5emUgdGhlIGlubGluZWQgc2NoZW1hIGF0IHRoZSBjdXJyZW50IHVyaQotCQkJCWFuYWx5emVYU0QodXJpLCB4c2RTY2hlbWEpOwotCQkJfQotCQkJY2F0Y2ggKEV4Y2VwdGlvbiB0KSB7Ci0JCQkJLy8gaWdub3JlIGFueSBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIHRoYXQgY2Fubm90IGJlIHBhcnNlZCBpbnRvIGEKLQkJCQkvLyBYU0RTY2hlbWEgaW5zdGFuY2UKLQkJCX0KLSAgICAgICAgfQotCX0KLQkKLQkvKgotCSAqIEFuYWx5emUgdGhlIHNjaGVtYSBhdCB0aGUgZ2l2ZW4gVVJJLCB0cmF2ZXJzZSBpdHMgaW1wb3J0cyBhbmQgaW5jbHVkZXMuCi0JICogVGhlIHNjaGVtYSBpbmZvcm1hdGlvbiBpcyBub3Qgc3RvcmVkIGluIFhNTE9iamVjdEluZm9zIGJlY2F1c2UgaXQncwotCSAqIGVpdGhlciBub3QgbmVjY2Vzc2FyeSAoc2NoZW1hIGlubGluZWQgaW4gYSB3c2RsKSBvciBpdCBoYXMgYWxyZWFkeQotCSAqIGJlZW4gc3RvcmVkLgotCSAqLwotCXByaXZhdGUgdm9pZCBhbmFseXplWFNEKFVSSSB1cmksIFhTRFNjaGVtYSBzY2hlbWEpIHsKLQkJCi0JCWlmIChzY2hlbWEgPT0gbnVsbCkKLQkJCXJldHVybjsKLQkJCi0JCS8vIGxvb2sgYXQgdGhlIGltcG9ydHMgYW5kIGluY2x1ZGVzCi0JICAgIAotCQlmb3IgKEl0ZXJhdG9yIGl0ID0gc2NoZW1hLmdldENvbnRlbnRzKCkuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykgewotCSAgICAgICAgCi0JCQlPYmplY3QgY29udGVudCA9IGl0Lm5leHQoKTsKLQkgICAgICAgIAotCQkJaWYgKCEoY29udGVudCBpbnN0YW5jZW9mIFhTRFNjaGVtYURpcmVjdGl2ZSkpCi0JCQkJY29udGludWU7Ci0JCQkJCSAgICAgICAgCi0JCQlYU0RTY2hlbWFEaXJlY3RpdmUgeHNkU2NoZW1hRGlyZWN0aXZlID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgY29udGVudDsKLQkJCVN0cmluZyB4c2RTY2hlbWFEaXJlY3RpdmVMb2NhdGlvbiA9IHhzZFNjaGVtYURpcmVjdGl2ZS5nZXRTY2hlbWFMb2NhdGlvbigpOwotCSAgICAgICAgICAKLQkJCS8vIGFuYWx5emUgYW55IHJlbGF0aXZlIGltcG9ydHMgYW5kIGluY2x1ZGVzIHdlIGZpbmQKLQkJCWlmICh4c2RTY2hlbWFEaXJlY3RpdmVMb2NhdGlvbiAhPSBudWxsICYmIGlzUmVsYXRpdmUoeHNkU2NoZW1hRGlyZWN0aXZlTG9jYXRpb24pKQotCQkJCWFuYWx5emVYU0QodXJpLnJlc29sdmUoeHNkU2NoZW1hRGlyZWN0aXZlTG9jYXRpb24pKTsKLQkJfQotCX0KLQkKLQkvKgotCSAqIEFuYWx5emUgdGhlIHNjaGVtYSBhdCB0aGUgZ2l2ZW4gVVJJLCB0aGUgc2NoZW1hIGlzIHBhcnNlZCBhbmQgc3RvcmVkIGluCi0JICogWE1MT2JqZWN0SW5mb3MuCi0JICovCi0JcHJpdmF0ZSB2b2lkIGFuYWx5emVYU0QoVVJJIHVyaSkgewotCQkKLQkJdXJpID0gdXJpLm5vcm1hbGl6ZSgpOwotCQkKLQkJLy8gYWxyZWFkeSBzZWVuIHRoaXMgeHNkLCBza2lwIGl0Ci0JCWlmICh4bWxPYmplY3RJbmZvcy5jb250YWluc0tleSh1cmkudG9TdHJpbmcoKSkpCi0JCQlyZXR1cm47Ci0JCQotCQlYU0RTY2hlbWEgeHNkU2NoZW1hID0gWFNEU2NoZW1hSW1wbC5nZXRTY2hlbWFGb3JTY2hlbWEodXJpLnRvU3RyaW5nKCkpOwotCi0JCS8vIGlmIHNjaGVtYSBpcyBub3QgY2FjaGVkLCBwYXJzZSBpdAotCSAgICBpZiAoeHNkU2NoZW1hID09IG51bGwpIHsKLQkgICAgCVhTRFBhcnNlciBwID0gbmV3IFhTRFBhcnNlcihudWxsKTsKLQkgICAgCUlucHV0U3RyZWFtIGlzID0gTmV0VXRpbHMuZ2V0VVJMSW5wdXRTdHJlYW0odXJpLnRvU3RyaW5nKCkpOwotCSAgICAgIAotCSAgICAJaWYgKGlzICE9IG51bGwpIHsKLQkgICAgCQlwLnBhcnNlKGlzKTsKLQkgICAgCQl4c2RTY2hlbWEgPSBwLmdldFNjaGVtYSgpOwotCSAgICAJfQotCSAgICB9Ci0JICAgIAotCSAgICBpZiAoeHNkU2NoZW1hICE9IG51bGwpIHsKLQkgICAgICAgIAotCSAgICAJWE1MT2JqZWN0SW5mbyBpbmZvID0gbmV3IFhNTE9iamVjdEluZm8obmV3IFBhdGgodXJpLmdldFBhdGgoKSksIHhzZFNjaGVtYSk7CSAgICAJCi0JICAgIAl4bWxPYmplY3RJbmZvcy5wdXQodXJpLnRvU3RyaW5nKCksIGluZm8pOwotCSAgICAJdXBkYXRlUGF0aFByZWZpeChpbmZvKTsKLQkgICAgICAKLQkgICAgCS8vIGFuYWx5emUgaXRzIGltcG9ydHMgYW5kIGluY2x1ZGVzCi0JICAgIAlhbmFseXplWFNEKHVyaSwgeHNkU2NoZW1hKTsKLQkgICAgfQotCX0KLQkJCi0JLyoKLQkgKiBBcHBlbmRzIGEgcGF0aCB0byBhIFVSSSBhbmQgcmV0dXJucyB0aGUgbmV3IGNvbWJpbmVkIFVSSS4KLQkgKi8KLQlwcml2YXRlIFN0cmluZyBhcHBlbmRQYXRoVG9VUkkoU3RyaW5nIHVyaSwgSVBhdGggcGF0aCkgewotCQlpZiAodXJpLmVuZHNXaXRoKCIvIikpCi0JCQlyZXR1cm4gdXJpICsgcGF0aC5tYWtlUmVsYXRpdmUoKTsKLQkJZWxzZQotCQkJcmV0dXJuIHVyaSArIHBhdGgubWFrZUFic29sdXRlKCk7Ci0JfQotCQotCS8qCi0JICogV3JpdGVzIHRoZSB3c2RsIGRlZmluaXRpb24gdG8gdGhlIGZpbGUgYXQgdGhlIGdpdmVuIHBhdGgsIHJlbGF0aXZlIHRvIHRoZSB0YXJnZXQgZm9sZGVyLgotCSAqLwotCXByaXZhdGUgU3RyaW5nIHdyaXRlWE1MT2JqKElQYXRoIHBhdGgsIERlZmluaXRpb24gZGVmaW5pdGlvbiwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MKLQkJV1NETEV4Y2VwdGlvbiwgVVJJRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7CQkJCQotCQkJICAKLQkgICAgV1NETEZhY3Rvcnkgd3NkbEZhY3RvcnkgPSBuZXcgV1NETEZhY3RvcnlJbXBsKCk7CSAgICAKLQkgICAgV1NETFdyaXRlciB3c2RsV3JpdGVyID0gd3NkbEZhY3RvcnkubmV3V1NETFdyaXRlcigpOwotCSAgICAKLQkgICAgU3RyaW5nIHRhcmdldFVSSSA9IGFwcGVuZFBhdGhUb1VSSSh0YXJnZXRGb2xkZXJVUkksIHBhdGgpOwotCSAgICAKLQkgICAgT3V0cHV0U3RyZWFtIG9zID0gdXJpRmFjdG9yeS5uZXdVUkkodGFyZ2V0VVJJKS5nZXRPdXRwdXRTdHJlYW0oKTsJICAgIAotCSAgICB3c2RsV3JpdGVyLndyaXRlV1NETChkZWZpbml0aW9uLCBvcyk7Ci0JICAgIG9zLmNsb3NlKCk7Ci0JICAgIAotCSAgICByZXR1cm4gdGFyZ2V0VVJJOwotCX0KLSAgCi0JLyoKLQkgKiBXcml0ZXMgdGhlIHhzZCBzY2hlbWEgdG8gdGhlIGZpbGUgYXQgdGhlIGdpdmVuIHBhdGgsIHJlbGF0aXZlIHRvIHRoZSB0YXJnZXQgZm9sZGVyLgotCSAqLwotCXByaXZhdGUgU3RyaW5nIHdyaXRlWE1MT2JqKElQYXRoIHBhdGgsIFhTRFNjaGVtYSB4c2RTY2hlbWEsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzCi0JCVRyYW5zZm9ybWVyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiwgVHJhbnNmb3JtZXJFeGNlcHRpb24sIFVSSUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewkJCQotCQkKLQkJVHJhbnNmb3JtZXIgc2VyaWFsaXplciA9IFRyYW5zZm9ybWVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld1RyYW5zZm9ybWVyKCk7Ci0JCXNlcmlhbGl6ZXIuc2V0T3V0cHV0UHJvcGVydHkoT3V0cHV0S2V5cy5JTkRFTlQsICJ5ZXMiKTsKLQkJc2VyaWFsaXplci5zZXRPdXRwdXRQcm9wZXJ0eShPdXRwdXRLZXlzLkVOQ09ESU5HLCAiVVRGLTgiKTsKLQkJc2VyaWFsaXplci5zZXRPdXRwdXRQcm9wZXJ0eSgie2h0dHA6Ly94bWwuYXBhY2hlLm9yZy94c2x0fWluZGVudC1hbW91bnQiLCAiMiIpOwotCQkKLQkJRWxlbWVudCBlID0geHNkU2NoZW1hLmdldEVsZW1lbnQoKTsKLQkJRE9NU291cmNlIGRvbVNvdXJjZSA9IG5ldyBET01Tb3VyY2UoZSk7CQkKLQkJCi0JCVN0cmluZyB0YXJnZXRVUkkgPSBhcHBlbmRQYXRoVG9VUkkodGFyZ2V0Rm9sZGVyVVJJLCBwYXRoKTsKLQkJCi0JCU91dHB1dFN0cmVhbSBvcyA9IHVyaUZhY3RvcnkubmV3VVJJKHRhcmdldFVSSSkuZ2V0T3V0cHV0U3RyZWFtKCk7Ci0JCXNlcmlhbGl6ZXIudHJhbnNmb3JtKGRvbVNvdXJjZSwgbmV3IFN0cmVhbVJlc3VsdChvcykpOwotCQlvcy5jbG9zZSgpOwotCQkKLQkJcmV0dXJuIHRhcmdldFVSSTsKLQl9ICAKLQotCS8qCi0JICogQ29tcGFyZXMgdGhlIDIgdXJpcyBhbmQgc2VlIGlmIHRoZXkgcG9pbnQgdG8gdGhlIHNhbWUgZmlsZS4gCi0JICogV2UgbmVlZCB0byBjb252ZXJ0IGJvdGggdXJpcyB0byBmaWxlc3lzdGVtIHVyaXMgaW4gb3JkZXIgdG8gY29tcGFyZS4KLQkgKi8JCi0JcHJpdmF0ZSBib29sZWFuIGlzU2FtZUxvY2F0aW9uKFN0cmluZyB1cmkxLCBTdHJpbmcgdXJpMikgewotCi0JCS8vIGlmIGVpdGhlciB1cmkgaXMgbnVsbCwgd2UgY2Fubm90IG1ha2UgYW55IG1lYW5pbmdmdWwgY29tcGFyaXNvbgotCQlpZiAodXJpMSA9PSBudWxsIHx8IHVyaTIgPT0gbnVsbCkKLQkJCXJldHVybiBmYWxzZTsKLQkJCi0JCXVyaTEgPSBVbml2ZXJzYWxQYXRoVHJhbnNmb3JtZXIudG9Mb2NhdGlvbih1cmkxKTsKLQkJdXJpMiA9IFVuaXZlcnNhbFBhdGhUcmFuc2Zvcm1lci50b0xvY2F0aW9uKHVyaTIpOwotCQkKLQkJcmV0dXJuIHVyaTEuZXF1YWxzKHVyaTIpOwotCX0KLQkKLQkvKioKLQkgKiBFeGVjdXRlcyB0aGUgY29weWluZyBhY3Rpb24uCi0JICogCi0JICogQHBhcmFtIG1vbml0b3IgQW4gb3B0aW9uYWwgcHJvZ3Jlc3MgbW9uaXRvci4KLQkgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24gVGhyb3duIGlmIHRoZSBjb3B5aW5nIGlzIHVuc3VjY2Vzc2Z1bC4gIFBvc3NpYmxlIGNhdXNlcyBpbmNsdWRlOgotCSAqIHRhcmdldCBmb2xkZXIgVVJJIHdhcyBub3Qgc3BlY2lmaWVkOyBzb3VyY2UgVVJJIGhhcyBpbmNvcnJlY3QgZm9ybWF0OyBwcm9ibGVtIHBhcnNpbmcgd3NkbCAKLQkgKiBvciB4c2QgZG9jdW1lbnRzOyBwcm9ibGVtIHdyaXRpbmcgdG8gZmlsZXN5c3RlbS4KLQkgKi8KLQlwdWJsaWMgdm9pZCBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCQotCQl4bWxPYmplY3RJbmZvcy5jbGVhcigpOwotCi0JCS8vIHRhcmdldCBmb2xkZXIgbXVzdCBiZSBzZXQKLQkJaWYgKHRhcmdldEZvbGRlclVSSSA9PSBudWxsKQotCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24oU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoV3N0V1NQbHVnaW5NZXNzYWdlcy5NU0dfRVJST1JfVEFSR0VUX0ZPTERFUl9OT1RfU1BFQ0lGSUVEKSk7CQkKLQkJCQkKLSAgCQl0cnkgeyAgCQkJCi0gIAkJCVVSSSB1cmkgPSBuZXcgVVJJKFVSSUVuY29kZXIuZW5jb2RlKHNvdXJjZVVSSSwgIlVURi04IikpOyAgCQkJCi0gIAkJCWFuYWx5emVXU0RMKHVyaSwgZGVmaW5pdGlvbik7ICAJCQkgCi0gIAkJCQotICAJCQkvLyBiZWdpbiB3cml0aW5nIG91dCBmaWxlcwotICAJCQkKLSAgCQkJSXRlcmF0b3IgaXRlciA9IHhtbE9iamVjdEluZm9zLnZhbHVlcygpLml0ZXJhdG9yKCk7IAkJCSAgCQkJCi0gIAkJCQotICAJCQl3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKLSAgCQkJCVhNTE9iamVjdEluZm8gaW5mbyA9IChYTUxPYmplY3RJbmZvKSBpdGVyLm5leHQoKTsgIAkJCQkKLSAgCQkJCUlQYXRoIHJlbFBhdGggPSBpbmZvLnBhdGgucmVtb3ZlRmlyc3RTZWdtZW50cyhwYXRoUHJlZml4LnNlZ21lbnRDb3VudCgpKTsKLSAgCQkJCQotICAJCQkJaWYgKGluZm8uY29udGVudCBpbnN0YW5jZW9mIERlZmluaXRpb24pIHsKLSAgCQkJCQlEZWZpbml0aW9uIGRlZmluaXRpb24gPSAoRGVmaW5pdGlvbikgaW5mby5jb250ZW50OwotICAJCQkJCQotICAJCQkJCS8vIGlmIHRoaXMgaXMgdGhlIHN0YXJ0aW5nIHdzZGwsIHJlbWVtYmVyIGl0cyBwYXRoIHJlbGF0aXZlIHRvIHRoZSB0YXJnZXQgZm9sZGVyCi0gIAkJCQkJaWYgKGRlZmluaXRpb24gPT0gdGhpcy5kZWZpbml0aW9uKQotICAJCQkJCQl3c2RsUmVsUGF0aCA9IHJlbFBhdGg7Ci0KLSAgCQkJCQlTdHJpbmcgdGFyZ2V0VVJJID0gd3JpdGVYTUxPYmoocmVsUGF0aCwgZGVmaW5pdGlvbiwgbW9uaXRvcik7Ci0gIAkJCQkJCi0gIAkJCQkJaWYgKGRlZmluaXRpb24gPT0gdGhpcy5kZWZpbml0aW9uICYmIGlzU2FtZUxvY2F0aW9uKHVyaS50b1N0cmluZygpLCB0YXJnZXRVUkkpKQotICAJCQkJCQlyZXR1cm47Ci0gIAkJCQl9Ci0gIAkJCQllbHNlCi0gIAkJCQkJd3JpdGVYTUxPYmoocmVsUGF0aCwgKFhTRFNjaGVtYSkgaW5mby5jb250ZW50LCBtb25pdG9yKTsgIAkJCQkJCi0gIAkJCX0gIAkJCQotICAJCX0gY2F0Y2ggKEV4Y2VwdGlvbiB0KSB7Ci0gIAkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKAotICAJCQkJCU5MUy5iaW5kKFdzdFdTUGx1Z2luTWVzc2FnZXMuTVNHX0VSUk9SX0NPUFlfV1NETCwgbmV3IFN0cmluZ1tdIHtzb3VyY2VVUkksIHRhcmdldEZvbGRlclVSSX0pLCB0KSk7Ci0gIAkJfQotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBwYXRoIG9mIHRoZSBzdGFydGluZyB3c2RsIGRvY3VtZW50LCByZWxhdGl2ZSB0byB0aGUgdGFyZ2V0IGZvbGRlciBhZnRlcgotCSAqIGNvcHlpbmcgY29tcGxldGVzLgotCSAqIAotCSAqIEByZXR1cm4gVGhlIHJlbGF0aXZlIHBhdGggb2YgdGhlIHN0YXJ0aW5nIHdzZGwgZG9jdW1lbnQuCi0JICovCi0JcHVibGljIElQYXRoIGdldFJlbGF0aXZlUGF0aCgpIHsKLQkJcmV0dXJuIHdzZGxSZWxQYXRoOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NmaW5kZXIvQWJzdHJhY3RXZWJTZXJ2aWNlTG9jYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c2ZpbmRlci9BYnN0cmFjdFdlYlNlcnZpY2VMb2NhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhNDQ2NzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c2ZpbmRlci9BYnN0cmFjdFdlYlNlcnZpY2VMb2NhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAzMTcgICAxMjc0NTYgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkKLSAqIDIwMDYwNjIwICAgMTQ3ODYyIGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NmaW5kZXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLQotLyoqCi0gKiBAYXV0aG9yIGpvYW4KLSAqIAotICogSW1wbGVtZW50YXRpb24gb2YgSVdlYlNlcnZpY2VMb2NhdG9yLiAgRXh0ZW5kZXJzIG11c3QgaW1wbGVtZW50IHRoZSBhYnN0cmFjdCBtZXRob2QgZ2V0V2ViU2VydmljZXMoKS4gIAotICogVGhpcyBjbGFzcyB3aWxsIGJlIHVzZWQgdG8gcHJvdmlkZSBtZXRob2RzIHVzZWZ1bCB0byBsb2NhdG9yIGltcGxlbWVudGVycy4gIEV4dGVuZGVycyBzaG91bGQgcmVnaXN0ZXIgdGhlaXIKLSAqIGxvY2F0b3IgaW1wbGVtZW50YXRpb24gd2l0aCB0aGVpciBwbHVnaW4gdXNpbmcgdGhlIG9yZy5lY2xpcHNlLndzdC53cy5sb2NhdG9yIGV4dGVuc2lvbiBwb2ludC4gCi0gKgotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RXZWJTZXJ2aWNlTG9jYXRvciBpbXBsZW1lbnRzIElXZWJTZXJ2aWNlTG9jYXRvciB7Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMgY2xhc3MuCi0JICovCi0JcHVibGljIEFic3RyYWN0V2ViU2VydmljZUxvY2F0b3IgKCkKLQl7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyBhIGxpc3Qgb2YgV2ViU2VydmljZUNsaWVudEluZm8gb2JqZWN0cy4KLQkgKiBTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSB0aGlzIG1ldGhvZCdzCi0JICogZGVmYXVsdCBiZWhhdmlvdXIgb2YgcmV0dXJuaW5nIGFuIGVtcHR5IGxpc3QuCi0JICogQHBhcmFtIG1vbml0b3IgQSBwcm9ncmVzcyBtb25pdG9yLAotCSAqIG9yIG51bGwgaWYgcHJvZ3Jlc3MgbW9uaXRvcmluZyBpcyBub3QgZGVzaXJlZC4KLQkgKiBAcmV0dXJuIEEgbm9uLW51bGwgYnV0IHBvc3NpYmx5IGVtcHR5IGxpc3Qgb2YgV2ViU2VydmljZUNsaWVudEluZm8gb2JqZWN0cwotCSAqLwotCXB1YmxpYyBMaXN0IGdldFdlYlNlcnZpY2VDbGllbnRzICggSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkKLQl7Ci0JCXJldHVybiBDb2xsZWN0aW9ucy5FTVBUWV9MSVNUOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgYSBsaXN0IG9mIFdlYlNlcnZpY2VDbGllbnRJbmZvIG9iamVjdHMuCi0JICogU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRob2QncwotCSAqIGRlZmF1bHQgYmVoYXZpb3VyIG9mIHJldHVybmluZyBhbiBlbXB0eSBsaXN0LgotCSAqIEBwYXJhbSBwcm9qZWN0cyBPbmUgb3IgbW9yZSBwcm9qZWN0cyB0byB3aGljaAotCSAqIHRoZSBzZWFyY2ggc2hvdWxkIGJlIGxpbWl0ZWQuCi0JICogQHBhcmFtIG1vbml0b3IgQSBwcm9ncmVzcyBtb25pdG9yLAotCSAqIG9yIG51bGwgaWYgcHJvZ3Jlc3MgbW9uaXRvcmluZyBpcyBub3QgZGVzaXJlZC4KLQkgKiBAcmV0dXJuIEEgbm9uLW51bGwgYnV0IHBvc3NpYmx5IGVtcHR5IGxpc3Qgb2YgV2ViU2VydmljZUNsaWVudEluZm8gb2JqZWN0cwotCSAqLwotCXB1YmxpYyBMaXN0IGdldFdlYlNlcnZpY2VDbGllbnRzICggSVByb2plY3RbXSBwcm9qZWN0cywgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkKLQl7Ci0JCXJldHVybiBDb2xsZWN0aW9ucy5FTVBUWV9MSVNUOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgYSBsaXN0IG9mIFdlYlNlcnZpY2VJbmZvIG9iamVjdHMuIAotCSAqIFN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIHRoaXMgbWV0aG9kJ3MKLQkgKiBkZWZhdWx0IGJlaGF2aW91ciBvZiByZXR1cm5pbmcgYW4gZW1wdHkgbGlzdC4KLQkgKiBAcGFyYW0gbW9uaXRvciBBIHByb2dyZXNzIG1vbml0b3IsCi0JICogb3IgbnVsbCBpZiBwcm9ncmVzcyBtb25pdG9yaW5nIGlzIG5vdCBkZXNpcmVkLgotCSAqIEByZXR1cm4gQSBub24tbnVsbCBidXQgcG9zc2libHkgZW1wdHkgbGlzdCBvZiBXZWJTZXJ2aWNlSW5mbyBvYmplY3RzCi0JICovCi0JcHVibGljIExpc3QgZ2V0V2ViU2VydmljZXMgKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKQotCXsKLQkJcmV0dXJuIENvbGxlY3Rpb25zLkVNUFRZX0xJU1Q7IAotCX0KLQotCS8qKgotCSAqIFJldHVybnMgYSBsaXN0IG9mIFdlYlNlcnZpY2VJbmZvIG9iamVjdHMuIAotCSAqIFN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIHRoaXMgbWV0aG9kJ3MKLQkgKiBkZWZhdWx0IGJlaGF2aW91ciBvZiByZXR1cm5pbmcgYW4gZW1wdHkgbGlzdC4KLQkgKiBAcGFyYW0gcHJvamVjdHMgT25lIG9yIG1vcmUgcHJvamVjdHMgdG8gd2hpY2gKLQkgKiB0aGUgc2VhcmNoIHNob3VsZCBiZSBsaW1pdGVkLgotCSAqIEBwYXJhbSBtb25pdG9yIEEgcHJvZ3Jlc3MgbW9uaXRvciwKLQkgKiBvciBudWxsIGlmIHByb2dyZXNzIG1vbml0b3JpbmcgaXMgbm90IGRlc2lyZWQuCi0JICogQHJldHVybiBBIG5vbi1udWxsIGJ1dCBwb3NzaWJseSBlbXB0eSBsaXN0IG9mIFdlYlNlcnZpY2VJbmZvIG9iamVjdHMKLQkgKi8KLQlwdWJsaWMgTGlzdCBnZXRXZWJTZXJ2aWNlcyAoIElQcm9qZWN0W10gcHJvamVjdHMsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApCi0JewotCQlyZXR1cm4gQ29sbGVjdGlvbnMuRU1QVFlfTElTVDsgCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c2ZpbmRlci9JV2ViU2VydmljZUxvY2F0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NmaW5kZXIvSVdlYlNlcnZpY2VMb2NhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzNTMzMWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c2ZpbmRlci9JV2ViU2VydmljZUxvY2F0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAzMTcgICAxMjc0NTYgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkKLSAqIDIwMDYwNjIwICAgMTQ3ODYyIGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NmaW5kZXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotCi0vKioKLSAqIEBhdXRob3Igam9hbgotICoKLSAqIEludGVyZmFjZSBmb3IgV2ViIHNlcnZpY2UgbG9jYXRvcnMgdGhhdCB3aWxsIGJlIHJldHJpZXZlZAotICogYnkgdGhlIFdlYlNlcnZpY2VGaW5kZXIuIFRoaXMgaW50ZXJmYWNlIHNob3VsZCBub3QgYmUKLSAqIGltcGxlbWVudGVkIGRpcmVjdGx5LiBJbnN0ZWFkLCBzdWJjbGFzc2VzIHNob3VsZCBleHRlbmQKLSAqIEFic3RyYWN0V2ViU2VydmljZUxvY2F0b3IgYW5kIGltcGxlbWVudCB0aGUKLSAqIGdldFdlYlNlcnZpY2VzKCkgYW5kIGdldFdlYlNlcnZpY2VDbGllbnRzKCkgbWV0aG9kcy4gCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSVdlYlNlcnZpY2VMb2NhdG9yCi17Ci0JLyoqCi0JICogUmV0dXJucyBhIGxpc3Qgb2YgV2ViU2VydmljZUNsaWVudEluZm8gb2JqZWN0cy4KLQkgKiBUaGlzIG9wZXJhdGlvbiBtYXkgYmUgbG9uZyBydW5uaW5nLgotCSAqIEBwYXJhbSBtb25pdG9yIEEgcHJvZ3Jlc3MgbW9uaXRvciwKLQkgKiBvciBudWxsIGlmIHByb2dyZXNzIG1vbml0b3JpbmcgaXMgbm90IGRlc2lyZWQuCi0JICogQHJldHVybiBBIGxpc3Qgb2YgV2ViU2VydmljZUNsaWVudEluZm8gb2JqZWN0cy4KLQkgKiBwb3NzaWJseSBlbXB0eSwgcG9zc2libHkgbnVsbC4KLQkgKi8KLQlwdWJsaWMgTGlzdCBnZXRXZWJTZXJ2aWNlQ2xpZW50cyAoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApOwotCQotCS8qKgotCSAqIFJldHVybnMgYSBsaXN0IG9mIFdlYlNlcnZpY2VDbGllbnRJbmZvIG9iamVjdHMuCi0JICogVGhpcyBvcGVyYXRpb24gbWF5IGJlIGxvbmcgcnVubmluZy4KLQkgKiBAcGFyYW0gcHJvamVjdHMgT25lIG9yIG1vcmUgcHJvamVjdHMgdG8gd2hpY2ggdGhlCi0JICogc2VhcmNoIHNob3VsZCBiZSBsaW1pdGVkLgotCSAqIEBwYXJhbSBtb25pdG9yIEEgcHJvZ3Jlc3MgbW9uaXRvciwKLQkgKiBvciBudWxsIGlmIHByb2dyZXNzIG1vbml0b3JpbmcgaXMgbm90IGRlc2lyZWQuCi0JICogQHJldHVybiBBIGxpc3Qgb2YgV2ViU2VydmljZUNsaWVudEluZm8gb2JqZWN0cy4KLQkgKiBwb3NzaWJseSBlbXB0eSwgcG9zc2libHkgbnVsbC4KLQkgKi8KLQlwdWJsaWMgTGlzdCBnZXRXZWJTZXJ2aWNlQ2xpZW50cyAoIElQcm9qZWN0W10gcHJvamVjdHMsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApOwotCQotCS8qKgotCSAqIFJldHVybnMgYSBsaXN0IG9mIFdlYlNlcnZpY2VJbmZvIG9iamVjdHMuCi0JICogVGhpcyBvcGVyYXRpb24gbWF5IGJlIGxvbmcgcnVubmluZy4KLQkgKiBAcGFyYW0gbW9uaXRvciBBIHByb2dyZXNzIG1vbml0b3IsCi0JICogb3IgbnVsbCBpZiBwcm9ncmVzcyBtb25pdG9yaW5nIGlzIG5vdCBkZXNpcmVkLgotCSAqIEByZXR1cm4gQSBsaXN0IG9mIFdlYlNlcnZpY2VJbmZvIG9iamVjdHMsCi0JICogcG9zc2libHkgZW1wdHksIHBvc3NpYmx5IG51bGwuCi0JICovCi0JcHVibGljIExpc3QgZ2V0V2ViU2VydmljZXMgKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKTsKLQotCS8qKgotCSAqIFJldHVybnMgYSBsaXN0IG9mIFdlYlNlcnZpY2VJbmZvIG9iamVjdHMuCi0JICogVGhpcyBvcGVyYXRpb24gbWF5IGJlIGxvbmcgcnVubmluZy4KLQkgKiBAcGFyYW0gcHJvamVjdHMgT25lIG9yIG1vcmUgcHJvamVjdHMgdG8gd2hpY2ggdGhlCi0JICogc2VhcmNoIHNob3VsZCBiZSBsaW1pdGVkLgotCSAqIEBwYXJhbSBtb25pdG9yIEEgcHJvZ3Jlc3MgbW9uaXRvciwKLQkgKiBvciBudWxsIGlmIHByb2dyZXNzIG1vbml0b3JpbmcgaXMgbm90IGRlc2lyZWQuCi0JICogQHJldHVybiBBIGxpc3Qgb2YgV2ViU2VydmljZUluZm8gb2JqZWN0cywKLQkgKiBwb3NzaWJseSBlbXB0eSwgcG9zc2libHkgbnVsbC4KLQkgKi8KLQlwdWJsaWMgTGlzdCBnZXRXZWJTZXJ2aWNlcyAoIElQcm9qZWN0W10gcHJvamVjdHMsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c2ZpbmRlci9XZWJTZXJ2aWNlQ2F0ZWdvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NmaW5kZXIvV2ViU2VydmljZUNhdGVnb3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjNTg1M2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c2ZpbmRlci9XZWJTZXJ2aWNlQ2F0ZWdvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMzE3ICAgMTI3NDU2IGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NmaW5kZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotCi0vKioKLSAqIEBhdXRob3IgY2JyZWFsZXkKLSAqIEEgV2ViU2VydmljZUNhdGVnb3J5IHJlcHJlc2VudHMgYSBkZWZpbmVkIGNhdGVnb3J5IG9mCi0gKiBXZWIgc2VydmljZSBsb2NhdG9ycyBwbHVnZ2VkIGludG8gdGhlIFdlYlNlcnZpY2VGaW5kZXIKLSAqIGZyYW1ld29yay4gRWFjaCBjYXRlZ29yeSBoYXMgYSBub24tdHJhbnNsYXRhYmxlIGlkZW50aWZpZXIsCi0gKiBhbiBvcHRpb25hbCBub24tdHJhbnNsYXRhYmxlIHBhcmVudCBjYXRlZ29yeSBpZGVudGlmaWVyCi0gKiAoYWJzZW50IGZvciByb290IGNhdGVnb3JpZXMpLCBhIHRyYW5zbGF0YWJsZSBzaG9ydCBsYWJlbCwKLSAqIGEgdHJhbnNsYXRhYmxlIGxvbmcgZGVzY3JpcHRpb24gYW5kIGFuIGljb24uCi0gKiBAc2VlIFdlYlNlcnZpY2VGaW5kZXIjZ2V0V2ViU2VydmljZUNhdGVnb3JpZXMoKSAKLSAqLwotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VDYXRlZ29yeQotewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSSUJVVEVfSUQgPSAiaWQiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJJQlVURV9DQVRFR09SWSA9ICJjYXRlZ29yeSI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUklCVVRFX0xBQkVMID0gImxhYmVsIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSSUJVVEVfREVTQ1JJUFRJT04gPSAiZGVzY3JpcHRpb24iOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJJQlVURV9JQ09OID0gImljb24iOyAvLyROT04tTkxTLTEkCi0JCi0JcHJpdmF0ZSBJQ29uZmlndXJhdGlvbkVsZW1lbnQgaWNlXzsKLQkKLQkvKioKLQkgKiBDb25zdHJ1Y3RzIGEgbmV3IFdlYlNlcnZpY2VDYXRlZ29yeSBmb3IgdGhlIGdpdmVuCi0JICogY29uZmlndXJhdGlvbiBlbGVtZW50IGZyb20gdGhlIGV4dGVuc2lvbiByZWdpc3RyeS4KLQkgKiBAcGFyYW0gaWNlIFRoZSBjb25maWd1cmF0aW9uIGVsZW1lbnQgb24gd2hpY2ggdGhpcwotCSAqIG5ldyBXZWJTZXJ2aWNlQ2F0ZWdvcnkgaXMgYmFzZWQuIAotCSAqLwotCXB1YmxpYyBXZWJTZXJ2aWNlQ2F0ZWdvcnkgKCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgaWNlICkKLQl7Ci0JCWljZV8gPSBpY2U7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIG5vbi10cmFuc2xhdGFibGUgaWRlbnRpZmllciBvZiB0aGlzIGNhdGVnb3J5LgotCSAqIEByZXR1cm4gVGhlIG5vbi10cmFuc2xhdGFibGUgaWRlbnRpZmllciBvZiB0aGlzIGNhdGVnb3J5LgotCSAqIFRoaXMgc2hvdWxkIG5ldmVyIGJlIG51bGwuCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRJZCAoKQotCXsKLQkJcmV0dXJuIGljZV8uZ2V0QXR0cmlidXRlQXNJcyhBVFRSSUJVVEVfSUQpOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBub24tdHJhbnNsYXRhYmxlIGlkZW50aWZpZXIgb2YgdGhpcyBjYXRlZ29yeSdzCi0JICogaW1tZWRpYXRlIHBhcmVudCBjYXRlZ29yeSwgb3IgbnVsbCBpZiB0aGlzIGlzIGEgcm9vdCBjYXRlZ29yeQotCSAqIGFuZCwgYXMgc3VjaCwgaGFzIG5vIHBhcmVudCBjYXRlZ29yeS4KLQkgKiBAcmV0dXJuIFRoZSBub24tdHJhbnNsYXRhYmxlIGlkZW50aWZpZXIgb2YgdGhpcyBjYXRlZ29yeSdzCi0JICogcGFyZW50LCBvciBudWxsIGlmIHRoZXJlIGlzIG5vbmUuCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRQYXJlbnRJZCAoKQotCXsKLQkJcmV0dXJuIGljZV8uZ2V0QXR0cmlidXRlQXNJcyhBVFRSSUJVVEVfQ0FURUdPUlkpOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoaXMgY2F0ZWdvcnkncyBpbW1lZGlhdGUgcGFyZW50IFdlYlNlcnZpY2VDYXRlZ29yeSwgb3IKLQkgKiBudWxsIGlmIHRoaXMgaXMgYSByb290IGNhdGVnb3J5IGFuZCwgYXMgc3VjaCwgaGFzIG5vIHBhcmVudCBjYXRlZ29yeS4KLQkgKiBAcmV0dXJuIFRoaXMgY2F0ZWdvcnkncyBpbW1lZGlhdGUgcGFyZW50IFdlYlNlcnZpY2VDYXRlZ29yeSwgb3IKLQkgKiBudWxsIGlmIHRoZXJlIGlzIG5vbmUuCi0JICovCi0JcHVibGljIFdlYlNlcnZpY2VDYXRlZ29yeSBnZXRQYXJlbnQgKCkKLQl7Ci0JCXJldHVybiBXZWJTZXJ2aWNlRmluZGVyLmluc3RhbmNlKCkuZ2V0V2ViU2VydmljZUNhdGVnb3J5QnlJZChnZXRQYXJlbnRJZCgpKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgaW50ZXJuYXRpb25hbGl6ZWQgc2hvcnQgbGFiZWwgb2YgdGhpcyBjYXRlZ29yeSwKLQkgKiBvciBudWxsIGlmIHRoZXJlIGlzIG5vbmUuIE5vdGUgdGhhdCB1c2VyIGludGVyZmFjZXMgbWF5Ci0JICogY2hvb3NlIHRvIGJ5cGFzcyBjYXRlZ29yaWVzIHRoYXQgZG8gbm90IGhhdmUgYSBsYWJlbC4KLQkgKiBAcmV0dXJuIFRoZSBpbnRlcm5hdGlvbmFsaXplZCBzaG9ydCBsYWJlbCBvZiB0aGlzIGNhdGVnb3J5LAotCSAqIG9yIG51bGwgaWYgdGhlcmUgaXMgbm9uZS4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldExhYmVsICgpCi0JewotCQlyZXR1cm4gaWNlXy5nZXRBdHRyaWJ1dGVBc0lzKEFUVFJJQlVURV9MQUJFTCk7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIGludGVybmF0aW9uYWxpemVkIGRlc2NyaXB0aW9uIG9mIHRoaXMgY2F0ZWdvcnksCi0JICogb3IgbnVsbCBpZiB0aGVyZSBpcyBub25lLgotCSAqIEByZXR1cm4gVGhlIGludGVybmF0aW9uYWxpemVkIGRlc2NyaXB0aW9uIG9mIHRoaXMgY2F0ZWdvcnksCi0JICogb3IgbnVsbCBpZiB0aGVyZSBpcyBub25lLgotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24gKCkKLQl7Ci0JCXJldHVybiBpY2VfLmdldEF0dHJpYnV0ZUFzSXMoQVRUUklCVVRFX0RFU0NSSVBUSU9OKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgaWNvbiBvZiB0aGlzIGNhdGVnb3J5LCBvciBudWxsIGlmIHRoZXJlIGlzIG5vbmUuCi0JICogQHJldHVybiBUaGUgaWNvbiBvZiB0aGlzIGNhdGVnb3J5LCBvciBudWxsIGlmIHRoZXJlIGlzIG5vbmUuCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRJY29uICgpCi0JewotCQlyZXR1cm4gaWNlXy5nZXRBdHRyaWJ1dGVBc0lzKEFUVFJJQlVURV9JQ09OKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzZmluZGVyL1dlYlNlcnZpY2VGaW5kZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NmaW5kZXIvV2ViU2VydmljZUZpbmRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTBkOTlmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NmaW5kZXIvV2ViU2VydmljZUZpbmRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAzMTcgICAxMjc0NTYgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkKLSAqIDIwMDYwNjIwICAgMTQ3ODYyIGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NmaW5kZXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotCi0vKioKLSAqIEBhdXRob3Igam9hbgotICoKLSAqIFdlYlNlcnZpY2VGaW5kZXIgaXMgYSBzaW5nbGV0b24gd2hpY2ggZmluZHMgYWxsIGV4dGVuZGVycyBhbmQgcmV0dXJucyBhIGNvbXByZWhlbnNpdmUgbGlzdCBvZiBXZWJTZXJ2aWNlSW5mbyBvYmplY3RzLgotICogRmluZHMgd2ViIHNlcnZpY2VzIGJ5IGNhbGxpbmcgbG9jYXRvcnMgZXh0ZW5kaW5nIHtAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NmaW5kZXIuQWJzdHJhY3RXZWJTZXJ2aWNlTG9jYXRvcn0gCi0gKiB3aGljaCBoYXZlIGJlZW4gcmVnaXN0ZXJlZCB3aXRoIHtAbGluayBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NmaW5kZXIuV2ViU2VydmljZUxvY2F0b3JSZWdpc3RyeX0uCi0gKi8KLXB1YmxpYyBjbGFzcyBXZWJTZXJ2aWNlRmluZGVyIHsKLQotCXByaXZhdGUgc3RhdGljIFdlYlNlcnZpY2VGaW5kZXIgaW5zdGFuY2UgPSBudWxsOwotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1FTlRfTE9DQVRPUiA9ICJ3ZWJTZXJ2aWNlTG9jYXRvciI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTUVOVF9DQVRFR09SWSA9ICJ3ZWJTZXJ2aWNlTG9jYXRvckNhdGVnb3J5IjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSSUJVVEVfSUQgPSAiaWQiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJJQlVURV9DTEFTUyA9ICJjbGFzcyI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUklCVVRFX0NBVEVHT1JZID0gImNhdGVnb3J5IjsgLy8kTk9OLU5MUy0xJAotLy8JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJJQlVURV9MQUJFTCA9ICJsYWJlbCI7IC8vJE5PTi1OTFMtMSQKLS8vCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSSUJVVEVfREVTQ1JJUFRJT04gPSAiZGVzY3JpcHRpb24iOyAvLyROT04tTkxTLTEkCi0vLwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUklCVVRFX0lDT04gPSAiaWNvbiI7IC8vJE5PTi1OTFMtMSQKLQotCS8qCi0JICogUHVibGljIGNvbnN0cnVjdGlvbiBpcyBub3QgYWxsb3dlZC4KLQkgKiBVc2UgV2ViU2VydmljZUZpbmRlci5pbnN0YW5jZSgpLgotCSAqLwotCXByaXZhdGUgV2ViU2VydmljZUZpbmRlciAoKQkKLQl7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2luZ2xldG9uIG9mIDxjb2RlPldlYlNlcnZpY2VGaW5kZXI8L2NvZGU+LgotCSAqIEByZXR1cm4gVGhlIHNpbmdsZXRvbiBvZiA8Y29kZT5XZWJTZXJ2aWNlRmluZGVyPC9jb2RlPi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFdlYlNlcnZpY2VGaW5kZXIgaW5zdGFuY2UgKCkKLQl7Ci0JCWlmIChpbnN0YW5jZSA9PSBudWxsKQotCQl7Ci0JCQlpbnN0YW5jZSA9IG5ldyBXZWJTZXJ2aWNlRmluZGVyKCk7Ci0JCX0KLQkJcmV0dXJuIGluc3RhbmNlOwotCX0KLQkJCi0JLyoqCi0JICogUmV0dXJucyBhbiBpdGVyYXRvciBvZiBXZWJTZXJ2aWNlSW5mbyBvYmplY3RzIHdoaWNoIHJlcHJlc2VudCB3ZWIgc2VydmljZXMgZm91bmQgYnkgbG9jYXRvcnMgdGhhdAotCSAqIGhhdmUgcmVnaXN0ZXJlZCB1c2luZyB0aGUgb3JnLmVjbGlwc2Uud3N0LndzLmxvY2F0b3IgZXh0ZW5zaW9uIHBvaW50LiAgQ3VycmVudGx5IHJldHVybnMgYWxsIHdlYiAKLQkgKiBzZXJ2aWNlcyBmb3VuZCBmb3IgYWxsIHJlZ2lzdGVyZWQgbG9jYXRvcnMuICBMb2NhdG9ycyBtdXN0IGV4dGVuZCB7QGxpbmsgQWJzdHJhY3RXZWJTZXJ2aWNlTG9jYXRvcn0uCi0JICogQ2FsbGVycyBjYW4gdXNlIHRoZSBnZXR0ZXIgbWV0aG9kcyBvbiB0aGUgV2ViU2VydmljZUluZm8gb2JqZWN0IHRvIHJldHJpZXZlIGluZm9ybWF0aW9uIG9uIHRoZSAKLQkgKiB3ZWIgc2VydmljZXMgZm91bmQuICBUaGUgV2ViU2VydmljZUZpbmRlciBjYW5ub3QgZ3VhcmFudGVlIHRoZSBsZXZlbCBvZiBkZXRhaWwgY29udGFpbmVkIGluIFdlYlNlcnZpY2VJbmZvCi0JICogb2JqZWN0cyByZXR1cm5lZC4gIFRoaXMgaXMgbGVmdCB0byB0aGUgbG9jYXRvciBpbXBsZW1lbnRhdGlvbnMuCi0JICogQHBhcmFtIG1vbml0b3IgQSBwcm9ncmVzcyBtb25pdG9yLCBvciBudWxsIGlmIHByb2dyZXNzIG1vbml0b3JpbmcgaXMgbm90IGRlc2lyZWQuCi0JICogQHJldHVybiBBbiBpdGVyYXRvciBvZiBXZWJTZXJ2aWNlSW5mbyBvYmplY3RzLCBuZXZlciBudWxsLgotCSAqLwotCXB1YmxpYyBJdGVyYXRvciBnZXRXZWJTZXJ2aWNlcyAoIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApCi0JewotCQlyZXR1cm4gZ2V0V2ViU2VydmljZXNCeUNhdGVnb3J5SWQobnVsbCxtb25pdG9yKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyBhbiBpdGVyYXRvciBvZiBXZWJTZXJ2aWNlSW5mbyBvYmplY3RzIHdoaWNoIHJlcHJlc2VudCB3ZWIgc2VydmljZXMgZm91bmQgYnkgbG9jYXRvcnMgdGhhdAotCSAqIGhhdmUgcmVnaXN0ZXJlZCB1c2luZyB0aGUgb3JnLmVjbGlwc2Uud3N0LndzLmxvY2F0b3IgZXh0ZW5zaW9uIHBvaW50LiAgQ3VycmVudGx5IHJldHVybnMgYWxsIHdlYiAKLQkgKiBzZXJ2aWNlcyBmb3VuZCBpbiB0aGUgY29udGV4dCBvZiB0aGUgZ2l2ZW4gcHJvamVjdHMgZm9yIGFsbCByZWdpc3RlcmVkIGxvY2F0b3JzLgotCSAqIExvY2F0b3JzIG11c3QgZXh0ZW5kIHtAbGluayBBYnN0cmFjdFdlYlNlcnZpY2VMb2NhdG9yfS4KLQkgKiBDYWxsZXJzIGNhbiB1c2UgdGhlIGdldHRlciBtZXRob2RzIG9uIHRoZSBXZWJTZXJ2aWNlSW5mbyBvYmplY3QgdG8gcmV0cmlldmUgaW5mb3JtYXRpb24gb24gdGhlIAotCSAqIHdlYiBzZXJ2aWNlcyBmb3VuZC4gIFRoZSBXZWJTZXJ2aWNlRmluZGVyIGNhbm5vdCBndWFyYW50ZWUgdGhlIGxldmVsIG9mIGRldGFpbCBjb250YWluZWQgaW4gV2ViU2VydmljZUluZm8KLQkgKiBvYmplY3RzIHJldHVybmVkLiAgVGhpcyBpcyBsZWZ0IHRvIHRoZSBsb2NhdG9yIGltcGxlbWVudGF0aW9ucy4KLQkgKiBAcGFyYW0gbW9uaXRvciBBIHByb2dyZXNzIG1vbml0b3IsIG9yIG51bGwgaWYgcHJvZ3Jlc3MgbW9uaXRvcmluZyBpcyBub3QgZGVzaXJlZC4KLQkgKiBAcmV0dXJuIEFuIGl0ZXJhdG9yIG9mIFdlYlNlcnZpY2VJbmZvIG9iamVjdHMsIG5ldmVyIG51bGwuCi0JICovCi0JcHVibGljIEl0ZXJhdG9yIGdldFdlYlNlcnZpY2VzICggSVByb2plY3RbXSBwcm9qZWN0cywgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkKLQl7Ci0JCXJldHVybiBnZXRXZWJTZXJ2aWNlc0J5Q2F0ZWdvcnlJZChudWxsLHByb2plY3RzLG1vbml0b3IpOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIGFuIGl0ZXJhdG9yIG9mIFdlYlNlcnZpY2VJbmZvIG9iamVjdHMgd2hpY2ggcmVwcmVzZW50IHdlYiBzZXJ2aWNlcyBmb3VuZCBieSBsb2NhdG9ycyB0aGF0Ci0JICogaGF2ZSByZWdpc3RlcmVkIHVzaW5nIHRoZSBvcmcuZWNsaXBzZS53c3Qud3MubG9jYXRvciBleHRlbnNpb24gcG9pbnQgdW5kZXIgdGhlIGdpdmVuIGNhdGVnb3J5LgotCSAqIExvY2F0b3JzIG11c3QgZXh0ZW5kIHtAbGluayBBYnN0cmFjdFdlYlNlcnZpY2VMb2NhdG9yfS4KLQkgKiBDYWxsZXJzIGNhbiB1c2UgdGhlIGdldHRlciBtZXRob2RzIG9uIHRoZSBXZWJTZXJ2aWNlSW5mbyBvYmplY3QgdG8gcmV0cmlldmUgaW5mb3JtYXRpb24gb24gdGhlIAotCSAqIHdlYiBzZXJ2aWNlcyBmb3VuZC4gIFRoZSBXZWJTZXJ2aWNlRmluZGVyIGNhbm5vdCBndWFyYW50ZWUgdGhlIGxldmVsIG9mIGRldGFpbCBjb250YWluZWQgaW4gV2ViU2VydmljZUluZm8KLQkgKiBvYmplY3RzIHJldHVybmVkLiAgVGhpcyBpcyBsZWZ0IHRvIHRoZSBsb2NhdG9yIGltcGxlbWVudGF0aW9ucy4KLQkgKiBAcGFyYW0gY2F0ZWdvcnkgVGhlIGNhdGVnb3J5IG9mIGxvY2F0b3JzIHRvIHVzZS4KLQkgKiBAcGFyYW0gbW9uaXRvciBBIHByb2dyZXNzIG1vbml0b3IsIG9yIG51bGwgaWYgcHJvZ3Jlc3MgbW9uaXRvcmluZyBpcyBub3QgZGVzaXJlZC4KLQkgKiBAcmV0dXJuIEFuIGl0ZXJhdG9yIG9mIFdlYlNlcnZpY2VJbmZvIG9iamVjdHMsIG5ldmVyIG51bGwuCi0JICovCi0JcHVibGljIEl0ZXJhdG9yIGdldFdlYlNlcnZpY2VzQnlDYXRlZ29yeSAoIFdlYlNlcnZpY2VDYXRlZ29yeSBjYXRlZ29yeSwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICApCi0JewotCQlyZXR1cm4gZ2V0V2ViU2VydmljZXNCeUNhdGVnb3J5SWQoY2F0ZWdvcnkgPT0gbnVsbCA/IG51bGwgOiBjYXRlZ29yeS5nZXRJZCgpLG1vbml0b3IpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgYW4gaXRlcmF0b3Igb2YgV2ViU2VydmljZUluZm8gb2JqZWN0cyB3aGljaCByZXByZXNlbnQgd2ViIHNlcnZpY2VzIGZvdW5kIGJ5IGxvY2F0b3JzIHRoYXQKLQkgKiBoYXZlIHJlZ2lzdGVyZWQgdXNpbmcgdGhlIG9yZy5lY2xpcHNlLndzdC53cy5sb2NhdG9yIGV4dGVuc2lvbiBwb2ludCB1bmRlciB0aGUgZ2l2ZW4gY2F0ZWdvcnkuCi0JICogVGhlIHNlYXJjaCBpcyBjb25zdHJhaW5lZCB0byB0aGUgZ2l2ZW4gc2V0IG9mIG9uZSBvciBtb3JlIHByb2plY3RzLgotCSAqIExvY2F0b3JzIG11c3QgZXh0ZW5kIHtAbGluayBBYnN0cmFjdFdlYlNlcnZpY2VMb2NhdG9yfS4KLQkgKiBDYWxsZXJzIGNhbiB1c2UgdGhlIGdldHRlciBtZXRob2RzIG9uIHRoZSBXZWJTZXJ2aWNlSW5mbyBvYmplY3QgdG8gcmV0cmlldmUgaW5mb3JtYXRpb24gb24gdGhlIAotCSAqIHdlYiBzZXJ2aWNlcyBmb3VuZC4gIFRoZSBXZWJTZXJ2aWNlRmluZGVyIGNhbm5vdCBndWFyYW50ZWUgdGhlIGxldmVsIG9mIGRldGFpbCBjb250YWluZWQgaW4gV2ViU2VydmljZUluZm8KLQkgKiBvYmplY3RzIHJldHVybmVkLiAgVGhpcyBpcyBsZWZ0IHRvIHRoZSBsb2NhdG9yIGltcGxlbWVudGF0aW9ucy4KLQkgKiBAcGFyYW0gY2F0ZWdvcnkgVGhlIGNhdGVnb3J5IG9mIGxvY2F0b3JzIHRvIHVzZS4KLQkgKiBAcGFyYW0gbW9uaXRvciBBIHByb2dyZXNzIG1vbml0b3IsIG9yIG51bGwgaWYgcHJvZ3Jlc3MgbW9uaXRvcmluZyBpcyBub3QgZGVzaXJlZC4KLQkgKiBAcmV0dXJuIEFuIGl0ZXJhdG9yIG9mIFdlYlNlcnZpY2VJbmZvIG9iamVjdHMsIG5ldmVyIG51bGwuCi0JICovCi0JcHVibGljIEl0ZXJhdG9yIGdldFdlYlNlcnZpY2VzQnlDYXRlZ29yeSAoIFdlYlNlcnZpY2VDYXRlZ29yeSBjYXRlZ29yeSwgSVByb2plY3RbXSBwcm9qZWN0cywgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICApCi0JewotCQlyZXR1cm4gZ2V0V2ViU2VydmljZXNCeUNhdGVnb3J5SWQoY2F0ZWdvcnkgPT0gbnVsbCA/IG51bGwgOiBjYXRlZ29yeS5nZXRJZCgpLHByb2plY3RzLG1vbml0b3IpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgYW4gaXRlcmF0b3Igb2YgV2ViU2VydmljZUluZm8gb2JqZWN0cyB3aGljaCByZXByZXNlbnQgd2ViIHNlcnZpY2VzIGZvdW5kIGJ5IGxvY2F0b3JzIHRoYXQKLQkgKiBoYXZlIHJlZ2lzdGVyZWQgdXNpbmcgdGhlIG9yZy5lY2xpcHNlLndzdC53cy5sb2NhdG9yIGV4dGVuc2lvbiBwb2ludCB1bmRlciB0aGUgZ2l2ZW4gY2F0ZWdvcnkuCi0JICogTG9jYXRvcnMgbXVzdCBleHRlbmQge0BsaW5rIEFic3RyYWN0V2ViU2VydmljZUxvY2F0b3J9LgotCSAqIENhbGxlcnMgY2FuIHVzZSB0aGUgZ2V0dGVyIG1ldGhvZHMgb24gdGhlIFdlYlNlcnZpY2VJbmZvIG9iamVjdCB0byByZXRyaWV2ZSBpbmZvcm1hdGlvbiBvbiB0aGUgCi0JICogd2ViIHNlcnZpY2VzIGZvdW5kLiAgVGhlIFdlYlNlcnZpY2VGaW5kZXIgY2Fubm90IGd1YXJhbnRlZSB0aGUgbGV2ZWwgb2YgZGV0YWlsIGNvbnRhaW5lZCBpbiBXZWJTZXJ2aWNlSW5mbwotCSAqIG9iamVjdHMgcmV0dXJuZWQuICBUaGlzIGlzIGxlZnQgdG8gdGhlIGxvY2F0b3IgaW1wbGVtZW50YXRpb25zLgotCSAqIEBwYXJhbSBjYXRlZ29yeUlkIFRoZSBjYXRlZ29yeSBvZiBsb2NhdG9ycyB0byB1c2UuCi0JICogQHBhcmFtIG1vbml0b3IgQSBwcm9ncmVzcyBtb25pdG9yLCBvciBudWxsIGlmIHByb2dyZXNzIG1vbml0b3JpbmcgaXMgbm90IGRlc2lyZWQuCi0JICogQHJldHVybiBBbiBpdGVyYXRvciBvZiBXZWJTZXJ2aWNlSW5mbyBvYmplY3RzLCBuZXZlciBudWxsLgotCSAqLwotCXB1YmxpYyBJdGVyYXRvciBnZXRXZWJTZXJ2aWNlc0J5Q2F0ZWdvcnlJZCAoIFN0cmluZyBjYXRlZ29yeUlkLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKQotCXsKLQkJcmV0dXJuIGdldFdlYlNlcnZpY2VzQnlDYXRlZ29yeUlkKGNhdGVnb3J5SWQsbnVsbCxtb25pdG9yKTsJCi0JfSAKLQotCS8qKgotCSAqIFJldHVybnMgYW4gaXRlcmF0b3Igb2YgV2ViU2VydmljZUluZm8gb2JqZWN0cyB3aGljaCByZXByZXNlbnQgd2ViIHNlcnZpY2VzIGZvdW5kIGJ5IGxvY2F0b3JzIHRoYXQKLQkgKiBoYXZlIHJlZ2lzdGVyZWQgdXNpbmcgdGhlIG9yZy5lY2xpcHNlLndzdC53cy5sb2NhdG9yIGV4dGVuc2lvbiBwb2ludCB1bmRlciB0aGUgZ2l2ZW4gY2F0ZWdvcnkuCi0JICogVGhlIHNlYXJjaCBpcyBjb25zdHJhaW5lZCB0byB0aGUgZ2l2ZW4gc2V0IG9mIG9uZSBvciBtb3JlIHByb2plY3RzLgotCSAqIExvY2F0b3JzIG11c3QgZXh0ZW5kIHtAbGluayBBYnN0cmFjdFdlYlNlcnZpY2VMb2NhdG9yfS4KLQkgKiBDYWxsZXJzIGNhbiB1c2UgdGhlIGdldHRlciBtZXRob2RzIG9uIHRoZSBXZWJTZXJ2aWNlSW5mbyBvYmplY3QgdG8gcmV0cmlldmUgaW5mb3JtYXRpb24gb24gdGhlIAotCSAqIHdlYiBzZXJ2aWNlcyBmb3VuZC4gIFRoZSBXZWJTZXJ2aWNlRmluZGVyIGNhbm5vdCBndWFyYW50ZWUgdGhlIGxldmVsIG9mIGRldGFpbCBjb250YWluZWQgaW4gV2ViU2VydmljZUluZm8KLQkgKiBvYmplY3RzIHJldHVybmVkLiAgVGhpcyBpcyBsZWZ0IHRvIHRoZSBsb2NhdG9yIGltcGxlbWVudGF0aW9ucy4KLQkgKiBAcGFyYW0gY2F0ZWdvcnlJZCBUaGUgY2F0ZWdvcnkgb2YgbG9jYXRvcnMgdG8gdXNlLgotCSAqIEBwYXJhbSBtb25pdG9yIEEgcHJvZ3Jlc3MgbW9uaXRvciwgb3IgbnVsbCBpZiBwcm9ncmVzcyBtb25pdG9yaW5nIGlzIG5vdCBkZXNpcmVkLgotCSAqIEByZXR1cm4gQW4gaXRlcmF0b3Igb2YgV2ViU2VydmljZUluZm8gb2JqZWN0cywgbmV2ZXIgbnVsbC4KLQkgKi8KLQlwdWJsaWMgSXRlcmF0b3IgZ2V0V2ViU2VydmljZXNCeUNhdGVnb3J5SWQgKCBTdHJpbmcgY2F0ZWdvcnlJZCwgSVByb2plY3RbXSBwcm9qZWN0cywgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkKLQl7Ci0JCUxpbmtlZExpc3Qgd2ViU2VydmljZXMgPSBuZXcgTGlua2VkTGlzdCgpOwotCQlXZWJTZXJ2aWNlTG9jYXRvclJlZ2lzdHJ5IHdzbHIgPSBXZWJTZXJ2aWNlTG9jYXRvclJlZ2lzdHJ5LmdldEluc3RhbmNlKCk7Ci0JCUlDb25maWd1cmF0aW9uRWxlbWVudFtdIHJlZ0VsZW1lbnRzID0gd3Nsci5nZXRDb25maWdFbGVtZW50cygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHJlZ0VsZW1lbnRzLmxlbmd0aDsgaSsrKQotCQl7Ci0JCQlpZiAoRUxFTUVOVF9MT0NBVE9SLmVxdWFscyhyZWdFbGVtZW50c1tpXS5nZXROYW1lKCkpKQotCQkJewotCQkJCXRyeQotCQkJCXsKLQkJCQkJaWYgKGNhdGVnb3J5SWQgPT0gbnVsbCB8fCBjYXRlZ29yeUlkLmVxdWFscyhyZWdFbGVtZW50c1tpXS5nZXRBdHRyaWJ1dGVBc0lzKEFUVFJJQlVURV9DQVRFR09SWSkpKQotCQkJCQl7Ci0JCQkJCQlPYmplY3Qgb2JqID0gcmVnRWxlbWVudHNbaV0uY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbihBVFRSSUJVVEVfQ0xBU1MpOwotCQkJCQkJaWYgKG9iaiBpbnN0YW5jZW9mIElXZWJTZXJ2aWNlTG9jYXRvcikKLQkJCQkJCXsKLQkJCQkJCQlJV2ViU2VydmljZUxvY2F0b3Igd3NsID0gKElXZWJTZXJ2aWNlTG9jYXRvcilvYmo7Ci0JCQkJCQkJTGlzdCB3c0xpc3QgPSBwcm9qZWN0cyA9PSBudWxsID8gd3NsLmdldFdlYlNlcnZpY2VzKG1vbml0b3IpIDogd3NsLmdldFdlYlNlcnZpY2VzKHByb2plY3RzLG1vbml0b3IpOwotCQkJCQkJCWlmICh3c0xpc3QgIT0gbnVsbCkKLQkJCQkJCQl7Ci0JCQkJCQkJCXdlYlNlcnZpY2VzLmFkZEFsbCh3c0xpc3QpOwotCQkJCQkJCX0KLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0gCi0JCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXgpCi0JCQkJewotCQkJCQkvLyBRdWlldGx5IGJ5cGFzcyBhbnkgSVdlYlNlcnZpY2VMb2NhdG9ycyB0aGF0IGZhaWxlZCB0byBiZSBsb2FkZWQuCi0JCQkJfQotCQkJfQotCQl9IAotCQlyZXR1cm4gd2ViU2VydmljZXMuaXRlcmF0b3IoKTsJCi0JfSAKLQotCS8qKgotCSAqIFJldHVybnMgYW4gaXRlcmF0b3Igb2YgV2ViU2VydmljZUNsaWVudEluZm8gb2JqZWN0cyB3aGljaCByZXByZXNlbnQgd2ViIHNlcnZpY2UgY2xpZW50cyBmb3VuZCBieSBsb2NhdG9ycyB0aGF0Ci0JICogaGF2ZSByZWdpc3RlcmVkIHVzaW5nIHRoZSBvcmcuZWNsaXBzZS53c3Qud3MubG9jYXRvciBleHRlbnNpb24gcG9pbnQuICBDdXJyZW50bHkgcmV0dXJucyBhbGwgd2ViIAotCSAqIHNlcnZpY2UgY2xpZW50cyBmb3VuZCBmb3IgYWxsIHJlZ2lzdGVyZWQgbG9jYXRvcnMuICBMb2NhdG9ycyBtdXN0IGV4dGVuZCB7QGxpbmsgQWJzdHJhY3RXZWJTZXJ2aWNlTG9jYXRvcn0uCi0JICogQ2FsbGVycyBjYW4gdXNlIHRoZSBnZXR0ZXIgbWV0aG9kcyBvbiB0aGUgV2ViU2VydmljZUNsaWVudEluZm8gb2JqZWN0IHRvIHJldHJpZXZlIGluZm9ybWF0aW9uIG9uIHRoZSAKLQkgKiB3ZWIgc2VydmljZSBjbGllbnRzIGZvdW5kLiAgVGhlIFdlYlNlcnZpY2VGaW5kZXIgY2Fubm90IGd1YXJhbnRlZSB0aGUgbGV2ZWwgb2YgZGV0YWlsIGNvbnRhaW5lZCBpbiBXZWJTZXJ2aWNlQ2xpZW50SW5mbwotCSAqIG9iamVjdHMgcmV0dXJuZWQuICBUaGlzIGlzIGxlZnQgdG8gdGhlIGxvY2F0b3IgaW1wbGVtZW50YXRpb25zLgotCSAqIEBwYXJhbSBtb25pdG9yIEEgcHJvZ3Jlc3MgbW9uaXRvciwgb3IgbnVsbCBpZiBwcm9ncmVzcyBtb25pdG9yaW5nIGlzIG5vdCBkZXNpcmVkLgotCSAqIEByZXR1cm4gQW4gaXRlcmF0b3Igb2YgV2ViU2VydmljZUNsaWVudEluZm8gb2JqZWN0cywgbmV2ZXIgbnVsbC4KLQkgKi8KLQlwdWJsaWMgSXRlcmF0b3IgZ2V0V2ViU2VydmljZUNsaWVudHMgKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKQotCXsKLQkJcmV0dXJuIGdldFdlYlNlcnZpY2VDbGllbnRzQnlDYXRlZ29yeUlkKG51bGwsbW9uaXRvcik7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgYW4gaXRlcmF0b3Igb2YgV2ViU2VydmljZUNsaWVudEluZm8gb2JqZWN0cyB3aGljaCByZXByZXNlbnQgd2ViIHNlcnZpY2UgY2xpZW50cyBmb3VuZCBieSBsb2NhdG9ycyB0aGF0Ci0JICogaGF2ZSByZWdpc3RlcmVkIHVzaW5nIHRoZSBvcmcuZWNsaXBzZS53c3Qud3MubG9jYXRvciBleHRlbnNpb24gcG9pbnQuICBDdXJyZW50bHkgcmV0dXJucyBhbGwgd2ViIAotCSAqIHNlcnZpY2UgY2xpZW50cyBmb3VuZCBmb3IgYWxsIHJlZ2lzdGVyZWQgbG9jYXRvcnMgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGdpdmVuIHByb2plY3RzLgotCSAqIExvY2F0b3JzIG11c3QgZXh0ZW5kIHtAbGluayBBYnN0cmFjdFdlYlNlcnZpY2VMb2NhdG9yfS4KLQkgKiBDYWxsZXJzIGNhbiB1c2UgdGhlIGdldHRlciBtZXRob2RzIG9uIHRoZSBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBvYmplY3QgdG8gcmV0cmlldmUgaW5mb3JtYXRpb24gb24gdGhlIAotCSAqIHdlYiBzZXJ2aWNlIGNsaWVudHMgZm91bmQuICBUaGUgV2ViU2VydmljZUZpbmRlciBjYW5ub3QgZ3VhcmFudGVlIHRoZSBsZXZlbCBvZiBkZXRhaWwgY29udGFpbmVkIGluIFdlYlNlcnZpY2VDbGllbnRJbmZvCi0JICogb2JqZWN0cyByZXR1cm5lZC4gIFRoaXMgaXMgbGVmdCB0byB0aGUgbG9jYXRvciBpbXBsZW1lbnRhdGlvbnMuCi0JICogQHBhcmFtIG1vbml0b3IgQSBwcm9ncmVzcyBtb25pdG9yLCBvciBudWxsIGlmIHByb2dyZXNzIG1vbml0b3JpbmcgaXMgbm90IGRlc2lyZWQuCi0JICogQHJldHVybiBBbiBpdGVyYXRvciBvZiBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBvYmplY3RzLCBuZXZlciBudWxsLgotCSAqLwotCXB1YmxpYyBJdGVyYXRvciBnZXRXZWJTZXJ2aWNlQ2xpZW50cyAoIElQcm9qZWN0W10gcHJvamVjdHMsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApCi0JewotCQlyZXR1cm4gZ2V0V2ViU2VydmljZUNsaWVudHNCeUNhdGVnb3J5SWQobnVsbCxwcm9qZWN0cyxtb25pdG9yKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyBhbiBpdGVyYXRvciBvZiBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBvYmplY3RzIHdoaWNoIHJlcHJlc2VudCB3ZWIgc2VydmljZSBjbGllbnRzIGZvdW5kIGJ5IGxvY2F0b3JzIHRoYXQKLQkgKiBoYXZlIHJlZ2lzdGVyZWQgdXNpbmcgdGhlIG9yZy5lY2xpcHNlLndzdC53cy5sb2NhdG9yIGV4dGVuc2lvbiBwb2ludCB1bmRlciB0aGUgZ2l2ZW4gY2F0ZWdvcnkuCi0JICogTG9jYXRvcnMgbXVzdCBleHRlbmQge0BsaW5rIEFic3RyYWN0V2ViU2VydmljZUxvY2F0b3J9LiAKLQkgKiBDYWxsZXJzIGNhbiB1c2UgdGhlIGdldHRlciBtZXRob2RzIG9uIHRoZSBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBvYmplY3QgdG8gcmV0cmlldmUgaW5mb3JtYXRpb24gb24gdGhlIAotCSAqIHdlYiBzZXJ2aWNlIGNsaWVudHMgZm91bmQuICBUaGUgV2ViU2VydmljZUZpbmRlciBjYW5ub3QgZ3VhcmFudGVlIHRoZSBsZXZlbCBvZiBkZXRhaWwgY29udGFpbmVkIGluIFdlYlNlcnZpY2VDbGllbnRJbmZvCi0JICogb2JqZWN0cyByZXR1cm5lZC4gIFRoaXMgaXMgbGVmdCB0byB0aGUgbG9jYXRvciBpbXBsZW1lbnRhdGlvbnMuCi0JICogQHBhcmFtIGNhdGVnb3J5IFRoZSBjYXRlZ29yeSBvZiBsb2NhdG9ycyB0byB1c2UuCi0JICogQHBhcmFtIG1vbml0b3IgQSBwcm9ncmVzcyBtb25pdG9yLCBvciBudWxsIGlmIHByb2dyZXNzIG1vbml0b3JpbmcgaXMgbm90IGRlc2lyZWQuCi0JICogQHJldHVybiBBbiBpdGVyYXRvciBvZiBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBvYmplY3RzLCBuZXZlciBudWxsLgotCSAqLwotCXB1YmxpYyBJdGVyYXRvciBnZXRXZWJTZXJ2aWNlQ2xpZW50c0J5Q2F0ZWdvcnkgKCBXZWJTZXJ2aWNlQ2F0ZWdvcnkgY2F0ZWdvcnksIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApCi0JewotCQlyZXR1cm4gZ2V0V2ViU2VydmljZUNsaWVudHNCeUNhdGVnb3J5SWQoY2F0ZWdvcnkgPT0gbnVsbCA/IG51bGwgOiBjYXRlZ29yeS5nZXRJZCgpLG1vbml0b3IpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgYW4gaXRlcmF0b3Igb2YgV2ViU2VydmljZUNsaWVudEluZm8gb2JqZWN0cyB3aGljaCByZXByZXNlbnQgd2ViIHNlcnZpY2UgY2xpZW50cyBmb3VuZCBieSBsb2NhdG9ycyB0aGF0Ci0JICogaGF2ZSByZWdpc3RlcmVkIHVzaW5nIHRoZSBvcmcuZWNsaXBzZS53c3Qud3MubG9jYXRvciBleHRlbnNpb24gcG9pbnQgdW5kZXIgdGhlIGdpdmVuIGNhdGVnb3J5LgotCSAqIFRoZSBzZWFyY2ggaXMgY29uc3RyYWluZWQgdG8gdGhlIGdpdmVuIHNldCBvZiBvbmUgb3IgbW9yZSBwcm9qZWN0cy4KLQkgKiBMb2NhdG9ycyBtdXN0IGV4dGVuZCB7QGxpbmsgQWJzdHJhY3RXZWJTZXJ2aWNlTG9jYXRvcn0uIAotCSAqIENhbGxlcnMgY2FuIHVzZSB0aGUgZ2V0dGVyIG1ldGhvZHMgb24gdGhlIFdlYlNlcnZpY2VDbGllbnRJbmZvIG9iamVjdCB0byByZXRyaWV2ZSBpbmZvcm1hdGlvbiBvbiB0aGUgCi0JICogd2ViIHNlcnZpY2UgY2xpZW50cyBmb3VuZC4gIFRoZSBXZWJTZXJ2aWNlRmluZGVyIGNhbm5vdCBndWFyYW50ZWUgdGhlIGxldmVsIG9mIGRldGFpbCBjb250YWluZWQgaW4gV2ViU2VydmljZUNsaWVudEluZm8KLQkgKiBvYmplY3RzIHJldHVybmVkLiAgVGhpcyBpcyBsZWZ0IHRvIHRoZSBsb2NhdG9yIGltcGxlbWVudGF0aW9ucy4KLQkgKiBAcGFyYW0gY2F0ZWdvcnkgVGhlIGNhdGVnb3J5IG9mIGxvY2F0b3JzIHRvIHVzZS4KLQkgKiBAcGFyYW0gbW9uaXRvciBBIHByb2dyZXNzIG1vbml0b3IsIG9yIG51bGwgaWYgcHJvZ3Jlc3MgbW9uaXRvcmluZyBpcyBub3QgZGVzaXJlZC4KLQkgKiBAcmV0dXJuIEFuIGl0ZXJhdG9yIG9mIFdlYlNlcnZpY2VDbGllbnRJbmZvIG9iamVjdHMsIG5ldmVyIG51bGwuCi0JICovCi0JcHVibGljIEl0ZXJhdG9yIGdldFdlYlNlcnZpY2VDbGllbnRzQnlDYXRlZ29yeSAoIFdlYlNlcnZpY2VDYXRlZ29yeSBjYXRlZ29yeSwgSVByb2plY3RbXSBwcm9qZWN0cywgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkKLQl7Ci0JCXJldHVybiBnZXRXZWJTZXJ2aWNlQ2xpZW50c0J5Q2F0ZWdvcnlJZChjYXRlZ29yeSA9PSBudWxsID8gbnVsbCA6IGNhdGVnb3J5LmdldElkKCkscHJvamVjdHMsbW9uaXRvcik7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyBhbiBpdGVyYXRvciBvZiBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBvYmplY3RzIHdoaWNoIHJlcHJlc2VudCB3ZWIgc2VydmljZSBjbGllbnRzIGZvdW5kIGJ5IGxvY2F0b3JzIHRoYXQKLQkgKiBoYXZlIHJlZ2lzdGVyZWQgdXNpbmcgdGhlIG9yZy5lY2xpcHNlLndzdC53cy5sb2NhdG9yIGV4dGVuc2lvbiBwb2ludCB1bmRlciB0aGUgZ2l2ZW4gY2F0ZWdvcnkuCi0JICogTG9jYXRvcnMgbXVzdCBleHRlbmQge0BsaW5rIEFic3RyYWN0V2ViU2VydmljZUxvY2F0b3J9LgotCSAqIENhbGxlcnMgY2FuIHVzZSB0aGUgZ2V0dGVyIG1ldGhvZHMgb24gdGhlIFdlYlNlcnZpY2VDbGllbnRJbmZvIG9iamVjdCB0byByZXRyaWV2ZSBpbmZvcm1hdGlvbiBvbiB0aGUgCi0JICogd2ViIHNlcnZpY2UgY2xpZW50cyBmb3VuZC4gIFRoZSBXZWJTZXJ2aWNlRmluZGVyIGNhbm5vdCBndWFyYW50ZWUgdGhlIGxldmVsIG9mIGRldGFpbCBjb250YWluZWQgaW4gV2ViU2VydmljZUNsaWVudEluZm8KLQkgKiBvYmplY3RzIHJldHVybmVkLiAgVGhpcyBpcyBsZWZ0IHRvIHRoZSBsb2NhdG9yIGltcGxlbWVudGF0aW9ucy4KLQkgKiBAcGFyYW0gY2F0ZWdvcnlJZCBUaGUgY2F0ZWdvcnkgb2YgbG9jYXRvcnMgdG8gdXNlLgotCSAqIEBwYXJhbSBtb25pdG9yIEEgcHJvZ3Jlc3MgbW9uaXRvciwgb3IgbnVsbCBpZiBwcm9ncmVzcyBtb25pdG9yaW5nIGlzIG5vdCBkZXNpcmVkLgotCSAqIEByZXR1cm4gQW4gaXRlcmF0b3Igb2YgV2ViU2VydmljZUNsaWVudEluZm8gb2JqZWN0cywgbmV2ZXIgbnVsbC4KLQkgKi8KLQlwdWJsaWMgSXRlcmF0b3IgZ2V0V2ViU2VydmljZUNsaWVudHNCeUNhdGVnb3J5SWQgKCBTdHJpbmcgY2F0ZWdvcnlJZCwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkKLQl7Ci0JCXJldHVybiBnZXRXZWJTZXJ2aWNlQ2xpZW50c0J5Q2F0ZWdvcnlJZChjYXRlZ29yeUlkLG51bGwsbW9uaXRvcik7Ci0JfSAKLQotCS8qKgotCSAqIFJldHVybnMgYW4gaXRlcmF0b3Igb2YgV2ViU2VydmljZUNsaWVudEluZm8gb2JqZWN0cyB3aGljaCByZXByZXNlbnQgd2ViIHNlcnZpY2UgY2xpZW50cyBmb3VuZCBieSBsb2NhdG9ycyB0aGF0Ci0JICogaGF2ZSByZWdpc3RlcmVkIHVzaW5nIHRoZSBvcmcuZWNsaXBzZS53c3Qud3MubG9jYXRvciBleHRlbnNpb24gcG9pbnQgdW5kZXIgdGhlIGdpdmVuIGNhdGVnb3J5LgotCSAqIFRoZSBzZWFyY2ggaXMgY29uc3RyYWluZWQgdG8gdGhlIGdpdmVuIHNldCBvZiBvbmUgb3IgbW9yZSBwcm9qZWN0cy4KLQkgKiBMb2NhdG9ycyBtdXN0IGV4dGVuZCB7QGxpbmsgQWJzdHJhY3RXZWJTZXJ2aWNlTG9jYXRvcn0uCi0JICogQ2FsbGVycyBjYW4gdXNlIHRoZSBnZXR0ZXIgbWV0aG9kcyBvbiB0aGUgV2ViU2VydmljZUNsaWVudEluZm8gb2JqZWN0IHRvIHJldHJpZXZlIGluZm9ybWF0aW9uIG9uIHRoZSAKLQkgKiB3ZWIgc2VydmljZSBjbGllbnRzIGZvdW5kLiAgVGhlIFdlYlNlcnZpY2VGaW5kZXIgY2Fubm90IGd1YXJhbnRlZSB0aGUgbGV2ZWwgb2YgZGV0YWlsIGNvbnRhaW5lZCBpbiBXZWJTZXJ2aWNlQ2xpZW50SW5mbwotCSAqIG9iamVjdHMgcmV0dXJuZWQuICBUaGlzIGlzIGxlZnQgdG8gdGhlIGxvY2F0b3IgaW1wbGVtZW50YXRpb25zLgotCSAqIEBwYXJhbSBjYXRlZ29yeUlkIFRoZSBjYXRlZ29yeSBvZiBsb2NhdG9ycyB0byB1c2UuCi0JICogQHBhcmFtIG1vbml0b3IgQSBwcm9ncmVzcyBtb25pdG9yLCBvciBudWxsIGlmIHByb2dyZXNzIG1vbml0b3JpbmcgaXMgbm90IGRlc2lyZWQuCi0JICogQHJldHVybiBBbiBpdGVyYXRvciBvZiBXZWJTZXJ2aWNlQ2xpZW50SW5mbyBvYmplY3RzLCBuZXZlciBudWxsLgotCSAqLwotCXB1YmxpYyBJdGVyYXRvciBnZXRXZWJTZXJ2aWNlQ2xpZW50c0J5Q2F0ZWdvcnlJZCAoIFN0cmluZyBjYXRlZ29yeUlkLCBJUHJvamVjdFtdIHByb2plY3RzLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKQotCXsKLQkJTGlua2VkTGlzdCB3ZWJTZXJ2aWNlQ2xpZW50cyA9IG5ldyBMaW5rZWRMaXN0KCk7Ci0JCVdlYlNlcnZpY2VMb2NhdG9yUmVnaXN0cnkgd3NsciA9IFdlYlNlcnZpY2VMb2NhdG9yUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKTsKLQkJSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gcmVnRWxlbWVudHMgPSB3c2xyLmdldENvbmZpZ0VsZW1lbnRzKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgcmVnRWxlbWVudHMubGVuZ3RoOyBpKyspCi0JCXsKLQkJCWlmIChFTEVNRU5UX0xPQ0FUT1IuZXF1YWxzKHJlZ0VsZW1lbnRzW2ldLmdldE5hbWUoKSkpCi0JCQl7Ci0JCQkJdHJ5Ci0JCQkJewotCQkJCQlpZiAoY2F0ZWdvcnlJZCA9PSBudWxsIHx8IGNhdGVnb3J5SWQuZXF1YWxzKHJlZ0VsZW1lbnRzW2ldLmdldEF0dHJpYnV0ZUFzSXMoQVRUUklCVVRFX0NBVEVHT1JZKSkpCi0JCQkJCXsKLQkJCQkJCU9iamVjdCBvYmogPSByZWdFbGVtZW50c1tpXS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKEFUVFJJQlVURV9DTEFTUyk7Ci0JCQkJCQlpZiAob2JqIGluc3RhbmNlb2YgSVdlYlNlcnZpY2VMb2NhdG9yKQotCQkJCQkJewotCQkJCQkJCUlXZWJTZXJ2aWNlTG9jYXRvciB3c2wgPSAoSVdlYlNlcnZpY2VMb2NhdG9yKW9iajsKLQkJCQkJCQlMaXN0IHdzTGlzdCA9IHByb2plY3RzID09IG51bGwgPyB3c2wuZ2V0V2ViU2VydmljZUNsaWVudHMobW9uaXRvcikgOiB3c2wuZ2V0V2ViU2VydmljZUNsaWVudHMocHJvamVjdHMsbW9uaXRvcik7Ci0JCQkJCQkJaWYgKHdzTGlzdCAhPSBudWxsKQotCQkJCQkJCXsKLQkJCQkJCQkJd2ViU2VydmljZUNsaWVudHMuYWRkQWxsKHdzTGlzdCk7Ci0JCQkJCQkJfQotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfSAKLQkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleCkKLQkJCQl7Ci0JCQkJCS8vIFF1aWV0bHkgYnlwYXNzIGFueSBJV2ViU2VydmljZUxvY2F0b3JzIHRoYXQgZmFpbGVkIHRvIGJlIGxvYWRlZC4KLQkJCQl9Ci0JCQl9Ci0JCX0gCi0JCXJldHVybiB3ZWJTZXJ2aWNlQ2xpZW50cy5pdGVyYXRvcigpOwkKLQl9IAotCi0JLyoqCi0JICogUmV0dXJucyBhbiBhcnJheSBvZiByZWdpc3RlcmVkIFdlYiBTZXJ2aWNlIENhdGVnb3J5IElEcy4KLQkgKiBAcmV0dXJuIEFuIGFycmF5LCBuZXZlciBudWxsIGJ1dCBwb3NzaWJseSBlbXB0eSwKLQkgKiBvZiByZWdpc3RlcmVkIFdlYiBTZXJ2aWNlIENhdGVnb3J5IGRlc2NyaXB0b3JzLgotCSAqLwotCXB1YmxpYyBXZWJTZXJ2aWNlQ2F0ZWdvcnlbXSBnZXRXZWJTZXJ2aWNlQ2F0ZWdvcmllcyAoKQotCXsKLQkJTGlua2VkTGlzdCBjYXRlZ29yaWVzID0gbmV3IExpbmtlZExpc3QoKTsKLQkJV2ViU2VydmljZUxvY2F0b3JSZWdpc3RyeSB3c2xyID0gV2ViU2VydmljZUxvY2F0b3JSZWdpc3RyeS5nZXRJbnN0YW5jZSgpOwotCQlJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSByZWdFbGVtZW50cyA9IHdzbHIuZ2V0Q29uZmlnRWxlbWVudHMoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCByZWdFbGVtZW50cy5sZW5ndGg7IGkrKykKLQkJewotCQkJaWYgKEVMRU1FTlRfQ0FURUdPUlkuZXF1YWxzKHJlZ0VsZW1lbnRzW2ldLmdldE5hbWUoKSkpCi0JCQl7Ci0JCQkJY2F0ZWdvcmllcy5hZGQobmV3IFdlYlNlcnZpY2VDYXRlZ29yeShyZWdFbGVtZW50c1tpXSkpOwotCQkJfQotCQl9Ci0JCXJldHVybiAoV2ViU2VydmljZUNhdGVnb3J5W10pY2F0ZWdvcmllcy50b0FycmF5KG5ldyBXZWJTZXJ2aWNlQ2F0ZWdvcnlbMF0pOwotCi0JfQkKLQotCS8qKgotCSAqIFJldHVybnMgYW4gYXJyYXkgb2YgcmVnaXN0ZXJlZCBXZWIgU2VydmljZSBDYXRlZ29yeSBJRHMuCi0JICogQHJldHVybiBBbiBhcnJheSwgbmV2ZXIgbnVsbCBidXQgcG9zc2libHkgZW1wdHksCi0JICogb2YgcmVnaXN0ZXJlZCBXZWIgU2VydmljZSBDYXRlZ29yeSBJRHMuCi0JICovCi0JcHVibGljIFN0cmluZ1tdIGdldFdlYlNlcnZpY2VDYXRlZ29yeUlkcyAoKQotCXsKLQkJTGlua2VkTGlzdCBjYXRlZ29yaWVzID0gbmV3IExpbmtlZExpc3QoKTsKLQkJV2ViU2VydmljZUxvY2F0b3JSZWdpc3RyeSB3c2xyID0gV2ViU2VydmljZUxvY2F0b3JSZWdpc3RyeS5nZXRJbnN0YW5jZSgpOwotCQlJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSByZWdFbGVtZW50cyA9IHdzbHIuZ2V0Q29uZmlnRWxlbWVudHMoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCByZWdFbGVtZW50cy5sZW5ndGg7IGkrKykKLQkJewotCQkJaWYgKEVMRU1FTlRfQ0FURUdPUlkuZXF1YWxzKHJlZ0VsZW1lbnRzW2ldLmdldE5hbWUoKSkpCi0JCQl7Ci0JCQkJU3RyaW5nIGlkID0gcmVnRWxlbWVudHNbaV0uZ2V0QXR0cmlidXRlQXNJcyhBVFRSSUJVVEVfSUQpOwotCQkJCWlmIChpZCAhPSBudWxsKQotCQkJCXsKLQkJCQkJY2F0ZWdvcmllcy5hZGQoaWQpOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gKFN0cmluZ1tdKWNhdGVnb3JpZXMudG9BcnJheShuZXcgU3RyaW5nWzBdKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgV2ViU2VydmljZUNhdGVnb3J5IHdpdGggdGhlIGdpdmVuIElELAotCSAqIG9yIG51bGwgaWYgdGhlcmUgaXMgbm9uZS4KLQkgKiBAcGFyYW0gY2F0ZWdvcnlJZCBUaGUgSUQgb2YgdGhlIGNhdGVnb3J5IHRvIGZpbmQuCi0JICogQHJldHVybiBUaGUgbWF0Y2hpbmcgY2F0ZWdvcnkgZGVzY3JpcHRvciwgb3IgbnVsbCBpZiB0aGVyZSBpcyBub25lLgotCSAqLwotCXB1YmxpYyBXZWJTZXJ2aWNlQ2F0ZWdvcnkgZ2V0V2ViU2VydmljZUNhdGVnb3J5QnlJZCAoIFN0cmluZyBjYXRlZ29yeUlkICkKLQl7Ci0JCVdlYlNlcnZpY2VDYXRlZ29yeSBjYXRlZ29yeSA9IG51bGw7Ci0JCWlmIChjYXRlZ29yeUlkICE9IG51bGwpCi0JCXsKLQkJCVdlYlNlcnZpY2VMb2NhdG9yUmVnaXN0cnkgd3NsciA9IFdlYlNlcnZpY2VMb2NhdG9yUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKTsKLQkJCUlDb25maWd1cmF0aW9uRWxlbWVudFtdIHJlZ0VsZW1lbnRzID0gd3Nsci5nZXRDb25maWdFbGVtZW50cygpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCByZWdFbGVtZW50cy5sZW5ndGg7IGkrKykKLQkJCXsKLQkJCQlpZiAoRUxFTUVOVF9DQVRFR09SWS5lcXVhbHMocmVnRWxlbWVudHNbaV0uZ2V0TmFtZSgpKSkKLQkJCQl7Ci0JCQkJCVN0cmluZyBpZCA9IHJlZ0VsZW1lbnRzW2ldLmdldEF0dHJpYnV0ZUFzSXMoQVRUUklCVVRFX0lEKTsKLQkJCQkJaWYgKGNhdGVnb3J5SWQuZXF1YWxzKGlkKSkKLQkJCQkJewotCQkJCQkJcmV0dXJuIG5ldyBXZWJTZXJ2aWNlQ2F0ZWdvcnkocmVnRWxlbWVudHNbaV0pOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBjYXRlZ29yeTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzZmluZGVyL1dlYlNlcnZpY2VMb2NhdG9yRXh0ZW5zaW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzZmluZGVyL1dlYlNlcnZpY2VMb2NhdG9yRXh0ZW5zaW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1NDJiMDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c2ZpbmRlci9XZWJTZXJ2aWNlTG9jYXRvckV4dGVuc2lvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c2ZpbmRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4dC5XZWJTZXJ2aWNlRXh0ZW5zaW9uSW1wbDsKLQotLyoqCi0gKiBAYXV0aG9yIGpvYW4KLSAqIAotICogVGhpcyBjbGFzcyBpcyBwcm92aWRlZCBmb3IgdGhlIGFkZGl0aW9uIG9mIGxvY2F0b3IgZXh0ZW5zaW9uIHNwZWNpZmljIGZ1bmN0aW9ucwotICogCi0gKi8KLQotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VMb2NhdG9yRXh0ZW5zaW9uIGV4dGVuZHMgV2ViU2VydmljZUV4dGVuc2lvbkltcGwgewotCQotLy8JIENvcHlyaWdodAotCSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIihjKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDAsIDIwMDIuIjsKLQkKLQkgcHVibGljIFdlYlNlcnZpY2VMb2NhdG9yRXh0ZW5zaW9uKElDb25maWd1cmF0aW9uRWxlbWVudCBjb25maWdFbGVtZW50KQotCSAgewotCSAgICBzdXBlcihjb25maWdFbGVtZW50KTsKLQkgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NmaW5kZXIvV2ViU2VydmljZUxvY2F0b3JSZWdpc3RyeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c2ZpbmRlci9XZWJTZXJ2aWNlTG9jYXRvclJlZ2lzdHJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzZDZiZmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c2ZpbmRlci9XZWJTZXJ2aWNlTG9jYXRvclJlZ2lzdHJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzZmluZGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXh0LldlYlNlcnZpY2VFeHRlbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4dC5XZWJTZXJ2aWNlRXh0ZW5zaW9uUmVnaXN0cnlJbXBsOwotCi0vKioKLSAqIEBhdXRob3Igam9hbgotICoKLSAqIFJldHJpZXZlcyBsb2NhdG9ycyB3aGljaCBleHRlbmQge0BsaW5rIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c2ZpbmRlci5BYnN0cmFjdFdlYlNlcnZpY2VMb2NhdG9yfS4KLSAqIExvY2F0b3JzIG11c3QgY3JlYXRlIGFuIGV4dGVuc2lvbiBmb3IgdGhlIG9yZy5lY2xpcHNlLndzdC53cy5sb2NhdG9yIGV4dGVuc2lvbiBwb2ludCBpbiBvcmRlciB0byBiZSByZXRyaWV2ZWQgYnkKLSAqIHRoZSByZWdpc3RyeS4KLSAqLwotCi0KLXB1YmxpYyBjbGFzcyBXZWJTZXJ2aWNlTG9jYXRvclJlZ2lzdHJ5IGV4dGVuZHMgV2ViU2VydmljZUV4dGVuc2lvblJlZ2lzdHJ5SW1wbCB7Ci0KLQkgLy8gQ29weXJpZ2h0Ci0JICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCSAgLyoKLQkgICAqIFRoaXMgaXMgYSBzaW5nbGV0b24gYmVjYXN1ZSBpdCB3YXMgZGVjaWRlZCB0aGF0IHRoZSBtZW1vcnkgZm9vdCBwcmludCAKLQkgICAqIGlzIG5vdCBhcyBleHBlbnNpdmUgYXMgdGhlIHRpbWUgdGFrZW4gcmV0cmlldmluZyB0aGUgZGF0YQotCSAgICogCi0JICAgKi8KLQkgIAotCSAgCi0JICBwcml2YXRlIHN0YXRpYyBXZWJTZXJ2aWNlTG9jYXRvclJlZ2lzdHJ5IHdzbHI7Ci0JICAKLQkgIHB1YmxpYyBzdGF0aWMgV2ViU2VydmljZUxvY2F0b3JSZWdpc3RyeSBnZXRJbnN0YW5jZSgpCi0JICB7Ci0JICAJaWYod3NsciA9PSBudWxsKSB3c2xyID0gbmV3IFdlYlNlcnZpY2VMb2NhdG9yUmVnaXN0cnkoKTsKLQkgICAgcmV0dXJuIHdzbHI7Ci0JICB9Ci0JICAKLQkgIHByaXZhdGUgV2ViU2VydmljZUxvY2F0b3JSZWdpc3RyeSgpCi0JICB7Ci0JICAgIHN1cGVyKCk7Ci0JICB9Ci0JICAKLQkgIC8qKgotCSAgKiBDaGlsZHJlbiByZWdpc3RyaWVzIHdpbGwgaGF2ZSBkaWZmZXJlbnQgZXh0ZW5zaW9uIHR5cGVzIAotCSAgKiBAcmV0dXJuIFdlYnNlcnZpY2VFeHRlbnNpb24gaG9sZHMgYSBjb25maWcgZWxlbQotCSAgKiBmb3IgdGhhdCBleHRlbnNpb24gY2FwYWJsZSBvZiBjcmVhdGluZyBhbiBleGVjdXRhYmxlIGZpbGUKLQkgICovCi0JICBwdWJsaWMgV2ViU2VydmljZUV4dGVuc2lvbiBjcmVhdGVXZWJTZXJ2aWNlRXh0ZW5zaW9uKElDb25maWd1cmF0aW9uRWxlbWVudCBjb25maWdFbGVtZW50KQotCSAgewotCSAgICByZXR1cm4gbmV3IFdlYlNlcnZpY2VMb2NhdG9yRXh0ZW5zaW9uKGNvbmZpZ0VsZW1lbnQpOwotCSAgfQotCi0JICAvKioKLQkgICogQ29udGFjdHMgcGxhdGZvcm0gcmVnaXN0cnkgYW5kIGdldHMgYWxsIGxvY2F0b3JzIHdoaWNoIGhhdmUgcmVnaXN0ZXJlZCAKLQkgICogIHVzaW5nIHRoZSBvcmcuZWNsaXBzZS53c3Qud3MubG9jYXRvciBleHRlbnNpb24gcG9pbnQuCi0JICAqIEByZXR1cm4gSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gYW4gYXJyYXkgb2YgZWxlbWVudHMgd2hpY2ggY29udGFpbiBsb2NhdG9ycyAKLQkgICogZXh0ZW5kaW5nIEFic3RyYWN0V2ViU2VydmljZUxvY2F0b3IuCi0JICAqLwotCSAgcHVibGljIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGdldENvbmZpZ0VsZW1lbnRzKCkKLQkgIHsKLQkgICAgSUV4dGVuc2lvblJlZ2lzdHJ5IHJlZyA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0JICAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGNvbmZpZyA9IHJlZy5nZXRDb25maWd1cmF0aW9uRWxlbWVudHNGb3IoCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcmcuZWNsaXBzZS53c3Qud3MiLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibG9jYXRvciIpOwotCSAgICByZXR1cm4gY29uZmlnOyAgICAKLQkgIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c2ZpbmRlci9Xb3Jrc3BhY2VXU0RMTG9jYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c2ZpbmRlci9Xb3Jrc3BhY2VXU0RMTG9jYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDMwZGQ4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NmaW5kZXIvV29ya3NwYWNlV1NETExvY2F0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMzE3ICAgMTI3NDU2IGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5Ci0gKiAyMDA2MDYyMCAgIDE0Nzg2MiBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzZmluZGVyOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlSW5mbzsKLQotLyoqCi0gKiBFeHRlbmRzIHRoZSBXZWIgU2VydmljZXMgRmluZGVyIEZyYW1ld29yay4KLSAqIEZpbmRzIGFsbCAud3NkbCBmaWxlcyBpbiB0aGUgd29ya3NwYWNlLgotICogTm90IGludGVuZGVkIHRvIGJlIHVzZWQgZGlyZWN0bHkuICBXb3Jrc3BhY2VXU0RMTG9jYXRvciByZWdpc3RlcnMgd2l0aCBXZWJTZXJ2aWNlTG9jYXRvclJlZ2lzdHJ5IAotICogYW5kIGlzIGFjY2Vzc2VkIGJ5IHRoZSB7QGxpbmsgV2ViU2VydmljZUZpbmRlcn0uIAotICovCi0KLXB1YmxpYyBjbGFzcyBXb3Jrc3BhY2VXU0RMTG9jYXRvciBleHRlbmRzIEFic3RyYWN0V2ViU2VydmljZUxvY2F0b3IKLXsKLQotCXByb3RlY3RlZCBMaXN0IHdzZGxTZXJ2aWNlcyA9IG51bGw7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBMQVRGT1JNX1JFUyA9ICJwbGF0Zm9ybTovcmVzb3VyY2UiOyAgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBXU0RMX0VYVCA9ICJ3c2RsIjsgIC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBXb3Jrc3BhY2VXU0RMTG9jYXRvcigpCi0JewotCQlzdXBlcigpOwkKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIGFsbCAud3NkbCBmaWxlcyBpbiB0aGUgd29ya3NwYWNlLiAgQ3VycmVudGx5IGRvZXMgbm90IGVsaW1pbmF0ZSBtdWx0aXBsZSAKLQkgKiBvY2N1cmVuY2VzIG9mIHRoZSBzYW1lIHdlYiBzZXJ2aWNlLiAKLQkgKiAKLQkgKiBUT0RPOiBhZGQgYSBsaXN0ZW5lciB0byB0aGUgd29ya3NwYWNlIHJlc291cmNlIHRyZWUgc28gdGhhdCBnZXRXZWJTZXJ2aWNlcyBkb2Vzbid0IGFsd2F5cwotCSAqIHVzZSB0aGUgV1NETFZpc2l0b3IgdG8gd2FsayB0aGUgZW50aXJlIHJlc291cmNlIHRyZWUuICBUaGF0IHNob3VsZCBvbmx5IGhhcHBlbiBvbmNlLiAgQWZ0ZXIKLQkgKiB0aGF0IHRoZSByZXNvdXJjZSB0cmVlIGNhbiBiZSBtb25pdG9yZWQgZm9yIG1vZGlmaWNhdGlvbnMgdG8gLndzZGwgZmlsZXMgYW5kIGNoYW5nZXMgbWFkZSB0byBhIGNhY2hlLiAKLQkgKiAKLQkgKiBAcGFyYW0gbW9uaXRvciBBIHByb2dyZXNzIG1vbml0b3IsIG9yIG51bGwgaWYgcHJvZ3Jlc3MgbW9uaXRvcmluZyBpcyBub3QgZGVzaXJlZC4KLQkgKiBAcmV0dXJuIGxpc3Qgb2YgV2ViU2VydmljZUluZm8gb2JqZWN0cywgcG9zc2libHkgbnVsbC4KLQkgKi8KLQlwdWJsaWMgTGlzdCBnZXRXZWJTZXJ2aWNlcyAoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKQotCXsJCi0JCWlmICh3c2RsU2VydmljZXMgPT0gbnVsbCkKLQkJewotCQkJdHJ5Ci0JCQl7Ci0JCQkJSVdvcmtzcGFjZVJvb3Qgcm9vdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7Ci0JCQkJV1NETFZpc2l0b3IgdmlzaXRvciA9IG5ldyBXU0RMVmlzaXRvcigpOwotCQkJCXJvb3QuYWNjZXB0KHZpc2l0b3IpOwkJCi0JCQkJd3NkbFNlcnZpY2VzID0gdmlzaXRvci5nZXRXU0RMKCk7Ci0JCQl9Ci0JCQljYXRjaCAoRXhjZXB0aW9uIGV4KQotCQkJewotCQkJCS8vIERvIG5vdGhpbmcuCi0JCQl9Ci0JCX0KLQkJcmV0dXJuIHdzZGxTZXJ2aWNlczsJCQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGNvbGxlY3Rpb24gb2YgYWxsIC53c2RsIGZpbGVzIGluIHRoZSBnaXZlbiBwcm9qZWN0LgotCSAqIEN1cnJlbnRseSBkb2VzIG5vdCBlbGltaW5hdGUgbXVsdGlwbGUgb2NjdXJlbmNlcyBvZiB0aGUgc2FtZSB3ZWIgc2VydmljZS4gCi0JICogCi0JICogVE9ETzogYWRkIGEgbGlzdGVuZXIgdG8gdGhlIHdvcmtzcGFjZSByZXNvdXJjZSB0cmVlIHNvIHRoYXQgZ2V0V2ViU2VydmljZXMgZG9lc24ndCBhbHdheXMKLQkgKiB1c2UgdGhlIFdTRExWaXNpdG9yIHRvIHdhbGsgdGhlIGVudGlyZSByZXNvdXJjZSB0cmVlLiAgVGhhdCBzaG91bGQgb25seSBoYXBwZW4gb25jZS4gIEFmdGVyCi0JICogdGhhdCB0aGUgcmVzb3VyY2UgdHJlZSBjYW4gYmUgbW9uaXRvcmVkIGZvciBtb2RpZmljYXRpb25zIHRvIC53c2RsIGZpbGVzIGFuZCBjaGFuZ2VzIG1hZGUgdG8gYSBjYWNoZS4gCi0JICogCi0JICogQHBhcmFtIG1vbml0b3IgQSBwcm9ncmVzcyBtb25pdG9yLCBvciBudWxsIGlmIHByb2dyZXNzIG1vbml0b3JpbmcgaXMgbm90IGRlc2lyZWQuCi0JICogQHJldHVybiBsaXN0IG9mIFdlYlNlcnZpY2VJbmZvIG9iamVjdHMKLQkgKi8KLQlwdWJsaWMgTGlzdCBnZXRXZWJTZXJ2aWNlcyAoSVByb2plY3RbXSBwcm9qZWN0cywgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKQotCXsKLQkJV1NETFZpc2l0b3IgdmlzaXRvciA9IG5ldyBXU0RMVmlzaXRvcigpOwotCQlpZiAocHJvamVjdHMgIT0gbnVsbCkKLQkJewotCQkJZm9yIChpbnQgcD0wOyBwPHByb2plY3RzLmxlbmd0aDsgcCsrKQotCQkJewotCQkJCXRyeQotCQkJCXsKLQkJCQkJcHJvamVjdHNbcF0uYWNjZXB0KHZpc2l0b3IpOwotCQkJCX0KLQkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleCkKLQkJCQl7Ci0JCQkJCS8vIERvIG5vdGhpbmcuCi0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiB2aXNpdG9yLmdldFdTREwoKTsKLQl9Ci0KLQkvKioKLQkgKiAgVXNlcyB0aGUgVmlzaXRvciBwYXR0ZXJuIHRvIHdhbGsgdGhlIHdvcmtzcGFjZSByZXNvdXJjZSB0cmVlCi0JICovCi0JcHJpdmF0ZSBjbGFzcyBXU0RMVmlzaXRvciBpbXBsZW1lbnRzIElSZXNvdXJjZVZpc2l0b3IKLQl7Ci0KLQkJcHJpdmF0ZSBWZWN0b3Igd3NkbCA9IG5ldyBWZWN0b3IoKTsKLQotCQkvKioKLQkJICogdmlzaXRzIGV2ZXJ5IG5vZGUgb24gdGhlIHJlc291cmNlIHRyZWUgc3RvcHBpbmcgYSBmaWxlIHJlc291cmNlcwotCQkgKiBpZiBmaWxlIHJlc291cmNlIGhhcyBleHRlbnNpb24gLndzZGwgYSBXZWJTZXJ2aWNlSW5mbyBvYmplY3QgaXMgY3JlYXRlZCBhbmQgYWRkZWQgdG8gYSB2ZWN0b3IgCi0JCSAqICBUT0RPOiBsb29rIGF0IGNhY2hpbmcgdG8gZWxpbWluYXRlIGR1cGxpY2F0ZSB3ZWIgc2VydmljZSBkZWZpbml0aW9ucyBpbiB0aGUgdmVjdG9yIHJldHVybmVkCi0JCSAqICBUT0RPOiBhZGQgbW9yZSBpbmZvcm1hdGlvbiB0byB0aGUgV2ViU2VydmljZUluZm8gb2JqZWN0LiAgQ3VycmVudGx5IG9ubHkgdGhlIHF1YWxpZmllZCBmaWxlbmFtZSBpcyBhZGRlZC4KLQkJICovCi0JCXB1YmxpYyBib29sZWFuIHZpc2l0KElSZXNvdXJjZSByZXNvdXJjZSkKLQkJewotCQkJaWYgKHJlc291cmNlLmdldFR5cGUoKSA9PSBJUmVzb3VyY2UuRklMRSkKLQkJCXsgICAgICAgIAotCQkJCVN0cmluZyBleHQgPSByZXNvdXJjZS5nZXRGaWxlRXh0ZW5zaW9uKCk7Ci0JCQkJaWYgKGV4dCAhPSBudWxsICYmIGV4dC5lcXVhbHNJZ25vcmVDYXNlKFdTRExfRVhUKSkKLQkJCQl7Ci0JCQkJCVN0cmluZyB1cmxTdHJpbmcgPSBQTEFURk9STV9SRVMgKyByZXNvdXJjZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCk7Ci0JCQkJCVdlYlNlcnZpY2VJbmZvIHdzSW5mbyA9IG5ldyBXZWJTZXJ2aWNlSW5mbygpOwotCQkJCQl3c0luZm8uc2V0V3NkbFVSTCh1cmxTdHJpbmcpOyAgICAgICAgICAgCi0JCQkJCXdzZGwuYWRkKHdzSW5mbyk7Ci0JCQkJfQotCQkJfQotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQotCQkvKioKLQkJICogUmV0dXJucyBhIHZlY3RvciBvZiBXZWJTZXJ2aWNlSW5mbyBvYmplY3RzLgotCQkgKiBAcmV0dXJuIHZlY3RvciBvZiBXZWJTZXJ2aWNlSW5mbyBvYmplY3RzCi0JCSAqLwotCQlwdWJsaWMgVmVjdG9yIGdldFdTREwoKQotCQl7Ci0JCQlyZXR1cm4gd3NkbDsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NpbC9BZGRXU0RMVG9XU0lMQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c2lsL0FkZFdTRExUb1dTSUxDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzMDhjYmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c2lsL0FkZFdTRExUb1dTSUxDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c2lsOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5PdXRwdXRLZXlzOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXI7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRmFjdG9yeTsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLmRvbS5ET01Tb3VyY2U7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5zdHJlYW0uU3RyZWFtUmVzdWx0OwotCi1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLkFic3RyYWN0OwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5EZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuSW5zcGVjdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuUU5hbWU7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLldTSUxEb2N1bWVudDsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuV1NJTEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuZXh0ZW5zaW9uLkV4dGVuc2lvbkJ1aWxkZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS53c2lsLmV4dGVuc2lvbi53c2RsLkltcGxlbWVudGVkQmluZGluZzsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuZXh0ZW5zaW9uLndzZGwuUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5hcGFjaGUud3NpbC5leHRlbnNpb24ud3NkbC5SZWZlcmVuY2VkU2VydmljZTsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwuZXh0ZW5zaW9uLndzZGwuV1NETENvbnN0YW50czsKLWltcG9ydCBvcmcuYXBhY2hlLndzaWwueG1sLlhNTFdyaXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LnVyaS5JVVJJRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LnVyaS5VUklFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLmRhdGFtb2RlbC5BYnN0cmFjdERhdGFNb2RlbE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuSWxsZWdhbEFyZ3VtZW50c0V4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV1NJTE1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGFyc2VyLndzaWwuV1dXQXV0aGVudGljYXRpb25IYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wYXJzZXIud3NpbC5XZWJTZXJ2aWNlc1BhcnNlcjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKLQotcHVibGljIGNsYXNzIEFkZFdTRExUb1dTSUxDb21tYW5kIGV4dGVuZHMgQWJzdHJhY3REYXRhTW9kZWxPcGVyYXRpb24KLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVJHX1dTSUwgPSAiLXdzaWwiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBUkdfV1NETCA9ICItd3NkbCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFSR19SRVNPTFZFX1dTREwgPSAiLXJlc29sdmV3c2RsIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVJHX0hUVFBfQkFTSUNfQVVUSF9VU0VSTkFNRSA9ICItaHR0cHVzZXJuYW1lIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVJHX0hUVFBfQkFTSUNfQVVUSF9QQVNTV09SRCA9ICItaHR0cHBhc3N3b3JkIjsKLSAgcHJpdmF0ZSBXV1dBdXRoZW50aWNhdGlvbkhhbmRsZXIgd3d3QXV0aEhhbmRsZXJfOwotICBwcml2YXRlIFN0cmluZ1tdIGFyZ3NfOwotICBwcml2YXRlIFN0cmluZyB3c2lsXzsKLSAgcHJpdmF0ZSBBcnJheUxpc3Qgd3NkbHNfOwotICBwcml2YXRlIGJvb2xlYW4gcmVzb2x2ZVdTRExfOwotICBwcml2YXRlIFN0cmluZyBodHRwVXNlcm5hbWVfOwotICBwcml2YXRlIFN0cmluZyBodHRwUGFzc3dvcmRfOwotCi0gIHB1YmxpYyBBZGRXU0RMVG9XU0lMQ29tbWFuZCgpCi0gIHsKLSAgICB3d3dBdXRoSGFuZGxlcl8gPSBudWxsOwotICAgIGFyZ3NfID0gbmV3IFN0cmluZ1swXTsKLSAgICBjbGVhclBhcnNlZEFyZ3MoKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBjbGVhclBhcnNlZEFyZ3MoKQotICB7Ci0gICAgd3NpbF8gPSBudWxsOwotICAgIGlmICh3c2Rsc18gPT0gbnVsbCkKLSAgICAgIHdzZGxzXyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBlbHNlCi0gICAgICB3c2Rsc18uY2xlYXIoKTsKLSAgICByZXNvbHZlV1NETF8gPSBmYWxzZTsKLSAgICBodHRwVXNlcm5hbWVfID0gbnVsbDsKLSAgICBodHRwUGFzc3dvcmRfID0gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBFeGVjdXRlcyB0aGUgQ29tbWFuZC4KLSAgICogCi0gICAqIEBwYXJhbSBlbnZpcm9ubWVudAotICAgKiAgICAgICAgICAgIFRoZSBlbnZpcm9ubWVudC4gTXVzdCBub3QgYmUgbnVsbC4KLSAgICogQHJldHVybiBBIDxjb2RlPlN0YXR1czwvY29kZT4gb2JqZWN0IGluZGljYXRpbmcgdGhlIGRlZ3JlZSB0byB3aGljaCB0aGUKLSAgICogICAgICAgICA8Y29kZT5leGVjdXRlPC9jb2RlPiBtZXRob2Qgd2FzIHN1Y2Nlc3NmdWwuIEEgdmFsdWQgb2YgPGNvZGU+bnVsbDwvY29kZT4sCi0gICAqICAgICAgICAgb3IgYSBTdGF0dXMgd2l0aCBhIHNldmVyaXR5IG9mIGxlc3MgdGhhbiA8Y29kZT5TdGF0dXMuRVJST1I8L2NvZGU+Ci0gICAqICAgICAgICAgc2lnbmlmaWVzIHN1Y2Nlc3MuCi0gICAqLwotICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgYWRhcHRhYmxlICkKLSAgewotICAgIElFbnZpcm9ubWVudCBlbnZpcm9ubWVudCA9IGdldEVudmlyb25tZW50KCk7Ci0gICAgCi0gICAgSVVSSUZhY3RvcnkgdXJpRmFjdG9yeSA9IGVudmlyb25tZW50LmdldFVSSUZhY3RvcnkoKTsKLSAgICAvLyBQYXJzZSBhcmd1bWVudHMKLSAgICB0cnkKLSAgICB7Ci0gICAgICBwYXJzZUFyZ3VtZW50cygpOwotICAgIH0KLSAgICBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50c0V4Y2VwdGlvbiBpYWUpCi0gICAgewotICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBXU0lMTWVzc2FnZXMuTVNHX0VSUk9SX0lMTEVHQUxfQVJHVU1FTlRTLCBpYWUpOwotICAgIH0KLSAgICBjYXRjaCAoQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmV0dXJuIFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBXU0lMTWVzc2FnZXMuTVNHX0VSUk9SX0lOVkFMSURfQVJHVU1FTlRTLCBlKTsKLSAgICB9Ci0gICAgLy8gQ3JlYXRlIG5ldyBXU0lMIGRvY3VtZW50Ci0gICAgV1NJTERvY3VtZW50IHdzaWxEb2N1bWVudCA9IG51bGw7Ci0gICAgVVJMIHdzaWxVUkwgPSBudWxsOwotICAgIHRyeQotICAgIHsKLSAgICAgIHdzaWxEb2N1bWVudCA9IFdTSUxEb2N1bWVudC5uZXdJbnN0YW5jZSgpOwotICAgICAgd3NpbFVSTCA9IG5ldyBVUkwod3NpbF8pOwotICAgIH0KLSAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIG11cmxlKQotICAgIHsKLSAgICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIFdTSUxNZXNzYWdlcy5NU0dfRVJST1JfSU5WQUxJRF9XU0lMX1VSSSwgbXVybGUpOwotICAgICAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0KLSAgICBjYXRjaCAoV1NJTEV4Y2VwdGlvbiB3c2lsZSkKLSAgICB7Ci0gICAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBXU0lMTWVzc2FnZXMuTVNHX0VSUk9SX1VORVhQRUNURURfRVhDRVBUSU9OLCB3c2lsZSk7Ci0gICAgICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQotICAgIC8vIFJlYWQgV1NJTAotICAgIHRyeQotICAgIHsKLSAgICAgIElucHV0U3RyZWFtIGlzID0gdXJpRmFjdG9yeS5uZXdVUkkod3NpbFVSTCkuZ2V0SW5wdXRTdHJlYW0oKTsKLSAgICAgIGlmIChpcyAhPSBudWxsKQotICAgICAgewotICAgICAgICB3c2lsRG9jdW1lbnQucmVhZChuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKLSAgICAgICAgaXMuY2xvc2UoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKFVSSUV4Y2VwdGlvbiB1cmllKQotICAgIHsKLSAgICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIFdTSUxNZXNzYWdlcy5NU0dfRVJST1JfVU5FWFBFQ1RFRF9FWENFUFRJT04sIHVyaWUpOwotICAgICAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0KLSAgICBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKQotICAgIHsKLSAgICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIFdTSUxNZXNzYWdlcy5NU0dfRVJST1JfVU5FWFBFQ1RFRF9FWENFUFRJT04sIGlvZSk7Ci0gICAgICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQotICAgIGNhdGNoIChXU0lMRXhjZXB0aW9uIHdzaWxlKQotICAgIHsKLSAgICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIFdTSUxNZXNzYWdlcy5NU0dfRVJST1JfVU5FWFBFQ1RFRF9FWENFUFRJT04sIHdzaWxlKTsKLSAgICAgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICB9Ci0gICAgLy8gaW50ZXJuYWxFeGVjdXRlCi0gICAgU3RyaW5nIGh0dHBVc2VybmFtZSA9IG51bGw7Ci0gICAgU3RyaW5nIGh0dHBQYXNzd29yZCA9IG51bGw7Ci0gICAgaWYgKHdzZGxzXy5zaXplKCkgPT0gMSAmJiBodHRwVXNlcm5hbWVfICE9IG51bGwgJiYgaHR0cFBhc3N3b3JkXyAhPSBudWxsKQotICAgIHsKLSAgICAgIGh0dHBVc2VybmFtZSA9IGh0dHBVc2VybmFtZV87Ci0gICAgICBodHRwUGFzc3dvcmQgPSBodHRwUGFzc3dvcmRfOwotICAgIH0KLSAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gd3NkbHNfLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgewotICAgICAgU3RyaW5nIHdzZGwgPSAoU3RyaW5nKSBpdC5uZXh0KCk7Ci0gICAgICBJU3RhdHVzIHN0YXR1cyA9IG51bGw7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgc3RhdHVzID0gaW50ZXJuYWxFeGVjdXRlKGVudmlyb25tZW50LCB3c2lsRG9jdW1lbnQsIHBsYXRmb3JtMkZpbGUodXJpRmFjdG9yeSwgd3NpbF8pLCB3c2RsLCBodHRwVXNlcm5hbWUsIGh0dHBQYXNzd29yZCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoV1dXQXV0aGVudGljYXRpb25FeGNlcHRpb24gd3d3YWUpCi0gICAgICB7Ci0gICAgICAgIGlmICh3d3dBdXRoSGFuZGxlcl8gIT0gbnVsbCAmJiBodHRwVXNlcm5hbWUgPT0gbnVsbCAmJiBodHRwUGFzc3dvcmQgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHd3d0F1dGhIYW5kbGVyXy5oYW5kbGVXV1dBdXRoZW50aWNhdGlvbih3d3dhZSk7Ci0gICAgICAgICAgU3RyaW5nIGhhbmRsZXJVc2VybmFtZSA9IHd3d0F1dGhIYW5kbGVyXy5nZXRVc2VybmFtZSgpOwotICAgICAgICAgIFN0cmluZyBoYW5kbGVyUGFzc3dvcmQgPSB3d3dBdXRoSGFuZGxlcl8uZ2V0UGFzc3dvcmQoKTsKLSAgICAgICAgICBpZiAoaGFuZGxlclVzZXJuYW1lICE9IG51bGwgJiYgaGFuZGxlclBhc3N3b3JkICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHN0YXR1cyA9IGludGVybmFsRXhlY3V0ZShlbnZpcm9ubWVudCwgd3NpbERvY3VtZW50LCBwbGF0Zm9ybTJGaWxlKHVyaUZhY3RvcnksIHdzaWxfKSwgd3NkbCwgaGFuZGxlclVzZXJuYW1lLCBoYW5kbGVyUGFzc3dvcmQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKFdXV0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uIHd3d2FlMikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSVN0YXR1cyB3d3dhZVN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBXU0lMTWVzc2FnZXMuTVNHX0VSUk9SX1VOUkVTT0xWQUJMRV9XU0RMLCB3d3dhZTIuZ2V0SU9FeGNlcHRpb24oKSk7Ci0gICAgICAgICAgICAgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcih3d3dhZVN0YXR1cyk7Ci0gICAgICAgICAgICAgIHJldHVybiB3d3dhZVN0YXR1czsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHN0YXR1cyA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgSVN0YXR1cyBzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIFdTSUxNZXNzYWdlcy5NU0dfRVJST1JfVU5SRVNPTFZBQkxFX1dTREwsIHd3d2FlLmdldElPRXhjZXB0aW9uKCkpOwotICAgICAgICAgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzKTsKLSAgICAgICAgICByZXR1cm4gczsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpICE9IFN0YXR1cy5PSykKLSAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICB9Ci0gICAgLy8gV3JpdGUgV1NJTAotICAgIHRyeQotICAgIHsKLSAgICAgIFhNTFdyaXRlciB4bWxXcml0ZXIgPSBuZXcgWE1MV3JpdGVyKCk7Ci0gICAgICBPdXRwdXRTdHJlYW0gb3MgPSB1cmlGYWN0b3J5Lm5ld1VSSSh3c2lsVVJMKS5nZXRPdXRwdXRTdHJlYW0oKTsKLSAgICAgIGlmIChvcyAhPSBudWxsKQotICAgICAgICB4bWxXcml0ZXIud3JpdGVEb2N1bWVudCh3c2lsRG9jdW1lbnQsIG9zKTsKLSAgICAgIGVsc2UKLSAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCk7Ci0gICAgICBvcy5jbG9zZSgpOwotICAgIH0KLSAgICBjYXRjaCAoVVJJRXhjZXB0aW9uIHVyaWUpCi0gICAgewotICAgICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggV1NJTE1lc3NhZ2VzLk1TR19FUlJPUl9XUklURV9XU0lMLCB1cmllKTsKLSAgICAgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkKLSAgICB7Ci0gICAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBXU0lMTWVzc2FnZXMuTVNHX0VSUk9SX1dSSVRFX1dTSUwsIGlvZSk7Ci0gICAgICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQotICAgIGNhdGNoIChXU0lMRXhjZXB0aW9uIHdzaWxlKQotICAgIHsKLSAgICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIFdTSUxNZXNzYWdlcy5NU0dfRVJST1JfV1JJVEVfV1NJTCwgd3NpbGUpOwotICAgICAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0KLSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotCi0gIHByaXZhdGUgSVN0YXR1cyBpbnRlcm5hbEV4ZWN1dGUoSUVudmlyb25tZW50IGVudmlyb25tZW50LCBXU0lMRG9jdW1lbnQgd3NpbERvY3VtZW50LCBTdHJpbmcgd3NpbCwgU3RyaW5nIHdzZGwsIFN0cmluZyBodHRwVXNlcm5hbWUsIFN0cmluZyBodHRwUGFzc3dvcmQpIHRocm93cyBXV1dBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbgotICB7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gbnVsbDsKLSAgICBBcnJheUxpc3Qgd3NkbFNlcnZpY2UgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgQXJyYXlMaXN0IHdzZGxCaW5kaW5nID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGlmIChyZXNvbHZlV1NETF8pCi0gICAgewotICAgICAgLy8gUGFyc2UgV1NETAotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGRlZmluaXRpb24gPSBwYXJzZVdTREwod3NkbCwgd3NkbFNlcnZpY2UsIHdzZGxCaW5kaW5nLCBodHRwVXNlcm5hbWUsIGh0dHBQYXNzd29yZCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIG11cmxlKQotICAgICAgewotICAgICAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBXU0lMTWVzc2FnZXMuTVNHX0VSUk9SX0lOVkFMSURfV1NETF9VUkksIG11cmxlKTsKLSAgICAgICAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKQotICAgICAgewotICAgICAgICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1c1V0aWxzLmVycm9yU3RhdHVzKCBXU0lMTWVzc2FnZXMuTVNHX0VSUk9SX1VOUkVTT0xWQUJMRV9XU0RMLCBpb2UpOwotICAgICAgICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLSAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIHBjZSkKLSAgICAgIHsKLSAgICAgICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggV1NJTE1lc3NhZ2VzLk1TR19FUlJPUl9VTkVYUEVDVEVEX0VYQ0VQVElPTiwgcGNlKTsKLSAgICAgICAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoU0FYRXhjZXB0aW9uIHNheGUpCi0gICAgICB7Ci0gICAgICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIFdTSUxNZXNzYWdlcy5NU0dfRVJST1JfTUFMRk9STUVEX1dTREwsIHNheGUpOwotICAgICAgICBlbnZpcm9ubWVudC5nZXRTdGF0dXNIYW5kbGVyKCkucmVwb3J0RXJyb3Ioc3RhdHVzKTsKLSAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gQWRkIFdTREwgdG8gV1NJTAotICAgIHRyeQotICAgIHsKLSAgICAgIEluc3BlY3Rpb24gaW5zcGVjdGlvbiA9IHdzaWxEb2N1bWVudC5nZXRJbnNwZWN0aW9uKCk7Ci0gICAgICBTZXJ2aWNlIHNlcnZpY2UgPSB3c2lsRG9jdW1lbnQuY3JlYXRlU2VydmljZSgpOwotICAgICAgaWYgKGRlZmluaXRpb24gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgRWxlbWVudCBkb2N1bWVudGF0aW9uID0gZGVmaW5pdGlvbi5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpOwotICAgICAgICBBYnN0cmFjdCBzZXJ2aWNlQWJzdHJhY3QgPSB3c2lsRG9jdW1lbnQuY3JlYXRlQWJzdHJhY3QoKTsKLSAgICAgICAgc2VydmljZUFic3RyYWN0LnNldFRleHQoRWxlbWVudDJTdHJpbmcoZG9jdW1lbnRhdGlvbikpOwotICAgICAgICBzZXJ2aWNlLmFkZEFic3RyYWN0KHNlcnZpY2VBYnN0cmFjdCk7Ci0gICAgICB9Ci0gICAgICBEZXNjcmlwdGlvbiBkZXNjID0gd3NpbERvY3VtZW50LmNyZWF0ZURlc2NyaXB0aW9uKCk7Ci0gICAgICBkZXNjLnNldFJlZmVyZW5jZWROYW1lc3BhY2UoV1NETENvbnN0YW50cy5OU19VUklfV1NETCk7Ci0gICAgICBkZXNjLnNldExvY2F0aW9uKGdldFJlbGF0aXZlVVJJKHdzaWwsIHdzZGwpKTsKLSAgICAgIEV4dGVuc2lvbkJ1aWxkZXIgZXh0QnVpbGRlciA9IHdzaWxEb2N1bWVudC5nZXRFeHRlbnNpb25SZWdpc3RyeSgpLmdldEJ1aWxkZXIoV1NETENvbnN0YW50cy5OU19VUklfV1NJTF9XU0RMKTsKLSAgICAgIGlmIChkZWZpbml0aW9uID09IG51bGwgfHwgZW5kcG9pbnRQcmVzZW50KGRlZmluaXRpb24pKQotICAgICAgewotICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gd3NkbFNlcnZpY2UuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICAgICAgewotICAgICAgICAgIFJlZmVyZW5jZSByZWZlcmVuY2UgPSAoUmVmZXJlbmNlKSBleHRCdWlsZGVyLmNyZWF0ZUVsZW1lbnQobmV3IFFOYW1lKFdTRExDb25zdGFudHMuTlNfVVJJX1dTSUxfV1NETCwgV1NETENvbnN0YW50cy5FTEVNX1JFRkVSRU5DRSkpOwotICAgICAgICAgIHJlZmVyZW5jZS5zZXRFbmRwb2ludFByZXNlbnQobmV3IEJvb2xlYW4odHJ1ZSkpOwotICAgICAgICAgIFJlZmVyZW5jZWRTZXJ2aWNlIHJlZlNlcnZpY2UgPSAoUmVmZXJlbmNlZFNlcnZpY2UpIGV4dEJ1aWxkZXIuY3JlYXRlRWxlbWVudChuZXcgUU5hbWUoV1NETENvbnN0YW50cy5OU19VUklfV1NJTF9XU0RMLCBXU0RMQ29uc3RhbnRzLkVMRU1fUkVGX1NFUlZJQ0UpKTsKLSAgICAgICAgICByZWZTZXJ2aWNlLnNldFJlZmVyZW5jZWRTZXJ2aWNlTmFtZSgoUU5hbWUpIGl0Lm5leHQoKSk7Ci0gICAgICAgICAgcmVmZXJlbmNlLnNldFJlZmVyZW5jZWRTZXJ2aWNlKHJlZlNlcnZpY2UpOwotICAgICAgICAgIGRlc2Muc2V0RXh0ZW5zaW9uRWxlbWVudChyZWZlcmVuY2UpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIFJlZmVyZW5jZSByZWZlcmVuY2UgPSAoUmVmZXJlbmNlKSBleHRCdWlsZGVyLmNyZWF0ZUVsZW1lbnQobmV3IFFOYW1lKFdTRExDb25zdGFudHMuTlNfVVJJX1dTSUxfV1NETCwgV1NETENvbnN0YW50cy5FTEVNX1JFRkVSRU5DRSkpOwotICAgICAgICByZWZlcmVuY2Uuc2V0RW5kcG9pbnRQcmVzZW50KG5ldyBCb29sZWFuKGZhbHNlKSk7Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSB3c2RsQmluZGluZy5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KQotICAgICAgICB7Ci0gICAgICAgICAgSW1wbGVtZW50ZWRCaW5kaW5nIGJpbmRpbmcgPSAoSW1wbGVtZW50ZWRCaW5kaW5nKSBleHRCdWlsZGVyLmNyZWF0ZUVsZW1lbnQobmV3IFFOYW1lKFdTRExDb25zdGFudHMuTlNfVVJJX1dTSUxfV1NETCwgV1NETENvbnN0YW50cy5FTEVNX0lNUExfQklORElORykpOwotICAgICAgICAgIGJpbmRpbmcuc2V0QmluZGluZ05hbWUoKFFOYW1lKSBpdC5uZXh0KCkpOwotICAgICAgICAgIHJlZmVyZW5jZS5hZGRJbXBsZW1lbnRlZEJpbmRpbmcoYmluZGluZyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHNlcnZpY2UuYWRkRGVzY3JpcHRpb24oZGVzYyk7Ci0gICAgICBpbnNwZWN0aW9uLmFkZFNlcnZpY2Uoc2VydmljZSk7Ci0gICAgfQotICAgIGNhdGNoIChXU0lMRXhjZXB0aW9uIHdzaWxlKQotICAgIHsKLSAgICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIFdTSUxNZXNzYWdlcy5NU0dfRVJST1JfVU5FWFBFQ1RFRF9FWENFUFRJT04sIHdzaWxlKTsKLSAgICAgIGVudmlyb25tZW50LmdldFN0YXR1c0hhbmRsZXIoKS5yZXBvcnRFcnJvcihzdGF0dXMpOwotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgIHsKLSAgICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzVXRpbHMuZXJyb3JTdGF0dXMoIFdTSUxNZXNzYWdlcy5NU0dfRVJST1JfVU5FWFBFQ1RFRF9FWENFUFRJT04sIHQpOwotICAgICAgZW52aXJvbm1lbnQuZ2V0U3RhdHVzSGFuZGxlcigpLnJlcG9ydEVycm9yKHN0YXR1cyk7Ci0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0KLSAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIDxjb2RlPnRydWU8L2NvZGU+IGlmLCBhbmQgb25seSBpZiwgdGhlIENvbW1hbmQncyA8Y29kZT51bmRvPC9jb2RlPgotICAgKiBtZXRob2QgaXMgc3VwcG9ydGVkLgotICAgKiAKLSAgICogQHJldHVybiBUcnVlIGlmIHRoZSBDb21tYW5kIHN1cHBvcnRzIGJlaW5nIHVuZG9uZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzVW5kb2FibGUoKQotICB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICAqIFVuZG9lcyB0aGUgQ29tbWFuZC4KLSAgICogCi0gICAqIEBwYXJhbSBlbnZpcm9ubWVudAotICAgKiAgICAgICAgICAgIFRoZSBlbnZpcm9ubWVudC4gTXVzdCBub3QgYmUgbnVsbC4KLSAgICogQHJldHVybiBBIDxjb2RlPlN0YXR1czwvY29kZT4gb2JqZWN0IGluZGljYXRpbmcgdGhlIGRlZ3JlZSB0byB3aGljaCB0aGUKLSAgICogICAgICAgICA8Y29kZT51bmRvPC9jb2RlPiBtZXRob2Qgd2FzIHN1Y2Nlc3NmdWwuIEEgdmFsdWQgb2YgPGNvZGU+bnVsbDwvY29kZT4sCi0gICAqICAgICAgICAgb3IgYSBTdGF0dXMgd2l0aCBhIHNldmVyaXR5IG9mIGxlc3MgdGhhbiA8Y29kZT5TdGF0dXMuRVJST1I8L2NvZGU+Ci0gICAqICAgICAgICAgc2lnbmlmaWVzIHN1Y2Nlc3MuCi0gICAqLwotICBwdWJsaWMgSVN0YXR1cyB1bmRvKElFbnZpcm9ubWVudCBlbnZpcm9ubWVudCkKLSAgewotICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotICB9Ci0KLSAgcHJpdmF0ZSBEZWZpbml0aW9uIHBhcnNlV1NETChTdHJpbmcgd3NkbCwgQXJyYXlMaXN0IHdzZGxTZXJ2aWNlLCBBcnJheUxpc3Qgd3NkbEJpbmRpbmcsIFN0cmluZyBodHRwVXNlcm5hbWUsIFN0cmluZyBodHRwUGFzc3dvcmQpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uLCBTQVhFeGNlcHRpb24sIFdXV0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uCi0gIHsKLSAgICBXZWJTZXJ2aWNlc1BhcnNlciB3c1BhcnNlciA9IG5ldyBXZWJTZXJ2aWNlc1BhcnNlcih3c2RsKTsKLSAgICBpZiAoaHR0cFVzZXJuYW1lICE9IG51bGwgJiYgaHR0cFBhc3N3b3JkICE9IG51bGwpCi0gICAgewotICAgICAgd3NQYXJzZXIuc2V0SFRUUEJhc2ljQXV0aFVzZXJuYW1lKGh0dHBVc2VybmFtZSk7Ci0gICAgICB3c1BhcnNlci5zZXRIVFRQQmFzaWNBdXRoUGFzc3dvcmQoaHR0cFBhc3N3b3JkKTsKLSAgICB9Ci0gICAgd3NQYXJzZXIucGFyc2UoV2ViU2VydmljZXNQYXJzZXIuUEFSU0VfTk9ORSk7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gd3NQYXJzZXIuZ2V0V1NETERlZmluaXRpb24od3NkbCk7Ci0gICAgaWYgKGRlZmluaXRpb24gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBNYXAgc2VydmljZXMgPSBkZWZpbml0aW9uLmdldFNlcnZpY2VzKCk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gc2VydmljZXMua2V5U2V0KCkuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICAgICAgd3NkbFNlcnZpY2UuYWRkKHBhcnNlUU5hbWUoKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIGl0Lm5leHQoKSkpOwotICAgICAgTWFwIGJpbmRpbmdzID0gZGVmaW5pdGlvbi5nZXRCaW5kaW5ncygpOwotICAgICAgZm9yIChJdGVyYXRvciBpdCA9IGJpbmRpbmdzLmtleVNldCgpLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTspCi0gICAgICAgIHdzZGxCaW5kaW5nLmFkZChwYXJzZVFOYW1lKChqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSBpdC5uZXh0KCkpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGRlZmluaXRpb247Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gZW5kcG9pbnRQcmVzZW50KERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgIHJldHVybiAoZGVmaW5pdGlvbi5nZXRTZXJ2aWNlcygpLnNpemUoKSA+IDApOwotICB9Ci0KLSAgcHVibGljIFN0cmluZ1tdIGdldEFyZ3VtZW50cygpCi0gIHsKLSAgICByZXR1cm4gYXJnc187Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRBcmd1bWVudHMoU3RyaW5nW10gYXJncykKLSAgewotICAgIGFyZ3NfID0gYXJnczsKLSAgfQotCi0gIHB1YmxpYyBXV1dBdXRoZW50aWNhdGlvbkhhbmRsZXIgZ2V0V1dXQXV0aGVudGljYXRpb25IYW5kbGVyKCkKLSAgewotICAgIHJldHVybiB3d3dBdXRoSGFuZGxlcl87Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRXV1dBdXRoZW50aWNhdGlvbkhhbmRsZXIoV1dXQXV0aGVudGljYXRpb25IYW5kbGVyIHd3d0F1dGhIYW5kbGVyKQotICB7Ci0gICAgd3d3QXV0aEhhbmRsZXJfID0gd3d3QXV0aEhhbmRsZXI7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgcGFyc2VBcmd1bWVudHMoKSB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50c0V4Y2VwdGlvbgotICB7Ci0gICAgY2xlYXJQYXJzZWRBcmdzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdzXy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpZiAoQVJHX1dTSUwuZXF1YWxzKGFyZ3NfW2ldKSkKLSAgICAgICAgd3NpbF8gPSBhcmdzX1srK2ldOwotICAgICAgZWxzZSBpZiAoQVJHX1dTREwuZXF1YWxzKGFyZ3NfW2ldKSkKLSAgICAgICAgd3NkbHNfLmFkZChhcmdzX1srK2ldKTsKLSAgICAgIGVsc2UgaWYgKEFSR19SRVNPTFZFX1dTREwuZXF1YWxzKGFyZ3NfW2ldKSkKLSAgICAgICAgcmVzb2x2ZVdTRExfID0gdHJ1ZTsKLSAgICAgIGVsc2UgaWYgKEFSR19IVFRQX0JBU0lDX0FVVEhfVVNFUk5BTUUuZXF1YWxzKGFyZ3NfW2ldKSkKLSAgICAgICAgaHR0cFVzZXJuYW1lXyA9IGFyZ3NfWysraV07Ci0gICAgICBlbHNlIGlmIChBUkdfSFRUUF9CQVNJQ19BVVRIX1BBU1NXT1JELmVxdWFscyhhcmdzX1tpXSkpCi0gICAgICAgIGh0dHBQYXNzd29yZF8gPSBhcmdzX1srK2ldOwotICAgICAgZWxzZQotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50c0V4Y2VwdGlvbihhcmdzX1tpXSk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBRTmFtZSBwYXJzZVFOYW1lKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUgcW5hbWUpCi0gIHsKLSAgICByZXR1cm4gbmV3IFFOYW1lKHFuYW1lLmdldE5hbWVzcGFjZVVSSSgpLCBxbmFtZS5nZXRMb2NhbFBhcnQoKSk7Ci0gIH0KLQotICBwcml2YXRlIFN0cmluZyBFbGVtZW50MlN0cmluZyhFbGVtZW50IGUpIHRocm93cyBUcmFuc2Zvcm1lckNvbmZpZ3VyYXRpb25FeGNlcHRpb24sIFRyYW5zZm9ybWVyRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbgotICB7Ci0gICAgYnl0ZVtdIGIgPSBuZXcgYnl0ZVswXTsKLSAgICBpZiAoZSAhPSBudWxsKQotICAgIHsKLSAgICAgIERPTVNvdXJjZSBkb21Tb3VyY2UgPSBuZXcgRE9NU291cmNlKGUpOwotICAgICAgVHJhbnNmb3JtZXIgc2VyaWFsaXplciA9IFRyYW5zZm9ybWVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld1RyYW5zZm9ybWVyKCk7Ci0gICAgICBzZXJpYWxpemVyLnNldE91dHB1dFByb3BlcnR5KE91dHB1dEtleXMuSU5ERU5ULCAieWVzIik7Ci0gICAgICBzZXJpYWxpemVyLnNldE91dHB1dFByb3BlcnR5KCJ7aHR0cDovL3htbC5hcGFjaGUub3JnL3hzbHR9aW5kZW50LWFtb3VudCIsICIyIik7Ci0gICAgICBCeXRlQXJyYXlPdXRwdXRTdHJlYW0gYmFvcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLSAgICAgIHNlcmlhbGl6ZXIudHJhbnNmb3JtKGRvbVNvdXJjZSwgbmV3IFN0cmVhbVJlc3VsdChiYW9zKSk7Ci0gICAgICBiYW9zLmNsb3NlKCk7Ci0gICAgICBiID0gYmFvcy50b0J5dGVBcnJheSgpOwotICAgIH0KLSAgICByZXR1cm4gbmV3IFN0cmluZyhiKTsKLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIHBsYXRmb3JtMkZpbGUoSVVSSUZhY3RvcnkgdXJpRmFjdG9yeSwgU3RyaW5nIHVyaSkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHJldHVybiB1cmlGYWN0b3J5Lm5ld1VSSSh1cmkpLmFzRmlsZSgpLnRvVVJMKCkudG9TdHJpbmcoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgIHsKLSAgICAgIHQucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfQotICAgIHJldHVybiB1cmk7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIGNoYXIgRldEX1NMQVNIID0gJy8nOwotICBwcml2YXRlIGZpbmFsIGNoYXIgQldEX1NMQVNIID0gJ1xcJzsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgcGFyZW50RGlyID0gIi4uLyI7Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0UmVsYXRpdmVVUkkoU3RyaW5nIGJhc2VVUkksIFN0cmluZyB0YXJnZXRVUkkpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBTdHJpbmcgYmFzZVVSSUNvcHkgPSBiYXNlVVJJLnJlcGxhY2UoQldEX1NMQVNILCBGV0RfU0xBU0gpOwotICAgICAgU3RyaW5nIHRhcmdldFVSSUNvcHkgPSB0YXJnZXRVUkkucmVwbGFjZShCV0RfU0xBU0gsIEZXRF9TTEFTSCk7Ci0gICAgICBpbnQgbWF0Y2hpbmdJbmRleCA9IC0xOwotICAgICAgaW50IGluZGV4ID0gdGFyZ2V0VVJJQ29weS5pbmRleE9mKEZXRF9TTEFTSCk7Ci0gICAgICB3aGlsZSAoaW5kZXggIT0gLTEpCi0gICAgICB7Ci0gICAgICAgIGlmIChiYXNlVVJJQ29weS5zdGFydHNXaXRoKHRhcmdldFVSSUNvcHkuc3Vic3RyaW5nKDAsIGluZGV4ICsgMSkpKQotICAgICAgICB7Ci0gICAgICAgICAgbWF0Y2hpbmdJbmRleCA9IGluZGV4OwotICAgICAgICAgIGluZGV4ID0gdGFyZ2V0VVJJQ29weS5pbmRleE9mKEZXRF9TTEFTSCwgaW5kZXggKyAxKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBpZiAobWF0Y2hpbmdJbmRleCAhPSAtMSkKLSAgICAgIHsKLSAgICAgICAgaW50IHNsYXNoQ291bnQgPSAtMTsKLSAgICAgICAgaW50IGZyb21JbmRleCA9IG1hdGNoaW5nSW5kZXg7Ci0gICAgICAgIHdoaWxlIChmcm9tSW5kZXggIT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICBzbGFzaENvdW50Kys7Ci0gICAgICAgICAgZnJvbUluZGV4ID0gYmFzZVVSSUNvcHkuaW5kZXhPZihGV0RfU0xBU0gsIGZyb21JbmRleCArIDEpOwotICAgICAgICB9Ci0gICAgICAgIFN0cmluZ0J1ZmZlciByZWxhdGl2ZVVSSSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzbGFzaENvdW50OyBpKyspCi0gICAgICAgICAgcmVsYXRpdmVVUkkuYXBwZW5kKHBhcmVudERpcik7Ci0gICAgICAgIHJlbGF0aXZlVVJJLmFwcGVuZCh0YXJnZXRVUkkuc3Vic3RyaW5nKG1hdGNoaW5nSW5kZXggKyAxLCB0YXJnZXRVUkkubGVuZ3RoKCkpKTsKLSAgICAgICAgcmV0dXJuIHJlbGF0aXZlVVJJLnRvU3RyaW5nKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLSAgICB7Ci0gICAgfQotICAgIHJldHVybiB0YXJnZXRVUkk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9BYnN0cmFjdFdlYlNlcnZpY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9BYnN0cmFjdFdlYlNlcnZpY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmUxNjhiYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvQWJzdHJhY3RXZWJTZXJ2aWNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5JQ29tbWFuZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci0KLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0V2ViU2VydmljZSBpbXBsZW1lbnRzIElXZWJTZXJ2aWNlIHsKLQkKLQlwcml2YXRlIFdlYlNlcnZpY2VJbmZvIGluZm87Ci0KLQlwdWJsaWMgQWJzdHJhY3RXZWJTZXJ2aWNlKFdlYlNlcnZpY2VJbmZvIGluZm8pIHsKLQkJdGhpcy5pbmZvID0gaW5mbzsKLQl9Ci0JCi0KLQlwdWJsaWMgV2ViU2VydmljZUluZm8gZ2V0V2ViU2VydmljZUluZm8oKSB7Ci0JCXJldHVybiBpbmZvOwotCX0KLQotCXB1YmxpYyBhYnN0cmFjdCBJQ29tbWFuZEZhY3RvcnkgYXNzZW1ibGUoSUVudmlyb25tZW50IGVudiwgSUNvbnRleHQgY3R4LCBJU2VsZWN0aW9uIHNlbCwKLQkJCVN0cmluZyBwcm9qZWN0LCBTdHJpbmcgZWFyUHJvamVjdCk7Ci0JCi0KLQlwdWJsaWMgYWJzdHJhY3QgSUNvbW1hbmRGYWN0b3J5IGRlcGxveShJRW52aXJvbm1lbnQgZW52LCBJQ29udGV4dCBjdHgsIElTZWxlY3Rpb24gc2VsLAotICAgICAgU3RyaW5nIHByb2plY3QsIFN0cmluZyBlYXJQcm9qZWN0KTsKLQkKLQotCXB1YmxpYyBhYnN0cmFjdCBJQ29tbWFuZEZhY3RvcnkgZGV2ZWxvcChJRW52aXJvbm1lbnQgZW52LCBJQ29udGV4dCBjdHgsIElTZWxlY3Rpb24gc2VsLAotICAgICAgU3RyaW5nIHByb2plY3QsIFN0cmluZyBlYXJQcm9qZWN0KTsKLQkJCi0KLQlwdWJsaWMgYWJzdHJhY3QgSUNvbW1hbmRGYWN0b3J5IGluc3RhbGwoSUVudmlyb25tZW50IGVudiwgSUNvbnRleHQgY3R4LCBJU2VsZWN0aW9uIHNlbCwKLSAgICAgIFN0cmluZyBwcm9qZWN0LCBTdHJpbmcgZWFyUHJvamVjdCk7Ci0JCi0KLQlwdWJsaWMgYWJzdHJhY3QgSUNvbW1hbmRGYWN0b3J5IHJ1bihJRW52aXJvbm1lbnQgZW52LCBJQ29udGV4dCBjdHgsIElTZWxlY3Rpb24gc2VsLAotICAgICAgU3RyaW5nIHByb2plY3QsIFN0cmluZyBlYXJQcm9qZWN0KTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9BYnN0cmFjdFdlYlNlcnZpY2VDbGllbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9BYnN0cmFjdFdlYlNlcnZpY2VDbGllbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGZjYTU3MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvQWJzdHJhY3RXZWJTZXJ2aWNlQ2xpZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5JQ29tbWFuZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5lbnZpcm9ubWVudC5JRW52aXJvbm1lbnQ7Ci0KLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0V2ViU2VydmljZUNsaWVudCBpbXBsZW1lbnRzIElXZWJTZXJ2aWNlQ2xpZW50IHsKLQkKLQlwcml2YXRlIFdlYlNlcnZpY2VDbGllbnRJbmZvIGluZm87Ci0KLQlwdWJsaWMgQWJzdHJhY3RXZWJTZXJ2aWNlQ2xpZW50KFdlYlNlcnZpY2VDbGllbnRJbmZvIGluZm8pIHsKLQkJdGhpcy5pbmZvID0gaW5mbzsKLQl9Ci0JCi0KLQlwdWJsaWMgV2ViU2VydmljZUNsaWVudEluZm8gZ2V0V2ViU2VydmljZUNsaWVudEluZm8oKSB7Ci0JCXJldHVybiBpbmZvOwotCX0KLQotCXB1YmxpYyBhYnN0cmFjdCBJQ29tbWFuZEZhY3RvcnkgYXNzZW1ibGUoSUVudmlyb25tZW50IGVudiwgSUNvbnRleHQgY3R4LCBJU2VsZWN0aW9uIHNlbCwKLSAgICAgIFN0cmluZyBwcm9qZWN0LCBTdHJpbmcgZWFyUHJvamVjdCk7Ci0JCi0KLQlwdWJsaWMgYWJzdHJhY3QgSUNvbW1hbmRGYWN0b3J5IGRlcGxveShJRW52aXJvbm1lbnQgZW52LCBJQ29udGV4dCBjdHgsIElTZWxlY3Rpb24gc2VsLAotICAgICAgU3RyaW5nIHByb2plY3QsIFN0cmluZyBlYXJQcm9qZWN0KTsKLQkKLQotCXB1YmxpYyBhYnN0cmFjdCBJQ29tbWFuZEZhY3RvcnkgZGV2ZWxvcChJRW52aXJvbm1lbnQgZW52LCBJQ29udGV4dCBjdHgsIElTZWxlY3Rpb24gc2VsLAotICAgICAgU3RyaW5nIHByb2plY3QsIFN0cmluZyBlYXJQcm9qZWN0KTsKLQkJCi0KLQlwdWJsaWMgYWJzdHJhY3QgSUNvbW1hbmRGYWN0b3J5IGluc3RhbGwoSUVudmlyb25tZW50IGVudiwgSUNvbnRleHQgY3R4LCBJU2VsZWN0aW9uIHNlbCwKLSAgICAgIFN0cmluZyBwcm9qZWN0LCBTdHJpbmcgZWFyUHJvamVjdCk7Ci0JCi0KLQlwdWJsaWMgYWJzdHJhY3QgSUNvbW1hbmRGYWN0b3J5IHJ1bihJRW52aXJvbm1lbnQgZW52LCBJQ29udGV4dCBjdHgsIElTZWxlY3Rpb24gc2VsLAotICAgICAgU3RyaW5nIHByb2plY3QsIFN0cmluZyBlYXJQcm9qZWN0KTsKLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L0Fic3RyYWN0V2ViU2VydmljZVJ1bnRpbWUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9BYnN0cmFjdFdlYlNlcnZpY2VSdW50aW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3OTAzM2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L0Fic3RyYWN0V2ViU2VydmljZVJ1bnRpbWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLklDb21tYW5kRmFjdG9yeTsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0V2ViU2VydmljZVJ1bnRpbWUgaW1wbGVtZW50cyBJV2ViU2VydmljZVJ1bnRpbWUgewotCi0JcHVibGljIGFic3RyYWN0IElXZWJTZXJ2aWNlIGdldFdlYlNlcnZpY2UoV2ViU2VydmljZUluZm8gaW5mbyk7Ci0JLyoqCi0JICovCi0JcHVibGljIGFic3RyYWN0IElXZWJTZXJ2aWNlQ2xpZW50IGdldFdlYlNlcnZpY2VDbGllbnQoV2ViU2VydmljZUNsaWVudEluZm8gaW5mbyk7Ci0JLyoqCi0JICovCi0JcHVibGljIElDb21tYW5kRmFjdG9yeSBhbm5vdW5jZShJV2ViU2VydmljZSB3ZWJTZXJ2aWNlKQotCXsKLQkJLy9UT0RPIHByb3ZpZGUgYSBib2lsZXItcGxhdGUgYW5ub3VuY2UgaW1wbGVtZW50YXRpb24uCi0JCXJldHVybiBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9JQ29udGV4dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L0lDb250ZXh0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlMzcxOGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L0lDb250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQ7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSUNvbnRleHQgewotCQotCXB1YmxpYyBib29sZWFuIGdldEFzc2VtYmxlKCk7Ci0JCi0JcHVibGljIGJvb2xlYW4gZ2V0Q2hlY2tPdXRGaWxlcygpOwotCQotCXB1YmxpYyBib29sZWFuIGdldENsaWVudCgpOwotCQotCXB1YmxpYyBib29sZWFuIGdldENyZWF0ZUZvbGRlcnMoKTsKLQkKLQlwdWJsaWMgYm9vbGVhbiBnZXREZXBsb3koKTsKLQkKLQlwdWJsaWMgYm9vbGVhbiBnZXREZXZlbG9wKCk7Ci0JCi0JcHVibGljIGJvb2xlYW4gZ2V0SW5zdGFsbCgpOwotCQotCXB1YmxpYyBib29sZWFuIGdldE92ZXJXcml0ZUZpbGVzKCk7Ci0JCi0JcHVibGljIGJvb2xlYW4gZ2V0UHVibGlzaCgpOwotCQotCXB1YmxpYyBib29sZWFuIGdldFJ1bigpOwotCQotCXB1YmxpYyBXZWJTZXJ2aWNlU2NlbmFyaW8gZ2V0U2NlbmFyaW8oKTsKLQkKLQlwdWJsaWMgYm9vbGVhbiBnZXRUZXN0KCk7Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9JTWVyZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvSU1lcmdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmRjNzI0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9JTWVyZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA1MDkgICAxODIyNzQga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSVN0YXR1c0hhbmRsZXI7Ci0KLS8qCi0gKiBUaGUgSU1lcmdlciBpbnRlcmZhY2UgaGFuZGxlcyBtZXJnaW5nIG9mIHRoZSBhcnJheSBvZiBJRmlsZXMuICBVc2VycyBvZiB0aGUgSU1lcmdlciBpbnRlcmZhY2Ugc2hvdWxkOgotICogMS4gQ2FsbCBsb2FkKCkgd2l0aCB0aGUgYXJyYXkgb2YgSUZpbGVzIHRvIGxvYWQgYW5kIHN0b3JlZCBpbiBtZXJnZSBtb2RlbHMKLSAqIDIuIENhbGwgbWVyZ2UoKSB0byBtZXJnZSB0aGUgY3VycmVudCBjb250ZW50cyBvZiB0aGUgSUZpbGVzIHdpdGggdGhlIG1lcmdlZCBtb2RlbHMgdGhhdCBoYWQgYmVlbiBzdG9yZWQgCi0gKiBwcmV2aW91c2x5IChhdCB0aGUgdGltZSBsb2FkIHdhcyBjYWxsZWQpLgotICogCi0gKiBUaGlzIGNsYXNzIGlzIG5vdCBtZWFudCB0byBiZSBpbXBsZW1lbnRlZCBkaXJlY3RseS4gIEltcGxlbWVudGVycyBzaG91bGQgc3ViY2xhc3MgdGhlIE1lcmdlciBjbGFzcyBpbnN0ZWFkLgotICovCi1wdWJsaWMgaW50ZXJmYWNlIElNZXJnZXIgeyAKLQkKLQkvKioKLQkgKiBMb2FkIHRoZSB1cmlzIHNwZWNpZmllZCBzbyB0aGF0IGEgbWVyZ2UgY2FuIGJlIGRvbmUgbGF0ZXIgb24KLQkgKiBAcGFyYW0gdXJscwotCSAqIEByZXR1cm4gSVN0YXR1cwotCSAqLwotCXB1YmxpYyBJU3RhdHVzIGxvYWQoSUZpbGVbXSBmaWxlcyk7Ci0JCi0JLyoqCi0JICogTWVyZ2UgdGhlIGN1cnJlbnQgY29udGVudCBvZiB0aGUgYXJyYXkgb2YgSUZpbGVzIHdpdGggd2hhdCBoYWQgYmVlbiBzdG9yZWQgd2hlbiBsb2FkIHdhcyBmaXJzdCBjYWxsZWQgYW5kIHdyaXRlIAotCSAqIHRoZSBtZXJnZWQgY29udGVudCBiYWNrIGluIHRoZSBmaWxlcy4gCi0JICogQHBhcmFtIG1vbml0b3IgUHJvZ3Jlc3MgbW9uaXRvcgotCSAqIEBwYXJhbSBzdGF0dXNIYW5kbGVyIFRoZSBzdGF0dXMgaGFuZGxlciB1c2VkIHRvIGhhbmRsZSB0aGUgd3JpdGluZyBvZiB0aGUgbWVyZ2VkIGNvbnRlbnQKLQkgKiBAcmV0dXJuIElTdGF0dXMKLQkgKi8KLQlwdWJsaWMgSVN0YXR1cyBtZXJnZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElTdGF0dXNIYW5kbGVyIHN0YXR1c0hhbmRsZXIpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L0lTZWxlY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9JU2VsZWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4OTNiNWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L0lTZWxlY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydDsKLQotcHVibGljIGludGVyZmFjZSBJU2VsZWN0aW9uIHsKLQkKLQlPYmplY3RbXSBnZXRTZWxlY3Rpb24oKTsKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L0lXZWJTZXJ2aWNlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvSVdlYlNlcnZpY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTIzZTYxYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvSVdlYlNlcnZpY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQ7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLklDb21tYW5kRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLQotCi1wdWJsaWMgaW50ZXJmYWNlIElXZWJTZXJ2aWNlIHsKLQotCS8qKgotCSAqLwotCXB1YmxpYyBXZWJTZXJ2aWNlSW5mbyBnZXRXZWJTZXJ2aWNlSW5mbygpOwotCQotCXB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgZGV2ZWxvcChJRW52aXJvbm1lbnQgZW52LCBJQ29udGV4dCBjdHgsIElTZWxlY3Rpb24gc2VsLCBTdHJpbmcgcHJvamVjdCwgU3RyaW5nIGVhclByb2plY3QpOwotCXB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgZGVwbG95KElFbnZpcm9ubWVudCBlbnYsIElDb250ZXh0IGN0eCwgSVNlbGVjdGlvbiBzZWwsIFN0cmluZyBwcm9qZWN0LCBTdHJpbmcgZWFyUHJvamVjdCk7Ci0JcHVibGljIElDb21tYW5kRmFjdG9yeSBhc3NlbWJsZShJRW52aXJvbm1lbnQgZW52LCBJQ29udGV4dCBjdHgsIElTZWxlY3Rpb24gc2VsLCBTdHJpbmcgcHJvamVjdCwgU3RyaW5nIGVhclByb2plY3QpOwotCXB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgaW5zdGFsbChJRW52aXJvbm1lbnQgZW52LCBJQ29udGV4dCBjdHgsIElTZWxlY3Rpb24gc2VsLCBTdHJpbmcgcHJvamVjdCwgU3RyaW5nIGVhclByb2plY3QpOwotCXB1YmxpYyBJQ29tbWFuZEZhY3RvcnkgcnVuKElFbnZpcm9ubWVudCBlbnYsIElDb250ZXh0IGN0eCwgSVNlbGVjdGlvbiBzZWwsIFN0cmluZyBwcm9qZWN0LCBTdHJpbmcgZWFyUHJvamVjdCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvSVdlYlNlcnZpY2VDbGllbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9JV2ViU2VydmljZUNsaWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzIxZWNjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9JV2ViU2VydmljZUNsaWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLklDb21tYW5kRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLQotcHVibGljIGludGVyZmFjZSBJV2ViU2VydmljZUNsaWVudCB7Ci0JCi0JLyoqCi0JICovCi0JcHVibGljIFdlYlNlcnZpY2VDbGllbnRJbmZvIGdldFdlYlNlcnZpY2VDbGllbnRJbmZvKCk7Ci0JCi0JcHVibGljIElDb21tYW5kRmFjdG9yeSBkZXZlbG9wKElFbnZpcm9ubWVudCBlbnYsIElDb250ZXh0IGN0eCwgSVNlbGVjdGlvbiBzZWwsIFN0cmluZyBwcm9qZWN0LCBTdHJpbmcgZWFyUHJvamVjdCk7Ci0JcHVibGljIElDb21tYW5kRmFjdG9yeSBkZXBsb3koSUVudmlyb25tZW50IGVudiwgSUNvbnRleHQgY3R4LCBJU2VsZWN0aW9uIHNlbCwgU3RyaW5nIHByb2plY3QsIFN0cmluZyBlYXJQcm9qZWN0KTsKLQlwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IGFzc2VtYmxlKElFbnZpcm9ubWVudCBlbnYsIElDb250ZXh0IGN0eCwgSVNlbGVjdGlvbiBzZWwsIFN0cmluZyBwcm9qZWN0LCBTdHJpbmcgZWFyUHJvamVjdCk7Ci0JcHVibGljIElDb21tYW5kRmFjdG9yeSBpbnN0YWxsKElFbnZpcm9ubWVudCBlbnYsIElDb250ZXh0IGN0eCwgSVNlbGVjdGlvbiBzZWwsIFN0cmluZyBwcm9qZWN0LCBTdHJpbmcgZWFyUHJvamVjdCk7Ci0JcHVibGljIElDb21tYW5kRmFjdG9yeSBydW4oSUVudmlyb25tZW50IGVudiwgSUNvbnRleHQgY3R4LCBJU2VsZWN0aW9uIHNlbCwgU3RyaW5nIHByb2plY3QsIFN0cmluZyBlYXJQcm9qZWN0KTsJCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9JV2ViU2VydmljZVB1Ymxpc2hlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L0lXZWJTZXJ2aWNlUHVibGlzaGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2ZGM1ZTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L0lXZWJTZXJ2aWNlUHVibGlzaGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuSUNvbW1hbmRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotCi1wdWJsaWMgaW50ZXJmYWNlIElXZWJTZXJ2aWNlUHVibGlzaGVyIHsKLQkKLQlwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IHB1Ymxpc2goSUVudmlyb25tZW50IGVudiwgSVdlYlNlcnZpY2Ugd3MpOwotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvSVdlYlNlcnZpY2VSdW50aW1lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvSVdlYlNlcnZpY2VSdW50aW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmOGMyZTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L0lXZWJTZXJ2aWNlUnVudGltZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLklDb21tYW5kRmFjdG9yeTsKLQotCi1wdWJsaWMgaW50ZXJmYWNlIElXZWJTZXJ2aWNlUnVudGltZSB7Ci0JCi0JLyoqCi0JICovCi0JcHVibGljIElXZWJTZXJ2aWNlIGdldFdlYlNlcnZpY2UoV2ViU2VydmljZUluZm8gaW5mbyk7Ci0JLyoqCi0JICovCi0JcHVibGljIElXZWJTZXJ2aWNlQ2xpZW50IGdldFdlYlNlcnZpY2VDbGllbnQoV2ViU2VydmljZUNsaWVudEluZm8gaW5mbyk7Ci0JLyoqCi0JICovCi0JcHVibGljIElDb21tYW5kRmFjdG9yeSBhbm5vdW5jZShJV2ViU2VydmljZSB3ZWJTZXJ2aWNlKTsKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L0lXZWJTZXJ2aWNlVGVzdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvSVdlYlNlcnZpY2VUZXN0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQ3NDhhYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvSVdlYlNlcnZpY2VUZXN0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5JQ29tbWFuZEZhY3Rvcnk7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSVdlYlNlcnZpY2VUZXN0ZXIgewotICBwdWJsaWMgSUNvbW1hbmRGYWN0b3J5IGdlbmVyYXRlKFRlc3RJbmZvIHRlc3RJbmZvKTsKLSAgcHVibGljIElDb21tYW5kRmFjdG9yeSBsYXVuY2goVGVzdEluZm8gdGVzdEluZm8pOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L01lcmdlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L01lcmdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzk1N2ZhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9NZXJnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDUwOSAgIDE4MjI3NCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklTdGF0dXNIYW5kbGVyOwotCi0vKgotICogTWVyZ2VyIGlzIHRoZSBBYnN0cmFjdCBjbGFzcyB0aGF0IHNob3VsZCBiZSBzdWJjbGFzc2VkLiAKLSAqLwotcHVibGljIGNsYXNzIE1lcmdlciBpbXBsZW1lbnRzIElNZXJnZXIgewotCi0JcHVibGljIElTdGF0dXMgbG9hZChJRmlsZVtdIGZpbGVzKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBJU3RhdHVzIG1lcmdlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSVN0YXR1c0hhbmRsZXIgc3RhdHVzSGFuZGxlcikgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9TaW1wbGVDb250ZXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvU2ltcGxlQ29udGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjg0YjRhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9TaW1wbGVDb250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0OwotCi0KLXB1YmxpYyBjbGFzcyBTaW1wbGVDb250ZXh0IGltcGxlbWVudHMgSUNvbnRleHQgewotCi0JYm9vbGVhbiBkZXZlbG9wOwotCWJvb2xlYW4gYXNzZW1ibGU7Ci0JYm9vbGVhbiBkZXBsb3k7Ci0JYm9vbGVhbiBpbnN0YWxsOwotCWJvb2xlYW4gcnVuOwotCWJvb2xlYW4gY2xpZW50OwotCWJvb2xlYW4gdGVzdDsKLQlib29sZWFuIHB1Ymxpc2g7Ci0JCi0JV2ViU2VydmljZVNjZW5hcmlvIHNjZW5hcmlvOwotCQotCWJvb2xlYW4gb3ZlcndyaXRlRmlsZXM7Ci0JYm9vbGVhbiBjcmVhdGVGb2xkZXJzOwotCWJvb2xlYW4gY2hlY2tPdXRGaWxlczsKLQkKLQkKLQkKLQkKLQlwdWJsaWMgU2ltcGxlQ29udGV4dCgpCi0JewotCQlzdXBlcigpOwotCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNvbnN0cnVjdG9yIHN0dWIKLQl9Ci0KLQlwdWJsaWMgU2ltcGxlQ29udGV4dChib29sZWFuIGRldmVsb3AsIGJvb2xlYW4gYXNzZW1ibGUsIGJvb2xlYW4gZGVwbG95LCBib29sZWFuIGluc3RhbGwsIGJvb2xlYW4gcnVuLCBib29sZWFuIGNsaWVudCwgYm9vbGVhbiB0ZXN0LCBib29sZWFuIHB1Ymxpc2gsIFdlYlNlcnZpY2VTY2VuYXJpbyBzY2VuYXJpbywgYm9vbGVhbiBvdmVyd3JpdGVGaWxlcywgYm9vbGVhbiBmb2xkZXJzLCBib29sZWFuIGNoZWNrT3V0RmlsZXMpIHsKLQkJc3VwZXIoKTsJCQotCQl0aGlzLmRldmVsb3AgPSBkZXZlbG9wOwotCQl0aGlzLmFzc2VtYmxlID0gYXNzZW1ibGU7Ci0JCXRoaXMuZGVwbG95ID0gZGVwbG95OwotCQl0aGlzLmluc3RhbGwgPSBpbnN0YWxsOwotCQl0aGlzLnJ1biA9IHJ1bjsKLQkJdGhpcy5jbGllbnQgPSBjbGllbnQ7Ci0JCXRoaXMudGVzdCA9IHRlc3Q7Ci0JCXRoaXMucHVibGlzaCA9IHB1Ymxpc2g7Ci0JCXRoaXMuc2NlbmFyaW8gPSBzY2VuYXJpbzsKLQkJdGhpcy5vdmVyd3JpdGVGaWxlcyA9IG92ZXJ3cml0ZUZpbGVzOwotCQl0aGlzLmNyZWF0ZUZvbGRlcnMgPSBmb2xkZXJzOwotCQl0aGlzLmNoZWNrT3V0RmlsZXMgPSBjaGVja091dEZpbGVzOwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBnZXRBc3NlbWJsZSgpIHsKLQkJcmV0dXJuIGFzc2VtYmxlOwotCX0KLQlwdWJsaWMgdm9pZCBzZXRBc3NlbWJsZShib29sZWFuIGFzc2VtYmxlKSB7Ci0JCXRoaXMuYXNzZW1ibGUgPSBhc3NlbWJsZTsKLQl9Ci0JcHVibGljIGJvb2xlYW4gZ2V0Q2hlY2tPdXRGaWxlcygpIHsKLQkJcmV0dXJuIGNoZWNrT3V0RmlsZXM7Ci0JfQotCXB1YmxpYyB2b2lkIHNldENoZWNrT3V0RmlsZXMoYm9vbGVhbiBjaGVja091dEZpbGVzKSB7Ci0JCXRoaXMuY2hlY2tPdXRGaWxlcyA9IGNoZWNrT3V0RmlsZXM7Ci0JfQotCXB1YmxpYyBib29sZWFuIGdldENsaWVudCgpIHsKLQkJcmV0dXJuIGNsaWVudDsKLQl9Ci0JcHVibGljIHZvaWQgc2V0Q2xpZW50KGJvb2xlYW4gY2xpZW50KSB7Ci0JCXRoaXMuY2xpZW50ID0gY2xpZW50OwotCX0KLQlwdWJsaWMgYm9vbGVhbiBnZXRDcmVhdGVGb2xkZXJzKCkgewotCQlyZXR1cm4gY3JlYXRlRm9sZGVyczsKLQl9Ci0JcHVibGljIHZvaWQgc2V0Q3JlYXRlRm9sZGVycyhib29sZWFuIGNyZWF0ZUZvbGRlcnMpIHsKLQkJdGhpcy5jcmVhdGVGb2xkZXJzID0gY3JlYXRlRm9sZGVyczsKLQl9Ci0JcHVibGljIGJvb2xlYW4gZ2V0RGVwbG95KCkgewotCQlyZXR1cm4gZGVwbG95OwotCX0KLQlwdWJsaWMgdm9pZCBzZXREZXBsb3koYm9vbGVhbiBkZXBsb3kpIHsKLQkJdGhpcy5kZXBsb3kgPSBkZXBsb3k7Ci0JfQotCXB1YmxpYyBib29sZWFuIGdldERldmVsb3AoKSB7Ci0JCXJldHVybiBkZXZlbG9wOwotCX0KLQlwdWJsaWMgdm9pZCBzZXREZXZlbG9wKGJvb2xlYW4gZGV2ZWxvcCkgewotCQl0aGlzLmRldmVsb3AgPSBkZXZlbG9wOwotCX0KLQlwdWJsaWMgYm9vbGVhbiBnZXRJbnN0YWxsKCkgewotCQlyZXR1cm4gaW5zdGFsbDsKLQl9Ci0JcHVibGljIHZvaWQgc2V0SW5zdGFsbChib29sZWFuIGluc3RhbGwpIHsKLQkJdGhpcy5pbnN0YWxsID0gaW5zdGFsbDsKLQl9Ci0JcHVibGljIGJvb2xlYW4gZ2V0T3ZlcldyaXRlRmlsZXMoKSB7Ci0JCXJldHVybiBvdmVyd3JpdGVGaWxlczsKLQl9Ci0JcHVibGljIHZvaWQgc2V0T3ZlcldyaXRlRmlsZXMoYm9vbGVhbiBvdmVyd3JpdGVGaWxlcykgewotCQl0aGlzLm92ZXJ3cml0ZUZpbGVzID0gb3ZlcndyaXRlRmlsZXM7Ci0JfQotCXB1YmxpYyBib29sZWFuIGdldFB1Ymxpc2goKSB7Ci0JCXJldHVybiBwdWJsaXNoOwotCX0KLQlwdWJsaWMgdm9pZCBzZXRQdWJsaXNoKGJvb2xlYW4gcHVibGlzaCkgewotCQl0aGlzLnB1Ymxpc2ggPSBwdWJsaXNoOwotCX0KLQlwdWJsaWMgYm9vbGVhbiBnZXRSdW4oKSB7Ci0JCXJldHVybiBydW47Ci0JfQotCXB1YmxpYyB2b2lkIHNldFJ1bihib29sZWFuIHJ1bikgewotCQl0aGlzLnJ1biA9IHJ1bjsKLQl9Ci0JcHVibGljIFdlYlNlcnZpY2VTY2VuYXJpbyBnZXRTY2VuYXJpbygpIHsKLQkJcmV0dXJuIHNjZW5hcmlvOwotCX0KLQlwdWJsaWMgdm9pZCBzZXRTY2VuYXJpbyhXZWJTZXJ2aWNlU2NlbmFyaW8gc2NlbmFyaW8pIHsKLQkJdGhpcy5zY2VuYXJpbyA9IHNjZW5hcmlvOwotCX0KLQlwdWJsaWMgYm9vbGVhbiBnZXRUZXN0KCkgewotCQlyZXR1cm4gdGVzdDsKLQl9Ci0JcHVibGljIHZvaWQgc2V0VGVzdChib29sZWFuIHRlc3QpIHsKLQkJdGhpcy50ZXN0ID0gdGVzdDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvVGVzdEluZm8uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9UZXN0SW5mby5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZGY4ZDA4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9UZXN0SW5mby5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjc3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDYwOCAgIDE0NTUyOSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLnNlbGVjdGlvbi5Cb29sZWFuU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JU2VydmVyOwotLyoqCi0gKiBUaGlzIGhvbGRzIGluZm8gdGhhdCBjb21lcyBmcm9tIHVzZXIgaW5wdXQgb3Igc29tZSBjYWxjdWxhdGlvbnMgdGhhdCAKLSAqIHdoaWNoIG1pZ2h0IGJlIHVzZWZ1bCB0byBhbnkgdGVzdCBleHRlbmRlcnMKLSAqLwotCi1wdWJsaWMgY2xhc3MgVGVzdEluZm8gewotICBwcml2YXRlIFN0cmluZyBqc3BGb2xkZXI7Ci0gIHByaXZhdGUgU3RyaW5nIGdlbmVyYXRpb25Qcm9qZWN0OwotICBwcml2YXRlIFN0cmluZyBzZXJ2aWNlUHJvamVjdDsKLSAgcHJpdmF0ZSBTdHJpbmcgcHJveHlCZWFuOwotICBwcml2YXRlIFN0cmluZyBzZXRFbmRwb2ludE1ldGhvZDsKLSAgcHJpdmF0ZSBTdHJpbmcgY2xpZW50UHJvamVjdDsKLSAgcHJpdmF0ZSBTdHJpbmcgY2xpZW50TW9kdWxlOwotICBwcml2YXRlIGJvb2xlYW4gY2xpZW50TmVlZEVBUjsKLSAgcHJpdmF0ZSBTdHJpbmcgY2xpZW50RUFSUHJvamVjdDsKLSAgcHJpdmF0ZSBTdHJpbmcgY2xpZW50RUFSTW9kdWxlOwotICBwcml2YXRlIEJvb2xlYW5TZWxlY3Rpb25bXSBtZXRob2RzOwotICBwcml2YXRlIFN0cmluZyBzZXJ2aWNlU2VydmVyVHlwZUlEOwotICBwcml2YXRlIFN0cmluZyBjbGllbnRTZXJ2ZXJUeXBlSUQ7Ci0gIHByaXZhdGUgSVNlcnZlciBzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXI7Ci0gIHByaXZhdGUgSVNlcnZlciBjbGllbnRFeGlzdGluZ1NlcnZlcjsKLSAgcHJpdmF0ZSBMaXN0IGVuZHBvaW50czsKLSAgcHJpdmF0ZSBTdHJpbmcgd3NkbFNlcnZpY2VVUkw7Ci0gIHByaXZhdGUgYm9vbGVhbiBleHRlcm5hbEJyb3dzZXI7ICAKLSAgcHJpdmF0ZSBib29sZWFuIHJ1blRlc3RDbGllbnQ7Ci0KLSAgLyoqCi0gICogVGhpcyBpcyB0aGUgZm9sZGVyIHRoZSB1c2VyIGhhcyBjaG9zZW4gdG8gZ2VuZXJhdGUgYW55IGpzcHMgCi0gICogQHBhcmFtIGpzcEZvbGRlcgotICAqLwotICBwdWJsaWMgdm9pZCBzZXRKc3BGb2xkZXIoU3RyaW5nIGpzcEZvbGRlcil7Ci0JdGhpcy5qc3BGb2xkZXIgPSBqc3BGb2xkZXI7ICAKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRKc3BGb2xkZXIoKXsKLSAgICByZXR1cm4ganNwRm9sZGVyOyAgCi0gIH0KLSAgCi0gIC8qKgotICAqIFRoaXMgaXMgdGhlIHByb2plY3QgdGhlIHVzZXIgaGFzIGNob3NlbiB0byBnZW5lcmF0ZSBhcnRpZmFjdHMgdG8gIAotICAqIEBwYXJhbSBnZW5lcmF0aW9uUHJvamVjdAotICAqLwotICBwdWJsaWMgdm9pZCBzZXRHZW5lcmF0aW9uUHJvamVjdChTdHJpbmcgZ2VuZXJhdGlvblByb2plY3QpewotICAgIHRoaXMuZ2VuZXJhdGlvblByb2plY3QgPSBnZW5lcmF0aW9uUHJvamVjdDsJICAKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRHZW5lcmF0aW9uUHJvamVjdCgpewotICAgIHJldHVybiBnZW5lcmF0aW9uUHJvamVjdDsJICAKLSAgfQotICAKLSAgLyoqCi0gICogVGhlIHByb3h5IGJlYW4gd2FzIGdlbmVyYXRlZCBieSB1cyB0aGlzIGlzIHRoZSBuYW1lIG9mIGl0ICAKLSAgKiBAcGFyYW0gcHJveHlCZWFuCi0gICovCi0gIHB1YmxpYyB2b2lkIHNldFByb3h5QmVhbihTdHJpbmcgcHJveHlCZWFuKXsKLSAgICB0aGlzLnByb3h5QmVhbiA9IHByb3h5QmVhbjsJICAKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRQcm94eUJlYW4oKXsKLSAgICByZXR1cm4gcHJveHlCZWFuOwkgIAotICB9Ci0JICAKLSAgLyoqCi0gICogVGhpcyBpcyB0aGUgU2V0RW5kcG9pbnRNZXRob2QgICAKLSAgKiBAcGFyYW0gCi0gICovCi0gIHB1YmxpYyB2b2lkIHNldFNldEVuZHBvaW50TWV0aG9kKFN0cmluZyBzZXRFbmRwb2ludE1ldGhvZCl7Ci0JdGhpcy5zZXRFbmRwb2ludE1ldGhvZCA9IHNldEVuZHBvaW50TWV0aG9kOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2V0RW5kcG9pbnRNZXRob2QoKXsKLSAgICByZXR1cm4gc2V0RW5kcG9pbnRNZXRob2Q7ICAKLSAgfQotICAKLSAgLyoqCi0gICogVGhlIGNsaWVudFByb2plY3QgY29udGFpbnMgdGhlIGNsaWVudCBhcnRpZmFjdHMgaW5jbHVkaW5nIHRoZSAKLSAgKiBnZW5lcmF0ZWQgcHJveHkgYmVhbiAgIAotICAqIEBwYXJhbSBjbGllbnRQcm9qZWN0IFN0cmluZwotICAqLwotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRQcm9qZWN0KFN0cmluZyBjbGllbnRQcm9qZWN0KXsKLSAgICB0aGlzLmNsaWVudFByb2plY3QgPSBjbGllbnRQcm9qZWN0OwkgIAotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldENsaWVudFByb2plY3QoKXsKLSAgICByZXR1cm4gY2xpZW50UHJvamVjdDsJICAKLSAgfQotCSAgCi0gIC8qKgotICAgKiBUaGUgY2xpZW50TW9kdWxlIGNvbnRhaW5zIHRoZSBjbGllbnQgYXJ0aWZhY3RzIGluY2x1ZGluZyB0aGUgCi0gICAqIG1vZHVsZSAgIAotICAgKiBAcGFyYW0gY2xpZW50UHJvamVjdCBTdHJpbmcKLSAgICovCi0gICBwdWJsaWMgdm9pZCBzZXRDbGllbnRNb2R1bGUoU3RyaW5nIGNsaWVudE1vZHVsZSl7Ci0gICAgIHRoaXMuY2xpZW50TW9kdWxlID0gY2xpZW50TW9kdWxlOwkgIAotICAgfQotICAgCi0gICBwdWJsaWMgU3RyaW5nIGdldENsaWVudE1vZHVsZSgpewotICAgICByZXR1cm4gY2xpZW50TW9kdWxlOwkgIAotICAgfQotICAKLSAgLyoqCi0gICogVGhlc2UgYXJlIG1ldGhvZHMgb24gdGhlIHByb3h5YmVhbiB0aGUgdXNlciBoYXMgY2hlY2tlZCBvbmVzIAotICAqIHRoZXkgd2FudCBpbmNsdWRlZCBpbiB0aGUgdGVzdCBjbGllbnQgICAgIAotICAqIEBwYXJhbSBtZXRob2RzCi0gICovCi0gIHB1YmxpYyB2b2lkIHNldE1ldGhvZHMoQm9vbGVhblNlbGVjdGlvbltdIG1ldGhvZHMpewotCXRoaXMubWV0aG9kcyA9IG1ldGhvZHM7ICAKLSAgfQotICAKLSAgcHVibGljIEJvb2xlYW5TZWxlY3Rpb25bXSBnZXRNZXRob2RzKCl7Ci0gICAgcmV0dXJuIG1ldGhvZHM7ICAKLSAgfQotICAKLSAgLyoqCi0gICogSWYgdGhlIGNvbW1hbmQgbmVlZHMgYSBzZXJ2ZXIgdGhpcyBpcyB0aGUgY2hvc2VuIAotICAqIGNsaWVudCBzZXJ2ZXJJRAotICAqIEBwYXJhbSBzYW1wbGVTZXJ2ZXJUeXBlSUQKLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0U2VydmljZVNlcnZlclR5cGVJRChTdHJpbmcgc2VydmljZVNlcnZlclR5cGVJRCl7Ci0gICAgdGhpcy5zZXJ2aWNlU2VydmVyVHlwZUlEID0gc2VydmljZVNlcnZlclR5cGVJRDsgIAotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldFNlcnZpY2VTZXJ2ZXJUeXBlSUQoKXsKLSAgICByZXR1cm4gc2VydmljZVNlcnZlclR5cGVJRDsgIAotICB9Ci0gIAotICAvKioKLSAgKiBJZiB0aGUgY29tbWFuZCBuZWVkcyBhIHNlcnZlciB0aGlzIGlzIHRoZSBjaG9zZW4gCi0gICogY2xpZW50IHNlcnZlcklECi0gICogQHBhcmFtIHNhbXBsZVNlcnZlclR5cGVJRAotICAqLwotICAgcHVibGljIHZvaWQgc2V0Q2xpZW50U2VydmVyVHlwZUlEKFN0cmluZyBjbGllbnRTZXJ2ZXJUeXBlSUQpewotICAgICB0aGlzLmNsaWVudFNlcnZlclR5cGVJRCA9IGNsaWVudFNlcnZlclR5cGVJRDsgIAotICAgfQotICAgCi0gICBwdWJsaWMgU3RyaW5nIGdldENsaWVudFNlcnZlclR5cGVJRCgpewotICAgICByZXR1cm4gY2xpZW50U2VydmVyVHlwZUlEOyAgCi0gICB9Ci0JICAKLSAgLyoqCi0gICogVGhpcyBpcyB0aGUgSVNlcnZlciBpZiByZXF1aXJlZAotICAqIEBwYXJhbSBzYW1wbGVFeGlzdGluZ1NlcnZlcgotICAqLwotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIoSVNlcnZlciBzZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIpewotCXRoaXMuc2VydmljZUV4aXN0aW5nU2VydmVyID0gc2VydmljZUV4aXN0aW5nU2VydmVyOyAgIAotICB9Ci0gIAotICBwdWJsaWMgSVNlcnZlciBnZXRTZXJ2aWNlRXhpc3RpbmdTZXJ2ZXIoKXsKLSAgICByZXR1cm4gc2VydmljZUV4aXN0aW5nU2VydmVyOyAgIAotICB9Ci0gIAotICAvKioKLSAgICogVGhpcyBpcyB0aGUgU3RyaW5nIGlmIHJlcXVpcmVkCi0gICAqIEBwYXJhbSBjbGllbnRFQVJQcm9qZWN0Ci0gICAqLwotICAgcHVibGljIHZvaWQgc2V0Q2xpZW50RUFSUHJvamVjdChTdHJpbmcgY2xpZW50RUFSUHJvamVjdCl7Ci0gCXRoaXMuY2xpZW50RUFSUHJvamVjdCA9IGNsaWVudEVBUlByb2plY3Q7ICAgCi0gICB9Ci0gICAKLSAgIHB1YmxpYyBTdHJpbmcgZ2V0Q2xpZW50RUFSUHJvamVjdCgpewotICAgICByZXR1cm4gY2xpZW50RUFSUHJvamVjdDsgICAKLSAgIH0KLSAgIAotICAgCi0gICAvKioKLSAgICAqIFRoaXMgaXMgdGhlIFN0cmluZyBpZiByZXF1aXJlZAotICAgICogQHBhcmFtIGNsaWVudEVBUlByb2plY3QKLSAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldENsaWVudEVBUk1vZHVsZShTdHJpbmcgY2xpZW50RUFSTW9kdWxlKXsKLSAgCXRoaXMuY2xpZW50RUFSTW9kdWxlID0gY2xpZW50RUFSTW9kdWxlOyAgIAotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgU3RyaW5nIGdldENsaWVudEVBUk1vZHVsZSgpewotICAgICAgcmV0dXJuIGNsaWVudEVBUk1vZHVsZTsgICAKLSAgICB9Ci0gICAKLSAgLyoqCi0gICogVGhpcyBpcyB0aGUgSVNlcnZlciBpZiByZXF1aXJlZAotICAqIEBwYXJhbSBzYW1wbGVFeGlzdGluZ1NlcnZlcgotICAqLwotICBwdWJsaWMgdm9pZCBzZXRDbGllbnRFeGlzdGluZ1NlcnZlcihJU2VydmVyIGNsaWVudEV4aXN0aW5nU2VydmVyKXsKLSAgICB0aGlzLmNsaWVudEV4aXN0aW5nU2VydmVyID0gY2xpZW50RXhpc3RpbmdTZXJ2ZXI7ICAgCi0gIH0KLSAgIAotICBwdWJsaWMgSVNlcnZlciBnZXRDbGllbnRFeGlzdGluZ1NlcnZlcigpewotICAgIHJldHVybiBjbGllbnRFeGlzdGluZ1NlcnZlcjsgICAKLSAgfQotICAgCi0gIC8qKgotICAqIFRoaXMgaXMgdGhlIGVuZHBvaW50cyBpZiBtb25pdG9yIHNlcnZpY2UgaXMgZW5hYmxlZAotICAqIEBwYXJhbSBlbmRwb2ludHMKLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0RW5kcG9pbnQoTGlzdCBlbmRwb2ludHMpewotCXRoaXMuZW5kcG9pbnRzID0gZW5kcG9pbnRzOyAgCi0gIH0KLSAgcHVibGljIExpc3QgZ2V0RW5kcG9pbnQoKXsKLSAgICByZXR1cm4gZW5kcG9pbnRzOyAgCi0gIH0gCi0KLSAgLyoqCi0gICogVGhpcyBpcyB0aGUgcHJvamVjdCB0aGF0IHNob3VsZCBiZSB1c2VkIHdoZW4gZGVhbGluZyB3aXRoCi0gICogd3NkbAotICAqIEBwYXJhbSBzZXJ2aWNlUHJvamVjdAotICAqLwotICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlUHJvamVjdChTdHJpbmcgc2VydmljZVByb2plY3QpewotICAgIHRoaXMuc2VydmljZVByb2plY3QgPSBzZXJ2aWNlUHJvamVjdDsgICAgCSAgCi0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNlcnZpY2VQcm9qZWN0KCl7Ci0gICAgcmV0dXJuIHNlcnZpY2VQcm9qZWN0OwotICB9Ci0KLSAgLyoqCi0gICogV1NETCBVUkwKLSAgKi8KLSAgcHVibGljIHZvaWQgc2V0V3NkbFNlcnZpY2VVUkwoU3RyaW5nIHdzZGxTZXJ2aWNlVVJMKXsKLQl0aGlzLndzZGxTZXJ2aWNlVVJMID0gd3NkbFNlcnZpY2VVUkw7ICAKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRXc2RsU2VydmljZVVSTCgpewotICAgIHJldHVybiB3c2RsU2VydmljZVVSTDsgIAotICB9Ci0gIAotICAvKioKLSAgICogY2xpZW50TmVlZEVBUgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0Q2xpZW50TmVlZEVBUigpIHsKLQkJcmV0dXJuIGNsaWVudE5lZWRFQVI7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRDbGllbnROZWVkRUFSKGJvb2xlYW4gY2xpZW50TmVlZEVBUikgewotCQl0aGlzLmNsaWVudE5lZWRFQVIgPSBjbGllbnROZWVkRUFSOwotICB9Ci0KLSAgLyoqCi0gICAqIGV4dGVybmFsIGJyb3dzZXIKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldEV4dGVybmFsQnJvd3NlcigpIAotICB7Ci0JICByZXR1cm4gZXh0ZXJuYWxCcm93c2VyOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RXh0ZXJuYWxCcm93c2VyKGJvb2xlYW4gZXh0ZXJuYWxCcm93c2VyKSB7Ci0JICB0aGlzLmV4dGVybmFsQnJvd3NlciA9IGV4dGVybmFsQnJvd3NlcjsKLSAgfQotCi1wdWJsaWMgYm9vbGVhbiBnZXRSdW5UZXN0Q2xpZW50KCkgewotCXJldHVybiBydW5UZXN0Q2xpZW50OwotfQotCi1wdWJsaWMgdm9pZCBzZXRSdW5UZXN0Q2xpZW50KGJvb2xlYW4gcnVuVGVzdENsaWVudCkgewotCXRoaXMucnVuVGVzdENsaWVudCA9IHJ1blRlc3RDbGllbnQ7Ci19Ci0KLQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L1dlYlNlcnZpY2VDbGllbnRJbmZvLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvV2ViU2VydmljZUNsaWVudEluZm8uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQ4NTc1Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvV2ViU2VydmljZUNsaWVudEluZm8uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDcyOCAgIDE0NTQyNiBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzA4MTUgICAxOTk2MjYga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0OwotCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZUNsaWVudEluZm8gewotCi0JcHJpdmF0ZSBXZWJTZXJ2aWNlU3RhdGUgc3RhdGU7Ci0JcHJpdmF0ZSBqYXZhLmxhbmcuU3RyaW5nIHNlcnZlckZhY3RvcnlJZDsKLQlwcml2YXRlIGphdmEubGFuZy5TdHJpbmcgc2VydmVySW5zdGFuY2VJZDsKLQlwcml2YXRlIGphdmEubGFuZy5TdHJpbmcgd2ViU2VydmljZVJ1bnRpbWVJZDsKLQlwcml2YXRlIGphdmEubGFuZy5TdHJpbmcgd3NkbFVSTDsKLQlwcml2YXRlIGphdmEubGFuZy5TdHJpbmcgaW1wbFVSTDsKLQlwcml2YXRlIGphdmEubGFuZy5TdHJpbmcgcHJveHlFbmRwb2ludCA9IG51bGw7Ci0JcHJpdmF0ZSBib29sZWFuIHNlcnZlckNyZWF0ZWQgPSBmYWxzZTsKLQkKLQlwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRJbXBsVVJMKCkgewotCQlyZXR1cm4gaW1wbFVSTDsKLQl9Ci0JcHVibGljIHZvaWQgc2V0SW1wbFVSTChqYXZhLmxhbmcuU3RyaW5nIGltcGxVUkwpIHsKLQkJdGhpcy5pbXBsVVJMID0gaW1wbFVSTDsKLQl9Ci0JcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0U2VydmVyRmFjdG9yeUlkKCkgewotCQlyZXR1cm4gc2VydmVyRmFjdG9yeUlkOwotCX0KLQlwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJGYWN0b3J5SWQoamF2YS5sYW5nLlN0cmluZyBzZXJ2ZXJGYWN0b3J5SWQpIHsKLQkJdGhpcy5zZXJ2ZXJGYWN0b3J5SWQgPSBzZXJ2ZXJGYWN0b3J5SWQ7Ci0JfQotCXB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldFNlcnZlckluc3RhbmNlSWQoKSB7Ci0JCXJldHVybiBzZXJ2ZXJJbnN0YW5jZUlkOwotCX0KLQlwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJJbnN0YW5jZUlkKGphdmEubGFuZy5TdHJpbmcgc2VydmVySW5zdGFuY2VJZCkgewotCQl0aGlzLnNlcnZlckluc3RhbmNlSWQgPSBzZXJ2ZXJJbnN0YW5jZUlkOwotCX0KLQlwdWJsaWMgV2ViU2VydmljZVN0YXRlIGdldFN0YXRlKCkgewotCQlyZXR1cm4gc3RhdGU7Ci0JfQotCXB1YmxpYyB2b2lkIHNldFN0YXRlKFdlYlNlcnZpY2VTdGF0ZSBzdGF0ZSkgewotCQl0aGlzLnN0YXRlID0gc3RhdGU7Ci0JfQotCXB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldFdlYlNlcnZpY2VSdW50aW1lSWQoKSB7Ci0JCXJldHVybiB3ZWJTZXJ2aWNlUnVudGltZUlkOwotCX0KLQlwdWJsaWMgdm9pZCBzZXRXZWJTZXJ2aWNlUnVudGltZUlkKGphdmEubGFuZy5TdHJpbmcgd2ViU2VydmljZVJ1bnRpbWVJZCkgewotCQl0aGlzLndlYlNlcnZpY2VSdW50aW1lSWQgPSB3ZWJTZXJ2aWNlUnVudGltZUlkOwotCX0KLQlwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRXc2RsVVJMKCkgewotCQlyZXR1cm4gd3NkbFVSTDsKLQl9Ci0JcHVibGljIHZvaWQgc2V0V3NkbFVSTChqYXZhLmxhbmcuU3RyaW5nIHdzZGxVUkwpIHsKLQkJdGhpcy53c2RsVVJMID0gd3NkbFVSTDsKLQl9Ci0JcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0UHJveHlFbmRwb2ludCgpIHsKLQkJcmV0dXJuIHByb3h5RW5kcG9pbnQ7Ci0JfQotCXB1YmxpYyB2b2lkIHNldFByb3h5RW5kcG9pbnQoamF2YS5sYW5nLlN0cmluZyBwcm94eUVuZHBvaW50KSB7Ci0JCXRoaXMucHJveHlFbmRwb2ludCA9IHByb3h5RW5kcG9pbnQ7Ci0JfQotCQotCS8qKgotCSAqIEByZXR1cm4gSW5kaWNhdGVkIHdoZXRoZXIgdGhlIGZyYW1ld29yayBoYWQgY3JlYXRlZCAKLQkgKiB0aGUgc2VydmVyIGluc3RhbmNlIHJlZmVyZW5jZWQgYnkgZ2V0U2VydmVySW5zdGFuY2VJZAotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzU2VydmVyQ3JlYXRlZCgpIHsKLQkJcmV0dXJuIHNlcnZlckNyZWF0ZWQ7Ci0JfQotCQotCS8qKgotCSAqIEBwYXJhbSBzZXJ2ZXJDcmVhdGVkIFRydWUgaWYgdGhlIGZyYW1ld29yayBoYWQgY3JlYXRlZCAKLQkgKiB0aGUgc2VydmVyIGluc3RhbmNlIHJlZmVyZW5jZWQgYnkgZ2V0U2VydmVySW5zdGFuY2VJZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldFNlcnZlckNyZWF0ZWQoYm9vbGVhbiBzZXJ2ZXJDcmVhdGVkKSB7Ci0JCXRoaXMuc2VydmVyQ3JlYXRlZCA9IHNlcnZlckNyZWF0ZWQ7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L1dlYlNlcnZpY2VJbmZvLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvV2ViU2VydmljZUluZm8uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjgxZDE0OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvV2ViU2VydmljZUluZm8uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAyMjEgICAxMjg5MDUga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqIDIwMDYwMzMwICAgMTI4ODI3IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKiAyMDA3MDUwOSAgIDE4MjI3NCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotICogMjAwNzA4MTUgICAxOTk2MjYga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbi5XU1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXMuUGVyc2lzdGVudE1lcmdlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwudXRpbC5Vbml2ZXJzYWxQYXRoVHJhbnNmb3JtZXI7Ci0KLQotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VJbmZvIHsKLQotCXByaXZhdGUgV2ViU2VydmljZVN0YXRlIHN0YXRlOwotCXByaXZhdGUgamF2YS5sYW5nLlN0cmluZyBzZXJ2ZXJGYWN0b3J5SWQ7Ci0JcHJpdmF0ZSBqYXZhLmxhbmcuU3RyaW5nIHNlcnZlckluc3RhbmNlSWQ7Ci0JcHJpdmF0ZSBqYXZhLmxhbmcuU3RyaW5nIHdlYlNlcnZpY2VSdW50aW1lSWQ7Ci0JcHJpdmF0ZSBqYXZhLmxhbmcuU3RyaW5nIHdzZGxVUkw7Ci0JcHJpdmF0ZSBqYXZhLmxhbmcuU3RyaW5nIGVuZFBvaW50VVJMOwotCXByaXZhdGUgamF2YS5sYW5nLlN0cmluZyBpbXBsVVJMOwotCXByaXZhdGUgamF2YS5sYW5nLlN0cmluZ1tdIGltcGxVUkxzOwotCXByaXZhdGUgYm9vbGVhbiBzZXJ2ZXJDcmVhdGVkID0gZmFsc2U7Ci0JCi0JcHJpdmF0ZSBJTWVyZ2VyIG1lcmdlcjsKLQkKLQlwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRFbmRQb2ludFVSTCgpCi0JewotCQlyZXR1cm4gZW5kUG9pbnRVUkw7Ci0JfQotCXB1YmxpYyB2b2lkIHNldEVuZFBvaW50VVJMKGphdmEubGFuZy5TdHJpbmcgZW5kUG9pbnRVUkwpCi0JewotCQl0aGlzLmVuZFBvaW50VVJMID0gZW5kUG9pbnRVUkw7Ci0JfQotCXB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldEltcGxVUkwoKQotCXsKLQkJcmV0dXJuIGltcGxVUkw7Ci0JfQotCXB1YmxpYyB2b2lkIHNldEltcGxVUkwoamF2YS5sYW5nLlN0cmluZyBpbXBsVVJMKQotCXsKLQkJdGhpcy5pbXBsVVJMID0gaW1wbFVSTDsKLQl9Ci0JcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0U2VydmVyRmFjdG9yeUlkKCkKLQl7Ci0JCXJldHVybiBzZXJ2ZXJGYWN0b3J5SWQ7Ci0JfQotCXB1YmxpYyB2b2lkIHNldFNlcnZlckZhY3RvcnlJZChqYXZhLmxhbmcuU3RyaW5nIHNlcnZlckZhY3RvcnlJZCkKLQl7Ci0JCXRoaXMuc2VydmVyRmFjdG9yeUlkID0gc2VydmVyRmFjdG9yeUlkOwotCX0KLQlwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRTZXJ2ZXJJbnN0YW5jZUlkKCkKLQl7Ci0JCXJldHVybiBzZXJ2ZXJJbnN0YW5jZUlkOwotCX0KLQlwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJJbnN0YW5jZUlkKGphdmEubGFuZy5TdHJpbmcgc2VydmVySW5zdGFuY2VJZCkKLQl7Ci0JCXRoaXMuc2VydmVySW5zdGFuY2VJZCA9IHNlcnZlckluc3RhbmNlSWQ7Ci0JfQotCXB1YmxpYyBXZWJTZXJ2aWNlU3RhdGUgZ2V0U3RhdGUoKQotCXsKLQkJcmV0dXJuIHN0YXRlOwotCX0KLQlwdWJsaWMgdm9pZCBzZXRTdGF0ZShXZWJTZXJ2aWNlU3RhdGUgc3RhdGUpCi0JewotCQl0aGlzLnN0YXRlID0gc3RhdGU7Ci0JfQotCXB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldFdlYlNlcnZpY2VSdW50aW1lSWQoKQotCXsKLQkJcmV0dXJuIHdlYlNlcnZpY2VSdW50aW1lSWQ7Ci0JfQotCXB1YmxpYyB2b2lkIHNldFdlYlNlcnZpY2VSdW50aW1lSWQoamF2YS5sYW5nLlN0cmluZyB3ZWJTZXJ2aWNlUnVudGltZUlkKQotCXsKLQkJdGhpcy53ZWJTZXJ2aWNlUnVudGltZUlkID0gd2ViU2VydmljZVJ1bnRpbWVJZDsKLQl9Ci0JcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0V3NkbFVSTCgpCi0JewotCQlyZXR1cm4gd3NkbFVSTDsKLQl9Ci0JcHVibGljIHZvaWQgc2V0V3NkbFVSTChqYXZhLmxhbmcuU3RyaW5nIHdzZGxVUkwpCi0JewotCQl0aGlzLndzZGxVUkwgPSB3c2RsVVJMOwotCX0KLQlwdWJsaWMgamF2YS5sYW5nLlN0cmluZ1tdIGdldEltcGxVUkxzKCkKLQl7Ci0JCXJldHVybiBpbXBsVVJMczsKLQl9Ci0JcHVibGljIHZvaWQgc2V0SW1wbFVSTHMoamF2YS5sYW5nLlN0cmluZ1tdIGltcGxVUkxzKQotCXsKLQkJdGhpcy5pbXBsVVJMcyA9IGltcGxVUkxzOwotCQlsb2FkTWVyZ2VyKCk7Ci0JCQotCX0KLQlwdWJsaWMgSU1lcmdlciBnZXRNZXJnZXIoKSB7Ci0JCXJldHVybiBtZXJnZXI7Ci0JfQotCXB1YmxpYyB2b2lkIHNldE1lcmdlcihJTWVyZ2VyIG1lcmdlcikgewotCQl0aGlzLm1lcmdlciA9IG1lcmdlcjsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIGxvYWRNZXJnZXIoKSB7Ci0JCWlmIChtZXJnZXIgIT0gbnVsbCkgewotCQkJUGVyc2lzdGVudE1lcmdlQ29udGV4dCBtZXJnZUNvbnRleHQgPSBXU1BsdWdpbi5nZXRJbnN0YW5jZSgpLmdldE1lcmdlQ29udGV4dCgpOwotCQkJaWYgKG1lcmdlQ29udGV4dC5pc1NrZWxldG9uTWVyZ2VFbmFibGVkKCkpIHsKLQkJCQltZXJnZXIubG9hZChVbml2ZXJzYWxQYXRoVHJhbnNmb3JtZXIudG9GaWxlcyhpbXBsVVJMcykpOwotCQkJfQotCQl9Ci0JfQotCQotCS8qKgotCSAqIEByZXR1cm4gSW5kaWNhdGVkIHdoZXRoZXIgdGhlIGZyYW1ld29yayBoYWQgY3JlYXRlZCAKLQkgKiB0aGUgc2VydmVyIGluc3RhbmNlIHJlZmVyZW5jZWQgYnkgZ2V0U2VydmVySW5zdGFuY2VJZAotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzU2VydmVyQ3JlYXRlZCgpIHsKLQkJcmV0dXJuIHNlcnZlckNyZWF0ZWQ7Ci0JfQotCQotCS8qKgotCSAqIEBwYXJhbSBzZXJ2ZXJDcmVhdGVkIFRydWUgaWYgdGhlIGZyYW1ld29yayBoYWQgY3JlYXRlZCAKLQkgKiB0aGUgc2VydmVyIGluc3RhbmNlIHJlZmVyZW5jZWQgYnkgZ2V0U2VydmVySW5zdGFuY2VJZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldFNlcnZlckNyZWF0ZWQoYm9vbGVhbiBzZXJ2ZXJDcmVhdGVkKSB7Ci0JCXRoaXMuc2VydmVyQ3JlYXRlZCA9IHNlcnZlckNyZWF0ZWQ7Ci0JfQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L1dlYlNlcnZpY2VTY2VuYXJpby5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3Mvc3JjL29yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC93c3J0L1dlYlNlcnZpY2VTY2VuYXJpby5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZWNjZjFkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9XZWJTZXJ2aWNlU2NlbmFyaW8uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA2MDMyNCAgIDExNjc1MCByc2luaGFAY2EuaWJtLmNvbSAtIFJ1cGFtIEt1ZWhuZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwud3NydDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkFic3RyYWN0RW51bWVyYXRvcjsKLQotCi1wdWJsaWMgZmluYWwgY2xhc3MgV2ViU2VydmljZVNjZW5hcmlvIGV4dGVuZHMgQWJzdHJhY3RFbnVtZXJhdG9yCi17Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQk9UVE9NVVAgPSAwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUT1BET1dOID0gMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0xJRU5UID0gMjsKLSAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgV2ViU2VydmljZVNjZW5hcmlvIEJPVFRPTVVQX0xJVEVSQUwgPSBuZXcgV2ViU2VydmljZVNjZW5hcmlvKEJPVFRPTVVQLCAiQk9UVE9NVVAiKTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBXZWJTZXJ2aWNlU2NlbmFyaW8gVE9QRE9XTl9MSVRFUkFMID0gbmV3IFdlYlNlcnZpY2VTY2VuYXJpbyhUT1BET1dOLCAiVE9QRE9XTiIpOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFdlYlNlcnZpY2VTY2VuYXJpbyBDTElFTlRfTElURVJBTCA9IG5ldyBXZWJTZXJ2aWNlU2NlbmFyaW8oQ0xJRU5ULCAiQ0xJRU5UIik7Ci0KLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBXZWJTZXJ2aWNlU2NlbmFyaW9bXSBWQUxVRVNfQVJSQVkgPQotICAgIG5ldyBXZWJTZXJ2aWNlU2NlbmFyaW9bXQotICAgIHsKLQkgIEJPVFRPTVVQX0xJVEVSQUwsCi0JICBUT1BET1dOX0xJVEVSQUwsCi0JICBDTElFTlRfTElURVJBTCwKLSAgICB9OwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgTGlzdCBWQUxVRVMgPSBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVMaXN0KEFycmF5cy5hc0xpc3QoVkFMVUVTX0FSUkFZKSk7Ci0KLQotICBwdWJsaWMgc3RhdGljIFdlYlNlcnZpY2VTY2VuYXJpbyBnZXQoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IFZBTFVFU19BUlJBWS5sZW5ndGg7ICsraSkKLSAgICB7Ci0gICAgICBXZWJTZXJ2aWNlU2NlbmFyaW8gcmVzdWx0ID0gVkFMVUVTX0FSUkFZW2ldOwotICAgICAgaWYgKHJlc3VsdC50b1N0cmluZygpLmVxdWFscyhuYW1lKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotCi0gIHB1YmxpYyBzdGF0aWMgV2ViU2VydmljZVNjZW5hcmlvIGdldChpbnQgdmFsdWUpCi0gIHsKLSAgICBzd2l0Y2ggKHZhbHVlKQotICAgIHsKLSAgICAgIGNhc2UgQk9UVE9NVVA6IHJldHVybiBCT1RUT01VUF9MSVRFUkFMOwotICAgICAgY2FzZSBUT1BET1dOOiByZXR1cm4gVE9QRE9XTl9MSVRFUkFMOwotICAgICAgY2FzZSBDTElFTlQ6IHJldHVybiBDTElFTlRfTElURVJBTDsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7CQotICB9Ci0KLSAgLyoqCi0gICAqIE9ubHkgdGhpcyBjbGFzcyBjYW4gY29uc3RydWN0IGluc3RhbmNlcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgV2ViU2VydmljZVNjZW5hcmlvKGludCB2YWx1ZSwgU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcih2YWx1ZSwgbmFtZSk7Ci0gIH0KLSAgCi0KLX0gLy9XZWJTZXJ2aWNlU2NlbmFyaW8KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9XZWJTZXJ2aWNlU3RhdGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvd3NydC9XZWJTZXJ2aWNlU3RhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2YyMGMwZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3dzcnQvV2ViU2VydmljZVN0YXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0OwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkFic3RyYWN0RW51bWVyYXRvcjsKLQotCi1wdWJsaWMgZmluYWwgY2xhc3MgV2ViU2VydmljZVN0YXRlIGV4dGVuZHMgQWJzdHJhY3RFbnVtZXJhdG9yCi17Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVU5LTk9XTiA9IDA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFVkVMT1BFRCA9IDE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFTU0VNQkxFRCA9IDI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFUExPWUVEID0gMzsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5TVEFMTEVEID0gNDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUlVOTklORyA9IDU7Ci0gIAotICAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBXZWJTZXJ2aWNlU3RhdGUgVU5LTk9XTl9MSVRFUkFMID0gbmV3IFdlYlNlcnZpY2VTdGF0ZShVTktOT1dOLCAiVU5LTk9XTiIpOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFdlYlNlcnZpY2VTdGF0ZSBERVZFTE9QRURfTElURVJBTCA9IG5ldyBXZWJTZXJ2aWNlU3RhdGUoREVWRUxPUEVELCAiREVWRUxPUEVEIik7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgV2ViU2VydmljZVN0YXRlIEFTU0VNQkxFRF9MSVRFUkFMID0gbmV3IFdlYlNlcnZpY2VTdGF0ZShBU1NFTUJMRUQsICJBU1NFTUJMRUQiKTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBXZWJTZXJ2aWNlU3RhdGUgREVQTE9ZRURfTElURVJBTCA9IG5ldyBXZWJTZXJ2aWNlU3RhdGUoREVQTE9ZRUQsICJERVBMT1lFRCIpOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFdlYlNlcnZpY2VTdGF0ZSBJTlNUQUxMRURfTElURVJBTCA9IG5ldyBXZWJTZXJ2aWNlU3RhdGUoSU5TVEFMTEVELCAiSU5TVEFMTEVEIik7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgV2ViU2VydmljZVN0YXRlIFJVTk5JTkdfTElURVJBTCA9IG5ldyBXZWJTZXJ2aWNlU3RhdGUoUlVOTklORywgIlJVTk5JTkciKTsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBXZWJTZXJ2aWNlU3RhdGVbXSBWQUxVRVNfQVJSQVkgPQotICAgIG5ldyBXZWJTZXJ2aWNlU3RhdGVbXQotICAgIHsKLQkgIFVOS05PV05fTElURVJBTCwKLQkgIERFVkVMT1BFRF9MSVRFUkFMLAotCSAgQVNTRU1CTEVEX0xJVEVSQUwsCi0JICBERVBMT1lFRF9MSVRFUkFMLAotCSAgSU5TVEFMTEVEX0xJVEVSQUwsCi0JICBSVU5OSU5HX0xJVEVSQUwsCi0gICAgfTsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIExpc3QgVkFMVUVTID0gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTGlzdChBcnJheXMuYXNMaXN0KFZBTFVFU19BUlJBWSkpOwotCi0KLSAgcHVibGljIHN0YXRpYyBXZWJTZXJ2aWNlU3RhdGUgZ2V0KFN0cmluZyBuYW1lKQotICB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBWQUxVRVNfQVJSQVkubGVuZ3RoOyArK2kpCi0gICAgewotICAgICAgV2ViU2VydmljZVN0YXRlIHJlc3VsdCA9IFZBTFVFU19BUlJBWVtpXTsKLSAgICAgIGlmIChyZXN1bHQudG9TdHJpbmcoKS5lcXVhbHMobmFtZSkpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLQotICBwdWJsaWMgc3RhdGljIFdlYlNlcnZpY2VTdGF0ZSBnZXQoaW50IHZhbHVlKQotICB7Ci0gICAgc3dpdGNoICh2YWx1ZSkKLSAgICB7Ci0gICAgICBjYXNlIFVOS05PV046IHJldHVybiBVTktOT1dOX0xJVEVSQUw7Ci0gICAgICBjYXNlIERFVkVMT1BFRDogcmV0dXJuIERFVkVMT1BFRF9MSVRFUkFMOwotICAgICAgY2FzZSBBU1NFTUJMRUQ6IHJldHVybiBBU1NFTUJMRURfTElURVJBTDsKLQkgIGNhc2UgREVQTE9ZRUQ6IHJldHVybiBERVBMT1lFRF9MSVRFUkFMOwotCSAgY2FzZSBJTlNUQUxMRUQ6IHJldHVybiBJTlNUQUxMRURfTElURVJBTDsKLQkgIGNhc2UgUlVOTklORzogcmV0dXJuIFJVTk5JTkdfTElURVJBTDsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7CQotICB9Ci0KLSAgLyoqCi0gICAqIE9ubHkgdGhpcyBjbGFzcyBjYW4gY29uc3RydWN0IGluc3RhbmNlcy4KLSAgICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLSAgICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0gICAqIEBnZW5lcmF0ZWQKLSAgICovCi0gIHByaXZhdGUgV2ViU2VydmljZVN0YXRlKGludCB2YWx1ZSwgU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcih2YWx1ZSwgbmFtZSk7Ci0gIH0KLQotfSAvL1dlYlNlcnZpY2VTdGF0ZQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLy5jbGFzc3BhdGggYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5MTc4NzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjLWFzZCIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYy1hc2Qtd3NkbDExIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjLXJlZmFjdG9yIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjLXNvYXAiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMtc2VhcmNoIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNCI+Ci0JCTxhY2Nlc3NydWxlcz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49ImphdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUiLz4KLQkJPC9hY2Nlc3NydWxlcz4KLQk8L2NsYXNzcGF0aGVudHJ5PgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyI+Ci0JCTxhY2Nlc3NydWxlcz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy9lY2xpcHNlL3dzdC8qKiIvPgotCQk8L2FjY2Vzc3J1bGVzPgotCTwvY2xhc3NwYXRoZW50cnk+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTY1ZjYyYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLWJpbgotYnVpbGQueG1sCi13c2RsZWRpdG9yLmphcgotdGVtcC5mb2xkZXIKLW9yZy5lY2xpcHNlLndzdC53c2RsLnVpXzEuMC4wLmphcgotQGRvdAotc3JjLnppcAotamF2YUNvbXBpbGVyLi4uYXJncwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS8ucHJvamVjdCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1YTRkZGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC53c2RsLnVpPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3MTVjMmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0jU3VuIEp1biAwMyAwMDo0OTowNiBFRFQgMjAwNwotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmF3VHlwZVJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmJmN2FjOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNNb24gSmFuIDMwIDIzOjM4OjE1IEVTVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotaW50ZXJuYWwuZGVmYXVsdC5jb21wbGlhbmNlPWRlZmF1bHQKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzU2ZDE1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlX1VJX1BMVUdJTl9OQU1FCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3Qud3NkbC51aTsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4yLjEwMC5xdWFsaWZpZXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWN0aW9uczt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmFjdGlvbnMsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuc3BlY2lhbGl6ZWQsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMudmlzaXRvciwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbiwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmNvbm5lY3Rpb25zLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZGlyZWN0ZWRpdCwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cywKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5tb2RlbCwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwb2xpY2llcywKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmZpZ3VyZXMsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5sYXlvdXRzLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLnByb3BlcnRpZXMuc2VjdGlvbnMsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLnV0aWwsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHM7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5kaWFsb2dzO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZWRpdCwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5leHRlbnNpb25zLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmZpbHRlcjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmljb25zO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwubGFiZWwucHJvdmlkZXJzLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnByb3BlcnRpZXMuc2VjdGlvbnMsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwucmVjb25jaWxlcjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnJlZmFjdG9yO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc2VhcmNoO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc2VhcmNoLmFjdGlvbnM7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5zb2FwLmN1c3RvbWl6YXRpb25zO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudGV4dDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC52aXNpdG9yO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwud2l6YXJkczt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnhzZDt4LWludGVybmFsOj10cnVlCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXM7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmVtZi5jb21tb247YnVuZGxlLXZlcnNpb249IlsyLjIuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLmVtZi5lY29yZTtidW5kbGUtdmVyc2lvbj0iWzIuMi4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2UuZ2VmO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZmFjZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamZhY2UudGV4dDtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UudWk7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpLmVkaXRvcnM7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpLmlkZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UudWkudmlld3M7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC50ZXh0ZWRpdG9yO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5zc2UudWk7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlcjtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS53c3QueG1sLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLnhzZDtidW5kbGUtdmVyc2lvbj0iWzIuMi4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGw7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnhzZC51aTtidW5kbGUtdmVyc2lvbj0iWzEuMi4wLDEuMy4wKSIsCi0gb3JnLmVjbGlwc2UuZW1mLmVkaXQ7YnVuZGxlLXZlcnNpb249IlsyLjIuMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpO2J1bmRsZS12ZXJzaW9uPSJbMi4yLjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbjtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gamF2YXgud3NkbDtidW5kbGUtdmVyc2lvbj0iWzEuNC4wLDEuNS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbjtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3Jpbmc7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmx0ay51aS5yZWZhY3RvcmluZztidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gY29tLmlibS5pY3U7YnVuZGxlLXZlcnNpb249IlszLjQuNCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmFwYWNoZS54ZXJjZXM7YnVuZGxlLXZlcnNpb249IlsyLjguMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMudGFiYmVkO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnY7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAyLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53cy51aTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDEsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS5zZWFyY2g7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiCi1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL2Fib3V0Lmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGIzNmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL2J1aWxkLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2NjkyZDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLWJpbi5pbmNsdWRlcyA9IHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgaWNvbnMvLFwKLSAgICAgICAgICAgICAgIC4sXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwKLWphcnMuY29tcGlsZS5vcmRlciA9IC4KLXNvdXJjZS4uID0gc3JjLWFzZC8sXAotICAgICAgICAgICBzcmMtYXNkLXdzZGwxMSxcCi0gICAgICAgICAgIHNyYy1yZWZhY3Rvci8sXAotICAgICAgICAgICBzcmMtc29hcC8sXAotICAgICAgICAgICBzcmMtc2VhcmNoLwotb3V0cHV0Li4gPSBiaW4vCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL2ljb25zL2RsY2wxNi9zaG93cHJvcGVydGllc19vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9pY29ucy9kbGNsMTYvc2hvd3Byb3BlcnRpZXNfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDk0ZmYxMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL2ljb25zL2RsY2wxNi9zaG93cHJvcGVydGllc19vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9pY29ucy9kdG9vbDE2L2NhcHR1cmVzY3JlZW4uZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9pY29ucy9kdG9vbDE2L2NhcHR1cmVzY3JlZW4uZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTcwYzkwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvaWNvbnMvZHRvb2wxNi9jYXB0dXJlc2NyZWVuLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvaWNvbnMvZWxjbDE2L3Nob3dwcm9wZXJ0aWVzX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL2ljb25zL2VsY2wxNi9zaG93cHJvcGVydGllc19vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZGMxOWEzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvaWNvbnMvZWxjbDE2L3Nob3dwcm9wZXJ0aWVzX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL2ljb25zL2V0b29sMTYvY2FwdHVyZXNjcmVlbi5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL2ljb25zL2V0b29sMTYvY2FwdHVyZXNjcmVlbi5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3NjgzMGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9pY29ucy9ldG9vbDE2L2NhcHR1cmVzY3JlZW4uZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9pY29ucy9yZWxvYWRncmFtbWFyLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvaWNvbnMvcmVsb2FkZ3JhbW1hci5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkNGM5Y2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9pY29ucy9yZWxvYWRncmFtbWFyLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvaWNvbnMvdmFsaWRhdGUuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9pY29ucy92YWxpZGF0ZS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiMzQ3YWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9pY29ucy92YWxpZGF0ZS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL2ljb25zL3dzZGxfZmlsZV9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9pY29ucy93c2RsX2ZpbGVfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzViMWY5Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL2ljb25zL3dzZGxfZmlsZV9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9wbHVnaW4ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0OWFmNmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLV9VSV9MQUJFTF9ORVdfQ0FURUdPUllfTkFNRV9XUz1XZWIgU2VydmljZXMKLV9VSV9MQUJFTF9DUkVBVEVfTkVXX1dTRExfRklMRT1DcmVhdGUgYSBuZXcgV1NETCBGaWxlCi1fVUlfV1NETF9MQUJFTD1XU0RMIEZpbGVzCi1fVUlfTEFCRUxfR0VORVJBTD1HZW5lcmFsCi1fVUlfTEFCRUxfRE9DVU1FTlRBVElPTj1Eb2N1bWVudGF0aW9uCi1fVUlfTEFCRUxfRVhURU5TSU9OUz1FeHRlbnNpb25zCi1fVUlfTEFCRUxfUkVGQUNUT1I9UmVmYWN0b3IKLV9VSV9FRElUT1JfTkFNRT1XU0RMIEVkaXRvcgotX1VJX1JFTE9BRF9ERVBFTkRFTkNJRVM9UmVsb2FkIERlcGVuZGVuY2llcwotcmVmYWN0b3JpbmcubWVudS5sYWJlbD1SZWZhY3RvcgotQWRkQm9va21hcmsubGFiZWw9QWRkIEJvbyZrbWFyay4uLgotQWRkQm9va21hcmsudG9vbHRpcD1BZGQgQm9va21hcmsuLi4KLVNlbGVjdFJ1bGVyLmxhYmVsPVNlbGVjdCBSdWxlcgotQWRkVGFzay5sYWJlbD1BZGQgJlRhc2suLi4KLUFkZFRhc2sudG9vbHRpcD1BZGQgVGFzay4uLgotV1NETEVkaXRvck1vZGVzPVdTREwgRWRpdG9yIE1vZGVzCi0KLWNvbW1hbmQud3NkbC5yZWZhY3Rvci5yZW5hbWUuZWxlbWVudC5uYW1lPVJlbmFtZSBXU0RMIGNvbXBvbmVudAotCi1fVUlfUExVR0lOX05BTUU9V1NETCBVSQotcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCi0jIwotV1NETF9Tb3VyY2VfdGFyZ2V0X25hbWU9V1NETCBTb3VyY2UKLVdTRExfaHlwZXJsaW5rPVdTREwgQ29udGVudApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvcGx1Z2luLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRjMzUzYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1MTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLTxwbHVnaW4+Ci0KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5lZGl0b3JzIj4KLQkJPGVkaXRvcgotCQkJbmFtZT0iJV9VSV9FRElUT1JfTkFNRSIKLQkJCWljb249Imljb25zL3dzZGxfZmlsZV9vYmouZ2lmIgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLkludGVybmFsV1NETE11bHRpUGFnZUVkaXRvciIKLQkJCWNvbnRyaWJ1dG9yQ2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExBY3Rpb25CYXJDb250cmlidXRvciIKLQkJCWlkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yIj4KLQkJCTxjb250ZW50VHlwZUJpbmRpbmcKLQkJCQljb250ZW50VHlwZUlkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC53c2Rsc291cmNlIiAvPgotCQk8L2VkaXRvcj4KLQk8L2V4dGVuc2lvbj4KLQkKLQkJPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkubmV3V2l6YXJkcyI+Ci0JCTxjYXRlZ29yeQotCQkJaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy51aS5uZXciCi0JCQluYW1lPSIlX1VJX0xBQkVMX05FV19DQVRFR09SWV9OQU1FX1dTIiAvPgotCQk8d2l6YXJkCi0JCQlpZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkiCi0JCQluYW1lPSJXU0RMIgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLndpemFyZHMuTmV3V1NETFdpemFyZCIKLQkJCWNhdGVnb3J5PSJvcmcuZWNsaXBzZS5qc3Qud3MudWkubmV3IgotCQkJaWNvbj0iaWNvbnMvd3NkbF9maWxlX29iai5naWYiPgotCQkJPGRlc2NyaXB0aW9uPiVfVUlfTEFCRUxfQ1JFQVRFX05FV19XU0RMX0ZJTEU8L2Rlc2NyaXB0aW9uPgotCQkJPHNlbGVjdGlvbiBjbGFzcz0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlIiAvPgotCQk8L3dpemFyZD4KLQk8L2V4dGVuc2lvbj4KLQkKLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wcmVmZXJlbmNlUGFnZXMiPgotCQk8IS0tIHBsYWNlIGV2ZXJ5dGhpbmcgaW4gIldlYiBhbmQgWE1MIiAtLT4KLQkJPHBhZ2UKLQkJCW5hbWU9IiVfVUlfV1NETF9MQUJFTCIKLQkJCWNhdGVnb3J5PSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnByb3Zpc2lvbmFsLnByZWZlcmVuY2VzIgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExQcmVmZXJlbmNlUGFnZSIKLQkJCWlkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMUHJlZmVyZW5jZVBhZ2UiIC8+Ci0JPC9leHRlbnNpb24+Ci0KLQk8IS0tIFRoaXMgZXh0ZW5zaW9uIHBvaW50IGlzIHVzZWQgdG8gc3VwbGVtZW50IFdTREwgMS4xIHNjaGVtYXMgaW4gb3JkZXIgdG8gICAtLT4KLQk8IS0tIGNvbnN0cmFpbiB0aGUgZXh0ZW5zaWJsaXR5IGVsZW1lbnRzIHRoYXQgYXJlIGFsbG93ZWQgYXQgdGhlICd3c2RsJyBsZXZlbCAtLT4KLQk8ZXh0ZW5zaW9uLXBvaW50Ci0JCWlkPSJleHRlbnNpYmlsaXR5RWxlbWVudEZpbHRlciIKLQkJbmFtZT0iRXh0ZW5zaWJsaXR5IEVsZW1lbnQgRmlsdGVyIgotCQlzY2hlbWE9InNjaGVtYS9leHRlbnNpYmlsaXR5RWxlbWVudEZpbHRlci5leHNkIiAvPgotCQkKLQk8ZXh0ZW5zaW9uLXBvaW50IGlkPSJpbnRlcm5hbEVkaXRvckNvbmZpZ3VyYXRpb24iIG5hbWU9IldTRExFZGl0b3JFeHRlbnNpb25Db25maWd1cmF0aW9uIi8+ICAgIAotICAgIDxleHRlbnNpb24tcG9pbnQgaWQ9ImVkaXRvck1vZGVzIiBuYW1lPSIlV1NETEVkaXRvck1vZGVzIi8+Ci0JPGV4dGVuc2lvbi1wb2ludCBpZD0iZXh0ZW5zaW9uQ2F0ZWdvcmllcyIgbmFtZT0iRXh0ZW5zaW9uIENhdGVnb3JpZXMiLz4JCQotCi0JPGV4dGVuc2lvbgotCQlwb2ludD0ib3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy50YWJiZWQucHJvcGVydHlDb250cmlidXRvciI+Ci0JCTxwcm9wZXJ0eUNvbnRyaWJ1dG9yCi0JCQljb250cmlidXRvcklkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yIgotCi0JCQlsYWJlbFByb3ZpZGVyPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNETGFiZWxQcm92aWRlciI+CQkJCi0JCQk8cHJvcGVydHlDYXRlZ29yeSBjYXRlZ29yeT0iZ2VuZXJhbCI+PC9wcm9wZXJ0eUNhdGVnb3J5PgotCQkJPHByb3BlcnR5Q2F0ZWdvcnkgY2F0ZWdvcnk9ImRvY3VtZW50YXRpb24iPjwvcHJvcGVydHlDYXRlZ29yeT4KLQkJCTxwcm9wZXJ0eUNhdGVnb3J5IGNhdGVnb3J5PSJleHRlbnNpYmlsaXR5Ij48L3Byb3BlcnR5Q2F0ZWdvcnk+Ci0JCTwvcHJvcGVydHlDb250cmlidXRvcj4KLQk8L2V4dGVuc2lvbj4KLQk8ZXh0ZW5zaW9uCi0JCXBvaW50PSJvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLnRhYmJlZC5wcm9wZXJ0eVRhYnMiPgotCQk8cHJvcGVydHlUYWJzCi0JCQljb250cmlidXRvcklkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yIj4KLQkJCTxwcm9wZXJ0eVRhYgotCQkJCWxhYmVsPSIlX1VJX0xBQkVMX0dFTkVSQUwiCi0JCQkJY2F0ZWdvcnk9ImdlbmVyYWwiCi0JCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC54bWx3ZWJzZXJ2aWNlcy5nZW5lcmFsIj4KLQkJCTwvcHJvcGVydHlUYWI+Ci0JCQk8cHJvcGVydHlUYWIKLQkJCQlsYWJlbD0iJV9VSV9MQUJFTF9FWFRFTlNJT05TIgotCQkJCWNhdGVnb3J5PSJleHRlbnNpYmlsaXR5IgotCQkJCWlkPSJvcmcuZWNsaXBzZS53c3QueG1sd2Vic2VydmljZXMuZXh0ZW5zaWJpbGl0eSI+Ci0JCQk8L3Byb3BlcnR5VGFiPgotCQkJPHByb3BlcnR5VGFiCi0JCQkJbGFiZWw9IiVfVUlfTEFCRUxfRE9DVU1FTlRBVElPTiIKLQkJCQljYXRlZ29yeT0iZG9jdW1lbnRhdGlvbiIKLQkJCQlpZD0ib3JnLmVjbGlwc2Uud3N0LnhtbHdlYnNlcnZpY2VzLmRvY3VtZW50YXRpb24iPgotCQkJPC9wcm9wZXJ0eVRhYj4KLQkJPC9wcm9wZXJ0eVRhYnM+Ci0JPC9leHRlbnNpb24+Ci0JCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy50YWJiZWQucHJvcGVydHlTZWN0aW9ucyI+Ci0gICA8cHJvcGVydHlTZWN0aW9ucyBjb250cmlidXRvcklkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yIj4KLSAgICAgPHByb3BlcnR5U2VjdGlvbiB0YWI9Im9yZy5lY2xpcHNlLndzdC54bWx3ZWJzZXJ2aWNlcy5kb2N1bWVudGF0aW9uIiAKLSAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5wcm9wZXJ0aWVzLnNlY3Rpb25zLkRvY3VtZW50YXRpb25TZWN0aW9uIgotCSAJaWQ9InByb3Auc2VjdGlvbi5Eb2N1bWVudGF0aW9uU2VjdGlvbiI+Ci0JICAgIDxpbnB1dCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklBU0RPYmplY3QiPgotCSAgICA8L2lucHV0PgotCSA8L3Byb3BlcnR5U2VjdGlvbj4KLSAgIAotICAgCSA8cHJvcGVydHlTZWN0aW9uIHRhYj0ib3JnLmVjbGlwc2Uud3N0LnhtbHdlYnNlcnZpY2VzLmdlbmVyYWwiIAotICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLnByb3BlcnRpZXMuc2VjdGlvbnMuTmFtZVNlY3Rpb24iICAKLQkgCWlkPSJwcm9wLnNlY3Rpb24uTmFtZVNlY3Rpb24iPgotCSAgICA8aW5wdXQgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTWVzc2FnZSI+Ci0JICAgIDwvaW5wdXQ+Ci0JIDwvcHJvcGVydHlTZWN0aW9uPgotCSAKLSAgIAkgPHByb3BlcnR5U2VjdGlvbiB0YWI9Im9yZy5lY2xpcHNlLndzdC54bWx3ZWJzZXJ2aWNlcy5nZW5lcmFsIiAKLSAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnByb3BlcnRpZXMuc2VjdGlvbnMuVzExUGFyYW1ldGVyU2VjdGlvbiIKLSAgICAgICAgZmlsdGVyPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5wcm9wZXJ0aWVzLnNlY3Rpb25zLlcxMVBhcmFtZXRlclNlY3Rpb25GaWx0ZXIiCi0JIAlpZD0icHJvcC5zZWN0aW9uLlcxMVBhcmFtZXRlclNlY3Rpb24iPgotCSAgICA8aW5wdXQgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JUGFyYW1ldGVyIj4KLQkgICAgPC9pbnB1dD4KLQkgPC9wcm9wZXJ0eVNlY3Rpb24+Ci0JIAotICAgCSA8cHJvcGVydHlTZWN0aW9uIHRhYj0ib3JnLmVjbGlwc2Uud3N0LnhtbHdlYnNlcnZpY2VzLmdlbmVyYWwiIAotICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLnByb3BlcnRpZXMuc2VjdGlvbnMuTmFtZVNlY3Rpb24iICAKLQkgCWlkPSJwcm9wLnNlY3Rpb24uTmFtZVNlY3Rpb24iPgotCSAgICA8aW5wdXQgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JT3BlcmF0aW9uIj4KLQkgICAgPC9pbnB1dD4KLQkgPC9wcm9wZXJ0eVNlY3Rpb24+Ci0JIAotCSA8cHJvcGVydHlTZWN0aW9uIHRhYj0ib3JnLmVjbGlwc2Uud3N0LnhtbHdlYnNlcnZpY2VzLmdlbmVyYWwiIAotICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLnByb3BlcnRpZXMuc2VjdGlvbnMuTmFtZVNlY3Rpb24iICAKLQkgCWlkPSJwcm9wLnNlY3Rpb24uTmFtZVNlY3Rpb24iPgotCSAgICA8aW5wdXQgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JSW50ZXJmYWNlIj4KLQkgICAgPC9pbnB1dD4KLQkgPC9wcm9wZXJ0eVNlY3Rpb24+Ci0KLQkgPHByb3BlcnR5U2VjdGlvbiB0YWI9Im9yZy5lY2xpcHNlLndzdC54bWx3ZWJzZXJ2aWNlcy5nZW5lcmFsIiAKLSAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5wcm9wZXJ0aWVzLnNlY3Rpb25zLk5hbWVTZWN0aW9uIiAgCi0JIAlpZD0icHJvcC5zZWN0aW9uLk5hbWVTZWN0aW9uIj4KLQkgICAgPGlucHV0IHR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVNlcnZpY2UiPgotCSAgICA8L2lucHV0PgotCSA8L3Byb3BlcnR5U2VjdGlvbj4KLQkgCi0JIDxwcm9wZXJ0eVNlY3Rpb24gdGFiPSJvcmcuZWNsaXBzZS53c3QueG1sd2Vic2VydmljZXMuZ2VuZXJhbCIgCi0gICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QucHJvcGVydGllcy5zZWN0aW9ucy5FbmRQb2ludFNlY3Rpb24iICAKLQkgCWlkPSJwcm9wLnNlY3Rpb24uRW5kUG9pbnRTZWN0aW9uIj4KLQkgICAgPGlucHV0IHR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUVuZFBvaW50Ij4KLQkgICAgPC9pbnB1dD4KLQkgPC9wcm9wZXJ0eVNlY3Rpb24+Ci0KLQkgPHByb3BlcnR5U2VjdGlvbiB0YWI9Im9yZy5lY2xpcHNlLndzdC54bWx3ZWJzZXJ2aWNlcy5nZW5lcmFsIiAKLSAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5wcm9wZXJ0aWVzLnNlY3Rpb25zLkJpbmRpbmdTZWN0aW9uIiAgCi0JIAlpZD0icHJvcC5zZWN0aW9uLkJpbmRpbmdTZWN0aW9uIj4KLQkgICAgPGlucHV0IHR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUJpbmRpbmciPgotCSAgICA8L2lucHV0PgotCSA8L3Byb3BlcnR5U2VjdGlvbj4KLQkgCi0JIDxwcm9wZXJ0eVNlY3Rpb24gdGFiPSJvcmcuZWNsaXBzZS53c3QueG1sd2Vic2VydmljZXMuZ2VuZXJhbCIgCi0gICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QucHJvcGVydGllcy5zZWN0aW9ucy5JbXBvcnRTZWN0aW9uIiAgCi0JIAlpZD0icHJvcC5zZWN0aW9uLkltcG9ydFNlY3Rpb24iPgotCSAgICA8aW5wdXQgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JSW1wb3J0Ij4KLQkgICAgPC9pbnB1dD4KLQkgPC9wcm9wZXJ0eVNlY3Rpb24+Ci0JIDwhLS0KLQkgPHByb3BlcnR5U2VjdGlvbiB0YWI9Im9yZy5lY2xpcHNlLndzdC54bWx3ZWJzZXJ2aWNlcy5nZW5lcmFsIiAKLSAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLmFzZC5lZGl0b3IucHJvcGVydGllcy5zZWN0aW9ucy5TY2hlbWFTZWN0aW9uIiAgCi0JIAlpZD0icHJvcC5zZWN0aW9uLlNjaGVtYVNlY3Rpb24iPgotCSAgICA8aW5wdXQgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuYXNkLmZhY2FkZS5JVHlwZSI+Ci0JICAgIDwvaW5wdXQ+Ci0JIDwvcHJvcGVydHlTZWN0aW9uPgkgCi0JLS0+Ci0KLQkgPHByb3BlcnR5U2VjdGlvbiB0YWI9Im9yZy5lY2xpcHNlLndzdC54bWx3ZWJzZXJ2aWNlcy5nZW5lcmFsIiAKLSAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5wcm9wZXJ0aWVzLnNlY3Rpb25zLk5hbWVzcGFjZVNlY3Rpb24iCi0JIAlpZD0icHJvcC5zZWN0aW9uLk5hbWVzcGFjZVNlY3Rpb24iPgotCSAgICA8aW5wdXQgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRGVzY3JpcHRpb24iPgotCSAgICA8L2lucHV0PgotCSA8L3Byb3BlcnR5U2VjdGlvbj4KLQkgCi0JIDxwcm9wZXJ0eVNlY3Rpb24gdGFiPSJvcmcuZWNsaXBzZS53c3QueG1sd2Vic2VydmljZXMuZ2VuZXJhbCIgCi0gICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QucHJvcGVydGllcy5zZWN0aW9ucy5OYW1lc3BhY2VTZWN0aW9uIgotCSAJaWQ9InByb3Auc2VjdGlvbi5OYW1lc3BhY2VTZWN0aW9uIj4KLQkgICAgPGlucHV0IHR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLm1vZGVsLkFic3RyYWN0TW9kZWxDb2xsZWN0aW9uIj4KLQkgICAgPC9pbnB1dD4KLQkgPC9wcm9wZXJ0eVNlY3Rpb24+Ci0JIAotCSA8cHJvcGVydHlTZWN0aW9uIHRhYj0ib3JnLmVjbGlwc2Uud3N0LnhtbHdlYnNlcnZpY2VzLmdlbmVyYWwiIAotICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLnByb3BlcnRpZXMuc2VjdGlvbnMuTmFtZXNwYWNlU2VjdGlvbiIKLQkgCWlkPSJwcm9wLnNlY3Rpb24uTmFtZXNwYWNlU2VjdGlvbiI+Ci0JICAgIDxpbnB1dCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFDYXRlZ29yeUFkYXB0ZXIiPgotCSAgICA8L2lucHV0PgotCSA8L3Byb3BlcnR5U2VjdGlvbj4KLQkgCi0KLQkgPHByb3BlcnR5U2VjdGlvbiB0YWI9Im9yZy5lY2xpcHNlLndzdC54bWx3ZWJzZXJ2aWNlcy5nZW5lcmFsIiAKLSAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnByb3BlcnRpZXMuc2VjdGlvbnMuVzExTWVzc2FnZVJlZmVyZW5jZVNlY3Rpb24iCi0JCWZpbHRlcj0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwucHJvcGVydGllcy5zZWN0aW9ucy5XMTFNZXNzYWdlUmVmZXJlbmNlU2VjdGlvbkZpbHRlciIKLQkgCWlkPSJwcm9wLnNlY3Rpb24uTWVzc2FnZVJlZmVyZW5jZVNlY3Rpb24iPgotCSAgICA8aW5wdXQgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTWVzc2FnZVJlZmVyZW5jZSI+Ci0JICAgIDwvaW5wdXQ+Ci0JIDwvcHJvcGVydHlTZWN0aW9uPgotCSAKLQkgPCEtLSBtb3ZlIHRvIHdzZGwgc3BlY2lmaWMgcGx1Z2luIC0tPgotCSA8cHJvcGVydHlTZWN0aW9uIHRhYj0ib3JnLmVjbGlwc2Uud3N0LnhtbHdlYnNlcnZpY2VzLmV4dGVuc2liaWxpdHkiIAotICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwucHJvcGVydGllcy5zZWN0aW9ucy5XMTFFeHRlbnNpb25zU2VjdGlvbiIKLQkgCWlkPSJwcm9wLnNlY3Rpb24uVzExQXBwbGljYXRpb25JbmZvU2VjdGlvbiI+Ci0JICAgIDxpbnB1dCB0eXBlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5XU0RMQmFzZUFkYXB0ZXIiPgotCSAgICA8L2lucHV0PgotCSA8L3Byb3BlcnR5U2VjdGlvbj4KLQkgCi0JIDxwcm9wZXJ0eVNlY3Rpb24gdGFiPSJvcmcuZWNsaXBzZS53c3QueG1sd2Vic2VydmljZXMuZXh0ZW5zaWJpbGl0eSIgCi0gICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5wcm9wZXJ0aWVzLnNlY3Rpb25zLlcxMUV4dGVuc2lvbnNTZWN0aW9uIgotCSAJaWQ9InByb3Auc2VjdGlvbi5XMTFBcHBsaWNhdGlvbkluZm9TZWN0aW9uIj4KLQkgICAgPGlucHV0IHR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLm1vZGVsLkFic3RyYWN0TW9kZWxDb2xsZWN0aW9uIj4KLQkgICAgPC9pbnB1dD4KLQkgPC9wcm9wZXJ0eVNlY3Rpb24+Ci0JIAotCSA8cHJvcGVydHlTZWN0aW9uIHRhYj0ib3JnLmVjbGlwc2Uud3N0LnhtbHdlYnNlcnZpY2VzLmdlbmVyYWwiCi0gICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QucHJvcGVydGllcy5zZWN0aW9ucy5OYW1lU2VjdGlvbiIKLQkgCWlkPSJwcm9wLnNlY3Rpb24uTmFtZVNlY3Rpb24iPgotCSAgICA8aW5wdXQgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQmluZGluZ09wZXJhdGlvbiI+Ci0JICAgIDwvaW5wdXQ+Ci0JIDwvcHJvcGVydHlTZWN0aW9uPgotCSAJIAotCSA8cHJvcGVydHlTZWN0aW9uIHRhYj0ib3JnLmVjbGlwc2Uud3N0LnhtbHdlYnNlcnZpY2VzLmdlbmVyYWwiCi0gICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QucHJvcGVydGllcy5zZWN0aW9ucy5OYW1lU2VjdGlvbiIKLQkgCWlkPSJwcm9wLnNlY3Rpb24uTmFtZVNlY3Rpb24iPgotCSAgICA8aW5wdXQgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQmluZGluZ01lc3NhZ2VSZWZlcmVuY2UiPgotCSAgICA8L2lucHV0PgotCSA8L3Byb3BlcnR5U2VjdGlvbj4KLSAgPC9wcm9wZXJ0eVNlY3Rpb25zPgotPC9leHRlbnNpb24+Ci0KLSAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmV4dGVuc2lvbkNhdGVnb3JpZXMiPgotICAgICA8Y2F0ZWdvcnkKLSAgICAgCWRpc3BsYXlOYW1lPSJIVFRQIgotICAgICAgCW5hbWVzcGFjZVVSST0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9odHRwLyI+Ci0gICAgICA8L2NhdGVnb3J5PgotCi0gICAgIDxjYXRlZ29yeQotICAgICAJZGlzcGxheU5hbWU9IlNPQVAiCi0gICAgICAJbmFtZXNwYWNlVVJJPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLSAgICAgPC9jYXRlZ29yeT4KLQotICAgICA8Y2F0ZWdvcnkKLSAgICAgICAgZGlzcGxheU5hbWU9Ik1JTUUiCi0gICAgICAJbmFtZXNwYWNlVVJJPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL21pbWUvIj4KLSAgICAgPC9jYXRlZ29yeT4KLSAgIDwvZXh0ZW5zaW9uPgotICAgCi0gICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wb3B1cE1lbnVzIj4gCi0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uIAotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLnJlZmFjdG9yaW5nLm1lbnUub2JqZWN0Q29udHJpYiIgCi0gICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuV1NETEJhc2VBZGFwdGVyIj4gIAotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsZWRpdG9yLnJlZmFjdG9yaW5nLm1lbnUucmVmYWN0b3JHcm91cC5vYmplY3QiIAotICAgICAgICAgICAgZW5hYmxlc0Zvcj0iMSIKLSAgICAgICAgICAgIHN0eWxlPSJwdWxsZG93biIKLSAgICAgICAgICAgIG1lbnViYXJQYXRoPSJyZWZhY3RvcmluZy1zbG90LXRlbXAiCi0gICAgICAgICAgICBsYWJlbD0iJV9VSV9MQUJFTF9SRUZBQ1RPUiIgCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwucmVmYWN0b3IuYWN0aW9ucy5XU0RMUmVmYWN0b3JHcm91cEFjdGlvbkRlbGVnYXRlIj4gCi0gICAgICAgICA8L2FjdGlvbj4gICAgICAgICAgCi0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4gICAgICAgICAgICAgICAKLSAgICA8L2V4dGVuc2lvbj4KLSAgICAKLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wb3B1cE1lbnVzIj4gCi0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uIAotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLnNlYXJjaFJlZmVyZW5jZXMubWVudS5vYmplY3RDb250cmliIiAKLSAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5XU0RMQmFzZUFkYXB0ZXIiPiAgCi0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzZGxlZGl0b3Iuc2VhcmNoUmVmZXJlbmNlcy5tZW51LnNlYXJjaFJlZmVyZW5jZXMub2JqZWN0IiAKLSAgICAgICAgICAgIGVuYWJsZXNGb3I9IjEiCi0gICAgICAgICAgICBzdHlsZT0icHVsbGRvd24iCi0gICAgICAgICAgICBtZW51YmFyUGF0aD0ic2VhcmNoUmVmZXJlbmNlcy1zbG90LXRlbXAiCi0gICAgICAgICAgICBsYWJlbD0iUmVmZXJlbmNlcyIgCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc2VhcmNoLmFjdGlvbnMuV1NETFNlYXJjaFJlZmVyZW5jZXNHcm91cEFjdGlvbkRlbGVnYXRlIj4gCi0gICAgICAgICA8L2FjdGlvbj4gICAgICAgICAgCi0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4gICAgICAgICAgICAgICAKLSAgICA8L2V4dGVuc2lvbj4gICAgCi0JCi0JCTwhLS0gaW50aWFsaXplIHdzZGwgc291cmNlIHZhbGlkYXRvciAtLT4KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnNvdXJjZXZhbGlkYXRpb24iPgotCQk8dmFsaWRhdG9yCi0JCQlzY29wZT0idG90YWwiCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwucmVjb25jaWxlci5EZWxlZ2F0aW5nU291cmNlVmFsaWRhdG9yRm9yV1NETCIKLQkJCWlkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5yZWNvbmNpbGVyLkRlbGVnYXRpbmdTb3VyY2VWYWxpZGF0b3JGb3JXU0RMIj4KLQkJCTxjb250ZW50VHlwZUlkZW50aWZpZXIKLQkJCQlpZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwud3NkbHNvdXJjZSI+Ci0JCQkJPHBhcnRpdGlvblR5cGUgaWQ9Im9yZy5lY2xpcHNlLndzdC54bWwuWE1MX0RFRkFVTFQiPgotCQkJCTwvcGFydGl0aW9uVHlwZT4KLQkJCTwvY29udGVudFR5cGVJZGVudGlmaWVyPgotCQk8L3ZhbGlkYXRvcj4KLQk8L2V4dGVuc2lvbj4KLQkKLQkJPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS5lZGl0b3JDb25maWd1cmF0aW9uIj4KLQkJPCEtLSBhZGQgcHJlZmVyZW5jZSBwYWdlcyB0byB0aGUgY29udGV4dCBtZW51IGFjdGlvbiAoSUQgbXVzdCBjb3JyZXNwb25kIHRvIHRoZSBkZWNsYXJlZCAicGF0aCIgYWJvdmUpIC0tPgotPCEtLQotCQk8cHJvdmlzaW9uYWxEZWZpbml0aW9uCi0JCQl0eXBlPSJwcmVmZXJlbmNlcGFnZXMiCi0JCQl2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMUHJlZmVyZW5jZVBhZ2UiCi0JCQl0YXJnZXQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3Iuc291cmNlIiAvPgotLS0+Ci0JCTxzb3VyY2VWaWV3ZXJDb25maWd1cmF0aW9uCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uV1NETCIKLQkJCXRhcmdldD0ib3JnLmVjbGlwc2Uud3N0LndzZGwud3NkbHNvdXJjZSIgLz4KLTwhLS0JCQkKLQkJPGNvbnRlbnRPdXRsaW5lQ29uZmlndXJhdGlvbgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLm91dGxpbmUuV1NETENvbnRlbnRPdXRsaW5lQ29uZmlndXJhdGlvbiIKLQkJCXRhcmdldD0ib3JnLmVjbGlwc2Uud3N0LndzZGwud3NkbHNvdXJjZSIgLz4KLS0tPgotCTwvZXh0ZW5zaW9uPgotCQotCQk8IS0tIHRoaXMgZXh0ZW5zaW9uIHBvaW50IGlzIHVzZWQgdG8gYXVnbWVudCB0aGUgTW9kZWxRdWVyeSB0byBwcm92aWRlIFdTREwgc3BlY2lmaWMgZ3VpZGVkIGVkaXRpbmcgLS0+Ci0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLm1vZGVsUXVlcnlFeHRlbnNpb25zIj4KLQkJPG1vZGVsUXVlcnlFeHRlbnNpb24KLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC50ZXh0LldTRExNb2RlbFF1ZXJ5RXh0ZW5zaW9uIgotCQkJY29udGVudFR5cGU9Im9yZy5lY2xpcHNlLndzdC53c2RsLndzZGxzb3VyY2UiPgotCQk8L21vZGVsUXVlcnlFeHRlbnNpb24+Ci0JPC9leHRlbnNpb24+Ci0gICAKLSAgICAgICAgPCEtLSBTZWFyY2ggcGFydGljaXBhbnQgZXh0ZW5zaW9uIHRoYXQgc3VwcG9ydHMgWE1MQ29tcG9uZW50U2VhcmNoUGF0dGVuIG9uIFdTREwgcmVzb3VyY2VzIC0tPgotCSA8ZXh0ZW5zaW9uICAgCi0JCXBvaW50PSJvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvcmUuc2VhcmNoUGFydGljaXBhbnRzIj4KLQkJPHNlYXJjaFBhcnRpY2lwYW50Ci0JCQlpZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwuc2VhcmNoLldTRExTZWFyY2hQYXJ0aWNpcGFudCIKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5zZWFyY2guV1NETFNlYXJjaFBhcnRpY2lwYW50Ij4KLQkJCTxlbmFibGVtZW50PgotCQkJICAgPG9yPgotCQkJICAgICAgPHdpdGggdmFyaWFibGU9InBhdHRlcm4iPgotCQkJCQk8aW5zdGFuY2VvZiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnNlYXJjaC5YTUxDb21wb25lbnRTZWFyY2hQYXR0ZXJuIi8+CQkJICAgCi0JCQkJICA8L3dpdGg+Ci0JCQkJPC9vcj4KLQkJCTwvZW5hYmxlbWVudD4KLQkJPC9zZWFyY2hQYXJ0aWNpcGFudD4KLQkgPC9leHRlbnNpb24+Ci0JCi0KLQotCTwhLS0gUmVmYWN0b3JpbmcgQ09SRSAtLT4KLQk8ZXh0ZW5zaW9uCi0JCXBvaW50PSJvcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5yZW5hbWVQYXJ0aWNpcGFudHMiPgotCQk8cmVuYW1lUGFydGljaXBhbnQKLQkJCW5hbWU9IldTREwgUmVuYW1lIFBhcnRpY3BhbnQiICAgICAgICAgICAKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5yZWZhY3Rvci5XU0RMQ29tcG9uZW50UmVuYW1lUGFydGljaXBhbnQiCi0JCQlpZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkucmVmYWN0b3JpbmcuV1NETENvbXBvbmVudFJlbmFtZVBhcnRpY2lwYW50Ij4KLQkJCTxlbmFibGVtZW50PgotCQkJICAgPG9yPgotCQkJICAgPHdpdGggdmFyaWFibGU9ImVsZW1lbnQiPgotCQkJCQk8aW5zdGFuY2VvZiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQiLz4JCQkgICAKLQkJCQk8L3dpdGg+Ci0JCQkgICA8d2l0aCB2YXJpYWJsZT0iZWxlbWVudCI+Ci0JCQkJCTxpbnN0YW5jZW9mIHZhbHVlPSJvcmcuZWNsaXBzZS54c2QuWFNETmFtZWRDb21wb25lbnQiLz4JCQkJCQkJCQotCQkJCTwvd2l0aD4JCQkJCQkJCi0JCQkJPC9vcj4KLQkJCTwvZW5hYmxlbWVudD4JCQkKLQkJPC9yZW5hbWVQYXJ0aWNpcGFudD4KLQk8L2V4dGVuc2lvbj4KLQkKLQkgCTwhLS0gIFJlZmFjdG9yaW5nIFVJIGV4dGVuc2lvbnMgLS0+Ci0gICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wb3B1cE1lbnVzIj4gCi0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uIAotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLnJlZmFjdG9yaW5nLm1lbnUub2JqZWN0Q29udHJpYiIgCi0gICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQiPiAKLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5yZWZhY3RvcmluZy5tZW51LnJlZmFjdG9yR3JvdXAub2JqZWN0IiAKLSAgICAgICAgICAgIGVuYWJsZXNGb3I9IjEiCi0gICAgICAgICAgICBzdHlsZT0icHVsbGRvd24iCi0gICAgICAgICAgICBtZW51YmFyUGF0aD0iYWRkaXRpb25zIgotICAgICAgICAgICAgbGFiZWw9IiVyZWZhY3RvcmluZy5tZW51LmxhYmVsIiAKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5yZWZhY3Rvci5hY3Rpb25zLldTRExSZWZhY3Rvckdyb3VwQWN0aW9uRGVsZWdhdGUiPiAKLSAgICAgICAgIDwvYWN0aW9uPiAKLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPiAgIAotICAgCi0gICAgPHZpZXdlckNvbnRyaWJ1dGlvbgotICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzZC51aS5yZWZhY3RvcmluZy5tZW51LnNvdXJjZSIKLSAgICAgICAgdGFyZ2V0SUQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLndzZGxzb3VyY2Uuc291cmNlLkVkaXRvckNvbnRleHQiPgotCSAgICA8YWN0aW9uIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5yZWZhY3RvcmluZy5tZW51LnJlZmFjdG9yR3JvdXAuc291cmNlIgotICAgICAgIAkJc3R5bGU9InB1bGxkb3duIgotICAgICAgICAgICAgbWVudWJhclBhdGg9ImFkZGl0aW9ucyIKLSAgICAgICAgICAgIGxhYmVsPSIlcmVmYWN0b3JpbmcubWVudS5sYWJlbCIgCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwucmVmYWN0b3IuYWN0aW9ucy5XU0RMUmVmYWN0b3JHcm91cEFjdGlvbkRlbGVnYXRlIj4gCi0gIAkgICAgPC9hY3Rpb24+Ci0gICAgICAgPC92aWV3ZXJDb250cmlidXRpb24+ICAgICAgIAotICAgICA8L2V4dGVuc2lvbj4KLSAgICAgICAgICAKLSAgICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkuY29tbWFuZHMiPgotCQk8Y29tbWFuZAotCQkJbmFtZT0iJWNvbW1hbmQud3NkbC5yZWZhY3Rvci5yZW5hbWUuZWxlbWVudC5uYW1lIgotCQkJZGVzY3JpcHRpb249IiVjb21tYW5kLndzZGwucmVmYWN0b3IucmVuYW1lLmVsZW1lbnQuZGVzY3JpcHRpb24iCi0JCQljYXRlZ29yeUlkPSJvcmcuZWNsaXBzZS51aS5jYXRlZ29yeS5lZGl0IgotCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLnJlZmFjdG9yLnJlbmFtZS5lbGVtZW50Ij4KLQkJPC9jb21tYW5kPgotCTwvZXh0ZW5zaW9uPiAgIAotCQotCQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5lZGl0b3JBY3Rpb25zIj4KLQkJPGVkaXRvckNvbnRyaWJ1dGlvbgotCQkJaWQ9Im9yZy5lY2xpcHNlLnVpLmFydGljbGVzLmFjdGlvbi5jb250cmlidXRpb24uZWRpdG9yIgotCQkJdGFyZ2V0SUQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3IiPgotCi0JCQk8bWVudQotCQkJCWlkPSJXU0RMRWRpdG9yIgotCQkJCWxhYmVsPSIlX1VJX0VESVRPUl9OQU1FIgotCQkJCXBhdGg9ImFkZGl0aW9ucyI+Ci0JCQkJPHNlcGFyYXRvciBuYW1lPSJncm91cDEiIC8+Ci0JCQk8L21lbnU+Ci0KLQkJCTxhY3Rpb24KLQkJCQlpZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuYWN0aW9ucy5SZWxvYWREZXBlbmRlbmNpZXNBY3Rpb25EZWxlZ2F0ZSIKLQkJCQlsYWJlbD0iJV9VSV9SRUxPQURfREVQRU5ERU5DSUVTIgotCQkJCWljb249Imljb25zL3JlbG9hZGdyYW1tYXIuZ2lmIgotCQkJCXRvb2x0aXA9IlJlbG9hZCBEZXBlbmRlbmNpZXMiCi0JCQkJbWVudWJhclBhdGg9IldTRExFZGl0b3IvZ3JvdXAxIgotCQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5SZWxvYWREZXBlbmRlbmNpZXNBY3Rpb25EZWxlZ2F0ZSI+Ci0JCQk8L2FjdGlvbj4KLQotCQkJPCEtLQotCQkJCTxhY3Rpb24KLQkJCQlpZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWN0aW9ucy5WYWxpZGF0ZUFjdGlvbkRlbGVnYXRlIiAKLQkJCQlsYWJlbD0iJV9VSV9BQ1RJT05fVkFMSURBVEVfV1NETF9ET0NVTUVOVCIgCi0JCQkJaWNvbj0iaWNvbnMvdmFsaWRhdGUuZ2lmIiAKLQkJCQl0b29sdGlwPSIlX1VJX0FDVElPTl9WQUxJREFURV9XU0RMX0RPQ1VNRU5UIgotCQkJCW1lbnViYXJQYXRoPSJXU0RMRWRpdG9yL2dyb3VwMSIKLQkJCQl0b29sYmFyUGF0aD0iJU5vcm1hbC9XU0RMRWRpdG9yIgotCQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hY3Rpb25zLlZhbGlkYXRlQWN0aW9uRGVsZWdhdGUiPiAKLQkJCQk8L2FjdGlvbj4gICAgICAKLQkJCS0tPgotCi0JCTwvZWRpdG9yQ29udHJpYnV0aW9uPgotICAgICAgICA8ZWRpdG9yQ29udHJpYnV0aW9uCi0gICAgICAgICAgICB0YXJnZXRJRD0ib3JnLmVjbGlwc2Uud3N0LndzZGwud3NkbHNvdXJjZS5zb3VyY2UiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwud3NkbHNvdXJjZS5ydWxlci5hY3Rpb25zIj4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlQWRkQm9va21hcmsubGFiZWwiCi0gICAgICAgICAgICAgICBoZWxwQ29udGV4dElkPSJvcmcuZWNsaXBzZS51aS5ib29rbWFya19hY3Rpb25fY29udGV4dCIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLkJvb2ttYXJrUnVsZXJBY3Rpb24iCi0gICAgICAgICAgICAgICBhY3Rpb25JRD0iUnVsZXJEb3VibGVDbGljayIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLkJvb2ttYXJrUnVsZXJBY3Rpb24iLz4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlU2VsZWN0UnVsZXIubGFiZWwiCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5TZWxlY3RSdWxlckFjdGlvbiIKLSAgICAgICAgICAgICAgIGFjdGlvbklEPSJSdWxlckNsaWNrIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuU2VsZWN0UnVsZXJBY3Rpb24iLz4KLSAgICAgICAgPC9lZGl0b3JDb250cmlidXRpb24+Ci0JPC9leHRlbnNpb24+Ci0gICAKLSAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCQotCTxleHRlbnNpb24KLQkJcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmV4dGVuc2liaWxpdHlFbGVtZW50RmlsdGVyIj4KLQkJPGV4dGVuc2liaWxpdHlFbGVtZW50RmlsdGVyCi0JCQluYW1lc3BhY2U9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZmlsdGVyLlNvYXBFeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyIj4KLQkJPC9leHRlbnNpYmlsaXR5RWxlbWVudEZpbHRlcj4KLQk8L2V4dGVuc2lvbj4KLQotCTxleHRlbnNpb24KLQkJcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmV4dGVuc2liaWxpdHlFbGVtZW50RmlsdGVyIj4KLQkJPGV4dGVuc2liaWxpdHlFbGVtZW50RmlsdGVyCi0JCQluYW1lc3BhY2U9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvaHR0cC8iCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZmlsdGVyLkh0dHBFeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyIj4KLQkJPC9leHRlbnNpYmlsaXR5RWxlbWVudEZpbHRlcj4KLQk8L2V4dGVuc2lvbj4KLQotCTxleHRlbnNpb24KLQkJcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmV4dGVuc2liaWxpdHlFbGVtZW50RmlsdGVyIj4KLQkJPGV4dGVuc2liaWxpdHlFbGVtZW50RmlsdGVyCi0JCQluYW1lc3BhY2U9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZmlsdGVyLk1pbWVFeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyIj4KLQkJPC9leHRlbnNpYmlsaXR5RWxlbWVudEZpbHRlcj4KLQk8L2V4dGVuc2lvbj4KLQotCi0JPGV4dGVuc2lvbgotCQlwb2ludD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZXh0ZW5zaWJpbGl0eUVsZW1lbnRGaWx0ZXIiPgotCQk8ZXh0ZW5zaWJpbGl0eUVsZW1lbnRGaWx0ZXIKLQkJCW5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZmlsdGVyLlhTREV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXIiPgotCQk8L2V4dGVuc2liaWxpdHlFbGVtZW50RmlsdGVyPgotCTwvZXh0ZW5zaW9uPgotCQotCTxleHRlbnNpb24KLSAgCSAgIHBvaW50PSJvcmcuZWNsaXBzZS53c3QueHNkLnVpLmV4dGVuc2liaWxpdHlOb2RlQ3VzdG9taXphdGlvbnMiPgotICAgICAgIDxub2RlQ3VzdG9taXphdGlvbgotCQkJbmFtZXNwYWNlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIgotCQkJbm9kZUVkaXRvclByb3ZpZGVyQ2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnNvYXAuY3VzdG9taXphdGlvbnMuU09BUE5vZGVFZGl0b3JQcm92aWRlciIKLQkJCWxhYmVsUHJvdmlkZXJDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwubGFiZWwucHJvdmlkZXJzLlNPQVBMYWJlbFByb3ZpZGVyIj4KLQkJPC9ub2RlQ3VzdG9taXphdGlvbj4JCQotICAgICAgIDxub2RlQ3VzdG9taXphdGlvbgotCQkJbmFtZXNwYWNlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvIgotCQkJbm9kZUVkaXRvclByb3ZpZGVyQ2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnNvYXAuY3VzdG9taXphdGlvbnMuU09BUE5vZGVFZGl0b3JQcm92aWRlciIKLQkJCWxhYmVsUHJvdmlkZXJDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwubGFiZWwucHJvdmlkZXJzLkhUVFBMYWJlbFByb3ZpZGVyIj4KLQkJPC9ub2RlQ3VzdG9taXphdGlvbj4JCQkJCQotCTwvZXh0ZW5zaW9uPgotCQotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnBvcHVwTWVudXMiPgotCQk8dmlld2VyQ29udHJpYnV0aW9uCi0JCQl0YXJnZXRJRD0ib3JnLmVjbGlwc2Uud3N0LndzZGwud3NkbHNvdXJjZS5zb3VyY2UuUnVsZXJDb250ZXh0IgotCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC53c2xkLnVpLnJ1bGVyLmNvbnRleHQuYWN0aW9ucyI+Ci0JCQk8YWN0aW9uCi0JCQkJbGFiZWw9IiVBZGRUYXNrLmxhYmVsIgotCQkJCWhlbHBDb250ZXh0SWQ9Im9yZy5lY2xpcHNlLnVpLkFkZFRhc2tfYWN0aW9uX2NvbnRleHQiCi0JCQkJY2xhc3M9Im9yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuVGFza1J1bGVyQWN0aW9uIgotCQkJCXRvb2x0aXA9IiVBZGRUYXNrLnRvb2x0aXAiCi0JCQkJbWVudWJhclBhdGg9ImFkZGl0aW9ucyIKLQkJCQlpZD0ib3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5UYXNrUnVsZXJBY3Rpb24iPgotCQkJPC9hY3Rpb24+Ci0JCQk8YWN0aW9uCi0JCQkJbGFiZWw9IiVBZGRCb29rbWFyay5sYWJlbCIKLQkJCQloZWxwQ29udGV4dElkPSJvcmcuZWNsaXBzZS51aS5ib29rbWFya19hY3Rpb25fY29udGV4dCIKLQkJCQljbGFzcz0ib3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5Cb29rbWFya1J1bGVyQWN0aW9uIgotCQkJCXRvb2x0aXA9IiVBZGRCb29rbWFyay50b29sdGlwIgotCQkJCW1lbnViYXJQYXRoPSJhZGRpdGlvbnMiCi0JCQkJaWQ9Im9yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuQm9va21hcmtSdWxlckFjdGlvbiI+Ci0JCQk8L2FjdGlvbj4KLQkJPC92aWV3ZXJDb250cmlidXRpb24+Ci0JPC9leHRlbnNpb24+Ci0JPGV4dGVuc2lvbgotCQlwb2ludD0ib3JnLmVjbGlwc2UudWkud29ya2JlbmNoLnRleHRlZGl0b3IuaHlwZXJsaW5rRGV0ZWN0b3JUYXJnZXRzIj4KLQkJPHRhcmdldAotCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLndzZGxzb3VyY2UiCi0JCQluYW1lPSIlV1NETF9Tb3VyY2VfdGFyZ2V0X25hbWUiPgotCQk8L3RhcmdldD4KLQk8L2V4dGVuc2lvbj4KLQk8ZXh0ZW5zaW9uCi0JCXBvaW50PSJvcmcuZWNsaXBzZS51aS53b3JrYmVuY2gudGV4dGVkaXRvci5oeXBlcmxpbmtEZXRlY3RvcnMiPgotCQk8aHlwZXJsaW5rRGV0ZWN0b3IKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC50ZXh0LldTRExIeXBlcmxpbmtEZXRlY3RvciIKLQkJCWlkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC50ZXh0LldTRExIeXBlcmxpbmtEZXRlY3RvciIKLQkJCW5hbWU9IiVXU0RMX2h5cGVybGluayIKLQkJCXRhcmdldElkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC53c2Rsc291cmNlIj4KLQkJPC9oeXBlcmxpbmtEZXRlY3Rvcj4KLSAgIDwvZXh0ZW5zaW9uPgotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NjaGVtYS9leHRlbnNpYmlsaXR5RWxlbWVudEZpbHRlci5leHNkIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zY2hlbWEvZXh0ZW5zaWJpbGl0eUVsZW1lbnRGaWx0ZXIuZXhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjk0NzBkOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NjaGVtYS9leHRlbnNpYmlsaXR5RWxlbWVudEZpbHRlci5leHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Ci08IS0tIFNjaGVtYSBmaWxlIHdyaXR0ZW4gYnkgUERFIC0tPgotPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpIj4KLTxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zY2hlbWEgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aSIgaWQ9ImV4dGVuc2liaWxpdHllbGVtZW50RmlsdGVyIiBuYW1lPSJFeHRlbnNpYmlsaXR5IEVsZW1lbnQgRmlsdGVyIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFRoZSBFeHRlbnNpYmlsaXR5IEVsZW1lbnQgRmlsdGVyIGV4dGVuc2lvbiBwb2ludCBhbGxvd3MgY2xpZW50cyB0byByZWdpc3RlciBmaWx0ZXJzIGZvciBFeHRlbnNpYmlsaXR5IEVsZW1lbnRzIGluIHRoZSBXU0RMIEVkaXRvciBiYXNlZCBvbiB0aGUgRXh0ZW5zaWJpbGl0eSBFbGVtZW50JmFwb3M7cyBuYW1lc3BhY2UuICBUaGVzZSBmaWx0ZXJzIGRldGVybWluZSB3aGF0IGlzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgV1NETCBFZGl0b3IuCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxlbGVtZW50IG5hbWU9ImV4dGVuc2lvbiI+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9ImV4dGVuc2liaWxpdHlFbGVtZW50RmlsdGVyIi8+Ci0gICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwb2ludCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhIGZ1bGx5IHF1YWxpZmllZCBpZGVudGlmaWVyIG9mIHRoZSB0YXJnZXQgZXh0ZW5zaW9uIHBvaW50Ci0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgYW4gb3B0aW9uYWwgaWRlbnRpZmllciBvZiB0aGUgZXh0ZW5zaW9uIGluc3RhbmNlCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhbiBvcHRpb25hbCBuYW1lIG9mIHRoZSBleHRlbnNpb24gaW5zdGFuY2UKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgIDxhcHBJbmZvPgotICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIHRyYW5zbGF0YWJsZT0idHJ1ZSIvPgotICAgICAgICAgICAgICAgPC9hcHBJbmZvPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpYmlsaXR5RWxlbWVudEZpbHRlciI+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWVzcGFjZSIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGUgbmFtZXNwYWNlIHRoaXMgZXh0ZW5zaW9uIHBvaW50IGluc3RhbmNlIGFwcGxpZXMgdG8uCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY2xhc3MiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIGNsYXNzIHRoYXQgaW1wbGVtZW50cyAmbHQ7Y29kZSZndDtvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5maWx0ZXIuRXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlciZsdDsvY29kZSZndDsuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICA8YXBwSW5mbz4KLSAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSBraW5kPSJqYXZhIi8+Ci0gICAgICAgICAgICAgICA8L2FwcEluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9InNpbmNlIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICZsdDtiJmd0O1RoaXMgZXh0ZW5zaW9uIHBvaW50IGlzIGludGVybmFsIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgYnkgYW55IG90aGVyIHBsdWdpbnMuJmx0Oy9iJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJleGFtcGxlcyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgb2YgYW4gRXh0ZW5zaWJpbGl0eSBFbGVtZW50IEZpbHRlciBjb250cmlidXRpb246Ci0mbHQ7cHJlJmd0OwotICAgJmx0O2V4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9JnF1b3Q7b3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZXh0ZW5zaWJpbGl0eUVsZW1lbnRGaWx0ZXImcXVvdDsmZ3Q7Ci0gICAgICAmbHQ7ZXh0ZW5zaWJpbGl0eUVsZW1lbnRGaWx0ZXIKLSAgICAgICAgICAgIG5hbWVzcGFjZT0mcXVvdDtodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvJnF1b3Q7Ci0gICAgICAgICAgICBjbGFzcz0mcXVvdDtvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5maWx0ZXIuU29hcEV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXImcXVvdDsvJmd0OwotICAgJmx0Oy9leHRlbnNpb24mZ3Q7Ci0mbHQ7L3ByZSZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iYXBpSW5mbyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBUaGUgc3VwcGxpZWQgY2xhc3MgbXVzdCBpbXBsZW1lbnQgJmx0O2NvZGUmZ3Q7b3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZmlsdGVyLkV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXImbHQ7L2NvZGUmZ3Q7LgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJjb3B5cmlnaHQiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiZsdDticiZndDsKLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgCi1hdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgCi10aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAmbHQ7YQotaHJlZj0mcXVvdDtodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCZxdW90OyZndDtodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCZsdDsvYSZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NjaGVtYS9leHRlbnNpYmlsaXR5SXRlbVRyZWVQcm92aWRlcnMuZXhzZCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc2NoZW1hL2V4dGVuc2liaWxpdHlJdGVtVHJlZVByb3ZpZGVycy5leHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlN2Y4OTdjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc2NoZW1hL2V4dGVuc2liaWxpdHlJdGVtVHJlZVByb3ZpZGVycy5leHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Ci08IS0tIFNjaGVtYSBmaWxlIHdyaXR0ZW4gYnkgUERFIC0tPgotPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpIj4KLTxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zY2hlbWEgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3Qud3NkbC51aSIgaWQ9ImV4dGVuc2liaWxpdHlJdGVtVHJlZVByb3ZpZGVycyIgbmFtZT0iRXh0ZW5zaWJpbGl0eSBJdGVtIFRyZWUgUHJvdmlkZXJzIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFRoZSBFeHRlbnNpYmlsaXR5IEl0ZW0gVHJlZSBQcm92aWRlciBleHRlbnNpb24gcG9pbnQgYWxsb3dzIGNsaWVudHMgdG8gcmVnaXN0ZXIgY3VzdG9tIElMYWJlbFByb3ZpZGVycyAodG8gcHJvdmlkZSBjdXN0b20gbGFiZWxzIGFuZCBpY29ucykgZm9yIEV4dGVuc2liaWxpdHkgRWxlbWVudHMgaW4gdGhlIFdTREwgRWRpdG9yIGJhc2VkIG9uIHRoZSBFeHRlbnNpYmlsaXR5IEVsZW1lbnQmYXBvcztzIG5hbWVzcGFjZS4KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iZXh0ZW5zaWJpbGl0eUl0ZW1UcmVlUHJvdmlkZXIiLz4KLSAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGEgZnVsbHkgcXVhbGlmaWVkIGlkZW50aWZpZXIgb2YgdGhlIHRhcmdldCBleHRlbnNpb24gcG9pbnQKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhbiBvcHRpb25hbCBpZGVudGlmaWVyIG9mIHRoZSBleHRlbnNpb24gaW5zdGFuY2UKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGFuIG9wdGlvbmFsIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiBpbnN0YW5jZQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcEluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUgdHJhbnNsYXRhYmxlPSJ0cnVlIi8+Ci0gICAgICAgICAgICAgICA8L2FwcEluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9ImV4dGVuc2liaWxpdHlJdGVtVHJlZVByb3ZpZGVyIj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZXNwYWNlIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoZSBuYW1lc3BhY2UgdGhpcyBleHRlbnNpb24gcG9pbnQgaW5zdGFuY2UgYXBwbGllcyB0by4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJsYWJlbFByb3ZpZGVyQ2xhc3MiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIGNsYXNzIHRoYXQgaW1wbGVtZW50cyAmbHQ7Y29kZSZndDtvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyJmx0Oy9jb2RlJmd0Oy4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgIDxhcHBJbmZvPgotICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIGtpbmQ9ImphdmEiLz4KLSAgICAgICAgICAgICAgIDwvYXBwSW5mbz4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0ic2luY2UiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgJmx0O2ImZ3Q7VGhpcyBleHRlbnNpb24gcG9pbnQgaXMgaW50ZXJuYWwgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBieSBhbnkgb3RoZXIgcGx1Z2lucy4mbHQ7L2ImZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImV4YW1wbGVzIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBvZiBhbiBFeHRlbnNpYmlsaXR5IEl0ZW0gVHJlZSBQcm92aWRlciBjb250cmlidXRpb246Ci0mbHQ7cHJlJmd0OwotICAgJmx0O2V4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9JnF1b3Q7b3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZXh0ZW5zaWJpbGl0eUl0ZW1UcmVlUHJvdmlkZXJzJnF1b3Q7Jmd0OwotICAgICAgJmx0O2V4dGVuc2liaWxpdHlJdGVtVHJlZVByb3ZpZGVyCi0gICAgICAgICAgICBuYW1lc3BhY2U9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyZxdW90OwotICAgICAgICAgICAgbGFiZWxQcm92aWRlckNsYXNzPSZxdW90O29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLm91dGxpbmUuU09BUExhYmVsUHJvdmlkZXImcXVvdDsvJmd0OwotICAgJmx0Oy9leHRlbnNpb24mZ3Q7Ci0mbHQ7L3ByZSZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iYXBpSW5mbyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBUaGUgc3VwcGxpZWQgY2xhc3MgbXVzdCBpbXBsZW1lbnQgJmx0O2NvZGUmZ3Q7b3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlciZsdDsvY29kZSZndDsuCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImNvcHlyaWdodCIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuJmx0O2JyJmd0OwotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSAKLWF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyAKLXRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0ICZsdDthCi1ocmVmPSZxdW90O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJnF1b3Q7Jmd0O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJmx0Oy9hJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc2NoZW1hL2ludGVybmFsRWRpdG9yRXh0ZW5zaW9ucy5leHNkIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zY2hlbWEvaW50ZXJuYWxFZGl0b3JFeHRlbnNpb25zLmV4c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1NzEwZDcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zY2hlbWEvaW50ZXJuYWxFZGl0b3JFeHRlbnNpb25zLmV4c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KLTwhLS0gU2NoZW1hIGZpbGUgd3JpdHRlbiBieSBQREUgLS0+Ci08c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkiPgotPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNjaGVtYSBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpIiBpZD0iaW50ZXJuYWxFZGl0b3JFeHRlbnNpb25zIiBuYW1lPSJJbnRlcm5hbCBFZGl0b3IgRXh0ZW5zaW9ucyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBUaGUgSW50ZXJuYWwgRWRpdG9yIEV4dGVuc2lvbiBwb2ludCBpcyB1c2VkIHRvIHByb3ZpZGUgR1VJIG9iamVjdHMsIGFjdGlvbnMsIGNvbnRleHQgbWVudSBpdGVtcywgZXRjLi4uIGZvciBub24gV1NETCBNb2RlbCBPYmplY3RzIGluIHRoZSBXU0RMIEVkaXRvci4KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iaW50ZXJuYWxFZGl0b3JFeHRlbnNpb24iLz4KLSAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGEgZnVsbHkgcXVhbGlmaWVkIGlkZW50aWZpZXIgb2YgdGhlIHRhcmdldCBleHRlbnNpb24gcG9pbnQKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhbiBvcHRpb25hbCBpZGVudGlmaWVyIG9mIHRoZSBleHRlbnNpb24gaW5zdGFuY2UKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGFuIG9wdGlvbmFsIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiBpbnN0YW5jZQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcEluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUgdHJhbnNsYXRhYmxlPSJ0cnVlIi8+Ci0gICAgICAgICAgICAgICA8L2FwcEluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9ImludGVybmFsRWRpdG9yRXh0ZW5zaW9uIj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY2xhc3MiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIGNsYXNzIHRoYXQgaW1wbGVtZW50cyAmbHQ7Y29kZSZndDtvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5leHRlbnNpb24uV1NETEVkaXRvckV4dGVuc2lvbiZsdDsvY29kZSZndDsuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICA8YXBwSW5mbz4KLSAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSBraW5kPSJqYXZhIi8+Ci0gICAgICAgICAgICAgICA8L2FwcEluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9InNpbmNlIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICZsdDtiJmd0O1RoaXMgZXh0ZW5zaW9uIHBvaW50IGlzIGludGVybmFsIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgYnkgYW55IG90aGVyIHBsdWdpbnMuJmx0Oy9iJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJleGFtcGxlcyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgb2YgYW4gSW50ZXJuYWwgRWRpdG9yIEV4dGVuc2lvbiBjb250cmlidXRpb246Ci0mbHQ7cHJlJmd0OwotICAgJmx0O2V4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9JnF1b3Q7b3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWxFZGl0b3JFeHRlbnNpb25zJnF1b3Q7Jmd0OwotICAgICAgJmx0O2ludGVybmFsRWRpdG9yRXh0ZW5zaW9uCi0gICAgICAgICAgICBjbGFzcz0mcXVvdDtvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC54c2QuWFNERXh0ZW5zaW9uJnF1b3Q7IC8mZ3Q7Ci0gICAmbHQ7L2V4dGVuc2lvbiZndDsKLSZsdDsvcHJlJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJhcGlJbmZvIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFRoZSBzdXBwbGllZCBjbGFzcyBtdXN0IGltcGxlbWVudCAmbHQ7Y29kZSZndDtvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5leHRlbnNpb24uV1NETEVkaXRvckV4dGVuc2lvbiZsdDsvY29kZSZndDsuCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImNvcHlyaWdodCIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuJmx0O2JyJmd0OwotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSAKLWF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyAKLXRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0ICZsdDthCi1ocmVmPSZxdW90O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJnF1b3Q7Jmd0O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJmx0Oy9hJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc2NoZW1hL3Byb3BlcnR5RGVzY3JpcHRvclByb3ZpZGVyLmV4c2QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NjaGVtYS9wcm9wZXJ0eURlc2NyaXB0b3JQcm92aWRlci5leHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTM4NDYwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc2NoZW1hL3Byb3BlcnR5RGVzY3JpcHRvclByb3ZpZGVyLmV4c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KLTwhLS0gU2NoZW1hIGZpbGUgd3JpdHRlbiBieSBQREUgLS0+Ci08c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkiPgotPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNjaGVtYSBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpIiBpZD0icHJvcGVydHlEZXNjcmlwdG9yUHJvdmlkZXIiIG5hbWU9IlByb3BlcnR5IERlc2NyaXB0b3IgUHJvdmlkZXIiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhlIFByb3BlcnR5IERlc2NyaXB0b3IgUHJvdmlkZXIgZXh0ZW5zaW9uIHBvaW50IGFsbG93cyBjbGllbnRzIHRvIHJlZ2lzdGVyIHRoZWlyIG93biBjdXN0b20gSVByb3BlcnR5RGVzY3JpcHRvciBpbiB0aGUgV1NETCBFZGl0b3IgYmFzZWQgb24gbmFtZXNwYWNlLgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJwcm9wZXJ0eURlc2NyaXB0b3JQcm92aWRlciIvPgotICAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icG9pbnQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgYSBmdWxseSBxdWFsaWZpZWQgaWRlbnRpZmllciBvZiB0aGUgdGFyZ2V0IGV4dGVuc2lvbiBwb2ludAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGFuIG9wdGlvbmFsIGlkZW50aWZpZXIgb2YgdGhlIGV4dGVuc2lvbiBpbnN0YW5jZQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgYW4gb3B0aW9uYWwgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uIGluc3RhbmNlCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICA8YXBwSW5mbz4KLSAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSB0cmFuc2xhdGFibGU9InRydWUiLz4KLSAgICAgICAgICAgICAgIDwvYXBwSW5mbz4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGVsZW1lbnQgbmFtZT0icHJvcGVydHlEZXNjcmlwdG9yUHJvdmlkZXIiPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lc3BhY2UiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIG5hbWVzcGFjZSB0aGlzIGV4dGVuc2lvbiBwb2ludCBpbnN0YW5jZSBhcHBsaWVzIHRvLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImNsYXNzIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoZSBjbGFzcyB0aGF0IGltcGxlbWVudHMgJmx0O2NvZGUmZ3Q7b3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5JUHJvcGVydHlEZXNjcmlwdG9yJmx0Oy9jb2RlJmd0Oy4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgIDxhcHBJbmZvPgotICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIGtpbmQ9ImphdmEiLz4KLSAgICAgICAgICAgICAgIDwvYXBwSW5mbz4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0ic2luY2UiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgJmx0O2ImZ3Q7VGhpcyBleHRlbnNpb24gcG9pbnQgaXMgaW50ZXJuYWwgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBieSBhbnkgb3RoZXIgcGx1Z2lucy4mbHQ7L2ImZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImV4YW1wbGVzIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBvZiBhbiAgY29udHJpYnV0aW9uOgotJmx0O3ByZSZndDsKLSAgICZsdDtleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSZxdW90O29yZy5lY2xpcHNlLndzdC53c2RsLnVpLnByb3BlcnR5RGVzY3JpcHRvclByb3ZpZGVyJnF1b3Q7Jmd0OwotICAgICAgJmx0O3Byb3BlcnR5RGVzY3JpcHRvclByb3ZpZGVyCi0gICAgICAgICAgICBuYW1lc3BhY2U9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyZxdW90OwotICAgICAgICAgICAgY2xhc3M9JnF1b3Q7b3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZXhhbXBsZS5FeGFtcGxlUHJvcGVydHlEZXNjcmlwdG9yJnF1b3Q7LyZndDsKLSAgICZsdDsvZXh0ZW5zaW9uJmd0OwotJmx0Oy9wcmUmZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImFwaUluZm8iLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhlIHN1cHBsaWVkIGNsYXNzIG11c3QgaW1wbGVtZW50ICZsdDtjb2RlJmd0O29yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuSVByb3BlcnR5RGVzY3JpcHRvciZsdDsvY29kZSZndDsuCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImNvcHlyaWdodCIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuJmx0O2JyJmd0OwotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSAKLWF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyAKLXRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0ICZsdDthCi1ocmVmPSZxdW90O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJnF1b3Q7Jmd0O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJmx0Oy9hJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvRGVmYXVsdEVkaXRvck1vZGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvRGVmYXVsdEVkaXRvck1vZGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjZhYmI2Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL0RlZmF1bHRFZGl0b3JNb2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBhcnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUNvbnRlbnRQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5BU0RFZGl0UGFydEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUuQVNEQ29udGVudE91dGxpbmVQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0b3IuRWRpdG9yTW9kZTsKLQotcHVibGljIGNsYXNzIERlZmF1bHRFZGl0b3JNb2RlIGV4dGVuZHMgRWRpdG9yTW9kZQotewotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBJRCA9ICBEZWZhdWx0RWRpdG9yTW9kZS5jbGFzcy5nZXROYW1lKCk7Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldERpc3BsYXlOYW1lKCkKLSAgewotICAgIHJldHVybiBNZXNzYWdlcy5fVUlfTEFCRUxfREVGQVVMVDsKLSAgfQotCi0gIHB1YmxpYyBFZGl0UGFydEZhY3RvcnkgZ2V0RWRpdFBhcnRGYWN0b3J5KCkKLSAgewotICAgIHJldHVybiBuZXcgQVNERWRpdFBhcnRGYWN0b3J5KCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldElkKCkKLSAgewotICAgIHJldHVybiBJRDsKLSAgfQotCi0gIHB1YmxpYyBJQ29udGVudFByb3ZpZGVyIGdldE91dGxpbmVQcm92aWRlcigpCi0gIHsKLSAgICByZXR1cm4gbmV3IEFTRENvbnRlbnRPdXRsaW5lUHJvdmlkZXIoKTsKLSAgfSAKLSAgIAotICBwdWJsaWMgT2JqZWN0IGdldEFkYXB0ZXIoQ2xhc3MgYWRhcHRlcikKLSAgewotICAgIHJldHVybiBzdXBlci5nZXRBZGFwdGVyKGFkYXB0ZXIpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL0lEZXNpZ25WaWV3ZXJBY3Rpb25CYXJDb250cmlidXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9JRGVzaWduVmlld2VyQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmMyMDFhMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL0lEZXNpZ25WaWV3ZXJBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkJhcnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5JU291cmNlVmlld2VyQWN0aW9uQmFyQ29udHJpYnV0b3I7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSURlc2lnblZpZXdlckFjdGlvbkJhckNvbnRyaWJ1dG9yIGV4dGVuZHMgSVNvdXJjZVZpZXdlckFjdGlvbkJhckNvbnRyaWJ1dG9yIHsKLQlwdWJsaWMgdm9pZCBpbml0Vmlld2VyU3BlY2lmaWNDb250cmlidXRpb25zKElBY3Rpb25CYXJzIGJhcnMpOwotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvSVNlbGVjdGlvbk1hcHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9JU2VsZWN0aW9uTWFwcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiNmRhZmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9JU2VsZWN0aW9uTWFwcGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSVNlbGVjdGlvbk1hcHBlciB7Ci0JSVNlbGVjdGlvbiBtYXBTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3RlZE9iamVjdCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL0ludGVybmFsV1NETE11bHRpUGFnZUVkaXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9JbnRlcm5hbFdTRExNdWx0aVBhZ2VFZGl0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWM2N2RlZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL0ludGVybmFsV1NETE11bHRpUGFnZUVkaXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTc1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQXNzZXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBhcnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5LZXlTdHJva2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLnVpLmFjdGlvbnMuQWN0aW9uUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLnVpLmFjdGlvbnMuR0VGQWN0aW9uQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUNvbnRlbnRQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklQb3N0U2VsZWN0aW9uUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRyZWVWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUZpbGVFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTm9kZU5vdGlmaWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFjdGlvbnMuT3BlbkluTmV3RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5hY3Rpb25zLlcxMUFkZFBhcnRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYWN0aW9ucy5XMTFPcGVuSW1wb3J0QWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmFjdGlvbnMuVzExU2V0RXhpc3RpbmdFbGVtZW50QWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmFjdGlvbnMuVzExU2V0RXhpc3RpbmdNZXNzYWdlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmFjdGlvbnMuVzExU2V0RXhpc3RpbmdUeXBlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmFjdGlvbnMuVzExU2V0TmV3RWxlbWVudEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5hY3Rpb25zLlcxMVNldE5ld01lc3NhZ2VBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYWN0aW9ucy5XMTFTZXROZXdUeXBlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMURlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTRE11bHRpUGFnZUVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RBZGRNZXNzYWdlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTRERpcmVjdEVkaXRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQmFzZVNlbGVjdGlvbkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLkRlc2lnblZpZXdHcmFwaGljYWxWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5LZXlib2FyZERyYWdJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLkRlZmluaXRpb25zRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUuQVNEQ29udGVudE91dGxpbmVQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC51dGlsLklPcGVuRXh0ZXJuYWxFZGl0b3JIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZWRpdC5XMTFCaW5kaW5nUmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZWRpdC5XMTFJbnRlcmZhY2VSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5lZGl0LlcxMU1lc3NhZ2VSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5lZGl0LldTRExYU0RFbGVtZW50UmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZWRpdC5XU0RMWFNEVHlwZVJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnRleHQuV1NETE1vZGVsQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLkNvbXBvbmVudFJlZmVyZW5jZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XMTFPcGVuRXh0ZXJuYWxFZGl0b3JIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMQWRhcHRlckZhY3RvcnlIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMRWRpdG9yVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLldTRExSZXNvdXJjZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZGVzaWduLklLZXlib2FyZERyYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdG9yLkVkaXRvck1vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdG9yLkVkaXRvck1vZGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXRvci5Qcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuZWRpdG9yLlhTREVsZW1lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmVkaXRvci5YU0RUeXBlUmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotCi1wdWJsaWMgY2xhc3MgSW50ZXJuYWxXU0RMTXVsdGlQYWdlRWRpdG9yIGV4dGVuZHMgQVNETXVsdGlQYWdlRWRpdG9yCi17Ci0JUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQ7Ci0JUmVzb3VyY2Ugd3NkbFJlc291cmNlOwotCQotCXByb3RlY3RlZCBXU0RMRWRpdG9yUmVzb3VyY2VDaGFuZ2VIYW5kbGVyIHJlc291cmNlQ2hhbmdlSGFuZGxlcjsKLQkKLQlwcm90ZWN0ZWQgV1NETE1vZGVsQWRhcHRlciBtb2RlbEFkYXB0ZXI7Ci0JcHJvdGVjdGVkIFNvdXJjZUVkaXRvclNlbGVjdGlvbkxpc3RlbmVyIGZTb3VyY2VFZGl0b3JTZWxlY3Rpb25MaXN0ZW5lcjsKLQlwcm90ZWN0ZWQgV1NETFNlbGVjdGlvbk1hbmFnZXJTZWxlY3Rpb25MaXN0ZW5lciBmV1NETFNlbGVjdGlvbkxpc3RlbmVyOwotCi0gIHByaXZhdGUgSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWw7Ci0gIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBXU0RMX0VESVRPUl9NT0RFX0VYVEVOU0lPTl9JRCA9ICJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5lZGl0b3JNb2RlcyI7IC8vJE5PTi1OTFMtMSQKLSAgCi0gIHB1YmxpYyBJRGVzY3JpcHRpb24gYnVpbGRNb2RlbChJRmlsZUVkaXRvcklucHV0IGVkaXRvcklucHV0KSB7ICAgCi0JICB0cnkgewotCQkgIC8vIElTU1VFOiBUaGlzIGNvZGUgd2hpY2ggZGVhbHMgd2l0aCB0aGUgc3RydWN0dXJlZCBtb2RlbCBpcyBzaW1pbGFyIHRvIHRoZSBvbmUgaW4gdGhlIFhTRCBlZGl0b3IuIAotCQkgIC8vIEl0IGNvdWxkIGJlIHJlZmFjdG9yZWQgaW50byB0aGUgYmFzZSBjbGFzcy4KLQotCQkgIERvY3VtZW50IGRvY3VtZW50ID0gbnVsbDsKLQkJICBJRG9jdW1lbnQgZG9jID0gc3RydWN0dXJlZFRleHRFZGl0b3IuZ2V0RG9jdW1lbnRQcm92aWRlcigpLmdldERvY3VtZW50KGVkaXRvcklucHV0KTsKLQkJICBpZiAoZG9jIGluc3RhbmNlb2YgSVN0cnVjdHVyZWREb2N1bWVudCkgewotCQkJICBJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRFeGlzdGluZ01vZGVsRm9yRWRpdChkb2MpOwotCQkJICBpZiAobW9kZWwgPT0gbnVsbCkgewotCQkJCSAgbW9kZWwgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmdldE1vZGVsRm9yRWRpdCgoSVN0cnVjdHVyZWREb2N1bWVudCkgZG9jKTsKLQkJCSAgfQotCQkJICBzdHJ1Y3R1cmVkTW9kZWwgPSBtb2RlbDsKLQkJCSAgZG9jdW1lbnQgPSAoKElET01Nb2RlbCkgbW9kZWwpLmdldERvY3VtZW50KCk7Ci0JCSAgfQotCQkgIEFzc2VydC5pc05vdE51bGwoZG9jdW1lbnQpOwotCi0JCSAgT2JqZWN0IG9iaiA9IG51bGw7Ci0KLQkJICBpZiAoZG9jdW1lbnQgaW5zdGFuY2VvZiBJTm9kZU5vdGlmaWVyKSB7Ci0JCQkgIElOb2RlTm90aWZpZXIgbm90aWZpZXIgPSAoSU5vZGVOb3RpZmllcikgZG9jdW1lbnQ7Ci0JCQkgIG1vZGVsQWRhcHRlciA9IChXU0RMTW9kZWxBZGFwdGVyKSBub3RpZmllci5nZXRBZGFwdGVyRm9yKFdTRExNb2RlbEFkYXB0ZXIuY2xhc3MpOwotCQkJICBpZiAobW9kZWxBZGFwdGVyID09IG51bGwpIHsKLQkJCQkgIG1vZGVsQWRhcHRlciA9IG5ldyBXU0RMTW9kZWxBZGFwdGVyKCk7Ci0JCQkJICBub3RpZmllci5hZGRBZGFwdGVyKG1vZGVsQWRhcHRlcik7Ci0JCQkJICBvYmogPSBtb2RlbEFkYXB0ZXIuY3JlYXRlRGVmaW5pdGlvbihkb2N1bWVudCk7Ci0JCQkgIH0KLQkJCSAgaWYgKG9iaiA9PSBudWxsKSB7Ci0JCQkJICBvYmogPSBtb2RlbEFkYXB0ZXIuY3JlYXRlRGVmaW5pdGlvbihkb2N1bWVudCk7Ci0JCQkgIH0KLQkJICB9Ci0KLQkJICBpZiAob2JqIGluc3RhbmNlb2YgRGVmaW5pdGlvbikgewotCQkJICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSAoRGVmaW5pdGlvbikgb2JqOwotCQkJICBtb2RlbCA9IChJRGVzY3JpcHRpb24pIFdTRExBZGFwdGVyRmFjdG9yeUhlbHBlci5nZXRJbnN0YW5jZSgpLmFkYXB0KGRlZmluaXRpb24pOwotCQkgIH0KLQkgIH0KLQkgIGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICB9ICAgIAotCi0JICByZXR1cm4gbW9kZWw7Ci0gIH0KLQkKLQlwcml2YXRlIFhTRFNjaGVtYVtdIGdldElubGluZVNjaGVtYXMoKSB7Ci0JCUxpc3QgdHlwZXMgPSBnZXRNb2RlbCgpLmdldFR5cGVzKCk7Ci0JCVhTRFNjaGVtYVtdIHNjaGVtYXMgPSBuZXcgWFNEU2NoZW1hW3R5cGVzLnNpemUoKV07Ci0JCWZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCB0eXBlcy5zaXplKCk7IGluZGV4KyspIHsKLQkJCVcxMVR5cGUgdHlwZSA9IChXMTFUeXBlKSB0eXBlcy5nZXQoaW5kZXgpOwotCQkJc2NoZW1hc1tpbmRleF0gPSAoWFNEU2NoZW1hKSB0eXBlLmdldFRhcmdldCgpOwotCQl9Ci0JCQotCQlyZXR1cm4gc2NoZW1hczsKLQl9Ci0JCi0JcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKENsYXNzIHR5cGUpIHsKLQkJaWYgKHR5cGUgPT0gRGVmaW5pdGlvbi5jbGFzcykKLQkJewotCQkJcmV0dXJuICgoVzExRGVzY3JpcHRpb24pIGdldE1vZGVsKCkpLmdldFRhcmdldCgpOwotCQl9Ci0JCWVsc2UgaWYgKHR5cGUgPT0gSVNlbGVjdGlvbk1hcHBlci5jbGFzcykKLQkJewotCQkJcmV0dXJuIG5ldyBXU0RMU2VsZWN0aW9uTWFwcGVyKCk7Ci0JCX0KLSAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBEZWZpbml0aW9uLmNsYXNzICYmIG1vZGVsIGluc3RhbmNlb2YgQWRhcHRlcikKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiAoKEFkYXB0ZXIpbW9kZWwpLmdldFRhcmdldCgpOyAKLSAgICAgICAgfQotCQllbHNlIGlmICh0eXBlID09IElPcGVuRXh0ZXJuYWxFZGl0b3JIZWxwZXIuY2xhc3MpIHsKLQkJCXJldHVybiBuZXcgVzExT3BlbkV4dGVybmFsRWRpdG9ySGVscGVyKCgoSUZpbGVFZGl0b3JJbnB1dCkgZ2V0RWRpdG9ySW5wdXQoKSkuZ2V0RmlsZSgpKTsKLQkJfQotCi0gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gWFNEVHlwZVJlZmVyZW5jZUVkaXRNYW5hZ2VyLmNsYXNzKQotICAgICAgICB7Ci0gICAgICAgICAgSUVkaXRvcklucHV0IGVkaXRvcklucHV0ID0gZ2V0RWRpdG9ySW5wdXQoKTsKLSAgICAgICAgICBpZiAoZWRpdG9ySW5wdXQgaW5zdGFuY2VvZiBJRmlsZUVkaXRvcklucHV0KQotICAgICAgICAgIHsKLSAgICAgICAgICAgIElGaWxlRWRpdG9ySW5wdXQgZmlsZUVkaXRvcklucHV0ID0gKElGaWxlRWRpdG9ySW5wdXQpIGVkaXRvcklucHV0OwotICAgICAgICAgICAgV1NETFhTRFR5cGVSZWZlcmVuY2VFZGl0TWFuYWdlciByZWZNYW5hZ2VyID0gbmV3IFdTRExYU0RUeXBlUmVmZXJlbmNlRWRpdE1hbmFnZXIoZmlsZUVkaXRvcklucHV0LmdldEZpbGUoKSwgbnVsbCk7Ci0gICAgICAgICAgICByZWZNYW5hZ2VyLnNldFNjaGVtYXMoZ2V0SW5saW5lU2NoZW1hcygpKTsKLSAgICAgICAgICAgIHJldHVybiByZWZNYW5hZ2VyOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh0eXBlID09IFhTREVsZW1lbnRSZWZlcmVuY2VFZGl0TWFuYWdlci5jbGFzcykKLSAgICAgICAgewotICAgICAgICAgIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCA9IGdldEVkaXRvcklucHV0KCk7Ci0gICAgICAgICAgaWYgKGVkaXRvcklucHV0IGluc3RhbmNlb2YgSUZpbGVFZGl0b3JJbnB1dCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBJRmlsZUVkaXRvcklucHV0IGZpbGVFZGl0b3JJbnB1dCA9IChJRmlsZUVkaXRvcklucHV0KSBlZGl0b3JJbnB1dDsKLSAgICAgICAgICAgIFdTRExYU0RFbGVtZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgcmVmTWFuYWdlciA9IG5ldyBXU0RMWFNERWxlbWVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKGZpbGVFZGl0b3JJbnB1dC5nZXRGaWxlKCksIG51bGwpOwotICAgICAgICAgICAgcmVmTWFuYWdlci5zZXRTY2hlbWFzKGdldElubGluZVNjaGVtYXMoKSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVmTWFuYWdlcjsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBXMTFCaW5kaW5nUmVmZXJlbmNlRWRpdE1hbmFnZXIuY2xhc3MpIHsKLSAgICAgICAgICAgIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCA9IGdldEVkaXRvcklucHV0KCk7Ci0gICAgICAgICAgICBpZiAoZWRpdG9ySW5wdXQgaW5zdGFuY2VvZiBJRmlsZUVkaXRvcklucHV0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgCUlGaWxlRWRpdG9ySW5wdXQgZmlsZUVkaXRvcklucHV0ID0gKElGaWxlRWRpdG9ySW5wdXQpIGVkaXRvcklucHV0OwotICAgICAgICAgICAgCXJldHVybiBuZXcgVzExQmluZGluZ1JlZmVyZW5jZUVkaXRNYW5hZ2VyKChXMTFEZXNjcmlwdGlvbikgZ2V0TW9kZWwoKSwgZmlsZUVkaXRvcklucHV0LmdldEZpbGUoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBXMTFJbnRlcmZhY2VSZWZlcmVuY2VFZGl0TWFuYWdlci5jbGFzcykgewotICAgICAgICAgICAgSUVkaXRvcklucHV0IGVkaXRvcklucHV0ID0gZ2V0RWRpdG9ySW5wdXQoKTsKLSAgICAgICAgICAgIGlmIChlZGl0b3JJbnB1dCBpbnN0YW5jZW9mIElGaWxlRWRpdG9ySW5wdXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAJSUZpbGVFZGl0b3JJbnB1dCBmaWxlRWRpdG9ySW5wdXQgPSAoSUZpbGVFZGl0b3JJbnB1dCkgZWRpdG9ySW5wdXQ7Ci0gICAgICAgICAgICAJcmV0dXJuIG5ldyBXMTFJbnRlcmZhY2VSZWZlcmVuY2VFZGl0TWFuYWdlcigoVzExRGVzY3JpcHRpb24pIGdldE1vZGVsKCksIGZpbGVFZGl0b3JJbnB1dC5nZXRGaWxlKCkpOwotICAgICAgICAgICAgfSAgICAgICAgCQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gVzExTWVzc2FnZVJlZmVyZW5jZUVkaXRNYW5hZ2VyLmNsYXNzKSB7Ci0gICAgICAgICAgICBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQgPSBnZXRFZGl0b3JJbnB1dCgpOwotICAgICAgICAgICAgaWYgKGVkaXRvcklucHV0IGluc3RhbmNlb2YgSUZpbGVFZGl0b3JJbnB1dCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIAlJRmlsZUVkaXRvcklucHV0IGZpbGVFZGl0b3JJbnB1dCA9IChJRmlsZUVkaXRvcklucHV0KSBlZGl0b3JJbnB1dDsKLSAgICAgICAgICAgIAlyZXR1cm4gbmV3IFcxMU1lc3NhZ2VSZWZlcmVuY2VFZGl0TWFuYWdlcigoVzExRGVzY3JpcHRpb24pIGdldE1vZGVsKCksIGZpbGVFZGl0b3JJbnB1dC5nZXRGaWxlKCkpOwotICAgICAgICAgICAgfSAgICAgICAgCQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gUHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlci5jbGFzcykKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlcigpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gSUtleWJvYXJkRHJhZy5jbGFzcykgewotCQkJcmV0dXJuIG5ldyBLZXlib2FyZERyYWdJbXBsKCk7Ci0JCX0KLSAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBJT3BlbkV4dGVybmFsRWRpdG9ySGVscGVyLmNsYXNzKSB7Ci0gICAgICAgIAlyZXR1cm4gbmV3IFcxMU9wZW5FeHRlcm5hbEVkaXRvckhlbHBlcigoKElGaWxlRWRpdG9ySW5wdXQpIGdldEVkaXRvcklucHV0KCkpLmdldEZpbGUoKSk7Ci0gICAgICAgIH0KLQkJcmV0dXJuIHN1cGVyLmdldEFkYXB0ZXIodHlwZSk7Ci0JfQotCQotCS8qKgotCSAqIExpc3RlbmVyIG9uIFNTRSdzIHNvdXJjZSBlZGl0b3IncyBzZWxlY3Rpb25zIHRoYXQgY29udmVydHMgRE9NCi0JICogc2VsZWN0aW9ucyBpbnRvIHhzZCBzZWxlY3Rpb25zIGFuZCBub3RpZmllcyBXU0RMIHNlbGVjdGlvbiBtYW5hZ2VyCi0JICovCi0JcHJpdmF0ZSBjbGFzcyBTb3VyY2VFZGl0b3JTZWxlY3Rpb25MaXN0ZW5lciBpbXBsZW1lbnRzIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgewotCQkvKioKLQkJICogRGV0ZXJtaW5lcyBXU0RMIGZhY2FkZSBvYmplY3QgYmFzZWQgb24gRE9NIG5vZGUKLQkJICogCi0JCSAqIEBwYXJhbSBvYmplY3QKLQkJICogQHJldHVybgotCQkgKi8KLQkJcHJpdmF0ZSBPYmplY3QgZ2V0V1NETEZhY2FkZU9iamVjdChPYmplY3Qgb2JqZWN0KSB7Ci0JCQkvLyBnZXQgdGhlIGVsZW1lbnQgbm9kZQotCQkJRWxlbWVudCBlbGVtZW50ID0gbnVsbDsKLQkJCWlmIChvYmplY3QgaW5zdGFuY2VvZiBOb2RlKSB7Ci0JCQkJTm9kZSBub2RlID0gKE5vZGUpIG9iamVjdDsKLQkJCQlpZiAobm9kZSAhPSBudWxsKSB7Ci0JCQkJCWlmIChub2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpIHsKLQkJCQkJCWVsZW1lbnQgPSAoRWxlbWVudCkgbm9kZTsKLQkJCQkJfQotCQkJCQllbHNlIGlmIChub2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5BVFRSSUJVVEVfTk9ERSkgewotCQkJCQkJZWxlbWVudCA9ICgoQXR0cikgbm9kZSkuZ2V0T3duZXJFbGVtZW50KCk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQlPYmplY3QgbyA9IGVsZW1lbnQ7Ci0JCQlpZiAoZWxlbWVudCAhPSBudWxsKSB7Ci0JCQkJRGVmaW5pdGlvbiBkZWYgPSAoRGVmaW5pdGlvbikgKChXMTFEZXNjcmlwdGlvbikgbW9kZWwpLmdldFRhcmdldCgpOwotCQkJCU9iamVjdCBtb2RlbE9iamVjdCA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZmluZE1vZGVsT2JqZWN0Rm9yRWxlbWVudChkZWYsIGVsZW1lbnQpOwotCQkJCQotCQkJCS8vIHJtYWg6IFdlIGhhbmRsZSB0aGlzIHNwZWNpYWwgc2NlbmFyaW8gd2hlcmUgdGhlIG1vZGVsT2JqZWN0IGlzIGFuIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50LgotCQkJCS8vIFdlIGFjdHVhbGx5IHdhbnQgdGhlIFhTRFNjaGVtYSBvYmplY3QuICBIb3dldmVyLCBvdXIgbm9kZSByZWNvbmNpbGVyIHdpbGwgYWx3YXlzIHJldHVybgotCQkJCS8vIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50IGJlY2F1c2UgYm90aCBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCBhbmQgWFNEU2NoZW1hCi0JCQkJLy8gYm90aCBoYXZlIHRoZSBTQU1FIEVsZW1lbnQgb2JqZWN0LCBhbmQgdGhlIHJlY29uY2lsZXIgZW5jb3VudGVycyB0aGUgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQKLQkJCQkvLyBmaXJzdC4uLi4gIFNlZSBXU0RMTm9kZU5vZGVBc3NvY2lhdGlvblByb3ZpZGVyIGZvciBtb3JlIGRldGFpbHMuLi4uLgotCQkJCWlmIChtb2RlbE9iamVjdCBpbnN0YW5jZW9mIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KSB7Ci0JCQkJCW1vZGVsT2JqZWN0ID0gKChYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCkgbW9kZWxPYmplY3QpLmdldFNjaGVtYSgpOwotCQkJCX0KLQkJCQlpZiAobW9kZWxPYmplY3QgIT0gbnVsbCkgewotCQkJCQlvID0gV1NETEFkYXB0ZXJGYWN0b3J5SGVscGVyLmdldEluc3RhbmNlKCkuYWRhcHQoKE5vdGlmaWVyKSBtb2RlbE9iamVjdCk7Ci0JCQkJfQotCQkJfQotCQkJcmV0dXJuIG87Ci0JCX0KLQkJCi0JCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7Ci0JCQlpZiAoZ2V0U2VsZWN0aW9uTWFuYWdlcigpLmdldEVuYWJsZU5vdGlmeSgpICYmIGdldEFjdGl2ZVBhZ2UoKSA9PSAxKQotCQkJewotCQkJCUlTZWxlY3Rpb24gc2VsZWN0aW9uID0gZXZlbnQuZ2V0U2VsZWN0aW9uKCk7Ci0JCQkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKQotCQkJCXsKLQkJCQkJTGlzdCBzZWxlY3Rpb25zID0gbmV3IEFycmF5TGlzdCgpOwotCQkJCQlmb3IgKEl0ZXJhdG9yIGkgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBzZWxlY3Rpb24pLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLQkJCQkJewotCQkJCQkJT2JqZWN0IGRvbU5vZGUgPSBpLm5leHQoKTsKLQkJCQkJCU9iamVjdCBmYWNhZGUgPSBnZXRXU0RMRmFjYWRlT2JqZWN0KGRvbU5vZGUpOwotCQkJCQkJaWYgKGZhY2FkZSAhPSBudWxsKQotCQkJCQkJewotCQkJCQkJCXNlbGVjdGlvbnMuYWRkKGZhY2FkZSk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJCi0JCQkJCWlmICghc2VsZWN0aW9ucy5pc0VtcHR5KCkpCi0JCQkJCXsKLQkJCQkJCVN0cnVjdHVyZWRTZWxlY3Rpb24gd3NkbFNlbGVjdGlvbiA9IG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHNlbGVjdGlvbnMpOwotCQkJCQkJZ2V0U2VsZWN0aW9uTWFuYWdlcigpLnNldFNlbGVjdGlvbih3c2RsU2VsZWN0aW9uLCBnZXRUZXh0RWRpdG9yKCkuZ2V0U2VsZWN0aW9uUHJvdmlkZXIoKSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JLyoqCi0JICogTGlzdGVuZXIgb24gV1NETCdzIHNlbGVjdGlvbiBtYW5hZ2VyJ3Mgc2VsZWN0aW9ucyB0aGF0IGNvbnZlcnRzIFdTREwKLQkgKiBzZWxlY3Rpb25zIGludG8gRE9NIHNlbGVjdGlvbnMgYW5kIG5vdGlmaWVzIFNTRSdzIHNlbGVjdGlvbiBwcm92aWRlcgotCSAqLwotCXByaXZhdGUgY2xhc3MgV1NETFNlbGVjdGlvbk1hbmFnZXJTZWxlY3Rpb25MaXN0ZW5lciBpbXBsZW1lbnRzIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgewotCQkvKioKLQkJICogRGV0ZXJtaW5lcyBET00gbm9kZSBiYXNlZCBvbiBvYmplY3QgKHdzZGwgbm9kZSkKLQkJICogCi0JCSAqIEBwYXJhbSBvYmplY3QKLQkJICogQHJldHVybgotCQkgKi8KLQkJcHJpdmF0ZSBPYmplY3QgZ2V0T2JqZWN0Rm9yT3RoZXJNb2RlbChPYmplY3Qgb2JqZWN0KSB7Ci0JCQlOb2RlIG5vZGUgPSBudWxsOwotCQkJCi0JCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgTm9kZSkgewotCQkJCW5vZGUgPSAoTm9kZSkgb2JqZWN0OwotCQkJfQotCQkJZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgU3RyaW5nKSB7Ci0JCQkJLy8gVGhlIHN0cmluZyBpcyBleHBlY3RlZCB0byBiZSBhIFVSSSBmcmFnbWVudCB1c2VkIHRvIGlkZW50aWZ5IGEgV1NETCBlbGVtZW50LgotCQkJCS8vIFRoZSBVUkkgZnJhZ21lbnQgc2hvdWxkIGJlIHJlbGF0aXZlIHRvIHRoZSBkZWZpbml0aW9uIGJlaW5nIGVkaXRlZCBpbiB0aGlzIGVkaXRvci4KLQkJCQlTdHJpbmcgdXJpRnJhZ21lbnQgPSAoU3RyaW5nKW9iamVjdDsKLQkJCQlFT2JqZWN0IGRlZmluaXRpb24gPSAoKERlZmluaXRpb24pKChXMTFEZXNjcmlwdGlvbilnZXRNb2RlbCgpKS5nZXRUYXJnZXQoKSk7Ci0JCQkJRU9iamVjdCBtb2RlbE9iamVjdCA9IGRlZmluaXRpb24uZVJlc291cmNlKCkuZ2V0RU9iamVjdCh1cmlGcmFnbWVudCk7Ci0KLQkJCQlpZiAobW9kZWxPYmplY3QgIT0gbnVsbCkgewotCQkJCQlub2RlID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXROb2RlRm9yT2JqZWN0KG1vZGVsT2JqZWN0KTsKLQkJCQl9ICAgICAgICAKLQkJCX0KLQkJCWVsc2UgewotCQkJCW5vZGUgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldE5vZGVGb3JPYmplY3Qob2JqZWN0KTsKLQkJCX0KLQkJCQotCQkJLy8gdGhlIHRleHQgZWRpdG9yIGNhbiBvbmx5IGFjY2VwdCBzZWQgbm9kZXMhCi0JCQkvLwotCQkJaWYgKCEobm9kZSBpbnN0YW5jZW9mIElET01Ob2RlKSkgewotCQkJCW5vZGUgPSBudWxsOwotCQkJfQotCQkJcmV0dXJuIG5vZGU7Ci0JCX0KLQkJCi0JCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7Ci0JCQkvLyBkbyBub3QgZmlyZSBzZWxlY3Rpb24gaW4gc291cmNlIGVkaXRvciBpZiB0aGUgY3VycmVudCBhY3RpdmUgcGFnZSBpcyB0aGUgSW50ZXJuYWxXU0RMTXVsdGlQYWdlRWRpdG9yIChzb3VyY2UpCi0JCQkvLyBXZSBvbmx5IHdhbnQgdG8gbWFrZSBzb3VyY2Ugc2VsZWN0aW9ucyBpZiB0aGUgYWN0aXZlIHBhZ2UgaXMgZWl0aGVyIHRoZSBvdXRsaW5lIG9yIHByb3BlcnRpZXMgKGEgbW9kaWZ5Ci0JCQkvLyBoYXMgYmVlbiBkb25lIHZpYSB0aGUgb3V0bGluZSBvciBwcm9wZXJ0aWVzIGFuZCBub3QgdGhlIHNvdXJjZSB2aWV3KS4gIFdlIGRvbid0IHdhbnQgdG8gYmUgc2VsZWN0aW5nCi0JCQkvLyBhbmQgdW5zZWxlY3RpbmcgdGhpbmdzIGluIHRoZSBzb3VyY2Ugd2hlbiBlZGl0aW5nIGluIHRoZSBzb3VyY2UhIQotCQkJYm9vbGVhbiBtYWtlU2VsZWN0aW9uID0gdHJ1ZTsKLQkJCWlmIChQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKSAhPSBudWxsICAmJiAhKGV2ZW50LmdldFNvdXJjZSgpIGluc3RhbmNlb2YgSVBvc3RTZWxlY3Rpb25Qcm92aWRlcikpIHsKLQkJCQlJV29ya2JlbmNoUGFnZSBwYWdlID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCk7Ci0JCQkJaWYgKHBhZ2UuZ2V0QWN0aXZlUGFydCgpIGluc3RhbmNlb2YgSW50ZXJuYWxXU0RMTXVsdGlQYWdlRWRpdG9yKSB7Ci0JCQkJCWlmIChnZXRBY3RpdmVFZGl0b3IoKSBpbnN0YW5jZW9mIFN0cnVjdHVyZWRUZXh0RWRpdG9yKSB7Ci0JCQkJCQltYWtlU2VsZWN0aW9uID0gZmFsc2U7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQkKLQkJCS8vIGRvIG5vdCBmaXJlIHNlbGVjdGlvbiBpbiBzb3VyY2UgZWRpdG9yIGlmIHNlbGVjdGlvbiBldmVudCBjYW1lCi0JCQkvLyBmcm9tIHNvdXJjZSBlZGl0b3IKLQkJCQlpZiAoZXZlbnQuZ2V0U291cmNlKCkgIT0gZ2V0VGV4dEVkaXRvcigpLmdldFNlbGVjdGlvblByb3ZpZGVyKCkgJiYgbWFrZVNlbGVjdGlvbikgewotCQkJCUlTZWxlY3Rpb24gc2VsZWN0aW9uID0gZXZlbnQuZ2V0U2VsZWN0aW9uKCk7Ci0JCQkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7Ci0JCQkJCUxpc3Qgb3RoZXJNb2RlbE9iamVjdExpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQkJCWZvciAoSXRlcmF0b3IgaSA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHNlbGVjdGlvbikuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQkJCQlPYmplY3Qgd3NkbE9iamVjdCA9IGkubmV4dCgpOwotCi0JCQkJCQlpZiAod3NkbE9iamVjdCBpbnN0YW5jZW9mIFdTRExCYXNlQWRhcHRlcikgewotCQkJCQkJCXdzZGxPYmplY3QgPSAoKFdTRExCYXNlQWRhcHRlcikgd3NkbE9iamVjdCkuZ2V0VGFyZ2V0KCk7Ci0JCQkJCQl9Ci0KLQkJCQkJCU9iamVjdCBvdGhlck1vZGVsT2JqZWN0ID0gZ2V0T2JqZWN0Rm9yT3RoZXJNb2RlbCh3c2RsT2JqZWN0KTsKLQkJCQkJCWlmIChvdGhlck1vZGVsT2JqZWN0ICE9IG51bGwpIHsKLQkJCQkJCQlvdGhlck1vZGVsT2JqZWN0TGlzdC5hZGQob3RoZXJNb2RlbE9iamVjdCk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJaWYgKCFvdGhlck1vZGVsT2JqZWN0TGlzdC5pc0VtcHR5KCkpIHsKLQkJCQkJCVN0cnVjdHVyZWRTZWxlY3Rpb24gbm9kZVNlbGVjdGlvbiA9IG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKG90aGVyTW9kZWxPYmplY3RMaXN0KTsKLQkJCQkJCWdldFRleHRFZGl0b3IoKS5nZXRTZWxlY3Rpb25Qcm92aWRlcigpLnNldFNlbGVjdGlvbihub2RlU2VsZWN0aW9uKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQkKLQlwcm90ZWN0ZWQgdm9pZCBjb25maWd1cmVHcmFwaGljYWxWaWV3ZXIoKSB7Ci0JCXN1cGVyLmNvbmZpZ3VyZUdyYXBoaWNhbFZpZXdlcigpOwotCQlncmFwaGljYWxWaWV3ZXIuZ2V0S2V5SGFuZGxlcigpLnB1dChLZXlTdHJva2UuZ2V0UHJlc3NlZChTV1QuRjIsIDApLCBnZXRBY3Rpb25SZWdpc3RyeSgpLmdldEFjdGlvbihHRUZBY3Rpb25Db25zdGFudHMuRElSRUNUX0VESVQpKTsKLQkJc2V0RWRpdFBhcnRGYWN0b3J5KGdldEVkaXRvck1vZGVNYW5hZ2VyKCkuZ2V0Q3VycmVudE1vZGUoKS5nZXRFZGl0UGFydEZhY3RvcnkoKSk7Ci0JfQotCQotCXByb3RlY3RlZCB2b2lkIGNyZWF0ZVBhZ2VzKCkgewotCQlzdXBlci5jcmVhdGVQYWdlcygpOwotCQkKLQkJaWYgKHJlc291cmNlQ2hhbmdlSGFuZGxlciA9PSBudWxsKSB7Ci0JCQlyZXNvdXJjZUNoYW5nZUhhbmRsZXIgPSBuZXcgV1NETEVkaXRvclJlc291cmNlQ2hhbmdlSGFuZGxlcih0aGlzKTsKLQkJCXJlc291cmNlQ2hhbmdlSGFuZGxlci5hdHRhY2goKTsKLQkJfQotCQkKLQkJZlNvdXJjZUVkaXRvclNlbGVjdGlvbkxpc3RlbmVyID0gbmV3IFNvdXJjZUVkaXRvclNlbGVjdGlvbkxpc3RlbmVyKCk7Ci0JCUlTZWxlY3Rpb25Qcm92aWRlciBwcm92aWRlciA9IGdldFRleHRFZGl0b3IoKS5nZXRTZWxlY3Rpb25Qcm92aWRlcigpOwotCQlpZiAocHJvdmlkZXIgaW5zdGFuY2VvZiBJUG9zdFNlbGVjdGlvblByb3ZpZGVyKSB7Ci0JCQkoKElQb3N0U2VsZWN0aW9uUHJvdmlkZXIpIHByb3ZpZGVyKS5hZGRQb3N0U2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKGZTb3VyY2VFZGl0b3JTZWxlY3Rpb25MaXN0ZW5lcik7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlwcm92aWRlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoZlNvdXJjZUVkaXRvclNlbGVjdGlvbkxpc3RlbmVyKTsKLQkJfQotCQkKLQkJZldTRExTZWxlY3Rpb25MaXN0ZW5lciA9IG5ldyBXU0RMU2VsZWN0aW9uTWFuYWdlclNlbGVjdGlvbkxpc3RlbmVyKCk7Ci0JCWdldFNlbGVjdGlvbk1hbmFnZXIoKS5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoZldTRExTZWxlY3Rpb25MaXN0ZW5lcik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0JCWlmIChzdHJ1Y3R1cmVkTW9kZWwgIT0gbnVsbCkgewotCQkJc3RydWN0dXJlZE1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOyAgICAgIAotCQl9Ci0JCWlmIChyZXNvdXJjZUNoYW5nZUhhbmRsZXIgIT0gbnVsbCkgewotCQkJcmVzb3VyY2VDaGFuZ2VIYW5kbGVyLmRpc3Bvc2UoKTsKLQkJfQotCQlnZXRTZWxlY3Rpb25NYW5hZ2VyKCkucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKGZXU0RMU2VsZWN0aW9uTGlzdGVuZXIpOwotCQlzdXBlci5kaXNwb3NlKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHJlbG9hZERlcGVuZGVuY2llcygpIHsKLQkJdHJ5IHsKLQkJCURlZmluaXRpb24gZGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKSAoKFcxMURlc2NyaXB0aW9uKSBnZXRNb2RlbCgpKS5nZXRUYXJnZXQoKTsKLQkJCWlmIChkZWZpbml0aW9uICE9IG51bGwpIHsKLQkJCQlXU0RMUmVzb3VyY2VVdGlsLnJlbG9hZERpcmVjdGl2ZXMoZGVmaW5pdGlvbik7Ci0JCQkJQ29tcG9uZW50UmVmZXJlbmNlVXRpbC51cGRhdGVCaW5kaW5nUmVmZXJlbmNlcyhkZWZpbml0aW9uKTsKLQkJCQlDb21wb25lbnRSZWZlcmVuY2VVdGlsLnVwZGF0ZVBvcnRUeXBlUmVmZXJlbmNlcyhkZWZpbml0aW9uKTsKLQkJCQlDb21wb25lbnRSZWZlcmVuY2VVdGlsLnVwZGF0ZU1lc3NhZ2VSZWZlcmVuY2VzKGRlZmluaXRpb24pOwotCQkJCUNvbXBvbmVudFJlZmVyZW5jZVV0aWwudXBkYXRlU2NoZW1hUmVmZXJlbmNlcyhkZWZpbml0aW9uKTsKLQkJCQkvLyB0aGUgbGluZSBiZWxvdyBzaW1wbHkgY2F1c2VzIGEgbm90aWZpY2F0aW9uIGluIG9yZGVyIHRvCi0JCQkJLy8gdXBkYXRlIG91cgotCQkJCS8vIHZpZXdzCi0JCQkJLy8KLQkJCQlkZWZpbml0aW9uLnNldERvY3VtZW50YXRpb25FbGVtZW50KGRlZmluaXRpb24uZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSB7Ci0JCX0KLQl9Ci0JCi0JcHJvdGVjdGVkIHZvaWQgY3JlYXRlQWN0aW9ucygpIHsKLQkJc3VwZXIuY3JlYXRlQWN0aW9ucygpOwotCSAgICBBY3Rpb25SZWdpc3RyeSByZWdpc3RyeSA9IGdldEFjdGlvblJlZ2lzdHJ5KCk7Ci0KLQkgICAgQmFzZVNlbGVjdGlvbkFjdGlvbiBhY3Rpb24gPSBuZXcgQVNEQWRkTWVzc2FnZUFjdGlvbih0aGlzKTsKLQkgICAgYWN0aW9uLnNldFNlbGVjdGlvblByb3ZpZGVyKGdldFNlbGVjdGlvbk1hbmFnZXIoKSk7Ci0JICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQWN0aW9uKGFjdGlvbik7Ci0KLQkgICAgYWN0aW9uID0gbmV3IFcxMUFkZFBhcnRBY3Rpb24odGhpcyk7Ci0JICAgIGFjdGlvbi5zZXRTZWxlY3Rpb25Qcm92aWRlcihnZXRTZWxlY3Rpb25NYW5hZ2VyKCkpOwotCSAgICByZWdpc3RyeS5yZWdpc3RlckFjdGlvbihhY3Rpb24pOwotCSAgICAKLQkgICAgYWN0aW9uID0gbmV3IFcxMVNldE5ld01lc3NhZ2VBY3Rpb24odGhpcyk7Ci0JICAgIGFjdGlvbi5zZXRTZWxlY3Rpb25Qcm92aWRlcihnZXRTZWxlY3Rpb25NYW5hZ2VyKCkpOwotCSAgICByZWdpc3RyeS5yZWdpc3RlckFjdGlvbihhY3Rpb24pOwotCi0JICAgIGFjdGlvbiA9IG5ldyBXMTFTZXRFeGlzdGluZ01lc3NhZ2VBY3Rpb24odGhpcyk7Ci0JICAgIGFjdGlvbi5zZXRTZWxlY3Rpb25Qcm92aWRlcihnZXRTZWxlY3Rpb25NYW5hZ2VyKCkpOwotCSAgICByZWdpc3RyeS5yZWdpc3RlckFjdGlvbihhY3Rpb24pOwotCSAgICAKLQkgICAgYWN0aW9uID0gbmV3IFcxMVNldE5ld1R5cGVBY3Rpb24odGhpcyk7Ci0JICAgIGFjdGlvbi5zZXRTZWxlY3Rpb25Qcm92aWRlcihnZXRTZWxlY3Rpb25NYW5hZ2VyKCkpOwotCSAgICByZWdpc3RyeS5yZWdpc3RlckFjdGlvbihhY3Rpb24pOwotCSAgICAKLQkgICAgYWN0aW9uID0gbmV3IFcxMVNldEV4aXN0aW5nVHlwZUFjdGlvbih0aGlzKTsKLQkgICAgYWN0aW9uLnNldFNlbGVjdGlvblByb3ZpZGVyKGdldFNlbGVjdGlvbk1hbmFnZXIoKSk7Ci0JICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQWN0aW9uKGFjdGlvbik7Ci0JICAgIAotCSAgICBhY3Rpb24gPSBuZXcgVzExU2V0TmV3RWxlbWVudEFjdGlvbih0aGlzKTsKLQkgICAgYWN0aW9uLnNldFNlbGVjdGlvblByb3ZpZGVyKGdldFNlbGVjdGlvbk1hbmFnZXIoKSk7Ci0JICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQWN0aW9uKGFjdGlvbik7Ci0JICAgIAotCSAgICBhY3Rpb24gPSBuZXcgVzExU2V0RXhpc3RpbmdFbGVtZW50QWN0aW9uKHRoaXMpOwotCSAgICBhY3Rpb24uc2V0U2VsZWN0aW9uUHJvdmlkZXIoZ2V0U2VsZWN0aW9uTWFuYWdlcigpKTsKLQkgICAgcmVnaXN0cnkucmVnaXN0ZXJBY3Rpb24oYWN0aW9uKTsKLQkgICAgCi0JICAgIGFjdGlvbiA9IG5ldyBXMTFPcGVuSW1wb3J0QWN0aW9uKHRoaXMpOwotCSAgICBhY3Rpb24uc2V0U2VsZWN0aW9uUHJvdmlkZXIoZ2V0U2VsZWN0aW9uTWFuYWdlcigpKTsKLQkgICAgcmVnaXN0cnkucmVnaXN0ZXJBY3Rpb24oYWN0aW9uKTsKLQotCSAgICBhY3Rpb24gPSBuZXcgT3BlbkluTmV3RWRpdG9yKHRoaXMpOwotCSAgICBhY3Rpb24uc2V0U2VsZWN0aW9uUHJvdmlkZXIoZ2V0U2VsZWN0aW9uTWFuYWdlcigpKTsKLQkgICAgcmVnaXN0cnkucmVnaXN0ZXJBY3Rpb24oYWN0aW9uKTsKLQotCSAgICBBU0REaXJlY3RFZGl0QWN0aW9uIGRpcmVjdEVkaXRBY3Rpb24gPSBuZXcgQVNERGlyZWN0RWRpdEFjdGlvbih0aGlzKTsKLQkgICAgZGlyZWN0RWRpdEFjdGlvbi5zZXRTZWxlY3Rpb25Qcm92aWRlcihnZXRTZWxlY3Rpb25NYW5hZ2VyKCkpOwotCSAgICByZWdpc3RyeS5yZWdpc3RlckFjdGlvbihkaXJlY3RFZGl0QWN0aW9uKTsKLQkgIH0KLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9FRElUT1JfTU9ERV9JRCA9ICJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kZWZhdWx0RWRpdG9yTW9kZUlkIjsgLy8kTk9OLU5MUy0xJAotICAKLSAgcHJvdGVjdGVkIEVkaXRvck1vZGVNYW5hZ2VyIGNyZWF0ZUVkaXRvck1vZGVNYW5hZ2VyKCkKLSAgewotICAgIGZpbmFsIFByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIgcHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlciA9IChQcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyKWdldEFkYXB0ZXIoUHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlci5jbGFzcyk7Ci0gICAgRWRpdG9yTW9kZU1hbmFnZXIgbWFuYWdlciA9IG5ldyBFZGl0b3JNb2RlTWFuYWdlcihXU0RMX0VESVRPUl9NT0RFX0VYVEVOU0lPTl9JRCkKLSAgICB7Ci0gICAgICBwdWJsaWMgdm9pZCBpbml0KCkKLSAgICAgIHsKLSAgICAgICAgaWYgKHByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIgPT0gbnVsbCB8fCAKLSAgICAgICAgICAgIHByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIuaXNFZGl0b3JNb2RlQXBwbGljYWJsZShEZWZhdWx0RWRpdG9yTW9kZS5JRCkpCi0gICAgICAgIHsgICAgICAgICAgCi0gICAgICAgICAgYWRkTW9kZShuZXcgRGVmYXVsdEVkaXRvck1vZGUoKSk7Ci0gICAgICAgIH0gIAotICAgICAgICBzdXBlci5pbml0KCk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIHByb3RlY3RlZCBFZGl0b3JNb2RlIGdldERlZmF1bHRNb2RlKCkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIGRlZmF1bHRNb2RlSWQgPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkuZ2V0U3RyaW5nKERFRkFVTFRfRURJVE9SX01PREVfSUQpOwotICAgICAgICBpZiAoZGVmYXVsdE1vZGVJZCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgRWRpdG9yTW9kZSBlZGl0b3JNb2RlID0gZ2V0RWRpdG9yTW9kZShkZWZhdWx0TW9kZUlkKTsKLSAgICAgICAgICBpZiAoZWRpdG9yTW9kZSAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlZGl0b3JNb2RlOwotICAgICAgICAgIH0gIAotICAgICAgICB9ICAgICAgICAgICAgICAgCi0gICAgICAgIHJldHVybiBzdXBlci5nZXREZWZhdWx0TW9kZSgpOwotICAgICAgfSAgICAgIAotICAgIH07Ci0gICAgbWFuYWdlci5zZXRQcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyKHByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIpOwotICAgIHJldHVybiBtYW5hZ2VyOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBlZGl0b3JNb2RlQ2hhbmdlZChFZGl0b3JNb2RlIG5ld0VkaXRvck1vZGUpCi0gIHsKLSAgICBFZGl0UGFydEZhY3RvcnkgZWRpdFBhcnRGYWN0b3J5ID0gbmV3RWRpdG9yTW9kZS5nZXRFZGl0UGFydEZhY3RvcnkoKTsKLSAgICBpZiAoZWRpdFBhcnRGYWN0b3J5ICE9IG51bGwpCi0gICAgeyAgCi0gICAgICBncmFwaGljYWxWaWV3ZXIuc2V0RWRpdFBhcnRGYWN0b3J5KGVkaXRQYXJ0RmFjdG9yeSk7Ci0gICAgICBpZiAoZ3JhcGhpY2FsVmlld2VyIGluc3RhbmNlb2YgRGVzaWduVmlld0dyYXBoaWNhbFZpZXdlcikKLSAgICAgIHsgIAotICAgICAgICBEZXNpZ25WaWV3R3JhcGhpY2FsVmlld2VyIHZpZXdlciA9IChEZXNpZ25WaWV3R3JhcGhpY2FsVmlld2VyKWdyYXBoaWNhbFZpZXdlcjsKLSAgICAgICAgRGVmaW5pdGlvbnNFZGl0UGFydCBlZGl0UGFydCA9IChEZWZpbml0aW9uc0VkaXRQYXJ0KXZpZXdlci5nZXRSb290RWRpdFBhcnQoKS5nZXRDb250ZW50cygpOwotICAgICAgICBlZGl0UGFydC5zZXRNb2RlbENoaWxkcmVuKENvbGxlY3Rpb25zLkVNUFRZX0xJU1QpOwotICAgICAgICBlZGl0UGFydC5yZWZyZXNoKCk7Ci0gICAgICAgIGVkaXRQYXJ0LnNldE1vZGVsQ2hpbGRyZW4obnVsbCk7Ci0gICAgICAgIGVkaXRQYXJ0LnJlZnJlc2goKTsgICAgICAgIAotICAgICAgfQotICAgIH0gIAotICAgIElDb250ZW50UHJvdmlkZXIgcHJvdmlkZXIgPSBuZXdFZGl0b3JNb2RlLmdldE91dGxpbmVQcm92aWRlcigpOwotICAgIGlmIChwcm92aWRlciAhPSBudWxsKQotICAgIHsKLSAgICAgIEFTRENvbnRlbnRPdXRsaW5lUGFnZSBvdXRsaW5lID0gKEFTRENvbnRlbnRPdXRsaW5lUGFnZSlnZXRDb250ZW50T3V0bGluZVBhZ2UoKTsKLSAgICAgIGlmIChvdXRsaW5lICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIFRyZWVWaWV3ZXIgdHJlZVZpZXdlciA9IG91dGxpbmUuZ2V0VHJlZVZpZXdlcigpOwotICAgICAgICBpZiAodHJlZVZpZXdlciAhPSBudWxsKQotICAgICAgICB7ICAgICAgCi0gICAgICAgICAgb3V0bGluZS5nZXRUcmVlVmlld2VyKCkuc2V0Q29udGVudFByb3ZpZGVyKHByb3ZpZGVyKTsKLSAgICAgICAgICBvdXRsaW5lLmdldFRyZWVWaWV3ZXIoKS5yZWZyZXNoKCk7Ci0gICAgICAgIH0KLSAgICAgIH0gIAotCi0gICAgfSAgCi0gIH0KLSAgCi0gIHByb3RlY3RlZCB2b2lkIHN0b3JlQ3VycmVudE1vZGVQcmVmZXJlbmNlKFN0cmluZyBpZCkKLSAgewotICAgIFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5zZXRWYWx1ZShERUZBVUxUX0VESVRPUl9NT0RFX0lELCBpZCk7ICAgIAotICB9ICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvTWVzc2FnZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvTWVzc2FnZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ5MDU3OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL01lc3NhZ2VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEudGV4dC5NZXNzYWdlRm9ybWF0OwotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLQotcHVibGljIGNsYXNzIE1lc3NhZ2VzIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSAib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwubWVzc2FnZXMiOyAvLyROT04tTkxTLTEkCi0KLQlzdGF0aWMgewotCQlOTFMuaW5pdGlhbGl6ZU1lc3NhZ2VzKEJVTkRMRV9OQU1FLCBNZXNzYWdlcy5jbGFzcyk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCXByaXZhdGUgc3RhdGljIGZpbmFsIFJlc291cmNlQnVuZGxlIFJFU09VUkNFX0JVTkRMRSA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZShCVU5ETEVfTkFNRSk7Ci0KLQlwcml2YXRlIE1lc3NhZ2VzKCkgewotCX0KLQotCS8qCi0JICogQGRlcHJlY2F0ZWQ6IFVzZSBNZXNzYWdlcy5fU1RSSU5HX0tFWSB0byBhY2Nlc3Mgc3RyaW5ncy4KLQkgKiBUaGlzIG1ldGhvZCB3aWxsIGJlIG1hZGUgcHJpdmF0ZSBpbiB0aGUgbmVhciBmdXR1cmUuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXkpIHsKLQkJdHJ5IHsKLQkJCXJldHVybiBSRVNPVVJDRV9CVU5ETEUuZ2V0U3RyaW5nKGtleSk7Ci0JCX0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7Ci0JCQlyZXR1cm4gJyEnICsga2V5ICsgJyEnOwotCQl9Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXksIFN0cmluZyBhcmcwKSB7Ci0JCXJldHVybiBNZXNzYWdlRm9ybWF0LmZvcm1hdChnZXRTdHJpbmcoa2V5KSwgbmV3IE9iamVjdCBbXSB7IGFyZzAgfSk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXksIE9iamVjdFtdIGFyZ3MpIHsKLQkJcmV0dXJuIE1lc3NhZ2VGb3JtYXQuZm9ybWF0KGdldFN0cmluZyhrZXkpLCBhcmdzKTsKLQl9Ci0JCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9FRElUT1JfTkFNRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfREVQRU5ERU5DSUVTX0NIQU5HRUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0RFUEVOREVOQ0lFU19DSEFOR0VEX1JFRlJFU0g7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0VESVRfTkFNRVNQQUNFU19ESUFMT0dfVElUTEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX1BSRUZfUEFHRV9DUkVBVElOR19GSUxFUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfUkVNRU1CRVJfTVlfREVDSVNJT05fTEFCRUw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX1BSRUZfUEFHRV9ERUZBVUxUX1RBUkdFVF9OQU1FU1BBQ0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX1JFR0VOX0JJTkRJTkdTX09OX1NBVkVfUVVFU1RJT05NQVJLOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9XQVJOSU5HX0RVUExJQ0FURV9OQU1FX0VYSVNUUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfTkFNRVNQQUNFX1VSSVNfVE9fQkVfSU5DTFVERUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX1BSRUZfUEFHRV9BVVRPX1JFR0VORVJBVEVfQklORElORzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfUFJFRl9QQUdFX1BST01QVF9SRUdFTl9CSU5ESU5HX09OX1NBVkU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0VESVRfTkFNRVNQQUNFUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX0FERF9JTVBPUlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9BRERfQklORElORzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX0FERF9QQVJUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fQUREX1hNTF9TQ0hFTUFfRUxFTUVOVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX1JFT1JERVJfUEFSVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX1JFT1JERVJfTUVTU0FHRV9SRUZFUkVOQ0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9PUEVOX0lOX05FV19FRElUT1I7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9FWElTVElOR19NRVNTQUdFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fRVhJU1RJTkdfRUxFTUVOVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfRVJST1JfTkFNRVNQQUNFX0lOVkFMSUQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0VSUk9SX0ZJTEVfQUxSRUFEWV9FWElTVFM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0RFU0NSSVBUSU9OX05FV19XU0RMX0ZJTEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX1JFR0VOX0JJTkRJTkRTX09OX1NBVkU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX1JBRElPX0RPQ1VNRU5UX0xJVEVSQUw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX1RJVExFX1NQRUNJRllfUE9SVFRZUEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0xBQkVMX0JJTkRJTkdfUFJPVE9DT0w7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0xBQkVMX0lOTElORV9TQ0hFTUFfT0Y7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0xBQkVMX1RBUkdFVF9OQU1FU1BBQ0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0xBQkVMX1BSRUZJWF9XSVRIX0NPTE9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9DUkVBVEVfV1NETF9TS0VMRVRPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfQ1JFQVRFX05FV19XU0RMX0ZJTEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0xBQkVMX1NPQVBfQklORElOR19PUFRJT05TOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9IVFRQX0JJTkRJTkdfT1BUSU9OUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfQUREX0VYVEVOU0lPTl9FTEVNRU5UOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9TUEVDSUZZX0JJTkRJTkdfREVUQUlMU19MQUJFTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfU1BFQ0lGWV9QT1JUX0RFVEFJTFNfVE9fQkVfQ1JFQVRFRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfTkVXX0JJTkRJTkc7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0xBQkVMX05FV19QT1JUVFlQRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfUkVGRVJFTkNFX0tJTkQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0xBQkVMX05FV19NRVNTQUdFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9SQURJT19SUENfRU5DT0RFRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfUkFESU9fUlBDX0xJVEVSQUw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9FWElTVElOR19UWVBFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9TUEVDSUZZX1BPUlRfREVUQUlMUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfVElUTEVfU1BFQ0lGWV9CSU5ESU5HOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9USVRMRV9TUEVDSUZZX0JJTkRJTkdfREVUQUlMUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfRVJST1JfRklMRV9NVVNUX0VORF9XSVRIX1dTREw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX1RJVExFX1NQRUNJRllfTUVTU0FHRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfVElUTEVfTkVXX1dTRExfRklMRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTkFNRV9JTlZBTElEX0NIQVJfRU5EOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fUkVOQU1FOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9GT0xERVJfVFlQRVM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0NBTkNFTF9MQUJFTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX05FV19UWVBFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fU0VUX1RZUEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0ZPTERFUl9JTVBPUlRTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9GT0xERVJfU0VSVklDRVM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0ZPTERFUl9CSU5ESU5HUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfRk9MREVSX0lOVEVSRkFDRVM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0ZPTERFUl9QT1JUVFlQRVM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0ZPTERFUl9NRVNTQUdFUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX05FV19NRVNTQUdFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fTkVXX0VMRU1FTlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9TRVRfRUxFTUVOVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX1NFVF9NRVNTQUdFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fU0VUX0JJTkRJTkc7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0NIRUNLQk9YX09WRVJXUklURTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX1NFVF9QT1JUVFlQRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX0VESVRfUE9SVF9BRERSRVNTOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fQUREOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fT1BFTl9JTVBPUlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX1VOU1BFQ0lGSUVEOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9OQU1FOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9UWVBFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9CVVRUT05fTkVXOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9FTEVNRU5UOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9CVVRUT05fQlJPV1NFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9CSU5ESU5HX1dJWkFSRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQklORElORzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfTUVTU0FHRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfUkVNT1ZFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9USVRMRV9TRUxFQ1Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX1RJVExFX1NFTEVDVF9GSUxFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9ERVNDUklQVElPTl9TRUxFQ1RfV1NETF9PUl9YU0Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX1RJVExFX09QVElPTlM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX1lFU19MQUJFTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfUE9SVF9UWVBFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9QT1JUX1dJWkFSRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTk9fTEFCRUw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FERDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfSEVMUDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfTkFNRV9GSUxURVI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1dBUk5fTkFNRV9NVVNUX0NPTlRBSU5fQVRfTEVBU1RfT05FX0NIQVI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1dBUk5fTkFNRV9IQVNfU1BBQ0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1dBUk5fTkFNRV9JTlZBTElEX0ZJUlNUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9XQVJOX05BTUVfSU5WQUxJRF9DSEFSOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9ERUZBVUxUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9XU0lfQ09NUExJQU5DRV9MSU5LX1RFWFQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1dBUk5fV1NJX0NPTVBMSUFOQ0VfU09BUF9QUk9UT0NPTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfRVJST1JfV1NJX0NPTVBMSUFOQ0VfU09BUF9QUk9UT0NPTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfV0FSTl9XU0lfQ09NUExJQU5DRV9SUENfRU5DT0RJTkc7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX0VSUk9SX1dTSV9DT01QTElBTkNFX1JQQ19FTkNPRElORzsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvUmVsb2FkRGVwZW5kZW5jaWVzQWN0aW9uRGVsZWdhdGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvUmVsb2FkRGVwZW5kZW5jaWVzQWN0aW9uRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmUyYzQzOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL1JlbG9hZERlcGVuZGVuY2llc0FjdGlvbkRlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yQWN0aW9uRGVsZWdhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5BY3Rpb25EZWxlZ2F0ZTsKLQotcHVibGljIGNsYXNzIFJlbG9hZERlcGVuZGVuY2llc0FjdGlvbkRlbGVnYXRlIGV4dGVuZHMgQWN0aW9uRGVsZWdhdGUgaW1wbGVtZW50cyBJRWRpdG9yQWN0aW9uRGVsZWdhdGUKLXsKLQlwcml2YXRlIEludGVybmFsV1NETE11bHRpUGFnZUVkaXRvciB3c2RsRWRpdG9yOwotCi0JcHVibGljIHZvaWQgc2V0QWN0aXZlRWRpdG9yKElBY3Rpb24gYWN0aW9uLCBJRWRpdG9yUGFydCB0YXJnZXRFZGl0b3IpCi0JewotCQl3c2RsRWRpdG9yID0gKHRhcmdldEVkaXRvciBpbnN0YW5jZW9mIEludGVybmFsV1NETE11bHRpUGFnZUVkaXRvcikgPyAoSW50ZXJuYWxXU0RMTXVsdGlQYWdlRWRpdG9yKXRhcmdldEVkaXRvciA6IG51bGw7Ci0JfQotCi0JcHVibGljIHZvaWQgcnVuKElBY3Rpb24gYWN0aW9uKQotCXsKLQkJaWYgKHdzZGxFZGl0b3IgIT0gbnVsbCkKLQkJewotCQkJdHJ5Ci0JCQl7Ci0JCQkJd3NkbEVkaXRvci5yZWxvYWREZXBlbmRlbmNpZXMoKTsKLQkJCX0KLQkJCWNhdGNoIChFeGNlcHRpb24gZSkKLQkJCXsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9Tb3VyY2VFZGl0b3JBY3Rpb25CYXJDb250cmlidXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9Tb3VyY2VFZGl0b3JBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNWZlMjczLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvU291cmNlRWRpdG9yQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JU3RhdHVzTGluZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklUb29sQmFyTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JQWN0aW9uQmFyczsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yQWN0aW9uQmFyQ29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5NdWx0aVBhZ2VFZGl0b3JBY3Rpb25CYXJDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLlN0cnVjdHVyZWRUZXh0RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuRXh0ZW5kZWRFZGl0b3JBY3Rpb25CdWlsZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuSUV4dGVuZGVkQ29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5JU291cmNlVmlld2VyQWN0aW9uQmFyQ29udHJpYnV0b3I7Ci0KLXB1YmxpYyBjbGFzcyBTb3VyY2VFZGl0b3JBY3Rpb25CYXJDb250cmlidXRvciBleHRlbmRzIE11bHRpUGFnZUVkaXRvckFjdGlvbkJhckNvbnRyaWJ1dG9yIGltcGxlbWVudHMgSUV4dGVuZGVkQ29udHJpYnV0b3IgewotCi0JcHJvdGVjdGVkIElFZGl0b3JBY3Rpb25CYXJDb250cmlidXRvciBkZXNpZ25WaWV3ZXJBY3Rpb25CYXJDb250cmlidXRvciA9IG51bGw7Ci0JcHJvdGVjdGVkIElFZGl0b3JBY3Rpb25CYXJDb250cmlidXRvciBzb3VyY2VWaWV3ZXJBY3Rpb25Db250cmlidXRvciA9IG51bGw7Ci0JcHJvdGVjdGVkIEludGVybmFsV1NETE11bHRpUGFnZUVkaXRvciBtdWx0aVBhZ2VFZGl0b3IgPSBudWxsOwotCi0JLy8gRWRpdG9yRXh0ZW5zaW9uCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVESVRPUl9JRCA9ICJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hY3Rpb25zLlhNTE11bHRpUGFnZUVkaXRvclBhcnQiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBJRXh0ZW5kZWRDb250cmlidXRvciBleHRlbmRlZENvbnRyaWJ1dG9yOwotCi0JcHVibGljIFNvdXJjZUVkaXRvckFjdGlvbkJhckNvbnRyaWJ1dG9yKCkgewotCQlzdXBlcigpOwotCi0JCXNvdXJjZVZpZXdlckFjdGlvbkNvbnRyaWJ1dG9yID0gbmV3IFNvdXJjZVBhZ2VBY3Rpb25Db250cmlidXRvcigpOwotCi0JCS8vIFJlYWQgYWN0aW9uIGV4dGVuc2lvbnMuCi0JCUV4dGVuZGVkRWRpdG9yQWN0aW9uQnVpbGRlciBidWlsZGVyID0gbmV3IEV4dGVuZGVkRWRpdG9yQWN0aW9uQnVpbGRlcigpOwotCQlleHRlbmRlZENvbnRyaWJ1dG9yID0gYnVpbGRlci5yZWFkQWN0aW9uRXh0ZW5zaW9ucyhFRElUT1JfSUQpOwotCX0KLQotCXB1YmxpYyB2b2lkIGluaXQoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgewotCQlzdXBlci5pbml0KGFjdGlvbkJhcnMpOwotCi0JCWlmIChhY3Rpb25CYXJzICE9IG51bGwpIHsKLQkJCWluaXREZXNpZ25WaWV3ZXJBY3Rpb25CYXJDb250cmlidXRvcihhY3Rpb25CYXJzKTsKLQkJCWluaXRTb3VyY2VWaWV3ZXJBY3Rpb25Db250cmlidXRvcihhY3Rpb25CYXJzKTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCB2b2lkIGluaXREZXNpZ25WaWV3ZXJBY3Rpb25CYXJDb250cmlidXRvcihJQWN0aW9uQmFycyBhY3Rpb25CYXJzKSB7Ci0JCWlmIChkZXNpZ25WaWV3ZXJBY3Rpb25CYXJDb250cmlidXRvciAhPSBudWxsKQotCQkJZGVzaWduVmlld2VyQWN0aW9uQmFyQ29udHJpYnV0b3IuaW5pdChhY3Rpb25CYXJzLCBnZXRQYWdlKCkpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGluaXRTb3VyY2VWaWV3ZXJBY3Rpb25Db250cmlidXRvcihJQWN0aW9uQmFycyBhY3Rpb25CYXJzKSB7Ci0JCWlmIChzb3VyY2VWaWV3ZXJBY3Rpb25Db250cmlidXRvciAhPSBudWxsKQotCQkJc291cmNlVmlld2VyQWN0aW9uQ29udHJpYnV0b3IuaW5pdChhY3Rpb25CYXJzLCBnZXRQYWdlKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0JCXN1cGVyLmRpc3Bvc2UoKTsKLQotCQlpZiAoZGVzaWduVmlld2VyQWN0aW9uQmFyQ29udHJpYnV0b3IgIT0gbnVsbCkKLQkJCWRlc2lnblZpZXdlckFjdGlvbkJhckNvbnRyaWJ1dG9yLmRpc3Bvc2UoKTsKLQotCQlpZiAoc291cmNlVmlld2VyQWN0aW9uQ29udHJpYnV0b3IgIT0gbnVsbCkKLQkJCXNvdXJjZVZpZXdlckFjdGlvbkNvbnRyaWJ1dG9yLmRpc3Bvc2UoKTsKLQotCQlpZiAoZXh0ZW5kZWRDb250cmlidXRvciAhPSBudWxsKQotCQkJZXh0ZW5kZWRDb250cmlidXRvci5kaXNwb3NlKCk7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5wYXJ0LkVkaXRvckFjdGlvbkJhckNvbnRyaWJ1dG9yLkVkaXRvckFjdGlvbkJhckNvbnRyaWJ1dG9yI2NvbnRyaWJ1dGVUb01lbnUoSU1lbnVNYW5hZ2VyKQotCSAqLwotCXB1YmxpYyBmaW5hbCB2b2lkIGNvbnRyaWJ1dGVUb01lbnUoSU1lbnVNYW5hZ2VyIG1lbnUpIHsKLQkJc3VwZXIuY29udHJpYnV0ZVRvTWVudShtZW51KTsKLQotCQlhZGRUb01lbnUobWVudSk7Ci0KLQkJaWYgKGV4dGVuZGVkQ29udHJpYnV0b3IgIT0gbnVsbCkKLQkJCWV4dGVuZGVkQ29udHJpYnV0b3IuY29udHJpYnV0ZVRvTWVudShtZW51KTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBhZGRUb01lbnUoSU1lbnVNYW5hZ2VyIG1lbnUpIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElFeHRlbmRlZENvbnRyaWJ1dG9yI2NvbnRyaWJ1dGVUb1BvcHVwTWVudShJTWVudU1hbmFnZXIpCi0JICovCi0JcHVibGljIGZpbmFsIHZvaWQgY29udHJpYnV0ZVRvUG9wdXBNZW51KElNZW51TWFuYWdlciBtZW51KSB7Ci0KLQkJYWRkVG9Qb3B1cE1lbnUobWVudSk7Ci0KLQkJaWYgKGV4dGVuZGVkQ29udHJpYnV0b3IgIT0gbnVsbCkKLQkJCWV4dGVuZGVkQ29udHJpYnV0b3IuY29udHJpYnV0ZVRvUG9wdXBNZW51KG1lbnUpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGFkZFRvUG9wdXBNZW51KElNZW51TWFuYWdlciBtZW51KSB7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5wYXJ0LkVkaXRvckFjdGlvbkJhckNvbnRyaWJ1dG9yLkVkaXRvckFjdGlvbkJhckNvbnRyaWJ1dG9yI2NvbnRyaWJ1dGVUb1Rvb2xCYXIoSVRvb2xCYXJNYW5hZ2VyKQotCSAqLwotCXB1YmxpYyBmaW5hbCB2b2lkIGNvbnRyaWJ1dGVUb1Rvb2xCYXIoSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyKSB7Ci0JCXN1cGVyLmNvbnRyaWJ1dGVUb1Rvb2xCYXIodG9vbEJhck1hbmFnZXIpOwotCi0JCWFkZFRvVG9vbEJhcih0b29sQmFyTWFuYWdlcik7Ci0KLQkJaWYgKGV4dGVuZGVkQ29udHJpYnV0b3IgIT0gbnVsbCkKLQkJCWV4dGVuZGVkQ29udHJpYnV0b3IuY29udHJpYnV0ZVRvVG9vbEJhcih0b29sQmFyTWFuYWdlcik7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgYWRkVG9Ub29sQmFyKElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlcikgewotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGFydC5FZGl0b3JBY3Rpb25CYXJDb250cmlidXRvci5FZGl0b3JBY3Rpb25CYXJDb250cmlidXRvciNjb250cmlidXRlVG9TdGF0dXNMaW5lKElTdGF0dXNMaW5lTWFuYWdlcikKLQkgKi8KLQlwdWJsaWMgZmluYWwgdm9pZCBjb250cmlidXRlVG9TdGF0dXNMaW5lKElTdGF0dXNMaW5lTWFuYWdlciBtYW5hZ2VyKSB7Ci0JCXN1cGVyLmNvbnRyaWJ1dGVUb1N0YXR1c0xpbmUobWFuYWdlcik7Ci0KLQkJYWRkVG9TdGF0dXNMaW5lKG1hbmFnZXIpOwotCi0JCWlmIChleHRlbmRlZENvbnRyaWJ1dG9yICE9IG51bGwpCi0JCQlleHRlbmRlZENvbnRyaWJ1dG9yLmNvbnRyaWJ1dGVUb1N0YXR1c0xpbmUobWFuYWdlcik7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgYWRkVG9TdGF0dXNMaW5lKElTdGF0dXNMaW5lTWFuYWdlciBtYW5hZ2VyKSB7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJRXh0ZW5kZWRDb250cmlidXRvciN1cGRhdGVUb29sYmFyQWN0aW9ucygpCi0JICovCi0JcHVibGljIHZvaWQgdXBkYXRlVG9vbGJhckFjdGlvbnMoKSB7Ci0JCWlmIChleHRlbmRlZENvbnRyaWJ1dG9yICE9IG51bGwpCi0JCQlleHRlbmRlZENvbnRyaWJ1dG9yLnVwZGF0ZVRvb2xiYXJBY3Rpb25zKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0QWN0aXZlRWRpdG9yKElFZGl0b3JQYXJ0IHRhcmdldEVkaXRvcikgewotCQkvLyBzYXZlIG11bHRpUGFnZUVkaXRvciBiZWZvcmUgY2FsbGluZyBzdXBlci5zZXRBY3RpdmVFZGl0b3IodGFyZ2V0RWRpdG9yKQotCQkvLyBzdXBlci5zZXRBY3RpdmVFZGl0b3Igd2lsbCBjYWxsIHNldEFjdGl2ZVBhZ2UoSUVkaXRvclBhcnQgYWN0aXZlRWRpdG9yKQotCQkvLyBtdWx0aVBhZ2VFZGl0b3IgaXMgbmVlZGVkIGluIHNldEFjdGl2ZVBhZ2UoSUVkaXRvclBhcnQgYWN0aXZlRWRpdG9yKQotCQlpZiAodGFyZ2V0RWRpdG9yIGluc3RhbmNlb2YgSW50ZXJuYWxXU0RMTXVsdGlQYWdlRWRpdG9yKQotCQkJbXVsdGlQYWdlRWRpdG9yID0gKEludGVybmFsV1NETE11bHRpUGFnZUVkaXRvcikgdGFyZ2V0RWRpdG9yOwotCi0JCXN1cGVyLnNldEFjdGl2ZUVkaXRvcih0YXJnZXRFZGl0b3IpOwotCi0JCXVwZGF0ZVRvb2xiYXJBY3Rpb25zKCk7Ci0KLQkJaWYgKGV4dGVuZGVkQ29udHJpYnV0b3IgIT0gbnVsbCkKLQkJCWV4dGVuZGVkQ29udHJpYnV0b3Iuc2V0QWN0aXZlRWRpdG9yKHRhcmdldEVkaXRvcik7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0QWN0aXZlUGFnZShJRWRpdG9yUGFydCBhY3RpdmVFZGl0b3IpIHsKLQkJLy8gVGhpcyBjb250cmlidXRvciBpcyBkZXNpZ25lZCBmb3IgU3RydWN0dXJlZFRleHRNdWx0aVBhZ2VFZGl0b3JQYXJ0LgotCQkvLyBUbyBzYWZlLWd1YXJkIHRoaXMgZnJvbSBwcm9ibGVtcyBjYXVzZWQgYnkgdW5leHBlY3RlZCB1c2FnZSBieSBvdGhlciBlZGl0b3JzLCB0aGUgZm9sbG93aW5nCi0JCS8vIGNoZWNrIGlzIGFkZGVkLgotCQlpZiAobXVsdGlQYWdlRWRpdG9yICE9IG51bGwpIHsKLQkJCWlmIChhY3RpdmVFZGl0b3IgIT0gbnVsbCAmJiBhY3RpdmVFZGl0b3IgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkVGV4dEVkaXRvcikKLQkJCQlhY3RpdmF0ZVNvdXJjZVBhZ2UoYWN0aXZlRWRpdG9yKTsKLQkJCWVsc2UKLQkJCQlhY3RpdmF0ZURlc2lnblBhZ2UoYWN0aXZlRWRpdG9yKTsKLQkJfQotCi0JCXVwZGF0ZVRvb2xiYXJBY3Rpb25zKCk7Ci0KLQkJSUFjdGlvbkJhcnMgYWN0aW9uQmFycyA9IGdldEFjdGlvbkJhcnMoKTsKLQkJaWYgKGFjdGlvbkJhcnMgIT0gbnVsbCkgewotCQkJLy8gdXBkYXRlIG1lbnUgYmFyIGFuZCB0b29sIGJhcgotCQkJYWN0aW9uQmFycy51cGRhdGVBY3Rpb25CYXJzKCk7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBhY3RpdmF0ZURlc2lnblBhZ2UoSUVkaXRvclBhcnQgYWN0aXZlRWRpdG9yKSB7Ci0JCWlmIChkZXNpZ25WaWV3ZXJBY3Rpb25CYXJDb250cmlidXRvciAhPSBudWxsICYmIGRlc2lnblZpZXdlckFjdGlvbkJhckNvbnRyaWJ1dG9yIGluc3RhbmNlb2YgSURlc2lnblZpZXdlckFjdGlvbkJhckNvbnRyaWJ1dG9yKSB7Ci0JCQlkZXNpZ25WaWV3ZXJBY3Rpb25CYXJDb250cmlidXRvci5zZXRBY3RpdmVFZGl0b3IobXVsdGlQYWdlRWRpdG9yKTsKLQkJfQotCi0JCWlmIChzb3VyY2VWaWV3ZXJBY3Rpb25Db250cmlidXRvciAhPSBudWxsICYmIHNvdXJjZVZpZXdlckFjdGlvbkNvbnRyaWJ1dG9yIGluc3RhbmNlb2YgSVNvdXJjZVZpZXdlckFjdGlvbkJhckNvbnRyaWJ1dG9yKSB7Ci0JCQkvLyBpZiBkZXNpZ24gcGFnZSBpcyBub3QgcmVhbGx5IGFuIElFZGl0b3JQYXJ0LCBhY3RpdmVFZGl0b3IgPT0gbnVsbCwgc28gcGFzcyBpbiBtdWx0aVBhZ2VFZGl0b3IgaW5zdGVhZCAoZDI4MjQxNCkKLQkJCWlmIChhY3RpdmVFZGl0b3IgPT0gbnVsbCkgewotCQkJCXNvdXJjZVZpZXdlckFjdGlvbkNvbnRyaWJ1dG9yLnNldEFjdGl2ZUVkaXRvcihtdWx0aVBhZ2VFZGl0b3IpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJc291cmNlVmlld2VyQWN0aW9uQ29udHJpYnV0b3Iuc2V0QWN0aXZlRWRpdG9yKGFjdGl2ZUVkaXRvcik7Ci0JCQl9Ci0JCQkoKElTb3VyY2VWaWV3ZXJBY3Rpb25CYXJDb250cmlidXRvcikgc291cmNlVmlld2VyQWN0aW9uQ29udHJpYnV0b3IpLnNldFZpZXdlclNwZWNpZmljQ29udHJpYnV0aW9uc0VuYWJsZWQoZmFsc2UpOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgYWN0aXZhdGVTb3VyY2VQYWdlKElFZGl0b3JQYXJ0IGFjdGl2ZUVkaXRvcikgewotCQlpZiAoZGVzaWduVmlld2VyQWN0aW9uQmFyQ29udHJpYnV0b3IgIT0gbnVsbCAmJiBkZXNpZ25WaWV3ZXJBY3Rpb25CYXJDb250cmlidXRvciBpbnN0YW5jZW9mIElEZXNpZ25WaWV3ZXJBY3Rpb25CYXJDb250cmlidXRvcikgewotCQkJZGVzaWduVmlld2VyQWN0aW9uQmFyQ29udHJpYnV0b3Iuc2V0QWN0aXZlRWRpdG9yKG11bHRpUGFnZUVkaXRvcik7Ci0JCX0KLQotCQlpZiAoc291cmNlVmlld2VyQWN0aW9uQ29udHJpYnV0b3IgIT0gbnVsbCAmJiBzb3VyY2VWaWV3ZXJBY3Rpb25Db250cmlidXRvciBpbnN0YW5jZW9mIElTb3VyY2VWaWV3ZXJBY3Rpb25CYXJDb250cmlidXRvcikgewotCQkJc291cmNlVmlld2VyQWN0aW9uQ29udHJpYnV0b3Iuc2V0QWN0aXZlRWRpdG9yKGFjdGl2ZUVkaXRvcik7Ci0JCQkoKElTb3VyY2VWaWV3ZXJBY3Rpb25CYXJDb250cmlidXRvcikgc291cmNlVmlld2VyQWN0aW9uQ29udHJpYnV0b3IpLnNldFZpZXdlclNwZWNpZmljQ29udHJpYnV0aW9uc0VuYWJsZWQodHJ1ZSk7Ci0JCX0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvU291cmNlUGFnZUFjdGlvbkNvbnRyaWJ1dG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL1NvdXJjZVBhZ2VBY3Rpb25Db250cmlidXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MGZjNzBkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvU291cmNlUGFnZUFjdGlvbkNvbnRyaWJ1dG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JQWN0aW9uQmFyczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLmFjdGlvbnMuQWN0aW9uQ29udHJpYnV0b3JYTUw7Ci0KLQotLyoqCi0gKiBTb3VyY2VQYWdlQWN0aW9uQ29udHJpYnV0b3IKLSAqIAotICogVGhpcyBjbGFzcyBpcyBmb3IgbXVsdGkgcGFnZSBlZGl0b3IncyBzb3VyY2UgcGFnZSBjb250cmlidXRvci4KLSAqCi0gKiBVc2UgV1NETEVkaXRvckFjdGlvbkNvbnRyaWJ1dG9yIGZvciBzaW5nbGUgcGFnZSBlZGl0b3IKLSAqICovCi1wdWJsaWMgY2xhc3MgU291cmNlUGFnZUFjdGlvbkNvbnRyaWJ1dG9yIGV4dGVuZHMgQWN0aW9uQ29udHJpYnV0b3JYTUwgewotCi0JcHJpdmF0ZSBJQWN0aW9uQmFycyBmQmFyczsKLQotCS8qKgotCSAqIFRoaXMgbWV0aG9kIGNhbGxzOgotCSAqIDx1bD4KLQkgKiAgPGxpPjxjb2RlPmNvbnRyaWJ1dGVUb01lbnU8L2NvZGU+IHdpdGggPGNvZGU+YmFyczwvY29kZT4nIG1lbnUgbWFuYWdlcjwvbGk+Ci0JICogIDxsaT48Y29kZT5jb250cmlidXRlVG9Ub29sQmFyPC9jb2RlPiB3aXRoIDxjb2RlPmJhcnM8L2NvZGU+JyB0b29sIGJhcgotCSAqICAgIG1hbmFnZXI8L2xpPgotCSAqICA8bGk+PGNvZGU+Y29udHJpYnV0ZVRvU3RhdHVzTGluZTwvY29kZT4gd2l0aCA8Y29kZT5iYXJzPC9jb2RlPicgc3RhdHVzIGxpbmUKLQkgKiAgICBtYW5hZ2VyPC9saT4KLQkgKiA8L3VsPgotCSAqIFRoZSBnaXZlbiBhY3Rpb24gYmFycyBhcmUgYWxzbyByZW1lbWJlcmVkIGFuZCBtYWRlIGFjY2Vzc2libGUgdmlhIAotCSAqIDxjb2RlPmdldEFjdGlvbkJhcnM8L2NvZGU+LgotCSAqIAotCSAqIEBwYXJhbSBiYXJzIHRoZSBhY3Rpb24gYmFycwotCSAqIAotCSAqLwotCXB1YmxpYyB2b2lkIGluaXQoSUFjdGlvbkJhcnMgYmFycykgewotCQlmQmFycyA9IGJhcnM7Ci0JCWNvbnRyaWJ1dGVUb01lbnUoYmFycy5nZXRNZW51TWFuYWdlcigpKTsKLQkJY29udHJpYnV0ZVRvVG9vbEJhcihiYXJzLmdldFRvb2xCYXJNYW5hZ2VyKCkpOwotCQljb250cmlidXRlVG9TdGF0dXNMaW5lKGJhcnMuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKSk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGlzIGNvbnRyaWJ1dG9yJ3MgYWN0aW9uIGJhcnMuCi0JICoKLQkgKiBAcmV0dXJuIHRoZSBhY3Rpb24gYmFycwotCSAqLwotCXB1YmxpYyBJQWN0aW9uQmFycyBnZXRBY3Rpb25CYXJzKCkgewotCQlyZXR1cm4gZkJhcnM7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uV1NETC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25XU0RMLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhZmIxMjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25XU0RMLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuSVNvdXJjZVZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLlN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvblhNTDsKLQotcHVibGljIGNsYXNzIFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbldTREwgZXh0ZW5kcyBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25YTUwgewotCXByb3RlY3RlZCBNYXAgZ2V0SHlwZXJsaW5rRGV0ZWN0b3JUYXJnZXRzKElTb3VyY2VWaWV3ZXIgc291cmNlVmlld2VyKSB7Ci0JCU1hcCB0YXJnZXRzID0gc3VwZXIuZ2V0SHlwZXJsaW5rRGV0ZWN0b3JUYXJnZXRzKHNvdXJjZVZpZXdlcik7Ci0JCXRhcmdldHMucHV0KCJvcmcuZWNsaXBzZS53c3Qud3NkbC53c2Rsc291cmNlIiwgbnVsbCk7ICAvLyROT04tTkxTLTEkCi0JCXJldHVybiB0YXJnZXRzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvV1NETEFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL1dTRExBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzRiYjI1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvV1NETEFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuZWRpdHBhcnRzLlpvb21NYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi51aS5hY3Rpb25zLkFjdGlvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi51aS5hY3Rpb25zLlpvb21Db21ib0NvbnRyaWJ1dGlvbkl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLnVpLmFjdGlvbnMuWm9vbUluUmV0YXJnZXRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLnVpLmFjdGlvbnMuWm9vbU91dFJldGFyZ2V0QWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkdyb3VwTWFya2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklUb29sQmFyTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkJhcnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvckFjdGlvbkJhckNvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JTaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hBY3Rpb25Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnRTaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuQWN0aW9uRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLlJldGFyZ2V0QWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuTXVsdGlQYWdlRWRpdG9yQWN0aW9uQmFyQ29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5NdWx0aVBhZ2VFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuSVRleHRFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5JVGV4dEVkaXRvckFjdGlvbkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLklTb3VyY2VWaWV3ZXJBY3Rpb25CYXJDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hY3Rpb25zLklXU0RMVG9vbGJhckFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0REZWxldGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuYWN0aW9ucy5DYXB0dXJlU2NyZWVuQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgV1NETEFjdGlvbkJhckNvbnRyaWJ1dG9yIGV4dGVuZHMgTXVsdGlQYWdlRWRpdG9yQWN0aW9uQmFyQ29udHJpYnV0b3IKLXsKLSAgcHJpdmF0ZSBJRWRpdG9yUGFydCBhY3RpdmVFZGl0b3JQYXJ0OwotICBwcml2YXRlIEludGVybmFsV1NETE11bHRpUGFnZUVkaXRvciB3c2RsRWRpdG9yOwotICBwcm90ZWN0ZWQgSVRleHRFZGl0b3IgdGV4dEVkaXRvcjsKLSAgcHJvdGVjdGVkIElFZGl0b3JBY3Rpb25CYXJDb250cmlidXRvciBzb3VyY2VWaWV3ZXJBY3Rpb25Db250cmlidXRvciA9IG51bGw7Ci0gIHByb3RlY3RlZCBMaXN0IGZQYXJ0TGlzdGVuZXJzPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIFpvb21JblJldGFyZ2V0QWN0aW9uIHpvb21JblJldGFyZ2V0QWN0aW9uOwotICBab29tT3V0UmV0YXJnZXRBY3Rpb24gem9vbU91dFJldGFyZ2V0QWN0aW9uOwotICBab29tQ29tYm9Db250cmlidXRpb25JdGVtIHpvb21Db21ib0NvbnRyaWJ1dGlvbkl0ZW07Ci0gIEFjdGlvbiBjYXB0dXJlU2NyZWVuQWN0aW9uOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgV1NETEFjdGlvbkJhckNvbnRyaWJ1dG9yLgotICAgKi8KLSAgcHVibGljIFdTRExBY3Rpb25CYXJDb250cmlidXRvcigpCi0gIHsKLSAgICBzdXBlcigpOwotICAgIHNvdXJjZVZpZXdlckFjdGlvbkNvbnRyaWJ1dG9yID0gbmV3IFNvdXJjZVBhZ2VBY3Rpb25Db250cmlidXRvcigpOwotICAgIHpvb21JblJldGFyZ2V0QWN0aW9uID0gbmV3IFpvb21JblJldGFyZ2V0QWN0aW9uKCk7Ci0gICAgem9vbU91dFJldGFyZ2V0QWN0aW9uID0gbmV3IFpvb21PdXRSZXRhcmdldEFjdGlvbigpOwotICAgIGNhcHR1cmVTY3JlZW5BY3Rpb24gPSBuZXcgQ2FwdHVyZVNjcmVlbkFjdGlvbigpOwotICAgIGZQYXJ0TGlzdGVuZXJzLmFkZCh6b29tSW5SZXRhcmdldEFjdGlvbik7Ci0gICAgZlBhcnRMaXN0ZW5lcnMuYWRkKHpvb21PdXRSZXRhcmdldEFjdGlvbik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRBY3RpdmVQYWdlKElFZGl0b3JQYXJ0IHBhcnQpCi0gIHsKLSAgICBpZiAoYWN0aXZlRWRpdG9yUGFydCA9PSBwYXJ0KQotICAgICAgcmV0dXJuOwotCi0gICAgYWN0aXZlRWRpdG9yUGFydCA9IHBhcnQ7Ci0KLSAgICBJQWN0aW9uQmFycyBhY3Rpb25CYXJzID0gZ2V0QWN0aW9uQmFycygpOwotICAgIGJvb2xlYW4gaXNTb3VyY2UgPSBmYWxzZTsKLSAgICAKLSAgICBpZiAoYWN0aXZlRWRpdG9yUGFydCAhPSBudWxsICYmIGFjdGl2ZUVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVGV4dEVkaXRvcikKLSAgICB7Ci0gICAgCWlzU291cmNlID0gdHJ1ZTsKLSAgICAgICAgem9vbUluUmV0YXJnZXRBY3Rpb24uc2V0RW5hYmxlZChmYWxzZSk7Ci0gICAgICAgIHpvb21PdXRSZXRhcmdldEFjdGlvbi5zZXRFbmFibGVkKGZhbHNlKTsKLSAgICAgICAgYWN0aXZhdGVTb3VyY2VQYWdlKGFjdGl2ZUVkaXRvclBhcnQsIHRydWUpOwotICAgICAgICBjYXB0dXJlU2NyZWVuQWN0aW9uLnNldEVuYWJsZWQoZmFsc2UpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgYWN0aXZhdGVTb3VyY2VQYWdlKHdzZGxFZGl0b3IsIGZhbHNlKTsKLSAgICAgIGlmIChwYXJ0IGluc3RhbmNlb2YgSW50ZXJuYWxXU0RMTXVsdGlQYWdlRWRpdG9yKQotICAgICAgewotICAgICAgICB3c2RsRWRpdG9yID0gKEludGVybmFsV1NETE11bHRpUGFnZUVkaXRvcikgcGFydDsKLSAgICAgIH0KLSAgICAgIGlmICh3c2RsRWRpdG9yICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIC8vIGNzOiBoZXJlJ3Mgd2UgZW5zdXJlIHRoZSBVTkRPIGFuZCBSRURPIGFjdGlvbnMgYXJlIGF2YWlsYWJsZSB3aGVuIAotICAgICAgICAvLyB0aGUgZGVzaWduIHZpZXcgaXMgYWN0aXZlCi0gICAgICAgIElXb3JrYmVuY2hQYXJ0U2l0ZSBzaXRlID0gd3NkbEVkaXRvci5nZXRTaXRlKCk7Ci0gICAgICAgIGlmIChzaXRlIGluc3RhbmNlb2YgSUVkaXRvclNpdGUpIAotICAgICAgICB7Ci0gICAgICAgICAgSVRleHRFZGl0b3IgdGV4dEVkaXRvciA9IHdzZGxFZGl0b3IuZ2V0VGV4dEVkaXRvcigpOwotICAgICAgICAgIElBY3Rpb25CYXJzIHNpdGVBY3Rpb25CYXJzID0gKChJRWRpdG9yU2l0ZSkgc2l0ZSkuZ2V0QWN0aW9uQmFycygpOwotICAgICAgICAgIHNpdGVBY3Rpb25CYXJzLnNldEdsb2JhbEFjdGlvbkhhbmRsZXIoSVRleHRFZGl0b3JBY3Rpb25Db25zdGFudHMuVU5ETywgZ2V0QWN0aW9uKHRleHRFZGl0b3IsIElUZXh0RWRpdG9yQWN0aW9uQ29uc3RhbnRzLlVORE8pKTsKLSAgICAgICAgICBzaXRlQWN0aW9uQmFycy5zZXRHbG9iYWxBY3Rpb25IYW5kbGVyKElUZXh0RWRpdG9yQWN0aW9uQ29uc3RhbnRzLlJFRE8sIGdldEFjdGlvbih0ZXh0RWRpdG9yLCBJVGV4dEVkaXRvckFjdGlvbkNvbnN0YW50cy5SRURPKSk7Ci0gICAgICAgICAgc2l0ZUFjdGlvbkJhcnMudXBkYXRlQWN0aW9uQmFycygpOyAgICAgICAgICAgICAgCi0gICAgICAgIH0gICAgICAgIAotCi0gICAgICAgIE9iamVjdCBhZGFwdGVyID0gd3NkbEVkaXRvci5nZXRBZGFwdGVyKEFjdGlvblJlZ2lzdHJ5LmNsYXNzKTsKLSAgICAgICAgaWYgKGFkYXB0ZXIgaW5zdGFuY2VvZiBBY3Rpb25SZWdpc3RyeSkKLSAgICAgICAgewotICAgICAgICAgIEFjdGlvblJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gKEFjdGlvblJlZ2lzdHJ5KSBhZGFwdGVyOwotICAgICAgICAgIGFjdGlvbkJhcnMuc2V0R2xvYmFsQWN0aW9uSGFuZGxlcihBY3Rpb25GYWN0b3J5LkRFTEVURS5nZXRJZCgpLCByZWdpc3RyeS5nZXRBY3Rpb24oQVNERGVsZXRlQWN0aW9uLklEKSk7Ci0gICAgICAgICAgem9vbUluUmV0YXJnZXRBY3Rpb24uc2V0RW5hYmxlZCh0cnVlKTsKLSAgICAgICAgICB6b29tT3V0UmV0YXJnZXRBY3Rpb24uc2V0RW5hYmxlZCh0cnVlKTsKLSAgICAgICAgICBjYXB0dXJlU2NyZWVuQWN0aW9uLnNldEVuYWJsZWQodHJ1ZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoYWN0aW9uQmFycyAhPSBudWxsKSB7Ci0gICAgICAvLyB1cGRhdGUgbWVudSBiYXIgYW5kIHRvb2wgYmFyCi0gICAgICBhY3Rpb25CYXJzLnVwZGF0ZUFjdGlvbkJhcnMoKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKHpvb21Db21ib0NvbnRyaWJ1dGlvbkl0ZW0gIT0gbnVsbCkKLSAgICB7Ci0gICAgICB6b29tQ29tYm9Db250cmlidXRpb25JdGVtLnNldFZpc2libGUoIWlzU291cmNlKTsKLSAgICAgIHpvb21Db21ib0NvbnRyaWJ1dGlvbkl0ZW0udXBkYXRlKCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGFjdGlvbiByZWdpc3RlZCB3aXRoIHRoZSBnaXZlbiB0ZXh0IGVkaXRvci4KLSAgICogQHJldHVybiBJQWN0aW9uIG9yIG51bGwgaWYgZWRpdG9yIGlzIG51bGwuCi0gICAqLwotICBwcm90ZWN0ZWQgSUFjdGlvbiBnZXRBY3Rpb24oSVRleHRFZGl0b3IgZWRpdG9yLCBTdHJpbmcgYWN0aW9uSUQpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICByZXR1cm4gKGVkaXRvciA9PSBudWxsID8gbnVsbCA6IGVkaXRvci5nZXRBY3Rpb24oYWN0aW9uSUQpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgY29udHJpYnV0ZVRvVG9vbEJhcihJVG9vbEJhck1hbmFnZXIgbWFuYWdlcikKLSAgewotICAgIG1hbmFnZXIuYWRkKG5ldyBHcm91cE1hcmtlcigiV1NETEVkaXRvciIpKTsgLy8kTk9OLU5MUy0xJAotICAgIExpc3QgbGlzdCA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRXU0RMRWRpdG9yQ29uZmlndXJhdGlvbigpLmdldFRvb2xiYXJBY3Rpb25zKCk7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gbGlzdC5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgIHsKLSAgICAgIG1hbmFnZXIuYWRkKChJV1NETFRvb2xiYXJBY3Rpb24paS5uZXh0KCkpOwotICAgIH0KLQotLy8gICAgbWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigpKTsKLSAgICBTdHJpbmdbXSB6b29tU3RyaW5ncyA9IG5ldyBTdHJpbmdbXSB7IFpvb21NYW5hZ2VyLkZJVF9BTEwsIFpvb21NYW5hZ2VyLkZJVF9IRUlHSFQsIFpvb21NYW5hZ2VyLkZJVF9XSURUSCB9OwotICAgIHpvb21Db21ib0NvbnRyaWJ1dGlvbkl0ZW0gPSBuZXcgWm9vbUNvbWJvQ29udHJpYnV0aW9uSXRlbShnZXRQYWdlKCksIHpvb21TdHJpbmdzKTsKLSAgICBtYW5hZ2VyLmFkZCh6b29tQ29tYm9Db250cmlidXRpb25JdGVtKTsKLSAgICBtYW5hZ2VyLmFkZChjYXB0dXJlU2NyZWVuQWN0aW9uKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEFjdGl2ZUVkaXRvcihJRWRpdG9yUGFydCBwYXJ0KQotICB7Ci0gICAgSUVkaXRvclBhcnQgYWN0aXZlTmVzdGVkRWRpdG9yID0gbnVsbDsKLSAgICBpZiAocGFydCBpbnN0YW5jZW9mIE11bHRpUGFnZUVkaXRvclBhcnQpCi0gICAgewotICAgICAgYWN0aXZlTmVzdGVkRWRpdG9yID0gcGFydDsKLSAgICB9Ci0gICAgc2V0QWN0aXZlUGFnZShhY3RpdmVOZXN0ZWRFZGl0b3IpOwotICAgIAotICAgIGlmIChwYXJ0IGluc3RhbmNlb2YgSW50ZXJuYWxXU0RMTXVsdGlQYWdlRWRpdG9yKQotICAgIHsKLSAgICAgIHdzZGxFZGl0b3IgPSAoSW50ZXJuYWxXU0RMTXVsdGlQYWdlRWRpdG9yKSBwYXJ0OwotCi0gICAgICB0ZXh0RWRpdG9yID0gd3NkbEVkaXRvci5nZXRUZXh0RWRpdG9yKCk7Ci0gICAgICBpZiAodGV4dEVkaXRvciAhPSBudWxsKQotICAgICAgeyAgICAgIAotICAgICAgICBnZXRBY3Rpb25CYXJzKCkudXBkYXRlQWN0aW9uQmFycygpOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICBMaXN0IGxpc3QgPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0V1NETEVkaXRvckNvbmZpZ3VyYXRpb24oKS5nZXRUb29sYmFyQWN0aW9ucygpOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IGxpc3QuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICB7Ci0gICAgICAoKElXU0RMVG9vbGJhckFjdGlvbilpLm5leHQoKSkuc2V0RWRpdG9yUGFydChwYXJ0KTsKLSAgICB9Ci0gICAgc3VwZXIuc2V0QWN0aXZlRWRpdG9yKHBhcnQpOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgdm9pZCBhY3RpdmF0ZVNvdXJjZVBhZ2UoSUVkaXRvclBhcnQgYWN0aXZlRWRpdG9yLCBib29sZWFuIHN0YXRlKQotICB7Ci0gICAgaWYgKHNvdXJjZVZpZXdlckFjdGlvbkNvbnRyaWJ1dG9yICE9IG51bGwgJiYgc291cmNlVmlld2VyQWN0aW9uQ29udHJpYnV0b3IgaW5zdGFuY2VvZiBJU291cmNlVmlld2VyQWN0aW9uQmFyQ29udHJpYnV0b3IpCi0gICAgewotICAgICAgc291cmNlVmlld2VyQWN0aW9uQ29udHJpYnV0b3Iuc2V0QWN0aXZlRWRpdG9yKGFjdGl2ZUVkaXRvcik7Ci0gICAgICAoKElTb3VyY2VWaWV3ZXJBY3Rpb25CYXJDb250cmlidXRvcikgc291cmNlVmlld2VyQWN0aW9uQ29udHJpYnV0b3IpLnNldFZpZXdlclNwZWNpZmljQ29udHJpYnV0aW9uc0VuYWJsZWQoc3RhdGUpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIGluaXQoSUFjdGlvbkJhcnMgYmFycywgSVdvcmtiZW5jaFBhZ2UgcGFnZSkKLSAgewotCSAgSXRlcmF0b3IgZSA9IGZQYXJ0TGlzdGVuZXJzLml0ZXJhdG9yKCk7Ci0JICB3aGlsZSAoZS5oYXNOZXh0KCkpCi0JICB7Ci0JCSAgcGFnZS5hZGRQYXJ0TGlzdGVuZXIoKFJldGFyZ2V0QWN0aW9uKSBlLm5leHQoKSk7Ci0JICB9Ci0KLQkgIGluaXRTb3VyY2VWaWV3ZXJBY3Rpb25Db250cmlidXRvcihiYXJzKTsKLQkgIHN1cGVyLmluaXQoYmFycywgcGFnZSk7Ci0gIH0KLQotICAKLSAgcHJvdGVjdGVkIHZvaWQgaW5pdFNvdXJjZVZpZXdlckFjdGlvbkNvbnRyaWJ1dG9yKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsKLSAgICBpZiAoc291cmNlVmlld2VyQWN0aW9uQ29udHJpYnV0b3IgIT0gbnVsbCkKLSAgICAgIHNvdXJjZVZpZXdlckFjdGlvbkNvbnRyaWJ1dG9yLmluaXQoYWN0aW9uQmFycywgZ2V0UGFnZSgpKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgZGlzcG9zZSgpCi0gIHsKLQkgIGZQYXJ0TGlzdGVuZXJzID0gbnVsbDsKLQkgIGlmIChzb3VyY2VWaWV3ZXJBY3Rpb25Db250cmlidXRvciAhPSBudWxsKQotCQkgIHNvdXJjZVZpZXdlckFjdGlvbkNvbnRyaWJ1dG9yLmRpc3Bvc2UoKTsKLQkgIHN1cGVyLmRpc3Bvc2UoKTsKLSAgfQotCi1wdWJsaWMgdm9pZCBjb250cmlidXRlVG9NZW51KElNZW51TWFuYWdlciBtYW5hZ2VyKSB7Ci0Jc3VwZXIuY29udHJpYnV0ZVRvTWVudShtYW5hZ2VyKTsKLQkKLQlJTWVudU1hbmFnZXIgbWVudSA9IG5ldyBNZW51TWFuYWdlcihNZXNzYWdlcy5fVUlfRURJVE9SX05BTUUsICJXU0RMRWRpdG9yIik7Ci0KLSAgICBtZW51LmFkZCh6b29tSW5SZXRhcmdldEFjdGlvbik7Ci0gICAgbWVudS5hZGQoem9vbU91dFJldGFyZ2V0QWN0aW9uKTsKLQltYW5hZ2VyLmFwcGVuZFRvR3JvdXAoSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NQl9BRERJVElPTlMsIG1lbnUpOwotCW1lbnUuYWRkKGNhcHR1cmVTY3JlZW5BY3Rpb24pOwotCi0gICAgbWVudS51cGRhdGVBbGwodHJ1ZSk7Ci0JCi19Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvV1NETEVkaXRvclBsdWdpbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9XU0RMRWRpdG9yUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3YTBhZTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9XU0RMRWRpdG9yUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuSVByZWZlcmVuY2VTdG9yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZXh0ZW5zaW9ucy5OU0tleWVkRXh0ZW5zaW9uUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZXh0ZW5zaW9ucy5XU0RMRWRpdG9yQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0b3IuUHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmNvbW1vbi5wcm9wZXJ0aWVzLnNlY3Rpb25zLmFwcGluZm8uRXh0ZW5zaW9uc1NjaGVtYXNSZWdpc3RyeTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OwotCi1wdWJsaWMgY2xhc3MgV1NETEVkaXRvclBsdWdpbiBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4gLy8sIElQbHVnaW5IZWxwZXIKLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9QQUdFID0gIm9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmRlZmF1bHRwYWdlIjsgLy8kTk9OLU5MUy0xJAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERVNJR05fUEFHRSA9ICJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5kZXNpZ25wYWdlIjsgLy8kTk9OLU5MUy0xJAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTT1VSQ0VfUEFHRSA9ICJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5zb3VyY2VwYWdlIjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS53c3Qud3NkbC51aSI7IC8vJE5PTi1OTFMtMSQKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgWFNEX0VESVRPUl9JRCA9ICJvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmVkaXRvci5JbnRlcm5hbFhTRE11bHRpUGFnZUVkaXRvciI7ICAvLyROT04tTkxTLTEkCi0gIAotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBERUZBVUxUX1RBUkdFVF9OQU1FU1BBQ0UgPSAiaHR0cDovL3d3dy5leGFtcGxlLm9yZyI7IC8vJE5PTi1OTFMtMSQKLSAgCi0gIHB1YmxpYyBzdGF0aWMgaW50IERFUEVOREVDSUVTX0NIQU5HRURfUE9MSUNZX1BST01QVCA9IDA7Ci0gIHB1YmxpYyBzdGF0aWMgaW50IERFUEVOREVDSUVTX0NIQU5HRURfUE9MSUNZX0lHTk9SRSA9IDE7Ci0gIHB1YmxpYyBzdGF0aWMgaW50IERFUEVOREVDSUVTX0NIQU5HRURfUE9MSUNZX1JFTE9BRCA9IDI7Ci0KLSAgcHJvdGVjdGVkIHN0YXRpYyBXU0RMRWRpdG9yUGx1Z2luIGluc3RhbmNlOwotICBwcml2YXRlIEV4dGVuc2lvbnNTY2hlbWFzUmVnaXN0cnkgcmVnaXN0cnk7Ci0gIHByaXZhdGUgV1NETEVkaXRvckNvbmZpZ3VyYXRpb24gd3NkbEVkaXRvckNvbmZpZ3VyYXRpb24gPSBudWxsOwotCi0gIHByaXZhdGUgTlNLZXllZEV4dGVuc2lvblJlZ2lzdHJ5IGV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXJSZWdpc3RyeTsKLSAgcHJpdmF0ZSBpbnQgZGVwZW5kZW5jaWVzQ2hhbmdlZFBvbGljeSA9IERFUEVOREVDSUVTX0NIQU5HRURfUE9MSUNZX1JFTE9BRDsKLQotICBwdWJsaWMgV1NETEVkaXRvckNvbmZpZ3VyYXRpb24gZ2V0V1NETEVkaXRvckNvbmZpZ3VyYXRpb24oKQotICB7Ci0gICAgaWYgKHdzZGxFZGl0b3JDb25maWd1cmF0aW9uID09IG51bGwpCi0gICAgewotICAgICAgd3NkbEVkaXRvckNvbmZpZ3VyYXRpb24gPSBuZXcgV1NETEVkaXRvckNvbmZpZ3VyYXRpb24oKTsKLSAgICB9Ci0gICAgcmV0dXJuIHdzZGxFZGl0b3JDb25maWd1cmF0aW9uOwotICB9Ci0gIAotCXB1YmxpYyBFeHRlbnNpb25zU2NoZW1hc1JlZ2lzdHJ5IGdldEV4dGVuc2lvbnNTY2hlbWFzUmVnaXN0cnkoKSB7Ci0JCWlmIChyZWdpc3RyeSA9PSBudWxsKSB7Ci0JCQlyZWdpc3RyeSA9IG5ldyBFeHRlbnNpb25zU2NoZW1hc1JlZ2lzdHJ5KCJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5leHRlbnNpb25DYXRlZ29yaWVzIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgIHJlZ2lzdHJ5Ll9faW50ZXJuYWxTZXREZXByZWNhdGVkRXh0ZW5zaW9uSWQoIm9yZy5lY2xpcHNlLndzdC53c2RsLnVpLkV4dGVuc2lvbnNTY2hlbWFzRGVzY3JpcHRpb24iKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgcmVnaXN0cnkuc2V0UHJlZlN0b3JlKFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKSApOwotCQl9Ci0JCQotCQlyZXR1cm4gcmVnaXN0cnk7Ci0JfQotCQotICBwdWJsaWMgc3RhdGljIHZvaWQgbG9nTWVzc2FnZShTdHJpbmcgbWVzc2FnZSkKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIFJlc291cmNlcyBoZWxwZXIuCi0gICAqLwotCi0gIHB1YmxpYyBXU0RMRWRpdG9yUGx1Z2luKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gICAgaW5zdGFuY2UgPSB0aGlzOwotCi0gICAgLy8gVE9ETy4uLiByZW1vdmUgdGhpcyBjb2RlIHdoZW4gd2UgYWRkICdkZXBlbmRlbmNpZXNDaGFuZ2VkUG9saWN5JwotICAgIC8vIHRvIGFuIGVkaXRvciBwcmVmZXJlbmNlcyBwYWdlCi0gICAgdHJ5Ci0gICAgewotICAgIAkvLyBfREVCVUdfVVBEQVRFX1BPTElDWSA9IDBEdW1teS5sYWJlbD0KLSAgICAgIFN0cmluZyBzdHJpbmcgPSAiMER1bW15LmxhYmVsIjsgLy8kTk9OLU5MUy0xJAotICAgICAgaW50IHBvbGljeSA9IEludGVnZXIucGFyc2VJbnQoc3RyaW5nKTsKLSAgICAgIGlmIChwb2xpY3kgPj0gMCAmJiBwb2xpY3kgPD0gREVQRU5ERUNJRVNfQ0hBTkdFRF9QT0xJQ1lfUkVMT0FEKQotICAgICAgewotICAgICAgICBkZXBlbmRlbmNpZXNDaGFuZ2VkUG9saWN5ID0gcG9saWN5OwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgIH0KLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbiNzdGFydChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiAKLSAgewotCXN1cGVyLnN0YXJ0KGNvbnRleHQpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiAKLSAgewotCXN1cGVyLnN0b3AoY29udGV4dCk7Ci0gIH0KLQotICBwdWJsaWMgTlNLZXllZEV4dGVuc2lvblJlZ2lzdHJ5IGdldEV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXJSZWdpc3RyeSgpCi0gIHsKLSAgICBpZiAoZXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlclJlZ2lzdHJ5ID09IG51bGwpCi0gICAgewotICAgICAgZXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlclJlZ2lzdHJ5ID0gbmV3IE5TS2V5ZWRFeHRlbnNpb25SZWdpc3RyeSgpOwotICAgICAgbmV3IEVsZW1lbnRDb250ZW50RmlsdGVyRXh0ZW5zaW9uUmVnaXN0cnlSZWFkZXIoZXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlclJlZ2lzdHJ5KS5yZWFkUmVnaXN0cnkoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXJSZWdpc3RyeTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIEluc3RhbGwgVVJMCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFVSTCBnZXRJbnN0YWxsVVJMKCkKLSAgewotCXRyeQotCXsKLQkgIHJldHVybiBGaWxlTG9jYXRvci5yZXNvbHZlKGluc3RhbmNlLmdldEJ1bmRsZSgpLmdldEVudHJ5KCIvIikpOyAvLyROT04tTkxTLTEkCi0JfQotCWNhdGNoIChJT0V4Y2VwdGlvbiBlKQotCXsKLQkgIHJldHVybiBudWxsOwotCX0KLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm4gdGhlIHBsdWdpbiBwaHlzaWNhbCBkaXJlY3RvcnkgbG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgSVBhdGggZ2V0UGx1Z2luTG9jYXRpb24oKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgSVBhdGggaW5zdGFsbFBhdGggPSBuZXcgUGF0aChnZXRJbnN0YWxsVVJMKCkudG9FeHRlcm5hbEZvcm0oKSkucmVtb3ZlVHJhaWxpbmdTZXBhcmF0b3IoKTsKLSAgICAgIFN0cmluZyBpbnN0YWxsU3RyID0gRmlsZUxvY2F0b3IudG9GaWxlVVJMKG5ldyBVUkwoaW5zdGFsbFBhdGgudG9TdHJpbmcoKSkpLmdldEZpbGUoKTsKLSAgICAgIHJldHVybiBuZXcgUGF0aChpbnN0YWxsU3RyKTsKLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIldTRExFZGl0b3JQbHVnaW4uZ2V0UGx1Z2luTG9jYXRpb24oKSBleGNlcHRpb24uLiIgKyBlKTsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwcm90ZWN0ZWQgSGFzaHRhYmxlIGltYWdlRGVzY3JpcHRvckNhY2hlID0gbmV3IEhhc2h0YWJsZSgpOwotCi0gIHByb3RlY3RlZCBJbWFnZURlc2NyaXB0b3IgaW50ZXJuYWxHZXRJbWFnZURlc2NyaXB0b3IoU3RyaW5nIGtleSkKLSAgewotICAgIEltYWdlRGVzY3JpcHRvciBpbWFnZURlc2NyaXB0b3IgPSAoSW1hZ2VEZXNjcmlwdG9yKSBpbWFnZURlc2NyaXB0b3JDYWNoZS5nZXQoa2V5KTsKLSAgICBpZiAoaW1hZ2VEZXNjcmlwdG9yID09IG51bGwpCi0gICAgewotICAgICAgaW1hZ2VEZXNjcmlwdG9yID0gSW1hZ2VEZXNjcmlwdG9yLmNyZWF0ZUZyb21GaWxlKFdTRExFZGl0b3JQbHVnaW4uY2xhc3MsIGtleSk7Ci0gICAgICBpZiAoaW1hZ2VEZXNjcmlwdG9yICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGltYWdlRGVzY3JpcHRvckNhY2hlLnB1dChrZXksIGltYWdlRGVzY3JpcHRvcik7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBpbWFnZURlc2NyaXB0b3I7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyBhbiBpbWFnZSBkZXNjcmlwdG9yIGZvciB0aGUgaW1hZ2UgZmlsZSBhdCB0aGUgZ2l2ZW4KLSAgICogcGx1Zy1pbiByZWxhdGl2ZSBwYXRoLgotICAgKgotICAgKiBAcGFyYW0gcGF0aCB0aGUgcGF0aAotICAgKiBAcmV0dXJuIHRoZSBpbWFnZSBkZXNjcmlwdG9yCi0gICAqLwotICBwdWJsaWMgc3RhdGljIEltYWdlRGVzY3JpcHRvciBnZXRJbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKFN0cmluZyBwYXRoKSB7Ci0gICAgcmV0dXJuIEFic3RyYWN0VUlQbHVnaW4uaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbihQTFVHSU5fSUQsIHBhdGgpOyAvLyROT04tTkxTLTEkCi0gIH0KLQotICBwdWJsaWMgc3RhdGljIEltYWdlRGVzY3JpcHRvciBnZXRJbWFnZURlc2NyaXB0b3IoU3RyaW5nIGtleSkKLSAgewotICAgIHJldHVybiBnZXRJbnN0YW5jZSgpLmludGVybmFsR2V0SW1hZ2VEZXNjcmlwdG9yKGtleSk7Ci0gIH0KLQotICBwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoU3RyaW5nIGljb25OYW1lKQotICB7Ci0gICAgSW1hZ2VSZWdpc3RyeSBpbWFnZVJlZ2lzdHJ5ID0gZ2V0SW1hZ2VSZWdpc3RyeSgpOwotICAgIAotICAgIGlmIChpbWFnZVJlZ2lzdHJ5LmdldChpY29uTmFtZSkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gaW1hZ2VSZWdpc3RyeS5nZXQoaWNvbk5hbWUpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgaW1hZ2VSZWdpc3RyeS5wdXQoaWNvbk5hbWUsIEltYWdlRGVzY3JpcHRvci5jcmVhdGVGcm9tRmlsZShnZXRDbGFzcygpLCBpY29uTmFtZSkpOwotICAgICAgcmV0dXJuIGltYWdlUmVnaXN0cnkuZ2V0KGljb25OYW1lKTsKLSAgICB9Ci0gIH0KLSAgCi0gIC8qCi0gICAgcHVibGljIEltYWdlIGdldEltYWdlKFN0cmluZyBrZXksIGJvb2xlYW4gaXNHcmF5ZWQpCi0gICAgeyAKLSAgICAgIEltYWdlIGltYWdlID0gbnVsbDsKLSAgICAgIGlmICghaXNHcmF5ZWQpCi0gICAgICB7Ci0gICAgICAgIGltYWdlID0gc3VwZXIuZ2V0SW1hZ2Uoa2V5KTsKLSAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBpbWFnZSA9IChJbWFnZSlncmF5ZWRJbWFnZU1hcC5nZXQoa2V5KTsKLSAgICAgICAgaWYgKGltYWdlID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBJbWFnZSBjb2xvckltYWdlID0gc3VwZXIuZ2V0SW1hZ2Uoa2V5KTsKLSAgICAgICAgICBpZiAoY29sb3JJbWFnZSAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGltYWdlID0gbmV3IEltYWdlKERpc3BsYXkuZ2V0Q3VycmVudCgpLCBjb2xvckltYWdlLCBTV1QuSU1BR0VfR1JBWSk7Ly9TV1QuSU1BR0VfRElTQUJMRSk7Ci0gICAgICAgICAgICBncmF5ZWRJbWFnZU1hcC5wdXQoa2V5LCBpbWFnZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gaW1hZ2U7Ci0gICAgfQotICAqLwotCi0gIC8qKgotICAgKiBHZXQgdGhlIG1ldGFkYXRhIGRpcmVjdG9yeSBmb3IgdGhpcyBwbHVnaW4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldE1ldGFEYXRhRGlyZWN0b3J5KCkKLSAgewotICAgIHJldHVybiBnZXRJbnN0YW5jZSgpLmdldFN0YXRlTG9jYXRpb24oKS50b09TU3RyaW5nKCk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFdTRExFZGl0b3JQbHVnaW4gZ2V0SW5zdGFuY2UoKQotICB7Ci0gICAgaWYgKGluc3RhbmNlID09IG51bGwpCi0gICAgewotCSAgbmV3IFdTRExFZGl0b3JQbHVnaW4oKTsKLQl9Ci0gICAgCi0gICAgcmV0dXJuIGluc3RhbmNlOwotICB9Ci0KLSAgcHVibGljIElXb3Jrc3BhY2UgZ2V0V29ya3NwYWNlKCkKLSAgewotICAgIHJldHVybiBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFNoZWxsIGdldFNoZWxsKCkKLSAgewotICAgIHJldHVybiBnZXRJbnN0YW5jZSgpLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldFNoZWxsKCk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbiNpbml0aWFsaXplRGVmYXVsdFByZWZlcmVuY2VzKG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuSVByZWZlcmVuY2VTdG9yZSkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVEZWZhdWx0UHJlZmVyZW5jZXMoSVByZWZlcmVuY2VTdG9yZSBzdG9yZSkKLSAgewotICAgIHN0b3JlLnNldERlZmF1bHQoREVGQVVMVF9QQUdFLCBERVNJR05fUEFHRSk7Ci0gICAgCi0gICAgLy8gV1NETFByZWZlcmVuY2VQYWdlIHByZWZzCi0gICAgc3RvcmUuc2V0RGVmYXVsdChNZXNzYWdlcy5fVUlfUFJFRl9QQUdFX0RFRkFVTFRfVEFSR0VUX05BTUVTUEFDRSwgREVGQVVMVF9UQVJHRVRfTkFNRVNQQUNFKTsgLy8kTk9OLU5MUy0xJAotICAgIHN0b3JlLnNldERlZmF1bHQoTWVzc2FnZXMuX1VJX1BSRUZfUEFHRV9BVVRPX1JFR0VORVJBVEVfQklORElORywgZmFsc2UpOyAvLyROT04tTkxTLTEkCi0gICAgc3RvcmUuc2V0RGVmYXVsdChNZXNzYWdlcy5fVUlfUFJFRl9QQUdFX1BST01QVF9SRUdFTl9CSU5ESU5HX09OX1NBVkUsIGZhbHNlKTsgLy8kTk9OLU5MUy0xJAotICAgIC8vIERvIHdlIG5lZWQgdGhpcyBwcmVmZXJlbmNlIGJlbG93PyAgTG9vayBhdCBXU0RMUHJlZmVyZW5jZVBhZ2UuamF2YQotLy8gICAgc3RvcmUuc2V0RGVmYXVsdCgiRGVmdWFsdCBMb2NhdGlvbjoiLCAiaHR0cDovL3d3dy5leGFtcGxlLmNvbSIpOwotICB9Ci0gIAotICAvKioKLSAgICogc2V0RGVmYXVsdFBhZ2UKLSAgICogU2V0IHRoZSBkZWZhdWx0IHBhZ2UgdG8gb3BlbiB3aGVuIHRoZSBlZGl0b3Igc3RhcnRzLiBNYWludGFpbnMgdGhlIHN0YXRlCi0gICAqIHdoZW4gV1NBRCBpcyBzaHV0ZG93biBhbmQgcmVzdGFydGVkLgotICAgKiBAcGFyYW0gcGFnZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RGVmYXVsdFBhZ2UoU3RyaW5nIHBhZ2UpCi0gIHsKLSAgICBnZXRQcmVmZXJlbmNlU3RvcmUoKS5zZXRWYWx1ZShERUZBVUxUX1BBR0UsIHBhZ2UpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXREZWZhdWx0UGFnZSgpCi0gIHsKLSAgICByZXR1cm4gZ2V0UHJlZmVyZW5jZVN0b3JlKCkuZ2V0U3RyaW5nKERFRkFVTFRfUEFHRSk7Ci0gIH0KLQotICBwdWJsaWMgaW50IGdldERlcGVuZGVuY2llc0NoYW5nZWRQb2xpY3koKQotICB7Ci0gICAgLy9yZXR1cm4gZ2V0UHJlZmVyZW5jZVN0b3JlKCkuZ2V0SW50KERFUEVOREVDSUVTX0NIQU5HRURfUE9MSUNZKTsKLSAgICByZXR1cm4gZGVwZW5kZW5jaWVzQ2hhbmdlZFBvbGljeTsKLSAgfQotICAKLSAgCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9EVUNUX0NVU1RPTUlaQVRJT05fUFJPVklERVJfUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLndzdC53c2RsLnVpLnByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXJQbHVnaW5JZCI7IC8vJE5PTi1OTFMtMSQKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBST0RVQ1RfQ1VTVE9NSVpBVElPTl9QUk9WSURFUl9DTEFTU19OQU1FID0gIm9yZy5lY2xpcHNlLndzdC53c2RsLnVpLnByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXJDbGFzc05hbWUiOyAvLyROT04tTkxTLTEkCi0gIAotICBwcml2YXRlIHN0YXRpYyBQcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyIHByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXI7Ci0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gcHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlckluaXRpYWxpemVkID0gZmFsc2U7Ci0gIAotICBwdWJsaWMgUHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlciBnZXRQcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyKCkKLSAgewotICAgIGlmICghcHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlckluaXRpYWxpemVkKQotICAgIHsKLSAgICAgIHByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXJJbml0aWFsaXplZCA9IHRydWU7Ci0gICAgICBTdHJpbmcgcGx1Z2luTmFtZSA9IGdldFByZWZlcmVuY2VTdG9yZSgpLmdldFN0cmluZyhQUk9EVUNUX0NVU1RPTUlaQVRJT05fUFJPVklERVJfUExVR0lOX0lEKTsKLSAgICAgIFN0cmluZyBjbGFzc05hbWUgPSBnZXRQcmVmZXJlbmNlU3RvcmUoKS5nZXRTdHJpbmcoUFJPRFVDVF9DVVNUT01JWkFUSU9OX1BST1ZJREVSX0NMQVNTX05BTUUpOwotICAgICAgaWYgKHBsdWdpbk5hbWUgIT0gbnVsbCAmJiBwbHVnaW5OYW1lLmxlbmd0aCgpID4gMCAmJgotICAgIAkgIGNsYXNzTmFtZSAhPSBudWxsICYmIGNsYXNzTmFtZS5sZW5ndGgoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShwbHVnaW5OYW1lKTsKLSAgICAgICAgICBDbGFzcyBjbGF6eiA9IGJ1bmRsZS5sb2FkQ2xhc3MoY2xhc3NOYW1lKTsKLSAgICAgICAgICBwcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyID0gKFByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIpY2xhenoubmV3SW5zdGFuY2UoKTsKLSAgICAgICAgfSAgICAgICAgICAKLSAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgICB7ICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSAgCi0gICAgcmV0dXJuIHByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXI7Ci0gIH0gICAKLX0KLQotY2xhc3MgQmFzZVJlZ2lzdHJ5UmVhZGVyCi17Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS53c3Qud3NkbC51aSI7IC8vJE5PTi1OTFMtMSQKLQotICAvKioKLSAgICogcmVhZCBmcm9tIHBsdWdpbiByZWdpc3RyeSBhbmQgcGFyc2UgaXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWFkUmVnaXN0cnkoU3RyaW5nIGV4dGVuc2lvblBvaW50SWQpCi0gIHsKLQlJRXh0ZW5zaW9uUmVnaXN0cnkgZXh0ZW5zaW9uUmVnaXN0cnkgPSBQbGF0Zm9ybS5nZXRFeHRlbnNpb25SZWdpc3RyeSgpOwotCUlFeHRlbnNpb25Qb2ludCBwb2ludCA9IGV4dGVuc2lvblJlZ2lzdHJ5LmdldEV4dGVuc2lvblBvaW50KFBMVUdJTl9JRCwgZXh0ZW5zaW9uUG9pbnRJZCk7Ci0KLSAgICBpZiAocG9pbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBlbGVtZW50cyA9IHBvaW50LmdldENvbmZpZ3VyYXRpb25FbGVtZW50cygpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgcmVhZEVsZW1lbnQoZWxlbWVudHNbaV0pOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHJlYWRFbGVtZW50KElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtZW50KQotICB7Ci0gIH0KLX0KLQotLyoqCi0gKiAKLSAqLwotYWJzdHJhY3QgY2xhc3MgTlNLZXllZEV4dGVuc2lvblJlZ2lzdHJ5UmVhZGVyIGV4dGVuZHMgQmFzZVJlZ2lzdHJ5UmVhZGVyCi17Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9OQU1FX1NQQUNFID0gIm5hbWVzcGFjZSI7IC8vJE5PTi1OTFMtMSQKLSAgcHJvdGVjdGVkIFN0cmluZyBleHRlbnNpb25Qb2ludElkOwotICBwcm90ZWN0ZWQgU3RyaW5nIHRhZ05hbWU7Ci0gIHByb3RlY3RlZCBTdHJpbmdbXSBhdHRyaWJ1dGVOYW1lczsKLSAgcHJvdGVjdGVkIE5TS2V5ZWRFeHRlbnNpb25SZWdpc3RyeSBuc0tleWVkRXh0ZW5zaW9uUmVnaXN0cnk7Ci0KLSAgcHJpdmF0ZSBOU0tleWVkRXh0ZW5zaW9uUmVnaXN0cnlSZWFkZXIoU3RyaW5nIGV4dGVuc2lvblBvaW50SWQsIFN0cmluZyB0YWdOYW1lLCBOU0tleWVkRXh0ZW5zaW9uUmVnaXN0cnkgbnNLZXllZEV4dGVuc2lvblJlZ2lzdHJ5KQotICB7Ci0gICAgdGhpcy5leHRlbnNpb25Qb2ludElkID0gZXh0ZW5zaW9uUG9pbnRJZDsKLSAgICB0aGlzLnRhZ05hbWUgPSB0YWdOYW1lOwotICAgIHRoaXMubnNLZXllZEV4dGVuc2lvblJlZ2lzdHJ5ID0gbnNLZXllZEV4dGVuc2lvblJlZ2lzdHJ5OwotICB9Ci0KLSAgcHVibGljIE5TS2V5ZWRFeHRlbnNpb25SZWdpc3RyeVJlYWRlcihTdHJpbmcgZXh0ZW5zaW9uUG9pbnRJZCwgU3RyaW5nIHRhZ05hbWUsIFN0cmluZyBhdHRyaWJ1dGVOYW1lLCBOU0tleWVkRXh0ZW5zaW9uUmVnaXN0cnkgbnNLZXllZEV4dGVuc2lvblJlZ2lzdHJ5KQotICB7Ci0gICAgdGhpcyhleHRlbnNpb25Qb2ludElkLCB0YWdOYW1lLCBuc0tleWVkRXh0ZW5zaW9uUmVnaXN0cnkpOwotICAgIGF0dHJpYnV0ZU5hbWVzID0gbmV3IFN0cmluZ1sxXTsKLSAgICBhdHRyaWJ1dGVOYW1lc1swXSA9IGF0dHJpYnV0ZU5hbWU7Ci0gIH0KLQotICBwdWJsaWMgTlNLZXllZEV4dGVuc2lvblJlZ2lzdHJ5UmVhZGVyKFN0cmluZyBleHRlbnNpb25Qb2ludElkLCBTdHJpbmcgdGFnTmFtZSwgU3RyaW5nW10gYXR0cmlidXRlTmFtZXMsIE5TS2V5ZWRFeHRlbnNpb25SZWdpc3RyeSBuc0tleWVkRXh0ZW5zaW9uUmVnaXN0cnkpCi0gIHsKLSAgICB0aGlzKGV4dGVuc2lvblBvaW50SWQsIHRhZ05hbWUsIG5zS2V5ZWRFeHRlbnNpb25SZWdpc3RyeSk7Ci0gICAgdGhpcy5hdHRyaWJ1dGVOYW1lcyA9IGF0dHJpYnV0ZU5hbWVzOwotICB9Ci0gIC8qKgotICAgKiByZWFkIGZyb20gcGx1Z2luIHJlZ2lzdHJ5IGFuZCBwYXJzZSBpdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlYWRSZWdpc3RyeSgpCi0gIHsKLSAgICBzdXBlci5yZWFkUmVnaXN0cnkoZXh0ZW5zaW9uUG9pbnRJZCk7Ci0gIH0KLQotICAvKioKLSAgICogcmVhZEVsZW1lbnQoKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgcmVhZEVsZW1lbnQoSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBpZiAoZWxlbWVudC5nZXROYW1lKCkuZXF1YWxzKHRhZ05hbWUpKQotICAgIHsKLSAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRfTkFNRV9TUEFDRSk7Ci0gICAgICBpZiAobmFtZXNwYWNlICE9IG51bGwpCi0gICAgICB7Ci0gICAgCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoZWxlbWVudC5nZXREZWNsYXJpbmdFeHRlbnNpb24oKS5nZXRDb250cmlidXRvcigpLmdldE5hbWUoKSk7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVOYW1lcy5sZW5ndGggPT0gMSkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBjbGFzc05hbWUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lc1swXSk7Ci0gICAgICAgICAgaWYgKGNsYXNzTmFtZSAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG5zS2V5ZWRFeHRlbnNpb25SZWdpc3RyeS5wdXQobmFtZXNwYWNlLCBjbGFzc05hbWUsIGJ1bmRsZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIEhhc2hNYXAgbWFwID0gbmV3IEhhc2hNYXAoKTsKLSAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGF0dHJpYnV0ZU5hbWVzLmxlbmd0aDsgaSsrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBhdHRyaWJ1dGVOYW1lID0gYXR0cmlidXRlTmFtZXNbaV07Ci0gICAgICAgICAgICBTdHJpbmcgY2xhc3NOYW1lID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7Ci0gICAgICAgICAgICBpZiAoY2xhc3NOYW1lICE9IG51bGwgJiYgY2xhc3NOYW1lLmxlbmd0aCgpID4gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgbWFwLnB1dChhdHRyaWJ1dGVOYW1lLCBjbGFzc05hbWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBuc0tleWVkRXh0ZW5zaW9uUmVnaXN0cnkucHV0KG5hbWVzcGFjZSwgbWFwLCBidW5kbGUpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci19Ci0KLS8qKgotICogCi0gKi8KLWNsYXNzIEVsZW1lbnRDb250ZW50RmlsdGVyRXh0ZW5zaW9uUmVnaXN0cnlSZWFkZXIgZXh0ZW5kcyBOU0tleWVkRXh0ZW5zaW9uUmVnaXN0cnlSZWFkZXIKLXsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhURU5TSU9OX1BPSU5UX0lEID0gImV4dGVuc2liaWxpdHlFbGVtZW50RmlsdGVyIjsgLy8kTk9OLU5MUy0xJAotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdfTkFNRSA9ICJleHRlbnNpYmlsaXR5RWxlbWVudEZpbHRlciI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgRWxlbWVudENvbnRlbnRGaWx0ZXJFeHRlbnNpb25SZWdpc3RyeVJlYWRlcihOU0tleWVkRXh0ZW5zaW9uUmVnaXN0cnkgbnNLZXllZEV4dGVuc2lvblJlZ2lzdHJ5KQotICB7Ci0gICAgc3VwZXIoRVhURU5TSU9OX1BPSU5UX0lELCBUQUdfTkFNRSwgImNsYXNzIiwgbnNLZXllZEV4dGVuc2lvblJlZ2lzdHJ5KTsgLy8kTk9OLU5MUy0xJAotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL1dTRExFZGl0b3JSZXNvdXJjZUNoYW5nZUhhbmRsZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvV1NETEVkaXRvclJlc291cmNlQ2hhbmdlSGFuZGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZmNmYTUwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvV1NETEVkaXRvclJlc291cmNlQ2hhbmdlSGFuZGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzE3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGFWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVBhcnRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMURlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSURlc2NyaXB0aW9uOwotCi0KLXB1YmxpYyBjbGFzcyBXU0RMRWRpdG9yUmVzb3VyY2VDaGFuZ2VIYW5kbGVyCi17Ci0gIHByb3RlY3RlZCBJbnRlcm5hbFdTRExNdWx0aVBhZ2VFZGl0b3Igd3NkbEVkaXRvcjsKLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNVcGRhdGVSZXF1aXJlZDsKLSAgcHJvdGVjdGVkIEludGVybmFsUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciByZXNvdXJjZUNoYW5nZUxpc3RlbmVyOwotICBwcm90ZWN0ZWQgSW50ZXJuYWxQYXJ0TGlzdGVuZXIgcGFydExpc3RlbmVyOwotCi0gIHB1YmxpYyBXU0RMRWRpdG9yUmVzb3VyY2VDaGFuZ2VIYW5kbGVyKEludGVybmFsV1NETE11bHRpUGFnZUVkaXRvciB3c2RsRWRpdG9yKQotICB7Ci0gICAgdGhpcy53c2RsRWRpdG9yID0gd3NkbEVkaXRvcjsKLSAgICByZXNvdXJjZUNoYW5nZUxpc3RlbmVyID0gbmV3IEludGVybmFsUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcigpOwotICAgIHBhcnRMaXN0ZW5lciA9IG5ldyBJbnRlcm5hbFBhcnRMaXN0ZW5lcigpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgYXR0YWNoKCkKLSAgewotICAgIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5hZGRSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHJlc291cmNlQ2hhbmdlTGlzdGVuZXIpOwotICAgIHdzZGxFZGl0b3IuZ2V0U2l0ZSgpLmdldFdvcmtiZW5jaFdpbmRvdygpLmdldFBhcnRTZXJ2aWNlKCkuYWRkUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkKLSAgewotICAgIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5yZW1vdmVSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHJlc291cmNlQ2hhbmdlTGlzdGVuZXIpOwotICAgIHdzZGxFZGl0b3IuZ2V0U2l0ZSgpLmdldFdvcmtiZW5jaFdpbmRvdygpLmdldFBhcnRTZXJ2aWNlKCkucmVtb3ZlUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgTWFwIGNvbXB1dGVEZXBlbmRlbmN5TWFwKCkKLSAgewotICAgIE1hcCBtYXAgPSBuZXcgSGFzaE1hcCgpOwotICAgIElEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9ICgoSW50ZXJuYWxXU0RMTXVsdGlQYWdlRWRpdG9yKSB3c2RsRWRpdG9yKS5nZXRNb2RlbCgpOwotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKSAoKFcxMURlc2NyaXB0aW9uKSBkZXNjcmlwdGlvbikuZ2V0VGFyZ2V0KCk7Ci0gICAgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBkZWZpbml0aW9uLmVSZXNvdXJjZSgpLmdldFJlc291cmNlU2V0KCk7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2VzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIFJlc291cmNlIHJlc291cmNlID0gKFJlc291cmNlKWkubmV4dCgpOwotICAgICAgaWYgKHJlc291cmNlICE9IGRlZmluaXRpb24uZVJlc291cmNlKCkpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyB1cmkgPSByZXNvdXJjZS5nZXRVUkkoKS50b1N0cmluZygpOwotICAgICAgICBpZiAobWFwLmdldCh1cmkpID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBtYXAucHV0KHVyaSwgdXJpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbWFwOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcGVyZm9ybVJlbG9hZCgpCi0gIHsKLSAgCWJvb2xlYW4gZG9SZWxvYWQgPSBmYWxzZTsgIAkKLQlpbnQgcG9saWN5ID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldERlcGVuZGVuY2llc0NoYW5nZWRQb2xpY3koKTsKLQkKLSAgCWlmIChwb2xpY3kgPT0gV1NETEVkaXRvclBsdWdpbi5ERVBFTkRFQ0lFU19DSEFOR0VEX1BPTElDWV9QUk9NUFQpCi0gIAl7Ci0JCWRvUmVsb2FkID0gTWVzc2FnZURpYWxvZy5vcGVuUXVlc3Rpb24od3NkbEVkaXRvci5nZXRTaXRlKCkuZ2V0U2hlbGwoKSwgTWVzc2FnZXMuX1VJX0RFUEVOREVOQ0lFU19DSEFOR0VELCBNZXNzYWdlcy5fVUlfREVQRU5ERU5DSUVTX0NIQU5HRURfUkVGUkVTSCk7ICAJIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAJfQotICAJZWxzZSBpZiAocG9saWN5ID09IFdTRExFZGl0b3JQbHVnaW4uREVQRU5ERUNJRVNfQ0hBTkdFRF9QT0xJQ1lfUkVMT0FEKQotICAJewotICAJCWRvUmVsb2FkID0gdHJ1ZTsKLSAgCX0KLSAgCQotICAgIGlmIChkb1JlbG9hZCkKLSAgICB7ICAgIAotICAgICAgd3NkbEVkaXRvci5yZWxvYWREZXBlbmRlbmNpZXMoKTsKLSAgICB9ICAKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gaXNMaXN0ZW5pbmdUb1Jlc291cmNlQ2hhbmdlcygpCi0gIHsKLSAgCWludCBwb2xpY3kgPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0RGVwZW5kZW5jaWVzQ2hhbmdlZFBvbGljeSgpOwotICAJcmV0dXJuIHBvbGljeSA9PSBXU0RMRWRpdG9yUGx1Z2luLkRFUEVOREVDSUVTX0NIQU5HRURfUE9MSUNZX1BST01QVCB8fAotICAJCSAgIHBvbGljeSA9PSBXU0RMRWRpdG9yUGx1Z2luLkRFUEVOREVDSUVTX0NIQU5HRURfUE9MSUNZX1JFTE9BRDsKLSAgfQotCi0KLSAgY2xhc3MgSW50ZXJuYWxSZXNvdXJjZUNoYW5nZUxpc3RlbmVyIGltcGxlbWVudHMgSVJlc291cmNlQ2hhbmdlTGlzdGVuZXIsIElSZXNvdXJjZURlbHRhVmlzaXRvcgotICB7Ci0gICAgcHJvdGVjdGVkIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBwcm90ZWN0ZWQgYm9vbGVhbiBpc1BlbmRpbmcgPSBmYWxzZTsKLSAgICBwcm90ZWN0ZWQgaW50IGNvdW50ID0gMDsKLQotICAgIHB1YmxpYyB2b2lkIHJlc291cmNlQ2hhbmdlZChJUmVzb3VyY2VDaGFuZ2VFdmVudCBldmVudCkKLSAgICB7ICAgICAgCQotICAgICAgRGlzcGxheSBkaXNwbGF5ID0gRGlzcGxheS5nZXRDdXJyZW50KCk7Ci0gICAgICAJICAgICAJCi0gICAgICBpZiAoZGlzcGxheSAhPSBudWxsICYmIGlzTGlzdGVuaW5nVG9SZXNvdXJjZUNoYW5nZXMoKSAmJiAhaXNVcGRhdGVSZXF1aXJlZCkKLSAgICAgIHsKLSAgICAgICAgaWYgKGV2ZW50LmdldFR5cGUoKSA9PSBJUmVzb3VyY2VDaGFuZ2VFdmVudC5QT1NUX0NIQU5HRSkKLSAgICAgICAgewotICAgICAgICAgIElSZXNvdXJjZURlbHRhW10gZGVsdGFzID0gZXZlbnQuZ2V0RGVsdGEoKS5nZXRBZmZlY3RlZENoaWxkcmVuKCk7Ci0gICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZWx0YXMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGRlbHRhc1tpXS5hY2NlcHQodGhpcyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChsaXN0LnNpemUoKSA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIWlzUGVuZGluZykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpc1BlbmRpbmcgPSB0cnVlOwotICAgICAgICAgICAgZGlzcGxheS50aW1lckV4ZWMoMjAwMCwgbmV3IFRpbWVyRXZlbnQoKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gdmlzaXQoSVJlc291cmNlRGVsdGEgZGVsdGEpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0gICAgewotICAgICAgSVJlc291cmNlIHJlc291cmNlID0gZGVsdGEuZ2V0UmVzb3VyY2UoKTsKLSAgICAgIGlmIChyZXNvdXJjZS5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZJTEUpCi0gICAgICB7Ci0gICAgICAgIGlmICghbGlzdC5jb250YWlucyhyZXNvdXJjZSkpCi0gICAgICAgIHsKLSAgICAgICAgICBsaXN0LmFkZChyZXNvdXJjZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGNsYXNzIFRpbWVyRXZlbnQgaW1wbGVtZW50cyBSdW5uYWJsZQotICAgIHsKLSAgICAgIHB1YmxpYyBUaW1lckV2ZW50KCkKLSAgICAgIHsKLSAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIk5ld1RpbWVyRXZlbnQoIiArIHdzZGxFZGl0b3IuZ2V0RGVmaW5pdGlvbigpLmVSZXNvdXJjZSgpLmdldFVSSSgpICsgIikgIiArIGNvdW50KTsgICAgICAJCi0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpCi0gICAgICB7Ci0vLyAgICAgICAgZm9yIChJdGVyYXRvciBpID0gbGlzdC5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0vLyAgICAgICAgewotLy8gICAgICAgICAgSVJlc291cmNlIHJlc291cmNlID0gKElSZXNvdXJjZSlpLm5leHQoKTsKLS8vICAgICAgICAgIFN0cmluZyBwbGF0Zm9ybVBhdGggPSBVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShyZXNvdXJjZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCkpLnRvU3RyaW5nKCk7Ci0vLyAgICAgICAgfQotCi0gICAgICAgIE1hcCBkZXBlbmRlbmN5TWFwID0gY29tcHV0ZURlcGVuZGVuY3lNYXAoKTsKLQotICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBsaXN0Lml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICAgICAgewotICAgICAgICAgIElSZXNvdXJjZSByZXNvdXJjZSA9IChJUmVzb3VyY2UpaS5uZXh0KCk7Ci0gICAgICAgICAgU3RyaW5nIHBsYXRmb3JtUGF0aCA9IFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKHJlc291cmNlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSkudG9TdHJpbmcoKTsKLSAgICAgICAgICBpZiAoZGVwZW5kZW5jeU1hcC5nZXQocGxhdGZvcm1QYXRoKSAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlzVXBkYXRlUmVxdWlyZWQgPSB0cnVlOwotICAgICAgICAgICAgaWYgKHdzZGxFZGl0b3IuZ2V0U2l0ZSgpLmdldFdvcmtiZW5jaFdpbmRvdygpLmdldFBhcnRTZXJ2aWNlKCkuZ2V0QWN0aXZlUGFydCgpID09IHdzZGxFZGl0b3IpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlzVXBkYXRlUmVxdWlyZWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgcGVyZm9ybVJlbG9hZCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlzUGVuZGluZyA9IGZhbHNlOwotICAgICAgICBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIGNsYXNzIEludGVybmFsUGFydExpc3RlbmVyIGltcGxlbWVudHMgSVBhcnRMaXN0ZW5lcgotICB7Ci0gICAgcHVibGljIHZvaWQgcGFydEFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwYXJ0KQotICAgIHsKLSAgICAgIGlmIChwYXJ0ID09IHdzZGxFZGl0b3IpCi0gICAgICB7ICAgICAKLSAgICAgICAgaWYgKGlzVXBkYXRlUmVxdWlyZWQpCi0gICAgICAgIHsKLSAgICAgICAgICBpc1VwZGF0ZVJlcXVpcmVkID0gZmFsc2U7Ci0gICAgICAgICAgcGVyZm9ybVJlbG9hZCgpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgcGFydEJyb3VnaHRUb1RvcChJV29ya2JlbmNoUGFydCBwYXJ0KQotICAgIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBwYXJ0Q2xvc2VkKElXb3JrYmVuY2hQYXJ0IHBhcnQpCi0gICAgewotICAgIH0KLQotICAgCi0gICAgcHVibGljIHZvaWQgcGFydERlYWN0aXZhdGVkKElXb3JrYmVuY2hQYXJ0IHBhcnQpCi0gICAgewotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHBhcnRPcGVuZWQoSVdvcmtiZW5jaFBhcnQgcGFydCkKLSAgICB7Ci0gICAgfQotICB9Ci0KLQotfQotCi0vKgotY2xhc3MgRGVwZW5kZW5jeVZpc2l0b3IKLXsKLQlwdWJsaWMgdm9pZCB2aXNpdEltcG9ydChJbXBvcnQgdGhlSW1wb3J0KQotCXsKLQkJaWYgKHRoZUltcG9ydC5nZXRFRGVmaW5pdGlvbigpICE9IG51bGwpCi0JCXsKLQkJCXZpc2l0RGVmaW5pdGlvbih0aGVJbXBvcnQuZ2V0RURlZmluaXRpb24oKSk7Ci0JCX0KLQkJZWxzZSBpZiAodGhlSW1wb3J0LmdldEVTY2hlbWEoKSAhPSBudWxsKQotCQl7Ci0JCQl2aXNpdFNjaGVtYSh0aGVJbXBvcnQuZ2V0RVNjaGVtYSgpKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHZpc2l0WFNEU2NoZW1hRGlyZWN0aXZlKFhTRFNjaGVtYURpcmVjdGl2ZSBkaXJlY3RpdmUpCi0JewotCQlYU0RTY2hlbWEgcmVmZXJlbmNlZFNjaGVtYSA9IGRpcmVjdGl2ZS5nZXRSZXNvbHZlZFNjaGVtYSgpOwotCQlpZiAocmVmZXJlbmNlZFNjaGVtYSAhPSBudWxsKQotCQl7Ci0JCQl2aXNpdFNjaGVtYShyZWZlcmVuY2VkU2NoZW1hKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHZpc2l0RGVmaW5pdGlvbihEZWZpbml0aW9uIGRlZmluaXRpb24pCi0JewotCQlpZiAoZGVmaW5pdGlvbiAhPSBudWxsKQotCQl7Ci0JCQlmb3IgKEl0ZXJhdG9yIGkgPSBkZWZpbml0aW9uLmdldEVJbXBvcnRzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotCQkJewotCQkJCXZpc2l0SW1wb3J0KChJbXBvcnQpaS5uZXh0KCkpOwotCQkJfQotCQkJVHlwZXMgdHlwZXMgPSBkZWZpbml0aW9uLmdldEVUeXBlcygpOwotCQkJaWYgKHR5cGVzICE9IG51bGwpCi0JCQl7Ci0KLQkJCQlmb3IgKEl0ZXJhdG9yIGkgPSB0eXBlcy5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotCQkJCXsKLQkJCQkJT2JqZWN0IG8gPSBpLm5leHQoKTsKLQkJCQkJaWYgKG8gaW5zdGFuY2VvZiBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCkKLQkJCQkJewotCQkJCQkJWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZSA9IChYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudClvOwotCQkJCQkJaWYgKGUuZ2V0RVhTRFNjaGVtYSgpICE9IG51bGwpCi0JCQkJCQl7Ci0JCQkJCQkJdmlzaXRTY2hlbWEoZS5nZXRFWFNEU2NoZW1hKCkpOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdmlzaXRTY2hlbWEoWFNEU2NoZW1hIHNjaGVtYSkKLQl7Ci0JCWZvciAoSXRlcmF0b3IgaSA9IHNjaGVtYS5nZXRDb250ZW50cygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLQkJewotCQkJT2JqZWN0IG8gPSBpLm5leHQoKTsKLQkJCWlmIChvIGluc3RhbmNlb2YgWFNEU2NoZW1hRGlyZWN0aXZlKQotCQkJewotCQkJCXZpc2l0WFNEU2NoZW1hRGlyZWN0aXZlKChYU0RTY2hlbWFEaXJlY3RpdmUpbyk7Ci0JCQl9Ci0JCX0KLQl9Ci19Ci0KLWNsYXNzIFJlbG9hZERlcGVuZGVuY3lWaXNpdG9yIGV4dGVuZHMgRGVwZW5kZW5jeVZpc2l0b3IKLXsKLQlwdWJsaWMgdm9pZCB2aXNpdEltcG9ydChJbXBvcnQgdGhlSW1wb3J0KQotCXsKLQkJQ29tcG9uZW50SGFuZGxlciBoYW5kbGVyID0gV1NETFJlY29uY2lsZXIuZ2V0UmVjb25jaWxlcih0aGVJbXBvcnQpOwotCQlFbGVtZW50IGVsZW1lbnQgPSBXU0RMVXRpbC5nZXRJbnN0YW5jZSgpLmdldEVsZW1lbnRGb3JPYmplY3QodGhlSW1wb3J0KTsKLQkJaWYgKGVsZW1lbnQgIT0gbnVsbCAmJiBoYW5kbGVyICE9IG51bGwpCi0JCXsKLQkJCWhhbmRsZXIucmVjb25jaWxlKHdzZGxFZGl0b3IuZ2V0RGVmaW5pdGlvbigpLCB0aGVJbXBvcnQsIGVsZW1lbnQpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdmlzaXRYU0RTY2hlbWFEaXJlY3RpdmUoWFNEU2NoZW1hRGlyZWN0aXZlIGRpcmVjdGl2ZSkKLQl7Ci0KLQl9Ci19Ki8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL1dTRExQcmVmZXJlbmNlUGFnZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9XU0RMUHJlZmVyZW5jZVBhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGY3MjA2NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL1dTRExQcmVmZXJlbmNlUGFnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5Cb29sZWFuRmllbGRFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5GaWVsZEVkaXRvclByZWZlcmVuY2VQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuU3RyaW5nRmllbGRFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yQ1NIZWxwSWRzOwotCi1wdWJsaWMgY2xhc3MgV1NETFByZWZlcmVuY2VQYWdlIGV4dGVuZHMgRmllbGRFZGl0b3JQcmVmZXJlbmNlUGFnZSBpbXBsZW1lbnRzIElXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZSB7Ci0KLSAgcHVibGljIFdTRExQcmVmZXJlbmNlUGFnZSgpCi0gIHsKLSAgICBzdXBlcihGaWVsZEVkaXRvclByZWZlcmVuY2VQYWdlLkZMQVQpOwotICAgIHNldFByZWZlcmVuY2VTdG9yZShXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgaW5pdChJV29ya2JlbmNoIHdvcmtiZW5jaCkKLSAgewotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlRmllbGRFZGl0b3JzKCkKLSAgewotICAgIENvbXBvc2l0ZSBwYXJlbnQgPSBnZXRGaWVsZEVkaXRvclBhcmVudCgpOwotCUdyaWRMYXlvdXQgcGFyZW50TGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLQlwYXJlbnRMYXlvdXQubWFyZ2luV2lkdGggPSAwOwotCXBhcmVudC5zZXRMYXlvdXQocGFyZW50TGF5b3V0KTsKLQkKLS8vICAgIFdvcmtiZW5jaEhlbHAuc2V0SGVscChnZXRDb250cm9sKCksIHNvbWUgY29udGV4dCBpZCBoZXJlKTsgCi0KLQlHcm91cCBncm91cCA9IG5ldyBHcm91cChwYXJlbnQsIFNXVC5OVUxMKTsKLSAgICBHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgbGF5b3V0Lm1hcmdpbldpZHRoID0gMDsKLSAgICBsYXlvdXQubnVtQ29sdW1ucyA9IDI7Ci0gICAgZ3JvdXAuc2V0TGF5b3V0KGxheW91dCk7Ci0gICAgZ3JvdXAuc2V0VGV4dChNZXNzYWdlcy5fVUlfUFJFRl9QQUdFX0NSRUFUSU5HX0ZJTEVTKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgIGRhdGEudmVydGljYWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIGRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKLSAgICBncm91cC5zZXRMYXlvdXREYXRhKGRhdGEpOwotICAgIAotICAgIENvbXBvc2l0ZSBjb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKGdyb3VwLCBTV1QuTlVMTCk7Ci0gICAgR3JpZERhdGEgZGF0YTEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICBkYXRhMS52ZXJ0aWNhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgZGF0YTEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgZGF0YTEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7Ci0gICAgY29tcG9zaXRlLnNldExheW91dERhdGEoZGF0YTEpOwotCQotCVN0cmluZyBuYW1lc3BhY2VMYWJlbCA9IE1lc3NhZ2VzLl9VSV9QUkVGX1BBR0VfREVGQVVMVF9UQVJHRVRfTkFNRVNQQUNFOyAgLy8kTk9OLU5MUy0xJAotICAgIFN0cmluZ0ZpZWxkRWRpdG9yIHRhcmdldE5hbWVzcGFjZSA9IG5ldyBTdHJpbmdGaWVsZEVkaXRvcihuYW1lc3BhY2VMYWJlbCwgbmFtZXNwYWNlTGFiZWwsIGNvbXBvc2l0ZSk7Ci0gICAgR3JpZExheW91dCBjb21wb3NpdGVMYXlvdXQgPSAoR3JpZExheW91dCljb21wb3NpdGUuZ2V0TGF5b3V0KCk7Ci0gICAgY29tcG9zaXRlTGF5b3V0Lm1hcmdpbldpZHRoID0gNTsgICAvLyBEZWZhdWx0IHZhbHVlCi0gICAgY29tcG9zaXRlTGF5b3V0Lm51bUNvbHVtbnMgPSAyOwotICAgIGFkZEZpZWxkKHRhcmdldE5hbWVzcGFjZSk7Ci0gICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscCh0YXJnZXROYW1lc3BhY2UuZ2V0VGV4dENvbnRyb2woY29tcG9zaXRlKSwgQVNERWRpdG9yQ1NIZWxwSWRzLldTRExfUFJFRl9ERUZBVUxUX1ROUyk7Ci0JCi0JU3RyaW5nIGdlbmVyYXRlTGFiZWwgPSBNZXNzYWdlcy5fVUlfUFJFRl9QQUdFX0FVVE9fUkVHRU5FUkFURV9CSU5ESU5HOyAvLyROT04tTkxTLTEkCi0JQm9vbGVhbkZpZWxkRWRpdG9yIGdlbmVyYXRlQmluZGluZ09uU2F2ZSA9IG5ldyBCb29sZWFuRmllbGRFZGl0b3IoZ2VuZXJhdGVMYWJlbCwgZ2VuZXJhdGVMYWJlbCwgcGFyZW50KTsKLQlhZGRGaWVsZChnZW5lcmF0ZUJpbmRpbmdPblNhdmUpOwotICAgIAotCVN0cmluZyBzaG93R2VuZXJhdGVEaWFsb2dMYWJlbCA9IE1lc3NhZ2VzLl9VSV9QUkVGX1BBR0VfUFJPTVBUX1JFR0VOX0JJTkRJTkdfT05fU0FWRTsgLy8kTk9OLU5MUy0xJAotCUJvb2xlYW5GaWVsZEVkaXRvciBzaG93R2VuZXJhdGVEaWFsb2cgPSBuZXcgQm9vbGVhbkZpZWxkRWRpdG9yKHNob3dHZW5lcmF0ZURpYWxvZ0xhYmVsLCBzaG93R2VuZXJhdGVEaWFsb2dMYWJlbCwgcGFyZW50KTsKLQlhZGRGaWVsZChzaG93R2VuZXJhdGVEaWFsb2cpOwotCi0gICAgLyogRG8gd2UgbmVlZCB0aGlzIHByZWZlcmVuY2UgYmVsb3c/ICBJZiBzbywgY2hhbmdlIFdTRExFZGl0b3JQbHVnaW4uamF2YSBhbmQgdXNlIHRoaXMgcHJlZmVyZW5jZSBpbjoKLSAgICAgICBIdHRwQ29udGVudEdlbmVyYXRvci5qYXZhCi0gICAgICAgU29hcENvbnRlbnRHZW5lcmF0b3IuamF2YQotICAgICAgIFNvYXBQb3J0T3B0aW9uc1BhZ2UuamF2YQotICAgICovCi0vLyAgICBIdHRwUG9ydE9wdGlvbnNQYWdlLmphdmEgICAgU3RyaW5nRmllbGRFZGl0b3IgbG9jYXRpb24gPSBuZXcgU3RyaW5nRmllbGRFZGl0b3IoIkRlZnVhbHQgTG9jYXRpb246IiwgIkRlZmF1bHQgTG9jYXRpb246IiwgZWRpdG9yR3JvdXAxKTsgLy8gRXh0ZXJuYWxpemUKLS8vICAgIGFkZEZpZWxkKGxvY2F0aW9uKTsgCi0JCi0JYXBwbHlEaWFsb2dGb250KHBhcmVudCk7Ci0gICAgCi0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvV1NETFNlbGVjdGlvbk1hcHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9XU0RMU2VsZWN0aW9uTWFwcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjODg4ZDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9XU0RMU2VsZWN0aW9uTWFwcGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLQotcHVibGljIGNsYXNzIFdTRExTZWxlY3Rpb25NYXBwZXIgaW1wbGVtZW50cyBJU2VsZWN0aW9uTWFwcGVyIHsKLQotCXB1YmxpYyBJU2VsZWN0aW9uIG1hcFNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikgewotCQlMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7ICAKLQkJCVN0cnVjdHVyZWRTZWxlY3Rpb24gc3RydWN0dXJlZFNlbGVjdGlvbiA9IChTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbjsKLQkJCWZvciAoSXRlcmF0b3IgaSA9IHN0cnVjdHVyZWRTZWxlY3Rpb24uaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkgewotCQkJCU9iamVjdCBvID0gaS5uZXh0KCk7Ci0JCQkJaWYgKG8gaW5zdGFuY2VvZiBBZGFwdGVyKSB7Ci0JCQkJCWxpc3QuYWRkKCgoQWRhcHRlcilvKS5nZXRUYXJnZXQoKSk7Ci0JCQkJfSAgCi0JCQkJZWxzZSB7Ci0JCQkJCWxpc3QuYWRkKG8pOwotCQkJCX0gIAotCQkJfSAgCi0JCX0KLQkJcmV0dXJuIG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGxpc3QpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FjdGlvbnMvQWRkRWxlbWVudEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hY3Rpb25zL0FkZEVsZW1lbnRBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTExNjFjNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FjdGlvbnMvQWRkRWxlbWVudEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLkNvbW1vbkVuY29kaW5nUHJlZmVyZW5jZU5hbWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5kaWFsb2dzLk5ld0NvbXBvbmVudERpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLldTRExFZGl0b3JVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuWE1MQ29yZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmZvcm1hdC5Gb3JtYXRQcm9jZXNzb3JYTUw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0KLXB1YmxpYyBjbGFzcyBBZGRFbGVtZW50QWN0aW9uIGV4dGVuZHMgQmFzZU5vZGVBY3Rpb24gewotCXByb3RlY3RlZCBOb2RlIHBhcmVudE5vZGU7Ci0JcHJvdGVjdGVkIFN0cmluZyBwcmVmaXg7Ci0JcHJvdGVjdGVkIFN0cmluZyBub2RlTmFtZTsKLQlwcm90ZWN0ZWQgRWxlbWVudCBuZXdFbGVtZW50OwotCXByb3RlY3RlZCBOb2RlIHJlbGF0aXZlTm9kZSA9IG51bGw7Ci0JcHJvdGVjdGVkIElFZGl0b3JQYXJ0IGVkaXRvclBhcnQ7Ci0JcHJvdGVjdGVkIERlZmluaXRpb24gZGVmaW5pdGlvbjsKLQlwcm90ZWN0ZWQgRG9jdW1lbnQgZG9jdW1lbnQ7Ci0JcHJvdGVjdGVkIGJvb2xlYW4gY29tcHV0ZVRvcExldmVsUmVmQ2hpbGQ7Ci0KLQlwcm90ZWN0ZWQgYm9vbGVhbiBzZWxlY3ROZXdseUNyZWF0ZWRPYmplY3QgPSB0cnVlOyAvLyBXZSBzaG91bGQgbm90IGJlCi0JCQkJCQkJCQkJCQkJCS8vIHNlbGVjdGluZyB0aGUKLQkJCQkJCQkJCQkJCQkJLy8gb2JqZWN0IGluIHRoZQotCQkJCQkJCQkJCQkJCQkvLyBhY3Rpb24uLi4uLiBUT0RPCi0KLQlwdWJsaWMgQWRkRWxlbWVudEFjdGlvbihTdHJpbmcgdGV4dCwgU3RyaW5nIGltYWdlRGVzY3JpcHRvcktleSwgTm9kZSBwYXJlbnROb2RlLCBTdHJpbmcgbm9kZU5hbWUpIHsKLQkJc2V0VGV4dCh0ZXh0KTsKLQkJc2V0SW1hZ2VEZXNjcmlwdG9yKFdTRExFZGl0b3JQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yKGltYWdlRGVzY3JpcHRvcktleSkpOwotCQl0aGlzLnBhcmVudE5vZGUgPSBwYXJlbnROb2RlOwotCQl0aGlzLm5vZGVOYW1lID0gbm9kZU5hbWU7Ci0JfQotCi0JcHVibGljIEFkZEVsZW1lbnRBY3Rpb24oU3RyaW5nIHRleHQsIFN0cmluZyBpbWFnZURlc2NyaXB0b3JLZXksIE5vZGUgcGFyZW50Tm9kZSwgU3RyaW5nIHByZWZpeCwgU3RyaW5nIGxvY2FsTmFtZSkgewotCQlzZXRUZXh0KHRleHQpOwotCQlzZXRJbWFnZURlc2NyaXB0b3IoV1NETEVkaXRvclBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3IoaW1hZ2VEZXNjcmlwdG9yS2V5KSk7Ci0JCXRoaXMucGFyZW50Tm9kZSA9IHBhcmVudE5vZGU7Ci0JCXRoaXMucHJlZml4ID0gcHJlZml4OwotCQl0aGlzLm5vZGVOYW1lID0gbG9jYWxOYW1lOwotCX0KLQotCXB1YmxpYyBBZGRFbGVtZW50QWN0aW9uKFN0cmluZyB0ZXh0LCBOb2RlIHBhcmVudE5vZGUsIFN0cmluZyBwcmVmaXgsIFN0cmluZyBsb2NhbE5hbWUpIHsKLQkJc2V0VGV4dCh0ZXh0KTsKLQkJc2V0SW1hZ2VEZXNjcmlwdG9yKG51bGwpOwotCQl0aGlzLnBhcmVudE5vZGUgPSBwYXJlbnROb2RlOwotCQl0aGlzLnByZWZpeCA9IHByZWZpeDsKLQkJdGhpcy5ub2RlTmFtZSA9IGxvY2FsTmFtZTsKLQl9Ci0KLQlwdWJsaWMgQWRkRWxlbWVudEFjdGlvbihOb2RlIHBhcmVudE5vZGUsIFN0cmluZyBwcmVmaXgsIFN0cmluZyBsb2NhbE5hbWUsIE5vZGUgcmVsYXRpdmVOb2RlKSB7Ci0JCXRoaXMucGFyZW50Tm9kZSA9IHBhcmVudE5vZGU7Ci0JCXRoaXMucHJlZml4ID0gcHJlZml4OwotCQl0aGlzLm5vZGVOYW1lID0gbG9jYWxOYW1lOwotCQl0aGlzLnJlbGF0aXZlTm9kZSA9IHJlbGF0aXZlTm9kZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRDb21wdXRlVG9wTGV2ZWxSZWZDaGlsZChib29sZWFuIGlzRW5hYmxlZCkgewotCQljb21wdXRlVG9wTGV2ZWxSZWZDaGlsZCA9IGlzRW5hYmxlZDsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRFZGl0b3JQYXJ0KElFZGl0b3JQYXJ0IGVkaXRvclBhcnQpIHsKLQkJdGhpcy5lZGl0b3JQYXJ0ID0gZWRpdG9yUGFydDsKLQl9Ci0KLQlwcm90ZWN0ZWQgYm9vbGVhbiBzaG93RGlhbG9nKCkgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCWJvb2xlYW4gb2sgPSBzaG93RGlhbG9nKCk7Ci0JCWlmIChvaykgewotCQkJYmVnaW5SZWNvcmRpbmcoKTsKLQkJCXBlcmZvcm1BZGRFbGVtZW50KCk7Ci0JCQllbmRSZWNvcmRpbmcoKTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCB2b2lkIHBlcmZvcm1BZGRFbGVtZW50KCkgewotCQlpZiAocGFyZW50Tm9kZSAhPSBudWxsKSB7Ci0JCQluZXdFbGVtZW50ID0gY3JlYXRlRWxlbWVudChub2RlTmFtZSk7Ci0JCQlhZGRBdHRyaWJ1dGVzKG5ld0VsZW1lbnQpOwotCQkJaWYgKHJlbGF0aXZlTm9kZSA9PSBudWxsICYmIGNvbXB1dGVUb3BMZXZlbFJlZkNoaWxkKSB7Ci0JCQkJcmVsYXRpdmVOb2RlID0gY29tcHV0ZVRvcExldmVsUmVmQ2hpbGQobmV3RWxlbWVudCk7Ci0JCQl9Ci0KLQkJCWlmIChyZWxhdGl2ZU5vZGUgPT0gbnVsbCkgewotCQkJCXBhcmVudE5vZGUuYXBwZW5kQ2hpbGQobmV3RWxlbWVudCk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlwYXJlbnROb2RlLmluc2VydEJlZm9yZShuZXdFbGVtZW50LCByZWxhdGl2ZU5vZGUpOwotCQkJfQotCQkJLy8gZm9ybWF0KHBhcmVudE5vZGUpOwotCQkJZm9ybWF0KG5ld0VsZW1lbnQpOwotCQkJLy8gVWdseS4uLi4uIFdlIHNob3VsZCBub3QgYmUgc2VsZWN0aW5nIHRoZSBvYmplY3QgaW4gdGhlIGdyYXBoCi0JCQkvLyB2aWV3IGluIHRoZSBBY3Rpb24uCi0JCQkvLyBUaGlzIHNob3VsZCBiZSByZWZhY3RvcmVkIG91dC4gV2UgYWRkIHRoaXMgYm9vbGVhbiBjaGVjawotCQkJLy8gYmVjYXVzZSBXU0RMU2V0VHlwZURpYWxvZy5qYXZhCi0JCQkvLyB1c2VzIEFkZEltcG9ydEFjdGlvbi5qYXZhIGJ1dCB3ZSBzaG91bGQgbm90IGJlIHNlbGVjdGluZyB0aGUKLQkJCS8vIG5ld2x5IGNyZWF0ZWQgaW1wb3J0Li4uLgotCQkJaWYgKHNlbGVjdE5ld2x5Q3JlYXRlZE9iamVjdCkgewotCQkJCXNlbGVjdE9iamVjdEZvck5ld0VsZW1lbnQoKTsKLQkJCX0KLQkJfQotCX0KLQotCS8vIFVnbHkuLi4uLiBXZSBzaG91bGQgbm90IGJlIHNlbGVjdGluZyB0aGUgb2JqZWN0IGluIHRoZSBncmFwaCB2aWV3IGluCi0JLy8gdGhlIEFjdGlvbi4KLQkvLyBUaGlzIHNob3VsZCBiZSByZWZhY3RvcmVkIG91dC4gV2UgYWRkIHRoaXMgYm9vbGVhbiBjaGVjayBiZWNhdXNlCi0JLy8gV1NETFNldFR5cGVEaWFsb2cuamF2YQotCS8vIHVzZXMgQWRkSW1wb3J0QWN0aW9uLmphdmEgYnV0IHdlIHNob3VsZCBub3QgYmUgc2VsZWN0aW5nIHRoZSBuZXdseQotCS8vIGNyZWF0ZWQgaW1wb3J0Li4uLgotCS8vIFdlIHNob3VsZCBjYWxsIHRoaXMgbWV0aG9kIGJlZm9yZSBjYWxsaW5nIHJ1bigpCi0JcHVibGljIHZvaWQgc2VsZWN0T2JqZWN0Rm9yTmV3RWxlbWVudChib29sZWFuIHNlbGVjdCkgewotCQlzZWxlY3ROZXdseUNyZWF0ZWRPYmplY3QgPSBzZWxlY3Q7Ci0JfQotCi0JcHVibGljIE5vZGUgZ2V0Tm9kZSgpIHsKLQkJaWYgKHBhcmVudE5vZGUgIT0gbnVsbCkgewotCQkJcmV0dXJuIHBhcmVudE5vZGU7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlyZXR1cm4gZG9jdW1lbnQ7Ci0JCX0KLQl9Ci0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0VW5kb0Rlc2NyaXB0aW9uKCkgewotCQlyZXR1cm4gTWVzc2FnZXMuX1VJX0FDVElPTl9BREQ7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQotCXByb3RlY3RlZCBFbGVtZW50IGNyZWF0ZUVsZW1lbnQoU3RyaW5nIG5vZGVOYW1lKSB7Ci0JCURvY3VtZW50IGRvY3VtZW50ID0gcGFyZW50Tm9kZS5nZXRPd25lckRvY3VtZW50KCk7Ci0KLQkJRWxlbWVudCBlbGVtZW50ID0gKHByZWZpeCAhPSBudWxsICYmIHByZWZpeC5sZW5ndGgoKSA+IDApID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChwcmVmaXggKyAiOiIgKyBub2RlTmFtZSkgOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KG5vZGVOYW1lKTsgLy8kTk9OLU5MUy0xJAotCi0JCXJldHVybiBlbGVtZW50OwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGFkZEF0dHJpYnV0ZXMoRWxlbWVudCBuZXdFbGVtZW50KSB7Ci0JfQotCi0KLQlwcm90ZWN0ZWQgdm9pZCBmb3JtYXQoTm9kZSBwYXJlbnROb2RlKSB7Ci0JCWlmIChwYXJlbnROb2RlIGluc3RhbmNlb2YgSURPTU5vZGUpIHsKLQkJCS8vIGZvcm1hdCBzZWxlY3RlZCBub2RlCi0JCQlGb3JtYXRQcm9jZXNzb3JYTUwgZm9ybWF0UHJvY2Vzc29yWE1MID0gbmV3IEZvcm1hdFByb2Nlc3NvclhNTCgpOwotCQkJZm9ybWF0UHJvY2Vzc29yWE1MLmZvcm1hdE5vZGUoKElET01Ob2RlKSBwYXJlbnROb2RlKTsKLQotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIEVsZW1lbnQgZ2V0RGVmaW5pdGlvbkVsZW1lbnQoRWxlbWVudCBwYXJlbnRFbGVtZW50KSB7Ci0JCUVsZW1lbnQgZGVmaW5pdGlvbkVsZW1lbnQgPSBudWxsOwotCi0JCWZvciAoTm9kZSBub2RlID0gcGFyZW50RWxlbWVudC5nZXRPd25lckRvY3VtZW50KCkuZ2V0Rmlyc3RDaGlsZCgpOyBub2RlICE9IG51bGw7IG5vZGUgPSBub2RlLmdldE5leHRTaWJsaW5nKCkpIHsKLQkJCWlmIChub2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpIHsKLQkJCQlFbGVtZW50IGVsZW1lbnQgPSAoRWxlbWVudCkgbm9kZTsKLQkJCQlpZiAoV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRXU0RMVHlwZShlbGVtZW50KSA9PSBXU0RMQ29uc3RhbnRzLkRFRklOSVRJT04pIHsKLQkJCQkJZGVmaW5pdGlvbkVsZW1lbnQgPSBlbGVtZW50OwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGRlZmluaXRpb25FbGVtZW50OwotCX0KLQotCXB1YmxpYyBFbGVtZW50IGdldE5ld0VsZW1lbnQoKSB7Ci0JCXJldHVybiBuZXdFbGVtZW50OwotCX0KLQotCXB1YmxpYyB2b2lkIHNldERlZmluaXRpb24oRGVmaW5pdGlvbiBkZWZpbml0aW9uKSB7Ci0JCXRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247Ci0JfQotCi0JcHVibGljIHZvaWQgc2VsZWN0T2JqZWN0Rm9yTmV3RWxlbWVudCgpIHsKLQkJaWYgKGVkaXRvclBhcnQgPT0gbnVsbCkgewotCQkJZWRpdG9yUGFydCA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCX0KLQkJaWYgKGVkaXRvclBhcnQgIT0gbnVsbCAmJiBkZWZpbml0aW9uICE9IG51bGwpIHsKLQkJCU9iamVjdCBvYmplY3QgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmZpbmRNb2RlbE9iamVjdEZvckVsZW1lbnQoZGVmaW5pdGlvbiwgbmV3RWxlbWVudCk7Ci0JCQlpZiAob2JqZWN0ICE9IG51bGwpIHsKLQkJCQlJU2VsZWN0aW9uUHJvdmlkZXIgc2VsZWN0aW9uUHJvdmlkZXIgPSAoSVNlbGVjdGlvblByb3ZpZGVyKSBlZGl0b3JQYXJ0LmdldEFkYXB0ZXIoSVNlbGVjdGlvblByb3ZpZGVyLmNsYXNzKTsKLQkJCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIgIT0gbnVsbCkgewotCQkJCQlzZWxlY3Rpb25Qcm92aWRlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24ob2JqZWN0KSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgc2VsZWN0T2JqZWN0KFdTRExFbGVtZW50IG9iamVjdCkgewotCQlpZiAoZWRpdG9yUGFydCA9PSBudWxsKSB7Ci0JCQllZGl0b3JQYXJ0ID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLQkJfQotCQlpZiAoZWRpdG9yUGFydCAhPSBudWxsICYmIGRlZmluaXRpb24gIT0gbnVsbCkgewotCQkJaWYgKG9iamVjdCAhPSBudWxsKSB7Ci0JCQkJSVNlbGVjdGlvblByb3ZpZGVyIHNlbGVjdGlvblByb3ZpZGVyID0gKElTZWxlY3Rpb25Qcm92aWRlcikgZWRpdG9yUGFydC5nZXRBZGFwdGVyKElTZWxlY3Rpb25Qcm92aWRlci5jbGFzcyk7Ci0JCQkJaWYgKHNlbGVjdGlvblByb3ZpZGVyICE9IG51bGwpIHsKLQkJCQkJc2VsZWN0aW9uUHJvdmlkZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKG9iamVjdCkpOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyBTdHJpbmcgc2hvd0RpYWxvZ0hlbHBlcihTdHJpbmcgdGl0bGUsIFN0cmluZyBkZWZhdWx0TmFtZSwgTGlzdCB1c2VkTmFtZXMpIHsKLQkJU3RyaW5nIHJlc3VsdCA9IGRlZmF1bHROYW1lOwotCQlOZXdDb21wb25lbnREaWFsb2cgZGlhbG9nID0gbmV3IE5ld0NvbXBvbmVudERpYWxvZyhXU0RMRWRpdG9yUGx1Z2luLmdldFNoZWxsKCksIHRpdGxlLCBkZWZhdWx0TmFtZSwgdXNlZE5hbWVzKTsKLQkJaW50IHJjID0gZGlhbG9nLmNyZWF0ZUFuZE9wZW4oKTsKLQkJaWYgKHJjID09IElEaWFsb2dDb25zdGFudHMuT0tfSUQpIHsKLQkJCXJlc3VsdCA9IGRpYWxvZy5nZXROYW1lKCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlyZXN1bHQgPSBudWxsOwotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHJvdGVjdGVkIE5vZGUgY29tcHV0ZVRvcExldmVsUmVmQ2hpbGQoTm9kZSBub2RlVG9BZGQpIHsKLQkJTm9kZSByZXN1bHQgPSBudWxsOwotCQlpbnQgYSA9IGdldFByZWNlZGVuY2Uobm9kZVRvQWRkKTsKLQotCQlmb3IgKE5vZGUgbm9kZSA9IHBhcmVudE5vZGUuZ2V0Rmlyc3RDaGlsZCgpOyBub2RlICE9IG51bGw7IG5vZGUgPSBub2RlLmdldE5leHRTaWJsaW5nKCkpIHsKLQkJCWlmIChub2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpIHsKLQkJCQlpbnQgYiA9IGdldFByZWNlZGVuY2Uobm9kZSk7Ci0JCQkJaWYgKGIgPiBhKSB7Ci0JCQkJCXJlc3VsdCA9IG5vZGU7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGNyZWF0ZURlZmluaXRpb25TdHViKCkgewotCQlpZiAoZG9jdW1lbnQgIT0gbnVsbCkgewotCQkJLy8gQ3JlYXRlIHRoZSBEZWZpbml0aW9ucyBlbGVtZW50IHdpdGggcHJvcGVyIG5hbWVzcGFjZQotCQkJUHJlZmVyZW5jZXMgcHJlZmVyZW5jZSA9IFhNTENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCk7Ci0JCQlTdHJpbmcgY2hhclNldCA9IHByZWZlcmVuY2UuZ2V0U3RyaW5nKENvbW1vbkVuY29kaW5nUHJlZmVyZW5jZU5hbWVzLk9VVFBVVF9DT0RFU0VUKTsKLQkJCWlmIChjaGFyU2V0ID09IG51bGwgfHwgY2hhclNldC50cmltKCkuZXF1YWxzKCIiKSkgeyAvLyROT04tTkxTLTEkCi0JCQkJY2hhclNldCA9ICJVVEYtOCI7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVByb2Nlc3NpbmdJbnN0cnVjdGlvbigieG1sIiwgInZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIiIgKyBjaGFyU2V0ICsgIlwiIikpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAotCQkJRWxlbWVudCByb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgid3NkbDpkZWZpbml0aW9ucyIpOyAvLyROT04tTkxTLTEkCi0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChyb290KTsKLQotCQkJLy8gQWRkIHZhcmlvdXMgbmFtZXNwYWNlIGF0dHJpYnV0ZXMgaGVyZS4KLQkJCXJvb3Quc2V0QXR0cmlidXRlKCJ4bWxuczpzb2FwIiwgImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCQlyb290LnNldEF0dHJpYnV0ZSgieG1sbnM6dG5zIiwgZ2V0RGVmYXVsdE5hbWVzcGFjZSgpKTsgLy8kTk9OLU5MUy0xJAotCQkJcm9vdC5zZXRBdHRyaWJ1dGUoInhtbG5zOndzZGwiLCAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCQlyb290LnNldEF0dHJpYnV0ZSgieG1sbnM6eHNkIiwgImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJcm9vdC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCBnZXRGaWxlTmFtZSgpKTsgLy8kTk9OLU5MUy0xJAotCQkJcm9vdC5zZXRBdHRyaWJ1dGUoInRhcmdldE5hbWVzcGFjZSIsIGdldERlZmF1bHROYW1lc3BhY2UoKSk7IC8vJE5PTi1OTFMtMSQKLQotCQkJZGVmaW5pdGlvbi5zZXRFbGVtZW50KHJvb3QpOwotCQkJcGFyZW50Tm9kZSA9IHJvb3Q7Ci0JCQlwcmVmaXggPSBkZWZpbml0aW9uLmdldFByZWZpeChXU0RMQ29uc3RhbnRzLldTRExfTkFNRVNQQUNFX1VSSSk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBnZXREZWZhdWx0TmFtZXNwYWNlKCkgewotCQlTdHJpbmcgbmFtZXNwYWNlID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFByZWZlcmVuY2VTdG9yZSgpLmdldFN0cmluZyhNZXNzYWdlcy5fVUlfUFJFRl9QQUdFX0RFRkFVTFRfVEFSR0VUX05BTUVTUEFDRSk7IC8vJE5PTi1OTFMtMSQKLQkJaWYgKCFuYW1lc3BhY2UuZW5kc1dpdGgoIi8iKSkgeyAvLyROT04tTkxTLTEkCi0JCQluYW1lc3BhY2UgPSBuYW1lc3BhY2UuY29uY2F0KCIvIik7IC8vJE5PTi1OTFMtMSQKLQkJfQotCi0JCW5hbWVzcGFjZSArPSBnZXRGaWxlTmFtZSgpICsgIi8iOyAvLyROT04tTkxTLTEkCi0KLQkJcmV0dXJuIG5hbWVzcGFjZTsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBnZXRGaWxlTmFtZSgpIHsKLQkJU3RyaW5nIGZpbGVMb2NhdGlvbiA9IGRlZmluaXRpb24uZ2V0TG9jYXRpb24oKTsKLQkJSVBhdGggZmlsZVBhdGggPSBuZXcgUGF0aChmaWxlTG9jYXRpb24pOwotCQlyZXR1cm4gZmlsZVBhdGgucmVtb3ZlRmlsZUV4dGVuc2lvbigpLmxhc3RTZWdtZW50KCkudG9TdHJpbmcoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIEhhc2hNYXAgcHJlY2VkZW5jZU1hcCA9IGNyZWF0ZVByZWNlZGVuY2VNYXAoKTsKLQotCXByb3RlY3RlZCBzdGF0aWMgaW50IGdldFByZWNlZGVuY2UoTm9kZSBub2RlKSB7Ci0JCWludCByZXN1bHQgPSAyOwotCQlTdHJpbmcgbG9jYWxOYW1lID0gbm9kZS5nZXRMb2NhbE5hbWUoKTsKLQkJaWYgKGxvY2FsTmFtZSAhPSBudWxsKSB7Ci0JCQlJbnRlZ2VyIGludGVnZXIgPSAoSW50ZWdlcikgcHJlY2VkZW5jZU1hcC5nZXQobG9jYWxOYW1lKTsKLQkJCWlmIChpbnRlZ2VyICE9IG51bGwpIHsKLQkJCQlyZXN1bHQgPSBpbnRlZ2VyLmludFZhbHVlKCk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIEhhc2hNYXAgY3JlYXRlUHJlY2VkZW5jZU1hcCgpIHsKLQkJSGFzaE1hcCBoYXNoTWFwID0gbmV3IEhhc2hNYXAoKTsKLQkJaGFzaE1hcC5wdXQoV1NETENvbnN0YW50cy5ET0NVTUVOVEFUSU9OX0VMRU1FTlRfVEFHLCBuZXcgSW50ZWdlcigxKSk7Ci0JCWhhc2hNYXAucHV0KFdTRExDb25zdGFudHMuSU1QT1JUX0VMRU1FTlRfVEFHLCBuZXcgSW50ZWdlcigzKSk7Ci0JCWhhc2hNYXAucHV0KFdTRExDb25zdGFudHMuVFlQRVNfRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKDQpKTsKLQkJaGFzaE1hcC5wdXQoV1NETENvbnN0YW50cy5NRVNTQUdFX0VMRU1FTlRfVEFHLCBuZXcgSW50ZWdlcig1KSk7Ci0JCWhhc2hNYXAucHV0KFdTRExDb25zdGFudHMuUE9SVF9UWVBFX0VMRU1FTlRfVEFHLCBuZXcgSW50ZWdlcig2KSk7Ci0JCWhhc2hNYXAucHV0KFdTRExDb25zdGFudHMuQklORElOR19FTEVNRU5UX1RBRywgbmV3IEludGVnZXIoNykpOwotCQloYXNoTWFwLnB1dChXU0RMQ29uc3RhbnRzLlNFUlZJQ0VfRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKDgpKTsKLQkJcmV0dXJuIGhhc2hNYXA7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWN0aW9ucy9BZGRFbGVtZW50RGVjbGFyYXRpb25BY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWN0aW9ucy9BZGRFbGVtZW50RGVjbGFyYXRpb25BY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTlmNDA2Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FjdGlvbnMvQWRkRWxlbWVudERlY2xhcmF0aW9uQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLk5hbWVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETEVkaXRvclV0aWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIEFkZEVsZW1lbnREZWNsYXJhdGlvbkFjdGlvbiBleHRlbmRzIEFjdGlvbgotewotCXByb3RlY3RlZCBEZWZpbml0aW9uIGRlZmluaXRpb247Ci0JcHJvdGVjdGVkIFN0cmluZyBuYW1lc3BhY2U7Ci0JcHJvdGVjdGVkIFN0cmluZyBwcmVmaXg7Ci0JCi0JcHVibGljIEFkZEVsZW1lbnREZWNsYXJhdGlvbkFjdGlvbihEZWZpbml0aW9uIGRlZmluaXRpb24sIFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBzdWdnZXN0ZWRQcmVmaXgpCi0JewotCQl0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotCQl0aGlzLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTsKLQkJdGhpcy5wcmVmaXggPSBzdWdnZXN0ZWRQcmVmaXg7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHJ1bigpCi0JewotCQlTdHJpbmcgZXhpc3RpbmdQcmVmaXggPSBkZWZpbml0aW9uLmdldFByZWZpeChuYW1lc3BhY2UpOwotCQlpZiAoZXhpc3RpbmdQcmVmaXggIT0gbnVsbCkKLQkJewotCQkJcHJlZml4ID0gZXhpc3RpbmdQcmVmaXg7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlwcmVmaXggPSBOYW1lVXRpbC5idWlsZFVuaXF1ZVByZWZpeChkZWZpbml0aW9uLCBwcmVmaXgpOwotCQkJRWxlbWVudCBkZWZpbml0aW9uRWxlbWVudCA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0RWxlbWVudEZvck9iamVjdChkZWZpbml0aW9uKTsKLQkJCWlmIChkZWZpbml0aW9uRWxlbWVudCAhPSBudWxsKQotCQkJewotCQkJCWRlZmluaXRpb25FbGVtZW50LnNldEF0dHJpYnV0ZSgieG1sbnM6IiArIHByZWZpeCwgbmFtZXNwYWNlKTsgLy8kTk9OLU5MUy0xJAotCQkJfQkJCQotCQl9CQkKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRQcmVmaXgoKQotCXsKLQkJcmV0dXJuIHByZWZpeDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FjdGlvbnMvQWRkSW1wb3J0QWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FjdGlvbnMvQWRkSW1wb3J0QWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1MjU0OTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hY3Rpb25zL0FkZEltcG9ydEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFjdGlvbnM7IAotCi1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5JbnRlcm5hbFdTRExNdWx0aVBhZ2VFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMRWRpdG9yVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotcHVibGljIGNsYXNzIEFkZEltcG9ydEFjdGlvbiBleHRlbmRzIEFkZEVsZW1lbnRBY3Rpb24KLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgcHJvdGVjdGVkIFN0cmluZyBuYW1lc3BhY2U7Ci0gIHByb3RlY3RlZCBTdHJpbmcgbG9jYXRpb247Ci0gIHByb3RlY3RlZCBTdHJpbmcgZWxlbWVudERlY2xhcmF0aW9uTmFtZXNwYWNlUHJlZml4OwotCi0gIHB1YmxpYyBBZGRJbXBvcnRBY3Rpb24oSUVkaXRvclBhcnQgcGFydCwgRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBOb2RlIHBhcmVudE5vZGUsIFN0cmluZyBwcmVmaXgpCi0gIHsKLQl0aGlzKHBhcnQsIGRlZmluaXRpb24sIHBhcmVudE5vZGUsIHByZWZpeCwgbnVsbCwgbnVsbCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBBZGRJbXBvcnRBY3Rpb24oSUVkaXRvclBhcnQgcGFydCwgRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBOb2RlIHBhcmVudE5vZGUsIFN0cmluZyBwcmVmaXgsIFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBsb2NhdGlvbikKLSAgewotICAgIHN1cGVyKE1lc3NhZ2VzLl9VSV9BQ1RJT05fQUREX0lNUE9SVCwgImljb25zL2ltcG9ydF9vYmouZ2lmIiwgcGFyZW50Tm9kZSwgcHJlZml4LCAiaW1wb3J0Iik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCi0JICBzZXREZWZpbml0aW9uKGRlZmluaXRpb24pOwotCSAgc2V0Q29tcHV0ZVRvcExldmVsUmVmQ2hpbGQodHJ1ZSk7Ci0JICB0aGlzLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTsKLQkgIHRoaXMubG9jYXRpb24gPSBsb2NhdGlvbjsKLQkgIHNldEVkaXRvclBhcnQocGFydCk7Ci0JICAKLQkgIGlmIChwYXJ0IGluc3RhbmNlb2YgSW50ZXJuYWxXU0RMTXVsdGlQYWdlRWRpdG9yKSB7Ci0JICAJZG9jdW1lbnQgPSAoKElET01Nb2RlbCkgKChJbnRlcm5hbFdTRExNdWx0aVBhZ2VFZGl0b3IpIHBhcnQpLmdldE1vZGVsKCkpLmdldERvY3VtZW50KCk7Ci0JICB9Ci0gIH0KLSAgICAgICAgCi0gIHByb3RlY3RlZCBFbGVtZW50IGNyZWF0ZUVsZW1lbnQoU3RyaW5nIG5vZGVOYW1lKQotICB7Ci0gIAlpZiAoZWxlbWVudERlY2xhcmF0aW9uTmFtZXNwYWNlUHJlZml4ICE9IG51bGwgJiYgbmFtZXNwYWNlICE9IG51bGwpCi0gIAl7IAotICAgIAlFbGVtZW50IGRlZmluaXRpb25FbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KGRlZmluaXRpb24pOwotICAgIAlpZiAoZGVmaW5pdGlvbkVsZW1lbnQgIT0gbnVsbCkKLSAgICAJeyAgICAKLQkgIAkgIGRlZmluaXRpb25FbGVtZW50LnNldEF0dHJpYnV0ZSgieG1sbnM6IiArIGVsZW1lbnREZWNsYXJhdGlvbk5hbWVzcGFjZVByZWZpeCwgbmFtZXNwYWNlKTsgLy8kTk9OLU5MUy0xJAotICAgIAl9ICAgICAgCQotICAJfQotICAJcmV0dXJuIHN1cGVyLmNyZWF0ZUVsZW1lbnQobm9kZU5hbWUpOyAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEVsZW1lbnREZWNsYXJhdGlvbk5hbWVzcGFjZVByZWZpeChTdHJpbmcgbnNQcmVmaXgpCi0gIHsKLSAgCXRoaXMuZWxlbWVudERlY2xhcmF0aW9uTmFtZXNwYWNlUHJlZml4ID0gbnNQcmVmaXg7Ci0gIH0KLSAgICAgICAgICAgICAgICAgICAKLSAgcHJvdGVjdGVkIHZvaWQgYWRkQXR0cmlidXRlcyhFbGVtZW50IG5ld0VsZW1lbnQpCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgbmV3RWxlbWVudC5zZXRBdHRyaWJ1dGUoIm5hbWVzcGFjZSIsIG5hbWVzcGFjZSAhPSBudWxsID8gbmFtZXNwYWNlIDogIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICBuZXdFbGVtZW50LnNldEF0dHJpYnV0ZSgibG9jYXRpb24iLCBsb2NhdGlvbiAhPSBudWxsID8gbG9jYXRpb24gOiAiIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAKLSAgcHVibGljIHZvaWQgcGVyZm9ybUFkZEVsZW1lbnQoKSB7Ci0gIAlpZiAocGFyZW50Tm9kZSA9PSBudWxsIHx8IChkb2N1bWVudCAhPSBudWxsICYmIGRvY3VtZW50LmdldENoaWxkTm9kZXMoKS5nZXRMZW5ndGgoKSA9PSAwKSkgewotICAJCWNyZWF0ZURlZmluaXRpb25TdHViKCk7Ci0gIAl9Ci0gIAkKLSAgCXN1cGVyLnBlcmZvcm1BZGRFbGVtZW50KCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FjdGlvbnMvQWRkV1NJU2NoZW1hSW1wb3J0QWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FjdGlvbnMvQWRkV1NJU2NoZW1hSW1wb3J0QWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1MDJlYWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hY3Rpb25zL0FkZFdTSVNjaGVtYUltcG9ydEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hY3Rpb25zOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETEVkaXRvclV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZm9ybWF0LkZvcm1hdFByb2Nlc3NvclhNTDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotcHVibGljIGNsYXNzIEFkZFdTSVNjaGVtYUltcG9ydEFjdGlvbiBleHRlbmRzIEJhc2VOb2RlQWN0aW9uCi17Ci0gICAgcHJvdGVjdGVkIERlZmluaXRpb24gZGVmaW5pdGlvbjsKLSAgICBwcm90ZWN0ZWQgRWxlbWVudCBkZWZpbml0aW9uRWxlbWVudDsKLSAgICBwcm90ZWN0ZWQgU3RyaW5nIG5hbWVzcGFjZTsKLSAgICBwcm90ZWN0ZWQgU3RyaW5nIGxvY2F0aW9uOwotICAgIHByb3RlY3RlZCBTdHJpbmcgZWxlbWVudERlY2xhcmF0aW9uTmFtZXNwYWNlUHJlZml4OwotCi0gICAgcHVibGljIEFkZFdTSVNjaGVtYUltcG9ydEFjdGlvbihEZWZpbml0aW9uIGRlZmluaXRpb24sIFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBsb2NhdGlvbikKLSAgICB7Ci0gICAgICAgIHRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247Ci0gICAgICAgIHRoaXMubmFtZXNwYWNlID0gbmFtZXNwYWNlOwotICAgICAgICB0aGlzLmxvY2F0aW9uID0gbG9jYXRpb247Ci0gICAgICAgIGRlZmluaXRpb25FbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KGRlZmluaXRpb24pOwotICAgIH0KLQotICAgIHB1YmxpYyBOb2RlIGdldE5vZGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGRlZmluaXRpb25FbGVtZW50OwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgU3RyaW5nIGdldFVuZG9EZXNjcmlwdGlvbigpCi0gICAgewotICAgIAlyZXR1cm4gTWVzc2FnZXMuX1VJX0FDVElPTl9BRERfSU1QT1JUOyAvLyROT04tTkxTLTEkCi0gICAgfQotCi0gICAgcHJvdGVjdGVkIEVsZW1lbnQgZ2V0T3JDcmVhdGVUeXBlc0VsZW1lbnQoKQotICAgIHsKLSAgICAgICAgRWxlbWVudCB0eXBlc0VsZW1lbnQgPSBudWxsOwotICAgICAgICBpZiAoZGVmaW5pdGlvbi5nZXRUeXBlcygpID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChkZWZpbml0aW9uRWxlbWVudCAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEFkZEVsZW1lbnRBY3Rpb24gYWRkVHlwZXNBY3Rpb24gPSBuZXcgQWRkRWxlbWVudEFjdGlvbigiIiwgImljb25zL3hzZF9vYmouZ2lmIiwgZGVmaW5pdGlvbkVsZW1lbnQsIGRlZmluaXRpb25FbGVtZW50LmdldFByZWZpeCgpLCAidHlwZXMiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKLSAgICAgICAgICAgICAgICBhZGRUeXBlc0FjdGlvbi5zZXRDb21wdXRlVG9wTGV2ZWxSZWZDaGlsZCh0cnVlKTsKLSAgICAgICAgICAgICAgICBhZGRUeXBlc0FjdGlvbi5ydW4oKTsKLSAgICAgICAgICAgICAgICB0eXBlc0VsZW1lbnQgPSBhZGRUeXBlc0FjdGlvbi5nZXROZXdFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgZm9ybWF0KHR5cGVzRWxlbWVudCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICB0eXBlc0VsZW1lbnQgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldEVsZW1lbnRGb3JPYmplY3QoZGVmaW5pdGlvbi5nZXRUeXBlcygpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHlwZXNFbGVtZW50OwotICAgIH0KLSAgICAKLSAgICBwcm90ZWN0ZWQgRWxlbWVudCBnZXRJbXBvcnRIb2xkZXJFbGVtZW50KEVsZW1lbnQgdHlwZXNFbGVtZW50KSB7Ci0gICAgCUVsZW1lbnQgaW1wb3J0SG9sZGVyRWxlbWVudCA9IG51bGw7Ci0gICAgICAgIE5vZGVMaXN0IG5vZGVMaXN0ID0gdHlwZXNFbGVtZW50LmdldENoaWxkTm9kZXMoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBub2RlTGlzdC5nZXRMZW5ndGgoKTsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBOb2RlIG5vZGUgPSBub2RlTGlzdC5pdGVtKGkpOwotICAgICAgICAgICAgaWYgKG5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBFbGVtZW50IGVsZW1lbnQgPSAoRWxlbWVudCkgbm9kZTsKLSAgICAgICAgICAgICAgICBpZiAoInNjaGVtYSIuZXF1YWxzKGVsZW1lbnQuZ2V0TG9jYWxOYW1lKCkpICYmIGVsZW1lbnQuZ2V0QXR0cmlidXRlKCJ0YXJnZXROYW1lc3BhY2UiKSA9PSBudWxsKSAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGltcG9ydEhvbGRlckVsZW1lbnQgPSBlbGVtZW50OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBpbXBvcnRIb2xkZXJFbGVtZW50OwotICAgIH0KLQotICAgIHB1YmxpYyBFbGVtZW50IGdldE9yQ3JlYXRlSW1wb3J0SG9sZGVyRWxlbWVudChFbGVtZW50IHR5cGVzRWxlbWVudCkKLSAgICB7Ci0gICAgICAgIEVsZW1lbnQgaW1wb3J0SG9sZGVyRWxlbWVudCA9IGdldEltcG9ydEhvbGRlckVsZW1lbnQodHlwZXNFbGVtZW50KTsKLSAgICAgICAgaWYgKGltcG9ydEhvbGRlckVsZW1lbnQgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgQWRkRWxlbWVudEFjdGlvbiBhZGRJbXBvcnRIb2xkZXJBY3Rpb24gPSBuZXcgQWRkRWxlbWVudEFjdGlvbigiIiwgImljb25zL3hzZF9vYmouZ2lmIiwgdHlwZXNFbGVtZW50LCAieHNkIiwgInNjaGVtYSIpIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkIC8vJE5PTi1OTFMtNCQKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgdm9pZCBhZGRBdHRyaWJ1dGVzKEVsZW1lbnQgbmV3RWxlbWVudCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuc2V0QXR0cmlidXRlKCJ4bWxuczp4c2QiLCBXU0RMQ29uc3RhbnRzLlhTRF9OQU1FU1BBQ0VfVVJJKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBhZGRJbXBvcnRIb2xkZXJBY3Rpb24ucnVuKCk7Ci0gICAgICAgICAgICBpbXBvcnRIb2xkZXJFbGVtZW50ID0gYWRkSW1wb3J0SG9sZGVyQWN0aW9uLmdldE5ld0VsZW1lbnQoKTsKLSAgICAgICAgICAgIGZvcm1hdChpbXBvcnRIb2xkZXJFbGVtZW50KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gaW1wb3J0SG9sZGVyRWxlbWVudDsKLSAgICB9Ci0gICAgCi0gICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBhZGQgdGhlIGltcG9ydCBpZiBpdCdzIGFscmVhZHkgdGhlcmUKLSAgICBwcm90ZWN0ZWQgYm9vbGVhbiBpbXBvcnROb3RBbHJlYWR5RXhpc3RzKCkgewotICAgIAlib29sZWFuIG5vdEV4aXN0cyA9IHRydWU7Ci0gICAgCQotICAgIAlpZiAoZGVmaW5pdGlvbi5nZXRUeXBlcygpICE9IG51bGwpIHsKLSAgICAJCUVsZW1lbnQgdHlwZXNFbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KGRlZmluaXRpb24uZ2V0VHlwZXMoKSk7Ci0gICAgCQlFbGVtZW50IHNjaGVtYUVsZW1lbnQgPSBnZXRJbXBvcnRIb2xkZXJFbGVtZW50KHR5cGVzRWxlbWVudCk7Ci0KLSAgICAJCWlmIChzY2hlbWFFbGVtZW50ICE9IG51bGwpIHsKLSAgICAJCQkvLyBDb2xsZWN0IGNoaWxkcmVuCi0gICAgCQkJTm9kZSBub2RlID0gc2NoZW1hRWxlbWVudC5nZXRGaXJzdENoaWxkKCk7Ci0gICAgCQkJamF2YS51dGlsLlZlY3RvciBzY2hlbWFDaGlsZHJlbiA9IG5ldyBqYXZhLnV0aWwuVmVjdG9yKCk7Ci0gICAgCQkJaWYgKG5vZGUgIT0gbnVsbCkgewotICAgIAkJCQlOb2RlIGNoaWxkID0gbm9kZTsKLQkJCQkJCi0gICAgCQkJCWlmICghKGNoaWxkIGluc3RhbmNlb2Ygb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmRvY3VtZW50LlRleHRJbXBsKSkgewotICAgIAkJCQkJc2NoZW1hQ2hpbGRyZW4uYWRkRWxlbWVudChjaGlsZCk7Ci0gICAgCQkJCX0KLQkJCQkJCi0gICAgCQkJCXdoaWxlIChjaGlsZC5nZXROZXh0U2libGluZygpICE9IG51bGwpIHsKLSAgICAJCQkJCWNoaWxkID0gY2hpbGQuZ2V0TmV4dFNpYmxpbmcoKTsKLSAgICAJCQkJCWlmICghKGNoaWxkIGluc3RhbmNlb2Ygb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmRvY3VtZW50LlRleHRJbXBsKSkgewotICAgIAkJCQkJCXNjaGVtYUNoaWxkcmVuLmFkZEVsZW1lbnQoY2hpbGQpOwotICAgIAkJCQkJfQotICAgIAkJCQl9Ci0KLSAgICAJCQkJZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IHNjaGVtYUNoaWxkcmVuLnNpemUoKTsgaW5kZXgrKykgewotICAgIAkJCQkJRWxlbWVudCBzY2hlbWFDaGlsZCA9IChFbGVtZW50KSBzY2hlbWFDaGlsZHJlbi5lbGVtZW50QXQoaW5kZXgpOwotICAgIAkJCQkJU3RyaW5nIHNjaGVtYUxvY2F0aW9uID0gc2NoZW1hQ2hpbGQuZ2V0QXR0cmlidXRlKCJzY2hlbWFMb2NhdGlvbiIpOyAvLyROT04tTkxTLTEkCi0gICAgCQkJCQlTdHJpbmcgc2NoZW1hTmFtZXNwYWNlID0gc2NoZW1hQ2hpbGQuZ2V0QXR0cmlidXRlKCJuYW1lc3BhY2UiKTsgLy8kTk9OLU5MUy0xJAotCQkJCQotICAgIAkJCQkJaWYgKHNjaGVtYUxvY2F0aW9uICE9IG51bGwgJiYgbmFtZXNwYWNlICE9IG51bGwgJiYKLSAgICAJCQkJCQkJc2NoZW1hTG9jYXRpb24uZXF1YWxzKGxvY2F0aW9uKSAmJiBzY2hlbWFOYW1lc3BhY2UuZXF1YWxzKG5hbWVzcGFjZSkpIHsKLSAgICAJCQkJCQlub3RFeGlzdHMgPSBmYWxzZTsKLSAgICAJCQkJCQlicmVhazsKLSAgICAJCQkJCX0KLSAgICAJCQkJfQotICAgIAkJCX0KLSAgICAJCX0KLSAgICAJfQotICAgIAkKLSAgICAJcmV0dXJuIG5vdEV4aXN0czsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBydW4oKQotICAgIHsKLSAgICAgICAgaWYgKGRlZmluaXRpb25FbGVtZW50ICE9IG51bGwgJiYgaW1wb3J0Tm90QWxyZWFkeUV4aXN0cygpKQotICAgICAgICB7Ci0gICAgICAgICAgICBiZWdpblJlY29yZGluZygpOwotICAgICAgICAgICAgcGVyZm9ybUFkZEVsZW1lbnQoKTsKLSAgICAgICAgICAgIGVuZFJlY29yZGluZygpOwotICAgICAgICB9Ci0gICAgfQotICAgIHB1YmxpYyB2b2lkIHBlcmZvcm1BZGRFbGVtZW50KCkKLSAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICBFbGVtZW50IHR5cGVzRWxlbWVudCA9IGdldE9yQ3JlYXRlVHlwZXNFbGVtZW50KCk7Ci0gICAgICAgICAgICBFbGVtZW50IGltcG9ydEhvbGRlckVsZW1lbnQgPSBnZXRPckNyZWF0ZUltcG9ydEhvbGRlckVsZW1lbnQodHlwZXNFbGVtZW50KTsKLQotICAgICAgICAgICAgQWRkRWxlbWVudEFjdGlvbiBhZGRJbXBvcnRBY3Rpb24gPSBuZXcgQWRkRWxlbWVudEFjdGlvbigiIiwgImljb25zL3hzZF9vYmouZ2lmIiwgaW1wb3J0SG9sZGVyRWxlbWVudCwgaW1wb3J0SG9sZGVyRWxlbWVudC5nZXRQcmVmaXgoKSwgImltcG9ydCIpIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcHJvdGVjdGVkIHZvaWQgYWRkQXR0cmlidXRlcyhFbGVtZW50IG5ld0VsZW1lbnQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBuZXdFbGVtZW50LnNldEF0dHJpYnV0ZSgibmFtZXNwYWNlIiwgbmFtZXNwYWNlKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgICAgICAgICBuZXdFbGVtZW50LnNldEF0dHJpYnV0ZSgic2NoZW1hTG9jYXRpb24iLCBsb2NhdGlvbik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9OwotICAgICAgICAgICAgYWRkSW1wb3J0QWN0aW9uLnJ1bigpOwotICAgICAgICAgICAgRWxlbWVudCBuZXdFbGVtZW50ID0gYWRkSW1wb3J0QWN0aW9uLmdldE5ld0VsZW1lbnQoKTsKLSAgICAgICAgICAgIGZvcm1hdChuZXdFbGVtZW50KTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEVsZW1lbnREZWNsYXJhdGlvbk5hbWVzcGFjZVByZWZpeChTdHJpbmcgbnNQcmVmaXgpCi0gICAgewotICAgICAgICB0aGlzLmVsZW1lbnREZWNsYXJhdGlvbk5hbWVzcGFjZVByZWZpeCA9IG5zUHJlZml4OwotICAgIH0KLQotICAgIHByb3RlY3RlZCBzdGF0aWMgdm9pZCBmb3JtYXQoTm9kZSBwYXJlbnROb2RlKQotICAgIHsKLSAgICAgICAgaWYgKHBhcmVudE5vZGUgaW5zdGFuY2VvZiBJRE9NTm9kZSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gZm9ybWF0IHNlbGVjdGVkIG5vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBGb3JtYXRQcm9jZXNzb3JYTUwgZm9ybWF0UHJvY2Vzc29yWE1MID0gbmV3IEZvcm1hdFByb2Nlc3NvclhNTCgpOwotICAgICAgICAgICAgZm9ybWF0UHJvY2Vzc29yWE1MLmZvcm1hdE5vZGUoKElET01Ob2RlKXBhcmVudE5vZGUpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hY3Rpb25zL0Jhc2VOb2RlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FjdGlvbnMvQmFzZU5vZGVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2VkMzViZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FjdGlvbnMvQmFzZU5vZGVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hY3Rpb25zOyAKLSAgICAgICAgICAgICAgICAgICAgICAKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQmFzZU5vZGVBY3Rpb24gZXh0ZW5kcyBBY3Rpb24KLXsgCi0gIHB1YmxpYyBhYnN0cmFjdCBOb2RlIGdldE5vZGUoKTsKLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRVbmRvRGVzY3JpcHRpb24oKTsKLQotICBwdWJsaWMgdm9pZCBiZWdpblJlY29yZGluZygpCi0gIHsgICAgCi0gICAgTm9kZSBub2RlID0gZ2V0Tm9kZSgpOyAgCi0gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBJRE9NTm9kZSkKLSAgICB7Ci0gICAgICAoKElET01Ob2RlKW5vZGUpLmdldE1vZGVsKCkuYmVnaW5SZWNvcmRpbmcodGhpcywgZ2V0VW5kb0Rlc2NyaXB0aW9uKCkpOyAgCi0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgZW5kUmVjb3JkaW5nKCkKLSAgeyAgICAgICAgICAgICAgICAgCi0gICAgTm9kZSBub2RlID0gZ2V0Tm9kZSgpOyAKLSAgICBpZiAobm9kZSBpbnN0YW5jZW9mIElET01Ob2RlKQotICAgIHsKLSAgICAgICgoSURPTU5vZGUpbm9kZSkuZ2V0TW9kZWwoKS5lbmRSZWNvcmRpbmcodGhpcyk7ICAKLSAgICB9Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FjdGlvbnMvRWRpdE5hbWVzcGFjZXNBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWN0aW9ucy9FZGl0TmFtZXNwYWNlc0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MWViY2ZhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWN0aW9ucy9FZGl0TmFtZXNwYWNlc0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZGlhbG9ncy5FZGl0TmFtZXNwYWNlc0RpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLldTRExFZGl0b3JVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwudXRpbC5ET01OYW1lc3BhY2VJbmZvTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLnV0aWwuTmFtZXNwYWNlSW5mbzsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLXB1YmxpYyBjbGFzcyBFZGl0TmFtZXNwYWNlc0FjdGlvbiBleHRlbmRzIEFjdGlvbgotewotICBwcm90ZWN0ZWQgRGVmaW5pdGlvbiBkZWZpbml0aW9uOwotCi0gIHB1YmxpYyBFZGl0TmFtZXNwYWNlc0FjdGlvbihEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICBzZXRUZXh0KE1lc3NhZ2VzLl9VSV9FRElUX05BTUVTUEFDRVMpOyAvLyROT04tTkxTLTEkCi0gICAgdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJ1bigpCi0gIHsKLSAgICBET01OYW1lc3BhY2VJbmZvTWFuYWdlciBuYW1lc3BhY2VJbmZvTWFuYWdlciA9IG5ldyBET01OYW1lc3BhY2VJbmZvTWFuYWdlcigpOwotICAgIEVsZW1lbnQgZWxlbWVudCA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0RWxlbWVudEZvck9iamVjdChkZWZpbml0aW9uKTsKLSAgICBpZiAoZWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIExpc3QgbmFtZXNwYWNlSW5mb0xpc3QgPSBuYW1lc3BhY2VJbmZvTWFuYWdlci5nZXROYW1lc3BhY2VJbmZvTGlzdChlbGVtZW50KTsKLS8vICAgICAgTGlzdCBvbGROYW1lc3BhY2VJbmZvTGlzdCA9IE5hbWVzcGFjZUluZm8uY2xvbmVOYW1lc3BhY2VJbmZvTGlzdChuYW1lc3BhY2VJbmZvTGlzdCk7Ci0KLSAgICAgIC8vIGhlcmUgd2Ugc3RvcmUgYSBjb3B5IG9mIHRoZSBvbGQgaW5mbyBmb3IgZWFjaCBOYW1lc3BhY2VJbmZvCi0gICAgICAvLyB0aGlzIGluZm8gd2lsbCBiZSB1c2VkIGluIGNyZWF0ZVByZWZpeE1hcHBpbmcoKSB0byBmaWd1cmUgb3V0IGhvdyB0byB1cGRhdGUgdGhlIGRvY3VtZW50IAotICAgICAgLy8gaW4gcmVzcG9uc2UgdG8gdGhlc2UgY2hhbmdlcwotICAgICAgZm9yIChJdGVyYXRvciBpID0gbmFtZXNwYWNlSW5mb0xpc3QuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBOYW1lc3BhY2VJbmZvIGluZm8gPSAoTmFtZXNwYWNlSW5mbykgaS5uZXh0KCk7Ci0gICAgICAgIE5hbWVzcGFjZUluZm8gb2xkQ29weSA9IG5ldyBOYW1lc3BhY2VJbmZvKGluZm8pOwotICAgICAgICBpbmZvLnNldFByb3BlcnR5KCJvbGRDb3B5Iiwgb2xkQ29weSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIH0KLQotCSAgSVBhdGggcGF0aCA9IG5ldyBQYXRoKGRlZmluaXRpb24uZ2V0RG9jdW1lbnRCYXNlVVJJKCkpOwotICAgICAgRWRpdE5hbWVzcGFjZXNEaWFsb2cgZGlhbG9nID0gbmV3IEVkaXROYW1lc3BhY2VzRGlhbG9nKFdTRExFZGl0b3JQbHVnaW4uZ2V0U2hlbGwoKSwgIHBhdGgsIE1lc3NhZ2VzLl9VSV9FRElUX05BTUVTUEFDRVNfRElBTE9HX1RJVExFLCBkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpLCBuYW1lc3BhY2VJbmZvTGlzdCk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGludCByYyA9IGRpYWxvZy5jcmVhdGVBbmRPcGVuKCk7Ci0gICAgICBpZiAocmMgPT0gSURpYWxvZ0NvbnN0YW50cy5PS19JRCkKLSAgICAgIHsgICAgICAJCi0JCWVsZW1lbnQuc2V0QXR0cmlidXRlKCJ0YXJnZXROYW1lc3BhY2UiLCBkaWFsb2cuZ2V0VGFyZ2V0TmFtZXNwYWNlKCkpOyAvLyROT04tTkxTLTEkCi0JCQotICAgICAgICBMaXN0IG5ld0luZm9MaXN0ID0gZGlhbG9nLmdldE5hbWVzcGFjZUluZm9MaXN0KCk7Ci0gICAgICAgIG5hbWVzcGFjZUluZm9NYW5hZ2VyLnJlbW92ZU5hbWVzcGFjZUluZm8oZWxlbWVudCk7Ci0gICAgICAgIG5hbWVzcGFjZUluZm9NYW5hZ2VyLmFkZE5hbWVzcGFjZUluZm8oZWxlbWVudCwgbmV3SW5mb0xpc3QsIGZhbHNlKTsKLQotLyoKLSAgICAgICAgLy8gc2VlIGlmIHdlIG5lZWQgdG8gcmVuYW1lIGFueSBwcmVmaXhlcwotICAgICAgICBNYXAgcHJlZml4TWFwcGluZyA9IGNyZWF0ZVByZWZpeE1hcHBpbmcob2xkTmFtZXNwYWNlSW5mb0xpc3QsIG5hbWVzcGFjZUluZm9MaXN0KTsKLSAgICAgICAgaWYgKHByZWZpeE1hcHBpbmcuc2l6ZSgpID4gMCkKLSAgICAgICAgewotICAgICAgICAgIC8vbWFuYWdlci5nZXRNb2RlbCgpLmFib3V0VG9DaGFuZ2VNb2RlbCgpOwotICAgICAgICAgIFJlcGxhY2VQcmVmaXhBY3Rpb24gcmVwbGFjZVByZWZpeEFjdGlvbiA9IG5ldyBSZXBsYWNlUHJlZml4QWN0aW9uKGVsZW1lbnQsIHByZWZpeE1hcHBpbmcpOwotICAgICAgICAgIHJlcGxhY2VQcmVmaXhBY3Rpb24ucnVuKCk7Ci0gICAgICAgICAgLy9tYW5hZ2VyLmdldE1vZGVsKCkuY2hhbmdlZE1vZGVsKCk7Ci0gICAgICAgIH0KLSovICAgICAgICAKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgTWFwIGNyZWF0ZVByZWZpeE1hcHBpbmcoTGlzdCBvbGRMaXN0LCBMaXN0IG5ld0xpc3QpCi0gIHsKLSAgICBNYXAgbWFwID0gbmV3IEhhc2h0YWJsZSgpOwotCi0gICAgSGFzaHRhYmxlIG9sZFVSSVRvUHJlZml4VGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gb2xkTGlzdC5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgTmFtZXNwYWNlSW5mbyBvbGRJbmZvID0gKE5hbWVzcGFjZUluZm8pIGkubmV4dCgpOwotICAgICAgb2xkVVJJVG9QcmVmaXhUYWJsZS5wdXQob2xkSW5mby51cmksIG9sZEluZm8pOwotICAgIH0KLQotICAgIGZvciAoSXRlcmF0b3IgaSA9IG5ld0xpc3QuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIE5hbWVzcGFjZUluZm8gbmV3SW5mbyA9IChOYW1lc3BhY2VJbmZvKSBpLm5leHQoKTsKLSAgICAgIE5hbWVzcGFjZUluZm8gb2xkSW5mbyA9IChOYW1lc3BhY2VJbmZvKSBvbGRVUklUb1ByZWZpeFRhYmxlLmdldChuZXdJbmZvLnVyaSAhPSBudWxsID8gbmV3SW5mby51cmkgOiAiIik7IC8vJE5PTi1OTFMtMSQKLQotICAgICAgLy8gaWYgb2xkSW5mbyBpcyBub24gbnVsbCAuLi4gdGhlcmUncyBhIG1hdGNoaW5nIFVSSSBpbiB0aGUgb2xkIHNldAotICAgICAgLy8gd2UgY2FuIHVzZSBpdHMgcHJlZml4IHRvIGRldGVtaW5lIG91dCBtYXBwaW5nCi0gICAgICAvLwotICAgICAgLy8gaWYgb2xkSW5mbyBpcyBudWxsIC4uLiAgd2UgdXNlIHRoZSAnb2xkQ29weScgd2Ugc3Rhc2hlZCBhd2F5IAotICAgICAgLy8gYXNzdW1pbmcgdGhhdCB0aGUgdXNlciBjaGFuZ2VkIHRoZSBVUkkgYW5kIHRoZSBwcmVmaXgKLSAgICAgIGlmIChvbGRJbmZvID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIG9sZEluZm8gPSAoTmFtZXNwYWNlSW5mbykgbmV3SW5mby5nZXRQcm9wZXJ0eSgib2xkQ29weSIpOyAvLyROT04tTkxTLTEkCi0gICAgICB9Ci0KLSAgICAgIGlmIChvbGRJbmZvICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBuZXdQcmVmaXggPSBuZXdJbmZvLnByZWZpeCAhPSBudWxsID8gbmV3SW5mby5wcmVmaXggOiAiIjsgLy8kTk9OLU5MUy0xJAotICAgICAgICBTdHJpbmcgb2xkUHJlZml4ID0gb2xkSW5mby5wcmVmaXggIT0gbnVsbCA/IG9sZEluZm8ucHJlZml4IDogIiI7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgaWYgKCFvbGRQcmVmaXguZXF1YWxzKG5ld1ByZWZpeCkpCi0gICAgICAgIHsKLSAgICAgICAgICBtYXAucHV0KG9sZFByZWZpeCwgbmV3UHJlZml4KTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbWFwOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FjdGlvbnMvSVdTRExUb29sYmFyQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FjdGlvbnMvSVdTRExUb29sYmFyQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4ZmIyNWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hY3Rpb25zL0lXU0RMVG9vbGJhckFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLQotcHVibGljIGludGVyZmFjZSBJV1NETFRvb2xiYXJBY3Rpb24gZXh0ZW5kcyBJQWN0aW9uewotCXB1YmxpYyB2b2lkIHNldEVkaXRvclBhcnQoSUVkaXRvclBhcnQgZWRpdG9yUGFydCk7Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hY3Rpb25zL09wZW5Jbk5ld0VkaXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hY3Rpb25zL09wZW5Jbk5ld0VkaXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODNlMDc4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWN0aW9ucy9PcGVuSW5OZXdFZGl0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuV1NETEJhc2VBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQmFzZVNlbGVjdGlvbkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLk9wZW5PblNlbGVjdGlvbkhlbHBlcjsKLQotcHVibGljIGNsYXNzIE9wZW5Jbk5ld0VkaXRvciBleHRlbmRzIEJhc2VTZWxlY3Rpb25BY3Rpb24KLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSUQgPSAib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuT3BlbkluTmV3RWRpdG9yIjsgLy8kTk9OLU5MUy0xJAotICAKLSAgcHVibGljIE9wZW5Jbk5ld0VkaXRvcihJV29ya2JlbmNoUGFydCBwYXJ0KQotICB7Ci0gICAgc3VwZXIocGFydCk7Ci0gICAgc2V0VGV4dChNZXNzYWdlcy5fVUlfQUNUSU9OX09QRU5fSU5fTkVXX0VESVRPUik7IC8vJE5PTi1OTFMtMSQKLSAgICBzZXRJZChJRCk7Ci0gICAgc2V0SW1hZ2VEZXNjcmlwdG9yKEFTREVkaXRvclBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKCJ3c2RsX2ZpbGVfb2JqLmdpZiIpKTsgLy8kTk9OLU5MUy0xJAotICB9Ci0gIAotICBwcm90ZWN0ZWQgYm9vbGVhbiBjYWxjdWxhdGVFbmFibGVkKCkKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcnVuKCkKLSAgewotICAgIGlmIChnZXRTZWxlY3RlZE9iamVjdHMoKS5zaXplKCkgPiAwKQotICAgIHsKLSAgICAgIE9iamVjdCBvID0gZ2V0U2VsZWN0ZWRPYmplY3RzKCkuZ2V0KDApOwotICAgICAgLy8gc2hvdWxkIG1ha2UgdGhpcyBnZW5lcmljIGFuZCBiZSBhYmxlIHRvIGdldCB0aGUgb3duZXIgZnJvbSBhIGZhY2FkZSBvYmplY3QKLSAgICAgIGlmIChvIGluc3RhbmNlb2YgV1NETEJhc2VBZGFwdGVyKQotICAgICAgewotICAgICAgICBXU0RMQmFzZUFkYXB0ZXIgYmFzZUFkYXB0ZXIgPSAoV1NETEJhc2VBZGFwdGVyKW87Ci0KLSAgICAgICAgSVdvcmtiZW5jaFdpbmRvdyB3b3JrYmVuY2hXaW5kb3cgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOwotICAgICAgICBJRWRpdG9yUGFydCBlZGl0b3JQYXJ0ID0gd29ya2JlbmNoV2luZG93LmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLSAgICAgICAgT2JqZWN0IG9iamVjdCA9IGVkaXRvclBhcnQuZ2V0QWRhcHRlcihEZWZpbml0aW9uLmNsYXNzKTsKLSAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIERlZmluaXRpb24pCi0gICAgICAgIHsKLSAgICAgICAgICBFT2JqZWN0IGVPYmplY3QgPSAoRU9iamVjdCliYXNlQWRhcHRlci5nZXRUYXJnZXQoKTsKLSAgICAgICAgICBPcGVuT25TZWxlY3Rpb25IZWxwZXIgb3BlbkhlbHBlciA9IG5ldyBPcGVuT25TZWxlY3Rpb25IZWxwZXIoKERlZmluaXRpb24pb2JqZWN0KTsKLSAgICAgICAgICBvcGVuSGVscGVyLm9wZW5FZGl0b3IoZU9iamVjdCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWN0aW9ucy9SZW5hbWVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWN0aW9ucy9SZW5hbWVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmVmZDRkOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FjdGlvbnMvUmVuYW1lQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFjdGlvbnM7IAotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk91dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLkNvbXBvbmVudFJlZmVyZW5jZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMRWRpdG9yVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC52aXNpdG9yLkJpbmRpbmdSZW5hbWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnZpc2l0b3IuTWVzc2FnZVJlbmFtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudmlzaXRvci5Qb3J0VHlwZVJlbmFtZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0vL2ltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotCi1wdWJsaWMgY2xhc3MgUmVuYW1lQWN0aW9uIC8vZXh0ZW5kcyBCYXNlTm9kZUFjdGlvbiBpbXBsZW1lbnRzIFJ1bm5hYmxlCi17Ci0gIHByb3RlY3RlZCBPYmplY3QgbW9kZWxPYmplY3Q7ICAgICAgICAgICAgICAgICAKLSAgcHJvdGVjdGVkIFN0cmluZyBuZXdOYW1lOwotICBwcm90ZWN0ZWQgTm9kZSBub2RlOyAgICAgICAgICAgICAgICAgICAgICAgIAotCi0gIHB1YmxpYyBSZW5hbWVBY3Rpb24oT2JqZWN0IG1vZGVsT2JqZWN0LCBTdHJpbmcgbmV3TmFtZSkKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgdGhpcy5tb2RlbE9iamVjdCA9IG1vZGVsT2JqZWN0OwotICAgIHRoaXMubmV3TmFtZSA9IG5ld05hbWU7Ci0gICAgdGhpcy5ub2RlID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXROb2RlRm9yT2JqZWN0KG1vZGVsT2JqZWN0KTsKLSAgfSAgICAgIAotCi0gIC8qCi0gIHB1YmxpYyBOb2RlIGdldE5vZGUoKQotICB7Ci0gICAgcmV0dXJuIG5vZGU7Ci0gIH0KLSAgKi8KLQotICAvKgotICBwdWJsaWMgU3RyaW5nIGdldFVuZG9EZXNjcmlwdGlvbigpCi0gIHsKLSAgICByZXR1cm4gV1NETEVkaXRvclBsdWdpbi5nZXRXU0RMU3RyaW5nKCJfVUlfQUNUSU9OX1JFTkFNRSIpOyAgLy8kTk9OLU5MUy0xJAotICB9Ci0gICovCi0KLSAgcHVibGljIHZvaWQgcnVuKCkKLSAgewotICAgIGlmIChtb2RlbE9iamVjdCBpbnN0YW5jZW9mIE9wZXJhdGlvbikgCi0gICAgewotICAgICAgcmVuYW1lT3BlcmF0aW9uSGVscGVyKChPcGVyYXRpb24pbW9kZWxPYmplY3QpOwotICAgIH0gIAotICAgIGVsc2UgaWYgKG1vZGVsT2JqZWN0IGluc3RhbmNlb2YgSW5wdXQgfHwKLSAgICAgICAgICAgICBtb2RlbE9iamVjdCBpbnN0YW5jZW9mIE91dHB1dCB8fAotICAgICAgICAgICAgIG1vZGVsT2JqZWN0IGluc3RhbmNlb2YgRmF1bHQpCi0gICAgewotICAgICAgcmVuYW1lSU9GSGVscGVyKChXU0RMRWxlbWVudCltb2RlbE9iamVjdCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZW5hbWVNb2RlbE9iamVjdEhlbHBlcihtb2RlbE9iamVjdCwgbmV3TmFtZSk7Ci0gICAgfQotICB9IAotCi0gIHByb3RlY3RlZCB2b2lkIHJlbmFtZU1vZGVsT2JqZWN0SGVscGVyKE9iamVjdCBtb2RlbE9iamVjdCwgU3RyaW5nIHRoZU5ld05hbWUpCi0gIHsKLSAgICBFbGVtZW50IGVsZW1lbnQgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldEVsZW1lbnRGb3JPYmplY3QobW9kZWxPYmplY3QpOwotICAgIGlmIChlbGVtZW50ICE9IG51bGwpCi0gICAgeyAKLSAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCJuYW1lIiwgdGhlTmV3TmFtZSk7IC8vJE5PTi1OTFMtMSQKLSAgICB9ICAgIAotCi0gICAgaWYgKG1vZGVsT2JqZWN0IGluc3RhbmNlb2YgTWVzc2FnZSkKLSAgICB7Ci0gICAgICBNZXNzYWdlUmVuYW1lciByZW5hbWVyID0gbmV3IE1lc3NhZ2VSZW5hbWVyKChNZXNzYWdlKW1vZGVsT2JqZWN0LCB0aGVOZXdOYW1lKTsKLSAgICAgIHJlbmFtZXIudmlzaXRCaW5kaW5ncygpOwotICAgIH0KLSAgICBlbHNlIGlmIChtb2RlbE9iamVjdCBpbnN0YW5jZW9mIFBvcnRUeXBlKQotICAgIHsKLSAgICAgIFBvcnRUeXBlUmVuYW1lciByZW5hbWVyID0gbmV3IFBvcnRUeXBlUmVuYW1lcigoUG9ydFR5cGUpbW9kZWxPYmplY3QsIHRoZU5ld05hbWUpOwotICAgICAgcmVuYW1lci52aXNpdEJpbmRpbmdzKCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKG1vZGVsT2JqZWN0IGluc3RhbmNlb2YgQmluZGluZykKLSAgICB7Ci0gICAgICBCaW5kaW5nUmVuYW1lciByZW5hbWVyID0gbmV3IEJpbmRpbmdSZW5hbWVyKChCaW5kaW5nKW1vZGVsT2JqZWN0LCB0aGVOZXdOYW1lKTsKLSAgICAgIHJlbmFtZXIudmlzaXRTZXJ2aWNlcygpOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHJlbmFtZU9wZXJhdGlvbkhlbHBlcihPcGVyYXRpb24gb3BlcmF0aW9uKQotICB7Ci0gICAgcmVuYW1lTW9kZWxPYmplY3RIZWxwZXIob3BlcmF0aW9uLCBuZXdOYW1lKTsKLSAgfQotCi0KLSAgcHJvdGVjdGVkIHZvaWQgcmVuYW1lSU9GSGVscGVyKFdTRExFbGVtZW50IG9iamVjdCkKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBvYmplY3QuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOyAKLSAgICBDb21wb25lbnRSZWZlcmVuY2VVdGlsIHV0aWwgPSBuZXcgQ29tcG9uZW50UmVmZXJlbmNlVXRpbChkZWZpbml0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgTGlzdCBsaXN0ID0gbnVsbDsKLQotICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBJbnB1dCkKLSAgICB7Ci0gICAgICBsaXN0ID0gdXRpbC5nZXRCaW5kaW5nSW5wdXRzKChJbnB1dClvYmplY3QpOwotICAgIH0KLSAgICBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBPdXRwdXQpCi0gICAgewotICAgICAgbGlzdCA9IHV0aWwuZ2V0QmluZGluZ091dHB1dHMoKE91dHB1dClvYmplY3QpOwotICAgIH0KLSAgICBlbHNlIC8vIGZhdWx0Ci0gICAgewotICAgICAgbGlzdCA9IHV0aWwuZ2V0QmluZGluZ0ZhdWx0cygoRmF1bHQpb2JqZWN0KTsKLSAgICB9Ci0gICAgICAKLSAgICBpZiAobGlzdCAhPSBudWxsKQotICAgIHsKLSAgICAgIGZvciAoSXRlcmF0b3IgaSA9IGxpc3QuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgIHsKLSAgICAgICAgT2JqZWN0IGJpbmRpbmdPYmplY3QgPSBpLm5leHQoKTsKLSAgICAgICAgcmVuYW1lTW9kZWxPYmplY3RIZWxwZXIoYmluZGluZ09iamVjdCwgbmV3TmFtZSk7Ci0gICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIH0KLQotICAgIHJlbmFtZU1vZGVsT2JqZWN0SGVscGVyKG9iamVjdCwgbmV3TmFtZSk7Ci0gIH0gIAotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWN0aW9ucy9TbWFydFJlbmFtZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hY3Rpb25zL1NtYXJ0UmVuYW1lQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzYmIwNDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hY3Rpb25zL1NtYXJ0UmVuYW1lQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETEVkaXRvclV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0KLS8qCi0gKiBUaGlzIGNsYXNzIHJlbmFtZXMgJ3JlbGF0ZWQnIFdTRExFbGVtZW50cy4gIFRoZSBzY2VuYXJpbyBpcyBhcyBmb2xsb3dzOgotICogVGhlIHVzZXIgcmVuYW1lcyBhIFdTRExFbGVtZW50IGluIHRoZSBlZGl0b3IsIHNheSBhIE1lc3NhZ2UuICBUaGlzIGNsYXNzCi0gKiB3aWxsIGZpbmQgdGhlICdyZWxhdGVkJyBlbGVtZW50cyB0byB0aGlzIE1lc3NhZ2UgYW5kIHJlbmFtZSB0aGVtIGFzIHdlbGwuCi0gKiBJdCB3aWxsIG9ubHkgcmVuYW1lIGEgJ3JlbGF0ZWQnIGVsZW1lbnQgaWYgdGhlIGVsZW1lbnQgbmFtZSAob3IgcGFydCBvZiBpdCkKLSAqIGlzIGdlbmVyYXRlZC4KLSAqIAotICogU2VlIE5hbWVVdGlsLmphdmEKLSAqLwotcHVibGljIGNsYXNzIFNtYXJ0UmVuYW1lQWN0aW9uIGV4dGVuZHMgQmFzZU5vZGVBY3Rpb24gaW1wbGVtZW50cyBSdW5uYWJsZSB7Ci0JcHJvdGVjdGVkIE9iamVjdCBlbGVtZW50OwotCXByb3RlY3RlZCBTdHJpbmcgbmV3TmFtZTsKLQlwcml2YXRlIExpc3QgbWVzc2FnZVJlZmVyZW5jZXM7IC8vIFRoaXMgdmFyaWFibGUgc2hvdWxkIGJlIGFjY2Vzc2VkIGJ5IG1ldGhvZCBnZXRBbGxNZXNzYWdlUmVmZXJlbmNlcygpCi0JcHJvdGVjdGVkIE5vZGUgbm9kZTsKLQlwcml2YXRlIGJvb2xlYW4gcmVuYW1lUGFyZW50ID0gdHJ1ZTsKLQlwcml2YXRlIFN0cmluZyBvbGROYW1lOwotCQotCXB1YmxpYyBTbWFydFJlbmFtZUFjdGlvbihPYmplY3QgZWxlbWVudCwgU3RyaW5nIG5ld05hbWUpIHsKLQkJc2V0VGV4dCgiU21hcnQgUmVuYW1lIEFjdGlvbiIpOyAvLyBEbyBub3QgdHJhbnNsYXRlIC8vJE5PTi1OTFMtMSQKLQkJdGhpcy5lbGVtZW50ID0gZWxlbWVudDsKLQkJdGhpcy5uZXdOYW1lID0gbmV3TmFtZTsKLQkgICAgdGhpcy5ub2RlID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXROb2RlRm9yT2JqZWN0KGVsZW1lbnQpOwotCX0KLQkKLQlwdWJsaWMgTm9kZSBnZXROb2RlKCkgewotCSAgIHJldHVybiBub2RlOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0VW5kb0Rlc2NyaXB0aW9uKCkgewotCSAgcmV0dXJuIE1lc3NhZ2VzLl9VSV9BQ1RJT05fUkVOQU1FOyAgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQkvKgotCSAqIGJvb2xlYW4gYXJndW1lbnQgaXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgdGhlIHRvcCBsZXZlbCAocGFyZW50KSBvYmplY3Qgc2hvdWxkIGJlIHJlbmFtZWQKLQkgKiBpdHNlbGYuICBPdGhlcndpc2UsIG9ubHkgdGhlICJjaGlsZCIgb2JqZWN0cyB3aWxsIGJlIHJlbmFtZWQuCi0JICovCi0JcHVibGljIHZvaWQgcnVuKGJvb2xlYW4gcmVuYW1lUGFyZW50KSB7Ci0JCXRoaXMucmVuYW1lUGFyZW50ID0gcmVuYW1lUGFyZW50OwotCQlydW4oKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCVJlbmFtZUFjdGlvbiByZW5hbWVyOwotCQkKLQkJYmVnaW5SZWNvcmRpbmcoKTsKLQkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBPcGVyYXRpb24pIHsKLQkJCU9wZXJhdGlvbiBvcGVyYXRpb24gPSAoT3BlcmF0aW9uKSBlbGVtZW50OwotCQkJb2xkTmFtZSA9IG9wZXJhdGlvbi5nZXROYW1lKCk7Ci0KLQkJCWlmIChvbGROYW1lLmVxdWFscyhuZXdOYW1lKSkgewotCQkJCXJldHVybjsKLQkJCX0KLQkJCQotCQkJLy8gUmVuYW1lIE9wZXJhdGlvbgotCQkJaWYgKHJlbmFtZVBhcmVudCkgewotCQkJCXJlbmFtZXIgPSBuZXcgUmVuYW1lQWN0aW9uKG9wZXJhdGlvbiwgbmV3TmFtZSk7Ci0JCQkJcmVuYW1lci5ydW4oKTsKLQkJCX0KLQkJCQotCQkJLy8gUmVuYW1lIElucHV0Ci0JCQlJbnB1dCBpbnB1dCA9IG9wZXJhdGlvbi5nZXRFSW5wdXQoKTsKLQkJCS8qCi0JCQlpZiAoaW5wdXQgIT0gbnVsbCAmJiBpc0lucHV0T3V0cHV0TmFtZUdlbmVyYXRlZChvbGROYW1lLCBpbnB1dC5nZXROYW1lKCkpKSB7Ci0JCQkJcmVuYW1lciA9IG5ldyBSZW5hbWVBY3Rpb24oaW5wdXQsIG5ld05hbWUpOwotCQkJCXJlbmFtZXIucnVuKCk7Ci0JCQl9Ci0JCQkqLwotCQkJCi0JCQkvLyBSZW5hbWUgT3V0cHV0Ci0JCQlPdXRwdXQgb3V0cHV0ID0gb3BlcmF0aW9uLmdldEVPdXRwdXQoKTsKLQkJCS8qCi0JCQlpZiAob3V0cHV0ICE9IG51bGwgJiYgaXNJbnB1dE91dHB1dE5hbWVHZW5lcmF0ZWQob2xkTmFtZSwgb3V0cHV0LmdldE5hbWUoKSkpIHsKLQkJCQlyZW5hbWVyID0gbmV3IFJlbmFtZUFjdGlvbihvdXRwdXQsIG5ld05hbWUpOwotCQkJCXJlbmFtZXIucnVuKCk7Ci0JCQl9Ci0JCQkqLwotCQkJCi0JCQkvLyBSZW5hbWUgTWVzc2FnZXMgYW5kIFBhcnRzCi0JCQlNZXNzYWdlIG1zZzsKLQotCQkJLy8gSW5wdXQKLQkJCWlmIChpbnB1dCAhPSBudWxsICYmIGlucHV0LmdldEVNZXNzYWdlKCkgIT0gbnVsbCkgewotCQkJCW1zZyA9IGlucHV0LmdldEVNZXNzYWdlKCk7Ci0JCQkJU3RyaW5nIG9sZE1lc3NhZ2VOYW1lID0gIiI7IC8vJE5PTi1OTFMtMSQKLQotCQkJCWlmIChtc2cgIT0gbnVsbCkgewotCQkJCQlvbGRNZXNzYWdlTmFtZSA9IG1zZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotCQkJCQkKLQkJCQkJaWYgKGlzTWVzc2FnZU5hbWVHZW5lcmF0ZWQob2xkTWVzc2FnZU5hbWUsIG9sZE5hbWUsICJSZXF1ZXN0IikpIHsgLy8kTk9OLU5MUy0xJAotCQkJCQkJcmVuYW1lTWVzc2FnZUhlbHBlcihtc2csIGNvbXB1dGVOZXdNZXNzYWdlTmFtZShtc2csIG9sZE5hbWUsIG5ld05hbWUpKTsKLQkJCQkJCQotCQkJCQkJaWYgKG1zZy5nZXRFUGFydHMoKSAhPSBudWxsKQotCQkJCQkJCXJlbmFtZVBhcnRzSGVscGVyKG1zZy5nZXRFUGFydHMoKSwgb2xkTWVzc2FnZU5hbWUsIG1zZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpLCB0cnVlKTsJCi0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQkKLQkJCS8vIE91dHB1dAotCQkJaWYgKG91dHB1dCAhPSBudWxsICYmIG91dHB1dC5nZXRNZXNzYWdlKCkgIT0gbnVsbCkgewotCQkJCW1zZyA9IG91dHB1dC5nZXRFTWVzc2FnZSgpOwotCQkJCVN0cmluZyBvbGRNZXNzYWdlTmFtZSA9ICIiOyAvLyROT04tTkxTLTEkCi0JCQkJCi0JCQkJaWYgKG1zZyAhPSBudWxsKSB7Ci0JCQkJCW9sZE1lc3NhZ2VOYW1lID0gbXNnLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0JCQkJCQotCQkJCQlpZiAoaXNNZXNzYWdlTmFtZUdlbmVyYXRlZChvbGRNZXNzYWdlTmFtZSwgb2xkTmFtZSwgIlJlc3BvbnNlIikpIHsgLy8kTk9OLU5MUy0xJAotCQkJCQkJcmVuYW1lTWVzc2FnZUhlbHBlcihtc2csIGNvbXB1dGVOZXdNZXNzYWdlTmFtZShtc2csIG9sZE5hbWUsIG5ld05hbWUpKTsKLQkJCQkJCQotCQkJCQkJaWYgKG1zZy5nZXRFUGFydHMoKSAhPSBudWxsKQotCQkJCQkJCXJlbmFtZVBhcnRzSGVscGVyKG1zZy5nZXRFUGFydHMoKSwgb2xkTWVzc2FnZU5hbWUsIG1zZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpLCB0cnVlKTsKLQkJCQkJfQotCQkJCQkKLQkJCQl9Ci0JCQl9Ci0JCQkKLQkJCS8vIEZhdWx0cwotCQkJTGlzdCBmYXVsdHMgPSBvcGVyYXRpb24uZ2V0RUZhdWx0cygpOwotCQkJaWYgKGZhdWx0cyAhPSBudWxsKSB7Ci0JCQkJSXRlcmF0b3IgaXQgPSBmYXVsdHMuaXRlcmF0b3IoKTsKLQkJCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0JCQkJCUZhdWx0IGZhdWx0ID0gKEZhdWx0KSBpdC5uZXh0KCk7Ci0JCQkJCW1zZyA9IGZhdWx0LmdldEVNZXNzYWdlKCk7Ci0JCQkJCVN0cmluZyBvbGRNZXNzYWdlTmFtZSA9ICIiOyAvLyROT04tTkxTLTEkCi0KLQkJCQkJaWYgKG1zZyAhPSBudWxsKSB7Ci0JCQkJCQlvbGRNZXNzYWdlTmFtZSA9IG1zZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotCQkJCQkJCi0JCQkJCQlpZiAoaXNNZXNzYWdlTmFtZUdlbmVyYXRlZChvbGRNZXNzYWdlTmFtZSwgb2xkTmFtZSwgZmF1bHQuZ2V0TmFtZSgpKSkgewotCQkJCQkJCXJlbmFtZU1lc3NhZ2VIZWxwZXIobXNnLCBjb21wdXRlTmV3TWVzc2FnZU5hbWUobXNnLCBvbGROYW1lLCBuZXdOYW1lKSk7Ci0JCQkJCQkJCi0JCQkJCQkJaWYgKG1zZy5nZXRFUGFydHMoKSAhPSBudWxsKQotCQkJCQkJCQlyZW5hbWVQYXJ0c0hlbHBlcihtc2cuZ2V0RVBhcnRzKCksIG9sZE1lc3NhZ2VOYW1lLCBtc2cuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSwgdHJ1ZSk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIElucHV0KSB7Ci0JCQlJbnB1dCBpbnB1dCA9IChJbnB1dCkgZWxlbWVudDsKLQkJCW9sZE5hbWUgPSBpbnB1dC5nZXROYW1lKCk7Ci0JCQlpZiAob2xkTmFtZSA9PSBudWxsKSB7Ci0JCQkJb2xkTmFtZSA9ICIiOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0JCQkKLQkJCWlmIChvbGROYW1lLmVxdWFscyhuZXdOYW1lKSkgewotCQkJCXJldHVybjsKLQkJCX0KLQkJCQotCQkJaWYgKHJlbmFtZVBhcmVudCkgewotCQkJCWlucHV0LnNldE5hbWUobmV3TmFtZSk7Ci0JCQl9Ci0KLS8vCQkJIFJlbmFtZSBNZXNzYWdlcyBhbmQgUGFydHMKLQkJCU1lc3NhZ2UgbXNnOwotCQkJCi0JCQkvLyBJbnB1dAotCQkJaWYgKGlucHV0ICE9IG51bGwgJiYgaW5wdXQuZ2V0RU1lc3NhZ2UoKSAhPSBudWxsKSB7Ci0JCQkJbXNnID0gaW5wdXQuZ2V0RU1lc3NhZ2UoKTsKLQkJCQlTdHJpbmcgb2xkTWVzc2FnZU5hbWUgPSAiIjsgLy8kTk9OLU5MUy0xJAotCQkJCQotCQkJCWlmIChtc2cgIT0gbnVsbCkgewotCQkJCQlvbGRNZXNzYWdlTmFtZSA9IG1zZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotCQkJCQkKLQkJCQkJaWYgKGlzTWVzc2FnZU5hbWVHZW5lcmF0ZWQob2xkTWVzc2FnZU5hbWUsIG9sZE5hbWUsICJSZXF1ZXN0IikpIHsgLy8kTk9OLU5MUy0xJAotCQkJCQkJcmVuYW1lTWVzc2FnZUhlbHBlcihtc2csIGNvbXB1dGVOZXdNZXNzYWdlTmFtZShtc2csIG9sZE5hbWUsIG5ld05hbWUpKTsKLQkJCQkJCQotCQkJCQkJaWYgKG1zZy5nZXRFUGFydHMoKSAhPSBudWxsKQotCQkJCQkJCXJlbmFtZVBhcnRzSGVscGVyKG1zZy5nZXRFUGFydHMoKSwgb2xkTWVzc2FnZU5hbWUsIG1zZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpLCB0cnVlKTsJCi0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIE91dHB1dCkgewotCQkJT3V0cHV0IG91dHB1dCA9IChPdXRwdXQpIGVsZW1lbnQ7Ci0JCQlvbGROYW1lID0gb3V0cHV0LmdldE5hbWUoKTsKLQkJCWlmIChvbGROYW1lID09IG51bGwpIHsKLQkJCQlvbGROYW1lID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQkJCQotCQkJaWYgKG9sZE5hbWUuZXF1YWxzKG5ld05hbWUpKSB7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQkJCi0JCQlpZiAocmVuYW1lUGFyZW50KSB7Ci0JCQkJb3V0cHV0LnNldE5hbWUobmV3TmFtZSk7Ci0JCQl9Ci0KLS8vCQkJIFJlbmFtZSBNZXNzYWdlcyBhbmQgUGFydHMKLQkJCU1lc3NhZ2UgbXNnOwotCQkJCi0JCQkvLyBPdXRwdXQKLQkJCWlmIChvdXRwdXQgIT0gbnVsbCAmJiBvdXRwdXQuZ2V0TWVzc2FnZSgpICE9IG51bGwpIHsKLQkJCQltc2cgPSBvdXRwdXQuZ2V0RU1lc3NhZ2UoKTsKLQkJCQlTdHJpbmcgb2xkTWVzc2FnZU5hbWUgPSAiIjsgLy8kTk9OLU5MUy0xJAotCQkJCWlmIChtc2cgIT0gbnVsbCkgewotCQkJCQlvbGRNZXNzYWdlTmFtZSA9IG1zZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotCQkJCQlpZiAoaXNNZXNzYWdlTmFtZUdlbmVyYXRlZChvbGRNZXNzYWdlTmFtZSwgb2xkTmFtZSwgIlJlc3BvbnNlIikpIHsgLy8kTk9OLU5MUy0xJAotCQkJCQkJcmVuYW1lTWVzc2FnZUhlbHBlcihtc2csIGNvbXB1dGVOZXdNZXNzYWdlTmFtZShtc2csIG9sZE5hbWUsIG5ld05hbWUpKTsKLQkJCQkJCQotCQkJCQkJaWYgKG1zZy5nZXRFUGFydHMoKSAhPSBudWxsKQotCQkJCQkJCXJlbmFtZVBhcnRzSGVscGVyKG1zZy5nZXRFUGFydHMoKSwgb2xkTWVzc2FnZU5hbWUsIG1zZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpLCB0cnVlKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCQllbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgRmF1bHQpIHsKLQkJCUZhdWx0IGZhdWx0ID0gKEZhdWx0KSBlbGVtZW50OwotCQkJTWVzc2FnZSBtc2cgPSBmYXVsdC5nZXRFTWVzc2FnZSgpOwotCQkJU3RyaW5nIG9sZE1lc3NhZ2VOYW1lID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJCW9sZE5hbWUgPSBmYXVsdC5nZXROYW1lKCk7Ci0JCQkKLQkJCWlmIChvbGROYW1lLmVxdWFscyhuZXdOYW1lKSkgewotCQkJCXJldHVybjsKLQkJCX0KLQkJCQotCQkJLy8gUmVuYW1lIHRoZSBGYXVsdAotCQkJaWYgKHJlbmFtZVBhcmVudCkgewotCQkJCXJlbmFtZXIgPSBuZXcgUmVuYW1lQWN0aW9uKGZhdWx0LCBuZXdOYW1lKTsKLQkJCQlyZW5hbWVyLnJ1bigpOwotCQkJfQotCi0JCQkvLyBSZW5hbWUgdGhlIE1lc3NhZ2UgYW5kIFBhcnRzCi0JCQlpZiAobXNnICE9IG51bGwpIHsKLQkJCQlvbGRNZXNzYWdlTmFtZSA9IG1zZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotCQkJCQotCQkJCU9wZXJhdGlvbiBvcCA9IChPcGVyYXRpb24pIGZhdWx0LmVDb250YWluZXIoKTsKLQkJCQlpZiAoaXNNZXNzYWdlTmFtZUdlbmVyYXRlZChvbGRNZXNzYWdlTmFtZSwgb3AuZ2V0TmFtZSgpLCBvbGROYW1lKSkgewotCQkJCQlyZW5hbWVNZXNzYWdlSGVscGVyKG1zZywgY29tcHV0ZU5ld01lc3NhZ2VOYW1lKG1zZywgb2xkTmFtZSwgbmV3TmFtZSkpOwotCQkJCQkKLQkJCQkJaWYgKG1zZy5nZXRFUGFydHMoKSAhPSBudWxsKQotCQkJCQkJcmVuYW1lRmF1bHRQYXJ0cyhtc2cuZ2V0RVBhcnRzKCksIG9wLmdldE5hbWUoKSwgb2xkTmFtZSwgbmV3TmFtZSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBNZXNzYWdlKSB7Ci0JCQlNZXNzYWdlIG1zZyA9IChNZXNzYWdlKSBlbGVtZW50OwotCQkJb2xkTmFtZSA9IG1zZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotCQkJU3RyaW5nIG9sZE1lc3NhZ2VOYW1lID0gbXNnLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0JCQkKLQkJCWlmIChvbGROYW1lLmVxdWFscyhuZXdOYW1lKSkgewotCQkJCXJldHVybjsKLQkJCX0KLQotCQkJU3RyaW5nIG5ld01lc3NhZ2VOYW1lID0gY29tcHV0ZU5ld01lc3NhZ2VOYW1lKG1zZywgb2xkTmFtZSwgbmV3TmFtZSk7Ci0JCQlpZiAocmVuYW1lUGFyZW50KSB7Ci0JCQkJcmVuYW1lTWVzc2FnZUhlbHBlcihtc2csIG5ld01lc3NhZ2VOYW1lKTsKLQkJCX0KLQkJCQkJCi0JCQlpZiAobXNnLmdldEVQYXJ0cygpICE9IG51bGwpCi0JCQkJcmVuYW1lUGFydHNIZWxwZXIobXNnLmdldEVQYXJ0cygpLCBvbGRNZXNzYWdlTmFtZSwgbmV3TWVzc2FnZU5hbWUsIHRydWUpOwotLy8JCQkJcmVuYW1lUGFydHNIZWxwZXIobXNnLmdldEVQYXJ0cygpLCBvbGRNZXNzYWdlTmFtZSwgbXNnLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCksIHRydWUpOwotCQl9Ci0JCWVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBQYXJ0KSB7Ci0JCQlQYXJ0IHBhcnQgPSAoUGFydCkgZWxlbWVudDsKLQkJCVN0cmluZyBvbGRQYXJ0TmFtZSA9IHBhcnQuZ2V0TmFtZSgpOwotCQkJCi0JCQlpZiAob2xkUGFydE5hbWUuZXF1YWxzKG5ld05hbWUpKSB7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQkJCi0JCQlpZiAocmVuYW1lUGFyZW50KSB7Ci0JCQkJcmVuYW1lciA9IG5ldyBSZW5hbWVBY3Rpb24oZWxlbWVudCwgbmV3TmFtZSk7Ci0JCQkJcmVuYW1lci5ydW4oKTsKLQkJCX0KLQkJCQotLy8JCQlSZW5hbWUgRWxlbWVudHMKLQkJCXJlbmFtZVhTREVsZW1lbnQocGFydCwgb2xkUGFydE5hbWUsIG5ld05hbWUpOwotCQl9Ci0JCWVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBQb3J0KSB7Ci0JCQlQb3J0IHBvcnQgPSAoUG9ydCkgZWxlbWVudDsKLQkJCVN0cmluZyBvbGRQb3J0TmFtZSA9IHBvcnQuZ2V0TmFtZSgpOwotCQkJCi0JCQlpZiAocmVuYW1lUGFyZW50KSB7Ci0JCQkJcmVuYW1lciA9IG5ldyBSZW5hbWVBY3Rpb24oZWxlbWVudCwgbmV3TmFtZSk7Ci0JCQkJcmVuYW1lci5ydW4oKTsKLQkJCX0KLQotLy8JCQlSZW5hbWUgQmluZGluZwotCQkJQmluZGluZyBiaW5kaW5nID0gcG9ydC5nZXRFQmluZGluZygpOwotCQkJaWYgKGJpbmRpbmcgIT0gbnVsbCAmJiBiaW5kaW5nLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkuZXF1YWxzKG9sZFBvcnROYW1lKSkgewotCQkJCXJlbmFtZXIgPSBuZXcgUmVuYW1lQWN0aW9uKGJpbmRpbmcsIG5ld05hbWUpOwkKLQkJCQlyZW5hbWVyLnJ1bigpOwotCQkJfQotCQl9Ci0JCWVuZFJlY29yZGluZygpOwotCX0KLQkKLQkvLyBib29sZWFuIGlzSW5wdXRPdXRwdXQgc2hvdWxkIGJlIHNldCB0byB0cnVlIGlmIHRoZSBwYXJ0IGlzIGFuIElucHV0IG9yIE91dHB1dC4KLQkvLyBTZXQgZmFsc2UgaWYgdGhlIHBhcnQgaXMgYSBGYXVsdC4KLQlwcml2YXRlIHZvaWQgcmVuYW1lUGFydHNIZWxwZXIoTGlzdCBwYXJ0c0xpc3QsIFN0cmluZyBvbGRTdWJTdHJpbmcsIFN0cmluZyBuZXdTdWJTdHJpbmcsIGJvb2xlYW4gaXNJbnB1dE91dHB1dCkgewotCQlSZW5hbWVBY3Rpb24gcmVuYW1lcjsKLQkJCi0JCWlmIChwYXJ0c0xpc3QgIT0gbnVsbCkgewotCQkJSXRlcmF0b3IgcEl0ID0gcGFydHNMaXN0Lml0ZXJhdG9yKCk7Ci0JCQl3aGlsZSAocEl0Lmhhc05leHQoKSkgewotCQkJCVBhcnQgcGFydCA9IChQYXJ0KSBwSXQubmV4dCgpOwotCQkJCVN0cmluZyBvbGRQYXJ0TmFtZSA9IHBhcnQuZ2V0TmFtZSgpOwotCQkJCQotCQkJCWlmIChpc1BhcnROYW1lR2VuZXJhdGVkKG9sZFBhcnROYW1lLCBvbGRTdWJTdHJpbmcpKSB7Ci0JCQkJCVN0cmluZyBuZXdQYXJ0TmFtZTsKLQkJCQkJaWYgKGlzSW5wdXRPdXRwdXQpIHsKLQkJCQkJCW5ld1BhcnROYW1lID0gY29tcHV0ZU5ld1BhcnROYW1lKHBhcnQsIG9sZFN1YlN0cmluZywgbmV3U3ViU3RyaW5nKTsKLQkJCQkJfQotCQkJCQllbHNlIHsKLQkJCQkJCW5ld1BhcnROYW1lID0gY29tcHV0ZU5ld0ZhdWx0UGFydE5hbWUocGFydCwgb2xkU3ViU3RyaW5nLCBuZXdTdWJTdHJpbmcpOwotCQkJCQl9Ci0JCQkJCQotCQkJCQlyZW5hbWVyID0gbmV3IFJlbmFtZUFjdGlvbihwYXJ0LCBuZXdQYXJ0TmFtZSk7Ci0JCQkJCXJlbmFtZXIucnVuKCk7Ci0JCQkJCQotCQkJCQkvLyBSZW5hbWUgRWxlbWVudHMKLS8vCQkJCQlyZW5hbWVYU0RFbGVtZW50KHBhcnQsIG9sZFBhcnROYW1lLCBuZXdQYXJ0TmFtZSk7Ci0JCQkJfQotCQkJCQotCQkJCS8vIFJlbmFtZSBFbGVtZW50cwotCQkJCXJlbmFtZVhTREVsZW1lbnQocGFydCwgb2xkU3ViU3RyaW5nLCBuZXdTdWJTdHJpbmcpOwotCQkJfQotCQl9Ci0JfQotCQotCS8vIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gdXBkYXRlIHRoZSBQYXJ0IG5hbWUgd2hlbiB0aGUgRmF1bHQgbmFtZSBpcyBjaGFuZ2VkLiAgT25seQotCS8vIGNoYW5nZSB0aGUgUGFydCBuYW1lIGlmIHRoZSBwYXJ0IG5hbWUgaXMgYSBnZW5lcmF0ZWQgbmFtZS4KLQkvLyBDb21wYXJlIHRvIHJlbmFtZVBhcnRzSGVscGVyKCkuICBUaGUgcmVuYW1lUGFydHNIZWxwZXIoKSBtZXRob2QgaXMgY2FsbGVkIHdoZW4gYSBGYXVsdAotCS8vIGhhcyBOT1QgYmVlbiByZW5hbWVkLCByYXRoZXIsIGl0IGlzIHRyaWdnZXJlZCBieSBzb21lIG90aGVyIG5hbWluZyAoZXguIE9wZXJhdGlvbgotCS8vIHJlbmFtaW5nKS4gIEl0IHdpbGwgdXBkYXQgSW5wdXQvT3V0cHV0LCBBTkQgRmF1bHQgUGFydHMuCi0JcHJpdmF0ZSB2b2lkIHJlbmFtZUZhdWx0UGFydHMoTGlzdCBwYXJ0c0xpc3QsIFN0cmluZyBiYXNlTmFtZSwgU3RyaW5nIG9sZFN1YlN0cmluZywgU3RyaW5nIG5ld1N1YlN0cmluZykgewotCQlSZW5hbWVBY3Rpb24gcmVuYW1lcjsKLQkJCi0JCWlmIChwYXJ0c0xpc3QgIT0gbnVsbCkgewotCQkJSXRlcmF0b3IgcEl0ID0gcGFydHNMaXN0Lml0ZXJhdG9yKCk7Ci0JCQl3aGlsZSAocEl0Lmhhc05leHQoKSkgewotCQkJCVBhcnQgcGFydCA9IChQYXJ0KSBwSXQubmV4dCgpOwotCQkJCVN0cmluZyBvbGRQYXJ0TmFtZSA9IHBhcnQuZ2V0TmFtZSgpOwotCQkJCQotCQkJCWlmIChpc1BhcnROYW1lR2VuZXJhdGVkKG9sZFBhcnROYW1lLCBiYXNlTmFtZSwgb2xkU3ViU3RyaW5nKSkgewotCQkJCQlTdHJpbmcgbmV3UGFydE5hbWU7Ci0JCQkJCW5ld1BhcnROYW1lID0gY29tcHV0ZU5ld0ZhdWx0UGFydE5hbWUocGFydCwgb2xkU3ViU3RyaW5nLCBuZXdTdWJTdHJpbmcpOwotCQkJCQlyZW5hbWVyID0gbmV3IFJlbmFtZUFjdGlvbihwYXJ0LCBuZXdQYXJ0TmFtZSk7Ci0JCQkJCXJlbmFtZXIucnVuKCk7Ci0JCQkJCQotCQkJCQkvLyBSZW5hbWUgRWxlbWVudHMKLQkJCQkJcmVuYW1lWFNERWxlbWVudChwYXJ0LCBvbGRQYXJ0TmFtZSwgbmV3UGFydE5hbWUpOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQkKLQlwcml2YXRlIFN0cmluZyBjb21wdXRlTmV3TWVzc2FnZU5hbWUoTWVzc2FnZSBtZXNzYWdlLCBTdHJpbmcgb2xkU3ViU3RyaW5nLCBTdHJpbmcgbmV3U3ViU3RyaW5nKSB7Ci0JCVN0cmluZyBzdHJpbmcgPSBtZXNzYWdlLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0JCXJldHVybiByZXBsYWNlU2VjdGlvbldpdGhTdWJTdHJpbmcoc3RyaW5nLCBvbGRTdWJTdHJpbmcsIG5ld1N1YlN0cmluZywgMCk7CQkKLQl9Ci0JCi0vLwlwcml2YXRlIFN0cmluZyBjb21wdXRlTmV3RmF1bHRNZXNzYWdlTmFtZShNZXNzYWdlIG1lc3NhZ2UsIFN0cmluZyBvbGRTdWJTdHJpbmcsIFN0cmluZyBuZXdTdWJTdHJpbmcpIHsKLS8vCQlTdHJpbmcgc3RyaW5nID0gbWVzc2FnZS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotLy8JCXJldHVybiByZXBsYWNlU2VjdGlvbldpdGhTdWJTdHJpbmcoc3RyaW5nLCBvbGRTdWJTdHJpbmcsIG5ld1N1YlN0cmluZywgMSk7CQkKLS8vCX0KLQkKLQkvLyBNZXRob2QgZm9yIElucHV0LCBPdXRwdXQsIGFuZCBGYXVsdCBQYXJ0cwotCS8vIFNlZSBjb21wdXRlTmV3RmF1bHRQYXJ0TmFtZSgpIGZvciBjb21wYXJpc29uCi0JcHJpdmF0ZSBTdHJpbmcgY29tcHV0ZU5ld1BhcnROYW1lKFBhcnQgcGFydCwgU3RyaW5nIG9sZFN1YlN0cmluZywgU3RyaW5nIG5ld1N1YlN0cmluZykgewotCQlTdHJpbmcgc3RyaW5nID0gcGFydC5nZXROYW1lKCk7Ci0JCXJldHVybiByZXBsYWNlU2VjdGlvbldpdGhTdWJTdHJpbmcoc3RyaW5nLCBvbGRTdWJTdHJpbmcsIG5ld1N1YlN0cmluZywgMCk7CQkKLQl9Ci0JCi0JLy8gTWV0aG9kIGZvciBGYXVsdCBQYXJ0cwotCS8vIFRoaXMgbWV0aG9kIGJlaGF2ZXMgaW4gdGhlIGV4YWN0IHNhbWUgd2F5IGFzIGNvbXB1dGVOZXdQYXJ0TmFtZSgpIGV4Y2VwdCBpdCBzdGFydHMgc2VhcmNoaW5nIGZvciBhIG1hdGNoCi0JLy8gYWZ0ZXIgdGhlIGZpcnN0IGNoYXJhY3Rlci4gIFRoaXMgbWV0aG9kIGlzIGludGVuZGVkIGZvciB1c2VycyB3aG8gd2lzaCB0byByZW5hbWUgYSBnZW5lcmF0ZWQgKEZhdWx0KSBwYXJ0Ci0JLy8gd2hlcmUgdGhlIEZhdWx0IG5hbWUgaGFzIGNoYW5nZWQuICBXZSBzdGFydCBvdXIgc2VhcmNoIGFmdGVyIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYmVjYXVzZSB0aGUgZ2VuZXJhdGVkIG5hbWUKLQkvLyBvZiB0aGUgcGFydCBpcyBidWlsdCBieSBhcHBlbmRpbmcgdGhlIEZhdWx0IG5hbWUgYWZ0ZXIgdGhlIE9wZXJhdGlvbiBuYW1lLgotCXByaXZhdGUgU3RyaW5nIGNvbXB1dGVOZXdGYXVsdFBhcnROYW1lKFBhcnQgcGFydCwgU3RyaW5nIG9sZFN1YlN0cmluZywgU3RyaW5nIG5ld1N1YlN0cmluZykgewotCQlTdHJpbmcgc3RyaW5nID0gcGFydC5nZXROYW1lKCk7Ci0JCXJldHVybiByZXBsYWNlU2VjdGlvbldpdGhTdWJTdHJpbmcoc3RyaW5nLCBvbGRTdWJTdHJpbmcsIG5ld1N1YlN0cmluZywgMSk7CQkKLQl9Ci0JCi0JcHJpdmF0ZSBTdHJpbmcgcmVwbGFjZVNlY3Rpb25XaXRoU3ViU3RyaW5nKFN0cmluZyBmdWxsU3RyaW5nLCBTdHJpbmcgb2xkU3ViU3RyaW5nLCBTdHJpbmcgbmV3U3ViU3RyaW5nLCBpbnQgc3RhcnRTZWFyY2hJbmRleCkgewotCQlTdHJpbmdCdWZmZXIgZnVsbFNCID0gbmV3IFN0cmluZ0J1ZmZlcihmdWxsU3RyaW5nKTsKLQkJaW50IGluZGV4ID0gZnVsbFNCLmluZGV4T2Yob2xkU3ViU3RyaW5nLCBzdGFydFNlYXJjaEluZGV4KTsKLQkJaWYgKGluZGV4ID49IDApIHsKLQkJCXJldHVybiBmdWxsU0IucmVwbGFjZShpbmRleCwgaW5kZXggKyBvbGRTdWJTdHJpbmcubGVuZ3RoKCksIG5ld1N1YlN0cmluZykudG9TdHJpbmcoKTsKLQkJfQotCQkKLQkJcmV0dXJuICIiOyAvLyROT04tTkxTLTEkCi0JfQotCi0JLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCQotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gY29tbW9uTmFtZUdlbmVyYXRvckNoZWNrKFN0cmluZyB0YXJnZXROYW1lLCBTdHJpbmcgYmFzZU5hbWUsIFN0cmluZyBhcHBlbmROYW1lKSB7Ci0JCS8vIEZpcnN0IGNyaXRlcmlhIGlzIHRhcmdldE5hbWUgbXVzdCBzdGFydCB3aXRoIHRoZSBiYXNlTmFtZQotCQlpZiAoIXRhcmdldE5hbWUuc3RhcnRzV2l0aChiYXNlTmFtZSkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0JCQkKLQkJaWYgKGFwcGVuZE5hbWUudHJpbSgpLmxlbmd0aCgpID4gMCkgewotCQkJLy8gU2Vjb25kIGNyaXRlcmlhLiAgVGhlIGFwcGVuZGVkIG5hbWUgbXVzdCBiZSBpbiB0aGUgdGFyZ2V0TmFtZSBhbmQgYmVnaW4gcmlnaHQKLQkJCS8vIGFmdGVyIHRoZSBiYXNlTmFtZSBsb2NhdGlvbgotCQkJaWYgKCF0YXJnZXROYW1lLnN0YXJ0c1dpdGgoYXBwZW5kTmFtZSwgYmFzZU5hbWUubGVuZ3RoKCkpKQotCQkJCXJldHVybiBmYWxzZTsKLQkJfQotCQkJCi0JCS8vIFRoaXJkIGNyaXRlcmlhIChpZiBuZWNlc3NhcnkpLiAgSWYgYmFzZU5hbWUgKyBhcHBlbmROYW1lIGlzIHNob3J0ZXIgdGhhbiB0YXJnZXROYW1lLAotCQkvLyB0aGVuIHRoZXJlIG11c3QgYmUgJ2V4dHJhJyBjaGFyYWN0ZXJzIGF0IHRoZSBlbmQgb2YgdGFyZ2V0TmFtZS4gIFRoZXNlIGNoYXJhY3RlcnMgbXVzdAotCQkvLyBtYWtlIHVwIGFuIGludGVnZXIuICBJZiBub3QsIGl0IGlzIG5vdCBhIGdlbmVyYXRlZCBzdHJpbmcuCi0JCWludCBzdWJMZW5ndGggPSBiYXNlTmFtZS5sZW5ndGgoKSArIGFwcGVuZE5hbWUubGVuZ3RoKCk7Ci0JCWlmICh0YXJnZXROYW1lLmxlbmd0aCgpID4gc3ViTGVuZ3RoKSB7Ci0JCQkvLyBXZSBoYXZlICdleHRyYScgY2hhcmFjdGVycwotCQkJU3RyaW5nIGV4dHJhcyA9IHRhcmdldE5hbWUuc3Vic3RyaW5nKHN1Ykxlbmd0aCk7Ci0JCQkKLQkJCWlmKCFpc0RpZ2l0KGV4dHJhcykpCi0JCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JCQotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzT3BlcmF0aW9uTmFtZUdlbmVyYXRlZChTdHJpbmcgb3BOYW1lLCBTdHJpbmcgbmFtZSkgewotCQlyZXR1cm4gb3BOYW1lLmVxdWFscyhuYW1lKTsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzTWVzc2FnZU5hbWVHZW5lcmF0ZWQoU3RyaW5nIG1zZ05hbWUsIFN0cmluZyBiYXNlTmFtZSwgU3RyaW5nIGFwcGVuZE5hbWUpIHsKLQkJcmV0dXJuIGNvbW1vbk5hbWVHZW5lcmF0b3JDaGVjayhtc2dOYW1lLCBiYXNlTmFtZSwgYXBwZW5kTmFtZSk7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0lucHV0T3V0cHV0TmFtZUdlbmVyYXRlZChTdHJpbmcgaW5PdXROYW1lLCBTdHJpbmcgbmFtZSkgewotCQlyZXR1cm4gaW5PdXROYW1lLmVxdWFscyhuYW1lKTsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzRmF1bHROYW1lR2VuZXJhdGVkKFN0cmluZyBmYXVsdE5hbWUsIFN0cmluZyBuYW1lKSB7Ci0JCXJldHVybiBmYXVsdE5hbWUuZXF1YWxzKG5hbWUpOwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNQYXJ0TmFtZUdlbmVyYXRlZChTdHJpbmcgcGFydE5hbWUsIFN0cmluZyBiYXNlTmFtZSkgewotCQlyZXR1cm4gY29tbW9uTmFtZUdlbmVyYXRvckNoZWNrKHBhcnROYW1lLCBiYXNlTmFtZSwgIiIpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXByaXZhdGUgYm9vbGVhbiBpc1BhcnROYW1lR2VuZXJhdGVkKFN0cmluZyBwYXJ0TmFtZSwgU3RyaW5nIGJhc2VOYW1lLCBTdHJpbmcgYXBwZW5kTmFtZSkgewotCQlyZXR1cm4gY29tbW9uTmFtZUdlbmVyYXRvckNoZWNrKHBhcnROYW1lLCBiYXNlTmFtZSwgYXBwZW5kTmFtZSk7Ci0JfQotCQotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNEaWdpdChTdHJpbmcgc3RyaW5nKSB7Ci0JCWJvb2xlYW4gclZhbHVlID0gdHJ1ZTsKLQkJY2hhcltdIGNoYXJzID0gc3RyaW5nLnRvQ2hhckFycmF5KCk7Ci0JCi0JCWZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBjaGFycy5sZW5ndGg7IGluZGV4KyspIHsKLQkJCWlmICghQ2hhcmFjdGVyLmlzRGlnaXQoY2hhcnNbaW5kZXhdKSkgewotCQkJCXJWYWx1ZSA9IGZhbHNlOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCQotCQlyZXR1cm4gclZhbHVlOwotCX0KLQkKLQkvKgotCSAqIFRoZSBmb2xsb3dpbmcgY2xhc3NlcyBhaWQgaW4gcmVuYW1pbmcgYSBtZXNzYWdlCi0JICovCi0JcHJpdmF0ZSB2b2lkIHJlbmFtZU1lc3NhZ2VIZWxwZXIoTWVzc2FnZSBtc2csIFN0cmluZyBuZXdOYW1lKSB7Ci0JCUxpc3QgbWVzc2FnZVJlZnMgPSBnZXRSZWZlcmVuY2luZ01lc3NhZ2VSZWZlcmVuY2VzKG1zZywgZ2V0QWxsTWVzc2FnZVJlZmVyZW5jZXMoKSk7Ci0JCQotCQlSZW5hbWVBY3Rpb24gcmVuYW1lciA9IG5ldyBSZW5hbWVBY3Rpb24obXNnLCBuZXdOYW1lKTsKLQkJcmVuYW1lci5ydW4oKTsKLQkJCi0JCUl0ZXJhdG9yIGl0ZXJhdG9yID0gbWVzc2FnZVJlZnMuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkgewotCQkJTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmZXJlbmNlID0gKE1lc3NhZ2VSZWZlcmVuY2UpIGl0ZXJhdG9yLm5leHQoKTsKLQkJCW1lc3NhZ2VSZWZlcmVuY2Uuc2V0RU1lc3NhZ2UobXNnKTsKLQkJfQotCX0KLQkKLQlwcml2YXRlIExpc3QgZ2V0UmVmZXJlbmNpbmdNZXNzYWdlUmVmZXJlbmNlcyhNZXNzYWdlIG1zZywgTGlzdCBtZXNzYWdlUmVmcykgewotCQlWZWN0b3IgcmVmZXJlbmNlc1ZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLQkJUU5hbWUgbWVzc2FnZVFOYW1lID0gbXNnLmdldFFOYW1lKCk7Ci0JCUl0ZXJhdG9yIGl0ZXJhdG9yID0gbWVzc2FnZVJlZnMuaXRlcmF0b3IoKTsKLQkJCi0JCXdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpIHsKLQkJCU1lc3NhZ2VSZWZlcmVuY2UgbWVzc2FnZVJlZmVyZW5jZSA9IChNZXNzYWdlUmVmZXJlbmNlKSBpdGVyYXRvci5uZXh0KCk7Ci0JCQlpZiAobWVzc2FnZVJlZmVyZW5jZS5nZXRFTWVzc2FnZSgpICE9IG51bGwgJiYgbWVzc2FnZVFOYW1lLmVxdWFscyhtZXNzYWdlUmVmZXJlbmNlLmdldEVNZXNzYWdlKCkuZ2V0UU5hbWUoKSkpIHsKLQkJCQlyZWZlcmVuY2VzVmVjdG9yLmFkZEVsZW1lbnQobWVzc2FnZVJlZmVyZW5jZSk7Ci0JCQl9Ci0JCX0KLQkJCi0JCXJldHVybiByZWZlcmVuY2VzVmVjdG9yOwotCX0KLQkKLQlwcml2YXRlIExpc3QgZ2V0QWxsTWVzc2FnZVJlZmVyZW5jZXMoKSB7Ci0JCWlmIChtZXNzYWdlUmVmZXJlbmNlcyA9PSBudWxsKSB7Ci0JCQltZXNzYWdlUmVmZXJlbmNlcyA9IG5ldyBWZWN0b3IoKTsKLQkJCURlZmluaXRpb24gZGVmaW5pdGlvbiA9ICgoV1NETEVsZW1lbnQpIGVsZW1lbnQpLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLQkJCUxpc3QgcG9ydFR5cGVzID0gZGVmaW5pdGlvbi5nZXRFUG9ydFR5cGVzKCk7Ci0JCQotCQkJaWYgKHBvcnRUeXBlcyAhPSBudWxsKSB7Ci0JCQkJSXRlcmF0b3IgcG9ydFR5cGVJdGVyYXRvciA9IHBvcnRUeXBlcy5pdGVyYXRvcigpOwotCQkJCXdoaWxlIChwb3J0VHlwZUl0ZXJhdG9yLmhhc05leHQoKSkgewotCQkJCQlMaXN0IG9wZXJhdGlvbnNMaXN0ID0gKChQb3J0VHlwZSkgcG9ydFR5cGVJdGVyYXRvci5uZXh0KCkpLmdldEVPcGVyYXRpb25zKCk7Ci0JCQkJCQotCQkJCQlpZiAob3BlcmF0aW9uc0xpc3QgIT0gbnVsbCkgewotCQkJCQkJSXRlcmF0b3Igb3BlcmF0aW9uc0l0ZXJhdG9yID0gb3BlcmF0aW9uc0xpc3QuaXRlcmF0b3IoKTsKLQkJCQkJCXdoaWxlIChvcGVyYXRpb25zSXRlcmF0b3IuaGFzTmV4dCgpKSB7Ci0JCQkJCQkJbWVzc2FnZVJlZmVyZW5jZXMuYWRkQWxsKGdldEFsbE1lc3NhZ2VSZWZlcmVuY2VzKChPcGVyYXRpb24pIG9wZXJhdGlvbnNJdGVyYXRvci5uZXh0KCkpKTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCQkKLQkJcmV0dXJuIG1lc3NhZ2VSZWZlcmVuY2VzOwotCX0KLQkKLQlwcml2YXRlIFZlY3RvciBnZXRBbGxNZXNzYWdlUmVmZXJlbmNlcyhPcGVyYXRpb24gb3BlcmF0aW9uKSB7Ci0JCVZlY3RvciBpb2ZzID0gbmV3IFZlY3RvcigpOwotCQlJdGVyYXRvciBpdCA9IG9wZXJhdGlvbi5nZXRFRmF1bHRzKCkuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJaW9mcy5hZGRFbGVtZW50KGl0Lm5leHQoKSk7Ci0JCX0KLQkJCi0JCWlmIChpb2ZzID09IG51bGwpCi0JCQlpb2ZzID0gbmV3IFZlY3RvcigpOwotCQkKLQkJaWYgKG9wZXJhdGlvbi5nZXRFSW5wdXQoKSAhPSBudWxsKQotCQkJaW9mcy5hZGRFbGVtZW50KG9wZXJhdGlvbi5nZXRFSW5wdXQoKSk7Ci0JCQotCQlpZiAob3BlcmF0aW9uLmdldEVPdXRwdXQoKSAhPSBudWxsKQotCQkJaW9mcy5hZGRFbGVtZW50KG9wZXJhdGlvbi5nZXRFT3V0cHV0KCkpOwotCQkKLQkJcmV0dXJuIGlvZnM7Ci0JfQotCQotCXByaXZhdGUgdm9pZCByZW5hbWVYU0RFbGVtZW50KFBhcnQgcGFydCwgU3RyaW5nIG9sZFhTRE5hbWUsIFN0cmluZyBuZXdYU0ROYW1lKSB7Ci0JCVhTREVsZW1lbnREZWNsYXJhdGlvbiBlbGVtZW50RGVjbGFyYXRpb24gPSBwYXJ0LmdldEVsZW1lbnREZWNsYXJhdGlvbigpOwotCQlpZiAoZWxlbWVudERlY2xhcmF0aW9uICE9IG51bGwgJiYgZWxlbWVudERlY2xhcmF0aW9uLmdldE5hbWUoKS5zdGFydHNXaXRoKG9sZFhTRE5hbWUpKSB7Ci0JCQlyZW5hbWVFbGVtZW50RGVjbGFyYXRpb25IZWxwZXIoZWxlbWVudERlY2xhcmF0aW9uLCBvbGRYU0ROYW1lLCBuZXdYU0ROYW1lKTsKLQkJCQotCQkJLy8gSGVyZSB3ZSByZW5hbWUgdGhlIGVsZW1lbnQgcmVmZXJlbmNlLgotCQkJLy8KLQkJCVFOYW1lIHFuYW1lID0gbmV3IFFOYW1lKHBhcnQuZ2V0RWxlbWVudE5hbWUoKS5nZXROYW1lc3BhY2VVUkkoKSwgbmV3WFNETmFtZSk7Ci0JCQlwYXJ0LnNldEVsZW1lbnROYW1lKHFuYW1lKTsJCQkKLQkJfQotCQllbHNlIGlmIChlbGVtZW50RGVjbGFyYXRpb24gIT0gbnVsbCAmJiBlbGVtZW50IGluc3RhbmNlb2YgT3BlcmF0aW9uKSB7Ci0JCQlPcGVyYXRpb24gb3BlcmF0aW9uID0gKE9wZXJhdGlvbikgZWxlbWVudDsKLQkJCWlmIChBZGRCYXNlUGFyYW1ldGVyQ29tbWFuZC5nZXRQYXJhbWV0ZXJQYXR0ZXJuKG9wZXJhdGlvbiwgdHJ1ZSkgPT0gQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuUEFSVF9FTEVNRU5UX1NFUV9FTEVNRU5UKSB7Ci0JCQkJaWYgKGVsZW1lbnREZWNsYXJhdGlvbi5nZXROYW1lKCkuZXF1YWxzKG9sZE5hbWUpKSB7Ci0JCQkJCXJlbmFtZUVsZW1lbnREZWNsYXJhdGlvbkhlbHBlcihlbGVtZW50RGVjbGFyYXRpb24sIG9sZE5hbWUsIG5ld05hbWUpOwotCQkJCQkKLQkJCQkJLy8gSGVyZSB3ZSByZW5hbWUgdGhlIGVsZW1lbnQgcmVmZXJlbmNlLgotCQkJCQkvLwotCQkJCQlRTmFtZSBxbmFtZSA9IG5ldyBRTmFtZShwYXJ0LmdldEVsZW1lbnROYW1lKCkuZ2V0TmFtZXNwYWNlVVJJKCksIG5ld05hbWUpOwotCQkJCQlwYXJ0LnNldEVsZW1lbnROYW1lKHFuYW1lKTsJCi0JCQkJfQotCQkJfQotCQl9Ci0JfQotCQotCXByaXZhdGUgdm9pZCByZW5hbWVFbGVtZW50RGVjbGFyYXRpb25IZWxwZXIoWFNERWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnREZWNsYXJhdGlvbiwgU3RyaW5nIG9sZFhTRE5hbWUsIFN0cmluZyBuZXdYU0ROYW1lKSB7Ci0JCWlmIChlbGVtZW50RGVjbGFyYXRpb24gIT0gbnVsbCAmJiBlbGVtZW50RGVjbGFyYXRpb24uZ2V0TmFtZSgpLnN0YXJ0c1dpdGgob2xkWFNETmFtZSkpIHsKLQkJCVN0cmluZyBuZXdFbGVtZW50TmFtZSA9IHJlcGxhY2VTZWN0aW9uV2l0aFN1YlN0cmluZyhlbGVtZW50RGVjbGFyYXRpb24uZ2V0TmFtZSgpLCBvbGRYU0ROYW1lLCBuZXdYU0ROYW1lLCAwKTsKLQkJCWVsZW1lbnREZWNsYXJhdGlvbi5zZXROYW1lKG5ld0VsZW1lbnROYW1lKTsKLQkJfQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL1dTRExBZGFwdGVyRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9XU0RMQWRhcHRlckZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzRhOGI3Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL1dTRExBZGFwdGVyRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTczICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVyczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk91dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUEFkZHJlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBBZGRyZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMUJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExQmluZGluZ01lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFFbmRQb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFJbXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMU1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExUGFyYW1ldGVyRm9yQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMVBhcmFtZXRlckZvckVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExUGFyYW1ldGVyRm9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuc3BlY2lhbGl6ZWQuVzExQWRkcmVzc0V4dGVuc2liaWxpdHlFbGVtZW50QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5zcGVjaWFsaXplZC5XMTFFeHRlbnNpYmlsaXR5RWxlbWVudEFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQXR0cmlidXRlVXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb25jcmV0ZUNvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUltcGwKLXsKLSAgc3RhdGljIFdTRExBZGFwdGVyRmFjdG9yeSBpbnN0YW5jZTsKLSAgCi0gIHB1YmxpYyBzdGF0aWMgV1NETEFkYXB0ZXJGYWN0b3J5IGdldEluc3RhbmNlKCkKLSAgewotICAgIGlmIChpbnN0YW5jZSA9PSBudWxsKQotICAgIHsKLSAgICAgIGluc3RhbmNlID0gbmV3IFdTRExBZGFwdGVyRmFjdG9yeSgpOwotICAgIH0gIAotICAgIHJldHVybiBpbnN0YW5jZTsKLSAgfQotICAKLSAgcHVibGljIEFkYXB0ZXIgY3JlYXRlQWRhcHRlcihOb3RpZmllciB0YXJnZXQpCi0gIHsKLQkgIEFkYXB0ZXIgYWRhcHRlciA9IG51bGw7Ci0KLQkgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBEZWZpbml0aW9uKSB7Ci0JCSAgYWRhcHRlciA9IG5ldyBXMTFEZXNjcmlwdGlvbigpOwotCSAgfQotCSAgZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgU2VydmljZSkgewotCQkgIGFkYXB0ZXIgPSBuZXcgVzExU2VydmljZSgpOwotCSAgfQotCSAgZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgQmluZGluZykgewotCQkgIGFkYXB0ZXIgPSBuZXcgVzExQmluZGluZygpOwotCSAgfQotICAgICAgZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgQmluZGluZ09wZXJhdGlvbikgewotICAgICAgICAgIGFkYXB0ZXIgPSBuZXcgVzExQmluZGluZ09wZXJhdGlvbigpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgQmluZGluZ0lucHV0IHx8Ci0gICAgICAgICAgICAgICB0YXJnZXQgaW5zdGFuY2VvZiBCaW5kaW5nT3V0cHV0IHx8Ci0gICAgICAgICAgICAgICB0YXJnZXQgaW5zdGFuY2VvZiBCaW5kaW5nRmF1bHQpCi0gICAgICB7ICAKLQkJICBhZGFwdGVyID0gbmV3IFcxMUJpbmRpbmdNZXNzYWdlUmVmZXJlbmNlKCk7Ci0JICB9Ci0JICBlbHNlIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBQb3J0KSB7Ci0JCSAgYWRhcHRlciA9IG5ldyBXMTFFbmRQb2ludCgpOwotCSAgfQotICAgICAgZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgUG9ydFR5cGUpIHsKLSAgICAgICAgICBhZGFwdGVyID0gbmV3IFcxMUludGVyZmFjZSgpOwotICAgICAgfSAgCi0JICBlbHNlIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBPcGVyYXRpb24pIHsKLQkJICBhZGFwdGVyID0gbmV3IFcxMU9wZXJhdGlvbigpOwotCSAgfQotCSAgZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgTWVzc2FnZVJlZmVyZW5jZSkKLQkgIHsKLQkgICAgaW50IGtpbmQgPSAtMTsKLQkgICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIElucHV0KQotCSAgICB7Ci0JICAgICAga2luZCA9IElNZXNzYWdlUmVmZXJlbmNlLktJTkRfSU5QVVQ7Ci0JICAgIH0KLQkgICAgZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgT3V0cHV0KQotCSAgICB7Ci0JICAgICAga2luZCA9IElNZXNzYWdlUmVmZXJlbmNlLktJTkRfT1VUUFVUOwotCSAgICB9Ci0JICAgIGVsc2UgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEZhdWx0KQotCSAgICB7Ci0JICAgICAga2luZCA9IElNZXNzYWdlUmVmZXJlbmNlLktJTkRfRkFVTFQ7Ci0JICAgIH0KLQkgICAgYWRhcHRlciA9IG5ldyBXMTFNZXNzYWdlUmVmZXJlbmNlKGtpbmQpOwotCSAgfQotCSAgZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgSW1wb3J0KSB7Ci0JCSAgYWRhcHRlciA9IG5ldyBXMTFJbXBvcnQoKTsKLQkgIH0KLQkgIGVsc2UgaWYgKHRhcmdldCBpbnN0YW5jZW9mIFhTRFNjaGVtYSkgewotCQkgIGFkYXB0ZXIgPSBuZXcgVzExVHlwZSgpOwotCSAgfQotCSAgZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgTWVzc2FnZSkgewotCQkgIGFkYXB0ZXIgPSBuZXcgVzExTWVzc2FnZSgpOwotCSAgfQotICAgICAgZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgUGFydCkKLSAgICAgIHsKLSAgICAJICBhZGFwdGVyID0gbmV3IFcxMVBhcmFtZXRlckZvclBhcnQoKTsgCi0gICAgICB9Ci0gICAgICBlbHNlIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBYU0RFbGVtZW50RGVjbGFyYXRpb24pCi0gICAgICB7Ci0gICAgICAgICAgYWRhcHRlciA9IG5ldyBXMTFQYXJhbWV0ZXJGb3JFbGVtZW50KCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBYU0RBdHRyaWJ1dGVVc2UpCi0gICAgICB7Ci0gICAgICAgICAgYWRhcHRlciA9IG5ldyBXMTFQYXJhbWV0ZXJGb3JBdHRyaWJ1dGUoKTsKLSAgICAgIH0gICAgICAgIAotICAgICAgZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgTWVzc2FnZSB8fCAKLSAgICAgICAgICAgICAgIHRhcmdldCBpbnN0YW5jZW9mIFhTRENvbmNyZXRlQ29tcG9uZW50KQotICAgICAgewotICAgICAgICAvLyBub3Qgd2Ugb25seSBuZWVkIHRoaXMgYWRhcHRlciB0byBzZXJ2ZSBhcyBhbiAnb3RoZXJUaGluZ3NUb0xpc3RlblRvJyBhZGFwdGVyCi0gICAgICAgIC8vIGZvciB1c2UgYnkgdGhlIFcxMU1lc3NhZ2VSZWZlcmVuY2Ugd2hlbiBjb21wdXRpbmcgYSBwYXJhbWV0ZXIgbGlzdAotICAgICAgICBhZGFwdGVyID0gbmV3IFdTRExCYXNlQWRhcHRlcigpOwotICAgICAgfSAgCi0gICAgICBlbHNlIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBTT0FQQWRkcmVzcyB8fAotICAgICAgICAgICAgICAgdGFyZ2V0IGluc3RhbmNlb2YgSFRUUEFkZHJlc3MpCi0gICAgICB7Ci0gICAgICAgIC8vIFRPRE8uLiB3ZSBuZWVkIHRvIGVuYWJsZSB0aGUgZmFjdG9yeSB0byBkZWxlZ2F0ZSB0byBleHRlbnNpb24gbGFuZ3VhZ2UgYWRhcHRlciBmYWN0b3JpZXMKLSAgICAgICAgLy8gdGhlcmUgc2hvdWxkIGJlIG5vIHJlZmVyZW5jZXMgdG8gU09BUCBvciBIVFRQIHN0dWZmIGZyb20gd2l0aGluIHRoaXMgY2xhc3MKLSAgICAgICAgLy8KLSAgICAgICAgYWRhcHRlciA9IG5ldyBXMTFBZGRyZXNzRXh0ZW5zaWJpbGl0eUVsZW1lbnRBZGFwdGVyKCk7ICAgICAgICAKLSAgICAgIH0gICAgICAgICAKLSAgICAgIGVsc2UgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEV4dGVuc2liaWxpdHlFbGVtZW50KQotICAgICAgewotICAgICAgICBhZGFwdGVyID0gbmV3IFcxMUV4dGVuc2liaWxpdHlFbGVtZW50QWRhcHRlcigpOwotICAgICAgfSAgCi0JICBpZiAoYWRhcHRlciA9PSBudWxsKQotCSAgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk5PIEFEQVBURVIgQ1JFQVRFRCBGT1IgIiArIHRhcmdldCk7ICAgIC8vJE5PTi1OTFMtMSQKLQkgICAgVGhyZWFkLmR1bXBTdGFjaygpOwotCSAgfQotCi0JICByZXR1cm4gYWRhcHRlcjsJCSAgCi0gIH0KLSAgCi0gIHB1YmxpYyBBZGFwdGVyIGFkYXB0KE5vdGlmaWVyIHRhcmdldCkKLSAgewotICAgIHJldHVybiBhZGFwdCh0YXJnZXQsIHRoaXMpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL1dTRExCYXNlQWRhcHRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9XU0RMQmFzZUFkYXB0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTA1MzJkYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL1dTRExCYXNlQWRhcHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjE3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVyczsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVySW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMuVzExRGVsZXRlQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcy5XMTFSZW5hbWVDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLm1vZGVsLklBY3Rpb25Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklBU0RPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQVNET2JqZWN0TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUuSVRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETEFkYXB0ZXJGYWN0b3J5SGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5FbGVtZW50SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbmNyZXRlQ29tcG9uZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMQmFzZUFkYXB0ZXIgZXh0ZW5kcyBBZGFwdGVySW1wbCBpbXBsZW1lbnRzIElBU0RPYmplY3QsIElUcmVlRWxlbWVudCwgSUFjdGlvblByb3ZpZGVyIHsKLQlwcm90ZWN0ZWQgTGlzdCBsaXN0ZW5lckxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JcHJvdGVjdGVkIFdTRExCYXNlQWRhcHRlciBvd25lcjsKLQkKLQlwdWJsaWMgdm9pZCByZWdpc3Rlckxpc3RlbmVyKElBU0RPYmplY3RMaXN0ZW5lciBsaXN0ZW5lcikgewotICAgICAgIGlmICghbGlzdGVuZXJMaXN0LmNvbnRhaW5zKGxpc3RlbmVyKSkKLSAgICAgICB7Ci0JCSBsaXN0ZW5lckxpc3QuYWRkKGxpc3RlbmVyKTsKLSAgICAgICB9ICAKLQl9Ci0KLQlwdWJsaWMgdm9pZCB1bnJlZ2lzdGVyTGlzdGVuZXIoSUFTRE9iamVjdExpc3RlbmVyIGxpc3RlbmVyKSB7Ci0JCWxpc3RlbmVyTGlzdC5yZW1vdmUobGlzdGVuZXIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHBvcHVsYXRlQWRhcHRlckxpc3QoTGlzdCBub3RpZmllckxpc3QsIExpc3QgYWRhcHRlckxpc3QpIHsKLQkJZm9yIChJdGVyYXRvciBpID0gbm90aWZpZXJMaXN0Lml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgICB7Ci0gICAgICAgICAgICBPYmplY3QgbyA9IGkubmV4dCgpOwotICAgICAgICAgICAgaWYgKG8gaW5zdGFuY2VvZiBOb3RpZmllcikKLSAgICAgICAgICAgIHsgIAotCQkJTm90aWZpZXIgY29tcG9uZW50ID0gKE5vdGlmaWVyKW87ICAgICAgCi0JCQlBZGFwdGVyIGFkYXB0ZXIgPSBXU0RMQWRhcHRlckZhY3RvcnlIZWxwZXIuZ2V0SW5zdGFuY2UoKS5hZGFwdChjb21wb25lbnQpOwotCQkJYWRhcHRlckxpc3QuYWRkKGFkYXB0ZXIpOwotCQkJCi0JCQlpZiAoYWRhcHRlciBpbnN0YW5jZW9mIFdTRExCYXNlQWRhcHRlcikgewotCQkJCSgoV1NETEJhc2VBZGFwdGVyKSBhZGFwdGVyKS5zZXRPd25lcih0aGlzKTsKLQkJCX0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJwb3B1bGF0ZUFkYXB0ZXJMaXN0RXJyb3IiICsgbyk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgIH0gIAotCQl9Ci0JfQotCQotCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUFkYXB0ZXIoTm90aWZpZXIgbm90aWZpZXIpIHsKLQkJQWRhcHRlciBhZGFwdGVyID0gV1NETEFkYXB0ZXJGYWN0b3J5SGVscGVyLmdldEluc3RhbmNlKCkuYWRhcHQobm90aWZpZXIpOwotCi0JCWlmIChhZGFwdGVyIGluc3RhbmNlb2YgV1NETEJhc2VBZGFwdGVyICYmICgoV1NETEJhc2VBZGFwdGVyKSBhZGFwdGVyKS5vd25lciA9PSBudWxsKSB7Ci0JCQkoKFdTRExCYXNlQWRhcHRlcikgYWRhcHRlcikuc2V0T3duZXIodGhpcyk7Ci0JCX0KLQkJCi0JCXJldHVybiBhZGFwdGVyOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRPd25lcihXU0RMQmFzZUFkYXB0ZXIgb3duZXIpIHsKLQkJdGhpcy5vd25lciA9IG93bmVyOwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBpc0FkYXB0ZXJGb3JUeXBlKE9iamVjdCB0eXBlKSB7Ci0JCXJldHVybiB0eXBlID09IFdTRExBZGFwdGVyRmFjdG9yeUhlbHBlci5nZXRJbnN0YW5jZSgpLmdldFdTRExBZGFwdGVyRmFjdG9yeSgpOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nW10gZ2V0QWN0aW9ucyhPYmplY3Qgb2JqZWN0KSB7Ci0JCVN0cmluZ1tdIGFjdGlvbklEcyA9IG5ldyBTdHJpbmdbMF07Ci0JCQotCQlyZXR1cm4gYWN0aW9uSURzOwotCX0KLSAgICAKLQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBtc2cpCi0JewotCSAgc3VwZXIubm90aWZ5Q2hhbmdlZChtc2cpOwotICAgICAgdHJ5Ci0gICAgICB7Ci0JICAgIG5vdGlmeUxpc3RlbmVycyh0aGlzLCBudWxsKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsgICAgICAgIAotICAgICAgICAvLyBUT0RPLi4uIGV4Y2VwdGlvbiBzaG91bGQgbmV2ZXIgaGFwcGVuIGhlcmUuLiBidXQgdGhleSBkbwotICAgICAgICAvLyBkdW1waW5nIHRoZSBzdGFjayB0byB0aGUgY29uc29sZSB1bnRpbCB3ZSB0cmFjayB0aGVzZSBkb3duCi0gICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICB9Ci0JfQotCQotCXByb3RlY3RlZCB2b2lkIG5vdGlmeUxpc3RlbmVycyhPYmplY3QgY2hhbmdlZE9iamVjdCwgU3RyaW5nIHByb3BlcnR5KQotCXsKLQkgIExpc3QgY2xvbmVkTGlzdGVuZXJMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCSAgY2xvbmVkTGlzdGVuZXJMaXN0LmFkZEFsbChsaXN0ZW5lckxpc3QpOwotCSAgZm9yIChJdGVyYXRvciBpID0gY2xvbmVkTGlzdGVuZXJMaXN0Lml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0JICB7Ci0JICAgIElBU0RPYmplY3RMaXN0ZW5lciBsaXN0ZW5lciA9IChJQVNET2JqZWN0TGlzdGVuZXIpaS5uZXh0KCk7Ci0JICAgIGxpc3RlbmVyLnByb3BlcnR5Q2hhbmdlZCh0aGlzLCBwcm9wZXJ0eSk7Ci0JICB9ICAgICAgCi0JfQotCQotCXB1YmxpYyBDb21tYW5kIGdldFNldE5hbWVDb21tYW5kKFN0cmluZyBuZXdOYW1lKSB7Ci0JCXJldHVybiBuZXcgVzExUmVuYW1lQ29tbWFuZCh0aGlzLCBuZXdOYW1lKTsKLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gaXNSZWFkT25seSgpIHsKLQkJRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gbnVsbDsKLQkJdHJ5CXsKLQkJCUlFZGl0b3JQYXJ0IGVkaXRvclBhcnQgPSBudWxsOwotCQkJSVdvcmtiZW5jaFdpbmRvdyB3aW5kb3cgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOwotCQkJaWYgKHdpbmRvdyAhPSBudWxsKQl7Ci0JCQkJSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IHdpbmRvdy5nZXRBY3RpdmVQYWdlKCk7Ci0JCQkJaWYgKHBhZ2UgIT0gbnVsbCkgewotCQkJCQllZGl0b3JQYXJ0ID0gcGFnZS5nZXRBY3RpdmVFZGl0b3IoKTsKLQkJCQl9Ci0JCQl9Ci0JCQlpZiAodGFyZ2V0IGluc3RhbmNlb2YgV1NETEVsZW1lbnQpIHsKLQkJCQlkZWZpbml0aW9uID0gKChXU0RMRWxlbWVudCkgdGFyZ2V0KS5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0JCQl9Ci0JCQlpZiAoZWRpdG9yUGFydCA9PSBudWxsKSB7Ci0JCQkJcmV0dXJuIGZhbGxCYWNrQ2hlY2tJc1JlYWRPbmx5KCk7Ci0JCQl9Ci0KLQkJCURlZmluaXRpb24gZWRpdG9yRGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKSBlZGl0b3JQYXJ0LmdldEFkYXB0ZXIoRGVmaW5pdGlvbi5jbGFzcyk7Ci0JCQlpZiAoZGVmaW5pdGlvbiAhPSBudWxsICYmIGRlZmluaXRpb24gPT0gZWRpdG9yRGVmaW5pdGlvbikgewotCQkJCXJldHVybiBmYWxzZTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCXJldHVybiBmYWxsQmFja0NoZWNrSXNSZWFkT25seSgpOwotCQkJfQotCQl9Ci0JCWNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0KLQkJfQotCQkKLQkJcmV0dXJuIHRydWU7Ci0JfQotCQotCXByaXZhdGUgYm9vbGVhbiBmYWxsQmFja0NoZWNrSXNSZWFkT25seSgpIHsKLQkJRWxlbWVudCBlbGVtZW50ID0gbnVsbDsKLQkJaWYgKHRhcmdldCBpbnN0YW5jZW9mIFdTRExFbGVtZW50KSB7Ci0JCQllbGVtZW50ID0gKChXU0RMRWxlbWVudCkgdGFyZ2V0KS5nZXRFbGVtZW50KCk7Ci0JCX0KLQkJZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgWFNEQ29uY3JldGVDb21wb25lbnQpIHsKLQkJCWVsZW1lbnQgPSAoKFhTRENvbmNyZXRlQ29tcG9uZW50KSB0YXJnZXQpLmdldEVsZW1lbnQoKTsKLQkJfQotCQkKLQkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBJRE9NTm9kZSB8fCBlbGVtZW50IGluc3RhbmNlb2YgRWxlbWVudEltcGwpIHsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0gIAotCXB1YmxpYyBPYmplY3QgZ2V0T3duZXIoKSB7Ci0JCXJldHVybiBvd25lcjsKLQl9Ci0KLQlwdWJsaWMgQ29tbWFuZCBnZXREZWxldGVDb21tYW5kKCkgewotCQlyZXR1cm4gbmV3IFcxMURlbGV0ZUNvbW1hbmQodGhpcyk7Ci0JfQotCi0JcHVibGljIExpc3QgZ2V0RGlhZ25vc3RpY01lc3NhZ2VzKCkgewotCQlyZXR1cm4gbmV3IEFycmF5TGlzdCgpOwotCX0KLQotCXB1YmxpYyBJVHJlZUVsZW1lbnRbXSBnZXRDaGlsZHJlbigpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIElUcmVlRWxlbWVudCBnZXRQYXJlbnQoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKCkgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQlyZXR1cm4gIiI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBJbWFnZSBnZXRTZWNvbmRhcnlJbWFnZSgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9hY3Rpb25zL1cxMUFkZFBhcnRBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYWN0aW9ucy9XMTFBZGRQYXJ0QWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1M2EyNDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9hY3Rpb25zL1cxMUFkZFBhcnRBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZFN0YWNrOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5JbnRlcm5hbFdTRExNdWx0aVBhZ2VFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFNZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMVBhcmFtZXRlckZvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5CYXNlU2VsZWN0aW9uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLklBU0RBZGRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLlBhcmFtZXRlckVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkTWVzc2FnZUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5OYW1lVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLldTRExBZGFwdGVyRmFjdG9yeUhlbHBlcjsKLQotcHVibGljIGNsYXNzIFcxMUFkZFBhcnRBY3Rpb24gZXh0ZW5kcyBCYXNlU2VsZWN0aW9uQWN0aW9uIHsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJRCA9ICJBU0RBZGRQYXJ0QWN0aW9uIjsgLy8kTk9OLU5MUy0xJAotCQotCXB1YmxpYyBXMTFBZGRQYXJ0QWN0aW9uKElXb3JrYmVuY2hQYXJ0IHBhcnQpCXsKLQkJc3VwZXIocGFydCk7Ci0JCXNldElkKElEKTsKLQkJc2V0VGV4dChNZXNzYWdlcy5fVUlfQUNUSU9OX0FERF9QQVJUKTsgLy8kTk9OLU5MUy0xJAotCQlzZXRJbWFnZURlc2NyaXB0b3IoV1NETEVkaXRvclBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3IoImljb25zL3BhcnRfb2JqLmdpZiIpKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCWlmIChnZXRTZWxlY3RlZE9iamVjdHMoKS5zaXplKCkgPiAwKSB7Ci0JCQlPYmplY3QgbyA9IGdldFNlbGVjdGVkT2JqZWN0cygpLmdldCgwKTsKLQkJCU1lc3NhZ2VSZWZlcmVuY2UgbWVzc2FnZVJlZiA9IG51bGw7Ci0JCQlJTWVzc2FnZSBpTWVzc2FnZSA9IG51bGw7Ci0JCQlNZXNzYWdlIG1lc3NhZ2UgPSBudWxsOwotCQkJCi0JCQlpZiAobyBpbnN0YW5jZW9mIFcxMU1lc3NhZ2VSZWZlcmVuY2UpIHsKLQkJCQltZXNzYWdlUmVmID0gKE1lc3NhZ2VSZWZlcmVuY2UpICgoVzExTWVzc2FnZVJlZmVyZW5jZSkgbykuZ2V0VGFyZ2V0KCk7Ci0JCQkJbWVzc2FnZSA9IG1lc3NhZ2VSZWYuZ2V0RU1lc3NhZ2UoKTsKLQkJCX0KLQkJCWVsc2UgaWYgKG8gaW5zdGFuY2VvZiBXMTFQYXJhbWV0ZXJGb3JQYXJ0KSB7Ci0JCQkJVzExUGFyYW1ldGVyRm9yUGFydCBwYXJhbSA9IChXMTFQYXJhbWV0ZXJGb3JQYXJ0KSBvOwotCQkJCWlmIChwYXJhbS5nZXRPd25lcigpIGluc3RhbmNlb2YgSU1lc3NhZ2UpIHsKLQkJCQkJaU1lc3NhZ2UgPSAoSU1lc3NhZ2UpIHBhcmFtLmdldE93bmVyKCk7Ci0JCQkJfQotCQkJCWVsc2UgaWYgKHBhcmFtLmdldE93bmVyKCkgaW5zdGFuY2VvZiBXMTFNZXNzYWdlUmVmZXJlbmNlKSB7Ci0JCQkJCW1lc3NhZ2VSZWYgPSAoTWVzc2FnZVJlZmVyZW5jZSkgKChXMTFNZXNzYWdlUmVmZXJlbmNlKSBwYXJhbS5nZXRPd25lcigpKS5nZXRUYXJnZXQoKTsKLQkJCQkJbWVzc2FnZSA9IG1lc3NhZ2VSZWYuZ2V0RU1lc3NhZ2UoKTsKLQkJCQl9Ci0JCQkJCi0JCQkJaWYgKG1lc3NhZ2UgPT0gbnVsbCkgewotCQkJCQlQYXJ0IHBhcnQgPSAoUGFydCkgcGFyYW0uZ2V0VGFyZ2V0KCk7Ci0JCQkJCW1lc3NhZ2UgPSAoTWVzc2FnZSkgcGFydC5lQ29udGFpbmVyKCk7Ci0JCQkJfQotCQkJfQotCQkJZWxzZSBpZiAobyBpbnN0YW5jZW9mIElNZXNzYWdlKSB7Ci0JCQkJaU1lc3NhZ2UgPSAoSU1lc3NhZ2UpIG87Ci0JCQl9Ci0JCQkKLQkJCWlmIChtZXNzYWdlID09IG51bGwgJiYgaU1lc3NhZ2UgPT0gbnVsbCAmJiBtZXNzYWdlUmVmICE9IG51bGwpIHsKLQkJCQlJbnRlcm5hbFdTRExNdWx0aVBhZ2VFZGl0b3IgZWRpdG9yID0gKEludGVybmFsV1NETE11bHRpUGFnZUVkaXRvcikgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCQkJRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gKERlZmluaXRpb24pICgoVzExRGVzY3JpcHRpb24pIGVkaXRvci5nZXRNb2RlbCgpKS5nZXRUYXJnZXQoKTsKLQkJCQlTdHJpbmcgbWVzc2FnZU5hbWUgPSBOYW1lVXRpbC5idWlsZFVuaXF1ZU1lc3NhZ2VOYW1lKGRlZmluaXRpb24sICJOZXdNZXNzYWdlIik7IC8vJE5PTi1OTFMtMSQKLQkJCQlBZGRNZXNzYWdlQ29tbWFuZCBjb21tYW5kID0gbmV3IEFkZE1lc3NhZ2VDb21tYW5kKGRlZmluaXRpb24sIG1lc3NhZ2VOYW1lLCBmYWxzZSk7Ci0JCQkJY29tbWFuZC5ydW4oKTsKLQkJCQltZXNzYWdlID0gKE1lc3NhZ2UpIGNvbW1hbmQuZ2V0V1NETEVsZW1lbnQoKTsKLQkJCQltZXNzYWdlUmVmLnNldEVNZXNzYWdlKG1lc3NhZ2UpOwotCQkJfQotCQkJCi0JCQlpZiAobWVzc2FnZSAhPSBudWxsKSB7Ci0JCQkJaU1lc3NhZ2UgPSAoSU1lc3NhZ2UpIFdTRExBZGFwdGVyRmFjdG9yeUhlbHBlci5nZXRJbnN0YW5jZSgpLmFkYXB0KG1lc3NhZ2UpOwotCQkJfQotCi0JCQlpZiAoaU1lc3NhZ2UgIT0gbnVsbCkgewotCQkJCUNvbW1hbmQgY29tbWFuZCA9IGlNZXNzYWdlLmdldEFkZFBhcnRDb21tYW5kKCk7Ci0JCQkgICAgQ29tbWFuZFN0YWNrIHN0YWNrID0gKENvbW1hbmRTdGFjaykgQVNERWRpdG9yUGx1Z2luLmdldEFjdGl2ZUVkaXRvcigpLmdldEFkYXB0ZXIoQ29tbWFuZFN0YWNrLmNsYXNzKTsKLQkJCSAgICBzdGFjay5leGVjdXRlKGNvbW1hbmQpOwotCQkJICAgIAotCQkJICAgIGlmIChjb21tYW5kIGluc3RhbmNlb2YgSUFTREFkZENvbW1hbmQpIHsKLQkJCSAgICAJT2JqZWN0IGVsZW1lbnQgPSAoKElBU0RBZGRDb21tYW5kKSBjb21tYW5kKS5nZXROZXdseUFkZGVkQ29tcG9uZW50KCk7Ci0JCQkgICAgCXNlbGVjdEFuZERpcmVjdEVkaXQoZWxlbWVudCk7Ci0JCQkgICAgfQotCQkJfQotCQl9ICAKLQl9Ci0JCi0JcHJvdGVjdGVkIHZvaWQgZG9EaXJlY3RFZGl0KEVkaXRQYXJ0IGVwKSB7Ci0JCWlmIChlcCBpbnN0YW5jZW9mIFBhcmFtZXRlckVkaXRQYXJ0KSB7Ci0JCQkoKFBhcmFtZXRlckVkaXRQYXJ0KSBlcCkucGVyZm9ybURpcmVjdEVkaXQobnVsbCk7Ci0JCX0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9hY3Rpb25zL1cxMU9wZW5JbXBvcnRBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYWN0aW9ucy9XMTFPcGVuSW1wb3J0QWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2OTU2ZWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9hY3Rpb25zL1cxMU9wZW5JbXBvcnRBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExSW1wb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkJhc2VTZWxlY3Rpb25BY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBXMTFPcGVuSW1wb3J0QWN0aW9uIGV4dGVuZHMgQmFzZVNlbGVjdGlvbkFjdGlvbiB7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSUQgPSAiQVNET3BlbkltcG9ydEFjdGlvbiI7ICAvLyROT04tTkxTLTEkCi0JCi0JcHVibGljIFcxMU9wZW5JbXBvcnRBY3Rpb24oSVdvcmtiZW5jaFBhcnQgcGFydCkJewotCQlzdXBlcihwYXJ0KTsKLQkJc2V0SWQoSUQpOwotCQlzZXRUZXh0KE1lc3NhZ2VzLl9VSV9BQ1RJT05fT1BFTl9JTVBPUlQpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJaWYgKGdldFNlbGVjdGVkT2JqZWN0cygpLnNpemUoKSA+IDAgJiYgZ2V0U2VsZWN0ZWRPYmplY3RzKCkuZ2V0KDApIGluc3RhbmNlb2YgVzExSW1wb3J0KSB7Ci0JCQlJbXBvcnQgdGhlSW1wb3J0ID0gZ2V0V1NETEltcG9ydCgoVzExSW1wb3J0KSBnZXRTZWxlY3RlZE9iamVjdHMoKS5nZXQoMCkpOwotCQkJCi0JCQlEZWZpbml0aW9uIGRlZmluaXRpb24gPSB0aGVJbXBvcnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotCQkJb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5PcGVuT25TZWxlY3Rpb25IZWxwZXIgaGVscGVyID0gbmV3IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuT3Blbk9uU2VsZWN0aW9uSGVscGVyKGRlZmluaXRpb24pOwotCQkgICAgaGVscGVyLm9wZW5FZGl0b3IoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSB0aGVJbXBvcnQpOwotCQl9Ci0JfQotCQotCSAgcHJvdGVjdGVkIGJvb2xlYW4gY2FsY3VsYXRlRW5hYmxlZCgpIHsKLQkJICBib29sZWFuIGVuYWJsZWQgPSBzdXBlci5jYWxjdWxhdGVFbmFibGVkKCk7Ci0JCSAgaWYgKGVuYWJsZWQpIHsKLQkJCSAgaWYgKGdldFNlbGVjdGVkT2JqZWN0cygpLnNpemUoKSA+IDAgJiYgZ2V0U2VsZWN0ZWRPYmplY3RzKCkuZ2V0KDApIGluc3RhbmNlb2YgVzExSW1wb3J0KSB7Ci0JCQkJCUltcG9ydCB0aGVJbXBvcnQgPSBnZXRXU0RMSW1wb3J0KChXMTFJbXBvcnQpIGdldFNlbGVjdGVkT2JqZWN0cygpLmdldCgwKSk7Ci0JCQkJCQotCQkJCQlpZiAodGhlSW1wb3J0ICE9IG51bGwpIHsKLQkJCQkJCVN0cmluZyBsb2NhdGlvbiA9IHRoZUltcG9ydC5nZXRMb2NhdGlvblVSSSgpOwotCQkJCQkKLQkJCQkJCWlmIChsb2NhdGlvbiA9PSBudWxsIHx8IGxvY2F0aW9uLnRyaW0oKS5lcXVhbHMoIiIpKSAvLyROT04tTkxTLTEkCi0JCQkJCQkJZW5hYmxlZCA9IGZhbHNlOwotCQkJCQl9Ci0JCQkgIH0KLQkJICB9Ci0JCSAgCi0JCSAgcmV0dXJuIGVuYWJsZWQ7Ci0JICB9Ci0JICAKLQkgIHByaXZhdGUgSW1wb3J0IGdldFdTRExJbXBvcnQoVzExSW1wb3J0IHcxMUltcG9ydCkgewotCQkgIHJldHVybiAoSW1wb3J0KSAoKFcxMUltcG9ydCkgdzExSW1wb3J0KS5nZXRUYXJnZXQoKTsKLQkgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYWN0aW9ucy9XMTFTZXRFeGlzdGluZ0VsZW1lbnRBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYWN0aW9ucy9XMTFTZXRFeGlzdGluZ0VsZW1lbnRBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGY2OGZmYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2FjdGlvbnMvVzExU2V0RXhpc3RpbmdFbGVtZW50QWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5zZWFyY2guZGlhbG9ncy5Db21wb25lbnRTcGVjaWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5CYXNlU2VsZWN0aW9uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLlJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5JQ29tcG9uZW50RGlhbG9nOwotCi1wdWJsaWMgY2xhc3MgVzExU2V0RXhpc3RpbmdFbGVtZW50QWN0aW9uIGV4dGVuZHMgQmFzZVNlbGVjdGlvbkFjdGlvbiB7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSUQgPSAiQVNEU2V0RXhpc3RpbmdFbGVtZW50QWN0aW9uIjsgLy8kTk9OLU5MUy0xJAotCXByb3RlY3RlZCBXU0RMQmFzZUFkYXB0ZXIgd3NkbEJhc2VBZGFwdGVyOwotCQotCXB1YmxpYyBXMTFTZXRFeGlzdGluZ0VsZW1lbnRBY3Rpb24oSVdvcmtiZW5jaFBhcnQgcGFydCkgewotCQlzdXBlcihwYXJ0KTsKLQkJc2V0SWQoSUQpOwotCQlzZXRUZXh0KE1lc3NhZ2VzLl9VSV9BQ1RJT05fRVhJU1RJTkdfRUxFTUVOVCk7IC8vJE5PTi1OTFMtMSQKLS8vCQlzZXRJbWFnZURlc2NyaXB0b3IoQVNERWRpdG9yUGx1Z2luLmdldEltYWdlRGVzY3JpcHRvcigiaWNvbnMvbWVzc2FnZV9vYmouZ2lmIikpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCWlmICh3c2RsQmFzZUFkYXB0ZXIgPT0gbnVsbCkgewotCQkJaWYgKGdldFNlbGVjdGVkT2JqZWN0cygpLnNpemUoKSA+IDApIHsKLQkJCQlPYmplY3QgbyA9IGdldFNlbGVjdGVkT2JqZWN0cygpLmdldCgwKTsKLQkJCQlpZiAobyBpbnN0YW5jZW9mIElQYXJhbWV0ZXIgJiYgbyBpbnN0YW5jZW9mIFdTRExCYXNlQWRhcHRlcikgewotCQkJCQl3c2RsQmFzZUFkYXB0ZXIgPSAoV1NETEJhc2VBZGFwdGVyKSBvOwotCQkJCX0KLQkJCX0KLQkJfQotCQkKLSAgICAgICAgQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgcmVmTWFuYWdlciA9IFJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyLmdldFhTREVsZW1lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcih3c2RsQmFzZUFkYXB0ZXIpOwotCQlpZiAod3NkbEJhc2VBZGFwdGVyICE9IG51bGwgJiYgcmVmTWFuYWdlciAhPSBudWxsKSB7Ci0JCQlJQ29tcG9uZW50RGlhbG9nIGRpYWxvZyA9IHJlZk1hbmFnZXIuZ2V0QnJvd3NlRGlhbG9nKCk7Ci0JCQlpZiAoZGlhbG9nLmNyZWF0ZUFuZE9wZW4oKSA9PSBXaW5kb3cuT0spIHsKLQkJCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uIHNwZWMgPSBkaWFsb2cuZ2V0U2VsZWN0ZWRDb21wb25lbnQoKTsKLQkJCQlyZWZNYW5hZ2VyLm1vZGlmeUNvbXBvbmVudFJlZmVyZW5jZSh3c2RsQmFzZUFkYXB0ZXIuZ2V0VGFyZ2V0KCksIHNwZWMpOwotCQkJfQotCQl9Ci0JCQotCQl3c2RsQmFzZUFkYXB0ZXIgPSBudWxsOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2FjdGlvbnMvVzExU2V0RXhpc3RpbmdNZXNzYWdlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2FjdGlvbnMvVzExU2V0RXhpc3RpbmdNZXNzYWdlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmNzY1ZDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9hY3Rpb25zL1cxMVNldEV4aXN0aW5nTWVzc2FnZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuQ29tcG9uZW50U3BlY2lmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5CYXNlU2VsZWN0aW9uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5SZWZlcmVuY2VFZGl0TWFuYWdlckhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0LkNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuSUNvbXBvbmVudERpYWxvZzsKLQotcHVibGljIGNsYXNzIFcxMVNldEV4aXN0aW5nTWVzc2FnZUFjdGlvbiBleHRlbmRzIEJhc2VTZWxlY3Rpb25BY3Rpb24gewotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElEID0gIkFTRFNldE1lc3NhZ2VJbnRlcmZhY2VBY3Rpb24iOyAvLyROT04tTkxTLTEkCi0JcHJvdGVjdGVkIElNZXNzYWdlUmVmZXJlbmNlIG1lc3NhZ2VSZWZlcmVuY2U7Ci0KLQkKLQlwdWJsaWMgVzExU2V0RXhpc3RpbmdNZXNzYWdlQWN0aW9uKElXb3JrYmVuY2hQYXJ0IHBhcnQpIHsKLQkJc3VwZXIocGFydCk7Ci0JCXNldElkKElEKTsKLQkJc2V0VGV4dChNZXNzYWdlcy5fVUlfQUNUSU9OX0VYSVNUSU5HX01FU1NBR0UpOyAvLyROT04tTkxTLTEkCi0vLwkJc2V0SW1hZ2VEZXNjcmlwdG9yKEFTREVkaXRvclBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3IoImljb25zL21lc3NhZ2Vfb2JqLmdpZiIpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgcnVuKCkgewotCQlpZiAobWVzc2FnZVJlZmVyZW5jZSA9PSBudWxsKSB7Ci0JCQlpZiAoZ2V0U2VsZWN0ZWRPYmplY3RzKCkuc2l6ZSgpID4gMCkgewotCQkJCU9iamVjdCBvID0gZ2V0U2VsZWN0ZWRPYmplY3RzKCkuZ2V0KDApOwotCQkJCWlmIChvIGluc3RhbmNlb2YgSU1lc3NhZ2VSZWZlcmVuY2UpIHsKLQkJCQkJbWVzc2FnZVJlZmVyZW5jZSA9IChJTWVzc2FnZVJlZmVyZW5jZSkgbzsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJCi0gICAgICAgIENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIHJlZk1hbmFnZXIgPSBSZWZlcmVuY2VFZGl0TWFuYWdlckhlbHBlci5nZXRNZXNzYWdlUmVmZXJlbmNlRWRpdE1hbmFnZXIobWVzc2FnZVJlZmVyZW5jZSk7Ci0JCWlmIChtZXNzYWdlUmVmZXJlbmNlICE9IG51bGwgJiYgcmVmTWFuYWdlciAhPSBudWxsKSB7Ci0JCQlJQ29tcG9uZW50RGlhbG9nIGRpYWxvZyA9IHJlZk1hbmFnZXIuZ2V0QnJvd3NlRGlhbG9nKCk7Ci0JCQlpZiAoZGlhbG9nLmNyZWF0ZUFuZE9wZW4oKSA9PSBXaW5kb3cuT0spIHsKLQkJCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uIHNwZWMgPSBkaWFsb2cuZ2V0U2VsZWN0ZWRDb21wb25lbnQoKTsKLQkJCQlyZWZNYW5hZ2VyLm1vZGlmeUNvbXBvbmVudFJlZmVyZW5jZShtZXNzYWdlUmVmZXJlbmNlLCBzcGVjKTsKLQkJCX0KLQkJfQotCQkKLQkJbWVzc2FnZVJlZmVyZW5jZSA9IG51bGw7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYWN0aW9ucy9XMTFTZXRFeGlzdGluZ1R5cGVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYWN0aW9ucy9XMTFTZXRFeGlzdGluZ1R5cGVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGU4MmI0OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2FjdGlvbnMvVzExU2V0RXhpc3RpbmdUeXBlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5zZWFyY2guZGlhbG9ncy5Db21wb25lbnRTcGVjaWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5CYXNlU2VsZWN0aW9uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLlJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5JQ29tcG9uZW50RGlhbG9nOwotCi1wdWJsaWMgY2xhc3MgVzExU2V0RXhpc3RpbmdUeXBlQWN0aW9uIGV4dGVuZHMgQmFzZVNlbGVjdGlvbkFjdGlvbiB7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSUQgPSAiQVNEU2V0RXhpc3RpbmdUeXBlQWN0aW9uIjsgLy8kTk9OLU5MUy0xJAotCXByb3RlY3RlZCBXU0RMQmFzZUFkYXB0ZXIgd3NkbEJhc2VBZGFwdGVyOwotCQotCXB1YmxpYyBXMTFTZXRFeGlzdGluZ1R5cGVBY3Rpb24oSVdvcmtiZW5jaFBhcnQgcGFydCkgewotCQlzdXBlcihwYXJ0KTsKLQkJc2V0SWQoSUQpOwotCQlzZXRUZXh0KE1lc3NhZ2VzLl9VSV9BQ1RJT05fRVhJU1RJTkdfVFlQRSk7IC8vJE5PTi1OTFMtMSQKLS8vCQlzZXRJbWFnZURlc2NyaXB0b3IoQVNERWRpdG9yUGx1Z2luLmdldEltYWdlRGVzY3JpcHRvcigiaWNvbnMvbWVzc2FnZV9vYmouZ2lmIikpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCWlmICh3c2RsQmFzZUFkYXB0ZXIgPT0gbnVsbCkgewotCQkJaWYgKGdldFNlbGVjdGVkT2JqZWN0cygpLnNpemUoKSA+IDApIHsKLQkJCQlPYmplY3QgbyA9IGdldFNlbGVjdGVkT2JqZWN0cygpLmdldCgwKTsKLQkJCQlpZiAobyBpbnN0YW5jZW9mIElQYXJhbWV0ZXIgJiYgbyBpbnN0YW5jZW9mIFdTRExCYXNlQWRhcHRlcikgewotCQkJCQl3c2RsQmFzZUFkYXB0ZXIgPSAoV1NETEJhc2VBZGFwdGVyKSBvOwotCQkJCX0KLQkJCX0KLQkJfQotCi0gICAgICAgIENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIHJlZk1hbmFnZXIgPSBSZWZlcmVuY2VFZGl0TWFuYWdlckhlbHBlci5nZXRYU0RUeXBlUmVmZXJlbmNlRWRpdE1hbmFnZXIod3NkbEJhc2VBZGFwdGVyKTsKLQkJaWYgKHdzZGxCYXNlQWRhcHRlciAhPSBudWxsICYmIHJlZk1hbmFnZXIgIT0gbnVsbCkgewotCQkJSUNvbXBvbmVudERpYWxvZyBkaWFsb2cgPSByZWZNYW5hZ2VyLmdldEJyb3dzZURpYWxvZygpOwotCQkJaWYgKGRpYWxvZy5jcmVhdGVBbmRPcGVuKCkgPT0gV2luZG93Lk9LKSB7Ci0JCQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBzcGVjID0gZGlhbG9nLmdldFNlbGVjdGVkQ29tcG9uZW50KCk7Ci0JCQkJcmVmTWFuYWdlci5tb2RpZnlDb21wb25lbnRSZWZlcmVuY2Uod3NkbEJhc2VBZGFwdGVyLmdldFRhcmdldCgpLCBzcGVjKTsKLQkJCX0KLQkJfQotCQkKLQkJd3NkbEJhc2VBZGFwdGVyID0gbnVsbDsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9hY3Rpb25zL1cxMVNldE5ld0VsZW1lbnRBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYWN0aW9ucy9XMTFTZXROZXdFbGVtZW50QWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4ODJkYTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9hY3Rpb25zL1cxMVNldE5ld0VsZW1lbnRBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLkNvbXBvbmVudFNwZWNpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuV1NETEJhc2VBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkJhc2VTZWxlY3Rpb25BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuUmVmZXJlbmNlRWRpdE1hbmFnZXJIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5Db21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0LklDb21wb25lbnREaWFsb2c7Ci0KLXB1YmxpYyBjbGFzcyBXMTFTZXROZXdFbGVtZW50QWN0aW9uIGV4dGVuZHMgQmFzZVNlbGVjdGlvbkFjdGlvbiB7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSUQgPSAiQVNEU2V0TmV3RWxlbWVudEFjdGlvbiI7IC8vJE5PTi1OTFMtMSQKLQlwcm90ZWN0ZWQgV1NETEJhc2VBZGFwdGVyIHdzZGxCYXNlQWRhcHRlcjsKLQkKLQlwdWJsaWMgVzExU2V0TmV3RWxlbWVudEFjdGlvbihJV29ya2JlbmNoUGFydCBwYXJ0KQl7Ci0JCXN1cGVyKHBhcnQpOwotCQlzZXRJZChJRCk7Ci0JCXNldFRleHQoTWVzc2FnZXMuX1VJX0FDVElPTl9ORVdfRUxFTUVOVCk7IC8vJE5PTi1OTFMtMSQKLS8vCQlzZXRJbWFnZURlc2NyaXB0b3IoV1NETEVkaXRvclBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3IoImljb25zL3NlcnZpY2Vfb2JqLmdpZiIpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgcnVuKCkgewkJCi0JCWlmICh3c2RsQmFzZUFkYXB0ZXIgPT0gbnVsbCkgewotCQkJaWYgKGdldFNlbGVjdGVkT2JqZWN0cygpLnNpemUoKSA+IDApIHsKLQkJCQlPYmplY3QgbyA9IGdldFNlbGVjdGVkT2JqZWN0cygpLmdldCgwKTsKLQkJCQlpZiAobyBpbnN0YW5jZW9mIElQYXJhbWV0ZXIgJiYgbyBpbnN0YW5jZW9mIFdTRExCYXNlQWRhcHRlcikgewotCQkJCQl3c2RsQmFzZUFkYXB0ZXIgPSAoV1NETEJhc2VBZGFwdGVyKSBvOwotCQkJCX0KLQkJCX0KLQkJfQotCQkKLSAgICAgICAgQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgcmVmTWFuYWdlciA9IFJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyLmdldFhTREVsZW1lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcih3c2RsQmFzZUFkYXB0ZXIpOwotICAgICAgICBpZiAod3NkbEJhc2VBZGFwdGVyICE9IG51bGwgJiYgcmVmTWFuYWdlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBJQ29tcG9uZW50RGlhbG9nIGRpYWxvZyA9IHJlZk1hbmFnZXIuZ2V0TmV3RGlhbG9nKCk7Ci0JCQlpZiAoZGlhbG9nLmNyZWF0ZUFuZE9wZW4oKSA9PSBXaW5kb3cuT0spIHsKLQkJCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uIHNwZWMgPSBkaWFsb2cuZ2V0U2VsZWN0ZWRDb21wb25lbnQoKTsKLQkJCQlyZWZNYW5hZ2VyLm1vZGlmeUNvbXBvbmVudFJlZmVyZW5jZSh3c2RsQmFzZUFkYXB0ZXIsIHNwZWMpOwotCQkJfQotCQl9Ci0JCQotCQl3c2RsQmFzZUFkYXB0ZXIgPSBudWxsOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2FjdGlvbnMvVzExU2V0TmV3TWVzc2FnZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9hY3Rpb25zL1cxMVNldE5ld01lc3NhZ2VBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmVmOTE0Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2FjdGlvbnMvVzExU2V0TmV3TWVzc2FnZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuQ29tcG9uZW50U3BlY2lmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5CYXNlU2VsZWN0aW9uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5SZWZlcmVuY2VFZGl0TWFuYWdlckhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0LkNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuSUNvbXBvbmVudERpYWxvZzsKLQotcHVibGljIGNsYXNzIFcxMVNldE5ld01lc3NhZ2VBY3Rpb24gZXh0ZW5kcyBCYXNlU2VsZWN0aW9uQWN0aW9uIHsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJRCA9ICJBU0RTZXROZXdNZXNzYWdlQWN0aW9uIjsgLy8kTk9OLU5MUy0xJAotCXByb3RlY3RlZCBJTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmZXJlbmNlOwotCQotCXB1YmxpYyBXMTFTZXROZXdNZXNzYWdlQWN0aW9uKElXb3JrYmVuY2hQYXJ0IHBhcnQpCXsKLQkJc3VwZXIocGFydCk7Ci0JCXNldElkKElEKTsKLQkJc2V0VGV4dChNZXNzYWdlcy5fVUlfQUNUSU9OX05FV19NRVNTQUdFKTsgLy8kTk9OLU5MUy0xJAotLy8JCXNldEltYWdlRGVzY3JpcHRvcihXU0RMRWRpdG9yUGx1Z2luLmdldEltYWdlRGVzY3JpcHRvcigiaWNvbnMvc2VydmljZV9vYmouZ2lmIikpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRJTWVzc2FnZVJlZmVyZW5jZShJTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmZXJlbmNlKSB7Ci0JCXRoaXMubWVzc2FnZVJlZmVyZW5jZSA9IG1lc3NhZ2VSZWZlcmVuY2U7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHJ1bigpIHsJCQotCQlpZiAobWVzc2FnZVJlZmVyZW5jZSA9PSBudWxsKSB7Ci0JCQlpZiAoZ2V0U2VsZWN0ZWRPYmplY3RzKCkuc2l6ZSgpID4gMCkgewotCQkJCU9iamVjdCBvID0gZ2V0U2VsZWN0ZWRPYmplY3RzKCkuZ2V0KDApOwotCQkJCWlmIChvIGluc3RhbmNlb2YgSU1lc3NhZ2VSZWZlcmVuY2UpIHsKLQkJCQkJbWVzc2FnZVJlZmVyZW5jZSA9IChJTWVzc2FnZVJlZmVyZW5jZSkgbzsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJCi0gICAgICAgIENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIHJlZk1hbmFnZXIgPSBSZWZlcmVuY2VFZGl0TWFuYWdlckhlbHBlci5nZXRNZXNzYWdlUmVmZXJlbmNlRWRpdE1hbmFnZXIobWVzc2FnZVJlZmVyZW5jZSk7Ci0gICAgICAgIGlmIChtZXNzYWdlUmVmZXJlbmNlICE9IG51bGwgJiYgcmVmTWFuYWdlciAhPSBudWxsKSB7Ci0JCQlJQ29tcG9uZW50RGlhbG9nIGRpYWxvZyA9IHJlZk1hbmFnZXIuZ2V0TmV3RGlhbG9nKCk7Ci0JCQlpZiAoZGlhbG9nLmNyZWF0ZUFuZE9wZW4oKSA9PSBXaW5kb3cuT0spIHsKLQkJCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uIHNwZWMgPSBkaWFsb2cuZ2V0U2VsZWN0ZWRDb21wb25lbnQoKTsKLQkJCQlyZWZNYW5hZ2VyLm1vZGlmeUNvbXBvbmVudFJlZmVyZW5jZShtZXNzYWdlUmVmZXJlbmNlLCBzcGVjKTsKLQkJCX0KLQkJfQotCQkKLQkJbWVzc2FnZVJlZmVyZW5jZSA9IG51bGw7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYWN0aW9ucy9XMTFTZXROZXdUeXBlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2FjdGlvbnMvVzExU2V0TmV3VHlwZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDBlNmYzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYWN0aW9ucy9XMTFTZXROZXdUeXBlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklGaWxlRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLkNvbXBvbmVudFNwZWNpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuV1NETEJhc2VBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkJhc2VTZWxlY3Rpb25BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmVkaXQuV1NETFhTRFR5cGVSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLlJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETEFkYXB0ZXJGYWN0b3J5SGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5JQ29tcG9uZW50RGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuZWRpdG9yLlhTRFR5cGVSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLQotcHVibGljIGNsYXNzIFcxMVNldE5ld1R5cGVBY3Rpb24gZXh0ZW5kcyBCYXNlU2VsZWN0aW9uQWN0aW9uIHsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJRCA9ICJBU0RTZXROZXdUeXBlQWN0aW9uIjsgLy8kTk9OLU5MUy0xJAotCXByb3RlY3RlZCBXU0RMQmFzZUFkYXB0ZXIgd3NkbEJhc2VBZGFwdGVyOwotCQotCXB1YmxpYyBXMTFTZXROZXdUeXBlQWN0aW9uKElXb3JrYmVuY2hQYXJ0IHBhcnQpCXsKLQkJc3VwZXIocGFydCk7Ci0JCXNldElkKElEKTsKLQkJc2V0VGV4dChNZXNzYWdlcy5fVUlfQUNUSU9OX05FV19UWVBFKTsgLy8kTk9OLU5MUy0xJAotLy8JCXNldEltYWdlRGVzY3JpcHRvcihXU0RMRWRpdG9yUGx1Z2luLmdldEltYWdlRGVzY3JpcHRvcigiaWNvbnMvc2VydmljZV9vYmouZ2lmIikpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBydW4oKSB7CQkKLQkJaWYgKHdzZGxCYXNlQWRhcHRlciA9PSBudWxsKSB7Ci0JCQlpZiAoZ2V0U2VsZWN0ZWRPYmplY3RzKCkuc2l6ZSgpID4gMCkgewotCQkJCU9iamVjdCBvID0gZ2V0U2VsZWN0ZWRPYmplY3RzKCkuZ2V0KDApOwotCQkJCWlmIChvIGluc3RhbmNlb2YgSVBhcmFtZXRlciAmJiBvIGluc3RhbmNlb2YgV1NETEJhc2VBZGFwdGVyKSB7Ci0JCQkJCXdzZGxCYXNlQWRhcHRlciA9IChXU0RMQmFzZUFkYXB0ZXIpIG87Ci0JCQkJfQotCQkJfQotCQl9Ci0JCQotICAgICAgICBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciByZWZNYW5hZ2VyID0gUmVmZXJlbmNlRWRpdE1hbmFnZXJIZWxwZXIuZ2V0WFNEVHlwZVJlZmVyZW5jZUVkaXRNYW5hZ2VyKHdzZGxCYXNlQWRhcHRlcik7Ci0JCWlmICh3c2RsQmFzZUFkYXB0ZXIgIT0gbnVsbCAmJiByZWZNYW5hZ2VyICE9IG51bGwpIHsKLQkJCUlDb21wb25lbnREaWFsb2cgZGlhbG9nID0gcmVmTWFuYWdlci5nZXROZXdEaWFsb2coKTsKLQkJCWlmIChkaWFsb2cuY3JlYXRlQW5kT3BlbigpID09IFdpbmRvdy5PSykgewotCQkJCUNvbXBvbmVudFNwZWNpZmljYXRpb24gc3BlYyA9IGRpYWxvZy5nZXRTZWxlY3RlZENvbXBvbmVudCgpOwotCQkJCXJlZk1hbmFnZXIubW9kaWZ5Q29tcG9uZW50UmVmZXJlbmNlKHdzZGxCYXNlQWRhcHRlciwgc3BlYyk7Ci0JCQl9Ci0JCX0KLQkJCi0JCXdzZGxCYXNlQWRhcHRlciA9IG51bGw7Ci0JfQotICAgIAotICAgIHByb3RlY3RlZCBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBnZXRDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcigpIHsKLSAgICAgICAgSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpOwotICAgICAgICBpZiAocGFnZS5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKFhTRFR5cGVSZWZlcmVuY2VFZGl0TWFuYWdlci5jbGFzcykgIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIChDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcikgcGFnZS5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKFhTRFR5cGVSZWZlcmVuY2VFZGl0TWFuYWdlci5jbGFzcyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBJRWRpdG9ySW5wdXQgaW5wdXQgPSBwYWdlLmdldEFjdGl2ZUVkaXRvcigpLmdldEVkaXRvcklucHV0KCk7Ci0gICAgICAgICAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBJRmlsZUVkaXRvcklucHV0KSB7Ci0gICAgICAgICAgICAgICAgV1NETEVsZW1lbnQgZWxlbWVudCA9IChXU0RMRWxlbWVudCkgd3NkbEJhc2VBZGFwdGVyLmdldFRhcmdldCgpOwotICAgICAgICAgICAgICAgIElEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IChJRGVzY3JpcHRpb24pIFdTRExBZGFwdGVyRmFjdG9yeUhlbHBlci5nZXRJbnN0YW5jZSgpLmFkYXB0KGVsZW1lbnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFdTRExYU0RUeXBlUmVmZXJlbmNlRWRpdE1hbmFnZXIoKChJRmlsZUVkaXRvcklucHV0KSBpbnB1dCkuZ2V0RmlsZSgpLCBudWxsLCBkZXNjcmlwdGlvbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFCaW5kaW5nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMUJpbmRpbmcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNThlMjVjNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMUJpbmRpbmcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0ZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hY3Rpb25zLk9wZW5Jbk5ld0VkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5XU0RMQmFzZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMuVzExR2VuZXJhdGVCaW5kaW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcy5XMTFTZXRJbnRlcmZhY2VDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTRERlbGV0ZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RHZW5lcmF0ZUJpbmRpbmdBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEU2V0RXhpc3RpbmdJbnRlcmZhY2VBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEU2V0TmV3SW50ZXJmYWNlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkJhc2VTZWxlY3Rpb25BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMubW9kZWwuQmluZGluZ0NvbnRlbnRQbGFjZUhvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklCaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSURlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMQWRhcHRlckZhY3RvcnlIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5jb21tb24ucHJvcGVydGllcy5zZWN0aW9ucy5hcHBpbmZvLmN1c3RvbS5Ob2RlQ3VzdG9taXphdGlvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuZWRpdG9yLlhTREVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLXB1YmxpYyBjbGFzcyBXMTFCaW5kaW5nIGV4dGVuZHMgV1NETEJhc2VBZGFwdGVyIGltcGxlbWVudHMgSUJpbmRpbmcgewotCi0JcHVibGljIElJbnRlcmZhY2UgZ2V0SW50ZXJmYWNlKCkgewotICAgICAgICBQb3J0VHlwZSBwb3J0VHlwZSA9ICgoQmluZGluZykgdGFyZ2V0KS5nZXRFUG9ydFR5cGUoKTsKLSAgICAgICAgaWYgKHBvcnRUeXBlICE9IG51bGwpCi0gICAgICAgIHsgIAotCSAgICAgIHJldHVybiAoSUludGVyZmFjZSkgY3JlYXRlQWRhcHRlcihwb3J0VHlwZSk7Ci0JCX0JCQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0gICAgCi0gICAgcHVibGljIExpc3QgZ2V0QmluZGluZ0NvbnRlbnRMaXN0KCkKLSAgICB7Ci0gICAgICBMaXN0IGFkYXB0ZXJMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCi0gICAgICBMaXN0IGJpbmRpbmdPcGVyYXRpb25zID0gY29weUxpc3QoKChCaW5kaW5nKXRhcmdldCkuZ2V0RUJpbmRpbmdPcGVyYXRpb25zKCkpOyAKLSAgICAgIExpc3Qgb3BlcmF0aW9ucyA9IGNvcHlMaXN0KCgoQmluZGluZyl0YXJnZXQpLmdldEVQb3J0VHlwZSgpLmdldEVPcGVyYXRpb25zKCkpOwotICAgICAgCi0gICAgICAvLyBEZXRlcm1pbmUgaWYgd2UgbmVlZCBwbGFjZWhvbGRlcnMgZm9yIE9wZXJhdGlvbnMKLQkgIExpc3QgdG9BZGFwdExpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAKLQkgIEl0ZXJhdG9yIGJpbmRpbmdPcEl0ID0gYmluZGluZ09wZXJhdGlvbnMuaXRlcmF0b3IoKTsKLQkgIHdoaWxlIChiaW5kaW5nT3BJdC5oYXNOZXh0KCkpIHsKLQkJICBCaW5kaW5nT3BlcmF0aW9uIGl0ZW0gPSAoQmluZGluZ09wZXJhdGlvbikgYmluZGluZ09wSXQubmV4dCgpOwotCQkgIG9wZXJhdGlvbnMucmVtb3ZlKGl0ZW0uZ2V0RU9wZXJhdGlvbigpKTsKLQkgIH0KLQkgIAotICAgICAgSXRlcmF0b3Igb3BlcmF0aW9uc0l0ID0gb3BlcmF0aW9ucy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKG9wZXJhdGlvbnNJdC5oYXNOZXh0KCkpIHsKLSAgICAJICBPcGVyYXRpb24gb3AgPSAoT3BlcmF0aW9uKSBvcGVyYXRpb25zSXQubmV4dCgpOwotICAgIAkgIHRvQWRhcHRMaXN0LmFkZChvcCk7Ci0gICAgCSAgdG9BZGFwdExpc3QuYWRkKG9wLmdldEVJbnB1dCgpKTsKLSAgICAJICB0b0FkYXB0TGlzdC5hZGQob3AuZ2V0RU91dHB1dCgpKTsKLSAgICAJICB0b0FkYXB0TGlzdC5hZGRBbGwob3AuZ2V0RUZhdWx0cygpKTsKLSAgICAgIH0KLQotICAgICAgSXRlcmF0b3IgaXQgPSB0b0FkYXB0TGlzdC5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkgewotICAgICAgICAgIE9iamVjdCBvID0gaXQubmV4dCgpOyAKLSAgICAgICAgICBpZiAobyAhPSBudWxsKQotICAgICAgICAgIHsgIAotICAgIAkgICAgT2JqZWN0IGFkYXB0ZWQgPSBXU0RMQWRhcHRlckZhY3RvcnlIZWxwZXIuZ2V0SW5zdGFuY2UoKS5hZGFwdCgoTm90aWZpZXIpbyk7Ci0gICAgCSAgICBCaW5kaW5nQ29udGVudFBsYWNlSG9sZGVyIHBsYWNlSG9sZGVyID0gbmV3IEJpbmRpbmdDb250ZW50UGxhY2VIb2xkZXIoYWRhcHRlZCk7Ci0gICAgCSAgICBhZGFwdGVyTGlzdC5hZGQocGxhY2VIb2xkZXIpOwotICAgICAgICAgIH0gIAotICAgICAgfQotICAgICAgCi0gICAgICBmb3IgKEl0ZXJhdG9yIGkgPSAoKEJpbmRpbmcpdGFyZ2V0KS5nZXRFQmluZGluZ09wZXJhdGlvbnMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgICAgewotICAgICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbilpLm5leHQoKTsKLSAgICAgICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0RU9wZXJhdGlvbigpOwotICAgICAgICAKLSAgICAgICAgbGlzdC5hZGQoYmluZGluZ09wZXJhdGlvbik7Ci0gICAgICAgIAotICAgICAgICAvLyBIYW5kbGUgSW5wdXQKLSAgICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24uZ2V0RUJpbmRpbmdJbnB1dCgpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBsaXN0LmFkZChiaW5kaW5nT3BlcmF0aW9uLmdldEVCaW5kaW5nSW5wdXQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoYmluZGluZ09wZXJhdGlvbi5nZXRFQmluZGluZ0lucHV0KCkgPT0gbnVsbCAmJiBvcGVyYXRpb24uZ2V0RUlucHV0KCkgIT0gbnVsbCkgewotICAgICAgICAJLy8gTmVlZCBhIHBsYWNlaG9sZGVyCi0gICAgICAgIAlPYmplY3QgYWRhcHRlZE9iamVjdCA9IGNyZWF0ZUFkYXB0ZXIob3BlcmF0aW9uLmdldEVJbnB1dCgpKTsKLSAgICAgICAgCUJpbmRpbmdDb250ZW50UGxhY2VIb2xkZXIgdGVtcCA9IG5ldyBCaW5kaW5nQ29udGVudFBsYWNlSG9sZGVyKGFkYXB0ZWRPYmplY3QpOwotICAgICAgICAJYWRhcHRlckxpc3QuYWRkKHRlbXApOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBIYW5kbGUgT3V0cHV0Ci0gICAgICAgIGlmIChiaW5kaW5nT3BlcmF0aW9uLmdldEVCaW5kaW5nT3V0cHV0KCkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGxpc3QuYWRkKGJpbmRpbmdPcGVyYXRpb24uZ2V0RUJpbmRpbmdPdXRwdXQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoYmluZGluZ09wZXJhdGlvbi5nZXRFQmluZGluZ091dHB1dCgpID09IG51bGwgJiYgb3BlcmF0aW9uLmdldEVPdXRwdXQoKSAhPSBudWxsKSB7Ci0gICAgICAgIAkvLyBOZWVkIGEgcGxhY2Vob2xkZXIKLSAgICAgICAgCU9iamVjdCBhZGFwdGVkT2JqZWN0ID0gY3JlYXRlQWRhcHRlcihvcGVyYXRpb24uZ2V0RU91dHB1dCgpKTsKLSAgICAgICAgCUJpbmRpbmdDb250ZW50UGxhY2VIb2xkZXIgdGVtcCA9IG5ldyBCaW5kaW5nQ29udGVudFBsYWNlSG9sZGVyKGFkYXB0ZWRPYmplY3QpOwotICAgICAgICAJYWRhcHRlckxpc3QuYWRkKHRlbXApOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSGFuZGxlIEZhdWx0cwotICAgICAgICBpZiAob3BlcmF0aW9uICE9IG51bGwpCi0gICAgICAgIHsgIAotICAgICAgICBMaXN0IGZhdWx0cyA9IGNvcHlMaXN0KG9wZXJhdGlvbi5nZXRFRmF1bHRzKCkpOwotICAgICAgICBMaXN0IGJpbmRpbmdGYXVsdHMgPSBjb3B5TGlzdChiaW5kaW5nT3BlcmF0aW9uLmdldEVCaW5kaW5nRmF1bHRzKCkpOwotICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgYmluZGluZ0ZhdWx0cy5zaXplKCk7IGluZGV4KyspIHsKLSAgICAgICAgCUJpbmRpbmdGYXVsdCBiaW5kaW5nRmF1bHQgPSAoQmluZGluZ0ZhdWx0KSBiaW5kaW5nRmF1bHRzLmdldChpbmRleCk7Ci0gICAgICAgIAlsaXN0LmFkZChiaW5kaW5nRmF1bHQpOwotICAgICAgICAJCi0gICAgICAgIAlmYXVsdHMucmVtb3ZlKGJpbmRpbmdGYXVsdC5nZXRFRmF1bHQoKSk7ICAgICAgICAJCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIExlZnQgb3ZlciBmYXVsdHMgbmVlZCBwbGFjZWhvbGRlcnMKLSAgICAgICAgSXRlcmF0b3IgcmVtYW5pbmdGYXVsdHMgPSBmYXVsdHMuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKHJlbWFuaW5nRmF1bHRzLmhhc05leHQoKSkgewotICAgICAgICAJT2JqZWN0IGFkYXB0ZWRPYmplY3QgPSBjcmVhdGVBZGFwdGVyKChGYXVsdCkgcmVtYW5pbmdGYXVsdHMubmV4dCgpKTsKLSAgICAgICAgCUJpbmRpbmdDb250ZW50UGxhY2VIb2xkZXIgdGVtcCA9IG5ldyBCaW5kaW5nQ29udGVudFBsYWNlSG9sZGVyKGFkYXB0ZWRPYmplY3QpOwotICAgICAgICAJYWRhcHRlckxpc3QuYWRkKHRlbXApOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHBvcHVsYXRlQWRhcHRlckxpc3QobGlzdCwgYWRhcHRlckxpc3QpOwotICAgICAgcmV0dXJuIGFkYXB0ZXJMaXN0OwotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIExpc3QgY29weUxpc3QoTGlzdCBvcmlnTGlzdCkgewotICAgIAlMaXN0IG5ld0xpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgCUl0ZXJhdG9yIGl0ID0gb3JpZ0xpc3QuaXRlcmF0b3IoKTsKLSAgICAJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotICAgIAkJbmV3TGlzdC5hZGQoaXQubmV4dCgpKTsKLSAgICAJfQotICAgIAkKLSAgICAJcmV0dXJuIG5ld0xpc3Q7Ci0gICAgfQotCi0JcHVibGljIExpc3QgZ2V0RXh0ZW5zaWJsaXR5T2JqZWN0cygpIHsKLQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0JCXJldHVybiAoKEJpbmRpbmcpIHRhcmdldCkuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRQcm90b2NvbCgpIHsKLQkJSXRlcmF0b3IgaXQgPSAoKEJpbmRpbmcpIHRhcmdldCkuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLQkJCU9iamVjdCBpdGVtID0gaXQubmV4dCgpOwotCQkJaWYgKGl0ZW0gaW5zdGFuY2VvZiBTT0FQQmluZGluZykgewotCQkJCXJldHVybiAiU09BUCI7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQkJCWVsc2UgaWYgKGl0ZW0gaW5zdGFuY2VvZiBIVFRQQmluZGluZykgewotCQkJCXJldHVybiAiSFRUUCI7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQkJfQotCQkKLQkJcmV0dXJuICIiOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyBJRGVzY3JpcHRpb24gZ2V0T3duZXJEZXNjcmlwdGlvbigpIHsKLQkJcmV0dXJuIChJRGVzY3JpcHRpb24pIG93bmVyOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nW10gZ2V0QWN0aW9ucyhPYmplY3Qgb2JqZWN0KSB7Ci0gICAgTGlzdCBhY3Rpb25JRHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgYWN0aW9uSURzLmFkZChBU0RHZW5lcmF0ZUJpbmRpbmdBY3Rpb24uSUQpOwotICAgIGFjdGlvbklEcy5hZGQoQmFzZVNlbGVjdGlvbkFjdGlvbi5TVUJNRU5VX1NUQVJUX0lEICsgTWVzc2FnZXMuX1VJX0FDVElPTl9TRVRfUE9SVFRZUEUpOyAvLyROT04tTkxTLTEkCi0gICAgYWN0aW9uSURzLmFkZChBU0RTZXROZXdJbnRlcmZhY2VBY3Rpb24uSUQpOwotICAgIGFjdGlvbklEcy5hZGQoQVNEU2V0RXhpc3RpbmdJbnRlcmZhY2VBY3Rpb24uSUQpOwotICAgIGFjdGlvbklEcy5hZGQoQmFzZVNlbGVjdGlvbkFjdGlvbi5TVUJNRU5VX0VORF9JRCk7Ci0gICAgYWN0aW9uSURzLmFkZChBU0REZWxldGVBY3Rpb24uSUQpOwotICAgIGlmIChpc1JlYWRPbmx5KCkpIHsKLSAgICAgIGFjdGlvbklEcy5hZGQoT3BlbkluTmV3RWRpdG9yLklEKTsKLSAgICB9Ci0gICAgcmV0dXJuIChTdHJpbmcgW10pYWN0aW9uSURzLnRvQXJyYXkobmV3IFN0cmluZ1swXSk7Ci0JfQotCQotCXB1YmxpYyBDb21tYW5kIGdldFNldEludGVyZmFjZUNvbW1hbmQoSUludGVyZmFjZSBuZXdJbnRlcmZhY2UpIHsKLQkJVzExSW50ZXJmYWNlIHcxMUludGVyZmFjZSA9IChXMTFJbnRlcmZhY2UpIG5ld0ludGVyZmFjZTsKLQkJcmV0dXJuIG5ldyBXMTFTZXRJbnRlcmZhY2VDb21tYW5kKChCaW5kaW5nKSB0YXJnZXQsIChQb3J0VHlwZSkgdzExSW50ZXJmYWNlLmdldFRhcmdldCgpKTsKLQl9Ci0JCi0JcHVibGljIENvbW1hbmQgZ2V0R2VuZXJhdGVCaW5kaW5nQ29tbWFuZCgpIHsKLQkJcmV0dXJuIG5ldyBXMTFHZW5lcmF0ZUJpbmRpbmdDb21tYW5kKChCaW5kaW5nKSB0aGlzLmdldFRhcmdldCgpKTsKLQl9Ci0gICAgCi0gICAgcHJpdmF0ZSBJTGFiZWxQcm92aWRlciBnZXRMYWJlbFByb3ZpZGVyKE5vZGUgbm9kZSkKLSAgICB7Ci0gICAgICBTdHJpbmcgbmFtZXNwYWNlID0gbm9kZS5nZXROYW1lc3BhY2VVUkkoKTsgICAgICAKLSAgICAgIGlmIChuYW1lc3BhY2UgIT0gbnVsbCkKLSAgICAgIHsgIAotICAgICAgICBOb2RlQ3VzdG9taXphdGlvblJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gWFNERWRpdG9yUGx1Z2luLmdldERlZmF1bHQoKS5nZXROb2RlQ3VzdG9taXphdGlvblJlZ2lzdHJ5KCk7ICAgICAgCi0gICAgICAgIHJldHVybiByZWdpc3RyeS5nZXRMYWJlbFByb3ZpZGVyKG5hbWVzcGFjZSk7Ci0gICAgICB9ICAgICAgICAKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICAKLSAgcHVibGljIEltYWdlIGdldEltYWdlKCkKLSAgewotICAgIEltYWdlIGltYWdlID0gbnVsbDsKLSAgICBMaXN0IGxpc3QgPSAoKEJpbmRpbmcpIHRhcmdldCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgaWYgKGxpc3Quc2l6ZSgpID4gMCkKLSAgICB7ICAKLSAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBlZSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudClsaXN0LmdldCgwKTsKLSAgICAgICBFbGVtZW50IGVsZW1lbnQgPSBlZS5nZXRFbGVtZW50KCk7Ci0gICAgICAgaWYgKGVsZW1lbnQgIT0gbnVsbCkKLSAgICAgICB7ICAKLSAgICAgICAgIElMYWJlbFByb3ZpZGVyIGxhYmVsUHJvdmlkZXIgPSBnZXRMYWJlbFByb3ZpZGVyKGVsZW1lbnQpOwotICAgICAgICAgaWYgKGxhYmVsUHJvdmlkZXIgIT0gbnVsbCkKLSAgICAgICAgIHsKLSAgICAgICAgICAgaW1hZ2U9IGxhYmVsUHJvdmlkZXIuZ2V0SW1hZ2UoZWxlbWVudCk7Ci0gICAgICAgICB9Ci0gICAgICAgfQotICAgIH0gICAgICAgIAotICAgIGlmIChpbWFnZSA9PSBudWxsKQotICAgIHsKLSAgICAgIGltYWdlID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEltYWdlKCJpY29ucy9iaW5kaW5nX29iai5naWYiKTsgICAgICAgICAgLy8kTk9OLU5MUy0xJAotICAgIH0gIAotICAgIHJldHVybiBpbWFnZTsKLSAgIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFRleHQoKQotICB7Ci0gICAgcmV0dXJuICJiaW5kaW5nIjsgLy8kTk9OLU5MUy0xJAotICB9Ci0gIAotICBwdWJsaWMgSVRyZWVFbGVtZW50W10gZ2V0Q2hpbGRyZW4oKQotICB7Ci0gICAgTGlzdCBsaXN0ID0gZ2V0QmluZGluZ09wZXJhdGlvbnMoKTsKLSAgICBJVHJlZUVsZW1lbnRbXSByZXN1bHQgPSBuZXcgSVRyZWVFbGVtZW50W2xpc3Quc2l6ZSgpXTsKLSAgICBsaXN0LnRvQXJyYXkocmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbigpIHsKLQkgIGlmIChnZXRCaW5kaW5nT3BlcmF0aW9ucygpLnNpemUoKSA+IDApIHsKLQkJICByZXR1cm4gdHJ1ZTsKLQkgIH0KLQkgIAotCSAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICBwdWJsaWMgSVRyZWVFbGVtZW50IGdldFBhcmVudCgpIHsKLQkgIHJldHVybiBudWxsOwotICB9Ci0gIAotICBwdWJsaWMgTGlzdCBnZXRCaW5kaW5nT3BlcmF0aW9ucygpCi0gIHsKLSAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgcG9wdWxhdGVBZGFwdGVyTGlzdCgoKEJpbmRpbmcpdGFyZ2V0KS5nZXRFQmluZGluZ09wZXJhdGlvbnMoKSwgbGlzdCk7Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLSAgCi0gIHB1YmxpYyBMaXN0IGdldEJpbmRpbmdPcGVyYXRpb25zKGJvb2xlYW4gY3JlYXRlTWlzc2luZ09wZXJhdGlvbnMsIGJvb2xlYW4gc2hvd0V4dHJhT3BlcmF0aW9ucykKLSAgewotICAgIHJldHVybiBnZXRCaW5kaW5nT3BlcmF0aW9ucygpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMUJpbmRpbmdNZXNzYWdlUmVmZXJlbmNlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMUJpbmRpbmdNZXNzYWdlUmVmZXJlbmNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwZTg2ZmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFCaW5kaW5nTWVzc2FnZVJlZmVyZW5jZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYzsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5XU0RMQmFzZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQmluZGluZ01lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5Db21wb25lbnRSZWZlcmVuY2VVdGlsOwotCi0KLXB1YmxpYyBjbGFzcyBXMTFCaW5kaW5nTWVzc2FnZVJlZmVyZW5jZSBleHRlbmRzIFdTRExCYXNlQWRhcHRlciBpbXBsZW1lbnRzIElCaW5kaW5nTWVzc2FnZVJlZmVyZW5jZSwgSVRyZWVFbGVtZW50Ci17Ci0gIHB1YmxpYyBJVHJlZUVsZW1lbnRbXSBnZXRDaGlsZHJlbigpCi0gIHsKLSAgICByZXR1cm4gSVRyZWVFbGVtZW50LkVNUFRZX0xJU1Q7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKCkgewotCSAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICBwdWJsaWMgSVRyZWVFbGVtZW50IGdldFBhcmVudCgpIHsKLQkgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIEltYWdlIGdldEltYWdlKCkKLSAgeyAgIAotICAgIFN0cmluZyBpbWFnZU5hbWUgPSBudWxsOwotICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBCaW5kaW5nSW5wdXQpCi0gICAgewotICAgICAgaW1hZ2VOYW1lID0gImljb25zL2lucHV0X29iai5naWYiOyAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIGVsc2UgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEJpbmRpbmdPdXRwdXQpCi0gICAgewotICAgICAgaW1hZ2VOYW1lID0gImljb25zL291dHB1dF9vYmouZ2lmIjsgICAgICAgLy8kTk9OLU5MUy0xJAotICAgIH0gCi0gICAgZWxzZSAvL2lmICh0YXJnZXQgaW5zdGFuY2VvZiBCaW5kaW5nRmF1bHQpCi0gICAgewotICAgICAgaW1hZ2VOYW1lID0gImljb25zL2ZhdWx0X29iai5naWYiOyAvLyROT04tTkxTLTEkCi0gICAgfSAgCi0gICAgcmV0dXJuIFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZShpbWFnZU5hbWUpOwotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotICB7Ci0JICBTdHJpbmcgbmFtZSA9IG51bGw7Ci0JICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgQmluZGluZ0lucHV0KQotCSAgewotCQkgIG5hbWUgPSAoKEJpbmRpbmdJbnB1dCkgdGFyZ2V0KS5nZXROYW1lKCk7Ci0JICB9Ci0JICBlbHNlIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBCaW5kaW5nT3V0cHV0KQotCSAgewotCQkgIG5hbWUgPSAoKEJpbmRpbmdPdXRwdXQpIHRhcmdldCkuZ2V0TmFtZSgpOwotCSAgfSAKLQkgIGVsc2UgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEJpbmRpbmdGYXVsdCkKLQkgIHsKLQkJICBuYW1lID0gKChCaW5kaW5nRmF1bHQpIHRhcmdldCkuZ2V0TmFtZSgpOwotCSAgfQotCSAgCi0JICBpZiAobmFtZSA9PSBudWxsKSB7Ci0JCSAgbmFtZSA9ICIiOyAvLyROT04tTkxTLTEkCi0JICB9Ci0KLQkgIHJldHVybiBuYW1lOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRUZXh0KCkKLSAgewotCSAgU3RyaW5nIHRleHQgPSAiIjsgLy8kTk9OLU5MUy0xJAotCSAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEJpbmRpbmdJbnB1dCkKLQkgIHsKLQkJICB0ZXh0ID0gImJpbmRpbmcgaW5wdXQiOyAvLyROT04tTkxTLTEkCi0JICB9Ci0JICBlbHNlIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBCaW5kaW5nT3V0cHV0KQotCSAgewotCQkgIHRleHQgPSAiYmluZGluZyBvdXRwdXQiOyAvLyROT04tTkxTLTEkCi0JICB9IAotCSAgZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgQmluZGluZ0ZhdWx0KQotCSAgewotCQkgIHRleHQgPSAiYmluZGluZyBmYXVsdCI7IC8vJE5PTi1OTFMtMSQKLQkgIH0KLQkgIAotCSAgcmV0dXJuIHRleHQ7Ci0gIH0KLQotICBwdWJsaWMgSU1lc3NhZ2VSZWZlcmVuY2UgZ2V0TWVzc2FnZVJlZmVyZW5jZSgpCi0gIHsKLSAgICBFT2JqZWN0IHJlc3VsdE5vdGlmaWVyID0gbnVsbDsKLSAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgQmluZGluZ0lucHV0KQotICAgIHsKLSAgICAgIHJlc3VsdE5vdGlmaWVyID0gQ29tcG9uZW50UmVmZXJlbmNlVXRpbC5jb21wdXRlSW5wdXQoKEJpbmRpbmdJbnB1dCl0YXJnZXQpOwotICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBCaW5kaW5nT3V0cHV0KQotICAgIHsKLSAgICAgIHJlc3VsdE5vdGlmaWVyID0gQ29tcG9uZW50UmVmZXJlbmNlVXRpbC5jb21wdXRlT3V0cHV0KChCaW5kaW5nT3V0cHV0KXRhcmdldCk7Ci0gICAgfSAgICAgICAgICAKLSAgICBlbHNlIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBCaW5kaW5nRmF1bHQpCi0gICAgewotICAgICAgcmVzdWx0Tm90aWZpZXIgPSBDb21wb25lbnRSZWZlcmVuY2VVdGlsLmNvbXB1dGVGYXVsdCgoQmluZGluZ0ZhdWx0KXRhcmdldCk7Ci0gICAgfSAgICAgICAgICAgICAgIAotICAgIHJldHVybiByZXN1bHROb3RpZmllciAhPSBudWxsID8gKElNZXNzYWdlUmVmZXJlbmNlKWNyZWF0ZUFkYXB0ZXIocmVzdWx0Tm90aWZpZXIpIDogbnVsbDsKLSAgfQotICAKLSAgcHVibGljIExpc3QgZ2V0RXh0ZW5zaWJsaXR5T2JqZWN0cygpCi0gIHsKLSAgICByZXR1cm4gQ29sbGVjdGlvbnMuRU1QVFlfTElTVDsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZ1tdIGdldEFjdGlvbnMoT2JqZWN0IG9iamVjdCkgeyAgICAKLSAgICBDb2xsZWN0aW9uIGFjdGlvbklEcyA9IG5ldyBBcnJheUxpc3QoKTsKLS8vICAgIGlmIChpc1JlYWRPbmx5KCkpIHsKLS8vICAgICAgYWN0aW9uSURzLmFkZChPcGVuSW5OZXdFZGl0b3IuSUQpOwotLy8gICAgfQotICAgIHJldHVybiAoU3RyaW5nIFtdKWFjdGlvbklEcy50b0FycmF5KG5ldyBTdHJpbmdbMF0pOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMUJpbmRpbmdPcGVyYXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExQmluZGluZ09wZXJhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzhkZTQyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExQmluZGluZ09wZXJhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYzsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFjdGlvbnMuT3BlbkluTmV3RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklCaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5Db21wb25lbnRSZWZlcmVuY2VVdGlsOwotCi1wdWJsaWMgY2xhc3MgVzExQmluZGluZ09wZXJhdGlvbiBleHRlbmRzIFdTRExCYXNlQWRhcHRlciBpbXBsZW1lbnRzIElCaW5kaW5nT3BlcmF0aW9uLCBJVHJlZUVsZW1lbnQKLXsKLSAgCi0gIHB1YmxpYyBJT3BlcmF0aW9uIGdldE9wZXJhdGlvbigpCi0gIHsKLSAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbil0YXJnZXQ7Ci0gICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IENvbXBvbmVudFJlZmVyZW5jZVV0aWwuY29tcHV0ZU9wZXJhdGlvbihiaW5kaW5nT3BlcmF0aW9uKTsgICAgCi0gICAgcmV0dXJuIG9wZXJhdGlvbiAhPSBudWxsID8gKElPcGVyYXRpb24pY3JlYXRlQWRhcHRlcihvcGVyYXRpb24pIDogbnVsbDsKLSAgfQotICAKLSAgcHVibGljIExpc3QgZ2V0QmluZGluZ01lc3NhZ2VzKCkKLSAgewotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbil0YXJnZXQ7Ci0gICAgaWYgKGJpbmRpbmdPcGVyYXRpb24uZ2V0RUJpbmRpbmdJbnB1dCgpICE9IG51bGwpCi0gICAgeyAgCi0gICAgICBsaXN0LmFkZChiaW5kaW5nT3BlcmF0aW9uLmdldEVCaW5kaW5nSW5wdXQoKSk7Ci0gICAgfQotICAgIGlmIChiaW5kaW5nT3BlcmF0aW9uLmdldEVCaW5kaW5nT3V0cHV0KCkgIT0gbnVsbCkKLSAgICB7ICAKLSAgICAgIGxpc3QuYWRkKGJpbmRpbmdPcGVyYXRpb24uZ2V0RUJpbmRpbmdPdXRwdXQoKSk7Ci0gICAgfSAgICAgCi0gICAgbGlzdC5hZGRBbGwoYmluZGluZ09wZXJhdGlvbi5nZXRFQmluZGluZ0ZhdWx0cygpKTsKLSAgICBMaXN0IHJlc3VsdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBwb3B1bGF0ZUFkYXB0ZXJMaXN0KGxpc3QsIHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLSAgewotICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKXRhcmdldDsKLSAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gYmluZGluZ09wZXJhdGlvbi5nZXRFT3BlcmF0aW9uKCk7Ci0gICAgcmV0dXJuIG9wZXJhdGlvbiAhPSBudWxsID8gb3BlcmF0aW9uLmdldE5hbWUoKSA6IG51bGw7Ci0gIH0KLQotICBwdWJsaWMgTGlzdCBnZXRFeHRlbnNpYmxpdHlPYmplY3RzKCkKLSAgewotICAgIHJldHVybiBDb2xsZWN0aW9ucy5FTVBUWV9MSVNUOwotICB9Ci0KLSAgcHVibGljIElUcmVlRWxlbWVudFtdIGdldENoaWxkcmVuKCkKLSAgewotICAgIExpc3QgbGlzdCA9IGdldEJpbmRpbmdNZXNzYWdlcygpOwotICAgIElUcmVlRWxlbWVudFtdIHJlc3VsdCA9IG5ldyBJVHJlZUVsZW1lbnRbbGlzdC5zaXplKCldOwotICAgIGxpc3QudG9BcnJheShyZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKCkgewotCSAgaWYgKGdldEJpbmRpbmdNZXNzYWdlcygpLnNpemUoKSA+IDApIHsKLQkJICByZXR1cm4gdHJ1ZTsKLQkgIH0KLQkgIAotCSAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICBwdWJsaWMgSVRyZWVFbGVtZW50IGdldFBhcmVudCgpIHsKLQkgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIEltYWdlIGdldEltYWdlKCkKLSAgewotICAgIFN0cmluZyBpbWFnZU5hbWUgPSAiaWNvbnMvb3BlcmF0aW9uYmluZGluZ19vYmouZ2lmIjsgLy8kTk9OLU5MUy0xJAotICAgIHJldHVybiBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0SW1hZ2UoaW1hZ2VOYW1lKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpCi0gIHsKLSAgICByZXR1cm4gImJpbmRpbmcgb3BlcmF0aW9uIjsgLy8kTk9OLU5MUy0xJAotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nW10gZ2V0QWN0aW9ucyhPYmplY3Qgb2JqZWN0KSB7ICAgIAotICAgIENvbGxlY3Rpb24gYWN0aW9uSURzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGlmIChpc1JlYWRPbmx5KCkpIHsKLSAgICAgIGFjdGlvbklEcy5hZGQoT3BlbkluTmV3RWRpdG9yLklEKTsKLSAgICB9Ci0gICAgcmV0dXJuIChTdHJpbmcgW10pYWN0aW9uSURzLnRvQXJyYXkobmV3IFN0cmluZ1swXSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExQ2F0ZWdvcnlBZGFwdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMUNhdGVnb3J5QWRhcHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTEzMzdkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExQ2F0ZWdvcnlBZGFwdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5XU0RMQmFzZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEQWRkQmluZGluZ0FjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RBZGRJbXBvcnRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEQWRkSW50ZXJmYWNlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTREFkZE1lc3NhZ2VBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEQWRkU2NoZW1hQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTREFkZFNlcnZpY2VBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQVNET2JqZWN0TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUuSUNhdGVnb3J5QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JVHJlZUVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBXMTFDYXRlZ29yeUFkYXB0ZXIgZXh0ZW5kcyBXU0RMQmFzZUFkYXB0ZXIgaW1wbGVtZW50cyBJQ2F0ZWdvcnlBZGFwdGVyLCBJVHJlZUVsZW1lbnQsIElBU0RPYmplY3RMaXN0ZW5lciB7Ci0JICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBJTVBPUlRTID0gMTsKLQkgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFRZUEVTID0gMjsKLQkgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFNFUlZJQ0VTID0gMzsKLQkgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IEJJTkRJTkdTID0gNTsKLQkgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IElOVEVSRkFDRVMgPSA2OwotCSAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgTUVTU0FHRVMgPSA3OwotCSAgCi0JICBwdWJsaWMgc3RhdGljIFN0cmluZyBJTVBPUlRTX0hFQURFUl9URVhUID0gTWVzc2FnZXMuX1VJX0ZPTERFUl9JTVBPUlRTOyAvLyROT04tTkxTLTEkCi0JICBwdWJsaWMgc3RhdGljIFN0cmluZyBUWVBFU19IRUFERVJfVEVYVCA9IE1lc3NhZ2VzLl9VSV9GT0xERVJfVFlQRVM7IC8vJE5PTi1OTFMtMSQKLQkgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFNFUlZJQ0VfSEVBREVSX1RFWFQgPSBNZXNzYWdlcy5fVUlfRk9MREVSX1NFUlZJQ0VTOyAvLyROT04tTkxTLTEkCi0JICBwdWJsaWMgc3RhdGljIFN0cmluZyBCSU5ESU5HX0hFQURFUl9URVhUID0gTWVzc2FnZXMuX1VJX0ZPTERFUl9CSU5ESU5HUzsgLy8kTk9OLU5MUy0xJAotCSAgcHVibGljIHN0YXRpYyBTdHJpbmcgSU5URVJGQUNFX0hFQURFUl9URVhUID0gTWVzc2FnZXMuX1VJX1BPUlRfVFlQRTsgLy8kTk9OLU5MUy0xJAotCSAgcHVibGljIHN0YXRpYyBTdHJpbmcgTUVTU0FHRV9IRUFERVJfVEVYVCA9IE1lc3NhZ2VzLl9VSV9GT0xERVJfTUVTU0FHRVM7IC8vJE5PTi1OTFMtMSQKLQotCSAgcHJvdGVjdGVkIFN0cmluZyB0ZXh0OwotCSAgcHJvdGVjdGVkIEltYWdlIGltYWdlOwotCSAgcHJvdGVjdGVkIGludCBncm91cFR5cGU7Ci0JICBwcm90ZWN0ZWQgQ29sbGVjdGlvbiBjaGlsZHJlbjsKLQkgIHByb3RlY3RlZCBJRGVzY3JpcHRpb24gZGVzY3JpcHRpb247Ci0JICAKLQkgIHB1YmxpYyBXMTFDYXRlZ29yeUFkYXB0ZXIoSURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uLCBTdHJpbmcgbGFiZWwsIEltYWdlIGltYWdlLCBDb2xsZWN0aW9uIGNoaWxkcmVuLCBpbnQgZ3JvdXBUeXBlKSB7Ci0JICAgIHRoaXMudGV4dCA9IGxhYmVsOwotCSAgICB0aGlzLmltYWdlID0gaW1hZ2U7Ci0JICAgIHRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKLQkgICAgdGhpcy50YXJnZXQgPSAoKFcxMURlc2NyaXB0aW9uKSBkZXNjcmlwdGlvbikuZ2V0VGFyZ2V0KCk7Ci0JICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjsKLQkgICAgdGhpcy5ncm91cFR5cGUgPSBncm91cFR5cGU7Ci0JICB9Ci0JICAKLQkgIHB1YmxpYyBEZWZpbml0aW9uIGdldERlZmluaXRpb24oKSB7Ci0JICAgIHJldHVybiAoRGVmaW5pdGlvbikgdGFyZ2V0OwotCSAgfQotCSAgCi0JICBwdWJsaWMgSURlc2NyaXB0aW9uIGdldE93bmVyRGVzY3JpcHRpb24oKSB7Ci0JCSAgcmV0dXJuIGRlc2NyaXB0aW9uOwotCSAgfQotCi0JICBwdWJsaWMgaW50IGdldEdyb3VwVHlwZSgpIHsKLQkgICAgcmV0dXJuIGdyb3VwVHlwZTsKLQkgIH0KLQotCSAgcHVibGljIEltYWdlIGdldEltYWdlKCkgewotCSAgICByZXR1cm4gaW1hZ2U7Ci0JICB9Ci0KLQkgIHB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkgICAgcmV0dXJuIHRleHQ7Ci0JICB9Ci0KLQkgIHB1YmxpYyBJVHJlZUVsZW1lbnRbXSBnZXRDaGlsZHJlbigpIHsKLQkgICAgcmV0dXJuIChJVHJlZUVsZW1lbnRbXSkgY2hpbGRyZW4udG9BcnJheShuZXcgSVRyZWVFbGVtZW50WzBdKTsKLQkgIH0KLQotCSAgcHVibGljIHZvaWQgc2V0Q2hpbGRyZW4oQ29sbGVjdGlvbiBsaXN0KSB7Ci0JICAgIGNoaWxkcmVuID0gbGlzdDsKLQkgIH0KLQotCSAgcHVibGljIE9iamVjdCBnZXRQYXJlbnQoT2JqZWN0IGVsZW1lbnQpIHsKLQkgICAgcmV0dXJuIG51bGw7Ci0JICB9Ci0KLQkgIHB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKE9iamVjdCBlbGVtZW50KSB7Ci0JICAgIHJldHVybiB0cnVlOwotCSAgfQotCSAgCi0JICBwdWJsaWMgU3RyaW5nW10gZ2V0QWN0aW9ucyhPYmplY3Qgb2JqZWN0KSB7ICAgIAotCSAgICBDb2xsZWN0aW9uIGFjdGlvbklEcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkgICAgCi0JICAgIHN3aXRjaCAoZ3JvdXBUeXBlKSB7Ci0JICAgICAgY2FzZSBJTVBPUlRTIDogewotCSAgICAgICAgYWN0aW9uSURzLmFkZChBU0RBZGRJbXBvcnRBY3Rpb24uSUQpOwotCSAgICAgICAgYnJlYWs7Ci0JICAgICAgfQotCSAgICAgIGNhc2UgVFlQRVMgOiB7Ci0JICAgICAgICBhY3Rpb25JRHMuYWRkKEFTREFkZFNjaGVtYUFjdGlvbi5JRCk7Ci0JICAgICAgICBicmVhazsKLQkgICAgICB9Ci0JICAgICAgY2FzZSBTRVJWSUNFUyA6IHsKLQkgICAgICAgIGFjdGlvbklEcy5hZGQoQVNEQWRkU2VydmljZUFjdGlvbi5JRCk7Ci0JICAgICAgICBicmVhazsKLQkgICAgICB9Ci0JICAgICAgY2FzZSBCSU5ESU5HUyA6IHsKLQkgICAgICAgIGFjdGlvbklEcy5hZGQoQVNEQWRkQmluZGluZ0FjdGlvbi5JRCk7Ci0JICAgICAgICBicmVhazsKLQkgICAgICB9Ci0JICAgICAgY2FzZSBJTlRFUkZBQ0VTIDogewotCSAgICAgICAgYWN0aW9uSURzLmFkZChBU0RBZGRJbnRlcmZhY2VBY3Rpb24uSUQpOwotCSAgICAgICAgYnJlYWs7Ci0JICAgICAgfQotCSAgICAgIGNhc2UgTUVTU0FHRVMgOiB7Ci0JICAgIAlhY3Rpb25JRHMuYWRkKEFTREFkZE1lc3NhZ2VBY3Rpb24uSUQpOwotCSAgICAgICAgYnJlYWs7Ci0JICAgICAgfQotCSAgICB9Ci0JICAgIHJldHVybiAoU3RyaW5nIFtdKWFjdGlvbklEcy50b0FycmF5KG5ldyBTdHJpbmdbMF0pOwotCSAgfQotCSAgCi0JICBwdWJsaWMgdm9pZCBwcm9wZXJ0eUNoYW5nZWQoT2JqZWN0IG9iamVjdCwgU3RyaW5nIHByb3BlcnR5KSB7Ci0JICAgIGlmIChnZXRUZXh0KCkuZXF1YWxzKHByb3BlcnR5KSkKLQkgICAgICBub3RpZnlMaXN0ZW5lcnModGhpcywgcHJvcGVydHkpOwotCSAgfQotCSAgCi0JICBwdWJsaWMgSVRyZWVFbGVtZW50IGdldFBhcmVudCgpIHsKLQkJICByZXR1cm4gbnVsbDsKLQkgIH0KLQkgIAotCSAgcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oKSB7Ci0JCSAgaWYgKGdldENoaWxkcmVuKCkubGVuZ3RoID4gMCkgewotCQkJICByZXR1cm4gdHJ1ZTsKLQkJICB9Ci0JCSAgCi0JCSAgcmV0dXJuIGZhbHNlOwotCSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExRGVzY3JpcHRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExRGVzY3JpcHRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjI2YzlhNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMURlc2NyaXB0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkFzc2VydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5Ob3RpZmljYXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlR5cGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuV1NETEJhc2VBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzLlcxMUFkZEJpbmRpbmdDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzLlcxMUFkZEltcG9ydENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMuVzExQWRkSW50ZXJmYWNlQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcy5XMTFBZGRNZXNzYWdlQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcy5XMTFBZGRTY2hlbWFDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzLlcxMUFkZFNlcnZpY2VDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzLlcxMUVkaXROYW1lc3BhY2VzQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RBZGRCaW5kaW5nQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTREFkZEludGVyZmFjZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RBZGRTZXJ2aWNlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSURlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklUcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLkNvbXBvbmVudFJlZmVyZW5jZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMRWRpdG9yVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLnV0aWwuRE9NTmFtZXNwYWNlSW5mb01hbmFnZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIFcxMURlc2NyaXB0aW9uIGV4dGVuZHMgV1NETEJhc2VBZGFwdGVyIGltcGxlbWVudHMgSURlc2NyaXB0aW9uIHsKLQlwcm90ZWN0ZWQgTGlzdCBjYXRlZ29yaWVzID0gbmV3IEFycmF5TGlzdCgpOwotCQotCXByb3RlY3RlZCBXMTFDYXRlZ29yeUFkYXB0ZXIgZ2V0Q2F0ZWdvcnkoaW50IGNhdGVnb3J5SWQpIHsKLQkJcmV0dXJuIGdldENhdGVnb3J5KGNhdGVnb3J5SWQsIGdldENhdGVnb3J5QWRhcHRlcnMoKSk7Ci0JfQotCQotCXByb3RlY3RlZCBXMTFDYXRlZ29yeUFkYXB0ZXIgZ2V0Q2F0ZWdvcnkoaW50IGNhdGVnb3J5SWQsIExpc3QgbGlzdCkgewotCQlJdGVyYXRvciBpdCA9IGxpc3QuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJVzExQ2F0ZWdvcnlBZGFwdGVyIGFkYXB0ZXIgPSAoVzExQ2F0ZWdvcnlBZGFwdGVyKSBpdC5uZXh0KCk7Ci0JCQlpZiAoYWRhcHRlci5nZXRHcm91cFR5cGUoKSA9PSBjYXRlZ29yeUlkKSB7Ci0JCQkJcmV0dXJuIGFkYXB0ZXI7Ci0JCQl9Ci0JCX0KLQkJCi0JCXJldHVybiBudWxsOwotCX0KLQkKLQlwcm90ZWN0ZWQgTGlzdCBnZXRDYXRlZ29yeUFkYXB0ZXJzKCkgewotCSAgICAvLyBqdXN0IHNldCBjYXRlZ29yeWFkYXB0ZXJzJyBjaGlsZHJlbiBpZiBjYXRlZ29yeSBhZGFwdGVycyBhcmUKLQkgICAgLy8gYWxyZWFkeSBjcmVhdGVkCi0JICAgIGlmIChjYXRlZ29yaWVzLnNpemUoKSA9PSAwKSB7Ci0JICAgIAljYXRlZ29yaWVzID0gY3JlYXRlQ2F0ZWdvcnlBZGFwdGVycygpOwotCSAgICB9Ci0JICAgIGVsc2UgewotCSAgICAJVzExQ2F0ZWdvcnlBZGFwdGVyIGNhdGVnb3J5ID0gZ2V0Q2F0ZWdvcnkoVzExQ2F0ZWdvcnlBZGFwdGVyLklNUE9SVFMsIGNhdGVnb3JpZXMpOwotCSAgICAJY2F0ZWdvcnkuc2V0Q2hpbGRyZW4oZ2V0SW1wb3J0cygpKTsKLQkgICAgCQotCSAgICAJY2F0ZWdvcnkgPSBnZXRDYXRlZ29yeShXMTFDYXRlZ29yeUFkYXB0ZXIuVFlQRVMsIGNhdGVnb3JpZXMpOwotCSAgICAJYWRkTGlzdGVuZXJUb1R5cGVzKGNhdGVnb3J5KTsKLQotCSAgICAJY2F0ZWdvcnkgPSBnZXRDYXRlZ29yeShXMTFDYXRlZ29yeUFkYXB0ZXIuU0VSVklDRVMsIGNhdGVnb3JpZXMpOwotCSAgICAJY2F0ZWdvcnkuc2V0Q2hpbGRyZW4oZ2V0U2VydmljZXMoKSk7Ci0KLQkgICAgCWNhdGVnb3J5ID0gZ2V0Q2F0ZWdvcnkoVzExQ2F0ZWdvcnlBZGFwdGVyLkJJTkRJTkdTLCBjYXRlZ29yaWVzKTsKLQkgICAgCWNhdGVnb3J5LnNldENoaWxkcmVuKGdldEJpbmRpbmdzKCkpOwotCi0JICAgIAljYXRlZ29yeSA9IGdldENhdGVnb3J5KFcxMUNhdGVnb3J5QWRhcHRlci5JTlRFUkZBQ0VTLCBjYXRlZ29yaWVzKTsKLQkgICAgCWNhdGVnb3J5LnNldENoaWxkcmVuKGdldEludGVyZmFjZXMoKSk7Ci0KLQkgICAgCWNhdGVnb3J5ID0gZ2V0Q2F0ZWdvcnkoVzExQ2F0ZWdvcnlBZGFwdGVyLk1FU1NBR0VTLCBjYXRlZ29yaWVzKTsKLQkgICAgCWNhdGVnb3J5LnNldENoaWxkcmVuKGdldE1lc3NhZ2VzKCkpOwotCSAgICB9Ci0gICAgCXJldHVybiBjYXRlZ29yaWVzOwotCX0KLQkKLQkvLyBUT0RPOiBybWFoOiByaWdodCBub3cgaXQgbG9va3MgbGlrZSB0aGUgZGVmaW5pdGlvbiBuZWVkcyB0byBrbm93IHRvbyBtdWNoIGFib3V0IHRoZSBjYXRlZ29yaWVzCi0JLy8gV2Ugc2hvdWxkIG1ha2UgdGhlIGNhdGVnb3JpZXMgbW9yZSBzZWxmLXN1ZmZpY2llbnQuLi4uIHNvIGl0IGtub3dzIGhvdyB0byBjb21wdXRlIGl0J3MgY2hpbGRyZW4KLQkvLyBiYXNlZCBvbiBpdCdzIGtpbmQKLQlwcm90ZWN0ZWQgTGlzdCBjcmVhdGVDYXRlZ29yeUFkYXB0ZXJzKCkgewotCQlMaXN0IGNhdGVnb3JpZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQotCQlMaXN0IGltcG9ydExpc3QgPSBnZXRJbXBvcnRzKCk7Ci0vLwkJTGlzdCBzY2hlbWFMaXN0ID0gZ2V0VHlwZXMoKTsKLQkJTGlzdCBzZXJ2aWNlTGlzdCA9IGdldFNlcnZpY2VzKCk7Ci0JCUxpc3QgYmluZGluZ0xpc3QgPSBnZXRCaW5kaW5ncygpOwotCQlMaXN0IGludGVyZmFjZUxpc3QgPSBnZXRJbnRlcmZhY2VzKCk7Ci0JCUxpc3QgbWVzc2FnZUxpc3QgPSBnZXRNZXNzYWdlcygpOwotCi0JCVN0cmluZyBjYXRlZ29yeVRpdGxlID0gVzExQ2F0ZWdvcnlBZGFwdGVyLklNUE9SVFNfSEVBREVSX1RFWFQ7Ci0JCUltYWdlIGNhdGVnb3J5SW1hZ2UgPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0SW1hZ2UoImljb25zL2ltcG9ydGhlYWRlcl9vYmouZ2lmIik7IC8vJE5PTi1OTFMtMSQKLQkJVzExQ2F0ZWdvcnlBZGFwdGVyIGNhdGVnb3J5ID0gbmV3IFcxMUNhdGVnb3J5QWRhcHRlcih0aGlzLCBjYXRlZ29yeVRpdGxlLCBjYXRlZ29yeUltYWdlLCBpbXBvcnRMaXN0LCBXMTFDYXRlZ29yeUFkYXB0ZXIuSU1QT1JUUyk7Ci0JCXJlZ2lzdGVyTGlzdGVuZXIoY2F0ZWdvcnkpOwotCQljYXRlZ29yaWVzLmFkZChjYXRlZ29yeSk7Ci0JCQotCQljYXRlZ29yeVRpdGxlID0gVzExQ2F0ZWdvcnlBZGFwdGVyLlRZUEVTX0hFQURFUl9URVhUOwotCQljYXRlZ29yeUltYWdlID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEltYWdlKCJpY29ucy90eXBlc19vYmouZ2lmIik7IC8vJE5PTi1OTFMtMSQKLQkJY2F0ZWdvcnkgPSBuZXcgVzExVHlwZXNDYXRlZ29yeUFkYXB0ZXIodGhpcywgY2F0ZWdvcnlUaXRsZSwgY2F0ZWdvcnlJbWFnZSwgVzExQ2F0ZWdvcnlBZGFwdGVyLlRZUEVTKTsKLQkJYWRkTGlzdGVuZXJUb1R5cGVzKGNhdGVnb3J5KTsKLQkJcmVnaXN0ZXJMaXN0ZW5lcihjYXRlZ29yeSk7Ci0JCWNhdGVnb3JpZXMuYWRkKGNhdGVnb3J5KTsKLQkJCi0JCWNhdGVnb3J5VGl0bGUgPSBXMTFDYXRlZ29yeUFkYXB0ZXIuU0VSVklDRV9IRUFERVJfVEVYVDsKLQkJY2F0ZWdvcnlJbWFnZSA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgiaWNvbnMvc2VydmljZWhlYWRlcl9vYmouZ2lmIik7IC8vJE5PTi1OTFMtMSQKLQkJY2F0ZWdvcnkgPSBuZXcgVzExQ2F0ZWdvcnlBZGFwdGVyKHRoaXMsIGNhdGVnb3J5VGl0bGUsIGNhdGVnb3J5SW1hZ2UsIHNlcnZpY2VMaXN0LCBXMTFDYXRlZ29yeUFkYXB0ZXIuU0VSVklDRVMpOwotCQlyZWdpc3Rlckxpc3RlbmVyKGNhdGVnb3J5KTsKLQkJY2F0ZWdvcmllcy5hZGQoY2F0ZWdvcnkpOwotCQkKLQkJY2F0ZWdvcnlUaXRsZSA9IFcxMUNhdGVnb3J5QWRhcHRlci5CSU5ESU5HX0hFQURFUl9URVhUOwotCQljYXRlZ29yeUltYWdlID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEltYWdlKCJpY29ucy9iaW5kaW5naGVhZGVyX29iai5naWYiKTsgLy8kTk9OLU5MUy0xJAotCQljYXRlZ29yeSA9IG5ldyBXMTFDYXRlZ29yeUFkYXB0ZXIodGhpcywgY2F0ZWdvcnlUaXRsZSwgY2F0ZWdvcnlJbWFnZSwgYmluZGluZ0xpc3QsIFcxMUNhdGVnb3J5QWRhcHRlci5CSU5ESU5HUyk7Ci0JCXJlZ2lzdGVyTGlzdGVuZXIoY2F0ZWdvcnkpOwotCQljYXRlZ29yaWVzLmFkZChjYXRlZ29yeSk7Ci0JCQotCQljYXRlZ29yeVRpdGxlID0gVzExQ2F0ZWdvcnlBZGFwdGVyLklOVEVSRkFDRV9IRUFERVJfVEVYVDsKLQkJY2F0ZWdvcnlJbWFnZSA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgiaWNvbnMvcG9ydHR5cGVoZWFkZXJfb2JqLmdpZiIpOyAvLyROT04tTkxTLTEkCi0JCWNhdGVnb3J5ID0gbmV3IFcxMUNhdGVnb3J5QWRhcHRlcih0aGlzLCBjYXRlZ29yeVRpdGxlLCBjYXRlZ29yeUltYWdlLCBpbnRlcmZhY2VMaXN0LCBXMTFDYXRlZ29yeUFkYXB0ZXIuSU5URVJGQUNFUyk7Ci0JCXJlZ2lzdGVyTGlzdGVuZXIoY2F0ZWdvcnkpOwotCQljYXRlZ29yaWVzLmFkZChjYXRlZ29yeSk7Ci0JCQotCQljYXRlZ29yeVRpdGxlID0gVzExQ2F0ZWdvcnlBZGFwdGVyLk1FU1NBR0VfSEVBREVSX1RFWFQ7Ci0JCWNhdGVnb3J5SW1hZ2UgPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0SW1hZ2UoImljb25zL21lc3NhZ2VoZWFkZXJfb2JqLmdpZiIpOyAvLyROT04tTkxTLTEkCi0JCWNhdGVnb3J5ID0gbmV3IFcxMUNhdGVnb3J5QWRhcHRlcih0aGlzLCBjYXRlZ29yeVRpdGxlLCBjYXRlZ29yeUltYWdlLCBtZXNzYWdlTGlzdCwgVzExQ2F0ZWdvcnlBZGFwdGVyLk1FU1NBR0VTKTsKLQkJcmVnaXN0ZXJMaXN0ZW5lcihjYXRlZ29yeSk7Ci0JCWNhdGVnb3JpZXMuYWRkKGNhdGVnb3J5KTsKLQkJCi0JCXJldHVybiBjYXRlZ29yaWVzOwotCSAgfQotCQotCS8vIFNwZWNpYWwgY2FzZToKLQkvLyBXZSBuZWVkIHRvIGhhdmUgdGhlIFR5cGVzIG9iamVjdCBpbmZvcm0gb3VyIGZhY2FkZSAoVzExVHlwZXNDYXRlZ29yeUFkYXB0ZXIpIG9mIGl0J3MKLQkvLyBjaGFuZ2VzLiAgVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgcmVzdCBvZiB0aGUgVzExQ2F0ZWdvcnlBZGFwdGVycyB3aGljaCBsaXN0ZW5zCi0JLy8gdG8gdGhlIERlZmluaXRpb24gb2JqZWN0LgotCXByaXZhdGUgdm9pZCBhZGRMaXN0ZW5lclRvVHlwZXMoVzExQ2F0ZWdvcnlBZGFwdGVyIGNhdGVnb3J5KSB7Ci0JCURlZmluaXRpb24gZGVmID0gKERlZmluaXRpb24pIHRoaXMuZ2V0VGFyZ2V0KCk7Ci0JCVR5cGVzIHR5cGVzID0gZGVmLmdldEVUeXBlcygpOwotCQlpZiAodHlwZXMgIT0gbnVsbCAmJiAhdHlwZXMuZUFkYXB0ZXJzKCkuY29udGFpbnMoY2F0ZWdvcnkpKSB7Ci0JCQl0eXBlcy5lQWRhcHRlcnMoKS5hZGQoY2F0ZWdvcnkpOwotCQl9CQotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldFRhcmdldE5hbWVzcGFjZSgpIHsKLQkJcmV0dXJuICgoRGVmaW5pdGlvbikgdGFyZ2V0KS5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRUYXJnZXROYW1lc3BhY2VQcmVmaXgoKSB7Ci0JCVN0cmluZyB0bnMgPSBnZXRUYXJnZXROYW1lc3BhY2UoKTsKLQkJcmV0dXJuICgoRGVmaW5pdGlvbikgdGFyZ2V0KS5nZXRQcmVmaXgodG5zKTsKLQl9Ci0JCi0JcHVibGljIExpc3QgZ2V0U2VydmljZXMoKSB7Ci0JCUxpc3QgYWRhcHRlckxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCUNvbXBvbmVudFJlZmVyZW5jZVV0aWwgdXRpbCA9IG5ldyBDb21wb25lbnRSZWZlcmVuY2VVdGlsKChEZWZpbml0aW9uKSBnZXRUYXJnZXQoKSk7Ci0JCUxpc3Qgc2VydmljZXMgPSB1dGlsLmdldFNlcnZpY2VzKCk7Ci0JCXBvcHVsYXRlQWRhcHRlckxpc3Qoc2VydmljZXMsIGFkYXB0ZXJMaXN0KTsKLQkJCi0JCXJldHVybiBhZGFwdGVyTGlzdDsKLQl9Ci0KLQlwdWJsaWMgTGlzdCBnZXRCaW5kaW5ncygpIHsKLQkJTGlzdCBhZGFwdGVyTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJQ29tcG9uZW50UmVmZXJlbmNlVXRpbCB1dGlsID0gbmV3IENvbXBvbmVudFJlZmVyZW5jZVV0aWwoKERlZmluaXRpb24pIGdldFRhcmdldCgpKTsKLQkJTGlzdCBiaW5kaW5ncyA9IHV0aWwuZ2V0QmluZGluZ3MoKTsKLQkJcG9wdWxhdGVBZGFwdGVyTGlzdChiaW5kaW5ncywgYWRhcHRlckxpc3QpOwotCi0JCXJldHVybiBhZGFwdGVyTGlzdDsKLQl9Ci0KLQlwdWJsaWMgTGlzdCBnZXRJbnRlcmZhY2VzKCkgewotCQlMaXN0IGFkYXB0ZXJMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCQlDb21wb25lbnRSZWZlcmVuY2VVdGlsIHV0aWwgPSBuZXcgQ29tcG9uZW50UmVmZXJlbmNlVXRpbCgoRGVmaW5pdGlvbikgZ2V0VGFyZ2V0KCkpOwotCQlMaXN0IHBvcnRUeXBlcyA9IHV0aWwuZ2V0UG9ydFR5cGVzKCk7Ci0JCXBvcHVsYXRlQWRhcHRlckxpc3QocG9ydFR5cGVzLCBhZGFwdGVyTGlzdCk7Ci0KLQkJcmV0dXJuIGFkYXB0ZXJMaXN0OwotCX0KLQkKLQlwdWJsaWMgTGlzdCBnZXRJbXBvcnRzKCkgewotCQlMaXN0IGFkYXB0ZXJMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCQlwb3B1bGF0ZUFkYXB0ZXJMaXN0KCgoRGVmaW5pdGlvbikgdGFyZ2V0KS5nZXRFSW1wb3J0cygpLCBhZGFwdGVyTGlzdCk7Ci0KLQkJcmV0dXJuIGFkYXB0ZXJMaXN0OwotCX0KLQkKLQlwdWJsaWMgTGlzdCBnZXRUeXBlcygpIHsKLQkJTGlzdCBhZGFwdGVyTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJVHlwZXMgdHlwZXMgPSAoKERlZmluaXRpb24pIHRhcmdldCkuZ2V0RVR5cGVzKCk7Ci0gICAgICAgIGlmICh0eXBlcyAhPSBudWxsKQotICAgICAgICB7ICAKLQkJICBwb3B1bGF0ZUFkYXB0ZXJMaXN0KHR5cGVzLmdldFNjaGVtYXMoKSwgYWRhcHRlckxpc3QpOwotICAgICAgICB9ICAKLQkJcmV0dXJuIGFkYXB0ZXJMaXN0OwotCX0KLQkKLQlwdWJsaWMgTGlzdCBnZXRNZXNzYWdlcygpIHsKLQkJTGlzdCBhZGFwdGVyTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJQ29tcG9uZW50UmVmZXJlbmNlVXRpbCB1dGlsID0gbmV3IENvbXBvbmVudFJlZmVyZW5jZVV0aWwoKERlZmluaXRpb24pIGdldFRhcmdldCgpKTsKLQkJTGlzdCBtZXNzYWdlcyA9IHV0aWwuZ2V0TWVzc2FnZXMoKTsKLQkJcG9wdWxhdGVBZGFwdGVyTGlzdChtZXNzYWdlcywgYWRhcHRlckxpc3QpOwotCi0JCXJldHVybiBhZGFwdGVyTGlzdDsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotCQlTdHJpbmcgbmFtZSA9ICIiOyAvLyROT04tTkxTLTEkCi0JCQotCQlEZWZpbml0aW9uIGRlZmluaXRpb24gPSAoKERlZmluaXRpb24pIHRhcmdldCk7Ci0JCWlmIChkZWZpbml0aW9uLmdldFFOYW1lKCkgIT0gbnVsbCkgewotCQkJbmFtZSA9IGRlZmluaXRpb24uZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLQkJfQotCQlyZXR1cm4gbmFtZTsKLQl9Ci0JCi0JcHVibGljIFN0cmluZ1tdIGdldEFjdGlvbnMoT2JqZWN0IG9iamVjdCkgewotCQlTdHJpbmdbXSBhY3Rpb25JRHMgPSBuZXcgU3RyaW5nWzNdOwotCQlhY3Rpb25JRHNbMF0gPSBBU0RBZGRTZXJ2aWNlQWN0aW9uLklEOwotCQlhY3Rpb25JRHNbMV0gPSBBU0RBZGRCaW5kaW5nQWN0aW9uLklEOwotCQlhY3Rpb25JRHNbMl0gPSBBU0RBZGRJbnRlcmZhY2VBY3Rpb24uSUQ7Ci0JCQotCQlyZXR1cm4gYWN0aW9uSURzOwotCX0KLQkKLQlwdWJsaWMgQ29tbWFuZCBnZXRBZGRJbXBvcnRDb21tYW5kKCkgewotCQlyZXR1cm4gbmV3IFcxMUFkZEltcG9ydENvbW1hbmQoKERlZmluaXRpb24pIHRhcmdldCk7Ci0JfQotCQotCXB1YmxpYyBDb21tYW5kIGdldEFkZFNjaGVtYUNvbW1hbmQoKSB7Ci0JCXJldHVybiBuZXcgVzExQWRkU2NoZW1hQ29tbWFuZCgoRGVmaW5pdGlvbikgdGFyZ2V0KTsKLQl9Ci0JCi0JcHVibGljIENvbW1hbmQgZ2V0QWRkU2VydmljZUNvbW1hbmQoKSB7Ci0JCXJldHVybiBuZXcgVzExQWRkU2VydmljZUNvbW1hbmQoKERlZmluaXRpb24pIHRhcmdldCk7Ci0JfQotCQotCXB1YmxpYyBDb21tYW5kIGdldEFkZEJpbmRpbmdDb21tYW5kKCkgewotCQlyZXR1cm4gbmV3IFcxMUFkZEJpbmRpbmdDb21tYW5kKChEZWZpbml0aW9uKSB0YXJnZXQpOwotCX0KLQkKLQlwdWJsaWMgQ29tbWFuZCBnZXRBZGRJbnRlcmZhY2VDb21tYW5kKCkgewotCQlyZXR1cm4gbmV3IFcxMUFkZEludGVyZmFjZUNvbW1hbmQoKERlZmluaXRpb24pIHRhcmdldCk7CQotCX0KLQkKLQlwdWJsaWMgQ29tbWFuZCBnZXRBZGRNZXNzYWdlQ29tbWFuZCgpIHsKLQkJcmV0dXJuIG5ldyBXMTFBZGRNZXNzYWdlQ29tbWFuZCgoRGVmaW5pdGlvbikgdGFyZ2V0KTsJCi0JfQotCQotCXB1YmxpYyBDb21tYW5kIGdldEVkaXROYW1lc3BhY2VzQ29tbWFuZCgpIHsKLQkJcmV0dXJuIG5ldyBXMTFFZGl0TmFtZXNwYWNlc0NvbW1hbmQoKERlZmluaXRpb24pIHRhcmdldCk7Ci0JfQotCQotCXB1YmxpYyBMaXN0IGdldE5hbWVzcGFjZXNJbmZvKCkgewotCQlET01OYW1lc3BhY2VJbmZvTWFuYWdlciBuYW1lc3BhY2VJbmZvTWFuYWdlciA9IG5ldyBET01OYW1lc3BhY2VJbmZvTWFuYWdlcigpOwotCQlFbGVtZW50IGVsZW1lbnQgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldEVsZW1lbnRGb3JPYmplY3QoKERlZmluaXRpb24pIHRhcmdldCk7Ci0JCXJldHVybiBuYW1lc3BhY2VJbmZvTWFuYWdlci5nZXROYW1lc3BhY2VJbmZvTGlzdChlbGVtZW50KTsKLQl9Ci0JCi0JcHVibGljIEltYWdlIGdldEltYWdlKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQlyZXR1cm4gImRlZmluaXRpb24iOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyBJVHJlZUVsZW1lbnRbXSBnZXRDaGlsZHJlbigpIHsKLQkJTGlzdCBjaGlsZHJlbiA9IGdldENhdGVnb3J5QWRhcHRlcnMoKTsKLQkJcmV0dXJuIChJVHJlZUVsZW1lbnRbXSkgY2hpbGRyZW4udG9BcnJheShuZXcgSVRyZWVFbGVtZW50WzBdKTsKLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oKSB7Ci0JCWlmIChnZXRDaGlsZHJlbigpLmxlbmd0aCA+IDApIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCQotCXB1YmxpYyBJVHJlZUVsZW1lbnQgZ2V0UGFyZW50KCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0JCi0JcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChmaW5hbCBOb3RpZmljYXRpb24gbXNnKSB7Ci0JCS8vIFRPRE86IHJtYWg6IFRoaXMgY29kZSBzaG91bGQgYmUgbW92ZWQgaW50byBXMTFDYXRlZ29yeUFkYXB0ZXIKLQkJY2xhc3MgQ2F0ZWdvcnlOb3RpZmljYXRpb24gZXh0ZW5kcyBOb3RpZmljYXRpb25JbXBsIHsKLQkJCXByb3RlY3RlZCBPYmplY3QgY2F0ZWdvcnk7Ci0JCQkKLQkJCXB1YmxpYyBDYXRlZ29yeU5vdGlmaWNhdGlvbihPYmplY3QgY2F0ZWdvcnkpIHsKLQkJCQlzdXBlcihtc2cuZ2V0RXZlbnRUeXBlKCksIG1zZy5nZXRPbGRWYWx1ZSgpLCBtc2cuZ2V0TmV3VmFsdWUoKSwgbXNnLmdldFBvc2l0aW9uKCkpOwotCQkJCXRoaXMuY2F0ZWdvcnkgPSBjYXRlZ29yeTsKLQkJCX0KLQkJCQotCQkJcHVibGljIE9iamVjdCBnZXROb3RpZmllcigpIHsKLQkJCQlyZXR1cm4gY2F0ZWdvcnk7Ci0JCQl9Ci0JCQkKLQkJCXB1YmxpYyBPYmplY3QgZ2V0RmVhdHVyZSgpIHsKLQkJCQlyZXR1cm4gbXNnLmdldEZlYXR1cmUoKTsKLQkJCX0KLQkJfQotCi0JCWlmIChtc2cuZ2V0RmVhdHVyZSgpID09IFdTRExQYWNrYWdlLmVJTlNUQU5DRS5nZXREZWZpbml0aW9uX0VJbXBvcnRzKCkpIHsKLQkJCVcxMUNhdGVnb3J5QWRhcHRlciBhZGFwdGVyID0gZ2V0Q2F0ZWdvcnkoVzExQ2F0ZWdvcnlBZGFwdGVyLklNUE9SVFMpOwotCQkJQXNzZXJ0LmlzVHJ1ZShhZGFwdGVyICE9IG51bGwpOwotCQkJYWRhcHRlci5zZXRDaGlsZHJlbihnZXRJbXBvcnRzKCkpOwotCQkJbm90aWZ5TGlzdGVuZXJzKG5ldyBDYXRlZ29yeU5vdGlmaWNhdGlvbihhZGFwdGVyKSwgYWRhcHRlci5nZXRUZXh0KCkpOwotCQl9Ci0JCWVsc2UgaWYgKG1zZy5nZXRGZWF0dXJlKCkgPT0gV1NETFBhY2thZ2UuZUlOU1RBTkNFLmdldERlZmluaXRpb25fRVR5cGVzKCkpIHsKLQkJCVcxMUNhdGVnb3J5QWRhcHRlciBhZGFwdGVyID0gZ2V0Q2F0ZWdvcnkoVzExQ2F0ZWdvcnlBZGFwdGVyLlRZUEVTKTsKLQkJCUFzc2VydC5pc1RydWUoYWRhcHRlciAhPSBudWxsKTsKLQkJCWFkYXB0ZXIuc2V0Q2hpbGRyZW4oZ2V0SW1wb3J0cygpKTsKLQkJCW5vdGlmeUxpc3RlbmVycyhuZXcgQ2F0ZWdvcnlOb3RpZmljYXRpb24oYWRhcHRlciksIGFkYXB0ZXIuZ2V0VGV4dCgpKTsKLQkJfQotCQllbHNlIGlmIChtc2cuZ2V0RmVhdHVyZSgpID09IFdTRExQYWNrYWdlLmVJTlNUQU5DRS5nZXREZWZpbml0aW9uX0VTZXJ2aWNlcygpKSB7Ci0JCQlXMTFDYXRlZ29yeUFkYXB0ZXIgYWRhcHRlciA9IGdldENhdGVnb3J5KFcxMUNhdGVnb3J5QWRhcHRlci5TRVJWSUNFUyk7Ci0JCQlBc3NlcnQuaXNUcnVlKGFkYXB0ZXIgIT0gbnVsbCk7Ci0JCQlhZGFwdGVyLnNldENoaWxkcmVuKGdldFNlcnZpY2VzKCkpOwotCQkJbm90aWZ5TGlzdGVuZXJzKG5ldyBDYXRlZ29yeU5vdGlmaWNhdGlvbihhZGFwdGVyKSwgYWRhcHRlci5nZXRUZXh0KCkpOwotCQl9Ci0JCWVsc2UgaWYgKG1zZy5nZXRGZWF0dXJlKCkgPT0gV1NETFBhY2thZ2UuZUlOU1RBTkNFLmdldERlZmluaXRpb25fRUJpbmRpbmdzKCkpIHsKLQkJCVcxMUNhdGVnb3J5QWRhcHRlciBhZGFwdGVyID0gZ2V0Q2F0ZWdvcnkoVzExQ2F0ZWdvcnlBZGFwdGVyLkJJTkRJTkdTKTsKLQkJCUFzc2VydC5pc1RydWUoYWRhcHRlciAhPSBudWxsKTsKLQkJCWFkYXB0ZXIuc2V0Q2hpbGRyZW4oZ2V0QmluZGluZ3MoKSk7Ci0JCQlub3RpZnlMaXN0ZW5lcnMobmV3IENhdGVnb3J5Tm90aWZpY2F0aW9uKGFkYXB0ZXIpLCBhZGFwdGVyLmdldFRleHQoKSk7Ci0JCX0KLQkJZWxzZSBpZiAobXNnLmdldEZlYXR1cmUoKSA9PSBXU0RMUGFja2FnZS5lSU5TVEFOQ0UuZ2V0RGVmaW5pdGlvbl9FUG9ydFR5cGVzKCkpIHsKLQkJCVcxMUNhdGVnb3J5QWRhcHRlciBhZGFwdGVyID0gZ2V0Q2F0ZWdvcnkoVzExQ2F0ZWdvcnlBZGFwdGVyLklOVEVSRkFDRVMpOwotCQkJQXNzZXJ0LmlzVHJ1ZShhZGFwdGVyICE9IG51bGwpOwotCQkJYWRhcHRlci5zZXRDaGlsZHJlbihnZXRJbnRlcmZhY2VzKCkpOwotCQkJbm90aWZ5TGlzdGVuZXJzKG5ldyBDYXRlZ29yeU5vdGlmaWNhdGlvbihhZGFwdGVyKSwgYWRhcHRlci5nZXRUZXh0KCkpOwotCQl9Ci0JCWVsc2UgaWYgKG1zZy5nZXRGZWF0dXJlKCkgPT0gV1NETFBhY2thZ2UuZUlOU1RBTkNFLmdldERlZmluaXRpb25fRU1lc3NhZ2VzKCkpIHsKLQkJCVcxMUNhdGVnb3J5QWRhcHRlciBhZGFwdGVyID0gZ2V0Q2F0ZWdvcnkoVzExQ2F0ZWdvcnlBZGFwdGVyLk1FU1NBR0VTKTsKLQkJCUFzc2VydC5pc1RydWUoYWRhcHRlciAhPSBudWxsKTsKLQkJCWFkYXB0ZXIuc2V0Q2hpbGRyZW4oZ2V0TWVzc2FnZXMoKSk7Ci0JCQlub3RpZnlMaXN0ZW5lcnMobmV3IENhdGVnb3J5Tm90aWZpY2F0aW9uKGFkYXB0ZXIpLCBhZGFwdGVyLmdldFRleHQoKSk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlub3RpZnlMaXN0ZW5lcnMobnVsbCwgbnVsbCk7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMUVuZFBvaW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMUVuZFBvaW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwMGNiMmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFFbmRQb2ludC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYzsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQQWRkcmVzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBBZGRyZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFjdGlvbnMuT3BlbkluTmV3RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcy5XMTFTZXRBZGRyZXNzQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcy5XMTFTZXRCaW5kaW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5zcGVjaWFsaXplZC5XMTFBZGRyZXNzRXh0ZW5zaWJpbGl0eUVsZW1lbnRBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTREFkZEVuZFBvaW50QWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTRERlbGV0ZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RTZXRFeGlzdGluZ0JpbmRpbmdBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEU2V0TmV3QmluZGluZ0FjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5CYXNlU2VsZWN0aW9uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUFTRE9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklBU0RPYmplY3RMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklCaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUVuZFBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUuSVRyZWVFbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgVzExRW5kUG9pbnQgZXh0ZW5kcyBXU0RMQmFzZUFkYXB0ZXIgaW1wbGVtZW50cyBJRW5kUG9pbnQsIElBU0RPYmplY3RMaXN0ZW5lciB7Ci0gCi0gICAgcHJvdGVjdGVkIExpc3QgYWRkcmVzc0V4dGVuc2libGl0eUVsZW1lbnRzID0gbnVsbDsKLSAgICBwcm90ZWN0ZWQgTGlzdCB0aGluZ3NUb0xpc3RlblRvID0gbnVsbDsKLSAgICAKLQlwdWJsaWMgU3RyaW5nIGdldEFkZHJlc3MoKSB7Ci0gICAgICAgIExpc3QgbGlzdCA9IGdldEFkZHJlc3NFeHRlbnNpYmxpdHlFbGVtZW50cygpOwotICAgICAgICBpZiAobGlzdC5zaXplKCkgPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgVzExQWRkcmVzc0V4dGVuc2liaWxpdHlFbGVtZW50QWRhcHRlciBhZGRyZXNzRUUgPSAoVzExQWRkcmVzc0V4dGVuc2liaWxpdHlFbGVtZW50QWRhcHRlcilsaXN0LmdldCgwKTsKLSAgICAgICAgICByZXR1cm4gYWRkcmVzc0VFLmdldExvY2F0aW9uVVJJKCk7Ci0gICAgICAgIH0JCi0JCXJldHVybiAiIjsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgTGlzdCBnZXRBcHBsaWNhYmxlUHJvdG9jb2woKSB7Ci0JCUxpc3QgcHJvdG9jb2xzID0gbmV3IEFycmF5TGlzdCgpOwotCQlwcm90b2NvbHMuYWRkKCJTT0FQIik7Ci0JCXByb3RvY29scy5hZGQoIkhUVFAiKTsKLQkJCi0JCXJldHVybiBwcm90b2NvbHM7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldFByb3RvY29sKFN0cmluZyBuZXdQcm90b2NvbCkgewotCQlTdHJpbmcgY3VycmVudEFkZHJlc3MgPSBnZXRBZGRyZXNzKCk7Ci0JCWlmIChuZXdQcm90b2NvbC5lcXVhbHMoIlNPQVAiKSkgewotCQkJU09BUEFkZHJlc3Mgc29hcCA9IFNPQVBGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTT0FQQWRkcmVzcygpOwotCQkJc29hcC5zZXRMb2NhdGlvblVSSShjdXJyZW50QWRkcmVzcyk7Ci0JCQlzZXROZXdQcm90b2NvbChzb2FwKTsKLQkJfQotCQllbHNlIGlmIChuZXdQcm90b2NvbC5lcXVhbHMoIkhUVFAiKSkgewotCQkJSFRUUEFkZHJlc3MgaHR0cCA9IEhUVFBGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVIVFRQQWRkcmVzcygpOwotCQkJaHR0cC5zZXRMb2NhdGlvblVSSShjdXJyZW50QWRkcmVzcyk7Ci0JCQlzZXROZXdQcm90b2NvbChodHRwKTsKLQkJfQotCX0KLQkKLQlwcml2YXRlIHZvaWQgc2V0TmV3UHJvdG9jb2woRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZWxlbWVudCkgewotCQlQb3J0IHBvcnQgPSBnZXRQb3J0KCk7Ci0JCQotCQlMaXN0IGV4aXN0aW5nRWxlbWVudHMgPSBwb3J0LmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLQkJZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXN0aW5nRWxlbWVudHMuc2l6ZSgpOyBpbmRleCsrKSB7Ci0JCQlPYmplY3QgaXRlbSA9IGV4aXN0aW5nRWxlbWVudHMuZ2V0KGluZGV4KTsKLQkJCWlmIChpdGVtIGluc3RhbmNlb2YgU09BUEFkZHJlc3MgfHwgaXRlbSBpbnN0YW5jZW9mIEhUVFBBZGRyZXNzKSB7Ci0JCQkJZXhpc3RpbmdFbGVtZW50cy5yZW1vdmUoaW5kZXgpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0KLQkJcG9ydC5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChlbGVtZW50KTsKLQl9Ci0gICAgCi0gICAgcHJvdGVjdGVkIExpc3QgZ2V0QWRkcmVzc0V4dGVuc2libGl0eUVsZW1lbnRzKCkKLSAgICB7ICAgICAgIAotICAgICAgICBhZGRyZXNzRXh0ZW5zaWJsaXR5RWxlbWVudHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgIHRoaW5nc1RvTGlzdGVuVG8gPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgIFBvcnQgcG9ydCA9IChQb3J0KSBnZXRUYXJnZXQoKTsgICAgICAgICAgCi0gICAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBwb3J0LmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7ICkKLSAgICAgICAgeyAgIAotICAgICAgICAgIE5vdGlmaWVyIGl0ZW0gPSAoTm90aWZpZXIpaXQubmV4dCgpOwotICAgICAgICAgIEFkYXB0ZXIgYWRhcHRlciA9IGNyZWF0ZUFkYXB0ZXIoaXRlbSk7Ci0gICAgICAgICAgaWYgKGFkYXB0ZXIgaW5zdGFuY2VvZiBXMTFBZGRyZXNzRXh0ZW5zaWJpbGl0eUVsZW1lbnRBZGFwdGVyKQotICAgICAgICAgIHsgIAotICAgICAgICAgICAgYWRkcmVzc0V4dGVuc2libGl0eUVsZW1lbnRzLmFkZChhZGFwdGVyKTsKLSAgICAgICAgICB9ICAgICAgICAgICAgIAotICAgICAgICAgIGlmIChhZGFwdGVyIGluc3RhbmNlb2YgSUFTRE9iamVjdCkKLSAgICAgICAgICB7ICAKLSAgICAgICAgICAgIHRoaW5nc1RvTGlzdGVuVG8uYWRkKGFkYXB0ZXIpOwotICAgICAgICAgIH0gIAotICAgICAgICB9Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IHRoaW5nc1RvTGlzdGVuVG8uaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgICAgewotICAgICAgICAgIElBU0RPYmplY3Qgb2JqZWN0ID0gKElBU0RPYmplY3QpaS5uZXh0KCk7Ci0gICAgICAgICAgb2JqZWN0LnJlZ2lzdGVyTGlzdGVuZXIodGhpcyk7Ci0gICAgICAgIH0gIAotICAgICAgIAotICAgICAgcmV0dXJuIGFkZHJlc3NFeHRlbnNpYmxpdHlFbGVtZW50czsKLSAgICB9Ci0gICAgCi0gICAgcHJvdGVjdGVkIHZvaWQgY2xlYXJBZGRyZXNzRXh0ZW5zaWJsaXR5RWxlbWVudHMoKQotICAgIHsgICAgCi0gICAgICBpZiAodGhpbmdzVG9MaXN0ZW5UbyAhPSBudWxsKQotICAgICAgeyAgCi0gICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IHRoaW5nc1RvTGlzdGVuVG8uaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgICAgewotICAgICAgICAgIElBU0RPYmplY3Qgb2JqZWN0ID0gKElBU0RPYmplY3QpaS5uZXh0KCk7Ci0gICAgICAgICAgb2JqZWN0LnVucmVnaXN0ZXJMaXN0ZW5lcih0aGlzKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgdGhpbmdzVG9MaXN0ZW5UbyA9IG51bGw7Ci0gICAgICBhZGRyZXNzRXh0ZW5zaWJsaXR5RWxlbWVudHMgPSBudWxsOwotICAgIH0KLQotCXB1YmxpYyBJQmluZGluZyBnZXRCaW5kaW5nKCkgewotCQlpZiAoZ2V0UG9ydCgpLmdldEVCaW5kaW5nKCkgIT0gbnVsbCkgewotCQkJcmV0dXJuIChJQmluZGluZykgY3JlYXRlQWRhcHRlcihnZXRQb3J0KCkuZ2V0RUJpbmRpbmcoKSk7Ci0JCX0KLQkJCi0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLQkJcmV0dXJuIGdldFBvcnQoKS5nZXROYW1lKCk7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRUeXBlTmFtZSgpIHsKLQkJU3RyaW5nIHZhbHVlID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJTGlzdCBlZUVsZW1lbnRzID0gZ2V0UG9ydCgpLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLQkJaWYgKGVlRWxlbWVudHMuc2l6ZSgpID4gMCkgewotCQkJT2JqZWN0IG9iamVjdCA9IGVlRWxlbWVudHMuZ2V0KDApOwotCQkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIFNPQVBBZGRyZXNzKSB7Ci0JCQkJdmFsdWUgPSAoKFNPQVBBZGRyZXNzKSBvYmplY3QpLmdldExvY2F0aW9uVVJJKCk7Ci0JCQl9Ci0JCQllbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBIVFRQQWRkcmVzcykgewotCQkJCXZhbHVlID0gKChIVFRQQWRkcmVzcykgb2JqZWN0KS5nZXRMb2NhdGlvblVSSSgpOwotCQkJfQotCQl9Ci0JCQotCQlpZiAodmFsdWUgPT0gbnVsbCkgewotCQkJdmFsdWUgPSAiIjsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JCQotCQlyZXR1cm4gdmFsdWU7Ci0JfQotCQotCXB1YmxpYyBPYmplY3QgZ2V0VHlwZSgpIHsKLQkJcmV0dXJuIGdldEJpbmRpbmcoKTsKLQl9Ci0KLQlwcml2YXRlIFBvcnQgZ2V0UG9ydCgpIHsKLQkJcmV0dXJuIChQb3J0KSB0YXJnZXQ7Ci0JfQotCQotCXB1YmxpYyBJU2VydmljZSBnZXRPd25lclNlcnZpY2UoKSB7Ci0JCXJldHVybiAoSVNlcnZpY2UpIG93bmVyOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nW10gZ2V0QWN0aW9ucyhPYmplY3Qgb2JqZWN0KSB7Ci0gICAgQ29sbGVjdGlvbiBhY3Rpb25JRHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLSAgICBhY3Rpb25JRHMuYWRkKEFTREFkZEVuZFBvaW50QWN0aW9uLklEKTsKLSAgICBhY3Rpb25JRHMuYWRkKEJhc2VTZWxlY3Rpb25BY3Rpb24uU1VCTUVOVV9TVEFSVF9JRCArIE1lc3NhZ2VzLl9VSV9BQ1RJT05fU0VUX0JJTkRJTkcpOyAvLyROT04tTkxTLTEkCi0gICAgYWN0aW9uSURzLmFkZChBU0RTZXROZXdCaW5kaW5nQWN0aW9uLklEKTsKLSAgICBhY3Rpb25JRHMuYWRkKEFTRFNldEV4aXN0aW5nQmluZGluZ0FjdGlvbi5JRCk7Ci0gICAgYWN0aW9uSURzLmFkZChCYXNlU2VsZWN0aW9uQWN0aW9uLlNVQk1FTlVfRU5EX0lEKTsKLSAgICBhY3Rpb25JRHMuYWRkKEFTRERlbGV0ZUFjdGlvbi5JRCk7Ci0gICAgaWYgKGlzUmVhZE9ubHkoKSkgewotICAgICAgYWN0aW9uSURzLmFkZChPcGVuSW5OZXdFZGl0b3IuSUQpOwotICAgIH0KLSAgICByZXR1cm4gKFN0cmluZyBbXSlhY3Rpb25JRHMudG9BcnJheShuZXcgU3RyaW5nWzBdKTsKLQl9Ci0JCi0JcHVibGljIENvbW1hbmQgZ2V0U2V0QmluZGluZ0NvbW1hbmQoSUJpbmRpbmcgYmluZGluZykgewotCQlXMTFCaW5kaW5nIHcxMUJpbmRpbmcgPSAoVzExQmluZGluZykgYmluZGluZzsKLQkJcmV0dXJuIG5ldyBXMTFTZXRCaW5kaW5nQ29tbWFuZCgoUG9ydCkgdGFyZ2V0LCAoQmluZGluZykgdzExQmluZGluZy5nZXRUYXJnZXQoKSk7Ci0JfQotCQotCXB1YmxpYyBDb21tYW5kIGdldFNldEFkZHJlc3NDb21tYW5kKFN0cmluZyBuZXdBZGRyZXNzKSB7Ci0JCXJldHVybiBuZXcgVzExU2V0QWRkcmVzc0NvbW1hbmQoKFBvcnQpIHRoaXMuZ2V0VGFyZ2V0KCksIG5ld0FkZHJlc3MpOwotCX0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBwcm9wZXJ0eUNoYW5nZWQoT2JqZWN0IG9iamVjdCwgU3RyaW5nIHByb3BlcnR5KQotICAgIHsKLSAgICAgIC8vIHRoaXMgaXMgY2FsbGVkIHdoZW4gb25lIG9mIHRoZSAnYWRkcmVzcycgZXh0ZW5zaWJpbGl0eSBlbGVtZW50IGFkYXB0ZXJzIHdlJ3JlIGxpc3RlbmluZyB0byBjaGFuZ2VzCi0gICAgICAvLwotICAgICAgY2xlYXJBZGRyZXNzRXh0ZW5zaWJsaXR5RWxlbWVudHMoKTsgICAgICAKLSAgICAgIG5vdGlmeUxpc3RlbmVycyh0aGlzLCBudWxsKTsKLSAgICB9Ci0JCi0JcHVibGljIEltYWdlIGdldEltYWdlKCkgewotCQlyZXR1cm4gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEltYWdlKCJpY29ucy9wb3J0X29iai5naWYiKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCXJldHVybiAicG9ydCI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIElUcmVlRWxlbWVudFtdIGdldENoaWxkcmVuKCkgewotCQlyZXR1cm4gSVRyZWVFbGVtZW50LkVNUFRZX0xJU1Q7Ci0JfQotCQotCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKCkgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCQotCXB1YmxpYyBJVHJlZUVsZW1lbnQgZ2V0UGFyZW50KCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFByb3RvY29sKCkgewotCQlTdHJpbmcgcHJvdG9jb2wgPSAiIjsgLy8kTk9OLU5MUy0xJAotCQkKLQkJTGlzdCBsaXN0ID0gZ2V0QWRkcmVzc0V4dGVuc2libGl0eUVsZW1lbnRzKCk7Ci0gICAgICAgIGlmIChsaXN0LnNpemUoKSA+IDApIHsKLSAgICAgICAgCVcxMUFkZHJlc3NFeHRlbnNpYmlsaXR5RWxlbWVudEFkYXB0ZXIgYWRkcmVzc0VFID0gKFcxMUFkZHJlc3NFeHRlbnNpYmlsaXR5RWxlbWVudEFkYXB0ZXIpbGlzdC5nZXQoMCk7Ci0gICAgICAgIAlPYmplY3QgdGFyZ2V0ID0gYWRkcmVzc0VFLmdldFRhcmdldCgpOwotICAgICAgICAJCi0gICAgICAgIAkvLyBUT0RPOiBybWFoOiBXZSBzaG91bGQgbm90IHVzaW5nIGhhcmRjb2RlZCBzdHJpbmdzIGFzIHRoZSByZXR1cm5lZCBQcm90b2NvbC4gIFdlIG5lZWQgdG8gZ2V0Ci0gICAgICAgIAkvLyB0aGUgcHJvdG9jb2wgZHluYW1pY2FsbHkuLi4uCi0gICAgICAgIAlpZiAodGFyZ2V0IGluc3RhbmNlb2YgU09BUEFkZHJlc3MpIHsKLSAgICAgICAgCQlwcm90b2NvbCA9ICJTT0FQIjsgLy8kTk9OLU5MUy0xJAotICAgICAgICAJfQotICAgICAgICAJZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgSFRUUEFkZHJlc3MpIHsKLSAgICAgICAgCQlwcm90b2NvbCA9ICJIVFRQIjsgLy8kTk9OLU5MUy0xJAotICAgICAgICAJfQotICAgICAgICB9CQotCi0JCXJldHVybiBwcm90b2NvbDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMUltcG9ydC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFJbXBvcnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTAwODFlNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMUltcG9ydC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5hY3Rpb25zLlcxMU9wZW5JbXBvcnRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNERGVsZXRlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSURlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUltcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JVHJlZUVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBXMTFJbXBvcnQgZXh0ZW5kcyBXU0RMQmFzZUFkYXB0ZXIgaW1wbGVtZW50cyBJSW1wb3J0IHsKLQotCXB1YmxpYyBJbXBvcnQgZ2V0SW1wb3J0KCkgewotCQlyZXR1cm4gKEltcG9ydCkgdGFyZ2V0OwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldE5hbWVzcGFjZSgpIHsKLQkJcmV0dXJuIGdldEltcG9ydCgpLmdldE5hbWVzcGFjZVVSSSgpOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldE5hbWVzcGFjZVByZWZpeCgpIHsKLQkJcmV0dXJuIGdldEltcG9ydCgpLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKS5nZXRQcmVmaXgoZ2V0TmFtZXNwYWNlKCkpOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldExvY2F0aW9uKCkgewotCQlyZXR1cm4gZ2V0SW1wb3J0KCkuZ2V0TG9jYXRpb25VUkkoKTsKLQl9Ci0JCi0JcHVibGljIElEZXNjcmlwdGlvbiBnZXRPd25lckRlc2NyaXB0aW9uKCkgewotCQlyZXR1cm4gKElEZXNjcmlwdGlvbikgb3duZXI7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLQkJSW1wb3J0IHRoZUltcG9ydCA9IChJbXBvcnQpIHRhcmdldDsKLQkJcmV0dXJuIHRoZUltcG9ydC5nZXRMb2NhdGlvblVSSSgpOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nW10gZ2V0QWN0aW9ucyhPYmplY3Qgb2JqZWN0KSB7Ci0JCVN0cmluZ1tdIGFjdGlvbklEcyA9IG5ldyBTdHJpbmdbMl07Ci0JCWFjdGlvbklEc1swXSA9IFcxMU9wZW5JbXBvcnRBY3Rpb24uSUQ7Ci0JCWFjdGlvbklEc1sxXSA9IEFTRERlbGV0ZUFjdGlvbi5JRDsgICAgCi0JCXJldHVybiBhY3Rpb25JRHM7Ci0JfQotCQotCXB1YmxpYyBJbWFnZSBnZXRJbWFnZSgpIHsKLQkJcmV0dXJuIFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgiaWNvbnMvaW1wb3J0X29iai5naWYiKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCXJldHVybiAiaW1wb3J0IjsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgSVRyZWVFbGVtZW50W10gZ2V0Q2hpbGRyZW4oKSB7Ci0JCXJldHVybiBJVHJlZUVsZW1lbnQuRU1QVFlfTElTVDsKLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCi0JcHVibGljIElUcmVlRWxlbWVudCBnZXRQYXJlbnQoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExSW50ZXJmYWNlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMUludGVyZmFjZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MGNlZDkwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExSW50ZXJmYWNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWN0aW9ucy5PcGVuSW5OZXdFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuV1NETEJhc2VBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzLlcxMUFkZE9wZXJhdGlvbkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEQWRkT3BlcmF0aW9uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTRERlbGV0ZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUuSVRyZWVFbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgVzExSW50ZXJmYWNlIGV4dGVuZHMgV1NETEJhc2VBZGFwdGVyIGltcGxlbWVudHMgSUludGVyZmFjZSB7Ci0KLQlwdWJsaWMgTGlzdCBnZXRPcGVyYXRpb25zKCkgewotCQlMaXN0IGFkYXB0ZXJMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCQlwb3B1bGF0ZUFkYXB0ZXJMaXN0KCgoUG9ydFR5cGUpIHRhcmdldCkuZ2V0RU9wZXJhdGlvbnMoKSwgYWRhcHRlckxpc3QpOwotCi0JCXJldHVybiBhZGFwdGVyTGlzdDsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotCQlyZXR1cm4gKChQb3J0VHlwZSkgdGFyZ2V0KS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nW10gZ2V0QWN0aW9ucyhPYmplY3Qgb2JqZWN0KSB7Ci0gICAgTGlzdCBhY3Rpb25JRHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgYWN0aW9uSURzLmFkZChBU0RBZGRPcGVyYXRpb25BY3Rpb24uSUQpOwotICAgIGFjdGlvbklEcy5hZGQoQVNERGVsZXRlQWN0aW9uLklEKTsKLSAgICBpZiAoaXNSZWFkT25seSgpKSB7Ci0gICAgICBhY3Rpb25JRHMuYWRkKE9wZW5Jbk5ld0VkaXRvci5JRCk7Ci0gICAgfQotICAgIHJldHVybiAoU3RyaW5nIFtdKWFjdGlvbklEcy50b0FycmF5KG5ldyBTdHJpbmdbMF0pOwotCX0KLQkKLQlwdWJsaWMgQ29tbWFuZCBnZXRBZGRPcGVyYXRpb25Db21tYW5kKCkgewotCQlyZXR1cm4gbmV3IFcxMUFkZE9wZXJhdGlvbkNvbW1hbmQoKFBvcnRUeXBlKSB0YXJnZXQpOwotCX0KLQkKLQlwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoKSB7Ci0JCXJldHVybiBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0SW1hZ2UoImljb25zL3BvcnR0eXBlX29iai5naWYiKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCXJldHVybiAicG9ydFR5cGUiOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyBJVHJlZUVsZW1lbnRbXSBnZXRDaGlsZHJlbigpIHsKLQkJTGlzdCBvcGVyYXRpb25zID0gZ2V0T3BlcmF0aW9ucygpOwotCQlJVHJlZUVsZW1lbnRbXSB0cmVlRWxlbWVudHMgPSBuZXcgSVRyZWVFbGVtZW50W29wZXJhdGlvbnMuc2l6ZSgpXTsKLQkJCi0JCWZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYXRpb25zLnNpemUoKTsgaW5kZXgrKykgewotCQkJdHJlZUVsZW1lbnRzW2luZGV4XSA9IChJVHJlZUVsZW1lbnQpIG9wZXJhdGlvbnMuZ2V0KGluZGV4KTsKLQkJfQotCQkKLQkJcmV0dXJuIHRyZWVFbGVtZW50czsKLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oKSB7Ci0JCWlmIChnZXRDaGlsZHJlbigpLmxlbmd0aCA+IDApIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCQotCXB1YmxpYyBJVHJlZUVsZW1lbnQgZ2V0UGFyZW50KCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMU1lc3NhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExTWVzc2FnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzFiOWE1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExTWVzc2FnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYzsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFjdGlvbnMuT3BlbkluTmV3RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5hY3Rpb25zLlcxMUFkZFBhcnRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMuVzExQWRkUGFydENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNERGVsZXRlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSURlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUuSVRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETEFkYXB0ZXJGYWN0b3J5SGVscGVyOwotCi0KLXB1YmxpYyBjbGFzcyBXMTFNZXNzYWdlIGV4dGVuZHMgV1NETEJhc2VBZGFwdGVyIGltcGxlbWVudHMgSU1lc3NhZ2UgewotCi0JcHVibGljIExpc3QgZ2V0UGFydHMoKSB7Ci0JCUxpc3QgYWRhcHRlckxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0vLwkJcG9wdWxhdGVBZGFwdGVyTGlzdCgoKE1lc3NhZ2UpIHRhcmdldCkuZ2V0RVBhcnRzKCksIGFkYXB0ZXJMaXN0KTsKLQkJSXRlcmF0b3IgcGFydHMgPSAoKE1lc3NhZ2UpIHRhcmdldCkuZ2V0RVBhcnRzKCkuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKHBhcnRzLmhhc05leHQoKSkgewotCQkJTm90aWZpZXIgY29tcG9uZW50ID0gKE5vdGlmaWVyKSBwYXJ0cy5uZXh0KCk7Ci0JCQlBZGFwdGVyIGFkYXB0ZXIgPSBXU0RMQWRhcHRlckZhY3RvcnlIZWxwZXIuZ2V0SW5zdGFuY2UoKS5hZGFwdChjb21wb25lbnQpOwotCQkJYWRhcHRlckxpc3QuYWRkKGFkYXB0ZXIpOwkJCQotCQl9Ci0KLQkJcmV0dXJuIGFkYXB0ZXJMaXN0OwotCX0KLQkKLQlwdWJsaWMgSURlc2NyaXB0aW9uIGdldE93bmVyRGVzY3JpcHRpb24oKSB7Ci0JCXJldHVybiAoSURlc2NyaXB0aW9uKSBvd25lcjsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0JCWlmICgoKE1lc3NhZ2UpIHRhcmdldCkuZ2V0UU5hbWUoKSAhPSBudWxsKSB7Ci0JCQlyZXR1cm4gKChNZXNzYWdlKSB0YXJnZXQpLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0JCX0KLQkJCi0JCXJldHVybiAiIjsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgU3RyaW5nW10gZ2V0QWN0aW9ucyhPYmplY3Qgb2JqZWN0KSB7Ci0gICAgTGlzdCBhY3Rpb25JRHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgYWN0aW9uSURzLmFkZChXMTFBZGRQYXJ0QWN0aW9uLklEKTsKLSAgICBhY3Rpb25JRHMuYWRkKEFTRERlbGV0ZUFjdGlvbi5JRCk7Ci0gICAgaWYgKGlzUmVhZE9ubHkoKSkgewotICAgICAgYWN0aW9uSURzLmFkZChPcGVuSW5OZXdFZGl0b3IuSUQpOwotICAgIH0KLSAgICByZXR1cm4gKFN0cmluZyBbXSlhY3Rpb25JRHMudG9BcnJheShuZXcgU3RyaW5nWzBdKTsKLQl9Ci0JCi0JcHVibGljIENvbW1hbmQgZ2V0QWRkUGFydENvbW1hbmQoKSB7Ci0JCXJldHVybiBuZXcgVzExQWRkUGFydENvbW1hbmQoKE1lc3NhZ2UpIHRhcmdldCk7Ci0JfQotCQotCXB1YmxpYyBJbWFnZSBnZXRJbWFnZSgpIHsKLQkJcmV0dXJuIFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgiaWNvbnMvbWVzc2FnZV9vYmouZ2lmIik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQlyZXR1cm4gIm1lc3NhZ2UiOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyBJVHJlZUVsZW1lbnRbXSBnZXRDaGlsZHJlbigpIHsKLQkJTGlzdCBwYXJ0cyA9IGdldFBhcnRzKCk7Ci0JCUlUcmVlRWxlbWVudFtdIHRyZWVFbGVtZW50cyA9IG5ldyBJVHJlZUVsZW1lbnRbcGFydHMuc2l6ZSgpXTsKLQkJCi0JCWZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBwYXJ0cy5zaXplKCk7IGluZGV4KyspIHsKLQkJCXRyZWVFbGVtZW50c1tpbmRleF0gPSAoSVRyZWVFbGVtZW50KSBwYXJ0cy5nZXQoaW5kZXgpOwotCQl9Ci0JCQotCQlyZXR1cm4gdHJlZUVsZW1lbnRzOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKCkgewotCQlpZiAoZ2V0Q2hpbGRyZW4oKS5sZW5ndGggPiAwKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQkKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXB1YmxpYyBJVHJlZUVsZW1lbnQgZ2V0UGFyZW50KCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMU1lc3NhZ2VSZWZlcmVuY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExTWVzc2FnZVJlZmVyZW5jZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjA4NzNmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExTWVzc2FnZVJlZmVyZW5jZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYzsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk91dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuV1NETEJhc2VBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmFjdGlvbnMuVzExQWRkUGFydEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5hY3Rpb25zLlcxMVNldEV4aXN0aW5nTWVzc2FnZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5hY3Rpb25zLlcxMVNldE5ld01lc3NhZ2VBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMuVzExQWRkRmF1bHRQYXJhbWV0ZXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzLlcxMUFkZElucHV0UGFyYW1ldGVyQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcy5XMTFBZGRPdXRwdXRQYXJhbWV0ZXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzLlcxMVJlb3JkZXJQYXJhbWV0ZXJzQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy52aXNpdG9yLlcxMUZpbmRJbm5lckVsZW1lbnRWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTREFkZEZhdWx0QWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTREFkZE9wZXJhdGlvbkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0REZWxldGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQmFzZVNlbGVjdGlvbkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmZpZ3VyZXMuTW9kZWxEaWFnbm9zdGljSW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklBU0RPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQVNET2JqZWN0TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklUcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC52aXNpdG9yLldTRExWaXNpdG9yRm9yUGFyYW1ldGVyczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0b3IuUHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERWxlbWVudERlY2xhcmF0aW9uOwotCi0KLXB1YmxpYyBjbGFzcyBXMTFNZXNzYWdlUmVmZXJlbmNlIGV4dGVuZHMgV1NETEJhc2VBZGFwdGVyIGltcGxlbWVudHMgSU1lc3NhZ2VSZWZlcmVuY2UsIElBU0RPYmplY3RMaXN0ZW5lcgotewotICBwcm90ZWN0ZWQgaW50IG1lc3NhZ2VLaW5kID0gLTE7Ci0gIHByb3RlY3RlZCBMaXN0IHBhcmFtZXRlcnMgPSBudWxsOwotICBwcm90ZWN0ZWQgTGlzdCBvdGhlclRoaW5nc1RvTGlzdGVuVG8gPSBudWxsOwotICAKLSAgcHVibGljIFcxMU1lc3NhZ2VSZWZlcmVuY2UoaW50IG1lc3NhZ2VLaW5kKQotICB7Ci0gICAgdGhpcy5tZXNzYWdlS2luZCA9IG1lc3NhZ2VLaW5kOwotICB9Ci0KLSAgcHVibGljIElPcGVyYXRpb24gZ2V0T3duZXJPcGVyYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIChJT3BlcmF0aW9uKSBvd25lcjsKLSAgfQotICAKLSAgLyoKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0TWVzc2FnZVN0cmluZyhTdHJpbmcga2V5LCBPYmplY3RbXSBhcmdzKSB7Ci0JICBTdHJpbmcgc3RyaW5nID0gbnVsbDsKLQotCSAgT2JqZWN0IG9iamVjdCA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyKCk7Ci0JICBpZiAob2JqZWN0IGluc3RhbmNlb2YgUHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlcikgewotCQkgIFByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIgcHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlciA9IChQcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyKW9iamVjdDsKLQkJICBTdHJpbmcgbmV3U3RyaW5nID0gcHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlci5nZXRQcm9kdWN0U3RyaW5nKGtleSwgYXJncyk7Ci0JCSAgaWYgKG5ld1N0cmluZyAhPSBudWxsKSB7Ci0JCQkgIHN0cmluZyA9IG5ld1N0cmluZzsKLQkJICB9Ci0JICB9Ci0KLQkgIHJldHVybiBzdHJpbmc7Ci0gIH0KLSAgKi8KLSAgCi0gIC8vIENvbnZlbmllbmNlIG1ldGhvZAotICBwdWJsaWMgTWVzc2FnZVJlZmVyZW5jZSBnZXRNZXNzYWdlUmVmZXJlbmNlKCkKLSAgewotICAgIHJldHVybiAoTWVzc2FnZVJlZmVyZW5jZSkgdGFyZ2V0OwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgY29tcHV0ZU1lc3NhZ2VLaW5kKCkKLSAgewotICAgIGlmIChnZXRNZXNzYWdlUmVmZXJlbmNlKCkgaW5zdGFuY2VvZiBJbnB1dCkKLSAgICB7Ci0gICAgICBtZXNzYWdlS2luZCA9IEtJTkRfSU5QVVQ7Ci0gICAgfQotICAgIGVsc2UgaWYgKGdldE1lc3NhZ2VSZWZlcmVuY2UoKSBpbnN0YW5jZW9mIE91dHB1dCkKLSAgICB7Ci0gICAgICBtZXNzYWdlS2luZCA9IEtJTkRfT1VUUFVUOwotICAgIH0KLSAgICBlbHNlIGlmIChnZXRNZXNzYWdlUmVmZXJlbmNlKCkgaW5zdGFuY2VvZiBGYXVsdCkKLSAgICAgIG1lc3NhZ2VLaW5kID0gS0lORF9GQVVMVDsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0S2luZCgpCi0gIHsKLQkgIGlmIChtZXNzYWdlS2luZCA9PSAtMSkKLQkgIHsKLQkJICBjb21wdXRlTWVzc2FnZUtpbmQoKTsKLQkgIH0KLQkgIHJldHVybiBtZXNzYWdlS2luZDsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLSAgewotCSAgTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmID0gZ2V0TWVzc2FnZVJlZmVyZW5jZSgpOwotCSAgaWYgKG1lc3NhZ2VSZWYuZ2V0TmFtZSgpICE9IG51bGwpIHsKLQkJICByZXR1cm4gbWVzc2FnZVJlZi5nZXROYW1lKCk7Ci0JICB9Ci0JICAKLQkgIHJldHVybiAiIjsgLy8kTk9OLU5MUy0xJAotICB9Ci0KLSAgcHVibGljIExpc3QgZ2V0UGFyYW1ldGVycygpCi0gIHsKLQkgIExpc3QgcGFyYW1ldGVycyA9IG5ldyBBcnJheUxpc3QoKTsKLQkgIExpc3QgcGFydHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JICBNZXNzYWdlUmVmZXJlbmNlIG1lc3NhZ2VSZWYgPSBnZXRNZXNzYWdlUmVmZXJlbmNlKCk7Ci0JICBpZiAobWVzc2FnZVJlZiAhPSBudWxsKSB7Ci0JCSAgaWYgKG1lc3NhZ2VSZWYuZ2V0RU1lc3NhZ2UoKSAhPSBudWxsKSB7Ci0JCQkgIGlmIChtZXNzYWdlUmVmLmdldEVNZXNzYWdlKCkuZ2V0RVBhcnRzKCkgIT0gbnVsbCkgewotCQkJCSAgcGFydHMgPSBtZXNzYWdlUmVmLmdldEVNZXNzYWdlKCkuZ2V0RVBhcnRzKCk7Ci0JCQkgIH0KLQkJICB9Ci0JICB9Ci0JICAKLQkgIHBvcHVsYXRlQWRhcHRlckxpc3QocGFydHMsIHBhcmFtZXRlcnMpOwotCSAgCi0JICBvdGhlclRoaW5nc1RvTGlzdGVuVG8gPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICBXU0RMVmlzaXRvckZvclBhcmFtZXRlcnMgdmlzaXRvckZvclBhcmFtZXRlcnMgPSBuZXcgV1NETFZpc2l0b3JGb3JQYXJhbWV0ZXJzKCk7Ci0gICAgICB2aXNpdG9yRm9yUGFyYW1ldGVycy52aXNpdE1lc3NhZ2VSZWZlcmVuY2UobWVzc2FnZVJlZik7Ci0gICAgICBwb3B1bGF0ZUFkYXB0ZXJMaXN0KHZpc2l0b3JGb3JQYXJhbWV0ZXJzLmNvbmNyZXRlQ29tcG9uZW50cywgb3RoZXJUaGluZ3NUb0xpc3RlblRvKTsKLSAgICAgIHBvcHVsYXRlQWRhcHRlckxpc3QodmlzaXRvckZvclBhcmFtZXRlcnMudGhpbmdzVG9MaXN0ZW5Ubywgb3RoZXJUaGluZ3NUb0xpc3RlblRvKTsKLSAgICAgIAotICAgICAgLy8gbm93IHdlIGxpc3RlbiB0byBhbGwgdGhlICd0aGluZ3Mgd2UgbmVlZCB0byBsaXN0ZW4gdG8nCi0gICAgICAvLwotICAgICAgZm9yIChJdGVyYXRvciBpID0gb3RoZXJUaGluZ3NUb0xpc3RlblRvLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICAgIHsKLSAgICAgICAgQWRhcHRlciBhZGFwdGVyID0gKEFkYXB0ZXIpIGkubmV4dCgpOwotICAgICAgICBpZiAoYWRhcHRlciBpbnN0YW5jZW9mIElBU0RPYmplY3QpCi0gICAgICAgIHsKLSAgICAgICAgICBJQVNET2JqZWN0IGFzZE9iamVjdCA9IChJQVNET2JqZWN0KSBhZGFwdGVyOwotICAgICAgICAgIGFzZE9iamVjdC5yZWdpc3Rlckxpc3RlbmVyKHRoaXMpOwotICAgICAgICB9Ci0gICAgICB9Ci0JICAKLQkgIHJldHVybiBwYXJhbWV0ZXJzOwotICAgIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHByb3BlcnR5Q2hhbmdlZChPYmplY3Qgb2JqZWN0LCBTdHJpbmcgcHJvcGVydHkpCi0gIHsKLSAgICAvLyB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBvbmUgb2YgdGhlICdvdGhlclRoaW5nc1RvTGlzdGVuVG8nIGhhcyBjaGFuZ2VkCi0gICAgLy8gd2hlbiBvbmUgb2YgdGhlc2UgdGhpbmdzIGNoYW5nZXMgaXQgbWVhbnMgb3VyIHBhcmFtdGVyIGxpc3QgbWF5IGhhdmUgY2hhbmdlcwotICAgIC8vIHNvIHdlIG5lZWQgdG8gcmVjb21wdXRlIGl0Ci0vLyAgICBPYmplY3Qgbm90aWZpZXIgPSBudWxsOwotLy8gICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEFkYXB0ZXIpCi0vLyAgICB7Ci0vLyAgICAgIG5vdGlmaWVyID0gKChBZGFwdGVyKW9iamVjdCkuZ2V0VGFyZ2V0KCk7Ci0vLyAgICB9ICAKLS8vICAgIFN5c3RlbS5vdXQucHJpbnRsbigic29tZXRoaW5nIGluIHRoZSAnb3RoZXJUaGluZ3NUb0xpc3RlblRvJyBsaXN0IGhhcyBjaGFuZ2VkICIgKyBub3RpZmllcik7ICAgIAotICAgIGNsZWFyUGFyYW1ldGVycygpOwotICAgIG5vdGlmeUxpc3RlbmVycyh0aGlzLCBudWxsKTsgICAgIAotICB9Ci0gIAotICBwcm90ZWN0ZWQgdm9pZCBjbGVhclBhcmFtZXRlcnMoKQotICB7Ci0gICAgaWYgKG90aGVyVGhpbmdzVG9MaXN0ZW5UbyAhPSBudWxsKQotICAgIHsKLSAgICAgIGZvciAoSXRlcmF0b3IgaSA9IG90aGVyVGhpbmdzVG9MaXN0ZW5Uby5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIEFkYXB0ZXIgYWRhcHRlciA9IChBZGFwdGVyKSBpLm5leHQoKTsKLSAgICAgICAgaWYgKGFkYXB0ZXIgaW5zdGFuY2VvZiBJQVNET2JqZWN0KQotICAgICAgICB7Ci0gICAgICAgICAgSUFTRE9iamVjdCBhc2RPYmplY3QgPSAoSUFTRE9iamVjdCkgYWRhcHRlcjsKLSAgICAgICAgICBhc2RPYmplY3QudW5yZWdpc3Rlckxpc3RlbmVyKHRoaXMpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHBhcmFtZXRlcnMgPSBudWxsOyAgICAKLSAgICBvdGhlclRoaW5nc1RvTGlzdGVuVG8gPSBudWxsOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBtc2cpCi0gIHsKLSAgICBjbGVhclBhcmFtZXRlcnMoKTsgICAgCi0gICAgc3VwZXIubm90aWZ5Q2hhbmdlZChtc2cpOyAgICAKLSAgfQotICAKLSAgcHVibGljIFN0cmluZ1tdIGdldEFjdGlvbnMoT2JqZWN0IG9iamVjdCkKLSAgewotCSAgTGlzdCBhY3Rpb25zID0gbmV3IEFycmF5TGlzdCgpOwotCSAgYWN0aW9ucy5hZGQoQVNEQWRkT3BlcmF0aW9uQWN0aW9uLklEKTsJICAKLQkgIGFjdGlvbnMuYWRkQWxsKCgoVzExT3BlcmF0aW9uKSBnZXRPd25lck9wZXJhdGlvbigpKS5nZXRWYWxpZElucHV0T3V0cHVBY3Rpb25zKCkpOyAKLQkgIGFjdGlvbnMuYWRkKEFTREFkZEZhdWx0QWN0aW9uLklEKTsKLQkgIGFjdGlvbnMuYWRkKFcxMUFkZFBhcnRBY3Rpb24uSUQpOwotCSAgYWN0aW9ucy5hZGQoQVNERGVsZXRlQWN0aW9uLklEKTsKLQkgIGFjdGlvbnMuYWRkKEJhc2VTZWxlY3Rpb25BY3Rpb24uU1VCTUVOVV9TVEFSVF9JRCArIE1lc3NhZ2VzLl9VSV9BQ1RJT05fU0VUX01FU1NBR0UpOyAvLyROT04tTkxTLTEkCi0JICBhY3Rpb25zLmFkZChXMTFTZXROZXdNZXNzYWdlQWN0aW9uLklEKTsKLQkgIGFjdGlvbnMuYWRkKFcxMVNldEV4aXN0aW5nTWVzc2FnZUFjdGlvbi5JRCk7Ci0JICBhY3Rpb25zLmFkZChCYXNlU2VsZWN0aW9uQWN0aW9uLlNVQk1FTlVfRU5EX0lEKTsKLS8vICAgIGlmIChpc1JlYWRPbmx5KCkpIHsKLS8vICAgICAgYWN0aW9ucy5hZGQoT3BlbkluTmV3RWRpdG9yLklEKTsKLS8vICAgIH0KLQotCSAgU3RyaW5nW10gYWN0aW9uSURzID0gbmV3IFN0cmluZ1thY3Rpb25zLnNpemUoKV07Ci0JICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgYWN0aW9ucy5zaXplKCk7IGluZGV4KyspIHsKLQkJICBhY3Rpb25JRHNbaW5kZXhdID0gKFN0cmluZykgYWN0aW9ucy5nZXQoaW5kZXgpOwotCSAgfQotCSAgCi0JICByZXR1cm4gYWN0aW9uSURzOwotICB9Ci0gIAotICBwdWJsaWMgQ29tbWFuZCBnZXRSZW9yZGVyUGFyYW1ldGVyc0NvbW1hbmQoSVBhcmFtZXRlciBsZWZ0U2libGluZywgSVBhcmFtZXRlciByaWdodFNpYmxpbmcsIElQYXJhbWV0ZXIgbW92aW5nUGFyYW1ldGVyKSB7Ci0JICByZXR1cm4gbmV3IFcxMVJlb3JkZXJQYXJhbWV0ZXJzQ29tbWFuZChsZWZ0U2libGluZywgcmlnaHRTaWJsaW5nLCBtb3ZpbmdQYXJhbWV0ZXIpOwotICB9Ci0gIAotICBwdWJsaWMgQ29tbWFuZCBnZXRBZGRQYXJhbXRlckNvbW1hbmQoKSB7Ci0gICAgICBDb21tYW5kIGNvbW1hbmQgPSBudWxsOwotICAgICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IChPcGVyYXRpb24pZ2V0TWVzc2FnZVJlZmVyZW5jZSgpLmVDb250YWluZXIoKTsKLSAgICAgIGlmIChnZXRLaW5kKCkgPT0gS0lORF9JTlBVVCkKLSAgICAgIHsgICAgCi0gICAgICAgIGNvbW1hbmQgPSBuZXcgVzExQWRkSW5wdXRQYXJhbWV0ZXJDb21tYW5kKG9wZXJhdGlvbik7Ci0gICAgICB9ICAKLSAgICAgIGVsc2UgaWYgKGdldEtpbmQoKSA9PSBLSU5EX09VVFBVVCkKLSAgICAgIHsKLSAgICAgICAgY29tbWFuZCA9IG5ldyBXMTFBZGRPdXRwdXRQYXJhbWV0ZXJDb21tYW5kKG9wZXJhdGlvbik7ICAgICAgICAKLSAgICAgIH0gCi0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGNvbW1hbmQgPSBuZXcgVzExQWRkRmF1bHRQYXJhbWV0ZXJDb21tYW5kKG9wZXJhdGlvbiwgKEZhdWx0KWdldE1lc3NhZ2VSZWZlcmVuY2UoKSk7ICAgICAgICAKLSAgICAgIH0gCi0gICAgICByZXR1cm4gY29tbWFuZDsKLSAgfSAgCi0gIAotCXB1YmxpYyBJbWFnZSBnZXRJbWFnZSgpIHsKLQkgICAgaWYgKGdldEtpbmQoKSA9PSBLSU5EX0lOUFVUKQotCSAgICB7Ci0JICAgIAlyZXR1cm4gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEltYWdlKCJpY29ucy9pbnB1dF9vYmouZ2lmIik7IC8vJE5PTi1OTFMtMSQKLQkgICAgfQotCSAgICBlbHNlIGlmIChnZXRLaW5kKCkgPT0gS0lORF9PVVRQVVQpCi0JICAgIHsKLQkgICAgCXJldHVybiBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0SW1hZ2UoImljb25zL291dHB1dF9vYmouZ2lmIik7IC8vJE5PTi1OTFMtMSQKLQkgICAgfQotCSAgICBlbHNlIGlmIChnZXRLaW5kKCkgPT0gS0lORF9GQVVMVCkKLQkgICAgewotCSAgICAJcmV0dXJuIFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgiaWNvbnMvZmF1bHRfb2JqLmdpZiIpOyAvLyROT04tTkxTLTEkCi0JICAgIH0KLQkgICAgcmV0dXJuIG51bGw7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkgICAgaWYgKGdldEtpbmQoKSA9PSBLSU5EX0lOUFVUKQotCSAgICB7Ci0JICAgICAgcmV0dXJuICJpbnB1dCI7IC8vJE5PTi1OTFMtMSQKLQkgICAgfQotCSAgICBlbHNlIGlmIChnZXRLaW5kKCkgPT0gS0lORF9PVVRQVVQpCi0JICAgIHsKLQkgICAgICByZXR1cm4gIm91dHB1dCI7IC8vJE5PTi1OTFMtMSQKLQkgICAgfQotCSAgICBlbHNlIGlmIChnZXRLaW5kKCkgPT0gS0lORF9GQVVMVCkKLQkgICAgewotCSAgICAgIHJldHVybiBnZXROYW1lKCk7Ci0JICAgIH0KLQkgICAgcmV0dXJuICIiOyAvLyROT04tTkxTLTEkCi0JfQotICAgIAotCS8qCi0JICogQGRlcHJlY2F0ZWQuICBUaGlzIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlLgotCSAqIFVzZSBnZXRTaW1wbGlmaWVkUGFyYW1ldGVycygpLgotCSAqLwotCXB1YmxpYyBMaXN0IGdldFBhcmFtZXRlcnMyKCkKLQl7Ci0JCXJldHVybiBnZXRTaW1wbGlmaWVkRGlhZ25vc3RpY01lc3NhZ2VzKCk7Ci0JfQotCQotCXB1YmxpYyBMaXN0IGdldFNpbXBsaWZpZWRQYXJhbWV0ZXJzKCkKLSAgICB7Ci0JICBpZiAocGFyYW1ldGVycyA9PSBudWxsKQotCSAgewotCSAgICBwYXJhbWV0ZXJzID0gbmV3IEFycmF5TGlzdCgpOwotCSAgICBvdGhlclRoaW5nc1RvTGlzdGVuVG8gPSBuZXcgQXJyYXlMaXN0KCk7Ci0JICAgIFdTRExWaXNpdG9yRm9yUGFyYW1ldGVycyB2aXNpdG9yRm9yUGFyYW1ldGVycyA9IG5ldyBXU0RMVmlzaXRvckZvclBhcmFtZXRlcnMoKTsKLQkgICAgdmlzaXRvckZvclBhcmFtZXRlcnMudmlzaXRNZXNzYWdlUmVmZXJlbmNlKGdldE1lc3NhZ2VSZWZlcmVuY2UoKSk7Ci0JICAgIHBvcHVsYXRlQWRhcHRlckxpc3QodmlzaXRvckZvclBhcmFtZXRlcnMuY29uY3JldGVDb21wb25lbnRzLCBwYXJhbWV0ZXJzKTsKLQkgICAgcG9wdWxhdGVBZGFwdGVyTGlzdCh2aXNpdG9yRm9yUGFyYW1ldGVycy50aGluZ3NUb0xpc3RlblRvLCBvdGhlclRoaW5nc1RvTGlzdGVuVG8pOwotCi0JICAgIC8vIG5vdyB3ZSBsaXN0ZW4gdG8gYWxsIHRoZSAndGhpbmdzIHdlIG5lZWQgdG8gbGlzdGVuIHRvJwotCSAgICAvLwotCSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBvdGhlclRoaW5nc1RvTGlzdGVuVG8uaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotCSAgICB7Ci0JICAgICAgQWRhcHRlciBhZGFwdGVyID0gKEFkYXB0ZXIpIGkubmV4dCgpOwotCSAgICAgIGlmIChhZGFwdGVyIGluc3RhbmNlb2YgSUFTRE9iamVjdCkKLQkgICAgICB7Ci0JICAgICAgICBJQVNET2JqZWN0IGFzZE9iamVjdCA9IChJQVNET2JqZWN0KSBhZGFwdGVyOwotCSAgICAgICAgYXNkT2JqZWN0LnJlZ2lzdGVyTGlzdGVuZXIodGhpcyk7Ci0JICAgICAgfQotCSAgICB9IAotCSAgfQotCi0JICByZXR1cm4gcGFyYW1ldGVyczsKLQl9ICAgIAotCQotCXB1YmxpYyBJVHJlZUVsZW1lbnRbXSBnZXRDaGlsZHJlbigpIHsKLSAgICAgIC8qCi0JCUxpc3QgcGFydHMgPSBnZXRQYXJhbWV0ZXJzKCk7Ci0JCUlUcmVlRWxlbWVudFtdIHRyZWVFbGVtZW50cyA9IG5ldyBJVHJlZUVsZW1lbnRbcGFydHMuc2l6ZSgpXTsKLQkJCi0JCWZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBwYXJ0cy5zaXplKCk7IGluZGV4KyspIHsKLQkJCXRyZWVFbGVtZW50c1tpbmRleF0gPSAoSVRyZWVFbGVtZW50KSBwYXJ0cy5nZXQoaW5kZXgpOwotCQl9Ci0JCSovCi0JCXJldHVybiBJVHJlZUVsZW1lbnQuRU1QVFlfTElTVDsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbigpIHsKLQkJaWYgKGdldENoaWxkcmVuKCkubGVuZ3RoID4gMCkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgSVRyZWVFbGVtZW50IGdldFBhcmVudCgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHByb2Nlc3NBZHZhbmNlZFcxMU1lc3NhZ2VSZWZlcmVuY2UoKSB7Ci0JCWRpYWdub3N0aWNNZXNzYWdlcyA9IG5ldyBBcnJheUxpc3QoKTsKLQotCQlNZXNzYWdlUmVmZXJlbmNlIG1lc3NhZ2VSZWYgPSAoTWVzc2FnZVJlZmVyZW5jZSkgZ2V0VGFyZ2V0KCk7Ci0JCUxpc3QgcGFydHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWlmIChtZXNzYWdlUmVmLmdldEVNZXNzYWdlKCkgIT0gbnVsbCkgewotCQkJaWYgKG1lc3NhZ2VSZWYuZ2V0RU1lc3NhZ2UoKS5nZXRFUGFydHMoKSAhPSBudWxsKSB7Ci0JCQkJcGFydHMgPSBtZXNzYWdlUmVmLmdldEVNZXNzYWdlKCkuZ2V0RVBhcnRzKCk7Ci0JCQl9Ci0JCX0KLQotCQkvLyBtZXNzYWdlUmVmIGNhbiBub3QgYmUgbnVsbCwgZ2l2ZW4gYWJvdmUKLQkJaWYgKG1lc3NhZ2VSZWYuZ2V0RU1lc3NhZ2UoKSA9PSBudWxsKSB7Ci0JCQlhZGRFcnJvckRpYWdub3N0aWNNZXNzYWdlKGdldFVuZGVmaW5lZEFyZzFTdHJpbmcoIm1lc3NhZ2UiKSk7IC8vJE5PTi1OTFMtMSQKLQkJfQotCQllbHNlIGlmIChwYXJ0cy5zaXplKCkgPD0gMCkgewotCQkJU3RyaW5nW10gYXJncyA9IG5ldyBTdHJpbmdbMV07Ci0JCQlhcmdzWzBdID0gInBhcnQiOyAvLyROT04tTkxTLTEkCi0JCQlhZGRXYXJuaW5nRGlhZ25vc3RpY01lc3NhZ2UoZ2V0U3RyaW5nRm9yS2V5KCJfVUlfTEFCRUxfTk9fT0JKRUNUX1NQRUNJRklFRF9BUkcxIiwgYXJncykpOyAvLyROT04tTkxTLTEkCi0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgcHJvY2Vzc1NpbXBsaWZpZWRXMTFNZXNzYWdlUmVmZXJlbmNlKCkgewotCQlkaWFnbm9zdGljTWVzc2FnZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQotCQlNZXNzYWdlUmVmZXJlbmNlIG1lc3NhZ2VSZWYgPSAoTWVzc2FnZVJlZmVyZW5jZSkgZ2V0VGFyZ2V0KCk7Ci0JCSAgaWYgKG1lc3NhZ2VSZWYgPT0gbnVsbCB8fCBtZXNzYWdlUmVmLmdldEVNZXNzYWdlKCkgPT0gbnVsbCkgewotCQkJICBhZGRFcnJvckRpYWdub3N0aWNNZXNzYWdlKGdldFVuZGVmaW5lZEFyZzFTdHJpbmcoIm1lc3NhZ2UiKSk7IC8vJE5PTi1OTFMtMSQKLQkJICB9Ci0JCSAgZWxzZSBpZiAobWVzc2FnZVJlZi5nZXRFTWVzc2FnZSgpLmdldEVQYXJ0cygpLnNpemUoKSA8PSAwKSB7Ci0JCQkgIGFkZFdhcm5pbmdEaWFnbm9zdGljTWVzc2FnZShnZXROb1BhcmFtZXRlcnNTcGVjaWZpZWRTdHJpbmcoKSk7Ci0JCSAgfQotCQkgIGVsc2UgewotCQkJICBQYXJ0IHBhcnQgPSAoUGFydCkgbWVzc2FnZVJlZi5nZXRFTWVzc2FnZSgpLmdldEVQYXJ0cygpLmdldCgwKTsKLQkJCSAgWFNERWxlbWVudERlY2xhcmF0aW9uIHhzZEVsZW1lbnQgPSBwYXJ0LmdldEVsZW1lbnREZWNsYXJhdGlvbigpOwotCQkJICBpZiAoeHNkRWxlbWVudCA9PSBudWxsIHx8IHhzZEVsZW1lbnQuZ2V0U2NoZW1hKCkgPT0gbnVsbCkgewotCQkJCSAgLy8gTm8gWFNEIEVsZW1lbnQKLQkJCQkgIGFkZEVycm9yRGlhZ25vc3RpY01lc3NhZ2UoZ2V0VW5kZWZpbmVkQXJnMVN0cmluZygiZWxlbWVudCIpKTsgLy8kTk9OLU5MUy0xJAotCQkJICB9Ci0JCQkgIGVsc2UgewotCQkJCSAgTXlJbm5lckVsZW1lbnRWaXNpdG9yIHZpc2l0b3IgPSBuZXcgTXlJbm5lckVsZW1lbnRWaXNpdG9yKCk7Ci0JCQkJICB2aXNpdG9yLmZpbmRFcnJvcnNBbmRXYXJuaW5ncyh4c2RFbGVtZW50KTsKLQkJCQkgIGRpYWdub3N0aWNNZXNzYWdlcy5hZGRBbGwodmlzaXRvci5nZXREaWFnbm9zdGljTWVzc2FnZXMoKSk7Ci0JCQkgIH0KLQkJICB9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFkZEVycm9yRGlhZ25vc3RpY01lc3NhZ2UoU3RyaW5nIHR4dCkgewotCQlkaWFnbm9zdGljTWVzc2FnZXMuYWRkKG5ldyBNb2RlbERpYWdub3N0aWNJbmZvKHR4dCwgTW9kZWxEaWFnbm9zdGljSW5mby5FUlJPUl9UWVBFLCBudWxsKSk7Ci0JfQotCQotCXByaXZhdGUgdm9pZCBhZGRXYXJuaW5nRGlhZ25vc3RpY01lc3NhZ2UoU3RyaW5nIHR4dCkgewotCQlkaWFnbm9zdGljTWVzc2FnZXMuYWRkKG5ldyBNb2RlbERpYWdub3N0aWNJbmZvKHR4dCwgTW9kZWxEaWFnbm9zdGljSW5mby5XQVJOSU5HX1RZUEUsIG51bGwpKTsJCQotCX0KLQkKLQlwcm90ZWN0ZWQgTGlzdCBkaWFnbm9zdGljTWVzc2FnZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLQlwdWJsaWMgTGlzdCBnZXREaWFnbm9zdGljTWVzc2FnZXMoKSB7Ci0JCXByb2Nlc3NBZHZhbmNlZFcxMU1lc3NhZ2VSZWZlcmVuY2UoKTsKLQkJcmV0dXJuIGRpYWdub3N0aWNNZXNzYWdlczsKLQl9Ci0KLQlwdWJsaWMgTGlzdCBnZXRTaW1wbGlmaWVkRGlhZ25vc3RpY01lc3NhZ2VzKCkgewotCQlwcm9jZXNzU2ltcGxpZmllZFcxMU1lc3NhZ2VSZWZlcmVuY2UoKTsKLQkJcmV0dXJuIGRpYWdub3N0aWNNZXNzYWdlczsKLQl9Ci0JCi0JcHJpdmF0ZSBjbGFzcyBNeUlubmVyRWxlbWVudFZpc2l0b3IgZXh0ZW5kcyBXMTFGaW5kSW5uZXJFbGVtZW50VmlzaXRvciB7Ci0JCXByaXZhdGUgTGlzdCBkaWFnTWVzc2FnZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQotCQlwdWJsaWMgdm9pZCBmaW5kRXJyb3JzQW5kV2FybmluZ3MoWFNERWxlbWVudERlY2xhcmF0aW9uIHhzZEVsZW1lbnQpIHsKLQkJCWlmICh4c2RFbGVtZW50LmdldFR5cGVEZWZpbml0aW9uKCkgPT0gbnVsbCB8fCB4c2RFbGVtZW50LmdldFR5cGVEZWZpbml0aW9uKCkuZ2V0U2NoZW1hKCkgPT0gbnVsbCkgewotCQkJCS8vIE5vIFhTRCB0eXBlIChub24gYW5vbnltb3VzKSBkZWZpbmVkCi0JCQkJZGlhZ01lc3NhZ2VzLmFkZChuZXcgTW9kZWxEaWFnbm9zdGljSW5mbyhnZXRVbmRlZmluZWRBcmcxU3RyaW5nKCJ0eXBlIiksIE1vZGVsRGlhZ25vc3RpY0luZm8uRVJST1JfVFlQRSwgbnVsbCkpOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0KLQkJCVhTREVsZW1lbnREZWNsYXJhdGlvbiBpbm5lckVsZW1lbnQgPSBzdXBlci5nZXRJbm5lclhTREVsZW1lbnQoeHNkRWxlbWVudCk7Ci0JCQlpZiAoaW5uZXJFbGVtZW50LmVxdWFscyh4c2RFbGVtZW50KSkgewotCQkJCWRpYWdNZXNzYWdlcy5hZGQobmV3IE1vZGVsRGlhZ25vc3RpY0luZm8oZ2V0Tm9QYXJhbWV0ZXJzU3BlY2lmaWVkU3RyaW5nKCksIE1vZGVsRGlhZ25vc3RpY0luZm8uV0FSTklOR19UWVBFLCBudWxsKSk7Ci0JCQl9Ci0JCX0KLQkJCi0JCXB1YmxpYyBMaXN0IGdldERpYWdub3N0aWNNZXNzYWdlcygpIHsKLQkJCXJldHVybiBkaWFnTWVzc2FnZXM7Ci0JCX0KLQl9Ci0JCi0JICBwcml2YXRlIFN0cmluZyBnZXRVbmRlZmluZWRBcmcxU3RyaW5nKFN0cmluZyBhcmcpIHsKLQkJICBTdHJpbmdbXSBhcmdzID0gbmV3IFN0cmluZ1sxXTsKLQkJICBhcmdzWzBdID0gYXJnOwotCQkgIFN0cmluZyBuZXdTdHJpbmcgPSBnZXRTdHJpbmdGb3JLZXkoIl9VSV9MQUJFTF9VTkRFRklORURfQVJHMSIsIGFyZ3MpOyAvLyROT04tTkxTLTEkCi0JCSAgcmV0dXJuIG5ld1N0cmluZzsKLQkgIH0KLQkgIAotCSAgcHJpdmF0ZSBTdHJpbmcgZ2V0Tm9QYXJhbWV0ZXJzU3BlY2lmaWVkU3RyaW5nKCkgewotCQkgIFN0cmluZyBzdHJpbmcgPSBudWxsOwotCQkgIFN0cmluZ1tdIGFyZ3MgPSBuZXcgU3RyaW5nWzBdOwotCQkgIHN0cmluZyA9IGdldFN0cmluZ0ZvcktleSgiX1VJX0xBQkVMX05PX1BBUkFNRVRFUlNfU1BFQ0lGSUVEIiwgYXJncyk7IC8vJE5PTi1OTFMtMSQKLQkJICByZXR1cm4gc3RyaW5nOwotCSAgfQotCSAgCi0JICBwcml2YXRlIFN0cmluZyBnZXRTdHJpbmdGb3JLZXkoU3RyaW5nIGtleSwgT2JqZWN0W10gYXJncykgewotCQkgIFN0cmluZyBuZXdTdHJpbmcgPSAiIjsgLy8kTk9OLU5MUy0xJAotCQkgIG5ld1N0cmluZyA9IE1lc3NhZ2VzLmdldFN0cmluZyhrZXksIGFyZ3MpOwotCQkgIAotCQkgIE9iamVjdCBvYmplY3QgPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlcigpOwotCQkgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBQcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyKSB7Ci0JCQkgIFByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIgcHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlciA9IChQcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyKW9iamVjdDsKLQkJCSAgU3RyaW5nIGN1c3RvbWl6ZWRTdHJpbmcgPSAiIjsgLy8kTk9OLU5MUy0xJAotCQkJICBpZiAoYXJncyA9PSBudWxsKSB7Ci0JCQkJICBjdXN0b21pemVkU3RyaW5nID0gcHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlci5nZXRQcm9kdWN0U3RyaW5nKGtleSk7Ci0JCQkgIH0KLQkJCSAgZWxzZSB7Ci0JCQkJICBjdXN0b21pemVkU3RyaW5nID0gcHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlci5nZXRQcm9kdWN0U3RyaW5nKGtleSwgYXJncyk7Ci0JCQkgIH0KLQkJCSAgCi0JCQkgIGlmIChjdXN0b21pemVkU3RyaW5nICE9IG51bGwgJiYgIWN1c3RvbWl6ZWRTdHJpbmcuZXF1YWxzKCIiKSkgeyAvLyROT04tTkxTLTEkCi0JCQkJICBuZXdTdHJpbmcgPSBjdXN0b21pemVkU3RyaW5nOwotCQkJICB9Ci0JCSAgfQotCi0JCSAgaWYgKG5ld1N0cmluZyA9PSBudWxsKSB7Ci0JCQkgIG5ld1N0cmluZyA9ICIiOyAvLyROT04tTkxTLTEkCi0JCSAgfQotCi0JCSAgcmV0dXJuIG5ld1N0cmluZzsKLQkgIH0KLSAgfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFPcGVyYXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExT3BlcmF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlOWE2ZjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFPcGVyYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uVHlwZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuRGVmYXVsdEVkaXRvck1vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hY3Rpb25zLk9wZW5Jbk5ld0VkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5XU0RMQmFzZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMuVzExQWRkRmF1bHRQYXJhbWV0ZXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzLlcxMUFkZElucHV0UGFyYW1ldGVyQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcy5XMTFBZGRPdXRwdXRQYXJhbWV0ZXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzLlcxMVJlb3JkZXJNZXNzYWdlUmVmZXJlbmNlc0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEQWRkRmF1bHRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEQWRkSW5wdXRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEQWRkT3BlcmF0aW9uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTREFkZE91dHB1dEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0REZWxldGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklUcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRCYXNlUGFyYW1ldGVyQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0b3IuRWRpdG9yTW9kZU1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBXMTFPcGVyYXRpb24gZXh0ZW5kcyBXU0RMQmFzZUFkYXB0ZXIgaW1wbGVtZW50cyBJT3BlcmF0aW9uIHsKLQlwdWJsaWMgTGlzdCBnZXRNZXNzYWdlcygpCi0JewotCQlMaXN0IG1vZGVsQWRhcHRlckxpc3QgPSBuZXcgQXJyYXlMaXN0KGdldE9wZXJhdGlvbigpLmdldEVGYXVsdHMoKS5zaXplKCkgKyAyKTsKLQkJCi0JCUlucHV0IGlucHV0ID0gZ2V0T3BlcmF0aW9uKCkuZ2V0RUlucHV0KCk7Ci0JCU91dHB1dCBvdXRwdXQgPSBnZXRPcGVyYXRpb24oKS5nZXRFT3V0cHV0KCk7Ci0JCQotCQlPcGVyYXRpb25UeXBlIG9wZXJhdGlvblR5cGUgPSBnZXRPcGVyYXRpb24oKS5nZXRTdHlsZSgpOwotCQlpZiAob3BlcmF0aW9uVHlwZSAhPSBudWxsKSB7Ci0JCQlpZiAob3BlcmF0aW9uVHlwZS5lcXVhbHMoT3BlcmF0aW9uVHlwZS5SRVFVRVNUX1JFU1BPTlNFKSAmJiBpbnB1dCAhPSBudWxsICYmIG91dHB1dCAhPSBudWxsKSB7Ci0JCQkJLy8gSW5wdXQsIE91dHB1dAotCQkJCW1vZGVsQWRhcHRlckxpc3QuYWRkKGNyZWF0ZUFkYXB0ZXIoaW5wdXQpKTsKLQkJCQltb2RlbEFkYXB0ZXJMaXN0LmFkZChjcmVhdGVBZGFwdGVyKG91dHB1dCkpOwotCQkJfQotCQkJZWxzZSBpZiAob3BlcmF0aW9uVHlwZS5lcXVhbHMoT3BlcmF0aW9uVHlwZS5TT0xJQ0lUX1JFU1BPTlNFKSAmJiBpbnB1dCAhPSBudWxsICYmIG91dHB1dCAhPSBudWxsKSB7Ci0JCQkJLy8gT3V0cHV0LCBJbnB1dAotCQkJCW1vZGVsQWRhcHRlckxpc3QuYWRkKGNyZWF0ZUFkYXB0ZXIob3V0cHV0KSk7Ci0JCQkJbW9kZWxBZGFwdGVyTGlzdC5hZGQoY3JlYXRlQWRhcHRlcihpbnB1dCkpOwotCQkJfQotCQkJZWxzZSBpZiAob3BlcmF0aW9uVHlwZS5lcXVhbHMoT3BlcmF0aW9uVHlwZS5PTkVfV0FZKSAmJiBpbnB1dCAhPSBudWxsKSB7Ci0JCQkJLy8gSW5wdXQKLQkJCQltb2RlbEFkYXB0ZXJMaXN0LmFkZChjcmVhdGVBZGFwdGVyKGlucHV0KSk7Ci0JCQl9Ci0JCQllbHNlIGlmIChvcGVyYXRpb25UeXBlLmVxdWFscyhPcGVyYXRpb25UeXBlLk5PVElGSUNBVElPTikgJiYgb3V0cHV0ICE9IG51bGwpIHsKLQkJCQkvL091dHB1dAotCQkJCW1vZGVsQWRhcHRlckxpc3QuYWRkKGNyZWF0ZUFkYXB0ZXIob3V0cHV0KSk7Ci0JCQl9Ci0JCX0KLQkJCi0JCWZvciAoSXRlcmF0b3IgaSA9IGdldE9wZXJhdGlvbigpLmdldEVGYXVsdHMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCXsKLQkJCUVPYmplY3QgbyA9IChFT2JqZWN0KSBpLm5leHQoKTsKLQkJCW1vZGVsQWRhcHRlckxpc3QuYWRkKGNyZWF0ZUFkYXB0ZXIobykpOwotCQl9Ci0KLQkJcmV0dXJuIG1vZGVsQWRhcHRlckxpc3Q7Ci0JfQotCQotCS8vIENvbnZpZW5lbmNlIG1ldGhvZAotCXB1YmxpYyBPcGVyYXRpb24gZ2V0T3BlcmF0aW9uKCkKLQl7Ci0JCXJldHVybiAoT3BlcmF0aW9uKSB0YXJnZXQ7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0JewotCQlyZXR1cm4gZ2V0T3BlcmF0aW9uKCkuZ2V0TmFtZSgpOwotCX0KLQkKLQlwdWJsaWMgSUludGVyZmFjZSBnZXRPd25lckludGVyZmFjZSgpCi0JewotCQlyZXR1cm4gKElJbnRlcmZhY2Upb3duZXI7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmdbXSBnZXRBY3Rpb25zKE9iamVjdCBvYmplY3QpIHsKLQkJTGlzdCBhY3Rpb25zID0gbmV3IEFycmF5TGlzdCgpOwotCQlhY3Rpb25zLmFkZChBU0RBZGRPcGVyYXRpb25BY3Rpb24uSUQpOwotCQlhY3Rpb25zLmFkZEFsbChnZXRWYWxpZElucHV0T3V0cHVBY3Rpb25zKCkpOwotCQlhY3Rpb25zLmFkZChBU0RBZGRGYXVsdEFjdGlvbi5JRCk7Ci0JCWFjdGlvbnMuYWRkKEFTRERlbGV0ZUFjdGlvbi5JRCk7Ci0gICAgaWYgKGlzUmVhZE9ubHkoKSkgewotICAgICAgYWN0aW9ucy5hZGQoT3BlbkluTmV3RWRpdG9yLklEKTsKLSAgICB9Ci0JCQotCQlTdHJpbmdbXSBhY3Rpb25JRHMgPSBuZXcgU3RyaW5nW2FjdGlvbnMuc2l6ZSgpXTsKLQkJZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGFjdGlvbnMuc2l6ZSgpOyBpbmRleCsrKSB7Ci0JCQlhY3Rpb25JRHNbaW5kZXhdID0gKFN0cmluZykgYWN0aW9ucy5nZXQoaW5kZXgpOwotCQl9Ci0JCQotCQlyZXR1cm4gYWN0aW9uSURzOwotCX0KLQkKLQlwdWJsaWMgQ29tbWFuZCBnZXRBZGRJbnB1dENvbW1hbmQoKSB7Ci0JCVcxMUFkZElucHV0UGFyYW1ldGVyQ29tbWFuZCBjb21tYW5kID0gbmV3IFcxMUFkZElucHV0UGFyYW1ldGVyQ29tbWFuZChnZXRPcGVyYXRpb24oKSk7Ci0JCQotICAgICAgICBJRWRpdG9yUGFydCBlZGl0b3IgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLSAgICAgICAgRWRpdG9yTW9kZU1hbmFnZXIgbWFuYWdlciA9IChFZGl0b3JNb2RlTWFuYWdlcikgZWRpdG9yLmdldEFkYXB0ZXIoRWRpdG9yTW9kZU1hbmFnZXIuY2xhc3MpOwotCQlpZiAobWFuYWdlci5nZXRDdXJyZW50TW9kZSgpLmdldElkKCkgIT0gRGVmYXVsdEVkaXRvck1vZGUuY2xhc3MuZ2V0TmFtZSgpKSB7Ci0JCQljb21tYW5kLnNldFBhcmFtZXRlclBhdHRlcm4oQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuUEFSVF9FTEVNRU5UX1NFUV9FTEVNRU5UKTsKLQkJfQotCi0JCXJldHVybiBjb21tYW5kOwotCX0KLQkKLQlwdWJsaWMgQ29tbWFuZCBnZXRBZGRPdXRwdXRDb21tYW5kKCkgewotCQlXMTFBZGRPdXRwdXRQYXJhbWV0ZXJDb21tYW5kIGNvbW1hbmQgPSBuZXcgVzExQWRkT3V0cHV0UGFyYW1ldGVyQ29tbWFuZChnZXRPcGVyYXRpb24oKSk7Ci0JCQotICAgICAgICBJRWRpdG9yUGFydCBlZGl0b3IgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLSAgICAgICAgRWRpdG9yTW9kZU1hbmFnZXIgbWFuYWdlciA9IChFZGl0b3JNb2RlTWFuYWdlcikgZWRpdG9yLmdldEFkYXB0ZXIoRWRpdG9yTW9kZU1hbmFnZXIuY2xhc3MpOwotCQlpZiAobWFuYWdlci5nZXRDdXJyZW50TW9kZSgpLmdldElkKCkgIT0gRGVmYXVsdEVkaXRvck1vZGUuY2xhc3MuZ2V0TmFtZSgpKSB7Ci0JCQljb21tYW5kLnNldFBhcmFtZXRlclBhdHRlcm4oQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuUEFSVF9FTEVNRU5UX1NFUV9FTEVNRU5UKTsKLQkJfQotCi0JCXJldHVybiBjb21tYW5kOwotCX0KLQkKLQlwdWJsaWMgQ29tbWFuZCBnZXRBZGRGYXVsdENvbW1hbmQoT2JqZWN0IGZhdWx0KSB7Ci0JCVcxMUFkZEZhdWx0UGFyYW1ldGVyQ29tbWFuZCBjb21tYW5kID0gbmV3IFcxMUFkZEZhdWx0UGFyYW1ldGVyQ29tbWFuZChnZXRPcGVyYXRpb24oKSwgbnVsbCk7Ci0JCQotICAgICAgICBJRWRpdG9yUGFydCBlZGl0b3IgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLSAgICAgICAgRWRpdG9yTW9kZU1hbmFnZXIgbWFuYWdlciA9IChFZGl0b3JNb2RlTWFuYWdlcikgZWRpdG9yLmdldEFkYXB0ZXIoRWRpdG9yTW9kZU1hbmFnZXIuY2xhc3MpOwotCQlpZiAobWFuYWdlci5nZXRDdXJyZW50TW9kZSgpLmdldElkKCkgIT0gRGVmYXVsdEVkaXRvck1vZGUuY2xhc3MuZ2V0TmFtZSgpKSB7Ci0JCQljb21tYW5kLnNldFBhcmFtZXRlclBhdHRlcm4oQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuUEFSVF9FTEVNRU5UX1NFUV9FTEVNRU5UKTsKLQkJfQotCi0JCXJldHVybiBjb21tYW5kOwotCX0KLQkKLQlwdWJsaWMgQ29tbWFuZCBnZXRSZW9yZGVyTWVzc2FnZVJlZmVyZW5jZXNDb21tYW5kKElNZXNzYWdlUmVmZXJlbmNlIGxlZnRTaWJsaW5nLCBJTWVzc2FnZVJlZmVyZW5jZSByaWdodFNpYmxpbmcsIElNZXNzYWdlUmVmZXJlbmNlIG1vdmluZ01lc3NhZ2VSZWYpIHsKLQkJcmV0dXJuIG5ldyBXMTFSZW9yZGVyTWVzc2FnZVJlZmVyZW5jZXNDb21tYW5kKGxlZnRTaWJsaW5nLCByaWdodFNpYmxpbmcsIG1vdmluZ01lc3NhZ2VSZWYpOwotCX0KLQkKLQlwdWJsaWMgTGlzdCBnZXRWYWxpZElucHV0T3V0cHVBY3Rpb25zKCkgewotCQlMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQotCQlpZiAoZ2V0T3BlcmF0aW9uKCkuZ2V0RUlucHV0KCkgPT0gbnVsbCkgewotCQkJbGlzdC5hZGQoQVNEQWRkSW5wdXRBY3Rpb24uSUQpOwotCQl9Ci0JCWlmIChnZXRPcGVyYXRpb24oKS5nZXRFT3V0cHV0KCkgPT0gbnVsbCkgewotCQkJbGlzdC5hZGQoQVNEQWRkT3V0cHV0QWN0aW9uLklEKTsKLQkJfQotCQkKLQkJcmV0dXJuIGxpc3Q7Ci0JfQotCQotCXB1YmxpYyBJbWFnZSBnZXRJbWFnZSgpIHsKLQkJcmV0dXJuIFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgiaWNvbnMvb3BlcmF0aW9uX29iai5naWYiKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCXJldHVybiAib3BlcmF0aW9uIjsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgSVRyZWVFbGVtZW50W10gZ2V0Q2hpbGRyZW4oKSB7Ci0JCUxpc3QgbWVzc2FnZXMgPSBnZXRNZXNzYWdlcygpOwotCQlJVHJlZUVsZW1lbnRbXSB0cmVlRWxlbWVudHMgPSBuZXcgSVRyZWVFbGVtZW50W21lc3NhZ2VzLnNpemUoKV07Ci0JCQotCQlmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgbWVzc2FnZXMuc2l6ZSgpOyBpbmRleCsrKSB7Ci0JCQl0cmVlRWxlbWVudHNbaW5kZXhdID0gKElUcmVlRWxlbWVudCkgbWVzc2FnZXMuZ2V0KGluZGV4KTsKLQkJfQotCQkKLQkJcmV0dXJuIHRyZWVFbGVtZW50czsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbigpIHsKLQkJaWYgKGdldENoaWxkcmVuKCkubGVuZ3RoID4gMCkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgSVRyZWVFbGVtZW50IGdldFBhcmVudCgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFQYXJhbWV0ZXJGb3JBdHRyaWJ1dGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExUGFyYW1ldGVyRm9yQXR0cmlidXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjODIyOGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFQYXJhbWV0ZXJGb3JBdHRyaWJ1dGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuV1NETEJhc2VBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmFjdGlvbnMuVzExU2V0RXhpc3RpbmdUeXBlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmFjdGlvbnMuVzExU2V0TmV3VHlwZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcy5XMTFEZWxldGVQYXJhbWV0ZXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTRERlbGV0ZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5CYXNlU2VsZWN0aW9uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklUcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0b3IuUHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQXR0cmlidXRlRGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREF0dHJpYnV0ZVVzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEVHlwZURlZmluaXRpb247Ci0KLS8vaW1wb3J0IGNvbS5pYm0uY2NsLnNvYS5zZG8ud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5TRE9XMTFEZWxldGVDb21tYW5kOwotCi1wdWJsaWMgY2xhc3MgVzExUGFyYW1ldGVyRm9yQXR0cmlidXRlIGV4dGVuZHMgV1NETEJhc2VBZGFwdGVyIGltcGxlbWVudHMgSVBhcmFtZXRlciB7Ci0JCi0JcHJvdGVjdGVkIFhTREF0dHJpYnV0ZVVzZSBnZXRYU0RBdHRyaWJ1dGVVc2UoKSB7Ci0JCXJldHVybiAoWFNEQXR0cmlidXRlVXNlKSB0YXJnZXQ7Ci0JfQotCi0JcHJvdGVjdGVkIFhTREF0dHJpYnV0ZURlY2xhcmF0aW9uIGdldFhTREF0dHRyaWJ1dGVEZWNsYXJhdGlvbigpIHsKLQkJWFNEQXR0cmlidXRlVXNlIGF0dHJVc2UgPSBnZXRYU0RBdHRyaWJ1dGVVc2UoKTsKLQkJcmV0dXJuIGF0dHJVc2UuZ2V0QXR0cmlidXRlRGVjbGFyYXRpb24oKTsJCQotCX0KLQkKLQlwdWJsaWMgT2JqZWN0IGdldE93bmVyKCkgewotCQlyZXR1cm4gKElNZXNzYWdlUmVmZXJlbmNlKSBvd25lcjsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0JCXJldHVybiBnZXRYU0RBdHR0cmlidXRlRGVjbGFyYXRpb24oKS5nZXROYW1lKCk7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0Q29tcG9uZW50TmFtZSgpIHsKLQkJWFNEQXR0cmlidXRlRGVjbGFyYXRpb24gYXR0ckRlY2wgPSBnZXRYU0RBdHR0cmlidXRlRGVjbGFyYXRpb24oKTsKLQkJCi0JCWlmIChhdHRyRGVjbC5nZXRUeXBlKCkgIT0gbnVsbCkgewotCQkJcmV0dXJuIGF0dHJEZWNsLmdldFR5cGUoKS5nZXROYW1lKCk7Ci0JCX0KLQkJCi0JCXJldHVybiAiZXJyb3I6IGNvdWxkIG5vdCBnZXQgdHlwZSBuYW1lIjsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldENvbXBvbmVudE5hbWVRdWFsaWZpZXIoKSB7Ci0gICAgICAgIFhTRFR5cGVEZWZpbml0aW9uIHRkID0gZ2V0WFNEQXR0dHJpYnV0ZURlY2xhcmF0aW9uKCkuZ2V0VHlwZURlZmluaXRpb24oKTsKLSAgICAgICAgcmV0dXJuIHRkICE9IG51bGwgPyB0ZC5nZXRUYXJnZXROYW1lc3BhY2UoKSA6IG51bGw7Ci0JfQotCQotCSAgcHVibGljIFN0cmluZ1tdIGdldEFjdGlvbnMoT2JqZWN0IG9iamVjdCkgewotICAgICAgICAgIExpc3QgYWN0aW9ucyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgICAvL2xpc3QuYWRkKEFTREFkZE9wZXJhdGlvbkFjdGlvbi5JRCk7Ci0gICAgICAgICAgLy9saXN0LmFkZChBU0RBZGRJbnB1dEFjdGlvbi5JRCk7Ci0gICAgICAgICAgLy9saXN0LmFkZChBU0RBZGRPdXRwdXRBY3Rpb24uSUQpOwotICAgICAgICAgIC8vbGlzdC5hZGQoQVNEQWRkRmF1bHRBY3Rpb24uSUQpOwotICAgICAgICAgIGFjdGlvbnMuYWRkKEJhc2VTZWxlY3Rpb25BY3Rpb24uU1VCTUVOVV9TVEFSVF9JRCArIE1lc3NhZ2VzLl9VSV9BQ1RJT05fU0VUX1RZUEUpOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgYWN0aW9ucy5hZGQoVzExU2V0TmV3VHlwZUFjdGlvbi5JRCk7Ci0gICAgICAgICAgYWN0aW9ucy5hZGQoVzExU2V0RXhpc3RpbmdUeXBlQWN0aW9uLklEKTsKLSAgICAgICAgICBhY3Rpb25zLmFkZChCYXNlU2VsZWN0aW9uQWN0aW9uLlNVQk1FTlVfRU5EX0lEKTsKLQotICAgICAgICAgIGFjdGlvbnMuYWRkKEFTRERlbGV0ZUFjdGlvbi5JRCk7ICAgIAotICAgICAgICAgIFN0cmluZ1tdIHJlc3VsdCA9IG5ldyBTdHJpbmdbYWN0aW9ucy5zaXplKCldOwotICAgICAgICAgIGFjdGlvbnMudG9BcnJheShyZXN1bHQpOwotICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHVibGljIENvbW1hbmQgZ2V0RGVsZXRlQ29tbWFuZCgpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBXMTFEZWxldGVQYXJhbWV0ZXJDb21tYW5kKHRoaXMpOwotCX0KLQkKLQlwdWJsaWMgQ29tbWFuZCBnZXRTZXRUeXBlQ29tbWFuZChTdHJpbmcgaWQpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIEltYWdlIGdldEltYWdlKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQlyZXR1cm4gZ2V0UGFyYW1ldGVyU3RyaW5nKCJhdHRyaWJ1dGUiKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwcml2YXRlIFN0cmluZyBnZXRQYXJhbWV0ZXJTdHJpbmcoU3RyaW5nIHR4dCkgewotCQlTdHJpbmcgc3RyaW5nID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJT2JqZWN0IG9iamVjdCA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyKCk7Ci0JCWlmIChvYmplY3QgaW5zdGFuY2VvZiBQcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyKSB7Ci0JCQlQcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyIHByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIgPSAoUHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlcilvYmplY3Q7Ci0JCQlTdHJpbmcgbmV3U3RyaW5nID0gcHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlci5nZXRQcm9kdWN0U3RyaW5nKCJfVUlfTEFCRUxfUEFSQU1FVEVSX0FSRyIsIG5ldyBPYmplY3RbXXt0eHR9KTsgLy8kTk9OLU5MUy0xJAotCQkJaWYgKG5ld1N0cmluZyAhPSBudWxsKSB7Ci0JCQkJc3RyaW5nID0gbmV3U3RyaW5nOwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIHN0cmluZzsKLQl9Ci0JICAKLQlwdWJsaWMgSVRyZWVFbGVtZW50W10gZ2V0Q2hpbGRyZW4oKSB7Ci0JCXJldHVybiBuZXcgSVRyZWVFbGVtZW50WzBdOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKCkgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIElUcmVlRWxlbWVudCBnZXRQYXJlbnQoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExUGFyYW1ldGVyRm9yRWxlbWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFQYXJhbWV0ZXJGb3JFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjNTQxNzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFQYXJhbWV0ZXJGb3JFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5hY3Rpb25zLlcxMVNldEV4aXN0aW5nVHlwZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5hY3Rpb25zLlcxMVNldE5ld1R5cGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMuVzExRGVsZXRlUGFyYW1ldGVyQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcy5XMTFSZW5hbWVDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzLlcxMVNldFR5cGVDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTRERlbGV0ZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5CYXNlU2VsZWN0aW9uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklUcmVlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0b3IuUHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RUeXBlRGVmaW5pdGlvbjsKLQotCi1wdWJsaWMgY2xhc3MgVzExUGFyYW1ldGVyRm9yRWxlbWVudCBleHRlbmRzIFdTRExCYXNlQWRhcHRlciBpbXBsZW1lbnRzIElQYXJhbWV0ZXIKLXsKLSAgcHJvdGVjdGVkIFhTREVsZW1lbnREZWNsYXJhdGlvbiBnZXRYU0RFbGVtZW50RGVjbGFyYXRpb24oKQotICB7Ci0gICAgcmV0dXJuICgoWFNERWxlbWVudERlY2xhcmF0aW9uKSB0YXJnZXQpLmdldFJlc29sdmVkRWxlbWVudERlY2xhcmF0aW9uKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIGdldFhTREVsZW1lbnREZWNsYXJhdGlvbigpLmdldE5hbWUoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q29tcG9uZW50TmFtZSgpCi0gIHsKLQlTdHJpbmcgY29tcE5hbWUgPSAiIjsvLyArIE1lc3NhZ2VzLmdldFN0cmluZygiX1VJX0xBQkVMX05PX1RZUEVfU1BFQ0lGSUVEIikgKyAiKSI7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCi0gICAgWFNEVHlwZURlZmluaXRpb24gYW5vbnltb3VzVHlwZSA9IGdldFhTREVsZW1lbnREZWNsYXJhdGlvbigpLmdldEFub255bW91c1R5cGVEZWZpbml0aW9uKCk7Ci0gICAgWFNEVHlwZURlZmluaXRpb24gdGQgPSBnZXRYU0RFbGVtZW50RGVjbGFyYXRpb24oKS5nZXRUeXBlRGVmaW5pdGlvbigpOwotICAgIAotICAgIGlmIChhbm9ueW1vdXNUeXBlICE9IG51bGwpIHsKLSAgICAgICAgY29tcE5hbWUgPSAiKiphbm9ueW1vdXMqKiI7ICAvLyROT04tTkxTLTEkCi0gICAgfQotCi0gICAgcmV0dXJuICh0ZCAhPSBudWxsICYmIHRkLmdldE5hbWUoKSAhPSBudWxsKSA/IHRkLmdldE5hbWUoKSA6IGNvbXBOYW1lOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRDb21wb25lbnROYW1lUXVhbGlmaWVyKCkKLSAgewotICAgIFhTRFR5cGVEZWZpbml0aW9uIHRkID0gZ2V0WFNERWxlbWVudERlY2xhcmF0aW9uKCkuZ2V0VHlwZURlZmluaXRpb24oKTsKLSAgICByZXR1cm4gdGQgIT0gbnVsbCA/IHRkLmdldFRhcmdldE5hbWVzcGFjZSgpIDogbnVsbDsKLSAgIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRBY3Rpb25zKE9iamVjdCBvYmplY3QpIHsKLQkgIExpc3QgYWN0aW9ucyA9IG5ldyBBcnJheUxpc3QoKTsKLQkgIC8vbGlzdC5hZGQoQVNEQWRkT3BlcmF0aW9uQWN0aW9uLklEKTsKLSAgICAgIC8vbGlzdC5hZGQoQVNEQWRkSW5wdXRBY3Rpb24uSUQpOwotICAgICAgLy9saXN0LmFkZChBU0RBZGRPdXRwdXRBY3Rpb24uSUQpOwotICAgICAgLy9saXN0LmFkZChBU0RBZGRGYXVsdEFjdGlvbi5JRCk7Ci0gICAgICBhY3Rpb25zLmFkZChCYXNlU2VsZWN0aW9uQWN0aW9uLlNVQk1FTlVfU1RBUlRfSUQgKyBNZXNzYWdlcy5fVUlfQUNUSU9OX1NFVF9UWVBFKTsgLy8kTk9OLU5MUy0xJAotICAgICAgYWN0aW9ucy5hZGQoVzExU2V0TmV3VHlwZUFjdGlvbi5JRCk7Ci0gICAgICBhY3Rpb25zLmFkZChXMTFTZXRFeGlzdGluZ1R5cGVBY3Rpb24uSUQpOwotICAgICAgYWN0aW9ucy5hZGQoQmFzZVNlbGVjdGlvbkFjdGlvbi5TVUJNRU5VX0VORF9JRCk7Ci0gICAgIAotICAgICAgYWN0aW9ucy5hZGQoQVNERGVsZXRlQWN0aW9uLklEKTsJICAKLSAgICAgIFN0cmluZ1tdIHJlc3VsdCA9IG5ldyBTdHJpbmdbYWN0aW9ucy5zaXplKCldOwotICAgICAgYWN0aW9ucy50b0FycmF5KHJlc3VsdCk7Ci0JICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIENvbW1hbmQgZ2V0RGVsZXRlQ29tbWFuZCgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFcxMURlbGV0ZVBhcmFtZXRlckNvbW1hbmQodGhpcyk7Ci0gIH0KLQotICBwdWJsaWMgQ29tbWFuZCBnZXRTZXRUeXBlQ29tbWFuZChTdHJpbmcgYWN0aW9uSWQpIHsKLQkgIHJldHVybiBuZXcgVzExU2V0VHlwZUNvbW1hbmQodGhpcy5nZXRUYXJnZXQoKSwgYWN0aW9uSWQpOwotICB9Ci0gIAotICBwdWJsaWMgQ29tbWFuZCBnZXRTZXROYW1lQ29tbWFuZChTdHJpbmcgbmV3TmFtZSkgeyAgICAKLSAgICByZXR1cm4gbmV3IFcxMVJlbmFtZUNvbW1hbmQodGhpcywgbmV3TmFtZSkgewotICAgICAgcHVibGljIHZvaWQgZXhlY3V0ZSgpIHsKLSAgCQl0cnkgewotCQkJYmVnaW5SZWNvcmRpbmcoZ2V0WFNERWxlbWVudERlY2xhcmF0aW9uKCkuZ2V0RWxlbWVudCgpKTsKLQkJCWdldFhTREVsZW1lbnREZWNsYXJhdGlvbigpLnNldE5hbWUobmV3TmFtZSk7Ci0gIAkJfQotICAJCWZpbmFsbHkgewotICAJCQllbmRSZWNvcmRpbmcoZ2V0WFNERWxlbWVudERlY2xhcmF0aW9uKCkuZ2V0RWxlbWVudCgpKTsKLSAgCQl9Ci0gICAgICB9Ci0gICAgfTsgIAotICB9Ci0gIAotICBwdWJsaWMgT2JqZWN0IGdldE93bmVyKCkKLSAgewotCSAgcmV0dXJuIChJTWVzc2FnZVJlZmVyZW5jZSkgb3duZXI7Ci0gIH0KLSAgCi0JcHVibGljIEltYWdlIGdldEltYWdlKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQlyZXR1cm4gZ2V0UGFyYW1ldGVyU3RyaW5nKCJlbGVtZW50Iik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JICBwcml2YXRlIFN0cmluZyBnZXRQYXJhbWV0ZXJTdHJpbmcoU3RyaW5nIHR4dCkgewotCQkgIFN0cmluZyBzdHJpbmcgPSAiIjsgLy8kTk9OLU5MUy0xJAotCQkgIE9iamVjdCBvYmplY3QgPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlcigpOwotCQkgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBQcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyKSB7Ci0JCQkgIFByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIgcHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlciA9IChQcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyKW9iamVjdDsKLQkJCSAgU3RyaW5nIG5ld1N0cmluZyA9IHByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIuZ2V0UHJvZHVjdFN0cmluZygiX1VJX0xBQkVMX1BBUkFNRVRFUl9BUkciLCBuZXcgT2JqZWN0W117dHh0fSk7IC8vJE5PTi1OTFMtMSQKLQkJCSAgaWYgKG5ld1N0cmluZyAhPSBudWxsKSB7Ci0JCQkJICBzdHJpbmcgPSBuZXdTdHJpbmc7Ci0JCQkgIH0KLQkJICB9Ci0KLQkJICByZXR1cm4gc3RyaW5nOwotCSAgfQotCQotCXB1YmxpYyBJVHJlZUVsZW1lbnRbXSBnZXRDaGlsZHJlbigpIHsKLQkJcmV0dXJuIG5ldyBJVHJlZUVsZW1lbnRbMF07Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgSVRyZWVFbGVtZW50IGdldFBhcmVudCgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFQYXJhbWV0ZXJGb3JQYXJ0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMVBhcmFtZXRlckZvclBhcnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI4OTI5My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMVBhcmFtZXRlckZvclBhcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuTXVsdGlQYWdlRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5Db250ZW50T3V0bGluZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWN0aW9ucy5PcGVuSW5OZXdFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuV1NETEJhc2VBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmFjdGlvbnMuVzExQWRkUGFydEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5hY3Rpb25zLlcxMVNldEV4aXN0aW5nRWxlbWVudEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5hY3Rpb25zLlcxMVNldEV4aXN0aW5nVHlwZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5hY3Rpb25zLlcxMVNldE5ld0VsZW1lbnRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYWN0aW9ucy5XMTFTZXROZXdUeXBlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzLlcxMVNldEVsZW1lbnRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzLlcxMVNldFR5cGVDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTREFkZEZhdWx0QWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTREFkZE9wZXJhdGlvbkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0REZWxldGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQmFzZVNlbGVjdGlvbkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmZpZ3VyZXMuTW9kZWxEaWFnbm9zdGljSW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklNZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUuSVRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXRvci5Qcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wbGV4VHlwZURlZmluaXRpb247Ci0KLQotcHVibGljIGNsYXNzIFcxMVBhcmFtZXRlckZvclBhcnQgZXh0ZW5kcyBXU0RMQmFzZUFkYXB0ZXIgaW1wbGVtZW50cyBJUGFyYW1ldGVyCi17Ci0gIHByb3RlY3RlZCBQYXJ0IGdldFBhcnQoKQotICB7Ci0gICAgcmV0dXJuIChQYXJ0KSB0YXJnZXQ7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIGdldFBhcnQoKS5nZXROYW1lKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldENvbXBvbmVudE5hbWUoKQotICB7Ci0gICAgaWYgKGdldFBhcnQoKS5nZXRFbGVtZW50RGVjbGFyYXRpb24oKSAhPSBudWxsKQotICAgIHsgIAotICAgICAgcmV0dXJuIGdldFBhcnQoKS5nZXRFbGVtZW50RGVjbGFyYXRpb24oKS5nZXROYW1lKCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGdldFBhcnQoKS5nZXRUeXBlRGVmaW5pdGlvbigpICE9IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIGdldFBhcnQoKS5nZXRUeXBlRGVmaW5pdGlvbigpLmdldE5hbWUoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJldHVybiBnZXROb05hbWVTcGVjaWZpZWRTdHJpbmcoKTsKLSAgICB9ICAKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0Tm9OYW1lU3BlY2lmaWVkU3RyaW5nKCkgewotCSAgcmV0dXJuICIiOyAvLyROT04tTkxTLTEkCi0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldENvbXBvbmVudE5hbWVRdWFsaWZpZXIoKQotICB7Ci0gICAgaWYgKGdldFBhcnQoKS5nZXRFbGVtZW50RGVjbGFyYXRpb24oKSAhPSBudWxsKQotICAgIHsgIAotICAgICAgcmV0dXJuIGdldFBhcnQoKS5nZXRFbGVtZW50RGVjbGFyYXRpb24oKS5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZ2V0UGFydCgpLmdldFR5cGVEZWZpbml0aW9uKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gZ2V0UGFydCgpLmdldFR5cGVEZWZpbml0aW9uKCkuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7ICAKLSAgICAgIHJldHVybiAiIjsgLy8kTk9OLU5MUy0xJAotICAgIH0gIAotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nW10gZ2V0QWN0aW9ucyhPYmplY3Qgb2JqZWN0KSB7Ci0JICBpZiAob2JqZWN0IGluc3RhbmNlb2YgTXVsdGlQYWdlRWRpdG9yUGFydCkgewotCQkgIElPcGVyYXRpb24gb3BlcmF0aW9uID0gKChJTWVzc2FnZVJlZmVyZW5jZSkgZ2V0T3duZXIoKSkuZ2V0T3duZXJPcGVyYXRpb24oKTsKLQotCQkgIExpc3QgYWN0aW9ucyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJICBhY3Rpb25zLmFkZChXMTFBZGRQYXJ0QWN0aW9uLklEKTsKLQkJICBhY3Rpb25zLmFkZChBU0RBZGRPcGVyYXRpb25BY3Rpb24uSUQpOwotCQkgIGFjdGlvbnMuYWRkQWxsKCgoVzExT3BlcmF0aW9uKSBvcGVyYXRpb24pLmdldFZhbGlkSW5wdXRPdXRwdUFjdGlvbnMoKSk7Ci0JCSAgYWN0aW9ucy5hZGQoQVNEQWRkRmF1bHRBY3Rpb24uSUQpOwotCQkgIAotCQkgIGFjdGlvbnMuYWRkKEJhc2VTZWxlY3Rpb25BY3Rpb24uU1VCTUVOVV9TVEFSVF9JRCArIE1lc3NhZ2VzLl9VSV9BQ1RJT05fU0VUX1RZUEUpOyAvLyROT04tTkxTLTEkCi0JCSAgYWN0aW9ucy5hZGQoVzExU2V0TmV3VHlwZUFjdGlvbi5JRCk7Ci0JCSAgYWN0aW9ucy5hZGQoVzExU2V0RXhpc3RpbmdUeXBlQWN0aW9uLklEKTsKLQkJICBhY3Rpb25zLmFkZChCYXNlU2VsZWN0aW9uQWN0aW9uLlNVQk1FTlVfRU5EX0lEKTsKLQotCQkgIGFjdGlvbnMuYWRkKEJhc2VTZWxlY3Rpb25BY3Rpb24uU1VCTUVOVV9TVEFSVF9JRCArIE1lc3NhZ2VzLl9VSV9BQ1RJT05fU0VUX0VMRU1FTlQpOyAvLyROT04tTkxTLTEkCi0JCSAgYWN0aW9ucy5hZGQoVzExU2V0TmV3RWxlbWVudEFjdGlvbi5JRCk7Ci0JCSAgYWN0aW9ucy5hZGQoVzExU2V0RXhpc3RpbmdFbGVtZW50QWN0aW9uLklEKTsKLQkJICBhY3Rpb25zLmFkZChCYXNlU2VsZWN0aW9uQWN0aW9uLlNVQk1FTlVfRU5EX0lEKTsJCSAgCi0JCSAgCi0JCSAgYWN0aW9ucy5hZGQoQVNERGVsZXRlQWN0aW9uLklEKTsKLSAgICAgIAotICAgICAgaWYgKGlzUmVhZE9ubHkoKSkgewotICAgICAgICBhY3Rpb25zLmFkZChPcGVuSW5OZXdFZGl0b3IuSUQpOwotICAgICAgfQotCQkgIAotCQkgIFN0cmluZ1tdIGFjdGlvbklEcyA9IG5ldyBTdHJpbmdbYWN0aW9ucy5zaXplKCldOwotCQkgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBhY3Rpb25zLnNpemUoKTsgaW5kZXgrKykgewotCQkJICBhY3Rpb25JRHNbaW5kZXhdID0gKFN0cmluZykgYWN0aW9ucy5nZXQoaW5kZXgpOwotCQkgIH0KLQkgIAotCQkgIHJldHVybiBhY3Rpb25JRHM7Ci0JICB9Ci0JICBpZiAob2JqZWN0IGluc3RhbmNlb2YgQ29udGVudE91dGxpbmUpIHsKLQkJICBTdHJpbmdbXSBhY3Rpb25JRHMgPSBuZXcgU3RyaW5nWzJdOwotCQkgIGFjdGlvbklEc1swXSA9IFcxMUFkZFBhcnRBY3Rpb24uSUQ7Ci0JCSAgYWN0aW9uSURzWzFdID0gQVNERGVsZXRlQWN0aW9uLklEOwotCQkgIAotCQkgIHJldHVybiBhY3Rpb25JRHM7Ci0JICB9Ci0JICAKLQkgIHJldHVybiBuZXcgU3RyaW5nWzBdOwotICB9Ci0KLSAgcHVibGljIE9iamVjdCBnZXRPd25lcigpCi0gIHsKLQkgIHJldHVybiBvd25lcjsKLSAgfQotICAKLQlwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoKSB7Ci0JCXJldHVybiBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0SW1hZ2UoImljb25zL3BhcnRfb2JqLmdpZiIpOyAvLyROT04tTkxTLTEkCi0JfQotICAgIAotICAgIHB1YmxpYyBJbWFnZSBnZXRTZWNvbmRhcnlJbWFnZSgpIHsKLSAgICAgIAotICAgICAgaWYgKGdldFBhcnQoKS5nZXRFbGVtZW50RGVjbGFyYXRpb24oKSAhPSBudWxsKQotICAgICAgeyAgCi0gICAgICAgIHJldHVybiBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0SW1hZ2UoImljb25zL2VsZW1lbnRfb2JqLmdpZiIpOyAvLyROT04tTkxTLTEkCi0gICAgICB9Ci0gICAgICBlbHNlIGlmIChnZXRQYXJ0KCkuZ2V0VHlwZURlZmluaXRpb24oKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBpZiAoZ2V0UGFydCgpLmdldFR5cGVEZWZpbml0aW9uKCkgaW5zdGFuY2VvZiBYU0RDb21wbGV4VHlwZURlZmluaXRpb24pCi0gICAgICAgIHsgIAotICAgICAgICAgIHJldHVybiBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0SW1hZ2UoImljb25zL2NvbXBsZXh0eXBlX29iai5naWYiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0SW1hZ2UoImljb25zL3NpbXBsZXR5cGVfb2JqLmdpZiIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgIH0gIAotICAgICAgfQotICAgICAgZWxzZQotICAgICAgeyAgCi0gICAgICAgIHJldHVybiBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0SW1hZ2UoImljb25zL3BhcnRfb2JqLmdpZiIpOyAvLyROT04tTkxTLTEkCi0gICAgICB9ICAKLSAgICB9ICAgIAotCQotCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJcmV0dXJuICJwYXJ0IjsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgSVRyZWVFbGVtZW50W10gZ2V0Q2hpbGRyZW4oKSB7Ci0JCXJldHVybiBuZXcgSVRyZWVFbGVtZW50WzBdOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKCkgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIElUcmVlRWxlbWVudCBnZXRQYXJlbnQoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQkKLQlwdWJsaWMgQ29tbWFuZCBnZXRTZXRUeXBlQ29tbWFuZChTdHJpbmcgYWN0aW9uSWQpIHsKLQkJcmV0dXJuIG5ldyBXMTFTZXRUeXBlQ29tbWFuZCgoUGFydCkgdGhpcy5nZXRUYXJnZXQoKSwgYWN0aW9uSWQpOwotCX0KLQkKLQlwdWJsaWMgQ29tbWFuZCBnZXRTZXRFbGVtZW50Q29tbWFuZChTdHJpbmcgYWN0aW9uSWQpIHsKLQkJcmV0dXJuIG5ldyBXMTFTZXRFbGVtZW50Q29tbWFuZCgoUGFydCkgdGhpcy5nZXRUYXJnZXQoKSwgYWN0aW9uSWQpOwotCX0KLQkKLQkvLyBUT0RPOiBXZSBzaG91bGQgbW92ZSB0aGUgaXNUeXBlKCkgbWV0aG9kIHRvIHRoZSBJUGFyYW1ldGVyIEludGVyZmFjZS4uLi4uLi4uCi0JcHVibGljIGJvb2xlYW4gaXNUeXBlKCkgewotCQlQYXJ0IHBhcnQgPSAoUGFydCkgdGFyZ2V0OwotCQlpZiAocGFydC5nZXRUeXBlRGVmaW5pdGlvbigpICE9IG51bGwpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIExpc3QgZ2V0RGlhZ25vc3RpY01lc3NhZ2VzKCkgewotCQlMaXN0IGVycm9ycyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJUGFydCBwYXJ0ID0gKFBhcnQpIGdldFRhcmdldCgpOwotCQlpZiAocGFydC5nZXRFbGVtZW50RGVjbGFyYXRpb24oKSA9PSBudWxsICYmIHBhcnQuZ2V0VHlwZURlZmluaXRpb24oKSA9PSBudWxsKSB7Ci0JCQlTdHJpbmdbXSBhcmdzID0gbmV3IFN0cmluZ1syXTsKLQkJCWFyZ3NbMF0gPSAiZWxlbWVudCI7IC8vJE5PTi1OTFMtMSQKLQkJCWFyZ3NbMV0gPSAidHlwZSI7IC8vJE5PTi1OTFMtMSQKLQkJCVN0cmluZyBuZXdTdHJpbmcgPSBnZXRTdHJpbmdGb3JLZXkoIl9VSV9MQUJFTF9PUl9VTkRFRklORURfQVJHMiIsIGFyZ3MpOyAvLyROT04tTkxTLTEkCi0JCQlNb2RlbERpYWdub3N0aWNJbmZvIGluZm8gPSBuZXcgTW9kZWxEaWFnbm9zdGljSW5mbyhuZXdTdHJpbmcsIE1vZGVsRGlhZ25vc3RpY0luZm8uRVJST1JfVFlQRSwgbnVsbCk7Ci0JCQllcnJvcnMuYWRkKGluZm8pOwotCQl9Ci0JCQotCQlyZXR1cm4gZXJyb3JzOwotCX0KLQkKLQkgIHByaXZhdGUgU3RyaW5nIGdldFN0cmluZ0ZvcktleShTdHJpbmcga2V5LCBPYmplY3RbXSBhcmdzKSB7Ci0JCSAgU3RyaW5nIG5ld1N0cmluZyA9ICIiOyAvLyROT04tTkxTLTEkCi0JCSAgbmV3U3RyaW5nID0gTWVzc2FnZXMuZ2V0U3RyaW5nKGtleSwgYXJncyk7Ci0KLQkJICBPYmplY3Qgb2JqZWN0ID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIoKTsKLQkJICBpZiAob2JqZWN0IGluc3RhbmNlb2YgUHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlcikgewotCQkJICBQcm9kdWN0Q3VzdG9taXphdGlvblByb3ZpZGVyIHByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIgPSAoUHJvZHVjdEN1c3RvbWl6YXRpb25Qcm92aWRlcilvYmplY3Q7Ci0JCQkgIFN0cmluZyBjdXN0b21pemVkU3RyaW5nID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJCSAgaWYgKGFyZ3MgPT0gbnVsbCkgewotCQkJCSAgY3VzdG9taXplZFN0cmluZyA9IHByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIuZ2V0UHJvZHVjdFN0cmluZyhrZXkpOwotCQkJICB9Ci0JCQkgIGVsc2UgewotCQkJCSAgY3VzdG9taXplZFN0cmluZyA9IHByb2R1Y3RDdXN0b21pemF0aW9uUHJvdmlkZXIuZ2V0UHJvZHVjdFN0cmluZyhrZXksIGFyZ3MpOwotCQkJICB9Ci0JCQkgIAotCQkJICBpZiAoY3VzdG9taXplZFN0cmluZyAhPSBudWxsICYmICFjdXN0b21pemVkU3RyaW5nLmVxdWFscygiIikpIHsgLy8kTk9OLU5MUy0xJAotCQkJCSAgbmV3U3RyaW5nID0gY3VzdG9taXplZFN0cmluZzsKLQkJCSAgfQotCQkgIH0KLQotCQkgIGlmIChuZXdTdHJpbmcgPT0gbnVsbCkgewotCQkJICBuZXdTdHJpbmcgPSAiIjsgLy8kTk9OLU5MUy0xJAotCQkgIH0KLQotCQkgIHJldHVybiBuZXdTdHJpbmc7Ci0JICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2Jhc2ljL1cxMVNlcnZpY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExU2VydmljZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZmUwYTMwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExU2VydmljZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYzsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWN0aW9ucy5PcGVuSW5OZXdFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuV1NETEJhc2VBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzLlcxMUFkZEVuZFBvaW50Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RBZGRFbmRQb2ludEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0REZWxldGVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLnV0aWwuRW5kUG9pbnRDb21wYXJhdG9yOwotCi1wdWJsaWMgY2xhc3MgVzExU2VydmljZSBleHRlbmRzIFdTRExCYXNlQWRhcHRlciBpbXBsZW1lbnRzIElTZXJ2aWNlIHsKLQotCXB1YmxpYyBMaXN0IGdldEVuZFBvaW50cygpIHsKLQkJTGlzdCBhZGFwdGVyTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJTGlzdCBlbmRQb2ludHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCUl0ZXJhdG9yIGl0ID0gKChTZXJ2aWNlKSB0YXJnZXQpLmdldEVQb3J0cygpLml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLQkJCWVuZFBvaW50cy5hZGQoaXQubmV4dCgpKTsKLQkJfQotCi0JCXBvcHVsYXRlQWRhcHRlckxpc3QoZW5kUG9pbnRzLCBhZGFwdGVyTGlzdCk7Ci0JCUNvbGxlY3Rpb25zLnNvcnQoYWRhcHRlckxpc3QsIG5ldyBFbmRQb2ludENvbXBhcmF0b3IoKSk7Ci0KLQkJcmV0dXJuIGFkYXB0ZXJMaXN0OwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLQkJcmV0dXJuICgoU2VydmljZSkgdGFyZ2V0KS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotCX0KLQkKLQlwdWJsaWMgTGlzdCBnZXRGaWVsZHMoKSB7Ci0JCXJldHVybiBnZXRFbmRQb2ludHMoKTsKLQl9Ci0JCi0JcHVibGljIElEZXNjcmlwdGlvbiBnZXRPd25lckRlc2NyaXB0aW9uKCkgewotCQlyZXR1cm4gKElEZXNjcmlwdGlvbikgb3duZXI7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmdbXSBnZXRBY3Rpb25zKE9iamVjdCBvYmplY3QpIHsKLSAgICBMaXN0IGFjdGlvbklEcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJYWN0aW9uSURzLmFkZChBU0RBZGRFbmRQb2ludEFjdGlvbi5JRCk7Ci0JCWFjdGlvbklEcy5hZGQoQVNERGVsZXRlQWN0aW9uLklEKTsKLQotICAgIGlmIChpc1JlYWRPbmx5KCkpIHsKLSAgICAgIGFjdGlvbklEcy5hZGQoT3BlbkluTmV3RWRpdG9yLklEKTsKLSAgICB9Ci0gICAgcmV0dXJuIChTdHJpbmcgW10pYWN0aW9uSURzLnRvQXJyYXkobmV3IFN0cmluZ1swXSk7Ci0JfQotICAgIAotICAgIHB1YmxpYyBDb21tYW5kIGdldEFkZEVuZFBvaW50Q29tbWFuZCgpIHsKLSAgICAgIHJldHVybiBuZXcgVzExQWRkRW5kUG9pbnRDb21tYW5kKChTZXJ2aWNlKXRhcmdldCk7Ci0gICAgfQotICAgIAotCXB1YmxpYyBJbWFnZSBnZXRJbWFnZSgpIHsKLQkJcmV0dXJuIFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgiaWNvbnMvc2VydmljZV9vYmouZ2lmIik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQlyZXR1cm4gInNlcnZpY2UiOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyBJVHJlZUVsZW1lbnRbXSBnZXRDaGlsZHJlbigpIHsKLQkJTGlzdCBlbmRQb2ludHMgPSBnZXRFbmRQb2ludHMoKTsKLQkJSVRyZWVFbGVtZW50W10gdHJlZUVsZW1lbnRzID0gbmV3IElUcmVlRWxlbWVudFtlbmRQb2ludHMuc2l6ZSgpXTsKLQkJCi0JCWZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBlbmRQb2ludHMuc2l6ZSgpOyBpbmRleCsrKSB7Ci0JCQl0cmVlRWxlbWVudHNbaW5kZXhdID0gKElUcmVlRWxlbWVudCkgZW5kUG9pbnRzLmdldChpbmRleCk7Ci0JCX0KLQkJCi0JCXJldHVybiB0cmVlRWxlbWVudHM7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oKSB7Ci0JCWlmIChnZXRDaGlsZHJlbigpLmxlbmd0aCA+IDApIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIElUcmVlRWxlbWVudCBnZXRQYXJlbnQoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExVHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyMGRkZjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5XU0RMQmFzZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNERGVsZXRlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTRE9wZW5TY2hlbWFBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLQotcHVibGljIGNsYXNzIFcxMVR5cGUgZXh0ZW5kcyBXU0RMQmFzZUFkYXB0ZXIgaW1wbGVtZW50cyBJVHlwZSB7Ci0JcHVibGljIElEZXNjcmlwdGlvbiBnZXRPd25lckRlc2NyaXB0aW9uKCkgewotCQlyZXR1cm4gKElEZXNjcmlwdGlvbikgb3duZXI7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotCQlYU0RTY2hlbWEgc2NoZW1hPSAoWFNEU2NoZW1hKSB0YXJnZXQ7Ci0JCXJldHVybiBzY2hlbWEuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmdbXSBnZXRBY3Rpb25zKE9iamVjdCBvYmplY3QpIHsKLQkJU3RyaW5nW10gYWN0aW9uSURzID0gbmV3IFN0cmluZ1syXTsKLQkJYWN0aW9uSURzWzBdID0gQVNET3BlblNjaGVtYUFjdGlvbi5JRDsKLQkJYWN0aW9uSURzWzFdID0gQVNERGVsZXRlQWN0aW9uLklEOwkKLQkJcmV0dXJuIGFjdGlvbklEczsKLQl9Ci0JCi0JcHVibGljIEltYWdlIGdldEltYWdlKCkgewotCQlyZXR1cm4gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEltYWdlKCJpY29ucy94c2Rfb2JqLmdpZiIpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJcmV0dXJuICJzY2hlbWEiOyAvLyROT04tTkxTLTEkCi0JfQotCXB1YmxpYyBJVHJlZUVsZW1lbnRbXSBnZXRDaGlsZHJlbigpIHsKLQkJcmV0dXJuIG5ldyBJVHJlZUVsZW1lbnRbMF07Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgSVRyZWVFbGVtZW50IGdldFBhcmVudCgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFUeXBlc0NhdGVnb3J5QWRhcHRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9iYXNpYy9XMTFUeXBlc0NhdGVnb3J5QWRhcHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTg1NDE5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvYmFzaWMvVzExVHlwZXNDYXRlZ29yeUFkYXB0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYzsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JVHJlZUVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBXMTFUeXBlc0NhdGVnb3J5QWRhcHRlciBleHRlbmRzIFcxMUNhdGVnb3J5QWRhcHRlciB7Ci0JcHVibGljIFcxMVR5cGVzQ2F0ZWdvcnlBZGFwdGVyKElEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiwgU3RyaW5nIGxhYmVsLCBJbWFnZSBpbWFnZSwgaW50IGdyb3VwVHlwZSkgewotCQlzdXBlcihkZXNjcmlwdGlvbiwgbGFiZWwsaW1hZ2UsIENvbGxlY3Rpb25zLkVNUFRZX0xJU1QsIGdyb3VwVHlwZSk7Ci0JfQotCi0JcHVibGljIElUcmVlRWxlbWVudFtdIGdldENoaWxkcmVuKCkgewotCQlMaXN0IHR5cGVzID0gKChXMTFEZXNjcmlwdGlvbikgZ2V0T3duZXJEZXNjcmlwdGlvbigpKS5nZXRUeXBlcygpOwotCQlyZXR1cm4gKElUcmVlRWxlbWVudFtdKSB0eXBlcy50b0FycmF5KG5ldyBJVHJlZUVsZW1lbnRbMF0pOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkQmluZGluZ0NvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkQmluZGluZ0NvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTM1ZDU2MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMUFkZEJpbmRpbmdDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuSUFTREFkZENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkQmluZGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5OYW1lVXRpbDsKLQotcHVibGljIGNsYXNzIFcxMUFkZEJpbmRpbmdDb21tYW5kIGV4dGVuZHMgVzExVG9wTGV2ZWxFbGVtZW50Q29tbWFuZCBpbXBsZW1lbnRzIElBU0RBZGRDb21tYW5kIHsKLQlwcml2YXRlIFN0cmluZyBuZXdOYW1lOwotCXByaXZhdGUgQmluZGluZyBuZXdCaW5kaW5nOwotCQotCXB1YmxpYyBXMTFBZGRCaW5kaW5nQ29tbWFuZChEZWZpbml0aW9uIGRlZmluaXRpb24pIHsKLSAgICBzdXBlcihNZXNzYWdlcy5fVUlfQUNUSU9OX0FERF9CSU5ESU5HLCBkZWZpbml0aW9uKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0TmV3QmluZGluZ05hbWUoU3RyaW5nIG5ld05hbWUpIHsKLQkJdGhpcy5uZXdOYW1lID0gbmV3TmFtZTsKLQl9Ci0JCi0JcHVibGljIEJpbmRpbmcgZ2V0TmV3QmluZGluZygpIHsKLQkJcmV0dXJuIG5ld0JpbmRpbmc7Ci0JfQotCQotCXB1YmxpYyB2b2lkIGV4ZWN1dGUoKSB7Ci0JCXRyeSB7Ci0JCQliZWdpblJlY29yZGluZyhkZWZpbml0aW9uLmdldEVsZW1lbnQoKSk7Ci0JCQlzdXBlci5leGVjdXRlKCk7Ci0JCQlpZiAobmV3TmFtZSA9PSBudWxsIHx8IG5ld05hbWUuZXF1YWxzKCIiKSkgeyAvLyROT04tTkxTLTEkCi0JCQkJbmV3TmFtZSA9IE5hbWVVdGlsLmJ1aWxkVW5pcXVlQmluZGluZ05hbWUoZGVmaW5pdGlvbiwgIk5ld0JpbmRpbmciKTsgLy8kTk9OLU5MUy0xJAotCQkJfQotCQkJCi0JCQlBZGRCaW5kaW5nQ29tbWFuZCBjb21tYW5kID0gbmV3IEFkZEJpbmRpbmdDb21tYW5kKGRlZmluaXRpb24sIG5ld05hbWUpOwotCQkJY29tbWFuZC5ydW4oKTsKLQkJCQotCQkJbmV3QmluZGluZyA9IChCaW5kaW5nKSBjb21tYW5kLmdldFdTRExFbGVtZW50KCk7Ci0JCQlmb3JtYXRDaGlsZChuZXdCaW5kaW5nLmdldEVsZW1lbnQoKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQllbmRSZWNvcmRpbmcoZGVmaW5pdGlvbi5nZXRFbGVtZW50KCkpOwotCQl9Ci0JfQotCQotCXB1YmxpYyBPYmplY3QgZ2V0TmV3bHlBZGRlZENvbXBvbmVudCgpIHsKLQkJcmV0dXJuIG5ld0JpbmRpbmc7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFBZGRFbmRQb2ludENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkRW5kUG9pbnRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2NGUzNzIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFBZGRFbmRQb2ludENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kczsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLklBU0RBZGRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLndpemFyZHMuUG9ydFdpemFyZDsKLQotcHVibGljIGNsYXNzIFcxMUFkZEVuZFBvaW50Q29tbWFuZCBleHRlbmRzIFcxMVRvcExldmVsRWxlbWVudENvbW1hbmQgaW1wbGVtZW50cyBJQVNEQWRkQ29tbWFuZAotewotICAgIHByaXZhdGUgU2VydmljZSBzZXJ2aWNlOwotICAgIHByaXZhdGUgUG9ydCBwb3J0OwotICAgIAotICAgIHB1YmxpYyBXMTFBZGRFbmRQb2ludENvbW1hbmQoU2VydmljZSBzZXJ2aWNlKSB7Ci0gICAgICAgIHN1cGVyKE1lc3NhZ2VzLl9VSV9BQ1RJT05fQURELCBzZXJ2aWNlLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0gICAgICAgIHRoaXMuc2VydmljZSA9IHNlcnZpY2U7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIGV4ZWN1dGUoKSB7Ci0JCXRyeSB7Ci0JCQliZWdpblJlY29yZGluZyhkZWZpbml0aW9uLmdldEVsZW1lbnQoKSk7Ci0JCQkKLQkgICAgCVBvcnRXaXphcmQgd2l6YXJkID0gbmV3IFBvcnRXaXphcmQoc2VydmljZSk7Ci0JCQlXaXphcmREaWFsb2cgd2l6YXJkRGlhbG9nID0gbmV3IFdpemFyZERpYWxvZyhEaXNwbGF5LmdldEN1cnJlbnQoKS5nZXRBY3RpdmVTaGVsbCgpLCB3aXphcmQpOwotCQkJd2l6YXJkRGlhbG9nLmNyZWF0ZSgpOwotCi0JCQlpbnQgcmVzdWx0ID0gd2l6YXJkRGlhbG9nLm9wZW4oKTsKLQkJCWlmIChyZXN1bHQgPT0gV2luZG93Lk9LICYmIHNlcnZpY2UuZ2V0RVBvcnRzKCkuc2l6ZSgpID4gMCkgewotCQkJCUxpc3QgcG9ydHMgPSBzZXJ2aWNlLmdldEVQb3J0cygpOwotCQkJCXBvcnQgPSAoUG9ydCkgcG9ydHMuZ2V0KHBvcnRzLnNpemUoKSAtIDEpOwotCQkJCQotCQkJCWZvcm1hdENoaWxkKHBvcnQuZ2V0RWxlbWVudCgpKTsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWVuZFJlY29yZGluZyhkZWZpbml0aW9uLmdldEVsZW1lbnQoKSk7Ci0JCX0KLSAgICB9Ci0KLQlwdWJsaWMgT2JqZWN0IGdldE5ld2x5QWRkZWRDb21wb25lbnQoKSB7Ci0JCXJldHVybiBwb3J0OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkRmF1bHRQYXJhbWV0ZXJDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMUFkZEZhdWx0UGFyYW1ldGVyQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDVjZTBiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkRmF1bHRQYXJhbWV0ZXJDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLklBU0RBZGRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZEZhdWx0UGFyYW1ldGVyQ29tbWFuZDsKLQotcHVibGljIGNsYXNzIFcxMUFkZEZhdWx0UGFyYW1ldGVyQ29tbWFuZCBleHRlbmRzIFcxMVRvcExldmVsRWxlbWVudENvbW1hbmQgaW1wbGVtZW50cyBJQVNEQWRkQ29tbWFuZCB7Ci0JcHJvdGVjdGVkIE9wZXJhdGlvbiBvcGVyYXRpb247Ci0JcHJvdGVjdGVkIEZhdWx0IGZhdWx0OwotCXByb3RlY3RlZCBPYmplY3QgbmV3T2JqZWN0OwotCXByaXZhdGUgaW50IHBhcmFtZXRlclBhdHRlcm4gPSAtMTsKLQkKLQlwdWJsaWMgVzExQWRkRmF1bHRQYXJhbWV0ZXJDb21tYW5kKE9wZXJhdGlvbiBvcGVyYXRpb24sIEZhdWx0IGZhdWx0KSB7Ci0gICAgICAgIHN1cGVyKE1lc3NhZ2VzLl9VSV9BQ1RJT05fQUREX0ZBVUxULCBvcGVyYXRpb24uZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLQkJdGhpcy5vcGVyYXRpb24gPSBvcGVyYXRpb247Ci0JCXRoaXMuZmF1bHQgPSBmYXVsdDsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0UGFyYW1ldGVyUGF0dGVybihpbnQgcGF0dGVybikgewotCQlwYXJhbWV0ZXJQYXR0ZXJuID0gcGF0dGVybjsKLQl9Ci0JCi0JcHVibGljIHZvaWQgZXhlY3V0ZSgpIHsKLQkJdHJ5IHsKLQkJCWJlZ2luUmVjb3JkaW5nKG9wZXJhdGlvbi5nZXRFbGVtZW50KCkpOwotCi0JCQlpZiAocGFyYW1ldGVyUGF0dGVybiA9PSAtMSkgewotCQkJCS8vIERldGVybWluZSB3aGljaCBQYXR0ZXJuIHdlIHNob3VsZCB1c2UuICBGb3IgZXhhbXBsZSwgQUREQmFzZVBhcmFtZXRlckNvbW1hbmQuUEFSVF9FTEVNRU5UX1NFUV9FTEVNRU5UCi0JCQkJcGFyYW1ldGVyUGF0dGVybiA9IEFkZEZhdWx0UGFyYW1ldGVyQ29tbWFuZC5nZXRQYXJhbWV0ZXJQYXR0ZXJuRm9yRmF1bHQob3BlcmF0aW9uLCBmYXVsdCk7Ci0JCQkJaWYgKHBhcmFtZXRlclBhdHRlcm4gPT0gLTEpIHsKLQkJCQkJcGFyYW1ldGVyUGF0dGVybiA9IEFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kLmdldFBhcmFtZXRlclBhdHRlcm4ob3BlcmF0aW9uKTsKLQkJCQl9Ci0JCQl9Ci0JCQkKLQkJCUFkZEZhdWx0UGFyYW1ldGVyQ29tbWFuZCBjb21tYW5kID0gbmV3IEFkZEZhdWx0UGFyYW1ldGVyQ29tbWFuZChvcGVyYXRpb24sIGZhdWx0KTsKLQkJCWNvbW1hbmQuc2V0U3R5bGUocGFyYW1ldGVyUGF0dGVybik7Ci0JCQljb21tYW5kLnJ1bigpOwotCQkJZmF1bHQgPSAoRmF1bHQpIGNvbW1hbmQuZ2V0TWVzc2FnZVJlZmVyZW5jZSgpOwotCQkJbmV3T2JqZWN0ID0gY29tbWFuZC5nZXROZXdseUFkZGVkQ29tcG9uZW50UGFydCgpOwotCQkJCi0JCQlpZiAoY29tbWFuZC5nZXRYU0RFbGVtZW50RGVjbGFyYXRpb24oKSAhPSBudWxsKSB7Ci0JCQkJLy8gVHJ5IHRvIGdyYWIgdGhlICJpbm5lciIgWFNERWxlbWVudAotCQkJCW5ld09iamVjdCA9IGdldE5ld1hTREVsZW1lbnQoY29tbWFuZC5nZXRYU0RFbGVtZW50RGVjbGFyYXRpb24oKSk7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQllbmRSZWNvcmRpbmcob3BlcmF0aW9uLmdldEVsZW1lbnQoKSk7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIE9iamVjdCBnZXROZXdseUFkZGVkQ29tcG9uZW50KCkgewotCQlyZXR1cm4gbmV3T2JqZWN0OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkSW1wb3J0Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFBZGRJbXBvcnRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkYTJmOGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFBZGRJbXBvcnRDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5JQVNEQWRkQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRJbXBvcnRDb21tYW5kOwotCi1wdWJsaWMgY2xhc3MgVzExQWRkSW1wb3J0Q29tbWFuZCBleHRlbmRzIFcxMVRvcExldmVsRWxlbWVudENvbW1hbmQgaW1wbGVtZW50cyBJQVNEQWRkQ29tbWFuZCB7Ci0JcHJpdmF0ZSBPYmplY3QgY29tcG9uZW50OwotCQotCXB1YmxpYyBXMTFBZGRJbXBvcnRDb21tYW5kKERlZmluaXRpb24gZGVmaW5pdGlvbikgewotCQlzdXBlcihNZXNzYWdlcy5fVUlfQUNUSU9OX0FERF9JTVBPUlQsIGRlZmluaXRpb24pOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBleGVjdXRlKCkgewotCQl0cnkgewotCQkJYmVnaW5SZWNvcmRpbmcoZGVmaW5pdGlvbi5nZXRFbGVtZW50KCkpOwotCi0JCQlzdXBlci5leGVjdXRlKCk7Ci0JCQlTdHJpbmcgbmFtZXNwYWNlID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJCVN0cmluZyBsb2NhdGlvbiA9ICIiOyAvLyROT04tTkxTLTEkCi0JCQlBZGRJbXBvcnRDb21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkSW1wb3J0Q29tbWFuZChkZWZpbml0aW9uLCBuYW1lc3BhY2UsIGxvY2F0aW9uKTsKLQkJCWNvbW1hbmQucnVuKCk7Ci0JCQlmb3JtYXRDaGlsZChjb21tYW5kLmdldFdTRExFbGVtZW50KCkuZ2V0RWxlbWVudCgpKTsKLQkJCWNvbXBvbmVudCA9IGNvbW1hbmQuZ2V0V1NETEVsZW1lbnQoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWVuZFJlY29yZGluZyhkZWZpbml0aW9uLmdldEVsZW1lbnQoKSk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgT2JqZWN0IGdldE5ld2x5QWRkZWRDb21wb25lbnQoKSB7Ci0JCXJldHVybiBjb21wb25lbnQ7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkSW5wdXRQYXJhbWV0ZXJDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMUFkZElucHV0UGFyYW1ldGVyQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjQzYzI4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkSW5wdXRQYXJhbWV0ZXJDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLklBU0RBZGRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZElucHV0UGFyYW1ldGVyQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29uY3JldGVDb21wb25lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBXMTFBZGRJbnB1dFBhcmFtZXRlckNvbW1hbmQgZXh0ZW5kcyBXMTFUb3BMZXZlbEVsZW1lbnRDb21tYW5kIGltcGxlbWVudHMgSUFTREFkZENvbW1hbmR7Ci0JcHJvdGVjdGVkIE9wZXJhdGlvbiBvcGVyYXRpb247Ci0JcHJpdmF0ZSBPYmplY3QgaW5wdXQ7Ci0JcHJpdmF0ZSBpbnQgcGFyYW1ldGVyUGF0dGVybiA9IC0xOwotCQotCXB1YmxpYyBXMTFBZGRJbnB1dFBhcmFtZXRlckNvbW1hbmQoT3BlcmF0aW9uIG9wZXJhdGlvbikgewotICAgICAgICBzdXBlcihNZXNzYWdlcy5fVUlfQUNUSU9OX0FERF9JTlBVVCwgb3BlcmF0aW9uLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0JCXRoaXMub3BlcmF0aW9uID0gb3BlcmF0aW9uOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRQYXJhbWV0ZXJQYXR0ZXJuKGludCBwYXR0ZXJuKSB7Ci0JCXBhcmFtZXRlclBhdHRlcm4gPSBwYXR0ZXJuOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBleGVjdXRlKCkgewotCQl0cnkgewotCQkJYmVnaW5SZWNvcmRpbmcob3BlcmF0aW9uLmdldEVsZW1lbnQoKSk7Ci0KLQkJCWlmIChwYXJhbWV0ZXJQYXR0ZXJuID09IC0xKSB7Ci0JCQkJLy8gRGV0ZXJtaW5lIHdoaWNoIFBhdHRlcm4gd2Ugc2hvdWxkIHVzZS4gIEZvciBleGFtcGxlLCBBRERCYXNlUGFyYW1ldGVyQ29tbWFuZC5QQVJUX0VMRU1FTlRfU0VRX0VMRU1FTlQKLQkJCQlwYXJhbWV0ZXJQYXR0ZXJuID0gQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuZ2V0UGFyYW1ldGVyUGF0dGVybihvcGVyYXRpb24sIHRydWUpOwotCQkJCWlmIChwYXJhbWV0ZXJQYXR0ZXJuID09IC0xKSB7Ci0JCQkJCXBhcmFtZXRlclBhdHRlcm4gPSBBZGRCYXNlUGFyYW1ldGVyQ29tbWFuZC5nZXRQYXJhbWV0ZXJQYXR0ZXJuKG9wZXJhdGlvbik7Ci0JCQkJfQotCQkJfQotCQkJCi0JCQlBZGRJbnB1dFBhcmFtZXRlckNvbW1hbmQgY29tbWFuZCA9IG5ldyBBZGRJbnB1dFBhcmFtZXRlckNvbW1hbmQob3BlcmF0aW9uLCBwYXJhbWV0ZXJQYXR0ZXJuKTsKLQkJCWNvbW1hbmQucnVuKCk7Ci0JCQlpbnB1dCA9IGNvbW1hbmQuZ2V0TmV3bHlBZGRlZENvbXBvbmVudFBhcnQoKTsKLQkJCQotCQkJZm9ybWF0Q2hpbGQob3BlcmF0aW9uLmdldEVJbnB1dCgpLmdldEVsZW1lbnQoKSk7Ci0JCQlpZiAoY29tbWFuZC5nZXRYU0RFbGVtZW50RGVjbGFyYXRpb24oKSAhPSBudWxsKSB7Ci0JCQkJLy8gVHJ5IHRvIGdyYWIgdGhlICJpbm5lciIgWFNERWxlbWVudAotCQkJCWlucHV0ID0gZ2V0TmV3WFNERWxlbWVudChjb21tYW5kLmdldFhTREVsZW1lbnREZWNsYXJhdGlvbigpKTsKLQkJCQlmb3JtYXRDaGlsZChnZXRYU0RQYXJlbnQoY29tbWFuZC5nZXRYU0RFbGVtZW50RGVjbGFyYXRpb24oKSkuZ2V0RWxlbWVudCgpKTsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWVuZFJlY29yZGluZyhvcGVyYXRpb24uZ2V0RWxlbWVudCgpKTsKLQkJfQotCX0KLQkKLQlwcm90ZWN0ZWQgWFNEQ29uY3JldGVDb21wb25lbnQgZ2V0WFNEUGFyZW50KFhTRENvbmNyZXRlQ29tcG9uZW50IHhzZCkgewotCQlYU0RDb25jcmV0ZUNvbXBvbmVudCBwYXJlbnQgPSB4c2QuZ2V0U2NoZW1hKCk7Ci0JCXJldHVybiBwYXJlbnQ7Ci0JfQotCQotCXB1YmxpYyBPYmplY3QgZ2V0TmV3bHlBZGRlZENvbXBvbmVudCgpIHsKLQkJcmV0dXJuIGlucHV0OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkSW50ZXJmYWNlQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFBZGRJbnRlcmZhY2VDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjZWY3ZDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFBZGRJbnRlcmZhY2VDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5JQVNEQWRkQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkUG9ydFR5cGVDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuTmFtZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMQWRhcHRlckZhY3RvcnlIZWxwZXI7Ci0KLXB1YmxpYyBjbGFzcyBXMTFBZGRJbnRlcmZhY2VDb21tYW5kIGV4dGVuZHMgVzExVG9wTGV2ZWxFbGVtZW50Q29tbWFuZCBpbXBsZW1lbnRzIElBU0RBZGRDb21tYW5kIHsKLQlwcml2YXRlIFN0cmluZyBuZXdOYW1lOwotCXByaXZhdGUgUG9ydFR5cGUgbmV3UG9ydFR5cGU7Ci0JCi0JcHVibGljIFcxMUFkZEludGVyZmFjZUNvbW1hbmQoRGVmaW5pdGlvbiBkZWZpbml0aW9uKSB7Ci0gICAgc3VwZXIoTWVzc2FnZXMuX1VJX0FDVElPTl9BRERfUE9SVFRZUEUsIGRlZmluaXRpb24pOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXROZXdQb3J0VHlwZU5hbWUoU3RyaW5nIG5ld05hbWUpIHsKLQkJdGhpcy5uZXdOYW1lID0gbmV3TmFtZTsKLQl9Ci0JCi0JcHVibGljIFBvcnRUeXBlIGdldE5ld1BvcnRUeXBlKCkgewotCQlyZXR1cm4gbmV3UG9ydFR5cGU7Ci0JfQotCQotCXB1YmxpYyB2b2lkIGV4ZWN1dGUoKSB7Ci0JCXRyeSB7Ci0JCQliZWdpblJlY29yZGluZyhkZWZpbml0aW9uLmdldEVsZW1lbnQoKSk7Ci0JCQlzdXBlci5leGVjdXRlKCk7Ci0JCQlpZiAobmV3TmFtZSA9PSBudWxsIHx8IG5ld05hbWUuZXF1YWxzKCIiKSkgeyAvLyROT04tTkxTLTEkCi0JCQkJbmV3TmFtZSA9IE5hbWVVdGlsLmJ1aWxkVW5pcXVlUG9ydFR5cGVOYW1lKGRlZmluaXRpb24sICJOZXdQb3J0VHlwZSIpOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0JCQkvLyBBZGQgdGhlIFBvcnQgVHlwZQotCQkJQWRkUG9ydFR5cGVDb21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkUG9ydFR5cGVDb21tYW5kKGRlZmluaXRpb24sIG5ld05hbWUsIGZhbHNlKTsKLQkJCWNvbW1hbmQucnVuKCk7Ci0JCQkKLQkJCW5ld1BvcnRUeXBlID0gKFBvcnRUeXBlKSBjb21tYW5kLmdldFdTRExFbGVtZW50KCk7Ci0JCQkKLQkJCS8vIEFkZCB0aGUgT3BlcmF0aW9uCi0JCQlJSW50ZXJmYWNlIGlJbnRlcmZhY2UgPSAoSUludGVyZmFjZSkgV1NETEFkYXB0ZXJGYWN0b3J5SGVscGVyLmdldEluc3RhbmNlKCkuYWRhcHQobmV3UG9ydFR5cGUpOwotCQkJQ29tbWFuZCBhZGRPcGVyYXRpb25Db21tYW5kID0gaUludGVyZmFjZS5nZXRBZGRPcGVyYXRpb25Db21tYW5kKCk7Ci0JCQlhZGRPcGVyYXRpb25Db21tYW5kLmV4ZWN1dGUoKTsKLQkJCWZvcm1hdENoaWxkKG5ld1BvcnRUeXBlLmdldEVsZW1lbnQoKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQllbmRSZWNvcmRpbmcoZGVmaW5pdGlvbi5nZXRFbGVtZW50KCkpOwotCQl9Ci0JfQotCQotCXB1YmxpYyBPYmplY3QgZ2V0TmV3bHlBZGRlZENvbXBvbmVudCgpIHsKLQkJcmV0dXJuIG5ld1BvcnRUeXBlOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkTWVzc2FnZUNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkTWVzc2FnZUNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjk4NDRlMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMUFkZE1lc3NhZ2VDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLklBU0RBZGRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZE1lc3NhZ2VDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuTmFtZVV0aWw7Ci0KLXB1YmxpYyBjbGFzcyBXMTFBZGRNZXNzYWdlQ29tbWFuZCBleHRlbmRzIFcxMVRvcExldmVsRWxlbWVudENvbW1hbmQgaW1wbGVtZW50cyBJQVNEQWRkQ29tbWFuZCB7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgbmV3TmFtZTsKLSAgICBwcml2YXRlIE1lc3NhZ2UgbWVzc2FnZTsKLQkKLSAgICBwdWJsaWMgVzExQWRkTWVzc2FnZUNvbW1hbmQoRGVmaW5pdGlvbiBkZWZpbml0aW9uKSB7Ci0gICAgICAgIHN1cGVyKE1lc3NhZ2VzLl9VSV9BQ1RJT05fQUREX01FU1NBR0UsIGRlZmluaXRpb24pOwotICAgIH0KLSAgICAKLQlwdWJsaWMgdm9pZCBzZXROZXdNZXNzYWdlTmFtZShTdHJpbmcgbmV3TmFtZSkgewotCQl0aGlzLm5ld05hbWUgPSBuZXdOYW1lOwotCX0KLQotICAgIHB1YmxpYyB2b2lkIGV4ZWN1dGUoKSB7Ci0gICAgCXRyeSB7Ci0gICAgCQliZWdpblJlY29yZGluZyhkZWZpbml0aW9uLmdldEVsZW1lbnQoKSk7Ci0gICAgCQlzdXBlci5leGVjdXRlKCk7Ci0JCQlpZiAobmV3TmFtZSA9PSBudWxsIHx8IG5ld05hbWUuZXF1YWxzKCIiKSkgeyAvLyROT04tTkxTLTEkCi0JCQkJbmV3TmFtZSA9IE5hbWVVdGlsLmJ1aWxkVW5pcXVlTWVzc2FnZU5hbWUoZGVmaW5pdGlvbiwgIk5ld01lc3NhZ2UiKTsgLy8kTk9OLU5MUy0xJAotCQkJfQotCQotCSAgICAJQWRkTWVzc2FnZUNvbW1hbmQgY29tbWFuZCA9IG5ldyBBZGRNZXNzYWdlQ29tbWFuZChkZWZpbml0aW9uLCBuZXdOYW1lLCB0cnVlKTsKLQkgICAgICAgIGNvbW1hbmQucnVuKCk7Ci0JICAgICAgICBtZXNzYWdlID0gKE1lc3NhZ2UpIGNvbW1hbmQuZ2V0V1NETEVsZW1lbnQoKTsKLQkgICAgICAgIGZvcm1hdENoaWxkKG1lc3NhZ2UuZ2V0RWxlbWVudCgpKTsKLSAgICAJfQotICAgIAlmaW5hbGx5IHsKLSAgICAJCWVuZFJlY29yZGluZyhkZWZpbml0aW9uLmdldEVsZW1lbnQoKSk7Ci0gICAgCX0KLSAgICB9Ci0gICAgCi0gICAgcHVibGljIE1lc3NhZ2UgZ2V0TmV3TWVzc2FnZSgpIHsKLSAgICAJcmV0dXJuIG1lc3NhZ2U7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBPYmplY3QgZ2V0TmV3bHlBZGRlZENvbXBvbmVudCgpIHsKLSAgICAJcmV0dXJuIG1lc3NhZ2U7Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkT3BlcmF0aW9uQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFBZGRPcGVyYXRpb25Db21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhZTBhYWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFBZGRPcGVyYXRpb25Db21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzOwotCi1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb25UeXBlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuSUFTREFkZENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkRmF1bHRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZElucHV0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRJbnB1dFBhcmFtZXRlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkTWVzc2FnZVJlZmVyZW5jZUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkT3BlcmF0aW9uQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRPdXRwdXRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZE91dHB1dFBhcmFtZXRlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5OYW1lVXRpbDsKLQotcHVibGljIGNsYXNzIFcxMUFkZE9wZXJhdGlvbkNvbW1hbmQgZXh0ZW5kcyBXMTFUb3BMZXZlbEVsZW1lbnRDb21tYW5kIGltcGxlbWVudHMgSUFTREFkZENvbW1hbmQgewotCXByaXZhdGUgUG9ydFR5cGUgcG9ydFR5cGU7Ci0JcHJpdmF0ZSBPcGVyYXRpb24gb3BlcmF0aW9uOwotCQotCXB1YmxpYyBXMTFBZGRPcGVyYXRpb25Db21tYW5kKFBvcnRUeXBlIHBvcnRUeXBlKSB7Ci0gICAgICAgIHN1cGVyKE1lc3NhZ2VzLl9VSV9BQ1RJT05fQUREX09QRVJBVElPTiwgcG9ydFR5cGUuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLQkJdGhpcy5wb3J0VHlwZSA9IHBvcnRUeXBlOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBleGVjdXRlKCkgewotCQl0cnkgewotCQkJYmVnaW5SZWNvcmRpbmcocG9ydFR5cGUuZ2V0RWxlbWVudCgpKTsKLQkJCQotCQkJU3RyaW5nIG5hbWUgPSBOYW1lVXRpbC5nZXRPcGVyYXRpb25OYW1lKHBvcnRUeXBlKTsKLQkJCUFkZE9wZXJhdGlvbkNvbW1hbmQgb3BlcmF0aW9uQ29tbWFuZCA9IG5ldyBBZGRPcGVyYXRpb25Db21tYW5kKHBvcnRUeXBlLCBuYW1lKTsKLQkJCW9wZXJhdGlvbkNvbW1hbmQucnVuKCk7Ci0JCQlvcGVyYXRpb24gPSAoT3BlcmF0aW9uKSBvcGVyYXRpb25Db21tYW5kLmdldFdTRExFbGVtZW50KCk7Ci0JCi0JCQljcmVhdGVNZXNzYWdlKG9wZXJhdGlvbiwgSU1lc3NhZ2VSZWZlcmVuY2UuS0lORF9JTlBVVCk7Ci0JCQljcmVhdGVNZXNzYWdlKG9wZXJhdGlvbiwgSU1lc3NhZ2VSZWZlcmVuY2UuS0lORF9PVVRQVVQpOwotCQotCQkJY3JlYXRlUGFyYW1ldGVyKG9wZXJhdGlvbiwgbnVsbCwgSU1lc3NhZ2VSZWZlcmVuY2UuS0lORF9JTlBVVCk7Ci0JCQljcmVhdGVQYXJhbWV0ZXIob3BlcmF0aW9uLCBudWxsLCBJTWVzc2FnZVJlZmVyZW5jZS5LSU5EX09VVFBVVCk7Ci0JCi0JCQlvcGVyYXRpb24uc2V0U3R5bGUoT3BlcmF0aW9uVHlwZS5SRVFVRVNUX1JFU1BPTlNFKTsKLQkJCWZvcm1hdENoaWxkKG9wZXJhdGlvbi5nZXRFbGVtZW50KCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJZW5kUmVjb3JkaW5nKHBvcnRUeXBlLmdldEVsZW1lbnQoKSk7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIE9iamVjdCBnZXROZXdseUFkZGVkQ29tcG9uZW50KCkgewotCQlyZXR1cm4gb3BlcmF0aW9uOwotCX0KLQkKLQlwcml2YXRlIE1lc3NhZ2VSZWZlcmVuY2UgY3JlYXRlTWVzc2FnZShPcGVyYXRpb24gb3BlcmF0aW9uLCBpbnQgbWVzc2FnZUtpbmQpIHsKLQkJTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmID0gbnVsbDsKLQkJQWRkTWVzc2FnZVJlZmVyZW5jZUNvbW1hbmQgbWVzc2FnZVJlZkNvbW1hbmQgPSBudWxsOwotCSAgICBpZiAobWVzc2FnZUtpbmQgPT0gSU1lc3NhZ2VSZWZlcmVuY2UuS0lORF9JTlBVVCkKLQkgICAgewotCSAgICAJbWVzc2FnZVJlZkNvbW1hbmQgPSBuZXcgQWRkSW5wdXRDb21tYW5kKG9wZXJhdGlvbiwgbnVsbCk7Ci0JICAgIH0KLQkgICAgZWxzZSBpZiAobWVzc2FnZUtpbmQgPT0gSU1lc3NhZ2VSZWZlcmVuY2UuS0lORF9PVVRQVVQpCi0JICAgIHsKLQkgICAgCW1lc3NhZ2VSZWZDb21tYW5kID0gbmV3IEFkZE91dHB1dENvbW1hbmQob3BlcmF0aW9uLCBudWxsKTsKLQkgICAgfQotCSAgICBlbHNlIGlmIChtZXNzYWdlS2luZCA9PSBJTWVzc2FnZVJlZmVyZW5jZS5LSU5EX0ZBVUxUKQotCSAgICB7Ci0JICAgIAltZXNzYWdlUmVmQ29tbWFuZCA9IG5ldyBBZGRGYXVsdENvbW1hbmQob3BlcmF0aW9uLCBOYW1lVXRpbC5nZXRGYXVsdE5hbWUob3BlcmF0aW9uKSk7Ci0JICAgIH0KLQkgICAgbWVzc2FnZVJlZkNvbW1hbmQucnVuKCk7Ci0JICAgIG1lc3NhZ2VSZWYgPSAoTWVzc2FnZVJlZmVyZW5jZSkgbWVzc2FnZVJlZkNvbW1hbmQuZ2V0V1NETEVsZW1lbnQoKTsKLQkgICAgCi0vLwkgICAgQWRkTWVzc2FnZUNvbW1hbmQgY29tbWFuZCA9IG5ldyBBZGRNZXNzYWdlQ29tbWFuZChtZXNzYWdlUmVmLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSwgTmFtZVV0aWwuZ2V0TWVzc2FnZU5hbWUobWVzc2FnZVJlZikpOwotLy8JICAgIGNvbW1hbmQucnVuKCk7Ci0vLwkgICAgbWVzc2FnZVJlZi5zZXRFTWVzc2FnZSgoTWVzc2FnZSkgY29tbWFuZC5nZXRXU0RMRWxlbWVudCgpKTsKLQkgICAgCi0JICAgIHJldHVybiBtZXNzYWdlUmVmOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgY3JlYXRlUGFyYW1ldGVyKE9wZXJhdGlvbiBvcGVyYXRpb24sIFBhcnQgcGFydCwgaW50IGtpbmQpIHsKLQkJICBJUGFyYW1ldGVyIHBhcmFtZXRlciA9IG51bGw7Ci0JCSAgQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQgYWRkUGFyYW1ldGVyQ29tbWFuZCA9IG51bGw7Ci0JCSAgCi0JCSAgaWYgKGtpbmQgPT0gSU1lc3NhZ2VSZWZlcmVuY2UuS0lORF9JTlBVVCkgewotCQkJICBpbnQgcGFyYW1ldGVyUGF0dGVybiA9IEFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kLmdldFBhcmFtZXRlclBhdHRlcm4ocG9ydFR5cGUsIHRydWUpOwotCQkJICBpZiAocGFyYW1ldGVyUGF0dGVybiA9PSAtMSkgewotCQkJCSAgcGFyYW1ldGVyUGF0dGVybiA9IEFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kLlBBUlRfRUxFTUVOVF9TRVFfRUxFTUVOVDsKLQkJCSAgfQotCQkJICBhZGRQYXJhbWV0ZXJDb21tYW5kID0gbmV3IEFkZElucHV0UGFyYW1ldGVyQ29tbWFuZChvcGVyYXRpb24sIHBhcmFtZXRlclBhdHRlcm4sIHRydWUpOwotCQkgIH0KLQkJICBlbHNlIGlmIChraW5kID09IElNZXNzYWdlUmVmZXJlbmNlLktJTkRfT1VUUFVUKSB7Ci0JCQkgIGludCBwYXJhbWV0ZXJQYXR0ZXJuID0gQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuZ2V0UGFyYW1ldGVyUGF0dGVybihwb3J0VHlwZSwgZmFsc2UpOwotCQkJICBpZiAocGFyYW1ldGVyUGF0dGVybiA9PSAtMSkgewotCQkJCSAgcGFyYW1ldGVyUGF0dGVybiA9IEFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kLlBBUlRfRUxFTUVOVF9TRVFfRUxFTUVOVDsKLQkJCSAgfQkJCSAgCi0JCQkgIGFkZFBhcmFtZXRlckNvbW1hbmQgPSBuZXcgQWRkT3V0cHV0UGFyYW1ldGVyQ29tbWFuZChvcGVyYXRpb24sIHBhcmFtZXRlclBhdHRlcm4pOwotCQkgIH0KLQkJICAKLQkJICBpZiAocGFyYW1ldGVyID09IG51bGwgJiYgYWRkUGFyYW1ldGVyQ29tbWFuZCAhPSBudWxsKSB7Ci0JCQkgIGFkZFBhcmFtZXRlckNvbW1hbmQucnVuKCk7Ci0JCSAgfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkT3V0cHV0UGFyYW1ldGVyQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFBZGRPdXRwdXRQYXJhbWV0ZXJDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhOGQxZTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFBZGRPdXRwdXRQYXJhbWV0ZXJDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLklBU0RBZGRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZE91dHB1dFBhcmFtZXRlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbmNyZXRlQ29tcG9uZW50OwotCi1wdWJsaWMgY2xhc3MgVzExQWRkT3V0cHV0UGFyYW1ldGVyQ29tbWFuZCBleHRlbmRzIFcxMVRvcExldmVsRWxlbWVudENvbW1hbmQgaW1wbGVtZW50cyBJQVNEQWRkQ29tbWFuZCB7Ci0JcHJvdGVjdGVkIE9wZXJhdGlvbiBvcGVyYXRpb247Ci0JcHJpdmF0ZSBPYmplY3Qgb3V0cHV0OwotCXByaXZhdGUgaW50IHBhcmFtZXRlclBhdHRlcm4gPSAtMTsKLQkKLQlwdWJsaWMgVzExQWRkT3V0cHV0UGFyYW1ldGVyQ29tbWFuZChPcGVyYXRpb24gb3BlcmF0aW9uKSB7Ci0gICAgICAgIHN1cGVyKE1lc3NhZ2VzLl9VSV9BQ1RJT05fQUREX09VVFBVVCwgb3BlcmF0aW9uLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0JCXRoaXMub3BlcmF0aW9uID0gb3BlcmF0aW9uOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRQYXJhbWV0ZXJQYXR0ZXJuKGludCBwYXR0ZXJuKSB7Ci0JCXBhcmFtZXRlclBhdHRlcm4gPSBwYXR0ZXJuOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBleGVjdXRlKCkgewotCQl0cnkgewotCQkJYmVnaW5SZWNvcmRpbmcob3BlcmF0aW9uLmdldEVsZW1lbnQoKSk7Ci0KLQkJCWlmIChwYXJhbWV0ZXJQYXR0ZXJuID09IC0xKSB7Ci0JCQkJLy8gRGV0ZXJtaW5lIHdoaWNoIFBhdHRlcm4gd2Ugc2hvdWxkIHVzZS4gIEZvciBleGFtcGxlLCBBRERCYXNlUGFyYW1ldGVyQ29tbWFuZC5QQVJUX0VMRU1FTlRfU0VRX0VMRU1FTlQKLQkJCQlwYXJhbWV0ZXJQYXR0ZXJuID0gQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuZ2V0UGFyYW1ldGVyUGF0dGVybihvcGVyYXRpb24sIGZhbHNlKTsKLQkJCQlpZiAocGFyYW1ldGVyUGF0dGVybiA9PSAtMSkgewotCQkJCQlwYXJhbWV0ZXJQYXR0ZXJuID0gQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuZ2V0UGFyYW1ldGVyUGF0dGVybihvcGVyYXRpb24pOwotCQkJCX0KLQkJCX0KLQkJCQotCQkJQWRkT3V0cHV0UGFyYW1ldGVyQ29tbWFuZCBjb21tYW5kID0gbmV3IEFkZE91dHB1dFBhcmFtZXRlckNvbW1hbmQob3BlcmF0aW9uLCBwYXJhbWV0ZXJQYXR0ZXJuKTsKLQkJCWNvbW1hbmQucnVuKCk7Ci0JCQlvdXRwdXQgPSBjb21tYW5kLmdldE5ld2x5QWRkZWRDb21wb25lbnRQYXJ0KCk7Ci0JCQkKLQkJCWZvcm1hdENoaWxkKG9wZXJhdGlvbi5nZXRFT3V0cHV0KCkuZ2V0RWxlbWVudCgpKTsKLQkJCWlmIChjb21tYW5kLmdldFhTREVsZW1lbnREZWNsYXJhdGlvbigpICE9IG51bGwpIHsKLQkJCQkvLyBUcnkgdG8gZ3JhYiB0aGUgImlubmVyIiBYU0RFbGVtZW50Ci0JCQkJb3V0cHV0ID0gZ2V0TmV3WFNERWxlbWVudChjb21tYW5kLmdldFhTREVsZW1lbnREZWNsYXJhdGlvbigpKTsKLQkJCQlmb3JtYXRDaGlsZChnZXRYU0RQYXJlbnQoY29tbWFuZC5nZXRYU0RFbGVtZW50RGVjbGFyYXRpb24oKSkuZ2V0RWxlbWVudCgpKTsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWVuZFJlY29yZGluZyhvcGVyYXRpb24uZ2V0RWxlbWVudCgpKTsKLQkJfQotCX0KLQkKLQlwcm90ZWN0ZWQgWFNEQ29uY3JldGVDb21wb25lbnQgZ2V0WFNEUGFyZW50KFhTRENvbmNyZXRlQ29tcG9uZW50IHhzZCkgewotCQlYU0RDb25jcmV0ZUNvbXBvbmVudCBwYXJlbnQgPSB4c2Q7Ci0JCQotCQlmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgNDsgaW5kZXgrKykgewotCQkJWFNEQ29uY3JldGVDb21wb25lbnQgcHJldmlvdXMgPSBwYXJlbnQ7Ci0JCQlwYXJlbnQgPSBwYXJlbnQuZ2V0Q29udGFpbmVyKCk7Ci0JCQlpZiAocGFyZW50ID09IG51bGwpIHsKLQkJCQlwYXJlbnQgPSBwcmV2aW91czsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQkKLQkJcmV0dXJuIHBhcmVudDsKLQl9Ci0JCi0JcHVibGljIE9iamVjdCBnZXROZXdseUFkZGVkQ29tcG9uZW50KCkgewotCQlyZXR1cm4gb3V0cHV0OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkUGFydENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExQWRkUGFydENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjUwNGNmYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMUFkZFBhcnRDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuSUFTREFkZENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkUGFydENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5OYW1lVXRpbDsKLQotcHVibGljIGNsYXNzIFcxMUFkZFBhcnRDb21tYW5kIGV4dGVuZHMgVzExVG9wTGV2ZWxFbGVtZW50Q29tbWFuZCBpbXBsZW1lbnRzIElBU0RBZGRDb21tYW5kIHsKLSAgICBwcml2YXRlIE1lc3NhZ2UgbWVzc2FnZTsKLSAgICBwcml2YXRlIFBhcnQgcGFydDsKLSAgICAKLSAgICBwdWJsaWMgVzExQWRkUGFydENvbW1hbmQoTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgICAgIHN1cGVyKE1lc3NhZ2VzLl9VSV9BQ1RJT05fQUREX1BBUlQsIG1lc3NhZ2UuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLSAgICAgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgZXhlY3V0ZSgpIHsKLSAgICAJdHJ5IHsKLSAgICAJCWJlZ2luUmVjb3JkaW5nKG1lc3NhZ2UuZ2V0RWxlbWVudCgpKTsKLQotCSAgICAJQWRkUGFydENvbW1hbmQgY29tbWFuZCA9IG5ldyBBZGRQYXJ0Q29tbWFuZChtZXNzYWdlLCBOYW1lVXRpbC5idWlsZFVuaXF1ZVBhcnROYW1lKG1lc3NhZ2UsICJOZXdQYXJ0IikpOyAvLyROT04tTkxTLTEkCi0JICAgICAgICBjb21tYW5kLnJ1bigpOwotCSAgICAgICAgcGFydCA9IChQYXJ0KSBjb21tYW5kLmdldFdTRExFbGVtZW50KCk7Ci0JICAgICAgICBmb3JtYXRDaGlsZChwYXJ0LmdldEVsZW1lbnQoKSk7Ci0gICAgCX0KLSAgICAJZmluYWxseSB7Ci0gICAgCQllbmRSZWNvcmRpbmcobWVzc2FnZS5nZXRFbGVtZW50KCkpOwotICAgIAl9Ci0gICAgfQotICAgIAotCXB1YmxpYyBPYmplY3QgZ2V0TmV3bHlBZGRlZENvbXBvbmVudCgpIHsKLQkJcmV0dXJuIHBhcnQ7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFBZGRTY2hlbWFDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMUFkZFNjaGVtYUNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjcyNjMzOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMUFkZFNjaGVtYUNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kczsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5UeXBlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuSUFTREFkZENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkWFNEU2NoZW1hQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLk5hbWVVdGlsOwotCi1wdWJsaWMgY2xhc3MgVzExQWRkU2NoZW1hQ29tbWFuZCBleHRlbmRzIFcxMVRvcExldmVsRWxlbWVudENvbW1hbmQgaW1wbGVtZW50cyBJQVNEQWRkQ29tbWFuZCB7Ci0JcHJpdmF0ZSBPYmplY3Qgc2NoZW1hOwotCQotCXB1YmxpYyBXMTFBZGRTY2hlbWFDb21tYW5kKERlZmluaXRpb24gZGVmaW5pdGlvbikgewotICAgIHN1cGVyKE1lc3NhZ2VzLl9VSV9BQ1RJT05fQUREX1NDSEVNQSwgZGVmaW5pdGlvbik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIGV4ZWN1dGUoKSB7Ci0JCXRyeSB7Ci0JCQliZWdpblJlY29yZGluZyhkZWZpbml0aW9uLmdldEVsZW1lbnQoKSk7Ci0JCQlzdXBlci5leGVjdXRlKCk7Ci0gICAgCi0JCQlTdHJpbmcgdG5zID0gZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLQkJCUxpc3QgZXhpc3RpbmdOYW1lc3BhY2VzID0gbmV3IEFycmF5TGlzdCgpOwotCQkJVHlwZXMgdHlwZXMgPSBkZWZpbml0aW9uLmdldEVUeXBlcygpOwotCQotCQkJaWYgKHR5cGVzICE9IG51bGwpIHsKLQkJCQlJdGVyYXRvciBlZUl0ID0gdHlwZXMuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0JCQkJd2hpbGUgKGVlSXQuaGFzTmV4dCgpKSB7Ci0JCQkJCU9iamVjdCBpdGVtID0gZWVJdC5uZXh0KCk7Ci0JCQkJCWlmIChpdGVtIGluc3RhbmNlb2YgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIHsKLQkJCQkJCVhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50IGVlRWxlbWVudCA9IChYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCkgaXRlbTsKLQkJCQkJCWlmIChlZUVsZW1lbnQuZ2V0U2NoZW1hKCkgIT0gbnVsbCkgewotCQkJCQkJCVN0cmluZyBucyA9IGVlRWxlbWVudC5nZXRTY2hlbWEoKS5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLQkJCQkJCQlleGlzdGluZ05hbWVzcGFjZXMuYWRkKG5zKTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0gCi0JCQl9Ci0JCQl0bnMgPSBOYW1lVXRpbC5nZXRVbmlxdWVOYW1lSGVscGVyKHRucywgZXhpc3RpbmdOYW1lc3BhY2VzKTsKLQkJCQotCQkJQWRkWFNEU2NoZW1hQ29tbWFuZCBjb21tYW5kID0gbmV3IEFkZFhTRFNjaGVtYUNvbW1hbmQoZGVmaW5pdGlvbiwgdG5zKTsKLQkJCWNvbW1hbmQucnVuKCk7Ci0JCQlmb3JtYXRDaGlsZChjb21tYW5kLmdldFdTRExFbGVtZW50KCkuZ2V0RWxlbWVudCgpKTsKLQkJCXNjaGVtYSA9IGNvbW1hbmQuZ2V0V1NETEVsZW1lbnQoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWVuZFJlY29yZGluZyhkZWZpbml0aW9uLmdldEVsZW1lbnQoKSk7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIE9iamVjdCBnZXROZXdseUFkZGVkQ29tcG9uZW50KCkgewotCQlyZXR1cm4gc2NoZW1hOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMUFkZFNlcnZpY2VDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMUFkZFNlcnZpY2VDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxNTZkZTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFBZGRTZXJ2aWNlQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5nZW5lcmF0b3IuU09BUENvbnRlbnRHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZ2VuZXJhdG9yLlBvcnRHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLklBU0RBZGRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZFNlcnZpY2VDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuTmFtZVV0aWw7Ci0KLXB1YmxpYyBjbGFzcyBXMTFBZGRTZXJ2aWNlQ29tbWFuZCBleHRlbmRzIFcxMVRvcExldmVsRWxlbWVudENvbW1hbmQgaW1wbGVtZW50cyBJQVNEQWRkQ29tbWFuZCB7Ci0JcHJpdmF0ZSBTZXJ2aWNlIHNlcnZpY2U7Ci0JCi0JcHVibGljIFcxMUFkZFNlcnZpY2VDb21tYW5kKERlZmluaXRpb24gZGVmaW5pdGlvbikgewotCSAgc3VwZXIoTWVzc2FnZXMuX1VJX0FDVElPTl9BRERfU0VSVklDRSwgZGVmaW5pdGlvbik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIGV4ZWN1dGUoKSB7Ci0JCXRyeSB7Ci0JCQliZWdpblJlY29yZGluZyhkZWZpbml0aW9uLmdldEVsZW1lbnQoKSk7Ci0JCQlzdXBlci5leGVjdXRlKCk7Ci0JCQlTdHJpbmcgbmV3TmFtZSA9IE5hbWVVdGlsLmJ1aWxkVW5pcXVlU2VydmljZU5hbWUoZGVmaW5pdGlvbik7Ci0JCQlBZGRTZXJ2aWNlQ29tbWFuZCBjb21tYW5kID0gbmV3IEFkZFNlcnZpY2VDb21tYW5kKGRlZmluaXRpb24sIG5ld05hbWUsIGZhbHNlKTsKLQkJCWNvbW1hbmQucnVuKCk7Ci0JCQlzZXJ2aWNlID0gKFNlcnZpY2UpIGNvbW1hbmQuZ2V0V1NETEVsZW1lbnQoKTsKLQkJCQotCQkJUG9ydEdlbmVyYXRvciBwb3J0R2VuZXJhdG9yID0gbmV3IFBvcnRHZW5lcmF0b3Ioc2VydmljZSk7Ci0JCQlwb3J0R2VuZXJhdG9yLnNldENvbnRlbnRHZW5lcmF0b3IobmV3IFNPQVBDb250ZW50R2VuZXJhdG9yKCkpOwotCQkJcG9ydEdlbmVyYXRvci5zZXROYW1lKE5hbWVVdGlsLmJ1aWxkVW5pcXVlUG9ydE5hbWUoc2VydmljZSwgIk5ld1BvcnQiKSk7IC8vJE5PTi1OTFMtMSQKLQkJCXBvcnRHZW5lcmF0b3IuZ2VuZXJhdGVQb3J0KCk7Ci0JCQkKLQkJCWZvcm1hdENoaWxkKHNlcnZpY2UuZ2V0RWxlbWVudCgpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWVuZFJlY29yZGluZyhkZWZpbml0aW9uLmdldEVsZW1lbnQoKSk7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIE9iamVjdCBnZXROZXdseUFkZGVkQ29tcG9uZW50KCkgewotCQlyZXR1cm4gc2VydmljZTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMURlbGV0ZUNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExRGVsZXRlQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTkyM2M4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExRGVsZXRlQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlR5cGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFCaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMUVuZFBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMUludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklJbXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklNZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29uY3JldGVDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgVzExRGVsZXRlQ29tbWFuZCBleHRlbmRzIFcxMVRvcExldmVsRWxlbWVudENvbW1hbmQgewotCXByb3RlY3RlZCBXU0RMQmFzZUFkYXB0ZXIgb2JqZWN0OwotCQotCXB1YmxpYyBXMTFEZWxldGVDb21tYW5kKFdTRExCYXNlQWRhcHRlciBvYmplY3QpIHsKLSAgICAgICAgc3VwZXIoTWVzc2FnZXMuX1VJX0FDVElPTl9ERUxFVEUsIG51bGwpOwotCQl0aGlzLm9iamVjdCA9IG9iamVjdDsKLQl9Ci0JCi0JcHVibGljIHZvaWQgZXhlY3V0ZSgpIHsKLQkJRWxlbWVudCBlbGVtZW50ID0gbnVsbDsKLQkJaWYgKG9iamVjdC5nZXRUYXJnZXQoKSBpbnN0YW5jZW9mIFdTRExFbGVtZW50KSB7Ci0JCQllbGVtZW50ID0gKChXU0RMRWxlbWVudCkgb2JqZWN0LmdldFRhcmdldCgpKS5nZXRFbGVtZW50KCk7Ci0JCX0KLQkJZWxzZSBpZiAob2JqZWN0LmdldFRhcmdldCgpIGluc3RhbmNlb2YgWFNEQ29uY3JldGVDb21wb25lbnQpIHsKLQkJCWVsZW1lbnQgPSAoKFhTRENvbmNyZXRlQ29tcG9uZW50KSBvYmplY3QuZ2V0VGFyZ2V0KCkpLmdldEVsZW1lbnQoKTsKLQkJfQotCQkKLQkJdHJ5IHsKLQkJCWJlZ2luUmVjb3JkaW5nKGVsZW1lbnQpOwotCQkJCi0JCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgVzExU2VydmljZSkgewotCQkJCVNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKSBvYmplY3QuZ2V0VGFyZ2V0KCk7Ci0JCQkJc2VydmljZS5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkuZ2V0RVNlcnZpY2VzKCkucmVtb3ZlKHNlcnZpY2UpOwotCQkJfQotCQkJZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgVzExRW5kUG9pbnQpIHsKLQkJCQlTZXJ2aWNlIHNlcnZpY2UgPSAoU2VydmljZSkgKChXMTFTZXJ2aWNlKSAoKFcxMUVuZFBvaW50KSBvYmplY3QpLmdldE93bmVyU2VydmljZSgpKS5nZXRUYXJnZXQoKTsKLQkJCQlQb3J0IHBvcnQgPSAoUG9ydCkgb2JqZWN0LmdldFRhcmdldCgpOwotCQkJCXNlcnZpY2UuZ2V0RVBvcnRzKCkucmVtb3ZlKHBvcnQpOwotCQkJfQotCQkJZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgVzExQmluZGluZykgewotCQkJCUJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBvYmplY3QuZ2V0VGFyZ2V0KCk7Ci0JCQkJYmluZGluZy5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkuZ2V0RUJpbmRpbmdzKCkucmVtb3ZlKGJpbmRpbmcpOwotCQkJfQotCQkJZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgVzExSW50ZXJmYWNlKSB7Ci0JCQkJUG9ydFR5cGUgcG9ydFR5cGUgPSAoUG9ydFR5cGUpIG9iamVjdC5nZXRUYXJnZXQoKTsKLQkJCQlwb3J0VHlwZS5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkuZ2V0RVBvcnRUeXBlcygpLnJlbW92ZShwb3J0VHlwZSk7Ci0JCQl9Ci0JCQllbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBXMTFPcGVyYXRpb24pIHsKLQkJCQlQb3J0VHlwZSBwb3J0VHlwZSA9IChQb3J0VHlwZSkgKChXMTFJbnRlcmZhY2UpICgoVzExT3BlcmF0aW9uKSBvYmplY3QpLmdldE93bmVySW50ZXJmYWNlKCkpLmdldFRhcmdldCgpOwotCQkJCU9wZXJhdGlvbiBvcGVyYXRpb24gPSAoT3BlcmF0aW9uKSBvYmplY3QuZ2V0VGFyZ2V0KCk7Ci0JCQkJcG9ydFR5cGUuZ2V0RU9wZXJhdGlvbnMoKS5yZW1vdmUob3BlcmF0aW9uKTsKLQkJCX0KLQkJCWVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIElQYXJhbWV0ZXIpIHsKLQkJCQlQYXJ0IHBhcnQgPSAoUGFydCkgb2JqZWN0LmdldFRhcmdldCgpOwotCQkJCU1lc3NhZ2UgbWVzc2FnZSA9IChNZXNzYWdlKSBwYXJ0LmVDb250YWluZXIoKTsKLQkJCQltZXNzYWdlLmdldEVQYXJ0cygpLnJlbW92ZShwYXJ0KTsKLQkJCX0KLQkJCWVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIElJbXBvcnQpIHsKLQkJCQlJbXBvcnQgdGhlSW1wb3J0ID0gKEltcG9ydCkgb2JqZWN0LmdldFRhcmdldCgpOwotCQkJCXRoZUltcG9ydC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkuZ2V0RUltcG9ydHMoKS5yZW1vdmUodGhlSW1wb3J0KTsKLQkJCX0KLQkJCWVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFcxMVR5cGUpIHsKLQkJCQlXMTFUeXBlIHcxMVR5cGUgPSAoVzExVHlwZSkgb2JqZWN0OwotCQkJCVhTRFNjaGVtYSBzY2hlbWEgPSAoWFNEU2NoZW1hKSAgdzExVHlwZS5nZXRUYXJnZXQoKTsKLQkJCQlYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCBlZUVsZW1lbnQgPSAoWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIHNjaGVtYS5lQ29udGFpbmVyKCk7Ci0JCQkJVHlwZXMgdHlwZSA9IChUeXBlcykgZWVFbGVtZW50LmdldENvbnRhaW5lcigpOwotCQkJCXR5cGUuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLnJlbW92ZShlZUVsZW1lbnQpOwotCQkJfQotCQkJZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgSU1lc3NhZ2VSZWZlcmVuY2UpIHsKLQkJCQlNZXNzYWdlUmVmZXJlbmNlIG1lc3NhZ2VSZWYgPSAoTWVzc2FnZVJlZmVyZW5jZSkgb2JqZWN0LmdldFRhcmdldCgpOwotCQkJCU9wZXJhdGlvbiBvcGVyYXRpb24gPSAoT3BlcmF0aW9uKW1lc3NhZ2VSZWYuZUNvbnRhaW5lcigpOwotCQkJCWlmIChtZXNzYWdlUmVmIGluc3RhbmNlb2YgSW5wdXQpIHsKLQkJCQkJb3BlcmF0aW9uLnNldEVJbnB1dChudWxsKTsKLQkJCQl9Ci0JCQkJZWxzZSBpZiAobWVzc2FnZVJlZiBpbnN0YW5jZW9mIE91dHB1dCkgewotCQkJCQlvcGVyYXRpb24uc2V0RU91dHB1dChudWxsKTsKLQkJCQl9Ci0JCQkJZWxzZSBpZiAobWVzc2FnZVJlZiBpbnN0YW5jZW9mIEZhdWx0KSB7Ci0JCQkJCW9wZXJhdGlvbi5nZXRFRmF1bHRzKCkucmVtb3ZlKG1lc3NhZ2VSZWYpOwotCQkJCX0KLQkJCX0KLQkJCWVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIElNZXNzYWdlKSB7Ci0JCQkJTWVzc2FnZSBtZXNzYWdlID0gKE1lc3NhZ2UpIG9iamVjdC5nZXRUYXJnZXQoKTsKLQkJCQltZXNzYWdlLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKS5nZXRFTWVzc2FnZXMoKS5yZW1vdmUobWVzc2FnZSk7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQllbmRSZWNvcmRpbmcoZWxlbWVudCk7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMURlbGV0ZVBhcmFtZXRlckNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExRGVsZXRlUGFyYW1ldGVyQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDEyNWM1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExRGVsZXRlUGFyYW1ldGVyQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFNZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMVBhcmFtZXRlckZvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29uY3JldGVDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETW9kZWxHcm91cDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEUGFydGljbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLXB1YmxpYyBjbGFzcyBXMTFEZWxldGVQYXJhbWV0ZXJDb21tYW5kIGV4dGVuZHMgVzExVG9wTGV2ZWxFbGVtZW50Q29tbWFuZCB7Ci0JcHJpdmF0ZSBJUGFyYW1ldGVyIHBhcmFtZXRlcjsKLQkKLQlwdWJsaWMgVzExRGVsZXRlUGFyYW1ldGVyQ29tbWFuZChJUGFyYW1ldGVyIHBhcmFtKSB7Ci0gICAgICAgIHN1cGVyKE1lc3NhZ2VzLl9VSV9BQ1RJT05fREVMRVRFLCBudWxsKTsKLQkJdGhpcy5wYXJhbWV0ZXIgPSBwYXJhbTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgZXhlY3V0ZSgpIHsKLQkJT2JqZWN0IG9iamVjdCA9ICgoV1NETEJhc2VBZGFwdGVyKSBwYXJhbWV0ZXIpLmdldFRhcmdldCgpOwotCQlFbGVtZW50IGVsZW1lbnQgPSBudWxsOwotCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgWFNERWxlbWVudERlY2xhcmF0aW9uKSB7Ci0JCQllbGVtZW50ID0gKChYU0RFbGVtZW50RGVjbGFyYXRpb24pIG9iamVjdCkuZ2V0RWxlbWVudCgpOwotCQl9Ci0JCWVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFdTRExFbGVtZW50KSB7Ci0JCQllbGVtZW50ID0gKChQYXJ0KSBvYmplY3QpLmdldEVsZW1lbnQoKTsKLQkJfQotCQkKLQkJaWYgKGVsZW1lbnQgIT0gbnVsbCkgewotCQkJdHJ5IHsKLQkJCQliZWdpblJlY29yZGluZyhlbGVtZW50KTsKLQkJCQlkZWxldGUoKTsKLQkJCX0KLQkJCWZpbmFsbHkgewotCQkJCWVuZFJlY29yZGluZyhlbGVtZW50KTsKLQkJCX0KLQkJfQotCX0KLQkKLQlwcml2YXRlIHZvaWQgZGVsZXRlKCkgewotCQlPYmplY3Qgb2JqZWN0ID0gKChXU0RMQmFzZUFkYXB0ZXIpIHBhcmFtZXRlcikuZ2V0VGFyZ2V0KCk7Ci0JCQotCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgWFNERWxlbWVudERlY2xhcmF0aW9uKSB7Ci0JCQlYU0RDb25jcmV0ZUNvbXBvbmVudCB4c2RDb21wb25lbnQgPSAoKFhTREVsZW1lbnREZWNsYXJhdGlvbikgb2JqZWN0KS5nZXRDb250YWluZXIoKTsKLQkJCQotCQkJaWYgKHhzZENvbXBvbmVudCBpbnN0YW5jZW9mIFhTRFBhcnRpY2xlKSB7Ci0JCQkJWFNEUGFydGljbGUgcGFydGljbGUgPSAoWFNEUGFydGljbGUpIHhzZENvbXBvbmVudDsKLQkJCQlpZiAocGFydGljbGUuZ2V0Q29udGFpbmVyKCkgaW5zdGFuY2VvZiBYU0RNb2RlbEdyb3VwKSB7Ci0JCQkJCVhTRE1vZGVsR3JvdXAgbW9kZWxHcm91cCA9IChYU0RNb2RlbEdyb3VwKSBwYXJ0aWNsZS5nZXRDb250YWluZXIoKTsKLQkJCQkJaWYgKG1vZGVsR3JvdXAuZ2V0Q29udGVudHMoKS5zaXplKCkgPj0gMikgewotCQkJCQkJbW9kZWxHcm91cC5nZXRDb250ZW50cygpLnJlbW92ZShwYXJ0aWNsZSk7Ci0JCQkJCX0KLQkJCQkJZWxzZSB7Ci0JCQkJCQltb2RlbEdyb3VwLmdldENvbnRlbnRzKCkucmVtb3ZlKHBhcnRpY2xlKTsKLQkJCQkJCS8vIFRPRE86IFdlIG5lZWQgdGhlIGxpbmUgYmVsb3cgdG8gZGVsZXRlIHRoZSBNZXNzYWdlIGFuZCBQYXJ0Ci0vLwkJCQkJCXJlbW92ZU1lc3NhZ2VBbmRQYXJ0KHdQYXJhbWV0ZXIuZ2V0UGFydCgpKTsKLQkJCQkJCS8vIFRPRE86IFJlbW92ZSB0aGUgWFNEIGNvbXBvbmVudHMgYXMgd2VsbC4uLi4uCi0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQllbHNlIGlmICh4c2RDb21wb25lbnQgaW5zdGFuY2VvZiBYU0RTY2hlbWEpewotCQkJCS8vIFRPRE86IFdlIG5lZWQgdGhlIGxpbmUgYmVsb3cgdG8gZGVsZXRlIHRoZSBNZXNzYWdlIGFuZCBQYXJ0Ci0vLwkJCQlyZW1vdmVNZXNzYWdlQW5kUGFydCh3UGFyYW1ldGVyLmdldFBhcnQoKSk7IC8vIERlbGV0ZSB0aGUgcGFydCBhcyB3ZWxsCi0JCQkJWFNEU2NoZW1hIHhzZFNjaGVtYSA9IChYU0RTY2hlbWEpIHhzZENvbXBvbmVudDsKLQkJCQl4c2RTY2hlbWEuZ2V0Q29udGVudHMoKS5yZW1vdmUob2JqZWN0KTsKLQkJCX0KLQkJfQotCQllbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBQYXJ0KSB7Ci0JCQlyZW1vdmVNZXNzYWdlQW5kUGFydCgoUGFydCkgb2JqZWN0KTsKLQkJfQotCQllbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBNZXNzYWdlKSB7Ci0JCQlyZW1vdmVNZXNzYWdlQW5kUGFydCgoUGFydCkgKChNZXNzYWdlKSBvYmplY3QpLmdldEVQYXJ0cygpLmdldCgwKSk7Ci0JCX0KLQkJCi0JCS8vIERvIHdlIHdhbnQgdG8gcmVtb3ZlIHRoZSBJbnB1dC9PdXRwdXQvRmF1bHQgTWVzc2FnZVJlZmVyZW5jZSBhcyB3ZWxsIGlmCi0JCS8vIHRoZXJlIGFyZSBubyBtb3JlICJpbnB1dHMiPy4uLi4KLQl9Ci0JCi0JcHJvdGVjdGVkIHZvaWQgcmVtb3ZlTWVzc2FnZUFuZFBhcnQoUGFydCBwYXJ0KSB7Ci0JCVcxMU1lc3NhZ2VSZWZlcmVuY2UgIHdNZXNzYWdlID0gbnVsbDsKLQkJLyoKLQkJaWYgKHBhcmFtZXRlciBpbnN0YW5jZW9mIFcxMVBhcmFtZXRlckZvckVsZW1lbnQpIHsKLQkJCXdNZXNzYWdlID0gKFcxMU1lc3NhZ2VSZWZlcmVuY2UpICgoVzExUGFyYW1ldGVyRm9yRWxlbWVudCkgcGFyYW1ldGVyKS5nZXRPd25lcigpOwkKLQkJfQotCQllbHNlICovaWYgKHBhcmFtZXRlciBpbnN0YW5jZW9mIFcxMVBhcmFtZXRlckZvclBhcnQpIHsKLQkJCXdNZXNzYWdlID0gKFcxMU1lc3NhZ2VSZWZlcmVuY2UpICgoVzExUGFyYW1ldGVyRm9yUGFydCkgcGFyYW1ldGVyKS5nZXRPd25lcigpOwotCQl9Ci0JCQotCQlNZXNzYWdlIG1lc3NhZ2UgPSB3TWVzc2FnZS5nZXRNZXNzYWdlUmVmZXJlbmNlKCkuZ2V0RU1lc3NhZ2UoKTsgCi0JCW1lc3NhZ2UuZ2V0RVBhcnRzKCkucmVtb3ZlKHBhcnQpOwotCQkKLQkJKChEZWZpbml0aW9uKSBwYXJ0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSkuZ2V0RU1lc3NhZ2VzKCkucmVtb3ZlKG1lc3NhZ2UpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExRWRpdE5hbWVzcGFjZXNDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMUVkaXROYW1lc3BhY2VzQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzNhMWU2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExRWRpdE5hbWVzcGFjZXNDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kczsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLnV0aWwuRE9NTmFtZXNwYWNlSW5mb01hbmFnZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIFcxMUVkaXROYW1lc3BhY2VzQ29tbWFuZCBleHRlbmRzIFcxMVRvcExldmVsRWxlbWVudENvbW1hbmQgewotCXByaXZhdGUgTGlzdCBuYW1lc3BhY2VzSW5mb0xpc3Q7Ci0JcHJpdmF0ZSBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlOwotCXByaXZhdGUgU3RyaW5nIHRhcmdldE5hbWVzcGFjZVByZWZpeDsKLQkKLQlwdWJsaWMgVzExRWRpdE5hbWVzcGFjZXNDb21tYW5kKERlZmluaXRpb24gZGVmaW5pdGlvbikgewotCSAgc3VwZXIoTWVzc2FnZXMuX1VJX0VESVRfTkFNRVNQQUNFUywgZGVmaW5pdGlvbik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldE5hbWVzcGFjZXNJbmZvKExpc3QgbmFtZXNwYWNlcykgewotCQluYW1lc3BhY2VzSW5mb0xpc3QgPSBuYW1lc3BhY2VzOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRUYXJnZXROYW1lc3BhY2UoU3RyaW5nIHRucykgewotCQl0YXJnZXROYW1lc3BhY2UgPSB0bnM7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldFRhcmdldE5hbWVzcGFjZVByZWZpeChTdHJpbmcgcHJlZml4KSB7Ci0JCXRhcmdldE5hbWVzcGFjZVByZWZpeCA9IHByZWZpeDsKLQl9Ci0JCi0JcHVibGljIHZvaWQgZXhlY3V0ZSgpIHsKLQkJdHJ5IHsKLQkJCWJlZ2luUmVjb3JkaW5nKGRlZmluaXRpb24uZ2V0RWxlbWVudCgpKTsKLQkJCXN1cGVyLmV4ZWN1dGUoKTsKLQkJCWlmICh0YXJnZXROYW1lc3BhY2VQcmVmaXggIT0gbnVsbCkgewotCQkJCUVsZW1lbnQgZWxlbWVudCA9IGRlZmluaXRpb24uZ2V0RWxlbWVudCgpOwotCi0JCQkJLy8gUmVtb3ZlIHRoZSBvbGQgcHJlZml4Ci0JCQkJU3RyaW5nIG9sZFByZWZpeCA9IGRlZmluaXRpb24uZ2V0UHJlZml4KGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCkpOwotCQkJCWVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCJ4bWxuczoiK29sZFByZWZpeCk7ICAvLyROT04tTkxTLTEkCi0KLQkJCQkvLyBTZXQgdGhlIG5ldyBwcmVmaXgKLQkJCQllbGVtZW50LnNldEF0dHJpYnV0ZSgieG1sbnM6IiArIHRhcmdldE5hbWVzcGFjZVByZWZpeCwgZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKSk7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQkJCWlmICh0YXJnZXROYW1lc3BhY2UgIT0gbnVsbCkgewotCQkJCVN0cmluZyBuZXdWYWx1ZSA9IHRhcmdldE5hbWVzcGFjZTsKLQkJCQlTdHJpbmcgcHJlZml4ID0gZGVmaW5pdGlvbi5nZXRQcmVmaXgoZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKSk7Ci0JCQkJZGVmaW5pdGlvbi5zZXRUYXJnZXROYW1lc3BhY2UobmV3VmFsdWUpOwotCQkJCWRlZmluaXRpb24uZ2V0RWxlbWVudCgpLnNldEF0dHJpYnV0ZSgieG1sbnM6IiArIHByZWZpeCwgbmV3VmFsdWUpOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0KLQkJCWlmIChuYW1lc3BhY2VzSW5mb0xpc3QgIT0gbnVsbCkgewotCQkJCURPTU5hbWVzcGFjZUluZm9NYW5hZ2VyIG5hbWVzcGFjZUluZm9NYW5hZ2VyID0gbmV3IERPTU5hbWVzcGFjZUluZm9NYW5hZ2VyKCk7Ci0KLQkJCQkvKgotCQkgICAgICBMaXN0IG5hbWVzcGFjZUluZm9MaXN0ID0gbmFtZXNwYWNlSW5mb01hbmFnZXIuZ2V0TmFtZXNwYWNlSW5mb0xpc3QoZWxlbWVudCk7Ci0vLwkJICAgICAgTGlzdCBvbGROYW1lc3BhY2VJbmZvTGlzdCA9IE5hbWVzcGFjZUluZm8uY2xvbmVOYW1lc3BhY2VJbmZvTGlzdChuYW1lc3BhY2VJbmZvTGlzdCk7Ci0KLQkJICAgICAgLy8gaGVyZSB3ZSBzdG9yZSBhIGNvcHkgb2YgdGhlIG9sZCBpbmZvIGZvciBlYWNoIE5hbWVzcGFjZUluZm8KLQkJICAgICAgLy8gdGhpcyBpbmZvIHdpbGwgYmUgdXNlZCBpbiBjcmVhdGVQcmVmaXhNYXBwaW5nKCkgdG8gZmlndXJlIG91dCBob3cgdG8gdXBkYXRlIHRoZSBkb2N1bWVudCAKLQkJICAgICAgLy8gaW4gcmVzcG9uc2UgdG8gdGhlc2UgY2hhbmdlcwotCQkgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBuYW1lc3BhY2VJbmZvTGlzdC5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0JCSAgICAgIHsKLQkJICAgICAgICBOYW1lc3BhY2VJbmZvIGluZm8gPSAoTmFtZXNwYWNlSW5mbykgaS5uZXh0KCk7Ci0JCSAgICAgICAgTmFtZXNwYWNlSW5mbyBvbGRDb3B5ID0gbmV3IE5hbWVzcGFjZUluZm8oaW5mbyk7Ci0JCSAgICAgICAgaW5mby5zZXRQcm9wZXJ0eSgib2xkQ29weSIsIG9sZENvcHkpOyAvLyROT04tTkxTLTEkCi0JCSAgICAgIH0KLQkJCQkgKi8KLQotCQkJCW5hbWVzcGFjZUluZm9NYW5hZ2VyLnJlbW92ZU5hbWVzcGFjZUluZm8oZGVmaW5pdGlvbi5nZXRFbGVtZW50KCkpOwotCQkJCW5hbWVzcGFjZUluZm9NYW5hZ2VyLmFkZE5hbWVzcGFjZUluZm8oZGVmaW5pdGlvbi5nZXRFbGVtZW50KCksIG5hbWVzcGFjZXNJbmZvTGlzdCwgZmFsc2UpOwotCi0JCQkJLyoKLQkgICAgICAgIC8vIHNlZSBpZiB3ZSBuZWVkIHRvIHJlbmFtZSBhbnkgcHJlZml4ZXMKLQkgICAgICAgIE1hcCBwcmVmaXhNYXBwaW5nID0gY3JlYXRlUHJlZml4TWFwcGluZyhvbGROYW1lc3BhY2VJbmZvTGlzdCwgbmFtZXNwYWNlSW5mb0xpc3QpOwotCSAgICAgICAgaWYgKHByZWZpeE1hcHBpbmcuc2l6ZSgpID4gMCkKLQkgICAgICAgIHsKLQkgICAgICAgICAgLy9tYW5hZ2VyLmdldE1vZGVsKCkuYWJvdXRUb0NoYW5nZU1vZGVsKCk7Ci0JICAgICAgICAgIFJlcGxhY2VQcmVmaXhBY3Rpb24gcmVwbGFjZVByZWZpeEFjdGlvbiA9IG5ldyBSZXBsYWNlUHJlZml4QWN0aW9uKGVsZW1lbnQsIHByZWZpeE1hcHBpbmcpOwotCSAgICAgICAgICByZXBsYWNlUHJlZml4QWN0aW9uLnJ1bigpOwotCSAgICAgICAgICAvL21hbmFnZXIuZ2V0TW9kZWwoKS5jaGFuZ2VkTW9kZWwoKTsKLQkgICAgICAgIH0KLQkJCQkgKi8gICAKLQkJCX0KLQotCQkJLyoKLQkJIC8vIENvdWxkIG5vdCBtb2RpZnkgKG1vcmUgc3BlY2lmaWNhbGx5IHJlbW92ZSkgbmFtZXNwYWNlcyB2aWEgbW9kZWwuLi4uLgotCQkgLy8gc2hvdWxkIHJldmlzaXQgdGhpcwotCQlpZiAodGFyZ2V0TmFtZXNwYWNlICE9IG51bGwgfHwgdGFyZ2V0TmFtZXNwYWNlUHJlZml4ICE9IG51bGwpIHsKLQkJCU1hcCBtYXAgPSBkZWZpbml0aW9uLmdldE5hbWVzcGFjZXMoKTsKLQkJCVN0cmluZyBvbGRUYXJnZXROYW1lc3BhY2UgPSBkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpOwotCQkJU3RyaW5nIG9sZFByZWZpeCA9IG51bGw7Ci0KLQkJCUl0ZXJhdG9yIGl0ID0gbWFwLmtleVNldCgpLml0ZXJhdG9yKCk7Ci0JCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0JCQkJU3RyaW5nIGtleSA9IChTdHJpbmcpIGl0Lm5leHQoKTsKLQkJCQlPYmplY3QgdmFsdWUgPSBtYXAuZ2V0KGtleSk7Ci0JCQkJaWYgKHZhbHVlICE9IG51bGwgJiYgb2xkVGFyZ2V0TmFtZXNwYWNlICE9IG51bGwgJiYgdmFsdWUuZXF1YWxzKG9sZFRhcmdldE5hbWVzcGFjZSkpIHsKLQkJCQkJb2xkUHJlZml4ID0ga2V5OwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0KLQkJCWlmIChvbGRQcmVmaXggIT0gbnVsbCAmJiAhb2xkUHJlZml4LmVxdWFscyh0YXJnZXROYW1lc3BhY2VQcmVmaXgpKSB7Ci0JCQkJbWFwLnJlbW92ZShvbGRQcmVmaXgpOwotCQkJCWRlZmluaXRpb24udXBkYXRlRWxlbWVudCgpOwotCQkJfQotCi0JCQlTdHJpbmcgdG5zID0gIiI7Ci0JCQlTdHJpbmcgcHJlZml4ID0gIiI7Ci0JCQlpZiAodGFyZ2V0TmFtZXNwYWNlICE9IG51bGwpIHsKLQkJCQl0bnMgPSB0YXJnZXROYW1lc3BhY2U7Ci0JCQl9Ci0JCQlpZiAodGFyZ2V0TmFtZXNwYWNlUHJlZml4ICE9IG51bGwpIHsKLQkJCQlwcmVmaXggPSB0YXJnZXROYW1lc3BhY2VQcmVmaXg7Ci0JCQl9Ci0JCQlkZWZpbml0aW9uLmFkZE5hbWVzcGFjZShwcmVmaXgsIHRucyk7Ci0JCQlkZWZpbml0aW9uLnNldFRhcmdldE5hbWVzcGFjZSh0bnMpOwotLy8JCQltYXAucHV0KHByZWZpeCwgdG5zKTsKLQkJfQotCQkJICovCi0JCX0KLQkJZmluYWxseSB7Ci0JCQllbmRSZWNvcmRpbmcoZGVmaW5pdGlvbi5nZXRFbGVtZW50KCkpOwotCQl9Ci0JfQotCQotCS8qCi0JcHJvdGVjdGVkIE1hcCBjcmVhdGVQcmVmaXhNYXBwaW5nKExpc3Qgb2xkTGlzdCwgTGlzdCBuZXdMaXN0KQotCXsKLQkJTWFwIG1hcCA9IG5ldyBIYXNodGFibGUoKTsKLQotCQlIYXNodGFibGUgb2xkVVJJVG9QcmVmaXhUYWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLQkJZm9yIChJdGVyYXRvciBpID0gb2xkTGlzdC5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0JCXsKLQkJCU5hbWVzcGFjZUluZm8gb2xkSW5mbyA9IChOYW1lc3BhY2VJbmZvKSBpLm5leHQoKTsKLQkJCW9sZFVSSVRvUHJlZml4VGFibGUucHV0KG9sZEluZm8udXJpLCBvbGRJbmZvKTsKLQkJfQotCi0JCWZvciAoSXRlcmF0b3IgaSA9IG5ld0xpc3QuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotCQl7Ci0JCQlOYW1lc3BhY2VJbmZvIG5ld0luZm8gPSAoTmFtZXNwYWNlSW5mbykgaS5uZXh0KCk7Ci0JCQlOYW1lc3BhY2VJbmZvIG9sZEluZm8gPSAoTmFtZXNwYWNlSW5mbykgb2xkVVJJVG9QcmVmaXhUYWJsZS5nZXQobmV3SW5mby51cmkgIT0gbnVsbCA/IG5ld0luZm8udXJpIDogIiIpOyAvLyROT04tTkxTLTEkCi0KLQkJCS8vIGlmIG9sZEluZm8gaXMgbm9uIG51bGwgLi4uIHRoZXJlJ3MgYSBtYXRjaGluZyBVUkkgaW4gdGhlIG9sZCBzZXQKLQkJCS8vIHdlIGNhbiB1c2UgaXRzIHByZWZpeCB0byBkZXRlbWluZSBvdXQgbWFwcGluZwotCQkJLy8KLQkJCS8vIGlmIG9sZEluZm8gaXMgbnVsbCAuLi4gIHdlIHVzZSB0aGUgJ29sZENvcHknIHdlIHN0YXNoZWQgYXdheSAKLQkJCS8vIGFzc3VtaW5nIHRoYXQgdGhlIHVzZXIgY2hhbmdlZCB0aGUgVVJJIGFuZCB0aGUgcHJlZml4Ci0JCQlpZiAob2xkSW5mbyA9PSBudWxsKQotCQkJewotCQkJCW9sZEluZm8gPSAoTmFtZXNwYWNlSW5mbykgbmV3SW5mby5nZXRQcm9wZXJ0eSgib2xkQ29weSIpOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0KLQkJCWlmIChvbGRJbmZvICE9IG51bGwpCi0JCQl7Ci0JCQkJU3RyaW5nIG5ld1ByZWZpeCA9IG5ld0luZm8ucHJlZml4ICE9IG51bGwgPyBuZXdJbmZvLnByZWZpeCA6ICIiOyAvLyROT04tTkxTLTEkCi0JCQkJU3RyaW5nIG9sZFByZWZpeCA9IG9sZEluZm8ucHJlZml4ICE9IG51bGwgPyBvbGRJbmZvLnByZWZpeCA6ICIiOyAvLyROT04tTkxTLTEkCi0JCQkJaWYgKCFvbGRQcmVmaXguZXF1YWxzKG5ld1ByZWZpeCkpCi0JCQkJewotCQkJCQltYXAucHV0KG9sZFByZWZpeCwgbmV3UHJlZml4KTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIG1hcDsKLQl9Ci0JKi8KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExR2VuZXJhdGVCaW5kaW5nQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFHZW5lcmF0ZUJpbmRpbmdDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3MjExZmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFHZW5lcmF0ZUJpbmRpbmdDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmREaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLkNvbXBvbmVudFJlZmVyZW5jZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwud2l6YXJkcy5CaW5kaW5nV2l6YXJkOwotCi1wdWJsaWMgY2xhc3MgVzExR2VuZXJhdGVCaW5kaW5nQ29tbWFuZCBleHRlbmRzIFcxMVRvcExldmVsRWxlbWVudENvbW1hbmQgewotCXByb3RlY3RlZCBCaW5kaW5nIGJpbmRpbmc7Ci0JCi0JcHVibGljIFcxMUdlbmVyYXRlQmluZGluZ0NvbW1hbmQoQmluZGluZyBiaW5kaW5nKSB7Ci0gICAgICAgIHN1cGVyKE1lc3NhZ2VzLl9VSV9HRU5FUkFURV9CSU5ESU5HX0NPTlRFTlQsIGJpbmRpbmcuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLQkJdGhpcy5iaW5kaW5nID0gYmluZGluZzsKLQl9Ci0JCi0JcHVibGljIHZvaWQgZXhlY3V0ZSgpIHsKLQkJdHJ5IHsKLQkJCWJlZ2luUmVjb3JkaW5nKGRlZmluaXRpb24uZ2V0RWxlbWVudCgpKTsKLQotCQkJQmluZGluZ1dpemFyZCB3aXphcmQgPSBuZXcgQmluZGluZ1dpemFyZChiaW5kaW5nLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSwgYmluZGluZywgQmluZGluZ1dpemFyZC5LSU5EX1JFR0VORVJBVEVfQklORElORyk7Ci0JCQl3aXphcmQuc2V0QmluZGluZ05hbWUoQ29tcG9uZW50UmVmZXJlbmNlVXRpbC5nZXROYW1lKGJpbmRpbmcpKTsKLQkJCXdpemFyZC5zZXRQb3J0VHlwZU5hbWUoQ29tcG9uZW50UmVmZXJlbmNlVXRpbC5nZXRQb3J0VHlwZVJlZmVyZW5jZShiaW5kaW5nKSk7Ci0JCQlXaXphcmREaWFsb2cgd2l6YXJkRGlhbG9nID0gbmV3IFdpemFyZERpYWxvZyhEaXNwbGF5LmdldEN1cnJlbnQoKS5nZXRBY3RpdmVTaGVsbCgpLCB3aXphcmQpOwotCQkJd2l6YXJkRGlhbG9nLmNyZWF0ZSgpOwotCQkJaWYgKHdpemFyZERpYWxvZy5vcGVuKCkgPT0gV2luZG93Lk9LKSB7Ci0JCQkJZm9ybWF0Q2hpbGQoYmluZGluZy5nZXRFbGVtZW50KCkpOwotCQkJfQotCQl9Ci0JCWZpbmFsbHkgewotCQkJZW5kUmVjb3JkaW5nKGRlZmluaXRpb24uZ2V0RWxlbWVudCgpKTsKLQkJfQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMVJlbmFtZUNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExUmVuYW1lQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjU5Y2E2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExUmVuYW1lQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kczsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wYXJ0aWNpcGFudHMuUmVuYW1lUmVmYWN0b3Jpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk91dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkRlZmluaXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFjdGlvbnMuU21hcnRSZW5hbWVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuV1NETEJhc2VBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMUJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExQmluZGluZ01lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFFbmRQb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFNZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMU9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFQYXJhbWV0ZXJGb3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMVNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5Db21wb25lbnRSZWZlcmVuY2VVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETEVkaXRvclV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudmlzaXRvci5CaW5kaW5nUmVuYW1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC52aXNpdG9yLk1lc3NhZ2VSZW5hbWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnZpc2l0b3IuUG9ydFR5cGVSZW5hbWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLnJlZmFjdG9yLlBlcmZvcm1VbnNhdmVkUmVmYWN0b3JpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5yZWZhY3Rvci5SZWZhY3RvcmluZ0NvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLnJlZmFjdG9yLlhNTFJlZmFjdG9yaW5nQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwucmVmYWN0b3IucmVuYW1lLlJlbmFtZUNvbXBvbmVudFByb2Nlc3NvcjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgVzExUmVuYW1lQ29tbWFuZCBleHRlbmRzIFcxMVRvcExldmVsRWxlbWVudENvbW1hbmQgewotCXByb3RlY3RlZCBXU0RMQmFzZUFkYXB0ZXIgb2JqZWN0OwotCXByb3RlY3RlZCBTdHJpbmcgbmV3TmFtZSA9ICIiOyAvLyROT04tTkxTLTEkCi0KLQlwdWJsaWMgVzExUmVuYW1lQ29tbWFuZChXU0RMQmFzZUFkYXB0ZXIgb2JqZWN0LCBTdHJpbmcgbmV3TmFtZSkgewotCQlzdXBlcihNZXNzYWdlcy5fVUlfQUNUSU9OX1JFTkFNRSwgKG9iamVjdC5nZXRUYXJnZXQoKSBpbnN0YW5jZW9mIFdTRExFbGVtZW50KSA/ICgoV1NETEVsZW1lbnQpIG9iamVjdC5nZXRUYXJnZXQoKSkuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpIDogIG51bGwpOwotCQl0aGlzLm9iamVjdCA9IG9iamVjdDsKLQkJdGhpcy5uZXdOYW1lID0gbmV3TmFtZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBleGVjdXRlKCkgewotCQl0cnkgewotCQkJYmVnaW5SZWNvcmRpbmcoZGVmaW5pdGlvbi5nZXRFbGVtZW50KCkpOwotCQkJU3RyaW5nIG9yaWdOYW1lID0gbnVsbDsKLQkJCQotCQkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIFcxMURlc2NyaXB0aW9uKSB7Ci0JCQkJRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gKERlZmluaXRpb24pIG9iamVjdC5nZXRUYXJnZXQoKTsKLQkJCQlXMTFUb3BMZXZlbEVsZW1lbnRDb21tYW5kLmVuc3VyZURlZmluaXRpb24oZGVmaW5pdGlvbik7Ci0JCQkJU3RyaW5nIG5zID0gZGVmaW5pdGlvbi5nZXRRTmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpOwotCQkJCWRlZmluaXRpb24uc2V0UU5hbWUobmV3IFFOYW1lKG5zLCBuZXdOYW1lKSk7Ci0JCQl9Ci0JCQllbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBXMTFTZXJ2aWNlKSB7Ci0JCQkJU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2UpIG9iamVjdC5nZXRUYXJnZXQoKTsKLQkJCQlTdHJpbmcgbnMgPSBzZXJ2aWNlLmdldFFOYW1lKCkuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0JCQkJc2VydmljZS5zZXRRTmFtZShuZXcgUU5hbWUobnMsIG5ld05hbWUpKTsKLQkJCX0KLQkJCWVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFcxMUVuZFBvaW50KSB7Ci0JCQkJUG9ydCBwb3J0ID0gKFBvcnQpIG9iamVjdC5nZXRUYXJnZXQoKTsKLQkJCQlwb3J0LnNldE5hbWUobmV3TmFtZSk7Ci0JCQl9Ci0JCQllbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBXMTFCaW5kaW5nKSB7Ci0JCQkJQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpIG9iamVjdC5nZXRUYXJnZXQoKTsKLQkJCQlvcmlnTmFtZSA9IGJpbmRpbmcuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLQkJCX0KLQkJCWVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFcxMUludGVyZmFjZSkgewotCQkJCVBvcnRUeXBlIHBvcnRUeXBlID0gKFBvcnRUeXBlKSBvYmplY3QuZ2V0VGFyZ2V0KCk7Ci0JCQkJb3JpZ05hbWUgPSBwb3J0VHlwZS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotCQkJfQotCQkJZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgVzExT3BlcmF0aW9uKSB7Ci0JCQkJT3BlcmF0aW9uIG9wZXJhdGlvbiA9IChPcGVyYXRpb24pIG9iamVjdC5nZXRUYXJnZXQoKTsKLQkJCQlTbWFydFJlbmFtZUFjdGlvbiBhY3Rpb24gPSBuZXcgU21hcnRSZW5hbWVBY3Rpb24ob3BlcmF0aW9uLCBuZXdOYW1lKTsKLQkJCQlyZW5hbWVPcGVyYXRpb25IZWxwZXIob3BlcmF0aW9uKTsKLQkJCQlhY3Rpb24ucnVuKCk7Ci0JCQl9Ci0JCQllbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBXMTFNZXNzYWdlUmVmZXJlbmNlKSB7Ci0JCQkJV1NETEVsZW1lbnQgZWxlbWVudCA9IChXU0RMRWxlbWVudCkgKChXMTFNZXNzYWdlUmVmZXJlbmNlKSBvYmplY3QpLmdldFRhcmdldCgpOwotCQkJCXJlbmFtZUlPRkhlbHBlcihlbGVtZW50KTsKLQkJCX0KLQkJCWVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFcxMU1lc3NhZ2UpIHsKLQkJCQlNZXNzYWdlIG1lc3NhZ2UgPSAoTWVzc2FnZSkgKChXMTFNZXNzYWdlKSBvYmplY3QpLmdldFRhcmdldCgpOwotLy8JCQkJSXRlcmF0b3IgcGFydHMgPSBtZXNzYWdlLmdldEVQYXJ0cygpLml0ZXJhdG9yKCk7Ci0JCQkJb3JpZ05hbWUgPSBtZXNzYWdlLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0JCQkJCi0JCQkJU21hcnRSZW5hbWVBY3Rpb24gYWN0aW9uID0gbmV3IFNtYXJ0UmVuYW1lQWN0aW9uKG1lc3NhZ2UsIG5ld05hbWUpOwotCQkJCWFjdGlvbi5ydW4oZmFsc2UpOwotLy8JCQkJd2hpbGUgKHBhcnRzLmhhc05leHQoKSkgewotLy8JCQkJCVNtYXJ0UmVuYW1lQWN0aW9uIGFjdGlvbiA9IG5ldyBTbWFydFJlbmFtZUFjdGlvbihwYXJ0cy5uZXh0KCksIG5ld05hbWUpOwotLy8JCQkJCWFjdGlvbi5ydW4oKTsKLS8vCQkJCX0KLQkJCX0KLQkJCWVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFcxMVBhcmFtZXRlckZvclBhcnQpIHsKLQkJCQlQYXJ0IHBhcnQgPSAoUGFydCkgKChXMTFQYXJhbWV0ZXJGb3JQYXJ0KSBvYmplY3QpLmdldFRhcmdldCgpOwotCQkJCVNtYXJ0UmVuYW1lQWN0aW9uIGFjdGlvbiA9IG5ldyBTbWFydFJlbmFtZUFjdGlvbihwYXJ0LCBuZXdOYW1lKTsKLQkJCQlhY3Rpb24ucnVuKCk7Ci0JCQl9Ci0JCQllbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBXMTFCaW5kaW5nT3BlcmF0aW9uKSB7Ci0JCQkJQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gKEJpbmRpbmdPcGVyYXRpb24pICgoVzExQmluZGluZ09wZXJhdGlvbikgb2JqZWN0KS5nZXRUYXJnZXQoKTsKLQkJCQliaW5kaW5nT3BlcmF0aW9uLnNldE5hbWUobmV3TmFtZSk7Ci0JCQkJYmluZGluZ09wZXJhdGlvbi5nZXRFT3BlcmF0aW9uKCkuc2V0TmFtZShuZXdOYW1lKTsKLQkJCQkvLyBUT0RPOiBXZSBzaG91bGQgZ28gb2ZmIGFuZCByZW5hbWUgdGhlIGFzc29jaWF0ZWQgUG9ydFR5cGUgT3BlcmF0aW9uCi0JCQl9Ci0JCQllbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBXMTFCaW5kaW5nTWVzc2FnZVJlZmVyZW5jZSkgewotCQkJCU9iamVjdCBiaW5kaW5nTWVzc2FnZVJlZiA9ICgoVzExQmluZGluZ01lc3NhZ2VSZWZlcmVuY2UpIG9iamVjdCkuZ2V0VGFyZ2V0KCk7Ci0JCQkJaWYgKGJpbmRpbmdNZXNzYWdlUmVmIGluc3RhbmNlb2YgQmluZGluZ0lucHV0KSB7Ci0JCQkJCSgoQmluZGluZ0lucHV0KSBiaW5kaW5nTWVzc2FnZVJlZikuc2V0TmFtZShuZXdOYW1lKTsKLQkJCQkJKChCaW5kaW5nSW5wdXQpIGJpbmRpbmdNZXNzYWdlUmVmKS5nZXRFSW5wdXQoKS5zZXROYW1lKG5ld05hbWUpOwotCQkJCQkvLyBUT0RPOiBXZSBzaG91bGQgZ28gb2ZmIGFuZCByZW5hbWUgdGhlIGFzc29jaWF0ZWQgUG9ydHR5cGUgTWVzc2FnZVJlZmVyZW5jZQotCQkJCX0KLQkJCQllbHNlIGlmIChiaW5kaW5nTWVzc2FnZVJlZiBpbnN0YW5jZW9mIEJpbmRpbmdPdXRwdXQpIHsKLQkJCQkJKChCaW5kaW5nT3V0cHV0KSBiaW5kaW5nTWVzc2FnZVJlZikuc2V0TmFtZShuZXdOYW1lKTsKLQkJCQkJKChCaW5kaW5nT3V0cHV0KSBiaW5kaW5nTWVzc2FnZVJlZikuZ2V0RU91dHB1dCgpLnNldE5hbWUobmV3TmFtZSk7Ci0JCQkJCS8vIFRPRE86IFdlIHNob3VsZCBnbyBvZmYgYW5kIHJlbmFtZSB0aGUgYXNzb2NpYXRlZCBQb3J0dHlwZSBPdXRwdXQJCQkJCi0JCQkJfQotCQkJCWVsc2UgaWYgKGJpbmRpbmdNZXNzYWdlUmVmIGluc3RhbmNlb2YgQmluZGluZ0ZhdWx0KSB7Ci0JCQkJCSgoQmluZGluZ0ZhdWx0KSBiaW5kaW5nTWVzc2FnZVJlZikuc2V0TmFtZShuZXdOYW1lKTsKLQkJCQkJKChCaW5kaW5nRmF1bHQpIGJpbmRpbmdNZXNzYWdlUmVmKS5nZXRFRmF1bHQoKS5zZXROYW1lKG5ld05hbWUpOwotCQkJCQkvLyBUT0RPOiBXZSBzaG91bGQgZ28gb2ZmIGFuZCByZW5hbWUgdGhlIGFzc29jaWF0ZWQgUG9ydHR5cGUgRmF1bHQKLQkJCQl9Ci0JCQl9Ci0JCi0JCQlPYmplY3QgdGFyZ2V0ID0gb2JqZWN0LmdldFRhcmdldCgpOwotCQkJaWYgKHRhcmdldCBpbnN0YW5jZW9mIFdTRExFbGVtZW50ICYmIG9yaWdOYW1lICE9IG51bGwpIHsKLQkJCQlXU0RMRWxlbWVudCBjb21wb25lbnQgPSAoV1NETEVsZW1lbnQpIHRhcmdldDsKLQkJCQlTdHJpbmcgbmFtZXNwYWNlID0gY29tcG9uZW50LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKS5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLQkKLQkJCQlSZWZhY3RvcmluZ0NvbXBvbmVudCByZWZhY3RvcmluZ0NvbXBvbmVudCA9IG5ldyBYTUxSZWZhY3RvcmluZ0NvbXBvbmVudCgKLQkJCQkJCWNvbXBvbmVudCwKLQkJCQkJCShJRE9NRWxlbWVudCljb21wb25lbnQuZ2V0RWxlbWVudCgpLCAKLQkJCQkJCW9yaWdOYW1lLAotCQkJCQkJbmFtZXNwYWNlKTsKLQkKLQkJCQlSZW5hbWVDb21wb25lbnRQcm9jZXNzb3IgcHJvY2Vzc29yID0gbmV3IFJlbmFtZUNvbXBvbmVudFByb2Nlc3NvcihyZWZhY3RvcmluZ0NvbXBvbmVudCwgbmV3TmFtZSwgdHJ1ZSk7ICAgIAotCQkJCVJlbmFtZVJlZmFjdG9yaW5nIHJlZmFjdG9yaW5nID0gbmV3IFJlbmFtZVJlZmFjdG9yaW5nKHByb2Nlc3Nvcik7Ci0JCQkJUGVyZm9ybVVuc2F2ZWRSZWZhY3RvcmluZ09wZXJhdGlvbiByZWZhY3Rvck9wZXJhdGlvbiA9IG5ldyBQZXJmb3JtVW5zYXZlZFJlZmFjdG9yaW5nT3BlcmF0aW9uKHJlZmFjdG9yaW5nKTsKLQkJCQlyZWZhY3Rvck9wZXJhdGlvbi5ydW4obnVsbCk7IAotCQkJCQotCSAgICAgICAgICAgIC8vIHJtYWggOiBkdWUgdG8gdGhlIG9yZGVyaW5nIGluIHdoaWNoIHJlZmFjdG9yaW5nIGlzIGNhbGxlZAotCSAgICAgICAgICAgIC8vIChpLmUuIHRoZSByZWZlcmVuY2UgY2hhbmdlcyBiZWZvcmUgdGhlIGRlY2xhcmF0aW9uIGNoYW5nZXMpIAotCSAgICAgICAgICAgIC8vIG91ciBtb2RlbCByZWZlcmVuY2VzIG1heSBiZSBtZXNzZWQgdXAgYXQgdGhpcyBwb2ludC4KLQkgICAgICAgICAgICAvLyBUaGUgbGluZSBvZiBjb2RlIGJlbG93IGdldHMgdGhlIG1vZGVsIHRvIGZpeCB1cCBpdHMgcmVmZXJlbmNlcy4gIAotCQkJCSgoRGVmaW5pdGlvbkltcGwpIGNvbXBvbmVudC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpLnJlY29uY2lsZVJlZmVyZW5jZXModHJ1ZSk7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQllbmRSZWNvcmRpbmcoZGVmaW5pdGlvbi5nZXRFbGVtZW50KCkpOwotCQl9Ci0JfQotCi0JLy8gVE9ETzogV2Ugc2hvdWxkIGxvb2sgYXQgdXNpbmcgdGhlIHJlZmFjdG9yIG1lY2hhbmlzbSB0byBkbyB0aGlzIHJlbmFtaW5nLi4uLgotCXByaXZhdGUgdm9pZCByZW5hbWVPcGVyYXRpb25IZWxwZXIoT3BlcmF0aW9uIG9wZXJhdGlvbikgewotCQlEZWZpbml0aW9uIGRlZmluaXRpb24gPSBvcGVyYXRpb24uZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOyAKLQkJQ29tcG9uZW50UmVmZXJlbmNlVXRpbCB1dGlsID0gbmV3IENvbXBvbmVudFJlZmVyZW5jZVV0aWwoZGVmaW5pdGlvbik7Ci0JCUl0ZXJhdG9yIGl0ID0gdXRpbC5nZXRCaW5kaW5nT3BlcmF0aW9ucyhvcGVyYXRpb24pLml0ZXJhdG9yKCk7Ci0KLQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gKEJpbmRpbmdPcGVyYXRpb24pIGl0Lm5leHQoKTsKLQkJCUVsZW1lbnQgZWxlbWVudCA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0RWxlbWVudEZvck9iamVjdChiaW5kaW5nT3BlcmF0aW9uKTsKLQkJCWlmIChlbGVtZW50ICE9IG51bGwpCi0JCQl7IAotCQkJCWVsZW1lbnQuc2V0QXR0cmlidXRlKCJuYW1lIiwgbmV3TmFtZSk7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQkJCS8vCQkgICAgVE9ETzogV2Ugc2hvdWxkIGdvIHRocm91Z2ggdGhlIG1vZGVsIHRvIHJlbmFtZS4uLi4gTm90IHRoZSBFbGVtZW50Li4uCi0JCQkvLwkJCWJpbmRpbmdPcGVyYXRpb24uc2V0TmFtZShuZXdOYW1lKTsKLQkJfQotCX0KLQotCS8vIFRPRE86IFdlIHNob3VsZCBsb29rIGF0IHVzaW5nIHRoZSByZWZhY3RvciBtZWNoYW5pc20gdG8gZG8gdGhpcyByZW5hbWluZy4uLi4KLQlwcml2YXRlIHZvaWQgcmVuYW1lSU9GSGVscGVyKFdTRExFbGVtZW50IG9iamVjdCkKLQl7ICAgICAgICAgICAgICAgICAgICAgICAgIAotCQlEZWZpbml0aW9uIGRlZmluaXRpb24gPSBvYmplY3QuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOyAKLQkJQ29tcG9uZW50UmVmZXJlbmNlVXRpbCB1dGlsID0gbmV3IENvbXBvbmVudFJlZmVyZW5jZVV0aWwoZGVmaW5pdGlvbik7Ci0JCUxpc3QgbGlzdCA9IG51bGw7Ci0KLQkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIElucHV0KQotCQl7Ci0JCQlsaXN0ID0gdXRpbC5nZXRCaW5kaW5nSW5wdXRzKChJbnB1dClvYmplY3QpOwotCQl9Ci0JCWVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIE91dHB1dCkKLQkJewotCQkJbGlzdCA9IHV0aWwuZ2V0QmluZGluZ091dHB1dHMoKE91dHB1dClvYmplY3QpOwotCQl9Ci0JCWVsc2UgLy8gZmF1bHQKLQkJewotCQkJbGlzdCA9IHV0aWwuZ2V0QmluZGluZ0ZhdWx0cygoRmF1bHQpb2JqZWN0KTsKLQkJfQotCi0JCWlmIChsaXN0ICE9IG51bGwpCi0JCXsKLQkJCWZvciAoSXRlcmF0b3IgaSA9IGxpc3QuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLQkJCXsKLQkJCQlPYmplY3QgYmluZGluZ09iamVjdCA9IGkubmV4dCgpOwotCQkJCXJlbmFtZU1vZGVsT2JqZWN0SGVscGVyKGJpbmRpbmdPYmplY3QsIG5ld05hbWUpOwotCQkJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLQkJfQotCi0JCXJlbmFtZU1vZGVsT2JqZWN0SGVscGVyKG9iamVjdCwgbmV3TmFtZSk7Ci0JfQotCi0JLy8gVE9ETzogV2Ugc2hvdWxkIGxvb2sgYXQgdXNpbmcgdGhlIHJlZmFjdG9yIG1lY2hhbmlzbSB0byBkbyB0aGlzIHJlbmFtaW5nLi4uLgotCXByaXZhdGUgdm9pZCByZW5hbWVNb2RlbE9iamVjdEhlbHBlcihPYmplY3QgbW9kZWxPYmplY3QsIFN0cmluZyB0aGVOZXdOYW1lKQotCXsKLQkJLy8gVE9ETzogV2Ugc2hvdWxkIGdvIHRocm91Z2ggdGhlIG1vZGVsIHRvIHJlbmFtZS4uLi4gTm90IHRoZSBFbGVtZW50Li4uCi0JCUVsZW1lbnQgZWxlbWVudCA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0RWxlbWVudEZvck9iamVjdChtb2RlbE9iamVjdCk7Ci0JCWlmIChlbGVtZW50ICE9IG51bGwpCi0JCXsgCi0JCQllbGVtZW50LnNldEF0dHJpYnV0ZSgibmFtZSIsIHRoZU5ld05hbWUpOyAvLyROT04tTkxTLTEkCi0JCX0gICAgCi0KLQkJaWYgKG1vZGVsT2JqZWN0IGluc3RhbmNlb2YgTWVzc2FnZSkKLQkJewotCQkJTWVzc2FnZVJlbmFtZXIgcmVuYW1lciA9IG5ldyBNZXNzYWdlUmVuYW1lcigoTWVzc2FnZSltb2RlbE9iamVjdCwgdGhlTmV3TmFtZSk7Ci0JCQlyZW5hbWVyLnZpc2l0QmluZGluZ3MoKTsKLQkJfQotCQllbHNlIGlmIChtb2RlbE9iamVjdCBpbnN0YW5jZW9mIFBvcnRUeXBlKQotCQl7Ci0JCQlQb3J0VHlwZVJlbmFtZXIgcmVuYW1lciA9IG5ldyBQb3J0VHlwZVJlbmFtZXIoKFBvcnRUeXBlKW1vZGVsT2JqZWN0LCB0aGVOZXdOYW1lKTsKLQkJCXJlbmFtZXIudmlzaXRCaW5kaW5ncygpOwotCQl9Ci0JCWVsc2UgaWYgKG1vZGVsT2JqZWN0IGluc3RhbmNlb2YgQmluZGluZykKLQkJewotCQkJQmluZGluZ1JlbmFtZXIgcmVuYW1lciA9IG5ldyBCaW5kaW5nUmVuYW1lcigoQmluZGluZyltb2RlbE9iamVjdCwgdGhlTmV3TmFtZSk7Ci0JCQlyZW5hbWVyLnZpc2l0U2VydmljZXMoKTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExUmVvcmRlck1lc3NhZ2VSZWZlcmVuY2VzQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFSZW9yZGVyTWVzc2FnZVJlZmVyZW5jZXNDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjZTgyMGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFSZW9yZGVyTWVzc2FnZVJlZmVyZW5jZXNDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzOwotCi1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb25UeXBlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMU9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklNZXNzYWdlUmVmZXJlbmNlOwotCi1wdWJsaWMgY2xhc3MgVzExUmVvcmRlck1lc3NhZ2VSZWZlcmVuY2VzQ29tbWFuZCBleHRlbmRzIFcxMVRvcExldmVsRWxlbWVudENvbW1hbmQgewotCXByb3RlY3RlZCBJTWVzc2FnZVJlZmVyZW5jZSBsZWZ0U2libGluZzsKLQlwcm90ZWN0ZWQgSU1lc3NhZ2VSZWZlcmVuY2UgcmlnaHRTaWJsaW5nOwotCXByb3RlY3RlZCBJTWVzc2FnZVJlZmVyZW5jZSBtb3ZpbmdQYXJhbWV0ZXI7Ci0JCi0JcHVibGljIFcxMVJlb3JkZXJNZXNzYWdlUmVmZXJlbmNlc0NvbW1hbmQoSU1lc3NhZ2VSZWZlcmVuY2UgbGVmdFNpYmxpbmcsIElNZXNzYWdlUmVmZXJlbmNlIHJpZ2h0U2libGluZywgSU1lc3NhZ2VSZWZlcmVuY2UgbW92aW5nUGFyYW1ldGVyKSB7Ci0gICAgICAgIHN1cGVyKE1lc3NhZ2VzLl9VSV9BQ1RJT05fUkVPUkRFUl9NRVNTQUdFX1JFRkVSRU5DRSwgbnVsbCk7Ci0JCXRoaXMubGVmdFNpYmxpbmcgPSBsZWZ0U2libGluZzsKLQkJdGhpcy5yaWdodFNpYmxpbmcgPSByaWdodFNpYmxpbmc7Ci0JCXRoaXMubW92aW5nUGFyYW1ldGVyID0gbW92aW5nUGFyYW1ldGVyOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBleGVjdXRlKCkgewotCQlJTWVzc2FnZVJlZmVyZW5jZSBsZWZ0U2liRWxlbWVudCA9IG51bGw7Ci0JCUlNZXNzYWdlUmVmZXJlbmNlIG1vdmluZ0NoaWxkID0gbnVsbDsKLQkJCi0JCWlmIChsZWZ0U2libGluZyBpbnN0YW5jZW9mIElNZXNzYWdlUmVmZXJlbmNlKSB7Ci0JCQlsZWZ0U2liRWxlbWVudCA9IChJTWVzc2FnZVJlZmVyZW5jZSkgbGVmdFNpYmxpbmc7IAotCQl9Ci0JCWlmIChtb3ZpbmdQYXJhbWV0ZXIgaW5zdGFuY2VvZiBJTWVzc2FnZVJlZmVyZW5jZSkgewotCQkJbW92aW5nQ2hpbGQgPSAoSU1lc3NhZ2VSZWZlcmVuY2UpIG1vdmluZ1BhcmFtZXRlcjsKLQkJfQotCQkKLQkJVzExT3BlcmF0aW9uIHcxMU9wZXJhdGlvbiA9IChXMTFPcGVyYXRpb24pIG1vdmluZ0NoaWxkLmdldE93bmVyT3BlcmF0aW9uKCk7Ci0JCU9wZXJhdGlvbiBvcGVyYXRpb24gPSAoT3BlcmF0aW9uKSB3MTFPcGVyYXRpb24uZ2V0VGFyZ2V0KCk7Ci0JCQotCQl0cnkgewotCQkJYmVnaW5SZWNvcmRpbmcob3BlcmF0aW9uLmdldEVsZW1lbnQoKSk7Ci0KLQkJCWlmIChtb3ZpbmdDaGlsZC5nZXRLaW5kKCkgPT0gSU1lc3NhZ2VSZWZlcmVuY2UuS0lORF9JTlBVVCkgewotCQkJCWlmIChsZWZ0U2liRWxlbWVudCA9PSBudWxsKSB7Ci0JCQkJCS8vIElucHV0L091dHB1dCBzdHlsZQotCQkJCQlzZXRJbnB1dE91dHB1dE9yZGVyKG9wZXJhdGlvbiwgdHJ1ZSk7Ci0JCQkJfQotCQkJCWVsc2UgaWYgKGxlZnRTaWJFbGVtZW50ICE9IG51bGwgJiYgbGVmdFNpYkVsZW1lbnQuZ2V0S2luZCgpID09IElNZXNzYWdlUmVmZXJlbmNlLktJTkRfSU5QVVQpIHsKLQkJCQkJaWYgKHJpZ2h0U2libGluZy5nZXRLaW5kKCkgPT0gSU1lc3NhZ2VSZWZlcmVuY2UuS0lORF9PVVRQVVQpIHsKLQkJCQkJCS8vIElucHV0L091dHB1dCBzdHlsZQotCQkJCQkJc2V0SW5wdXRPdXRwdXRPcmRlcihvcGVyYXRpb24sIHRydWUpOwotCQkJCQl9Ci0JCQkJfQotCQkJCWVsc2UgewotCQkJCQkvLyBPdXRwdXQvSW5wdXQgc3R5bGUKLQkJCQkJc2V0SW5wdXRPdXRwdXRPcmRlcihvcGVyYXRpb24sIGZhbHNlKTsKLQkJCQl9Ci0JCQl9Ci0JCQllbHNlIGlmIChtb3ZpbmdDaGlsZC5nZXRLaW5kKCkgPT0gSU1lc3NhZ2VSZWZlcmVuY2UuS0lORF9PVVRQVVQpIHsKLQkJCQlpZiAobGVmdFNpYkVsZW1lbnQgPT0gbnVsbCkgewotCQkJCQkvLyBPdXRwdXQvSW5wdXQgc3R5bGUKLQkJCQkJc2V0SW5wdXRPdXRwdXRPcmRlcihvcGVyYXRpb24sIGZhbHNlKTsKLQkJCQl9Ci0JCQkJZWxzZSBpZiAobGVmdFNpYkVsZW1lbnQgIT0gbnVsbCAmJiBsZWZ0U2liRWxlbWVudC5nZXRLaW5kKCkgPT0gSU1lc3NhZ2VSZWZlcmVuY2UuS0lORF9PVVRQVVQpIHsKLQkJCQkJaWYgKHJpZ2h0U2libGluZy5nZXRLaW5kKCkgPT0gSU1lc3NhZ2VSZWZlcmVuY2UuS0lORF9JTlBVVCkgewotCQkJCQkJLy8gT3V0cHV0L0lucHV0IHN0eWxlCi0JCQkJCQlzZXRJbnB1dE91dHB1dE9yZGVyKG9wZXJhdGlvbiwgZmFsc2UpOwotCQkJCQl9Ci0JCQkJfQotCQkJCWVsc2UgewotCQkJCQkvLyBJbnB1dC9PdXRwdXQgc3R5bGUKLQkJCQkJc2V0SW5wdXRPdXRwdXRPcmRlcihvcGVyYXRpb24sIHRydWUpOwotCQkJCX0KLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWVuZFJlY29yZGluZyhvcGVyYXRpb24uZ2V0RWxlbWVudCgpKTsKLQkJfQotCX0KLQkKLQkvLyBib29sZWFuIGlucHV0Rmlyc3QgPSB0cnVlIGlmIHRoZSBJbnB1dCBpcyB0aGUgZmlyc3QgaW4gdGhlIG9yZGVyIG9mIElucHV0IGFuZCBPdXRwdXQKLQlwcml2YXRlIHZvaWQgc2V0SW5wdXRPdXRwdXRPcmRlcihPcGVyYXRpb24gb3BlcmF0aW9uLCBib29sZWFuIGlucHV0Rmlyc3QpIHsKLQkJLy8gV2UgbmVlZCB0byBkZXRlcm1pbmUgbW9yZSBpbmZvIGJlZm9yZSB3ZSBjYW4gc2V0IHRoZSBzdHlsZQkKLQkJaWYgKGlucHV0Rmlyc3QgJiYgb3BlcmF0aW9uLmdldEVJbnB1dCgpICE9IG51bGwpIHsKLQkJCS8vIENoZWNrIGlmIHRoZXJlIGlzIGFuIE91dHB1dAotCQkJaWYgKG9wZXJhdGlvbi5nZXRFT3V0cHV0KCkgIT0gbnVsbCkgewotCQkJCS8vIE9yZGVyIGlzOiBJbnB1dCwgT3V0cHV0Ci0JCQkJc2V0T3BlcmF0aW9uU3R5bGUob3BlcmF0aW9uLCBPcGVyYXRpb25UeXBlLlJFUVVFU1RfUkVTUE9OU0UpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJLy8gT3JkZXIgaXM6IElucHV0Ci0JCQkJc2V0T3BlcmF0aW9uU3R5bGUob3BlcmF0aW9uLCBPcGVyYXRpb25UeXBlLk9ORV9XQVkpOwotCQkJfQotCQl9Ci0JCWVsc2UgaWYgKG9wZXJhdGlvbi5nZXRFT3V0cHV0KCkgIT0gbnVsbCkgewotCQkJLy8gQ2hlY2sgaWYgdGhlcmUgaXMgYW4gSW5wdXQKLQkJCWlmIChvcGVyYXRpb24uZ2V0RUlucHV0KCkgIT0gbnVsbCkgewotCQkJCS8vIE9yZGVyIGlzOiBPdXRwdXQsIElucHV0Ci0JCQkJc2V0T3BlcmF0aW9uU3R5bGUob3BlcmF0aW9uLCBPcGVyYXRpb25UeXBlLlNPTElDSVRfUkVTUE9OU0UpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJLy8gT3JkZXIgaXM6IE91dHB1dAotCQkJCXNldE9wZXJhdGlvblN0eWxlKG9wZXJhdGlvbiwgT3BlcmF0aW9uVHlwZS5OT1RJRklDQVRJT04pOwotCQkJfQotCQl9Ci0JfQotCQotCXByaXZhdGUgdm9pZCBzZXRPcGVyYXRpb25TdHlsZShPcGVyYXRpb24gb3BlcmF0aW9uLCBPcGVyYXRpb25UeXBlIG9wZXJhdGlvblR5cGUpIHsKLQkJLy8gSWYgdGhlcmUgaXMgbm8gc3R5bGUgdG8gYmVnaW4gd2l0aCwgZG9uJ3Qgc2V0IG9uZSBub3cKLQkJaWYgKG9wZXJhdGlvbi5nZXRTdHlsZSgpID09IG51bGwpIHsKLQkJCXJldHVybjsKLQkJfQotCQkKLQkJb3BlcmF0aW9uLnNldFN0eWxlKG9wZXJhdGlvblR5cGUpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMVJlb3JkZXJQYXJhbWV0ZXJzQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFSZW9yZGVyUGFyYW1ldGVyc0NvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzA3NWU4Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMVJlb3JkZXJQYXJhbWV0ZXJzQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kczsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMVBhcmFtZXRlckZvckF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFQYXJhbWV0ZXJGb3JFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMVBhcmFtZXRlckZvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RFbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE1vZGVsR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFBhcnRpY2xlOwotCi1wdWJsaWMgY2xhc3MgVzExUmVvcmRlclBhcmFtZXRlcnNDb21tYW5kIGV4dGVuZHMgVzExVG9wTGV2ZWxFbGVtZW50Q29tbWFuZCB7Ci0gICAgcHJvdGVjdGVkIElQYXJhbWV0ZXIgbGVmdFNpYmxpbmc7Ci0gICAgcHJvdGVjdGVkIElQYXJhbWV0ZXIgcmlnaHRTaWJsaW5nOwotICAgIHByb3RlY3RlZCBJUGFyYW1ldGVyIG1vdmluZ1BhcmFtZXRlcjsKLSAgICAKLSAgICBwdWJsaWMgVzExUmVvcmRlclBhcmFtZXRlcnNDb21tYW5kKElQYXJhbWV0ZXIgbGVmdFNpYmxpbmcsIElQYXJhbWV0ZXIgcmlnaHRTaWJsaW5nLCBJUGFyYW1ldGVyIG1vdmluZ1BhcmFtZXRlcikgewotICAgICAgICBzdXBlcihNZXNzYWdlcy5fVUlfQUNUSU9OX1JFT1JERVJfUEFSVCwgbnVsbCk7Ci0gICAgICAgIHRoaXMubGVmdFNpYmxpbmcgPSBsZWZ0U2libGluZzsKLSAgICAgICAgdGhpcy5yaWdodFNpYmxpbmcgPSByaWdodFNpYmxpbmc7Ci0gICAgICAgIHRoaXMubW92aW5nUGFyYW1ldGVyID0gbW92aW5nUGFyYW1ldGVyOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBleGVjdXRlKCkgewotICAgIAlpZiAobGVmdFNpYmxpbmcgaW5zdGFuY2VvZiBXMTFQYXJhbWV0ZXJGb3JQYXJ0IHx8Ci0gICAgCQlyaWdodFNpYmxpbmcgaW5zdGFuY2VvZiBXMTFQYXJhbWV0ZXJGb3JQYXJ0IHx8Ci0gICAgCQltb3ZpbmdQYXJhbWV0ZXIgaW5zdGFuY2VvZiBXMTFQYXJhbWV0ZXJGb3JQYXJ0KSB7Ci0gICAgCQlleGVjdXRlRm9yUGFydCgpOwotICAgIAl9Ci0gICAgCWVsc2UgaWYgKGxlZnRTaWJsaW5nIGluc3RhbmNlb2YgVzExUGFyYW1ldGVyRm9yRWxlbWVudCB8fAotICAgICAgICAJCSByaWdodFNpYmxpbmcgaW5zdGFuY2VvZiBXMTFQYXJhbWV0ZXJGb3JFbGVtZW50IHx8Ci0gICAgICAgIAkJIG1vdmluZ1BhcmFtZXRlciBpbnN0YW5jZW9mIFcxMVBhcmFtZXRlckZvckVsZW1lbnQpIHsKLSAgICAJCWV4ZWN1dGVGb3JFbGVtZW50KCk7Ci0gICAgICAgIH0KLSAgICAJZWxzZSBpZiAobGVmdFNpYmxpbmcgaW5zdGFuY2VvZiBXMTFQYXJhbWV0ZXJGb3JBdHRyaWJ1dGUgfHwKLSAgICAgICAJCSAgICAgcmlnaHRTaWJsaW5nIGluc3RhbmNlb2YgVzExUGFyYW1ldGVyRm9yQXR0cmlidXRlIHx8Ci0gICAgCQkgICAgIG1vdmluZ1BhcmFtZXRlciBpbnN0YW5jZW9mIFcxMVBhcmFtZXRlckZvckF0dHJpYnV0ZSkgewotLy8gICAgCQlleGVjdXRlRm9yRWxlbWVudCgpOwotICAgIAl9Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgdm9pZCBleGVjdXRlRm9yRWxlbWVudCgpIHsKLSAgICAJWFNERWxlbWVudERlY2xhcmF0aW9uIGxlZnRTaWJFbGVtZW50ID0gbnVsbDsKLSAgICAJWFNERWxlbWVudERlY2xhcmF0aW9uIHJpZ2h0U2liRWxlbWVudCA9IG51bGw7Ci0gICAgCVhTREVsZW1lbnREZWNsYXJhdGlvbiBtb3ZpbmdDaGlsZCA9IG51bGw7Ci0gICAgCQotCQlYU0RQYXJ0aWNsZSBtb3ZpbmdQYXJ0aWNsZSA9IG51bGw7Ci0JCVhTRFBhcnRpY2xlIGxlZnRQYXJ0aWNsZSA9IG51bGw7Ci0JCVhTRFBhcnRpY2xlIHJpZ2h0UGFydGljbGUgPSBudWxsOwotCi0JCWlmIChsZWZ0U2libGluZyBpbnN0YW5jZW9mIFcxMVBhcmFtZXRlckZvckVsZW1lbnQpIHsKLQkJCWxlZnRTaWJFbGVtZW50ID0gKFhTREVsZW1lbnREZWNsYXJhdGlvbikgKChXMTFQYXJhbWV0ZXJGb3JFbGVtZW50KSBsZWZ0U2libGluZykuZ2V0VGFyZ2V0KCk7Ci0JCQlsZWZ0UGFydGljbGUgPSAoWFNEUGFydGljbGUpIGxlZnRTaWJFbGVtZW50LmVDb250YWluZXIoKTsKLQkJfQotCQlpZiAocmlnaHRTaWJsaW5nIGluc3RhbmNlb2YgVzExUGFyYW1ldGVyRm9yRWxlbWVudCkgewotCQkJcmlnaHRTaWJFbGVtZW50ID0gKFhTREVsZW1lbnREZWNsYXJhdGlvbikgKChXMTFQYXJhbWV0ZXJGb3JFbGVtZW50KSByaWdodFNpYmxpbmcpLmdldFRhcmdldCgpOwotCQkJcmlnaHRQYXJ0aWNsZSA9IChYU0RQYXJ0aWNsZSkgcmlnaHRTaWJFbGVtZW50LmVDb250YWluZXIoKTsKLQkJfQotCQlpZiAobW92aW5nUGFyYW1ldGVyIGluc3RhbmNlb2YgVzExUGFyYW1ldGVyRm9yRWxlbWVudCkgewotCQkJbW92aW5nQ2hpbGQgPSAoWFNERWxlbWVudERlY2xhcmF0aW9uKSAoKFcxMVBhcmFtZXRlckZvckVsZW1lbnQpIG1vdmluZ1BhcmFtZXRlcikuZ2V0VGFyZ2V0KCk7Ci0JCQltb3ZpbmdQYXJ0aWNsZSA9IChYU0RQYXJ0aWNsZSkgbW92aW5nQ2hpbGQuZUNvbnRhaW5lcigpOwotCQl9Ci0JCQotCQlpZiAobW92aW5nQ2hpbGQuZXF1YWxzKGxlZnRTaWJFbGVtZW50KSB8fCBtb3ZpbmdDaGlsZC5lcXVhbHMocmlnaHRTaWJFbGVtZW50KSkgewotCQkJcmV0dXJuOwotCQl9Ci0gICAgCQotICAgIAlpZiAobW92aW5nQ2hpbGQgIT0gbnVsbCkgewotICAgIAkJdHJ5IHsKLSAgICAJCQliZWdpblJlY29yZGluZyhtb3ZpbmdQYXJ0aWNsZS5nZXRFbGVtZW50KCkpOwotCi0gICAgCQkJWFNETW9kZWxHcm91cCBjb250YWluZXIgPSAoWFNETW9kZWxHcm91cCkgbW92aW5nUGFydGljbGUuZ2V0Q29udGFpbmVyKCk7Ci0gICAgCQkJTGlzdCBwYXJ0aWNsZXMgPSBjb250YWluZXIuZ2V0Q29udGVudHMoKTsKLSAgICAJCQkKLSAgICAJCQlwYXJ0aWNsZXMucmVtb3ZlKG1vdmluZ1BhcnRpY2xlKTsKLQotICAgIAkJCWludCBsZWZ0SW5kZXggPSAtMSwgcmlnaHRJbmRleCA9IC0xOwotICAgIAkJCWlmIChsZWZ0UGFydGljbGUgIT0gbnVsbCkgewotICAgIAkJCQlsZWZ0SW5kZXggPSBwYXJ0aWNsZXMuaW5kZXhPZihsZWZ0UGFydGljbGUpOwotICAgIAkJCX0KLSAgICAJCQlpZiAocmlnaHRQYXJ0aWNsZSE9IG51bGwpIHsKLSAgICAJCQkJcmlnaHRJbmRleCA9IHBhcnRpY2xlcy5pbmRleE9mKHJpZ2h0UGFydGljbGUpOwotICAgIAkJCX0KLQotICAgIAkJCWlmIChsZWZ0SW5kZXggPT0gLTEpIHsKLSAgICAJCQkJLy8gQWRkIG1vdmluZyBjaGlsZCB0byB0aGUgZnJvbnQKLSAgICAJCQkJcGFydGljbGVzLmFkZCgwLCBtb3ZpbmdQYXJ0aWNsZSk7ICAJCQkJCi0gICAgCQkJfQotICAgIAkJCWVsc2UgaWYgKHJpZ2h0SW5kZXggPT0gLTEpIHsKLSAgICAJCQkJLy8gQWRkIG1vdmluZyBjaGlsZCB0byB0aGUgZW5kCi0gICAgCQkJCXBhcnRpY2xlcy5hZGQobW92aW5nUGFydGljbGUpOwotICAgIAkJCX0KLSAgICAJCQllbHNlIHsKLSAgICAJCQkJLy8gQWRkIG1vdmluZyBjaGlsZCBhZnRlciB0aGUgb2NjdXJlbmNlIG9mIHRoZSBsZWZ0IHNpYmxpbmcKLSAgICAJCQkJcGFydGljbGVzLmFkZChsZWZ0SW5kZXggKyAxLCBtb3ZpbmdQYXJ0aWNsZSk7Ci0gICAgCQkJfQotICAgIAkJfQotICAgIAkJZmluYWxseSB7Ci0gICAgCQkJZW5kUmVjb3JkaW5nKG1vdmluZ1BhcnRpY2xlLmdldEVsZW1lbnQoKSk7Ci0gICAgCQl9Ci0gICAgCX0KLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSB2b2lkIGV4ZWN1dGVGb3JQYXJ0KCkgewotCQlQYXJ0IGxlZnRTaWJFbGVtZW50ID0gbnVsbDsKLQkJUGFydCByaWdodFNpYkVsZW1lbnQgPSBudWxsOwotCQlQYXJ0IG1vdmluZ0NoaWxkID0gbnVsbDsKLQotCQlpZiAobGVmdFNpYmxpbmcgaW5zdGFuY2VvZiBXMTFQYXJhbWV0ZXJGb3JQYXJ0KSB7Ci0JCQlsZWZ0U2liRWxlbWVudCA9IChQYXJ0KSAoKFcxMVBhcmFtZXRlckZvclBhcnQpIGxlZnRTaWJsaW5nKS5nZXRUYXJnZXQoKTsgCi0JCX0KLQkJaWYgKHJpZ2h0U2libGluZyBpbnN0YW5jZW9mIFcxMVBhcmFtZXRlckZvclBhcnQpIHsKLQkJCXJpZ2h0U2liRWxlbWVudCA9IChQYXJ0KSAoKFcxMVBhcmFtZXRlckZvclBhcnQpIHJpZ2h0U2libGluZykuZ2V0VGFyZ2V0KCk7Ci0JCX0KLQkJaWYgKG1vdmluZ1BhcmFtZXRlciBpbnN0YW5jZW9mIFcxMVBhcmFtZXRlckZvclBhcnQpIHsKLQkJCW1vdmluZ0NoaWxkID0gKFBhcnQpICgoVzExUGFyYW1ldGVyRm9yUGFydCkgbW92aW5nUGFyYW1ldGVyKS5nZXRUYXJnZXQoKTsKLQkJfQotCQkKLQkJaWYgKG1vdmluZ0NoaWxkLmVxdWFscyhsZWZ0U2liRWxlbWVudCkgfHwgbW92aW5nQ2hpbGQuZXF1YWxzKHJpZ2h0U2liRWxlbWVudCkpIHsKLQkJCXJldHVybjsKLQkJfQotICAgIAkKLSAgICAJaWYgKG1vdmluZ0NoaWxkICE9IG51bGwpIHsKLSAgICAJCXRyeSB7Ci0gICAgCQkJYmVnaW5SZWNvcmRpbmcobW92aW5nQ2hpbGQuZ2V0RWxlbWVudCgpKTsKLSAgICAgICAgCQlNZXNzYWdlIG1lc3NhZ2UgPSAoTWVzc2FnZSkgbW92aW5nQ2hpbGQuZUNvbnRhaW5lcigpOwotICAgIAkJCUxpc3QgcGFydHMgPSBtZXNzYWdlLmdldEVQYXJ0cygpOwotCi0gICAgCQkJcGFydHMucmVtb3ZlKG1vdmluZ0NoaWxkKTsKLQotICAgIAkJCWludCBsZWZ0SW5kZXggPSAtMSwgcmlnaHRJbmRleCA9IC0xOwotICAgIAkJCWlmIChsZWZ0U2liRWxlbWVudCAhPSBudWxsKSB7Ci0gICAgCQkJCWxlZnRJbmRleCA9IHBhcnRzLmluZGV4T2YobGVmdFNpYkVsZW1lbnQpOwotICAgIAkJCX0KLSAgICAJCQlpZiAocmlnaHRTaWJFbGVtZW50ICE9IG51bGwpIHsKLSAgICAJCQkJcmlnaHRJbmRleCA9IHBhcnRzLmluZGV4T2YocmlnaHRTaWJFbGVtZW50KTsKLSAgICAJCQl9Ci0KLSAgICAJCQlpZiAobGVmdEluZGV4ID09IC0xKSB7Ci0gICAgCQkJCS8vIEFkZCBtb3ZpbmcgY2hpbGQgdG8gdGhlIGZyb250Ci0gICAgCQkJCXBhcnRzLmFkZCgwLCBtb3ZpbmdDaGlsZCk7ICAJCQkJCi0gICAgCQkJfQotICAgIAkJCWVsc2UgaWYgKHJpZ2h0SW5kZXggPT0gLTEpIHsKLSAgICAJCQkJLy8gQWRkIG1vdmluZyBjaGlsZCB0byB0aGUgZW5kCi0gICAgCQkJCXBhcnRzLmFkZChtb3ZpbmdDaGlsZCk7Ci0gICAgCQkJfQotICAgIAkJCWVsc2UgewotICAgIAkJCQkvLyBBZGQgbW92aW5nIGNoaWxkIGFmdGVyIHRoZSBvY2N1cmVuY2Ugb2YgdGhlIGxlZnQgc2libGluZwotICAgIAkJCQlwYXJ0cy5hZGQobGVmdEluZGV4ICsgMSwgbW92aW5nQ2hpbGQpOwotICAgIAkJCX0KLSAgICAJCX0KLSAgICAJCWZpbmFsbHkgewotICAgIAkJCWVuZFJlY29yZGluZyhtb3ZpbmdDaGlsZC5nZXRFbGVtZW50KCkpOwotICAgIAkJfQotICAgIAl9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExU2V0QWRkcmVzc0NvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExU2V0QWRkcmVzc0NvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQ5YWE2ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMVNldEFkZHJlc3NDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQQWRkcmVzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEFkZHJlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01Eb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNRWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwubW9kZWxxdWVyeS5Nb2RlbFF1ZXJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwubW9kZWxxdWVyeS5Nb2RlbFF1ZXJ5QWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwudXRpbC5ET01Db250ZW50QnVpbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLnV0aWwuRE9NQ29udGVudEJ1aWxkZXJJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5tb2RlbHF1ZXJ5Lk1vZGVsUXVlcnlVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZm9ybWF0LkZvcm1hdFByb2Nlc3NvclhNTDsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotcHVibGljIGNsYXNzIFcxMVNldEFkZHJlc3NDb21tYW5kIGV4dGVuZHMgVzExVG9wTGV2ZWxFbGVtZW50Q29tbWFuZCB7Ci0JcHJpdmF0ZSBQb3J0IHBvcnQ7Ci0JcHJpdmF0ZSBTdHJpbmcgbmV3QWRkcmVzczsKLQkKLQlwdWJsaWMgVzExU2V0QWRkcmVzc0NvbW1hbmQoUG9ydCBwb3J0LCBTdHJpbmcgbmV3QWRkcmVzcykgewotICAgICAgICBzdXBlcihNZXNzYWdlcy5fVUlfQUNUSU9OX0VESVRfUE9SVF9BRERSRVNTLCBwb3J0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0JCXRoaXMucG9ydCA9IHBvcnQ7Ci0JCXRoaXMubmV3QWRkcmVzcyA9IG5ld0FkZHJlc3M7Ci0JfQotCQotCXB1YmxpYyB2b2lkIGV4ZWN1dGUoKSB7Ci0JCXRyeSB7Ci0JCQliZWdpblJlY29yZGluZyhwb3J0LmdldEVsZW1lbnQoKSk7Ci0KLQkJCS8vIFNob3VsZCB0aGUgYWN0dWFsIHNldCBhZGRyZXNzIGNvZGUgbGl2ZSBpbiBpdCdzICdvd24gc2VwYXJhdGUnIGNvbW1hbmQ/PwotCQkJaWYgKCFzZXRBZGRyZXNzKCkpIHsKLQkJCQljcmVhdGVOZXdFeHRlbnNpYmlsaXR5RWxlbWVudCgpOwotCQkJCXNldEFkZHJlc3MoKTsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWVuZFJlY29yZGluZyhwb3J0LmdldEVsZW1lbnQoKSk7Ci0JCX0KLQl9Ci0JCi0JcHJpdmF0ZSBib29sZWFuIHNldEFkZHJlc3MoKSB7Ci0JCWJvb2xlYW4gc3VjY2VzcyA9IGZhbHNlOwotCQkKLQkJaWYgKHBvcnQuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLnNpemUoKSA+IDApIHsKLQkJCUl0ZXJhdG9yIGVlSXQgPSBwb3J0LmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotCQkJd2hpbGUgKGVlSXQuaGFzTmV4dCgpKSB7Ci0JCQkJRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZWUgPSAoKEV4dGVuc2liaWxpdHlFbGVtZW50KSBlZUl0Lm5leHQoKSk7Ci0JCQkJaWYgKGVlIGluc3RhbmNlb2YgU09BUEFkZHJlc3MpIHsKLQkJCQkJKChTT0FQQWRkcmVzcykgZWUpLnNldExvY2F0aW9uVVJJKG5ld0FkZHJlc3MpOwotCQkJCQlzdWNjZXNzID0gdHJ1ZTsKLQkJCQl9Ci0JCQkJZWxzZSBpZiAoZWUgaW5zdGFuY2VvZiBIVFRQQWRkcmVzcykgewotCQkJCQkoKEhUVFBBZGRyZXNzKSBlZSkuc2V0TG9jYXRpb25VUkkobmV3QWRkcmVzcyk7Ci0JCQkJCXN1Y2Nlc3MgPSB0cnVlOwotCQkJCX0KLQkvLwkJCWVlLmdldEVsZW1lbnQoKS5zZXRBdHRyaWJ1dGUoImxvY2F0aW9uIiwgbmV3QWRkcmVzcyk7Ci0JCQl9Ci0JCX0KLQkJCi0JCXJldHVybiBzdWNjZXNzOwotCX0KLQotCS8qCi0JICogVE9ETzogcm1haDogV2UgbmVlZCB0byBjbGVhbiB0aGUgY29kZSBiZWxvdy4uLi4uCi0JICogVGhpbmdzIHNob3VsZCBiZSB3cmFwcGVkIHVwIGFuZCBwbGFjZWQgaW4gYSBjb21tb24gbG9jYXRpb24uICBDdXJyZW50bHksIHRoaXMgaXMKLQkgKiBmcm9tIHRoZSBBZGRFRU1lbnVBY3Rpb25Db250cml1Ym9yLmphdmEgY2xhc3MKLQkgKi8KLQlwcml2YXRlIHZvaWQgY3JlYXRlTmV3RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSB7Ci0JCUxpc3QgbW9kZWxRdWVyeUFjdGlvbkxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCU1vZGVsUXVlcnkgbW9kZWxRdWVyeSA9IE1vZGVsUXVlcnlVdGlsLmdldE1vZGVsUXVlcnkocG9ydC5nZXRFbGVtZW50KCkuZ2V0T3duZXJEb2N1bWVudCgpKTsKLQkgICAgQ01FbGVtZW50RGVjbGFyYXRpb24gZWQgPSBtb2RlbFF1ZXJ5LmdldENNRWxlbWVudERlY2xhcmF0aW9uKHBvcnQuZ2V0RWxlbWVudCgpKTsKLQkgICAgCi0JICAgIGlmIChlZCAhPSBudWxsKQotCSAgICB7Ci0JICAgICAgICAgIC8vIGFkZCBpbnNlcnQgY2hpbGQgbm9kZSBhY3Rpb25zCi0JICAgICAgICAgIC8vCi0JICAgICAgICAgIGludCBpYyA9IE1vZGVsUXVlcnkuSU5DTFVERV9DSElMRF9OT0RFUzsKLQkgICAgICAgICAgaW50IHZjID0gTW9kZWxRdWVyeS5WQUxJRElUWV9TVFJJQ1Q7Ci0KLQkgICAgICAgICAgbW9kZWxRdWVyeS5nZXRJbnNlcnRBY3Rpb25zKHBvcnQuZ2V0RWxlbWVudCgpLCBlZCwgLTEsIGljLCB2YywgbW9kZWxRdWVyeUFjdGlvbkxpc3QpOwotCSAgICAgfQotCSAgICAKLQkgICAgY3JlYXRlTmV3RXh0ZW5zaWJpbGl0eUVsZW1lbnRIZWxwZXIxKG1vZGVsUXVlcnlBY3Rpb25MaXN0KTsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIGNyZWF0ZU5ld0V4dGVuc2liaWxpdHlFbGVtZW50SGVscGVyMShMaXN0IG1vZGVsUXVlcnlBY3Rpb25MaXN0KQotCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgCi0JICAgIGZvciAoSXRlcmF0b3IgaSA9IG1vZGVsUXVlcnlBY3Rpb25MaXN0Lml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0JICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLQkgICAgICBNb2RlbFF1ZXJ5QWN0aW9uIGFjdGlvbiA9IChNb2RlbFF1ZXJ5QWN0aW9uKWkubmV4dCgpOwotCSAgICAgIENNTm9kZSBjbW5vZGUgPSBhY3Rpb24uZ2V0Q01Ob2RlKCk7Ci0JICAgICAgaWYgKGNtbm9kZSAhPSBudWxsKQotCSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLQkgICAgICAgIGJvb2xlYW4gaXNPdGhlck5hbWVzcGFjZSA9IGZhbHNlOwotCSAgICAgICAgQ01Eb2N1bWVudCBjbURvY3VtZW50ID0gKENNRG9jdW1lbnQpY21ub2RlLmdldFByb3BlcnR5KCJDTURvY3VtZW50Iik7IC8vJE5PTi1OTFMtMSQKLQkgICAgICAgIGlmIChjbURvY3VtZW50ICE9IG51bGwpICAgICAgICAgIAotCSAgICAgICAgeyAgICAgICAgICAgICAKLQkgICAgICAgICAgU3RyaW5nIG5hbWVzcGFjZVVSSSA9IChTdHJpbmcpY21Eb2N1bWVudC5nZXRQcm9wZXJ0eSgiaHR0cDovL29yZy5lY2xpcHNlLndzdC9jbS9wcm9wZXJ0aWVzL3RhcmdldE5hbWVzcGFjZVVSSSIpOyAgLy8kTk9OLU5MUy0xJAotCSAgICAgICAgICBpc090aGVyTmFtZXNwYWNlID0gbmFtZXNwYWNlVVJJICE9IG51bGwgJiYgIW5hbWVzcGFjZVVSSS5lcXVhbHMoV1NETENvbnN0YW50cy5XU0RMX05BTUVTUEFDRV9VUkkpOwotCSAgICAgICAgfQotCi0JICAgICAgICBpZiAoaXNPdGhlck5hbWVzcGFjZSkKLQkgICAgICAgIHsKLQkgICAgICAgICAgaW50IGNtTm9kZVR5cGUgPSBjbW5vZGUuZ2V0Tm9kZVR5cGUoKTsKLQkgICAgICAgICAgaWYgKGFjdGlvbi5nZXRLaW5kKCkgPT0gTW9kZWxRdWVyeUFjdGlvbi5JTlNFUlQpCi0JICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0JICAgICAgICAgICAgc3dpdGNoIChjbU5vZGVUeXBlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0JICAgICAgICAgICAgewotCSAgICAgICAgICAgICAgY2FzZSBDTU5vZGUuRUxFTUVOVF9ERUNMQVJBVElPTiA6Ci0JICAgICAgICAgICAgICB7Ci0JICAgICAgICAgICAgCSAgY3JlYXRlTmV3RXh0ZW5zaWJpbGl0eUVsZW1lbnRIZWxwZXIyKChDTUVsZW1lbnREZWNsYXJhdGlvbiljbW5vZGUsIGFjdGlvbi5nZXRQYXJlbnQoKSwgYWN0aW9uLmdldFN0YXJ0SW5kZXgoKSk7Ci0JICAgICAgICAgICAgICAgIHJldHVybjsKLQkgICAgICAgICAgICAgIH0KLQkgICAgICAgICAgICB9Ci0JICAgICAgICAgIH0gICAgICAgICAgIAotCSAgICAgICAgfQotCSAgICAgIH0gICAKLQkgICAgfQotCSAgfQotCi0gICAgcHVibGljIHZvaWQgY3JlYXRlTmV3RXh0ZW5zaWJpbGl0eUVsZW1lbnRIZWxwZXIyKENNTm9kZSBjbW5vZGUsIE5vZGUgcGFyZW50LCBpbnQgaW5kZXgpCi0gICAgewotICAgICAgaWYgKGNtbm9kZSAhPSBudWxsICYmIHBhcmVudCAhPSBudWxsKQotICAgICAgewotICAgICAgICBEb2N1bWVudCBkb2N1bWVudCA9IHBhcmVudC5nZXROb2RlVHlwZSgpID09IE5vZGUuRE9DVU1FTlRfTk9ERSA/IChEb2N1bWVudClwYXJlbnQgOiBwYXJlbnQuZ2V0T3duZXJEb2N1bWVudCgpOyAgICAgICAgCi0KLSAgICAgICAgRE9NQ29udGVudEJ1aWxkZXIgYnVpbGRlciA9IG5ldyBET01Db250ZW50QnVpbGRlckltcGwoZG9jdW1lbnQpOyAKLSAgICAgICAgYnVpbGRlci5zZXRQcm9wZXJ0eShET01Db250ZW50QnVpbGRlci5QUk9QRVJUWV9CVUlMRF9CTEFOS19URVhUX05PREVTLCBCb29sZWFuLlRSVUUpOwotICAgICAgICBidWlsZGVyLnNldEJ1aWxkUG9saWN5KERPTUNvbnRlbnRCdWlsZGVyLkJVSUxEX09OTFlfUkVRVUlSRURfQ09OVEVOVCk7Ci0gICAgICAgIGJ1aWxkZXIuYnVpbGQocGFyZW50LCBjbW5vZGUpOwotICAgICAgICBpbnNlcnROb2Rlc0F0SW5kZXgocGFyZW50LCBidWlsZGVyLmdldFJlc3VsdCgpLCBpbmRleCwgdHJ1ZSk7Ci0gICAgICB9Ci0gICAgfSAKLQotICAgIHB1YmxpYyB2b2lkIGluc2VydE5vZGVzQXRJbmRleChOb2RlIHBhcmVudCwgTGlzdCBsaXN0LCBpbnQgaW5kZXgsIGJvb2xlYW4gZm9ybWF0KQotICAgIHsgICAgICAgICAgICAgICAgICAgCi0gICAgICBOb2RlTGlzdCBub2RlTGlzdCA9IHBhcmVudC5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICBpZiAoaW5kZXggPT0gLTEpCi0gICAgICB7Ci0gICAgICAgIGluZGV4ID0gbm9kZUxpc3QuZ2V0TGVuZ3RoKCk7Ci0gICAgICB9Ci0gICAgICBOb2RlIHJlZkNoaWxkID0gKGluZGV4IDwgbm9kZUxpc3QuZ2V0TGVuZ3RoKCkpID8gbm9kZUxpc3QuaXRlbShpbmRleCkgOiBudWxsOwotICAgIAotICAgICAgLy8gaGVyZSB3ZSBjb25zaWRlciB0aGUgY2FzZSB3aGVyZSB0aGUgcHJldmlvdXMgbm9kZSBpcyBhICd3aGl0ZSBzcGFjZScgVGV4dCBub2RlCi0gICAgICAvLyB3ZSBzaG91bGQgcmVhbGx5IGRvIHRoZSBpbnNlcnQgYmVmb3JlIHRoaXMgbm9kZQotICAgICAgLy8KLSAgICAgIGludCBwcmV2SW5kZXggPSBpbmRleCAtIDE7Ci0gICAgICBOb2RlIHByZXZDaGlsZCA9IChwcmV2SW5kZXggPCBub2RlTGlzdC5nZXRMZW5ndGgoKSkgPyBub2RlTGlzdC5pdGVtKHByZXZJbmRleCkgOiBudWxsOwotCSAgICBpZiAoaXNXaGl0ZXNwYWNlVGV4dE5vZGUocHJldkNoaWxkKSkgCi0gICAgICB7Ci0JICAJICByZWZDaGlsZCA9IHByZXZDaGlsZDsKLQkgICAgfQotICAgIAotICAgICAgZm9yIChJdGVyYXRvciBpID0gbGlzdC5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgICAgewotICAgICAgICBOb2RlIG5ld05vZGUgPSAoTm9kZSlpLm5leHQoKTsKLSAgICAKLSAgICAgICAgaWYgKG5ld05vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkFUVFJJQlVURV9OT0RFKQotICAgICAgICB7Ci0gICAgICAgICAgRWxlbWVudCBwYXJlbnRFbGVtZW50ID0gKEVsZW1lbnQpcGFyZW50OwotICAgICAgICAgIHBhcmVudEVsZW1lbnQuc2V0QXR0cmlidXRlTm9kZSgoQXR0ciluZXdOb2RlKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKG5ld05vZGUsIHJlZkNoaWxkKTsKLSAgICAgICAgfSAgCi0gICAgICB9Ci0gICAgCi0gICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBsaXN0Lml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICB7Ci0gICAgICAgIE5vZGUgbmV3Tm9kZSA9IChOb2RlKWkubmV4dCgpOwotICAgICAgICBpZiAoZm9ybWF0KQotICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotCQkgICAgICBGb3JtYXRQcm9jZXNzb3JYTUwgZm9ybWF0UHJvY2Vzc29yWE1MID0gbmV3IEZvcm1hdFByb2Nlc3NvclhNTCgpOwotCQkgICAgICBmb3JtYXRQcm9jZXNzb3JYTUwuZm9ybWF0Tm9kZSgoSURPTU5vZGUpbmV3Tm9kZSk7Ci0gICAgICAgIH0gIAotICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAKLQkgICAgLy9zZXRWaWV3ZXJTZWxlY3Rpb24obGlzdCk7Ci0gICAgfSAgIAotCQotICAgIHByb3RlY3RlZCBib29sZWFuIGlzV2hpdGVzcGFjZVRleHROb2RlKE5vZGUgbm9kZSkgCi0gICAgewotCSAgICByZXR1cm4gKG5vZGUgIT0gbnVsbCkgJiYgKG5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLlRFWFRfTk9ERSkgJiYgKG5vZGUuZ2V0Tm9kZVZhbHVlKCkudHJpbSgpLmxlbmd0aCgpID09IDApOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExU2V0QmluZGluZ0NvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExU2V0QmluZGluZ0NvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjJkYTk0YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMVNldEJpbmRpbmdDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQQWRkcmVzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUEJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQWRkcmVzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotCi1wdWJsaWMgY2xhc3MgVzExU2V0QmluZGluZ0NvbW1hbmQgZXh0ZW5kcyBXMTFUb3BMZXZlbEVsZW1lbnRDb21tYW5kIHsKLQlwcml2YXRlIFBvcnQgcG9ydDsKLQlwcml2YXRlIEJpbmRpbmcgYmluZGluZzsKLQkKLQlwdWJsaWMgVzExU2V0QmluZGluZ0NvbW1hbmQoUG9ydCBwb3J0LCBCaW5kaW5nIGJpbmRpbmcpIHsKLSAgICAgICAgc3VwZXIoTWVzc2FnZXMuX1VJX0FDVElPTl9TRVRfQklORElORywgcG9ydC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotCQl0aGlzLnBvcnQgPSBwb3J0OwotCQl0aGlzLmJpbmRpbmcgPSBiaW5kaW5nOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBleGVjdXRlKCkgewotCQl0cnkgewotCQkJYmVnaW5SZWNvcmRpbmcocG9ydC5nZXRFbGVtZW50KCkpOwotCQkJcG9ydC5zZXRFQmluZGluZyhiaW5kaW5nKTsKLQotCQkJdXBkYXRlUG9ydFByb3RvY29sKHBvcnQsIGJpbmRpbmcpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJZW5kUmVjb3JkaW5nKHBvcnQuZ2V0RWxlbWVudCgpKTsKLQkJfQotCX0KLQkKLQlwdWJsaWMgc3RhdGljIHZvaWQgdXBkYXRlUG9ydFByb3RvY29sKFBvcnQgcG9ydCwgQmluZGluZyBiaW5kaW5nKSB7Ci0JCVN0cmluZyBwb3J0QWRkcmVzcyA9IG51bGw7Ci0JCU9iamVjdCBiaW5kaW5nUHJvdG9jb2wgPSBnZXRCaW5kaW5nUHJvdG9jb2woYmluZGluZyk7Ci0JCU9iamVjdCBwb3J0UHJvdG9jb2wgPSBnZXRQb3J0UHJvdG9jb2wocG9ydCk7Ci0JCQotCQlpZiAocG9ydFByb3RvY29sIGluc3RhbmNlb2YgU09BUEFkZHJlc3MpIHsKLQkJCXBvcnRBZGRyZXNzID0gKChTT0FQQWRkcmVzcykgcG9ydFByb3RvY29sKS5nZXRMb2NhdGlvblVSSSgpOwotCQl9Ci0JCWVsc2UgaWYgKHBvcnRQcm90b2NvbCBpbnN0YW5jZW9mIEhUVFBBZGRyZXNzKSB7Ci0JCQlwb3J0QWRkcmVzcyA9ICgoSFRUUEFkZHJlc3MpIHBvcnRQcm90b2NvbCkuZ2V0TG9jYXRpb25VUkkoKTsKLQkJfQotCi0JCWlmIChwb3J0QWRkcmVzcyA9PSBudWxsKSB7Ci0JCQlwb3J0QWRkcmVzcyA9ICJodHRwOi8vd3d3LmV4YW1wbGUub3JnIjsKLQkJfQotCQkKLQkJaWYgKGJpbmRpbmdQcm90b2NvbCBpbnN0YW5jZW9mIFNPQVBCaW5kaW5nICYmICEocG9ydFByb3RvY29sIGluc3RhbmNlb2YgU09BUEFkZHJlc3MpKSB7Ci0JCQlTT0FQQWRkcmVzcyBzb2FwID0gU09BUEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNPQVBBZGRyZXNzKCk7Ci0JCQlzb2FwLnNldExvY2F0aW9uVVJJKHBvcnRBZGRyZXNzKTsKLQkJCXNldE5ld1Byb3RvY29sKHBvcnQsIHNvYXApOwotCQl9Ci0JCWVsc2UgaWYgKGJpbmRpbmdQcm90b2NvbCBpbnN0YW5jZW9mIEhUVFBCaW5kaW5nICYmICEocG9ydFByb3RvY29sIGluc3RhbmNlb2YgSFRUUEFkZHJlc3MpKSB7Ci0JCQlIVFRQQWRkcmVzcyBodHRwID0gSFRUUEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUhUVFBBZGRyZXNzKCk7Ci0JCQlodHRwLnNldExvY2F0aW9uVVJJKHBvcnRBZGRyZXNzKTsKLQkJCXNldE5ld1Byb3RvY29sKHBvcnQsIGh0dHApOwotCQl9Ci0JfQotCQotCXByaXZhdGUgc3RhdGljIE9iamVjdCBnZXRCaW5kaW5nUHJvdG9jb2woQmluZGluZyBiaW5kaW5nKSB7Ci0JCUl0ZXJhdG9yIGl0ID0gYmluZGluZy5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJT2JqZWN0IGl0ZW0gPSBpdC5uZXh0KCk7Ci0JCQlpZiAoaXRlbSBpbnN0YW5jZW9mIFNPQVBCaW5kaW5nIHx8IGl0ZW0gaW5zdGFuY2VvZiBIVFRQQmluZGluZykgewotCQkJCXJldHVybiBpdGVtOwotCQkJfQotCQl9Ci0JCQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgT2JqZWN0IGdldFBvcnRQcm90b2NvbChQb3J0IHBvcnQpIHsKLQkJCi0JCUl0ZXJhdG9yIGl0ID0gcG9ydC5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkgewotICAgICAgICAJT2JqZWN0IGl0ZW0gPSBpdC5uZXh0KCk7Ci0gICAgICAgIAlpZiAoaXRlbSBpbnN0YW5jZW9mIFNPQVBBZGRyZXNzKSB7Ci0gICAgICAgIAkJcmV0dXJuIGl0ZW07Ci0gICAgICAgIAl9Ci0gICAgICAgIAllbHNlIGlmIChpdGVtIGluc3RhbmNlb2YgSFRUUEFkZHJlc3MpIHsKLSAgICAgICAgCQlyZXR1cm4gaXRlbTsKLSAgICAgICAgCX0KLSAgICAgICAgfQkKLQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBzZXROZXdQcm90b2NvbChQb3J0IHBvcnQsIEV4dGVuc2liaWxpdHlFbGVtZW50IGVsZW1lbnQpIHsKLQkJTGlzdCBleGlzdGluZ0VsZW1lbnRzID0gcG9ydC5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0JCWZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGlzdGluZ0VsZW1lbnRzLnNpemUoKTsgaW5kZXgrKykgewotCQkJT2JqZWN0IGl0ZW0gPSBleGlzdGluZ0VsZW1lbnRzLmdldChpbmRleCk7Ci0JCQlpZiAoaXRlbSBpbnN0YW5jZW9mIFNPQVBBZGRyZXNzIHx8IGl0ZW0gaW5zdGFuY2VvZiBIVFRQQWRkcmVzcykgewotCQkJCWV4aXN0aW5nRWxlbWVudHMucmVtb3ZlKGluZGV4KTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCi0JCXBvcnQuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoZWxlbWVudCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFTZXRFbGVtZW50Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFTZXRFbGVtZW50Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDQ5ODdlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExU2V0RWxlbWVudENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5zZWFyY2guZGlhbG9ncy5Db21wb25lbnRTcGVjaWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuSW50ZXJuYWxXU0RMTXVsdGlQYWdlRWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklQYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZWRpdC5XU0RMWFNERWxlbWVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5JQ29tcG9uZW50RGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuZWRpdG9yLlhTREVsZW1lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotCi1wdWJsaWMgY2xhc3MgVzExU2V0RWxlbWVudENvbW1hbmQgZXh0ZW5kcyBXMTFUb3BMZXZlbEVsZW1lbnRDb21tYW5kIHsKLQlwcml2YXRlIFBhcnQgcGFyZW50OwotCXByaXZhdGUgU3RyaW5nIGFjdGlvbjsKLQlwcml2YXRlIGJvb2xlYW4gY29udGludWVBcHBseTsKLQotCXB1YmxpYyBXMTFTZXRFbGVtZW50Q29tbWFuZChQYXJ0IHBhcmVudCwgU3RyaW5nIGFjdGlvbikgewotICAgICAgICBzdXBlcihNZXNzYWdlcy5fVUlfQUNUSU9OX1NFVF9FTEVNRU5ULCBwYXJlbnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLQkJdGhpcy5wYXJlbnQgPSBwYXJlbnQ7Ci0JCXRoaXMuYWN0aW9uID0gYWN0aW9uOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBleGVjdXRlKCkKLQl7Ci0JCXRyeSB7Ci0JCQliZWdpblJlY29yZGluZyhkZWZpbml0aW9uLmdldEVsZW1lbnQoKSk7Ci0KLQkJCUNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIGNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyID0gZ2V0Q29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIoKTsKLQkJCWNvbnRpbnVlQXBwbHkgPSB0cnVlOyAKLQkJCWlmIChhY3Rpb24uZXF1YWxzKElQYXJhbWV0ZXIuU0VUX05FV19BQ1RJT05fSUQpKQotCQkJewotCQkJCUNvbXBvbmVudFNwZWNpZmljYXRpb24gbmV3VmFsdWUgPSAoQ29tcG9uZW50U3BlY2lmaWNhdGlvbilpbnZva2VEaWFsb2coY29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIuZ2V0TmV3RGlhbG9nKCkpOwotCi0JCQkJLy8gU2V0IHRoZSByZWZlcmVuY2UgdG8gdGhlIG5ldyB0eXBlCi0JCQkJaWYgKGNvbnRpbnVlQXBwbHkpCi0JCQkJCWNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyLm1vZGlmeUNvbXBvbmVudFJlZmVyZW5jZShwYXJlbnQsIG5ld1ZhbHVlKTsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uIG5ld1ZhbHVlID0gKENvbXBvbmVudFNwZWNpZmljYXRpb24paW52b2tlRGlhbG9nKGNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyLmdldEJyb3dzZURpYWxvZygpKTsKLQkJCQlpZiAoY29udGludWVBcHBseSkKLQkJCQkJY29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIubW9kaWZ5Q29tcG9uZW50UmVmZXJlbmNlKHBhcmVudCwgbmV3VmFsdWUpOwotCQkJfQotCQkJZm9ybWF0Q2hpbGQocGFyZW50LmdldEVsZW1lbnQoKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQllbmRSZWNvcmRpbmcoZGVmaW5pdGlvbi5nZXRFbGVtZW50KCkpOwotCQl9Ci0JfQotCQotCXByaXZhdGUgT2JqZWN0IGludm9rZURpYWxvZyhJQ29tcG9uZW50RGlhbG9nIGRpYWxvZykKLQl7Ci0JCU9iamVjdCBuZXdWYWx1ZSA9IG51bGw7Ci0JCQotCQlpZiAoZGlhbG9nID09IG51bGwpCi0JCXsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0JCQotCQlpZiAoZGlhbG9nLmNyZWF0ZUFuZE9wZW4oKSA9PSBXaW5kb3cuT0spCi0JCXsKLQkJCW5ld1ZhbHVlID0gZGlhbG9nLmdldFNlbGVjdGVkQ29tcG9uZW50KCk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQljb250aW51ZUFwcGx5ID0gZmFsc2U7Ci0JCX0KLQkJCi0JCXJldHVybiBuZXdWYWx1ZTsKLQl9Ci0JCi0JcHJvdGVjdGVkIENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIGdldENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKCkKLQl7Ci0JCUNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIHJlc3VsdCA9IG51bGw7Ci0JCUlFZGl0b3JQYXJ0IGVkaXRvciA9IEFTREVkaXRvclBsdWdpbi5nZXRBY3RpdmVFZGl0b3IoKTsKLQkJaWYgKGVkaXRvciAhPSBudWxsKQotCQl7Ci0JCQlyZXN1bHQgPSAoQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIpZWRpdG9yLmdldEFkYXB0ZXIoWFNERWxlbWVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyLmNsYXNzKTsKLQkJCQotCQkJaWYgKGVkaXRvciBpbnN0YW5jZW9mIEludGVybmFsV1NETE11bHRpUGFnZUVkaXRvcikKLQkJCXsKLQkJCQlJbnRlcm5hbFdTRExNdWx0aVBhZ2VFZGl0b3Igd3NkbEVkaXRvciA9IChJbnRlcm5hbFdTRExNdWx0aVBhZ2VFZGl0b3IpIGVkaXRvcjsKLQkJCQkKLQkJCQlMaXN0IHR5cGVzID0gd3NkbEVkaXRvci5nZXRNb2RlbCgpLmdldFR5cGVzKCk7Ci0JCQkJWFNEU2NoZW1hW10gc2NoZW1hcyA9IG5ldyBYU0RTY2hlbWFbdHlwZXMuc2l6ZSgpXTsKLQkJCQlmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgdHlwZXMuc2l6ZSgpOyBpbmRleCsrKSB7Ci0JCQkJCVcxMVR5cGUgdHlwZSA9IChXMTFUeXBlKSB0eXBlcy5nZXQoaW5kZXgpOwotCQkJCQlzY2hlbWFzW2luZGV4XSA9IChYU0RTY2hlbWEpIHR5cGUuZ2V0VGFyZ2V0KCk7Ci0JCQkJfQotCQkJCQotCQkJCSgoV1NETFhTREVsZW1lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcikgcmVzdWx0KS5zZXRTY2hlbWFzKHNjaGVtYXMpOwotCQkJCQotCQkJCXJldHVybiByZXN1bHQ7Ci0JCQl9Ci0JCX0gIAotCQlyZXR1cm4gcmVzdWx0OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExU2V0SW50ZXJmYWNlQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFTZXRJbnRlcmZhY2VDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxODgyZDUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFTZXRJbnRlcmZhY2VDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotCi1wdWJsaWMgY2xhc3MgVzExU2V0SW50ZXJmYWNlQ29tbWFuZCBleHRlbmRzIFcxMVRvcExldmVsRWxlbWVudENvbW1hbmQgewotCXByaXZhdGUgQmluZGluZyBiaW5kaW5nOwotCXByaXZhdGUgUG9ydFR5cGUgcG9ydFR5cGU7Ci0JCi0JcHVibGljIFcxMVNldEludGVyZmFjZUNvbW1hbmQoQmluZGluZyBiaW5kaW5nLCBQb3J0VHlwZSBwb3J0VHlwZSkgewotICAgICAgICBzdXBlcihNZXNzYWdlcy5fVUlfQUNUSU9OX1NFVF9QT1JUVFlQRSwgYmluZGluZy5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotCQl0aGlzLmJpbmRpbmcgPSBiaW5kaW5nOwotCQl0aGlzLnBvcnRUeXBlID0gcG9ydFR5cGU7Ci0JfQotCQotCXB1YmxpYyB2b2lkIGV4ZWN1dGUoKSB7Ci0JCXRyeSB7Ci0JCQliZWdpblJlY29yZGluZyhiaW5kaW5nLmdldEVsZW1lbnQoKSk7Ci0JCQliaW5kaW5nLnNldEVQb3J0VHlwZShwb3J0VHlwZSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQllbmRSZWNvcmRpbmcoYmluZGluZy5nZXRFbGVtZW50KCkpOwotCQl9Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExU2V0VHlwZUNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExU2V0VHlwZUNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWU4ZjYwOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL2NvbW1hbmRzL1cxMVNldFR5cGVDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuQ29tcG9uZW50U3BlY2lmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5JbnRlcm5hbFdTRExNdWx0aVBhZ2VFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5lZGl0LldTRExYU0RUeXBlUmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5Db21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0LklDb21wb25lbnREaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5lZGl0b3IuWFNEVHlwZVJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb25jcmV0ZUNvbXBvbmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotCi1wdWJsaWMgY2xhc3MgVzExU2V0VHlwZUNvbW1hbmQgZXh0ZW5kcyBXMTFUb3BMZXZlbEVsZW1lbnRDb21tYW5kIHsKLQlwcml2YXRlIE9iamVjdCBwYXJlbnQ7Ci0JcHJpdmF0ZSBTdHJpbmcgYWN0aW9uOwotCXByaXZhdGUgYm9vbGVhbiBjb250aW51ZUFwcGx5OwotCQotCXB1YmxpYyBXMTFTZXRUeXBlQ29tbWFuZChPYmplY3QgcGFyZW50LCBTdHJpbmcgYWN0aW9uKSB7Ci0gICAgICAgIHN1cGVyKE1lc3NhZ2VzLl9VSV9BQ1RJT05fU0VUX1RZUEUsIG51bGwpOwotCQl0aGlzLnBhcmVudCA9IHBhcmVudDsKLQkJdGhpcy5hY3Rpb24gPSBhY3Rpb247Ci0JfQotCQotCXB1YmxpYyB2b2lkIGV4ZWN1dGUoKQotCXsKLQkJdHJ5IHsKLQkJCWlmIChwYXJlbnQgaW5zdGFuY2VvZiBXU0RMRWxlbWVudCkgewotCQkJCWJlZ2luUmVjb3JkaW5nKCgoV1NETEVsZW1lbnQpIHBhcmVudCkuZ2V0RWxlbWVudCgpKTsKLQkJCX0KLQotCQkJQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgY29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgPSBnZXRDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcigpOwotCQkJY29udGludWVBcHBseSA9IHRydWU7IAotCQkJaWYgKGFjdGlvbi5lcXVhbHMoSVBhcmFtZXRlci5TRVRfTkVXX0FDVElPTl9JRCkpCi0JCQl7Ci0JCQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBuZXdWYWx1ZSA9IChDb21wb25lbnRTcGVjaWZpY2F0aW9uKWludm9rZURpYWxvZyhjb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlci5nZXROZXdEaWFsb2coKSk7Ci0KLQkJCQkvLyBTZXQgdGhlIHJlZmVyZW5jZSB0byB0aGUgbmV3IHR5cGUKLQkJCQlpZiAoY29udGludWVBcHBseSkKLQkJCQkJY29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIubW9kaWZ5Q29tcG9uZW50UmVmZXJlbmNlKHBhcmVudCwgbmV3VmFsdWUpOwotCQkJfQotCQkJZWxzZQotCQkJewotCQkJCUNvbXBvbmVudFNwZWNpZmljYXRpb24gbmV3VmFsdWUgPSAoQ29tcG9uZW50U3BlY2lmaWNhdGlvbilpbnZva2VEaWFsb2coY29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIuZ2V0QnJvd3NlRGlhbG9nKCkpOwotCQkJCWlmIChjb250aW51ZUFwcGx5KQotCQkJCQljb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlci5tb2RpZnlDb21wb25lbnRSZWZlcmVuY2UocGFyZW50LCBuZXdWYWx1ZSk7Ci0JCQl9Ci0KLQkJCS8vIEZvcm1hdAotCQkJaWYgKHBhcmVudCBpbnN0YW5jZW9mIFdTRExFbGVtZW50KSB7Ci0JCQkJZm9ybWF0Q2hpbGQoKChXU0RMRWxlbWVudCkgcGFyZW50KS5nZXRFbGVtZW50KCkpOwotCQkJfQotCQkJZWxzZSBpZiAocGFyZW50IGluc3RhbmNlb2YgWFNEQ29uY3JldGVDb21wb25lbnQpIHsKLQkJCQlmb3JtYXRDaGlsZCgoKFhTRENvbmNyZXRlQ29tcG9uZW50KSBwYXJlbnQpLmdldEVsZW1lbnQoKSk7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAocGFyZW50IGluc3RhbmNlb2YgV1NETEVsZW1lbnQpIHsKLQkJCQllbmRSZWNvcmRpbmcoKChXU0RMRWxlbWVudCkgcGFyZW50KS5nZXRFbGVtZW50KCkpOwotCQkJfQotCQl9Ci0JfQotCQotCXByaXZhdGUgT2JqZWN0IGludm9rZURpYWxvZyhJQ29tcG9uZW50RGlhbG9nIGRpYWxvZykKLQl7Ci0JCU9iamVjdCBuZXdWYWx1ZSA9IG51bGw7Ci0JCQotCQlpZiAoZGlhbG9nID09IG51bGwpCi0JCXsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0JCQotCQlpZiAoZGlhbG9nLmNyZWF0ZUFuZE9wZW4oKSA9PSBXaW5kb3cuT0spCi0JCXsKLQkJCW5ld1ZhbHVlID0gZGlhbG9nLmdldFNlbGVjdGVkQ29tcG9uZW50KCk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQljb250aW51ZUFwcGx5ID0gZmFsc2U7Ci0JCX0KLQkJCi0JCXJldHVybiBuZXdWYWx1ZTsKLQl9Ci0JCi0JcHJvdGVjdGVkIENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIGdldENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKCkKLQl7Ci0JCUNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIHJlc3VsdCA9IG51bGw7Ci0JCUlFZGl0b3JQYXJ0IGVkaXRvciA9IEFTREVkaXRvclBsdWdpbi5nZXRBY3RpdmVFZGl0b3IoKTsKLQkJaWYgKGVkaXRvciAhPSBudWxsKQotCQl7Ci0JCQlyZXN1bHQgPSAoQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIpZWRpdG9yLmdldEFkYXB0ZXIoWFNEVHlwZVJlZmVyZW5jZUVkaXRNYW5hZ2VyLmNsYXNzKTsKLQkJCQotCQkJaWYgKGVkaXRvciBpbnN0YW5jZW9mIEludGVybmFsV1NETE11bHRpUGFnZUVkaXRvcikKLQkJCXsKLQkJCQlJbnRlcm5hbFdTRExNdWx0aVBhZ2VFZGl0b3Igd3NkbEVkaXRvciA9IChJbnRlcm5hbFdTRExNdWx0aVBhZ2VFZGl0b3IpIGVkaXRvcjsKLQkJCQkKLQkJCQlMaXN0IHR5cGVzID0gd3NkbEVkaXRvci5nZXRNb2RlbCgpLmdldFR5cGVzKCk7Ci0JCQkJWFNEU2NoZW1hW10gc2NoZW1hcyA9IG5ldyBYU0RTY2hlbWFbdHlwZXMuc2l6ZSgpXTsKLQkJCQlmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgdHlwZXMuc2l6ZSgpOyBpbmRleCsrKSB7Ci0JCQkJCVcxMVR5cGUgdHlwZSA9IChXMTFUeXBlKSB0eXBlcy5nZXQoaW5kZXgpOwotCQkJCQlzY2hlbWFzW2luZGV4XSA9IChYU0RTY2hlbWEpIHR5cGUuZ2V0VGFyZ2V0KCk7Ci0JCQkJfQotCQkJCQotCQkJCSgoV1NETFhTRFR5cGVSZWZlcmVuY2VFZGl0TWFuYWdlcikgcmVzdWx0KS5zZXRTY2hlbWFzKHNjaGVtYXMpOwotCQkJCQotCQkJCXJldHVybiByZXN1bHQ7Ci0JCQl9Ci0JCX0gIAotCQlyZXR1cm4gcmVzdWx0OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvY29tbWFuZHMvVzExVG9wTGV2ZWxFbGVtZW50Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFUb3BMZXZlbEVsZW1lbnRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzNjliODAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9jb21tYW5kcy9XMTFUb3BMZXZlbEVsZW1lbnRDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHM7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuQ29tbW9uRW5jb2RpbmdQcmVmZXJlbmNlTmFtZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmZvcm1hdC5JU3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMudmlzaXRvci5XMTFGaW5kSW5uZXJFbGVtZW50VmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLlhNTENvcmVQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmZvcm1hdC5Gb3JtYXRQcm9jZXNzb3JYTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uUHJvY2Vzc2luZ0luc3RydWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgVzExVG9wTGV2ZWxFbGVtZW50Q29tbWFuZCBleHRlbmRzIENvbW1hbmQKLXsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhNTCA9ICJ4bWwiOyAvLyROT04tTkxTLTEkCi0gIHByb3RlY3RlZCBEZWZpbml0aW9uIGRlZmluaXRpb247Ci0KLSAgcHVibGljIFcxMVRvcExldmVsRWxlbWVudENvbW1hbmQoU3RyaW5nIGxhYmVsLCBEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICBzdXBlcihsYWJlbCk7Ci0gICAgdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjsKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgYmVnaW5SZWNvcmRpbmcoT2JqZWN0IGVsZW1lbnQpIHsKLQkgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSURPTU5vZGUpIHsKLQkJICAoKElET01Ob2RlKSBlbGVtZW50KS5nZXRNb2RlbCgpLmJlZ2luUmVjb3JkaW5nKHRoaXMsIGdldFVuZG9EZXNjcmlwdGlvbigpKTsKLQkgIH0KLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgZW5kUmVjb3JkaW5nKE9iamVjdCBlbGVtZW50KSB7Ci0JICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIElET01Ob2RlKSB7Ci0JCSAgKChJRE9NTm9kZSkgZWxlbWVudCkuZ2V0TW9kZWwoKS5lbmRSZWNvcmRpbmcodGhpcyk7Ci0JICB9Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0VW5kb0Rlc2NyaXB0aW9uKCkgewotCSAgcmV0dXJuIGdldExhYmVsKCk7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCB2b2lkIGZvcm1hdENoaWxkKEVsZW1lbnQgY2hpbGQpCi0gIHsKLSAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBJRE9NTm9kZSkKLSAgICB7Ci0gICAgICBJRE9NTW9kZWwgbW9kZWwgPSAoKElET01Ob2RlKWNoaWxkKS5nZXRNb2RlbCgpOwotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIC8vIHRlbGwgdGhlIG1vZGVsIHRoYXQgd2UgYXJlIGFib3V0IHRvIG1ha2UgYSBiaWcgbW9kZWwgY2hhbmdlCi0gICAgICAgIG1vZGVsLmFib3V0VG9DaGFuZ2VNb2RlbCgpOwotICAgICAgICAKLSAgICAgICAgSVN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IgZm9ybWF0UHJvY2Vzc29yID0gbmV3IEZvcm1hdFByb2Nlc3NvclhNTCgpOwotICAgICAgICBmb3JtYXRQcm9jZXNzb3IuZm9ybWF0Tm9kZShjaGlsZCk7Ci0gICAgICB9Ci0gICAgICBmaW5hbGx5Ci0gICAgICB7Ci0gICAgICAgIC8vIHRlbGwgdGhlIG1vZGVsIHRoYXQgd2UgYXJlIGRvbmUgd2l0aCB0aGUgYmlnIG1vZGVsIGNoYW5nZQotICAgICAgICBtb2RlbC5jaGFuZ2VkTW9kZWwoKTsgCi0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgZXhlY3V0ZSgpCi0gIHsKLSAgICBlbnN1cmVEZWZpbml0aW9uKGRlZmluaXRpb24pOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgWFNERWxlbWVudERlY2xhcmF0aW9uIGdldE5ld1hTREVsZW1lbnQoWFNERWxlbWVudERlY2xhcmF0aW9uIHhzZEVsZW1lbnQpIHsgCi0JICBXMTFGaW5kSW5uZXJFbGVtZW50VmlzaXRvciB2aXNpdG9yID0gbmV3IFcxMUZpbmRJbm5lckVsZW1lbnRWaXNpdG9yKCk7Ci0JICByZXR1cm4gdmlzaXRvci5nZXRJbm5lclhTREVsZW1lbnQoeHNkRWxlbWVudCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHZvaWQgZW5zdXJlRGVmaW5pdGlvbihEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICBEb2N1bWVudCBkb2N1bWVudCA9IGRlZmluaXRpb24uZ2V0RG9jdW1lbnQoKTsKLQotICAgIEVsZW1lbnQgZGVmaW5pdGlvbnNFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0KLSAgICBpZiAoZGVmaW5pdGlvbnNFbGVtZW50ID09IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSA9IGdldERlZmF1bHROYW1lc3BhY2UoZGVmaW5pdGlvbik7Ci0gICAgICBkZWZpbml0aW9uLnNldFFOYW1lKG5ldyBRTmFtZShudWxsLCBnZXRGaWxlTmFtZShkZWZpbml0aW9uKSkpOwotICAgICAgZGVmaW5pdGlvbi5zZXRUYXJnZXROYW1lc3BhY2UodGFyZ2V0TmFtZXNwYWNlKTsKLSAgICAgIGRlZmluaXRpb24uYWRkTmFtZXNwYWNlKCJ3c2RsIiwgV1NETENvbnN0YW50cy5XU0RMX05BTUVTUEFDRV9VUkkpOyAvLyROT04tTkxTLTEkCi0gICAgICBkZWZpbml0aW9uLnVwZGF0ZUVsZW1lbnQoKTsKLSAgICAgIC8vIE1vdmluZyB0aGVzZSBhYm92ZSB1cGRhdGVFbGVtZW50KCkgc2VlbXMgdG8gY2F1c2UgZ3JpZWYgd2l0aCB0aGUgbW9kZWwuCi0gICAgICBkZWZpbml0aW9uLmFkZE5hbWVzcGFjZSgidG5zIiwgdGFyZ2V0TmFtZXNwYWNlKTsgLy8kTk9OLU5MUy0xJAotICAgICAgZGVmaW5pdGlvbi5hZGROYW1lc3BhY2UoInhzZCIsIFdTRExDb25zdGFudHMuWFNEX05BTUVTUEFDRV9VUkkpOyAvLyROT04tTkxTLTEkCi0gICAgICBkZWZpbml0aW9uc0VsZW1lbnQgPSBkZWZpbml0aW9uLmdldEVsZW1lbnQoKTsKLSAgICB9Ci0KLSAgICBlbnN1cmVYTUxEaXJlY3RpdmUoZG9jdW1lbnQpOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBlbnN1cmVYTUxEaXJlY3RpdmUoRG9jdW1lbnQgZG9jdW1lbnQpCi0gIHsKLSAgICBpZiAoaGFzWE1MRGlyZWN0aXZlKGRvY3VtZW50KSkKLSAgICB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIE5vZGUgZmlyc3RDaGlsZCA9IGRvY3VtZW50LmdldEZpcnN0Q2hpbGQoKTsKLSAgICBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24geG1sRGVjbGFyYXRpb24gPSBnZXRYTUxEZWNsYXJhdGlvbihkb2N1bWVudCk7Ci0gICAgZG9jdW1lbnQuaW5zZXJ0QmVmb3JlKHhtbERlY2xhcmF0aW9uLCBmaXJzdENoaWxkKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBoYXNYTUxEaXJlY3RpdmUoRG9jdW1lbnQgZG9jdW1lbnQpCi0gIHsKLSAgICBOb2RlIGZpcnN0Q2hpbGQgPSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0gICAKLSAgICBpZiAoZmlyc3RDaGlsZCA9PSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGZpcnN0Q2hpbGQuZ2V0Tm9kZVR5cGUoKSAhPSBOb2RlLlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERSkKLSAgICB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIFByb2Nlc3NpbmdJbnN0cnVjdGlvbiBwcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gID0gKFByb2Nlc3NpbmdJbnN0cnVjdGlvbilmaXJzdENoaWxkOwotICAgIAotICAgIGlmICghcHJvY2Vzc2luZ0luc3RydWN0aW9uLmdldFRhcmdldCgpLmVxdWFscyhYTUwpKSAKLSAgICB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgUHJvY2Vzc2luZ0luc3RydWN0aW9uIGdldFhNTERlY2xhcmF0aW9uKERvY3VtZW50IGRvY3VtZW50KQotICB7Ci0gICAgUHJlZmVyZW5jZXMgcHJlZmVyZW5jZSA9IFhNTENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCk7Ci0gICAgU3RyaW5nIGNoYXJTZXQgPSBwcmVmZXJlbmNlLmdldFN0cmluZyhDb21tb25FbmNvZGluZ1ByZWZlcmVuY2VOYW1lcy5PVVRQVVRfQ09ERVNFVCk7Ci0gICAgaWYgKGNoYXJTZXQgPT0gbnVsbCB8fCBjaGFyU2V0LnRyaW0oKS5lcXVhbHMoIiIpKSAvLyROT04tTkxTLTEkCi0gICAgewotICAgICAgY2hhclNldCA9ICJVVEYtOCI7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgUHJvY2Vzc2luZ0luc3RydWN0aW9uIHhtbERlY2xhcmF0aW9uID0gZG9jdW1lbnQuY3JlYXRlUHJvY2Vzc2luZ0luc3RydWN0aW9uKFhNTCwgInZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIiIgKyBjaGFyU2V0ICsgIlwiIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgIHJldHVybiB4bWxEZWNsYXJhdGlvbjsKLSAgICAKLSAgfQotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0RGVmYXVsdE5hbWVzcGFjZShEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICBTdHJpbmcgbmFtZXNwYWNlID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFByZWZlcmVuY2VTdG9yZSgpLmdldFN0cmluZyhNZXNzYWdlcy5fVUlfUFJFRl9QQUdFX0RFRkFVTFRfVEFSR0VUX05BTUVTUEFDRSk7Ci0KLSAgICBpZiAoIW5hbWVzcGFjZS5lbmRzV2l0aCgiLyIpKSAvLyROT04tTkxTLTEkCi0gICAgewotICAgICAgbmFtZXNwYWNlID0gbmFtZXNwYWNlLmNvbmNhdCgiLyIpOyAvLyROT04tTkxTLTEkCi0gICAgfQotCi0gICAgbmFtZXNwYWNlICs9IGdldEZpbGVOYW1lKGRlZmluaXRpb24pICsgIi8iOyAvLyROT04tTkxTLTEkCi0KLSAgICByZXR1cm4gbmFtZXNwYWNlOwotCi0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0RmlsZU5hbWUoRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICB7Ci0gICAgU3RyaW5nIGZpbGVMb2NhdGlvbiA9IGRlZmluaXRpb24uZ2V0TG9jYXRpb24oKTsKLSAgICBJUGF0aCBmaWxlUGF0aCA9IG5ldyBQYXRoKGZpbGVMb2NhdGlvbik7Ci0gICAgcmV0dXJuIGZpbGVQYXRoLnJlbW92ZUZpbGVFeHRlbnNpb24oKS5sYXN0U2VnbWVudCgpLnRvU3RyaW5nKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvc3BlY2lhbGl6ZWQvVzExQWRkcmVzc0V4dGVuc2liaWxpdHlFbGVtZW50QWRhcHRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9zcGVjaWFsaXplZC9XMTFBZGRyZXNzRXh0ZW5zaWJpbGl0eUVsZW1lbnRBZGFwdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlYTI3OWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy9zcGVjaWFsaXplZC9XMTFBZGRyZXNzRXh0ZW5zaWJpbGl0eUVsZW1lbnRBZGFwdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuc3BlY2lhbGl6ZWQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUEFkZHJlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBBZGRyZXNzOwotCi1wdWJsaWMgY2xhc3MgVzExQWRkcmVzc0V4dGVuc2liaWxpdHlFbGVtZW50QWRhcHRlciBleHRlbmRzIFcxMUV4dGVuc2liaWxpdHlFbGVtZW50QWRhcHRlcgotewotICAvLyBUT0RPLi4uIG1ha2UgdGhpcyBjbGFzcyBhYnN0cmFjdCBhbmQgcHJvdmlkZSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbnMgaW4KLSAgLy8gU09BUCBhbmQgSFRUUCBwYWNrYWdlcy4gVGhlIFdTRExBZGFwdGVyRmFjdG9yeSBuZWVkcyB0byBrbm93IHRvIGRlbGVnYXRlIHRvIGV4dGVuc2lvbgotICAvLyBhZGFwdGVycyB0byBzdXBwb3J0IHRoZSBhZGRpdGlvbiBvZiBtb3JlIGV4dGVuc2lvbiBsYW5ndWFnZXMKLSAgLy8KLSAgcHVibGljIFN0cmluZyBnZXRMb2NhdGlvblVSSSgpCi0gIHsKLSAgICBTdHJpbmcgYWRkcmVzcyA9IG51bGw7Ci0gICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIFNPQVBBZGRyZXNzKQotICAgIHsKLSAgICAgIGFkZHJlc3MgPSAoKFNPQVBBZGRyZXNzKSB0YXJnZXQpLmdldExvY2F0aW9uVVJJKCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEhUVFBBZGRyZXNzKQotICAgIHsKLSAgICAgIGFkZHJlc3MgPSAoKEhUVFBBZGRyZXNzKSB0YXJnZXQpLmdldExvY2F0aW9uVVJJKCk7Ci0gICAgfQotICAgIHJldHVybiBhZGRyZXNzOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0TG9jYXRpb25VUkkoU3RyaW5nIGFkZHJlc3MpCi0gIHsKLSAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgU09BUEFkZHJlc3MpCi0gICAgewotICAgICAgKChTT0FQQWRkcmVzcykgdGFyZ2V0KS5zZXRMb2NhdGlvblVSSShhZGRyZXNzKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgSFRUUEFkZHJlc3MpCi0gICAgewotICAgICAgKChIVFRQQWRkcmVzcykgdGFyZ2V0KS5zZXRMb2NhdGlvblVSSShhZGRyZXNzKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvc3BlY2lhbGl6ZWQvVzExRXh0ZW5zaWJpbGl0eUVsZW1lbnRBZGFwdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL3NwZWNpYWxpemVkL1cxMUV4dGVuc2liaWxpdHlFbGVtZW50QWRhcHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZGQ0ZmI5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvc3BlY2lhbGl6ZWQvVzExRXh0ZW5zaWJpbGl0eUVsZW1lbnRBZGFwdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuc3BlY2lhbGl6ZWQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5XU0RMQmFzZUFkYXB0ZXI7Ci0KLXB1YmxpYyBjbGFzcyBXMTFFeHRlbnNpYmlsaXR5RWxlbWVudEFkYXB0ZXIgZXh0ZW5kcyBXU0RMQmFzZUFkYXB0ZXIKLXsKLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL3Zpc2l0b3IvVzExRmluZElubmVyRWxlbWVudFZpc2l0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvdmlzaXRvci9XMTFGaW5kSW5uZXJFbGVtZW50VmlzaXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOWE1MjQ4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYWRhcHRlcnMvdmlzaXRvci9XMTFGaW5kSW5uZXJFbGVtZW50VmlzaXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLnZpc2l0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERWxlbWVudERlY2xhcmF0aW9uOwotCi0vKgotICogQ2xhc3MgdXNlZCB0byBmaW5kIGFuZCByZXR1cm4gdGhlICJpbm5lciIgWFNERWxlbWVudCB3aGVuIGdpdmVuIGFuIFhTREVsZW1lbnQuCi0gKiBUaGlzIGNsYXNzIGV4dGVuZHMgVzExWFNEVmlzaXRvciB3aGljaCByZW1vdmVzIHRoZSBuZWVkIGZvciB0aGlzIGNsYXNzIHRvIHJlaW1wbGVtZW50Ci0gKiB0aGUgYWN0dWFsIHRyYXZlcnNhbCBvZiB0aGUgWFNEIE1vZGVsIHRvIGxvY2F0ZSB0aGUgaW5uZXIgWFNERWxlbWVudC4KLSAqIAotICogQnkgZGVmYXVsdCwgdGhpcyBjbGFzcyB3aWxsIGxvY2F0ZSB0aGUgaW5uZXIgWFNERWxlbWVudCBhdCBkZXB0aCAyLiAgSG93ZXZlciwgdGhpcyBkZXB0aAotICogY2FuIGJlIGNoYW5nZWQgYnkgY2FsbGluZyBzZXRFbGVtZW50RGVwdGgobmV3RGVwdGgpLgotICovCi1wdWJsaWMgY2xhc3MgVzExRmluZElubmVyRWxlbWVudFZpc2l0b3IgZXh0ZW5kcyBXMTFYU0RWaXNpdG9yIHsKLQkgIHByb3RlY3RlZCBYU0RFbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudEF0RGVwdGg7Ci0JICBwcm90ZWN0ZWQgaW50IGVsZW1lbnREZXB0aCA9IDI7Ci0JICBwcm90ZWN0ZWQgaW50IGRlcHRoID0gMTsKLQkgIAotCSAgcHVibGljIFhTREVsZW1lbnREZWNsYXJhdGlvbiBnZXRJbm5lclhTREVsZW1lbnQoWFNERWxlbWVudERlY2xhcmF0aW9uIHhzZEVsZW1lbnQpIHsKLQkJICBlbGVtZW50QXREZXB0aCA9IHhzZEVsZW1lbnQ7Ci0JCSAgZGVwdGggPSAxOwotCQkgIHZpc2l0RWxlbWVudERlY2xhcmF0aW9uKHhzZEVsZW1lbnQpOwotCQkgIAotCQkgIHJldHVybiBlbGVtZW50QXREZXB0aDsKLQkgIH0KLQkgIAotCSAgcHVibGljIHZvaWQgdmlzaXRFbGVtZW50RGVjbGFyYXRpb24oWFNERWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnQpIHsKLQkJICBpZiAoZGVwdGggPT0gZWxlbWVudERlcHRoKSB7Ci0JCQkgIGVsZW1lbnRBdERlcHRoID0gZWxlbWVudDsKLQkJICB9Ci0JCSAgZGVwdGgrKzsKLQkJICAKLQkJICBzdXBlci52aXNpdEVsZW1lbnREZWNsYXJhdGlvbihlbGVtZW50KTsKLQkgIH0KLQkgIAotCSAgcHVibGljIHZvaWQgc2V0RWxlbWVudERlcHRoKGludCBlbGVtZW50RGVwdGgpIHsKLQkJICB0aGlzLmVsZW1lbnREZXB0aCA9IGVsZW1lbnREZXB0aDsgCi0JICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL3Zpc2l0b3IvVzExWFNEVmlzaXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy92aXNpdG9yL1cxMVhTRFZpc2l0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGNlOTI0NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL3Zpc2l0b3IvVzExWFNEVmlzaXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjEyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy52aXNpdG9yOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RBdHRyaWJ1dGVEZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQXR0cmlidXRlR3JvdXBEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RBdHRyaWJ1dGVVc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbXBsZXhUeXBlQ29udGVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RFbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRElkZW50aXR5Q29uc3RyYWludERlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE1vZGVsR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE1vZGVsR3JvdXBEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0ROb3RhdGlvbkRlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RQYXJ0aWNsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEUGFydGljbGVDb250ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNpbXBsZVR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEV2lsZGNhcmQ7Ci0KLXB1YmxpYyBjbGFzcyBXMTFYU0RWaXNpdG9yCi17Ci0gIHB1YmxpYyBXMTFYU0RWaXNpdG9yKCkKLSAgewotICB9Ci0gIAotICBwcm90ZWN0ZWQgWFNEU2NoZW1hIHNjaGVtYTsKLSAgCi0gIHB1YmxpYyB2b2lkIHZpc2l0U2NoZW1hKFhTRFNjaGVtYSBzY2hlbWEpCi0gIHsKLSAgICB0aGlzLnNjaGVtYSA9IHNjaGVtYTsKLSAgICBmb3IgKEl0ZXJhdG9yIGl0ZXJhdG9yID0gc2NoZW1hLmdldEF0dHJpYnV0ZURlY2xhcmF0aW9ucygpLml0ZXJhdG9yKCk7IGl0ZXJhdG9yLmhhc05leHQoKTspCi0gICAgewotICAgICAgWFNEQXR0cmlidXRlRGVjbGFyYXRpb24gYXR0ciA9IChYU0RBdHRyaWJ1dGVEZWNsYXJhdGlvbikgaXRlcmF0b3IubmV4dCgpOwotICAgICAgdmlzaXRBdHRyaWJ1dGVEZWNsYXJhdGlvbihhdHRyKTsKLSAgICB9Ci0gICAgZm9yIChJdGVyYXRvciBpdGVyYXRvciA9IHNjaGVtYS5nZXRUeXBlRGVmaW5pdGlvbnMoKS5pdGVyYXRvcigpOyBpdGVyYXRvci5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIFhTRFR5cGVEZWZpbml0aW9uIHR5cGUgPSAoWFNEVHlwZURlZmluaXRpb24pIGl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIHZpc2l0VHlwZURlZmluaXRpb24odHlwZSk7Ci0gICAgfQotICAgIGZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSBzY2hlbWEuZ2V0RWxlbWVudERlY2xhcmF0aW9ucygpLml0ZXJhdG9yKCk7IGl0ZXJhdG9yLmhhc05leHQoKTspCi0gICAgewotICAgICAgWFNERWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnQgPSAoWFNERWxlbWVudERlY2xhcmF0aW9uKSBpdGVyYXRvci5uZXh0KCk7Ci0gICAgICB2aXNpdEVsZW1lbnREZWNsYXJhdGlvbihlbGVtZW50KTsKLSAgICB9Ci0gICAgZm9yIChJdGVyYXRvciBpdGVyYXRvciA9IHNjaGVtYS5nZXRJZGVudGl0eUNvbnN0cmFpbnREZWZpbml0aW9ucygpLml0ZXJhdG9yKCk7IGl0ZXJhdG9yLmhhc05leHQoKTspCi0gICAgewotICAgICAgWFNESWRlbnRpdHlDb25zdHJhaW50RGVmaW5pdGlvbiBpZGVudGl0eUNvbnN0cmFpbnQgPSAoWFNESWRlbnRpdHlDb25zdHJhaW50RGVmaW5pdGlvbikgaXRlcmF0b3IubmV4dCgpOwotICAgICAgdmlzaXRJZGVudGl0eUNvbnN0cmFpbnREZWZpbml0aW9uKGlkZW50aXR5Q29uc3RyYWludCk7Ci0gICAgfQotICAgIGZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSBzY2hlbWEuZ2V0TW9kZWxHcm91cERlZmluaXRpb25zKCkuaXRlcmF0b3IoKTsgaXRlcmF0b3IuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBYU0RNb2RlbEdyb3VwRGVmaW5pdGlvbiBtb2RlbEdyb3VwID0gKFhTRE1vZGVsR3JvdXBEZWZpbml0aW9uKSBpdGVyYXRvci5uZXh0KCk7Ci0gICAgICB2aXNpdE1vZGVsR3JvdXBEZWZpbml0aW9uKG1vZGVsR3JvdXApOwotICAgIH0KLSAgICBmb3IgKEl0ZXJhdG9yIGl0ZXJhdG9yID0gc2NoZW1hLmdldEF0dHJpYnV0ZUdyb3VwRGVmaW5pdGlvbnMoKS5pdGVyYXRvcigpOyBpdGVyYXRvci5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIFhTREF0dHJpYnV0ZUdyb3VwRGVmaW5pdGlvbiBhdHRyaWJ1dGVHcm91cCA9IChYU0RBdHRyaWJ1dGVHcm91cERlZmluaXRpb24pIGl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIHZpc2l0QXR0cmlidXRlR3JvdXBEZWZpbml0aW9uKGF0dHJpYnV0ZUdyb3VwKTsKLSAgICB9Ci0gICAgZm9yIChJdGVyYXRvciBpdGVyYXRvciA9IHNjaGVtYS5nZXROb3RhdGlvbkRlY2xhcmF0aW9ucygpLml0ZXJhdG9yKCk7IGl0ZXJhdG9yLmhhc05leHQoKTspCi0gICAgewotICAgICAgWFNETm90YXRpb25EZWNsYXJhdGlvbiBlbGVtZW50ID0gKFhTRE5vdGF0aW9uRGVjbGFyYXRpb24pIGl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIHZpc2l0Tm90YXRpb25EZWNsYXJhdGlvbihlbGVtZW50KTsKLSAgICB9Ci0gICAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHZpc2l0QXR0cmlidXRlRGVjbGFyYXRpb24oWFNEQXR0cmlidXRlRGVjbGFyYXRpb24gYXR0cikKLSAgewotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB2aXNpdFR5cGVEZWZpbml0aW9uKFhTRFR5cGVEZWZpbml0aW9uIHR5cGUpCi0gIHsKLSAgICBpZiAodHlwZSBpbnN0YW5jZW9mIFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uKQotICAgIHsKLSAgICAgIHZpc2l0U2ltcGxlVHlwZURlZmluaXRpb24oKFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uKXR5cGUpOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlIGluc3RhbmNlb2YgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKQotICAgIHsKLSAgICAgIHZpc2l0Q29tcGxleFR5cGVEZWZpbml0aW9uKChYU0RDb21wbGV4VHlwZURlZmluaXRpb24pdHlwZSk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB2aXNpdEVsZW1lbnREZWNsYXJhdGlvbihYU0RFbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudCkKLSAgewotICAgIGlmIChlbGVtZW50LmlzRWxlbWVudERlY2xhcmF0aW9uUmVmZXJlbmNlKCkpCi0gICAgewotICAgIH0KLSAgICBlbHNlIGlmIChlbGVtZW50LmdldEFub255bW91c1R5cGVEZWZpbml0aW9uKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICB2aXNpdFR5cGVEZWZpbml0aW9uKGVsZW1lbnQuZ2V0QW5vbnltb3VzVHlwZURlZmluaXRpb24oKSk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB2aXNpdElkZW50aXR5Q29uc3RyYWludERlZmluaXRpb24oWFNESWRlbnRpdHlDb25zdHJhaW50RGVmaW5pdGlvbiBpZGVudGl0eUNvbnN0cmFpbnQpCi0gIHsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdmlzaXRNb2RlbEdyb3VwRGVmaW5pdGlvbihYU0RNb2RlbEdyb3VwRGVmaW5pdGlvbiBtb2RlbEdyb3VwRGVmKQotICB7Ci0gICAgaWYgKCFtb2RlbEdyb3VwRGVmLmlzTW9kZWxHcm91cERlZmluaXRpb25SZWZlcmVuY2UoKSkKLSAgICB7Ci0gICAgICBpZiAobW9kZWxHcm91cERlZi5nZXRNb2RlbEdyb3VwKCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdmlzaXRNb2RlbEdyb3VwKG1vZGVsR3JvdXBEZWYuZ2V0TW9kZWxHcm91cCgpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIFhTRE1vZGVsR3JvdXAgbW9kZWxHcm91cCA9IG1vZGVsR3JvdXBEZWYuZ2V0UmVzb2x2ZWRNb2RlbEdyb3VwRGVmaW5pdGlvbigpLmdldE1vZGVsR3JvdXAoKTsKLSAgICAgIGlmIChtb2RlbEdyb3VwICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHZpc2l0TW9kZWxHcm91cChtb2RlbEdyb3VwKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdEF0dHJpYnV0ZUdyb3VwRGVmaW5pdGlvbihYU0RBdHRyaWJ1dGVHcm91cERlZmluaXRpb24gYXR0cmlidXRlR3JvdXApCi0gIHsKLSAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gYXR0cmlidXRlR3JvdXAuZ2V0Q29udGVudHMoKS5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7ICkKLSAgICB7Ci0gICAgICBPYmplY3QgbyA9IGl0Lm5leHQoKTsKLSAgICAgIGlmIChvIGluc3RhbmNlb2YgWFNEQXR0cmlidXRlVXNlKQotICAgICAgewotICAgICAgICBYU0RBdHRyaWJ1dGVVc2UgYXR0clVzZSA9IChYU0RBdHRyaWJ1dGVVc2UpbzsKLSAgICAgICAgdmlzaXRBdHRyaWJ1dGVEZWNsYXJhdGlvbihhdHRyVXNlLmdldENvbnRlbnQoKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChvIGluc3RhbmNlb2YgWFNEQXR0cmlidXRlR3JvdXBEZWZpbml0aW9uKQotICAgICAgewotICAgICAgICBYU0RBdHRyaWJ1dGVHcm91cERlZmluaXRpb24gYXR0ckdyb3VwID0gKFhTREF0dHJpYnV0ZUdyb3VwRGVmaW5pdGlvbilvOwotICAgICAgICB2aXNpdEF0dHJpYnV0ZUdyb3VwRGVmaW5pdGlvbihhdHRyR3JvdXApOwotICAgICAgfQotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgdmlzaXROb3RhdGlvbkRlY2xhcmF0aW9uKFhTRE5vdGF0aW9uRGVjbGFyYXRpb24gbm90YXRpb24pCi0gIHsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdmlzaXRTaW1wbGVUeXBlRGVmaW5pdGlvbihYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbiB0eXBlKQotICB7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHZpc2l0Q29tcGxleFR5cGVEZWZpbml0aW9uKFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiB0eXBlKQotICB7Ci0gICAgaWYgKHR5cGUuZ2V0Q29udGVudCgpICE9IG51bGwpCi0gICAgewotICAgICAgWFNEQ29tcGxleFR5cGVDb250ZW50IGNvbXBsZXhDb250ZW50ID0gdHlwZS5nZXRDb250ZW50KCk7Ci0gICAgICBpZiAoY29tcGxleENvbnRlbnQgaW5zdGFuY2VvZiBYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbikKLSAgICAgIHsKLSAgICAgICAgdmlzaXRTaW1wbGVUeXBlRGVmaW5pdGlvbigoWFNEU2ltcGxlVHlwZURlZmluaXRpb24pY29tcGxleENvbnRlbnQpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoY29tcGxleENvbnRlbnQgaW5zdGFuY2VvZiBYU0RQYXJ0aWNsZSkKLSAgICAgIHsKLSAgICAgICAgdmlzaXRQYXJ0aWNsZSgoWFNEUGFydGljbGUpIGNvbXBsZXhDb250ZW50KTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHZpc2l0UGFydGljbGUoWFNEUGFydGljbGUgcGFydGljbGUpCi0gIHsKLSAgICB2aXNpdFBhcnRpY2xlQ29udGVudChwYXJ0aWNsZS5nZXRDb250ZW50KCkpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB2aXNpdFBhcnRpY2xlQ29udGVudChYU0RQYXJ0aWNsZUNvbnRlbnQgcGFydGljbGVDb250ZW50KQotICB7Ci0gICAgaWYgKHBhcnRpY2xlQ29udGVudCBpbnN0YW5jZW9mIFhTRE1vZGVsR3JvdXBEZWZpbml0aW9uKQotICAgIHsKLSAgICAgIHZpc2l0TW9kZWxHcm91cERlZmluaXRpb24oKFhTRE1vZGVsR3JvdXBEZWZpbml0aW9uKSBwYXJ0aWNsZUNvbnRlbnQpOwotICAgIH0KLSAgICBlbHNlIGlmIChwYXJ0aWNsZUNvbnRlbnQgaW5zdGFuY2VvZiBYU0RNb2RlbEdyb3VwKQotICAgIHsKLSAgICAgIHZpc2l0TW9kZWxHcm91cCgoWFNETW9kZWxHcm91cClwYXJ0aWNsZUNvbnRlbnQpOwotICAgIH0KLSAgICBlbHNlIGlmIChwYXJ0aWNsZUNvbnRlbnQgaW5zdGFuY2VvZiBYU0RFbGVtZW50RGVjbGFyYXRpb24pCi0gICAgewotICAgICAgdmlzaXRFbGVtZW50RGVjbGFyYXRpb24oKFhTREVsZW1lbnREZWNsYXJhdGlvbilwYXJ0aWNsZUNvbnRlbnQpOwotICAgIH0KLSAgICBlbHNlIGlmIChwYXJ0aWNsZUNvbnRlbnQgaW5zdGFuY2VvZiBYU0RXaWxkY2FyZCkKLSAgICB7Ci0gICAgICB2aXNpdFdpbGRjYXJkKChYU0RXaWxkY2FyZClwYXJ0aWNsZUNvbnRlbnQpOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgdmlzaXRNb2RlbEdyb3VwKFhTRE1vZGVsR3JvdXAgbW9kZWxHcm91cCkKLSAgewotICAgIGlmIChtb2RlbEdyb3VwLmdldENvbnRlbnRzKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGl0ZXJhdG9yID0gbW9kZWxHcm91cC5nZXRDb250ZW50cygpLml0ZXJhdG9yKCk7IGl0ZXJhdG9yLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIFhTRFBhcnRpY2xlIHBhcnRpY2xlID0gKFhTRFBhcnRpY2xlKSBpdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgIHZpc2l0UGFydGljbGUocGFydGljbGUpOwotICAgICAgfQotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgdmlzaXRXaWxkY2FyZChYU0RXaWxkY2FyZCB3aWxkY2FyZCkKLSAgewotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL3Zpc2l0b3IvVzExWFNEVmlzaXRvckZvckZpZWxkcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hZGFwdGVycy92aXNpdG9yL1cxMVhTRFZpc2l0b3JGb3JGaWVsZHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDJlNmRkNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FkYXB0ZXJzL3Zpc2l0b3IvVzExWFNEVmlzaXRvckZvckZpZWxkcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy52aXNpdG9yOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREF0dHJpYnV0ZURlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RBdHRyaWJ1dGVHcm91cENvbnRlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREF0dHJpYnV0ZUdyb3VwRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQXR0cmlidXRlVXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wbGV4VHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETW9kZWxHcm91cDsKLQotcHVibGljIGNsYXNzIFcxMVhTRFZpc2l0b3JGb3JGaWVsZHMgZXh0ZW5kcyBXMTFYU0RWaXNpdG9yCi17Ci0gIHB1YmxpYyBXMTFYU0RWaXNpdG9yRm9yRmllbGRzKCkKLSAgewotICB9Ci0KLSAgTGlzdCBjb25jcmV0ZUNvbXBvbmVudExpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIExpc3QgdGhpbmdzV2VOZWVkVG9MaXN0ZW5UbyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgCi0gIHB1YmxpYyB2b2lkIHZpc2l0Q29tcGxleFR5cGVEZWZpbml0aW9uKFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiB0eXBlKQotICB7Ci0gICAgc3VwZXIudmlzaXRDb21wbGV4VHlwZURlZmluaXRpb24odHlwZSk7Ci0gICAgaWYgKHR5cGUuZ2V0QXR0cmlidXRlQ29udGVudHMoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIGZvciAoSXRlcmF0b3IgaXRlciA9IHR5cGUuZ2V0QXR0cmlidXRlQ29udGVudHMoKS5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTsgKQotICAgICAgewotICAgICAgICBYU0RBdHRyaWJ1dGVHcm91cENvbnRlbnQgYXR0ckdyb3VwQ29udGVudCA9IChYU0RBdHRyaWJ1dGVHcm91cENvbnRlbnQpaXRlci5uZXh0KCk7Ci0gICAgICAgIGlmIChhdHRyR3JvdXBDb250ZW50IGluc3RhbmNlb2YgWFNEQXR0cmlidXRlVXNlKQotICAgICAgICB7Ci0gICAgICAgICAgWFNEQXR0cmlidXRlVXNlIGF0dHJVc2UgPSAoWFNEQXR0cmlidXRlVXNlKWF0dHJHcm91cENvbnRlbnQ7Ci0gICAgICAgICAgY29uY3JldGVDb21wb25lbnRMaXN0LmFkZChhdHRyVXNlKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChhdHRyR3JvdXBDb250ZW50IGluc3RhbmNlb2YgWFNEQXR0cmlidXRlR3JvdXBEZWZpbml0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgWFNEQXR0cmlidXRlR3JvdXBEZWZpbml0aW9uIGF0dHJHcm91cCA9IChYU0RBdHRyaWJ1dGVHcm91cERlZmluaXRpb24pYXR0ckdyb3VwQ29udGVudDsKLSAgICAgICAgICB0aGluZ3NXZU5lZWRUb0xpc3RlblRvLmFkZChhdHRyR3JvdXApOwotICAgICAgICAgIHZpc2l0QXR0cmlidXRlR3JvdXBEZWZpbml0aW9uKGF0dHJHcm91cCk7ICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIAotICAKLSAgcHVibGljIHZvaWQgdmlzaXRNb2RlbEdyb3VwKFhTRE1vZGVsR3JvdXAgbW9kZWxHcm91cCkKLSAgewotICAgIHN1cGVyLnZpc2l0TW9kZWxHcm91cChtb2RlbEdyb3VwKTsKLSAgICB0aGluZ3NXZU5lZWRUb0xpc3RlblRvLmFkZChtb2RlbEdyb3VwKTsgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHZpc2l0QXR0cmlidXRlR3JvdXBEZWZpbml0aW9uKFhTREF0dHJpYnV0ZUdyb3VwRGVmaW5pdGlvbiBhdHRyaWJ1dGVHcm91cCkKLSAgewotICAgIGZvciAoSXRlcmF0b3IgaXQgPSBhdHRyaWJ1dGVHcm91cC5nZXRDb250ZW50cygpLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTsgKQotICAgIHsKLSAgICAgIE9iamVjdCBvID0gaXQubmV4dCgpOwotICAgICAgaWYgKG8gaW5zdGFuY2VvZiBYU0RBdHRyaWJ1dGVVc2UpCi0gICAgICB7Ci0gICAgICAgIFhTREF0dHJpYnV0ZVVzZSBhdHRyaWJ1dGVVc2UgPSAoWFNEQXR0cmlidXRlVXNlKW87Ci0gICAgICAgIGNvbmNyZXRlQ29tcG9uZW50TGlzdC5hZGQoYXR0cmlidXRlVXNlKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKG8gaW5zdGFuY2VvZiBYU0RBdHRyaWJ1dGVHcm91cERlZmluaXRpb24pCi0gICAgICB7Ci0gICAgICAgIFhTREF0dHJpYnV0ZUdyb3VwRGVmaW5pdGlvbiBhdHRyR3JvdXAgPSAoWFNEQXR0cmlidXRlR3JvdXBEZWZpbml0aW9uKW87Ci0gICAgICAgIHRoaW5nc1dlTmVlZFRvTGlzdGVuVG8uYWRkKGF0dHJHcm91cCk7Ci0gICAgICAgIGlmIChhdHRyR3JvdXAuaXNBdHRyaWJ1dGVHcm91cERlZmluaXRpb25SZWZlcmVuY2UoKSkKLSAgICAgICAgewotICAgICAgICAgIGF0dHJHcm91cCA9IGF0dHJHcm91cC5nZXRSZXNvbHZlZEF0dHJpYnV0ZUdyb3VwRGVmaW5pdGlvbigpOwotICAgICAgICAgIHZpc2l0QXR0cmlidXRlR3JvdXBEZWZpbml0aW9uKGF0dHJHcm91cCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdEVsZW1lbnREZWNsYXJhdGlvbihYU0RFbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudCkKLSAgewotICAgIC8vc3VwZXIudmlzaXRFbGVtZW50RGVjbGFyYXRpb24oZWxlbWVudCk7Ci0gICAgY29uY3JldGVDb21wb25lbnRMaXN0LmFkZChlbGVtZW50KTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdmlzaXRBdHRyaWJ1dGVEZWNsYXJhdGlvbihYU0RBdHRyaWJ1dGVEZWNsYXJhdGlvbiBhdHRyKQotICB7Ci0gICAgc3VwZXIudmlzaXRBdHRyaWJ1dGVEZWNsYXJhdGlvbihhdHRyKTsKLSAgICBjb25jcmV0ZUNvbXBvbmVudExpc3QuYWRkKGF0dHIpOwotICB9Ci0KLQotICBwdWJsaWMgTGlzdCBnZXRDb25jcmV0ZUNvbXBvbmVudExpc3QoKQotICB7Ci0gICAgcmV0dXJuIGNvbmNyZXRlQ29tcG9uZW50TGlzdDsKLSAgfQotCi0KLSAgcHVibGljIExpc3QgZ2V0VGhpbmdzV2VOZWVkVG9MaXN0ZW5UbygpCi0gIHsKLSAgICByZXR1cm4gdGhpbmdzV2VOZWVkVG9MaXN0ZW5UbzsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Q1ODdjMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZEJhc2VQYXJhbWV0ZXJDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5mb3JtYXQuSVN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk91dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuQ29tcG9uZW50UmVmZXJlbmNlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLk5hbWVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuWFNEQ29tcG9uZW50SGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5mb3JtYXQuRm9ybWF0UHJvY2Vzc29yWE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wbGV4VHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETW9kZWxHcm91cDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETmFtZWRDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFBhcnRpY2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNpbXBsZVR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQgewotCXB1YmxpYyBzdGF0aWMgaW50IFBBUlRfRUxFTUVOVF9TRVFfRUxFTUVOVCAgICAgPSAwOwotCXB1YmxpYyBzdGF0aWMgaW50IFBBUlRfRUxFTUVOVCAgICAgICAgICAgICAgICAgPSAxOwotCXB1YmxpYyBzdGF0aWMgaW50IFBBUlRfQ09NUExFWFRZUEVfU0VRX0VMRU1FTlQgPSAyOwotCXB1YmxpYyBzdGF0aWMgaW50IFBBUlRfQ09NUExFWFRZUEUgICAgICAgICAgICAgPSAzOwotCXB1YmxpYyBzdGF0aWMgaW50IFBBUlRfU0lNUExFVFlQRQkJCSAgID0gNDsKLQotCXByb3RlY3RlZCBpbnQgc3R5bGUgPSAwOwotCXByb3RlY3RlZCBPcGVyYXRpb24gb3BlcmF0aW9uOwotCXByb3RlY3RlZCBYU0RFbGVtZW50RGVjbGFyYXRpb24gbmV3WFNERWxlbWVudDsKLQlwcm90ZWN0ZWQgUGFydCBuZXdQYXJ0OwotCQotCXByb3RlY3RlZCBTdHJpbmcgbmV3QW5vbnltb3VzWFNERWxlbWVudE5hbWU7Ci0JcHJvdGVjdGVkIFN0cmluZyBuZXdYU0RFbGVtZW50TmFtZTsKLQlwcm90ZWN0ZWQgU3RyaW5nIG5ld1dTRExNZXNzYWdlTmFtZTsKLQlwcm90ZWN0ZWQgU3RyaW5nIG5ld1dTRExQYXJ0TmFtZTsKLQkKLQlwdWJsaWMgYWJzdHJhY3Qgdm9pZCBydW4oKTsKLQlwdWJsaWMgYWJzdHJhY3QgTWVzc2FnZVJlZmVyZW5jZSBnZXRNZXNzYWdlUmVmZXJlbmNlKCk7Ci0JCi0JcHVibGljIEFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kKE9wZXJhdGlvbiBvcGVyYXRpb24sIGludCBzdHlsZSkgewotCQl0aGlzLm9wZXJhdGlvbiA9IG9wZXJhdGlvbjsKLQkJdGhpcy5zdHlsZSA9IHN0eWxlOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRTdHlsZShpbnQgc3R5bGUpIHsKLQkJdGhpcy5zdHlsZSA9IHN0eWxlOwotCX0KLQkKLQlwdWJsaWMgWFNERWxlbWVudERlY2xhcmF0aW9uIGdldFhTREVsZW1lbnREZWNsYXJhdGlvbigpIHsKLQkJcmV0dXJuIG5ld1hTREVsZW1lbnQ7Ci0JfQotCQotCXByb3RlY3RlZCBib29sZWFuIGlzUGFydEVsZW1lbnRSZWZlcmVuY2UoKSB7Ci0JCWlmIChzdHlsZSA9PSBQQVJUX0VMRU1FTlQgfHwgc3R5bGUgPT0gUEFSVF9FTEVNRU5UX1NFUV9FTEVNRU5UKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQkKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQkKLQlwcm90ZWN0ZWQgWFNERWxlbWVudERlY2xhcmF0aW9uIGNyZWF0ZVBhcnRFbGVtZW50U2VxRWxlbWVudFBhdHRlcm4oUGFydCBwYXJ0LCBYU0RFbGVtZW50RGVjbGFyYXRpb24gcGFydEVsZW1lbnQpIHsKLQkJWFNERWxlbWVudERlY2xhcmF0aW9uIHJldHVybmVkWFNERWxlbWVudCA9IG51bGw7Ci0JCQotCQlYU0RFbGVtZW50RGVjbGFyYXRpb24gb3JpZ2luYWxFbGVtZW50ID0gbnVsbDsKLQkJWFNERWxlbWVudERlY2xhcmF0aW9uIGFub25YU0RFbGVtZW50ID0gbnVsbDsKLQkJCi0JCS8vIENyZWF0ZSB0aGUgWFNERWxlbWVudCAoYW5vbnltb3VzKSByZWZlcmVuY2VkIGJ5IHRoZSBQYXJ0IGlmIG5lY2Vzc2FyeQotCQlpZiAocGFydEVsZW1lbnQgPT0gbnVsbCB8fCBwYXJ0RWxlbWVudC5nZXRBbm9ueW1vdXNUeXBlRGVmaW5pdGlvbigpID09IG51bGwgfHwgcGFydEVsZW1lbnQuZ2V0U2NoZW1hKCkgPT0gbnVsbCkgewotCQkJYW5vblhTREVsZW1lbnQgPSBYU0RDb21wb25lbnRIZWxwZXIuY3JlYXRlQW5vbnltb3VzWFNERWxlbWVudERlZmluaXRpb24oZ2V0QW5vbnltb3VzWFNERWxlbWVudEJhc2VOYW1lKCksIHBhcnQpOwotLy8JCQlwYXJ0LnNldEVsZW1lbnREZWNsYXJhdGlvbihhbm9uWFNERWxlbWVudCk7Ci0JCQlTdHJpbmcgcHJlZml4ZWROYW1lID0gZ2V0UHJlZml4ZWRDb21wb25lbnROYW1lKHBhcnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLCBhbm9uWFNERWxlbWVudCk7Ci0JCQlDb21wb25lbnRSZWZlcmVuY2VVdGlsLnNldENvbXBvbmVudFJlZmVyZW5jZShwYXJ0LCBmYWxzZSwgcHJlZml4ZWROYW1lKTsKLQkJCXBhcnQuc2V0VHlwZURlZmluaXRpb24obnVsbCk7Ci0JCQkKLQkJCWlmIChwYXJ0RWxlbWVudCAhPSBudWxsICYmIHBhcnRFbGVtZW50LmdldFNjaGVtYSgpICE9IG51bGwpIHsKLQkJCQlvcmlnaW5hbEVsZW1lbnQgPSBwYXJ0RWxlbWVudDsKLQkJCQkvLyBSZW1vdmUgdGhlICdvcmlnaW5hbCcgWFNERWxlbWVudCBhcyBhIEdsb2JhbCBFbGVtZW50Ci0JCQkJcGFydEVsZW1lbnQuZ2V0U2NoZW1hKCkuZ2V0Q29udGVudHMoKS5yZW1vdmUocGFydEVsZW1lbnQpOwotCQkJfQotCQl9Ci0JCWVsc2UgewotCQkJYW5vblhTREVsZW1lbnQgPSBwYXJ0RWxlbWVudDsKLQkJfQotCQkKLQkJLy8gQWRkIHRoZSAnb3JpZ2luYWwnIFhTREVsZW1lbnQgaWYgaXQncyB0eXBlIHdhc24ndCBhbm9ueW1vdXMKLQkJaWYgKG9yaWdpbmFsRWxlbWVudCAhPSBudWxsKSB7Ci0JCQlYU0RDb21wb25lbnRIZWxwZXIuYWRkWFNERWxlbWVudFRvTW9kZWxHcm91cChhbm9uWFNERWxlbWVudCwgb3JpZ2luYWxFbGVtZW50KTsKLQkJfQotCQkKLQkJLy8gQ3JlYXRlIGEgbmV3IFhTREVsZW1lbnQKLQkJWFNETW9kZWxHcm91cCBtb2RlbEdyb3VwID0gWFNEQ29tcG9uZW50SGVscGVyLmdldFhTRE1vZGVsR3JvdXAoYW5vblhTREVsZW1lbnQsIHBhcnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLQkJcmV0dXJuZWRYU0RFbGVtZW50ID0gWFNEQ29tcG9uZW50SGVscGVyLmNyZWF0ZVhTREVsZW1lbnREZWNsYXJhdGlvbkNvbW1hbmQobnVsbCwgZ2V0TmV3WFNERWxlbWVudEJhc2VOYW1lKCksIG1vZGVsR3JvdXApOwotCQkKLQkJLy8gQWRkIHRoZSBuZXdseSBjcmVhdGVkIFhTREVsZW1lbnQgdG8gdGhlIE1vZGVsR3JvdXAKLQkJWFNEQ29tcG9uZW50SGVscGVyLmFkZFhTREVsZW1lbnRUb01vZGVsR3JvdXAoYW5vblhTREVsZW1lbnQsIHJldHVybmVkWFNERWxlbWVudCk7Ci0KLQkJZm9ybWF0Q2hpbGQoYW5vblhTREVsZW1lbnQuZ2V0RWxlbWVudCgpKTsKLQkJcmV0dXJuIHJldHVybmVkWFNERWxlbWVudDsKLQl9Ci0JCi0JcHJvdGVjdGVkIFhTREVsZW1lbnREZWNsYXJhdGlvbiBjcmVhdGVQYXJ0RWxlbWVudFJlZmVyZW5jZUNvbXBvbmVudHMoUGFydCBwYXJ0KSB7Ci0JCVhTREVsZW1lbnREZWNsYXJhdGlvbiByZXR1cm5lZFhTREVsZW1lbnQgPSBudWxsOwotCQlYU0RFbGVtZW50RGVjbGFyYXRpb24gcGFydEVsZW1lbnQgPSBwYXJ0LmdldEVsZW1lbnREZWNsYXJhdGlvbigpOwotCQkKLQkJaWYgKHN0eWxlID09IFBBUlRfRUxFTUVOVF9TRVFfRUxFTUVOVCkgewotCQkJcmV0dXJuZWRYU0RFbGVtZW50ID0gY3JlYXRlUGFydEVsZW1lbnRTZXFFbGVtZW50UGF0dGVybihwYXJ0LCBwYXJ0RWxlbWVudCk7Ci0JCX0KLQkJZWxzZSBpZiAoc3R5bGUgPT0gUEFSVF9FTEVNRU5UKSB7Ci0JCQlpZiAocGFydEVsZW1lbnQgPT0gbnVsbCkgewotCQkJCXJldHVybmVkWFNERWxlbWVudCA9IFhTRENvbXBvbmVudEhlbHBlci5jcmVhdGVYU0RFbGVtZW50RGVjbGFyYXRpb25Db21tYW5kKHBhcnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLCBnZXROZXdYU0RFbGVtZW50QmFzZU5hbWUoKSwgcGFydCk7Ci0JCQkJaWYgKHJldHVybmVkWFNERWxlbWVudCAhPSBudWxsICYmICFyZXR1cm5lZFhTREVsZW1lbnQuZXF1YWxzKHBhcnQuZ2V0RWxlbWVudERlY2xhcmF0aW9uKCkpKSB7Ci0vLwkJCQkJcGFydC5zZXRFbGVtZW50RGVjbGFyYXRpb24ocmV0dXJuZWRYU0RFbGVtZW50KTsKLQkJCQkJU3RyaW5nIHByZWZpeGVkTmFtZSA9IGdldFByZWZpeGVkQ29tcG9uZW50TmFtZShwYXJ0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSwgcmV0dXJuZWRYU0RFbGVtZW50KTsKLQkJCQkJQ29tcG9uZW50UmVmZXJlbmNlVXRpbC5zZXRDb21wb25lbnRSZWZlcmVuY2UocGFydCwgZmFsc2UsIHByZWZpeGVkTmFtZSk7Ci0JCQkJfQotCQkJfQotCQkJZWxzZSB7Ci0JCQkJcmV0dXJuZWRYU0RFbGVtZW50ID0gY3JlYXRlUGFydEVsZW1lbnRTZXFFbGVtZW50UGF0dGVybihwYXJ0LCBwYXJ0RWxlbWVudCk7Ci0JCQl9Ci0JCX0KLQkJCi0JCXJldHVybiByZXR1cm5lZFhTREVsZW1lbnQ7Ci0JfQotCQotCXByb3RlY3RlZCBYU0RFbGVtZW50RGVjbGFyYXRpb24gY3JlYXRlUGFydENvbXBsZXhUeXBlUmVmZXJlbmNlKFBhcnQgcGFydCkgewotCQlYU0RFbGVtZW50RGVjbGFyYXRpb24gcmV0dXJuZWRYU0RFbGVtZW50ID0gbnVsbDsKLQkJCi0JCWlmIChzdHlsZSA9PSBQQVJUX0NPTVBMRVhUWVBFX1NFUV9FTEVNRU5UKSB7Ci0JCQlYU0RUeXBlRGVmaW5pdGlvbiBvcmlnaW5hbFR5cGUgPSBudWxsOwotCQkJWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uIHRvcExldmVsVHlwZSA9IG51bGw7Ci0JCQkKLQkJCS8vIENyZWF0ZSB0aGUgQ29tcGxleFR5cGUgcmVmZXJlbmNlZCBieSB0aGUgUGFydCBpZiBuZWNlc3NhcnkKLQkJCWlmIChwYXJ0LmdldFR5cGVEZWZpbml0aW9uKCkgPT0gbnVsbCB8fCBwYXJ0LmdldFR5cGVEZWZpbml0aW9uKCkgaW5zdGFuY2VvZiBYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbikgewotCQkJCVhTRFNjaGVtYSBzY2hlbWEgPSBYU0RDb21wb25lbnRIZWxwZXIuZ2V0WFNEU2NoZW1hKHBhcnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLQkJCQlTdHJpbmcgdG9wTGV2ZWxOYW1lID0gTmFtZVV0aWwuZ2V0WFNEQ29tcGxleFR5cGVOYW1lKHBhcnQuZ2V0TmFtZSgpLCBzY2hlbWEpOwotCQkJCXRvcExldmVsVHlwZSA9IFhTRENvbXBvbmVudEhlbHBlci5jcmVhdGVYU0RDb21wbGV4VHlwZURlZmluaWlvbih0b3BMZXZlbE5hbWUsIHBhcnQpOwotCQkJCQotCQkJCWlmIChwYXJ0LmdldFR5cGVEZWZpbml0aW9uKCkgaW5zdGFuY2VvZiBYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbikgewotCQkJCQlvcmlnaW5hbFR5cGUgPSBwYXJ0LmdldFR5cGVEZWZpbml0aW9uKCk7Ci0JCQkJfQotCQkJfQotCQkJZWxzZSBpZiAocGFydC5nZXRUeXBlRGVmaW5pdGlvbigpIGluc3RhbmNlb2YgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKXsKLQkJCQl0b3BMZXZlbFR5cGUgPSAoWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKSBwYXJ0LmdldFR5cGVEZWZpbml0aW9uKCk7Ci0JCQl9CQkJCi0JCQkKLQkJCS8vIENyZWF0ZSBhIG5ldyBYU0RFbGVtZW50Ci0JCQlYU0RNb2RlbEdyb3VwIG1vZGVsR3JvdXAgPSBYU0RDb21wb25lbnRIZWxwZXIuZ2V0WFNETW9kZWxHcm91cCh0b3BMZXZlbFR5cGUpOwotCQkJcmV0dXJuZWRYU0RFbGVtZW50ID0gWFNEQ29tcG9uZW50SGVscGVyLmNyZWF0ZVhTREVsZW1lbnREZWNsYXJhdGlvbkNvbW1hbmQobnVsbCwgZ2V0TmV3WFNERWxlbWVudEJhc2VOYW1lKCksIG1vZGVsR3JvdXApOwotCQkJCi0JCQkvLyBBZGQgdGhlICdvcmlnaW5hbCcgWFNERWxlbWVudCBpZiBpdCdzIHR5cGUgd2Fzbid0IGFub255bW91cwotCQkJaWYgKG9yaWdpbmFsVHlwZSAhPSBudWxsKSB7Ci0JCQkJLy8gQ3JlYXRlIGFub3RoZXIgbmV3IFhTREVsZW1lbnQgdG8gJ2NvbnRhaW4nIHRoZSBvcmlnaW5hbGx5IHJlZmVyZW5jZWQgWFNEU2ltcGxlVHlwZQotCQkJCVhTREVsZW1lbnREZWNsYXJhdGlvbiBvcmlnWFNERWxlbWVudCA9IFhTRENvbXBvbmVudEhlbHBlci5jcmVhdGVYU0RFbGVtZW50RGVjbGFyYXRpb25Db21tYW5kKG51bGwsIGdldE5ld1hTREVsZW1lbnRCYXNlTmFtZSgpLCBtb2RlbEdyb3VwKTsKLQkJCQlvcmlnWFNERWxlbWVudC5zZXRUeXBlRGVmaW5pdGlvbihvcmlnaW5hbFR5cGUpOwotCQkJfQotCQkJCi0JCQkvLyBDaGFuZ2UgUGFydCByZWZlcmVuY2UKLS8vCQkJcGFydC5zZXRUeXBlRGVmaW5pdGlvbih0b3BMZXZlbFR5cGUpOwotCQkJU3RyaW5nIHByZWZpeGVkTmFtZSA9IGdldFByZWZpeGVkQ29tcG9uZW50TmFtZShwYXJ0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSwgdG9wTGV2ZWxUeXBlKTsKLQkJCUNvbXBvbmVudFJlZmVyZW5jZVV0aWwuc2V0Q29tcG9uZW50UmVmZXJlbmNlKHBhcnQsIHRydWUsIHByZWZpeGVkTmFtZSk7Ci0JCQlmb3JtYXRDaGlsZCh0b3BMZXZlbFR5cGUuZ2V0RWxlbWVudCgpKTsKLQkJfQotCQllbHNlIGlmIChzdHlsZSA9PSBQQVJUX0NPTVBMRVhUWVBFKSB7Ci0JCQlYU0RDb21wbGV4VHlwZURlZmluaXRpb24gY29tcGxleFR5cGUgPSBudWxsOwotCQkJaWYgKHBhcnQuZ2V0VHlwZURlZmluaXRpb24oKSA9PSBudWxsKSB7Ci0JCQkJLy8gQ3JlYXRlIGEgbmV3IENvbXBsZXhUeXBlCi0JCQkJWFNEU2NoZW1hIHNjaGVtYSA9IFhTRENvbXBvbmVudEhlbHBlci5nZXRYU0RTY2hlbWEocGFydC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotCQkJCVN0cmluZyBjb21wbGV4TmFtZSA9IE5hbWVVdGlsLmdldFhTRENvbXBsZXhUeXBlTmFtZShwYXJ0LmdldE5hbWUoKSwgc2NoZW1hKTsKLQkJCQljb21wbGV4VHlwZSA9IFhTRENvbXBvbmVudEhlbHBlci5jcmVhdGVYU0RDb21wbGV4VHlwZURlZmluaWlvbihjb21wbGV4TmFtZSwgcGFydCk7Ci0JCQkJCi0JCQkJLy8gQ3JlYXRlIGFuIFhTREVsZW1lbnQgZm9yIHRoZSBDb21wbGV4VHlwZQotCQkJCVhTRE1vZGVsR3JvdXAgeHNkTW9kZWxHcm91cCA9IFhTRENvbXBvbmVudEhlbHBlci5nZXRYU0RNb2RlbEdyb3VwKGNvbXBsZXhUeXBlKTsKLQkJCQlyZXR1cm5lZFhTREVsZW1lbnQgPSBYU0RDb21wb25lbnRIZWxwZXIuY3JlYXRlWFNERWxlbWVudERlY2xhcmF0aW9uQ29tbWFuZChudWxsLCBnZXROZXdYU0RFbGVtZW50QmFzZU5hbWUoKSwgeHNkTW9kZWxHcm91cCk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQkvLyBUT0RPOiBXaGF0IHNob3VsZCB3ZSBkbyBoZXJlLi4uLi4gIFdlIGNhbiBkZWZhdWx0IHRvIHRoZSBQQVJUX0VMRU1FTlRfU0VRX0VMRU1FTlQgc3R5bGUKLQkJCQkvLyBzaW5jZSBpdCBoYW5kbGVzICdtdWx0aXBsZScgWFNERWxlbWVudHMuLi4uIE9SIC4uLi4uIHdlIGNhbiAnb3ZlcndyaXRlIGFuZCBzZXQgYSBuZXcKLQkJCQkvLyBYU0RFbGVtZW50Ci0JCQl9Ci0JCQkKLQkJCWlmIChjb21wbGV4VHlwZSAhPSBudWxsICYmICFjb21wbGV4VHlwZS5lcXVhbHMocGFydC5nZXRUeXBlRGVmaW5pdGlvbigpKSkgewotLy8JCQkJcGFydC5zZXRUeXBlRGVmaW5pdGlvbihjb21wbGV4VHlwZSk7Ci0JCQkJU3RyaW5nIHByZWZpeGVkTmFtZSA9IGdldFByZWZpeGVkQ29tcG9uZW50TmFtZShwYXJ0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSwgY29tcGxleFR5cGUpOwotCQkJCUNvbXBvbmVudFJlZmVyZW5jZVV0aWwuc2V0Q29tcG9uZW50UmVmZXJlbmNlKHBhcnQsIHRydWUsIHByZWZpeGVkTmFtZSk7Ci0JCQkJZm9ybWF0Q2hpbGQoY29tcGxleFR5cGUuZ2V0RWxlbWVudCgpKTsKLQkJCX0JCi0JCX0KLQkJCi0JCXJldHVybiByZXR1cm5lZFhTREVsZW1lbnQ7Ci0JfQkKLQkvKgotCSAqIENyZWF0ZSBpZiBuZWNlc3NhcnkgYSBNZXNzYWdlIGFuZCBQYXJ0IGZvciB0aGUgZ2l2ZW4gTWVzc2FnZVJlZmVyZW5jZQotCSAqIGFuZCByZXR1cm4gaXQncyBQYXJ0Ci0JICovCi0JcHJvdGVjdGVkIFBhcnQgY3JlYXRlV1NETENvbXBvbmVudHMoTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmKSB7Ci0JCU1lc3NhZ2UgbWVzc2FnZSA9IG1lc3NhZ2VSZWYuZ2V0RU1lc3NhZ2UoKTsKLQkJUGFydCBwYXJ0ID0gbnVsbDsKLQkJCi0JCWlmIChtZXNzYWdlID09IG51bGwgfHwgbWVzc2FnZS5lQ29udGFpbmVyKCkgPT0gbnVsbCkgewotCQkJLy8gQ3JlYXRlIE1lc3NhZ2UKLQkJCUFkZE1lc3NhZ2VDb21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkTWVzc2FnZUNvbW1hbmQobWVzc2FnZVJlZi5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCksIGdldFdTRExNZXNzYWdlTmFtZSgpKTsKLQkJCWNvbW1hbmQucnVuKCk7Ci0JCQltZXNzYWdlID0gKE1lc3NhZ2UpIGNvbW1hbmQuZ2V0V1NETEVsZW1lbnQoKTsKLQkJCW1lc3NhZ2VSZWYuc2V0RU1lc3NhZ2UobWVzc2FnZSk7Ci0JCX0KLQkJCi0JCWlmIChtZXNzYWdlLmdldEVQYXJ0cygpLnNpemUoKSA9PSAwKSB7Ci0JCQkvLyBDcmVhdGUgUGFydAotCQkJU3RyaW5nIHBhcnROYW1lID0gZ2V0V1NETFBhcnROYW1lKCk7Ci0JCQlpZiAoc3R5bGUgPT0gUEFSVF9FTEVNRU5UX1NFUV9FTEVNRU5UKSB7Ci0JCQkJcGFydE5hbWUgPSBnZXREb2NMaXRXcmFwcGVkUGFydE5hbWUoKTsKLQkJCX0KLQkJCUFkZFBhcnRDb21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkUGFydENvbW1hbmQobWVzc2FnZSwgcGFydE5hbWUpOwotCQkJY29tbWFuZC5ydW4oKTsKLQkJCXBhcnQgPSAoUGFydCkgY29tbWFuZC5nZXRXU0RMRWxlbWVudCgpOwotCQl9Ci0JCWVsc2UgewotCQkJLy8gdGhlcmUgaXMgYW4gZXhpc3RpbmcgUGFydAotLy8JCQlwYXJ0ID0gKFBhcnQpIG1lc3NhZ2UuZ2V0RVBhcnRzKCkuZ2V0KDApOwotCQl9Ci0JCWZvcm1hdENoaWxkKG1lc3NhZ2UuZ2V0RWxlbWVudCgpKTsKLQkJCi0JCXJldHVybiBwYXJ0OwotCX0KLQkKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldERvY0xpdFdyYXBwZWRQYXJ0TmFtZSgpIHsKLQkJcmV0dXJuICJwYXJhbWV0ZXJzIjsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXByb3RlY3RlZCBYU0RFbGVtZW50RGVjbGFyYXRpb24gY3JlYXRlWFNET2JqZWN0cyhQYXJ0IHBhcnQpIHsKLQkJWFNERWxlbWVudERlY2xhcmF0aW9uIHJldHVybmVkWFNERWxlbWVudCA9IG51bGw7Ci0JCWlmIChpc1BhcnRFbGVtZW50UmVmZXJlbmNlKCkpIHsKLQkJCS8vIElzIGEgUGFydCAtLT4gRWxlbWVudCByZWZlcmVuY2UKLQkJCWlmIChwYXJ0ID09IG51bGwgJiYgZ2V0TWVzc2FnZVJlZmVyZW5jZSgpICE9IG51bGwgJiYgZ2V0TWVzc2FnZVJlZmVyZW5jZSgpLmdldEVNZXNzYWdlKCkgIT0gbnVsbCkgewotCQkJCXBhcnQgPSAoUGFydCkgZ2V0TWVzc2FnZVJlZmVyZW5jZSgpLmdldEVNZXNzYWdlKCkuZ2V0RVBhcnRzKCkuZ2V0KDApOwotCQkJfQotCQkJCi0JCQlyZXR1cm5lZFhTREVsZW1lbnQgPSBjcmVhdGVQYXJ0RWxlbWVudFJlZmVyZW5jZUNvbXBvbmVudHMocGFydCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQkvLyBJcyBhIFBhcnQgLS0+IENvbXBsZXggVHlwZSByZWZlcmVuY2UKLS8vCQkJcmV0dXJuZWRYU0RFbGVtZW50ID0gY3JlYXRlUGFydENvbXBsZXhUeXBlUmVmZXJlbmNlKHBhcnQpOwotCQkJCi0JCQkvLyBJZiBpdCdzIGEgUGFydCAtLT4gVHlwZSByZWZlcmVuY2UsIGFkZGluZyBhIG5ldyBwYXJhbWV0ZXIgYWx3YXlzIG1lYW5zIGFkZGluZyBhIG5ldyBQYXJ0Ci0JCQkvLyB3aXRoIGEgc3RyaW5nIHJlZmVyZW5jZS4gIEJlY2F1c2Ugb2YgdGhpcyBjYXNlLCB3ZSBzaG91bGQgcmVhbGx5IHJlbmFtZSB0aGlzIG1ldGhvZCBpbnN0ZWFkCi0JCQkvLyBvZiBjcmVhdGVYU0RPYmplY3RzKCkgc2luY2Ugd2UgbWF5IGVuZCB1cCBjcmVhdGluZyBhIFBhcnQuCi0JCQlpZiAocGFydCA9PSBudWxsICYmIGdldE1lc3NhZ2VSZWZlcmVuY2UoKSAhPSBudWxsICYmIGdldE1lc3NhZ2VSZWZlcmVuY2UoKS5nZXRFTWVzc2FnZSgpICE9IG51bGwpIHsKLQkJCQlMaXN0IHBhcnROYW1lcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCQlNZXNzYWdlIG1lc3NhZ2UgPSBnZXRNZXNzYWdlUmVmZXJlbmNlKCkuZ2V0RU1lc3NhZ2UoKTsKLQkJCQlJdGVyYXRvciBpdCA9IG1lc3NhZ2UuZ2V0RVBhcnRzKCkuaXRlcmF0b3IoKTsKLQkJCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0JCQkJCVBhcnQgaXRlbSA9IChQYXJ0KSBpdC5uZXh0KCk7Ci0JCQkJCXBhcnROYW1lcy5hZGQoaXRlbS5nZXROYW1lKCkpOwotCQkJCX0KLQkJCQlTdHJpbmcgcGFydE5hbWUgPSBOYW1lVXRpbC5nZXRVbmlxdWVOYW1lSGVscGVyKGdldFdTRExQYXJ0TmFtZSgpLCBwYXJ0TmFtZXMpOwotCQkJCUFkZFBhcnRDb21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkUGFydENvbW1hbmQobWVzc2FnZSwgcGFydE5hbWUpOwotCQkJCWNvbW1hbmQucnVuKCk7Ci0JCQkJbmV3UGFydCA9IChQYXJ0KSBjb21tYW5kLmdldFdTRExFbGVtZW50KCk7Ci0JCQl9Ci0JCX0KLQkJCi0JCXJldHVybiByZXR1cm5lZFhTREVsZW1lbnQ7Ci0JfQotCi0gICAgcHJvdGVjdGVkIFN0cmluZyBnZXRQcmVmaXhlZENvbXBvbmVudE5hbWUoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBYU0ROYW1lZENvbXBvbmVudCBjb21wb25lbnQpIHsKLSAgICAJU3RyaW5nIG5hbWUgPSBjb21wb25lbnQuZ2V0TmFtZSgpOwotICAgIAlTdHJpbmcgdG5zID0gY29tcG9uZW50LmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgICAgICBMaXN0IHByZWZpeGVzID0gZ2V0UHJlZml4ZXMoZGVmaW5pdGlvbiwgdG5zKTsKLSAgICAgICAgaWYgKHByZWZpeGVzLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAgIG5hbWUgPSBwcmVmaXhlcy5nZXQoMCkgKyAiOiIgKyBuYW1lOyAvLyROT04tTkxTLTEkCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBuYW1lOwotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIExpc3QgZ2V0UHJlZml4ZXMoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBTdHJpbmcgbmFtZXNwYWNlKSB7Ci0gICAgICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgTWFwIG1hcCA9IGRlZmluaXRpb24uZ2V0TmFtZXNwYWNlcygpOwotICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBtYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0gICAgICAgICAgICBTdHJpbmcgcHJlZml4ID0gKFN0cmluZykgaS5uZXh0KCk7Ci0gICAgICAgICAgICBTdHJpbmcgdGhlTmFtZXNwYWNlID0gKFN0cmluZykgbWFwLmdldChwcmVmaXgpOwotICAgICAgICAgICAgaWYgKHRoZU5hbWVzcGFjZSAhPSBudWxsICYmIHRoZU5hbWVzcGFjZS5lcXVhbHMobmFtZXNwYWNlKSkgewotICAgICAgICAgICAgICAgIGxpc3QuYWRkKHByZWZpeCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGxpc3Q7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBzdGF0aWMgaW50IGdldFBhcmFtZXRlclBhdHRlcm4oV1NETEVsZW1lbnQgZWxlbWVudCkgewotICAgIAlpbnQgcGF0dGVybiA9IC0xOwotICAgIAkKLSAgICAJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBPcGVyYXRpb24pIHsKLSAgICAJCXBhdHRlcm4gPSBnZXRQYXR0ZXJuKChPcGVyYXRpb24pIGVsZW1lbnQpOwotICAgIAkJCi0JCQlQb3J0VHlwZSBwdCA9IChQb3J0VHlwZSkgKChPcGVyYXRpb24pIGVsZW1lbnQpLmdldENvbnRhaW5lcigpOwotICAgIAkJaWYgKHBhdHRlcm4gPT0gLTEpIHsKLSAgICAJCQkvLyBsZXQncyB0cnkgdG8gc2VhcmNoIG90aGVyIE9wZXJhdGlvbnMgaW4gdGhlIHNhbWUgUG9ydFR5cGUKLSAgICAJCQlJdGVyYXRvciBvcEl0ID0gcHQuZ2V0RU9wZXJhdGlvbnMoKS5pdGVyYXRvcigpOwotICAgIAkJCXdoaWxlIChwYXR0ZXJuID09IC0xICYmIG9wSXQuaGFzTmV4dCgpKSB7Ci0gICAgCQkJCU9wZXJhdGlvbiBpdGVtID0gKE9wZXJhdGlvbikgb3BJdC5uZXh0KCk7Ci0gICAgCQkJCWlmICghaXRlbS5lcXVhbHMoZWxlbWVudCkpIHsKLSAgICAJCQkJCXBhdHRlcm4gPSBnZXRQYXR0ZXJuKGl0ZW0pOwotICAgIAkJCQl9Ci0gICAgCQkJfQotICAgIAkJfQotCi0gICAgCQlpZiAocGF0dGVybiA9PSAtMSkgewotICAgIAkJCS8vIGxldCdzIHRyeSB0byBzZWFyY2ggb3RoZXIgT3BlcmF0aW9ucyBpbiBPVEhFUiBQb3J0VHlwZXMKLSAgICAJCQlJdGVyYXRvciBwdEl0ID0gcHQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLmdldEVQb3J0VHlwZXMoKS5pdGVyYXRvcigpOwotICAgIAkJCXdoaWxlIChwYXR0ZXJuID09IC0xICYmIHB0SXQuaGFzTmV4dCgpKSB7Ci0gICAgCQkJCVBvcnRUeXBlIGl0ZW0gPSAoUG9ydFR5cGUpIHB0SXQubmV4dCgpOwotICAgIAkJCQlpZiAoIWl0ZW0uZXF1YWxzKHB0KSkgewotICAgIAkJCQkJcGF0dGVybiA9IGdldFBhdHRlcm4oaXRlbSk7Ci0gICAgCQkJCX0KLSAgICAJCQl9Ci0gICAgCQl9Ci0gICAgCX0KLSAgICAJZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFBvcnRUeXBlKSB7Ci0gICAgCQlQb3J0VHlwZSBwdCA9IChQb3J0VHlwZSkgZWxlbWVudDsKLSAgICAJCXBhdHRlcm4gPSBnZXRQYXR0ZXJuKHB0KTsKLSAgICAJCQotICAgIAkJaWYgKHBhdHRlcm4gPT0gLTEpIHsKLSAgICAJCQkvLyBsZXQncyB0cnkgdG8gc2VhcmNoIG90aGVyIE9wZXJhdGlvbnMgaW4gT1RIRVIgUG9ydFR5cGVzCi0gICAgCQkJSXRlcmF0b3IgcHRJdCA9IHB0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKS5nZXRFUG9ydFR5cGVzKCkuaXRlcmF0b3IoKTsKLSAgICAJCQl3aGlsZSAocGF0dGVybiA9PSAtMSAmJiBwdEl0Lmhhc05leHQoKSkgewotICAgIAkJCQlQb3J0VHlwZSBpdGVtID0gKFBvcnRUeXBlKSBwdEl0Lm5leHQoKTsKLSAgICAJCQkJaWYgKCFpdGVtLmVxdWFscyhwdCkpIHsKLSAgICAJCQkJCXBhdHRlcm4gPSBnZXRQYXR0ZXJuKGl0ZW0pOwotICAgIAkJCQl9Ci0gICAgCQkJfQotICAgIAkJfQotICAgIAl9Ci0gICAgCQotICAgIAlpZiAocGF0dGVybiA9PSAtMSkgewotICAgIAkJcGF0dGVybiA9IEFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kLlBBUlRfRUxFTUVOVF9TRVFfRUxFTUVOVDsKLSAgICAJfQotCi0gICAgCXJldHVybiBwYXR0ZXJuOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIGludCBnZXRQYXJhbWV0ZXJQYXR0ZXJuKFdTRExFbGVtZW50IGVsZW1lbnQsIGJvb2xlYW4gdXNlSW5wdXQpIHsKLSAgICAJaW50IHBhdHRlcm4gPSAtMTsKLSAgICAJCi0gICAgCWlmIChlbGVtZW50IGluc3RhbmNlb2YgT3BlcmF0aW9uKSB7Ci0gICAgCQlPcGVyYXRpb24gb3AgPSAoT3BlcmF0aW9uKSBlbGVtZW50OwotICAgIAkJaWYgKHVzZUlucHV0ICYmIG9wLmdldEVJbnB1dCgpICE9IG51bGwpIHsKLQkJCQlwYXR0ZXJuID0gZ2V0UGF0dGVybihvcC5nZXRFSW5wdXQoKS5nZXRFTWVzc2FnZSgpKTsKLQkJCX0KLQkJCWlmICghdXNlSW5wdXQgJiYgb3AuZ2V0RU91dHB1dCgpICE9IG51bGwpewotCQkJCXBhdHRlcm4gPSBnZXRQYXR0ZXJuKG9wLmdldEVPdXRwdXQoKS5nZXRFTWVzc2FnZSgpKTsKLQkJCX0KLSAgICAJCQotCQkJUG9ydFR5cGUgcHQgPSAoUG9ydFR5cGUpIG9wLmdldENvbnRhaW5lcigpOwotICAgIAkJaWYgKHBhdHRlcm4gPT0gLTEpIHsKLSAgICAJCQkvLyBsZXQncyB0cnkgdG8gc2VhcmNoIG90aGVyIE9wZXJhdGlvbnMgaW4gdGhlIHNhbWUgUG9ydFR5cGUKLSAgICAJCQlJdGVyYXRvciBvcEl0ID0gcHQuZ2V0RU9wZXJhdGlvbnMoKS5pdGVyYXRvcigpOwotICAgIAkJCXdoaWxlIChwYXR0ZXJuID09IC0xICYmIG9wSXQuaGFzTmV4dCgpKSB7Ci0gICAgCQkJCU9wZXJhdGlvbiBpdGVtID0gKE9wZXJhdGlvbikgb3BJdC5uZXh0KCk7Ci0gICAgCQkJCWlmICghaXRlbS5lcXVhbHMoZWxlbWVudCkpIHsKLSAgICAJCQkJCWlmICh1c2VJbnB1dCAmJiBpdGVtLmdldEVJbnB1dCgpICE9IG51bGwpIHsKLSAgICAJCQkJCQlwYXR0ZXJuID0gZ2V0UGF0dGVybihpdGVtLmdldEVJbnB1dCgpLmdldEVNZXNzYWdlKCkpOwotICAgIAkJCQkJfQotICAgIAkJCQkJaWYgKCF1c2VJbnB1dCAmJiBpdGVtLmdldEVPdXRwdXQoKSAhPSBudWxsKXsKLSAgICAJCQkJCQlwYXR0ZXJuID0gZ2V0UGF0dGVybihpdGVtLmdldEVPdXRwdXQoKS5nZXRFTWVzc2FnZSgpKTsKLSAgICAJCQkJCX0KLSAgICAJCQkJfQotICAgIAkJCX0KLSAgICAJCX0KLQotICAgIAkJaWYgKHBhdHRlcm4gPT0gLTEpIHsKLSAgICAJCQkvLyBsZXQncyB0cnkgdG8gc2VhcmNoIG90aGVyIE9wZXJhdGlvbnMgaW4gT1RIRVIgUG9ydFR5cGVzCi0gICAgCQkJSXRlcmF0b3IgcHRJdCA9IHB0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKS5nZXRFUG9ydFR5cGVzKCkuaXRlcmF0b3IoKTsKLSAgICAJCQl3aGlsZSAocGF0dGVybiA9PSAtMSAmJiBwdEl0Lmhhc05leHQoKSkgewotICAgIAkJCQlQb3J0VHlwZSBpdGVtID0gKFBvcnRUeXBlKSBwdEl0Lm5leHQoKTsKLSAgICAJCQkJaWYgKCFpdGVtLmVxdWFscyhwdCkpIHsKLSAgICAJCQkJCXBhdHRlcm4gPSBnZXRQYXR0ZXJuKGl0ZW0sIHVzZUlucHV0KTsKLSAgICAJCQkJfQotICAgIAkJCX0KLSAgICAJCX0KLSAgICAJfQotICAgIAllbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgUG9ydFR5cGUpIHsKLSAgICAJCVBvcnRUeXBlIHB0ID0gKFBvcnRUeXBlKSBlbGVtZW50OwotICAgIAkJcGF0dGVybiA9IGdldFBhdHRlcm4ocHQsIHVzZUlucHV0KTsKLSAgICAJCQotICAgIAkJaWYgKHBhdHRlcm4gPT0gLTEpIHsKLSAgICAJCQkvLyBsZXQncyB0cnkgdG8gc2VhcmNoIG90aGVyIE9wZXJhdGlvbnMgaW4gT1RIRVIgUG9ydFR5cGVzCi0gICAgCQkJSXRlcmF0b3IgcHRJdCA9IHB0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKS5nZXRFUG9ydFR5cGVzKCkuaXRlcmF0b3IoKTsKLSAgICAJCQl3aGlsZSAocGF0dGVybiA9PSAtMSAmJiBwdEl0Lmhhc05leHQoKSkgewotICAgIAkJCQlQb3J0VHlwZSBpdGVtID0gKFBvcnRUeXBlKSBwdEl0Lm5leHQoKTsKLSAgICAJCQkJaWYgKCFpdGVtLmVxdWFscyhwdCkpIHsKLSAgICAJCQkJCXBhdHRlcm4gPSBnZXRQYXR0ZXJuKGl0ZW0sIHVzZUlucHV0KTsKLSAgICAJCQkJfQotICAgIAkJCX0KLSAgICAJCX0KLSAgICAJfQotICAgIAkKLSAgICAJcmV0dXJuIHBhdHRlcm47Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgc3RhdGljIGludCBnZXRQYXR0ZXJuKFBvcnRUeXBlIHBvcnRUeXBlKSB7Ci0gICAgCWludCBwYXR0ZXJuID0gLTE7Ci0gICAgCUl0ZXJhdG9yIG9wSXQgPSBwb3J0VHlwZS5nZXRFT3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7Ci0gICAgCXdoaWxlIChwYXR0ZXJuID09IC0xICYmIG9wSXQuaGFzTmV4dCgpKSB7Ci0gICAgCQlPcGVyYXRpb24gb3AgPSAoT3BlcmF0aW9uKSBvcEl0Lm5leHQoKTsKLSAgICAJCXBhdHRlcm4gPSBnZXRQYXR0ZXJuKG9wKTsKLSAgICAJfQotICAgIAkKLSAgICAJcmV0dXJuIHBhdHRlcm47Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgaW50IGdldFBhdHRlcm4oUG9ydFR5cGUgcG9ydFR5cGUsIGJvb2xlYW4gdXNlSW5wdXQpIHsKLSAgICAJaW50IHBhdHRlcm4gPSAtMTsKLSAgICAJSXRlcmF0b3Igb3BJdCA9IHBvcnRUeXBlLmdldEVPcGVyYXRpb25zKCkuaXRlcmF0b3IoKTsKLSAgICAJd2hpbGUgKHBhdHRlcm4gPT0gLTEgJiYgb3BJdC5oYXNOZXh0KCkpIHsKLSAgICAJCU9wZXJhdGlvbiBvcCA9IChPcGVyYXRpb24pIG9wSXQubmV4dCgpOwotICAgIAkJaWYgKHVzZUlucHV0ICYmIG9wLmdldEVJbnB1dCgpICE9IG51bGwpIHsKLSAgICAJCQlwYXR0ZXJuID0gZ2V0UGF0dGVybihvcC5nZXRFSW5wdXQoKS5nZXRFTWVzc2FnZSgpKTsKLSAgICAJCX0KLSAgICAJCWlmICghdXNlSW5wdXQgJiYgb3AuZ2V0RU91dHB1dCgpICE9IG51bGwpIHsKLSAgICAJCQlwYXR0ZXJuID0gZ2V0UGF0dGVybihvcC5nZXRFT3V0cHV0KCkuZ2V0RU1lc3NhZ2UoKSk7Ci0gICAgCQl9Ci0gICAgCX0KLSAgICAJCi0gICAgCXJldHVybiBwYXR0ZXJuOwotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIHN0YXRpYyBpbnQgZ2V0UGF0dGVybihPcGVyYXRpb24gb3BlcmF0aW9uKSB7Ci0JCWludCBwYXR0ZXJuID0gLTE7Ci0JCQotICAgIAlJbnB1dCBpbnB1dCA9IG9wZXJhdGlvbi5nZXRFSW5wdXQoKTsKLQkJT3V0cHV0IG91dHB1dCA9IG9wZXJhdGlvbi5nZXRFT3V0cHV0KCk7Ci0JCUxpc3QgZmF1bHRzID0gb3BlcmF0aW9uLmdldEVGYXVsdHMoKTsKLQkJCi0JCWlmIChpbnB1dCAhPSBudWxsKSB7Ci0JCQlwYXR0ZXJuID0gZ2V0UGF0dGVybihpbnB1dC5nZXRFTWVzc2FnZSgpKTsKLQkJfQotCQkKLQkJaWYgKHBhdHRlcm4gPT0gLTEgJiYgb3V0cHV0ICE9IG51bGwpIHsKLQkJCXBhdHRlcm4gPSBnZXRQYXR0ZXJuKG91dHB1dC5nZXRFTWVzc2FnZSgpKTsKLQkJfQotCQkKLQkJaWYgKHBhdHRlcm4gPT0gLTEgJiYgZmF1bHRzLnNpemUoKSA+IDApIHsKLQkJCUl0ZXJhdG9yIGZhdWx0SXQgPSBmYXVsdHMuaXRlcmF0b3IoKTsKLQkJCXdoaWxlIChwYXR0ZXJuID09IC0xICYmIGZhdWx0SXQuaGFzTmV4dCgpKSB7Ci0JCQkJRmF1bHQgZmF1bHQgPSAoRmF1bHQpIGZhdWx0SXQubmV4dCgpOwotCQkJCXBhdHRlcm4gPSBnZXRQYXR0ZXJuKGZhdWx0LmdldEVNZXNzYWdlKCkpOwotCQkJfQotCQl9Ci0JCQotCQlyZXR1cm4gcGF0dGVybjsKLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSBzdGF0aWMgaW50IGdldFBhdHRlcm4oTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgCWludCBwYXR0ZXJuID0gLTE7Ci0JCWlmIChtZXNzYWdlICE9IG51bGwpIHsKLQkJCUl0ZXJhdG9yIHBhcnRzID0gbWVzc2FnZS5nZXRFUGFydHMoKS5pdGVyYXRvcigpOwotCQkJd2hpbGUgKHBhcnRzLmhhc05leHQoKSkgewotCQkJCVBhcnQgcGFydCA9IChQYXJ0KSBwYXJ0cy5uZXh0KCk7Ci0JCQkJaWYgKHBhcnQuZ2V0RWxlbWVudERlY2xhcmF0aW9uKCkgIT0gbnVsbCkgewotCQkJCQlwYXR0ZXJuID0gQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuUEFSVF9FTEVNRU5UOwotCi0JCQkJCVhTREVsZW1lbnREZWNsYXJhdGlvbiB4c2RFbGVtZW50ID0gcGFydC5nZXRFbGVtZW50RGVjbGFyYXRpb24oKTsKLQkJCQkJaWYgKGlzU2VxdWVuY2VQYXR0ZXJuKHhzZEVsZW1lbnQuZ2V0VHlwZURlZmluaXRpb24oKSkpIHsKLQkJCQkJCXBhdHRlcm4gPSBBZGRCYXNlUGFyYW1ldGVyQ29tbWFuZC5QQVJUX0VMRU1FTlRfU0VRX0VMRU1FTlQ7CQotCQkJCQl9CQkJCQkKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCWVsc2UgaWYgKHBhcnQuZ2V0VHlwZURlZmluaXRpb24oKSAhPSBudWxsKSB7Ci0JCQkJCXBhdHRlcm4gPSBBZGRCYXNlUGFyYW1ldGVyQ29tbWFuZC5QQVJUX1NJTVBMRVRZUEU7Ci0JCQkJCQotCQkJCQlpZiAocGFydC5nZXRUeXBlRGVmaW5pdGlvbigpIGluc3RhbmNlb2YgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKSB7Ci0JCQkJCQlwYXR0ZXJuID0gQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuUEFSVF9DT01QTEVYVFlQRTsKLQkJCQkJCQotCQkJCQkJWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uIHhzZFR5cGUgPSAoWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKSBwYXJ0LmdldFR5cGVEZWZpbml0aW9uKCk7Ci0JCQkJCQlpZiAoaXNTZXF1ZW5jZVBhdHRlcm4oeHNkVHlwZSkpIHsKLQkJCQkJCQlwYXR0ZXJuID0gQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuUEFSVF9DT01QTEVYVFlQRV9TRVFfRUxFTUVOVDsgCi0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCQotCQlyZXR1cm4gcGF0dGVybjsKLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1NlcXVlbmNlUGF0dGVybihYU0RUeXBlRGVmaW5pdGlvbiB0eXBlKSB7Ci0gICAgCWJvb2xlYW4gaXNTZXF1ZW5jZVBhdHRlcm4gPSBmYWxzZTsKLSAgICAJCi0gICAgCWlmICh0eXBlIGluc3RhbmNlb2YgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKSB7Ci0gICAgCQlYU0RDb21wbGV4VHlwZURlZmluaXRpb24gY29tcGxleFR5cGUgPSAoWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKSB0eXBlOwotCi0JICAgIAlpZiAoY29tcGxleFR5cGUuZ2V0Q29udGVudCgpIGluc3RhbmNlb2YgWFNEUGFydGljbGUpIHsKLQkJCQlYU0RQYXJ0aWNsZSBwYXJ0aWNsZSA9IChYU0RQYXJ0aWNsZSkgY29tcGxleFR5cGUuZ2V0Q29udGVudCgpOwotCQkJCWlmIChwYXJ0aWNsZS5nZXRDb250ZW50KCkgaW5zdGFuY2VvZiBYU0RNb2RlbEdyb3VwKSB7Ci0JCQkJCWlzU2VxdWVuY2VQYXR0ZXJuID0gdHJ1ZTsKLQkJCQl9Ci0JCQl9Ci0gICAgCX0KLSAgICAJCi0gICAgCXJldHVybiBpc1NlcXVlbmNlUGF0dGVybjsKLSAgICB9Ci0gICAgCi0gICAgcHJvdGVjdGVkIHZvaWQgZm9ybWF0Q2hpbGQoRWxlbWVudCBjaGlsZCkKLSAgICB7Ci0gICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBJRE9NTm9kZSkKLSAgICAgIHsKLSAgICAgICAgSURPTU1vZGVsIG1vZGVsID0gKChJRE9NTm9kZSljaGlsZCkuZ2V0TW9kZWwoKTsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAvLyB0ZWxsIHRoZSBtb2RlbCB0aGF0IHdlIGFyZSBhYm91dCB0byBtYWtlIGEgYmlnIG1vZGVsIGNoYW5nZQotICAgICAgICAgIG1vZGVsLmFib3V0VG9DaGFuZ2VNb2RlbCgpOwotICAgICAgICAgIAotICAgICAgICAgIElTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yIGZvcm1hdFByb2Nlc3NvciA9IG5ldyBGb3JtYXRQcm9jZXNzb3JYTUwoKTsKLSAgICAgICAgICBmb3JtYXRQcm9jZXNzb3IuZm9ybWF0Tm9kZShjaGlsZCk7Ci0gICAgICAgIH0KLSAgICAgICAgZmluYWxseQotICAgICAgICB7Ci0gICAgICAgICAgLy8gdGVsbCB0aGUgbW9kZWwgdGhhdCB3ZSBhcmUgZG9uZSB3aXRoIHRoZSBiaWcgbW9kZWwgY2hhbmdlCi0gICAgICAgICAgbW9kZWwuY2hhbmdlZE1vZGVsKCk7IAotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBQYXJ0IGdldE5ld2x5QWRkZWRDb21wb25lbnRQYXJ0KCkgewotICAgIAlyZXR1cm4gbmV3UGFydDsKLSAgICB9Ci0KLQlwcm90ZWN0ZWQgYWJzdHJhY3QgU3RyaW5nIGdldEFub255bW91c1hTREVsZW1lbnRCYXNlTmFtZSgpOwotCXByb3RlY3RlZCBhYnN0cmFjdCBTdHJpbmcgZ2V0TmV3WFNERWxlbWVudEJhc2VOYW1lKCk7Ci0JcHJvdGVjdGVkIGFic3RyYWN0IFN0cmluZyBnZXRXU0RMTWVzc2FnZU5hbWUoKTsKLQlwcm90ZWN0ZWQgYWJzdHJhY3QgU3RyaW5nIGdldFdTRExQYXJ0TmFtZSgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRCaW5kaW5nQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRCaW5kaW5nQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTI1MWJiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkQmluZGluZ0NvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kczsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3Rvcnk7Ci0KLQotcHVibGljIGZpbmFsIGNsYXNzIEFkZEJpbmRpbmdDb21tYW5kIGV4dGVuZHMgV1NETEVsZW1lbnRDb21tYW5kCi17Ci0gIHByaXZhdGUgRGVmaW5pdGlvbiBkZWZpbml0aW9uOwotICBwcml2YXRlIFN0cmluZyBsb2NhbE5hbWU7Ci0gIHByaXZhdGUgQmluZGluZyBiaW5kaW5nOwotIAotICBwdWJsaWMgQWRkQmluZGluZ0NvbW1hbmQKLQkJKERlZmluaXRpb24gZGVmaW5pdGlvbiwgIAotCQkgU3RyaW5nIGxvY2FsTmFtZSkKLQl7Ci0JICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotCSAgdGhpcy5sb2NhbE5hbWUgPSBsb2NhbE5hbWU7Ci0JfQotICAKLSAgcHVibGljIFdTRExFbGVtZW50IGdldFdTRExFbGVtZW50KCkKLSAgewotICAgIHJldHVybiBiaW5kaW5nOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcnVuKCkKLSAgewotICAgIGJpbmRpbmcgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQmluZGluZygpOwotICAgIGJpbmRpbmcuc2V0UU5hbWUobmV3IFFOYW1lKGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCksbG9jYWxOYW1lKSk7Ci0gICAgYmluZGluZy5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKGRlZmluaXRpb24pOwotICAgIGRlZmluaXRpb24uYWRkQmluZGluZyhiaW5kaW5nKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRCaW5kaW5nRmF1bHRDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZEJpbmRpbmdGYXVsdENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDA5OWJiMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZEJpbmRpbmdGYXVsdENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdGYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExGYWN0b3J5OwotCi1wdWJsaWMgZmluYWwgY2xhc3MgQWRkQmluZGluZ0ZhdWx0Q29tbWFuZCBleHRlbmRzIFdTRExFbGVtZW50Q29tbWFuZAotewotICBCaW5kaW5nRmF1bHQgYmluZGluZ0ZhdWx0OwotICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb247Ci0gIFN0cmluZyBuYW1lOwotICAKLSAgcHVibGljIEFkZEJpbmRpbmdGYXVsdENvbW1hbmQoQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uLCBTdHJpbmcgbmFtZSkKLSAgewotICAgIHRoaXMuYmluZGluZ09wZXJhdGlvbiA9IGJpbmRpbmdPcGVyYXRpb247Ci0gICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJ1bigpCi0gIHsKLSAgICBiaW5kaW5nRmF1bHQgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQmluZGluZ0ZhdWx0KCk7Ci0gICAgYmluZGluZ0ZhdWx0LnNldE5hbWUobmFtZSk7IAotICAgIGJpbmRpbmdGYXVsdC5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKGJpbmRpbmdPcGVyYXRpb24uZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLSAgICBiaW5kaW5nT3BlcmF0aW9uLmFkZEJpbmRpbmdGYXVsdCgoQmluZGluZ0ZhdWx0KWJpbmRpbmdGYXVsdCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBXU0RMRWxlbWVudCBnZXRXU0RMRWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gYmluZGluZ0ZhdWx0OwotICB9Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkQmluZGluZ0lucHV0Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRCaW5kaW5nSW5wdXRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhODgyNWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRCaW5kaW5nSW5wdXRDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRmFjdG9yeTsKLQotcHVibGljIGZpbmFsIGNsYXNzIEFkZEJpbmRpbmdJbnB1dENvbW1hbmQgZXh0ZW5kcyBXU0RMRWxlbWVudENvbW1hbmQKLXsKLSAgQmluZGluZ0lucHV0IGJpbmRpbmdJbnB1dDsKLSAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uOwotICBTdHJpbmcgbmFtZTsKLSAgCi0gIHB1YmxpYyBBZGRCaW5kaW5nSW5wdXRDb21tYW5kKEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiwgU3RyaW5nIG5hbWUpCi0gIHsKLSAgICB0aGlzLmJpbmRpbmdPcGVyYXRpb24gPSBiaW5kaW5nT3BlcmF0aW9uOwotICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBydW4oKQotICB7Ci0gICAgYmluZGluZ0lucHV0ID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUJpbmRpbmdJbnB1dCgpOwotICAgIGJpbmRpbmdJbnB1dC5zZXROYW1lKG5hbWUpOyAKLSAgICBiaW5kaW5nSW5wdXQuc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihiaW5kaW5nT3BlcmF0aW9uLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0gICAgYmluZGluZ09wZXJhdGlvbi5zZXRCaW5kaW5nSW5wdXQoKEJpbmRpbmdJbnB1dCliaW5kaW5nSW5wdXQpOwotICB9Ci0gIAotICBwdWJsaWMgV1NETEVsZW1lbnQgZ2V0V1NETEVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIGJpbmRpbmdJbnB1dDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRCaW5kaW5nT3BlcmF0aW9uQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRCaW5kaW5nT3BlcmF0aW9uQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOWE0NjQ0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkQmluZGluZ09wZXJhdGlvbkNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3Rvcnk7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBBZGRCaW5kaW5nT3BlcmF0aW9uQ29tbWFuZCBleHRlbmRzIFdTRExFbGVtZW50Q29tbWFuZAotewotICBwcml2YXRlIEJpbmRpbmcgYmluZGluZzsKLSAgCi0gIHByaXZhdGUgU3RyaW5nIG5hbWU7Ci0gIHByaXZhdGUgU3RyaW5nIGJpbmRpbmdJbnB1dE5hbWUgPSAiIjsgLy8kTk9OLU5MUy0xJAotICBwcml2YXRlIFN0cmluZyBiaW5kaW5nT3V0cHV0TmFtZSA9ICIiOyAvLyROT04tTkxTLTEkCi0gIHByaXZhdGUgU3RyaW5nIGJpbmRpbmdGYXVsdE5hbWUgPSIiOyAvLyROT04tTkxTLTEkCi0gIAotICBwcml2YXRlIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbjsKLSAgCi0gIHByaXZhdGUgYm9vbGVhbiBjcmVhdGVCaW5kaW5nSW5wdXQgPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIGNyZWF0ZUJpbmRpbmdPdXRwdXQgPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIGNyZWF0ZUJpbmRpbmdGYXVsdCA9IGZhbHNlOwotICAKLSAgcHVibGljIEFkZEJpbmRpbmdPcGVyYXRpb25Db21tYW5kKEJpbmRpbmcgYmluZGluZyxTdHJpbmcgbmFtZSkKLSAgewotICAgIHRoaXMuYmluZGluZyA9IGJpbmRpbmc7Ci0gICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgfQotICAKLSAgcHVibGljIEFkZEJpbmRpbmdPcGVyYXRpb25Db21tYW5kCi0gICAgKEJpbmRpbmcgYmluZGluZywgIAotICAgICBTdHJpbmcgbmFtZSwKLSAgICAgYm9vbGVhbiBjcmVhdGVCaW5kaW5nSW5wdXQsCi0gICAgIGJvb2xlYW4gY3JlYXRlQmluZGluZ091dHB1dCwKLSAgICAgYm9vbGVhbiBjcmVhdGVCaW5kaW5nRmF1bHQpCi0gIHsKLSAgICB0aGlzLmJpbmRpbmcgPSBiaW5kaW5nOwotICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gICAgdGhpcy5jcmVhdGVCaW5kaW5nSW5wdXQgPSBjcmVhdGVCaW5kaW5nSW5wdXQ7Ci0gICAgdGhpcy5jcmVhdGVCaW5kaW5nT3V0cHV0ID0gY3JlYXRlQmluZGluZ091dHB1dDsKLSAgICB0aGlzLmNyZWF0ZUJpbmRpbmdGYXVsdCA9IGNyZWF0ZUJpbmRpbmdGYXVsdDsKLSAgfQotICAgIAotICBwdWJsaWMgdm9pZCBydW4oKQotICB7Ci0gICAgYmluZGluZ09wZXJhdGlvbiA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVCaW5kaW5nT3BlcmF0aW9uKCk7Ci0gICAgYmluZGluZ09wZXJhdGlvbi5zZXROYW1lKG5hbWUpOwotICAgIGJpbmRpbmdPcGVyYXRpb24uc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihiaW5kaW5nLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0gICAgYmluZGluZy5hZGRCaW5kaW5nT3BlcmF0aW9uKGJpbmRpbmdPcGVyYXRpb24pOwotCi0gICAgV1NETEVsZW1lbnRDb21tYW5kIGNvbW1hbmQgPSBudWxsOwotICAgIGlmIChjcmVhdGVCaW5kaW5nSW5wdXQpCi0gICAgewotICAgICAgY29tbWFuZCA9IG5ldyBBZGRCaW5kaW5nSW5wdXRDb21tYW5kKGJpbmRpbmdPcGVyYXRpb24sYmluZGluZ0lucHV0TmFtZSk7Ci0gICAgICBjb21tYW5kLnJ1bigpOwotICAgIH0KLQotICAgIGlmIChjcmVhdGVCaW5kaW5nT3V0cHV0KQotICAgIHsKLSAgICAgIGNvbW1hbmQgPSBuZXcgQWRkQmluZGluZ091dHB1dENvbW1hbmQoYmluZGluZ09wZXJhdGlvbixiaW5kaW5nT3V0cHV0TmFtZSk7Ci0gICAgICBjb21tYW5kLnJ1bigpOwotICAgIH0KLQotICAgIGlmIChjcmVhdGVCaW5kaW5nRmF1bHQpCi0gICAgewotICAgICAgY29tbWFuZCA9IG5ldyBBZGRCaW5kaW5nRmF1bHRDb21tYW5kKGJpbmRpbmdPcGVyYXRpb24sYmluZGluZ0ZhdWx0TmFtZSk7Ci0gICAgICBjb21tYW5kLnJ1bigpOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIFdTRExFbGVtZW50IGdldFdTRExFbGVtZW50KCkKLSAgewotICAgIHJldHVybiBiaW5kaW5nT3BlcmF0aW9uOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0QmluZGluZ0lucHV0TmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgIHRoaXMuYmluZGluZ0lucHV0TmFtZSA9IG5hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEJpbmRpbmdPdXRwdXROYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gICAgdGhpcy5iaW5kaW5nT3V0cHV0TmFtZSA9IG5hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEJpbmRpbmdGYXVsdE5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICB0aGlzLmJpbmRpbmdGYXVsdE5hbWUgPSBuYW1lOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZEJpbmRpbmdPdXRwdXRDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZEJpbmRpbmdPdXRwdXRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4MGRhNTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRCaW5kaW5nT3V0cHV0Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExGYWN0b3J5OwotCi1wdWJsaWMgZmluYWwgY2xhc3MgQWRkQmluZGluZ091dHB1dENvbW1hbmQgZXh0ZW5kcyBXU0RMRWxlbWVudENvbW1hbmQKLXsKLSAgQmluZGluZ091dHB1dCBiaW5kaW5nT3V0cHV0OwotICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb247Ci0gIFN0cmluZyBuYW1lOwotICAKLSAgcHVibGljIEFkZEJpbmRpbmdPdXRwdXRDb21tYW5kKEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiwgU3RyaW5nIG5hbWUpCi0gIHsKLSAgICB0aGlzLmJpbmRpbmdPcGVyYXRpb24gPSBiaW5kaW5nT3BlcmF0aW9uOwotICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBydW4oKQotICB7Ci0gICAgYmluZGluZ091dHB1dCA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVCaW5kaW5nT3V0cHV0KCk7Ci0gICAgYmluZGluZ091dHB1dC5zZXROYW1lKG5hbWUpOyAKLSAgICBiaW5kaW5nT3V0cHV0LnNldEVuY2xvc2luZ0RlZmluaXRpb24oYmluZGluZ09wZXJhdGlvbi5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotICAgIGJpbmRpbmdPcGVyYXRpb24uc2V0QmluZGluZ091dHB1dCgoQmluZGluZ091dHB1dCliaW5kaW5nT3V0cHV0KTsKLSAgfQotICAKLSAgcHVibGljIFdTRExFbGVtZW50IGdldFdTRExFbGVtZW50KCkKLSAgewotICAgIHJldHVybiBiaW5kaW5nT3V0cHV0OwotICB9Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkRXh0ZW5zaW9uRWxlbWVudENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkRXh0ZW5zaW9uRWxlbWVudENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzg2OWY5MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZEV4dGVuc2lvbkVsZW1lbnRDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmxlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLnV0aWwuTmFtZXNwYWNlVGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5jb21tb24uY29tbWFuZHMuQWRkRXh0ZW5zaW9uQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBBZGRFeHRlbnNpb25FbGVtZW50Q29tbWFuZCBleHRlbmRzIEFkZEV4dGVuc2lvbkNvbW1hbmQKLXsKLSAgRXh0ZW5zaWJsZUVsZW1lbnQgaW5wdXQ7Ci0gIFhTREVsZW1lbnREZWNsYXJhdGlvbiBlbGVtZW50OwotICBFbGVtZW50IGFwcEluZm87Ci0gIEVsZW1lbnQgbmV3RWxlbWVudDsKLQotICBwdWJsaWMgQWRkRXh0ZW5zaW9uRWxlbWVudENvbW1hbmQoU3RyaW5nIGxhYmVsLCBFeHRlbnNpYmxlRWxlbWVudCBpbnB1dCwgWFNERWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnQpCi0gIHsKLSAgICBzdXBlcihsYWJlbCk7Ci0gICAgdGhpcy5pbnB1dCA9IGlucHV0OwotICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBleGVjdXRlKCkKLSAgewotICAgIHN1cGVyLmV4ZWN1dGUoKTsKLSAgICBFbGVtZW50IHBhcmVudEVsZW1lbnQgPSBpbnB1dC5nZXRFbGVtZW50KCk7Ci0gICAgRG9jdW1lbnQgZG9jID0gcGFyZW50RWxlbWVudC5nZXRPd25lckRvY3VtZW50KCk7Ci0gICAgCi0gICAgRWxlbWVudCBuZXdFbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhleHRlbnNpb25zU2NoZW1hU3BlYy5nZXROYW1lc3BhY2VVUkkoKSwgZWxlbWVudC5nZXROYW1lKCkpOwotICAgIAotICAgIFN0cmluZyBwcmVmaXggPSBhZGROYW1lc3BhY2VEZWNsYXJhdGlvbklmUmVxdWlyZWQoZG9jLmdldERvY3VtZW50RWxlbWVudCgpLCAicCIsIGV4dGVuc2lvbnNTY2hlbWFTcGVjLmdldE5hbWVzcGFjZVVSSSgpKTsgLy8kTk9OLU5MUy0xJAotICAgIG5ld0VsZW1lbnQuc2V0UHJlZml4KHByZWZpeCk7Ci0gICAgcGFyZW50RWxlbWVudC5hcHBlbmRDaGlsZChuZXdFbGVtZW50KTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHVuZG8oKQotICB7Ci0gICAgLy8gVE9ETyAoY3MpIGRvIHdlIG5lZWQgdG8gaW1wbGVtZW50PwotICB9Ci0gIHB1YmxpYyBPYmplY3QgZ2V0TmV3T2JqZWN0KCkKLSAgewotICAgIHJldHVybiBuZXdFbGVtZW50OwotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBhZGROYW1lc3BhY2VEZWNsYXJhdGlvbklmUmVxdWlyZWQoRWxlbWVudCByb290RWxlbWVudCwgU3RyaW5nIHByZWZpeEhpbnQsIFN0cmluZyBuYW1lc3BhY2UpCi0gIHsKLSAgICBTdHJpbmcgcHJlZml4ID0gbnVsbDsgICAgICAKLSAgICBOYW1lc3BhY2VUYWJsZSBuYW1lc3BhY2VUYWJsZSA9IG5ldyBOYW1lc3BhY2VUYWJsZShyb290RWxlbWVudC5nZXRPd25lckRvY3VtZW50KCkpOwotICAgIG5hbWVzcGFjZVRhYmxlLmFkZEVsZW1lbnQocm9vdEVsZW1lbnQpOwotICAgIHByZWZpeCA9IG5hbWVzcGFjZVRhYmxlLmdldFByZWZpeEZvclVSSShuYW1lc3BhY2UpOwotICAgIGlmIChwcmVmaXggPT0gbnVsbCkKLSAgICB7IAotICAgICAgU3RyaW5nIGJhc2VQcmVmaXggPSBwcmVmaXhIaW50OwotICAgICAgcHJlZml4ID0gYmFzZVByZWZpeDsKLSAgICAgIFN0cmluZyB4bWxuc0NvbG9uID0gInhtbG5zOiI7IC8vJE5PTi1OTFMtMSQKLSAgICAgIFN0cmluZyBhdHRyaWJ1dGVOYW1lID0geG1sbnNDb2xvbiArIHByZWZpeDsKLSAgICAgIGludCBjb3VudCA9IDA7Ci0gICAgICB3aGlsZSAocm9vdEVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGNvdW50Kys7Ci0gICAgICAgIHByZWZpeCA9IGJhc2VQcmVmaXggKyBjb3VudDsKLSAgICAgICAgYXR0cmlidXRlTmFtZSA9IHhtbG5zQ29sb24gKyBwcmVmaXg7Ci0gICAgICB9ICAgICAgCi0gICAgICByb290RWxlbWVudC5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSwgbmFtZXNwYWNlKTsgIAotICAgIH0gICAgCi0gICAgcmV0dXJuIHByZWZpeDsKLSAgfSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZEZhdWx0Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRGYXVsdENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTg1M2YwNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZEZhdWx0Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuTmFtZVV0aWw7Ci0KLQotcHVibGljIGZpbmFsIGNsYXNzIEFkZEZhdWx0Q29tbWFuZCBleHRlbmRzIEFkZE1lc3NhZ2VSZWZlcmVuY2VDb21tYW5kCi17Ci0gIHByaXZhdGUgRmF1bHQgb3JpZ2luYWxGYXVsdDsKLSAgCi0gIHB1YmxpYyBBZGRGYXVsdENvbW1hbmQoT3BlcmF0aW9uIG9wZXJhdGlvbiwgU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihvcGVyYXRpb24sbmFtZSk7Ci0gIH0KLQotICBwdWJsaWMgQWRkRmF1bHRDb21tYW5kKE9wZXJhdGlvbiBvcGVyYXRpb24sIFN0cmluZyBuYW1lLCBib29sZWFuIGNyZWF0ZU1lc3NhZ2UpCi0gIHsKLSAgICBzdXBlcihvcGVyYXRpb24sbmFtZSxjcmVhdGVNZXNzYWdlKTsKLSAgfQotICAKLSAgLyoKLSAgICogQ29uc3RydWN0b3IgdXNlZCB0byBjcmVhdGUgYSBGYXVsdCBiYXNlZCBvbiB0aGUgZ2l2ZW4gRmF1bHQuICBJbiBlc3NlbmNlLCB0aGlzIHdpbGwKLSAgICogY3JlYXRlIGEgY29weSBvZiB0aGUgZ2l2ZW4gRmF1bHQuCi0gICAqLwotICBwdWJsaWMgQWRkRmF1bHRDb21tYW5kKE9wZXJhdGlvbiBvcGVyYXRpb24sIEZhdWx0IG9yaWdpbmFsRmF1bHQsIFN0cmluZyBuYW1lKSB7Ci0gIAlzdXBlcihvcGVyYXRpb24sIG5hbWUsIGZhbHNlKTsKLSAgCQotICAJdGhpcy5vcmlnaW5hbEZhdWx0ID0gb3JpZ2luYWxGYXVsdDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgcnVuKCkKLSAgewotICAgIG1lc3NhZ2VSZWZlcmVuY2UgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRmF1bHQoKTsKLSAgICBtZXNzYWdlUmVmZXJlbmNlLnNldE5hbWUobmFtZSk7IAotICAgIG1lc3NhZ2VSZWZlcmVuY2Uuc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihvcGVyYXRpb24uZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLSAgICBvcGVyYXRpb24uYWRkRmF1bHQoKEZhdWx0KW1lc3NhZ2VSZWZlcmVuY2UpOwotICAgIAotICAgIC8vICBUQkQgLSBhZGQgYmluZGluZyBmYXVsdAotCi0gICAgaWYgKG9yaWdpbmFsRmF1bHQgPT0gbnVsbCkgewotICAgIAlpZiAoY3JlYXRlTWVzc2FnZSkKLSAgICAJCWNyZWF0ZU1lc3NhZ2UoKTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgCS8vIERvIG5lY2Vzc2FyeSBjb3B5aW5nIG9mIGRhdGEgZnJvbSBvcmlnaW5hbCBGYXVsdCB0byBuZXcgRmF1bHQKLSAgICAJaWYgKG9yaWdpbmFsRmF1bHQuZ2V0RU1lc3NhZ2UoKSAhPSBudWxsKSB7Ci0vLyAgICAJCVN0cmluZyBvcmlnaW5hbE1zZ05hbWUgPSBvcmlnaW5hbEZhdWx0LmdldEVNZXNzYWdlKCkuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLS8vICAgIAkJCi0vLyAgICAJCWJvb2xlYW4gZ2VuZWQgPSBmYWxzZTsKLS8vICAgIAkJaWYgKG9yaWdpbmFsRmF1bHQuZUNvbnRhaW5lcigpIGluc3RhbmNlb2YgT3BlcmF0aW9uKQotLy8gICAgCQkJZ2VuZWQgPSBTbWFydFJlbmFtZUFjdGlvbi5pc01lc3NhZ2VOYW1lR2VuZXJhdGVkKG9yaWdpbmFsTXNnTmFtZSwgKChPcGVyYXRpb24pIG9yaWdpbmFsRmF1bHQuZUNvbnRhaW5lcigpKS5nZXROYW1lKCksICIiKTsKLS8vICAgIAkJCi0vLyAgICAJCVN0cmluZyBuZXdNc2dOYW1lID0gIiI7Ci0vLyAgICAJCWlmIChnZW5lZCkgewotLy8gICAgCQkJbmV3TXNnTmFtZSA9IE5hbWVVdGlsLmJ1aWxkVW5pcXVlTWVzc2FnZU5hbWUob3BlcmF0aW9uLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSwgbWVzc2FnZVJlZmVyZW5jZSk7Ci0vLyAgICAJCX0KLS8vICAgIAkJZWxzZSB7Ci0vLyAgICAJCQlEZWZpbml0aW9uIGRlZmluaXRpb24gPSBvcGVyYXRpb24uZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotLy8gICAgCQkJTWVzc2FnZSB0TWVzc2FnZSA9IG9yaWdpbmFsRmF1bHQuZ2V0RU1lc3NhZ2UoKTsKLS8vICAgIAkJCW5ld01zZ05hbWUgPSBOYW1lVXRpbC5idWlsZFVuaXF1ZU1lc3NhZ2VOYW1lKGRlZmluaXRpb24sIHRNZXNzYWdlLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkpOwotLy8gICAgCQl9Ci0gICAgCQkKLSAgICAJCWNyZWF0ZU1lc3NhZ2Uob3JpZ2luYWxGYXVsdCwgTmFtZVV0aWwuYnVpbGRVbmlxdWVNZXNzYWdlTmFtZShvcGVyYXRpb24uZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLCBtZXNzYWdlUmVmZXJlbmNlKSk7Ci0gICAgCX0KLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkRmF1bHRQYXJhbWV0ZXJDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZEZhdWx0UGFyYW1ldGVyQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODgwNzJkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkRmF1bHRQYXJhbWV0ZXJDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuTmFtZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RNb2RlbEdyb3VwOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RQYXJ0aWNsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEVHlwZURlZmluaXRpb247Ci0KLXB1YmxpYyBjbGFzcyBBZGRGYXVsdFBhcmFtZXRlckNvbW1hbmQgZXh0ZW5kcyBBZGRCYXNlUGFyYW1ldGVyQ29tbWFuZCB7Ci0JcHJvdGVjdGVkIEZhdWx0IGZhdWx0OwotCXByaXZhdGUgU3RyaW5nIGZhdWx0TmFtZTsKLQkKLSAgICBwdWJsaWMgc3RhdGljIGludCBnZXRQYXJhbWV0ZXJQYXR0ZXJuRm9yRmF1bHQoT3BlcmF0aW9uIG9wZXJhdGlvbiwgRmF1bHQgZmF1bHQpIHsKLSAgICAJaW50IHBhdHRlcm4gPSAtMTsKLSAgICAJaWYgKGZhdWx0ICE9IG51bGwpIHsKLSAgICAJCXBhdHRlcm4gPSBnZXRQYXR0ZXJuKGZhdWx0LmdldEVNZXNzYWdlKCkpOwotICAgIAl9Ci0JCWlmIChwYXR0ZXJuID09IC0xKSB7Ci0JCQlwYXR0ZXJuID0gQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuZ2V0UGFyYW1ldGVyUGF0dGVybihvcGVyYXRpb24pOwotCQl9Ci0JCQotCQlyZXR1cm4gcGF0dGVybjsKLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSBzdGF0aWMgaW50IGdldFBhdHRlcm4oTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgCWludCBwYXR0ZXJuID0gLTE7Ci0JCWlmIChtZXNzYWdlICE9IG51bGwpIHsKLQkJCUl0ZXJhdG9yIHBhcnRzID0gbWVzc2FnZS5nZXRFUGFydHMoKS5pdGVyYXRvcigpOwotCQkJd2hpbGUgKHBhcnRzLmhhc05leHQoKSkgewotCQkJCVBhcnQgcGFydCA9IChQYXJ0KSBwYXJ0cy5uZXh0KCk7Ci0JCQkJaWYgKHBhcnQuZ2V0RWxlbWVudERlY2xhcmF0aW9uKCkgIT0gbnVsbCkgewotCQkJCQlwYXR0ZXJuID0gQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuUEFSVF9FTEVNRU5UOwotCi0JCQkJCVhTREVsZW1lbnREZWNsYXJhdGlvbiB4c2RFbGVtZW50ID0gcGFydC5nZXRFbGVtZW50RGVjbGFyYXRpb24oKTsKLQkJCQkJaWYgKGlzU2VxdWVuY2VQYXR0ZXJuKHhzZEVsZW1lbnQuZ2V0VHlwZURlZmluaXRpb24oKSkpIHsKLQkJCQkJCXBhdHRlcm4gPSBBZGRCYXNlUGFyYW1ldGVyQ29tbWFuZC5QQVJUX0VMRU1FTlRfU0VRX0VMRU1FTlQ7CQotCQkJCQl9CQkJCQkKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCWVsc2UgaWYgKHBhcnQuZ2V0VHlwZURlZmluaXRpb24oKSAhPSBudWxsKSB7Ci0JCQkJCXBhdHRlcm4gPSBBZGRCYXNlUGFyYW1ldGVyQ29tbWFuZC5QQVJUX1NJTVBMRVRZUEU7Ci0JCQkJCQotCQkJCQlpZiAocGFydC5nZXRUeXBlRGVmaW5pdGlvbigpIGluc3RhbmNlb2YgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKSB7Ci0JCQkJCQlwYXR0ZXJuID0gQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuUEFSVF9DT01QTEVYVFlQRTsKLQkJCQkJCQotCQkJCQkJWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uIHhzZFR5cGUgPSAoWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKSBwYXJ0LmdldFR5cGVEZWZpbml0aW9uKCk7Ci0JCQkJCQlpZiAoaXNTZXF1ZW5jZVBhdHRlcm4oeHNkVHlwZSkpIHsKLQkJCQkJCQlwYXR0ZXJuID0gQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuUEFSVF9DT01QTEVYVFlQRV9TRVFfRUxFTUVOVDsgCi0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCQotCQlyZXR1cm4gcGF0dGVybjsKLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1NlcXVlbmNlUGF0dGVybihYU0RUeXBlRGVmaW5pdGlvbiB0eXBlKSB7Ci0gICAgCWJvb2xlYW4gaXNTZXF1ZW5jZVBhdHRlcm4gPSBmYWxzZTsKLSAgICAJCi0gICAgCWlmICh0eXBlIGluc3RhbmNlb2YgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKSB7Ci0gICAgCQlYU0RDb21wbGV4VHlwZURlZmluaXRpb24gY29tcGxleFR5cGUgPSAoWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKSB0eXBlOwotCi0JICAgIAlpZiAoY29tcGxleFR5cGUuZ2V0Q29udGVudCgpIGluc3RhbmNlb2YgWFNEUGFydGljbGUpIHsKLQkJCQlYU0RQYXJ0aWNsZSBwYXJ0aWNsZSA9IChYU0RQYXJ0aWNsZSkgY29tcGxleFR5cGUuZ2V0Q29udGVudCgpOwotCQkJCWlmIChwYXJ0aWNsZS5nZXRDb250ZW50KCkgaW5zdGFuY2VvZiBYU0RNb2RlbEdyb3VwKSB7Ci0JCQkJCWlzU2VxdWVuY2VQYXR0ZXJuID0gdHJ1ZTsKLQkJCQl9Ci0JCQl9Ci0gICAgCX0KLSAgICAJCi0gICAgCXJldHVybiBpc1NlcXVlbmNlUGF0dGVybjsKLSAgICB9Ci0JCi0JcHVibGljIEFkZEZhdWx0UGFyYW1ldGVyQ29tbWFuZChPcGVyYXRpb24gb3BlcmF0aW9uLCBGYXVsdCBmYXVsdCkgewotCQlzdXBlcihvcGVyYXRpb24sIEFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kLlBBUlRfRUxFTUVOVCk7Ci0JCXRoaXMuZmF1bHQgPSBmYXVsdDsKLQl9Ci0JCi0JLyoKLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCWlmIChmYXVsdCA9PSBudWxsKSB7Ci0JCQlBZGRGYXVsdENvbW1hbmQgY29tbWFuZCA9IG5ldyBBZGRGYXVsdENvbW1hbmQob3BlcmF0aW9uLCBnZXRGYXVsdE5hbWUoKSk7Ci0JCQljb21tYW5kLnJ1bigpOwotCQkJZmF1bHQgPSAoRmF1bHQpIGNvbW1hbmQuZ2V0V1NETEVsZW1lbnQoKTsKLQkJfQotCQkKLQkJUGFydCBwYXJ0ID0gY3JlYXRlV1NETENvbXBvbmVudHMoZmF1bHQpOwotCQluZXdQYXJ0ID0gcGFydDsKLQkJCi0JCS8vIENyZWF0ZSBuZWNlc3NhcnkgWFNEIE9iamVjdHMgc3RhcnRpbmcgd2l0aCB0aGUgUGFydCByZWZlcmVuY2UKLQkJbmV3WFNERWxlbWVudCA9IGNyZWF0ZVhTRE9iamVjdHMocGFydCk7Ci0JfQotCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRBbm9ueW1vdXNYU0RFbGVtZW50QmFzZU5hbWUoKSB7Ci0JCWlmIChuZXdBbm9ueW1vdXNYU0RFbGVtZW50TmFtZSA9PSBudWxsKSB7Ci0JCQluZXdBbm9ueW1vdXNYU0RFbGVtZW50TmFtZSA9IG9wZXJhdGlvbi5nZXROYW1lKCkgKyAiXyIgKyBnZXRGYXVsdE5hbWUoKTsgIC8vJE5PTi1OTFMtMSQKLQkJfQotCQkKLQkJcmV0dXJuIG5ld0Fub255bW91c1hTREVsZW1lbnROYW1lOwotCX0KLQkKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldE5ld1hTREVsZW1lbnRCYXNlTmFtZSgpIHsKLQkJaWYgKG5ld1hTREVsZW1lbnROYW1lID09IG51bGwpIHsKLQkJCW5ld1hTREVsZW1lbnROYW1lID0gb3BlcmF0aW9uLmdldE5hbWUoKSArICJfIiArIGdldEZhdWx0TmFtZSgpOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJCi0JCXJldHVybiBuZXdYU0RFbGVtZW50TmFtZTsKLQl9Ci0JCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRXU0RMTWVzc2FnZU5hbWUoKSB7Ci0JCWlmIChuZXdXU0RMTWVzc2FnZU5hbWUgPT0gbnVsbCkgewotCQkJbmV3V1NETE1lc3NhZ2VOYW1lID0gb3BlcmF0aW9uLmdldE5hbWUoKSArICJfIiArIGdldEZhdWx0TmFtZSgpICsgIk1zZyI7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJTGlzdCB1c2VkTmFtZXMgPSBOYW1lVXRpbC5nZXRVc2VkTWVzc2FnZU5hbWVzKG9wZXJhdGlvbi5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotCQkJbmV3V1NETE1lc3NhZ2VOYW1lID0gTmFtZVV0aWwuZ2V0VW5pcXVlTmFtZUhlbHBlcihuZXdXU0RMTWVzc2FnZU5hbWUsIHVzZWROYW1lcyk7Ci0JCX0KLQkJCi0JCXJldHVybiBuZXdXU0RMTWVzc2FnZU5hbWU7Ci0JfQotCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRXU0RMUGFydE5hbWUoKSB7Ci0JCWlmIChuZXdXU0RMUGFydE5hbWUgPT0gbnVsbCkgewotCQkJbmV3V1NETFBhcnROYW1lID0gZ2V0RmF1bHROYW1lKCk7Ci0JCX0KLQkJCi0JCXJldHVybiBuZXdXU0RMUGFydE5hbWU7Ci0JfQotCQotCXByaXZhdGUgU3RyaW5nIGdldEZhdWx0TmFtZSgpIHsKLQkJaWYgKGZhdWx0TmFtZSA9PSBudWxsKSB7Ci0JCQlpZiAoZmF1bHQgIT0gbnVsbCkgewotCQkJCWZhdWx0TmFtZSA9IGZhdWx0LmdldE5hbWUoKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCWZhdWx0TmFtZSA9IE5hbWVVdGlsLmdldEZhdWx0TmFtZShvcGVyYXRpb24pOwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIGZhdWx0TmFtZTsKLQl9Ci0JCi0JcHVibGljIE1lc3NhZ2VSZWZlcmVuY2UgZ2V0TWVzc2FnZVJlZmVyZW5jZSgpIHsKLQkJcmV0dXJuIGZhdWx0OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkSW1wb3J0Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRJbXBvcnRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0MzlkYmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRJbXBvcnRDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRmFjdG9yeTsKLQotcHVibGljIGZpbmFsIGNsYXNzIEFkZEltcG9ydENvbW1hbmQgZXh0ZW5kcyBXU0RMRWxlbWVudENvbW1hbmQKLXsKLSAgcHJpdmF0ZSBEZWZpbml0aW9uIGRlZmluaXRpb247Ci0gIHByaXZhdGUgU3RyaW5nIG5hbWVzcGFjZTsKLSAgcHJpdmF0ZSBTdHJpbmcgbG9jYXRpb247Ci0gIHByaXZhdGUgSW1wb3J0IGltcG9ydEVsZW1lbnQ7Ci0gIAotICBwdWJsaWMgQWRkSW1wb3J0Q29tbWFuZAotICAJKERlZmluaXRpb24gZGVmaW5pdGlvbiwgIAotICAJIFN0cmluZyBuYW1lc3BhY2UsCi0gIAkgU3RyaW5nIGxvY2F0aW9uKQotICB7Ci0gICAgdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjsKLSAgICB0aGlzLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTsKLSAgICB0aGlzLmxvY2F0aW9uID0gbG9jYXRpb247Ci0gIH0KLSAgCi0gIHB1YmxpYyBXU0RMRWxlbWVudCBnZXRXU0RMRWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gaW1wb3J0RWxlbWVudDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJ1bigpCi0gIHsKLSAgICBpbXBvcnRFbGVtZW50ID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUltcG9ydCgpOwotICAgIGltcG9ydEVsZW1lbnQuc2V0TmFtZXNwYWNlVVJJKG5hbWVzcGFjZSk7Ci0gICAgaW1wb3J0RWxlbWVudC5zZXRMb2NhdGlvblVSSShsb2NhdGlvbik7Ci0gICAgaW1wb3J0RWxlbWVudC5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKGRlZmluaXRpb24pOwotICAgIGRlZmluaXRpb24uYWRkSW1wb3J0KGltcG9ydEVsZW1lbnQpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXROYW1lc3BhY2VVUkkoU3RyaW5nIG5hbWVzcGFjZSkKLSAgewotICAgIHRoaXMubmFtZXNwYWNlID0gbmFtZXNwYWNlOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRMb2NhdGlvblVSSShTdHJpbmcgbG9jYXRpb24pCi0gIHsKLSAgICB0aGlzLmxvY2F0aW9uID0gbG9jYXRpb247Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkSW5wdXRDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZElucHV0Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYjU3NWYyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkSW5wdXRDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFjdGlvbnMuU21hcnRSZW5hbWVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5OYW1lVXRpbDsKLQotCi1wdWJsaWMgZmluYWwgY2xhc3MgQWRkSW5wdXRDb21tYW5kIGV4dGVuZHMgQWRkTWVzc2FnZVJlZmVyZW5jZUNvbW1hbmQKLXsKLSAgcHJpdmF0ZSBJbnB1dCBvcmlnaW5hbElucHV0OwotCQotICBwdWJsaWMgQWRkSW5wdXRDb21tYW5kKE9wZXJhdGlvbiBvcGVyYXRpb24sIFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIob3BlcmF0aW9uLG5hbWUpOwotICB9Ci0KLSAgcHVibGljIEFkZElucHV0Q29tbWFuZChPcGVyYXRpb24gb3BlcmF0aW9uLCBTdHJpbmcgbmFtZSwgYm9vbGVhbiBjcmVhdGVNZXNzYWdlKQotICB7Ci0gICAgc3VwZXIob3BlcmF0aW9uLG5hbWUsY3JlYXRlTWVzc2FnZSk7Ci0gIH0KLSAgCi0gIC8qCi0gICAqIENvbnN0cnVjdG9yIHVzZWQgdG8gY3JlYXRlIGFuIElucHV0IGJhc2VkIG9uIHRoZSBnaXZlbiBJbnB1dC4gIEluIGVzc2VuY2UsIHRoaXMgd2lsbAotICAgKiBjcmVhdGUgYSBjb3B5IG9mIHRoZSBnaXZlbiBJbnB1dC4KLSAgICovCi0gIHB1YmxpYyBBZGRJbnB1dENvbW1hbmQoT3BlcmF0aW9uIG9wZXJhdGlvbiwgSW5wdXQgb3JpZ2luYWxJbnB1dCwgU3RyaW5nIG5hbWUpIHsKLSAgCXN1cGVyKG9wZXJhdGlvbiwgbmFtZSwgZmFsc2UpOwotICAJCi0gIAl0aGlzLm9yaWdpbmFsSW5wdXQgPSBvcmlnaW5hbElucHV0OwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBydW4oKQotICB7Ci0gICAgbWVzc2FnZVJlZmVyZW5jZSA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVJbnB1dCgpOwotICAvLyAgbWVzc2FnZVJlZmVyZW5jZS5zZXROYW1lKG5hbWUpOyAKLSAgICBtZXNzYWdlUmVmZXJlbmNlLnNldEVuY2xvc2luZ0RlZmluaXRpb24ob3BlcmF0aW9uLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0gICAgb3BlcmF0aW9uLnNldElucHV0KChJbnB1dCltZXNzYWdlUmVmZXJlbmNlKTsKLSAgICAKLSAgICAvLyBUQkQgLSBhZGQgYmluZGluZyBpbnB1dCAKLSAgICAKLSAgICBpZiAob3JpZ2luYWxJbnB1dCA9PSBudWxsKSB7Ci0gICAgCWlmIChjcmVhdGVNZXNzYWdlKQotICAgIAkJY3JlYXRlTWVzc2FnZSgpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAJLy8gRG8gbmVjZXNzYXJ5IGNvcHlpbmcgb2YgZGF0YSBmcm9tIG9yaWdpbmFsIElucHV0IHRvIG5ldyBJbnB1dAotICAgIAlpZiAob3JpZ2luYWxJbnB1dC5nZXRFTWVzc2FnZSgpICE9IG51bGwpIHsKLSAgICAJCVN0cmluZyBvcmlnaW5hbE1zZ05hbWUgPSBvcmlnaW5hbElucHV0LmdldEVNZXNzYWdlKCkuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLSAgICAJCQotICAgIAkJYm9vbGVhbiBnZW5lZCA9IGZhbHNlOwotICAgIAkJaWYgKG9yaWdpbmFsSW5wdXQuZUNvbnRhaW5lcigpIGluc3RhbmNlb2YgT3BlcmF0aW9uKQotICAgIAkJCWdlbmVkID0gU21hcnRSZW5hbWVBY3Rpb24uaXNNZXNzYWdlTmFtZUdlbmVyYXRlZChvcmlnaW5hbE1zZ05hbWUsICgoT3BlcmF0aW9uKSBvcmlnaW5hbElucHV0LmVDb250YWluZXIoKSkuZ2V0TmFtZSgpLCAiUmVxdWVzdCIpOyAvLyROT04tTkxTLTEkCi0gICAgCQkKLSAgICAJCVN0cmluZyBuZXdNc2dOYW1lID0gIiI7IC8vJE5PTi1OTFMtMSQKLSAgICAJCWlmIChnZW5lZCkgewotICAgIAkJCW5ld01zZ05hbWUgPSBOYW1lVXRpbC5idWlsZFVuaXF1ZU1lc3NhZ2VOYW1lKG9wZXJhdGlvbi5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCksIG1lc3NhZ2VSZWZlcmVuY2UpOwotICAgIAkJfQotICAgIAkJZWxzZSB7Ci0gICAgCQkJRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gb3BlcmF0aW9uLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLSAgICAJCQlNZXNzYWdlIHRNZXNzYWdlID0gb3JpZ2luYWxJbnB1dC5nZXRFTWVzc2FnZSgpOwotICAgIAkJCW5ld01zZ05hbWUgPSBOYW1lVXRpbC5idWlsZFVuaXF1ZU1lc3NhZ2VOYW1lKGRlZmluaXRpb24sIHRNZXNzYWdlLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkpOwotICAgIAkJfQotCi0gICAgCQljcmVhdGVNZXNzYWdlKG9yaWdpbmFsSW5wdXQsIG5ld01zZ05hbWUpOwotICAgIAl9Ci0gICAgfQotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRJbnB1dFBhcmFtZXRlckNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkSW5wdXRQYXJhbWV0ZXJDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmN2QzMTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRJbnB1dFBhcmFtZXRlckNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLnZpc2l0b3IuVzExRmluZElubmVyRWxlbWVudFZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5Db21wb25lbnRSZWZlcmVuY2VVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuTmFtZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5YU0RDb21wb25lbnRIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETW9kZWxHcm91cDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEUGFydGljbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEVHlwZURlZmluaXRpb247Ci0KLXB1YmxpYyBjbGFzcyBBZGRJbnB1dFBhcmFtZXRlckNvbW1hbmQgZXh0ZW5kcyBBZGRCYXNlUGFyYW1ldGVyQ29tbWFuZCB7Ci0JcHJvdGVjdGVkIGJvb2xlYW4gY3JlYXRlWFNET2JqZWN0cyA9IHRydWU7Ci0JcHJvdGVjdGVkIGJvb2xlYW4gcmV1c2VFeGlzdGluZ01lc3NhZ2UgPSBmYWxzZTsKLQlwcml2YXRlIElucHV0IGlucHV0OwotCXB1YmxpYyBBZGRJbnB1dFBhcmFtZXRlckNvbW1hbmQoT3BlcmF0aW9uIG9wZXJhdGlvbiwgaW50IHN0eWxlKSB7Ci0JCXN1cGVyKG9wZXJhdGlvbiwgc3R5bGUpOwotCX0KLQotCXB1YmxpYyBBZGRJbnB1dFBhcmFtZXRlckNvbW1hbmQoT3BlcmF0aW9uIG9wZXJhdGlvbiwgaW50IHN0eWxlLCBib29sZWFuIHJldXNlTWVzc2FnZSkgewotCQlzdXBlcihvcGVyYXRpb24sIHN0eWxlKTsKLQkJcmV1c2VFeGlzdGluZ01lc3NhZ2UgPSByZXVzZU1lc3NhZ2U7Ci0JfQotCQotCS8qCi0JICogCi0JICovCi0JcHVibGljIHZvaWQgcnVuKCkgewotCQlQYXJ0IHBhcnQgPSBudWxsOwotCQlpZiAob3BlcmF0aW9uLmdldEVJbnB1dCgpICE9IG51bGwpIHsKLQkJCWlucHV0ID0gb3BlcmF0aW9uLmdldEVJbnB1dCgpOwotCQl9Ci0JCWVsc2UgewotCQkJQWRkSW5wdXRDb21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkSW5wdXRDb21tYW5kKG9wZXJhdGlvbiwgbnVsbCk7Ci0JCQljb21tYW5kLnJ1bigpOwotCQkJaW5wdXQgPSAoSW5wdXQpIGNvbW1hbmQuZ2V0V1NETEVsZW1lbnQoKTsKLQkJfQotCQkKLQkJaWYgKHN0eWxlID09IEFkZEJhc2VQYXJhbWV0ZXJDb21tYW5kLlBBUlRfRUxFTUVOVF9TRVFfRUxFTUVOVCkgewotCQkJcGFydCA9IGNyZWF0ZURvY0xpdFdyYXBwZWRXU0RMQ29tcG9uZW50cyhpbnB1dCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlwYXJ0ID0gY3JlYXRlV1NETENvbXBvbmVudHMoaW5wdXQpOwotCQl9Ci0JCQotCQluZXdQYXJ0ID0gcGFydDsKLQkJLy8gQ3JlYXRlIG5lY2Vzc2FyeSBYU0QgT2JqZWN0cyBzdGFydGluZyB3aXRoIHRoZSBQYXJ0IHJlZmVyZW5jZQotCQlpZiAoY3JlYXRlWFNET2JqZWN0cykKLQkJCW5ld1hTREVsZW1lbnQgPSBjcmVhdGVYU0RPYmplY3RzKHBhcnQpOwotCX0KLQkKLQlwcm90ZWN0ZWQgUGFydCBjcmVhdGVEb2NMaXRXcmFwcGVkV1NETENvbXBvbmVudHMoTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmKSB7Ci0JCU1lc3NhZ2UgbWVzc2FnZSA9IG1lc3NhZ2VSZWYuZ2V0RU1lc3NhZ2UoKTsKLQkJUGFydCBwYXJ0ID0gbnVsbDsKLQotCQlpZiAocmV1c2VFeGlzdGluZ01lc3NhZ2UgJiYgbWVzc2FnZSA9PSBudWxsKSB7Ci0JCQkvLyBTZWUgaWYgd2UgY2FuIHVzZSBhbiBleGlzdGluZyBNZXNzYWdlCi0JCQlNZXNzYWdlIGV4aXN0aW5nTWVzc2FnZSA9IG51bGw7Ci0JCQlTdHJpbmcgbWVzc2FnZU5hbWUgPSBnZXRJZGVhbE1lc3NhZ2VOYW1lKG1lc3NhZ2VSZWYpOwotCQkJSXRlcmF0b3IgbWVzc2FnZXMgPSBtZXNzYWdlUmVmLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKS5nZXRFTWVzc2FnZXMoKS5pdGVyYXRvcigpOwotCQkJd2hpbGUgKG1lc3NhZ2VzLmhhc05leHQoKSkgewotCQkJCU1lc3NhZ2UgaXRlbSA9IChNZXNzYWdlKSBtZXNzYWdlcy5uZXh0KCk7Ci0JCQkJUU5hbWUgaXRlbU5hbWUgPSBpdGVtLmdldFFOYW1lKCk7Ci0JCQkJaWYgKGl0ZW1OYW1lICE9IG51bGwgJiYgaXRlbU5hbWUuZ2V0TG9jYWxQYXJ0KCkgIT0gbnVsbCAmJiBtZXNzYWdlTmFtZS5lcXVhbHMoaXRlbU5hbWUuZ2V0TG9jYWxQYXJ0KCkpKSB7Ci0JCQkJCWV4aXN0aW5nTWVzc2FnZSA9IGl0ZW07Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQotCQkJaWYgKGV4aXN0aW5nTWVzc2FnZSAhPSBudWxsKSB7Ci0JCQkJaWYgKGV4aXN0aW5nTWVzc2FnZS5nZXRFUGFydHMoKS5zaXplKCkgPiAwKSB7Ci0JCQkJCS8vIFNlZSBpZiBleGlzdGluZyBNZXNzYWdlIGhhcyBhIFBhcnQgcmVmZXJlbmNpbmcgYW4gWFNEIEVsZW1lbnQgd2l0aCB0aGUgcHJvcGVyIG5hbWUKLQkJCQkJUGFydCBleGlzdGluZ1BhcnQgPSAoUGFydCkgZXhpc3RpbmdNZXNzYWdlLmdldEVQYXJ0cygpLmdldCgwKTsKLQkJCQkJaWYgKCEoZXhpc3RpbmdQYXJ0LmdldE5hbWUoKS5lcXVhbHMoZ2V0RG9jTGl0V3JhcHBlZFBhcnROYW1lKCkpKSkgewotCQkJCQkJbWVzc2FnZSA9IG51bGw7Ci0JCQkJCX0KLQkJCQkJZWxzZSB7Ci0JCQkJCQlYU0RFbGVtZW50RGVjbGFyYXRpb24gZXhpc3RpbmdFbGVtZW50ID0gZXhpc3RpbmdQYXJ0LmdldEVsZW1lbnREZWNsYXJhdGlvbigpOwotCQkJCQkJaWYgKGV4aXN0aW5nRWxlbWVudCAhPSBudWxsICYmIGV4aXN0aW5nRWxlbWVudC5nZXROYW1lKCkuZXF1YWxzKG9wZXJhdGlvbi5nZXROYW1lKCkpKSB7Ci0JCQkJCQkJLy8gVGhlcmUgaXMgYW4gZXhpc3RpbmcgWFNEIEVsZW1lbnQgd2l0aCB0aGUgcHJvcGVyIG5hbWUKLQkJCQkJCQkvLyBTZWUgaWYgdGhlIFhTRCBFbGVtZW50IGhhcyBhbiBhbm9ueW1vdXMgdHlwZSB3aXRoIGEgc2VxdWVuY2UgYW5kIGFuIFhTRCBFbGVtZW50Ci0JCQkJCQkJVzExRmluZElubmVyRWxlbWVudFZpc2l0b3IgdmlzaXRvciA9IG5ldyBXMTFGaW5kSW5uZXJFbGVtZW50VmlzaXRvcigpOwotCQkJCQkJCVhTREVsZW1lbnREZWNsYXJhdGlvbiBpbm5lckVsZW1lbnQgPSB2aXNpdG9yLmdldElubmVyWFNERWxlbWVudChleGlzdGluZ0VsZW1lbnQpOwotCQkJCQkJCWlmICghaW5uZXJFbGVtZW50LmVxdWFscyhleGlzdGluZ0VsZW1lbnQpKSB7Ci0JCQkJCQkJCS8vIEZvdW5kIGFuIGV4aXN0aW5nIGlubmVyIFhTRCBFbGVtZW50Ci0JCQkJCQkJCWNyZWF0ZVhTRE9iamVjdHMgPSBmYWxzZTsKLQotCQkJCQkJCQkvLyBzZXQgdGhlIE1lc3NhZ2VSZWZlcmVuY2UgLS0+IE1lc3NhZ2UgcmVmZXJlbmNlCi0JCQkJCQkJCW1lc3NhZ2VSZWYuc2V0RU1lc3NhZ2UoZXhpc3RpbmdNZXNzYWdlKTsKLQkJCQkJCQkJbWVzc2FnZSA9IGV4aXN0aW5nTWVzc2FnZTsKLQkJCQkJCQl9Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQlpZiAobWVzc2FnZSA9PSBudWxsIHx8IG1lc3NhZ2UuZUNvbnRhaW5lcigpID09IG51bGwpIHsKLQkJCS8vIENyZWF0ZSBNZXNzYWdlCi0JCQlBZGRNZXNzYWdlQ29tbWFuZCBjb21tYW5kID0gbmV3IEFkZE1lc3NhZ2VDb21tYW5kKG1lc3NhZ2VSZWYuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLCBnZXRXU0RMTWVzc2FnZU5hbWUoKSk7Ci0JCQljb21tYW5kLnJ1bigpOwotCQkJbWVzc2FnZSA9IChNZXNzYWdlKSBjb21tYW5kLmdldFdTRExFbGVtZW50KCk7Ci0JCQltZXNzYWdlUmVmLnNldEVNZXNzYWdlKG1lc3NhZ2UpOwotCQl9Ci0KLQotCQlpZiAobWVzc2FnZS5nZXRFUGFydHMoKS5zaXplKCkgPT0gMCkgewotCQkJLy8gQ3JlYXRlIFBhcnQKLQkJCVN0cmluZyBwYXJ0TmFtZSA9IGdldERvY0xpdFdyYXBwZWRQYXJ0TmFtZSgpOwotCQkJQWRkUGFydENvbW1hbmQgY29tbWFuZCA9IG5ldyBBZGRQYXJ0Q29tbWFuZChtZXNzYWdlLCBwYXJ0TmFtZSk7Ci0JCQljb21tYW5kLnJ1bigpOwotCQkJcGFydCA9IChQYXJ0KSBjb21tYW5kLmdldFdTRExFbGVtZW50KCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlwYXJ0ID0gKFBhcnQpIG1lc3NhZ2UuZ2V0RVBhcnRzKCkuZ2V0KDApOwotCQl9Ci0JCWZvcm1hdENoaWxkKG1lc3NhZ2UuZ2V0RWxlbWVudCgpKTsKLQotCQlyZXR1cm4gcGFydDsKLQl9Ci0JCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRBbm9ueW1vdXNYU0RFbGVtZW50QmFzZU5hbWUoKSB7Ci0JCWlmIChuZXdBbm9ueW1vdXNYU0RFbGVtZW50TmFtZSA9PSBudWxsKSB7Ci0JCQlpZiAodGhpcy5zdHlsZSA9PSBBZGRCYXNlUGFyYW1ldGVyQ29tbWFuZC5QQVJUX0VMRU1FTlRfU0VRX0VMRU1FTlQpIHsKLQkJCQluZXdBbm9ueW1vdXNYU0RFbGVtZW50TmFtZSA9IG9wZXJhdGlvbi5nZXROYW1lKCk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQluZXdBbm9ueW1vdXNYU0RFbGVtZW50TmFtZSA9IGdldFdTRExQYXJ0TmFtZSgpOwotCQkJfQotCQl9Ci0JCQotCQlyZXR1cm4gbmV3QW5vbnltb3VzWFNERWxlbWVudE5hbWU7Ci0JfQotCQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0TmV3WFNERWxlbWVudEJhc2VOYW1lKCkgewotCQlpZiAobmV3WFNERWxlbWVudE5hbWUgPT0gbnVsbCkgewotCQkJbmV3WFNERWxlbWVudE5hbWUgPSAiaW4iOyAvLyROT04tTkxTLTEkCi0vLwkJCW5ld1hTREVsZW1lbnROYW1lID0gZ2V0V1NETFBhcnROYW1lKCk7Ci0JCX0KLQotCQlyZXR1cm4gbmV3WFNERWxlbWVudE5hbWU7Ci0JfQotCQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0V1NETE1lc3NhZ2VOYW1lKCkgewotCQlpZiAobmV3V1NETE1lc3NhZ2VOYW1lID09IG51bGwpIHsKLQkJCWlmIChvcGVyYXRpb24uZ2V0RUlucHV0KCkgIT0gbnVsbCkgewotCQkJCW5ld1dTRExNZXNzYWdlTmFtZT0gTmFtZVV0aWwuZ2V0TWVzc2FnZU5hbWUob3BlcmF0aW9uLmdldEVJbnB1dCgpKTsKLQkJCX0KLQkJfQotCQkKLQkJcmV0dXJuIG5ld1dTRExNZXNzYWdlTmFtZTsKLQl9Ci0KLQlwcm90ZWN0ZWQgU3RyaW5nIGdldFdTRExQYXJ0TmFtZSgpIHsKLQkJaWYgKG5ld1dTRExQYXJ0TmFtZSA9PSBudWxsKSB7Ci0JCQluZXdXU0RMUGFydE5hbWUgID0gTmFtZVV0aWwuZ2V0UGFydE5hbWUob3BlcmF0aW9uLmdldEVJbnB1dCgpKTsJCQkKLQkJfQotCQkKLQkJcmV0dXJuIG5ld1dTRExQYXJ0TmFtZTsKLQl9Ci0KLQlwcm90ZWN0ZWQgWFNERWxlbWVudERlY2xhcmF0aW9uIGNyZWF0ZVBhcnRFbGVtZW50U2VxRWxlbWVudFBhdHRlcm4oUGFydCBwYXJ0LCBYU0RFbGVtZW50RGVjbGFyYXRpb24gcGFydEVsZW1lbnQpIHsKLQkJWFNERWxlbWVudERlY2xhcmF0aW9uIHJldHVybmVkWFNERWxlbWVudCA9IG51bGw7Ci0KLQkJWFNERWxlbWVudERlY2xhcmF0aW9uIG9yaWdpbmFsRWxlbWVudCA9IG51bGw7Ci0JCVhTREVsZW1lbnREZWNsYXJhdGlvbiBhbm9uWFNERWxlbWVudCA9IG51bGw7Ci0KLQkJLy8gQ3JlYXRlIHRoZSBYU0RFbGVtZW50IChhbm9ueW1vdXMpIHJlZmVyZW5jZWQgYnkgdGhlIFBhcnQgaWYgbmVjZXNzYXJ5Ci0JCWlmIChwYXJ0RWxlbWVudCA9PSBudWxsIHx8IHBhcnRFbGVtZW50LmdldEFub255bW91c1R5cGVEZWZpbml0aW9uKCkgPT0gbnVsbCkgewotCQkJLy9GaW5kIGFuIGV4aXN0aW5nIFhTREVsZW1lbnQgdG8gdXNlIGlmIHBvc3NpYmxlCi0JCQlYU0RFbGVtZW50RGVjbGFyYXRpb24gZXhpc3RpbmdFbGVtZW50ID0gbnVsbDsKLQkJCVN0cmluZyBpZGVhbEVsZW1lbnROYW1lID0gZ2V0QW5vbnltb3VzWFNERWxlbWVudEJhc2VOYW1lKCk7Ci0JCQlYU0RTY2hlbWEgc2NoZW1hID0gWFNEQ29tcG9uZW50SGVscGVyLmdldFhTRFNjaGVtYShwYXJ0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0JCQlpZiAoc2NoZW1hICE9IG51bGwpIHsKLQkJCQlJdGVyYXRvciBpdCA9IHNjaGVtYS5nZXRFbGVtZW50RGVjbGFyYXRpb25zKCkuaXRlcmF0b3IoKTsKLQkJCQl3aGlsZSAoZXhpc3RpbmdFbGVtZW50ID09IG51bGwgJiYgaXQuaGFzTmV4dCgpKSB7Ci0JCQkJCVhTREVsZW1lbnREZWNsYXJhdGlvbiBpdGVtID0gKFhTREVsZW1lbnREZWNsYXJhdGlvbikgaXQubmV4dCgpOwotCQkJCQlpZiAoaXRlbS5nZXROYW1lKCkuZXF1YWxzKGlkZWFsRWxlbWVudE5hbWUpKSB7Ci0JCQkJCQkvLyBmb3VuZCBhbiBlbGVtZW50IHdlIGNhbiB1c2UuICBDb25maXJtIGl0IGhhcyBhIGRvYy1saXQtd3JhcHBlZCBwYXR0ZXJuCi0JCQkJCQkvLyBTZWUgaWYgdGhlIFhTRCBFbGVtZW50IGhhcyBhbiBhbm9ueW1vdXMgdHlwZSB3aXRoIGEgc2VxdWVuY2UgYW5kIGFuIFhTRCBFbGVtZW50Ci0JCQkJCQlleGlzdGluZ0VsZW1lbnQgPSBpdGVtOwotCi0JCQkJCQlYU0RUeXBlRGVmaW5pdGlvbiB4c2RUeXBlID0gaXRlbS5nZXRBbm9ueW1vdXNUeXBlRGVmaW5pdGlvbigpOwotCQkJCQkJaWYgKHhzZFR5cGUgIT0gbnVsbCkgewotCQkJCQkJCUxpc3QgY29udGVudHMgPSB4c2RUeXBlLmVDb250ZW50cygpOwotCQkJCQkJCWlmIChjb250ZW50cy5zaXplKCkgPiAwICYmIGNvbnRlbnRzLmdldCgwKSBpbnN0YW5jZW9mIFhTRFBhcnRpY2xlKSB7Ci0JCQkJCQkJCVhTRFBhcnRpY2xlIHBhcnRpY2xlID0gKFhTRFBhcnRpY2xlKSBjb250ZW50cy5nZXQoMCk7Ci0JCQkJCQkJCUxpc3QgcGFydGljbGVDb250ZW50cyA9IHBhcnRpY2xlLmVDb250ZW50cygpOwotCQkJCQkJCQlpZiAocGFydGljbGVDb250ZW50cy5zaXplKCkgPiAwICYmIHBhcnRpY2xlQ29udGVudHMuZ2V0KDApIGluc3RhbmNlb2YgWFNETW9kZWxHcm91cCkgewotCQkJCQkJCQkJWFNETW9kZWxHcm91cCBtb2RlbEdyb3VwID0gKFhTRE1vZGVsR3JvdXApIHBhcnRpY2xlQ29udGVudHMuZ2V0KDApOwotCQkJCQkJCQkJTGlzdCBtb2RlbENvbnRlbnRzID0gbW9kZWxHcm91cC5lQ29udGVudHMoKTsKLQkJCQkJCQkJCWlmIChtb2RlbENvbnRlbnRzLnNpemUoKSA+IDAgJiYgbW9kZWxDb250ZW50cy5nZXQoMCkgaW5zdGFuY2VvZiBYU0RQYXJ0aWNsZSkgewotCQkJCQkJCQkJCVhTRFBhcnRpY2xlIGlubmVyUGFydGljbGUgPSAoWFNEUGFydGljbGUpIG1vZGVsQ29udGVudHMuZ2V0KDApOwotCQkJCQkJCQkJCUxpc3QgaW5uZXJDb250ZW50cyA9IGlubmVyUGFydGljbGUuZUNvbnRlbnRzKCk7Ci0JCQkJCQkJCQkJaWYgKGlubmVyQ29udGVudHMuc2l6ZSgpID4gMCAmJiBpbm5lckNvbnRlbnRzLmdldCgwKSBpbnN0YW5jZW9mIFhTREVsZW1lbnREZWNsYXJhdGlvbikgewotCQkJCQkJCQkJCQkvLyBpbm5lciBYU0QgRWxlbWVudCBleGlzdHMKLQkJCQkJCQkJCQkJLy8gcmV1c2UgZXhpc3RpbmcgZWxlbWVudAotCQkJCQkJCQkJCQlTdHJpbmcgcHJlZml4ZWROYW1lID0gZ2V0UHJlZml4ZWRDb21wb25lbnROYW1lKHBhcnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLCBleGlzdGluZ0VsZW1lbnQpOwotCQkJCQkJCQkJCQlDb21wb25lbnRSZWZlcmVuY2VVdGlsLnNldENvbXBvbmVudFJlZmVyZW5jZShwYXJ0LCBmYWxzZSwgcHJlZml4ZWROYW1lKTsKLQkJCQkJCQkJCQkJcmV0dXJuIGV4aXN0aW5nRWxlbWVudDsKLQkJCQkJCQkJCQl9Ci0JCQkJCQkJCQl9Ci0JCQkJCQkJCX0KLQkJCQkJCQl9Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0KLQkJCWlmIChleGlzdGluZ0VsZW1lbnQgPT0gbnVsbCkgewotCQkJCWFub25YU0RFbGVtZW50ID0gWFNEQ29tcG9uZW50SGVscGVyLmNyZWF0ZUFub255bW91c1hTREVsZW1lbnREZWZpbml0aW9uKGdldEFub255bW91c1hTREVsZW1lbnRCYXNlTmFtZSgpLCBwYXJ0KTsKLS8vCQkJCXBhcnQuc2V0RWxlbWVudERlY2xhcmF0aW9uKGFub25YU0RFbGVtZW50KTsKLQkJCQlTdHJpbmcgcHJlZml4ZWROYW1lID0gZ2V0UHJlZml4ZWRDb21wb25lbnROYW1lKHBhcnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLCBhbm9uWFNERWxlbWVudCk7Ci0JCQkJQ29tcG9uZW50UmVmZXJlbmNlVXRpbC5zZXRDb21wb25lbnRSZWZlcmVuY2UocGFydCwgZmFsc2UsIHByZWZpeGVkTmFtZSk7Ci0JCQkJcGFydC5zZXRUeXBlRGVmaW5pdGlvbihudWxsKTsKLQotCQkJCWlmIChwYXJ0RWxlbWVudCAhPSBudWxsICYmIHBhcnRFbGVtZW50LmdldFNjaGVtYSgpICE9IG51bGwpIHsKLQkJCQkJb3JpZ2luYWxFbGVtZW50ID0gcGFydEVsZW1lbnQ7Ci0JCQkJCS8vIFJlbW92ZSB0aGUgJ29yaWdpbmFsJyBYU0RFbGVtZW50IGFzIGEgR2xvYmFsIEVsZW1lbnQKLQkJCQkJcGFydEVsZW1lbnQuZ2V0U2NoZW1hKCkuZ2V0Q29udGVudHMoKS5yZW1vdmUocGFydEVsZW1lbnQpOwotCQkJCX0KLQkJCX0KLQkJCWVsc2UgewotCQkJCWFub25YU0RFbGVtZW50ID0gZXhpc3RpbmdFbGVtZW50OwotCQkJCS8vIHJldXNlIGV4aXN0aW5nIGVsZW1lbnQKLQkJCQlTdHJpbmcgcHJlZml4ZWROYW1lID0gZ2V0UHJlZml4ZWRDb21wb25lbnROYW1lKHBhcnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLCBleGlzdGluZ0VsZW1lbnQpOwotCQkJCUNvbXBvbmVudFJlZmVyZW5jZVV0aWwuc2V0Q29tcG9uZW50UmVmZXJlbmNlKHBhcnQsIGZhbHNlLCBwcmVmaXhlZE5hbWUpOwotCQkJfQotCQl9Ci0JCWVsc2UgewotCQkJYW5vblhTREVsZW1lbnQgPSBwYXJ0RWxlbWVudDsKLQkJfQotCi0JCS8vIENyZWF0ZSBhIG5ldyBYU0RFbGVtZW50Ci0JCVhTRE1vZGVsR3JvdXAgbW9kZWxHcm91cCA9IFhTRENvbXBvbmVudEhlbHBlci5nZXRYU0RNb2RlbEdyb3VwKGFub25YU0RFbGVtZW50LCBwYXJ0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0JCXJldHVybmVkWFNERWxlbWVudCA9IFhTRENvbXBvbmVudEhlbHBlci5jcmVhdGVYU0RFbGVtZW50RGVjbGFyYXRpb25Db21tYW5kKG51bGwsIGdldE5ld1hTREVsZW1lbnRCYXNlTmFtZSgpLCBtb2RlbEdyb3VwKTsKLQotCQkvLyBBZGQgdGhlIG5ld2x5IGNyZWF0ZWQgWFNERWxlbWVudCB0byB0aGUgTW9kZWxHcm91cAotCQlYU0RDb21wb25lbnRIZWxwZXIuYWRkWFNERWxlbWVudFRvTW9kZWxHcm91cChhbm9uWFNERWxlbWVudCwgcmV0dXJuZWRYU0RFbGVtZW50KTsKLQotCQkvLyBBZGQgdGhlICdvcmlnaW5hbCcgWFNERWxlbWVudCBpZiBpdCdzIHR5cGUgd2Fzbid0IGFub255bW91cwotCQlpZiAob3JpZ2luYWxFbGVtZW50ICE9IG51bGwpIHsKLQkJCVhTRENvbXBvbmVudEhlbHBlci5hZGRYU0RFbGVtZW50VG9Nb2RlbEdyb3VwKGFub25YU0RFbGVtZW50LCBvcmlnaW5hbEVsZW1lbnQpOwotCQl9Ci0JCWZvcm1hdENoaWxkKGFub25YU0RFbGVtZW50LmdldEVsZW1lbnQoKSk7Ci0JCXJldHVybiByZXR1cm5lZFhTREVsZW1lbnQ7Ci0JfQotCQotCXByaXZhdGUgU3RyaW5nIGdldElkZWFsTWVzc2FnZU5hbWUoTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmKSB7CSAgICAKLQkJU3RyaW5nIG1lc3NhZ2VOYW1lID0gIk5ld01lc3NhZ2UiOyAvLyROT04tTkxTLTEkCi0JCW1lc3NhZ2VOYW1lID0gb3BlcmF0aW9uLmdldE5hbWUoKSArICJSZXF1ZXN0IjsgLy8kTk9OLU5MUy0xJAotCQkKLQkJcmV0dXJuIG1lc3NhZ2VOYW1lOwotCX0KLQkKLQlwdWJsaWMgTWVzc2FnZVJlZmVyZW5jZSBnZXRNZXNzYWdlUmVmZXJlbmNlKCkgewotCQlyZXR1cm4gaW5wdXQ7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRNZXNzYWdlQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRNZXNzYWdlQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4N2JkYTA1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkTWVzc2FnZUNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWN0aW9ucy5TbWFydFJlbmFtZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLk5hbWVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50czsKLQotCi1wdWJsaWMgZmluYWwgY2xhc3MgQWRkTWVzc2FnZUNvbW1hbmQgZXh0ZW5kcyBXU0RMRWxlbWVudENvbW1hbmQKLXsKLSAgcHJpdmF0ZSBEZWZpbml0aW9uIGRlZmluaXRpb247Ci0gIHByaXZhdGUgU3RyaW5nIGxvY2FsTmFtZTsKLSAgcHJpdmF0ZSBNZXNzYWdlIG1lc3NhZ2U7Ci0gIHByaXZhdGUgTWVzc2FnZSBvcmlnaW5hbE1lc3NhZ2U7Ci0gIAotICBwcml2YXRlIGJvb2xlYW4gY3JlYXRlUGFydCA9IGZhbHNlOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBERUZBVUxUX1BBUlRfTkFNRSA9ICJOZXdQYXJ0IjsgLy8kTk9OLU5MUy0xJAotICAKLSAgcHVibGljIEFkZE1lc3NhZ2VDb21tYW5kCi0gIAkoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCAgCi0gIAkgU3RyaW5nIGxvY2FsTmFtZSkKLSAgewotICAgIHRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247Ci0gICAgdGhpcy5sb2NhbE5hbWUgPSBsb2NhbE5hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBBZGRNZXNzYWdlQ29tbWFuZAotCQkoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCAKLQkJIFN0cmluZyBsb2NhbE5hbWUsCi0JCSBib29sZWFuIGNyZWF0ZVBhcnQpCi0JewotCSAgdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjsKLQkgIHRoaXMubG9jYWxOYW1lID0gbG9jYWxOYW1lOwotCSAgdGhpcy5jcmVhdGVQYXJ0ID0gY3JlYXRlUGFydDsKLQl9Ci0gIAotICAvKgotICAgKiBDb25zdHJ1Y3RvciB1c2VkIHRvIGNyZWF0ZSBhIE1lc3NhZ2UgYmFzZWQgb24gdGhlIGdpdmVuIE1lc3NhZ2UuICBJbiBlc3NlbmNlLCB0aGlzIHdpbGwKLSAgICogY3JlYXRlIGEgY29weSBvZiB0aGUgZ2l2ZW4gTWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyBBZGRNZXNzYWdlQ29tbWFuZChEZWZpbml0aW9uIGRlZmluaXRpb24sIE1lc3NhZ2Ugb3JpZ2luYWxNZXNzYWdlLCBTdHJpbmcgbG9jYWxOYW1lLCBib29sZWFuIGNvcHlQYXJ0KSB7Ci0gICAgdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjsKLQl0aGlzLmxvY2FsTmFtZSA9IGxvY2FsTmFtZTsKLQl0aGlzLmNyZWF0ZVBhcnQgPSBjb3B5UGFydDsKLSAgCXRoaXMub3JpZ2luYWxNZXNzYWdlID0gb3JpZ2luYWxNZXNzYWdlOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBydW4oKQotICB7Ci0gICAgbWVzc2FnZSA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVNZXNzYWdlKCk7Ci0gICAgbWVzc2FnZS5zZXRRTmFtZShuZXcgUU5hbWUoZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKSxsb2NhbE5hbWUpKTsKLSAgICBtZXNzYWdlLnNldEVuY2xvc2luZ0RlZmluaXRpb24oZGVmaW5pdGlvbik7Ci0gICAgZGVmaW5pdGlvbi5hZGRNZXNzYWdlKG1lc3NhZ2UpOwotICAgIAotICAgIGlmIChvcmlnaW5hbE1lc3NhZ2UgPT0gbnVsbCkgewotICAgIAlpZiAoY3JlYXRlUGFydCkKLSAgICAJewotICAgIAkJQWRkUGFydENvbW1hbmQgY29tbWFuZCA9IAotICAgIAkJCW5ldyBBZGRQYXJ0Q29tbWFuZChtZXNzYWdlLERFRkFVTFRfUEFSVF9OQU1FLFdTRExDb25zdGFudHMuU0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzIwMDEsInN0cmluZyIsdHJ1ZSk7IC8vJE5PTi1OTFMtMSQKLSAgICAJCWNvbW1hbmQucnVuKCk7Ci0gICAgCX0KLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgCWlmIChvcmlnaW5hbE1lc3NhZ2UuZ2V0RVBhcnRzKCkgIT0gbnVsbCkgewotICAgIAkJSXRlcmF0b3IgaXQgPSBvcmlnaW5hbE1lc3NhZ2UuZ2V0RVBhcnRzKCkuaXRlcmF0b3IoKTsKLSAgICAJCQotICAgIAkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotICAgIAkJCVBhcnQgcGFydCA9IChQYXJ0KSBpdC5uZXh0KCk7Ci0gICAgCQkJQWRkUGFydENvbW1hbmQgY29tbWFuZDsKLSAgICAJCQlpZiAoU21hcnRSZW5hbWVBY3Rpb24uaXNQYXJ0TmFtZUdlbmVyYXRlZChwYXJ0LmdldE5hbWUoKSwgb3JpZ2luYWxNZXNzYWdlLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkpKQotICAgIAkJCQljb21tYW5kID0gbmV3IEFkZFBhcnRDb21tYW5kKG1lc3NhZ2UsIHBhcnQsIE5hbWVVdGlsLmJ1aWxkVW5pcXVlUGFydE5hbWUobWVzc2FnZSwgbWVzc2FnZS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpKSk7CQotICAgIAkJCWVsc2UKLSAgICAJCQkJY29tbWFuZCA9IG5ldyBBZGRQYXJ0Q29tbWFuZChtZXNzYWdlLCBwYXJ0LCBwYXJ0LmdldE5hbWUoKSk7Ci0gICAgCQkJCi0gICAgCQkJCi0gICAgCQkJY29tbWFuZC5ydW4oKTsKLSAgICAJCX0KLSAgICAJfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldExvY2FsTmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgIHRoaXMubG9jYWxOYW1lID0gbmFtZTsKLSAgfQotICAKLSAgcHVibGljIFdTRExFbGVtZW50IGdldFdTRExFbGVtZW50KCkKLSAgewotICAgIHJldHVybiBtZXNzYWdlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZE1lc3NhZ2VSZWZlcmVuY2VDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZE1lc3NhZ2VSZWZlcmVuY2VDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlOTM5ZjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRNZXNzYWdlUmVmZXJlbmNlQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotCi1hYnN0cmFjdCBwdWJsaWMgY2xhc3MgQWRkTWVzc2FnZVJlZmVyZW5jZUNvbW1hbmQgZXh0ZW5kcyBXU0RMRWxlbWVudENvbW1hbmQKLXsKLSAgcHJvdGVjdGVkIFN0cmluZyBuYW1lOwotICBwcm90ZWN0ZWQgTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmZXJlbmNlOwotICBwcm90ZWN0ZWQgT3BlcmF0aW9uIG9wZXJhdGlvbjsKLSAgcHJvdGVjdGVkIGJvb2xlYW4gY3JlYXRlTWVzc2FnZSA9IGZhbHNlOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBERUZBVUxUX01FU1NBR0VfTkFNRSA9ICJOZXdNZXNzYWdlIjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBBZGRNZXNzYWdlUmVmZXJlbmNlQ29tbWFuZChPcGVyYXRpb24gb3BlcmF0aW9uLCBTdHJpbmcgbmFtZSkKLSAgewotICAgIHRoaXMub3BlcmF0aW9uID0gb3BlcmF0aW9uOwotICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBBZGRNZXNzYWdlUmVmZXJlbmNlQ29tbWFuZChPcGVyYXRpb24gb3BlcmF0aW9uLCBTdHJpbmcgbmFtZSwgYm9vbGVhbiBjcmVhdGVNZXNzYWdlKQotICB7Ci0gICAgdGhpcy5vcGVyYXRpb24gPSBvcGVyYXRpb247Ci0gICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgICB0aGlzLmNyZWF0ZU1lc3NhZ2UgPSBjcmVhdGVNZXNzYWdlOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlTWVzc2FnZSgpCi0gIHsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBvcGVyYXRpb24uZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotICAgIEFkZE1lc3NhZ2VDb21tYW5kIGNvbW1hbmQgPSAKLSAgICAgIG5ldyBBZGRNZXNzYWdlQ29tbWFuZChkZWZpbml0aW9uLERFRkFVTFRfTUVTU0FHRV9OQU1FLGNyZWF0ZU1lc3NhZ2UpOyAgICAgIAotICAgIGNvbW1hbmQucnVuKCk7Ci0gICAgbWVzc2FnZVJlZmVyZW5jZS5zZXRFTWVzc2FnZSgoTWVzc2FnZSljb21tYW5kLmdldFdTRExFbGVtZW50KCkpOwotICB9Ci0gIAotICAvKgotICAgKiBPdmVybG9hZGVkIGNyZWF0ZU1lc3NhZ2UoYXJnKSBtZXRob2QuICBTaW1pbGFyIHRvIHRvIGNyZWF0ZU1lc3NhZ2UoKSBidXQgdGFrZXMgaW4gYSBNZXNzYWdlUmVmZXJlbmNlLgotICAgKiBNZXRob2QgdXNlZCB0byBjcmVhdGUgYSBjb3B5IG9mIHRoZSBvcmlnaW5hbCBNZXNzYWdlIChjb250YWluZWQgaW4gdGhlIHBhc3NlZCBpbiBNZXNzYWdlUmVmZXJlbmNlKS4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGNyZWF0ZU1lc3NhZ2UoTWVzc2FnZVJlZmVyZW5jZSBvcmlnaW5hbE1SZWYsIFN0cmluZyBuZXdNZXNzYWdlUmVmTmFtZSkgewotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG9wZXJhdGlvbi5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0gICAgTWVzc2FnZSB0TWVzc2FnZSA9IG9yaWdpbmFsTVJlZi5nZXRFTWVzc2FnZSgpOwotICAgIEFkZE1lc3NhZ2VDb21tYW5kIGNvbW1hbmQgPSAKLSAgICAgIG5ldyBBZGRNZXNzYWdlQ29tbWFuZChkZWZpbml0aW9uLCB0TWVzc2FnZSwgbmV3TWVzc2FnZVJlZk5hbWUsIHRydWUpOwotICAgIGNvbW1hbmQucnVuKCk7Ci0gICAgbWVzc2FnZVJlZmVyZW5jZS5zZXRFTWVzc2FnZSgoTWVzc2FnZSljb21tYW5kLmdldFdTRExFbGVtZW50KCkpOwotICB9Ci0gIAotICBwdWJsaWMgV1NETEVsZW1lbnQgZ2V0V1NETEVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIG1lc3NhZ2VSZWZlcmVuY2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICB0aGlzLm5hbWUgPSBuYW1lOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZE9wZXJhdGlvbkNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkT3BlcmF0aW9uQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZWY3MGQwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkT3BlcmF0aW9uQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kczsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5OYW1lVXRpbDsKLQotCi1wdWJsaWMgZmluYWwgY2xhc3MgQWRkT3BlcmF0aW9uQ29tbWFuZCBleHRlbmRzIFdTRExFbGVtZW50Q29tbWFuZAotewotICBwcml2YXRlIFBvcnRUeXBlIHBvcnRUeXBlOwotICBwcml2YXRlIFN0cmluZyBuYW1lOwotICBwcml2YXRlIE9wZXJhdGlvbiBvcGVyYXRpb247Ci0gIHByaXZhdGUgT3BlcmF0aW9uIG9yaWdpbmFsT3BlcmF0aW9uOwotICBwcml2YXRlIGJvb2xlYW4gY29weUluT3V0RmF1bHQ7Ci0gIAotICBwcml2YXRlIGJvb2xlYW4gY3JlYXRlSW5wdXQgPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIGNyZWF0ZU91dHB1dCA9IGZhbHNlOwotICBwcml2YXRlIGJvb2xlYW4gY3JlYXRlRmF1bHQgPSBmYWxzZTsKLSAgCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIERFRkFVTFRfSU5QVVRfTkFNRSA9ICIiOyAvLyROT04tTkxTLTEkCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIERFRkFVTFRfT1VUUFVUX05BTUUgPSAiIjsgLy8kTk9OLU5MUy0xJAotICBwcml2YXRlIGZpbmFsIFN0cmluZyBERUZBVUxUX0ZBVUxUX05BTUUgPSAiIjsgLy8kTk9OLU5MUy0xJAotICAKLSAgcHVibGljIEFkZE9wZXJhdGlvbkNvbW1hbmQKLQkJKFBvcnRUeXBlIHBvcnRUeXBlLCAgCi0JCSBTdHJpbmcgbmFtZSkKLQl7Ci0JICB0aGlzLnBvcnRUeXBlID0gcG9ydFR5cGU7Ci0JICB0aGlzLm5hbWUgPSBuYW1lOwotCX0KLSAgCi0gIHB1YmxpYyBBZGRPcGVyYXRpb25Db21tYW5kCi0JCShQb3J0VHlwZSBwb3J0VHlwZSwgIAotCQkgU3RyaW5nIG5hbWUsCi0JCSBib29sZWFuIGNyZWF0ZUlucHV0LAotCQkgYm9vbGVhbiBjcmVhdGVPdXRwdXQsCi0JCSBib29sZWFuIGNyZWF0ZUZhdWx0KQotCXsKLQkgIHRoaXMucG9ydFR5cGUgPSBwb3J0VHlwZTsKLQkgIHRoaXMubmFtZSA9IG5hbWU7Ci0JICB0aGlzLmNyZWF0ZUlucHV0ID0gY3JlYXRlSW5wdXQ7Ci0JICB0aGlzLmNyZWF0ZU91dHB1dCA9IGNyZWF0ZU91dHB1dDsKLQkgIHRoaXMuY3JlYXRlRmF1bHQgPSBjcmVhdGVGYXVsdDsKLQl9Ci0gIAotICAvKgotICAgKiBDb25zdHJ1Y3RvciB1c2VkIHRvIGNyZWF0ZSBhbiBPcGVyYXRpb24gYmFzZWQgb24gdGhlIGdpdmVuIE9wZXJhdGlvbi4gIEluIGVzc2VuY2UsIHRoaXMgd2lsbAotICAgKiBjcmVhdGUgYSBjb3B5IG9mIHRoZSBnaXZlbiBPcGVyYXRpb24uCi0gICAqLwotICBwdWJsaWMgQWRkT3BlcmF0aW9uQ29tbWFuZChQb3J0VHlwZSBwb3J0VHlwZSwgT3BlcmF0aW9uIG9yaWdpbmFsT3BlcmF0aW9uLCBTdHJpbmcgbmFtZSwgYm9vbGVhbiBjb3B5SW5PdXRGYXVsdCkgewotICAJdGhpcy5wb3J0VHlwZSA9IHBvcnRUeXBlOwotICAJdGhpcy5vcmlnaW5hbE9wZXJhdGlvbiA9IG9yaWdpbmFsT3BlcmF0aW9uOwotICAJdGhpcy5uYW1lID0gbmFtZTsKLSAgCXRoaXMuY29weUluT3V0RmF1bHQgPSBjb3B5SW5PdXRGYXVsdDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgcnVuKCkKLSAgewotICAgIG9wZXJhdGlvbiA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVPcGVyYXRpb24oKTsKLSAgICBvcGVyYXRpb24uc2V0TmFtZShuYW1lKTsKLSAgICBvcGVyYXRpb24uc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihwb3J0VHlwZS5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotICAgIHBvcnRUeXBlLmFkZE9wZXJhdGlvbihvcGVyYXRpb24pOwotCi0gICAgaWYgKG9yaWdpbmFsT3BlcmF0aW9uID09IG51bGwpIHsgICAgCi0gICAgCVdTRExFbGVtZW50Q29tbWFuZCBjb21tYW5kID0gbnVsbDsKLSAgICAJaWYgKGNyZWF0ZUlucHV0KQotICAgIAl7Ci0gICAgCQljb21tYW5kID0gbmV3IEFkZElucHV0Q29tbWFuZChvcGVyYXRpb24sREVGQVVMVF9JTlBVVF9OQU1FLHRydWUpOwotICAgIAkJY29tbWFuZC5ydW4oKTsKLSAgICAJfQotICAgIAotICAgIAlpZiAoY3JlYXRlT3V0cHV0KQotICAgIAl7Ci0gICAgCQljb21tYW5kID0gbmV3IEFkZE91dHB1dENvbW1hbmQob3BlcmF0aW9uLERFRkFVTFRfT1VUUFVUX05BTUUsdHJ1ZSk7Ci0gICAgCQljb21tYW5kLnJ1bigpOwotICAgIAl9Ci0gICAgCi0gICAgCWlmIChjcmVhdGVGYXVsdCkKLSAgICAJewotICAgIAkJY29tbWFuZCA9IG5ldyBBZGRGYXVsdENvbW1hbmQob3BlcmF0aW9uLERFRkFVTFRfRkFVTFRfTkFNRSx0cnVlKTsKLSAgICAJCWNvbW1hbmQucnVuKCk7Ci0gICAgCX0KLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgCS8vIERvIG5lY2Vzc2FyeSBjb3B5aW5nIG9mIGRhdGEgZnJvbSBvcmlnaW5hbCBvcGVyYXRpb24gdG8gbmV3IG9wZXJhdGlvbgotICAgIAkvLyBQYXJhbWF0ZXIgb3JkZXJpbmc/IERvY3VtZW50YXRpb24/ICBUaGlzIHBhcnQgc3RpbGwgbmVlZHMgdG8gYmUgd29ya2VkIG9uICAgIAkKLSAgICAJLy8gQ29weSAna2lkcycgaWYgbmVjZXNzYXJ5Ci0gICAgCWlmIChjb3B5SW5PdXRGYXVsdCkgewotICAgIAkJV1NETEVsZW1lbnRDb21tYW5kIGNvbW1hbmQgPSBudWxsOwotICAgICAgICAKLSAgICAgICAgCWlmIChvcmlnaW5hbE9wZXJhdGlvbi5nZXRFT3V0cHV0KCkgIT0gbnVsbCkKLSAgICAgICAgCXsKLSAgICAgICAgCQlPdXRwdXQgb3V0cHV0ID0gb3JpZ2luYWxPcGVyYXRpb24uZ2V0RU91dHB1dCgpOwotICAgICAgICAJCWNvbW1hbmQgPSBuZXcgQWRkT3V0cHV0Q29tbWFuZChvcGVyYXRpb24sIG91dHB1dCwgTmFtZVV0aWwuYnVpbGRVbmlxdWVPdXRwdXROYW1lKHBvcnRUeXBlLCBvcGVyYXRpb24uZ2V0TmFtZSgpLCAiIikpOyAvLyROT04tTkxTLTEkCi0gICAgICAgIAkJY29tbWFuZC5ydW4oKTsKLSAgICAgICAgCX0KLSAgICAgICAgCQotICAgICAgICAJaWYgKG9yaWdpbmFsT3BlcmF0aW9uLmdldEVJbnB1dCgpICE9IG51bGwpCi0gICAgICAgIAl7Ci0gICAgICAgIAkJSW5wdXQgaW5wdXQgPSBvcmlnaW5hbE9wZXJhdGlvbi5nZXRFSW5wdXQoKTsKLSAgICAgICAgCQljb21tYW5kID0gbmV3IEFkZElucHV0Q29tbWFuZChvcGVyYXRpb24sIGlucHV0LCBOYW1lVXRpbC5idWlsZFVuaXF1ZUlucHV0TmFtZShwb3J0VHlwZSwgb3BlcmF0aW9uLmdldE5hbWUoKSwgIiIpKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAJCWNvbW1hbmQucnVuKCk7Ci0gICAgICAgIAl9Ci0gICAgICAgIAotICAgICAgICAJaWYgKG9yaWdpbmFsT3BlcmF0aW9uLmdldEVGYXVsdHMoKSAhPSBudWxsKQotICAgICAgICAJewotICAgICAgICAJCUl0ZXJhdG9yIGl0ID0gb3JpZ2luYWxPcGVyYXRpb24uZ2V0RUZhdWx0cygpLml0ZXJhdG9yKCk7Ci0gICAgICAgIAkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotICAgICAgICAJCQlGYXVsdCBmYXVsdCA9IChGYXVsdCkgaXQubmV4dCgpOwotICAgICAgICAJCQljb21tYW5kID0gbmV3IEFkZEZhdWx0Q29tbWFuZChvcGVyYXRpb24sIGZhdWx0LCBOYW1lVXRpbC5idWlsZFVuaXF1ZUZhdWx0TmFtZShvcmlnaW5hbE9wZXJhdGlvbiwgZmF1bHQuZ2V0TmFtZSgpKSk7Ci0gICAgICAgIAkJCWNvbW1hbmQucnVuKCk7Ci0gICAgICAgIAkJfQotICAgICAgICAJfQotICAgIAkJCi0gICAgCX0KLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBXU0RMRWxlbWVudCBnZXRXU0RMRWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gb3BlcmF0aW9uOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRPdXRwdXRDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZE91dHB1dENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg4MTFkMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZE91dHB1dENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFjdGlvbnMuU21hcnRSZW5hbWVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5OYW1lVXRpbDsKLQotCi1wdWJsaWMgZmluYWwgY2xhc3MgQWRkT3V0cHV0Q29tbWFuZCBleHRlbmRzIEFkZE1lc3NhZ2VSZWZlcmVuY2VDb21tYW5kCi17Ci0gIHByaXZhdGUgT3V0cHV0IG9yaWdpbmFsT3V0cHV0OwotICAKLSAgcHVibGljIEFkZE91dHB1dENvbW1hbmQoT3BlcmF0aW9uIG9wZXJhdGlvbiwgU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihvcGVyYXRpb24sbmFtZSk7Ci0gIH0KLQotICBwdWJsaWMgQWRkT3V0cHV0Q29tbWFuZChPcGVyYXRpb24gb3BlcmF0aW9uLCBTdHJpbmcgbmFtZSwgYm9vbGVhbiBjcmVhdGVNZXNzYWdlKQotICB7Ci0gICAgc3VwZXIob3BlcmF0aW9uLG5hbWUsY3JlYXRlTWVzc2FnZSk7Ci0gIH0KLSAgCi0gIC8qCi0gICAqIENvbnN0cnVjdG9yIHVzZWQgdG8gY3JlYXRlIGFuIE91dHB1dCBiYXNlZCBvbiB0aGUgZ2l2ZW4gT3V0cHV0LiAgSW4gZXNzZW5jZSwgdGhpcyB3aWxsCi0gICAqIGNyZWF0ZSBhIGNvcHkgb2YgdGhlIGdpdmVuIE91dHB1dC4KLSAgICovCi0gIHB1YmxpYyBBZGRPdXRwdXRDb21tYW5kKE9wZXJhdGlvbiBvcGVyYXRpb24sIE91dHB1dCBvcmlnaW5hbE91dHB1dCwgU3RyaW5nIG5hbWUpIHsKLSAgCXN1cGVyKG9wZXJhdGlvbiwgbmFtZSwgZmFsc2UpOwotICAJCi0gIAl0aGlzLm9yaWdpbmFsT3V0cHV0ID0gb3JpZ2luYWxPdXRwdXQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHJ1bigpCi0gIHsKLSAgICBtZXNzYWdlUmVmZXJlbmNlID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU91dHB1dCgpOwotLy8gICAgbWVzc2FnZVJlZmVyZW5jZS5zZXROYW1lKG5hbWUpOwotICAgIG1lc3NhZ2VSZWZlcmVuY2Uuc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihvcGVyYXRpb24uZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLSAgICBvcGVyYXRpb24uc2V0T3V0cHV0KChPdXRwdXQpbWVzc2FnZVJlZmVyZW5jZSk7Ci0gICAgCi0gICAgLy8gIFRCRCAtIGFkZCBiaW5kaW5nIG91dHB1dCAKLSAgICAKLSAgICBpZiAob3JpZ2luYWxPdXRwdXQgPT0gbnVsbCkgewotICAgIAlpZiAoY3JlYXRlTWVzc2FnZSkKLSAgICAJCWNyZWF0ZU1lc3NhZ2UoKTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgCS8vIERvIG5lY2Vzc2FyeSBjb3B5aW5nIG9mIGRhdGEgZnJvbSBvcmlnaW5hbCBPdXRwdXQgdG8gbmV3IE91dHB1dAotICAgIAlpZiAob3JpZ2luYWxPdXRwdXQuZ2V0RU1lc3NhZ2UoKSAhPSBudWxsKSB7Ci0gICAgCQlTdHJpbmcgb3JpZ2luYWxNc2dOYW1lID0gb3JpZ2luYWxPdXRwdXQuZ2V0RU1lc3NhZ2UoKS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotCQkKLQkJYm9vbGVhbiBnZW5lZCA9IGZhbHNlOwotCQlpZiAob3JpZ2luYWxPdXRwdXQuZUNvbnRhaW5lcigpIGluc3RhbmNlb2YgT3BlcmF0aW9uKQotCQkJZ2VuZWQgPSBTbWFydFJlbmFtZUFjdGlvbi5pc01lc3NhZ2VOYW1lR2VuZXJhdGVkKG9yaWdpbmFsTXNnTmFtZSwgKChPcGVyYXRpb24pIG9yaWdpbmFsT3V0cHV0LmVDb250YWluZXIoKSkuZ2V0TmFtZSgpLCAiUmVzcG9uc2UiKTsgLy8kTk9OLU5MUy0xJAotCQkKLQkJU3RyaW5nIG5ld01zZ05hbWUgPSAiIjsgLy8kTk9OLU5MUy0xJAotCQlpZiAoZ2VuZWQpIHsKLQkJCW5ld01zZ05hbWUgPSBOYW1lVXRpbC5idWlsZFVuaXF1ZU1lc3NhZ2VOYW1lKG9wZXJhdGlvbi5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCksIG1lc3NhZ2VSZWZlcmVuY2UpOwotCQl9Ci0JCWVsc2UgewotCQkJRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gb3BlcmF0aW9uLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLQkJCU1lc3NhZ2UgdE1lc3NhZ2UgPSBvcmlnaW5hbE91dHB1dC5nZXRFTWVzc2FnZSgpOwotCQkJbmV3TXNnTmFtZSA9IE5hbWVVdGlsLmJ1aWxkVW5pcXVlTWVzc2FnZU5hbWUoZGVmaW5pdGlvbiwgdE1lc3NhZ2UuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSk7Ci0JCX0KLQkJCi0gICAgCWNyZWF0ZU1lc3NhZ2Uob3JpZ2luYWxPdXRwdXQsIG5ld01zZ05hbWUpOwotICAgIAl9Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZE91dHB1dFBhcmFtZXRlckNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkT3V0cHV0UGFyYW1ldGVyQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDg1YmZkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkT3V0cHV0UGFyYW1ldGVyQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5OYW1lVXRpbDsKLQotcHVibGljIGNsYXNzIEFkZE91dHB1dFBhcmFtZXRlckNvbW1hbmQgZXh0ZW5kcyBBZGRCYXNlUGFyYW1ldGVyQ29tbWFuZCB7Ci0JcHJpdmF0ZSBPdXRwdXQgb3V0cHV0OwotCQotCXB1YmxpYyBBZGRPdXRwdXRQYXJhbWV0ZXJDb21tYW5kKE9wZXJhdGlvbiBvcGVyYXRpb24sIGludCBzdHlsZSkgewotCQlzdXBlcihvcGVyYXRpb24sIHN0eWxlKTsKLQl9Ci0JCi0JLyoKLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCVBhcnQgcGFydCA9IG51bGw7Ci0JCWlmIChvcGVyYXRpb24uZ2V0RU91dHB1dCgpICE9IG51bGwpIHsKLQkJCW91dHB1dCA9IG9wZXJhdGlvbi5nZXRFT3V0cHV0KCk7Ci0JCQlwYXJ0ID0gY3JlYXRlV1NETENvbXBvbmVudHMob3BlcmF0aW9uLmdldEVPdXRwdXQoKSk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlBZGRPdXRwdXRDb21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkT3V0cHV0Q29tbWFuZChvcGVyYXRpb24sIG51bGwpOwotCQkJY29tbWFuZC5ydW4oKTsKLQkJCW91dHB1dCA9IChPdXRwdXQpIGNvbW1hbmQuZ2V0V1NETEVsZW1lbnQoKTsKLQkJCXBhcnQgPSBjcmVhdGVXU0RMQ29tcG9uZW50cyhvdXRwdXQpOwotCQl9Ci0JCQotCQluZXdQYXJ0ID0gcGFydDsKLQkJLy8gQ3JlYXRlIG5lY2Vzc2FyeSBYU0QgT2JqZWN0cyBzdGFydGluZyB3aXRoIHRoZSBQYXJ0IHJlZmVyZW5jZQotCQluZXdYU0RFbGVtZW50ID0gY3JlYXRlWFNET2JqZWN0cyhwYXJ0KTsKLQl9Ci0JCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRBbm9ueW1vdXNYU0RFbGVtZW50QmFzZU5hbWUoKSB7Ci0JCWlmIChuZXdBbm9ueW1vdXNYU0RFbGVtZW50TmFtZSA9PSBudWxsKSB7Ci0JCQlpZiAodGhpcy5zdHlsZSA9PSBBZGRCYXNlUGFyYW1ldGVyQ29tbWFuZC5QQVJUX0VMRU1FTlRfU0VRX0VMRU1FTlQpIHsKLQkJCQluZXdBbm9ueW1vdXNYU0RFbGVtZW50TmFtZSA9IG9wZXJhdGlvbi5nZXROYW1lKCkgKyAiUmVzcG9uc2UiOyAvLyROT04tTkxTLTEkOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJbmV3QW5vbnltb3VzWFNERWxlbWVudE5hbWUgPSBnZXRXU0RMUGFydE5hbWUoKTsKLQkJCX0KLQkJfQotCQkKLQkJcmV0dXJuIG5ld0Fub255bW91c1hTREVsZW1lbnROYW1lOwotCX0KLQkKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldE5ld1hTREVsZW1lbnRCYXNlTmFtZSgpIHsKLQkJaWYgKG5ld1hTREVsZW1lbnROYW1lID09IG51bGwpIHsKLQkJCW5ld1hTREVsZW1lbnROYW1lID0gIm91dCI7IC8vJE5PTi1OTFMtMSQKLS8vCQkJbmV3WFNERWxlbWVudE5hbWUgPSBnZXRXU0RMUGFydE5hbWUoKTsKLQkJfQotCQkKLQkJcmV0dXJuIG5ld1hTREVsZW1lbnROYW1lOwotCX0KLQkKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldFdTRExNZXNzYWdlTmFtZSgpIHsKLQkJaWYgKG5ld1dTRExNZXNzYWdlTmFtZSA9PSBudWxsKSB7Ci0JCQlpZiAob3BlcmF0aW9uLmdldEVPdXRwdXQoKSAhPSBudWxsKSB7Ci0JCQkJbmV3V1NETE1lc3NhZ2VOYW1lPSBOYW1lVXRpbC5nZXRNZXNzYWdlTmFtZShvcGVyYXRpb24uZ2V0RU91dHB1dCgpKTsKLQkJCX0KLQkJfQotCQkKLQkJcmV0dXJuIG5ld1dTRExNZXNzYWdlTmFtZTsKLQl9Ci0KLQlwcm90ZWN0ZWQgU3RyaW5nIGdldFdTRExQYXJ0TmFtZSgpIHsKLQkJaWYgKG5ld1dTRExQYXJ0TmFtZSA9PSBudWxsKSB7Ci0JCQluZXdXU0RMUGFydE5hbWUgID0gTmFtZVV0aWwuZ2V0UGFydE5hbWUob3BlcmF0aW9uLmdldEVPdXRwdXQoKSk7CQkJCi0JCX0KLQkJCi0JCXJldHVybiBuZXdXU0RMUGFydE5hbWU7Ci0JfQotCQotCXB1YmxpYyBNZXNzYWdlUmVmZXJlbmNlIGdldE1lc3NhZ2VSZWZlcmVuY2UoKSB7Ci0JCXJldHVybiBvdXRwdXQ7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRQYXJ0Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRQYXJ0Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDkwOGE2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkUGFydENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5QYXJ0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RFbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLQotCi1wdWJsaWMgZmluYWwgY2xhc3MgQWRkUGFydENvbW1hbmQgZXh0ZW5kcyBXU0RMRWxlbWVudENvbW1hbmQKLXsKLSAgcHJpdmF0ZSBNZXNzYWdlIG1lc3NhZ2U7Ci0gIHByaXZhdGUgU3RyaW5nIG5hbWU7Ci0gIHByaXZhdGUgUGFydCBwYXJ0OwotICBwcml2YXRlIFBhcnQgb3JpZ2luYWxQYXJ0OwotICAKLSAgcHJpdmF0ZSBRTmFtZSB0eXBlT3JFbGVtZW50TmFtZTsKLSAgcHJpdmF0ZSBib29sZWFuIHVzZVR5cGUgPSB0cnVlOwotCi0gIHB1YmxpYyBBZGRQYXJ0Q29tbWFuZAotCQkoTWVzc2FnZSBtZXNzYWdlLAotCQkgU3RyaW5nIG5hbWUpCi0JewotCSAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsKLQkgIHRoaXMubmFtZSA9IG5hbWU7Ci0JfQotICAKLSAgcHVibGljIEFkZFBhcnRDb21tYW5kCi0JCShNZXNzYWdlIG1lc3NhZ2UsCi0JCSBTdHJpbmcgbmFtZSwKLQkJIFN0cmluZyBuYW1lc3BhY2UsCi0JCSBTdHJpbmcgbG9jYWxOYW1lLAotCQkgYm9vbGVhbiB1c2VUeXBlKQotCXsKLQkgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7Ci0JICB0aGlzLm5hbWUgPSBuYW1lOwotCSAgdGhpcy51c2VUeXBlID0gdXNlVHlwZTsKLQkgIHR5cGVPckVsZW1lbnROYW1lID0gbmV3IFFOYW1lKG5hbWVzcGFjZSxsb2NhbE5hbWUpOwotCX0KLSAgCi0gIC8qCi0gICAqIENvbnN0cnVjdG9yIHVzZWQgdG8gY3JlYXRlIGEgUGFydCBiYXNlZCBvbiB0aGUgZ2l2ZW4gUGFydC4gIEluIGVzc2VuY2UsIHRoaXMgd2lsbAotICAgKiBjcmVhdGUgYSBjb3B5IG9mIHRoZSBnaXZlbiBQYXJ0LgotICAgKi8KLSAgcHVibGljIEFkZFBhcnRDb21tYW5kCi0JKE1lc3NhZ2UgbWVzc2FnZSwKLQkgUGFydCBvcmlnaW5hbFBhcnQsCi0JIFN0cmluZyBuYW1lKQotICB7Ci0gIAl0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOwotICAJdGhpcy5uYW1lID0gbmFtZTsKLSAgCXRoaXMub3JpZ2luYWxQYXJ0ID0gb3JpZ2luYWxQYXJ0OwotICB9Ci0gIAotICAvKioKLSAgICogQGRlcHJlY2F0ZWQKLSAgICovCi0gIHB1YmxpYyBBZGRQYXJ0Q29tbWFuZAotCQkoTWVzc2FnZSBtZXNzYWdlLAotCQkgU3RyaW5nIG5hbWUsCi0JCSBTdHJpbmcgbmFtZXNwYWNlLAotCQkgU3RyaW5nIGxvY2FsTmFtZSkKLQl7Ci0JICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOwotCSAgdGhpcy5uYW1lID0gbmFtZTsKLQkgIHR5cGVPckVsZW1lbnROYW1lID0gbmV3IFFOYW1lKG5hbWVzcGFjZSxsb2NhbE5hbWUpOwotCX0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICB0aGlzLm5hbWUgPSBuYW1lOwotICB9Ci0gIAotICBwdWJsaWMgV1NETEVsZW1lbnQgZ2V0V1NETEVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIHBhcnQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHJ1bigpCi0gIHsKLSAgICBpZiAodHlwZU9yRWxlbWVudE5hbWUgPT0gbnVsbCkKLSAgICAgIHR5cGVPckVsZW1lbnROYW1lID0gY3JlYXRlRGVmYXVsdFR5cGVOYW1lKCk7Ci0gICAgCi0gICAgLy8gQWRkIG5hbWVzcGFjZSB0byB0aGUgRGVmaW5pdGlvbnMgaWYgaXQgaXMgbm90IHRoZXJlIHlldC4KLSAgICBhZGROYW1lc3BhY2VEZWNsYXJhdGlvbigpOwotICAgIAotICAgIHBhcnQgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUGFydCgpOwotICAgIHBhcnQuc2V0TmFtZShuYW1lKTsKLSAgICAKLSAgICBpZiAob3JpZ2luYWxQYXJ0ID09IG51bGwpIHsKLSAgICAJaWYgKHVzZVR5cGUpCi0gICAgCQlwYXJ0LnNldFR5cGVOYW1lKHR5cGVPckVsZW1lbnROYW1lKTsKLSAgICAJZWxzZQotICAgIAkJcGFydC5zZXRFbGVtZW50TmFtZSh0eXBlT3JFbGVtZW50TmFtZSk7Ci0gICAgfQotICAgIGVsc2UgewotICAgIAlpZiAob3JpZ2luYWxQYXJ0LmdldFR5cGVOYW1lKCkgIT0gbnVsbCkKLSAgICAJCXBhcnQuc2V0VHlwZU5hbWUob3JpZ2luYWxQYXJ0LmdldFR5cGVOYW1lKCkpOwotCi0gICAgCVN0cmluZyBuZXdFbGVtZW50TmFtZSA9IG51bGw7Ci0gICAgCWlmIChvcmlnaW5hbFBhcnQuZ2V0RWxlbWVudE5hbWUoKSAhPSBudWxsKSB7Ci0gICAgCQkKLSAgICAJCWJvb2xlYW4gY3JlYXRlTmV3RWxlbWVudCA9IHRydWU7Ci0gICAgCQlpZiAob3JpZ2luYWxQYXJ0LmdldEVsZW1lbnREZWNsYXJhdGlvbigpICE9IG51bGwgJiYgb3JpZ2luYWxQYXJ0LmdldEVsZW1lbnREZWNsYXJhdGlvbigpLmdldEVsZW1lbnQoKSAhPSBudWxsKSB7Ci0gICAgICAgIAkJaWYgKCEob3JpZ2luYWxQYXJ0LmdldEVsZW1lbnREZWNsYXJhdGlvbigpLmdldEVsZW1lbnQoKSBpbnN0YW5jZW9mIElET01Ob2RlKSkgewotICAgICAgICAJCQljcmVhdGVOZXdFbGVtZW50ID0gZmFsc2U7Ci0gICAgICAgIAkJfSAgICAgICAgCQkKLSAgICAJCX0KLSAgICAJCQotICAgIAkJaWYgKGNyZWF0ZU5ld0VsZW1lbnQpIHsKLSAgICAJCQluZXdFbGVtZW50TmFtZSA9IGdldE5ld05hbWVIZWxwZXIobmFtZSwgb3JpZ2luYWxQYXJ0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSwgZmFsc2UpOwotICAgIAkJCXBhcnQuc2V0RWxlbWVudE5hbWUobmV3IFFOYW1lKG9yaWdpbmFsUGFydC5nZXRFbGVtZW50TmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpLCBuZXdFbGVtZW50TmFtZSkpOwotCQotICAgIAkJCWlmIChvcmlnaW5hbFBhcnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpICE9IG51bGwpIHsKLSAgICAJCQkJaWYgKG5ld0VsZW1lbnROYW1lID09IG51bGwpIHsKLSAgICAJCQkJCW5ld0VsZW1lbnROYW1lID0gZ2V0TmV3TmFtZUhlbHBlcihuYW1lLCBvcmlnaW5hbFBhcnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLCBmYWxzZSk7Ci0gICAgCQkJCX0KLSAgICAJCQotICAgIAkJCQlBZGRYU0RFbGVtZW50RGVjbGFyYXRpb25Db21tYW5kIGVsZW1lbnRBY3Rpb24gPSBuZXcgQWRkWFNERWxlbWVudERlY2xhcmF0aW9uQ29tbWFuZChvcmlnaW5hbFBhcnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLCBuZXdFbGVtZW50TmFtZSk7Ci0gICAgCQkJCWVsZW1lbnRBY3Rpb24ucnVuKCk7Ci0gICAgCQkJfQotICAgIAkJfQotICAgIAkJZWxzZSB7Ci0gICAgCQkJcGFydC5zZXRFbGVtZW50TmFtZShuZXcgUU5hbWUob3JpZ2luYWxQYXJ0LmdldEVsZW1lbnROYW1lKCkuZ2V0TmFtZXNwYWNlVVJJKCksIG9yaWdpbmFsUGFydC5nZXRFbGVtZW50TmFtZSgpLmdldExvY2FsUGFydCgpKSk7Ci0gICAgCQl9Ci0gICAgCX0KLSAgICB9Ci0gICAgCQotICAgIHBhcnQuc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihtZXNzYWdlLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0gICAgKChQYXJ0SW1wbClwYXJ0KS5yZWNvbmNpbGVSZWZlcmVuY2VzKGZhbHNlKTsgCi0gICAgbWVzc2FnZS5hZGRQYXJ0KHBhcnQpOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgYWRkTmFtZXNwYWNlRGVjbGFyYXRpb24oKQotICB7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gbWVzc2FnZS5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0gICAgaWYgKCFkZWZpbml0aW9uLmdldE5hbWVzcGFjZXMoKS5jb250YWluc1ZhbHVlKHR5cGVPckVsZW1lbnROYW1lLmdldE5hbWVzcGFjZVVSSSgpKSkKLSAgICB7Ci0gICAgICBkZWZpbml0aW9uLmFkZE5hbWVzcGFjZSgicCIsdHlwZU9yRWxlbWVudE5hbWUuZ2V0TmFtZXNwYWNlVVJJKCkpOyAvLyROT04tTkxTLTEkCi0vLyAgICAgICgoV1NETEVsZW1lbnRJbXBsKWRlZmluaXRpb24pLnVwZGF0ZUVsZW1lbnQoZmFsc2UpOwotICAgIH0KLSAgfQotICAKLSAgcHJpdmF0ZSBRTmFtZSBjcmVhdGVEZWZhdWx0VHlwZU5hbWUoKQotICB7Ci0gICAgUU5hbWUgcW5hbWUgPSBuZXcgUU5hbWUoV1NETENvbnN0YW50cy5TQ0hFTUFfRk9SX1NDSEVNQV9VUklfMjAwMSwic3RyaW5nIik7IC8vJE5PTi1OTFMtMSQKLSAgICByZXR1cm4gcW5hbWU7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGdldE5ld05hbWVIZWxwZXIoU3RyaW5nIGJhc2UsIERlZmluaXRpb24gZGVmLCBib29sZWFuIGlzVHlwZSkKLSAgeyAKLSAgICBTdHJpbmcgbmFtZSA9IGJhc2U7ICAgIAotICAgIGludCBjb3VudCA9IDA7Ci0KLSAgICAvLyBVZ2x5Li4uLiAgUmVkbyB0aGlzLi4uCi0gICAgLy8gR2V0IGEgbGlzdCBvZiBFbGVtZW50cy4uLgotICAgIExpc3QgZWxlbWVudExpc3QgPSBudWxsOwotICAgIGlmIChkZWYuZ2V0RVR5cGVzKCkgIT0gbnVsbCkgewotICAgIAlMaXN0IHhzZHNMaXN0ID0gZGVmLmdldEVUeXBlcygpLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAJaWYgKHhzZHNMaXN0ICE9IG51bGwpIHsKLSAgICAJCUl0ZXJhdG9yIHhzZHNJdGVyYXRvciA9IHhzZHNMaXN0Lml0ZXJhdG9yKCk7Ci0gICAgCQlYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCB4c2RFbGVtZW50ID0gKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KSB4c2RzSXRlcmF0b3IubmV4dCgpOwotICAgIAkJWFNEU2NoZW1hIHNjaGVtYSA9IHhzZEVsZW1lbnQuZ2V0U2NoZW1hKCk7Ci0gICAgCQlpZiAoc2NoZW1hICE9IG51bGwpIHsKLSAgICAJCQllbGVtZW50TGlzdCA9IHNjaGVtYS5nZXRFbGVtZW50RGVjbGFyYXRpb25zKCk7Ci0gICAgCQl9Ci0gICAgCX0KLSAgICB9Ci0gICAgCi0gICAgaWYgKGVsZW1lbnRMaXN0ICE9IG51bGwpIHsKLSAgICAJaW50IGluZGV4ID0gMDsKLSAgICAJd2hpbGUgKGluZGV4IDwgZWxlbWVudExpc3Quc2l6ZSgpKSB7Ci0gICAgCQlYU0RFbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudERlY2xhcmF0aW9uID0gKFhTREVsZW1lbnREZWNsYXJhdGlvbikgZWxlbWVudExpc3QuZ2V0KGluZGV4KTsKLSAgICAJCQotICAgIAkJaWYgKG5hbWUuZXF1YWxzKGVsZW1lbnREZWNsYXJhdGlvbi5nZXROYW1lKCkpKSB7Ci0gICAgCQkJY291bnQrKzsKLSAgICAJCQluYW1lID0gbmFtZSArIGNvdW50OwotICAgIAkJCWluZGV4ID0gMDsKLSAgICAJCX0KLSAgICAJCWVsc2UgewotICAgIAkJCWluZGV4Kys7Ci0gICAgCQl9Ci0gICAgCX0KLSAgICB9Ci0KLSAgICByZXR1cm4gbmFtZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRQb3J0Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRQb3J0Q29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzI2OTAxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkUG9ydENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRmFjdG9yeTsKLQotcHVibGljIGZpbmFsIGNsYXNzIEFkZFBvcnRDb21tYW5kIGV4dGVuZHMgV1NETEVsZW1lbnRDb21tYW5kCi17Ci0gIHByaXZhdGUgU2VydmljZSBzZXJ2aWNlOwotICBwcml2YXRlIFN0cmluZyBuYW1lOwotICBwcml2YXRlIFBvcnQgcG9ydDsKLSAgCi0gIHB1YmxpYyBBZGRQb3J0Q29tbWFuZAotCQkoU2VydmljZSBzZXJ2aWNlLAotCQkgU3RyaW5nIG5hbWUpCi0JewotCSAgdGhpcy5zZXJ2aWNlID0gc2VydmljZTsKLQkgIHRoaXMubmFtZSA9IG5hbWU7Ci0JfQotICAKLSAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBXU0RMRWxlbWVudCBnZXRXU0RMRWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gcG9ydDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJ1bigpCi0gIHsKLSAgICBwb3J0ID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVBvcnQoKTsKLSAgICBwb3J0LnNldE5hbWUobmFtZSk7Ci0gICAgcG9ydC5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKHNlcnZpY2UuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLSAgICBzZXJ2aWNlLmFkZFBvcnQocG9ydCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkUG9ydFR5cGVDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZFBvcnRUeXBlQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjZmZWI1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkUG9ydFR5cGVDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHM7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRmFjdG9yeTsKLQotCi1wdWJsaWMgZmluYWwgY2xhc3MgQWRkUG9ydFR5cGVDb21tYW5kIGV4dGVuZHMgV1NETEVsZW1lbnRDb21tYW5kCi17Ci0gIHByaXZhdGUgRGVmaW5pdGlvbiBkZWZpbml0aW9uOwotICBwcml2YXRlIFN0cmluZyBsb2NhbE5hbWU7Ci0gIHByaXZhdGUgUG9ydFR5cGUgcG9ydFR5cGU7Ci0gIAotICBwcml2YXRlIGJvb2xlYW4gY3JlYXRlT3BlcmF0aW9uID0gZmFsc2U7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIERFRkFVTFRfT1BFUkFUSU9OX05BTUUgPSAiTmV3T3BlcmF0aW9uIjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBBZGRQb3J0VHlwZUNvbW1hbmQKLQkJKERlZmluaXRpb24gZGVmaW5pdGlvbiwgIAotCQkgU3RyaW5nIGxvY2FsTmFtZSkKLQl7Ci0JICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotCSAgdGhpcy5sb2NhbE5hbWUgPSBsb2NhbE5hbWU7Ci0JfQotCi0gIHB1YmxpYyBBZGRQb3J0VHlwZUNvbW1hbmQKLQkJKERlZmluaXRpb24gZGVmaW5pdGlvbiwgCi0JCSBTdHJpbmcgbG9jYWxOYW1lLAotCQkgYm9vbGVhbiBjcmVhdGVPcGVyYXRpb24pCi0JewotCSAgdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjsKLQkgIHRoaXMubG9jYWxOYW1lID0gbG9jYWxOYW1lOwotCSAgdGhpcy5jcmVhdGVPcGVyYXRpb24gPSBjcmVhdGVPcGVyYXRpb247Ci0JfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5XU0RMRWxlbWVudEFjdGlvbiNnZXRXU0RMRWxlbWVudCgpCi0gICAqLwotICBwdWJsaWMgV1NETEVsZW1lbnQgZ2V0V1NETEVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIHBvcnRUeXBlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcnVuKCkKLSAgewotICAgIHBvcnRUeXBlID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVBvcnRUeXBlKCk7Ci0gICAgcG9ydFR5cGUuc2V0UU5hbWUobmV3IFFOYW1lKGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCksbG9jYWxOYW1lKSk7Ci0gICAgcG9ydFR5cGUuc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihkZWZpbml0aW9uKTsKLSAgICBkZWZpbml0aW9uLmFkZFBvcnRUeXBlKHBvcnRUeXBlKTsKLSAgICAKLSAgICBpZiAoY3JlYXRlT3BlcmF0aW9uKQotICAgIHsKLSAgICAgIEFkZE9wZXJhdGlvbkNvbW1hbmQgY29tbWFuZCA9IAotICAgICAgICBuZXcgQWRkT3BlcmF0aW9uQ29tbWFuZChwb3J0VHlwZSxERUZBVUxUX09QRVJBVElPTl9OQU1FLHRydWUsdHJ1ZSxmYWxzZSk7Ci0gICAgICBjb21tYW5kLnJ1bigpOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0TG9jYWxOYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gICAgbG9jYWxOYW1lID0gbmFtZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRTZXJ2aWNlQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRTZXJ2aWNlQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTVjZjE4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkU2VydmljZUNvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kczsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3Rvcnk7Ci0KLQotcHVibGljIGZpbmFsIGNsYXNzIEFkZFNlcnZpY2VDb21tYW5kIGV4dGVuZHMgV1NETEVsZW1lbnRDb21tYW5kCi17Ci0gIHByaXZhdGUgRGVmaW5pdGlvbiBkZWZpbml0aW9uOwotICBwcml2YXRlIFN0cmluZyBsb2NhbE5hbWU7Ci0gIHByaXZhdGUgU2VydmljZSBzZXJ2aWNlOwotICAKLSAgcHJpdmF0ZSBib29sZWFuIGNyZWF0ZVBvcnQgPSBmYWxzZTsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgREVGQVVMVF9QT1JUX05BTUUgPSAiTmV3UG9ydCI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgQWRkU2VydmljZUNvbW1hbmQKLQkJKERlZmluaXRpb24gZGVmaW5pdGlvbiwgIAotCQkgU3RyaW5nIGxvY2FsTmFtZSkKLQl7Ci0JICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotCSAgdGhpcy5sb2NhbE5hbWUgPSBsb2NhbE5hbWU7Ci0JfQotCi0JcHVibGljIEFkZFNlcnZpY2VDb21tYW5kCi0JCShEZWZpbml0aW9uIGRlZmluaXRpb24sIAotCQkgU3RyaW5nIGxvY2FsTmFtZSwKLQkJIGJvb2xlYW4gY3JlYXRlUG9ydCkKLQl7Ci0JICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotCSAgdGhpcy5sb2NhbE5hbWUgPSBsb2NhbE5hbWU7Ci0JICB0aGlzLmNyZWF0ZVBvcnQgPSBjcmVhdGVQb3J0OwotCX0KLQotICBwdWJsaWMgV1NETEVsZW1lbnQgZ2V0V1NETEVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIHNlcnZpY2U7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBydW4oKQotICB7Ci0gICAgc2VydmljZSA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTZXJ2aWNlKCk7Ci0gICAgc2VydmljZS5zZXRRTmFtZShuZXcgUU5hbWUoZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKSxsb2NhbE5hbWUpKTsKLSAgICBzZXJ2aWNlLnNldEVuY2xvc2luZ0RlZmluaXRpb24oZGVmaW5pdGlvbik7Ci0gICAgZGVmaW5pdGlvbi5hZGRTZXJ2aWNlKHNlcnZpY2UpOwotICAgIAotICAgIGlmIChjcmVhdGVQb3J0KQotICAgIHsKLSAgICAgIEFkZFBvcnRDb21tYW5kIGNvbW1hbmQgPSAKLSAgICAgICAgbmV3IEFkZFBvcnRDb21tYW5kKHNlcnZpY2UsREVGQVVMVF9QT1JUX05BTUUpOwotICAgICAgY29tbWFuZC5ydW4oKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldExvY2FsTmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgIGxvY2FsTmFtZSA9IG5hbWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkVHlwZXNDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZFR5cGVzQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODdlNThjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkVHlwZXNDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlR5cGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExGYWN0b3J5OwotCi0vLyBEZWZpbml0aW9uIG11c3Qgbm90IGhhdmUgInR5cGVzIiBlbGVtZW50IHRvIHJ1biB0aGlzIGNvbW1hbmQuCi1wdWJsaWMgZmluYWwgY2xhc3MgQWRkVHlwZXNDb21tYW5kIGV4dGVuZHMgV1NETEVsZW1lbnRDb21tYW5kCi17Ci0gIHByaXZhdGUgRGVmaW5pdGlvbiBkZWZpbml0aW9uOwotICBwcml2YXRlIFR5cGVzIHR5cGVzOwotICAKLSAgcHVibGljIEFkZFR5cGVzQ29tbWFuZChEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcnVuKCkKLSAgewotICAJaWYgKCh0eXBlcyA9IGRlZmluaXRpb24uZ2V0RVR5cGVzKCkpICE9IG51bGwpCi0gICAgICByZXR1cm47IC8vICJ0eXBlcyIgYWxyZWFkeSBleGlzdHMuCi0gIAkKLSAgICB0eXBlcyA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVUeXBlcygpOwotICAgIHR5cGVzLnNldEVuY2xvc2luZ0RlZmluaXRpb24oZGVmaW5pdGlvbik7Ci0gICAgZGVmaW5pdGlvbi5zZXRUeXBlcyh0eXBlcyk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBXU0RMRWxlbWVudCBnZXRXU0RMRWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gdHlwZXM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnRDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwNDg3YmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnRDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmxlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsOwotCi1wdWJsaWMgZmluYWwgY2xhc3MgQWRkVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50Q29tbWFuZCBleHRlbmRzIFdTRExFbGVtZW50Q29tbWFuZAotewotICBwcml2YXRlIEV4dGVuc2libGVFbGVtZW50IGV4dGVuc2libGVFbGVtZW50OwotICBwcml2YXRlIFN0cmluZyBuYW1lc3BhY2VVUkk7Ci0gIHByaXZhdGUgU3RyaW5nIGxvY2FsTmFtZTsKLSAgcHJpdmF0ZSBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0gIHByaXZhdGUgTWFwIHByb3BlcnRpZXM7Ci0gCi0gIHB1YmxpYyBBZGRVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnRDb21tYW5kCi0gICAgKEV4dGVuc2libGVFbGVtZW50IGV4dGVuc2libGVFbGVtZW50LCAKLSAgICAgU3RyaW5nIG5hbWVzcGFjZVVSSSwKLSAgICAgU3RyaW5nIGxvY2FsTmFtZSkKLSAgewotICAgIHRoaXMuZXh0ZW5zaWJsZUVsZW1lbnQgPSBleHRlbnNpYmxlRWxlbWVudDsKLSAgICB0aGlzLm5hbWVzcGFjZVVSSSA9IG5hbWVzcGFjZVVSSTsKLSAgICB0aGlzLmxvY2FsTmFtZSA9IGxvY2FsTmFtZTsKLSAgfQotICAKLSAgcHVibGljIEFkZFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudENvbW1hbmQKLSAgICAoRXh0ZW5zaWJsZUVsZW1lbnQgZXh0ZW5zaWJsZUVsZW1lbnQsIAotICAgICBTdHJpbmcgbmFtZXNwYWNlVVJJLAotICAgICBTdHJpbmcgbG9jYWxOYW1lLAotICAgICBNYXAgcHJvcGVydGllcykKLSAgewotICAgIHRoaXMuZXh0ZW5zaWJsZUVsZW1lbnQgPSBleHRlbnNpYmxlRWxlbWVudDsKLSAgICB0aGlzLm5hbWVzcGFjZVVSSSA9IG5hbWVzcGFjZVVSSTsKLSAgICB0aGlzLmxvY2FsTmFtZSA9IGxvY2FsTmFtZTsKLSAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzOwotICB9Ci0gIAotICBwdWJsaWMgV1NETEVsZW1lbnQgZ2V0V1NETEVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIGV4dGVuc2liaWxpdHlFbGVtZW50OwotICB9Ci0KLSAgcHVibGljIHZvaWQgcnVuKCkKLSAgewotICAJZXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KCk7Ci0gIAlleHRlbnNpYmlsaXR5RWxlbWVudC5zZXRFbGVtZW50VHlwZShuZXcgUU5hbWUobmFtZXNwYWNlVVJJLGxvY2FsTmFtZSkpOwotICAJCi0gICAgaWYgKHByb3BlcnRpZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpdGVyYXRvciA9IHByb3BlcnRpZXMuZW50cnlTZXQoKS5pdGVyYXRvcigpOwotICAgICAgTWFwLkVudHJ5IGVudHJ5ID0gbnVsbDsKLSAgICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAJZW50cnkgPSAoTWFwLkVudHJ5KWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIAlTdHJpbmcgYXR0cmlidXRlID0gKFN0cmluZyllbnRyeS5nZXRLZXkoKTsKLSAgICAgIAlTdHJpbmcgdmFsdWUgPSAoU3RyaW5nKWVudHJ5LmdldFZhbHVlKCk7ICAgICAgCQotICAgICAgCSgoVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50SW1wbClleHRlbnNpYmlsaXR5RWxlbWVudCkuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSx2YWx1ZSk7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAJZXh0ZW5zaWJpbGl0eUVsZW1lbnQuc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihleHRlbnNpYmxlRWxlbWVudC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotICAJZXh0ZW5zaWJsZUVsZW1lbnQuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoZXh0ZW5zaWJpbGl0eUVsZW1lbnQpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZFhTREVsZW1lbnREZWNsYXJhdGlvbkNvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkWFNERWxlbWVudERlY2xhcmF0aW9uQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTE0ZTY3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkWFNERWxlbWVudERlY2xhcmF0aW9uQ29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kczsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTaW1wbGVUeXBlRGVmaW5pdGlvbjsKLQotCi0vLyBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gY3JlYXRlIGEgbmV3IFhTREVsZW1lbnREZWNsYXJhdGlvbiBpbiB0aGUgdGFyZ2V0TmFtZXNwYWNlLgotcHVibGljIGZpbmFsIGNsYXNzIEFkZFhTREVsZW1lbnREZWNsYXJhdGlvbkNvbW1hbmQgZXh0ZW5kcyBXU0RMRWxlbWVudENvbW1hbmQKLXsKLSAgcHJpdmF0ZSBEZWZpbml0aW9uIGRlZmluaXRpb247Ci0gIHByaXZhdGUgU3RyaW5nIHRhcmdldE5hbWVzcGFjZTsKLSAgcHJpdmF0ZSBTdHJpbmcgZWxlbWVudE5hbWU7Ci0gIHByaXZhdGUgWFNEU2NoZW1hIHNjaGVtYTsKLSAgcHJpdmF0ZSBYU0RFbGVtZW50RGVjbGFyYXRpb24geHNkRWxlbWVudDsKLSAgCi0gIC8qKgotICAgKiBUT0RPOgotICAgKiBXZSBoYXZlIGEgcG90ZW50aWFsIHByb2JsZW0gaGVyZS4uLi4gIFdoYXQgaWYgdGhlIGRlZmluaXRpb24gdGFyZ2V0bmFtZXNwYWNlIGlzIG51bGwuLi4uCi0gICAqLwotICBwdWJsaWMgQWRkWFNERWxlbWVudERlY2xhcmF0aW9uQ29tbWFuZChEZWZpbml0aW9uIGRlZmluaXRpb24sIFN0cmluZyBlbGVtZW50TmFtZSkKLSAgewotICAgIHRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247Ci0gICAgdGhpcy50YXJnZXROYW1lc3BhY2UgPSBkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgIHRoaXMuZWxlbWVudE5hbWUgPSBlbGVtZW50TmFtZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEBkZXByZWNhdGVkCi0gICAqIFVzZSBBZGRYU0RFbGVtZW50RGVjbGFyYXRpb25Db21tYW5kKERlZmluaXRpb24gZGVmaW5pdGlvbiwgU3RyaW5nIHR5cGVOYW1lKQotICAgKi8KLSAgcHVibGljIEFkZFhTREVsZW1lbnREZWNsYXJhdGlvbkNvbW1hbmQKLSAgICAoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCAKLSAgICAgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSwgCi0gICAgIFN0cmluZyBlbGVtZW50TmFtZSkKLSAgewotICAgIHRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247Ci0gICAgdGhpcy50YXJnZXROYW1lc3BhY2UgPSB0YXJnZXROYW1lc3BhY2U7Ci0gICAgdGhpcy5lbGVtZW50TmFtZSA9IGVsZW1lbnROYW1lOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcnVuKCkKLSAgewotICAgIFhTRFNjaGVtYSB4c2RTY2hlbWEgPSBnZXRTY2hlbWEoKTsKLSAgICBYU0RFbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudERlY2wgPSAKLSAgICAgIFhTREZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVhTREVsZW1lbnREZWNsYXJhdGlvbigpOwotICAgIGVsZW1lbnREZWNsLnNldE5hbWUoZWxlbWVudE5hbWUpOwotICAgIAotICAgIFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uIHNpbXBsZVR5cGVEZWZpbml0aW9uID0gZ2V0WFNEU3RyaW5nVHlwZSh4c2RTY2hlbWEpOwotICAgIGVsZW1lbnREZWNsLnNldFR5cGVEZWZpbml0aW9uKHNpbXBsZVR5cGVEZWZpbml0aW9uKTsgICAgCi0gICAgeHNkU2NoZW1hLmdldENvbnRlbnRzKCkuYWRkKGVsZW1lbnREZWNsKTsKLSAgICAKLSAgICB4c2RFbGVtZW50ID0gZWxlbWVudERlY2w7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHJ1bihTdHJpbmcgbmV3RWxlbWVudE5hbWUpIHsKLSAgCWVsZW1lbnROYW1lID0gbmV3RWxlbWVudE5hbWU7Ci0gIAlydW4oKTsKLSAgfQotICAKLSAgLyoKLSAgICogU3BlY2lmeSB3aGljaCBTY2hlbWEgdG8gdXNlIHdoZW4gY3JlYXRpbmcgdGhlIFR5cGUuCi0gICAqIENhbGwgdGhpcyBtZXRob2QgYmVmb3JlIGNhbGxpbmcgcnVuKCkuICBPdGhlcndpc2UgaXQgd2lsbCB1c2UgdGhlIGZpcnN0Ci0gICAqIFNjaGVtYSBpdCBmaW5kcy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNjaGVtYShYU0RTY2hlbWEgc2NoZW1hKSB7Ci0gIAl0aGlzLnNjaGVtYSA9IHNjaGVtYTsKLSAgfQotICAKLSAgLyoKLSAgICogUmV0dXJuIHRoZSBTY2hlbWEgdXNlZCB0byBjcmVhdGUgdGhlIFR5cGUKLSAgICovCi0gIHB1YmxpYyBYU0RTY2hlbWEgZ2V0U2NoZW1hKCkgewotICAJaWYgKHNjaGVtYSA9PSBudWxsKSB7Ci0gIAkJcmV0dXJuIGdldFhTRFNjaGVtYSh0YXJnZXROYW1lc3BhY2UpOwotICAJfQotICAJZWxzZSB7Ci0gIAkJcmV0dXJuIHNjaGVtYTsKLSAgCX0KLSAgfQotICAKLSAgcHJpdmF0ZSBYU0RTaW1wbGVUeXBlRGVmaW5pdGlvbiBnZXRYU0RTdHJpbmdUeXBlKFhTRFNjaGVtYSBzY2hlbWEpCi0gIHsKLSAgICByZXR1cm4gc2NoZW1hLmdldFNjaGVtYUZvclNjaGVtYSgpLnJlc29sdmVTaW1wbGVUeXBlRGVmaW5pdGlvbigic3RyaW5nIik7IC8vJE5PTi1OTFMtMSQKLSAgfQotICAKLSAgcHJpdmF0ZSBYU0RTY2hlbWEgZ2V0WFNEU2NoZW1hKFN0cmluZyB0YXJnZXROYW1lc3BhY2UpCi0gIHsKLSAgICBYU0RTY2hlbWEgeHNkU2NoZW1hOwotICAgIAotICAgIC8vIERvIHdlIGhhdmUgYSBzY2hlbWEgYWxyZWFkeT8KLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IGdldFR5cGVzKCkuZ2V0U2NoZW1hcyh0YXJnZXROYW1lc3BhY2UpLml0ZXJhdG9yKCk7Ci0gICAgaWYgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICB4c2RTY2hlbWEgPSAoWFNEU2NoZW1hKWl0ZXJhdG9yLm5leHQoKTsgLy8gR2V0IHRoZSBmaXJzdCBvbmUuCi0gICAgICByZXR1cm4geHNkU2NoZW1hOwotICAgIH0KLSAgICBlbHNlCi0gICAgewkgICAgCi0gICAgICAvLyBDcmVhdGUgYSBuZXcgc2NoZW1hIGJlY2F1c2UgdGhlcmUncyBub25lLgotICAgICAgQWRkWFNEU2NoZW1hQ29tbWFuZCBjb21tYW5kID0gbmV3IEFkZFhTRFNjaGVtYUNvbW1hbmQoZGVmaW5pdGlvbix0YXJnZXROYW1lc3BhY2UpOwotICAgICAgY29tbWFuZC5ydW4oKTsKLSAgICAgIHJldHVybiAoKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KWNvbW1hbmQuZ2V0V1NETEVsZW1lbnQoKSkuZ2V0U2NoZW1hKCk7Ci0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIFR5cGVzIGdldFR5cGVzKCkKLSAgewotICAgIC8vIFR5cGVzIGlzIGNyZWF0ZWQgaWYgaXQgZG9lcyBub3QgZXhpc3QgeWV0LgotICAgIFR5cGVzIHR5cGVzID0gKFR5cGVzKWRlZmluaXRpb24uZ2V0VHlwZXMoKTsKLSAgICBpZiAodHlwZXMgIT0gbnVsbCkKLSAgICAgIHJldHVybiB0eXBlczsKLSAgICBlbHNlCi0gICAgewotICAgICAgQWRkVHlwZXNDb21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkVHlwZXNDb21tYW5kKGRlZmluaXRpb24pOwotICAgICAgY29tbWFuZC5ydW4oKTsKLSAgICAgIHJldHVybiAoVHlwZXMpY29tbWFuZC5nZXRXU0RMRWxlbWVudCgpOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIFdTRExFbGVtZW50IGdldFdTRExFbGVtZW50KCkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotICBwdWJsaWMgWFNERWxlbWVudERlY2xhcmF0aW9uIGdldFhTREVsZW1lbnQoKQotICB7Ci0JICByZXR1cm4geHNkRWxlbWVudDsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkWFNEU2NoZW1hQ29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRYU0RTY2hlbWFDb21tYW5kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwNzkxNjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9BZGRYU0RTY2hlbWFDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlR5cGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci0KLQotCi1wdWJsaWMgZmluYWwgY2xhc3MgQWRkWFNEU2NoZW1hQ29tbWFuZCBleHRlbmRzIFdTRExFbGVtZW50Q29tbWFuZAotewotICBwcml2YXRlIERlZmluaXRpb24gZGVmaW5pdGlvbjsKLSAgcHJpdmF0ZSBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXR5RWxlbWVudDsKLSAgcHJpdmF0ZSBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlOwotICAKLSAgcHVibGljIEFkZFhTRFNjaGVtYUNvbW1hbmQoRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICB7Ci0gICAgdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjsKLSAgICB0aGlzLnRhcmdldE5hbWVzcGFjZSA9IGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBBZGRYU0RTY2hlbWFDb21tYW5kKERlZmluaXRpb24gZGVmaW5pdGlvbiwgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSkKLSAgewotICAgIHRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247Ci0gICAgdGhpcy50YXJnZXROYW1lc3BhY2UgPSB0YXJnZXROYW1lc3BhY2U7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHJ1bigpCi0gIHsgICAgCi0gICAgZXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKTsKLSAgICBleHRlbnNpYmlsaXR5RWxlbWVudC5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKGRlZmluaXRpb24pOwotIAotICAgIFhTRFNjaGVtYSB4c2RTY2hlbWEgPSBYU0RGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVYU0RTY2hlbWEoKTsKLSAgICB4c2RTY2hlbWEuc2V0U2NoZW1hRm9yU2NoZW1hUU5hbWVQcmVmaXgoInhzZCIpOyAvLyROT04tTkxTLTEkCi0gICAgeHNkU2NoZW1hLnNldFRhcmdldE5hbWVzcGFjZSh0YXJnZXROYW1lc3BhY2UpOwotICAgIC8vIENob29zZSB0aGUgcHJlZml4IENob29zZSB0aGUgcHJlZml4IHVzZWQgZm9yIHRoaXMgc2NoZW1hJ3MgbmFtZXNwYWNlIGFuZCB0aGUgc2NoZW1hIGZvciBzY2hlbWEncyBuYW1lc3BhY2UuCi0gICAgLy8gICAgCi0gICAgamF2YS51dGlsLk1hcCBxTmFtZVByZWZpeFRvTmFtZXNwYWNlTWFwID0geHNkU2NoZW1hLmdldFFOYW1lUHJlZml4VG9OYW1lc3BhY2VNYXAoKTsKLS8vICAgIHFOYW1lUHJlZml4VG9OYW1lc3BhY2VNYXAucHV0KCJwIiwgeHNkU2NoZW1hLmdldFRhcmdldE5hbWVzcGFjZSgpKTsKLSAgICBxTmFtZVByZWZpeFRvTmFtZXNwYWNlTWFwLnB1dAotCSAgKHhzZFNjaGVtYS5nZXRTY2hlbWFGb3JTY2hlbWFRTmFtZVByZWZpeCgpLG9yZy5lY2xpcHNlLnhzZC51dGlsLlhTRENvbnN0YW50cy5TQ0hFTUFfRk9SX1NDSEVNQV9VUklfMjAwMSk7Ci0gICAgZXh0ZW5zaWJpbGl0eUVsZW1lbnQuc2V0U2NoZW1hKHhzZFNjaGVtYSk7Ci0gICAgICAgCi0gICAgLy8gVEJEIC0gQ2hlY2sgaWYgbXVsdGlwbGUgc2NoZW1hcyB3aXRoIHRoZSBzYW1lIHRhcmdldE5hbWVzcGFjZSBjYW4gY28tZXhpc3QuCi0gICAgVHlwZXMgdHlwZXMgPSBnZXRUeXBlcygpOwotICAgIHR5cGVzLmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KGV4dGVuc2liaWxpdHlFbGVtZW50KTsKLSAgICAKLSAgICBpZiAoZGVmaW5pdGlvbi5nZXRFVHlwZXMoKSA9PSBudWxsKSB7Ci0gICAgCWRlZmluaXRpb24uc2V0RVR5cGVzKHR5cGVzKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIFR5cGVzIGdldFR5cGVzKCkKLSAgewotICAgIC8vIFR5cGVzIGlzIGNyZWF0ZWQgaWYgaXQgZG9lcyBub3QgZXhpc3QuCi0gICAgVHlwZXMgdHlwZXMgPSAoVHlwZXMpZGVmaW5pdGlvbi5nZXRUeXBlcygpOwotICAgIGlmICh0eXBlcyAhPSBudWxsKQotICAgICAgcmV0dXJuIHR5cGVzOwotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHR5cGVzID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVR5cGVzKCk7Ci0gICAgICAgIHR5cGVzLnNldEVuY2xvc2luZ0RlZmluaXRpb24oZGVmaW5pdGlvbik7Ci0gICAgICAgIHJldHVybiB0eXBlczsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBXU0RMRWxlbWVudCBnZXRXU0RMRWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gZXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkWFNEVHlwZURlZmluaXRpb25Db21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL0FkZFhTRFR5cGVEZWZpbml0aW9uQ29tbWFuZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Y2Q3Y2VhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvY29tbWFuZHMvQWRkWFNEVHlwZURlZmluaXRpb25Db21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5UeXBlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RUeXBlRGVmaW5pdGlvbjsKLQotLy8gVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGNyZWF0ZSBhIG5ldyBYU0RUeXBlRGVmaW5pdGlvbiBpbiB0aGUgdGFyZ2V0TmFtZXNwYWNlLgotcHVibGljIGZpbmFsIGNsYXNzIEFkZFhTRFR5cGVEZWZpbml0aW9uQ29tbWFuZCBleHRlbmRzIFdTRExFbGVtZW50Q29tbWFuZAotewotICBwcml2YXRlIERlZmluaXRpb24gZGVmaW5pdGlvbjsKLSAgcHJpdmF0ZSBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlOwotICBwcml2YXRlIFN0cmluZyB0eXBlTmFtZTsKLSAgcHJpdmF0ZSBYU0RTY2hlbWEgc2NoZW1hOwotICBwcml2YXRlIFhTRFR5cGVEZWZpbml0aW9uIHhzZFR5cGU7Ci0gIHByaXZhdGUgYm9vbGVhbiBpc0NvbXBsZXhUeXBlID0gdHJ1ZTsKLSAgCi0gIC8qKgotICAgKiBUT0RPOgotICAgKiBXZSBoYXZlIGEgcG90ZW50aWFsIHByb2JsZW0gaGVyZS4uLi4gIFdoYXQgaWYgdGhlIGRlZmluaXRpb24gdGFyZ2V0bmFtZXNwYWNlIGlzIG51bGwuLi4uCi0gICAqLwotICBwdWJsaWMgQWRkWFNEVHlwZURlZmluaXRpb25Db21tYW5kKERlZmluaXRpb24gZGVmaW5pdGlvbiwgU3RyaW5nIHR5cGVOYW1lKQotICB7Ci0gICAgdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjsKLSAgICB0aGlzLnRhcmdldE5hbWVzcGFjZSA9IGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgdGhpcy50eXBlTmFtZSA9IHR5cGVOYW1lOwotICB9Ci0gIAotICBwdWJsaWMgQWRkWFNEVHlwZURlZmluaXRpb25Db21tYW5kKERlZmluaXRpb24gZGVmaW5pdGlvbiwgU3RyaW5nIHR5cGVOYW1lLCBib29sZWFuIGlzQ29tcGxleFR5cGUpCi0gIHsKLSAgCXRoaXMoZGVmaW5pdGlvbiwgdHlwZU5hbWUpOwotICAJdGhpcy5pc0NvbXBsZXhUeXBlID0gaXNDb21wbGV4VHlwZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEBkZXByZWNhdGVkCi0gICAqIFVzZSBBZGRYU0RUeXBlRGVmaW5pdGlvbkNvbW1hbmQoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBTdHJpbmcgdHlwZU5hbWUpCi0gICAqLwotICBwdWJsaWMgQWRkWFNEVHlwZURlZmluaXRpb25Db21tYW5kCi0gICAgKERlZmluaXRpb24gZGVmaW5pdGlvbiwgCi0gICAgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UsCi0gICAgIFN0cmluZyB0eXBlTmFtZSkKLSAgewotICAgIHRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247Ci0gICAgdGhpcy50YXJnZXROYW1lc3BhY2UgPSB0YXJnZXROYW1lc3BhY2U7Ci0gICAgdGhpcy50eXBlTmFtZSA9IHR5cGVOYW1lOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBydW4oKQotICB7Ci0gICAgWFNEU2NoZW1hIHhzZFNjaGVtYSA9IGdldFNjaGVtYSgpOwotICAgIFhTRFR5cGVEZWZpbml0aW9uIHR5cGVEZWY7Ci0gICAgCi0gICAgaWYgKGlzQ29tcGxleFR5cGUpIHsKLSAgICAJdHlwZURlZiA9IFhTREZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbigpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAJdHlwZURlZiA9IFhTREZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVhTRFNpbXBsZVR5cGVEZWZpbml0aW9uKCk7Ci0gICAgfQotICAgIAotICAgIHR5cGVEZWYuc2V0TmFtZSh0eXBlTmFtZSk7Ci0gICAgeHNkU2NoZW1hLmdldENvbnRlbnRzKCkuYWRkKHR5cGVEZWYpOwotICAgIAotICAgIHhzZFR5cGUgPSB0eXBlRGVmOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBydW4oU3RyaW5nIG5ld1R5cGVOYW1lKSB7Ci0gIAl0eXBlTmFtZSA9IG5ld1R5cGVOYW1lOwotICAJcnVuKCk7Ci0gIH0KLSAgCi0gIC8qCi0gICAqIFNwZWNpZml5IGlmIHdlIHNob3VsZCBjcmVhdGUgYSBjb21wbGV4IG9yIHNpbXBsZSB0eXBlLiAgVGhpcyBzaG91bGQgc2hvdWxkIGJlCi0gICAqIGNhbGxlZCBiZWZvcmUgcnVuKCkuCi0gICAqIE92ZXJyaWRlcyB0aGUgdmFsdWUgc2V0IHdoZW4gdGhlIGNvbnN0cnVjdG9yCi0gICAqIEFkZFhTRFR5cGVEZWZpbml0aW9uQ29tbWFuZChEZWZpbml0aW9uIGRlZmluaXRpb24sIFN0cmluZyB0eXBlTmFtZSwgYm9vbGVhbiBpc0NvbXBsZXhUeXBlKQotICAgKiBpcyB1c2VkLgotICAgKi8KLSAgcHVibGljIHZvaWQgaXNDb21wbGV4VHlwZShib29sZWFuIGlzQ29tcGxleFR5cGUpIHsKLSAgCXRoaXMuaXNDb21wbGV4VHlwZSA9IGlzQ29tcGxleFR5cGU7Ci0gIH0KLSAgCi0gIC8qCi0gICAqIFNwZWNpZnkgd2hpY2ggU2NoZW1hIHRvIHVzZSB3aGVuIGNyZWF0aW5nIHRoZSBUeXBlLgotICAgKiBDYWxsIHRoaXMgbWV0aG9kIGJlZm9yZSBjYWxsaW5nIHJ1bigpLiAgT3RoZXJ3aXNlIGl0IHdpbGwgdXNlIHRoZSBmaXJzdAotICAgKiBTY2hlbWEgaXQgZmluZHMuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTY2hlbWEoWFNEU2NoZW1hIHNjaGVtYSkgewotICAJdGhpcy5zY2hlbWEgPSBzY2hlbWE7Ci0gIH0KLSAgCi0gIC8qCi0gICAqIFJldHVybiB0aGUgU2NoZW1hIHVzZWQgdG8gY3JlYXRlIHRoZSBUeXBlCi0gICAqLwotICBwdWJsaWMgWFNEU2NoZW1hIGdldFNjaGVtYSgpIHsKLSAgCWlmIChzY2hlbWEgPT0gbnVsbCkgewotICAJCXJldHVybiBnZXRYU0RTY2hlbWEodGFyZ2V0TmFtZXNwYWNlKTsKLSAgCX0KLSAgCWVsc2UgewotICAJCXJldHVybiBzY2hlbWE7Ci0gIAl9Ci0gIH0KLQotICBwcml2YXRlIFhTRFNjaGVtYSBnZXRYU0RTY2hlbWEoU3RyaW5nIHRhcmdldE5hbWVzcGFjZSkKLSAgewotICAgIFhTRFNjaGVtYSB4c2RTY2hlbWE7Ci0gICAgCi0gICAgLy8gRG8gd2UgaGF2ZSBhIHNjaGVtYSBhbHJlYWR5PwotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gZ2V0VHlwZXMoKS5nZXRTY2hlbWFzKHRhcmdldE5hbWVzcGFjZSkuaXRlcmF0b3IoKTsKLSAgICBpZiAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIHhzZFNjaGVtYSA9IChYU0RTY2hlbWEpaXRlcmF0b3IubmV4dCgpOyAvLyBHZXQgdGhlIGZpcnN0IG9uZS4KLSAgICAgIHJldHVybiB4c2RTY2hlbWE7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7CSAgICAKLSAgICAgIC8vIENyZWF0ZSBhIG5ldyBzY2hlbWEgYmVjYXVzZSB0aGVyZSdzIG5vbmUuCi0gICAgICBBZGRYU0RTY2hlbWFDb21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkWFNEU2NoZW1hQ29tbWFuZChkZWZpbml0aW9uLHRhcmdldE5hbWVzcGFjZSk7Ci0gICAgICBjb21tYW5kLnJ1bigpOwotICAgICAgcmV0dXJuICgoWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpY29tbWFuZC5nZXRXU0RMRWxlbWVudCgpKS5nZXRTY2hlbWEoKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHByaXZhdGUgVHlwZXMgZ2V0VHlwZXMoKQotICB7Ci0gICAgLy8gVHlwZXMgaXMgY3JlYXRlZCBpZiBpdCBkb2VzIG5vdCBleGlzdCB5ZXQuCi0gICAgVHlwZXMgdHlwZXMgPSAoVHlwZXMpZGVmaW5pdGlvbi5nZXRUeXBlcygpOwotICAgIGlmICh0eXBlcyAhPSBudWxsKQotICAgICAgcmV0dXJuIHR5cGVzOwotICAgIGVsc2UKLSAgICB7Ci0gICAgICBBZGRUeXBlc0NvbW1hbmQgY29tbWFuZCA9IG5ldyBBZGRUeXBlc0NvbW1hbmQoZGVmaW5pdGlvbik7Ci0gICAgICBjb21tYW5kLnJ1bigpOwotICAgICAgcmV0dXJuIChUeXBlcyljb21tYW5kLmdldFdTRExFbGVtZW50KCk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgV1NETEVsZW1lbnQgZ2V0V1NETEVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHB1YmxpYyBYU0RUeXBlRGVmaW5pdGlvbiBnZXRYU0RFbGVtZW50KCkKLSAgewotCSAgcmV0dXJuIHhzZFR5cGU7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL1dTRExFbGVtZW50Q29tbWFuZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9jb21tYW5kcy9XU0RMRWxlbWVudENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTAxODA1MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2NvbW1hbmRzL1dTRExFbGVtZW50Q29tbWFuZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBXU0RMRWxlbWVudENvbW1hbmQKLXsKLSAgcHVibGljIGFic3RyYWN0IFdTRExFbGVtZW50IGdldFdTRExFbGVtZW50KCk7Ci0gIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHJ1bigpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9kaWFsb2dzL0VkaXROYW1lc3BhY2VzRGlhbG9nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2RpYWxvZ3MvRWRpdE5hbWVzcGFjZXNEaWFsb2cuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQ0ZWJhNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2RpYWxvZ3MvRWRpdE5hbWVzcGFjZXNEaWFsb2cuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZGlhbG9nczsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwubnNlZGl0LkNvbW1vbkVkaXROYW1lc3BhY2VzVGFyZ2V0RmllbGREaWFsb2c7Ci0KLXB1YmxpYyBjbGFzcyBFZGl0TmFtZXNwYWNlc0RpYWxvZyBleHRlbmRzIERpYWxvZwotewotICBwcm90ZWN0ZWQgQnV0dG9uIG9rQnV0dG9uOwotICBwcm90ZWN0ZWQgU3RyaW5nIHRpdGxlOwotICBwcm90ZWN0ZWQgU3RyaW5nIHRhcmdldE5hbWVzcGFjZTsKLSAgcHJvdGVjdGVkIExpc3QgbmFtZXNwYWNlSW5mb0xpc3Q7Ci0gIHByb3RlY3RlZCBDb21tb25FZGl0TmFtZXNwYWNlc1RhcmdldEZpZWxkRGlhbG9nIGVkaXRXU0RMTmFtZXNwYWNlc0NvbnRyb2w7Ci0gIHByb3RlY3RlZCBJUGF0aCByZXNvdXJjZUxvY2F0aW9uOwotICAvLyAgcHJvdGVjdGVkIExhYmVsIGVycm9yTWVzc2FnZUxhYmVsOwotICAvLyAgcHJvdGVjdGVkIFN0cmluZyBlcnJvck1lc3NhZ2U7ICAKLQotICAvL3Byb3RlY3RlZCBMYWJlbCBlcnJvck1lc3NhZ2VMYWJlbDsKLQotICBwdWJsaWMgRWRpdE5hbWVzcGFjZXNEaWFsb2coU2hlbGwgcGFyZW50U2hlbGwsIElQYXRoIHJlc291cmNlTG9jYXRpb24sIFN0cmluZyB0aXRsZSwgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSwgTGlzdCBuYW1lc3BhY2VMaXN0KQotICB7Ci0gICAgc3VwZXIocGFyZW50U2hlbGwpOwotICAgIHRoaXMucmVzb3VyY2VMb2NhdGlvbiA9IHJlc291cmNlTG9jYXRpb247Ci0gICAgc2V0U2hlbGxTdHlsZShnZXRTaGVsbFN0eWxlKCkgfCBTV1QuUkVTSVpFKTsKLSAgICB0aGlzLnRpdGxlID0gdGl0bGU7Ci0gICAgdGhpcy50YXJnZXROYW1lc3BhY2UgPSB0YXJnZXROYW1lc3BhY2U7Ci0gICAgdGhpcy5uYW1lc3BhY2VJbmZvTGlzdCA9IG5hbWVzcGFjZUxpc3Q7Ci0gIH0KLQotICBwdWJsaWMgaW50IGNyZWF0ZUFuZE9wZW4oKQotICB7Ci0gICAgY3JlYXRlKCk7Ci0gICAgZ2V0U2hlbGwoKS5zZXRUZXh0KHRpdGxlKTsKLSAgICBzZXRCbG9ja09uT3Blbih0cnVlKTsKLSAgICByZXR1cm4gb3BlbigpOwotICB9Ci0KLSAgcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlQ29udGVudHMoQ29tcG9zaXRlIHBhcmVudCkKLSAgewotICAgIENvbnRyb2wgY29udHJvbCA9IHN1cGVyLmNyZWF0ZUNvbnRlbnRzKHBhcmVudCk7Ci0gICAgdXBkYXRlRXJyb3JNZXNzYWdlKCk7Ci0gICAgcmV0dXJuIGNvbnRyb2w7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVCdXR0b25zRm9yQnV0dG9uQmFyKENvbXBvc2l0ZSBwYXJlbnQpCi0gIHsKLSAgICBva0J1dHRvbiA9IGNyZWF0ZUJ1dHRvbihwYXJlbnQsIElEaWFsb2dDb25zdGFudHMuT0tfSUQsIElEaWFsb2dDb25zdGFudHMuT0tfTEFCRUwsIHRydWUpOwotICAgIGNyZWF0ZUJ1dHRvbihwYXJlbnQsIElEaWFsb2dDb25zdGFudHMuQ0FOQ0VMX0lELCBJRGlhbG9nQ29uc3RhbnRzLkNBTkNFTF9MQUJFTCwgZmFsc2UpOwotICB9Ci0KLSAgcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlRGlhbG9nQXJlYShDb21wb3NpdGUgcGFyZW50KQotICB7Ci0gICAgQ29tcG9zaXRlIGRpYWxvZ0FyZWEgPSAoQ29tcG9zaXRlKSBzdXBlci5jcmVhdGVEaWFsb2dBcmVhKHBhcmVudCk7Ci0gICAgZWRpdFdTRExOYW1lc3BhY2VzQ29udHJvbCA9IG5ldyBDb21tb25FZGl0TmFtZXNwYWNlc1RhcmdldEZpZWxkRGlhbG9nKGRpYWxvZ0FyZWEsIHJlc291cmNlTG9jYXRpb24pOwotICAgIGVkaXRXU0RMTmFtZXNwYWNlc0NvbnRyb2wuc2V0TmFtZXNwYWNlSW5mb0xpc3QobmFtZXNwYWNlSW5mb0xpc3QpOwotICAgIGVkaXRXU0RMTmFtZXNwYWNlc0NvbnRyb2wuc2V0VGFyZ2V0TmFtZXNwYWNlKHRhcmdldE5hbWVzcGFjZSk7Ci0KLSAgICByZXR1cm4gZGlhbG9nQXJlYTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkKLSAgewotICAgIHVwZGF0ZUVycm9yTWVzc2FnZSgpOwotICB9Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyBjb21wdXRlRXJyb3JNZXNzYWdlKFN0cmluZyBuYW1lKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB1cGRhdGVFcnJvck1lc3NhZ2UoKQotICB7Ci0gICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IG51bGw7Ci0gICAgLyoKLSAgICBTdHJpbmcgbmFtZSA9IG5hbWVGaWVsZC5nZXRUZXh0KCkudHJpbSgpOwotICAgIGlmIChuYW1lLmxlbmd0aCgpID4gMCkKLSAgICB7Ci0gICAgICBlcnJvck1lc3NhZ2UgPSBjb21wdXRlRXJyb3JNZXNzYWdlKG5hbWUpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgZXJyb3JNZXNzYWdlID0gIiI7Ci0gICAgfSovCi0KLSAgICAvL2Vycm9yTWVzc2FnZUxhYmVsLnNldFRleHQoZXJyb3JNZXNzYWdlICE9IG51bGwgPyBlcnJvck1lc3NhZ2UgOiAiIik7Ci0gICAgb2tCdXR0b24uc2V0RW5hYmxlZChlcnJvck1lc3NhZ2UgPT0gbnVsbCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBidXR0b25QcmVzc2VkKGludCBidXR0b25JZCkKLSAgewotICAgIGlmIChidXR0b25JZCA9PSBJRGlhbG9nQ29uc3RhbnRzLk9LX0lEKQotICAgIHsKLSAgICAgIHRhcmdldE5hbWVzcGFjZSA9IGVkaXRXU0RMTmFtZXNwYWNlc0NvbnRyb2wuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgfQotICAgIHN1cGVyLmJ1dHRvblByZXNzZWQoYnV0dG9uSWQpOwotICB9Ci0KLSAgcHVibGljIExpc3QgZ2V0TmFtZXNwYWNlSW5mb0xpc3QoKQotICB7Ci0gICAgcmV0dXJuIG5hbWVzcGFjZUluZm9MaXN0OwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRUYXJnZXROYW1lc3BhY2UoKQotICB7Ci0gICAgcmV0dXJuIHRhcmdldE5hbWVzcGFjZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9kaWFsb2dzL0dlbmVyYXRlQmluZGluZ09uU2F2ZURpYWxvZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9kaWFsb2dzL0dlbmVyYXRlQmluZGluZ09uU2F2ZURpYWxvZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MGNlYWY5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZGlhbG9ncy9HZW5lcmF0ZUJpbmRpbmdPblNhdmVEaWFsb2cuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5kaWFsb2dzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotCi1wdWJsaWMgY2xhc3MgR2VuZXJhdGVCaW5kaW5nT25TYXZlRGlhbG9nIGV4dGVuZHMgTWVzc2FnZURpYWxvZyBpbXBsZW1lbnRzIFNlbGVjdGlvbkxpc3RlbmVyIHsKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZGlhbG9nVGl0bGUgPSBNZXNzYWdlcy5fVUlfUkVHRU5fQklORElORFNfT05fU0FWRTsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIFN0cmluZyBkaWFsb2dNZXNzYWdlID0gTWVzc2FnZXMuX1VJX1JFR0VOX0JJTkRJTkdTX09OX1NBVkVfUVVFU1RJT05NQVJLOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nW10gYnV0dG9ucyA9IG5ldyBTdHJpbmdbXXtNZXNzYWdlcy5fVUlfWUVTX0xBQkVMLCBNZXNzYWdlcy5fVUlfTk9fTEFCRUwsIE1lc3NhZ2VzLl9VSV9DQU5DRUxfTEFCRUx9OyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAotCQotCXByaXZhdGUgQnV0dG9uIHJlbWVtYmVyRGVjaXNpb25Cb3g7Ci0JcHJpdmF0ZSBib29sZWFuIHJlbWVtYmVyRGVjaXNpb24gPSBmYWxzZTsKLQkKLQlwdWJsaWMgR2VuZXJhdGVCaW5kaW5nT25TYXZlRGlhbG9nKFNoZWxsIHNoZWxsKSB7Ci0JCXN1cGVyKHNoZWxsLCBkaWFsb2dUaXRsZSwgbnVsbCwgZGlhbG9nTWVzc2FnZSwgTWVzc2FnZURpYWxvZy5RVUVTVElPTiwgYnV0dG9ucywgMCk7Ci0JfQotCQotCQotCXByb3RlY3RlZCBDb250cm9sIGNyZWF0ZUN1c3RvbUFyZWEoQ29tcG9zaXRlIHBhcmVudCkgewotCQlDb21wb3NpdGUgY29tcCA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7Ci0JCUdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLQkJbGF5b3V0Lm51bUNvbHVtbnMgPSAyOwotCQljb21wLnNldExheW91dChsYXlvdXQpOwotCQljb21wLnNldERhdGEobmV3IEdyaWREYXRhKCkpOwotCQkKLQkJLy8gU3BhY2VyCi0JCW5ldyBMYWJlbChjb21wLCBTV1QuTk9ORSk7Ci0JCW5ldyBMYWJlbChjb21wLCBTV1QuTk9ORSk7Ci0JCQotCQlyZW1lbWJlckRlY2lzaW9uQm94ID0gbmV3IEJ1dHRvbihjb21wLCBTV1QuQ0hFQ0spOwotCQlyZW1lbWJlckRlY2lzaW9uQm94LnNldFRleHQoTWVzc2FnZXMuX1VJX1JFTUVNQkVSX01ZX0RFQ0lTSU9OX0xBQkVMKTsKLQkJcmVtZW1iZXJEZWNpc2lvbkJveC5hZGRTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKLQotCQlyZXR1cm4gcGFyZW50OwotCX0KLQkKLQlwcml2YXRlIHZvaWQgc3RvcmVQcm9tcHRQcmVmZXJlbmNlKGludCBzd3RWYWx1ZSkgewotCQkvLyBTdG9yZSB0aGUgbmV3IHByZWZlcmVuY2UgZm9yIGRpc3BsYXlpbmcgdGhpcyBkaWFsb2cuCi0JCWlmIChyZW1lbWJlckRlY2lzaW9uKSB7Ci0JCQlXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKS5zZXRWYWx1ZShNZXNzYWdlcy5fVUlfUFJFRl9QQUdFX1BST01QVF9SRUdFTl9CSU5ESU5HX09OX1NBVkUsIGZhbHNlKTsgLy8kTk9OLU5MUy0xJAotCQkKLQkJCVN0cmluZyBnZW5lcmF0ZUlEID0gTWVzc2FnZXMuX1VJX1BSRUZfUEFHRV9BVVRPX1JFR0VORVJBVEVfQklORElORzsgLy8kTk9OLU5MUy0xJAotCQkJaWYgKHN3dFZhbHVlID09IFNXVC5ZRVMpIHsKLQkJCQlXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKS5zZXRWYWx1ZShnZW5lcmF0ZUlELCB0cnVlKTsKLQkJCX0KLQkJCWVsc2UgaWYgKHN3dFZhbHVlID09IFNXVC5OTykgewotCQkJCVdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpLnNldFZhbHVlKGdlbmVyYXRlSUQsIGZhbHNlKTsKLQkJCX0KLQkJfQotCX0KLQkKLQlwdWJsaWMgaW50IG9wZW4oKSB7Ci0JCWludCByVmFsdWUgPSBzdXBlci5vcGVuKCk7Ci0JCQotCQlpZiAoclZhbHVlID09MCkgewotCQkJc3RvcmVQcm9tcHRQcmVmZXJlbmNlKFNXVC5ZRVMpOwotCQkJcmV0dXJuIFNXVC5ZRVM7Ci0JCX0KLQkJZWxzZSBpZiAoclZhbHVlID09IDEpIHsKLQkJCXN0b3JlUHJvbXB0UHJlZmVyZW5jZShTV1QuTk8pOwotCQkJcmV0dXJuIFNXVC5OTzsKLQkJfQotCQllbHNlIGlmIChyVmFsdWUgPT0gMikgewotCQkJc3RvcmVQcm9tcHRQcmVmZXJlbmNlKFNXVC5DQU5DRUwpOwotCQkJcmV0dXJuIFNXVC5DQU5DRUw7Ci0JCX0KLQkJCi0JCXJldHVybiByVmFsdWU7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLQkJaWYgKGUud2lkZ2V0ID09IHJlbWVtYmVyRGVjaXNpb25Cb3gpIHsKLQkJCXJlbWVtYmVyRGVjaXNpb24gPSByZW1lbWJlckRlY2lzaW9uQm94LmdldFNlbGVjdGlvbigpOwotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7fQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9kaWFsb2dzL05ld0NvbXBvbmVudERpYWxvZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9kaWFsb2dzL05ld0NvbXBvbmVudERpYWxvZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTg2ODdiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZGlhbG9ncy9OZXdDb21wb25lbnREaWFsb2cuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZGlhbG9nczsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLQotLyoKLSAqIFRPRE86IHJtYWg6IGxvb2sgYXQgcmVtb3ZpbmcgdGhpcyBjbGFzcy4gIERvZXNuJ3QgbG9vayBsaWtlIGl0J3MgdXNlZC4KLSAqLwotcHVibGljIGNsYXNzIE5ld0NvbXBvbmVudERpYWxvZyBleHRlbmRzIERpYWxvZyBpbXBsZW1lbnRzIE1vZGlmeUxpc3RlbmVyCi17Ci0gIHByb3RlY3RlZCBUZXh0IG5hbWVGaWVsZDsgCi0gIHByb3RlY3RlZCBCdXR0b24gb2tCdXR0b247Ci0gIHByb3RlY3RlZCBTdHJpbmcgbmFtZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICBwcm90ZWN0ZWQgU3RyaW5nIHRpdGxlOwotICBwcm90ZWN0ZWQgTGFiZWwgZXJyb3JNZXNzYWdlTGFiZWw7Ci0gIHByb3RlY3RlZCBMaXN0IHVzZWROYW1lczsKLQotICBwdWJsaWMgTmV3Q29tcG9uZW50RGlhbG9nKFNoZWxsIHBhcmVudFNoZWxsLCBTdHJpbmcgdGl0bGUsIFN0cmluZyBkZWZhdWx0TmFtZSkgCi0gIHsKLSAgICBzdXBlcihwYXJlbnRTaGVsbCk7Ci0gICAgc2V0U2hlbGxTdHlsZShnZXRTaGVsbFN0eWxlKCkgfCBTV1QuUkVTSVpFKTsKLSAgICBuYW1lID0gZGVmYXVsdE5hbWU7ICAgICAgCi0gICAgdGhpcy50aXRsZSA9IHRpdGxlOwotICB9Ci0gIAotICBwdWJsaWMgTmV3Q29tcG9uZW50RGlhbG9nKFNoZWxsIHBhcmVudFNoZWxsLCBTdHJpbmcgdGl0bGUsIFN0cmluZyBkZWZhdWx0TmFtZSwgTGlzdCB1c2VkTmFtZXMpIAotICB7Ci0gICAgc3VwZXIocGFyZW50U2hlbGwpOwotICAgIHNldFNoZWxsU3R5bGUoZ2V0U2hlbGxTdHlsZSgpIHwgU1dULlJFU0laRSk7Ci0gICAgbmFtZSA9IGRlZmF1bHROYW1lOyAgICAgIAotICAgIHRoaXMudGl0bGUgPSB0aXRsZTsKLSAgICB0aGlzLnVzZWROYW1lcyA9IHVzZWROYW1lczsKLSAgfQotCi0gIHB1YmxpYyBpbnQgY3JlYXRlQW5kT3BlbigpCi0gIHsKLSAgICBjcmVhdGUoKTsKLSAgICBnZXRTaGVsbCgpLnNldFRleHQodGl0bGUpOwotICAgIHNldEJsb2NrT25PcGVuKHRydWUpOwotICAgIHJldHVybiBvcGVuKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVDb250ZW50cyhDb21wb3NpdGUgcGFyZW50KSAgCi0gIHsKLSAgICBDb250cm9sIGNvbnRyb2wgPSBzdXBlci5jcmVhdGVDb250ZW50cyhwYXJlbnQpOwotICAgIG5hbWVGaWVsZC5mb3JjZUZvY3VzKCk7Ci0gICAgbmFtZUZpZWxkLnNlbGVjdEFsbCgpOyAgCi0gICAgdXBkYXRlRXJyb3JNZXNzYWdlKCk7Ci0gICAgcmV0dXJuIGNvbnRyb2w7Ci0gIH0KLQotCi0gIHByb3RlY3RlZCB2b2lkIGNyZWF0ZUJ1dHRvbnNGb3JCdXR0b25CYXIoQ29tcG9zaXRlIHBhcmVudCkgCi0gIHsKLSAgICBva0J1dHRvbiA9IGNyZWF0ZUJ1dHRvbihwYXJlbnQsIElEaWFsb2dDb25zdGFudHMuT0tfSUQsIElEaWFsb2dDb25zdGFudHMuT0tfTEFCRUwsIHRydWUpOwotICAgIGNyZWF0ZUJ1dHRvbihwYXJlbnQsIElEaWFsb2dDb25zdGFudHMuQ0FOQ0VMX0lELCBJRGlhbG9nQ29uc3RhbnRzLkNBTkNFTF9MQUJFTCwgZmFsc2UpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlSGVhZGVyQ29udGVudChDb21wb3NpdGUgcGFyZW50KQotICB7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCB2b2lkIGNyZWF0ZUV4dGVuZGVkQ29udGVudChDb21wb3NpdGUgcGFyZW50KQotICB7Ci0gIH0KLQotICBwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVEaWFsb2dBcmVhKENvbXBvc2l0ZSBwYXJlbnQpIAotICB7Ci0gICAgQ29tcG9zaXRlIGRpYWxvZ0FyZWEgPSAoQ29tcG9zaXRlKXN1cGVyLmNyZWF0ZURpYWxvZ0FyZWEocGFyZW50KTsKLSAgICAKLSAgICBjcmVhdGVIZWFkZXJDb250ZW50KGRpYWxvZ0FyZWEpOwotCi0gICAgQ29tcG9zaXRlIGNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUoZGlhbG9nQXJlYSwgU1dULk5PTkUpOwotICAgIEdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBsYXlvdXQubnVtQ29sdW1ucyA9IDI7Ci0gICAgbGF5b3V0Lm1hcmdpbldpZHRoID0gMDsKLSAgICBjb21wb3NpdGUuc2V0TGF5b3V0KGxheW91dCk7Ci0KLSAgICBHcmlkRGF0YSBnZEZpbGw9IG5ldyBHcmlkRGF0YSgpOwotICAgIGdkRmlsbC5ob3Jpem9udGFsQWxpZ25tZW50PSBHcmlkRGF0YS5GSUxMOwotICAgIGdkRmlsbC5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlPSB0cnVlOwotICAgIGdkRmlsbC52ZXJ0aWNhbEFsaWdubWVudD0gR3JpZERhdGEuRklMTDsKLSAgICBnZEZpbGwuZ3JhYkV4Y2Vzc1ZlcnRpY2FsU3BhY2U9IHRydWU7Ci0gICAgY29tcG9zaXRlLnNldExheW91dERhdGEoZ2RGaWxsKTsKLQotICAgIExhYmVsIG5hbWVMYWJlbCA9IG5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5OT05FKTsKLSAgICBuYW1lTGFiZWwuc2V0VGV4dChNZXNzYWdlcy5fVUlfTEFCRUxfTkFNRSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIG5hbWVGaWVsZCA9IG5ldyBUZXh0KGNvbXBvc2l0ZSwgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIpOwotICAgIEdyaWREYXRhIGdkPSBuZXcgR3JpZERhdGEoKTsKLSAgICBnZC5ob3Jpem9udGFsQWxpZ25tZW50PSBHcmlkRGF0YS5GSUxMOwotICAgIGdkLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2U9IHRydWU7Ci0gICAgZ2Qud2lkdGhIaW50ID0gMjAwOwotICAgIG5hbWVGaWVsZC5zZXRMYXlvdXREYXRhKGdkKTsKLSAgICBuYW1lRmllbGQuc2V0VGV4dChuYW1lKTsKLSAgICBuYW1lRmllbGQuYWRkTW9kaWZ5TGlzdGVuZXIodGhpcyk7Ci0KLSAgICBjcmVhdGVFeHRlbmRlZENvbnRlbnQoZGlhbG9nQXJlYSk7Ci0KLSAgICAvLyBlcnJvciBtZXNzYWdlCi0gICAgZXJyb3JNZXNzYWdlTGFiZWwgPSBuZXcgTGFiZWwoZGlhbG9nQXJlYSwgU1dULk5PTkUpOwotICAgIGVycm9yTWVzc2FnZUxhYmVsLnNldFRleHQoIiIpOyAgICAgICAgICAvLyROT04tTkxTLTEkCi0gICAgR3JpZERhdGEgZ2QyID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZ2QyLmhvcml6b250YWxBbGlnbm1lbnQ9IEdyaWREYXRhLkZJTEw7Ci0gICAgZ2QyLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2U9IHRydWU7Ci0gICAgZ2QyLndpZHRoSGludCA9IDIwMDsKLSAgICBlcnJvck1lc3NhZ2VMYWJlbC5zZXRMYXlvdXREYXRhKGdkMik7ICAgICAgICAgIAotLy8gICAgQ29sb3IgY29sb3IgPSBuZXcgQ29sb3IoZXJyb3JNZXNzYWdlTGFiZWwuZ2V0RGlzcGxheSgpLCAyMDAsIDAsIDApOwotLy8gICAgZXJyb3JNZXNzYWdlTGFiZWwuc2V0Rm9yZWdyb3VuZChjb2xvcik7Ci0KLSAgICByZXR1cm4gZGlhbG9nQXJlYTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBlKSAKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIHVwZGF0ZUVycm9yTWVzc2FnZSgpOwotICB9ICAgICAgICAKLQotICBwcm90ZWN0ZWQgU3RyaW5nIGNvbXB1dGVFcnJvck1lc3NhZ2UoU3RyaW5nIG5hbWUpCi0gIHsKLSAgCWlmICh1c2VkTmFtZXMgPT0gbnVsbCkKLSAgCQlyZXR1cm4gbnVsbDsKLSAgCQotICAJSXRlcmF0b3IgaXRlcmF0b3IgPSB1c2VkTmFtZXMuaXRlcmF0b3IoKTsKLSAgCXdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpIHsKLSAgCQlpZiAobmFtZS5lcXVhbHNJZ25vcmVDYXNlKChTdHJpbmcpIGl0ZXJhdG9yLm5leHQoKSkpIHsKLSAgCQkJcmV0dXJuIE1lc3NhZ2VzLl9VSV9MQUJFTF9XQVJOSU5HX0RVUExJQ0FURV9OQU1FX0VYSVNUUzsgLy8kTk9OLU5MUy0xJAotICAJCX0KLSAgCX0KLSAgCQotICAJcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB1cGRhdGVFcnJvck1lc3NhZ2UoKQotICB7ICAgICAgICAgICAgICAgICAKLSAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gbnVsbDsKLSAgICBTdHJpbmcgbmFtZSA9IG5hbWVGaWVsZC5nZXRUZXh0KCkudHJpbSgpOwotICAgIGlmIChuYW1lLmxlbmd0aCgpID4gMCkKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgIGVycm9yTWVzc2FnZSA9IGNvbXB1dGVFcnJvck1lc3NhZ2UobmFtZSk7Ci0gICAgfSAgIAotICAgIGVsc2UKLSAgICB7Ci0gICAgICBlcnJvck1lc3NhZ2UgPSAiIjsgLy8kTk9OLU5MUy0xJAotICAgIH0gIAotICAgIGVycm9yTWVzc2FnZUxhYmVsLnNldFRleHQoZXJyb3JNZXNzYWdlICE9IG51bGwgPyBlcnJvck1lc3NhZ2UgOiAiIik7IC8vJE5PTi1OTFMtMSQKLS8vICAgIG9rQnV0dG9uLnNldEVuYWJsZWQoZXJyb3JNZXNzYWdlID09IG51bGwpOwotICB9Ci0gCi0gIHByb3RlY3RlZCB2b2lkIGJ1dHRvblByZXNzZWQoaW50IGJ1dHRvbklkKSAKLSAgewotICAgIGlmIChidXR0b25JZCA9PSBJRGlhbG9nQ29uc3RhbnRzLk9LX0lEKQotICAgIHsKLSAgICAgIG5hbWUgPSBuYW1lRmllbGQuZ2V0VGV4dCgpOwotICAgIH0KLSAgICBzdXBlci5idXR0b25QcmVzc2VkKGJ1dHRvbklkKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gbmFtZTsKLSAgfQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2RpYWxvZ3MvUHJvdG9jb2xDb21wb25lbnRDb250cm9sLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2RpYWxvZ3MvUHJvdG9jb2xDb21wb25lbnRDb250cm9sLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxMjMxZmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9kaWFsb2dzL1Byb3RvY29sQ29tcG9uZW50Q29udHJvbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5kaWFsb2dzOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuUGFnZUJvb2s7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZ2VuZXJhdG9yLkJhc2VHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZ2VuZXJhdG9yLkNvbnRlbnRHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZ2VuZXJhdG9yLmV4dGVuc2lvbi5Db250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uRmFjdG9yeVJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JDU0hlbHBJZHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwud2l6YXJkcy5Db250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2U7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBQcm90b2NvbENvbXBvbmVudENvbnRyb2wgZXh0ZW5kcyBDb21wb3NpdGUgaW1wbGVtZW50cyBTZWxlY3Rpb25MaXN0ZW5lciwgTW9kaWZ5TGlzdGVuZXIKLXsKLSAgcHJvdGVjdGVkIEJhc2VHZW5lcmF0b3IgZ2VuZXJhdG9yOwotCi0gIHByb3RlY3RlZCBUZXh0IGNvbXBvbmVudE5hbWVGaWVsZDsKLSAgcHJvdGVjdGVkIENvbWJvIHJlZk5hbWVDb21ibzsKLSAgcHJvdGVjdGVkIEJ1dHRvbiByZWZCcm93c2VCdXR0b247Ci0gIHByb3RlY3RlZCBDb21ibyBwcm90b2NvbENvbWJvOwotICBwcm90ZWN0ZWQgQnV0dG9uIG92ZXJ3cml0ZUJ1dHRvbjsKLSAgcHJvdGVjdGVkIFBhZ2VCb29rIHBhZ2VCb29rOwotICBwcm90ZWN0ZWQgQ29tcG9zaXRlIGVtcHR5U2V0dGluZ3NQYWdlOwotICBwcm90ZWN0ZWQgTWFwIHBhZ2VNYXAgPSBuZXcgSGFzaE1hcCgpOwotCi0gIC8vIExpc3Qgb2YgQ29udGVudEdlbmVyYXRvcnMgZm9yIGVhY2ggUHJvdG9jb2wgZm91bmQgaW4gcHJvdG9jb2xDb21ibwotICBwcm90ZWN0ZWQgTGlzdCBjb250ZW50R2VuZXJhdG9yczsKLSAgCi0gIC8vcHJvdGVjdGVkIGJvb2xlYW4gaXNCaW5kaW5nQ29tcG9uZW50ID0gdHJ1ZTsKLSAgLy9wcm90ZWN0ZWQgYm9vbGVhbiBpc05ld0NvbXBvbmVudCA9IHRydWU7Ci0gIHByb3RlY3RlZCBTdHJpbmcgbmFtZTsKLSAgcHJvdGVjdGVkIFN0cmluZyByZWZOYW1lOwotCi0gIHByb3RlY3RlZCBTdHJpbmcgVU5TUEVDSUZJRUQgPSBNZXNzYWdlcy5fVUlfVU5TUEVDSUZJRUQ7IC8vJE5PTi1OTFMtMSQKLSAgLy9wcm90ZWN0ZWQgQmluZGluZ0dlbmVyYXRvciBiaW5kaW5nR2VuZXJhdG9yOwotCi0gIHB1YmxpYyBQcm90b2NvbENvbXBvbmVudENvbnRyb2woQ29tcG9zaXRlIHBhcmVudCwgQmFzZUdlbmVyYXRvciBnZW5lcmF0b3IsIGJvb2xlYW4gc2hvd092ZXJ3cml0ZUJ1dHRvbikKLSAgewotICAgIHN1cGVyKHBhcmVudCwgU1dULk5PTkUpOwotICAgIHRoaXMuZ2VuZXJhdG9yID0gZ2VuZXJhdG9yOwotCWNvbnRlbnRHZW5lcmF0b3JzID0gbmV3IEFycmF5TGlzdCgpOwotCi0gICAgR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGxheW91dC5tYXJnaW5XaWR0aCA9IDA7Ci0gICAgc2V0TGF5b3V0KGxheW91dCk7Ci0gICAgc2V0TGF5b3V0RGF0YShjcmVhdGVHcmlkRGF0YSh0cnVlLCAxKSk7Ci0KLSAgICBDb21wb3NpdGUgbGFiZWxWYWx1ZUNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUodGhpcywgU1dULk5PTkUpOwotICAgIGxhYmVsVmFsdWVDb21wb3NpdGUuc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KDIsIGZhbHNlKSk7Ci0gICAgbGFiZWxWYWx1ZUNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKGNyZWF0ZUdyaWREYXRhKGZhbHNlLCAxKSk7Ci0KLSAgICAvLyByb3cgMQotICAgIC8vCi0gICAgTGFiZWwgY29tcG9uZW50TmFtZUxhYmVsID0gbmV3IExhYmVsKGxhYmVsVmFsdWVDb21wb3NpdGUsIFNXVC5OT05FKTsKLSAgICBjb21wb25lbnROYW1lTGFiZWwuc2V0VGV4dChnZXRDb21wb25lbnROYW1lTGFiZWxUZXh0KCkpOyAvLyROT04tTkxTLTEkCi0KLSAgICBjb21wb25lbnROYW1lRmllbGQgPSBuZXcgVGV4dChsYWJlbFZhbHVlQ29tcG9zaXRlLCBTV1QuQk9SREVSKTsKLSAgICBHcmlkRGF0YSBnZE5hbWU9IG5ldyBHcmlkRGF0YSgpOwotICAgIGdkTmFtZS5ob3Jpem9udGFsQWxpZ25tZW50PSBHcmlkRGF0YS5GSUxMOwotICAgIGdkTmFtZS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlPSB0cnVlOwotICAgIGNvbXBvbmVudE5hbWVGaWVsZC5zZXRMYXlvdXREYXRhKGdkTmFtZSk7Ci0gICAgY29tcG9uZW50TmFtZUZpZWxkLmFkZE1vZGlmeUxpc3RlbmVyKHRoaXMpOwotICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoY29tcG9uZW50TmFtZUZpZWxkLCBBU0RFZGl0b3JDU0hlbHBJZHMuUFJPVE9DT0xfQ09NUE9ORU5UX05BTUVfVEVYVCk7Ci0gICAgLy9jcmVhdGVQbGFjZUhvbGRlcihsYWJlbFZhbHVlQ29tcG9zaXRlKTsKLSAgICAKLSAgICAvLyByb3cgMgotICAgIC8vCi0gICAgTGFiZWwgcmVmTmFtZUxhYmVsID0gbmV3IExhYmVsKGxhYmVsVmFsdWVDb21wb3NpdGUsIFNXVC5OT05FKTsKLSAgICByZWZOYW1lTGFiZWwuc2V0VGV4dChnZXRSZWZOYW1lTGFiZWxUZXh0KCkpOyAvLyROT04tTkxTLTEkCQotICAgIHJlZk5hbWVDb21ibyA9IG5ldyBDb21ibyhsYWJlbFZhbHVlQ29tcG9zaXRlLCBTV1QuUkVBRF9PTkxZKTsKLSAgICBHcmlkRGF0YSBnZFJlZk5hbWU9IG5ldyBHcmlkRGF0YSgpOwotICAgIGdkUmVmTmFtZS5ob3Jpem9udGFsQWxpZ25tZW50PSBHcmlkRGF0YS5GSUxMOwotICAgIGdkUmVmTmFtZS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlPSB0cnVlOwotICAgIHJlZk5hbWVDb21iby5zZXRMYXlvdXREYXRhKGdkUmVmTmFtZSk7Ci0gICAgcmVmTmFtZUNvbWJvLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOwotICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAocmVmTmFtZUNvbWJvLCBBU0RFZGl0b3JDU0hlbHBJZHMuUFJPVE9DT0xfQ09NUE9ORU5UX1JFRl9DT01CTyk7Ci0KLSAgICAvL3JlZkJyb3dzZUJ1dHRvbiA9IG5ldyBCdXR0b24obGFiZWxWYWx1ZUNvbXBvc2l0ZSwgU1dULk5PTkUpOwotICAgIC8vcmVmQnJvd3NlQnV0dG9uLnNldFRleHQoIiAgLi4uICAiKTsKLSAgICAvL0dyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgLy9nZC5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gZmFsc2U7Ci0gICAgLy9nZC5oZWlnaHRIaW50ID0gMTc7Ci0gICAgLy9nZC53aWR0aEhpbnQgPSAyNDsKLSAgICAvL3JlZkJyb3dzZUJ1dHRvbi5zZXRMYXlvdXREYXRhKGdkKTsKLSAgICAvL3JlZkJyb3dzZUJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKLSAgICAvL2NyZWF0ZVBsYWNlSG9sZGVyKGxhYmVsVmFsdWVDb21wb3NpdGUpOwotCi0gICAgLy8gcm93IDMKLSAgICAvLwotICAgIExhYmVsIHByb3RvY29sTGFiZWwgPSBuZXcgTGFiZWwobGFiZWxWYWx1ZUNvbXBvc2l0ZSwgU1dULk5PTkUpOwotICAgIHByb3RvY29sTGFiZWwuc2V0VGV4dChNZXNzYWdlcy5fVUlfTEFCRUxfQklORElOR19QUk9UT0NPTCk7IC8vJE5PTi1OTFMtMSQKLSAgICBwcm90b2NvbENvbWJvID0gbmV3IENvbWJvKGxhYmVsVmFsdWVDb21wb3NpdGUsIFNXVC5SRUFEX09OTFkpOwotICAgIEdyaWREYXRhIGdkUHJvdG9jb2w9IG5ldyBHcmlkRGF0YSgpOwotICAgIGdkUHJvdG9jb2wuaG9yaXpvbnRhbEFsaWdubWVudD0gR3JpZERhdGEuRklMTDsKLSAgICBnZFByb3RvY29sLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2U9IHRydWU7Ci0gICAgcHJvdG9jb2xDb21iby5zZXRMYXlvdXREYXRhKGdkUHJvdG9jb2wpOwotICAgIHByb3RvY29sQ29tYm8uYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0gICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChwcm90b2NvbENvbWJvLCBBU0RFZGl0b3JDU0hlbHBJZHMuUFJPVE9DT0xfQ09NUE9ORU5UX1BST1RPQ09MX0NPTUJPKTsKLSAgICAvL2NyZWF0ZVBsYWNlSG9sZGVyKGxhYmVsVmFsdWVDb21wb3NpdGUpOwotCi0gICAgLy8gb3B0aW9uYWwgb3ZlcndyaXRlIGJ1dHRvbgotICAgIC8vCi0gICAgaWYgKHNob3dPdmVyd3JpdGVCdXR0b24pCi0gICAgewotICAgICAgb3ZlcndyaXRlQnV0dG9uID0gbmV3IEJ1dHRvbih0aGlzLCBTV1QuQ0hFQ0spOwotICAgICAgb3ZlcndyaXRlQnV0dG9uLnNldFRleHQoTWVzc2FnZXMuX1VJX0NIRUNLQk9YX09WRVJXUklURSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIG92ZXJ3cml0ZUJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKLSAgICAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAob3ZlcndyaXRlQnV0dG9uLCBBU0RFZGl0b3JDU0hlbHBJZHMucFJPVE9DT0xfQ09NUE9ORU5UX09WRVJXUklURV9DSEVDS0JPWCk7Ci0gICAgfQotCi0gICAgLy8gcHJvdG9jb2wgc3BlY2lmaWMgc2V0dGluZ3MKLSAgICAvLwotICAgIHBhZ2VCb29rID0gbmV3IFBhZ2VCb29rKHRoaXMsIFNXVC5OT05FKTsKLSAgICBHcmlkRGF0YSBnZEZpbGw9IG5ldyBHcmlkRGF0YSgpOwotICAgIGdkRmlsbC5ob3Jpem9udGFsQWxpZ25tZW50PSBHcmlkRGF0YS5GSUxMOwotICAgIGdkRmlsbC5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlPSB0cnVlOwotICAgIGdkRmlsbC52ZXJ0aWNhbEFsaWdubWVudD0gR3JpZERhdGEuRklMTDsKLSAgICBnZEZpbGwuZ3JhYkV4Y2Vzc1ZlcnRpY2FsU3BhY2U9IHRydWU7Ci0gICAgcGFnZUJvb2suc2V0TGF5b3V0RGF0YShnZEZpbGwpOwotCi0gICAgZW1wdHlTZXR0aW5nc1BhZ2UgPSBuZXcgQ29tcG9zaXRlKHBhZ2VCb29rLCBTV1QuTk9ORSk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyBpKyspCi0gICAgewotICAgICAgbmV3IExhYmVsKGVtcHR5U2V0dGluZ3NQYWdlLCBTV1QuTk9ORSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgaW5pdEZpZWxkcygpCi0gIHsKLSAgICAvLyBwcmltZSB0aGUgZmllbGRzCi0gICAgLy8KLSAgICBjb21wb25lbnROYW1lRmllbGQuc2V0VGV4dChnZXREZWZhdWx0TmFtZSgpKTsKLSAgICB1cGRhdGVSZWZOYW1lQ29tYm8oKTsKLSAgICB1cGRhdGVQcm90b2NvbENvbWJvKCk7Ci0gICAgdXBkYXRlUGFnZUJvb2soZ2VuZXJhdG9yLmdldFByb3RvY29sKCkpOwotICB9Ci0KLSAgcHVibGljIFRleHQgZ2V0Q29tcG9uZW50TmFtZUZpZWxkKCkKLSAgewotICAgIHJldHVybiBjb21wb25lbnROYW1lRmllbGQ7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldENvbXBvbmVudE5hbWVMYWJlbFRleHQoKQotICB7Ci0gICAgcmV0dXJuIE1lc3NhZ2VzLl9VSV9MQUJFTF9OQU1FOyAvLyROT04tTkxTLTEkCi0gIH0KLQotICBwcml2YXRlIEdyaWREYXRhIGNyZWF0ZUdyaWREYXRhKGJvb2xlYW4gYm90aCwgaW50IHNwYW4pCi0gIHsKLSAgICBHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YShib3RoID8gR3JpZERhdGEuRklMTF9CT1RIIDogR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMKTsKLSAgICBnZC5ob3Jpem9udGFsU3BhbiA9IHNwYW47Ci0gICAgcmV0dXJuIGdkOwotICB9Ci0KLS8vICBwcml2YXRlIENvbnRyb2wgY3JlYXRlUGxhY2VIb2xkZXIoQ29tcG9zaXRlIHBhcmVudCkKLS8vICB7Ci0vLyAgICBMYWJlbCBsYWJlbCA9IG5ldyBMYWJlbChwYXJlbnQsIFNXVC5OT05FKTsKLS8vICAgIHJldHVybiBsYWJlbDsKLS8vICB9Ci0gIHB1YmxpYyBCYXNlR2VuZXJhdG9yIGdldEdlbmVyYXRvcigpCi0gIHsKLSAgICByZXR1cm4gZ2VuZXJhdG9yOwotICB9Ci0KLSAgLy8gaW1wbGVtZW50cyBTZWxlY3Rpb25MaXN0ZW5lcgotICAvLwotICBwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZlbnQpCi0gIHsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KQotICB7Ci0gICAgaWYgKGV2ZW50LndpZGdldCA9PSBvdmVyd3JpdGVCdXR0b24gJiYgb3ZlcndyaXRlQnV0dG9uICE9IG51bGwpCi0gICAgewotICAgICAgZ2V0R2VuZXJhdG9yKCkuc2V0T3ZlcndyaXRlKG92ZXJ3cml0ZUJ1dHRvbi5nZXRTZWxlY3Rpb24oKSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGV2ZW50LndpZGdldCA9PSByZWZOYW1lQ29tYm8pCi0gICAgewotICAgICAgaW50IGluZGV4ID0gcmVmTmFtZUNvbWJvLmdldFNlbGVjdGlvbkluZGV4KCk7Ci0gICAgICBTdHJpbmcgcmVmTmFtZSA9IHJlZk5hbWVDb21iby5nZXRJdGVtKGluZGV4KTsKLQkgIGlmIChyZWZOYW1lLmVxdWFscyhVTlNQRUNJRklFRCkpIHsKLQkgICAgICBnZXRHZW5lcmF0b3IoKS5zZXRSZWZOYW1lKCIiKTsgLy8kTk9OLU5MUy0xJAotCSAgfQotCSAgZWxzZSB7Ci0JICAgICAgZ2V0R2VuZXJhdG9yKCkuc2V0UmVmTmFtZShyZWZOYW1lKTsKLQkgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAoZXZlbnQud2lkZ2V0ID09IHByb3RvY29sQ29tYm8pCi0gICAgewotICAgICAgaW50IGluZGV4ID0gcHJvdG9jb2xDb21iby5nZXRTZWxlY3Rpb25JbmRleCgpOwotICAgICAgU3RyaW5nIHByb3RvY29sID0gKGluZGV4ICE9IC0xKSA/IHByb3RvY29sQ29tYm8uZ2V0SXRlbShpbmRleCkgOiBudWxsOwotCSAgZ2V0R2VuZXJhdG9yKCkuc2V0Q29udGVudEdlbmVyYXRvcigoQ29udGVudEdlbmVyYXRvcikgY29udGVudEdlbmVyYXRvcnMuZ2V0KGluZGV4KSk7Ci0gICAgICB1cGRhdGVQYWdlQm9vayhwcm90b2NvbCk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIElTX09WRVJXUklURV9BUFBMSUNBQkxFID0gIklTX09WRVJXUklURV9BUFBMSUNBQkxFIjsgLy8kTk9OLU5MUy0xJAotICBwcm90ZWN0ZWQgdm9pZCB1cGRhdGVQYWdlQm9vayhTdHJpbmcgcHJvdG9jb2wpCi0gIHsKLSAgICBpZiAocHJvdG9jb2wgIT0gbnVsbCkKLSAgICB7Ci0JICBDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UgcGFnZSA9IChDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UpIHBhZ2VNYXAuZ2V0KHByb3RvY29sKTsKLSAgICAgIGlmIChwYWdlID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHBhZ2UgPSBjcmVhdGVDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UocHJvdG9jb2wpOwotCi0gICAgICAgIGlmIChwYWdlICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBwYWdlLmluaXQoZ2V0R2VuZXJhdG9yKCkpOwotICAgICAgICAgIENvbnRyb2wgY29udHJvbCA9IHBhZ2UuY3JlYXRlQ29udHJvbChwYWdlQm9vayk7Ci0gICAgICAgICAgY29udHJvbC5zZXREYXRhKElTX09WRVJXUklURV9BUFBMSUNBQkxFLCBuZXcgQm9vbGVhbihwYWdlLmlzT3ZlcndyaXRlQXBwbGljYWJsZSgpKSk7Ci0gICAgICAgICAgcGFnZU1hcC5wdXQocHJvdG9jb2wsIHBhZ2UpOwotICAgICAgICB9Ci0KLS8vICAgICAgICBpZiAocGFnZSAhPSBudWxsKQotLy8gICAgICAgIHsKLS8vICAgICAgICAgIHBhZ2VNYXAucHV0KHByb3RvY29sLCBwYWdlKTsKLS8vICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGJvb2xlYW4gZW5hYmxlT3ZlcndyaXRlQnV0dG9uID0gdHJ1ZTsKLSAgICAgIGlmIChwYWdlICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGlmIChvdmVyd3JpdGVCdXR0b24gIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIEJvb2xlYW4gZGF0YSA9IChCb29sZWFuKSBwYWdlLmdldENvbnRyb2woKS5nZXREYXRhKElTX09WRVJXUklURV9BUFBMSUNBQkxFKTsKLSAgICAgICAgICBlbmFibGVPdmVyd3JpdGVCdXR0b24gPSBkYXRhID09IG51bGwgfHwgZGF0YS5lcXVhbHMoQm9vbGVhbi5UUlVFKTsKLSAgICAgICAgfQotICAgICAgICBwYWdlQm9vay5zaG93UGFnZShwYWdlLmdldENvbnRyb2woKSk7Ci0gICAgICAgIHBhZ2VCb29rLmxheW91dCgpOwotICAgICAgICBwYWdlQm9vay5nZXRQYXJlbnQoKS5sYXlvdXQoKTsKLQkJCi0JCXBhZ2Uuc2V0T3B0aW9uc09uR2VuZXJhdG9yKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHBhZ2VCb29rLnNob3dQYWdlKGVtcHR5U2V0dGluZ3NQYWdlKTsKLSAgICAgIH0KLQotICAgICAgaWYgKG92ZXJ3cml0ZUJ1dHRvbiAhPSBudWxsKQotICAgICAgewotICAgICAgICBpZiAoZW5hYmxlT3ZlcndyaXRlQnV0dG9uKQotICAgICAgICB7Ci0gICAgICAgICAgb3ZlcndyaXRlQnV0dG9uLnNldEVuYWJsZWQodHJ1ZSk7Ci0gICAgICAgICAgb3ZlcndyaXRlQnV0dG9uLnNldFNlbGVjdGlvbihnZW5lcmF0b3IuZ2V0T3ZlcndyaXRlKCkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIG92ZXJ3cml0ZUJ1dHRvbi5zZXRFbmFibGVkKGZhbHNlKTsKLSAgICAgICAgICBvdmVyd3JpdGVCdXR0b24uc2V0U2VsZWN0aW9uKHRydWUpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdXBkYXRlUHJvdG9jb2xDb21ibygpCi0gIHsKLSAgICBwcm90b2NvbENvbWJvLnJlbW92ZUFsbCgpOwotCi0gICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGxpc3QuYWRkKFVOU1BFQ0lGSUVEKTsKLS8vICAgIGxpc3QuYWRkQWxsKFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRDb250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uUmVnaXN0cnkoKS5nZXRCaW5kaW5nRXh0ZW5zaW9uTmFtZXMoKSk7Ci0JbGlzdC5hZGRBbGwoQ29udGVudEdlbmVyYXRvckV4dGVuc2lvbkZhY3RvcnlSZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmdldEJpbmRpbmdFeHRlbnNpb25OYW1lcygpKTsKLQkKLSAgICBTdHJpbmcgcHJvdG9jb2xUZXh0ID0gZ2VuZXJhdG9yLmdldFByb3RvY29sKCk7Ci0KLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBsaXN0Lml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBTdHJpbmcgcHJvdG9jb2wgPSAoU3RyaW5nKSBpLm5leHQoKTsKLSAgICAgIHByb3RvY29sQ29tYm8uYWRkKHByb3RvY29sKTsKLQkgIAotCSAgaWYgKHByb3RvY29sLmVxdWFscyhVTlNQRUNJRklFRCkpIHsKLQkJICBjb250ZW50R2VuZXJhdG9ycy5hZGQobnVsbCk7Ci0JICB9Ci0JICBlbHNlIHsKLQkJICBDb250ZW50R2VuZXJhdG9yIGdlbiA9IENvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25GYWN0b3J5UmVnaXN0cnkuZ2V0SW5zdGFuY2UoKS5nZXRHZW5lcmF0b3JDbGFzc0Zyb21OYW1lKHByb3RvY29sKTsKLQkJICBjb250ZW50R2VuZXJhdG9ycy5hZGQoZ2VuKTsgIAotCSAgfQotICAgIH0KLQotICAgIGlmIChwcm90b2NvbFRleHQgPT0gbnVsbCAmJiBwcm90b2NvbENvbWJvLmdldEl0ZW1Db3VudCgpID4gMCkKLSAgICB7Ci0gICAgICBwcm90b2NvbFRleHQgPSBwcm90b2NvbENvbWJvLmdldEl0ZW0oMCk7Ci0vLyAgICAgIGdlbmVyYXRvci5zZXRQcm90b2NvbCghVU5TUEVDSUZJRUQuZXF1YWxzKHByb3RvY29sVGV4dCkgPyBwcm90b2NvbFRleHQgOiBudWxsKTsKLSAgICB9Ci0gICAgcHJvdG9jb2xDb21iby5zZXRUZXh0KHByb3RvY29sVGV4dCk7Ci0KLQlDb250ZW50R2VuZXJhdG9yIGdlbiA9IENvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25GYWN0b3J5UmVnaXN0cnkuZ2V0SW5zdGFuY2UoKS5nZXRHZW5lcmF0b3JDbGFzc0Zyb21OYW1lKHByb3RvY29sVGV4dCk7Ci0JZ2VuZXJhdG9yLnNldENvbnRlbnRHZW5lcmF0b3IoZ2VuKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHVwZGF0ZVJlZk5hbWVDb21ibygpCi0gIHsKLSAgICByZWZOYW1lQ29tYm8ucmVtb3ZlQWxsKCk7Ci0KLSAgICByZWZOYW1lQ29tYm8uYWRkKFVOU1BFQ0lGSUVEKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBnZXRSZWZOYW1lcygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICByZWZOYW1lQ29tYm8uYWRkKChTdHJpbmcpIGkubmV4dCgpKTsKLSAgICB9Ci0KLSAgICBpZiAocmVmTmFtZUNvbWJvLmdldEl0ZW1Db3VudCgpID4gMCkKLSAgICB7Ci0gICAgICBTdHJpbmcgcmVmVGV4dCA9IGdlbmVyYXRvci5nZXRSZWZOYW1lKCk7Ci0gICAgICByZWZOYW1lQ29tYm8uc2V0VGV4dChyZWZUZXh0ICE9IG51bGwgPyByZWZUZXh0IDogVU5TUEVDSUZJRUQpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkKLSAgewotICAgIGdlbmVyYXRvci5zZXROYW1lKGNvbXBvbmVudE5hbWVGaWVsZC5nZXRUZXh0KCkpOwotICB9Ci0KLSAgcHVibGljIGFic3RyYWN0IExpc3QgZ2V0UmVmTmFtZXMoKTsKLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRSZWZOYW1lTGFiZWxUZXh0KCk7Ci0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0RGVmYXVsdE5hbWUoKTsKLSAgcHVibGljIGFic3RyYWN0IENvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZSBjcmVhdGVDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UoU3RyaW5nIHByb3RvY29sKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZGlhbG9ncy9XMTFCcm93c2VDb21wb25lbnREaWFsb2cuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZGlhbG9ncy9XMTFCcm93c2VDb21wb25lbnREaWFsb2cuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDllYzEwZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2RpYWxvZ3MvVzExQnJvd3NlQ29tcG9uZW50RGlhbG9nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmRpYWxvZ3M7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRmlsZUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb3JlLnNlYXJjaC5wYXR0ZXJuLlF1YWxpZmllZE5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5zZWFyY2guZGlhbG9ncy5Db21wb25lbnRTZWFyY2hMaXN0RGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuQ29tcG9uZW50U2VhcmNoTGlzdERpYWxvZ0NvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5zZWFyY2guZGlhbG9ncy5Db21wb25lbnRTcGVjaWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuU2NvcGVkQ29tcG9uZW50U2VhcmNoTGlzdERpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZWRpdC5XU0RMQmluZGluZ1NlYXJjaExpc3RQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5lZGl0LldTRExDb21wb25lbnREZXNjcmlwdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmVkaXQuV1NETEludGVyZmFjZVNlYXJjaExpc3RQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5lZGl0LldTRExNZXNzYWdlU2VhcmNoTGlzdFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnNlYXJjaC5JV1NETFNlYXJjaENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0LklDb21wb25lbnREaWFsb2c7Ci0KLXB1YmxpYyBjbGFzcyBXMTFCcm93c2VDb21wb25lbnREaWFsb2cgaW1wbGVtZW50cyBJQ29tcG9uZW50RGlhbG9nIHsKLQlwcml2YXRlIFF1YWxpZmllZE5hbWUgcXVhbGlmaWVkTmFtZTsKLQlwcml2YXRlIENvbXBvbmVudFNwZWNpZmljYXRpb24gc2VsZWN0aW9uOwotCXByaXZhdGUgVzExRGVzY3JpcHRpb24gZGVzY3JpcHRpb247Ci0JCi0JcHVibGljIFcxMUJyb3dzZUNvbXBvbmVudERpYWxvZyhRdWFsaWZpZWROYW1lIHF1YWxpZmllZE5hbWUsIElGaWxlIGlGaWxlLCBXMTFEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikgewotCQl0aGlzLnF1YWxpZmllZE5hbWUgPSBxdWFsaWZpZWROYW1lOwotCQl0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldEluaXRpYWxTZWxlY3Rpb24oQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBjb21wb25lbnRTcGVjaWZpY2F0aW9uKSB7Ci0JfQotCi0JcHVibGljIENvbXBvbmVudFNwZWNpZmljYXRpb24gZ2V0U2VsZWN0ZWRDb21wb25lbnQoKSB7Ci0JCXJldHVybiBzZWxlY3Rpb247Ci0JfQotCi0JcHVibGljIGludCBjcmVhdGVBbmRPcGVuKCkgewotCQlEZWZpbml0aW9uIGRlZmluaXRpb24gPSAoRGVmaW5pdGlvbikgZGVzY3JpcHRpb24uZ2V0VGFyZ2V0KCk7Ci0JCQotCSAgICBTaGVsbCBzaGVsbCA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRTaGVsbCgpOwotCSAgICBpbnQgcmV0dXJuVmFsdWUgPSBXaW5kb3cuQ0FOQ0VMOwotCSAgICBDb21wb25lbnRTZWFyY2hMaXN0RGlhbG9nIGRpYWxvZyA9IG51bGw7Ci0JICAgIGlmIChxdWFsaWZpZWROYW1lID09IElXU0RMU2VhcmNoQ29uc3RhbnRzLkJJTkRJTkdfTUVUQV9OQU1FKQotCSAgICB7Ci0JICAgIAlXU0RMQ29tcG9uZW50RGVzY3JpcHRpb25Qcm92aWRlciBkZXNjcmlwdGlvblByb3ZpZGVyID0gbmV3IFdTRExDb21wb25lbnREZXNjcmlwdGlvblByb3ZpZGVyKCk7Ci0JICAgIAlmaW5hbCBXU0RMQmluZGluZ1NlYXJjaExpc3RQcm92aWRlciBzZWFyY2hMaXN0UHJvdmlkZXIgPSBuZXcgV1NETEJpbmRpbmdTZWFyY2hMaXN0UHJvdmlkZXIoZGVmaW5pdGlvbik7Ci0JICAgIAlDb21wb25lbnRTZWFyY2hMaXN0RGlhbG9nQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gbmV3IENvbXBvbmVudFNlYXJjaExpc3REaWFsb2dDb25maWd1cmF0aW9uKCk7Ci0JICAgIAljb25maWd1cmF0aW9uLnNldEZpbHRlckxhYmVsVGV4dChNZXNzYWdlcy5fVUlfTEFCRUxfTkFNRV9GSUxURVIpOwotCSAgICAgICAgY29uZmlndXJhdGlvbi5zZXREZXNjcmlwdGlvblByb3ZpZGVyKGRlc2NyaXB0aW9uUHJvdmlkZXIpOwotCSAgICAgICAgY29uZmlndXJhdGlvbi5zZXRTZWFyY2hMaXN0UHJvdmlkZXIoc2VhcmNoTGlzdFByb3ZpZGVyKTsKLQkgICAgICAgIAotCSAgICAgICAgU3RyaW5nIGRpYWxvZ1RpdGxlID0gTWVzc2FnZXMuX1VJX1RJVExFX1NQRUNJRllfQklORElORzsgLy8kTk9OLU5MUy0xJAotCSAgICAgICAgZGlhbG9nID0gbmV3IFNjb3BlZENvbXBvbmVudFNlYXJjaExpc3REaWFsb2coc2hlbGwsIGRpYWxvZ1RpdGxlLCBjb25maWd1cmF0aW9uKTsKLQkgICAgICAgIAotCSAgICAgICAgSUZpbGUgZmlsZSA9IGdldEZpbGUoKTsKLQkgICAgICAgIGlmIChmaWxlICE9IG51bGwpIHsKLQkJICAgICAgICAoKFNjb3BlZENvbXBvbmVudFNlYXJjaExpc3REaWFsb2cpIGRpYWxvZykuc2V0Q3VycmVudFJlc291cmNlKGZpbGUpOwotCSAgICAgICAgfQotCSAgICB9Ci0JICAgIGVsc2UgaWYgKHF1YWxpZmllZE5hbWUgPT0gSVdTRExTZWFyY2hDb25zdGFudHMuUE9SVF9UWVBFX01FVEFfTkFNRSkKLQkgICAgewotCSAgICAgIFdTRExDb21wb25lbnREZXNjcmlwdGlvblByb3ZpZGVyIGRlc2NyaXB0aW9uUHJvdmlkZXIgPSBuZXcgV1NETENvbXBvbmVudERlc2NyaXB0aW9uUHJvdmlkZXIoKTsKLQkgICAgICBmaW5hbCBXU0RMSW50ZXJmYWNlU2VhcmNoTGlzdFByb3ZpZGVyIHNlYXJjaExpc3RQcm92aWRlciA9IG5ldyBXU0RMSW50ZXJmYWNlU2VhcmNoTGlzdFByb3ZpZGVyKGRlZmluaXRpb24pOwotCSAgICAgCi0JICAgICAgQ29tcG9uZW50U2VhcmNoTGlzdERpYWxvZ0NvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IG5ldyBDb21wb25lbnRTZWFyY2hMaXN0RGlhbG9nQ29uZmlndXJhdGlvbigpOwotCSAgICAgIGNvbmZpZ3VyYXRpb24uc2V0RmlsdGVyTGFiZWxUZXh0KE1lc3NhZ2VzLl9VSV9MQUJFTF9OQU1FX0ZJTFRFUik7Ci0JICAgICAgY29uZmlndXJhdGlvbi5zZXREZXNjcmlwdGlvblByb3ZpZGVyKGRlc2NyaXB0aW9uUHJvdmlkZXIpOwotCSAgICAgIGNvbmZpZ3VyYXRpb24uc2V0U2VhcmNoTGlzdFByb3ZpZGVyKHNlYXJjaExpc3RQcm92aWRlcik7Ci0JICAgICAgLy9jb25maWd1cmF0aW9uLnNldE5ld0NvbXBvbmVudEhhbmRsZXIobmV3IE5ld1R5cGVCdXR0b25IYW5kbGVyKCkpOwotCSAgICAgIAotCSAgICAgIFN0cmluZyBkaWFsb2dUaXRsZSA9IE1lc3NhZ2VzLl9VSV9USVRMRV9TUEVDSUZZX1BPUlRUWVBFOyAvLyROT04tTkxTLTEkCi0JICAgICAgZGlhbG9nID0gbmV3IFNjb3BlZENvbXBvbmVudFNlYXJjaExpc3REaWFsb2coc2hlbGwsIGRpYWxvZ1RpdGxlLCBjb25maWd1cmF0aW9uKTsKLQkgICAgICAKLQkgICAgICBJRmlsZSBmaWxlID0gZ2V0RmlsZSgpOwotCSAgICAgIGlmIChmaWxlICE9IG51bGwpIHsKLQkgICAgCSAgKChTY29wZWRDb21wb25lbnRTZWFyY2hMaXN0RGlhbG9nKSBkaWFsb2cpLnNldEN1cnJlbnRSZXNvdXJjZShmaWxlKTsKLQkgICAgICB9Ci0JICAgIH0KLQkgICAgZWxzZSBpZiAocXVhbGlmaWVkTmFtZSA9PSBJV1NETFNlYXJjaENvbnN0YW50cy5NRVNTQUdFX01FVEFfTkFNRSkKLQkgICAgewotCSAgICAgIFdTRExDb21wb25lbnREZXNjcmlwdGlvblByb3ZpZGVyIGRlc2NyaXB0aW9uUHJvdmlkZXIgPSBuZXcgV1NETENvbXBvbmVudERlc2NyaXB0aW9uUHJvdmlkZXIoKTsKLQkgICAgICBmaW5hbCBXU0RMTWVzc2FnZVNlYXJjaExpc3RQcm92aWRlciBzZWFyY2hMaXN0UHJvdmlkZXIgPSBuZXcgV1NETE1lc3NhZ2VTZWFyY2hMaXN0UHJvdmlkZXIoZGVmaW5pdGlvbik7Ci0JICAgICAKLQkgICAgICBDb21wb25lbnRTZWFyY2hMaXN0RGlhbG9nQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gbmV3IENvbXBvbmVudFNlYXJjaExpc3REaWFsb2dDb25maWd1cmF0aW9uKCk7Ci0JICAgICAgY29uZmlndXJhdGlvbi5zZXRGaWx0ZXJMYWJlbFRleHQoTWVzc2FnZXMuX1VJX0xBQkVMX05BTUVfRklMVEVSKTsKLQkgICAgICBjb25maWd1cmF0aW9uLnNldERlc2NyaXB0aW9uUHJvdmlkZXIoZGVzY3JpcHRpb25Qcm92aWRlcik7Ci0JICAgICAgY29uZmlndXJhdGlvbi5zZXRTZWFyY2hMaXN0UHJvdmlkZXIoc2VhcmNoTGlzdFByb3ZpZGVyKTsKLQkgICAgICAvL2NvbmZpZ3VyYXRpb24uc2V0TmV3Q29tcG9uZW50SGFuZGxlcihuZXcgTmV3VHlwZUJ1dHRvbkhhbmRsZXIoKSk7Ci0JICAgICAgCi0JICAgICAgU3RyaW5nIGRpYWxvZ1RpdGxlID0gTWVzc2FnZXMuX1VJX1RJVExFX1NQRUNJRllfTUVTU0FHRTsgLy8kTk9OLU5MUy0xJAotCSAgICAgIGRpYWxvZyA9IG5ldyBTY29wZWRDb21wb25lbnRTZWFyY2hMaXN0RGlhbG9nKHNoZWxsLCBkaWFsb2dUaXRsZSwgY29uZmlndXJhdGlvbik7Ci0JICAgICAgCi0JICAgICAgSUZpbGUgZmlsZSA9IGdldEZpbGUoKTsKLQkgICAgICBpZiAoZmlsZSAhPSBudWxsKSB7Ci0JICAgIAkgICgoU2NvcGVkQ29tcG9uZW50U2VhcmNoTGlzdERpYWxvZykgZGlhbG9nKS5zZXRDdXJyZW50UmVzb3VyY2UoZmlsZSk7Ci0JICAgICAgfQotCSAgICB9Ci0JICAgIAotCSAgICBpZiAoZGlhbG9nICE9IG51bGwpCi0JICAgIHsKLQkgICAgICBkaWFsb2cuc2V0QmxvY2tPbk9wZW4odHJ1ZSk7Ci0JICAgICAgZGlhbG9nLmNyZWF0ZSgpOwotCSAgICAgIHJldHVyblZhbHVlID0gZGlhbG9nLm9wZW4oKTsKLQkgICAgICBpZiAocmV0dXJuVmFsdWUgPT0gV2luZG93Lk9LKQotCSAgICAgIHsKLQkgICAgICAgIHNlbGVjdGlvbiA9IGRpYWxvZy5nZXRTZWxlY3RlZENvbXBvbmVudCgpOwotCSAgICAgIH0KLQkgICAgfQotCSAgICByZXR1cm4gcmV0dXJuVmFsdWU7Ci0JfQotCQotCXByaXZhdGUgSUZpbGUgZ2V0RmlsZSgpIHsKLQkJSUZpbGUgZmlsZSA9IG51bGw7Ci0JCUlFZGl0b3JJbnB1dCBpbnB1dCA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpLmdldEVkaXRvcklucHV0KCk7Ci0gICAgICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIElGaWxlRWRpdG9ySW5wdXQpIHsKLSAgICAgICAgCWZpbGUgPSAoKElGaWxlRWRpdG9ySW5wdXQpIGlucHV0KS5nZXRGaWxlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBmaWxlOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9kaWFsb2dzL1cxMU5ld0NvbXBvbmVudERpYWxvZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9kaWFsb2dzL1cxMU5ld0NvbXBvbmVudERpYWxvZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDIxOWE3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZGlhbG9ncy9XMTFOZXdDb21wb25lbnREaWFsb2cuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZGlhbG9nczsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmRTdGFjazsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvcmUuc2VhcmNoLnBhdHRlcm4uUXVhbGlmaWVkTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLkNvbXBvbmVudFNwZWNpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcy5XMTFBZGRCaW5kaW5nQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5jb21tYW5kcy5XMTFBZGRJbnRlcmZhY2VDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzLlcxMUFkZE1lc3NhZ2VDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JDU0hlbHBJZHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQVNET2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnNlYXJjaC5JV1NETFNlYXJjaENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLk5hbWVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETEFkYXB0ZXJGYWN0b3J5SGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuSUNvbXBvbmVudERpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmRpYWxvZ3MuTmV3Q29tcG9uZW50RGlhbG9nOwotCi1wdWJsaWMgY2xhc3MgVzExTmV3Q29tcG9uZW50RGlhbG9nIGltcGxlbWVudHMgSUNvbXBvbmVudERpYWxvZyB7Ci0JcHJvdGVjdGVkIE5ld0NvbXBvbmVudERpYWxvZyBkaWFsb2c7Ci0JcHJvdGVjdGVkIFF1YWxpZmllZE5hbWUgcXVhbGlmaWVkTmFtZTsKLQlwcm90ZWN0ZWQgSUZpbGUgaUZpbGU7Ci0JcHJvdGVjdGVkIFcxMURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uOwotCXByb3RlY3RlZCBJQVNET2JqZWN0IG5ld09iamVjdDsKLQkKLQlwdWJsaWMgVzExTmV3Q29tcG9uZW50RGlhbG9nKFF1YWxpZmllZE5hbWUgcXVhbGlmaWVkTmFtZSwgSUZpbGUgaUZpbGUsIFcxMURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKSB7Ci0JCXRoaXMucXVhbGlmaWVkTmFtZSA9IHF1YWxpZmllZE5hbWU7Ci0JCXRoaXMuaUZpbGUgPSBpRmlsZTsKLQkJdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOwotCQkKLQkJU2hlbGwgc2hlbGwgPSBEaXNwbGF5LmdldEN1cnJlbnQoKS5nZXRBY3RpdmVTaGVsbCgpOwotCQlpZiAocXVhbGlmaWVkTmFtZSA9PSBJV1NETFNlYXJjaENvbnN0YW50cy5CSU5ESU5HX01FVEFfTkFNRSkgewotCQkJU3RyaW5nIGRpYWxvZ1RpdGxlID0gTWVzc2FnZXMuX1VJX0xBQkVMX05FV19CSU5ESU5HOyAvLyROT04tTkxTLTEkCi0JCQlTdHJpbmcgYmFzZU5hbWUgPSBOYW1lVXRpbC5idWlsZFVuaXF1ZUJpbmRpbmdOYW1lKGdldERlZmluaXRpb24oKSwgIk5ld0JpbmRpbmciKTsgLy8kTk9OLU5MUy0xJAotCQkJTGlzdCB1c2VkTmFtZXMgPSBOYW1lVXRpbC5nZXRVc2VkQmluZGluZ05hbWVzKGdldERlZmluaXRpb24oKSk7Ci0JCQlkaWFsb2cgPSBuZXcgTmV3Q29tcG9uZW50RGlhbG9nKHNoZWxsLCBkaWFsb2dUaXRsZSwgYmFzZU5hbWUsIHVzZWROYW1lcyk7Ci0JCQlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHNoZWxsLCBBU0RFZGl0b3JDU0hlbHBJZHMuTkVXX0JJTkRJTkdfRElBTE9HKTsKLQkJfQotCQllbHNlIGlmIChxdWFsaWZpZWROYW1lID09IElXU0RMU2VhcmNoQ29uc3RhbnRzLlBPUlRfVFlQRV9NRVRBX05BTUUpIHsKLQkJCVN0cmluZyBkaWFsb2dUaXRsZSA9IE1lc3NhZ2VzLl9VSV9MQUJFTF9ORVdfUE9SVFRZUEU7IC8vJE5PTi1OTFMtMSQKLQkJCVN0cmluZyBiYXNlTmFtZSA9IE5hbWVVdGlsLmJ1aWxkVW5pcXVlUG9ydFR5cGVOYW1lKGdldERlZmluaXRpb24oKSwgIk5ld1BvcnRUeXBlIik7IC8vJE5PTi1OTFMtMSQKLQkJCUxpc3QgdXNlZE5hbWVzID0gTmFtZVV0aWwuZ2V0VXNlZFBvcnRUeXBlTmFtZXMoZ2V0RGVmaW5pdGlvbigpKTsKLQkJCWRpYWxvZyA9IG5ldyBOZXdDb21wb25lbnREaWFsb2coc2hlbGwsIGRpYWxvZ1RpdGxlLCBiYXNlTmFtZSwgdXNlZE5hbWVzKTsKLQkJCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoc2hlbGwsIEFTREVkaXRvckNTSGVscElkcy5ORVdfUE9SVFRZUEVfRElBTE9HKTsKLQkJfQotCQllbHNlIGlmIChxdWFsaWZpZWROYW1lID09IElXU0RMU2VhcmNoQ29uc3RhbnRzLk1FU1NBR0VfTUVUQV9OQU1FKSB7Ci0JCQlTdHJpbmcgZGlhbG9nVGl0bGUgPSBNZXNzYWdlcy5fVUlfTEFCRUxfTkVXX01FU1NBR0U7IC8vJE5PTi1OTFMtMSQKLQkJCVN0cmluZyBiYXNlTmFtZSA9IE5hbWVVdGlsLmJ1aWxkVW5pcXVlTWVzc2FnZU5hbWUoZ2V0RGVmaW5pdGlvbigpLCAiTmV3TWVzc2FnZSIpOyAvLyROT04tTkxTLTEkCi0JCQlMaXN0IHVzZWROYW1lcyA9IE5hbWVVdGlsLmdldFVzZWRNZXNzYWdlTmFtZXMoZ2V0RGVmaW5pdGlvbigpKTsKLQkJCWRpYWxvZyA9IG5ldyBOZXdDb21wb25lbnREaWFsb2coc2hlbGwsIGRpYWxvZ1RpdGxlLCBiYXNlTmFtZSwgdXNlZE5hbWVzKTsKLQkJCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoc2hlbGwsIEFTREVkaXRvckNTSGVscElkcy5ORVdfTUVTU0FHRV9ESUFMT0cpOwotCQl9Ci0JfQotCQotCXByaXZhdGUgRGVmaW5pdGlvbiBnZXREZWZpbml0aW9uKCkgewotCQlyZXR1cm4gKERlZmluaXRpb24pIGRlc2NyaXB0aW9uLmdldFRhcmdldCgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRJbml0aWFsU2VsZWN0aW9uKENvbXBvbmVudFNwZWNpZmljYXRpb24gY29tcG9uZW50U3BlY2lmaWNhdGlvbikgewotCX0KLQotCXB1YmxpYyBDb21wb25lbnRTcGVjaWZpY2F0aW9uIGdldFNlbGVjdGVkQ29tcG9uZW50KCkgewotCQlTdHJpbmcgcXVhbGlmaWVyID0gZ2V0RGVmaW5pdGlvbigpLmdldFByZWZpeChnZXREZWZpbml0aW9uKCkuZ2V0VGFyZ2V0TmFtZXNwYWNlKCkpOwotCQlTdHJpbmcgbmFtZSA9IGRpYWxvZy5nZXROYW1lKCk7Ci0JCUNvbXBvbmVudFNwZWNpZmljYXRpb24gc3BlYyA9IG5ldyBDb21wb25lbnRTcGVjaWZpY2F0aW9uKHF1YWxpZmllciwgbmFtZSwgaUZpbGUpOwotCQlzcGVjLnNldE9iamVjdChuZXdPYmplY3QpOwotCQlyZXR1cm4gc3BlYzsKLQl9Ci0KLQlwdWJsaWMgaW50IGNyZWF0ZUFuZE9wZW4oKSB7Ci0JCWludCByVmFsdWUgPSBkaWFsb2cuY3JlYXRlQW5kT3BlbigpOwotCQkKLQkJaWYgKHJWYWx1ZSA9PSBXaW5kb3cuT0spIHsKLQkJCS8vIENyZWF0ZSB0aGUgbmV3IE9iamVjdAotCQkJaWYgKHF1YWxpZmllZE5hbWUgPT0gSVdTRExTZWFyY2hDb25zdGFudHMuQklORElOR19NRVRBX05BTUUpIHsKLQkJCQlXMTFBZGRCaW5kaW5nQ29tbWFuZCBjb21tYW5kID0gKFcxMUFkZEJpbmRpbmdDb21tYW5kKSBkZXNjcmlwdGlvbi5nZXRBZGRCaW5kaW5nQ29tbWFuZCgpOwotCQkJCWNvbW1hbmQuc2V0TmV3QmluZGluZ05hbWUoZGlhbG9nLmdldE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgZXhlY3V0ZShjb21tYW5kKTsKLQkJCSAgICAKLQkJCSAgICBPYmplY3QgbmV3V1NETE9iamVjdCA9IGNvbW1hbmQuZ2V0TmV3QmluZGluZygpOwotCQkJICAgIG5ld09iamVjdCA9IChJQVNET2JqZWN0KSBXU0RMQWRhcHRlckZhY3RvcnlIZWxwZXIuZ2V0SW5zdGFuY2UoKS5hZGFwdCgoTm90aWZpZXIpIG5ld1dTRExPYmplY3QpOwotCQkJfQotCQkJZWxzZSBpZiAocXVhbGlmaWVkTmFtZSA9PSBJV1NETFNlYXJjaENvbnN0YW50cy5QT1JUX1RZUEVfTUVUQV9OQU1FKSB7Ci0JCQkJVzExQWRkSW50ZXJmYWNlQ29tbWFuZCBjb21tYW5kID0gKFcxMUFkZEludGVyZmFjZUNvbW1hbmQpIGRlc2NyaXB0aW9uLmdldEFkZEludGVyZmFjZUNvbW1hbmQoKTsKLQkJCQljb21tYW5kLnNldE5ld1BvcnRUeXBlTmFtZShkaWFsb2cuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgICAgICBleGVjdXRlKGNvbW1hbmQpOwotCQkJICAgIAotCQkJICAgIE9iamVjdCBuZXdXU0RMT2JqZWN0ID0gY29tbWFuZC5nZXROZXdQb3J0VHlwZSgpOwotCQkJICAgIG5ld09iamVjdCA9IChJQVNET2JqZWN0KSBXU0RMQWRhcHRlckZhY3RvcnlIZWxwZXIuZ2V0SW5zdGFuY2UoKS5hZGFwdCgoTm90aWZpZXIpIG5ld1dTRExPYmplY3QpOwotCQkJfQotCQkJZWxzZSBpZiAocXVhbGlmaWVkTmFtZSA9PSBJV1NETFNlYXJjaENvbnN0YW50cy5NRVNTQUdFX01FVEFfTkFNRSkgewotCQkJCVcxMUFkZE1lc3NhZ2VDb21tYW5kIGNvbW1hbmQgPSAoVzExQWRkTWVzc2FnZUNvbW1hbmQpIGRlc2NyaXB0aW9uLmdldEFkZE1lc3NhZ2VDb21tYW5kKCk7Ci0JCQkJY29tbWFuZC5zZXROZXdNZXNzYWdlTmFtZShkaWFsb2cuZ2V0TmFtZSgpKTsKLQkJCQlleGVjdXRlKGNvbW1hbmQpOwotCQkJICAgIAotCQkJICAgIE9iamVjdCBuZXdXU0RMT2JqZWN0ID0gY29tbWFuZC5nZXROZXdNZXNzYWdlKCk7Ci0JCQkgICAgbmV3T2JqZWN0ID0gKElBU0RPYmplY3QpIFdTRExBZGFwdGVyRmFjdG9yeUhlbHBlci5nZXRJbnN0YW5jZSgpLmFkYXB0KChOb3RpZmllcikgbmV3V1NETE9iamVjdCk7Ci0JCQl9Ci0JCX0KLQkJCi0JCXJldHVybiByVmFsdWU7Ci0JfQotICAgIAotICAgIHByaXZhdGUgdm9pZCBleGVjdXRlKENvbW1hbmQgY29tbWFuZCkgewotICAgICAgICBJV29ya2JlbmNoUGFnZSBwYWdlID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCk7Ci0gICAgICAgIGlmIChwYWdlLmdldEFjdGl2ZUVkaXRvcigpLmdldEFkYXB0ZXIoQ29tbWFuZFN0YWNrLmNsYXNzKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBDb21tYW5kU3RhY2sgc3RhY2sgPSAoQ29tbWFuZFN0YWNrKSBwYWdlLmdldEFjdGl2ZUVkaXRvcigpLmdldEFkYXB0ZXIoQ29tbWFuZFN0YWNrLmNsYXNzKTsKLSAgICAgICAgICAgIHN0YWNrLmV4ZWN1dGUoY29tbWFuZCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBjb21tYW5kLmV4ZWN1dGUoKTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZWRpdC9XMTFCaW5kaW5nUmVmZXJlbmNlRWRpdE1hbmFnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZWRpdC9XMTFCaW5kaW5nUmVmZXJlbmNlRWRpdE1hbmFnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTgzNDVkYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2VkaXQvVzExQmluZGluZ1JlZmVyZW5jZUVkaXRNYW5hZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmVkaXQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kU3RhY2s7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5zZWFyY2guZGlhbG9ncy5Db21wb25lbnRTcGVjaWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuSUNvbXBvbmVudERlc2NyaXB0aW9uUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExRW5kUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMuVzExU2V0QmluZGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklCaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmRpYWxvZ3MuVzExQnJvd3NlQ29tcG9uZW50RGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmRpYWxvZ3MuVzExTmV3Q29tcG9uZW50RGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnNlYXJjaC5JV1NETFNlYXJjaENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLldTRExTZXRDb21wb25lbnRIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5Db21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0LklDb21wb25lbnREaWFsb2c7Ci0KLXB1YmxpYyBjbGFzcyBXMTFCaW5kaW5nUmVmZXJlbmNlRWRpdE1hbmFnZXIgaW1wbGVtZW50cyBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciB7Ci0JcHJvdGVjdGVkIFcxMURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uOwotCXByb3RlY3RlZCBJRmlsZSBpRmlsZTsKLQkKLQlwdWJsaWMgVzExQmluZGluZ1JlZmVyZW5jZUVkaXRNYW5hZ2VyKFcxMURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uLCBJRmlsZSBpRmlsZSkgewotCQl0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247Ci0JCXRoaXMuaUZpbGUgPSBpRmlsZTsKLQl9Ci0JCi0JcHVibGljIElDb21wb25lbnREaWFsb2cgZ2V0QnJvd3NlRGlhbG9nKCkgewotCQlyZXR1cm4gbmV3IFcxMUJyb3dzZUNvbXBvbmVudERpYWxvZyhJV1NETFNlYXJjaENvbnN0YW50cy5CSU5ESU5HX01FVEFfTkFNRSwgaUZpbGUsIGRlc2NyaXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgSUNvbXBvbmVudERpYWxvZyBnZXROZXdEaWFsb2coKSB7Ci0JCXJldHVybiBuZXcgVzExTmV3Q29tcG9uZW50RGlhbG9nKElXU0RMU2VhcmNoQ29uc3RhbnRzLkJJTkRJTkdfTUVUQV9OQU1FLCBpRmlsZSwgZGVzY3JpcHRpb24pOwotCX0KLQkKLQlwcml2YXRlIERlZmluaXRpb24gZ2V0RGVmaW5pdGlvbigpIHsKLQkJcmV0dXJuIChEZWZpbml0aW9uKSBkZXNjcmlwdGlvbi5nZXRUYXJnZXQoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBtb2RpZnlDb21wb25lbnRSZWZlcmVuY2UoT2JqZWN0IHJlZmVyZW5jaW5nT2JqZWN0LCBDb21wb25lbnRTcGVjaWZpY2F0aW9uIHJlZmVyZW5jZWRDb21wb25lbnQpIHsKLQkJVzExRW5kUG9pbnQgdzExRW5kUG9pbnQgPSAoVzExRW5kUG9pbnQpIHJlZmVyZW5jaW5nT2JqZWN0OwotCQlPYmplY3QgYmluZGluZ09iamVjdCA9IHJlZmVyZW5jZWRDb21wb25lbnQuZ2V0T2JqZWN0KCk7Ci0JCWlmIChiaW5kaW5nT2JqZWN0ID09IG51bGwpIHsKLQkJCS8vIE5lZWQgdG8gZmlndXJlIG91dCB0aGUgSUJpbmRpbmcgYmFzZWQgb24gdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBpbiB0aGUgQ29tcG9uZW50U3BlY2lmaWNhdGlvbgotCi0JCX0KLQkJCi0JCWlmIChiaW5kaW5nT2JqZWN0IGluc3RhbmNlb2YgQ29tcG9uZW50U3BlY2lmaWNhdGlvbikgewotCQkJUG9ydCBwb3J0ID0gKFBvcnQpIHcxMUVuZFBvaW50LmdldFRhcmdldCgpOwotCQkJV1NETFNldENvbXBvbmVudEhlbHBlciBoZWxwZXIgPSBuZXcgV1NETFNldENvbXBvbmVudEhlbHBlcihpRmlsZSwgZ2V0RGVmaW5pdGlvbigpKTsKLQkJCWhlbHBlci5zZXRXU0RMQ29tcG9uZW50KHBvcnQsICJiaW5kaW5nIiwgKENvbXBvbmVudFNwZWNpZmljYXRpb24pIGJpbmRpbmdPYmplY3QpOyAvLyROT04tTkxTLTEkCi0JCQkKLQkJCUJpbmRpbmcgbmV3QmluZGluZyA9IHBvcnQuZ2V0RUJpbmRpbmcoKTsKLQkJCVcxMVNldEJpbmRpbmdDb21tYW5kLnVwZGF0ZVBvcnRQcm90b2NvbChwb3J0LCBuZXdCaW5kaW5nKTsKLQkJfQkJCi0JCWVsc2UgaWYgKGJpbmRpbmdPYmplY3QgaW5zdGFuY2VvZiBJQmluZGluZyl7Ci0JCQlJQmluZGluZyBiaW5kaW5nID0gKElCaW5kaW5nKSBiaW5kaW5nT2JqZWN0OwotCQkJQ29tbWFuZCBjb21tYW5kID0gdzExRW5kUG9pbnQuZ2V0U2V0QmluZGluZ0NvbW1hbmQoYmluZGluZyk7Ci0JCQlDb21tYW5kU3RhY2sgc3RhY2sgPSAoQ29tbWFuZFN0YWNrKSBBU0RFZGl0b3JQbHVnaW4uZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0QWRhcHRlcihDb21tYW5kU3RhY2suY2xhc3MpOwotCQkJc3RhY2suZXhlY3V0ZShjb21tYW5kKTsKLQkJfQotCX0KLQotCXB1YmxpYyBJQ29tcG9uZW50RGVzY3JpcHRpb25Qcm92aWRlciBnZXRDb21wb25lbnREZXNjcmlwdGlvblByb3ZpZGVyKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgQ29tcG9uZW50U3BlY2lmaWNhdGlvbltdIGdldFF1aWNrUGlja3MoKSB7Ci0JCUxpc3Qgc3BlY0xpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQotCQlJdGVyYXRvciBiaW5kaW5ncyA9IGRlc2NyaXB0aW9uLmdldEJpbmRpbmdzKCkuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGJpbmRpbmdzLmhhc05leHQoKSkgewotCQkJSUJpbmRpbmcgYmluZGluZyA9IChJQmluZGluZykgYmluZGluZ3MubmV4dCgpOwotCQkJU3RyaW5nIHF1YWxpZmllciA9ICIiOyAvLyROT04tTkxTLTEkCi0JCQlTdHJpbmcgbmFtZSA9IGJpbmRpbmcuZ2V0TmFtZSgpOwotCQkJSUZpbGUgZmlsZSA9IG51bGw7Ci0JCQkKLQkJCUNvbXBvbmVudFNwZWNpZmljYXRpb24gc3BlYyA9IG5ldyBDb21wb25lbnRTcGVjaWZpY2F0aW9uKHF1YWxpZmllciwgbmFtZSwgZmlsZSk7Ci0JCQlzcGVjLnNldE9iamVjdChiaW5kaW5nKTsKLQkJCXNwZWNMaXN0LmFkZChzcGVjKTsKLQkJfQotCi0JCUNvbXBvbmVudFNwZWNpZmljYXRpb25bXSBzcGVjQXJyYXkgPSBuZXcgQ29tcG9uZW50U3BlY2lmaWNhdGlvbltzcGVjTGlzdC5zaXplKCldOwotCQlzcGVjTGlzdC50b0FycmF5KHNwZWNBcnJheSk7Ci0JCQotCQlyZXR1cm4gc3BlY0FycmF5OwotCX0KLQotCXB1YmxpYyBDb21wb25lbnRTcGVjaWZpY2F0aW9uW10gZ2V0SGlzdG9yeSgpIHsKLQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbltdIGhpc3RvcnkgPSBuZXcgQ29tcG9uZW50U3BlY2lmaWNhdGlvblswXTsKLQkJcmV0dXJuIGhpc3Rvcnk7Ci0JfQotCi0JcHVibGljIHZvaWQgYWRkVG9IaXN0b3J5KENvbXBvbmVudFNwZWNpZmljYXRpb24gY29tcG9uZW50KSB7Ci0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2VkaXQvVzExSW50ZXJmYWNlUmVmZXJlbmNlRWRpdE1hbmFnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZWRpdC9XMTFJbnRlcmZhY2VSZWZlcmVuY2VFZGl0TWFuYWdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNGVmZWYzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZWRpdC9XMTFJbnRlcmZhY2VSZWZlcmVuY2VFZGl0TWFuYWdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5lZGl0OwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZFN0YWNrOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5zZWFyY2guZGlhbG9ncy5Db21wb25lbnRTcGVjaWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuSUNvbXBvbmVudERlc2NyaXB0aW9uUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMUJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmRpYWxvZ3MuVzExQnJvd3NlQ29tcG9uZW50RGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmRpYWxvZ3MuVzExTmV3Q29tcG9uZW50RGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnNlYXJjaC5JV1NETFNlYXJjaENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLldTRExTZXRDb21wb25lbnRIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5Db21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0LklDb21wb25lbnREaWFsb2c7Ci0KLXB1YmxpYyBjbGFzcyBXMTFJbnRlcmZhY2VSZWZlcmVuY2VFZGl0TWFuYWdlciBpbXBsZW1lbnRzIENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIHsKLQlwcm90ZWN0ZWQgVzExRGVzY3JpcHRpb24gZGVzY3JpcHRpb247Ci0JcHJvdGVjdGVkIElGaWxlIGlGaWxlOwotCQotCXB1YmxpYyBXMTFJbnRlcmZhY2VSZWZlcmVuY2VFZGl0TWFuYWdlcihXMTFEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiwgSUZpbGUgaUZpbGUpIHsKLQkJdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOwotCQl0aGlzLmlGaWxlID0gaUZpbGU7Ci0JfQotCQotCXB1YmxpYyBJQ29tcG9uZW50RGlhbG9nIGdldEJyb3dzZURpYWxvZygpIHsKLQkJcmV0dXJuIG5ldyBXMTFCcm93c2VDb21wb25lbnREaWFsb2coSVdTRExTZWFyY2hDb25zdGFudHMuUE9SVF9UWVBFX01FVEFfTkFNRSwgaUZpbGUsIGRlc2NyaXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgSUNvbXBvbmVudERpYWxvZyBnZXROZXdEaWFsb2coKSB7Ci0JCXJldHVybiBuZXcgVzExTmV3Q29tcG9uZW50RGlhbG9nKElXU0RMU2VhcmNoQ29uc3RhbnRzLlBPUlRfVFlQRV9NRVRBX05BTUUsIGlGaWxlLCBkZXNjcmlwdGlvbik7Ci0JfQotCi0JcHJpdmF0ZSBEZWZpbml0aW9uIGdldERlZmluaXRpb24oKSB7Ci0JCXJldHVybiAoRGVmaW5pdGlvbikgZGVzY3JpcHRpb24uZ2V0VGFyZ2V0KCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIG1vZGlmeUNvbXBvbmVudFJlZmVyZW5jZShPYmplY3QgcmVmZXJlbmNpbmdPYmplY3QsIENvbXBvbmVudFNwZWNpZmljYXRpb24gcmVmZXJlbmNlZENvbXBvbmVudCkgewotCQlXMTFCaW5kaW5nIHcxMUJpbmRpbmcgPSAoVzExQmluZGluZykgcmVmZXJlbmNpbmdPYmplY3Q7Ci0JCU9iamVjdCBpbnRlcmZhY2VPYmplY3QgPSByZWZlcmVuY2VkQ29tcG9uZW50LmdldE9iamVjdCgpOwotCQlpZiAoaW50ZXJmYWNlT2JqZWN0ID09IG51bGwpIHsKLQkJCS8vIE5lZWQgdG8gZmlndXJlIG91dCB0aGUgSUludGVyZmFjZSBiYXNlZCBvbiB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkIGluIHRoZSBDb21wb25lbnRTcGVjaWZpY2F0aW9uCi0KLQkJfQotCQkKLQkJaWYgKGludGVyZmFjZU9iamVjdCBpbnN0YW5jZW9mIENvbXBvbmVudFNwZWNpZmljYXRpb24pIHsKLQkJCUJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSB3MTFCaW5kaW5nLmdldFRhcmdldCgpOwotCQkJV1NETFNldENvbXBvbmVudEhlbHBlciBoZWxwZXIgPSBuZXcgV1NETFNldENvbXBvbmVudEhlbHBlcihpRmlsZSwgZ2V0RGVmaW5pdGlvbigpKTsKLQkJCWhlbHBlci5zZXRXU0RMQ29tcG9uZW50KGJpbmRpbmcsICJ0eXBlIiwgKENvbXBvbmVudFNwZWNpZmljYXRpb24pIGludGVyZmFjZU9iamVjdCk7IC8vJE5PTi1OTFMtMSQKLQkJfQotCQllbHNlIGlmIChpbnRlcmZhY2VPYmplY3QgaW5zdGFuY2VvZiBJSW50ZXJmYWNlKXsKLQkJCUlJbnRlcmZhY2UgaW50ZXJmYXplID0gKElJbnRlcmZhY2UpIGludGVyZmFjZU9iamVjdDsKLQkJCUNvbW1hbmQgY29tbWFuZCA9IHcxMUJpbmRpbmcuZ2V0U2V0SW50ZXJmYWNlQ29tbWFuZChpbnRlcmZhemUpOwotCQkJQ29tbWFuZFN0YWNrIHN0YWNrID0gKENvbW1hbmRTdGFjaykgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0QWRhcHRlcihDb21tYW5kU3RhY2suY2xhc3MpOwotCQkJc3RhY2suZXhlY3V0ZShjb21tYW5kKTsKLQkJfQotCX0KLQotCXB1YmxpYyBJQ29tcG9uZW50RGVzY3JpcHRpb25Qcm92aWRlciBnZXRDb21wb25lbnREZXNjcmlwdGlvblByb3ZpZGVyKCkgewotCi0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBDb21wb25lbnRTcGVjaWZpY2F0aW9uW10gZ2V0UXVpY2tQaWNrcygpIHsKLQkJTGlzdCBzcGVjTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCi0JCUl0ZXJhdG9yIGludGVyZmFjZXMgPSBkZXNjcmlwdGlvbi5nZXRJbnRlcmZhY2VzKCkuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGludGVyZmFjZXMuaGFzTmV4dCgpKSB7Ci0JCQlJSW50ZXJmYWNlIGludGVyZmF6ZSA9IChJSW50ZXJmYWNlKSBpbnRlcmZhY2VzLm5leHQoKTsKLQkJCVN0cmluZyBxdWFsaWZpZXIgPSAiIjsgLy8kTk9OLU5MUy0xJAotCQkJU3RyaW5nIG5hbWUgPSBpbnRlcmZhemUuZ2V0TmFtZSgpOwotCQkJSUZpbGUgZmlsZSA9IG51bGw7Ci0JCQkKLQkJCUNvbXBvbmVudFNwZWNpZmljYXRpb24gc3BlYyA9IG5ldyBDb21wb25lbnRTcGVjaWZpY2F0aW9uKHF1YWxpZmllciwgbmFtZSwgZmlsZSk7Ci0JCQlzcGVjLnNldE9iamVjdChpbnRlcmZhemUpOwotCQkJc3BlY0xpc3QuYWRkKHNwZWMpOwotCQl9Ci0KLQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbltdIHNwZWNBcnJheSA9IG5ldyBDb21wb25lbnRTcGVjaWZpY2F0aW9uW3NwZWNMaXN0LnNpemUoKV07Ci0JCXNwZWNMaXN0LnRvQXJyYXkoc3BlY0FycmF5KTsKLQkJCi0JCXJldHVybiBzcGVjQXJyYXk7Ci0JfQotCi0JcHVibGljIENvbXBvbmVudFNwZWNpZmljYXRpb25bXSBnZXRIaXN0b3J5KCkgewotCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uW10gaGlzdG9yeSA9IG5ldyBDb21wb25lbnRTcGVjaWZpY2F0aW9uWzBdOwotCQlyZXR1cm4gaGlzdG9yeTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBhZGRUb0hpc3RvcnkoQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBjb21wb25lbnQpIHsKLQotCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9lZGl0L1cxMU1lc3NhZ2VSZWZlcmVuY2VFZGl0TWFuYWdlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9lZGl0L1cxMU1lc3NhZ2VSZWZlcmVuY2VFZGl0TWFuYWdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMWM0ODc3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZWRpdC9XMTFNZXNzYWdlUmVmZXJlbmNlRWRpdE1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZWRpdDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuQ29tcG9uZW50U3BlY2lmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLklDb21wb25lbnREZXNjcmlwdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFNZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMU1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5kaWFsb2dzLlcxMUJyb3dzZUNvbXBvbmVudERpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5kaWFsb2dzLlcxMU5ld0NvbXBvbmVudERpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5zZWFyY2guSVdTRExTZWFyY2hDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMU2V0Q29tcG9uZW50SGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5JQ29tcG9uZW50RGlhbG9nOwotCi1wdWJsaWMgY2xhc3MgVzExTWVzc2FnZVJlZmVyZW5jZUVkaXRNYW5hZ2VyIGltcGxlbWVudHMgQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgewotCXByb3RlY3RlZCBXMTFEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbjsKLQlwcm90ZWN0ZWQgSUZpbGUgaUZpbGU7Ci0JCi0JcHVibGljIFcxMU1lc3NhZ2VSZWZlcmVuY2VFZGl0TWFuYWdlcihXMTFEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiwgSUZpbGUgaUZpbGUpIHsKLQkJdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOwotCQl0aGlzLmlGaWxlID0gaUZpbGU7Ci0JfQotCi0JcHVibGljIElDb21wb25lbnREaWFsb2cgZ2V0QnJvd3NlRGlhbG9nKCkgewotCQlyZXR1cm4gbmV3IFcxMUJyb3dzZUNvbXBvbmVudERpYWxvZyhJV1NETFNlYXJjaENvbnN0YW50cy5NRVNTQUdFX01FVEFfTkFNRSwgaUZpbGUsIGRlc2NyaXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgSUNvbXBvbmVudERpYWxvZyBnZXROZXdEaWFsb2coKSB7Ci0JCXJldHVybiBuZXcgVzExTmV3Q29tcG9uZW50RGlhbG9nKElXU0RMU2VhcmNoQ29uc3RhbnRzLk1FU1NBR0VfTUVUQV9OQU1FLCBpRmlsZSwgZGVzY3JpcHRpb24pOwotCX0KLQotCXByaXZhdGUgRGVmaW5pdGlvbiBnZXREZWZpbml0aW9uKCkgewotCQlyZXR1cm4gKERlZmluaXRpb24pIGRlc2NyaXB0aW9uLmdldFRhcmdldCgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBtb2RpZnlDb21wb25lbnRSZWZlcmVuY2UoT2JqZWN0IHJlZmVyZW5jaW5nT2JqZWN0LCBDb21wb25lbnRTcGVjaWZpY2F0aW9uIHJlZmVyZW5jZWRDb21wb25lbnQpIHsKLQkJVzExTWVzc2FnZVJlZmVyZW5jZSB3MTFNZXNzYWdlUmVmID0gKFcxMU1lc3NhZ2VSZWZlcmVuY2UpIHJlZmVyZW5jaW5nT2JqZWN0OwotCQlPYmplY3QgbWVzc2FnZU9iamVjdCA9IHJlZmVyZW5jZWRDb21wb25lbnQuZ2V0T2JqZWN0KCk7Ci0JCWlmIChtZXNzYWdlT2JqZWN0ID09IG51bGwpIHsKLQkJCS8vIE5lZWQgdG8gZmlndXJlIG91dCB0aGUgSU1lc3NhZ2UgYmFzZWQgb24gdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBpbiB0aGUgQ29tcG9uZW50U3BlY2lmaWNhdGlvbgotCi0JCX0KLQkJCi0JCWlmIChtZXNzYWdlT2JqZWN0IGluc3RhbmNlb2YgQ29tcG9uZW50U3BlY2lmaWNhdGlvbikgewotCQkJTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmPSAoTWVzc2FnZVJlZmVyZW5jZSkgdzExTWVzc2FnZVJlZi5nZXRUYXJnZXQoKTsKLQkJCVdTRExTZXRDb21wb25lbnRIZWxwZXIgaGVscGVyID0gbmV3IFdTRExTZXRDb21wb25lbnRIZWxwZXIoaUZpbGUsIGdldERlZmluaXRpb24oKSk7Ci0JCQloZWxwZXIuc2V0V1NETENvbXBvbmVudChtZXNzYWdlUmVmLCAibWVzc2FnZSIsIChDb21wb25lbnRTcGVjaWZpY2F0aW9uKSBtZXNzYWdlT2JqZWN0KTsgLy8kTk9OLU5MUy0xJAotCQl9CQkKLQkJZWxzZSBpZiAobWVzc2FnZU9iamVjdCBpbnN0YW5jZW9mIFcxMU1lc3NhZ2UpewotCQkJLy8gQmVsb3cgaXMgYSBsaXR0bGUgY29tcGxleC4uLi4gVGhlIGFsdGVybmF0aXZlIHdhcyB0byBoYXZlIElNZXNzYWdlIGNvbnRhaW4gYQotCQkJLy8gZ2V0U2V0TWVzc2FnZUNvbW1hbmQoKSB3aGljaCB3b3VsZCBoYW5kbGUgYWxsIG9mIHRoaXMgYnV0IGRvZXMgYSBnZXRTZXRNZXNzYWdlQ29tbWFuZCgpCi0JCQkvLyBtYWtlIHNlbnNlIGF0IHRoZSBnZW5lcmljIGxldmVsLi4uLi4KLQkJCVcxMU1lc3NhZ2UgaU1lc3NhZ2UgPSAoVzExTWVzc2FnZSkgbWVzc2FnZU9iamVjdDsKLQkJCUNvbXBvbmVudFNwZWNpZmljYXRpb24gc3BlY09iamVjdCA9IG5ldyBDb21wb25lbnRTcGVjaWZpY2F0aW9uKCk7Ci0JCQlzcGVjT2JqZWN0LnNldE5hbWUoaU1lc3NhZ2UuZ2V0TmFtZSgpKTsKLQkJCXNwZWNPYmplY3Quc2V0TWV0YU5hbWUoSVdTRExTZWFyY2hDb25zdGFudHMuTUVTU0FHRV9NRVRBX05BTUUpOwotCQkJc3BlY09iamVjdC5zZXRRdWFsaWZpZXIoZGVzY3JpcHRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCkpOwotCQkJCi0JCQlTdHJpbmcgbG9jYXRpb24gPSAoKERlZmluaXRpb24pIGRlc2NyaXB0aW9uLmdldFRhcmdldCgpKS5nZXRMb2NhdGlvbigpOwotCQkJU3RyaW5nIHBsYXRmb3JtUmVzb3VyY2UgPSAicGxhdGZvcm06L3Jlc291cmNlIjsgLy8kTk9OLU5MUy0xJAotCSAgICAgICAgaWYgKGxvY2F0aW9uICE9IG51bGwgJiYgbG9jYXRpb24uc3RhcnRzV2l0aChwbGF0Zm9ybVJlc291cmNlKSkKLQkgICAgICAgIHsKLQkgICAgICAgICAgUGF0aCBwYXRoID0gbmV3IFBhdGgobG9jYXRpb24uc3Vic3RyaW5nKHBsYXRmb3JtUmVzb3VyY2UubGVuZ3RoKCkpKTsKLQkgICAgICAgICAgc3BlY09iamVjdC5zZXRGaWxlKFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShwYXRoKSk7Ci0JICAgICAgICB9ICAKLQkJCQotCQkJTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmPSAoTWVzc2FnZVJlZmVyZW5jZSkgdzExTWVzc2FnZVJlZi5nZXRUYXJnZXQoKTsKLQkJCVdTRExTZXRDb21wb25lbnRIZWxwZXIgaGVscGVyID0gbmV3IFdTRExTZXRDb21wb25lbnRIZWxwZXIoaUZpbGUsIGdldERlZmluaXRpb24oKSk7Ci0JCQloZWxwZXIuc2V0V1NETENvbXBvbmVudChtZXNzYWdlUmVmLCAibWVzc2FnZSIsIChDb21wb25lbnRTcGVjaWZpY2F0aW9uKSBzcGVjT2JqZWN0KTsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JfQotCi0JcHVibGljIElDb21wb25lbnREZXNjcmlwdGlvblByb3ZpZGVyIGdldENvbXBvbmVudERlc2NyaXB0aW9uUHJvdmlkZXIoKSB7Ci0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIENvbXBvbmVudFNwZWNpZmljYXRpb25bXSBnZXRRdWlja1BpY2tzKCkgewotCQlMaXN0IHNwZWNMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCQkKLQkJSXRlcmF0b3IgbWVzc2FnZXMgPSBkZXNjcmlwdGlvbi5nZXRNZXNzYWdlcygpLml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChtZXNzYWdlcy5oYXNOZXh0KCkpIHsKLQkJCUlNZXNzYWdlIG1lc3NhZ2UgPSAoSU1lc3NhZ2UpIG1lc3NhZ2VzLm5leHQoKTsKLQkJCVN0cmluZyBxdWFsaWZpZXIgPSAiIjsgLy8kTk9OLU5MUy0xJAotCQkJU3RyaW5nIG5hbWUgPSBtZXNzYWdlLmdldE5hbWUoKTsKLQkJCUlGaWxlIGZpbGUgPSBudWxsOwotCQkJCi0JCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uIHNwZWMgPSBuZXcgQ29tcG9uZW50U3BlY2lmaWNhdGlvbihxdWFsaWZpZXIsIG5hbWUsIGZpbGUpOwotCQkJc3BlYy5zZXRPYmplY3QobWVzc2FnZSk7Ci0JCQlzcGVjTGlzdC5hZGQoc3BlYyk7Ci0JCX0KLQotCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uW10gc3BlY0FycmF5ID0gbmV3IENvbXBvbmVudFNwZWNpZmljYXRpb25bc3BlY0xpc3Quc2l6ZSgpXTsKLQkJc3BlY0xpc3QudG9BcnJheShzcGVjQXJyYXkpOwotCQkKLQkJcmV0dXJuIHNwZWNBcnJheTsKLQl9Ci0KLQlwdWJsaWMgQ29tcG9uZW50U3BlY2lmaWNhdGlvbltdIGdldEhpc3RvcnkoKSB7Ci0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIHZvaWQgYWRkVG9IaXN0b3J5KENvbXBvbmVudFNwZWNpZmljYXRpb24gY29tcG9uZW50KSB7Ci0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2VkaXQvV1NETEJhc2VTZWFyY2hMaXN0UHJvdmlkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZWRpdC9XU0RMQmFzZVNlYXJjaExpc3RQcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGZlMzQzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZWRpdC9XU0RMQmFzZVNlYXJjaExpc3RQcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5lZGl0OwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvcmUuc2VhcmNoLnBhdHRlcm4uUXVhbGlmaWVkTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvcmUuc2VhcmNoLnNjb3BlLlNlYXJjaFNjb3BlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuQ29tcG9uZW50U3BlY2lmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLklDb21wb25lbnRMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuSUNvbXBvbmVudFNlYXJjaExpc3RQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyLmludGVybmFsLnV0aWwuVVJJSGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuSW1wb3J0SW1wbDsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFdTRExCYXNlU2VhcmNoTGlzdFByb3ZpZGVyIGltcGxlbWVudHMgSUNvbXBvbmVudFNlYXJjaExpc3RQcm92aWRlciB7Ci0JCi0JcHJvdGVjdGVkIERlZmluaXRpb24gZGVmaW5pdGlvbjsKLQkKLQlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVXU0RMQ29tcG9uZW50T2JqZWN0cyhJQ29tcG9uZW50TGlzdCBsaXN0LCBMaXN0IGlucHV0Q29tcG9uZW50cywgUXVhbGlmaWVkTmFtZSBtZXRhTmFtZSkgewotCQlJdGVyYXRvciBpdCA9IGlucHV0Q29tcG9uZW50cy5pdGVyYXRvcigpOwotCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0JCQlXU0RMRWxlbWVudCB3c2RsRWxlbWVudCA9IChXU0RMRWxlbWVudCkgaXQubmV4dCgpOwotCQkJU3RyaW5nIG5hbWUgPSB3c2RsRWxlbWVudC5nZXRFbGVtZW50KCkuZ2V0QXR0cmlidXRlKCJuYW1lIik7IC8vJE5PTi1OTFMtMSQKLQkJCVN0cmluZyBxdWFsaWZpZXIgPSB3c2RsRWxlbWVudC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0JCQkKLQkJCUNvbXBvbmVudFNwZWNpZmljYXRpb24gY29tcG9uZW50U3BlYyA9IG5ldyBDb21wb25lbnRTcGVjaWZpY2F0aW9uKCk7Ci0JCQljb21wb25lbnRTcGVjLnNldE1ldGFOYW1lKG1ldGFOYW1lKTsKLQkJCWNvbXBvbmVudFNwZWMuc2V0TmFtZShuYW1lKTsKLQkJCWNvbXBvbmVudFNwZWMuc2V0UXVhbGlmaWVyKHF1YWxpZmllcik7Ci0JCQkKLQkJCVN0cmluZyBsb2NhdGlvbiA9IHdzZGxFbGVtZW50LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKS5nZXRMb2NhdGlvbigpOwotCQkJU3RyaW5nIHBsYXRmb3JtUmVzb3VyY2UgPSAicGxhdGZvcm06L3Jlc291cmNlIjsgLy8kTk9OLU5MUy0xJAotCQkJaWYgKGxvY2F0aW9uICE9IG51bGwgJiYgbG9jYXRpb24uc3RhcnRzV2l0aChwbGF0Zm9ybVJlc291cmNlKSkgewotCQkJCVBhdGggcGF0aCA9IG5ldyBQYXRoKGxvY2F0aW9uLnN1YnN0cmluZyhwbGF0Zm9ybVJlc291cmNlLmxlbmd0aCgpKSk7Ci0JCQkJSUZpbGUgcmVzdWx0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKHBhdGgpOwotCQkJCWlmIChyZXN1bHQgIT0gbnVsbCkgewotCQkJCQljb21wb25lbnRTcGVjLnNldEZpbGUocmVzdWx0KTsKLQkJCQl9Ci0JCQl9Ci0JCQkKLQkJCWxpc3QuYWRkKGNvbXBvbmVudFNwZWMpOwotCQl9Ci0JfQotCQotCXByb3RlY3RlZCBMaXN0IGdldFdTRExGaWxlSW1wb3J0cyhMaXN0IHdzZGxJbXBvcnRzKSB7Ci0JCUxpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJSXRlcmF0b3IgaXQgPSB3c2RsSW1wb3J0cy5pdGVyYXRvcigpOwotCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0JCQlJbXBvcnRJbXBsIGltcG9ydEl0ZW0gPSAoSW1wb3J0SW1wbCkgaXQubmV4dCgpOwotCQkJaW1wb3J0SXRlbS5pbXBvcnREZWZpbml0aW9uT3JTY2hlbWEoKTsgICAgICAgICAgLy8gTG9hZCBpZiBuZWNlc3NhcnkKLQkJCWlmIChpbXBvcnRJdGVtLmdldEVTY2hlbWEoKSA9PSBudWxsKSB7Ci0JCQkJbGlzdC5hZGQoaW1wb3J0SXRlbSk7Ci0JCQl9Ci0JCX0KLQkJCi0JCXJldHVybiBsaXN0OwotCX0KLQkKLQkvL1RPRE8gKHRydW5nKSBtYWtlIHRoaXMgb25lIGFic3RyYWN0IHdoZW4gd2UgYXJlIGluIGRldmVsb3BtZW50IHBoYXNlIGFnYWluCi0JcHJvdGVjdGVkIExpc3QgZ2V0U2VhcmNoaW5nQ29tcG9uZW50cyhEZWZpbml0aW9uIGltcG9ydERlZmluaXRpb24pIHsKLQkJcmV0dXJuIG5ldyBBcnJheUxpc3QoKTsKLQl9Ci0JCi0JcHJvdGVjdGVkIHZvaWQgZ2V0SW1wb3J0ZWRDb21wb25lbnRzKElDb21wb25lbnRMaXN0IGxpc3QsIFF1YWxpZmllZE5hbWUgbWV0YU5hbWUsIEhhc2hNYXAgZXhjbHVzaW9ucykgewkJCi0JCUl0ZXJhdG9yIGltcG9ydHNJdCA9IGdldFdTRExGaWxlSW1wb3J0cyhkZWZpbml0aW9uLmdldEVJbXBvcnRzKCkpLml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChpbXBvcnRzSXQuaGFzTmV4dCgpKSB7Ci0JCQlJbXBvcnQgaW1wb3J0SXRlbSA9IChJbXBvcnQpIGltcG9ydHNJdC5uZXh0KCk7Ci0JCQlTdHJpbmcgbG9jYXRpb24gPSBpbXBvcnRJdGVtLmdldERlZmluaXRpb24oKS5nZXREb2N1bWVudEJhc2VVUkkoKTsKLQkJCWV4Y2x1c2lvbnMucHV0KGxvY2F0aW9uLCBCb29sZWFuLlRSVUUgKTsKLQkJCURlZmluaXRpb24gaW1wb3J0RGVmaW5pdGlvbiA9IGltcG9ydEl0ZW0uZ2V0RURlZmluaXRpb24oKTsKLQkJCWlmIChpbXBvcnREZWZpbml0aW9uICE9IG51bGwpCi0JCQl7Ci0JCSAgCSAgTGlzdCBpbXBvcnRlZENvbXBvbmVudHMgPSBnZXRTZWFyY2hpbmdDb21wb25lbnRzKGltcG9ydERlZmluaXRpb24pOwkJCQotCQkJICBjcmVhdGVXU0RMQ29tcG9uZW50T2JqZWN0cyhsaXN0LCBpbXBvcnRlZENvbXBvbmVudHMsIG1ldGFOYW1lKTsKLQkJCX0KLQkJfQotCX0KLQkKLQlwcm90ZWN0ZWQgdm9pZCBzZWFyY2hPdXRzaWRlQ3VycmVudFJlc291cmNlKElDb21wb25lbnRMaXN0IGxpc3QsIFNlYXJjaFNjb3BlIHNjb3BlLCBRdWFsaWZpZWROYW1lIG1ldGFOYW1lLCBNYXAgZXhjbHVzaW9ucykgewotCQlpZiAoc2NvcGUgIT0gbnVsbCkgewotCQkJV1NETENvbXBvbmVudEZpbmRlciBmaW5kZXIgPSBuZXcgV1NETENvbXBvbmVudEZpbmRlcihtZXRhTmFtZSk7Ci0JCQlJdGVyYXRvciBpdCA9IGZpbmRlci5nZXRXb3JrYmVuY2hSZXNvdXJjZUNvbXBvbmVudHMoc2NvcGUpLml0ZXJhdG9yKCk7IAotCQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJCUNvbXBvbmVudFNwZWNpZmljYXRpb24gaXRlbSA9IChDb21wb25lbnRTcGVjaWZpY2F0aW9uKSBpdC5uZXh0KCk7Ci0JCQkJU3RyaW5nIGl0ZW1VUkkgPSBVUklIZWxwZXIuZ2V0UGxhdGZvcm1VUkkoaXRlbS5nZXRGaWxlKCkpOwotCQkJCWlmIChleGNsdXNpb25zLmdldChpdGVtVVJJKSA9PSBudWxsKXsKLQkJCQkJbGlzdC5hZGQoaXRlbSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9lZGl0L1dTRExCaW5kaW5nU2VhcmNoTGlzdFByb3ZpZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2VkaXQvV1NETEJpbmRpbmdTZWFyY2hMaXN0UHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQzYzcxNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2VkaXQvV1NETEJpbmRpbmdTZWFyY2hMaXN0UHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5lZGl0OwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvcmUuc2VhcmNoLnNjb3BlLlNlYXJjaFNjb3BlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuSUNvbXBvbmVudExpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5zZWFyY2guSVdTRExTZWFyY2hDb25zdGFudHM7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMQmluZGluZ1NlYXJjaExpc3RQcm92aWRlciBleHRlbmRzIFdTRExCYXNlU2VhcmNoTGlzdFByb3ZpZGVyIHsKLQlwdWJsaWMgV1NETEJpbmRpbmdTZWFyY2hMaXN0UHJvdmlkZXIoRGVmaW5pdGlvbiBkZWZpbml0aW9uKSB7Ci0JCXRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247Ci0JfQotCQotCXB1YmxpYyB2b2lkIHBvcHVsYXRlQ29tcG9uZW50TGlzdChJQ29tcG9uZW50TGlzdCBsaXN0LCBTZWFyY2hTY29wZSBzY29wZSwgSVByb2dyZXNzTW9uaXRvciBwbSkgewotCQkvLyBHcmFiIGV4cGxpY3RseSBkZWZpbmVkIGNvbXBvbmVudHMKLQkJY3JlYXRlV1NETENvbXBvbmVudE9iamVjdHMobGlzdCwgZGVmaW5pdGlvbi5nZXRFQmluZGluZ3MoKSwgSVdTRExTZWFyY2hDb25zdGFudHMuQklORElOR19NRVRBX05BTUUpOwotCi0JCS8vIEZpbGVzIGV4Y2x1ZGVkIGlmIHdlIHNlYXJjaCB3aXRoIHRoZSBzZWFyY2ggZW5naW5lIGxhdGVyCi0JCUhhc2hNYXAgZXhjbHVzaW9ucyA9IG5ldyBIYXNoTWFwKCk7CQotCQlleGNsdXNpb25zLnB1dChkZWZpbml0aW9uLmdldERvY3VtZW50QmFzZVVSSSgpLCBCb29sZWFuLlRSVUUpOwkJCi0JCQotCQkvLyBHcmFiIGRpcmVjdGx5IGltcG9ydGVkIGNvbXBvbmVudHMgYW5kIHVwZGF0ZSB0aGUgZXhjbHVzaW9ucyAnbGlzdCcKLQkJZ2V0SW1wb3J0ZWRDb21wb25lbnRzKGxpc3QsIElXU0RMU2VhcmNoQ29uc3RhbnRzLkJJTkRJTkdfTUVUQV9OQU1FLCBleGNsdXNpb25zKTsKLQotCQlzZWFyY2hPdXRzaWRlQ3VycmVudFJlc291cmNlKGxpc3QsIHNjb3BlLCBJV1NETFNlYXJjaENvbnN0YW50cy5CSU5ESU5HX01FVEFfTkFNRSwgZXhjbHVzaW9ucyk7Ci0JfQotCi0JcHJvdGVjdGVkIExpc3QgZ2V0U2VhcmNoaW5nQ29tcG9uZW50cyhEZWZpbml0aW9uIGltcG9ydERlZmluaXRpb24pIHsKLQkJcmV0dXJuIGltcG9ydERlZmluaXRpb24uZ2V0RUJpbmRpbmdzKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9lZGl0L1dTRExDb21wb25lbnREZXNjcmlwdGlvblByb3ZpZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2VkaXQvV1NETENvbXBvbmVudERlc2NyaXB0aW9uUHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI2NDI0YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2VkaXQvV1NETENvbXBvbmVudERlc2NyaXB0aW9uUHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZWRpdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb3JlLnNlYXJjaC5TZWFyY2hNYXRjaDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvcmUuc2VhcmNoLnBhdHRlcm4uUXVhbGlmaWVkTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLkNvbXBvbmVudFNwZWNpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5zZWFyY2guZGlhbG9ncy5JQ29tcG9uZW50RGVzY3JpcHRpb25Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnNlYXJjaC5JV1NETFNlYXJjaENvbnN0YW50czsKLQotcHVibGljIGNsYXNzIFdTRExDb21wb25lbnREZXNjcmlwdGlvblByb3ZpZGVyIGV4dGVuZHMgTGFiZWxQcm92aWRlciBpbXBsZW1lbnRzIElDb21wb25lbnREZXNjcmlwdGlvblByb3ZpZGVyIHsKLQkgIHByaXZhdGUgc3RhdGljIGZpbmFsIEltYWdlIEJJTkRJTkdfSU1BR0UgPSAgV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEltYWdlKCJpY29ucy9iaW5kaW5nX29iai5naWYiKTsgLy8kTk9OLU5MUy0xJAotCSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgSW1hZ2UgUE9SVFRZUEVfSU1BR0UgPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0SW1hZ2UoImljb25zL3BvcnR0eXBlX29iai5naWYiKTsgLy8kTk9OLU5MUy0xJAotCSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgSW1hZ2UgTUVTU0FHRV9JTUFHRSA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgiaWNvbnMvbWVzc2FnZV9vYmouZ2lmIik7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBib29sZWFuIGlzQXBwbGljYWJsZShPYmplY3QgY29tcG9uZW50KSB7Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0UXVhbGlmaWVyKE9iamVjdCBjb21wb25lbnQpIHsKLQkgICAgU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0JICAgIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBDb21wb25lbnRTcGVjaWZpY2F0aW9uKQotCSAgICB7Ci0JICAgICAgcmVzdWx0ID0gKChDb21wb25lbnRTcGVjaWZpY2F0aW9uKWNvbXBvbmVudCkuZ2V0UXVhbGlmaWVyKCk7Ci0JICAgIH0gIAotCSAgICBlbHNlIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBXU0RMRWxlbWVudCkKLQkgICAgewotCSAgICAgIHJlc3VsdCA9ICgoV1NETEVsZW1lbnQpIGNvbXBvbmVudCkuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLmdldFRhcmdldE5hbWVzcGFjZSgpOyAKLQkgICAgfSAgCi0JICAgIGVsc2UgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIFNlYXJjaE1hdGNoKQotCSAgICB7Ci0JICAgICAgUXVhbGlmaWVkTmFtZSBxdWFsaWZpZWROYW1lID0gZ2V0UXVhbGlmaWVkTmFtZUZvclNlYXJjaE1hdGNoKChTZWFyY2hNYXRjaCljb21wb25lbnQpOwotCSAgICAgIGlmIChxdWFsaWZpZWROYW1lICE9IG51bGwpCi0JICAgICAgeyAgCi0JICAgICAgICByZXN1bHQgPSBxdWFsaWZpZWROYW1lLmdldE5hbWVzcGFjZSgpOwotCSAgICAgIH0gICAgCi0JICAgIH0gIAotCSAgICByZXR1cm4gcmVzdWx0OwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZShPYmplY3QgY29tcG9uZW50KSB7Ci0JICAgIFN0cmluZyByZXN1bHQgPSBudWxsOwotCSAgICBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgQ29tcG9uZW50U3BlY2lmaWNhdGlvbikKLQkgICAgewotCSAgICAgIHJlc3VsdCA9ICgoQ29tcG9uZW50U3BlY2lmaWNhdGlvbiljb21wb25lbnQpLmdldE5hbWUoKTsKLQkgICAgfSAgCi0JICAgIGVsc2UgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIFdTRExFbGVtZW50KQotCSAgICB7Ci0JICAgICAgcmVzdWx0ID0gKChXU0RMRWxlbWVudCljb21wb25lbnQpLmdldEVsZW1lbnQoKS5nZXRBdHRyaWJ1dGUoIm5hbWUiKTsgIC8vJE5PTi1OTFMtMSQKLQkgICAgfSAgCi0JICAgIGVsc2UgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIFNlYXJjaE1hdGNoKQotCSAgICB7Ci0JICAgICAgUXVhbGlmaWVkTmFtZSBxdWFsaWZpZWROYW1lID0gZ2V0UXVhbGlmaWVkTmFtZUZvclNlYXJjaE1hdGNoKChTZWFyY2hNYXRjaCljb21wb25lbnQpOwotCSAgICAgIGlmIChxdWFsaWZpZWROYW1lICE9IG51bGwpCi0JICAgICAgeyAgCi0JICAgICAgICByZXN1bHQgPSBxdWFsaWZpZWROYW1lLmdldExvY2FsTmFtZSgpOwotCSAgICAgIH0gICAgCi0JICAgIH0gICAgICAKLQkgICAgcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwdWJsaWMgSW1hZ2UgZ2V0RmlsZUljb24oT2JqZWN0IGNvbXBvbmVudCkgewotCQlyZXR1cm4gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEltYWdlKCJpY29ucy93c2RsX2ZpbGVfb2JqLmdpZiIpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIElGaWxlIGdldEZpbGUoT2JqZWN0IGNvbXBvbmVudCkgewotCSAgICBJRmlsZSByZXN1bHQgPSBudWxsOwotCSAgICBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgQ29tcG9uZW50U3BlY2lmaWNhdGlvbikKLQkgICAgewotCSAgICAgIHJlc3VsdCA9ICgoQ29tcG9uZW50U3BlY2lmaWNhdGlvbiljb21wb25lbnQpLmdldEZpbGUoKTsKLQkgICAgfSAgCi0JICAgIGVsc2UgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIFNlYXJjaE1hdGNoKQotCSAgICB7Ci0JICAgICAgcmVzdWx0ID0gKChTZWFyY2hNYXRjaCljb21wb25lbnQpLmdldEZpbGUoKTsKLQkgICAgfSAgCi0JICAgIGVsc2UgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIFdTRExFbGVtZW50KQotCSAgICB7Ci0JICAgICAgV1NETEVsZW1lbnQgY29uY3JldGVDb21wb25lbnQgPSAoV1NETEVsZW1lbnQpIGNvbXBvbmVudDsKLQkgICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBjb25jcmV0ZUNvbXBvbmVudC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0JICAgICAgaWYgKGRlZmluaXRpb24gIT0gbnVsbCkKLQkgICAgICB7Ci0JICAgICAgICAvLyBUT0RPIChjcykgcmV2aXNpdCBhbmQgdGVzdCBtb3JlCi0JICAgICAgICAvLwotCSAgICAgICAgU3RyaW5nIGxvY2F0aW9uID0gZGVmaW5pdGlvbi5nZXRMb2NhdGlvbigpOwotCSAgICAgICAgU3RyaW5nIHBsYXRmb3JtUmVzb3VyY2UgPSAicGxhdGZvcm06L3Jlc291cmNlIjsgLy8kTk9OLU5MUy0xJAotCSAgICAgICAgaWYgKGxvY2F0aW9uICE9IG51bGwgJiYgbG9jYXRpb24uc3RhcnRzV2l0aChwbGF0Zm9ybVJlc291cmNlKSkKLQkgICAgICAgIHsKLQkgICAgICAgICAgUGF0aCBwYXRoID0gbmV3IFBhdGgobG9jYXRpb24uc3Vic3RyaW5nKHBsYXRmb3JtUmVzb3VyY2UubGVuZ3RoKCkpKTsKLQkgICAgICAgICAgcmVzdWx0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKHBhdGgpOwotCSAgICAgICAgfQotCSAgICAgIH0gIAotCSAgICB9Ci0JICAgIHJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHVibGljIElMYWJlbFByb3ZpZGVyIGdldExhYmVsUHJvdmlkZXIoKSB7Ci0JCXJldHVybiB0aGlzOwotCX0KLQkKLQkgIHB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3QgZWxlbWVudCkgewotCSAgICBTdHJpbmcgcmVzdWx0ID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkgICAgU3RyaW5nIG5hbWUgPSBnZXROYW1lKGVsZW1lbnQpOwotCSAgICBpZiAobmFtZSAhPSBudWxsKSB7Ci0JICAgICAgcmVzdWx0ICs9IG5hbWU7Ci0JICAgIH0KLQkgICAgcmV0dXJuIHJlc3VsdDsKLQkgIH0gCi0JICAKLQkgIHB1YmxpYyBJbWFnZSBnZXRJbWFnZShPYmplY3QgY29tcG9uZW50KQotCSAgewotCSAgICBJbWFnZSByZXN1bHQgPSBudWxsOwotCSAgICBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgQ29tcG9uZW50U3BlY2lmaWNhdGlvbikKLQkgICAgewotCSAgICAJUXVhbGlmaWVkTmFtZSBxdWFsaWZpZWROYW1lID0gKChDb21wb25lbnRTcGVjaWZpY2F0aW9uKSBjb21wb25lbnQpLmdldE1ldGFOYW1lKCk7Ci0JICAgIAlpZiAoIHF1YWxpZmllZE5hbWUgIT0gbnVsbCApewotCSAgICAJCWlmICggcXVhbGlmaWVkTmFtZS5lcXVhbHMoSVdTRExTZWFyY2hDb25zdGFudHMuQklORElOR19NRVRBX05BTUUpKQotCSAgICAJCQlyZXN1bHQgPSBCSU5ESU5HX0lNQUdFOwotCSAgICAJCWVsc2UgaWYgKCBxdWFsaWZpZWROYW1lLmVxdWFscyhJV1NETFNlYXJjaENvbnN0YW50cy5QT1JUX1RZUEVfTUVUQV9OQU1FKSkKLQkgICAgCQkJcmVzdWx0ID0gUE9SVFRZUEVfSU1BR0U7Ci0JICAgIAkJZWxzZSBpZiAoIHF1YWxpZmllZE5hbWUuZXF1YWxzKElXU0RMU2VhcmNoQ29uc3RhbnRzLk1FU1NBR0VfTUVUQV9OQU1FKSkKLQkgICAgCQkJcmVzdWx0ID0gTUVTU0FHRV9JTUFHRTsKLQotCSAgICAJfQotCSAgICB9Ci0JICAgIGVsc2UgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIFNlYXJjaE1hdGNoKQotCSAgICB7Ci0JICAgICAgU2VhcmNoTWF0Y2ggc2VhcmNoTWF0Y2ggPSAoU2VhcmNoTWF0Y2gpY29tcG9uZW50OwotCSAgICAgIFF1YWxpZmllZE5hbWUgcXVhbGlmaWVkTmFtZSA9IChRdWFsaWZpZWROYW1lKXNlYXJjaE1hdGNoLm1hcC5nZXQoIm1ldGFOYW1lIik7IC8vJE5PTi1OTFMtMSQKLQkgICAgICBpZiAoIHF1YWxpZmllZE5hbWUgIT0gbnVsbCApewotCSAgICAJICBpZiAoIHF1YWxpZmllZE5hbWUuZXF1YWxzKElXU0RMU2VhcmNoQ29uc3RhbnRzLkJJTkRJTkdfTUVUQV9OQU1FKSkKLQkgICAgCQkgIHJlc3VsdCA9IEJJTkRJTkdfSU1BR0U7Ci0JICAgIAkgIGVsc2UgaWYgKCBxdWFsaWZpZWROYW1lLmVxdWFscyhJV1NETFNlYXJjaENvbnN0YW50cy5QT1JUX1RZUEVfTUVUQV9OQU1FKSkKLQkgICAgCQkgIHJlc3VsdCA9IFBPUlRUWVBFX0lNQUdFOwotCSAgICAJCWVsc2UgaWYgKCBxdWFsaWZpZWROYW1lLmVxdWFscyhJV1NETFNlYXJjaENvbnN0YW50cy5NRVNTQUdFX01FVEFfTkFNRSkpCi0JICAgIAkJCXJlc3VsdCA9IE1FU1NBR0VfSU1BR0U7Ci0KLQkgICAgICB9Ci0JICAgIH0gICAgICAKLQkgICAgZWxzZSBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgQmluZGluZykKLQkgICAgICByZXN1bHQgPSBCSU5ESU5HX0lNQUdFOyAgICAgIAotCSAgICBlbHNlIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBQb3J0VHlwZSkKLQkgICAgICByZXN1bHQgPSBQT1JUVFlQRV9JTUFHRTsKLQkgICAgZWxzZSBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgTWVzc2FnZSkKLQkJICAgICAgcmVzdWx0ID0gTUVTU0FHRV9JTUFHRTsKLQotCSAgICByZXR1cm4gcmVzdWx0OwotCSAgfQotCQotCXByaXZhdGUgUXVhbGlmaWVkTmFtZSBnZXRRdWFsaWZpZWROYW1lRm9yU2VhcmNoTWF0Y2goU2VhcmNoTWF0Y2ggbWF0Y2gpIHsKLQkJUXVhbGlmaWVkTmFtZSBxdWFsaWZpZWROYW1lID0gbnVsbDsKLQkJT2JqZWN0IG8gPSBtYXRjaC5tYXAuZ2V0KCJuYW1lIik7IC8vJE5PTi1OTFMtMSQKLQkJaWYgKG8gIT0gbnVsbCAmJiBvIGluc3RhbmNlb2YgUXVhbGlmaWVkTmFtZSkKLQkJeyAgCi0JCQlxdWFsaWZpZWROYW1lID0gKFF1YWxpZmllZE5hbWUpbzsKLQkJfSAgICAgIAotCQlyZXR1cm4gcXVhbGlmaWVkTmFtZTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2VkaXQvV1NETENvbXBvbmVudEZpbmRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9lZGl0L1dTRExDb21wb25lbnRGaW5kZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWFjYjMxMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2VkaXQvV1NETENvbXBvbmVudEZpbmRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmVkaXQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29yZS5zZWFyY2guU2VhcmNoRW5naW5lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29yZS5zZWFyY2guU2VhcmNoTWF0Y2g7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb3JlLnNlYXJjaC5wYXR0ZXJuLlF1YWxpZmllZE5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb3JlLnNlYXJjaC5wYXR0ZXJuLlNlYXJjaFBhdHRlcm47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb3JlLnNlYXJjaC5zY29wZS5TZWFyY2hTY29wZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvcmUuc2VhcmNoLnV0aWwuQ29sbGVjdGluZ1NlYXJjaFJlcXVlc3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLkNvbXBvbmVudFNwZWNpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnNlYXJjaC5YTUxDb21wb25lbnREZWNsYXJhdGlvblBhdHRlcm47Ci0KLXB1YmxpYyBjbGFzcyBXU0RMQ29tcG9uZW50RmluZGVyIHsKLQlRdWFsaWZpZWROYW1lIG1ldGFOYW1lOwotICAgIHB1YmxpYyBXU0RMQ29tcG9uZW50RmluZGVyKFF1YWxpZmllZE5hbWUgbWV0YU5hbWUpIHsKLSAgICAJdGhpcy5tZXRhTmFtZSA9IG1ldGFOYW1lOwotICAgIH0KLSAgICAKLSAgICAKLSAgICBwcm90ZWN0ZWQgdm9pZCBmaW5kQ29tcG9uZW50cyhTZWFyY2hFbmdpbmUgc2VhcmNoRW5naW5lLCBMaXN0IGxpc3QsIFNlYXJjaFNjb3BlIHNlYXJjaFNjb3BlKQotICAgIHsKLSAgICAgIHRyeSB7Ci0gICAgICAgICAgQ29sbGVjdGluZ1NlYXJjaFJlcXVlc3RvciByZXF1ZXN0b3IgPSBuZXcgQ29sbGVjdGluZ1NlYXJjaFJlcXVlc3RvcigpOwotICAgICAgICAgIAotICAgICAgICAgIFhNTENvbXBvbmVudERlY2xhcmF0aW9uUGF0dGVybiBwYXR0ZXJuID0gbmV3IFhNTENvbXBvbmVudERlY2xhcmF0aW9uUGF0dGVybihuZXcgUXVhbGlmaWVkTmFtZSgiKiIsICIqIiksIG1ldGFOYW1lLCBTZWFyY2hQYXR0ZXJuLlJfUEFUVEVSTl9NQVRDSCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgICAgIAotICAgICAgICAgIC8vIFRPRE8gKGNzKSByZXRoaW5rIHRoZSBjb21tZW50ZWQgb3V0IGNvZGUgYmVsb3cuICBJcyB0aGVyZSBzb21lIHJlYXNvbiBmb3IgbmFycm93aW5nIHRvIGxpc3Qgb2Ygc2VhcmNoIHBhcnRpY3BhbnRzPwotICAgICAgICAgIC8vIEl0IHNlZW1zIHRoZSBvbmx5IGJlbmVmaXQgbWF5IGJlIHRvIGZpbHRlciBvdXIgeHNkIGNvbXBvbmVudCBkZWNsYXJhdGlvbnMgdGhhdCBhcmVuJ3QgZGVmaW5lZAotICAgICAgICAgIC8vIGluIHN0YW5kIGFsb25lIHdzZGwgZG9jdW1lbnRzLiAgUGVyaGFwcyBpdCdzIGJlc3QgdG8gZG8gdGhpcyB3aXRoIGFuIGFkZGl0aW9uYWwgcHJvcGVydHkgYXJnIG9uIHRoZQotICAgICAgICAgIC8vIGRlY2xhcmF0aW9uIHBhdHRlcm4gb3IgcGVyaGFwcyBzaW1wbHkgZG9pbmcgc29tZSAncG9zdCcgZmlsdGVyaW5nLgotICAgICAgICAgIC8vCi0gICAgICAgICAgLy9TdHJpbmcgcGFydGljaXBhbnRJZCA9IG1ldGFOYW1lLmdldE5hbWVzcGFjZSgpLmVxdWFscyhXU0RMQ29uc3RhbnRzLldTRExfTkFNRVNQQUNFX1VSSSkgPwotICAgICAgICAgIC8vICAgICJvcmcuZWNsaXBzZS53c3Qud3NkbC5zZWFyY2guV1NETFNlYXJjaFBhcnRpY2lwYW50IiA6Ci0gICAgICAgICAgLy8gICAgIm9yZy5lY2xpcHNlLndzdC54c2Quc2VhcmNoLlhTRFNlYXJjaFBhcnRpY2lwYW50IjsgICAgICAgIAkJICAKLSAgICAgICAgICAvL1NlYXJjaFBhcnRpY2lwYW50IHBhcnRpY3BhbnQgPSBTZWFyY2hQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFNlYXJjaFBhcnRpY2lwYW50KHBhcnRpY2lwYW50SWQpOyAgICAgICAgIAotICAgICAgICAgIC8vU2VhcmNoUGFydGljaXBhbnRbXSBwYXJ0aWNpcGFudHMgPSB7IHBhcnRpY3BhbnQgfTsgICAgIAotICAgICAgICAgIAotICAgICAgICAgIC8vIFRPRE8gKGNzKSBJJ20gYmV0dGluZyB3ZSdsbCBuZWVkIHRvIHByb3ZpZGUgc29tZSBob29rIGhlcmUgdG8gYWxsb3cgZXh0ZW5kZXJzIHRvIGNvbmZpZ3VyZQotICAgICAgICAgIC8vIHRoZSBzZWFyY2ggb3B0aW9ucy4gIEN1cnJlbnRseSB3ZSBqdXN0IHBhc3MgaW4gbnVsbC4KLSAgICAgICAgICBzZWFyY2hFbmdpbmUuc2VhcmNoKHBhdHRlcm4sIHJlcXVlc3Rvciwgc2VhcmNoU2NvcGUsIG51bGwsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotICAgICAgICAgIAotICAgICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IHJlcXVlc3Rvci5nZXRSZXN1bHRzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBTZWFyY2hNYXRjaCBtYXRjaCA9IChTZWFyY2hNYXRjaClpLm5leHQoKTsKLSAgICAgICAgICAgIENvbXBvbmVudFNwZWNpZmljYXRpb24gc3BlYyA9IG5ldyBDb21wb25lbnRTcGVjaWZpY2F0aW9uKCk7Ci0gICAgICAgICAgICBzcGVjLnNldE1ldGFOYW1lKG1ldGFOYW1lKTsKLSAgICAgICAgICAgIHNwZWMuc2V0RmlsZShtYXRjaC5nZXRGaWxlKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBPYmplY3QgbyA9IG1hdGNoLm1hcC5nZXQoIm5hbWUiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgaWYgKG8gIT0gbnVsbCAmJiBvIGluc3RhbmNlb2YgUXVhbGlmaWVkTmFtZSkKLSAgICAgICAgICAgIHsgIAotICAgICAgICAgICAgICBRdWFsaWZpZWROYW1lIHF1YWxpZmllZE5hbWUgPSAoUXVhbGlmaWVkTmFtZSlvOwotICAgICAgICAgICAgICBpZiAocXVhbGlmaWVkTmFtZS5nZXRMb2NhbE5hbWUoKSAhPSBudWxsKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3BlYy5zZXROYW1lKHF1YWxpZmllZE5hbWUuZ2V0TG9jYWxOYW1lKCkpOwotICAgICAgICAgICAgICAgIHNwZWMuc2V0UXVhbGlmaWVyKHF1YWxpZmllZE5hbWUuZ2V0TmFtZXNwYWNlKCkpOwotICAgICAgICAgICAgICAgIGxpc3QuYWRkKHNwZWMpOwotICAgICAgICAgICAgICB9ICAKLSAgICAgICAgICAgIH0gIAotICAgICAgICAgIH0gIAotICAgICAgfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgLy9zdGF0dXMuYWRkKGUuZ2V0U3RhdHVzKCkpOwotICAgICAgfSAgICAgIAotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgTGlzdCBnZXRXb3JrYmVuY2hSZXNvdXJjZUNvbXBvbmVudHMoU2VhcmNoU2NvcGUgc2NvcGUpIHsKLQotICAgICAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgIFNlYXJjaEVuZ2luZSBzZWFyY2hFbmdpbmUgPSBuZXcgU2VhcmNoRW5naW5lKCk7Ci0gICAgICAgIGZpbmRDb21wb25lbnRzKHNlYXJjaEVuZ2luZSwgbGlzdCwgc2NvcGUpOyAgICAKLSAgICAgICAgcmV0dXJuIGxpc3Q7ICAgICAgIAotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZWRpdC9XU0RMSW50ZXJmYWNlU2VhcmNoTGlzdFByb3ZpZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2VkaXQvV1NETEludGVyZmFjZVNlYXJjaExpc3RQcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmM2U4MjY4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZWRpdC9XU0RMSW50ZXJmYWNlU2VhcmNoTGlzdFByb3ZpZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZWRpdDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb3JlLnNlYXJjaC5zY29wZS5TZWFyY2hTY29wZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLklDb21wb25lbnRMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc2VhcmNoLklXU0RMU2VhcmNoQ29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgV1NETEludGVyZmFjZVNlYXJjaExpc3RQcm92aWRlciBleHRlbmRzIFdTRExCYXNlU2VhcmNoTGlzdFByb3ZpZGVyIHsKLQlwdWJsaWMgV1NETEludGVyZmFjZVNlYXJjaExpc3RQcm92aWRlcihEZWZpbml0aW9uIGRlZmluaXRpb24pIHsKLQkJdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjsKLQl9Ci0JCi0JcHVibGljIHZvaWQgcG9wdWxhdGVDb21wb25lbnRMaXN0KElDb21wb25lbnRMaXN0IGxpc3QsIFNlYXJjaFNjb3BlIHNjb3BlLCBJUHJvZ3Jlc3NNb25pdG9yIHBtKSB7Ci0JCS8vIEdyYWIgZXhwbGljdGx5IGRlZmluZWQgY29tcG9uZW50cwotCQljcmVhdGVXU0RMQ29tcG9uZW50T2JqZWN0cyhsaXN0LCBkZWZpbml0aW9uLmdldEVQb3J0VHlwZXMoKSwgSVdTRExTZWFyY2hDb25zdGFudHMuUE9SVF9UWVBFX01FVEFfTkFNRSk7Ci0KLQkJLy8gRmlsZXMgZXhjbHVkZWQgaWYgd2Ugc2VhcmNoIHdpdGggdGhlIHNlYXJjaCBlbmdpbmUgbGF0ZXIKLQkJSGFzaE1hcCBleGNsdXNpb25zID0gbmV3IEhhc2hNYXAoKTsJCi0JCWV4Y2x1c2lvbnMucHV0KGRlZmluaXRpb24uZ2V0RG9jdW1lbnRCYXNlVVJJKCksIEJvb2xlYW4uVFJVRSk7CQkKLQkJCi0JCS8vIEdyYWIgZGlyZWN0bHkgaW1wb3J0ZWQgY29tcG9uZW50cyBhbmQgdXBkYXRlIHRoZSBleGNsdXNpb25zICdsaXN0JwotCQlnZXRJbXBvcnRlZENvbXBvbmVudHMobGlzdCwgSVdTRExTZWFyY2hDb25zdGFudHMuUE9SVF9UWVBFX01FVEFfTkFNRSwgZXhjbHVzaW9ucyk7Ci0KLQkJc2VhcmNoT3V0c2lkZUN1cnJlbnRSZXNvdXJjZShsaXN0LCBzY29wZSwgSVdTRExTZWFyY2hDb25zdGFudHMuUE9SVF9UWVBFX01FVEFfTkFNRSwgZXhjbHVzaW9ucyk7Ci0JfQotCi0JcHJvdGVjdGVkIExpc3QgZ2V0U2VhcmNoaW5nQ29tcG9uZW50cyhEZWZpbml0aW9uIGltcG9ydERlZmluaXRpb24pIHsKLQkJcmV0dXJuIGltcG9ydERlZmluaXRpb24uZ2V0RVBvcnRUeXBlcygpOwotCX0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2VkaXQvV1NETE1lc3NhZ2VTZWFyY2hMaXN0UHJvdmlkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZWRpdC9XU0RMTWVzc2FnZVNlYXJjaExpc3RQcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjhkNGVjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZWRpdC9XU0RMTWVzc2FnZVNlYXJjaExpc3RQcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmVkaXQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29yZS5zZWFyY2guc2NvcGUuU2VhcmNoU2NvcGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5zZWFyY2guZGlhbG9ncy5JQ29tcG9uZW50TGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnNlYXJjaC5JV1NETFNlYXJjaENvbnN0YW50czsKLQotcHVibGljIGNsYXNzIFdTRExNZXNzYWdlU2VhcmNoTGlzdFByb3ZpZGVyIGV4dGVuZHMgV1NETEJhc2VTZWFyY2hMaXN0UHJvdmlkZXIgewotCXB1YmxpYyBXU0RMTWVzc2FnZVNlYXJjaExpc3RQcm92aWRlcihEZWZpbml0aW9uIGRlZmluaXRpb24pIHsKLQkJdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjsKLQl9Ci0JCi0JcHVibGljIHZvaWQgcG9wdWxhdGVDb21wb25lbnRMaXN0KElDb21wb25lbnRMaXN0IGxpc3QsIFNlYXJjaFNjb3BlIHNjb3BlLCBJUHJvZ3Jlc3NNb25pdG9yIHBtKSB7Ci0JCS8vIEdyYWIgZXhwbGljdGx5IGRlZmluZWQgY29tcG9uZW50cwotCQljcmVhdGVXU0RMQ29tcG9uZW50T2JqZWN0cyhsaXN0LCBkZWZpbml0aW9uLmdldEVNZXNzYWdlcygpLCBJV1NETFNlYXJjaENvbnN0YW50cy5NRVNTQUdFX01FVEFfTkFNRSk7Ci0KLQkJLy8gRmlsZXMgZXhjbHVkZWQgaWYgd2Ugc2VhcmNoIHdpdGggdGhlIHNlYXJjaCBlbmdpbmUgbGF0ZXIKLQkJSGFzaE1hcCBleGNsdXNpb25zID0gbmV3IEhhc2hNYXAoKTsJCi0JCWV4Y2x1c2lvbnMucHV0KGRlZmluaXRpb24uZ2V0RG9jdW1lbnRCYXNlVVJJKCksIEJvb2xlYW4uVFJVRSk7CQkKLQkJCi0JCS8vIEdyYWIgZGlyZWN0bHkgaW1wb3J0ZWQgY29tcG9uZW50cyBhbmQgdXBkYXRlIHRoZSBleGNsdXNpb25zICdsaXN0JwotCQlnZXRJbXBvcnRlZENvbXBvbmVudHMobGlzdCwgSVdTRExTZWFyY2hDb25zdGFudHMuTUVTU0FHRV9NRVRBX05BTUUsIGV4Y2x1c2lvbnMpOwkJCi0JCQotCQlzZWFyY2hPdXRzaWRlQ3VycmVudFJlc291cmNlKGxpc3QsIHNjb3BlLCBJV1NETFNlYXJjaENvbnN0YW50cy5NRVNTQUdFX01FVEFfTkFNRSwgZXhjbHVzaW9ucyk7Ci0JfQotCi0JcHJvdGVjdGVkIExpc3QgZ2V0U2VhcmNoaW5nQ29tcG9uZW50cyhEZWZpbml0aW9uIGltcG9ydERlZmluaXRpb24pIHsKLQkJcmV0dXJuIGltcG9ydERlZmluaXRpb24uZ2V0RU1lc3NhZ2VzKCk7Ci0JfQkKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2VkaXQvV1NETFhTREVsZW1lbnRSZWZlcmVuY2VFZGl0TWFuYWdlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9lZGl0L1dTRExYU0RFbGVtZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQ4M2JiNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2VkaXQvV1NETFhTREVsZW1lbnRSZWZlcmVuY2VFZGl0TWFuYWdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmVkaXQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUZpbGVFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLkNvbXBvbmVudFNwZWNpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkWFNERWxlbWVudERlY2xhcmF0aW9uQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLldTRExTZXRDb21wb25lbnRIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5lZGl0b3IuWFNERWxlbWVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuc2VhcmNoLklYU0RTZWFyY2hDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLQotcHVibGljIGNsYXNzIFdTRExYU0RFbGVtZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgZXh0ZW5kcwlYU0RFbGVtZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgewotCXB1YmxpYyBXU0RMWFNERWxlbWVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKElGaWxlIGN1cnJlbnRGaWxlLCBYU0RTY2hlbWFbXSBzY2hlbWFzKSB7Ci0JCXN1cGVyKGN1cnJlbnRGaWxlLCBzY2hlbWFzKTsKLQl9Ci0JCi0JcHVibGljIFdTRExYU0RFbGVtZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIoSUZpbGUgY3VycmVudEZpbGUsIFhTRFNjaGVtYVtdIHNjaGVtYXMsIElEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikgewotCQlzdXBlcihjdXJyZW50RmlsZSwgbnVsbCk7Ci0JCWlmIChzY2hlbWFzID09IG51bGwgfHwgc2NoZW1hcy5sZW5ndGggPT0gMCkgewotCQkJc2V0U2NoZW1hcyhnZXRJbmxpbmVTY2hlbWFzKGRlc2NyaXB0aW9uKSk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCBtb2RpZnlDb21wb25lbnRSZWZlcmVuY2UoT2JqZWN0IHJlZmVyZW5jaW5nT2JqZWN0LCBDb21wb25lbnRTcGVjaWZpY2F0aW9uIGNvbXBvbmVudCkgewotCQlpZiAocmVmZXJlbmNpbmdPYmplY3QgaW5zdGFuY2VvZiBBZGFwdGVyKSB7Ci0JCQlBZGFwdGVyIGFkYXB0ZXIgPSAoQWRhcHRlcikgcmVmZXJlbmNpbmdPYmplY3Q7Ci0JCQlyZWZlcmVuY2luZ09iamVjdCA9IGFkYXB0ZXIuZ2V0VGFyZ2V0KCk7Ci0JCX0KLQkJCi0JCWlmIChyZWZlcmVuY2luZ09iamVjdCBpbnN0YW5jZW9mIFBhcnQpIHsKLQkJCVBhcnQgcGFydCA9IChQYXJ0KSByZWZlcmVuY2luZ09iamVjdDsKLQkJCUlGaWxlIGZpbGUgPSBudWxsOwotCQkJaWYgKEFTREVkaXRvclBsdWdpbi5nZXRBY3RpdmVFZGl0b3IoKS5nZXRFZGl0b3JJbnB1dCgpIGluc3RhbmNlb2YgSUZpbGVFZGl0b3JJbnB1dCkgewotCQkJCWZpbGUgPSAoKElGaWxlRWRpdG9ySW5wdXQpIEFTREVkaXRvclBsdWdpbi5nZXRBY3RpdmVFZGl0b3IoKS5nZXRFZGl0b3JJbnB1dCgpKS5nZXRGaWxlKCk7Ci0JCQl9Ci0JCQkKLQkJCWlmIChjb21wb25lbnQuaXNOZXcoKSkgeyAgCi0JCQkJaWYgKGNvbXBvbmVudC5nZXRNZXRhTmFtZSgpID09IElYU0RTZWFyY2hDb25zdGFudHMuRUxFTUVOVF9NRVRBX05BTUUpIHsKLQkJCQkJQWRkWFNERWxlbWVudERlY2xhcmF0aW9uQ29tbWFuZCBjb21tYW5kID0gbmV3IEFkZFhTREVsZW1lbnREZWNsYXJhdGlvbkNvbW1hbmQocGFydC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCksIGNvbXBvbmVudC5nZXROYW1lKCkpOwotCQkJCQljb21tYW5kLnJ1bigpOwotCQkJCQlTdHJpbmcgdG5zID0gY29tbWFuZC5nZXRYU0RFbGVtZW50KCkuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0JCQkJCWNvbXBvbmVudC5zZXRRdWFsaWZpZXIodG5zKTsKLQkJCQl9Ci0JCQl9Ci0JCQkKLQkJCVdTRExTZXRDb21wb25lbnRIZWxwZXIgaGVscGVyID0gbmV3IFdTRExTZXRDb21wb25lbnRIZWxwZXIoZmlsZSwgcGFydC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotCQkJaGVscGVyLnNldFhTREVsZW1lbnRDb21wb25lbnQocGFydCwgY29tcG9uZW50KTsKLQkJfQotCX0KLQotCXB1YmxpYyBDb21wb25lbnRTcGVjaWZpY2F0aW9uW10gZ2V0UXVpY2tQaWNrcygpIHsKLS8vCQlFbGVtZW50Q29tcG9uZW50TGlzdCBsaXN0ID0gbmV3IEVsZW1lbnRDb21wb25lbnRMaXN0KCk7Ci0vLwkJCi0vLwkJaWYgKEFTREVkaXRvclBsdWdpbi5nZXRBY3RpdmVFZGl0b3IoKS5nZXRFZGl0b3JJbnB1dCgpIGluc3RhbmNlb2YgSUZpbGVFZGl0b3JJbnB1dCkgewotLy8JCQlJRmlsZSBmaWxlID0gKChJRmlsZUVkaXRvcklucHV0KSBBU0RFZGl0b3JQbHVnaW4uZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0RWRpdG9ySW5wdXQoKSkuZ2V0RmlsZSgpOwotLy8JCQlYU0RFbGVtZW50c1NlYXJjaExpc3RQcm92aWRlciBwcm92aWRlciA9IG5ldyBYU0RFbGVtZW50c1NlYXJjaExpc3RQcm92aWRlcihmaWxlLCBzY2hlbWFzKTsKLS8vCQkJcHJvdmlkZXIucG9wdWxhdGVDb21wb25lbnRMaXN0KGxpc3QsIG51bGwsIG51bGwpOwotLy8JCX0KLS8vCi0vLwkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBzcGVjc1tdID0gbmV3IENvbXBvbmVudFNwZWNpZmljYXRpb25bbGlzdC5zaXplKCldOwotLy8JCWZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBsaXN0LnNpemUoKTsgaW5kZXgrKykgewotLy8JCQlzcGVjc1tpbmRleF0gPSAoQ29tcG9uZW50U3BlY2lmaWNhdGlvbikgbGlzdC5nZXQoaW5kZXgpOwotLy8JCX0KLQkJCi0JCXJldHVybiBuZXcgQ29tcG9uZW50U3BlY2lmaWNhdGlvblswXTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0U2NoZW1hcyhYU0RTY2hlbWFbXSBzY2hlbWFzKSB7Ci0JCXRoaXMuc2NoZW1hcyA9IHNjaGVtYXM7Ci0JfQotCQotCXByaXZhdGUgWFNEU2NoZW1hW10gZ2V0SW5saW5lU2NoZW1hcyhJRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pIHsKLQkJTGlzdCB0eXBlcyA9IGRlc2NyaXB0aW9uLmdldFR5cGVzKCk7Ci0JCVhTRFNjaGVtYVtdIHNjaGVtYXMgPSBuZXcgWFNEU2NoZW1hW3R5cGVzLnNpemUoKV07Ci0JCWZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCB0eXBlcy5zaXplKCk7IGluZGV4KyspIHsKLQkJCVcxMVR5cGUgdHlwZSA9IChXMTFUeXBlKSB0eXBlcy5nZXQoaW5kZXgpOwotCQkJc2NoZW1hc1tpbmRleF0gPSAoWFNEU2NoZW1hKSB0eXBlLmdldFRhcmdldCgpOwotCQl9Ci0JCQotCQlyZXR1cm4gc2NoZW1hczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2VkaXQvV1NETFhTRFR5cGVSZWZlcmVuY2VFZGl0TWFuYWdlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9lZGl0L1dTRExYU0RUeXBlUmVmZXJlbmNlRWRpdE1hbmFnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjIwZTUzMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2VkaXQvV1NETFhTRFR5cGVSZWZlcmVuY2VFZGl0TWFuYWdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5lZGl0OwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklGaWxlRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5zZWFyY2guZGlhbG9ncy5Db21wb25lbnRTcGVjaWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSURlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZFhTRFR5cGVEZWZpbml0aW9uQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLldTRExTZXRDb21wb25lbnRIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5JQ29tcG9uZW50RGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuZGlhbG9ncy5OZXdUeXBlRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuZWRpdG9yLlhTRFR5cGVSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLnNlYXJjaC5JWFNEU2VhcmNoQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RBdHRyaWJ1dGVVc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotCi1wdWJsaWMgY2xhc3MgV1NETFhTRFR5cGVSZWZlcmVuY2VFZGl0TWFuYWdlciBleHRlbmRzIFhTRFR5cGVSZWZlcmVuY2VFZGl0TWFuYWdlciB7Ci0JCi0JcHVibGljIFdTRExYU0RUeXBlUmVmZXJlbmNlRWRpdE1hbmFnZXIoSUZpbGUgY3VycmVudEZpbGUsIFhTRFNjaGVtYVtdIHNjaGVtYXMpIHsKLQkJc3VwZXIoY3VycmVudEZpbGUsIHNjaGVtYXMpOwotCX0KLQkKLQlwdWJsaWMgV1NETFhTRFR5cGVSZWZlcmVuY2VFZGl0TWFuYWdlcihJRmlsZSBjdXJyZW50RmlsZSwgWFNEU2NoZW1hW10gc2NoZW1hcywgSURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKSB7Ci0JCXN1cGVyKGN1cnJlbnRGaWxlLCBudWxsKTsKLQkJaWYgKHNjaGVtYXMgPT0gbnVsbCB8fCBzY2hlbWFzLmxlbmd0aCA9PSAwKSB7Ci0JCQlzZXRTY2hlbWFzKGdldElubGluZVNjaGVtYXMoZGVzY3JpcHRpb24pKTsKLQkJfQotCX0KLQkKLQlwdWJsaWMgSUNvbXBvbmVudERpYWxvZyBnZXROZXdEaWFsb2coKQotCXsKLQkJaWYgKHNjaGVtYXMubGVuZ3RoID4gMCkgewotCQkJTmV3VHlwZURpYWxvZyBuZXdUeXBlRGlhbG9nID0gbmV3IE5ld1R5cGVEaWFsb2coc2NoZW1hc1swXSk7Ci0JCQluZXdUeXBlRGlhbG9nLmFsbG93QW5vbnltb3VzVHlwZShmYWxzZSk7Ci0JCQlyZXR1cm4gbmV3VHlwZURpYWxvZzsKLQkJfQotCQllbHNlIHsKLQkJCU5ld1R5cGVEaWFsb2cgbmV3VHlwZURpYWxvZyA9IG5ldyBOZXdUeXBlRGlhbG9nKCk7Ci0JCQluZXdUeXBlRGlhbG9nLmFsbG93QW5vbnltb3VzVHlwZShmYWxzZSk7Ci0JCQlyZXR1cm4gbmV3VHlwZURpYWxvZzsKLQkJfQotCX0JCi0KLQlwdWJsaWMgdm9pZCBtb2RpZnlDb21wb25lbnRSZWZlcmVuY2UoT2JqZWN0IHJlZmVyZW5jaW5nT2JqZWN0LCBDb21wb25lbnRTcGVjaWZpY2F0aW9uIGNvbXBvbmVudCkgewotCQlpZiAocmVmZXJlbmNpbmdPYmplY3QgaW5zdGFuY2VvZiBBZGFwdGVyKSB7Ci0JCQlBZGFwdGVyIGFkYXB0ZXIgPSAoQWRhcHRlcikgcmVmZXJlbmNpbmdPYmplY3Q7Ci0JCQlyZWZlcmVuY2luZ09iamVjdCA9IGFkYXB0ZXIuZ2V0VGFyZ2V0KCk7Ci0JCX0KLQkJCi0JCWlmIChyZWZlcmVuY2luZ09iamVjdCBpbnN0YW5jZW9mIFBhcnQpIHsKLQkJCVBhcnQgcGFydCA9IChQYXJ0KSByZWZlcmVuY2luZ09iamVjdDsKLQkJCUlGaWxlIGZpbGUgPSBudWxsOwotCQkJaWYgKEFTREVkaXRvclBsdWdpbi5nZXRBY3RpdmVFZGl0b3IoKS5nZXRFZGl0b3JJbnB1dCgpIGluc3RhbmNlb2YgSUZpbGVFZGl0b3JJbnB1dCkgewotCQkJCWZpbGUgPSAoKElGaWxlRWRpdG9ySW5wdXQpIEFTREVkaXRvclBsdWdpbi5nZXRBY3RpdmVFZGl0b3IoKS5nZXRFZGl0b3JJbnB1dCgpKS5nZXRGaWxlKCk7Ci0JCQl9Ci0JCQkKLQkJCWlmIChjb21wb25lbnQuaXNOZXcoKSkgeyAgCi0JCQkJQWRkWFNEVHlwZURlZmluaXRpb25Db21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkWFNEVHlwZURlZmluaXRpb25Db21tYW5kKHBhcnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLCBjb21wb25lbnQuZ2V0TmFtZSgpKTsKLQkJCQlpZiAoY29tcG9uZW50LmdldE1ldGFOYW1lKCkgPT0gSVhTRFNlYXJjaENvbnN0YW50cy5DT01QTEVYX1RZUEVfTUVUQV9OQU1FKSB7Ci0JCQkJCWNvbW1hbmQuaXNDb21wbGV4VHlwZSh0cnVlKTsKLQkJCQl9Ci0JCQkJZWxzZSB7Ci0JCQkJCWNvbW1hbmQuaXNDb21wbGV4VHlwZShmYWxzZSk7Ci0JCQkJfQotCQkJCWNvbW1hbmQucnVuKCk7Ci0JCQkJU3RyaW5nIHRucyA9IGNvbW1hbmQuZ2V0WFNERWxlbWVudCgpLmdldFRhcmdldE5hbWVzcGFjZSgpOwotCQkJCWNvbXBvbmVudC5zZXRRdWFsaWZpZXIodG5zKTsKLQkJCX0KLQkJCQotCQkJV1NETFNldENvbXBvbmVudEhlbHBlciBoZWxwZXIgPSBuZXcgV1NETFNldENvbXBvbmVudEhlbHBlcihmaWxlLCBwYXJ0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0JCQloZWxwZXIuc2V0WFNEVHlwZUNvbXBvbmVudChwYXJ0LCBjb21wb25lbnQpOwotCQl9Ci0JCWVsc2UgaWYgKHJlZmVyZW5jaW5nT2JqZWN0IGluc3RhbmNlb2YgWFNERWxlbWVudERlY2xhcmF0aW9uKSB7Ci0JCQlzdXBlci5tb2RpZnlDb21wb25lbnRSZWZlcmVuY2UocmVmZXJlbmNpbmdPYmplY3QsIGNvbXBvbmVudCk7Ci0JCX0KLQkJZWxzZSBpZiAocmVmZXJlbmNpbmdPYmplY3QgaW5zdGFuY2VvZiBYU0RBdHRyaWJ1dGVVc2UpIHsKLQkJCQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0U2NoZW1hcyhYU0RTY2hlbWFbXSBzY2hlbWFzKSB7Ci0JCXRoaXMuc2NoZW1hcyA9IHNjaGVtYXM7Ci0JfQotCQotCXByaXZhdGUgWFNEU2NoZW1hW10gZ2V0SW5saW5lU2NoZW1hcyhJRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pIHsKLQkJTGlzdCB0eXBlcyA9IGRlc2NyaXB0aW9uLmdldFR5cGVzKCk7Ci0JCVhTRFNjaGVtYVtdIHNjaGVtYXMgPSBuZXcgWFNEU2NoZW1hW3R5cGVzLnNpemUoKV07Ci0JCWZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCB0eXBlcy5zaXplKCk7IGluZGV4KyspIHsKLQkJCVcxMVR5cGUgdHlwZSA9IChXMTFUeXBlKSB0eXBlcy5nZXQoaW5kZXgpOwotCQkJc2NoZW1hc1tpbmRleF0gPSAoWFNEU2NoZW1hKSB0eXBlLmdldFRhcmdldCgpOwotCQl9Ci0JCQotCQlyZXR1cm4gc2NoZW1hczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2V4dGVuc2lvbnMvRXh0ZW5zaWJpbGl0eUl0ZW1UcmVlUHJvdmlkZXJSZWdpc3RyeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9leHRlbnNpb25zL0V4dGVuc2liaWxpdHlJdGVtVHJlZVByb3ZpZGVyUmVnaXN0cnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjlkMTgwZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2V4dGVuc2lvbnMvRXh0ZW5zaWJpbGl0eUl0ZW1UcmVlUHJvdmlkZXJSZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmV4dGVuc2lvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgcmVhZHMgdGhlIHBsdWdpbiBtYW5pZmVzdHMgYW5kIHJlZ2lzdGVycyBlYWNoIGV4dGVuc2liaWxpdHkgaXRlbSB0cmVlIHByb3ZpZGVyCi0gKi8KLXB1YmxpYyBjbGFzcyBFeHRlbnNpYmlsaXR5SXRlbVRyZWVQcm92aWRlclJlZ2lzdHJ5IGV4dGVuZHMgTlNLZXllZEV4dGVuc2lvblJlZ2lzdHJ5Ci17Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIExBQkVMX1BST1ZJREVSX1BST1BFUlRZID0gImxhYmVsUHJvdmlkZXJDbGFzcyI7IC8vJE5PTi1OTFMtMSQKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09OVEVOVF9QUk9WSURFUl9QUk9QRVJUWSA9ICJjb250ZW50UHJvdmlkZXJDbGFzcyI7IC8vJE5PTi1OTFMtMSQKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBBVFRfTkFNRVMgPSB7ICJsYWJlbFByb3ZpZGVyQ2xhc3MiLCAiY29udGVudFByb3ZpZGVyQ2xhc3MiIH07IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCi0gIHB1YmxpYyBJTGFiZWxQcm92aWRlciBnZXRMYWJlbFByb3ZpZGVyKFN0cmluZyBuYW1lc3BhY2UpCi0gIHsKLSAgICByZXR1cm4gKElMYWJlbFByb3ZpZGVyKSBnZXRQcm9wZXJ0eShuYW1lc3BhY2UsIExBQkVMX1BST1ZJREVSX1BST1BFUlRZKTsKLSAgfQotCi0gIHB1YmxpYyBJVHJlZUNoaWxkUHJvdmlkZXIgZ2V0Q29udGVudFByb3ZpZGVyKFN0cmluZyBuYW1lc3BhY2UpCi0gIHsKLSAgICByZXR1cm4gKElUcmVlQ2hpbGRQcm92aWRlcikgZ2V0UHJvcGVydHkobmFtZXNwYWNlLCBDT05URU5UX1BST1ZJREVSX1BST1BFUlRZKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9leHRlbnNpb25zL0V4dGVuc2libGVUeXBlU3lzdGVtUHJvdmlkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZXh0ZW5zaW9ucy9FeHRlbnNpYmxlVHlwZVN5c3RlbVByb3ZpZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkNGNiZGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9leHRlbnNpb25zL0V4dGVuc2libGVUeXBlU3lzdGVtUHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5leHRlbnNpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5YU0RUeXBlU3lzdGVtUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLQotcHVibGljIGNsYXNzIEV4dGVuc2libGVUeXBlU3lzdGVtUHJvdmlkZXIgaW1wbGVtZW50cyBJVHlwZVN5c3RlbVByb3ZpZGVyCi17Ci0gIHByb3RlY3RlZCBXU0RMRWRpdG9yRXh0ZW5zaW9uW10gZXh0ZW5zaW9uczsKLSAgcHJvdGVjdGVkIElUeXBlU3lzdGVtUHJvdmlkZXJbXSB0eXBlU3lzdGVtUHJvdmlkZXJzOwotCi0gIHByb3RlY3RlZCBmaW5hbCBzdGF0aWMgT2JqZWN0W10gRU1QVFlfQVJSQVkgPSB7fTsKLQotICBwdWJsaWMgRXh0ZW5zaWJsZVR5cGVTeXN0ZW1Qcm92aWRlcigpCi0gIHsKLSAgICB0eXBlU3lzdGVtUHJvdmlkZXJzID0gbmV3IElUeXBlU3lzdGVtUHJvdmlkZXJbMV07IAotICAgIHR5cGVTeXN0ZW1Qcm92aWRlcnNbMF0gPSBuZXcgWFNEVHlwZVN5c3RlbVByb3ZpZGVyKCk7Ci0gIH0gICAgICAgICAgCi0gICAgICAgIAotICBwdWJsaWMgTGlzdCBnZXRBdmFpbGFibGVUeXBlTmFtZXMoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBpbnQgdHlwZU5hbWVDYXRlZ29yeSkKLSAgewotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVTeXN0ZW1Qcm92aWRlcnMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgbGlzdC5hZGRBbGwodHlwZVN5c3RlbVByb3ZpZGVyc1tpXS5nZXRBdmFpbGFibGVUeXBlTmFtZXMoZGVmaW5pdGlvbiwgdHlwZU5hbWVDYXRlZ29yeSkpOwotICAgIH0gICAKLSAgICByZXR1cm4gbGlzdDsKLSAgfQotICAKLSAgcHVibGljIExpc3QgZ2V0QXZhaWxhYmxlVHlwZXMoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBYU0RTY2hlbWEgc2NoZW1hLCBpbnQgdHlwZU5hbWVDYXRlZ29yeSkKLSAgewotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVTeXN0ZW1Qcm92aWRlcnMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgbGlzdC5hZGRBbGwodHlwZVN5c3RlbVByb3ZpZGVyc1tpXS5nZXRBdmFpbGFibGVUeXBlcyhkZWZpbml0aW9uLCBzY2hlbWEsIHR5cGVOYW1lQ2F0ZWdvcnkpKTsKLSAgICB9ICAgCi0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLQotICBwdWJsaWMgTGlzdCBnZXRBdmFpbGFibGVFbGVtZW50TmFtZXMoRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICB7Ci0gICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZVN5c3RlbVByb3ZpZGVycy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBsaXN0LmFkZEFsbCh0eXBlU3lzdGVtUHJvdmlkZXJzW2ldLmdldEF2YWlsYWJsZUVsZW1lbnROYW1lcyhkZWZpbml0aW9uKSk7Ci0gICAgfSAgICAgCi0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLQotICBwdWJsaWMgaW50IGdldENhdGVnb3J5Rm9yVHlwZU5hbWUoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBTdHJpbmcgdHlwZU5hbWUpCi0gIHsKLSAgICBpbnQgcmVzdWx0ID0gVU5LTk9XTl9UWVBFOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZVN5c3RlbVByb3ZpZGVycy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICByZXN1bHQgPSB0eXBlU3lzdGVtUHJvdmlkZXJzW2ldLmdldENhdGVnb3J5Rm9yVHlwZU5hbWUoZGVmaW5pdGlvbiwgdHlwZU5hbWUpOwotICAgICAgaWYgKHJlc3VsdCAhPSBVTktOT1dOX1RZUEUpCi0gICAgICB7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0gIAotICBwdWJsaWMgTGlzdCBnZXRQcmVmaXhlZE5hbWVzKERlZmluaXRpb24gZGVmaW5pdGlvbiwgU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIGxvY2FsTmFtZSkgewotICAJIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlU3lzdGVtUHJvdmlkZXJzLmxlbmd0aDsgaSsrKQotICAgICB7Ci0gICAgICAgbGlzdC5hZGRBbGwodHlwZVN5c3RlbVByb3ZpZGVyc1tpXS5nZXRQcmVmaXhlZE5hbWVzKGRlZmluaXRpb24sIG5hbWVzcGFjZSwgbG9jYWxOYW1lKSk7Ci0gICAgIH0gICAgIAotICAgICByZXR1cm4gbGlzdDsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZXh0ZW5zaW9ucy9JTm9kZUFzc29jaWF0aW9uUHJvdmlkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZXh0ZW5zaW9ucy9JTm9kZUFzc29jaWF0aW9uUHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjNmMGFlMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2V4dGVuc2lvbnMvSU5vZGVBc3NvY2lhdGlvblByb3ZpZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZXh0ZW5zaW9uczsKLQotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotcHVibGljIGludGVyZmFjZSBJTm9kZUFzc29jaWF0aW9uUHJvdmlkZXIKLXsgICAgICAgICAgICAgICAgICAgIAotICBwdWJsaWMgT2JqZWN0IGdldE1vZGVsT2JqZWN0KE9iamVjdCBwYXJlbnRNb2RlbE9iamVjdCwgRWxlbWVudFtdIGVsZW1lbnRDaGFpbiwgaW50IHN0YXJ0LCBpbnRbXSBlbmQpOwotICBwdWJsaWMgTm9kZSBnZXROb2RlKE9iamVjdCBtb2RlbE9iamVjdCk7IAotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZXh0ZW5zaW9ucy9JTm9kZVJlY29uY2lsZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZXh0ZW5zaW9ucy9JTm9kZVJlY29uY2lsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDY5MmQzZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2V4dGVuc2lvbnMvSU5vZGVSZWNvbmNpbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZXh0ZW5zaW9uczsKLQotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLS8qKgotICogQGRlcHJlYWN0ZWQKLSAqLwotcHVibGljIGludGVyZmFjZSBJTm9kZVJlY29uY2lsZXIKLXsKLSAgcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChPYmplY3QgbW9kZWxPYmplY3QsIEVsZW1lbnQgZWxlbWVudCwgaW50IGV2ZW50VHlwZSwgT2JqZWN0IGZlYXR1cmUsIE9iamVjdCBvbGRWYWx1ZSwgT2JqZWN0IG5ld1ZhbHVlLCBpbnQgaW5kZXgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9leHRlbnNpb25zL0lUcmVlQ2hpbGRQcm92aWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9leHRlbnNpb25zL0lUcmVlQ2hpbGRQcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZWJmNTMyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZXh0ZW5zaW9ucy9JVHJlZUNoaWxkUHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5leHRlbnNpb25zOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgYWxsb3dzIGV4dGVuc2lvbiB3cml0ZXJzIHRvIHByb3ZpZGUgc3BlY2lhbGl6ZSB0cmVlIGNvbnRlbnQgYmVoYXZpb3VyLgotICogSXQgaXMgaW50ZW5kZWQgdG8gYmVoYXZlIHNpbWlsYXIgdG8gdGhlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRyZWVDb250ZW50UHJvdmlkZXIuCi0gKiBUaGUgbWFqb3IgZGlmZmVyZW5jZSBpcyB0aGF0IHRoaXMgY2xhc3MgaXMgc2ltcGxpZmllZCBzbyB0aGF0IG9ubHkgb25lIG1ldGhvZCBpcyBpbnZvbHZlZC4KLSAqIAotICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUcmVlQ29udGVudFByb3ZpZGVyI2dldENoaWxkcmVuKGphdmEubGFuZy5PYmplY3QpICAJCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSVRyZWVDaGlsZFByb3ZpZGVyCi17Ci0JcHVibGljIE9iamVjdFtdIGdldENoaWxkcmVuKE9iamVjdCBvYmplY3QpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9leHRlbnNpb25zL0lUeXBlU3lzdGVtUHJvdmlkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZXh0ZW5zaW9ucy9JVHlwZVN5c3RlbVByb3ZpZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhMTQ4MjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9leHRlbnNpb25zL0lUeXBlU3lzdGVtUHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5leHRlbnNpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSVR5cGVTeXN0ZW1Qcm92aWRlcgoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVTktOT1dOX1RZUEUgPSAweDA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEJVSUxUX0lOX1RZUEUgPSAweDE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVTRVJfREVGSU5FRF9TSU1QTEVfVFlQRSA9IDB4MjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVNFUl9ERUZJTkVEX0NPTVBMRVhfVFlQRSA9IDB4NDsKLQotICBwdWJsaWMgTGlzdCBnZXRBdmFpbGFibGVUeXBlTmFtZXMoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBpbnQgdHlwZU5hbWVDYXRlZ29yeSk7Ci0gIHB1YmxpYyBMaXN0IGdldEF2YWlsYWJsZUVsZW1lbnROYW1lcyhEZWZpbml0aW9uIGRlZmluaXRpb24pOyAgCi0gIHB1YmxpYyBMaXN0IGdldEF2YWlsYWJsZVR5cGVzKERlZmluaXRpb24gZGVmaW5pdGlvbiwgWFNEU2NoZW1hIHNjaGVtYSwgaW50IHR5cGVOYW1lQ2F0ZWdvcnkpOwotICBwdWJsaWMgaW50IGdldENhdGVnb3J5Rm9yVHlwZU5hbWUoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBTdHJpbmcgdHlwZU5hbWUpOwotICBwdWJsaWMgTGlzdCBnZXRQcmVmaXhlZE5hbWVzKERlZmluaXRpb24gZGVmaW5pdGlvbiwgU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIGxvY2FsTmFtZSk7Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9leHRlbnNpb25zL05TS2V5ZWRFeHRlbnNpb25SZWdpc3RyeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9leHRlbnNpb25zL05TS2V5ZWRFeHRlbnNpb25SZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMGRiNzhkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZXh0ZW5zaW9ucy9OU0tleWVkRXh0ZW5zaW9uUmVnaXN0cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZXh0ZW5zaW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotCi1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotcHVibGljIGNsYXNzIE5TS2V5ZWRFeHRlbnNpb25SZWdpc3RyeQotewotICBwcm90ZWN0ZWQgSGFzaE1hcCBtYXAgPSBuZXcgSGFzaE1hcCgpOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0xPQURJTkdfRVJST1IgPSAiUExVR0lOX0xPQURJTkdfRVJST1IiOyAvLyROT04tTkxTLTEkCi0KLSAgcHVibGljIE5TS2V5ZWRFeHRlbnNpb25SZWdpc3RyeSgpCi0gIHsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHB1dChTdHJpbmcgbmFtZXNwYWNlVVJJLCBTdHJpbmcgY2xhc3NOYW1lLCBCdW5kbGUgYnVuZGxlKQotICB7Ci0gICAgRXh0ZW5zaW9uSW5mbyBpbmZvID0gKEV4dGVuc2lvbkluZm8pIG1hcC5nZXQobmFtZXNwYWNlVVJJKTsKLSAgICBpZiAoaW5mbyA9PSBudWxsKQotICAgIHsKLSAgICAgIGluZm8gPSBuZXcgU2luZ2xlUHJvcGVydHlFeHRlbnNpb25JbmZvKGNsYXNzTmFtZSwgYnVuZGxlKTsKLSAgICAgIG1hcC5wdXQobmFtZXNwYWNlVVJJLCBpbmZvKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBwdXQoU3RyaW5nIG5hbWVzcGFjZVVSSSwgSGFzaE1hcCBwcm9wZXJ0eVRvQ2xhc3NOYW1lTWFwLCBCdW5kbGUgYnVuZGxlKQotICB7Ci0gICAgRXh0ZW5zaW9uSW5mbyBpbmZvID0gKEV4dGVuc2lvbkluZm8pIG1hcC5nZXQobmFtZXNwYWNlVVJJKTsKLSAgICBpZiAoaW5mbyA9PSBudWxsKQotICAgIHsKLSAgICAgIGluZm8gPSBuZXcgTXVsdGlQcm9wZXJ0eUV4dGVuc2lvbkluZm8ocHJvcGVydHlUb0NsYXNzTmFtZU1hcCwgYnVuZGxlKTsKLSAgICAgIG1hcC5wdXQobmFtZXNwYWNlVVJJLCBpbmZvKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogCi0gICAqIEBkZXByZWNhdGVkCi0gICAqLwotICBwdWJsaWMgT2JqZWN0IGdldChTdHJpbmcgbmFtZXNwYWNlVVJJKQotICB7Ci0gICAgRXh0ZW5zaW9uSW5mbyBpbmZvID0gKEV4dGVuc2lvbkluZm8pIG1hcC5nZXQobmFtZXNwYWNlVVJJKTsKLSAgICByZXR1cm4gaW5mbyAhPSBudWxsID8gaW5mby5nZXRPYmplY3QoIiIpIDogbnVsbDsgLy8kTk9OLU5MUy0xJAotICB9Ci0KLSAgcHVibGljIE9iamVjdCBnZXRQcm9wZXJ0eShTdHJpbmcgbmFtZXNwYWNlVVJJLCBTdHJpbmcgcHJvcGVydHkpCi0gIHsKLSAgICBFeHRlbnNpb25JbmZvIGluZm8gPSAoRXh0ZW5zaW9uSW5mbykgbWFwLmdldChuYW1lc3BhY2VVUkkpOwotICAgIHJldHVybiBpbmZvICE9IG51bGwgPyBpbmZvLmdldE9iamVjdChwcm9wZXJ0eSkgOiBudWxsOwotICB9Ci0KLSAgcHJpdmF0ZSBhYnN0cmFjdCBjbGFzcyBFeHRlbnNpb25JbmZvCi0gIHsKLSAgICBwcm90ZWN0ZWQgQnVuZGxlIGJ1bmRsZTsKLQotICAgIHB1YmxpYyBFeHRlbnNpb25JbmZvKEJ1bmRsZSBidW5kbGUpCi0gICAgewotICAgICAgdGhpcy5idW5kbGUgPSBidW5kbGU7Ci0gICAgfQotCi0gICAgcHVibGljIGFic3RyYWN0IE9iamVjdCBnZXRPYmplY3QoU3RyaW5nIHByb3BlcnR5KTsKLSAgfQotCi0gIHByaXZhdGUgY2xhc3MgU2luZ2xlUHJvcGVydHlFeHRlbnNpb25JbmZvIGV4dGVuZHMgRXh0ZW5zaW9uSW5mbwotICB7Ci0gICAgcHJvdGVjdGVkIFN0cmluZyBjbGFzc05hbWU7Ci0gICAgcHJvdGVjdGVkIE9iamVjdCBvYmplY3Q7Ci0gICAgcHJvdGVjdGVkIGJvb2xlYW4gZXJyb3I7Ci0KLSAgICBwdWJsaWMgU2luZ2xlUHJvcGVydHlFeHRlbnNpb25JbmZvKFN0cmluZyBjbGFzc05hbWUsIEJ1bmRsZSBidW5kbGUpCi0gICAgewotICAgICAgc3VwZXIoYnVuZGxlKTsKLSAgICAgIHRoaXMuY2xhc3NOYW1lID0gY2xhc3NOYW1lOwotICAgIH0KLQotICAgIHB1YmxpYyBPYmplY3QgZ2V0T2JqZWN0KFN0cmluZyBwcm9wZXJ0eSkKLSAgICB7Ci0gICAgICBpZiAob2JqZWN0ID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgQ2xhc3MgdGhlQ2xhc3MgPSBidW5kbGUubG9hZENsYXNzKGNsYXNzTmFtZSk7Ci0gICAgICAgICAgb2JqZWN0ID0gdGhlQ2xhc3MubmV3SW5zdGFuY2UoKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICBvYmplY3QgPSBQTFVHSU5fTE9BRElOR19FUlJPUjsKLSAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gb2JqZWN0ICE9IFBMVUdJTl9MT0FESU5HX0VSUk9SID8gb2JqZWN0IDogbnVsbDsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGNsYXNzIE11bHRpUHJvcGVydHlFeHRlbnNpb25JbmZvIGV4dGVuZHMgRXh0ZW5zaW9uSW5mbwotICB7Ci0gICAgcHJvdGVjdGVkIEhhc2hNYXAgcHJvcGVydHlUb0NsYXNzTmFtZVRhYmxlOwotICAgIHByb3RlY3RlZCBIYXNoTWFwIHByb3BlcnR5VG9PYmplY3RUYWJsZSA9IG5ldyBIYXNoTWFwKCk7Ci0KLSAgICBwdWJsaWMgTXVsdGlQcm9wZXJ0eUV4dGVuc2lvbkluZm8oSGFzaE1hcCBwcm9wZXJ0VG9DbGFzc05hbWVUYWJsZSwgQnVuZGxlIGJ1bmRsZSkKLSAgICB7Ci0gICAgICBzdXBlcihidW5kbGUpOwotICAgICAgdGhpcy5wcm9wZXJ0eVRvQ2xhc3NOYW1lVGFibGUgPSBwcm9wZXJ0VG9DbGFzc05hbWVUYWJsZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgT2JqZWN0IGdldE9iamVjdChTdHJpbmcgcHJvcGVydHkpCi0gICAgewotICAgICAgT2JqZWN0IHJlc3VsdCA9IG51bGw7Ci0gICAgICBTdHJpbmcgY2xhc3NOYW1lID0gKFN0cmluZykgcHJvcGVydHlUb0NsYXNzTmFtZVRhYmxlLmdldChwcm9wZXJ0eSk7Ci0gICAgICBpZiAoY2xhc3NOYW1lICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IHByb3BlcnR5VG9PYmplY3RUYWJsZS5nZXQocHJvcGVydHkpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBDbGFzcyB0aGVDbGFzcyA9IGJ1bmRsZS5sb2FkQ2xhc3MoY2xhc3NOYW1lKTsKLSAgICAgICAgICAgIHJlc3VsdCA9IHRoZUNsYXNzLm5ld0luc3RhbmNlKCk7Ci0gICAgICAgICAgICBwcm9wZXJ0eVRvT2JqZWN0VGFibGUucHV0KHByb3BlcnR5LCByZXN1bHQpOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgICAgewotICAgICAgICAgICAgcHJvcGVydHlUb09iamVjdFRhYmxlLnB1dChwcm9wZXJ0eSwgUExVR0lOX0xPQURJTkdfRVJST1IpOwotICAgICAgICAgICAgcmVzdWx0ID0gUExVR0lOX0xPQURJTkdfRVJST1I7Ci0gICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCSAgcmV0dXJuIHJlc3VsdCAhPSBQTFVHSU5fTE9BRElOR19FUlJPUiA/IHJlc3VsdCA6IG51bGw7ICAgICAgCi0gICAgfQotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9leHRlbnNpb25zL1dTRExFZGl0b3JDb25maWd1cmF0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2V4dGVuc2lvbnMvV1NETEVkaXRvckNvbmZpZ3VyYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJlMDA1Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2V4dGVuc2lvbnMvV1NETEVkaXRvckNvbmZpZ3VyYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZXh0ZW5zaW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hY3Rpb25zLklXU0RMVG9vbGJhckFjdGlvbjsKLQotcHVibGljIGNsYXNzIFdTRExFZGl0b3JDb25maWd1cmF0aW9uIHsKLQkgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFdTRExFRElUT1JDT05GSUdVUkFUSU9ORVhURU5TSU9OSUQgPSAib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuV1NETEVkaXRvckV4dGVuc2lvbkNvbmZpZ3VyYXRpb24iOyAvLyROT04tTkxTLTEkCi0JICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJTlRFUk5BTEVESVRPUkNPTkZJR1VSQVRJT05fRVhURU5TSU9OSUQgPSAib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWxFZGl0b3JDb25maWd1cmF0aW9uIjsgLy8kTk9OLU5MUy0xJAotCSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0xBU1NOQU1FID0gImNsYXNzIjsgLy8kTk9OLU5MUy0xJAotCSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQURBUFRFUkZBQ1RPUlkgPSAiYWRhcHRlckZhY3RvcnkiOyAvLyROT04tTkxTLTEkCi0JICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUT09MQkFSQUNUSU9OID0gInRvb2xiYXJBY3Rpb24iOyAvLyROT04tTkxTLTEkCi0JICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGSUdVUkVGQUNUT1JZID0gImZpZ3VyZUZhY3RvcnkiOyAvLyROT04tTkxTLTEkCi0JICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFRElUUEFSVEZBQ1RPUlkgPSAiZWRpdFBhcnRGYWN0b3J5IjsgLy8kTk9OLU5MUy0xJAotCi0JICBMaXN0IGRlZmluZWRFeHRlbnNpb25zTGlzdCA9IG51bGw7Ci0KLQkgIHB1YmxpYyBXU0RMRWRpdG9yQ29uZmlndXJhdGlvbigpCi0JICB7Ci0KLQkgIH0KLQotCSAgcHVibGljIEFkYXB0ZXJGYWN0b3J5IGdldEFkYXB0ZXJGYWN0b3J5KCkKLQkgIHsKLQkgICAgaWYgKGRlZmluZWRFeHRlbnNpb25zTGlzdCA9PSBudWxsKQotCSAgICB7Ci0JICAgICAgcmVhZFdTRExDb25maWd1cmF0aW9uUmVnaXN0cnkoKTsKLQkgICAgfQotCSAgICBpZiAoIWRlZmluZWRFeHRlbnNpb25zTGlzdC5pc0VtcHR5KCkpCi0JICAgIHsKLQkgICAgICByZXR1cm4gKChXU0RMRWRpdG9yRXh0ZW5zaW9uUHJvcGVydGllcykgZGVmaW5lZEV4dGVuc2lvbnNMaXN0LmdldCgwKSkuZ2V0QWRhcHRlckZhY3RvcnkoKTsKLQkgICAgfQotCSAgICByZXR1cm4gbnVsbDsKLQkgIH0KLQotCSAgcHVibGljIEVkaXRQYXJ0RmFjdG9yeSBnZXRFZGl0UGFydEZhY3RvcnkoKQotCSAgewotCSAgICBpZiAoZGVmaW5lZEV4dGVuc2lvbnNMaXN0ID09IG51bGwpCi0JICAgIHsKLQkgICAgICByZWFkV1NETENvbmZpZ3VyYXRpb25SZWdpc3RyeSgpOwotCSAgICB9Ci0JICAgIGlmICghZGVmaW5lZEV4dGVuc2lvbnNMaXN0LmlzRW1wdHkoKSkKLQkgICAgewotCSAgICAgIHJldHVybiAoKFdTRExFZGl0b3JFeHRlbnNpb25Qcm9wZXJ0aWVzKSBkZWZpbmVkRXh0ZW5zaW9uc0xpc3QuZ2V0KDApKS5nZXRFZGl0UGFydEZhY3RvcnkoKTsKLQkgICAgfQotCSAgICByZXR1cm4gbnVsbDsKLQkgIH0KLQotLy8JICBwdWJsaWMgSUV4dGVuZGVkRmlndXJlRmFjdG9yeSBnZXRGaWd1cmVGYWN0b3J5KCkKLS8vCSAgewotLy8JICAgIGlmIChkZWZpbmVkRXh0ZW5zaW9uc0xpc3QgPT0gbnVsbCkKLS8vCSAgICB7Ci0vLwkgICAgICByZWFkV1NETENvbmZpZ3VyYXRpb25SZWdpc3RyeSgpOwotLy8JICAgIH0KLS8vCSAgICBpZiAoIWRlZmluZWRFeHRlbnNpb25zTGlzdC5pc0VtcHR5KCkpCi0vLwkgICAgewotLy8JICAgICAgcmV0dXJuICgoV1NETEVkaXRvckV4dGVuc2lvblByb3BlcnRpZXMpIGRlZmluZWRFeHRlbnNpb25zTGlzdC5nZXQoMCkpLmdldEZpZ3VyZUZhY3RvcnkoKTsKLS8vCSAgICB9Ci0vLwkgICAgcmV0dXJuIG51bGw7Ci0vLwkgIH0KLQotCSAgcHVibGljIExpc3QgZ2V0VG9vbGJhckFjdGlvbnMoKQotCSAgewotCSAgICBpZiAoZGVmaW5lZEV4dGVuc2lvbnNMaXN0ID09IG51bGwpCi0JICAgIHsKLQkgICAgICByZWFkV1NETENvbmZpZ3VyYXRpb25SZWdpc3RyeSgpOwotCSAgICB9Ci0JICAgIGlmICghZGVmaW5lZEV4dGVuc2lvbnNMaXN0LmlzRW1wdHkoKSkKLQkgICAgewotCSAgICAgIHJldHVybiAoKFdTRExFZGl0b3JFeHRlbnNpb25Qcm9wZXJ0aWVzKSBkZWZpbmVkRXh0ZW5zaW9uc0xpc3QuZ2V0KDApKS5nZXRBY3Rpb25MaXN0KCk7Ci0JICAgIH0KLQkgICAgcmV0dXJuIENvbGxlY3Rpb25zLkVNUFRZX0xJU1Q7Ci0JICB9Ci0KLQkgIHByb3RlY3RlZCBPYmplY3QgbG9hZENsYXNzKElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtZW50LCBTdHJpbmcgY2xhc3NTdHJpbmcpCi0JICB7Ci0JICAgIFN0cmluZyBwbHVnaW5JZCA9IGVsZW1lbnQuZ2V0RGVjbGFyaW5nRXh0ZW5zaW9uKCkuZ2V0Q29udHJpYnV0b3IoKS5nZXROYW1lKCk7Ci0KLQkgICAgdHJ5Ci0JICAgIHsKLQkgICAgICBDbGFzcyB0aGVDbGFzcyA9IFBsYXRmb3JtLmdldEJ1bmRsZShwbHVnaW5JZCkubG9hZENsYXNzKGNsYXNzU3RyaW5nKTsKLQkgICAgICBPYmplY3QgaW5zdGFuY2UgPSB0aGVDbGFzcy5uZXdJbnN0YW5jZSgpOwotCi0JICAgICAgcmV0dXJuIGluc3RhbmNlOwotCSAgICB9Ci0JICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLQkgICAgewotCi0JICAgIH0KLQkgICAgcmV0dXJuIG51bGw7Ci0JICB9Ci0KLQkgIHB1YmxpYyB2b2lkIHJlYWRXU0RMQ29uZmlndXJhdGlvblJlZ2lzdHJ5KCkKLQkgIHsKLQkgICAgZGVmaW5lZEV4dGVuc2lvbnNMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCSAgICB1cGRhdGVMaXN0KElOVEVSTkFMRURJVE9SQ09ORklHVVJBVElPTl9FWFRFTlNJT05JRCk7Ci0JICAgIHVwZGF0ZUxpc3QoV1NETEVESVRPUkNPTkZJR1VSQVRJT05FWFRFTlNJT05JRCk7Ci0JICB9Ci0JICAKLQkgIHB1YmxpYyB2b2lkIHVwZGF0ZUxpc3QoU3RyaW5nIElEKQotCSAgewotCSAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSB3c2RsRWRpdG9yRXh0ZW5zaW9uTGlzdCA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCkuZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzRm9yKElEKTsKLQotCSAgICBib29sZWFuIGRlZmluZWRFeHRlbnNpb25zRXhpc3QgPSAod3NkbEVkaXRvckV4dGVuc2lvbkxpc3QgIT0gbnVsbCAmJiB3c2RsRWRpdG9yRXh0ZW5zaW9uTGlzdC5sZW5ndGggPiAwKTsKLQotCSAgICBkZWZpbmVkRXh0ZW5zaW9uc0xpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLQkgICAgaWYgKGRlZmluZWRFeHRlbnNpb25zRXhpc3QpCi0JICAgIHsKLQkgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHdzZGxFZGl0b3JFeHRlbnNpb25MaXN0Lmxlbmd0aDsgaSsrKQotCSAgICAgIHsKLQkgICAgICAgIFdTRExFZGl0b3JFeHRlbnNpb25Qcm9wZXJ0aWVzIHByb3BlcnRpZXMgPSBuZXcgV1NETEVkaXRvckV4dGVuc2lvblByb3BlcnRpZXMoKTsKLQkgICAgICAgIGRlZmluZWRFeHRlbnNpb25zTGlzdC5hZGQocHJvcGVydGllcyk7Ci0KLQkgICAgICAgIElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtZW50ID0gd3NkbEVkaXRvckV4dGVuc2lvbkxpc3RbaV07Ci0JICAgICAgICBTdHJpbmcgYWRhcHRlckZhY3RvcnlDbGFzcyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFEQVBURVJGQUNUT1JZKTsKLQkgICAgICAgIGlmIChhZGFwdGVyRmFjdG9yeUNsYXNzICE9IG51bGwpCi0JICAgICAgICB7Ci0JICAgICAgICAgIE9iamVjdCBvYmplY3QgPSBsb2FkQ2xhc3MoZWxlbWVudCwgYWRhcHRlckZhY3RvcnlDbGFzcyk7Ci0JICAgICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBBZGFwdGVyRmFjdG9yeSkKLQkgICAgICAgICAgewotCSAgICAgICAgICAgIHByb3BlcnRpZXMuc2V0QWRhcHRlckZhY3RvcnkoKEFkYXB0ZXJGYWN0b3J5KSBvYmplY3QpOwotCSAgICAgICAgICB9Ci0JICAgICAgICB9Ci0KLS8vCSAgICAgICAgU3RyaW5nIGZpZ3VyZUZhY3RvcnlDbGFzcyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEZJR1VSRUZBQ1RPUlkpOwotLy8JICAgICAgICBpZiAoZmlndXJlRmFjdG9yeUNsYXNzICE9IG51bGwpCi0vLwkgICAgICAgIHsKLS8vCSAgICAgICAgICBPYmplY3Qgb2JqZWN0ID0gbG9hZENsYXNzKGVsZW1lbnQsIGZpZ3VyZUZhY3RvcnlDbGFzcyk7Ci0vLwkgICAgICAgICAgSUV4dGVuZGVkRmlndXJlRmFjdG9yeSBmaWd1cmVGYWN0b3J5ID0gbnVsbDsKLS8vCSAgICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgSUV4dGVuZGVkRmlndXJlRmFjdG9yeSkKLS8vCSAgICAgICAgICB7Ci0vLwkgICAgICAgICAgICBmaWd1cmVGYWN0b3J5ID0gKElFeHRlbmRlZEZpZ3VyZUZhY3RvcnkpIG9iamVjdDsKLS8vCSAgICAgICAgICAgIHByb3BlcnRpZXMuc2V0RmlndXJlRmFjdG9yeUxpc3QoZmlndXJlRmFjdG9yeSk7Ci0vLwkgICAgICAgICAgfQotLy8JICAgICAgICB9Ci0JICAgICAgICAKLQkgICAgICAgIFN0cmluZyBlZGl0UGFydEZhY3RvcnlDbGFzcyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEVESVRQQVJURkFDVE9SWSk7Ci0JICAgICAgICBpZiAoZWRpdFBhcnRGYWN0b3J5Q2xhc3MgIT0gbnVsbCkKLQkgICAgICAgIHsKLQkgICAgICAgICAgT2JqZWN0IG9iamVjdCA9IGxvYWRDbGFzcyhlbGVtZW50LCBlZGl0UGFydEZhY3RvcnlDbGFzcyk7Ci0JICAgICAgICAgIEVkaXRQYXJ0RmFjdG9yeSBlZGl0UGFydEZhY3RvcnkgPSBudWxsOwotCSAgICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgRWRpdFBhcnRGYWN0b3J5KQotCSAgICAgICAgICB7Ci0JICAgICAgICAgICAgZWRpdFBhcnRGYWN0b3J5ID0gKEVkaXRQYXJ0RmFjdG9yeSkgb2JqZWN0OwotCSAgICAgICAgICAgIHByb3BlcnRpZXMuc2V0RWRpdFBhcnRGYWN0b3J5TGlzdChlZGl0UGFydEZhY3RvcnkpOwotCSAgICAgICAgICB9Ci0JICAgICAgICB9Ci0KLQkgICAgICAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdIHRvb2xiYXJBY3Rpb25zID0gZWxlbWVudC5nZXRDaGlsZHJlbihUT09MQkFSQUNUSU9OKTsKLQkgICAgICAgIExpc3QgYWN0aW9uTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQkgICAgICAgIGlmICh0b29sYmFyQWN0aW9ucyAhPSBudWxsKQotCSAgICAgICAgewotCSAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHRvb2xiYXJBY3Rpb25zLmxlbmd0aDsgaisrKQotCSAgICAgICAgICB7Ci0JICAgICAgICAgICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGFjdGlvbkVsZW1lbnQgPSB0b29sYmFyQWN0aW9uc1tqXTsKLQkgICAgICAgICAgICBTdHJpbmcgYWN0aW9uQ2xhc3MgPSBhY3Rpb25FbGVtZW50LmdldEF0dHJpYnV0ZShDTEFTU05BTUUpOwotCSAgICAgICAgICAgIElXU0RMVG9vbGJhckFjdGlvbiBhY3Rpb24gPSBudWxsOwotCSAgICAgICAgICAgIGlmIChhY3Rpb25DbGFzcyAhPSBudWxsKQotCSAgICAgICAgICAgIHsKLQkgICAgICAgICAgICAgIE9iamVjdCBvYmplY3QgPSBsb2FkQ2xhc3MoYWN0aW9uRWxlbWVudCwgYWN0aW9uQ2xhc3MpOwotCSAgICAgICAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIElXU0RMVG9vbGJhckFjdGlvbikKLQkgICAgICAgICAgICAgIHsKLQkgICAgICAgICAgICAgICAgYWN0aW9uID0gKElXU0RMVG9vbGJhckFjdGlvbikgb2JqZWN0OwotCSAgICAgICAgICAgICAgICBhY3Rpb25MaXN0LmFkZChhY3Rpb24pOwotCSAgICAgICAgICAgICAgfQotCSAgICAgICAgICAgIH0KLQkgICAgICAgICAgfQotCSAgICAgICAgfQotCSAgICAgICAgcHJvcGVydGllcy5zZXRBY3Rpb25MaXN0KGFjdGlvbkxpc3QpOwotCi0KLQotCSAgICAgIH0KLQkgICAgfQotCSAgfQotCX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZXh0ZW5zaW9ucy9XU0RMRWRpdG9yRXh0ZW5zaW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2V4dGVuc2lvbnMvV1NETEVkaXRvckV4dGVuc2lvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MGJjOTQ0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZXh0ZW5zaW9ucy9XU0RMRWRpdG9yRXh0ZW5zaW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZXh0ZW5zaW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotCi1wdWJsaWMgaW50ZXJmYWNlIFdTRExFZGl0b3JFeHRlbnNpb24KLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1VUTElORV9UUkVFX0NPTlRFTlRfUFJPVklERVIgPSAxOyAgICAvLyByZXEnZCBmb3IgbW9kZWwgYmFzZWQgZXh0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9VVExJTkVfTEFCRUxfUFJPVklERVIgPSAyOyAgICAgICAgICAgLy8gcmVxJ2QgZm9yIG1vZGVsIGJhc2VkIGV4dAotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1FTlVfQUNUSU9OX0NPTlRSSUJVVE9SID0gMzsgICAgICAgICAgLy8gbm9kZQotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERVRBSUxTX1ZJRVdFUl9QUk9WSURFUiA9IDQ7ICAgICAgICAgIC8vIG5vZGUKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFRElUX1BBUlRfRkFDVE9SWSA9IDU7ICAgICAgICAgICAgICAgIC8vIHJlcSdkIGZvciBtb2RlbCBiYXNlZCBleHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVFlQRV9TWVNURU1fUFJPVklERVIgPSA2OyAgICAgICAgICAgICAvLyByZXEnZCBmb3IgdHlwZSBzeXN0ZW0gZXh0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5PREVfUkVDT05DSUxFUiA9IDc7ICAgICAgICAgICAgICAgICAgLy8gcmVxJ2QgZm9yIG1vZGVsIGJhc2VkIGV4dAotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOT0RFX0FTU09DSUFUSU9OX1BST1ZJREVSID0gODsgICAgICAgIC8vIHJlcSdkIGZvciBtb2RlbCBiYXNlZCBleHQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTU9ERUxfUVVFUllfQ09OVFJJQlVUT1IgPSA5OyAgICAgICAgICAvLyByZXEnZCBmb3IgbW9kZWwgYmFzZWQgZXh0Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJPUEVSVFlfU09VUkNFX1BST1ZJREVSID0gMTA7ICAgICAgICAvLyByZXEnZCBmb3IgbW9kZWwgYmFzZWQgZXh0Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBST1BFUlRZX1NFQ1RJT05fREVTQ1JJUFRPUl9QUk9WSURFUiA9IDExOyAgLy8gcmVxJ2QgZm9yIG1vZGVsIGJhc2VkIGV4dAotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBYU0RfREVMRVRFX0FDVElPTiA9IDEyOwotICAKLSAgYm9vbGVhbiBpc0V4dGVuc2lvblR5cGVTdXBwb3J0ZWQoaW50IHR5cGUpOwotICBib29sZWFuIGlzQXBwbGljYWJsZShPYmplY3QgbW9kZWxPYmplY3QpOwotICBPYmplY3QgY3JlYXRlRXh0ZW5zaW9uT2JqZWN0KGludCB0eXBlLCBJRWRpdG9yUGFydCBlZGl0b3IpOwotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZXh0ZW5zaW9ucy9XU0RMRWRpdG9yRXh0ZW5zaW9uUHJvcGVydGllcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9leHRlbnNpb25zL1dTRExFZGl0b3JFeHRlbnNpb25Qcm9wZXJ0aWVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkODQ1OWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9leHRlbnNpb25zL1dTRExFZGl0b3JFeHRlbnNpb25Qcm9wZXJ0aWVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZXh0ZW5zaW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0RmFjdG9yeTsKLQotcHVibGljIGNsYXNzIFdTRExFZGl0b3JFeHRlbnNpb25Qcm9wZXJ0aWVzCi17Ci0gIEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5OwotLy8gIElFeHRlbmRlZEZpZ3VyZUZhY3RvcnkgZmlndXJlRmFjdG9yeTsKLSAgRWRpdFBhcnRGYWN0b3J5IGVkaXRQYXJ0RmFjdG9yeTsKLSAgTGlzdCBhY3Rpb25MaXN0OwotCi0gIHB1YmxpYyBXU0RMRWRpdG9yRXh0ZW5zaW9uUHJvcGVydGllcygpCi0gIHsKLQotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0QWN0aW9uTGlzdChMaXN0IGFjdGlvbkxpc3QpCi0gIHsKLSAgICB0aGlzLmFjdGlvbkxpc3QgPSBhY3Rpb25MaXN0OwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0QWRhcHRlckZhY3RvcnkoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpCi0gIHsKLSAgICB0aGlzLmFkYXB0ZXJGYWN0b3J5ID0gYWRhcHRlckZhY3Rvcnk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRFZGl0UGFydEZhY3RvcnlMaXN0KEVkaXRQYXJ0RmFjdG9yeSBlZGl0UGFydEZhY3RvcnkpCi0gIHsKLSAgICB0aGlzLmVkaXRQYXJ0RmFjdG9yeSA9IGVkaXRQYXJ0RmFjdG9yeTsKLSAgfQotCi0vLyAgcHVibGljIHZvaWQgc2V0RmlndXJlRmFjdG9yeUxpc3QoSUV4dGVuZGVkRmlndXJlRmFjdG9yeSBmaWd1cmVGYWN0b3J5KQotLy8gIHsKLS8vICAgIHRoaXMuZmlndXJlRmFjdG9yeSA9IGZpZ3VyZUZhY3Rvcnk7Ci0vLyAgfQotCi0gIHB1YmxpYyBMaXN0IGdldEFjdGlvbkxpc3QoKQotICB7Ci0gICAgcmV0dXJuIGFjdGlvbkxpc3Q7Ci0gIH0KLQotICBwdWJsaWMgQWRhcHRlckZhY3RvcnkgZ2V0QWRhcHRlckZhY3RvcnkoKQotICB7Ci0gICAgcmV0dXJuIGFkYXB0ZXJGYWN0b3J5OwotICB9Ci0KLSAgcHVibGljIEVkaXRQYXJ0RmFjdG9yeSBnZXRFZGl0UGFydEZhY3RvcnkoKQotICB7Ci0gICAgcmV0dXJuIGVkaXRQYXJ0RmFjdG9yeTsKLSAgfQotCi0vLyAgcHVibGljIElFeHRlbmRlZEZpZ3VyZUZhY3RvcnkgZ2V0RmlndXJlRmFjdG9yeSgpCi0vLyAgewotLy8gICAgcmV0dXJuIGZpZ3VyZUZhY3Rvcnk7Ci0vLyAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9leHRlbnNpb25zL1dTRExOb2RlQXNzb2NpYXRpb25Qcm92aWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9leHRlbnNpb25zL1dTRExOb2RlQXNzb2NpYXRpb25Qcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTY3ZThiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZXh0ZW5zaW9ucy9XU0RMTm9kZUFzc29jaWF0aW9uUHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5leHRlbnNpb25zOyAgICAgIAotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMRWxlbWVudEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLmltcGwuWFNEQ29tcG9uZW50SW1wbDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMTm9kZUFzc29jaWF0aW9uUHJvdmlkZXIgaW1wbGVtZW50cyBJTm9kZUFzc29jaWF0aW9uUHJvdmlkZXIKLXsgICAgICAgICAgICAgICAgICAgIAotICBwdWJsaWMgT2JqZWN0IGdldE1vZGVsT2JqZWN0KE9iamVjdCBwYXJlbnRNb2RlbE9iamVjdCwgRWxlbWVudFtdIGVsZW1lbnRDaGFpbiwgaW50IHN0YXJ0LCBpbnRbXSBlbmQpCi0gIHsgICAgICAgICAgICAgICAgIAotICAgIE9iamVjdCBjdXJyZW50T2JqZWN0ID0gcGFyZW50TW9kZWxPYmplY3Q7Ci0gICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgZWxlbWVudENoYWluLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIE9iamVjdCBvID0gZ2V0TW9kZWxPYmplY3RIZWxwZXIoY3VycmVudE9iamVjdCwgZWxlbWVudENoYWluW2ldKTsKLSAgICAgIGlmIChvID09IG51bGwpCi0gICAgICB7ICAgICAgICAgICAgICAKLSAgICAgICAgZW5kWzBdID0gaTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9ICAgICAgICAgICAgCi0gICAgICBlbHNlCi0gICAgICB7ICAgICAgICAgICAgICAKLSAgICAgICAgY3VycmVudE9iamVjdCA9IG87Ci0gICAgICB9Ci0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIHJldHVybiBjdXJyZW50T2JqZWN0ICE9IHBhcmVudE1vZGVsT2JqZWN0ID8gY3VycmVudE9iamVjdCA6IG51bGw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgfQotCi0gIHB1YmxpYyBOb2RlIGdldE5vZGUoT2JqZWN0IG1vZGVsT2JqZWN0KQotICB7Ci0gICAgaWYgKG1vZGVsT2JqZWN0IGluc3RhbmNlb2YgV1NETEVsZW1lbnQpCi0gICAgICByZXR1cm4gKChXU0RMRWxlbWVudEltcGwpbW9kZWxPYmplY3QpLmdldEVsZW1lbnQoKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gbnVsbDsKLSAgfQotICAgICAgCi0gIHByb3RlY3RlZCBPYmplY3QgZ2V0TW9kZWxPYmplY3RIZWxwZXIoT2JqZWN0IHBhcmVudE9iamVjdCwgRWxlbWVudCBlbGVtZW50Tm9kZSkKLSAgeyAgICAgICAgICAKLQkJT2JqZWN0IHJlc3VsdCA9IG51bGw7Ci0JCUNvbGxlY3Rpb24gY2hpbGRDb21wb25lbnRMaXN0ID0gKChXU0RMRWxlbWVudEltcGwpIHBhcmVudE9iamVjdCkuZ2V0V1NETENvbnRlbnRzKCk7Ci0JCWZvciAoSXRlcmF0b3IgaSA9IGNoaWxkQ29tcG9uZW50TGlzdC5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0JCXsKLQkJCU9iamVjdCBvID0gaS5uZXh0KCk7Ci0JCQlFbGVtZW50IGVsZW1lbnQgPSBudWxsOwotCi0gICAgICBpZiAobyAhPSBudWxsKQotICAgICAgewotICAgICAgICBpZiAobyBpbnN0YW5jZW9mIFdTRExFbGVtZW50SW1wbCkKLSAgICAgICAgewotICAgICAgICAgIGVsZW1lbnQgPSAoKFdTRExFbGVtZW50SW1wbClvKS5nZXRFbGVtZW50KCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAobyBpbnN0YW5jZW9mIFhTRENvbXBvbmVudEltcGwpCi0gICAgICAgIHsKLSAgICAgICAgICBlbGVtZW50ID0gKChYU0RDb21wb25lbnRJbXBsKW8pLmdldEVsZW1lbnQoKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgCi0JCQlpZiAoZWxlbWVudCA9PSBlbGVtZW50Tm9kZSkKLQkJCXsKLQkJCQlyZXN1bHQgPSBvOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0gIH0KLX0gICAgCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ZpbHRlci9FeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ZpbHRlci9FeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxMzE0NzcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9maWx0ZXIvRXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmZpbHRlcjsKLQotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgRXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlciAKLXsKLSAgcHVibGljIGJvb2xlYW4gaXNWYWxpZENvbnRleHQoRWxlbWVudCBwYXJlbnRFbGVtZW50LCBTdHJpbmcgbG9jYWxOYW1lKTsgICAgIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9maWx0ZXIvSHR0cEV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZmlsdGVyL0h0dHBFeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2MDhmNjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9maWx0ZXIvSHR0cEV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5maWx0ZXI7Ci0KLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLXB1YmxpYyBjbGFzcyBIdHRwRXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlciBpbXBsZW1lbnRzIEV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXIKLXsgIAotICBwdWJsaWMgSHR0cEV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXIoKQotICB7Ci0gIH0gIAkKLQkKLSAgcHVibGljIGJvb2xlYW4gaXNWYWxpZENvbnRleHQoRWxlbWVudCBwYXJlbnRFbGVtZW50LCBTdHJpbmcgbG9jYWxOYW1lKQotICB7Ci0gIAlib29sZWFuIHJlc3VsdCA9IHRydWU7ICAgCi0gICAgCi0gICAgU3RyaW5nIHBhcmVudEVsZW1lbnROYW1lID0gcGFyZW50RWxlbWVudC5nZXRMb2NhbE5hbWUoKTsKLQlpZiAocGFyZW50RWxlbWVudE5hbWUuZXF1YWxzKCJiaW5kaW5nIikpIC8vJE5PTi1OTFMtMSQKLQl7Ci0JICByZXN1bHQgPSBsb2NhbE5hbWUuZXF1YWxzKCJiaW5kaW5nIik7IAkgICAvLyROT04tTkxTLTEkCi0JfQkgIAotCWVsc2UgaWYgKHBhcmVudEVsZW1lbnROYW1lLmVxdWFscygib3BlcmF0aW9uIikpIC8vJE5PTi1OTFMtMSQKLQl7Ci0JICByZXN1bHQgPSBsb2NhbE5hbWUuZXF1YWxzKCJvcGVyYXRpb24iKTsgIC8vJE5PTi1OTFMtMSQKLQl9Ci0JZWxzZSBpZiAocGFyZW50RWxlbWVudE5hbWUuZXF1YWxzKCJpbnB1dCIpIHx8ICAvLyROT04tTkxTLTEkCi0JICAgICAgICAgcGFyZW50RWxlbWVudE5hbWUuZXF1YWxzKCJvdXRwdXQiKSkgLy8kTk9OLU5MUy0xJAotCXsKLQkgIHJlc3VsdCA9IGxvY2FsTmFtZS5lcXVhbHMoImJvZHkiKSB8fCAgLy8kTk9OLU5MUy0xJAotCSAgICAgICAgICAgbG9jYWxOYW1lLmVxdWFscygiaGVhZGVyIik7IAkgICAvLyROT04tTkxTLTEkCi0JfQkKLQllbHNlIGlmIChwYXJlbnRFbGVtZW50TmFtZS5lcXVhbHMoImZhdWx0IikpIC8vJE5PTi1OTFMtMSQKLQl7Ci0JICByZXN1bHQgPSBsb2NhbE5hbWUuZXF1YWxzKCJmYXVsdCIpOyAJICAgLy8kTk9OLU5MUy0xJAotCX0KLQllbHNlIGlmIChwYXJlbnRFbGVtZW50TmFtZS5lcXVhbHMoInBvcnQiKSkgLy8kTk9OLU5MUy0xJAotCXsKLQkgIHJlc3VsdCA9IGxvY2FsTmFtZS5lcXVhbHMoImFkZHJlc3MiKTsgCSAgIC8vJE5PTi1OTFMtMSQKLQl9CSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9ICAgICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZmlsdGVyL01pbWVFeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ZpbHRlci9NaW1lRXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODllMDExLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZmlsdGVyL01pbWVFeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZmlsdGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotcHVibGljIGNsYXNzIE1pbWVFeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyIGltcGxlbWVudHMgRXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlcgoteyAgIAotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUlNRV9OQU1FU1BBQ0VfVVJJPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL21pbWUvIjsgLy8kTk9OLU5MUy0xJAotICBwdWJsaWMgTWltZUV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXIoKQotICB7Ci0gIH0gIAkKLQkKLSAgcHVibGljIGJvb2xlYW4gaXNWYWxpZENvbnRleHQoRWxlbWVudCBwYXJlbnRFbGVtZW50LCBTdHJpbmcgbG9jYWxOYW1lKQotICB7Ci0gIAlib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotCi0gICAgU3RyaW5nIHBhcmVudEVsZW1lbnROYW1lID0gcGFyZW50RWxlbWVudC5nZXRMb2NhbE5hbWUoKTsKLSAgICBTdHJpbmcgcGFyZW50RWxlbWVudE5hbWVzcGFjZSA9IHBhcmVudEVsZW1lbnQuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0KLSAgCWlmIChXU0RMQ29uc3RhbnRzLldTRExfTkFNRVNQQUNFX1VSSS5lcXVhbHMocGFyZW50RWxlbWVudE5hbWVzcGFjZSkpCi0gIAl7Ci0gICAgCWlmIChwYXJlbnRFbGVtZW50TmFtZS5lcXVhbHMoImlucHV0IikgfHwgcGFyZW50RWxlbWVudE5hbWUuZXF1YWxzKCJvdXRwdXQiKSkgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgCXsKLSAgICAJICAJcmVzdWx0ID0gbG9jYWxOYW1lLmVxdWFscygiY29udGVudCIpIHx8IC8vJE5PTi1OTFMtMSQKLQkJCQkgICAgIGxvY2FsTmFtZS5lcXVhbHMoIm11bHRpcGFydFJlbGF0ZWQiKSB8fCAvLyROT04tTkxTLTEkCi0JCQkJICAgICBsb2NhbE5hbWUuZXF1YWxzKCJtaW1lWG1sIik7ICAgIAkgIAkgLy8kTk9OLU5MUy0xJAotICAgIAl9Ci0gIAl9Ci0gIAllbHNlIGlmIChNSU1FX05BTUVTUEFDRV9VUkkuZXF1YWxzKHBhcmVudEVsZW1lbnROYW1lc3BhY2UpKQotICAJewotCQlyZXN1bHQgPSB0cnVlOwkJCQkKLSAgCX0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9ICAgICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZmlsdGVyL1NvYXBFeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ZpbHRlci9Tb2FwRXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZGUzZWI3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZmlsdGVyL1NvYXBFeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZmlsdGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBTb2FwRXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlciBpbXBsZW1lbnRzIEV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXIKLXsgICAKLSAgcHVibGljIFNvYXBFeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyKCkKLSAgewotICB9ICAJCi0JCi0gIHB1YmxpYyBib29sZWFuIGlzVmFsaWRDb250ZXh0KEVsZW1lbnQgcGFyZW50RWxlbWVudCwgU3RyaW5nIGxvY2FsTmFtZSkKLSAgewotICAJYm9vbGVhbiByZXN1bHQgPSB0cnVlOwotCi0gICAgU3RyaW5nIHBhcmVudEVsZW1lbnROYW1lID0gcGFyZW50RWxlbWVudC5nZXRMb2NhbE5hbWUoKTsgICAgCi0gICAgaWYgKHBhcmVudEVsZW1lbnQuZ2V0TmFtZXNwYWNlVVJJKCkuZXF1YWxzKFdTRExDb25zdGFudHMuV1NETF9OQU1FU1BBQ0VfVVJJKSkKLSAgICB7IAotICAgICAgLy8gaGVyZSB3ZSBhc3N1bWUgdGhlIHBhcmVudCBlbGVtZW50IGlzIHRoZSBXU0RMIGJpbmRpbmcgCi0gICAgICAvLyBza2VsZXRvbiBhbmQgdGhhdCB0aGUgJ2xvY2FsTmFtZScgaXMgdGhlIFNPQVAgZXh0ZW5zaW9uIGVsZW1lbnQKLSAgICAgIC8vICAgICAgCi0gICAgICBpZiAocGFyZW50RWxlbWVudE5hbWUuZXF1YWxzKCJiaW5kaW5nIikpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gbG9jYWxOYW1lLmVxdWFscygiYmluZGluZyIpOyAJICAgLy8kTk9OLU5MUy0xJAotICAgICAgfQkgIAotICAgICAgZWxzZSBpZiAocGFyZW50RWxlbWVudE5hbWUuZXF1YWxzKCJvcGVyYXRpb24iKSkgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICByZXN1bHQgPSBsb2NhbE5hbWUuZXF1YWxzKCJvcGVyYXRpb24iKTsgIC8vJE5PTi1OTFMtMSQKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKHBhcmVudEVsZW1lbnROYW1lLmVxdWFscygiaW5wdXQiKSB8fCAgLy8kTk9OLU5MUy0xJAotICAgICAgICAgIHBhcmVudEVsZW1lbnROYW1lLmVxdWFscygib3V0cHV0IikpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gbG9jYWxOYW1lLmVxdWFscygiYm9keSIpIHx8ICAvLyROT04tTkxTLTEkCi0gICAgICAgIGxvY2FsTmFtZS5lcXVhbHMoImhlYWRlciIpOyAJICAgLy8kTk9OLU5MUy0xJAotICAgICAgfQkKLSAgICAgIGVsc2UgaWYgKHBhcmVudEVsZW1lbnROYW1lLmVxdWFscygiZmF1bHQiKSkgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICByZXN1bHQgPSBsb2NhbE5hbWUuZXF1YWxzKCJmYXVsdCIpOyAJICAgLy8kTk9OLU5MUy0xJAotICAgICAgfQotICAgICAgZWxzZSBpZiAocGFyZW50RWxlbWVudE5hbWUuZXF1YWxzKCJwb3J0IikpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gbG9jYWxOYW1lLmVxdWFscygiYWRkcmVzcyIpOyAJICAgLy8kTk9OLU5MUy0xJAotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICByZXN1bHQgPSBmYWxzZTsgICAgICAgIAotICAgICAgfSAgCi0gICAgfSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9ICAgICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZmlsdGVyL1hTREV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvZmlsdGVyL1hTREV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWNkYWI3Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ZpbHRlci9YU0RFeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZmlsdGVyOwotCi1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIFhTREV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXIgaW1wbGVtZW50cyBFeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyCi17ICAgCi0gIHB1YmxpYyBYU0RFeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyKCkKLSAgewotICB9ICAJCi0JCi0gIHB1YmxpYyBib29sZWFuIGlzVmFsaWRDb250ZXh0KEVsZW1lbnQgcGFyZW50RWxlbWVudCwgU3RyaW5nIGxvY2FsTmFtZSkKLSAgewotICAJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLSAgICBTdHJpbmcgcGFyZW50RWxlbWVudE5hbWUgPSBwYXJlbnRFbGVtZW50LmdldExvY2FsTmFtZSgpOwotCWlmIChwYXJlbnRFbGVtZW50TmFtZS5lcXVhbHMoInR5cGVzIikpIC8vJE5PTi1OTFMtMSQKLQl7Ci0JICByZXN1bHQgPSBsb2NhbE5hbWUuZXF1YWxzKCJzY2hlbWEiKTsgCSAgIC8vJE5PTi1OTFMtMSQKLQl9CSAgCQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0gICAgIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9iYWNrLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvYmFjay5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0ZDFhMjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9iYWNrLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvYmluZF9hc2N0X3ZhbF9ub3Rfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvYmluZF9hc2N0X3ZhbF9ub3Rfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjFjNzMxMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2JpbmRfYXNjdF92YWxfbm90X29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2JpbmRfYXNjdF92YWxfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvYmluZF9hc2N0X3ZhbF9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MmFkOWJlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvYmluZF9hc2N0X3ZhbF9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9iaW5kaW5nX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2JpbmRpbmdfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODk2ZTJmMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2JpbmRpbmdfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvYmluZGluZ2hlYWRlcl9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9iaW5kaW5naGVhZGVyX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmZmU1NGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9iaW5kaW5naGVhZGVyX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2Jyb3dzZWJ1dHRvbi5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2Jyb3dzZWJ1dHRvbi5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyNDAyZjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9icm93c2VidXR0b24uZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9jb21wbGV4dHlwZV9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9jb21wbGV4dHlwZV9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDdmODUyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvY29tcGxleHR5cGVfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvZGVsZXRlX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2RlbGV0ZV9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjkyMmFjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvZGVsZXRlX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2VsZW1lbnRfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvZWxlbWVudF9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDQ1ZjA4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvZWxlbWVudF9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9lcnJvcl9jby5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2Vycm9yX2NvLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE5ZGNjYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2Vycm9yX2NvLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvZmF1bHRfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvZmF1bHRfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjIyODExNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2ZhdWx0X29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2ZpbGVfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvZmlsZV9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZmE3YTM4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvZmlsZV9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9mbGRyX2VsLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvZmxkcl9lbC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwMWMxMzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9mbGRyX2VsLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvZm9yd2FyZC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2ZvcndhcmQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYWI2OTllLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvZm9yd2FyZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2hpZGViaW5kaW5nLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvaGlkZWJpbmRpbmcuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODQ2Y2Q4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvaGlkZWJpbmRpbmcuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9odHRwYWRkcmVzc19vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9odHRwYWRkcmVzc19vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjIwYzM4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvaHR0cGFkZHJlc3Nfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvaHR0cGJpbmRpbmdfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvaHR0cGJpbmRpbmdfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQyOGVmMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2h0dHBiaW5kaW5nX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2h0dHBvcGVyYXRpb25fb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvaHR0cG9wZXJhdGlvbl9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzQwNDE4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvaHR0cG9wZXJhdGlvbl9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9odHRwdXJsZW5jb2RlZF9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9odHRwdXJsZW5jb2RlZF9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDUwNTBmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvaHR0cHVybGVuY29kZWRfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvaHR0cHVybHJlcGxhY2VtZW50X29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2h0dHB1cmxyZXBsYWNlbWVudF9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzM1ODdlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvaHR0cHVybHJlcGxhY2VtZW50X29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2ltcG9ydF9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9pbXBvcnRfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjcyNzVhYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2ltcG9ydF9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9pbXBvcnRoZWFkZXJfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvaW1wb3J0aGVhZGVyX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwMDBjYjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9pbXBvcnRoZWFkZXJfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvaW5wdXRfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvaW5wdXRfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmU2YjM0OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL2lucHV0X29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL21lc3NhZ2Vfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvbWVzc2FnZV9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGNlNDgzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvbWVzc2FnZV9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9tZXNzYWdlaGVhZGVyX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL21lc3NhZ2VoZWFkZXJfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDJhNzExYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL21lc3NhZ2VoZWFkZXJfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvbmFtZXNwYWNlX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL25hbWVzcGFjZV9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTNmMjc0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvbmFtZXNwYWNlX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL25hbWVzcGFjZWRlY2xfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvbmFtZXNwYWNlZGVjbF9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjc5ZDI3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvbmFtZXNwYWNlZGVjbF9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9uZXdfd3NkbF93aXoucG5nIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9uZXdfd3NkbF93aXoucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTAwMTEwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvbmV3X3dzZGxfd2l6LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvb3BlcmF0aW9uX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL29wZXJhdGlvbl9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODE4YTMwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvb3BlcmF0aW9uX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL29wZXJhdGlvbmJpbmRpbmdfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvb3BlcmF0aW9uYmluZGluZ19vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTM4NmM2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvb3BlcmF0aW9uYmluZGluZ19vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9vdXRwdXRfbm8uZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9vdXRwdXRfbm8uZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNmI5ZjhhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvb3V0cHV0X25vLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvb3V0cHV0X29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL291dHB1dF9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDA5MThjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvb3V0cHV0X29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL291dHB1dF95ZXMuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9vdXRwdXRfeWVzLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWNhY2I5Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL291dHB1dF95ZXMuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9wYWdlX2Jhbm5lci5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3BhZ2VfYmFubmVyLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWViYzBiMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3BhZ2VfYmFubmVyLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvcGFydF9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9wYXJ0X29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyMTlkZmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9wYXJ0X29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3BvcnRfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvcG9ydF9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNzk0OThiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvcG9ydF9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9wb3J0dHlwZV9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9wb3J0dHlwZV9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTMyNWNhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvcG9ydHR5cGVfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvcG9ydHR5cGVoZWFkZXJfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvcG9ydHR5cGVoZWFkZXJfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWFmY2MwMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3BvcnR0eXBlaGVhZGVyX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3BydGNtcGx4cGx0eXBfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvcHJ0Y21wbHhwbHR5cF9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYjg2NjQzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvcHJ0Y21wbHhwbHR5cF9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9wcnRlbGVtdF9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9wcnRlbGVtdF9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODJkMTA4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvcHJ0ZWxlbXRfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvcHJ0c21wbHR5cF9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9wcnRzbXBsdHlwX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmZmM3YzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9wcnRzbXBsdHlwX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3F1aWNrYXNzaXN0LmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvcXVpY2thc3Npc3QuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGFlMmEwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvcXVpY2thc3Npc3QuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9zZXJ2aWNlX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3NlcnZpY2Vfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTIxNmIzZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3NlcnZpY2Vfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvc2VydmljZWhlYWRlcl9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9zZXJ2aWNlaGVhZGVyX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiNDgxNGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9zZXJ2aWNlaGVhZGVyX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3NpbXBsZXR5cGVfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvc2ltcGxldHlwZV9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDVkYmIxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvc2ltcGxldHlwZV9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9zb2FwX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3NvYXBfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQ0MjZlZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3NvYXBfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvc29hcGFkZHJlc3Nfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvc29hcGFkZHJlc3Nfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg4MGJhNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3NvYXBhZGRyZXNzX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3NvYXBhdHRfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvc29hcGF0dF9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMGIzNjYxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvc29hcGF0dF9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9zb2FwYmluZGluZ19vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9zb2FwYmluZGluZ19vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTVmNmJmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvc29hcGJpbmRpbmdfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvc29hcGJvZHlfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvc29hcGJvZHlfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjJkMDFhYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3NvYXBib2R5X29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3NvYXBmYXVsdF9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9zb2FwZmF1bHRfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODU2YjFmNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3NvYXBmYXVsdF9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy9zb2FwaGVhZGVyX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3NvYXBoZWFkZXJfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjcyZWEzYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3NvYXBoZWFkZXJfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvc29hcGhlYWRlcmZhdWx0X29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3NvYXBoZWFkZXJmYXVsdF9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjBlMTkwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvc29hcGhlYWRlcmZhdWx0X29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3NvYXBvcGVyYXRpb25fb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvc29hcG9wZXJhdGlvbl9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiY2MxOTE0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvc29hcG9wZXJhdGlvbl9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy90eXBlc19vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy90eXBlc19vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMWY2Zjg4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvdHlwZXNfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMvdmFsaWRhdGUuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy92YWxpZGF0ZS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiMzQ3YWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy92YWxpZGF0ZS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3dzZGxfZmlsZV9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy93c2RsX2ZpbGVfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzViMWY5Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3dzZGxfZmlsZV9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy94c2RfZmlsZV9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9pY29ucy94c2RfZmlsZV9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxM2RjZmNlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMveHNkX2ZpbGVfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMveHNkX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2ljb25zL3hzZF9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxM2RjZmNlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvaWNvbnMveHNkX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2xhYmVsL3Byb3ZpZGVycy9IVFRQTGFiZWxQcm92aWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9sYWJlbC9wcm92aWRlcnMvSFRUUExhYmVsUHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmI4ZGVmZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2xhYmVsL3Byb3ZpZGVycy9IVFRQTGFiZWxQcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmxhYmVsLnByb3ZpZGVyczsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5MYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLQotcHVibGljIGNsYXNzIEhUVFBMYWJlbFByb3ZpZGVyIGV4dGVuZHMgTGFiZWxQcm92aWRlcgoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICBwcm90ZWN0ZWQgZmluYWwgc3RhdGljIFN0cmluZyBBRERSRVNTICAgICAgICAgPSAiYWRkcmVzcyI7IC8vJE5PTi1OTFMtMSQKLSAgcHJvdGVjdGVkIGZpbmFsIHN0YXRpYyBTdHJpbmcgQklORElORyAgICAgICAgID0gImJpbmRpbmciOyAvLyROT04tTkxTLTEkCi0gIHByb3RlY3RlZCBmaW5hbCBzdGF0aWMgU3RyaW5nIE9QRVJBVElPTiAgICAgICA9ICJvcGVyYXRpb24iOyAvLyROT04tTkxTLTEkCi0gIHByb3RlY3RlZCBmaW5hbCBzdGF0aWMgU3RyaW5nIFVSTF9FTkNPREVEICAgICA9ICJ1cmxFbmNvZGVkIjsgLy8kTk9OLU5MUy0xJAotICBwcm90ZWN0ZWQgZmluYWwgc3RhdGljIFN0cmluZyBVUkxfUkVQTEFDRU1FTlQgPSAidXJsUmVwbGFjZW1lbnQiOyAvLyROT04tTkxTLTEkCi0KLSAgcHJvdGVjdGVkIEhhc2hNYXAgbWFwID0gbmV3IEhhc2hNYXAoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgcHVibGljIEhUVFBMYWJlbFByb3ZpZGVyKCkKLSAgeyAgICAgICAgICAgICAgICAgICAgCi0gICAgbWFwLnB1dChBRERSRVNTLCAiaWNvbnMvaHR0cGFkZHJlc3Nfb2JqLmdpZiIpOyAvLyROT04tTkxTLTEkCi0gICAgbWFwLnB1dChCSU5ESU5HLCAiaWNvbnMvaHR0cGJpbmRpbmdfb2JqLmdpZiIpOyAvLyROT04tTkxTLTEkCi0gICAgbWFwLnB1dChPUEVSQVRJT04sICJpY29ucy9odHRwb3BlcmF0aW9uX29iai5naWYiKTsgICAgIC8vJE5PTi1OTFMtMSQKLSAgICBtYXAucHV0KFVSTF9FTkNPREVELCAiaWNvbnMvaHR0cHVybGVuY29kZWRfb2JqLmdpZiIpOyAvLyROT04tTkxTLTEkCi0gICAgbWFwLnB1dChVUkxfUkVQTEFDRU1FTlQsICJpY29ucy9odHRwdXJscmVwbGFjZW1lbnRfb2JqLmdpZiIpOyAvLyROT04tTkxTLTEkCi0gIH0KLQotICBwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgCi0gIHsgICAgCi0gICAgTm9kZSBub2RlID0gKE5vZGUpb2JqZWN0OwotICAgIFN0cmluZyBpbWFnZU5hbWUgPSAoU3RyaW5nKW1hcC5nZXQobm9kZS5nZXRMb2NhbE5hbWUoKSk7ICAgICAgIAotICAgIHJldHVybiBpbWFnZU5hbWUgIT0gbnVsbCA/IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZShpbWFnZU5hbWUpIDogbnVsbDsgCi0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSAgCi0gIHsKLSAgICBOb2RlIG5vZGUgPSAoTm9kZSlvYmplY3Q7Ci0gICAgcmV0dXJuIG5vZGUuZ2V0Tm9kZU5hbWUoKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvbGFiZWwvcHJvdmlkZXJzL1NPQVBMYWJlbFByb3ZpZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2xhYmVsL3Byb3ZpZGVycy9TT0FQTGFiZWxQcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDYwZWVmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvbGFiZWwvcHJvdmlkZXJzL1NPQVBMYWJlbFByb3ZpZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwubGFiZWwucHJvdmlkZXJzOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkxhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotCi1wdWJsaWMgY2xhc3MgU09BUExhYmVsUHJvdmlkZXIgZXh0ZW5kcyBMYWJlbFByb3ZpZGVyCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgcHJvdGVjdGVkIGZpbmFsIHN0YXRpYyBTdHJpbmcgQUREUkVTUyAgICAgID0gImFkZHJlc3MiOyAvLyROT04tTkxTLTEkCi0gIHByb3RlY3RlZCBmaW5hbCBzdGF0aWMgU3RyaW5nIEJPRFkgICAgICAgICA9ICJib2R5IjsgLy8kTk9OLU5MUy0xJAotICBwcm90ZWN0ZWQgZmluYWwgc3RhdGljIFN0cmluZyBCSU5ESU5HICAgICAgPSAiYmluZGluZyI7IC8vJE5PTi1OTFMtMSQKLSAgcHJvdGVjdGVkIGZpbmFsIHN0YXRpYyBTdHJpbmcgRkFVTFQgICAgICAgID0gImZhdWx0IjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8kTk9OLU5MUy0xJAotICBwcm90ZWN0ZWQgZmluYWwgc3RhdGljIFN0cmluZyBIRUFERVIgICAgICAgPSAiaGVhZGVyIjsgIC8vJE5PTi1OTFMtMSQKLSAgcHJvdGVjdGVkIGZpbmFsIHN0YXRpYyBTdHJpbmcgSEVBREVSX0ZBVUxUID0gImhlYWRlcmZhdWx0IjsgIC8vJE5PTi1OTFMtMSQKLSAgcHJvdGVjdGVkIGZpbmFsIHN0YXRpYyBTdHJpbmcgT1BFUkFUSU9OICAgID0gIm9wZXJhdGlvbiI7IC8vJE5PTi1OTFMtMSQKLQotICBwcm90ZWN0ZWQgSGFzaE1hcCBtYXAgPSBuZXcgSGFzaE1hcCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgIAotICBwdWJsaWMgU09BUExhYmVsUHJvdmlkZXIoKQotICB7Ci0gICAgbWFwLnB1dChBRERSRVNTLCAiaWNvbnMvc29hcGFkZHJlc3Nfb2JqLmdpZiIpOyAvLyROT04tTkxTLTEkCi0gICAgbWFwLnB1dChCSU5ESU5HLCAiaWNvbnMvc29hcGJpbmRpbmdfb2JqLmdpZiIpOyAvLyROT04tTkxTLTEkCi0gICAgbWFwLnB1dChCT0RZLCAiaWNvbnMvc29hcGJvZHlfb2JqLmdpZiIpOyAvLyROT04tTkxTLTEkCi0gICAgbWFwLnB1dChGQVVMVCwgImljb25zL3NvYXBmYXVsdF9vYmouZ2lmIik7IC8vJE5PTi1OTFMtMSQKLSAgICBtYXAucHV0KEhFQURFUiwgImljb25zL3NvYXBoZWFkZXJfb2JqLmdpZiIpOyAvLyROT04tTkxTLTEkCi0gICAgbWFwLnB1dChIRUFERVJfRkFVTFQsICJpY29ucy9zb2FwaGVhZGVyZmF1bHRfb2JqLmdpZiIpOyAvLyROT04tTkxTLTEkCi0gICAgbWFwLnB1dChPUEVSQVRJT04sICJpY29ucy9zb2Fwb3BlcmF0aW9uX29iai5naWYiKTsgLy8kTk9OLU5MUy0xJAotICB9Ci0KLSAgcHVibGljIEltYWdlIGdldEltYWdlKE9iamVjdCBvYmplY3QpIAotICB7ICAgIAotICAgIE5vZGUgbm9kZSA9IChOb2RlKW9iamVjdDsKLSAgICBTdHJpbmcgaW1hZ2VOYW1lID0gKFN0cmluZyltYXAuZ2V0KG5vZGUuZ2V0TG9jYWxOYW1lKCkpOyAgICAgICAgICAgICAgICAgICAgICAgIAotCSAgcmV0dXJuIGltYWdlTmFtZSAhPSBudWxsID8gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEltYWdlKGltYWdlTmFtZSkgOiBudWxsOyAKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpICAKLSAgewotICAgIE5vZGUgbm9kZSA9IChOb2RlKW9iamVjdDsKLSAgICByZXR1cm4gbm9kZS5nZXROb2RlTmFtZSgpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9tZXNzYWdlcy5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9tZXNzYWdlcy5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NzlmMzE0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvbWVzc2FnZXMucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEyNSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIE5MU19NRVNTQUdFRk9STUFUX1ZBUgotX1VJX0RFUEVOREVOQ0lFU19DSEFOR0VEPURlcGVuZGVuY2llcyBDaGFuZ2VkCi1fVUlfREVQRU5ERU5DSUVTX0NIQU5HRURfUkVGUkVTSD1PbmUgb3IgbW9yZSBkZXBlbmRlbmNpZXMgaGF2ZSBjaGFuZ2VkLiAgRG8geW91IHdhbnQgdG8gcmVmcmVzaCB0aGUgZWRpdG9yIHRvIHJlZmxlY3QgdGhlc2UgY2hhbmdlcz8KLV9VSV9FRElUX05BTUVTUEFDRVNfRElBTE9HX1RJVExFPUVkaXQgTmFtZXNwYWNlcwotX1VJX1BSRUZfUEFHRV9DUkVBVElOR19GSUxFUz1DcmVhdGluZyBmaWxlcwotX1VJX1JFTUVNQkVSX01ZX0RFQ0lTSU9OX0xBQkVMPVJlbWVtYmVyIG15IGRlY2lzaW9uCi1fVUlfUFJFRl9QQUdFX0RFRkFVTFRfVEFSR0VUX05BTUVTUEFDRT1EZWZhdWx0IFRhcmdldCBOYW1lc3BhY2U6Ci1fVUlfUkVHRU5fQklORElOR1NfT05fU0FWRV9RVUVTVElPTk1BUks9UmVnZW5lcmF0ZSBCaW5kaW5ncyBPbiBTYXZlPwotX1VJX0xBQkVMX1dBUk5JTkdfRFVQTElDQVRFX05BTUVfRVhJU1RTPVdhcm5pbmc6IGR1cGxpY2F0ZSBuYW1lIGFscmVhZHkgZXhpc3RzCi1fVUlfTEFCRUxfTkFNRVNQQUNFX1VSSVNfVE9fQkVfSU5DTFVERUQ9TmFtZXNwYWNlIFVSSXMgdG8gYmUgaW5jbHVkZWQKLV9VSV9QUkVGX1BBR0VfQVVUT19SRUdFTkVSQVRFX0JJTkRJTkc9UmVnZW5lcmF0ZSBCaW5kaW5nIG9uIHNhdmUKLV9VSV9QUkVGX1BBR0VfUFJPTVBUX1JFR0VOX0JJTkRJTkdfT05fU0FWRT1Qcm9tcHQgUmVnZW5lcmF0ZSBCaW5kaW5nIG9uIHNhdmUKLV9VSV9FRElUX05BTUVTUEFDRVM9RWRpdCBOYW1lc3BhY2VzLi4uCi1fVUlfQUNUSU9OX0FERF9JTVBPUlQ9QWRkIEltcG9ydAotX1VJX0FDVElPTl9BRERfQklORElORz1BZGQgQmluZGluZwotX1VJX0FDVElPTl9BRERfUEFSVD1BZGQgUGFydAotX1VJX0FDVElPTl9BRERfWE1MX1NDSEVNQV9FTEVNRU5UPUFkZCBYTUwgU2NoZW1hIEVsZW1lbnQKLV9VSV9BQ1RJT05fUkVPUkRFUl9QQVJUPVJlb3JkZXIgUGFydAotX1VJX0FDVElPTl9SRU9SREVSX01FU1NBR0VfUkVGRVJFTkNFPVJlb3JkZXIgTWVzc2FnZSBSZWZlcmVuY2UKLV9VSV9BQ1RJT05fT1BFTl9JTl9ORVdfRURJVE9SPU9wZW4gSW4gTmV3IEVkaXRvcgotX1VJX0FDVElPTl9FWElTVElOR19NRVNTQUdFPUV4aXN0aW5nIE1lc3NhZ2UuLi4KLV9VSV9BQ1RJT05fRVhJU1RJTkdfRUxFTUVOVD1FeGlzdGluZyBFbGVtZW50Li4uCi1fVUlfRVJST1JfTkFNRVNQQUNFX0lOVkFMSUQ9VGhlIHRhcmdldCBuYW1lc3BhY2UgaXMgaW52YWxpZAotX1VJX0VSUk9SX0ZJTEVfQUxSRUFEWV9FWElTVFM9RmlsZSBhbHJlYWR5IGV4aXN0czogezB9Ci1fVUlfREVTQ1JJUFRJT05fTkVXX1dTRExfRklMRT1TcGVjaWZ5IHRoZSBhdHRyaWJ1dGVzIGZvciB0aGUgbmV3IFdTREwgZmlsZS4KLV9VSV9SRUdFTl9CSU5ESU5EU19PTl9TQVZFPVJlZ2VuZXJhdGUgQmluZGluZ3MgT24gU2F2ZQotX1VJX1JBRElPX0RPQ1VNRU5UX0xJVEVSQUw9ZG9jdW1lbnQgbGl0ZXJhbAotX1VJX1RJVExFX1NQRUNJRllfUE9SVFRZUEU9U3BlY2lmeSBQb3J0IFR5cGUKLV9VSV9MQUJFTF9CSU5ESU5HX1BST1RPQ09MPVByb3RvY29sOgotX1VJX0xBQkVMX0lOTElORV9TQ0hFTUFfT0Y9SW5saW5lIFNjaGVtYSBvZiAKLV9VSV9MQUJFTF9UQVJHRVRfTkFNRVNQQUNFPVRhcmdldCBuYW1lc3BhY2U6Ci1fVUlfTEFCRUxfUFJFRklYX1dJVEhfQ09MT049UHJlZml4OgotX1VJX0xBQkVMX0NSRUFURV9XU0RMX1NLRUxFVE9OPUNyZWF0ZSBXU0RMIFNrZWxldG9uCi1fVUlfTEFCRUxfQ1JFQVRFX05FV19XU0RMX0ZJTEU9Q3JlYXRlIGEgbmV3IFdTREwgRmlsZQotX1VJX0xBQkVMX1NPQVBfQklORElOR19PUFRJT05TPVNPQVAgQmluZGluZyBPcHRpb25zCi1fVUlfTEFCRUxfSFRUUF9CSU5ESU5HX09QVElPTlM9SFRUUCBCaW5kaW5nIE9wdGlvbnMKLV9VSV9MQUJFTF9BRERfRVhURU5TSU9OX0VMRU1FTlQ9QWRkIEV4dGVuc2lvbiBFbGVtZW50Ci1fVUlfU1BFQ0lGWV9CSU5ESU5HX0RFVEFJTFNfTEFCRUw9U3BlY2lmeSB0aGUgZGV0YWlscyBvZiB0aGUgYmluZGluZyB0aGF0IHdpbGwgYmUgY3JlYXRlZAotX1VJX1NQRUNJRllfUE9SVF9ERVRBSUxTX1RPX0JFX0NSRUFURUQ9U3BlY2lmeSB0aGUgZGV0YWlscyBvZiB0aGUgcG9ydCB0aGF0IHdpbGwgYmUgY3JlYXRlZAotX1VJX0xBQkVMX05FV19CSU5ESU5HPU5ldyBCaW5kaW5nCi1fVUlfTEFCRUxfTkVXX1BPUlRUWVBFPU5ldyBQb3J0VHlwZQotX1VJX0xBQkVMX1JFRkVSRU5DRV9LSU5EPVJlZmVyZW5jZSBLaW5kCi1fVUlfTEFCRUxfTkVXX01FU1NBR0U9TmV3IE1lc3NhZ2UKLV9VSV9SQURJT19SUENfRU5DT0RFRD1ycGMgZW5jb2RlZAotX1VJX1JBRElPX1JQQ19MSVRFUkFMPXJwYyBsaXRlcmFsCi1fVUlfQUNUSU9OX0VYSVNUSU5HX1RZUEU9RXhpc3RpbmcgVHlwZS4uLgotX1VJX1NQRUNJRllfUE9SVF9ERVRBSUxTPVNwZWNpZnkgUG9ydCBEZXRhaWxzCi1fVUlfVElUTEVfU1BFQ0lGWV9CSU5ESU5HPVNwZWNpZnkgQmluZGluZwotX1VJX1RJVExFX1NQRUNJRllfQklORElOR19ERVRBSUxTPVNwZWNpZnkgQmluZGluZyBEZXRhaWxzCi1fVUlfRVJST1JfRklMRV9NVVNUX0VORF9XSVRIX1dTREw9RXJyb3I6IEZpbGUgbXVzdCBlbmQgd2l0aCB3c2RsCi1fVUlfVElUTEVfU1BFQ0lGWV9NRVNTQUdFPVNwZWNpZnkgTWVzc2FnZQotX1VJX1RJVExFX05FV19XU0RMX0ZJTEU9TmV3IFdTREwgRmlsZQotX1VJX05BTUVfSU5WQUxJRF9DSEFSX0VORD0nKQotX1VJX0FDVElPTl9SRU5BTUU9UmVuYW1lCi1fVUlfRk9MREVSX1RZUEVTPVR5cGVzCi1fVUlfQ0FOQ0VMX0xBQkVMPUNhbmNlbAotX1VJX0FDVElPTl9ORVdfVFlQRT1OZXcgVHlwZS4uLgotX1VJX0FDVElPTl9TRVRfVFlQRT1TZXQgVHlwZQotX1VJX0ZPTERFUl9JTVBPUlRTPUltcG9ydHMKLV9VSV9GT0xERVJfU0VSVklDRVM9U2VydmljZXMKLV9VSV9GT0xERVJfQklORElOR1M9QmluZGluZ3MKLV9VSV9GT0xERVJfSU5URVJGQUNFUz1JbnRlcmZhY2VzCi1fVUlfRk9MREVSX1BPUlRUWVBFUz1Qb3J0VHlwZXMKLV9VSV9GT0xERVJfTUVTU0FHRVM9TWVzc2FnZXMKLV9VSV9BQ1RJT05fTkVXX01FU1NBR0U9TmV3IE1lc3NhZ2UuLi4KLV9VSV9BQ1RJT05fTkVXX0VMRU1FTlQ9TmV3IEVsZW1lbnQuLi4KLV9VSV9BQ1RJT05fU0VUX0VMRU1FTlQ9U2V0IEVsZW1lbnQKLV9VSV9BQ1RJT05fU0VUX01FU1NBR0U9U2V0IE1lc3NhZ2UKLV9VSV9BQ1RJT05fU0VUX0JJTkRJTkc9U2V0IEJpbmRpbmcKLV9VSV9DSEVDS0JPWF9PVkVSV1JJVEU9T3ZlcndyaXRlIGV4aXN0aW5nIGJpbmRpbmcgaW5mb3JtYXRpb24KLV9VSV9BQ1RJT05fU0VUX1BPUlRUWVBFPVNldCBQb3J0VHlwZQotX1VJX0FDVElPTl9FRElUX1BPUlRfQUREUkVTUz1FZGl0IEFkZHJlc3MKLV9VSV9BQ1RJT05fQUREPUFkZAotX1VJX0FDVElPTl9PUEVOX0lNUE9SVD1PcGVuIEltcG9ydAotX1VJX1VOU1BFQ0lGSUVEPSh1bnNwZWNpZmllZCkKLV9VSV9MQUJFTF9OQU1FPU5hbWUKLV9VSV9MQUJFTF9UWVBFPVR5cGUKLV9VSV9CVVRUT05fTkVXPU5ldy4uLgotX1VJX0xBQkVMX0VMRU1FTlQ9RWxlbWVudAotX1VJX0JVVFRPTl9CUk9XU0U9QnJvd3NlLi4uCi1fVUlfQklORElOR19XSVpBUkQ9QmluZGluZyBXaXphcmQKLV9VSV9CSU5ESU5HPUJpbmRpbmcKLV9VSV9MQUJFTF9NRVNTQUdFPU1lc3NhZ2UKLV9VSV9MQUJFTF9SRU1PVkU9UmVtb3ZlCi1fVUlfVElUTEVfU0VMRUNUPVNlbGVjdAotX1VJX1RJVExFX1NFTEVDVF9GSUxFID0gU2VsZWN0IEZpbGUKLV9VSV9ERVNDUklQVElPTl9TRUxFQ1RfV1NETF9PUl9YU0QgPSBTZWxlY3QgYSBXU0RMIG9yIFhTRCBmaWxlIHRvIGltcG9ydC4KLV9VSV9USVRMRV9PUFRJT05TPU9wdGlvbnMKLV9VSV9ZRVNfTEFCRUw9WWVzCi1fVUlfUE9SVF9UWVBFPVBvcnQgVHlwZQotX1VJX1BPUlRfV0laQVJEPVBvcnQgV2l6YXJkCi1fVUlfTk9fTEFCRUw9Tm8KLV9VSV9BREQ9QWRkLi4uCi1fVUlfSEVMUD1IZWxwCi1fVUlfTEFCRUxfTkFNRV9GSUxURVI9TmFtZSAoPyA9IGNoYXJhY3RlciwgKiA9IGFueSBzdHJpbmcpOgotX1dBUk5fTkFNRV9NVVNUX0NPTlRBSU5fQVRfTEVBU1RfT05FX0NIQVI9SVdBWDE0MTVXIE5hbWUgZmllbGQgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIKLV9XQVJOX05BTUVfSEFTX1NQQUNFPUlXQVgxNDAyVyBOYW1lIGZpZWxkIGNhbm5vdCBjb250YWluIGEgc3BhY2UKLV9XQVJOX05BTUVfSU5WQUxJRF9GSVJTVD1JV0FYMTQwM1cgRmlyc3QgY2hhcmFjdGVyIGluIG5hbWUgZmllbGQgbXVzdCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyAoJ18nLCAnOicsICdsZXR0ZXInKQotX1dBUk5fTkFNRV9JTlZBTElEX0NIQVI9SVdBWDE0MDRXIE5hbWUgZmllbGQgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXIgKCcKLV9XQVJOX1dTSV9DT01QTElBTkNFX1NPQVBfUFJPVE9DT0w9V1MtSSBjb21wbGlhbmNlIHdhcm5pbmc6IHByb3RvY29sIHNob3VsZCBiZSBTT0FQCi1fRVJST1JfV1NJX0NPTVBMSUFOQ0VfU09BUF9QUk9UT0NPTD1XUy1JIGNvbXBsaWFuY2UgZXJyb3I6IHByb3RvY29sIG11c3QgYmUgU09BUAotX1dBUk5fV1NJX0NPTVBMSUFOQ0VfUlBDX0VOQ09ESU5HPVdTLUkgY29tcGxpYW5jZSB3YXJuaW5nOiBiaW5kaW5nIHNob3VsZCBub3QgYmUgcnBjIGVuY29kZWQKLV9FUlJPUl9XU0lfQ09NUExJQU5DRV9SUENfRU5DT0RJTkc9V1MtSSBjb21wbGlhbmNlIGVycm9yOiBiaW5kaW5nIGNhbm5vdCBiZSBycGMgZW5jb2RlZAotX1dTSV9DT01QTElBTkNFX0xJTktfVEVYVD1Nb2RpZnkgcHJvamVjdCBjb21wbGlhbmNlIHNldHRpbmcKLQotX1VJX0xBQkVMX1VOREVGSU5FRF9BUkcxPXswfSB1bmRlZmluZWQKLV9VSV9MQUJFTF9VTkRFRklORURfQVJHMj17MH0gdW5kZWZpbmVkOiAnJ3sxfScnCi1fVUlfTEFCRUxfT1JfVU5ERUZJTkVEX0FSRzI9ezB9IG9yIHsxfSB1bmRlZmluZWQKLV9VSV9MQUJFTF9PUl9VTkRFRklORURfQVJHMz17MH0gb3IgezF9IHVuZGVmaW5lZDogJyd7Mn0nJwotX1VJX0xBQkVMX05PX09CSkVDVF9TUEVDSUZJRURfQVJHMT1ubyB7MH0gc3BlY2lmaWVkCi1fVUlfTEFCRUxfTk9fUEFSQU1FVEVSU19TUEVDSUZJRUQ9bm8gcGFyYW1ldGVycyBzcGVjaWZpZWQKLQotX1VJX0xBQkVMX0RFRkFVTFQgPSBkZWZhdWx0Ci0KLV9VSV9FRElUT1JfTkFNRT1XU0RMIEVkaXRvcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9wcm9wZXJ0aWVzL3NlY3Rpb25zL0VkaXRvck1vZGVTZWN0aW9uRmlsdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3Byb3BlcnRpZXMvc2VjdGlvbnMvRWRpdG9yTW9kZVNlY3Rpb25GaWx0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODhhNzBkZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3Byb3BlcnRpZXMvc2VjdGlvbnMvRWRpdG9yTW9kZVNlY3Rpb25GaWx0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5wcm9wZXJ0aWVzLnNlY3Rpb25zOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgRWRpdG9yTW9kZVNlY3Rpb25GaWx0ZXIKLXsKLSAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gaXNBcHBsaWNhYmxlKENsYXNzIHNlY3Rpb25DbGFzcywgT2JqZWN0IG9iamVjdCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3Byb3BlcnRpZXMvc2VjdGlvbnMvVzExRXh0ZW5zaW9uc1NlY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvcHJvcGVydGllcy9zZWN0aW9ucy9XMTFFeHRlbnNpb25zU2VjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjMxZjA0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvcHJvcGVydGllcy9zZWN0aW9ucy9XMTFFeHRlbnNpb25zU2VjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5wcm9wZXJ0aWVzLnNlY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5JUHJlZmVyZW5jZVN0b3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyRmlsdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmxlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLm1vZGVsLkFic3RyYWN0TW9kZWxDb2xsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZEV4dGVuc2lvbkVsZW1lbnRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmZpbHRlci5FeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnRleHQuV1NETE1vZGVsQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuRWxlbWVudEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5jb21tb24uY29tbWFuZHMuQWRkRXh0ZW5zaW9uQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmNvbW1vbi5jb21tYW5kcy5SZW1vdmVFeHRlbnNpb25Ob2RlQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmNvbW1vbi5wcm9wZXJ0aWVzLnNlY3Rpb25zLkFic3RyYWN0RXh0ZW5zaW9uc1NlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5jb21tb24ucHJvcGVydGllcy5zZWN0aW9ucy5hcHBpbmZvLkFkZEV4dGVuc2lvbnNDb21wb25lbnREaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5jb21tb24ucHJvcGVydGllcy5zZWN0aW9ucy5hcHBpbmZvLkRPTUV4dGVuc2lvblRyZWVDb250ZW50UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5jb21tb24ucHJvcGVydGllcy5zZWN0aW9ucy5hcHBpbmZvLkRPTUV4dGVuc2lvblRyZWVMYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuY29tbW9uLnByb3BlcnRpZXMuc2VjdGlvbnMuYXBwaW5mby5FeHRlbnNpb25zU2NoZW1hc1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuY29tbW9uLnByb3BlcnRpZXMuc2VjdGlvbnMuYXBwaW5mby5jdXN0b20uTm9kZUN1c3RvbWl6YXRpb25SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmVkaXRvci5YU0RFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREF0dHJpYnV0ZURlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RFbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi1wdWJsaWMgY2xhc3MgVzExRXh0ZW5zaW9uc1NlY3Rpb24gZXh0ZW5kcyBBYnN0cmFjdEV4dGVuc2lvbnNTZWN0aW9uCi17Ci0gIFdTRExNb2RlbEFkYXB0ZXIgbW9kZWxBZGFwdGVyOwotICAKLSAgcHVibGljIFcxMUV4dGVuc2lvbnNTZWN0aW9uKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gICAgc2V0RXh0ZW5zaW9uVHJlZUxhYmVsUHJvdmlkZXIobmV3IFdTRExFeHRlbnNpb25UcmVlTGFiZWxQcm92aWRlcigpKTsKLSAgICBzZXRFeHRlbnNpb25UcmVlQ29udGVudFByb3ZpZGVyKG5ldyBXU0RMRXh0ZW5zaW9uVHJlZUNvbnRlbnRQcm92aWRlcigpKTsKLSAgfQotCi0gIHByb3RlY3RlZCBBZGRFeHRlbnNpb25Db21tYW5kIGdldEFkZEV4dGVuc2lvbkNvbW1hbmQoT2JqZWN0IG8pCi0gIHsKLSAgICBBZGRFeHRlbnNpb25Db21tYW5kIGFkZEV4dGVuc2lvbkNvbW1hbmQgPSBudWxsOwotICAgIEV4dGVuc2libGVFbGVtZW50IGV4dGVuc2libGVFbGVtZW50ID0gZ2V0RXh0ZW5zaWJsZUVsZW1lbnQoaW5wdXQpOwotICAgIGlmIChleHRlbnNpYmxlRWxlbWVudCAhPSBudWxsKQotICAgIHsgIAotICAgICAgaWYgKG8gaW5zdGFuY2VvZiBYU0RFbGVtZW50RGVjbGFyYXRpb24pCi0gICAgICB7Ci0gICAgICAgIFhTREVsZW1lbnREZWNsYXJhdGlvbiBlbGVtZW50ID0gKFhTREVsZW1lbnREZWNsYXJhdGlvbikgbzsKLSAgICAgICAgYWRkRXh0ZW5zaW9uQ29tbWFuZCA9IG5ldyBBZGRFeHRlbnNpb25FbGVtZW50Q29tbWFuZChNZXNzYWdlcy5fVUlfTEFCRUxfQUREX0VYVEVOU0lPTl9FTEVNRU5ULCBleHRlbnNpYmxlRWxlbWVudCwgZWxlbWVudCk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKG8gaW5zdGFuY2VvZiBYU0RBdHRyaWJ1dGVEZWNsYXJhdGlvbikKLSAgICAgIHsKLSAgICAgICAgLy8gVE9ETyAoY3MpIG5lZWQgdG8gaW1wbGVtZW50IHRoaXMKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGFkZEV4dGVuc2lvbkNvbW1hbmQ7Ci0gIH0KLQotICBwcm90ZWN0ZWQgQ29tbWFuZCBnZXRSZW1vdmVFeHRlbnNpb25Db21tYW5kKE9iamVjdCBvKQotICB7Ci0gICAgaWYgKG8gaW5zdGFuY2VvZiBOb2RlKQotICAgIHsKLSAgICAgIHJldHVybiBuZXcgUmVtb3ZlRXh0ZW5zaW9uTm9kZUNvbW1hbmQoInJlbW92ZSIsIChOb2RlKW8pOyAvLyROT04tTkxTLTEkCi0gICAgfSAgCi0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIAotICAvLyBUT0RPIChjcykgdGhlIEFic3RyYWN0RXh0ZW5zaW9uc1NlY3Rpb24gaXMgcG9sbHV0ZWQgd2l0aCBYU0Qgc3BlY2ljIHN0dWZmCi0gIC8vIG5lZWQgdG8gY2xlYW4gdGhhdCB1cCEhCi0gIC8vIFRPRE8gKGNzKSB3ZSBzaG91bGQgYXZvaWQgcmVmZXJlbmNpbmcgV1NETCBtb2RlbCBvYmplY3RzIC4uLiBnbyB0aHJ1IGZhY2FkZSBpbnN0ZWFkCi0gIHB1YmxpYyB2b2lkIHNldElucHV0KElXb3JrYmVuY2hQYXJ0IHBhcnQsIElTZWxlY3Rpb24gc2VsZWN0aW9uKQotICB7ICAgIAotICAgIHN1cGVyLnNldElucHV0KHBhcnQsIHNlbGVjdGlvbik7Ci0gICAgaXNSZWFkT25seSA9IHRydWU7ICAgIAotICAgIEV4dGVuc2libGVFbGVtZW50IGV4dGVuc2libGVFbGVtZW50ID0gZ2V0RXh0ZW5zaWJsZUVsZW1lbnQoaW5wdXQpOwotICAgIGlmIChleHRlbnNpYmxlRWxlbWVudCAhPSBudWxsKQotICAgIHsgICAgCi0gICAgICBFbGVtZW50IGVsZW1lbnQgPSBleHRlbnNpYmxlRWxlbWVudC5nZXRFbGVtZW50KCk7Ci0gICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEVsZW1lbnRJbXBsKQotICAgICAgeyAgCi0gICAgICAgIGlzUmVhZE9ubHkgPSBmYWxzZTsKLSAgICAgICAgbW9kZWxBZGFwdGVyID0gV1NETE1vZGVsQWRhcHRlci5sb29rdXBPckNyZWF0ZU1vZGVsQWRhcHRlcihlbGVtZW50LmdldE93bmVyRG9jdW1lbnQoKSk7Ci0gICAgICAgIG1vZGVsQWRhcHRlci5nZXRNb2RlbFJlY29uY2lsZUFkYXB0ZXIoKS5hZGRMaXN0ZW5lcihpbnRlcm5hbE5vZGVBZGFwdGVyKTsKLSAgICAgIH0gICAgICAgICAKLSAgICB9ICAgICAgIAotICAgIGFkZEJ1dHRvbi5zZXRFbmFibGVkKCFpc1JlYWRPbmx5KTsKLSAgICByZW1vdmVCdXR0b24uc2V0RW5hYmxlZCghaXNSZWFkT25seSk7ICAgICAgICAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKQotICB7Ci0gICAgc3VwZXIuZGlzcG9zZSgpOwotICAgIGlmIChtb2RlbEFkYXB0ZXIgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBtb2RlbEFkYXB0ZXIuZ2V0TW9kZWxSZWNvbmNpbGVBZGFwdGVyKCkucmVtb3ZlTGlzdGVuZXIoaW50ZXJuYWxOb2RlQWRhcHRlcik7Ci0gICAgfSAgCi0gIH0KLSAgCi0gIC8vIFRPRE8gKGNzKSBpbiB0aGUgZnV0dXJlIHdlIG5lZWQgdG8gJ2ZpeCcgdGhpbmdzIHNvIHRoYXQgd2UgY2FuIHJpZCBvZiB0aGlzIG1ldGhvZAotICAvLyB3ZSBuZWVkIGEgd2F5IHRvIGRvIGFsbCBvZiB0aGlzIHZpYSB0aGUgZmFjYWRlIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSBhbnkgZGlyZWN0IAotICAvLyBkZXBlbmRlbmN5IG9uIHRoZSBXU0RMMS4xIG1vZGVsLi8gU2ltaWxhcmx5IHRoaXMgY2xhc3Mgc2hvdWxkbid0IG5lZWQgdG8gJ2tub3cnCi0gIC8vIGFib3V0IEFic3RyYWN0TW9kZWxDb2xsZWN0aW9uIHRoaXMgaXMgYW4gdW5kZXJseWluZyBkZXRhaWwgdGhhdCBuZWVkcyB0byBiZSBoaWRkZW4KLSAgLy8gCi0gIHByaXZhdGUgc3RhdGljIEV4dGVuc2libGVFbGVtZW50IGdldEV4dGVuc2libGVFbGVtZW50KE9iamVjdCBvKQotICB7Ci0gICAgaWYgKG8gaW5zdGFuY2VvZiBBYnN0cmFjdE1vZGVsQ29sbGVjdGlvbikKLSAgICB7ICAgICAgICAgCi0gICAgICBvID0gKChBYnN0cmFjdE1vZGVsQ29sbGVjdGlvbilvKS5nZXRNb2RlbCgpOwotICAgIH0gIAotICAgIGlmIChvIGluc3RhbmNlb2YgQWRhcHRlcikKLSAgICB7Ci0gICAgICAvLyBUT0RPIChjcykgd2UgbmVlZCBhIHdheSB0byBkbyBhbGwgb2YgdGhpcyB2aWEgdGhlIGZhY2FkZQotICAgICAgLy8gc28gdGhhdCB3ZSBkb24ndCBoYXZlIGFueSBkaXJlY3QgZGVwZW5kZW5jeSBvbiB0aGUgV1NETDEuMSBtb2RlbAotICAgICAgLy8gb2YgY291cnNlIGF0IHRoZSBtb21lbnQgd2UgY2FsbCB0aGlzIGNsYXNzIHRoZSBXMTFFeHRlbnNpb25TZWN0aW9ucwotICAgICAgLy8gc28gdGhhdCdzIG5vdCBhIHByb2JsZW0uICBJbiB0aGUgZnV0dXJlIHRob3VnaCB3ZSdsbCB3YW50IHRvIHJldXNlIHRoaXMgCi0gICAgICAvLyBjbGFzcyBmb3IgV1NETCAyLjAuCi0gICAgICAvLyAgICAgICAKLSAgICAgIG8gPSAoKEFkYXB0ZXIpbykuZ2V0VGFyZ2V0KCk7Ci0gICAgfSAgICAgIAotICAgIGlmIChvIGluc3RhbmNlb2YgRXh0ZW5zaWJsZUVsZW1lbnQpCi0gICAgewotICAgICAgcmV0dXJuIChFeHRlbnNpYmxlRWxlbWVudClvOwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHByb3RlY3RlZCBBZGRFeHRlbnNpb25zQ29tcG9uZW50RGlhbG9nIGNyZWF0ZUFkZEV4dGVuc2lvbnNDb21wb25lbnREaWFsb2coKQotICB7ICAgIAotICAgIEV4dGVuc2libGVFbGVtZW50IGV4dGVuc2libGVFbGVtZW50ID0gZ2V0RXh0ZW5zaWJsZUVsZW1lbnQoaW5wdXQpOwotICAgIGlmIChleHRlbnNpYmxlRWxlbWVudCAhPSBudWxsKQotICAgIHsgIAotICAgICAgQWRkRXh0ZW5zaW9uc0NvbXBvbmVudERpYWxvZyBkaWFsb2cgPSBuZXcgQWRkRXh0ZW5zaW9uc0NvbXBvbmVudERpYWxvZyhjb21wb3NpdGUuZ2V0U2hlbGwoKSwgZ2V0RXh0ZW5zaW9uc1NjaGVtYXNSZWdpc3RyeSgpKTsgICAKLSAgICAgIGRpYWxvZy5hZGRFbGVtZW50c1RhYmxlRmlsdGVyKG5ldyBBZGRFeHRlbnNpb25zQ29tcG9uZW50RGlhbG9nRmlsdGVyKGV4dGVuc2libGVFbGVtZW50LmdldEVsZW1lbnQoKSkpOwotICAgICAgcmV0dXJuIGRpYWxvZzsKLSAgICB9ICAgICAgCi0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwcm90ZWN0ZWQgRXh0ZW5zaW9uc1NjaGVtYXNSZWdpc3RyeSBnZXRFeHRlbnNpb25zU2NoZW1hc1JlZ2lzdHJ5KCkKLSAgewotICAgIHJldHVybiBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0RXh0ZW5zaW9uc1NjaGVtYXNSZWdpc3RyeSgpOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgSVByZWZlcmVuY2VTdG9yZSBnZXRQcmVmU3RvcmUoKQotICB7Ci0JcmV0dXJuIFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKTsKLSAgfQotIAotICBzdGF0aWMgY2xhc3MgV1NETEV4dGVuc2lvblRyZWVDb250ZW50UHJvdmlkZXIgZXh0ZW5kcyBET01FeHRlbnNpb25UcmVlQ29udGVudFByb3ZpZGVyCi0gIHsKLSAgICBwdWJsaWMgamF2YS5sYW5nLk9iamVjdFtdIGdldEVsZW1lbnRzKGphdmEubGFuZy5PYmplY3QgaW5wdXRFbGVtZW50KQotICAgIHsgICAgICAgICAKLSAgICAgIEV4dGVuc2libGVFbGVtZW50IGV4dGVuc2libGVFbGVtZW50ID0gZ2V0RXh0ZW5zaWJsZUVsZW1lbnQoaW5wdXRFbGVtZW50KTsKLSAgICAgIGlmIChleHRlbnNpYmxlRWxlbWVudCAhPSBudWxsKQotICAgICAgewotICAgICAgICBMaXN0IGRvbUVsZW1lbnRMaXN0ID0gbmV3IEFycmF5TGlzdCgpOyAgICAgCi0gICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IGV4dGVuc2libGVFbGVtZW50LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICAgIHsKLSAgICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBlbGVtZW50ID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWkubmV4dCgpOwotICAgICAgICAgIC8vIGFkZCB0aGUgRE9NIGVsZW1lbnQKLSAgICAgICAgICBkb21FbGVtZW50TGlzdC5hZGQoZWxlbWVudC5nZXRFbGVtZW50KCkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBkb21FbGVtZW50TGlzdC50b0FycmF5KCk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gQ29sbGVjdGlvbnMuRU1QVFlfTElTVC50b0FycmF5KCk7Ci0gICAgfQotICB9Ci0gIAotICBzdGF0aWMgY2xhc3MgV1NETEV4dGVuc2lvblRyZWVMYWJlbFByb3ZpZGVyIGV4dGVuZHMgRE9NRXh0ZW5zaW9uVHJlZUxhYmVsUHJvdmlkZXIKLSAgewotICAgIHByaXZhdGUgSUxhYmVsUHJvdmlkZXIgZ2V0TGFiZWxQcm92aWRlcihOb2RlIG5vZGUpCi0gICAgewotICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IG5vZGUuZ2V0TmFtZXNwYWNlVVJJKCk7ICAgICAgCi0gICAgICBpZiAobmFtZXNwYWNlICE9IG51bGwpCi0gICAgICB7ICAKLSAgICAgICAgTm9kZUN1c3RvbWl6YXRpb25SZWdpc3RyeSByZWdpc3RyeSA9IFhTREVkaXRvclBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0Tm9kZUN1c3RvbWl6YXRpb25SZWdpc3RyeSgpOyAgICAgIAotICAgICAgICByZXR1cm4gcmVnaXN0cnkuZ2V0TGFiZWxQcm92aWRlcihuYW1lc3BhY2UpOwotICAgICAgfSAgICAgICAgCi0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIEltYWdlIGdldEltYWdlKE9iamVjdCBvYmplY3QpCi0gICAgewotICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEVsZW1lbnQpCi0gICAgICB7Ci0gICAgICAgIEVsZW1lbnQgZWxlbWVudCA9IChFbGVtZW50KW9iamVjdDsKLSAgICAgICAgSUxhYmVsUHJvdmlkZXIgcHJvdmlkZXIgPSBnZXRMYWJlbFByb3ZpZGVyKGVsZW1lbnQpOwotICAgICAgICBpZiAocHJvdmlkZXIgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBwcm92aWRlci5nZXRJbWFnZShlbGVtZW50KTsKLSAgICAgICAgfSAgICAgICAgICAKLSAgICAgIH0KLSAgICAgIHJldHVybiBzdXBlci5nZXRJbWFnZShvYmplY3QpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KQotICAgIHsKLSAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBFbGVtZW50KQotICAgICAgewotICAgICAgICBFbGVtZW50IGVsZW1lbnQgPSAoRWxlbWVudClvYmplY3Q7Ci0gICAgICAgIElMYWJlbFByb3ZpZGVyIHByb3ZpZGVyID0gZ2V0TGFiZWxQcm92aWRlcihlbGVtZW50KTsKLSAgICAgICAgaWYgKHByb3ZpZGVyICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gcHJvdmlkZXIuZ2V0VGV4dChlbGVtZW50KTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgcmV0dXJuIHN1cGVyLmdldFRleHQob2JqZWN0KTsKLSAgICB9ICAgICAgICAKLSAgfQotICAvKioKLSAgICogVGhpcyBmaWx0ZXIgaXMgdG8gYmUgdXNlZCBieSB0aGUgZGlhbG9nIGludm9rZWQgd2hlbiBhZGRCdXR0b24gaXMgcHJlc3NlZAotICAgKi8KLSAgcHJpdmF0ZSBjbGFzcyBBZGRFeHRlbnNpb25zQ29tcG9uZW50RGlhbG9nRmlsdGVyIGV4dGVuZHMgVmlld2VyRmlsdGVyCi0gIHsKLSAgICBwcml2YXRlIEVsZW1lbnQgaG9zdEVsZW1lbnQ7Ci0KLSAgICBwdWJsaWMgQWRkRXh0ZW5zaW9uc0NvbXBvbmVudERpYWxvZ0ZpbHRlcihFbGVtZW50IGhvc3RFbGVtZW50KQotICAgIHsKLSAgICAgIHRoaXMuaG9zdEVsZW1lbnQgPSBob3N0RWxlbWVudDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBzZWxlY3QoVmlld2VyIHZpZXdlciwgT2JqZWN0IHBhcmVudEVsZW1lbnQsIE9iamVjdCBlbGVtZW50KQotICAgIHsKLSAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgWFNERWxlbWVudERlY2xhcmF0aW9uKQotICAgICAgewotICAgICAgICBTdHJpbmcgbmFtZXNwYWNlID0gKChYU0RFbGVtZW50RGVjbGFyYXRpb24pIGVsZW1lbnQpLmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgICAgICBTdHJpbmcgbmFtZSA9ICgoWFNERWxlbWVudERlY2xhcmF0aW9uKSBlbGVtZW50KS5nZXROYW1lKCk7Ci0gICAgICAgIEV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXIgZmlsdGVyID0gKEV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXIpIFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRFeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyUmVnaXN0cnkoKS5nZXRQcm9wZXJ0eShuYW1lc3BhY2UsICIiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICBpZiAoZmlsdGVyICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gZmlsdGVyLmlzVmFsaWRDb250ZXh0KGhvc3RFbGVtZW50LCBuYW1lKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgfQotICAKLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNUcmVlVmlld2VySW5wdXRFbGVtZW50KEVsZW1lbnQgZWxlbWVudCkKLSAgewotICAgIEV4dGVuc2libGVFbGVtZW50IGV4dGVuc2libGVFbGVtZW50ID0gZ2V0RXh0ZW5zaWJsZUVsZW1lbnQoaW5wdXQpOwotICAgIHJldHVybiBleHRlbnNpYmxlRWxlbWVudCAhPSBudWxsICYmIGV4dGVuc2libGVFbGVtZW50LmdldEVsZW1lbnQoKSA9PSBlbGVtZW50OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3Byb3BlcnRpZXMvc2VjdGlvbnMvVzExTWVzc2FnZVJlZmVyZW5jZVNlY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvcHJvcGVydGllcy9zZWN0aW9ucy9XMTFNZXNzYWdlUmVmZXJlbmNlU2VjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjA4YjM4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvcHJvcGVydGllcy9zZWN0aW9ucy9XMTFNZXNzYWdlUmVmZXJlbmNlU2VjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5wcm9wZXJ0aWVzLnNlY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ0NvbWJvOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ0xhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUF0dGFjaG1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLnRhYmJlZC5JVGFiYmVkUHJvcGVydHlDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy50YWJiZWQuVGFiYmVkUHJvcGVydHlTaGVldFdpZGdldEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5zZWFyY2guZGlhbG9ncy5Db21wb25lbnRTcGVjaWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yQ1NIZWxwSWRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUFTRE9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklNZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5wcm9wZXJ0aWVzLnNlY3Rpb25zLk5hbWVTZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuUmVmZXJlbmNlRWRpdE1hbmFnZXJIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5Db21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0LklDb21wb25lbnREaWFsb2c7Ci0KLXB1YmxpYyBjbGFzcyBXMTFNZXNzYWdlUmVmZXJlbmNlU2VjdGlvbiBleHRlbmRzIE5hbWVTZWN0aW9uIHsKLQlwcm90ZWN0ZWQgc3RhdGljIFN0cmluZyBORVdfU1RSSU5HID0gTWVzc2FnZXMuX1VJX0JVVFRPTl9ORVc7IC8vJE5PTi1OTFMtMSQKLQlwcm90ZWN0ZWQgc3RhdGljIFN0cmluZyBCUk9XU0VfU1RSSU5HID0gTWVzc2FnZXMuX1VJX0JVVFRPTl9CUk9XU0U7IC8vJE5PTi1OTFMtMSQKLQkKLQlwcm90ZWN0ZWQgQ0xhYmVsIGNvbWJvTGFiZWw7IAotCXByb3RlY3RlZCBDQ29tYm8gY29tYm87Ci0JcHJvdGVjdGVkIENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIHJlZk1hbmFnZXI7Ci0KLQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9scyhDb21wb3NpdGUgcGFyZW50LCBUYWJiZWRQcm9wZXJ0eVNoZWV0V2lkZ2V0RmFjdG9yeSBmYWN0b3J5KQotCXsKLQkJc3VwZXIuY3JlYXRlQ29udHJvbHMocGFyZW50LCBmYWN0b3J5KTsKLQkJY3JlYXRlQ29udHJvbEFyZWEoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbEFyZWEoKQotCXsKLQkJRm9ybURhdGEgZGF0YTsKLQkJCi0JCWNvbWJvID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZUNDb21ibyhjb21wb3NpdGUpOwotCQljb21iby5zZXRCYWNrZ3JvdW5kKGNvbXBvc2l0ZS5nZXRCYWNrZ3JvdW5kKCkpOwotCQljb21iby5hZGRMaXN0ZW5lcihTV1QuTW9kaWZ5LCB0aGlzKTsKLQkJY29tYm8uYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0JCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoY29tYm8sIEFTREVkaXRvckNTSGVscElkcy5QUk9QRVJUSUVTX01FU1NBR0VfUkVGX01FU1NBR0VfQ09NQk8pOwotCQkKLQkJY29tYm9MYWJlbCA9IGdldFdpZGdldEZhY3RvcnkoKS5jcmVhdGVDTGFiZWwoY29tcG9zaXRlLCBNZXNzYWdlcy5fVUlfTEFCRUxfTUVTU0FHRSArICI6Iik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQlkYXRhID0gbmV3IEZvcm1EYXRhKCk7Ci0JCWRhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKLQkJZGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudChjb21ibywgLUlUYWJiZWRQcm9wZXJ0eUNvbnN0YW50cy5IU1BBQ0UpOwotCQlkYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChjb21ibywgMCwgU1dULkNFTlRFUik7Ci0JCWNvbWJvTGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsKLQkJCi0JCWRhdGEgPSBuZXcgRm9ybURhdGEoKTsKLQkJZGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDEwMCk7Ci0vLwkJZGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudChidXR0b24sIDApOwotCQlkYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgLXJpZ2h0TWFyZ2luU3BhY2UgLSBJVGFiYmVkUHJvcGVydHlDb25zdGFudHMuSFNQQUNFKTsKLQkJZGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQobmFtZVRleHQsICtJVGFiYmVkUHJvcGVydHlDb25zdGFudHMuVlNQQUNFKTsKLQkJY29tYm8uc2V0TGF5b3V0RGF0YShkYXRhKTsKLQl9Ci0JCi0JLyoKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkucHJvcGVydGllcy5pbnRlcm5hbC5wcm92aXNpb25hbC52aWV3LklUYWJiZWRQcm9wZXJ0eVNlY3Rpb24jcmVmcmVzaCgpCi0JICovCi0JcHVibGljIHZvaWQgcmVmcmVzaCgpIHsKLQkJc3VwZXIucmVmcmVzaCgpOwotCQlpZiAobmFtZVRleHQuaXNGb2N1c0NvbnRyb2woKSkgewotCQkJcmV0dXJuOwotCQl9Ci0JCXNldExpc3RlbmVyRW5hYmxlZChmYWxzZSk7Ci0JCVN0cmluZyByZWZOYW1lID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJCi0JCWNvbWJvLnJlbW92ZUFsbCgpOwotCQljb21iby5hZGQoQlJPV1NFX1NUUklORyk7Ci0JCWNvbWJvLmFkZChORVdfU1RSSU5HKTsKLQkJCi0JCU1lc3NhZ2VSZWZlcmVuY2UgbWVzc2FnZVJlZiA9IChNZXNzYWdlUmVmZXJlbmNlKSAoKFcxMU1lc3NhZ2VSZWZlcmVuY2UpIGdldE1vZGVsKCkpLmdldFRhcmdldCgpOwotCQlpZiAobWVzc2FnZVJlZiAhPSBudWxsICYmIG1lc3NhZ2VSZWYuZ2V0RU1lc3NhZ2UoKSAhPSBudWxsKSB7Ci0JCQlyZWZOYW1lID0gbWVzc2FnZVJlZi5nZXRFTWVzc2FnZSgpLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0JCX0KLQkJCi0JCUNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIGVkaXRNYW5hZ2VyID0gZ2V0Q29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIoKTsKLQkJaWYgKGVkaXRNYW5hZ2VyICE9IG51bGwpIHsKLQkJCUNvbXBvbmVudFNwZWNpZmljYXRpb25bXSBzcGVjcyA9IGVkaXRNYW5hZ2VyLmdldFF1aWNrUGlja3MoKTsKLQkJCWZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBzcGVjcy5sZW5ndGg7IGluZGV4KyspIHsKLQkJCQljb21iby5hZGQoKFN0cmluZykgc3BlY3NbaW5kZXhdLmdldE5hbWUoKSk7Ci0JCQl9Ci0JCX0JCQotCQkKLQkJU3RyaW5nW10gaXRlbXMgPSBjb21iby5nZXRJdGVtcygpOwotCQlpbnQgaW5kZXg7Ci0JCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGl0ZW1zLmxlbmd0aDsgaW5kZXgrKykgewotCQkJaWYgKGl0ZW1zW2luZGV4XS5lcXVhbHMocmVmTmFtZSkpIHsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQkKLQkJaWYgKGluZGV4IDwgaXRlbXMubGVuZ3RoKSB7Ci0JCQkvLyBGb3VuZCBhIG1hdGNoCi0JCQljb21iby5zZWxlY3QoaW5kZXgpOwotCQl9Ci0JCWVsc2UgewotCQkJY29tYm8uc2V0VGV4dChyZWZOYW1lKTsKLQkJfQotCi0JCXNldENvbnRyb2xGb3JlZ3JvdW5kQ29sb3IoY29tYm8pOwotCQlzZXRMaXN0ZW5lckVuYWJsZWQodHJ1ZSk7Ci0KLQotLy8JCU1lc3NhZ2VSZWZlcmVuY2UgbWVzc2FnZVJlZiA9IChNZXNzYWdlUmVmZXJlbmNlKSAoKFcxMU1lc3NhZ2VSZWZlcmVuY2UpIGdldE1vZGVsKCkpLmdldFRhcmdldCgpOwotLy8JCUl0ZXJhdG9yIGl0ID0gbWVzc2FnZVJlZi5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkuZ2V0RU1lc3NhZ2VzKCkuaXRlcmF0b3IoKTsKLS8vCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0vLwkJCU1lc3NhZ2UgbWVzc2FnZSA9IChNZXNzYWdlKSBpdC5uZXh0KCk7Ci0vLwkJCWNvbWJvLmFkZChtZXNzYWdlLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkpOwotLy8JCX0KLQl9Ci0JCi0JcHJvdGVjdGVkIENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIGdldENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKCkgewotCQlpZiAocmVmTWFuYWdlciAhPSBudWxsKSB7Ci0JCQlyZXR1cm4gcmVmTWFuYWdlcjsKLQkJfQotCi0JCXJlZk1hbmFnZXIgPSBSZWZlcmVuY2VFZGl0TWFuYWdlckhlbHBlci5nZXRNZXNzYWdlUmVmZXJlbmNlRWRpdE1hbmFnZXIoKElBU0RPYmplY3QpIGdldE1vZGVsKCkpOwotICAgICAgICAKLQkJcmV0dXJuIHJlZk1hbmFnZXI7Ci0JfQotCi0JCi0JcHVibGljIGJvb2xlYW4gc2hvdWxkVXNlRXh0cmFTcGFjZSgpCi0JewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCQotCXB1YmxpYyB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50IGV2ZW50KQotCXsKLQkJaWYgKGV2ZW50LndpZGdldCA9PSBjb21ibykgewotCQkJaWYgKGlzTGlzdGVuZXJFbmFibGVkKCkgJiYgIWlzSW5Eb0hhbmRsZSkgCi0JCQl7Ci0JCQkJaXNJbkRvSGFuZGxlID0gdHJ1ZTsKLQkJCQlzdGFydERlbGF5ZWRFdmVudChldmVudCk7Ci0JCQkJaXNJbkRvSGFuZGxlID0gZmFsc2U7Ci0JCQl9Ci0JCX0KLQkJZWxzZSB7Ci0JCQlzdXBlci5oYW5kbGVFdmVudChldmVudCk7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHZvaWQgZG9IYW5kbGVFdmVudChFdmVudCBldmVudCkKLQl7Ci0JCXN1cGVyLmRvSGFuZGxlRXZlbnQoZXZlbnQpOwotCQlpZiAoZXZlbnQud2lkZ2V0ID09IGNvbWJvKSB7Ci0JCQlTdHJpbmcgdmFsdWUgPSAiIjsgLy8kTk9OLU5MUy0xJAotCQkJaWYgKGNvbWJvLmdldFNlbGVjdGlvbkluZGV4KCkgIT0gLTEpIHsKLQkJCQl2YWx1ZSA9IGNvbWJvLmdldEl0ZW0oY29tYm8uZ2V0U2VsZWN0aW9uSW5kZXgoKSk7Ci0JCQl9Ci0JCQkKLQkJCUNvbXBvbmVudFNwZWNpZmljYXRpb24gc3BlYyA9IG51bGw7Ci0JCQlpbnQgY29udGludWVBcHBseSA9IFdpbmRvdy5PSzsKLQkJCUlNZXNzYWdlUmVmZXJlbmNlIG1lc3NhZ2VSZWYgPSAoSU1lc3NhZ2VSZWZlcmVuY2UpIHRoaXMuZ2V0TW9kZWwoKTsKLQkJCQotCQkJaWYgKHZhbHVlLmVxdWFscyhORVdfU1RSSU5HKSkgewotCQkJCUNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIGVkaXRNYW5hZ2VyID0gZ2V0Q29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIoKTsKLQkJCQlJQ29tcG9uZW50RGlhbG9nIGRpYWxvZyA9IGVkaXRNYW5hZ2VyLmdldE5ld0RpYWxvZygpOwotCQkJCWNvbnRpbnVlQXBwbHkgPSBkaWFsb2cuY3JlYXRlQW5kT3BlbigpOwotCQkJCXNwZWMgPSBkaWFsb2cuZ2V0U2VsZWN0ZWRDb21wb25lbnQoKTsKLQkJCX0KLQkJCWVsc2UgaWYgKHZhbHVlLmVxdWFscyhCUk9XU0VfU1RSSU5HKSkgewotCQkJCUNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIGVkaXRNYW5hZ2VyID0gZ2V0Q29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIoKTsKLQkJCQlJQ29tcG9uZW50RGlhbG9nIGRpYWxvZyA9IGVkaXRNYW5hZ2VyLmdldEJyb3dzZURpYWxvZygpOwotCQkJCWNvbnRpbnVlQXBwbHkgPSBkaWFsb2cuY3JlYXRlQW5kT3BlbigpOwotCQkJCXNwZWMgPSBkaWFsb2cuZ2V0U2VsZWN0ZWRDb21wb25lbnQoKTsJCQkJCi0JCQl9Ci0JCQllbHNlIHsKLQkJCQlzcGVjID0gZ2V0Q29tcG9uZW50U3BlY2lmaWNhdGlvbkZvclZhbHVlKChTdHJpbmcpdmFsdWUpOwotCQkJfQotCQkJCi0JCQlpZiAoY29udGludWVBcHBseSA9PSBXaW5kb3cuT0spIHsKLQkJCQlDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBlZGl0TWFuYWdlciA9IGdldENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKCk7Ci0JCQkJaWYgKHNwZWMgIT0gbnVsbCkgewotCQkJCQllZGl0TWFuYWdlci5tb2RpZnlDb21wb25lbnRSZWZlcmVuY2UobWVzc2FnZVJlZiwgc3BlYyk7Ci0JCQkJfQotCQkJfQotCQkJCi0JCQkKLQkJfQotCX0KLQkKLQlwcm90ZWN0ZWQgQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBnZXRDb21wb25lbnRTcGVjaWZpY2F0aW9uRm9yVmFsdWUoU3RyaW5nIHZhbHVlKQotCXsKLQkJQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgZWRpdE1hbmFnZXIgPSBnZXRDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcigpOwotCQlpZiAoZWRpdE1hbmFnZXIgIT0gbnVsbCkKLQkJeyAgCi0JCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uW10gcXVpY2tQaWNrcyA9IGVkaXRNYW5hZ2VyLmdldFF1aWNrUGlja3MoKTsKLQkJCWlmIChxdWlja1BpY2tzICE9IG51bGwpCi0JCQl7Ci0JCQkJZm9yIChpbnQgaT0wOyBpIDwgcXVpY2tQaWNrcy5sZW5ndGg7IGkrKykKLQkJCQl7Ci0JCQkJCUNvbXBvbmVudFNwZWNpZmljYXRpb24gY29tcG9uZW50U3BlY2lmaWNhdGlvbiA9IHF1aWNrUGlja3NbaV07Ci0JCQkJCWlmICh2YWx1ZS5lcXVhbHMoY29tcG9uZW50U3BlY2lmaWNhdGlvbi5nZXROYW1lKCkpKQotCQkJCQl7Ci0JCQkJCQlyZXR1cm4gY29tcG9uZW50U3BlY2lmaWNhdGlvbjsKLQkJCQkJfSAgICAgICAgICAgICAgICAKLQkJCQl9ICAKLQkJCX0KLQkJCUNvbXBvbmVudFNwZWNpZmljYXRpb25bXSBoaXN0b3J5ID0gZWRpdE1hbmFnZXIuZ2V0SGlzdG9yeSgpOwotCQkJaWYgKGhpc3RvcnkgIT0gbnVsbCkKLQkJCXsKLQkJCQlmb3IgKGludCBpPTA7IGkgPCBoaXN0b3J5Lmxlbmd0aDsgaSsrKQotCQkJCXsKLQkJCQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBjb21wb25lbnRTcGVjaWZpY2F0aW9uID0gaGlzdG9yeVtpXTsKLQkJCQkJaWYgKHZhbHVlLmVxdWFscyhjb21wb25lbnRTcGVjaWZpY2F0aW9uLmdldE5hbWUoKSkpCi0JCQkJCXsgIAotCQkJCQkJcmV0dXJuIGNvbXBvbmVudFNwZWNpZmljYXRpb247Ci0JCQkJCX0KLQkJCQl9ICAKLQkJCX0KLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9wcm9wZXJ0aWVzL3NlY3Rpb25zL1cxMU1lc3NhZ2VSZWZlcmVuY2VTZWN0aW9uRmlsdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3Byb3BlcnRpZXMvc2VjdGlvbnMvVzExTWVzc2FnZVJlZmVyZW5jZVNlY3Rpb25GaWx0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2FjNTU2Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3Byb3BlcnRpZXMvc2VjdGlvbnMvVzExTWVzc2FnZVJlZmVyZW5jZVNlY3Rpb25GaWx0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5wcm9wZXJ0aWVzLnNlY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JRmlsdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU1lc3NhZ2VSZWZlcmVuY2U7Ci0KLXB1YmxpYyBjbGFzcyBXMTFNZXNzYWdlUmVmZXJlbmNlU2VjdGlvbkZpbHRlciBpbXBsZW1lbnRzIElGaWx0ZXIgewotCS8vIHJtYWg6IHdlIHNob3VsZCBjb25zaWRlciBvdGhlciB3YXlzIG9mICdleHRlbmRpbmcnIHRoaXMgY2FwYWJpbGl0eQotCS8vIHJhdGhlciB0aGFuIHNpbXBseSBjaGVja2luZyBhIHZhcmlhYmxlLi4uLgotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBzaG93VzExTWVzc2FnZVJlZmVyZW5jZVNlY3Rpb24gPSB0cnVlOwotCQotCXB1YmxpYyBib29sZWFuIHNlbGVjdChPYmplY3QgdG9UZXN0KSB7Ci0JCWlmICh0b1Rlc3QgaW5zdGFuY2VvZiBJTWVzc2FnZVJlZmVyZW5jZSAmJiBzaG93VzExTWVzc2FnZVJlZmVyZW5jZVNlY3Rpb24pIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvcHJvcGVydGllcy9zZWN0aW9ucy9XMTFQYXJhbWV0ZXJTZWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3Byb3BlcnRpZXMvc2VjdGlvbnMvVzExUGFyYW1ldGVyU2VjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjI2MmQ0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvcHJvcGVydGllcy9zZWN0aW9ucy9XMTFQYXJhbWV0ZXJTZWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnByb3BlcnRpZXMuc2VjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ0xhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtQXR0YWNobWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1EYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy50YWJiZWQuSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuQ29tcG9uZW50U3BlY2lmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMVBhcmFtZXRlckZvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvckNTSGVscElkczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklBU0RPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5wcm9wZXJ0aWVzLnNlY3Rpb25zLlBhcmFtZXRlclNlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5Db21wb25lbnRSZWZlcmVuY2VVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuUmVmZXJlbmNlRWRpdE1hbmFnZXJIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5Db21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLQotcHVibGljIGNsYXNzIFcxMVBhcmFtZXRlclNlY3Rpb24gZXh0ZW5kcyBQYXJhbWV0ZXJTZWN0aW9uIHsKLQlwcm90ZWN0ZWQgQnV0dG9uIHR5cGVSYWRpbzsKLQlwcm90ZWN0ZWQgQnV0dG9uIGVsZW1lbnRSYWRpbzsKLQlwcm90ZWN0ZWQgQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgcmVmTWFuYWdlcjsKLQkKLQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sQXJlYSgpCXsKLQkJc3VwZXIuY3JlYXRlQ29udHJvbEFyZWEoKTsKLQkJRm9ybURhdGEgZGF0YTsKLQkJCi0JCUNMYWJlbCByZWZlcmVuY2VLaW5kTGFiZWwgPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlQ0xhYmVsKGNvbXBvc2l0ZSwgTWVzc2FnZXMuX1VJX0xBQkVMX1JFRkVSRU5DRV9LSU5EICsgIjoiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCUNvbXBvc2l0ZSBjb21wID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZUNvbXBvc2l0ZShjb21wb3NpdGUpOwotCQlHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0JCWxheW91dC5udW1Db2x1bW5zID0gMjsKLQkJbGF5b3V0Lm1hcmdpbkhlaWdodCA9IDA7Ci0JCWxheW91dC5tYXJnaW5XaWR0aCA9IDA7Ci0JCWxheW91dC5tYXJnaW5SaWdodCA9IDU7Ci0JCWNvbXAuc2V0TGF5b3V0KGxheW91dCk7Ci0JCQotCQlkYXRhID0gbmV3IEZvcm1EYXRhKCk7Ci0JCWRhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKLQkJZGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudChjb21wLCAtSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLkhTUEFDRSk7Ci0JCWRhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGNvbXAsIDAsIFNXVC5DRU5URVIpOwotCQlyZWZlcmVuY2VLaW5kTGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsKLQkJCi0JCXR5cGVSYWRpbyA9IGdldFdpZGdldEZhY3RvcnkoKS5jcmVhdGVCdXR0b24oY29tcCwgTWVzc2FnZXMuX1VJX0xBQkVMX1RZUEUsIFNXVC5SQURJTyk7IC8vJE5PTi1OTFMtMSQKLQkJZWxlbWVudFJhZGlvID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZUJ1dHRvbihjb21wLCBNZXNzYWdlcy5fVUlfTEFCRUxfRUxFTUVOVCwgU1dULlJBRElPKTsJIC8vJE5PTi1OTFMtMSQKLQkJdHlwZVJhZGlvLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOwotCQllbGVtZW50UmFkaW8uYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0JCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAodHlwZVJhZGlvLCBBU0RFZGl0b3JDU0hlbHBJZHMuUFJPUEVSVElFU19QQVJUX1RZUEVfUkFESU8pOwotCQlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKGVsZW1lbnRSYWRpbywgQVNERWRpdG9yQ1NIZWxwSWRzLlBST1BFUlRJRVNfUEFSVF9FTEVNRU5UX1JBRElPKTsKLQkJCi0JCWRhdGEgPSBuZXcgRm9ybURhdGEoKTsKLQkJZGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDEwMCk7Ci0JCWRhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGNvbWJvLCArSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLlZTUEFDRSk7Ci0JCWNvbXAuc2V0TGF5b3V0RGF0YShkYXRhKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgZG9XaWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JCVcxMVBhcmFtZXRlckZvclBhcnQgcGFyYW1ldGVyID0gKFcxMVBhcmFtZXRlckZvclBhcnQpIHRoaXMuZ2V0TW9kZWwoKTsKLQkJUGFydCBwYXJ0ID0gKFBhcnQpIHBhcmFtZXRlci5nZXRUYXJnZXQoKTsKLQkJCi0JCWlmIChlLndpZGdldCA9PSB0eXBlUmFkaW8gJiYgdHlwZVJhZGlvLmdldFNlbGVjdGlvbigpKSB7Ci0JCQljb21ib0xhYmVsLnNldFRleHQoTWVzc2FnZXMuX1VJX0xBQkVMX1RZUEUrICI6Iik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJQ29tcG9uZW50UmVmZXJlbmNlVXRpbC5zZXRDb21wb25lbnRSZWZlcmVuY2UocGFydCwgdHJ1ZSwgbnVsbCk7Ci0JCQlzdXBlci5yZWZyZXNoQ29tYm8oKTsKLQkJfQotCQllbHNlIGlmIChlLndpZGdldCA9PSBlbGVtZW50UmFkaW8gJiYgZWxlbWVudFJhZGlvLmdldFNlbGVjdGlvbigpKSB7Ci0JCQljb21ib0xhYmVsLnNldFRleHQoTWVzc2FnZXMuX1VJX0xBQkVMX0VMRU1FTlQgKyAiOiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJCUNvbXBvbmVudFJlZmVyZW5jZVV0aWwuc2V0Q29tcG9uZW50UmVmZXJlbmNlKHBhcnQsIGZhbHNlLCBudWxsKTsKLQkJCXJlZnJlc2hFbGVtZW50Q29tYm8oKTsKLQkJfQotCX0KLQkKLQlwdWJsaWMgdm9pZCBkb0hhbmRsZUV2ZW50KEV2ZW50IGV2ZW50KSB7Ci0JCWlmIChldmVudC53aWRnZXQgPT0gY29tYm8pIHsKLQkJCWlmIChlbGVtZW50UmFkaW8uZ2V0U2VsZWN0aW9uKCkpIHsKLQkJCQkvLyBIYW5kbGUgRWxlbWVudCBzZWxlY3Rpb24KLQkJCQlTdHJpbmcgdmFsdWUgPSBjb21iby5nZXRJdGVtKGNvbWJvLmdldFNlbGVjdGlvbkluZGV4KCkpOwotCQkJCQotCQkJCVcxMVBhcmFtZXRlckZvclBhcnQgcGFyYW1ldGVyID0gKFcxMVBhcmFtZXRlckZvclBhcnQpIHRoaXMuZ2V0TW9kZWwoKTsKLQkJCQkKLQkJCQlpZiAodmFsdWUuZXF1YWxzKE5FV19TVFJJTkcpKSB7Ci0JCQkJCUNvbW1hbmQgY29tbWFuZCA9IHBhcmFtZXRlci5nZXRTZXRFbGVtZW50Q29tbWFuZChJUGFyYW1ldGVyLlNFVF9ORVdfQUNUSU9OX0lEKTsKLQkJCQkJY29tbWFuZC5leGVjdXRlKCk7Ci0JCQkJfQotCQkJCWVsc2UgaWYgKHZhbHVlLmVxdWFscyhCUk9XU0VfU1RSSU5HKSkgewotCQkJCQlDb21tYW5kIGNvbW1hbmQgPSBwYXJhbWV0ZXIuZ2V0U2V0RWxlbWVudENvbW1hbmQoSVBhcmFtZXRlci5TRUxFQ1RfRVhJU1RJTkdfQUNUSU9OX0lEKTsKLQkJCQkJY29tbWFuZC5leGVjdXRlKCk7Ci0JCQkJfQotCQkJCWVsc2UgewotCQkJCQlDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBlZGl0TWFuYWdlciA9IGdldEVsZW1lbnRDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcigpOwotCQkJCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uIHNwZWMgPSBnZXRDb21wb25lbnRTcGVjaWZpY2F0aW9uRm9yVmFsdWUoKFN0cmluZyl2YWx1ZSk7Ci0JCQkJCWlmIChzcGVjICE9IG51bGwpIHsKLQkJCQkJCWVkaXRNYW5hZ2VyLm1vZGlmeUNvbXBvbmVudFJlZmVyZW5jZShwYXJhbWV0ZXIsIHNwZWMpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCQotCQlzdXBlci5kb0hhbmRsZUV2ZW50KGV2ZW50KTsKLQkJcmVmcmVzaCgpOwotCX0KLQkKLQlwcm90ZWN0ZWQgdm9pZCByZWZyZXNoRWxlbWVudENvbWJvKCkgewotCQotCQkJLy8gUmVmcmVzaCB3aXRoIEVsZW1lbnRzCi0JCQlJUGFyYW1ldGVyIHBhcmFtID0gbnVsbDsKLQkJCU9iamVjdCBtb2RlbCA9IGdldE1vZGVsKCk7Ci0JCQlzZXRMaXN0ZW5lckVuYWJsZWQoZmFsc2UpOwotCQkJCi0JCQlpZiAobW9kZWwgaW5zdGFuY2VvZiBJUGFyYW1ldGVyKSB7Ci0JCQkJcGFyYW0gPSAoSVBhcmFtZXRlcikgbW9kZWw7Ci0JCQl9Ci0JCQkKLQkJCVN0cmluZyBuYW1lID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJCVN0cmluZyBlbGVtZW50TmFtZSA9ICJQYXJhbWV0ZXJTZWN0aW9uLmphdmEiOyAvLyROT04tTkxTLTEkCi0JCQlpZiAocGFyYW0gIT0gbnVsbCkgewotCQkJCW5hbWUgPSBwYXJhbS5nZXROYW1lKCk7Ci0JCQkJZWxlbWVudE5hbWUgPSBwYXJhbS5nZXRDb21wb25lbnROYW1lKCk7Ci0JCQl9Ci0KLQkJCWlmICghbmFtZVRleHQuaXNGb2N1c0NvbnRyb2woKSkgewotCQkJCW5hbWVUZXh0LnNldFRleHQobmFtZSk7Ci0JCQl9Ci0JCQkKLQkJCS8vIFBvcHVsYXRlIHRoZSBDb21ibwotCQkJY29tYm8ucmVtb3ZlQWxsKCk7Ci0JCQljb21iby5hZGQoQlJPV1NFX1NUUklORyk7Ci0JCQljb21iby5hZGQoTkVXX1NUUklORyk7Ci0JCQkKLQkJCUNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIGVkaXRNYW5hZ2VyID0gZ2V0RWxlbWVudENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKCk7Ci0JCQlpZiAoZWRpdE1hbmFnZXIgIT0gbnVsbCkgewotCQkJCUNvbXBvbmVudFNwZWNpZmljYXRpb25bXSBzcGVjcyA9IGVkaXRNYW5hZ2VyLmdldFF1aWNrUGlja3MoKTsKLQkJCQlmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgc3BlY3MubGVuZ3RoOyBpbmRleCsrKSB7Ci0JCQkJCWNvbWJvLmFkZCgoU3RyaW5nKSBzcGVjc1tpbmRleF0uZ2V0TmFtZSgpKTsKLQkJCQl9Ci0JCQl9Ci0KLQkJCS8vIERpc3BsYXkgdGhlIGVsZW1lbnQgaW4gdGhlIENvbWJvCi0JCQlTdHJpbmdbXSBpdGVtcyA9IGNvbWJvLmdldEl0ZW1zKCk7Ci0JCQlpbnQgaW5kZXg7Ci0JCQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBpdGVtcy5sZW5ndGg7IGluZGV4KyspIHsKLQkJCQlpZiAoaXRlbXNbaW5kZXhdLmVxdWFscyhlbGVtZW50TmFtZSkpIHsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQkJCi0JCQlpZiAoaW5kZXggPCBpdGVtcy5sZW5ndGgpIHsKLQkJCQkvLyBGb3VuZCBhIG1hdGNoCi0JCQkJY29tYm8uc2VsZWN0KGluZGV4KTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCWNvbWJvLnNldFRleHQoZWxlbWVudE5hbWUpOwotCQkJfQotCQkJCi0JCQlzZXRMaXN0ZW5lckVuYWJsZWQodHJ1ZSk7Ci0JCQkKLQl9Ci0JCi0JcHVibGljIHZvaWQgcmVmcmVzaCgpIHsKLQkJc2V0TGlzdGVuZXJFbmFibGVkKGZhbHNlKTsKLQkJCi0JCU9iamVjdCBtb2RlbCA9IGdldE1vZGVsKCk7Ci0JCWlmIChtb2RlbCBpbnN0YW5jZW9mIFcxMVBhcmFtZXRlckZvclBhcnQpIHsKLQkJCVcxMVBhcmFtZXRlckZvclBhcnQgcGFyYW0gPSAoVzExUGFyYW1ldGVyRm9yUGFydCkgbW9kZWw7Ci0JCQlQYXJ0IHBhcnQgPSAoUGFydCkgcGFyYW0uZ2V0VGFyZ2V0KCk7Ci0JCQlpZiAocGFydC5nZXRUeXBlRGVmaW5pdGlvbigpICE9IG51bGwpIHsKLQkJCQl0eXBlUmFkaW8uc2V0U2VsZWN0aW9uKHRydWUpOwotCQkJCWVsZW1lbnRSYWRpby5zZXRTZWxlY3Rpb24oZmFsc2UpOwotCQkJCWNvbWJvTGFiZWwuc2V0VGV4dChNZXNzYWdlcy5fVUlfTEFCRUxfVFlQRSArICI6Iik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJCWhhbmRsZVR5cGVTY2VuYXJpbyA9IHRydWU7Ci0JCQl9Ci0JCQllbHNlIGlmIChwYXJ0LmdldEVsZW1lbnREZWNsYXJhdGlvbigpICE9IG51bGwpIHsKLQkJCQl0eXBlUmFkaW8uc2V0U2VsZWN0aW9uKGZhbHNlKTsKLQkJCQllbGVtZW50UmFkaW8uc2V0U2VsZWN0aW9uKHRydWUpOwotCQkJCWNvbWJvTGFiZWwuc2V0VGV4dChNZXNzYWdlcy5fVUlfTEFCRUxfRUxFTUVOVCArICI6Iik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJCWhhbmRsZVR5cGVTY2VuYXJpbyA9IGZhbHNlOwotCQkJCXJlZnJlc2hFbGVtZW50Q29tYm8oKTsJCQkKLQkJCX0KLQkJCWVsc2UgewotCQkJCS8vIE5laXRoZXIgYSBUeXBlIG9yIEVsZW1lbnQKLQkJCQl0eXBlUmFkaW8uc2V0U2VsZWN0aW9uKGZhbHNlKTsKLQkJCQllbGVtZW50UmFkaW8uc2V0U2VsZWN0aW9uKHRydWUpOwkJCQkKLQkJCX0KLQkJfQotCQotCQlzZXRDb250cm9sRm9yZWdyb3VuZENvbG9yKGVsZW1lbnRSYWRpbyk7Ci0JCXNldENvbnRyb2xGb3JlZ3JvdW5kQ29sb3IodHlwZVJhZGlvKTsKLQkJCi0JCXN1cGVyLnJlZnJlc2goKTsKLQkJc2V0TGlzdGVuZXJFbmFibGVkKHRydWUpOwotCX0KLQkKLQlwcm90ZWN0ZWQgQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgZ2V0RWxlbWVudENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKCkgewotCQlpZiAocmVmTWFuYWdlciAhPSBudWxsKSB7Ci0JCQlyZXR1cm4gcmVmTWFuYWdlcjsKLQkJfQotCQkKLQkJcmVmTWFuYWdlciA9IFJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyLmdldFhTREVsZW1lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcigoSUFTRE9iamVjdCkgZ2V0TW9kZWwoKSk7Ci0JCQotCQlyZXR1cm4gcmVmTWFuYWdlcjsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3Byb3BlcnRpZXMvc2VjdGlvbnMvVzExUGFyYW1ldGVyU2VjdGlvbkZpbHRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9wcm9wZXJ0aWVzL3NlY3Rpb25zL1cxMVBhcmFtZXRlclNlY3Rpb25GaWx0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWM1ZDgyYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3Byb3BlcnRpZXMvc2VjdGlvbnMvVzExUGFyYW1ldGVyU2VjdGlvbkZpbHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnByb3BlcnRpZXMuc2VjdGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JRmlsdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXRvci5FZGl0b3JNb2RlTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIFcxMVBhcmFtZXRlclNlY3Rpb25GaWx0ZXIgaW1wbGVtZW50cyBJRmlsdGVyCi17Ci0gIHB1YmxpYyBib29sZWFuIHNlbGVjdChPYmplY3QgdG9UZXN0KQotICB7Ci0gICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLSAgICBpZiAodG9UZXN0IGluc3RhbmNlb2YgSVBhcmFtZXRlcikKLSAgICB7ICAKLSAgICAgIHJlc3VsdCA9IHRydWU7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgSUVkaXRvclBhcnQgZWRpdG9yID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0gICAgICAgIEVkaXRvck1vZGVNYW5hZ2VyIG1hbmFnZXIgPSAoRWRpdG9yTW9kZU1hbmFnZXIpIGVkaXRvci5nZXRBZGFwdGVyKEVkaXRvck1vZGVNYW5hZ2VyLmNsYXNzKTsKLSAgICAgICAgaWYgKG1hbmFnZXIgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIEVkaXRvck1vZGVTZWN0aW9uRmlsdGVyIGZpbHRlciA9IChFZGl0b3JNb2RlU2VjdGlvbkZpbHRlcikgbWFuYWdlci5nZXRDdXJyZW50TW9kZSgpLmdldEFkYXB0ZXIoRWRpdG9yTW9kZVNlY3Rpb25GaWx0ZXIuY2xhc3MpOwotICAgICAgICAgIGlmIChmaWx0ZXIgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQgPSBmaWx0ZXIuaXNBcHBsaWNhYmxlKFcxMVBhcmFtZXRlclNlY3Rpb24uY2xhc3MsIHRvVGVzdCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3JlY29uY2lsZXIvRGVsZWdhdGluZ1NvdXJjZVZhbGlkYXRvckZvcldTREwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvcmVjb25jaWxlci9EZWxlZ2F0aW5nU291cmNlVmFsaWRhdG9yRm9yV1NETC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OWRkZGMyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvcmVjb25jaWxlci9EZWxlZ2F0aW5nU291cmNlVmFsaWRhdG9yRm9yV1NETC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnJlY29uY2lsZXI7Ci0KLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwuQ29uZmlndXJhdGlvbk1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwuUHJvamVjdENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwuVmFsaWRhdGlvblJlZ2lzdHJ5UmVhZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLlZhbGlkYXRvck1ldGFEYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLkxvZ2dlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLnZhbGlkYXRpb24uRGVsZWdhdGluZ1NvdXJjZVZhbGlkYXRvcjsKLQotLyoqCi0gKiBUaGlzIHBlcmZvcm1zIHRoZSBhcy15b3UtdHlwZSB2YWxpZGF0aW9uCi0gKiBAYXV0aG9yIE1hcmsgSHV0Y2hpbnNvbgotICoKLSAqLwotcHVibGljIGNsYXNzIERlbGVnYXRpbmdTb3VyY2VWYWxpZGF0b3JGb3JXU0RMIGV4dGVuZHMgRGVsZWdhdGluZ1NvdXJjZVZhbGlkYXRvcgotewotCi0gIGZpbmFsIHByaXZhdGUgc3RhdGljIFN0cmluZyBWQUxJREFUT1JfQ0xBU1MgPSAib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5lY2xpcHNlLldTRExEZWxlZ2F0aW5nVmFsaWRhdG9yIjsgLy8kTk9OLU5MUy0xJCAKLQotICBwdWJsaWMgRGVsZWdhdGluZ1NvdXJjZVZhbGlkYXRvckZvcldTREwoKQotICB7IAotICAgIHN1cGVyKCk7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBJVmFsaWRhdG9yIGdldERlbGVnYXRlVmFsaWRhdG9yKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIFZhbGlkYXRpb25SZWdpc3RyeVJlYWRlciByZWdpc3RyeSA9IFZhbGlkYXRpb25SZWdpc3RyeVJlYWRlci5nZXRSZWFkZXIoKTsKLSAgICAgIHJldHVybiByZWdpc3RyeS5nZXRWYWxpZGF0b3IoVkFMSURBVE9SX0NMQVNTKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsgLy8KLSAgICB9IAotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotCXByb3RlY3RlZCBib29sZWFuIGlzRGVsZWdhdGVWYWxpZGF0b3JFbmFibGVkKElGaWxlIGZpbGUpIHsKLQkJYm9vbGVhbiBlbmFibGVkID0gdHJ1ZTsKLQkJdHJ5IHsKLQkJCVByb2plY3RDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBDb25maWd1cmF0aW9uTWFuYWdlci5nZXRNYW5hZ2VyKCkuZ2V0UHJvamVjdENvbmZpZ3VyYXRpb24oZmlsZS5nZXRQcm9qZWN0KCkpOwotCQkJVmFsaWRhdG9yTWV0YURhdGEgdm1kID0gVmFsaWRhdGlvblJlZ2lzdHJ5UmVhZGVyLmdldFJlYWRlcigpLmdldFZhbGlkYXRvck1ldGFEYXRhKFZBTElEQVRPUl9DTEFTUyk7Ci0JCQlpZiAoY29uZmlndXJhdGlvbi5pc0J1aWxkRW5hYmxlZCh2bWQpIHx8IGNvbmZpZ3VyYXRpb24uaXNNYW51YWxFbmFibGVkKHZtZCkpCi0JCQkJZW5hYmxlZCA9IHRydWU7Ci0JCQllbHNlCi0JCQkJZW5hYmxlZCA9IGZhbHNlOwotCQl9Ci0JCWNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGUpIHsKLQkJCUxvZ2dlci5sb2coTG9nZ2VyLldBUk5JTkdfREVCVUcsIGUuZ2V0TWVzc2FnZSgpLCBlKTsKLQkJfQotCQlyZXR1cm4gZW5hYmxlZDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3RleHQvV1NETEh5cGVybGluay5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC90ZXh0L1dTRExIeXBlcmxpbmsuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTFiYTI3Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3RleHQvV1NETEh5cGVybGluay5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC50ZXh0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0Lmh5cGVybGluay5JSHlwZXJsaW5rOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRmlsZUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaWRlLklERTsKLQotLyoqCi0gKiBXU0RMSHlwZXJsaW5rIGtub3dzIGhvdyB0byBvcGVuIGxpbmtzIGZyb20gd3NkbCBmaWxlcy4KLSAqIAotICogQHNlZSBXU0RMSHlwZXJsaW5rRGV0ZWN0b3IKLSAqLwotcHVibGljIGNsYXNzIFdTRExIeXBlcmxpbmsgaW1wbGVtZW50cyBJSHlwZXJsaW5rCi17Ci0gIHByaXZhdGUgSVJlZ2lvbiBmUmVnaW9uOwotICBwcml2YXRlIFN0cmluZyBmUmVzb3VyY2U7Ci0gIHByaXZhdGUgU3RyaW5nIGZTcGVjOwotCi0gIHB1YmxpYyBXU0RMSHlwZXJsaW5rKElSZWdpb24gcmVnaW9uLCBTdHJpbmcgcmVzb3VyY2UsIFN0cmluZyBzcGVjKQotICB7Ci0gICAgZlJlZ2lvbiA9IHJlZ2lvbjsKLSAgICBmUmVzb3VyY2UgPSByZXNvdXJjZTsKLSAgICBmU3BlYyA9IHNwZWM7Ci0gIH0KLQotICBwdWJsaWMgSVJlZ2lvbiBnZXRIeXBlcmxpbmtSZWdpb24oKQotICB7Ci0gICAgcmV0dXJuIGZSZWdpb247Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFR5cGVMYWJlbCgpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SHlwZXJsaW5rVGV4dCgpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIG9wZW4oKQotICB7Ci0gICAgLyoKLSAgICAgKiBJU1NVRTogVGhlcmUgYXJlIGNsZWFuZXIgd2F5cyB0byBmaW5kIHRoZSByaWdodCBmaWxlIGJhc2VkIG9uIGEgVVJJCi0gICAgICogc3RyaW5nIGFuZCBjbGVhbmVyIHdheXMgdG8gZmluZCB3aGljaCBlZGl0b3IgdG8gb3BlbiBmb3IgdGhlIGZpbGUuIFNlZQotICAgICAqIG90aGVyIElIeXBlcmxpbmsgYW5kIElIeXBlcmxpbmtEZXRlY3RvciBpbXBsZW1lbnRvcnMgZm9yIGV4YW1wbGVzLgotICAgICAqLwotICAgIFN0cmluZyBwYXR0ZXJuID0gInBsYXRmb3JtOi9yZXNvdXJjZSI7IC8vJE5PTi1OTFMtMSQKLSAgICBpZiAoZlJlc291cmNlICE9IG51bGwgJiYgZlJlc291cmNlLnN0YXJ0c1dpdGgocGF0dGVybikpCi0gICAgewotICAgICAgUGF0aCBwYXRoID0gbmV3IFBhdGgoZlJlc291cmNlLnN1YnN0cmluZyhwYXR0ZXJuLmxlbmd0aCgpKSk7Ci0gICAgICBJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKHBhdGgpOwotCi0gICAgICBJV29ya2JlbmNoUGFnZSB3b3JrYmVuY2hQYWdlID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCk7Ci0KLSAgICAgIElFZGl0b3JQYXJ0IGVkaXRvclBhcnQgPSB3b3JrYmVuY2hQYWdlLmdldEFjdGl2ZUVkaXRvcigpOwotCi0gICAgICAvLyBXaGVuIHVzaW5nIHRoZSBjdXJzb3Igb3IgdGhlIG1vdXNlIHRvIG1vdmUgYXJvdW5kIGluIHRoZSB0ZXh0Ci0gICAgICAvLyBlZGl0b3IsIHRoZSBsb2NhdGlvbiBoaXN0b3J5IGlzIG5vdCB1cGRhdGVkLCBzbyB3ZSBtYWtlIHN1cmUgd2Uga2VlcAotICAgICAgLy8gYSByZWZlcmVuY2UgdG8gd2hlcmUgd2UgYXJlLiBJZiB3ZSB1c2Ugb3RoZXIgbmF2aWdhdGlvbiBtZWFucywgbGlrZSB0aGUKLSAgICAgIC8vIG91dGxpbmUgdmlldywgdGhpcyBjYWxsIHdpbGwgbm90IGFkZCBhIG5ldyBsb2NhdGlvbiBoaXN0b3J5IGVudHJ5LCBhcwotICAgICAgLy8gaXQgaXMgdGhlIHNhbWUgYXMgdGhlIGxhc3QgbG9jYXRpb24gc2V0IHRocm91Z2ggdGhlIG91dGxpbmUgZHJpdmVuCi0gICAgICAvLyBuYXZpZ2F0aW9uLgotCi0gICAgICBib29sZWFuIHNhbWVFZGl0b3IgPSBlZGl0b3JQYXJ0LmdldEVkaXRvcklucHV0KCkgaW5zdGFuY2VvZiBJRmlsZUVkaXRvcklucHV0ICYmICgoSUZpbGVFZGl0b3JJbnB1dCkgZWRpdG9yUGFydC5nZXRFZGl0b3JJbnB1dCgpKS5nZXRGaWxlKCkuZXF1YWxzKGZpbGUpOwotCi0gICAgICB3b3JrYmVuY2hQYWdlLmdldE5hdmlnYXRpb25IaXN0b3J5KCkubWFya0xvY2F0aW9uKGVkaXRvclBhcnQpOwotCi0gICAgICBpZiAoIXNhbWVFZGl0b3IpCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgLy8gVGhlIHRhcmdldCBpcyBpbiBhIGRpZmZlcmVudCBmaWxlLCBzbyBvcGVuIHRoZSB0YXJnZXQncyBlbmNsb3NpbmcKLSAgICAgICAgICAvLyByZXNvdXJjZSBpbiBpdCdzIG93biBlZGl0b3IuIExldCB0aGUgd29ya2JlbmNoIGRlY2lkZSB3aGF0IGVkaXRvcgotICAgICAgICAgIC8vIHRvIG9wZW4gYmFzZWQgb24gdGhlIGZpbGUncyBjb250ZW50IHR5cGUuCi0KLSAgICAgICAgICBlZGl0b3JQYXJ0ID0gSURFLm9wZW5FZGl0b3Iod29ya2JlbmNoUGFnZSwgZmlsZSwgdHJ1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLS8vICAgICAgICAgIExvZ2dlci5sb2coTG9nZ2VyLldBUk5JTkdfREVCVUcsIGUuZ2V0TWVzc2FnZSgpLCBlKTsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8gQXR0ZW1wdCB0byByZXRyaWV2ZSB0aGUgdGFyZ2V0IGVkaXRvcidzIHNlbGVjdGlvbiBtYW5hZ2VyIGFuZCB0cnkgdG8KLSAgICAgIC8vIGNoYW5nZSB0aGUgc2VsZWN0aW9uIHRvIHRoZSB0aGluZyAoc2NoZW1hIGNvbXBvbmVudCwgd3NkbCBlbGVtZW50LCBldGMpCi0gICAgICAvLyBwb2ludGVkIHRvIGJ5IGZTcGVjLgotCi0gICAgICBJU2VsZWN0aW9uUHJvdmlkZXIgc2VsZWN0aW9uUHJvdmlkZXIgPSAoSVNlbGVjdGlvblByb3ZpZGVyKSBlZGl0b3JQYXJ0LmdldEFkYXB0ZXIoSVNlbGVjdGlvblByb3ZpZGVyLmNsYXNzKTsKLQotICAgICAgaWYgKHNlbGVjdGlvblByb3ZpZGVyICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHNlbGVjdGlvblByb3ZpZGVyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihmU3BlYykpOwotICAgICAgfQotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC90ZXh0L1dTRExIeXBlcmxpbmtEZXRlY3Rvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC90ZXh0L1dTRExIeXBlcmxpbmtEZXRlY3Rvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjYwZTJjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdGV4dC9XU0RMSHlwZXJsaW5rRGV0ZWN0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudGV4dDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0Lmh5cGVybGluay5JSHlwZXJsaW5rOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5PcGVuT25TZWxlY3Rpb25IZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5lZGl0b3IuWFNESHlwZXJsaW5rRGV0ZWN0b3I7Ci0vKioKLSAqIERldGVjdHMgaHlwZXJsaW5rcyBmb3IgV1NETCBmaWxlcy4gVXNlZCBieSB0aGUgV1NETCB0ZXh0IGVkaXRvciB0byBwcm92aWRlIGEKLSAqICJHbyB0byBkZWNsYXJhdGlvbiIgZnVuY3Rpb25hbGl0eSBzaW1pbGFyIHdpdGggdGhlIG9uZSBwcm92aWRlZCBieSB0aGUgSmF2YQotICogZWRpdG9yLgotICovCi1wdWJsaWMgY2xhc3MgV1NETEh5cGVybGlua0RldGVjdG9yIGV4dGVuZHMgWFNESHlwZXJsaW5rRGV0ZWN0b3IKLXsKLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKi8KLSAgcHJvdGVjdGVkIElIeXBlcmxpbmsgY3JlYXRlSHlwZXJsaW5rKElEb2N1bWVudCBkb2N1bWVudCwgSURPTU5vZGUgbm9kZSwgSVJlZ2lvbiByZWdpb24pCi0gIHsKLSAgICAvLyBIZXJlIHdlJ3JlIHRyeWluZyB0byBmaW5kIHRoZSB0YXJnZXQgY29tcG9uZW50J3MgcmVzb3VyY2UgYW5kIHNwZWMuCi0KLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBnZXREZWZpbml0aW9uKGRvY3VtZW50KTsKLSAgICBPcGVuT25TZWxlY3Rpb25IZWxwZXIgaGVscGVyID0gbmV3IE9wZW5PblNlbGVjdGlvbkhlbHBlcihkZWZpbml0aW9uKTsKLSAgICBTdHJpbmdbXSB0YXJnZXREYXRhID0gaGVscGVyLmNvbXB1dGVTcGVjaWZpY2F0aW9uKG5vZGUpOwotCi0gICAgaWYgKHRhcmdldERhdGEgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgcmVzb3VyY2UgPSB0YXJnZXREYXRhWzBdOwotICAgICAgU3RyaW5nIHNwZWMgPSB0YXJnZXREYXRhWzFdOwotICAgICAgcmV0dXJuIG5ldyBXU0RMSHlwZXJsaW5rKHJlZ2lvbiwgcmVzb3VyY2UsIHNwZWMpOwotICAgIH0KLQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldHMgdGhlIGRlZmluaXRpb24gZnJvbSBkb2N1bWVudAotICAgKiAKLSAgICogQHBhcmFtIGRvY3VtZW50Ci0gICAqIEByZXR1cm4gRGVmaW5pdGlvbgotICAgKi8KLSAgcHJpdmF0ZSBEZWZpbml0aW9uIGdldERlZmluaXRpb24oSURvY3VtZW50IGRvY3VtZW50KQotICB7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gbnVsbDsKLSAgICBJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRFeGlzdGluZ01vZGVsRm9yUmVhZChkb2N1bWVudCk7Ci0gICAgaWYgKG1vZGVsICE9IG51bGwpCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGlmIChtb2RlbCBpbnN0YW5jZW9mIElET01Nb2RlbCkKLSAgICAgICAgewotICAgICAgICAgIElET01Eb2N1bWVudCBkb21Eb2MgPSAoKElET01Nb2RlbCkgbW9kZWwpLmdldERvY3VtZW50KCk7Ci0gICAgICAgICAgaWYgKGRvbURvYyAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFdTRExNb2RlbEFkYXB0ZXIgbW9kZWxBZGFwdGVyID0gKFdTRExNb2RlbEFkYXB0ZXIpIGRvbURvYy5nZXRBZGFwdGVyRm9yKFdTRExNb2RlbEFkYXB0ZXIuY2xhc3MpOwotICAgICAgICAgICAgLy8gSVNTVUU6IGlmIGFkYXB0ZXIgZG9lcyBub3QgYWxyZWFkeSBleGlzdCBmb3IgZG9tRG9jIGdldEFkYXB0ZXJGb3IKLSAgICAgICAgICAgIC8vIHdpbGwgY3JlYXRlIG9uZS4gU28gd2h5IGlzIHRoaXMgbnVsbCBjaGVjay9jcmVhdGlvbiBuZWVkZWQ/Ci0gICAgICAgICAgICBpZiAobW9kZWxBZGFwdGVyID09IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIG1vZGVsQWRhcHRlciA9IG5ldyBXU0RMTW9kZWxBZGFwdGVyKCk7Ci0gICAgICAgICAgICAgIGRvbURvYy5hZGRBZGFwdGVyKG1vZGVsQWRhcHRlcik7Ci0gICAgICAgICAgICAgIG1vZGVsQWRhcHRlci5jcmVhdGVEZWZpbml0aW9uKGRvbURvYyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZWZpbml0aW9uID0gbW9kZWxBZGFwdGVyLmdldERlZmluaXRpb24oKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGZpbmFsbHkKLSAgICAgIHsKLSAgICAgICAgbW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBkZWZpbml0aW9uOwotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKi8KLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNMaW5rYWJsZUF0dHJpYnV0ZShTdHJpbmcgbmFtZSkKLSAgewotICAgIGJvb2xlYW4gaXNMaW5rYWJsZSA9IHN1cGVyLmlzTGlua2FibGVBdHRyaWJ1dGUobmFtZSl8fAotICAgIG5hbWUuZXF1YWxzKFdTRExDb25zdGFudHMuQklORElOR19BVFRSSUJVVEUpIHx8IAotICAgIG5hbWUuZXF1YWxzKFdTRExDb25zdGFudHMuRUxFTUVOVF9BVFRSSUJVVEUpIHx8IAotICAgIG5hbWUuZXF1YWxzKFdTRExDb25zdGFudHMuVFlQRV9BVFRSSUJVVEUpIHx8IAotICAgIG5hbWUuZXF1YWxzKFdTRExDb25zdGFudHMuTUVTU0FHRV9BVFRSSUJVVEUpOyAKLSAgICByZXR1cm4gaXNMaW5rYWJsZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC90ZXh0L1dTRExNb2RlbEFkYXB0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdGV4dC9XU0RMTW9kZWxBZGFwdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2ODdiYTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC90ZXh0L1dTRExNb2RlbEFkYXB0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudGV4dDsKLQotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25UYXJnZXRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uub3BlcmF0aW9uLklSdW5uYWJsZVdpdGhQcm9ncmVzczsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnByb2dyZXNzLklQcm9ncmVzc1NlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU5vZGVOb3RpZmllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRGVmaW5pdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwudXRpbC5XU0RMUmVzb3VyY2VGYWN0b3J5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5leHRlbnNpb25zLkV4dGVuc2libGVUeXBlU3lzdGVtUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMRWRpdG9yVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExSZXNvdXJjZUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC51dGlsLk1vZGVsUmVjb25jaWxlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLnV0aWwuWFNEU2NoZW1hTG9jYXRpb25SZXNvbHZlckFkYXB0ZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC51dGlsLlhTRFJlc291cmNlSW1wbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgV1NETE1vZGVsQWRhcHRlciBpbXBsZW1lbnRzIElOb2RlQWRhcHRlcgotewotICBwcm90ZWN0ZWQgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQ7Ci0gIHByb3RlY3RlZCBEZWZpbml0aW9uIGRlZmluaXRpb247Ci0gIHByaXZhdGUgTW9kZWxSZWNvbmNpbGVBZGFwdGVyIG1vZGVsUmVjb25jaWxlQWRhcHRlcjsKLQotICBwdWJsaWMgRGVmaW5pdGlvbiBnZXREZWZpbml0aW9uKCkKLSAgewotICAgIHJldHVybiBkZWZpbml0aW9uOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0RGVmaW5pdGlvbihEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNBZGFwdGVyRm9yVHlwZShPYmplY3QgdHlwZSkKLSAgewotICAgIHJldHVybiB0eXBlID09IFdTRExNb2RlbEFkYXB0ZXIuY2xhc3M7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKElOb2RlTm90aWZpZXIgbm90aWZpZXIsIGludCBldmVudFR5cGUsIE9iamVjdCBjaGFuZ2VkRmVhdHVyZSwgT2JqZWN0IG9sZFZhbHVlLCBPYmplY3QgbmV3VmFsdWUsIGludCBwb3MpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBAZGVwcmVjYXRlZAotICAgKi8KLSAgcHVibGljIERlZmluaXRpb24gY3JlYXRlRGVmaW5pdGlvbihFbGVtZW50IGVsZW1lbnQsIERvY3VtZW50IGRvY3VtZW50KQotICB7Ci0gICAgcmV0dXJuIGNyZWF0ZURlZmluaXRpb24oZG9jdW1lbnQpOwotICB9Ci0KLSAgcHVibGljIERlZmluaXRpb24gY3JlYXRlRGVmaW5pdGlvbihmaW5hbCBEb2N1bWVudCBkb2N1bWVudCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIElET01Ob2RlIGRvbU5vZGUgPSAoSURPTU5vZGUpIGRvY3VtZW50OwotICAgICAgU3RyaW5nIGJhc2VMb2NhdGlvbiA9ICJibGFua1dTREwud3NkbCI7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGlmIChkb21Ob2RlICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGJhc2VMb2NhdGlvbiA9IGRvbU5vZGUuZ2V0TW9kZWwoKS5nZXRCYXNlTG9jYXRpb24oKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGRvY3VtZW50IGluc3RhbmNlb2YgSURPTU5vZGUpCi0gICAgICB7Ci0gICAgICAgIElET01Nb2RlbCBkb21Nb2RlbCA9ICgoSURPTU5vZGUpIGRvY3VtZW50KS5nZXRNb2RlbCgpOwotICAgICAgICBiYXNlTG9jYXRpb24gPSBkb21Nb2RlbC5nZXRCYXNlTG9jYXRpb24oKTsKLSAgICAgIH0KLSAgICAgIHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOwotICAgICAgcmVzb3VyY2VTZXQuZ2V0QWRhcHRlckZhY3RvcmllcygpLmFkZChuZXcgV1NETE1vZGVsTG9jYXRvckFkYXB0ZXJGYWN0b3J5KCkpOwotICAgICAgcmVzb3VyY2VTZXQuZ2V0QWRhcHRlckZhY3RvcmllcygpLmFkZChuZXcgWFNEU2NoZW1hTG9jYXRpb25SZXNvbHZlckFkYXB0ZXJGYWN0b3J5KCkpOwotICAgICAgLy8gVE9ETy4uIC5yZXZpc3QgdGhlIGJlc3QgYXBwcm9hY2ggdG8gb2J0YWluIGEgVVJJIGZyb20gdGhlIFNTRSBtb2RlbAotICAgICAgLy8KLSAgICAgIFVSSSB1cmkgPSBudWxsOwotICAgICAgaWYgKGJhc2VMb2NhdGlvbi5zdGFydHNXaXRoKCIvIikpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgdXJpID0gVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkoYmFzZUxvY2F0aW9uKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgdXJpID0gVVJJLmNyZWF0ZUZpbGVVUkkoYmFzZUxvY2F0aW9uKTsKLSAgICAgIH0KLSAgICAgIGRlZmluaXRpb24gPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRGVmaW5pdGlvbigpOwotICAgICAgZGVmaW5pdGlvbi5zZXREb2N1bWVudEJhc2VVUkkodXJpLnRvU3RyaW5nKCkpOwotICAgICAgZGVmaW5pdGlvbi5zZXREb2N1bWVudChkb2N1bWVudCk7Ci0KLSAgICAgIFdTRExSZXNvdXJjZUZhY3RvcnlJbXBsIHJlc291cmNlRmFjdG9yeSA9IG5ldyBXU0RMUmVzb3VyY2VGYWN0b3J5SW1wbCgpOwotICAgICAgUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZUZhY3RvcnkuY3JlYXRlUmVzb3VyY2UodXJpKTsKLSAgICAgIHJlc291cmNlU2V0LmdldFJlc291cmNlcygpLmFkZChyZXNvdXJjZSk7Ci0gICAgICByZXNvdXJjZS5nZXRDb250ZW50cygpLmFkZChkZWZpbml0aW9uKTsKLSAgICAgIHJlc291cmNlLnNldE1vZGlmaWVkKGZhbHNlKTsKLQotICAgICAgSVJ1bm5hYmxlV2l0aFByb2dyZXNzIHNldEVsZW1lbnRPcGVyYXRpb24gPSBuZXcgSVJ1bm5hYmxlV2l0aFByb2dyZXNzKCkKLSAgICAgIHsKLSAgICAgICAgcHVibGljIHZvaWQgcnVuKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24sIEludGVycnVwdGVkRXhjZXB0aW9uCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBVc2UgdGhlIGFuaW1hdGVkIGZsYXZvdXIgYXMgd2UgZG9uJ3Qga25vdyBiZWZvcmVoYW5kIGhvdyBtYW55IHRpY2tzIHdlIG5lZWQuCi0gICAgICAgICAgLy8gVGhlIHRhc2sgbmFtZSB3aWxsIGJlIGRpc3BsYXllZCBieSB0aGUgY29kZSBpbiBXU0RMUmVzb3VyY2VJbXBsIGFuZCBYU0RSZXNvdXJjZUltcGwuCi0gICAgICAgICAgCi0gICAgICAgICAgbW9uaXRvci5iZWdpblRhc2soIiIsIElQcm9ncmVzc01vbml0b3IuVU5LTk9XTik7IC8vJE5PTi1OTFMtMSQKLQotICAgICAgICAgIE1hcCBsb2FkT3B0aW9ucyA9IHJlc291cmNlU2V0LmdldExvYWRPcHRpb25zKCk7Ci0gICAgICAgICAgCi0gICAgICAgICAgbG9hZE9wdGlvbnMucHV0KFdTRExSZXNvdXJjZUltcGwuV1NETF9QUk9HUkVTU19NT05JVE9SLCBtb25pdG9yKTsKLSAgICAgICAgICBsb2FkT3B0aW9ucy5wdXQoWFNEUmVzb3VyY2VJbXBsLlhTRF9QUk9HUkVTU19NT05JVE9SLCBtb25pdG9yKTsKLSAgICAgICAgICAKLSAgICAgICAgICBkZWZpbml0aW9uLnNldEVsZW1lbnQoZG9jdW1lbnQuZ2V0RG9jdW1lbnRFbGVtZW50KCkpOwotICAgICAgICAgICgoRGVmaW5pdGlvbkltcGwpIGRlZmluaXRpb24pLnJlY29uY2lsZVJlZmVyZW5jZXModHJ1ZSk7Ci0gICAgICAgICAgCi0gICAgICAgICAgbG9hZE9wdGlvbnMucmVtb3ZlKFdTRExSZXNvdXJjZUltcGwuV1NETF9QUk9HUkVTU19NT05JVE9SKTsKLSAgICAgICAgICBsb2FkT3B0aW9ucy5yZW1vdmUoWFNEUmVzb3VyY2VJbXBsLlhTRF9QUk9HUkVTU19NT05JVE9SKTsKLSAgICAgICAgfQotICAgICAgfTsKLQotICAgICAgSVByb2dyZXNzU2VydmljZSBwcm9ncmVzc1NlcnZpY2UgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldFByb2dyZXNzU2VydmljZSgpOwotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIHByb2dyZXNzU2VydmljZS5idXN5Q3Vyc29yV2hpbGUoc2V0RWxlbWVudE9wZXJhdGlvbik7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgfQotICAgICAgY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICB9ICAgICAgICAgICAgIAotICAgICAgCi0gICAgICAvLyBhdHRhY2ggYW4gYWRhcHRlciB0byBrZWVwIHRoZSBXU0RMIG1vZGVsIGFuZCBET00gaW4gc3luYwotICAgICAgLy8KLSAgICAgIG1vZGVsUmVjb25jaWxlQWRhcHRlciA9IG5ldyBXU0RMTW9kZWxSZWNvbmNpbGVBZGFwdGVyKGRvY3VtZW50LCBkZWZpbml0aW9uKTsKLSAgICAgIGRvbU5vZGUuZ2V0TW9kZWwoKS5hZGRNb2RlbFN0YXRlTGlzdGVuZXIobW9kZWxSZWNvbmNpbGVBZGFwdGVyKTsKLSAgICAgIAotICAgICAgLy8gVE9ETy4uLiBDUyA6IHJldmlzaXQgdGhpcyBsaW5lCi0gICAgICAvLyBjdXJyZW50bHkgdGhpcyBpcyB1c2VkIHRvIGFzc29jaWF0ZSBhICd0eXBlJyBzeXN0ZW0gd2l0aCB0aGUgZGVmaW5pdGlvbgotICAgICAgLy8gSSBzdXNwZWN0IHRoYXQgdGhpcyBjb3VsZCBiZSBtYWRlIGEgd2hvbGUgbG90IG1vcmUgc2ltcGxlCi0gICAgICAvLwotICAgICAgV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5zZXRUeXBlU3lzdGVtUHJvdmlkZXIoZGVmaW5pdGlvbiwgbmV3IEV4dGVuc2libGVUeXBlU3lzdGVtUHJvdmlkZXIoKSk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZXgpCi0gICAgewotICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfQotICAgIHJldHVybiBkZWZpbml0aW9uOwotICB9Ci0gIAotICBwdWJsaWMgTW9kZWxSZWNvbmNpbGVBZGFwdGVyIGdldE1vZGVsUmVjb25jaWxlQWRhcHRlcigpCi0gIHsKLSAgICByZXR1cm4gbW9kZWxSZWNvbmNpbGVBZGFwdGVyOwotICB9ICAKLSAgCi0gIHB1YmxpYyBzdGF0aWMgV1NETE1vZGVsQWRhcHRlciBsb29rdXBPckNyZWF0ZU1vZGVsQWRhcHRlcihEb2N1bWVudCBkb2N1bWVudCkKLSAgewotICAgIFdTRExNb2RlbEFkYXB0ZXIgYWRhcHRlciA9IG51bGw7Ci0gICAgaWYgKGRvY3VtZW50IGluc3RhbmNlb2YgSU5vZGVOb3RpZmllcikKLSAgICB7Ci0gICAgICBJTm9kZU5vdGlmaWVyIG5vdGlmaWVyID0gKElOb2RlTm90aWZpZXIpZG9jdW1lbnQ7Ci0gICAgICBhZGFwdGVyID0gKFdTRExNb2RlbEFkYXB0ZXIpbm90aWZpZXIuZ2V0QWRhcHRlckZvcihXU0RMTW9kZWxBZGFwdGVyLmNsYXNzKTsKLSAgICAgIGlmIChhZGFwdGVyID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGFkYXB0ZXIgPSBuZXcgV1NETE1vZGVsQWRhcHRlcigpOyAgICAgICAKLSAgICAgICAgbm90aWZpZXIuYWRkQWRhcHRlcihhZGFwdGVyKTsgICAgICAgIAotICAgICAgfSAKLSAgICB9ICAgCi0gICAgcmV0dXJuIGFkYXB0ZXI7Ci0gIH0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC90ZXh0L1dTRExNb2RlbExvY2F0b3JBZGFwdGVyRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC90ZXh0L1dTRExNb2RlbExvY2F0b3JBZGFwdGVyRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZGU3YTk0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdGV4dC9XU0RMTW9kZWxMb2NhdG9yQWRhcHRlckZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC50ZXh0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJGYWN0b3J5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIuaW50ZXJuYWwucHJvdmlzaW9uYWwuVVJJUmVzb2x2ZXJQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwudXRpbC5XU0RMTW9kZWxMb2NhdG9yOwotCi1wdWJsaWMgY2xhc3MgV1NETE1vZGVsTG9jYXRvckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgQWRhcHRlckZhY3RvcnlJbXBsCi17Ci0gIHByb3RlY3RlZCBDdXN0b21XU0RMTW9kZWxMb2NhdG9yIGN1c3RvbVdTRExNb2RlbExvY2F0b3IgPSBuZXcgQ3VzdG9tV1NETE1vZGVsTG9jYXRvcigpOwotICAKLSAgY2xhc3MgQ3VzdG9tV1NETE1vZGVsTG9jYXRvciBleHRlbmRzIEFkYXB0ZXJJbXBsIGltcGxlbWVudHMgV1NETE1vZGVsTG9jYXRvcgotICB7Ci0gICAgcHVibGljIFN0cmluZyByZXNvbHZlVVJJKFN0cmluZyBiYXNlTG9jYXRpb24sIFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBsb2NhdGlvbikKLSAgICB7Ci0gICAgICByZXR1cm4gVVJJUmVzb2x2ZXJQbHVnaW4uY3JlYXRlUmVzb2x2ZXIoKS5yZXNvbHZlKGJhc2VMb2NhdGlvbiwgbmFtZXNwYWNlLCBsb2NhdGlvbik7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaXNBZGF0cGVyRm9yVHlwZShPYmplY3QgdHlwZSkKLSAgICB7Ci0gICAgICByZXR1cm4gdHlwZSA9PSBXU0RMTW9kZWxMb2NhdG9yLmNsYXNzOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpCi0gIHsKLSAgICByZXR1cm4gdHlwZSA9PSBXU0RMTW9kZWxMb2NhdG9yLmNsYXNzOwotICB9Ci0KLSAgcHVibGljIEFkYXB0ZXIgYWRhcHROZXcoTm90aWZpZXIgdGFyZ2V0LCBPYmplY3QgdHlwZSkKLSAgewotICAgIHJldHVybiBjdXN0b21XU0RMTW9kZWxMb2NhdG9yOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC90ZXh0L1dTRExNb2RlbFF1ZXJ5RXh0ZW5zaW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3RleHQvV1NETE1vZGVsUXVlcnlFeHRlbnNpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTFiMzEyOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3RleHQvV1NETE1vZGVsUXVlcnlFeHRlbnNpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudGV4dDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU5vZGVOb3RpZmllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZmlsdGVyLkV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5Db21wb25lbnRSZWZlcmVuY2VVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETEVkaXRvclV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwudGV4dC5YU0RNb2RlbFF1ZXJ5RXh0ZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwudXRpbC5UeXBlc0hlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29uY3JldGVDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMTW9kZWxRdWVyeUV4dGVuc2lvbiBleHRlbmRzIFhTRE1vZGVsUXVlcnlFeHRlbnNpb24KLXsKLSAgcHVibGljIFdTRExNb2RlbFF1ZXJ5RXh0ZW5zaW9uKCkKLSAgewotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNQYXJlbnRFbGVtZW50TWVzc2FnZVJlZmVyZW5jZShTdHJpbmcgcGFyZW50RWxlbWVudE5hbWUpCi0gIHsKLSAgICByZXR1cm4gcGFyZW50RWxlbWVudE5hbWUuZXF1YWxzKCJpbnB1dCIpIHx8IHBhcmVudEVsZW1lbnROYW1lLmVxdWFscygib3V0cHV0IikgfHwgcGFyZW50RWxlbWVudE5hbWUuZXF1YWxzKCJmYXVsdCIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAotICB9Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNNZXNzYWdlUmVmZXJlbmNlKFN0cmluZyBlbGVtZW50TmFtZSkKLSAgewotICAgIHJldHVybiBlbGVtZW50TmFtZS5lcXVhbHMoImJvZHkiKSB8fCBlbGVtZW50TmFtZS5lcXVhbHMoImhlYWRlciIpIHx8IGVsZW1lbnROYW1lLmVxdWFscygiZmF1bHQiKSB8fCBlbGVtZW50TmFtZS5lcXVhbHMoInVybFJlcGxhY2VtZW50IikgfHwgZWxlbWVudE5hbWUuZXF1YWxzKCJ1cmxFbmNvZGVkIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkIC8vJE5PTi1OTFMtNCQgLy8kTk9OLU5MUy01JAotICB9Ci0gIAotICAKLSAgcHVibGljIGJvb2xlYW4gaXNBcHBsaWNhYmxlQ2hpbGRFbGVtZW50KE5vZGUgcGFyZW50Tm9kZSwgU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBib29sZWFuIHJlc3VsdCA9IHRydWU7ICAgIAotICAgIAotICAgIGlmIChwYXJlbnROb2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpCi0gICAgewotICAgICAgRWxlbWVudCBlbGVtZW50ID0gKEVsZW1lbnQpIHBhcmVudE5vZGU7Ci0gICAgICBTdHJpbmcgcGFyZW50RWxlbWVudE5hbWVzcGFjZVVSSSA9IHBhcmVudE5vZGUuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICBTdHJpbmcgcGFyZW50RWxlbWVudE5hbWUgPSBwYXJlbnROb2RlLmdldExvY2FsTmFtZSgpOwotICAgICAgLy8gb25seSBmaWx0ZXIgY2hpbGRyZW4gZm9yICdub24tc2NoZW1hJyBlbGVtZW50cwotICAgICAgLy8gICAKLSAgICAgIGlmICghV1NETENvbnN0YW50cy5YU0RfTkFNRVNQQUNFX1VSSS5lcXVhbHMocGFyZW50RWxlbWVudE5hbWVzcGFjZVVSSSkpCi0gICAgICB7Ci0gICAgICAgIGlmIChwYXJlbnRFbGVtZW50TmFtZSAhPSBudWxsICYmIG5hbWUgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGlmIChuYW1lc3BhY2UgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyB0aGUgZm9sbG93aW5nIG5hbWVzcGFjZSBhcmUgb25lIHRoYXQgYWx3YXlzIHNob3VsZCBiZSBmaWx0ZXJlZCBvdXQgICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIGZvciBub3cgdGhpcyBpcyBoYXJkY29kZWQKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICBpZiAobmFtZXNwYWNlLmVxdWFscygiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iKSkgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvLyBleGNsdWRlIHNvYXAtZW5jIGVsZW1lbnRzCi0gICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobmFtZXNwYWNlLmVxdWFscyhXU0RMQ29uc3RhbnRzLlhTRF9OQU1FU1BBQ0VfVVJJKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gZWNsaXBzZSBhbGwgc2NoZW1hIGVsZW1lbnRzLCBleGNlcHQgZm9yICdzY2hlbWEnIHdpdGhpbmcgd3NkbCB0eXBlcyBlbGVtZW50cyAKLSAgICAgICAgICAgICAgcmVzdWx0ID0gcGFyZW50RWxlbWVudE5hbWUuZXF1YWxzKCJ0eXBlcyIpICYmIG5hbWUuZXF1YWxzKCJzY2hlbWEiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChuYW1lc3BhY2UuZXF1YWxzKFdTRExDb25zdGFudHMuV1NETF9OQU1FU1BBQ0VfVVJJKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gY3MgOiB0aGUgJ3JlcXVpcmVkJyBhdHRyaWJ1dGUgaXMgYnVybmVkIGludG8gV1NETCBzY2hlbWEgYXMgdGhlICdiYXNlJyBleHRlbnNpYmlsaXR5IGVsZW1lbnQKLSAgICAgICAgICAgICAgLy8gdGhlIFdUUCBXU0RMIHZhbGlkYXRvciBjb21wbGFpbnMgd2hlbiB0aGVzZSBhcmUgcHJlc2VudCBzbyB0aGlzIGxpbmUgZmlsdGVycyB0aGVtIG91dAotICAgICAgICAgICAgICAvLyBvZiB0aGUgY29udGVudCBhc3Npc3QgYW5kIGV4dGVuc2lvbiBkZXRhaWxzIHZpZXcuICBBcyBmYXIgYXMgSSBjYW4gdGVsbCBubyBvbmUgYWN0dWFsbHkgdXNlcyAnZW0KLSAgICAgICAgICAgICAgLy8gaW4gcHJhY3Rpc2UgLi4uIHNvIGZpbHRlcmluZyB0aGVtIG91dCBzaG91bGQgYmUgb2suICAKLSAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgLy8gVE9ETyAoY3MpIGhvdyBjb21lIHRoZSBzY2hlbWEgc2F5cyB0aGVpciBvayBidXQgdGhlIHZhbGlkYXRvciBkb2Vzbid0IGxpa2UgdGhlbT8KLSAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgcmVzdWx0ID0gIW5hbWUuZXF1YWxzKCJyZXF1aXJlZCIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICB9ICAKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gVE9ETy4uIHdlIHNob3VsZCBpbnZlc3RpZ2F0ZSByZW1vdmluZyB0aGUgIEV4dGVuc2libGl0eUVsZW1lbnRGaWx0ZXIgZXh0ZW5zaW9uIHBvaW50Ci0gICAgICAgICAgICAgIC8vIHNob3VsZG4ndCB0aGlzIGJlIGEgTW9kZWxRdWVyeUV4dGVuc2lvbiBkZWZpbmVkIG9uIHRoZSBleHRlbnNpb24gbGFuZ3VhZ2VzPwotICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICBFeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyIGZpbHRlciA9IChFeHRlbnNpYmxpdHlFbGVtZW50RmlsdGVyKSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0RXh0ZW5zaWJsaXR5RWxlbWVudEZpbHRlclJlZ2lzdHJ5KCkuZ2V0UHJvcGVydHkobmFtZXNwYWNlLCAiIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgICAgaWYgKGZpbHRlciAhPSBudWxsKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gZmlsdGVyLmlzVmFsaWRDb250ZXh0KGVsZW1lbnQsIG5hbWUpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBzdXBlci5pc0FwcGxpY2FibGVDaGlsZEVsZW1lbnQocGFyZW50Tm9kZSwgbmFtZXNwYWNlLCBuYW1lKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRBdHRyaWJ1dGVWYWx1ZXMoRWxlbWVudCBlbGVtZW50LCBTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgbmFtZSkKLSAgewotICAgIGlmIChXU0RMQ29uc3RhbnRzLldTRExfTkFNRVNQQUNFX1VSSS5lcXVhbHMobmFtZXNwYWNlKSkKLSAgICB7Ci0gICAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICBDb21wb25lbnRSZWZlcmVuY2VVdGlsIHV0aWwgPSBuZXcgQ29tcG9uZW50UmVmZXJlbmNlVXRpbChsb29rdXBPckNyZWF0ZURlZmluaXRpb24oZWxlbWVudC5nZXRPd25lckRvY3VtZW50KCkpKTsKLSAgICAgIFN0cmluZyBjdXJyZW50RWxlbWVudE5hbWUgPSBlbGVtZW50LmdldExvY2FsTmFtZSgpOwotICAgICAgaWYgKGNoZWNrTmFtZShuYW1lLCAibWVzc2FnZSIpKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIGxpc3QuYWRkQWxsKHV0aWwuZ2V0TWVzc2FnZU5hbWVzKCkpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoY2hlY2tOYW1lKG5hbWUsICJiaW5kaW5nIikpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgbGlzdC5hZGRBbGwodXRpbC5nZXRCaW5kaW5nTmFtZXMoKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChjaGVja05hbWUobmFtZSwgInR5cGUiKSkgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBpZiAoY2hlY2tOYW1lKGN1cnJlbnRFbGVtZW50TmFtZSwgImJpbmRpbmciKSkgLy8kTk9OLU5MUy0xJAotICAgICAgICB7Ci0gICAgICAgICAgbGlzdC5hZGRBbGwodXRpbC5nZXRQb3J0VHlwZU5hbWVzKCkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGNoZWNrTmFtZShjdXJyZW50RWxlbWVudE5hbWUsICJwYXJ0IikpIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgewotICAgICAgICAgIGxpc3QuYWRkQWxsKHV0aWwuZ2V0Q29tcG9uZW50TmFtZUxpc3QodHJ1ZSkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChjaGVja05hbWUobmFtZSwgImVsZW1lbnQiKSkgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBpZiAoY2hlY2tOYW1lKGN1cnJlbnRFbGVtZW50TmFtZSwgInBhcnQiKSkgLy8kTk9OLU5MUy0xJAotICAgICAgICB7Ci0gICAgICAgICAgbGlzdC5hZGRBbGwodXRpbC5nZXRDb21wb25lbnROYW1lTGlzdChmYWxzZSkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBTdHJpbmdbXSByZXN1bHQgPSBuZXcgU3RyaW5nW2xpc3Quc2l6ZSgpXTsKLSAgICAgIGxpc3QudG9BcnJheShyZXN1bHQpOwotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJldHVybiBzdXBlci5nZXRBdHRyaWJ1dGVWYWx1ZXMoZWxlbWVudCwgbmFtZXNwYWNlLCBuYW1lKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQGRlcHJlY2F0ZWQKLSAgICovCi0gIHByb3RlY3RlZCBYU0RTY2hlbWEgbG9va3VwT3JDcmVhdGVTY2hlbWFGb3JFbGVtZW50KEVsZW1lbnQgZWxlbWVudCkKLSAgeyAgICAgICAKLSAgICByZXR1cm4gbG9va3VwT3JDcmVhdGVTY2hlbWEoZWxlbWVudCk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgWFNEU2NoZW1hIGxvb2t1cE9yQ3JlYXRlU2NoZW1hKEVsZW1lbnQgZWxlbWVudCkKLSAgeyAgIAotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBudWxsOwotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IGxvb2t1cE9yQ3JlYXRlRGVmaW5pdGlvbihlbGVtZW50LmdldE93bmVyRG9jdW1lbnQoKSk7Ci0gICAgT2JqZWN0IG8gPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmZpbmRNb2RlbE9iamVjdEZvckVsZW1lbnQoZGVmaW5pdGlvbiwgZWxlbWVudCk7Ci0gICAgaWYgKG8gaW5zdGFuY2VvZiBYU0RDb25jcmV0ZUNvbXBvbmVudCkKLSAgICB7Ci0gICAgICBzY2hlbWEgPSAoKFhTRENvbmNyZXRlQ29tcG9uZW50KSBvKS5nZXRTY2hlbWEoKTsKLSAgICB9IAotICAgIHJldHVybiBzY2hlbWE7ICAgIAotICB9Ci0gIAotICBwcm90ZWN0ZWQgRGVmaW5pdGlvbiBsb29rdXBPckNyZWF0ZURlZmluaXRpb24oRG9jdW1lbnQgZG9jdW1lbnQpCi0gIHsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBudWxsOwotICAgIGlmIChkb2N1bWVudCBpbnN0YW5jZW9mIElOb2RlTm90aWZpZXIpCi0gICAgewotICAgICAgSU5vZGVOb3RpZmllciBub3RpZmllciA9IChJTm9kZU5vdGlmaWVyKSBkb2N1bWVudDsKLSAgICAgIFdTRExNb2RlbEFkYXB0ZXIgYWRhcHRlciA9IChXU0RMTW9kZWxBZGFwdGVyKSBub3RpZmllci5nZXRBZGFwdGVyRm9yKFdTRExNb2RlbEFkYXB0ZXIuY2xhc3MpOwotICAgICAgaWYgKGFkYXB0ZXIgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgYWRhcHRlciA9IG5ldyBXU0RMTW9kZWxBZGFwdGVyKCk7Ci0gICAgICAgIG5vdGlmaWVyLmFkZEFkYXB0ZXIoYWRhcHRlcik7Ci0gICAgICAgIGFkYXB0ZXIuY3JlYXRlRGVmaW5pdGlvbihkb2N1bWVudCk7Ci0gICAgICB9Ci0gICAgICBkZWZpbml0aW9uID0gYWRhcHRlci5nZXREZWZpbml0aW9uKCk7Ci0gICAgfQotICAgIHJldHVybiBkZWZpbml0aW9uOwotICB9Ci0gIAotICAKLSAgcHJvdGVjdGVkIFR5cGVzSGVscGVyIGdldFR5cGVzSGVscGVyKGZpbmFsIEVsZW1lbnQgZWxlbWVudCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBsb29rdXBPckNyZWF0ZVNjaGVtYShlbGVtZW50KTsKLSAgICByZXR1cm4gbmV3IFR5cGVzSGVscGVyKHNjaGVtYSkKLSAgICB7Ci0gICAgICAvLyBUT0RPLi4uIGl0IHNlZW1zIGFzIHRob3VnaCB0aGUgbW9kZWwgaXMgbm90IGNvcnJlY3RseQotICAgICAgLy8gbWFpbnRpbmcgdGhlIGxpc3Qgb2YgcHJlZml4ZXMgZm9yIGEgZ2l2ZW4gbmFtZXNwYWNlCi0gICAgICAvLyBtdXN0IGJlIGEgYnVnIQotICAgICAgLy8KLSAgICAgIHByb3RlY3RlZCBMaXN0IGdldFByZWZpeGVzRm9yTmFtZXNwYWNlKFN0cmluZyBuYW1lc3BhY2UpCi0gICAgICB7Ci0gICAgICAgIExpc3QgbGlzdCA9IHN1cGVyLmdldFByZWZpeGVzRm9yTmFtZXNwYWNlKG5hbWVzcGFjZSk7Ci0gICAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IGxvb2t1cE9yQ3JlYXRlRGVmaW5pdGlvbihlbGVtZW50LmdldE93bmVyRG9jdW1lbnQoKSk7Ci0gICAgICAgIGlmIChkZWZpbml0aW9uICE9IG51bGwpCi0gICAgICAgIHsgIAotICAgICAgICAgIE1hcCBtYXAgPSBkZWZpbml0aW9uLmdldE5hbWVzcGFjZXMoKTsKLSAgICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBtYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBwcmVmaXggPSAoU3RyaW5nKSBpLm5leHQoKTsKLSAgICAgICAgICAgIFN0cmluZyBucyA9IChTdHJpbmcpIG1hcC5nZXQocHJlZml4KTsKLSAgICAgICAgICAgIGlmIChucyAhPSBudWxsICYmIG5zLmVxdWFscyhuYW1lc3BhY2UpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBpZiAoIWxpc3QuY29udGFpbnMocHJlZml4KSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGxpc3QuYWRkKHByZWZpeCk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGxpc3Q7Ci0gICAgICB9ICAgICAgIAotICAgIH07ICAgIAotICB9IAotICAKLSAgLyoqICAgCi0gICAqIEBkZXByZWNhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgRGVmaW5pdGlvbiBsb29rdXBPckNyZWF0ZURlZmluaXRpb24oRWxlbWVudCBlbGVtZW50KQotICB7Ci0gICAgcmV0dXJuIGxvb2t1cE9yQ3JlYXRlRGVmaW5pdGlvbihlbGVtZW50LmdldE93bmVyRG9jdW1lbnQoKSk7Ci0gIH0gCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3RleHQvV1NETE1vZGVsUmVjb25jaWxlQWRhcHRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC90ZXh0L1dTRExNb2RlbFJlY29uY2lsZUFkYXB0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzcyMDc2OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3RleHQvV1NETE1vZGVsUmVjb25jaWxlQWRhcHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC50ZXh0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkRlZmluaXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETEVsZW1lbnRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETEVkaXRvclV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwudXRpbC5Nb2RlbFJlY29uY2lsZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbmNyZXRlQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5pbXBsLlhTRFNjaGVtYUltcGw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0KLWNsYXNzIFdTRExNb2RlbFJlY29uY2lsZUFkYXB0ZXIgZXh0ZW5kcyBNb2RlbFJlY29uY2lsZUFkYXB0ZXIKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICBwcm90ZWN0ZWQgRGVmaW5pdGlvbiBkZWZpbml0aW9uOwotCi0gIHB1YmxpYyBXU0RMTW9kZWxSZWNvbmNpbGVBZGFwdGVyKERvY3VtZW50IGRvY3VtZW50LCBEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsgICAgICAgICAgIAotICAgIHN1cGVyKGRvY3VtZW50KTsKLSAgICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotICB9IAotCi0gIC8vIFRoaXMgbWV0aG9kIGlzIGNsZXZlciBlbm91Z2ggdG8gZGVhbCB3aXRoICdiYWQnIGRvY3VtZW50cyB0aGF0IGhhcHBlbiAKLSAgLy8gdG8gaGF2ZSBtb3JlIHRoYW4gb25lIHJvb3QgZWxlbWVudC4gIEl0IHBpY2tzIG9mIHRoZSBmaXJzdCAnbWF0Y2hpbmcnIGVsZW1lbnQuCi0gIC8vCi0gIC8vIFRPRE8gKGNzKSB3aHkgYXJlbid0IHdlIGNhbGxpbmcgdGhpcyBmcm9tIHRoZSBXU0RMTW9kZWxBZGFwdGVyIHdoZW4gdGhlIG1vZGVsIGlzIGluaXRpYWxpemVkPwotICAvLwotICBwcml2YXRlIEVsZW1lbnQgZ2V0RGVmaW5pdGlvbkVsZW1lbnQoRG9jdW1lbnQgZG9jdW1lbnQpCi0gIHsKLSAgICBFbGVtZW50IGRlZmluaXRpb25FbGVtZW50ID0gbnVsbDsgICAgCi0gICAgZm9yIChOb2RlIG5vZGUgPSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7IG5vZGUgIT0gbnVsbDsgbm9kZSA9IG5vZGUuZ2V0TmV4dFNpYmxpbmcoKSkKLSAgICB7Ci0gICAgICBpZiAobm9kZS5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFKQotICAgICAgewotICAgICAgICBFbGVtZW50IGVsZW1lbnQgPSAoRWxlbWVudClub2RlOwotICAgICAgICBpZiAoV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRXU0RMVHlwZShlbGVtZW50KSA9PSBXU0RMQ29uc3RhbnRzLkRFRklOSVRJT04pCi0gICAgICAgIHsKLSAgICAgICAgICBkZWZpbml0aW9uRWxlbWVudCA9IGVsZW1lbnQ7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGRlZmluaXRpb25FbGVtZW50OwotICB9Ci0gIAotICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVOb2RlQ2hhbmdlZChOb2RlIG5vZGUpCi0gIHsKLSAgICBpZiAobm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQpCi0gICAgewotICAgICAgcmVjb25jaWxlTW9kZWxPYmplY3RGb3JFbGVtZW50KChFbGVtZW50KW5vZGUpOyAgICAgIAotICAgIH0KLSAgICBlbHNlIGlmIChub2RlIGluc3RhbmNlb2YgRG9jdW1lbnQpCi0gICAgewotICAgICAgLy8gVGhlIGRvY3VtZW50IGNoYW5nZWQgc28gd2UgbWF5IG5lZWQgdG8gZml4IHVwIHRoZSAKLSAgICAgIC8vIGRlZmluaXRpb24ncyByb290IGVsZW1lbnQKLSAgICAgIERvY3VtZW50IGRvY3VtZW50ID0gKERvY3VtZW50KW5vZGU7ICAgIAotICAgICAgRWxlbWVudCBkZWZpbml0aW9uRWxlbWVudCA9IGdldERlZmluaXRpb25FbGVtZW50KGRvY3VtZW50KTsKLSAgICAgIGlmIChkZWZpbml0aW9uRWxlbWVudCAhPSBudWxsICYmIGRlZmluaXRpb25FbGVtZW50ICE9IGRlZmluaXRpb24uZ2V0RWxlbWVudCgpKQotICAgICAgeyAgIAotICAgICAgICAvLyBoZXJlIHdlIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBhIG5ldyAnZGVmaW5pdGlvbicgZWxlbWVudCB3YXMgYWRkZWQKLSAgICAgICAgLy8oZS5nLiB0aGUgZmlsZSB3YXMgdG90YWxseSBibGFuayBhbmQgdGhlbiB3ZSB0eXBlIGluIHRoZSByb290IGVsZW1lbnQpICAgICAgICAKLSAgICAgICAgLy8gU2VlIEJ1ZyA1MzY2Ci0gICAgICAgIC8vCi0gICAgICAgIGlmIChkZWZpbml0aW9uRWxlbWVudC5nZXRMb2NhbE5hbWUoKS5lcXVhbHMoV1NETENvbnN0YW50cy5ERUZJTklUSU9OX0VMRU1FTlRfVEFHKSkgICAgICAgICAKLSAgICAgICAgeyAgCi0gICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKiBTZXR0aW5nIG5ldyBkZWZpbml0aW9uIik7Ci0gICAgICAgICAgZGVmaW5pdGlvbi5zZXRFbGVtZW50KGRlZmluaXRpb25FbGVtZW50KTsKLSAgICAgICAgfQotICAgICAgfSAgICAgIAotICAgICAgZWxzZSBpZiAoZGVmaW5pdGlvbkVsZW1lbnQgIT0gbnVsbCkKLSAgICAgIHsgICAgICAgCi0gICAgICAgIC8vIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgZGVmaW5pdGlvbiBlbGVtZW50J3MgY29udGVudCBoYXMgY2hhbmdlZAotICAgICAgICAvLyAKLSAgICAgICAgKChEZWZpbml0aW9uSW1wbClkZWZpbml0aW9uKS5lbGVtZW50Q2hhbmdlZChkZWZpbml0aW9uRWxlbWVudCk7Ci0gICAgICB9ICAgICAgCi0gICAgICBlbHNlIGlmIChkZWZpbml0aW9uRWxlbWVudCA9PSBudWxsKQotICAgICAgewotICAgICAgICAvLyBpZiB0aGVyZSdzIG5vIGRlZmluaXRpb24gZWxlbWVudCBjbGVhciBvdXQgdGhlIFdTREwKLSAgICAgICAgLy8KLSAgICAgICAgKChEZWZpbml0aW9uSW1wbClkZWZpbml0aW9uKS5yZW1vdmVBbGwoKTsKLSAgICAgICAgCi0gICAgICAgIC8vIFRoZSByZW1vdmVBbGwoKSBjYWxsIGRvZXMgbm90IHJlbW92ZSBuYW1lc3BhY2VzIGFzIHdlbGwgYW5kIHRoZSBtb2RlbAotICAgICAgICAvLyBkb2VzIG5vdCByZWNvbmNpbGUgd2VsbCBpbiB0aGlzIGNhc2UuIEFsc28gcmVzZXQgdGhlIGRlZmluaXRpb24gbmFtZSBhbmQgdGFyZ2V0Ci0gICAgICAgIC8vIG5hbWVzcGFjZS4KLSAgICAgICAgCi0gICAgICAgIGRlZmluaXRpb24uZ2V0TmFtZXNwYWNlcygpLmNsZWFyKCk7Ci0gICAgICAgIGRlZmluaXRpb24uc2V0UU5hbWUobnVsbCk7Ci0gICAgICAgIGRlZmluaXRpb24uc2V0VGFyZ2V0TmFtZXNwYWNlKG51bGwpOwotICAgICAgICAKLSAgICAgICAgLy8gUmVzZXQgdGhlIGRvY3VtZW50IGJlY2F1c2UgcmVtb3ZlQWxsKCkgc2V0cyB0aGUgZG9jdW1lbnQgdG8gbnVsbCBhcyB3ZWxsLgotICAgICAgICBkZWZpbml0aW9uLnNldERvY3VtZW50KGRvY3VtZW50KTsKLSAgICAgIH0KLSAgICB9ICAgICAgICAgCi0gIH0KLSAgICAgICAKLSAgcHJpdmF0ZSB2b2lkIHJlY29uY2lsZU1vZGVsT2JqZWN0Rm9yRWxlbWVudChFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBPYmplY3QgbW9kZWxPYmplY3QgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmZpbmRNb2RlbE9iamVjdEZvckVsZW1lbnQoZGVmaW5pdGlvbiwgZWxlbWVudCk7ICAKLSAgICBpZiAobW9kZWxPYmplY3QgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAobW9kZWxPYmplY3QgaW5zdGFuY2VvZiBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwpCi0gICAgICB7Ci0gICAgICAgIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCBlZSA9IChYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudEltcGwpbW9kZWxPYmplY3Q7Ci0gICAgICAgICgoWFNEU2NoZW1hSW1wbCllZS5nZXRTY2hlbWEoKSkuZWxlbWVudENoYW5nZWQoZWxlbWVudCk7Ci0gICAgICAgIGVlLmVsZW1lbnRDaGFuZ2VkKGVsZW1lbnQpOyAgICAgICAgICAgIAotICAgICAgfSAgIAotICAgICAgZWxzZSBpZiAobW9kZWxPYmplY3QgaW5zdGFuY2VvZiBXU0RMRWxlbWVudEltcGwpCi0gICAgICB7Ci0gICAgICAgICgoV1NETEVsZW1lbnRJbXBsKW1vZGVsT2JqZWN0KS5lbGVtZW50Q2hhbmdlZChlbGVtZW50KTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKG1vZGVsT2JqZWN0IGluc3RhbmNlb2YgWFNEQ29uY3JldGVDb21wb25lbnQpCi0gICAgICB7Ci0gICAgICAgICgoWFNEQ29uY3JldGVDb21wb25lbnQpbW9kZWxPYmplY3QpLmVsZW1lbnRDaGFuZ2VkKGVsZW1lbnQpOyAgICAgICAgCi0gICAgICB9ICAKLSAgICB9ICAgICAKLSAgfSAgCi0KLSAgLyoqCi0gICAqIEBkZXByZWNhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCByZWNvbmNpbGVNb2RlbE9iamVjdEZvckVsZW1lbnQoRWxlbWVudCBlbGVtZW50LCBpbnQgZXZlbnRUeXBlLCBPYmplY3QgZmVhdHVyZSwgT2JqZWN0IG9sZFZhbHVlLCBPYmplY3QgbmV3VmFsdWUsIGludCBpbmRleCkKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIHJlY29uY2lsZU1vZGVsT2JqZWN0Rm9yRWxlbWVudChlbGVtZW50KTsKLSAgfSAgCi0gIAotICBwdWJsaWMgdm9pZCBtb2RlbERpcnR5U3RhdGVDaGFuZ2VkKElTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwsIGJvb2xlYW4gaXNEaXJ0eSkKLSAgewotICAgIGlmICghaXNEaXJ0eSkKLSAgICB7ICAKLSAgICAgIC8vIGNzIDogQXQgdGhpcyB0aW1lICh3aGVuIGEgc2F2ZSBvY2N1cnMpIGl0J3MgYSBnb29kIG9wcG9ydHVuaXR5Ci0gICAgICAvLyB0byB1cGRhdGUgdGhlIG1vZGVsIHRvIGVuc3VyZSBpdCdzIGluIHN5bmMgd2l0aCB0aGUgc291cmNlLiAKLSAgICAgIC8vIFRoYXQgd2F5IGlmIHRoZSBpbmNyZW1lbnRhbCBzeW5jIGJldHdlZW4gRE9NIGFuZCBtb2RlbCBoYXMgZ290dGVuCi0gICAgICAvLyB0aGUgbW9kZWwgb3V0IG9mIHdoYWNrIHdlJ2xsIGJlIGFibGUgdG8gcHV0IHRoaW5ncyByaWdodCBhdCB0aGlzIHBvaW50LgotICAgICAgLy8gICAKLSAgICAgIC8vIFRPRE8gKGNzKSBuZWVkIHRvIGRvIG1vcmUgdG8gZW5zdXJlIG1vZGVsIGlzIHN5bmMnZCB1cCBwcm9wZXJseSAgICAgIAotICAgICAgKChEZWZpbml0aW9uSW1wbClkZWZpbml0aW9uKS5yZWNvbmNpbGVSZWZlcmVuY2VzKHRydWUpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL0NvbXBvbmVudFJlZmVyZW5jZVV0aWwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9Db21wb25lbnRSZWZlcmVuY2VVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwZjMwZWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL0NvbXBvbmVudFJlZmVyZW5jZVV0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIuaW50ZXJuYWwudXRpbC5VUklIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk91dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkltcG9ydEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMRWxlbWVudEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZXh0ZW5zaW9ucy5JVHlwZVN5c3RlbVByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50czsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLQotcHVibGljIGNsYXNzIENvbXBvbmVudFJlZmVyZW5jZVV0aWwKLXsKLSAgcHJvdGVjdGVkIERlZmluaXRpb24gcm9vdERlZmluaXRpb247Ci0KLSAgcHVibGljIENvbXBvbmVudFJlZmVyZW5jZVV0aWwoRGVmaW5pdGlvbiByb290RGVmaW5pdGlvbikKLSAgewotICAgIHRoaXMucm9vdERlZmluaXRpb24gPSByb290RGVmaW5pdGlvbjsKLSAgfQotCi0gIHByb3RlY3RlZCBzdGF0aWMgYm9vbGVhbiBpc0VxdWFsKFN0cmluZyBhLCBTdHJpbmcgYikKLSAgewotICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0gICAgaWYgKGEgIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBhLmVxdWFscyhiKSB8fCAoYS5sZW5ndGgoKSA9PSAwICYmIGIgPT0gbnVsbCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXN1bHQgPSAoYiA9PSBudWxsIHx8IGIubGVuZ3RoKCkgPT0gMCk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwcm90ZWN0ZWQgc3RhdGljIGJvb2xlYW4gaXNFcXVhbElucHV0TmFtZShPcGVyYXRpb24gb3BlcmF0aW9uLCBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24pCi0gIHsKLSAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotICAgIElucHV0IG9wZXJhdGlvbklucHV0ID0gb3BlcmF0aW9uLmdldEVJbnB1dCgpOwotICAgIEJpbmRpbmdJbnB1dCBiaW5kaW5nT3BlcmF0aW9uSW5wdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEVCaW5kaW5nSW5wdXQoKTsKLQotICAgIGlmIChvcGVyYXRpb25JbnB1dCAhPSBudWxsICYmIGJpbmRpbmdPcGVyYXRpb25JbnB1dCAhPSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IGlzRXF1YWwob3BlcmF0aW9uSW5wdXQuZ2V0TmFtZSgpLCBiaW5kaW5nT3BlcmF0aW9uSW5wdXQuZ2V0TmFtZSgpKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAob3BlcmF0aW9uSW5wdXQgPT0gbnVsbCAmJiBiaW5kaW5nT3BlcmF0aW9uSW5wdXQgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHJvdGVjdGVkIHN0YXRpYyBib29sZWFuIGlzRXF1YWxPdXRwdXROYW1lKE9wZXJhdGlvbiBvcGVyYXRpb24sIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbikKLSAgewotICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0gICAgT3V0cHV0IG9wZXJhdGlvbk91dHB1dCA9IG9wZXJhdGlvbi5nZXRFT3V0cHV0KCk7Ci0gICAgQmluZGluZ091dHB1dCBiaW5kaW5nT3BlcmF0aW9uT3V0cHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRFQmluZGluZ091dHB1dCgpOwotCi0gICAgaWYgKG9wZXJhdGlvbk91dHB1dCAhPSBudWxsICYmIGJpbmRpbmdPcGVyYXRpb25PdXRwdXQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBpc0VxdWFsKG9wZXJhdGlvbk91dHB1dC5nZXROYW1lKCksIGJpbmRpbmdPcGVyYXRpb25PdXRwdXQuZ2V0TmFtZSgpKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAob3BlcmF0aW9uT3V0cHV0ID09IG51bGwgJiYgYmluZGluZ09wZXJhdGlvbk91dHB1dCA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IHRydWU7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwcm90ZWN0ZWQgc3RhdGljIGJvb2xlYW4gaXNNYXRjaGluZ0JpbmRpbmcoT3BlcmF0aW9uIG9wZXJhdGlvbiwgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uKQotICB7Ci0gICAgcmV0dXJuIGlzRXF1YWwob3BlcmF0aW9uLmdldE5hbWUoKSwgYmluZGluZ09wZXJhdGlvbi5nZXROYW1lKCkpOyAvKiAmJgotICAgIAkJCSAgIGlzRXF1YWxJbnB1dE5hbWUob3BlcmF0aW9uLCBiaW5kaW5nT3BlcmF0aW9uKSAmJgotICAgIAkJCSAgIGlzRXF1YWxPdXRwdXROYW1lKG9wZXJhdGlvbiwgYmluZGluZ09wZXJhdGlvbik7Ki8KLSAgfQotCi0gIHB1YmxpYyBMaXN0IGdldFBvcnRzRm9yUG9ydFR5cGUoUG9ydFR5cGUgcG9ydFR5cGUpCi0gIHsKLSAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gZ2V0U2VydmljZXMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2UpIGkubmV4dCgpOwotICAgICAgZm9yIChJdGVyYXRvciBqID0gc2VydmljZS5nZXRFUG9ydHMoKS5pdGVyYXRvcigpOyBqLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIFBvcnQgcG9ydCA9IChQb3J0KSBqLm5leHQoKTsKLSAgICAgICAgQmluZGluZyBiaW5kaW5nID0gcG9ydC5nZXRFQmluZGluZygpOwotICAgICAgICBpZiAoYmluZGluZyAhPSBudWxsICYmIGJpbmRpbmcuZ2V0RVBvcnRUeXBlKCkgPT0gcG9ydFR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBsaXN0LmFkZChwb3J0KTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbGlzdDsKLSAgfQotCi0gIHB1YmxpYyBMaXN0IGdldFBvcnRzRm9yQmluZGluZyhCaW5kaW5nIGJpbmRpbmcpCi0gIHsKLSAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gZ2V0U2VydmljZXMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2UpIGkubmV4dCgpOwotICAgICAgZm9yIChJdGVyYXRvciBqID0gc2VydmljZS5nZXRFUG9ydHMoKS5pdGVyYXRvcigpOyBqLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIFBvcnQgcG9ydCA9IChQb3J0KSBqLm5leHQoKTsKLSAgICAgICAgaWYgKHBvcnQuZ2V0RUJpbmRpbmcoKSA9PSBiaW5kaW5nKQotICAgICAgICB7Ci0gICAgICAgICAgbGlzdC5hZGQocG9ydCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLQotICBwdWJsaWMgTGlzdCBnZXRCaW5kaW5nT3BlcmF0aW9ucyhPcGVyYXRpb24gb3BlcmF0aW9uKQotICB7Ci0gICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIFN0cmluZyBvcGVyYXRpb25OYW1lID0gb3BlcmF0aW9uLmdldE5hbWUoKTsKLQotICAgIGlmIChvcGVyYXRpb25OYW1lICE9IG51bGwpCi0gICAgewotICAgICAgUG9ydFR5cGUgcG9ydFR5cGUgPSBnZXRFbmNsb3NpbmdQb3J0VHlwZShvcGVyYXRpb24pOwotICAgICAgZm9yIChJdGVyYXRvciBpID0gZ2V0QmluZGluZ3MocG9ydFR5cGUpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICAgIHsKLSAgICAgICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpIGkubmV4dCgpOwotICAgICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSBnZXRCaW5kaW5nT3BlcmF0aW9uKG9wZXJhdGlvbiwgYmluZGluZyk7Ci0gICAgICAgIGlmIChiaW5kaW5nT3BlcmF0aW9uICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBsaXN0LmFkZChiaW5kaW5nT3BlcmF0aW9uKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbGlzdDsKLSAgfQotCi0gIHB1YmxpYyBCaW5kaW5nT3BlcmF0aW9uIGdldEJpbmRpbmdPcGVyYXRpb24oT3BlcmF0aW9uIG9wZXJhdGlvbiwgQmluZGluZyBiaW5kaW5nKQotICB7Ci0gICAgQmluZGluZ09wZXJhdGlvbiByZXN1bHQgPSBudWxsOwotICAgIGZvciAoSXRlcmF0b3IgaiA9IGJpbmRpbmcuZ2V0QmluZGluZ09wZXJhdGlvbnMoKS5pdGVyYXRvcigpOyBqLmhhc05leHQoKTspCi0gICAgewotICAgICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gKEJpbmRpbmdPcGVyYXRpb24pIGoubmV4dCgpOwotICAgICAgaWYgKGlzTWF0Y2hpbmdCaW5kaW5nKG9wZXJhdGlvbiwgYmluZGluZ09wZXJhdGlvbikpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IGJpbmRpbmdPcGVyYXRpb247Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIEJpbmRpbmdJbnB1dCBnZXRCaW5kaW5nSW5wdXQoSW5wdXQgaW5wdXQsIEJpbmRpbmcgYmluZGluZykKLSAgewotICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IGdldEJpbmRpbmdPcGVyYXRpb24oKE9wZXJhdGlvbikgaW5wdXQuZUNvbnRhaW5lcigpLCBiaW5kaW5nKTsKLSAgICByZXR1cm4gYmluZGluZ09wZXJhdGlvbiAhPSBudWxsID8gYmluZGluZ09wZXJhdGlvbi5nZXRFQmluZGluZ0lucHV0KCkgOiBudWxsOwotICB9Ci0KLSAgcHVibGljIEJpbmRpbmdPdXRwdXQgZ2V0QmluZGluZ091dHB1dChPdXRwdXQgb3V0cHV0LCBCaW5kaW5nIGJpbmRpbmcpCi0gIHsKLSAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSBnZXRCaW5kaW5nT3BlcmF0aW9uKChPcGVyYXRpb24pIG91dHB1dC5lQ29udGFpbmVyKCksIGJpbmRpbmcpOwotICAgIHJldHVybiBiaW5kaW5nT3BlcmF0aW9uICE9IG51bGwgPyBiaW5kaW5nT3BlcmF0aW9uLmdldEVCaW5kaW5nT3V0cHV0KCkgOiBudWxsOwotICB9Ci0KLSAgcHVibGljIEJpbmRpbmdGYXVsdCBnZXRCaW5kaW5nRmF1bHQoRmF1bHQgZmF1bHQsIEJpbmRpbmcgYmluZGluZykKLSAgewotICAgIEJpbmRpbmdGYXVsdCByZXN1bHQgPSBudWxsOwotICAgIFN0cmluZyBmYXVsdE5hbWUgPSBmYXVsdC5nZXROYW1lKCk7Ci0gICAgaWYgKGZhdWx0TmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IGdldEJpbmRpbmdPcGVyYXRpb24oKE9wZXJhdGlvbikgZmF1bHQuZUNvbnRhaW5lcigpLCBiaW5kaW5nKTsKLSAgICAgIGlmIChiaW5kaW5nT3BlcmF0aW9uICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IChCaW5kaW5nRmF1bHQpIGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0ZhdWx0KGZhdWx0TmFtZSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgRU9iamVjdCBnZXRCaW5kaW5nT2JqZWN0KEVPYmplY3QgaW50ZXJmYWNlT2JqZWN0LCBCaW5kaW5nIGJpbmRpbmcpCi0gIHsKLSAgICBFT2JqZWN0IHJlc3VsdCA9IG51bGw7Ci0gICAgaWYgKGludGVyZmFjZU9iamVjdCBpbnN0YW5jZW9mIElucHV0KQotICAgIHsKLSAgICAgIHJlc3VsdCA9IGdldEJpbmRpbmdJbnB1dCgoSW5wdXQpIGludGVyZmFjZU9iamVjdCwgYmluZGluZyk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGludGVyZmFjZU9iamVjdCBpbnN0YW5jZW9mIE91dHB1dCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBnZXRCaW5kaW5nT3V0cHV0KChPdXRwdXQpIGludGVyZmFjZU9iamVjdCwgYmluZGluZyk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGludGVyZmFjZU9iamVjdCBpbnN0YW5jZW9mIEZhdWx0KQotICAgIHsKLSAgICAgIHJlc3VsdCA9IGdldEJpbmRpbmdGYXVsdCgoRmF1bHQpIGludGVyZmFjZU9iamVjdCwgYmluZGluZyk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGludGVyZmFjZU9iamVjdCBpbnN0YW5jZW9mIE9wZXJhdGlvbikKLSAgICB7Ci0gICAgICByZXN1bHQgPSBnZXRCaW5kaW5nT3BlcmF0aW9uKChPcGVyYXRpb24pIGludGVyZmFjZU9iamVjdCwgYmluZGluZyk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGludGVyZmFjZU9iamVjdCBpbnN0YW5jZW9mIFBvcnRUeXBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IGJpbmRpbmc7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgTGlzdCBnZXRCaW5kaW5nSW5wdXRzKElucHV0IGlucHV0KQotICB7Ci0gICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIExpc3Qgb3BlcmF0aW9ucyA9IGdldEJpbmRpbmdPcGVyYXRpb25zKChPcGVyYXRpb24pIGlucHV0LmVDb250YWluZXIoKSk7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gb3BlcmF0aW9ucy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gKEJpbmRpbmdPcGVyYXRpb24pIGkubmV4dCgpOwotICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgbGlzdC5hZGQoYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nSW5wdXQoKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBsaXN0OwotICB9Ci0KLSAgcHVibGljIExpc3QgZ2V0QmluZGluZ091dHB1dHMoT3V0cHV0IG91dHB1dCkKLSAgewotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gKE9wZXJhdGlvbikgb3V0cHV0LmVDb250YWluZXIoKTsKLSAgICBpZiAob3BlcmF0aW9uICE9IG51bGwpCi0gICAgewotICAgICAgTGlzdCBvcGVyYXRpb25zID0gZ2V0QmluZGluZ09wZXJhdGlvbnMob3BlcmF0aW9uKTsKLSAgICAgIGZvciAoSXRlcmF0b3IgaSA9IG9wZXJhdGlvbnMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbikgaS5uZXh0KCk7Ci0gICAgICAgIGlmIChiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgbGlzdC5hZGQoYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nT3V0cHV0KCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBsaXN0OwotICB9Ci0KLSAgcHVibGljIExpc3QgZ2V0QmluZGluZ0ZhdWx0cyhGYXVsdCBmYXVsdCkKLSAgewotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBTdHJpbmcgZmF1bHROYW1lID0gZmF1bHQuZ2V0TmFtZSgpOwotICAgIGlmIChmYXVsdE5hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gKE9wZXJhdGlvbikgZmF1bHQuZUNvbnRhaW5lcigpOwotICAgICAgaWYgKG9wZXJhdGlvbiAhPSBudWxsKQotICAgICAgewotICAgICAgICBMaXN0IG9wZXJhdGlvbnMgPSBnZXRCaW5kaW5nT3BlcmF0aW9ucyhvcGVyYXRpb24pOwotICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBvcGVyYXRpb25zLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICAgICAgewotICAgICAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKSBpLm5leHQoKTsKLSAgICAgICAgICBCaW5kaW5nRmF1bHQgYmluZGluZ0ZhdWx0ID0gKEJpbmRpbmdGYXVsdCkgYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nRmF1bHQoZmF1bHROYW1lKTsKLSAgICAgICAgICBpZiAoYmluZGluZ0ZhdWx0ICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgbGlzdC5hZGQoYmluZGluZ0ZhdWx0KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLQotICBwcm90ZWN0ZWQgUG9ydFR5cGUgZ2V0RW5jbG9zaW5nUG9ydFR5cGUoT3BlcmF0aW9uIG9wZXJhdGlvbikKLSAgewotICAgIHJldHVybiAoUG9ydFR5cGUpIG9wZXJhdGlvbi5lQ29udGFpbmVyKCk7Ci0gIH0KLQotICBwdWJsaWMgTGlzdCBnZXRCaW5kaW5ncyhPcGVyYXRpb24gb3BlcmF0aW9uKQotICB7Ci0gICAgcmV0dXJuIGdldEJpbmRpbmdzKGdldEVuY2xvc2luZ1BvcnRUeXBlKG9wZXJhdGlvbikpOwotICB9Ci0KLSAgcHVibGljIExpc3QgZ2V0QmluZGluZ3MoUG9ydFR5cGUgcG9ydFR5cGUpCi0gIHsKLSAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gZ2V0RGVmaW5pdGlvbnMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gKERlZmluaXRpb24pIGkubmV4dCgpOwotICAgICAgZm9yIChJdGVyYXRvciBqID0gZGVmaW5pdGlvbi5nZXRCaW5kaW5ncygpLnZhbHVlcygpLml0ZXJhdG9yKCk7IGouaGFzTmV4dCgpOykKLSAgICAgIHsKLSAgICAgICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpIGoubmV4dCgpOwotICAgICAgICBpZiAocG9ydFR5cGUgPT0gbnVsbCB8fCBiaW5kaW5nLmdldFBvcnRUeXBlKCkgPT0gcG9ydFR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBsaXN0LmFkZChiaW5kaW5nKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbGlzdDsKLSAgfQotCi0gIHB1YmxpYyBMaXN0IGdldEJpbmRpbmdzV2l0aG91dE9wZXJhdGlvbihQb3J0VHlwZSBwb3J0VHlwZSwgU3RyaW5nIG9wZXJhdGlvbk5hbWUpCi0gIHsKLSAgICBMaXN0IHJlc3VsdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBpZiAob3BlcmF0aW9uTmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIExpc3QgYmluZGluZ3MgPSBnZXRCaW5kaW5ncyhwb3J0VHlwZSk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBiaW5kaW5ncy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBpLm5leHQoKTsKLSAgICAgICAgYm9vbGVhbiBoYXNOYW1lID0gZmFsc2U7Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaiA9IGJpbmRpbmcuZ2V0QmluZGluZ09wZXJhdGlvbnMoKS5pdGVyYXRvcigpOyBqLmhhc05leHQoKTspCi0gICAgICAgIHsKLSAgICAgICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbikgai5uZXh0KCk7Ci0gICAgICAgICAgaWYgKG9wZXJhdGlvbk5hbWUuZXF1YWxzKGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBoYXNOYW1lID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoIWhhc05hbWUpCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQuYWRkKGJpbmRpbmcpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgTGlzdCBnZXRCaW5kaW5ncygpCi0gIHsKLSAgICByZXR1cm4gZ2V0QmluZGluZ3MoKFBvcnRUeXBlKSBudWxsKTsKLSAgfQotCi0gIHB1YmxpYyBMaXN0IGdldEJpbmRpbmdOYW1lcygpCi0gIHsKLSAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gZ2V0QmluZGluZ3MoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpIGkubmV4dCgpOwotICAgICAgbGlzdC5hZGRBbGwoZ2V0UHJlZml4ZWROYW1lcyhiaW5kaW5nLmdldFFOYW1lKCkpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLQotICBwdWJsaWMgTGlzdCBnZXRQb3J0VHlwZU5hbWVzKCkKLSAgewotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBnZXREZWZpbml0aW9ucygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSAoRGVmaW5pdGlvbikgaS5uZXh0KCk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGogPSBkZWZpbml0aW9uLmdldFBvcnRUeXBlcygpLnZhbHVlcygpLml0ZXJhdG9yKCk7IGouaGFzTmV4dCgpOykKLSAgICAgIHsKLSAgICAgICAgUG9ydFR5cGUgcG9ydFR5cGUgPSAoUG9ydFR5cGUpIGoubmV4dCgpOwotICAgICAgICBsaXN0LmFkZEFsbChnZXRQcmVmaXhlZE5hbWVzKHBvcnRUeXBlLmdldFFOYW1lKCkpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLQotICBwdWJsaWMgTGlzdCBnZXRTZXJ2aWNlcygpCi0gIHsKLSAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gZ2V0RGVmaW5pdGlvbnMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gKERlZmluaXRpb24pIGkubmV4dCgpOwotICAgICAgbGlzdC5hZGRBbGwoZGVmaW5pdGlvbi5nZXRFU2VydmljZXMoKSk7Ci0gICAgfQotICAgIHJldHVybiBsaXN0OwotICB9Ci0KLSAgcHVibGljIExpc3QgZ2V0UG9ydFR5cGVzKCkKLSAgewotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBnZXREZWZpbml0aW9ucygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSAoRGVmaW5pdGlvbikgaS5uZXh0KCk7Ci0gICAgICBsaXN0LmFkZEFsbChkZWZpbml0aW9uLmdldEVQb3J0VHlwZXMoKSk7Ci0gICAgfQotICAgIHJldHVybiBsaXN0OwotICB9Ci0KLSAgcHVibGljIExpc3QgZ2V0TWVzc2FnZXMoKQotICB7Ci0gICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IGdldERlZmluaXRpb25zKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKSBpLm5leHQoKTsKLSAgICAgIGxpc3QuYWRkQWxsKGRlZmluaXRpb24uZ2V0RU1lc3NhZ2VzKCkpOwotICAgIH0KLSAgICByZXR1cm4gbGlzdDsKLSAgfQotCi0gIHB1YmxpYyBMaXN0IGdldFR5cGVzKCkKLSAgewotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBnZXREZWZpbml0aW9ucygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSAoRGVmaW5pdGlvbikgaS5uZXh0KCk7Ci0gICAgICBpZiAoZGVmaW5pdGlvbi5nZXRFVHlwZXMoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBsaXN0LmFkZChkZWZpbml0aW9uLmdldEVUeXBlcygpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLQotICBwdWJsaWMgTGlzdCBnZXRNZXNzYWdlTmFtZXMoKQotICB7Ci0gICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IGdldERlZmluaXRpb25zKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKSBpLm5leHQoKTsKLSAgICAgIGZvciAoSXRlcmF0b3IgaiA9IGRlZmluaXRpb24uZ2V0TWVzc2FnZXMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOyBqLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IChNZXNzYWdlKSBqLm5leHQoKTsKLSAgICAgICAgbGlzdC5hZGRBbGwoZ2V0UHJlZml4ZWROYW1lcyhtZXNzYWdlLmdldFFOYW1lKCkpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLQotICBwdWJsaWMgTGlzdCBnZXREZWZpbml0aW9ucygpCi0gIHsKLSAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgYWRkRGVmaW5pdGlvbihyb290RGVmaW5pdGlvbiwgbGlzdCk7Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLQotICAvKioKLSAgICogQGRlcHJlY2F0ZWQgLS0gd2Ugc2hvdWxkIGFsd2F5cyB1c2UgZ2V0UHJlZml4ZWROYW1lcwotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRQcmVmaXhlZE5hbWUoUU5hbWUgcW5hbWUpCi0gIHsKLSAgICBTdHJpbmcgbmFtZSA9IG51bGw7Ci0gICAgaWYgKHFuYW1lICE9IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nIHByZWZpeCA9IHJvb3REZWZpbml0aW9uLmdldFByZWZpeChxbmFtZS5nZXROYW1lc3BhY2VVUkkoKSk7Ci0gICAgICBpZiAocHJlZml4ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIG5hbWUgPSBwcmVmaXggKyAiOiIgKyBxbmFtZS5nZXRMb2NhbFBhcnQoKTsgLy8kTk9OLU5MUy0xJAotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbmFtZTsKLSAgfQotCi0gIHB1YmxpYyBMaXN0IGdldFByZWZpeGVkTmFtZXMoUU5hbWUgcW5hbWUpCi0gIHsKLSAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgaWYgKHFuYW1lICE9IG51bGwpCi0gICAgewotICAgICAgTWFwIG1hcCA9IHJvb3REZWZpbml0aW9uLmdldE5hbWVzcGFjZXMoKTsKLSAgICAgIGZvciAoSXRlcmF0b3IgaSA9IG1hcC5rZXlTZXQoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBwcmVmaXggPSAoU3RyaW5nKSBpLm5leHQoKTsKLSAgICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IChTdHJpbmcpIG1hcC5nZXQocHJlZml4KTsKLSAgICAgICAgaWYgKG5hbWVzcGFjZSAhPSBudWxsICYmIG5hbWVzcGFjZS5lcXVhbHMocW5hbWUuZ2V0TmFtZXNwYWNlVVJJKCkpKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIG5hbWUgPSBwcmVmaXgubGVuZ3RoKCkgPiAwID8gcHJlZml4ICsgIjoiICsgcW5hbWUuZ2V0TG9jYWxQYXJ0KCkgOiAgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgICAgICAgICAgICAgcW5hbWUuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgICAgICAgbGlzdC5hZGQobmFtZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBhZGREZWZpbml0aW9uKERlZmluaXRpb24gZGVmaW5pdGlvbiwgTGlzdCBsaXN0KQotICB7Ci0gICAgaWYgKGRlZmluaXRpb24gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBsaXN0LmFkZChkZWZpbml0aW9uKTsKLSAgICAgIGZvciAoSXRlcmF0b3IgaSA9IGRlZmluaXRpb24uZ2V0RUltcG9ydHMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIEltcG9ydEltcGwgdGhlSW1wb3J0ID0gKEltcG9ydEltcGwpIGkubmV4dCgpOwotICAgICAgICBpZiAodGhlSW1wb3J0LmdldExvY2F0aW9uVVJJKCkgIT0gbnVsbCAmJiAhdGhlSW1wb3J0LmdldExvY2F0aW9uVVJJKCkuZW5kc1dpdGgoInhzZCIpKSAvLyROT04tTkxTLTEkCi0gICAgICAgIHsKLSAgICAgICAgICB0aGVJbXBvcnQuaW1wb3J0RGVmaW5pdGlvbk9yU2NoZW1hKCk7CSAKLSAgICAgICAgICBEZWZpbml0aW9uIGltcG9ydGVkRGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKSB0aGVJbXBvcnQuZ2V0RURlZmluaXRpb24oKTsKLSAgICAgICAgICBpZiAoaW1wb3J0ZWREZWZpbml0aW9uICE9IG51bGwgJiYgIWxpc3QuY29udGFpbnMoaW1wb3J0ZWREZWZpbml0aW9uKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBhZGREZWZpbml0aW9uKGltcG9ydGVkRGVmaW5pdGlvbiwgbGlzdCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UG9ydFR5cGVSZWZlcmVuY2UoQmluZGluZyBiaW5kaW5nKQotICB7Ci0gICAgU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0gICAgRWxlbWVudCBlbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KGJpbmRpbmcpOwotICAgIGlmIChlbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgcmVzdWx0ID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoInR5cGUiKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIHNldFBvcnRUeXBlUmVmZXJlbmNlKEJpbmRpbmcgYmluZGluZywgU3RyaW5nIHBvcnRUeXBlKQotICB7Ci0gICAgRWxlbWVudCBlbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KGJpbmRpbmcpOwotICAgIGlmIChlbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoInR5cGUiLCBwb3J0VHlwZSk7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRCaW5kaW5nUmVmZXJlbmNlKFBvcnQgcG9ydCkKLSAgewotICAgIFN0cmluZyByZXN1bHQgPSBudWxsOwotICAgIEVsZW1lbnQgZWxlbWVudCA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0RWxlbWVudEZvck9iamVjdChwb3J0KTsKLSAgICBpZiAoZWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCJiaW5kaW5nIik7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldE5hbWUoQmluZGluZyBiaW5kaW5nKQotICB7Ci0gICAgU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0gICAgRWxlbWVudCBlbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KGJpbmRpbmcpOwotICAgIGlmIChlbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgcmVzdWx0ID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoIm5hbWUiKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBRTmFtZSBnZXRQb3J0VHlwZVJlZmVyZW5jZVFOYW1lKEJpbmRpbmcgYmluZGluZykKLSAgewotICAgIFFOYW1lIHJlc3VsdCA9IG51bGw7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gYmluZGluZy5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0gICAgU3RyaW5nIHByZWZpeGVkTmFtZSA9IGdldFBvcnRUeXBlUmVmZXJlbmNlKGJpbmRpbmcpOwotICAgIGlmIChwcmVmaXhlZE5hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBXU0RMRWRpdG9yVXRpbC5jcmVhdGVRTmFtZShkZWZpbml0aW9uLCBwcmVmaXhlZE5hbWUpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBRTmFtZSBnZXRCaW5kaW5nUmVmZXJlbmNlUU5hbWUoUG9ydCBwb3J0KQotICB7Ci0gICAgUU5hbWUgcmVzdWx0ID0gbnVsbDsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBwb3J0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLSAgICBTdHJpbmcgcHJlZml4ZWROYW1lID0gZ2V0QmluZGluZ1JlZmVyZW5jZShwb3J0KTsKLSAgICBpZiAocHJlZml4ZWROYW1lICE9IG51bGwpCi0gICAgewotICAgICAgcmVzdWx0ID0gV1NETEVkaXRvclV0aWwuY3JlYXRlUU5hbWUoZGVmaW5pdGlvbiwgcHJlZml4ZWROYW1lKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldE1lc3NhZ2VSZWZlcmVuY2UoSW5wdXQgaW5wdXQpCi0gIHsKLSAgICByZXR1cm4gZ2V0TWVzc2FnZVJlZmVyZW5jZUhlbHBlcihpbnB1dCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRNZXNzYWdlUmVmZXJlbmNlKE91dHB1dCBvdXRwdXQpCi0gIHsKLSAgICByZXR1cm4gZ2V0TWVzc2FnZVJlZmVyZW5jZUhlbHBlcihvdXRwdXQpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0TWVzc2FnZVJlZmVyZW5jZShGYXVsdCBmYXVsdCkKLSAgewotICAgIHJldHVybiBnZXRNZXNzYWdlUmVmZXJlbmNlSGVscGVyKGZhdWx0KTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgUU5hbWUgZ2V0TWVzc2FnZVJlZmVyZW5jZVFOYW1lKElucHV0IGlucHV0KQotICB7Ci0gICAgcmV0dXJuIGdldE1lc3NhZ2VSZWZlcmVuY2VRTmFtZUhlbHBlcihpbnB1dCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFFOYW1lIGdldE1lc3NhZ2VSZWZlcmVuY2VRTmFtZShPdXRwdXQgb3V0cHV0KQotICB7Ci0gICAgcmV0dXJuIGdldE1lc3NhZ2VSZWZlcmVuY2VRTmFtZUhlbHBlcihvdXRwdXQpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBRTmFtZSBnZXRNZXNzYWdlUmVmZXJlbmNlUU5hbWUoRmF1bHQgZmF1bHQpCi0gIHsKLSAgICByZXR1cm4gZ2V0TWVzc2FnZVJlZmVyZW5jZVFOYW1lSGVscGVyKGZhdWx0KTsKLSAgfQotCi0gIHByb3RlY3RlZCBzdGF0aWMgU3RyaW5nIGdldE1lc3NhZ2VSZWZlcmVuY2VIZWxwZXIoV1NETEVsZW1lbnQgbykKLSAgewotICAgIFN0cmluZyByZXN1bHQgPSBudWxsOwotICAgIEVsZW1lbnQgZWxlbWVudCA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0RWxlbWVudEZvck9iamVjdChvKTsKLSAgICBpZiAoZWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCJtZXNzYWdlIik7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgUU5hbWUgZ2V0TWVzc2FnZVJlZmVyZW5jZVFOYW1lSGVscGVyKFdTRExFbGVtZW50IG8pCi0gIHsKLSAgICBRTmFtZSByZXN1bHQgPSBudWxsOwotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG8uZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotICAgIFN0cmluZyBwcmVmaXhlZE5hbWUgPSBnZXRNZXNzYWdlUmVmZXJlbmNlSGVscGVyKG8pOwotICAgIGlmIChwcmVmaXhlZE5hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBXU0RMRWRpdG9yVXRpbC5jcmVhdGVRTmFtZShkZWZpbml0aW9uLCBwcmVmaXhlZE5hbWUpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIHVwZGF0ZVBvcnRUeXBlUmVmZXJlbmNlcyhEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBkZWZpbml0aW9uLmdldEJpbmRpbmdzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBpLm5leHQoKTsKLSAgICAgIFFOYW1lIHFuYW1lID0gQ29tcG9uZW50UmVmZXJlbmNlVXRpbC5nZXRQb3J0VHlwZVJlZmVyZW5jZVFOYW1lKGJpbmRpbmcpOwotCi0gICAgICBQb3J0VHlwZSBwb3J0VHlwZSA9IChxbmFtZSAhPSBudWxsKSA/IChQb3J0VHlwZSkgZGVmaW5pdGlvbi5nZXRQb3J0VHlwZShxbmFtZSkgOiBudWxsOwotCi0gICAgICBpZiAoYmluZGluZy5nZXRQb3J0VHlwZSgpICE9IHBvcnRUeXBlKQotICAgICAgewotICAgICAgICBiaW5kaW5nLnNldFBvcnRUeXBlKHBvcnRUeXBlKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHZvaWQgdXBkYXRlQmluZGluZ1JlZmVyZW5jZXMoRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICB7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gZGVmaW5pdGlvbi5nZXRTZXJ2aWNlcygpLnZhbHVlcygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBTZXJ2aWNlIHNlcnZpY2UgPSAoU2VydmljZSkgaS5uZXh0KCk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGogPSBzZXJ2aWNlLmdldEVQb3J0cygpLml0ZXJhdG9yKCk7IGouaGFzTmV4dCgpOykKLSAgICAgIHsKLSAgICAgICAgUG9ydCBwb3J0ID0gKFBvcnQpIGoubmV4dCgpOwotICAgICAgICBRTmFtZSBxbmFtZSA9IENvbXBvbmVudFJlZmVyZW5jZVV0aWwuZ2V0QmluZGluZ1JlZmVyZW5jZVFOYW1lKHBvcnQpOwotCi0gICAgICAgIEJpbmRpbmcgYmluZGluZyA9IChxbmFtZSAhPSBudWxsKSA/IChCaW5kaW5nKSBkZWZpbml0aW9uLmdldEJpbmRpbmcocW5hbWUpIDogbnVsbDsKLQotICAgICAgICBpZiAocG9ydC5nZXRCaW5kaW5nKCkgIT0gYmluZGluZykKLSAgICAgICAgewotICAgICAgICAgIHBvcnQuc2V0QmluZGluZyhiaW5kaW5nKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCB1cGRhdGVNZXNzYWdlUmVmZXJlbmNlcyhEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICAvLyBmb3IgZWFjaCBwb3J0IHR5cGUKLSAgICAvLwotICAgIGZvciAoSXRlcmF0b3IgaSA9IGRlZmluaXRpb24uZ2V0UG9ydFR5cGVzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIFBvcnRUeXBlIHBvcnRUeXBlID0gKFBvcnRUeXBlKSBpLm5leHQoKTsKLQotICAgICAgLy8gZm9yIGVhY2ggb3BlcmF0aW9uCi0gICAgICAvLwotICAgICAgZm9yIChJdGVyYXRvciBqID0gcG9ydFR5cGUuZ2V0RU9wZXJhdGlvbnMoKS5pdGVyYXRvcigpOyBqLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSAoT3BlcmF0aW9uKSBqLm5leHQoKTsKLQotICAgICAgICAvLyBoYW5kbGUgSW5wdXQKLSAgICAgICAgLy8KLSAgICAgICAgSW5wdXQgaW5wdXQgPSAoSW5wdXQpIG9wZXJhdGlvbi5nZXRJbnB1dCgpOwotICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIFFOYW1lIHFuYW1lID0gQ29tcG9uZW50UmVmZXJlbmNlVXRpbC5nZXRNZXNzYWdlUmVmZXJlbmNlUU5hbWUoaW5wdXQpOwotICAgICAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IChxbmFtZSAhPSBudWxsKSA/IChNZXNzYWdlKSBkZWZpbml0aW9uLmdldE1lc3NhZ2UocW5hbWUpIDogbnVsbDsKLSAgICAgICAgICBpZiAoaW5wdXQuZ2V0TWVzc2FnZSgpICE9IG1lc3NhZ2UpCi0gICAgICAgICAgewotICAgICAgICAgICAgaW5wdXQuc2V0TWVzc2FnZShtZXNzYWdlKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBoYW5kbGUgT3V0cHV0Ci0gICAgICAgIC8vCi0gICAgICAgIE91dHB1dCBvdXRwdXQgPSAoT3V0cHV0KSBvcGVyYXRpb24uZ2V0T3V0cHV0KCk7Ci0gICAgICAgIGlmIChvdXRwdXQgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIFFOYW1lIHFuYW1lID0gQ29tcG9uZW50UmVmZXJlbmNlVXRpbC5nZXRNZXNzYWdlUmVmZXJlbmNlUU5hbWUob3V0cHV0KTsKLSAgICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSAocW5hbWUgIT0gbnVsbCkgPyAoTWVzc2FnZSkgZGVmaW5pdGlvbi5nZXRNZXNzYWdlKHFuYW1lKSA6IG51bGw7Ci0gICAgICAgICAgaWYgKG91dHB1dC5nZXRNZXNzYWdlKCkgIT0gbWVzc2FnZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBvdXRwdXQuc2V0TWVzc2FnZShtZXNzYWdlKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBoYW5kbGUgRmF1bHRzCi0gICAgICAgIC8vCi0gICAgICAgIGZvciAoSXRlcmF0b3IgayA9IG9wZXJhdGlvbi5nZXRFRmF1bHRzKCkuaXRlcmF0b3IoKTsgay5oYXNOZXh0KCk7KQotICAgICAgICB7Ci0gICAgICAgICAgRmF1bHQgZmF1bHQgPSAoRmF1bHQpIGsubmV4dCgpOwotCi0gICAgICAgICAgUU5hbWUgcW5hbWUgPSBDb21wb25lbnRSZWZlcmVuY2VVdGlsLmdldE1lc3NhZ2VSZWZlcmVuY2VRTmFtZShmYXVsdCk7Ci0gICAgICAgICAgTWVzc2FnZSBtZXNzYWdlID0gKHFuYW1lICE9IG51bGwpID8gKE1lc3NhZ2UpIGRlZmluaXRpb24uZ2V0TWVzc2FnZShxbmFtZSkgOiBudWxsOwotICAgICAgICAgIGlmIChmYXVsdC5nZXRNZXNzYWdlKCkgIT0gbWVzc2FnZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBmYXVsdC5zZXRNZXNzYWdlKG1lc3NhZ2UpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCB1cGRhdGVTY2hlbWFSZWZlcmVuY2VzKERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgIGZvciAoSXRlcmF0b3IgaSA9IGRlZmluaXRpb24uZ2V0RU1lc3NhZ2VzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IChNZXNzYWdlKSBpLm5leHQoKTsKLSAgICAgIGZvciAoSXRlcmF0b3IgaiA9IG1lc3NhZ2UuZ2V0RVBhcnRzKCkuaXRlcmF0b3IoKTsgai5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBQYXJ0IHBhcnQgPSAoUGFydCkgai5uZXh0KCk7Ci0gICAgICAgIEVsZW1lbnQgZWxlbWVudCA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0RWxlbWVudEZvck9iamVjdChwYXJ0KTsKLSAgICAgICAgaWYgKGVsZW1lbnQgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICgoV1NETEVsZW1lbnRJbXBsKXBhcnQpLmVsZW1lbnRDaGFuZ2VkKGVsZW1lbnQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBPcGVyYXRpb24gZ2V0T3BlcmF0aW9uKFBvcnRUeXBlIHBvcnRUeXBlLCBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24pCi0gIHsKLSAgICBPcGVyYXRpb24gcmVzdWx0ID0gbnVsbDsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBwb3J0VHlwZS5nZXRFT3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gKE9wZXJhdGlvbikgaS5uZXh0KCk7Ci0gICAgICBpZiAoaXNNYXRjaGluZ0JpbmRpbmcob3BlcmF0aW9uLCBiaW5kaW5nT3BlcmF0aW9uKSkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gb3BlcmF0aW9uOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCB1cGRhdGVPcGVyYXRpb25SZWZlcmVuY2UoQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uKQotICB7Ci0gICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IGNvbXB1dGVPcGVyYXRpb24oYmluZGluZ09wZXJhdGlvbik7Ci0gICAgaWYgKG9wZXJhdGlvbiAhPSBiaW5kaW5nT3BlcmF0aW9uLmdldE9wZXJhdGlvbigpKQotICAgIHsKLSAgICAgIGJpbmRpbmdPcGVyYXRpb24uc2V0T3BlcmF0aW9uKG9wZXJhdGlvbik7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIExpc3QgZ2V0Q29tcG9uZW50TmFtZUxpc3QoYm9vbGVhbiBpc1R5cGUpCi0gIHsKLSAgICBMaXN0IHJlc3VsdCA9IENvbGxlY3Rpb25zLkVNUFRZX0xJU1Q7Ci0gICAgSVR5cGVTeXN0ZW1Qcm92aWRlciB0eXBlU3lzdGVtUHJvdmlkZXIgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldFR5cGVTeXN0ZW1Qcm92aWRlcihyb290RGVmaW5pdGlvbik7Ci0gICAgaWYgKHR5cGVTeXN0ZW1Qcm92aWRlciAhPSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IGlzVHlwZSA/IHR5cGVTeXN0ZW1Qcm92aWRlci5nZXRBdmFpbGFibGVUeXBlTmFtZXMocm9vdERlZmluaXRpb24sIDApIDogdHlwZVN5c3RlbVByb3ZpZGVyLmdldEF2YWlsYWJsZUVsZW1lbnROYW1lcyhyb290RGVmaW5pdGlvbik7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIExpc3QgZ2V0Q29tcG9uZW50TmFtZUxpc3QoUGFydCBwYXJ0LCBib29sZWFuIGlzVHlwZSkKLSAgewotICAgIExpc3QgcmVzdWx0ID0gQ29sbGVjdGlvbnMuRU1QVFlfTElTVDsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBwYXJ0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLSAgICBJVHlwZVN5c3RlbVByb3ZpZGVyIHR5cGVTeXN0ZW1Qcm92aWRlciA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0VHlwZVN5c3RlbVByb3ZpZGVyKGRlZmluaXRpb24pOwotICAgIGlmICh0eXBlU3lzdGVtUHJvdmlkZXIgIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBpc1R5cGUgPyB0eXBlU3lzdGVtUHJvdmlkZXIuZ2V0QXZhaWxhYmxlVHlwZU5hbWVzKGRlZmluaXRpb24sIDApIDogdHlwZVN5c3RlbVByb3ZpZGVyLmdldEF2YWlsYWJsZUVsZW1lbnROYW1lcyhkZWZpbml0aW9uKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1R5cGUoUGFydCBwYXJ0KQotICB7Ci0gICAgLy9FbGVtZW50IGVsZW1lbnQgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldEVsZW1lbnRGb3JPYmplY3QocGFydCk7Ci0gICAgRWxlbWVudCBlbGVtZW50ID0gcGFydC5nZXRFbGVtZW50KCk7Ci0gICAgcmV0dXJuICFlbGVtZW50Lmhhc0F0dHJpYnV0ZSgiZWxlbWVudCIpOyAvLyROT04tTkxTLTEkCi0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQYXJ0Q29tcG9uZW50UmVmZXJlbmNlKFBhcnQgcGFydCkKLSAgewotICAgIC8vRWxlbWVudCBlbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KHBhcnQpOwotICAgIEVsZW1lbnQgZWxlbWVudCA9IHBhcnQuZ2V0RWxlbWVudCgpOwotICAgIFN0cmluZyByZXN1bHQgPSBudWxsOwotICAgIGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZSgidHlwZSIpKSAvLyROT04tTkxTLTEkCi0gICAgewotICAgICAgcmVzdWx0ID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoInR5cGUiKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZSgiZWxlbWVudCIpKSAvLyROT04tTkxTLTEkCi0gICAgewotICAgICAgcmVzdWx0ID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoImVsZW1lbnQiKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIHNldENvbXBvbmVudFJlZmVyZW5jZShQYXJ0IHBhcnQsIGJvb2xlYW4gaXNUeXBlLCBTdHJpbmcgY29tcG9uZW50TmFtZSkKLSAgewotICAgIEVsZW1lbnQgZWxlbWVudCA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0RWxlbWVudEZvck9iamVjdChwYXJ0KTsKLSAgICBTdHJpbmcgbmV3QXR0cmlidXRlID0gaXNUeXBlID8gInR5cGUiIDogImVsZW1lbnQiOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICBTdHJpbmcgb2xkQXR0cmlidXRlID0gaXNUeXBlID8gImVsZW1lbnQiIDogInR5cGUiOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShvbGRBdHRyaWJ1dGUpOwotCi0gICAgU3RyaW5nIHZhbHVlID0gY29tcG9uZW50TmFtZSAhPSBudWxsID8gY29tcG9uZW50TmFtZSA6IGVsZW1lbnQuZ2V0QXR0cmlidXRlKG5ld0F0dHJpYnV0ZSk7Ci0KLSAgICBpZiAodmFsdWUgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoaXNUeXBlKQotICAgICAgewotICAgICAgICBTdHJpbmcgeHNkUHJlZml4ID0gcGFydC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkuZ2V0UHJlZml4KFdTRExDb25zdGFudHMuWFNEX05BTUVTUEFDRV9VUkkpOwotICAgICAgICB2YWx1ZSA9ICJzdHJpbmciOyAvLyROT04tTkxTLTEkCi0gICAgICAgIGlmICh4c2RQcmVmaXggIT0gbnVsbCAmJiB4c2RQcmVmaXgubGVuZ3RoKCkgPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgdmFsdWUgPSB4c2RQcmVmaXggKyAiOiIgKyB2YWx1ZTsgLy8kTk9OLU5MUy0xJAotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIExpc3QgbGlzdCA9IGdldENvbXBvbmVudE5hbWVMaXN0KHBhcnQsIGlzVHlwZSk7Ci0gICAgICAgIHZhbHVlID0gbGlzdC5zaXplKCkgPiAwID8gKFN0cmluZykgbGlzdC5nZXQoMCkgOiAic29tZS1lbGVtZW50LW5hbWUiOyAvLyROT04tTkxTLTEkCi0gICAgICB9Ci0gICAgfQotICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKG5ld0F0dHJpYnV0ZSwgdmFsdWUpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBPcGVyYXRpb24gY29tcHV0ZU9wZXJhdGlvbihCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24pCi0gIHsKLSAgICBPcGVyYXRpb24gcmVzdWx0ID0gbnVsbDsKLSAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZykgYmluZGluZ09wZXJhdGlvbi5lQ29udGFpbmVyKCk7Ci0gICAgUG9ydFR5cGUgcG9ydFR5cGUgPSAoUG9ydFR5cGUpIGJpbmRpbmcuZ2V0UG9ydFR5cGUoKTsKLSAgICBpZiAocG9ydFR5cGUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBnZXRPcGVyYXRpb24ocG9ydFR5cGUsIGJpbmRpbmdPcGVyYXRpb24pOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBJbnB1dCBjb21wdXRlSW5wdXQoQmluZGluZ0lucHV0IGJpbmRpbmdJbnB1dCkKLSAgewotICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSBjb21wdXRlT3BlcmF0aW9uKChCaW5kaW5nT3BlcmF0aW9uKSBiaW5kaW5nSW5wdXQuZUNvbnRhaW5lcigpKTsKLSAgICByZXR1cm4gb3BlcmF0aW9uICE9IG51bGwgPyBvcGVyYXRpb24uZ2V0RUlucHV0KCkgOiBudWxsOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBPdXRwdXQgY29tcHV0ZU91dHB1dChCaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXRwdXQpCi0gIHsKLSAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gY29tcHV0ZU9wZXJhdGlvbigoQmluZGluZ09wZXJhdGlvbikgYmluZGluZ091dHB1dC5lQ29udGFpbmVyKCkpOwotICAgIHJldHVybiBvcGVyYXRpb24gIT0gbnVsbCA/IG9wZXJhdGlvbi5nZXRFT3V0cHV0KCkgOiBudWxsOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBGYXVsdCBjb21wdXRlRmF1bHQoQmluZGluZ0ZhdWx0IGJpbmRpbmdGYXVsdCkKLSAgewotICAgIEZhdWx0IHJlc3VsdCA9IG51bGw7Ci0gICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IGNvbXB1dGVPcGVyYXRpb24oKEJpbmRpbmdPcGVyYXRpb24pIGJpbmRpbmdGYXVsdC5lQ29udGFpbmVyKCkpOwotICAgIGlmIChvcGVyYXRpb24gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBvcGVyYXRpb24uZ2V0RUZhdWx0cygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICAgIHsKLSAgICAgICAgRmF1bHQgZmF1bHQgPSAoRmF1bHQpIGkubmV4dCgpOwotICAgICAgICBTdHJpbmcgZmF1bHROYW1lID0gZmF1bHQuZ2V0TmFtZSgpOwotICAgICAgICBpZiAoZmF1bHROYW1lICE9IG51bGwgJiYgZmF1bHROYW1lLmVxdWFscyhiaW5kaW5nRmF1bHQuZ2V0TmFtZSgpKSkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IGZhdWx0OwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQYXJ0UmVmZXJlbmNlVmFsdWUoUGFydCBwYXJ0KQotICB7Ci0gICAgRWxlbWVudCBlbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KHBhcnQpOwotICAgIFN0cmluZyB2YWx1ZSA9IG51bGw7Ci0gICAgaWYgKGVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUoInR5cGUiKSkgLy8kTk9OLU5MUy0xJAotICAgICAgeyAgICAgIAkJCi0gICAgICAgIHZhbHVlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoInR5cGUiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgfQotICAgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUoImVsZW1lbnQiKSkgLy8kTk9OLU5MUy0xJAotICAgICAgeyAgCi0gICAgICAgIHZhbHVlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoImVsZW1lbnQiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgfSAgICAgICAgIAotICAgIH0gIAotICAgIHJldHVybiB2YWx1ZSAhPSBudWxsID8gdmFsdWUgOiAiIjsgLy8kTk9OLU5MUy0xJAotICB9Ci0KLSAgcHVibGljIE9wZXJhdGlvbiBnZXRCaW5kaW5nT3BlcmF0aW9uKEVsZW1lbnQgYmluZGluZ09wZXJhdGlvbkNvbnRlbnQpCi0gIHsKLSAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gbnVsbDsKLSAgICBOb2RlIHBhcmVudCA9IGJpbmRpbmdPcGVyYXRpb25Db250ZW50LmdldFBhcmVudE5vZGUoKTsKLSAgICBpZiAocGFyZW50IGluc3RhbmNlb2YgRWxlbWVudCkKLSAgICB7Ci0gICAgICBPYmplY3Qgb2JqZWN0ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5maW5kTW9kZWxPYmplY3RGb3JFbGVtZW50KHJvb3REZWZpbml0aW9uLCAoRWxlbWVudCkgcGFyZW50KTsKLSAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBCaW5kaW5nT3BlcmF0aW9uKQotICAgICAgewotICAgICAgICBvcGVyYXRpb24gPSBDb21wb25lbnRSZWZlcmVuY2VVdGlsLmNvbXB1dGVPcGVyYXRpb24oKEJpbmRpbmdPcGVyYXRpb24pIG9iamVjdCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBvcGVyYXRpb247Ci0gIH0KLQotICBwdWJsaWMgTWVzc2FnZSBnZXRCaW5kaW5nT3BlcmF0aW9uSW5wdXRNZXNzYWdlKEVsZW1lbnQgYmluZGluZ09wZXJhdGlvbkNvbnRlbnQpCi0gIHsKLSAgICBNZXNzYWdlIG1lc3NhZ2UgPSBudWxsOwotICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSBnZXRCaW5kaW5nT3BlcmF0aW9uKGJpbmRpbmdPcGVyYXRpb25Db250ZW50KTsKLSAgICBpZiAob3BlcmF0aW9uICE9IG51bGwpCi0gICAgewotICAgICAgSW5wdXQgaW5wdXQgPSBvcGVyYXRpb24uZ2V0RUlucHV0KCk7Ci0gICAgICBpZiAoaW5wdXQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgbWVzc2FnZSA9IGlucHV0LmdldEVNZXNzYWdlKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBtZXNzYWdlOwotICB9Ci0KLSAgcHVibGljIE1lc3NhZ2UgZ2V0QmluZGluZ09wZXJhdGlvbk91dHB1dE1lc3NhZ2UoRWxlbWVudCBiaW5kaW5nT3BlcmF0aW9uQ29udGVudCkKLSAgewotICAgIE1lc3NhZ2UgbWVzc2FnZSA9IG51bGw7Ci0gICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IGdldEJpbmRpbmdPcGVyYXRpb24oYmluZGluZ09wZXJhdGlvbkNvbnRlbnQpOwotICAgIGlmIChvcGVyYXRpb24gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBPdXRwdXQgb3V0cHV0ID0gb3BlcmF0aW9uLmdldEVPdXRwdXQoKTsKLSAgICAgIGlmIChvdXRwdXQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgbWVzc2FnZSA9IG91dHB1dC5nZXRFTWVzc2FnZSgpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbWVzc2FnZTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGNvbXB1dGVSZWxhdGl2ZVVSSShJRmlsZSByZWZlcmVuY2VkTG9jYXRpb24sIElGaWxlIGJhc2VMb2NhdGlvbiwgYm9vbGVhbiBlbmFibGVJRVN0eWxlUmVmZXJlbmNlcykKLSAgewotICAgIC8vIFRPRE8uLi4gd2UgbmVlZCBzb21lIGV4dGVuc2lvbiB0byBhbGxvdyBJRSBmb2xrcyB0byBwbHVnaW4gbG9naWMgdG8gY3JlYXRlIGFuICdJRScgc3R5bGUgcGF0aAotICAgIC8vIFRPRE8uLi4gY29uc2lkZXIgdXNpbmcgVVJJIGNsYXNzIGluIEVNRiAKLSAgICByZXR1cm4gVVJJSGVscGVyLmdldFJlbGF0aXZlVVJJKHJlZmVyZW5jZWRMb2NhdGlvbi5nZXRMb2NhdGlvbigpLCBiYXNlTG9jYXRpb24uZ2V0TG9jYXRpb24oKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGNvbXB1dGVSZWxhdGl2ZVVSSShTdHJpbmcgcmVmZXJlbmNlZExvY2F0aW9uLCBTdHJpbmcgYmFzZUxvY2F0aW9uLCBib29sZWFuIGVuYWJsZUlFU3R5bGVSZWZlcmVuY2VzKQotICB7Ci0gICAgLy8gVE9ETy4uLiB3ZSBuZWVkIHNvbWUgZXh0ZW5zaW9uIHRvIGFsbG93IElFIGZvbGtzIHRvIHBsdWdpbiBsb2dpYyB0byBjcmVhdGUgYW4gJ0lFJyBzdHlsZSBwYXRoCi0gICAgLy8gVE9ETy4uLiBjb25zaWRlciB1c2luZyBVUkkgY2xhc3MgaW4gRU1GIAotICAgIHJldHVybiBVUklIZWxwZXIuZ2V0UmVsYXRpdmVVUkkocmVmZXJlbmNlZExvY2F0aW9uLCBiYXNlTG9jYXRpb24pOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvQ3JlYXRlV1NETEVsZW1lbnRIZWxwZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9DcmVhdGVXU0RMRWxlbWVudEhlbHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDNlYjFlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9DcmVhdGVXU0RMRWxlbWVudEhlbHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzY4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb25UeXBlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuTWVzc2FnZVJlZmVyZW5jZUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5XU0RMRWxlbWVudEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkQmluZGluZ0NvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkRmF1bHRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZElucHV0Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRJbnB1dFBhcmFtZXRlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkTWVzc2FnZUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkT3BlcmF0aW9uQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5jb21tYW5kcy5BZGRPdXRwdXRDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZE91dHB1dFBhcmFtZXRlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkUGFydENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkUG9ydENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkUG9ydFR5cGVDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZFNlcnZpY2VDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZFhTREVsZW1lbnREZWNsYXJhdGlvbkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZm9ybWF0LkZvcm1hdFByb2Nlc3NvclhNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIENyZWF0ZVdTRExFbGVtZW50SGVscGVyIHsKLQkvLyBDb25zdGFudHMgdXNlZCBmb3IgZ2V0dGluZyBQYXJ0IGluZm9ybWF0aW9uCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSVF9JTkZPX0VMRU1FTlRfREVDTEFSQVRJT04gPSAiRUxFTUVOVF9ERUNMQVJBVElPTiI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVJUX0lORk9fVFlQRV9ERUZJTklUSU9OICAgICA9ICJUWVBFX0RFRklOSVRJT04iOyAvLyROT04tTkxTLTEkCi0KLQkvLyBUaGUgZm9sbG93aW5nIHZhcmlhYmxlcyBzaG91bGQgYmUgc2V0IGlmIGEgbmFtZSBvdGhlciB0aGFuIHRoZSBjb21wdXRlZCBuYW1lIGlzIHRvIGJlIHVzZWQuCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgc2VydmljZU5hbWUgPSBudWxsOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIHBvcnROYW1lID0gbnVsbDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBiaW5kaW5nTmFtZSA9IG51bGw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgcG9ydFR5cGVOYW1lID0gbnVsbDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBvcGVyYXRpb25OYW1lID0gbnVsbDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBpbnB1dE5hbWUgPSBudWxsOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIG91dHB1dE5hbWUgPSBudWxsOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGZhdWx0TmFtZSA9IG51bGw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgbWVzc2FnZU5hbWUgPSBudWxsOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIHBhcnROYW1lID0gbnVsbDsKLQkKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQVJUX1RZUEVfT1JfREVGSU5JVElPTiA9IFBBUlRfSU5GT19UWVBFX0RFRklOSVRJT047Ci0JcHVibGljIHN0YXRpYyBib29sZWFuIENSRUFURV9ET1dOX1RPX1BBUlQgPSB0cnVlOwotCQkKLS8qCi0gKiBUaGUgZm9sbG93aW5nIG1ldGhvZHMgY3JlYXRlcyB0aGUgJ3NwZWNpZmllZCcgKGJ5IGNhbGxpbmcgYSBjZXJ0YWluIG1ldGhvZCkgV1NETEVsZW1lbnQKLSAqIGFuZCBpdCdzICdjaGlsZHJlbicgYWxsIHRoZSB3YXkgdG8gdGhlIFBvcnRUeXBlIGxldmVsLgotICovCi0JcHVibGljIHN0YXRpYyBTZXJ2aWNlIGNyZWF0ZVNlcnZpY2UoRGVmaW5pdGlvbiBkZWZpbml0aW9uKSB7Ci0JCWlmIChzZXJ2aWNlTmFtZSA9PSBudWxsIHx8IHNlcnZpY2VOYW1lLnRyaW0oKS5lcXVhbHMoIiIpKSAvLyROT04tTkxTLTEkCi0JCQlzZXJ2aWNlTmFtZSA9IE5hbWVVdGlsLmJ1aWxkVW5pcXVlU2VydmljZU5hbWUoZGVmaW5pdGlvbik7CQkKLQkJCi0JCUNyZWF0ZVdTRExFbGVtZW50SGVscGVyLnBvcnRUeXBlTmFtZSA9IHNlcnZpY2VOYW1lOwotCQkKLQkgICAgQWRkU2VydmljZUNvbW1hbmQgYWRkU2VydmljZSA9IG5ldyBBZGRTZXJ2aWNlQ29tbWFuZChkZWZpbml0aW9uLCBzZXJ2aWNlTmFtZSwgZmFsc2UpOwotCSAgICBhZGRTZXJ2aWNlLnJ1bigpOwotCSAgICBTZXJ2aWNlIHNlcnZpY2UgPSAoU2VydmljZSkgYWRkU2VydmljZS5nZXRXU0RMRWxlbWVudCgpOwotCSAgICBDcmVhdGVXU0RMRWxlbWVudEhlbHBlci5jcmVhdGVQb3J0KHNlcnZpY2UpOwotICAJCQotCSAgICByZXR1cm4gc2VydmljZTsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBQb3J0IGNyZWF0ZVBvcnQoU2VydmljZSBzZXJ2aWNlKSB7Ci0JCWlmIChwb3J0TmFtZSA9PSBudWxsIHx8IHBvcnROYW1lLnRyaW0oKS5lcXVhbHMoIiIpKSAvLyROT04tTkxTLTEkCi0JCQlwb3J0TmFtZSA9IE5hbWVVdGlsLmJ1aWxkVW5pcXVlUG9ydE5hbWUoc2VydmljZSwgbnVsbCk7Ci0JCQotCSAgICBBZGRQb3J0Q29tbWFuZCBhZGRQb3J0ID0gbmV3IEFkZFBvcnRDb21tYW5kKHNlcnZpY2UsIHBvcnROYW1lKTsKLQkgICAgYWRkUG9ydC5ydW4oKTsKLQkgICAgUG9ydCBwb3J0ID0gKFBvcnQpIGFkZFBvcnQuZ2V0V1NETEVsZW1lbnQoKTsKLQkJQmluZGluZyBiaW5kaW5nID0gQ3JlYXRlV1NETEVsZW1lbnRIZWxwZXIuY3JlYXRlQmluZGluZyhwb3J0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSwgcG9ydCk7Ci0KLQkJcG9ydC5zZXRCaW5kaW5nKGJpbmRpbmcpOwotCQkKLQkgICAgcmV0dXJuIHBvcnQ7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgQmluZGluZyBjcmVhdGVCaW5kaW5nKERlZmluaXRpb24gZGVmaW5pdGlvbiwgUG9ydCBwb3J0KSB7Ci0JCWJpbmRpbmdOYW1lID0gcG9ydC5nZXROYW1lKCk7Ci0JCWlmIChiaW5kaW5nTmFtZSA9PSBudWxsIHx8IGJpbmRpbmdOYW1lLnRyaW0oKS5lcXVhbHMoIiIpKSAvLyROT04tTkxTLTEkCi0JCQliaW5kaW5nTmFtZSA9IE5hbWVVdGlsLmJ1aWxkVW5pcXVlQmluZGluZ05hbWUoZGVmaW5pdGlvbiwgbnVsbCk7Ci0JCQotCQlBZGRCaW5kaW5nQ29tbWFuZCBhZGRCaW5kaW5nID0gbmV3IEFkZEJpbmRpbmdDb21tYW5kKGRlZmluaXRpb24sIGJpbmRpbmdOYW1lKTsKLQkJYWRkQmluZGluZy5ydW4oKTsKLQkJQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpIGFkZEJpbmRpbmcuZ2V0V1NETEVsZW1lbnQoKTsKLQkJUG9ydFR5cGUgcG9ydFR5cGUgPSBDcmVhdGVXU0RMRWxlbWVudEhlbHBlci5jcmVhdGVQb3J0VHlwZShiaW5kaW5nLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0KLQkJYmluZGluZy5zZXRQb3J0VHlwZShwb3J0VHlwZSk7Ci0JCQotCQlyZXR1cm4gYmluZGluZzsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBQb3J0VHlwZSBjcmVhdGVQb3J0VHlwZShEZWZpbml0aW9uIGRlZmluaXRpb24pIHsKLQkJaWYgKHBvcnRUeXBlTmFtZSA9PSBudWxsIHx8IHBvcnRUeXBlTmFtZS50cmltKCkuZXF1YWxzKCIiKSkgLy8kTk9OLU5MUy0xJAotCQkJcG9ydFR5cGVOYW1lID0gTmFtZVV0aWwuYnVpbGRVbmlxdWVQb3J0VHlwZU5hbWUoZGVmaW5pdGlvbiwgIlBvcnRUeXBlIik7IC8vJE5PTi1OTFMtMSQKLQkJCi0JCUFkZFBvcnRUeXBlQ29tbWFuZCBhZGRQb3J0VHlwZUNvbW1hbmQgPSBuZXcgQWRkUG9ydFR5cGVDb21tYW5kKGRlZmluaXRpb24sIHBvcnRUeXBlTmFtZSk7Ci0JCWFkZFBvcnRUeXBlQ29tbWFuZC5ydW4oKTsKLQkJUG9ydFR5cGUgcG9ydFR5cGUgPSAoUG9ydFR5cGUpIGFkZFBvcnRUeXBlQ29tbWFuZC5nZXRXU0RMRWxlbWVudCgpOwotCi0JCWlmIChDUkVBVEVfRE9XTl9UT19QQVJUKSB7Ci0JCQlDcmVhdGVXU0RMRWxlbWVudEhlbHBlci5jcmVhdGVPcGVyYXRpb24ocG9ydFR5cGUpOwotCQl9Ci0JCQotCQlyZXR1cm4gcG9ydFR5cGU7Ci0JfQotCi0JCi0vKgotICogVGhlIGZvbGxvd2luZyBtZXRob2RzIGNyZWF0ZXMgdGhlICdzcGVjaWZpZWQnIChieSBjYWxsaW5nIGEgY2VydGFpbiBtZXRob2QpIFdTRExFbGVtZW50Ci0gKiBhbmQgaXQncyAnY2hpbGRyZW4nIGFsbCB0aGUgd2F5IHRvIHRoZSBQYXJ0IGxldmVsLgotICovCQotICAJcHVibGljIHN0YXRpYyBPcGVyYXRpb24gY3JlYXRlT3BlcmF0aW9uKFBvcnRUeXBlIHBvcnRUeXBlKSB7Ci0gIAkJaWYgKG9wZXJhdGlvbk5hbWUgPT0gbnVsbCB8fCBvcGVyYXRpb25OYW1lLnRyaW0oKS5lcXVhbHMoIiIpKSAvLyROT04tTkxTLTEkCi0gIAkJCW9wZXJhdGlvbk5hbWUgPSBOYW1lVXRpbC5idWlsZFVuaXF1ZU9wZXJhdGlvbk5hbWUocG9ydFR5cGUpOwotICAJCQotCQlBZGRPcGVyYXRpb25Db21tYW5kIGFjdGlvbiA9IG5ldyBBZGRPcGVyYXRpb25Db21tYW5kKHBvcnRUeXBlLCBvcGVyYXRpb25OYW1lKTsKLQkJYWN0aW9uLnJ1bigpOwotCQlPcGVyYXRpb24gb3BlcmF0aW9uID0gKE9wZXJhdGlvbikgYWN0aW9uLmdldFdTRExFbGVtZW50KCk7Ci0JCQotCQlpbnQgc3R5bGUgPSBBZGRCYXNlUGFyYW1ldGVyQ29tbWFuZC5QQVJUX0VMRU1FTlRfU0VRX0VMRU1FTlQ7Ci0gIAkJaWYgKFBBUlRfVFlQRV9PUl9ERUZJTklUSU9OID09IFBBUlRfSU5GT19UWVBFX0RFRklOSVRJT04pIHsKLSAgCQkJc3R5bGUgPSBBZGRCYXNlUGFyYW1ldGVyQ29tbWFuZC5QQVJUX1NJTVBMRVRZUEU7Ci0gIAkJfQotICAJCWVsc2UgaWYgKFBBUlRfVFlQRV9PUl9ERUZJTklUSU9OID09IFBBUlRfSU5GT19FTEVNRU5UX0RFQ0xBUkFUSU9OKSB7Ci0gIAkJCXN0eWxlID0gQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuUEFSVF9FTEVNRU5UX1NFUV9FTEVNRU5UOwotLy8gIAkJCXN0eWxlID0gQWRkQmFzZVBhcmFtZXRlckNvbW1hbmQuUEFSVF9FTEVNRU5UOwotICAJCX0KLSAgCQkKLQkJQWRkSW5wdXRQYXJhbWV0ZXJDb21tYW5kIGlucHV0Q29tbWFuZCA9IG5ldyBBZGRJbnB1dFBhcmFtZXRlckNvbW1hbmQob3BlcmF0aW9uLCBzdHlsZSk7Ci0JCWlucHV0Q29tbWFuZC5ydW4oKTsKLQkJQWRkT3V0cHV0UGFyYW1ldGVyQ29tbWFuZCBvdXRwdXRDb21tYW5kID0gbmV3IEFkZE91dHB1dFBhcmFtZXRlckNvbW1hbmQob3BlcmF0aW9uLCBzdHlsZSk7Ci0JCW91dHB1dENvbW1hbmQucnVuKCk7Ci0JCW9wZXJhdGlvbi5zZXRTdHlsZShPcGVyYXRpb25UeXBlLlJFUVVFU1RfUkVTUE9OU0UpOwotCi0JCXJldHVybiBvcGVyYXRpb247Ci0gIAl9Ci0KLSAgCXB1YmxpYyBzdGF0aWMgSW5wdXQgY3JlYXRlSW5wdXQoUG9ydFR5cGUgcG9ydFR5cGUsIE9wZXJhdGlvbiBvcGVyYXRpb24sIFN0cmluZyBpbnB1dE5hbWUpIHsKLSAgCQlpZiAoaW5wdXROYW1lID09IG51bGwgfHwgaW5wdXROYW1lLnRyaW0oKS5lcXVhbHMoIiIpKSAvLyROT04tTkxTLTEkCi0gIAkgIAkJaW5wdXROYW1lID0gTmFtZVV0aWwuYnVpbGRVbmlxdWVJbnB1dE5hbWUocG9ydFR5cGUsIG9wZXJhdGlvbi5nZXROYW1lKCksICIiKTsgLy8kTk9OLU5MUy0xJAotICAJCQotICAJCUFkZElucHV0Q29tbWFuZCBhY3Rpb24gPSBuZXcgQWRkSW5wdXRDb21tYW5kKG9wZXJhdGlvbiwgaW5wdXROYW1lKTsKLSAgCQlhY3Rpb24ucnVuKCk7Ci0gIAkJSW5wdXQgaW5wdXQgPSAoSW5wdXQpIGFjdGlvbi5nZXRXU0RMRWxlbWVudCgpOyAKLSAgCQlNZXNzYWdlIG1lc3MgPSBDcmVhdGVXU0RMRWxlbWVudEhlbHBlci5jcmVhdGVNZXNzYWdlKGlucHV0KTsKLSAgCQlpbnB1dC5zZXRNZXNzYWdlKG1lc3MpOwotICAJCQkgIAkJCi0gIAkJcmV0dXJuIGlucHV0OwotICAJfQotICAJCQkgIAkKLSAgCXB1YmxpYyBzdGF0aWMgT3V0cHV0IGNyZWF0ZU91dHB1dChQb3J0VHlwZSBwb3J0VHlwZSwgT3BlcmF0aW9uIG9wZXJhdGlvbikgewotICAJCWlmIChvdXRwdXROYW1lID09IG51bGwgfHwgb3V0cHV0TmFtZS50cmltKCkuZXF1YWxzKCIiKSkgLy8kTk9OLU5MUy0xJAotICAJICAJCW91dHB1dE5hbWUgPSBOYW1lVXRpbC5idWlsZFVuaXF1ZU91dHB1dE5hbWUocG9ydFR5cGUsIG9wZXJhdGlvbi5nZXROYW1lKCksICIiKTsgLy8kTk9OLU5MUy0xJAotICAJCQotICAJCUFkZE91dHB1dENvbW1hbmQgYWN0aW9uID0gbmV3IEFkZE91dHB1dENvbW1hbmQob3BlcmF0aW9uLCBvdXRwdXROYW1lKTsKLSAgCQlhY3Rpb24ucnVuKCk7Ci0gIAkJT3V0cHV0IG91dHB1dCA9IChPdXRwdXQpIGFjdGlvbi5nZXRXU0RMRWxlbWVudCgpOwotICAJCU1lc3NhZ2UgbWVzcyA9IENyZWF0ZVdTRExFbGVtZW50SGVscGVyLmNyZWF0ZU1lc3NhZ2Uob3V0cHV0KTsKLSAgCQlvdXRwdXQuc2V0TWVzc2FnZShtZXNzKTsJCi0gIAkJCSAgCQkKLSAgCQlyZXR1cm4gb3V0cHV0OwotICAJfQotICAJCQkgIAkKLSAgCXB1YmxpYyBzdGF0aWMgRmF1bHQgY3JlYXRlRmF1bHQoT3BlcmF0aW9uIG9wZXJhdGlvbikgewotICAJCWlmIChmYXVsdE5hbWUgPT0gbnVsbCB8fCBmYXVsdE5hbWUudHJpbSgpLmVxdWFscygiIikpICAvLyROT04tTkxTLTEkCi0JICAJCWZhdWx0TmFtZSA9IE5hbWVVdGlsLmJ1aWxkVW5pcXVlRmF1bHROYW1lKG9wZXJhdGlvbik7Ci0gIAkJCi0gIAkJQWRkRmF1bHRDb21tYW5kIGFjdGlvbiA9IG5ldyBBZGRGYXVsdENvbW1hbmQob3BlcmF0aW9uLCBmYXVsdE5hbWUpOwotICAJCWFjdGlvbi5ydW4oKTsKLSAgCQlGYXVsdCBmYXVsdCA9IChGYXVsdCkgYWN0aW9uLmdldFdTRExFbGVtZW50KCk7Ci0gIAkJTWVzc2FnZSBtZXNzID0gQ3JlYXRlV1NETEVsZW1lbnRIZWxwZXIuY3JlYXRlTWVzc2FnZShmYXVsdCk7Ci0gIAkJZmF1bHQuc2V0TWVzc2FnZShtZXNzKTsKLSAgCQkgCQkKLSAgCQlyZXR1cm4gZmF1bHQ7Ci0gIAl9Ci0gIAkJCSAgCQotICAJcHVibGljIHN0YXRpYyBNZXNzYWdlIGNyZWF0ZU1lc3NhZ2UoTWVzc2FnZVJlZmVyZW5jZSBpb2YpIHsKLSAgCQlpZiAobWVzc2FnZU5hbWUgPT0gbnVsbCB8fCBtZXNzYWdlTmFtZS50cmltKCkuZXF1YWxzKCIiKSkgLy8kTk9OLU5MUy0xJAotICAJICAJCW1lc3NhZ2VOYW1lID0gTmFtZVV0aWwuYnVpbGRVbmlxdWVNZXNzYWdlTmFtZShpb2YuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpLCBpb2YpOwotLy8JICAJCW1lc3NhZ2VOYW1lID0gTmFtZVV0aWwuYnVpbGRNZXNzYWdlTmFtZShpb2YuZ2V0TmFtZSgpKTsKLSAgCQkKLSAgCQlEZWZpbml0aW9uIGRlZiA9IGlvZi5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0gIAkJQWRkTWVzc2FnZUNvbW1hbmQgYWN0aW9uID0gbmV3IEFkZE1lc3NhZ2VDb21tYW5kKGRlZiwgbWVzc2FnZU5hbWUpOwotICAJCWFjdGlvbi5ydW4oKTsKLSAgCQlNZXNzYWdlIG1lc3NhZ2UgPSAoTWVzc2FnZSkgYWN0aW9uLmdldFdTRExFbGVtZW50KCk7Ci0gIAkJQ3JlYXRlV1NETEVsZW1lbnRIZWxwZXIuY3JlYXRlUGFydChtZXNzYWdlKTsKLSAgCQlFbGVtZW50IHBhcmVudE5vZGUgPSBtZXNzYWdlLmdldEVsZW1lbnQoKTsKLSAgICAgIGlmIChwYXJlbnROb2RlIGluc3RhbmNlb2YgSURPTU5vZGUpIAotICAgICAgewotCQkgICAgLy8gZm9ybWF0IHNlbGVjdGVkIG5vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgIEZvcm1hdFByb2Nlc3NvclhNTCBmb3JtYXRQcm9jZXNzb3JYTUwgPSBuZXcgRm9ybWF0UHJvY2Vzc29yWE1MKCk7Ci0gICAgICAgIGZvcm1hdFByb2Nlc3NvclhNTC5mb3JtYXROb2RlKChJRE9NTm9kZSlwYXJlbnROb2RlKTsKLSAgICAgIH0KLSAgCQkKLSAgCQltZXNzYWdlTmFtZSA9IG51bGw7Ci0gIAkJcmV0dXJuIG1lc3NhZ2U7Ci0gIAl9Ci0gIAkJCSAgCQotICAJcHVibGljIHN0YXRpYyBQYXJ0IGNyZWF0ZVBhcnQoTWVzc2FnZSBtZXNzYWdlKSB7Ci0gIAkJRGVmaW5pdGlvbiBkZWYgPSBtZXNzYWdlLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLSAgCQlTdHJpbmcgbmFtZSA9IE5hbWVVdGlsLmJ1aWxkVW5pcXVlUGFydE5hbWUobWVzc2FnZSwgbWVzc2FnZS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpKTsKLSAgCQlBZGRQYXJ0Q29tbWFuZCBhY3Rpb24gPSBudWxsOwotICAJCQotICAJCWlmIChQQVJUX1RZUEVfT1JfREVGSU5JVElPTiA9PSBQQVJUX0lORk9fVFlQRV9ERUZJTklUSU9OKSB7Ci0gIAkJCWFjdGlvbiA9IG5ldyBBZGRQYXJ0Q29tbWFuZChtZXNzYWdlLCBuYW1lLCBXU0RMQ29uc3RhbnRzLlNDSEVNQV9GT1JfU0NIRU1BX1VSSV8yMDAxLCAic3RyaW5nIiwgdHJ1ZSk7IC8vJE5PTi1OTFMtMSQKLSAgCQl9Ci0gIAkJZWxzZSBpZiAoUEFSVF9UWVBFX09SX0RFRklOSVRJT04gPT0gUEFSVF9JTkZPX0VMRU1FTlRfREVDTEFSQVRJT04pIHsgIAkJCQotICAJCQkvL2FjdGlvbiA9IG5ldyBBZGRQYXJ0Q29tbWFuZChtZXNzYWdlLCBuYW1lLCBXU0RMQ29uc3RhbnRzLlNDSEVNQV9GT1JfU0NIRU1BX1VSSV8yMDAxLCAic3RyaW5nIiwgdHJ1ZSk7Ci0gIAkJCVN0cmluZyBlbGVtZW50TmFtZSA9IGdldE5ld05hbWVIZWxwZXIobmFtZSwgZGVmLCBmYWxzZSk7Ci0gIAkJCUFkZFhTREVsZW1lbnREZWNsYXJhdGlvbkNvbW1hbmQgZWxlbWVudEFjdGlvbiA9IG5ldyBBZGRYU0RFbGVtZW50RGVjbGFyYXRpb25Db21tYW5kKGRlZiwgZWxlbWVudE5hbWUpOwotICAJCQllbGVtZW50QWN0aW9uLnJ1bigpOwotICAJCQlhY3Rpb24gPSBuZXcgQWRkUGFydENvbW1hbmQobWVzc2FnZSwgbmFtZSwgZGVmLmdldFRhcmdldE5hbWVzcGFjZSgpLCBlbGVtZW50TmFtZSwgZmFsc2UpOwotICAJCX0KLQotICAJCWFjdGlvbi5ydW4oKTsKLSAgCQkKLSAgCQlyZXR1cm4gKFBhcnQpIGFjdGlvbi5nZXRXU0RMRWxlbWVudCgpOwotICAJfQkKLQotICAJLyoKLSAgCSAqIFVzZWQgdG8gZGV0ZXJtaW5lIGEgbmFtZSBmb3IgYW4gRWxlbWVudAotICAJICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldE5ld05hbWVIZWxwZXIoU3RyaW5nIGJhc2UsIERlZmluaXRpb24gZGVmLCBib29sZWFuIGlzVHlwZSkKLSAgICB7IAotICAgICAgU3RyaW5nIG5hbWUgPSBiYXNlOyAgICAKLSAgICAgIGludCBjb3VudCA9IDA7Ci0KLSAgICAgIC8vIFVnbHkuLi4uICBSZWRvIHRoaXMuLi4KLSAgICAgIC8vIEdldCBhIGxpc3Qgb2YgRWxlbWVudHMuLi4KLSAgICAgIExpc3QgZWxlbWVudExpc3QgPSBudWxsOwotICAgICAgaWYgKGRlZi5nZXRFVHlwZXMoKSAhPSBudWxsKSB7Ci0gICAgICAJTGlzdCB4c2RzTGlzdCA9IGRlZi5nZXRFVHlwZXMoKS5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICAJaWYgKHhzZHNMaXN0ICE9IG51bGwpIHsKLSAgICAgIAkJSXRlcmF0b3IgeHNkc0l0ZXJhdG9yID0geHNkc0xpc3QuaXRlcmF0b3IoKTsKLSAgICAgIAkJWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQgeHNkRWxlbWVudCA9IChYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCkgeHNkc0l0ZXJhdG9yLm5leHQoKTsKLSAgICAgIAkJWFNEU2NoZW1hIHNjaGVtYSA9IHhzZEVsZW1lbnQuZ2V0U2NoZW1hKCk7Ci0gICAgICAJCWlmIChzY2hlbWEgIT0gbnVsbCkgewotICAgICAgCQkJZWxlbWVudExpc3QgPSBzY2hlbWEuZ2V0RWxlbWVudERlY2xhcmF0aW9ucygpOwotICAgICAgCQl9Ci0gICAgICAJfQotICAgICAgfQotICAgICAgCi0gICAgICBpZiAoZWxlbWVudExpc3QgIT0gbnVsbCkgewotICAgICAgCWludCBpbmRleCA9IDA7Ci0gICAgICAJd2hpbGUgKGluZGV4IDwgZWxlbWVudExpc3Quc2l6ZSgpKSB7Ci0gICAgICAJCVhTREVsZW1lbnREZWNsYXJhdGlvbiBlbGVtZW50RGVjbGFyYXRpb24gPSAoWFNERWxlbWVudERlY2xhcmF0aW9uKSBlbGVtZW50TGlzdC5nZXQoaW5kZXgpOwotICAgICAgCQkKLSAgICAgIAkJaWYgKG5hbWUuZXF1YWxzKGVsZW1lbnREZWNsYXJhdGlvbi5nZXROYW1lKCkpKSB7Ci0gICAgICAJCQljb3VudCsrOwotICAgICAgCQkJbmFtZSA9IG5hbWUgKyBjb3VudDsKLSAgICAgIAkJCWluZGV4ID0gMDsKLSAgICAgIAkJfQotICAgICAgCQllbHNlIHsKLSAgICAgIAkJCWluZGV4Kys7Ci0gICAgICAJCX0KLSAgICAgIAl9Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiBuYW1lOwotICAgIH0KLQotICAJLyoKLSAgCSAqIFJldHVybiB0aGUgdHlwZSBvZiBQYXJ0IHRoaXMgV1NETEVsZW1lbnQgc2hvdWxkIGhhdmUgKEVsZW1lbnQgdnMgVHlwZSkuICBUbyBkZXRlcm1pbmUgdGhpcywgd2UgZmlsdGVyIHVwIHRvIHRoZSAncGFyZW50JyBQb3J0VHlwZQotICAJICogYW5kIGdvIGRvd24gdG8gdGhlIGZpcnN0IFBhcnQgd2UgZW5jb3VudGVyIGFuZCBjaGVjayB0aGUgdHlwZSBpdCBoYXMuICBJZiB0aGlzIGZhaWxzLCBkZWZhdWx0IHRvIFR5cGUuCi0gIAkgKi8KLSAgCSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UGFydEluZm8oV1NETEVsZW1lbnQgZWxlbWVudCkgewotICAJICAJU3RyaW5nIHBhcnRJbmZvID0gbnVsbDsKLSAgCSAgCQotICAJICAJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBQb3J0VHlwZSkgewotICAJICAJCXBhcnRJbmZvID0gZ2V0UGFydEluZm8oKFBvcnRUeXBlKSBlbGVtZW50KTsKLSAgCSAgCX0KLSAgCSAgCWVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBPcGVyYXRpb24pIHsKLSAgCSAgCQlwYXJ0SW5mbyA9IGdldFBhcnRJbmZvKCgoV1NETEVsZW1lbnRJbXBsKSBlbGVtZW50KS5nZXRDb250YWluZXIoKSk7Ci0gIAkgIAl9Ci0gIAkgIAllbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgTWVzc2FnZVJlZmVyZW5jZUltcGwpIHsKLSAgCSAgCQlwYXJ0SW5mbyA9IGdldFBhcnRJbmZvKCgoV1NETEVsZW1lbnRJbXBsKSBlbGVtZW50KS5nZXRDb250YWluZXIoKSk7Ci0gIAkgIAl9Ci0KLSAgCSAgCWlmIChwYXJ0SW5mbyA9PSBudWxsKSB7Ci0gIAkgIAkJcGFydEluZm8gPSBDcmVhdGVXU0RMRWxlbWVudEhlbHBlci5QQVJUX0lORk9fVFlQRV9ERUZJTklUSU9OOwotICAJICAJfQotICAJICAJCi0gIAkgIAlyZXR1cm4gcGFydEluZm87ICAJCi0gIAkgIH0KLSAgCSAgCi0gIAkgIHByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRQYXJ0SW5mbyhQb3J0VHlwZSBwb3J0VHlwZSkgewotICAJICAJU3RyaW5nIHBhcnRJbmZvID0gbnVsbDsKLSAgCSAgCQotICAJICAJaWYgKHBvcnRUeXBlLmdldE9wZXJhdGlvbnMoKSAhPSBudWxsKSB7Ci0gIAkgIAkJSXRlcmF0b3Igb3BlcmF0aW9uSXQgPSBwb3J0VHlwZS5nZXRPcGVyYXRpb25zKCkuaXRlcmF0b3IoKTsKLSAgCSAgCQl3aGlsZSAob3BlcmF0aW9uSXQuaGFzTmV4dCgpKSB7Ci0gIAkgIAkJCU9wZXJhdGlvbiBvcCA9IChPcGVyYXRpb24pIG9wZXJhdGlvbkl0Lm5leHQoKTsKLQotICAJICAJCQlpZiAob3AuZ2V0RUlucHV0KCkgIT0gbnVsbCkgewotICAJICAJCQkJcGFydEluZm8gPSBnZXRNZXNzYWdlUmVmUGFydEluZm8oKE1lc3NhZ2VSZWZlcmVuY2VJbXBsKSBvcC5nZXRFSW5wdXQoKSk7Ci0gIAkgIAkJCX0KLSAgCSAgCQotICAJICAJCQlpZiAocGFydEluZm8gPT0gbnVsbCAmJiBvcC5nZXRFT3V0cHV0KCkgIT0gbnVsbCkgewotICAJICAJCQkJcGFydEluZm8gPSBnZXRNZXNzYWdlUmVmUGFydEluZm8oKE1lc3NhZ2VSZWZlcmVuY2VJbXBsKSBvcC5nZXRFT3V0cHV0KCkpOwotICAJICAJCQl9Ci0gIAkgIAkKLSAgCSAgCQkJaWYgKG9wLmdldEVGYXVsdHMoKSAhPSBudWxsKSB7Ci0gIAkgIAkJCQlJdGVyYXRvciBmYXVsdEl0ID0gb3AuZ2V0RUZhdWx0cygpLml0ZXJhdG9yKCk7Ci0gIAkgIAkJCQl3aGlsZSAocGFydEluZm8gPT0gbnVsbCAmJiBmYXVsdEl0Lmhhc05leHQoKSkgewotICAJICAJCQkJCUZhdWx0IGZhdWx0ID0gKEZhdWx0KSBmYXVsdEl0Lm5leHQoKTsKLSAgCSAgCQkJCQlwYXJ0SW5mbyA9IGdldE1lc3NhZ2VSZWZQYXJ0SW5mbygoTWVzc2FnZVJlZmVyZW5jZUltcGwpIGZhdWx0KTsKLSAgCSAgCQkJCX0KLSAgCSAgCQkJfQotICAJICAJICAJICAJCi0gIAkgIAkJCWlmIChwYXJ0SW5mbyAhPSBudWxsKQotICAJICAJCQkJYnJlYWs7Ci0gIAkgIAkJfQotICAJICAJfQotCi0gIAkgIAlyZXR1cm4gcGFydEluZm87Ci0gIAkgIH0KLSAgCSAgCi0gIAkgIHByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRNZXNzYWdlUmVmUGFydEluZm8oTWVzc2FnZVJlZmVyZW5jZUltcGwgaW9mKSB7Ci0gIAkgIAlTdHJpbmcgcGFydEluZm8gPSBudWxsOwotICAJICAJCi0gIAkgIAlpZiAoaW9mLmdldEVNZXNzYWdlKCkgIT0gbnVsbCAmJiBpb2YuZ2V0RU1lc3NhZ2UoKS5nZXRFUGFydHMoKSAhPSBudWxsKSB7Ci0gIAkgIAkJSXRlcmF0b3IgcGFydEl0ID0gaW9mLmdldEVNZXNzYWdlKCkuZ2V0RVBhcnRzKCkuaXRlcmF0b3IoKTsKLSAgCSAgCQotICAJICAJCXdoaWxlIChwYXJ0SW5mbyA9PSBudWxsICYmIHBhcnRJdC5oYXNOZXh0KCkpIHsKLSAgCSAgCQkJUGFydCBwYXJ0ID0gKFBhcnQpIHBhcnRJdC5uZXh0KCk7Ci0gIAkgIAkJCi0gIAkgIAkJCWlmIChwYXJ0LmdldFR5cGVEZWZpbml0aW9uKCkgIT0gbnVsbCkgewotICAJICAJCQkJcGFydEluZm8gPSBDcmVhdGVXU0RMRWxlbWVudEhlbHBlci5QQVJUX0lORk9fVFlQRV9ERUZJTklUSU9OOwotICAJICAJCQl9Ci0gIAkgIAkJCWVsc2UgaWYgKHBhcnQuZ2V0RWxlbWVudERlY2xhcmF0aW9uKCkgIT0gbnVsbCkgewotICAJICAJCQkJcGFydEluZm8gPSBDcmVhdGVXU0RMRWxlbWVudEhlbHBlci5QQVJUX0lORk9fRUxFTUVOVF9ERUNMQVJBVElPTjsKLSAgCSAgCQkJfQotICAJICAJCX0KLSAgCSAgCX0KLSAgCSAgCQotICAJICAJcmV0dXJuIHBhcnRJbmZvOwotICAJICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvTmFtZVV0aWwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9OYW1lVXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjk5MjBmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9OYW1lVXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTgxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RNb2RlbEdyb3VwOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RQYXJ0aWNsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotCi1wdWJsaWMgY2xhc3MgTmFtZVV0aWwKLXsKLSAgLyoqCi0gICAqIFJldHVybiBhIG5hbWUgd2hpY2ggaXMgbm90IHVzZWQgYnkgYW55IG90aGVyIGZhdWx0IGluIHRoZSBvcGVyYXRpb24uCi0gICAqIEByZXR1cm4gU3RyaW5nCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBidWlsZFVuaXF1ZUZhdWx0TmFtZShPcGVyYXRpb24gb3BlcmF0aW9uKQotICB7Ci0gIAlyZXR1cm4gYnVpbGRVbmlxdWVGYXVsdE5hbWUob3BlcmF0aW9uLCAiTmV3RmF1bHQiKTsgLy8kTk9OLU5MUy0xJAotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIFN0cmluZyBidWlsZFVuaXF1ZUZhdWx0TmFtZShPcGVyYXRpb24gb3BlcmF0aW9uLCBTdHJpbmcgYmFzZU5hbWUpIHsKLSAgCWlmIChiYXNlTmFtZSA9PSBudWxsKQotICAJCWJhc2VOYW1lID0gIk5ld0ZhdWx0IjsgLy8kTk9OLU5MUy0xJAotICAJCi0gIAlMaXN0IG5hbWVzID0gZ2V0VXNlZEZhdWx0TmFtZXMob3BlcmF0aW9uKTsKLQotICAgIC8vIE5vdyBzZWFyY2ggdGhlIGxpc3QgdW50aWwgd2UgZmluZCBhbiB1bnVzZWQgbmFtZQotICAgIHJldHVybiBnZXRVbmlxdWVOYW1lSGVscGVyKGJhc2VOYW1lLCBuYW1lcyk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJuIGEgbmFtZSB3aGljaCBpcyBub3QgdXNlZCBieSBhbnkgb3RoZXIgaW5wdXQgaW4gdGhlIHBvcnRUeXBlLiAgUmV0dXJuZWQgbmFtZSB3aWxsIGJlIG9mIHRoZSBmb3JtOgotICAgKiA8b3BlcmF0aW9uTmFtZT4gKyA8ZW5kaW5nPiBbKyB1bmlxdWUgSW50ZWdlcl0KLSAgICogQHJldHVybiBTdHJpbmcKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGJ1aWxkVW5pcXVlSW5wdXROYW1lKFBvcnRUeXBlIHBvcnRUeXBlLCBTdHJpbmcgb3BlcmF0aW9uTmFtZSwgU3RyaW5nIGVuZGluZykKLSAgewotICAgIFN0cmluZyBuYW1lID0gbnVsbDsKLSAgICBTdHJpbmcgY2FuZGlkYXRlID0gb3BlcmF0aW9uTmFtZSArIGVuZGluZzsKLQotICAgIGludCBpID0gMDsKLQotICAgIC8vIGxvb3AgdW50aWwgd2UgZmluZCBhIHVuaXF1ZSBuYW1lICh0aGUgbmFtZSB3aWxsIGNvbnNpc3Qgb2YgdGhlIG9wZXJhdGlvbk5hbWUgKyBlbmRpbmcgKyBhbiBpbnRlZ2VyKQotICAgIHdoaWxlIChuYW1lID09IG51bGwpCi0gICAgewotICAgICAgYm9vbGVhbiB1bmlxdWUgPSB0cnVlOwotCi0gICAgICAvLyBkZXRlcm1pbmUgaWYgdGhpcyBjb21iaW5hdGlvbiBpcyB1bmlxdWUgd2l0aGluIHRoZSBjdXJyZW50IHBvcnR0eXBlCi0gICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gcG9ydFR5cGUuZ2V0RU9wZXJhdGlvbnMoKS5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCkgJiYgdW5pcXVlOykKLSAgICAgIHsKLSAgICAgICAgT3BlcmF0aW9uIGN1cnJlbnQgPSAoT3BlcmF0aW9uKSBpdC5uZXh0KCk7Ci0gICAgICAgIC8vIFRPRE8gOiBwb3J0IGNoZWNrCi0gICAgICAgIC8vIG9sZCAgaWYoY3VycmVudC5pc1NldEVJbnB1dCgpICYmIGN1cnJlbnQuZ2V0RUlucHV0KCkuaXNTZXROYW1lKCkpIHsKLSAgICAgICAgaWYgKGN1cnJlbnQuZ2V0RUlucHV0KCkgIT0gbnVsbCAmJiBjdXJyZW50LmdldEVJbnB1dCgpLmdldE5hbWUoKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKGN1cnJlbnQuZ2V0RUlucHV0KCkuZ2V0TmFtZSgpLmVxdWFscyhjYW5kaWRhdGUpKQotICAgICAgICAgICAgdW5pcXVlID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmICh1bmlxdWUpCi0gICAgICAgIG5hbWUgPSBjYW5kaWRhdGU7Ci0gICAgICBlbHNlCi0gICAgICAgIGNhbmRpZGF0ZSA9IG9wZXJhdGlvbk5hbWUgKyBlbmRpbmcgKyBpOwotICAgICAgaSsrOwotICAgIH0KLSAgICByZXR1cm4gbmFtZTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm4gYSBuYW1lIHdoaWNoIGlzIG5vdCB1c2VkIGJ5IGFueSBvdGhlciBtZXNzYWdlIGluIHRoZSBkZWZpbml0aW9uLgotICAgKiBAcmV0dXJuIFN0cmluZwotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgYnVpbGRVbmlxdWVNZXNzYWdlTmFtZShEZWZpbml0aW9uIGRlZmluaXRpb24sIFN0cmluZyBiYXNlTmFtZSkKLSAgewotICAgIGlmIChiYXNlTmFtZSA9PSBudWxsKQotICAgIHsKLSAgICAgIGJhc2VOYW1lID0gIk5ld01lc3NhZ2UiOyAvLyROT04tTkxTLTEkCi0gICAgfQotCi0gICAgTGlzdCBuYW1lcyA9IGdldFVzZWRNZXNzYWdlTmFtZXMoZGVmaW5pdGlvbik7Ci0KLSAgICAvLyBOb3cgc2VhcmNoIHRoZSBsaXN0IHVudGlsIHdlIGZpbmQgYW4gdW51c2VkIG5hbWUKLSAgICByZXR1cm4gZ2V0VW5pcXVlTmFtZUhlbHBlcihiYXNlTmFtZSwgbmFtZXMpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybiBhIG5hbWUgd2hpY2ggaXMgbm90IHVzZWQgYnkgYW55IG90aGVyIG9wZXJhdGlvbiBpbiB0aGUgcG9ydCB0eXBlLgotICAgKiBAcmV0dXJuIFN0cmluZwotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgYnVpbGRVbmlxdWVPcGVyYXRpb25OYW1lKFBvcnRUeXBlIHBvcnRUeXBlKQotICB7Ci0gIAlyZXR1cm4gYnVpbGRVbmlxdWVPcGVyYXRpb25OYW1lKHBvcnRUeXBlLCAiTmV3T3BlcmF0aW9uIik7IC8vJE5PTi1OTFMtMSQKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgYnVpbGRVbmlxdWVPcGVyYXRpb25OYW1lKFBvcnRUeXBlIHBvcnRUeXBlLCBTdHJpbmcgYmFzZU5hbWUpCi0gIHsKLSAgCWlmIChiYXNlTmFtZSA9PSBudWxsKSB7Ci0gIAkJYmFzZU5hbWUgPSAiTmV3T3BlcmF0aW9uIjsgLy8kTk9OLU5MUy0xJAotICAJfQotCi0gIAlMaXN0IG5hbWVzID0gZ2V0VXNlZE9wZXJhdGlvbk5hbWVzKHBvcnRUeXBlKTsKLQotICAgIC8vIE5vdyBzZWFyY2ggdGhlIGxpc3QgdW50aWwgd2UgZmluZCBhbiB1bnVzZWQgbmFtZQotICAgIHJldHVybiBnZXRVbmlxdWVOYW1lSGVscGVyKGJhc2VOYW1lLCBuYW1lcyk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJuIGEgbmFtZSB3aGljaCBpcyBub3QgdXNlZCBieSBhbnkgb3RoZXIgb3V0cHV0IGluIHRoZSBwb3J0VHlwZS4gIFJldHVybmVkIG5hbWUgd2lsbCBiZSBvZiB0aGUgZm9ybToKLSAgICogPG9wZXJhdGlvbk5hbWU+ICsgPGVuZGluZz4gWysgdW5pcXVlIEludGVnZXJdCi0gICAqIEByZXR1cm4gU3RyaW5nCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBidWlsZFVuaXF1ZU91dHB1dE5hbWUoUG9ydFR5cGUgcG9ydFR5cGUsIFN0cmluZyBvcGVyYXRpb25OYW1lLCBTdHJpbmcgZW5kaW5nKQotICB7Ci0gICAgU3RyaW5nIG5hbWUgPSBudWxsOwotICAgIFN0cmluZyBjYW5kaWRhdGUgPSBvcGVyYXRpb25OYW1lICsgZW5kaW5nOwotCi0gICAgaW50IGkgPSAwOwotCi0gICAgLy8gbG9vcCB1bnRpbCB3ZSBmaW5kIGEgdW5pcXVlIG5hbWUgKHRoZSBuYW1lIHdpbGwgY29uc2lzdCBvZiB0aGUgb3BlcmF0aW9uTmFtZSArIGVuZGluZyArIGFuIGludGVnZXIpCi0gICAgd2hpbGUgKG5hbWUgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBib29sZWFuIHVuaXF1ZSA9IHRydWU7Ci0KLSAgICAgIC8vIGRldGVybWluZSBpZiB0aGlzIGNvbWJpbmF0aW9uIGlzIHVuaXF1ZSB3aXRoaW4gdGhlIGN1cnJlbnQgcG9ydHR5cGUJCQkKLSAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBwb3J0VHlwZS5nZXRFT3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKSAmJiB1bmlxdWU7KQotICAgICAgewotICAgICAgICBPcGVyYXRpb24gY3VycmVudCA9IChPcGVyYXRpb24pIGl0Lm5leHQoKTsKLSAgICAgICAgLy8gVE9ETzogcG9ydCBjaGVjawotICAgICAgICAvLyBvbGQJCQkJaWYoY3VycmVudC5pc1NldEVPdXRwdXQoKSAmJiBjdXJyZW50LmdldEVPdXRwdXQoKS5pc1NldE5hbWUoKSkgewotICAgICAgICBpZiAoY3VycmVudC5nZXRFT3V0cHV0KCkgIT0gbnVsbCAmJiBjdXJyZW50LmdldEVPdXRwdXQoKS5nZXROYW1lKCkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGlmIChjdXJyZW50LmdldEVPdXRwdXQoKS5nZXROYW1lKCkuZXF1YWxzKGNhbmRpZGF0ZSkpCi0gICAgICAgICAgICB1bmlxdWUgPSBmYWxzZTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgaWYgKHVuaXF1ZSkKLSAgICAgICAgbmFtZSA9IGNhbmRpZGF0ZTsKLSAgICAgIGVsc2UKLSAgICAgICAgY2FuZGlkYXRlID0gb3BlcmF0aW9uTmFtZSArIGVuZGluZyArIGk7Ci0gICAgICBpKys7Ci0gICAgfQotICAgIHJldHVybiBuYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybiBhIG5hbWUgd2hpY2ggaXMgbm90IHVzZWQgYnkgYW55IG90aGVyIHBhcnQgaW4gdGhlIG1lc3NhZ2UuCi0gICAqIEByZXR1cm4gU3RyaW5nCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBidWlsZFVuaXF1ZVBhcnROYW1lKE1lc3NhZ2UgbWVzc2FnZSkKLSAgewotICAJTGlzdCBuYW1lcyA9IGdldFVzZWRQYXJ0TmFtZXMobWVzc2FnZSk7Ci0KLSAgICAvLyBOb3cgc2VhcmNoIHRoZSBsaXN0IHVudGlsIHdlIGZpbmQgYW4gdW51c2VkIG5hbWUKLSAgICByZXR1cm4gZ2V0VW5pcXVlTmFtZUhlbHBlcigiTmV3UGFydCIsIG5hbWVzKTsgLy8kTk9OLU5MUy0xJAotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIFN0cmluZyBidWlsZFVuaXF1ZVBhcnROYW1lKE1lc3NhZ2UgbWVzc2FnZSwgU3RyaW5nIGJhc2VOYW1lKQotICB7Ci0gIAlpZiAoYmFzZU5hbWUgPT0gbnVsbCkKLSAgCXsKLSAgCQliYXNlTmFtZSA9ICJOZXdQYXJ0IjsgLy8kTk9OLU5MUy0xJAotICAJfQotICAJCi0gIAlMaXN0IG5hbWVzID0gZ2V0VXNlZFBhcnROYW1lcyhtZXNzYWdlKTsKLQotICAgIC8vIE5vdyBzZWFyY2ggdGhlIGxpc3QgdW50aWwgd2UgZmluZCBhbiB1bnVzZWQgbmFtZQotICAgIHJldHVybiBnZXRVbmlxdWVOYW1lSGVscGVyKGJhc2VOYW1lLCBuYW1lcyk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJuIGEgbmFtZSB3aGljaCBpcyBub3QgdXNlZCBieSBhbnkgb3RoZXIgcG9ydCB0eXBlIGluIHRoZSBkZWZpbml0aW9uLgotICAgKiBAcmV0dXJuIFN0cmluZwotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgYnVpbGRVbmlxdWVQb3J0VHlwZU5hbWUoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBTdHJpbmcgYmFzZU5hbWUpCi0gIHsKLSAgICBpZiAoYmFzZU5hbWUgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBiYXNlTmFtZSA9ICJOZXdQb3J0VHlwZSI7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0KLSAgICBMaXN0IG5hbWVzID0gZ2V0VXNlZFBvcnRUeXBlTmFtZXMoZGVmaW5pdGlvbik7Ci0KLSAgICAvLyBOb3cgc2VhcmNoIHRoZSBsaXN0IHVudGlsIHdlIGZpbmQgYW4gdW51c2VkIG5hbWUKLSAgICByZXR1cm4gZ2V0VW5pcXVlTmFtZUhlbHBlcihiYXNlTmFtZSwgbmFtZXMpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0VW5pcXVlTmFtZUhlbHBlcihTdHJpbmcgYmFzZU5hbWUsIExpc3QgbmFtZXMpCi0gIHsKLSAgICBpbnQgaSA9IDA7Ci0KLSAgICBTdHJpbmcgbmFtZSA9IGJhc2VOYW1lOwotICAgIHdoaWxlICh0cnVlKQotICAgIHsKLSAgICAgIGlmICghbmFtZXMuY29udGFpbnMobmFtZSkpCi0gICAgICB7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgaSsrOwotICAgICAgbmFtZSA9IGJhc2VOYW1lICsgaTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbmFtZTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm4gYSBuYW1lIHdoaWNoIGlzIG5vdCB1c2VkIGJ5IGFueSBvdGhlciBzZXJ2aWNlIGluIHRoZSBkZWZpbml0aW9uLgotICAgKiBAcmV0dXJuIFN0cmluZwotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgYnVpbGRVbmlxdWVTZXJ2aWNlTmFtZShEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgCUxpc3QgbmFtZXMgPSBnZXRVc2VkU2VydmljZU5hbWVzKGRlZmluaXRpb24pOwotCi0gICAgLy8gTm93IHNlYXJjaCB0aGUgbGlzdCB1bnRpbCB3ZSBmaW5kIGFuIHVudXNlZCBuYW1lCi0gICAgcmV0dXJuIGdldFVuaXF1ZU5hbWVIZWxwZXIoIk5ld1NlcnZpY2UiLCBuYW1lcyk7IC8vJE5PTi1OTFMtMSQKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm4gYSBuYW1lIHdoaWNoIGlzIG5vdCB1c2VkIGJ5IGFueSBvdGhlciBiaW5kaW5nIGluIHRoZSBkZWZpbml0aW9uLgotICAgKiBAcmV0dXJuIFN0cmluZwotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgYnVpbGRVbmlxdWVCaW5kaW5nTmFtZShEZWZpbml0aW9uIGRlZmluaXRpb24sIFN0cmluZyBiYXNlTmFtZSkKLSAgewotICAgIGlmIChiYXNlTmFtZSA9PSBudWxsKQotICAgIHsKLSAgICAgIGJhc2VOYW1lID0gIk5ld0JpbmRpbmciOyAvLyROT04tTkxTLTEkCi0gICAgfQotCi0gICAgTGlzdCBuYW1lcyA9IGdldFVzZWRCaW5kaW5nTmFtZXMoZGVmaW5pdGlvbik7Ci0KLSAgICByZXR1cm4gZ2V0VW5pcXVlTmFtZUhlbHBlcihiYXNlTmFtZSwgbmFtZXMpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgYnVpbGRVbmlxdWVQcmVmaXgoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBTdHJpbmcgYmFzZVByZWZpeCkKLSAgewotICAgIFN0cmluZyBwcmVmaXggPSBiYXNlUHJlZml4OwotICAgIGZvciAoaW50IGkgPSAxOyBkZWZpbml0aW9uLmdldE5hbWVzcGFjZShwcmVmaXgpICE9IG51bGw7IGkrKykKLSAgICB7Ci0gICAgICBwcmVmaXggPSBiYXNlUHJlZml4ICsgaTsKLSAgICB9Ci0gICAgcmV0dXJuIHByZWZpeDsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGJ1aWxkVW5pcXVlUG9ydE5hbWUoU2VydmljZSBzZXJ2aWNlLCBTdHJpbmcgYmFzZU5hbWUpCi0gIHsKLSAgICBpZiAoYmFzZU5hbWUgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBiYXNlTmFtZSA9ICJOZXdQb3J0IjsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgCi0gICAgTGlzdCBuYW1lcyA9IGdldFVzZWRQb3J0TmFtZXMoc2VydmljZSk7Ci0gICAgCi0JcmV0dXJuIGdldFVuaXF1ZU5hbWVIZWxwZXIoYmFzZU5hbWUsIG5hbWVzKTsKLSAgfQotCQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBidWlsZFVuaXF1ZU1lc3NhZ2VOYW1lKERlZmluaXRpb24gZGVmaW5pdGlvbiwgTWVzc2FnZVJlZmVyZW5jZSBtZXNzUmVmKQotICB7ICAgCi0gICAgU3RyaW5nIG5hbWUgPSBudWxsOwotICAgIGlmIChtZXNzUmVmIGluc3RhbmNlb2YgSW5wdXQpCi0gICAgewotICAgICAgbmFtZSA9IGNyZWF0ZU9wZXJhdGlvbk5hbWUobWVzc1JlZiwgIlJlcXVlc3QiKTsgICAgIC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgZWxzZSBpZiAobWVzc1JlZiBpbnN0YW5jZW9mIE91dHB1dCkKLSAgICB7Ci0gICAgICBuYW1lID0gY3JlYXRlT3BlcmF0aW9uTmFtZShtZXNzUmVmLCAiUmVzcG9uc2UiKTsgIC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgZWxzZSBpZiAobWVzc1JlZiBpbnN0YW5jZW9mIEZhdWx0KQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgU3RyaW5nIGZhdWx0TmFtZSA9ICgoRmF1bHQpIG1lc3NSZWYpLmdldE5hbWUoKTsKLSAgICAgIGlmIChmYXVsdE5hbWUgPT0gbnVsbCB8fCBmYXVsdE5hbWUubGVuZ3RoKCkgPT0gMCkKLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgZmF1bHROYW1lID0gIkZhdWx0IjsgLy8kTk9OLU5MUy0xJAotICAgICAgfQotICAgICAgbmFtZSA9IGNyZWF0ZU9wZXJhdGlvbk5hbWUobWVzc1JlZiwgZmF1bHROYW1lKTsgCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotCi0gICAgcmV0dXJuIE5hbWVVdGlsLmJ1aWxkVW5pcXVlTWVzc2FnZU5hbWUoZGVmaW5pdGlvbiwgbmFtZSk7Ci0gIH0KLSAgCi0gIAotICBwdWJsaWMgc3RhdGljIExpc3QgZ2V0VXNlZEZhdWx0TmFtZXMoT3BlcmF0aW9uIG9wZXJhdGlvbikgewotICAgIEFycmF5TGlzdCBuYW1lcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBvcGVyYXRpb24uZ2V0RUZhdWx0cygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBGYXVsdCBmYXVsdCA9IChGYXVsdCkgaS5uZXh0KCk7Ci0gICAgICBuYW1lcy5hZGQoZmF1bHQuZ2V0TmFtZSgpKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG5hbWVzOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBMaXN0IGdldFVzZWRPcGVyYXRpb25OYW1lcyhQb3J0VHlwZSBwb3J0VHlwZSkgewotICAgIEFycmF5TGlzdCBuYW1lcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBwb3J0VHlwZS5nZXRFT3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBPcGVyYXRpb24gb3AgPSAoT3BlcmF0aW9uKSBpLm5leHQoKTsKLSAgICAgIG5hbWVzLmFkZChvcC5nZXROYW1lKCkpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbmFtZXM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgTGlzdCBnZXRVc2VkUGFydE5hbWVzKE1lc3NhZ2UgbWVzc2FnZSkgewotICAgIEFycmF5TGlzdCBuYW1lcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBtZXNzYWdlLmdldEVQYXJ0cygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBQYXJ0IHBhcnQgPSAoUGFydCkgaS5uZXh0KCk7Ci0gICAgICBuYW1lcy5hZGQocGFydC5nZXROYW1lKCkpOwotICAgIH0gICAgCi0gICAgcmV0dXJuIG5hbWVzOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIExpc3QgZ2V0VXNlZFBvcnRUeXBlTmFtZXMoRGVmaW5pdGlvbiBkZWZpbml0aW9uKSB7Ci0gICAgQXJyYXlMaXN0IG5hbWVzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IGRlZmluaXRpb24uZ2V0RVBvcnRUeXBlcygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBQb3J0VHlwZSBwb3J0VHlwZSA9IChQb3J0VHlwZSkgaS5uZXh0KCk7Ci0gICAgICAvLyBUT0RPOiBwb3J0IGNoZWNrCi0gICAgICAvLwkJCWlmIChwb3J0VHlwZS5pc1NldFFOYW1lKCkpCi0gICAgICBpZiAocG9ydFR5cGUuZ2V0UU5hbWUoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBuYW1lcy5hZGQocG9ydFR5cGUuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBuYW1lczsKLSAgICAKLSAgfQotICBwdWJsaWMgc3RhdGljIExpc3QgZ2V0VXNlZFNlcnZpY2VOYW1lcyhEZWZpbml0aW9uIGRlZmluaXRpb24pIHsKLSAgICAvLyBGaXJzdCBidWlsZCBhIGxpc3Qgb2YgbmFtZXMgYWxyZWFkeSB1c2VkCi0gICAgQXJyYXlMaXN0IG5hbWVzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGZvciAoSXRlcmF0b3IgaSA9IGRlZmluaXRpb24uZ2V0RVNlcnZpY2VzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIFNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKSBpLm5leHQoKTsKLSAgICAgIC8vIFRPRE86IHBvcnQgY2hlY2sKLSAgICAgIC8vIAkJaWYoc2VydmljZS5pc1NldFFOYW1lKCkpCi0gICAgICBpZiAoc2VydmljZS5nZXRRTmFtZSgpICE9IG51bGwpCi0gICAgICAgIG5hbWVzLmFkZChzZXJ2aWNlLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbmFtZXM7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgTGlzdCBnZXRVc2VkTWVzc2FnZU5hbWVzKERlZmluaXRpb24gZGVmaW5pdGlvbikgewotICAgIEFycmF5TGlzdCBuYW1lcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBkZWZpbml0aW9uLmdldEVNZXNzYWdlcygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBNZXNzYWdlIG1zZyA9IChNZXNzYWdlKSBpLm5leHQoKTsKLSAgICAgIC8vIFRPRE86IHBvcnQgY2hlY2sKLSAgICAgIGlmIChtc2cuZ2V0UU5hbWUoKSAhPSBudWxsKQotICAgICAgICAvLwkJCWlmKG1zZy5pc1NldFFOYW1lKCkpCi0gICAgICAgIG5hbWVzLmFkZChtc2cuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBuYW1lczsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgTGlzdCBnZXRVc2VkQmluZGluZ05hbWVzKERlZmluaXRpb24gZGVmaW5pdGlvbikgewotICAgIEFycmF5TGlzdCBuYW1lcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBkZWZpbml0aW9uLmdldEVCaW5kaW5ncygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZykgaS5uZXh0KCk7Ci0gICAgICAvLyBUT0RPOiBwb3J0IGNoZWNrCi0gICAgICAvLwkJCWlmIChiaW5kaW5nLmlzU2V0UU5hbWUoKSkKLSAgICAgIGlmIChiaW5kaW5nLmdldFFOYW1lKCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgbmFtZXMuYWRkKGJpbmRpbmcuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBuYW1lczsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgTGlzdCBnZXRVc2VkUG9ydE5hbWVzKFNlcnZpY2Ugc2VydmljZSkgewotICAgIC8vIEZpcnN0IGJ1aWxkIGEgbGlzdCBvZiBuYW1lcyBhbHJlYWR5IHVzZWQKLSAgICBBcnJheUxpc3QgbmFtZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gc2VydmljZS5nZXRFUG9ydHMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgUG9ydCBwb3J0ID0gKFBvcnQpIGkubmV4dCgpOwotCi0gICAgICBpZiAocG9ydC5nZXROYW1lKCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgbmFtZXMuYWRkKHBvcnQuZ2V0TmFtZSgpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG5hbWVzOwotICB9Ci0gIAotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgY3JlYXRlT3BlcmF0aW9uTmFtZShPYmplY3Qgb2JqZWN0LCBTdHJpbmcgc3VmZml4KQotICB7ICAgICAgICAgICAgICAgCi0gICAgU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0gICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEVPYmplY3QpCi0gICAgewotICAgICAgRU9iamVjdCBwYXJlbnQgPSAoKEVPYmplY3Qpb2JqZWN0KS5lQ29udGFpbmVyKCk7Ci0gICAgICBpZiAocGFyZW50IGluc3RhbmNlb2YgT3BlcmF0aW9uKQotICAgICAgewotICAgICAgICByZXN1bHQgPSAoKE9wZXJhdGlvbilwYXJlbnQpLmdldE5hbWUoKTsKLSAgICAgIH0KLSAgICB9IAotICAgIGlmIChyZXN1bHQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgKz0gc3VmZml4OwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldE1lc3NhZ2VOYW1lKE1lc3NhZ2VSZWZlcmVuY2UgbWVzc2FnZVJlZikgewkgICAgCi0JU3RyaW5nIG1lc3NhZ2VOYW1lID0gIk5ld01lc3NhZ2UiOyAvLyROT04tTkxTLTEkCi0JTGlzdCBtZXNzYWdlTmFtZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JT3BlcmF0aW9uIG9wZXJhdGlvbiA9IChPcGVyYXRpb24pIG1lc3NhZ2VSZWYuZ2V0Q29udGFpbmVyKCk7Ci0JSXRlcmF0b3IgbWVzc2FnZUl0ID0gb3BlcmF0aW9uLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKS5nZXRFTWVzc2FnZXMoKS5pdGVyYXRvcigpOwotCXdoaWxlIChtZXNzYWdlSXQuaGFzTmV4dCgpKSB7Ci0JCW1lc3NhZ2VOYW1lcy5hZGQoKChNZXNzYWdlKSBtZXNzYWdlSXQubmV4dCgpKS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpKTsKLQl9Ci0JCi0vLwlTdHJpbmcgcmVxdWVzdFJlc3BvbnNlU3RyaW5nID0gZ2V0UmVxdWVzdE9yUmVzcG9uc2UobWVzc2FnZVJlZikgKyAiTXNnIjsgLy8kTk9OLU5MUy0xJAotCVN0cmluZyByZXF1ZXN0UmVzcG9uc2VTdHJpbmcgPSBnZXRSZXF1ZXN0T3JSZXNwb25zZShtZXNzYWdlUmVmKTsgLy8kTk9OLU5MUy0xJAotCW1lc3NhZ2VOYW1lID0gZ2V0VW5pcXVlTmFtZUhlbHBlcihvcGVyYXRpb24uZ2V0TmFtZSgpICsgcmVxdWVzdFJlc3BvbnNlU3RyaW5nLCBtZXNzYWdlTmFtZXMpOwotCQotCXJldHVybiBtZXNzYWdlTmFtZTsKLX0KLQotcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UGFydE5hbWUoTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmKSB7Ci0JU3RyaW5nIHBhcnROYW1lID0gIk5ld1BhcnQiOyAvLyROT04tTkxTLTEkCi0JTWVzc2FnZSBtZXNzYWdlID0gbWVzc2FnZVJlZi5nZXRFTWVzc2FnZSgpOwotCQotCU9wZXJhdGlvbiBvcGVyYXRpb24gPSAoT3BlcmF0aW9uKSBtZXNzYWdlUmVmLmdldENvbnRhaW5lcigpOwotCVN0cmluZyBvcGVyYXRpb25OYW1lID0gb3BlcmF0aW9uLmdldE5hbWUoKTsKLQlTdHJpbmcgYXBwZW5kU3RyaW5nID0gIiI7ICAgIAkgICAvLyROT04tTkxTLTEkCi0JaWYgKG1lc3NhZ2VSZWYgaW5zdGFuY2VvZiBJbnB1dCkgewotLy8JCWFwcGVuZFN0cmluZyA9ICJQYXJhbWV0ZXJzIjsgLy8kTk9OLU5MUy0xJAotCQlhcHBlbmRTdHJpbmcgPSAiUmVxdWVzdCI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JZWxzZSBpZiAobWVzc2FnZVJlZiBpbnN0YW5jZW9mIE91dHB1dCkgewotLy8JCWFwcGVuZFN0cmluZyA9ICJSZXN1bHQiOyAvLyROT04tTkxTLTEkCi0JCWFwcGVuZFN0cmluZyA9ICJSZXNwb25zZSI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JZWxzZSBpZiAobWVzc2FnZVJlZiBpbnN0YW5jZW9mIEZhdWx0KSB7Ci0vLwkJYXBwZW5kU3RyaW5nID0gIkZhdWx0IjsgLy8kTk9OLU5MUy0xJAotCQlhcHBlbmRTdHJpbmcgPSAiX0ZhdWx0IjsgLy8kTk9OLU5MUy0xJAotCX0KLQlwYXJ0TmFtZSA9IG9wZXJhdGlvbk5hbWUgKyBhcHBlbmRTdHJpbmc7Ci0JCi0JTGlzdCB1c2VkUGFydE5hbWVzID0gbmV3IEFycmF5TGlzdCgpOwotCWlmIChtZXNzYWdlICE9IG51bGwpIHsKLQkJcGFydE5hbWUgPSBtZXNzYWdlLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0JCUl0ZXJhdG9yIHBhcnRJdCA9IG1lc3NhZ2UuZ2V0RVBhcnRzKCkuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKHBhcnRJdC5oYXNOZXh0KCkpIHsKLQkJCXVzZWRQYXJ0TmFtZXMuYWRkKCgoUGFydCkgcGFydEl0Lm5leHQoKSkuZ2V0TmFtZSgpKTsKLQkJfQotCX0KLQkKLQlwYXJ0TmFtZSA9IGdldFVuaXF1ZU5hbWVIZWxwZXIocGFydE5hbWUsIHVzZWRQYXJ0TmFtZXMpOwotCQotCXJldHVybiBwYXJ0TmFtZTsKLX0KLQotcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0T3BlcmF0aW9uTmFtZShQb3J0VHlwZSBwb3J0VHlwZSkgewotCVN0cmluZyBvcGVyYXRpb25OYW1lID0gIk5ld09wZXJhdGlvbiI7IC8vJE5PTi1OTFMtMSQKLQlJdGVyYXRvciBvcGVyYXRpb25JdCA9IHBvcnRUeXBlLmdldEVPcGVyYXRpb25zKCkuaXRlcmF0b3IoKTsKLQlMaXN0IHVzZWROYW1lcyA9IG5ldyBBcnJheUxpc3QoKTsKLQl3aGlsZSAob3BlcmF0aW9uSXQuaGFzTmV4dCgpKSB7Ci0JCXVzZWROYW1lcy5hZGQoKChPcGVyYXRpb24pIG9wZXJhdGlvbkl0Lm5leHQoKSkuZ2V0TmFtZSgpKTsKLQl9Ci0JCi0Jb3BlcmF0aW9uTmFtZSA9IGdldFVuaXF1ZU5hbWVIZWxwZXIoIk5ld09wZXJhdGlvbiIsIHVzZWROYW1lcyk7IC8vJE5PTi1OTFMtMSQKLQkKLQlyZXR1cm4gb3BlcmF0aW9uTmFtZTsKLX0KLQotcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UmVxdWVzdE9yUmVzcG9uc2UoTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmKSB7Ci0JaWYgKG1lc3NhZ2VSZWYgaW5zdGFuY2VvZiBJbnB1dCkKLQl7Ci0JCXJldHVybiAiUmVxdWVzdCI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JZWxzZSBpZiAobWVzc2FnZVJlZiBpbnN0YW5jZW9mIE91dHB1dCkKLQl7Ci0JCXJldHVybiAiUmVzcG9uc2UiOyAvLyROT04tTkxTLTEkCi0JfQotCWVsc2UgaWYgKG1lc3NhZ2VSZWYgaW5zdGFuY2VvZiBGYXVsdCkKLQl7Ci0JCXJldHVybiAiX0ZhdWx0IjsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlyZXR1cm4gIiI7IC8vJE5PTi1OTFMtMSQKLX0KLQotcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RmF1bHROYW1lKE9wZXJhdGlvbiBvcGVyYXRpb24pIHsKLQlTdHJpbmcgZmF1bHROYW1lID0gImZhdWx0IjsgLy8kTk9OLU5MUy0xJAotCUxpc3QgbmFtZUxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JSXRlcmF0b3IgZmF1bHRJdCA9IG9wZXJhdGlvbi5nZXRFRmF1bHRzKCkuaXRlcmF0b3IoKTsKLQl3aGlsZSAoZmF1bHRJdC5oYXNOZXh0KCkpIHsKLQkJbmFtZUxpc3QuYWRkKCgoRmF1bHQpIGZhdWx0SXQubmV4dCgpKS5nZXROYW1lKCkpOwotCX0KLQkKLQlmYXVsdE5hbWUgPSBnZXRVbmlxdWVOYW1lSGVscGVyKGZhdWx0TmFtZSwgbmFtZUxpc3QpOwotCQotCXJldHVybiBmYXVsdE5hbWU7Ci19Ci0KLXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFhTREVsZW1lbnROYW1lKFN0cmluZyBiYXNlTmFtZSwgT2JqZWN0IHBhcmVudCkgewotCVN0cmluZyBlbGVtZW50TmFtZSA9ICIiOyAvLyROT04tTkxTLTEkCi0JCi0JaWYgKHBhcmVudCBpbnN0YW5jZW9mIFhTRFNjaGVtYSkgewotCQllbGVtZW50TmFtZSA9IGdldFVuaXF1ZU5hbWVIZWxwZXIoYmFzZU5hbWUsIGdldFVzZWRFbGVtZW50TmFtZXMoKFhTRFNjaGVtYSkgcGFyZW50KSk7Ci0JfQotCWVsc2UgaWYgKHBhcmVudCBpbnN0YW5jZW9mIFhTRE1vZGVsR3JvdXApIHsKLQkJTGlzdCBleGlzdGluZ05hbWVzID0gbmV3IEFycmF5TGlzdCgpOwotCQlYU0RNb2RlbEdyb3VwIG1vZGVsR3JvdXAgPSAoWFNETW9kZWxHcm91cCkgcGFyZW50OwotCQlJdGVyYXRvciBtb2RlbEdyb3VwSXQgPSBtb2RlbEdyb3VwLmdldENvbnRlbnRzKCkuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKG1vZGVsR3JvdXBJdC5oYXNOZXh0KCkpIHsKLQkJCU9iamVjdCBpdGVtID0gbW9kZWxHcm91cEl0Lm5leHQoKTsKLQkJCWlmIChpdGVtIGluc3RhbmNlb2YgWFNEUGFydGljbGUpIHsKLQkJCQlYU0RQYXJ0aWNsZSBleGlzdGluZ1BhcnRpY2xlID0gKFhTRFBhcnRpY2xlKSBpdGVtOwotCQkJCWlmIChleGlzdGluZ1BhcnRpY2xlLmdldENvbnRlbnQoKSBpbnN0YW5jZW9mIFhTREVsZW1lbnREZWNsYXJhdGlvbikgewotCQkJCQlleGlzdGluZ05hbWVzLmFkZCgoKFhTREVsZW1lbnREZWNsYXJhdGlvbikgZXhpc3RpbmdQYXJ0aWNsZS5nZXRDb250ZW50KCkpLmdldE5hbWUoKSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCQotCQllbGVtZW50TmFtZSA9IGdldFVuaXF1ZU5hbWVIZWxwZXIoYmFzZU5hbWUsIGV4aXN0aW5nTmFtZXMpOwkJCQotCX0KLQkKLQlyZXR1cm4gZWxlbWVudE5hbWU7Ci19Ci0KLXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFhTRENvbXBsZXhUeXBlTmFtZShTdHJpbmcgYmFzZU5hbWUsIFhTRFNjaGVtYSBzY2hlbWEpIHsKLQlTdHJpbmcgdHlwZU5hbWUgPSAiIjsgLy8kTk9OLU5MUy0xJAotCUxpc3QgZXhpc3RpbmdOYW1lcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkKLQlJdGVyYXRvciBpdCA9IHNjaGVtYS5nZXRUeXBlRGVmaW5pdGlvbnMoKS5pdGVyYXRvcigpOwotCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLQkJT2JqZWN0IGl0ZW0gPSBpdC5uZXh0KCk7Ci0JCWlmIChpdGVtIGluc3RhbmNlb2YgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKSB7Ci0JCQlleGlzdGluZ05hbWVzLmFkZCgoKFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbikgaXRlbSkuZ2V0TmFtZSgpKTsKLQkJfQotCX0KLQkKLQl0eXBlTmFtZSA9IGdldFVuaXF1ZU5hbWVIZWxwZXIoYmFzZU5hbWUsIGV4aXN0aW5nTmFtZXMpOwotCXJldHVybiB0eXBlTmFtZTsKLX0KLQotcHJpdmF0ZSBzdGF0aWMgTGlzdCBnZXRVc2VkRWxlbWVudE5hbWVzKFhTRFNjaGVtYSB4c2RTY2hlbWEpIHsKLQlMaXN0IHVzZWROYW1lcyA9IG5ldyBBcnJheUxpc3QoKTsKLQlJdGVyYXRvciBzY2hlbWFJdCA9IHhzZFNjaGVtYS5nZXRDb250ZW50cygpLml0ZXJhdG9yKCk7Ci0Jd2hpbGUgKHNjaGVtYUl0Lmhhc05leHQoKSkgewotCQlPYmplY3QgaXRlbSA9IHNjaGVtYUl0Lm5leHQoKTsKLQkJaWYgKGl0ZW0gaW5zdGFuY2VvZiBYU0RFbGVtZW50RGVjbGFyYXRpb24pIHsKLQkJCXVzZWROYW1lcy5hZGQoKChYU0RFbGVtZW50RGVjbGFyYXRpb24pIGl0ZW0pLmdldE5hbWUoKSk7Ci0JCX0KLQl9Ci0JCi0JcmV0dXJuIHVzZWROYW1lczsKLX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9Ob2RlQXNzb2NpYXRpb25NYW5hZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvTm9kZUFzc29jaWF0aW9uTWFuYWdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMWMwNTEzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9Ob2RlQXNzb2NpYXRpb25NYW5hZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwueHNkLlhTRE5vZGVBc3NvY2lhdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmV4dGVuc2lvbnMuSU5vZGVBc3NvY2lhdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmV4dGVuc2lvbnMuV1NETE5vZGVBc3NvY2lhdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWRhcHRlcnMuQ2F0ZWdvcnlBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb25jcmV0ZUNvbXBvbmVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLXB1YmxpYyBjbGFzcyBOb2RlQXNzb2NpYXRpb25NYW5hZ2VyCi17ICAgICAgICAgICAgICAgICAgIAotICBwcm90ZWN0ZWQgSU5vZGVBc3NvY2lhdGlvblByb3ZpZGVyIHdzZGxQcm92aWRlcjsKLSAgcHJvdGVjdGVkIElOb2RlQXNzb2NpYXRpb25Qcm92aWRlciB4c2RQcm92aWRlcjsKLQotICBwdWJsaWMgTm9kZUFzc29jaWF0aW9uTWFuYWdlcigpCi0gIHsgICAgICAgICAgICAgCi0JICB3c2RsUHJvdmlkZXIgPSBuZXcgV1NETE5vZGVBc3NvY2lhdGlvblByb3ZpZGVyKCk7Ci0JICB4c2RQcm92aWRlciA9IG5ldyBYU0ROb2RlQXNzb2NpYXRpb25Qcm92aWRlcigpOwotICB9ICAgICAgICAKLQotICBwcm90ZWN0ZWQgSU5vZGVBc3NvY2lhdGlvblByb3ZpZGVyIGdldEFwcGljYWJsZVByb3ZpZGVyKE9iamVjdCBvYmplY3QpCi0gIHsKLQkgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCB8fCAKLQkgICAgICAgICAgICBvYmplY3QgaW5zdGFuY2VvZiBYU0RDb25jcmV0ZUNvbXBvbmVudCB8fAotCSAgICAgICAgICAgIG9iamVjdCBpbnN0YW5jZW9mIENhdGVnb3J5QWRhcHRlcikgey8vIHx8Ci0vLwkgICAgICAgICAgICBvYmplY3QgaW5zdGFuY2VvZiBDYXRlZ29yeSkgewotCQkgIHJldHVybiB4c2RQcm92aWRlcjsKLQkgIH0KLQkgIAotCSAgcmV0dXJuIHdzZGxQcm92aWRlcjsKLSAgfQotICAgICAgICAKLQotICBwdWJsaWMgT2JqZWN0IGdldE1vZGVsT2JqZWN0Rm9yTm9kZShPYmplY3Qgcm9vdE9iamVjdCwgRWxlbWVudCB0YXJnZXROb2RlKQotICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICBpZiAodGFyZ2V0Tm9kZSAhPSBudWxsICYmIHRhcmdldE5vZGUuZ2V0UGFyZW50Tm9kZSgpID09IG51bGwpCi0gICAgewotICAgICAgLy8gVGhlIGVsZW1lbnQgd2FzIGFscmVhZHkgcmVtb3ZlZCBmcm9tIHRoZSBET00sIGNvbW1vbiBzY2VuYXJpbyBkdXJpbmcgdW5kby4KLSAgICAgIC8vIFRoZSBwYXJlbnQgZWxlbWVudCdzIHJlY29uY2lsaWF0aW9uIHdpbGwgdGFrZSBjYXJlIG9mIHJlY29uY2lsaW5nIGl0LgotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICAgIAotICAgIGludCBjdXJyZW50SW5kZXggPSAwOwotCi0gICAgRWxlbWVudFtdIGVsZW1lbnRDaGFpbiA9IGdldFBhcmVudEVsZW1lbnRDaGFpbigoRWxlbWVudCl0YXJnZXROb2RlKTsKLQotICAgIElOb2RlQXNzb2NpYXRpb25Qcm92aWRlciBwID0gZ2V0QXBwaWNhYmxlUHJvdmlkZXIocm9vdE9iamVjdCk7Ci0gICAgaWYgKHAgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBOb2RlIHJvb3RPYmplY3ROb2RlID0gcC5nZXROb2RlKHJvb3RPYmplY3QpOwotCi0gICAgICB3aGlsZSAoY3VycmVudEluZGV4IDwgZWxlbWVudENoYWluLmxlbmd0aCkKLSAgICAgIHsKLSAgICAgICAgRWxlbWVudCBlID0gZWxlbWVudENoYWluW2N1cnJlbnRJbmRleF07Ci0gICAgICAgIGlmIChlID09IHJvb3RPYmplY3ROb2RlKQotICAgICAgICB7ICAgICAgICAgICAgICAgIAotICAgICAgICAgIGN1cnJlbnRJbmRleCsrOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGN1cnJlbnRJbmRleCsrOwotICAgICAgfQotICAgIH0KLSAgICAgICAgICAgICAKLSAgICBPYmplY3QgY3VycmVudE9iamVjdCA9IHJvb3RPYmplY3Q7ICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgaW50IGVuZFtdID0gbmV3IGludFsxXTsKLQotICAgIHdoaWxlIChjdXJyZW50SW5kZXggPCBlbGVtZW50Q2hhaW4ubGVuZ3RoKQotICAgIHsgICAgICAgICAgICAgICAKLSAgICAgIHAgPSBnZXRBcHBpY2FibGVQcm92aWRlcihjdXJyZW50T2JqZWN0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgIGlmIChwICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGVuZFswXSA9IGVsZW1lbnRDaGFpbi5sZW5ndGg7Ci0gICAgICAgIGN1cnJlbnRPYmplY3QgPSBwLmdldE1vZGVsT2JqZWN0KGN1cnJlbnRPYmplY3QsIGVsZW1lbnRDaGFpbiwgY3VycmVudEluZGV4LCBlbmQpOwotICAgICAgICAKLSAgICAgICAgaWYgKGN1cnJlbnRPYmplY3QgPT0gbnVsbCkKLSAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAvLyBmYWlsdXJlCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgY3VycmVudEluZGV4ID0gTWF0aC5tYXgoZW5kWzBdLCBjdXJyZW50SW5kZXggKyAxKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgeyAgICAgICAgICAKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9IAotICAgIH0gICAgIAotCi0gICAgcmV0dXJuIChjdXJyZW50SW5kZXggPT0gZWxlbWVudENoYWluLmxlbmd0aCkgPyBjdXJyZW50T2JqZWN0IDogbnVsbDsKLSAgfSAgCi0gICAgICAgICAgIAotCi0gIHB1YmxpYyBOb2RlIGdldE5vZGUoT2JqZWN0IG1vZGVsT2JqZWN0KQotICB7ICAgICAgICAgIAotICAgIE5vZGUgcmVzdWx0ID0gbnVsbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIGlmIChtb2RlbE9iamVjdCBpbnN0YW5jZW9mIE5vZGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gKE5vZGUpbW9kZWxPYmplY3Q7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBJTm9kZUFzc29jaWF0aW9uUHJvdmlkZXIgcCA9IGdldEFwcGljYWJsZVByb3ZpZGVyKG1vZGVsT2JqZWN0KTsgICAgICAgICAgICAgICAKLSAgICAgIGlmIChwICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IHAuZ2V0Tm9kZShtb2RlbE9iamVjdCk7Ci0gICAgICB9Ci0gICAgfSAgICAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9ICAgICAKLQotICBwcm90ZWN0ZWQgRWxlbWVudFtdIGdldFBhcmVudEVsZW1lbnRDaGFpbihFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgd2hpbGUgKGVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBsaXN0LmFkZCgwLCBlbGVtZW50KTsKLSAgICAgIE5vZGUgbm9kZSA9IGVsZW1lbnQuZ2V0UGFyZW50Tm9kZSgpOwotICAgICAgZWxlbWVudCA9IChub2RlICE9IG51bGwgJiYgbm9kZS5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFKSA/IChFbGVtZW50KW5vZGUgOiBudWxsOyAgICAKLSAgICB9ICAgICAgICAgICAgICAgIAotCi0gICAgaW50IGxpc3RTaXplID0gbGlzdC5zaXplKCk7Ci0gICAgRWxlbWVudFtdIHJlc3VsdCA9IG5ldyBFbGVtZW50W2xpc3RTaXplXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpc3RTaXplOyBpKyspCi0gICAgewotICAgICAgcmVzdWx0W2ldID0gKEVsZW1lbnQpbGlzdC5nZXQoaSk7Ci0gICAgfSAgICAgICAgICAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL09wZW5PblNlbGVjdGlvbkhlbHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL09wZW5PblNlbGVjdGlvbkhlbHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjY1MzFmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9PcGVuT25TZWxlY3Rpb25IZWxwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbDsKLQotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRmlsZUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkltcG9ydEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwudXRpbC5XU0RMU3dpdGNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuZWRpdG9yLlhTREh5cGVybGlua1RhcmdldExvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbmNyZXRlQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RQYWNrYWdlOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0KLXB1YmxpYyBjbGFzcyBPcGVuT25TZWxlY3Rpb25IZWxwZXIgZXh0ZW5kcyBXU0RMU3dpdGNoCi17Ci0gIERlZmluaXRpb24gZGVmaW5pdGlvbjsKLSAgQXR0ciBhdHRyID0gbnVsbDsKLSAgRWxlbWVudCBlbGVtZW50ID0gbnVsbDsKLQotICBwdWJsaWMgT3Blbk9uU2VsZWN0aW9uSGVscGVyKERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgIHRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBvcGVuRWRpdG9yKEVPYmplY3QgZU9iamVjdCkKLSAgewotICAgIFN0cmluZ1tdIGFycmF5ID0gY29tcHV0ZVNwZWNpZmljYXRpb24oZU9iamVjdCk7Ci0gICAgaWYgKGFycmF5ICE9IG51bGwpCi0gICAgewotICAgICAgb3BlbkVkaXRvcihhcnJheVswXSwgYXJyYXlbMV0pOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIG9wZW5FZGl0b3IoTm9kZSBub2RlKQotICB7Ci0gICAgU3RyaW5nW10gYXJyYXkgPSBjb21wdXRlU3BlY2lmaWNhdGlvbihub2RlKTsKLSAgICBpZiAoYXJyYXkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBvcGVuRWRpdG9yKGFycmF5WzBdLCBhcnJheVsxXSk7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgb3BlbkVkaXRvcihTdHJpbmcgcmVzb3VyY2UsIFN0cmluZyBzcGVjKQotICB7Ci0gICAgU3RyaW5nIHBhdHRlcm4gPSAicGxhdGZvcm06L3Jlc291cmNlIjsgLy8kTk9OLU5MUy0xJAotICAgIGlmIChyZXNvdXJjZSAhPSBudWxsICYmIHJlc291cmNlLnN0YXJ0c1dpdGgocGF0dGVybikpCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIFBhdGggcGF0aCA9IG5ldyBQYXRoKHJlc291cmNlLnN1YnN0cmluZyhwYXR0ZXJuLmxlbmd0aCgpKSk7Ci0gICAgICAgIElGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUocGF0aCk7Ci0KLSAgICAgICAgSVdvcmtiZW5jaFBhZ2Ugd29ya2JlbmNoUGFnZSA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCk7Ci0gICAgICAgIElFZGl0b3JQYXJ0IGVkaXRvclBhcnQgPSB3b3JrYmVuY2hQYWdlLmdldEFjdGl2ZUVkaXRvcigpOwotICAgICAgICAKLSAgICAgICAgaWYgKGVkaXRvclBhcnQuZ2V0RWRpdG9ySW5wdXQoKSBpbnN0YW5jZW9mIElGaWxlRWRpdG9ySW5wdXQgJiYKLSAgICAgICAgICAgKChJRmlsZUVkaXRvcklucHV0KWVkaXRvclBhcnQuZ2V0RWRpdG9ySW5wdXQoKSkuZ2V0RmlsZSgpLmVxdWFscyhmaWxlKSkKLSAgICAgICAgeyAgCi0gICAgICAgIAl3b3JrYmVuY2hQYWdlLmdldE5hdmlnYXRpb25IaXN0b3J5KCkubWFya0xvY2F0aW9uKGVkaXRvclBhcnQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChyZXNvdXJjZS5lbmRzV2l0aCgieHNkIikpIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgZWRpdG9yUGFydCA9IHdvcmtiZW5jaFBhZ2Uub3BlbkVkaXRvcihuZXcgRmlsZUVkaXRvcklucHV0KGZpbGUpLCBXU0RMRWRpdG9yUGx1Z2luLlhTRF9FRElUT1JfSUQpOyAKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gU2luY2Ugd2UgYXJlIGFscmVhZHkgaW4gdGhlIHdzZGxlZGl0b3IKLQkJCSAgICAgICAgZWRpdG9yUGFydCA9ICB3b3JrYmVuY2hQYWdlLm9wZW5FZGl0b3IobmV3IEZpbGVFZGl0b3JJbnB1dChmaWxlKSwgZWRpdG9yUGFydC5nZXRFZGl0b3JTaXRlKCkuZ2V0SWQoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotCQkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gaW5pdEV4KQotIAkJCQkJewotIAkJCQkJfQotICAgICAgICB9Ci0KLSAgICAgICAgQ2xhc3MgdGhlQ2xhc3MgPSBlZGl0b3JQYXJ0LmdldENsYXNzKCk7Ci0gICAgICAgIENsYXNzW10gbWV0aG9kQXJncyA9IHsgU3RyaW5nLmNsYXNzIH07Ci0gICAgICAgIE1ldGhvZCBtZXRob2QgPSB0aGVDbGFzcy5nZXRNZXRob2QoIm9wZW5PblNlbGVjdGlvbiIsIG1ldGhvZEFyZ3MpOyAvLyROT04tTkxTLTEkCi0gICAgICAgIE9iamVjdCBhcmdzW10gPSB7IHNwZWMgfTsKLSAgICAgICAgbWV0aG9kLmludm9rZShlZGl0b3JQYXJ0LCBhcmdzKTsKLSAgICAgICAgd29ya2JlbmNoUGFnZS5nZXROYXZpZ2F0aW9uSGlzdG9yeSgpLm1hcmtMb2NhdGlvbihlZGl0b3JQYXJ0KTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nW10gY29tcHV0ZVNwZWNpZmljYXRpb24oRU9iamVjdCBlT2JqZWN0KQotICB7Ci0gICAgU3RyaW5nW10gcmVzdWx0ID0gbnVsbDsKLSAgICBPYmplY3QgcmVmZXJlbmNlZE9iamVjdCA9IGRvU3dpdGNoKGVPYmplY3QpOwotICAgIGlmIChyZWZlcmVuY2VkT2JqZWN0IGluc3RhbmNlb2YgRU9iamVjdCkKLSAgICB7Ci0gICAgICBFT2JqZWN0IHJlZmVyZW5jZWRFT2JqZWN0ID0gKEVPYmplY3QpcmVmZXJlbmNlZE9iamVjdDsKLSAgICAgIGlmIChyZWZlcmVuY2VkRU9iamVjdCAhPSBlT2JqZWN0IHx8IAotICAgICAgICAgcmVmZXJlbmNlZEVPYmplY3QuZVJlc291cmNlKCkgIT0gZGVmaW5pdGlvbi5lUmVzb3VyY2UoKSkKLSAgICAgIHsgICAgICAgIAotICAgICAgCi0gICAgICBSZXNvdXJjZSByZXNvdXJjZSA9IHJlZmVyZW5jZWRFT2JqZWN0LmVSZXNvdXJjZSgpOwotICAgICAgaWYgKHJlc291cmNlICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IG5ldyBTdHJpbmdbMl07Ci0gICAgICAgIHJlc3VsdFswXSA9IHJlc291cmNlLmdldFVSSSgpLnRvU3RyaW5nKCk7Ci0gICAgICAgIHJlc3VsdFsxXSA9IHJlc291cmNlLmdldFVSSUZyYWdtZW50KHJlZmVyZW5jZWRFT2JqZWN0KTsKLSAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmdbXSBjb21wdXRlU3BlY2lmaWNhdGlvbihOb2RlIG5vZGUpCi0gIHsKLSAgICBTdHJpbmdbXSByZXN1bHQgPSBudWxsOwotICAgIHN3aXRjaCAobm9kZS5nZXROb2RlVHlwZSgpKQotICAgIHsKLSAgICAgIGNhc2UgTm9kZS5FTEVNRU5UX05PREUgOgotICAgICAgICB7Ci0gICAgICAgICAgZWxlbWVudCA9IChFbGVtZW50KW5vZGU7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIGNhc2UgTm9kZS5BVFRSSUJVVEVfTk9ERSA6Ci0gICAgICAgIHsKLSAgICAgICAgICBhdHRyID0gKEF0dHIpbm9kZTsKLSAgICAgICAgICBlbGVtZW50ID0gYXR0ci5nZXRPd25lckVsZW1lbnQoKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgY2FzZSBOb2RlLlRFWFRfTk9ERSA6Ci0gICAgICAgIHsKLSAgICAgICAgICBOb2RlIHBhcmVudCA9IG5vZGUuZ2V0UGFyZW50Tm9kZSgpOwotICAgICAgICAgIGVsZW1lbnQgPSAocGFyZW50IGluc3RhbmNlb2YgRWxlbWVudCkgPyAoRWxlbWVudClwYXJlbnQgOiBudWxsOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChlbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgT2JqZWN0IG9iamVjdCA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZmluZE1vZGVsT2JqZWN0Rm9yRWxlbWVudChkZWZpbml0aW9uLCBlbGVtZW50KTsKLSAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBFT2JqZWN0KQotICAgICAgewotICAgICAgICByZXN1bHQgPSBjb21wdXRlU3BlY2lmaWNhdGlvbigoRU9iamVjdClvYmplY3QpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIE9iamVjdCBjYXNlQmluZGluZyhCaW5kaW5nIGJpbmRpbmcpCi0gIHsKLSAgICBPYmplY3QgcmVzdWx0ID0gYmluZGluZzsKLSAgICBpZiAoaXNNYXRjaGluZ0F0dHJpYnV0ZShXU0RMQ29uc3RhbnRzLlRZUEVfQVRUUklCVVRFKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBiaW5kaW5nLmdldEVQb3J0VHlwZSgpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIE9iamVjdCBjYXNlRGVmaW5pdGlvbihEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICByZXR1cm4gZGVmaW5pdGlvbjsKLSAgfQotCi0gIHB1YmxpYyBPYmplY3QgY2FzZVBhcnQoUGFydCBwYXJ0KQotICB7Ci0gICAgT2JqZWN0IHJlc3VsdCA9IHBhcnQ7Ci0gICAgaWYgKGF0dHIgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoaXNNYXRjaGluZ0F0dHJpYnV0ZShXU0RMQ29uc3RhbnRzLlRZUEVfQVRUUklCVVRFKSkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gcGFydC5nZXRUeXBlRGVmaW5pdGlvbigpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoaXNNYXRjaGluZ0F0dHJpYnV0ZShXU0RMQ29uc3RhbnRzLkVMRU1FTlRfQVRUUklCVVRFKSkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gcGFydC5nZXRFbGVtZW50RGVjbGFyYXRpb24oKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAocGFydC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkgPT0gZGVmaW5pdGlvbikKLSAgICB7Ci0gICAgICByZXN1bHQgPSBwYXJ0LmdldFR5cGVEZWZpbml0aW9uKCkgIT0gbnVsbCA/IChPYmplY3QpcGFydC5nZXRUeXBlRGVmaW5pdGlvbigpIDogKE9iamVjdClwYXJ0LmdldEVsZW1lbnREZWNsYXJhdGlvbigpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIE9iamVjdCBjYXNlUG9ydChQb3J0IHBvcnQpCi0gIHsKLSAgICBPYmplY3QgcmVzdWx0ID0gcG9ydDsKLSAgICBpZiAoaXNNYXRjaGluZ0F0dHJpYnV0ZShXU0RMQ29uc3RhbnRzLkJJTkRJTkdfQVRUUklCVVRFKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBwb3J0LmdldEVCaW5kaW5nKCk7Ci0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBPYmplY3QgY2FzZUZhdWx0KEZhdWx0IGZhdWx0KQotICB7Ci0gICAgT2JqZWN0IHJlc3VsdCA9IGZhdWx0OwotICAgIGlmIChpc01hdGNoaW5nQXR0cmlidXRlKFdTRExDb25zdGFudHMuTUVTU0FHRV9BVFRSSUJVVEUpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IGZhdWx0LmdldE1lc3NhZ2UoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBPYmplY3QgY2FzZUlucHV0KElucHV0IGlucHV0KQotICB7Ci0gICAgT2JqZWN0IHJlc3VsdCA9IGlucHV0OwotICAgIGlmIChpc01hdGNoaW5nQXR0cmlidXRlKFdTRExDb25zdGFudHMuTUVTU0FHRV9BVFRSSUJVVEUpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IGlucHV0LmdldE1lc3NhZ2UoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBPYmplY3QgY2FzZU91dHB1dChPdXRwdXQgb3V0cHV0KQotICB7Ci0gICAgT2JqZWN0IHJlc3VsdCA9IG91dHB1dDsKLQotICAgIGlmIChpc01hdGNoaW5nQXR0cmlidXRlKFdTRExDb25zdGFudHMuTUVTU0FHRV9BVFRSSUJVVEUpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IG91dHB1dC5nZXRNZXNzYWdlKCk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgT2JqZWN0IGNhc2VJbXBvcnQoSW1wb3J0IHRoZUltcG9ydCkKLSAgewotCQlPYmplY3QgcmVzdWx0ID0gbnVsbDsKLQkJCi0JCS8vIEZvciBub3csIGxvb2sgYXQgdGhlIGZpbGUgZXh0ZW5zaW9uLiAgV2hlbiBidWd6aWxsYSAxMTgyOTMgaXMgZml4ZWQsIGxvb2sgYXQKLQkJLy8gdGhlIEltcG9ydCdzIGVEZWZpbml0aW9uIGFuZCBlU2NoZW1hIGluc3RlYWQuCi0JCVBhdGggaW1wb3J0UGF0aCA9IG5ldyBQYXRoKHRoZUltcG9ydC5nZXRMb2NhdGlvblVSSSgpKTsKLQkJU3RyaW5nIGV4dGVuc2lvbiA9IGltcG9ydFBhdGguZ2V0RmlsZUV4dGVuc2lvbigpOwotCQlpZiAoZXh0ZW5zaW9uLmVxdWFsc0lnbm9yZUNhc2UoInhzZCIpKSB7IC8vJE5PTi1OTFMtMSQKLQkJCWlmICh0aGVJbXBvcnQuZ2V0RVNjaGVtYSgpID09IG51bGwpIHsKLQkJCQkoKEltcG9ydEltcGwpdGhlSW1wb3J0KS5pbXBvcnREZWZpbml0aW9uT3JTY2hlbWEoKTsKLQkJCX0KLQkJCQotCQkJcmVzdWx0ID0gdGhlSW1wb3J0LmdldEVTY2hlbWEoKTsKLQkJfQotCQllbHNlIGlmIChleHRlbnNpb24uZXF1YWxzSWdub3JlQ2FzZSgid3NkbCIpKSB7IC8vJE5PTi1OTFMtMSQKLQkJCWlmICh0aGVJbXBvcnQuZ2V0RURlZmluaXRpb24oKSA9PSBudWxsKSB7Ci0JCQkJKChJbXBvcnRJbXBsKXRoZUltcG9ydCkuaW1wb3J0RGVmaW5pdGlvbk9yU2NoZW1hKCk7Ci0JCQl9Ci0JCQkKLQkJCXJlc3VsdCA9IHRoZUltcG9ydC5nZXRFRGVmaW5pdGlvbigpOwotCQl9Ci0JCQotCQkKLS8vCQlpZiAodGhlSW1wb3J0LmdldEVTY2hlbWEoKSAhPSBudWxsKSB7Ci0vLwkJCXJlc3VsdCA9IHRoZUltcG9ydC5nZXRFU2NoZW1hKCk7Ci0vLwkJfQotLy8JCWVsc2UgaWYgKHRoZUltcG9ydC5nZXRFRGVmaW5pdGlvbigpICE9IG51bGwpIHsKLS8vCQkJcmVzdWx0ID0gdGhlSW1wb3J0LmdldEVEZWZpbml0aW9uKCk7Ci0vLwkJfQotLy8JCWVsc2UgewotLy8JICAgICAgICAvLyBOZWVkIHRvIHJlc29sdmUgaW1wb3J0cyBiZWNhdXNlIHRoZSBtb2RlbCBkb2Vzbid0IGF1dG9tYXRpY2FsbHkKLS8vCSAgICAgICAgLy8gZG8gaXQgZm9yIHVzCi0vLwkgICAgICAgICgoSW1wb3J0SW1wbCl0aGVJbXBvcnQpLmltcG9ydERlZmluaXRpb25PclNjaGVtYSgpOwotLy8JICAgICAgICByZXN1bHQgPSB0aGVJbXBvcnQuZ2V0RVNjaGVtYSgpOwotLy8JICAgIH0KLQkJCi0JCXJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgT2JqZWN0IGNhc2VXU0RMRWxlbWVudChXU0RMRWxlbWVudCB3c2RsRWxlbWVudCkKLSAgewotICAgIHJldHVybiB3c2RsRWxlbWVudDsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBpc01hdGNoaW5nQXR0cmlidXRlKFN0cmluZyB2YWx1ZSkKLSAgewotICAgIHJldHVybiBhdHRyICE9IG51bGwgJiYgdmFsdWUuZXF1YWxzKGF0dHIuZ2V0TmFtZSgpKTsKLSAgfQotCi0gIHB1YmxpYyBPYmplY3QgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpCi0gIHsKLSAgICBFQ2xhc3MgdGhlRUNsYXNzID0gb2JqZWN0LmVDbGFzcygpOwotICAgIAotICAgIGlmICh0aGVFQ2xhc3MuZUNvbnRhaW5lcigpID09IFhTRFBhY2thZ2UuZUlOU1RBTkNFKQotICAgIHsKLSAgICAgIC8vIEhhbmRsZSBuYXZpZ2F0aW9uIGJldHdlZW4gaW5saW5lIHNjaGVtYSBjb21wb25lbnRzLgotICAgICAgCi0gICAgICBYU0RIeXBlcmxpbmtUYXJnZXRMb2NhdG9yIHhzZEh5cGVybGlua1RhcmdldExvY2F0b3IgPSBuZXcgWFNESHlwZXJsaW5rVGFyZ2V0TG9jYXRvcigpOwotICAgICAgU3RyaW5nIGF0dHJpYnV0ZU5hbWUgPSBhdHRyICE9IG51bGwgPyBhdHRyLmdldE5hbWUoKTogbnVsbDsKLSAgICAgIHJldHVybiB4c2RIeXBlcmxpbmtUYXJnZXRMb2NhdG9yLmxvY2F0ZSgoWFNEQ29uY3JldGVDb21wb25lbnQpIG9iamVjdCwgYXR0cmlidXRlTmFtZSk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBzdXBlci5kZWZhdWx0Q2FzZShvYmplY3QpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvUmVmZXJlbmNlRWRpdE1hbmFnZXJIZWxwZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9SZWZlcmVuY2VFZGl0TWFuYWdlckhlbHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzEyMGNmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9SZWZlcmVuY2VFZGl0TWFuYWdlckhlbHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklGaWxlRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5XU0RMQmFzZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFFbmRQb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5iYXNpYy5XMTFNZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMVBhcmFtZXRlckZvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQVNET2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSURlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5lZGl0LlcxMUJpbmRpbmdSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5lZGl0LlcxMUludGVyZmFjZVJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmVkaXQuVzExTWVzc2FnZVJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmVkaXQuV1NETFhTREVsZW1lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5lZGl0LldTRExYU0RUeXBlUmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5Db21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmVkaXRvci5YU0RFbGVtZW50UmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5lZGl0b3IuWFNEVHlwZVJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgUmVmZXJlbmNlRWRpdE1hbmFnZXJIZWxwZXIgewotCi0gICAgCi0gICAgcHVibGljIHN0YXRpYyBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBnZXRCaW5kaW5nUmVmZXJlbmNlRWRpdE1hbmFnZXIoSUFTRE9iamVjdCBhc2RPYmplY3QpIHsKLSAgICAgICAgSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpOwotICAgICAgICBpZiAocGFnZS5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKFcxMUludGVyZmFjZVJlZmVyZW5jZUVkaXRNYW5hZ2VyLmNsYXNzKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gIChDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcikgcGFnZS5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKFcxMUJpbmRpbmdSZWZlcmVuY2VFZGl0TWFuYWdlci5jbGFzcyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7IAotICAgICAgICAgICAgSUVkaXRvcklucHV0IGlucHV0ID0gcGFnZS5nZXRBY3RpdmVFZGl0b3IoKS5nZXRFZGl0b3JJbnB1dCgpOwotICAgICAgICAgICAgaWYgKGlucHV0IGluc3RhbmNlb2YgSUZpbGVFZGl0b3JJbnB1dCAmJiBhc2RPYmplY3QgaW5zdGFuY2VvZiBXMTFFbmRQb2ludCkgewotICAgICAgICAgICAgICAgIFdTRExFbGVtZW50IGVsZW1lbnQgPSAoV1NETEVsZW1lbnQpICgoVzExRW5kUG9pbnQpIGFzZE9iamVjdCkuZ2V0VGFyZ2V0KCk7IAotICAgICAgICAgICAgICAgIElEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IChJRGVzY3JpcHRpb24pIFdTRExBZGFwdGVyRmFjdG9yeUhlbHBlci5nZXRJbnN0YW5jZSgpLmFkYXB0KGVsZW1lbnQuZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFcxMUJpbmRpbmdSZWZlcmVuY2VFZGl0TWFuYWdlcigoVzExRGVzY3JpcHRpb24pIGRlc2NyaXB0aW9uLCAoKElGaWxlRWRpdG9ySW5wdXQpIGlucHV0KS5nZXRGaWxlKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIGdldEludGVyZmFjZVJlZmVyZW5jZUVkaXRNYW5hZ2VyKElBU0RPYmplY3QgYXNkT2JqZWN0KSB7Ci0gICAgICAgIElXb3JrYmVuY2hQYWdlIHBhZ2UgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKTsKLSAgICAgICAgaWYgKHBhZ2UuZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0QWRhcHRlcihXMTFJbnRlcmZhY2VSZWZlcmVuY2VFZGl0TWFuYWdlci5jbGFzcykgIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIChDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcikgcGFnZS5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKFcxMUludGVyZmFjZVJlZmVyZW5jZUVkaXRNYW5hZ2VyLmNsYXNzKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIElFZGl0b3JJbnB1dCBpbnB1dCA9IHBhZ2UuZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0RWRpdG9ySW5wdXQoKTsKLSAgICAgICAgICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIElGaWxlRWRpdG9ySW5wdXQgJiYgYXNkT2JqZWN0IGluc3RhbmNlb2YgVzExQmluZGluZykgewotICAgICAgICAgICAgICAgIFdTRExFbGVtZW50IGVsZW1lbnQgPSAoV1NETEVsZW1lbnQpICgoVzExQmluZGluZykgYXNkT2JqZWN0ICkuZ2V0VGFyZ2V0KCk7Ci0gICAgICAgICAgICAgICAgSURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gKElEZXNjcmlwdGlvbikgV1NETEFkYXB0ZXJGYWN0b3J5SGVscGVyLmdldEluc3RhbmNlKCkuYWRhcHQoZWxlbWVudC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVzExSW50ZXJmYWNlUmVmZXJlbmNlRWRpdE1hbmFnZXIoKFcxMURlc2NyaXB0aW9uKSBkZXNjcmlwdGlvbiwgKChJRmlsZUVkaXRvcklucHV0KSBpbnB1dCkuZ2V0RmlsZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBnZXRNZXNzYWdlUmVmZXJlbmNlRWRpdE1hbmFnZXIoSUFTRE9iamVjdCBhc2RPYmplY3QpIHsKLSAgICAgICAgSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpOwotICAgICAgICBpZiAocGFnZS5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKFcxMU1lc3NhZ2VSZWZlcmVuY2VFZGl0TWFuYWdlci5jbGFzcykgIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIChDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcikgcGFnZS5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKFcxMU1lc3NhZ2VSZWZlcmVuY2VFZGl0TWFuYWdlci5jbGFzcyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBJRWRpdG9ySW5wdXQgaW5wdXQgPSBwYWdlLmdldEFjdGl2ZUVkaXRvcigpLmdldEVkaXRvcklucHV0KCk7Ci0gICAgICAgICAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBJRmlsZUVkaXRvcklucHV0ICYmIGFzZE9iamVjdCBpbnN0YW5jZW9mIFcxMU1lc3NhZ2VSZWZlcmVuY2UpIHsKLSAgICAgICAgICAgICAgICBXU0RMRWxlbWVudCBlbGVtZW50ID0gKFdTRExFbGVtZW50KSAoKFcxMU1lc3NhZ2VSZWZlcmVuY2UpIGFzZE9iamVjdCkuZ2V0VGFyZ2V0KCk7Ci0gICAgICAgICAgICAgICAgSURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gKElEZXNjcmlwdGlvbikgV1NETEFkYXB0ZXJGYWN0b3J5SGVscGVyLmdldEluc3RhbmNlKCkuYWRhcHQoZWxlbWVudC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVzExTWVzc2FnZVJlZmVyZW5jZUVkaXRNYW5hZ2VyKChXMTFEZXNjcmlwdGlvbikgZGVzY3JpcHRpb24sICgoSUZpbGVFZGl0b3JJbnB1dCkgaW5wdXQpLmdldEZpbGUoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgIAotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIGdldFhTREVsZW1lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcihJQVNET2JqZWN0IGFzZE9iamVjdCkgewotICAgICAgICBJV29ya2JlbmNoUGFnZSBwYWdlID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCk7Ci0gICAgICAgIGlmIChwYWdlLmdldEFjdGl2ZUVkaXRvcigpLmdldEFkYXB0ZXIoWFNERWxlbWVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyLmNsYXNzKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gKENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKSBwYWdlLmdldEFjdGl2ZUVkaXRvcigpLmdldEFkYXB0ZXIoWFNERWxlbWVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyLmNsYXNzKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIElFZGl0b3JJbnB1dCBpbnB1dCA9IHBhZ2UuZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0RWRpdG9ySW5wdXQoKTsKLSAgICAgICAgICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIElGaWxlRWRpdG9ySW5wdXQgJiYgYXNkT2JqZWN0IGluc3RhbmNlb2YgVzExUGFyYW1ldGVyRm9yUGFydCkgewotICAgICAgICAgICAgICAgIFdTRExFbGVtZW50IGVsZW1lbnQgPSAoV1NETEVsZW1lbnQpICgoVzExUGFyYW1ldGVyRm9yUGFydCkgYXNkT2JqZWN0KS5nZXRUYXJnZXQoKTsKLSAgICAgICAgICAgICAgICBJRGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSAoSURlc2NyaXB0aW9uKSBXU0RMQWRhcHRlckZhY3RvcnlIZWxwZXIuZ2V0SW5zdGFuY2UoKS5hZGFwdChlbGVtZW50LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBXU0RMWFNERWxlbWVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKCgoSUZpbGVFZGl0b3JJbnB1dCkgaW5wdXQpLmdldEZpbGUoKSwgbnVsbCwgZGVzY3JpcHRpb24pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIGdldFhTRFR5cGVSZWZlcmVuY2VFZGl0TWFuYWdlcihJQVNET2JqZWN0IGFzZE9iamVjdCkgewotICAgICAgICBJV29ya2JlbmNoUGFnZSBwYWdlID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCk7Ci0gICAgICAgIGlmIChwYWdlLmdldEFjdGl2ZUVkaXRvcigpLmdldEFkYXB0ZXIoWFNEVHlwZVJlZmVyZW5jZUVkaXRNYW5hZ2VyLmNsYXNzKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gKENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKSBwYWdlLmdldEFjdGl2ZUVkaXRvcigpLmdldEFkYXB0ZXIoWFNEVHlwZVJlZmVyZW5jZUVkaXRNYW5hZ2VyLmNsYXNzKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIElFZGl0b3JJbnB1dCBpbnB1dCA9IHBhZ2UuZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0RWRpdG9ySW5wdXQoKTsKLSAgICAgICAgICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIElGaWxlRWRpdG9ySW5wdXQgJiYgYXNkT2JqZWN0IGluc3RhbmNlb2YgSVBhcmFtZXRlciAmJiBhc2RPYmplY3QgaW5zdGFuY2VvZiBXU0RMQmFzZUFkYXB0ZXIpIHsKLSAgICAgICAgICAgICAgICBXU0RMRWxlbWVudCBlbGVtZW50ID0gKFdTRExFbGVtZW50KSAoKFdTRExCYXNlQWRhcHRlcikgYXNkT2JqZWN0KS5nZXRUYXJnZXQoKTsKLSAgICAgICAgICAgICAgICBJRGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSAoSURlc2NyaXB0aW9uKSBXU0RMQWRhcHRlckZhY3RvcnlIZWxwZXIuZ2V0SW5zdGFuY2UoKS5hZGFwdChlbGVtZW50LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBXU0RMWFNEVHlwZVJlZmVyZW5jZUVkaXRNYW5hZ2VyKCgoSUZpbGVFZGl0b3JJbnB1dCkgaW5wdXQpLmdldEZpbGUoKSwgbnVsbCwgZGVzY3JpcHRpb24pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL1ZhbGlkYXRlSGVscGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvVmFsaWRhdGVIZWxwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTU4MjU5OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvVmFsaWRhdGVIZWxwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci0KLXB1YmxpYyBjbGFzcyBWYWxpZGF0ZUhlbHBlcgotewotICAvLyBYTUwgTGFuZyBjYW4gaGF2ZSBtYW55IGRpZmZlcmVudCB2YWxpZCBmb3JtYXRzCi0gIC8vIDEpIHh4ICAgICAgaWUuIGVuLCBmciwgZGUKLSAgLy8gMikgeHgteHggICBpZS4gZW4tVVMsIGVuLUZSCi0gIC8vIDMpIEkteHggICAgaWUuIEktZW4KLSAgLy8gNCkgWC14eCAgICBpZS4gWC1lbgotICBwdWJsaWMgc3RhdGljIFN0cmluZyBjaGVja1hNTExhbmcoU3RyaW5nIGxhbmcpCi0gIHsKLSAgICBpZiAobGFuZy5sZW5ndGgoKSA9PSAwKSAKLSAgICAgIHJldHVybiBudWxsOwotICAgIAotICAgIGlmIChsYW5nLmxlbmd0aCgpID09IDEpIAotICAgIHsKLSAgICAgIGNoYXIgY2gwID0gbGFuZy5jaGFyQXQoMCk7Ci0gICAgICBpZiAoKGNoMCA+PSAnYScgJiYgY2gwIDw9ICd6JykgfHwgKGNoMCA+PSAnQScgJiYgY2gwIDw9ICdaJykpCi0gICAgICAgIHJldHVybiBVSVBsdWdpbi5nZXRSZXNvdXJjZVN0cmluZygiX1dBUk5fTEFOR19UT09fU0hPUlQiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gVUlQbHVnaW4uZ2V0UmVzb3VyY2VTdHJpbmcoIl9XQVJOX05BTUVfSU5WQUxJRF9DSEFSIikgKyBjaDAgKyAgLy8kTk9OLU5MUy0xJAotICAgICAgICBVSVBsdWdpbi5nZXRSZXNvdXJjZVN0cmluZygiX1VJX05BTUVfSU5WQUxJRF9DSEFSX0VORCIpOyAgICAgICAgICAgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgICAKLSAgICBpbnQgb2Zmc2V0OwotCi0gICAgY2hhciBjaDAgPSBsYW5nLmNoYXJBdCgwKTsKLSAgICBpZiAobGFuZy5jaGFyQXQoMSkgPT0gJy0nKSAKLSAgICB7Ci0gICAgICBpZiAoY2gwID09ICdpJyB8fCBjaDAgPT0gJ0knIHx8IGNoMCA9PSAneCcgfHwgY2gwID09ICdYJykgCi0gICAgICAgIG9mZnNldCA9IDE7Ci0gICAgICBlbHNlCi0gICAgICAgIHJldHVybiBVSVBsdWdpbi5nZXRSZXNvdXJjZVN0cmluZygiX1dBUk5fTkFNRV9JTlZBTElEX0NIQVIiKSArIGNoMCArICAvLyROT04tTkxTLTEkCi0gICAgICAgIFVJUGx1Z2luLmdldFJlc291cmNlU3RyaW5nKCJfVUlfTkFNRV9JTlZBTElEX0NIQVJfRU5EIik7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGNoYXIgY2gxID0gbGFuZy5jaGFyQXQoMSk7Ci0gICAgICBpZiAoKGNoMCA+PSAnYScgJiYgY2gwIDw9ICd6JykgfHwgKGNoMCA+PSAnQScgJiYgY2gwIDw9ICdaJykpCi0gICAgICAgIGlmICgoY2gxID49ICdhJyAmJiBjaDEgPD0gJ3onKSB8fCAoY2gxID49ICdBJyAmJiBjaDEgPD0gJ1onKSkKLSAgICAgICAgICBvZmZzZXQgPSAyOwotICAgICAgICBlbHNlCi0gICAgICAgICAgcmV0dXJuIFVJUGx1Z2luLmdldFJlc291cmNlU3RyaW5nKCJfV0FSTl9OQU1FX0lOVkFMSURfQ0hBUiIpICsgY2gxICsgIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICBVSVBsdWdpbi5nZXRSZXNvdXJjZVN0cmluZygiX1VJX05BTUVfSU5WQUxJRF9DSEFSX0VORCIpOyAvLyROT04tTkxTLTEkCi0gICAgICBlbHNlCi0gICAgICAgIHJldHVybiBVSVBsdWdpbi5nZXRSZXNvdXJjZVN0cmluZygiX1dBUk5fTkFNRV9JTlZBTElEX0NIQVIiKSArIGNoMCArICAvLyROT04tTkxTLTEkCi0gICAgICAgIFVJUGx1Z2luLmdldFJlc291cmNlU3RyaW5nKCJfVUlfTkFNRV9JTlZBTElEX0NIQVJfRU5EIik7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0KLSAgICBpZiAobGFuZy5sZW5ndGgoKSA+IG9mZnNldCkgCi0gICAgewotICAgICAgY2hhciBjaCA9IGxhbmcuY2hhckF0KG9mZnNldCsrKTsKLSAgICAgIGlmIChjaCAhPSAnLScpIAotICAgICAgICByZXR1cm4gVUlQbHVnaW4uZ2V0UmVzb3VyY2VTdHJpbmcoIl9XQVJOX0hZUEhFTl9ORUVERUQiKSArIEludGVnZXIudG9TdHJpbmcob2Zmc2V0LTEpOyAgICAgICAgIC8vJE5PTi1OTFMtMSQKLSAgICAgIGVsc2UgCi0gICAgICB7Ci0gICAgICAgIHdoaWxlICh0cnVlKSAKLSAgICAgICAgewotICAgICAgICAgIGlmIChjaCA9PSAnLScpIAotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChsYW5nLmxlbmd0aCgpID09IG9mZnNldCkgCi0gICAgICAgICAgICAgIHJldHVybiBVSVBsdWdpbi5nZXRSZXNvdXJjZVN0cmluZygiX1dBUk5fSFlQSEVOX0VORElORyIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIGNoID0gbGFuZy5jaGFyQXQob2Zmc2V0KyspOwotICAgICAgICAgICAgaWYgKChjaCA8ICdhJyB8fCBjaCA+ICd6JykgJiYgKGNoIDwgJ0EnIHx8IGNoID4gJ1onKSkgCi0gICAgICAgICAgICAgIHJldHVybiBVSVBsdWdpbi5nZXRSZXNvdXJjZVN0cmluZygiX1dBUk5fTkFNRV9JTlZBTElEX0NIQVIiKSArIGNoICsgIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgICAgVUlQbHVnaW4uZ2V0UmVzb3VyY2VTdHJpbmcoIl9VSV9OQU1FX0lOVkFMSURfQ0hBUl9FTkQiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobGFuZy5sZW5ndGgoKSA9PSBvZmZzZXQpCi0gICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgIH0gCi0gICAgICAgICAgZWxzZSBpZiAoKGNoIDwgJ2EnIHx8IGNoID4gJ3onKSAmJiAoY2ggPCAnQScgfHwgY2ggPiAnWicpKSAKLSAgICAgICAgICAgIHJldHVybiBVSVBsdWdpbi5nZXRSZXNvdXJjZVN0cmluZygiX1dBUk5fTkFNRV9JTlZBTElEX0NIQVIiKSArIGNoICsgIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgIFVJUGx1Z2luLmdldFJlc291cmNlU3RyaW5nKCJfVUlfTkFNRV9JTlZBTElEX0NIQVJfRU5EIik7ICAgICAgICAgICAgICAvLyROT04tTkxTLTEkCi0gICAgICAgICAgZWxzZSBpZiAobGFuZy5sZW5ndGgoKSA9PSBvZmZzZXQpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICBjaCA9IGxhbmcuY2hhckF0KG9mZnNldCsrKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotICAvKioKLSAgICogQ2hlY2sgdG8gc2VlIGlmIHRoZSBtaW4gdmFsdWUgaXMgY29ycmVjdC4KLSAgICogQSBtaW5pbXVtIHZhbHVlIG11c3QgYmUgbm9uLW5lZ2F0aXZlIGFuZCA8IG1heFZhbHVlCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBpc1ZhbGlkTWluVmFsdWUoU3RyaW5nIG1pblZhbHVlLCBTdHJpbmcgbWF4VmFsdWUpCi0gIHsKLSAgICBpbnQgbWluOwotCi0gICAgaWYgKG1pblZhbHVlID09IG51bGwgfHwgbWluVmFsdWUuZXF1YWxzKCIiKSkgLy8kTk9OLU5MUy0xJAotICAgIHsKLSAgICAgIC8vIE5vdGhpbmcgdG8gY2hlY2sKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHRyeQotICAgIHsKLSAgICAgIG1pbiA9IEludGVnZXIucGFyc2VJbnQobWluVmFsdWUpOwotICAgIH0KLSAgICBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGV4KQotICAgIHsKLSAgICAgIHJldHVybiBVSVBsdWdpbi5nZXRSZXNvdXJjZVN0cmluZygiX0VSUk9SX01JTl9OT1RfUE9TSVRJVkUiKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLQotICAgIGlmIChtaW4gPCAwKSAKLSAgICB7Ci0gICAgICByZXR1cm4gVUlQbHVnaW4uZ2V0UmVzb3VyY2VTdHJpbmcoIl9FUlJPUl9NSU5fTk9UX1BPU0lUSVZFIik7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBpbnQgbWF4ID0gSW50ZWdlci5wYXJzZUludChtYXhWYWx1ZSk7Ci0gICAgICBpZiAobWluID4gbWF4KSAKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIFVJUGx1Z2luLmdldFJlc291cmNlU3RyaW5nKCJfRVJST1JfTUlOX1ZBTFVFIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBleCkKLSAgICB7Ci0gICAgICAvLyBNYXggaXMgbm90IGFjY3VyYXRlLiBEb24ndCBjb21wYXJlIGl0LgotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVjayB0byBzZWUgaWYgdGhlIG1heCB2YWx1ZSBpcyBjb3JyZWN0LgotICAgKiBBIG1heGltdW0gdmFsdWUgbXVzdCBiZSBub24tbmVnYXRpdmUgYW5kID4gbWluVmFsdWUKLSAgICoKLSAgICogSXQgY2FuIGFsc28gYmUgc2V0IHRoZSBzdHJpbmcgInVuYm91bmRlZCIKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGlzVmFsaWRNYXhWYWx1ZShTdHJpbmcgbWF4VmFsdWUsIFN0cmluZyBtaW5WYWx1ZSkKLSAgewotICAgIGludCBtYXg7Ci0KLSAgICBpZiAobWF4VmFsdWUgPT0gbnVsbCB8fCBtYXhWYWx1ZS5lcXVhbHMoIiIpKSAgLy8kTk9OLU5MUy0xJAotICAgIHsKLSAgICAgIC8vIE5vdGhpbmcgdG8gY2hlY2sKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIGlmIChtYXhWYWx1ZS5lcXVhbHMoInVuYm91bmRlZCIpKSAvLyROT04tTkxTLTEkCi0gICAgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgdHJ5Ci0gICAgewotICAgICAgbWF4ID0gSW50ZWdlci5wYXJzZUludChtYXhWYWx1ZSk7Ci0gICAgfQotICAgIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZXgpCi0gICAgewotICAgICAgcmV0dXJuIFVJUGx1Z2luLmdldFJlc291cmNlU3RyaW5nKCJfRVJST1JfTUFYX05PVF9QT1NJVElWRSIpOyAvLyROT04tTkxTLTEkCi0gICAgfQotCi0gICAgaWYgKG1heCA8IDApIAotICAgIHsKLSAgICAgIHJldHVybiBVSVBsdWdpbi5nZXRSZXNvdXJjZVN0cmluZygiX0VSUk9SX01BWF9OT1RfUE9TSVRJVkUiKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLQotICAgIHRyeQotICAgIHsKLSAgICAgIGludCBtaW4gPSBJbnRlZ2VyLnBhcnNlSW50KG1pblZhbHVlKTsKLSAgICAgIGlmIChtYXggPCBtaW4pIAotICAgICAgewotICAgICAgICByZXR1cm4gVUlQbHVnaW4uZ2V0UmVzb3VyY2VTdHJpbmcoIl9FUlJPUl9NQVhfVkFMVUUiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGV4KQotICAgIHsKLSAgICAgIC8vIE1pbiBpcyBub3QgYWNjdXJhdGUuIERvbid0IGNvbXBhcmUgaXQuCi0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlIHRoZSBuYW1lIGNvbmZvcm1zIHRvIHRoZSBYTUwgc3BlYwotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgY2hlY2tYTUxOYW1lKFN0cmluZyBuYW1lLCBib29sZWFuIGFsbG93RW50aXR5UmVmKQotICB7Ci0gICAgaW50IGxlbmd0aCA9IG5hbWUubGVuZ3RoKCk7Ci0gICAgY2hhciBjaGFyYWN0ZXI7Ci0KLSAgICBpZiAobGVuZ3RoID09IDApIAotICAgIHsKLSAgICAgIHJldHVybiBNZXNzYWdlcy5fV0FSTl9OQU1FX01VU1RfQ09OVEFJTl9BVF9MRUFTVF9PTkVfQ0hBUjsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG5hbWUuaW5kZXhPZigiICIpID49IDApIC8vJE5PTi1OTFMtMSQKLSAgICB7Ci0gICAgICByZXR1cm4gTWVzc2FnZXMuX1dBUk5fTkFNRV9IQVNfU1BBQ0U7Ci0gICAgfQotCi0gICAgaW50IGluZGV4ID0gMDsKLSAgICBpZiAobGVuZ3RoID4gMCAmJgotICAgICAgICBuYW1lLmNoYXJBdCgwKSA9PSAnJScpCi0gICAgewotICAgICAgaWYgKGFsbG93RW50aXR5UmVmKSAKLSAgICAgIHsKLSAgICAgICAgLy8gc2tpcCBvdmVyIHRoZSBmaXJzdCBjaGFyYWN0ZXIgCi0gICAgICAgIGluZGV4Kys7Ci0gICAgICB9IC8vIGVuZCBvZiBpZiAoKQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICByZXR1cm4gTWVzc2FnZXMuX1dBUk5fTkFNRV9JTlZBTElEX0ZJUlNUOwotICAgICAgfSAvLyBlbmQgb2YgZWxzZQotICAgIH0KLSAgICAKLSAgICBmb3IoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykKLSAgICB7Ci0gICAgICBjaGFyYWN0ZXIgPSBuYW1lLmNoYXJBdChpbmRleCk7Ci0KLSAgICAgIGlmKGluZGV4ID09IDApCi0gICAgICB7Ci0gICAgICAgIGlmKCAhaXNYTUxOYW1lU3RhcnQoY2hhcmFjdGVyKSApCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gTWVzc2FnZXMuX1dBUk5fTkFNRV9JTlZBTElEX0ZJUlNUOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGlmKCFpc1hNTE5hbWVDaGFyKGNoYXJhY3RlcikpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoKGluZGV4ID09IGxlbmd0aCAtIDEpICYmIC8vY2hlY2sgaWYgdGhlIGxhc3QgY2hhcmFjdGVyIGlzIGEgJzsnCi0gICAgICAgICAgICAgIGFsbG93RW50aXR5UmVmICYmCi0gICAgICAgICAgICAgIGNoYXJhY3RlciA9PSAnOycpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gd2UncmUgc3RpbGwgb2sgdGhlbgotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgfSAvLyBlbmQgb2YgaWYgKCkKLSAgICAgICAgICBlbHNlIAotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBNZXNzYWdlcy5fV0FSTl9OQU1FX0lOVkFMSURfQ0hBUiArIGNoYXJhY3RlciArCi0gICAgICAgICAgICBNZXNzYWdlcy5fVUlfTkFNRV9JTlZBTElEX0NIQVJfRU5EOwotICAgICAgICAgIH0gLy8gZW5kIG9mIGVsc2UKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBWYWxpZGF0ZSB0aGUgbmFtZSBjb25mb3JtcyB0byB0aGUgWE1MIHNwZWMKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGNoZWNrWE1MTmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgIHJldHVybiBjaGVja1hNTE5hbWUobmFtZSwgZmFsc2UpOwotICB9Ci0KLSAgLyoqCi0gICAqIGlzWE1MTmFtZVN0YXJ0Ci0gICAqKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1hNTE5hbWVTdGFydChjaGFyIGNoKQotICB7Ci0gICAgcmV0dXJuIChjaCA9PSAnXycgfHwgY2ggPT0gJzonIHx8IENoYXJhY3Rlci5pc0xldHRlcihjaCkgKTsKLSAgfQotCi0gIC8qKgotICAgKiBpc1hNTE5hbWVDaGFyCi0gICAqKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1hNTE5hbWVDaGFyKGNoYXIgY2gpCi0gIHsKLSAgICByZXR1cm4gKENoYXJhY3Rlci5pc0xldHRlck9yRGlnaXQoY2gpIHx8IGNoID09ICcuJyB8fCBjaCA9PSAnLScgfHwgY2ggPT0gJ18nIHx8IGNoID09ICc6Jyk7Ci0gIH0KLQotICAvKioKLSAgICogaXNYTUxQcmVmaXhTdGFydAotICAgKiovCi0vLyAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1hNTFByZWZpeFN0YXJ0KGNoYXIgY2gpCi0vLyAgewotLy8gICAgcmV0dXJuIChjaCA9PSAnXycgfHwgQ2hhcmFjdGVyLmlzTGV0dGVyKGNoKSApOwotLy8gIH0KLQotICAvKioKLSAgICogaXNYTUxQcmVmaXhDaGFyCi0gICAqKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1hNTFByZWZpeENoYXIoY2hhciBjaCkKLSAgewotICAgIHJldHVybiAoQ2hhcmFjdGVyLmlzTGV0dGVyT3JEaWdpdChjaCkgfHwgY2ggPT0gJy4nIHx8IGNoID09ICctJyB8fCBjaCA9PSAnXycpOwotICB9Ci0KLSAgLyoqCi0gICAqIHBhcnNlRWxlbWVudFRleHQKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHBhcnNlRWxlbWVudFRleHQoU3RyaW5nIHRleHQpCi0gIHsKLSAgICBpZiAodGV4dC5pbmRleE9mKCc8JykgIT0gLTEgfHwgdGV4dC5pbmRleE9mKCc+JykgIT0gLTEpCi0gICAgewotICAgICAgcmV0dXJuIFVJUGx1Z2luLmdldFJlc291cmNlU3RyaW5nKCJfV0FSTl9FTEVNRU5UX0lOVkFMSURfQ0hBUiIpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIHBhcnNlQXR0cmlidXRlVmFsdWUKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHBhcnNlQXR0cmlidXRlVmFsdWUoU3RyaW5nIHZhbHVlKQotICB7Ci0gICAgaWYgKHZhbHVlLmluZGV4T2YoJyInKSAhPSAtMSB8fCB2YWx1ZS5pbmRleE9mKCc8JykgIT0gLTEgfHwgdmFsdWUuaW5kZXhPZignPicpICE9IC0xKQotICAgIHsKLSAgICAgIHJldHVybiBVSVBsdWdpbi5nZXRSZXNvdXJjZVN0cmluZygiX1dBUk5fQVRUUklCVVRFX0lOVkFMSURfQ0hBUiIpOyAvLyROT04tTkxTLTEkCi0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogcGFyc2VBREFUQVNlY3Rpb24KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHBhcnNlQ0RBVEFTZWN0aW9uKFN0cmluZyBzZWN0aW9uKQotICB7Ci0gICAgaWYgKHNlY3Rpb24uaW5kZXhPZigiXV0+IikgIT0gLTEpIC8vJE5PTi1OTFMtMSQKLSAgICB7Ci0gICAgICByZXR1cm4gVUlQbHVnaW4uZ2V0UmVzb3VyY2VTdHJpbmcoIl9XQVJOX0NEQVRBX0lOVkFMSURfU1RSSU5HIik7IC8vJE5PTi1OTFMtMSQKLQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBwYXJzZVByb2Nlc3NpaW5nSW5zdHJ1Y3Rpb24KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHBhcnNlUHJvY2Vzc2luZ0luc3RydWN0aW9uRGF0YShTdHJpbmcgZGF0YSkKLSAgewotICAgIGlmIChkYXRhLmluZGV4T2YoIj8+IikgIT0gLTEpIC8vJE5PTi1OTFMtMSQKLSAgICB7Ci0gICAgICByZXR1cm4gVUlQbHVnaW4uZ2V0UmVzb3VyY2VTdHJpbmcoIl9XQVJOX1BST0NFU1NJTkdfSU5WQUxJRF9TVFJJTkciKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIHBhcnNlUHJvY2Vzc2luZ0luc3RydWN0aW9uVGFyZ2V0Ci0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBwYXJzZVByb2Nlc3NpbmdJbnN0cnVjdGlvblRhcmdldChTdHJpbmcgdGFyZ2V0KQotICB7Ci0gICAgaWYgKHRhcmdldC5sZW5ndGgoKSA9PSAzICYmICh0YXJnZXQuaW5kZXhPZigiWE1MIikgIT0gLTEgfHwgdGFyZ2V0LmluZGV4T2YoIlhNbCIpICE9IC0xIHx8IHRhcmdldC5pbmRleE9mKCJYbUwiKSAhPSAtMSB8fCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAotICAgICAgICB0YXJnZXQuaW5kZXhPZigieE1MIikgIT0gLTEgfHwgdGFyZ2V0LmluZGV4T2YoIlhtbCIpICE9IC0xIHx8IHRhcmdldC5pbmRleE9mKCJ4TWwiKSAhPSAtMSB8fCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAotICAgICAgICB0YXJnZXQuaW5kZXhPZigieG1MIikgIT0gLTEgfHwgdGFyZ2V0LmluZGV4T2YoInhtbCIpICE9IC0xKSkgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgewotICAgICAgcmV0dXJuIFVJUGx1Z2luLmdldFJlc291cmNlU3RyaW5nKCJfV0FSTl9QUk9DRVNTSU5HX1RBUkdFVF9JTlZBTElEX1NUUklORyIpOyAvLyROT04tTkxTLTEkCi0KLSAgICB9Ci0gICAgcmV0dXJuIGNoZWNrWE1MTmFtZSh0YXJnZXQpOwotICB9Ci0KLSAgLyoqCi0gICAqIHBhcnNDb21tZW50Ci0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBwYXJzZUNvbW1lbnQoU3RyaW5nIGNvbW1lbnQpCi0gIHsKLSAgICBpZiAoY29tbWVudC5pbmRleE9mKCItLSIpICE9IC0xKSAvLyROT04tTkxTLTEkCi0gICAgewotICAgICAgcmV0dXJuIFVJUGx1Z2luLmdldFJlc291cmNlU3RyaW5nKCJfV0FSTl9DT01NRU5UX0lOVkFMSURfU1RSSU5HIik7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBWYWxpZGF0ZSB0aGUgcHJlZml4IGNvbmZvcm1zIHRvIHRoZSBYTUwgc3BlYwotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgY2hlY2tYTUxQcmVmaXgoU3RyaW5nIHByZWZpeCkKLSAgewotICAgIGludCBsZW5ndGggPSBwcmVmaXgubGVuZ3RoKCk7Ci0gICAgaWYgKGxlbmd0aCA9PSAwKQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICBjaGFyIGNoYXJhY3RlcjsKLSAgICAKLSAgICBpZiAocHJlZml4LmluZGV4T2YoIiAiKSA+PSAwKSAvLyROT04tTkxTLTEkCi0gICAgewotICAgICAgcmV0dXJuKFVJUGx1Z2luLmdldFJlc291cmNlU3RyaW5nKCJfV0FSTl9QUkVGSVhfSEFTX1NQQUNFIikpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIAotICAgIGZvcihpbnQgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykKLSAgICB7Ci0gICAgICBjaGFyYWN0ZXIgPSBwcmVmaXguY2hhckF0KGluZGV4KTsKLQotICAgICAgaWYoIWlzWE1MUHJlZml4Q2hhcihjaGFyYWN0ZXIpKQotICAgICAgewotICAgICAgICByZXR1cm4gVUlQbHVnaW4uZ2V0U3RyaW5nKCJfV0FSTl9QUkVGSVhfSU5WQUxJRF9DSEFSIiwgU3RyaW5nLnZhbHVlT2YoY2hhcmFjdGVyKSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvVzExT3BlbkV4dGVybmFsRWRpdG9ySGVscGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvVzExT3BlbkV4dGVybmFsRWRpdG9ySGVscGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzMzdhOTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL1cxMU9wZW5FeHRlcm5hbEVkaXRvckhlbHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIuaW50ZXJuYWwudXRpbC5VUklIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5XU0RMQmFzZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC51dGlsLklPcGVuRXh0ZXJuYWxFZGl0b3JIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMUmVzb3VyY2VJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuZGlhbG9ncy5JT3BlbkluTmV3RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuZGlhbG9ncy5YU0RHcmFwaFZpZXdlckRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29uY3JldGVDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETmFtZWRDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QudXRpbC5YU0RDb25zdGFudHM7Ci0KLXB1YmxpYyBjbGFzcyBXMTFPcGVuRXh0ZXJuYWxFZGl0b3JIZWxwZXIgaW1wbGVtZW50cyBJT3BlbkV4dGVybmFsRWRpdG9ySGVscGVyLCBJT3BlbkluTmV3RWRpdG9yIHsKLQlwcml2YXRlIE9iamVjdCBvYmplY3Q7Ci0JcHJpdmF0ZSBJRmlsZSB3c2RsRmlsZTsKLQkKLQlwdWJsaWMgVzExT3BlbkV4dGVybmFsRWRpdG9ySGVscGVyKElGaWxlIHdzZGxGaWxlKQotCXsKLQkJdGhpcy53c2RsRmlsZSA9IHdzZGxGaWxlOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRNb2RlbChPYmplY3Qgb2JqZWN0KSB7Ci0JCXRoaXMub2JqZWN0ID0gb2JqZWN0OwotCX0KLQkKLQlwdWJsaWMgdm9pZCBvcGVuRXh0ZXJuYWxFZGl0b3IoKSB7Ci0JCWlmIChvYmplY3QgaW5zdGFuY2VvZiBXU0RMQmFzZUFkYXB0ZXIpIHsKLQkJCU9iamVjdCBub3RpZmllciA9ICgoV1NETEJhc2VBZGFwdGVyKSBvYmplY3QpLmdldFRhcmdldCgpOwotCQkJT2JqZWN0IG9wZW5Pbk1vZGVsID0gZ2V0TW9kZWxUb09wZW5Pbihub3RpZmllcik7Ci0JCQkKLQkJCWlmIChvcGVuT25Nb2RlbCBpbnN0YW5jZW9mIFhTRENvbmNyZXRlQ29tcG9uZW50KSB7Ci0JCQkgIFhTRENvbmNyZXRlQ29tcG9uZW50IHhzZENvbXBvbmVudCA9IChYU0RDb25jcmV0ZUNvbXBvbmVudCkgb3Blbk9uTW9kZWw7Ci0JCQkgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRTY2hlbWEoeHNkQ29tcG9uZW50KTsKLQkJCSAgaWYgKHNjaGVtYS5lUmVzb3VyY2UoKSBpbnN0YW5jZW9mIFdTRExSZXNvdXJjZUltcGwpCi0JCQkgIHsKLQkJCSAgICBTdHJpbmcgZmlsZU5hbWUgPSBzY2hlbWEuZVJlc291cmNlKCkuZ2V0VVJJKCkubGFzdFNlZ21lbnQoKTsKLQkJCSAgICBpZiAoZmlsZU5hbWUgPT0gbnVsbCkgZmlsZU5hbWUgPSAiV1NETCI7IC8vJE5PTi1OTFMtMSQKLQkJCSAgICBTdHJpbmcgZWRpdG9yTmFtZSA9IE1lc3NhZ2VzLl9VSV9MQUJFTF9JTkxJTkVfU0NIRU1BX09GICsgZmlsZU5hbWU7Ci0JCQkgICAgWFNER3JhcGhWaWV3ZXJEaWFsb2cub3Blbk5vblhTRFJlc291cmNlU2NoZW1hKHhzZENvbXBvbmVudCwgc2NoZW1hLCBlZGl0b3JOYW1lKTsKLQkJCSAgfQotCQkJICBlbHNlCi0JCQkgIHsKLQkJCQkgIFhTREdyYXBoVmlld2VyRGlhbG9nLm9wZW5YU0RFZGl0b3IoeHNkQ29tcG9uZW50KTsKLQkJCSAgfQotCQkJfQotCQl9Ci0JfQotCQotICBwdWJsaWMgdm9pZCBvcGVuWFNERWRpdG9yKCkKLSAgewotICAgIG9wZW5FeHRlcm5hbEVkaXRvcigpOyAgCi0gIH0KLQotCXByb3RlY3RlZCBYU0RTY2hlbWEgZ2V0U2NoZW1hKFhTRENvbmNyZXRlQ29tcG9uZW50IHhzZENvbXBvbmVudCkgewotCQlYU0RTY2hlbWEgc2NoZW1hID0geHNkQ29tcG9uZW50LmdldFNjaGVtYSgpOwotCQlpZiAoc2NoZW1hID09IG51bGwpIHsKLQkJCU9iamVjdCBub3RpZmllciA9ICgoV1NETEJhc2VBZGFwdGVyKSBvYmplY3QpLmdldFRhcmdldCgpOwotCQkJaWYgKG5vdGlmaWVyIGluc3RhbmNlb2YgWFNEQ29uY3JldGVDb21wb25lbnQpIHsKLQkJCQlzY2hlbWEgPSAoKFhTRENvbmNyZXRlQ29tcG9uZW50KSBub3RpZmllcikuZ2V0U2NoZW1hKCk7Ci0JCQl9Ci0JCX0KLQkJCi0JCXJldHVybiBzY2hlbWE7Ci0JfQotCQkKLQlwdWJsaWMgYm9vbGVhbiBsaW5rQXBwbGljYWJsZSgpIHsKLQkJYm9vbGVhbiBhcHBsaWNhYmxlID0gdHJ1ZTsKLQkJCi0JCWlmIChvYmplY3QgaW5zdGFuY2VvZiBJUGFyYW1ldGVyKSB7Ci0JCQlJUGFyYW1ldGVyIHBhcmFtID0gKElQYXJhbWV0ZXIpIG9iamVjdDsKLQkJCVN0cmluZyBwcmVmaXggPSBwYXJhbS5nZXRDb21wb25lbnROYW1lUXVhbGlmaWVyKCk7Ci0JCQlpZiAocHJlZml4ICE9IG51bGwgJiYgcHJlZml4LmVxdWFscyhYU0RDb25zdGFudHMuU0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzIwMDEpKSB7Ci0JCQkJYXBwbGljYWJsZSA9IGZhbHNlOwotCQkJfQotCQl9Ci0JCQotCQlyZXR1cm4gYXBwbGljYWJsZTsKLQl9Ci0JCi0JcHJvdGVjdGVkIE9iamVjdCBnZXRNb2RlbFRvT3Blbk9uKE9iamVjdCBvYmplY3QpIHsKLQkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIFhTREVsZW1lbnREZWNsYXJhdGlvbikgewotCQkJWFNERWxlbWVudERlY2xhcmF0aW9uIHhzZEVsZW1lbnQgPSAoKFhTREVsZW1lbnREZWNsYXJhdGlvbikgb2JqZWN0KS5nZXRSZXNvbHZlZEVsZW1lbnREZWNsYXJhdGlvbigpOwotCQkJcmV0dXJuIHhzZEVsZW1lbnQuZ2V0VHlwZURlZmluaXRpb24oKTsKLQkJfQotCQllbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBQYXJ0KSB7Ci0JCQlPYmplY3QgZWxlbWVudE9yVHlwZSA9ICgoUGFydCkgb2JqZWN0KS5nZXRFbGVtZW50RGVjbGFyYXRpb24oKTsKLQkJCWlmIChlbGVtZW50T3JUeXBlID09IG51bGwpIHsKLQkJCQllbGVtZW50T3JUeXBlID0gKChQYXJ0KSBvYmplY3QpLmdldFR5cGVEZWZpbml0aW9uKCk7Ci0JCQl9Ci0JCQkKLQkJCXJldHVybiBlbGVtZW50T3JUeXBlOwotCQl9Ci0JCQotCQlyZXR1cm4gb2JqZWN0OwotCX0KLQkKLQkvKioKLQkgKiBAcGFyYW0gZmlsZQotCSAqIEByZXR1cm4KLQkgKi8KLQlwcm90ZWN0ZWQgYm9vbGVhbiBpc0lubGluZVNjaGVtYShJRmlsZSBmaWxlKSB7Ci0JCS8vIFNob3VsZCB0aGVyZSBiZSBhIGJldHRlciB0ZXN0IGZvciB0aGlzPyAgVGhlIElGaWxlcyBhcmUgZGlmZmVyZW50IHNvIHdlIGNhbid0IHVzZSBmaWxlID09IHdzZGxGaWxlLgotCQlyZXR1cm4gZmlsZS5nZXRGdWxsUGF0aCgpLmVxdWFscyh3c2RsRmlsZS5nZXRGdWxsUGF0aCgpKTsKLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gaXNWYWxpZCgpIHsKLQkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIFdTRExCYXNlQWRhcHRlcikgewotCQkJT2JqZWN0IG5vdGlmaWVyID0gKChXU0RMQmFzZUFkYXB0ZXIpIG9iamVjdCkuZ2V0VGFyZ2V0KCk7Ci0JCQlPYmplY3Qgb3Blbk9uTW9kZWwgPSBnZXRNb2RlbFRvT3Blbk9uKG5vdGlmaWVyKTsKLQotCQkJLy8gV2UgY2hlY2sgdG8gZW5zdXJlIGl0J3MgZWxlbWVudCAhPSBudWxsLiAgSWYgaXQgZG9lcywgdGhlbiBpdCdzIGEgc2lnbiBvZiBhCi0JCQkvLyBiYWQgcmVmZXJlbmNlIChpcyBpbnZhbGlkKS4KLQkJCWlmIChvcGVuT25Nb2RlbCBpbnN0YW5jZW9mIFhTRENvbmNyZXRlQ29tcG9uZW50ICYmICgoWFNEQ29uY3JldGVDb21wb25lbnQpIG9wZW5Pbk1vZGVsKS5nZXRFbGVtZW50KCkgIT0gbnVsbCkgewotCQkJCVhTRENvbmNyZXRlQ29tcG9uZW50IHhzZENvbXBvbmVudCA9IChYU0RDb25jcmV0ZUNvbXBvbmVudCkgb3Blbk9uTW9kZWw7Ci0KLQkJCQlYU0RTY2hlbWEgc2NoZW1hID0gZ2V0U2NoZW1hKHhzZENvbXBvbmVudCk7Ci0JCQkJaWYgKHNjaGVtYSAhPSBudWxsKSB7Ci0JCQkJCVN0cmluZyBzY2hlbWFMb2NhdGlvbiA9IFVSSUhlbHBlci5yZW1vdmVQbGF0Zm9ybVJlc291cmNlUHJvdG9jb2woc2NoZW1hLmdldFNjaGVtYUxvY2F0aW9uKCkpOwotCQkJCQlJUGF0aCBzY2hlbWFQYXRoID0gbmV3IFBhdGgoc2NoZW1hTG9jYXRpb24pOwotCQkJCQlJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKHNjaGVtYVBhdGgpOwotCQkJCQlpZiAoZmlsZSAhPSBudWxsICYmIGZpbGUuZXhpc3RzKCkpIHsKLQkJCQkJCXJldHVybiB0cnVlOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzaG93UHJldmlldygpIHsKLSAgICBPYmplY3QgeHNkTW9kZWwgPSBudWxsOwotICAgIFN0cmluZyB0aXRsZSA9ICIiOwotICAgIFN0cmluZyBpbmZvID0gIiI7Ci0KLSAgICBPYmplY3Qgbm90aWZpZXIgPSAoKFdTRExCYXNlQWRhcHRlcikgb2JqZWN0KS5nZXRUYXJnZXQoKTsKLSAgICB4c2RNb2RlbCA9IGdldE1vZGVsVG9PcGVuT24obm90aWZpZXIpOwotICAgIGlmICh4c2RNb2RlbCBpbnN0YW5jZW9mIFhTRE5hbWVkQ29tcG9uZW50KQotICAgIHsKLSAgICAgIFhTRE5hbWVkQ29tcG9uZW50IG5hbWVkQ29tcG9uZW50ID0gKFhTRE5hbWVkQ29tcG9uZW50KSB4c2RNb2RlbDsKLSAgICAgIHRpdGxlID0gbmFtZWRDb21wb25lbnQuZ2V0TmFtZSgpOwotICAgICAgaW5mbyA9IG5hbWVkQ29tcG9uZW50LmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgIH0KLSAgICAKLSAgICBpZiAoaXNWYWxpZCgpICYmIHhzZE1vZGVsICE9IG51bGwpCi0gICAgewotICAJCVhTREdyYXBoVmlld2VyRGlhbG9nIGRpYWxvZyA9IG5ldyBYU0RHcmFwaFZpZXdlckRpYWxvZyhQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldFNoZWxsKCksIHRpdGxlLCBpbmZvLCB4c2RNb2RlbCwgIm9yZy5lY2xpcHNlLndzdC53c2RsLnVpLnByZXZpZXciKTsKLSAgCQlkaWFsb2cuc2V0T3BlbkV4dGVybmFsRWRpdG9yKHRoaXMpOwotICAgICAgZGlhbG9nLm9wZW4oKTsKLSAgICB9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL1dTRExBZGFwdGVyRmFjdG9yeUhlbHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL1dTRExBZGFwdGVyRmFjdG9yeUhlbHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODc0YzI3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9XU0RMQWRhcHRlckZhY3RvcnlIZWxwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy5XU0RMQWRhcHRlckZhY3Rvcnk7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMQWRhcHRlckZhY3RvcnlIZWxwZXIgewotCXByaXZhdGUgc3RhdGljIFdTRExBZGFwdGVyRmFjdG9yeUhlbHBlciBpbnN0YW5jZTsKLQkKLQlwcml2YXRlIEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5OwotCQotCXB1YmxpYyBzdGF0aWMgV1NETEFkYXB0ZXJGYWN0b3J5SGVscGVyIGdldEluc3RhbmNlKCkgewotCQlpZiAoaW5zdGFuY2UgPT0gbnVsbCkgewotCQkJaW5zdGFuY2UgPSBuZXcgV1NETEFkYXB0ZXJGYWN0b3J5SGVscGVyKCk7Ci0JCX0KLQkJCi0JCXJldHVybiBpbnN0YW5jZTsKLQl9Ci0JCi0JcHVibGljIEFkYXB0ZXIgYWRhcHQoTm90aWZpZXIgdGFyZ2V0KSB7Ci0JCUFkYXB0ZXJGYWN0b3J5IGZhY3RvcnkgPSBnZXRXU0RMQWRhcHRlckZhY3RvcnkoKTsKLQkJcmV0dXJuIGZhY3RvcnkuYWRhcHQodGFyZ2V0LCBmYWN0b3J5KTsKLQl9Ci0JCi0JcHVibGljIEFkYXB0ZXJGYWN0b3J5IGdldFdTRExBZGFwdGVyRmFjdG9yeSgpIHsKLQkJaWYgKGFkYXB0ZXJGYWN0b3J5ID09IG51bGwpIHsKLQkJCWFkYXB0ZXJGYWN0b3J5ID0gbmV3IFdTRExBZGFwdGVyRmFjdG9yeSgpOwotCQl9Ci0JCXJldHVybiBhZGFwdGVyRmFjdG9yeTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0V1NETEFkYXB0ZXJGYWN0b3J5KEFkYXB0ZXJGYWN0b3J5IGZhY3RvcnkpIHsKLQkJYWRhcHRlckZhY3RvcnkgPSBmYWN0b3J5OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9XU0RMRWRpdG9yVXRpbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL1dTRExFZGl0b3JVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5ZmE4YzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL1dTRExFZGl0b3JVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWw7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmxlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5UeXBlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5leHRlbnNpb25zLkV4dGVuc2libGVUeXBlU3lzdGVtUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZXh0ZW5zaW9ucy5JVHlwZVN5c3RlbVByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50czsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnhtbC5zYXguQXR0cmlidXRlczsKLWltcG9ydCBvcmcueG1sLnNheC5JbnB1dFNvdXJjZTsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnhtbC5zYXguWE1MUmVhZGVyOwotaW1wb3J0IG9yZy54bWwuc2F4LmhlbHBlcnMuRGVmYXVsdEhhbmRsZXI7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMRWRpdG9yVXRpbCBleHRlbmRzIFdTRExDb25zdGFudHMgewotCXByb3RlY3RlZCBzdGF0aWMgV1NETEVkaXRvclV0aWwgaW5zdGFuY2U7Ci0JcHJvdGVjdGVkIE5vZGVBc3NvY2lhdGlvbk1hbmFnZXIgbm9kZUFzc29jaWF0aW9uTWFuYWdlciA9IG5ldyBOb2RlQXNzb2NpYXRpb25NYW5hZ2VyKCk7Ci0KLQlwcm90ZWN0ZWQgSGFzaE1hcCBlbGVtZW50TmFtZVRvVHlwZU1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFTEVNRU5UID0gMTQ7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVFlQRSA9IDE1OwotCi0JcHVibGljIHN0YXRpYyBXU0RMRWRpdG9yVXRpbCBnZXRJbnN0YW5jZSgpIHsKLQkJaWYgKGluc3RhbmNlID09IG51bGwpIHsKLQkJCWluc3RhbmNlID0gbmV3IFdTRExFZGl0b3JVdGlsKCk7Ci0JCX0KLQkJcmV0dXJuIGluc3RhbmNlOwotCX0KLQotCXB1YmxpYyBXU0RMRWRpdG9yVXRpbCgpIHsKLQkJZWxlbWVudE5hbWVUb1R5cGVNYXAucHV0KEJJTkRJTkdfRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKEJJTkRJTkcpKTsKLQkJZWxlbWVudE5hbWVUb1R5cGVNYXAucHV0KERFRklOSVRJT05fRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKERFRklOSVRJT04pKTsKLQkJZWxlbWVudE5hbWVUb1R5cGVNYXAucHV0KERPQ1VNRU5UQVRJT05fRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKERPQ1VNRU5UQVRJT04pKTsKLQkJZWxlbWVudE5hbWVUb1R5cGVNYXAucHV0KEZBVUxUX0VMRU1FTlRfVEFHLCBuZXcgSW50ZWdlcihGQVVMVCkpOwotCQllbGVtZW50TmFtZVRvVHlwZU1hcC5wdXQoSU1QT1JUX0VMRU1FTlRfVEFHLCBuZXcgSW50ZWdlcihJTVBPUlQpKTsKLQkJZWxlbWVudE5hbWVUb1R5cGVNYXAucHV0KElOUFVUX0VMRU1FTlRfVEFHLCBuZXcgSW50ZWdlcihJTlBVVCkpOwotCQllbGVtZW50TmFtZVRvVHlwZU1hcC5wdXQoTUVTU0FHRV9FTEVNRU5UX1RBRywgbmV3IEludGVnZXIoTUVTU0FHRSkpOwotCQllbGVtZW50TmFtZVRvVHlwZU1hcC5wdXQoT1BFUkFUSU9OX0VMRU1FTlRfVEFHLCBuZXcgSW50ZWdlcihPUEVSQVRJT04pKTsKLQkJZWxlbWVudE5hbWVUb1R5cGVNYXAucHV0KE9VVFBVVF9FTEVNRU5UX1RBRywgbmV3IEludGVnZXIoT1VUUFVUKSk7Ci0JCWVsZW1lbnROYW1lVG9UeXBlTWFwLnB1dChQQVJUX0VMRU1FTlRfVEFHLCBuZXcgSW50ZWdlcihQQVJUKSk7Ci0JCWVsZW1lbnROYW1lVG9UeXBlTWFwLnB1dChQT1JUX0VMRU1FTlRfVEFHLCBuZXcgSW50ZWdlcihQT1JUKSk7Ci0JCWVsZW1lbnROYW1lVG9UeXBlTWFwLnB1dChQT1JUX1RZUEVfRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKFBPUlRfVFlQRSkpOwotCQllbGVtZW50TmFtZVRvVHlwZU1hcC5wdXQoU0VSVklDRV9FTEVNRU5UX1RBRywgbmV3IEludGVnZXIoU0VSVklDRSkpOwotCQllbGVtZW50TmFtZVRvVHlwZU1hcC5wdXQoVFlQRVNfRUxFTUVOVF9UQUcsIG5ldyBJbnRlZ2VyKFRZUEVTKSk7Ci0JfQotCi0JcHVibGljIGludCBnZXRXU0RMVHlwZShFbGVtZW50IGVsZW1lbnQpIHsKLQkJaW50IHJlc3VsdCA9IC0xOwotCi0JCUludGVnZXIgaW50ZWdlciA9IChJbnRlZ2VyKSBlbGVtZW50TmFtZVRvVHlwZU1hcC5nZXQoZWxlbWVudC5nZXRMb2NhbE5hbWUoKSk7Ci0JCWlmIChpbnRlZ2VyICE9IG51bGwpIHsKLQkJCXJlc3VsdCA9IGludGVnZXIuaW50VmFsdWUoKTsKLQkJfQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCXByb3RlY3RlZCBMaXN0IGdldFBhcmVudEVsZW1lbnRDaGFpbihFbGVtZW50IGVsZW1lbnQpIHsKLQkJTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCQl3aGlsZSAoZWxlbWVudCAhPSBudWxsKSB7Ci0JCQlsaXN0LmFkZCgwLCBlbGVtZW50KTsKLQkJCU5vZGUgbm9kZSA9IGVsZW1lbnQuZ2V0UGFyZW50Tm9kZSgpOwotCQkJZWxlbWVudCA9IChub2RlICE9IG51bGwgJiYgbm9kZS5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFKSA/IChFbGVtZW50KSBub2RlIDogbnVsbDsKLQkJfQotCQlyZXR1cm4gbGlzdDsKLQl9Ci0KLQlwdWJsaWMgT2JqZWN0IGZpbmRNb2RlbE9iamVjdEZvckVsZW1lbnQoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBFbGVtZW50IHRhcmdldEVsZW1lbnQpIHsKLQkJT2JqZWN0IG8gPSBub2RlQXNzb2NpYXRpb25NYW5hZ2VyLmdldE1vZGVsT2JqZWN0Rm9yTm9kZShkZWZpbml0aW9uLCB0YXJnZXRFbGVtZW50KTsKLQkJcmV0dXJuIG87Ci0JfQotCi0JcHVibGljIEVsZW1lbnQgZ2V0RWxlbWVudEZvck9iamVjdChPYmplY3QgbykgewotCQlyZXR1cm4gKChvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudCkgbykuZ2V0RWxlbWVudCgpOwotCX0KLQotCXB1YmxpYyBOb2RlIGdldE5vZGVGb3JPYmplY3QoT2JqZWN0IG8pIHsKLQkJcmV0dXJuIG5vZGVBc3NvY2lhdGlvbk1hbmFnZXIuZ2V0Tm9kZShvKTsKLQl9Ci0KLQkvLyBQcm92aWRlIGEgbWFwcGluZyBiZXR3ZWVuIERlZmluaXRpb25zIGFuZCBJVHlwZVN5c3RlbVByb3ZpZGVycwotLy8gcHJpdmF0ZSBIYXNodGFibGUgdHlwZVN5c3RlbVByb3ZpZGVycyA9IG5ldyBIYXNodGFibGUoKTsKLQlwcml2YXRlIElUeXBlU3lzdGVtUHJvdmlkZXIgdHlwZVN5c3RlbVByb3ZpZGVyOwotCi0JcHVibGljIElUeXBlU3lzdGVtUHJvdmlkZXIgZ2V0VHlwZVN5c3RlbVByb3ZpZGVyKERlZmluaXRpb24gZGVmaW5pdGlvbikgewotCQlpZiAodHlwZVN5c3RlbVByb3ZpZGVyID09IG51bGwpIHsKLQkJCXR5cGVTeXN0ZW1Qcm92aWRlciA9IG5ldyBFeHRlbnNpYmxlVHlwZVN5c3RlbVByb3ZpZGVyKCk7Ci0JCX0KLQkJcmV0dXJuIHR5cGVTeXN0ZW1Qcm92aWRlcjsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRUeXBlU3lzdGVtUHJvdmlkZXIoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBJVHlwZVN5c3RlbVByb3ZpZGVyIHR5cGVTeXN0ZW1Qcm92aWRlcikgewotCQkvLyB0eXBlU3lzdGVtUHJvdmlkZXJzLnB1dChkZWZpbml0aW9uLHR5cGVTeXN0ZW1Qcm92aWRlcik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBRTmFtZSBjcmVhdGVRTmFtZShEZWZpbml0aW9uIGRlZmluaXRpb24sIFN0cmluZyBwcmVmaXhlZE5hbWUpIHsKLQkJUU5hbWUgcW5hbWUgPSBudWxsOwotCQlpZiAocHJlZml4ZWROYW1lICE9IG51bGwpIHsKLQkJCWludCBpbmRleCA9IHByZWZpeGVkTmFtZS5pbmRleE9mKCI6Iik7IC8vJE5PTi1OTFMtMSQKLS8vIFN0cmluZyBwcmVmaXggPSAoaW5kZXggPT0gLTEpID8gbnVsbCA6IHByZWZpeGVkTmFtZS5zdWJzdHJpbmcoMCwgaW5kZXgpOwotCQkJU3RyaW5nIHByZWZpeCA9IChpbmRleCA9PSAtMSkgPyAiIiA6IHByZWZpeGVkTmFtZS5zdWJzdHJpbmcoMCwgaW5kZXgpOwotCQkJaWYgKHByZWZpeCAhPSBudWxsKSB7Ci0JCQkJU3RyaW5nIG5hbWVzcGFjZSA9IGRlZmluaXRpb24uZ2V0TmFtZXNwYWNlKHByZWZpeCk7Ci0JCQkJaWYgKG5hbWVzcGFjZSAhPSBudWxsKSB7Ci0JCQkJCVN0cmluZyBsb2NhbFBhcnQgPSBwcmVmaXhlZE5hbWUuc3Vic3RyaW5nKGluZGV4ICsgMSk7Ci0JCQkJCXFuYW1lID0gbmV3IFFOYW1lKG5hbWVzcGFjZSwgbG9jYWxQYXJ0KTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIHFuYW1lOwotCX0KLQotCXB1YmxpYyBMaXN0IGdldEV4dGVuc2liaWxpdHlFbGVtZW50Tm9kZXMoRXh0ZW5zaWJsZUVsZW1lbnQgZXh0ZW5zaWJsZUVsZW1lbnQpIHsKLQkJLy8gRm9yIFR5cGVzLCBJIG5lZWQgdG8gZ2V0IGFsbCB0aGUgc2NoZW1hcwotCQlpZiAoZXh0ZW5zaWJsZUVsZW1lbnQgaW5zdGFuY2VvZiBUeXBlcykgewotCQkJVHlwZXMgeHNkRUUgPSAoVHlwZXMpIGV4dGVuc2libGVFbGVtZW50OwotCQkJcmV0dXJuIHhzZEVFLmdldFNjaGVtYXMoKTsKLQkJfQotCQkvKgotCQkgKiBMaXN0IGNoaWxkTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJICogCi0JCSAqIEVsZW1lbnQgcGFyZW50RWxlbWVudCA9IGdldEVsZW1lbnRGb3JPYmplY3QoZXh0ZW5zaWJsZUVsZW1lbnQpOyBpZgotCQkgKiAocGFyZW50RWxlbWVudCAhPSBudWxsKSB7Ci0JCSAqIAotCQkgKiBOb2RlTGlzdCBub2RlTGlzdCA9IHBhcmVudEVsZW1lbnQuZ2V0Q2hpbGROb2RlcygpOyBpbnQKLQkJICogbm9kZUxpc3RMZW5ndGggPSBub2RlTGlzdC5nZXRMZW5ndGgoKTsgZm9yIChpbnQgaSA9IDA7IGkgPAotCQkgKiBub2RlTGlzdExlbmd0aDsgaSsrKSB7IGNoaWxkTGlzdC5hZGQobm9kZUxpc3QuaXRlbShpKSk7IH0gSGFzaE1hcAotCQkgKiBleHRlbnNpYmxlRWxlbWVudFRhYmxlID0gbmV3IEhhc2hNYXAoKTsgZm9yIChJdGVyYXRvciBpID0KLQkJICogZXh0ZW5zaWJsZUVsZW1lbnQuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0JCSAqIGkuaGFzTmV4dCgpOykgeyBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXR5RWxlbWVudCA9Ci0JCSAqIChFeHRlbnNpYmlsaXR5RWxlbWVudClpLm5leHQoKTsgaWYgKGV4dGVuc2liaWxpdHlFbGVtZW50ICE9IG51bGwpIHsKLQkJICogRWxlbWVudCBlbGVtZW50ID0gZ2V0RWxlbWVudEZvck9iamVjdChleHRlbnNpYmlsaXR5RWxlbWVudCk7IGlmCi0JCSAqIChlbGVtZW50ICE9IG51bGwpIHsgZXh0ZW5zaWJsZUVsZW1lbnRUYWJsZS5wdXQoZWxlbWVudCwgZWxlbWVudCk7IH0gfSB9Ci0JCSAqIAotCQkgKiBmb3IgKEl0ZXJhdG9yIGkgPSBjaGlsZExpc3QuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7IE9iamVjdCBvID0KLQkJICogaS5uZXh0KCk7IGlmIChleHRlbnNpYmxlRWxlbWVudFRhYmxlLmdldChvKSA9PSBudWxsKSB7IGkucmVtb3ZlKCk7IH0gfSB9Ci0JCSAqIHJldHVybiBjaGlsZExpc3Q7Ci0JCSAqLwotCQlyZXR1cm4gZXh0ZW5zaWJsZUVsZW1lbnQuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotCX0KLQotCS8qCi0JICogUmV0dXJucyBhIGxpc3Qgb2YgJ2NoaWxkcmVuJyBvZiB0aGUgZ2l2ZW4gb2JqZWN0IG1vZGVsIChXU0RMRWxlbWVudCkuCi0JICovCi0JcHVibGljIHN0YXRpYyBMaXN0IGdldE1vZGVsR3JhcGhWaWV3Q2hpbGRyZW4oT2JqZWN0IG9iamVjdCkgewotCQlMaXN0IGNoaWxkTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQotCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgUG9ydFR5cGUpIHsKLQkJCVBvcnRUeXBlIHBvcnRUeXBlID0gKFBvcnRUeXBlKSBvYmplY3Q7Ci0JCQljaGlsZExpc3QuYWRkQWxsKHBvcnRUeXBlLmdldE9wZXJhdGlvbnMoKSk7Ci0JCX0KLQkJZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgT3BlcmF0aW9uKSB7Ci0JCQlPcGVyYXRpb24gb3BlcmF0aW9uID0gKE9wZXJhdGlvbikgb2JqZWN0OwotCi0JCQlpZiAob3BlcmF0aW9uLmdldEVJbnB1dCgpICE9IG51bGwpIHsKLQkJCQljaGlsZExpc3QuYWRkKG9wZXJhdGlvbi5nZXRFSW5wdXQoKSk7Ci0JCQl9Ci0JCQlpZiAob3BlcmF0aW9uLmdldEVPdXRwdXQoKSAhPSBudWxsKSB7Ci0JCQkJY2hpbGRMaXN0LmFkZChvcGVyYXRpb24uZ2V0RU91dHB1dCgpKTsKLQkJCX0KLQkJCWNoaWxkTGlzdC5hZGRBbGwob3BlcmF0aW9uLmdldEZhdWx0cygpLnZhbHVlcygpKTsKLQkJfQotCQllbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBNZXNzYWdlUmVmZXJlbmNlKSB7Ci0JCQlNZXNzYWdlUmVmZXJlbmNlIG1lc3NhZ2VSZWZlcmVuY2UgPSAoTWVzc2FnZVJlZmVyZW5jZSkgb2JqZWN0OwotCQkJY2hpbGRMaXN0LmFkZChtZXNzYWdlUmVmZXJlbmNlLmdldEVNZXNzYWdlKCkpOwotCQl9Ci0KLQkJcmV0dXJuIGNoaWxkTGlzdDsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRUYXJnZXROYW1lc3BhY2VVUklGb3JTY2hlbWEoU3RyaW5nIHVyaSkgewotCQlTdHJpbmcgcmVzdWx0ID0gbnVsbDsKLQkJdHJ5IHsKLQkJCVVSTCB1cmwgPSBuZXcgVVJMKHVyaSk7Ci0JCQlJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IHVybC5vcGVuU3RyZWFtKCk7Ci0JCQlyZXN1bHQgPSBXU0RMRWRpdG9yVXRpbC5nZXRUYXJnZXROYW1lc3BhY2VVUklGb3JTY2hlbWEoaW5wdXRTdHJlYW0pOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0VGFyZ2V0TmFtZXNwYWNlVVJJRm9yU2NoZW1hKElucHV0U3RyZWFtIGlucHV0KSB7Ci0JCVRhcmdldE5hbWVzcGFjZVVSSUNvbnRlbnRIYW5kbGVyIGhhbmRsZXIgPSBuZXcgVGFyZ2V0TmFtZXNwYWNlVVJJQ29udGVudEhhbmRsZXIoKTsKLQkJQ2xhc3NMb2FkZXIgcHJldkNsYXNzTG9hZGVyID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKTsKLQkJVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zZXRDb250ZXh0Q2xhc3NMb2FkZXIoV1NETEVkaXRvclV0aWwuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKSk7Ci0JCXRyeSB7Ci0JCQlYTUxSZWFkZXIgcmVhZGVyID0gb3JnLnhtbC5zYXguaGVscGVycy5YTUxSZWFkZXJGYWN0b3J5LmNyZWF0ZVhNTFJlYWRlcigpOwotCQkJcmVhZGVyLnNldENvbnRlbnRIYW5kbGVyKGhhbmRsZXIpOwotCQkJcmVhZGVyLnBhcnNlKG5ldyBJbnB1dFNvdXJjZShpbnB1dCkpOwotCQl9Ci0JCWNhdGNoIChTdG9wUGFyc2VFeGNlcHRpb24gZSkgewotCQkJLy8gdGhpcyBpcyBhIG5vcm1hbCBleGNlcHRpb24gdG8gc3RvcCBwYXJzaW5nIGVhcmx5LAotCQkJLy8gd2hlbiBpbmZvIGlzIGZvdW5kLCBzbyB3ZSBjYW4gc2FmZWx5IGlnbm9yZQotCQl9Ci0JCWNhdGNoIChTQVhFeGNlcHRpb24gZSkgewotCQkJLy8gVE9ETzogdGhlc2Ugc2hvdWxkIGJlIGxvZ2dlZCwgYnV0IHRoZSBvYnZpb3VzIGNob2ljZSwKLQkJCS8vIFdTRExFZGl0b3JQbHVnaW4ubG9nTWVzc2FnZShtZXNzYWdlKSBpcyBhbiBlbXB5IGltcGxlbWVudGF0aW9uLAotCQkJLy8gc28sIGZvciBub3csIHdlJ2xsIGF0IGxlYXN0IHByaW50IG91dC4KLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCS8vIFRPRE86IHRoaXMgc2hvdWxkIGJlIGxvZ2dlZCwgYnV0IHRoZSBvYnZpb3VzIGNob2ljZSwKLQkJCS8vIFdTRExFZGl0b3JQbHVnaW4ubG9nTWVzc2FnZShtZXNzYWdlKSBpcyBhbiBlbXB5IGltcGxlbWVudGF0aW9uLAotCQkJLy8gc28sIGZvciBub3csIHdlJ2xsIGF0IGxlYXN0IHByaW50IG91dC4KLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihwcmV2Q2xhc3NMb2FkZXIpOwotCQl9Ci0JCXJldHVybiBoYW5kbGVyLnRhcmdldE5hbWVzcGFjZVVSSTsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIGlzIGEgc3BlY2lhbCBleGNlcHRpb24gdGhhdCBpcyB1c2VkIHRvIHN0b3AgcGFyc2luZyB3aGVuIHJlcXVpcmVkCi0JICogaW5mb3JtYXRpb24gaXMgZm91bmQuCi0JICovCi0Jc3RhdGljIGNsYXNzIFN0b3BQYXJzZUV4Y2VwdGlvbiBleHRlbmRzIG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbiB7Ci0JCXN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQotCQkvKioKLQkJICogQ29uc3RydWN0b3IgU3RvcFBhcnNlRXhjZXB0aW9uLgotCQkgKi8KLQkJU3RvcFBhcnNlRXhjZXB0aW9uKCkgewotCQkJc3VwZXIoInRhcmdldG5hbWVzcGFjZSBmb3VuZCwgbm8gbmVlZCB0byBjb250aW51ZSB0aGUgcGFyc2UiKTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCBzdGF0aWMgY2xhc3MgVGFyZ2V0TmFtZXNwYWNlVVJJQ29udGVudEhhbmRsZXIgZXh0ZW5kcyBEZWZhdWx0SGFuZGxlciB7Ci0KLQotCQlwdWJsaWMgU3RyaW5nIHRhcmdldE5hbWVzcGFjZVVSSTsKLQotCQlwdWJsaWMgdm9pZCBzdGFydEVsZW1lbnQoU3RyaW5nIHVyaSwgU3RyaW5nIGxvY2FsTmFtZSwgU3RyaW5nIHFOYW1lLCBBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpIHRocm93cyBTQVhFeGNlcHRpb24gewotCQkJaWYgKGxvY2FsTmFtZS5lcXVhbHMoInNjaGVtYSIpIHx8IGxvY2FsTmFtZS5lcXVhbHMoImRlZmluaXRpb25zIikpIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJewotCQkJCWludCBuQXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMuZ2V0TGVuZ3RoKCk7Ci0JCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBuQXR0cmlidXRlczsgaSsrKSB7Ci0JCQkJCWlmIChhdHRyaWJ1dGVzLmdldExvY2FsTmFtZShpKS5lcXVhbHMoInRhcmdldE5hbWVzcGFjZSIpKSAvLyROT04tTkxTLTEkCi0JCQkJCXsKLQkJCQkJCXRhcmdldE5hbWVzcGFjZVVSSSA9IGF0dHJpYnV0ZXMuZ2V0VmFsdWUoaSk7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCXRocm93IG5ldyBTdG9wUGFyc2VFeGNlcHRpb24oKTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9XU0RMUmVzb3VyY2VVdGlsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvV1NETFJlc291cmNlVXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDhjMTYzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9XU0RMUmVzb3VyY2VVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIuaW50ZXJuYWwucHJvdmlzaW9uYWwuVVJJUmVzb2x2ZXJQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlci5pbnRlcm5hbC51dGlsLlVSSUhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5UeXBlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLldTRExFbGVtZW50SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC51dGlsLldTRExNb2RlbExvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hRGlyZWN0aXZlOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotcHVibGljIGNsYXNzIFdTRExSZXNvdXJjZVV0aWwKLXsKLSAgcHVibGljIHN0YXRpYyB2b2lkIHJlbG9hZERpcmVjdGl2ZXMoRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICB7Ci0gICAgUmVzb3VyY2Ugcm9vdFJlc291cmNlID0gZGVmaW5pdGlvbi5lUmVzb3VyY2UoKTsKLSAgICBSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IHJvb3RSZXNvdXJjZS5nZXRSZXNvdXJjZVNldCgpOwotCi0gICAgZm9yIChJdGVyYXRvciBpID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2VzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIFJlc291cmNlIHJlc291cmNlID0gKFJlc291cmNlKSBpLm5leHQoKTsKLSAgICAgIGlmIChyZXNvdXJjZSAhPSByb290UmVzb3VyY2UpCi0gICAgICB7Ci0gICAgICAgIC8vICBUT0RPLi4uIGNvbnNpZGVyIHVubG9hZGluZyB0aGUgcmVzb3VyY2VzICAJCi0gICAgICAgIC8vICByZXNvdXJjZS51bmxvYWQoKTsJCSAgICAgIAotICAgICAgICBpLnJlbW92ZSgpOwotICAgICAgfQotICAgIH0KLSAgICBSZWxvYWREaXJlY3RpdmVWaXNpdG9yIHZpc2l0b3IgPSBuZXcgUmVsb2FkRGlyZWN0aXZlVmlzaXRvcigpOwotICAgIHZpc2l0b3IudmlzaXREZWZpbml0aW9uKGRlZmluaXRpb24pOwotICB9Ci0KLSAgc3RhdGljIGNsYXNzIFJlbG9hZERpcmVjdGl2ZVZpc2l0b3IKLSAgewotCi0gICAgcHVibGljIHZvaWQgdmlzaXRJbXBvcnQoSW1wb3J0IHRoZUltcG9ydCkKLSAgICB7Ci0gICAgICAvLyBmb3JjZSB0aGUgaW1wb3J0IHRvIHJlbG9hZAotICAgICAgRWxlbWVudCBlbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KHRoZUltcG9ydCk7Ci0gICAgICBpZiAoZWxlbWVudCAhPSBudWxsKQotICAgICAgewotICAgICAgICAoKFdTRExFbGVtZW50SW1wbCl0aGVJbXBvcnQpLmVsZW1lbnRDaGFuZ2VkKGVsZW1lbnQpOwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHZpc2l0WFNEU2NoZW1hRGlyZWN0aXZlKFhTRFNjaGVtYURpcmVjdGl2ZSBkaXJlY3RpdmUpCi0gICAgewotICAgICAgLy8gZm9yY2UgdGhlIHNjaGVtYSBkaXJlY3RpdmUgdG8gcmVsb2FkCi0gICAgICBFbGVtZW50IGVsZW1lbnQgPSBkaXJlY3RpdmUuZ2V0RWxlbWVudCgpOwotICAgICAgaWYgKGVsZW1lbnQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZGlyZWN0aXZlLmVsZW1lbnRBdHRyaWJ1dGVzQ2hhbmdlZChlbGVtZW50KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCB2aXNpdERlZmluaXRpb24oRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICAgIHsKLSAgICAgIGlmIChkZWZpbml0aW9uICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IGRlZmluaXRpb24uZ2V0RUltcG9ydHMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgICAgIHsKLSAgICAgICAgICB2aXNpdEltcG9ydCgoSW1wb3J0KSBpLm5leHQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgVHlwZXMgdHlwZXMgPSBkZWZpbml0aW9uLmdldEVUeXBlcygpOwotICAgICAgICBpZiAodHlwZXMgIT0gbnVsbCkKLSAgICAgICAgewotCi0gICAgICAgICAgZm9yIChJdGVyYXRvciBpID0gdHlwZXMuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBPYmplY3QgbyA9IGkubmV4dCgpOwotICAgICAgICAgICAgaWYgKG8gaW5zdGFuY2VvZiBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZSA9IChYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCkgbzsKLSAgICAgICAgICAgICAgaWYgKGUuZ2V0U2NoZW1hKCkgIT0gbnVsbCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZpc2l0U2NoZW1hKGUuZ2V0U2NoZW1hKCkpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgdmlzaXRTY2hlbWEoWFNEU2NoZW1hIHNjaGVtYSkKLSAgICB7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBzY2hlbWEuZ2V0Q29udGVudHMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIE9iamVjdCBvID0gaS5uZXh0KCk7Ci0gICAgICAgIGlmIChvIGluc3RhbmNlb2YgWFNEU2NoZW1hRGlyZWN0aXZlKQotICAgICAgICB7Ci0gICAgICAgICAgdmlzaXRYU0RTY2hlbWFEaXJlY3RpdmUoKFhTRFNjaGVtYURpcmVjdGl2ZSkgbyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotCi0gIHB1YmxpYyBzdGF0aWMgY2xhc3MgSW50ZXJuYWxVUklSZXNvbHZlciBpbXBsZW1lbnRzIFdTRExNb2RlbExvY2F0b3IKLSAgewotICAgIC8vSWRSZXNvbHZlciBpZFJlc29sdmVyID0gbmV3IElkUmVzb2x2ZXJJbXBsKG51bGwsIHRydWUpOwotICAgIG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIuaW50ZXJuYWwucHJvdmlzaW9uYWwuVVJJUmVzb2x2ZXIgcmVzb2x2ZXIgPSBVUklSZXNvbHZlclBsdWdpbi5jcmVhdGVSZXNvbHZlcigpOwotCi0gICAgSW50ZXJuYWxVUklSZXNvbHZlcigpCi0gICAgeyAgCi0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyByZXNvbHZlVVJJKFN0cmluZyBiYXNlTG9jYXRpb24sIFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBsb2NhdGlvbikKLSAgICB7Ci0gICAgICBTdHJpbmcgcmVzb2x2ZWRMb2NhdGlvbiA9IHJlc29sdmVyLnJlc29sdmUoYmFzZUxvY2F0aW9uLCBuYW1lc3BhY2UsIGxvY2F0aW9uKTsKLQotICAgICAgLy8gaGVyZSdzIGFuIHVnbHkgaGFjay4uLiBQbGF0Zm9ybS5yZXNvbHZlKCkgcmV0dXJucyBXaW5kb3dzIGZpbGVzIHdpdGggdGhlIHBhdHRlcm4gImZpbGU6RDovaGVsbG8ueHNkIgotICAgICAgLy8gYnV0IEVNRidzIFVSSSBjbGFzcyBleHBlY3RzIGEgcGF0dGVybiBsaWtlIHRoaXMgImZpbGU6Ly8vRDovaGVsbG8ueHNkIgotICAgICAgLy8gICAgICAgIAotICAgICAgaWYgKHJlc29sdmVkTG9jYXRpb24gIT0gbnVsbCkKLSAgICAgIHsKLQkJU3RyaW5nIGZpbGVQcm90b2NvbCA9ICJmaWxlOiI7ICAgICAgCSAvLyROT04tTkxTLTEkCi0gICAgICAgIGlmIChyZXNvbHZlZExvY2F0aW9uLnN0YXJ0c1dpdGgoZmlsZVByb3RvY29sKSAmJiAhcmVzb2x2ZWRMb2NhdGlvbi5zdGFydHNXaXRoKGZpbGVQcm90b2NvbCArICIvIikpIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgewotICAgICAgICAgIHJlc29sdmVkTG9jYXRpb24gPSByZXNvbHZlZExvY2F0aW9uLnN1YnN0cmluZyhmaWxlUHJvdG9jb2wubGVuZ3RoKCkpOwotICAgICAgICB9Ci0gICAgICAgIHJlc29sdmVkTG9jYXRpb24gPSBVUklIZWxwZXIuYWRkSW1wbGllZEZpbGVQcm90b2NvbChyZXNvbHZlZExvY2F0aW9uKTsKLSAgICAgIH0KLSAgICAgIC8vIGVuZCB1Z2x5IGhhY2sKLSAgICAgIHJldHVybiByZXNvbHZlZExvY2F0aW9uOwotICAgIH0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9XU0RMU2V0Q29tcG9uZW50SGVscGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvV1NETFNldENvbXBvbmVudEhlbHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwN2I0NzIzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9XU0RMU2V0Q29tcG9uZW50SGVscGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWw7Ci0KLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLkNvbXBvbmVudFNwZWNpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlci5pbnRlcm5hbC51dGlsLlVSSUhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5JbXBvcnRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFjdGlvbnMuQWRkRWxlbWVudERlY2xhcmF0aW9uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFjdGlvbnMuQWRkSW1wb3J0QWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFjdGlvbnMuQWRkV1NJU2NoZW1hSW1wb3J0QWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNESW1wb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYUNvbnRlbnQ7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMU2V0Q29tcG9uZW50SGVscGVyIHsKLSAgICBwcml2YXRlIERlZmluaXRpb24gZGVmaW5pdGlvbjsKLSAgICBwcml2YXRlIElGaWxlIGN1cnJlbnRJRmlsZTsKLSAgICAKLSAgICBwdWJsaWMgV1NETFNldENvbXBvbmVudEhlbHBlcihJRmlsZSBpRmlsZSwgRGVmaW5pdGlvbiBkZWZpbml0aW9uKSB7Ci0gICAgICAgIGN1cnJlbnRJRmlsZSA9IGlGaWxlOwotICAgICAgICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBzZXRXU0RMQ29tcG9uZW50KFdTRExFbGVtZW50IGlucHV0RWxlbWVudCwgU3RyaW5nIHByb3BlcnR5LCBDb21wb25lbnRTcGVjaWZpY2F0aW9uIHNwZWMpIHsKLSAgICAgICAgYWRkSW1wb3J0SWZOZWNlc3Nhcnkoc3BlYyk7Ci0gICAgICAgIFN0cmluZyBjb21wb25lbnRPYmplY3QgPSBnZXRQcmVmaXhlZENvbXBvbmVudE5hbWUoc3BlYyk7Ci0KLSAgICAgICAgb3JnLnczYy5kb20uRWxlbWVudCB3c2RsRWxlbWVudCA9IGlucHV0RWxlbWVudC5nZXRFbGVtZW50KCk7Ci0gICAgICAgIAotICAgICAgICB3c2RsRWxlbWVudC5zZXRBdHRyaWJ1dGUocHJvcGVydHksIGNvbXBvbmVudE9iamVjdCk7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgc2V0WFNEVHlwZUNvbXBvbmVudChQYXJ0IHBhcnQsIENvbXBvbmVudFNwZWNpZmljYXRpb24gc3BlYykgewotICAgICAgICBpZiAoc3BlYy5nZXROYW1lKCkgIT0gbnVsbCAmJiBzcGVjLmdldFF1YWxpZmllcigpICE9IG51bGwpIHsKLSAgICAgICAgICAgIGFkZEltcG9ydElmTmVjZXNzYXJ5KHNwZWMpOwotICAgICAgICB9Ci0gICAgICAgIFN0cmluZyBjb21wb25lbnRPYmplY3QgPSBnZXRQcmVmaXhlZENvbXBvbmVudE5hbWUoc3BlYyk7Ci0gICAgICAgIAotICAgICAgICBDb21wb25lbnRSZWZlcmVuY2VVdGlsLnNldENvbXBvbmVudFJlZmVyZW5jZSgoUGFydCkgcGFydCwgdHJ1ZSwgY29tcG9uZW50T2JqZWN0KTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgc2V0WFNERWxlbWVudENvbXBvbmVudChQYXJ0IHBhcnQsIENvbXBvbmVudFNwZWNpZmljYXRpb24gc3BlYykgewotICAgICAgICBhZGRJbXBvcnRJZk5lY2Vzc2FyeShzcGVjKTsKLSAgICAgICAgU3RyaW5nIGNvbXBvbmVudE9iamVjdCA9IGdldFByZWZpeGVkQ29tcG9uZW50TmFtZShzcGVjKTsKLSAgICAgICAgCi0gICAgICAgIENvbXBvbmVudFJlZmVyZW5jZVV0aWwuc2V0Q29tcG9uZW50UmVmZXJlbmNlKChQYXJ0KSBwYXJ0LCBmYWxzZSwgY29tcG9uZW50T2JqZWN0KTsKLSAgICB9Ci0gICAgCi0gICAgLyoKLSAgICAgKiBSZXR1cm4gdGhlIHByZWZpeGVkIGNvbXBvbmVudCBuYW1lIGRlc2NyaWJlZCBieSB0aGUgZ2l2ZW4KLSAgICAgKiBDb21wb25lbnRTcGVjaWZpY2F0aW9uIG9iamVjdC4KLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGdldFByZWZpeGVkQ29tcG9uZW50TmFtZShDb21wb25lbnRTcGVjaWZpY2F0aW9uIHNwZWMpIHsKLSAgICAgICAgU3RyaW5nIG5hbWUgPSAoU3RyaW5nKSBzcGVjLmdldE5hbWUoKTsKLSAgICAgICAgTGlzdCBwcmVmaXhlcyA9IGdldFByZWZpeGVzKGRlZmluaXRpb24sIHNwZWMuZ2V0UXVhbGlmaWVyKCkpOwotICAgICAgICBpZiAocHJlZml4ZXMuc2l6ZSgpID4gMCkgewotICAgICAgICAgICAgbmFtZSA9IHByZWZpeGVzLmdldCgwKSArICI6IiArIG5hbWU7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIG5hbWU7Ci0gICAgfSAgICAgICAgIAotICAgICAgICAgIAotICAgIHByaXZhdGUgTGlzdCBnZXRQcmVmaXhlcyhEZWZpbml0aW9uIGRlZmluaXRpb24sIFN0cmluZyBuYW1lc3BhY2UpIHsKLSAgICAgICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICBNYXAgbWFwID0gZGVmaW5pdGlvbi5nZXROYW1lc3BhY2VzKCk7Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IG1hcC5rZXlTZXQoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLSAgICAgICAgICAgIFN0cmluZyBwcmVmaXggPSAoU3RyaW5nKSBpLm5leHQoKTsKLSAgICAgICAgICAgIFN0cmluZyB0aGVOYW1lc3BhY2UgPSAoU3RyaW5nKSBtYXAuZ2V0KHByZWZpeCk7Ci0gICAgICAgICAgICBpZiAodGhlTmFtZXNwYWNlICE9IG51bGwgJiYgdGhlTmFtZXNwYWNlLmVxdWFscyhuYW1lc3BhY2UpKSB7Ci0gICAgICAgICAgICAgICAgbGlzdC5hZGQocHJlZml4KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbGlzdDsKLSAgICB9Ci0KLSAgICAKLSAgICBwcml2YXRlIHZvaWQgYWRkSW1wb3J0SWZOZWNlc3NhcnkoQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBzcGVjKSB7Ci0gICAgICAgIGJvb2xlYW4gZm91bmRNYXRjaCA9IGZhbHNlOwotICAgICAgICAKLSAgICAgICAgLy8gQ2hlY2sgaXRzZWxmCi0gICAgICAgIFBhdGggY3VycmVudEZpbGVMb2NhdGlvbiA9IG5ldyBQYXRoKGN1cnJlbnRJRmlsZS5nZXRMb2NhdGlvbigpLnRvU3RyaW5nKCkpOwotICAgICAgICBpZiAoc3BlYy5nZXRGaWxlKCkgPT0gbnVsbCB8fCBjdXJyZW50RmlsZUxvY2F0aW9uLmVxdWFscyhzcGVjLmdldEZpbGUoKS5nZXRMb2NhdGlvbigpKSkgewotICAgICAgICAJLy8gaWYgdGhlIENvbXBvbmVudFNwZWNpZmljYXRpb24ncyBnZXRGaWxlKCkgcmV0dXJucyBudWxsLCBmb3JnZXQgYWJvdXQgYWRkaW5nIG5lY2Vzc2FyeSBpbXBvcnRzCi0gICAgICAgICAgICBmb3VuZE1hdGNoID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gQ2hlY2sgcmVndWxhciBJbXBvcnRzCi0gICAgICAgIGlmICghZm91bmRNYXRjaCkgewotICAgICAgICAgICAgSXRlcmF0b3IgaW1wb3J0c0l0ID0gZGVmaW5pdGlvbi5nZXRFSW1wb3J0cygpLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHdoaWxlIChpbXBvcnRzSXQuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGltcG9ydExvY2F0aW9uID0gIiI7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgICAgICBJbXBvcnRJbXBsIGltcG9ydEl0ZW0gPSAoSW1wb3J0SW1wbCkgaW1wb3J0c0l0Lm5leHQoKTsKLSAgICAgICAgICAgICAgICBpbXBvcnRJdGVtLmltcG9ydERlZmluaXRpb25PclNjaGVtYSgpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChpbXBvcnRJdGVtLmdldEVTY2hlbWEoKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBpbXBvcnRJdGVtLmdldEVTY2hlbWEoKTsKLSAgICAgICAgICAgICAgICAgICAgaW1wb3J0TG9jYXRpb24gPSBnZXROb3JtYWxpemVkTG9jYXRpb24oc2NoZW1hLmdldFNjaGVtYUxvY2F0aW9uKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgRGVmaW5pdGlvbiBpbXBvcnREZWZpbml0aW9uID0gaW1wb3J0SXRlbS5nZXRFRGVmaW5pdGlvbigpOwotICAgICAgICAgICAgICAgICAgICBpbXBvcnRMb2NhdGlvbiA9IGdldE5vcm1hbGl6ZWRMb2NhdGlvbihpbXBvcnREZWZpbml0aW9uLmdldExvY2F0aW9uKCkpOyAKLSAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgCi0gICAgCi0gICAgICAgICAgICAgICAgaWYgKHNwZWMuZ2V0RmlsZSgpLmdldExvY2F0aW9uKCkuZXF1YWxzKG5ldyBQYXRoKGltcG9ydExvY2F0aW9uKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgZm91bmRNYXRjaCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gQ2hlY2sgaW5saW5lIFNjaGVtYXMKLSAgICAgICAgaWYgKCFmb3VuZE1hdGNoKSB7Ci0gICAgICAgICAgICBMaXN0IGltcG9ydHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChkZWZpbml0aW9uLmdldEVUeXBlcygpICE9IG51bGwpIHsKLQkgICAgICAgICAgICBJdGVyYXRvciBpdCA9IGRlZmluaXRpb24uZ2V0RVR5cGVzKCkuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0JICAgICAgICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCSAgICAgICAgICAgICAgICBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCBlZUVsZW1lbnQgPSAoWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGl0Lm5leHQoKTsKLQkgICAgICAgICAgICAgICAgWFNEU2NoZW1hIHNjaGVtYSA9IGVlRWxlbWVudC5nZXRTY2hlbWEoKTsKLQkgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5nZXRUYXJnZXROYW1lc3BhY2UoKSA9PSBudWxsIHx8IHNjaGVtYS5nZXRUYXJnZXROYW1lc3BhY2UoKS5lcXVhbHMoIiIpKSB7ICAgICAgICAgICAgICAgICAgICAgLy8kTk9OLU5MUy0xJAotCSAgICAgICAgICAgICAgICAgICAgSXRlcmF0b3IgY29udGVudHMgPSBzY2hlbWEuZ2V0Q29udGVudHMoKS5pdGVyYXRvcigpOwotCSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGNvbnRlbnRzLmhhc05leHQoKSkgewotCSAgICAgICAgICAgICAgICAgICAgICAgIFhTRFNjaGVtYUNvbnRlbnQgY29udGVudCA9IChYU0RTY2hlbWFDb250ZW50KSBjb250ZW50cy5uZXh0KCk7Ci0JICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnQgaW5zdGFuY2VvZiBYU0RJbXBvcnQpIHsKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0cy5hZGQoY29udGVudCk7ICAgICAgICAgICAgIAotCSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQkgICAgICAgICAgICAgICAgICAgIH0KLQkgICAgICAgICAgICAgICAgfQotCSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgSXRlcmF0b3IgaW1wb3J0SXQgPSBpbXBvcnRzLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICB3aGlsZSAoaW1wb3J0SXQuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgWFNESW1wb3J0IGltcG9ydEl0ZW0gPSAoWFNESW1wb3J0KSBpbXBvcnRJdC5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgWFNEU2NoZW1hIHJlc29sdmVkU2NoZW1hID0gaW1wb3J0SXRlbS5nZXRSZXNvbHZlZFNjaGVtYSgpOwotICAgICAgICAgICAgICAgIFN0cmluZyByZXNvbHZlZFN0cmluZyA9IHJlc29sdmVkU2NoZW1hLmdldFNjaGVtYUxvY2F0aW9uKCk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGltcG9ydExvY2F0aW9uID0gZ2V0Tm9ybWFsaXplZExvY2F0aW9uKHJlc29sdmVkU3RyaW5nKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoc3BlYy5nZXRGaWxlKCkuZ2V0TG9jYXRpb24oKS5lcXVhbHMobmV3IFBhdGgoaW1wb3J0TG9jYXRpb24pKSkgewotICAgICAgICAgICAgICAgICAgICBmb3VuZE1hdGNoID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSAgICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoIWZvdW5kTWF0Y2gpIHsKLSAgICAgICAgICAgIGJvb2xlYW4gd3NpU3R5bGVJbXBvcnQgPSBpc1hTRFNjaGVtYUZpbGUoc3BlYyk7Ci0gICAgICAgICAgICBpZiAod3NpU3R5bGVJbXBvcnQpIHsKLSAgICAgICAgICAgICAgICBBZGRFbGVtZW50RGVjbGFyYXRpb25BY3Rpb24gYWN0aW9uID0gbmV3IEFkZEVsZW1lbnREZWNsYXJhdGlvbkFjdGlvbihkZWZpbml0aW9uLCBzcGVjLmdldFF1YWxpZmllcigpLCAieHNkIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgICAgICBhY3Rpb24ucnVuKCk7Ci0gICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgU3RyaW5nIGxvY2F0aW9uID0gVVJJSGVscGVyLmdldFJlbGF0aXZlVVJJKHNwZWMuZ2V0RmlsZSgpLmdldExvY2F0aW9uKCksIGN1cnJlbnRJRmlsZS5nZXRMb2NhdGlvbigpKTsKLSAgICAgICAgICAgICAgICBBZGRXU0lTY2hlbWFJbXBvcnRBY3Rpb24gYWRkSW1wb3J0ID0gbmV3IEFkZFdTSVNjaGVtYUltcG9ydEFjdGlvbihkZWZpbml0aW9uLCBzcGVjLmdldFF1YWxpZmllcigpLCBsb2NhdGlvbik7Ci0gICAgICAgICAgICAgICAgYWRkSW1wb3J0LnJ1bigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIG5ld1NlbGVjdGVkRmlsZUxvYyA9IHNwZWMuZ2V0RmlsZSgpLmdldExvY2F0aW9uKCkudG9PU1N0cmluZygpOwotICAgICAgICAgICAgICAgIFN0cmluZyBjdXJyZW50RmlsZUxvYyA9IGdldE5vcm1hbGl6ZWRMb2NhdGlvbihkZWZpbml0aW9uLmdldExvY2F0aW9uKCkpOwotICAgICAgICAgICAgICAgIFN0cmluZyByZWxhdGl2ZUxvYyA9IENvbXBvbmVudFJlZmVyZW5jZVV0aWwuY29tcHV0ZVJlbGF0aXZlVVJJKG5ld1NlbGVjdGVkRmlsZUxvYywgY3VycmVudEZpbGVMb2MsIHRydWUpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG9yZy53M2MuZG9tLkVsZW1lbnQgZGVmaW5pdGlvbkVsZW1lbnQgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldEVsZW1lbnRGb3JPYmplY3QoZGVmaW5pdGlvbik7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHByZWZpeCA9IGRlZmluaXRpb24uZ2V0UHJlZml4KFdTRExDb25zdGFudHMuV1NETF9OQU1FU1BBQ0VfVVJJKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZXNwYWNlID0gc3BlYy5nZXRRdWFsaWZpZXIoKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBBZGRJbXBvcnRBY3Rpb24gYWRkSW1wb3J0QWN0aW9uID0gbmV3IEFkZEltcG9ydEFjdGlvbihudWxsLCBkZWZpbml0aW9uLCBkZWZpbml0aW9uRWxlbWVudCwgcHJlZml4LCBuYW1lc3BhY2UsIHJlbGF0aXZlTG9jKTsKLSAgICAgICAgICAgICAgICBhZGRJbXBvcnRBY3Rpb24ucnVuKCk7ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgU3RyaW5nIHVuaXF1ZVByZWZpeCA9IGdldFVuaXF1ZVByZWZpeChkZWZpbml0aW9uLCBwcmVmaXgpOyAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGRlZmluaXRpb25FbGVtZW50LnNldEF0dHJpYnV0ZSgieG1sbnM6IiArIHVuaXF1ZVByZWZpeCwgbmFtZXNwYWNlKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIC8qCi0gICAgICogVHJ5IHRvIGRldGVybWluZSBpZiB0aGUgcGFzc2VkIGluIENvbXBvbmVudFNwZWNpZmljYXRpb24gcmVmZXJzIHRvCi0gICAgICogYW4gWFNEIG9yIFdTREwgZmlsZS4gIElmIGl0J3MgYW4gWFNELCByZXR1cm4gdHJ1ZS4KLSAgICAgKi8KLSAgICBwcml2YXRlIGJvb2xlYW4gaXNYU0RTY2hlbWFGaWxlKENvbXBvbmVudFNwZWNpZmljYXRpb24gc3BlYykgewotICAgICAgICBTdHJpbmcgZmlsZUxvY2F0aW9uID0gc3BlYy5nZXRGaWxlKCkuZ2V0TG9jYXRpb24oKS50b09TU3RyaW5nKCk7Ci0gICAgICAgIGludCBwZXJpb2RJbmRleCA9IGZpbGVMb2NhdGlvbi5sYXN0SW5kZXhPZigiLiIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgIAotICAgICAgICBpZiAocGVyaW9kSW5kZXggPiAwKSB7Ci0gICAgICAgICAgICBTdHJpbmcgZXh0ZW5zaW9uID0gZmlsZUxvY2F0aW9uLnN1YnN0cmluZyhwZXJpb2RJbmRleCArIDEpOwotICAgICAgICAgICAgaWYgKGV4dGVuc2lvbi5lcXVhbHNJZ25vcmVDYXNlKCJ4c2QiKSkgeyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgU3RyaW5nIGdldFVuaXF1ZVByZWZpeChEZWZpbml0aW9uIGRlZmluaXRpb24sIFN0cmluZyBpbml0UHJlZml4KSB7Ci0gICAgICBTdHJpbmcgdW5pcXVlUHJlZml4OwotICAgICAgTWFwIG1hcCA9IGRlZmluaXRpb24uZ2V0TmFtZXNwYWNlcygpOwotCi0gICAgICBpZiAoZGVmaW5pdGlvbi5nZXROYW1lc3BhY2UoaW5pdFByZWZpeCkgPT0gbnVsbCkgewotICAgICAgICB1bmlxdWVQcmVmaXggPSBpbml0UHJlZml4OwotICAgICAgfQotICAgICAgZWxzZSB7Ly8gaWYgdXNlZCwgdGhlbiB0cnkgdG8gY3JlYXRlIGEgdW5pcXVlIG9uZQotICAgICAgICBTdHJpbmcgdGVtcFByZWZpeCA9IGluaXRQcmVmaXg7Ci0gICAgICAgIGludCBpID0gMTsKLSAgICAgICAgd2hpbGUobWFwLmNvbnRhaW5zS2V5KHRlbXBQcmVmaXggKyBpKSkgewotICAgICAgICAgIGkrKzsKLSAgICAgICAgfQotICAgICAgICB1bmlxdWVQcmVmaXggPSB0ZW1wUHJlZml4ICsgaTsKLSAgICAgIH0KLSAgICAgIHJldHVybiB1bmlxdWVQcmVmaXg7Ci0gICAgfSAKLSAgICAKLSAgICBwcml2YXRlIFN0cmluZyBnZXROb3JtYWxpemVkTG9jYXRpb24oU3RyaW5nIGxvY2F0aW9uKSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBVUkwgdXJsID0gbmV3IFVSTChsb2NhdGlvbik7Ci0gICAgICAgICAgICBVUkwgcmVzb2x2ZWRVUkwgPSBGaWxlTG9jYXRvci5yZXNvbHZlKHVybCk7Ci0gICAgICAgICAgICBsb2NhdGlvbiA9IHJlc29sdmVkVVJMLmdldFBhdGgoKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBsb2NhdGlvbjsgCi0gICAgICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvWFNEQ29tcG9uZW50SGVscGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvWFNEQ29tcG9uZW50SGVscGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4NzNmOGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC91dGlsL1hTRENvbXBvbmVudEhlbHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlR5cGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmNvbW1hbmRzLkFkZFhTREVsZW1lbnREZWNsYXJhdGlvbkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuY29tbWFuZHMuQWRkWFNEU2NoZW1hQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmNvbW1vbi5jb21tYW5kcy5BZGRYU0RFbGVtZW50Q29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbXBvc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETW9kZWxHcm91cDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEUGFydGljbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2ltcGxlVHlwZURlZmluaXRpb247Ci0KLS8qKgotICogSW5wdXQgY3JlYXRlSW5wdXQoT3BlcmF0aW9uIG9wZXJhdGlvbiwgU3RyaW5nIHN0eWxlKSAtLS0gY3JlYXRlIGRlZmF1bHQgbWVzc2FnZS9wYXJ0L2V0Yy4KLSAqIE9iamVjdCBjcmVhdGVJbnB1dFBhcmFtZXRlcihPcGVyYXRpb24gb3BlcmF0aW9uLCBJbnB1dCBpbnB1dCwgU3R5bGUgc3R5bGUpIC0tCi0gKiAKLSAqIENvbW1hbmQgZ2V0Q3JlYXRlSW5wdXRQYXJhbWV0ZXJDb21tYW5kKE9wZXJhdGlvbiBvcGVyYXRpb24sIElucHV0IGlucHV0LCBTdHlsZSBzdHlsZSkKLSAqIAotICogTWVzc2FnZS9wYXJ0L0VsZW1lbnQKLSAqIE1lc3NhZ2UvcGFydC9FbGVtZW50L3NlcXVlbmNlL0VsZW1lbnQKLSAqICh4KSBNZXNzYWdlL3BhcnQKLSAqLwotcHVibGljIGNsYXNzIFhTRENvbXBvbmVudEhlbHBlciB7Ci0JLyoKLQkgKiBDcmVhdGUgYW4gWFNERWxlbWVudCB3aXRoIHR5cGUgYW5vbnltb3VzLiAgU2V0IHRoZSBnaXZlbiBwYXJ0IHRvIHJlZmVyZW5jZSB0aGUgbmV3bHkgY3JlYXRlZAotCSAqIFhTREVsZW1lbnQuCi0JICovCi0JcHVibGljIHN0YXRpYyBYU0RFbGVtZW50RGVjbGFyYXRpb24gY3JlYXRlQW5vbnltb3VzWFNERWxlbWVudERlZmluaXRpb24oU3RyaW5nIGJhc2VOYW1lLCBQYXJ0IHBhcnQpIHsKLQkJWFNERWxlbWVudERlY2xhcmF0aW9uIGFub25FbGVtZW50ID0gY3JlYXRlWFNERWxlbWVudERlY2xhcmF0aW9uQ29tbWFuZChwYXJ0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSwgYmFzZU5hbWUsIHBhcnQpOwotCQlYU0RDb21wbGV4VHlwZURlZmluaXRpb24gbmV3QW5vbiA9IFhTREZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbigpOwotCQlYU0RQYXJ0aWNsZSBuZXdYU0RQYXJ0aWNsZSA9IFhTREZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVhTRFBhcnRpY2xlKCk7Ci0JCVhTRE1vZGVsR3JvdXAgbmV3WFNETW9kZWxHcm91cCA9IFhTREZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVhTRE1vZGVsR3JvdXAoKTsKLQkJbmV3WFNETW9kZWxHcm91cC5zZXRDb21wb3NpdG9yKFhTRENvbXBvc2l0b3IuU0VRVUVOQ0VfTElURVJBTCk7Ci0JCQotCQlhbm9uRWxlbWVudC5zZXRBbm9ueW1vdXNUeXBlRGVmaW5pdGlvbihuZXdBbm9uKTsKLQkJbmV3WFNEUGFydGljbGUuc2V0Q29udGVudChuZXdYU0RNb2RlbEdyb3VwKTsKLQkJbmV3QW5vbi5zZXRDb250ZW50KG5ld1hTRFBhcnRpY2xlKTsKLQkJCi0JCXJldHVybiBhbm9uRWxlbWVudDsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBYU0RFbGVtZW50RGVjbGFyYXRpb24gY3JlYXRlWFNERWxlbWVudERlY2xhcmF0aW9uQ29tbWFuZChEZWZpbml0aW9uIGRlZmluaXRpb24sIFN0cmluZyBiYXNlTmFtZSwgT2JqZWN0IGNvbnRleHQpIHsKLQkJWFNERWxlbWVudERlY2xhcmF0aW9uIHhzZEVsZW1lbnQgPSBudWxsOwotCQkKLQkJaWYgKGNvbnRleHQgaW5zdGFuY2VvZiBQYXJ0KSB7Ci0JCQlBZGRYU0RFbGVtZW50RGVjbGFyYXRpb25Db21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkWFNERWxlbWVudERlY2xhcmF0aW9uQ29tbWFuZChkZWZpbml0aW9uLCAiIik7IC8vJE5PTi1OTFMtMSQKLQkJCQotCQkJLy8gRmluZCBhIHVuaXF1ZSBuYW1lCi0JCQlYU0RTY2hlbWEgeHNkU2NoZW1hID0gY29tbWFuZC5nZXRTY2hlbWEoKTsKLQkJCVN0cmluZyBuYW1lID0gTmFtZVV0aWwuZ2V0WFNERWxlbWVudE5hbWUoYmFzZU5hbWUsIHhzZFNjaGVtYSk7Ci0JCQljb21tYW5kLnJ1bihuYW1lKTsKLQkJCS8vIFRoZSAnd29ya2Fyb3VuZCcgYmVsb3cgaXMgY2F1c2luZyBtZSB0byBoYW5nLi4uLi4gIFRoZSBsYXRlc3QgV1RQIGlzIG5lZWRlZC4KLS8vCQkJeHNkRWxlbWVudCA9IHhzZFNjaGVtYS5yZXNvbHZlRWxlbWVudERlY2xhcmF0aW9uKG5hbWUpOwotCQkJeHNkRWxlbWVudCA9IGNvbW1hbmQuZ2V0WFNERWxlbWVudCgpOwotCQl9Ci0JCWVsc2UgaWYgKGNvbnRleHQgaW5zdGFuY2VvZiBYU0RNb2RlbEdyb3VwKSB7Ci0JCQlYU0RNb2RlbEdyb3VwIG1vZGVsR3JvdXAgPSAoWFNETW9kZWxHcm91cCkgY29udGV4dDsKLQkJCVhTRFBhcnRpY2xlIG5ld1BhcnRpY2xlID0gWFNERmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlWFNEUGFydGljbGUoKTsKLQkJCVN0cmluZyBuYW1lID0gTmFtZVV0aWwuZ2V0WFNERWxlbWVudE5hbWUoYmFzZU5hbWUsIG1vZGVsR3JvdXApOwotCQkJCi0JCQlBZGRYU0RFbGVtZW50Q29tbWFuZCBjb21tYW5kID0gbmV3IEFkZFhTREVsZW1lbnRDb21tYW5kKE1lc3NhZ2VzLl9VSV9BQ1RJT05fQUREX1hNTF9TQ0hFTUFfRUxFTUVOVCwgbW9kZWxHcm91cCk7Ci0JCQljb21tYW5kLmV4ZWN1dGUoKTsKLQkJCXhzZEVsZW1lbnQgPSAoWFNERWxlbWVudERlY2xhcmF0aW9uKSBjb21tYW5kLmdldEFkZGVkQ29tcG9uZW50KCk7Ci0JCQl4c2RFbGVtZW50LnNldE5hbWUobmFtZSk7Ci0JCQl4c2RFbGVtZW50LnNldFR5cGVEZWZpbml0aW9uKGdldFhTRFN0cmluZ1R5cGUobW9kZWxHcm91cCkpOwotCQkJCi0JCQluZXdQYXJ0aWNsZS5zZXRDb250ZW50KHhzZEVsZW1lbnQpOwotCQkJbW9kZWxHcm91cC5nZXRDb250ZW50cygpLmFkZChuZXdQYXJ0aWNsZSk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlBZGRYU0RFbGVtZW50Q29tbWFuZCBjb21tYW5kID0gbmV3IEFkZFhTREVsZW1lbnRDb21tYW5kKCk7Ci0JCQljb21tYW5kLmV4ZWN1dGUoKTsKLQkJCXhzZEVsZW1lbnQgPSAoWFNERWxlbWVudERlY2xhcmF0aW9uKSBjb21tYW5kLmdldEFkZGVkQ29tcG9uZW50KCk7Ci0JCQl4c2RFbGVtZW50LnNldE5hbWUoYmFzZU5hbWUpOwotCQl9Ci0JCQotCQlyZXR1cm4geHNkRWxlbWVudDsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyB2b2lkIGFkZFhTREVsZW1lbnRUb01vZGVsR3JvdXAoWFNERWxlbWVudERlY2xhcmF0aW9uIHBhcmVudCwgWFNERWxlbWVudERlY2xhcmF0aW9uIGNoaWxkKSB7Ci0JCWlmIChwYXJlbnQuZ2V0QW5vbnltb3VzVHlwZURlZmluaXRpb24oKSBpbnN0YW5jZW9mIFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbikgewotCQkJWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uIGFub25UeXBlID0gKFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbikgcGFyZW50LmdldEFub255bW91c1R5cGVEZWZpbml0aW9uKCk7Ci0JCQlpZiAoYW5vblR5cGUuZ2V0Q29udGVudCgpIGluc3RhbmNlb2YgWFNEUGFydGljbGUpIHsKLQkJCQlYU0RQYXJ0aWNsZSBwYXJ0aWNsZSA9IChYU0RQYXJ0aWNsZSkgYW5vblR5cGUuZ2V0Q29udGVudCgpOwotCQkJCWlmIChwYXJ0aWNsZS5nZXRDb250ZW50KCkgaW5zdGFuY2VvZiBYU0RNb2RlbEdyb3VwKSB7Ci0JCQkJCS8vIENyZWF0ZSBYU0RQYXJ0aWNsZQotCQkJCQlYU0RNb2RlbEdyb3VwIG1vZGVsR3JvdXAgPSAoWFNETW9kZWxHcm91cCkgcGFydGljbGUuZ2V0Q29udGVudCgpOwotCQkJCQlhZGRYU0RFbGVtZW50VG9Nb2RlbEdyb3VwKG1vZGVsR3JvdXAsIGNoaWxkKTsKLQkJCQl9Ci0JCQkJZWxzZSB7Ci0JCQkJCS8vIENyZWF0ZSBYU0RNb2RlbEdyb3VwIC0tIFhTRFBhcnRpY2xlCi0JCQkJCWFkZFhTREVsZW1lbnRUb01vZGVsR3JvdXAocGFydGljbGUsIGNoaWxkKTsKLQkJCQl9CQkJCSAgCi0JCQl9Ci0JCQllbHNlIHsKLQkJCQkvLyBDcmVhdGUgWFNEUGFydGljbGUgLS0+IFhTRE1vZGVsR3JvdXAgLS0+IFhTRFBhcnRpY2xlCi0JCQkJWFNEUGFydGljbGUgbmV3UGFydGljbGUgPSBYU0RGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVYU0RQYXJ0aWNsZSgpOwotCQkJCWFub25UeXBlLnNldENvbnRlbnQobmV3UGFydGljbGUpOwotCQkJCWFkZFhTREVsZW1lbnRUb01vZGVsR3JvdXAobmV3UGFydGljbGUsIGNoaWxkKTsKLQkJCX0JCQkgIAotCQl9Ci0JCWVsc2UgewotCQkJLy8gQ3JlYXRlIEFub255bW91cyBUeXBlIC0tPiBYU0RQYXJ0aWNsZSAtLT4gWFNETW9kZWxHcm91cCAtLT4gWFNEUGFydGljbGUKLQkJCVhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiBuZXdBbm9uVHlwZSA9IFhTREZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbigpOwotCQkJcGFyZW50LnNldEFub255bW91c1R5cGVEZWZpbml0aW9uKG5ld0Fub25UeXBlKTsKLQkJCQotCQkJWFNEUGFydGljbGUgbmV3UGFydGljbGUgPSBYU0RGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVYU0RQYXJ0aWNsZSgpOwotCQkJbmV3QW5vblR5cGUuc2V0Q29udGVudChuZXdQYXJ0aWNsZSk7Ci0JCQlhZGRYU0RFbGVtZW50VG9Nb2RlbEdyb3VwKG5ld1BhcnRpY2xlLCBjaGlsZCk7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHN0YXRpYyB2b2lkIGFkZFhTREVsZW1lbnRUb01vZGVsR3JvdXAoWFNEUGFydGljbGUgcGFydGljbGUsIFhTREVsZW1lbnREZWNsYXJhdGlvbiBjaGlsZCkgewotCQlYU0RNb2RlbEdyb3VwIG5ld1hTRE1vZGVsR3JvdXAgPSBYU0RGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVYU0RNb2RlbEdyb3VwKCk7Ci0JCW5ld1hTRE1vZGVsR3JvdXAuc2V0Q29tcG9zaXRvcihYU0RDb21wb3NpdG9yLlNFUVVFTkNFX0xJVEVSQUwpOwkJCQkJICAKLQkJcGFydGljbGUuc2V0Q29udGVudChuZXdYU0RNb2RlbEdyb3VwKTsKLQkJYWRkWFNERWxlbWVudFRvTW9kZWxHcm91cChuZXdYU0RNb2RlbEdyb3VwLCBjaGlsZCk7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgdm9pZCBhZGRYU0RFbGVtZW50VG9Nb2RlbEdyb3VwKFhTRE1vZGVsR3JvdXAgbW9kZWxHcm91cCwgWFNERWxlbWVudERlY2xhcmF0aW9uIGNoaWxkKSB7Ci0JCS8vIENyZWF0ZSBYU0RQYXJ0aWNsZQotCQlYU0RQYXJ0aWNsZSBuZXdQYXJ0aWNsZSA9IFhTREZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVhTRFBhcnRpY2xlKCk7Ci0JCW5ld1BhcnRpY2xlLnNldENvbnRlbnQoY2hpbGQpOwotCQltb2RlbEdyb3VwLmdldENvbnRlbnRzKCkuYWRkKG5ld1BhcnRpY2xlKTsKLQl9Ci0JCi0JLyoKLQkgKiBSZXR1cm4gaXQncyBYU0RNb2RlbEdyb3VwLiAgSWYgb25lIGRvZXMgbm90IGV4aXN0LCBjcmVhdGUgb25lCi0JICovCi0JcHVibGljIHN0YXRpYyBYU0RNb2RlbEdyb3VwIGdldFhTRE1vZGVsR3JvdXAoWFNERWxlbWVudERlY2xhcmF0aW9uIHhzZEVsZW1lbnQsIERlZmluaXRpb24gZGVmaW5pdGlvbikgewotCQlYU0RNb2RlbEdyb3VwIG1vZGVsR3JvdXAgPSBudWxsOwotCQlYU0RDb21wbGV4VHlwZURlZmluaXRpb24gYW5vblR5cGUgPSBudWxsOwotCQkKLQkJaWYgKHhzZEVsZW1lbnQuZ2V0QW5vbnltb3VzVHlwZURlZmluaXRpb24oKSBpbnN0YW5jZW9mIFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbikgewotCQkJYW5vblR5cGUgPSAoWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKSB4c2RFbGVtZW50LmdldEFub255bW91c1R5cGVEZWZpbml0aW9uKCk7Ci0JCX0JCSAgCi0JCWVsc2UgewotCQkJLy8gQ3JlYXRlIEFub255bW91cyBUeXBlCi0JCQlhbm9uVHlwZSA9IFhTREZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbigpOwotCQkJYW5vblR5cGUuc2V0TmFtZSgiTmV3Q29tcGxleFR5cGVOYW1lIik7IC8vJE5PTi1OTFMtMSQKLQkJCWdldFhTRFNjaGVtYShkZWZpbml0aW9uKS5nZXRDb250ZW50cygpLmFkZChhbm9uVHlwZSk7Ci0JCQl4c2RFbGVtZW50LnNldEFub255bW91c1R5cGVEZWZpbml0aW9uKGFub25UeXBlKTsKLQkJfQotCQkKLQkJaWYgKGFub25UeXBlICE9IG51bGwpIHsKLQkJCW1vZGVsR3JvdXAgPSBnZXRYU0RNb2RlbEdyb3VwKGFub25UeXBlKTsKLQkJfQotCQkKLQkJcmV0dXJuIG1vZGVsR3JvdXA7Ci0JfQotCQotCS8qCi0JICogUmV0dXJuIGl0J3MgWFNETW9kZWxHcm91cC4gIElmIG9uZSBkb2VzIG5vdCBleGlzdCwgY3JlYXRlIG9uZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgWFNETW9kZWxHcm91cCBnZXRYU0RNb2RlbEdyb3VwKFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiB4c2RDb21wbGV4VHlwZSkgewotCQlYU0RNb2RlbEdyb3VwIG1vZGVsR3JvdXAgPSBudWxsOwotCQlYU0RQYXJ0aWNsZSBwYXJ0aWNsZSA9IG51bGw7Ci0JCS8vIENoZWNrIGZvciBYU0RQYXJ0aWNsZQotCQlpZiAoeHNkQ29tcGxleFR5cGUuZ2V0Q29udGVudCgpIGluc3RhbmNlb2YgWFNEUGFydGljbGUpIHsKLQkJCXBhcnRpY2xlID0gKFhTRFBhcnRpY2xlKSB4c2RDb21wbGV4VHlwZS5nZXRDb250ZW50KCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlwYXJ0aWNsZSA9IFhTREZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVhTRFBhcnRpY2xlKCk7Ci0JCQltb2RlbEdyb3VwID0gWFNERmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlWFNETW9kZWxHcm91cCgpOwotCQkJbW9kZWxHcm91cC5zZXRDb21wb3NpdG9yKFhTRENvbXBvc2l0b3IuU0VRVUVOQ0VfTElURVJBTCk7CQkJICAKLQkJCXBhcnRpY2xlLnNldENvbnRlbnQobW9kZWxHcm91cCk7Ci0JCQl4c2RDb21wbGV4VHlwZS5zZXRDb250ZW50KHBhcnRpY2xlKTsKLQkJfQotCQkKLQkJLy8gQ2hlY2sgZm9yIFhTRE1vZGVsR3JvdXAKLQkJaWYgKHBhcnRpY2xlLmdldENvbnRlbnQoKSBpbnN0YW5jZW9mIFhTRE1vZGVsR3JvdXApIHsKLQkJCW1vZGVsR3JvdXAgPSAoWFNETW9kZWxHcm91cCkgcGFydGljbGUuZ2V0Q29udGVudCgpOwotCQl9Ci0JCWVsc2UgewotCQkJbW9kZWxHcm91cCA9IFhTREZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVhTRE1vZGVsR3JvdXAoKTsKLQkJCW1vZGVsR3JvdXAuc2V0Q29tcG9zaXRvcihYU0RDb21wb3NpdG9yLlNFUVVFTkNFX0xJVEVSQUwpOwkJCSAgCi0JCQlwYXJ0aWNsZS5zZXRDb250ZW50KG1vZGVsR3JvdXApOwotCQl9Ci0JCQotCQlyZXR1cm4gbW9kZWxHcm91cDsKLQl9Ci0JCi0JLyoKLQkgKiAKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbiBjcmVhdGVYU0RDb21wbGV4VHlwZURlZmluaWlvbihTdHJpbmcgY29tcGxleFR5cGVOYW1lLCBQYXJ0IHBhcnQpIHsKLQkJWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uIG5ld0NvbXBsZXhUeXBlID0gWFNERmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKCk7Ci0JCVhTRFBhcnRpY2xlIG5ld1hTRFBhcnRpY2xlID0gWFNERmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlWFNEUGFydGljbGUoKTsKLQkJWFNETW9kZWxHcm91cCBuZXdYU0RNb2RlbEdyb3VwID0gWFNERmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlWFNETW9kZWxHcm91cCgpOwotCQluZXdYU0RNb2RlbEdyb3VwLnNldENvbXBvc2l0b3IoWFNEQ29tcG9zaXRvci5TRVFVRU5DRV9MSVRFUkFMKTsKLQkJCi0JCW5ld0NvbXBsZXhUeXBlLnNldE5hbWUoY29tcGxleFR5cGVOYW1lKTsKLQkJbmV3Q29tcGxleFR5cGUuc2V0Q29udGVudChuZXdYU0RQYXJ0aWNsZSk7Ci0JCW5ld1hTRFBhcnRpY2xlLnNldENvbnRlbnQobmV3WFNETW9kZWxHcm91cCk7Ci0JCWdldFhTRFNjaGVtYShwYXJ0LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSkuZ2V0Q29udGVudHMoKS5hZGQobmV3Q29tcGxleFR5cGUpOwotCQkKLQkJcmV0dXJuIG5ld0NvbXBsZXhUeXBlOwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIHZvaWQgYWRkWFNERWxlbWVudFRvTW9kZWxHcm91cChYU0RDb21wbGV4VHlwZURlZmluaXRpb24gcGFyZW50LCBYU0RFbGVtZW50RGVjbGFyYXRpb24gY2hpbGQpIHsKLQkJaWYgKHBhcmVudC5nZXRDb250ZW50KCkgaW5zdGFuY2VvZiBYU0RQYXJ0aWNsZSkgewotCQkJWFNEUGFydGljbGUgcGFydGljbGUgPSAoWFNEUGFydGljbGUpIHBhcmVudC5nZXRDb250ZW50KCk7Ci0JCQlpZiAocGFydGljbGUuZ2V0Q29udGVudCgpIGluc3RhbmNlb2YgWFNETW9kZWxHcm91cCkgewotCQkJCS8vIENyZWF0ZSBYU0RQYXJ0aWNsZQotCQkJCVhTRE1vZGVsR3JvdXAgbW9kZWxHcm91cCA9IChYU0RNb2RlbEdyb3VwKSBwYXJ0aWNsZS5nZXRDb250ZW50KCk7Ci0JCQkJYWRkWFNERWxlbWVudFRvTW9kZWxHcm91cChtb2RlbEdyb3VwLCBjaGlsZCk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQkvLyBDcmVhdGUgWFNETW9kZWxHcm91cCAtLSBYU0RQYXJ0aWNsZQotCQkJCWFkZFhTREVsZW1lbnRUb01vZGVsR3JvdXAocGFydGljbGUsIGNoaWxkKTsKLQkJCX0JCQkJICAKLQkJfQotCQllbHNlIHsKLQkJCS8vIENyZWF0ZSBYU0RQYXJ0aWNsZSAtLT4gWFNETW9kZWxHcm91cCAtLT4gWFNEUGFydGljbGUKLQkJCVhTRFBhcnRpY2xlIG5ld1BhcnRpY2xlID0gWFNERmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlWFNEUGFydGljbGUoKTsKLQkJCXBhcmVudC5zZXRDb250ZW50KG5ld1BhcnRpY2xlKTsKLQkJCWFkZFhTREVsZW1lbnRUb01vZGVsR3JvdXAobmV3UGFydGljbGUsIGNoaWxkKTsKLQkJfQotCX0KLQkKLQkvKgotCSAqIFJldHVybiB0aGUgaW5saW5lIFhTRFNjaGVtYSBhc3NvY2lhdGVkIHdpdGggdGhpcyBXU0RMLgotCSAqIExvb2sgZm9yIHRoZSBpbmxpbmUgWFNEU2NoZW1hIHdpdGggdGhlIHNhbWUgbmFtZXNwYWNlIGFzIHRoZSBXU0RMLgotCSAqIElmIHRoaXMgaW5saW5lIFhTRFNjaGVtYSBkb2VzIG5vdCBleGlzdHMsIGNyZWF0ZSBpdC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFhTRFNjaGVtYSBnZXRYU0RTY2hlbWEoRGVmaW5pdGlvbiBkZWZpbml0aW9uKSB7Ci0JCVhTRFNjaGVtYSBzY2hlbWEgPSBudWxsOwotCQlTdHJpbmcgd3NkbFRhcmdldE5hbWVzcGFjZSA9IGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0JCQotCQlUeXBlcyB0eXBlcyA9IChUeXBlcykgZGVmaW5pdGlvbi5nZXRUeXBlcygpOwotCQlpZiAodHlwZXMgIT0gbnVsbCkgewotCQkJCi0JCQlJdGVyYXRvciBlZUl0ID0gdHlwZXMuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLQkJCXdoaWxlIChlZUl0Lmhhc05leHQoKSkgewotCQkJCU9iamVjdCBlZUVsZW1lbnQgPSBlZUl0Lm5leHQoKTsKLQkJCQlpZiAoZWVFbGVtZW50IGluc3RhbmNlb2YgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIHsKLQkJCQkJWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZWUgPSAoWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGVlRWxlbWVudDsKLQkJCQkJaWYgKGVlLmdldFNjaGVtYSgpLmdldFRhcmdldE5hbWVzcGFjZSgpICE9IG51bGwgJiYKLQkJCQkJCWVlLmdldFNjaGVtYSgpLmdldFRhcmdldE5hbWVzcGFjZSgpLmVxdWFscyh3c2RsVGFyZ2V0TmFtZXNwYWNlKSkgewotCQkJCQkJc2NoZW1hID0gZWUuZ2V0U2NoZW1hKCk7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCQkKLQkJaWYgKHNjaGVtYSA9PSBudWxsKSB7Ci0JCQkvLyBXZSBuZWVkIHRvIGNyZWF0ZSB0aGUgc2NoZW1hCi0JCQlBZGRYU0RTY2hlbWFDb21tYW5kIGNvbW1hbmQgPSBuZXcgQWRkWFNEU2NoZW1hQ29tbWFuZChkZWZpbml0aW9uKTsKLQkJCWNvbW1hbmQucnVuKCk7Ci0JCQlYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCBlZUVsZW1lbnQgPSAoWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGNvbW1hbmQuZ2V0V1NETEVsZW1lbnQoKTsKLQkJCXNjaGVtYSA9IGVlRWxlbWVudC5nZXRTY2hlbWEoKTsKLQkJfQotCQkKLQkJcmV0dXJuIHNjaGVtYTsKLQl9Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgWFNEU2ltcGxlVHlwZURlZmluaXRpb24gZ2V0WFNEU3RyaW5nVHlwZShYU0RDb21wb25lbnQgY29tcG9uZW50KSB7Ci0JCVhTRFNjaGVtYSBzY2hlbWEgPSBjb21wb25lbnQuZ2V0U2NoZW1hKCk7Ci0JCXJldHVybiBzY2hlbWEuZ2V0U2NoZW1hRm9yU2NoZW1hKCkucmVzb2x2ZVNpbXBsZVR5cGVEZWZpbml0aW9uKCJzdHJpbmciKTsgLy8kTk9OLU5MUy0xJAotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9YU0RUeXBlU3lzdGVtUHJvdmlkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdXRpbC9YU0RUeXBlU3lzdGVtUHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmY5MTNjOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3V0aWwvWFNEVHlwZVN5c3RlbVByb3ZpZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZXh0ZW5zaW9ucy5JVHlwZVN5c3RlbVByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wbGV4VHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE5hbWVkQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYUNvbnRlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNpbXBsZVR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5pbXBsLlhTREltcG9ydEltcGw7Ci0KLXB1YmxpYyBjbGFzcyBYU0RUeXBlU3lzdGVtUHJvdmlkZXIgaW1wbGVtZW50cyBJVHlwZVN5c3RlbVByb3ZpZGVyCi17Ci0gICAgcHVibGljIExpc3QgZ2V0UHJlZml4ZXMoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBTdHJpbmcgbmFtZXNwYWNlKQotICAgIHsKLSAgICAgICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICBNYXAgbWFwID0gZGVmaW5pdGlvbi5nZXROYW1lc3BhY2VzKCk7Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IG1hcC5rZXlTZXQoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBwcmVmaXggPSAoU3RyaW5nKSBpLm5leHQoKTsKLSAgICAgICAgICAgIFN0cmluZyB0aGVOYW1lc3BhY2UgPSAoU3RyaW5nKSBtYXAuZ2V0KHByZWZpeCk7Ci0gICAgICAgICAgICBpZiAodGhlTmFtZXNwYWNlICE9IG51bGwgJiYgdGhlTmFtZXNwYWNlLmVxdWFscyhuYW1lc3BhY2UpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGxpc3QuYWRkKHByZWZpeCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGxpc3Q7Ci0gICAgfQotCi0gICAgcHVibGljIExpc3QgZ2V0UHJlZml4ZWROYW1lcyhEZWZpbml0aW9uIGRlZmluaXRpb24sIFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBsb2NhbE5hbWUpCi0gICAgewotICAgICAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IGdldFByZWZpeGVzKGRlZmluaXRpb24sIG5hbWVzcGFjZSkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgcHJlZml4ID0gKFN0cmluZykgaS5uZXh0KCk7Ci0gICAgICAgICAgICBTdHJpbmcgbmFtZSA9IChwcmVmaXggIT0gbnVsbCAmJiBwcmVmaXgubGVuZ3RoKCkgPiAwKSA/IHByZWZpeCArICI6IiArIGxvY2FsTmFtZSA6IGxvY2FsTmFtZTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgbGlzdC5hZGQobmFtZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGxpc3Q7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgYWRkTmFtZWRDb21wb25lbnRzKERlZmluaXRpb24gZGVmaW5pdGlvbiwgTGlzdCBsaXN0LCBMaXN0IG5hbWVkQ29tcG9uZW50cykKLSAgICB7Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IG5hbWVkQ29tcG9uZW50cy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgICAgIHsKLSAgICAgICAgICAgIFhTRE5hbWVkQ29tcG9uZW50IGNvbXBvbmVudCA9IChYU0ROYW1lZENvbXBvbmVudCkgaS5uZXh0KCk7Ci0gICAgICAgICAgICBsaXN0LmFkZEFsbChnZXRQcmVmaXhlZE5hbWVzKGRlZmluaXRpb24sIGNvbXBvbmVudC5nZXRUYXJnZXROYW1lc3BhY2UoKSwgY29tcG9uZW50LmdldE5hbWUoKSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgaW5pdFdTSVN0eWxlSW1wb3J0cyhYU0RTY2hlbWEgeHNkU2NoZW1hKQotICAgIHsKLSAgICAgICAgaWYgKHhzZFNjaGVtYS5nZXRUYXJnZXROYW1lc3BhY2UoKSA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSB4c2RTY2hlbWEuZ2V0Q29udGVudHMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgWFNEU2NoZW1hQ29udGVudCBjb250ZW50ID0gKFhTRFNjaGVtYUNvbnRlbnQpIGkubmV4dCgpOwotICAgICAgICAgICAgICAgIGlmIChjb250ZW50IGluc3RhbmNlb2YgWFNESW1wb3J0SW1wbCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFhTREltcG9ydEltcGwgeHNkSW1wb3J0ID0gKFhTREltcG9ydEltcGwpIGNvbnRlbnQ7Ci0JCQkJCVhTRFNjaGVtYSBzY2hlbWEgPSAoWFNEU2NoZW1hKXhzZEltcG9ydC5nZXRSZXNvbHZlZFNjaGVtYSgpOwkJCQkJCi0JCQkJCWlmIChzY2hlbWEgPT0gbnVsbCkKLQkJCQkJewotCQkJCQkJc2NoZW1hID0geHNkSW1wb3J0LmltcG9ydFNjaGVtYSgpOwotCQkJCQl9ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBMaXN0IGdldEF2YWlsYWJsZVR5cGVOYW1lcyhEZWZpbml0aW9uIGRlZmluaXRpb24sIGludCB0eXBlTmFtZUNhdGVnb3J5KQotICAgIHsKLSAgICAgICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICAKLSAgICAgICAgaWYgKHR5cGVOYW1lQ2F0ZWdvcnkgPT0gSVR5cGVTeXN0ZW1Qcm92aWRlci5CVUlMVF9JTl9UWVBFKSB7Ci0gICAgICAgIAlsaXN0ID0gZ2V0QnVpbHRJblR5cGVOYW1lc0xpc3QoZGVmaW5pdGlvbik7ICAgICAgICAJCi0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgIAlUeXBlcyB0eXBlcyA9IGRlZmluaXRpb24uZ2V0RVR5cGVzKCk7Ci0gICAgICAgIAlpZiAodHlwZXMgIT0gbnVsbCkKLSAgICAgICAgCXsKLSAgICAgICAgCQlmb3IgKEl0ZXJhdG9yIGkgPSB0eXBlcy5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgICAgICAJCXsKLSAgICAgICAgCQkJT2JqZWN0IG8gPSBpLm5leHQoKTsKLSAgICAgICAgCQkJaWYgKG8gaW5zdGFuY2VvZiBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCkKLSAgICAgICAgCQkJewotICAgICAgICAJCQkJWFNEU2NoZW1hIHNjaGVtYSA9ICgoWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIG8pLmdldFNjaGVtYSgpOwotICAgICAgICAJCQkJaWYgKHNjaGVtYSAhPSBudWxsKQotICAgICAgICAJCQkJewotICAgICAgICAJCQkJCWluaXRXU0lTdHlsZUltcG9ydHMoc2NoZW1hKTsKLSAgICAgICAgCQkJCQlhZGROYW1lZENvbXBvbmVudHMoZGVmaW5pdGlvbiwgbGlzdCwgc2NoZW1hLmdldFR5cGVEZWZpbml0aW9ucygpKTsKLSAgICAgICAgCQkJCX0KLSAgICAgICAgCQkJfQotICAgICAgICAJCX0KLSAgICAgICAgCX0KLSAgICAgICAgCi0gICAgICAgIAlmb3IgKEl0ZXJhdG9yIGkgPSBkZWZpbml0aW9uLmdldEVJbXBvcnRzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgICAgICAJewotICAgICAgICAJCUltcG9ydCB0aGVJbXBvcnQgPSAoSW1wb3J0KSBpLm5leHQoKTsKLSAgICAgICAgCQlYU0RTY2hlbWEgc2NoZW1hID0gdGhlSW1wb3J0LmdldEVTY2hlbWEoKTsKLSAgICAgICAgCQlpZiAoc2NoZW1hICE9IG51bGwpCi0gICAgICAgIAkJewotICAgICAgICAJCQlhZGROYW1lZENvbXBvbmVudHMoZGVmaW5pdGlvbiwgbGlzdCwgc2NoZW1hLmdldFR5cGVEZWZpbml0aW9ucygpKTsKLSAgICAgICAgCQl9Ci0gICAgICAgIAl9Ci0gICAgICAgIAlsaXN0LmFkZEFsbChnZXRCdWlsdEluVHlwZU5hbWVzTGlzdChkZWZpbml0aW9uKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0JCXJldHVybiBsaXN0OyAgICAgICAgCi0gICAgfQotICAgIAotICAgIHB1YmxpYyBMaXN0IGdldEF2YWlsYWJsZVR5cGVzKERlZmluaXRpb24gZGVmaW5pdGlvbiwgWFNEU2NoZW1hIHNjaGVtYSwgaW50IHR5cGVOYW1lQ2F0ZWdvcnkpCi0gICAgewotICAgICAgICBMaXN0IGtlZXBUeXBlcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgSXRlcmF0b3IgdHlwZUl0ZXJhdG9yID0gc2NoZW1hLmdldFR5cGVEZWZpbml0aW9ucygpLml0ZXJhdG9yKCk7Ci0gICAgICAgIC8vIEZpbHRlciBvdXQgdW53YW50ZWQgVHlwZXMKLSAgICAgICAgaWYgKHR5cGVOYW1lQ2F0ZWdvcnkgPT0gSVR5cGVTeXN0ZW1Qcm92aWRlci5VU0VSX0RFRklORURfQ09NUExFWF9UWVBFKSB7Ci0gICAgICAgIAl3aGlsZSAodHlwZUl0ZXJhdG9yLmhhc05leHQoKSkgewotICAgICAgICAJCU9iamVjdCB0eXBlID0gdHlwZUl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgCQlpZiAodHlwZSBpbnN0YW5jZW9mIFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbikgewotICAgICAgICAJCQlrZWVwVHlwZXMuYWRkKHR5cGUpOwotICAgICAgICAJCX0KLSAgICAgICAgCX0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh0eXBlTmFtZUNhdGVnb3J5ID09IElUeXBlU3lzdGVtUHJvdmlkZXIuVVNFUl9ERUZJTkVEX1NJTVBMRV9UWVBFKSB7Ci0gICAgICAgIAl3aGlsZSAodHlwZUl0ZXJhdG9yLmhhc05leHQoKSkgewotICAgICAgICAJCU9iamVjdCB0eXBlID0gdHlwZUl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgCQlpZiAodHlwZSBpbnN0YW5jZW9mIFhTRFNpbXBsZVR5cGVEZWZpbml0aW9uKSB7Ci0gICAgICAgIAkJCWtlZXBUeXBlcy5hZGQodHlwZSk7Ci0gICAgICAgIAkJfQotICAgICAgICAJfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvL2FkZE5hbWVkQ29tcG9uZW50cyhkZWZpbml0aW9uLCBsaXN0LCBrZWVwVHlwZXMpOyAgICAgICAgCi0gICAgICAgIC8vcmV0dXJuIGxpc3Q7Ci0gICAgICAgIHJldHVybiBrZWVwVHlwZXM7Ci0gICAgfQotCi0gICAgcHVibGljIGphdmEudXRpbC5MaXN0IGdldEJ1aWx0SW5UeXBlTmFtZXNMaXN0KERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgICB7Ci0gICAgICAgIExpc3QgaXRlbXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0vLyAgICAgICAgaWYgKGRlZmluaXRpb24gIT0gbnVsbCkKLS8vICAgICAgICB7Ci0vLyAgICAgICAgICAgIExpc3QgcHJlZml4ZXMgPSBnZXRQcmVmaXhlcyhkZWZpbml0aW9uLCBXU0RMQ29uc3RhbnRzLlhTRF9OQU1FU1BBQ0VfVVJJKTsKLS8vICAgICAgICAgICAgZm9yIChJdGVyYXRvciBpID0gcHJlZml4ZXMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotLy8gICAgICAgICAgICB7Ci0vLyAgICAgICAgICAgICAgICBTdHJpbmcgcHJlZml4ID0gKFN0cmluZykgaS5uZXh0KCk7Ci0vLyAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IFhTRERPTUhlbHBlci5kYXRhVHlwZS5sZW5ndGg7IGorKykKLS8vICAgICAgICAgICAgICAgIHsKLS8vICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbG9jYWxOYW1lID0gWFNERE9NSGVscGVyLmRhdGFUeXBlW2pdWzBdOwotLy8gICAgICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gKHByZWZpeCAhPSBudWxsICYmIHByZWZpeC5sZW5ndGgoKSA+IDApID8gcHJlZml4ICsgIjoiICsgbG9jYWxOYW1lIDogbG9jYWxOYW1lOwotLy8gICAgICAgICAgICAgICAgICAgIGl0ZW1zLmFkZChuYW1lKTsKLS8vICAgICAgICAgICAgICAgIH0KLS8vICAgICAgICAgICAgfQotLy8gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGl0ZW1zOwotICAgIH0KLSAgICBwdWJsaWMgTGlzdCBnZXRBdmFpbGFibGVFbGVtZW50TmFtZXMoRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICAgIHsKLSAgICAgICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICBUeXBlcyB0eXBlcyA9IGRlZmluaXRpb24uZ2V0RVR5cGVzKCk7Ci0gICAgICAgIGlmICh0eXBlcyAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSB0eXBlcy5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIE9iamVjdCBvID0gaS5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKG8gaW5zdGFuY2VvZiBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFhTRFNjaGVtYSBzY2hlbWEgPSAoKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KSBvKS5nZXRTY2hlbWEoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYSAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICB7Ci0JCQkJCQlpbml0V1NJU3R5bGVJbXBvcnRzKHNjaGVtYSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGROYW1lZENvbXBvbmVudHMoZGVmaW5pdGlvbiwgbGlzdCwgc2NoZW1hLmdldEVsZW1lbnREZWNsYXJhdGlvbnMoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IGRlZmluaXRpb24uZ2V0RUltcG9ydHMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgICAgIHsKLSAgICAgICAgICAgIEltcG9ydCB0aGVJbXBvcnQgPSAoSW1wb3J0KSBpLm5leHQoKTsKLSAgICAgICAgICAgIFhTRFNjaGVtYSBzY2hlbWEgPSB0aGVJbXBvcnQuZ2V0RVNjaGVtYSgpOwotICAgICAgICAgICAgaWYgKHNjaGVtYSAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGFkZE5hbWVkQ29tcG9uZW50cyhkZWZpbml0aW9uLCBsaXN0LCBzY2hlbWEuZ2V0RWxlbWVudERlY2xhcmF0aW9ucygpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbGlzdDsKLSAgICB9Ci0gICAgcHVibGljIGludCBnZXRDYXRlZ29yeUZvclR5cGVOYW1lKERlZmluaXRpb24gZGVmaW5pdGlvbiwgU3RyaW5nIHR5cGVOYW1lKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdmlzaXRvci9CYXNlUmVuYW1lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC92aXNpdG9yL0Jhc2VSZW5hbWVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5OWViNWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC92aXNpdG9yL0Jhc2VSZW5hbWVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudmlzaXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBCYXNlUmVuYW1lciBleHRlbmRzIFdTRExWaXNpdG9yCi17Ci0gIHByb3RlY3RlZCBTdHJpbmcgbmV3TmFtZTsKLSAgcHJvdGVjdGVkIFdTRExFbGVtZW50IGdsb2JhbENvbXBvbmVudDsKLSAgCi0gIHB1YmxpYyBCYXNlUmVuYW1lcihXU0RMRWxlbWVudCBnbG9iYWxDb21wb25lbnQsIFN0cmluZyBuZXdOYW1lKQotICB7Ci0gICAgc3VwZXIoZ2xvYmFsQ29tcG9uZW50LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0gICAgdGhpcy5nbG9iYWxDb21wb25lbnQgPSBnbG9iYWxDb21wb25lbnQ7Ci0gICAgdGhpcy5uZXdOYW1lID0gbmV3TmFtZTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXROZXdRTmFtZSgpCi0gIHsKLSAgICBTdHJpbmcgcU5hbWUgPSBudWxsOwotICAgIGlmIChuZXdOYW1lICE9IG51bGwpCi0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gZ2xvYmFsQ29tcG9uZW50LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLSAgICAgIHFOYW1lID0gZGVmaW5pdGlvbi5nZXRQcmVmaXgoZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKSk7Ci0gICAgICBxTmFtZSArPSAiOiIgKyBuZXdOYW1lOyAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBxTmFtZSA9IG5ld05hbWU7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBxTmFtZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC92aXNpdG9yL0JpbmRpbmdSZW5hbWVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3Zpc2l0b3IvQmluZGluZ1JlbmFtZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2QxNDg1YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3Zpc2l0b3IvQmluZGluZ1JlbmFtZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC52aXNpdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETEVkaXRvclV0aWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIEJpbmRpbmdSZW5hbWVyIGV4dGVuZHMgQmFzZVJlbmFtZXIKLXsKLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBCaW5kaW5nUmVuYW1lci4KLSAgICogQHBhcmFtIGdsb2JhbENvbXBvbmVudAotICAgKiBAcGFyYW0gbmV3TmFtZQotICAgKi8KLSAgcHVibGljIEJpbmRpbmdSZW5hbWVyKFdTRExFbGVtZW50IGdsb2JhbENvbXBvbmVudCwgU3RyaW5nIG5ld05hbWUpCi0gIHsKLSAgICBzdXBlcihnbG9iYWxDb21wb25lbnQsIG5ld05hbWUpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB2aXNpdFBvcnQoUG9ydCBwb3J0KQotICB7Ci0gICAgc3VwZXIudmlzaXRQb3J0KHBvcnQpOwotICAgIEJpbmRpbmcgYmluZGluZyA9IHBvcnQuZ2V0RUJpbmRpbmcoKTsKLSAgICBpZiAoZ2xvYmFsQ29tcG9uZW50LmVxdWFscyhiaW5kaW5nKSkKLSAgICB7Ci0gICAgICBFbGVtZW50IGVsZW1lbnQgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldEVsZW1lbnRGb3JPYmplY3QocG9ydCk7Ci0gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgiYmluZGluZyIsIGdldE5ld1FOYW1lKCkpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC92aXNpdG9yL01lc3NhZ2VSZW5hbWVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3Zpc2l0b3IvTWVzc2FnZVJlbmFtZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTg1Yjk1Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3Zpc2l0b3IvTWVzc2FnZVJlbmFtZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC52aXNpdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMRWRpdG9yVXRpbDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgTWVzc2FnZVJlbmFtZXIgZXh0ZW5kcyBCYXNlUmVuYW1lcgotewotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIE1lc3NhZ2VSZW5hbWVyLgotICAgKiBAcGFyYW0gZ2xvYmFsQ29tcG9uZW50Ci0gICAqIEBwYXJhbSBuZXdOYW1lCi0gICAqLwotICBwdWJsaWMgTWVzc2FnZVJlbmFtZXIoV1NETEVsZW1lbnQgZ2xvYmFsQ29tcG9uZW50LCBTdHJpbmcgbmV3TmFtZSkKLSAgewotICAgIHN1cGVyKGdsb2JhbENvbXBvbmVudCwgbmV3TmFtZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdElucHV0KElucHV0IGlucHV0KQotICB7Ci0gICAgc3VwZXIudmlzaXRJbnB1dChpbnB1dCk7Ci0gICAgTWVzc2FnZSBtZXNzYWdlID0gaW5wdXQuZ2V0RU1lc3NhZ2UoKTsKLSAgICBpZiAoZ2xvYmFsQ29tcG9uZW50LmVxdWFscyhtZXNzYWdlKSkKLSAgICB7Ci0gICAgICBFbGVtZW50IGVsZW1lbnQgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldEVsZW1lbnRGb3JPYmplY3QoaW5wdXQpOwotICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoIm1lc3NhZ2UiLCBnZXROZXdRTmFtZSgpKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHZpc2l0T3V0cHV0KE91dHB1dCBvdXRwdXQpCi0gIHsKLSAgICBzdXBlci52aXNpdE91dHB1dChvdXRwdXQpOwotICAgIGlmIChnbG9iYWxDb21wb25lbnQuZXF1YWxzKG91dHB1dCkpCi0gICAgewotICAgICAgRWxlbWVudCBlbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KG91dHB1dCk7Ci0gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgibWVzc2FnZSIsIGdldE5ld1FOYW1lKCkpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXRGYXVsdChGYXVsdCBmYXVsdCkKLSAgewotICAgIHN1cGVyLnZpc2l0RmF1bHQoZmF1bHQpOwotICAgIGlmIChnbG9iYWxDb21wb25lbnQuZXF1YWxzKGZhdWx0KSkKLSAgICB7Ci0gICAgICBFbGVtZW50IGVsZW1lbnQgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldEVsZW1lbnRGb3JPYmplY3QoZmF1bHQpOwotICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoIm1lc3NhZ2UiLCBnZXROZXdRTmFtZSgpKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC92aXNpdG9yL1BvcnRUeXBlUmVuYW1lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC92aXNpdG9yL1BvcnRUeXBlUmVuYW1lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTU5YzgzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdmlzaXRvci9Qb3J0VHlwZVJlbmFtZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC52aXNpdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLldTRExFZGl0b3JVdGlsOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBQb3J0VHlwZVJlbmFtZXIgZXh0ZW5kcyBCYXNlUmVuYW1lcgotewotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIFBvcnRUeXBlUmVuYW1lci4KLSAgICogQHBhcmFtIGdsb2JhbENvbXBvbmVudAotICAgKiBAcGFyYW0gbmV3TmFtZQotICAgKi8KLSAgcHVibGljIFBvcnRUeXBlUmVuYW1lcihXU0RMRWxlbWVudCBnbG9iYWxDb21wb25lbnQsIFN0cmluZyBuZXdOYW1lKQotICB7Ci0gICAgc3VwZXIoZ2xvYmFsQ29tcG9uZW50LCBuZXdOYW1lKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHZpc2l0QmluZGluZyhCaW5kaW5nIGJpbmRpbmcpCi0gIHsKLSAgICBzdXBlci52aXNpdEJpbmRpbmcoYmluZGluZyk7Ci0gICAgUG9ydFR5cGUgcG9ydFR5cGUgPSBiaW5kaW5nLmdldEVQb3J0VHlwZSgpOwotCi0gICAgaWYgKGdsb2JhbENvbXBvbmVudC5lcXVhbHMocG9ydFR5cGUpKQotICAgIHsKLSAgICAgIEVsZW1lbnQgZWxlbWVudCA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0RWxlbWVudEZvck9iamVjdChiaW5kaW5nKTsKLSAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCJ0eXBlIiwgZ2V0TmV3UU5hbWUoKSk7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvdmlzaXRvci9XU0RMVmlzaXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC92aXNpdG9yL1dTRExWaXNpdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4NjgyNzQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC92aXNpdG9yL1dTRExWaXNpdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnZpc2l0b3I7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2U7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMVmlzaXRvcgotewotICBwcm90ZWN0ZWQgRGVmaW5pdGlvbiBkZWZpbml0aW9uOwotCi0KLSAgcHVibGljIFdTRExWaXNpdG9yKERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgIHRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247Ci0gIH0KLSAgCi0gIAotICBwdWJsaWMgdm9pZCB2aXNpdERlZmluaXRpb24oKQotICB7Ci0gICAgdmlzaXRCaW5kaW5ncygpOwotICAgIHZpc2l0TWVzc2FnZXMoKTsKLSAgICB2aXNpdFBvcnRUeXBlcygpOwotICAgIHZpc2l0U2VydmljZXMoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHZpc2l0QmluZGluZ3MoKQotICB7Ci0gICAgZm9yIChJdGVyYXRvciBpdGVyYXRvciA9IGRlZmluaXRpb24uZ2V0RUJpbmRpbmdzKCkuaXRlcmF0b3IoKTsgaXRlcmF0b3IuaGFzTmV4dCgpOyApCi0gICAgewotICAgICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpaXRlcmF0b3IubmV4dCgpOwotICAgICAgdmlzaXRCaW5kaW5nKGJpbmRpbmcpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHZpc2l0TWVzc2FnZXMoKQotICB7Ci0gICAgZm9yIChJdGVyYXRvciBpdGVyYXRvciA9IGRlZmluaXRpb24uZ2V0RU1lc3NhZ2VzKCkuaXRlcmF0b3IoKTsgaXRlcmF0b3IuaGFzTmV4dCgpOyApCi0gICAgewotICAgICAgTWVzc2FnZSBtZXNzYWdlID0gKE1lc3NhZ2UpaXRlcmF0b3IubmV4dCgpOwotICAgICAgdmlzaXRNZXNzYWdlKG1lc3NhZ2UpOyAKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHZpc2l0UG9ydFR5cGVzKCkKLSAgewotICAgIGZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSBkZWZpbml0aW9uLmdldEVQb3J0VHlwZXMoKS5pdGVyYXRvcigpOyBpdGVyYXRvci5oYXNOZXh0KCk7ICkKLSAgICB7Ci0gICAgICBQb3J0VHlwZSBwb3J0VHlwZSA9IChQb3J0VHlwZSlpdGVyYXRvci5uZXh0KCk7Ci0gICAgICB2aXNpdFBvcnRUeXBlKHBvcnRUeXBlKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHZpc2l0U2VydmljZXMoKQotICB7Ci0gICAgZm9yIChJdGVyYXRvciBpdGVyYXRvciA9IGRlZmluaXRpb24uZ2V0RVNlcnZpY2VzKCkuaXRlcmF0b3IoKTsgaXRlcmF0b3IuaGFzTmV4dCgpOyApCi0gICAgewotICAgICAgU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2UpaXRlcmF0b3IubmV4dCgpOwotICAgICAgdmlzaXRTZXJ2aWNlKHNlcnZpY2UpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHZpc2l0QmluZGluZyhCaW5kaW5nIGJpbmRpbmcpCi0gIHsKLSAgICBQb3J0VHlwZSBwb3J0VHlwZSA9IGJpbmRpbmcuZ2V0RVBvcnRUeXBlKCk7Ci0gICAgaWYgKHBvcnRUeXBlICE9IG51bGwpCi0gICAgewotICAgICAgdmlzaXRQb3J0VHlwZShwb3J0VHlwZSk7Ci0gICAgfQotCi0gICAgZm9yIChJdGVyYXRvciBpdGVyYXRvciA9IGJpbmRpbmcuZ2V0RUJpbmRpbmdPcGVyYXRpb25zKCkuaXRlcmF0b3IoKTsgaXRlcmF0b3IuaGFzTmV4dCgpOyApCi0gICAgewotICAgICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gKEJpbmRpbmdPcGVyYXRpb24paXRlcmF0b3IubmV4dCgpOwotICAgICAgdmlzaXRCaW5kaW5nT3BlcmF0aW9uKGJpbmRpbmdPcGVyYXRpb24pOyAKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdFBvcnRUeXBlKFBvcnRUeXBlIHBvcnRUeXBlKQotICB7Ci0gICAgZm9yIChJdGVyYXRvciBpdGVyYXRvciA9IHBvcnRUeXBlLmdldEVPcGVyYXRpb25zKCkuaXRlcmF0b3IoKTsgaXRlcmF0b3IuaGFzTmV4dCgpOyApCi0gICAgewotICAgICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IChPcGVyYXRpb24paXRlcmF0b3IubmV4dCgpOwotICAgICAgdmlzaXRPcGVyYXRpb24ob3BlcmF0aW9uKTsgCi0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXRCaW5kaW5nT3BlcmF0aW9uKEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbikKLSAgewotLy8gICAgQmluZGluZ0lucHV0IGJpbmRpbmdJbnB1dCA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0RUJpbmRpbmdJbnB1dCgpOwotLy8gICAgQmluZGluZ091dHB1dCBiaW5kaW5nT3V0cHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRFQmluZGluZ091dHB1dCgpOyAgICAgICAgIAotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXRPcGVyYXRpb24oT3BlcmF0aW9uIG9wZXJhdGlvbikKLSAgewotICAgIElucHV0IGlucHV0ID0gb3BlcmF0aW9uLmdldEVJbnB1dCgpOwotICAgIE91dHB1dCBvdXRwdXQgPSBvcGVyYXRpb24uZ2V0RU91dHB1dCgpOwotICAgIAotICAgIGlmIChpbnB1dCAhPSBudWxsKQotICAgIHsKLSAgICAgIHZpc2l0SW5wdXQoaW5wdXQpOwotICAgIH0KLSAgICBpZiAob3V0cHV0ICE9IG51bGwpCi0gICAgewotICAgICAgdmlzaXRPdXRwdXQob3V0cHV0KTsKLSAgICB9Ci0gICAgCi0gICAgZm9yIChJdGVyYXRvciBpdGVyYXRvciA9IG9wZXJhdGlvbi5nZXRFRmF1bHRzKCkuaXRlcmF0b3IoKTsgaXRlcmF0b3IuaGFzTmV4dCgpOyApCi0gICAgewotICAgICAgRmF1bHQgZmF1bHQgPSAoRmF1bHQpaXRlcmF0b3IubmV4dCgpOwotICAgICAgaWYgKGZhdWx0ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHZpc2l0RmF1bHQoZmF1bHQpOwotICAgICAgfQotICAgIH0KLQotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXRQYXJ0KFBhcnQgcGFydCkKLSAgewotLy8gICAgWFNEVHlwZURlZmluaXRpb24gdHlwZSA9IHBhcnQuZ2V0VHlwZURlZmluaXRpb24oKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHZpc2l0TWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpCi0gIHsKLSAgICBmb3IgKEl0ZXJhdG9yIGl0ZXJhdG9yID0gbWVzc2FnZS5nZXRFUGFydHMoKS5pdGVyYXRvcigpOyBpdGVyYXRvci5oYXNOZXh0KCk7ICkKLSAgICB7Ci0gICAgICBQYXJ0IHBhcnQgPSAoUGFydClpdGVyYXRvci5uZXh0KCk7Ci0gICAgICB2aXNpdFBhcnQocGFydCk7Ci0gICAgfQotICB9ICAKLQotICBwdWJsaWMgdm9pZCB2aXNpdElucHV0KElucHV0IGlucHV0KQotICB7Ci0gICAgTWVzc2FnZSBtZXNzYWdlID0gaW5wdXQuZ2V0RU1lc3NhZ2UoKTsKLSAgICBpZiAobWVzc2FnZSAhPSBudWxsKQotICAgIHsKLSAgICAgIHZpc2l0TWVzc2FnZShtZXNzYWdlKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdE91dHB1dChPdXRwdXQgb3V0cHV0KQotICB7Ci0gICAgTWVzc2FnZSBtZXNzYWdlID0gb3V0cHV0LmdldEVNZXNzYWdlKCk7Ci0gICAgaWYgKG1lc3NhZ2UgIT0gbnVsbCkKLSAgICB7Ci0gICAgICB2aXNpdE1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXRGYXVsdChGYXVsdCBmYXVsdCkKLSAgewotICAgIE1lc3NhZ2UgbWVzc2FnZSA9IGZhdWx0LmdldEVNZXNzYWdlKCk7Ci0gICAgaWYgKG1lc3NhZ2UgIT0gbnVsbCkKLSAgICB7Ci0gICAgICB2aXNpdE1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXRQb3J0KFBvcnQgcG9ydCkKLSAgewotICAgIEJpbmRpbmcgYmluZGluZyA9IHBvcnQuZ2V0RUJpbmRpbmcoKTsKLSAgICBpZiAoYmluZGluZyAhPSBudWxsKQotICAgIHsKLSAgICAgIHZpc2l0QmluZGluZyhiaW5kaW5nKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdFNlcnZpY2UoU2VydmljZSBzZXJ2aWNlKQotICB7Ci0gICAgZm9yIChJdGVyYXRvciBpdGVyYXRvciA9IHNlcnZpY2UuZ2V0RVBvcnRzKCkuaXRlcmF0b3IoKTsgaXRlcmF0b3IuaGFzTmV4dCgpOyApCi0gICAgewotICAgICAgUG9ydCBwb3J0ID0gKFBvcnQpaXRlcmF0b3IubmV4dCgpOwotICAgICAgdmlzaXRQb3J0KHBvcnQpOwotICAgIH0KLSAgICAKLSAgfSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3Zpc2l0b3IvV1NETFZpc2l0b3JGb3JQYXJhbWV0ZXJzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3Zpc2l0b3IvV1NETFZpc2l0b3JGb3JQYXJhbWV0ZXJzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkOTllYzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC92aXNpdG9yL1dTRExWaXNpdG9yRm9yUGFyYW1ldGVycy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC52aXNpdG9yOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hZGFwdGVycy52aXNpdG9yLlcxMVhTRFZpc2l0b3JGb3JGaWVsZHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RUeXBlRGVmaW5pdGlvbjsKLQotcHVibGljIGNsYXNzIFdTRExWaXNpdG9yRm9yUGFyYW1ldGVycwotewotICAgIHB1YmxpYyBMaXN0IGNvbmNyZXRlQ29tcG9uZW50cyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBwdWJsaWMgTGlzdCB0aGluZ3NUb0xpc3RlblRvID0gbmV3IEFycmF5TGlzdCgpOwotCi0gICAgcHVibGljIHZvaWQgdmlzaXRNZXNzYWdlUmVmZXJlbmNlKE1lc3NhZ2VSZWZlcmVuY2UgbWVzc2FnZVJlZmVyZW5jZSkKLSAgICB7Ci0gICAgICBpZiAobWVzc2FnZVJlZmVyZW5jZS5nZXRFTWVzc2FnZSgpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHZpc2l0TWVzc2FnZShtZXNzYWdlUmVmZXJlbmNlLmdldEVNZXNzYWdlKCkpOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCB2aXNpdE1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKQotICAgIHsKLSAgICAgIC8vIGZvciBub3cgd2UgYXNzdW1lIHRoYXQgdGhlIGZpcnN0IHBhcnQgaXMgdGhlIG9ubHkgb25lIHRoYXQKLSAgICAgIC8vIHNob3VsZCBiZSB1c2VkIHRvIGRlZHVjZSB0aGUgcGFyYW1ldGVycwotICAgICAgLy8gVE9ETyAoY3MpIHdlIG5lZWQgdG8gcmV2aXN0IHRoaXMsIG11bHRpcGxlIHBhcnRzIG5lZWQgdG8gYmUgY29uc2lkZXJlZAotICAgICAgLy8KLSAgICAgICAgaWYgKG1lc3NhZ2UgIT0gbnVsbCkgewotICAgICAgICAgICAgdGhpbmdzVG9MaXN0ZW5Uby5hZGQobWVzc2FnZSk7Ci0gICAgICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBtZXNzYWdlLmdldEVQYXJ0cygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICAgICAgICB7IAotICAgICAgICAgICAgICB2aXNpdFBhcnQoKFBhcnQpaS5uZXh0KCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCB2aXNpdFBhcnQoUGFydCBwYXJ0KQotICAgIHsKLSAgICAgIHRoaW5nc1RvTGlzdGVuVG8uYWRkKHBhcnQpOyAgICAgIAotICAgICAgaWYgKHBhcnQuZ2V0RWxlbWVudERlY2xhcmF0aW9uKCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdmlzaXRYU0RFbGVtZW50RGVjbGFyYXRpb24ocGFydC5nZXRFbGVtZW50RGVjbGFyYXRpb24oKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAvLyBpZiAocGFydC5nZXRUeXBlRGVmaW5pdGlvbigpIGluc3RhbmNlb2YgWFNEU2ltcGxlVHlwZURlZmluaXRpb24pCi0gICAgICB7Ci0gICAgICAgIGNvbmNyZXRlQ29tcG9uZW50cy5hZGQocGFydCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCB2aXNpdFhTREVsZW1lbnREZWNsYXJhdGlvbihYU0RFbGVtZW50RGVjbGFyYXRpb24gZWQpCi0gICAgewotICAgICAgWFNEVHlwZURlZmluaXRpb24gdGQgPSBlZC5nZXRUeXBlRGVmaW5pdGlvbigpOwotICAgICAgaWYgKHRkICE9IG51bGwpCi0gICAgICB7ICAKLSAgICAgICAgaWYgKHRkLmdldE5hbWUoKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgY29uY3JldGVDb21wb25lbnRzLmFkZChlZCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAodGQgaW5zdGFuY2VvZiBYU0RDb21wbGV4VHlwZURlZmluaXRpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAvLyB3ZSdyZSBkZWFsaW5nIHdpdGggYW4gYW5vbnltb3VzIGxvY2FsbHkgZGVmaW5lZCB0eXBlCi0gICAgICAgICAgLy8gc2Ugd2UgbmVlZCB0byB2aXNpdCBpdCdzIGNoaWxkcmVuCi0gICAgICAgICAgdGhpbmdzVG9MaXN0ZW5Uby5hZGQoZWQpOwotICAgICAgICAgIHZpc2l0WFNEQ29tcGxleHRUeXBlRGVmaW5pdGlvbigoWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKSB0ZCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICB2b2lkIHZpc2l0WFNEQ29tcGxleHRUeXBlRGVmaW5pdGlvbihYU0RDb21wbGV4VHlwZURlZmluaXRpb24gdGQpCi0gICAgewotICAgICAgLy8gVE9ETyAoY3MpIHJldmlzaXQgdG8gc2VlIGlmIGl0IG1ha2VzIHNlbnNlIGZvciB0aGUgV1NETCBlZGl0b3IgdG8gcmVkaXNwbGF5Ci0gICAgICAvLyB0aGUgJ0ZpZWxkcycgKGluIFhTRCBlZGl0b3IgbGluZ28pIGFzIHBhcmFtdGVycwotICAgICAgLy8gcGVyaGFwcyB0aGUgV1NETCBFZGl0b3Igc2hvdWxkIHNpbXBseSByZXVzZSB0aGUgWFNEIEVkaXRvcidzCi0gICAgICAvLyBDb21wbGV4VHlwZSBlZGl0IHBhcnQgd2hlbiBkaXNwbGF5aW5nIHRoZXNlIHNlY3Rpb25zPwotICAgICAgVzExWFNEVmlzaXRvckZvckZpZWxkcyBmaWVsZFZpc2l0b3IgPSBuZXcgVzExWFNEVmlzaXRvckZvckZpZWxkcygpOwotICAgICAgZmllbGRWaXNpdG9yLnZpc2l0Q29tcGxleFR5cGVEZWZpbml0aW9uKHRkKTsKLSAgICAgIGNvbmNyZXRlQ29tcG9uZW50cy5hZGRBbGwoZmllbGRWaXNpdG9yLmdldENvbmNyZXRlQ29tcG9uZW50TGlzdCgpKTsKLSAgICAgIHRoaW5nc1RvTGlzdGVuVG8uYWRkQWxsKGZpZWxkVmlzaXRvci5nZXRUaGluZ3NXZU5lZWRUb0xpc3RlblRvKCkpOwotICAgIH0KLSAgfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvd2l6YXJkcy9CaW5kaW5nV2l6YXJkLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3dpemFyZHMvQmluZGluZ1dpemFyZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NjcwMWMyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvd2l6YXJkcy9CaW5kaW5nV2l6YXJkLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLndpemFyZHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZ2VuZXJhdG9yLkJpbmRpbmdHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yQ1NIZWxwSWRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmRpYWxvZ3MuUHJvdG9jb2xDb21wb25lbnRDb250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuQ29tcG9uZW50UmVmZXJlbmNlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLk5hbWVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi1wdWJsaWMgY2xhc3MgQmluZGluZ1dpemFyZCBleHRlbmRzIFdpemFyZAotewotICBwcm90ZWN0ZWQgQmluZGluZ0dlbmVyYXRvciBiaW5kaW5nR2VuZXJhdG9yOwotICBwcm90ZWN0ZWQgQmluZGluZ1dpemFyZE9wdGlvbnNQYWdlIHNwZWNpZnlCaW5kaW5nUGFnZTsKLQotICBwcm90ZWN0ZWQgRG9jdW1lbnQgZG9jdW1lbnQ7Ci0gIHByb3RlY3RlZCBpbnQga2luZDsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBLSU5EX05FV19CSU5ESU5HID0gMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgS0lORF9SRUdFTkVSQVRFX0JJTkRJTkcgPSAyOwotCi0gIHByb3RlY3RlZCBEZWZpbml0aW9uIGRlZmluaXRpb247Ci0gIAotICAvKgotICAgKiBDb25zdHJ1Y3RvciB1c2VkIHdoZW4gYXJlIGNyZWF0aW5nIGEgYnJhbmQgbmV3IEJpbmRpbmcKLSAgICovCi0gIHB1YmxpYyBCaW5kaW5nV2l6YXJkKERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgIHRoaXMoZGVmaW5pdGlvbiwgbnVsbCwgS0lORF9ORVdfQklORElORyk7Ci0gIH0KLQotICAvKgotICAgKiBDb25zdHJ1Y3RvciB1c2VkIHdoZW4gYXJlIGNyZWF0aW5nIGEgYnJhbmQgbmV3IEJpbmRpbmcKLSAgICovCi0gIHB1YmxpYyBCaW5kaW5nV2l6YXJkKERlZmluaXRpb24gZGVmaW5pdGlvbiwgRG9jdW1lbnQgZG9jdW1lbnQpCi0gIHsKLSAgICB0aGlzKGRlZmluaXRpb24sIG51bGwsIEtJTkRfTkVXX0JJTkRJTkcpOwotICAgIHRoaXMuZG9jdW1lbnQgPSBkb2N1bWVudDsKLSAgfQotICAKLSAgLyoKLSAgICogQ29uc3RydWN0b3IgdXNlZCB3aGVuIHRoZXJlIGlzIGFuIGV4aXN0aW5nIEJpbmRpbmcgd2Ugd2lzaCB0byBtb2RpZnkvcmVnZW5lcmF0ZQotICAgKi8KLSAgcHVibGljIEJpbmRpbmdXaXphcmQoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBCaW5kaW5nIGJpbmRpbmcsIGludCBraW5kKQotICB7Ci0gICAgc3VwZXIoKTsKLQl0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotICAgIHRoaXMua2luZCA9IGtpbmQ7CQotCWJpbmRpbmdHZW5lcmF0b3IgPSBuZXcgQmluZGluZ0dlbmVyYXRvcihkZWZpbml0aW9uLCBiaW5kaW5nKTsKLQotICAgIHNldFdpbmRvd1RpdGxlKE1lc3NhZ2VzLl9VSV9CSU5ESU5HX1dJWkFSRCk7IC8vJE5PTi1OTFMtMSQKLSAgICAvL3NldERlZmF1bHRQYWdlSW1hZ2VEZXNjcmlwdG9yKEltYWdlRGVzY3JpcHRvci5jcmVhdGVGcm9tRmlsZShXU0RMRWRpdG9yUGx1Z2luLmNsYXNzLCAiaWNvbnMvTmV3WE1MLmdpZiIpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEJpbmRpbmdOYW1lKFN0cmluZyBiaW5kaW5nTmFtZSkKLSAgewotLy8gICAgUU5hbWUgcW5hbWUgPSBuZXcgUU5hbWUoZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKSwgYmluZGluZ05hbWUpOwotICAgIGJpbmRpbmdHZW5lcmF0b3Iuc2V0TmFtZShiaW5kaW5nTmFtZSk7Ci0vKgotIAkvLyBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZykgZGVmaW5pdGlvbi5nZXRCaW5kaW5nKHFuYW1lKTsKLQlpZiAoYmluZGluZyAhPSBudWxsKQotICAgIHsKLQkgIExpc3QgZWVMaXN0ID0gYmluZGluZy5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICBpZiAoZWVMaXN0LnNpemUoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGVlID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBlZUxpc3QuZ2V0KDApOwotICAgICAgICBFbGVtZW50IGVsZW1lbnQgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldEVsZW1lbnRGb3JPYmplY3QoZWUpOwotICAgICAgICBTdHJpbmcgbmFtZXNwYWNlID0gZWxlbWVudC5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICAgICAgaWYgKG5hbWVzcGFjZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgQ29udGVudEdlbmVyYXRvckV4dGVuc2lvbiBleHRlbnNpb24gPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0Q29udGVudEdlbmVyYXRvckV4dGVuc2lvblJlZ2lzdHJ5KCkuZ2V0RXh0ZW5zaW9uRm9yTmFtZXNwYWNlKG5hbWVzcGFjZSk7Ci0KLSAgICAgICAgICBpZiAoZXh0ZW5zaW9uICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgYmluZGluZ0dlbmVyYXRvci5zZXRQcm90b2NvbChleHRlbnNpb24uZ2V0TmFtZSgpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgKi8KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFBvcnRUeXBlTmFtZShTdHJpbmcgcG9ydFR5cGVOYW1lKQotICB7Ci0gICAgYmluZGluZ0dlbmVyYXRvci5zZXRSZWZOYW1lKHBvcnRUeXBlTmFtZSk7Ci0gIH0KLQotICBwdWJsaWMgQmluZGluZ0dlbmVyYXRvciBnZXRCaW5kaW5nR2VuZXJhdG9yKCkKLSAgewotICAgIHJldHVybiBiaW5kaW5nR2VuZXJhdG9yOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybiB0cnVlIGlmIHdpemFyZCBzZXR1cCBpcyBzdWNjZXNzZnVsLCBmYWxzZSBvdGhlcndpc2UKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIHNldHVwKCkKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgYWRkUGFnZXMoKQotICB7Ci0gICAgc3BlY2lmeUJpbmRpbmdQYWdlID0gbmV3IEJpbmRpbmdXaXphcmRPcHRpb25zUGFnZSgpOwotICAgIGFkZFBhZ2Uoc3BlY2lmeUJpbmRpbmdQYWdlKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHBlcmZvcm1GaW5pc2goKQotICB7Ci0gIAlib29sZWFuIHJlY29yZGluZ1N0YXJ0ZWQgPSBmYWxzZTsKLQkvLyBHZW5lcmF0ZS9yZS1nZW5lcmF0ZSB0aGUgQmluZGluZwotICAgIHRyeQotICAgIHsKLQkJQmluZGluZyBiaW5kaW5nID0gYmluZGluZ0dlbmVyYXRvci5nZW5lcmF0ZUJpbmRpbmcoKTsKLQkJCi0gICAgICBpZiAoYmluZGluZyAhPSBudWxsKQotICAgICAgewotICAgICAgICBJRWRpdG9yUGFydCBlZGl0b3JQYXJ0ID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLSAgICAgICAgSVNlbGVjdGlvblByb3ZpZGVyIHNlbGVjdGlvblByb3ZpZGVyID0gKElTZWxlY3Rpb25Qcm92aWRlcikgZWRpdG9yUGFydC5nZXRBZGFwdGVyKElTZWxlY3Rpb25Qcm92aWRlci5jbGFzcyk7Ci0gICAgICAgIGlmIChzZWxlY3Rpb25Qcm92aWRlciAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgc2VsZWN0aW9uUHJvdmlkZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGJpbmRpbmcpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgIH0KLSAgICBmaW5hbGx5IHsKLSAgICAJaWYgKHJlY29yZGluZ1N0YXJ0ZWQpCi0gICAgCQllbmRSZWNvcmRpbmcoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0RGVmYXVsdE5hbWVzcGFjZShEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICBTdHJpbmcgbmFtZXNwYWNlID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFByZWZlcmVuY2VTdG9yZSgpLmdldFN0cmluZyhNZXNzYWdlcy5fVUlfUFJFRl9QQUdFX0RFRkFVTFRfVEFSR0VUX05BTUVTUEFDRSk7IC8vJE5PTi1OTFMtMSQKLSAgICBpZiAoIW5hbWVzcGFjZS5lbmRzV2l0aCgiLyIpKSB7IC8vJE5PTi1OTFMtMSQKLSAgICAJbmFtZXNwYWNlID0gbmFtZXNwYWNlLmNvbmNhdCgiLyIpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIAotICAgIG5hbWVzcGFjZSArPSBnZXRGaWxlTmFtZShkZWZpbml0aW9uKSArICIvIjsgLy8kTk9OLU5MUy0xJAotCi0gICAgcmV0dXJuIG5hbWVzcGFjZTsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0RmlsZU5hbWUoRGVmaW5pdGlvbiBkZWZpbml0aW9uKSB7Ci0gICAgU3RyaW5nIGZpbGVMb2NhdGlvbiA9IGRlZmluaXRpb24uZ2V0TG9jYXRpb24oKTsKLSAgCUlQYXRoIGZpbGVQYXRoID0gbmV3IFBhdGgoZmlsZUxvY2F0aW9uKTsKLSAgCXJldHVybiBmaWxlUGF0aC5yZW1vdmVGaWxlRXh0ZW5zaW9uKCkubGFzdFNlZ21lbnQoKS50b1N0cmluZygpOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgYmVnaW5SZWNvcmRpbmcoKSB7Ci0gICAgTm9kZSBub2RlID0gZG9jdW1lbnQ7Ci0gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBJRE9NTm9kZSkKLSAgICB7Ci0gICAgICAoKElET01Ob2RlKW5vZGUpLmdldE1vZGVsKCkuYmVnaW5SZWNvcmRpbmcodGhpcywgTWVzc2FnZXMuX1VJX0FDVElPTl9BRERfQklORElORyk7ICAgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGVuZFJlY29yZGluZygpIHsKLSAgICBOb2RlIG5vZGUgPSBkb2N1bWVudDsgCi0gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBJRE9NTm9kZSkKLSAgICB7Ci0gICAgICAoKElET01Ob2RlKW5vZGUpLmdldE1vZGVsKCkuZW5kUmVjb3JkaW5nKHRoaXMpOyAgCi0gICAgfQotICB9Ci0KLSAgY2xhc3MgQmluZGluZ1dpemFyZE9wdGlvbnNQYWdlIGV4dGVuZHMgV2l6YXJkUGFnZQotICB7Ci0gICAgcHJvdGVjdGVkIFByb3RvY29sQ29tcG9uZW50Q29udHJvbCBwcm90b2NvbENvbXBvbmVudENvbnRyb2w7Ci0KLSAgICBwdWJsaWMgQmluZGluZ1dpemFyZE9wdGlvbnNQYWdlKCkKLSAgICB7Ci0gICAgICBzdXBlcigiU3BlY2lmeUJpbmRpbmdQYWdlIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIHNldFRpdGxlKE1lc3NhZ2VzLl9VSV9USVRMRV9TUEVDSUZZX0JJTkRJTkdfREVUQUlMUyk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIHNldERlc2NyaXB0aW9uKE1lc3NhZ2VzLl9VSV9TUEVDSUZZX0JJTkRJTkdfREVUQUlMU19MQUJFTCk7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgQmluZGluZ0dlbmVyYXRvciBnZXRCaW5kaW5nR2VuZXJhdG9yKCkKLSAgICB7Ci0gICAgICByZXR1cm4gKChCaW5kaW5nV2l6YXJkKSBnZXRXaXphcmQoKSkuZ2V0QmluZGluZ0dlbmVyYXRvcigpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkKLSAgICB7Ci0gICAgICBQcm90b2NvbENvbXBvbmVudENvbnRyb2wgcHJvdG9jb2xDb21wb25lbnRDb250cm9sID0gbmV3IEJpbmRpbmdQcm90b2NvbENvbXBvbmVudENvbnRyb2wocGFyZW50LCBiaW5kaW5nR2VuZXJhdG9yLCB0cnVlKTsKLSAgICAgIHByb3RvY29sQ29tcG9uZW50Q29udHJvbC5pbml0RmllbGRzKCk7Ci0gICAgICBzZXRDb250cm9sKHByb3RvY29sQ29tcG9uZW50Q29udHJvbCk7Ci0gICAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHByb3RvY29sQ29tcG9uZW50Q29udHJvbCwgQVNERWRpdG9yQ1NIZWxwSWRzLkJJTkRJTkdfV0laQVJEKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGNsYXNzIEJpbmRpbmdQcm90b2NvbENvbXBvbmVudENvbnRyb2wgZXh0ZW5kcyBQcm90b2NvbENvbXBvbmVudENvbnRyb2wKLSAgewotICAgIHB1YmxpYyBCaW5kaW5nUHJvdG9jb2xDb21wb25lbnRDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQsIEJpbmRpbmdHZW5lcmF0b3IgZ2VuZXJhdG9yKQotICAgIHsKLSAgICAgIHRoaXMocGFyZW50LCBnZW5lcmF0b3IsIHRydWUpOwotICAgIH0KLQotICAgIHB1YmxpYyBCaW5kaW5nUHJvdG9jb2xDb21wb25lbnRDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQsIEJpbmRpbmdHZW5lcmF0b3IgZ2VuZXJhdG9yLCBib29sZWFuIHNob3dPdmVyd3JpdGVCdXR0b24pCi0gICAgewotICAgICAgc3VwZXIocGFyZW50LCBnZW5lcmF0b3IsIHNob3dPdmVyd3JpdGVCdXR0b24pOwotCi0gICAgICBpZiAoZ2VuZXJhdG9yLmdldE5hbWUoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBjb21wb25lbnROYW1lRmllbGQuc2V0RWRpdGFibGUoZmFsc2UpOwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0UmVmTmFtZUxhYmVsVGV4dCgpCi0gICAgewotICAgICAgcmV0dXJuIE1lc3NhZ2VzLl9VSV9QT1JUX1RZUEU7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0KLSAgICBwdWJsaWMgTGlzdCBnZXRSZWZOYW1lcygpCi0gICAgewotICAgICAgcmV0dXJuIG5ldyBDb21wb25lbnRSZWZlcmVuY2VVdGlsKGdlbmVyYXRvci5nZXREZWZpbml0aW9uKCkpLmdldFBvcnRUeXBlTmFtZXMoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldERlZmF1bHROYW1lKCkKLSAgICB7Ci0gICAgICBTdHJpbmcgYmluZGluZ05hbWUgPSBnZW5lcmF0b3IuZ2V0TmFtZSgpOwotICAgICAgcmV0dXJuIGJpbmRpbmdOYW1lICE9IG51bGwgPyBiaW5kaW5nTmFtZSA6IE5hbWVVdGlsLmJ1aWxkVW5pcXVlQmluZGluZ05hbWUoZ2VuZXJhdG9yLmdldERlZmluaXRpb24oKSwgbnVsbCk7Ci0gICAgfQotCi0gICAgcHVibGljIENvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZSBjcmVhdGVDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UoU3RyaW5nIHByb3RvY29sKQotICAgIHsKLSAgICAgIENvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZSBvcHRpb25zUGFnZSA9IG51bGw7Ci0JICBTdHJpbmcgcHJvdG9jb2xTZWxlY3Rpb24gPSBwcm90b2NvbENvbWJvLmdldEl0ZW0ocHJvdG9jb2xDb21iby5nZXRTZWxlY3Rpb25JbmRleCgpKTsKLQkgIGlmIChwcm90b2NvbFNlbGVjdGlvbi5lcXVhbHMoIlNPQVAiKSkgeyAvLyROT04tTkxTLTEkCi0JCSAgb3B0aW9uc1BhZ2UgPSBuZXcgU29hcEJpbmRpbmdPcHRpb25zUGFnZSgpOwotCSAgfQotCSAgZWxzZSBpZiAocHJvdG9jb2xTZWxlY3Rpb24uZXF1YWxzKCJIVFRQIikpIHsgLy8kTk9OLU5MUy0xJAotCQkgIG9wdGlvbnNQYWdlID0gbmV3IEh0dHBCaW5kaW5nT3B0aW9uc1BhZ2UoKTsKLQkgIH0KLS8vICAgICAgQ29udGVudEdlbmVyYXRvckV4dGVuc2lvbiBleHRlbnNpb24gPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0Q29udGVudEdlbmVyYXRvckV4dGVuc2lvblJlZ2lzdHJ5KCkuZ2V0Q29udGVudEdlbmVyYXRvckV4dGVuc2lvbihwcm90b2NvbCk7Ci0vLyAgICAgIGlmIChleHRlbnNpb24gIT0gbnVsbCkKLS8vICAgICAgewotLy8gICAgICAgIG9wdGlvbnNQYWdlID0gZXh0ZW5zaW9uLmNyZWF0ZUJpbmRpbmdDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UoKTsKLS8vICAgICAgfQotICAgICAgcmV0dXJuIG9wdGlvbnNQYWdlOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC93aXphcmRzL0NvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC93aXphcmRzL0NvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTE2ZTFhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvd2l6YXJkcy9Db250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC53aXphcmRzOyAgCi0gICAgICAgIAotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuQmFzZUdlbmVyYXRvcjsKLQotcHVibGljIGludGVyZmFjZSBDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgcHVibGljIHZvaWQgaW5pdChCYXNlR2VuZXJhdG9yIGJhc2VHZW5lcmF0b3IpOyAgICAgICAgICAgICAKLSAgcHVibGljIENvbXBvc2l0ZSBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpOwotICBwdWJsaWMgQ29tcG9zaXRlIGdldENvbnRyb2woKTsKLSAgCi0gIC8vIFRPRE8gY2FuIHRoaXMgZ28gaW50byBpbml0PwotICAvLwotICBwdWJsaWMgdm9pZCBzZXRPcHRpb25zT25HZW5lcmF0b3IoKTsKLSAgcHVibGljIGJvb2xlYW4gaXNPdmVyd3JpdGVBcHBsaWNhYmxlKCk7Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC93aXphcmRzL0h0dHBCaW5kaW5nT3B0aW9uc1BhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvd2l6YXJkcy9IdHRwQmluZGluZ09wdGlvbnNQYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5NTg2NzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC93aXphcmRzL0h0dHBCaW5kaW5nT3B0aW9uc1BhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwud2l6YXJkczsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5nZW5lcmF0b3IuSFRUUENvbnRlbnRHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuZ2VuZXJhdG9yLkJhc2VHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMRWRpdG9yVXRpbDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLXB1YmxpYyBjbGFzcyBIdHRwQmluZGluZ09wdGlvbnNQYWdlIGltcGxlbWVudHMgQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlLCBTZWxlY3Rpb25MaXN0ZW5lcgotewotICBwcm90ZWN0ZWQgQnV0dG9uIGdldEJ1dHRvbjsKLSAgcHJvdGVjdGVkIEJ1dHRvbiBwb3N0QnV0dG9uOwotICBwcm90ZWN0ZWQgQ29tcG9zaXRlIGNvbnRyb2w7Ci0gIHByb3RlY3RlZCBCYXNlR2VuZXJhdG9yIGdlbmVyYXRvcjsKLSAgcHJvdGVjdGVkIEhUVFBDb250ZW50R2VuZXJhdG9yIGh0dHBHZW5lcmF0b3I7Ci0KLSAgcHVibGljIEh0dHBCaW5kaW5nT3B0aW9uc1BhZ2UoKQotICB7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBpbml0KEJhc2VHZW5lcmF0b3IgZ2VuZXJhdG9yKQotICB7Ci0gICAgdGhpcy5nZW5lcmF0b3IgPSBnZW5lcmF0b3I7Ci0JaWYgKGdlbmVyYXRvci5nZXRDb250ZW50R2VuZXJhdG9yKCkgaW5zdGFuY2VvZiBIVFRQQ29udGVudEdlbmVyYXRvcikgewotCQlodHRwR2VuZXJhdG9yID0gKEhUVFBDb250ZW50R2VuZXJhdG9yKSBnZW5lcmF0b3IuZ2V0Q29udGVudEdlbmVyYXRvcigpOwotCX0KLSAgfQotCi0gIHB1YmxpYyBDb21wb3NpdGUgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KQotICB7Ci0gICAgY29udHJvbCA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7Ci0gICAgR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGxheW91dC5tYXJnaW5XaWR0aCA9IDA7Ci0gICAgY29udHJvbC5zZXRMYXlvdXQobGF5b3V0KTsKLQotICAgIExhYmVsIHNlcGFyYXRvciA9IG5ldyBMYWJlbChjb250cm9sLCBTV1QuU0VQQVJBVE9SIHwgU1dULkhPUklaT05UQUwpOwotICAgIEdyaWREYXRhIGdkPSBuZXcgR3JpZERhdGEoKTsKLSAgICBnZC5ob3Jpem9udGFsQWxpZ25tZW50PSBHcmlkRGF0YS5GSUxMOwotICAgIGdkLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2U9IHRydWU7Ci0gICAKLSAgICBzZXBhcmF0b3Iuc2V0TGF5b3V0RGF0YShnZCk7Ci0KLSAgICBMYWJlbCBvcHRpb25zSGVhZGluZyA9IG5ldyBMYWJlbChjb250cm9sLCBTV1QuTk9ORSk7Ci0gICAgb3B0aW9uc0hlYWRpbmcuc2V0VGV4dChNZXNzYWdlcy5fVUlfTEFCRUxfSFRUUF9CSU5ESU5HX09QVElPTlMpOyAvLyROT04tTkxTLTEkCi0KLSAgICBnZXRCdXR0b24gPSBuZXcgQnV0dG9uKGNvbnRyb2wsIFNXVC5SQURJTyk7Ci0gICAgZ2V0QnV0dG9uLnNldFRleHQoIkhUVFAgR0VUIik7IC8vJE5PTi1OTFMtMSQKLSAgICBnZXRCdXR0b24uc2V0U2VsZWN0aW9uKHRydWUpOwotCi0gICAgcG9zdEJ1dHRvbiA9IG5ldyBCdXR0b24oY29udHJvbCwgU1dULlJBRElPKTsKLSAgICBwb3N0QnV0dG9uLnNldFRleHQoIkhUVFAgUE9TVCIpOyAvLyROT04tTkxTLTEkCi0KLSAgICBpZiAoZ2VuZXJhdG9yLmdldE5hbWUoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IGdlbmVyYXRvci5nZXREZWZpbml0aW9uKCk7Ci0gICAgICBRTmFtZSBxbmFtZSA9IG5ldyBRTmFtZShkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpLCBnZW5lcmF0b3IuZ2V0TmFtZSgpKTsKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBkZWZpbml0aW9uLmdldEJpbmRpbmcocW5hbWUpOwotICAgICAgaWYgKGJpbmRpbmcgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgTGlzdCBlZUxpc3QgPSBiaW5kaW5nLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgICAgaWYgKGVlTGlzdC5zaXplKCkgPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZWUgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGVlTGlzdC5nZXQoMCk7Ci0gICAgICAgICAgRWxlbWVudCBlbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KGVlKTsKLSAgICAgICAgICBTdHJpbmcgdmVyYiA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCJ2ZXJiIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICBpZiAoIlBPU1QiLmVxdWFscyh2ZXJiKSkgLy8kTk9OLU5MUy0xJAotICAgICAgICAgIHsKLSAgICAgICAgICAgIGdldEJ1dHRvbi5zZXRTZWxlY3Rpb24oZmFsc2UpOwotICAgICAgICAgICAgcG9zdEJ1dHRvbi5zZXRTZWxlY3Rpb24odHJ1ZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcG9zdEJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKLSAgICBnZXRCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0JY29tcHV0ZU9wdGlvbnMoKTsKLQkKLSAgICByZXR1cm4gY29udHJvbDsKLSAgfQotICAKLSAgcHVibGljIENvbXBvc2l0ZSBnZXRDb250cm9sKCkgewotCSAgcmV0dXJuIGNvbnRyb2w7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGlzT3ZlcndyaXRlQXBwbGljYWJsZSgpCi0gIHsKLSAgCXJldHVybiB0cnVlOwotICB9ICAKLQotICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkKLSAgewotCWNvbXB1dGVPcHRpb25zKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBjb21wdXRlT3B0aW9ucygpCi0gIHsKLQkgIGlmIChnZW5lcmF0b3IuZ2V0Q29udGVudEdlbmVyYXRvcigpIGluc3RhbmNlb2YgSFRUUENvbnRlbnRHZW5lcmF0b3IpIHsKLQkJICBIVFRQQ29udGVudEdlbmVyYXRvciBodHRwR2VuZXJhdG9yID0gKEhUVFBDb250ZW50R2VuZXJhdG9yKSBnZW5lcmF0b3IuZ2V0Q29udGVudEdlbmVyYXRvcigpOwotCi0JCSAgaWYgKHBvc3RCdXR0b24uZ2V0U2VsZWN0aW9uKCkpIHsKLQkJCSAgaHR0cEdlbmVyYXRvci5zZXRWZXJiKEhUVFBDb250ZW50R2VuZXJhdG9yLlZFUkJfUE9TVCk7Ci0JCSAgfQkgIAotCQkgIGVsc2UgaWYgKGdldEJ1dHRvbi5nZXRTZWxlY3Rpb24oKSkgewotCQkJICBodHRwR2VuZXJhdG9yLnNldFZlcmIoSFRUUENvbnRlbnRHZW5lcmF0b3IuVkVSQl9HRVQpOwotCQkgIH0KLQkgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0T3B0aW9uc09uR2VuZXJhdG9yKCkgewotCSAgY29tcHV0ZU9wdGlvbnMoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkKLSAgewotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3dpemFyZHMvTmFtZXNwYWNlVGFibGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvd2l6YXJkcy9OYW1lc3BhY2VUYWJsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODQzOGMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvd2l6YXJkcy9OYW1lc3BhY2VUYWJsZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzAyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC53aXphcmRzOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkNlbGxFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5DaGVja2JveENlbGxFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5Db2x1bW5XZWlnaHREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUNlbGxNb2RpZmllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JVGFibGVMYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGV4dENlbGxFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vdXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vdXNlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb3VzZUxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGVDb2x1bW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGVJdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwudmlld2Vycy5OYXZpZ2FibGVUYWJsZVZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwudXRpbC5OYW1lc3BhY2VJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwuZGlhbG9ncy5FZGl0TmFtZXNwYWNlSW5mb0RpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLmRpYWxvZ3MuVXBkYXRlTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC51dGlsLlhNTENvbW1vblJlc291cmNlczsKLSAKLXB1YmxpYyBjbGFzcyBOYW1lc3BhY2VUYWJsZSBleHRlbmRzIENvbXBvc2l0ZQotewotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FU1BBQ0VfVVJJID0gWE1MQ29tbW9uUmVzb3VyY2VzLmdldEluc3RhbmNlKCkuZ2V0U3RyaW5nKCJfVUlfTEFCRUxfTkFNRVNQQUNFX05BTUUiKTsgIC8vJE5PTi1OTFMtMSQKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJFRklYID0gWE1MQ29tbW9uUmVzb3VyY2VzLmdldEluc3RhbmNlKCkuZ2V0U3RyaW5nKCJfVUlfTEFCRUxfUFJFRklYIik7ICAvLyROT04tTkxTLTEkCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIElOQ0xVREUgPSBNZXNzYWdlcy5fVUlfVElUTEVfU0VMRUNUOyAvLyROT04tTkxTLTEkCi0gICAgCi0gIHByb3RlY3RlZCBMaXN0IG5hbWVzcGFjZUluZm9MaXN0ID0gbmV3IFZlY3RvcigpOwotICBwcm90ZWN0ZWQgTGlzdCBjaGVja2VkTGlzdCA9IG5ldyBWZWN0b3IoKTsKLSAgcHJvdGVjdGVkIE5hbWVzcGFjZU5hdmlnYWJsZVRhYmxlVmlld2VyIHRhYmxlVmlld2VyOyAgICAKLSAgcHJvdGVjdGVkIEJ1dHRvbiBhZGRCdXR0b247Ci0KLSAgcHJvdGVjdGVkIE5hbWVzcGFjZUluZm9UYWJsZUxhYmVsUHJvdmlkZXIgcHJvdmlkZXI7Ci0gIHByb3RlY3RlZCBVcGRhdGVMaXN0ZW5lciB1cGRhdGVMaXN0ZW5lcjsgICAKLSAgcHJvdGVjdGVkIElQYXRoIHJlc291cmNlTG9jYXRpb247ICAKLSAgcHJvdGVjdGVkIGludCB2aXNpYmxlUm93cyA9IC0xOyAgCi0gIHByb3RlY3RlZCBib29sZWFuIGR1bW15Um93c1JlbW92ZWQgPSBmYWxzZTsKLSAgVGFibGUgdGFibGU7Ci0KLSAgcHVibGljIE5hbWVzcGFjZVRhYmxlKENvbXBvc2l0ZSBwYXJlbnQpCi0gIHsgIAotICAgIHRoaXMocGFyZW50LCAtMSwgLTEsIC0xKTsKLSAgfSAgICAKLQotICBwdWJsaWMgTmFtZXNwYWNlVGFibGUoQ29tcG9zaXRlIHBhcmVudCwgaW50IHZpc2libGVSb3dzKQotICB7Ci0gICAgdGhpcyhwYXJlbnQsIC0xLCAtMSwgdmlzaWJsZVJvd3MpOwotICB9Ci0KLSAgcHVibGljIE5hbWVzcGFjZVRhYmxlKENvbXBvc2l0ZSBwYXJlbnQsIGludCB3aWR0aEhpbnQsIGludCBoZWlnaHRIaW50KQotICB7Ci0gICAgdGhpcyhwYXJlbnQsIHdpZHRoSGludCwgaGVpZ2h0SGludCwgLTEpOwotICB9Ci0KLSAgcHVibGljIE5hbWVzcGFjZVRhYmxlKENvbXBvc2l0ZSBwYXJlbnQsIGludCB3aWR0aEhpbnQsIGludCBoZWlnaHRIaW50LCBpbnQgdmlzaWJsZVJvd3MpCi0gIHsKLSAgICBzdXBlcihwYXJlbnQsIFNXVC5OT05FKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICBzZXRMYXlvdXQoY3JlYXRlR3JpZExheW91dCgpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICBHcmlkRGF0YSBmaWxsR0Q9IG5ldyBHcmlkRGF0YSgpOwotICAgIGZpbGxHRC5ob3Jpem9udGFsQWxpZ25tZW50PSBHcmlkRGF0YS5GSUxMOwotICAgIGZpbGxHRC5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlPSB0cnVlOwotICAgIGZpbGxHRC52ZXJ0aWNhbEFsaWdubWVudD0gR3JpZERhdGEuRklMTDsKLSAgICBmaWxsR0QuZ3JhYkV4Y2Vzc1ZlcnRpY2FsU3BhY2U9IHRydWU7Ci0gICAgCi0gICAgc2V0TGF5b3V0RGF0YShmaWxsR0QpOyAgICAgICAgICAgICAKLSAgICAKLSAgICBHcm91cCBuYW1lc3BhY2VJbmZvR3JvdXAgPSBuZXcgR3JvdXAodGhpcywgU1dULk5PTkUpOwotICAgIG5hbWVzcGFjZUluZm9Hcm91cC5zZXRUZXh0KE1lc3NhZ2VzLl9VSV9MQUJFTF9OQU1FU1BBQ0VfVVJJU19UT19CRV9JTkNMVURFRCk7IC8vJE5PTi1OTFMtMSQKLSAgICBuYW1lc3BhY2VJbmZvR3JvdXAuc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KCkpOyAgIAotICAgIEdyaWREYXRhIGdkID0gZmlsbEdEOwotICAgIGlmICh3aWR0aEhpbnQgIT0gLTEpCi0gICAgewotICAgICAgZ2Qud2lkdGhIaW50ID0gd2lkdGhIaW50OwotICAgIH0gICAKLSAgICBpZiAoaGVpZ2h0SGludCAhPSAtMSkKLSAgICB7Ci0gICAgICBnZC5oZWlnaHRIaW50ID0gaGVpZ2h0SGludDsKLSAgICB9Ci0gICAgbmFtZXNwYWNlSW5mb0dyb3VwLnNldExheW91dERhdGEoZ2QpOyAKLSAgICAvL1dvcmtiZW5jaEhlbHAuc2V0SGVscChuYW1lc3BhY2VJbmZvR3JvdXAsIG5ldyBDb250cm9sQ29udGV4dENvbXB1dGVyKG5hbWVzcGFjZUluZm9Hcm91cCwgWE1MQnVpbGRlckNvbnRleHRJZHMuWE1MQ19OQU1FU1BBQ0VfR1JPVVApKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgU3RyaW5nW10gdGl0bGVBcnJheSA9IHtJTkNMVURFLCBQUkVGSVgsIE5BTUVTUEFDRV9VUkl9OwotCi0gICAgdGFibGUgPSBuZXcgVGFibGUobmFtZXNwYWNlSW5mb0dyb3VwLCBTV1QuRlVMTF9TRUxFQ1RJT04pOwotICAgIHRhYmxlLnNldEhlYWRlclZpc2libGUodHJ1ZSk7Ci0gICAgCi0gICAgdGFibGUuc2V0TGF5b3V0RGF0YShmaWxsR0QpOwotICAgIHRhYmxlLnNldExpbmVzVmlzaWJsZSh0cnVlKTsKLSAgICB0YWJsZS5hZGRNb3VzZUxpc3RlbmVyKG5ldyBNb3VzZUFkYXB0ZXIoKQotICAgIHsKLSAgICAgIHB1YmxpYyB2b2lkIG1vdXNlRG93bihNb3VzZUV2ZW50IGUpCi0gICAgICB7Ci0gICAgICAgIFRhYmxlSXRlbSBpdGVtID0gdGFibGUuZ2V0SXRlbShuZXcgUG9pbnQoZS54LCBlLnkpKTsKLSAgICAgICAgaWYgKGl0ZW0gIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIE9iamVjdCBvYmogPSBpdGVtLmdldERhdGEoKTsKLSAgICAgICAgICBpZiAob2JqICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgVGFibGVFbGVtZW50IGhvbGRlciA9IChUYWJsZUVsZW1lbnQpb2JqOwotICAgICAgICAgICAgVGFibGVDb2x1bW4gY29sID0gdGFibGUuZ2V0Q29sdW1uKDApOwotICAgICAgICAgICAgaWYgKGUueCA8IGNvbC5nZXRXaWR0aCgpKSAvLyBpZiB0aGUgcG9pbnQgZmFsbHMgd2l0aGluIHRoZSBTZWxlY3QgY29sdW1uIHRoZW4gcGVyZm9ybSBjaGVjay91bmNoZWNrCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBjdXJyZW50U3RhdGUgPSBob2xkZXIuZ2V0Q2hlY2tlZCgpOwotICAgICAgICAgICAgICBpZiAoY3VycmVudFN0YXRlLmVxdWFscygidHJ1ZSIpKSAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBob2xkZXIuc2V0Q2hlY2tlZCgiZmFsc2UiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgICAgIGNoZWNrZWRMaXN0LnNldChob2xkZXIuZ2V0SW5kZXgoKSwgImZhbHNlIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgICAgfSAgCi0gICAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJlbnRTdGF0ZS5lcXVhbHMoImZhbHNlIikpIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGhvbGRlci5zZXRDaGVja2VkKCJ0cnVlIik7ICAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICAgICAgY2hlY2tlZExpc3Quc2V0KGhvbGRlci5nZXRJbmRleCgpLCAidHJ1ZSIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgdGFibGVWaWV3ZXIucmVmcmVzaCgpOwotICAgICAgICAgICAgICBpZiAodXBkYXRlTGlzdGVuZXIgIT0gbnVsbCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHVwZGF0ZUxpc3RlbmVyLnVwZGF0ZU9jY3VyZWQodGhpcywgbmFtZXNwYWNlSW5mb0xpc3QpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9ICAgICAgICAKLSAgICAgIH0KLSAgICB9KTsKLQotICAgIHRhYmxlVmlld2VyID0gbmV3IE5hbWVzcGFjZU5hdmlnYWJsZVRhYmxlVmlld2VyKHRhYmxlKTsKLSAgICBwcm92aWRlciA9IG5ldyBOYW1lc3BhY2VJbmZvVGFibGVMYWJlbFByb3ZpZGVyKCk7Ci0gICAgdGFibGVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKHByb3ZpZGVyKTsgICAKLSAgICB0YWJsZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKHByb3ZpZGVyKTsKLSAgICB0YWJsZVZpZXdlci5zZXRDb2x1bW5Qcm9wZXJ0aWVzKHRpdGxlQXJyYXkpOwotICAgIHRhYmxlVmlld2VyLnNldENlbGxNb2RpZmllcihuZXcgTmFtZXNwYWNlSW5mb0NlbGxNb2RpZmllcigpKTsKLQotICAgICAgICAgICAgICAgICAgICAKLSAgICBpbnRbXSB3aWR0aEFycmF5ID0gezEwLCAyMCwgNTB9OwotICAgIFRhYmxlTGF5b3V0IGxheW91dCA9IG5ldyBUYWJsZUxheW91dCgpOyAgCi0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHRpdGxlQXJyYXkubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgVGFibGVDb2x1bW4gY29sdW1uID0gbmV3IFRhYmxlQ29sdW1uKHRhYmxlLCBpKTsKLSAgICAgIGNvbHVtbi5zZXRUZXh0KHRpdGxlQXJyYXlbaV0pOwotICAgICAgY29sdW1uLnNldEFsaWdubWVudChTV1QuTEVGVCk7Ci0gICAgICBsYXlvdXQuYWRkQ29sdW1uRGF0YShuZXcgQ29sdW1uV2VpZ2h0RGF0YSh3aWR0aEFycmF5W2ldLCB0cnVlKSk7Ci0gICAgfSAgICAgICAgIAotICAgIHRoaXMudmlzaWJsZVJvd3MgPSB2aXNpYmxlUm93czsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHZpc2libGVSb3dzOyBpKyspCi0gICAgewotICAgICAgVGFibGVJdGVtIGl0ZW0gPSBuZXcgVGFibGVJdGVtKHRhYmxlLCBTV1QuTk9ORSk7IAotICAgICAgaXRlbS5zZXRUZXh0KCIjIyMjIyMjIik7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgdGFibGUuc2V0TGF5b3V0KGxheW91dCk7ICAKLSAgICAKLSAgICBDZWxsRWRpdG9yW10gY2VsbEVkaXRvcnMgPSBuZXcgQ2VsbEVkaXRvclt0aXRsZUFycmF5Lmxlbmd0aF07Ci0gICAgY2VsbEVkaXRvcnNbMF0gPSBuZXcgTmFtZXNwYWNlSW5mb0NoZWNrYm94Q2VsbEVkaXRvcih0YWJsZSk7Ci0gICAgY2VsbEVkaXRvcnNbMV0gPSBuZXcgVGV4dENlbGxFZGl0b3IodGFibGUpOwotICAgIHRhYmxlVmlld2VyLnNldENlbGxFZGl0b3JzKGNlbGxFZGl0b3JzKTsKLQotLy8gICAgY3JlYXRlQnV0dG9ucyhuYW1lc3BhY2VJbmZvR3JvdXApOyAgICAgICAgICAgIAotCi0gICAgaW5pdGlhbGl6ZSgpOyAgICAKLSAgfSAgICAKLQotICBwdWJsaWMgdm9pZCBzZXRVcGRhdGVMaXN0ZW5lcihVcGRhdGVMaXN0ZW5lciB1cGRhdGVMaXN0ZW5lcikKLSAgewotICAgIHRoaXMudXBkYXRlTGlzdGVuZXIgPSB1cGRhdGVMaXN0ZW5lcjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldE5hbWVzcGFjZUluZm9MaXN0KExpc3QgbmFtZXNwYWNlSW5mb0xpc3QpCi0gIHsgICAgCi0gICAgdGhpcy5uYW1lc3BhY2VJbmZvTGlzdCA9IG5hbWVzcGFjZUluZm9MaXN0OwotICAgIHVwZGF0ZSgpOwotICB9ICAgICAgICAgICAgICAgICAgICAgICAKLQotICBwdWJsaWMgTGlzdCBnZXROYW1lc3BhY2VJbmZvTGlzdCgpCi0gIHsKLSAgICByZXR1cm4gbmFtZXNwYWNlSW5mb0xpc3Q7Ci0gIH0gIAotCi0gIHB1YmxpYyBMaXN0IGdldE5hbWVzcGFjZUNoZWNrZWRMaXN0KCkKLSAgewotICAgIHJldHVybiBjaGVja2VkTGlzdDsKLSAgfSAgCi0KLSAgcHVibGljIFN0cmluZyBnZXRXU0RMUHJlZml4KCkKLSAgewotICAgIHJldHVybiAoKE5hbWVzcGFjZUluZm8pKG5hbWVzcGFjZUluZm9MaXN0LmdldCgwKSkpLnByZWZpeDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFJlc291cmNlTG9jYXRpb24oSVBhdGggcmVzb3VyY2VMb2NhdGlvbikKLSAgewotICAgIHRoaXMucmVzb3VyY2VMb2NhdGlvbiA9IHJlc291cmNlTG9jYXRpb247Ci0gIH0KLQotICBwdWJsaWMgR3JpZExheW91dCBjcmVhdGVHcmlkTGF5b3V0KCkKLSAgewotICAgIEdyaWRMYXlvdXQgZ3JpZExheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgZ3JpZExheW91dC5tYXJnaW5XaWR0aCA9IDA7Ci0gICAgZ3JpZExheW91dC5ob3Jpem9udGFsU3BhY2luZyA9IDA7Ci0gICAgcmV0dXJuIGdyaWRMYXlvdXQ7Ci0gIH0KLSAgICAKLSAgcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZSgpCi0gIHsKLSAgICAvLyBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMuLi4uCi0gICAgTmFtZXNwYWNlSW5mbyBpbmZvMSA9IG5ldyBOYW1lc3BhY2VJbmZvKCk7Ci0gICAgaW5mbzEucHJlZml4ID0gIndzZGwiOyAvLyROT04tTkxTLTEkCi0gICAgaW5mbzEudXJpID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIjsgLy8kTk9OLU5MUy0xJAotICAgIG5hbWVzcGFjZUluZm9MaXN0LmFkZChpbmZvMSk7Ci0gICAgY2hlY2tlZExpc3QuYWRkKCJ0cnVlIik7IC8vJE5PTi1OTFMtMSQKLSAgICBOYW1lc3BhY2VJbmZvIGluZm8yID0gbmV3IE5hbWVzcGFjZUluZm8oKTsKLSAgICBpbmZvMi5wcmVmaXggPSAic29hcCI7IC8vJE5PTi1OTFMtMSQKLSAgICBpbmZvMi51cmkgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI7IC8vJE5PTi1OTFMtMSQKLSAgICBuYW1lc3BhY2VJbmZvTGlzdC5hZGQoaW5mbzIpOwotICAgIGNoZWNrZWRMaXN0LmFkZCgiZmFsc2UiKTsgLy8kTk9OLU5MUy0xJAotICAgIE5hbWVzcGFjZUluZm8gaW5mbzMgPSBuZXcgTmFtZXNwYWNlSW5mbygpOwotICAgIGluZm8zLnByZWZpeCA9ICJodHRwIjsgIC8vJE5PTi1OTFMtMSQKLSAgICBpbmZvMy51cmkgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9odHRwLyI7IC8vJE5PTi1OTFMtMSQKLSAgICBuYW1lc3BhY2VJbmZvTGlzdC5hZGQoaW5mbzMpOwotICAgIGNoZWNrZWRMaXN0LmFkZCgiZmFsc2UiKTsgLy8kTk9OLU5MUy0xJAotICAgIE5hbWVzcGFjZUluZm8gaW5mbzQgPSBuZXcgTmFtZXNwYWNlSW5mbygpOwotICAgIGluZm80LnByZWZpeCA9ICJtaW1lIjsgLy8kTk9OLU5MUy0xJAotICAgIGluZm80LnVyaSA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL21pbWUvIjsgLy8kTk9OLU5MUy0xJAotICAgIG5hbWVzcGFjZUluZm9MaXN0LmFkZChpbmZvNCk7Ci0gICAgY2hlY2tlZExpc3QuYWRkKCJmYWxzZSIpOyAvLyROT04tTkxTLTEkCi0gICAgTmFtZXNwYWNlSW5mbyBpbmZvNSA9IG5ldyBOYW1lc3BhY2VJbmZvKCk7Ci0gICAgaW5mbzUucHJlZml4ID0gInNvYXBlbmMiOyAvLyROT04tTkxTLTEkCi0gICAgaW5mbzUudXJpID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIjsgLy8kTk9OLU5MUy0xJAotICAgIG5hbWVzcGFjZUluZm9MaXN0LmFkZChpbmZvNSk7Ci0gICAgY2hlY2tlZExpc3QuYWRkKCJmYWxzZSIpOyAvLyROT04tTkxTLTEkCi0gICAgTmFtZXNwYWNlSW5mbyBpbmZvNiA9IG5ldyBOYW1lc3BhY2VJbmZvKCk7Ci0gICAgaW5mbzYucHJlZml4ID0gInNvYXBlbnYiOyAvLyROT04tTkxTLTEkCi0gICAgaW5mbzYudXJpID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIjsgLy8kTk9OLU5MUy0xJAotICAgIG5hbWVzcGFjZUluZm9MaXN0LmFkZChpbmZvNik7Ci0gICAgY2hlY2tlZExpc3QuYWRkKCJmYWxzZSIpOyAvLyROT04tTkxTLTEkCi0gICAgTmFtZXNwYWNlSW5mbyBpbmZvNyA9IG5ldyBOYW1lc3BhY2VJbmZvKCk7Ci0gICAgaW5mbzcucHJlZml4ID0gInhzaSI7IC8vJE5PTi1OTFMtMSQKLSAgICBpbmZvNy51cmkgPSAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiOyAvLyROT04tTkxTLTEkCi0gICAgbmFtZXNwYWNlSW5mb0xpc3QuYWRkKGluZm83KTsKLSAgICBjaGVja2VkTGlzdC5hZGQoImZhbHNlIik7IC8vJE5PTi1OTFMtMSQKLSAgICBOYW1lc3BhY2VJbmZvIGluZm84ID0gbmV3IE5hbWVzcGFjZUluZm8oKTsKLSAgICBpbmZvOC5wcmVmaXggPSAieHNkIjsgLy8kTk9OLU5MUy0xJAotICAgIGluZm84LnVyaSA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI7IC8vJE5PTi1OTFMtMSQKLSAgICBuYW1lc3BhY2VJbmZvTGlzdC5hZGQoaW5mbzgpOwotICAgIGNoZWNrZWRMaXN0LmFkZCgidHJ1ZSIpOyAvLyROT04tTkxTLTEkCi0gICAgdXBkYXRlKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVCdXR0b25zKENvbXBvc2l0ZSBwYXJlbnQpCi0gIHsKLSAgICBDb21wb3NpdGUgY29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLSAgICBHcmlkRGF0YSBoRmlsbEdEID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgaEZpbGxHRC5ob3Jpem9udGFsQWxpZ25tZW50PSBHcmlkRGF0YS5GSUxMOwotICAgIGhGaWxsR0QuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZT0gdHJ1ZTsKLSAgICAKLSAgICBjb21wb3NpdGUuc2V0TGF5b3V0RGF0YShoRmlsbEdEKTsKLSAgICBHcmlkTGF5b3V0IGdyaWRMYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGdyaWRMYXlvdXQubnVtQ29sdW1ucyA9IDI7Ci0gICAgZ3JpZExheW91dC5tYXJnaW5IZWlnaHQgPSAwOwotICAgIGdyaWRMYXlvdXQubWFyZ2luV2lkdGggPSAwOwotICAgIGNvbXBvc2l0ZS5zZXRMYXlvdXQoZ3JpZExheW91dCk7Ci0KLSAgICBHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YSgpOwotICAgIGdkLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIGdkLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2U9IHRydWU7Ci0gICAgCi0gICAgQnV0dG9uIGhpZGRlbkJ1dHRvbiA9IG5ldyBCdXR0b24oY29tcG9zaXRlLCBTV1QuTk9ORSk7Ci0gICAgaGlkZGVuQnV0dG9uLnNldExheW91dERhdGEoZ2QpOwotICAgIGhpZGRlbkJ1dHRvbi5zZXRWaXNpYmxlKGZhbHNlKTsKLSAgICBoaWRkZW5CdXR0b24uc2V0RW5hYmxlZChmYWxzZSk7Ci0KLSAgICBTZWxlY3Rpb25MaXN0ZW5lciBzZWxlY3Rpb25MaXN0ZW5lciA9IG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkKLSAgICB7Ci0gICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotICAgICAgeyAgCi0gICAgICAgIGlmIChlLndpZGdldCA9PSBhZGRCdXR0b24pCi0gICAgICAgIHsKLSAgICAgICAgICBwZXJmb3JtTmV3KCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9OyAgIAotICAgIAotICAgIC8vIGNyZWF0ZSBhIGNvbXBvc2l0ZSB0byBob2xkIHRoZSB0aHJlZSBidXR0b25zCi0gICAgQ29tcG9zaXRlIGJ1dHRvbkNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUoY29tcG9zaXRlLCBTV1QuTk9ORSk7Ci0KLSAgICBidXR0b25Db21wb3NpdGUuc2V0TGF5b3V0RGF0YShoRmlsbEdEKTsKLSAgICBHcmlkTGF5b3V0IGJ1dHRvbkdyaWRMYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGJ1dHRvbkdyaWRMYXlvdXQubnVtQ29sdW1ucyA9IDE7Ci0gICAgYnV0dG9uR3JpZExheW91dC5tYWtlQ29sdW1uc0VxdWFsV2lkdGggPSB0cnVlOwotICAgIGJ1dHRvbkNvbXBvc2l0ZS5zZXRMYXlvdXQoYnV0dG9uR3JpZExheW91dCk7Ci0KLSAgICAvLyBhZGQgdGhlIE5ldyBidXR0b24KLSAgICAvLwotICAgIGdkID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZ2QuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgZ2QuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7Ci0KLSAgICBhZGRCdXR0b24gPSBuZXcgQnV0dG9uKGJ1dHRvbkNvbXBvc2l0ZSwgU1dULk5PTkUpOwotICAgIGFkZEJ1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzLl9VSV9BQ1RJT05fQUREKTsgLy8kTk9OLU5MUy0xJAotICAgIGFkZEJ1dHRvbi5zZXRMYXlvdXREYXRhKGdkKTsvL1ZpZXdVdGlsaXR5LmNyZWF0ZUhvcml6b250YWxGaWxsKCkpOwotICAgIGFkZEJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihzZWxlY3Rpb25MaXN0ZW5lcik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBwZXJmb3JtTmV3KCkKLSAgewotICAgIE5hbWVzcGFjZUluZm8gaW5mbyA9IG5ldyBOYW1lc3BhY2VJbmZvKCk7Ci0gICAgRWRpdE5hbWVzcGFjZUluZm9EaWFsb2cgZGlhbG9nID0gaW52b2tlRGlhbG9nKFhNTENvbW1vblJlc291cmNlcy5nZXRJbnN0YW5jZSgpLmdldFN0cmluZygiX1VJX0xBQkVMX05FV19OQU1FU1BBQ0VfSU5GT1JNQVRJT04iKSwgaW5mbyk7ICAvLyROT04tTkxTLTEkCi0gICAgaWYgKGRpYWxvZy5nZXRSZXR1cm5Db2RlKCkgPT0gRGlhbG9nLk9LKQotICAgIHsKLSAgICAgIG5hbWVzcGFjZUluZm9MaXN0LmFkZChpbmZvKTsKLSAgICAgIGNoZWNrZWRMaXN0LmFkZCgidHJ1ZSIpOyAvLyROT04tTkxTLTEkCi0gICAgICBwZXJmb3JtRGVsYXllZFVwZGF0ZSgpOwotICAgIH0KLSAgfSAKLSAgICAgICAgICAgICAgICAgICAgIAotICBwcm90ZWN0ZWQgRWRpdE5hbWVzcGFjZUluZm9EaWFsb2cgaW52b2tlRGlhbG9nKFN0cmluZyB0aXRsZSwgTmFtZXNwYWNlSW5mbyBpbmZvKQotICB7Ci0gICAgU2hlbGwgc2hlbGwgPSBYTUxDb21tb25SZXNvdXJjZXMuZ2V0SW5zdGFuY2UoKS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRTaGVsbCgpOwotICAgIEVkaXROYW1lc3BhY2VJbmZvRGlhbG9nIGRpYWxvZyA9IG5ldyBFZGl0TmFtZXNwYWNlSW5mb0RpYWxvZyhzaGVsbCwgaW5mbyk7Ci0gICAgZGlhbG9nLmNyZWF0ZSgpOwotICAgIGRpYWxvZy5nZXRTaGVsbCgpLnNldFRleHQodGl0bGUpOwotICAgIGRpYWxvZy5zZXRCbG9ja09uT3Blbih0cnVlKTsKLSAgICBkaWFsb2cuc2V0UmVzb3VyY2VMb2NhdGlvbihyZXNvdXJjZUxvY2F0aW9uKTsKLSAgICBkaWFsb2cub3BlbigpOyAgICAgIAotICAgIHJldHVybiBkaWFsb2c7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBwZXJmb3JtRGVsYXllZFVwZGF0ZSgpCi0gIHsKLSAgICBSdW5uYWJsZSBkZWxheWVkVXBkYXRlID0gbmV3IFJ1bm5hYmxlKCkKLSAgICB7Ci0gICAgICBwdWJsaWMgdm9pZCBydW4oKQotICAgICAgewotICAgICAgICB1cGRhdGUoKTsKLSAgICAgIH0KLSAgICB9OwotICAgIERpc3BsYXkuZ2V0Q3VycmVudCgpLmFzeW5jRXhlYyhkZWxheWVkVXBkYXRlKTsKLQotICAgIGlmICh1cGRhdGVMaXN0ZW5lciAhPSBudWxsKQotICAgIHsKLSAgICAgIHVwZGF0ZUxpc3RlbmVyLnVwZGF0ZU9jY3VyZWQodGhpcywgbmFtZXNwYWNlSW5mb0xpc3QpOwotICAgIH0KLSAgfQotIAotICBwcm90ZWN0ZWQgTmFtZXNwYWNlSW5mbyBnZXRUYXJnZXROYW1lc3BhY2VJbmZvKCkKLSAgewotICAgIHJldHVybiAobmFtZXNwYWNlSW5mb0xpc3QgIT0gbnVsbCAmJiBuYW1lc3BhY2VJbmZvTGlzdC5zaXplKCkgPiAwKSA/IAotICAgICAgICAgICAoTmFtZXNwYWNlSW5mbyluYW1lc3BhY2VJbmZvTGlzdC5nZXQoMCkgOgotICAgICAgICAgICBudWxsOwotICB9ICAgIAotCi0gICAgICAgICAgICAgICAgICAgIAotICBwdWJsaWMgdm9pZCB1cGRhdGUoKQotICB7Ci0gICAgdXBkYXRlSGVscGVyKG5hbWVzcGFjZUluZm9MaXN0KTsKLSAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gIHB1YmxpYyB2b2lkIHVwZGF0ZUhlbHBlcihMaXN0IG5hbWVzcGFjZUluZm9MaXN0KQotICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICBpZiAodmlzaWJsZVJvd3MgIT0gLTEgJiYgIWR1bW15Um93c1JlbW92ZWQpCi0gICAgewotLy8gICAgICBkdW1teVJvd3NSZW1vdmVkID0gdHJ1ZTsKLS8vICAgICAgdGFibGVWaWV3ZXIuZ2V0VGFibGUoKS5yZW1vdmVBbGwoKTsKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSB0YWJsZVZpZXdlci5nZXRTZWxlY3Rpb24oKTsKLSAgICB0YWJsZVZpZXdlci5zZXRJbnB1dChuYW1lc3BhY2VJbmZvTGlzdCk7Ci0gICAgaWYgKHNlbGVjdGlvbi5pc0VtcHR5KCkpCi0gICAgeyAgICAgICAgICAgICAgICAgICAgIAotICAgICAgaWYgKG5hbWVzcGFjZUluZm9MaXN0LnNpemUoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIHRhYmxlVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihuYW1lc3BhY2VJbmZvTGlzdC5nZXQoMCkpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHRhYmxlVmlld2VyLnNldFNlbGVjdGlvbihzZWxlY3Rpb24pOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCBjbGFzcyBOYW1lc3BhY2VJbmZvQ2hlY2tib3hDZWxsRWRpdG9yIGV4dGVuZHMgQ2hlY2tib3hDZWxsRWRpdG9yIGltcGxlbWVudHMgTW91c2VMaXN0ZW5lcgotICB7Ci0gICAgcHVibGljIE5hbWVzcGFjZUluZm9DaGVja2JveENlbGxFZGl0b3IoQ29tcG9zaXRlIHBhcmVudCkKLSAgICB7Ci0gICAgICBzdXBlcihwYXJlbnQpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGRvU2V0VmFsdWUoT2JqZWN0IHZhbHVlKQotICAgIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBhY3RpdmF0ZSgpCi0gICAgewotICAgICAgIHN1cGVyLmFjdGl2YXRlKCk7Ci0gICAgICAgZGVhY3RpdmF0ZSgpOwotICAgICAgIERpc3BsYXkuZ2V0Q3VycmVudCgpLmdldEZvY3VzQ29udHJvbCgpLnJlZHJhdygpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIG1vdXNlRG93bihNb3VzZUV2ZW50IGUpICAgCi0gICAgeyAgICAgIAotICAgICAgaWYgKHRhYmxlVmlld2VyLmdldFRhYmxlKCkuZ2V0SXRlbShuZXcgUG9pbnQoZS54LCBlLnkpKSAhPSBudWxsKQotICAgICAgewotICAgICAgfQotICAgIH0gICAgCi0gICAgcHVibGljIHZvaWQgbW91c2VEb3VibGVDbGljayhNb3VzZUV2ZW50IGUpIHt9Ci0gICAgcHVibGljIHZvaWQgbW91c2VVcChNb3VzZUV2ZW50IGUpIHt9Ci0KLQotICB9Ci0KLQotICBwcm90ZWN0ZWQgY2xhc3MgTmFtZXNwYWNlSW5mb0NlbGxNb2RpZmllciBpbXBsZW1lbnRzIElDZWxsTW9kaWZpZXIKLSAgewotICAgIHB1YmxpYyBOYW1lc3BhY2VJbmZvQ2VsbE1vZGlmaWVyKCkKLSAgICB7Ci0gICAgICAKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGJvb2xlYW4gY2FuTW9kaWZ5KE9iamVjdCBlbGVtZW50LCBTdHJpbmcgcHJvcGVydHkpCi0gICAgewotICAgICAgaWYgKHByb3BlcnR5LmVxdWFscyhJTkNMVURFKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChwcm9wZXJ0eS5lcXVhbHMoUFJFRklYKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gZmFsc2U7ICAgICAgCi0gICAgfQotCi0gICAgcHVibGljIE9iamVjdCBnZXRWYWx1ZShPYmplY3QgZWxlbWVudCwgU3RyaW5nIHByb3BlcnR5KQotICAgIHsKLSAgICAgIGludCBjb2x1bW4gPSAwOwotICAgICAgaWYgKHByb3BlcnR5LmVxdWFscyhJTkNMVURFKSkKLSAgICAgIHsKLSAgICAgICAgY29sdW1uID0gMDsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKHByb3BlcnR5LmVxdWFscyhQUkVGSVgpKQotICAgICAgewotICAgICAgICBjb2x1bW4gPSAxOwotICAgICAgfQotICAgICAgZWxzZSBpZiAocHJvcGVydHkuZXF1YWxzKE5BTUVTUEFDRV9VUkkpKQotICAgICAgewotICAgICAgICBjb2x1bW4gPSAyOwotICAgICAgfQotCi0gICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFRhYmxlRWxlbWVudCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHByb3ZpZGVyLmdldENvbHVtblRleHQoZWxlbWVudCwgY29sdW1uKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgbW9kaWZ5KE9iamVjdCBlbGVtZW50LCBTdHJpbmcgcHJvcGVydHksIE9iamVjdCB2YWx1ZSkKLSAgICB7Ci0gICAgICBUYWJsZUl0ZW0gaXRlbSA9IChUYWJsZUl0ZW0pZWxlbWVudDsKLSAgICAgIGlmIChpdGVtICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIE9iamVjdCBvYmogPSBpdGVtLmdldERhdGEoKTsKLSAgICAgICAgaWYgKG9iaiAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgVGFibGVFbGVtZW50IGhvbGRlciA9IChUYWJsZUVsZW1lbnQpb2JqOwotICAgICAgICAgIE5hbWVzcGFjZUluZm8gaW5mbyA9IGhvbGRlci5nZXROYW1lc3BhY2VJbmZvKCk7Ci0gICAgICAgICAgaWYgKHByb3BlcnR5LmVxdWFscyhJTkNMVURFKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBCb29sZWFuKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBpZiAoKChCb29sZWFuKXZhbHVlKS5ib29sZWFuVmFsdWUoKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGhvbGRlci5zZXRDaGVja2VkKCJ0cnVlIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgICAgICBjaGVja2VkTGlzdC5zZXQoaG9sZGVyLmdldEluZGV4KCksICJ0cnVlIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBob2xkZXIuc2V0Q2hlY2tlZCgiZmFsc2UiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgICAgIGNoZWNrZWRMaXN0LnNldChob2xkZXIuZ2V0SW5kZXgoKSwgImZhbHNlIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIGlmIChwcm9wZXJ0eS5lcXVhbHMoUFJFRklYKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpbmZvLnByZWZpeCA9ICgoU3RyaW5nKXZhbHVlKS50cmltKCk7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgUnVubmFibGUgZGVsYXllZFVwZGF0ZSA9IG5ldyBSdW5uYWJsZSgpCi0gICAgICAgICAgewotICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgdGFibGVWaWV3ZXIucmVmcmVzaCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH07Ci0gICAgICAgICAgRGlzcGxheS5nZXRDdXJyZW50KCkuYXN5bmNFeGVjKGRlbGF5ZWRVcGRhdGUpOwotICAgICAgICAgIGlmICh1cGRhdGVMaXN0ZW5lciAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHVwZGF0ZUxpc3RlbmVyLnVwZGF0ZU9jY3VyZWQodGhpcywgbmFtZXNwYWNlSW5mb0xpc3QpOwotICAgICAgICAgIH0KLQotLy8gICAgICAgICAgcGVyZm9ybURlbGF5ZWRVcGRhdGUoKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfSAgICAgICAgICAgICAgICAgICAKLQotICBwcm90ZWN0ZWQgY2xhc3MgVGFibGVFbGVtZW50Ci0gIHsKLSAgICBOYW1lc3BhY2VJbmZvIGluZm87Ci0gICAgaW50IGluZGV4OwotICAgIFN0cmluZyBjaGVja2VkID0gInRydWUiOyAvLyROT04tTkxTLTEkCi0gICAgCi0gICAgVGFibGVFbGVtZW50KE5hbWVzcGFjZUluZm8gaW5mbywgaW50IGluZGV4KQotICAgIHsKLSAgICAgIHRoaXMuaW5mbyA9IGluZm87Ci0gICAgICB0aGlzLmluZGV4ID0gaW5kZXg7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBOYW1lc3BhY2VJbmZvIGdldE5hbWVzcGFjZUluZm8oKQotICAgIHsKLSAgICAgIHJldHVybiBpbmZvOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgaW50IGdldEluZGV4KCkKLSAgICB7Ci0gICAgICByZXR1cm4gaW5kZXg7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q2hlY2tlZCgpCi0gICAgewotICAgICAgcmV0dXJuIGNoZWNrZWQ7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIHNldENoZWNrZWQoU3RyaW5nIGNoZWNrZWQpCi0gICAgewotICAgICAgdGhpcy5jaGVja2VkID0gY2hlY2tlZDsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogTmFtZXNwYWNlSW5mb1RhYmxlTGFiZWxQcm92aWRlcgotICAgKi8KLSAgcHJvdGVjdGVkIGNsYXNzIE5hbWVzcGFjZUluZm9UYWJsZUxhYmVsUHJvdmlkZXIgaW1wbGVtZW50cyBJVGFibGVMYWJlbFByb3ZpZGVyLCBJU3RydWN0dXJlZENvbnRlbnRQcm92aWRlcgotICB7Ci0gICAgcHVibGljIHZvaWQgaW5wdXRDaGFuZ2VkKFZpZXdlciB2aWV3ZXIsIE9iamVjdCBvbGRJbnB1dCwgT2JqZWN0IG5ld0lucHV0KQotICAgIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc0xhYmVsUHJvcGVydHkoT2JqZWN0IGVsZW1lbnQsIFN0cmluZyBwcm9wZXJ0eSkKLSAgICB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaXNEZWxldGVkKE9iamVjdCBlbGVtZW50KQotICAgIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgT2JqZWN0W10gZ2V0RWxlbWVudHMoT2JqZWN0IGlucHV0RWxlbWVudCkKLSAgICB7Ci0gICAgICBWZWN0b3IgdiA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmFtZXNwYWNlSW5mb0xpc3Quc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIE5hbWVzcGFjZUluZm8gaW5mbyA9IChOYW1lc3BhY2VJbmZvKW5hbWVzcGFjZUluZm9MaXN0LmdldChpKTsKLSAgICAgICAgVGFibGVFbGVtZW50IGhvbGRlciA9IG5ldyBUYWJsZUVsZW1lbnQoaW5mbywgaSk7Ci0gICAgICAgIGhvbGRlci5zZXRDaGVja2VkKChTdHJpbmcpY2hlY2tlZExpc3QuZ2V0KGkpKTsKLSAgICAgICAgdi5hZGQoaG9sZGVyKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiB2LnRvQXJyYXkoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldENvbHVtblRleHQoT2JqZWN0IG9iamVjdCwgaW50IGNvbHVtbikKLSAgICB7Ci0gICAgICBUYWJsZUVsZW1lbnQgaG9sZGVyID0gKFRhYmxlRWxlbWVudClvYmplY3Q7Ci0gICAgICBOYW1lc3BhY2VJbmZvIGluZm8gPSBob2xkZXIuZ2V0TmFtZXNwYWNlSW5mbygpOwotICAgICAgU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0gICAgICBzd2l0Y2ggKGNvbHVtbikKLSAgICAgIHsKLSAgICAgICAgY2FzZSAxOiB7IHJlc3VsdCA9IGluZm8ucHJlZml4OyBicmVhazsgfQotICAgICAgICBjYXNlIDI6IHsgcmVzdWx0ID0gaW5mby51cmk7IGJyZWFrOyB9Ci0gICAgICB9Ci0gICAgICByZXN1bHQgPSByZXN1bHQgIT0gbnVsbCA/IHJlc3VsdC50cmltKCkgOiAiIjsgLy8kTk9OLU5MUy0xJAotICAgICAgaWYgKHJlc3VsdC5lcXVhbHMoIiIpKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29sdW1uKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSAyOiAKLSAgICAgICAgICB7IAotICAgICAgICAgICAgcmVzdWx0ID0gWE1MQ29tbW9uUmVzb3VyY2VzLmdldEluc3RhbmNlKCkuZ2V0U3RyaW5nKCJfVUlfTk9fTkFNRVNQQUNFX05BTUUiKTsgICAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICBicmVhazsgCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotLy8gICAgcHJpdmF0ZSBTdHJpbmcgZ2V0RGVmYXVsdFByZWZpeCgpCi0vLyAgICB7Ci0vLyAgICAgIFN0cmluZyBkZWZhdWx0UHJlZml4ID0gInAiOwotLy8gICAgICBpZiAobmFtZXNwYWNlSW5mb0xpc3QgPT0gbnVsbCkKLS8vICAgICAgICByZXR1cm4gZGVmYXVsdFByZWZpeDsKLS8vCi0vLyAgICAgIFZlY3RvciB2ID0gbmV3IFZlY3RvcigpOwotLy8gICAgICBmb3IgKGludCBpPTA7IGk8bmFtZXNwYWNlSW5mb0xpc3Quc2l6ZSgpOyBpKyspCi0vLyAgICAgIHsKLS8vICAgICAgICBOYW1lc3BhY2VJbmZvIG5zaW5mbyA9IChOYW1lc3BhY2VJbmZvKW5hbWVzcGFjZUluZm9MaXN0LmdldChpKTsKLS8vICAgICAgICBpZiAobnNpbmZvLnByZWZpeCAhPSBudWxsKQotLy8gICAgICAgICAgdi5hZGRFbGVtZW50KG5zaW5mby5wcmVmaXgpOwotLy8gICAgICB9Ci0vLwotLy8gICAgICBpZiAodi5jb250YWlucyhkZWZhdWx0UHJlZml4KSkKLS8vICAgICAgewotLy8gICAgICAgIFN0cmluZyBzID0gZGVmYXVsdFByZWZpeDsKLS8vICAgICAgICBmb3IgKGludCBqPTA7IHYuY29udGFpbnMocyk7IGorKykKLS8vICAgICAgICB7Ci0vLyAgICAgICAgICBzID0gZGVmYXVsdFByZWZpeCArIEludGVnZXIudG9TdHJpbmcoaik7Ci0vLyAgICAgICAgfQotLy8gICAgICAgIHJldHVybiBzOwotLy8gICAgICB9Ci0vLyAgICAgIGVsc2UKLS8vICAgICAgICByZXR1cm4gZGVmYXVsdFByZWZpeDsKLS8vICAgIH0KLQotICAgIHB1YmxpYyBJbWFnZSBnZXRDb2x1bW5JbWFnZShPYmplY3Qgb2JqZWN0LCBpbnQgY29sdW1uSW5kZXgpCi0gICAgewotICAgICAgaWYgKGNvbHVtbkluZGV4ID09IDApICAvLyBPdXRwdXQgQ29sdW1uCi0gICAgICB7Ci0gICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBUYWJsZUVsZW1lbnQpCi0gICAgICAgIHsKLSAgICAgICAgICBUYWJsZUVsZW1lbnQgaG9sZGVyID0gKFRhYmxlRWxlbWVudCkgb2JqZWN0OwotICAgICAgICAgIFN0cmluZyByZXN1bHQgPSBob2xkZXIuZ2V0Q2hlY2tlZCgpOwotICAgICAgICAgIGlmIChyZXN1bHQuZXF1YWxzKCJ0cnVlIikpIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEltYWdlKCJpY29ucy9vdXRwdXRfeWVzLmdpZiIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEltYWdlKCJpY29ucy9vdXRwdXRfbm8uZ2lmIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGlzTGFiZWxQcm9wZXJ0eShPYmplY3Qgb2JqZWN0LCBPYmplY3QgcHJvcGVydHkpCi0gICAgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKElMYWJlbFByb3ZpZGVyTGlzdGVuZXIgbGlzdGVuZXIpCi0gICAgewotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKElMYWJlbFByb3ZpZGVyTGlzdGVuZXIgbGlzdGVuZXIpCi0gICAgewotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKQotICAgIHsKLSAgICB9Ci0gIH0KLQotICBjbGFzcyBOYW1lc3BhY2VOYXZpZ2FibGVUYWJsZVZpZXdlciBleHRlbmRzIE5hdmlnYWJsZVRhYmxlVmlld2VyCi0gIHsKLSAgICBwdWJsaWMgTmFtZXNwYWNlTmF2aWdhYmxlVGFibGVWaWV3ZXIoVGFibGUgcGFyZW50KQotICAgIHsKLSAgICAgIHN1cGVyKHBhcmVudCk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3dpemFyZHMvTmV3V1NETFdpemFyZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC93aXphcmRzL05ld1dTRExXaXphcmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWJiZjBkZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3dpemFyZHMvTmV3V1NETFdpemFyZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC53aXphcmRzOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklOZXdXaXphcmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5QcmVmZXJlbmNlc1V0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5VSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuQ29tbW9uRW5jb2RpbmdQcmVmZXJlbmNlTmFtZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbi5XU1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXMuUGVyc2lzdGVudFdTSUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnVpLndzaS5wcm9wZXJ0aWVzLldTSUNvbXBsaWFuY2VQcm9wZXJ0eVBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLmdlbmVyYXRvci5IVFRQQ29udGVudEdlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuaW50ZXJuYWwudXRpbC5IVFRQQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5nZW5lcmF0b3IuU09BUENvbnRlbnRHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLnV0aWwuU09BUENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuQmluZGluZ0dlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkRlZmluaXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETEZhY3RvcnlJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLkludGVybmFsV1NETE11bHRpUGFnZUVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLkNvbXBvbmVudFJlZmVyZW5jZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5DcmVhdGVXU0RMRWxlbWVudEhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExSZXNvdXJjZUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLlhNTENvcmVQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTUF0dHJpYnV0ZURlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01EYXRhVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTUVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTU5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNTm9kZUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5pbnRlcm5hbC51dGlsLkRPTVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLm1vZGVscXVlcnkuTW9kZWxRdWVyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLnV0aWwuQ01WaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwudXRpbC5OYW1lc3BhY2VJbmZvOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBOZXdXU0RMV2l6YXJkIGV4dGVuZHMgV2l6YXJkIGltcGxlbWVudHMgSU5ld1dpemFyZCB7Ci0JcHJpdmF0ZSBXU0RMTmV3RmlsZVBhZ2UgbmV3RmlsZVBhZ2U7Ci0JcHJpdmF0ZSBXU0RMTmV3RmlsZU9wdGlvbnNQYWdlIG9wdGlvbnNQYWdlOwotCXByaXZhdGUgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIE5ld1dTRExXaXphcmQuCi0JICovCi0JcHVibGljIE5ld1dTRExXaXphcmQoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuSVdpemFyZCNwZXJmb3JtRmluaXNoKCkKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBwZXJmb3JtRmluaXNoKCkgewotCQlJRmlsZSBmaWxlID0gbmV3RmlsZVBhZ2UuY3JlYXRlTmV3RmlsZSgpOwotCi0JCVByZWZlcmVuY2VzIHByZWZlcmVuY2UgPSBYTUxDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpOwotCQlTdHJpbmcgY2hhclNldCA9IHByZWZlcmVuY2UuZ2V0U3RyaW5nKENvbW1vbkVuY29kaW5nUHJlZmVyZW5jZU5hbWVzLk9VVFBVVF9DT0RFU0VUKTsKLQkJaWYgKGNoYXJTZXQgPT0gbnVsbCB8fCBjaGFyU2V0LnRyaW0oKS5lcXVhbHMoIiIpKSB7IC8vJE5PTi1OTFMtMSQKLQkJCWNoYXJTZXQgPSAiVVRGLTgiOyAvLyROT04tTkxTLTEkCi0JCX0KLQotCQlTdHJpbmcgd3NkbFByZWZpeCA9ICJ3c2RsIjsgLy8kTk9OLU5MUy0xJAotCQlWZWN0b3IgbmFtZXNwYWNlcyA9IG9wdGlvbnNQYWdlLmdldE5hbWVzcGFjZUluZm8oKTsKLQotCQlTdHJpbmcgcHJlZml4ID0gb3B0aW9uc1BhZ2UuZ2V0UHJlZml4KCk7Ci0JCVN0cmluZyBkZWZpbml0aW9uTmFtZSA9IG9wdGlvbnNQYWdlLmdldERlZmluaXRpb25OYW1lKCk7Ci0KLQkJVVJJIHVyaTIgPSBVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShmaWxlLmdldEZ1bGxQYXRoKCkudG9PU1N0cmluZygpKTsKLQkJUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7Ci0JCVdTRExSZXNvdXJjZUltcGwgcmVzb3VyY2UgPSAoV1NETFJlc291cmNlSW1wbCkgcmVzb3VyY2VTZXQuY3JlYXRlUmVzb3VyY2UoVVJJLmNyZWF0ZVVSSSgiKi53c2RsIikpOyAvLyROT04tTkxTLTEkCi0JCXJlc291cmNlLnNldFVSSSh1cmkyKTsKLQkJCi0JCVdTRExGYWN0b3J5SW1wbCBmYWN0b3J5ID0gbmV3IFdTRExGYWN0b3J5SW1wbCgpOwotCQlEZWZpbml0aW9uSW1wbCBkZWZpbml0aW9uID0gKERlZmluaXRpb25JbXBsKSBmYWN0b3J5LmNyZWF0ZURlZmluaXRpb24oKTsKLQkJcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5hZGQoZGVmaW5pdGlvbik7Ci0JCQotCQlkZWZpbml0aW9uLnNldFRhcmdldE5hbWVzcGFjZShvcHRpb25zUGFnZS5nZXRUYXJnZXROYW1lc3BhY2UoKSk7Ci0JCWRlZmluaXRpb24uc2V0TG9jYXRpb24oZmlsZS5nZXRMb2NhdGlvbigpLnRvU3RyaW5nKCkpOwotCQlkZWZpbml0aW9uLnNldEVuY29kaW5nKGNoYXJTZXQpOwotCQlkZWZpbml0aW9uLnNldFFOYW1lKG5ldyBRTmFtZSh3c2RsUHJlZml4LCBkZWZpbml0aW9uTmFtZSkpOwotCQlkZWZpbml0aW9uLmFkZE5hbWVzcGFjZShwcmVmaXgsIG9wdGlvbnNQYWdlLmdldFRhcmdldE5hbWVzcGFjZSgpKTsKLQotCQlmb3IgKGludCBpID0gMDsgaSA8IG5hbWVzcGFjZXMuc2l6ZSgpOyBpKyspIHsKLQkJCU5hbWVzcGFjZUluZm8gaW5mbyA9IChOYW1lc3BhY2VJbmZvKSBuYW1lc3BhY2VzLmdldChpKTsKLQotCQkJaWYgKGluZm8ucHJlZml4Lmxlbmd0aCgpID4gMCkgewotCQkJCWRlZmluaXRpb24uYWRkTmFtZXNwYWNlKGluZm8ucHJlZml4LCBpbmZvLnVyaSk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlkZWZpbml0aW9uLmFkZE5hbWVzcGFjZShudWxsLCBpbmZvLnVyaSk7Ci0JCQl9Ci0JCX0KLQkJLy8gVE9ETyA6IGNzLi4uIHdoeSBkbyB3ZSBuZWVkIHRoaXM/ICB0aGVzZSBjYWxscyBhcmUgZXZpbCEKLQkJZGVmaW5pdGlvbi51cGRhdGVFbGVtZW50KHRydWUpOwotCQl0cnkgewotCQkJaWYgKG9wdGlvbnNQYWdlLmdldENyZWF0ZVNrZWxldG9uQm9vbGVhbigpKSB7Ci0JCQkJaWYgKG9wdGlvbnNQYWdlLmlzU29hcERvY0xpdGVyYWxQcm90b2NvbCgpKSB7Ci0JCQkJCUNyZWF0ZVdTRExFbGVtZW50SGVscGVyLlBBUlRfVFlQRV9PUl9ERUZJTklUSU9OID0gQ3JlYXRlV1NETEVsZW1lbnRIZWxwZXIuUEFSVF9JTkZPX0VMRU1FTlRfREVDTEFSQVRJT047Ci0JCQkJfQotCQkJCWVsc2UgewotCQkJCQlDcmVhdGVXU0RMRWxlbWVudEhlbHBlci5QQVJUX1RZUEVfT1JfREVGSU5JVElPTiA9IENyZWF0ZVdTRExFbGVtZW50SGVscGVyLlBBUlRfSU5GT19UWVBFX0RFRklOSVRJT047Ci0JCQkJfQotCi0JCQkJQ3JlYXRlV1NETEVsZW1lbnRIZWxwZXIuc2VydmljZU5hbWUgPSBkZWZpbml0aW9uTmFtZTsKLQkJCQlDcmVhdGVXU0RMRWxlbWVudEhlbHBlci5wb3J0TmFtZSA9IGRlZmluaXRpb25OYW1lICsgb3B0aW9uc1BhZ2UuZ2V0UHJvdG9jb2woKTsKLQkJCQlTZXJ2aWNlIHNlcnZpY2UgPSBDcmVhdGVXU0RMRWxlbWVudEhlbHBlci5jcmVhdGVTZXJ2aWNlKGRlZmluaXRpb24pOwotCi0KLQkJCQkvLyBHZW5lcmF0ZSBCaW5kaW5nCi0JCQkJSXRlcmF0b3IgYmluZGluZ0l0ID0gZGVmaW5pdGlvbi5nZXRFQmluZGluZ3MoKS5pdGVyYXRvcigpOwotCQkJCUJpbmRpbmcgYmluZGluZyA9IG51bGw7Ci0JCQkJaWYgKGJpbmRpbmdJdC5oYXNOZXh0KCkpIHsKLQkJCQkJYmluZGluZyA9IChCaW5kaW5nKSBiaW5kaW5nSXQubmV4dCgpOwotCQkJCX0KLQkJCQlCaW5kaW5nR2VuZXJhdG9yIGJpbmRpbmdHZW5lcmF0b3IgPSBuZXcgQmluZGluZ0dlbmVyYXRvcihkZWZpbml0aW9uLCBiaW5kaW5nLCBTT0FQQ29uc3RhbnRzLlNPQVBfTkFNRVNQQUNFX1VSSSk7Ci0JCQkJUG9ydCBwb3J0ID0gKFBvcnQpIHNlcnZpY2UuZ2V0RVBvcnRzKCkuaXRlcmF0b3IoKS5uZXh0KCk7Ci0JCQkJYmluZGluZ0dlbmVyYXRvci5zZXROYW1lKENvbXBvbmVudFJlZmVyZW5jZVV0aWwuZ2V0TmFtZShwb3J0LmdldEVCaW5kaW5nKCkpKTsKLQkJCQliaW5kaW5nR2VuZXJhdG9yLnNldFJlZk5hbWUoQ29tcG9uZW50UmVmZXJlbmNlVXRpbC5nZXRQb3J0VHlwZVJlZmVyZW5jZShwb3J0LmdldEVCaW5kaW5nKCkpKTsKLQkJCQliaW5kaW5nR2VuZXJhdG9yLnNldE92ZXJ3cml0ZSh0cnVlKTsKLQkJCQkKLQkJCQlpZiAob3B0aW9uc1BhZ2UuZ2V0UHJvdG9jb2woKS5lcXVhbHMoIlNPQVAiKSkgeyAvLyROT04tTkxTLTEkCi0JCQkJCVN0cmluZyBuYW1lc3BhY2UgPSBTT0FQQ29uc3RhbnRzLlNPQVBfTkFNRVNQQUNFX1VSSTsKLQkJCQkJYmluZGluZ0dlbmVyYXRvci5zZXRDb250ZW50R2VuZXJhdG9yKEJpbmRpbmdHZW5lcmF0b3IuZ2V0Q29udGVudEdlbmVyYXRvcihuYW1lc3BhY2UpKTsKLQotCQkJCQlTT0FQQ29udGVudEdlbmVyYXRvciBzb2FwR2VuID0gKFNPQVBDb250ZW50R2VuZXJhdG9yKSBiaW5kaW5nR2VuZXJhdG9yLmdldENvbnRlbnRHZW5lcmF0b3IoKTsKLQkJCQkJQm9vbGVhbiBib29sZWFuVmFsdWUgPSAoQm9vbGVhbikgb3B0aW9uc1BhZ2UuZ2V0UHJvdG9jb2xPcHRpb25zKClbMF07Ci0JCQkJCUJvb2xlYW4gYm9vbGVhblZhbHVlMiA9IChCb29sZWFuKSBvcHRpb25zUGFnZS5nZXRQcm90b2NvbE9wdGlvbnMoKVsyXTsKLQkJCQkJaWYgKGJvb2xlYW5WYWx1ZS5ib29sZWFuVmFsdWUoKSkgewotCQkJCQkJLy8gRG9jdW1lbnQgTGl0ZXJhbAotCQkJCQkJc29hcEdlbi5zZXRTdHlsZShTT0FQQ29udGVudEdlbmVyYXRvci5TVFlMRV9ET0NVTUVOVCk7Ci0JCQkJCQlzb2FwR2VuLnNldFVzZShTT0FQQ29udGVudEdlbmVyYXRvci5VU0VfTElURVJBTCk7Ci0JCQkJCX0KLQkJCQkJZWxzZSBpZiAoYm9vbGVhblZhbHVlMi5ib29sZWFuVmFsdWUoKSl7Ci0JCQkJCQkvLyBSUEMgTGl0ZXJhbAotCQkJCQkJc29hcEdlbi5zZXRTdHlsZShTT0FQQ29udGVudEdlbmVyYXRvci5TVFlMRV9SUEMpOwotCQkJCQkJc29hcEdlbi5zZXRVc2UoU09BUENvbnRlbnRHZW5lcmF0b3IuVVNFX0xJVEVSQUwpOwotCQkJCQl9Ci0JCQkJCWVsc2UgewotCQkJCQkJLy8gUlBDIEVuY29kZWQKLQkJCQkJCXNvYXBHZW4uc2V0U3R5bGUoU09BUENvbnRlbnRHZW5lcmF0b3IuU1RZTEVfUlBDKTsKLQkJCQkJCXNvYXBHZW4uc2V0VXNlKFNPQVBDb250ZW50R2VuZXJhdG9yLlVTRV9FTkNPREVEKTsKLQkJCQkJfQotCQkJCX0KLQkJCQllbHNlIGlmIChvcHRpb25zUGFnZS5nZXRQcm90b2NvbCgpLmVxdWFscygiSFRUUCIpKSB7IC8vJE5PTi1OTFMtMSQKLQkJCQkJU3RyaW5nIG5hbWVzcGFjZSA9IEhUVFBDb25zdGFudHMuSFRUUF9OQU1FU1BBQ0VfVVJJOwotCQkJCQliaW5kaW5nR2VuZXJhdG9yLnNldENvbnRlbnRHZW5lcmF0b3IoQmluZGluZ0dlbmVyYXRvci5nZXRDb250ZW50R2VuZXJhdG9yKG5hbWVzcGFjZSkpOwotCi0JCQkJCUJvb2xlYW4gYm9vbGVhblZhbHVlID0gKEJvb2xlYW4pIG9wdGlvbnNQYWdlLmdldFByb3RvY29sT3B0aW9ucygpWzBdOwotCQkJCQlpZiAoYm9vbGVhblZhbHVlLmJvb2xlYW5WYWx1ZSgpKSB7Ci0JCQkJCQkvLyBQb3N0Ci0JCQkJCQkoKEhUVFBDb250ZW50R2VuZXJhdG9yKSBiaW5kaW5nR2VuZXJhdG9yLmdldENvbnRlbnRHZW5lcmF0b3IoKSkuc2V0VmVyYihIVFRQQ29udGVudEdlbmVyYXRvci5WRVJCX1BPU1QpOwotCQkJCQl9Ci0JCQkJCWVsc2UgewotCQkJCQkJLy8gR2V0Ci0JCQkJCQkoKEhUVFBDb250ZW50R2VuZXJhdG9yKSBiaW5kaW5nR2VuZXJhdG9yLmdldENvbnRlbnRHZW5lcmF0b3IoKSkuc2V0VmVyYihIVFRQQ29udGVudEdlbmVyYXRvci5WRVJCX0dFVCk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJCi0JCQkJYmluZGluZ0dlbmVyYXRvci5nZW5lcmF0ZUJpbmRpbmcoKTsKLQkJCQliaW5kaW5nR2VuZXJhdG9yLmdlbmVyYXRlUG9ydENvbnRlbnQoKTsJCQkJCi0JCQl9Ci0JCQlyZXNvdXJjZS5zYXZlKG51bGwpOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJcbkNvdWxkIG5vdCB3cml0ZSBuZXcgV1NETCBmaWxlIGluIFdTREwgV2l6YXJkOiAiICsgZSk7IC8vJE5PTi1OTFMtMSQKLQkJfQotCi0JCS8qCi0JCSAqIGlmIChmaWxlICE9IG51bGwpIHsgZmluYWwgSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBuZXcKLQkJICogU3RydWN0dXJlZFNlbGVjdGlvbihmaWxlKTsgaWYgKHNlbGVjdGlvbiAhPSBudWxsKSB7IElXb3JrYmVuY2gKLQkJICogd29ya2JlbmNoID0gVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFdvcmtiZW5jaCgpOyBmaW5hbAotCQkgKiBJV29ya2JlbmNoV2luZG93IHdvcmtiZW5jaFdpbmRvdyA9Ci0JCSAqIHdvcmtiZW5jaC5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsgZmluYWwgSVdvcmtiZW5jaFBhcnQKLQkJICogZm9jdXNQYXJ0ID0gd29ya2JlbmNoV2luZG93LmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVQYXJ0KCk7IGlmCi0JCSAqIChmb2N1c1BhcnQgaW5zdGFuY2VvZiBJU2V0U2VsZWN0aW9uVGFyZ2V0KSB7Ci0JCSAqIERpc3BsYXkuZ2V0Q3VycmVudCgpLmFzeW5jRXhlYyAobmV3IFJ1bm5hYmxlKCkgeyBwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCSAqICgoSVNldFNlbGVjdGlvblRhcmdldClmb2N1c1BhcnQpLnNlbGVjdFJldmVhbChzZWxlY3Rpb24pOyB9IH0pOyB9IH0gfQotCQkgKi8KLQkJb3BlbkVkaXRvcihmaWxlKTsKLQotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaXphcmQjaW5pdChJV29ya2JlbmNoLAotCSAqICAgICAgSVN0cnVjdHVyZWRTZWxlY3Rpb24pCi0JICovCi0JcHVibGljIHZvaWQgaW5pdChJV29ya2JlbmNoIHdvcmtiZW5jaCwgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uKSB7Ci0JCXRoaXMuc2VsZWN0aW9uID0gc2VsZWN0aW9uOwotCi0JCS8vIE5lZWQgbmV3IGljb24KLQkJdGhpcy5zZXREZWZhdWx0UGFnZUltYWdlRGVzY3JpcHRvcihJbWFnZURlc2NyaXB0b3IuY3JlYXRlRnJvbUZpbGUoSW50ZXJuYWxXU0RMTXVsdGlQYWdlRWRpdG9yLmNsYXNzLCAiaWNvbnMvbmV3X3dzZGxfd2l6LnBuZyIpKTsgLy8kTk9OLU5MUy0xJAotCQl0aGlzLnNldFdpbmRvd1RpdGxlKE1lc3NhZ2VzLl9VSV9USVRMRV9ORVdfV1NETF9GSUxFKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIGFkZFBhZ2VzKCkgewotCQluZXdGaWxlUGFnZSA9IG5ldyBXU0RMTmV3RmlsZVBhZ2Uoc2VsZWN0aW9uKTsKLQkJb3B0aW9uc1BhZ2UgPSBuZXcgV1NETE5ld0ZpbGVPcHRpb25zUGFnZShNZXNzYWdlcy5fVUlfVElUTEVfT1BUSU9OUywgTWVzc2FnZXMuX1VJX1RJVExFX09QVElPTlMsIG51bGwpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJYWRkUGFnZShuZXdGaWxlUGFnZSk7Ci0JCWFkZFBhZ2Uob3B0aW9uc1BhZ2UpOwotCX0KLQotCXB1YmxpYyBJUGF0aCBnZXROZXdGaWxlUGF0aCgpIHsKLQkJU3RyaW5nIGZpbGVOYW1lID0gbmV3RmlsZVBhZ2UuZ2V0RmlsZU5hbWUoKTsKLQkJcmV0dXJuIGZpbGVOYW1lICE9IG51bGwgPyBuZXcgUGF0aChmaWxlTmFtZSkgOiBudWxsOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGNhbkZpbmlzaCgpIHsKLQkJaWYgKG5ld0ZpbGVQYWdlLmlzUGFnZUNvbXBsZXRlKCkgJiYgb3B0aW9uc1BhZ2UuaXNQYWdlQ29tcGxldGUoKSkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXN0YXRpYyBwdWJsaWMgdm9pZCBvcGVuRWRpdG9yKGZpbmFsIElGaWxlIGlGaWxlKSB7Ci0JCWlmIChpRmlsZSAhPSBudWxsKSB7Ci0JCQlJV29ya2JlbmNoIHdvcmtiZW5jaCA9IFVJUGx1Z2luLmdldERlZmF1bHQoKS5nZXRXb3JrYmVuY2goKTsKLQkJCWZpbmFsIElXb3JrYmVuY2hXaW5kb3cgd29ya2JlbmNoV2luZG93ID0gd29ya2JlbmNoLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOwotCi0JCQlEaXNwbGF5LmdldERlZmF1bHQoKS5hc3luY0V4ZWMobmV3IFJ1bm5hYmxlKCkgewotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJdHJ5IHsKLQkJCQkJCVN0cmluZyBlZGl0b3JJZCA9IG51bGw7Ci0JCQkJCQlJRWRpdG9yRGVzY3JpcHRvciBlZGl0b3IgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEVkaXRvclJlZ2lzdHJ5KCkuZ2V0RGVmYXVsdEVkaXRvcihpRmlsZS5nZXRMb2NhdGlvbigpLnRvT1NTdHJpbmcoKSwgaUZpbGUuZ2V0Q29udGVudERlc2NyaXB0aW9uKCkuZ2V0Q29udGVudFR5cGUoKSk7Ci0JCQkJCQlpZiAoZWRpdG9yICE9IG51bGwpIHsKLQkJCQkJCQllZGl0b3JJZCA9IGVkaXRvci5nZXRJZCgpOwotCQkJCQkJfQotCQkJCQkJd29ya2JlbmNoV2luZG93LmdldEFjdGl2ZVBhZ2UoKS5vcGVuRWRpdG9yKG5ldyBGaWxlRWRpdG9ySW5wdXQoaUZpbGUpLCBlZGl0b3JJZCk7Ci0JCQkJCX0KLQkJCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4KSB7Ci0JCQkJCQkvLyBCMkJHVUlQbHVnaW4uZ2V0UGx1Z2luKCkuZ2V0TXNnTG9nZ2VyKCkud3JpdGUoIkV4Y2VwdGlvbgotCQkJCQkJLy8gZW5jb3VudGVyZWQgd2hlbiBhdHRlbXB0aW5nIHRvIG9wZW4gZmlsZTogIiArIGlGaWxlCi0JCQkJCQkvLyArICJcblxuIiArIGV4KTsKLQkJCQkJfQotCQkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleCkgewotCQkJCQl9Ci0JCQkJfQotCQkJfSk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgY2xhc3MgQXZhaWxhYmxlQ29udGVudENNVmlzaXRvciBleHRlbmRzIENNVmlzaXRvciB7Ci0JCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOQ0xVREVfQVRUUklCVVRFUyA9IE1vZGVsUXVlcnkuSU5DTFVERV9BVFRSSUJVVEVTOwotCQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTkNMVURFX0NISUxEX05PREVTID0gTW9kZWxRdWVyeS5JTkNMVURFX0NISUxEX05PREVTOwotCQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTkNMVURFX1NFUVVFTkNFX0dST1VQUyA9IE1vZGVsUXVlcnkuSU5DTFVERV9TRVFVRU5DRV9HUk9VUFM7Ci0KLQkJcHVibGljIEhhc2h0YWJsZSBjaGlsZE5vZGVUYWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLQkJcHVibGljIEhhc2h0YWJsZSBhdHRyaWJ1dGVUYWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLQkJcHVibGljIEVsZW1lbnQgcm9vdEVsZW1lbnQ7Ci0JCXB1YmxpYyBDTUVsZW1lbnREZWNsYXJhdGlvbiByb290RWxlbWVudERlY2xhcmF0aW9uOwotCQlwdWJsaWMgYm9vbGVhbiBpc1Jvb3RWaXNpdGVkOwotCQlwcm90ZWN0ZWQgYm9vbGVhbiBpbmNsdWRlU2VxdWVuY2VHcm91cHM7Ci0JCXB1YmxpYyBET01WYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0JCXB1YmxpYyBBdmFpbGFibGVDb250ZW50Q01WaXNpdG9yKEVsZW1lbnQgcm9vdEVsZW1lbnQsIENNRWxlbWVudERlY2xhcmF0aW9uIHJvb3RFbGVtZW50RGVjbGFyYXRpb24pIHsKLQkJCXRoaXMucm9vdEVsZW1lbnQgPSByb290RWxlbWVudDsKLQkJCXRoaXMucm9vdEVsZW1lbnREZWNsYXJhdGlvbiA9IHJvb3RFbGVtZW50RGVjbGFyYXRpb247Ci0JCQl2YWxpZGF0b3IgPSBuZXcgRE9NVmFsaWRhdG9yKCk7Ci0JCX0KLQotCQlwcm90ZWN0ZWQgU3RyaW5nIGdldEtleShDTU5vZGUgY21Ob2RlKSB7Ci0JCQlTdHJpbmcga2V5ID0gY21Ob2RlLmdldE5vZGVOYW1lKCk7Ci0JCQlDTURvY3VtZW50IGNtRG9jdW1lbnQgPSAoQ01Eb2N1bWVudCkgY21Ob2RlLmdldFByb3BlcnR5KCJDTURvY3VtZW50Iik7IC8vJE5PTi1OTFMtMSQKLQkJCWlmIChjbURvY3VtZW50ICE9IG51bGwpIHsKLQkJCQlTdHJpbmcgbmFtZXNwYWNlVVJJID0gKFN0cmluZykgY21Eb2N1bWVudC5nZXRQcm9wZXJ0eSgiaHR0cDovL29yZy5lY2xpcHNlLndzdC9jbS9wcm9wZXJ0aWVzL3RhcmdldE5hbWVzcGFjZVVSSSIpOyAvLyROT04tTkxTLTEkCi0JCQkJaWYgKG5hbWVzcGFjZVVSSSAhPSBudWxsKSB7Ci0JCQkJCWtleSA9ICJbIiArIG5hbWVzcGFjZVVSSSArICJdIiArIGtleTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCQkJfQotCQkJfQotCQkJcmV0dXJuIGtleTsKLQkJfQotCi0JCXB1YmxpYyBMaXN0IGNvbXB1dGVBdmFpbGFibGVDb250ZW50KGludCBpbmNsdWRlT3B0aW9ucykgewotCQkJVmVjdG9yIHYgPSBuZXcgVmVjdG9yKCk7Ci0KLQkJCWludCBjb250ZW50VHlwZSA9IHJvb3RFbGVtZW50RGVjbGFyYXRpb24uZ2V0Q29udGVudFR5cGUoKTsKLQkJCWluY2x1ZGVTZXF1ZW5jZUdyb3VwcyA9ICgoaW5jbHVkZU9wdGlvbnMgJiBJTkNMVURFX1NFUVVFTkNFX0dST1VQUykgIT0gMCk7Ci0JCQl2aXNpdENNTm9kZShyb290RWxlbWVudERlY2xhcmF0aW9uKTsKLQotCQkJaWYgKChpbmNsdWRlT3B0aW9ucyAmIElOQ0xVREVfQVRUUklCVVRFUykgIT0gMCkgewotCQkJCXYuYWRkQWxsKGF0dHJpYnV0ZVRhYmxlLnZhbHVlcygpKTsKLQkJCQlDTUF0dHJpYnV0ZURlY2xhcmF0aW9uIG5pbGxhYmxlQXR0cmlidXRlID0gKENNQXR0cmlidXRlRGVjbGFyYXRpb24pIHJvb3RFbGVtZW50RGVjbGFyYXRpb24uZ2V0UHJvcGVydHkoImh0dHA6Ly9vcmcuZWNsaXBzZS53c3QvY20vcHJvcGVydGllcy9uaWxsYWJsZSIpOyAvLyROT04tTkxTLTEkCi0JCQkJaWYgKG5pbGxhYmxlQXR0cmlidXRlICE9IG51bGwpIHsKLQkJCQkJdi5hZGQobmlsbGFibGVBdHRyaWJ1dGUpOwotCQkJCX0KLQkJCX0KLQotCQkJaWYgKChpbmNsdWRlT3B0aW9ucyAmIElOQ0xVREVfQ0hJTERfTk9ERVMpICE9IDApIHsKLQkJCQlpZiAoY29udGVudFR5cGUgPT0gQ01FbGVtZW50RGVjbGFyYXRpb24uTUlYRUQgfHwgY29udGVudFR5cGUgPT0gQ01FbGVtZW50RGVjbGFyYXRpb24uRUxFTUVOVCkgewotCQkJCQl2LmFkZEFsbChjaGlsZE5vZGVUYWJsZS52YWx1ZXMoKSk7Ci0JCQkJfQotCQkJCWVsc2UgaWYgKGNvbnRlbnRUeXBlID09IENNRWxlbWVudERlY2xhcmF0aW9uLkFOWSkgewotCQkJCQlDTURvY3VtZW50IGNtRG9jdW1lbnQgPSAoQ01Eb2N1bWVudCkgcm9vdEVsZW1lbnREZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eSgiQ01Eb2N1bWVudCIpOyAvLyROT04tTkxTLTEkCi0JCQkJCWlmIChjbURvY3VtZW50ICE9IG51bGwpIHsKLQkJCQkJCUNNTmFtZWROb2RlTWFwIGVsZW1lbnRzID0gY21Eb2N1bWVudC5nZXRFbGVtZW50cygpOwotCQkJCQkJZm9yIChJdGVyYXRvciBpID0gZWxlbWVudHMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQkJCQkJdi5hZGQoKENNRWxlbWVudERlY2xhcmF0aW9uKSBpLm5leHQoKSk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0KLQkJCQlpZiAoY29udGVudFR5cGUgPT0gQ01FbGVtZW50RGVjbGFyYXRpb24uTUlYRUQgfHwgY29udGVudFR5cGUgPT0gQ01FbGVtZW50RGVjbGFyYXRpb24uUENEQVRBIHx8IGNvbnRlbnRUeXBlID09IENNRWxlbWVudERlY2xhcmF0aW9uLkFOWSkgewotCQkJCQlDTURhdGFUeXBlIGRhdGFUeXBlID0gcm9vdEVsZW1lbnREZWNsYXJhdGlvbi5nZXREYXRhVHlwZSgpOwotCQkJCQlpZiAoZGF0YVR5cGUgIT0gbnVsbCkgewotCQkJCQkJdi5hZGQoZGF0YVR5cGUpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJcmV0dXJuIHY7Ci0JCX0KLQotCQkvKgotCQkgKiBwdWJsaWMgdm9pZCB2aXNpdENNQW55RWxlbWVudChDTUFueUVsZW1lbnQgYW55RWxlbWVudCkgeyBTdHJpbmcgdXJpID0KLQkJICogYW55RWxlbWVudC5nZXROYW1lc3BhY2VVUkkoKTsgTGlzdCBsaXN0ID0KLQkJICogZ2V0Q01Eb2N1bWVudExpc3Qocm9vdEVsZW1lbnQsIHJvb3RFbGVtZW50RGVjbGFyYXRpb24sIHVyaSk7IGZvcgotCQkgKiAoSXRlcmF0b3IgaXRlcmF0b3IgPSBsaXN0Lml0ZXJhdG9yKCk7IGl0ZXJhdG9yLmhhc05leHQoKTsgKSB7Ci0JCSAqIENNRG9jdW1lbnQgY21kb2N1bWVudCA9IChDTURvY3VtZW50KWl0ZXJhdG9yLm5leHQoKTsgaWYgKGNtZG9jdW1lbnQgIT0KLQkJICogbnVsbCkgeyBDTU5hbWVkTm9kZU1hcCBtYXAgPSBjbWRvY3VtZW50LmdldEVsZW1lbnRzKCk7IGludCBzaXplID0KLQkJICogbWFwLmdldExlbmd0aCgpOyBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgeyBDTU5vZGUgZWQgPQotCQkgKiBtYXAuaXRlbShpKTsKLQkJICogCi0JCSAqIGNoaWxkTm9kZVRhYmxlLnB1dChnZXRLZXkoZWQpLCBlZCk7IH0gfSB9IH0KLQkJICovCi0JCXB1YmxpYyB2b2lkIHZpc2l0Q01BdHRyaWJ1dGVEZWNsYXJhdGlvbihDTUF0dHJpYnV0ZURlY2xhcmF0aW9uIGFkKSB7Ci0JCQlzdXBlci52aXNpdENNQXR0cmlidXRlRGVjbGFyYXRpb24oYWQpOwotCQkJYXR0cmlidXRlVGFibGUucHV0KGFkLmdldE5vZGVOYW1lKCksIGFkKTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHZpc2l0Q01FbGVtZW50RGVjbGFyYXRpb24oQ01FbGVtZW50RGVjbGFyYXRpb24gZWQpIHsKLQkJCWlmIChlZCA9PSByb290RWxlbWVudERlY2xhcmF0aW9uICYmICFpc1Jvb3RWaXNpdGVkKSB7Ci0JCQkJaXNSb290VmlzaXRlZCA9IHRydWU7Ci0JCQkJc3VwZXIudmlzaXRDTUVsZW1lbnREZWNsYXJhdGlvbihlZCk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlpZiAoIUJvb2xlYW4uVFJVRS5lcXVhbHMoZWQuZ2V0UHJvcGVydHkoIkFic3RyYWN0IikpKSB7IC8vJE5PTi1OTFMtMSQKLQkJCQkJY2hpbGROb2RlVGFibGUucHV0KGdldEtleShlZCksIGVkKTsKLQkJCQl9Ci0KLQkJCQlDTU5vZGVMaXN0IHN1YnN0aXR1dGlvbkdyb3VwID0gKENNTm9kZUxpc3QpIGVkLmdldFByb3BlcnR5KCJTdWJzdGl0dXRpb25Hcm91cCIpOyAvLyROT04tTkxTLTEkCi0JCQkJaWYgKHN1YnN0aXR1dGlvbkdyb3VwICE9IG51bGwpIHsKLQkJCQkJaGFuZGxlU3Vic3RpdHV0aW9uR3JvdXAoc3Vic3RpdHV0aW9uR3JvdXApOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCXByb3RlY3RlZCB2b2lkIGhhbmRsZVN1YnN0aXR1dGlvbkdyb3VwKENNTm9kZUxpc3Qgc3Vic3RpdHV0aW9uR3JvdXApIHsKLQkJCWludCBzdWJzdGl0dXRpb25Hcm91cExlbmd0aCA9IHN1YnN0aXR1dGlvbkdyb3VwLmdldExlbmd0aCgpOwotCQkJaWYgKHN1YnN0aXR1dGlvbkdyb3VwTGVuZ3RoID4gMSkgewotCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgc3Vic3RpdHV0aW9uR3JvdXBMZW5ndGg7IGkrKykgewotCQkJCQlDTU5vZGUgZWQgPSBzdWJzdGl0dXRpb25Hcm91cC5pdGVtKGkpOwotCQkJCQlpZiAoIUJvb2xlYW4uVFJVRS5lcXVhbHMoZWQuZ2V0UHJvcGVydHkoIkFic3RyYWN0IikpKSB7IC8vJE5PTi1OTFMtMSQKLQkJCQkJCWNoaWxkTm9kZVRhYmxlLnB1dChnZXRLZXkoZWQpLCBlZCk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCB2aXNpdENNR3JvdXAoQ01Hcm91cCBncm91cCkgewotCQkJaWYgKGluY2x1ZGVTZXF1ZW5jZUdyb3VwcykgewotCQkJCWlmIChncm91cC5nZXRPcGVyYXRvcigpID09IENNR3JvdXAuU0VRVUVOQ0UgJiYgZ3JvdXAuZ2V0Q2hpbGROb2RlcygpLmdldExlbmd0aCgpID4gMSAmJiBpbmNsdWRlc1JlcXVpcmVkQ29udGVudChncm91cCkpIHsKLQkJCQkJY2hpbGROb2RlVGFibGUucHV0KGdyb3VwLCBncm91cCk7Ci0JCQkJfQotCQkJfQotCQkJc3VwZXIudmlzaXRDTUdyb3VwKGdyb3VwKTsKLQkJfQotCi0JCXB1YmxpYyBib29sZWFuIGluY2x1ZGVzUmVxdWlyZWRDb250ZW50KENNR3JvdXAgZ3JvdXApIHsKLQkJCUxpc3QgbGlzdCA9IGdldFZhbGlkYXRvcigpLmNyZWF0ZUNvbnRlbnRTcGVjaWZpY2F0aW9uTGlzdChncm91cCk7Ci0JCQlyZXR1cm4gbGlzdC5zaXplKCkgPiAxOwotCQl9Ci0KLQkJcHVibGljIERPTVZhbGlkYXRvciBnZXRWYWxpZGF0b3IoKSB7Ci0JCQlyZXR1cm4gdmFsaWRhdG9yOwotCQl9Ci0JfSAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIGhlcmUKLQkKLQkKLQlwdWJsaWMgdm9pZCBvcGVuUHJvamVjdFdTSVByb3BlcnRpZXMoKSB7Ci0JCVNoZWxsIHNoZWxsID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRTaGVsbCgpOwotCQlJUHJvamVjdCB0YXJnZXRQcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ld0ZpbGVQYWdlLmdldENvbnRhaW5lckZ1bGxQYXRoKCkuYXBwZW5kKG5ld0ZpbGVQYWdlLmdldEZpbGVOYW1lKCkpKS5nZXRQcm9qZWN0KCk7Ci0JCS8vUHJlZmVyZW5jZXNVdGlsLmNyZWF0ZVByb3BlcnR5RGlhbG9nT24oc2hlbGwsdGFyZ2V0UHJvamVjdCxudWxsLG51bGwsbnVsbCkub3BlbigpOwotCi0JCVByZWZlcmVuY2VzVXRpbC5jcmVhdGVQcm9wZXJ0eURpYWxvZ09uKHNoZWxsLHRhcmdldFByb2plY3QsV1NJQ29tcGxpYW5jZVByb3BlcnR5UGFnZS5QQUdFX0lEICxuZXcgU3RyaW5nW10ge1dTSUNvbXBsaWFuY2VQcm9wZXJ0eVBhZ2UuUEFHRV9JRH0sbnVsbCkub3BlbigpOwotCX0KLQkKLQkgIHB1YmxpYyBTdHJpbmcgZ2V0V1NJUHJlZmVyZW5jZXMoKSB7Ci0JCSAgSVByb2plY3QgdGFyZ2V0UHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXdGaWxlUGFnZS5nZXRDb250YWluZXJGdWxsUGF0aCgpLmFwcGVuZChuZXdGaWxlUGFnZS5nZXRGaWxlTmFtZSgpKSkuZ2V0UHJvamVjdCgpOwotCQkgIFBlcnNpc3RlbnRXU0lDb250ZXh0IFdTSVNTQmNvbnRleHQgPSBXU1BsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFdTSVNTQlBDb250ZXh0KCk7Ci0JCSAgCi0JCSAgICAgaWYgKFdTSVNTQmNvbnRleHQucHJvamVjdFN0b3BOb25XU0lDb21wbGlhbmNlcyh0YXJnZXRQcm9qZWN0KSkKLQkJICAgICAgewotCQkgICAgICAgIHJldHVybiAoUGVyc2lzdGVudFdTSUNvbnRleHQuU1RPUF9OT05fV1NJKTsKLQkJICAgICAgfSAKLQkJICAgICAgZWxzZSBpZiAoV1NJU1NCY29udGV4dC5wcm9qZWN0V2Fybk5vbldTSUNvbXBsaWFuY2VzKHRhcmdldFByb2plY3QpKQotCQkgICAgICB7Ci0JCSAgICAgICAgcmV0dXJuIChQZXJzaXN0ZW50V1NJQ29udGV4dC5XQVJOX05PTl9XU0kpOwotCQkgICAgICB9Ci0JCSAgICAgIGVsc2UgCi0JCSAgICAgIHsKLQkJICAgIAlyZXR1cm4gKFBlcnNpc3RlbnRXU0lDb250ZXh0LklHTk9SRV9OT05fV1NJKTsKLQkJICAgICAgfQotCSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC93aXphcmRzL1BvcnRXaXphcmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvd2l6YXJkcy9Qb3J0V2l6YXJkLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxNDY2ZmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC93aXphcmRzL1BvcnRXaXphcmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwud2l6YXJkczsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuUG9ydEdlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JDU0hlbHBJZHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuZGlhbG9ncy5Qcm90b2NvbENvbXBvbmVudENvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5Db21wb25lbnRSZWZlcmVuY2VVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuTmFtZVV0aWw7Ci0KLXB1YmxpYyBjbGFzcyBQb3J0V2l6YXJkIGV4dGVuZHMgV2l6YXJkCi17Ci0gIHByb3RlY3RlZCBmaW5hbCBzdGF0aWMgaW50IFNUWUxFX05FV19CSU5ESU5HID0gMTsKLSAgcHJvdGVjdGVkIGZpbmFsIHN0YXRpYyBpbnQgU1RZTEVfRVhJU1RJTkdfQklORElORyA9IDEgPDwgMTsKLSAgcHJvdGVjdGVkIGZpbmFsIHN0YXRpYyBpbnQgU1RZTEVfREVGQVVMVCA9IFNUWUxFX05FV19CSU5ESU5HIHwgU1RZTEVfRVhJU1RJTkdfQklORElORzsKLQotICBwcm90ZWN0ZWQgUG9ydEdlbmVyYXRvciBwb3J0R2VuZXJhdG9yOwotICBwcm90ZWN0ZWQgUG9ydFdpemFyZE9wdGlvbnNQYWdlIHNwZWNpZnlCaW5kaW5nUGFnZTsKLSAgcHJvdGVjdGVkIGludCBzdHlsZTsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIFBvcnRXaXphcmQuCi0gICAqLwotICBwdWJsaWMgUG9ydFdpemFyZChTZXJ2aWNlIHNlcnZpY2UpCi0gIHsKLSAgICB0aGlzKHNlcnZpY2UsIDApOwotICB9Ci0KLSAgcHVibGljIFBvcnRXaXphcmQoU2VydmljZSBzZXJ2aWNlLCBpbnQgc3R5bGUpCi0gIHsKLSAgICBzdXBlcigpOwotICAgIHBvcnRHZW5lcmF0b3IgPSBuZXcgUG9ydEdlbmVyYXRvcihzZXJ2aWNlKTsKLSAgICBzZXRXaW5kb3dUaXRsZShNZXNzYWdlcy5fVUlfUE9SVF9XSVpBUkQpOyAvLyROT04tTkxTLTEkCi0gICAgLy9zZXREZWZhdWx0UGFnZUltYWdlRGVzY3JpcHRvcihJbWFnZURlc2NyaXB0b3IuY3JlYXRlRnJvbUZpbGUoV1NETEVkaXRvclBsdWdpbi5jbGFzcywgImljb25zL05ld1hNTC5naWYiKSk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJuIHRydWUgaWYgd2l6YXJkIHNldHVwIGlzIHN1Y2Nlc3NmdWwsIGZhbHNlIG90aGVyd2lzZQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gc2V0dXAoKQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBhZGRQYWdlcygpCi0gIHsKLSAgICBzcGVjaWZ5QmluZGluZ1BhZ2UgPSBuZXcgUG9ydFdpemFyZE9wdGlvbnNQYWdlKHN0eWxlKTsKLSAgICBhZGRQYWdlKHNwZWNpZnlCaW5kaW5nUGFnZSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBwZXJmb3JtRmluaXNoKCkKLSAgewotICAgIE9iamVjdCBvYmplY3QgPSBwb3J0R2VuZXJhdG9yLmdlbmVyYXRlUG9ydCgpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgaWYgKG9iamVjdCAhPSBudWxsKQotICAgICAgewotICAgICAgICBJRWRpdG9yUGFydCBlZGl0b3JQYXJ0ID0gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLSAgICAgICAgSVNlbGVjdGlvblByb3ZpZGVyIHNlbGVjdGlvblByb3ZpZGVyID0gKElTZWxlY3Rpb25Qcm92aWRlcikgZWRpdG9yUGFydC5nZXRBZGFwdGVyKElTZWxlY3Rpb25Qcm92aWRlci5jbGFzcyk7Ci0gICAgICAgIGlmIChzZWxlY3Rpb25Qcm92aWRlciAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgc2VsZWN0aW9uUHJvdmlkZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKG9iamVjdCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgY2xhc3MgUG9ydFdpemFyZE9wdGlvbnNQYWdlIGV4dGVuZHMgV2l6YXJkUGFnZQotICB7Ci0KLSAgICBwcm90ZWN0ZWQgUHJvdG9jb2xDb21wb25lbnRDb250cm9sIHByb3RvY29sQ29tcG9uZW50Q29udHJvbDsKLQotICAgIHB1YmxpYyBQb3J0V2l6YXJkT3B0aW9uc1BhZ2UoaW50IHN0eWxlKQotICAgIHsKLSAgICAgIHN1cGVyKCJTcGVjaWZ5UG9ydFBhZ2UiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgc2V0VGl0bGUoTWVzc2FnZXMuX1VJX1NQRUNJRllfUE9SVF9ERVRBSUxTKTsgLy8kTk9OLU5MUy0xJAotICAgICAgc2V0RGVzY3JpcHRpb24oTWVzc2FnZXMuX1VJX1NQRUNJRllfUE9SVF9ERVRBSUxTX1RPX0JFX0NSRUFURUQpOyAvLyROT04tTkxTLTEkCi0gICAgfQotCi0gICAgcHVibGljIFBvcnRHZW5lcmF0b3IgZ2V0R2VuZXJhdG9yKCkKLSAgICB7Ci0gICAgICByZXR1cm4gcG9ydEdlbmVyYXRvcjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpCi0gICAgewotICAgICAgUHJvdG9jb2xDb21wb25lbnRDb250cm9sIHByb3RvY29sQ29tcG9uZW50Q29udHJvbCA9IG5ldyBQb3J0UHJvdG9jb2xDb21wb25lbnRDb250cm9sKHBhcmVudCwgcG9ydEdlbmVyYXRvcik7Ci0gICAgICBwcm90b2NvbENvbXBvbmVudENvbnRyb2wuaW5pdEZpZWxkcygpOwotICAgICAgc2V0Q29udHJvbChwcm90b2NvbENvbXBvbmVudENvbnRyb2wpOwotICAgICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChwcm90b2NvbENvbXBvbmVudENvbnRyb2wsIEFTREVkaXRvckNTSGVscElkcy5QT1JUX1dJWkFSRCk7Ci0gICAgfQotICB9Ci0KLSAgY2xhc3MgUG9ydFByb3RvY29sQ29tcG9uZW50Q29udHJvbCBleHRlbmRzIFByb3RvY29sQ29tcG9uZW50Q29udHJvbAotICB7Ci0KLSAgICBwdWJsaWMgUG9ydFByb3RvY29sQ29tcG9uZW50Q29udHJvbChDb21wb3NpdGUgcGFyZW50LCBQb3J0R2VuZXJhdG9yIGdlbmVyYXRvcikKLSAgICB7Ci0gICAgICBzdXBlcihwYXJlbnQsIGdlbmVyYXRvciwgZmFsc2UpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0UmVmTmFtZUxhYmVsVGV4dCgpCi0gICAgewotICAgICAgcmV0dXJuIE1lc3NhZ2VzLl9VSV9CSU5ESU5HOyAvLyROT04tTkxTLTEkCi0gICAgfQotCi0gICAgcHVibGljIExpc3QgZ2V0UmVmTmFtZXMoKQotICAgIHsKLSAgICAgIHJldHVybiBuZXcgQ29tcG9uZW50UmVmZXJlbmNlVXRpbChwb3J0R2VuZXJhdG9yLmdldERlZmluaXRpb24oKSkuZ2V0QmluZGluZ05hbWVzKCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXREZWZhdWx0TmFtZSgpCi0gICAgewotICAgICAgU2VydmljZSBzZXJ2aWNlID0gcG9ydEdlbmVyYXRvci5nZXRTZXJ2aWNlKCk7Ci0gICAgICByZXR1cm4gTmFtZVV0aWwuYnVpbGRVbmlxdWVQb3J0TmFtZShzZXJ2aWNlLCBudWxsKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlIGNyZWF0ZUNvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZShTdHJpbmcgcHJvdG9jb2wpCi0gICAgewotICAgICAgQ29udGVudEdlbmVyYXRvck9wdGlvbnNQYWdlIG9wdGlvbnNQYWdlID0gbnVsbDsJICAKLQkgIFN0cmluZyBwcm90b2NvbFNlbGVjdGlvbiA9IHByb3RvY29sQ29tYm8uZ2V0SXRlbShwcm90b2NvbENvbWJvLmdldFNlbGVjdGlvbkluZGV4KCkpOwotCSAgaWYgKHByb3RvY29sU2VsZWN0aW9uLmVxdWFscygiU09BUCIpKSB7IC8vJE5PTi1OTFMtMSQKLQkJICBvcHRpb25zUGFnZSA9IG5ldyBTb2FwQmluZGluZ09wdGlvbnNQYWdlKCk7Ci0JICB9Ci0JICBlbHNlIGlmIChwcm90b2NvbFNlbGVjdGlvbi5lcXVhbHMoIkhUVFAiKSkgeyAvLyROT04tTkxTLTEkCi0JCSAgb3B0aW9uc1BhZ2UgPSBuZXcgSHR0cEJpbmRpbmdPcHRpb25zUGFnZSgpOwotCSAgfQkgIAotCSAgLy8gVE9ETzogV2UgbmVlZCB0byBldmVudHVhbGx5IHB1dCB0aGlzIGJhY2sgaW4KLS8vICAgICAgQ29udGVudEdlbmVyYXRvckV4dGVuc2lvbiBleHRlbnNpb24gPSBXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0Q29udGVudEdlbmVyYXRvckV4dGVuc2lvblJlZ2lzdHJ5KCkuZ2V0Q29udGVudEdlbmVyYXRvckV4dGVuc2lvbihwcm90b2NvbCk7Ci0vLyAgICAgIGlmIChleHRlbnNpb24gIT0gbnVsbCkKLS8vICAgICAgewotLy8gICAgICAgIG9wdGlvbnNQYWdlID0gZXh0ZW5zaW9uLmNyZWF0ZVBvcnRDb250ZW50R2VuZXJhdG9yT3B0aW9uc1BhZ2UoKTsKLS8vICAgICAgfQotICAgICAgcmV0dXJuIG9wdGlvbnNQYWdlOwotICAgIH0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvd2l6YXJkcy9Tb2FwQmluZGluZ09wdGlvbnNQYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3dpemFyZHMvU29hcEJpbmRpbmdPcHRpb25zUGFnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzgzMDlkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvd2l6YXJkcy9Tb2FwQmluZGluZ09wdGlvbnNQYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLndpemFyZHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0ZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwuZ2VuZXJhdG9yLlNPQVBDb250ZW50R2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmdlbmVyYXRvci5CYXNlR2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETEVkaXRvclV0aWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi1wdWJsaWMgY2xhc3MgU29hcEJpbmRpbmdPcHRpb25zUGFnZSBpbXBsZW1lbnRzIENvbnRlbnRHZW5lcmF0b3JPcHRpb25zUGFnZSwgU2VsZWN0aW9uTGlzdGVuZXIKLXsKLSAgcHJvdGVjdGVkIEJ1dHRvbiBkb2NMaXRlcmFsOwotICBwcm90ZWN0ZWQgQnV0dG9uIHJwY0xpdGVyYWw7Ci0gIHByb3RlY3RlZCBCdXR0b24gcnBjRW5jb2RlZDsKLSAgcHJvdGVjdGVkIENvbXBvc2l0ZSBjb250cm9sOwotICBwcm90ZWN0ZWQgQmFzZUdlbmVyYXRvciBnZW5lcmF0b3I7Ci0KLSAgcHVibGljIFNvYXBCaW5kaW5nT3B0aW9uc1BhZ2UoKQotICB7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBpbml0KEJhc2VHZW5lcmF0b3IgZ2VuZXJhdG9yKQotICB7Ci0gICAgdGhpcy5nZW5lcmF0b3IgPSBnZW5lcmF0b3I7Ci0gIH0KLQotICBwdWJsaWMgQ29tcG9zaXRlIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkKLSAgewotICAgIGNvbnRyb2wgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotICAgIEdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBsYXlvdXQubWFyZ2luV2lkdGggPSAwOwotICAgIGNvbnRyb2wuc2V0TGF5b3V0KGxheW91dCk7Ci0KLSAgICBMYWJlbCBzZXBhcmF0b3IgPSBuZXcgTGFiZWwoY29udHJvbCwgU1dULlNFUEFSQVRPUiB8IFNXVC5IT1JJWk9OVEFMKTsKLSAgICBHcmlkRGF0YSBnZD0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZ2QuaG9yaXpvbnRhbEFsaWdubWVudD0gR3JpZERhdGEuRklMTDsKLSAgICBnZC5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlPSB0cnVlOwotICAgIHNlcGFyYXRvci5zZXRMYXlvdXREYXRhKGdkKTsKLQotICAgIExhYmVsIG9wdGlvbnNIZWFkaW5nID0gbmV3IExhYmVsKGNvbnRyb2wsIFNXVC5OT05FKTsKLSAgICBvcHRpb25zSGVhZGluZy5zZXRUZXh0KE1lc3NhZ2VzLl9VSV9MQUJFTF9TT0FQX0JJTkRJTkdfT1BUSU9OUyk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGRvY0xpdGVyYWwgPSBuZXcgQnV0dG9uKGNvbnRyb2wsIFNXVC5SQURJTyk7Ci0gICAgZG9jTGl0ZXJhbC5zZXRUZXh0KE1lc3NhZ2VzLl9VSV9SQURJT19ET0NVTUVOVF9MSVRFUkFMKTsgLy8kTk9OLU5MUy0xJAotICAgIGRvY0xpdGVyYWwuc2V0U2VsZWN0aW9uKHRydWUpOwotCi0gICAgcnBjTGl0ZXJhbCA9IG5ldyBCdXR0b24oY29udHJvbCwgU1dULlJBRElPKTsKLSAgICBycGNMaXRlcmFsLnNldFRleHQoTWVzc2FnZXMuX1VJX1JBRElPX1JQQ19MSVRFUkFMKTsgLy8kTk9OLU5MUy0xJAotICAgIAotICAgIHJwY0VuY29kZWQgPSBuZXcgQnV0dG9uKGNvbnRyb2wsIFNXVC5SQURJTyk7Ci0gICAgcnBjRW5jb2RlZC5zZXRUZXh0KE1lc3NhZ2VzLl9VSV9SQURJT19SUENfRU5DT0RFRCk7IC8vJE5PTi1OTFMtMSQKLQotICAgIGlmIChnZW5lcmF0b3IuZ2V0TmFtZSgpICE9IG51bGwpCi0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gZ2VuZXJhdG9yLmdldERlZmluaXRpb24oKTsKLSAgICAgIFFOYW1lIHFuYW1lID0gbmV3IFFOYW1lKGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCksIGdlbmVyYXRvci5nZXROYW1lKCkpOwotICAgICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpIGRlZmluaXRpb24uZ2V0QmluZGluZyhxbmFtZSk7Ci0KLSAgICAgIGlmIChiaW5kaW5nICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIExpc3QgZWVMaXN0ID0gYmluZGluZy5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICAgIGlmIChlZUxpc3Quc2l6ZSgpID4gMCkKLSAgICAgICAgewotICAgICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGVlID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBlZUxpc3QuZ2V0KDApOwotCi0gICAgICAgICAgRWxlbWVudCBlbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KGVlKTsKLSAgICAgICAgICBTdHJpbmcgc3R5bGUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgic3R5bGUiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgIAotICAgICAgICAgIGlmICgicnBjIi5lcXVhbHMoc3R5bGUpKSAvLyROT04tTkxTLTEkCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gVHJ5IHRvIGRldGVybWluZSBpZiBpdCdzIFJQQyBMaXRlcmFsIG9yIFJQQyBFbmNvZGVkCi0gICAgICAgICAgCVN0cmluZyB1c2UgPSAiZW5jb2RlZCI7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAJTGlzdCBvcGVyYXRpb25zID0gYmluZGluZy5nZXRFQmluZGluZ09wZXJhdGlvbnMoKTsKLSAgICAgICAgICAJaWYgKG9wZXJhdGlvbnMuc2l6ZSgpID4gMCkgewotICAgICAgICAgIAkJZWxlbWVudCA9IG51bGw7Ci0gICAgICAgICAgCQlCaW5kaW5nT3BlcmF0aW9uIG9wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKSBvcGVyYXRpb25zLmdldCgwKTsKLSAgICAgICAgICAJCWlmIChvcGVyYXRpb24uZ2V0RUJpbmRpbmdJbnB1dCgpICE9IG51bGwgJiYgb3BlcmF0aW9uLmdldEVCaW5kaW5nSW5wdXQoKS5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuc2l6ZSgpID4gMCkgewotICAgICAgICAgIAkJCU9iamVjdCBvYmplY3QgPSBvcGVyYXRpb24uZ2V0RUJpbmRpbmdJbnB1dCgpLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5nZXQoMCk7Ci0gICAgICAgICAgCQkJZWxlbWVudCA9IFdTRExFZGl0b3JVdGlsLmdldEluc3RhbmNlKCkuZ2V0RWxlbWVudEZvck9iamVjdChvYmplY3QpOwotICAgICAgICAgIAkJfQotICAgICAgICAgIAkJZWxzZSBpZiAob3BlcmF0aW9uLmdldEVCaW5kaW5nT3V0cHV0KCkgIT0gbnVsbCAmJiBvcGVyYXRpb24uZ2V0RUJpbmRpbmdPdXRwdXQoKS5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuc2l6ZSgpID4gMCkgewotICAgICAgICAgIAkJCU9iamVjdCBvYmplY3QgPSBvcGVyYXRpb24uZ2V0RUJpbmRpbmdPdXRwdXQoKS5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuZ2V0KDApOwotICAgICAgICAgIAkJCWVsZW1lbnQgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldEVsZW1lbnRGb3JPYmplY3Qob2JqZWN0KTsKLSAgICAgICAgICAJCX0KLSAgICAgICAgICAJCWVsc2UgaWYgKG9wZXJhdGlvbi5nZXRFQmluZGluZ0ZhdWx0cygpLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAJCQlCaW5kaW5nRmF1bHQgZmF1bHQgPSAoQmluZGluZ0ZhdWx0KSBvcGVyYXRpb24uZ2V0RUJpbmRpbmdGYXVsdHMoKS5nZXQoMCk7Ci0gICAgICAgICAgCQkJTGlzdCBmYXVsdEVFID0gZmF1bHQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICAgICAgCQkJCi0gICAgICAgICAgCQkJaWYgKGZhdWx0RUUuc2l6ZSgpID4gMCkgewotICAgICAgICAgIAkJCQllbGVtZW50ID0gV1NETEVkaXRvclV0aWwuZ2V0SW5zdGFuY2UoKS5nZXRFbGVtZW50Rm9yT2JqZWN0KGZhdWx0RUUuZ2V0KDApKTsKLSAgICAgICAgICAJCQl9Ci0gICAgICAgICAgCQl9Ci0gICAgICAgICAgCQkKLSAgICAgICAgICAJCWlmIChlbGVtZW50ICE9IG51bGwpIHsKLSAgICAgICAgICAJCQl1c2UgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgidXNlIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAJCX0KLSAgICAgICAgICAJfQotICAgICAgICAgIAkKLSAgICAgICAgICAJaWYgKHVzZSAhPSBudWxsICYmICJsaXRlcmFsIi5lcXVhbHModXNlKSkgeyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgCQlkb2NMaXRlcmFsLnNldFNlbGVjdGlvbihmYWxzZSk7Ci0gICAgICAgICAgCQlycGNMaXRlcmFsLnNldFNlbGVjdGlvbih0cnVlKTsKLSAgICAgICAgICAJCXJwY0VuY29kZWQuc2V0U2VsZWN0aW9uKGZhbHNlKTsKLSAgICAgICAgICAJfQotICAgICAgICAgIAllbHNlIHsgICAgICAgICAgCQotICAgICAgICAgIAkJZG9jTGl0ZXJhbC5zZXRTZWxlY3Rpb24oZmFsc2UpOwotICAgICAgICAgIAkJcnBjTGl0ZXJhbC5zZXRTZWxlY3Rpb24oZmFsc2UpOwotICAgICAgICAgIAkJcnBjRW5jb2RlZC5zZXRTZWxlY3Rpb24odHJ1ZSk7Ci0gICAgICAgICAgCX0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBkb2NMaXRlcmFsLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOwotICAgIHJwY0xpdGVyYWwuYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0gICAgcnBjRW5jb2RlZC5hZGRTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKLSAgICBjb21wdXRlT3B0aW9ucygpOwotCi0gICAgcmV0dXJuIGNvbnRyb2w7Ci0gIH0KLQotICBwdWJsaWMgQ29tcG9zaXRlIGdldENvbnRyb2woKSB7Ci0JICByZXR1cm4gY29udHJvbDsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gaXNPdmVyd3JpdGVBcHBsaWNhYmxlKCkKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZlbnQpCi0gIHsKLSAgICBjb21wdXRlT3B0aW9ucygpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgY29tcHV0ZU9wdGlvbnMoKQotICB7Ci0JICBpZiAoZ2VuZXJhdG9yLmdldENvbnRlbnRHZW5lcmF0b3IoKSBpbnN0YW5jZW9mIFNPQVBDb250ZW50R2VuZXJhdG9yKSB7Ci0JCSAgU09BUENvbnRlbnRHZW5lcmF0b3Igc29hcEdlbmVyYXRvciA9IChTT0FQQ29udGVudEdlbmVyYXRvcikgZ2VuZXJhdG9yLmdldENvbnRlbnRHZW5lcmF0b3IoKTsKLQkJICBpZiAoZG9jTGl0ZXJhbC5nZXRTZWxlY3Rpb24oKSkgewotCQkJICBzb2FwR2VuZXJhdG9yLnNldFN0eWxlKFNPQVBDb250ZW50R2VuZXJhdG9yLlNUWUxFX0RPQ1VNRU5UKTsKLQkJCSAgc29hcEdlbmVyYXRvci5zZXRVc2UoU09BUENvbnRlbnRHZW5lcmF0b3IuVVNFX0xJVEVSQUwpOwotCQkgIH0JICAKLQkJICBlbHNlIGlmIChycGNMaXRlcmFsLmdldFNlbGVjdGlvbigpKSB7Ci0JCQkgIHNvYXBHZW5lcmF0b3Iuc2V0U3R5bGUoU09BUENvbnRlbnRHZW5lcmF0b3IuU1RZTEVfUlBDKTsKLQkJCSAgc29hcEdlbmVyYXRvci5zZXRVc2UoU09BUENvbnRlbnRHZW5lcmF0b3IuVVNFX0xJVEVSQUwpOwotCQkgIH0KLQkJICBlbHNlIGlmIChycGNFbmNvZGVkLmdldFNlbGVjdGlvbigpKSB7Ci0JCQkgIHNvYXBHZW5lcmF0b3Iuc2V0U3R5bGUoU09BUENvbnRlbnRHZW5lcmF0b3IuU1RZTEVfUlBDKTsKLQkJCSAgc29hcEdlbmVyYXRvci5zZXRVc2UoU09BUENvbnRlbnRHZW5lcmF0b3IuVVNFX0VOQ09ERUQpOwotCQkgIH0KLQkgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0T3B0aW9uc09uR2VuZXJhdG9yKCkgewotCSAgY29tcHV0ZU9wdGlvbnMoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkKLSAgewotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3dpemFyZHMvV1NETE5ld0ZpbGVPcHRpb25zUGFnZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC93aXphcmRzL1dTRExOZXdGaWxlT3B0aW9uc1BhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDhmMzdlMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qtd3NkbDExL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3dpemFyZHMvV1NETE5ld0ZpbGVPcHRpb25zUGFnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjkwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC53aXphcmRzOwotCi1pbXBvcnQgamF2YS5uZXQuVVJJOwotaW1wb3J0IGphdmEubmV0LlVSSVN5bnRheEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaW5rOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LlBhZ2VCb29rOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V1NJQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JDU0hlbHBJZHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5WYWxpZGF0ZUhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLnV0aWwuTmFtZXNwYWNlSW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLmRpYWxvZ3MuVXBkYXRlTGlzdGVuZXI7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMTmV3RmlsZU9wdGlvbnNQYWdlIGV4dGVuZHMgV2l6YXJkUGFnZSBpbXBsZW1lbnRzIE1vZGlmeUxpc3RlbmVyLCBVcGRhdGVMaXN0ZW5lciwgU2VsZWN0aW9uTGlzdGVuZXIKLXsKLSAgcHJvdGVjdGVkIFRleHQgdGFyZ2V0TmFtZXNwYWNlVGV4dDsKLSAgcHJvdGVjdGVkIFRleHQgcHJlZml4VGV4dDsKLSAgcHJvdGVjdGVkIGJvb2xlYW4gdXBkYXRlUG9ydE9wRmllbGRCb29sZWFuID0gdHJ1ZTsKLSAgCi0gIHByb3RlY3RlZCBQYWdlQm9vayBwcm90b2NvbFBhZ2VCb29rOwotICBwcm90ZWN0ZWQgQ29tYm8gcHJvdG9jb2xDb21ibzsKLSAgcHJvdGVjdGVkIENvbXBvc2l0ZSBzb2FwUGFnZTsKLSAgcHJvdGVjdGVkIENvbXBvc2l0ZSBodHRwUGFnZTsKLSAgcHJvdGVjdGVkIEJ1dHRvbiBkb2NMaXRSYWRpbzsKLSAgcHJvdGVjdGVkIEJ1dHRvbiBycGNMaXRSYWRpbzsKLSAgcHJvdGVjdGVkIEJ1dHRvbiBycGNFbmNSYWRpbzsKLSAgcHJvdGVjdGVkIEJ1dHRvbiBodHRwR2V0UmFkaW87Ci0gIHByb3RlY3RlZCBCdXR0b24gaHR0cFBvc3RSYWRpbzsKLSAgcHJvdGVjdGVkIExpbmsgV1NJUHJlZmVyZW5jZUxpbms7Ci0gIAotLy8gIHByaXZhdGUgQmluZGluZ0dlbmVyYXRvciBnZW5lcmF0b3I7Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBXU0RMTmV3RmlsZU9wdGlvbnNQYWdlLgotICAgKiBAcGFyYW0gcGFnZU5hbWUKLSAgICovCi0gIHB1YmxpYyBXU0RMTmV3RmlsZU9wdGlvbnNQYWdlKFN0cmluZyBwYWdlTmFtZSkKLSAgewotICAgIHN1cGVyKHBhZ2VOYW1lKTsKLSAgfQotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIFdTRExOZXdGaWxlT3B0aW9uc1BhZ2UuCi0gICAqIEBwYXJhbSBwYWdlTmFtZQotICAgKiBAcGFyYW0gdGl0bGUKLSAgICogQHBhcmFtIHRpdGxlSW1hZ2UKLSAgICovCi0gIHB1YmxpYyBXU0RMTmV3RmlsZU9wdGlvbnNQYWdlKFN0cmluZyBwYWdlTmFtZSwgU3RyaW5nIHRpdGxlLCBJbWFnZURlc2NyaXB0b3IgdGl0bGVJbWFnZSkKLSAgewotICAgIHN1cGVyKHBhZ2VOYW1lLCB0aXRsZSwgdGl0bGVJbWFnZSk7Ci0gICAgc2V0RGVzY3JpcHRpb24oTWVzc2FnZXMuX1VJX0RFU0NSSVBUSU9OX05FV19XU0RMX0ZJTEUpOwotICB9Ci0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ1BhZ2UjY3JlYXRlQ29udHJvbChDb21wb3NpdGUpCi0gICAqLwotICBwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpCi0gIHsKLSAgICBDb21wb3NpdGUgYmFzZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7Ci0gICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChiYXNlLCBNZXNzYWdlcy5fVUlfSEVMUCk7IC8vJE5PTi1OTFMtMSQKLSAgICBiYXNlLnNldExheW91dChuZXcgR3JpZExheW91dCgpKTsKLQotICAgIC8vICBHcm91cCB3c2RsR3JvdXAgPSBWaWV3VXRpbGl0eS5jcmVhdGVHcm91cChiYXNlLCAyLCAiV1NETCIsIGZhbHNlKTsKLSAgICBDb21wb3NpdGUgd3NkbEdyb3VwID0gbmV3IENvbXBvc2l0ZShiYXNlLCBTV1QuTk9ORSk7Ci0gICAgR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGxheW91dC5udW1Db2x1bW5zID0gMjsKLSAgICB3c2RsR3JvdXAuc2V0TGF5b3V0KGxheW91dCk7Ci0KLSAgICBHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZGF0YS52ZXJ0aWNhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICB3c2RsR3JvdXAuc2V0TGF5b3V0RGF0YShkYXRhKTsKLSAgICAKLSAgICBHcmlkRGF0YSBnZCA9IChHcmlkRGF0YSl3c2RsR3JvdXAuZ2V0TGF5b3V0RGF0YSgpOwotICAgIGdkLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOwotCi0gICAgTGFiZWwgdGFyZ2V0TmFtZXNwYWNlID0gbmV3IExhYmVsKHdzZGxHcm91cCwgU1dULkxFRlQpOwotICAgIHRhcmdldE5hbWVzcGFjZS5zZXRUZXh0KE1lc3NhZ2VzLl9VSV9MQUJFTF9UQVJHRVRfTkFNRVNQQUNFKTsKLSAgICBHcmlkRGF0YSBuc0RhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICBuc0RhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgdGFyZ2V0TmFtZXNwYWNlLnNldExheW91dERhdGEobnNEYXRhKTsKLSAgICAKLSAgICB0YXJnZXROYW1lc3BhY2VUZXh0ID0gbmV3IFRleHQod3NkbEdyb3VwLCBTV1QuU0lOR0xFIHwgU1dULkJPUkRFUik7Ci0gICAgR3JpZERhdGEgdGV4dERhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICB0ZXh0RGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICB0ZXh0RGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKLSAgICB0ZXh0RGF0YS53aWR0aEhpbnQgPSAxMDsKLSAgICB0YXJnZXROYW1lc3BhY2VUZXh0LnNldExheW91dERhdGEodGV4dERhdGEpOwotICAgIAotICAgIHRhcmdldE5hbWVzcGFjZVRleHQuYWRkTW9kaWZ5TGlzdGVuZXIodGhpcyk7Ci0gICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscCh0YXJnZXROYW1lc3BhY2VUZXh0LCBBU0RFZGl0b3JDU0hlbHBJZHMuV1NETF9XSVpBUkRfT1BUSU9OU19QQUdFX1ROU19URVhUKTsKLQotICAgIExhYmVsIHByZWZpeCA9IG5ldyBMYWJlbCh3c2RsR3JvdXAsIFNXVC5MRUZUKTsKLSAgICBwcmVmaXguc2V0VGV4dChNZXNzYWdlcy5fVUlfTEFCRUxfUFJFRklYX1dJVEhfQ09MT04pOwotCi0gICAgR3JpZERhdGEgcHJlZml4RGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgIHByZWZpeERhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgcHJlZml4LnNldExheW91dERhdGEocHJlZml4RGF0YSk7Ci0gICAgCi0gICAgcHJlZml4VGV4dCA9IG5ldyBUZXh0KHdzZGxHcm91cCwgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIpOwotICAgIEdyaWREYXRhIHByZWZpeFRleHREYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgcHJlZml4VGV4dERhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgcHJlZml4VGV4dERhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7Ci0gICAgcHJlZml4VGV4dERhdGEud2lkdGhIaW50ID0gMTA7Ci0gICAgcHJlZml4VGV4dC5zZXRMYXlvdXREYXRhKHByZWZpeFRleHREYXRhKTsKLQotICAgIHByZWZpeFRleHQuYWRkTW9kaWZ5TGlzdGVuZXIodGhpcyk7Ci0gICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChwcmVmaXhUZXh0LCBBU0RFZGl0b3JDU0hlbHBJZHMuV1NETF9XSVpBUkRfT1BUSU9OU19QQUdFX1BSRUZJWF9URVhUKTsKLSAgICAKLSAgICAvLyAgICBYTUxDYXRhbG9nIHhtbENhdGFsb2cgPSBYTUxDYXRhbG9nUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKS5sb29rdXBPckNyZWF0ZVhNTENhdGFsb2coImRlZmF1bHQiKTsKLSAgICAvLyAgICBTZWxlY3RYTUxDYXRhbG9nSWRQYW5lbCBjYXRhbG9nID0gbmV3IFNlbGVjdFhNTENhdGFsb2dJZFBhbmVsKGJhc2UsIHhtbENhdGFsb2cpOwotCi0vLyAgRGV0ZXJtaW5lIGlmIHRoZSB1c2VyIHdpc2hlcyB0byBjcmVhdGUgYSBza2VsZXRvbiBXU0RMLiAgSWYgeWVzLCBwcmVzZW50IHRoZSB1c2VyIHdpdGggaW5wdXQgZmllbGRzLgotICAgIGNyZWF0ZVNrZWxldG9uQ2hlY2tCb3ggPSBuZXcgQnV0dG9uKGJhc2UsIFNXVC5DSEVDSyk7Ci0gICAgY3JlYXRlU2tlbGV0b25DaGVja0JveC5zZXRUZXh0KE1lc3NhZ2VzLl9VSV9MQUJFTF9DUkVBVEVfV1NETF9TS0VMRVRPTik7Ci0gICAgY3JlYXRlU2tlbGV0b25DaGVja0JveC5zZXRTZWxlY3Rpb24odHJ1ZSk7Ci0gICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChjcmVhdGVTa2VsZXRvbkNoZWNrQm94LCBBU0RFZGl0b3JDU0hlbHBJZHMuV1NETF9XSVpBUkRfT1BUSU9OU19QQUdFX0NSRUFURV9TS0VMRVRPTl9DSEVDS0JPWCk7Ci0gICAgCi0gICAgd3NkbFNrZWxldG9uR3JvdXAgPSBuZXcgQ29tcG9zaXRlKGJhc2UsIFNXVC5OT05FKTsKLSAgICBHcmlkTGF5b3V0IGxheW91dDIgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGxheW91dDIubnVtQ29sdW1ucyA9IDI7Ci0gICAgd3NkbFNrZWxldG9uR3JvdXAuc2V0TGF5b3V0KGxheW91dDIpOwotCi0gICAgR3JpZERhdGEgZGF0YTIgPSBuZXcgR3JpZERhdGEoKTsKLSAgICBkYXRhMi52ZXJ0aWNhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgZGF0YTIuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgd3NkbFNrZWxldG9uR3JvdXAuc2V0TGF5b3V0RGF0YShkYXRhMik7Ci0KLSAgIGNyZWF0ZUxhYmVsKHdzZGxTa2VsZXRvbkdyb3VwLCBNZXNzYWdlcy5fVUlfTEFCRUxfQklORElOR19QUk9UT0NPTCk7Ci0gICBwcm90b2NvbENvbWJvID0gbmV3IENvbWJvKHdzZGxTa2VsZXRvbkdyb3VwLCBTV1QuUkVBRF9PTkxZKTsKLSAgIEdyaWREYXRhIGRhdGFDID0gbmV3IEdyaWREYXRhKCk7Ci0gICBkYXRhQy5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgIGRhdGFDLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOwotICAgcHJvdG9jb2xDb21iby5zZXRMYXlvdXREYXRhKGRhdGFDKTsKLSAgIHByb3RvY29sQ29tYm8uYWRkKFNPQVBfUFJPVE9DT0wpOwotICAgcHJvdG9jb2xDb21iby5hZGQoSFRUUF9QUk9UT0NPTCk7Ci0gICBwcm90b2NvbENvbWJvLnNlbGVjdCgwKTsKLSAgIHByb3RvY29sQ29tYm8uYWRkTW9kaWZ5TGlzdGVuZXIodGhpcyk7Ci0gICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHByb3RvY29sQ29tYm8sIEFTREVkaXRvckNTSGVscElkcy5XU0RMX1dJWkFSRF9PUFRJT05TX1BBR0VfUFJPVE9DT0xfQ09NQk8pOwotCi0gICBzZXBMYWJlbCA9IG5ldyBMYWJlbChiYXNlLCBTV1QuU0VQQVJBVE9SIHwgU1dULkhPUklaT05UQUwpOwotICAgR3JpZERhdGEgc2VwRGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgc2VwRGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgIHNlcERhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7Ci0gICBzZXBMYWJlbC5zZXRMYXlvdXREYXRhKHNlcERhdGEpOwotICAgCi0gICAKLSAgIC8vIENyZWF0ZSBQYWdlQm9vayBhbmQgcGFnZXMvY29udHJvbHMgZm9yIHRoZSBQYWdlQm9vawotICAgcHJvdG9jb2xQYWdlQm9vayA9IG5ldyBQYWdlQm9vayhiYXNlLCBTV1QuTk9ORSk7Ci0KLSAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gU29hcCBQYWdlCi0gICBzb2FwUGFnZSA9IG5ldyBDb21wb3NpdGUocHJvdG9jb2xQYWdlQm9vaywgU1dULk5PTkUpOwotICAgR3JpZExheW91dCBwYkxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICBzb2FwUGFnZS5zZXRMYXlvdXQocGJMYXlvdXQpOwotCi0gICBHcmlkRGF0YSBwYkRhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgIHBiRGF0YS52ZXJ0aWNhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICBwYkRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICBzb2FwUGFnZS5zZXRMYXlvdXREYXRhKHBiRGF0YSk7Ci0KLSAgIGNyZWF0ZUxhYmVsKHNvYXBQYWdlLCBNZXNzYWdlcy5fVUlfTEFCRUxfU09BUF9CSU5ESU5HX09QVElPTlMpOwotICAgZG9jTGl0UmFkaW8gPSBuZXcgQnV0dG9uKHNvYXBQYWdlLCBTV1QuUkFESU8pOwotICAgcnBjTGl0UmFkaW8gPSBuZXcgQnV0dG9uKHNvYXBQYWdlLCBTV1QuUkFESU8pOwotICAgcnBjRW5jUmFkaW8gPSBuZXcgQnV0dG9uKHNvYXBQYWdlLCBTV1QuUkFESU8pOwotICAgZG9jTGl0UmFkaW8uc2V0VGV4dChTT0FQX0RPQ1VNRU5UX0xJVEVSQUwpOwotICAgcnBjTGl0UmFkaW8uc2V0VGV4dChTT0FQX1JQQ19MSVRFUkFMKTsKLSAgIHJwY0VuY1JhZGlvLnNldFRleHQoU09BUF9SUENfRU5DT0RFRCk7Ci0gICBkb2NMaXRSYWRpby5zZXRTZWxlY3Rpb24odHJ1ZSk7Ci0gICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKGRvY0xpdFJhZGlvLCBBU0RFZGl0b3JDU0hlbHBJZHMuRE9DX0xJVF9SQURJTyk7Ci0gICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHJwY0xpdFJhZGlvLCBBU0RFZGl0b3JDU0hlbHBJZHMuUlBDX0xJVF9SQURJTyk7Ci0gICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHJwY0VuY1JhZGlvLCBBU0RFZGl0b3JDU0hlbHBJZHMuUlBDX0VOQ09ERURfUkFESU8pOwotICAgCi0gICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIEh0dHAgUGFnZQotICAgaHR0cFBhZ2UgPSBuZXcgQ29tcG9zaXRlKHByb3RvY29sUGFnZUJvb2ssIFNXVC5OT05FKTsKLSAgIHBiTGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgIGh0dHBQYWdlLnNldExheW91dChwYkxheW91dCk7Ci0KLSAgIHBiRGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgcGJEYXRhLnZlcnRpY2FsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgIHBiRGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgIGh0dHBQYWdlLnNldExheW91dERhdGEocGJEYXRhKTsKLSAgIAotICAgY3JlYXRlTGFiZWwoaHR0cFBhZ2UsIE1lc3NhZ2VzLl9VSV9MQUJFTF9IVFRQX0JJTkRJTkdfT1BUSU9OUyk7Ci0gICBodHRwR2V0UmFkaW8gPSBuZXcgQnV0dG9uKGh0dHBQYWdlLCBTV1QuUkFESU8pOwotICAgaHR0cFBvc3RSYWRpbyA9IG5ldyBCdXR0b24oaHR0cFBhZ2UsIFNXVC5SQURJTyk7Ci0gICBodHRwR2V0UmFkaW8uc2V0VGV4dChIVFRQX0dFVCk7Ci0gICBodHRwUG9zdFJhZGlvLnNldFRleHQoSFRUUF9QT1NUKTsKLSAgIGh0dHBHZXRSYWRpby5zZXRTZWxlY3Rpb24odHJ1ZSk7Ci0gICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKGh0dHBHZXRSYWRpbywgQVNERWRpdG9yQ1NIZWxwSWRzLkhUVFBfR0VUX1JBRElPKTsKLSAgIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoaHR0cFBvc3RSYWRpbywgQVNERWRpdG9yQ1NIZWxwSWRzLkhUVFBfUE9TVF9SQURJTyk7Ci0gICAKLSAgIHdzZGxTa2VsZXRvbkdyb3VwLnNldFZpc2libGUodHJ1ZSk7Ci0gICBzZXBMYWJlbC5zZXRWaXNpYmxlKHRydWUpOwotICAgcHJvdG9jb2xQYWdlQm9vay5zaG93UGFnZShzb2FwUGFnZSk7Ci0gICBwcm90b2NvbFBhZ2VCb29rLnNldFZpc2libGUodHJ1ZSk7Ci0gICAKLSAgIFdTSVByZWZlcmVuY2VMaW5rID0gbmV3IExpbmsoYmFzZSwgU1dULk5PTkUpOwotICAgV1NJUHJlZmVyZW5jZUxpbmsuc2V0VGV4dCgiPEE+IiArIE1lc3NhZ2VzLl9XU0lfQ09NUExJQU5DRV9MSU5LX1RFWFQgKyAiPC9BPiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgIFdTSVByZWZlcmVuY2VMaW5rLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgewotCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JCQlnZXROZXdXU0RMV2l6YXJkKCkub3BlblByb2plY3RXU0lQcm9wZXJ0aWVzKCk7Ci0JCQlzZXRQYWdlQ29tcGxldGUoaXNQYWdlQ29tcGxldGUoKSk7Ci0JCX0KLQl9KTsKLSAgIAotICAgV1NJUHJlZmVyZW5jZUxpbmsuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuR1JBQl9WRVJUSUNBTCB8IEdyaWREYXRhLlZFUlRJQ0FMX0FMSUdOX0VORCkpOwotICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gQWRkIFNlbGVjdGlvbiBMaXN0ZW5lcnMKLSAgIGNyZWF0ZVNrZWxldG9uQ2hlY2tCb3guYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0gICAKLQotICAgcnBjRW5jUmFkaW8uYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0gICAKLSAgIAotLy8gICBCaW5kaW5nUHJvdG9jb2xDb21wb25lbnRDb250cm9sIGNvbXBvbmVudCA9IG5ldyBCaW5kaW5nUHJvdG9jb2xDb21wb25lbnRDb250cm9sKGJhc2UsIGdlbmVyYXRvciwgZmFsc2UpOwotLy8gICBjb21wb25lbnQuaW5pdEZpZWxkcygpOwotICAgCi0gICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKGJhc2UsIEFTREVkaXRvckNTSGVscElkcy5XU0RMX1dJWkFSRF9PUFRJT05TX1BBR0UpOwotCi0gICAgc2V0Q29udHJvbChiYXNlKTsKLSAgICAKLSAgfQotCi0gIHByaXZhdGUgTmV3V1NETFdpemFyZCBnZXROZXdXU0RMV2l6YXJkKCkKLSAgewotICAgIHJldHVybiAoTmV3V1NETFdpemFyZClnZXRXaXphcmQoKTsKLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIGNvbXB1dGVEZWZhdWx0RGVmaW5pdGlvbk5hbWUoKQotICB7Ci0gICAgU3RyaW5nIG5hbWUgPSAiRGVmYXVsdE5hbWUiOyAvLyROT04tTkxTLTEkCi0gICAgSVBhdGggcGF0aCA9IGdldE5ld1dTRExXaXphcmQoKS5nZXROZXdGaWxlUGF0aCgpOwotICAgIGlmIChwYXRoICE9IG51bGwpCi0gICAgewotICAgICAgbmFtZSA9IHBhdGgucmVtb3ZlRmlsZUV4dGVuc2lvbigpLmxhc3RTZWdtZW50KCkudG9TdHJpbmcoKTsKLSAgICB9Ci0gICAgcmV0dXJuIG5hbWU7Ci0gIH0KLQotICBwcml2YXRlIFN0cmluZyBjb21wdXRlRGVmYXVsdE5hbWVzcGFjZU5hbWUoKQotICB7Ci0gICAgU3RyaW5nIG5hbWVzcGFjZSA9IFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5nZXRTdHJpbmcoTWVzc2FnZXMuX1VJX1BSRUZfUEFHRV9ERUZBVUxUX1RBUkdFVF9OQU1FU1BBQ0UpOwotICAgIGlmICghbmFtZXNwYWNlLmVuZHNXaXRoKCIvIikpIHsgLy8kTk9OLU5MUy0xJAotICAgIAluYW1lc3BhY2UgPSBuYW1lc3BhY2UuY29uY2F0KCIvIik7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgCi0gICAgSVBhdGggcGF0aCA9IGdldE5ld1dTRExXaXphcmQoKS5nZXROZXdGaWxlUGF0aCgpOwotICAgIGlmIChwYXRoICE9IG51bGwpCi0gICAgewotICAgICAgbmFtZXNwYWNlICs9IHBhdGgucmVtb3ZlRmlsZUV4dGVuc2lvbigpLnRvU3RyaW5nKCkgKyAiLyI7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgcmV0dXJuIG5hbWVzcGFjZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFZpc2libGUoYm9vbGVhbiB2aXNpYmxlKQotICB7Ci0gICAgc3VwZXIuc2V0VmlzaWJsZSh2aXNpYmxlKTsKLQotICAgIGlmICh2aXNpYmxlKQotICAgIHsKLSAgICAgIC8vIHByaW1lIHRoZSBmaWVsZHMgICAgCi0gICAgICB0YXJnZXROYW1lc3BhY2VUZXh0LnNldFRleHQoY29tcHV0ZURlZmF1bHROYW1lc3BhY2VOYW1lKCkpOwotICAgICAgcHJlZml4VGV4dC5zZXRUZXh0KCJ0bnMiKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VGFyZ2V0TmFtZXNwYWNlKCkKLSAgewotICAgIHJldHVybiB0YXJnZXROYW1lc3BhY2VUZXh0LmdldFRleHQoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UHJlZml4KCkKLSAgewotICAgIHJldHVybiBwcmVmaXhUZXh0LmdldFRleHQoKS50cmltKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldERlZmluaXRpb25OYW1lKCkKLSAgewotICAJcmV0dXJuIGNvbXB1dGVEZWZhdWx0RGVmaW5pdGlvbk5hbWUoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkKLSAgewotCi0gICAgaWYgKGUud2lkZ2V0ID09IHRhcmdldE5hbWVzcGFjZVRleHQpCi0gICAgewotICAgICAgc3RhcnREZWxheWVkRXZlbnQoZSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGUud2lkZ2V0ID09IHByZWZpeFRleHQpCi0gICAgewotICAgICAgc2V0UGFnZUNvbXBsZXRlKGlzUGFnZUNvbXBsZXRlKCkpOwotICAgIH0KLQllbHNlIGlmIChlLndpZGdldCA9PSBwcm90b2NvbENvbWJvKSB7Ci0JCS8vIFVwZGF0ZSB3aGF0IHBhZ2UvY29udHJvbCB3ZSBzaG93IGluIHRoZSBQYWdlQm9vawotCQlpZiAocHJvdG9jb2xDb21iby5nZXRUZXh0KCkuZXF1YWxzKCJTT0FQIikpIHsgLy8kTk9OLU5MUy0xJAotCQkJcHJvdG9jb2xQYWdlQm9vay5zaG93UGFnZShzb2FwUGFnZSk7Ci0JCX0KLQkJZWxzZSBpZiAocHJvdG9jb2xDb21iby5nZXRUZXh0KCkuZXF1YWxzKCJIVFRQIikpIHsgLy8kTk9OLU5MUy0xJAotCQkJcHJvdG9jb2xQYWdlQm9vay5zaG93UGFnZShodHRwUGFnZSk7Ci0JCX0KLQkJc2V0UGFnZUNvbXBsZXRlKGlzUGFnZUNvbXBsZXRlKCkpOwotCX0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHVwZGF0ZU9jY3VyZWQoT2JqZWN0IGFyZzEsIE9iamVjdCBhcmcyKQotICB7Ci0gICAgc2V0UGFnZUNvbXBsZXRlKGlzUGFnZUNvbXBsZXRlKCkpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNQYWdlQ29tcGxldGUoKQotICB7Ci0gICAgYm9vbGVhbiByZWFkeSA9IHRydWU7Ci0KLSAgICBzZXRFcnJvck1lc3NhZ2UobnVsbCk7Ci0gICAgc2V0TWVzc2FnZShudWxsKTsKLQotICAgIC8vdGhpcy5zZXRNZXNzYWdlKE1lc3NhZ2VzLmdldFN0cmluZygiX1VJX0RFU0NSSVBUSU9OX05FV19XU0RMX0ZJTEUiKSx0aGlzLk5PTkUpOyAgLy8kTk9OLU5MUy0xJAotCi0gICAgLy8gc28gdGhhdCB0aGUgcGFnZSBkb2Vzbid0IGltbWVkaWF0ZWx5IHNob3cgdXAgd2l0aCBhbiBlcnJvcgotICAgIGlmICh0YXJnZXROYW1lc3BhY2VUZXh0LmdldFRleHQoKS50cmltKCkuZXF1YWxzKCIiKSkgLy8kTk9OLU5MUy0xJAotICAgIHsKLSAgICAgIGlmIChyZWFkeSkKLSAgICAgIHsKLSAgICAgICAgc2V0RXJyb3JNZXNzYWdlKG51bGwpOwotICAgICAgfQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghdmFsaWRhdGVUYXJnZXROYW1lc3BhY2UodGFyZ2V0TmFtZXNwYWNlVGV4dC5nZXRUZXh0KCkpKQotICAgIHsKLSAgICAgIHJlYWR5ID0gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIGlmIChjcmVhdGVTa2VsZXRvbkNoZWNrQm94LmdldFNlbGVjdGlvbigpKSB7Ci0KLSAgICAgICAgaWYgKCF2YWxpZGF0ZVdTSUNvbXBsaWFuY2UoKSkgewotICAgICAgICAJCi0gICAgICAgIAlyZWFkeSA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgewotICAgIAl0aGlzLnNldE1lc3NhZ2UoTWVzc2FnZXMuX1VJX0RFU0NSSVBUSU9OX05FV19XU0RMX0ZJTEUsIE5PTkUpOwotICAgIH0KLSAKLSAgICByZXR1cm4gcmVhZHk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZVdTSUNvbXBsaWFuY2UoKSB7Ci0JICBTdHJpbmcgV1NJQ29tcGxpYW5jZSA9IGdldE5ld1dTRExXaXphcmQoKS5nZXRXU0lQcmVmZXJlbmNlcygpOwotICAKLQkgIGlmICghKHByb3RvY29sQ29tYm8uZ2V0VGV4dCgpLmVxdWFscygiU09BUCIpKSkgeyAvLyROT04tTkxTLTEkCi0JCSAgaWYgKFdTSUNvbXBsaWFuY2UuZXF1YWxzKFBlcnNpc3RlbnRXU0lDb250ZXh0LlNUT1BfTk9OX1dTSSkpIHsKLQkJCSAgdGhpcy5zZXRFcnJvck1lc3NhZ2UoTWVzc2FnZXMuX0VSUk9SX1dTSV9DT01QTElBTkNFX1NPQVBfUFJPVE9DT0wpOwotCQkJICByZXR1cm4gZmFsc2U7Ci0JCSAgfSBlbHNlIGlmIChXU0lDb21wbGlhbmNlLmVxdWFscyhQZXJzaXN0ZW50V1NJQ29udGV4dC5XQVJOX05PTl9XU0kpKSB7Ci0JCQkgIHRoaXMuc2V0TWVzc2FnZShNZXNzYWdlcy5fV0FSTl9XU0lfQ09NUExJQU5DRV9TT0FQX1BST1RPQ09MLCBXQVJOSU5HKTsKLQkJCSAgcmV0dXJuIHRydWU7Ci0JCSAgfQotCSAgfSBlbHNlIGlmIChycGNFbmNSYWRpby5nZXRTZWxlY3Rpb24oKSkgewotCQkgIGlmIChXU0lDb21wbGlhbmNlLmVxdWFscyhQZXJzaXN0ZW50V1NJQ29udGV4dC5TVE9QX05PTl9XU0kpKSB7Ci0JCQkgIHRoaXMuc2V0RXJyb3JNZXNzYWdlKE1lc3NhZ2VzLl9FUlJPUl9XU0lfQ09NUExJQU5DRV9SUENfRU5DT0RJTkcpOwotCQkJICByZXR1cm4gZmFsc2U7Ci0JCSAgfSBlbHNlIGlmIChXU0lDb21wbGlhbmNlLmVxdWFscyhQZXJzaXN0ZW50V1NJQ29udGV4dC5XQVJOX05PTl9XU0kpKSB7Ci0JCQkgIHRoaXMuc2V0TWVzc2FnZShNZXNzYWdlcy5fV0FSTl9XU0lfQ09NUExJQU5DRV9SUENfRU5DT0RJTkcsIFdBUk5JTkcpOwotCQkJICByZXR1cm4gdHJ1ZTsKLQkJICB9Ci0JICB9IGVsc2UgewotCQkgIHRoaXMuc2V0TWVzc2FnZShNZXNzYWdlcy5fVUlfREVTQ1JJUFRJT05fTkVXX1dTRExfRklMRSwgTk9ORSk7Ci0JICB9Ci0KLQkgIHJldHVybiB0cnVlOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZVByZWZpeChTdHJpbmcgcHJlZml4KQotICB7Ci0gICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFZhbGlkYXRlSGVscGVyLmNoZWNrWE1MUHJlZml4KHByZWZpeCk7Ci0KLSAgICBpZiAoZXJyb3JNZXNzYWdlID09IG51bGwgfHwgZXJyb3JNZXNzYWdlLmxlbmd0aCgpID09IDApCi0gICAgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlWE1MTmFtZShTdHJpbmcgeG1sTmFtZSkKLSAgewotICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSBWYWxpZGF0ZUhlbHBlci5jaGVja1hNTE5hbWUoeG1sTmFtZSk7Ci0KLSAgICBpZiAoZXJyb3JNZXNzYWdlID09IG51bGwgfHwgZXJyb3JNZXNzYWdlLmxlbmd0aCgpID09IDApCi0gICAgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHNldEVycm9yTWVzc2FnZShlcnJvck1lc3NhZ2UpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlVGFyZ2V0TmFtZXNwYWNlKFN0cmluZyBucykKLSAgewotICAgIGJvb2xlYW4gdGVzdCA9IHRydWU7Ci0gICAgdHJ5Ci0gICAgewotICAgIAluZXcgVVJJKG5zKTsKLS8vICAgICAgVVJJIHRlc3RVUkkgPSBuZXcgVVJJKG5zKTsKLSAgICAgIC8vICAgICAgaWYgKCF0ZXN0VVJJLmlzR2VuZXJpY1VSSSgpKQotICAgICAgLy8gICAgICB7Ci0gICAgICAvLyAgICAgICAgc2V0RXJyb3JNZXNzYWdlKFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRXU0RMU3RyaW5nKCJfVUlfRVJST1JfTkFNRVNQQUNFX0lOVkFMSUQiKSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIC8vICAgICAgICB0ZXN0ID0gZmFsc2U7Ci0gICAgICAvLyAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKFVSSVN5bnRheEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vCQkJU3RyaW5nIGVycm9yTWVzc2FnZSA9IFZhbGlkYXRlSGVscGVyLmNoZWNrWE1MTmFtZShucyk7Ci0gICAgICAvLwkJCWlmIChlcnJvck1lc3NhZ2UgPT0gbnVsbCB8fCBlcnJvck1lc3NhZ2UubGVuZ3RoKCkgPT0gMCkKLSAgICAgIC8vCQkJewotICAgICAgLy8JCQkJdGVzdCA9IHRydWU7Ci0gICAgICAvLwkJCX0KLSAgICAgIC8vCQkJZWxzZQotICAgICAgLy8JCQl7Ci0gICAgICBzZXRFcnJvck1lc3NhZ2UoTWVzc2FnZXMuX1VJX0VSUk9SX05BTUVTUEFDRV9JTlZBTElEKTsgLy8kTk9OLU5MUy0xJAotICAgICAgdGVzdCA9IGZhbHNlOwotICAgICAgLy8JCQl9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRlc3Q7Ci0gIH0KLQotICAvKgotICBwcml2YXRlIGJvb2xlYW4gYXJlUHJlZml4ZXNVbmlxdWVBbmRWYWxpZCgpCi0gIHsKLSAgICBqYXZhLnV0aWwuTGlzdCBpbmZvTGlzdCA9IG5hbWVzcGFjZUluZm8uZ2V0TmFtZXNwYWNlSW5mb0xpc3QoKTsKLSAgICBqYXZhLnV0aWwuTGlzdCBjaGVja2VkTGlzdCA9IG5hbWVzcGFjZUluZm8uZ2V0TmFtZXNwYWNlQ2hlY2tlZExpc3QoKTsKLQotICAgIFZlY3RvciBwcmVmaXhMaXN0ID0gbmV3IFZlY3RvcigpOwotICAgIGJvb2xlYW4gdGVzdCA9IHRydWU7Ci0gICAgYm9vbGVhbiBpc09uZUJsYW5rID0gZmFsc2U7Ci0KLSAgICBTdHJpbmcgY3VycmVudFByZWZpeCA9IHByZWZpeFRleHQuZ2V0VGV4dCgpLnRyaW0oKTsKLSAgICBpZiAoY3VycmVudFByZWZpeC5sZW5ndGgoKSA9PSAwKQotICAgIHsKLSAgICAgIGlzT25lQmxhbmsgPSB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgaWYgKHZhbGlkYXRlUHJlZml4KGN1cnJlbnRQcmVmaXgpKQotICAgICAgewotICAgICAgICBwcmVmaXhMaXN0LmFkZChjdXJyZW50UHJlZml4KTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgc2V0RXJyb3JNZXNzYWdlKFdTRExFZGl0b3JQbHVnaW4uZ2V0V1NETFN0cmluZygiX1VJX0VSUk9SX1BSRUZJWF9JU19JTlZBTElEIiwgY3VycmVudFByZWZpeCkpOyAvLyROT04tTkxTLTEkCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGluZm9MaXN0LnNpemUoKTsgaSsrKQotICAgIHsKLSAgICAgIE5hbWVzcGFjZUluZm8gaW5mbyA9IChOYW1lc3BhY2VJbmZvKWluZm9MaXN0LmdldChpKTsKLSAgICAgIGlmICgoKFN0cmluZyljaGVja2VkTGlzdC5nZXQoaSkpLmVxdWFscygidHJ1ZSIpKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBhUHJlZml4ID0gaW5mby5wcmVmaXgudHJpbSgpOwotICAgICAgICBpZiAoYVByZWZpeC5sZW5ndGgoKSA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIXByZWZpeExpc3QuY29udGFpbnMoYVByZWZpeCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKHZhbGlkYXRlUHJlZml4KGFQcmVmaXgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBwcmVmaXhMaXN0LmFkZChhUHJlZml4KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgc2V0RXJyb3JNZXNzYWdlKFdTRExFZGl0b3JQbHVnaW4uZ2V0V1NETFN0cmluZygiX1VJX0VSUk9SX1BSRUZJWF9JU19JTlZBTElEIiwgaW5mby5wcmVmaXgpKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgICB0ZXN0ID0gZmFsc2U7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgc2V0RXJyb3JNZXNzYWdlKFdTRExFZGl0b3JQbHVnaW4uZ2V0V1NETFN0cmluZygiX1VJX0VSUk9SX1BSRUZJWF9JU19BX0RVUExJQ0FURSIsIGluZm8ucHJlZml4KSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgIHRlc3QgPSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIWlzT25lQmxhbmspCi0gICAgICAgICAgewotICAgICAgICAgICAgaXNPbmVCbGFuayA9IHRydWU7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBzZXRFcnJvck1lc3NhZ2UoV1NETEVkaXRvclBsdWdpbi5nZXRXU0RMU3RyaW5nKCJfVUlfRVJST1JfTU9SRV9USEFOX09ORV9QUkVGSVhfSVNfQkxBTksiKSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgIHRlc3QgPSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdGVzdDsKLSAgfQotICAqLwotCi0gIHByb3RlY3RlZCBEZWxheWVkRXZlbnQgZGVsYXllZFRhc2s7Ci0gIHByb3RlY3RlZCB2b2lkIHN0YXJ0RGVsYXllZEV2ZW50KE1vZGlmeUV2ZW50IGUpCi0gIHsKLSAgICBpZiAoZGVsYXllZFRhc2sgPT0gbnVsbCB8fCBkZWxheWVkVGFzay5nZXRFdmVudCgpID09IG51bGwpCi0gICAgewotICAgICAgZGVsYXllZFRhc2sgPSBuZXcgRGVsYXllZEV2ZW50KCk7Ci0gICAgICBkZWxheWVkVGFzay5zZXRFdmVudChlKTsKLSAgICAgIERpc3BsYXkuZ2V0RGVmYXVsdCgpLnRpbWVyRXhlYyg1MDAsIGRlbGF5ZWRUYXNrKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIE1vZGlmeUV2ZW50IGRlbGF5ZWRFdmVudCA9IGRlbGF5ZWRUYXNrLmdldEV2ZW50KCk7Ci0KLSAgICAgIGlmIChlLndpZGdldCA9PSBkZWxheWVkRXZlbnQud2lkZ2V0KQotICAgICAgewotICAgICAgICAvLyBzYW1lIGV2ZW50LCBqdXN0IGRpZmZlcmVudCBkYXRhLCBkZWxheSBuZXcgZXZlbnQKLSAgICAgICAgZGVsYXllZFRhc2suc2V0RXZlbnQobnVsbCk7Ci0gICAgICB9Ci0gICAgICBkZWxheWVkVGFzayA9IG5ldyBEZWxheWVkRXZlbnQoKTsKLSAgICAgIGRlbGF5ZWRUYXNrLnNldEV2ZW50KGUpOwotICAgICAgRGlzcGxheS5nZXREZWZhdWx0KCkudGltZXJFeGVjKDUwMCwgZGVsYXllZFRhc2spOwotICAgIH0KLSAgfQotCi0gIGNsYXNzIERlbGF5ZWRFdmVudCBpbXBsZW1lbnRzIFJ1bm5hYmxlCi0gIHsKLSAgICBwcm90ZWN0ZWQgTW9kaWZ5RXZlbnQgZXZlbnQ7Ci0KLSAgICAvKgotICAgICAqIEBzZWUgUnVubmFibGUjcnVuKCkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBydW4oKQotICAgIHsKLSAgICAgIGlmIChldmVudCAhPSBudWxsKQotICAgICAgewotICAgICAgICBzZXRQYWdlQ29tcGxldGUoaXNQYWdlQ29tcGxldGUoKSk7Ci0gICAgICAgIGV2ZW50ID0gbnVsbDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgTW9kaWZ5RXZlbnQgZ2V0RXZlbnQoKQotICAgIHsKLSAgICAgIHJldHVybiBldmVudDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRFdmVudChNb2RpZnlFdmVudCBldmVudCkKLSAgICB7Ci0gICAgICB0aGlzLmV2ZW50ID0gZXZlbnQ7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgewotICAJIGlmIChlLndpZGdldCA9PSBycGNFbmNSYWRpbykgewotICAJCXNldFBhZ2VDb21wbGV0ZShpc1BhZ2VDb21wbGV0ZSgpKTsKLSAgCSB9Ci0JICAKLQkgIGlmIChlLndpZGdldCA9PSBjcmVhdGVTa2VsZXRvbkNoZWNrQm94KSB7Ci0gIAkgCWlmIChjcmVhdGVTa2VsZXRvbkNoZWNrQm94LmdldFNlbGVjdGlvbigpKSB7Ci0gIAkgCQl3c2RsU2tlbGV0b25Hcm91cC5zZXRWaXNpYmxlKHRydWUpOwotICAJIAkJc2VwTGFiZWwuc2V0VmlzaWJsZSh0cnVlKTsKLSAgCSAJCXByb3RvY29sUGFnZUJvb2suc2V0VmlzaWJsZSh0cnVlKTsKLSAgCSAJfQotICAJIAllbHNlIHsKLSAgCSAJCXdzZGxTa2VsZXRvbkdyb3VwLnNldFZpc2libGUoZmFsc2UpOwotICAJIAkJc2VwTGFiZWwuc2V0VmlzaWJsZShmYWxzZSk7Ci0gIAkgCQlwcm90b2NvbFBhZ2VCb29rLnNldFZpc2libGUoZmFsc2UpOwotICAJIAl9Ci0gIAkgCXNldFBhZ2VDb21wbGV0ZShpc1BhZ2VDb21wbGV0ZSgpKTsKLSAgCSB9Ci0gIH0KLSAgCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTT0FQX1BST1RPQ09MID0gIlNPQVAiOyAvLyROT04tTkxTLTEkCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIVFRQX1BST1RPQ09MID0gIkhUVFAiOyAvLyROT04tTkxTLTEkCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTT0FQX1JQQ19FTkNPREVEID0gTWVzc2FnZXMuX1VJX1JBRElPX1JQQ19FTkNPREVEOyAvLyROT04tTkxTLTEkCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTT0FQX1JQQ19MSVRFUkFMID0gTWVzc2FnZXMuX1VJX1JBRElPX1JQQ19MSVRFUkFMOyAvLyROT04tTkxTLTEkCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTT0FQX0RPQ1VNRU5UX0xJVEVSQUwgPSBNZXNzYWdlcy5fVUlfUkFESU9fRE9DVU1FTlRfTElURVJBTDsgLy8kTk9OLU5MUy0xJAotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSFRUUF9QT1NUID0gIkhUVFAgUE9TVCI7IC8vJE5PTi1OTFMtMSQKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhUVFBfR0VUID0gIkhUVFAgR0VUIjsgLy8kTk9OLU5MUy0xJAotCi0gIENvbXBvc2l0ZSB3c2RsU2tlbGV0b25Hcm91cDsKLSAgQnV0dG9uIGNyZWF0ZVNrZWxldG9uQ2hlY2tCb3g7Ci0gIAotICBMYWJlbCBzZXBMYWJlbDsKLSAgCi0gIHByaXZhdGUgTGFiZWwgY3JlYXRlTGFiZWwoQ29tcG9zaXRlIGNvbXAsIFN0cmluZyBsYWJlbFN0cmluZykgewotICAgIExhYmVsIGxhYmVsID0gbmV3IExhYmVsKGNvbXAsIFNXVC5MRUZUKTsKLSAgICBsYWJlbC5zZXRUZXh0KGxhYmVsU3RyaW5nKTsKLSAgICBHcmlkRGF0YSBuc0RhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICBuc0RhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgbGFiZWwuc2V0TGF5b3V0RGF0YShuc0RhdGEpOwotICAgIAotICAgIHJldHVybiBsYWJlbDsKLSAgfQotICAKLSAgcHVibGljIFZlY3RvciBnZXROYW1lc3BhY2VJbmZvKCkgewotCQlWZWN0b3IgbmFtZXNwYWNlcyA9IG5ldyBWZWN0b3IoKTsKLSAgCQkKLSAgCQkvLyBBZGQgRGVmYXVsdCBOYW1lc3BhY2VzCi0JCU5hbWVzcGFjZUluZm8gaW5mbzEgPSBuZXcgTmFtZXNwYWNlSW5mbygpOwotCQlpbmZvMS5wcmVmaXggPSAid3NkbCI7IC8vJE5PTi1OTFMtMSQKLQkJaW5mbzEudXJpID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIjsgLy8kTk9OLU5MUy0xJAotCQluYW1lc3BhY2VzLmFkZEVsZW1lbnQoaW5mbzEpOwotCQkKLQkJTmFtZXNwYWNlSW5mbyBpbmZvOCA9IG5ldyBOYW1lc3BhY2VJbmZvKCk7Ci0JCWluZm84LnByZWZpeCA9ICJ4c2QiOyAvLyROT04tTkxTLTEkCi0JCWluZm84LnVyaSA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI7IC8vJE5PTi1OTFMtMSQKLQkJbmFtZXNwYWNlcy5hZGRFbGVtZW50KGluZm84KTsKLQotCQlyZXR1cm4gbmFtZXNwYWNlczsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZ2V0Q3JlYXRlU2tlbGV0b25Cb29sZWFuKCkgewotICAJcmV0dXJuIGNyZWF0ZVNrZWxldG9uQ2hlY2tCb3guZ2V0U2VsZWN0aW9uKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UHJvdG9jb2woKSB7Ci0gIAlyZXR1cm4gcHJvdG9jb2xDb21iby5nZXRUZXh0KCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBPYmplY3RbXSBnZXRQcm90b2NvbE9wdGlvbnMoKSB7Ci0gIAlPYmplY3QgYm9vbFtdID0gbmV3IEJvb2xlYW5bM107Ci0gIAlpZiAocHJvdG9jb2xDb21iby5nZXRUZXh0KCkuZXF1YWxzKFNPQVBfUFJPVE9DT0wpKSB7Ci0gIAkJaWYgKGRvY0xpdFJhZGlvLmdldFNlbGVjdGlvbigpKSB7Ci0gIAkJCWJvb2xbMF0gPSBuZXcgQm9vbGVhbih0cnVlKTsKLSAgCQl9Ci0gIAkJZWxzZSB7Ci0gIAkJCWJvb2xbMF0gPSBuZXcgQm9vbGVhbihmYWxzZSk7Ci0gIAkJfQotICAJCQotICAJCWlmIChycGNMaXRSYWRpby5nZXRTZWxlY3Rpb24oKSkgewotICAJCQlib29sWzJdID0gbmV3IEJvb2xlYW4odHJ1ZSk7Ci0gIAkJfQotICAJCWVsc2UgewotICAJCQlib29sWzJdID0gbmV3IEJvb2xlYW4oZmFsc2UpOwotICAJCX0KLSAgCX0KLSAgCWVsc2UgaWYgKHByb3RvY29sQ29tYm8uZ2V0VGV4dCgpLmVxdWFscyhIVFRQX1BST1RPQ09MKSl7Ci0gIAkJaWYgKGh0dHBHZXRSYWRpby5nZXRTZWxlY3Rpb24oKSkgewotICAJCQlib29sWzBdID0gbmV3IEJvb2xlYW4oZmFsc2UpOwotICAJCX0KLSAgCQllbHNlIHsKLSAgCQkJYm9vbFswXSA9IG5ldyBCb29sZWFuKHRydWUpOwotICAJCX0KLSAgCX0KLSAgCQotICAJcmV0dXJuIGJvb2w7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGlzU29hcERvY0xpdGVyYWxQcm90b2NvbCgpIHsKLSAgCWlmIChnZXRQcm90b2NvbCgpLmVxdWFscyhTT0FQX1BST1RPQ09MKSAmJiBkb2NMaXRSYWRpby5nZXRTZWxlY3Rpb24oKSkgewotICAJCXJldHVybiB0cnVlOwotICAJfQotICAJZWxzZSB7Ci0gIAkJcmV0dXJuIGZhbHNlOwotICAJfQotICB9Ci0gIH0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC93aXphcmRzL1dTRExOZXdGaWxlUGFnZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC93aXphcmRzL1dTRExOZXdGaWxlUGFnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjVmYjBkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvd2l6YXJkcy9XU0RMTmV3RmlsZVBhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwud2l6YXJkczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklDb250YWluZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLldpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMTmV3RmlsZVBhZ2UgZXh0ZW5kcyBXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlCi17Ci0gIHB1YmxpYyBXU0RMTmV3RmlsZVBhZ2UoSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uKSAKLSAgewotICAgIHN1cGVyKE1lc3NhZ2VzLl9VSV9USVRMRV9ORVdfV1NETF9GSUxFLCBzZWxlY3Rpb24pOyAvLyROT04tTkxTLTEkCi0gICAgc2V0VGl0bGUoTWVzc2FnZXMuX1VJX1RJVExFX05FV19XU0RMX0ZJTEUpOyAvLyROT04tTkxTLTEkCi0gICAgc2V0RGVzY3JpcHRpb24oTWVzc2FnZXMuX1VJX0xBQkVMX0NSRUFURV9ORVdfV1NETF9GSUxFKTsgLy8kTk9OLU5MUy0xJAotICB9Ci0KLSAgcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KSAKLSAgewotICAgIC8vIGluaGVyaXQgZGVmYXVsdCBjb250YWluZXIgYW5kIG5hbWUgc3BlY2lmaWNhdGlvbiB3aWRnZXRzCi0gICAgc3VwZXIuY3JlYXRlQ29udHJvbChwYXJlbnQpOwotICAgIHRoaXMuc2V0RmlsZU5hbWUoY29tcHV0ZURlZmF1bHRGaWxlTmFtZSgpKTsKLQotICAgIHNldFBhZ2VDb21wbGV0ZSh2YWxpZGF0ZVBhZ2UoKSk7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlUGFnZSgpCi0gIHsKLSAgICBQYXRoIG5ld05hbWUgPSBuZXcgUGF0aChnZXRGaWxlTmFtZSgpKTsKLSAgICBTdHJpbmcgZnVsbEZpbGVOYW1lID0gZ2V0RmlsZU5hbWUoKTsKLSAgICBTdHJpbmcgZXh0ZW5zaW9uID0gbmV3TmFtZS5nZXRGaWxlRXh0ZW5zaW9uKCk7Ci0gICAgaWYgKGV4dGVuc2lvbiA9PSBudWxsIHx8ICFleHRlbnNpb24uZXF1YWxzSWdub3JlQ2FzZSgid3NkbCIpKSAgLy8kTk9OLU5MUy0xJAotICAgIHsKLSAgICAgIHNldEVycm9yTWVzc2FnZShNZXNzYWdlcy5fVUlfRVJST1JfRklMRV9NVVNUX0VORF9XSVRIX1dTREwpOyAvLyROT04tTkxTLTEkCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGVsc2UgCi0gICAgewotICAgICAgc2V0RXJyb3JNZXNzYWdlKG51bGwpOwotICAgIH0KLQotICAgIC8vIGNoZWNrIGZvciBmaWxlIHNob3VsZCBiZSBjYXNlIGluc2Vuc2l0aXZlCi0gICAgU3RyaW5nIHNhbWVOYW1lID0gZXhpc3RzRmlsZUFueUNhc2UoZnVsbEZpbGVOYW1lKTsKLSAgICBpZiAoc2FtZU5hbWUgIT0gbnVsbCkgCi0gICAgewotLy8gICAgICAgU3RyaW5nIHF1YWxpZmllZEZpbGVOYW1lID0gZ2V0Q29udGFpbmVyRnVsbFBhdGgoKS50b1N0cmluZygpICsgJy8nICsgZnVsbEZpbGVOYW1lOwotICAgICAgIHNldEVycm9yTWVzc2FnZShOTFMuYmluZChNZXNzYWdlcy5fVUlfRVJST1JfRklMRV9BTFJFQURZX0VYSVNUUywgc2FtZU5hbWUpKTsgLy8kTk9OLU5MUy0xJAotICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAKLSAgICByZXR1cm4gc3VwZXIudmFsaWRhdGVQYWdlKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGRlZmF1bHROYW1lID0gIk5ld1dTRExGaWxlIjsgLy8kTk9OLU5MUy0xJAotICBwdWJsaWMgU3RyaW5nIGRlZmF1bHRGaWxlRXh0ZW5zaW9uID0gIi53c2RsIjsgLy8kTk9OLU5MUy0xJAotICBwdWJsaWMgU3RyaW5nW10gZmlsdGVyRXh0ZW5zaW9ucyA9IHsgIioud3NkbCJ9OyAvLyROT04tTkxTLTEkCi0KLQotICBwcm90ZWN0ZWQgU3RyaW5nIGNvbXB1dGVEZWZhdWx0RmlsZU5hbWUoKQotICB7Ci0gICAgaW50IGNvdW50ID0gMDsKLSAgICBTdHJpbmcgZmlsZU5hbWUgPSBkZWZhdWx0TmFtZSArIGRlZmF1bHRGaWxlRXh0ZW5zaW9uOwotICAgIElQYXRoIGNvbnRhaW5lckZ1bGxQYXRoID0gZ2V0Q29udGFpbmVyRnVsbFBhdGgoKTsKLSAgICBpZiAoY29udGFpbmVyRnVsbFBhdGggIT0gbnVsbCkKLSAgICB7Ci0gICAgICB3aGlsZSAodHJ1ZSkKLSAgICAgIHsKLSAgICAgICAgSVBhdGggcGF0aCA9IGNvbnRhaW5lckZ1bGxQYXRoLmFwcGVuZChmaWxlTmFtZSk7Ci0gICAgICAgIC8vIGlmIChXb3JrYmVuY2hVdGlsaXR5LmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5leGlzdHMocGF0aCkpCi0gICAgICAgIGlmIChSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmV4aXN0cyhwYXRoKSkKLSAgICAgICAgewotICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgZmlsZU5hbWUgPSBkZWZhdWx0TmFtZSArIGNvdW50ICsgZGVmYXVsdEZpbGVFeHRlbnNpb247Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZpbGVOYW1lOwotICB9Ci0KLSAgLy8gcmV0dXJucyB0cnVlIGlmIGZpbGUgb2Ygc3BlY2lmaWVkIG5hbWUgZXhpc3RzIGluIGFueSBjYXNlIGZvciBzZWxlY3RlZCBjb250YWluZXIKLSAgcHJvdGVjdGVkIFN0cmluZyBleGlzdHNGaWxlQW55Q2FzZShTdHJpbmcgZmlsZU5hbWUpCi0gIHsKLSAgICBpZiAoIChnZXRDb250YWluZXJGdWxsUGF0aCgpICE9IG51bGwpICYmIChnZXRDb250YWluZXJGdWxsUGF0aCgpLmlzRW1wdHkoKSA9PSBmYWxzZSkKLSAgICAgICAgICAmJiAoZmlsZU5hbWUuY29tcGFyZVRvKCIiKSAhPSAwKSkgLy8kTk9OLU5MUy0xJAotICAgIHsKLSAgICAgIC8vbG9vayB0aHJvdWdoIGFsbCByZXNvdXJjZXMgYXQgdGhlIHNwZWNpZmllZCBjb250YWluZXIgLSBjb21wYXJlIGluIHVwcGVyIGNhc2UKLSAgICAgIElSZXNvdXJjZSBwYXJlbnQgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmZpbmRNZW1iZXIoZ2V0Q29udGFpbmVyRnVsbFBhdGgoKSk7Ci0gICAgICBpZiAocGFyZW50IGluc3RhbmNlb2YgSUNvbnRhaW5lcikKLSAgICAgIHsKLSAgICAgICAgSUNvbnRhaW5lciBjb250YWluZXIgPSAoSUNvbnRhaW5lcikgcGFyZW50OwotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIElSZXNvdXJjZVtdIG1lbWJlcnMgPSBjb250YWluZXIubWVtYmVycygpOwotICAgICAgICAgIFN0cmluZyBlbnRlcmVkRmlsZVVwcGVyID0gZmlsZU5hbWUudG9VcHBlckNhc2UoKTsKLSAgICAgICAgICBmb3IgKGludCBpPTA7IGk8bWVtYmVycy5sZW5ndGg7IGkrKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgcmVzb3VyY2VVcHBlck5hbWUgPSBtZW1iZXJzW2ldLmdldE5hbWUoKS50b1VwcGVyQ2FzZSgpOwotICAgICAgICAgICAgaWYgKHJlc291cmNlVXBwZXJOYW1lLmVxdWFscyhlbnRlcmVkRmlsZVVwcGVyKSkKLSAgICAgICAgICAgIHsgIAotICAgICAgICAgICAgICByZXR1cm4gbWVtYmVyc1tpXS5nZXROYW1lKCk7ICAgIAotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC94c2QvWFNETm9kZUFzc29jaWF0aW9uUHJvdmlkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC13c2RsMTEvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwveHNkL1hTRE5vZGVBc3NvY2lhdGlvblByb3ZpZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjYjA1OTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkLXdzZGwxMS9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC94c2QvWFNETm9kZUFzc29jaWF0aW9uUHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwueHNkOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5leHRlbnNpb25zLklOb2RlQXNzb2NpYXRpb25Qcm92aWRlcjsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZGFwdGVycy5DYXRlZ29yeUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbmNyZXRlQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi1wdWJsaWMgY2xhc3MgWFNETm9kZUFzc29jaWF0aW9uUHJvdmlkZXIgaW1wbGVtZW50cyBJTm9kZUFzc29jaWF0aW9uUHJvdmlkZXIKLXsgICAgICAgICAgICAgICAgICAgIAotICBwdWJsaWMgT2JqZWN0IGdldE1vZGVsT2JqZWN0KE9iamVjdCBwYXJlbnRNb2RlbE9iamVjdCwgRWxlbWVudFtdIGVsZW1lbnRDaGFpbiwgaW50IHN0YXJ0LCBpbnRbXSBlbmQpCi0gIHsgICAKLSAgICBPYmplY3QgcmVzdWx0ID0gbnVsbDsKLSAgICBpZiAocGFyZW50TW9kZWxPYmplY3QgaW5zdGFuY2VvZiBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCkKLSAgICB7Ci0gICAgICBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXR5RWxlbWVudCA9IChYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudClwYXJlbnRNb2RlbE9iamVjdDsKLSAgICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBleHRlbnNpYmlsaXR5RWxlbWVudC5nZXRTY2hlbWEoKTsKLSAgICAgIGlmIChzY2hlbWEgIT0gbnVsbCkKLSAgICAgIHsgICAgICAgICAgCi0gICAgICAgIEVsZW1lbnQgdGFyZ2V0RWxlbWVudCA9IGVsZW1lbnRDaGFpbltlbGVtZW50Q2hhaW4ubGVuZ3RoIC0gMV07Ci0gICAgICAgIHJlc3VsdCA9IHNjaGVtYS5nZXRDb3JyZXNwb25kaW5nQ29tcG9uZW50KHRhcmdldEVsZW1lbnQpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmIChwYXJlbnRNb2RlbE9iamVjdCBpbnN0YW5jZW9mIENhdGVnb3J5QWRhcHRlcikKLSAgICB7Ci0gICAgICByZXN1bHQgPSAoKENhdGVnb3J5QWRhcHRlcilwYXJlbnRNb2RlbE9iamVjdCkuZ2V0WFNEU2NoZW1hKCk7Ci0gICAgfQotLy8gICAgZWxzZSBpZiAocGFyZW50TW9kZWxPYmplY3QgaW5zdGFuY2VvZiBDYXRlZ29yeSkKLS8vICAgIHsKLS8vICAgICAgcmVzdWx0ID0gKChDYXRlZ29yeSlwYXJlbnRNb2RlbE9iamVjdCkuZ2V0WFNEU2NoZW1hKCk7Ci0vLyAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIE5vZGUgZ2V0Tm9kZShPYmplY3QgbW9kZWxPYmplY3QpCi0gIHsgICAgICAgIAotICAgIE5vZGUgbm9kZSA9IG51bGw7Ci0gICAgaWYgKG1vZGVsT2JqZWN0IGluc3RhbmNlb2YgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi0gICAgeyAgICAgICAgICAgCi0gICAgICBYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXR5RWxlbWVudCA9IChYU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudCltb2RlbE9iamVjdDsKLSAgICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBleHRlbnNpYmlsaXR5RWxlbWVudC5nZXRTY2hlbWEoKTsKLSAgICAgIGlmIChzY2hlbWEgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgbm9kZSA9IHNjaGVtYS5nZXRFbGVtZW50KCk7Ci0gICAgICB9Ci0gICAgfSAgICAgICAgCi0gICAgZWxzZSBpZiAobW9kZWxPYmplY3QgaW5zdGFuY2VvZiBYU0RDb25jcmV0ZUNvbXBvbmVudCkKLSAgICB7Ci0gICAgICBub2RlID0gKChYU0RDb25jcmV0ZUNvbXBvbmVudCltb2RlbE9iamVjdCkuZ2V0RWxlbWVudCgpOwotICAgIH0KLSAgICBlbHNlIGlmIChtb2RlbE9iamVjdCBpbnN0YW5jZW9mIENhdGVnb3J5QWRhcHRlcikKLSAgICB7Ci0gICAgICBub2RlID0gKChDYXRlZ29yeUFkYXB0ZXIpbW9kZWxPYmplY3QpLmdldFhTRFNjaGVtYSgpLmdldEVsZW1lbnQoKTsKLSAgICB9Ci0vLyAgICBlbHNlIGlmIChtb2RlbE9iamVjdCBpbnN0YW5jZW9mIENhdGVnb3J5KQotLy8gICAgewotLy8gICAgICBub2RlID0gKChDYXRlZ29yeSltb2RlbE9iamVjdCkuZ2V0WFNEU2NoZW1hKCkuZ2V0RWxlbWVudCgpOwotLy8gICAgfQotICAgIAotICAgIHJldHVybiBub2RlOwotICB9ICAgICAgCi19IApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9BU0RFZGl0b3JDU0hlbHBJZHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvQVNERWRpdG9yQ1NIZWxwSWRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5MzMwZTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9BU0RFZGl0b3JDU0hlbHBJZHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkOwotCi1wdWJsaWMgY2xhc3MgQVNERWRpdG9yQ1NIZWxwSWRzIHsKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgcGx1Z2luSWQgPSAib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuIjsgLy8kTk9OLU5MUy0xJAotCQotCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCU5ldyBXU0RMIFdpemFyZCAtIE9wdGlvbnMgcGFnZToKLQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMX1dJWkFSRF9PUFRJT05TX1BBR0VfVE5TX1RFWFQgPSBwbHVnaW5JZCArICJ3c2RsdTAwMDAiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9XSVpBUkRfT1BUSU9OU19QQUdFX1BSRUZJWF9URVhUID0gcGx1Z2luSWQgKyAid3NkbHUwMDAxIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfV0laQVJEX09QVElPTlNfUEFHRV9DUkVBVEVfU0tFTEVUT05fQ0hFQ0tCT1ggPSBwbHVnaW5JZCArICJ3c2RsdTAwMDIiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9XSVpBUkRfT1BUSU9OU19QQUdFX1BST1RPQ09MX0NPTUJPID0gcGx1Z2luSWQgKyAid3NkbHUwMDAzIjsgLy8kTk9OLU5MUy0xJAotCi0vLwlTb2FwIEJpbmRpbmcgT3B0aW9ucwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIERPQ19MSVRfUkFESU8gPSBwbHVnaW5JZCArICJ3c2RsdTAwMTAiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgUlBDX0xJVF9SQURJTyA9IHBsdWdpbklkICsgIndzZGx1MDAxMSI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBSUENfRU5DT0RFRF9SQURJTyA9IHBsdWdpbklkICsgIndzZGx1MDAxMiI7IC8vJE5PTi1OTFMtMSQKLQotLy8JSFRUUCBCaW5kaW5nIE9wdGlvbnMKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBIVFRQX0dFVF9SQURJTyA9IHBsdWdpbklkICsgIndzZGx1MDAxMyI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBIVFRQX1BPU1RfUkFESU8gPSBwbHVnaW5JZCArICJ3c2RsdTAwMTQiOyAvLyROT04tTkxTLTEkCi0KLQotCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCVdTREwgRWRpdG9yIC0gRGVzaWduIFZpZXcKLQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMX0RFU0lHTl9WSUVXX1NFUlZJQ0VfT0JKRUNUID0gcGx1Z2luSWQgKyAid3NkbHUwMDIwIjsgICAvLyAgU2VydmljZSBPYmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4gd3NkbHUwMDIwIC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMX0RFU0lHTl9WSUVXX0JJTkRJTkdfT0JKRUNUID0gcGx1Z2luSWQgKyAid3NkbHUwMDIxIjsgICAvLyAgQmluZGluZyBPYmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4gd3NkbHUwMDIxIC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMX0RFU0lHTl9WSUVXX1BPUlRUWVBFX09CSkVDVCA9IHBsdWdpbklkICsgIndzZGx1MDAyMiI7ICAgLy8gIFBvcnRUeXBlIE9iamVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+IHdzZGx1MDAyMiAvLyROT04tTkxTLTEkCi0KLQotCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCVdTREwgRWRpdG9yIC0gT3V0bGluZSBWaWV3Ci0JLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9PVVRMSU5FX1ZJRVdfR1JPVVAgPSBwbHVnaW5JZCArICJ3c2RsdTAwMjMiOyAgIC8vICBJbXBvcnRzLCBUeXBlcywgU2VydmljZXMsIEJpbmRpbmdzLCBQb3J0IFR5cGVzLCBNZXNzYWdlcyAoZ3JvdXBlZCB0b2dldGhlcikgICAgICAgICAgICAgLS0+IHdzZGx1MDAyMyAvLyROT04tTkxTLTEkCi0KLQotCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCVdTREwgRWRpdG9yIC0gUG9ydCBXaXphcmQKLQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQT1JUX1dJWkFSRCA9IHBsdWdpbklkICsgIndzZGx1MDAzMCI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQT1JUX1dJWkFSRF9OQU1FX1RFWFQgPSBwbHVnaW5JZCArICJ3c2RsdTAwMzEiOyAgIC8vICBub3QgdXNlZCAtIGR1cCBiZWxvdyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgUE9SVF9XSVpBUkRfQklORElOR19DT01CTyA9IHBsdWdpbklkICsgIndzZGx1MDAzMiI7ICAgLy8gIG5vdCB1c2VkIC0gZHVwIGJlbG93IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQT1JUX1dJWkFSRF9QUk9UT0NPTF9DT01CTyA9IHBsdWdpbklkICsgIndzZGx1MDAzMyI7ICAgLy8gIG5vdCB1c2VkIC0gZHVwIGJlbG93IC8vJE5PTi1OTFMtMSQKLQotCi0JLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JV1NETCBFZGl0b3IgLSBHZW5lcmF0ZSBCaW5kaW5nIFdpemFyZAotCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJJTkRJTkdfV0laQVJEID0gcGx1Z2luSWQgKyAid3NkbHUwMDQwIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBST1RPQ09MX0NPTVBPTkVOVF9OQU1FX1RFWFQgPSBwbHVnaW5JZCArICJ3c2RsdTAwNDEiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgUFJPVE9DT0xfQ09NUE9ORU5UX1JFRl9DT01CTyA9IHBsdWdpbklkICsgIndzZGx1MDA0MiI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQUk9UT0NPTF9DT01QT05FTlRfUFJPVE9DT0xfQ09NQk8gPSBwbHVnaW5JZCArICJ3c2RsdTAwNDMiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgcFJPVE9DT0xfQ09NUE9ORU5UX09WRVJXUklURV9DSEVDS0JPWCA9IHBsdWdpbklkICsgIndzZGx1MDA0NCI7IC8vJE5PTi1OTFMtMSQKLQotCQotCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCVdTREwgRWRpdG9yIC0gRWRpdCBOYW1lc3BhY2VzIERpYWxvZyAtLS0gY29tbW9uLnVpCi0JLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgRURJVF9OU19ESUFMT0cgPSBwbHVnaW5JZCArICJ3c2RsdTAwNTAiOyAgIC8vICBFZGl0IE5hbWVzcGFjZXMgRGlhbG9nICAgICAgICAgICAgICAgICAgImRpYWxvZyIgICAgICAgIC0tPiB3c2RsdTAwNTAgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEVESVRfTlNfRElBTE9HX1ROU19URVhUID0gcGx1Z2luSWQgKyAid3NkbHUwMDUxIjsgICAvLyAgVGFyZ2V0IE5hbWVzcGFjZSAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXh0IiAgICAgICAgICAtLT4gd3NkbHUwMDUxIC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBFRElUX05TX0RJQUxPR19ERUNMQVJBVElPTlNfVEFCTEUgPSBwbHVnaW5JZCArICJ3c2RsdTAwNTIiOyAgIC8vICBOYW1lc3BhY2UgRGVjbGFyYXRpb25zICAgICAgICAgICAgICAgICAgInRhYmxlIiAgICAgICAgIC0tPiB3c2RsdTAwNTIgLy8kTk9OLU5MUy0xJAotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgRURJVF9OU19ESUFMT0dfQUREX0JVVFRPTiA9IHBsdWdpbklkICsgIndzZGx1MDA1MyI7ICAgLy8gIEFkZC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVzaCBidXR0b24iICAgLS0+IHdzZGx1MDA1MyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgRURJVF9OU19ESUFMT0dfRURJVF9CVVRUT04gPSBwbHVnaW5JZCArICJ3c2RsdTAwNTQiOyAgIC8vICBFZGl0Li4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggYnV0dG9uIiAgIC0tPiB3c2RsdTAwNTQgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEVESVRfTlNfRElBTE9HX0RFTEVURV9CVVRUT04gPSBwbHVnaW5JZCArICJ3c2RsdTAwNTUiOyAgIC8vICBEZWxldGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggYnV0dG9uIiAgIC0tPiB3c2RsdTAwNTUgLy8kTk9OLU5MUy0xJAotCi0KLQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlXU0RMIEVkaXRvciAtIEFkZCBOYW1lc3BhY2UgRGVjbGFyYXRpb25zIERpYWxvZyAtLS0gY29tbW9uLnVpCi0JLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgQUREX05TX0RFQ0wgPSBwbHVnaW5JZCArICJ3c2RsdTAwNjAiOyAgIC8vICBBZGQgTmFtZXNwYWNlIERlY2xhcmF0aW9ucyBEaWFsb2cgICAgICAgImRpYWxvZyIgICAgICAgIC0tPiB3c2RsdTAwNjAgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFERF9OU19ERUNMX1NFTEVDVF9SRUdfTlNfUkFESU8gPSBwbHVnaW5JZCArICJ3c2RsdTAwNjEiOyAgIC8vICBTZWxlY3QgRnJvbSBSZWdpc3RlcmVkIE5hbWVzcGFjZXMgICAgICAgInJhZGlvIiAgICAgICAgIC0tPiB3c2RsdTAwNjEgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFERF9OU19ERUNMX1NQRUNJRllfTkVXX05TX1JBRElPID0gcGx1Z2luSWQgKyAid3NkbHUwMDYyIjsgICAvLyAgU3BlY2lmeSBOZXcgTmFtZXNwYWNlICAgICAgICAgICAgICAgICAgICJyYWRpbyIgICAgICAgICAtLT4gd3NkbHUwMDYyIC8vJE5PTi1OTFMtMSQKLQotCS8vIFJlZ2lzdGVyZWQgTmFtZXNwYWNlczoKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBBRERfTlNfREVDTF9TRUxFQ1RfTlNfVE9fQUREX1RBQkxFID0gcGx1Z2luSWQgKyAid3NkbHUwMDYzIjsgICAvLyAgU2VsZWN0IHRoZSBuYW1lc3BhY2UgZGVjbGFyYXRpb25zIHRvIGFkZCAidGFibGUiICAgICAgICAtLT4gd3NkbHUwMDYzIC8vJE5PTi1OTFMtMSQKLQotCS8vIE5ldyBOYW1lc3BhY2U6Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQUREX05TX0RFQ0xfUFJFRklYX1RFWFQgPSBwbHVnaW5JZCArICIiOyAgIC8vICBQcmVmaXg6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRleHQiICAgICAgICAgIC0tPihDT01NT04pIHdzZGx1MDA2NCAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgQUREX05TX0RFQ0xfTkFNRVNQQUNFX05BTUVfVEVYVCA9IHBsdWdpbklkICsgIiI7ICAgLy8gIE5hbWVzcGFjZSBOYW1lOiAgICAgICAgICAgICAgICAgICAgICAgICAidGV4dCIgICAgICAgICAgLS0+KENPTU1PTikgd3NkbHUwMDY1IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBBRERfTlNfREVDTF9MT0NBVElPTl9ISU5UX1RFWFQgPSBwbHVnaW5JZCArICIiOyAgIC8vICBMb2NhdGlvbiBIaW50OiAgICAgICAgICAgICAgICAgICAgICAgICAgInRleHQiICAgICAgICAgIC0tPihDT01NT04pIHdzZGx1MDA2NiAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgQUREX05TX0RFQ0xfQlJPV1NFX0JVVFRPTiA9IHBsdWdpbklkICsgIiI7ICAgLy8gIEJyb3dzZS4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVzaCBidXR0b24iICAgLS0+KENPTU1PTikgd3NkbHUwMDY3IC8vJE5PTi1OTFMtMSQKLQkKLQkKLQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlXU0RMIEVkaXRvciAtIE5ldyBOYW1lc3BhY2UgSW5mb3JtYXRpb24gRGlhbG9nIC0tLSBjb21tb24udWkKLQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBORVdfTkFNRVNQQUNFX0lORk9fRElBTE9HID0gcGx1Z2luSWQgKyAid3NkbHUwMDY4IjsgLy8kTk9OLU5MUy0xJAotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgTkFNRVNQQUNFX05BTUUgPSBwbHVnaW5JZCArICJ3c2RsdTAwNjUiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgUFJFRklYID0gICAgICAgICBwbHVnaW5JZCArICJ3c2RsdTAwNjQiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgTE9DQVRJT05fSElOVCA9ICBwbHVnaW5JZCArICJ3c2RsdTAwNjYiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgQlJPV1NFID0gICAgICAgICBwbHVnaW5JZCArICJ3c2RsdTAwNjciOyAvLyROT04tTkxTLTEkCi0KLQotCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCVdTREwgRWRpdG9yIC0gTmV3IE1lc3NhZ2UgRGlhbG9nCi0JLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgTkVXX01FU1NBR0VfRElBTE9HID0gcGx1Z2luSWQgKyAid3NkbHUwMDgwIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE5FV19NRVNTQUdFX0RJQUxPR19OQU1FX1RFWFQgPSBwbHVnaW5JZCArICJ3c2RsdTAwODEiOyAgLy8gbm90IHVzZWQgLS0gdGV4dCB3aWxsIHVzZSAiZGlhbG9nIiBjb250ZXh0IElkIC8vJE5PTi1OTFMtMSQKLQotCi0JLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JV1NETCBFZGl0b3IgLSBTcGVjaWZ5IE1lc3NhZ2UgRGlhbG9nIC0tLSBjb21tb24udWkKLQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBTUEVDSUZZX01FU1NBR0VfRElBTE9HID0gcGx1Z2luSWQgKyAid3NkbHUwMDgyIjsgLy8gICAgICAgICAgICAgICAgImRpYWxvZyIgICAgICAgIC0tPiB3c2RsdTAwODIgLy8kTk9OLU5MUy0xJAotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgU1BFQ0lGWV9ESUFMT0dfTkFNRV9URVhUID0gcGx1Z2luSWQgKyAid3NkbHUwMDcwIjsgLy8gICBOYW1lICg/ID0gY2hhcmFjdGVyLCAqID0gYW55IHN0cmluZyk6ICAgInRleHQiICAgICAgICAgIC0tPihDT01NT04pIHdzZGx1MDA3MCAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgU1BFQ0lGWV9ESUFMT0dfQ09NUE9ORU5UU19MSVNUID0gcGx1Z2luSWQgKyAid3NkbHUwMDcxIjsgIC8vICBDb21wb25lbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpc3QiICAgICAgICAgIC0tPihDT01NT04pIHdzZGx1MDA3MSAvLyROT04tTkxTLTEkCi0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBTUEVDSUZZX0RJQUxPR19TRUFSQ0hfU0NPUEUgPSBwbHVnaW5JZCArICJ3c2RsdTAwNzIiOyAvLyAgU2VhcmNoIFNjb3BlOiAvLyROT04tTkxTLTEkCi0JLy9Xb3Jrc3BhY2UsIEVuY2xvc2luZyBQcm9qZWN0LCBDdXJyZW50IFJlc291cmNlLCBXb3JraW5nIFNldHMgKEdyb3VwZWQpICAgICAgICAgICJyYWRpbyIgICAgICAgICAtLT4oQ09NTU9OKSB3c2RsdTAwNzIKLQotCi0JLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JV1NETCBFZGl0b3IgLSBOZXcgQmluZGluZyBEaWFsb2cKLQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBORVdfQklORElOR19ESUFMT0cgPSBwbHVnaW5JZCArICJ3c2RsdTAwODMiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgTkVXX0JJTkRJTkdfRElBTE9HX05BTUVfVEVYVCA9IHBsdWdpbklkICsgIndzZGx1MDA4NCI7IC8vIG5vdCB1c2VkIC0tIHRleHQgd2lsbCB1c2UgImRpYWxvZyIgY29udGV4dCBJZCAvLyROT04tTkxTLTEkCi0KLQkKLQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlXU0RMIEVkaXRvciAtIFNwZWNpZnkgQmluZGluZyBEaWFsb2cgLS0tIGNvbW1vbi51aQotCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFNQRUNJRllfQklORElOR19ESUFMT0cgPSBwbHVnaW5JZCArICJ3c2RsdTAwODUiOyAgLy8gIFNwZWNpZnkgQmluZGluZyBEaWFsb2cgICAgICAgICAgICAgICAgICAiZGlhbG9nIiAgICAgICAgLS0+IHdzZGx1MDA4NSAvLyROT04tTkxTLTEkCi0KLQkKLQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlXU0RMIEVkaXRvciAtIE5ldyBQb3J0VHlwZSBEaWFsb2cgCi0JLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgTkVXX1BPUlRUWVBFX0RJQUxPRyA9IHBsdWdpbklkICsgIndzZGx1MDA4NiI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBORVdfUE9SVFRZUEVfRElBTE9HX05BTUVfVEVYVCA9IHBsdWdpbklkICsgIndzZGx1MDA4NyI7IC8vIG5vdCB1c2VkIC0tIHRleHQgd2lsbCB1c2UgImRpYWxvZyIgY29udGV4dCBJZCAvLyROT04tTkxTLTEkCi0KLQkKLQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlXU0RMIEVkaXRvciAtIFNwZWNpZnkgUG9ydCBUeXBlIERpYWxvZyAtLS0gY29tbW9uLnVpCi0JLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgU1BFQ0lGWV9QT1JUVFlQRV9ESUFMT0cgPSBwbHVnaW5JZCArICJ3c2RsdTAwODgiOyAvLyAgU3BlY2lmeSBQb3J0IFR5cGUgRGlhbG9nICAgICAgICAgICAgICAgICJkaWFsb2ciICAgICAgICAtLT4gd3NkbHUwMDg4IC8vJE5PTi1OTFMtMSQKLQotCQotCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCVdTREwgRWRpdG9yIC0gUHJvcGVydGllcwotCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCS8vRGVmaW5pdGlvbjoKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQUk9QRVJUSUVTX05BTUVfVEVYVCA9IHBsdWdpbklkICsgIndzZGx1MDEwMCI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQUk9QRVJUSUVTX0RFRl9QUkVGSVhfVEVYVCA9IHBsdWdpbklkICsgIndzZGx1MDEwMSI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQUk9QRVJUSUVTX0RFRl9UTlNfVEVYVCA9IHBsdWdpbklkICsgIndzZGx1MDEwMiI7IC8vJE5PTi1OTFMtMSQKLQotCS8vUG9ydDoKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQUk9QRVJUSUVTX1BPUlRfQklORElOR19DT01CTyA9IHBsdWdpbklkICsgIndzZGx1MDEwMyI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQUk9QRVJUSUVTX1BPUlRfQUREUkVTU19URVhUID0gcGx1Z2luSWQgKyAid3NkbHUwMTA0IjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBST1BFUlRJRVNfUE9SVF9QUk9UT0NPTF9URVhUID0gcGx1Z2luSWQgKyAid3NkbHUwMTA1IjsgLy8kTk9OLU5MUy0xJAotCi0JLy9CaW5kaW5nOgotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBST1BFUlRJRVNfQklORElOR19QT1JUVFlQRV9DT01CTyA9IHBsdWdpbklkICsgIndzZGx1MDEwNiI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQUk9QRVJUSUVTX0JJTkRJTkdfUFJPVE9DT0xfVEVYVCA9IHBsdWdpbklkICsgIndzZGx1MDEwNyI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQUk9QRVJUSUVTX0JJTkRJTkdfR0VOX0JJTkRJTkdfQlVUVE9OID0gcGx1Z2luSWQgKyAid3NkbHUwMTA4IjsgLy8kTk9OLU5MUy0xJAotCi0JLy9JbnB1dC9PdXRwdXQvRmF1bHQ6Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUFJPUEVSVElFU19NRVNTQUdFX1JFRl9NRVNTQUdFX0NPTUJPID0gcGx1Z2luSWQgKyAid3NkbHUwMTA5IjsgLy8kTk9OLU5MUy0xJAotCi0JLy9QYXJ0OgotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBST1BFUlRJRVNfUEFSVF9FTEVNRU5UX0NPTUJPID0gcGx1Z2luSWQgKyAid3NkbHUwMTEwIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBST1BFUlRJRVNfUEFSVF9UWVBFX0NPTUJPID0gcGx1Z2luSWQgKyAid3NkbHUwMTExIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBST1BFUlRJRVNfUEFSVF9UWVBFX1JBRElPID0gcGx1Z2luSWQgKyAid3NkbHUwMTEyIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBST1BFUlRJRVNfUEFSVF9FTEVNRU5UX1JBRElPID0gcGx1Z2luSWQgKyAid3NkbHUwMTEzIjsgLy8kTk9OLU5MUy0xJAotCQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgUFJPUEVSVElFU19ET0NVTUVOVEFUSU9OX1RBQiA9IHBsdWdpbklkICsgIndzZGx1MDExNCI7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfV0laQVJEX09QVElPTlNfUEFHRSA9IHBsdWdpbklkICsgIndzZGx1MDEyMCI7ICAvLyBOZXcgV1NETCBXaXphcmQgLSBvcHRpb25zIHBhZ2UgCS0tPiB3c2RsdTAxMjAgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfREVTSUdOX1ZJRVcgPSBwbHVnaW5JZCArICJ3c2RsdTAxMjEiOyAvLyAgRGVzaWduIFZpZXcgCQkJCS0tPiB3c2RsdTAxMjEgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfT1VUTElORV9WSUVXID0gcGx1Z2luSWQgKyAid3NkbHUwMTIyIjsgIC8vIE91dGxpbmUgVmlldyAJCQkJLS0+IHdzZGx1MDEyMiAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9QUk9QRVJUSUVTX1ZJRVcgPSBwbHVnaW5JZCArICJ3c2RsdTAxMjMiOyAvLyAgUHJvcGVydGllcyBWaWV3CQkJCS0tPiB3c2RsdTAxMjMgLy8kTk9OLU5MUy0xJAotCi0vLwlXU0RMIFByZWZlcmVuY2UgUGFnZToKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMX1BSRUZfREVGQVVMVF9UTlMgPSBwbHVnaW5JZCArICJ3c2RsdTAyMDAiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9QUkVGX1JFR0VOX09OX1NBVkUgPSBwbHVnaW5JZCArICJ3c2RsdTAyMDEiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9QUkVGX1BST01QVF9SRUdFTl9PTl9TQVZFID0gcGx1Z2luSWQgKyAid3NkbHUwMjAyIjsgLy8kTk9OLU5MUy0xJAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9BU0RFZGl0b3JQbHVnaW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvQVNERWRpdG9yUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3YWMwYmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9BU0RFZGl0b3JQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotCi1wdWJsaWMgY2xhc3MgQVNERWRpdG9yUGx1Z2luIGV4dGVuZHMgQWJzdHJhY3RVSVBsdWdpbiB7Ci0JcHVibGljIHN0YXRpYyBpbnQgREVQRU5ERUNJRVNfQ0hBTkdFRF9QT0xJQ1lfUkVMT0FEID0gMjsKLQkKLQlwcm90ZWN0ZWQgc3RhdGljIEFTREVkaXRvclBsdWdpbiBpbnN0YW5jZTsKLQkgIAotCSAgcHVibGljIEFTREVkaXRvclBsdWdpbigpIHsJCSAgCi0JICB9Ci0JICAKLS8vCS8qKgotLy8JICogR2V0IHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCi0vLwkgKi8KLS8vCXB1YmxpYyBzdGF0aWMgQVNERWRpdG9yUGx1Z2luIGdldEluc3RhbmNlKCkKLS8vCXsKLS8vCQlpZiAoaW5zdGFuY2UgPT0gbnVsbCkgewotLy8JCQlpbnN0YW5jZSA9IG5ldyBBU0RFZGl0b3JQbHVnaW4oKTsKLS8vCQl9Ci0vLwkJcmV0dXJuIGluc3RhbmNlOwotLy8JfQotLy8JCi0vLwlwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoU3RyaW5nIGljb25OYW1lKQotLy8JewotLy8JCUltYWdlUmVnaXN0cnkgaW1hZ2VSZWdpc3RyeSA9IGdldEltYWdlUmVnaXN0cnkoKTsKLS8vCQkKLS8vCQlpZiAoaW1hZ2VSZWdpc3RyeS5nZXQoaWNvbk5hbWUpICE9IG51bGwpCi0vLwkJewotLy8JCQlyZXR1cm4gaW1hZ2VSZWdpc3RyeS5nZXQoaWNvbk5hbWUpOwotLy8JCX0KLS8vCQllbHNlCi0vLwkJewotLy8JCQlpbWFnZVJlZ2lzdHJ5LnB1dChpY29uTmFtZSwgSW1hZ2VEZXNjcmlwdG9yLmNyZWF0ZUZyb21GaWxlKGdldENsYXNzKCksIGljb25OYW1lKSk7Ci0vLwkJCXJldHVybiBpbWFnZVJlZ2lzdHJ5LmdldChpY29uTmFtZSk7Ci0vLwkJfQotLy8JfQotCQotCXB1YmxpYyBzdGF0aWMgSW1hZ2VEZXNjcmlwdG9yIGdldEltYWdlRGVzY3JpcHRvcihTdHJpbmcgcGF0aCkgewotCQkvLyBXZSBzaG91bGQgbm90IGtub3cgYWJvdXQgV1NETEVkaXRvclBsdWdpbi5qYXZhLiAgRXZlbnR1YWxseSwgd2Ugc2hvdWxkIG1vdmUgdGhlc2UKLQkJLy8gJ2dlbmVyaWMnLCAndG9wLWxldmVsJyBpY29ucyB0byB0aGUgQVNEIGxldmVsLi4uLi4KLQkJcmV0dXJuIFdTRExFZGl0b3JQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yKHBhdGgpOwotCX0KLQkKLSAgcHVibGljIHN0YXRpYyBJbWFnZURlc2NyaXB0b3IgZ2V0SW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbihTdHJpbmcgcGF0aCkgewotICAgIC8vIFdlIHNob3VsZCBub3Qga25vdyBhYm91dCBXU0RMRWRpdG9yUGx1Z2luLmphdmEuICBFdmVudHVhbGx5LCB3ZSBzaG91bGQgbW92ZSB0aGVzZQotICAgIC8vICdnZW5lcmljJywgJ3RvcC1sZXZlbCcgaWNvbnMgdG8gdGhlIEFTRCBsZXZlbC4uLi4uCi0gICAgcmV0dXJuIFdTRExFZGl0b3JQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbihwYXRoKTsKLSAgfQotCi0JcHVibGljIHN0YXRpYyBJRWRpdG9yUGFydCBnZXRBY3RpdmVFZGl0b3IoKSB7Ci0JCXJldHVybiBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL0FTRExhYmVsUHJvdmlkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvQVNETGFiZWxQcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzhjMzMyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvQVNETGFiZWxQcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5MYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklBU0RPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUuSVRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXRvci5FZGl0b3JNb2RlTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIEFTRExhYmVsUHJvdmlkZXIgZXh0ZW5kcyBMYWJlbFByb3ZpZGVyIHsKLQkvKioKLQkgKiAKLQkgKi8KLQlwdWJsaWMgQVNETGFiZWxQcm92aWRlcigpIHsKLQkJc3VwZXIoKTsKLQl9Ci0JCi0gICAgcHJpdmF0ZSBJTGFiZWxQcm92aWRlciBnZXREZWxlZ2F0ZSgpCi0gICAgewotICAgICAgSUxhYmVsUHJvdmlkZXIgbGFiZWxQcm92aWRlciA9IG51bGw7ICAgCi0gICAgICBJRWRpdG9yUGFydCBlZGl0b3IgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLSAgICAgIEVkaXRvck1vZGVNYW5hZ2VyIG1hbmFnZXIgPSAoRWRpdG9yTW9kZU1hbmFnZXIpIGVkaXRvci5nZXRBZGFwdGVyKEVkaXRvck1vZGVNYW5hZ2VyLmNsYXNzKTsKLSAgICAgIGlmIChtYW5hZ2VyICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGxhYmVsUHJvdmlkZXIgPSAoSUxhYmVsUHJvdmlkZXIpIG1hbmFnZXIuZ2V0Q3VycmVudE1vZGUoKS5nZXRBZGFwdGVyKElMYWJlbFByb3ZpZGVyLmNsYXNzKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBsYWJlbFByb3ZpZGVyOwotICAgIH0KLQkvKioKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXIjZ2V0SW1hZ2UoamF2YS5sYW5nLk9iamVjdCkKLQkgKi8KLQlwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgewotCQlpZiAob2JqZWN0ID09IG51bGwgfHwgb2JqZWN0LmVxdWFscyhTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZKSkgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQkJSW1hZ2UgcmVzdWx0ID0gbnVsbDsgICAgICAgICAgIAotCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgU3RydWN0dXJlZFNlbGVjdGlvbikgewotCQkJT2JqZWN0IHNlbGVjdGVkID0gKChTdHJ1Y3R1cmVkU2VsZWN0aW9uKW9iamVjdCkuZ2V0Rmlyc3RFbGVtZW50KCk7Ci0JCSAgICBJTGFiZWxQcm92aWRlciBkZWxlZ2F0ZSA9IGdldERlbGVnYXRlKCk7Ci0gICAgICAgICAgICBpZiAoZGVsZWdhdGUgIT0gbnVsbCkgewotICAgICAgICAgICAgICByZXN1bHQgPSBkZWxlZ2F0ZS5nZXRJbWFnZShzZWxlY3RlZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChzZWxlY3RlZCBpbnN0YW5jZW9mIElUcmVlRWxlbWVudCkgewotCQkJCXJlc3VsdCA9ICgoSVRyZWVFbGVtZW50KSBzZWxlY3RlZCkuZ2V0SW1hZ2UoKTsKLQkJCX0KLQkJfQotCQkKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0JCi0JLyoqCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyI2dldFRleHQoamF2YS5sYW5nLk9iamVjdCkKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgewotCQlpZiAob2JqZWN0ID09IG51bGwgfHwgb2JqZWN0LmVxdWFscyhTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZKSkgewotCQkJcmV0dXJuICJObyBpdGVtcyBzZWxlY3RlZCI7Ly8kTk9OLU5MUy0xJAotCQl9Ci0JCVN0cmluZyByZXN1bHQgPSBudWxsOwotCQlPYmplY3Qgc2VsZWN0ZWQgPSBudWxsOwotCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgU3RydWN0dXJlZFNlbGVjdGlvbikgewotCQkJc2VsZWN0ZWQgPSAoKFN0cnVjdHVyZWRTZWxlY3Rpb24pIG9iamVjdCkuZ2V0Rmlyc3RFbGVtZW50KCk7Ci0JCQkKLSAgICAgICAgICAgIElMYWJlbFByb3ZpZGVyIGRlbGVnYXRlID0gZ2V0RGVsZWdhdGUoKTsKLSAgICAgICAgICAgIGlmIChkZWxlZ2F0ZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgIHJlc3VsdCA9IGRlbGVnYXRlLmdldFRleHQoc2VsZWN0ZWQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoc2VsZWN0ZWQgaW5zdGFuY2VvZiBJVHJlZUVsZW1lbnQpIHsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSAoKElUcmVlRWxlbWVudCkgc2VsZWN0ZWQpLmdldFRleHQoKTsKLSAgICAgICAgICAgIH0KLQkJCQotCQkJaWYgKHNlbGVjdGVkIGluc3RhbmNlb2YgSUFTRE9iamVjdCAmJiAoKElBU0RPYmplY3QpIHNlbGVjdGVkKS5pc1JlYWRPbmx5KCkpIHsKLQkJCQlyZXN1bHQgID0gcmVzdWx0ICsgIiAoIiArIE1lc3NhZ2VzLl9VSV9MQUJFTF9SRUFEX09OTFkgKyAiKSI7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCi0JCQl9Ci0JCX0KLQkJCi0JCXJldHVybiByZXN1bHQ7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9BU0RNdWx0aVBhZ2VFZGl0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvQVNETXVsdGlQYWdlRWRpdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4MTQwZDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9BU0RNdWx0aVBhZ2VFZGl0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLklGaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkdyYXBoaWNhbEVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5HcmFwaGljYWxWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmVkaXRwYXJ0cy5ab29tTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYudWkuYWN0aW9ucy5BY3Rpb25SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYudWkucGFydHMuU2Nyb2xsaW5nR3JhcGhpY2FsVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUNvbnRlbnRQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRyZWVDb250ZW50UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5TdGFja0xheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUmVjdGFuZ2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklGaWxlRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5JQ29udGVudE91dGxpbmVQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEQWRkQmluZGluZ0FjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RBZGRFbmRQb2ludEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RBZGRGYXVsdEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RBZGRJbXBvcnRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEQWRkSW5wdXRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEQWRkSW50ZXJmYWNlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTREFkZE9wZXJhdGlvbkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RBZGRPdXRwdXRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEQWRkUGFyYW1ldGVyQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTREFkZFNjaGVtYUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RBZGRTZXJ2aWNlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTRERlbGV0ZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RHZW5lcmF0ZUJpbmRpbmdBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNET3BlblNjaGVtYUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RTZXRFeGlzdGluZ0JpbmRpbmdBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEU2V0RXhpc3RpbmdJbnRlcmZhY2VBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEU2V0TmV3QmluZGluZ0FjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RTZXROZXdJbnRlcmZhY2VBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQmFzZVNlbGVjdGlvbkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5TaG93UHJvcGVydGllc1ZpZXdBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5EZXNpZ25WaWV3Q29udGV4dE1lbnVQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLkRlc2lnblZpZXdHcmFwaGljYWxWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5kaXJlY3RlZGl0LkRpcmVjdEVkaXRTZWxlY3Rpb25Ub29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLkFTREVkaXRQYXJ0RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5BU0RDb250ZW50T3V0bGluZVBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLnByb3BlcnRpZXMuc2VjdGlvbnMuQVNEVGFiYmVkUHJvcGVydHlTaGVldFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdG9yLkNvbW1vbk11bHRpUGFnZUVkaXRvcjsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEFTRE11bHRpUGFnZUVkaXRvciBleHRlbmRzIENvbW1vbk11bHRpUGFnZUVkaXRvcgotewotICAvLyBUT0RPOiBtb3ZlIHRvIGRlc2lnbiB2aWV3ZXIKLSAgcHJvdGVjdGVkIERlc2lnblZpZXdDb250ZXh0TWVudVByb3ZpZGVyIG1lbnVQcm92aWRlcjsKLSAgcHJvdGVjdGVkIElEZXNjcmlwdGlvbiBtb2RlbDsKLSAgcHJpdmF0ZSBpbnQgY3VycmVudFBhZ2UgPSAtMTsKLSAgCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbXVsdGktcGFnZSBlZGl0b3IgZXhhbXBsZS4KLSAgICovCi0gIHB1YmxpYyBBU0RNdWx0aVBhZ2VFZGl0b3IoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgIAotICAgIGdldEVkaXREb21haW4oKS5zZXRBY3RpdmVUb29sKG5ldyBEaXJlY3RFZGl0U2VsZWN0aW9uVG9vbCgpKTsKLSAgICBnZXRFZGl0RG9tYWluKCkuc2V0RGVmYXVsdFRvb2wobmV3IERpcmVjdEVkaXRTZWxlY3Rpb25Ub29sKCkpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRDb250cmlidXRvcklkKCkKLSAgewotICAgIHJldHVybiAib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvciI7IC8vJE5PTi1OTFMtMSQKLSAgfQotICAKLSAgcHJpdmF0ZSBjbGFzcyBJbnRlcm5hbExheW91dCBleHRlbmRzIFN0YWNrTGF5b3V0Ci0gIHsKLSAgICBwdWJsaWMgSW50ZXJuYWxMYXlvdXQoKSB7Ci0gICAgICBzdXBlcigpOyAgCi0gICAgfQotICAgIAotICAgIHByb3RlY3RlZCB2b2lkIGxheW91dChDb21wb3NpdGUgY29tcG9zaXRlLCBib29sZWFuIGZsdXNoQ2FjaGUpIHsKLSAgICAgIENvbnRyb2wgY2hpbGRyZW5bXSA9IGNvbXBvc2l0ZS5nZXRDaGlsZHJlbigpOwotICAgICAgUmVjdGFuZ2xlIHJlY3QgPSBjb21wb3NpdGUuZ2V0Q2xpZW50QXJlYSgpOwotICAgICAgcmVjdC54ICs9IG1hcmdpbldpZHRoOwotICAgICAgcmVjdC55ICs9IG1hcmdpbkhlaWdodDsKLSAgICAgIHJlY3Qud2lkdGggLT0gMiAqIG1hcmdpbldpZHRoOwotICAgICAgcmVjdC5oZWlnaHQgLT0gMiAqIG1hcmdpbkhlaWdodDsKLSAgICAgIAotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykgewotICAgICAgICBpZiAoaSA9PSAwICYmIG1vZGVDb21ibyAhPSBudWxsKSB7IC8vIEZvciB0aGUgZHJvcCBkb3duIHRvb2xiYXIKLSAgICAgICAgICBjaGlsZHJlbltpXS5zZXRCb3VuZHMocmVjdC54ICsgcmVjdC53aWR0aCAtIDkwIC0gbWF4TGVuZ3RoLCByZWN0LnkgKyAxMCwgbWF4TGVuZ3RoICsgNjAsIDI2KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsvLyBGb3IgdGhlIG1haW4gZ3JhcGggdmlld2VyCi0gICAgICAgICAgY2hpbGRyZW5baV0uc2V0Qm91bmRzKHJlY3QpOyAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgfSAgICAgICAKLSAgICB9ICAgICAgICAgICAgICAgCi0gIH0KLSAgCi0gIHByb3RlY3RlZCBDb21wb3NpdGUgY3JlYXRlR3JhcGhQYWdlQ29tcG9zaXRlKCkgeyAgICAKLSAgICBDb21wb3NpdGUgcGFyZW50ID0gbmV3IENvbXBvc2l0ZShnZXRDb250YWluZXIoKSwgU1dULkZMQVQpOwotICAgIHBhcmVudC5zZXRMYXlvdXQobmV3IEludGVybmFsTGF5b3V0KCkpOwotICAgIGNyZWF0ZVZpZXdNb2RlVG9vbGJhcihwYXJlbnQpOwotICAgIHJldHVybiBwYXJlbnQ7Ci0gIH0KLQotICAKLSAgcHVibGljIElDb250ZW50T3V0bGluZVBhZ2UgZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgewotCSAgaWYgKChmT3V0bGluZVBhZ2UgPT0gbnVsbCkgfHwgZk91dGxpbmVQYWdlLmdldENvbnRyb2woKSA9PSBudWxsIHx8IChmT3V0bGluZVBhZ2UuZ2V0Q29udHJvbCgpLmlzRGlzcG9zZWQoKSkpIHsKLQkJICBJQ29udGVudFByb3ZpZGVyICBwcm92aWRlciA9IGdldEVkaXRvck1vZGVNYW5hZ2VyKCkuZ2V0Q3VycmVudE1vZGUoKS5nZXRPdXRsaW5lUHJvdmlkZXIoKTsKLSAgICAgICAgICAKLSAgICAgIEFTRENvbnRlbnRPdXRsaW5lUGFnZSBvdXRsaW5lUGFnZSA9IG5ldyBBU0RDb250ZW50T3V0bGluZVBhZ2UodGhpcywgbWVudVByb3ZpZGVyKTsKLQkJICBvdXRsaW5lUGFnZS5zZXRDb250ZW50UHJvdmlkZXIoKElUcmVlQ29udGVudFByb3ZpZGVyKXByb3ZpZGVyKTsKLQkJICBvdXRsaW5lUGFnZS5zZXRMYWJlbFByb3ZpZGVyKChJTGFiZWxQcm92aWRlcilwcm92aWRlcik7Ci0JCSAgb3V0bGluZVBhZ2Uuc2V0TW9kZWwoZ2V0TW9kZWwoKSk7Ci0JCSAgb3V0bGluZVBhZ2UuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKGdldFNlbGVjdGlvbk1hbmFnZXIoKSk7Ci0gICAgICBnZXRTZWxlY3Rpb25NYW5hZ2VyKCkuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKG91dGxpbmVQYWdlKTsKLSAgICAgIAotICAgICAgZk91dGxpbmVQYWdlID0gb3V0bGluZVBhZ2U7Ci0JICB9Ci0JICByZXR1cm4gZk91dGxpbmVQYWdlOwotICB9Ci0gIAotICAvKioKLSAgICogQ3JlYXRlcyB0aGUgcGFnZXMgb2YgdGhlIG11bHRpLXBhZ2UgZWRpdG9yLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlUGFnZXMoKQotICB7Ci0gICAgc2VsZWN0aW9uUHJvdmlkZXIgPSBnZXRTZWxlY3Rpb25NYW5hZ2VyKCk7Ci0gICAgZ2V0RWRpdG9yU2l0ZSgpLnNldFNlbGVjdGlvblByb3ZpZGVyKHNlbGVjdGlvblByb3ZpZGVyKTsKLQotICAgIGNyZWF0ZUdyYXBoUGFnZSgpOwotICAgIGNyZWF0ZVNvdXJjZVBhZ2UoKTsKLQotICAgIGJ1aWxkQW5kU2V0TW9kZWwoKTsKLSAgICBpbml0aWFsaXplR3JhcGhpY2FsVmlld2VyKCk7Ci0gICAgc2V0QWN0aXZlUGFnZShnZXREZWZhdWx0UGFnZVR5cGVJbmRleCgpKTsKLSAgICAKLSAgICBnZXRTZWxlY3Rpb25NYW5hZ2VyKCkuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGdldE1vZGVsKCkpKTsKLSAgICAKLSAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKGdyYXBoaWNhbFZpZXdlci5nZXRDb250cm9sKCksIEFTREVkaXRvckNTSGVscElkcy5XU0RMX0RFU0lHTl9WSUVXKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIGludCBnZXREZWZhdWx0UGFnZVR5cGVJbmRleCgpIHsKLQkgIGludCBwYWdlSW5kZXggPSBTT1VSQ0VfUEFHRV9JTkRFWDsKLQkgIGlmIChXU0RMRWRpdG9yUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0RGVmYXVsdFBhZ2UoKS5lcXVhbHMoV1NETEVkaXRvclBsdWdpbi5ERVNJR05fUEFHRSkpIHsKLQkJICBwYWdlSW5kZXggPSBERVNJR05fUEFHRV9JTkRFWDsKLQkgIH0KLQotCSAgcmV0dXJuIHBhZ2VJbmRleDsKLQkgIH0KLSAgCi0gIHByb3RlY3RlZCBTY3JvbGxpbmdHcmFwaGljYWxWaWV3ZXIgZ2V0R3JhcGhpY2FsVmlld2VyKCkKLSAgewotICAgIHJldHVybiBuZXcgRGVzaWduVmlld0dyYXBoaWNhbFZpZXdlcih0aGlzLCBnZXRTZWxlY3Rpb25NYW5hZ2VyKCkpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBidWlsZEFuZFNldE1vZGVsKCkgewotCSAgbW9kZWwgPSBidWlsZE1vZGVsKChJRmlsZUVkaXRvcklucHV0KWdldEVkaXRvcklucHV0KCkpOwotICB9Ci0KLSAgYWJzdHJhY3QgcHVibGljIElEZXNjcmlwdGlvbiBidWlsZE1vZGVsKElGaWxlRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpOwotICAKLSAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlQWN0aW9ucygpCi0gIHsKLSAgICBBY3Rpb25SZWdpc3RyeSByZWdpc3RyeSA9IGdldEFjdGlvblJlZ2lzdHJ5KCk7Ci0KLSAgICBCYXNlU2VsZWN0aW9uQWN0aW9uIGFjdGlvbiA9IG5ldyBBU0RBZGRTZXJ2aWNlQWN0aW9uKHRoaXMpOwotICAgIGFjdGlvbi5zZXRTZWxlY3Rpb25Qcm92aWRlcihnZXRTZWxlY3Rpb25NYW5hZ2VyKCkpOwotICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQWN0aW9uKGFjdGlvbik7Ci0gICAgCi0gICAgYWN0aW9uID0gbmV3IEFTREFkZEJpbmRpbmdBY3Rpb24odGhpcyk7Ci0gICAgYWN0aW9uLnNldFNlbGVjdGlvblByb3ZpZGVyKGdldFNlbGVjdGlvbk1hbmFnZXIoKSk7Ci0gICAgcmVnaXN0cnkucmVnaXN0ZXJBY3Rpb24oYWN0aW9uKTsKLSAgICAKLSAgICBhY3Rpb24gPSBuZXcgQVNEQWRkSW50ZXJmYWNlQWN0aW9uKHRoaXMpOwotICAgIGFjdGlvbi5zZXRTZWxlY3Rpb25Qcm92aWRlcihnZXRTZWxlY3Rpb25NYW5hZ2VyKCkpOwotICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQWN0aW9uKGFjdGlvbik7Ci0gICAgCi0gICAgYWN0aW9uID0gbmV3IEFTREFkZEVuZFBvaW50QWN0aW9uKHRoaXMpOwotICAgIGFjdGlvbi5zZXRTZWxlY3Rpb25Qcm92aWRlcihnZXRTZWxlY3Rpb25NYW5hZ2VyKCkpOwotICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQWN0aW9uKGFjdGlvbik7Ci0gICAgCi0gICAgYWN0aW9uID0gbmV3IEFTREFkZE9wZXJhdGlvbkFjdGlvbih0aGlzKTsKLSAgICBhY3Rpb24uc2V0U2VsZWN0aW9uUHJvdmlkZXIoZ2V0U2VsZWN0aW9uTWFuYWdlcigpKTsKLSAgICByZWdpc3RyeS5yZWdpc3RlckFjdGlvbihhY3Rpb24pOwotICAgIAotICAgIGFjdGlvbiA9IG5ldyBBU0RBZGRJbnB1dEFjdGlvbih0aGlzKTsKLSAgICBhY3Rpb24uc2V0U2VsZWN0aW9uUHJvdmlkZXIoZ2V0U2VsZWN0aW9uTWFuYWdlcigpKTsKLSAgICByZWdpc3RyeS5yZWdpc3RlckFjdGlvbihhY3Rpb24pOwotICAgIAotICAgIGFjdGlvbiA9IG5ldyBBU0RBZGRPdXRwdXRBY3Rpb24odGhpcyk7Ci0gICAgYWN0aW9uLnNldFNlbGVjdGlvblByb3ZpZGVyKGdldFNlbGVjdGlvbk1hbmFnZXIoKSk7Ci0gICAgcmVnaXN0cnkucmVnaXN0ZXJBY3Rpb24oYWN0aW9uKTsKLSAgICAKLSAgICBhY3Rpb24gPSBuZXcgQVNEQWRkRmF1bHRBY3Rpb24odGhpcyk7Ci0gICAgYWN0aW9uLnNldFNlbGVjdGlvblByb3ZpZGVyKGdldFNlbGVjdGlvbk1hbmFnZXIoKSk7Ci0gICAgcmVnaXN0cnkucmVnaXN0ZXJBY3Rpb24oYWN0aW9uKTsKLQotICAgIGFjdGlvbiA9IG5ldyBBU0REZWxldGVBY3Rpb24odGhpcyk7Ci0gICAgYWN0aW9uLnNldFNlbGVjdGlvblByb3ZpZGVyKGdldFNlbGVjdGlvbk1hbmFnZXIoKSk7Ci0gICAgcmVnaXN0cnkucmVnaXN0ZXJBY3Rpb24oYWN0aW9uKTsKLSAgICAKLSAgICBhY3Rpb24gPSBuZXcgQVNEU2V0TmV3QmluZGluZ0FjdGlvbih0aGlzKTsKLSAgICBhY3Rpb24uc2V0U2VsZWN0aW9uUHJvdmlkZXIoZ2V0U2VsZWN0aW9uTWFuYWdlcigpKTsKLSAgICByZWdpc3RyeS5yZWdpc3RlckFjdGlvbihhY3Rpb24pOwotICAgIAotICAgIGFjdGlvbiA9IG5ldyBBU0RTZXRFeGlzdGluZ0JpbmRpbmdBY3Rpb24odGhpcyk7Ci0gICAgYWN0aW9uLnNldFNlbGVjdGlvblByb3ZpZGVyKGdldFNlbGVjdGlvbk1hbmFnZXIoKSk7Ci0gICAgcmVnaXN0cnkucmVnaXN0ZXJBY3Rpb24oYWN0aW9uKTsKLQotICAgIGFjdGlvbiA9IG5ldyBBU0RTZXROZXdJbnRlcmZhY2VBY3Rpb24odGhpcyk7Ci0gICAgYWN0aW9uLnNldFNlbGVjdGlvblByb3ZpZGVyKGdldFNlbGVjdGlvbk1hbmFnZXIoKSk7Ci0gICAgcmVnaXN0cnkucmVnaXN0ZXJBY3Rpb24oYWN0aW9uKTsKLSAgICAKLSAgICBhY3Rpb24gPSBuZXcgQVNEU2V0RXhpc3RpbmdJbnRlcmZhY2VBY3Rpb24odGhpcyk7Ci0gICAgYWN0aW9uLnNldFNlbGVjdGlvblByb3ZpZGVyKGdldFNlbGVjdGlvbk1hbmFnZXIoKSk7Ci0gICAgcmVnaXN0cnkucmVnaXN0ZXJBY3Rpb24oYWN0aW9uKTsKLSAgICAKLSAgICBhY3Rpb24gPSBuZXcgQVNER2VuZXJhdGVCaW5kaW5nQWN0aW9uKHRoaXMpOwotICAgIGFjdGlvbi5zZXRTZWxlY3Rpb25Qcm92aWRlcihnZXRTZWxlY3Rpb25NYW5hZ2VyKCkpOwotICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQWN0aW9uKGFjdGlvbik7Ci0gICAgCi0gICAgYWN0aW9uID0gbmV3IEFTREFkZEltcG9ydEFjdGlvbih0aGlzKTsKLSAgICBhY3Rpb24uc2V0U2VsZWN0aW9uUHJvdmlkZXIoZ2V0U2VsZWN0aW9uTWFuYWdlcigpKTsKLSAgICByZWdpc3RyeS5yZWdpc3RlckFjdGlvbihhY3Rpb24pOwotICAgIAotICAgIGFjdGlvbiA9IG5ldyBBU0RBZGRQYXJhbWV0ZXJBY3Rpb24odGhpcyk7Ci0gICAgYWN0aW9uLnNldFNlbGVjdGlvblByb3ZpZGVyKGdldFNlbGVjdGlvbk1hbmFnZXIoKSk7Ci0gICAgcmVnaXN0cnkucmVnaXN0ZXJBY3Rpb24oYWN0aW9uKTsgICAgCi0gICAgCi0gICAgYWN0aW9uID0gbmV3IEFTREFkZFNjaGVtYUFjdGlvbih0aGlzKTsKLSAgICBhY3Rpb24uc2V0U2VsZWN0aW9uUHJvdmlkZXIoZ2V0U2VsZWN0aW9uTWFuYWdlcigpKTsKLSAgICByZWdpc3RyeS5yZWdpc3RlckFjdGlvbihhY3Rpb24pOwotICAgIAotICAgIGFjdGlvbiA9IG5ldyBBU0RPcGVuU2NoZW1hQWN0aW9uKHRoaXMpOwotICAgIGFjdGlvbi5zZXRTZWxlY3Rpb25Qcm92aWRlcihnZXRTZWxlY3Rpb25NYW5hZ2VyKCkpOwotICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQWN0aW9uKGFjdGlvbik7Ci0gICAgCi0gICAgYWN0aW9uID0gbmV3IFNob3dQcm9wZXJ0aWVzVmlld0FjdGlvbih0aGlzKTsKLSAgICBhY3Rpb24uc2V0U2VsZWN0aW9uUHJvdmlkZXIoZ2V0U2VsZWN0aW9uTWFuYWdlcigpKTsKLSAgICByZWdpc3RyeS5yZWdpc3RlckFjdGlvbihhY3Rpb24pOwotICB9Ci0KLSAgcHVibGljIElEZXNjcmlwdGlvbiBnZXRNb2RlbCgpCi0gIHsKLSAgICByZXR1cm4gbW9kZWw7Ci0gIH0KLQotICBwdWJsaWMgT2JqZWN0IGdldEFkYXB0ZXIoQ2xhc3MgdHlwZSkKLSAgewotICAgIGlmICh0eXBlID09IFpvb21NYW5hZ2VyLmNsYXNzKQotICAgICAgcmV0dXJuIGdyYXBoaWNhbFZpZXdlci5nZXRQcm9wZXJ0eShab29tTWFuYWdlci5jbGFzcy50b1N0cmluZygpKTsKLQotICAgIGlmICh0eXBlID09IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuSVByb3BlcnR5U2hlZXRQYWdlLmNsYXNzKQotICAgIHsKLSAgICAJQVNEVGFiYmVkUHJvcGVydHlTaGVldFBhZ2UgcGFnZSA9IG5ldyBBU0RUYWJiZWRQcm9wZXJ0eVNoZWV0UGFnZSh0aGlzKTsKLSAgICAJcmV0dXJuIHBhZ2U7Ci0gICAgfQotICAgIGlmICh0eXBlID09IEdyYXBoaWNhbFZpZXdlci5jbGFzcykKLSAgICAgIHJldHVybiBncmFwaGljYWxWaWV3ZXI7Ci0gICAgaWYgKHR5cGUgPT0gRWRpdFBhcnQuY2xhc3MgJiYgZ3JhcGhpY2FsVmlld2VyICE9IG51bGwpCi0gICAgICByZXR1cm4gZ3JhcGhpY2FsVmlld2VyLmdldFJvb3RFZGl0UGFydCgpOwotICAgIGlmICh0eXBlID09IElGaWd1cmUuY2xhc3MgJiYgZ3JhcGhpY2FsVmlld2VyICE9IG51bGwpCi0gICAgICByZXR1cm4gKChHcmFwaGljYWxFZGl0UGFydCkgZ3JhcGhpY2FsVmlld2VyLmdldFJvb3RFZGl0UGFydCgpKS5nZXRGaWd1cmUoKTsKLSAgICAKLSAgICBpZiAoSUNvbnRlbnRPdXRsaW5lUGFnZS5jbGFzcy5lcXVhbHModHlwZSkpCi0gICAgewotICAgICAgcmV0dXJuIGdldENvbnRlbnRPdXRsaW5lUGFnZSgpOwotICAgIH0KLSAgICAKLSAgICBpZiAodHlwZSA9PSBJU2VsZWN0aW9uUHJvdmlkZXIuY2xhc3MpCi0gICAgewotICAgICAgIHJldHVybiBnZXRTZWxlY3Rpb25NYW5hZ2VyKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBzdXBlci5nZXRBZGFwdGVyKHR5cGUpOwotICB9Ci0KLSAgcHJvdGVjdGVkIEVkaXRQYXJ0RmFjdG9yeSBnZXRFZGl0UGFydEZhY3RvcnkoKSB7Ci0gICAgcmV0dXJuIG5ldyBBU0RFZGl0UGFydEZhY3RvcnkoKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgc2V0RWRpdFBhcnRGYWN0b3J5KEVkaXRQYXJ0RmFjdG9yeSBmYWN0b3J5KSB7Ci0JICBncmFwaGljYWxWaWV3ZXIuc2V0RWRpdFBhcnRGYWN0b3J5KGZhY3RvcnkpOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplR3JhcGhpY2FsVmlld2VyKCkKLSAgewotICAgIGdyYXBoaWNhbFZpZXdlci5zZXRDb250ZW50cyhtb2RlbCk7Ci0gICAgbWVudVByb3ZpZGVyID0gbmV3IERlc2lnblZpZXdDb250ZXh0TWVudVByb3ZpZGVyKGdyYXBoaWNhbFZpZXdlciwgZ2V0U2VsZWN0aW9uTWFuYWdlcigpKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgcGFnZUNoYW5nZShpbnQgbmV3UGFnZUluZGV4KSB7Ci0gICAgY3VycmVudFBhZ2UgPSBuZXdQYWdlSW5kZXg7Ci0gICAgc3VwZXIucGFnZUNoYW5nZShuZXdQYWdlSW5kZXgpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotCSAgaWYgKGN1cnJlbnRQYWdlID09IFNPVVJDRV9QQUdFX0lOREVYKSB7Ci0JCSAgV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLnNldERlZmF1bHRQYWdlKFdTRExFZGl0b3JQbHVnaW4uU09VUkNFX1BBR0UpOwotCSAgfQotCSAgZWxzZSB7Ci0JCSAgV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLnNldERlZmF1bHRQYWdlKFdTRExFZGl0b3JQbHVnaW4uREVTSUdOX1BBR0UpOwotCSAgfQotCi0JICBzdXBlci5kaXNwb3NlKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvQVNEU2VsZWN0aW9uTWFuYWdlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9BU0RTZWxlY3Rpb25NYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjN2FjODYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9BU0RTZWxlY3Rpb25NYW5hZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0Lk11bHRpUGFnZUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5NdWx0aVBhZ2VTZWxlY3Rpb25Qcm92aWRlcjsKLQotcHVibGljIGNsYXNzIEFTRFNlbGVjdGlvbk1hbmFnZXIgZXh0ZW5kcyBNdWx0aVBhZ2VTZWxlY3Rpb25Qcm92aWRlciBpbXBsZW1lbnRzIElTZWxlY3Rpb25Qcm92aWRlciwgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcgotewotCXByb3RlY3RlZCBMaXN0IGxpc3RlbmVyTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQlwcm90ZWN0ZWQgSVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uOwotCXByb3RlY3RlZCBib29sZWFuIGVuYWJsZU5vdGlmeSA9IHRydWU7Ci0JCi0JcHVibGljIEFTRFNlbGVjdGlvbk1hbmFnZXIoTXVsdGlQYWdlRWRpdG9yUGFydCBtdWx0aVBhZ2VFZGl0b3IpCi0JewotCQlzdXBlcihtdWx0aVBhZ2VFZGl0b3IpOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlciNhZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIob3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKQotCSAqLwotCXB1YmxpYyB2b2lkIGFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKQotCXsKLQkJbGlzdGVuZXJMaXN0LmFkZChsaXN0ZW5lcik7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyI2dldFNlbGVjdGlvbigpCi0JICovCi0JcHVibGljIElTZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCkKLQl7Ci0JCXJldHVybiBjdXJyZW50U2VsZWN0aW9uOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlciNyZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIob3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKQotCSAqLwotCXB1YmxpYyB2b2lkIHJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKQotCXsKLQkJbGlzdGVuZXJMaXN0LnJlbW92ZShsaXN0ZW5lcik7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyI3NldFNlbGVjdGlvbihvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb24pCi0JICovCi0JcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKQotCXsKLQkJc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgdGhpcyk7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciNzZWxlY3Rpb25DaGFuZ2VkKG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KQotCSAqLwotCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KQotCXsKLQkJaWYgKGVuYWJsZU5vdGlmeSkKLQkJewotCQkJc2V0U2VsZWN0aW9uKGV2ZW50LmdldFNlbGVjdGlvbigpLCBldmVudC5nZXRTZWxlY3Rpb25Qcm92aWRlcigpKTsKLQkJfQotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24sIElTZWxlY3Rpb25Qcm92aWRlciBzb3VyY2UpCi0JeyAgCi0JCWlmIChlbmFibGVOb3RpZnkpCi0JCXsKLQkJCWN1cnJlbnRTZWxlY3Rpb24gPSBzZWxlY3Rpb247Ci0JCQllbmFibGVOb3RpZnkgPSBmYWxzZTsKLQkJCXRyeQotCQkJewotCQkJCVNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCA9IG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoc291cmNlLCBzZWxlY3Rpb24pOwotCQkJCUxpc3QgY29weU9mTGlzdGVuZXJMaXN0ID0gbmV3IEFycmF5TGlzdChsaXN0ZW5lckxpc3QpOwotCQkJCWZvciAoSXRlcmF0b3IgaSA9IGNvcHlPZkxpc3RlbmVyTGlzdC5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotCQkJCXsKLQkJCQkJSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lciA9IChJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKWkubmV4dCgpOwotCQkJCQlsaXN0ZW5lci5zZWxlY3Rpb25DaGFuZ2VkKGV2ZW50KTsKLQkJCQl9Ci0JCQl9Ci0JCQlmaW5hbGx5Ci0JCQl7Ci0JCQkJZW5hYmxlTm90aWZ5ID0gdHJ1ZTsKLQkJCX0KLQkJfQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL01lc3NhZ2VzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL01lc3NhZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyMDM3MjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9NZXNzYWdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLQotcHVibGljIGNsYXNzIE1lc3NhZ2VzIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSAib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm1lc3NhZ2VzIjsgLy8kTk9OLU5MUy0xJAotCi0Jc3RhdGljIHsKLQkJTkxTLmluaXRpYWxpemVNZXNzYWdlcyhCVU5ETEVfTkFNRSwgTWVzc2FnZXMuY2xhc3MpOyAvLyROT04tTkxTLTEkCi0JfQotCSAgCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgUmVzb3VyY2VCdW5kbGUgUkVTT1VSQ0VfQlVORExFID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKEJVTkRMRV9OQU1FKTsKLQotCXByaXZhdGUgTWVzc2FnZXMoKSB7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXkpIHsKLQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCQl0cnkgewotCQkJcmV0dXJuIFJFU09VUkNFX0JVTkRMRS5nZXRTdHJpbmcoa2V5KTsKLQkJfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKLQkJCXJldHVybiAnIScgKyBrZXkgKyAnISc7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX1RBQl9HUkFQSDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfVEFCX1NPVVJDRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQlVUVE9OX05FVzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfUkVBRF9PTkxZOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9OQU1FU1BBQ0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0xBQkVMX1BPUlRUWVBFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9MT0NBVElPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfQUREUkVTUzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfQklORElORzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfUFJFRklYOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9OQU1FOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9MQUJFTF9UWVBFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fQUREX1NFUlZJQ0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9BRERfTUVTU0FHRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX0FERF9PUEVSQVRJT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9BRERfSU1QT1JUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fQUREX09VVFBVVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX0FERF9GQVVMVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX0FERF9QT1JUOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fQUREX1BPUlRUWVBFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fREVMRVRFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9CVVRUT05fQlJPV1NFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fTkVXX1BPUlRUWVBFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fTkVXX0JJTkRJTkc7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9FWElTVElOR19QT1JUVFlQRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfR0VORVJBVEVfQklORElOR19DT05URU5UOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fRVhJU1RJTkdfQklORElORzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfQklORElOR19QUk9UT0NPTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfVEFSR0VUX05BTUVTUEFDRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX0FERF9CSU5ESU5HOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9BQ1RJT05fQUREX1NDSEVNQTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfQUNUSU9OX0FERF9JTlBVVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfU0VDVElPTl9BRFZBTkNFRF9BVFRSSUJVVEVTOwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9FRElUX05BTUVTUEFDRVM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9PUEVOX1NDSEVNQTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfVE9PTFRJUF9SRU5BTUVfUkVGQUNUT1I7Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfTEFCRUxfUklHSFRfQ0xJQ0tfVE9fSU5TRVJUX0NPTlRFTlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX0FDVElPTl9TSE9XX1BST1BFUlRJRVM7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQWRkQmluZGluZ0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREFkZEJpbmRpbmdBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWVhNTQ0NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQWRkQmluZGluZ0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmRTdGFjazsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JQ2F0ZWdvcnlBZGFwdGVyOwotCi1wdWJsaWMgY2xhc3MgQVNEQWRkQmluZGluZ0FjdGlvbiBleHRlbmRzIEJhc2VTZWxlY3Rpb25BY3Rpb24gewotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElEID0gIkFTREFkZEJpbmRpbmdBY3Rpb24iOyAgLy8kTk9OLU5MUy0xJAotCQotCXB1YmxpYyBBU0RBZGRCaW5kaW5nQWN0aW9uKElXb3JrYmVuY2hQYXJ0IHBhcnQpCXsKLQkJc3VwZXIocGFydCk7Ci0JCXNldElkKElEKTsKLQkJc2V0VGV4dChNZXNzYWdlcy5fVUlfQUNUSU9OX0FERF9CSU5ESU5HKTsgLy8kTk9OLU5MUy0xJAotCQlzZXRJbWFnZURlc2NyaXB0b3IoQVNERWRpdG9yUGx1Z2luLmdldEltYWdlRGVzY3JpcHRvcigiaWNvbnMvYmluZGluZ19vYmouZ2lmIikpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJaWYgKGdldFNlbGVjdGVkT2JqZWN0cygpLnNpemUoKSA+IDApIHsKLQkJCU9iamVjdCBvID0gZ2V0U2VsZWN0ZWRPYmplY3RzKCkuZ2V0KDApOwotCQkJCi0JCQlpZiAobyBpbnN0YW5jZW9mIElDYXRlZ29yeUFkYXB0ZXIpIHsKLQkJCQlvID0gKChJQ2F0ZWdvcnlBZGFwdGVyKSBvKS5nZXRPd25lckRlc2NyaXB0aW9uKCk7Ci0JCQl9Ci0JCQkKLQkJCWlmIChvIGluc3RhbmNlb2YgSURlc2NyaXB0aW9uKSB7Ci0JCQkJQ29tbWFuZCBjb21tYW5kID0gKChJRGVzY3JpcHRpb24pIG8pLmdldEFkZEJpbmRpbmdDb21tYW5kKCk7Ci0JCQkgICAgQ29tbWFuZFN0YWNrIHN0YWNrID0gKENvbW1hbmRTdGFjaykgQVNERWRpdG9yUGx1Z2luLmdldEFjdGl2ZUVkaXRvcigpLmdldEFkYXB0ZXIoQ29tbWFuZFN0YWNrLmNsYXNzKTsKLQkJCSAgICBzdGFjay5leGVjdXRlKGNvbW1hbmQpOwotCQkJICAgIAotCQkJICAgIGlmIChjb21tYW5kIGluc3RhbmNlb2YgSUFTREFkZENvbW1hbmQpIHsKLQkJCSAgICAJT2JqZWN0IG9iamVjdCA9ICgoSUFTREFkZENvbW1hbmQpIGNvbW1hbmQpLmdldE5ld2x5QWRkZWRDb21wb25lbnQoKTsKLQkJCSAgICAJcGVyZm9ybVNlbGVjdGlvbihvYmplY3QpOwotCQkJICAgIH0KLQkJCX0KLQkJfSAgCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RBZGRFbmRQb2ludEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREFkZEVuZFBvaW50QWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2YTdlMzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREFkZEVuZFBvaW50QWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZFN0YWNrOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUVuZFBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVNlcnZpY2U7Ci0KLXB1YmxpYyBjbGFzcyBBU0RBZGRFbmRQb2ludEFjdGlvbiBleHRlbmRzIEJhc2VTZWxlY3Rpb25BY3Rpb24gewkKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJRCA9ICJBU0RBZGRFbmRQb2ludEFjdGlvbiI7ICAvLyROT04tTkxTLTEkCi0JCi0JcHVibGljIEFTREFkZEVuZFBvaW50QWN0aW9uKElXb3JrYmVuY2hQYXJ0IHBhcnQpCXsKLQkJc3VwZXIocGFydCk7Ci0JCXNldElkKElEKTsKLQkJc2V0VGV4dChNZXNzYWdlcy5fVUlfQUNUSU9OX0FERF9QT1JUKTsgLy8kTk9OLU5MUy0xJAotCQlzZXRJbWFnZURlc2NyaXB0b3IoQVNERWRpdG9yUGx1Z2luLmdldEltYWdlRGVzY3JpcHRvcigiaWNvbnMvcG9ydF9vYmouZ2lmIikpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJaWYgKGdldFNlbGVjdGVkT2JqZWN0cygpLnNpemUoKSA+IDApIHsKLQkJCU9iamVjdCBvID0gZ2V0U2VsZWN0ZWRPYmplY3RzKCkuZ2V0KDApOwotCQkJSVNlcnZpY2Ugc2VydmljZSA9IG51bGw7Ci0JCQkKLSAgICAgICAgICAgIGlmIChvIGluc3RhbmNlb2YgSVNlcnZpY2UpIHsKLSAgICAgICAgICAgIAlzZXJ2aWNlID0gKElTZXJ2aWNlKSBvOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobyBpbnN0YW5jZW9mIElFbmRQb2ludCkgewotICAgICAgICAgICAgCXNlcnZpY2UgPSAoKElFbmRQb2ludCkgbykuZ2V0T3duZXJTZXJ2aWNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChzZXJ2aWNlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBDb21tYW5kIGNvbW1hbmQgPSBzZXJ2aWNlLmdldEFkZEVuZFBvaW50Q29tbWFuZCgpOwotICAgICAgICAgICAgICAgIENvbW1hbmRTdGFjayBzdGFjayA9IChDb21tYW5kU3RhY2spIEFTREVkaXRvclBsdWdpbi5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKENvbW1hbmRTdGFjay5jbGFzcyk7Ci0gICAgICAgICAgICAgICAgc3RhY2suZXhlY3V0ZShjb21tYW5kKTsKLSAgICAgICAgICAgICAgICAKLQkJCSAgICBpZiAoY29tbWFuZCBpbnN0YW5jZW9mIElBU0RBZGRDb21tYW5kKSB7Ci0JCQkgICAgCU9iamVjdCBlbGVtZW50ID0gKChJQVNEQWRkQ29tbWFuZCkgY29tbWFuZCkuZ2V0TmV3bHlBZGRlZENvbXBvbmVudCgpOwotCQkJICAgIAlzZWxlY3RBbmREaXJlY3RFZGl0KGVsZW1lbnQpOwotCQkJICAgIH0KLSAgICAgICAgICAgIH0KLQkJfSAgCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RBZGRGYXVsdEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREFkZEZhdWx0QWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjMTg4MzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREFkZEZhdWx0QWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZFN0YWNrOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMU1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JUGFyYW1ldGVyOwotCi1wdWJsaWMgY2xhc3MgQVNEQWRkRmF1bHRBY3Rpb24gZXh0ZW5kcyBCYXNlU2VsZWN0aW9uQWN0aW9uIHsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJRCA9ICJBU0RBZGRGYXVsdEFjdGlvbm4iOyAgLy8kTk9OLU5MUy0xJAotCQotCXB1YmxpYyBBU0RBZGRGYXVsdEFjdGlvbihJV29ya2JlbmNoUGFydCBwYXJ0KQl7Ci0JCXN1cGVyKHBhcnQpOwotCQlzZXRJZChJRCk7Ci0JCXNldFRleHQoTWVzc2FnZXMuX1VJX0FDVElPTl9BRERfRkFVTFQpOyAgIC8vJE5PTi1OTFMtMSQKLQkJc2V0SW1hZ2VEZXNjcmlwdG9yKEFTREVkaXRvclBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3IoImljb25zL2ZhdWx0X29iai5naWYiKSk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIHZvaWQgcnVuKCkgewotCQlpZiAoZ2V0U2VsZWN0ZWRPYmplY3RzKCkuc2l6ZSgpID4gMCkgewotCQkJT2JqZWN0IG8gPSBnZXRTZWxlY3RlZE9iamVjdHMoKS5nZXQoMCk7Ci0JCQlJT3BlcmF0aW9uIGlPcGVyYXRpb24gPSBudWxsOwotCQkJT2JqZWN0IHBvc3NpYmxlRmF1bHQgPSBudWxsOwotCQkJCi0JCQlpZiAobyBpbnN0YW5jZW9mIElPcGVyYXRpb24pIHsKLQkJCQlpT3BlcmF0aW9uID0gKElPcGVyYXRpb24pIG87Ci0JCQl9Ci0JCQllbHNlIGlmIChvIGluc3RhbmNlb2YgSU1lc3NhZ2VSZWZlcmVuY2UpIHsKLQkJCQlpT3BlcmF0aW9uID0gKChJTWVzc2FnZVJlZmVyZW5jZSkgbykuZ2V0T3duZXJPcGVyYXRpb24oKTsKLQkJCQlwb3NzaWJsZUZhdWx0ID0gKChXMTFNZXNzYWdlUmVmZXJlbmNlKSBvKS5nZXRUYXJnZXQoKTsKLQkJCX0KLQkJCWVsc2UgaWYgKG8gaW5zdGFuY2VvZiBJUGFyYW1ldGVyKSB7Ci0JCQkJaU9wZXJhdGlvbiA9ICgoSU1lc3NhZ2VSZWZlcmVuY2UpICgoSVBhcmFtZXRlcikgbykuZ2V0T3duZXIoKSkuZ2V0T3duZXJPcGVyYXRpb24oKTsKLQkJCQlwb3NzaWJsZUZhdWx0ID0gKChXMTFNZXNzYWdlUmVmZXJlbmNlKSAoKElQYXJhbWV0ZXIpIG8pLmdldE93bmVyKCkpLmdldFRhcmdldCgpOwotCQkJfQotCQkJCi0JCQlpZiAoaU9wZXJhdGlvbiAhPSBudWxsKSB7Ci0JCQkJQ29tbWFuZCBjb21tYW5kID0gaU9wZXJhdGlvbi5nZXRBZGRGYXVsdENvbW1hbmQocG9zc2libGVGYXVsdCk7Ci0JCQkgICAgQ29tbWFuZFN0YWNrIHN0YWNrID0gKENvbW1hbmRTdGFjaykgQVNERWRpdG9yUGx1Z2luLmdldEFjdGl2ZUVkaXRvcigpLmdldEFkYXB0ZXIoQ29tbWFuZFN0YWNrLmNsYXNzKTsKLQkJCSAgICBzdGFjay5leGVjdXRlKGNvbW1hbmQpOwotCQkJICAgIAotCQkJICAgIGlmIChjb21tYW5kIGluc3RhbmNlb2YgSUFTREFkZENvbW1hbmQpIHsKLQkJCSAgICAJT2JqZWN0IG9iamVjdCA9ICgoSUFTREFkZENvbW1hbmQpIGNvbW1hbmQpLmdldE5ld2x5QWRkZWRDb21wb25lbnQoKTsKLQkJCSAgICAJcGVyZm9ybVNlbGVjdGlvbihvYmplY3QpOwotCQkJICAgIH0KLQkJCX0KLQkJfSAgCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RBZGRJbXBvcnRBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RBZGRJbXBvcnRBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYThjZTBiZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQWRkSW1wb3J0QWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZFN0YWNrOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSURlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklDYXRlZ29yeUFkYXB0ZXI7Ci0KLXB1YmxpYyBjbGFzcyBBU0RBZGRJbXBvcnRBY3Rpb24gZXh0ZW5kcyBCYXNlU2VsZWN0aW9uQWN0aW9uIHsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJRCA9ICJBU0RBZGRJbXBvcnRBY3Rpb24iOyAgLy8kTk9OLU5MUy0xJAotCQotCXB1YmxpYyBBU0RBZGRJbXBvcnRBY3Rpb24oSVdvcmtiZW5jaFBhcnQgcGFydCkJewotCQlzdXBlcihwYXJ0KTsKLQkJc2V0SWQoSUQpOwotCQlzZXRUZXh0KE1lc3NhZ2VzLl9VSV9BQ1RJT05fQUREX0lNUE9SVCk7IC8vJE5PTi1OTFMtMSQKLQkJc2V0SW1hZ2VEZXNjcmlwdG9yKEFTREVkaXRvclBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3IoImljb25zL2ltcG9ydF9vYmouZ2lmIikpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJaWYgKGdldFNlbGVjdGVkT2JqZWN0cygpLnNpemUoKSA+IDApIHsKLQkJCU9iamVjdCBvID0gZ2V0U2VsZWN0ZWRPYmplY3RzKCkuZ2V0KDApOwotCQkJCi0JCQlpZiAobyBpbnN0YW5jZW9mIElDYXRlZ29yeUFkYXB0ZXIpIHsKLQkJCQlvID0gKChJQ2F0ZWdvcnlBZGFwdGVyKSBvKS5nZXRPd25lckRlc2NyaXB0aW9uKCk7Ci0JCQl9Ci0JCQkKLQkJCWlmIChvIGluc3RhbmNlb2YgSURlc2NyaXB0aW9uKSB7Ci0JCQkJQ29tbWFuZCBjb21tYW5kID0gKChJRGVzY3JpcHRpb24pIG8pLmdldEFkZEltcG9ydENvbW1hbmQoKTsKLQkJCSAgICBDb21tYW5kU3RhY2sgc3RhY2sgPSAoQ29tbWFuZFN0YWNrKSBBU0RFZGl0b3JQbHVnaW4uZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0QWRhcHRlcihDb21tYW5kU3RhY2suY2xhc3MpOwotCQkJICAgIHN0YWNrLmV4ZWN1dGUoY29tbWFuZCk7Ci0JCQkgICAgCi0JCQkgICAgaWYgKGNvbW1hbmQgaW5zdGFuY2VvZiBJQVNEQWRkQ29tbWFuZCkgewotCQkJICAgIAlPYmplY3Qgb2JqZWN0ID0gKChJQVNEQWRkQ29tbWFuZCkgY29tbWFuZCkuZ2V0TmV3bHlBZGRlZENvbXBvbmVudCgpOwotCQkJICAgIAlwZXJmb3JtU2VsZWN0aW9uKG9iamVjdCk7Ci0JCQkgICAgfQotCQkJfQotCQl9ICAKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREFkZElucHV0QWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQWRkSW5wdXRBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmY1ZjlhYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQWRkSW5wdXRBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kU3RhY2s7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JUGFyYW1ldGVyOwotCi1wdWJsaWMgY2xhc3MgQVNEQWRkSW5wdXRBY3Rpb24gZXh0ZW5kcyBCYXNlU2VsZWN0aW9uQWN0aW9uIHsJCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgSUQgPSAiQVNEQWRkSW5wdXRBY3Rpb25uIjsgIC8vJE5PTi1OTFMtMSQKLQkKLQlwdWJsaWMgQVNEQWRkSW5wdXRBY3Rpb24oSVdvcmtiZW5jaFBhcnQgcGFydCkJewotCQlzdXBlcihwYXJ0KTsKLQkJc2V0SWQoSUQpOwotCQlzZXRUZXh0KE1lc3NhZ2VzLl9VSV9BQ1RJT05fQUREX0lOUFVUKTsgICAvLyROT04tTkxTLTEkCi0JCXNldEltYWdlRGVzY3JpcHRvcihBU0RFZGl0b3JQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yKCJpY29ucy9pbnB1dF9vYmouZ2lmIikpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJaWYgKGdldFNlbGVjdGVkT2JqZWN0cygpLnNpemUoKSA+IDApIHsKLQkJCU9iamVjdCBvID0gZ2V0U2VsZWN0ZWRPYmplY3RzKCkuZ2V0KDApOwotCQkJSU9wZXJhdGlvbiBpT3BlcmF0aW9uID0gbnVsbDsKLQkJCQotCQkJaWYgKG8gaW5zdGFuY2VvZiBJT3BlcmF0aW9uKSB7Ci0JCQkJaU9wZXJhdGlvbiA9IChJT3BlcmF0aW9uKSBvOwotCQkJfQotCQkJZWxzZSBpZiAobyBpbnN0YW5jZW9mIElNZXNzYWdlUmVmZXJlbmNlKSB7Ci0JCQkJaU9wZXJhdGlvbiA9ICgoSU1lc3NhZ2VSZWZlcmVuY2UpIG8pLmdldE93bmVyT3BlcmF0aW9uKCk7Ci0JCQl9Ci0JCQllbHNlIGlmIChvIGluc3RhbmNlb2YgSVBhcmFtZXRlcikgewotCQkJCWlPcGVyYXRpb24gPSAoKElNZXNzYWdlUmVmZXJlbmNlKSAoKElQYXJhbWV0ZXIpIG8pLmdldE93bmVyKCkpLmdldE93bmVyT3BlcmF0aW9uKCk7Ci0JCQl9Ci0JCQkKLQkJCWlmIChpT3BlcmF0aW9uICE9IG51bGwpIHsKLQkJCQlDb21tYW5kIGNvbW1hbmQgPSBpT3BlcmF0aW9uLmdldEFkZElucHV0Q29tbWFuZCgpOwotCQkJICAgIENvbW1hbmRTdGFjayBzdGFjayA9IChDb21tYW5kU3RhY2spIEFTREVkaXRvclBsdWdpbi5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKENvbW1hbmRTdGFjay5jbGFzcyk7Ci0JCQkgICAgc3RhY2suZXhlY3V0ZShjb21tYW5kKTsKLQkJCSAgICAKLQkJCSAgICBpZiAoY29tbWFuZCBpbnN0YW5jZW9mIElBU0RBZGRDb21tYW5kKSB7Ci0JCQkgICAgCU9iamVjdCBvYmplY3QgPSAoKElBU0RBZGRDb21tYW5kKSBjb21tYW5kKS5nZXROZXdseUFkZGVkQ29tcG9uZW50KCk7Ci0JCQkgICAgCXBlcmZvcm1TZWxlY3Rpb24ob2JqZWN0KTsKLQkJCSAgICB9Ci0JCQl9Ci0JCX0gIAotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQWRkSW50ZXJmYWNlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQWRkSW50ZXJmYWNlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkZjEyZjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREFkZEludGVyZmFjZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmRTdGFjazsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JQ2F0ZWdvcnlBZGFwdGVyOwotCi1wdWJsaWMgY2xhc3MgQVNEQWRkSW50ZXJmYWNlQWN0aW9uIGV4dGVuZHMgQmFzZVNlbGVjdGlvbkFjdGlvbiB7CQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElEID0gIkFTREFkZEludGVyZmFjZUFjdGlvbiI7ICAvLyROT04tTkxTLTEkCi0JCi0JcHVibGljIEFTREFkZEludGVyZmFjZUFjdGlvbihJV29ya2JlbmNoUGFydCBwYXJ0KQl7Ci0JCXN1cGVyKHBhcnQpOwotCQlzZXRJZChJRCk7Ci0JCXNldFRleHQoTWVzc2FnZXMuX1VJX0FDVElPTl9BRERfUE9SVFRZUEUpOyAvLyROT04tTkxTLTEkCi0JCXNldEltYWdlRGVzY3JpcHRvcihBU0RFZGl0b3JQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yKCJpY29ucy9wb3J0dHlwZV9vYmouZ2lmIikpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJaWYgKGdldFNlbGVjdGVkT2JqZWN0cygpLnNpemUoKSA+IDApIHsKLQkJCU9iamVjdCBvID0gZ2V0U2VsZWN0ZWRPYmplY3RzKCkuZ2V0KDApOwotCi0JCQlpZiAobyBpbnN0YW5jZW9mIElDYXRlZ29yeUFkYXB0ZXIpIHsKLQkJCQlvID0gKChJQ2F0ZWdvcnlBZGFwdGVyKSBvKS5nZXRPd25lckRlc2NyaXB0aW9uKCk7Ci0JCQl9Ci0JCQkKLQkJCWlmIChvIGluc3RhbmNlb2YgSURlc2NyaXB0aW9uKSB7Ci0JCQkJQ29tbWFuZCBjb21tYW5kID0gKChJRGVzY3JpcHRpb24pIG8pLmdldEFkZEludGVyZmFjZUNvbW1hbmQoKTsKLQkJCSAgICBDb21tYW5kU3RhY2sgc3RhY2sgPSAoQ29tbWFuZFN0YWNrKSBBU0RFZGl0b3JQbHVnaW4uZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0QWRhcHRlcihDb21tYW5kU3RhY2suY2xhc3MpOwotCQkJICAgIHN0YWNrLmV4ZWN1dGUoY29tbWFuZCk7Ci0JCQkgICAgCi0JCQkgICAgaWYgKGNvbW1hbmQgaW5zdGFuY2VvZiBJQVNEQWRkQ29tbWFuZCkgewotCQkJICAgIAlPYmplY3QgZWxlbWVudCA9ICgoSUFTREFkZENvbW1hbmQpIGNvbW1hbmQpLmdldE5ld2x5QWRkZWRDb21wb25lbnQoKTsKLQkJCSAgICAJc2VsZWN0QW5kRGlyZWN0RWRpdChlbGVtZW50KTsKLQkJCSAgICB9Ci0JCQl9Ci0JCX0gIAotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RBZGRNZXNzYWdlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQWRkTWVzc2FnZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhY2QwN2E4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RBZGRNZXNzYWdlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZFN0YWNrOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSURlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklDYXRlZ29yeUFkYXB0ZXI7Ci0KLXB1YmxpYyBjbGFzcyBBU0RBZGRNZXNzYWdlQWN0aW9uIGV4dGVuZHMgQmFzZVNlbGVjdGlvbkFjdGlvbiB7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSUQgPSAiQVNEQWRkTWVzc2FnZUFjdGlvbiI7ICAvLyROT04tTkxTLTEkCi0JCi0JcHVibGljIEFTREFkZE1lc3NhZ2VBY3Rpb24oSVdvcmtiZW5jaFBhcnQgcGFydCkJewotCQlzdXBlcihwYXJ0KTsKLQkJc2V0SWQoSUQpOwotCQlzZXRUZXh0KE1lc3NhZ2VzLl9VSV9BQ1RJT05fQUREX01FU1NBR0UpOyAvLyROT04tTkxTLTEkCi0JCXNldEltYWdlRGVzY3JpcHRvcihBU0RFZGl0b3JQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yKCJpY29ucy9tZXNzYWdlX29iai5naWYiKSk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIHZvaWQgcnVuKCkgewotCQlpZiAoZ2V0U2VsZWN0ZWRPYmplY3RzKCkuc2l6ZSgpID4gMCkgewotCQkJT2JqZWN0IG8gPSBnZXRTZWxlY3RlZE9iamVjdHMoKS5nZXQoMCk7Ci0JCQkKLQkJCWlmIChvIGluc3RhbmNlb2YgSUNhdGVnb3J5QWRhcHRlcikgewotCQkJCW8gPSAoKElDYXRlZ29yeUFkYXB0ZXIpIG8pLmdldE93bmVyRGVzY3JpcHRpb24oKTsKLQkJCX0KLQkJCQotCQkJaWYgKG8gaW5zdGFuY2VvZiBJRGVzY3JpcHRpb24pIHsKLQkJCQlDb21tYW5kIGNvbW1hbmQgPSAoKElEZXNjcmlwdGlvbikgbykuZ2V0QWRkTWVzc2FnZUNvbW1hbmQoKTsKLQkJCSAgICBDb21tYW5kU3RhY2sgc3RhY2sgPSAoQ29tbWFuZFN0YWNrKSBBU0RFZGl0b3JQbHVnaW4uZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0QWRhcHRlcihDb21tYW5kU3RhY2suY2xhc3MpOwotCQkJICAgIHN0YWNrLmV4ZWN1dGUoY29tbWFuZCk7Ci0JCQkgICAgCi0JCQkgICAgaWYgKGNvbW1hbmQgaW5zdGFuY2VvZiBJQVNEQWRkQ29tbWFuZCkgewotCQkJICAgIAlPYmplY3Qgb2JqZWN0ID0gKChJQVNEQWRkQ29tbWFuZCkgY29tbWFuZCkuZ2V0TmV3bHlBZGRlZENvbXBvbmVudCgpOwotCQkJICAgIAlwZXJmb3JtU2VsZWN0aW9uKG9iamVjdCk7Ci0JCQkgICAgfQotCQkJfQotCQl9ICAKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREFkZE9wZXJhdGlvbkFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREFkZE9wZXJhdGlvbkFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTE5MzlhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RBZGRPcGVyYXRpb25BY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kU3RhY2s7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVBhcmFtZXRlcjsKLQotcHVibGljIGNsYXNzIEFTREFkZE9wZXJhdGlvbkFjdGlvbiBleHRlbmRzIEJhc2VTZWxlY3Rpb25BY3Rpb24gewkKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJRCA9ICJBU0RBZGRPcGVyYXRpb25BY3Rpb24iOyAgLy8kTk9OLU5MUy0xJAotCQotCXB1YmxpYyBBU0RBZGRPcGVyYXRpb25BY3Rpb24oSVdvcmtiZW5jaFBhcnQgcGFydCkJewotCQlzdXBlcihwYXJ0KTsKLQkJc2V0SWQoSUQpOwotCQlzZXRUZXh0KE1lc3NhZ2VzLl9VSV9BQ1RJT05fQUREX09QRVJBVElPTik7IC8vJE5PTi1OTFMtMSQKLQkJc2V0SW1hZ2VEZXNjcmlwdG9yKEFTREVkaXRvclBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3IoImljb25zL29wZXJhdGlvbl9vYmouZ2lmIikpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJaWYgKGdldFNlbGVjdGVkT2JqZWN0cygpLnNpemUoKSA+IDApIHsKLQkJCU9iamVjdCBvID0gZ2V0U2VsZWN0ZWRPYmplY3RzKCkuZ2V0KDApOwotCQkJSUludGVyZmFjZSB0aGVJbnRlcmZhY2UgPSBudWxsOwotCQkJCi0JCQlpZiAobyBpbnN0YW5jZW9mIElJbnRlcmZhY2UpIHsKLQkJCQl0aGVJbnRlcmZhY2UgPSAoSUludGVyZmFjZSkgbzsKLQkJCX0KLQkJCWVsc2UgaWYgKG8gaW5zdGFuY2VvZiBJT3BlcmF0aW9uKSB7Ci0JCQkJdGhlSW50ZXJmYWNlID0gKChJT3BlcmF0aW9uKSBvKS5nZXRPd25lckludGVyZmFjZSgpOwotCQkJfQotCQkJZWxzZSBpZiAobyBpbnN0YW5jZW9mIElNZXNzYWdlUmVmZXJlbmNlKSB7Ci0JCQkJdGhlSW50ZXJmYWNlID0gKChJTWVzc2FnZVJlZmVyZW5jZSkgbykuZ2V0T3duZXJPcGVyYXRpb24oKS5nZXRPd25lckludGVyZmFjZSgpOwotCQkJfQotCQkJZWxzZSBpZiAobyBpbnN0YW5jZW9mIElQYXJhbWV0ZXIpIHsKLQkJCQl0aGVJbnRlcmZhY2UgPSAoKElNZXNzYWdlUmVmZXJlbmNlKSAoKElQYXJhbWV0ZXIpIG8pLmdldE93bmVyKCkpLmdldE93bmVyT3BlcmF0aW9uKCkuZ2V0T3duZXJJbnRlcmZhY2UoKTsKLQkJCX0KLQkJCQotCQkJaWYgKHRoZUludGVyZmFjZSAhPSBudWxsKSB7Ci0JCQkJQ29tbWFuZCBjb21tYW5kID0gdGhlSW50ZXJmYWNlLmdldEFkZE9wZXJhdGlvbkNvbW1hbmQoKTsKLQkJCSAgICBDb21tYW5kU3RhY2sgc3RhY2sgPSAoQ29tbWFuZFN0YWNrKSBBU0RFZGl0b3JQbHVnaW4uZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0QWRhcHRlcihDb21tYW5kU3RhY2suY2xhc3MpOwotCQkJICAgIHN0YWNrLmV4ZWN1dGUoY29tbWFuZCk7Ci0JCQkgICAgCi0JCQkgICAgaWYgKGNvbW1hbmQgaW5zdGFuY2VvZiBJQVNEQWRkQ29tbWFuZCkgewotCQkJICAgIAlPYmplY3QgZWxlbWVudCA9ICgoSUFTREFkZENvbW1hbmQpIGNvbW1hbmQpLmdldE5ld2x5QWRkZWRDb21wb25lbnQoKTsKLQkJCSAgICAJc2VsZWN0QW5kRGlyZWN0RWRpdChlbGVtZW50KTsKLQkJCSAgICB9Ci0JCQl9Ci0JCX0gIAotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RBZGRPdXRwdXRBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RBZGRPdXRwdXRBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2EzNmFiZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQWRkT3V0cHV0QWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZFN0YWNrOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVBhcmFtZXRlcjsKLQotcHVibGljIGNsYXNzIEFTREFkZE91dHB1dEFjdGlvbiBleHRlbmRzIEJhc2VTZWxlY3Rpb25BY3Rpb24gewkKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJRCA9ICJBU0RBZGRPdXRwdXRBY3Rpb25uIjsgIC8vJE5PTi1OTFMtMSQKLQkKLQlwdWJsaWMgQVNEQWRkT3V0cHV0QWN0aW9uKElXb3JrYmVuY2hQYXJ0IHBhcnQpCXsKLQkJc3VwZXIocGFydCk7Ci0JCXNldElkKElEKTsKLQkJc2V0VGV4dChNZXNzYWdlcy5fVUlfQUNUSU9OX0FERF9PVVRQVVQpOyAvLyROT04tTkxTLTEkCi0JCXNldEltYWdlRGVzY3JpcHRvcihBU0RFZGl0b3JQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yKCJpY29ucy9vdXRwdXRfb2JqLmdpZiIpKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCWlmIChnZXRTZWxlY3RlZE9iamVjdHMoKS5zaXplKCkgPiAwKSB7Ci0JCQlPYmplY3QgbyA9IGdldFNlbGVjdGVkT2JqZWN0cygpLmdldCgwKTsKLQkJCUlPcGVyYXRpb24gaU9wZXJhdGlvbiA9IG51bGw7Ci0JCQkKLQkJCWlmIChvIGluc3RhbmNlb2YgSU9wZXJhdGlvbikgewotCQkJCWlPcGVyYXRpb24gPSAoSU9wZXJhdGlvbikgbzsKLQkJCX0KLQkJCWVsc2UgaWYgKG8gaW5zdGFuY2VvZiBJTWVzc2FnZVJlZmVyZW5jZSkgewotCQkJCWlPcGVyYXRpb24gPSAoKElNZXNzYWdlUmVmZXJlbmNlKSBvKS5nZXRPd25lck9wZXJhdGlvbigpOwotCQkJfQotCQkJZWxzZSBpZiAobyBpbnN0YW5jZW9mIElQYXJhbWV0ZXIpIHsKLQkJCQlpT3BlcmF0aW9uID0gKChJTWVzc2FnZVJlZmVyZW5jZSkgKChJUGFyYW1ldGVyKSBvKS5nZXRPd25lcigpKS5nZXRPd25lck9wZXJhdGlvbigpOwotCQkJfQotCQkJCi0JCQlpZiAoaU9wZXJhdGlvbiAhPSBudWxsKSB7Ci0JCQkJQ29tbWFuZCBjb21tYW5kID0gaU9wZXJhdGlvbi5nZXRBZGRPdXRwdXRDb21tYW5kKCk7Ci0JCQkgICAgQ29tbWFuZFN0YWNrIHN0YWNrID0gKENvbW1hbmRTdGFjaykgQVNERWRpdG9yUGx1Z2luLmdldEFjdGl2ZUVkaXRvcigpLmdldEFkYXB0ZXIoQ29tbWFuZFN0YWNrLmNsYXNzKTsKLQkJCSAgICBzdGFjay5leGVjdXRlKGNvbW1hbmQpOwotCQkJICAgIAotCQkJICAgIGlmIChjb21tYW5kIGluc3RhbmNlb2YgSUFTREFkZENvbW1hbmQpIHsKLQkJCSAgICAJT2JqZWN0IG9iamVjdCA9ICgoSUFTREFkZENvbW1hbmQpIGNvbW1hbmQpLmdldE5ld2x5QWRkZWRDb21wb25lbnQoKTsKLQkJCSAgICAJcGVyZm9ybVNlbGVjdGlvbihvYmplY3QpOwotCQkJICAgIH0KLQkJCX0KLQkJfSAgCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RBZGRQYXJhbWV0ZXJBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RBZGRQYXJhbWV0ZXJBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjE5NzBhOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQWRkUGFyYW1ldGVyQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZFN0YWNrOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMU1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklNZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVBhcmFtZXRlcjsKLQotcHVibGljIGNsYXNzIEFTREFkZFBhcmFtZXRlckFjdGlvbiBleHRlbmRzIEJhc2VTZWxlY3Rpb25BY3Rpb24geyAKLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBJRCA9ICJBU0RBZGRQYXJhbWV0ZXJBY3Rpb24iOyAgLy8kTk9OLU5MUy0xJAotICAgIAotICAgIHB1YmxpYyBBU0RBZGRQYXJhbWV0ZXJBY3Rpb24oSVdvcmtiZW5jaFBhcnQgcGFydCkgICB7Ci0gICAgICAgIHN1cGVyKHBhcnQpOwotICAgICAgICBzZXRJZChJRCk7Ci0gICAgICAgIHNldFRleHQoIkFkZCBQYXJhbWV0ZXIiKTsgICAvLyROT04tTkxTLTEkCi0gICAgICAgIHNldEltYWdlRGVzY3JpcHRvcihBU0RFZGl0b3JQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yKCJpY29ucy9pbnB1dF9vYmouZ2lmIikpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgaWYgKGdldFNlbGVjdGVkT2JqZWN0cygpLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAgIE9iamVjdCBvID0gZ2V0U2VsZWN0ZWRPYmplY3RzKCkuZ2V0KDApOwotICAgICAgICAgICAgSU1lc3NhZ2VSZWZlcmVuY2UgbWVzc2FnZVJlZmVyZW5jZSA9IG51bGw7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChvIGluc3RhbmNlb2YgSU1lc3NhZ2VSZWZlcmVuY2UpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIG1lc3NhZ2VSZWZlcmVuY2UgPSAoSU1lc3NhZ2VSZWZlcmVuY2UpbzsKLSAgICAgICAgICAgIH0gIAotICAgICAgICAgICAgZWxzZSBpZiAobyBpbnN0YW5jZW9mIElQYXJhbWV0ZXIpIHsKLSAgICAgICAgICAgICAgICBtZXNzYWdlUmVmZXJlbmNlID0gKChJTWVzc2FnZVJlZmVyZW5jZSkgKChJUGFyYW1ldGVyKSBvKS5nZXRPd25lcigpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG1lc3NhZ2VSZWZlcmVuY2UgaW5zdGFuY2VvZiBXMTFNZXNzYWdlUmVmZXJlbmNlKSB7Ci0gICAgICAgICAgICAgICAgVzExTWVzc2FnZVJlZmVyZW5jZSB3MTFNZXNzYWdlUmVmZXJlbmNlID0gKFcxMU1lc3NhZ2VSZWZlcmVuY2UpbWVzc2FnZVJlZmVyZW5jZTsgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIENvbW1hbmQgY29tbWFuZCA9IHcxMU1lc3NhZ2VSZWZlcmVuY2UuZ2V0QWRkUGFyYW10ZXJDb21tYW5kKCk7Ci0gICAgICAgICAgICAgICAgQ29tbWFuZFN0YWNrIHN0YWNrID0gKENvbW1hbmRTdGFjaykgQVNERWRpdG9yUGx1Z2luLmdldEFjdGl2ZUVkaXRvcigpLmdldEFkYXB0ZXIoQ29tbWFuZFN0YWNrLmNsYXNzKTsKLSAgICAgICAgICAgICAgICBzdGFjay5leGVjdXRlKGNvbW1hbmQpOwotICAgICAgICAgICAgICAgIAotCQkJICAgIGlmIChjb21tYW5kIGluc3RhbmNlb2YgSUFTREFkZENvbW1hbmQpIHsKLQkJCSAgICAJT2JqZWN0IG9iamVjdCA9ICgoSUFTREFkZENvbW1hbmQpIGNvbW1hbmQpLmdldE5ld2x5QWRkZWRDb21wb25lbnQoKTsKLQkJCSAgICAJc2VsZWN0QW5kRGlyZWN0RWRpdChvYmplY3QpOwotCQkJICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSAgCi0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREFkZFNjaGVtYUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREFkZFNjaGVtYUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTA0YjJkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RBZGRTY2hlbWFBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kU3RhY2s7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUuSUNhdGVnb3J5QWRhcHRlcjsKLQotcHVibGljIGNsYXNzIEFTREFkZFNjaGVtYUFjdGlvbiBleHRlbmRzIEJhc2VTZWxlY3Rpb25BY3Rpb24gewotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElEID0gIkFTREFkZFNjaGVtYUFjdGlvbiI7ICAvLyROT04tTkxTLTEkCi0JCi0JcHVibGljIEFTREFkZFNjaGVtYUFjdGlvbihJV29ya2JlbmNoUGFydCBwYXJ0KQl7Ci0JCXN1cGVyKHBhcnQpOwotCQlzZXRJZChJRCk7Ci0JCXNldFRleHQoTWVzc2FnZXMuX1VJX0FDVElPTl9BRERfU0NIRU1BKTsgLy8kTk9OLU5MUy0xJAotCQlzZXRJbWFnZURlc2NyaXB0b3IoQVNERWRpdG9yUGx1Z2luLmdldEltYWdlRGVzY3JpcHRvcigiaWNvbnMveHNkX29iai5naWYiKSk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIHZvaWQgcnVuKCkgewotCQlpZiAoZ2V0U2VsZWN0ZWRPYmplY3RzKCkuc2l6ZSgpID4gMCkgewotCQkJT2JqZWN0IG8gPSBnZXRTZWxlY3RlZE9iamVjdHMoKS5nZXQoMCk7Ci0JCQkKLQkJCWlmIChvIGluc3RhbmNlb2YgSUNhdGVnb3J5QWRhcHRlcikgewotCQkJCW8gPSAoKElDYXRlZ29yeUFkYXB0ZXIpIG8pLmdldE93bmVyRGVzY3JpcHRpb24oKTsKLQkJCX0KLQkJCQotCQkJaWYgKG8gaW5zdGFuY2VvZiBJRGVzY3JpcHRpb24pIHsKLQkJCQlDb21tYW5kIGNvbW1hbmQgPSAoKElEZXNjcmlwdGlvbikgbykuZ2V0QWRkU2NoZW1hQ29tbWFuZCgpOwotCQkJICAgIENvbW1hbmRTdGFjayBzdGFjayA9IChDb21tYW5kU3RhY2spIEFTREVkaXRvclBsdWdpbi5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKENvbW1hbmRTdGFjay5jbGFzcyk7Ci0JCQkgICAgc3RhY2suZXhlY3V0ZShjb21tYW5kKTsKLQkJCSAgICAKLQkJCSAgICBpZiAoY29tbWFuZCBpbnN0YW5jZW9mIElBU0RBZGRDb21tYW5kKSB7Ci0JCQkgICAgCU9iamVjdCBvYmplY3QgPSAoKElBU0RBZGRDb21tYW5kKSBjb21tYW5kKS5nZXROZXdseUFkZGVkQ29tcG9uZW50KCk7Ci0JCQkgICAgCXBlcmZvcm1TZWxlY3Rpb24ob2JqZWN0KTsKLQkJCSAgICB9Ci0JCQl9Ci0JCX0gIAotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQWRkU2VydmljZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREFkZFNlcnZpY2VBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWM2MzY4Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQWRkU2VydmljZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kU3RhY2s7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMuU2VydmljZUVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSURlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklDYXRlZ29yeUFkYXB0ZXI7Ci0KLXB1YmxpYyBjbGFzcyBBU0RBZGRTZXJ2aWNlQWN0aW9uIGV4dGVuZHMgQmFzZVNlbGVjdGlvbkFjdGlvbiB7CQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElEID0gIkFTREFkZFNlcnZpY2VBY3Rpb24iOyAgLy8kTk9OLU5MUy0xJAotCQotCXB1YmxpYyBBU0RBZGRTZXJ2aWNlQWN0aW9uKElXb3JrYmVuY2hQYXJ0IHBhcnQpCXsKLQkJc3VwZXIocGFydCk7Ci0JCXNldElkKElEKTsKLQkJc2V0VGV4dChNZXNzYWdlcy5fVUlfQUNUSU9OX0FERF9TRVJWSUNFKTsgLy8kTk9OLU5MUy0xJAotCQlzZXRJbWFnZURlc2NyaXB0b3IoQVNERWRpdG9yUGx1Z2luLmdldEltYWdlRGVzY3JpcHRvcigiaWNvbnMvc2VydmljZV9vYmouZ2lmIikpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJaWYgKGdldFNlbGVjdGVkT2JqZWN0cygpLnNpemUoKSA+IDApIHsKLQkJCU9iamVjdCBvID0gZ2V0U2VsZWN0ZWRPYmplY3RzKCkuZ2V0KDApOwotCQkJCi0JCQlpZiAobyBpbnN0YW5jZW9mIElDYXRlZ29yeUFkYXB0ZXIpIHsKLQkJCQlvID0gKChJQ2F0ZWdvcnlBZGFwdGVyKSBvKS5nZXRPd25lckRlc2NyaXB0aW9uKCk7Ci0JCQl9Ci0JCQkKLQkJCWlmIChvIGluc3RhbmNlb2YgSURlc2NyaXB0aW9uKSB7Ci0JCQkJQ29tbWFuZCBjb21tYW5kID0gKChJRGVzY3JpcHRpb24pIG8pLmdldEFkZFNlcnZpY2VDb21tYW5kKCk7Ci0JCQkgICAgQ29tbWFuZFN0YWNrIHN0YWNrID0gKENvbW1hbmRTdGFjaykgQVNERWRpdG9yUGx1Z2luLmdldEFjdGl2ZUVkaXRvcigpLmdldEFkYXB0ZXIoQ29tbWFuZFN0YWNrLmNsYXNzKTsKLQkJCSAgICBzdGFjay5leGVjdXRlKGNvbW1hbmQpOwotCQkJICAgIAotCQkJICAgIGlmIChjb21tYW5kIGluc3RhbmNlb2YgSUFTREFkZENvbW1hbmQpIHsKLQkJCSAgICAJT2JqZWN0IGVsZW1lbnQgPSAoKElBU0RBZGRDb21tYW5kKSBjb21tYW5kKS5nZXROZXdseUFkZGVkQ29tcG9uZW50KCk7Ci0JCQkgICAgCXNlbGVjdEFuZERpcmVjdEVkaXQoZWxlbWVudCk7Ci0JCQkgICAgfQotCQkJfQotCQl9ICAKLQl9Ci0JCi0JcHJvdGVjdGVkIHZvaWQgZG9EaXJlY3RFZGl0KEVkaXRQYXJ0IGVwKSB7Ci0JCWlmIChlcCBpbnN0YW5jZW9mIFNlcnZpY2VFZGl0UGFydCkgewotCQkJKChTZXJ2aWNlRWRpdFBhcnQpIGVwKS5wZXJmb3JtRGlyZWN0RWRpdChudWxsKTsKLQkJfQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQ2FwdHVyZVNjcmVlbkFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTRENhcHR1cmVTY3JlZW5BY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDU4OTQyNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEQ2FwdHVyZVNjcmVlbkFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvckFjdGlvbkRlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuQWN0aW9uRGVsZWdhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuYWN0aW9ucy5DYXB0dXJlU2NyZWVuQWN0aW9uOwotCi0KLS8qKgotICogT3VyIHNhbXBsZSBhY3Rpb24gaW1wbGVtZW50cyB3b3JrYmVuY2ggYWN0aW9uIGRlbGVnYXRlLgotICogVGhlIGFjdGlvbiBwcm94eSB3aWxsIGJlIGNyZWF0ZWQgYnkgdGhlIHdvcmtiZW5jaCBhbmQKLSAqIHNob3duIGluIHRoZSBVSS4gV2hlbiB0aGUgdXNlciB0cmllcyB0byB1c2UgdGhlIGFjdGlvbiwKLSAqIHRoaXMgZGVsZWdhdGUgd2lsbCBiZSBjcmVhdGVkIGFuZCBleGVjdXRpb24gd2lsbCBiZSAKLSAqIGRlbGVnYXRlZCB0byBpdC4KLSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvd0FjdGlvbkRlbGVnYXRlCi0gKi8KLXB1YmxpYyBjbGFzcyBBU0RDYXB0dXJlU2NyZWVuQWN0aW9uICBleHRlbmRzIEFjdGlvbkRlbGVnYXRlIGltcGxlbWVudHMgSUVkaXRvckFjdGlvbkRlbGVnYXRlIHsKLQkKLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIEFTRENhcHR1cmVTY3JlZW5BY3Rpb24oKSB7Ci0JfQotCi0JLyoqCi0JICogVGhlIGFjdGlvbiBoYXMgYmVlbiBhY3RpdmF0ZWQuIFRoZSBhcmd1bWVudCBvZiB0aGUKLQkgKiBtZXRob2QgcmVwcmVzZW50cyB0aGUgJ3JlYWwnIGFjdGlvbiBzaXR0aW5nCi0JICogaW4gdGhlIHdvcmtiZW5jaCBVSS4KLQkgKiBAc2VlIElXb3JrYmVuY2hXaW5kb3dBY3Rpb25EZWxlZ2F0ZSNydW4KLQkgKi8KLQlwdWJsaWMgdm9pZCBydW4oSUFjdGlvbiBhY3Rpb24pIHsKLQkJQ2FwdHVyZVNjcmVlbkFjdGlvbiBjYXB0dXJlU2NyZWVuQWN0aW9uID0gbmV3IENhcHR1cmVTY3JlZW5BY3Rpb24oKTsKLQkJY2FwdHVyZVNjcmVlbkFjdGlvbi5ydW4oKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0QWN0aXZlRWRpdG9yKElBY3Rpb24gYWN0aW9uLCBJRWRpdG9yUGFydCB0YXJnZXRFZGl0b3IpIHsKLSAgICAKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0REZWxldGVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0REZWxldGVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTlkZjE2My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNERGVsZXRlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZFN0YWNrOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklBU0RPYmplY3Q7Ci0KLXB1YmxpYyBjbGFzcyBBU0REZWxldGVBY3Rpb24gZXh0ZW5kcyBCYXNlU2VsZWN0aW9uQWN0aW9uIHsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJRCA9ICJBU0REZWxldGVBY3Rpb24iOyAgLy8kTk9OLU5MUy0xJAotCQotCXB1YmxpYyBBU0REZWxldGVBY3Rpb24oSVdvcmtiZW5jaFBhcnQgcGFydCkJewotCQlzdXBlcihwYXJ0KTsKLQkJc2V0SWQoSUQpOwotCQlzZXRUZXh0KE1lc3NhZ2VzLl9VSV9BQ1RJT05fREVMRVRFKTsgLy8kTk9OLU5MUy0xJAotCQlzZXRJbWFnZURlc2NyaXB0b3IoQVNERWRpdG9yUGx1Z2luLmdldEltYWdlRGVzY3JpcHRvcigiaWNvbnMvZGVsZXRlX29iai5naWYiKSk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIHZvaWQgcnVuKCkgewotCQlJdGVyYXRvciBpdCA9IGdldFNlbGVjdGVkT2JqZWN0cygpLml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLQkJCU9iamVjdCBvYmplY3QgPSBpdC5uZXh0KCk7Ci0JCQlDb21tYW5kIGNvbW1hbmQgPSBudWxsOwotCQkJCi0JCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgSUFTRE9iamVjdCkgewotCQkJCWNvbW1hbmQgPSAoKElBU0RPYmplY3QpIG9iamVjdCkuZ2V0RGVsZXRlQ29tbWFuZCgpOwotCQkJfQotCi0JCQlpZiAoY29tbWFuZCAhPSBudWxsKSB7Ci0JCQkgICAgQ29tbWFuZFN0YWNrIHN0YWNrID0gKENvbW1hbmRTdGFjaykgQVNERWRpdG9yUGx1Z2luLmdldEFjdGl2ZUVkaXRvcigpLmdldEFkYXB0ZXIoQ29tbWFuZFN0YWNrLmNsYXNzKTsKLQkJCSAgICBzdGFjay5leGVjdXRlKGNvbW1hbmQpOwotCi0JCQkgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFdTRExCYXNlQWRhcHRlcikgewotCQkJICAgIAlPYmplY3QgdGFyZ2V0ID0gKChXU0RMQmFzZUFkYXB0ZXIpIG9iamVjdCkuZ2V0VGFyZ2V0KCk7Ci0JCQkgICAgCWlmICh0YXJnZXQgaW5zdGFuY2VvZiBXU0RMRWxlbWVudCkgewotCQkJICAgIAkJcGVyZm9ybVNlbGVjdGlvbigoKFdTRExFbGVtZW50KSB0YXJnZXQpLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0JCQkgICAgCX0KLQkJCSAgICB9Ci0JCQl9Ci0JCX0gIAotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0REaXJlY3RFZGl0QWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNERGlyZWN0RWRpdEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNmQ1YmQ2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0REaXJlY3RFZGl0QWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuR3JhcGhpY2FsVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi51aS5hY3Rpb25zLkRpcmVjdEVkaXRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQVNET2JqZWN0OwotCi1wdWJsaWMgY2xhc3MgQVNERGlyZWN0RWRpdEFjdGlvbiBleHRlbmRzIERpcmVjdEVkaXRBY3Rpb24gewotCXByb3RlY3RlZCBJU2VsZWN0aW9uUHJvdmlkZXIgcHJvdmlkZXI7Ci0JCi0JLyoqCi0JICogU2FtZSBhcyB7QGxpbmsgI0RpcmVjdEVkaXRBY3Rpb24oSVdvcmtiZW5jaFBhcnQpfS4KLQkgKiBAcGFyYW0gZWRpdG9yIHRoZSBlZGl0b3IKLQkgKi8KLQlwdWJsaWMgQVNERGlyZWN0RWRpdEFjdGlvbihJRWRpdG9yUGFydCBlZGl0b3IpIHsKLQkJc3VwZXIoKElXb3JrYmVuY2hQYXJ0KWVkaXRvcik7Ci0JfQotCi0JLyoqCi0JICogQ29uc3RydWN0cyBhIERpcmVjdEVkaXRBY3Rpb24gdXNpbmcgdGhlIHNwZWNpZmllZCBwYXJ0LgotCSAqIEBwYXJhbSBwYXJ0IHRoZSB3b3JrYmVuY2ggcGFydAotCSAqLwotCXB1YmxpYyBBU0REaXJlY3RFZGl0QWN0aW9uKElXb3JrYmVuY2hQYXJ0IHBhcnQpIHsKLQkJc3VwZXIocGFydCk7Ci0JfQotCQotCSAgLyogKG5vbi1KYXZhZG9jKQotCSAgICogQHNlZSBvcmcuZWNsaXBzZS5nZWYudWkuYWN0aW9ucy5TZWxlY3Rpb25BY3Rpb24jZ2V0U2VsZWN0aW9uKCkKLQkgICAqLwotCSAgcHJvdGVjdGVkIElTZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCkKLQkgIHsKLQkJICAvLyBJZiB3ZSdyZSBpbiB0aGlzIGFjdGlvbiwgd2UgYXNzdW1lIHRoZSBhY3Rpb24gd2FzIGluaXRpYXRlZCB2aWEgdGhlIGdyYXBoaWNhbCB2aWV3ZXIuCi0JCSAgLy8gV2UgdXNlIHRoZSBncmFwaGljYWwgdmlldyB0byBvYnRhaW4gdGhlIHNlbGVjdGVkIGVkaXQgcGFydCBiZWNhdXNlIGZvciB1cywgb25lIG1vZGVsCi0JCSAgLy8gbWF5IGRyaXZlIG1vcmUgdGhhbiBvbmUgZWRpdCBwYXJ0LiAgU28gd2UgbmVlZCB0byBmaW5kIHRoZSBleGFjdCBlZGl0IHBhcnQgd2Ugd2lzaCB0bwotCQkgIC8vIGRpcmVjdCBlZGl0LiAgVGhlIHByZWZlcnJlZCBtZXRob2Qgb2YgZGV0ZXJtaW5pbmcgdGhlIGVkaXQgcGFydCB3b3VsZCBoYXZlIGJlZW4gdG8gZ28KLQkJICAvLyB0aHJvdWdoIHRoZSBzZWxlY3Rpb24gbWFuYWdlciwgdGhlbiB0aHJvdWdoIHRoZSBlZGl0IHBhcnQgcmVnaXN0cnkuICBIb3dldmVyLCB0aGUgc2VsZWN0aW9uCi0JCSAgLy8gbWFuYWdlciBvbmx5IHJldHVybnMgdGhlIG1vZGVsIG9iamVjdCAobm90IHRoZSBlZGl0IHBhcnQpLi4uLiBhbmQgc2luY2UgdGhlIG1vZGVsIG9iamVjdAotCQkgIC8vIG1heSBkcml2ZSBtb3JlIHRoYW4gb25lIGVkaXQgcGFydCwgdGhlIGVkaXQgcGFydCByZWdpc3RyeSBtYXkgcmV0dXJuIHRoZSAid3JvbmciIGVkaXQKLQkJICAvLyBwYXJ0IGZvciBkaXJlY3QgZWRpdGluZy4gIFRodXMgd2UgbG9vayBjYWxsIEdyYXBoaWNhbFZpZXdlci5nZXRGb2N1c0VkaXRQYXJ0KCkuCi0JCSAgSUVkaXRvclBhcnQgZWRpdG9yID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCSAgT2JqZWN0IG9iamVjdCA9IGVkaXRvci5nZXRBZGFwdGVyKEdyYXBoaWNhbFZpZXdlci5jbGFzcyk7Ci0JCSAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEdyYXBoaWNhbFZpZXdlcikgewotCQkJICBPYmplY3Qgc2VsZWN0aW9uID0gKChHcmFwaGljYWxWaWV3ZXIpIG9iamVjdCkuZ2V0Rm9jdXNFZGl0UGFydCgpOwotCQkJICByZXR1cm4gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oc2VsZWN0aW9uKTsKLQkJICB9Ci0JICAgIAotCSAgICByZXR1cm4gc3VwZXIuZ2V0U2VsZWN0aW9uKCk7Ci0JICB9Ci0JICAKLQkgIC8qIChub24tSmF2YWRvYykKLQkgICAqIEBzZWUgb3JnLmVjbGlwc2UuZ2VmLnVpLmFjdGlvbnMuU2VsZWN0aW9uQWN0aW9uI3NldFNlbGVjdGlvblByb3ZpZGVyKG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyKQotCSAgICovCi0JICBwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Qcm92aWRlcihJU2VsZWN0aW9uUHJvdmlkZXIgcHJvdmlkZXIpCi0JICB7Ci0JICAgIHN1cGVyLnNldFNlbGVjdGlvblByb3ZpZGVyKHByb3ZpZGVyKTsKLQkgICAgdGhpcy5wcm92aWRlciA9IHByb3ZpZGVyOwotCSAgfQotCSAgCi0JICBwcm90ZWN0ZWQgYm9vbGVhbiBjYWxjdWxhdGVFbmFibGVkKCkgewotCQkgIE9iamVjdCBzZWxlY3Rpb24gPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBnZXRTZWxlY3Rpb24oKSkuZ2V0Rmlyc3RFbGVtZW50KCk7Ci0JCSAgCi0JCSAgaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElBU0RPYmplY3QpIHsKLQkJCSAgcmV0dXJuICAhKChJQVNET2JqZWN0KSBzZWxlY3Rpb24pLmlzUmVhZE9ubHkoKTsKLQkJICB9Ci0JCSAgCi0JCSAgcmV0dXJuIHRydWU7Ci0JICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNERHJhZ0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTRERyYWdBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTkzYzgzYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNERHJhZ0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLklGaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LlBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5HcmFwaGljYWxFZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEFTRERyYWdBY3Rpb24gZXh0ZW5kcyBCYXNlU2VsZWN0aW9uQWN0aW9uIHsKLQlwcm90ZWN0ZWQgR3JhcGhpY2FsRWRpdFBhcnQgbW92aW5nQ2hpbGRFZGl0UGFydDsKLQlwcm90ZWN0ZWQgUG9pbnQgcG9pbnRlckxvY2F0aW9uOwotCQotCXB1YmxpYyBBU0REcmFnQWN0aW9uKElXb3JrYmVuY2hQYXJ0IHBhcnQpIHsKLQkJc3VwZXIocGFydCk7Ci0JfQotCQotCS8qCi0JICogU3ViLWNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIHRoaXMgbWV0aG9kLgotCSAqLwotCXB1YmxpYyBib29sZWFuIGNhbkV4ZWN1dGUoKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgZXhlY3V0ZSgpIHsKLQkJcnVuKCk7Ci0JfQotCQotCS8qCi0JICogU3ViLWNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIHRoaXMgbWV0aG9kLgotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0VW5kb0Rlc2NyaXB0aW9uKCkgewotCQlyZXR1cm4gIiI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JLyoKLQkgKiBTdWItY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRob2QuCi0JICovCi0JcHVibGljIElGaWd1cmUgZ2V0RmVlZGJhY2tGaWd1cmUoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0REcmFnUmVvcmRlckFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTRERyYWdSZW9yZGVyQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjNWEzZTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTRERyYWdSZW9yZGVyQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyODQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5Db21wYXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLklGaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLlBvbHlsaW5lOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUG9pbnRMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5SZWN0YW5nbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5HcmFwaGljYWxFZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklBU0RPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JUGFyYW1ldGVyOwotCi1wdWJsaWMgY2xhc3MgQVNERHJhZ1Jlb3JkZXJBY3Rpb24gZXh0ZW5kcyBBU0REcmFnQWN0aW9uIHsKLQkgIHByb3RlY3RlZCBJQVNET2JqZWN0IG1vdmluZ0NoaWxkOwotCSAgcHJvdGVjdGVkIElBU0RPYmplY3QgbmV3UGFyZW50OwotCSAgcHJvdGVjdGVkIEdyYXBoaWNhbEVkaXRQYXJ0IGxlZnRTaWJsaW5nRWRpdFBhcnQ7Ci0JICBwcm90ZWN0ZWQgR3JhcGhpY2FsRWRpdFBhcnQgcmlnaHRTaWJsaW5nRWRpdFBhcnQ7Ci0JICBwcm90ZWN0ZWQgSUFTRE9iamVjdCBsZWZ0U2liRWxlbWVudDsKLQkgIHByb3RlY3RlZCBJQVNET2JqZWN0IHJpZ2h0U2liRWxlbWVudDsKLQkgIHByb3RlY3RlZCBib29sZWFuIGNhbk5ldmVyRXhlY3V0ZSA9IGZhbHNlOwotCSAgCi0JICBwdWJsaWMgQVNERHJhZ1Jlb3JkZXJBY3Rpb24oR3JhcGhpY2FsRWRpdFBhcnQgbW92aW5nQ2hpbGRFZGl0UGFydCwgRWRpdFBhcnQgcG9pbnRlckVkaXRQYXJ0LCBQb2ludCBwb2ludGVyTG9jYXRpb24pIHsKLQkJICBzdXBlcihudWxsKTsKLQkgIAl0aGlzLm1vdmluZ0NoaWxkRWRpdFBhcnQgPSBtb3ZpbmdDaGlsZEVkaXRQYXJ0OwotCSAgCXRoaXMucG9pbnRlckxvY2F0aW9uID0gcG9pbnRlckxvY2F0aW9uOwotCi0JCUVkaXRQYXJ0IHBvc3NpYmxlUGFyZW50ID0gZ2V0UGFyZW50RWRpdFBhcnQocG9pbnRlckVkaXRQYXJ0KTsKLQkJCi0JCWlmICghKHBvc3NpYmxlUGFyZW50IGluc3RhbmNlb2YgR3JhcGhpY2FsRWRpdFBhcnQpKSB7Ci0JCQljYW5OZXZlckV4ZWN1dGUgPSB0cnVlOwotCQkJcmV0dXJuOwotCQl9Ci0JICAJCi0JCUdyYXBoaWNhbEVkaXRQYXJ0IHRhcmdldFBhcmVudEVkaXRQYXJ0ID0gKEdyYXBoaWNhbEVkaXRQYXJ0KSBwb3NzaWJsZVBhcmVudDsKLQkJCi0JCWlmIChwb2ludGVyRWRpdFBhcnQuZ2V0UGFyZW50KCkgIT0gbnVsbCkgewotCQkJLy8gU29ydCB0aGUgc2libGluZ3MgKGFuZCBpdHNlbGYpCi0JCQlMaXN0IHRhcmdldEVkaXRQYXJ0U2libGluZ3MgPSBwb2ludGVyRWRpdFBhcnQuZ2V0UGFyZW50KCkuZ2V0Q2hpbGRyZW4oKTsKLQkJCUNvbGxlY3Rpb25zLnNvcnQodGFyZ2V0RWRpdFBhcnRTaWJsaW5ncywgbmV3IFZlcnRpY2FsRWRpdFBhcnRDb21wYXJhdG9yKCkpOwotCSAgCi0JCQkvLyBHZXQgJ2xlZnQnIGFuZCAncmlnaHQnIHNpYmxpbmdzCi0JCQlsZWZ0U2libGluZ0VkaXRQYXJ0ID0gZ2V0VmVydGljYWxMZWZ0U2libGluZyh0YXJnZXRFZGl0UGFydFNpYmxpbmdzLCBtb3ZpbmdDaGlsZEVkaXRQYXJ0LCBwb2ludGVyTG9jYXRpb24pOwotCQkJcmlnaHRTaWJsaW5nRWRpdFBhcnQgPSBnZXRWZXJ0aWNhbFJpZ2h0U2libGluZyh0YXJnZXRFZGl0UGFydFNpYmxpbmdzLCBtb3ZpbmdDaGlsZEVkaXRQYXJ0LCBwb2ludGVyTG9jYXRpb24pOyAgICAgICAgICAgCQotCi0JCQlpZiAobW92aW5nQ2hpbGRFZGl0UGFydCAhPSBudWxsKQotCQkJCW1vdmluZ0NoaWxkID0gKElBU0RPYmplY3QpIG1vdmluZ0NoaWxkRWRpdFBhcnQuZ2V0TW9kZWwoKTsKLQkJCWlmIChsZWZ0U2libGluZ0VkaXRQYXJ0ICE9IG51bGwpCi0JCQkJbGVmdFNpYkVsZW1lbnQgPSAoSUFTRE9iamVjdCkgbGVmdFNpYmxpbmdFZGl0UGFydC5nZXRNb2RlbCgpOwotCQkJaWYgKHJpZ2h0U2libGluZ0VkaXRQYXJ0ICE9IG51bGwpCi0JCQkJcmlnaHRTaWJFbGVtZW50ID0gKElBU0RPYmplY3QpIHJpZ2h0U2libGluZ0VkaXRQYXJ0LmdldE1vZGVsKCk7Ci0JCQkKLQkJCW5ld1BhcmVudCA9IChJQVNET2JqZWN0KSB0YXJnZXRQYXJlbnRFZGl0UGFydC5nZXRNb2RlbCgpOwotCQl9Ci0JCWVsc2UgewotCQkJbmV3UGFyZW50ID0gKElBU0RPYmplY3QpIHRhcmdldFBhcmVudEVkaXRQYXJ0LmdldE1vZGVsKCk7Ci0JCQlsZWZ0U2liRWxlbWVudCA9IG51bGw7Ci0JCQlyaWdodFNpYkVsZW1lbnQ9IG51bGw7Ci0JCX0KLQkgIH0KLQkgICAgICAgICAgICAKLQkgIHB1YmxpYyBib29sZWFuIGNhbkV4ZWN1dGUoKQotCSAgewotCSAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotCSAgICAKLQkgICAgaWYgKGNhbk5ldmVyRXhlY3V0ZSB8fCBuZXdQYXJlbnQgPT0gbnVsbCB8fCBtb3ZpbmdDaGlsZCA9PSBudWxsKSB7Ci0JICAgIAlyZXR1cm4gZmFsc2U7Ci0JICAgIH0KLQkgICAgCi0JICAgIGlmIChtb3ZpbmdDaGlsZCBpbnN0YW5jZW9mIElNZXNzYWdlUmVmZXJlbmNlKSB7Ci0JICAgIAlJTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmID0gKElNZXNzYWdlUmVmZXJlbmNlKSBtb3ZpbmdDaGlsZDsKLQkgICAgCWlmIChtZXNzYWdlUmVmLmdldEtpbmQoKSA9PSBJTWVzc2FnZVJlZmVyZW5jZS5LSU5EX0lOUFVUIHx8IG1lc3NhZ2VSZWYuZ2V0S2luZCgpID09IElNZXNzYWdlUmVmZXJlbmNlLktJTkRfT1VUUFVUKSB7Ci0JICAgIAkJSU1lc3NhZ2VSZWZlcmVuY2UgbGVmdFNpYk1lc3NhZ2VSZWYgPSAoSU1lc3NhZ2VSZWZlcmVuY2UpIGxlZnRTaWJFbGVtZW50OwotCi0JICAgIAkJcmVzdWx0ID0gdHJ1ZTsKLQkgICAgCQlpZiAobGVmdFNpYk1lc3NhZ2VSZWYgIT0gbnVsbCkgewotCSAgICAJCQlpZiAobGVmdFNpYk1lc3NhZ2VSZWYuZ2V0S2luZCgpID09IElNZXNzYWdlUmVmZXJlbmNlLktJTkRfRkFVTFQpIHsKLQkgICAgCQkJCXJlc3VsdCA9IGZhbHNlOwotCSAgICAJCQl9Ci0JICAgIAkJfQotCSAgICAJCWlmICghKHJlc3VsdCAmJiBuZXdQYXJlbnQuZXF1YWxzKG1lc3NhZ2VSZWYuZ2V0T3duZXJPcGVyYXRpb24oKSkpKSB7Ci0JICAgIAkJCXJlc3VsdCA9IGZhbHNlOwotCSAgICAJCX0KLQkgICAgCX0KLQkgICAgfQotCSAgICBlbHNlIGlmIChtb3ZpbmdDaGlsZCBpbnN0YW5jZW9mIElQYXJhbWV0ZXIpIHsKLQkgICAgCWlmIChuZXdQYXJlbnQgaW5zdGFuY2VvZiBJTWVzc2FnZVJlZmVyZW5jZSAmJiBuZXdQYXJlbnQuZXF1YWxzKCgoSVBhcmFtZXRlcikgbW92aW5nQ2hpbGQpLmdldE93bmVyKCkpKSB7Ci0JICAgIAkJcmVzdWx0ID0gdHJ1ZTsKLQkgICAgCX0KLQkgICAgfQotCSAgICAKLQkgICAgcmV0dXJuIHJlc3VsdDsKLQkgIH0gICAgICAgICAgIAotCi0JICAvKgotCSAgICogQHNlZSBJQWN0aW9uI3J1bigpCi0JICAgKi8KLQkgIHB1YmxpYyB2b2lkIHJ1bigpCi0JICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotLy8JICAgIGJlZ2luUmVjb3JkaW5nKCk7Ci0JICAJaWYgKGNhbkV4ZWN1dGUoKSkgewotCSAgCQlpZiAobW92aW5nQ2hpbGQgaW5zdGFuY2VvZiBJTWVzc2FnZVJlZmVyZW5jZSkgewotCSAgCQkJT2JqZWN0IG1lc3NhZ2VSZWZPd25lciA9ICgoSU1lc3NhZ2VSZWZlcmVuY2UpIG1vdmluZ0NoaWxkKS5nZXRPd25lck9wZXJhdGlvbigpOwotCSAgCQkJaWYgKG1lc3NhZ2VSZWZPd25lciBpbnN0YW5jZW9mIElPcGVyYXRpb24pIHsKLQkgIAkJCQlJTWVzc2FnZVJlZmVyZW5jZSBsZWZ0U2liID0gKElNZXNzYWdlUmVmZXJlbmNlKSBsZWZ0U2liRWxlbWVudDsKLQkgIAkJCQlJTWVzc2FnZVJlZmVyZW5jZSByaWdodFNpYiA9IChJTWVzc2FnZVJlZmVyZW5jZSkgcmlnaHRTaWJFbGVtZW50OwotCSAgCQkJCUlNZXNzYWdlUmVmZXJlbmNlIG1vdmluZ1NpYiA9IChJTWVzc2FnZVJlZmVyZW5jZSkgbW92aW5nQ2hpbGQ7Ci0JICAJCQkJQ29tbWFuZCBjb21tYW5kID0gKChJT3BlcmF0aW9uKSBtZXNzYWdlUmVmT3duZXIpLmdldFJlb3JkZXJNZXNzYWdlUmVmZXJlbmNlc0NvbW1hbmQobGVmdFNpYiwgcmlnaHRTaWIsIG1vdmluZ1NpYik7Ci0JICAJCQkJY29tbWFuZC5leGVjdXRlKCk7Ci0JICAJCQl9Ci0JICAJCX0KLQkgIAkJZWxzZSBpZiAobW92aW5nQ2hpbGQgaW5zdGFuY2VvZiBJUGFyYW1ldGVyKSB7Ci0JICAJCQlPYmplY3QgcGFyYW1Pd25lciA9ICgoSVBhcmFtZXRlcikgbW92aW5nQ2hpbGQpLmdldE93bmVyKCk7Ci0JICAJCQlpZiAocGFyYW1Pd25lciBpbnN0YW5jZW9mIElNZXNzYWdlUmVmZXJlbmNlKSB7Ci0JICAJCQkJSVBhcmFtZXRlciBsZWZ0U2liID0gKElQYXJhbWV0ZXIpIGxlZnRTaWJFbGVtZW50OwotCSAgCQkJCUlQYXJhbWV0ZXIgcmlnaHRTaWIgPSAoSVBhcmFtZXRlcikgcmlnaHRTaWJFbGVtZW50OwotCSAgCQkJCUlQYXJhbWV0ZXIgbW92aW5nU2liID0gKElQYXJhbWV0ZXIpIG1vdmluZ0NoaWxkOwotCSAgCQkJCUNvbW1hbmQgY29tbWFuZCA9ICgoSU1lc3NhZ2VSZWZlcmVuY2UpIHBhcmFtT3duZXIpLmdldFJlb3JkZXJQYXJhbWV0ZXJzQ29tbWFuZChsZWZ0U2liLCByaWdodFNpYiwgbW92aW5nU2liKTsKLQkgIAkJCQljb21tYW5kLmV4ZWN1dGUoKTsKLQkgIAkJCX0KLQkgIAkJfQotLy8JICAJCXdzZGxFZGl0b3IuZ2V0U2VsZWN0aW9uTWFuYWdlcigpLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihtb3ZpbmdDaGlsZCkpOwotCSAgCX0KLS8vCSAgICBlbmRSZWNvcmRpbmcoKTsKLQkgIH0KLQkgIAotCSAgcHVibGljIElGaWd1cmUgZ2V0RmVlZGJhY2tGaWd1cmUoKSB7Ci0JICAJSUZpZ3VyZSBmZWVkYmFja0ZpZ3VyZSA9IG51bGw7Ci0JICAgIGlmIChmZWVkYmFja0ZpZ3VyZSA9PSBudWxsICYmIG1vdmluZ0NoaWxkRWRpdFBhcnQgaW5zdGFuY2VvZiBHcmFwaGljYWxFZGl0UGFydCkKLQkgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotCSAgICAgIGZlZWRiYWNrRmlndXJlID0gbmV3IFBvbHlsaW5lKCk7Ci0JICAgICAgKChQb2x5bGluZSlmZWVkYmFja0ZpZ3VyZSkuc2V0TGluZVdpZHRoKDIpOwkKLQkgICAgICBkcmF3TGluZXMoKFBvbHlsaW5lKSBmZWVkYmFja0ZpZ3VyZSk7Ci0JICAgIH0KLQkgICAgCi0JICAJcmV0dXJuIGZlZWRiYWNrRmlndXJlOwotCSAgfQotCi0JICAvKiBSZXR1cm4gYSBQb2ludExpc3Qgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIGFkZCBhIGZlZWRiYWNrIGZpZ3VyZS4gIFRoZSBmZWVkYmFjayBmaWd1cmUgd2lsbCBiZSBhCi0JICAgKiBQb2x5bGluZSBjb21wb3NlZCBvZiB0aGUgUG9pbnRzIGluIHRoZSBQb2ludExpc3QKLQkgICAqLwotCSAgcHJpdmF0ZSBQb2ludExpc3QgZHJhd0xpbmVzKFBvbHlsaW5lIHBvbHlMaW5lKSB7Ci0JICAgIFBvaW50TGlzdCBwb2ludExpc3QgPSBuZXcgUG9pbnRMaXN0KCk7IAotCSAgICAKLQkgICAgaWYgKGxlZnRTaWJsaW5nRWRpdFBhcnQgIT0gbnVsbCkgewotCSAgICAJUmVjdGFuZ2xlIGxlZnRSZWN0YW5nbGUgPSBsZWZ0U2libGluZ0VkaXRQYXJ0LmdldEZpZ3VyZSgpLmdldEJvdW5kcygpOwotCQkgICAJaW50IHhDb29yZCA9IGxlZnRSZWN0YW5nbGUueDsKLQkJICAJaW50IHlDb29yZCA9IGxlZnRSZWN0YW5nbGUueTsKLQkJICAgCWludCBoZWlnaHQgPSBsZWZ0UmVjdGFuZ2xlLmhlaWdodDsKLQkJICAgCWludCB3aWR0aCA9IGxlZnRSZWN0YW5nbGUud2lkdGg7Ci0KLQkJICAgCS8vIERyYXcgbGVmdCBlbmQgbGluZQotCQkgICAJYWRkTGluZVRvUG9seWxpbmUocG9seUxpbmUsIHhDb29yZCwgeUNvb3JkICsgaGVpZ2h0ICsgMywgeENvb3JkLCB5Q29vcmQgKyBoZWlnaHQgLSAzKTsKLQkJICAgCWFkZExpbmVUb1BvbHlsaW5lKHBvbHlMaW5lLCB4Q29vcmQsIHlDb29yZCArIGhlaWdodCAtIDMsIHhDb29yZCwgeUNvb3JkICsgaGVpZ2h0KTsKLQkJICAgCQotCQkgICAJLy8gRHJhdyBob3Jpem9udGFsIGxpbmUKLQkJICAgCWFkZExpbmVUb1BvbHlsaW5lKHBvbHlMaW5lLCB4Q29vcmQsIHlDb29yZCArIGhlaWdodCwgeENvb3JkICsgd2lkdGgsIHlDb29yZCArIGhlaWdodCk7Ci0JCSAgIAkKLQkJICAgCS8vIERyYXcgcmlnaHQgZW5kIGxpbmUKLQkJICAgCWFkZExpbmVUb1BvbHlsaW5lKHBvbHlMaW5lLCB4Q29vcmQgKyB3aWR0aCwgeUNvb3JkICsgaGVpZ2h0LCB4Q29vcmQgKyB3aWR0aCwgeUNvb3JkICsgaGVpZ2h0IC0gMyk7Ci0JCSAgCWFkZExpbmVUb1BvbHlsaW5lKHBvbHlMaW5lLCB4Q29vcmQgKyB3aWR0aCwgeUNvb3JkICsgaGVpZ2h0LCB4Q29vcmQgKyB3aWR0aCwgeUNvb3JkICsgaGVpZ2h0ICsgMyk7ICAgCQotCSAgICB9Ci0JICAgIGVsc2UgaWYgKHJpZ2h0U2libGluZ0VkaXRQYXJ0ICE9IG51bGwpIHsKLQkgICAgCVJlY3RhbmdsZSByaWdodFJlY3RhbmdsZSA9IHJpZ2h0U2libGluZ0VkaXRQYXJ0LmdldEZpZ3VyZSgpLmdldEJvdW5kcygpOwotCSAgICAJaW50IHhDb29yZCA9IHJpZ2h0UmVjdGFuZ2xlLng7Ci0JICAgIAlpbnQgeUNvb3JkID0gcmlnaHRSZWN0YW5nbGUueTsKLQkgICAJCWludCB3aWR0aCA9IHJpZ2h0UmVjdGFuZ2xlLndpZHRoOwkKLQotCSAgIAkJLy8gRHJhdyBsZWZ0IGVuZCBsaW5lCi0JCSAgIAlhZGRMaW5lVG9Qb2x5bGluZShwb2x5TGluZSwgeENvb3JkLCB5Q29vcmQgKyAzLCB4Q29vcmQsIHlDb29yZCAtIDMpOwotCQkgICAJYWRkTGluZVRvUG9seWxpbmUocG9seUxpbmUsIHhDb29yZCwgeUNvb3JkIC0gMywgeENvb3JkLCB5Q29vcmQpOwotCQkgICAJCi0JCSAgIAkvLyBEcmF3IGhvcml6b250YWwgbGluZQotCQkgICAJYWRkTGluZVRvUG9seWxpbmUocG9seUxpbmUsIHhDb29yZCwgeUNvb3JkLCB4Q29vcmQgKyB3aWR0aCwgeUNvb3JkKTsKLQkJICAgCQotCQkgICAJLy8gRHJhdyByaWdodCBlbmQgbGluZQotCQkgICAJYWRkTGluZVRvUG9seWxpbmUocG9seUxpbmUsIHhDb29yZCArIHdpZHRoLCB5Q29vcmQsIHhDb29yZCArIHdpZHRoLCB5Q29vcmQgLSAzKTsKLQkJICAJYWRkTGluZVRvUG9seWxpbmUocG9seUxpbmUsIHhDb29yZCArIHdpZHRoLCB5Q29vcmQsIHhDb29yZCArIHdpZHRoLCB5Q29vcmQgKyAzKTsgICAKLQkgICAgfQotCi0JICAgIHJldHVybiBwb2ludExpc3Q7Ci0JICB9ICAgICAgICAgICAgICAgICAgICAKLQkgIAotCSAgcHJvdGVjdGVkIFBvbHlsaW5lIGFkZExpbmVUb1BvbHlsaW5lKFBvbHlsaW5lIHBvbHlsaW5lLCBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIpIHsKLQkJcG9seWxpbmUuYWRkUG9pbnQobmV3IFBvaW50KHgxLCB5MSkpOwotCQlwb2x5bGluZS5hZGRQb2ludChuZXcgUG9pbnQoeDIsIHkyKSk7Ci0KLQkJcmV0dXJuIHBvbHlsaW5lOwotCSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotCSAgCi0JICAvKgotCSAgICogUHJlLWNvbmRpdGlvbjogVGhlIExpc3Qgc2libGluZ3Mgc2hvdWxkIGJlIHNvcnRlZCBieSBpdCdzIHktY29vcmRpbmF0ZSAKLQkgICAqLwotCSAgcHJpdmF0ZSBHcmFwaGljYWxFZGl0UGFydCBnZXRWZXJ0aWNhbFJpZ2h0U2libGluZyhMaXN0IHNpYmxpbmdzLCBHcmFwaGljYWxFZGl0UGFydCBtb3ZpbmdFZGl0UGFydCwgUG9pbnQgcG9pbnRlckxvY2F0aW9uKSB7Ci0JICAJR3JhcGhpY2FsRWRpdFBhcnQgcmlnaHRTaWJsaW5nID0gbnVsbDsKLQkgIAlpbnQgcG9pbnRlcllMb2NhdGlvbiA9IHBvaW50ZXJMb2NhdGlvbi55OwotCi0JICAJZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IHNpYmxpbmdzLnNpemUoKTsgaW5kZXgrKykgewotCSAgCQlHcmFwaGljYWxFZGl0UGFydCBzaWJsaW5nID0gKEdyYXBoaWNhbEVkaXRQYXJ0KSBzaWJsaW5ncy5nZXQoaW5kZXgpOwotCSAgCQlpbnQgc2libGluZ1lMb2NhdGlvbiA9IHNpYmxpbmcuZ2V0RmlndXJlKCkuZ2V0Qm91bmRzKCkuZ2V0Q2VudGVyKCkueTsKLQotCSAgCQlpZiAoc2libGluZ1lMb2NhdGlvbiA+IHBvaW50ZXJZTG9jYXRpb24pIHsKLQkgIAkJCXJpZ2h0U2libGluZyA9IHNpYmxpbmc7Ci0JICAJCQlicmVhazsKLQkgIAkJfQotCSAgCX0KLQkgIAkKLQkgIAlyZXR1cm4gcmlnaHRTaWJsaW5nOwotCSAgfQotCi0JICAvKgotCSAgICogUHJlLWNvbmRpdGlvbjogVGhlIExpc3Qgc2libGluZ3Mgc2hvdWxkIGJlIHNvcnRlZCBieSBpdCdzIHktY29vcmRpbmF0ZSAKLQkgICAqLwotCSAgcHJpdmF0ZSBHcmFwaGljYWxFZGl0UGFydCBnZXRWZXJ0aWNhbExlZnRTaWJsaW5nKExpc3Qgc2libGluZ3MsIEdyYXBoaWNhbEVkaXRQYXJ0IG1vdmluZ0VkaXRQYXJ0LCBQb2ludCBwb2ludGVyTG9jYXRpb24pIHsKLQkgIAlHcmFwaGljYWxFZGl0UGFydCBsZWZ0U2libGluZyA9IG51bGw7Ci0JICAJaW50IHBvaW50ZXJZTG9jYXRpb24gPSBwb2ludGVyTG9jYXRpb24ueTsKLQotCSAgCWludCBpbmRleDsKLQkgIAlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBzaWJsaW5ncy5zaXplKCk7IGluZGV4KyspIHsKLQkgIAkJR3JhcGhpY2FsRWRpdFBhcnQgc2libGluZyA9IChHcmFwaGljYWxFZGl0UGFydCkgc2libGluZ3MuZ2V0KGluZGV4KTsKLQkgIAkJaW50IHNpYmxpbmdZTG9jYXRpb24gPSBzaWJsaW5nLmdldEZpZ3VyZSgpLmdldEJvdW5kcygpLmdldENlbnRlcigpLnk7Ci0JICAJICAJCi0JICAJCWlmIChzaWJsaW5nWUxvY2F0aW9uID4gcG9pbnRlcllMb2NhdGlvbikgewotCSAgCQkJaWYgKGluZGV4ID4gMCkgewotCSAgCQkJCWxlZnRTaWJsaW5nID0gKEdyYXBoaWNhbEVkaXRQYXJ0KSBzaWJsaW5ncy5nZXQoaW5kZXggLSAxKTsKLQkgIAkJCX0KLQotCSAgCQkJYnJlYWs7Ci0JICAJCX0KLQkgIAl9Ci0KLQkgIAlpZiAoaW5kZXggPT0gc2libGluZ3Muc2l6ZSgpKSB7Ci0JICAJCWxlZnRTaWJsaW5nID0gKEdyYXBoaWNhbEVkaXRQYXJ0KSBzaWJsaW5ncy5nZXQoaW5kZXggLSAxKTsKLQkgIAl9Ci0KLQkgIAlyZXR1cm4gbGVmdFNpYmxpbmc7Ci0JICB9Ci0JICAKLQkgIHByb3RlY3RlZCBFZGl0UGFydCBnZXRQYXJlbnRFZGl0UGFydChFZGl0UGFydCB0YXJnZXQpCi0JICB7Ci0JICAJcmV0dXJuIHRhcmdldC5nZXRQYXJlbnQoKTsKLQkgIH0KLQotCSAgcHJpdmF0ZSBjbGFzcyBWZXJ0aWNhbEVkaXRQYXJ0Q29tcGFyYXRvciBpbXBsZW1lbnRzIENvbXBhcmF0b3IgewotCSAgCQotCSAgCXB1YmxpYyBWZXJ0aWNhbEVkaXRQYXJ0Q29tcGFyYXRvcigpIHsKLQkgIAl9Ci0JICAJCi0JICAJcHVibGljIGludCBjb21wYXJlKE9iamVjdCBwYXJ0MSwgT2JqZWN0IHBhcnQyKSB7Ci0JICAJCWludCBjb21wYXJlVmFsdWUgPSAwOwotCi0JICAJCWlmIChwYXJ0MSBpbnN0YW5jZW9mIEdyYXBoaWNhbEVkaXRQYXJ0ICYmIHBhcnQyIGluc3RhbmNlb2YgR3JhcGhpY2FsRWRpdFBhcnQpIHsKLQkgIAkJCUdyYXBoaWNhbEVkaXRQYXJ0IGVkaXRQYXJ0MSA9IChHcmFwaGljYWxFZGl0UGFydCkgcGFydDE7Ci0JICAJCQlHcmFwaGljYWxFZGl0UGFydCBlZGl0UGFydDIgPSAoR3JhcGhpY2FsRWRpdFBhcnQpIHBhcnQyOwotCSAgCQkJCi0JICAJCQlpbnQgZWRpdFBhcnQxWSA9IGVkaXRQYXJ0MS5nZXRGaWd1cmUoKS5nZXRCb3VuZHMoKS5nZXRDZW50ZXIoKS55OwotCSAgCQkJaW50IGVkaXRQYXJ0MlkgPSBlZGl0UGFydDIuZ2V0RmlndXJlKCkuZ2V0Qm91bmRzKCkuZ2V0Q2VudGVyKCkueTsKLQkgIAkJCQotCSAgCQkJSW50ZWdlciBpbnRlZ2VyUGFydDEgPSBuZXcgSW50ZWdlcihlZGl0UGFydDFZKTsKLQkgIAkJCUludGVnZXIgaW50ZWdlclBhcnQyID0gbmV3IEludGVnZXIoZWRpdFBhcnQyWSk7Ci0JICAJCQkKLQkgIAkJCWNvbXBhcmVWYWx1ZSA9IGludGVnZXJQYXJ0MS5jb21wYXJlVG8oaW50ZWdlclBhcnQyKTsKLQkgIAkJfQotCi0JICAJCXJldHVybiBjb21wYXJlVmFsdWU7Ci0JICAJfQotCSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RFZGl0TmFtZXNwYWNlc0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREVkaXROYW1lc3BhY2VzQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1YjcyN2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREVkaXROYW1lc3BhY2VzQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZFN0YWNrOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuY29tbWFuZHMuVzExRWRpdE5hbWVzcGFjZXNDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUuSUNhdGVnb3J5QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5kaWFsb2dzLkVkaXROYW1lc3BhY2VzRGlhbG9nOwotCi1wdWJsaWMgY2xhc3MgQVNERWRpdE5hbWVzcGFjZXNBY3Rpb24gZXh0ZW5kcyBCYXNlU2VsZWN0aW9uQWN0aW9uIHsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJRCA9ICJBU0RFZGl0TmFtZXNwYWNlc0FjdGlvbiI7ICAvLyROT04tTkxTLTEkCi0JCi0JcHJpdmF0ZSBJRGVzY3JpcHRpb24gZGVzY3JpcHRpb247Ci0JCi0JcHVibGljIEFTREVkaXROYW1lc3BhY2VzQWN0aW9uKElXb3JrYmVuY2hQYXJ0IHBhcnQsIElEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikgewotCQlzdXBlcihwYXJ0KTsKLQkJc2V0SWQoSUQpOwotCQlTdHJpbmcgdGV4dCA9IE1lc3NhZ2VzLl9VSV9FRElUX05BTUVTUEFDRVM7IC8vJE5PTi1OTFMtMSQKLQkJc2V0VGV4dCh0ZXh0KTsKLQkJCi0JCXRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKLQl9Ci0JCi0JcHVibGljIHZvaWQgcnVuKCkgewotCQlPYmplY3QgbyA9IGRlc2NyaXB0aW9uOwotCQlpZiAoZ2V0U2VsZWN0ZWRPYmplY3RzKCkuc2l6ZSgpID4gMCkgewotCQkJaWYgKG8gaW5zdGFuY2VvZiBJQ2F0ZWdvcnlBZGFwdGVyKSB7Ci0JCQkJbyA9ICgoSUNhdGVnb3J5QWRhcHRlcikgbykuZ2V0T3duZXJEZXNjcmlwdGlvbigpOwotCQkJfQotCQl9Ci0JCQotCQlpZiAobyBpbnN0YW5jZW9mIElEZXNjcmlwdGlvbikgewotCQkJLy8gVE9ETzogVGhlIGNvZGUgYmVsb3cgaXMgbm90IGdlbmVyaWMuICBXZSBuZWVkIHRvIHJldmlzaXQgdGhpcyB0byBlbnN1cmUgaXQgaXMKLQkJCS8vIGdlbmVyaWMuICBJRGVzY3JpcHRpb24gbmVlZHMgYSBnZXROYW1lc3BhY2VzSW5mbygpIGFuZCBnZXRFZGl0TmFtZXNwYWNlc0NvbW1hbmQoKS4uLgotCQkJSURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gKElEZXNjcmlwdGlvbikgbzsKLQkJCVcxMURlc2NyaXB0aW9uIHcxMURlc2NyaXB0aW9uID0gKFcxMURlc2NyaXB0aW9uKSBvOwotCQkJRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gKERlZmluaXRpb24pIHcxMURlc2NyaXB0aW9uLmdldFRhcmdldCgpOwotCQkJCi0JCQlJUGF0aCBwYXRoID0gbmV3IFBhdGgoZGVmaW5pdGlvbi5nZXREb2N1bWVudEJhc2VVUkkoKSk7Ci0JCQlMaXN0IG5hbWVzcGFjZUluZm9MaXN0ID0gdzExRGVzY3JpcHRpb24uZ2V0TmFtZXNwYWNlc0luZm8oKTsKLQkJCVN0cmluZyB0bnMgPSBkZXNjcmlwdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLQkJCUVkaXROYW1lc3BhY2VzRGlhbG9nIGRpYWxvZyA9IG5ldyBFZGl0TmFtZXNwYWNlc0RpYWxvZyhXU0RMRWRpdG9yUGx1Z2luLmdldFNoZWxsKCksIHBhdGgsIE1lc3NhZ2VzLl9VSV9FRElUX05BTUVTUEFDRVNfRElBTE9HX1RJVExFLCB0bnMsIG5hbWVzcGFjZUluZm9MaXN0KTsgLy8kTk9OLU5MUy0xJAotCQkJaW50IHJjID0gZGlhbG9nLmNyZWF0ZUFuZE9wZW4oKTsKLQkJCWlmIChyYyA9PSBJRGlhbG9nQ29uc3RhbnRzLk9LX0lEKSB7Ci0JCQkJTGlzdCBuZXdJbmZvTGlzdCA9IGRpYWxvZy5nZXROYW1lc3BhY2VJbmZvTGlzdCgpOwotCQkJCVcxMUVkaXROYW1lc3BhY2VzQ29tbWFuZCBjb21tYW5kID0gKFcxMUVkaXROYW1lc3BhY2VzQ29tbWFuZCkgdzExRGVzY3JpcHRpb24uZ2V0RWRpdE5hbWVzcGFjZXNDb21tYW5kKCk7Ci0JCQkJY29tbWFuZC5zZXROYW1lc3BhY2VzSW5mbyhuZXdJbmZvTGlzdCk7Ci0JCQkJY29tbWFuZC5zZXRUYXJnZXROYW1lc3BhY2UoZGlhbG9nLmdldFRhcmdldE5hbWVzcGFjZSgpKTsKLQkJCQlDb21tYW5kU3RhY2sgc3RhY2sgPSAoQ29tbWFuZFN0YWNrKSBBU0RFZGl0b3JQbHVnaW4uZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0QWRhcHRlcihDb21tYW5kU3RhY2suY2xhc3MpOwotCQkJICAgIHN0YWNrLmV4ZWN1dGUoY29tbWFuZCk7Ci0JCSAgICB9Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNER2VuZXJhdGVCaW5kaW5nQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNER2VuZXJhdGVCaW5kaW5nQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxYTM1OTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTREdlbmVyYXRlQmluZGluZ0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmRTdGFjazsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklCaW5kaW5nOwotCi1wdWJsaWMgY2xhc3MgQVNER2VuZXJhdGVCaW5kaW5nQWN0aW9uIGV4dGVuZHMgQmFzZVNlbGVjdGlvbkFjdGlvbiB7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSUQgPSAiQVNER2VuZXJhdGVCaW5kaW5nQWN0aW9ubiI7ICAvLyROT04tTkxTLTEkCi0JCi0JcHVibGljIEFTREdlbmVyYXRlQmluZGluZ0FjdGlvbihJV29ya2JlbmNoUGFydCBwYXJ0KQl7Ci0JCXN1cGVyKHBhcnQpOwotCQlzZXRJZChJRCk7Ci0JCXNldFRleHQoTWVzc2FnZXMuX1VJX0dFTkVSQVRFX0JJTkRJTkdfQ09OVEVOVCk7ICAgLy8kTk9OLU5MUy0xJAotLy8JCXNldEltYWdlRGVzY3JpcHRvcihXU0RMRWRpdG9yUGx1Z2luLmdldEltYWdlRGVzY3JpcHRvcigiaWNvbnMvaW5wdXRfb2JqLmdpZiIpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgcnVuKCkgewotIAkJaWYgKGdldFNlbGVjdGVkT2JqZWN0cygpLnNpemUoKSA+IDApIHsKLQkJCU9iamVjdCBvID0gZ2V0U2VsZWN0ZWRPYmplY3RzKCkuZ2V0KDApOwotCQkJCi0JCQlpZiAobyBpbnN0YW5jZW9mIElCaW5kaW5nKSB7Ci0JCQkJQ29tbWFuZCBjb21tYW5kID0gKChJQmluZGluZykgbykuZ2V0R2VuZXJhdGVCaW5kaW5nQ29tbWFuZCgpOwotCQkJICAgIENvbW1hbmRTdGFjayBzdGFjayA9IChDb21tYW5kU3RhY2spIEFTREVkaXRvclBsdWdpbi5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKENvbW1hbmRTdGFjay5jbGFzcyk7Ci0JCQkgICAgc3RhY2suZXhlY3V0ZShjb21tYW5kKTsKLQkJCX0KLQkJCQotCQkJcGVyZm9ybVNlbGVjdGlvbihvKTsKLQkJfSAgCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTRE9wZW5TY2hlbWFBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RPcGVuU2NoZW1hQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5NTFlMWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTRE9wZW5TY2hlbWFBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLnV0aWwuSU9wZW5FeHRlcm5hbEVkaXRvckhlbHBlcjsKLQotcHVibGljIGNsYXNzIEFTRE9wZW5TY2hlbWFBY3Rpb24gZXh0ZW5kcyBCYXNlU2VsZWN0aW9uQWN0aW9uIHsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJRCA9ICJBU0RPcGVuU2NoZW1hQWN0aW9uIjsgIC8vJE5PTi1OTFMtMSQKLQkKLQlwdWJsaWMgQVNET3BlblNjaGVtYUFjdGlvbihJV29ya2JlbmNoUGFydCBwYXJ0KQl7Ci0JCXN1cGVyKHBhcnQpOwotCQlzZXRJZChJRCk7Ci0JCXNldFRleHQoTWVzc2FnZXMuX1VJX0FDVElPTl9PUEVOX1NDSEVNQSk7IC8vJE5PTi1OTFMtMSQKLS8vCQlzZXRJbWFnZURlc2NyaXB0b3IoQVNERWRpdG9yUGx1Z2luLmdldEltYWdlRGVzY3JpcHRvcigiaWNvbnMvYmluZGluZ19vYmouZ2lmIikpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJaWYgKGdldFNlbGVjdGVkT2JqZWN0cygpLnNpemUoKSA+IDApIHsKLQkJCU9iamVjdCBvID0gZ2V0U2VsZWN0ZWRPYmplY3RzKCkuZ2V0KDApOwotCi0JCQlpZiAobyBpbnN0YW5jZW9mIElUeXBlKSB7Ci0JCQkJSUVkaXRvclBhcnQgZWRpdG9yID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCQkJT2JqZWN0IGhlbHBlciA9IGVkaXRvci5nZXRBZGFwdGVyKElPcGVuRXh0ZXJuYWxFZGl0b3JIZWxwZXIuY2xhc3MpOwotCQkJCWlmIChoZWxwZXIgaW5zdGFuY2VvZiBJT3BlbkV4dGVybmFsRWRpdG9ySGVscGVyKSB7Ci0JCQkJCSgoSU9wZW5FeHRlcm5hbEVkaXRvckhlbHBlcikgaGVscGVyKS5zZXRNb2RlbChvKTsKLQkJCQkJKChJT3BlbkV4dGVybmFsRWRpdG9ySGVscGVyKSBoZWxwZXIpLm9wZW5FeHRlcm5hbEVkaXRvcigpOwotCQkJCX0KLQkJCX0KLQkJfSAgCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTRFNldEV4aXN0aW5nQmluZGluZ0FjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTRFNldEV4aXN0aW5nQmluZGluZ0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTc4NTIyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RTZXRFeGlzdGluZ0JpbmRpbmdBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5zZWFyY2guZGlhbG9ncy5Db21wb25lbnRTcGVjaWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklFbmRQb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLlJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5JQ29tcG9uZW50RGlhbG9nOwotCi1wdWJsaWMgY2xhc3MgQVNEU2V0RXhpc3RpbmdCaW5kaW5nQWN0aW9uIGV4dGVuZHMgQmFzZVNlbGVjdGlvbkFjdGlvbiB7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSUQgPSAiQVNEU2V0RXhpc3RpbmdCaW5kaW5nQWN0aW9uIjsgLy8kTk9OLU5MUy0xJAotCXByb3RlY3RlZCBJRW5kUG9pbnQgZW5kUG9pbnQ7Ci0JCi0JcHVibGljIEFTRFNldEV4aXN0aW5nQmluZGluZ0FjdGlvbihJV29ya2JlbmNoUGFydCBwYXJ0KQl7Ci0JCXN1cGVyKHBhcnQpOwotCQlzZXRJZChJRCk7Ci0JCXNldFRleHQoTWVzc2FnZXMuX1VJX0FDVElPTl9FWElTVElOR19CSU5ESU5HKTsgLy8kTk9OLU5MUy0xJAotLy8JCXNldEltYWdlRGVzY3JpcHRvcihXU0RMRWRpdG9yUGx1Z2luLmdldEltYWdlRGVzY3JpcHRvcigiaWNvbnMvc2VydmljZV9vYmouZ2lmIikpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRJRW5kUG9pbnQoSUVuZFBvaW50IGVuZFBvaW50KSB7Ci0JCXRoaXMuZW5kUG9pbnQgPSBlbmRQb2ludDsKLQl9Ci0JCi0JcHVibGljIHZvaWQgcnVuKCkgewkJCi0JCWlmIChlbmRQb2ludCA9PSBudWxsKSB7Ci0JCQlpZiAoZ2V0U2VsZWN0ZWRPYmplY3RzKCkuc2l6ZSgpID4gMCkgewotCQkJCU9iamVjdCBvID0gZ2V0U2VsZWN0ZWRPYmplY3RzKCkuZ2V0KDApOwotCQkJCWlmIChvIGluc3RhbmNlb2YgSUVuZFBvaW50KSB7Ci0JCQkJCWVuZFBvaW50ID0gKElFbmRQb2ludCkgbzsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJCi0gICAgICAgIENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIHJlZk1hbmFnZXIgPSBSZWZlcmVuY2VFZGl0TWFuYWdlckhlbHBlci5nZXRCaW5kaW5nUmVmZXJlbmNlRWRpdE1hbmFnZXIoZW5kUG9pbnQpOwotCQlpZiAoZW5kUG9pbnQgIT0gbnVsbCAmJiByZWZNYW5hZ2VyICE9IG51bGwpIHsKLQkJCUlDb21wb25lbnREaWFsb2cgZGlhbG9nID0gcmVmTWFuYWdlci5nZXRCcm93c2VEaWFsb2coKTsKLQkJCWlmIChkaWFsb2cuY3JlYXRlQW5kT3BlbigpID09IFdpbmRvdy5PSykgewotCQkJCUNvbXBvbmVudFNwZWNpZmljYXRpb24gc3BlYyA9IGRpYWxvZy5nZXRTZWxlY3RlZENvbXBvbmVudCgpOwotCQkJCXJlZk1hbmFnZXIubW9kaWZ5Q29tcG9uZW50UmVmZXJlbmNlKGVuZFBvaW50LCBzcGVjKTsKLQkJCX0KLQkJfQotCQkKLQkJZW5kUG9pbnQgPSBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RTZXRFeGlzdGluZ0ludGVyZmFjZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTRFNldEV4aXN0aW5nSW50ZXJmYWNlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2MDVjYTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTRFNldEV4aXN0aW5nSW50ZXJmYWNlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuQ29tcG9uZW50U3BlY2lmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLlJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5JQ29tcG9uZW50RGlhbG9nOwotCi1wdWJsaWMgY2xhc3MgQVNEU2V0RXhpc3RpbmdJbnRlcmZhY2VBY3Rpb24gZXh0ZW5kcyBCYXNlU2VsZWN0aW9uQWN0aW9uIHsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJRCA9ICJBU0RTZXRFeGlzdGluZ0ludGVyZmFjZUFjdGlvbiI7IC8vJE5PTi1OTFMtMSQKLQlwcm90ZWN0ZWQgSUJpbmRpbmcgYmluZGluZzsKLQkKLQlwdWJsaWMgQVNEU2V0RXhpc3RpbmdJbnRlcmZhY2VBY3Rpb24oSVdvcmtiZW5jaFBhcnQgcGFydCkJewotCQlzdXBlcihwYXJ0KTsKLQkJc2V0SWQoSUQpOwotCQlzZXRUZXh0KE1lc3NhZ2VzLl9VSV9BQ1RJT05fRVhJU1RJTkdfUE9SVFRZUEUpOyAvLyROT04tTkxTLTEkCi0vLwkJc2V0SW1hZ2VEZXNjcmlwdG9yKFdTRExFZGl0b3JQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yKCJpY29ucy9zZXJ2aWNlX29iai5naWYiKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldElCaW5kaW5nKElCaW5kaW5nIGJpbmRpbmcpIHsKLQkJdGhpcy5iaW5kaW5nID0gYmluZGluZzsKLQl9Ci0JCi0JcHVibGljIHZvaWQgcnVuKCkgewkJCi0JCWlmIChiaW5kaW5nID09IG51bGwpIHsKLQkJCWlmIChnZXRTZWxlY3RlZE9iamVjdHMoKS5zaXplKCkgPiAwKSB7Ci0JCQkJT2JqZWN0IG8gPSBnZXRTZWxlY3RlZE9iamVjdHMoKS5nZXQoMCk7Ci0JCQkJaWYgKG8gaW5zdGFuY2VvZiBJQmluZGluZykgewotCQkJCQliaW5kaW5nID0gKElCaW5kaW5nKSBvOwotCQkJCX0KLQkJCX0KLQkJfQotCQkKLSAgICAgICAgQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgcmVmTWFuYWdlciA9IFJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyLmdldEludGVyZmFjZVJlZmVyZW5jZUVkaXRNYW5hZ2VyKGJpbmRpbmcpOwotICAgICAgICBpZiAoYmluZGluZyAhPSBudWxsICYmIHJlZk1hbmFnZXIgIT0gbnVsbCkgewotCQkJSUNvbXBvbmVudERpYWxvZyBkaWFsb2cgPSByZWZNYW5hZ2VyLmdldEJyb3dzZURpYWxvZygpOwotCQkJaWYgKGRpYWxvZy5jcmVhdGVBbmRPcGVuKCkgPT0gV2luZG93Lk9LKSB7Ci0JCQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBzcGVjID0gZGlhbG9nLmdldFNlbGVjdGVkQ29tcG9uZW50KCk7Ci0JCQkJcmVmTWFuYWdlci5tb2RpZnlDb21wb25lbnRSZWZlcmVuY2UoYmluZGluZywgc3BlYyk7Ci0JCQl9Ci0JCX0KLQkJCi0JCWJpbmRpbmcgPSBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RTZXROZXdCaW5kaW5nQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQVNEU2V0TmV3QmluZGluZ0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNmRhOThjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RTZXROZXdCaW5kaW5nQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuQ29tcG9uZW50U3BlY2lmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRW5kUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5SZWZlcmVuY2VFZGl0TWFuYWdlckhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0LkNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuSUNvbXBvbmVudERpYWxvZzsKLQotcHVibGljIGNsYXNzIEFTRFNldE5ld0JpbmRpbmdBY3Rpb24gZXh0ZW5kcyBCYXNlU2VsZWN0aW9uQWN0aW9uIHsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJRCA9ICJBU0RTZXROZXdCaW5kaW5nQWN0aW9uIjsgLy8kTk9OLU5MUy0xJAotCXByb3RlY3RlZCBJRW5kUG9pbnQgZW5kUG9pbnQ7Ci0JCi0JcHVibGljIEFTRFNldE5ld0JpbmRpbmdBY3Rpb24oSVdvcmtiZW5jaFBhcnQgcGFydCkJewotCQlzdXBlcihwYXJ0KTsKLQkJc2V0SWQoSUQpOwotCQlzZXRUZXh0KE1lc3NhZ2VzLl9VSV9BQ1RJT05fTkVXX0JJTkRJTkcpOyAvLyROT04tTkxTLTEkCi0vLwkJc2V0SW1hZ2VEZXNjcmlwdG9yKFdTRExFZGl0b3JQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yKCJpY29ucy9zZXJ2aWNlX29iai5naWYiKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldElFbmRQb2ludChJRW5kUG9pbnQgZW5kUG9pbnQpIHsKLQkJdGhpcy5lbmRQb2ludCA9IGVuZFBvaW50OwotCX0KLQkKLQlwdWJsaWMgdm9pZCBydW4oKSB7CQkKLQkJaWYgKGVuZFBvaW50ID09IG51bGwpIHsKLQkJCWlmIChnZXRTZWxlY3RlZE9iamVjdHMoKS5zaXplKCkgPiAwKSB7Ci0JCQkJT2JqZWN0IG8gPSBnZXRTZWxlY3RlZE9iamVjdHMoKS5nZXQoMCk7Ci0JCQkJaWYgKG8gaW5zdGFuY2VvZiBJRW5kUG9pbnQpIHsKLQkJCQkJZW5kUG9pbnQgPSAoSUVuZFBvaW50KSBvOwotCQkJCX0KLQkJCX0KLQkJfQotCQkKLSAgICAgICAgQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgcmVmTWFuYWdlciA9IFJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyLmdldEJpbmRpbmdSZWZlcmVuY2VFZGl0TWFuYWdlcihlbmRQb2ludCk7Ci0gICAgICAgIGlmIChlbmRQb2ludCAhPSBudWxsICYmIHJlZk1hbmFnZXIgIT0gbnVsbCkgewotCQkJSUNvbXBvbmVudERpYWxvZyBkaWFsb2cgPSByZWZNYW5hZ2VyLmdldE5ld0RpYWxvZygpOwotCQkJaWYgKGRpYWxvZy5jcmVhdGVBbmRPcGVuKCkgPT0gV2luZG93Lk9LKSB7Ci0JCQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBzcGVjID0gZGlhbG9nLmdldFNlbGVjdGVkQ29tcG9uZW50KCk7Ci0JCQkJcmVmTWFuYWdlci5tb2RpZnlDb21wb25lbnRSZWZlcmVuY2UoZW5kUG9pbnQsIHNwZWMpOwotCQkJfQotCQl9Ci0JCQotCQllbmRQb2ludCA9IG51bGw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTRFNldE5ld0ludGVyZmFjZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0FTRFNldE5ld0ludGVyZmFjZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMmFlYzQyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9BU0RTZXROZXdJbnRlcmZhY2VBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5zZWFyY2guZGlhbG9ncy5Db21wb25lbnRTcGVjaWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklCaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuUmVmZXJlbmNlRWRpdE1hbmFnZXJIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5Db21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0LklDb21wb25lbnREaWFsb2c7Ci0KLXB1YmxpYyBjbGFzcyBBU0RTZXROZXdJbnRlcmZhY2VBY3Rpb24gZXh0ZW5kcyBCYXNlU2VsZWN0aW9uQWN0aW9uIHsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJRCA9ICJBU0RTZXROZXdJbnRlcmZhY2VBY3Rpb24iOyAvLyROT04tTkxTLTEkCi0JcHJvdGVjdGVkIElCaW5kaW5nIGJpbmRpbmc7Ci0JCi0JcHVibGljIEFTRFNldE5ld0ludGVyZmFjZUFjdGlvbihJV29ya2JlbmNoUGFydCBwYXJ0KQl7Ci0JCXN1cGVyKHBhcnQpOwotCQlzZXRJZChJRCk7Ci0JCXNldFRleHQoTWVzc2FnZXMuX1VJX0FDVElPTl9ORVdfUE9SVFRZUEUpOyAvLyROT04tTkxTLTEkCi0vLwkJc2V0SW1hZ2VEZXNjcmlwdG9yKFdTRExFZGl0b3JQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yKCJpY29ucy9zZXJ2aWNlX29iai5naWYiKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldElCaW5kaW5nKElCaW5kaW5nIGJpbmRpbmcpIHsKLQkJdGhpcy5iaW5kaW5nID0gYmluZGluZzsKLQl9Ci0JCi0JcHVibGljIHZvaWQgcnVuKCkgewkJCi0JCWlmIChiaW5kaW5nID09IG51bGwpIHsKLQkJCWlmIChnZXRTZWxlY3RlZE9iamVjdHMoKS5zaXplKCkgPiAwKSB7Ci0JCQkJT2JqZWN0IG8gPSBnZXRTZWxlY3RlZE9iamVjdHMoKS5nZXQoMCk7Ci0JCQkJaWYgKG8gaW5zdGFuY2VvZiBJQmluZGluZykgewotCQkJCQliaW5kaW5nID0gKElCaW5kaW5nKSBvOwotCQkJCX0KLQkJCX0KLQkJfQotCQkKLSAgICAgICAgQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgcmVmTWFuYWdlciA9IFJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyLmdldEludGVyZmFjZVJlZmVyZW5jZUVkaXRNYW5hZ2VyKGJpbmRpbmcpOwotCQlpZiAoYmluZGluZyAhPSBudWxsICYmIHJlZk1hbmFnZXIgIT0gbnVsbCkgewotCQkJSUNvbXBvbmVudERpYWxvZyBkaWFsb2cgPSByZWZNYW5hZ2VyLmdldE5ld0RpYWxvZygpOwotCQkJaWYgKGRpYWxvZy5jcmVhdGVBbmRPcGVuKCkgPT0gV2luZG93Lk9LKSB7Ci0JCQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBzcGVjID0gZGlhbG9nLmdldFNlbGVjdGVkQ29tcG9uZW50KCk7Ci0JCQkJcmVmTWFuYWdlci5tb2RpZnlDb21wb25lbnRSZWZlcmVuY2UoYmluZGluZywgc3BlYyk7Ci0JCQl9Ci0JCX0KLQkJCi0JCWJpbmRpbmcgPSBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9CYXNlU2VsZWN0aW9uQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvQmFzZVNlbGVjdGlvbkFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNWJjMWEyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvYWN0aW9ucy9CYXNlU2VsZWN0aW9uQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkdyYXBoaWNhbFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuUmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuUmVxdWVzdENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYudWkuYWN0aW9ucy5TZWxlY3Rpb25BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLnVpLnBhcnRzLkFic3RyYWN0RWRpdFBhcnRWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5Db250ZW50T3V0bGluZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5tb2RlbC5BYnN0cmFjdE1vZGVsQ29sbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklBU0RPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5XU0RMQWRhcHRlckZhY3RvcnlIZWxwZXI7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBCYXNlU2VsZWN0aW9uQWN0aW9uIGV4dGVuZHMgU2VsZWN0aW9uQWN0aW9uCi17Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNVQk1FTlVfU1RBUlRfSUQgPSAiU1VCTUVOVV9TVEFSVF9JRDogIjsgLy8kTk9OLU5MUy0xJAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTVUJNRU5VX0VORF9JRCA9ICJTVUJNRU5VX0VORF9JRDogIjsgLy8kTk9OLU5MUy0xJAotICAKLSAgcHJvdGVjdGVkIElTZWxlY3Rpb25Qcm92aWRlciBwcm92aWRlcjsKLSAgCi0gIHB1YmxpYyBCYXNlU2VsZWN0aW9uQWN0aW9uKElXb3JrYmVuY2hQYXJ0IHBhcnQpCi0gIHsKLSAgICBzdXBlcihwYXJ0KTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmdlZi51aS5hY3Rpb25zLlNlbGVjdGlvbkFjdGlvbiNnZXRTZWxlY3Rpb24oKQotICAgKi8KLSAgcHJvdGVjdGVkIElTZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCkKLSAgewotICAgIC8vIGFsd2F5cyBnZXQgc2VsZWN0aW9uIGZyb20gc2VsZWN0aW9uIHByb3ZpZGVyIGZpcnN0Ci0gICAgaWYgKHByb3ZpZGVyIT1udWxsKQotICAgICAgcmV0dXJuIHByb3ZpZGVyLmdldFNlbGVjdGlvbigpOwotICAgIAotICAgIHJldHVybiBzdXBlci5nZXRTZWxlY3Rpb24oKTsKLSAgfQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuZ2VmLnVpLmFjdGlvbnMuU2VsZWN0aW9uQWN0aW9uI3NldFNlbGVjdGlvblByb3ZpZGVyKG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uUHJvdmlkZXIoSVNlbGVjdGlvblByb3ZpZGVyIHByb3ZpZGVyKQotICB7Ci0gICAgc3VwZXIuc2V0U2VsZWN0aW9uUHJvdmlkZXIocHJvdmlkZXIpOwotICAgIHRoaXMucHJvdmlkZXIgPSBwcm92aWRlcjsKLSAgfQotICAKLSAgcHVibGljIExpc3QgZ2V0U2VsZWN0ZWRPYmplY3RzKCkKLSAgewotCSAgTGlzdCBwcm9jZXNzZWRPYmplY3RzID0gbmV3IEFycmF5TGlzdCgpOwotCSAgTGlzdCBvYmplY3RzID0gc3VwZXIuZ2V0U2VsZWN0ZWRPYmplY3RzKCk7Ci0JICBJdGVyYXRvciBpdCA9IG9iamVjdHMuaXRlcmF0b3IoKTsKLQkgIHdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLQkJICBPYmplY3QgaXRlbSA9IGl0Lm5leHQoKTsKLQkJICBpZiAoaXRlbSBpbnN0YW5jZW9mIEFic3RyYWN0TW9kZWxDb2xsZWN0aW9uKSB7Ci0JCQkgIHByb2Nlc3NlZE9iamVjdHMuYWRkKCgoQWJzdHJhY3RNb2RlbENvbGxlY3Rpb24pIGl0ZW0pLmdldE1vZGVsKCkpOwotCQkgIH0KLQkJICBlbHNlIHsKLQkJCSAgcHJvY2Vzc2VkT2JqZWN0cy5hZGQoaXRlbSk7Ci0JCSAgfQotCSAgfQotCSAgCi0JICByZXR1cm4gcHJvY2Vzc2VkT2JqZWN0czsKLSAgfQotICAKLSAgcHJvdGVjdGVkIGJvb2xlYW4gY2FsY3VsYXRlRW5hYmxlZCgpIHsKLQkgIE9iamVjdCBzZWxlY3Rpb24gPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBnZXRTZWxlY3Rpb24oKSkuZ2V0Rmlyc3RFbGVtZW50KCk7Ci0JICAKLQkgIGlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJQVNET2JqZWN0KSB7Ci0JCSAgcmV0dXJuICAhKChJQVNET2JqZWN0KSBzZWxlY3Rpb24pLmlzUmVhZE9ubHkoKTsKLQkgIH0KLQkgIAotCSAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCB2b2lkIHNlbGVjdEFuZERpcmVjdEVkaXQoZmluYWwgT2JqZWN0IG8pIHsKLQkgIFJ1bm5hYmxlIHJ1bm5hYmxlID0gbmV3IFJ1bm5hYmxlKCkgewotCQkgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCSAgaWYgKG8gaW5zdGFuY2VvZiBOb3RpZmllcikgewotCQkJCSAgcGVyZm9ybVNlbGVjdGlvbihvKTsKLQkJCQkgIGFjdGl2YXRlRGlyZWN0RWRpdCgpOwotCQkJICB9Ci0JCSAgfX07Ci0JCSAgRGlzcGxheS5nZXRDdXJyZW50KCkuYXN5bmNFeGVjKHJ1bm5hYmxlKTsKLSAgfQotCi0JcHJvdGVjdGVkIHZvaWQgYWN0aXZhdGVEaXJlY3RFZGl0KCkgewotCQlJV29ya2JlbmNoUGFydCBwYXJ0ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlUGFydCgpOwotCQlpZiAoIShwYXJ0IGluc3RhbmNlb2YgQ29udGVudE91dGxpbmUpKSB7Ci0JCQlJRWRpdG9yUGFydCBlZGl0b3IgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLQkJCU9iamVjdCBncmFwaGljYWxWaWV3ZXIgPSBlZGl0b3IuZ2V0QWRhcHRlcihHcmFwaGljYWxWaWV3ZXIuY2xhc3MpOwotCQkJaWYgKGdyYXBoaWNhbFZpZXdlciBpbnN0YW5jZW9mIEFic3RyYWN0RWRpdFBhcnRWaWV3ZXIpIHsKLQkJCQlBYnN0cmFjdEVkaXRQYXJ0Vmlld2VyIHZpZXdlciA9IChBYnN0cmFjdEVkaXRQYXJ0Vmlld2VyKSBncmFwaGljYWxWaWV3ZXI7Ci0JCQkJT2JqZWN0IG9iaiA9IHZpZXdlci5nZXRTZWxlY3RlZEVkaXRQYXJ0cygpLmdldCgwKTsKLQkJCQkvLyB0b2RvOiBybWFoOiB3ZSBuZWVkIHRvIGNvbXBsZXRlbHkgcmVtb3ZlIGFsbCBpbXBsZW1lbnRhdGlvbnMgb2YgZG9EaXJlY3RFZGl0KCkuCi0JCQkJLy8gVXNlIHBlcmZvcm1SZXF1ZXN0KCkgaW5zdGVhZC4KLS8vCQkJCWRvRGlyZWN0RWRpdCgoRWRpdFBhcnQpIG9iaik7Ci0JCQkJUmVxdWVzdCByZXF1ZXN0ID0gbmV3IFJlcXVlc3QoKTsKLQkJCQlyZXF1ZXN0LnNldFR5cGUoUmVxdWVzdENvbnN0YW50cy5SRVFfRElSRUNUX0VESVQpOwotCQkJCSgoRWRpdFBhcnQpIG9iaikucGVyZm9ybVJlcXVlc3QocmVxdWVzdCk7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JcHJvdGVjdGVkIHZvaWQgZG9EaXJlY3RFZGl0KEVkaXRQYXJ0IGVwKSB7Ci0JCVJlcXVlc3QgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KCk7Ci0JCXJlcXVlc3Quc2V0VHlwZShSZXF1ZXN0Q29uc3RhbnRzLlJFUV9ESVJFQ1RfRURJVCk7Ci0JCWVwLnBlcmZvcm1SZXF1ZXN0KHJlcXVlc3QpOwotCX0KLQkKLSAgICBwcm90ZWN0ZWQgdm9pZCBwZXJmb3JtU2VsZWN0aW9uKE9iamVjdCBvYmplY3QpIHsKLSAgICAJT2JqZWN0IGFkYXB0ZWQgPSBudWxsOwotICAgIAkKLQkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIE5vdGlmaWVyKSB7Ci0JCQlOb3RpZmllciBlbGVtZW50ID0gKE5vdGlmaWVyKSBvYmplY3Q7Ci0JCQkvLyBUT0RPOiBXZSBzaG91bGRuJ3Qga25vdyBhYm91dCBXU0RMQWRhcHRlckZhY3RvcnlIZWxwZXIgaGVyZS4uLi4KLQkJCWFkYXB0ZWQgPSBXU0RMQWRhcHRlckZhY3RvcnlIZWxwZXIuZ2V0SW5zdGFuY2UoKS5hZGFwdChlbGVtZW50KTsJCQkKLQkJfQotCQllbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBJQVNET2JqZWN0KSB7Ci0JCQlhZGFwdGVkID0gb2JqZWN0OwotCQl9Ci0KLQkJaWYgKGFkYXB0ZWQgIT0gbnVsbCkgewotCSAgICAJdHJ5IHsKLQkJICAgICAgICBJRWRpdG9yUGFydCBlZGl0b3IgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLQkJICAgICAgICBpZiAoZWRpdG9yICE9IG51bGwgJiYgZWRpdG9yLmdldEFkYXB0ZXIoSVNlbGVjdGlvblByb3ZpZGVyLmNsYXNzKSAhPSBudWxsKSB7Ci0JCSAgICAgICAgCUlTZWxlY3Rpb25Qcm92aWRlciBwcm92aWRlciA9IChJU2VsZWN0aW9uUHJvdmlkZXIpIGVkaXRvci5nZXRBZGFwdGVyKElTZWxlY3Rpb25Qcm92aWRlci5jbGFzcyk7Ci0JCSAgICAgICAgCWlmIChwcm92aWRlciAhPSBudWxsKSB7Ci0JCSAgICAgICAgCQlwcm92aWRlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oYWRhcHRlZCkpOwotCQkgICAgICAgIAl9Ci0JCSAgICAgICAgfQotCSAgICAJfQotCSAgICAJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQotCQl9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL0lBU0RBZGRDb21tYW5kLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvSUFTREFkZENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTUyZWUwYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvSUFTREFkZENvbW1hbmQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9uczsKLQotcHVibGljIGludGVyZmFjZSBJQVNEQWRkQ29tbWFuZCB7Ci0JcHVibGljIE9iamVjdCBnZXROZXdseUFkZGVkQ29tcG9uZW50KCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvU2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2FjdGlvbnMvU2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmNDQ3YWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9hY3Rpb25zL1Nob3dQcm9wZXJ0aWVzVmlld0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotCi0KLS8qKgotICogU2hvdyB0aGUgcHJvcGVydGllcyB2aWV3IGluIHRoZSBjdXJyZW50IHBlcnNwZWN0aXZlLgotICovCi1wdWJsaWMgY2xhc3MgU2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uIGV4dGVuZHMgQmFzZVNlbGVjdGlvbkFjdGlvbgotewotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEID0gIm9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLlNob3dQcm9wZXJ0aWVzVmlld0FjdGlvbiI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9QRVJUSUVTX1ZJRVdfSUQgPSAib3JnLmVjbGlwc2UudWkudmlld3MuUHJvcGVydHlTaGVldCI7IC8vJE5PTi1OTFMtMSQKLQkKLSAgcHJvdGVjdGVkIHN0YXRpYyBJbWFnZURlc2NyaXB0b3IgZW5hYmxlZEltYWdlLCBkaXNhYmxlZEltYWdlOwotCi0JcHVibGljIFNob3dQcm9wZXJ0aWVzVmlld0FjdGlvbihJV29ya2JlbmNoUGFydCBwYXJ0KQotICB7Ci0JCXN1cGVyKHBhcnQpOwotCQlzZXRJZChJRCk7Ci0JCXNldFRleHQoTWVzc2FnZXMuX1VJX0FDVElPTl9TSE9XX1BST1BFUlRJRVMpOwotCQlzZXRUb29sVGlwVGV4dChnZXRUZXh0KCkpOwotICAgIHNldEltYWdlRGVzY3JpcHRvcihBU0RFZGl0b3JQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbigiaWNvbnMvZWxjbDE2L3Nob3dwcm9wZXJ0aWVzX29iai5naWYiKSApOyAvLyROT04tTkxTLTEkCi0JICBzZXREaXNhYmxlZEltYWdlRGVzY3JpcHRvcihBU0RFZGl0b3JQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbigiaWNvbnMvZGxjbDE2L3Nob3dwcm9wZXJ0aWVzX29iai5naWYiKSApOyAvLyROT04tTkxTLTEkCi0JfQotICAKLSAgcHJvdGVjdGVkIGJvb2xlYW4gY2FsY3VsYXRlRW5hYmxlZCgpCi0gIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgcnVuKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIGdldFdvcmtiZW5jaFBhcnQoKS5nZXRTaXRlKCkuZ2V0UGFnZSgpLnNob3dWaWV3KFBST1BFUlRJRVNfVklFV19JRCk7Ci0gICAgfQotICAgIGNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBwaWUpCi0gICAgewotCi0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9EZXNpZ25WaWV3Q29udGV4dE1lbnVQcm92aWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vRGVzaWduVmlld0NvbnRleHRNZW51UHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmUwZDIyZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9EZXNpZ25WaWV3Q29udGV4dE1lbnVQcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkNvbnRleHRNZW51UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZFN0YWNrOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi51aS5hY3Rpb25zLkFjdGlvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQmFzZVNlbGVjdGlvbkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5TaG93UHJvcGVydGllc1ZpZXdBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMuQ29sdW1uRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMubW9kZWwuSUFjdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXRvci5Db250ZXh0TWVudVBhcnRpY2lwYW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXRvci5FZGl0b3JNb2RlTWFuYWdlcjsKLQotCi1wdWJsaWMgY2xhc3MgRGVzaWduVmlld0NvbnRleHRNZW51UHJvdmlkZXIgZXh0ZW5kcyBDb250ZXh0TWVudVByb3ZpZGVyCi17Ci0gIElTZWxlY3Rpb25Qcm92aWRlciBzZWxlY3Rpb25Qcm92aWRlcjsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIEdyYXBoQ29udGV4dE1lbnVQcm92aWRlci4KLSAgICogCi0gICAqIEBwYXJhbSBzZWxlY3Rpb25Qcm92aWRlcgotICAgKiBAcGFyYW0gZWRpdG9yCi0gICAqLwotICBwdWJsaWMgRGVzaWduVmlld0NvbnRleHRNZW51UHJvdmlkZXIoRWRpdFBhcnRWaWV3ZXIgdmlld2VyLCBJU2VsZWN0aW9uUHJvdmlkZXIgc2VsZWN0aW9uUHJvdmlkZXIpCi0gIHsKLSAgICBzdXBlcih2aWV3ZXIpOwotICAgIHRoaXMuc2VsZWN0aW9uUHJvdmlkZXIgPSBzZWxlY3Rpb25Qcm92aWRlcjsKLSAgfQotICAKLSAgcHJvdGVjdGVkIE9iamVjdCBnZXRBcHByb3ByaWF0ZVNlbGVjdGlvbihPYmplY3Qgc2VsZWN0aW9uKSB7Ci0JICBpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgQ29sdW1uRWRpdFBhcnQpIHsKLQkJICByZXR1cm4gKChFZGl0UGFydCkgc2VsZWN0aW9uKS5nZXRQYXJlbnQoKTsKLQkgIH0KLQkgIAotCSAgcmV0dXJuIHNlbGVjdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmdlZi51aS5wYXJ0cy5Db250ZXh0TWVudVByb3ZpZGVyI2J1aWxkQ29udGV4dE1lbnUob3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlciwKLSAgICogICAgICBvcmcuZWNsaXBzZS5nZWYuRWRpdFBhcnRWaWV3ZXIpCi0gICAqLwotICBwdWJsaWMgdm9pZCBidWlsZENvbnRleHRNZW51KElNZW51TWFuYWdlciBtZW51KQotICB7Ci0JSU1lbnVNYW5hZ2VyIGN1cnJlbnRNZW51ID0gbWVudTsKLSAgICAKLSAgICBJRWRpdG9yUGFydCBlZGl0b3IgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLQlFZGl0b3JNb2RlTWFuYWdlciBtYW5hZ2VyID0gKEVkaXRvck1vZGVNYW5hZ2VyKWVkaXRvci5nZXRBZGFwdGVyKEVkaXRvck1vZGVNYW5hZ2VyLmNsYXNzKTsKLQlDb250ZXh0TWVudVBhcnRpY2lwYW50IGNvbnRleHRNZW51UGFydGljaXBhbnQgPSBtYW5hZ2VyICE9IG51bGwgPyBtYW5hZ2VyLmdldEN1cnJlbnRNb2RlKCkuZ2V0Q29udGV4dE1lbnVQYXJ0aWNpcGFudCgpIDogbnVsbDsKLQotICAgICAgICAKLSAgICBjdXJyZW50TWVudS5hZGQobmV3IFNlcGFyYXRvcihJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLk1CX0FERElUSU9OUykpOwotICAgIEFjdGlvblJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gZ2V0RWRpdG9yQWN0aW9uUmVnaXN0cnkoKTsKLSAgICBJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpOwotICAgIAotICAgIE9iamVjdCBhY3RpdmVQYXJ0ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlUGFydCgpOwotICAgIAotICAgIGlmIChzZWxlY3Rpb24gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBPYmplY3Qgc2VsZWN0ZWRPYmplY3QgPSAoKFN0cnVjdHVyZWRTZWxlY3Rpb24pIHNlbGVjdGlvbikuZ2V0Rmlyc3RFbGVtZW50KCk7Ci0gICAgICBzZWxlY3RlZE9iamVjdCA9IGdldEFwcHJvcHJpYXRlU2VsZWN0aW9uKHNlbGVjdGVkT2JqZWN0KTsKLQotICAgICAgaWYgKGNvbnRleHRNZW51UGFydGljaXBhbnQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLy8gQ29udmVydCBlZGl0cGFydHMgdG8gbW9kZWwgb2JqZWN0cyBhcyBzZWxlY3Rpb25zCi0gICAgICAgIE9iamVjdCBvID0gc2VsZWN0ZWRPYmplY3Q7Ci0gICAgICAgIGlmIChvIGluc3RhbmNlb2YgRWRpdFBhcnQpCi0gICAgICAgIHsKLSAgICAgICAgICBvID0gKChFZGl0UGFydClzZWxlY3RlZE9iamVjdCkuZ2V0TW9kZWwoKTsKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgY29udGV4dE1lbnVQYXJ0aWNpcGFudC5jb250cmlidXRlQWN0aW9ucyhvLCBtZW51KTsKLSAgICAgIH0gIAotICAgICAgCi0gICAgICBpZiAoc2VsZWN0ZWRPYmplY3QgaW5zdGFuY2VvZiBJQWN0aW9uUHJvdmlkZXIpCi0gICAgICB7Ci0gICAgICAgIElBY3Rpb25Qcm92aWRlciBhY3Rpb25Qcm92aWRlciA9IChJQWN0aW9uUHJvdmlkZXIpIHNlbGVjdGVkT2JqZWN0OwotICAgICAgICBTdHJpbmdbXSBhY3Rpb25zID0gYWN0aW9uUHJvdmlkZXIuZ2V0QWN0aW9ucyhhY3RpdmVQYXJ0KTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhY3Rpb25zLmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIGlkID0gYWN0aW9uc1tpXTsgICAgICAgICAgCi0gICAgICAgICAgaWYgKGNvbnRleHRNZW51UGFydGljaXBhbnQgPT0gbnVsbCB8fCBjb250ZXh0TWVudVBhcnRpY2lwYW50LmlzQXBwbGljYWJsZShzZWxlY3RlZE9iamVjdCwgaWQpKQotICAgICAgICAgIHsgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaWQuc3RhcnRzV2l0aChCYXNlU2VsZWN0aW9uQWN0aW9uLlNVQk1FTlVfU1RBUlRfSUQpKSB7Ci0gICAgICAgICAgICAgIFN0cmluZyB0ZXh0ID0gaWQuc3Vic3RyaW5nKEJhc2VTZWxlY3Rpb25BY3Rpb24uU1VCTUVOVV9TVEFSVF9JRC5sZW5ndGgoKSk7Ci0gICAgICAgICAgICAgIElNZW51TWFuYWdlciBzdWJNZW51ID0gbmV3IE1lbnVNYW5hZ2VyKHRleHQpOwotICAgICAgICAgICAgICBjdXJyZW50TWVudS5hZGQoc3ViTWVudSk7Ci0gICAgICAgICAgICAgIGN1cnJlbnRNZW51ID0gc3ViTWVudTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGlkLnN0YXJ0c1dpdGgoQmFzZVNlbGVjdGlvbkFjdGlvbi5TVUJNRU5VX0VORF9JRCkpIHsKLSAgICAgICAgICAgICAgY3VycmVudE1lbnUgPSBnZXRQYXJlbnRNZW51KG1lbnUsIGN1cnJlbnRNZW51KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIElBY3Rpb24gYWN0aW9uID0gcmVnaXN0cnkuZ2V0QWN0aW9uKGlkKTsKLSAgICAgICAgICAgICAgaWYgKGFjdGlvbiAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgYWN0aW9uLmlzRW5hYmxlZCgpOwotICAgICAgICAgICAgICAgIGN1cnJlbnRNZW51LmFkZChhY3Rpb24pOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSAgCi0gICAgICAgIH0gICAgIAotICAgICAgICAKLSAgICAgICAgbWVudS5hZGQocmVnaXN0cnkuZ2V0QWN0aW9uKFNob3dQcm9wZXJ0aWVzVmlld0FjdGlvbi5JRCkpOwotICAgICAgICBtZW51LmFkZChuZXcgU2VwYXJhdG9yKCkpOyAgICAgICAKLSAgICAgICAgbWVudS5hZGQobmV3IFNlcGFyYXRvcigicmVmYWN0b3Jpbmctc2xvdC10ZW1wIikpOyAgLy8kTk9OLU5MUy0xJAotICAgICAgICBtZW51LmFkZChuZXcgU2VwYXJhdG9yKCkpOyAgICAgICAKLSAgICAgICAgbWVudS5hZGQobmV3IFNlcGFyYXRvcigic2VhcmNoX3Nsb3RfdGVtcCIpKTsgICAgICAgIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgbWVudS5hZGQobmV3IFNlcGFyYXRvcigpKTsKLSAgICAgIH0KLSAgICB9ICAgIAotICAgIG1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoKSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGdldFBhcmVudE1lbnUoSU1lbnVNYW5hZ2VyIHJvb3QsIElNZW51TWFuYWdlciBjaGlsZCkgewotCSAgSU1lbnVNYW5hZ2VyIHBhcmVudCA9IG51bGw7Ci0JICAKLQkgIElDb250cmlidXRpb25JdGVtW10ga2lkcyA9IHJvb3QuZ2V0SXRlbXMoKTsKLQkgIGludCBpbmRleCA9IDA7Ci0JICB3aGlsZSAoaW5kZXggPCBraWRzLmxlbmd0aCAmJiBwYXJlbnQgPT0gbnVsbCkgewotCQkgIElDb250cmlidXRpb25JdGVtIGl0ZW0gPSBraWRzW2luZGV4XTsKLQkJICBpZiAoaXRlbS5lcXVhbHMoY2hpbGQpKSB7Ci0JCQkgIHBhcmVudCA9IHJvb3Q7Ci0JCSAgfQotCQkgIGVsc2UgewotCQkJICBpZiAoaXRlbSBpbnN0YW5jZW9mIElNZW51TWFuYWdlcikgewotCQkJCSAgcGFyZW50ID0gZ2V0UGFyZW50TWVudSgoSU1lbnVNYW5hZ2VyKSBpdGVtLCBjaGlsZCk7Ci0JCQkgIH0KLQkJICB9Ci0JCSAgaW5kZXgrKzsKLQkgIH0KLQkgIAotCSAgcmV0dXJuIHBhcmVudDsKLSAgfQotICAKLSAgcHJvdGVjdGVkIEFjdGlvblJlZ2lzdHJ5IGdldEVkaXRvckFjdGlvblJlZ2lzdHJ5KCkKLSAgewotICAgIHJldHVybiAoQWN0aW9uUmVnaXN0cnkpIEFTREVkaXRvclBsdWdpbi5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKEFjdGlvblJlZ2lzdHJ5LmNsYXNzKTsKLSAgfQotICBwcm90ZWN0ZWQgQ29tbWFuZFN0YWNrIGNvbW1hbmRTdGFjazsKLQotICBwcm90ZWN0ZWQgQ29tbWFuZFN0YWNrIGdldENvbW1hbmRTdGFjaygpCi0gIHsKLSAgICBpZiAoY29tbWFuZFN0YWNrID09IG51bGwpCi0gICAgICBjb21tYW5kU3RhY2sgPSBnZXRWaWV3ZXIoKS5nZXRFZGl0RG9tYWluKCkuZ2V0Q29tbWFuZFN0YWNrKCk7Ci0gICAgcmV0dXJuIGNvbW1hbmRTdGFjazsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vRGVzaWduVmlld0dyYXBoaWNhbFZpZXdlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vRGVzaWduVmlld0dyYXBoaWNhbFZpZXdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NmJjY2NiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL0Rlc2lnblZpZXdHcmFwaGljYWxWaWV3ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbjsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYudWkucGFydHMuU2Nyb2xsaW5nR3JhcGhpY2FsVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZGVzaWduLkJhc2VHcmFwaGljYWxWaWV3ZXJLZXlIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXRvci5Db21tb25TZWxlY3Rpb25NYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgRGVzaWduVmlld0dyYXBoaWNhbFZpZXdlciBleHRlbmRzIFNjcm9sbGluZ0dyYXBoaWNhbFZpZXdlciBpbXBsZW1lbnRzIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIKLXsKLSAgcHJvdGVjdGVkIEFTRFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBpbnRlcm5hbFNlbGVjdGlvblByb3ZpZGVyID0gbmV3IEFTRFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpOwotLy9UT0RPIE1ha2UgdGhpcyBnZW5lcmljCi0JICBwdWJsaWMgRGVzaWduVmlld0dyYXBoaWNhbFZpZXdlcihJRWRpdG9yUGFydCBlZGl0b3IsIENvbW1vblNlbGVjdGlvbk1hbmFnZXIgbWFuYWdlcikKLQkgIHsKLQkgICAgc3VwZXIoKTsKLQotCSAgICBzZXRDb250ZXh0TWVudShuZXcgRGVzaWduVmlld0NvbnRleHRNZW51UHJvdmlkZXIodGhpcywgdGhpcykpOwotCSAgICAKLS8vCSAgICBNZW51TWFuYWdlciBtYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKCIjcG9wdXAiKTsKLS8vCSAgICBtYW5hZ2VyLmFkZE1lbnVMaXN0ZW5lcihtZW51UHJvdmlkZXIpOwotLy8JICAgIG1hbmFnZXIuc2V0UmVtb3ZlQWxsV2hlblNob3duKHRydWUpOwotLy8JICAgIE1lbnUgbWVudSA9IG1hbmFnZXIuY3JlYXRlQ29udGV4dE1lbnUoZ2V0Q29udHJvbCgpKTsKLS8vCSAgICBnZXRDb250cm9sKCkuc2V0TWVudShtZW51KTsgIAotCi0JICAgIGVkaXRvci5nZXRFZGl0b3JTaXRlKCkucmVnaXN0ZXJDb250ZXh0TWVudSgib3JnLmVjbGlwc2Uud3N0LndzZGwudWkucG9wdXAuZ3JhcGgiLCBnZXRDb250ZXh0TWVudSgpLCBpbnRlcm5hbFNlbGVjdGlvblByb3ZpZGVyLCBmYWxzZSk7IC8vJE5PTi1OTFMtMSQKLQotCSAgICAvLyBtYWtlIHRoZSBpbnRlcm5hbFNlbGVjdGlvblByb3ZpZGVyIGxpc3RlbiB0byBncmFwaCB2aWV3IHNlbGVjdGlvbiBjaGFuZ2VzCi0JICAgIGFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihpbnRlcm5hbFNlbGVjdGlvblByb3ZpZGVyKTsgICAgCi0JICAgIGludGVybmFsU2VsZWN0aW9uUHJvdmlkZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKG1hbmFnZXIpOwotCSAgICBtYW5hZ2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsgIAotICAgICAgICAKLQkgICAgc2V0S2V5SGFuZGxlcihuZXcgQmFzZUdyYXBoaWNhbFZpZXdlcktleUhhbmRsZXIodGhpcykpOwotCSAgfQotCSAgCi0JICAvLyB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBzb21ldGhpbmcgY2hhbmdlcyBpbiB0aGUgc2VsZWN0aW9uIG1hbmFnZXIKLQkgIC8vIChlLmcuIGEgc2VsZWN0aW9uIG9jY3VyZWQgZnJvbSBhbm90aGVyIHZpZXcpCi0JICBwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkKLQkgIHsKLQkgICAgT2JqZWN0IHNlbGVjdGVkT2JqZWN0ID0gKChTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBldmVudC5nZXRTZWxlY3Rpb24oKSkuZ2V0Rmlyc3RFbGVtZW50KCk7Ci0JICAgIGlmIChldmVudC5nZXRTb3VyY2UoKSAhPSBpbnRlcm5hbFNlbGVjdGlvblByb3ZpZGVyKQotCSAgICB7Ci0JICAgIAlFZGl0UGFydCBlZGl0UGFydCA9IGdldEVkaXRQYXJ0KGdldFJvb3RFZGl0UGFydCgpLCBzZWxlY3RlZE9iamVjdCk7Ci0JICAgIAlpZiAoZWRpdFBhcnQgIT0gbnVsbCkKLQkgICAgCXsKLQkgICAgCQlzZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdFBhcnQpKTsKLQkgICAgCX0gICAKLQkgICAgfQotCSAgfQotCSAgCi0JICBwcm90ZWN0ZWQgRWRpdFBhcnQgZ2V0RWRpdFBhcnQoRWRpdFBhcnQgZWRpdFBhcnQsIE9iamVjdCBtb2RlbCkgIAotCSAgeyAgICAgICAgICAgICAgICAgICAgIAotCSAgICBFZGl0UGFydCByZXN1bHQgPSBudWxsOwotCSAgICBpZiAoZWRpdFBhcnQuZ2V0TW9kZWwoKSA9PSBtb2RlbCkKLQkgICAgewotCSAgICAgIHJlc3VsdCA9IGVkaXRQYXJ0OyAgICAgIAotCSAgICB9ICAgICAgICAgICAgICAgICAgIAotCSAgICBlbHNlCi0JICAgIHsKLQkgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBlZGl0UGFydC5nZXRDaGlsZHJlbigpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0JICAgICAgewotCSAgICAgICAgcmVzdWx0ID0gZ2V0RWRpdFBhcnQoKEVkaXRQYXJ0KWkubmV4dCgpLCBtb2RlbCk7Ci0JICAgICAgICBpZiAocmVzdWx0ICE9IG51bGwpCi0JICAgICAgICB7Ci0JICAgICAgICAgIGJyZWFrOwotCSAgICAgICAgfQotCSAgICAgIH0KLQkgICAgfQotCSAgICByZXR1cm4gcmVzdWx0OwotCSAgfQotCSAgCi0KLSAgICAgIC8qCi0JICAgKiBXZSBuZWVkIHRvIGNvbnZlcnQgZnJvbSBlZGl0IHBhcnQgc2VsZWN0aW9ucyB0byBtb2RlbCBvYmplY3Qgc2VsZWN0aW9ucwotCSAgICovCi0JICBjbGFzcyBBU0RTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgaW1wbGVtZW50cyBJU2VsZWN0aW9uUHJvdmlkZXIsIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIKLQkgIHsKLQkgICAgcHJvdGVjdGVkIExpc3QgbGlzdGVuZXJMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCSAgICBwcm90ZWN0ZWQgSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbigpOwotCi0JICAgIHB1YmxpYyB2b2lkIGFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKQotCSAgICB7Ci0JICAgICAgbGlzdGVuZXJMaXN0LmFkZChsaXN0ZW5lcik7Ci0JICAgIH0KLQotCSAgICBwdWJsaWMgdm9pZCByZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikKLQkgICAgewotCSAgICAgIGxpc3RlbmVyTGlzdC5yZW1vdmUobGlzdGVuZXIpOwotCSAgICB9Ci0KLQkgICAgcHVibGljIElTZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCkKLQkgICAgewotCSAgICAgIHJldHVybiBzZWxlY3Rpb247Ci0JICAgIH0KLQotCSAgICBwcm90ZWN0ZWQgdm9pZCBub3RpZnlMaXN0ZW5lcnMoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KQotCSAgICB7Ci0JICAgICAgZm9yIChJdGVyYXRvciBpID0gbGlzdGVuZXJMaXN0Lml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLQkgICAgICB7Ci0JICAgICAgICBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyID0gKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpIGkubmV4dCgpOwotCSAgICAgICAgbGlzdGVuZXIuc2VsZWN0aW9uQ2hhbmdlZChldmVudCk7Ci0JICAgICAgfQotCSAgICB9Ci0KLQkgICAgcHVibGljIFN0cnVjdHVyZWRTZWxlY3Rpb24gY29udmVydFNlbGVjdGlvbkZyb21FZGl0UGFydFRvTW9kZWwoSVNlbGVjdGlvbiBlZGl0UGFydFNlbGVjdGlvbikKLQkgICAgewotCSAgICAgIExpc3Qgc2VsZWN0ZWRNb2RlbE9iamVjdExpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JICAgICAgaWYgKGVkaXRQYXJ0U2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pCi0JICAgICAgewotCSAgICAgICAgZm9yIChJdGVyYXRvciBpID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbikgZWRpdFBhcnRTZWxlY3Rpb24pLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLQkgICAgICAgIHsKLQkgICAgICAgICAgT2JqZWN0IG9iaiA9IGkubmV4dCgpOwotCSAgICAgICAgICBPYmplY3QgbW9kZWwgPSBudWxsOwotCSAgICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgRWRpdFBhcnQpCi0JICAgICAgICAgIHsKLQkgICAgICAgICAgICBFZGl0UGFydCBlZGl0UGFydCA9IChFZGl0UGFydCkgb2JqOwotCSAgICAgICAgICAgIG1vZGVsID0gZWRpdFBhcnQuZ2V0TW9kZWwoKTsgICAgICAgICAgCi0JICAgICAgICAgIH0KLQkgICAgICAgICAgaWYgKG1vZGVsICE9IG51bGwpCi0JICAgICAgICAgIHsKLQkgICAgICAgICAgICBzZWxlY3RlZE1vZGVsT2JqZWN0TGlzdC5hZGQobW9kZWwpOwotCSAgICAgICAgICB9Ci0JICAgICAgICB9Ci0JICAgICAgfQotCSAgICAgIHJldHVybiBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihzZWxlY3RlZE1vZGVsT2JqZWN0TGlzdCk7Ci0JICAgIH0KLQotCSAgICBwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pCi0JICAgIHsKLQkgICAgICB0aGlzLnNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKLQkgICAgfQotCi0JICAgIHB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KQotCSAgICB7Ci0JICAgICAgSVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24gPSBjb252ZXJ0U2VsZWN0aW9uRnJvbUVkaXRQYXJ0VG9Nb2RlbChldmVudC5nZXRTZWxlY3Rpb24oKSk7Ci0JICAgICAgdGhpcy5zZWxlY3Rpb24gPSBuZXdTZWxlY3Rpb247Ci0JICAgICAgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IG5ld0V2ZW50ID0gbmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudCh0aGlzLCBuZXdTZWxlY3Rpb24pOwotCSAgICAgIG5vdGlmeUxpc3RlbmVycyhuZXdFdmVudCk7Ci0JICAgIH0KLQkgIH0gCi19ICAgIApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL0Rlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0ZThiNDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Db2xvckNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Db2xvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuRm9udDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotCi0vKioKLSAqIEEgY29sbGVjdGlvbiBvZiBjb2xvciBhbmQgZm9udCByZWxhdGVkIGNvbnN0YW50cy4KLSAqLwotcHVibGljIGludGVyZmFjZSBEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMgCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBEaXNwbGF5IGRpc3BsYXkgPSBEaXNwbGF5LmdldERlZmF1bHQoKTsgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgQ29sb3IgZ3JvdXBCb3JkZXJDb2xvciAgICAgICAgPSBuZXcgQ29sb3IobnVsbCwgMTE4LCAxMzQsIDE2NCk7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgQ29sb3IgZ3JvdXBIZWFkZXJDb2xvciAgICAgICAgPSBuZXcgQ29sb3IobnVsbCwgMjMyLCAyNDAsIDI0OCk7Ci0KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBDb2xvciBlbGVtZW50Qm9yZGVyQ29sb3IgICAgICA9IG5ldyBDb2xvcihudWxsLCAxMjAsIDE1MiwgMTg0KTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBDb2xvciBlbGVtZW50QmFja2dyb3VuZENvbG9yICA9IG5ldyBDb2xvcihudWxsLCAyMzIsIDI0MCwgMjQ4KTsgIAotICBwdWJsaWMgZmluYWwgc3RhdGljIENvbG9yIGVsZW1lbnRMYWJlbENvbG9yICAgICAgID0gbmV3IENvbG9yKG51bGwsICA4MCwgMTAyLCAxNDQpOwotICBwdWJsaWMgZmluYWwgc3RhdGljIENvbG9yIHJlYWRPbmx5Qm9yZGVyQ29sb3IgICAgID0gbmV3IENvbG9yKG51bGwsIDE2NCwgMTY0LCAxNjQpOyAKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBDb2xvciByZWQgICAgICAgICAgICAgICAgICAgICA9IG5ldyBDb2xvcihudWxsLCAyNTUsICAgMCwgICAwKTsgCi0KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBDb2xvciB0YWJsZU9wZXJhdGlvbkhlYWRpbmdDb2xvciA9IG5ldyBDb2xvcihudWxsLCAyMjQsIDIzMywgMjQ2KTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBDb2xvciB0YWJsZU1lc3NhZ2VIZWFkaW5nQ29sb3IgPSBuZXcgQ29sb3IobnVsbCwgMjMwLCAyNDAsIDI0NSk7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgQ29sb3IgdGFibGVDZWxsU2VsZWN0aW9uQ29sb3IgPSBuZXcgQ29sb3IobnVsbCwgMjM4LCAyMzIsIDE3MCk7IC8vbmV3IENvbG9yKG51bGwsIDI0MCwgMjMwLCAxNDApOyAvLzEsIDE1LCA0Mik7Ci0KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBDb2xvciByZWFkT25seVRhYmxlT3BlcmF0aW9uSGVhZGluZ0NvbG9yID0gbmV3IENvbG9yKG51bGwsIDIzOSwgMjQzLCAyNTUpOwotICBwdWJsaWMgZmluYWwgc3RhdGljIENvbG9yIHJlYWRPbmx5TWVzc2FnZVJlZkhlYWRpbmdDb2xvciA9IG5ldyBDb2xvcihudWxsLCAyNDUsIDI0NSwgMjQ1KTsKLSAgCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgQ29sb3IgcmVhZE9ubHlCYWNrZ3JvdW5kQ29sb3IgPSBDb2xvckNvbnN0YW50cy53aGl0ZTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBDb2xvciByZWFkT25seUxhYmVsQ29sb3IgPSBDb2xvckNvbnN0YW50cy5ncmF5OwotICBwdWJsaWMgZmluYWwgc3RhdGljIENvbG9yIGxhYmVsQ29sb3IgPSBDb2xvckNvbnN0YW50cy5ibGFjazsKLQotICBwdWJsaWMgZmluYWwgc3RhdGljIEZvbnQgIHNtYWxsQm9sZEZvbnQgICAgICAgICAgID0gbmV3IEZvbnQoRGlzcGxheS5nZXRDdXJyZW50KCksICJUYWhvbWEiLCA4LCBTV1QuQk9MRCk7IC8vJE5PTi1OTFMtMSQKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBGb250ICBtZWRpdW1Gb250ICAgICAgICAgICAgICA9IG5ldyBGb250KERpc3BsYXkuZ2V0Q3VycmVudCgpLCAiVGFob21hIiwgMTAsIFNXVC5OT05FKTsgLy8kTk9OLU5MUy0xJAotICBwdWJsaWMgZmluYWwgc3RhdGljIEZvbnQgIG1lZGl1bUJvbGRGb250ICAgICAgICAgID0gbmV3IEZvbnQoRGlzcGxheS5nZXRDdXJyZW50KCksICJUYWhvbWEiLCAxMCwgU1dULkJPTEQpOyAgLy8kTk9OLU5MUy0xJAotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL0tleWJvYXJkRHJhZ0ltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL0tleWJvYXJkRHJhZ0ltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTg0YWRmMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9LZXlib2FyZERyYWdJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Qb3NpdGlvbkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkdyYXBoaWNhbEVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkJhc2VTZWxlY3Rpb25BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmRlc2lnbi5JS2V5Ym9hcmREcmFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmRlc2lnbi5lZGl0cG9saWNpZXMuS2V5Qm9hcmRBY2Nlc3NpYmlsaXR5RWRpdFBvbGljeTsKLQotcHVibGljIGNsYXNzIEtleWJvYXJkRHJhZ0ltcGwgZXh0ZW5kcyBCYXNlU2VsZWN0aW9uQWN0aW9uIGltcGxlbWVudHMgSUtleWJvYXJkRHJhZyB7Ci0KLQlwdWJsaWMgS2V5Ym9hcmREcmFnSW1wbCgpIHsKLQkJc3VwZXIobnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHBlcmZvcm1LZXlib2FyZERyYWcoR3JhcGhpY2FsRWRpdFBhcnQgbW92aW5nRWxlbWVudCwgaW50IGRpcmVjdGlvbikgewotCi0JCUtleUJvYXJkQWNjZXNzaWJpbGl0eUVkaXRQb2xpY3kgcG9saWN5ID0gKEtleUJvYXJkQWNjZXNzaWJpbGl0eUVkaXRQb2xpY3kpbW92aW5nRWxlbWVudC5nZXRFZGl0UG9saWN5KEtleUJvYXJkQWNjZXNzaWJpbGl0eUVkaXRQb2xpY3kuS0VZKTsKLQkJCi0JCUVkaXRQYXJ0IHJpZ2h0RWxlbWVudCA9IHBvbGljeS5nZXRSZWxhdGl2ZUVkaXRQYXJ0KG1vdmluZ0VsZW1lbnQsIGRpcmVjdGlvbik7Ci0JCXBvbGljeSA9IChLZXlCb2FyZEFjY2Vzc2liaWxpdHlFZGl0UG9saWN5KXJpZ2h0RWxlbWVudC5nZXRFZGl0UG9saWN5KEtleUJvYXJkQWNjZXNzaWJpbGl0eUVkaXRQb2xpY3kuS0VZKTsKLQkJRWRpdFBhcnQgbGVmdEVsZW1lbnQgPSAocG9saWN5ICE9IG51bGwpPyBwb2xpY3kuZ2V0UmVsYXRpdmVFZGl0UGFydChyaWdodEVsZW1lbnQsIGRpcmVjdGlvbik6IG51bGw7Ci0JCSAgCi0JCU9iamVjdCBsZWZ0U2liRWxlbWVudCA9IChsZWZ0RWxlbWVudCAhPSBudWxsKT8gbGVmdEVsZW1lbnQuZ2V0TW9kZWwoKSA6IG51bGw7Ci0JCU9iamVjdCByaWdodFNpYkVsZW1lbnQgPSAocmlnaHRFbGVtZW50ICE9IG51bGwpPyByaWdodEVsZW1lbnQuZ2V0TW9kZWwoKSA6IG51bGw7Ci0JCWlmIChkaXJlY3Rpb24gPT0gUG9zaXRpb25Db25zdGFudHMuU09VVEgpIHsKLQkJCWxlZnRTaWJFbGVtZW50ID0gcmlnaHRTaWJFbGVtZW50OwotCQkJcmlnaHRTaWJFbGVtZW50ID0gbGVmdFNpYkVsZW1lbnQ7Ci0JCX0gZWxzZSBpZiAoZGlyZWN0aW9uICE9IFBvc2l0aW9uQ29uc3RhbnRzLk5PUlRIKSByZXR1cm47Ci0JCQotCQlPYmplY3Qgc291cmNlID0gbW92aW5nRWxlbWVudC5nZXRNb2RlbCgpOwotCi0JCWlmIChzb3VyY2UgaW5zdGFuY2VvZiBJTWVzc2FnZVJlZmVyZW5jZSkgewotICAJCQkKLQkJCWlmKCEobGVmdFNpYkVsZW1lbnQgaW5zdGFuY2VvZiBJTWVzc2FnZVJlZmVyZW5jZSkpIGxlZnRTaWJFbGVtZW50ID0gbnVsbDsKLQkJCWlmKCEocmlnaHRTaWJFbGVtZW50IGluc3RhbmNlb2YgSU1lc3NhZ2VSZWZlcmVuY2UpKSByaWdodFNpYkVsZW1lbnQgPSBudWxsOwotCQkJCi0JCQlPYmplY3QgbWVzc2FnZVJlZk93bmVyID0gKChJTWVzc2FnZVJlZmVyZW5jZSkgc291cmNlKS5nZXRPd25lck9wZXJhdGlvbigpOwotICAJCQlpZiAobWVzc2FnZVJlZk93bmVyIGluc3RhbmNlb2YgSU9wZXJhdGlvbikgewotICAJCQkJSU1lc3NhZ2VSZWZlcmVuY2UgbGVmdFNpYiA9IChJTWVzc2FnZVJlZmVyZW5jZSkgbGVmdFNpYkVsZW1lbnQ7Ci0gIAkJCQlJTWVzc2FnZVJlZmVyZW5jZSByaWdodFNpYiA9IChJTWVzc2FnZVJlZmVyZW5jZSkgcmlnaHRTaWJFbGVtZW50OwotICAJCQkJSU1lc3NhZ2VSZWZlcmVuY2UgbW92aW5nU2liID0gKElNZXNzYWdlUmVmZXJlbmNlKSBzb3VyY2U7Ci0gIAkJCQlDb21tYW5kIGNvbW1hbmQgPSAoKElPcGVyYXRpb24pIG1lc3NhZ2VSZWZPd25lcikuZ2V0UmVvcmRlck1lc3NhZ2VSZWZlcmVuY2VzQ29tbWFuZChsZWZ0U2liLCByaWdodFNpYiwgbW92aW5nU2liKTsKLSAgCQkJCWNvbW1hbmQuZXhlY3V0ZSgpOwotICAJCQkJcGVyZm9ybVNlbGVjdGlvbihzb3VyY2UpOwotICAJCQl9Ci0gIAkJfQotICAJCWVsc2UgaWYgKHNvdXJjZSBpbnN0YW5jZW9mIElQYXJhbWV0ZXIpIHsKLSAgCQkJCi0gIAkJCWlmKCEobGVmdFNpYkVsZW1lbnQgaW5zdGFuY2VvZiBJUGFyYW1ldGVyKSkgbGVmdFNpYkVsZW1lbnQgPSBudWxsOwotCQkJaWYoIShyaWdodFNpYkVsZW1lbnQgaW5zdGFuY2VvZiBJUGFyYW1ldGVyKSkgcmlnaHRTaWJFbGVtZW50ID0gbnVsbDsKLQkJCQotICAJCQlPYmplY3QgcGFyYW1Pd25lciA9ICgoSVBhcmFtZXRlcikgc291cmNlKS5nZXRPd25lcigpOwotICAJCQlpZiAocGFyYW1Pd25lciBpbnN0YW5jZW9mIElNZXNzYWdlUmVmZXJlbmNlKSB7Ci0gIAkJCQlJUGFyYW1ldGVyIGxlZnRTaWIgPSAoSVBhcmFtZXRlcikgbGVmdFNpYkVsZW1lbnQ7Ci0gIAkJCQlJUGFyYW1ldGVyIHJpZ2h0U2liID0gKElQYXJhbWV0ZXIpIHJpZ2h0U2liRWxlbWVudDsKLSAgCQkJCUlQYXJhbWV0ZXIgbW92aW5nU2liID0gKElQYXJhbWV0ZXIpIHNvdXJjZTsKLSAgCQkJCUNvbW1hbmQgY29tbWFuZCA9ICgoSU1lc3NhZ2VSZWZlcmVuY2UpIHBhcmFtT3duZXIpLmdldFJlb3JkZXJQYXJhbWV0ZXJzQ29tbWFuZChsZWZ0U2liLCByaWdodFNpYiwgbW92aW5nU2liKTsKLSAgCQkJCWNvbW1hbmQuZXhlY3V0ZSgpOwotICAJCQkJcGVyZm9ybVNlbGVjdGlvbihzb3VyY2UpOwotICAJCQl9Ci0gIAkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2Nvbm5lY3Rpb25zL0NlbnRlcmVkQ29ubmVjdGlvbkFuY2hvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vY29ubmVjdGlvbnMvQ2VudGVyZWRDb25uZWN0aW9uQW5jaG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1YzljMjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vY29ubmVjdGlvbnMvQ2VudGVyZWRDb25uZWN0aW9uQW5jaG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5jb25uZWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5BYnN0cmFjdENvbm5lY3Rpb25BbmNob3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLklGaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LlBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5SZWN0YW5nbGU7Ci0KLXB1YmxpYyBjbGFzcyBDZW50ZXJlZENvbm5lY3Rpb25BbmNob3IgZXh0ZW5kcyBBYnN0cmFjdENvbm5lY3Rpb25BbmNob3IKLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVE9QID0gMDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQk9UVE9NID0gMTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTEVGVCA9IDI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJJR0hUID0gMzsKLSAgCi0gIC8vIFRoZXNlIHR3byBhcmUgY3VzdG9tIGZvciByZWN0YW5nbGVzIHdpdGggaGVhZGVyIGJsb2NrcwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBIRUFERVJfTEVGVCA9IDQ7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEhFQURFUl9SSUdIVCA9IDU7Ci0KLSAgcHJpdmF0ZSBpbnQgbG9jYXRpb247Ci0gIHByaXZhdGUgaW50IGluc2V0OwotICBwcml2YXRlIGludCBvZmZzZXQgPSAwOwotICAKLSAgcHVibGljIENlbnRlcmVkQ29ubmVjdGlvbkFuY2hvcihJRmlndXJlIG93bmVyLCBpbnQgbG9jYXRpb24sIGludCBpbnNldCkgewotICAgIHN1cGVyKG93bmVyKTsKLSAgICB0aGlzLmxvY2F0aW9uID0gbG9jYXRpb247Ci0gICAgdGhpcy5pbnNldCA9IGluc2V0OwotICB9Ci0gIAotICBwdWJsaWMgQ2VudGVyZWRDb25uZWN0aW9uQW5jaG9yKElGaWd1cmUgb3duZXIsIGludCBsb2NhdGlvbiwgaW50IGluc2V0LCBpbnQgb2Zmc2V0KSB7Ci0gICAgdGhpcyhvd25lciwgbG9jYXRpb24sIGluc2V0KTsKLSAgICB0aGlzLm9mZnNldCA9IG9mZnNldDsKLSAgfQotICAKLSAgcHVibGljIFBvaW50IGdldExvY2F0aW9uKFBvaW50IHJlZmVyZW5jZSkgewotICAgIFJlY3RhbmdsZSByID0gZ2V0T3duZXIoKS5nZXRCb3VuZHMoKTsKLSAgICBpbnQgeCwgeTsKLSAgICBzd2l0Y2ggKGxvY2F0aW9uKSB7Ci0gICAgICBjYXNlIFRPUDoKLSAgICAgICAgeCA9IHIucmlnaHQoKSAtIHIud2lkdGggLyAyICsgb2Zmc2V0OwotICAgICAgICB5ID0gci55ICsgaW5zZXQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBCT1RUT006Ci0gICAgICAgIHggPSByLnJpZ2h0KCkgLSByLndpZHRoIC8gMiArIG9mZnNldDsKLSAgICAgICAgeSA9IHIuYm90dG9tKCkgLSBpbnNldDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIExFRlQ6Ci0gICAgICAgIHggPSByLnggKyBpbnNldDsKLSAgICAgICAgeSA9IHIuYm90dG9tKCkgLSByLmhlaWdodCAvIDIgKyBvZmZzZXQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBSSUdIVDoKLSAgICAgICAgeCA9IHIucmlnaHQoKSAtIGluc2V0OwotICAgICAgICB5ID0gci5ib3R0b20oKSAtIHIuaGVpZ2h0IC8gMiArIG9mZnNldDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEhFQURFUl9MRUZUOgotICAgICAgICB4ID0gci54ICsgaW5zZXQ7Ci0gICAgICAgIHkgPSByLnkgKyBvZmZzZXQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBIRUFERVJfUklHSFQ6Ci0gICAgICAgIHggPSByLnJpZ2h0KCkgLSBpbnNldDsKLSAgICAgICAgeSA9IHIueSArIG9mZnNldDsKLSAgICAgICAgYnJlYWs7ICAgICAgICAKLSAgICAgICAgCi0gICAgICBkZWZhdWx0OgotICAgICAgICAvLyBTb21ldGhpbmcgd2VudCB3cm9uZy4gQXR0YWNoIHRoZSBhbmNob3IgdG8gdGhlIG1pZGRsZQotICAgICAgICB4ID0gci5yaWdodCgpIC0gci53aWR0aCAvIDI7Ci0gICAgICAgIHkgPSByLmJvdHRvbSgpIC0gci5oZWlnaHQgLyAyOwotICAgIH0KLSAgICBQb2ludCBwID0gbmV3IFBvaW50KHgseSk7Ci0KLSAgICBnZXRPd25lcigpLnRyYW5zbGF0ZVRvQWJzb2x1dGUocCk7Ci0gICAgcmV0dXJuIHA7Ci0gIH0KLSAgCi0gIHB1YmxpYyBQb2ludCBnZXRSZWZlcmVuY2VQb2ludCgpIHsKLSAgICByZXR1cm4gZ2V0TG9jYXRpb24obnVsbCk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vY29ubmVjdGlvbnMvVG9wTGVmdENvbm5lY3Rpb25BbmNob3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2Nvbm5lY3Rpb25zL1RvcExlZnRDb25uZWN0aW9uQW5jaG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0MGJkYTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vY29ubmVjdGlvbnMvVG9wTGVmdENvbm5lY3Rpb25BbmNob3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmNvbm5lY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkFic3RyYWN0Q29ubmVjdGlvbkFuY2hvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuSUZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUG9pbnQ7Ci0KLXB1YmxpYyBjbGFzcyBUb3BMZWZ0Q29ubmVjdGlvbkFuY2hvciBleHRlbmRzIEFic3RyYWN0Q29ubmVjdGlvbkFuY2hvcgoteyAKLSAgSUZpZ3VyZSBsYWJlbDsKLSAgcHVibGljIFRvcExlZnRDb25uZWN0aW9uQW5jaG9yKElGaWd1cmUgb3duZXIsIElGaWd1cmUgbGFiZWwpIHsKLSAgICBzdXBlcihvd25lcik7Ci0gICAgdGhpcy5sYWJlbCA9IGxhYmVsOwotICB9Ci0gIHB1YmxpYyBQb2ludCBnZXRMb2NhdGlvbihQb2ludCByZWZlcmVuY2UpIHsKLSAgICBpbnQgeCA9IGdldE93bmVyKCkuZ2V0Qm91bmRzKCkueDsKLSAgICBpbnQgeSA9IGxhYmVsLmdldEJvdW5kcygpLnkgKyBsYWJlbC5nZXRCb3VuZHMoKS5oZWlnaHQgLyAyOwotICAgIFBvaW50IHAgPSBuZXcgUG9pbnQoeCx5KTsKLSAgICBnZXRPd25lcigpLnRyYW5zbGF0ZVRvQWJzb2x1dGUocCk7Ci0gICAgcmV0dXJuIHA7Ci0gIH0KLSAgCi0gIHB1YmxpYyBQb2ludCBnZXRSZWZlcmVuY2VQb2ludCgpIHsKLSAgICByZXR1cm4gZ2V0TG9jYXRpb24obnVsbCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2RpcmVjdGVkaXQvQVNEQ0NvbWJvLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9kaXJlY3RlZGl0L0FTRENDb21iby5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzliMzU3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2RpcmVjdGVkaXQvQVNEQ0NvbWJvLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTExICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmRpcmVjdGVkaXQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5hY2Nlc3NpYmlsaXR5LkFDQzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmxlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmxlQ29udHJvbEFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJsZUNvbnRyb2xFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmxlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJsZVRleHRBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2libGVUZXh0RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Db2xvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuRm9udDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuR0M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5SZWN0YW5nbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTWVudTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlR5cGVkTGlzdGVuZXI7Ci0KLS8qCi0gKiBybWFoOgotICogVGhpcyBjbGFzcyBpcyBhIGNvcHkgb2YgQ0NvbWJvLiAgV2UgY29weSBpdCBiZWNhdXNlIHdlIHdpc2ggdG8gYWxpZ24KLSAqIHRoZSBUZXh0IG9mIHRoZSBDb21ibyBpbiBvdXIgb3duIHNwZWNpYWwgd2F5LiAgSG93ZXZlciB0aGVyZSBpcyBubwotICogd2F5IHRvIGFjY2VzcyB0aGUgVGV4dCBvYmplY3Qgd2l0aGluIENDb21iby4uLi4uCi0gKiBCdWcgZm9yIHRoaXMgaXNzdWUgdG8gYmUgb3BlbmVkCi0gKi8KLQotLyoqCi0gKiBUaGUgQ0NvbWJvIGNsYXNzIHJlcHJlc2VudHMgYSBzZWxlY3RhYmxlIHVzZXIgaW50ZXJmYWNlIG9iamVjdAotICogdGhhdCBjb21iaW5lcyBhIHRleHQgZmllbGQgYW5kIGEgbGlzdCBhbmQgaXNzdWVzIG5vdGlmaWNhdGlvbgotICogd2hlbiBhbiBpdGVtIGlzIHNlbGVjdGVkIGZyb20gdGhlIGxpc3QuCi0gKiA8cD4KLSAqIE5vdGUgdGhhdCBhbHRob3VnaCB0aGlzIGNsYXNzIGlzIGEgc3ViY2xhc3Mgb2YgPGNvZGU+Q29tcG9zaXRlPC9jb2RlPiwKLSAqIGl0IGRvZXMgbm90IG1ha2Ugc2Vuc2UgdG8gYWRkIGNoaWxkcmVuIHRvIGl0LCBvciBzZXQgYSBsYXlvdXQgb24gaXQuCi0gKiA8L3A+Ci0gKiA8ZGw+Ci0gKiA8ZHQ+PGI+U3R5bGVzOjwvYj4KLSAqIDxkZD5CT1JERVIsIFJFQURfT05MWSwgRkxBVDwvZGQ+Ci0gKiA8ZHQ+PGI+RXZlbnRzOjwvYj4KLSAqIDxkZD5TZWxlY3Rpb248L2RkPgotICogPC9kbD4KLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIEFTRENDb21ibyBleHRlbmRzIENvbXBvc2l0ZSB7Ci0KLQlUZXh0IHRleHQ7Ci0JTGlzdCBsaXN0OwotCWludCB2aXNpYmxlSXRlbUNvdW50ID0gNTsKLQlTaGVsbCBwb3B1cDsKLQlCdXR0b24gYXJyb3c7Ci0JYm9vbGVhbiBoYXNGb2N1czsKLQlMaXN0ZW5lciBsaXN0ZW5lciwgZmlsdGVyOwotCUNvbG9yIGZvcmVncm91bmQsIGJhY2tncm91bmQ7Ci0JRm9udCBmb250OwotCXByaXZhdGUgaW50IHRleHRJbmRlbnQgPSA1OwotCQotLyoqCi0gKiBDb25zdHJ1Y3RzIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgZ2l2ZW4gaXRzIHBhcmVudAotICogYW5kIGEgc3R5bGUgdmFsdWUgZGVzY3JpYmluZyBpdHMgYmVoYXZpb3IgYW5kIGFwcGVhcmFuY2UuCi0gKiA8cD4KLSAqIFRoZSBzdHlsZSB2YWx1ZSBpcyBlaXRoZXIgb25lIG9mIHRoZSBzdHlsZSBjb25zdGFudHMgZGVmaW5lZCBpbgotICogY2xhc3MgPGNvZGU+U1dUPC9jb2RlPiB3aGljaCBpcyBhcHBsaWNhYmxlIHRvIGluc3RhbmNlcyBvZiB0aGlzCi0gKiBjbGFzcywgb3IgbXVzdCBiZSBidWlsdCBieSA8ZW0+Yml0d2lzZSBPUjwvZW0+J2luZyB0b2dldGhlciAKLSAqICh0aGF0IGlzLCB1c2luZyB0aGUgPGNvZGU+aW50PC9jb2RlPiAifCIgb3BlcmF0b3IpIHR3byBvciBtb3JlCi0gKiBvZiB0aG9zZSA8Y29kZT5TV1Q8L2NvZGU+IHN0eWxlIGNvbnN0YW50cy4gVGhlIGNsYXNzIGRlc2NyaXB0aW9uCi0gKiBsaXN0cyB0aGUgc3R5bGUgY29uc3RhbnRzIHRoYXQgYXJlIGFwcGxpY2FibGUgdG8gdGhlIGNsYXNzLgotICogU3R5bGUgYml0cyBhcmUgYWxzbyBpbmhlcml0ZWQgZnJvbSBzdXBlcmNsYXNzZXMuCi0gKiA8L3A+Ci0gKgotICogQHBhcmFtIHBhcmVudCBhIHdpZGdldCB3aGljaCB3aWxsIGJlIHRoZSBwYXJlbnQgb2YgdGhlIG5ldyBpbnN0YW5jZSAoY2Fubm90IGJlIG51bGwpCi0gKiBAcGFyYW0gc3R5bGUgdGhlIHN0eWxlIG9mIHdpZGdldCB0byBjb25zdHJ1Y3QKLSAqCi0gKiBAZXhjZXB0aW9uIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfTlVMTF9BUkdVTUVOVCAtIGlmIHRoZSBwYXJlbnQgaXMgbnVsbDwvbGk+Ci0gKiA8L3VsPgotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9USFJFQURfSU5WQUxJRF9BQ0NFU1MgLSBpZiBub3QgY2FsbGVkIGZyb20gdGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQgdGhlIHBhcmVudDwvbGk+Ci0gKiA8L3VsPgotICoKLSAqIEBzZWUgU1dUI0JPUkRFUgotICogQHNlZSBTV1QjUkVBRF9PTkxZCi0gKiBAc2VlIFNXVCNGTEFUCi0gKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldCNnZXRTdHlsZSgpCi0gKi8KLXB1YmxpYyBBU0RDQ29tYm8gKENvbXBvc2l0ZSBwYXJlbnQsIGludCBzdHlsZSkgewotCXN1cGVyIChwYXJlbnQsIHN0eWxlID0gY2hlY2tTdHlsZSAoc3R5bGUpKTsKLQkKLQlpbnQgdGV4dFN0eWxlID0gU1dULlNJTkdMRTsKLQlpZiAoKHN0eWxlICYgU1dULlJFQURfT05MWSkgIT0gMCkgdGV4dFN0eWxlIHw9IFNXVC5SRUFEX09OTFk7Ci0JaWYgKChzdHlsZSAmIFNXVC5GTEFUKSAhPSAwKSB0ZXh0U3R5bGUgfD0gU1dULkZMQVQ7Ci0JdGV4dCA9IG5ldyBUZXh0ICh0aGlzLCB0ZXh0U3R5bGUpOwotCWludCBhcnJvd1N0eWxlID0gU1dULkFSUk9XIHwgU1dULkRPV047Ci0JaWYgKChzdHlsZSAmIFNXVC5GTEFUKSAhPSAwKSBhcnJvd1N0eWxlIHw9IFNXVC5GTEFUOwotCWFycm93ID0gbmV3IEJ1dHRvbiAodGhpcywgYXJyb3dTdHlsZSk7Ci0KLQlsaXN0ZW5lciA9IG5ldyBMaXN0ZW5lciAoKSB7Ci0JCXB1YmxpYyB2b2lkIGhhbmRsZUV2ZW50IChFdmVudCBldmVudCkgewotCQkJaWYgKHBvcHVwID09IGV2ZW50LndpZGdldCkgewotCQkJCXBvcHVwRXZlbnQgKGV2ZW50KTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCQlpZiAodGV4dCA9PSBldmVudC53aWRnZXQpIHsKLQkJCQl0ZXh0RXZlbnQgKGV2ZW50KTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCQlpZiAobGlzdCA9PSBldmVudC53aWRnZXQpIHsKLQkJCQlsaXN0RXZlbnQgKGV2ZW50KTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCQlpZiAoYXJyb3cgPT0gZXZlbnQud2lkZ2V0KSB7Ci0JCQkJYXJyb3dFdmVudCAoZXZlbnQpOwotCQkJCXJldHVybjsKLQkJCX0KLQkJCWlmIChBU0RDQ29tYm8udGhpcyA9PSBldmVudC53aWRnZXQpIHsKLQkJCQljb21ib0V2ZW50IChldmVudCk7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQkJaWYgKGdldFNoZWxsICgpID09IGV2ZW50LndpZGdldCkgewotCQkJCWhhbmRsZUZvY3VzIChTV1QuRm9jdXNPdXQpOwotCQkJfQotCQl9Ci0JfTsKLQlmaWx0ZXIgPSBuZXcgTGlzdGVuZXIoKSB7Ci0JCXB1YmxpYyB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50IGV2ZW50KSB7Ci0JCQlTaGVsbCBzaGVsbCA9ICgoQ29udHJvbClldmVudC53aWRnZXQpLmdldFNoZWxsICgpOwotCQkJaWYgKHNoZWxsID09IEFTRENDb21iby50aGlzLmdldFNoZWxsICgpKSB7Ci0JCQkJaGFuZGxlRm9jdXMgKFNXVC5Gb2N1c091dCk7Ci0JCQl9Ci0JCX0KLQl9OwotCQotCWludCBbXSBjb21ib0V2ZW50cyA9IHtTV1QuRGlzcG9zZSwgU1dULk1vdmUsIFNXVC5SZXNpemV9OwotCWZvciAoaW50IGk9MDsgaTxjb21ib0V2ZW50cy5sZW5ndGg7IGkrKykgdGhpcy5hZGRMaXN0ZW5lciAoY29tYm9FdmVudHMgW2ldLCBsaXN0ZW5lcik7Ci0JCi0JaW50IFtdIHRleHRFdmVudHMgPSB7U1dULktleURvd24sIFNXVC5LZXlVcCwgU1dULk1lbnVEZXRlY3QsIFNXVC5Nb2RpZnksIFNXVC5Nb3VzZURvd24sIFNXVC5Nb3VzZVVwLCBTV1QuVHJhdmVyc2UsIFNXVC5Gb2N1c0lufTsKLQlmb3IgKGludCBpPTA7IGk8dGV4dEV2ZW50cy5sZW5ndGg7IGkrKykgdGV4dC5hZGRMaXN0ZW5lciAodGV4dEV2ZW50cyBbaV0sIGxpc3RlbmVyKTsKLQkKLQlpbnQgW10gYXJyb3dFdmVudHMgPSB7U1dULlNlbGVjdGlvbiwgU1dULkZvY3VzSW59OwotCWZvciAoaW50IGk9MDsgaTxhcnJvd0V2ZW50cy5sZW5ndGg7IGkrKykgYXJyb3cuYWRkTGlzdGVuZXIgKGFycm93RXZlbnRzIFtpXSwgbGlzdGVuZXIpOwotCQotCWNyZWF0ZVBvcHVwKG51bGwsIC0xKTsKLQlpbml0QWNjZXNzaWJsZSgpOwotfQotc3RhdGljIGludCBjaGVja1N0eWxlIChpbnQgc3R5bGUpIHsKLQlpbnQgbWFzayA9IFNXVC5CT1JERVIgfCBTV1QuUkVBRF9PTkxZIHwgU1dULkZMQVQgfCBTV1QuTEVGVF9UT19SSUdIVCB8IFNXVC5SSUdIVF9UT19MRUZUOwotCXJldHVybiBzdHlsZSAmIG1hc2s7Ci19Ci0vKioKLSAqIEFkZHMgdGhlIGFyZ3VtZW50IHRvIHRoZSBlbmQgb2YgdGhlIHJlY2VpdmVyJ3MgbGlzdC4KLSAqCi0gKiBAcGFyYW0gc3RyaW5nIHRoZSBuZXcgaXRlbQotICoKLSAqIEBleGNlcHRpb24gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9OVUxMX0FSR1VNRU5UIC0gaWYgdGhlIHN0cmluZyBpcyBudWxsPC9saT4KLSAqIDwvdWw+Ci0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICoKLSAqIEBzZWUgI2FkZChTdHJpbmcsaW50KQotICovCi1wdWJsaWMgdm9pZCBhZGQgKFN0cmluZyBzdHJpbmcpIHsKLQljaGVja1dpZGdldCgpOwotCWlmIChzdHJpbmcgPT0gbnVsbCkgU1dULmVycm9yIChTV1QuRVJST1JfTlVMTF9BUkdVTUVOVCk7Ci0JbGlzdC5hZGQgKHN0cmluZyk7Ci19Ci0vKioKLSAqIEFkZHMgdGhlIGFyZ3VtZW50IHRvIHRoZSByZWNlaXZlcidzIGxpc3QgYXQgdGhlIGdpdmVuCi0gKiB6ZXJvLXJlbGF0aXZlIGluZGV4LgotICogPHA+Ci0gKiBOb3RlOiBUbyBhZGQgYW4gaXRlbSBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0LCB1c2UgdGhlCi0gKiByZXN1bHQgb2YgY2FsbGluZyA8Y29kZT5nZXRJdGVtQ291bnQoKTwvY29kZT4gYXMgdGhlCi0gKiBpbmRleCBvciB1c2UgPGNvZGU+YWRkKFN0cmluZyk8L2NvZGU+LgotICogPC9wPgotICoKLSAqIEBwYXJhbSBzdHJpbmcgdGhlIG5ldyBpdGVtCi0gKiBAcGFyYW0gaW5kZXggdGhlIGluZGV4IGZvciB0aGUgaXRlbQotICoKLSAqIEBleGNlcHRpb24gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9OVUxMX0FSR1VNRU5UIC0gaWYgdGhlIHN0cmluZyBpcyBudWxsPC9saT4KLSAqICAgIDxsaT5FUlJPUl9JTlZBTElEX1JBTkdFIC0gaWYgdGhlIGluZGV4IGlzIG5vdCBiZXR3ZWVuIDAgYW5kIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGxpc3QgKGluY2x1c2l2ZSk8L2xpPgotICogPC91bD4KLSAqIEBleGNlcHRpb24gb3JnLmVjbGlwc2Uuc3d0LlNXVEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfV0lER0VUX0RJU1BPU0VEIC0gaWYgdGhlIHJlY2VpdmVyIGhhcyBiZWVuIGRpc3Bvc2VkPC9saT4KLSAqICAgIDxsaT5FUlJPUl9USFJFQURfSU5WQUxJRF9BQ0NFU1MgLSBpZiBub3QgY2FsbGVkIGZyb20gdGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQgdGhlIHJlY2VpdmVyPC9saT4KLSAqIDwvdWw+Ci0gKgotICogQHNlZSAjYWRkKFN0cmluZykKLSAqLwotcHVibGljIHZvaWQgYWRkIChTdHJpbmcgc3RyaW5nLCBpbnQgaW5kZXgpIHsKLQljaGVja1dpZGdldCgpOwotCWlmIChzdHJpbmcgPT0gbnVsbCkgU1dULmVycm9yIChTV1QuRVJST1JfTlVMTF9BUkdVTUVOVCk7Ci0JbGlzdC5hZGQgKHN0cmluZywgaW5kZXgpOwotfQotLyoqCi0gKiBBZGRzIHRoZSBsaXN0ZW5lciB0byB0aGUgY29sbGVjdGlvbiBvZiBsaXN0ZW5lcnMgd2hvIHdpbGwKLSAqIGJlIG5vdGlmaWVkIHdoZW4gdGhlIHJlY2VpdmVyJ3MgdGV4dCBpcyBtb2RpZmllZCwgYnkgc2VuZGluZwotICogaXQgb25lIG9mIHRoZSBtZXNzYWdlcyBkZWZpbmVkIGluIHRoZSA8Y29kZT5Nb2RpZnlMaXN0ZW5lcjwvY29kZT4KLSAqIGludGVyZmFjZS4KLSAqCi0gKiBAcGFyYW0gbGlzdGVuZXIgdGhlIGxpc3RlbmVyIHdoaWNoIHNob3VsZCBiZSBub3RpZmllZAotICoKLSAqIEBleGNlcHRpb24gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9OVUxMX0FSR1VNRU5UIC0gaWYgdGhlIGxpc3RlbmVyIGlzIG51bGw8L2xpPgotICogPC91bD4KLSAqIEBleGNlcHRpb24gb3JnLmVjbGlwc2Uuc3d0LlNXVEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfV0lER0VUX0RJU1BPU0VEIC0gaWYgdGhlIHJlY2VpdmVyIGhhcyBiZWVuIGRpc3Bvc2VkPC9saT4KLSAqICAgIDxsaT5FUlJPUl9USFJFQURfSU5WQUxJRF9BQ0NFU1MgLSBpZiBub3QgY2FsbGVkIGZyb20gdGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQgdGhlIHJlY2VpdmVyPC9saT4KLSAqIDwvdWw+Ci0gKgotICogQHNlZSBNb2RpZnlMaXN0ZW5lcgotICogQHNlZSAjcmVtb3ZlTW9kaWZ5TGlzdGVuZXIKLSAqLwotcHVibGljIHZvaWQgYWRkTW9kaWZ5TGlzdGVuZXIgKE1vZGlmeUxpc3RlbmVyIGxpc3RlbmVyKSB7Ci0JY2hlY2tXaWRnZXQoKTsKLQlpZiAobGlzdGVuZXIgPT0gbnVsbCkgU1dULmVycm9yIChTV1QuRVJST1JfTlVMTF9BUkdVTUVOVCk7Ci0JVHlwZWRMaXN0ZW5lciB0eXBlZExpc3RlbmVyID0gbmV3IFR5cGVkTGlzdGVuZXIgKGxpc3RlbmVyKTsKLQlhZGRMaXN0ZW5lciAoU1dULk1vZGlmeSwgdHlwZWRMaXN0ZW5lcik7Ci19Ci0vKioKLSAqIEFkZHMgdGhlIGxpc3RlbmVyIHRvIHRoZSBjb2xsZWN0aW9uIG9mIGxpc3RlbmVycyB3aG8gd2lsbAotICogYmUgbm90aWZpZWQgd2hlbiB0aGUgcmVjZWl2ZXIncyBzZWxlY3Rpb24gY2hhbmdlcywgYnkgc2VuZGluZwotICogaXQgb25lIG9mIHRoZSBtZXNzYWdlcyBkZWZpbmVkIGluIHRoZSA8Y29kZT5TZWxlY3Rpb25MaXN0ZW5lcjwvY29kZT4KLSAqIGludGVyZmFjZS4KLSAqIDxwPgotICogPGNvZGU+d2lkZ2V0U2VsZWN0ZWQ8L2NvZGU+IGlzIGNhbGxlZCB3aGVuIHRoZSBjb21ibydzIGxpc3Qgc2VsZWN0aW9uIGNoYW5nZXMuCi0gKiA8Y29kZT53aWRnZXREZWZhdWx0U2VsZWN0ZWQ8L2NvZGU+IGlzIHR5cGljYWxseSBjYWxsZWQgd2hlbiBFTlRFUiBpcyBwcmVzc2VkIHRoZSBjb21ibydzIHRleHQgYXJlYS4KLSAqIDwvcD4KLSAqCi0gKiBAcGFyYW0gbGlzdGVuZXIgdGhlIGxpc3RlbmVyIHdoaWNoIHNob3VsZCBiZSBub3RpZmllZAotICoKLSAqIEBleGNlcHRpb24gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9OVUxMX0FSR1VNRU5UIC0gaWYgdGhlIGxpc3RlbmVyIGlzIG51bGw8L2xpPgotICogPC91bD4KLSAqIEBleGNlcHRpb24gb3JnLmVjbGlwc2Uuc3d0LlNXVEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfV0lER0VUX0RJU1BPU0VEIC0gaWYgdGhlIHJlY2VpdmVyIGhhcyBiZWVuIGRpc3Bvc2VkPC9saT4KLSAqICAgIDxsaT5FUlJPUl9USFJFQURfSU5WQUxJRF9BQ0NFU1MgLSBpZiBub3QgY2FsbGVkIGZyb20gdGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQgdGhlIHJlY2VpdmVyPC9saT4KLSAqIDwvdWw+Ci0gKgotICogQHNlZSBTZWxlY3Rpb25MaXN0ZW5lcgotICogQHNlZSAjcmVtb3ZlU2VsZWN0aW9uTGlzdGVuZXIKLSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudAotICovCi1wdWJsaWMgdm9pZCBhZGRTZWxlY3Rpb25MaXN0ZW5lcihTZWxlY3Rpb25MaXN0ZW5lciBsaXN0ZW5lcikgewotCWNoZWNrV2lkZ2V0KCk7Ci0JaWYgKGxpc3RlbmVyID09IG51bGwpIFNXVC5lcnJvciAoU1dULkVSUk9SX05VTExfQVJHVU1FTlQpOwotCVR5cGVkTGlzdGVuZXIgdHlwZWRMaXN0ZW5lciA9IG5ldyBUeXBlZExpc3RlbmVyIChsaXN0ZW5lcik7Ci0JYWRkTGlzdGVuZXIgKFNXVC5TZWxlY3Rpb24sdHlwZWRMaXN0ZW5lcik7Ci0JYWRkTGlzdGVuZXIgKFNXVC5EZWZhdWx0U2VsZWN0aW9uLHR5cGVkTGlzdGVuZXIpOwotfQotdm9pZCBhcnJvd0V2ZW50IChFdmVudCBldmVudCkgewotCXN3aXRjaCAoZXZlbnQudHlwZSkgewotCQljYXNlIFNXVC5Gb2N1c0luOiB7Ci0JCQloYW5kbGVGb2N1cyAoU1dULkZvY3VzSW4pOwotCQkJYnJlYWs7Ci0JCX0KLQkJY2FzZSBTV1QuU2VsZWN0aW9uOiB7Ci0JCQlkcm9wRG93biAoIWlzRHJvcHBlZCAoKSk7Ci0JCQlicmVhazsKLQkJfQotCX0KLX0KLS8qKgotICogU2V0cyB0aGUgc2VsZWN0aW9uIGluIHRoZSByZWNlaXZlcidzIHRleHQgZmllbGQgdG8gYW4gZW1wdHkKLSAqIHNlbGVjdGlvbiBzdGFydGluZyBqdXN0IGJlZm9yZSB0aGUgZmlyc3QgY2hhcmFjdGVyLiBJZiB0aGUKLSAqIHRleHQgZmllbGQgaXMgZWRpdGFibGUsIHRoaXMgaGFzIHRoZSBlZmZlY3Qgb2YgcGxhY2luZyB0aGUKLSAqIGktYmVhbSBhdCB0aGUgc3RhcnQgb2YgdGhlIHRleHQuCi0gKiA8cD4KLSAqIE5vdGU6IFRvIGNsZWFyIHRoZSBzZWxlY3RlZCBpdGVtcyBpbiB0aGUgcmVjZWl2ZXIncyBsaXN0LCAKLSAqIHVzZSA8Y29kZT5kZXNlbGVjdEFsbCgpPC9jb2RlPi4KLSAqIDwvcD4KLSAqCi0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICoKLSAqIEBzZWUgI2Rlc2VsZWN0QWxsCi0gKi8KLXB1YmxpYyB2b2lkIGNsZWFyU2VsZWN0aW9uICgpIHsKLQljaGVja1dpZGdldCAoKTsKLQl0ZXh0LmNsZWFyU2VsZWN0aW9uICgpOwotCWxpc3QuZGVzZWxlY3RBbGwgKCk7Ci19Ci12b2lkIGNvbWJvRXZlbnQgKEV2ZW50IGV2ZW50KSB7Ci0Jc3dpdGNoIChldmVudC50eXBlKSB7Ci0JCWNhc2UgU1dULkRpc3Bvc2U6Ci0JCQlpZiAocG9wdXAgIT0gbnVsbCAmJiAhcG9wdXAuaXNEaXNwb3NlZCAoKSkgewotCQkJCWxpc3QucmVtb3ZlTGlzdGVuZXIgKFNXVC5EaXNwb3NlLCBsaXN0ZW5lcik7Ci0JCQkJcG9wdXAuZGlzcG9zZSAoKTsKLQkJCX0KLQkJCVNoZWxsIHNoZWxsID0gZ2V0U2hlbGwgKCk7Ci0JCQlzaGVsbC5yZW1vdmVMaXN0ZW5lciAoU1dULkRlYWN0aXZhdGUsIGxpc3RlbmVyKTsKLQkJCURpc3BsYXkgZGlzcGxheSA9IGdldERpc3BsYXkgKCk7Ci0JCQlkaXNwbGF5LnJlbW92ZUZpbHRlciAoU1dULkZvY3VzSW4sIGZpbHRlcik7Ci0JCQlwb3B1cCA9IG51bGw7ICAKLQkJCXRleHQgPSBudWxsOyAgCi0JCQlsaXN0ID0gbnVsbDsgIAotCQkJYXJyb3cgPSBudWxsOwotCQkJYnJlYWs7Ci0JCWNhc2UgU1dULk1vdmU6Ci0JCQlkcm9wRG93biAoZmFsc2UpOwotCQkJYnJlYWs7Ci0JCWNhc2UgU1dULlJlc2l6ZToKLQkJCWludGVybmFsTGF5b3V0IChmYWxzZSk7Ci0JCQlicmVhazsKLQl9Ci19Ci0KLXB1YmxpYyBQb2ludCBjb21wdXRlU2l6ZSAoaW50IHdIaW50LCBpbnQgaEhpbnQsIGJvb2xlYW4gY2hhbmdlZCkgewotCWNoZWNrV2lkZ2V0ICgpOwotCWludCB3aWR0aCA9IDAsIGhlaWdodCA9IDA7Ci0JU3RyaW5nW10gaXRlbXMgPSBsaXN0LmdldEl0ZW1zICgpOwotCWludCB0ZXh0V2lkdGggPSAwOwotCUdDIGdjID0gbmV3IEdDICh0ZXh0KTsKLQlpbnQgc3BhY2VyID0gZ2Muc3RyaW5nRXh0ZW50ICgiICIpLng7IC8vJE5PTi1OTFMtMSQKLQlmb3IgKGludCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7Ci0JCXRleHRXaWR0aCA9IE1hdGgubWF4IChnYy5zdHJpbmdFeHRlbnQgKGl0ZW1zW2ldKS54LCB0ZXh0V2lkdGgpOwotCX0KLQlnYy5kaXNwb3NlKCk7Ci0JUG9pbnQgdGV4dFNpemUgPSB0ZXh0LmNvbXB1dGVTaXplIChTV1QuREVGQVVMVCwgU1dULkRFRkFVTFQsIGNoYW5nZWQpOwotCVBvaW50IGFycm93U2l6ZSA9IGFycm93LmNvbXB1dGVTaXplIChTV1QuREVGQVVMVCwgU1dULkRFRkFVTFQsIGNoYW5nZWQpOwotCVBvaW50IGxpc3RTaXplID0gbGlzdC5jb21wdXRlU2l6ZSAoU1dULkRFRkFVTFQsIFNXVC5ERUZBVUxULCBjaGFuZ2VkKTsKLQlpbnQgYm9yZGVyV2lkdGggPSBnZXRCb3JkZXJXaWR0aCAoKTsKLQkKLQloZWlnaHQgPSBNYXRoLm1heCAodGV4dFNpemUueSwgYXJyb3dTaXplLnkpOwotCXdpZHRoID0gTWF0aC5tYXggKHRleHRXaWR0aCArIDIqc3BhY2VyICsgYXJyb3dTaXplLnggKyAyKmJvcmRlcldpZHRoLCBsaXN0U2l6ZS54KTsKLQlpZiAod0hpbnQgIT0gU1dULkRFRkFVTFQpIHdpZHRoID0gd0hpbnQ7Ci0JaWYgKGhIaW50ICE9IFNXVC5ERUZBVUxUKSBoZWlnaHQgPSBoSGludDsKLQlyZXR1cm4gbmV3IFBvaW50ICh3aWR0aCArIDIqYm9yZGVyV2lkdGgsIGhlaWdodCArIDIqYm9yZGVyV2lkdGgpOwotfQotdm9pZCBjcmVhdGVQb3B1cChTdHJpbmdbXSBpdGVtcywgaW50IHNlbGVjdGlvbkluZGV4KSB7CQkKLQkJLy8gY3JlYXRlIHNoZWxsIGFuZCBsaXN0Ci0JCXBvcHVwID0gbmV3IFNoZWxsIChnZXRTaGVsbCAoKSwgU1dULk5PX1RSSU0gfCBTV1QuT05fVE9QKTsKLQkJaW50IHN0eWxlID0gZ2V0U3R5bGUgKCk7Ci0JCWludCBsaXN0U3R5bGUgPSBTV1QuU0lOR0xFIHwgU1dULlZfU0NST0xMOwotCQlpZiAoKHN0eWxlICYgU1dULkZMQVQpICE9IDApIGxpc3RTdHlsZSB8PSBTV1QuRkxBVDsKLQkJaWYgKChzdHlsZSAmIFNXVC5SSUdIVF9UT19MRUZUKSAhPSAwKSBsaXN0U3R5bGUgfD0gU1dULlJJR0hUX1RPX0xFRlQ7Ci0JCWlmICgoc3R5bGUgJiBTV1QuTEVGVF9UT19SSUdIVCkgIT0gMCkgbGlzdFN0eWxlIHw9IFNXVC5MRUZUX1RPX1JJR0hUOwotCQlsaXN0ID0gbmV3IExpc3QgKHBvcHVwLCBsaXN0U3R5bGUpOwotCQlpZiAoZm9udCAhPSBudWxsKSBsaXN0LnNldEZvbnQgKGZvbnQpOwotCQlpZiAoZm9yZWdyb3VuZCAhPSBudWxsKSBsaXN0LnNldEZvcmVncm91bmQgKGZvcmVncm91bmQpOwotCQlpZiAoYmFja2dyb3VuZCAhPSBudWxsKSBsaXN0LnNldEJhY2tncm91bmQgKGJhY2tncm91bmQpOwotCQkKLQkJaW50IFtdIHBvcHVwRXZlbnRzID0ge1NXVC5DbG9zZSwgU1dULlBhaW50LCBTV1QuRGVhY3RpdmF0ZX07Ci0JCWZvciAoaW50IGk9MDsgaTxwb3B1cEV2ZW50cy5sZW5ndGg7IGkrKykgcG9wdXAuYWRkTGlzdGVuZXIgKHBvcHVwRXZlbnRzIFtpXSwgbGlzdGVuZXIpOwotCQlpbnQgW10gbGlzdEV2ZW50cyA9IHtTV1QuTW91c2VVcCwgU1dULlNlbGVjdGlvbiwgU1dULlRyYXZlcnNlLCBTV1QuS2V5RG93biwgU1dULktleVVwLCBTV1QuRm9jdXNJbiwgU1dULkRpc3Bvc2V9OwotCQlmb3IgKGludCBpPTA7IGk8bGlzdEV2ZW50cy5sZW5ndGg7IGkrKykgbGlzdC5hZGRMaXN0ZW5lciAobGlzdEV2ZW50cyBbaV0sIGxpc3RlbmVyKTsKLQkJCi0JCWlmIChpdGVtcyAhPSBudWxsKSBsaXN0LnNldEl0ZW1zIChpdGVtcyk7Ci0JCWlmIChzZWxlY3Rpb25JbmRleCAhPSAtMSkgbGlzdC5zZXRTZWxlY3Rpb24gKHNlbGVjdGlvbkluZGV4KTsKLX0KLS8qKgotICogRGVzZWxlY3RzIHRoZSBpdGVtIGF0IHRoZSBnaXZlbiB6ZXJvLXJlbGF0aXZlIGluZGV4IGluIHRoZSByZWNlaXZlcidzIAotICogbGlzdC4gIElmIHRoZSBpdGVtIGF0IHRoZSBpbmRleCB3YXMgYWxyZWFkeSBkZXNlbGVjdGVkLCBpdCByZW1haW5zCi0gKiBkZXNlbGVjdGVkLiBJbmRpY2VzIHRoYXQgYXJlIG91dCBvZiByYW5nZSBhcmUgaWdub3JlZC4KLSAqCi0gKiBAcGFyYW0gaW5kZXggdGhlIGluZGV4IG9mIHRoZSBpdGVtIHRvIGRlc2VsZWN0Ci0gKgotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9XSURHRVRfRElTUE9TRUQgLSBpZiB0aGUgcmVjZWl2ZXIgaGFzIGJlZW4gZGlzcG9zZWQ8L2xpPgotICogICAgPGxpPkVSUk9SX1RIUkVBRF9JTlZBTElEX0FDQ0VTUyAtIGlmIG5vdCBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgcmVjZWl2ZXI8L2xpPgotICogPC91bD4KLSAqLwotcHVibGljIHZvaWQgZGVzZWxlY3QgKGludCBpbmRleCkgewotCWNoZWNrV2lkZ2V0ICgpOwotCWxpc3QuZGVzZWxlY3QgKGluZGV4KTsKLX0KLS8qKgotICogRGVzZWxlY3RzIGFsbCBzZWxlY3RlZCBpdGVtcyBpbiB0aGUgcmVjZWl2ZXIncyBsaXN0LgotICogPHA+Ci0gKiBOb3RlOiBUbyBjbGVhciB0aGUgc2VsZWN0aW9uIGluIHRoZSByZWNlaXZlcidzIHRleHQgZmllbGQsCi0gKiB1c2UgPGNvZGU+Y2xlYXJTZWxlY3Rpb24oKTwvY29kZT4uCi0gKiA8L3A+Ci0gKgotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9XSURHRVRfRElTUE9TRUQgLSBpZiB0aGUgcmVjZWl2ZXIgaGFzIGJlZW4gZGlzcG9zZWQ8L2xpPgotICogICAgPGxpPkVSUk9SX1RIUkVBRF9JTlZBTElEX0FDQ0VTUyAtIGlmIG5vdCBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgcmVjZWl2ZXI8L2xpPgotICogPC91bD4KLSAqCi0gKiBAc2VlICNjbGVhclNlbGVjdGlvbgotICovCi1wdWJsaWMgdm9pZCBkZXNlbGVjdEFsbCAoKSB7Ci0JY2hlY2tXaWRnZXQgKCk7Ci0JbGlzdC5kZXNlbGVjdEFsbCAoKTsKLX0KLXZvaWQgZHJvcERvd24gKGJvb2xlYW4gZHJvcCkgewotCWlmIChkcm9wID09IGlzRHJvcHBlZCAoKSkgcmV0dXJuOwotCWlmICghZHJvcCkgewotCQlwb3B1cC5zZXRWaXNpYmxlIChmYWxzZSk7Ci0JCXRleHQuc2VsZWN0QWxsKCk7Ci0JCWlmICghaXNEaXNwb3NlZCAoKSYmIGFycm93LmlzRm9jdXNDb250cm9sKCkpIHsKLQkJCXRleHQuc2V0Rm9jdXMoKTsKLQkJfQotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGdldFNoZWxsKCkgIT0gcG9wdXAuZ2V0UGFyZW50ICgpKSB7Ci0JCVN0cmluZ1tdIGl0ZW1zID0gbGlzdC5nZXRJdGVtcyAoKTsKLQkJaW50IHNlbGVjdGlvbkluZGV4ID0gbGlzdC5nZXRTZWxlY3Rpb25JbmRleCAoKTsKLQkJbGlzdC5yZW1vdmVMaXN0ZW5lciAoU1dULkRpc3Bvc2UsIGxpc3RlbmVyKTsKLQkJcG9wdXAuZGlzcG9zZSgpOwotCQlwb3B1cCA9IG51bGw7Ci0JCWxpc3QgPSBudWxsOwotCQljcmVhdGVQb3B1cCAoaXRlbXMsIHNlbGVjdGlvbkluZGV4KTsKLQl9Ci0JCi0JUG9pbnQgc2l6ZSA9IGdldFNpemUgKCk7Ci0JaW50IGl0ZW1Db3VudCA9IGxpc3QuZ2V0SXRlbUNvdW50ICgpOwotCWl0ZW1Db3VudCA9IChpdGVtQ291bnQgPT0gMCkgPyB2aXNpYmxlSXRlbUNvdW50IDogTWF0aC5taW4odmlzaWJsZUl0ZW1Db3VudCwgaXRlbUNvdW50KTsKLQlpbnQgaXRlbUhlaWdodCA9IGxpc3QuZ2V0SXRlbUhlaWdodCAoKSAqIGl0ZW1Db3VudDsKLQlQb2ludCBsaXN0U2l6ZSA9IGxpc3QuY29tcHV0ZVNpemUgKFNXVC5ERUZBVUxULCBpdGVtSGVpZ2h0LCBmYWxzZSk7Ci0JbGlzdC5zZXRCb3VuZHMgKDEsIDEsIE1hdGgubWF4IChzaXplLnggLSAyLCBsaXN0U2l6ZS54KSwgbGlzdFNpemUueSk7Ci0JCi0JaW50IGluZGV4ID0gbGlzdC5nZXRTZWxlY3Rpb25JbmRleCAoKTsKLQlpZiAoaW5kZXggIT0gLTEpIGxpc3Quc2V0VG9wSW5kZXggKGluZGV4KTsKLQlEaXNwbGF5IGRpc3BsYXkgPSBnZXREaXNwbGF5ICgpOwotCVJlY3RhbmdsZSBsaXN0UmVjdCA9IGxpc3QuZ2V0Qm91bmRzICgpOwotCVJlY3RhbmdsZSBwYXJlbnRSZWN0ID0gZGlzcGxheS5tYXAgKGdldFBhcmVudCAoKSwgbnVsbCwgZ2V0Qm91bmRzICgpKTsKLQlQb2ludCBjb21ib1NpemUgPSBnZXRTaXplICgpOwotCVJlY3RhbmdsZSBkaXNwbGF5UmVjdCA9IGdldE1vbml0b3IgKCkuZ2V0Q2xpZW50QXJlYSAoKTsKLQlpbnQgd2lkdGggPSBNYXRoLm1heCAoY29tYm9TaXplLngsIGxpc3RSZWN0LndpZHRoICsgMik7Ci0JaW50IGhlaWdodCA9IGxpc3RSZWN0LmhlaWdodCArIDI7Ci0JaW50IHggPSBwYXJlbnRSZWN0Lng7Ci0JaW50IHkgPSBwYXJlbnRSZWN0LnkgKyBjb21ib1NpemUueTsKLQlpZiAoeSArIGhlaWdodCA+IGRpc3BsYXlSZWN0LnkgKyBkaXNwbGF5UmVjdC5oZWlnaHQpIHkgPSBwYXJlbnRSZWN0LnkgLSBoZWlnaHQ7Ci0JaWYgKHggKyB3aWR0aCA+IGRpc3BsYXlSZWN0LnggKyBkaXNwbGF5UmVjdC53aWR0aCkgeCA9IGRpc3BsYXlSZWN0LnggKyBkaXNwbGF5UmVjdC53aWR0aCAtIGxpc3RSZWN0LndpZHRoOwotCXBvcHVwLnNldEJvdW5kcyAoeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci0JcG9wdXAuc2V0VmlzaWJsZSAodHJ1ZSk7Ci0JbGlzdC5zZXRGb2N1cyAoKTsKLX0KLS8qCi0gKiBSZXR1cm4gdGhlIGxvd2VyY2FzZSBvZiB0aGUgZmlyc3Qgbm9uLScmJyBjaGFyYWN0ZXIgZm9sbG93aW5nCi0gKiBhbiAnJicgY2hhcmFjdGVyIGluIHRoZSBnaXZlbiBzdHJpbmcuIElmIHRoZXJlIGFyZSBubyAnJicKLSAqIGNoYXJhY3RlcnMgaW4gdGhlIGdpdmVuIHN0cmluZywgcmV0dXJuICdcMCcuCi0gKi8KLWNoYXIgX2ZpbmRNbmVtb25pYyAoU3RyaW5nIHN0cmluZykgewotCWlmIChzdHJpbmcgPT0gbnVsbCkgcmV0dXJuICdcMCc7Ci0JaW50IGluZGV4ID0gMDsKLQlpbnQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCAoKTsKLQlkbyB7Ci0JCXdoaWxlIChpbmRleCA8IGxlbmd0aCAmJiBzdHJpbmcuY2hhckF0IChpbmRleCkgIT0gJyYnKSBpbmRleCsrOwotCQlpZiAoKytpbmRleCA+PSBsZW5ndGgpIHJldHVybiAnXDAnOwotCQlpZiAoc3RyaW5nLmNoYXJBdCAoaW5kZXgpICE9ICcmJykgcmV0dXJuIENoYXJhY3Rlci50b0xvd2VyQ2FzZSAoc3RyaW5nLmNoYXJBdCAoaW5kZXgpKTsKLQkJaW5kZXgrKzsKLQl9IHdoaWxlIChpbmRleCA8IGxlbmd0aCk7Ci0gCXJldHVybiAnXDAnOwotfQotLyogCi0gKiBSZXR1cm4gdGhlIExhYmVsIGltbWVkaWF0ZWx5IHByZWNlZGluZyB0aGUgcmVjZWl2ZXIgaW4gdGhlIHotb3JkZXIsIAotICogb3IgbnVsbCBpZiBub25lLiAKLSAqLwotTGFiZWwgZ2V0QXNzb2NpYXRlZExhYmVsICgpIHsKLQlDb250cm9sW10gc2libGluZ3MgPSBnZXRQYXJlbnQgKCkuZ2V0Q2hpbGRyZW4gKCk7Ci0JZm9yIChpbnQgaSA9IDA7IGkgPCBzaWJsaW5ncy5sZW5ndGg7IGkrKykgewotCQlpZiAoc2libGluZ3MgW2ldID09IHRoaXMpIHsKLQkJCWlmIChpID4gMCAmJiBzaWJsaW5ncyBbaS0xXSBpbnN0YW5jZW9mIExhYmVsKSB7Ci0JCQkJcmV0dXJuIChMYWJlbCkgc2libGluZ3MgW2ktMV07Ci0JCQl9Ci0JCX0KLQl9Ci0JcmV0dXJuIG51bGw7Ci19Ci1wdWJsaWMgQ29udHJvbCBbXSBnZXRDaGlsZHJlbiAoKSB7Ci0JY2hlY2tXaWRnZXQoKTsKLQlyZXR1cm4gbmV3IENvbnRyb2wgWzBdOwotfQotLyoqCi0gKiBHZXRzIHRoZSBlZGl0YWJsZSBzdGF0ZS4KLSAqCi0gKiBAcmV0dXJuIHdoZXRoZXIgb3Igbm90IHRoZSByZWNlaXZlciBpcyBlZGl0YWJsZQotICogCi0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICogCi0gKiBAc2luY2UgMy4wCi0gKi8KLXB1YmxpYyBib29sZWFuIGdldEVkaXRhYmxlICgpIHsKLQljaGVja1dpZGdldCAoKTsKLQlyZXR1cm4gdGV4dC5nZXRFZGl0YWJsZSgpOwotfQotLyoqCi0gKiBSZXR1cm5zIHRoZSBpdGVtIGF0IHRoZSBnaXZlbiwgemVyby1yZWxhdGl2ZSBpbmRleCBpbiB0aGUKLSAqIHJlY2VpdmVyJ3MgbGlzdC4gVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgaW5kZXggaXMgb3V0Ci0gKiBvZiByYW5nZS4KLSAqCi0gKiBAcGFyYW0gaW5kZXggdGhlIGluZGV4IG9mIHRoZSBpdGVtIHRvIHJldHVybgotICogQHJldHVybiB0aGUgaXRlbSBhdCB0aGUgZ2l2ZW4gaW5kZXgKLSAqCi0gKiBAZXhjZXB0aW9uIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfSU5WQUxJRF9SQU5HRSAtIGlmIHRoZSBpbmRleCBpcyBub3QgYmV0d2VlbiAwIGFuZCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBsaXN0IG1pbnVzIDEgKGluY2x1c2l2ZSk8L2xpPgotICogPC91bD4KLSAqIEBleGNlcHRpb24gb3JnLmVjbGlwc2Uuc3d0LlNXVEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfV0lER0VUX0RJU1BPU0VEIC0gaWYgdGhlIHJlY2VpdmVyIGhhcyBiZWVuIGRpc3Bvc2VkPC9saT4KLSAqICAgIDxsaT5FUlJPUl9USFJFQURfSU5WQUxJRF9BQ0NFU1MgLSBpZiBub3QgY2FsbGVkIGZyb20gdGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQgdGhlIHJlY2VpdmVyPC9saT4KLSAqIDwvdWw+Ci0gKi8KLXB1YmxpYyBTdHJpbmcgZ2V0SXRlbSAoaW50IGluZGV4KSB7Ci0JY2hlY2tXaWRnZXQoKTsKLQlyZXR1cm4gbGlzdC5nZXRJdGVtIChpbmRleCk7Ci19Ci0vKioKLSAqIFJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtcyBjb250YWluZWQgaW4gdGhlIHJlY2VpdmVyJ3MgbGlzdC4KLSAqCi0gKiBAcmV0dXJuIHRoZSBudW1iZXIgb2YgaXRlbXMKLSAqCi0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICovCi1wdWJsaWMgaW50IGdldEl0ZW1Db3VudCAoKSB7Ci0JY2hlY2tXaWRnZXQgKCk7Ci0JcmV0dXJuIGxpc3QuZ2V0SXRlbUNvdW50ICgpOwotfQotLyoqCi0gKiBSZXR1cm5zIHRoZSBoZWlnaHQgb2YgdGhlIGFyZWEgd2hpY2ggd291bGQgYmUgdXNlZCB0bwotICogZGlzcGxheSA8ZW0+b25lPC9lbT4gb2YgdGhlIGl0ZW1zIGluIHRoZSByZWNlaXZlcidzIGxpc3QuCi0gKgotICogQHJldHVybiB0aGUgaGVpZ2h0IG9mIG9uZSBpdGVtCi0gKgotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9XSURHRVRfRElTUE9TRUQgLSBpZiB0aGUgcmVjZWl2ZXIgaGFzIGJlZW4gZGlzcG9zZWQ8L2xpPgotICogICAgPGxpPkVSUk9SX1RIUkVBRF9JTlZBTElEX0FDQ0VTUyAtIGlmIG5vdCBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgcmVjZWl2ZXI8L2xpPgotICogPC91bD4KLSAqLwotcHVibGljIGludCBnZXRJdGVtSGVpZ2h0ICgpIHsKLQljaGVja1dpZGdldCAoKTsKLQlyZXR1cm4gbGlzdC5nZXRJdGVtSGVpZ2h0ICgpOwotfQotLyoqCi0gKiBSZXR1cm5zIGFuIGFycmF5IG9mIDxjb2RlPlN0cmluZzwvY29kZT5zIHdoaWNoIGFyZSB0aGUgaXRlbXMKLSAqIGluIHRoZSByZWNlaXZlcidzIGxpc3QuIAotICogPHA+Ci0gKiBOb3RlOiBUaGlzIGlzIG5vdCB0aGUgYWN0dWFsIHN0cnVjdHVyZSB1c2VkIGJ5IHRoZSByZWNlaXZlcgotICogdG8gbWFpbnRhaW4gaXRzIGxpc3Qgb2YgaXRlbXMsIHNvIG1vZGlmeWluZyB0aGUgYXJyYXkgd2lsbAotICogbm90IGFmZmVjdCB0aGUgcmVjZWl2ZXIuIAotICogPC9wPgotICoKLSAqIEByZXR1cm4gdGhlIGl0ZW1zIGluIHRoZSByZWNlaXZlcidzIGxpc3QKLSAqCi0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICovCi1wdWJsaWMgU3RyaW5nIFtdIGdldEl0ZW1zICgpIHsKLQljaGVja1dpZGdldCAoKTsKLQlyZXR1cm4gbGlzdC5nZXRJdGVtcyAoKTsKLX0KLXB1YmxpYyBNZW51IGdldE1lbnUoKSB7Ci0JcmV0dXJuIHRleHQuZ2V0TWVudSgpOwotfQotLyoqCi0gKiBSZXR1cm5zIGEgPGNvZGU+UG9pbnQ8L2NvZGU+IHdob3NlIHggY29vcmRpbmF0ZSBpcyB0aGUgc3RhcnQKLSAqIG9mIHRoZSBzZWxlY3Rpb24gaW4gdGhlIHJlY2VpdmVyJ3MgdGV4dCBmaWVsZCwgYW5kIHdob3NlIHkKLSAqIGNvb3JkaW5hdGUgaXMgdGhlIGVuZCBvZiB0aGUgc2VsZWN0aW9uLiBUaGUgcmV0dXJuZWQgdmFsdWVzCi0gKiBhcmUgemVyby1yZWxhdGl2ZS4gQW4gImVtcHR5IiBzZWxlY3Rpb24gYXMgaW5kaWNhdGVkIGJ5Ci0gKiB0aGUgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgaGF2aW5nIHRoZSBzYW1lIHZhbHVlLgotICoKLSAqIEByZXR1cm4gYSBwb2ludCByZXByZXNlbnRpbmcgdGhlIHNlbGVjdGlvbiBzdGFydCBhbmQgZW5kCi0gKgotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9XSURHRVRfRElTUE9TRUQgLSBpZiB0aGUgcmVjZWl2ZXIgaGFzIGJlZW4gZGlzcG9zZWQ8L2xpPgotICogICAgPGxpPkVSUk9SX1RIUkVBRF9JTlZBTElEX0FDQ0VTUyAtIGlmIG5vdCBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgcmVjZWl2ZXI8L2xpPgotICogPC91bD4KLSAqLwotcHVibGljIFBvaW50IGdldFNlbGVjdGlvbiAoKSB7Ci0JY2hlY2tXaWRnZXQgKCk7Ci0JcmV0dXJuIHRleHQuZ2V0U2VsZWN0aW9uICgpOwotfQotLyoqCi0gKiBSZXR1cm5zIHRoZSB6ZXJvLXJlbGF0aXZlIGluZGV4IG9mIHRoZSBpdGVtIHdoaWNoIGlzIGN1cnJlbnRseQotICogc2VsZWN0ZWQgaW4gdGhlIHJlY2VpdmVyJ3MgbGlzdCwgb3IgLTEgaWYgbm8gaXRlbSBpcyBzZWxlY3RlZC4KLSAqCi0gKiBAcmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgc2VsZWN0ZWQgaXRlbQotICoKLSAqIEBleGNlcHRpb24gb3JnLmVjbGlwc2Uuc3d0LlNXVEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfV0lER0VUX0RJU1BPU0VEIC0gaWYgdGhlIHJlY2VpdmVyIGhhcyBiZWVuIGRpc3Bvc2VkPC9saT4KLSAqICAgIDxsaT5FUlJPUl9USFJFQURfSU5WQUxJRF9BQ0NFU1MgLSBpZiBub3QgY2FsbGVkIGZyb20gdGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQgdGhlIHJlY2VpdmVyPC9saT4KLSAqIDwvdWw+Ci0gKi8KLXB1YmxpYyBpbnQgZ2V0U2VsZWN0aW9uSW5kZXggKCkgewotCWNoZWNrV2lkZ2V0ICgpOwotCXJldHVybiBsaXN0LmdldFNlbGVjdGlvbkluZGV4ICgpOwotfQotcHVibGljIGludCBnZXRTdHlsZSAoKSB7Ci0JaW50IHN0eWxlID0gc3VwZXIuZ2V0U3R5bGUgKCk7Ci0Jc3R5bGUgJj0gflNXVC5SRUFEX09OTFk7Ci0JaWYgKCF0ZXh0LmdldEVkaXRhYmxlKCkpIHN0eWxlIHw9IFNXVC5SRUFEX09OTFk7IAotCXJldHVybiBzdHlsZTsKLX0KLS8qKgotICogUmV0dXJucyBhIHN0cmluZyBjb250YWluaW5nIGEgY29weSBvZiB0aGUgY29udGVudHMgb2YgdGhlCi0gKiByZWNlaXZlcidzIHRleHQgZmllbGQuCi0gKgotICogQHJldHVybiB0aGUgcmVjZWl2ZXIncyB0ZXh0Ci0gKgotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9XSURHRVRfRElTUE9TRUQgLSBpZiB0aGUgcmVjZWl2ZXIgaGFzIGJlZW4gZGlzcG9zZWQ8L2xpPgotICogICAgPGxpPkVSUk9SX1RIUkVBRF9JTlZBTElEX0FDQ0VTUyAtIGlmIG5vdCBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgcmVjZWl2ZXI8L2xpPgotICogPC91bD4KLSAqLwotcHVibGljIFN0cmluZyBnZXRUZXh0ICgpIHsKLQljaGVja1dpZGdldCAoKTsKLQlyZXR1cm4gdGV4dC5nZXRUZXh0ICgpOwotfQotLyoqCi0gKiBSZXR1cm5zIHRoZSBoZWlnaHQgb2YgdGhlIHJlY2VpdmVycydzIHRleHQgZmllbGQuCi0gKgotICogQHJldHVybiB0aGUgdGV4dCBoZWlnaHQKLSAqCi0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICovCi1wdWJsaWMgaW50IGdldFRleHRIZWlnaHQgKCkgewotCWNoZWNrV2lkZ2V0ICgpOwotCXJldHVybiB0ZXh0LmdldExpbmVIZWlnaHQgKCk7Ci19Ci0vKioKLSAqIFJldHVybnMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhhdCB0aGUgcmVjZWl2ZXIncwotICogdGV4dCBmaWVsZCBpcyBjYXBhYmxlIG9mIGhvbGRpbmcuIElmIHRoaXMgaGFzIG5vdCBiZWVuIGNoYW5nZWQKLSAqIGJ5IDxjb2RlPnNldFRleHRMaW1pdCgpPC9jb2RlPiwgaXQgd2lsbCBiZSB0aGUgY29uc3RhbnQKLSAqIDxjb2RlPkNvbWJvLkxJTUlUPC9jb2RlPi4KLSAqIAotICogQHJldHVybiB0aGUgdGV4dCBsaW1pdAotICogCi0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICovCi1wdWJsaWMgaW50IGdldFRleHRMaW1pdCAoKSB7Ci0JY2hlY2tXaWRnZXQgKCk7Ci0JcmV0dXJuIHRleHQuZ2V0VGV4dExpbWl0ICgpOwotfQotLyoqCi0gKiBHZXRzIHRoZSBudW1iZXIgb2YgaXRlbXMgdGhhdCBhcmUgdmlzaWJsZSBpbiB0aGUgZHJvcAotICogZG93biBwb3J0aW9uIG9mIHRoZSByZWNlaXZlcidzIGxpc3QuCi0gKgotICogQHJldHVybiB0aGUgbnVtYmVyIG9mIGl0ZW1zIHRoYXQgYXJlIHZpc2libGUKLSAqCi0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICogCi0gKiBAc2luY2UgMy4wCi0gKi8KLXB1YmxpYyBpbnQgZ2V0VmlzaWJsZUl0ZW1Db3VudCAoKSB7Ci0JY2hlY2tXaWRnZXQgKCk7Ci0JcmV0dXJuIHZpc2libGVJdGVtQ291bnQ7Ci19Ci12b2lkIGhhbmRsZUZvY3VzIChpbnQgdHlwZSkgewotCWlmIChpc0Rpc3Bvc2VkICgpKSByZXR1cm47Ci0Jc3dpdGNoICh0eXBlKSB7Ci0JCWNhc2UgU1dULkZvY3VzSW46IHsKLQkJCWlmIChoYXNGb2N1cykgcmV0dXJuOwotLy8JCQlpZiAoZ2V0RWRpdGFibGUgKCkpIHRleHQuc2VsZWN0QWxsICgpOwotCQkJaGFzRm9jdXMgPSB0cnVlOwotCQkJU2hlbGwgc2hlbGwgPSBnZXRTaGVsbCAoKTsKLQkJCXNoZWxsLnJlbW92ZUxpc3RlbmVyIChTV1QuRGVhY3RpdmF0ZSwgbGlzdGVuZXIpOwotCQkJc2hlbGwuYWRkTGlzdGVuZXIgKFNXVC5EZWFjdGl2YXRlLCBsaXN0ZW5lcik7Ci0JCQlEaXNwbGF5IGRpc3BsYXkgPSBnZXREaXNwbGF5ICgpOwotCQkJZGlzcGxheS5yZW1vdmVGaWx0ZXIgKFNXVC5Gb2N1c0luLCBmaWx0ZXIpOwotCQkJZGlzcGxheS5hZGRGaWx0ZXIgKFNXVC5Gb2N1c0luLCBmaWx0ZXIpOwotCQkJRXZlbnQgZSA9IG5ldyBFdmVudCAoKTsKLQkJCW5vdGlmeUxpc3RlbmVycyAoU1dULkZvY3VzSW4sIGUpOwotCQkJYnJlYWs7Ci0JCX0KLQkJY2FzZSBTV1QuRm9jdXNPdXQ6IHsKLQkJCWlmICghaGFzRm9jdXMpIHJldHVybjsKLQkJCUNvbnRyb2wgZm9jdXNDb250cm9sID0gZ2V0RGlzcGxheSAoKS5nZXRGb2N1c0NvbnRyb2wgKCk7Ci0JCQlpZiAoZm9jdXNDb250cm9sID09IGFycm93IHx8IGZvY3VzQ29udHJvbCA9PSBsaXN0IHx8IGZvY3VzQ29udHJvbCA9PSB0ZXh0KSByZXR1cm47Ci0JCQloYXNGb2N1cyA9IGZhbHNlOwotCQkJU2hlbGwgc2hlbGwgPSBnZXRTaGVsbCAoKTsKLQkJCXNoZWxsLnJlbW92ZUxpc3RlbmVyKFNXVC5EZWFjdGl2YXRlLCBsaXN0ZW5lcik7Ci0JCQlEaXNwbGF5IGRpc3BsYXkgPSBnZXREaXNwbGF5ICgpOwotCQkJZGlzcGxheS5yZW1vdmVGaWx0ZXIgKFNXVC5Gb2N1c0luLCBmaWx0ZXIpOwotCQkJRXZlbnQgZSA9IG5ldyBFdmVudCAoKTsKLQkJCW5vdGlmeUxpc3RlbmVycyAoU1dULkZvY3VzT3V0LCBlKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotfQotLyoqCi0gKiBTZWFyY2hlcyB0aGUgcmVjZWl2ZXIncyBsaXN0IHN0YXJ0aW5nIGF0IHRoZSBmaXJzdCBpdGVtCi0gKiAoaW5kZXggMCkgdW50aWwgYW4gaXRlbSBpcyBmb3VuZCB0aGF0IGlzIGVxdWFsIHRvIHRoZSAKLSAqIGFyZ3VtZW50LCBhbmQgcmV0dXJucyB0aGUgaW5kZXggb2YgdGhhdCBpdGVtLiBJZiBubyBpdGVtCi0gKiBpcyBmb3VuZCwgcmV0dXJucyAtMS4KLSAqCi0gKiBAcGFyYW0gc3RyaW5nIHRoZSBzZWFyY2ggaXRlbQotICogQHJldHVybiB0aGUgaW5kZXggb2YgdGhlIGl0ZW0KLSAqCi0gKiBAZXhjZXB0aW9uIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfTlVMTF9BUkdVTUVOVCAtIGlmIHRoZSBzdHJpbmcgaXMgbnVsbDwvbGk+Ci0gKiA8L3VsPgotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9XSURHRVRfRElTUE9TRUQgLSBpZiB0aGUgcmVjZWl2ZXIgaGFzIGJlZW4gZGlzcG9zZWQ8L2xpPgotICogICAgPGxpPkVSUk9SX1RIUkVBRF9JTlZBTElEX0FDQ0VTUyAtIGlmIG5vdCBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgcmVjZWl2ZXI8L2xpPgotICogPC91bD4KLSAqLwotcHVibGljIGludCBpbmRleE9mIChTdHJpbmcgc3RyaW5nKSB7Ci0JY2hlY2tXaWRnZXQgKCk7Ci0JaWYgKHN0cmluZyA9PSBudWxsKSBTV1QuZXJyb3IgKFNXVC5FUlJPUl9OVUxMX0FSR1VNRU5UKTsKLQlyZXR1cm4gbGlzdC5pbmRleE9mIChzdHJpbmcpOwotfQotLyoqCi0gKiBTZWFyY2hlcyB0aGUgcmVjZWl2ZXIncyBsaXN0IHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiwgCi0gKiB6ZXJvLXJlbGF0aXZlIGluZGV4IHVudGlsIGFuIGl0ZW0gaXMgZm91bmQgdGhhdCBpcyBlcXVhbAotICogdG8gdGhlIGFyZ3VtZW50LCBhbmQgcmV0dXJucyB0aGUgaW5kZXggb2YgdGhhdCBpdGVtLiBJZgotICogbm8gaXRlbSBpcyBmb3VuZCBvciB0aGUgc3RhcnRpbmcgaW5kZXggaXMgb3V0IG9mIHJhbmdlLAotICogcmV0dXJucyAtMS4KLSAqCi0gKiBAcGFyYW0gc3RyaW5nIHRoZSBzZWFyY2ggaXRlbQotICogQHBhcmFtIHN0YXJ0IHRoZSB6ZXJvLXJlbGF0aXZlIGluZGV4IGF0IHdoaWNoIHRvIGJlZ2luIHRoZSBzZWFyY2gKLSAqIEByZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBpdGVtCi0gKgotICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX05VTExfQVJHVU1FTlQgLSBpZiB0aGUgc3RyaW5nIGlzIG51bGw8L2xpPgotICogPC91bD4KLSAqIEBleGNlcHRpb24gb3JnLmVjbGlwc2Uuc3d0LlNXVEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfV0lER0VUX0RJU1BPU0VEIC0gaWYgdGhlIHJlY2VpdmVyIGhhcyBiZWVuIGRpc3Bvc2VkPC9saT4KLSAqICAgIDxsaT5FUlJPUl9USFJFQURfSU5WQUxJRF9BQ0NFU1MgLSBpZiBub3QgY2FsbGVkIGZyb20gdGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQgdGhlIHJlY2VpdmVyPC9saT4KLSAqIDwvdWw+Ci0gKi8KLXB1YmxpYyBpbnQgaW5kZXhPZiAoU3RyaW5nIHN0cmluZywgaW50IHN0YXJ0KSB7Ci0JY2hlY2tXaWRnZXQgKCk7Ci0JaWYgKHN0cmluZyA9PSBudWxsKSBTV1QuZXJyb3IgKFNXVC5FUlJPUl9OVUxMX0FSR1VNRU5UKTsKLQlyZXR1cm4gbGlzdC5pbmRleE9mIChzdHJpbmcsIHN0YXJ0KTsKLX0KLQotdm9pZCBpbml0QWNjZXNzaWJsZSgpIHsKLQlBY2Nlc3NpYmxlQWRhcHRlciBhY2Nlc3NpYmxlQWRhcHRlciA9IG5ldyBBY2Nlc3NpYmxlQWRhcHRlciAoKSB7Ci0JCXB1YmxpYyB2b2lkIGdldE5hbWUgKEFjY2Vzc2libGVFdmVudCBlKSB7Ci0JCQlTdHJpbmcgbmFtZSA9IG51bGw7Ci0JCQlMYWJlbCBsYWJlbCA9IGdldEFzc29jaWF0ZWRMYWJlbCAoKTsKLQkJCWlmIChsYWJlbCAhPSBudWxsKSB7Ci0JCQkJbmFtZSA9IHN0cmlwTW5lbW9uaWMgKGxhYmVsLmdldFRleHQoKSk7Ci0JCQl9Ci0JCQllLnJlc3VsdCA9IG5hbWU7Ci0JCX0KLQkJcHVibGljIHZvaWQgZ2V0S2V5Ym9hcmRTaG9ydGN1dChBY2Nlc3NpYmxlRXZlbnQgZSkgewotCQkJU3RyaW5nIHNob3J0Y3V0ID0gbnVsbDsKLQkJCUxhYmVsIGxhYmVsID0gZ2V0QXNzb2NpYXRlZExhYmVsICgpOwotCQkJaWYgKGxhYmVsICE9IG51bGwpIHsKLQkJCQlTdHJpbmcgdGV4dCA9IGxhYmVsLmdldFRleHQgKCk7Ci0JCQkJaWYgKHRleHQgIT0gbnVsbCkgewotCQkJCQljaGFyIG1uZW1vbmljID0gX2ZpbmRNbmVtb25pYyAodGV4dCk7Ci0JCQkJCWlmIChtbmVtb25pYyAhPSAnXDAnKSB7Ci0JCQkJCQlzaG9ydGN1dCA9ICJBbHQrIittbmVtb25pYzsgLy8kTk9OLU5MUy0xJAotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJZS5yZXN1bHQgPSBzaG9ydGN1dDsKLQkJfQotCQlwdWJsaWMgdm9pZCBnZXRIZWxwIChBY2Nlc3NpYmxlRXZlbnQgZSkgewotCQkJZS5yZXN1bHQgPSBnZXRUb29sVGlwVGV4dCAoKTsKLQkJfQotCX07Ci0JZ2V0QWNjZXNzaWJsZSAoKS5hZGRBY2Nlc3NpYmxlTGlzdGVuZXIgKGFjY2Vzc2libGVBZGFwdGVyKTsKLQl0ZXh0LmdldEFjY2Vzc2libGUgKCkuYWRkQWNjZXNzaWJsZUxpc3RlbmVyIChhY2Nlc3NpYmxlQWRhcHRlcik7Ci0JbGlzdC5nZXRBY2Nlc3NpYmxlICgpLmFkZEFjY2Vzc2libGVMaXN0ZW5lciAoYWNjZXNzaWJsZUFkYXB0ZXIpOwotCQotCWFycm93LmdldEFjY2Vzc2libGUgKCkuYWRkQWNjZXNzaWJsZUxpc3RlbmVyIChuZXcgQWNjZXNzaWJsZUFkYXB0ZXIoKSB7Ci0JCXB1YmxpYyB2b2lkIGdldE5hbWUgKEFjY2Vzc2libGVFdmVudCBlKSB7Ci0JCQllLnJlc3VsdCA9IGlzRHJvcHBlZCAoKSA/IFNXVC5nZXRNZXNzYWdlICgiU1dUX0Nsb3NlIikgOiBTV1QuZ2V0TWVzc2FnZSAoIlNXVF9PcGVuIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQl9Ci0JCXB1YmxpYyB2b2lkIGdldEtleWJvYXJkU2hvcnRjdXQgKEFjY2Vzc2libGVFdmVudCBlKSB7Ci0JCQllLnJlc3VsdCA9ICJBbHQrRG93biBBcnJvdyI7IC8vJE5PTi1OTFMtMSQKLQkJfQotCQlwdWJsaWMgdm9pZCBnZXRIZWxwIChBY2Nlc3NpYmxlRXZlbnQgZSkgewotCQkJZS5yZXN1bHQgPSBnZXRUb29sVGlwVGV4dCAoKTsKLQkJfQotCX0pOwotCi0JZ2V0QWNjZXNzaWJsZSgpLmFkZEFjY2Vzc2libGVUZXh0TGlzdGVuZXIgKG5ldyBBY2Nlc3NpYmxlVGV4dEFkYXB0ZXIoKSB7Ci0JCXB1YmxpYyB2b2lkIGdldENhcmV0T2Zmc2V0IChBY2Nlc3NpYmxlVGV4dEV2ZW50IGUpIHsKLQkJCWUub2Zmc2V0ID0gdGV4dC5nZXRDYXJldFBvc2l0aW9uICgpOwotCQl9Ci0JCXB1YmxpYyB2b2lkIGdldFNlbGVjdGlvblJhbmdlKEFjY2Vzc2libGVUZXh0RXZlbnQgZSkgewotCQkJUG9pbnQgc2VsID0gdGV4dC5nZXRTZWxlY3Rpb24oKTsKLQkJCWUub2Zmc2V0ID0gc2VsLng7Ci0JCQllLmxlbmd0aCA9IHNlbC55IC0gc2VsLng7Ci0JCX0KLQl9KTsKLQkKLQlnZXRBY2Nlc3NpYmxlKCkuYWRkQWNjZXNzaWJsZUNvbnRyb2xMaXN0ZW5lciAobmV3IEFjY2Vzc2libGVDb250cm9sQWRhcHRlcigpIHsKLQkJcHVibGljIHZvaWQgZ2V0Q2hpbGRBdFBvaW50IChBY2Nlc3NpYmxlQ29udHJvbEV2ZW50IGUpIHsKLQkJCVBvaW50IHRlc3RQb2ludCA9IHRvQ29udHJvbCAoZS54LCBlLnkpOwotCQkJaWYgKGdldEJvdW5kcyAoKS5jb250YWlucyAodGVzdFBvaW50KSkgewotCQkJCWUuY2hpbGRJRCA9IEFDQy5DSElMRElEX1NFTEY7Ci0JCQl9Ci0JCX0KLQkJCi0JCXB1YmxpYyB2b2lkIGdldExvY2F0aW9uIChBY2Nlc3NpYmxlQ29udHJvbEV2ZW50IGUpIHsKLQkJCVJlY3RhbmdsZSBsb2NhdGlvbiA9IGdldEJvdW5kcyAoKTsKLQkJCVBvaW50IHB0ID0gdG9EaXNwbGF5IChsb2NhdGlvbi54LCBsb2NhdGlvbi55KTsKLQkJCWUueCA9IHB0Lng7Ci0JCQllLnkgPSBwdC55OwotCQkJZS53aWR0aCA9IGxvY2F0aW9uLndpZHRoOwotCQkJZS5oZWlnaHQgPSBsb2NhdGlvbi5oZWlnaHQ7Ci0JCX0KLQkJCi0JCXB1YmxpYyB2b2lkIGdldENoaWxkQ291bnQgKEFjY2Vzc2libGVDb250cm9sRXZlbnQgZSkgewotCQkJZS5kZXRhaWwgPSAwOwotCQl9Ci0JCQotCQlwdWJsaWMgdm9pZCBnZXRSb2xlIChBY2Nlc3NpYmxlQ29udHJvbEV2ZW50IGUpIHsKLQkJCWUuZGV0YWlsID0gQUNDLlJPTEVfQ09NQk9CT1g7Ci0JCX0KLQkJCi0JCXB1YmxpYyB2b2lkIGdldFN0YXRlIChBY2Nlc3NpYmxlQ29udHJvbEV2ZW50IGUpIHsKLQkJCWUuZGV0YWlsID0gQUNDLlNUQVRFX05PUk1BTDsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIGdldFZhbHVlIChBY2Nlc3NpYmxlQ29udHJvbEV2ZW50IGUpIHsKLQkJCWUucmVzdWx0ID0gZ2V0VGV4dCAoKTsKLQkJfQotCX0pOwotCi0JdGV4dC5nZXRBY2Nlc3NpYmxlICgpLmFkZEFjY2Vzc2libGVDb250cm9sTGlzdGVuZXIgKG5ldyBBY2Nlc3NpYmxlQ29udHJvbEFkYXB0ZXIgKCkgewotCQlwdWJsaWMgdm9pZCBnZXRSb2xlIChBY2Nlc3NpYmxlQ29udHJvbEV2ZW50IGUpIHsKLQkJCWUuZGV0YWlsID0gdGV4dC5nZXRFZGl0YWJsZSAoKSA/IEFDQy5ST0xFX1RFWFQgOiBBQ0MuUk9MRV9MQUJFTDsKLQkJfQotCX0pOwotCi0JYXJyb3cuZ2V0QWNjZXNzaWJsZSAoKS5hZGRBY2Nlc3NpYmxlQ29udHJvbExpc3RlbmVyIChuZXcgQWNjZXNzaWJsZUNvbnRyb2xBZGFwdGVyKCkgewotCQlwdWJsaWMgdm9pZCBnZXREZWZhdWx0QWN0aW9uIChBY2Nlc3NpYmxlQ29udHJvbEV2ZW50IGUpIHsKLQkJCWUucmVzdWx0ID0gaXNEcm9wcGVkICgpID8gU1dULmdldE1lc3NhZ2UgKCJTV1RfQ2xvc2UiKSA6IFNXVC5nZXRNZXNzYWdlICgiU1dUX09wZW4iKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCX0KLQl9KTsKLX0KLWJvb2xlYW4gaXNEcm9wcGVkICgpIHsKLQlyZXR1cm4gcG9wdXAuZ2V0VmlzaWJsZSAoKTsKLX0KLXB1YmxpYyBib29sZWFuIGlzRm9jdXNDb250cm9sICgpIHsKLQljaGVja1dpZGdldCgpOwotCWlmICh0ZXh0LmlzRm9jdXNDb250cm9sICgpIHx8IGFycm93LmlzRm9jdXNDb250cm9sICgpIHx8IGxpc3QuaXNGb2N1c0NvbnRyb2wgKCkgfHwgcG9wdXAuaXNGb2N1c0NvbnRyb2wgKCkpIHsKLQkJcmV0dXJuIHRydWU7Ci0JfSAKLQlyZXR1cm4gc3VwZXIuaXNGb2N1c0NvbnRyb2wgKCk7Ci19Ci0KLXB1YmxpYyB2b2lkIHNldFRleHRJbmRlbnQoaW50IGluZGVudCkgewotCXRleHRJbmRlbnQgPSBpbmRlbnQ7Ci19Ci0KLXZvaWQgaW50ZXJuYWxMYXlvdXQgKGJvb2xlYW4gY2hhbmdlZCkgewotCWlmIChpc0Ryb3BwZWQgKCkpIGRyb3BEb3duIChmYWxzZSk7Ci0JUmVjdGFuZ2xlIHJlY3QgPSBnZXRDbGllbnRBcmVhICgpOwotCWludCB3aWR0aCA9IHJlY3Qud2lkdGg7Ci0JaW50IGhlaWdodCA9IHJlY3QuaGVpZ2h0OwotCVBvaW50IGFycm93U2l6ZSA9IGFycm93LmNvbXB1dGVTaXplIChTV1QuREVGQVVMVCwgaGVpZ2h0LCBjaGFuZ2VkKTsKLQotCXRleHQucGFjaygpOwotCWludCB0ZXh0SGVpZ2h0ID0gdGV4dC5nZXRCb3VuZHMoKS5oZWlnaHQ7Ci0JaW50IHRleHRYID0gdGV4dEluZGVudDsKLQlpbnQgdGV4dFkgPSAoaGVpZ2h0IC0gdGV4dEhlaWdodCkgLyAyOwotCXRleHQuc2V0TG9jYXRpb24odGV4dFgsIHRleHRZKTsKLQkKLQlhcnJvdy5zZXRCb3VuZHMgKHdpZHRoIC0gYXJyb3dTaXplLngsIDAsIGFycm93U2l6ZS54LCBhcnJvd1NpemUueSk7Ci19Ci12b2lkIGxpc3RFdmVudCAoRXZlbnQgZXZlbnQpIHsKLQlzd2l0Y2ggKGV2ZW50LnR5cGUpIHsKLQkJY2FzZSBTV1QuRGlzcG9zZToKLQkJCWlmIChnZXRTaGVsbCAoKSAhPSBwb3B1cC5nZXRQYXJlbnQgKCkpIHsKLQkJCQlTdHJpbmdbXSBpdGVtcyA9IGxpc3QuZ2V0SXRlbXMgKCk7Ci0JCQkJaW50IHNlbGVjdGlvbkluZGV4ID0gbGlzdC5nZXRTZWxlY3Rpb25JbmRleCAoKTsKLQkJCQlwb3B1cCA9IG51bGw7Ci0JCQkJbGlzdCA9IG51bGw7Ci0JCQkJY3JlYXRlUG9wdXAgKGl0ZW1zLCBzZWxlY3Rpb25JbmRleCk7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBTV1QuRm9jdXNJbjogewotCQkJaGFuZGxlRm9jdXMgKFNXVC5Gb2N1c0luKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWNhc2UgU1dULk1vdXNlVXA6IHsKLQkJCWlmIChldmVudC5idXR0b24gIT0gMSkgcmV0dXJuOwotCQkJZHJvcERvd24gKGZhbHNlKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWNhc2UgU1dULlNlbGVjdGlvbjogewotCQkJaW50IGluZGV4ID0gbGlzdC5nZXRTZWxlY3Rpb25JbmRleCAoKTsKLQkJCWlmIChpbmRleCA9PSAtMSkgcmV0dXJuOwotCQkJdGV4dC5zZXRUZXh0IChsaXN0LmdldEl0ZW0gKGluZGV4KSk7Ci0vLwkJCXRleHQuc2VsZWN0QWxsICgpOwotCQkJbGlzdC5zZXRTZWxlY3Rpb24gKGluZGV4KTsKLQkJCUV2ZW50IGUgPSBuZXcgRXZlbnQgKCk7Ci0JCQllLnRpbWUgPSBldmVudC50aW1lOwotCQkJZS5zdGF0ZU1hc2sgPSBldmVudC5zdGF0ZU1hc2s7Ci0JCQllLmRvaXQgPSBldmVudC5kb2l0OwotCQkJaWYgKCFpc0Ryb3BwZWQoKSkgewotCQkJCW5vdGlmeUxpc3RlbmVycyAoU1dULlNlbGVjdGlvbiwgZSk7Ci0JCQl9Ci0JCQlldmVudC5kb2l0ID0gZS5kb2l0OwotCQkJYnJlYWs7Ci0JCX0KLQkJY2FzZSBTV1QuVHJhdmVyc2U6IHsKLQkJCXN3aXRjaCAoZXZlbnQuZGV0YWlsKSB7Ci0JCQkJY2FzZSBTV1QuVFJBVkVSU0VfUkVUVVJOOgotCQkJCWNhc2UgU1dULlRSQVZFUlNFX0VTQ0FQRToKLQkJCQljYXNlIFNXVC5UUkFWRVJTRV9BUlJPV19QUkVWSU9VUzoKLQkJCQljYXNlIFNXVC5UUkFWRVJTRV9BUlJPV19ORVhUOgotCQkJCQlldmVudC5kb2l0ID0gZmFsc2U7Ci0JCQkJCWJyZWFrOwotCQkJfQotCQkJRXZlbnQgZSA9IG5ldyBFdmVudCAoKTsKLQkJCWUudGltZSA9IGV2ZW50LnRpbWU7Ci0JCQllLmRldGFpbCA9IGV2ZW50LmRldGFpbDsKLQkJCWUuZG9pdCA9IGV2ZW50LmRvaXQ7Ci0JCQllLmNoYXJhY3RlciA9IGV2ZW50LmNoYXJhY3RlcjsKLQkJCWUua2V5Q29kZSA9IGV2ZW50LmtleUNvZGU7Ci0JCQlub3RpZnlMaXN0ZW5lcnMgKFNXVC5UcmF2ZXJzZSwgZSk7Ci0JCQlldmVudC5kb2l0ID0gZS5kb2l0OwotCQkJZXZlbnQuZGV0YWlsID0gZS5kZXRhaWw7Ci0JCQlicmVhazsKLQkJfQotCQljYXNlIFNXVC5LZXlVcDogewkJCi0JCQlFdmVudCBlID0gbmV3IEV2ZW50ICgpOwotCQkJZS50aW1lID0gZXZlbnQudGltZTsKLQkJCWUuY2hhcmFjdGVyID0gZXZlbnQuY2hhcmFjdGVyOwotCQkJZS5rZXlDb2RlID0gZXZlbnQua2V5Q29kZTsKLQkJCWUuc3RhdGVNYXNrID0gZXZlbnQuc3RhdGVNYXNrOwotCQkJCi0JCQlub3RpZnlMaXN0ZW5lcnMgKFNXVC5LZXlVcCwgZSk7Ci0JCQkKLQkJCQotCQkJYnJlYWs7Ci0JCX0KLQkJY2FzZSBTV1QuS2V5RG93bjogewotCQkJaWYgKGV2ZW50LmNoYXJhY3RlciA9PSBTV1QuRVNDKSB7IAotCQkJCS8vIEVzY2FwZSBrZXkgY2FuY2VscyBwb3B1cCBsaXN0Ci0JCQkJZHJvcERvd24gKGZhbHNlKTsKLQkJCX0KLQkJCWlmICgoZXZlbnQuc3RhdGVNYXNrICYgU1dULkFMVCkgIT0gMCAmJiAoZXZlbnQua2V5Q29kZSA9PSBTV1QuQVJST1dfVVAgfHwgZXZlbnQua2V5Q29kZSA9PSBTV1QuQVJST1dfRE9XTikpIHsKLQkJCQlkcm9wRG93biAoZmFsc2UpOwotCQkJfQotCQkJCi0JCQlpZiAoZXZlbnQuY2hhcmFjdGVyID09IFNXVC5DUikgewotCQkJCS8vIEVudGVyIGNhdXNlcyBkZWZhdWx0IHNlbGVjdGlvbgotCQkJCWRyb3BEb3duIChmYWxzZSk7Ci0JCQkJRXZlbnQgZSA9IG5ldyBFdmVudCAoKTsKLQkJCQllLnRpbWUgPSBldmVudC50aW1lOwotCQkJCWUuc3RhdGVNYXNrID0gZXZlbnQuc3RhdGVNYXNrOwotCQkJCW5vdGlmeUxpc3RlbmVycyAoU1dULkRlZmF1bHRTZWxlY3Rpb24sIGUpOwotCQkJfQotCQkJLy8gQXQgdGhpcyBwb2ludCB0aGUgd2lkZ2V0IG1heSBoYXZlIGJlZW4gZGlzcG9zZWQuCi0JCQkvLyBJZiBzbywgZG8gbm90IGNvbnRpbnVlLgotCQkJaWYgKGlzRGlzcG9zZWQgKCkpIGJyZWFrOwotCQkJRXZlbnQgZSA9IG5ldyBFdmVudCgpOwotCQkJZS50aW1lID0gZXZlbnQudGltZTsKLQkJCWUuY2hhcmFjdGVyID0gZXZlbnQuY2hhcmFjdGVyOwotCQkJZS5rZXlDb2RlID0gZXZlbnQua2V5Q29kZTsKLQkJCWUuc3RhdGVNYXNrID0gZXZlbnQuc3RhdGVNYXNrOwotCQkJbm90aWZ5TGlzdGVuZXJzKFNXVC5LZXlEb3duLCBlKTsKLQkJCWJyZWFrOwotCQkJCi0JCX0KLQl9Ci19Ci0KLXZvaWQgcG9wdXBFdmVudChFdmVudCBldmVudCkgewotCXN3aXRjaCAoZXZlbnQudHlwZSkgewotCQljYXNlIFNXVC5QYWludDoKLQkJCS8vIGRyYXcgYmxhY2sgcmVjdGFuZ2xlIGFyb3VuZCBsaXN0Ci0JCQlSZWN0YW5nbGUgbGlzdFJlY3QgPSBsaXN0LmdldEJvdW5kcygpOwotCQkJQ29sb3IgYmxhY2sgPSBnZXREaXNwbGF5KCkuZ2V0U3lzdGVtQ29sb3IoU1dULkNPTE9SX0JMQUNLKTsKLQkJCWV2ZW50LmdjLnNldEZvcmVncm91bmQoYmxhY2spOwotCQkJZXZlbnQuZ2MuZHJhd1JlY3RhbmdsZSgwLCAwLCBsaXN0UmVjdC53aWR0aCArIDEsIGxpc3RSZWN0LmhlaWdodCArIDEpOwotCQkJYnJlYWs7Ci0JCWNhc2UgU1dULkNsb3NlOgotCQkJZXZlbnQuZG9pdCA9IGZhbHNlOwotCQkJZHJvcERvd24gKGZhbHNlKTsKLQkJCWJyZWFrOwotCQljYXNlIFNXVC5EZWFjdGl2YXRlOgotCQkJZHJvcERvd24gKGZhbHNlKTsKLQkJCWJyZWFrOwotCX0KLX0KLXB1YmxpYyB2b2lkIHJlZHJhdyAoKSB7Ci0Jc3VwZXIucmVkcmF3KCk7Ci0JdGV4dC5yZWRyYXcoKTsKLQlhcnJvdy5yZWRyYXcoKTsKLQlpZiAocG9wdXAuaXNWaXNpYmxlKCkpIGxpc3QucmVkcmF3KCk7Ci19Ci1wdWJsaWMgdm9pZCByZWRyYXcgKGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBib29sZWFuIGFsbCkgewotCXN1cGVyLnJlZHJhdyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0cnVlKTsKLX0KLQotLyoqCi0gKiBSZW1vdmVzIHRoZSBpdGVtIGZyb20gdGhlIHJlY2VpdmVyJ3MgbGlzdCBhdCB0aGUgZ2l2ZW4KLSAqIHplcm8tcmVsYXRpdmUgaW5kZXguCi0gKgotICogQHBhcmFtIGluZGV4IHRoZSBpbmRleCBmb3IgdGhlIGl0ZW0KLSAqCi0gKiBAZXhjZXB0aW9uIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfSU5WQUxJRF9SQU5HRSAtIGlmIHRoZSBpbmRleCBpcyBub3QgYmV0d2VlbiAwIGFuZCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBsaXN0IG1pbnVzIDEgKGluY2x1c2l2ZSk8L2xpPgotICogPC91bD4KLSAqIEBleGNlcHRpb24gb3JnLmVjbGlwc2Uuc3d0LlNXVEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfV0lER0VUX0RJU1BPU0VEIC0gaWYgdGhlIHJlY2VpdmVyIGhhcyBiZWVuIGRpc3Bvc2VkPC9saT4KLSAqICAgIDxsaT5FUlJPUl9USFJFQURfSU5WQUxJRF9BQ0NFU1MgLSBpZiBub3QgY2FsbGVkIGZyb20gdGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQgdGhlIHJlY2VpdmVyPC9saT4KLSAqIDwvdWw+Ci0gKi8KLXB1YmxpYyB2b2lkIHJlbW92ZSAoaW50IGluZGV4KSB7Ci0JY2hlY2tXaWRnZXQoKTsKLQlsaXN0LnJlbW92ZSAoaW5kZXgpOwotfQotLyoqCi0gKiBSZW1vdmVzIHRoZSBpdGVtcyBmcm9tIHRoZSByZWNlaXZlcidzIGxpc3Qgd2hpY2ggYXJlCi0gKiBiZXR3ZWVuIHRoZSBnaXZlbiB6ZXJvLXJlbGF0aXZlIHN0YXJ0IGFuZCBlbmQgCi0gKiBpbmRpY2VzIChpbmNsdXNpdmUpLgotICoKLSAqIEBwYXJhbSBzdGFydCB0aGUgc3RhcnQgb2YgdGhlIHJhbmdlCi0gKiBAcGFyYW0gZW5kIHRoZSBlbmQgb2YgdGhlIHJhbmdlCi0gKgotICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX0lOVkFMSURfUkFOR0UgLSBpZiBlaXRoZXIgdGhlIHN0YXJ0IG9yIGVuZCBhcmUgbm90IGJldHdlZW4gMCBhbmQgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgbGlzdCBtaW51cyAxIChpbmNsdXNpdmUpPC9saT4KLSAqIDwvdWw+Ci0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICovCi1wdWJsaWMgdm9pZCByZW1vdmUgKGludCBzdGFydCwgaW50IGVuZCkgewotCWNoZWNrV2lkZ2V0KCk7Ci0JbGlzdC5yZW1vdmUgKHN0YXJ0LCBlbmQpOwotfQotLyoqCi0gKiBTZWFyY2hlcyB0aGUgcmVjZWl2ZXIncyBsaXN0IHN0YXJ0aW5nIGF0IHRoZSBmaXJzdCBpdGVtCi0gKiB1bnRpbCBhbiBpdGVtIGlzIGZvdW5kIHRoYXQgaXMgZXF1YWwgdG8gdGhlIGFyZ3VtZW50LCAKLSAqIGFuZCByZW1vdmVzIHRoYXQgaXRlbSBmcm9tIHRoZSBsaXN0LgotICoKLSAqIEBwYXJhbSBzdHJpbmcgdGhlIGl0ZW0gdG8gcmVtb3ZlCi0gKgotICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX05VTExfQVJHVU1FTlQgLSBpZiB0aGUgc3RyaW5nIGlzIG51bGw8L2xpPgotICogICAgPGxpPkVSUk9SX0lOVkFMSURfQVJHVU1FTlQgLSBpZiB0aGUgc3RyaW5nIGlzIG5vdCBmb3VuZCBpbiB0aGUgbGlzdDwvbGk+Ci0gKiA8L3VsPgotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9XSURHRVRfRElTUE9TRUQgLSBpZiB0aGUgcmVjZWl2ZXIgaGFzIGJlZW4gZGlzcG9zZWQ8L2xpPgotICogICAgPGxpPkVSUk9SX1RIUkVBRF9JTlZBTElEX0FDQ0VTUyAtIGlmIG5vdCBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgcmVjZWl2ZXI8L2xpPgotICogPC91bD4KLSAqLwotcHVibGljIHZvaWQgcmVtb3ZlIChTdHJpbmcgc3RyaW5nKSB7Ci0JY2hlY2tXaWRnZXQoKTsKLQlpZiAoc3RyaW5nID09IG51bGwpIFNXVC5lcnJvciAoU1dULkVSUk9SX05VTExfQVJHVU1FTlQpOwotCWxpc3QucmVtb3ZlIChzdHJpbmcpOwotfQotLyoqCi0gKiBSZW1vdmVzIGFsbCBvZiB0aGUgaXRlbXMgZnJvbSB0aGUgcmVjZWl2ZXIncyBsaXN0IGFuZCBjbGVhciB0aGUKLSAqIGNvbnRlbnRzIG9mIHJlY2VpdmVyJ3MgdGV4dCBmaWVsZC4KLSAqIDxwPgotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9XSURHRVRfRElTUE9TRUQgLSBpZiB0aGUgcmVjZWl2ZXIgaGFzIGJlZW4gZGlzcG9zZWQ8L2xpPgotICogICAgPGxpPkVSUk9SX1RIUkVBRF9JTlZBTElEX0FDQ0VTUyAtIGlmIG5vdCBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgcmVjZWl2ZXI8L2xpPgotICogPC91bD4KLSAqLwotcHVibGljIHZvaWQgcmVtb3ZlQWxsICgpIHsKLQljaGVja1dpZGdldCgpOwotCXRleHQuc2V0VGV4dCAoIiIpOyAvLyROT04tTkxTLTEkCi0JbGlzdC5yZW1vdmVBbGwgKCk7Ci19Ci0vKioKLSAqIFJlbW92ZXMgdGhlIGxpc3RlbmVyIGZyb20gdGhlIGNvbGxlY3Rpb24gb2YgbGlzdGVuZXJzIHdobyB3aWxsCi0gKiBiZSBub3RpZmllZCB3aGVuIHRoZSByZWNlaXZlcidzIHRleHQgaXMgbW9kaWZpZWQuCi0gKgotICogQHBhcmFtIGxpc3RlbmVyIHRoZSBsaXN0ZW5lciB3aGljaCBzaG91bGQgbm8gbG9uZ2VyIGJlIG5vdGlmaWVkCi0gKgotICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX05VTExfQVJHVU1FTlQgLSBpZiB0aGUgbGlzdGVuZXIgaXMgbnVsbDwvbGk+Ci0gKiA8L3VsPgotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9XSURHRVRfRElTUE9TRUQgLSBpZiB0aGUgcmVjZWl2ZXIgaGFzIGJlZW4gZGlzcG9zZWQ8L2xpPgotICogICAgPGxpPkVSUk9SX1RIUkVBRF9JTlZBTElEX0FDQ0VTUyAtIGlmIG5vdCBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgcmVjZWl2ZXI8L2xpPgotICogPC91bD4KLSAqCi0gKiBAc2VlIE1vZGlmeUxpc3RlbmVyCi0gKiBAc2VlICNhZGRNb2RpZnlMaXN0ZW5lcgotICovCi1wdWJsaWMgdm9pZCByZW1vdmVNb2RpZnlMaXN0ZW5lciAoTW9kaWZ5TGlzdGVuZXIgbGlzdGVuZXIpIHsKLQljaGVja1dpZGdldCgpOwotCWlmIChsaXN0ZW5lciA9PSBudWxsKSBTV1QuZXJyb3IgKFNXVC5FUlJPUl9OVUxMX0FSR1VNRU5UKTsKLQlyZW1vdmVMaXN0ZW5lcihTV1QuTW9kaWZ5LCBsaXN0ZW5lcik7CQotfQotLyoqCi0gKiBSZW1vdmVzIHRoZSBsaXN0ZW5lciBmcm9tIHRoZSBjb2xsZWN0aW9uIG9mIGxpc3RlbmVycyB3aG8gd2lsbAotICogYmUgbm90aWZpZWQgd2hlbiB0aGUgcmVjZWl2ZXIncyBzZWxlY3Rpb24gY2hhbmdlcy4KLSAqCi0gKiBAcGFyYW0gbGlzdGVuZXIgdGhlIGxpc3RlbmVyIHdoaWNoIHNob3VsZCBubyBsb25nZXIgYmUgbm90aWZpZWQKLSAqCi0gKiBAZXhjZXB0aW9uIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfTlVMTF9BUkdVTUVOVCAtIGlmIHRoZSBsaXN0ZW5lciBpcyBudWxsPC9saT4KLSAqIDwvdWw+Ci0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICoKLSAqIEBzZWUgU2VsZWN0aW9uTGlzdGVuZXIKLSAqIEBzZWUgI2FkZFNlbGVjdGlvbkxpc3RlbmVyCi0gKi8KLXB1YmxpYyB2b2lkIHJlbW92ZVNlbGVjdGlvbkxpc3RlbmVyIChTZWxlY3Rpb25MaXN0ZW5lciBsaXN0ZW5lcikgewotCWNoZWNrV2lkZ2V0KCk7Ci0JaWYgKGxpc3RlbmVyID09IG51bGwpIFNXVC5lcnJvciAoU1dULkVSUk9SX05VTExfQVJHVU1FTlQpOwotCXJlbW92ZUxpc3RlbmVyKFNXVC5TZWxlY3Rpb24sIGxpc3RlbmVyKTsKLQlyZW1vdmVMaXN0ZW5lcihTV1QuRGVmYXVsdFNlbGVjdGlvbixsaXN0ZW5lcik7CQotfQotLyoqCi0gKiBTZWxlY3RzIHRoZSBpdGVtIGF0IHRoZSBnaXZlbiB6ZXJvLXJlbGF0aXZlIGluZGV4IGluIHRoZSByZWNlaXZlcidzIAotICogbGlzdC4gIElmIHRoZSBpdGVtIGF0IHRoZSBpbmRleCB3YXMgYWxyZWFkeSBzZWxlY3RlZCwgaXQgcmVtYWlucwotICogc2VsZWN0ZWQuIEluZGljZXMgdGhhdCBhcmUgb3V0IG9mIHJhbmdlIGFyZSBpZ25vcmVkLgotICoKLSAqIEBwYXJhbSBpbmRleCB0aGUgaW5kZXggb2YgdGhlIGl0ZW0gdG8gc2VsZWN0Ci0gKgotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9XSURHRVRfRElTUE9TRUQgLSBpZiB0aGUgcmVjZWl2ZXIgaGFzIGJlZW4gZGlzcG9zZWQ8L2xpPgotICogICAgPGxpPkVSUk9SX1RIUkVBRF9JTlZBTElEX0FDQ0VTUyAtIGlmIG5vdCBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgcmVjZWl2ZXI8L2xpPgotICogPC91bD4KLSAqLwotcHVibGljIHZvaWQgc2VsZWN0IChpbnQgaW5kZXgpIHsKLQljaGVja1dpZGdldCgpOwotCWlmIChpbmRleCA9PSAtMSkgewotCQlsaXN0LmRlc2VsZWN0QWxsICgpOwotCQl0ZXh0LnNldFRleHQgKCIiKTsgLy8kTk9OLU5MUy0xJAotCQlyZXR1cm47Ci0JfQotCWlmICgwIDw9IGluZGV4ICYmIGluZGV4IDwgbGlzdC5nZXRJdGVtQ291bnQoKSkgewotCQlpZiAoaW5kZXggIT0gZ2V0U2VsZWN0aW9uSW5kZXgoKSkgewotCQkJdGV4dC5zZXRUZXh0IChsaXN0LmdldEl0ZW0gKGluZGV4KSk7Ci0vLwkJCXRleHQuc2VsZWN0QWxsICgpOwotCQkJbGlzdC5zZWxlY3QgKGluZGV4KTsKLQkJCWxpc3Quc2hvd1NlbGVjdGlvbiAoKTsKLQkJfQotCX0KLX0KLXB1YmxpYyB2b2lkIHNldEJhY2tncm91bmQgKENvbG9yIGNvbG9yKSB7Ci0Jc3VwZXIuc2V0QmFja2dyb3VuZChjb2xvcik7Ci0JYmFja2dyb3VuZCA9IGNvbG9yOwotCWlmICh0ZXh0ICE9IG51bGwpIHRleHQuc2V0QmFja2dyb3VuZChjb2xvcik7Ci0JaWYgKGxpc3QgIT0gbnVsbCkgbGlzdC5zZXRCYWNrZ3JvdW5kKGNvbG9yKTsKLQlpZiAoYXJyb3cgIT0gbnVsbCkgYXJyb3cuc2V0QmFja2dyb3VuZChjb2xvcik7Ci19Ci0vKioKLSAqIFNldHMgdGhlIGVkaXRhYmxlIHN0YXRlLgotICoKLSAqIEBwYXJhbSBlZGl0YWJsZSB0aGUgbmV3IGVkaXRhYmxlIHN0YXRlCi0gKgotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9XSURHRVRfRElTUE9TRUQgLSBpZiB0aGUgcmVjZWl2ZXIgaGFzIGJlZW4gZGlzcG9zZWQ8L2xpPgotICogICAgPGxpPkVSUk9SX1RIUkVBRF9JTlZBTElEX0FDQ0VTUyAtIGlmIG5vdCBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgcmVjZWl2ZXI8L2xpPgotICogPC91bD4KLSAqIAotICogQHNpbmNlIDMuMAotICovCi1wdWJsaWMgdm9pZCBzZXRFZGl0YWJsZSAoYm9vbGVhbiBlZGl0YWJsZSkgewotCWNoZWNrV2lkZ2V0ICgpOwotCXRleHQuc2V0RWRpdGFibGUoZWRpdGFibGUpOwotfQotcHVibGljIHZvaWQgc2V0RW5hYmxlZCAoYm9vbGVhbiBlbmFibGVkKSB7Ci0Jc3VwZXIuc2V0RW5hYmxlZChlbmFibGVkKTsKLQlpZiAocG9wdXAgIT0gbnVsbCkgcG9wdXAuc2V0VmlzaWJsZSAoZmFsc2UpOwotCWlmICh0ZXh0ICE9IG51bGwpIHRleHQuc2V0RW5hYmxlZChlbmFibGVkKTsKLQlpZiAoYXJyb3cgIT0gbnVsbCkgYXJyb3cuc2V0RW5hYmxlZChlbmFibGVkKTsKLX0KLXB1YmxpYyBib29sZWFuIHNldEZvY3VzICgpIHsKLQljaGVja1dpZGdldCgpOwotCXJldHVybiB0ZXh0LnNldEZvY3VzICgpOwotfQotcHVibGljIHZvaWQgc2V0Rm9udCAoRm9udCBmb250KSB7Ci0Jc3VwZXIuc2V0Rm9udCAoZm9udCk7Ci0JdGhpcy5mb250ID0gZm9udDsKLQl0ZXh0LnNldEZvbnQgKGZvbnQpOwotCWxpc3Quc2V0Rm9udCAoZm9udCk7Ci0JaW50ZXJuYWxMYXlvdXQgKHRydWUpOwotfQotcHVibGljIHZvaWQgc2V0Rm9yZWdyb3VuZCAoQ29sb3IgY29sb3IpIHsKLQlzdXBlci5zZXRGb3JlZ3JvdW5kKGNvbG9yKTsKLQlmb3JlZ3JvdW5kID0gY29sb3I7Ci0JaWYgKHRleHQgIT0gbnVsbCkgdGV4dC5zZXRGb3JlZ3JvdW5kKGNvbG9yKTsKLQlpZiAobGlzdCAhPSBudWxsKSBsaXN0LnNldEZvcmVncm91bmQoY29sb3IpOwotCWlmIChhcnJvdyAhPSBudWxsKSBhcnJvdy5zZXRGb3JlZ3JvdW5kKGNvbG9yKTsKLX0KLS8qKgotICogU2V0cyB0aGUgdGV4dCBvZiB0aGUgaXRlbSBpbiB0aGUgcmVjZWl2ZXIncyBsaXN0IGF0IHRoZSBnaXZlbgotICogemVyby1yZWxhdGl2ZSBpbmRleCB0byB0aGUgc3RyaW5nIGFyZ3VtZW50LiBUaGlzIGlzIGVxdWl2YWxlbnQKLSAqIHRvIDxjb2RlPnJlbW92ZTwvY29kZT4naW5nIHRoZSBvbGQgaXRlbSBhdCB0aGUgaW5kZXgsIGFuZCB0aGVuCi0gKiA8Y29kZT5hZGQ8L2NvZGU+J2luZyB0aGUgbmV3IGl0ZW0gYXQgdGhhdCBpbmRleC4KLSAqCi0gKiBAcGFyYW0gaW5kZXggdGhlIGluZGV4IGZvciB0aGUgaXRlbQotICogQHBhcmFtIHN0cmluZyB0aGUgbmV3IHRleHQgZm9yIHRoZSBpdGVtCi0gKgotICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX0lOVkFMSURfUkFOR0UgLSBpZiB0aGUgaW5kZXggaXMgbm90IGJldHdlZW4gMCBhbmQgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgbGlzdCBtaW51cyAxIChpbmNsdXNpdmUpPC9saT4KLSAqICAgIDxsaT5FUlJPUl9OVUxMX0FSR1VNRU5UIC0gaWYgdGhlIHN0cmluZyBpcyBudWxsPC9saT4KLSAqIDwvdWw+Ci0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICovCi1wdWJsaWMgdm9pZCBzZXRJdGVtIChpbnQgaW5kZXgsIFN0cmluZyBzdHJpbmcpIHsKLQljaGVja1dpZGdldCgpOwotCWxpc3Quc2V0SXRlbSAoaW5kZXgsIHN0cmluZyk7Ci19Ci0vKioKLSAqIFNldHMgdGhlIHJlY2VpdmVyJ3MgbGlzdCB0byBiZSB0aGUgZ2l2ZW4gYXJyYXkgb2YgaXRlbXMuCi0gKgotICogQHBhcmFtIGl0ZW1zIHRoZSBhcnJheSBvZiBpdGVtcwotICoKLSAqIEBleGNlcHRpb24gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9OVUxMX0FSR1VNRU5UIC0gaWYgdGhlIGl0ZW1zIGFycmF5IGlzIG51bGw8L2xpPgotICogICAgPGxpPkVSUk9SX0lOVkFMSURfQVJHVU1FTlQgLSBpZiBhbiBpdGVtIGluIHRoZSBpdGVtcyBhcnJheSBpcyBudWxsPC9saT4KLSAqIDwvdWw+Ci0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICovCi1wdWJsaWMgdm9pZCBzZXRJdGVtcyAoU3RyaW5nIFtdIGl0ZW1zKSB7Ci0JY2hlY2tXaWRnZXQgKCk7Ci0JbGlzdC5zZXRJdGVtcyAoaXRlbXMpOwotCWlmICghdGV4dC5nZXRFZGl0YWJsZSAoKSkgdGV4dC5zZXRUZXh0ICgiIik7IC8vJE5PTi1OTFMtMSQKLX0KLS8qKgotICogU2V0cyB0aGUgbGF5b3V0IHdoaWNoIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVjZWl2ZXIgdG8gYmUKLSAqIHRoZSBhcmd1bWVudCB3aGljaCBtYXkgYmUgbnVsbC4KLSAqIDxwPgotICogTm90ZTogTm8gTGF5b3V0IGNhbiBiZSBzZXQgb24gdGhpcyBDb250cm9sIGJlY2F1c2UgaXQgYWxyZWFkeQotICogbWFuYWdlcyB0aGUgc2l6ZSBhbmQgcG9zaXRpb24gb2YgaXRzIGNoaWxkcmVuLgotICogPC9wPgotICoKLSAqIEBwYXJhbSBsYXlvdXQgdGhlIHJlY2VpdmVyJ3MgbmV3IGxheW91dCBvciBudWxsCi0gKgotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9XSURHRVRfRElTUE9TRUQgLSBpZiB0aGUgcmVjZWl2ZXIgaGFzIGJlZW4gZGlzcG9zZWQ8L2xpPgotICogICAgPGxpPkVSUk9SX1RIUkVBRF9JTlZBTElEX0FDQ0VTUyAtIGlmIG5vdCBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgcmVjZWl2ZXI8L2xpPgotICogPC91bD4KLSAqLwotcHVibGljIHZvaWQgc2V0TGF5b3V0IChMYXlvdXQgbGF5b3V0KSB7Ci0JY2hlY2tXaWRnZXQgKCk7Ci0JcmV0dXJuOwotfQotcHVibGljIHZvaWQgc2V0TWVudShNZW51IG1lbnUpIHsKLQl0ZXh0LnNldE1lbnUobWVudSk7Ci19Ci0vKioKLSAqIFNldHMgdGhlIHNlbGVjdGlvbiBpbiB0aGUgcmVjZWl2ZXIncyB0ZXh0IGZpZWxkIHRvIHRoZQotICogcmFuZ2Ugc3BlY2lmaWVkIGJ5IHRoZSBhcmd1bWVudCB3aG9zZSB4IGNvb3JkaW5hdGUgaXMgdGhlCi0gKiBzdGFydCBvZiB0aGUgc2VsZWN0aW9uIGFuZCB3aG9zZSB5IGNvb3JkaW5hdGUgaXMgdGhlIGVuZAotICogb2YgdGhlIHNlbGVjdGlvbi4gCi0gKgotICogQHBhcmFtIHNlbGVjdGlvbiBhIHBvaW50IHJlcHJlc2VudGluZyB0aGUgbmV3IHNlbGVjdGlvbiBzdGFydCBhbmQgZW5kCi0gKgotICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX05VTExfQVJHVU1FTlQgLSBpZiB0aGUgcG9pbnQgaXMgbnVsbDwvbGk+Ci0gKiA8L3VsPgotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9XSURHRVRfRElTUE9TRUQgLSBpZiB0aGUgcmVjZWl2ZXIgaGFzIGJlZW4gZGlzcG9zZWQ8L2xpPgotICogICAgPGxpPkVSUk9SX1RIUkVBRF9JTlZBTElEX0FDQ0VTUyAtIGlmIG5vdCBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgcmVjZWl2ZXI8L2xpPgotICogPC91bD4KLSAqLwotcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uIChQb2ludCBzZWxlY3Rpb24pIHsKLQljaGVja1dpZGdldCgpOwotCWlmIChzZWxlY3Rpb24gPT0gbnVsbCkgU1dULmVycm9yIChTV1QuRVJST1JfTlVMTF9BUkdVTUVOVCk7Ci0JdGV4dC5zZXRTZWxlY3Rpb24gKHNlbGVjdGlvbi54LCBzZWxlY3Rpb24ueSk7Ci19Ci0KLS8qKgotICogU2V0cyB0aGUgY29udGVudHMgb2YgdGhlIHJlY2VpdmVyJ3MgdGV4dCBmaWVsZCB0byB0aGUKLSAqIGdpdmVuIHN0cmluZy4KLSAqIDxwPgotICogTm90ZTogVGhlIHRleHQgZmllbGQgaW4gYSA8Y29kZT5Db21ibzwvY29kZT4gaXMgdHlwaWNhbGx5Ci0gKiBvbmx5IGNhcGFibGUgb2YgZGlzcGxheWluZyBhIHNpbmdsZSBsaW5lIG9mIHRleHQuIFRodXMsCi0gKiBzZXR0aW5nIHRoZSB0ZXh0IHRvIGEgc3RyaW5nIGNvbnRhaW5pbmcgbGluZSBicmVha3Mgb3IKLSAqIG90aGVyIHNwZWNpYWwgY2hhcmFjdGVycyB3aWxsIHByb2JhYmx5IGNhdXNlIGl0IHRvIAotICogZGlzcGxheSBpbmNvcnJlY3RseS4KLSAqIDwvcD4KLSAqCi0gKiBAcGFyYW0gc3RyaW5nIHRoZSBuZXcgdGV4dAotICoKLSAqIEBleGNlcHRpb24gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9OVUxMX0FSR1VNRU5UIC0gaWYgdGhlIHN0cmluZyBpcyBudWxsPC9saT4KLSAqIDwvdWw+Ci0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICovCi1wdWJsaWMgdm9pZCBzZXRUZXh0IChTdHJpbmcgc3RyaW5nKSB7Ci0JY2hlY2tXaWRnZXQoKTsKLQlpZiAoc3RyaW5nID09IG51bGwpIFNXVC5lcnJvciAoU1dULkVSUk9SX05VTExfQVJHVU1FTlQpOwotCWludCBpbmRleCA9IGxpc3QuaW5kZXhPZiAoc3RyaW5nKTsKLQlpZiAoaW5kZXggPT0gLTEpIHsKLQkJbGlzdC5kZXNlbGVjdEFsbCAoKTsKLQkJdGV4dC5zZXRUZXh0IChzdHJpbmcpOwotCQlyZXR1cm47Ci0JfQotCXRleHQuc2V0VGV4dCAoc3RyaW5nKTsKLS8vCXRleHQuc2VsZWN0QWxsICgpOwotCWxpc3Quc2V0U2VsZWN0aW9uIChpbmRleCk7Ci0JbGlzdC5zaG93U2VsZWN0aW9uICgpOwotfQotLyoqCi0gKiBTZXRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRoYXQgdGhlIHJlY2VpdmVyJ3MKLSAqIHRleHQgZmllbGQgaXMgY2FwYWJsZSBvZiBob2xkaW5nIHRvIGJlIHRoZSBhcmd1bWVudC4KLSAqCi0gKiBAcGFyYW0gbGltaXQgbmV3IHRleHQgbGltaXQKLSAqCi0gKiBAZXhjZXB0aW9uIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiA8dWw+Ci0gKiAgICA8bGk+RVJST1JfQ0FOTk9UX0JFX1pFUk8gLSBpZiB0aGUgbGltaXQgaXMgemVybzwvbGk+Ci0gKiA8L3VsPgotICogQGV4Y2VwdGlvbiBvcmcuZWNsaXBzZS5zd3QuU1dURXhjZXB0aW9uIDx1bD4KLSAqICAgIDxsaT5FUlJPUl9XSURHRVRfRElTUE9TRUQgLSBpZiB0aGUgcmVjZWl2ZXIgaGFzIGJlZW4gZGlzcG9zZWQ8L2xpPgotICogICAgPGxpPkVSUk9SX1RIUkVBRF9JTlZBTElEX0FDQ0VTUyAtIGlmIG5vdCBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUgcmVjZWl2ZXI8L2xpPgotICogPC91bD4KLSAqLwotcHVibGljIHZvaWQgc2V0VGV4dExpbWl0IChpbnQgbGltaXQpIHsKLQljaGVja1dpZGdldCgpOwotCXRleHQuc2V0VGV4dExpbWl0IChsaW1pdCk7Ci19Ci0KLXB1YmxpYyB2b2lkIHNldFRvb2xUaXBUZXh0IChTdHJpbmcgc3RyaW5nKSB7Ci0JY2hlY2tXaWRnZXQoKTsKLQlzdXBlci5zZXRUb29sVGlwVGV4dChzdHJpbmcpOwotCWFycm93LnNldFRvb2xUaXBUZXh0IChzdHJpbmcpOwotCXRleHQuc2V0VG9vbFRpcFRleHQgKHN0cmluZyk7CQkKLX0KLQotcHVibGljIHZvaWQgc2V0VmlzaWJsZSAoYm9vbGVhbiB2aXNpYmxlKSB7Ci0Jc3VwZXIuc2V0VmlzaWJsZSh2aXNpYmxlKTsKLQlpZiAoIXZpc2libGUpIHBvcHVwLnNldFZpc2libGUoZmFsc2UpOwotfQotLyoqCi0gKiBTZXRzIHRoZSBudW1iZXIgb2YgaXRlbXMgdGhhdCBhcmUgdmlzaWJsZSBpbiB0aGUgZHJvcAotICogZG93biBwb3J0aW9uIG9mIHRoZSByZWNlaXZlcidzIGxpc3QuCi0gKgotICogQHBhcmFtIGNvdW50IHRoZSBuZXcgbnVtYmVyIG9mIGl0ZW1zIHRvIGJlIHZpc2libGUKLSAqCi0gKiBAZXhjZXB0aW9uIG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gPHVsPgotICogICAgPGxpPkVSUk9SX1dJREdFVF9ESVNQT1NFRCAtIGlmIHRoZSByZWNlaXZlciBoYXMgYmVlbiBkaXNwb3NlZDwvbGk+Ci0gKiAgICA8bGk+RVJST1JfVEhSRUFEX0lOVkFMSURfQUNDRVNTIC0gaWYgbm90IGNhbGxlZCBmcm9tIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSByZWNlaXZlcjwvbGk+Ci0gKiA8L3VsPgotICogCi0gKiBAc2luY2UgMy4wCi0gKi8KLXB1YmxpYyB2b2lkIHNldFZpc2libGVJdGVtQ291bnQgKGludCBjb3VudCkgewotCWNoZWNrV2lkZ2V0ICgpOwotCWlmIChjb3VudCA8IDApIHJldHVybjsKLQl2aXNpYmxlSXRlbUNvdW50ID0gY291bnQ7Ci19Ci1TdHJpbmcgc3RyaXBNbmVtb25pYyAoU3RyaW5nIHN0cmluZykgewotCWludCBpbmRleCA9IDA7Ci0JaW50IGxlbmd0aCA9IHN0cmluZy5sZW5ndGggKCk7Ci0JZG8gewotCQl3aGlsZSAoKGluZGV4IDwgbGVuZ3RoKSAmJiAoc3RyaW5nLmNoYXJBdCAoaW5kZXgpICE9ICcmJykpIGluZGV4Kys7Ci0JCWlmICgrK2luZGV4ID49IGxlbmd0aCkgcmV0dXJuIHN0cmluZzsKLQkJaWYgKHN0cmluZy5jaGFyQXQgKGluZGV4KSAhPSAnJicpIHsKLQkJCXJldHVybiBzdHJpbmcuc3Vic3RyaW5nKDAsIGluZGV4LTEpICsgc3RyaW5nLnN1YnN0cmluZyhpbmRleCwgbGVuZ3RoKTsKLQkJfQotCQlpbmRleCsrOwotCX0gd2hpbGUgKGluZGV4IDwgbGVuZ3RoKTsKLSAJcmV0dXJuIHN0cmluZzsKLX0KLXZvaWQgdGV4dEV2ZW50IChFdmVudCBldmVudCkgewotCXN3aXRjaCAoZXZlbnQudHlwZSkgewotCQljYXNlIFNXVC5Gb2N1c0luOiB7Ci0JCQloYW5kbGVGb2N1cyAoU1dULkZvY3VzSW4pOwotCQkJYnJlYWs7Ci0JCX0KLQkJY2FzZSBTV1QuS2V5RG93bjogewotCQkJaWYgKGV2ZW50LmNoYXJhY3RlciA9PSBTV1QuQ1IpIHsKLQkJCQlkcm9wRG93biAoZmFsc2UpOwotCQkJCUV2ZW50IGUgPSBuZXcgRXZlbnQgKCk7Ci0JCQkJZS50aW1lID0gZXZlbnQudGltZTsKLQkJCQllLnN0YXRlTWFzayA9IGV2ZW50LnN0YXRlTWFzazsKLQkJCQlub3RpZnlMaXN0ZW5lcnMgKFNXVC5EZWZhdWx0U2VsZWN0aW9uLCBlKTsKLQkJCX0KLQkJCS8vQXQgdGhpcyBwb2ludCB0aGUgd2lkZ2V0IG1heSBoYXZlIGJlZW4gZGlzcG9zZWQuCi0JCQkvLyBJZiBzbywgZG8gbm90IGNvbnRpbnVlLgotCQkJaWYgKGlzRGlzcG9zZWQgKCkpIGJyZWFrOwotCQkJCi0JCQlpZiAoZXZlbnQua2V5Q29kZSA9PSBTV1QuQVJST1dfVVAgfHwgZXZlbnQua2V5Q29kZSA9PSBTV1QuQVJST1dfRE9XTikgewotCQkJCWV2ZW50LmRvaXQgPSBmYWxzZTsKLQkJCQlpZiAoKGV2ZW50LnN0YXRlTWFzayAmIFNXVC5BTFQpICE9IDApIHsKLQkJCQkJYm9vbGVhbiBkcm9wcGVkID0gaXNEcm9wcGVkICgpOwotLy8JCQkJCXRleHQuc2VsZWN0QWxsICgpOwotCQkJCQlpZiAoIWRyb3BwZWQpIHNldEZvY3VzICgpOwotCQkJCQlkcm9wRG93biAoIWRyb3BwZWQpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0KLQkJCQlpbnQgb2xkSW5kZXggPSBnZXRTZWxlY3Rpb25JbmRleCAoKTsKLQkJCQlpZiAoZXZlbnQua2V5Q29kZSA9PSBTV1QuQVJST1dfVVApIHsKLQkJCQkJc2VsZWN0IChNYXRoLm1heCAob2xkSW5kZXggLSAxLCAwKSk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJc2VsZWN0IChNYXRoLm1pbiAob2xkSW5kZXggKyAxLCBnZXRJdGVtQ291bnQgKCkgLSAxKSk7Ci0JCQkJfQotCQkJCWlmIChvbGRJbmRleCAhPSBnZXRTZWxlY3Rpb25JbmRleCAoKSkgewotCQkJCQlFdmVudCBlID0gbmV3IEV2ZW50KCk7Ci0JCQkJCWUudGltZSA9IGV2ZW50LnRpbWU7Ci0JCQkJCWUuc3RhdGVNYXNrID0gZXZlbnQuc3RhdGVNYXNrOwotCQkJCQlub3RpZnlMaXN0ZW5lcnMgKFNXVC5TZWxlY3Rpb24sIGUpOwotCQkJCX0KLQkJCQkvL0F0IHRoaXMgcG9pbnQgdGhlIHdpZGdldCBtYXkgaGF2ZSBiZWVuIGRpc3Bvc2VkLgotCQkJCS8vIElmIHNvLCBkbyBub3QgY29udGludWUuCi0JCQkJaWYgKGlzRGlzcG9zZWQgKCkpIGJyZWFrOwotCQkJfQotCQkJCi0JCQkvLyBGdXJ0aGVyIHdvcmsgOiBOZWVkIHRvIGFkZCBzdXBwb3J0IGZvciBpbmNyZW1lbnRhbCBzZWFyY2ggaW4gCi0JCQkvLyBwb3AgdXAgbGlzdCBhcyBjaGFyYWN0ZXJzIHR5cGVkIGluIHRleHQgd2lkZ2V0Ci0JCQkKLQotCQkJRXZlbnQgZSA9IG5ldyBFdmVudCAoKTsKLQkJCWUudGltZSA9IGV2ZW50LnRpbWU7Ci0JCQllLmNoYXJhY3RlciA9IGV2ZW50LmNoYXJhY3RlcjsKLQkJCWUua2V5Q29kZSA9IGV2ZW50LmtleUNvZGU7Ci0JCQllLnN0YXRlTWFzayA9IGV2ZW50LnN0YXRlTWFzazsKLQkJCS8vbm90aWZ5TGlzdGVuZXJzIChTV1QuS2V5RG93biwgZSk7Ci0JCQlicmVhazsKLQkJfQotCQljYXNlIFNXVC5LZXlVcDogewotCQkJRXZlbnQgZSA9IG5ldyBFdmVudCAoKTsKLQkJCWUudGltZSA9IGV2ZW50LnRpbWU7Ci0JCQllLmNoYXJhY3RlciA9IGV2ZW50LmNoYXJhY3RlcjsKLQkJCWUua2V5Q29kZSA9IGV2ZW50LmtleUNvZGU7Ci0JCQllLnN0YXRlTWFzayA9IGV2ZW50LnN0YXRlTWFzazsKLQkJCW5vdGlmeUxpc3RlbmVycyAoU1dULktleVVwLCBlKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWNhc2UgU1dULk1lbnVEZXRlY3Q6IHsKLQkJCUV2ZW50IGUgPSBuZXcgRXZlbnQgKCk7Ci0JCQllLnRpbWUgPSBldmVudC50aW1lOwotCQkJbm90aWZ5TGlzdGVuZXJzIChTV1QuTWVudURldGVjdCwgZSk7Ci0JCQlicmVhazsKLQkJfQotCQljYXNlIFNXVC5Nb2RpZnk6IHsKLQkJCWxpc3QuZGVzZWxlY3RBbGwgKCk7Ci0JCQlFdmVudCBlID0gbmV3IEV2ZW50ICgpOwotCQkJZS50aW1lID0gZXZlbnQudGltZTsKLQkJCW5vdGlmeUxpc3RlbmVycyAoU1dULk1vZGlmeSwgZSk7Ci0JCQlicmVhazsKLQkJfQotCQljYXNlIFNXVC5Nb3VzZURvd246IHsKLQkJCWlmIChldmVudC5idXR0b24gIT0gMSkgcmV0dXJuOwotCQkJaWYgKHRleHQuZ2V0RWRpdGFibGUgKCkpIHJldHVybjsKLQkJCWJvb2xlYW4gZHJvcHBlZCA9IGlzRHJvcHBlZCAoKTsKLS8vCQkJdGV4dC5zZWxlY3RBbGwgKCk7Ci0JCQlpZiAoIWRyb3BwZWQpIHNldEZvY3VzICgpOwotCQkJZHJvcERvd24gKCFkcm9wcGVkKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWNhc2UgU1dULk1vdXNlVXA6IHsKLQkJCWlmIChldmVudC5idXR0b24gIT0gMSkgcmV0dXJuOwotCQkJaWYgKHRleHQuZ2V0RWRpdGFibGUgKCkpIHJldHVybjsKLS8vCQkJdGV4dC5zZWxlY3RBbGwgKCk7Ci0JCQlicmVhazsKLQkJfQotCQljYXNlIFNXVC5UcmF2ZXJzZTogewkJCi0JCQlzd2l0Y2ggKGV2ZW50LmRldGFpbCkgewotCQkJCWNhc2UgU1dULlRSQVZFUlNFX1JFVFVSTjoKLQkJCQljYXNlIFNXVC5UUkFWRVJTRV9BUlJPV19QUkVWSU9VUzoKLQkJCQljYXNlIFNXVC5UUkFWRVJTRV9BUlJPV19ORVhUOgotCQkJCQkvLyBUaGUgZW50ZXIgY2F1c2VzIGRlZmF1bHQgc2VsZWN0aW9uIGFuZAotCQkJCQkvLyB0aGUgYXJyb3cga2V5cyBhcmUgdXNlZCB0byBtYW5pcHVsYXRlIHRoZSBsaXN0IGNvbnRlbnRzIHNvCi0JCQkJCS8vIGRvIG5vdCB1c2UgdGhlbSBmb3IgdHJhdmVyc2FsLgotCQkJCQlldmVudC5kb2l0ID0gZmFsc2U7Ci0JCQkJCWJyZWFrOwotCQkJfQotCQkJCi0JCQlFdmVudCBlID0gbmV3IEV2ZW50ICgpOwotCQkJZS50aW1lID0gZXZlbnQudGltZTsKLQkJCWUuZGV0YWlsID0gZXZlbnQuZGV0YWlsOwotCQkJZS5kb2l0ID0gZXZlbnQuZG9pdDsKLQkJCWUuY2hhcmFjdGVyID0gZXZlbnQuY2hhcmFjdGVyOwotCQkJZS5rZXlDb2RlID0gZXZlbnQua2V5Q29kZTsKLQkJCW5vdGlmeUxpc3RlbmVycyAoU1dULlRyYXZlcnNlLCBlKTsKLQkJCWV2ZW50LmRvaXQgPSBlLmRvaXQ7Ci0JCQlldmVudC5kZXRhaWwgPSBlLmRldGFpbDsKLQkJCWJyZWFrOwotCQl9Ci0JfQotfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZGlyZWN0ZWRpdC9BU0RDb21ib0JveENlbGxFZGl0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2RpcmVjdGVkaXQvQVNEQ29tYm9Cb3hDZWxsRWRpdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlY2Y1YWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZGlyZWN0ZWRpdC9BU0RDb21ib0JveENlbGxFZGl0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5kaXJlY3RlZGl0OwotCi1pbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQXNzZXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ2VsbEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Gb2N1c0FkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Gb2N1c0V2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuS2V5QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLktleUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuVHJhdmVyc2VFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlRyYXZlcnNlTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkdDOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5lZGl0LkNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuSUNvbXBvbmVudERpYWxvZzsKLQotLyoKLSAqIFRoaXMgaXMgYSBjb3B5IG9mIENvbWJvQm94Q2VsbEVkaXRvci4KLSAqIFdlIG5lZWQgdG8gYXBwbHkgYW5kIGRlYWN0aXZhdGUgdGhlIGNvbWJvIG9uIGEgc2luZ2xlIGNsaWNrIChub3Qgb24gYSBkb3VibGUgY2xpY2sgbGlrZQotICogdGhlIENvbWJvQm94Q2VsbEVkaXRvcikuCi0gKi8KLXB1YmxpYyBjbGFzcyBBU0RDb21ib0JveENlbGxFZGl0b3IgZXh0ZW5kcyBDZWxsRWRpdG9yIHsKLQotICAgIC8qKgotICAgICAqIFRoZSBsaXN0IG9mIGl0ZW1zIHRvIHByZXNlbnQgaW4gdGhlIGNvbWJvIGJveC4KLSAgICAgKi8KLSAgICBwcml2YXRlIFN0cmluZ1tdIGl0ZW1zOwotCi0gICAgLyoqCi0gICAgICogVGhlIHplcm8tYmFzZWQgaW5kZXggb2YgdGhlIHNlbGVjdGVkIGl0ZW0uCi0gICAgICovCi0gICAgaW50IHNlbGVjdGlvbjsKLQotICAgIC8qKgotICAgICAqIFRoZSBjdXN0b20gY29tYm8gYm94IGNvbnRyb2wuCi0gICAgICovCi0gICAgQVNEQ0NvbWJvIGNvbWJvQm94OwotICAgIHByaXZhdGUgT2JqZWN0IHNlbGVjdGVkVmFsdWU7Ci0gICAgcHJpdmF0ZSBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBjb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLSAgICBwcml2YXRlIGludCB0ZXh0SW5kZW50ID0gNTsKLQotICAgIC8qKgotICAgICAqIERlZmF1bHQgQ29tYm9Cb3hDZWxsRWRpdG9yIHN0eWxlCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IGRlZmF1bHRTdHlsZSA9IFNXVC5OT05FOwotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIG5ldyBjZWxsIGVkaXRvciB3aXRoIGEgY29tYm8gY29udGFpbmluZyB0aGUgZ2l2ZW4gCi0gICAgICogbGlzdCBvZiBjaG9pY2VzIGFuZCBwYXJlbnRlZCB1bmRlciB0aGUgZ2l2ZW4gY29udHJvbC4gVGhlIGNlbGwKLSAgICAgKiBlZGl0b3IgdmFsdWUgaXMgdGhlIHplcm8tYmFzZWQgaW5kZXggb2YgdGhlIHNlbGVjdGVkIGl0ZW0uCi0gICAgICogSW5pdGlhbGx5LCB0aGUgY2VsbCBlZGl0b3IgaGFzIG5vIGNlbGwgdmFsaWRhdG9yIGFuZAotICAgICAqIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBsaXN0IGlzIHNlbGVjdGVkLiAKLSAgICAgKgotICAgICAqIEBwYXJhbSBwYXJlbnQgdGhlIHBhcmVudCBjb250cm9sCi0gICAgICogQHBhcmFtIGl0ZW1zIHRoZSBsaXN0IG9mIHN0cmluZ3MgZm9yIHRoZSBjb21ibyBib3gKLSAgICAgKi8KLSAgICBwdWJsaWMgQVNEQ29tYm9Cb3hDZWxsRWRpdG9yKENvbXBvc2l0ZSBwYXJlbnQsIFN0cmluZ1tdIGl0ZW1zLCBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBlZGl0TWFuYWdlcikgewotICAgICAgICBzdXBlcihwYXJlbnQsIGRlZmF1bHRTdHlsZSk7Ci0gICAgICAgIHNldEl0ZW1zKGl0ZW1zKTsKLSAgICAgICAgY29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgPSBlZGl0TWFuYWdlcjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIGNob2ljZXMgZm9yIHRoZSBjb21ibyBib3gKLSAgICAgKgotICAgICAqIEByZXR1cm4gdGhlIGxpc3Qgb2YgY2hvaWNlcyBmb3IgdGhlIGNvbWJvIGJveAotICAgICAqLwotICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRJdGVtcygpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXM7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0cyB0aGUgbGlzdCBvZiBjaG9pY2VzIGZvciB0aGUgY29tYm8gYm94Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gaXRlbXMgdGhlIGxpc3Qgb2YgY2hvaWNlcyBmb3IgdGhlIGNvbWJvIGJveAotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldEl0ZW1zKFN0cmluZ1tdIGl0ZW1zKSB7Ci0gICAgICAgIEFzc2VydC5pc05vdE51bGwoaXRlbXMpOwotICAgICAgICB0aGlzLml0ZW1zID0gaXRlbXM7Ci0gICAgICAgIHBvcHVsYXRlQ29tYm9Cb3hJdGVtcygpOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBzZXRUZXh0SW5kZW50KGludCBpbmRlbnQpIHsKLSAgICAJdGV4dEluZGVudCA9IGluZGVudDsKLSAgICAJY29tYm9Cb3guc2V0VGV4dEluZGVudChpbmRlbnQpOwotICAgIH0KLQotICAgIC8qIChub24tSmF2YWRvYykKLSAgICAgKiBNZXRob2QgZGVjbGFyZWQgb24gQ2VsbEVkaXRvci4KLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKLSAgICAgICAgY29tYm9Cb3ggPSBuZXcgQVNEQ0NvbWJvKHBhcmVudCwgZ2V0U3R5bGUoKSk7Ci0gICAgICAgIGNvbWJvQm94LnNldEZvbnQocGFyZW50LmdldEZvbnQoKSk7Ci0gICAgICAgIGNvbWJvQm94LnNldFRleHRJbmRlbnQodGV4dEluZGVudCk7Ci0gICAgICAgIAotICAgICAgICBjb21ib0JveC5hZGRLZXlMaXN0ZW5lcihuZXcgS2V5QWRhcHRlcigpIHsKLSAgICAgICAgICAgIC8vIGhvb2sga2V5IHByZXNzZWQgLSBzZWUgUFIgMTQyMDEgIAotICAgICAgICAgICAgcHVibGljIHZvaWQga2V5UHJlc3NlZChLZXlFdmVudCBlKSB7Ci0gICAgICAgICAgICAgICAga2V5UmVsZWFzZU9jY3VyZWQoZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotCi0gICAgICAgIGNvbWJvQm94LmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgewotICAgICAgICAgICAgcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KSB7Ci0gICAgICAgICAgICAgICAgc2VsZWN0aW9uTWFkZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldmVudCkgewotICAgICAgICAgICAgCXNlbGVjdGlvbk1hZGUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAgY29tYm9Cb3guYWRkVHJhdmVyc2VMaXN0ZW5lcihuZXcgVHJhdmVyc2VMaXN0ZW5lcigpIHsKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIGtleVRyYXZlcnNlZChUcmF2ZXJzZUV2ZW50IGUpIHsKLSAgICAgICAgICAgICAgICBpZiAoZS5kZXRhaWwgPT0gU1dULlRSQVZFUlNFX0VTQ0FQRQotICAgICAgICAgICAgICAgICAgICAgICAgfHwgZS5kZXRhaWwgPT0gU1dULlRSQVZFUlNFX1JFVFVSTikgewotICAgICAgICAgICAgICAgICAgICBlLmRvaXQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotCi0gICAgICAgIGNvbWJvQm94LmFkZEZvY3VzTGlzdGVuZXIobmV3IEZvY3VzQWRhcHRlcigpIHsKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIGZvY3VzTG9zdChGb2N1c0V2ZW50IGUpIHsKLSAgICAgICAgICAgICAgICBBU0RDb21ib0JveENlbGxFZGl0b3IudGhpcy5mb2N1c0xvc3QoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybiBjb21ib0JveDsKLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSBPYmplY3QgaW52b2tlRGlhbG9nKElDb21wb25lbnREaWFsb2cgZGlhbG9nKSB7Ci0gIAkgIE9iamVjdCBuZXdWYWx1ZSA9IG51bGw7Ci0gIAkgIAotICAJICBpZiAoZGlhbG9nID09IG51bGwpIHsKLSAgCQkgIHJldHVybiBudWxsOwotICAJICB9Ci0gIAkgIAotICAJICBpZiAoZGlhbG9nLmNyZWF0ZUFuZE9wZW4oKSA9PSBXaW5kb3cuT0spIHsKLSAgCQkgIG5ld1ZhbHVlID0gZGlhbG9nLmdldFNlbGVjdGVkQ29tcG9uZW50KCk7Ci0gIAkgIH0KLQotICAJICByZXR1cm4gbmV3VmFsdWU7Ci0gICAgfSAgCi0KLSAgICAvKioKLSAgICAgKiBUaGUgPGNvZGU+Q29tYm9Cb3hDZWxsRWRpdG9yPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBvZgotICAgICAqIHRoaXMgPGNvZGU+Q2VsbEVkaXRvcjwvY29kZT4gZnJhbWV3b3JrIG1ldGhvZCByZXR1cm5zCi0gICAgICogdGhlIHplcm8tYmFzZWQgaW5kZXggb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uLgotICAgICAqCi0gICAgICogQHJldHVybiB0aGUgemVyby1iYXNlZCBpbmRleCBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24gd3JhcHBlZAotICAgICAqICBhcyBhbiA8Y29kZT5JbnRlZ2VyPC9jb2RlPgotICAgICAqLwotICAgIHByb3RlY3RlZCBPYmplY3QgZG9HZXRWYWx1ZSgpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBJbnRlZ2VyKHNlbGVjdGlvbik7Ci0gICAgfQotCi0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIE1ldGhvZCBkZWNsYXJlZCBvbiBDZWxsRWRpdG9yLgotICAgICAqLwotICAgIHByb3RlY3RlZCB2b2lkIGRvU2V0Rm9jdXMoKSB7Ci0gICAgICAgIGNvbWJvQm94LnNldEZvY3VzKCk7Ci0gICAgICAgIGNvbWJvQm94LmRyb3BEb3duKHRydWUpOwotLy8gICAgICAgIFN0cmluZyBjb21ib1RleHQgPSBjb21ib0JveC5nZXRUZXh0KCk7Ci0vLyAgICAgICAgY29tYm9Cb3guc2V0VGV4dCgiICAgICAgICAgIiArIGNvbWJvVGV4dCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGhlIDxjb2RlPkNvbWJvQm94Q2VsbEVkaXRvcjwvY29kZT4gaW1wbGVtZW50YXRpb24gb2YKLSAgICAgKiB0aGlzIDxjb2RlPkNlbGxFZGl0b3I8L2NvZGU+IGZyYW1ld29yayBtZXRob2Qgc2V0cyB0aGUgCi0gICAgICogbWluaW11bSB3aWR0aCBvZiB0aGUgY2VsbC4gIFRoZSBtaW5pbXVtIHdpZHRoIGlzIDEwIGNoYXJhY3RlcnMKLSAgICAgKiBpZiA8Y29kZT5jb21ib0JveDwvY29kZT4gaXMgbm90IDxjb2RlPm51bGw8L2NvZGU+IG9yIDxjb2RlPmRpc3Bvc2VkPC9jb2RlPgotICAgICAqIGVsZXMgaXQgaXMgNjAgcGl4ZWxzIHRvIG1ha2Ugc3VyZSB0aGUgYXJyb3cgYnV0dG9uIGFuZCBzb21lIHRleHQgaXMgdmlzaWJsZS4KLSAgICAgKiBUaGUgbGlzdCBvZiBDQ29tYm8gd2lsbCBiZSB3aWRlIGVub3VnaCB0byBzaG93IGl0cyBsb25nZXN0IGl0ZW0uCi0gICAgICovCi0gICAgcHVibGljIExheW91dERhdGEgZ2V0TGF5b3V0RGF0YSgpIHsKLSAgICAgICAgTGF5b3V0RGF0YSBsYXlvdXREYXRhID0gc3VwZXIuZ2V0TGF5b3V0RGF0YSgpOwotICAgICAgICBpZiAoKGNvbWJvQm94ID09IG51bGwpIHx8IGNvbWJvQm94LmlzRGlzcG9zZWQoKSkKLSAgICAgICAgICAgIGxheW91dERhdGEubWluaW11bVdpZHRoID0gNjA7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLy8gbWFrZSB0aGUgY29tYm9Cb3ggMTAgY2hhcmFjdGVycyB3aWRlCi0gICAgICAgICAgICBHQyBnYyA9IG5ldyBHQyhjb21ib0JveCk7Ci0gICAgICAgICAgICBsYXlvdXREYXRhLm1pbmltdW1XaWR0aCA9IChnYy5nZXRGb250TWV0cmljcygpCi0gICAgICAgICAgICAgICAgICAgIC5nZXRBdmVyYWdlQ2hhcldpZHRoKCkgKiAxMCkgKyAxMDsKLSAgICAgICAgICAgIGdjLmRpc3Bvc2UoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbGF5b3V0RGF0YTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgPGNvZGU+Q29tYm9Cb3hDZWxsRWRpdG9yPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBvZgotICAgICAqIHRoaXMgPGNvZGU+Q2VsbEVkaXRvcjwvY29kZT4gZnJhbWV3b3JrIG1ldGhvZAotICAgICAqIGFjY2VwdHMgYSB6ZXJvLWJhc2VkIGluZGV4IG9mIGEgc2VsZWN0aW9uLgotICAgICAqCi0gICAgICogQHBhcmFtIHZhbHVlIHRoZSB6ZXJvLWJhc2VkIGluZGV4IG9mIHRoZSBzZWxlY3Rpb24gd3JhcHBlZAotICAgICAqICAgYXMgYW4gPGNvZGU+SW50ZWdlcjwvY29kZT4KLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgdm9pZCBkb1NldFZhbHVlKE9iamVjdCB2YWx1ZSkgewotICAgICAgICBBc3NlcnQuaXNUcnVlKGNvbWJvQm94ICE9IG51bGwgJiYgKHZhbHVlIGluc3RhbmNlb2YgSW50ZWdlcikpOwotICAgICAgICBzZWxlY3Rpb24gPSAoKEludGVnZXIpIHZhbHVlKS5pbnRWYWx1ZSgpOwotICAgICAgICBjb21ib0JveC5zZWxlY3Qoc2VsZWN0aW9uKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBVcGRhdGVzIHRoZSBsaXN0IG9mIGNob2ljZXMgZm9yIHRoZSBjb21ibyBib3ggZm9yIHRoZSBjdXJyZW50IGNvbnRyb2wuCi0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIHBvcHVsYXRlQ29tYm9Cb3hJdGVtcygpIHsKLSAgICAgICAgaWYgKGNvbWJvQm94ICE9IG51bGwgJiYgaXRlbXMgIT0gbnVsbCkgewotICAgICAgICAgICAgY29tYm9Cb3gucmVtb3ZlQWxsKCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgICAgIGNvbWJvQm94LmFkZChpdGVtc1tpXSwgaSk7Ci0KLSAgICAgICAgICAgIHNldFZhbHVlVmFsaWQodHJ1ZSk7Ci0gICAgICAgICAgICBzZWxlY3Rpb24gPSAwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQXBwbGllcyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHZhbHVlIGFuZCBkZWFjdGlhdmF0ZXMgdGhlIGNlbGwgZWRpdG9yCi0gICAgICovCi0gICAgdm9pZCBhcHBseUVkaXRvclZhbHVlQW5kRGVhY3RpdmF0ZSgpIHsKLSAgICAgICAgLy8JbXVzdCBzZXQgdGhlIHNlbGVjdGlvbiBiZWZvcmUgZ2V0dGluZyB2YWx1ZQotICAgICAgICBzZWxlY3Rpb24gPSBjb21ib0JveC5nZXRTZWxlY3Rpb25JbmRleCgpOwotICAgICAgICBPYmplY3QgbmV3VmFsdWUgPSBkb0dldFZhbHVlKCk7Ci0gICAgICAgIG1hcmtEaXJ0eSgpOwotICAgICAgICBib29sZWFuIGlzVmFsaWQgPSBpc0NvcnJlY3QobmV3VmFsdWUpOwotICAgICAgICBzZXRWYWx1ZVZhbGlkKGlzVmFsaWQpOwotICAgICAgICBpZiAoIWlzVmFsaWQpIHsKLSAgICAgICAgICAgIC8vIHRyeSB0byBpbnNlcnQgdGhlIGN1cnJlbnQgdmFsdWUgaW50byB0aGUgZXJyb3IgbWVzc2FnZS4KLSAgICAgICAgICAgIHNldEVycm9yTWVzc2FnZShNZXNzYWdlRm9ybWF0LmZvcm1hdChnZXRFcnJvck1lc3NhZ2UoKSwKLSAgICAgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdIHsgaXRlbXNbc2VsZWN0aW9uXSB9KSk7Ci0gICAgICAgIH0KLSAgICAgICAgZmlyZUFwcGx5RWRpdG9yVmFsdWUoKTsKLSAgICAgICAgZGVhY3RpdmF0ZSgpOwotICAgIH0KLQotICAgIC8qCi0gICAgICogIChub24tSmF2YWRvYykKLSAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ2VsbEVkaXRvciNmb2N1c0xvc3QoKQotICAgICAqLwotICAgIHByb3RlY3RlZCB2b2lkIGZvY3VzTG9zdCgpIHsKLSAgICAgICAgaWYgKGlzQWN0aXZhdGVkKCkpIHsKLSAgICAgICAgICAgIGFwcGx5RWRpdG9yVmFsdWVBbmREZWFjdGl2YXRlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKgotICAgICAqICAobm9uLUphdmFkb2MpCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkNlbGxFZGl0b3Ija2V5UmVsZWFzZU9jY3VyZWQob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5LZXlFdmVudCkKLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgdm9pZCBrZXlSZWxlYXNlT2NjdXJlZChLZXlFdmVudCBrZXlFdmVudCkgewotICAgICAgICBpZiAoa2V5RXZlbnQuY2hhcmFjdGVyID09ICdcdTAwMWInKSB7IC8vIEVzY2FwZSBjaGFyYWN0ZXIKLSAgICAgICAgICAgIGZpcmVDYW5jZWxFZGl0b3IoKTsKLSAgICAgICAgfSBlbHNlIGlmIChrZXlFdmVudC5jaGFyYWN0ZXIgPT0gJ1x0JykgeyAvLyB0YWIga2V5Ci0gICAgICAgICAgICBhcHBseUVkaXRvclZhbHVlQW5kRGVhY3RpdmF0ZSgpOwotICAgICAgICB9IAotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgT2JqZWN0IGdldFNlbGVjdGVkVmFsdWUoKSB7Ci0gICAgCXJldHVybiBzZWxlY3RlZFZhbHVlOwotICAgIH0KLSAgICAKLSAgICAKLSAgICBwdWJsaWMgdm9pZCBzZWxlY3Rpb25NYWRlKCkgewotICAgIAlPYmplY3QgbmV3VmFsdWUgPSBudWxsOwotICAgIAlzZWxlY3Rpb24gPSBjb21ib0JveC5nZXRTZWxlY3Rpb25JbmRleCgpOwotICAgIAlTdHJpbmcgc3RyaW5nU2VsZWN0aW9uID0gaXRlbXNbc2VsZWN0aW9uXTsKLSAgICAJCi0gICAgCWlmIChzdHJpbmdTZWxlY3Rpb24uZXF1YWxzKE1lc3NhZ2VzLl9VSV9CVVRUT05fQlJPV1NFKSkgeyAvLyROT04tTkxTLTEkCi0gICAgCQluZXdWYWx1ZSA9IGludm9rZURpYWxvZyhjb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlci5nZXRCcm93c2VEaWFsb2coKSk7Ci0gICAgCX0KLSAgICAJZWxzZSBpZiAoc3RyaW5nU2VsZWN0aW9uLmVxdWFscyhNZXNzYWdlcy5fVUlfQlVUVE9OX05FVykpIHsgLy8kTk9OLU5MUy0xJAotICAgIAkJbmV3VmFsdWUgPSBpbnZva2VEaWFsb2coY29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIuZ2V0TmV3RGlhbG9nKCkpOwotICAgIAl9Ci0KLSAgICAJaWYgKG5ld1ZhbHVlID09IG51bGwpIHsKLSAgICAJCWludCBpbmRleCA9IGNvbWJvQm94LmdldFNlbGVjdGlvbkluZGV4KCk7ICAgICAgICAgICAgICAKLSAgICAJCWlmIChpbmRleCAhPSAtMSkgewotICAgIAkJCXNlbGVjdGVkVmFsdWUgPSBjb21ib0JveC5nZXRJdGVtKGluZGV4KTsKLSAgICAJCX0KLSAgICAJfQotICAgIAllbHNlIHsKLSAgICAJCXNlbGVjdGVkVmFsdWUgPSBuZXdWYWx1ZTsKLSAgICAJfQotICAgCQlhcHBseUVkaXRvclZhbHVlQW5kRGVhY3RpdmF0ZSgpOwotICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZGlyZWN0ZWRpdC9Db21ib0JveENlbGxFZGl0b3JNYW5hZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9kaXJlY3RlZGl0L0NvbWJvQm94Q2VsbEVkaXRvck1hbmFnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQ5YWM2Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9kaXJlY3RlZGl0L0NvbWJvQm94Q2VsbEVkaXRvck1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5kaXJlY3RlZGl0OwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5SZWN0YW5nbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkdyYXBoaWNhbEVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi50b29scy5DZWxsRWRpdG9yTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYudG9vbHMuRGlyZWN0RWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5DZWxsRWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ29tYm9Cb3hDZWxsRWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUNlbGxFZGl0b3JMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIENvbWJvQm94Q2VsbEVkaXRvck1hbmFnZXIgZXh0ZW5kcyBEaXJlY3RFZGl0TWFuYWdlcgotewotICBwcm90ZWN0ZWQgTGFiZWwgbGFiZWw7Ci0KLSAgcHVibGljIENvbWJvQm94Q2VsbEVkaXRvck1hbmFnZXIoR3JhcGhpY2FsRWRpdFBhcnQgc291cmNlLCBMYWJlbCBsYWJlbCkKLSAgewotCSAgc3VwZXIoc291cmNlLCBDb21ib0JveENlbGxFZGl0b3IuY2xhc3MsIG5ldyBJbnRlcm5hbENlbGxFZGl0b3JMb2NhdG9yKGxhYmVsKSk7Ci0gICAgdGhpcy5sYWJlbCA9IGxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgIAotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgaW5pdENlbGxFZGl0b3IoKSAKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAJU3RyaW5nIGluaXRpYWxMYWJlbFRleHQgPSBsYWJlbC5nZXRUZXh0KCk7ICAgCi0KLSAgICBBU0RDQ29tYm8gY29tYm8gPSAoQVNEQ0NvbWJvKWdldENlbGxFZGl0b3IoKS5nZXRDb250cm9sKCk7Ci0gICAJY29tYm8uc2V0Rm9udChsYWJlbC5nZXRGb250KCkpOwotICAgIGNvbWJvLnNldEZvcmVncm91bmQobGFiZWwuZ2V0Rm9yZWdyb3VuZENvbG9yKCkpOwotICAgIGNvbWJvLnNldEJhY2tncm91bmQobGFiZWwuZ2V0QmFja2dyb3VuZENvbG9yKCkpOwotICAgIGNvbWJvLnNldFZpc2libGVJdGVtQ291bnQoMjApOwotICAgIGNvbWJvLnNldEVkaXRhYmxlKGZhbHNlKTsKLQotICBJQ2VsbEVkaXRvckxpc3RlbmVyIGNlbGxFZGl0b3JMaXN0ZW5lciA9IG5ldyBJQ2VsbEVkaXRvckxpc3RlbmVyKCkKLSAgewotICAgIHB1YmxpYyB2b2lkIGNhbmNlbEVkaXRvcigpCi0gICAgewotICAgIH0KLSAgICBwdWJsaWMgdm9pZCBhcHBseUVkaXRvclZhbHVlKCkKLSAgICB7Ci0gICAgfQotICAgIHB1YmxpYyB2b2lkIGVkaXRvclZhbHVlQ2hhbmdlZChib29sZWFuIG9sZCwgYm9vbGVhbiBuZXdTdGF0ZSkKLSAgICB7Ci0gICAgfQotICB9OwotICBnZXRDZWxsRWRpdG9yKCkuYWRkTGlzdGVuZXIoY2VsbEVkaXRvckxpc3RlbmVyKTsKLQotICAgIFN0cmluZ1tdIGl0ZW0gPSBjb21iby5nZXRJdGVtcygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlbS5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpZiAoaXRlbVtpXS5lcXVhbHMoaW5pdGlhbExhYmVsVGV4dCkpCi0gICAgICB7Ci0JICAgICAgZ2V0Q2VsbEVkaXRvcigpLnNldFZhbHVlKG5ldyBJbnRlZ2VyKGkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfSAJCi0gIH0JIAotICAgICAgICAgCi0gIC8vIGhhY2suLi4gZm9yIHNvbWUgcmVhc29uIHRoZSBDb21ib0JveENlbGxFZGl0b3IgZG9lcyd0IGZpcmUgYW4gZWRpdG9yVmFsdWVDaGFuZ2VkIHRvIHNldCB0aGUgZGlydHkgZmxhZwotICAvLyB1bmxlc3Mgd2Ugb3ZlcmlkZSB0aGlzIG1ldGhvZCB0byByZXR1cm4gdHJ1ZSwgdGhlIG1hbmFnZXIgaXMgbm90IG5vdGlmaWVkIG9mIGNoYW5nZXMgbWFkZSBpbiB0aGUgY2VsbCBlZGl0b3IKLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNEaXJ0eSgpCi0gIHsKLQkgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHJvdGVjdGVkIENlbGxFZGl0b3IgY3JlYXRlQ2VsbEVkaXRvck9uKENvbXBvc2l0ZSBjb21wb3NpdGUpCi0gIHsgCi0gICAgYm9vbGVhbiBpc0xhYmVsVGV4dEluTGlzdCA9IGZhbHNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIExpc3QgbGlzdCA9IGNvbXB1dGVDb21ib0NvbnRlbnQoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBsaXN0Lml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgewotICAgICAgU3RyaW5nIHN0cmluZyA9IChTdHJpbmcpaS5uZXh0KCk7Ci0gICAgICBpZiAoc3RyaW5nLmVxdWFscyhsYWJlbC5nZXRUZXh0KCkpKQotICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgIGlzTGFiZWxUZXh0SW5MaXN0ID0gdHJ1ZTsKLSAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0gCi0gICAgICAgICAKLSAgICBpZiAoIWlzTGFiZWxUZXh0SW5MaXN0KQotICAgIHsKLSAgICAgIGxpc3QuYWRkKGxhYmVsLmdldFRleHQoKSk7Ci0gICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICBMaXN0IHNvcnRlZExpc3QgPSBjb21wdXRlU29ydGVkTGlzdChsaXN0KTsKLSAgICBTdHJpbmdbXSBzdHJpbmdBcnJheSA9IG5ldyBTdHJpbmdbc29ydGVkTGlzdC5zaXplKCldOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RyaW5nQXJyYXkubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgc3RyaW5nQXJyYXlbaV0gPSAoU3RyaW5nKXNvcnRlZExpc3QuZ2V0KGkpOwotICAgIH0KLSAgICByZXR1cm4gY3JlYXRlQ2VsbEVkaXRvcihjb21wb3NpdGUsIHN0cmluZ0FycmF5KTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIENlbGxFZGl0b3IgY3JlYXRlQ2VsbEVkaXRvcihDb21wb3NpdGUgY29tcG9zaXRlLCBTdHJpbmdbXSBzdHJpbmdBcnJheSkKLSAgewotICAgIHJldHVybiBuZXcgQ29tYm9Cb3hDZWxsRWRpdG9yKGNvbXBvc2l0ZSwgc3RyaW5nQXJyYXkpOyAgICAKLSAgfQotCi0gIHByb3RlY3RlZCBMaXN0IGNvbXB1dGVTb3J0ZWRMaXN0KExpc3QgbGlzdCkKLSAgewotICAgIHJldHVybiBsaXN0OwotICB9Ci0KLSAgcHJvdGVjdGVkIGFic3RyYWN0IExpc3QgY29tcHV0ZUNvbWJvQ29udGVudCgpOyAKLQotICBwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCBwZXJmb3JtTW9kaWZ5KE9iamVjdCB2YWx1ZSk7Ci0KLSAgcHVibGljIHN0YXRpYyBjbGFzcyBJbnRlcm5hbENlbGxFZGl0b3JMb2NhdG9yIGltcGxlbWVudHMgQ2VsbEVkaXRvckxvY2F0b3IKLSAgewotICAgIHByb3RlY3RlZCBMYWJlbCBsYWJlbDsKLQotICAgIHB1YmxpYyBJbnRlcm5hbENlbGxFZGl0b3JMb2NhdG9yKExhYmVsIGxhYmVsKQotICAgIHsKLSAgICAgIHRoaXMubGFiZWwgPSBsYWJlbDsKLSAgICB9ICAgICAgICAgICAgICAgICAgIAotCi0gICAgcHVibGljIHZvaWQgcmVsb2NhdGUoQ2VsbEVkaXRvciBjZWxsZWRpdG9yKSAKLSAgICB7Ci0gICAgICAgIEFTRENDb21ibyBjb21ibyA9IChBU0RDQ29tYm8pY2VsbGVkaXRvci5nZXRDb250cm9sKCk7ICAKLQkgICAgUmVjdGFuZ2xlIGxhYmVsUGFyZW50Qm91bmRzID0gbGFiZWwuZ2V0UGFyZW50KCkuZ2V0Qm91bmRzKCkuZ2V0Q29weSgpOwotCSAgICBsYWJlbC50cmFuc2xhdGVUb0Fic29sdXRlKGxhYmVsUGFyZW50Qm91bmRzKTsKLQkgICAgCi0JICAgIGludCB4ID0gbGFiZWxQYXJlbnRCb3VuZHMueDsKLQkgICAgaW50IHkgPSBsYWJlbFBhcmVudEJvdW5kcy55OwotCSAgICBpbnQgd2lkdGhLID0gbGFiZWxQYXJlbnRCb3VuZHMud2lkdGg7Ci0JICAgIGludCBoZWlnaHQgPSBsYWJlbFBhcmVudEJvdW5kcy5oZWlnaHQ7Ci0JICAgIGNvbWJvLnNldEJvdW5kcyh4LCB5ICsgMSwgd2lkdGhLLCBoZWlnaHQgLSAyKTsKLSAgICB9Ci0gIH0gCi0gICAKLSAgcHVibGljIHZvaWQgcGVyZm9ybUVkaXQoQ2VsbEVkaXRvciBjZWxsRWRpdG9yKQotICB7Ci0JICBBU0RDb21ib0JveENlbGxFZGl0b3IgY29tYm9DZWxsRWRpdG9yID0gKEFTRENvbWJvQm94Q2VsbEVkaXRvcikgY2VsbEVkaXRvcjsKLQkgIEFTRENDb21ibyBjb21ibyA9IChBU0RDQ29tYm8pZ2V0Q2VsbEVkaXRvcigpLmdldENvbnRyb2woKTsKLQkgIGludCBpbmRleCA9IGNvbWJvLmdldFNlbGVjdGlvbkluZGV4KCk7ICAgICAgICAgICAgICAKLQkgIGlmIChpbmRleCAhPSAtMSkKLQkgIHsKLQkJICBPYmplY3QgdmFsdWUgPSBjb21iby5nZXRJdGVtKGluZGV4KTsKLQkJICBpZiAoY29tYm9DZWxsRWRpdG9yLmdldFNlbGVjdGVkVmFsdWUoKSAhPSBudWxsKSB7Ci0JCQkgIHZhbHVlID0gY29tYm9DZWxsRWRpdG9yLmdldFNlbGVjdGVkVmFsdWUoKTsKLQkJICB9Ci0JCSAgCi0JCSAgcGVyZm9ybU1vZGlmeSh2YWx1ZSk7Ci0JICB9Ci0JICBlbHNlCi0JICB7Ci0JCSAgU3RyaW5nIHR5cGVkVmFsdWUgPSBjb21iby5nZXRUZXh0KCk7CQotCQkgIGlmIChjb21iby5pbmRleE9mKHR5cGVkVmFsdWUpICE9IC0xKQotCQkgIHsJICAgICAgCi0JCQkgIHBlcmZvcm1Nb2RpZnkodHlwZWRWYWx1ZSk7Ci0JCSAgfSAgICAgIAkKLQkJICBlbHNlCi0JCSAgewotCQkJICBTdHJpbmcgY2xvc2VNYXRjaCA9IGdldENsb3NlTWF0Y2godHlwZWRWYWx1ZSwgY29tYm8uZ2V0SXRlbXMoKSk7Ci0JCQkgIGlmIChjbG9zZU1hdGNoICE9IG51bGwpCi0JCQkgIHsKLQkJCQkgIHBlcmZvcm1Nb2RpZnkoY2xvc2VNYXRjaCk7ICAgICAgCQotCQkJICB9Ci0JCQkgIGVsc2UKLQkJCSAgeyAgICAgIAkKLQkJCQkgIERpc3BsYXkuZ2V0Q3VycmVudCgpLmJlZXAoKTsKLQkJCSAgfQotCQkgIH0KLQkgIH0gICAgCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICB9Ci0gIAotICBwcm90ZWN0ZWQgU3RyaW5nIGdldENsb3NlTWF0Y2goU3RyaW5nIHZhbHVlLCBTdHJpbmdbXSBpdGVtcykKLSAgewotICAgIGludCBtYXRjaEluZGV4ID0gLTE7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAJU3RyaW5nIGl0ZW0gPSBpdGVtc1tpXTsKLSAgICAJU3RyaW5nIGEgPSBnZXRMb2NhbE5hbWUodmFsdWUpOwotICAgIAlTdHJpbmcgYiA9IGdldExvY2FsTmFtZShpdGVtKTsKLQkJICBpZiAoYS5lcXVhbHNJZ25vcmVDYXNlKGIpKQotCQkgIHsgCi0JCQkgIG1hdGNoSW5kZXggPSBpOwotCQkJICBicmVhazsJCQkJCi0JCSAgfQkgICAgCSAgICAgCi0gICAgfSAgCi0gICAgcmV0dXJuIG1hdGNoSW5kZXggIT0gLTEgPyBpdGVtc1ttYXRjaEluZGV4XSA6IG51bGw7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0TG9jYWxOYW1lKFN0cmluZyBzdHJpbmcpCi0gIHsKLQkJaW50IGluZGV4ID0gc3RyaW5nLmluZGV4T2YoIjoiKTsgLy8kTk9OLU5MUy0xJAotCSAgcmV0dXJuIChpbmRleCAhPSAtMSkgPyBzdHJpbmcuc3Vic3RyaW5nKGluZGV4ICsgMSkgOiBzdHJpbmc7ICAKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZGlyZWN0ZWRpdC9EaXJlY3RFZGl0U2VsZWN0aW9uVG9vbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZGlyZWN0ZWRpdC9EaXJlY3RFZGl0U2VsZWN0aW9uVG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZWI0OWE2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2RpcmVjdGVkaXQvRGlyZWN0RWRpdFNlbGVjdGlvblRvb2wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmRpcmVjdGVkaXQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuRmlndXJlQ2FudmFzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5JRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUmVjdGFuZ2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuZWRpdHBhcnRzLkFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLnRvb2xzLlNlbGVjdGlvblRvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMuSU5hbWVkRWRpdFBhcnQ7Ci0KLS8qKgotICogRXh0ZW5kcyB0aGUgZGVmYXVsdCBHRUYgc2VsZWN0aW9uIHRvb2xzIHRvIHNlbmQgdGhlCi0gKiBtb3VzZSBldmVudHMKLSAqLwotcHVibGljIGNsYXNzIERpcmVjdEVkaXRTZWxlY3Rpb25Ub29sIGV4dGVuZHMgU2VsZWN0aW9uVG9vbCB7Ci0JCi0JcHJvdGVjdGVkIElOYW1lZEVkaXRQYXJ0IGdldFNlbGVjdGVkUGFydCgpIHsKLQkJaWYoZ2V0Q3VycmVudFZpZXdlcigpID09IG51bGwpCi0JCQlyZXR1cm4gbnVsbDsKLQkJRWRpdFBhcnQgZXAgPSBnZXRDdXJyZW50Vmlld2VyKCkuZ2V0Rm9jdXNFZGl0UGFydCgpOwotCQlpZihlcCBpbnN0YW5jZW9mIElOYW1lZEVkaXRQYXJ0ICYmIGVwLmlzQWN0aXZlKCkpCi0JCQlyZXR1cm4gKElOYW1lZEVkaXRQYXJ0KWVwOwotCQlyZXR1cm4gbnVsbDsKLQl9Ci0JCi0JcHJvdGVjdGVkIGJvb2xlYW4gaGFuZGxlQnV0dG9uRG93bihpbnQgYnV0dG9uKSB7Ci0JCXN1cGVyLmhhbmRsZUJ1dHRvbkRvd24oYnV0dG9uKTsKLQkJSU5hbWVkRWRpdFBhcnQgc2VsZWN0ZWRQYXJ0ID0gZ2V0U2VsZWN0ZWRQYXJ0KCk7Ci0JCQotCQlpZihzZWxlY3RlZFBhcnQgIT0gbnVsbCAmJiBidXR0b24gPT0gMSkgewotCQkJSW5wdXQgaSA9IGdldEN1cnJlbnRJbnB1dCgpOwotCQkJUG9pbnQgbCA9IHRyYW5zbGF0ZUxvY2F0aW9uKGkuZ2V0TW91c2VMb2NhdGlvbigpKTsKLQkJCQotCQkJSUZpZ3VyZSBmID0gKChBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0KSBzZWxlY3RlZFBhcnQpLmdldEZpZ3VyZSgpOwotCQkJUmVjdGFuZ2xlIGJvdW5kcyA9IGYuZ2V0Qm91bmRzKCk7Ci0JCQlpZihib3VuZHMuY29udGFpbnMobC54LGwueSkpIHsKLQkJCQlzZWxlY3RlZFBhcnQucGVyZm9ybURpcmVjdEVkaXQodHJhbnNsYXRlTG9jYXRpb24obmV3IFBvaW50KGwueCwgbC55KSkpOwotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQl9Ci0JCXJldHVybiB0cnVlOwotCX0KLQkKLQlwcm90ZWN0ZWQgUG9pbnQgdHJhbnNsYXRlTG9jYXRpb24oUG9pbnQgbW91c2VMb2NhdGlvbikgewotCQlGaWd1cmVDYW52YXMgY2FudmFzID0gKEZpZ3VyZUNhbnZhcylnZXRDdXJyZW50Vmlld2VyKCkuZ2V0Q29udHJvbCgpOwotCQlQb2ludCB2aWV3TG9jYXRpb24gPSBjYW52YXMuZ2V0Vmlld3BvcnQoKS5nZXRWaWV3TG9jYXRpb24oKTsKLQkJcmV0dXJuIG5ldyBQb2ludChtb3VzZUxvY2F0aW9uLnggKyB2aWV3TG9jYXRpb24ueCxtb3VzZUxvY2F0aW9uLnkgKyB2aWV3TG9jYXRpb24ueSk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2RpcmVjdGVkaXQvTGFiZWxDZWxsRWRpdG9yTG9jYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZGlyZWN0ZWRpdC9MYWJlbENlbGxFZGl0b3JMb2NhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjOTE2NGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZGlyZWN0ZWRpdC9MYWJlbENlbGxFZGl0b3JMb2NhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5kaXJlY3RlZGl0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUmVjdGFuZ2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi50b29scy5DZWxsRWRpdG9yTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkNlbGxFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5JTmFtZWRFZGl0UGFydDsKLQotcHVibGljIGNsYXNzIExhYmVsQ2VsbEVkaXRvckxvY2F0b3IgaW1wbGVtZW50cyBDZWxsRWRpdG9yTG9jYXRvciB7Ci0JcHJpdmF0ZSBJTmFtZWRFZGl0UGFydCBuYW1lZEVkaXRQYXJ0OwotCXByaXZhdGUgUG9pbnQgY3Vyc29yTG9jYXRpb247Ci0KLQlwdWJsaWMgTGFiZWxDZWxsRWRpdG9yTG9jYXRvcihJTmFtZWRFZGl0UGFydCBuYW1lZEVkaXRQYXJ0LCBQb2ludCBjdXJzb3JMb2NhdGlvbikgewotCQl0aGlzLm5hbWVkRWRpdFBhcnQgPSBuYW1lZEVkaXRQYXJ0OwotCQl0aGlzLmN1cnNvckxvY2F0aW9uID0gY3Vyc29yTG9jYXRpb247Ci0JfQotCQotCXB1YmxpYyB2b2lkIHJlbG9jYXRlKENlbGxFZGl0b3IgY2VsbGVkaXRvcikgewotCQlUZXh0IHRleHQgPSAoVGV4dCljZWxsZWRpdG9yLmdldENvbnRyb2woKTsKLQkJaWYgKHRleHQuZ2V0Qm91bmRzKCkueCA8PSAwICYmIG5hbWVkRWRpdFBhcnQuZ2V0TGFiZWxGaWd1cmUoKSAhPSBudWxsKSB7Ci0JCQlMYWJlbCBsYWJlbCA9IG5hbWVkRWRpdFBhcnQuZ2V0TGFiZWxGaWd1cmUoKTsKLQkJCVJlY3RhbmdsZSBib3VuZGluZ1JlY3QgPSBsYWJlbC5nZXRUZXh0Qm91bmRzKCk7Ci0KLQkJCS8vIFJlZHVjZSB0aGUgd2lkdGggYnkgdGhlIGFtb3VudCB3ZSBzaGlmdGVkIGFsb25nIHRoZSB4LWF4aXMKLQkJCWludCBkZWx0YSA9IE1hdGguYWJzKGJvdW5kaW5nUmVjdC54IC0gbGFiZWwuZ2V0UGFyZW50KCkuZ2V0Qm91bmRzKCkueCk7Ci0vLwkJCWJvdW5kaW5nUmVjdC53aWR0aCA9IHRhYmxlQ2VsbEZpZ3VyZS5nZXRQcmVmZXJyZWRTaXplKCkud2lkdGggLSBkZWx0YTsKLQkJCQotCQkJbGFiZWwuZ2V0UGFyZW50KCkudHJhbnNsYXRlVG9BYnNvbHV0ZShib3VuZGluZ1JlY3QpOwotCQkJb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlJlY3RhbmdsZSB0cmltID0gdGV4dC5jb21wdXRlVHJpbSgwLCAwLCAwLCAwKTsKLQkJCWJvdW5kaW5nUmVjdC50cmFuc2xhdGUodHJpbS54LCB0cmltLnkpOwotLy8JCQlib3VuZGluZ1JlY3Qud2lkdGggPSBib3VuZGluZ1JlY3Qud2lkdGggLSB0cmltLng7Ci0JCQlib3VuZGluZ1JlY3QuaGVpZ2h0ID0gYm91bmRpbmdSZWN0LmhlaWdodCAtIHRyaW0ueTsKLQkJCQotCQkJYm91bmRpbmdSZWN0LndpZHRoID0gbGFiZWwuZ2V0UGFyZW50KCkuZ2V0Qm91bmRzKCkud2lkdGggLSBkZWx0YTsKLQkJCXRleHQuc2V0Qm91bmRzKGJvdW5kaW5nUmVjdC54LCBib3VuZGluZ1JlY3QueSwgYm91bmRpbmdSZWN0LndpZHRoLCBib3VuZGluZ1JlY3QuaGVpZ2h0KTsKLQkJCQotCQkJaWYgKGN1cnNvckxvY2F0aW9uICE9IG51bGwpIHsKLQkJCQkvLyBUcmFuc2xhdGUgcG9pbnQKLQkJCQlQb2ludCB0cmFuc2xhdGVkUG9pbnQgPSBuZXcgUG9pbnQoY3Vyc29yTG9jYXRpb24ueCAtIGJvdW5kaW5nUmVjdC54LGN1cnNvckxvY2F0aW9uLnkgLSBib3VuZGluZ1JlY3QueSk7Ci0KLQkJCQkvLyBDYWxjdWxhdGUgdGV4dCBvZmZzZXQgY29ycmVzcG9uZGluZyB0byB0aGUgdHJhbnNsYXRlZCBwb2ludAotCQkJCXRleHQuc2V0U2VsZWN0aW9uKDAsIDApOwotCQkJCWludCB4Q2FyZXQgPSB0ZXh0LmdldENhcmV0TG9jYXRpb24oKS54OwotCQkJCWludCBvZmZzZXQgPSB0ZXh0LmdldENhcmV0UG9zaXRpb24oKTsKLQkJCQl3aGlsZSAoeENhcmV0IDwgdHJhbnNsYXRlZFBvaW50LngpIHsKLQkJCQkJdGV4dC5zZXRTZWxlY3Rpb24ob2Zmc2V0ICsgMSwgb2Zmc2V0ICsgMSk7CQkJCi0JCQkJCXhDYXJldCA9IHRleHQuZ2V0Q2FyZXRMb2NhdGlvbigpLng7Ci0JCQkJCWludCBuZXdPZmZzZXQgPSB0ZXh0LmdldENhcmV0UG9zaXRpb24oKTsKLQkJCQkJaWYgKG5ld09mZnNldCA9PSBvZmZzZXQpIHsKLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0JCQkJCW9mZnNldCsrOwotCQkJCX0KLQkJCQl0ZXh0LnNldFNlbGVjdGlvbihvZmZzZXQsIG9mZnNldCk7Ci0JCQl9Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9kaXJlY3RlZGl0L0xhYmVsRWRpdE1hbmFnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2RpcmVjdGVkaXQvTGFiZWxFZGl0TWFuYWdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzAzYWRlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2RpcmVjdGVkaXQvTGFiZWxFZGl0TWFuYWdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmRpcmVjdGVkaXQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuQ29sb3JDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5EaW1lbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkdyYXBoaWNhbEVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi50b29scy5DZWxsRWRpdG9yTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYudG9vbHMuRGlyZWN0RWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5DZWxsRWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGV4dENlbGxFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuQ29sb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkZvbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkZvbnREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklBY3Rpb25CYXJzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuQWN0aW9uRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LkNlbGxFZGl0b3JBY3Rpb25IYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5EZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMuSU5hbWVkRWRpdFBhcnQ7Ci0KLXB1YmxpYyBjbGFzcyBMYWJlbEVkaXRNYW5hZ2VyIGV4dGVuZHMgRGlyZWN0RWRpdE1hbmFnZXIgewotCi0JcHJpdmF0ZSBJQWN0aW9uQmFycyBhY3Rpb25CYXJzOwotCXByaXZhdGUgQ2VsbEVkaXRvckFjdGlvbkhhbmRsZXIgYWN0aW9uSGFuZGxlcjsKLQlwcml2YXRlIElBY3Rpb24gY29weSwgY3V0LCBwYXN0ZSwgdW5kbywgcmVkbywgZmluZCwgc2VsZWN0QWxsLCBkZWxldGU7Ci0JcHJpdmF0ZSBGb250IHNjYWxlZEZvbnQ7Ci0KLQlwdWJsaWMgTGFiZWxFZGl0TWFuYWdlcihHcmFwaGljYWxFZGl0UGFydCBzb3VyY2UsIENlbGxFZGl0b3JMb2NhdG9yIGxvY2F0b3IpIHsKLQkJc3VwZXIoc291cmNlLCBudWxsLCBsb2NhdG9yKTsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmdlZi50b29scy5EaXJlY3RFZGl0TWFuYWdlciNicmluZ0Rvd24oKQotCSAqLwotCXByb3RlY3RlZCB2b2lkIGJyaW5nRG93bigpIHsKLQkJaWYgKGFjdGlvbkhhbmRsZXIgIT0gbnVsbCkgewotCQkJYWN0aW9uSGFuZGxlci5kaXNwb3NlKCk7Ci0JCQlhY3Rpb25IYW5kbGVyID0gbnVsbDsKLQkJfQotCQlpZiAoYWN0aW9uQmFycyAhPSBudWxsKSB7Ci0JCQlyZXN0b3JlU2F2ZWRBY3Rpb25zKGFjdGlvbkJhcnMpOwotCQkJYWN0aW9uQmFycy51cGRhdGVBY3Rpb25CYXJzKCk7Ci0JCQlhY3Rpb25CYXJzID0gbnVsbDsKLQkJfQotCi0JCUZvbnQgZGlzcG9zZUZvbnQgPSBzY2FsZWRGb250OwotCQlzY2FsZWRGb250ID0gbnVsbDsKLQkJc3VwZXIuYnJpbmdEb3duKCk7Ci0JCWlmIChkaXNwb3NlRm9udCAhPSBudWxsKQotCQkJZGlzcG9zZUZvbnQuZGlzcG9zZSgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzaG93RmVlZGJhY2soKSB7Ci0JCWdldEVkaXRQYXJ0KCkuc2hvd1NvdXJjZUZlZWRiYWNrKGdldERpcmVjdEVkaXRSZXF1ZXN0KCkpOwotCX0KLQotCXByb3RlY3RlZCBDZWxsRWRpdG9yIGNyZWF0ZUNlbGxFZGl0b3JPbihDb21wb3NpdGUgY29tcG9zaXRlKSB7Ci0JCXJldHVybiBuZXcgVGV4dENlbGxFZGl0b3IoY29tcG9zaXRlLCBTV1QuU0lOR0xFIHwgU1dULldSQVApOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGluaXRDZWxsRWRpdG9yKCkgewotCQlUZXh0IHRleHQgPSAoVGV4dClnZXRDZWxsRWRpdG9yKCkuZ2V0Q29udHJvbCgpOwotCQlMYWJlbCBsYWJlbCA9ICgoSU5hbWVkRWRpdFBhcnQpIGdldEVkaXRQYXJ0KCkpLmdldExhYmVsRmlndXJlKCk7Ci0JCQotCQlpZiAobGFiZWwgIT0gbnVsbCkgewotCQkJc2NhbGVkRm9udCA9IGxhYmVsLmdldEZvbnQoKTsKLQkJCQotCQkJLy8gVE9ETzogcm1haDogIGhhY2sgaGVyZSB0byBzZXQgdGhlIGJhY2tncm91bmQgY29sb3Igb2YgdGhlCi0JCQkvLyBkaXJlY3QgZWRpdCBUZXh0LiAgU29sdXRpb24gaXMgdG8gbWFrZSB0aGUgVGV4dCB0cmFuc3BhcmVudC4uLgotCQkJQ29sb3IgY29sb3IgPSBsYWJlbC5nZXRCYWNrZ3JvdW5kQ29sb3IoKTsKLQkJCWlmIChjb2xvci5lcXVhbHMoRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLnRhYmxlQ2VsbFNlbGVjdGlvbkNvbG9yKSkgewotCQkJCXRleHQuc2V0QmFja2dyb3VuZChjb2xvcik7Ci0JCQl9Ci0JCQllbHNlIHsKLS8vCQkJCXRleHQuc2V0QmFja2dyb3VuZChDb2xvckNvbnN0YW50cy5saWdodEJsdWUpOwotCQkJICAgIHRleHQuc2V0QmFja2dyb3VuZChDb2xvckNvbnN0YW50cy53aGl0ZSk7Ci0JCQl9Ci0JCQkKLQkJCVN0cmluZyBpbml0aWFsTGFiZWxUZXh0ID0gbGFiZWwuZ2V0VGV4dCgpOwotCQkJZ2V0Q2VsbEVkaXRvcigpLnNldFZhbHVlKGluaXRpYWxMYWJlbFRleHQpOwotCQl9Ci0JCWVsc2UgewotCQkJc2NhbGVkRm9udCA9IGxhYmVsLmdldFBhcmVudCgpLmdldEZvbnQoKTsKLQkJCXRleHQuc2V0QmFja2dyb3VuZChsYWJlbC5nZXRQYXJlbnQoKS5nZXRCYWNrZ3JvdW5kQ29sb3IoKSk7Ci0JCX0KLQkJCi0JCUZvbnREYXRhIGRhdGEgPSBzY2FsZWRGb250LmdldEZvbnREYXRhKClbMF07Ci0JCURpbWVuc2lvbiBmb250U2l6ZSA9IG5ldyBEaW1lbnNpb24oMCwgZGF0YS5nZXRIZWlnaHQoKSk7Ci0JCWxhYmVsLmdldFBhcmVudCgpLnRyYW5zbGF0ZVRvQWJzb2x1dGUoZm9udFNpemUpOwotCQlkYXRhLnNldEhlaWdodChmb250U2l6ZS5oZWlnaHQpOwotCQlzY2FsZWRGb250ID0gbmV3IEZvbnQobnVsbCwgZGF0YSk7Ci0JCQotCQl0ZXh0LnNldEZvbnQoc2NhbGVkRm9udCk7Ci0vLwkJdGV4dC5zZWxlY3RBbGwoKTsKLQotCQkvLyBIb29rIHRoZSBjZWxsIGVkaXRvcidzIGNvcHkvcGFzdGUgYWN0aW9ucyB0byB0aGUgYWN0aW9uQmFycyBzbyB0aGF0IHRoZXkgY2FuCi0JCS8vIGJlIGludm9rZWQgdmlhIGtleWJvYXJkIHNob3J0Y3V0cy4KLQkJYWN0aW9uQmFycyA9IEFTREVkaXRvclBsdWdpbi5nZXRBY3RpdmVFZGl0b3IoKS5nZXRFZGl0b3JTaXRlKCkuZ2V0QWN0aW9uQmFycygpOwotCQlzYXZlQ3VycmVudEFjdGlvbnMoYWN0aW9uQmFycyk7Ci0JCWFjdGlvbkhhbmRsZXIgPSBuZXcgQ2VsbEVkaXRvckFjdGlvbkhhbmRsZXIoYWN0aW9uQmFycyk7Ci0JCWFjdGlvbkhhbmRsZXIuYWRkQ2VsbEVkaXRvcihnZXRDZWxsRWRpdG9yKCkpOwotCQlhY3Rpb25CYXJzLnVwZGF0ZUFjdGlvbkJhcnMoKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcmVzdG9yZVNhdmVkQWN0aW9ucyhJQWN0aW9uQmFycyBhY3Rpb25CYXJzKXsKLQkJYWN0aW9uQmFycy5zZXRHbG9iYWxBY3Rpb25IYW5kbGVyKEFjdGlvbkZhY3RvcnkuQ09QWS5nZXRJZCgpLCBjb3B5KTsKLQkJYWN0aW9uQmFycy5zZXRHbG9iYWxBY3Rpb25IYW5kbGVyKEFjdGlvbkZhY3RvcnkuUEFTVEUuZ2V0SWQoKSwgcGFzdGUpOwotCQlhY3Rpb25CYXJzLnNldEdsb2JhbEFjdGlvbkhhbmRsZXIoQWN0aW9uRmFjdG9yeS5ERUxFVEUuZ2V0SWQoKSwgZGVsZXRlKTsKLQkJYWN0aW9uQmFycy5zZXRHbG9iYWxBY3Rpb25IYW5kbGVyKEFjdGlvbkZhY3RvcnkuU0VMRUNUX0FMTC5nZXRJZCgpLCBzZWxlY3RBbGwpOwotCQlhY3Rpb25CYXJzLnNldEdsb2JhbEFjdGlvbkhhbmRsZXIoQWN0aW9uRmFjdG9yeS5DVVQuZ2V0SWQoKSwgY3V0KTsKLQkJYWN0aW9uQmFycy5zZXRHbG9iYWxBY3Rpb25IYW5kbGVyKEFjdGlvbkZhY3RvcnkuRklORC5nZXRJZCgpLCBmaW5kKTsKLQkJYWN0aW9uQmFycy5zZXRHbG9iYWxBY3Rpb25IYW5kbGVyKEFjdGlvbkZhY3RvcnkuVU5ETy5nZXRJZCgpLCB1bmRvKTsKLQkJYWN0aW9uQmFycy5zZXRHbG9iYWxBY3Rpb25IYW5kbGVyKEFjdGlvbkZhY3RvcnkuUkVETy5nZXRJZCgpLCByZWRvKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgc2F2ZUN1cnJlbnRBY3Rpb25zKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsKLQkJY29weSA9IGFjdGlvbkJhcnMuZ2V0R2xvYmFsQWN0aW9uSGFuZGxlcihBY3Rpb25GYWN0b3J5LkNPUFkuZ2V0SWQoKSk7Ci0JCXBhc3RlID0gYWN0aW9uQmFycy5nZXRHbG9iYWxBY3Rpb25IYW5kbGVyKEFjdGlvbkZhY3RvcnkuUEFTVEUuZ2V0SWQoKSk7Ci0JCWRlbGV0ZSA9IGFjdGlvbkJhcnMuZ2V0R2xvYmFsQWN0aW9uSGFuZGxlcihBY3Rpb25GYWN0b3J5LkRFTEVURS5nZXRJZCgpKTsKLQkJc2VsZWN0QWxsID0gYWN0aW9uQmFycy5nZXRHbG9iYWxBY3Rpb25IYW5kbGVyKEFjdGlvbkZhY3RvcnkuU0VMRUNUX0FMTC5nZXRJZCgpKTsKLQkJY3V0ID0gYWN0aW9uQmFycy5nZXRHbG9iYWxBY3Rpb25IYW5kbGVyKEFjdGlvbkZhY3RvcnkuQ1VULmdldElkKCkpOwotCQlmaW5kID0gYWN0aW9uQmFycy5nZXRHbG9iYWxBY3Rpb25IYW5kbGVyKEFjdGlvbkZhY3RvcnkuRklORC5nZXRJZCgpKTsKLQkJdW5kbyA9IGFjdGlvbkJhcnMuZ2V0R2xvYmFsQWN0aW9uSGFuZGxlcihBY3Rpb25GYWN0b3J5LlVORE8uZ2V0SWQoKSk7Ci0JCXJlZG8gPSBhY3Rpb25CYXJzLmdldEdsb2JhbEFjdGlvbkhhbmRsZXIoQWN0aW9uRmFjdG9yeS5SRURPLmdldElkKCkpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2RpcmVjdGVkaXQvVHlwZVJlZmVyZW5jZURpcmVjdEVkaXRNYW5hZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9kaXJlY3RlZGl0L1R5cGVSZWZlcmVuY2VEaXJlY3RFZGl0TWFuYWdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZGZhOTkyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2RpcmVjdGVkaXQvVHlwZVJlZmVyZW5jZURpcmVjdEVkaXRNYW5hZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZGlyZWN0ZWRpdDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LlJlY3RhbmdsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuZWRpdHBhcnRzLkFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5DZWxsRWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLnNlYXJjaC5kaWFsb2dzLkNvbXBvbmVudFNwZWNpZmljYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExUGFyYW1ldGVyRm9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMuUGFyYW1ldGVyVHlwZUVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLlJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBUeXBlUmVmZXJlbmNlRGlyZWN0RWRpdE1hbmFnZXIgZXh0ZW5kcyBDb21ib0JveENlbGxFZGl0b3JNYW5hZ2VyCi17Ci0gIHByb3RlY3RlZCBBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0IGVkaXRQYXJ0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICBwcm90ZWN0ZWQgSVBhcmFtZXRlciBzZXRPYmplY3Q7Ci0gIAotICBwdWJsaWMgVHlwZVJlZmVyZW5jZURpcmVjdEVkaXRNYW5hZ2VyKElQYXJhbWV0ZXIgcGFyYW1ldGVyLCBBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0IHNvdXJjZSwgTGFiZWwgbGFiZWwpCi0gIHsKLSAgICBzdXBlcihzb3VyY2UsIGxhYmVsKTsKLSAgICBlZGl0UGFydCA9IHNvdXJjZTsKLSAgICBzZXRPYmplY3QgPSBwYXJhbWV0ZXI7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBDZWxsRWRpdG9yIGNyZWF0ZUNlbGxFZGl0b3JPbihDb21wb3NpdGUgY29tcG9zaXRlKQotICB7Ci0JICByZXR1cm4gc3VwZXIuY3JlYXRlQ2VsbEVkaXRvck9uKGNvbXBvc2l0ZSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgTGlzdCBjb21wdXRlQ29tYm9Db250ZW50KCkKLSAgewotCSAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JICAgIENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIGVkaXRNYW5hZ2VyID0gZ2V0Q29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIoKTsKLQkgICAgaWYgKGVkaXRNYW5hZ2VyICE9IG51bGwpCi0JICAgIHsKLQkgICAgICAgbGlzdC5hZGQoTWVzc2FnZXMuX1VJX0JVVFRPTl9CUk9XU0UpOyAvLyROT04tTkxTLTEkCi0JICAgICAgIGxpc3QuYWRkKE1lc3NhZ2VzLl9VSV9CVVRUT05fTkVXKTsgLy8kTk9OLU5MUy0xJAotCSAgICAgICBDb21wb25lbnRTcGVjaWZpY2F0aW9uW10gcXVpY2tQaWNrcyA9IGVkaXRNYW5hZ2VyLmdldFF1aWNrUGlja3MoKTsKLQkgICAgICAgaWYgKHF1aWNrUGlja3MgIT0gbnVsbCkKLQkgICAgICAgewotCSAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IHF1aWNrUGlja3MubGVuZ3RoOyBpKyspCi0JICAgICAgICAgewotCSAgICAgICAgICAgQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBjb21wb25lbnRTcGVjaWZpY2F0aW9uID0gcXVpY2tQaWNrc1tpXTsKLQkgICAgICAgICAgIGxpc3QuYWRkKGNvbXBvbmVudFNwZWNpZmljYXRpb24uZ2V0TmFtZSgpKTsKLQkgICAgICAgICB9ICAKLQkgICAgICAgfQotCSAgICAgICBDb21wb25lbnRTcGVjaWZpY2F0aW9uW10gaGlzdG9yeSA9IGVkaXRNYW5hZ2VyLmdldEhpc3RvcnkoKTsKLQkgICAgICAgaWYgKGhpc3RvcnkgIT0gbnVsbCkKLQkgICAgICAgewotCSAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IGhpc3RvcnkubGVuZ3RoOyBpKyspCi0JICAgICAgICAgewotCSAgICAgICAgICAgQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBjb21wb25lbnRTcGVjaWZpY2F0aW9uID0gaGlzdG9yeVtpXTsKLQkgICAgICAgICAgIGxpc3QuYWRkKGNvbXBvbmVudFNwZWNpZmljYXRpb24uZ2V0TmFtZSgpKTsKLQkgICAgICAgICB9ICAKLQkgICAgICAgfQotCSAgICB9IAotCSAgICByZXR1cm4gbGlzdDsgCi0gIH0KLQotICBwdWJsaWMgdm9pZCBwZXJmb3JtTW9kaWZ5KE9iamVjdCB2YWx1ZSkKLSAgewotCSAgICBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBlZGl0TWFuYWdlciA9IGdldENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKCk7Ci0JICAgIGlmIChlZGl0TWFuYWdlciA9PSBudWxsKQotCSAgICB7Ci0JICAgICAgcmV0dXJuOwotCSAgICB9Ci0JICAgIAotCSAgICAvLyBvdXIgY3J1ZGUgY29tYm8gYm94IGNhbiBvbmx5IHdvcmsgd2l0aCAnU3RyaW5nJyBvYmplY3RzCi0JICAgIC8vIGlmIHdlIGdldCBhIFN0cmluZyBiYWNrIHdlIG5lZWQgdG8gZG8gc29tZSBjbGV2ZXIgbWFwcGluZyB0byBnZXQgdGhlIENvbXBvbmVudFNwZWNpZmljYXRpb24gCi0JICAgIC8vICAgIAotCSAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBTdHJpbmcpCi0JICAgIHsKLQkgICAgICB2YWx1ZSA9IGdldENvbXBvbmVudFNwZWNpZmljYXRpb25Gb3JWYWx1ZSgoU3RyaW5nKXZhbHVlKTsgICAgIAotCSAgICB9ICAKLQkgICAgLy8gd2UgYXNzdW1lIHRoZSBzZWxlY3RlZCB2YWx1ZSBpcyBhbHdheXMgb2YgdGhlIGZvcm0gb2YgYSBDb21wb25lbnRTcGVjaWZpY2F0aW9uCi0JICAgIC8vIAotCSAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBDb21wb25lbnRTcGVjaWZpY2F0aW9uKSAgICAgIAotCSAgICB7Ci0JCQllZGl0TWFuYWdlci5tb2RpZnlDb21wb25lbnRSZWZlcmVuY2UoZ2V0RWRpdFBhcnQoKS5nZXRNb2RlbCgpLCAoQ29tcG9uZW50U3BlY2lmaWNhdGlvbikgdmFsdWUpOwotCSAgICB9Ci0gIH0gCi0KLSAgcHJvdGVjdGVkIExpc3QgY29tcHV0ZVNvcnRlZExpc3QoTGlzdCBsaXN0KQotICB7Ci0vLyAgICByZXR1cm4gVHlwZXNIZWxwZXIuc29ydExpc3QobGlzdCk7Ci0JICByZXR1cm4gbGlzdDsKLSAgfQotICAKLSAgcHJpdmF0ZSBpbnQgZ2V0VGV4dEluZGVudCgpIHsKLQkgIGlmIChlZGl0UGFydCBpbnN0YW5jZW9mIFBhcmFtZXRlclR5cGVFZGl0UGFydCkgewotCQkgIFJlY3RhbmdsZSBib3VuZHMgPSAoKFBhcmFtZXRlclR5cGVFZGl0UGFydCkgZWRpdFBhcnQpLmdldEZpZ3VyZSgpLmdldEJvdW5kcygpOwotCQkgIGludCB0ZXh0WCA9ICgoUGFyYW1ldGVyVHlwZUVkaXRQYXJ0KSBlZGl0UGFydCkuZ2V0TGFiZWxGaWd1cmUoKS5nZXRUZXh0Qm91bmRzKCkueDsgCi0JCSAgcmV0dXJuIHRleHRYIC0gYm91bmRzLng7Ci0JICB9Ci0JICAKLQkgIHJldHVybiA1OwotICB9Ci0gIAotICBwcm90ZWN0ZWQgQ2VsbEVkaXRvciBjcmVhdGVDZWxsRWRpdG9yKENvbXBvc2l0ZSBjb21wb3NpdGUsIFN0cmluZ1tdIHN0cmluZ0FycmF5KQotICB7Ci0gICAgQVNEQ29tYm9Cb3hDZWxsRWRpdG9yIGNlbGxFZGl0b3IgPSBuZXcgQVNEQ29tYm9Cb3hDZWxsRWRpdG9yKGNvbXBvc2l0ZSwgc3RyaW5nQXJyYXksIGdldENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKCkpOwotICAgIGNlbGxFZGl0b3Iuc2V0VGV4dEluZGVudChnZXRUZXh0SW5kZW50KCkpOwotICAgIC8vKChBRFRDb21ib0JveENlbGxFZGl0b3IpIGNlbGxFZGl0b3IpLnNldE9iamVjdFRvTW9kaWZ5KHNldE9iamVjdCk7Ci0gICAgCi0gICAgcmV0dXJuIGNlbGxFZGl0b3I7Ci0gIH0KLQotCXB1YmxpYyBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBnZXRDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcigpIHsKLQkJQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgZWRpdE1hbmFnZXIgPSBudWxsOwotCQlib29sZWFuIGlzVHlwZSA9IHRydWU7Ci0JCQotCQkvLyBUT0RPOiBXZSdyZSBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgYW5kIHVzaW5nIFdTREwxMSBJbXBsIGNsYXNzZXMuLi4uIFdlIHNob3VsZAotCQkvLyBpbnZlc3RpZ2F0ZSBmdXJ0aGVyIHRvIHNlZSBpZiB3ZSBjYW4gYXZvaWQga25vd2luZyBhYm91dCBXU0RMMTEgSW1wbCBjbGFzc2VzLgotCQlpZiAoc2V0T2JqZWN0IGluc3RhbmNlb2YgVzExUGFyYW1ldGVyRm9yUGFydCkgewotCQkJaXNUeXBlID0gKChXMTFQYXJhbWV0ZXJGb3JQYXJ0KSBzZXRPYmplY3QpLmlzVHlwZSgpOwotCQl9Ci0JCQotCQlpZiAoaXNUeXBlKSB7IAotCQkJZWRpdE1hbmFnZXIgPSAoQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIpIFJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyLmdldFhTRFR5cGVSZWZlcmVuY2VFZGl0TWFuYWdlcihzZXRPYmplY3QpOwotCQl9Ci0JCWVsc2UgewotCQkJZWRpdE1hbmFnZXIgPSAoQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIpIFJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyLmdldFhTREVsZW1lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcihzZXRPYmplY3QpOwotCQl9Ci0KLQkJcmV0dXJuIGVkaXRNYW5hZ2VyOyAKLQl9Ci0JCi0JLy8gVE9ETzogcm1haDogVGhpcyBjb2RlIHNob3VsZCBsaXZlIGluIGEgY29tbW9uIHBsYWNlLi4uLi4gVGhpcyBjb2RlIGlzIGFsc28gdXNlZCBpbiBvdGhlciBVSSBzY2VuYXJpb3Mgd2hlbgotCS8vIGEgc2ltaWxhciBjb21ibyBib3ggaXMgdXNlZC4gIEZvciBleGFtcGxlIGluIHRoZSBwcm9wZXJ0aWVzLi4uKFBhcmFtZXRlclNlY3Rpb24pICBBbHNvIHVzZWQgaW4gdGhlIFhTREVkaXRvci4uLgotCXByb3RlY3RlZCBDb21wb25lbnRTcGVjaWZpY2F0aW9uIGdldENvbXBvbmVudFNwZWNpZmljYXRpb25Gb3JWYWx1ZShTdHJpbmcgdmFsdWUpCi0JewotCQlDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBlZGl0TWFuYWdlciA9IGdldENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKCk7Ci0JCWlmIChlZGl0TWFuYWdlciAhPSBudWxsKQotCQl7ICAKLQkJCUNvbXBvbmVudFNwZWNpZmljYXRpb25bXSBxdWlja1BpY2tzID0gZWRpdE1hbmFnZXIuZ2V0UXVpY2tQaWNrcygpOwotCQkJaWYgKHF1aWNrUGlja3MgIT0gbnVsbCkKLQkJCXsKLQkJCQlmb3IgKGludCBpPTA7IGkgPCBxdWlja1BpY2tzLmxlbmd0aDsgaSsrKQotCQkJCXsKLQkJCQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBjb21wb25lbnRTcGVjaWZpY2F0aW9uID0gcXVpY2tQaWNrc1tpXTsKLQkJCQkJaWYgKHZhbHVlLmVxdWFscyhjb21wb25lbnRTcGVjaWZpY2F0aW9uLmdldE5hbWUoKSkpCi0JCQkJCXsKLQkJCQkJCXJldHVybiBjb21wb25lbnRTcGVjaWZpY2F0aW9uOwotCQkJCQl9ICAgICAgICAgICAgICAgIAotCQkJCX0gIAotCQkJfQotCQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbltdIGhpc3RvcnkgPSBlZGl0TWFuYWdlci5nZXRIaXN0b3J5KCk7Ci0JCQlpZiAoaGlzdG9yeSAhPSBudWxsKQotCQkJewotCQkJCWZvciAoaW50IGk9MDsgaSA8IGhpc3RvcnkubGVuZ3RoOyBpKyspCi0JCQkJewotCQkJCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uIGNvbXBvbmVudFNwZWNpZmljYXRpb24gPSBoaXN0b3J5W2ldOwotCQkJCQlpZiAodmFsdWUuZXF1YWxzKGNvbXBvbmVudFNwZWNpZmljYXRpb24uZ2V0TmFtZSgpKSkKLQkJCQkJeyAgCi0JCQkJCQlyZXR1cm4gY29tcG9uZW50U3BlY2lmaWNhdGlvbjsKLQkJCQkJfQotCQkJCX0gIAotCQkJfQotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9BU0RFZGl0UGFydEZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9BU0RFZGl0UGFydEZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWY2NmI5MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvQVNERWRpdFBhcnRGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQXNzZXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBhcnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLm1vZGVsLkFic3RyYWN0TW9kZWxDb2xsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLm1vZGVsLkJpbmRpbmdDb2x1bW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMubW9kZWwuQmluZGluZ0NvbnRlbnRQbGFjZUhvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklCaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUJpbmRpbmdNZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRW5kUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklTZXJ2aWNlOwotCi1wdWJsaWMgY2xhc3MgQVNERWRpdFBhcnRGYWN0b3J5IGltcGxlbWVudHMgRWRpdFBhcnRGYWN0b3J5Ci17Ci0gIHB1YmxpYyBFZGl0UGFydCBjcmVhdGVFZGl0UGFydChFZGl0UGFydCBjb250ZXh0LCBPYmplY3QgbW9kZWwpCi0gIHsKLSAgICBFZGl0UGFydCBjaGlsZCA9IG51bGw7Ci0gICAgaWYgKG1vZGVsIGluc3RhbmNlb2YgSURlc2NyaXB0aW9uKQotICAgIHsKLSAgICAgIGNoaWxkID0gbmV3IERlZmluaXRpb25zRWRpdFBhcnQoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobW9kZWwgaW5zdGFuY2VvZiBBYnN0cmFjdE1vZGVsQ29sbGVjdGlvbikKLSAgICB7Ci0gICAgICBBYnN0cmFjdE1vZGVsQ29sbGVjdGlvbiBjb2xsZWN0aW9uID0gKEFic3RyYWN0TW9kZWxDb2xsZWN0aW9uKW1vZGVsOwotICAgICAgaWYgKGNvbGxlY3Rpb24gaW5zdGFuY2VvZiBCaW5kaW5nQ29sdW1uKQotICAgICAgewotICAgICAgICBjaGlsZCA9IG5ldyBCaW5kaW5nQ29sdW1uRWRpdFBhcnQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsgIAotICAgICAgICBjaGlsZCA9IG5ldyBDb2x1bW5FZGl0UGFydCgpOwotICAgICAgfSAgCi0gICAgfQotICAgIGVsc2UgaWYgKG1vZGVsIGluc3RhbmNlb2YgSUVuZFBvaW50KQotICAgIHsKLSAgICAgIGNoaWxkID0gbmV3IEVuZFBvaW50RWRpdFBhcnQoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobW9kZWwgaW5zdGFuY2VvZiBJU2VydmljZSkKLSAgICB7Ci0gICAgICBjaGlsZCA9IG5ldyBTZXJ2aWNlRWRpdFBhcnQoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobW9kZWwgaW5zdGFuY2VvZiBJQmluZGluZykKLSAgICB7Ci0gICAgICBjaGlsZCA9IG5ldyBCaW5kaW5nRWRpdFBhcnQoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobW9kZWwgaW5zdGFuY2VvZiBJQmluZGluZ09wZXJhdGlvbiB8fAotICAgICAgICAgICAgIG1vZGVsIGluc3RhbmNlb2YgSUJpbmRpbmdNZXNzYWdlUmVmZXJlbmNlIHx8Ci0gICAgICAgICAgICAgbW9kZWwgaW5zdGFuY2VvZiBCaW5kaW5nQ29udGVudFBsYWNlSG9sZGVyKQotICAgIHsKLSAgICAgIGNoaWxkID0gbmV3IEJpbmRpbmdDb250ZW50RWRpdFBhcnQoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobW9kZWwgaW5zdGFuY2VvZiBJSW50ZXJmYWNlKQotICAgIHsKLSAgICAgIGNoaWxkID0gbmV3IEludGVyZmFjZUVkaXRQYXJ0KCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKG1vZGVsIGluc3RhbmNlb2YgSU1lc3NhZ2VSZWZlcmVuY2UpCi0gICAgewotICAgICAgY2hpbGQgPSBuZXcgTWVzc2FnZVJlZmVyZW5jZUVkaXRQYXJ0KCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKG1vZGVsIGluc3RhbmNlb2YgSU9wZXJhdGlvbikKLSAgICB7Ci0gICAgICBjaGlsZCA9IG5ldyBPcGVyYXRpb25FZGl0UGFydCgpOwotICAgIH0KLSAgICBlbHNlIGlmIChtb2RlbCBpbnN0YW5jZW9mIElQYXJhbWV0ZXIgJiYgY29udGV4dCBpbnN0YW5jZW9mIFBhcmFtZXRlckVkaXRQYXJ0KSB7Ci0gICAgCWNoaWxkID0gbmV3IFBhcmFtZXRlclR5cGVFZGl0UGFydCgpOwotICAgIH0KLSAgICBlbHNlIGlmIChtb2RlbCBpbnN0YW5jZW9mIElQYXJhbWV0ZXIgJiYgY29udGV4dCBpbnN0YW5jZW9mIE1lc3NhZ2VSZWZlcmVuY2VFZGl0UGFydCkKLSAgICB7Ci0gICAgICBjaGlsZCA9IG5ldyBQYXJhbWV0ZXJFZGl0UGFydCgpOwotICAgIH0KLSAgICBpZiAoY2hpbGQgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuQ291bGQgbm90IGNyZWF0ZSBlZGl0cGFydCBmb3IgbW9kZWw6ICIgKyBtb2RlbCk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIFRocmVhZC5kdW1wU3RhY2soKTsKLSAgICB9Ci0gICAgQXNzZXJ0LmlzTm90TnVsbChjaGlsZCk7Ci0gICAgY2hpbGQuc2V0TW9kZWwobW9kZWwpOwotICAgIHJldHVybiBjaGlsZDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0FTRFJvb3RFZGl0UGFydC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0FTRFJvb3RFZGl0UGFydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Yjk0M2ExLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9BU0RSb290RWRpdFBhcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5CZW5kcG9pbnRDb25uZWN0aW9uUm91dGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Db25uZWN0aW9uTGF5ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkxheWVyQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5lZGl0cGFydHMuU2NhbGFibGVSb290RWRpdFBhcnQ7Ci0KLXB1YmxpYyBjbGFzcyBBU0RSb290RWRpdFBhcnQgZXh0ZW5kcyBTY2FsYWJsZVJvb3RFZGl0UGFydCBpbXBsZW1lbnRzIG9yZy5lY2xpcHNlLmdlZi5Sb290RWRpdFBhcnQKLXsgIAotICBwdWJsaWMgdm9pZCBhY3RpdmF0ZSgpCi0gIHsKLSAgICBzdXBlci5hY3RpdmF0ZSgpOwotICAgIC8vIFNldCB1cCBDb25uZWN0aW9uIGxheWVyIHdpdGggYSByb3V0ZXIsIGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBoYXZlIG9uZQotICAgIENvbm5lY3Rpb25MYXllciBjb25uZWN0aW9uTGF5ZXIgPSAoQ29ubmVjdGlvbkxheWVyKSBnZXRMYXllcihMYXllckNvbnN0YW50cy5DT05ORUNUSU9OX0xBWUVSKTsKLSAgICBpZiAoY29ubmVjdGlvbkxheWVyICE9IG51bGwpCi0gICAgeyAgCi0vLyAgICAgIGNvbm5lY3Rpb25MYXllci5zZXRDb25uZWN0aW9uUm91dGVyKG5ldyBNYW5oYXR0YW5Db25uZWN0aW9uUm91dGVyKCkpOwotICAgICAgY29ubmVjdGlvbkxheWVyLnNldENvbm5lY3Rpb25Sb3V0ZXIobmV3IEJlbmRwb2ludENvbm5lY3Rpb25Sb3V0ZXIoKSk7Ci0gICAgfQotICAgIHJlZnJlc2goKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0Fic3RyYWN0Qm94dEVkaXRQYXJ0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvQWJzdHJhY3RCb3h0RWRpdFBhcnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTY0ZjM4YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvQWJzdHJhY3RCb3h0RWRpdFBhcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuQ29sb3JDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLklGaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5MaW5lQm9yZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Ub29sYmFyTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuUmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuUmVxdWVzdENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYucmVxdWVzdHMuRGlyZWN0RWRpdFJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLnRvb2xzLkRpcmVjdEVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmRpcmVjdGVkaXQuTGFiZWxDZWxsRWRpdG9yTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmRpcmVjdGVkaXQuTGFiZWxFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwb2xpY2llcy5BU0RMYWJlbERpcmVjdEVkaXRQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cG9saWNpZXMuQVNEU2VsZWN0aW9uRWRpdFBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmZpZ3VyZXMuQm94Q29tcG9uZW50RmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24ubGF5b3V0cy5Db2x1bW5EYXRhOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RCb3h0RWRpdFBhcnQgZXh0ZW5kcyBCYXNlRWRpdFBhcnQgaW1wbGVtZW50cyBJTmFtZWRFZGl0UGFydAotewotICBwcm90ZWN0ZWQgQ29sdW1uRGF0YSBjb2x1bW5EYXRhID0gbmV3IENvbHVtbkRhdGEoKTsKLSAgcHJvdGVjdGVkIEJveENvbXBvbmVudEZpZ3VyZSBmaWd1cmU7Ci0gIAotICBwcm90ZWN0ZWQgSUZpZ3VyZSBjcmVhdGVGaWd1cmUoKQotICB7Ci0gICAgZmlndXJlID0gbmV3IEJveENvbXBvbmVudEZpZ3VyZSgpOwotICAgIGZpZ3VyZS5zZXRCb3JkZXIobmV3IExpbmVCb3JkZXIoMSkpOwotICAgIFRvb2xiYXJMYXlvdXQgdG9vbGJhckxheW91dCA9IG5ldyBUb29sYmFyTGF5b3V0KCk7Ci0gICAgdG9vbGJhckxheW91dC5zZXRTdHJldGNoTWlub3JBeGlzKHRydWUpOwotICAgIC8vIHRvb2xiYXJMYXlvdXQuc2V0TWlub3JBbGlnbm1lbnQoVG9vbGJhckxheW91dC5BTElHTl9CT1RUT01SSUdIVCk7Ci0gICAgZmlndXJlLnNldExheW91dE1hbmFnZXIodG9vbGJhckxheW91dCk7Ci0gICAgLy8gaWYoaXNTY3JvbGxhYmxlKCkpCi0gICAgLy8gZmlndXJlLnNldFNjcm9sbGluZ0FjdGlvbkxpc3RlbmVyKHRoaXMpOwotICAgIHJldHVybiBmaWd1cmU7Ci0gIH0KLQotICBwdWJsaWMgSUZpZ3VyZSBnZXRDb250ZW50UGFuZSgpCi0gIHsKLSAgICByZXR1cm4gZmlndXJlLmdldENvbnRlbnRQYW5lKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVFZGl0UG9saWNpZXMoKQotICB7Ci0gICAgICBzdXBlci5jcmVhdGVFZGl0UG9saWNpZXMoKTsKLQkgIGluc3RhbGxFZGl0UG9saWN5KEVkaXRQb2xpY3kuRElSRUNUX0VESVRfUk9MRSwgbmV3IEFTRExhYmVsRGlyZWN0RWRpdFBvbGljeSgpKTsKLQkgIGluc3RhbGxFZGl0UG9saWN5KEVkaXRQb2xpY3kuU0VMRUNUSU9OX0ZFRURCQUNLX1JPTEUsIG5ldyBBU0RTZWxlY3Rpb25FZGl0UG9saWN5KCkpOwotICB9Ci0KLSAgcHJpdmF0ZSBEaXJlY3RFZGl0TWFuYWdlciBtYW5hZ2VyOwotICAKLSAgcHVibGljIHZvaWQgcGVyZm9ybURpcmVjdEVkaXQoUG9pbnQgY3Vyc29yTG9jYXRpb24pewotCSAgaWYgKGN1cnNvckxvY2F0aW9uID09IG51bGwgfHwgIGhpdFRlc3RGaWd1cmUoZmlndXJlLmdldEhlYWRpbmdGaWd1cmUoKSwgY3Vyc29yTG9jYXRpb24pICYmICFpc1JlYWRPbmx5KCkpIHsKLQkJICBtYW5hZ2VyID0gbmV3IExhYmVsRWRpdE1hbmFnZXIodGhpcywgbmV3IExhYmVsQ2VsbEVkaXRvckxvY2F0b3IodGhpcywgY3Vyc29yTG9jYXRpb24pKTsKLQkJICBtYW5hZ2VyLnNob3coKTsKLQkgIH0KLSAgICBlbHNlIGlmICgoaGl0VGVzdChmaWd1cmUuZ2V0TGFiZWwoKSwgY3Vyc29yTG9jYXRpb24pIHx8Ci0gICAgICAgIGhpdFRlc3RGaWd1cmUoZmlndXJlLmdldEhlYWRpbmdGaWd1cmUoKSwgY3Vyc29yTG9jYXRpb24pKSAmJiBpc1JlYWRPbmx5KCkpIHsKLSAgICAgIGRvT3Blbk5ld0VkaXRvcigpOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgcGVyZm9ybVJlcXVlc3QoUmVxdWVzdCByZXEpIHsKLQkgIGlmIChyZXEuZ2V0VHlwZSgpLmVxdWFscyhSZXF1ZXN0Q29uc3RhbnRzLlJFUV9ESVJFQ1RfRURJVCkpIHsKLQkJICBQb2ludCBsb2NhdGlvbiA9IG51bGw7Ci0JCSAgaWYgKHJlcSBpbnN0YW5jZW9mIERpcmVjdEVkaXRSZXF1ZXN0KSB7Ci0JCQkgIGxvY2F0aW9uID0gKChEaXJlY3RFZGl0UmVxdWVzdCkgcmVxKS5nZXRMb2NhdGlvbigpOwkJCSAgCi0JCSAgfQotCQkgIHBlcmZvcm1EaXJlY3RFZGl0KGxvY2F0aW9uKTsKLQkgIH0KLSAgfQotICAKLSAgcHVibGljIExhYmVsIGdldExhYmVsRmlndXJlKCkgewotCSAgcmV0dXJuIGZpZ3VyZS5nZXRMYWJlbCgpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgcmVmcmVzaENoaWxkcmVuKCkKLSAgewotICAgIHN1cGVyLnJlZnJlc2hDaGlsZHJlbigpOwotICAgIC8vIGdldEZpZ3VyZSgpLmludmFsaWRhdGVUcmVlKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCByZWZyZXNoVmlzdWFscygpCi0gIHsKLSAgICBzdXBlci5yZWZyZXNoVmlzdWFscygpOwotICAgIFdTRExCYXNlQWRhcHRlciBib3ggPSAoV1NETEJhc2VBZGFwdGVyKSBnZXRNb2RlbCgpOwotICAgIGZpZ3VyZS5oZWFkaW5nRmlndXJlLnNldElzUmVhZE9ubHkoYm94LmlzUmVhZE9ubHkoKSk7Ci0gICAgZmlndXJlLmdldExhYmVsKCkuc2V0VGV4dChib3guZ2V0TmFtZSgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZEZlZWRiYWNrKCkKLSAgewotCSAgTGluZUJvcmRlciBib3hGaWd1cmVMaW5lQm9yZGVyID0gKExpbmVCb3JkZXIpIGZpZ3VyZS5nZXRCb3JkZXIoKTsKLQkgIGJveEZpZ3VyZUxpbmVCb3JkZXIuc2V0V2lkdGgoMik7Ci0vLwkgIGJveEZpZ3VyZUxpbmVCb3JkZXIuc2V0Q29sb3IoQ29sb3JDb25zdGFudHMuZGFya0JsdWUpOwotCSAgZmlndXJlLnNldFNlbGVjdGVkKHRydWUpOwotCSAgZmlndXJlLnJlcGFpbnQoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlbW92ZUZlZWRiYWNrKCkKLSAgewotCSAgTGluZUJvcmRlciBib3hGaWd1cmVMaW5lQm9yZGVyID0gKExpbmVCb3JkZXIpIGZpZ3VyZS5nZXRCb3JkZXIoKTsKLQkgIGJveEZpZ3VyZUxpbmVCb3JkZXIuc2V0V2lkdGgoMSk7Ci0JICBib3hGaWd1cmVMaW5lQm9yZGVyLnNldENvbG9yKENvbG9yQ29uc3RhbnRzLmJsYWNrKTsKLQkgIGZpZ3VyZS5zZXRTZWxlY3RlZChmYWxzZSk7Ci0JICBmaWd1cmUucmVwYWludCgpOwotICB9Ci0KLSAgcHVibGljIENvbHVtbkRhdGEgZ2V0Q29sdW1uRGF0YSgpCi0gIHsKLSAgICByZXR1cm4gY29sdW1uRGF0YTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0Jhc2VFZGl0UGFydC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0Jhc2VFZGl0UGFydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZWFmNGJiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9CYXNlRWRpdFBhcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LlBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5SZWN0YW5nbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5lZGl0cGFydHMuQWJzdHJhY3RHcmFwaGljYWxFZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYudWkuYWN0aW9ucy5BY3Rpb25SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWN0aW9ucy5PcGVuSW5OZXdFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMubW9kZWwuSUFjdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUFTRE9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklBU0RPYmplY3RMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmFkdC5kZXNpZ24uZWRpdHBvbGljaWVzLktleUJvYXJkQWNjZXNzaWJpbGl0eUVkaXRQb2xpY3k7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBCYXNlRWRpdFBhcnQgZXh0ZW5kcyBBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0IGltcGxlbWVudHMgSUFjdGlvblByb3ZpZGVyLCBJQVNET2JqZWN0TGlzdGVuZXIsIElGZWVkYmFja0hhbmRsZXIKLXsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBFTVBUWV9BQ1RJT05fQVJSQVkgPSB7fTsKLSAgCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRBY3Rpb25zKE9iamVjdCBvYmplY3QpCi0gIHsKLSAgICBPYmplY3QgbW9kZWwgPSBnZXRNb2RlbCgpOwotICAgIGlmIChtb2RlbCBpbnN0YW5jZW9mIElBY3Rpb25Qcm92aWRlcikKLSAgICB7Ci0gICAgICByZXR1cm4gKChJQWN0aW9uUHJvdmlkZXIpbW9kZWwpLmdldEFjdGlvbnMob2JqZWN0KTsKLSAgICB9ICAKLSAgICByZXR1cm4gRU1QVFlfQUNUSU9OX0FSUkFZOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgdm9pZCBhZGRBY3Rpb25zVG9MaXN0KExpc3QgbGlzdCwgU3RyaW5nW10gYWN0aW9ucykKLSAgewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWN0aW9ucy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBsaXN0LmFkZChhY3Rpb25zW2ldKTsKLSAgICB9ICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgYWN0aXZhdGUoKQotICB7Ci0gICAgc3VwZXIuYWN0aXZhdGUoKTsKLSAgICBPYmplY3QgbW9kZWwgPSBnZXRNb2RlbCgpOyAgICAKLSAgICBpZiAobW9kZWwgaW5zdGFuY2VvZiBJQVNET2JqZWN0KQotICAgIHsKLSAgICAgIElBU0RPYmplY3Qgb2JqZWN0ID0gKElBU0RPYmplY3QpbW9kZWw7Ci0gICAgICBvYmplY3QucmVnaXN0ZXJMaXN0ZW5lcih0aGlzKTsKLSAgICB9ICAgICAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGRlYWN0aXZhdGUoKQotICB7Ci0gICAgT2JqZWN0IG1vZGVsID0gZ2V0TW9kZWwoKTsKLSAgICBpZiAobW9kZWwgaW5zdGFuY2VvZiBJQVNET2JqZWN0KQotICAgIHsKLSAgICAgIElBU0RPYmplY3Qgb2JqZWN0ID0gKElBU0RPYmplY3QpbW9kZWw7Ci0gICAgICBvYmplY3QudW5yZWdpc3Rlckxpc3RlbmVyKHRoaXMpOwotICAgIH0gICAKLSAgICBzdXBlci5kZWFjdGl2YXRlKCk7Ci0gIH0gIAotICAKLSAgcHVibGljIHZvaWQgcHJvcGVydHlDaGFuZ2VkKE9iamVjdCBvYmplY3QsIFN0cmluZyBwcm9wZXJ0eSkKLSAgewotICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJwcm9wZXJ0eUNoYW5nZWQgIiArIHRoaXMuZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOwotICAgIHJlZnJlc2goKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgcmVmcmVzaENvbm5lY3Rpb25zKCkgewotCSAgSXRlcmF0b3Iga2lkcyA9IGdldENoaWxkcmVuKCkuaXRlcmF0b3IoKTsKLQkgIHdoaWxlIChraWRzLmhhc05leHQoKSkgewotCQkgIE9iamVjdCBpdGVtID0ga2lkcy5uZXh0KCk7Ci0JCSAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBCYXNlRWRpdFBhcnQpIHsKLQkJCSAgKChCYXNlRWRpdFBhcnQpIGl0ZW0pLnJlZnJlc2hDb25uZWN0aW9ucygpOwotCQkgIH0KLQkgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgYWRkRmVlZGJhY2soKSB7Ci0JICAKLSAgfQotICBwdWJsaWMgdm9pZCByZW1vdmVGZWVkYmFjaygpIHsKLQkgIAotICB9Ci0gIAotICBwcm90ZWN0ZWQgYm9vbGVhbiBoaXRUZXN0KFJlY3RhbmdsZSByZWN0YW5nbGUsIFBvaW50IGxvY2F0aW9uKSB7Ci0JICByZXR1cm4gcmVjdGFuZ2xlLmNvbnRhaW5zKGxvY2F0aW9uKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIGJvb2xlYW4gaGl0VGVzdChMYWJlbCB0YXJnZXQsIFBvaW50IGxvY2F0aW9uKSB7Ci0JICBSZWN0YW5nbGUgb3JpZ0IgPSB0YXJnZXQuZ2V0VGV4dEJvdW5kcygpLmdldENvcHkoKTsKLQkgIFJlY3RhbmdsZSB0cmFuc0IgPSB0YXJnZXQuZ2V0VGV4dEJvdW5kcygpLmdldENvcHkoKTsKLQotCSAgdGFyZ2V0LnRyYW5zbGF0ZVRvQWJzb2x1dGUodHJhbnNCKTsKLQotCSAgaW50IG5ld1ggPSBvcmlnQi54ICsgTWF0aC5hYnModHJhbnNCLnggLSBvcmlnQi54KTsKLQkgIGludCBuZXdZID0gb3JpZ0IueSArIE1hdGguYWJzKHRyYW5zQi55IC0gb3JpZ0IueSk7CSAgCi0JICBSZWN0YW5nbGUgZmluYWxCID0gbmV3IFJlY3RhbmdsZShuZXdYLCBuZXdZLCBvcmlnQi53aWR0aCwgb3JpZ0IuaGVpZ2h0KTsKLQotCSAgcmV0dXJuIGZpbmFsQi5jb250YWlucyhsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBib29sZWFuIGhpdFRlc3RGaWd1cmUoRmlndXJlIHRhcmdldCwgUG9pbnQgbG9jYXRpb24pIHsKLSAgICBSZWN0YW5nbGUgb3JpZ0IgPSB0YXJnZXQuZ2V0Qm91bmRzKCkuZ2V0Q29weSgpOwotICAgIFJlY3RhbmdsZSB0cmFuc0IgPSB0YXJnZXQuZ2V0Qm91bmRzKCkuZ2V0Q29weSgpOwotCi0gICAgdGFyZ2V0LnRyYW5zbGF0ZVRvQWJzb2x1dGUodHJhbnNCKTsKLQotICAgIGludCBuZXdYID0gb3JpZ0IueCArIE1hdGguYWJzKHRyYW5zQi54IC0gb3JpZ0IueCk7Ci0gICAgaW50IG5ld1kgPSBvcmlnQi55ICsgTWF0aC5hYnModHJhbnNCLnkgLSBvcmlnQi55KTsgICAgCi0gICAgUmVjdGFuZ2xlIGZpbmFsQiA9IG5ldyBSZWN0YW5nbGUobmV3WCwgbmV3WSwgb3JpZ0Iud2lkdGgsIG9yaWdCLmhlaWdodCk7Ci0KLSAgICByZXR1cm4gZmluYWxCLmNvbnRhaW5zKGxvY2F0aW9uKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzUmVhZE9ubHkoKSB7Ci0JICBPYmplY3QgbW9kZWwgPSBnZXRNb2RlbCgpOwotCSAgaWYgKG1vZGVsIGluc3RhbmNlb2YgSUFTRE9iamVjdCkgewotCQkgIHJldHVybiAoKElBU0RPYmplY3QpIG1vZGVsKS5pc1JlYWRPbmx5KCk7Ci0JICB9Ci0JICAKLQkgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgZG9PcGVuTmV3RWRpdG9yKCkKLSAgewotICAgIElXb3JrYmVuY2hXaW5kb3cgd29ya2JlbmNoV2luZG93ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKLSAgICBJRWRpdG9yUGFydCBlZGl0b3JQYXJ0ID0gd29ya2JlbmNoV2luZG93LmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLSAgICBBY3Rpb25SZWdpc3RyeSByZWdpc3RyeSA9IChBY3Rpb25SZWdpc3RyeSkgZWRpdG9yUGFydC5nZXRBZGFwdGVyKEFjdGlvblJlZ2lzdHJ5LmNsYXNzKTsKLSAgICBpZiAocmVnaXN0cnkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJQWN0aW9uIGFjdGlvbiA9IHJlZ2lzdHJ5LmdldEFjdGlvbihPcGVuSW5OZXdFZGl0b3IuSUQpOwotICAgICAgYWN0aW9uLnJ1bigpOwotICAgIH0KLSAgfQotIAotICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVFZGl0UG9saWNpZXMoKQotICB7ICAgICAgCi0gICAgS2V5Qm9hcmRBY2Nlc3NpYmlsaXR5RWRpdFBvbGljeSBuYXZpZ2F0aW9uRWRpdFBvbGljeSA9IG5ldyBLZXlCb2FyZEFjY2Vzc2liaWxpdHlFZGl0UG9saWN5KCkKLSAgICB7ICAgICAgICAgICAKLSAgICAgIHB1YmxpYyBFZGl0UGFydCBnZXRSZWxhdGl2ZUVkaXRQYXJ0KEVkaXRQYXJ0IGVkaXRQYXJ0LCBpbnQgZGlyZWN0aW9uKQotICAgICAgeyAgICAgICAgICAKLSAgICAgICAgcmV0dXJuIEJhc2VFZGl0UGFydC50aGlzLmdldFJlbGF0aXZlRWRpdFBhcnQoZGlyZWN0aW9uKTsgICAgICAgICAgICAKLSAgICAgIH0gICAgICAKLSAgICB9OwotICAgIGluc3RhbGxFZGl0UG9saWN5KEtleUJvYXJkQWNjZXNzaWJpbGl0eUVkaXRQb2xpY3kuS0VZLCBuYXZpZ2F0aW9uRWRpdFBvbGljeSk7ICAgIAotICB9Ci0gIAotICBwdWJsaWMgRWRpdFBhcnQgZ2V0UmVsYXRpdmVFZGl0UGFydChpbnQgZGlyZWN0aW9uKQotICB7Ci0gICAgcmV0dXJuIEVkaXRQYXJ0TmF2aWdhdGlvbkhhbmRsZXJVdGlsLmdldFJlbGF0aXZlRWRpdFBhcnQodGhpcywgZGlyZWN0aW9uKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0JpbmRpbmdDb2x1bW5FZGl0UGFydC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0JpbmRpbmdDb2x1bW5FZGl0UGFydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NmRkNzNkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9CaW5kaW5nQ29sdW1uRWRpdFBhcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0czsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5JRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5MYXlvdXRBbmltYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5sYXlvdXRzLkJpbmRpbmdDb2x1bW5MYXlvdXQ7Ci0KLXB1YmxpYyBjbGFzcyBCaW5kaW5nQ29sdW1uRWRpdFBhcnQgZXh0ZW5kcyBDb2x1bW5FZGl0UGFydAotewotICBwcm90ZWN0ZWQgSUZpZ3VyZSBjcmVhdGVGaWd1cmUoKQotICB7Ci0gICAgRmlndXJlIGZpZ3VyZSA9IG5ldyBGaWd1cmUoKTsKLSAgICAvL2ZpZ3VyZS5zZXRPcGFxdWUodHJ1ZSk7Ci0gICAgLy9maWd1cmUuc2V0QmFja2dyb3VuZENvbG9yKENvbG9yQ29uc3RhbnRzLnllbGxvdyk7Ci0gICAgLy8gY3VzdG9tIGxheW91dCB0aGF0IGNhbiBkbyBhbmltYXRpb24KLSAgICAvLwotICAgIEJpbmRpbmdDb2x1bW5MYXlvdXQgbGF5b3V0ID0gbmV3IEJpbmRpbmdDb2x1bW5MYXlvdXQodGhpcyk7Ci0gICAgZmlndXJlLnNldExheW91dE1hbmFnZXIobGF5b3V0KTsKLSAgICByZXR1cm4gZmlndXJlOwotICB9ICAKLSAKLSAgCi0gIAotICBwcm90ZWN0ZWQgdm9pZCByZWdpc3RlcigpCi0gIHsKLSAgICBzdXBlci5yZWdpc3RlcigpOwotICAgIGdldEZpZ3VyZSgpLmFkZExheW91dExpc3RlbmVyKExheW91dEFuaW1hdG9yLmdldERlZmF1bHQoKSk7ICAgIAotICB9Ci0gIAotICBwcm90ZWN0ZWQgdm9pZCB1bnJlZ2lzdGVyKCkKLSAgewotICAgIGdldEZpZ3VyZSgpLnJlbW92ZUxheW91dExpc3RlbmVyKExheW91dEFuaW1hdG9yLmdldERlZmF1bHQoKSk7ICAgCi0gICAgc3VwZXIudW5yZWdpc3RlcigpOwotICB9Ci0gIAotICAvLyB0aGlzIG1ldGhvZCB3aWxsIGV4cGFuZCB0aGUgYmluZGluZyBlZGl0IHBhcnQKLSAgLy8gYW5kIGNvbGxhcHNlIGFueSBvdGhlciBiaW5kaW5ncyBhcyBhcHByb3ByaWF0ZQotICAvL3B1YmxpYyB2b2lkIGV4cGFuZChCaWRpbmdFZGl0UGFydCBiaW5kaW5nRWRpdFBhcnQpCi0gIC8veyAgICAKLSAgLy99Ci0gIAotICBwdWJsaWMgdm9pZCByZWZyZXNoQmluZGluZ0VkaXRQYXJ0cygpCi0gIHsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBnZXRDaGlsZHJlbigpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgewotICAgICAgRWRpdFBhcnQgZWRpdFBhcnQgPSAoRWRpdFBhcnQpaS5uZXh0KCk7Ci0gICAgICBlZGl0UGFydC5yZWZyZXNoKCk7ICAgICAgIAotICAgIH0KLSAgICBnZXRGaWd1cmUoKS5pbnZhbGlkYXRlVHJlZSgpOyAgICAgICAgICAgCi0gICAgZ2V0RmlndXJlKCkucmV2YWxpZGF0ZSgpOyAgICAgCi0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9CaW5kaW5nQ29udGVudEVkaXRQYXJ0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvQmluZGluZ0NvbnRlbnRFZGl0UGFydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3N2Q2MWM1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9CaW5kaW5nQ29udGVudEVkaXRQYXJ0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuQ29sb3JDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuSUZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLk1hcmdpbkJvcmRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuVG9vbGJhckxheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLm1vZGVsLkJpbmRpbmdDb250ZW50UGxhY2VIb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cG9saWNpZXMuQVNEU2VsZWN0aW9uRWRpdFBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklCaW5kaW5nTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklCaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklUcmVlRWxlbWVudDsKLQotLy8gVGhpcyBjbGFzcyBpcyB1c2VkIHRvIHJlcHJlc2VudCBhIEJpbmRpbmdPcGVyYXRpb24sIEJpbmRpbmdJbnB1dCwgQmluZGluZ091dHB1dCBhbmQgQmluZGluZ0ZhdWx0Ci0vLwotcHVibGljIGNsYXNzIEJpbmRpbmdDb250ZW50RWRpdFBhcnQgZXh0ZW5kcyBCYXNlRWRpdFBhcnQKLXsgIAotICBMYWJlbCBsYWJlbDsKLSAgcHJvdGVjdGVkIEFTRFNlbGVjdGlvbkVkaXRQb2xpY3kgc2VsZWN0aW9uSGFuZGxlc0VkaXRQb2xpY3kgPSBuZXcgQVNEU2VsZWN0aW9uRWRpdFBvbGljeSgpOwotICBwcm90ZWN0ZWQgSUZpZ3VyZSBjcmVhdGVGaWd1cmUoKQotICB7Ci0gICAgRmlndXJlIGZpZ3VyZSA9IG5ldyBGaWd1cmUoKTsKLSAgICBmaWd1cmUuc2V0T3BhcXVlKHRydWUpOwotICAgIGZpZ3VyZS5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3JDb25zdGFudHMudG9vbHRpcEJhY2tncm91bmQpOwotICAgIFRvb2xiYXJMYXlvdXQgdG9vbGJhckxheW91dCA9IG5ldyBUb29sYmFyTGF5b3V0KHRydWUpOwotICAgIHRvb2xiYXJMYXlvdXQuc2V0U3RyZXRjaE1pbm9yQXhpcyh0cnVlKTsKLSAgICBmaWd1cmUuc2V0TGF5b3V0TWFuYWdlcih0b29sYmFyTGF5b3V0KTsKLSAgICBsYWJlbCA9IG5ldyBMYWJlbCgpOwotICAgIGxhYmVsLnNldEJvcmRlcihuZXcgTWFyZ2luQm9yZGVyKDUsIDUsIDIsIDIpKTsKLSAgICBmaWd1cmUuYWRkKGxhYmVsKTsKLSAgICAKLSAgICByZXR1cm4gZmlndXJlOwotICB9Ci0gIAotICAKLSAgcHJvdGVjdGVkIExpc3QgZ2V0TW9kZWxDaGlsZHJlbigpCi0gIHsKLSAgICByZXR1cm4gQ29sbGVjdGlvbnMuRU1QVFlfTElTVDsKLSAgfSAgCi0gIAotICBwcm90ZWN0ZWQgdm9pZCByZWZyZXNoVmlzdWFscygpCi0gIHsKLQkgIGlmIChnZXRNb2RlbCgpIGluc3RhbmNlb2YgSUJpbmRpbmdPcGVyYXRpb24pCi0JICB7ICAKLQkJICBJQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gKElCaW5kaW5nT3BlcmF0aW9uKSBnZXRNb2RlbCgpOwotCi0JCSAgaWYgKGJpbmRpbmdPcGVyYXRpb24gaW5zdGFuY2VvZiBJVHJlZUVsZW1lbnQpIHsKLQkJCSAgbGFiZWwuc2V0SWNvbigoKElUcmVlRWxlbWVudCkgYmluZGluZ09wZXJhdGlvbikuZ2V0SW1hZ2UoKSk7Ci0JCSAgfQotLy8JCSAgbGFiZWwuc2V0VGV4dChiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKSk7Ci0JICB9Ci0JICBlbHNlIGlmIChnZXRNb2RlbCgpIGluc3RhbmNlb2YgSUJpbmRpbmdNZXNzYWdlUmVmZXJlbmNlKQotCSAgewotCQkgIGxhYmVsLnNldEljb24oV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEltYWdlKCJpY29ucy9iaW5kX2FzY3RfdmFsX29iai5naWYiKSk7IC8vJE5PTi1OTFMtMSQKLS8vCQkgIGxhYmVsLnNldEljb24obWVzc2FnZVJlZi5nZXRJbWFnZSgpKTsKLS8vCQkgIGxhYmVsLnNldFRleHQobWVzc2FnZVJlZi5nZXROYW1lKCkpOwotCSAgfQotCSAgZWxzZSBpZiAoZ2V0TW9kZWwoKSBpbnN0YW5jZW9mIEJpbmRpbmdDb250ZW50UGxhY2VIb2xkZXIpIHsKLQkJICBsYWJlbC5zZXRJY29uKFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgiaWNvbnMvYmluZF9hc2N0X3ZhbF9ub3Rfb2JqLmdpZiIpKTsgLy8kTk9OLU5MUy0xJAotCSAgfQotCi0JICBzdXBlci5yZWZyZXNoVmlzdWFscygpOyAgICAKLSAgfSAgCi0gIAotICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVFZGl0UG9saWNpZXMoKSB7Ci0gICAgICBzdXBlci5jcmVhdGVFZGl0UG9saWNpZXMoKTsKLQkgIGluc3RhbGxFZGl0UG9saWN5KEVkaXRQb2xpY3kuU0VMRUNUSU9OX0ZFRURCQUNLX1JPTEUsIHNlbGVjdGlvbkhhbmRsZXNFZGl0UG9saWN5KTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgYWRkRmVlZGJhY2soKSB7Ci0JICBsYWJlbC5nZXRQYXJlbnQoKS5zZXRCYWNrZ3JvdW5kQ29sb3IoRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLnRhYmxlQ2VsbFNlbGVjdGlvbkNvbG9yKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlbW92ZUZlZWRiYWNrKCkgewotCSAgbGFiZWwuZ2V0UGFyZW50KCkuc2V0QmFja2dyb3VuZENvbG9yKENvbG9yQ29uc3RhbnRzLnRvb2x0aXBCYWNrZ3JvdW5kKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0JpbmRpbmdFZGl0UGFydC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0JpbmRpbmdFZGl0UGFydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzhkZTUwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9CaW5kaW5nRWRpdFBhcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkNvbG9yQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5JRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTGF5b3V0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTGluZUJvcmRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTWFyZ2luQm9yZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Qb3NpdGlvbkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkxheWVyQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5SZXF1ZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5SZXF1ZXN0Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5lZGl0cGFydHMuQWJzdHJhY3RHcmFwaGljYWxFZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5jb25uZWN0aW9ucy5DZW50ZXJlZENvbm5lY3Rpb25BbmNob3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cG9saWNpZXMuQVNEU2VsZWN0aW9uRWRpdFBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmZpZ3VyZXMuQm94Q29tcG9uZW50RmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZmlndXJlcy5Db21wb25lbnRSZWZlcmVuY2VDb25uZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24ubGF5b3V0cy5CaW5kaW5nQ29sdW1uTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24ubGF5b3V0cy5CaW5kaW5nQ29udGVudExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmxheW91dHMuQmluZGluZ0xheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklCaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklUcmVlRWxlbWVudDsKLQotcHVibGljIGNsYXNzIEJpbmRpbmdFZGl0UGFydCBleHRlbmRzIEJhc2VFZGl0UGFydAotewotICBwcm90ZWN0ZWQgQ29tcG9uZW50UmVmZXJlbmNlQ29ubmVjdGlvbiBjb25uZWN0aW9uRmlndXJlOwotICBwcm90ZWN0ZWQgQm94Q29tcG9uZW50RmlndXJlIGZpZ3VyZTsKLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNFeHBhbmRlZCA9IGZhbHNlOwotICBwcml2YXRlIExhYmVsIGhvdmVySGVscExhYmVsID0gbmV3IExhYmVsKCIiKTsgLy8kTk9OLU5MUy0xJAotCi0gIHByb3RlY3RlZCBJRmlndXJlIGNyZWF0ZUZpZ3VyZSgpCi0gIHsKLSAgICBmaWd1cmUgPSBuZXcgQm94Q29tcG9uZW50RmlndXJlKCk7Ci0gICAgZmlndXJlLmdldExhYmVsKCkuc2V0Qm9yZGVyKG5ldyBNYXJnaW5Cb3JkZXIoMiwgMiwgMSwgMikpOwotICAgIGZpZ3VyZS5zZXRCb3JkZXIobmV3IExpbmVCb3JkZXIoMCkpOwotICAgIGZpZ3VyZS5nZXRDb250ZW50UGFuZSgpLnNldExheW91dE1hbmFnZXIobmV3IEJpbmRpbmdDb250ZW50TGF5b3V0KHRoaXMpKTsKLSAgICBmaWd1cmUuZ2V0Q29udGVudFBhbmUoKS5zZXRPcGFxdWUodHJ1ZSk7Ci0gICAgZmlndXJlLmdldENvbnRlbnRQYW5lKCkuc2V0QmFja2dyb3VuZENvbG9yKENvbG9yQ29uc3RhbnRzLnllbGxvdyk7Ci0gICAgZmlndXJlLnNldExheW91dE1hbmFnZXIobmV3IEJpbmRpbmdMYXlvdXQodGhpcykpOwotICAgIC8vIGlmKGlzU2Nyb2xsYWJsZSgpKQotICAgIC8vIGZpZ3VyZS5zZXRTY3JvbGxpbmdBY3Rpb25MaXN0ZW5lcih0aGlzKTsKLSAgICByZXR1cm4gZmlndXJlOwotICB9Ci0KLSAgcHVibGljIElGaWd1cmUgZ2V0Q29udGVudFBhbmUoKQotICB7Ci0gICAgcmV0dXJuIGZpZ3VyZS5nZXRDb250ZW50UGFuZSgpOwotICB9Ci0KLSAgcHJvdGVjdGVkIExpc3QgZ2V0TW9kZWxDaGlsZHJlbigpCi0gIHsKLSAgICBJQmluZGluZyBiaW5kaW5nID0gKElCaW5kaW5nKSBnZXRNb2RlbCgpOyAgCi0gICAgcmV0dXJuIGlzRXhwYW5kZWQgPyBiaW5kaW5nLmdldEJpbmRpbmdDb250ZW50TGlzdCgpIDogQ29sbGVjdGlvbnMuRU1QVFlfTElTVDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFjdGl2YXRlKCkKLSAgewotICAgIHN1cGVyLmFjdGl2YXRlKCk7Ci0gICAgYWN0aXZhdGVDb25uZWN0aW9uKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBkZWFjdGl2YXRlKCkKLSAgewotICAgIHN1cGVyLmRlYWN0aXZhdGUoKTsKLSAgICBkZWFjdGl2YXRlQ29ubmVjdGlvbigpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgYWRkRmVlZGJhY2soKQotICB7Ci0gICAgc3VwZXIuYWRkRmVlZGJhY2soKTsKLSAgICBMaW5lQm9yZGVyIGJveEZpZ3VyZUxpbmVCb3JkZXIgPSAoTGluZUJvcmRlcikgZmlndXJlLmdldEJvcmRlcigpOwotICAgIGJveEZpZ3VyZUxpbmVCb3JkZXIuc2V0V2lkdGgoMik7Ci0vLyAgICBib3hGaWd1cmVMaW5lQm9yZGVyLnNldENvbG9yKENvbG9yQ29uc3RhbnRzLmRhcmtCbHVlKTsKLSAgICBmaWd1cmUuc2V0U2VsZWN0ZWQodHJ1ZSk7Ci0gICAgZmlndXJlLnJlcGFpbnQoKTsKLSAgICBpZiAoY29ubmVjdGlvbkZpZ3VyZSAhPSBudWxsKQotICAgIHsKLSAgICAgIGNvbm5lY3Rpb25GaWd1cmUuc2V0SGlnaGxpZ2h0KHRydWUpOwotICAgICAgZ2V0TGF5ZXIoTGF5ZXJDb25zdGFudHMuRkVFREJBQ0tfTEFZRVIpLmFkZChjb25uZWN0aW9uRmlndXJlKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZW1vdmVGZWVkYmFjaygpCi0gIHsKLSAgICBzdXBlci5yZW1vdmVGZWVkYmFjaygpOwotICAgIExpbmVCb3JkZXIgYm94RmlndXJlTGluZUJvcmRlciA9IChMaW5lQm9yZGVyKSBmaWd1cmUuZ2V0Qm9yZGVyKCk7Ci0gICAgYm94RmlndXJlTGluZUJvcmRlci5zZXRXaWR0aCgxKTsKLSAgICBib3hGaWd1cmVMaW5lQm9yZGVyLnNldENvbG9yKENvbG9yQ29uc3RhbnRzLmJsYWNrKTsKLSAgICBmaWd1cmUuc2V0U2VsZWN0ZWQoZmFsc2UpOwotICAgIGZpZ3VyZS5yZXBhaW50KCk7Ci0gICAgaWYgKGNvbm5lY3Rpb25GaWd1cmUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBjb25uZWN0aW9uRmlndXJlLnNldEhpZ2hsaWdodChmYWxzZSk7Ci0gICAgICBnZXRMYXllcihMYXllckNvbnN0YW50cy5DT05ORUNUSU9OX0xBWUVSKS5hZGQoY29ubmVjdGlvbkZpZ3VyZSk7Ci0gICAgfQotICB9Ci0KLQotICBwcm90ZWN0ZWQgdm9pZCBhY3RpdmF0ZUNvbm5lY3Rpb24oKQotICB7Ci0gICAgLy8gSWYgYXBwcm9wcmlhdGUsIGNyZWF0ZSBvdXIgY29ubmVjdGlvbkZpZ3VyZSBhbmQgYWRkIGl0IHRvIHRoZSBhcHByb3ByaWF0ZQotICAgIC8vIGxheWVyCi0gICAgaWYgKGNyZWF0ZUNvbm5lY3Rpb25GaWd1cmUoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIEFkZCBvdXIgZWRpdHBvbGljeSBhcyBhIGxpc3RlbmVyIG9uIHRoZSBjb25uZWN0aW9uLCBzbyBpdCBjYW4gc3RheSBpbgotICAgICAgLy8gc3luY2gKLSAgICAgIC8vIGNvbm5lY3Rpb25GaWd1cmUuYWRkUHJvcGVydHlDaGFuZ2VMaXN0ZW5lcigoQXR0cmlidXRlU2VsZWN0aW9uRmVlZGJhY2tQb2xpY3kpCi0gICAgICAvLyBnZXRFZGl0UG9saWN5KEVkaXRQb2xpY3kuU0VMRUNUSU9OX0ZFRURCQUNLX1JPTEUpKTsKLSAgICAgIC8vIGNvbm5lY3Rpb25GaWd1cmUuYWRkTW91c2VMaXN0ZW5lcih0aGlzKTsKLSAgICAgIGdldExheWVyKExheWVyQ29uc3RhbnRzLkNPTk5FQ1RJT05fTEFZRVIpLmFkZChjb25uZWN0aW9uRmlndXJlKTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBkZWFjdGl2YXRlQ29ubmVjdGlvbigpCi0gIHsKLSAgICBpZiAoY29ubmVjdGlvbkZpZ3VyZSAhPSBudWxsKQotICAgIHsKLSAgICAgIGJvb2xlYW4gcmVtb3ZlZCA9IGZhbHNlOwotICAgICAgcmVtb3ZlZCA9IHJlbW92ZUNvbm5lY3Rpb25GaWd1cmUoZ2V0TGF5ZXIoTGF5ZXJDb25zdGFudHMuQ09OTkVDVElPTl9MQVlFUikpOwotICAgICAgaWYgKCFyZW1vdmVkKQotICAgICAgewotICAgICAgICByZW1vdmVDb25uZWN0aW9uRmlndXJlKGdldExheWVyKExheWVyQ29uc3RhbnRzLkZFRURCQUNLX0xBWUVSKSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIAotCi0gIHByaXZhdGUgYm9vbGVhbiByZW1vdmVDb25uZWN0aW9uRmlndXJlKElGaWd1cmUgcGFyZW50KQotICB7Ci0gICAgYm9vbGVhbiBjb250YWlucyA9IGZhbHNlOwotICAgIEl0ZXJhdG9yIGl0ID0gcGFyZW50LmdldENoaWxkcmVuKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIElGaWd1cmUgZmlnID0gKElGaWd1cmUpIGl0Lm5leHQoKTsKLSAgICAgIGlmIChmaWcuZXF1YWxzKGNvbm5lY3Rpb25GaWd1cmUpKQotICAgICAgewotICAgICAgICBjb250YWlucyA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICBpZiAoY29udGFpbnMpCi0gICAgewotICAgICAgcGFyZW50LnJlbW92ZShjb25uZWN0aW9uRmlndXJlKTsKLSAgICB9Ci0gICAgcmV0dXJuIGNvbnRhaW5zOwotICB9Ci0KLSAgcHVibGljIENvbXBvbmVudFJlZmVyZW5jZUNvbm5lY3Rpb24gY3JlYXRlQ29ubmVjdGlvbkZpZ3VyZSgpCi0gIHsKLSAgICBpZiAoY29ubmVjdGlvbkZpZ3VyZSA9PSBudWxsICYmIHNob3VsZERyYXdDb25uZWN0aW9uKCkpCi0gICAgewotICAgICAgSUJpbmRpbmcgYmluZGluZyA9IChJQmluZGluZykgZ2V0TW9kZWwoKTsKLSAgICAgIE9iamVjdCB0eXBlQmVpbmdSZWYgPSBiaW5kaW5nLmdldEludGVyZmFjZSgpOwotICAgICAgaWYgKHR5cGVCZWluZ1JlZiAhPSBudWxsKQotICAgICAgewotICAgICAgICBBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0IHJlZmVyZW5jZVR5cGVQYXJ0ID0gKEFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQpIGdldFZpZXdlcigpLmdldEVkaXRQYXJ0UmVnaXN0cnkoKS5nZXQodHlwZUJlaW5nUmVmKTsKLSAgICAgICAgaWYgKHJlZmVyZW5jZVR5cGVQYXJ0ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBjb25uZWN0aW9uRmlndXJlID0gbmV3IENvbXBvbmVudFJlZmVyZW5jZUNvbm5lY3Rpb24oKTsKLSAgICAgICAgICByZWZyZXNoQ29ubmVjdGlvbnMoKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gY29ubmVjdGlvbkZpZ3VyZTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIHNob3VsZERyYXdDb25uZWN0aW9uKCkKLSAgewotICAgIGlmIChpc0V4cGFuZGVkKQotICAgIHsgIAotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0gIAotICAgIElCaW5kaW5nIGJpbmRpbmcgPSAoSUJpbmRpbmcpIGdldE1vZGVsKCk7Ci0gICAgT2JqZWN0IHR5cGVCZWluZ1JlZiA9IGJpbmRpbmcuZ2V0SW50ZXJmYWNlKCk7Ci0gICAgaWYgKHR5cGVCZWluZ1JlZiAhPSBudWxsKQotICAgIHsKLSAgICAgIEFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQgcmVmZXJlbmNlVHlwZVBhcnQgPSAoQWJzdHJhY3RHcmFwaGljYWxFZGl0UGFydCkgZ2V0Vmlld2VyKCkuZ2V0RWRpdFBhcnRSZWdpc3RyeSgpLmdldCh0eXBlQmVpbmdSZWYpOwotICAgICAgaWYgKHJlZmVyZW5jZVR5cGVQYXJ0ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCByZWZyZXNoVmlzdWFscygpCi0gIHsKLSAgICByZWZyZXNoQ29ubmVjdGlvbnMoKTsKLSAgICBpZiAoZ2V0TW9kZWwoKSBpbnN0YW5jZW9mIElCaW5kaW5nKQotICAgIHsgIAotICAgICAgSUJpbmRpbmcgYmluZGluZyA9IChJQmluZGluZykgZ2V0TW9kZWwoKTsKLSAgICAgICgoQm94Q29tcG9uZW50RmlndXJlKSBnZXRGaWd1cmUoKSkuaGVhZGluZ0ZpZ3VyZS5zZXRJc1JlYWRPbmx5KCgoSUJpbmRpbmcpIGdldE1vZGVsKCkpLmlzUmVhZE9ubHkoKSk7Ci0gICAgICAKLSAgICAgIGlmIChiaW5kaW5nIGluc3RhbmNlb2YgSVRyZWVFbGVtZW50KSB7Ci0gICAgCSAgZmlndXJlLmdldExhYmVsKCkuc2V0SWNvbigoKElUcmVlRWxlbWVudCkgYmluZGluZykuZ2V0SW1hZ2UoKSk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIC8vIFNob3cgdGhlIG5hbWUgb2YgdGhlIElCaW5kaW5nIHdpdGggaG92ZXIgaGVscAotICAgICAgU3RyaW5nIHByZXBlbmRTdHJpbmcgPSBNZXNzYWdlcy5fVUlfTEFCRUxfQklORElORzsKLSAgICAgIGhvdmVySGVscExhYmVsLnNldFRleHQoIiAiICsgcHJlcGVuZFN0cmluZyArICIgOiAiICsgYmluZGluZy5nZXROYW1lKCkgKyAiICIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAotICAgICAgZmlndXJlLnNldFRvb2xUaXAoaG92ZXJIZWxwTGFiZWwpOwotICAgIH0KLQotICAgIC8vZ2V0Vmlld2VyKCkuZ2V0RWRpdFBhcnRSZWdpc3RyeSgpLnB1dChMYXkuY2xhc3MsIGNvbnRyb2xsZXIpOwotICAgIHN1cGVyLnJlZnJlc2hWaXN1YWxzKCk7ICAgIAotICB9Ci0gIAotICBwcm90ZWN0ZWQgQWJzdHJhY3RHcmFwaGljYWxFZGl0UGFydCBnZXRDb25uZWN0aW9uVGFyZ2V0RWRpdFBhcnQoKQotICB7Ci0gICAgSUJpbmRpbmcgYmluZGluZyA9IChJQmluZGluZykgZ2V0TW9kZWwoKTsKLSAgICBPYmplY3QgdHlwZUJlaW5nUmVmID0gYmluZGluZy5nZXRJbnRlcmZhY2UoKTsKLSAgICBpZiAoY29ubmVjdGlvbkZpZ3VyZSAhPSBudWxsKQotICAgIHsKLSAgICAgIEFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQgcmVmZXJlbmNlVHlwZVBhcnQgPSAoQWJzdHJhY3RHcmFwaGljYWxFZGl0UGFydCkgZ2V0Vmlld2VyKCkuZ2V0RWRpdFBhcnRSZWdpc3RyeSgpLmdldCh0eXBlQmVpbmdSZWYpOwotICAgICAgcmV0dXJuIHJlZmVyZW5jZVR5cGVQYXJ0OwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgcmVmcmVzaENvbm5lY3Rpb25zKCkKLSAgewotICAgIGlmIChzaG91bGREcmF3Q29ubmVjdGlvbigpKQotICAgIHsKLSAgICAgIElCaW5kaW5nIGJpbmRpbmcgPSAoSUJpbmRpbmcpIGdldE1vZGVsKCk7Ci0gICAgICBPYmplY3QgdHlwZUJlaW5nUmVmID0gYmluZGluZy5nZXRJbnRlcmZhY2UoKTsKLSAgICAgIGlmIChjb25uZWN0aW9uRmlndXJlICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIEFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQgcmVmZXJlbmNlVHlwZVBhcnQgPSAoQWJzdHJhY3RHcmFwaGljYWxFZGl0UGFydCkgZ2V0Vmlld2VyKCkuZ2V0RWRpdFBhcnRSZWdpc3RyeSgpLmdldCh0eXBlQmVpbmdSZWYpOwotICAgICAgICBJRmlndXJlIHJlZkZpZ3VyZT0gcmVmZXJlbmNlVHlwZVBhcnQuZ2V0RmlndXJlKCk7Ci0gICAgICAgIGNvbm5lY3Rpb25GaWd1cmUuc2V0U291cmNlQW5jaG9yKG5ldyBDZW50ZXJlZENvbm5lY3Rpb25BbmNob3IoZ2V0RmlndXJlKCksIENlbnRlcmVkQ29ubmVjdGlvbkFuY2hvci5SSUdIVCwgMCkpOwotICAgICAgICBjb25uZWN0aW9uRmlndXJlLnNldFRhcmdldEFuY2hvcihuZXcgQ2VudGVyZWRDb25uZWN0aW9uQW5jaG9yKHJlZkZpZ3VyZSwgQ2VudGVyZWRDb25uZWN0aW9uQW5jaG9yLkhFQURFUl9MRUZULCAwLCAxMSkpOwotICAgICAgICBjb25uZWN0aW9uRmlndXJlLnNldEhpZ2hsaWdodChmYWxzZSk7Ci0gICAgICAgIGNvbm5lY3Rpb25GaWd1cmUuc2V0VmlzaWJsZSh0cnVlKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgYWN0aXZhdGVDb25uZWN0aW9uKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKGNvbm5lY3Rpb25GaWd1cmUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBjb25uZWN0aW9uRmlndXJlLnNldFZpc2libGUoZmFsc2UpOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGNyZWF0ZUVkaXRQb2xpY2llcygpCi0gIHsKLSAgICAgc3VwZXIuY3JlYXRlRWRpdFBvbGljaWVzKCk7ICAgIAotICAgICBpbnN0YWxsRWRpdFBvbGljeShFZGl0UG9saWN5LlNFTEVDVElPTl9GRUVEQkFDS19ST0xFLCBuZXcgQVNEU2VsZWN0aW9uRWRpdFBvbGljeSgpKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzRXhwYW5kZWQoKQotICB7Ci0gICAgcmV0dXJuIGlzRXhwYW5kZWQ7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRFeHBhbmRlZChib29sZWFuIGlzRXhwYW5kZWQpCi0gIHsKLSAgICB0aGlzLmlzRXhwYW5kZWQgPSBpc0V4cGFuZGVkOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBwZXJmb3JtUmVxdWVzdChSZXF1ZXN0IHJlcXVlc3QpCi0gIHsgIAotICAgIGlmIChyZXF1ZXN0LmdldFR5cGUoKSA9PSBSZXF1ZXN0Q29uc3RhbnRzLlJFUV9PUEVOKQotICAgIHsgICAgICAgICAgICAgICAgICAgIAotICAgICAgTGF5b3V0TWFuYWdlciBsYXlvdXRNYW5hZ2VyID0gZ2V0RmlndXJlKCkuZ2V0UGFyZW50KCkuZ2V0TGF5b3V0TWFuYWdlcigpOwotICAgICAgaWYgKGxheW91dE1hbmFnZXIgaW5zdGFuY2VvZiBCaW5kaW5nQ29sdW1uTGF5b3V0KQotICAgICAgeyAgICAgICAgICAgICAKLSAgICAgICAgQmluZGluZ0NvbHVtbkxheW91dCBiaW5kaW5nQ29sdW1uTGF5b3V0ID0gKEJpbmRpbmdDb2x1bW5MYXlvdXQpbGF5b3V0TWFuYWdlcjsKLSAgICAgICAgYmluZGluZ0NvbHVtbkxheW91dC5zZXRFeHBhbmRlZCh0aGlzLCAhaXNFeHBhbmRlZCk7Ci0gICAgICAgICgoQmluZGluZ0NvbHVtbkVkaXRQYXJ0KWdldFBhcmVudCgpKS5yZWZyZXNoQmluZGluZ0VkaXRQYXJ0cygpOwotICAgICAgfSAgCi0gICAgfQotICB9IAotICAKLSAgcHVibGljIEVkaXRQYXJ0IGdldFJlbGF0aXZlRWRpdFBhcnQoaW50IGRpcmVjdGlvbikKLSAgewotICAgIGlmIChkaXJlY3Rpb24gPT0gUG9zaXRpb25Db25zdGFudHMuRUFTVCkKLSAgICB7Ci0gICAgICAvLyBuYXZpZ2F0ZSBmb3J3YXJkIGFsb25nIHRoZSBjb25uZWN0aW9uICh0byB0aGUgcmlnaHQpCi0gICAgICByZXR1cm4gZ2V0Q29ubmVjdGlvblRhcmdldEVkaXRQYXJ0KCk7Ci0gICAgfSAgCi0gICAgZWxzZSBpZiAoZGlyZWN0aW9uID09IFBvc2l0aW9uQ29uc3RhbnRzLldFU1QpCi0gICAgewotICAgICAgLy8gbmF2aWdhdGUgYmFja3dhcmQgYWxvbmcgdGhlIGNvbm5lY3Rpb24gKHRvIHRoZSBsZWZ0KQotICAgICAgcmV0dXJuIEVkaXRQYXJ0TmF2aWdhdGlvbkhhbmRsZXJVdGlsLmdldFNvdXJjZUNvbm5lY3Rpb25FZGl0UGFydCh0aGlzKTsKLSAgICB9ICAgICAgCi0gICAgcmV0dXJuIHN1cGVyLmdldFJlbGF0aXZlRWRpdFBhcnQoZGlyZWN0aW9uKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0NvbHVtbkVkaXRQYXJ0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvQ29sdW1uRWRpdFBhcnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGI0YmYzYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvQ29sdW1uRWRpdFBhcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0czsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5JRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Ub29sYmFyTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLm1vZGVsLkFic3RyYWN0TW9kZWxDb2xsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSURlc2NyaXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgQ29sdW1uRWRpdFBhcnQgZXh0ZW5kcyBCYXNlRWRpdFBhcnQKLXsgICAKLSAgcHJvdGVjdGVkIElGaWd1cmUgY3JlYXRlRmlndXJlKCkKLSAgewotICAgIEZpZ3VyZSBmaWd1cmUgPSBuZXcgRmlndXJlKCk7Ci0gICAgVG9vbGJhckxheW91dCBsYXlvdXQgPSBuZXcgVG9vbGJhckxheW91dChmYWxzZSk7Ci0gICAgbGF5b3V0LnNldFN0cmV0Y2hNaW5vckF4aXMoZmFsc2UpOwotICAgIGxheW91dC5zZXRTcGFjaW5nKDIwKTsKLSAgICBmaWd1cmUuc2V0TGF5b3V0TWFuYWdlcihsYXlvdXQpOwotICAgIHJldHVybiBmaWd1cmU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJRGVzY3JpcHRpb24gZ2V0RGVzY3JpcHRpb24oKQotICB7Ci0gICAgcmV0dXJuIChJRGVzY3JpcHRpb24pZ2V0TW9kZWwoKTsgICAKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGNyZWF0ZUVkaXRQb2xpY2llcygpCi0gIHsKLSAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0Jc3VwZXIuY3JlYXRlRWRpdFBvbGljaWVzKCk7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBMaXN0IGdldE1vZGVsQ2hpbGRyZW4oKQotICB7IAotICAgIEFic3RyYWN0TW9kZWxDb2xsZWN0aW9uIGNvbGxlY3Rpb24gPSAoQWJzdHJhY3RNb2RlbENvbGxlY3Rpb24pZ2V0TW9kZWwoKTsKLSAgICBPYmplY3QgY2hpbGRyZW5bXSA9IGNvbGxlY3Rpb24uZ2V0Q2hpbGRyZW4oKTsKLSAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGNoaWxkcmVuLmxlbmd0aDsgaW5kZXgrKykgewotICAgIAlsaXN0LmFkZChjaGlsZHJlbltpbmRleF0pOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbGlzdDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgYWRkRmVlZGJhY2soKSB7Ci0JICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgcmVtb3ZlRmVlZGJhY2soKSB7Ci0JICAKLSAgfQotfQotCi0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0RlZmluaXRpb25zRWRpdFBhcnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9EZWZpbml0aW9uc0VkaXRQYXJ0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3MjI3YzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0RlZmluaXRpb25zRWRpdFBhcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5JRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTGF5b3V0TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLk1hcmdpbkJvcmRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuUGFuZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLlRvb2xiYXJMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5lZGl0cGFydHMuQWJzdHJhY3RHcmFwaGljYWxFZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMubW9kZWwuQWJzdHJhY3RNb2RlbENvbGxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMubW9kZWwuQmluZGluZ0NvbHVtbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5tb2RlbC5JbnRlcmZhY2VDb2x1bW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMubW9kZWwuU2VydmljZUNvbHVtbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklEZXNjcmlwdGlvbjsKLQotcHVibGljIGNsYXNzIERlZmluaXRpb25zRWRpdFBhcnQgZXh0ZW5kcyBCYXNlRWRpdFBhcnQgewotCSAgTGlzdCBjb2xsZWN0aW9ucyA9IG51bGw7Ci0JICBGaWd1cmUgY29udGVudFBhbmU7Ci0gICAgICBMYWJlbCBtZXNzYWdlTGFiZWw7IAotICAgICAgSW50ZXJuYWxMYXlvdXRMaXN0ZW5lciBpbnRlcm5hbExheW91dExpc3RlbmVyID0gbmV3IEludGVybmFsTGF5b3V0TGlzdGVuZXIoKTsKLQkgIAotCSAgcHJvdGVjdGVkIElGaWd1cmUgY3JlYXRlRmlndXJlKCkKLQkgIHsgICAgCi0JICAgIFBhbmVsIHBhbmVsID0gbmV3IFBhbmVsKCk7ICAgIAotICAgICAgICBUb29sYmFyTGF5b3V0IHRvb2xiYXJMYXlvdXQgPSBuZXcgVG9vbGJhckxheW91dCh0cnVlKTsKLSAgICAgICAgcGFuZWwuc2V0TGF5b3V0TWFuYWdlcih0b29sYmFyTGF5b3V0KTsKLSAgICAgICAgcGFuZWwuc2V0Qm9yZGVyKG5ldyBNYXJnaW5Cb3JkZXIoNjAsIDMwLCAzMCwgMzApKTsKLQkgICAgY29udGVudFBhbmUgPSBuZXcgRmlndXJlKCk7Ci0JICAgIHBhbmVsLmFkZChjb250ZW50UGFuZSk7Ci0KLSAgICAgICAgbWVzc2FnZUxhYmVsID0gbmV3IExhYmVsKCIiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICBjb250ZW50UGFuZS5hZGQobWVzc2FnZUxhYmVsKTsKLSAgICAgIAotCSAgICBUb29sYmFyTGF5b3V0IGxheW91dCA9IG5ldyBUb29sYmFyTGF5b3V0KHRydWUpOwotCSAgICBsYXlvdXQuc2V0U3RyZXRjaE1pbm9yQXhpcyh0cnVlKTsKLQkgICAgbGF5b3V0LnNldFNwYWNpbmcoMCk7Ci0JICAgIGNvbnRlbnRQYW5lLnNldExheW91dE1hbmFnZXIobGF5b3V0KTsKLQkgICAgcmV0dXJuIHBhbmVsOwotCSAgfQotCSAgCi0gICAgICBwdWJsaWMgdm9pZCBhY3RpdmF0ZSgpCi0gICAgICB7Ci0gICAgICAgIHN1cGVyLmFjdGl2YXRlKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBoZXJlIHdlIHdhbnQgdG8gZW5zdXJlIHRoZSBiaW5kaW5nIGNvbHVtbiBpcyBsaXN0ZW5pbmcKLSAgICAgICAgLy8gdG8gdGhlIGludGVyZmFjZSBjb2x1bW4gc28gdGhhdCBpdCBjYW4gcmUtbGF5b3V0IHdoZW4gCi0gICAgICAgIC8vIHRoZSBpbnRlcmZhY2UgY2hhbmdlcwotICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBnZXRDaGlsZHJlbigpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICAgIHsKLSAgICAgICAgICBBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0IGNoaWxkID0gKEFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQpaS5uZXh0KCk7Ci0gICAgICAgICAgaWYgKGNoaWxkLmdldE1vZGVsKCkgaW5zdGFuY2VvZiBJbnRlcmZhY2VDb2x1bW4pCi0gICAgICAgICAgewotICAgICAgICAgICAgY2hpbGQuZ2V0RmlndXJlKCkuYWRkTGF5b3V0TGlzdGVuZXIoaW50ZXJuYWxMYXlvdXRMaXN0ZW5lcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9ICAKLSAgICAgICAgfSAgICAgICAgICAgCi0gICAgICB9Ci0gICAgICAgICAgICAgICAgCi0JICBwdWJsaWMgdm9pZCByZWZyZXNoKCkgewotCQkgIHN1cGVyLnJlZnJlc2goKTsKLQkJICAKLQkJICAvLyBSZWZyZXNoIHRoZSBjb25uZWN0aW5nIGxpbmVzCi0JCSAgcmVmcmVzaENvbm5lY3Rpb25zKCk7Ci0JICB9Ci0JICAKLQkgIHB1YmxpYyBJRmlndXJlIGdldENvbnRlbnRQYW5lKCkKLQkgIHsKLQkgICAgcmV0dXJuIGNvbnRlbnRQYW5lOwotCSAgfQotCSAgCi0KLQkgIHByb3RlY3RlZCB2b2lkIGNyZWF0ZUVkaXRQb2xpY2llcygpCi0JICB7Ci0JICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQkJc3VwZXIuY3JlYXRlRWRpdFBvbGljaWVzKCk7Ci0JICB9Ci0JICAKLSAgICAgIHB1YmxpYyB2b2lkIHNldE1vZGVsQ2hpbGRyZW4oTGlzdCBsaXN0KQotICAgICAgewotICAgICAgICBjb2xsZWN0aW9ucyA9IGxpc3Q7Ci0gICAgICB9Ci0gICAgICAKLQkgIHByb3RlY3RlZCBMaXN0IGdldE1vZGVsQ2hpbGRyZW4oKQotCSAgeyAKLQkgICAgaWYgKGNvbGxlY3Rpb25zID09IG51bGwpCi0JICAgIHsKLQkgICAgICBjb2xsZWN0aW9ucyA9IG5ldyBBcnJheUxpc3QoKTsKLQkgICAgICAKLQkgICAgICBJRGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSAoSURlc2NyaXB0aW9uKSBnZXRNb2RlbCgpOwotCSAgICAgIGlmIChkZXNjcmlwdGlvbiAhPSBudWxsKQotCSAgICAgIHsgIAotCSAgICAgICAgY29sbGVjdGlvbnMuYWRkKG5ldyBTZXJ2aWNlQ29sdW1uKGRlc2NyaXB0aW9uKSk7Ci0JICAgICAgICBjb2xsZWN0aW9ucy5hZGQobmV3IEJpbmRpbmdDb2x1bW4oZGVzY3JpcHRpb24pKTsKLQkgICAgICAgIGNvbGxlY3Rpb25zLmFkZChuZXcgSW50ZXJmYWNlQ29sdW1uKGRlc2NyaXB0aW9uKSk7Ci0JICAgICAgfQotCSAgICB9Ci0gICAgICAKLSAgICAgIGJvb2xlYW4gaGFzQ2hpbGRyZW4gPSBmYWxzZTsKLSAgICAgIGZvciAoSXRlcmF0b3IgaSA9IGNvbGxlY3Rpb25zLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICB7Ci0gICAgICAgIEFic3RyYWN0TW9kZWxDb2xsZWN0aW9uIGNvbHVtbiA9IChBYnN0cmFjdE1vZGVsQ29sbGVjdGlvbilpLm5leHQoKTsKLSAgICAgICAgaWYgKGNvbHVtbi5oYXNDaGlsZHJlbigpKQotICAgICAgICB7Ci0gICAgICAgICAgaGFzQ2hpbGRyZW4gPSB0cnVlOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmIChoYXNDaGlsZHJlbikKLSAgICAgIHsKLSAgICAgICAgbWVzc2FnZUxhYmVsLnNldFRleHQoIiIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgIGlmIChjb250ZW50UGFuZS5nZXRDaGlsZHJlbigpLmNvbnRhaW5zKG1lc3NhZ2VMYWJlbCkpCi0gICAgICAgICAgY29udGVudFBhbmUucmVtb3ZlKG1lc3NhZ2VMYWJlbCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIG1lc3NhZ2VMYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLl9VSV9MQUJFTF9SSUdIVF9DTElDS19UT19JTlNFUlRfQ09OVEVOVCk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgaWYgKCFjb250ZW50UGFuZS5nZXRDaGlsZHJlbigpLmNvbnRhaW5zKG1lc3NhZ2VMYWJlbCkpCi0gICAgICAgICAgY29udGVudFBhbmUuYWRkKG1lc3NhZ2VMYWJlbCk7Ci0gICAgICB9Ci0gICAgICAKLQotCSAgICByZXR1cm4gY29sbGVjdGlvbnM7Ci0JICB9Ci0JICAKLQkgIHB1YmxpYyB2b2lkIHNldElucHV0KE9iamVjdCBvYmplY3QpCi0JICB7ICAgIAotCSAgfQkgCi0gICAgICAKLSAgICAgIHByaXZhdGUgY2xhc3MgSW50ZXJuYWxMYXlvdXRMaXN0ZW5lciBleHRlbmRzIExheW91dExpc3RlbmVyLlN0dWIKLSAgICAgIHsKLSAgICAgICAgcHVibGljIHZvaWQgcG9zdExheW91dChJRmlndXJlIGNvbnRhaW5lcikKLSAgICAgICAgewotICAgICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IGdldENoaWxkcmVuKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBFZGl0UGFydCBjaGlsZCA9IChFZGl0UGFydClpLm5leHQoKTsKLSAgICAgICAgICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIEJpbmRpbmdDb2x1bW5FZGl0UGFydCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgKChCaW5kaW5nQ29sdW1uRWRpdFBhcnQpY2hpbGQpLnJlZnJlc2hCaW5kaW5nRWRpdFBhcnRzKCk7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0gICAgICAgICAgCi0gICAgICAgIH0gICAKLSAgICAgIH0gICAgICAgIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0VkaXRQYXJ0TmF2aWdhdGlvbkhhbmRsZXJVdGlsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvRWRpdFBhcnROYXZpZ2F0aW9uSGFuZGxlclV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBlYmRkZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvRWRpdFBhcnROYXZpZ2F0aW9uSGFuZGxlclV0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHM7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Db25uZWN0aW9uQW5jaG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5GaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLklGaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLlBvc2l0aW9uQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUmVjdGFuZ2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBhcnRWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkdyYXBoaWNhbEVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5MYXllckNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuZWRpdHBhcnRzLkFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmVkaXRwYXJ0cy5MYXllck1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5maWd1cmVzLkNvbXBvbmVudFJlZmVyZW5jZUNvbm5lY3Rpb247Ci0KLQotY2xhc3MgRWRpdFBhcnROYXZpZ2F0aW9uSGFuZGxlclV0aWwKLXsKLSAgc3RhdGljIEdyYXBoaWNhbEVkaXRQYXJ0IGdldFJlbGF0aXZlRWRpdFBhcnQoR3JhcGhpY2FsRWRpdFBhcnQgZm9jdXNFZGl0UGFydCwgaW50IGRpcmVjdGlvbikKLSAgewotICAgIC8vIHRoZXNlICdkZWx0YScgdmFsdWVzIG5lZWQgdG8gYmUgc2V0IHRvIHNvbWUgdmFsdWUgdGhhdCdzIGxhcmdlIGVub3VnaCB0byBjcm9zcyB0aGUgZ2FwCi0gICAgLy8gYmV0d2VlbiBhZGphY2VudCBlZGl0IHBhcnRzIChzaW5jZSBzb21lIGxheW91dHMgbWF5IHNwYWNlIHRoZSBlZGl0IHBhcnRzIG91dCBhIGJpdCkKLSAgICBpbnQgZHggPSA1OwotICAgIGludCBkeSA9IDU7Ci0gICAgICAgIAotICAgIElGaWd1cmUgY29udGVudFBhbmUgPSBmb2N1c0VkaXRQYXJ0LmdldENvbnRlbnRQYW5lKCk7Ci0gICAgCi0gICAgLy8gd2UgYXR0ZW1wdCB0byBjb21wdXRlIGEgcmVjdGFuZ2xlIHRoYXQgcmVwcmVzZW50cyBvdXIgY3VycmVudCBsb2NhdGlvbgotICAgIFJlY3RhbmdsZSByID0gZm9jdXNFZGl0UGFydC5nZXRGaWd1cmUoKS5nZXRCb3VuZHMoKS5nZXRDb3B5KCk7Ci0gICAgZm9jdXNFZGl0UGFydC5nZXRGaWd1cmUoKS50cmFuc2xhdGVUb0Fic29sdXRlKHIpOwotICAgIGlmIChjb250ZW50UGFuZSAhPSBmb2N1c0VkaXRQYXJ0LmdldEZpZ3VyZSgpKQotICAgIHsKLSAgICAgIC8vIGlmIHRoZSBFZGl0UGFydCBoYXMgYSBjb250ZW50UGFuZSAodGhhdCdzIG5vIHRoZSBmaWd1cmUpIHRoZW4gd2UgYXNzdW1lCi0gICAgICAvLyBlZmZlY3RpdmUgcmVjdGFuZ2xlIGlzIG9ubHkgdGhlIGhlYWRlciBwb3J0aW9uIG9mIHRoZSBmaWd1cmUKLSAgICAgIC8vCi0gICAgICBSZWN0YW5nbGUgY29udGVudFBhbmVCb3VuZHMgPSBjb250ZW50UGFuZS5nZXRCb3VuZHMoKS5nZXRDb3B5KCk7Ci0gICAgICBjb250ZW50UGFuZS50cmFuc2xhdGVUb0Fic29sdXRlKGNvbnRlbnRQYW5lQm91bmRzKTsKLSAgICAgIAotICAgICAgLy8gd2UgYXNzdW1lIHRoYXQgd2hlbiB0aGUgZWRpdHBhcnQncyBmaWd1cmUgYW5kIGNvbnRlbnRQYW5lIGFyZSBkaWZmZXJlbnQKLSAgICAgIC8vIHRoYXQgcG9ydGlvbiBvZiB0aGUgJ2hpdHRhYmxlJyBwb3J0aW9uIG9mIGVkaXRwYXJ0IHNob3VsZCBub3QgaW5jbHVkZSB0aGUgY29udGVudFBhbmUKLSAgICAgIGlmIChjb250ZW50UGFuZUJvdW5kcy55ID4gci55KQotICAgICAgewotICAgICAgICAvLyBpZiB0aGUgY29udGVudFBhbmUgaXMgbG93ZXIgdGhhbiB0aGUgZmlndXJlIHdlIG9ubHkgd2FudCB0aGUgcmVjdGFuZ2xlCi0gICAgICAgIC8vIGFib3ZlIHRoZSBjb250ZW50UGFuZQotICAgICAgICByLmhlaWdodCA9IGNvbnRlbnRQYW5lQm91bmRzLnkgLSByLnk7Ci0gICAgICAgIC8vIHdlIGFkanVzdCB0aGUgcmVjdGFuZ2xlIHRoZSByaWdodCBzbGlnaHRseSBzaW5jZSB0aGUgY29udGVudCBpcyBuZXN0ZWQgYSBiaXQgICAgIAotICAgICAgICByLnggPSBjb250ZW50UGFuZUJvdW5kcy54OwotICAgICAgfQotICAgICAgaWYgKGNvbnRlbnRQYW5lQm91bmRzLnggPiByLngpCi0gICAgICB7Ci0gICAgICAgIC8vIGlmIHRoZSBjb250ZW50UGFuZSBpcyB0byB0aGUgcmlnaHQgb2YgdGhlIGZpZ3VyZSB3ZSBvbmx5IHdhbnQgdGhlIHJlY3RhbmdsZQotICAgICAgICAvLyB0byB0aGUgbGVmdCBvZiB0aGUgY29udGVudCBwYW5lCi0gICAgICAgIHIud2lkdGggPSBjb250ZW50UGFuZUJvdW5kcy54IC0gci54OwotICAgICAgfQotICAgIH0KLSAgICBQb2ludCBwID0gbnVsbDsKLSAgICBpZiAoZGlyZWN0aW9uID09IFBvc2l0aW9uQ29uc3RhbnRzLk5PUlRIKQotICAgIHsKLSAgICAgIHAgPSByLmdldFRvcExlZnQoKTsKLSAgICAgIHAueSAtPSBkeTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZGlyZWN0aW9uID09IFBvc2l0aW9uQ29uc3RhbnRzLlNPVVRIKQotICAgIHsKLSAgICAgIHAgPSByLmdldEJvdHRvbUxlZnQoKTsKLSAgICAgIHAueCArPSBkeDsKLSAgICAgIHAueSArPSBkeTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZGlyZWN0aW9uID09IFBvc2l0aW9uQ29uc3RhbnRzLkVBU1QpCi0gICAgewotICAgICAgcCA9IHIuZ2V0VG9wUmlnaHQoKTsKLSAgICAgIHAueCArPSBkeDsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZGlyZWN0aW9uID09IFBvc2l0aW9uQ29uc3RhbnRzLldFU1QpCi0gICAgewotICAgICAgcCA9IHIuZ2V0TGVmdCgpOwotICAgICAgcC54IC09IGR4OwotICAgIH0gIAotICAgIEVkaXRQYXJ0IHQgPSBmb2N1c0VkaXRQYXJ0LmdldFZpZXdlcigpLmZpbmRPYmplY3RBdChwKTsKLSAgICAgICAgCi0gICAgaWYgKHQgaW5zdGFuY2VvZiBDb2x1bW5FZGl0UGFydCB8fCB0IGluc3RhbmNlb2YgRGVmaW5pdGlvbnNFZGl0UGFydCkKLSAgICB7Ci0gICAgICB0ID0gZm9jdXNFZGl0UGFydDsKLSAgICAgIHdoaWxlICgodCBpbnN0YW5jZW9mIENvbHVtbkVkaXRQYXJ0IHx8IHQgaW5zdGFuY2VvZiBEZWZpbml0aW9uc0VkaXRQYXJ0KSAmJiB0LmdldENoaWxkcmVuKCkuc2l6ZSgpID4gMCkKLSAgICAgIHsKLSAgICAJICB0ID0gKEVkaXRQYXJ0KSB0LmdldENoaWxkcmVuKCkuZ2V0KDApOwotICAgICAgfQotICAgIH0gICAgICAKLSAgICByZXR1cm4gKEdyYXBoaWNhbEVkaXRQYXJ0KXQ7Ci0gIH0KLSAgCi0gIHN0YXRpYyBFZGl0UGFydCBnZXROZXh0U2libGluZyhFZGl0UGFydCBlZGl0UGFydCkKLSAgeyAgICAKLSAgICBFZGl0UGFydCByZXN1bHQgPSBudWxsOyAgICAKLSAgICBFZGl0UGFydCBwYXJlbnQgPSBlZGl0UGFydC5nZXRQYXJlbnQoKTsKLSAgICBpZiAocGFyZW50ICE9IG51bGwpCi0gICAgeyAgCi0gICAgICBMaXN0IGNoaWxkcmVuID0gcGFyZW50LmdldENoaWxkcmVuKCk7Ci0gICAgICBpbnQgaW5kZXggPSBjaGlsZHJlbi5pbmRleE9mKGVkaXRQYXJ0KTsKLSAgICAgIGlmIChpbmRleCArIDEgPCBjaGlsZHJlbi5zaXplKCkpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IChFZGl0UGFydCljaGlsZHJlbi5nZXQoaW5kZXggKyAxKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotICAKLSAgc3RhdGljIEVkaXRQYXJ0IGdldFByZXZTaWJsaW5nKEVkaXRQYXJ0IGVkaXRQYXJ0KQotICB7ICAgIAotICAgIEVkaXRQYXJ0IHJlc3VsdCA9IG51bGw7Ci0gICAgRWRpdFBhcnQgcGFyZW50ID0gZWRpdFBhcnQuZ2V0UGFyZW50KCk7Ci0gICAgaWYgKHBhcmVudCAhPSBudWxsKQotICAgIHsgIAotICAgICAgTGlzdCBjaGlsZHJlbiA9IHBhcmVudC5nZXRDaGlsZHJlbigpOwotICAgICAgaW50IGluZGV4ID0gY2hpbGRyZW4uaW5kZXhPZihlZGl0UGFydCk7Ci0gICAgICBpZiAoaW5kZXggLSAxID49IDApCi0gICAgICB7Ci0gICAgICAgIC8vIGlmIHRoaXMgaXMgdGhlIGZpcnN0IGNoaWxkCi0gICAgICAgIC8vICAgICAgICAKLSAgICAgICAgcmVzdWx0ID0gKEVkaXRQYXJ0KWNoaWxkcmVuLmdldChpbmRleCAtIDEpOwotICAgICAgfSAKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfSAKLSAgCi0gIHN0YXRpYyBFZGl0UGFydCBnZXROZXh0SW50ZXJmYWNlKEVkaXRQYXJ0IGVkaXRQYXJ0KQotICB7IAotICAgIEVkaXRQYXJ0IHJlc3VsdCA9IG51bGw7Ci0gICAgZm9yIChFZGl0UGFydCBlID0gZWRpdFBhcnQ7IGUgIT0gbnVsbDsgZSA9IGUuZ2V0UGFyZW50KCkpCi0gICAgewotICAgICAgaWYgKGUgaW5zdGFuY2VvZiBJbnRlcmZhY2VFZGl0UGFydCkKLSAgICAgIHsKLSAgICAgICAgSW50ZXJmYWNlRWRpdFBhcnQgaWUgPSAoSW50ZXJmYWNlRWRpdFBhcnQpZTsKLSAgICAgICAgcmVzdWx0ID0gRWRpdFBhcnROYXZpZ2F0aW9uSGFuZGxlclV0aWwuZ2V0TmV4dFNpYmxpbmcoaWUpOwotICAgICAgICBicmVhazsKLSAgICAgIH0gIAotICAgIH0gIAotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0gICAgICAgICAgCi0gIAotICBzdGF0aWMgRWRpdFBhcnQgZ2V0TmV4dFNlcnZpY2UoRWRpdFBhcnQgZWRpdFBhcnQpCi0gIHsKLSAgICBFZGl0UGFydCByZXN1bHQgPSBudWxsOwotICAgIGZvciAoRWRpdFBhcnQgZSA9IGVkaXRQYXJ0OyBlICE9IG51bGw7IGUgPSBlLmdldFBhcmVudCgpKQotICAgIHsKLSAgICAgIGlmIChlIGluc3RhbmNlb2YgU2VydmljZUVkaXRQYXJ0KQotICAgICAgewotICAgICAgICBTZXJ2aWNlRWRpdFBhcnQgaWUgPSAoU2VydmljZUVkaXRQYXJ0KWU7Ci0gICAgICAgIHJlc3VsdCA9IEVkaXRQYXJ0TmF2aWdhdGlvbkhhbmRsZXJVdGlsLmdldE5leHRTaWJsaW5nKGllKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9ICAKLSAgICB9ICAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0gIAotICBzdGF0aWMgRWRpdFBhcnQgZ2V0U291cmNlQ29ubmVjdGlvbkVkaXRQYXJ0KEFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQgZWRpdFBhcnQpCi0gIHsKLSAgICAvLyBmaW5kIHRoZSBmaXJzdCBjb25uZWN0aW9uIHRoYXQgdGFyZ2V0cyB0aGlzIGVkaXRQYXJ0Ci0gICAgLy8gbmF2aWdhdGUgYmFja3dhcmQgYWxvbmcgdGhlIGNvbm5lY3Rpb24gKHRvIHRoZSBsZWZ0KSB0byBmaW5kIHRoZSBzb3VyYyBlZGl0IHBhcnQKLSAgICBFZGl0UGFydCByZXN1bHQgPSBudWxsOwotICAgIEVkaXRQYXJ0Vmlld2VyIHZpZXdlciA9IGVkaXRQYXJ0LmdldFZpZXdlcigpOwotICAgIExheWVyTWFuYWdlciBtYW5hZ2VyID0gKExheWVyTWFuYWdlcillZGl0UGFydC5nZXRWaWV3ZXIoKS5nZXRFZGl0UGFydFJlZ2lzdHJ5KCkuZ2V0KExheWVyTWFuYWdlci5JRCk7Ci0gICAgSUZpZ3VyZSBsYXllciA9IG1hbmFnZXIuZ2V0TGF5ZXIoTGF5ZXJDb25zdGFudHMuQ09OTkVDVElPTl9MQVlFUik7ICAgIAotICAgIGZvciAoSXRlcmF0b3IgaSA9IGxheWVyLmdldENoaWxkcmVuKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICB7Ci0gICAgICBGaWd1cmUgZmlndXJlID0gKEZpZ3VyZSlpLm5leHQoKTsKLSAgICAgIGlmIChmaWd1cmUgaW5zdGFuY2VvZiBDb21wb25lbnRSZWZlcmVuY2VDb25uZWN0aW9uKQotICAgICAgewotICAgICAgICBDb21wb25lbnRSZWZlcmVuY2VDb25uZWN0aW9uIGNvbXBvbmVudFJlZmVyZW5jZUNvbm5lY3Rpb24gPSAoQ29tcG9uZW50UmVmZXJlbmNlQ29ubmVjdGlvbilmaWd1cmU7Ci0gICAgICAgIENvbm5lY3Rpb25BbmNob3IgdGFyZ2V0QW5jaG9yID0gY29tcG9uZW50UmVmZXJlbmNlQ29ubmVjdGlvbi5nZXRUYXJnZXRBbmNob3IoKTsKLSAgICAgICAgaWYgKHRhcmdldEFuY2hvci5nZXRPd25lcigpID09IGVkaXRQYXJ0LmdldEZpZ3VyZSgpKQotICAgICAgICB7ICAKLSAgICAgICAgICBDb25uZWN0aW9uQW5jaG9yIHNvdXJjZUFuY2hvciA9IGNvbXBvbmVudFJlZmVyZW5jZUNvbm5lY3Rpb24uZ2V0U291cmNlQW5jaG9yKCk7Ci0gICAgICAgICAgSUZpZ3VyZSBzb3VyY2VGaWd1cmUgPSBzb3VyY2VBbmNob3IuZ2V0T3duZXIoKTsgICAgICAgICAgCi0gICAgICAgICAgRWRpdFBhcnQgcGFydCA9IG51bGw7Ci0gICAgICAgICAgd2hpbGUgKHBhcnQgPT0gbnVsbCAmJiBzb3VyY2VGaWd1cmUgIT0gbnVsbCkgCi0gICAgICAgICAgewotICAgICAgICAgICAgcGFydCA9IChFZGl0UGFydCl2aWV3ZXIuZ2V0VmlzdWFsUGFydE1hcCgpLmdldChzb3VyY2VGaWd1cmUpOwotICAgICAgICAgICAgc291cmNlRmlndXJlID0gc291cmNlRmlndXJlLmdldFBhcmVudCgpOwotICAgICAgICAgIH0gICAgICAgICAgCi0gICAgICAgICAgcmVzdWx0ID0gcGFydDsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfSAgCi0gICAgICB9ICAgICAgICAgICAgICAgIAotICAgIH0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsgICAgCi0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9FbmRQb2ludEVkaXRQYXJ0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvRW5kUG9pbnRFZGl0UGFydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDc1OGU5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9FbmRQb2ludEVkaXRQYXJ0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzODUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkNvbG9yQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5GaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkZpZ3VyZUNhbnZhczsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuSUZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLk1hcmdpbkJvcmRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuUGFuZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLlBvc2l0aW9uQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5SZWN0YW5nbGVGaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLlRvb2xiYXJMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LkRpbWVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LlJlY3RhbmdsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5HcmFwaGljYWxWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkxheWVyQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5SZXF1ZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5SZXF1ZXN0Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5lZGl0cGFydHMuQWJzdHJhY3RHcmFwaGljYWxFZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYudG9vbHMuRGlyZWN0RWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTREVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNETXVsdGlQYWdlRWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uY29ubmVjdGlvbnMuQ2VudGVyZWRDb25uZWN0aW9uQW5jaG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZGlyZWN0ZWRpdC5MYWJlbENlbGxFZGl0b3JMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZGlyZWN0ZWRpdC5MYWJlbEVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBvbGljaWVzLkFTRExhYmVsRGlyZWN0RWRpdFBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwb2xpY2llcy5BU0RTZWxlY3Rpb25FZGl0UG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZmlndXJlcy5Db21wb25lbnRSZWZlcmVuY2VDb25uZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUVuZFBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklUcmVlRWxlbWVudDsKLQotcHVibGljIGNsYXNzIEVuZFBvaW50RWRpdFBhcnQgZXh0ZW5kcyBCYXNlRWRpdFBhcnQgaW1wbGVtZW50cyBJRmVlZGJhY2tIYW5kbGVyLCBJTmFtZWRFZGl0UGFydAotewotICBwcm90ZWN0ZWQgTGFiZWwgbmFtZUxhYmVsOwotICBwcm90ZWN0ZWQgTGFiZWwgYWRkcmVzc0xhYmVsOwotICBwcml2YXRlIExhYmVsIGhvdmVySGVscExhYmVsID0gbmV3IExhYmVsKCIiKTsgLy8kTk9OLU5MUy0xJAotICBwcm90ZWN0ZWQgRmlndXJlIGFkZHJlc3NCb3hGaWd1cmU7Ci0gIHByb3RlY3RlZCBDb21wb25lbnRSZWZlcmVuY2VDb25uZWN0aW9uIGNvbm5lY3Rpb25GaWd1cmU7Ci0gIHByb3RlY3RlZCBmaW5hbCBzdGF0aWMgaW50IE1BWF9BRERSRVNTX1dJRFRIID0gMTUwOwotCi0gIHByb3RlY3RlZCBJRmlndXJlIGNyZWF0ZUZpZ3VyZSgpCi0gIHsKLSAgICBmaWd1cmUgPSBuZXcgUGFuZWwoKTsKLSAgICBmaWd1cmUuc2V0Qm9yZGVyKG5ldyBNYXJnaW5Cb3JkZXIoNCkpOwotICAgIFRvb2xiYXJMYXlvdXQgbGF5b3V0ID0gbmV3IFRvb2xiYXJMYXlvdXQoZmFsc2UpOwotICAgIC8vIGxheW91dC5zZXRNaW5vckFsaWdubWVudChUb29sYmFyTGF5b3V0LkFMSUdOX1RPUExFRlQpOwotICAgIGxheW91dC5zZXRTdHJldGNoTWlub3JBeGlzKHRydWUpOwotICAgIGZpZ3VyZS5zZXRMYXlvdXRNYW5hZ2VyKGxheW91dCk7Ci0gICAgbmFtZUxhYmVsID0gbmV3IExhYmVsKCk7Ci0KLSAgICBpZiAoZ2V0TW9kZWwoKSBpbnN0YW5jZW9mIElUcmVlRWxlbWVudCkgewotICAgIAluYW1lTGFiZWwuc2V0SWNvbigoKElUcmVlRWxlbWVudCkgZ2V0TW9kZWwoKSkuZ2V0SW1hZ2UoKSk7Ci0gICAgfQotICAgIAotICAgIG5hbWVMYWJlbC5zZXRMYWJlbEFsaWdubWVudChMYWJlbC5MRUZUKTsKLSAgICAvLyBuYW1lTGFiZWwuc2V0VGV4dFBsYWNlbWVudChQb3NpdGlvbkNvbnN0YW50cy5XRVNUKTsKLSAgICBmaWd1cmUuYWRkKG5hbWVMYWJlbCk7Ci0gICAgRmlndXJlIGYxID0gbmV3IEZpZ3VyZSgpOwotICAgIGYxLnNldEJvcmRlcihuZXcgTWFyZ2luQm9yZGVyKDAsIDIwLCAwLCAwKSk7Ci0gICAgZjEuc2V0TGF5b3V0TWFuYWdlcihuZXcgVG9vbGJhckxheW91dCgpKTsKLSAgICBmaWd1cmUuYWRkKGYxKTsKLSAgICBhZGRyZXNzQm94RmlndXJlID0gbmV3IFJlY3RhbmdsZUZpZ3VyZSgpOwotICAgIGFkZHJlc3NCb3hGaWd1cmUuc2V0Rm9yZWdyb3VuZENvbG9yKENvbG9yQ29uc3RhbnRzLmxpZ2h0R3JheSk7Ci0gICAgYWRkcmVzc0JveEZpZ3VyZS5zZXRMYXlvdXRNYW5hZ2VyKG5ldyBUb29sYmFyTGF5b3V0KCkKLSAgICB7Ci0gICAgICAvLyBoZXJlJyB3ZSB0d2VhayB0aGUgbGF5b3V0IHNvIHRoYXQgYWRkcmVzcyBsYWJlbHMgYXJlbid0IHNpemVkIHRvbyB3aWRlCi0gICAgICAvLyB0aGUgTGFiZWwgY2xhc3MgYXV0b21hdGljYWxseSBoYW5kbGVzIHRoZSBhZGRpdGlvbiBvZiB0aGUgJy4uLicgCi0gICAgICAvLwotICAgICAgcHJvdGVjdGVkIERpbWVuc2lvbiBjYWxjdWxhdGVQcmVmZXJyZWRTaXplKElGaWd1cmUgY29udGFpbmVyLCBpbnQgd0hpbnQsIGludCBoSGludCkKLSAgICAgIHsKLSAgICAgICAgRGltZW5zaW9uIGQgPSBzdXBlci5jYWxjdWxhdGVQcmVmZXJyZWRTaXplKGNvbnRhaW5lciwgd0hpbnQsIGhIaW50KTsKLSAgICAgICAgZC53aWR0aCA9IE1hdGgubWluKGQud2lkdGgsIE1BWF9BRERSRVNTX1dJRFRIKTsKLSAgICAgICAgcmV0dXJuIGQ7Ci0gICAgICB9Ci0gICAgfSk7Ci0gICAgZjEuYWRkKGFkZHJlc3NCb3hGaWd1cmUpOwotICAgIGFkZHJlc3NMYWJlbCA9IG5ldyBMYWJlbCgpOwotCi0gICAgYWRkcmVzc0xhYmVsLnNldEZvcmVncm91bmRDb2xvcihDb2xvckNvbnN0YW50cy5ibGFjayk7Ci0gICAgYWRkcmVzc0xhYmVsLnNldEJvcmRlcihuZXcgTWFyZ2luQm9yZGVyKDIsIDYsIDIsIDYpKTsKLSAgICBhZGRyZXNzTGFiZWwuc2V0TGFiZWxBbGlnbm1lbnQoTGFiZWwuTEVGVCk7Ci0gICAgYWRkcmVzc0JveEZpZ3VyZS5hZGQoYWRkcmVzc0xhYmVsKTsKLSAgICAKLSAgICAvLyBybWFoOiBUaGUgYmxvY2sgb2YgY29kZSBiZWxvdyBoYXMgYmVlbiBtb3ZlZCBmcm9tIHJlZnJlc2hWaXN1YWxzKCkuICBXZSdyZQotICAgIC8vIGFzc3VtaW5nIHRoZSByZWFkLW9ubHkgc3RhdGUgb2YgdGhlIEVkaXRQYXJ0IHdpbGwgbmV2ZXIgY2hhbmdlIG9uY2UgdGhlCi0gICAgLy8gRWRpdFBhcnQgaGFzIGJlZW4gY3JlYXRlZC4KLSAgICBpZiAoaXNSZWFkT25seSgpKQotICAgIHsgIAotICAgICAgbmFtZUxhYmVsLnNldEZvcmVncm91bmRDb2xvcihEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMucmVhZE9ubHlMYWJlbENvbG9yKTsKLSAgICAgIGFkZHJlc3NMYWJlbC5zZXRGb3JlZ3JvdW5kQ29sb3IoRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLnJlYWRPbmx5TGFiZWxDb2xvcik7Ci0gICAgfQotICAgIGVsc2UgCi0gICAgewotICAgICAgbmFtZUxhYmVsLnNldEZvcmVncm91bmRDb2xvcihEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMubGFiZWxDb2xvcik7Ci0gICAgICBhZGRyZXNzTGFiZWwuc2V0Rm9yZWdyb3VuZENvbG9yKERlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50cy5sYWJlbENvbG9yKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZpZ3VyZTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGNyZWF0ZUVkaXRQb2xpY2llcygpCi0gIHsKLSAgICBzdXBlci5jcmVhdGVFZGl0UG9saWNpZXMoKTsKLSAgICBpbnN0YWxsRWRpdFBvbGljeShFZGl0UG9saWN5LkRJUkVDVF9FRElUX1JPTEUsIG5ldyBBU0RMYWJlbERpcmVjdEVkaXRQb2xpY3koKSk7Ci0gICAgaW5zdGFsbEVkaXRQb2xpY3koRWRpdFBvbGljeS5TRUxFQ1RJT05fRkVFREJBQ0tfUk9MRSwgbmV3IEFTRFNlbGVjdGlvbkVkaXRQb2xpY3koKSk7Ci0gIH0KLSAgcHJpdmF0ZSBEaXJlY3RFZGl0TWFuYWdlciBtYW5hZ2VyOwotICBwcml2YXRlIFBvaW50IGN1cnNvckxvY2F0aW9uOwotCi0gIHB1YmxpYyB2b2lkIHBlcmZvcm1EaXJlY3RFZGl0KFBvaW50IGN1cnNvckxvY2F0aW9uKQotICB7Ci0gICAgdGhpcy5jdXJzb3JMb2NhdGlvbiA9IGN1cnNvckxvY2F0aW9uOwotICAgIGlmICghaXNSZWFkT25seSgpICYmIChjdXJzb3JMb2NhdGlvbiA9PSBudWxsIHx8IGhpdFRlc3QoZ2V0TGFiZWxGaWd1cmUoKSwgY3Vyc29yTG9jYXRpb24pKSkgewotICAgIAltYW5hZ2VyID0gbmV3IExhYmVsRWRpdE1hbmFnZXIodGhpcywgbmV3IExhYmVsQ2VsbEVkaXRvckxvY2F0b3IodGhpcywgY3Vyc29yTG9jYXRpb24pKTsKLSAgICAJbWFuYWdlci5zaG93KCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGhpdFRlc3QoZ2V0RmlndXJlKCkuZ2V0Qm91bmRzKCksIGN1cnNvckxvY2F0aW9uKSAmJiBpc1JlYWRPbmx5KCkpIHsKLSAgICAgIGRvT3Blbk5ld0VkaXRvcigpOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgcGVyZm9ybVJlcXVlc3QoUmVxdWVzdCByZXEpIHsKLQkgIGlmIChyZXEuZ2V0VHlwZSgpLmVxdWFscyhSZXF1ZXN0Q29uc3RhbnRzLlJFUV9ESVJFQ1RfRURJVCkpIHsKLQkJICBwZXJmb3JtRGlyZWN0RWRpdChudWxsKTsKLQkgIH0KLSAgfQotCi0gIHB1YmxpYyBMYWJlbCBnZXRMYWJlbEZpZ3VyZSgpCi0gIHsKLSAgICBpZiAoY3Vyc29yTG9jYXRpb24gPT0gbnVsbCB8fCB0cmFuc2xhdGVCb3VuZHMobmFtZUxhYmVsLmdldEJvdW5kcygpKS5jb250YWlucyhjdXJzb3JMb2NhdGlvbikpCi0gICAgewotICAgICAgcmV0dXJuIG5hbWVMYWJlbDsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHJhbnNsYXRlQm91bmRzKGFkZHJlc3NMYWJlbC5nZXRCb3VuZHMoKSkuY29udGFpbnMoY3Vyc29yTG9jYXRpb24pKQotICAgIHsKLSAgICAgIHJldHVybiBhZGRyZXNzTGFiZWw7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgUmVjdGFuZ2xlIHRyYW5zbGF0ZUJvdW5kcyhSZWN0YW5nbGUgYm91bmRzKSB7Ci0JICAKLQkJQVNETXVsdGlQYWdlRWRpdG9yIGVkaXRvciA9IChBU0RNdWx0aVBhZ2VFZGl0b3IpIEFTREVkaXRvclBsdWdpbi5nZXRBY3RpdmVFZGl0b3IoKTsKLQkJRmlndXJlQ2FudmFzIGNhbnZhcyA9IChGaWd1cmVDYW52YXMpICgoRWRpdFBhcnRWaWV3ZXIpIGVkaXRvci5nZXRBZGFwdGVyKEdyYXBoaWNhbFZpZXdlci5jbGFzcykpLmdldENvbnRyb2woKTsKLQkJUG9pbnQgdmlld0xvY2F0aW9uID0gY2FudmFzLmdldFZpZXdwb3J0KCkuZ2V0Vmlld0xvY2F0aW9uKCk7Ci0JCQotCQlyZXR1cm4gbmV3IFJlY3RhbmdsZShib3VuZHMueCArIHZpZXdMb2NhdGlvbi54LCBib3VuZHMueSArIHZpZXdMb2NhdGlvbi55LCBib3VuZHMud2lkdGgsIGJvdW5kcy5oZWlnaHQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIE9iamVjdCBnZXRSZWZlcmVuY2VkTW9kZWwoKQotICB7Ci0gICAgSUVuZFBvaW50IGVuZFBvaW50ID0gKElFbmRQb2ludCkgZ2V0TW9kZWwoKTsKLSAgICByZXR1cm4gZW5kUG9pbnQuZ2V0QmluZGluZygpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgcmVmcmVzaFZpc3VhbHMoKQotICB7Ci0gICAgSUVuZFBvaW50IGVuZFBvaW50ID0gKElFbmRQb2ludCkgZ2V0TW9kZWwoKTsKLSAgICBuYW1lTGFiZWwuc2V0VGV4dChlbmRQb2ludC5nZXROYW1lKCkpOwotICAgIGFkZHJlc3NMYWJlbC5zZXRUZXh0KGVuZFBvaW50LmdldEFkZHJlc3MoKSk7Ci0gICAgCi0gICAgUmVjdGFuZ2xlIHRleHRCb3VuZHMgPSBhZGRyZXNzTGFiZWwuZ2V0VGV4dEJvdW5kcygpOwotICAgIFJlY3RhbmdsZSBib3VuZHMgPSBhZGRyZXNzTGFiZWwuZ2V0Qm91bmRzKCk7Ci0gICAgaW50IHRleHRQbGFjZW1lbnQgPSBhZGRyZXNzTGFiZWwuZ2V0VGV4dFBsYWNlbWVudCgpOwotICAgIGludCB4RGVsdGEgPSB0ZXh0Qm91bmRzLnggLSBib3VuZHMueDsKLSAgICBpbnQgeFRleHRJbmNyZWFzZSA9IHRleHRQbGFjZW1lbnQgLSB4RGVsdGE7Ci0gICAgaW50IHRleHRTaXplID0gdGV4dEJvdW5kcy53aWR0aCArIHhUZXh0SW5jcmVhc2U7Ci0gICAgaW50IGJvdW5kU2l6ZSA9IGJvdW5kcy53aWR0aDsKLQotICAgIGlmICh0ZXh0U2l6ZSA+IGJvdW5kU2l6ZSkgewotICAgIAlob3ZlckhlbHBMYWJlbC5zZXRUZXh0KCIgIiArIGVuZFBvaW50LmdldEFkZHJlc3MoKSAgKyAiICIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgICAgYWRkcmVzc0xhYmVsLnNldFRvb2xUaXAoaG92ZXJIZWxwTGFiZWwpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgYWRkcmVzc0xhYmVsLnNldFRvb2xUaXAobnVsbCk7Ci0gICAgfQotCi0gICAgcmVmcmVzaENvbm5lY3Rpb25zKCk7Ci0gICAgc3VwZXIucmVmcmVzaFZpc3VhbHMoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFjdGl2YXRlKCkKLSAgewotICAgIHN1cGVyLmFjdGl2YXRlKCk7Ci0gICAgYWN0aXZhdGVDb25uZWN0aW9uKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGRlYWN0aXZhdGUoKQotICB7Ci0JICBzdXBlci5kZWFjdGl2YXRlKCk7Ci0JICBkZWFjdGl2YXRlQ29ubmVjdGlvbigpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgYWN0aXZhdGVDb25uZWN0aW9uKCkKLSAgewotICAgIGlmIChjcmVhdGVDb25uZWN0aW9uRmlndXJlKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBnZXRMYXllcihMYXllckNvbnN0YW50cy5DT05ORUNUSU9OX0xBWUVSKS5hZGQoY29ubmVjdGlvbkZpZ3VyZSk7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgZGVhY3RpdmF0ZUNvbm5lY3Rpb24oKQotICB7Ci0gICAgaWYgKGNvbm5lY3Rpb25GaWd1cmUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBib29sZWFuIHJlbW92ZWQgPSBmYWxzZTsKLSAgICAgIHJlbW92ZWQgPSByZW1vdmVDb25uZWN0aW9uRmlndXJlKGdldExheWVyKExheWVyQ29uc3RhbnRzLkNPTk5FQ1RJT05fTEFZRVIpKTsKLSAgICAgIAotICAgICAgaWYgKCFyZW1vdmVkKSB7Ci0gICAgCSAgcmVtb3ZlQ29ubmVjdGlvbkZpZ3VyZShnZXRMYXllcihMYXllckNvbnN0YW50cy5GRUVEQkFDS19MQVlFUikpOwotICAgICAgfQotICAgIH0KLSAgfQotICAKLSAgcHJpdmF0ZSBib29sZWFuIHJlbW92ZUNvbm5lY3Rpb25GaWd1cmUoSUZpZ3VyZSBwYXJlbnQpIHsKLQkgIGJvb2xlYW4gY29udGFpbnMgPSBmYWxzZTsKLQkgIEl0ZXJhdG9yIGl0ID0gcGFyZW50LmdldENoaWxkcmVuKCkuaXRlcmF0b3IoKTsKLQkgIHdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLQkJICBJRmlndXJlIGZpZyA9IChJRmlndXJlKSBpdC5uZXh0KCk7Ci0JCSAgaWYgKGZpZy5lcXVhbHMoY29ubmVjdGlvbkZpZ3VyZSkpIHsKLQkJCSAgY29udGFpbnMgPSB0cnVlOwotCQkJICBicmVhazsKLQkJICB9Ci0JICB9Ci0JICAKLQkgIGlmIChjb250YWlucykgewotCQkgIHBhcmVudC5yZW1vdmUoY29ubmVjdGlvbkZpZ3VyZSk7Ci0JICB9Ci0JICAKLQkgIHJldHVybiBjb250YWluczsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIHNob3VsZERyYXdDb25uZWN0aW9uKCkKLSAgewotCSAgT2JqZWN0IHR5cGVCZWluZ1JlZiA9IGdldFJlZmVyZW5jZWRNb2RlbCgpOwotICAgICAgaWYgKHR5cGVCZWluZ1JlZiAhPSBudWxsKQotICAgICAgewotICAgICAgICBBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0IHJlZmVyZW5jZVR5cGVQYXJ0ID0gKEFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQpIGdldFZpZXdlcigpLmdldEVkaXRQYXJ0UmVnaXN0cnkoKS5nZXQodHlwZUJlaW5nUmVmKTsKLSAgICAgICAgaWYgKHJlZmVyZW5jZVR5cGVQYXJ0ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgCXJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLQotICBwdWJsaWMgQ29tcG9uZW50UmVmZXJlbmNlQ29ubmVjdGlvbiBjcmVhdGVDb25uZWN0aW9uRmlndXJlKCkKLSAgewotCSAgaWYgKGNvbm5lY3Rpb25GaWd1cmUgPT0gbnVsbCAmJiBzaG91bGREcmF3Q29ubmVjdGlvbigpKQotCSAgICB7Ci0JICAgICAgT2JqZWN0IHR5cGVCZWluZ1JlZiA9IGdldFJlZmVyZW5jZWRNb2RlbCgpOwotCSAgICAgIGlmICh0eXBlQmVpbmdSZWYgIT0gbnVsbCkKLQkgICAgICB7Ci0JICAgICAgICBBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0IHJlZmVyZW5jZVR5cGVQYXJ0ID0gKEFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQpIGdldFZpZXdlcigpLmdldEVkaXRQYXJ0UmVnaXN0cnkoKS5nZXQodHlwZUJlaW5nUmVmKTsKLQkgICAgICAgIGlmIChyZWZlcmVuY2VUeXBlUGFydCAhPSBudWxsKQotCSAgICAgICAgewotCSAgICAgICAgICAvLyBXZSBkbyByZWZlcmVuY2UgYW5vdGhlciBUeXBlLiBCdWlsZCBhIGNvbm5lY3Rpb24uIFdlIGNhbiBtYWtlCi0JICAgICAgICAgIC8vIGFzc3VtcHRpb25zIGFib3V0IGFuY2hvciBwb3NpdGlvbmluZyBzaW5jZSBhbiBhdHRyaWJ1dGUgY2FuIG9ubHkKLQkgICAgICAgICAgLy8gaGF2ZSBhICJyZWZlcmVuY2UiIHJlbGF0aW9uc2hpcCwgbm8gImluaGVyaXRhbmNlIiwgbm8KLQkgICAgICAgICAgLy8gImlzLXJlZmVyZW5jZWQtYnkiCi0JICAgICAgICAgIGNvbm5lY3Rpb25GaWd1cmUgPSBuZXcgQ29tcG9uZW50UmVmZXJlbmNlQ29ubmVjdGlvbigpOwotCSAgICAgICAgICByZWZyZXNoQ29ubmVjdGlvbnMoKTsKLQkgICAgICAgIH0KLQkgICAgICB9Ci0JICAgIH0KLQkgICAgcmV0dXJuIGNvbm5lY3Rpb25GaWd1cmU7Ci0gIH0KLQotICBFZGl0UGFydCBnZXRDb25uZWN0aW9uVGFyZ2V0RWRpdFBhcnQoKQotICB7Ci0gICAgT2JqZWN0IHR5cGVCZWluZ1JlZiA9IGdldFJlZmVyZW5jZWRNb2RlbCgpOwotICAgIGlmIChjb25uZWN0aW9uRmlndXJlICE9IG51bGwpIHsKLSAgICAgIEFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQgcmVmZXJlbmNlVHlwZVBhcnQgPSAoQWJzdHJhY3RHcmFwaGljYWxFZGl0UGFydCkgZ2V0Vmlld2VyKCkuZ2V0RWRpdFBhcnRSZWdpc3RyeSgpLmdldCh0eXBlQmVpbmdSZWYpOwotICAgICAgcmV0dXJuIHJlZmVyZW5jZVR5cGVQYXJ0OwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgcmVmcmVzaENvbm5lY3Rpb25zKCkgewotCSAgaWYgKHNob3VsZERyYXdDb25uZWN0aW9uKCkpIHsKLQkJICBPYmplY3QgdHlwZUJlaW5nUmVmID0gZ2V0UmVmZXJlbmNlZE1vZGVsKCk7Ci0JCSAgaWYgKGNvbm5lY3Rpb25GaWd1cmUgIT0gbnVsbCkgewotCQkJICBBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0IHJlZmVyZW5jZVR5cGVQYXJ0ID0gKEFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQpIGdldFZpZXdlcigpLmdldEVkaXRQYXJ0UmVnaXN0cnkoKS5nZXQodHlwZUJlaW5nUmVmKTsKLQkgICAgICAgICAgY29ubmVjdGlvbkZpZ3VyZS5zZXRTb3VyY2VBbmNob3IobmV3IENlbnRlcmVkQ29ubmVjdGlvbkFuY2hvcihhZGRyZXNzQm94RmlndXJlLCBDZW50ZXJlZENvbm5lY3Rpb25BbmNob3IuUklHSFQsIDAsIDApKTsKLQkgICAgICAgICAgSUZpZ3VyZSB0YXJnZXRGaWd1cmUgPSByZWZlcmVuY2VUeXBlUGFydC5nZXRGaWd1cmUoKTsKLQkgICAgICAgICAgY29ubmVjdGlvbkZpZ3VyZS5zZXRUYXJnZXRBbmNob3IobmV3IENlbnRlcmVkQ29ubmVjdGlvbkFuY2hvcih0YXJnZXRGaWd1cmUsIENlbnRlcmVkQ29ubmVjdGlvbkFuY2hvci5IRUFERVJfTEVGVCwgMCwgMTApKTsKLQkgICAgICAgICAgY29ubmVjdGlvbkZpZ3VyZS5zZXRIaWdobGlnaHQoZmFsc2UpOwotCSAgICAgICAgICBjb25uZWN0aW9uRmlndXJlLnNldFZpc2libGUodHJ1ZSk7Ci0JCSAgfQotCQkgIGVsc2UgewotCQkJICBhY3RpdmF0ZUNvbm5lY3Rpb24oKTsKLQkJICB9Ci0JICB9Ci0JICBlbHNlIGlmIChjb25uZWN0aW9uRmlndXJlICE9IG51bGwpewotCQkgIGNvbm5lY3Rpb25GaWd1cmUuc2V0VmlzaWJsZShmYWxzZSk7Ci0JICB9Ci0gIH0KLQotICBwcml2YXRlIElGaWd1cmUgZ2V0RmlndXJlRm9yRmVlZGJhY2soKQotICB7Ci0gICAgcmV0dXJuIGZpZ3VyZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZEZlZWRiYWNrKCkKLSAgewotICAgIElGaWd1cmUgZmlndXJlID0gZ2V0RmlndXJlRm9yRmVlZGJhY2soKTsKLSAgICBmaWd1cmUuc2V0QmFja2dyb3VuZENvbG9yKERlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50cy50YWJsZUNlbGxTZWxlY3Rpb25Db2xvcik7Ci0gICAgCi0gICAgaWYgKGNvbm5lY3Rpb25GaWd1cmUgIT0gbnVsbCkgewotICAgIAljb25uZWN0aW9uRmlndXJlLnNldEhpZ2hsaWdodCh0cnVlKTsKLSAgICAJZ2V0TGF5ZXIoTGF5ZXJDb25zdGFudHMuRkVFREJBQ0tfTEFZRVIpLmFkZChjb25uZWN0aW9uRmlndXJlKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZW1vdmVGZWVkYmFjaygpCi0gIHsKLSAgICBJRmlndXJlIGZpZ3VyZSA9IGdldEZpZ3VyZUZvckZlZWRiYWNrKCk7Ci0gICAgZmlndXJlLnNldEJhY2tncm91bmRDb2xvcihmaWd1cmUuZ2V0UGFyZW50KCkuZ2V0QmFja2dyb3VuZENvbG9yKCkpOwotICAgIAotICAgIGlmIChjb25uZWN0aW9uRmlndXJlICE9IG51bGwpIHsKLSAgICAJY29ubmVjdGlvbkZpZ3VyZS5zZXRIaWdobGlnaHQoZmFsc2UpOwotICAgIAlnZXRMYXllcihMYXllckNvbnN0YW50cy5DT05ORUNUSU9OX0xBWUVSKS5hZGQoY29ubmVjdGlvbkZpZ3VyZSk7Ci0gICAgfQotICB9Ci0KLSAgLy8gVE9ETzogcm1haDogVkVSWSBVR0xZIEhBQ0suLi4uIEkgZG9uJ3Qgc2VlIGFueSBvdGhlciB3YXkgdG8gc29sdmUgdGhpcwotICAvLyBpc3N1ZSBhdCB0aGlzIHRpbWUuCi0gIC8vIEVuZFBvaW50RWRpdFBhcnQgY29udGFpbnMgdHdvIGxhYmVscyB3aGljaCBjYW4gYmUgZGlyZWN0IGVkaXRlZC4gVGhlIGZhY2FkZQotICAvLyBkcml2aW5nIEVuZFBvaW50RWRpdFBhcnQKLSAgLy8gY29udGFpbnMgYSBnZXRTZXROYW1lQ29tbWFuZCgpIGFuZCBhIGdldFNldEFkZHJlc3NDb21tYW5kKCkuLi4gaG93ZXZlciwKLSAgLy8gdGhpcyBjbGFzcyAoTGFiZWxEaXJlY3RFZGl0UG9saWN5KQotICAvLyBvbmx5IGtub3dzIGFib3V0IGdldFNldE5hbWVDb21tYW5kKCkuLi4uLiBUaGlzIGlzIHRoZSBwcm9ibGVtIHdlIGZhY2Ugd2hlbgotICAvLyBjb21iaW5pbmcgdHdvIGxhYmVscyBpbnRvCi0gIC8vIG9uZSBFZGl0UGFydC4uLi4uCi0gIC8vIFNlZSBMYWJlbERpcmVjdEVkaXRQb2xpY3kuZ2V0RGlyZWN0RWRpdENvbW1hbmQoRGlyZWN0RWRpdFJlcXVlc3QpCi0gIHB1YmxpYyBDb21tYW5kIGdldFNldFByb3BlckxhYmVsQ29tbWFuZChTdHJpbmcgbmV3VmFsdWUpCi0gIHsKLSAgICAvLyBUT0RPOiBybWFoOiBXZSBuZWVkIHRvIHRyYW5zbGF0ZSB0aGUgcG9pbnQuLi4KLSAgICBpZiAoY3Vyc29yTG9jYXRpb24gPT0gbnVsbCB8fCB0cmFuc2xhdGVCb3VuZHMobmFtZUxhYmVsLmdldEJvdW5kcygpKS5jb250YWlucyhjdXJzb3JMb2NhdGlvbikpCi0gICAgewotICAgICAgcmV0dXJuICgoSUVuZFBvaW50KSBnZXRNb2RlbCgpKS5nZXRTZXROYW1lQ29tbWFuZChuZXdWYWx1ZSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHRyYW5zbGF0ZUJvdW5kcyhhZGRyZXNzTGFiZWwuZ2V0Qm91bmRzKCkpLmNvbnRhaW5zKGN1cnNvckxvY2F0aW9uKSkKLSAgICB7Ci0gICAgICByZXR1cm4gKChJRW5kUG9pbnQpIGdldE1vZGVsKCkpLmdldFNldEFkZHJlc3NDb21tYW5kKG5ld1ZhbHVlKTsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHB1YmxpYyBFZGl0UGFydCBnZXRSZWxhdGl2ZUVkaXRQYXJ0KGludCBkaXJlY3Rpb24pCi0gIHsKLSAgICBpZiAoZGlyZWN0aW9uID09IFBvc2l0aW9uQ29uc3RhbnRzLkVBU1QpCi0gICAgeyAgICAgIAotICAgICAgLy8gbmF2aWdhdGUgZm9yd2FyZCBhbG9uZyB0aGUgY29ubmVjdGlvbiAodG8gdGhlIHJpZ2h0KQotICAgICAgcmV0dXJuIGdldENvbm5lY3Rpb25UYXJnZXRFZGl0UGFydCgpOwotICAgIH0KLSAgICAKLSAgICBpZiAoZGlyZWN0aW9uID09IFBvc2l0aW9uQ29uc3RhbnRzLlNPVVRIKQotICAgIHsKLSAgICAJcmV0dXJuIEVkaXRQYXJ0TmF2aWdhdGlvbkhhbmRsZXJVdGlsLmdldE5leHRTZXJ2aWNlKHRoaXMpOwotICAgIH0KLQotICAgIHJldHVybiBzdXBlci5nZXRSZWxhdGl2ZUVkaXRQYXJ0KGRpcmVjdGlvbik7Ci0gIH0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0lGZWVkYmFja0hhbmRsZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9JRmVlZGJhY2tIYW5kbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzMDUzNjIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0lGZWVkYmFja0hhbmRsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0czsKLQotcHVibGljIGludGVyZmFjZSBJRmVlZGJhY2tIYW5kbGVyIHsKLQlwdWJsaWMgdm9pZCBhZGRGZWVkYmFjaygpOwotCXB1YmxpYyB2b2lkIHJlbW92ZUZlZWRiYWNrKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvSU5hbWVkRWRpdFBhcnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9JTmFtZWRFZGl0UGFydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjZkZTNlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9JTmFtZWRFZGl0UGFydC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5Qb2ludDsKLQotcHVibGljIGludGVyZmFjZSBJTmFtZWRFZGl0UGFydCB7Ci0JcHVibGljIExhYmVsIGdldExhYmVsRmlndXJlKCk7Ci0JcHVibGljIHZvaWQgcGVyZm9ybURpcmVjdEVkaXQoUG9pbnQgY3Vyc29yTG9jYXRpb24pOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL0ludGVyZmFjZUVkaXRQYXJ0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvSW50ZXJmYWNlRWRpdFBhcnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQ1OTVlYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvSW50ZXJmYWNlRWRpdFBhcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuQ29sb3JDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuSUZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTGluZUJvcmRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuUG9zaXRpb25Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLlJlY3RhbmdsZUZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuVG9vbGJhckxheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuRGltZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLkRlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmZpZ3VyZXMuQm94Q29tcG9uZW50RmlndXJlOwotLy9pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5maWd1cmVzLkJhc2VMaW5rSWNvbkZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmxheW91dHMuUm93TGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JVHJlZUVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBJbnRlcmZhY2VFZGl0UGFydCBleHRlbmRzIEFic3RyYWN0Qm94dEVkaXRQYXJ0IGltcGxlbWVudHMgSUZlZWRiYWNrSGFuZGxlcgotewotCXByaXZhdGUgUmVjdGFuZ2xlRmlndXJlIGxpbmtJY29uQ29sdW1uOwotCXByb3RlY3RlZCBCb3hDb21wb25lbnRGaWd1cmUgYm94RmlndXJlOwotICBwdWJsaWMgSW50ZXJmYWNlRWRpdFBhcnQoKQotICB7Ci0gICAgY29sdW1uRGF0YS5zZXRDb2x1bW5XZWlnaHQoIk1lc3NhZ2VMYWJlbCIsIDApOyAvLyROT04tTkxTLTEkCi0gICAgY29sdW1uRGF0YS5zZXRDb2x1bW5XZWlnaHQoIk1lc3NhZ2VDb250ZW50UGFuZSIsIDEwMCk7IC8vJE5PTi1OTFMtMSQKLSAgICBjb2x1bW5EYXRhLnNldENvbHVtbldlaWdodCgicGFyYW1ldGVyTmFtZSIsIDUwKTsgLy8kTk9OLU5MUy0xJAotICAgIGNvbHVtbkRhdGEuc2V0Q29sdW1uV2VpZ2h0KCJwYXJhbWV0ZXJUeXBlIiwgNTApOyAgICAgICAgIC8vJE5PTi1OTFMtMSQKLSAgfQotICAKLSAgcHJvdGVjdGVkIElGaWd1cmUgY3JlYXRlRmlndXJlKCkKLSAgewotCQlJRmlndXJlIG91dGVyID0gbmV3IEZpZ3VyZSgpIHsKLQkJCXB1YmxpYyB2b2lkIHZhbGlkYXRlKCkgewotCQkJCXN1cGVyLnZhbGlkYXRlKCk7Ci0JCQkJLy8gSWYgd2UgZG9uJ3QgbGF5b3V0IG91ciBMaW5rIEljb24gQ29sdW1uIGF0IHRoaXMgcG9pbnQsIHRoZSBsaW5rIGljb25zCi0JCQkJLy8gd2lsbCBub3QgYmUgcHJvcGVybHkgdXBkYXRlZCBpbiB0aGUgc2NlbmFyaW8gd2hlcmUgYSBwb3J0dHlwZSBpcyBhZGRlZAotCQkJCS8vIG9yIHJlbW92ZWQuICBUaGUgbGluayBpY29ucyBvZiB0aGUgZXhpc3RpbmcgcG9ydHR5cGVzIHdpbGwgbm90IGJlIHVwZGF0ZWQuCi0JCQkJZ2V0TGlua0ljb25Db2x1bW4oKS5nZXRMYXlvdXRNYW5hZ2VyKCkubGF5b3V0KGdldExpbmtJY29uQ29sdW1uKCkpOwotCQkJfQotCQl9OwotCQkKLQkJb3V0ZXIuc2V0TGF5b3V0TWFuYWdlcihuZXcgVG9vbGJhckxheW91dCh0cnVlKSk7Ci0JICAgIGJveEZpZ3VyZSA9IChCb3hDb21wb25lbnRGaWd1cmUpIHN1cGVyLmNyZWF0ZUZpZ3VyZSgpOwotCSAgICAKLQkgICAgaWYgKGdldE1vZGVsKCkgaW5zdGFuY2VvZiBJVHJlZUVsZW1lbnQpIHsKLQkgICAgCWJveEZpZ3VyZS5nZXRMYWJlbCgpLnNldEljb24oKChJVHJlZUVsZW1lbnQpIGdldE1vZGVsKCkpLmdldEltYWdlKCkpOwkKLQkgICAgfQotCSAgICAKLQkgICAgYm94RmlndXJlLnNldEJhY2tncm91bmRDb2xvcihDb2xvckNvbnN0YW50cy5vcmFuZ2UpOwotCSAgICBib3hGaWd1cmUuc2V0Qm9yZGVyKG5ldyBMaW5lQm9yZGVyKDEpKTsKLQkgICAgVG9vbGJhckxheW91dCB0b29sYmFyTGF5b3V0ID0gbmV3IFRvb2xiYXJMYXlvdXQoZmFsc2UpOwotCSAgICB0b29sYmFyTGF5b3V0LnNldFN0cmV0Y2hNaW5vckF4aXModHJ1ZSk7Ci0JICAgIGJveEZpZ3VyZS5zZXRMYXlvdXRNYW5hZ2VyKHRvb2xiYXJMYXlvdXQpOwotCSAgICBvdXRlci5hZGQoYm94RmlndXJlKTsKLQkgICAgbGlua0ljb25Db2x1bW4gPSBuZXcgUmVjdGFuZ2xlRmlndXJlKCk7Ci0JICAgIGxpbmtJY29uQ29sdW1uLnNldE91dGxpbmUoZmFsc2UpOwotCSAgICBsaW5rSWNvbkNvbHVtbi5zZXRMYXlvdXRNYW5hZ2VyKG5ldyBUb29sYmFyTGF5b3V0KCkgewotCQkJcHVibGljIHZvaWQgbGF5b3V0KElGaWd1cmUgcGFyZW50KSB7Ci0JCQkJc3VwZXIubGF5b3V0KHBhcmVudCk7Ci0JCQkJCi0JCQkJLy8gV2UgbmVlZCB0byBsYXlvdXQgb24gdGhlIHktYXhpcwotCQkJCUl0ZXJhdG9yIGNoaWxkcmVuID0gcGFyZW50LmdldENoaWxkcmVuKCkuaXRlcmF0b3IoKTsKLQkJCQl3aGlsZSAoY2hpbGRyZW4uaGFzTmV4dCgpKSB7Ci0JCQkJCU9iamVjdCBpdGVtID0gY2hpbGRyZW4ubmV4dCgpOwotCQkJCQlpZiAoaXRlbSBpbnN0YW5jZW9mIElGaWd1cmUpIHsKLQkJCQkJCUlGaWd1cmUgZmlndXJlID0gKElGaWd1cmUpIGl0ZW07Ci0JCQkJCQlmaWd1cmUuZ2V0TGF5b3V0TWFuYWdlcigpLmxheW91dChmaWd1cmUpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJCi0JCQlwcm90ZWN0ZWQgRGltZW5zaW9uIGNhbGN1bGF0ZVByZWZlcnJlZFNpemUoSUZpZ3VyZSBjb250YWluZXIsIGludCB3SGludCwgaW50IGhIaW50KSB7Ci0JCQkJRGltZW5zaW9uIGRpbWVuc2lvbiA9IHN1cGVyLmNhbGN1bGF0ZVByZWZlcnJlZFNpemUoY29udGFpbmVyLCB3SGludCwgaEhpbnQpOwotCQkJCQotCQkJCS8vIENhbGN1bGF0ZSB0aGUgaGVpZ2h0Ci0JCQkJSXRlcmF0b3IgaXQgPSBjb250YWluZXIuZ2V0UGFyZW50KCkuZ2V0Q2hpbGRyZW4oKS5pdGVyYXRvcigpOwotCQkJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLQkJCQkJT2JqZWN0IGl0ZW0gPSBpdC5uZXh0KCk7Ci0JCQkJCWlmIChpdGVtIGluc3RhbmNlb2YgQm94Q29tcG9uZW50RmlndXJlKSB7Ci0JCQkJCQlkaW1lbnNpb24uaGVpZ2h0ID0gKChJRmlndXJlKSBpdGVtKS5nZXRQcmVmZXJyZWRTaXplKCkuaGVpZ2h0OwotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJCQl9Ci0KLQkJCQlyZXR1cm4gZGltZW5zaW9uOwotCQkJfQotCSAgICB9KTsKLQkgICAgCi0JICAgIG91dGVyLmFkZChsaW5rSWNvbkNvbHVtbik7Ci0JICAgIAotCSAgICAvLyBybWFoOiBUaGUgYmxvY2sgb2YgY29kZSBiZWxvdyBoYXMgYmVlbiBtb3ZlZCBmcm9tIHJlZnJlc2hWaXN1YWxzKCkuICBXZSdyZQotCSAgICAvLyBhc3N1bWluZyB0aGUgcmVhZC1vbmx5IHN0YXRlIG9mIHRoZSBFZGl0UGFydCB3aWxsIG5ldmVyIGNoYW5nZSBvbmNlIHRoZQotCSAgICAvLyBFZGl0UGFydCBoYXMgYmVlbiBjcmVhdGVkLgotCSAgICBpZiAoaXNSZWFkT25seSgpKSAKLQkgICAgewotCSAgICAJZmlndXJlLmdldExhYmVsKCkuc2V0Rm9yZWdyb3VuZENvbG9yKERlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50cy5yZWFkT25seUxhYmVsQ29sb3IpOwotCSAgICB9Ci0JICAgIGVsc2UKLQkgICAgewotCSAgICAJZmlndXJlLmdldExhYmVsKCkuc2V0Rm9yZWdyb3VuZENvbG9yKENvbG9yQ29uc3RhbnRzLmJsYWNrKTsKLQkgICAgfQotCSAgICAKLQkgICAgcmV0dXJuIG91dGVyOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIHZvaWQgYXR0YWNoVG9JbnRlcmZhY2VFZGl0UGFydChFZGl0UGFydCBlZGl0UGFydCwgUm93TGF5b3V0IHJvd0xheW91dCkKLSAgewotICAgIGZvciAoRWRpdFBhcnQgcGFyZW50ID0gZWRpdFBhcnQuZ2V0UGFyZW50KCk7IHBhcmVudCAhPSBudWxsOyBwYXJlbnQgPSBwYXJlbnQuZ2V0UGFyZW50KCkpCi0gICAgewotICAgICAgaWYgKHBhcmVudCBpbnN0YW5jZW9mIEludGVyZmFjZUVkaXRQYXJ0KQotICAgICAgewotICAgICAgICBJbnRlcmZhY2VFZGl0UGFydCBpbnRlcmZhY2VFZGl0UGFydCA9IChJbnRlcmZhY2VFZGl0UGFydClwYXJlbnQ7Ci0gICAgICAgIHJvd0xheW91dC5zZXRDb2x1bW5EYXRhKGludGVyZmFjZUVkaXRQYXJ0LmNvbHVtbkRhdGEpOwotICAgICAgICBicmVhazsKLSAgICAgIH0gIAotICAgIH0gICAgCi0gIH0KLSAgCi0gIHByb3RlY3RlZCB2b2lkIHJlZnJlc2hDaGlsZHJlbigpCi0gIHsKLSAgICBzdXBlci5yZWZyZXNoQ2hpbGRyZW4oKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgcmVmcmVzaFZpc3VhbHMoKQotICB7Ci0gICAgc3VwZXIucmVmcmVzaFZpc3VhbHMoKTsKLSAgfQotCi0gIHByb3RlY3RlZCBMaXN0IGdldE1vZGVsQ2hpbGRyZW4oKQotICB7Ci0gICAgSUludGVyZmFjZSB0aGVJbnRlcmZhY2UgPSAoSUludGVyZmFjZSlnZXRNb2RlbCgpOwotICAgIHJldHVybiB0aGVJbnRlcmZhY2UuZ2V0T3BlcmF0aW9ucygpOyAgIAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBhZGRGZWVkYmFjaygpIHsKLQkgIHN1cGVyLmFkZEZlZWRiYWNrKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZW1vdmVGZWVkYmFjaygpIHsKLQkgIHN1cGVyLnJlbW92ZUZlZWRiYWNrKCk7Ci0gIH0KLQotICBwdWJsaWMgRWRpdFBhcnQgZ2V0UmVsYXRpdmVFZGl0UGFydChpbnQgZGlyZWN0aW9uKQotICB7Ci0gICAgaWYgKGRpcmVjdGlvbiA9PSBQb3NpdGlvbkNvbnN0YW50cy5XRVNUKQotICAgIHsKLSAgICAgIHJldHVybiBFZGl0UGFydE5hdmlnYXRpb25IYW5kbGVyVXRpbC5nZXRTb3VyY2VDb25uZWN0aW9uRWRpdFBhcnQodGhpcyk7ICAgICAKLSAgICB9ICAKLSAgICByZXR1cm4gc3VwZXIuZ2V0UmVsYXRpdmVFZGl0UGFydChkaXJlY3Rpb24pOwotICB9Ci0gIAotICBwdWJsaWMgSUZpZ3VyZSBnZXRMaW5rSWNvbkNvbHVtbigpIHsKLQkgIHJldHVybiBsaW5rSWNvbkNvbHVtbjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL01lc3NhZ2VSZWZlcmVuY2VFZGl0UGFydC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL01lc3NhZ2VSZWZlcmVuY2VFZGl0UGFydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YWVjNWFjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9NZXNzYWdlUmVmZXJlbmNlRWRpdFBhcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkNvbG9yQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5GaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLklGaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5NYXJnaW5Cb3JkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLlBvc2l0aW9uQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Ub29sYmFyTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRHJhZ1RyYWNrZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5HcmFwaGljYWxFZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuUmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLkRlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwb2xpY2llcy5BU0REcmFnQW5kRHJvcEVkaXRQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cG9saWNpZXMuQVNER3JhcGhOb2RlRHJhZ1RyYWNrZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cG9saWNpZXMuQVNEU2VsZWN0aW9uRWRpdFBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmZpZ3VyZXMuTGlzdEZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmZpZ3VyZXMuTW9kZWxEaWFnbm9zdGljSW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmxheW91dHMuUm93TGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUuSVRyZWVFbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgTWVzc2FnZVJlZmVyZW5jZUVkaXRQYXJ0IGV4dGVuZHMgQmFzZUVkaXRQYXJ0IGltcGxlbWVudHMgSUZlZWRiYWNrSGFuZGxlcgoteyAgIAotICBwcm90ZWN0ZWQgRmlndXJlIGNvbnRlbnRQYW5lOyAgCi0gIHByb3RlY3RlZCBMYWJlbCBsYWJlbDsKLSAgcHJvdGVjdGVkIFJvd0xheW91dCByb3dMYXlvdXQ7Ci0gIAotICBwcml2YXRlIEZpZ3VyZSBtZXNzYWdlTGFiZWxXcmFwcGVyOwotICBwcml2YXRlIExhYmVsIG1lc3NhZ2VMYWJlbDsKLSAgCi0gIHByb3RlY3RlZCBBU0RTZWxlY3Rpb25FZGl0UG9saWN5IHNlbGVjdGlvbkhhbmRsZXNFZGl0UG9saWN5ID0gbmV3IEFTRFNlbGVjdGlvbkVkaXRQb2xpY3koKTsKLSAgCi0gIHByb3RlY3RlZCBJRmlndXJlIGNyZWF0ZUZpZ3VyZSgpCi0gIHsKLSAgICBMaXN0RmlndXJlIGZpZ3VyZSA9IG5ldyBMaXN0RmlndXJlKHRydWUpOwotICAgIGZpZ3VyZS5zZXRPcGFxdWUodHJ1ZSk7Ci0gICAgZmlndXJlLnNldFBhaW50Rmlyc3RMaW5lKGZhbHNlKTsKLSAgICBmaWd1cmUuc2V0QmFja2dyb3VuZENvbG9yKENvbG9yQ29uc3RhbnRzLnRvb2x0aXBCYWNrZ3JvdW5kKTsKLQotICAgIHJvd0xheW91dCA9IG5ldyBSb3dMYXlvdXQoKTsKLSAgICBmaWd1cmUuc2V0TGF5b3V0TWFuYWdlcihyb3dMYXlvdXQpOyAKLSAgICBsYWJlbCA9IG5ldyBMYWJlbCgpOwotICAgIGxhYmVsLnNldExhYmVsQWxpZ25tZW50KExhYmVsLkxFRlQpOwotICAgIC8vbGFiZWwuc2V0Rm9udChEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMubWVkaXVtRm9udCk7IAotICAgIGxhYmVsLnNldEJvcmRlcihuZXcgTWFyZ2luQm9yZGVyKDIsIDE2LCAyICwxMCkpOwotICAgIGZpZ3VyZS5hZGQobGFiZWwpOyAgCi0gICAgCi0gICAgY29udGVudFBhbmUgPSBuZXcgTGlzdEZpZ3VyZSgpOwotICAgICgoTGlzdEZpZ3VyZSljb250ZW50UGFuZSkuc2V0T3BhcXVlKHRydWUpOwotICAgIGNvbnRlbnRQYW5lLnNldEJhY2tncm91bmRDb2xvcihDb2xvckNvbnN0YW50cy5saXN0QmFja2dyb3VuZCk7Ci0gICAgVG9vbGJhckxheW91dCB0b29sYmFyTGF5b3V0ID0gbmV3IFRvb2xiYXJMYXlvdXQoZmFsc2UpOwotICAgIAotICAgIC8qCi0gICAgVG9vbGJhckxheW91dCB0b29sYmFyTGF5b3V0ID0gbmV3IFRvb2xiYXJMYXlvdXQoZmFsc2UpCi0gICAgewotICAgICAgIC8vIFRPRE8gKGNzKSBjb25zaWRlciBtaW5vciB0d2VhayBoZXJlIHRvIGVuc3VyZSB0aGF0IHRoZSByb3cgZmlsbHMgdXAgdGhlIGF2YWlsYWJsZSBzcGFjZSAgICAgICAgICAgICAKLSAgICAgICAvLyB2ZXJ0aWNhbGx5Li4uIHdpdGhvdXQgdGhpcyBhIGJpdCBvZiB0cmltIGlzIHZpc2libGUgYXQgdGhlIGJvdHRvbSBvZiB0aGUgbGlzdAotICAgICAgIC8vIHdoZW4gdGhlIHBhcmFtIGxhYmVscyBhcmUgZ2l2ZW4gYSBtYXJnaW4gd2lkdGggdG9wIGFuZCBib3R0b20gPCAgJzQnIAotICAgICAgIHB1YmxpYyB2b2lkIGxheW91dChJRmlndXJlIHBhcmVudCkKLSAgICAgICB7Ci0gICAgICAgICBzdXBlci5sYXlvdXQocGFyZW50KTsKLSAgICAgICAgIGlmIChjaGlsZHJlbi5zaXplKCkgPT0gMSkKLSAgICAgICAgIHsKLSAgICAgICAgICAgIEZpZ3VyZSBjaGlsZCA9IChGaWd1cmUpY2hpbGRyZW4uZ2V0KDApOwotICAgICAgICAgICAgLy9jaGlsZC5nZXRCb3VuZHMoKS5oZWlnaHQgPSBwYXJlbnQuZ2V0Q2xpZW50QXJlYSgpLmhlaWdodDsKLSAgICAgICAgIH0gIAotICAgICAgIH0KLSAgICB9OyAgICAgCi0gICAgICovCi0gICAgdG9vbGJhckxheW91dC5zZXRTdHJldGNoTWlub3JBeGlzKHRydWUpOwotICAgIGNvbnRlbnRQYW5lLnNldExheW91dE1hbmFnZXIodG9vbGJhckxheW91dCk7Ci0gICAgZmlndXJlLmFkZChjb250ZW50UGFuZSk7Ci0gICAgCi0gICAgcm93TGF5b3V0LnNldENvbnN0cmFpbnQobGFiZWwsICJNZXNzYWdlTGFiZWwiKTsgLy8kTk9OLU5MUy0xJAotICAgIHJvd0xheW91dC5zZXRDb25zdHJhaW50KGNvbnRlbnRQYW5lLCAiTWVzc2FnZUNvbnRlbnRQYW5lIik7IC8vJE5PTi1OTFMtMSQKLSAgIAotICAgIC8vIHJtYWg6IFRoZSBibG9jayBvZiBjb2RlIGJlbG93IGhhcyBiZWVuIG1vdmVkIGZyb20gcmVmcmVzaFZpc3VhbHMoKS4gIFdlJ3JlCi0gICAgLy8gYXNzdW1pbmcgdGhlIHJlYWQtb25seSBzdGF0ZSBvZiB0aGUgRWRpdFBhcnQgd2lsbCBuZXZlciBjaGFuZ2Ugb25jZSB0aGUKLSAgICAvLyBFZGl0UGFydCBoYXMgYmVlbiBjcmVhdGVkLgotICAgIGlmIChpc1JlYWRPbmx5KCkpIAotICAgIHsKLSAgICAgIGxhYmVsLnNldEZvcmVncm91bmRDb2xvcihEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMucmVhZE9ubHlMYWJlbENvbG9yKTsKLSAgICAgIGxhYmVsLmdldFBhcmVudCgpLnNldEJhY2tncm91bmRDb2xvcihEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMucmVhZE9ubHlNZXNzYWdlUmVmSGVhZGluZ0NvbG9yKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGxhYmVsLnNldEZvcmVncm91bmRDb2xvcihDb2xvckNvbnN0YW50cy5ibGFjayk7Ci0gICAgICBsYWJlbC5nZXRQYXJlbnQoKS5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3JDb25zdGFudHMudG9vbHRpcEJhY2tncm91bmQpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZmlndXJlOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVFZGl0UG9saWNpZXMoKQotICB7Ci0gICAgICBzdXBlci5jcmVhdGVFZGl0UG9saWNpZXMoKTsgIAotCSAgaWYgKCFpc1JlYWRPbmx5KCkpIHsKLQkJICBpbnN0YWxsRWRpdFBvbGljeShFZGl0UG9saWN5LlBSSU1BUllfRFJBR19ST0xFLCBuZXcgQVNERHJhZ0FuZERyb3BFZGl0UG9saWN5KGdldFZpZXdlcigpLCBzZWxlY3Rpb25IYW5kbGVzRWRpdFBvbGljeSkpOwotCSAgfQotCSAgaW5zdGFsbEVkaXRQb2xpY3koRWRpdFBvbGljeS5TRUxFQ1RJT05fRkVFREJBQ0tfUk9MRSwgc2VsZWN0aW9uSGFuZGxlc0VkaXRQb2xpY3kpOwotICB9Ci0gIAotICBwdWJsaWMgRHJhZ1RyYWNrZXIgZ2V0RHJhZ1RyYWNrZXIoUmVxdWVzdCByZXF1ZXN0KQotICB7Ci0gICAgcmV0dXJuIG5ldyBBU0RHcmFwaE5vZGVEcmFnVHJhY2tlcigoRWRpdFBhcnQpdGhpcyk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBJRmlndXJlIGdldENvbnRlbnRQYW5lKCkKLSAgewotICAgIHJldHVybiBjb250ZW50UGFuZTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgcmVmcmVzaFZpc3VhbHMoKQotICB7ICAgCi0gICAgc3VwZXIucmVmcmVzaFZpc3VhbHMoKTsKLSAgICBJTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlID0gKElNZXNzYWdlUmVmZXJlbmNlKWdldE1vZGVsKCk7Ci0gICAgCi0gICAgaWYgKG1lc3NhZ2UgaW5zdGFuY2VvZiBJVHJlZUVsZW1lbnQpIHsKLSAgICAJbGFiZWwuc2V0VGV4dCgoKElUcmVlRWxlbWVudCkgbWVzc2FnZSkuZ2V0VGV4dCgpKTsKLSAgICAJbGFiZWwuc2V0SWNvbigoKElUcmVlRWxlbWVudCkgbWVzc2FnZSkuZ2V0SW1hZ2UoKSk7Ci0gICAgfQotICAgIAotICAgIC8vIFJlc2l6ZSBjb2x1bW4gd2lkdGhzLiAgU2l6ZXMgbWF5IGhhdmUgc2hydW5rLgotICAgIHJvd0xheW91dC5nZXRDb2x1bW5EYXRhKCkuY2xlYXJDb2x1bW5XaWR0aHMoKTsKLSAgICBmb3IgKEVkaXRQYXJ0IHBhcmVudCA9IGdldFBhcmVudCgpOyBwYXJlbnQgIT0gbnVsbDsgcGFyZW50ID0gcGFyZW50LmdldFBhcmVudCgpKQotICAgIHsKLSAgICAgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBJbnRlcmZhY2VFZGl0UGFydCkKLSAgICAgIHsgCi0gICAgICAgICgoR3JhcGhpY2FsRWRpdFBhcnQpcGFyZW50KS5nZXRGaWd1cmUoKS5pbnZhbGlkYXRlVHJlZSgpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCB2b2lkIHJlZnJlc2hDaGlsZHJlbigpIHsKLQkgIHN1cGVyLnJlZnJlc2hDaGlsZHJlbigpOwotICAgICAgcmVmcmVzaE1lc3NhZ2UoKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgcmVmcmVzaE1lc3NhZ2UoKSB7Ci0JICBpZiAoZ2V0TW9kZWxDaGlsZHJlbigpLnNpemUoKSA+IDApIHsKLQkJICBpZiAobWVzc2FnZUxhYmVsV3JhcHBlciAhPSBudWxsKSB7Ci0JCQkgIGNvbnRlbnRQYW5lLnJlbW92ZShtZXNzYWdlTGFiZWxXcmFwcGVyKTsKLQkJCSAgbWVzc2FnZUxhYmVsV3JhcHBlciA9IG51bGw7Ci0JCSAgfQotCSAgfQotCSAgZWxzZSB7Ci0JCSAgaWYgKG1lc3NhZ2VMYWJlbFdyYXBwZXIgPT0gbnVsbCkgewotCQkJICBtZXNzYWdlTGFiZWxXcmFwcGVyID0gbmV3IEZpZ3VyZSgpOwotCQkJICBtZXNzYWdlTGFiZWwgPSBuZXcgTGFiZWwoKTsKLQkJCSAgCi0JCQkgIFRvb2xiYXJMYXlvdXQgdG9vbGJhckxheW91dCA9IG5ldyBUb29sYmFyTGF5b3V0KGZhbHNlKQotCQkJICAgIHsKLQkJCQkgIC8vIFdlIHdhbnQgdG8gY2VudGVyIHRoZSB0ZXh0Ci0JCQkgICAgICAgcHVibGljIHZvaWQgbGF5b3V0KElGaWd1cmUgcGFyZW50KQotCQkJICAgICAgIHsKLQkJCSAgICAgICAgIHN1cGVyLmxheW91dChwYXJlbnQpOwotCi0JCQkgICAgICAgICBpZiAocGFyZW50LmdldENoaWxkcmVuKCkuc2l6ZSgpID09IDEgJiYgcGFyZW50LmdldENoaWxkcmVuKCkuZ2V0KDApIGluc3RhbmNlb2YgTGFiZWwpCi0JCQkgICAgICAgICB7Ci0JCQkgICAgICAgICAgICBwYXJlbnQuc2V0U2l6ZShwYXJlbnQuZ2V0U2l6ZSgpLndpZHRoLCBwYXJlbnQuZ2V0U2l6ZSgpLmhlaWdodCArIDMpOwotCQkJICAgICAgICAgICAgTGFiZWwgY2hpbGQgPSAoTGFiZWwpIHBhcmVudC5nZXRDaGlsZHJlbigpLmdldCgwKTsKLQkJCSAgICAgICAgICAgIGludCBuZXdYQW1vdW50ID0gKHBhcmVudC5nZXRTaXplKCkud2lkdGggLSBjaGlsZC5nZXRTaXplKCkud2lkdGgpIC8gMjsKLQkJCSAgICAgICAgICAgIFBvaW50IHAgPSBjaGlsZC5nZXRMb2NhdGlvbigpOwotCQkJICAgICAgICAgICAgY2hpbGQuc2V0TG9jYXRpb24obmV3IFBvaW50KHAueCArIG5ld1hBbW91bnQsIHAueSArIDMpKTsKLQkJCSAgICAgICAgIH0gIAotCQkJICAgICAgIH0KLQkJCSAgICB9OyAgICAgCi0KLQkJCSAgbWVzc2FnZUxhYmVsV3JhcHBlci5zZXRMYXlvdXRNYW5hZ2VyKHRvb2xiYXJMYXlvdXQpOwotCQkJICBtZXNzYWdlTGFiZWxXcmFwcGVyLmFkZChtZXNzYWdlTGFiZWwpOwotCQkJICBjb250ZW50UGFuZS5hZGQobWVzc2FnZUxhYmVsV3JhcHBlcik7Ci0JCSAgfQotCQkgIAotCQkgIExpc3QgZXJyb3JMaXN0ID0gZ2V0RXJyb3JzKCk7Ci0JCSAgTGlzdCB3YXJuTGlzdCA9IGdldFdhcm5pbmdzKCk7Ci0KLQkJICBpZiAoZXJyb3JMaXN0LnNpemUoKSA+IDApIHsKLQkJCSAgTW9kZWxEaWFnbm9zdGljSW5mbyBpbmZvID0gKE1vZGVsRGlhZ25vc3RpY0luZm8pIGVycm9yTGlzdC5nZXQoMCk7Ci0JCQkgIG1lc3NhZ2VMYWJlbC5zZXRUZXh0KCIgICIgKyBpbmZvLmdldERlc2NyaXB0aW9uVGV4dCgpICsgIiAgIik7ICAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJCSAgbWVzc2FnZUxhYmVsLnNldEZvcmVncm91bmRDb2xvcihpbmZvLmdldERlc2NyaXB0aW9uVGV4dENvbG9yKCkpOwotCQkgIH0KLQkJICBlbHNlIGlmICh3YXJuTGlzdC5zaXplKCkgPiAwKXsKLQkJCSAgTW9kZWxEaWFnbm9zdGljSW5mbyBpbmZvID0gKE1vZGVsRGlhZ25vc3RpY0luZm8pIHdhcm5MaXN0LmdldCgwKTsKLQkJCSAgbWVzc2FnZUxhYmVsLnNldFRleHQoIiAgIiArIGluZm8uZ2V0RGVzY3JpcHRpb25UZXh0KCkgKyAiICAiKTsgIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJICBtZXNzYWdlTGFiZWwuc2V0Rm9yZWdyb3VuZENvbG9yKGluZm8uZ2V0RGVzY3JpcHRpb25UZXh0Q29sb3IoKSk7Ci0JCSAgfQotCQkgIGVsc2UgewotCQkJICBtZXNzYWdlTGFiZWwuc2V0VGV4dCgiIik7IC8vJE5PTi1OTFMtMSQKLQkJCSAgbWVzc2FnZUxhYmVsLnNldEZvcmVncm91bmRDb2xvcihDb2xvckNvbnN0YW50cy5ibGFjayk7Ci0JCSAgfQotCSAgfQotICB9Ci0gIAotICBwcm90ZWN0ZWQgTGlzdCBnZXRFcnJvcnMoKSB7Ci0JICBJTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmID0gKElNZXNzYWdlUmVmZXJlbmNlKSBnZXRNb2RlbCgpOwotCSAgcmV0dXJuIGdldERpYWdub3N0aWNNZXNzYWdlVHlwZShtZXNzYWdlUmVmLmdldERpYWdub3N0aWNNZXNzYWdlcygpLCBNb2RlbERpYWdub3N0aWNJbmZvLkVSUk9SX1RZUEUpOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgTGlzdCBnZXRXYXJuaW5ncygpIHsKLQkgIElNZXNzYWdlUmVmZXJlbmNlIG1lc3NhZ2VSZWYgPSAoSU1lc3NhZ2VSZWZlcmVuY2UpIGdldE1vZGVsKCk7Ci0JICByZXR1cm4gZ2V0RGlhZ25vc3RpY01lc3NhZ2VUeXBlKG1lc3NhZ2VSZWYuZ2V0RGlhZ25vc3RpY01lc3NhZ2VzKCksIE1vZGVsRGlhZ25vc3RpY0luZm8uV0FSTklOR19UWVBFKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIExpc3QgZ2V0RGlhZ25vc3RpY01lc3NhZ2VUeXBlKExpc3QgZGlhZ25vc3RpY0luZm8sIGludCB0eXBlKSB7Ci0JICBMaXN0IGxpc3RUeXBlID0gbmV3IEFycmF5TGlzdCgpOwotCSAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGRpYWdub3N0aWNJbmZvLnNpemUoKTsgaW5kZXgrKykgewotCQkgIE1vZGVsRGlhZ25vc3RpY0luZm8gaW5mbyA9IChNb2RlbERpYWdub3N0aWNJbmZvKSBkaWFnbm9zdGljSW5mby5nZXQoaW5kZXgpOwotCQkgIGlmIChpbmZvLmdldFR5cGUoKSA9PSB0eXBlKSB7Ci0JCQkgIGxpc3RUeXBlLmFkZChpbmZvKTsKLQkJICB9Ci0JICB9Ci0JICAKLQkgIHJldHVybiBsaXN0VHlwZTsKLSAgfQotCi0gIHByb3RlY3RlZCBMaXN0IGdldE1vZGVsQ2hpbGRyZW4oKQotICB7Ci0gICAgSU1lc3NhZ2VSZWZlcmVuY2UgdGhlTWVzc2FnZSA9IChJTWVzc2FnZVJlZmVyZW5jZSlnZXRNb2RlbCgpOwotICAgIHJldHVybiB0aGVNZXNzYWdlLmdldFBhcmFtZXRlcnMoKTsgICAKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZE5vdGlmeSgpCi0gIHsKLSAgICBJbnRlcmZhY2VFZGl0UGFydC5hdHRhY2hUb0ludGVyZmFjZUVkaXRQYXJ0KHRoaXMsIHJvd0xheW91dCk7Ci0gICAgc3VwZXIuYWRkTm90aWZ5KCk7ICAgIAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBhZGRGZWVkYmFjaygpIHsKLQkgIGxhYmVsLmdldFBhcmVudCgpLnNldEJhY2tncm91bmRDb2xvcihEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMudGFibGVDZWxsU2VsZWN0aW9uQ29sb3IpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVtb3ZlRmVlZGJhY2soKSB7Ci0JICBpZiAoaXNSZWFkT25seSgpKSB7Ci0JICAgIGxhYmVsLmdldFBhcmVudCgpLnNldEJhY2tncm91bmRDb2xvcihEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMucmVhZE9ubHlNZXNzYWdlUmVmSGVhZGluZ0NvbG9yKTsKLQkgIH0KLQkgIGVsc2UgewotCQkgIGxhYmVsLmdldFBhcmVudCgpLnNldEJhY2tncm91bmRDb2xvcihDb2xvckNvbnN0YW50cy50b29sdGlwQmFja2dyb3VuZCk7Ci0JICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBFZGl0UGFydCBnZXRSZWxhdGl2ZUVkaXRQYXJ0KGludCBkaXJlY3Rpb24pCi0gIHsgIAotICAgIEVkaXRQYXJ0IGVkaXRQYXJ0ID0gc3VwZXIuZ2V0UmVsYXRpdmVFZGl0UGFydChkaXJlY3Rpb24pOwotICAgIGlmIChkaXJlY3Rpb24gPT0gUG9zaXRpb25Db25zdGFudHMuU09VVEggJiYgZWRpdFBhcnQgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBlZGl0UGFydCA9IEVkaXRQYXJ0TmF2aWdhdGlvbkhhbmRsZXJVdGlsLmdldE5leHRJbnRlcmZhY2UodGhpcyk7Ci0gICAgfSAgICAgICAgCi0gICAgcmV0dXJuIGVkaXRQYXJ0OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvT3BlcmF0aW9uRWRpdFBhcnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9PcGVyYXRpb25FZGl0UGFydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjU5ZjQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9PcGVyYXRpb25FZGl0UGFydC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0czsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkNvbG9yQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5GaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLklGaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5NYXJnaW5Cb3JkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLlBhbmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Ub29sYmFyTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUmVjdGFuZ2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5SZXF1ZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5SZXF1ZXN0Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi50b29scy5EaXJlY3RFZGl0TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuQ29sb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5EZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5kaXJlY3RlZGl0LkxhYmVsQ2VsbEVkaXRvckxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5kaXJlY3RlZGl0LkxhYmVsRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cG9saWNpZXMuQVNETGFiZWxEaXJlY3RFZGl0UG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBvbGljaWVzLkFTRFNlbGVjdGlvbkVkaXRQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5maWd1cmVzLkxpc3RGaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lLklUcmVlRWxlbWVudDsKLQotCi1wdWJsaWMgY2xhc3MgT3BlcmF0aW9uRWRpdFBhcnQgZXh0ZW5kcyBCYXNlRWRpdFBhcnQgaW1wbGVtZW50cyBJTmFtZWRFZGl0UGFydAoteyAKLSAgcHJvdGVjdGVkIEZpZ3VyZSBjb250ZW50UGFuZTsKLSAgcHJvdGVjdGVkIExhYmVsIGxhYmVsOwotICBwcml2YXRlIENvbG9yIHVuc2VsZWN0ZWRDb2xvcjsKLSAgcHJpdmF0ZSBGaWd1cmUgbGFiZWxIb2xkZXI7Ci0gIAotICBwdWJsaWMgT3BlcmF0aW9uRWRpdFBhcnQoKQotICB7Ci0gIH0KLQotICBwcm90ZWN0ZWQgSUZpZ3VyZSBjcmVhdGVGaWd1cmUoKQotICB7Ci0gICAgRmlndXJlIGZpZ3VyZSA9IG5ldyBGaWd1cmUoKTsKLSAgICBmaWd1cmUuc2V0QmFja2dyb3VuZENvbG9yKERlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50cy50YWJsZU9wZXJhdGlvbkhlYWRpbmdDb2xvcik7Ci0gICAgVG9vbGJhckxheW91dCB0b29sYmFyTGF5b3V0ID0gbmV3IFRvb2xiYXJMYXlvdXQoZmFsc2UpOyAgIAotICAgIHRvb2xiYXJMYXlvdXQuc2V0U3RyZXRjaE1pbm9yQXhpcyh0cnVlKTsgICAKLSAgICB0b29sYmFyTGF5b3V0LnNldE1pbm9yQWxpZ25tZW50KFRvb2xiYXJMYXlvdXQuQUxJR05fVE9QTEVGVCk7Ci0gICAgZmlndXJlLnNldExheW91dE1hbmFnZXIodG9vbGJhckxheW91dCk7Ci0gICAgCi0gICAgbGFiZWxIb2xkZXIgPSBuZXcgUGFuZWwoKTsKLSAgICBsYWJlbEhvbGRlci5zZXRCYWNrZ3JvdW5kQ29sb3IoRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLnRhYmxlT3BlcmF0aW9uSGVhZGluZ0NvbG9yKTsKLSAgICBsYWJlbEhvbGRlci5zZXRMYXlvdXRNYW5hZ2VyKG5ldyBUb29sYmFyTGF5b3V0KHRydWUpKTsKLSAgICBmaWd1cmUuYWRkKGxhYmVsSG9sZGVyKTsKLSAgICAKLSAgICBsYWJlbCA9IG5ldyBMYWJlbCgiT3BlcmF0aW9uIik7IC8vJE5PTi1OTFMtMSQKLS8vICAgIGxhYmVsLnNldEZvbnQoRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLnNtYWxsQm9sZEZvbnQpOwotICAgIGxhYmVsLnNldEJvcmRlcihuZXcgTWFyZ2luQm9yZGVyKDIsIDIsMiwyKSk7Ci0gICAgbGFiZWwuc2V0VGV4dEFsaWdubWVudChMYWJlbC5MRUZUKTsgIAotICAgIGxhYmVsSG9sZGVyLmFkZChsYWJlbCk7Ci0gICAgCi0gICAgCi0gICAgY29udGVudFBhbmUgPSBuZXcgTGlzdEZpZ3VyZSgpOyAgCi0gICAgVG9vbGJhckxheW91dCB0b29sYmFyTGF5b3V0MiA9IG5ldyBUb29sYmFyTGF5b3V0KGZhbHNlKTsKLSAgICB0b29sYmFyTGF5b3V0Mi5zZXRTdHJldGNoTWlub3JBeGlzKHRydWUpOwotICAgIGNvbnRlbnRQYW5lLnNldExheW91dE1hbmFnZXIodG9vbGJhckxheW91dDIpOwotICAgIGZpZ3VyZS5hZGQoY29udGVudFBhbmUpOwotIAotICAgIC8vIHJtYWg6IFRoZSBibG9jayBvZiBjb2RlIGJlbG93IGhhcyBiZWVuIG1vdmVkIGZyb20gcmVmcmVzaFZpc3VhbHMoKS4gIFdlJ3JlCi0gICAgLy8gYXNzdW1pbmcgdGhlIHJlYWQtb25seSBzdGF0ZSBvZiB0aGUgRWRpdFBhcnQgd2lsbCBuZXZlciBjaGFuZ2Ugb25jZSB0aGUKLSAgICAvLyBFZGl0UGFydCBoYXMgYmVlbiBjcmVhdGVkLgotICAgIGlmIChpc1JlYWRPbmx5KCkpIHsKLSAgICAJbGFiZWwuc2V0Rm9yZWdyb3VuZENvbG9yKERlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50cy5yZWFkT25seUxhYmVsQ29sb3IpOwotICAgCSAgICBmaWd1cmUuc2V0QmFja2dyb3VuZENvbG9yKERlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50cy5yZWFkT25seVRhYmxlT3BlcmF0aW9uSGVhZGluZ0NvbG9yKTsKLSAgIAkgICAgbGFiZWxIb2xkZXIuc2V0QmFja2dyb3VuZENvbG9yKERlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50cy5yZWFkT25seVRhYmxlT3BlcmF0aW9uSGVhZGluZ0NvbG9yKTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgCWxhYmVsLnNldEZvcmVncm91bmRDb2xvcihDb2xvckNvbnN0YW50cy5ibGFjayk7Ci0gCSAgICBmaWd1cmUuc2V0QmFja2dyb3VuZENvbG9yKERlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50cy50YWJsZU9wZXJhdGlvbkhlYWRpbmdDb2xvcik7Ci0gICAJICAgIGxhYmVsSG9sZGVyLnNldEJhY2tncm91bmRDb2xvcihEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMudGFibGVPcGVyYXRpb25IZWFkaW5nQ29sb3IpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZmlndXJlOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVFZGl0UG9saWNpZXMoKQotICB7Ci0gICAgICBzdXBlci5jcmVhdGVFZGl0UG9saWNpZXMoKTsKLQkgIGluc3RhbGxFZGl0UG9saWN5KEVkaXRQb2xpY3kuRElSRUNUX0VESVRfUk9MRSwgbmV3IEFTRExhYmVsRGlyZWN0RWRpdFBvbGljeSgpKTsKLQkgIGluc3RhbGxFZGl0UG9saWN5KEVkaXRQb2xpY3kuU0VMRUNUSU9OX0ZFRURCQUNLX1JPTEUsIG5ldyBBU0RTZWxlY3Rpb25FZGl0UG9saWN5KCkpOwotICB9Ci0gIAotICBwcml2YXRlIERpcmVjdEVkaXRNYW5hZ2VyIG1hbmFnZXI7Ci0gIHB1YmxpYyB2b2lkIHBlcmZvcm1EaXJlY3RFZGl0KFBvaW50IGN1cnNvckxvY2F0aW9uKXsKLQkgIFJlY3RhbmdsZSB0ZXh0QXJlYSA9IGdldExhYmVsRmlndXJlKCkuZ2V0Qm91bmRzKCk7Ci0JICB0ZXh0QXJlYS53aWR0aCA9IGdldEZpZ3VyZSgpLmdldEJvdW5kcygpLndpZHRoOwotCSAgaWYgKGN1cnNvckxvY2F0aW9uID09IG51bGwgfHwgaGl0VGVzdCh0ZXh0QXJlYSwgY3Vyc29yTG9jYXRpb24pICYmICFpc1JlYWRPbmx5KCkpIHsKLQkJICBtYW5hZ2VyID0gbmV3IExhYmVsRWRpdE1hbmFnZXIodGhpcywgbmV3IExhYmVsQ2VsbEVkaXRvckxvY2F0b3IodGhpcywgY3Vyc29yTG9jYXRpb24pKTsKLQkJICBtYW5hZ2VyLnNob3coKTsKLQkgIH0KLSAgICBlbHNlIGlmIChnZXRGaWd1cmUoKSBpbnN0YW5jZW9mIEZpZ3VyZSAmJiBoaXRUZXN0RmlndXJlKChGaWd1cmUpIGdldEZpZ3VyZSgpLCBjdXJzb3JMb2NhdGlvbikgJiYgaXNSZWFkT25seSgpKSB7Ci0gICAgICBkb09wZW5OZXdFZGl0b3IoKTsgICAgCi0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBwZXJmb3JtUmVxdWVzdChSZXF1ZXN0IHJlcSkgewotCSAgaWYgKHJlcS5nZXRUeXBlKCkuZXF1YWxzKFJlcXVlc3RDb25zdGFudHMuUkVRX0RJUkVDVF9FRElUKSkgewotCQkgIHBlcmZvcm1EaXJlY3RFZGl0KG51bGwpOwotCSAgfQotICB9Ci0gIAotICBwdWJsaWMgTGFiZWwgZ2V0TGFiZWxGaWd1cmUoKSB7Ci0JICByZXR1cm4gbGFiZWw7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCB2b2lkIHJlZnJlc2hWaXN1YWxzKCkKLSAgeyAgIAotICAgIHN1cGVyLnJlZnJlc2hWaXN1YWxzKCk7Ci0gICAgSU9wZXJhdGlvbiBvcGVyYXRpb24gPSAoSU9wZXJhdGlvbilnZXRNb2RlbCgpOwotICAgIGxhYmVsLnNldFRleHQob3BlcmF0aW9uLmdldE5hbWUoKSk7Ci0gICAgCi0gICAgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIElUcmVlRWxlbWVudCkgewotICAgIAlsYWJlbC5zZXRJY29uKCgoSVRyZWVFbGVtZW50KSBvcGVyYXRpb24pLmdldEltYWdlKCkpOwotICAgIH0KLSAgfQotICAKLSAgcHVibGljIElGaWd1cmUgZ2V0Q29udGVudFBhbmUoKQotICB7Ci0gICAgcmV0dXJuIGNvbnRlbnRQYW5lOwotICB9Ci0KLSAgcHJvdGVjdGVkIExpc3QgZ2V0TW9kZWxDaGlsZHJlbigpCi0gIHsKLSAgICBJT3BlcmF0aW9uIHRoZU9wZXJhdGlvbiA9IChJT3BlcmF0aW9uKWdldE1vZGVsKCk7Ci0gICAgcmV0dXJuIHRoZU9wZXJhdGlvbi5nZXRNZXNzYWdlcygpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBhZGRGZWVkYmFjaygpIHsKLQkgIHVuc2VsZWN0ZWRDb2xvciA9IGxhYmVsSG9sZGVyLmdldEJhY2tncm91bmRDb2xvcigpOwotLy8JICBnZXRGaWd1cmUoKS5zZXRCYWNrZ3JvdW5kQ29sb3IoRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLnRhYmxlQ2VsbFNlbGVjdGlvbkNvbG9yKTsKLQkgIGxhYmVsSG9sZGVyLnNldEJhY2tncm91bmRDb2xvcihEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMudGFibGVDZWxsU2VsZWN0aW9uQ29sb3IpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCByZW1vdmVGZWVkYmFjaygpIHsKLQkgIGlmICh1bnNlbGVjdGVkQ29sb3IgIT0gbnVsbCkgewotCQkgIGxhYmVsSG9sZGVyLnNldEJhY2tncm91bmRDb2xvcih1bnNlbGVjdGVkQ29sb3IpOwotCSAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvUGFyYW1ldGVyRWRpdFBhcnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9QYXJhbWV0ZXJFZGl0UGFydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZWZhZmU1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9QYXJhbWV0ZXJFZGl0UGFydC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0czsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuQ29sb3JDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuR3JhcGhpY3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLklGaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5NYXJnaW5Cb3JkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLlBhbmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Qb3NpdGlvbkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuVG9vbGJhckxheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LlJlY3RhbmdsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRHJhZ1RyYWNrZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5HcmFwaGljYWxFZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuUmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuUmVxdWVzdENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYudG9vbHMuRGlyZWN0RWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZGlyZWN0ZWRpdC5MYWJlbENlbGxFZGl0b3JMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZGlyZWN0ZWRpdC5MYWJlbEVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBvbGljaWVzLkFTRERyYWdBbmREcm9wRWRpdFBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwb2xpY2llcy5BU0RHcmFwaE5vZGVEcmFnVHJhY2tlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwb2xpY2llcy5BU0RMYWJlbERpcmVjdEVkaXRQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cG9saWNpZXMuQVNEU2VsZWN0aW9uRWRpdFBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmxheW91dHMuUm93TGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JVHJlZUVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBQYXJhbWV0ZXJFZGl0UGFydCBleHRlbmRzIEJhc2VFZGl0UGFydCBpbXBsZW1lbnRzIElGZWVkYmFja0hhbmRsZXIsIElOYW1lZEVkaXRQYXJ0Ci17ICAgCi0gIHByb3RlY3RlZCBGaWd1cmUgY29udGVudFBhbmU7Ci0gIHByb3RlY3RlZCBMYWJlbCBwYXJhbWV0ZXJOYW1lOwotICBwcm90ZWN0ZWQgUm93TGF5b3V0IHJvd0xheW91dCA9IG5ldyBSb3dMYXlvdXQoKTsKLSAgcHJvdGVjdGVkIEltYWdlIGxhYmVsSW1hZ2U7Ci0gIAotICBwcm90ZWN0ZWQgQVNEU2VsZWN0aW9uRWRpdFBvbGljeSBzZWxlY3Rpb25IYW5kbGVzRWRpdFBvbGljeSA9IG5ldyBBU0RTZWxlY3Rpb25FZGl0UG9saWN5KCk7Ci0KLSAgcHJvdGVjdGVkIElGaWd1cmUgY3JlYXRlRmlndXJlKCkKLSAgewotICAgIElGaWd1cmUgZmlndXJlID0gbmV3IEZpZ3VyZSgpCi0gICAgewotICAgICAgcHVibGljIHZvaWQgcGFpbnQoR3JhcGhpY3MgZ3JhcGhpY3MpCi0gICAgICB7Ci0gICAgICAgIHN1cGVyLnBhaW50KGdyYXBoaWNzKTsKLSAgICAgICAgZ3JhcGhpY3MucHVzaFN0YXRlKCk7Ci0gICAgICAgIC8vIHRoaXMgYml0IG9mIGNvZGUgaXMgdXNlZCB0byBkcmF3IHRoZSBkaXZpZGluZyBsaW5lIGJldHdlZW4KLSAgICAgICAgLy8gdGhlIHBhcmFtZXRlciBuYW1lIGFuZCB0aGUgcGFyYW1ldGVyIHR5cGUKLSAgICAgICAgLy8gd2UgbWlnaHQgd2FudCB0byBjb25zaWRlciBtb3ZpbmcgdGhpcyBsaW5lIGRyYXdpbmcgaW50byB0aGUgCi0gICAgICAgIC8vIG1lc3NhZ2UgcmVmZXJlbmNlJ3MgZmlndXJlIHdoZXJlIHRoZSBob3Jpem9udGFsIGxpbmVzIGFyZSBkb3duJ3MKLSAgICAgICAgUmVjdGFuZ2xlIHIgPSBwYXJhbWV0ZXJOYW1lLmdldEJvdW5kcygpOwotICAgICAgICBpbnQgeD0gci54ICsgIHIud2lkdGggLTE7Ci0gICAgICAgIGdyYXBoaWNzLnNldEZvcmVncm91bmRDb2xvcihDb2xvckNvbnN0YW50cy5saWdodEdyYXkpOwotICAgICAgICBncmFwaGljcy5kcmF3TGluZSh4LCByLnksIHgsIHIueSArIHIuaGVpZ2h0KTsKLSAgICAgICAgZ3JhcGhpY3MucG9wU3RhdGUoKTsKLSAgICAgIH0KLSAgICB9OyAgICAgICAgCi0gICAgLy90b29sYmFyTGF5b3V0LnNldE1pbm9yQWxpZ25tZW50KFRvb2xiYXJMYXlvdXQuQUxJR05fQ0VOVEVSKTsKLSAgICBmaWd1cmUuc2V0Rm9yZWdyb3VuZENvbG9yKENvbG9yQ29uc3RhbnRzLmJsYWNrKTsKLSAgICBmaWd1cmUuc2V0TGF5b3V0TWFuYWdlcihyb3dMYXlvdXQpOyAKLSAgICAvKgotICAgIFN0cmluZyB4ID0gIiI7Ci0gICAgaW50IHNpemUgPSAoaW50KShNYXRoLnJhbmRvbSgpKjUwKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKLSAgICB7Ci0gICAgICB4ICs9ICJ4IjsKLSAgICB9ICAKLSAgICBTdHJpbmcgeSA9ICIiOwotICAgIGludCBzaXpleSA9IChpbnQpKE1hdGgucmFuZG9tKCkqNTApOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZXk7IGkrKykKLSAgICB7Ci0gICAgICB5ICs9ICJ5IjsKLSAgICB9ICovCi0gICAgCi0gICAgY29udGVudFBhbmUgPSBuZXcgRmlndXJlKCk7Ci0gICAgVG9vbGJhckxheW91dCB0b29sYmFyTGF5b3V0MiA9IG5ldyBUb29sYmFyTGF5b3V0KGZhbHNlKTsKLSAgICB0b29sYmFyTGF5b3V0Mi5zZXRTdHJldGNoTWlub3JBeGlzKHRydWUpOyAgIAotICAgIGNvbnRlbnRQYW5lLnNldExheW91dE1hbmFnZXIodG9vbGJhckxheW91dDIpOwotCi0gICAgSUZpZ3VyZSBwYXJhbWV0ZXJOYW1lUGFuZSA9IG5ldyBQYW5lbCgpOwotICAgIHRvb2xiYXJMYXlvdXQyID0gbmV3IFRvb2xiYXJMYXlvdXQoZmFsc2UpOyAgCi0gICAgdG9vbGJhckxheW91dDIuc2V0U3RyZXRjaE1pbm9yQXhpcyh0cnVlKTsgICAKLSAgICBwYXJhbWV0ZXJOYW1lUGFuZS5zZXRMYXlvdXRNYW5hZ2VyKHRvb2xiYXJMYXlvdXQyKTsKLSAgICAKLSAgICBwYXJhbWV0ZXJOYW1lID0gbmV3IExhYmVsKCk7Ci0gICAgcGFyYW1ldGVyTmFtZS5zZXRMYWJlbEFsaWdubWVudChMYWJlbC5MRUZUKTsKLSAgICBwYXJhbWV0ZXJOYW1lLnNldEJvcmRlcihuZXcgTWFyZ2luQm9yZGVyKDQsMTAsNCwxMCkpOwotICAgIAotICAgIHBhcmFtZXRlck5hbWVQYW5lLmFkZChwYXJhbWV0ZXJOYW1lKTsKLSAgICBmaWd1cmUuYWRkKHBhcmFtZXRlck5hbWVQYW5lKTsKLSAgICBmaWd1cmUuYWRkKGNvbnRlbnRQYW5lKTsKLSAgICByb3dMYXlvdXQuc2V0Q29uc3RyYWludChwYXJhbWV0ZXJOYW1lUGFuZSwgInBhcmFtZXRlck5hbWUiKTsgLy8kTk9OLU5MUy0xJAotICAgIHJvd0xheW91dC5zZXRDb25zdHJhaW50KGNvbnRlbnRQYW5lLCAicGFyYW1ldGVyVHlwZSIpOyAvLyROT04tTkxTLTEkCi0gICAgCi0gICAgaWYgKGdldE1vZGVsKCkgaW5zdGFuY2VvZiBJVHJlZUVsZW1lbnQpIHsKLSAgICAJbGFiZWxJbWFnZSA9ICgoSVRyZWVFbGVtZW50KSBnZXRNb2RlbCgpKS5nZXRJbWFnZSgpOwotICAgIH0KLSAgICAKLSAgICAvLyBybWFoOiBUaGUgYmxvY2sgb2YgY29kZSBiZWxvdyBoYXMgYmVlbiBtb3ZlZCBmcm9tIHJlZnJlc2hWaXN1YWxzKCkuICBXZSdyZQotICAgIC8vIGFzc3VtaW5nIHRoZSByZWFkLW9ubHkgc3RhdGUgb2YgdGhlIEVkaXRQYXJ0IHdpbGwgbmV2ZXIgY2hhbmdlIG9uY2UgdGhlCi0gICAgLy8gRWRpdFBhcnQgaGFzIGJlZW4gY3JlYXRlZC4KLSAgICBpZiAoaXNSZWFkT25seSgpKSAKLSAgICB7Ci0gICAgICBwYXJhbWV0ZXJOYW1lLnNldEZvcmVncm91bmRDb2xvcihEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMucmVhZE9ubHlMYWJlbENvbG9yKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHBhcmFtZXRlck5hbWUuc2V0Rm9yZWdyb3VuZENvbG9yKENvbG9yQ29uc3RhbnRzLmJsYWNrKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZpZ3VyZTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgYWRkTm90aWZ5KCkKLSAgewotICAgIEludGVyZmFjZUVkaXRQYXJ0LmF0dGFjaFRvSW50ZXJmYWNlRWRpdFBhcnQodGhpcywgcm93TGF5b3V0KTsKLSAgICBzdXBlci5hZGROb3RpZnkoKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBEaXJlY3RFZGl0TWFuYWdlciBtYW5hZ2VyOwotICAKLSAgcHVibGljIHZvaWQgcGVyZm9ybURpcmVjdEVkaXQoUG9pbnQgY3Vyc29yTG9jYXRpb24pewotCSAgaWYgKCFpc1JlYWRPbmx5KCkgJiYgKGN1cnNvckxvY2F0aW9uID09IG51bGwgfHwgaGl0VGVzdChnZXRMYWJlbEZpZ3VyZSgpLmdldEJvdW5kcygpLCBjdXJzb3JMb2NhdGlvbikpKSB7Ci0JCW1hbmFnZXIgPSBuZXcgTGFiZWxFZGl0TWFuYWdlcih0aGlzLCBuZXcgTGFiZWxDZWxsRWRpdG9yTG9jYXRvcih0aGlzLCBjdXJzb3JMb2NhdGlvbikpOwotCQltYW5hZ2VyLnNob3coKTsKLQkgIH0KLSAgICBlbHNlIGlmIChnZXRGaWd1cmUoKSBpbnN0YW5jZW9mIEZpZ3VyZSAmJiBoaXRUZXN0RmlndXJlKChGaWd1cmUpIGdldEZpZ3VyZSgpLCBjdXJzb3JMb2NhdGlvbikgJiYgaXNSZWFkT25seSgpKSB7Ci0gICAgICBkb09wZW5OZXdFZGl0b3IoKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHBlcmZvcm1SZXF1ZXN0KFJlcXVlc3QgcmVxKSB7Ci0JICBpZiAocmVxLmdldFR5cGUoKS5lcXVhbHMoUmVxdWVzdENvbnN0YW50cy5SRVFfRElSRUNUX0VESVQpKSB7Ci0JCSAgcGVyZm9ybURpcmVjdEVkaXQobnVsbCk7Ci0JICB9Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCB2b2lkIGNyZWF0ZUVkaXRQb2xpY2llcygpCi0gIHsKLSAgICAgIHN1cGVyLmNyZWF0ZUVkaXRQb2xpY2llcygpOwotCSAgaW5zdGFsbEVkaXRQb2xpY3koRWRpdFBvbGljeS5ESVJFQ1RfRURJVF9ST0xFLCBuZXcgQVNETGFiZWxEaXJlY3RFZGl0UG9saWN5KCkpOwotCSAgaWYgKCFpc1JlYWRPbmx5KCkpIHsKLQkJICBpbnN0YWxsRWRpdFBvbGljeShFZGl0UG9saWN5LlBSSU1BUllfRFJBR19ST0xFLCBuZXcgQVNERHJhZ0FuZERyb3BFZGl0UG9saWN5KGdldFZpZXdlcigpLCBzZWxlY3Rpb25IYW5kbGVzRWRpdFBvbGljeSkpOwotCSAgfQotCSAgaW5zdGFsbEVkaXRQb2xpY3koRWRpdFBvbGljeS5TRUxFQ1RJT05fRkVFREJBQ0tfUk9MRSwgc2VsZWN0aW9uSGFuZGxlc0VkaXRQb2xpY3kpOwotICB9Ci0gIAotICBwdWJsaWMgRHJhZ1RyYWNrZXIgZ2V0RHJhZ1RyYWNrZXIoUmVxdWVzdCByZXF1ZXN0KQotICB7Ci0gICAgcmV0dXJuIG5ldyBBU0RHcmFwaE5vZGVEcmFnVHJhY2tlcigoRWRpdFBhcnQpdGhpcyk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBMYWJlbCBnZXRMYWJlbEZpZ3VyZSgpIHsKLQkgIHJldHVybiBwYXJhbWV0ZXJOYW1lOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgdm9pZCByZWZyZXNoVmlzdWFscygpCi0gIHsgICAKLSAgICBzdXBlci5yZWZyZXNoVmlzdWFscygpOwotICAgIElQYXJhbWV0ZXIgcGFyYW1ldGVyID0gKElQYXJhbWV0ZXIpZ2V0TW9kZWwoKTsKLSAgICBwYXJhbWV0ZXJOYW1lLnNldFRleHQocGFyYW1ldGVyLmdldE5hbWUoKSk7Ci0gICAgaWYgKGxhYmVsSW1hZ2UgIT0gbnVsbCkgewotICAgIAlwYXJhbWV0ZXJOYW1lLnNldEljb24obGFiZWxJbWFnZSk7Ci0gICAgfQotICAgIAotICAgIC8vIFJlc2l6ZSBjb2x1bW4gd2lkdGhzLiAgU2l6ZXMgbWF5IGhhdmUgc2hydW5rLgotICAgIHJvd0xheW91dC5nZXRDb2x1bW5EYXRhKCkuY2xlYXJDb2x1bW5XaWR0aHMoKTsKLSAgICBmb3IgKEVkaXRQYXJ0IHBhcmVudCA9IGdldFBhcmVudCgpOyBwYXJlbnQgIT0gbnVsbDsgcGFyZW50ID0gcGFyZW50LmdldFBhcmVudCgpKQotICAgIHsKLSAgICAgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBJbnRlcmZhY2VFZGl0UGFydCkKLSAgICAgIHsgCi0gICAgICAgICgoR3JhcGhpY2FsRWRpdFBhcnQpcGFyZW50KS5nZXRGaWd1cmUoKS5pbnZhbGlkYXRlVHJlZSgpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBMaXN0IGdldE1vZGVsQ2hpbGRyZW4oKQotICB7Ci0JICAvLyBPbiB0aGUgZmFjYWRlIGxldmVsLCBvbmUgSVBhcmFtZXRlciB3aWxsIGhhdmUgdHdvIGVkaXRhYmxlIHZhbHVlcy4KLQkgIC8vIEEgbmFtZSBhbmQgYSB0eXBlIHJlZmVyZW5jZS4gIFRvIG1ha2UgZGlyZWN0IGVkaXRpbmcgYW5kIHNlbGVjdGlvbgotCSAgLy8gZmVlZGJhY2sgZWFzaWVyLCB3ZSBzaG93IHRoaXMgb25lIGZhY2FkZSBvYmplY3QgYXMgdHdvIGVkaXQgcGFydHMuCi0JICAvLyBUaGUgYXBwcm9hY2ggaXMgdG8gdGhlIHNhbWUgZmFjYWRlIG1vZGVsLCB0byBkcml2ZSB0aGUgc2Vjb25kIChjaGlsZAotCSAgLy8gRWRpdFBhcnQuCi0KLSAgICAgIC8vIFRPRE8gKGNzKSBSaWNoIGNvbnNpZGVyIGNyZWF0aW5nIDIgaGFyZCBjb2RlIGVkaXQgcGFydHMKLSAgICAgIC8vIHRoZSBmaXJzdCBmb3IgdGhlIHBhcmFtZXRlciBuYW1lCi0gICAgICAvLyB0aGUgc2Vjb25kIGZvciB0aGUgcGFyYW10ZXIgdHlwZQotCSAgTGlzdCBraWRzID0gbmV3IEFycmF5TGlzdCgpOwotCSAga2lkcy5hZGQoZ2V0TW9kZWwoKSk7Ci0JICByZXR1cm4ga2lkczsKLSAgfQotICAKLSAgcHVibGljIElGaWd1cmUgZ2V0Q29udGVudFBhbmUoKQotICB7Ci0gICAgcmV0dXJuIGNvbnRlbnRQYW5lOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBhZGRGZWVkYmFjaygpIHsJCi0JICBwYXJhbWV0ZXJOYW1lLmdldFBhcmVudCgpLnNldEJhY2tncm91bmRDb2xvcihEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMudGFibGVDZWxsU2VsZWN0aW9uQ29sb3IpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVtb3ZlRmVlZGJhY2soKSB7Ci0gICAgICBwYXJhbWV0ZXJOYW1lLmdldFBhcmVudCgpLnNldEJhY2tncm91bmRDb2xvcihmaWd1cmUuZ2V0QmFja2dyb3VuZENvbG9yKCkpOwotICB9Ci0gIAotICBwdWJsaWMgRWRpdFBhcnQgZ2V0UmVsYXRpdmVFZGl0UGFydChpbnQgZGlyZWN0aW9uKQotICB7ICAKLSAgICBFZGl0UGFydCBlZGl0UGFydCA9IHN1cGVyLmdldFJlbGF0aXZlRWRpdFBhcnQoZGlyZWN0aW9uKTsKLSAgICBpZiAoZGlyZWN0aW9uID09IFBvc2l0aW9uQ29uc3RhbnRzLlNPVVRIICYmIGVkaXRQYXJ0ID09IG51bGwpCi0gICAgewotICAgICAgZWRpdFBhcnQgPSBFZGl0UGFydE5hdmlnYXRpb25IYW5kbGVyVXRpbC5nZXROZXh0SW50ZXJmYWNlKHRoaXMpOyAgICAgICAgICAgCi0gICAgfSAgICAgICAKLSAgICByZXR1cm4gZWRpdFBhcnQ7Ci0gIH0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL1BhcmFtZXRlclR5cGVFZGl0UGFydC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL1BhcmFtZXRlclR5cGVFZGl0UGFydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NWM3OTZhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9QYXJhbWV0ZXJUeXBlRWRpdFBhcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQwMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuQ29sb3JDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuSUZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLk1hcmdpbkJvcmRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTW91c2VFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTW91c2VMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuUGFuZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLlBvc2l0aW9uQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUmVjdGFuZ2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuTGF5ZXJDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLlJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLlJlcXVlc3RDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmVkaXRwb2xpY2llcy5EaXJlY3RFZGl0UG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5yZXF1ZXN0cy5EaXJlY3RFZGl0UmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLkRlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmRpcmVjdGVkaXQuVHlwZVJlZmVyZW5jZURpcmVjdEVkaXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBvbGljaWVzLkFTRFNlbGVjdGlvbkVkaXRQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5maWd1cmVzLkJhc2VMaW5rSWNvbkZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmZpZ3VyZXMuTW9kZWxEaWFnbm9zdGljSW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmxheW91dHMuUm93TGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JVHJlZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLnV0aWwuSU9wZW5FeHRlcm5hbEVkaXRvckhlbHBlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Nb3VzZU1vdGlvbkxpc3RlbmVyLlN0dWI7Ci0KLXB1YmxpYyBjbGFzcyBQYXJhbWV0ZXJUeXBlRWRpdFBhcnQgZXh0ZW5kcyBCYXNlRWRpdFBhcnQgaW1wbGVtZW50cyBJRmVlZGJhY2tIYW5kbGVyLCBJTmFtZWRFZGl0UGFydAoteyAgIAotCXByb3RlY3RlZCBTaW1wbGVEaXJlY3RFZGl0UG9saWN5IHNpbXBsZURpcmVjdEVkaXRQb2xpY3kgPSBuZXcgU2ltcGxlRGlyZWN0RWRpdFBvbGljeSgpOwotCXByb3RlY3RlZCBMYWJlbCBwYXJhbWV0ZXJUeXBlOwotCXByb3RlY3RlZCBSb3dMYXlvdXQgcm93TGF5b3V0ID0gbmV3IFJvd0xheW91dCgpOwotCi0JICBwdWJsaWMgdm9pZCBwZXJmb3JtUmVxdWVzdChSZXF1ZXN0IHJlcSkgewotCQkgIGlmIChyZXEuZ2V0VHlwZSgpLmVxdWFscyhSZXF1ZXN0Q29uc3RhbnRzLlJFUV9ESVJFQ1RfRURJVCkpIHsKLQkJCSAgcGVyZm9ybURpcmVjdEVkaXQobnVsbCk7Ci0JCSAgfQotCSAgfQotCSAgCi0JcHJvdGVjdGVkIE15TW91c2VFdmVudExpc3RlbmVyIG1vdXNlRXZlbnRMaXN0ZW5lcjsKLQlwcml2YXRlIEJhc2VMaW5rSWNvbkZpZ3VyZSBsaW5rSWNvbkZpZ3VyZTsKLQotCXByb3RlY3RlZCBJRmlndXJlIGNyZWF0ZUZpZ3VyZSgpCi0JewotCQlJRmlndXJlIGZpZ3VyZSA9IG5ldyBQYW5lbCgpOwotCQlmaWd1cmUuc2V0TGF5b3V0TWFuYWdlcihyb3dMYXlvdXQpOyAKLQotCQlwYXJhbWV0ZXJUeXBlID0gbmV3IExhYmVsKCk7Ci0JCXBhcmFtZXRlclR5cGUuc2V0TGFiZWxBbGlnbm1lbnQoTGFiZWwuTEVGVCk7Ci0JCXBhcmFtZXRlclR5cGUuc2V0Qm9yZGVyKG5ldyBNYXJnaW5Cb3JkZXIoNCwxMiw0LDIwKSk7Ci0JCWZpZ3VyZS5hZGQocGFyYW1ldGVyVHlwZSk7Ci0KLQkJLy8gcm1haDogVGhlIGJsb2NrIG9mIGNvZGUgYmVsb3cgaGFzIGJlZW4gbW92ZWQgZnJvbSByZWZyZXNoVmlzdWFscygpLiAgV2UncmUKLQkJLy8gYXNzdW1pbmcgdGhlIHJlYWQtb25seSBzdGF0ZSBvZiB0aGUgRWRpdFBhcnQgd2lsbCBuZXZlciBjaGFuZ2Ugb25jZSB0aGUKLQkJLy8gRWRpdFBhcnQgaGFzIGJlZW4gY3JlYXRlZC4KLQkJaWYgKGlzUmVhZE9ubHkoKSkgCi0JCXsKLQkJCXBhcmFtZXRlclR5cGUuc2V0Rm9yZWdyb3VuZENvbG9yKERlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50cy5yZWFkT25seUxhYmVsQ29sb3IpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJcGFyYW1ldGVyVHlwZS5zZXRGb3JlZ3JvdW5kQ29sb3IoQ29sb3JDb25zdGFudHMuYmxhY2spOwotCQl9Ci0KLQkJcmV0dXJuIGZpZ3VyZTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCByZWZyZXNoVmlzdWFscygpCi0JeyAgIAotCQlzdXBlci5yZWZyZXNoVmlzdWFscygpOwotCQlJUGFyYW1ldGVyIHBhcmFtID0gKElQYXJhbWV0ZXIpIGdldE1vZGVsKCk7Ci0JCVN0cmluZyBuYW1lID0gcGFyYW0uZ2V0Q29tcG9uZW50TmFtZSgpOwotCQlwYXJhbWV0ZXJUeXBlLnNldFRleHQobmFtZSk7Ci0KLQkJSW1hZ2UgaW1hZ2UgPSAoKElUcmVlRWxlbWVudClnZXRNb2RlbCgpKS5nZXRTZWNvbmRhcnlJbWFnZSgpOwotCQlpZiAoaW1hZ2UgIT0gbnVsbCkKLQkJewotCQkJcGFyYW1ldGVyVHlwZS5zZXRJY29uKGltYWdlKTsKLQkJfQotCi0JCXBhcmFtZXRlclR5cGUuc2V0Rm9yZWdyb3VuZENvbG9yKENvbG9yQ29uc3RhbnRzLmJsYWNrKTsKLQotCQlMaXN0IGRpYWdub3N0aWNNZXNzYWdlcyA9IHBhcmFtLmdldERpYWdub3N0aWNNZXNzYWdlcygpOwotCQlJdGVyYXRvciBpdCA9IGRpYWdub3N0aWNNZXNzYWdlcy5pdGVyYXRvcigpOwotCQlNb2RlbERpYWdub3N0aWNJbmZvIGVycm9ySW5mbyA9IG51bGw7Ci0JCXdoaWxlIChpdC5oYXNOZXh0KCkgJiYgZXJyb3JJbmZvID09IG51bGwpIHsKLQkJCU1vZGVsRGlhZ25vc3RpY0luZm8gdGVtcCA9IChNb2RlbERpYWdub3N0aWNJbmZvKSBpdC5uZXh0KCk7Ci0JCQlpZiAodGVtcC5nZXRUeXBlKCkgPT0gTW9kZWxEaWFnbm9zdGljSW5mby5FUlJPUl9UWVBFKSB7Ci0JCQkJZXJyb3JJbmZvID0gdGVtcDsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCi0JCWlmIChlcnJvckluZm8gIT0gbnVsbCkgewotCQkJcGFyYW1ldGVyVHlwZS5zZXRUZXh0KGVycm9ySW5mby5nZXREZXNjcmlwdGlvblRleHQoKSk7Ci0JCQlwYXJhbWV0ZXJUeXBlLnNldEZvcmVncm91bmRDb2xvcihlcnJvckluZm8uZ2V0RGVzY3JpcHRpb25UZXh0Q29sb3IoKSk7Ci0JCQlwYXJhbWV0ZXJUeXBlLnNldEljb24obnVsbCk7Ci0JCX0KLQotCQkvLyBGb3JjZSB0aGUgTGlua0ljb25Db2x1bW4gdG8gcmVzaXplIGFuZCByZWxheW91dCBpdHNlbGYuCi0JCWlmIChnZXRJbnRlcmZhY2VFZGl0UGFydCgpICE9IG51bGwpIHsKLQkJCSgoRmlndXJlKSBnZXRJbnRlcmZhY2VFZGl0UGFydCgpLmdldExpbmtJY29uQ29sdW1uKCkpLmludmFsaWRhdGUoKTsKLQkJCXJlZnJlc2hMaW5rRmlndXJlKG5ldyBQb2ludCgtMSwgLTEpKTsKLQkJfQotCX0KLQotCXByaXZhdGUgSW50ZXJmYWNlRWRpdFBhcnQgZ2V0SW50ZXJmYWNlRWRpdFBhcnQoKSB7Ci0JCUVkaXRQYXJ0IGVwID0gZ2V0UGFyZW50KCk7Ci0JCXdoaWxlIChlcCAhPSBudWxsICYmICEoZXAgaW5zdGFuY2VvZiBJbnRlcmZhY2VFZGl0UGFydCkpIHsKLQkJCWVwID0gZXAuZ2V0UGFyZW50KCk7Ci0JCX0KLQotCQlpZiAoZXAgaW5zdGFuY2VvZiBJbnRlcmZhY2VFZGl0UGFydCkgewotCQkJcmV0dXJuIChJbnRlcmZhY2VFZGl0UGFydCkgZXA7Ci0JCX0KLQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBhZGRGZWVkYmFjaygpIHsJIAkJICAgICAgICAgIAotCQlmaWd1cmUuc2V0QmFja2dyb3VuZENvbG9yKERlc2lnblZpZXdHcmFwaGljc0NvbnN0YW50cy50YWJsZUNlbGxTZWxlY3Rpb25Db2xvcik7Ci0JfQotCi0JcHVibGljIHZvaWQgcmVtb3ZlRmVlZGJhY2soKSB7Ci0JCWZpZ3VyZS5zZXRCYWNrZ3JvdW5kQ29sb3IoZmlndXJlLmdldFBhcmVudCgpLmdldEJhY2tncm91bmRDb2xvcigpKTsKLQl9Ci0KLQlwdWJsaWMgTGFiZWwgZ2V0TGFiZWxGaWd1cmUoKSB7Ci0JCXJldHVybiBwYXJhbWV0ZXJUeXBlOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUVkaXRQb2xpY2llcygpCi0JewotCQlzdXBlci5jcmVhdGVFZGl0UG9saWNpZXMoKTsKLQkJaW5zdGFsbEVkaXRQb2xpY3koRWRpdFBvbGljeS5TRUxFQ1RJT05fRkVFREJBQ0tfUk9MRSwgbmV3IEFTRFNlbGVjdGlvbkVkaXRQb2xpY3koKSk7Ci0JCWluc3RhbGxFZGl0UG9saWN5KEVkaXRQb2xpY3kuRElSRUNUX0VESVRfUk9MRSwgc2ltcGxlRGlyZWN0RWRpdFBvbGljeSk7Ci0JfQotCi0JcHVibGljIHZvaWQgcGVyZm9ybURpcmVjdEVkaXQoUG9pbnQgY3Vyc29yTG9jYXRpb24pIHsKLQkJaWYgKGN1cnNvckxvY2F0aW9uID09IG51bGwgfHwgKGhpdFRlc3QocGFyYW1ldGVyVHlwZSwgY3Vyc29yTG9jYXRpb24pICYmICFpc1JlYWRPbmx5KCkpKSB7IAotCQkJSVBhcmFtZXRlciBwYXJhbSA9IChJUGFyYW1ldGVyKSBnZXRNb2RlbCgpOwotCi0JCQlUeXBlUmVmZXJlbmNlRGlyZWN0RWRpdE1hbmFnZXIgbWFuYWdlciA9IG5ldyBUeXBlUmVmZXJlbmNlRGlyZWN0RWRpdE1hbmFnZXIocGFyYW0sIHRoaXMsIHBhcmFtZXRlclR5cGUpOyAgIAotCQkJc2ltcGxlRGlyZWN0RWRpdFBvbGljeS5zZXREZWxlZ2F0ZShtYW5hZ2VyKTsKLQkJCW1hbmFnZXIuc2hvdygpOwotCi0KLQkJfQotCQllbHNlIGlmIChwYXJhbWV0ZXJUeXBlLmdldFBhcmVudCgpIGluc3RhbmNlb2YgRmlndXJlICYmCi0JCQkJIGhpdFRlc3RGaWd1cmUoKEZpZ3VyZSkgcGFyYW1ldGVyVHlwZS5nZXRQYXJlbnQoKSwgY3Vyc29yTG9jYXRpb24pICYmIGlzUmVhZE9ubHkoKSkgewotCQkJZG9PcGVuTmV3RWRpdG9yKCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCBhY3RpdmF0ZSgpIHsKLQkJc3VwZXIuYWN0aXZhdGUoKTsKLQotCQlJRmlndXJlIHByaW1hcnlMYXllciA9IGdldExheWVyKExheWVyQ29uc3RhbnRzLlBSSU1BUllfTEFZRVIpOwotCQltb3VzZUV2ZW50TGlzdGVuZXIgPSBuZXcgTXlNb3VzZUV2ZW50TGlzdGVuZXIoKTsKLQkJcHJpbWFyeUxheWVyLmFkZE1vdXNlTW90aW9uTGlzdGVuZXIobW91c2VFdmVudExpc3RlbmVyKTsKLQkJcHJpbWFyeUxheWVyLmFkZE1vdXNlTGlzdGVuZXIobW91c2VFdmVudExpc3RlbmVyKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBkZWFjdGl2YXRlKCkgewotCQlpZiAobW91c2VFdmVudExpc3RlbmVyICE9IG51bGwpIHsKLQkJCUlGaWd1cmUgcHJpbWFyeUxheWVyID0gZ2V0TGF5ZXIoTGF5ZXJDb25zdGFudHMuUFJJTUFSWV9MQVlFUik7Ci0JCQlwcmltYXJ5TGF5ZXIucmVtb3ZlTW91c2VNb3Rpb25MaXN0ZW5lcihtb3VzZUV2ZW50TGlzdGVuZXIpOwotCQkJcHJpbWFyeUxheWVyLnJlbW92ZU1vdXNlTGlzdGVuZXIobW91c2VFdmVudExpc3RlbmVyKTsKLQkJfQotCi0JCUludGVyZmFjZUVkaXRQYXJ0IGVwID0gZ2V0SW50ZXJmYWNlRWRpdFBhcnQoKTsKLQkJaWYgKGVwICE9IG51bGwgJiYgbGlua0ljb25GaWd1cmUgIT0gbnVsbCkgewotCQkJSUZpZ3VyZSBmaWcgPSBlcC5nZXRMaW5rSWNvbkNvbHVtbigpOwotCQkJaWYgKGZpZy5nZXRDaGlsZHJlbigpLmNvbnRhaW5zKGxpbmtJY29uRmlndXJlKSkgewotCQkJCWVwLmdldExpbmtJY29uQ29sdW1uKCkucmVtb3ZlKGxpbmtJY29uRmlndXJlKTsKLQkJCX0KLQkJfQotCX0KLQotCi0JcHJpdmF0ZSBjbGFzcyBTaW1wbGVEaXJlY3RFZGl0UG9saWN5IGV4dGVuZHMgRGlyZWN0RWRpdFBvbGljeSAKLQl7Ci0JCXByb3RlY3RlZCBUeXBlUmVmZXJlbmNlRGlyZWN0RWRpdE1hbmFnZXIgZGVsZWdhdGU7Ci0KLQkJcHVibGljIHZvaWQgc2V0RGVsZWdhdGUoVHlwZVJlZmVyZW5jZURpcmVjdEVkaXRNYW5hZ2VyIGRlbGVnYXRlKQotCQl7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotCQkJdGhpcy5kZWxlZ2F0ZSA9IGRlbGVnYXRlOwotCQl9Ci0KLQkJcHJvdGVjdGVkIG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kIGdldERpcmVjdEVkaXRDb21tYW5kKGZpbmFsIERpcmVjdEVkaXRSZXF1ZXN0IHJlcXVlc3QpIAotCQl7IAotCQkJcmV0dXJuIG5ldyBDb21tYW5kKCkgLy9BYnN0cmFjdENvbW1hbmQoKQotCQkJewotCQkJCXB1YmxpYyB2b2lkIGV4ZWN1dGUoKQotCQkJCXsgICAgICAgICAgICAgICAgICAgICAgIAotCQkJCQlpZiAoZGVsZWdhdGUgIT0gbnVsbCkKLQkJCQkJewotCQkJCQkJZGVsZWdhdGUucGVyZm9ybUVkaXQocmVxdWVzdC5nZXRDZWxsRWRpdG9yKCkpOwotCQkJCQl9ICAKLQkJCQl9ICAgICAKLQotCQkJCXB1YmxpYyB2b2lkIHJlZG8oKQotCQkJCXsKLQkJCQl9ICAKLQotCQkJCXB1YmxpYyB2b2lkIHVuZG8oKQotCQkJCXsKLQkJCQl9ICAgICAKLQotCQkJCXB1YmxpYyBib29sZWFuIGNhbkV4ZWN1dGUoKQotCQkJCXsKLQkJCQkJcmV0dXJuIHRydWU7Ci0JCQkJfQotCQkJfTsKLQkJfQotCi0JCXByb3RlY3RlZCB2b2lkIHNob3dDdXJyZW50RWRpdFZhbHVlKERpcmVjdEVkaXRSZXF1ZXN0IHJlcXVlc3QpIAotCQl7ICAgICAgCi0JCQkvL2hhY2sgdG8gcHJldmVudCBhc3luYyBsYXlvdXQgZnJvbSBwbGFjaW5nIHRoZSBjZWxsIGVkaXRvciB0d2ljZS4KLQkJCWdldEhvc3RGaWd1cmUoKS5nZXRVcGRhdGVNYW5hZ2VyKCkucGVyZm9ybVVwZGF0ZSgpOwotCQl9Ci0JfQotCi0JcHVibGljIEVkaXRQYXJ0IGdldFJlbGF0aXZlRWRpdFBhcnQoaW50IGRpcmVjdGlvbikKLQl7ICAgICAgICAgCi0JCUVkaXRQYXJ0IGVkaXRQYXJ0ID0gc3VwZXIuZ2V0UmVsYXRpdmVFZGl0UGFydChkaXJlY3Rpb24pOwotCQlpZiAoZGlyZWN0aW9uID09IFBvc2l0aW9uQ29uc3RhbnRzLlNPVVRIICYmIGVkaXRQYXJ0ID09IG51bGwpCi0JCXsKLQkJCWVkaXRQYXJ0ID0gRWRpdFBhcnROYXZpZ2F0aW9uSGFuZGxlclV0aWwuZ2V0TmV4dEludGVyZmFjZSh0aGlzKTsKLQkJfSAgIAotCQlyZXR1cm4gZWRpdFBhcnQ7Ci0JfQotCi0JcHJpdmF0ZSBjbGFzcyBNeU1vdXNlRXZlbnRMaXN0ZW5lciBleHRlbmRzIFN0dWIgaW1wbGVtZW50cyBNb3VzZUxpc3RlbmVyIHsKLQkJcHVibGljIHZvaWQgbW91c2VSZWxlYXNlZChNb3VzZUV2ZW50IG1lKSB7IH0KLQkJcHVibGljIHZvaWQgbW91c2VEb3VibGVDbGlja2VkKE1vdXNlRXZlbnQgbWUpIHsgfQotCi0JCXB1YmxpYyB2b2lkIG1vdXNlTW92ZWQoTW91c2VFdmVudCBtZSkgewotCQkJUG9pbnQgcG9pbnRlciA9IG1lLmdldExvY2F0aW9uKCk7Ci0JCQlyZWZyZXNoTGlua0ZpZ3VyZShwb2ludGVyKTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIG1vdXNlUHJlc3NlZChNb3VzZUV2ZW50IG1lKSB7Ci0JCQlQb2ludCBwb2ludGVyID0gbWUuZ2V0TG9jYXRpb24oKTsKLQkJCW9wZW5FeHRlcm5hbEVkaXRvcihwb2ludGVyKTsKLQkJfQotCQkKLQkJcHVibGljIHZvaWQgbW91c2VIb3ZlcihNb3VzZUV2ZW50IG1lKSB7Ci0JCQlQb2ludCBwb2ludGVyID0gbWUuZ2V0TG9jYXRpb24oKTsKLQkJCXNob3dQcmV2aWV3RGlhbG9nKHBvaW50ZXIpOwotCQl9Ci0JfQotCQotCXByaXZhdGUgdm9pZCBzaG93UHJldmlld0RpYWxvZyhQb2ludCBwb2ludCkgewotCQlSZWN0YW5nbGUgbGlua0ZpZ0JvdW5kcyA9IGdldExpbmtGaWd1cmVCb3VuZHMoKTsKLQkJaWYgKGxpbmtGaWdCb3VuZHMgPT0gbnVsbCkgewotCQkJcmV0dXJuOwotCQl9Ci0KLQkJUmVjdGFuZ2xlIHRlc3Rib3VuZHMgPSBuZXcgUmVjdGFuZ2xlKGxpbmtGaWdCb3VuZHMueCwgbGlua0ZpZ0JvdW5kcy55LCAwLCBsaW5rRmlnQm91bmRzLmhlaWdodCk7Ci0KLQkJaWYgKHBvaW50ZXJJblJhbmdlKHRlc3Rib3VuZHMsIHBvaW50KSkgewotCQkJSU9wZW5FeHRlcm5hbEVkaXRvckhlbHBlciBoZWxwZXIgPSBnZXRFeHRlcm5hbEVkaXRvck9wZW5lcigpOwotCQkJaGVscGVyLnNob3dQcmV2aWV3KCk7Ci0JCX0KLQl9Ci0KLQkvLyBNZXRob2RzIGJlbG93IGhhbmRsZSB0aGUgTGluayBGaWd1cmUuLi4uLgotCXByaXZhdGUgdm9pZCBlbXBoYXNpemVMaW5rRmlndXJlKCkgewotCQlsaW5rSWNvbkZpZ3VyZS5zZXRDb2xvcihDb2xvckNvbnN0YW50cy5ibHVlKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgdW5lbXBoYXNpemVMaW5rRmlndXJlKCkgewotCQlsaW5rSWNvbkZpZ3VyZS5zZXRDb2xvcihDb2xvckNvbnN0YW50cy5saWdodEdyYXkpOwotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBwb2ludGVySW5SYW5nZShSZWN0YW5nbGUgZmlnQm91bmRzLCBQb2ludCBwb2ludGVyKSB7Ci0JCVJlY3RhbmdsZSBsaW5rQm91bmRzID0gZ2V0TGlua0ZpZ3VyZUJvdW5kcygpOwotCi0JCWludCBlbnRpcmVYID0gZmlnQm91bmRzLng7Ci0JCWludCBlbnRpcmVZID0gZmlnQm91bmRzLnk7Ci0JCWludCBlbnRpcmVXaWR0aCA9IGZpZ0JvdW5kcy53aWR0aCArIGxpbmtCb3VuZHMud2lkdGg7Ci0JCWludCBlbnRpcmVIZWlnaHQgPSBmaWdCb3VuZHMuaGVpZ2h0OwotCQlSZWN0YW5nbGUgZW50aXJlQm91bmRzID0gbmV3IFJlY3RhbmdsZShlbnRpcmVYLCBlbnRpcmVZLCBlbnRpcmVXaWR0aCwgZW50aXJlSGVpZ2h0KTsKLQotCQlyZXR1cm4gZW50aXJlQm91bmRzLmNvbnRhaW5zKHBvaW50ZXIpOwotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBjb250YWluc0xpbmtGaWd1cmUoKSB7Ci0JCUl0ZXJhdG9yIGl0ID0gZ2V0SW50ZXJmYWNlRWRpdFBhcnQoKS5nZXRMaW5rSWNvbkNvbHVtbigpLmdldENoaWxkcmVuKCkuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJT2JqZWN0IGl0ZW0gPSBpdC5uZXh0KCk7Ci0JCQlpZiAoaXRlbS5lcXVhbHMobGlua0ljb25GaWd1cmUpKSB7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHJpdmF0ZSBSZWN0YW5nbGUgZ2V0TGlua0ZpZ3VyZUJvdW5kcygpIHsKLQkJaWYgKGNvbnRhaW5zTGlua0ZpZ3VyZSgpKSB7Ci0JCQlyZXR1cm4gbGlua0ljb25GaWd1cmUuZ2V0Qm91bmRzKCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCX0KLSAKLQlwcml2YXRlIElPcGVuRXh0ZXJuYWxFZGl0b3JIZWxwZXIgZ2V0RXh0ZXJuYWxFZGl0b3JPcGVuZXIoKSB7Ci0JCUlPcGVuRXh0ZXJuYWxFZGl0b3JIZWxwZXIgb3BlbkV4dGVybmFsRWRpdG9ySGVscGVyID0gbnVsbDsKLQkJCWlmIChQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKSAhPSBudWxsKSB7Ci0JCQkJSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpOwotCQkJCWlmIChwYWdlLmdldEFjdGl2ZUVkaXRvcigpICE9IG51bGwpIHsKLQkJCQkJT2JqZWN0IGFkYXB0ZWQgPSBwYWdlLmdldEFjdGl2ZUVkaXRvcigpLmdldEFkYXB0ZXIoSU9wZW5FeHRlcm5hbEVkaXRvckhlbHBlci5jbGFzcyk7Ci0JCQkJCWlmIChhZGFwdGVkIGluc3RhbmNlb2YgSU9wZW5FeHRlcm5hbEVkaXRvckhlbHBlcikgewotCQkJCQkJb3BlbkV4dGVybmFsRWRpdG9ySGVscGVyID0gKElPcGVuRXh0ZXJuYWxFZGl0b3JIZWxwZXIpIGFkYXB0ZWQ7Ci0JCQkJCQlvcGVuRXh0ZXJuYWxFZGl0b3JIZWxwZXIuc2V0TW9kZWwoZ2V0TW9kZWwoKSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0KLQkJcmV0dXJuIG9wZW5FeHRlcm5hbEVkaXRvckhlbHBlcjsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcmVmcmVzaExpbmtGaWd1cmUoUG9pbnQgcG9pbnQpIHsKLQkJUmVjdGFuZ2xlIGZpZ0JvdW5kcyA9IGdldEZpZ3VyZSgpLmdldFBhcmVudCgpLmdldFBhcmVudCgpLmdldEJvdW5kcygpOwotCi0JCUlPcGVuRXh0ZXJuYWxFZGl0b3JIZWxwZXIgb3BlbkhlbHBlciA9IGdldEV4dGVybmFsRWRpdG9yT3BlbmVyKCk7Ci0JCWlmIChvcGVuSGVscGVyICE9IG51bGwgJiYgb3BlbkhlbHBlci5saW5rQXBwbGljYWJsZSgpKSB7Ci0JCQlpZiAoIWZpZ3VyZUNvbnRhaW5zTGlua0ZpZ3VyZShnZXRJbnRlcmZhY2VFZGl0UGFydCgpLmdldExpbmtJY29uQ29sdW1uKCkpKSB7Ci0JCQkJbGlua0ljb25GaWd1cmUgPSBuZXcgQmFzZUxpbmtJY29uRmlndXJlKHRoaXMpOwotCQkJCWdldEludGVyZmFjZUVkaXRQYXJ0KCkuZ2V0TGlua0ljb25Db2x1bW4oKS5hZGQobGlua0ljb25GaWd1cmUpOwotCQkJfQotCi0JCQlpZiAob3BlbkhlbHBlci5pc1ZhbGlkKCkpIHsKLQkJCQlsaW5rSWNvbkZpZ3VyZS5zZXRMaW5rSWNvblN0eWxlKEJhc2VMaW5rSWNvbkZpZ3VyZS5WQUxJRF9TQ0hFTUFfTElOS19TVFlMRSk7Ci0KLQkJCQlpZiAocG9pbnRlckluUmFuZ2UoZmlnQm91bmRzLCBwb2ludCkpIHsKLQkJCQkJZW1waGFzaXplTGlua0ZpZ3VyZSgpOwotCQkJCX0KLQkJCQllbHNlIHsKLQkJCQkJdW5lbXBoYXNpemVMaW5rRmlndXJlKCk7Ci0JCQkJfQotCQkJfQotCQkJZWxzZSB7Ci0JCQkJbGlua0ljb25GaWd1cmUuc2V0TGlua0ljb25TdHlsZShCYXNlTGlua0ljb25GaWd1cmUuSU5WQUxJRF9TQ0hFTUFfTElOS19TVFlMRSk7Ci0JCQl9Ci0JCX0KLQkJZWxzZSB7Ci0JCQlpZiAoY29udGFpbnNMaW5rRmlndXJlKCkpIHsKLQkJCQlnZXRJbnRlcmZhY2VFZGl0UGFydCgpLmdldExpbmtJY29uQ29sdW1uKCkucmVtb3ZlKGxpbmtJY29uRmlndXJlKTsKLQkJCX0KLQkJfQotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBmaWd1cmVDb250YWluc0xpbmtGaWd1cmUoSUZpZ3VyZSBwYXJlbnQpIHsKLQkJSXRlcmF0b3IgaXQgPSBwYXJlbnQuZ2V0Q2hpbGRyZW4oKS5pdGVyYXRvcigpOwotCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0JCQlpZiAoaXQubmV4dCgpLmVxdWFscyhsaW5rSWNvbkZpZ3VyZSkpIHsKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQkJfQotCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgb3BlbkV4dGVybmFsRWRpdG9yKFBvaW50IHBvaW50KSB7Ci0JCVJlY3RhbmdsZSBsaW5rRmlnQm91bmRzID0gZ2V0TGlua0ZpZ3VyZUJvdW5kcygpOwotCQlpZiAobGlua0ZpZ0JvdW5kcyA9PSBudWxsIHx8IGdldEV4dGVybmFsRWRpdG9yT3BlbmVyKCkgPT0gbnVsbCkgewotCQkJcmV0dXJuOwotCQl9Ci0KLQkJUmVjdGFuZ2xlIHRlc3Rib3VuZHMgPSBuZXcgUmVjdGFuZ2xlKGxpbmtGaWdCb3VuZHMueCwgbGlua0ZpZ0JvdW5kcy55LCAwLCBsaW5rRmlnQm91bmRzLmhlaWdodCk7Ci0KLQkJaWYgKGdldEV4dGVybmFsRWRpdG9yT3BlbmVyKCkubGlua0FwcGxpY2FibGUoKSAmJiBwb2ludGVySW5SYW5nZSh0ZXN0Ym91bmRzLCBwb2ludCkpIHsKLQkJCS8vIE9wZW4gaW4gWFNEIEVkaXRvcgotCQkJZ2V0RXh0ZXJuYWxFZGl0b3JPcGVuZXIoKS5vcGVuRXh0ZXJuYWxFZGl0b3IoKTsJCQkJICAKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9TZXJ2aWNlRWRpdFBhcnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9TZXJ2aWNlRWRpdFBhcnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjhjYjZhMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvU2VydmljZUVkaXRQYXJ0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkNvbG9yQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5GaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkdyYXBoaWNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5JRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTGluZUJvcmRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuVG9vbGJhckxheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LlJlY3RhbmdsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBvbGljeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuUmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuUmVxdWVzdENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYudG9vbHMuRGlyZWN0RWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5EZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5kaXJlY3RlZGl0LkxhYmVsQ2VsbEVkaXRvckxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5kaXJlY3RlZGl0LkxhYmVsRWRpdE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cG9saWNpZXMuQVNETGFiZWxEaXJlY3RFZGl0UG9saWN5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBvbGljaWVzLkFTRFNlbGVjdGlvbkVkaXRQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5maWd1cmVzLkhlYWRpbmdGaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JVHJlZUVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBTZXJ2aWNlRWRpdFBhcnQgZXh0ZW5kcyBCYXNlRWRpdFBhcnQgaW1wbGVtZW50cyBJTmFtZWRFZGl0UGFydAotewotICBJRmlndXJlIGNvbnRlbnRQYW5lOwotICBIZWFkaW5nRmlndXJlIGhlYWRpbmdGaWd1cmU7Ci0gIAotICBwdWJsaWMgdm9pZCBhZGRGZWVkYmFjaygpCi0gIHsKLQkgIExpbmVCb3JkZXIgYm94RmlndXJlTGluZUJvcmRlciA9IChMaW5lQm9yZGVyKSBmaWd1cmUuZ2V0Qm9yZGVyKCk7Ci0JICBib3hGaWd1cmVMaW5lQm9yZGVyLnNldFdpZHRoKDIpOwotLy8JICBib3hGaWd1cmVMaW5lQm9yZGVyLnNldENvbG9yKENvbG9yQ29uc3RhbnRzLmRhcmtCbHVlKTsKLQkgIGhlYWRpbmdGaWd1cmUuc2V0U2VsZWN0ZWQodHJ1ZSk7CSAgCi0JICBmaWd1cmUucmVwYWludCgpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCByZW1vdmVGZWVkYmFjaygpCi0gIHsKLQkgIExpbmVCb3JkZXIgYm94RmlndXJlTGluZUJvcmRlciA9IChMaW5lQm9yZGVyKSBmaWd1cmUuZ2V0Qm9yZGVyKCk7Ci0JICBib3hGaWd1cmVMaW5lQm9yZGVyLnNldFdpZHRoKDEpOwotCSAgYm94RmlndXJlTGluZUJvcmRlci5zZXRDb2xvcihDb2xvckNvbnN0YW50cy5ibGFjayk7Ci0JICBoZWFkaW5nRmlndXJlLnNldFNlbGVjdGVkKGZhbHNlKTsKLQkgIGZpZ3VyZS5yZXBhaW50KCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgSUZpZ3VyZSBjcmVhdGVGaWd1cmUoKQotICB7Ci0gICAgRmlndXJlIGZpZ3VyZSA9IG5ldyBGaWd1cmUoKTsKLSAgICBmaWd1cmUuc2V0Qm9yZGVyKG5ldyBMaW5lQm9yZGVyKDEpKTsKLSAgICBUb29sYmFyTGF5b3V0IHRvb2xiYXJMYXlvdXQgPSBuZXcgVG9vbGJhckxheW91dChmYWxzZSk7Ci0gICAgdG9vbGJhckxheW91dC5zZXRTdHJldGNoTWlub3JBeGlzKHRydWUpOwotICAgIGZpZ3VyZS5zZXRMYXlvdXRNYW5hZ2VyKHRvb2xiYXJMYXlvdXQpOyAgICAKLSAgICBoZWFkaW5nRmlndXJlID0gbmV3IEhlYWRpbmdGaWd1cmUoKTsKLSAgICAKLSAgICBpZiAoZ2V0TW9kZWwoKSBpbnN0YW5jZW9mIElUcmVlRWxlbWVudCkgewotICAgIAloZWFkaW5nRmlndXJlLmdldExhYmVsKCkuc2V0SWNvbigoKElUcmVlRWxlbWVudCkgZ2V0TW9kZWwoKSkuZ2V0SW1hZ2UoKSk7CQotICAgIH0KLSAgIAkKLSAgIAlmaWd1cmUuYWRkKGhlYWRpbmdGaWd1cmUpOwotICAgICAgICAKLSAgICBjb250ZW50UGFuZSA9IG5ldyBGaWd1cmUoKQotICAgIHsKLSAgICAgIHB1YmxpYyB2b2lkIHBhaW50KEdyYXBoaWNzIGdyYXBoaWNzKSAKLSAgICAgIHsKLSAgICAgICAgc3VwZXIucGFpbnQoZ3JhcGhpY3MpOwotICAgICAgYm9vbGVhbiBpc0ZpcnN0ID0gZmFsc2U7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBnZXRDaGlsZHJlbigpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICB7Ci0gICAgICAgIEZpZ3VyZSBmaWd1cmUgPSAoRmlndXJlKWkubmV4dCgpOyAgICAgICAgICAgICAgCi0gICAgICAgIGlmIChpc0ZpcnN0KQotICAgICAgICB7Ci0gICAgICAgICAgaXNGaXJzdCA9IGZhbHNlOwotICAgICAgICB9ICAKLSAgICAgICAgZWxzZQotICAgICAgICB7ICAKLSAgICAgICAgICBSZWN0YW5nbGUgciA9IGZpZ3VyZS5nZXRCb3VuZHMoKTsgICAgICAgICAgICAgIAotICAgICAgICAgIGdyYXBoaWNzLmRyYXdMaW5lKHIueCwgci55ICsxLCByLnggKyByLndpZHRoLCByLnkgKyAxKTsKLSAgICAgICAgfSAgCi0gICAgICB9Ci0gICAgICB9Ci0gICAgfTsKLSAgICBUb29sYmFyTGF5b3V0IHRvb2xiYXJMYXlvdXQyID0gbmV3IFRvb2xiYXJMYXlvdXQoZmFsc2UpOwotICAgIHRvb2xiYXJMYXlvdXQyLnNldFN0cmV0Y2hNaW5vckF4aXModHJ1ZSk7ICAgCi0gICAgY29udGVudFBhbmUuc2V0TGF5b3V0TWFuYWdlcih0b29sYmFyTGF5b3V0Mik7Ci0gICAgZmlndXJlLmFkZChjb250ZW50UGFuZSk7Ci0gICAgCi0gICAgLy8gcm1haDogVGhlIGJsb2NrIG9mIGNvZGUgYmVsb3cgaGFzIGJlZW4gbW92ZWQgZnJvbSByZWZyZXNoVmlzdWFscygpLiAgV2UncmUKLSAgICAvLyBhc3N1bWluZyB0aGUgcmVhZC1vbmx5IHN0YXRlIG9mIHRoZSBFZGl0UGFydCB3aWxsIG5ldmVyIGNoYW5nZSBvbmNlIHRoZQotICAgIC8vIEVkaXRQYXJ0IGhhcyBiZWVuIGNyZWF0ZWQuCi0gICAgaWYgKGlzUmVhZE9ubHkoKSkgCi0gICAgewotICAgICAgaGVhZGluZ0ZpZ3VyZS5nZXRMYWJlbCgpLnNldEZvcmVncm91bmRDb2xvcihEZXNpZ25WaWV3R3JhcGhpY3NDb25zdGFudHMucmVhZE9ubHlMYWJlbENvbG9yKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGhlYWRpbmdGaWd1cmUuZ2V0TGFiZWwoKS5zZXRGb3JlZ3JvdW5kQ29sb3IoQ29sb3JDb25zdGFudHMuYmxhY2spOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZmlndXJlOwotICB9Ci0gIAotICBwdWJsaWMgSUZpZ3VyZSBnZXRDb250ZW50UGFuZSgpCi0gIHsKLSAgICByZXR1cm4gY29udGVudFBhbmU7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVFZGl0UG9saWNpZXMoKQotICB7Ci0gICAgICBzdXBlci5jcmVhdGVFZGl0UG9saWNpZXMoKTsKLQkgIGluc3RhbGxFZGl0UG9saWN5KEVkaXRQb2xpY3kuRElSRUNUX0VESVRfUk9MRSwgbmV3IEFTRExhYmVsRGlyZWN0RWRpdFBvbGljeSgpKTsKLQkgIGluc3RhbGxFZGl0UG9saWN5KEVkaXRQb2xpY3kuU0VMRUNUSU9OX0ZFRURCQUNLX1JPTEUsIG5ldyBBU0RTZWxlY3Rpb25FZGl0UG9saWN5KCkpOwotICB9Ci0gIAotICBwcml2YXRlIERpcmVjdEVkaXRNYW5hZ2VyIG1hbmFnZXI7Ci0gIAotICBwdWJsaWMgdm9pZCBwZXJmb3JtRGlyZWN0RWRpdChQb2ludCBjdXJzb3JMb2NhdGlvbil7Ci0JICBpZiAoY3Vyc29yTG9jYXRpb24gPT0gbnVsbCB8fCBoaXRUZXN0KGhlYWRpbmdGaWd1cmUuZ2V0TGFiZWwoKSwgY3Vyc29yTG9jYXRpb24pICYmICFpc1JlYWRPbmx5KCkpIHsKLQkJICBtYW5hZ2VyID0gbmV3IExhYmVsRWRpdE1hbmFnZXIodGhpcywgbmV3IExhYmVsQ2VsbEVkaXRvckxvY2F0b3IodGhpcywgY3Vyc29yTG9jYXRpb24pKTsKLQkJICBtYW5hZ2VyLnNob3coKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoKGhpdFRlc3QoaGVhZGluZ0ZpZ3VyZS5nZXRMYWJlbCgpLCBjdXJzb3JMb2NhdGlvbikgfHwKLSAgICAgICAgICAgICAgaGl0VGVzdEZpZ3VyZShoZWFkaW5nRmlndXJlLCBjdXJzb3JMb2NhdGlvbikpICYmIGlzUmVhZE9ubHkoKSkgewotICAgICAgZG9PcGVuTmV3RWRpdG9yKCk7Ci0JICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHBlcmZvcm1SZXF1ZXN0KFJlcXVlc3QgcmVxKSB7Ci0JICBpZiAocmVxLmdldFR5cGUoKS5lcXVhbHMoUmVxdWVzdENvbnN0YW50cy5SRVFfRElSRUNUX0VESVQpKSB7Ci0JCSAgcGVyZm9ybURpcmVjdEVkaXQobnVsbCk7Ci0JICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBMYWJlbCBnZXRMYWJlbEZpZ3VyZSgpIHsKLQkgIHJldHVybiBoZWFkaW5nRmlndXJlLmdldExhYmVsKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgTGlzdCBnZXRNb2RlbENoaWxkcmVuKCkKLSAgewotICAgIElTZXJ2aWNlIHNlcnZpY2UgPSAoSVNlcnZpY2UpZ2V0TW9kZWwoKTsKLSAgICByZXR1cm4gc2VydmljZS5nZXRFbmRQb2ludHMoKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgcmVmcmVzaFZpc3VhbHMoKQotICB7IAotICAgIElTZXJ2aWNlIHNlcnZpY2UgPSAoSVNlcnZpY2UpZ2V0TW9kZWwoKTsKLSAgICBoZWFkaW5nRmlndXJlLnNldElzUmVhZE9ubHkoc2VydmljZS5pc1JlYWRPbmx5KCkpOwotICAgIGhlYWRpbmdGaWd1cmUuZ2V0TGFiZWwoKS5zZXRUZXh0KHNlcnZpY2UuZ2V0TmFtZSgpKTsKLSAgICBzdXBlci5yZWZyZXNoVmlzdWFscygpOyAgCi0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9tb2RlbC9BYnN0cmFjdE1vZGVsQ29sbGVjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL21vZGVsL0Fic3RyYWN0TW9kZWxDb2xsZWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhYTNlOGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL21vZGVsL0Fic3RyYWN0TW9kZWxDb2xsZWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMubW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUFTRE9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklBU0RPYmplY3RMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JVHJlZUVsZW1lbnQ7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdE1vZGVsQ29sbGVjdGlvbiBpbXBsZW1lbnRzIElBU0RPYmplY3QsIElUcmVlRWxlbWVudAotewotICBJQVNET2JqZWN0IG1vZGVsOwotICBTdHJpbmcga2luZDsKLSAgCi0gIHB1YmxpYyBBYnN0cmFjdE1vZGVsQ29sbGVjdGlvbihJQVNET2JqZWN0IG1vZGVsLCBTdHJpbmcga2luZCkKLSAgewotICAgIHRoaXMubW9kZWwgPSBtb2RlbDsKLSAgICB0aGlzLmtpbmQgPSBraW5kOwotICB9Ci0KLSAgcHVibGljIE9iamVjdCBnZXRNb2RlbCgpCi0gIHsKLSAgICByZXR1cm4gbW9kZWw7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRNb2RlbChJQVNET2JqZWN0IG1vZGVsKQotICB7Ci0gICAgdGhpcy5tb2RlbCA9IG1vZGVsOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRLaW5kKCkKLSAgewotICAgIHJldHVybiBraW5kOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0S2luZChTdHJpbmcga2luZCkKLSAgewotICAgIHRoaXMua2luZCA9IGtpbmQ7Ci0gIH0KLQotICBwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoKSB7Ci0JICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBJbWFnZSBnZXRTZWNvbmRhcnlJbWFnZSgpIHsKLQkgIHJldHVybiBudWxsOwotICB9Ci0gIAotICBwdWJsaWMgSVRyZWVFbGVtZW50IGdldFBhcmVudCgpIHsKLQkgIHJldHVybiBudWxsOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBpc1JlYWRPbmx5KCkgewotCSAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCByZWdpc3Rlckxpc3RlbmVyKElBU0RPYmplY3RMaXN0ZW5lciBsaXN0ZW5lcikKLSAgewotICAgIG1vZGVsLnJlZ2lzdGVyTGlzdGVuZXIobGlzdGVuZXIpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB1bnJlZ2lzdGVyTGlzdGVuZXIoSUFTRE9iamVjdExpc3RlbmVyIGxpc3RlbmVyKQotICB7Ci0gICAgbW9kZWwudW5yZWdpc3Rlckxpc3RlbmVyKGxpc3RlbmVyKTsKLSAgfQotCi0gIHB1YmxpYyBDb21tYW5kIGdldERlbGV0ZUNvbW1hbmQoKSB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHB1YmxpYyBMaXN0IGdldERpYWdub3N0aWNNZXNzYWdlcygpIHsKLQlyZXR1cm4gbmV3IEFycmF5TGlzdCgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvbW9kZWwvQmluZGluZ0NvbHVtbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL21vZGVsL0JpbmRpbmdDb2x1bW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJhOWZmYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvbW9kZWwvQmluZGluZ0NvbHVtbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLm1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5Db21wYXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTmFtZWRPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUuSVRyZWVFbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgQmluZGluZ0NvbHVtbiBleHRlbmRzIEFic3RyYWN0TW9kZWxDb2xsZWN0aW9uIHsKLQkgIHB1YmxpYyBCaW5kaW5nQ29sdW1uKElEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikgewotCSAgICBzdXBlcihkZXNjcmlwdGlvbiwgIkJpbmRpbmdDb2x1bW4iKTsgLy8kTk9OLU5MUy0xJAotCSAgfQotCSAgCi0JICBwdWJsaWMgSVRyZWVFbGVtZW50W10gZ2V0Q2hpbGRyZW4oKSB7Ci0JCQlMaXN0IGJpbmRpbmdzID0gKChJRGVzY3JpcHRpb24pbW9kZWwpLmdldEJpbmRpbmdzKCk7Ci0JCQlDb2xsZWN0aW9ucy5zb3J0KGJpbmRpbmdzLCBuZXcgQmluZGluZ0NvbXBhcmF0b3IoKSk7Ci0JCQlPYmplY3QgYXJyYXlbXSA9IGJpbmRpbmdzLnRvQXJyYXkoKTsKLQkJCQotCQkJSVRyZWVFbGVtZW50IHRyZWVFbGVtZW50W10gPSBuZXcgSVRyZWVFbGVtZW50W2FycmF5Lmxlbmd0aF07Ci0JCQlmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXkubGVuZ3RoOyBpbmRleCsrKSB7Ci0JCQkJdHJlZUVsZW1lbnRbaW5kZXhdID0gKElUcmVlRWxlbWVudCkgYXJyYXlbaW5kZXhdOwotCQkJfQotCQkJCi0JCQlyZXR1cm4gdHJlZUVsZW1lbnQ7Ci0JICB9Ci0KLQkgIHB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKCkgewotCQkgIElUcmVlRWxlbWVudCB0cmVlRWxlbWVudFtdID0gZ2V0Q2hpbGRyZW4oKTsKLQkJICBpZiAodHJlZUVsZW1lbnQubGVuZ3RoID4gMCkgewotCQkJICByZXR1cm4gdHJ1ZTsKLQkJICB9Ci0JCSAgCi0JCSAgcmV0dXJuIGZhbHNlOwotCSAgfQotCSAgCi0JICBwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCSAgcmV0dXJuICJkZWZpbml0aW9uIjsgLy8kTk9OLU5MUy0xJAotCSAgfQotCSAgCi0JICBwcml2YXRlIGNsYXNzIEJpbmRpbmdDb21wYXJhdG9yIGltcGxlbWVudHMgQ29tcGFyYXRvciB7Ci0JCQlwdWJsaWMgaW50IGNvbXBhcmUoT2JqZWN0IG8xLCBPYmplY3QgbzIpIHsKLQkJCQlpZiAobzEgaW5zdGFuY2VvZiBJQmluZGluZyAmJiBvMiBpbnN0YW5jZW9mIElCaW5kaW5nKSB7Ci0JCQkJCUlJbnRlcmZhY2UgaW50ZXJmYWNlMSA9ICgoSUJpbmRpbmcpIG8xKS5nZXRJbnRlcmZhY2UoKTsKLQkJCQkJSUludGVyZmFjZSBpbnRlcmZhY2UyID0gKChJQmluZGluZykgbzIpLmdldEludGVyZmFjZSgpOwotCQkJCQkKLQkJCQkJaWYgKGludGVyZmFjZTEgIT0gbnVsbCAmJiBpbnRlcmZhY2UyICE9IG51bGwpIHsKLQkJCQkJCVN0cmluZyBuYW1lMSA9ICgoSU5hbWVkT2JqZWN0KSBpbnRlcmZhY2UxKS5nZXROYW1lKCk7Ci0JCQkJCQlTdHJpbmcgbmFtZTIgPSAoKElOYW1lZE9iamVjdCkgaW50ZXJmYWNlMikuZ2V0TmFtZSgpOwotCQkJCQkJcmV0dXJuIG5hbWUxLmNvbXBhcmVUbyhuYW1lMik7Ci0JCQkJCX0KLQkJCQkJZWxzZSBpZiAoaW50ZXJmYWNlMSAhPSBudWxsICYmIGludGVyZmFjZTIgPT0gbnVsbCkgewotCQkJCQkJcmV0dXJuIC0xOwotCQkJCQl9Ci0JCQkJCWVsc2UgaWYgKGludGVyZmFjZTEgPT0gbnVsbCAmJiBpbnRlcmZhY2UyICE9IG51bGwpIHsKLQkJCQkJCXJldHVybiAxOwotCQkJCQl9Ci0JCQkJfQotCQkJCQotCQkJCXJldHVybiAwOwotCQkJfQotCSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL21vZGVsL0JpbmRpbmdDb250ZW50UGxhY2VIb2xkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9tb2RlbC9CaW5kaW5nQ29udGVudFBsYWNlSG9sZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5NjNkMjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL21vZGVsL0JpbmRpbmdDb250ZW50UGxhY2VIb2xkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5tb2RlbDsKLQotcHVibGljIGNsYXNzIEJpbmRpbmdDb250ZW50UGxhY2VIb2xkZXIgewotCXByaXZhdGUgT2JqZWN0IG1vZGVsOwotCQotCXB1YmxpYyBCaW5kaW5nQ29udGVudFBsYWNlSG9sZGVyKE9iamVjdCBtb2RlbCkgewotCQl0aGlzLm1vZGVsID0gbW9kZWw7Ci0JfQotCQotCXB1YmxpYyBPYmplY3QgZ2V0TW9kZWwoKSB7Ci0JCXJldHVybiBtb2RlbDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvbW9kZWwvSUFjdGlvblByb3ZpZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvbW9kZWwvSUFjdGlvblByb3ZpZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxMzcxNWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL21vZGVsL0lBY3Rpb25Qcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLm1vZGVsOwotCi1wdWJsaWMgaW50ZXJmYWNlIElBY3Rpb25Qcm92aWRlcgotewotICBwdWJsaWMgU3RyaW5nW10gZ2V0QWN0aW9ucyhPYmplY3Qgb2JqZWN0KTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9tb2RlbC9JbnRlcmZhY2VDb2x1bW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwYXJ0cy9tb2RlbC9JbnRlcmZhY2VDb2x1bW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWNkMGYxNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvbW9kZWwvSW50ZXJmYWNlQ29sdW1uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMubW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkNvbXBhcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklOYW1lZE9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JVHJlZUVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBJbnRlcmZhY2VDb2x1bW4gZXh0ZW5kcyBBYnN0cmFjdE1vZGVsQ29sbGVjdGlvbiB7Ci0JcHVibGljIEludGVyZmFjZUNvbHVtbihJRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pIHsKLQkJc3VwZXIoZGVzY3JpcHRpb24sICJJbnRlcmZhY2VDb2x1bW4iKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgSVRyZWVFbGVtZW50W10gZ2V0Q2hpbGRyZW4oKSB7Ci0JCUxpc3QgaW50ZXJmYWNlcyA9ICgoSURlc2NyaXB0aW9uKW1vZGVsKS5nZXRJbnRlcmZhY2VzKCk7CQkKLQkJQ29tcGFyYXRvciBjb21wYXJlID0gbmV3IE5hbWVkT2JqZWN0Q29tcGFyYXRvcigpOwotCQlDb2xsZWN0aW9ucy5zb3J0KGludGVyZmFjZXMsIGNvbXBhcmUpOwotCQlPYmplY3QgYXJyYXlbXSA9IGludGVyZmFjZXMudG9BcnJheSgpOwotCQkKLQkJSVRyZWVFbGVtZW50IHRyZWVFbGVtZW50W10gPSBuZXcgSVRyZWVFbGVtZW50W2FycmF5Lmxlbmd0aF07Ci0JCWZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBhcnJheS5sZW5ndGg7IGluZGV4KyspIHsKLQkJCXRyZWVFbGVtZW50W2luZGV4XSA9IChJVHJlZUVsZW1lbnQpIGFycmF5W2luZGV4XTsKLQkJfQotCQkKLQkJcmV0dXJuIHRyZWVFbGVtZW50OwotCX0KLQotCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKCkgewotCQlJVHJlZUVsZW1lbnQgdHJlZUVsZW1lbnRbXSA9IGdldENoaWxkcmVuKCk7Ci0JCWlmICh0cmVlRWxlbWVudC5sZW5ndGggPiAwKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQkKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCXJldHVybiAiZGVmaW5pdGlvbiI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHJpdmF0ZSBjbGFzcyBOYW1lZE9iamVjdENvbXBhcmF0b3IgaW1wbGVtZW50cyBDb21wYXJhdG9yewotCQlwdWJsaWMgaW50IGNvbXBhcmUoT2JqZWN0IG8xLCBPYmplY3QgbzIpIHsKLQkJCWlmIChvMSBpbnN0YW5jZW9mIElOYW1lZE9iamVjdCAmJiBvMiBpbnN0YW5jZW9mIElOYW1lZE9iamVjdCkgewotCQkJCVN0cmluZyBuYW1lMSA9ICgoSU5hbWVkT2JqZWN0KSBvMSkuZ2V0TmFtZSgpOwotCQkJCVN0cmluZyBuYW1lMiA9ICgoSU5hbWVkT2JqZWN0KSBvMikuZ2V0TmFtZSgpOwotCQkJCXJldHVybiBuYW1lMS5jb21wYXJlVG8obmFtZTIpOwotCQkJfQotCQkJCi0JCQlyZXR1cm4gLTE7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvbW9kZWwvU2VydmljZUNvbHVtbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBhcnRzL21vZGVsL1NlcnZpY2VDb2x1bW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWU2NTk3Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cGFydHMvbW9kZWwvU2VydmljZUNvbHVtbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLm1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5Db21wYXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSURlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUVuZFBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmUuSVRyZWVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC51dGlsLkVuZFBvaW50Q29tcGFyYXRvcjsKLQotcHVibGljIGNsYXNzIFNlcnZpY2VDb2x1bW4gZXh0ZW5kcyBBYnN0cmFjdE1vZGVsQ29sbGVjdGlvbiB7Ci0JcHVibGljIFNlcnZpY2VDb2x1bW4oSURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKSB7Ci0JCXN1cGVyKGRlc2NyaXB0aW9uLCAiU2VydmljZUNvbHVtbiIpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyBJVHJlZUVsZW1lbnRbXSBnZXRDaGlsZHJlbigpIHsKLQkJTGlzdCBzZXJ2aWNlcyA9ICgoSURlc2NyaXB0aW9uKW1vZGVsKS5nZXRTZXJ2aWNlcygpOwotCQlDb2xsZWN0aW9ucy5zb3J0KHNlcnZpY2VzLCBuZXcgU2VydmljZUNvbXBhcmF0b3IoKSk7Ci0JCU9iamVjdCBhcnJheVtdID0gc2VydmljZXMudG9BcnJheSgpOwotCQkKLQkJSVRyZWVFbGVtZW50IHRyZWVFbGVtZW50W10gPSBuZXcgSVRyZWVFbGVtZW50W2FycmF5Lmxlbmd0aF07Ci0JCWZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBhcnJheS5sZW5ndGg7IGluZGV4KyspIHsKLQkJCXRyZWVFbGVtZW50W2luZGV4XSA9IChJVHJlZUVsZW1lbnQpIGFycmF5W2luZGV4XTsKLQkJfQotCQkKLQkJcmV0dXJuIHRyZWVFbGVtZW50OwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbigpIHsKLQkJSVRyZWVFbGVtZW50IHRyZWVFbGVtZW50W10gPSBnZXRDaGlsZHJlbigpOwotCQlpZiAodHJlZUVsZW1lbnQubGVuZ3RoID4gMCkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQlyZXR1cm4gImRlZmluaXRpb24iOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXByaXZhdGUgY2xhc3MgU2VydmljZUNvbXBhcmF0b3IgaW1wbGVtZW50cyBDb21wYXJhdG9yIHsKLQkJcHVibGljIGludCBjb21wYXJlKE9iamVjdCBvMSwgT2JqZWN0IG8yKSB7Ci0JCQlpZiAobzEgaW5zdGFuY2VvZiBJU2VydmljZSAmJiBvMiBpbnN0YW5jZW9mIElTZXJ2aWNlKSB7Ci0JCQkJSUVuZFBvaW50IGVuZFBvaW50MSA9IGdldEZpcnN0QXNzb2NpYXRlZEVuZFBvaW50KChJU2VydmljZSkgbzEpOwotCQkJCUlFbmRQb2ludCBlbmRQb2ludDIgPSBnZXRGaXJzdEFzc29jaWF0ZWRFbmRQb2ludCgoSVNlcnZpY2UpIG8yKTsKLQkJCQkKLQkJCQlFbmRQb2ludENvbXBhcmF0b3IgY29tcGFyYXRvciA9IG5ldyBFbmRQb2ludENvbXBhcmF0b3IoKTsKLQkJCQlyZXR1cm4gY29tcGFyYXRvci5jb21wYXJlKGVuZFBvaW50MSwgZW5kUG9pbnQyKTsKLQkJCX0KLQkJCQotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJCi0JCXByaXZhdGUgSUVuZFBvaW50IGdldEZpcnN0QXNzb2NpYXRlZEVuZFBvaW50KElTZXJ2aWNlIHNlcnZpY2UpIHsKLQkJCUl0ZXJhdG9yIGVuZFBvaW50cz0gc2VydmljZS5nZXRFbmRQb2ludHMoKS5pdGVyYXRvcigpOwotCQkJCi0JCQl3aGlsZSAoZW5kUG9pbnRzLmhhc05leHQoKSkgewotCQkJCUlFbmRQb2ludCB0ZW1wRW5kUG9pbnQgPSAoSUVuZFBvaW50KSBlbmRQb2ludHMubmV4dCgpOwotCQkJCWlmICh0ZW1wRW5kUG9pbnQuZ2V0QmluZGluZygpICE9IG51bGwpIHsKLQkJCQkJcmV0dXJuIHRlbXBFbmRQb2ludDsKLQkJCQl9Ci0JCQl9Ci0JCQkKLQkJCXJldHVybiBudWxsOwotCQl9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwb2xpY2llcy9BU0REcmFnQW5kRHJvcENvbW1hbmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwb2xpY2llcy9BU0REcmFnQW5kRHJvcENvbW1hbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjgzMDFkYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cG9saWNpZXMvQVNERHJhZ0FuZERyb3BDb21tYW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBvbGljaWVzOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuRmlndXJlQ2FudmFzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5JRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5HcmFwaGljYWxFZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuUmVxdWVzdENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYucmVxdWVzdHMuQ2hhbmdlQm91bmRzUmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0REcmFnQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTRERyYWdSZW9yZGVyQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLk1lc3NhZ2VSZWZlcmVuY2VFZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5QYXJhbWV0ZXJFZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklNZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSVBhcmFtZXRlcjsKLQotcHVibGljIGNsYXNzIEFTRERyYWdBbmREcm9wQ29tbWFuZCBleHRlbmRzIENvbW1hbmQgewotCSAgcHJvdGVjdGVkIEVkaXRQYXJ0Vmlld2VyIHZpZXdlcjsgICAgCi0JICBwcm90ZWN0ZWQgQ2hhbmdlQm91bmRzUmVxdWVzdCByZXF1ZXN0OwotCSAgcHJvdGVjdGVkIFBvaW50IGxvY2F0aW9uOwotCSAgcHJvdGVjdGVkIEFTRERyYWdBY3Rpb24gZHJhZ0FjdGlvbjsgICAgCi0JICBwcm90ZWN0ZWQgYm9vbGVhbiBjYW5FeGVjdXRlID0gZmFsc2U7Ci0KLQkgIHB1YmxpYyBBU0REcmFnQW5kRHJvcENvbW1hbmQoRWRpdFBhcnRWaWV3ZXIgdmlld2VyLCBDaGFuZ2VCb3VuZHNSZXF1ZXN0IHJlcXVlc3QpCi0JICB7Ci0JICAgIHRoaXMudmlld2VyID0gdmlld2VyOwotCSAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0OwotCi0JICAgIGxvY2F0aW9uID0gcmVxdWVzdC5nZXRMb2NhdGlvbigpOyAgIAotCSAgICBFZGl0UGFydCB0YXJnZXRFZGl0UGFydCA9IHZpZXdlci5maW5kT2JqZWN0QXQobG9jYXRpb24pOyAKLQotCSAgICBpZiAodGFyZ2V0RWRpdFBhcnQgaW5zdGFuY2VvZiBQYXJhbWV0ZXJFZGl0UGFydCB8fCB0YXJnZXRFZGl0UGFydCBpbnN0YW5jZW9mIE1lc3NhZ2VSZWZlcmVuY2VFZGl0UGFydCkgewotCSAgICAJKChHcmFwaGljYWxFZGl0UGFydCl2aWV3ZXIuZ2V0Um9vdEVkaXRQYXJ0KCkpLmdldEZpZ3VyZSgpLnRyYW5zbGF0ZVRvUmVsYXRpdmUobG9jYXRpb24pOwotCSAgICAJR3JhcGhpY2FsRWRpdFBhcnQgbW92aW5nQ2hpbGRFZGl0UGFydDsKLQkgICAgCVZlY3RvciBkcmFnQWN0aW9ucyA9IG5ldyBWZWN0b3IoKTsKLQkgICAgCWlmIChyZXF1ZXN0LmdldFR5cGUoKS5lcXVhbHMoUmVxdWVzdENvbnN0YW50cy5SRVFfQUREKSkgeyAvLyBUaGlzIHJlYWxseSBzaG91bGRuJ3QgYmUgUkVRX0FERC4uLi4KLQkgICAgCQlMaXN0IGxpc3QgPSByZXF1ZXN0LmdldEVkaXRQYXJ0cygpOwotCSAgICAJCWlmIChsaXN0LnNpemUoKSA8PSAwKSB7Ci0JICAgIAkJCWNhbkV4ZWN1dGUgPSBmYWxzZTsKLQkgICAgCQkJcmV0dXJuOwotCSAgICAJCX0KLQkgICAgCQkKLQkgICAgCQkvLyBHcmFiYmluZyB0aGUgZmlzdCBzZWxlY3Rpb24KLQkgICAgCQltb3ZpbmdDaGlsZEVkaXRQYXJ0ID0gKEdyYXBoaWNhbEVkaXRQYXJ0KSBsaXN0LmdldCgwKTsKLQkgICAgCQlPYmplY3QgbW9kZWwgPSBtb3ZpbmdDaGlsZEVkaXRQYXJ0LmdldE1vZGVsKCk7Ci0JICAgIAkJRWRpdFBhcnQgcG9pbnRlckVkaXRQYXJ0ID0gdmlld2VyLmZpbmRPYmplY3RBdChsb2NhdGlvbik7Ci0JICAgIAkJCi0JICAgIAkJaWYgKG1vZGVsIGluc3RhbmNlb2YgSVBhcmFtZXRlcikgewotCSAgICAJCQlkcmFnQWN0aW9ucy5hZGQobmV3IEFTRERyYWdSZW9yZGVyQWN0aW9uKG1vdmluZ0NoaWxkRWRpdFBhcnQsIHBvaW50ZXJFZGl0UGFydCwgZ2V0UG9pbnRlckxvY2F0aW9uKGxvY2F0aW9uKSkpOwotCSAgICAJCX0KLQkgICAgCQllbHNlIGlmIChtb2RlbCBpbnN0YW5jZW9mIElNZXNzYWdlUmVmZXJlbmNlKSB7Ci0JICAgIAkJCUlNZXNzYWdlUmVmZXJlbmNlIG1lc3NhZ2VSZWYgPSAoSU1lc3NhZ2VSZWZlcmVuY2UpIG1vZGVsOwotCSAgICAJCQlpZiAobWVzc2FnZVJlZi5nZXRLaW5kKCkgPT0gSU1lc3NhZ2VSZWZlcmVuY2UuS0lORF9JTlBVVCB8fCBtZXNzYWdlUmVmLmdldEtpbmQoKSA9PSBJTWVzc2FnZVJlZmVyZW5jZS5LSU5EX09VVFBVVCkgewotCSAgICAJCQkJZHJhZ0FjdGlvbnMuYWRkKG5ldyBBU0REcmFnUmVvcmRlckFjdGlvbihtb3ZpbmdDaGlsZEVkaXRQYXJ0LCBwb2ludGVyRWRpdFBhcnQsIGdldFBvaW50ZXJMb2NhdGlvbihsb2NhdGlvbikpKTsKLS8vCSAgICAJCQkJZHJhZ0FjdGlvbnMuYWRkKG5ldyBXU0RMRHJhZ1NldE1lc3NhZ2VBY3Rpb24obW92aW5nQ2hpbGRFZGl0UGFydCwgcG9pbnRlckVkaXRQYXJ0LCBsb2NhdGlvbikpOwotCSAgICAJCQl9Ci0JICAgIAkJfQotCSAgICAJCQotLy8JICAgIAkJZWxzZSBpZiAobW9kZWwgaW5zdGFuY2VvZiBGYXVsdCkgewotLy8JICAgIAkJZHJhZ0FjdGlvbnMuYWRkKG5ldyBXU0RMRHJhZ1NldE1lc3NhZ2VBY3Rpb24obW92aW5nQ2hpbGRFZGl0UGFydCwgcG9pbnRlckVkaXRQYXJ0LCBsb2NhdGlvbikpOwotLy8JICAgIAkJfSAgICAgICAgICAgIAotCSAgICAJfQotLy8JICAgIAllbHNlIGlmIChyZXF1ZXN0LmdldFR5cGUoKS5lcXVhbHMoUmVxdWVzdENvbnN0YW50cy5SRVFfQ0xPTkUpKSB7Ci0vLwkgICAgCUxpc3QgbGlzdCA9IHJlcXVlc3QuZ2V0RWRpdFBhcnRzKCk7Ci0vLwkgICAgCWlmIChsaXN0LnNpemUoKSA+IDApCi0vLwkgICAgCXsKLS8vCSAgICAJLy8gR3JhYmJpbmcgdGhlIGZpc3Qgc2VsZWN0aW9uCi0vLwkgICAgCW1vdmluZ0NoaWxkRWRpdFBhcnQgPSAoV1NETFRyZWVOb2RlRWRpdFBhcnQpIGxpc3QuZ2V0KDApOwotLy8JICAgIAkKLS8vCSAgICAJZHJhZ0FjdGlvbnMuYWRkKG5ldyBDb3B5V1NETEVsZW1lbnRBY3Rpb24odmlld2VyLAotLy8JICAgIAkoV1NETEVsZW1lbnQpIG1vdmluZ0NoaWxkRWRpdFBhcnQuZ2V0TW9kZWwoKSwKLS8vCSAgICAJKFdTRExFbGVtZW50KSB0YXJnZXRFZGl0UGFydC5nZXRNb2RlbCgpLAotLy8JICAgIAludWxsKSk7Ci0vLwkgICAgCX0KLS8vCSAgICAJfQotCSAgICAJCi0JICAgIAlJdGVyYXRvciBpdCA9IGRyYWdBY3Rpb25zLml0ZXJhdG9yKCk7Ci0JICAgIAl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0JICAgIAkJZHJhZ0FjdGlvbiA9IChBU0REcmFnQWN0aW9uKSBpdC5uZXh0KCk7Ci0JICAgIAkJY2FuRXhlY3V0ZSA9IGRyYWdBY3Rpb24uY2FuRXhlY3V0ZSgpOwotCSAgICAJCWlmIChjYW5FeGVjdXRlKQotCSAgICAJCQlicmVhazsKLQkgICAgCX0KLQkgICAgfQotCSAgfQotCSAgCi0JICBwdWJsaWMgYm9vbGVhbiBjYW5FeGVjdXRlKCkKLQkgIHsgCi0JICAgIHJldHVybiBjYW5FeGVjdXRlOwotCSAgfSAgICAgCi0JICAKLQkgIHB1YmxpYyB2b2lkIGV4ZWN1dGUoKSB7Ci0JICAgIGlmIChjYW5FeGVjdXRlKQotCSAgICB7IAotCSAgICAgIGRyYWdBY3Rpb24ucnVuKCk7IAotCSAgICB9Ci0JICB9Ci0JICAKLQkgIHB1YmxpYyBJRmlndXJlIGdldEZlZWRiYWNrRmlndXJlKCkgewotCSAgCWlmIChkcmFnQWN0aW9uICE9IG51bGwpIHsKLQkgIAkJcmV0dXJuIGRyYWdBY3Rpb24uZ2V0RmVlZGJhY2tGaWd1cmUoKTsKLQkgIAl9Ci0JICAJZWxzZSB7Ci0JICAJCXJldHVybiBudWxsOwotCSAgCX0KLQkgIH0KLQkgIAotCSAgLyoKLQkgICAqIFRoaXMgbWV0aG9kIGNvbXBlbnNhdGVzIGZvciB0aGUgY3VycmVudCBzY3JvbGwgcG9zaXRpb24KLQkgICAqLwotCSAgcHJpdmF0ZSBQb2ludCBnZXRQb2ludGVyTG9jYXRpb24oUG9pbnQgb3JpZ1BvaW50ZXJMb2NhdGlvbikgewotCSAgCSBQb2ludCBjb21wZW5zYXRlZExvY2F0aW9uID0gb3JpZ1BvaW50ZXJMb2NhdGlvbjsKLQkgIAkgRmlndXJlQ2FudmFzIGZpZ3VyZUNhbnZhcyA9IChGaWd1cmVDYW52YXMpIHZpZXdlci5nZXRDb250cm9sKCk7Ci0JICAgICBpbnQgeU9mZnNldCA9IGZpZ3VyZUNhbnZhcy5nZXRWaWV3cG9ydCgpLmdldFZlcnRpY2FsUmFuZ2VNb2RlbCgpLmdldFZhbHVlKCk7Ci0JICAgICBjb21wZW5zYXRlZExvY2F0aW9uLnkgPSBjb21wZW5zYXRlZExvY2F0aW9uLnkgKyB5T2Zmc2V0OwotCSAgICAgCi0JICAgICByZXR1cm4gY29tcGVuc2F0ZWRMb2NhdGlvbjsKLQkgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cG9saWNpZXMvQVNERHJhZ0FuZERyb3BFZGl0UG9saWN5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cG9saWNpZXMvQVNERHJhZ0FuZERyb3BFZGl0UG9saWN5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjMjNlZjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBvbGljaWVzL0FTRERyYWdBbmREcm9wRWRpdFBvbGljeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBvbGljaWVzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5SZXF1ZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5yZXF1ZXN0cy5DaGFuZ2VCb3VuZHNSZXF1ZXN0OwotCi1wdWJsaWMgY2xhc3MgQVNERHJhZ0FuZERyb3BFZGl0UG9saWN5IGV4dGVuZHMgb3JnLmVjbGlwc2UuZ2VmLmVkaXRwb2xpY2llcy5HcmFwaGljYWxFZGl0UG9saWN5IHsKLQlwcm90ZWN0ZWQgRWRpdFBhcnRWaWV3ZXIgdmlld2VyOwotCXByb3RlY3RlZCBBU0RTZWxlY3Rpb25FZGl0UG9saWN5IHNlbGVjdGlvbkhhbmRsZXNFZGl0UG9saWN5OwotCQotCXB1YmxpYyBBU0REcmFnQW5kRHJvcEVkaXRQb2xpY3koRWRpdFBhcnRWaWV3ZXIgdmlld2VyLCBBU0RTZWxlY3Rpb25FZGl0UG9saWN5IHNlbGVjdGlvbkhhbmRsZXNFZGl0UG9saWN5KSB7Ci0JCXRoaXMudmlld2VyID0gdmlld2VyOwotCQl0aGlzLnNlbGVjdGlvbkhhbmRsZXNFZGl0UG9saWN5ID0gc2VsZWN0aW9uSGFuZGxlc0VkaXRQb2xpY3k7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gdW5kZXJzdGFuZHNSZXF1ZXN0KFJlcXVlc3QgcmVxKSB7Ci0JCXJldHVybiB0cnVlOwotCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAKLQotCXB1YmxpYyBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZCBnZXRDb21tYW5kKFJlcXVlc3QgcmVxdWVzdCkgeyAgICAgICAgICAgICAKLQkJQVNERHJhZ0FuZERyb3BDb21tYW5kIGNvbW1hbmQgPSBudWxsOwotCQlpZiAocmVxdWVzdCBpbnN0YW5jZW9mIENoYW5nZUJvdW5kc1JlcXVlc3QpIHsKLQkJCWNvbW1hbmQgPSBuZXcgQVNERHJhZ0FuZERyb3BDb21tYW5kKHZpZXdlciwgKENoYW5nZUJvdW5kc1JlcXVlc3QpcmVxdWVzdCk7Ci0JCQlzZWxlY3Rpb25IYW5kbGVzRWRpdFBvbGljeS5zZXREcmFnQW5kRHJvcENvbW1hbmQoY29tbWFuZCk7Ci0JCX0gCi0JCXJldHVybiBjb21tYW5kOyAgICAgICAgICAgICAKLQl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cG9saWNpZXMvQVNER3JhcGhOb2RlRHJhZ1RyYWNrZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwb2xpY2llcy9BU0RHcmFwaE5vZGVEcmFnVHJhY2tlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTlmNmM1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwb2xpY2llcy9BU0RHcmFwaE5vZGVEcmFnVHJhY2tlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBvbGljaWVzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLkVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5SZXF1ZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi50b29scy5EcmFnRWRpdFBhcnRzVHJhY2tlcjsKLQotcHVibGljIGNsYXNzIEFTREdyYXBoTm9kZURyYWdUcmFja2VyIGV4dGVuZHMgRHJhZ0VkaXRQYXJ0c1RyYWNrZXIgIHsKLQlwcm90ZWN0ZWQgRWRpdFBhcnQgZWRpdFBhcnQ7IAotCQotCXB1YmxpYyBBU0RHcmFwaE5vZGVEcmFnVHJhY2tlcihFZGl0UGFydCBlZGl0UGFydCkgewotCQlzdXBlcihlZGl0UGFydCk7Ci0JCXRoaXMuZWRpdFBhcnQgPSBlZGl0UGFydDsKLQl9IAotCQotCXByb3RlY3RlZCBDb21tYW5kIGdldENvbW1hbmQoKSB7IAotCQlSZXF1ZXN0IHJlcXVlc3QgPSBnZXRUYXJnZXRSZXF1ZXN0KCk7Ci0JCXJldHVybiBlZGl0UGFydC5nZXRDb21tYW5kKHJlcXVlc3QpOyAKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBvbGljaWVzL0FTRExhYmVsRGlyZWN0RWRpdFBvbGljeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZWRpdHBvbGljaWVzL0FTRExhYmVsRGlyZWN0RWRpdFBvbGljeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTRiNmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwb2xpY2llcy9BU0RMYWJlbERpcmVjdEVkaXRQb2xpY3kuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwb2xpY2llczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuZWRpdHBvbGljaWVzLkRpcmVjdEVkaXRQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLnJlcXVlc3RzLkRpcmVjdEVkaXRSZXF1ZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLkVuZFBvaW50RWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTmFtZWRPYmplY3Q7Ci0KLXB1YmxpYyBjbGFzcyBBU0RMYWJlbERpcmVjdEVkaXRQb2xpY3kgZXh0ZW5kcyBEaXJlY3RFZGl0UG9saWN5IHsKLQlwcm90ZWN0ZWQgQ29tbWFuZCBnZXREaXJlY3RFZGl0Q29tbWFuZChEaXJlY3RFZGl0UmVxdWVzdCByZXF1ZXN0KSB7Ci0JCUNvbW1hbmQgY29tbWFuZCA9IG51bGw7Ci0JCVN0cmluZyBsYWJlbFRleHQgPSAoU3RyaW5nKSByZXF1ZXN0LmdldENlbGxFZGl0b3IoKS5nZXRWYWx1ZSgpOwotCQlFZGl0UGFydCBlZGl0UGFydD0gZ2V0SG9zdCgpOwotCi0JCS8vIFRPRE86IHJtYWg6ICBTdGFydCBWRVJZIFVHTFkgSEFDSy4uLi4gIEkgZG9uJ3Qgc2VlIGFueSBvdGhlciB3YXkgdG8gc29sdmUgdGhpcyBpc3N1ZSBhdCB0aGlzIHRpbWUuCi0JCS8vIEVuZFBvaW50RWRpdFBhcnQgY29udGFpbnMgdHdvIGxhYmVscyB3aGljaCBjYW4gYmUgZGlyZWN0IGVkaXRlZC4gIFRoZSBmYWNhZGUgZHJpdmluZyBFbmRQb2ludEVkaXRQYXJ0Ci0JCS8vIGNvbnRhaW5zIGEgZ2V0U2V0TmFtZUNvbW1hbmQoKSBhbmQgYSBnZXRTZXRBZGRyZXNzQ29tbWFuZCgpLi4uIGhvd2V2ZXIsIHRoaXMgY2xhc3MgKExhYmVsRGlyZWN0RWRpdFBvbGljeSkKLQkJLy8gb25seSBrbm93cyBhYm91dCBnZXRTZXROYW1lQ29tbWFuZCgpLi4uLi4gIFRoaXMgaXMgdGhlIHByb2JsZW0gd2UgZmFjZSB3aGVuIGNvbWJpbmluZyB0d28gbGFiZWxzIGludG8KLQkJLy8gb25lIEVkaXRQYXJ0Li4uLi4KLQkJaWYgKGVkaXRQYXJ0IGluc3RhbmNlb2YgRW5kUG9pbnRFZGl0UGFydCkgewotCQkJY29tbWFuZCA9ICgoRW5kUG9pbnRFZGl0UGFydCkgZWRpdFBhcnQpLmdldFNldFByb3BlckxhYmVsQ29tbWFuZChsYWJlbFRleHQpOwotCQl9Ci0JCS8vIEVuZCBWRVJZIFVHTFkgSEFDSwotCQllbHNlIGlmIChlZGl0UGFydC5nZXRNb2RlbCgpIGluc3RhbmNlb2YgSU5hbWVkT2JqZWN0KSB7Ci0JCQljb21tYW5kID0gKChJTmFtZWRPYmplY3QpIGVkaXRQYXJ0LmdldE1vZGVsKCkpLmdldFNldE5hbWVDb21tYW5kKGxhYmVsVGV4dCk7Ci0JCX0KLQotCQlyZXR1cm4gY29tbWFuZDsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzaG93Q3VycmVudEVkaXRWYWx1ZShEaXJlY3RFZGl0UmVxdWVzdCByZXF1ZXN0KSB7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwb2xpY2llcy9BU0RTZWxlY3Rpb25FZGl0UG9saWN5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9lZGl0cG9saWNpZXMvQVNEU2VsZWN0aW9uRWRpdFBvbGljeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmY2FmZmY0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2VkaXRwb2xpY2llcy9BU0RTZWxlY3Rpb25FZGl0UG9saWN5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cG9saWNpZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuSUZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuUmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuZWRpdHBvbGljaWVzLlNlbGVjdGlvbkVkaXRQb2xpY3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLnJlcXVlc3RzLkNoYW5nZUJvdW5kc1JlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMuSUZlZWRiYWNrSGFuZGxlcjsKLQotcHVibGljIGNsYXNzIEFTRFNlbGVjdGlvbkVkaXRQb2xpY3kgZXh0ZW5kcyBTZWxlY3Rpb25FZGl0UG9saWN5IHsKLQlwcm90ZWN0ZWQgQVNERHJhZ0FuZERyb3BDb21tYW5kIGRyYWdBbmREcm9wQ29tbWFuZDsKLQlwcm90ZWN0ZWQgSUZpZ3VyZSBmZWVkYmFjazsKLQotCSAgcHVibGljIHZvaWQgc2V0RHJhZ0FuZERyb3BDb21tYW5kKEFTRERyYWdBbmREcm9wQ29tbWFuZCBkcmFnQW5kRHJvcENvbW1hbmQpIHsKLQkgICAgdGhpcy5kcmFnQW5kRHJvcENvbW1hbmQgPSBkcmFnQW5kRHJvcENvbW1hbmQ7Ci0JICB9Ci0JICAKLQkgIHB1YmxpYyB2b2lkIHNob3dTb3VyY2VGZWVkYmFjayhSZXF1ZXN0IHJlcXVlc3QpCi0JICB7Ci0JICAJZXJhc2VDaGFuZ2VCb3VuZHNGZWVkYmFjayhudWxsKTsKLQkgIAkKLQkgIAlpZiAoZHJhZ0FuZERyb3BDb21tYW5kICE9IG51bGwgJiYgZHJhZ0FuZERyb3BDb21tYW5kLmNhbkV4ZWN1dGUoKSkgewotCQkgIGlmIChSRVFfTU9WRS5lcXVhbHMocmVxdWVzdC5nZXRUeXBlKCkpIHx8IFJFUV9BREQuZXF1YWxzKHJlcXVlc3QuZ2V0VHlwZSgpKSkgewotCQkJICBzaG93TW92ZUNoYW5nZUJvdW5kc0ZlZWRiYWNrKChDaGFuZ2VCb3VuZHNSZXF1ZXN0KSByZXF1ZXN0KTsKLQkJICB9Ci0vLwkJICBlbHNlIGlmIChSRVFfQ0xPTkUuZXF1YWxzKHJlcXVlc3QuZ2V0VHlwZSgpKSkgewotLy8JCSAgCSAgc2hvd0NvcHlDaGFuZ2VCb3VuZHNGZWVkYmFjaygoQ2hhbmdlQm91bmRzUmVxdWVzdCkgcmVxdWVzdCk7Ci0vLwkJICB9Ci0JICAJfQotCSAgfQotCSAgCi0JICAvKioKLQkgICAqIEVyYXNlIGZlZWRiYWNrIGluZGljYXRpbmcgdGhhdCB0aGUgcmVjZWl2ZXIgb2JqZWN0IGlzIAotCSAgICogYmVpbmcgZHJhZ2dlZC4gIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIGEgZHJhZyBpcwotCSAgICogY29tcGxldGVkIG9yIGNhbmNlbGxlZCBvbiB0aGUgcmVjZWl2ZXIgb2JqZWN0LgotCSAgICogQHBhcmFtIGRyYWdUcmFja2VyIG9yZy5lY2xpcHNlLmdlZi50b29scy5EcmFnVHJhY2tlciBUaGUgZHJhZyB0cmFja2VyIG9mIHRoZSB0b29sIHBlcmZvcm1pbmcgdGhlIGRyYWcuCi0JICAgKi8KLQkgIHB1YmxpYyB2b2lkIGVyYXNlU291cmNlRmVlZGJhY2soUmVxdWVzdCByZXF1ZXN0KSAKLQkgIHsKLQkgICAgaWYgKFJFUV9NT1ZFLmVxdWFscyhyZXF1ZXN0LmdldFR5cGUoKSkgfHwgIFJFUV9BREQuZXF1YWxzKHJlcXVlc3QuZ2V0VHlwZSgpKSkKLQkgICAgewotCQkJICBlcmFzZUNoYW5nZUJvdW5kc0ZlZWRiYWNrKChDaGFuZ2VCb3VuZHNSZXF1ZXN0KXJlcXVlc3QpOwotCSAgICB9Ci0JICB9Ci0JICAKLQkgIC8qKgotCSAgICogRXJhc2UgZmVlZGJhY2sgaW5kaWNhdGluZyB0aGF0IHRoZSByZWNlaXZlciBvYmplY3QgaXMgCi0JICAgKiBiZWluZyBkcmFnZ2VkLiAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gYSBkcmFnIGlzCi0JICAgKiBjb21wbGV0ZWQgb3IgY2FuY2VsbGVkIG9uIHRoZSByZWNlaXZlciBvYmplY3QuCi0JICAgKiBAcGFyYW0gZHJhZ1RyYWNrZXIgb3JnLmVjbGlwc2UuZ2VmLnRvb2xzLkRyYWdUcmFja2VyIFRoZSBkcmFnIHRyYWNrZXIgb2YgdGhlIHRvb2wgcGVyZm9ybWluZyB0aGUgZHJhZy4KLQkgICAqLwotCSAgcHJvdGVjdGVkIHZvaWQgZXJhc2VDaGFuZ2VCb3VuZHNGZWVkYmFjayhDaGFuZ2VCb3VuZHNSZXF1ZXN0IHJlcXVlc3QpIAotCSAgewotCQkgIGlmIChmZWVkYmFjayAhPSBudWxsKSAKLQkgICAgewkJICAgICAgCi0JCQkgIHJlbW92ZUZlZWRiYWNrKGZlZWRiYWNrKTsKLQkJICB9Ci0JCSAgZmVlZGJhY2sgPSBudWxsOwotCSAgfQotCSAgCi0JICBwcm90ZWN0ZWQgdm9pZCBzaG93TW92ZUNoYW5nZUJvdW5kc0ZlZWRiYWNrKENoYW5nZUJvdW5kc1JlcXVlc3QgcmVxdWVzdCkKLQkgIHsKLQkgIAlpZiAoZHJhZ0FuZERyb3BDb21tYW5kICE9IG51bGwgJiYgZHJhZ0FuZERyb3BDb21tYW5kLmdldEZlZWRiYWNrRmlndXJlKCkgIT0gbnVsbCkgewotCSAgCQlmZWVkYmFjayA9IGRyYWdBbmREcm9wQ29tbWFuZC5nZXRGZWVkYmFja0ZpZ3VyZSgpOwotCSAgCQlhZGRGZWVkYmFjayhmZWVkYmFjayk7Ci0JICAJfQotCSAgfSAKLQkgIAotCXByb3RlY3RlZCB2b2lkIGhpZGVTZWxlY3Rpb24oKSB7Ci0JCWlmIChnZXRIb3N0KCkgaW5zdGFuY2VvZiBJRmVlZGJhY2tIYW5kbGVyKSB7Ci0JCQkJKChJRmVlZGJhY2tIYW5kbGVyKSBnZXRIb3N0KCkpLnJlbW92ZUZlZWRiYWNrKCk7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzaG93U2VsZWN0aW9uKCkgewotCQlpZiAoZ2V0SG9zdCgpIGluc3RhbmNlb2YgSUZlZWRiYWNrSGFuZGxlcikgewotCQkJKChJRmVlZGJhY2tIYW5kbGVyKSBnZXRIb3N0KCkpLmFkZEZlZWRiYWNrKCk7Ci0JCX0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZmlndXJlcy9CYXNlTGlua0ljb25GaWd1cmUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2ZpZ3VyZXMvQmFzZUxpbmtJY29uRmlndXJlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5NTNlMTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZmlndXJlcy9CYXNlTGlua0ljb25GaWd1cmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5maWd1cmVzOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuQ29sb3JDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuSUZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuVG9vbGJhckxheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuRGltZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUG9pbnRMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5SZWN0YW5nbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmVkaXRwYXJ0cy5BYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Db2xvcjsKLQotcHVibGljIGNsYXNzIEJhc2VMaW5rSWNvbkZpZ3VyZSBleHRlbmRzIEZpZ3VyZSB7Ci0JcHVibGljIHN0YXRpYyBpbnQgVkFMSURfU0NIRU1BX0xJTktfU1RZTEUgPSAxOwotCXB1YmxpYyBzdGF0aWMgaW50IElOVkFMSURfU0NIRU1BX0xJTktfU1RZTEUgPSAyOwotCi0JcHJpdmF0ZSBpbnQgbGlua0ljb25TdHlsZSA9IFZBTElEX1NDSEVNQV9MSU5LX1NUWUxFOwkKLQlwcml2YXRlIEFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQgZWRpdFBhcnQ7Ci0JcHJpdmF0ZSBMaXN0IGNoaWxkRmlndXJlcyA9IG5ldyBBcnJheUxpc3QoKTsKLQlwdWJsaWMgaW50IGZpZ3VyZVNwYWNpbmcgPSA3OwotCi0JcHVibGljIEJhc2VMaW5rSWNvbkZpZ3VyZShBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0IGVwKSB7Ci0JCWVkaXRQYXJ0ID0gZXA7Ci0KLQkJVG9vbGJhckxheW91dCBsYXlvdXQgPSBuZXcgVG9vbGJhckxheW91dCh0cnVlKSB7Ci0JCQlwdWJsaWMgdm9pZCBsYXlvdXQoSUZpZ3VyZSBwYXJlbnQpIHsKLQkJCQlzdXBlci5sYXlvdXQocGFyZW50KTsKLQotCQkJCUFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQgZXAgPSBnZXRBc3NvY2lhdGVkRWRpdFBhcnQoKTsKLQkJCQlJRmlndXJlIGFzc29jaWF0ZWRGaWd1cmUgPSBlcC5nZXRGaWd1cmUoKTsKLQkJCQlpZiAoYXNzb2NpYXRlZEZpZ3VyZSAhPSBudWxsKSB7Ci0JCQkJCS8vIFVwZGF0ZSB0aGUgYm91bmRzCi0JCQkJCVJlY3RhbmdsZSBhc3NvY2lhdGVkQm91bmRzID0gYXNzb2NpYXRlZEZpZ3VyZS5nZXRCb3VuZHMoKTsKLQkJCQkJaW50IHggPSBhc3NvY2lhdGVkQm91bmRzLnggKyBhc3NvY2lhdGVkQm91bmRzLndpZHRoOwotCQkJCQlpbnQgeSA9IGFzc29jaWF0ZWRCb3VuZHMueTsKLQkJCQkJaW50IHdpZHRoID0gZ2V0U2l6ZSgpLndpZHRoOwotCQkJCQlpbnQgaGVpZ2h0ID0gYXNzb2NpYXRlZEJvdW5kcy5oZWlnaHQ7Ci0KLQkJCQkJUmVjdGFuZ2xlIG5ld0ZpZ0JvdW5kcyA9IG5ldyBSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci0JCQkJCS8vIFNldCBteSBib3VuZHMgYmFzZWQgb24gbXkgYXNzb2NpYXRlZCBlZGl0cGFydAotCQkJCQlzZXRCb3VuZHMobmV3RmlnQm91bmRzKTsKLQotCQkJCQkvLyBMYXlvdXQgdGhlIGNoaWxkcmVuCi0JCQkJCUl0ZXJhdG9yIGl0ID0gcGFyZW50LmdldENoaWxkcmVuKCkuaXRlcmF0b3IoKTsKLQkJCQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJCQkJSUZpZ3VyZSBmaWcgPSAoSUZpZ3VyZSkgaXQubmV4dCgpOwotCQkJCQkJUG9pbnQgbmV3UG9pbnQgPSBuZXcgUG9pbnQoeCwgeSk7Ci0KLQkJCQkJCS8vIEluZGVudCB0aGUgZmlndXJlIHRvIHRoZSByaWdodCB0byBzaG93IHRoZSAiYnJva2VuIiBzY2hlbWEgbGluayBmaWd1cmUKLQkJCQkJCWlmIChmaWcgaW5zdGFuY2VvZiBSaWdodEludmFsaWRJY29uRmlndXJlKSB7Ci0JCQkJCQkJbmV3UG9pbnQueCA9IG5ld1BvaW50LnggKyBmaWd1cmVTcGFjaW5nOwotCQkJCQkJfQotCi0JCQkJCQlmaWcuc2V0TG9jYXRpb24obmV3UG9pbnQpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9OwotCQlzZXRMYXlvdXRNYW5hZ2VyKGxheW91dCk7Ci0KLQkJLy8gRGVmYXVsdCB0byBhIFZhbGlkTGlua0ljb25GaWd1cmUKLQkJbGlua0ljb25TdHlsZSA9IFZBTElEX1NDSEVNQV9MSU5LX1NUWUxFOwotCQlhZGRDaGlsZEZpZ3VyZShuZXcgVmFsaWRMaW5rSWNvbkZpZ3VyZSgpKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcmVtb3ZlQ2hpbGRGaWd1cmVzKCkgewotCQlJdGVyYXRvciBpdCA9IGNoaWxkRmlndXJlcy5pdGVyYXRvcigpOwotCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0JCQlyZW1vdmUoKElGaWd1cmUpIGl0Lm5leHQoKSk7Ci0JCX0KLQotCQljaGlsZEZpZ3VyZXMuY2xlYXIoKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYWRkQ2hpbGRGaWd1cmUoSUZpZ3VyZSBmaWcpIHsKLQkJY2hpbGRGaWd1cmVzLmFkZChmaWcpOwotCQlhZGQoZmlnKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRMaW5rSWNvblN0eWxlKGludCBzdHlsZSkgewotCQlpZiAoc3R5bGUgPT0gVkFMSURfU0NIRU1BX0xJTktfU1RZTEUgJiYgbGlua0ljb25TdHlsZSAhPSBWQUxJRF9TQ0hFTUFfTElOS19TVFlMRSkgewotCQkJcmVtb3ZlQ2hpbGRGaWd1cmVzKCk7Ci0JCQlhZGRDaGlsZEZpZ3VyZShuZXcgVmFsaWRMaW5rSWNvbkZpZ3VyZSgpKTsKLQkJfQotCQllbHNlIGlmIChzdHlsZSA9PSBJTlZBTElEX1NDSEVNQV9MSU5LX1NUWUxFICYmIGxpbmtJY29uU3R5bGUgIT0gSU5WQUxJRF9TQ0hFTUFfTElOS19TVFlMRSkgewotCQkJcmVtb3ZlQ2hpbGRGaWd1cmVzKCk7Ci0JCQlhZGRDaGlsZEZpZ3VyZShuZXcgTGVmdEludmFsaWRJY29uRmlndXJlKCkpOwotCQkJYWRkQ2hpbGRGaWd1cmUobmV3IFJpZ2h0SW52YWxpZEljb25GaWd1cmUoKSk7Ci0JCX0KLQotCQlsaW5rSWNvblN0eWxlID0gc3R5bGU7Ci0JfQotCi0JcHVibGljIGludCBnZXRMaW5rSWNvblN0eWxlKCkgewotCQlyZXR1cm4gbGlua0ljb25TdHlsZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRDb2xvcihDb2xvciBjb2xvcikgewotCQlJdGVyYXRvciBpdCA9IGNoaWxkRmlndXJlcy5pdGVyYXRvcigpOwotCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0JCQlJRmlndXJlIGZpZyA9IChJRmlndXJlKSBpdC5uZXh0KCk7Ci0JCQlmaWcuc2V0QmFja2dyb3VuZENvbG9yKGNvbG9yKTsKLQkJCWZpZy5zZXRGb3JlZ3JvdW5kQ29sb3IoY29sb3IpOwotCQl9Ci0JfQotCi0JcHVibGljIEFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQgZ2V0QXNzb2NpYXRlZEVkaXRQYXJ0KCkgewotCQlyZXR1cm4gZWRpdFBhcnQ7Ci0JfQotCi0JcHJpdmF0ZSBjbGFzcyBMZWZ0SW52YWxpZEljb25GaWd1cmUgZXh0ZW5kcyBMaW5rSWNvbkZpZ3VyZSB7Ci0JCXB1YmxpYyBMZWZ0SW52YWxpZEljb25GaWd1cmUoKSB7Ci0JCQlzdXBlcihudWxsKTsKLQkJCVBvaW50TGlzdCBwb2ludHMgPSBuZXcgUG9pbnRMaXN0KCk7Ci0JCQkKLQkJCS8vIERyYXcgdGhlIGFycm93Ci0JCQlwb2ludHMuYWRkUG9pbnQobmV3IFBvaW50KGhvcml6b250YWxCdWZmZXIgKyAwLCA0ICsgdmVydGljYWxCdWZmZXIpKTsKLQkJCXBvaW50cy5hZGRQb2ludChuZXcgUG9pbnQoaG9yaXpvbnRhbEJ1ZmZlciArIDUsIDQgKyB2ZXJ0aWNhbEJ1ZmZlcikpOwotCi0JCQlwb2ludHMuYWRkUG9pbnQobmV3IFBvaW50KGhvcml6b250YWxCdWZmZXIgKyA3LCAwICsgdmVydGljYWxCdWZmZXIpKTsJLy8gdG9wIHNsYXNoCi0JCQlwb2ludHMuYWRkUG9pbnQobmV3IFBvaW50KGhvcml6b250YWxCdWZmZXIgKyA1LCA0ICsgdmVydGljYWxCdWZmZXIpKTsKLQkJCXBvaW50cy5hZGRQb2ludChuZXcgUG9pbnQoaG9yaXpvbnRhbEJ1ZmZlciArIDIsIDEwICsgdmVydGljYWxCdWZmZXIpKTsJLy8gYm90dG9tIHNsYXNoCi0KLQkJCXBvaW50cy5hZGRQb2ludChuZXcgUG9pbnQoaG9yaXpvbnRhbEJ1ZmZlciArIDQsIDYgKyB2ZXJ0aWNhbEJ1ZmZlcikpOwotCQkJcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgMCwgNiArIHZlcnRpY2FsQnVmZmVyKSk7Ci0JCQlwb2ludHMuYWRkUG9pbnQobmV3IFBvaW50KGhvcml6b250YWxCdWZmZXIgKyAwLCA0ICsgdmVydGljYWxCdWZmZXIpKTsKLQotCQkJc2V0Rm9yZWdyb3VuZENvbG9yKENvbG9yQ29uc3RhbnRzLmxpZ2h0R3JheSk7Ci0JCQlzZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3JDb25zdGFudHMubGlnaHRHcmF5KTsKLQkJCXNldEZpbGwodHJ1ZSk7Ci0JCQlzZXRQb2ludHMocG9pbnRzKTsKLQkJfQotCi0JCS8vIFdlIGluY3JlYXNlIHRoZSBzaXplIG9mIHRoZSB3aWR0aCBiZWNhdXNlIHdlIGluZGVudCB0aGUgZmlndXJlIHRvd2FyZHMgdGhlIHJpZ2h0LgotCQkvLyBTbyB3ZSBpbmRlbnQgYnkgdGhhdCBzYW1lIGFtb3VudCBzdG9yZWQgaW4gaG9yaXpvbnRhbEJ1ZmZlcgotCQlwdWJsaWMgRGltZW5zaW9uIGdldFByZWZlcnJlZFNpemUoaW50IHdIaW50LCBpbnQgaEhpbnQpIHsKLQkJCURpbWVuc2lvbiBkaW1lbnNpb24gPSBzdXBlci5nZXRQcmVmZXJyZWRTaXplKHdIaW50LCBoSGludCk7Ci0JCQlkaW1lbnNpb24ud2lkdGggPSBkaW1lbnNpb24ud2lkdGggKyBob3Jpem9udGFsQnVmZmVyOwotCi0JCQlyZXR1cm4gZGltZW5zaW9uOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgc2V0TG9jYXRpb24oUG9pbnQgcG9pbnQpIHsKLQkJCXN1cGVyLnNldExvY2F0aW9uKHBvaW50KTsKLQkJCS8vIFVwZGF0ZSB0aGUgcG9pbnRzIHdpdGggdGhlIGZvbGxvd2luZyBtZXRob2QgY2FsbAotCQkJc2V0RmlndXJlTG9jYXRpb24ocG9pbnQpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBjbGFzcyBSaWdodEludmFsaWRJY29uRmlndXJlIGV4dGVuZHMgTGlua0ljb25GaWd1cmUgewotCQlwdWJsaWMgUmlnaHRJbnZhbGlkSWNvbkZpZ3VyZSgpIHsKLQkJCXN1cGVyKG51bGwpOwotCQkJUG9pbnRMaXN0IHBvaW50cyA9IG5ldyBQb2ludExpc3QoKTsKLQotCQkJcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgNSwgNCArIHZlcnRpY2FsQnVmZmVyKSk7Ci0JCQlwb2ludHMuYWRkUG9pbnQobmV3IFBvaW50KGhvcml6b250YWxCdWZmZXIgKyA3LCAwICsgdmVydGljYWxCdWZmZXIpKTsJLy8gdG9wIHNsYXNoCi0JCQlwb2ludHMuYWRkUG9pbnQobmV3IFBvaW50KGhvcml6b250YWxCdWZmZXIgKyA1LCA0ICsgdmVydGljYWxCdWZmZXIpKTsKLQkJCXBvaW50cy5hZGRQb2ludChuZXcgUG9pbnQoaG9yaXpvbnRhbEJ1ZmZlciArIDEwLCA0ICsgdmVydGljYWxCdWZmZXIpKTsKLQotCQkJcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgMTAsIDAgKyB2ZXJ0aWNhbEJ1ZmZlcikpOwotCQkJcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgMTUsIDUgKyB2ZXJ0aWNhbEJ1ZmZlcikpOwotCQkJcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgMTAsIDEwICsgdmVydGljYWxCdWZmZXIpKTsKLQkJCXBvaW50cy5hZGRQb2ludChuZXcgUG9pbnQoaG9yaXpvbnRhbEJ1ZmZlciArIDEwLCA2ICsgdmVydGljYWxCdWZmZXIpKTsKLQotCQkJcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgNCwgNiArIHZlcnRpY2FsQnVmZmVyKSk7Ci0JCQlwb2ludHMuYWRkUG9pbnQobmV3IFBvaW50KGhvcml6b250YWxCdWZmZXIgKyAyLCAxMCArIHZlcnRpY2FsQnVmZmVyKSk7CS8vIGJvdHRvbSBzbGFzaAotCQkJcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgNSwgNCArIHZlcnRpY2FsQnVmZmVyKSk7Ci0KLQkJCXNldEZvcmVncm91bmRDb2xvcihDb2xvckNvbnN0YW50cy5saWdodEdyYXkpOwotCQkJc2V0QmFja2dyb3VuZENvbG9yKENvbG9yQ29uc3RhbnRzLmxpZ2h0R3JheSk7Ci0JCQlzZXRGaWxsKHRydWUpOwotCQkJc2V0UG9pbnRzKHBvaW50cyk7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBzZXRMb2NhdGlvbihQb2ludCBwb2ludCkgewotCQkJc3VwZXIuc2V0TG9jYXRpb24ocG9pbnQpOwotCQkJc2V0RmlndXJlTG9jYXRpb24ocG9pbnQpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBjbGFzcyBWYWxpZExpbmtJY29uRmlndXJlIGV4dGVuZHMgTGVmdEludmFsaWRJY29uRmlndXJlIHsKLQkJcHVibGljIFZhbGlkTGlua0ljb25GaWd1cmUoKSB7Ci0JCQlQb2ludExpc3QgcG9pbnRzID0gbmV3IFBvaW50TGlzdCgpOwotCi0JCQkvLyBEcmF3IHRoZSBhcnJvdwotCQkJcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgMCwgNCArIHZlcnRpY2FsQnVmZmVyKSk7Ci0JCQlwb2ludHMuYWRkUG9pbnQobmV3IFBvaW50KGhvcml6b250YWxCdWZmZXIgKyAxNSwgNCArIHZlcnRpY2FsQnVmZmVyKSk7Ci0JCQlwb2ludHMuYWRkUG9pbnQobmV3IFBvaW50KGhvcml6b250YWxCdWZmZXIgKyAxNSwgMCArIHZlcnRpY2FsQnVmZmVyKSk7Ci0JCQlwb2ludHMuYWRkUG9pbnQobmV3IFBvaW50KGhvcml6b250YWxCdWZmZXIgKyAyMCwgNSArIHZlcnRpY2FsQnVmZmVyKSk7Ci0JCQlwb2ludHMuYWRkUG9pbnQobmV3IFBvaW50KGhvcml6b250YWxCdWZmZXIgKyAxNSwgMTAgKyB2ZXJ0aWNhbEJ1ZmZlcikpOwotCQkJcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgMTUsIDYgKyB2ZXJ0aWNhbEJ1ZmZlcikpOwotCQkJcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgMCwgNiArIHZlcnRpY2FsQnVmZmVyKSk7Ci0JCQlwb2ludHMuYWRkUG9pbnQobmV3IFBvaW50KGhvcml6b250YWxCdWZmZXIgKyAwLCA0ICsgdmVydGljYWxCdWZmZXIpKTsKLQotCQkJc2V0Rm9yZWdyb3VuZENvbG9yKENvbG9yQ29uc3RhbnRzLmxpZ2h0R3JheSk7Ci0JCQlzZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3JDb25zdGFudHMubGlnaHRHcmF5KTsKLQkJCXNldEZpbGwodHJ1ZSk7Ci0JCQlzZXRQb2ludHMocG9pbnRzKTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2ZpZ3VyZXMvQm94Q29tcG9uZW50RmlndXJlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9maWd1cmVzL0JveENvbXBvbmVudEZpZ3VyZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0M2RiYzI2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2ZpZ3VyZXMvQm94Q29tcG9uZW50RmlndXJlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5maWd1cmVzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLlRvb2xiYXJMYXlvdXQ7Ci0KLXB1YmxpYyBjbGFzcyBCb3hDb21wb25lbnRGaWd1cmUgZXh0ZW5kcyBGaWd1cmUKLXsKLSAgcHVibGljIEhlYWRpbmdGaWd1cmUgaGVhZGluZ0ZpZ3VyZTsKLSAgRmlndXJlIGNvbnRlbnRQYW5lOwotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc1NlbGVjdGVkID0gZmFsc2U7Ci0gIHByb3RlY3RlZCBib29sZWFuIGlzUmVhZE9ubHkgPSBmYWxzZTsKLQotICBwdWJsaWMgdm9pZCBzZXRTZWxlY3RlZChib29sZWFuIGlzU2VsZWN0ZWQpCi0gIHsKLSAgICBoZWFkaW5nRmlndXJlLnNldFNlbGVjdGVkKGlzU2VsZWN0ZWQpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0SXNSZWFkT25seShib29sZWFuIGlzUmVhZE9ubHkpCi0gIHsKLSAgICB0aGlzLmlzUmVhZE9ubHkgPSBpc1JlYWRPbmx5OwotICB9Ci0KLSAgcHVibGljIEJveENvbXBvbmVudEZpZ3VyZSgpCi0gIHsKLSAgICBzdXBlcigpOwotICAgIGhlYWRpbmdGaWd1cmUgPSBuZXcgSGVhZGluZ0ZpZ3VyZSgpOwotICAgIGFkZChoZWFkaW5nRmlndXJlKTsKLSAgICBjb250ZW50UGFuZSA9IG5ldyBMaXN0RmlndXJlKCk7Ci0gICAgY29udGVudFBhbmUuc2V0TGF5b3V0TWFuYWdlcihuZXcgVG9vbGJhckxheW91dCgpKTsKLSAgICBhZGQoY29udGVudFBhbmUpOwotICB9Ci0KLSAgcHVibGljIEZpZ3VyZSBnZXRDb250ZW50UGFuZSgpCi0gIHsKLSAgICByZXR1cm4gY29udGVudFBhbmU7Ci0gIH0KLQotICBwdWJsaWMgTGFiZWwgZ2V0TGFiZWwoKQotICB7Ci0gICAgcmV0dXJuIGhlYWRpbmdGaWd1cmUuZ2V0TGFiZWwoKTsKLSAgfQotICAKLSAgcHVibGljIEZpZ3VyZSBnZXRIZWFkaW5nRmlndXJlKCkKLSAgewotICAgIHJldHVybiBoZWFkaW5nRmlndXJlOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZmlndXJlcy9Db21wb25lbnRSZWZlcmVuY2VDb25uZWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9maWd1cmVzL0NvbXBvbmVudFJlZmVyZW5jZUNvbm5lY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjI2MDJhNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9maWd1cmVzL0NvbXBvbmVudFJlZmVyZW5jZUNvbm5lY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmZpZ3VyZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuQ29sb3JDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkNvbm5lY3Rpb25Sb3V0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLlBvbHlnb25EZWNvcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Qb2x5bGluZUNvbm5lY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkNvbG9yOwotCi1wdWJsaWMgY2xhc3MgQ29tcG9uZW50UmVmZXJlbmNlQ29ubmVjdGlvbiBleHRlbmRzIFBvbHlsaW5lQ29ubmVjdGlvbgotewotICBwcm90ZWN0ZWQgYm9vbGVhbiBoaWdobGlnaHQgPSBmYWxzZTsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBDb2xvciBhY3RpdmVDb25uZWN0aW9uID0gQ29sb3JDb25zdGFudHMuYmxhY2s7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgQ29sb3IgaW5hY3RpdmVDb25uZWN0aW9uID0gbmV3IENvbG9yKG51bGwsIDE5OCwgMTk1LCAxOTgpOwotCi0gIC8qKgotICAgKiBEZWZhdWx0IGNvbnN0cnVjdG9yCi0gICAqLwotICBwdWJsaWMgQ29tcG9uZW50UmVmZXJlbmNlQ29ubmVjdGlvbigpCi0gIHsKLSAgICBzdXBlcigpOwotICAgIHNldFRhcmdldERlY29yYXRpb24obmV3IFBvbHlnb25EZWNvcmF0aW9uKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0Q29ubmVjdGlvblJvdXRlcihDb25uZWN0aW9uUm91dGVyIGNyKQotICB7Ci0gICAgaWYgKGNyICE9IG51bGwgJiYgZ2V0Q29ubmVjdGlvblJvdXRlcigpICE9IG51bGwpLy8gVE9ETzouLi4uICYmICEoZ2V0Q29ubmVjdGlvblJvdXRlcigpIGluc3RhbmNlb2YgQk9NYW5oYXR0YW5Db25uZWN0aW9uUm91dGVyKSkKLSAgICAgIHN1cGVyLnNldENvbm5lY3Rpb25Sb3V0ZXIoY3IpOwotICB9Ci0KLSAgLyoqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgY3VycmVudCBoaWdobGlnaHQgc3RhdHVzLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNIaWdobGlnaHRlZCgpCi0gIHsKLSAgICByZXR1cm4gaGlnaGxpZ2h0OwotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBoaWdobGlnaHQKLSAgICogICAgICAgICAgVGhlIGhpZ2hsaWdodCB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRIaWdobGlnaHQoYm9vbGVhbiBoaWdobGlnaHQpCi0gIHsKLSAgICB0aGlzLmhpZ2hsaWdodCA9IGhpZ2hsaWdodDsKLSAgICBzZXRGb3JlZ3JvdW5kQ29sb3IoaGlnaGxpZ2h0ID8gYWN0aXZlQ29ubmVjdGlvbiA6IGluYWN0aXZlQ29ubmVjdGlvbik7Ci0gICAgc2V0T3BhcXVlKGhpZ2hsaWdodCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2ZpZ3VyZXMvSGVhZGluZ0ZpZ3VyZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZmlndXJlcy9IZWFkaW5nRmlndXJlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkZDViYTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZmlndXJlcy9IZWFkaW5nRmlndXJlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5maWd1cmVzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkNvbG9yQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5GaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkdyYXBoaWNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuTWFyZ2luQm9yZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Ub29sYmFyTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5SZWN0YW5nbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkNvbG9yOwotCi1wdWJsaWMgY2xhc3MgSGVhZGluZ0ZpZ3VyZSBleHRlbmRzIEZpZ3VyZQotewotICBwdWJsaWMgc3RhdGljIGZpbmFsIENvbG9yIGhlYWRlckNvbG9yID0gbmV3IENvbG9yKG51bGwsIDIyNCwgMjMzLCAyNDYpOwotICBMYWJlbCBsYWJlbDsKLSAgcHJvdGVjdGVkIENvbG9yW10gZ3JhZGllbnRDb2xvciA9IHtDb2xvckNvbnN0YW50cy53aGl0ZSwgIAotICAgICAgICAgICAgQ29sb3JDb25zdGFudHMubGlnaHRHcmF5LAotICAgICAgICAgICAgQ29sb3JDb25zdGFudHMubGlnaHRCbHVlLAotICAgICAgICAgICAgQ29sb3JDb25zdGFudHMuZ3JheX07Ci0gIHByb3RlY3RlZCBib29sZWFuIGlzU2VsZWN0ZWQgPSBmYWxzZTsKLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNSZWFkT25seSA9IGZhbHNlOwotICAKLSAgcHVibGljIEhlYWRpbmdGaWd1cmUoKQotICB7Ci0gICAgbGFiZWwgPSBuZXcgTGFiZWwoKTsKLSAgICBsYWJlbC5zZXRCb3JkZXIobmV3IE1hcmdpbkJvcmRlcigyKSk7Ci0gICAgVG9vbGJhckxheW91dCB0b29sYmFyTGF5b3V0ID0gbmV3IFRvb2xiYXJMYXlvdXQoZmFsc2UpOwotICAgIHRvb2xiYXJMYXlvdXQuc2V0TWlub3JBbGlnbm1lbnQoVG9vbGJhckxheW91dC5BTElHTl9DRU5URVIpOwotICAgIHNldExheW91dE1hbmFnZXIodG9vbGJhckxheW91dCk7Ci0gICAgYWRkKGxhYmVsKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0U2VsZWN0ZWQoYm9vbGVhbiBpc1NlbGVjdGVkKQotICB7Ci0gICAgdGhpcy5pc1NlbGVjdGVkID0gaXNTZWxlY3RlZDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0SXNSZWFkT25seShib29sZWFuIGlzUmVhZE9ubHkpCi0gIHsKLSAgICB0aGlzLmlzUmVhZE9ubHkgPSBpc1JlYWRPbmx5OwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBwYWludChHcmFwaGljcyBncmFwaGljcykKLSAgewotICAgIHN1cGVyLnBhaW50KGdyYXBoaWNzKTsKLS8vICAgIENvbG9yIG9sZEZvcmVncm91bmQgPSAgZ3JhcGhpY3MuZ2V0Rm9yZWdyb3VuZENvbG9yKCk7Ci0gICAgLy8gRmlsbCBmb3IgdGhlIGhlYWRlciBzZWN0aW9uCi0gICAgLy8KLSAgICBSZWN0YW5nbGUgciA9IGdldEJvdW5kcygpLmdldENvcHkoKTsKLSAgICBncmFwaGljcy5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3JDb25zdGFudHMubGlnaHRHcmF5KTsKLSAgICAvL2dyYXBoaWNzLmZpbGxSZWN0YW5nbGUoci54KzEsIHIueSsxLCByLndpZHRoLTEsIGJhclljb29yZGluYXRlIC0gci55IC0gMSk7Ci0gICAgQ29sb3IgZ3JhZGllbnQxID0gaXNSZWFkT25seSA/IGdyYWRpZW50Q29sb3JbMV0gOiBoZWFkZXJDb2xvcjsKLSAgICBpZiAoaXNTZWxlY3RlZCAmJiBpc1JlYWRPbmx5KSBncmFkaWVudDEgPSBncmFkaWVudENvbG9yWzNdOwotICAgIGVsc2UgaWYgKGlzU2VsZWN0ZWQgJiYgIWlzUmVhZE9ubHkpIGdyYWRpZW50MSA9IGdyYWRpZW50Q29sb3JbMl07Ci0gICAgQ29sb3IgZ3JhZGllbnQyID0gZ3JhZGllbnRDb2xvclswXTsKLSAgICBncmFwaGljcy5zZXRGb3JlZ3JvdW5kQ29sb3IoZ3JhZGllbnQxKTsKLSAgICBncmFwaGljcy5zZXRCYWNrZ3JvdW5kQ29sb3IoZ3JhZGllbnQyKTsKLSAgICBSZWN0YW5nbGUgbGFiZWxCb3VuZHMgPSBsYWJlbC5nZXRCb3VuZHMoKTsKLSAgICBncmFwaGljcy5maWxsR3JhZGllbnQoci54KzEsIHIueSsxLCByLndpZHRoLTIsIGxhYmVsQm91bmRzLmhlaWdodCAsIHRydWUpOwotICAgIGdyYXBoaWNzLnNldEZvcmVncm91bmRDb2xvcihDb2xvckNvbnN0YW50cy5kYXJrR3JheSk7Ci0gICAgbGFiZWwucGFpbnQoZ3JhcGhpY3MpOyAgICAKLSAgICBncmFwaGljcy5zZXRGb3JlZ3JvdW5kQ29sb3IoaXNTZWxlY3RlZCA/IGdyYWRpZW50Q29sb3JbMV0gOiBncmFkaWVudENvbG9yWzNdKTsKLSAgICAvL2dyYXBoaWNzLmRyYXdMaW5lKHIueCsxLCByLnkgKyAxNSwgci54ICsgci53aWR0aCwgci55ICsgMTUpOwotICAgIC8vZ3JhcGhpY3MuZHJhd0xpbmUoci54KzEsIHIueSArIGxhYmVsQm91bmRzLmhlaWdodCwgci54ICsgci53aWR0aCwgci55ICsgbGFiZWxCb3VuZHMuaGVpZ2h0KTsKLSAgfQotCi0gIHB1YmxpYyBMYWJlbCBnZXRMYWJlbCgpCi0gIHsKLSAgICByZXR1cm4gbGFiZWw7Ci0gIH0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZmlndXJlcy9MaW5rSWNvbkZpZ3VyZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZmlndXJlcy9MaW5rSWNvbkZpZ3VyZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTA3YTM4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2ZpZ3VyZXMvTGlua0ljb25GaWd1cmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmZpZ3VyZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuR3JhcGhpY3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLlBvbHlnb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LlBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5Qb2ludExpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmVkaXRwYXJ0cy5BYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0OwotCi1wdWJsaWMgY2xhc3MgTGlua0ljb25GaWd1cmUgZXh0ZW5kcyBQb2x5Z29uIHsKLQlwcml2YXRlIEFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQgZWRpdFBhcnQ7Ci0JcHJpdmF0ZSBQb2ludCBmaWdMb2NhdGlvbjsKLQkgIHByaXZhdGUgUG9pbnRMaXN0IHBvaW50cyA9IG5ldyBQb2ludExpc3QoKTsKLQkgIHB1YmxpYyBpbnQgaG9yaXpvbnRhbEJ1ZmZlciA9IDU7Ci0JICBwdWJsaWMgaW50IHZlcnRpY2FsQnVmZmVyID0gNzsKLQotCSAgcHVibGljIExpbmtJY29uRmlndXJlKEFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQgZXApIHsKLQkJICBlZGl0UGFydCA9IGVwOwotCQkgIAotCQkgIC8vIERyYXcgdGhlIGFycm93Ci0JCSAgcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgMCwgNCArIHZlcnRpY2FsQnVmZmVyKSk7Ci0JCSAgcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgOSwgNCArIHZlcnRpY2FsQnVmZmVyKSk7Ci0JCSAgcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgOSwgMCArIHZlcnRpY2FsQnVmZmVyKSk7Ci0JCSAgcG9pbnRzLmFkZFBvaW50KG5ldyBQb2ludChob3Jpem9udGFsQnVmZmVyICsgMTQsIDUgKyB2ZXJ0aWNhbEJ1ZmZlcikpOwotCQkgIHBvaW50cy5hZGRQb2ludChuZXcgUG9pbnQoaG9yaXpvbnRhbEJ1ZmZlciArIDksIDEwICsgdmVydGljYWxCdWZmZXIpKTsKLQkJICBwb2ludHMuYWRkUG9pbnQobmV3IFBvaW50KGhvcml6b250YWxCdWZmZXIgKyA5LCA2ICsgdmVydGljYWxCdWZmZXIpKTsKLQkJICBwb2ludHMuYWRkUG9pbnQobmV3IFBvaW50KGhvcml6b250YWxCdWZmZXIgKyAwLCA2ICsgdmVydGljYWxCdWZmZXIpKTsKLQkJICBwb2ludHMuYWRkUG9pbnQobmV3IFBvaW50KGhvcml6b250YWxCdWZmZXIgKyAwLCA0ICsgdmVydGljYWxCdWZmZXIpKTsKLQkJICAKLQkJICBzZXRGaWxsKHRydWUpOwkgIAotCQkgIHNldFBvaW50cyhwb2ludHMpOwotCSAgfQotCSAgCi0JICBwdWJsaWMgdm9pZCBwYWludEZpZ3VyZShHcmFwaGljcyBncmFwaGljcykgewotCQkgIHN1cGVyLnBhaW50RmlndXJlKGdyYXBoaWNzKTsKLQkgIH0KLQkgIAotCSAgcHVibGljIHZvaWQgc2V0RmlndXJlTG9jYXRpb24oUG9pbnQgbmV3U3RhcnRpbmdMb2NhdGlvbikgewotCQkgIGludCBkeSA9IG5ld1N0YXJ0aW5nTG9jYXRpb24ueTsKLQotCQkgIGlmIChmaWdMb2NhdGlvbiAhPSBudWxsKSB7Ci0JCQkgIGR5ID0gbmV3U3RhcnRpbmdMb2NhdGlvbi55IC0gZmlnTG9jYXRpb24ueTsKLQkJICB9Ci0KLQkJICAvLyBVcGRhdGUgdGhlIHBvaW50cwotCQkgIFBvaW50TGlzdCBuZXdQb2ludHMgPSBuZXcgUG9pbnRMaXN0KCk7Ci0JCSAgUG9pbnRMaXN0IHBMaXN0ID0gZ2V0UG9pbnRzKCk7Ci0JCSAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IHBMaXN0LnNpemUoKTsgaW5kZXgrKykgewotCQkJICBQb2ludCBwb2ludCA9IHBMaXN0LmdldFBvaW50KGluZGV4KTsKLQkJCSAgLy8gQWRkIDUgZm9yIHRoZSBwYWRkaW5nCi0JCQkgIFBvaW50IG5ld1BvaW50ID0gbmV3IFBvaW50KHBvaW50LnggKyBob3Jpem9udGFsQnVmZmVyLCBwb2ludC55ICsgZHkpOwotCQkJICBuZXdQb2ludHMuYWRkUG9pbnQobmV3UG9pbnQpOwotCQkgIH0KLQkJICBzZXRQb2ludHMobmV3UG9pbnRzKTsKLQotCQkgIGZpZ0xvY2F0aW9uID0gbmV3U3RhcnRpbmdMb2NhdGlvbjsKLQkgIH0KLQkgIAotCSAgcHVibGljIHZvaWQgcHJpbVRyYW5zbGF0ZShpbnQgZHgsIGludCBkeSkgewotCQkJYm91bmRzLnggKz0gZHg7Ci0JCQlib3VuZHMueSArPSBkeTsKLQkJCQotCQkJUG9pbnRMaXN0IHBMaXN0ID0gZ2V0UG9pbnRzKCk7Ci0JCQlQb2ludExpc3QgbmV3TGlzdCA9IG5ldyBQb2ludExpc3QoKTsKLQkJCWZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBwTGlzdC5zaXplKCk7IGluZGV4KyspIHsKLQkJCQlQb2ludCBwb2ludCA9IHBMaXN0LmdldFBvaW50KGluZGV4KTsKLQkJCQlQb2ludCBuZXdQb2ludCA9IG5ldyBQb2ludChwb2ludC54ICsgZHgsIHBvaW50LnkpOwotCQkJCW5ld0xpc3QuYWRkUG9pbnQobmV3UG9pbnQpOwotCQkJfQotCQkJc2V0UG9pbnRzKG5ld0xpc3QpOwotCQkJCi0JCQlpZiAodXNlTG9jYWxDb29yZGluYXRlcygpKSB7Ci0JCQkJZmlyZUNvb3JkaW5hdGVTeXN0ZW1DaGFuZ2VkKCk7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0JICAKLQkgIHB1YmxpYyBBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0IGdldEFzc29jaWF0ZWRFZGl0UGFydCgpIHsKLQkJICByZXR1cm4gZWRpdFBhcnQ7Ci0JICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9maWd1cmVzL0xpc3RGaWd1cmUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2ZpZ3VyZXMvTGlzdEZpZ3VyZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjg1NjNhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2ZpZ3VyZXMvTGlzdEZpZ3VyZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZmlndXJlczsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5HcmFwaGljczsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUmVjdGFuZ2xlOwotCi1wdWJsaWMgY2xhc3MgTGlzdEZpZ3VyZSBleHRlbmRzIEZpZ3VyZQotewotICBib29sZWFuIGlzT3BhcXVlID0gZmFsc2U7Ci0gIGJvb2xlYW4gaXNIb3Jpem9udGFsID0gZmFsc2U7Ci0gIGJvb2xlYW4gcGFpbnRGaXJzdExpbmUgPSB0cnVlOwotICAKLSAgcHVibGljIExpc3RGaWd1cmUoYm9vbGVhbiBpc0hvcml6b250YWwpCi0gIHsKLSAgICB0aGlzLmlzSG9yaXpvbnRhbCA9IGlzSG9yaXpvbnRhbDsgCi0gIH0KLSAgCi0gIHB1YmxpYyBMaXN0RmlndXJlKCkKLSAgewotICAgIHRoaXMoZmFsc2UpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcGFpbnQoR3JhcGhpY3MgZ3JhcGhpY3MpCi0gIHsKLSAgICBzdXBlci5wYWludChncmFwaGljcyk7Ci0gICAgYm9vbGVhbiBpc0ZpcnN0ID0gdHJ1ZTsKLSAgICBmb3IgKEl0ZXJhdG9yIGkgPSBnZXRDaGlsZHJlbigpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICB7Ci0gICAgICBGaWd1cmUgZmlndXJlID0gKEZpZ3VyZSkgaS5uZXh0KCk7Ci0gICAgICBpZiAoaXNGaXJzdCAmJiAhcGFpbnRGaXJzdExpbmUpCi0gICAgICB7Ci0gICAgICAgIGlzRmlyc3QgPSBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgUmVjdGFuZ2xlIHIgPSBmaWd1cmUuZ2V0Qm91bmRzKCk7Ci0gICAgICAgIGlmIChpc0hvcml6b250YWwpCi0gICAgICAgIHsgIAotICAgICAgICAgIGdyYXBoaWNzLmRyYXdMaW5lKHIueCwgci55LCByLngsIHIueSArIHIuaGVpZ2h0KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsgIAotICAgICAgICAgIGdyYXBoaWNzLmRyYXdMaW5lKHIueCwgci55LCByLnggKyByLndpZHRoLCByLnkpOwotICAgICAgICB9ICAgICAgICAgICAgCi0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNPcGFxdWUoKQotICB7Ci0gICAgcmV0dXJuIGlzT3BhcXVlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0T3BhcXVlKGJvb2xlYW4gaXNPcGFxdWUpCi0gIHsKLSAgICB0aGlzLmlzT3BhcXVlID0gaXNPcGFxdWU7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc1BhaW50Rmlyc3RMaW5lKCkKLSAgewotICAgIHJldHVybiBwYWludEZpcnN0TGluZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFBhaW50Rmlyc3RMaW5lKGJvb2xlYW4gcGFpbnRGaXJzdExpbmUpCi0gIHsKLSAgICB0aGlzLnBhaW50Rmlyc3RMaW5lID0gcGFpbnRGaXJzdExpbmU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2ZpZ3VyZXMvTW9kZWxEaWFnbm9zdGljSW5mby5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZmlndXJlcy9Nb2RlbERpYWdub3N0aWNJbmZvLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmZGQ4YWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vZmlndXJlcy9Nb2RlbERpYWdub3N0aWNJbmZvLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5maWd1cmVzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkNvbG9yQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Db2xvcjsKLQotLyoKLSAqIEEgTW9kZWxEaWFnbm9zdGljSW5mbyBvYmplY3QgY29udGFpbnMgImFkZGl0aW9uYWwiIGluZm9ybWF0aW9uIGFib3V0IGEgbW9kZWwgb2JqZWN0LgotICogSXQgaXMgcGFzc2VkIGZyb20gYSBtb2RlbCAoZmFjYWRlKSBvYmplY3QgdG8gYW4gRWRpdFBhcnQuICBUaGUgRWRpdFBhcnQgdXNlcyB0aGUgTW9kZWxEaWFnbm9zdGljSW5mbwotICogb2JqZWN0IHRvIGRpc3BsYXkgYW55IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IChmb3IgZXhhbXBsZSwgYW4gZXJyb3IgbWVzc2FnZSB3aGVuIHRoZSBtb2RlbAotICogb2JqZWN0IGlzIGluIHNvbWUgd2F5IGludmFsaWQuCi0gKi8KLXB1YmxpYyBjbGFzcyBNb2RlbERpYWdub3N0aWNJbmZvIHsKLQlwdWJsaWMgc3RhdGljIGludCBJTkZPUk1BVElPTkFMX1RZUEUgPSAwOwotCXB1YmxpYyBzdGF0aWMgaW50IEVSUk9SX1RZUEUgPSAxOwotCXB1YmxpYyBzdGF0aWMgaW50IFdBUk5JTkdfVFlQRSA9IDI7Ci0JCi0JcHJpdmF0ZSBpbnQgdHlwZSA9IDE7Ci0JcHJpdmF0ZSBTdHJpbmcgdGV4dCA9ICIiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBDb2xvciB0ZXh0Q29sb3I7Ci0JCi0JcHVibGljIE1vZGVsRGlhZ25vc3RpY0luZm8oU3RyaW5nIHR4dCwgaW50IGluZm9UeXBlLCBDb2xvciBjb2xvcikgewotCQl0ZXh0ID0gdHh0OwotCQl0eXBlID0gaW5mb1R5cGU7Ci0JCXRleHRDb2xvciA9IGNvbG9yOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXREZXNjcmlwdGlvblRleHQoU3RyaW5nIHR4dCkgewotCQl0ZXh0ID0gdHh0OwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXREZXNjcmlwdGlvblRleHRDb2xvcihDb2xvciBjb2xvcikgewotCQl0ZXh0Q29sb3IgPSBjb2xvcjsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0VHlwZShpbnQgaW5mb1R5cGUpIHsKLQkJdHlwZSA9IGluZm9UeXBlOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uVGV4dCgpIHsKLQkJcmV0dXJuIHRleHQ7Ci0JfQotCQotCXB1YmxpYyBpbnQgZ2V0VHlwZSgpIHsKLQkJcmV0dXJuIHR5cGU7Ci0JfQotCQotCXB1YmxpYyBDb2xvciBnZXREZXNjcmlwdGlvblRleHRDb2xvcigpIHsKLQkJaWYgKHRleHRDb2xvciAhPSBudWxsKSB7Ci0JCQlyZXR1cm4gdGV4dENvbG9yOwotCQl9Ci0JCQotCQlpZiAodHlwZSA9PSBFUlJPUl9UWVBFKSB7Ci0JCQlyZXR1cm4gQ29sb3JDb25zdGFudHMucmVkOwotCQl9Ci0JCWVsc2UgaWYgKHR5cGUgPT0gV0FSTklOR19UWVBFKSB7Ci0JCQlyZXR1cm4gQ29sb3JDb25zdGFudHMubGlnaHRHcmF5OwotCQl9Ci0JCQotCQlyZXR1cm4gQ29sb3JDb25zdGFudHMuYmxhY2s7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vbGF5b3V0cy9CaW5kaW5nQ29sdW1uTGF5b3V0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9sYXlvdXRzL0JpbmRpbmdDb2x1bW5MYXlvdXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjYwYWM3OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9sYXlvdXRzL0JpbmRpbmdDb2x1bW5MYXlvdXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5sYXlvdXRzOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5BYnN0cmFjdExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5JRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5EaW1lbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LlJlY3RhbmdsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmVkaXRwYXJ0cy5BYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLkJpbmRpbmdFZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklCaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUludGVyZmFjZTsKLQotcHVibGljIGNsYXNzIEJpbmRpbmdDb2x1bW5MYXlvdXQgZXh0ZW5kcyBBYnN0cmFjdExheW91dAotewotICBFZGl0UGFydCBiaW5kaW5nQ29sdW1uRWRpdFBhcnQ7Ci0gIAotICBwdWJsaWMgQmluZGluZ0NvbHVtbkxheW91dChFZGl0UGFydCBiaW5kaW5nQ29sdW1uRWRpdFBhcnQpCi0gIHsKLSAgICBzdXBlcigpOwotICAgIHRoaXMuYmluZGluZ0NvbHVtbkVkaXRQYXJ0ID0gYmluZGluZ0NvbHVtbkVkaXRQYXJ0OwotICB9Ci0KLSAgcHJvdGVjdGVkIERpbWVuc2lvbiBjYWxjdWxhdGVQcmVmZXJyZWRTaXplKElGaWd1cmUgY29udGFpbmVyLCBpbnQgd0hpbnQsIGludCBoSGludCkKLSAgewotICAgIFJlY3RhbmdsZSBjbGllbnRBcmVhID0gY29udGFpbmVyLmdldENsaWVudEFyZWEoKTsKLSAgICBEaW1lbnNpb24gZCA9IGNhbGN1bGF0ZUNoaWxkcmVuU2l6ZShjb250YWluZXIuZ2V0Q2hpbGRyZW4oKSwgd0hpbnQsIGhIaW50KTsKLSAgICBkLmhlaWdodCA9IE1hdGgubWF4KGQuaGVpZ2h0LCBjbGllbnRBcmVhLmhlaWdodCk7Ci0gICAgcmV0dXJuIGQ7Ci0gIH0KLQotICBwcml2YXRlIERpbWVuc2lvbiBjYWxjdWxhdGVDaGlsZHJlblNpemUoTGlzdCBjaGlsZHJlbiwgaW50IHdIaW50LCBpbnQgaEhpbnQpCi0gIHsKLSAgICBEaW1lbnNpb24gY2hpbGRTaXplOwotICAgIElGaWd1cmUgY2hpbGQ7Ci0gICAgaW50IGhlaWdodCA9IDAsIHdpZHRoID0gMDsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkcmVuLnNpemUoKTsgaSsrKQotICAgIHsKLSAgICAgIGNoaWxkID0gKElGaWd1cmUpIGNoaWxkcmVuLmdldChpKTsKLSAgICAgIGNoaWxkU2l6ZSA9IGNoaWxkLmdldFByZWZlcnJlZFNpemUod0hpbnQsIGhIaW50KTsKLSAgICAgIGhlaWdodCArPSBjaGlsZFNpemUuaGVpZ2h0OwotICAgICAgaGVpZ2h0ICs9IDgwOwotICAgICAgd2lkdGggPSBNYXRoLm1heCh3aWR0aCwgY2hpbGRTaXplLndpZHRoKTsKLSAgICB9Ci0gICAgcmV0dXJuIG5ldyBEaW1lbnNpb24oTWF0aC5tYXgod2lkdGgsIDE1MCksIGhlaWdodCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBsYXlvdXQoSUZpZ3VyZSBjb250YWluZXIpCi0gIHsKLSAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiQmluZGluZ0NvbHVtbkxheW91dC5sYXlvdXQoKSIgKyBjb250YWluZXIuZ2V0Q2hpbGRyZW4oKS5zaXplKCkpOwotICAgIFJlY3RhbmdsZSBjbGllbnRBcmVhID0gY29udGFpbmVyLmdldENsaWVudEFyZWEoKTsKLSAgICBSZWN0YW5nbGUgciA9IG5ldyBSZWN0YW5nbGUoKTsKLSAgICByLnggPSBjbGllbnRBcmVhLnggKyA1MDsKLSAgICByLnkgPSBjbGllbnRBcmVhLnk7Ci0gICAgaW50IHVzZWQgPSAwOwotCi0gICAgZm9yIChJdGVyYXRvciBpID0gY29udGFpbmVyLmdldENoaWxkcmVuKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIEZpZ3VyZSBjaGlsZCA9IChGaWd1cmUpIGkubmV4dCgpOwotICAgICAgRGltZW5zaW9uIGQgPSBjaGlsZC5nZXRQcmVmZXJyZWRTaXplKC0xLCAtMSk7Ci0gICAgICByLndpZHRoID0gZC53aWR0aDsKLSAgICAgIHIuaGVpZ2h0ID0gZC5oZWlnaHQ7Ci0gICAgICAKLSAgICAgIGNoaWxkLnNldEJvdW5kcyhyKTsKLSAgICAgIHVzZWQgKz0gMzA7Ci0gICAgICB1c2VkICs9IHIuaGVpZ2h0OwotICAgICAgCi0gICAgICBJRmlndXJlIGludGVmYWNlRmlndXJlID0gZ2V0SW50ZXJmYWNlRmlndXJlRm9yRXhwYW5kZWRFZGl0UGFydEZpZ3VyZShjaGlsZCk7Ci0gICAgICBpZiAoaW50ZWZhY2VGaWd1cmUgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgUmVjdGFuZ2xlIGIgPSBpbnRlZmFjZUZpZ3VyZS5nZXRCb3VuZHMoKTsKLSAgICAgICAgaW50IHdpZHRoID0gMzA7Ci0gICAgICAgIGNoaWxkLnNldEJvdW5kcyhuZXcgUmVjdGFuZ2xlKGIueCAtIHdpZHRoLCBiLnksIHdpZHRoLCBiLmhlaWdodCkpOwotICAgICAgfQotICAgICAgCi0gICAgICByLnkgKz0gZC5oZWlnaHQ7Ci0gICAgICByLnkgKz0gODA7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRFeHBhbmRlZChCaW5kaW5nRWRpdFBhcnQgYmluZGluZ0VkaXRQYXJ0LCBib29sZWFuIGlzRXhwYW5kZWQpCi0gIHsKLSAgICAvLyBGaXJzdCBydW4gdGhyb3VnaCBhbGwgb2YgdGhlIGJpbmRpbmdzIGFyZSBhcmUgZXhwYW5kZWQKLSAgICAvLyB0byBlbnN1cmUgYXQgbW9zdCBvbmUgYmluZGluZyBpcyBleHBhbmRlZCBmb3IgZWFjaCBpbnRlcmZhY2Ugc2luY2UKLSAgICAvLyB3ZSBtYXkgbmVlZCB0byBjb2xsYXBzZSBhIGJpbmRpbmcgaW4gb3JkZXIgdG8gZXhwYW5kIHRoaXMgb25lLgotICAgIC8vCi0gICAgSUludGVyZmFjZSBpbnRlcmZhemUgPSBnZXRJbnRlcmZhY2UoYmluZGluZ0VkaXRQYXJ0KTsgICAgCi0gICAgaWYgKGludGVyZmF6ZSAhPSBudWxsKQotICAgIHsgIAotICAgICAgYmluZGluZ0VkaXRQYXJ0LnNldEV4cGFuZGVkKGlzRXhwYW5kZWQpOwotICAgICAgaWYgKGlzRXhwYW5kZWQpCi0gICAgICB7ICAKLSAgICAgICAgZm9yIChJdGVyYXRvciBpID0gYmluZGluZ0NvbHVtbkVkaXRQYXJ0LmdldENoaWxkcmVuKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgICAgewotICAgICAgICAgIEJpbmRpbmdFZGl0UGFydCBvdGhlckJpbmRpbmdFZGl0UGFydCA9IChCaW5kaW5nRWRpdFBhcnQpaS5uZXh0KCk7Ci0gICAgICAgICAgaWYgKG90aGVyQmluZGluZ0VkaXRQYXJ0ICE9IGJpbmRpbmdFZGl0UGFydCAmJgotICAgICAgICAgICAgICBpbnRlcmZhemUgPT0gZ2V0SW50ZXJmYWNlKG90aGVyQmluZGluZ0VkaXRQYXJ0KSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBvdGhlckJpbmRpbmdFZGl0UGFydC5zZXRFeHBhbmRlZChmYWxzZSk7Ci0gICAgICAgICAgfSAgCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9ICAKLSAgfQotICAKLSAgcHJpdmF0ZSBJRmlndXJlIGdldEludGVyZmFjZUZpZ3VyZUZvckV4cGFuZGVkRWRpdFBhcnRGaWd1cmUoRmlndXJlIGVkaXRQYXJ0RmlndXJlKQotICB7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gYmluZGluZ0NvbHVtbkVkaXRQYXJ0LmdldENoaWxkcmVuKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICB7Ci0gICAgICBCaW5kaW5nRWRpdFBhcnQgYmluZGluZ0VkaXRQYXJ0ID0gKEJpbmRpbmdFZGl0UGFydClpLm5leHQoKTsKLSAgICAgIGlmIChiaW5kaW5nRWRpdFBhcnQuaXNFeHBhbmRlZCgpICYmIGJpbmRpbmdFZGl0UGFydC5nZXRGaWd1cmUoKSA9PSBlZGl0UGFydEZpZ3VyZSkKLSAgICAgIHsKLSAgICAgICAgQWJzdHJhY3RHcmFwaGljYWxFZGl0UGFydCBpbnRlcmZhY2VFZGl0UGFydCA9IGdldE1hdGNoaW5nRWRpdFBhcnQoZ2V0SW50ZXJmYWNlKGJpbmRpbmdFZGl0UGFydCkpOwotICAgICAgICBpZiAoaW50ZXJmYWNlRWRpdFBhcnQgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBpbnRlcmZhY2VFZGl0UGFydC5nZXRGaWd1cmUoKTsKLSAgICAgICAgfSAgICAgICAgICAKLSAgICAgIH0gIAotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotICAKLSAgcHJpdmF0ZSBJSW50ZXJmYWNlIGdldEludGVyZmFjZShCaW5kaW5nRWRpdFBhcnQgZWRpdFBhcnQpCi0gIHsKLSAgICBJQmluZGluZyBiaW5kaW5nID0gKElCaW5kaW5nKWVkaXRQYXJ0LmdldE1vZGVsKCk7Ci0gICAgcmV0dXJuIGJpbmRpbmcuZ2V0SW50ZXJmYWNlKCk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgQWJzdHJhY3RHcmFwaGljYWxFZGl0UGFydCBnZXRNYXRjaGluZ0VkaXRQYXJ0KElJbnRlcmZhY2UgaW50ZXJmYXplKQotICB7Ci0gICAgcmV0dXJuKEFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQpYmluZGluZ0NvbHVtbkVkaXRQYXJ0LmdldFZpZXdlcigpLmdldEVkaXRQYXJ0UmVnaXN0cnkoKS5nZXQoaW50ZXJmYXplKTsgICAgCi0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9sYXlvdXRzL0JpbmRpbmdDb250ZW50TGF5b3V0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9sYXlvdXRzL0JpbmRpbmdDb250ZW50TGF5b3V0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwMWIzOGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vbGF5b3V0cy9CaW5kaW5nQ29udGVudExheW91dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmxheW91dHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuQWJzdHJhY3RMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLklGaWd1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LkRpbWVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuUmVjdGFuZ2xlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuZWRpdHBhcnRzLkFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMuQmluZGluZ0VkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLklOYW1lZEVkaXRQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLm1vZGVsLkJpbmRpbmdDb250ZW50UGxhY2VIb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQmluZGluZ01lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklNZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU9wZXJhdGlvbjsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gbGF5b3V0IHRoZSBjb250ZW50cyBvZiB0aGUgYmluZGluZyAncnVsZXInIGRpc3BsYXllZAotICogdG8gdGhlIGxlZnQgc2lkZSBvZiBhbiBpbnRlcmZhY2UuIFRoZSBjb250ZW50cyBhcmUgYWxpZ25lZCB3aXRoIHRoZSBpbnRlcmZhY2UKLSAqIGZpZ3VyZXMgc28gdGhhdCBjb3JyZXNwb2RpbmcgYmluZGluZyBhbmQgaW50ZXJmYWNlIGNvbnN0cnVjdHMgYXJlIHNpZGUgYnkgc2lkZS4KLSAqLwotcHVibGljIGNsYXNzIEJpbmRpbmdDb250ZW50TGF5b3V0IGV4dGVuZHMgQWJzdHJhY3RMYXlvdXQKLXsKLSAgQmluZGluZ0VkaXRQYXJ0IGJpbmRpbmdFZGl0UGFydDsKLSAgCi0gIHB1YmxpYyBCaW5kaW5nQ29udGVudExheW91dChCaW5kaW5nRWRpdFBhcnQgYmluZGluZ0VkaXRQYXJ0KQotICB7Ci0gICAgdGhpcy5iaW5kaW5nRWRpdFBhcnQgPSBiaW5kaW5nRWRpdFBhcnQ7Ci0gIH0KLQotICBwcm90ZWN0ZWQgRGltZW5zaW9uIGNhbGN1bGF0ZVByZWZlcnJlZFNpemUoSUZpZ3VyZSBjb250YWluZXIsIGludCB3SGludCwgaW50IGhIaW50KQotICB7Ci0gICAgaWYgKGJpbmRpbmdFZGl0UGFydC5pc0V4cGFuZGVkKCkpCi0gICAgeyAgCi0gICAgICBSZWN0YW5nbGUgY2xpZW50QXJlYSA9IGNvbnRhaW5lci5nZXRDbGllbnRBcmVhKCk7Ci0gICAgICByZXR1cm4gbmV3IERpbWVuc2lvbihjbGllbnRBcmVhLndpZHRoLCBjbGllbnRBcmVhLmhlaWdodCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXR1cm4gbmV3IERpbWVuc2lvbigwLDApOwotICAgIH0gIAotICB9Ci0KLSAgcHVibGljIHZvaWQgbGF5b3V0KElGaWd1cmUgY29udGFpbmVyKQotICB7ICAgICAKLSAgICBSZWN0YW5nbGUgY2xpZW50QXJlYSA9IGNvbnRhaW5lci5nZXRDbGllbnRBcmVhKCk7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gYmluZGluZ0VkaXRQYXJ0LmdldENoaWxkcmVuKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIEFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQgY2hpbGRFZGl0UGFydCA9IChBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0KSBpLm5leHQoKTsKLSAgICAgIEFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQgY29ycmVzcG9uZGluZ0VkaXRQYXJ0ID0gbnVsbDsKLSAgICAgIE9iamVjdCBtb2RlbCA9IGNoaWxkRWRpdFBhcnQuZ2V0TW9kZWwoKTsKLSAgICAgIGlmIChtb2RlbCBpbnN0YW5jZW9mIElCaW5kaW5nT3BlcmF0aW9uKQotICAgICAgewotICAgICAgICBJT3BlcmF0aW9uIG9wZXJhdGlvbiA9ICgoSUJpbmRpbmdPcGVyYXRpb24pbW9kZWwpLmdldE9wZXJhdGlvbigpOwotICAgICAgICBjb3JyZXNwb25kaW5nRWRpdFBhcnQgPSBnZXRFZGl0UGFydChvcGVyYXRpb24pOyAgICAgICAKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKG1vZGVsIGluc3RhbmNlb2YgSUJpbmRpbmdNZXNzYWdlUmVmZXJlbmNlKQotICAgICAgewotICAgICAgICBJTWVzc2FnZVJlZmVyZW5jZSBtZXNzYWdlUmVmZXJlbmNlID0gKChJQmluZGluZ01lc3NhZ2VSZWZlcmVuY2UpbW9kZWwpLmdldE1lc3NhZ2VSZWZlcmVuY2UoKTsKLSAgICAgICAgY29ycmVzcG9uZGluZ0VkaXRQYXJ0ID0gZ2V0RWRpdFBhcnQobWVzc2FnZVJlZmVyZW5jZSk7ICAgICAgIAotICAgICAgfQotICAgICAgZWxzZSBpZiAobW9kZWwgaW5zdGFuY2VvZiBCaW5kaW5nQ29udGVudFBsYWNlSG9sZGVyKSB7Ci0gICAgCSAgT2JqZWN0IGNvcnJlc3BvbmRpbmdNb2RlbCA9ICgoQmluZGluZ0NvbnRlbnRQbGFjZUhvbGRlcikgbW9kZWwpLmdldE1vZGVsKCk7Ci0gICAgCSAgY29ycmVzcG9uZGluZ0VkaXRQYXJ0ID0gZ2V0RWRpdFBhcnQoY29ycmVzcG9uZGluZ01vZGVsKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgaWYgKGNvcnJlc3BvbmRpbmdFZGl0UGFydCAhPSBudWxsKQotICAgICAgewotICAgICAgICBJRmlndXJlIGZpZ3VyZSA9IGNvcnJlc3BvbmRpbmdFZGl0UGFydC5nZXRGaWd1cmUoKTsgICAgICAgCi0gICAgICAgIGlmIChjb3JyZXNwb25kaW5nRWRpdFBhcnQgaW5zdGFuY2VvZiBJTmFtZWRFZGl0UGFydCkKLSAgICAgICAgewotICAgICAgICAgIGZpZ3VyZSA9ICgoSU5hbWVkRWRpdFBhcnQpY29ycmVzcG9uZGluZ0VkaXRQYXJ0KS5nZXRMYWJlbEZpZ3VyZSgpOyAgICAgICAgICAgIAotICAgICAgICB9ICAKLSAgICAgICAgUmVjdGFuZ2xlIGJvdW5kcyA9IGZpZ3VyZS5nZXRCb3VuZHMoKTsKLSAgICAgICAgUmVjdGFuZ2xlIG5ld0JvdW5kcyA9IG5ldyBSZWN0YW5nbGUoY2xpZW50QXJlYS54LCBib3VuZHMueSwgY2xpZW50QXJlYS53aWR0aCwgYm91bmRzLmhlaWdodCk7Ci0gICAgICAgIGNoaWxkRWRpdFBhcnQuZ2V0RmlndXJlKCkuc2V0Qm91bmRzKG5ld0JvdW5kcyk7Ci0gICAgICB9ICAKLSAgICB9Ci0gIH0gIAotICAKLSAgcHJvdGVjdGVkIEFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQgZ2V0RWRpdFBhcnQoT2JqZWN0IG1vZGVsKQotICB7Ci0gICAgaWYgKG1vZGVsICE9IG51bGwpCi0gICAgeyAgCi0gICAgICBFZGl0UGFydCBlZGl0UGFydCA9IChFZGl0UGFydCliaW5kaW5nRWRpdFBhcnQuZ2V0Vmlld2VyKCkuZ2V0RWRpdFBhcnRSZWdpc3RyeSgpLmdldChtb2RlbCk7Ci0gICAgICBpZiAoZWRpdFBhcnQgaW5zdGFuY2VvZiBBYnN0cmFjdEdyYXBoaWNhbEVkaXRQYXJ0KQotICAgICAgewotICAgICAgICByZXR1cm4gKEFic3RyYWN0R3JhcGhpY2FsRWRpdFBhcnQpZWRpdFBhcnQ7IAotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9kZXNpZ24vbGF5b3V0cy9CaW5kaW5nTGF5b3V0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9sYXlvdXRzL0JpbmRpbmdMYXlvdXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjc0OGU0NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9sYXlvdXRzL0JpbmRpbmdMYXlvdXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmxheW91dHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5JRmlndXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5Ub29sYmFyTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5EaW1lbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLmdlb21ldHJ5LlJlY3RhbmdsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5CaW5kaW5nRWRpdFBhcnQ7Ci0KLS8vIGp1c3QgYSB0b29sYmFyIGxheW91dCB3aXRoIGEgbWlub3IgdHdlYWsgdG8gZW5zdXJlIHRoZSBsYXN0IGZpZ3VyZSBmaWxscwotLy8gdGhlIGVudGlyZSBhdmFpbGFibGUgc3BhY2UKLXB1YmxpYyBjbGFzcyBCaW5kaW5nTGF5b3V0IGV4dGVuZHMgVG9vbGJhckxheW91dAotewotICBCaW5kaW5nRWRpdFBhcnQgZWRpdFBhcnQ7Ci0gIAotICBwdWJsaWMgQmluZGluZ0xheW91dChCaW5kaW5nRWRpdFBhcnQgZWRpdFBhcnQpCi0gIHsKLSAgICB0aGlzLmVkaXRQYXJ0ID0gZWRpdFBhcnQ7ICAgIAotICB9Ci0gIAotICBwcm90ZWN0ZWQgRGltZW5zaW9uIGNhbGN1bGF0ZVByZWZlcnJlZFNpemUoSUZpZ3VyZSBjb250YWluZXIsIGludCB3SGludCwgaW50IGhIaW50KQotICB7Ci0gICAgRGltZW5zaW9uIGQgPSBzdXBlci5jYWxjdWxhdGVQcmVmZXJyZWRTaXplKGNvbnRhaW5lciwgd0hpbnQsIGhIaW50KTsKLSAgICAvL1JlY3RhbmdsZSBjbGllbnRBcmVhID0gY29udGFpbmVyLmdldENsaWVudEFyZWEoKTsKLSAgICAvL2Qud2lkdGggPSBNYXRoLm1heChkLndpZHRoLCBjbGllbnRBcmVhLndpZHRoKTsKLSAgICAvL2QuaGVpZ2h0ID0gTWF0aC5tYXgoZC5oZWlnaHQsIGNsaWVudEFyZWEuaGVpZ2h0KTsKLSAgICByZXR1cm4gZDsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgbGF5b3V0KElGaWd1cmUgY29udGFpbmVyKQotICB7Ci0gICAgc3VwZXIubGF5b3V0KGNvbnRhaW5lcik7Ci0gICAgaWYgKGVkaXRQYXJ0LmlzRXhwYW5kZWQoKSkKLSAgICB7ICAKLSAgICAgIFJlY3RhbmdsZSBjbGllbnRBcmVhID0gY29udGFpbmVyLmdldENsaWVudEFyZWEoKTsgICAgCi0gICAgICBMaXN0IGNoaWxkcmVuID0gY29udGFpbmVyLmdldENoaWxkcmVuKCk7Ci0gICAgICBpZiAoY2hpbGRyZW4uc2l6ZSgpID4gMSkKLSAgICAgIHsKLSAgICAgICAgRmlndXJlIGhlYWRlciA9IChGaWd1cmUpY2hpbGRyZW4uZ2V0KDApOyAgICAgICAgCi0gICAgICAgIEZpZ3VyZSBjb250ZW50UGFuZSA9IChGaWd1cmUpY2hpbGRyZW4uZ2V0KGNoaWxkcmVuLnNpemUoKSAtIDEpOwotICAgICAgICBpZiAoY29udGVudFBhbmUuZ2V0Q2hpbGRyZW4oKS5zaXplKCkgPiAwKQotICAgICAgICB7ICAKLSAgICAgICAgICBSZWN0YW5nbGUgYm91bmRzID0gY29udGVudFBhbmUuZ2V0Qm91bmRzKCk7Ci0gICAgICAgICAgYm91bmRzLmhlaWdodCA9IGNsaWVudEFyZWEuaGVpZ2h0IC0gaGVhZGVyLmdldEJvdW5kcygpLmhlaWdodDsKLSAgICAgICAgfSAgCi0gICAgICB9Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9sYXlvdXRzL0NvbHVtbkRhdGEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2xheW91dHMvQ29sdW1uRGF0YS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMmE1ODg3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2xheW91dHMvQ29sdW1uRGF0YS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24ubGF5b3V0czsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotcHVibGljIGNsYXNzIENvbHVtbkRhdGEKLXsKLSAgSGFzaE1hcCBtYXAgPSBuZXcgSGFzaE1hcCgpOwotICAKLSAgY2xhc3MgRW50cnkKLSAgewotICAgIGludCB3aWR0aCA9IDA7Ci0gICAgaW50IHdlaWdodCA9IDE7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGNsZWFyQ29sdW1uV2lkdGhzKCkKLSAgewotICAgIGZvciAoSXRlcmF0b3IgaSA9IG1hcC52YWx1ZXMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgRW50cnkgZW50cnkgPSAoRW50cnkpaS5uZXh0KCk7Ci0gICAgICBlbnRyeS53aWR0aCA9IDA7Ci0gICAgfSAgCi0gIH0gIAotICAKLSAgcHJpdmF0ZSBFbnRyeSBsb29rdXBPckNyZWF0ZUNvbHVtbkVudHJ5KFN0cmluZyBpZGVudGlmaWVyKQotICB7Ci0gICAgRW50cnkgZW50cnkgPSAoRW50cnkpbWFwLmdldChpZGVudGlmaWVyKTsKLSAgICBpZiAoZW50cnkgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBlbnRyeSA9IG5ldyBFbnRyeSgpOwotICAgICAgbWFwLnB1dChpZGVudGlmaWVyLCBlbnRyeSk7Ci0gICAgfSAgCi0gICByZXR1cm4gZW50cnk7IAotICB9ICAKLSAgCi0gIHZvaWQgc3RyZXRjaENvbHVtbldpZHRoSWZOZWVkZWQoU3RyaW5nIGlkZW50aWZpZXIsIGludCB3aWR0aCkKLSAgewotICAgIEVudHJ5IGVudHJ5ID0gbG9va3VwT3JDcmVhdGVDb2x1bW5FbnRyeShpZGVudGlmaWVyKTsKLSAgICBlbnRyeS53aWR0aCA9IE1hdGgubWF4KGVudHJ5LndpZHRoLCB3aWR0aCk7Ci0gIH0KLSAgCi0gIGludCBnZXRDb2x1bW5XaWR0aChTdHJpbmcgaWRlbnRpZmllcikKLSAgewotICAgIEVudHJ5IGVudHJ5ID0gKEVudHJ5KW1hcC5nZXQoaWRlbnRpZmllcik7Ci0gICAgaWYgKGVudHJ5ICE9IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIGVudHJ5LndpZHRoOwotICAgIH0gIAotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXR1cm4gMDsvL2htbSBzaG91bGQgd2UgcmV0dXJuIC0xID8KLSAgICB9ICAKLSAgfQotICAKLSAgaW50IGdldENvbHVtbldlaWdodChTdHJpbmcgaWRlbnRpZmllcikKLSAgewotICAgIEVudHJ5IGVudHJ5ID0gKEVudHJ5KW1hcC5nZXQoaWRlbnRpZmllcik7Ci0gICAgaWYgKGVudHJ5ICE9IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIGVudHJ5LndlaWdodDsKLSAgICB9ICAKLSAgICBlbHNlCi0gICAgewotICAgICAgcmV0dXJuIDA7Ci0gICAgfSAgCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldENvbHVtbldlaWdodChTdHJpbmcgaWRlbnRpZmllciwgaW50IHdlaWdodCkKLSAgewotICAgIEVudHJ5IGVudHJ5ID0gbG9va3VwT3JDcmVhdGVDb2x1bW5FbnRyeShpZGVudGlmaWVyKTsKLSAgICBlbnRyeS53ZWlnaHQgPSB3ZWlnaHQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2xheW91dHMvUm93TGF5b3V0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2Rlc2lnbi9sYXlvdXRzL1Jvd0xheW91dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGM3NDA5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZGVzaWduL2xheW91dHMvUm93TGF5b3V0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24ubGF5b3V0czsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5BYnN0cmFjdExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuSUZpZ3VyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuZ2VvbWV0cnkuRGltZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRyYXcyZC5nZW9tZXRyeS5SZWN0YW5nbGU7Ci0KLXB1YmxpYyBjbGFzcyBSb3dMYXlvdXQgZXh0ZW5kcyBBYnN0cmFjdExheW91dAotewotICAvLyBsYXlvdXQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgcGFyZW50IGNvbnRleHQKLSAgLy8gYW55IGxheW91dCBtYW5hZ2VyIHVuZGVyIHRoZSBwYXJlbnQgY29udGV4dCBpcyBjb25uZWN0ZWQKLSAgLy8gY29sdW1uIHJvd3MgYXJlIG1haW50YWluZWQgYWNjcm9zcyBjb250YWluZXIgYm91bmRhcmllcyAgCi0gIHByb3RlY3RlZCBDb2x1bW5EYXRhIGNvbHVtbkRhdGE7Ci0gIHByb3RlY3RlZCBIYXNoTWFwIGZpZ3VyZVRvQ29udHN0cmFpbnRNYXAgPSBuZXcgSGFzaE1hcCgpOwotICAKLSAgcHVibGljIFJvd0xheW91dCgpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0gIAotCi0gIC8vIHRoaXMgbWV0aG9kIGNvbXB1dGVzIHRoZSBtaW5pbXVtIHNpemUgcmVxdWlyZWQgdG8gZGlzcGxheSB0aGUgZmlndXJlcwotICAvLwotICBwcml2YXRlIERpbWVuc2lvbiBjYWxjdWxhdGVDaGlsZHJlblNpemUoSUZpZ3VyZSBjb250YWluZXIsIExpc3QgY2hpbGRyZW4sIGludCB3SGludCwgaW50IGhIaW50LCBib29sZWFuIHByZWZlcnJlZCkKLSAgewotICAgIERpbWVuc2lvbiBjaGlsZFNpemU7Ci0gICAgSUZpZ3VyZSBjaGlsZDsKLSAgICBpbnQgaGVpZ2h0ID0gMDsKLSAgICBpbnQgd2lkdGggPSAwOwotICAgIAotICAgIC8vSVJvd0ZpZ3VyZSBmaWd1cmUgPSAoSVJvd0ZpZ3VyZSljb250YWluZXI7Ci0gICAgCi0gICAgLy8gZm9yIGVhY2ggY2VsbCBpbiB0aGUgcm93Ci0gICAgLy8KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkcmVuLnNpemUoKTsgaSsrKQotICAgIHsKLSAgICAgIGNoaWxkID0gKElGaWd1cmUpIGNoaWxkcmVuLmdldChpKTsKLSAgICAgIFN0cmluZyBjb2x1bW5JZGVuaWZpZXIgPSAoU3RyaW5nKWdldENvbnN0cmFpbnQoY2hpbGQpOwotICAgICAgICAgICAgIAotICAgICAgLy8gZmlyc3Qgd2UgY29tcHV0ZSB0aGUgY2hpbGQgc2l6ZSB3aXRob3V0IHJlZ2FyZCBmb3IgY29sdW1uRGF0YQotICAgICAgLy8KLSAgICAgIGNoaWxkU2l6ZSA9IGNoaWxkLmdldFByZWZlcnJlZFNpemUod0hpbnQsIGhIaW50KTsvLyA6IGNoaWxkLmdldE1pbmltdW1TaXplKHdIaW50LCBoSGludCk7Ci0gICAgICAgIAotICAgICAgLy8gbm93IHRoYXQgdGhlIGNvbHVtbkRhdGEgaGFzIGJlZW4gcG9wdWxhdGVkIHdlIGNhbiBjb25zaWRlciBpZiB0aGUgcm93IG5lZWRzIHRvIGJlIGxhcmdlcgotICAgICAgLy8KLSAgICAgIGludCBlZmZlY3RpdmVXaWR0aCA9IGNoaWxkU2l6ZS53aWR0aDsKLSAgICAgIGlmIChjb2x1bW5JZGVuaWZpZXIgIT0gbnVsbCkKLSAgICAgIHsgIAotICAgICAgICBjb2x1bW5EYXRhLnN0cmV0Y2hDb2x1bW5XaWR0aElmTmVlZGVkKGNvbHVtbklkZW5pZmllciwgY2hpbGRTaXplLndpZHRoKTsKLSAgICAgICAgZWZmZWN0aXZlV2lkdGggPSBjb2x1bW5EYXRhLmdldENvbHVtbldpZHRoKGNvbHVtbklkZW5pZmllcik7Ci0gICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgIGhlaWdodCA9IE1hdGgubWF4KGNoaWxkU2l6ZS5oZWlnaHQsIGhlaWdodCk7Ci0gICAgICB3aWR0aCArPSBlZmZlY3RpdmVXaWR0aDsKLSAgICB9ICAKLSAgICByZXR1cm4gbmV3IERpbWVuc2lvbih3aWR0aCwgaGVpZ2h0KTsKLSAgfQotICAKLSAgCi0gIAotICBwcm90ZWN0ZWQgRGltZW5zaW9uIGNhbGN1bGF0ZVByZWZlcnJlZFNpemUoSUZpZ3VyZSBjb250YWluZXIsIGludCB3SGludCwgaW50IGhIaW50KQotICB7ICAgIAotICAgIExpc3QgY2hpbGRyZW4gPSBjb250YWluZXIuZ2V0Q2hpbGRyZW4oKTsKLSAgICBEaW1lbnNpb24gcHJlZlNpemUgPSBjYWxjdWxhdGVDaGlsZHJlblNpemUoY29udGFpbmVyLCBjaGlsZHJlbiwgd0hpbnQsIGhIaW50LCB0cnVlKTsKLSAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigicHJlZmVycmVkU2l6ZT0iICsgcHJlZlNpemUpOwotICAgIHJldHVybiBwcmVmU2l6ZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGxheW91dChJRmlndXJlIHBhcmVudCkKLSAgewotICAgIC8vIGxheW91dCBhIHRhYmxlIHdpdGggdGhlIGNvbHVtbnMgYWxpZ25lZCAgICAgIAotICAgIC8vSVJvd0ZpZ3VyZSByb3dGaWd1cmUgPSAoSVJvd0ZpZ3VyZSlwYXJlbnQ7ICAgIAotICAgIFJlY3RhbmdsZSBjbGllbnRBcmVhID0gcGFyZW50LmdldENsaWVudEFyZWEoKTsgICAKLSAgICBMaXN0IGNoaWxkcmVuID0gcGFyZW50LmdldENoaWxkcmVuKCk7Ci0gICAgUmVjdGFuZ2xlIHIgPSBuZXcgUmVjdGFuZ2xlKCk7Ci0gICAgci54ID0gY2xpZW50QXJlYS54OwotICAgIHIueSA9IGNsaWVudEFyZWEueTsKLSAgICByLmhlaWdodCA9IGNsaWVudEFyZWEuaGVpZ2h0OwotICAgIAotICAgIGludCBjaGlsZHJlblNpemUgPSBjaGlsZHJlbi5zaXplKCk7Ci0gICAgUmVjdGFuZ2xlW10gYm91bmRzID0gbmV3IFJlY3RhbmdsZVtjaGlsZHJlblNpemVdOwotICAgIAotICAgIC8vIGZvciBlYWNoIGNlbGwgaW4gdGhlIHJvdwotICAgIC8vCi0gICAgaW50IHJlcXVpcmVkV2lkdGggPSAwOwotICAgIGludCB0b3RhbENvbHVtbldlaWdodCA9IDA7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlblNpemU7IGkrKykKLSAgICB7Ci0gICAgICBJRmlndXJlIGNoaWxkID0gKElGaWd1cmUpIGNoaWxkcmVuLmdldChpKTsKLSAgICAgIC8vU3RyaW5nIGNvbHVtbklkZW5pZmllciA9IGZpZ3VyZS5nZXRDb2x1bW5JZGVudGlmaWVyKGNoaWxkKTsgICAgICAgICAgICAgCi0gICAgICAvLyBmaXJzdCB3ZSBjb21wdXRlIHRoZSBjaGlsZCBzaXplIHdpdGhvdXQgcmVnYXJkIGZvciBjb2x1bW5EYXRhCi0gICAgICAvLwotICAgICAgRGltZW5zaW9uIGNoaWxkU2l6ZSA9IGNoaWxkLmdldFByZWZlcnJlZFNpemUoLTEsIC0xKTsKLSAgICAgIAotICAgICAgaW50IGNvbHVtbldpZHRoID0gLTE7Ci0gICAgICAvL1N0cmluZyBjb2x1bW5JZGVudGlmaWVyID0gcm93RmlndXJlLmdldENvbHVtbklkZW50aWZpZXIoY2hpbGQpOwotICAgICAgU3RyaW5nIGNvbHVtbklkZW50aWZpZXIgPSAoU3RyaW5nKWdldENvbnN0cmFpbnQoY2hpbGQpOwotICAgICAgaWYgKGNvbHVtbklkZW50aWZpZXIgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLy9jb2x1bW5EYXRhLnN0cmV0Y2hDb2x1bW5XaWR0aElmTmVlZGVkKGNvbHVtbklkZW50aWZpZXIsIGNoaWxkU2l6ZS53aWR0aCk7ICAgICAgICAKLSAgICAgICAgY29sdW1uV2lkdGggPSBjb2x1bW5EYXRhLmdldENvbHVtbldpZHRoKGNvbHVtbklkZW50aWZpZXIpOwotICAgICAgICB0b3RhbENvbHVtbldlaWdodCArPSBjb2x1bW5EYXRhLmdldENvbHVtbldlaWdodChjb2x1bW5JZGVudGlmaWVyKTsKLSAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oImNvbHVtbldpZHRoKCIgKyBjb2x1bW5JZGVudGlmaWVyICsgIik9IiArIGNvbHVtbldpZHRoKTsgICAgICAgIAotICAgICAgfSAgCi0gICAgICByLndpZHRoID0gTWF0aC5tYXgoY2hpbGRTaXplLndpZHRoLCBjb2x1bW5XaWR0aCk7Ci0gICAgICByZXF1aXJlZFdpZHRoICs9IHIud2lkdGg7Ci0gICAgICBib3VuZHNbaV0gPSBuZXcgUmVjdGFuZ2xlKHIpOyAgICAgIAotICAgICAgci54ICs9IHIud2lkdGg7Ci0gICAgfSAgICAgICAgICAKLSAgICBpZiAodG90YWxDb2x1bW5XZWlnaHQgPCAxKQotICAgIHsKLSAgICAgIHRvdGFsQ29sdW1uV2VpZ2h0ID0gMTsKLSAgICB9Ci0gICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oImNsaWVudEFyZWEud2lkdGg9IiArIGNsaWVudEFyZWEud2lkdGggKyAiLCAiICsgci54KTsKLSAgICBpbnQgZXh0cmFXaWR0aCA9IE1hdGgubWF4KGNsaWVudEFyZWEud2lkdGggLSByZXF1aXJlZFdpZHRoLCAwKTsgICAgCi0gICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oImV4dHJhV2lkdGg9IiArIGV4dHJhV2lkdGggKyAiIHRvdGFsQ29sdW1uV2VpZ2h0PSIgKyB0b3RhbENvbHVtbldlaWdodCk7ICAKLSAgICBpbnQgZXh0cmFXaWR0aEFsbG9jYXRlZCA9IDA7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlblNpemU7IGkrKykKLSAgICB7Ci0gICAgICBJRmlndXJlIGNoaWxkID0gKElGaWd1cmUpIGNoaWxkcmVuLmdldChpKTsgICAgICAKLSAgICAgIFJlY3RhbmdsZSBiID0gYm91bmRzW2ldOyAgICAKLSAgICAgIGlmIChleHRyYVdpZHRoID4gMCkKLSAgICAgIHsgIAotICAgICAgICBTdHJpbmcgY29sdW1uSWRlbnRpZmllciA9IChTdHJpbmcpZ2V0Q29uc3RyYWludChjaGlsZCk7Ci0gICAgICAgIGlmIChjb2x1bW5JZGVudGlmaWVyICE9IG51bGwpCi0gICAgICAgIHsgICAgICAgIAotICAgICAgICAgIGludCB3ZWlnaHQgPSBjb2x1bW5EYXRhLmdldENvbHVtbldlaWdodChjb2x1bW5JZGVudGlmaWVyKTsKLSAgICAgICAgICBmbG9hdCBmcmFjdGlvbiA9IChmbG9hdCl3ZWlnaHQgLyAoZmxvYXQpdG90YWxDb2x1bW5XZWlnaHQ7Ci0gICAgICAgICAgaW50IGV4dHJhV2lkdGhGb3JDaGlsZCA9IChpbnQpKGV4dHJhV2lkdGggKiBmcmFjdGlvbik7Ci0gICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oImV4dHJhV2lkdGhGb3JDaGlsZCgiICsgZnJhY3Rpb24gKyAiKT0iICsgZXh0cmFXaWR0aEZvckNoaWxkKTsgICAgICAgIAotICAgICAgICAgIGIud2lkdGggKz0gZXh0cmFXaWR0aEZvckNoaWxkOyAgICAgICAgCi0gICAgICAgICAgYi54ICs9IGV4dHJhV2lkdGhBbGxvY2F0ZWQ7Ci0gICAgICAgICAgZXh0cmFXaWR0aEFsbG9jYXRlZCArPSBleHRyYVdpZHRoRm9yQ2hpbGQ7Ci0gICAgICAgIH0gIAotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBiLnggKz0gZXh0cmFXaWR0aEFsbG9jYXRlZDsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2hpbGQuc2V0Qm91bmRzKG5ldyBSZWN0YW5nbGUoYikpOyAgCi0gICAgfSAgCi0gIH0KLQotICBwdWJsaWMgQ29sdW1uRGF0YSBnZXRDb2x1bW5EYXRhKCkKLSAgewotICAgIHJldHVybiBjb2x1bW5EYXRhOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0Q29sdW1uRGF0YShDb2x1bW5EYXRhIGNvbHVtbkRhdGEpCi0gIHsKLSAgICB0aGlzLmNvbHVtbkRhdGEgPSBjb2x1bW5EYXRhOwotICB9ICAgIAotICAKLSAgcHVibGljIE9iamVjdCBnZXRDb25zdHJhaW50KElGaWd1cmUgY2hpbGQpCi0gIHsKLSAgICByZXR1cm4gZmlndXJlVG9Db250c3RyYWludE1hcC5nZXQoY2hpbGQpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRDb25zdHJhaW50KElGaWd1cmUgY2hpbGQsIE9iamVjdCBjb25zdHJhaW50KQotICB7Ci0gICAgZmlndXJlVG9Db250c3RyYWludE1hcC5wdXQoY2hpbGQsIGNvbnN0cmFpbnQpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBpbnZhbGlkYXRlKCkKLSAgewotICAgIC8vZmlndXJlVG9Db250c3RyYWludE1hcC5jbGVhcigpOwotICAgIC8vdGhpcy5jb2x1bW5EYXRhLmNsZWFyQ29sdW1uV2lkdGhzKCk7Ci0gICAgc3VwZXIuaW52YWxpZGF0ZSgpOwotICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJpbnZhbGlkYXRlIik7ICAgIAotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JQVNET2JqZWN0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JQVNET2JqZWN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1YTNmODUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSUFTRE9iamVjdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotCi0KLXB1YmxpYyBpbnRlcmZhY2UgSUFTRE9iamVjdAotewotICAgIHB1YmxpYyB2b2lkIHJlZ2lzdGVyTGlzdGVuZXIoSUFTRE9iamVjdExpc3RlbmVyIGxpc3RlbmVyKTsKLSAgICBwdWJsaWMgdm9pZCB1bnJlZ2lzdGVyTGlzdGVuZXIoSUFTRE9iamVjdExpc3RlbmVyIGxpc3RlbmVyKTsKLSAgICAKLSAgICBwdWJsaWMgYm9vbGVhbiBpc1JlYWRPbmx5KCk7Ci0gICAgcHVibGljIExpc3QgZ2V0RGlhZ25vc3RpY01lc3NhZ2VzKCk7Ci0JcHVibGljIENvbW1hbmQgZ2V0RGVsZXRlQ29tbWFuZCgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSUFTRE9iamVjdExpc3RlbmVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JQVNET2JqZWN0TGlzdGVuZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQyOGMzOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JQVNET2JqZWN0TGlzdGVuZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlOwotCi1wdWJsaWMgaW50ZXJmYWNlIElBU0RPYmplY3RMaXN0ZW5lciB7Ci0JcHVibGljIHZvaWQgcHJvcGVydHlDaGFuZ2VkKE9iamVjdCBvYmplY3QsIFN0cmluZyBwcm9wZXJ0eSk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JQmluZGluZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSUJpbmRpbmcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZmY2JjMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JQmluZGluZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotCi1wdWJsaWMgaW50ZXJmYWNlIElCaW5kaW5nIGV4dGVuZHMgSU5hbWVkT2JqZWN0Ci17Ci0JcHVibGljIElJbnRlcmZhY2UgZ2V0SW50ZXJmYWNlKCk7Ci0JcHVibGljIExpc3QgZ2V0QmluZGluZ09wZXJhdGlvbnMoKTsKLQlwdWJsaWMgTGlzdCBnZXRCaW5kaW5nQ29udGVudExpc3QoKTsKLQlwdWJsaWMgTGlzdCBnZXRFeHRlbnNpYmxpdHlPYmplY3RzKCk7Ci0JcHVibGljIFN0cmluZyBnZXRQcm90b2NvbCgpOyAgCi0JcHVibGljIElEZXNjcmlwdGlvbiBnZXRPd25lckRlc2NyaXB0aW9uKCk7Ci0gIAotCXB1YmxpYyBDb21tYW5kIGdldFNldEludGVyZmFjZUNvbW1hbmQoSUludGVyZmFjZSBuZXdJbnRlcmZhY2UpOwotCXB1YmxpYyBDb21tYW5kIGdldEdlbmVyYXRlQmluZGluZ0NvbW1hbmQoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lCaW5kaW5nTWVzc2FnZVJlZmVyZW5jZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSUJpbmRpbmdNZXNzYWdlUmVmZXJlbmNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwYmM5NjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSUJpbmRpbmdNZXNzYWdlUmVmZXJlbmNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1wdWJsaWMgaW50ZXJmYWNlIElCaW5kaW5nTWVzc2FnZVJlZmVyZW5jZSBleHRlbmRzIElOYW1lZE9iamVjdAotewotCXB1YmxpYyBJTWVzc2FnZVJlZmVyZW5jZSBnZXRNZXNzYWdlUmVmZXJlbmNlKCk7Ci0JcHVibGljIExpc3QgZ2V0RXh0ZW5zaWJsaXR5T2JqZWN0cygpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSUJpbmRpbmdPcGVyYXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lCaW5kaW5nT3BlcmF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkOGI5OWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSUJpbmRpbmdPcGVyYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSUJpbmRpbmdPcGVyYXRpb24gZXh0ZW5kcyBJTmFtZWRPYmplY3QKLXsKLQlwdWJsaWMgSU9wZXJhdGlvbiBnZXRPcGVyYXRpb24oKTsKLQlwdWJsaWMgTGlzdCBnZXRCaW5kaW5nTWVzc2FnZXMoKTsKLQlwdWJsaWMgTGlzdCBnZXRFeHRlbnNpYmxpdHlPYmplY3RzKCk7ICAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lEZXNjcmlwdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSURlc2NyaXB0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkZjdjNTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSURlc2NyaXB0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci0KLQotcHVibGljIGludGVyZmFjZSBJRGVzY3JpcHRpb24gZXh0ZW5kcyBJTmFtZWRPYmplY3QKLXsKLQlwdWJsaWMgU3RyaW5nIGdldFRhcmdldE5hbWVzcGFjZSgpOwotCXB1YmxpYyBTdHJpbmcgZ2V0VGFyZ2V0TmFtZXNwYWNlUHJlZml4KCk7Ci0vLwlwdWJsaWMgTGlzdCBnZXROYW1lc3BhY2VzSW5mbygpOwkvLyBUT0RPOiBBZGQgdGhpcyBtZXRob2QgaW4gdGhlIGZ1dHVyZQotCQotCXB1YmxpYyBMaXN0IGdldEltcG9ydHMoKTsKLQlwdWJsaWMgTGlzdCBnZXRUeXBlcygpOwotCXB1YmxpYyBMaXN0IGdldFNlcnZpY2VzKCk7Ci0JcHVibGljIExpc3QgZ2V0QmluZGluZ3MoKTsKLQlwdWJsaWMgTGlzdCBnZXRJbnRlcmZhY2VzKCk7Ci0JcHVibGljIExpc3QgZ2V0TWVzc2FnZXMoKTsKLSAgCi0JcHVibGljIENvbW1hbmQgZ2V0QWRkSW1wb3J0Q29tbWFuZCgpOwotCXB1YmxpYyBDb21tYW5kIGdldEFkZFNjaGVtYUNvbW1hbmQoKTsKLQlwdWJsaWMgQ29tbWFuZCBnZXRBZGRTZXJ2aWNlQ29tbWFuZCgpOwotCXB1YmxpYyBDb21tYW5kIGdldEFkZEJpbmRpbmdDb21tYW5kKCk7Ci0JcHVibGljIENvbW1hbmQgZ2V0QWRkSW50ZXJmYWNlQ29tbWFuZCgpOwotCXB1YmxpYyBDb21tYW5kIGdldEFkZE1lc3NhZ2VDb21tYW5kKCk7Ci0vLwlwdWJsaWMgQ29tbWFuZCBnZXRFZGl0TmFtZXNwYWNlc0NvbW1hbmQoKTsJLy8gVE9ETzogQWRkIHRoaXMgbWV0aG9kIGluIHRoZSBmdXR1cmUKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lFbmRQb2ludC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSUVuZFBvaW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiOGZiMGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSUVuZFBvaW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotCi1wdWJsaWMgaW50ZXJmYWNlIElFbmRQb2ludCBleHRlbmRzIElOYW1lZE9iamVjdAotewotCXB1YmxpYyBJU2VydmljZSBnZXRPd25lclNlcnZpY2UoKTsKLQlwdWJsaWMgU3RyaW5nIGdldEFkZHJlc3MoKTsKLQlwdWJsaWMgSUJpbmRpbmcgZ2V0QmluZGluZygpOwotCXB1YmxpYyBTdHJpbmcgZ2V0UHJvdG9jb2woKTsKLSAgCi0JcHVibGljIENvbW1hbmQgZ2V0U2V0QmluZGluZ0NvbW1hbmQoSUJpbmRpbmcgYmluZGluZyk7Ci0JcHVibGljIENvbW1hbmQgZ2V0U2V0QWRkcmVzc0NvbW1hbmQoU3RyaW5nIG5ld0FkZHJlc3MpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSUltcG9ydC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSUltcG9ydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYmZkMzUzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lJbXBvcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlOwotCi1wdWJsaWMgaW50ZXJmYWNlIElJbXBvcnQgZXh0ZW5kcyBJTmFtZWRPYmplY3QgewotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlKCk7Ci0JcHVibGljIFN0cmluZyBnZXROYW1lc3BhY2VQcmVmaXgoKTsKLQlwdWJsaWMgU3RyaW5nIGdldExvY2F0aW9uKCk7Ci0JCi0JcHVibGljIElEZXNjcmlwdGlvbiBnZXRPd25lckRlc2NyaXB0aW9uKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JSW50ZXJmYWNlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JSW50ZXJmYWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmZjRkZWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSUludGVyZmFjZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLQotcHVibGljIGludGVyZmFjZSBJSW50ZXJmYWNlIGV4dGVuZHMgSU5hbWVkT2JqZWN0IHsKLSAgcHVibGljIExpc3QgZ2V0T3BlcmF0aW9ucygpOwotICAvKgotICAgKiBAZGVwcmVjYXRlZC4gIFRoZSBtZXRob2QgZ2V0SW1hZ2UoKSB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlCi0gICAqLwotICBwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoKTsKLSAgcHVibGljIENvbW1hbmQgZ2V0QWRkT3BlcmF0aW9uQ29tbWFuZCgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSU1lc3NhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lNZXNzYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkODZjNWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSU1lc3NhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLQotcHVibGljIGludGVyZmFjZSBJTWVzc2FnZSBleHRlbmRzIElOYW1lZE9iamVjdCB7Ci0JICBwdWJsaWMgTGlzdCBnZXRQYXJ0cygpOwotCSAgCi0JICBwdWJsaWMgSURlc2NyaXB0aW9uIGdldE93bmVyRGVzY3JpcHRpb24oKTsKLQkgIAotCSAgcHVibGljIENvbW1hbmQgZ2V0QWRkUGFydENvbW1hbmQoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lNZXNzYWdlUmVmZXJlbmNlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JTWVzc2FnZVJlZmVyZW5jZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzQwZTlkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lNZXNzYWdlUmVmZXJlbmNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci0KLS8vIHRoaXMgaXMgYSBzaW1wbGlmaWNhdGlvbiBvZiBhbiBpbnB1dCwgb3V0cHV0IG9yIGZhdWx0IG9iamVjdAotLy8gKG9yIGFueSBvdGhlciBraW5kIG9mIG9iamVjdCBmdXR1cmUgc3BlY3MgbWlnaHQgY29vayB1cCkKLXB1YmxpYyBpbnRlcmZhY2UgSU1lc3NhZ2VSZWZlcmVuY2UgZXh0ZW5kcyBJTmFtZWRPYmplY3QKLXsgIAotICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBLSU5EX0lOUFVUICA9IDE7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IEtJTkRfT1VUUFVUID0gMjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgS0lORF9GQVVMVCA9IDM7Ci0gIAotICBwdWJsaWMgaW50IGdldEtpbmQoKTsKLSAgcHVibGljIExpc3QgZ2V0UGFyYW1ldGVycygpOyAgIAotICBwdWJsaWMgSU9wZXJhdGlvbiBnZXRPd25lck9wZXJhdGlvbigpOwotICAKLSAgcHVibGljIENvbW1hbmQgZ2V0UmVvcmRlclBhcmFtZXRlcnNDb21tYW5kKElQYXJhbWV0ZXIgbGVmdFNpYmxpbmcsIElQYXJhbWV0ZXIgcmlnaHRTaWJsaW5nLCBJUGFyYW1ldGVyIG1vdmluZ1BhcmFtZXRlcik7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JTmFtZWRPYmplY3QuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lOYW1lZE9iamVjdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOGQzNzNhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lOYW1lZE9iamVjdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLQotcHVibGljIGludGVyZmFjZSBJTmFtZWRPYmplY3QgZXh0ZW5kcyBJQVNET2JqZWN0Ci17ICAKLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKTsKLSAgCi0JcHVibGljIENvbW1hbmQgZ2V0U2V0TmFtZUNvbW1hbmQoU3RyaW5nIG5ld05hbWUpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSU9wZXJhdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSU9wZXJhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjMyOGNhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lPcGVyYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLQotcHVibGljIGludGVyZmFjZSBJT3BlcmF0aW9uIGV4dGVuZHMgSU5hbWVkT2JqZWN0Ci17Ci0JcHVibGljIExpc3QgZ2V0TWVzc2FnZXMoKTsKLQlwdWJsaWMgSUludGVyZmFjZSBnZXRPd25lckludGVyZmFjZSgpOwotICAKLQlwdWJsaWMgQ29tbWFuZCBnZXRBZGRJbnB1dENvbW1hbmQoKTsKLQlwdWJsaWMgQ29tbWFuZCBnZXRBZGRPdXRwdXRDb21tYW5kKCk7Ci0gIC8vIFRPRE86IHJtYWg6IFdlIG5lZWQgdG8gcmV2aXNpdCB0aGlzIChTZW5kaW5nIGluIGFuIGV4aXN0aW5nIEZhdWx0SW1wbCB3aGVuIHdlIHdhbnQgdG8KLSAgLy8gYWRkIGEgRmF1bHQgUGFyYW1ldGVyLiAgV2hhdCBkbyB3ZSByZWFsbHkgd2FudCB0byBkbyB3aGVuIHdlIGFkZCBhCi0gIC8vICduZXcgRmF1bHQnLi4uLiBUaGlzIGFsc28gcmVsYXRlcyB0byB3aGF0IHdlIHJlYWxseSB3YW50IHRvIGRvIHdoZW4gd2UgZGVsZXRlIGEgRmF1bHQuLi4KLQlwdWJsaWMgQ29tbWFuZCBnZXRBZGRGYXVsdENvbW1hbmQoT2JqZWN0IGZhdWx0KTsKLQlwdWJsaWMgQ29tbWFuZCBnZXRSZW9yZGVyTWVzc2FnZVJlZmVyZW5jZXNDb21tYW5kKElNZXNzYWdlUmVmZXJlbmNlIGxlZnRTaWJsaW5nLCBJTWVzc2FnZVJlZmVyZW5jZSByaWdodFNpYmxpbmcsIElNZXNzYWdlUmVmZXJlbmNlIG1vdmluZ01lc3NhZ2VSZWYpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSVBhcmFtZXRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSVBhcmFtZXRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MGNlOGE2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvZmFjYWRlL0lQYXJhbWV0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci0KLQotLy8gdGhpcyBjbGFzcyBpcyB1c2VkIHRvIGRlc2NyaWJlIGluIHNpbXBsaWZpZWQgZGVzY3JpdHBpb24gb2YgdGhlIGlucHV0L291dHB1dC9mYXVsdCBzdHJ1Y3R1cmUKLS8vIGluIHRoZSBmYW1pbGlhciBzdHlsZSBvZiBhIHR5cGljYWwgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgcGFyYW1ldGVyIGUuZy4gIlN0cmluZ1tdIGZvbyIKLS8vIAotLy8gb2Z0ZW4gdGhpcyBjbGFzcyByZXByZXNlbnRzIGEgc2ltcGxpZmljYXRpb24gb2YgYSBtb3JlIGNvbXBsZXggc2VydmljZSBkZXNjcmlwdGlvbiBvciBzY2hlbWEKLS8vIHRoaXMgY2xhc3Mgc2VydmVzIGNvbW1vbiBkZW5vbWluYXRvciB0byBkcml2ZSBhIHNpbXBsZSB2aWV3IG9mIGFuIG9wZXJhdGlvbidzIG1lc3NhZ2Ugc3RydWN0dXJlCi0vLyBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBlZGl0b3JzIGNhbiBjaG9vc2UgdG8gcHJvdmlkZSAnYWR2YW5jZWQnIHZpZXdzIHRoYXQgZGVsdmUgaW50byBhZGRpdGlvbiBkZXRhaWxzCi0vLyBvZiBhIE1lc3NhZ2Ugc3RydWN0dXJlCi1wdWJsaWMgaW50ZXJmYWNlIElQYXJhbWV0ZXIgZXh0ZW5kcyBJTmFtZWRPYmplY3QKLXsKLQlwdWJsaWMgT2JqZWN0IGdldE93bmVyKCk7Ci0vLyAgU3RyaW5nIGdldEtpbmQoKTsKLQlwdWJsaWMgU3RyaW5nIGdldENvbXBvbmVudE5hbWUoKTsKLQlwdWJsaWMgU3RyaW5nIGdldENvbXBvbmVudE5hbWVRdWFsaWZpZXIoKTsKLQkKLQkvLyBUT0RPOiBybWFoOiBEbyB0aGVzZSBzdHJpbmdzIGJlbG9uZyBoZXJlPz8/Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VUX05FV19BQ1RJT05fSUQgPSAiU2V0VHlwZUFjdGlvbl9BZGRUeXBlIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNFTEVDVF9FWElTVElOR19BQ1RJT05fSUQgPSAiU2V0VHlwZUFjdGlvbl9FeGlzdGluZ1R5cGUiOyAvLyROT04tTkxTLTEkCi0gIAotCXB1YmxpYyBDb21tYW5kIGdldFNldFR5cGVDb21tYW5kKFN0cmluZyBhY3Rpb25JZCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JU2VydmljZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSVNlcnZpY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmU0ODdkYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JU2VydmljZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLQotcHVibGljIGludGVyZmFjZSBJU2VydmljZSBleHRlbmRzIElOYW1lZE9iamVjdAoteyAgCi0JcHVibGljIExpc3QgZ2V0RW5kUG9pbnRzKCk7Ci0JcHVibGljIElEZXNjcmlwdGlvbiBnZXRPd25lckRlc2NyaXB0aW9uKCk7Ci0JcHVibGljIENvbW1hbmQgZ2V0QWRkRW5kUG9pbnRDb21tYW5kKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JVHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9mYWNhZGUvSVR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDk5NzMwMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL2ZhY2FkZS9JVHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLQotcHVibGljIGludGVyZmFjZSBJVHlwZSBleHRlbmRzIElOYW1lZE9iamVjdCB7Ci0JcHVibGljIElEZXNjcmlwdGlvbiBnZXRPd25lckRlc2NyaXB0aW9uKCk7Ci0JcHVibGljIENvbW1hbmQgZ2V0RGVsZXRlQ29tbWFuZCgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9tZXNzYWdlcy5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9tZXNzYWdlcy5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMmI1ZThiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvbWVzc2FnZXMucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLV9VSV9UQUJfR1JBUEg9RGVzaWduCi1fVUlfVEFCX1NPVVJDRT1Tb3VyY2UKLV9VSV9CVVRUT05fTkVXPU5ldy4uLgotX1VJX0xBQkVMX1JFQURfT05MWT1yZWFkLW9ubHkKLV9VSV9MQUJFTF9OQU1FU1BBQ0U9TmFtZXNwYWNlCi1fVUlfTEFCRUxfUE9SVFRZUEU9UG9ydFR5cGUKLV9VSV9MQUJFTF9MT0NBVElPTj1Mb2NhdGlvbgotX1VJX0xBQkVMX0FERFJFU1M9QWRkcmVzcwotX1VJX0xBQkVMX0JJTkRJTkc9QmluZGluZwotX1VJX0xBQkVMX1BSRUZJWD1QcmVmaXgKLV9VSV9MQUJFTF9OQU1FPU5hbWUKLV9VSV9MQUJFTF9UWVBFPVR5cGUKLV9VSV9BQ1RJT05fQUREX1NFUlZJQ0U9QWRkIFNlcnZpY2UKLV9VSV9BQ1RJT05fQUREX01FU1NBR0U9QWRkIE1lc3NhZ2UKLV9VSV9BQ1RJT05fQUREX09QRVJBVElPTj1BZGQgT3BlcmF0aW9uCi1fVUlfQUNUSU9OX0FERF9JTVBPUlQ9QWRkIEltcG9ydAotX1VJX0FDVElPTl9BRERfT1VUUFVUPUFkZCBPdXRwdXQKLV9VSV9BQ1RJT05fQUREX0ZBVUxUPUFkZCBGYXVsdAotX1VJX0FDVElPTl9BRERfUE9SVD1BZGQgUG9ydAotX1VJX0FDVElPTl9BRERfUE9SVFRZUEU9QWRkIFBvcnRUeXBlCi1fVUlfQUNUSU9OX0RFTEVURT1EZWxldGUKLV9VSV9CVVRUT05fQlJPV1NFPUJyb3dzZS4uLgotX1VJX0FDVElPTl9ORVdfUE9SVFRZUEU9TmV3IFBvcnRUeXBlLi4uCi1fVUlfQUNUSU9OX05FV19CSU5ESU5HPU5ldyBCaW5kaW5nLi4uCi1fVUlfQUNUSU9OX0VYSVNUSU5HX1BPUlRUWVBFPUV4aXN0aW5nIFBvcnRUeXBlLi4uCi1fVUlfR0VORVJBVEVfQklORElOR19DT05URU5UPUdlbmVyYXRlIEJpbmRpbmcgQ29udGVudC4uLgotX1VJX0FDVElPTl9FWElTVElOR19CSU5ESU5HPUV4aXN0aW5nIEJpbmRpbmcuLi4KLV9VSV9MQUJFTF9CSU5ESU5HX1BST1RPQ09MPVByb3RvY29sCi1fVUlfTEFCRUxfVEFSR0VUX05BTUVTUEFDRT1UYXJnZXQgbmFtZXNwYWNlCi1fVUlfQUNUSU9OX0FERF9CSU5ESU5HPUFkZCBCaW5kaW5nCi1fVUlfQUNUSU9OX0FERF9TQ0hFTUE9QWRkIFNjaGVtYQotX1VJX0FDVElPTl9BRERfSU5QVVQ9QWRkIElucHV0Ci1fVUlfU0VDVElPTl9BRFZBTkNFRF9BVFRSSUJVVEVTPUFkdmFuY2VkCi0KLV9VSV9BQ1RJT05fRURJVF9OQU1FU1BBQ0VTID0gRWRpdCBOYW1lc3BhY2VzLi4uCi1fVUlfQUNUSU9OX09QRU5fU0NIRU1BPU9wZW4gU2NoZW1hCi1fVUlfVE9PTFRJUF9SRU5BTUVfUkVGQUNUT1I9Q2xpY2sgaGVyZSB0byBpbnZva2UgdGhlIFJlbmFtZSByZWZhY3RvcmluZy4KLQotX1VJX0xBQkVMX1JJR0hUX0NMSUNLX1RPX0lOU0VSVF9DT05URU5UPVJpZ2h0IG1vdXNlIGNsaWNrIGhlcmUgdG8gaW5zZXJ0IGNvbnRlbnQKLV9VSV9BQ1RJT05fU0hPV19QUk9QRVJUSUVTPVNob3cgcHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9vdXRsaW5lL0FTRENvbnRlbnRPdXRsaW5lUGFnZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9vdXRsaW5lL0FTRENvbnRlbnRPdXRsaW5lUGFnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTU1MDBhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2Qvb3V0bGluZS9BU0RDb250ZW50T3V0bGluZVBhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRyZWVDb250ZW50UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVHJlZVZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTWVudTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yQ1NIZWxwSWRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RNdWx0aVBhZ2VFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRGVzY3JpcHRpb247Ci0KLXB1YmxpYyBjbGFzcyBBU0RDb250ZW50T3V0bGluZVBhZ2UgZXh0ZW5kcyBDb250ZW50T3V0bGluZVBhZ2UgewotCXByb3RlY3RlZCBBU0RNdWx0aVBhZ2VFZGl0b3Igd3NkbEVkaXRvcjsKLQlwcm90ZWN0ZWQgSURlc2NyaXB0aW9uIG1vZGVsOwotCXByb3RlY3RlZCBJVHJlZUNvbnRlbnRQcm92aWRlciBjb250ZW50UHJvdmlkZXI7Ci0JcHJvdGVjdGVkIElMYWJlbFByb3ZpZGVyIGxhYmVsUHJvdmlkZXI7Ci0JcHJvdGVjdGVkIElNZW51TGlzdGVuZXIgbWVudUxpc3RlbmVyOwotCQotCXB1YmxpYyBBU0RDb250ZW50T3V0bGluZVBhZ2UoQVNETXVsdGlQYWdlRWRpdG9yIGVkaXRvciwgSU1lbnVMaXN0ZW5lciBtZW51TGlzdGVuZXIpIHsKLQkJd3NkbEVkaXRvciA9IGVkaXRvcjsKLQkJdGhpcy5tZW51TGlzdGVuZXIgPSBtZW51TGlzdGVuZXI7Ci0JfQotCQotCXB1YmxpYyBUcmVlVmlld2VyIGdldFRyZWVWaWV3ZXIoKSB7Ci0JCXJldHVybiBzdXBlci5nZXRUcmVlVmlld2VyKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldENvbnRlbnRQcm92aWRlcihJVHJlZUNvbnRlbnRQcm92aWRlciBjb250ZW50UHJvdmlkZXIpIHsKLQkJdGhpcy5jb250ZW50UHJvdmlkZXIgPSBjb250ZW50UHJvdmlkZXI7Ci0JfQkKLQkKLQlwdWJsaWMgdm9pZCBzZXRMYWJlbFByb3ZpZGVyKElMYWJlbFByb3ZpZGVyIGxhYmVsUHJvdmlkZXIpIHsKLQkJdGhpcy5sYWJlbFByb3ZpZGVyID0gbGFiZWxQcm92aWRlcjsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0TW9kZWwoSURlc2NyaXB0aW9uIG1vZGVsKSB7Ci0JCXRoaXMubW9kZWwgPSBtb2RlbDsKLQl9Ci0JCi0JcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotCQlzdXBlci5jcmVhdGVDb250cm9sKHBhcmVudCk7ICAgICAgICAgICAgICAgICAKLQkJCi0JCWdldFRyZWVWaWV3ZXIoKS5zZXRDb250ZW50UHJvdmlkZXIoY29udGVudFByb3ZpZGVyKTsKLQkJZ2V0VHJlZVZpZXdlcigpLnNldExhYmVsUHJvdmlkZXIobGFiZWxQcm92aWRlcik7Ci0JCWdldFRyZWVWaWV3ZXIoKS5zZXRJbnB1dChtb2RlbCk7Ci0JCWdldFRyZWVWaWV3ZXIoKS5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7Ci0JCQotCQlNZW51TWFuYWdlciBtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcigiI3BvcHVwIik7Ly8kTk9OLU5MUy0xJAotCQltZW51TWFuYWdlci5zZXRSZW1vdmVBbGxXaGVuU2hvd24odHJ1ZSk7Ci0JCU1lbnUgbWVudSA9IG1lbnVNYW5hZ2VyLmNyZWF0ZUNvbnRleHRNZW51KGdldFRyZWVWaWV3ZXIoKS5nZXRDb250cm9sKCkpOwotCQlnZXRUcmVlVmlld2VyKCkuZ2V0Q29udHJvbCgpLnNldE1lbnUobWVudSk7Ci0JCW1lbnVNYW5hZ2VyLmFkZE1lbnVMaXN0ZW5lcihtZW51TGlzdGVuZXIpOwotCQkKLQkgICAgZ2V0U2l0ZSgpLnJlZ2lzdGVyQ29udGV4dE1lbnUoIm9yZy5lY2xpcHNlLndzdC53c2RsLnVpLnBvcHVwLm91dGxpbmUiLCBtZW51TWFuYWdlciwgd3NkbEVkaXRvci5nZXRTZWxlY3Rpb25NYW5hZ2VyKCkpOyAvLyROT04tTkxTLTEkCi0JCSAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChnZXRDb250cm9sKCksQVNERWRpdG9yQ1NIZWxwSWRzLldTRExfT1VUTElORV9WSUVXKTsgCi0JfQotCQotCXByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NpbmdTZWxlY3Rpb25DaGFuZ2UgPSBmYWxzZTsKLQkKLQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgewotCQlpZiAoIXByb2Nlc3NpbmdTZWxlY3Rpb25DaGFuZ2UpIHsKLQkJCXByb2Nlc3NpbmdTZWxlY3Rpb25DaGFuZ2UgPSB0cnVlOwotCQkJc3VwZXIuc2VsZWN0aW9uQ2hhbmdlZChldmVudCk7Ci0JCQlPYmplY3Qgc2VsZWN0aW9uID0gbnVsbDsKLQkJCQotCQkJaWYgKCgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIGV2ZW50LmdldFNlbGVjdGlvbigpKS5nZXRGaXJzdEVsZW1lbnQoKSBpbnN0YW5jZW9mIEVkaXRQYXJ0KXsKLQkJCQlFZGl0UGFydCBuZXdFZGl0UGFydCA9IChFZGl0UGFydCkgKChJU3RydWN0dXJlZFNlbGVjdGlvbikgZXZlbnQuZ2V0U2VsZWN0aW9uKCkpLmdldEZpcnN0RWxlbWVudCgpOwotCQkJCXNlbGVjdGlvbiA9IG5ld0VkaXRQYXJ0LmdldE1vZGVsKCk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlzZWxlY3Rpb24gPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBldmVudC5nZXRTZWxlY3Rpb24oKSkuZ2V0Rmlyc3RFbGVtZW50KCk7Ci0JCQl9Ci0JCi0JCQlpZiAoc2VsZWN0aW9uICE9IG51bGwpIHsKLQkJCQlzZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oc2VsZWN0aW9uKSk7Ci0JCQl9Ci0JCQlwcm9jZXNzaW5nU2VsZWN0aW9uQ2hhbmdlID0gZmFsc2U7Ci0JCX0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9vdXRsaW5lL0FTRENvbnRlbnRPdXRsaW5lUHJvdmlkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2Qvb3V0bGluZS9BU0RDb250ZW50T3V0bGluZVByb3ZpZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjZDkzMGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9vdXRsaW5lL0FTRENvbnRlbnRPdXRsaW5lUHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLm91dGxpbmU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXJMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUcmVlQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVHJlZVZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLkFTRE11bHRpUGFnZUVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklBU0RPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JQVNET2JqZWN0TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JTmFtZWRPYmplY3Q7Ci0KLXB1YmxpYyBjbGFzcyBBU0RDb250ZW50T3V0bGluZVByb3ZpZGVyIGltcGxlbWVudHMgSVRyZWVDb250ZW50UHJvdmlkZXIsIElMYWJlbFByb3ZpZGVyLCBJQVNET2JqZWN0TGlzdGVuZXIgewotCXByb3RlY3RlZCBWaWV3ZXIgdmlld2VyOwotICAgIAotICAgIC8qKgotICAgICAqIEBkZXByZWNhdGVkCi0gICAgICovCi0JcHJvdGVjdGVkIEFTRE11bHRpUGFnZUVkaXRvciBlZGl0b3I7Ci0JcHJvdGVjdGVkIExpc3QgbGlzdGVuZXJzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIAotICAgIC8qKgotICAgICAqIEBkZXByZWNhdGVkCi0gICAgICovICAgIAotCXByb3RlY3RlZCBJRGVzY3JpcHRpb24gZGVzY3JpcHRpb247Ci0KLSAgICBwdWJsaWMgQVNEQ29udGVudE91dGxpbmVQcm92aWRlcigpCi0gICAgeyAgICAgIAotICAgIH0KLSAgICAKLQlwdWJsaWMgQVNEQ29udGVudE91dGxpbmVQcm92aWRlcihBU0RNdWx0aVBhZ2VFZGl0b3IgZWRpdG9yLCBJRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pIHsKLQkgIHRoaXMuZWRpdG9yID0gZWRpdG9yOwotICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOwotCX0KLQkKLQlwdWJsaWMgT2JqZWN0W10gZ2V0Q2hpbGRyZW4oT2JqZWN0IHBhcmVudEVsZW1lbnQpIHsKLQkJaWYgKHBhcmVudEVsZW1lbnQgaW5zdGFuY2VvZiBJVHJlZUVsZW1lbnQpIHsKLQkJCUlUcmVlRWxlbWVudFtdIGtpZHMgPSAoKElUcmVlRWxlbWVudCkgcGFyZW50RWxlbWVudCkuZ2V0Q2hpbGRyZW4oKTsKLQkJCWZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBraWRzLmxlbmd0aDsgaW5kZXgrKykgewotCQkJCWF0dGFjaExpc3RlbmVyKGtpZHNbaW5kZXhdKTsKLQkJCX0KLQkJCQotCQkJcmV0dXJuIGtpZHM7Ci0JCX0KLQotCQlyZXR1cm4gbmV3IE9iamVjdFswXTsgCi0JfQotCi0JcHVibGljIE9iamVjdCBnZXRQYXJlbnQoT2JqZWN0IGVsZW1lbnQpIHsKLQkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBJVHJlZUVsZW1lbnQpIHsKLQkJCXJldHVybiAoKElUcmVlRWxlbWVudCkgZWxlbWVudCkuZ2V0UGFyZW50KCk7Ci0JCX0KLQkJCi0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKE9iamVjdCBlbGVtZW50KSB7Ci0JCWlmIChnZXRDaGlsZHJlbihlbGVtZW50KS5sZW5ndGggPiAwKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgT2JqZWN0W10gZ2V0RWxlbWVudHMoT2JqZWN0IGlucHV0RWxlbWVudCkgewotCQlyZXR1cm4gZ2V0Q2hpbGRyZW4oaW5wdXRFbGVtZW50KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotCQl1bmF0dGFjaEFsbExpc3RlbmVycygpOwotCQl2aWV3ZXIgPSBudWxsOwotCX0KLQotCXB1YmxpYyB2b2lkIGlucHV0Q2hhbmdlZChWaWV3ZXIgdmlld2VyLCBPYmplY3Qgb2xkSW5wdXQsIE9iamVjdCBuZXdJbnB1dCkgewotCQl0aGlzLnZpZXdlciA9IHZpZXdlcjsKLQkJdW5hdHRhY2hBbGxMaXN0ZW5lcnMoKTsKLQl9Ci0KLQlwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoT2JqZWN0IGVsZW1lbnQpIHsKLQkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBJVHJlZUVsZW1lbnQpIHsKLQkJCXJldHVybiAoKElUcmVlRWxlbWVudCkgZWxlbWVudCkuZ2V0SW1hZ2UoKTsKLQkJfQotCi0JCXJldHVybiBudWxsOwotCX0KLSAgICAKLQlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IGVsZW1lbnQpIHsKLQkJU3RyaW5nIHRleHQgPSBudWxsOwotICAgICAgICAgCi0gICAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSU5hbWVkT2JqZWN0KSB7IAotCQkJdGV4dCA9ICAoKElOYW1lZE9iamVjdCkgZWxlbWVudCkuZ2V0TmFtZSgpOwotCQl9Ci0JCWVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBJVHJlZUVsZW1lbnQpIHsKLQkJCXRleHQgPSAoKElUcmVlRWxlbWVudCkgZWxlbWVudCkuZ2V0VGV4dCgpOwotCQl9Ci0JCWVsc2UgewotCQkJdGV4dCA9IGVsZW1lbnQudG9TdHJpbmcoKTsKLQkJfQotCQkKLQkJaWYgKHRleHQgPT0gbnVsbCkgewotCQkJdGV4dCA9ICIiOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJCi0JCXJldHVybiB0ZXh0OwotCX0KLQotCXB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKElMYWJlbFByb3ZpZGVyTGlzdGVuZXIgbGlzdGVuZXIpIHsKLQotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzTGFiZWxQcm9wZXJ0eShPYmplY3QgZWxlbWVudCwgU3RyaW5nIHByb3BlcnR5KSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCByZW1vdmVMaXN0ZW5lcihJTGFiZWxQcm92aWRlckxpc3RlbmVyIGxpc3RlbmVyKSB7Ci0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBhdHRhY2hMaXN0ZW5lcihPYmplY3Qgb2JqZWN0KSB7Ci0JCWlmIChvYmplY3QgaW5zdGFuY2VvZiBJQVNET2JqZWN0ICYmICFsaXN0ZW5lcnMuY29udGFpbnMob2JqZWN0KSkgewotCQkJKChJQVNET2JqZWN0KSBvYmplY3QpLnJlZ2lzdGVyTGlzdGVuZXIodGhpcyk7Ci0JCQlsaXN0ZW5lcnMuYWRkKG9iamVjdCk7Ci0JCX0KLQl9Ci0JCi0JcHJvdGVjdGVkIHZvaWQgdW5hdHRhY2hBbGxMaXN0ZW5lcnMoKSB7Ci0JCUl0ZXJhdG9yIGl0ID0gbGlzdGVuZXJzLml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLQkJCU9iamVjdCBpdGVtID0gaXQubmV4dCgpOwotCQkJKChJQVNET2JqZWN0KSBpdGVtKS51bnJlZ2lzdGVyTGlzdGVuZXIodGhpcyk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCBwcm9wZXJ0eUNoYW5nZWQoT2JqZWN0IG9iamVjdCwgU3RyaW5nIHByb3BlcnR5KSB7ICAgICAgICAgICAgIAotCQlpZiAodmlld2VyIGluc3RhbmNlb2YgVHJlZVZpZXdlcikgewotCQkJVHJlZVZpZXdlciB0cmVlVmlld2VyID0gKFRyZWVWaWV3ZXIpIHZpZXdlcjsKLQkJCXRyZWVWaWV3ZXIucmVmcmVzaChvYmplY3QpOwotCQkJdHJlZVZpZXdlci5yZXZlYWwob2JqZWN0KTsKLQkJfQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL291dGxpbmUvSUNhdGVnb3J5QWRhcHRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9vdXRsaW5lL0lDYXRlZ29yeUFkYXB0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTAzZDgyOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL291dGxpbmUvSUNhdGVnb3J5QWRhcHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JRGVzY3JpcHRpb247Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSUNhdGVnb3J5QWRhcHRlciB7Ci0JcHVibGljIElEZXNjcmlwdGlvbiBnZXRPd25lckRlc2NyaXB0aW9uKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL291dGxpbmUvSVRyZWVFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL291dGxpbmUvSVRyZWVFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExYTJkNzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9vdXRsaW5lL0lUcmVlRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5vdXRsaW5lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotCi1wdWJsaWMgaW50ZXJmYWNlIElUcmVlRWxlbWVudCB7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgSVRyZWVFbGVtZW50W10gRU1QVFlfTElTVCA9IHt9OwotICBJVHJlZUVsZW1lbnRbXSBnZXRDaGlsZHJlbigpOwotICBJVHJlZUVsZW1lbnQgZ2V0UGFyZW50KCk7Ci0gIGJvb2xlYW4gaGFzQ2hpbGRyZW4oKTsKLSAgU3RyaW5nIGdldFRleHQoKTsKLSAgSW1hZ2UgZ2V0SW1hZ2UoKTsKLSAgSW1hZ2UgZ2V0U2Vjb25kYXJ5SW1hZ2UoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvcHJvcGVydGllcy9zZWN0aW9ucy9BU0RBYnN0cmFjdFNlY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvcHJvcGVydGllcy9zZWN0aW9ucy9BU0RBYnN0cmFjdFNlY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGJkOGEwYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3Byb3BlcnRpZXMvc2VjdGlvbnMvQVNEQWJzdHJhY3RTZWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5wcm9wZXJ0aWVzLnNlY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQXNzZXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5jb21tYW5kcy5Db21tYW5kU3RhY2s7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklTdGF0dXNMaW5lTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuR0M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LkVkaXRvckFjdGlvbkJhckNvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMudGFiYmVkLklTZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMudGFiYmVkLlRhYmJlZFByb3BlcnR5U2hlZXRQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMudGFiYmVkLlRhYmJlZFByb3BlcnR5U2hlZXRXaWRnZXRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUFTRE9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklBU0RPYmplY3RMaXN0ZW5lcjsKLQotcHVibGljIGNsYXNzIEFTREFic3RyYWN0U2VjdGlvbiBpbXBsZW1lbnRzIElTZWN0aW9uLCBJQVNET2JqZWN0TGlzdGVuZXIsIExpc3RlbmVyLCBTZWxlY3Rpb25MaXN0ZW5lcgotewotCXByaXZhdGUgVGFiYmVkUHJvcGVydHlTaGVldFdpZGdldEZhY3RvcnkgZmFjdG9yeTsKLQlwcml2YXRlIE9iamVjdCBlbGVtZW50TW9kZWw7Ci0JcHJvdGVjdGVkIGJvb2xlYW4gaXNSZWFkT25seSA9IGZhbHNlOwotCXByb3RlY3RlZCBDb21wb3NpdGUgY29tcG9zaXRlOwotCXByb3RlY3RlZCBpbnQgcmlnaHRNYXJnaW5TcGFjZTsKLQlwcm90ZWN0ZWQgaW50IHRhYmxlTWluaW11bVdpZHRoID0gNTA7Ci0JcHJvdGVjdGVkIEN1c3RvbUxpc3RlbmVyIGN1c3RvbUxpc3RlbmVyID0gbmV3IEN1c3RvbUxpc3RlbmVyKCk7Ci0JCi0JcHJvdGVjdGVkIExpc3QgbGlzdGVuZXJzID0gbmV3IEFycmF5TGlzdCgpOwotCQotCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2xzKENvbXBvc2l0ZSBwYXJlbnQsIFRhYmJlZFByb3BlcnR5U2hlZXRQYWdlIHRhYmJlZFByb3BlcnR5U2hlZXRQYWdlKQotCXsKLQkJY3JlYXRlQ29udHJvbHMocGFyZW50LCB0YWJiZWRQcm9wZXJ0eVNoZWV0UGFnZS5nZXRXaWRnZXRGYWN0b3J5KCkpOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLnByb3BlcnRpZXMuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVNlY3Rpb24jY3JlYXRlQ29udHJvbHMob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLnByb3BlcnRpZXMuaW50ZXJuYWwucHJvdmlzaW9uYWwuVGFiYmVkUHJvcGVydHlTaGVldFdpZGdldEZhY3RvcnkpCi0JICovCi0JcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbHMoQ29tcG9zaXRlIHBhcmVudCwgVGFiYmVkUHJvcGVydHlTaGVldFdpZGdldEZhY3RvcnkgYUZhY3RvcnkpCi0JewotCQl0aGlzLmZhY3RvcnkgPSBhRmFjdG9yeTsKLQkJR0MgZ2MgPSBuZXcgR0MocGFyZW50KTsKLQkJUG9pbnQgZXh0ZW50ID0gZ2MudGV4dEV4dGVudCgiICAuLi4gICIpOyAvLyROT04tTkxTLTEkCi0JCXJpZ2h0TWFyZ2luU3BhY2UgPSBleHRlbnQueDsKLQkJZ2MuZGlzcG9zZSgpOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLnByb3BlcnRpZXMuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVNlY3Rpb24jc2V0SW5wdXQob3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQsIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbikKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRJbnB1dChJV29ya2JlbmNoUGFydCBwYXJ0LCBJU2VsZWN0aW9uIHNlbGVjdGlvbikKLQl7Ci0JCUFzc2VydC5pc1RydWUoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pOwotCQlPYmplY3QgaW5wdXQgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuZ2V0Rmlyc3RFbGVtZW50KCk7Ci0JCWVsZW1lbnRNb2RlbCA9IGlucHV0OwotCQlhdHRhY2hMaXN0ZW5lcihlbGVtZW50TW9kZWwpOwotCQkKLQkJaWYgKGlucHV0IGluc3RhbmNlb2YgSUFTRE9iamVjdCkgewotCQkJaXNSZWFkT25seSA9ICgoSUFTRE9iamVjdCkgaW5wdXQpLmlzUmVhZE9ubHkoKTsKLQkJfQotCQkKLQkJcmVmcmVzaCgpOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLnByb3BlcnRpZXMuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVNlY3Rpb24jYWJvdXRUb0JlU2hvd24oKQotCSAqLwotCXB1YmxpYyB2b2lkIGFib3V0VG9CZVNob3duKCkKLQl7Ci0JCXJlZnJlc2goKTsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5wcm9wZXJ0aWVzLmludGVybmFsLnByb3Zpc2lvbmFsLklTZWN0aW9uI2Fib3V0VG9CZUhpZGRlbigpCi0JICovCi0JcHVibGljIHZvaWQgYWJvdXRUb0JlSGlkZGVuKCkKLQl7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkucHJvcGVydGllcy5pbnRlcm5hbC5wcm92aXNpb25hbC5JU2VjdGlvbiNkaXNwb3NlKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkKLQl7Ci0JCXVuYXR0YWNoQWxsTGlzdGVuZXJzKCk7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkucHJvcGVydGllcy5pbnRlcm5hbC5wcm92aXNpb25hbC5JU2VjdGlvbiNnZXRNaW5pbXVtSGVpZ2h0KCkKLQkgKi8KLQlwdWJsaWMgaW50IGdldE1pbmltdW1IZWlnaHQoKQotCXsKLQkJcmV0dXJuIFNXVC5ERUZBVUxUOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLnByb3BlcnRpZXMuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVNlY3Rpb24jc2hvdWxkVXNlRXh0cmFTcGFjZSgpCi0JICovCi0JcHVibGljIGJvb2xlYW4gc2hvdWxkVXNlRXh0cmFTcGFjZSgpCi0JewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5wcm9wZXJ0aWVzLmludGVybmFsLnByb3Zpc2lvbmFsLklTZWN0aW9uI3JlZnJlc2goKQotCSAqLwotCXB1YmxpYyB2b2lkIHJlZnJlc2goKQotCXsKLQkJaWYgKCFjb21wb3NpdGUuaXNEaXNwb3NlZCgpKQotCQl7Ci0JCQlpZiAoaXNSZWFkT25seSkKLQkJCXsKLQkJCQljb21wb3NpdGUuc2V0RW5hYmxlZChmYWxzZSk7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJY29tcG9zaXRlLnNldEVuYWJsZWQodHJ1ZSk7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JLyoqCi0JICogR2V0IHRoZSB3aWRnZXQgZmFjdG9yeS4KLQkgKiBAcmV0dXJuIHRoZSB3aWRnZXQgZmFjdG9yeS4KLQkgKi8KLQlwdWJsaWMgVGFiYmVkUHJvcGVydHlTaGVldFdpZGdldEZhY3RvcnkgZ2V0V2lkZ2V0RmFjdG9yeSgpIHsKLQkJcmV0dXJuIGZhY3Rvcnk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHByb3BlcnR5Q2hhbmdlZChPYmplY3Qgb2JqZWN0LCBTdHJpbmcgcHJvcGVydHkpCi0JewotCQlyZWZyZXNoKCk7Ci0JfQotCQotCQotCXB1YmxpYyB2b2lkIGRvV2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0Je30KLQkKLQlwdWJsaWMgdm9pZCBkb1dpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0Je30KLQkKLQkvKioKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXIjd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50KQotCSAqLwotCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotCXsKLQkJaWYgKGlzTGlzdGVuZXJFbmFibGVkKCkgJiYgIWlzSW5Eb0hhbmRsZSkgCi0JCXsKLQkJCWlzSW5Eb0hhbmRsZSA9IHRydWU7Ci0JCQlkb1dpZGdldERlZmF1bHRTZWxlY3RlZChlKTsKLQkJCWlzSW5Eb0hhbmRsZSA9IGZhbHNlOwotCQl9Ci0JCQotCX0KLQkKLQkvKioKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXIjd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQpCi0JICovCi0JcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLQl7Ci0JCWlmIChpc0xpc3RlbmVyRW5hYmxlZCgpICYmICFpc0luRG9IYW5kbGUpIAotCQl7Ci0JCQlpc0luRG9IYW5kbGUgPSB0cnVlOwotCQkJZG9XaWRnZXRTZWxlY3RlZChlKTsKLQkJCWlzSW5Eb0hhbmRsZSA9IGZhbHNlOwotCQl9Ci0JCQotCX0KLQkKLQlib29sZWFuIGxpc3RlbmVyRW5hYmxlZCA9IHRydWU7Ci0JLyoqCi0JICogR2V0IHRoZSB2YWx1ZSBvZiBsaXN0ZW5lckVuYWJsZWQuCi0JICogQHJldHVybiB2YWx1ZSBvZiBsaXN0ZW5lckVuYWJsZWQuCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNMaXN0ZW5lckVuYWJsZWQoKSAKLQl7Ci0JCXJldHVybiBsaXN0ZW5lckVuYWJsZWQ7Ci0JfQotCQotICAgIHB1YmxpYyB2b2lkIGFwcGx5VGV4dExpc3RlbmVycyhDb250cm9sIGNvbnRyb2wpCi0gICAgewotICAgICAgY29udHJvbC5hZGRMaXN0ZW5lcihTV1QuRm9jdXNPdXQsIGN1c3RvbUxpc3RlbmVyKTsKLSAgICAgIGNvbnRyb2wuYWRkTGlzdGVuZXIoU1dULktleURvd24sIGN1c3RvbUxpc3RlbmVyKTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXJzKENvbnRyb2wgY29udHJvbCkKLSAgICB7Ci0gICAgICBjb250cm9sLnJlbW92ZUxpc3RlbmVyKFNXVC5Gb2N1c091dCwgY3VzdG9tTGlzdGVuZXIpOwotICAgICAgY29udHJvbC5yZW1vdmVMaXN0ZW5lcihTV1QuS2V5RG93biwgY3VzdG9tTGlzdGVuZXIpOwotICAgIH0KLQkKLQkvKioKLQkgKiBTZXQgdGhlIHZhbHVlIG9mIGxpc3RlbmVyRW5hYmxlZC4KLQkgKiBAcGFyYW0gdiAgVmFsdWUgdG8gYXNzaWduIHRvIGxpc3RlbmVyRW5hYmxlZC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRMaXN0ZW5lckVuYWJsZWQoYm9vbGVhbiAgdikgCi0JewotCQl0aGlzLmxpc3RlbmVyRW5hYmxlZCA9IHY7Ci0JfQotCQotCXB1YmxpYyB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50IGV2ZW50KQotCXsKLQkJaWYgKGlzTGlzdGVuZXJFbmFibGVkKCkgJiYgIWlzSW5Eb0hhbmRsZSkgCi0JCXsKLQkJCWlzSW5Eb0hhbmRsZSA9IHRydWU7Ci0vLwkJCXN0YXJ0RGVsYXllZEV2ZW50KGV2ZW50KTsKLQkJCWRvSGFuZGxlRXZlbnQoZXZlbnQpOwotCQkJaXNJbkRvSGFuZGxlID0gZmFsc2U7Ci0JCX0gLy8gZW5kIG9mIGlmICgpCi0JfQotCQotCXB1YmxpYyB2b2lkIGRvSGFuZGxlRXZlbnQoRXZlbnQgZXZlbnQpCi0JewotCQkKLQl9Ci0JCi0JcHJvdGVjdGVkIERlbGF5ZWRFdmVudCBkZWxheWVkVGFzazsKLQkKLQlwcm90ZWN0ZWQgdm9pZCBzdGFydERlbGF5ZWRFdmVudChFdmVudCBlKQotCXsKLQkJaWYgKGRlbGF5ZWRUYXNrID09IG51bGwgfHwKLQkJCQlkZWxheWVkVGFzay5nZXRFdmVudCgpID09IG51bGwpCi0JCXsKLQkJCWRlbGF5ZWRUYXNrID0gbmV3IERlbGF5ZWRFdmVudCgpOwotCQkJZGVsYXllZFRhc2suc2V0RXZlbnQoZSk7Ci0JCQlEaXNwbGF5LmdldERlZmF1bHQoKS50aW1lckV4ZWMoNTAwLGRlbGF5ZWRUYXNrKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCUV2ZW50IGRlbGF5ZWRFdmVudCA9IGRlbGF5ZWRUYXNrLmdldEV2ZW50KCk7Ci0JCQkKLQkJCWlmIChlLndpZGdldCA9PSBkZWxheWVkRXZlbnQud2lkZ2V0ICYmCi0JCQkJCWUudHlwZSA9PSBkZWxheWVkRXZlbnQudHlwZSkKLQkJCXsKLQkJCQkvLyBzYW1lIGV2ZW50LCBqdXN0IGRpZmZlcmVudCBkYXRhLCBkZWxheSBuZXcgZXZlbnQKLQkJCQlkZWxheWVkVGFzay5zZXRFdmVudChudWxsKTsKLQkJCX0KLQkJCWRlbGF5ZWRUYXNrID0gbmV3IERlbGF5ZWRFdmVudCgpOwotCQkJZGVsYXllZFRhc2suc2V0RXZlbnQoZSk7Ci0JCQlEaXNwbGF5LmdldERlZmF1bHQoKS50aW1lckV4ZWMoNTAwLGRlbGF5ZWRUYXNrKTsKLQkJfQotCX0KLQkKLQljbGFzcyBEZWxheWVkRXZlbnQgaW1wbGVtZW50cyBSdW5uYWJsZQotCXsKLQkJcHJvdGVjdGVkIEV2ZW50IGV2ZW50OwotCQkKLQkJLyoKLQkJICogQHNlZSBSdW5uYWJsZSNydW4oKQotCQkgKi8KLQkJcHVibGljIHZvaWQgcnVuKCkKLQkJewotCQkJaWYgKGV2ZW50ICE9IG51bGwpCi0JCQl7Ci0JCQkJaXNJbkRvSGFuZGxlID0gdHJ1ZTsKLQkJCQlkb0hhbmRsZUV2ZW50KGV2ZW50KTsKLQkJCQlpc0luRG9IYW5kbGUgPSBmYWxzZTsKLQkJCQlldmVudCA9IG51bGw7Ci0JCQl9Ci0JCX0KLQkJCi0JCS8qKgotCQkgKiBHZXRzIHRoZSBldmVudC4KLQkJICogQHJldHVybiBSZXR1cm5zIGEgRXZlbnQKLQkJICovCi0JCXB1YmxpYyBFdmVudCBnZXRFdmVudCgpCi0JCXsKLQkJCXJldHVybiBldmVudDsKLQkJfQotCQkKLQkJLyoqCi0JCSAqIFNldHMgdGhlIGV2ZW50LgotCQkgKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IHRvIHNldAotCQkgKi8KLQkJcHVibGljIHZvaWQgc2V0RXZlbnQoRXZlbnQgZXZlbnQpCi0JCXsKLQkJCXRoaXMuZXZlbnQgPSBldmVudDsKLQkJfQotCQkKLQl9Ci0JICAgCi0gICAgY2xhc3MgQ3VzdG9tTGlzdGVuZXIgaW1wbGVtZW50cyBMaXN0ZW5lcgotICAgIHsKLSAgICAgIGJvb2xlYW4gaXNIYW5kbGluZ0V2ZW50ID0gZmFsc2U7Ci0gICAgICBwdWJsaWMgdm9pZCBoYW5kbGVFdmVudChFdmVudCBldmVudCkKLSAgICAgIHsKLSAgICAgICAgaWYgKGlzTGlzdGVuZXJFbmFibGVkKCkgJiYgIWlzUmVhZE9ubHkpIAotICAgICAgICB7Ci0gICAgICAgICAgc3dpdGNoIChldmVudC50eXBlKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgU1dULktleURvd24gOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICBpZiAoZXZlbnQuY2hhcmFjdGVyID09IFNXVC5DUikKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICghaXNIYW5kbGluZ0V2ZW50KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGlzSGFuZGxpbmdFdmVudCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICBkb0hhbmRsZUV2ZW50KGV2ZW50KTsKLSAgICAgICAgICAgICAgICAgIGlzSGFuZGxpbmdFdmVudCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgU1dULkZvY3VzT3V0IDoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgaWYgKCFpc0hhbmRsaW5nRXZlbnQpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpc0hhbmRsaW5nRXZlbnQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGRvSGFuZGxlRXZlbnQoZXZlbnQpOwotICAgICAgICAgICAgICAgIGlzSGFuZGxpbmdFdmVudCA9IGZhbHNlOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQkKLQlwcm90ZWN0ZWQgYm9vbGVhbiBpc0luRG9IYW5kbGU7Ci0JLyoqCi0JICogR2V0IHRoZSB2YWx1ZSBvZiBpc0luRG9IYW5kbGUuCi0JICogQHJldHVybiB2YWx1ZSBvZiBpc0luRG9IYW5kbGUuCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNJbkRvSGFuZGxlKCkgCi0JewotCQlyZXR1cm4gaXNJbkRvSGFuZGxlOwotCX0KLQkKLQlzdGF0aWMgcHJvdGVjdGVkIElTdGF0dXNMaW5lTWFuYWdlciBnZXRTdGF0dXNMaW5lTWFuYWdlcihJRWRpdG9yUGFydCBlZGl0b3JQYXJ0KQotCXsgCi0JCUlTdGF0dXNMaW5lTWFuYWdlciByZXN1bHQgPSBudWxsOwotCQl0cnkKLQkJeyAgICAgICAgICAgICAgICAgICAgICAgCi0JCQlFZGl0b3JBY3Rpb25CYXJDb250cmlidXRvciBjb250cmlidXRvciA9IChFZGl0b3JBY3Rpb25CYXJDb250cmlidXRvcillZGl0b3JQYXJ0LmdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJDb250cmlidXRvcigpOwotCQkJcmVzdWx0ID0gY29udHJpYnV0b3IuZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCk7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKQotCQl7Ci0JCX0gIAotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQkKLQlwdWJsaWMgT2JqZWN0IGdldE1vZGVsKCkgewotCQlyZXR1cm4gZWxlbWVudE1vZGVsOwotCX0KLQkKLQlwcm90ZWN0ZWQgdm9pZCBhdHRhY2hMaXN0ZW5lcihPYmplY3Qgb2JqZWN0KSB7Ci0JCWlmIChvYmplY3QgaW5zdGFuY2VvZiBJQVNET2JqZWN0ICYmICFsaXN0ZW5lcnMuY29udGFpbnMob2JqZWN0KSkgewotCQkJKChJQVNET2JqZWN0KSBvYmplY3QpLnJlZ2lzdGVyTGlzdGVuZXIodGhpcyk7Ci0JCQlsaXN0ZW5lcnMuYWRkKG9iamVjdCk7Ci0JCX0KLQl9Ci0JCi0JcHJvdGVjdGVkIHZvaWQgdW5hdHRhY2hBbGxMaXN0ZW5lcnMoKSB7Ci0JCUl0ZXJhdG9yIGl0ID0gbGlzdGVuZXJzLml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLQkJCU9iamVjdCBpdGVtID0gaXQubmV4dCgpOwotCQkJKChJQVNET2JqZWN0KSBpdGVtKS51bnJlZ2lzdGVyTGlzdGVuZXIodGhpcyk7Ci0JCX0KLQl9Ci0JCi0JcHJvdGVjdGVkIHZvaWQgc2V0Q29udHJvbEZvcmVncm91bmRDb2xvcihDb250cm9sIGNvbnRyb2wpIHsKLQkJaWYgKGNvbnRyb2wgIT0gbnVsbCkgewotCQkJaWYgKGlzUmVhZE9ubHkpIHsKLQkJCQljb250cm9sLnNldEZvcmVncm91bmQoRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLnJlYWRPbmx5TGFiZWxDb2xvcik7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQljb250cm9sLnNldEZvcmVncm91bmQoRGVzaWduVmlld0dyYXBoaWNzQ29uc3RhbnRzLmxhYmVsQ29sb3IpOwotCQkJfQotCQl9Ci0JfQotICAgIAotICAgIHByb3RlY3RlZCB2b2lkIGV4ZWN1dGVDb21tYW5kKENvbW1hbmQgY29tbWFuZCkgewotICAgICAgICBJV29ya2JlbmNoUGFnZSBwYWdlID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAocGFnZS5nZXRBY3RpdmVFZGl0b3IoKSAhPSBudWxsICYmIHBhZ2UuZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0QWRhcHRlcihDb21tYW5kU3RhY2suY2xhc3MpICE9IG51bGwpIHsKLSAgICAgICAgICAgIENvbW1hbmRTdGFjayBzdGFjayA9IChDb21tYW5kU3RhY2spIHBhZ2UuZ2V0QWN0aXZlRWRpdG9yKCkuZ2V0QWRhcHRlcihDb21tYW5kU3RhY2suY2xhc3MpOwotICAgICAgICAgICAgc3RhY2suZXhlY3V0ZShjb21tYW5kKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNvbW1hbmQuZXhlY3V0ZSgpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9wcm9wZXJ0aWVzL3NlY3Rpb25zL0FTRFRhYmJlZFByb3BlcnR5U2hlZXRQYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3Byb3BlcnRpZXMvc2VjdGlvbnMvQVNEVGFiYmVkUHJvcGVydHlTaGVldFBhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDFmNjVkNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3Byb3BlcnRpZXMvc2VjdGlvbnMvQVNEVGFiYmVkUHJvcGVydHlTaGVldFBhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QucHJvcGVydGllcy5zZWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy50YWJiZWQuSVRhYmJlZFByb3BlcnR5U2hlZXRQYWdlQ29udHJpYnV0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy50YWJiZWQuVGFiYmVkUHJvcGVydHlTaGVldFBhZ2U7Ci0KLXB1YmxpYyBjbGFzcyBBU0RUYWJiZWRQcm9wZXJ0eVNoZWV0UGFnZSBleHRlbmRzIFRhYmJlZFByb3BlcnR5U2hlZXRQYWdlIGltcGxlbWVudHMgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lci8vLCBJRWxlbWVudExpc3RlbmVyCi17Ci0gIC8qKgotICAgKiBAcGFyYW0gdGFiYmVkUHJvcGVydHlTaGVldFBhZ2VDb250cmlidXRvcgotICAgKi8KLSAgcHVibGljIEFTRFRhYmJlZFByb3BlcnR5U2hlZXRQYWdlKElUYWJiZWRQcm9wZXJ0eVNoZWV0UGFnZUNvbnRyaWJ1dG9yIHRhYmJlZFByb3BlcnR5U2hlZXRQYWdlQ29udHJpYnV0b3IpCi0gIHsKLSAgICBzdXBlcih0YWJiZWRQcm9wZXJ0eVNoZWV0UGFnZUNvbnRyaWJ1dG9yKTsKLS8vICAgIHRhYkNvbnRyaWJ1dG9yID0gdGFiYmVkUHJvcGVydHlTaGVldFBhZ2VDb250cmlidXRvcjsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7Ci0gIAlzdXBlci5jcmVhdGVDb250cm9sKHBhcmVudCk7Ci0gIH0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIjc2VsZWN0aW9uQ2hhbmdlZChvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkKLQl7Ci0JCWlmICghZXZlbnQuZ2V0U2VsZWN0aW9uKCkuaXNFbXB0eSgpKSB7Ci0JCQlzZWxlY3Rpb25DaGFuZ2VkKGdldFNpdGUoKS5nZXRXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlUGFydCgpLCBldmVudC5nZXRTZWxlY3Rpb24oKSk7Ci0JCSAgICAvL3N1cGVyLnNlbGVjdGlvbkNoYW5nZWQoZ2V0U2l0ZSgpLmdldFdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVQYXJ0KCksIGV2ZW50LmdldFNlbGVjdGlvbigpKTsKLQkJfQotCX0KLSAgCi0JcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLQkJc3VwZXIuZGlzcG9zZSgpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3Byb3BlcnRpZXMvc2VjdGlvbnMvQmluZGluZ1NlY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvcHJvcGVydGllcy9zZWN0aW9ucy9CaW5kaW5nU2VjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDNhNTAzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvcHJvcGVydGllcy9zZWN0aW9ucy9CaW5kaW5nU2VjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjE0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QucHJvcGVydGllcy5zZWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZFN0YWNrOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUF0dGFjaG1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy50YWJiZWQuSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMudGFiYmVkLlRhYmJlZFByb3BlcnR5U2hlZXRXaWRnZXRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuQ29tcG9uZW50U3BlY2lmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yQ1NIZWxwSWRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEU2V0RXhpc3RpbmdJbnRlcmZhY2VBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmFjdGlvbnMuQVNEU2V0TmV3SW50ZXJmYWNlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUFTRE9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklCaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC51dGlsLlJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuYWR0LmVkaXQuQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBCaW5kaW5nU2VjdGlvbiBleHRlbmRzIFJlZmVyZW5jZVNlY3Rpb24gaW1wbGVtZW50cyBTZWxlY3Rpb25MaXN0ZW5lciB7Ci0JcHJvdGVjdGVkIENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIHJlZk1hbmFnZXI7Ci0JcHJpdmF0ZSBDTGFiZWwgcHJvdG9jb2xWYWx1ZTsKLS8vCXByaXZhdGUgQ0xhYmVsIG9wdGlvbnNWYWx1ZTsKLQlwcml2YXRlIEJ1dHRvbiByZWdlbkJpbmRpbmdCdXR0b247Ci0JCi0JcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbHMoQ29tcG9zaXRlIHBhcmVudCwgVGFiYmVkUHJvcGVydHlTaGVldFdpZGdldEZhY3RvcnkgZmFjdG9yeSkgewotCQlzdXBlci5jcmVhdGVDb250cm9scyhwYXJlbnQsIGZhY3RvcnkpOwotCQljb21ib0xhYmVsLnNldFRleHQob3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzLl9VSV9MQUJFTF9QT1JUVFlQRSArICI6Iik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkKLQkJQ0xhYmVsIHByb3RvY29sTGFiZWwgPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlQ0xhYmVsKGNvbXBvc2l0ZSwgTWVzc2FnZXMuX1VJX0xBQkVMX0JJTkRJTkdfUFJPVE9DT0wpOwotCQlwcm90b2NvbFZhbHVlPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlQ0xhYmVsKGNvbXBvc2l0ZSwgIiIpOyAvLyROT04tTkxTLTEkCi0JCQotCQkvLyBMYXlvdXQgcHJvdG9jb2xMYWJlbAotCQlGb3JtRGF0YSBkYXRhID0gbmV3IEZvcm1EYXRhKCk7Ci0JCWRhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKLQkJZGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudChwcm90b2NvbFZhbHVlLCAtSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLkhTUEFDRSk7Ci0JCWRhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KHByb3RvY29sVmFsdWUsIDAsIFNXVC5DRU5URVIpOwotCQlwcm90b2NvbExhYmVsLnNldExheW91dERhdGEoZGF0YSk7Ci0JCQotCQkvLyBMYXlvdXQgcHJvdG9jb2xWYWx1ZQotCQlkYXRhID0gbmV3IEZvcm1EYXRhKCk7Ci0JCWRhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAxMDApOwotCQlkYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgLXJpZ2h0TWFyZ2luU3BhY2UgLSBJVGFiYmVkUHJvcGVydHlDb25zdGFudHMuSFNQQUNFKTsKLQkJZGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoY29tYm8sIDApOwotLy8JCWRhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGNvbWJvLCArSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLlZTUEFDRSk7Ci0JCXByb3RvY29sVmFsdWUuc2V0TGF5b3V0RGF0YShkYXRhKTsKLQkJCi0JCS8qCi0JCUNMYWJlbCBvcHRpb25zTGFiZWwgPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlQ0xhYmVsKGNvbXBvc2l0ZSwgTWVzc2FnZXMuZ2V0U3RyaW5nKCJfVUlfVElUTEVfT1BUSU9OUyIpICsgIjoiKTsKLQkJb3B0aW9uc1ZhbHVlID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZUNMYWJlbChjb21wb3NpdGUsICIiKTsKLQkJCi0JCS8vIExheW91dCBvcHRpb25zTGFiZWwKLQkJZGF0YSA9IG5ldyBGb3JtRGF0YSgpOwotCQlkYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7Ci0JCWRhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQob3B0aW9uc1ZhbHVlLCAtSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLkhTUEFDRSk7Ci0JCWRhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KG9wdGlvbnNWYWx1ZSwgMCwgU1dULkNFTlRFUik7Ci0JCW9wdGlvbnNMYWJlbC5zZXRMYXlvdXREYXRhKGRhdGEpOwotCQkKLQkJLy8gTGF5b3V0IG9wdGlvbnNWYWx1ZQotCQlkYXRhID0gbmV3IEZvcm1EYXRhKCk7Ci0JCWRhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAxMDApOwotCQlkYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgLXJpZ2h0TWFyZ2luU3BhY2UgLSBJVGFiYmVkUHJvcGVydHlDb25zdGFudHMuSFNQQUNFKTsKLQkJZGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQocHJvdG9jb2xWYWx1ZSwgLUlUYWJiZWRQcm9wZXJ0eUNvbnN0YW50cy5WU1BBQ0UpOwotLy8JCWRhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KHByb3RvY29sVmFsdWUsICtJVGFiYmVkUHJvcGVydHlDb25zdGFudHMuVlNQQUNFKTsKLQkJb3B0aW9uc1ZhbHVlLnNldExheW91dERhdGEoZGF0YSk7Ci0JCQotCQlTdHJpbmcgYnV0dG9uTGFiZWwgPSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuTWVzc2FnZXMuZ2V0U3RyaW5nKCJfVUlfR0VORVJBVEVfQklORElOR19DT05URU5UIik7Ci0JCXJlZ2VuQmluZGluZ0J1dHRvbiA9IGdldFdpZGdldEZhY3RvcnkoKS5jcmVhdGVCdXR0b24oY29tcG9zaXRlLCBidXR0b25MYWJlbCwgU1dULlBVU0gpOwotCi0JCS8vIExheW91dCBidXR0b24KLQkJZGF0YSA9IG5ldyBGb3JtRGF0YSgpOwotCQlkYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7Ci0vLwkJZGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudChvcHRpb25zVmFsdWUsIC1JVGFiYmVkUHJvcGVydHlDb25zdGFudHMuSFNQQUNFKTsKLQkJZGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQob3B0aW9uc0xhYmVsLCAwKTsKLQkJcmVnZW5CaW5kaW5nQnV0dG9uLnNldExheW91dERhdGEoZGF0YSk7Ci0JCSovCi0KLQkJU3RyaW5nIGJ1dHRvbkxhYmVsID0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzLl9VSV9HRU5FUkFURV9CSU5ESU5HX0NPTlRFTlQ7Ci0JCXJlZ2VuQmluZGluZ0J1dHRvbiA9IGdldFdpZGdldEZhY3RvcnkoKS5jcmVhdGVCdXR0b24oY29tcG9zaXRlLCBidXR0b25MYWJlbCwgU1dULlBVU0gpOwotCi0JCS8vIExheW91dCBidXR0b24KLQkJZGF0YSA9IG5ldyBGb3JtRGF0YSgpOwotCQlkYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7Ci0vLwkJZGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudChvcHRpb25zVmFsdWUsIC1JVGFiYmVkUHJvcGVydHlDb25zdGFudHMuSFNQQUNFKTsKLQkJZGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQocHJvdG9jb2xMYWJlbCwgMCk7Ci0JCXJlZ2VuQmluZGluZ0J1dHRvbi5zZXRMYXlvdXREYXRhKGRhdGEpOwotCi0JCXJlZ2VuQmluZGluZ0J1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKLQkJCi0JCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAocHJvdG9jb2xWYWx1ZSwgQVNERWRpdG9yQ1NIZWxwSWRzLlBST1BFUlRJRVNfQklORElOR19QUk9UT0NPTF9URVhUKTsKLQkJUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChyZWdlbkJpbmRpbmdCdXR0b24sIEFTREVkaXRvckNTSGVscElkcy5QUk9QRVJUSUVTX0JJTkRJTkdfR0VOX0JJTkRJTkdfQlVUVE9OKTsKLQkJUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChjb21ibywgQVNERWRpdG9yQ1NIZWxwSWRzLlBST1BFUlRJRVNfQklORElOR19QT1JUVFlQRV9DT01CTyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHJlZnJlc2goKSB7Ci0JCXN1cGVyLnJlZnJlc2goKTsKLQkJSUJpbmRpbmcgYmluZGluZyA9IGdldElCaW5kaW5nKCk7Ci0JCVN0cmluZyBwcm90b2NvbCA9IGJpbmRpbmcuZ2V0UHJvdG9jb2woKTsKLQkJaWYgKHByb3RvY29sID09IG51bGwgfHwgcHJvdG9jb2wuZXF1YWxzKCIiKSkgeyAvLyROT04tTkxTLTEkCi0JCQlwcm90b2NvbCA9ICItLS0tIjsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JCXByb3RvY29sVmFsdWUuc2V0VGV4dChwcm90b2NvbCk7Ci0KLS8vCQlvcHRpb25zVmFsdWUuc2V0VGV4dCgiIik7Ci0JfQotCQotCXByb3RlY3RlZCBDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBnZXRDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcigpIHsKLQkJaWYgKHJlZk1hbmFnZXIgIT0gbnVsbCkgewotCQkJcmV0dXJuIHJlZk1hbmFnZXI7Ci0JCX0KLQotCQlyZWZNYW5hZ2VyID0gUmVmZXJlbmNlRWRpdE1hbmFnZXJIZWxwZXIuZ2V0SW50ZXJmYWNlUmVmZXJlbmNlRWRpdE1hbmFnZXIoKElBU0RPYmplY3QpIGdldE1vZGVsKCkpOwotCQkKLQkJcmV0dXJuIHJlZk1hbmFnZXI7Ci0JfQotCi0JcHJvdGVjdGVkIExpc3QgZ2V0Q29tYm9JdGVtcygpIHsKLQkJQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgbWFuYWdlciA9IGdldENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKCk7Ci0JCQotCQlMaXN0IGl0ZW1zID0gbmV3IEFycmF5TGlzdCgpOwotCQlpdGVtcy5hZGQoQlJPV1NFX1NUUklORyk7Ci0JCWl0ZW1zLmFkZChORVdfU1RSSU5HKTsKLQotCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uW10gY29tYm9JdGVtcyA9IG1hbmFnZXIuZ2V0UXVpY2tQaWNrcygpOwotCQlmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgY29tYm9JdGVtcy5sZW5ndGg7IGluZGV4KyspIHsKLQkJCWl0ZW1zLmFkZChjb21ib0l0ZW1zW2luZGV4XSk7Ci0JCX0KLQkJCi0JCXJldHVybiBpdGVtczsKLQl9Ci0KLQlwcm90ZWN0ZWQgT2JqZWN0IGdldEN1cnJlbnRDb21ib0l0ZW0oKSB7Ci0JCUlCaW5kaW5nIGJpbmRpbmcgPSBnZXRJQmluZGluZygpOwotCQlyZXR1cm4gYmluZGluZy5nZXRJbnRlcmZhY2UoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgU3RyaW5nIGdldENvbWJvSXRlbU5hbWUoT2JqZWN0IGl0ZW0pIHsKLQkJU3RyaW5nIG5hbWUgPSAiIjsgLy8kTk9OLU5MUy0xJAotCQlpZiAoaXRlbSBpbnN0YW5jZW9mIENvbXBvbmVudFNwZWNpZmljYXRpb24pIHsKLQkJCW5hbWUgPSAoKENvbXBvbmVudFNwZWNpZmljYXRpb24pIGl0ZW0pLmdldE5hbWUoKTsKLQkJfQotCQllbHNlIGlmIChpdGVtIGluc3RhbmNlb2YgSUludGVyZmFjZSkgewotCQkJbmFtZSA9ICgoSUludGVyZmFjZSkgaXRlbSkuZ2V0TmFtZSgpOwotCQl9Ci0JCWVsc2UgaWYgKGl0ZW0gaW5zdGFuY2VvZiBTdHJpbmcpIHsKLQkJCW5hbWUgPSAoU3RyaW5nKSBpdGVtOwotCQl9Ci0JCQotCQlyZXR1cm4gbmFtZTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBwZXJmb3JtQ29tYm9TZWxlY3Rpb24oT2JqZWN0IGl0ZW0pIHsKLQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBzcGVjID0gbnVsbDsKLQkJCi0JCWlmIChpdGVtIGluc3RhbmNlb2YgQ29tcG9uZW50U3BlY2lmaWNhdGlvbikgewotCQkJc3BlYyA9IChDb21wb25lbnRTcGVjaWZpY2F0aW9uKSBpdGVtOwotCQkJQ29tcG9uZW50UmVmZXJlbmNlRWRpdE1hbmFnZXIgbWFuYWdlciA9IGdldENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKCk7Ci0JCQltYW5hZ2VyLm1vZGlmeUNvbXBvbmVudFJlZmVyZW5jZSgoSUJpbmRpbmcpIGdldE1vZGVsKCksIHNwZWMpOwotCQl9Ci0JCWVsc2UgaWYgKGl0ZW0gaW5zdGFuY2VvZiBTdHJpbmcpIHsKLQkJCWlmIChpdGVtLmVxdWFscyhCUk9XU0VfU1RSSU5HKSkgewotCQkJCUlXb3JrYmVuY2hQYXJ0IHBhcnQgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVQYXJ0KCk7Ci0JCQkJQVNEU2V0RXhpc3RpbmdJbnRlcmZhY2VBY3Rpb24gYWN0aW9uID0gbmV3IEFTRFNldEV4aXN0aW5nSW50ZXJmYWNlQWN0aW9uKHBhcnQpOwotCQkJCWFjdGlvbi5zZXRJQmluZGluZygoSUJpbmRpbmcpIGdldE1vZGVsKCkpOwotCQkJCWFjdGlvbi5ydW4oKTsKLQkJCX0KLQkJCWVsc2UgaWYgKGl0ZW0uZXF1YWxzKE5FV19TVFJJTkcpKSB7Ci0JCQkJSVdvcmtiZW5jaFBhcnQgcGFydCA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZVBhcnQoKTsKLQkJCQlBU0RTZXROZXdJbnRlcmZhY2VBY3Rpb24gYWN0aW9uID0gbmV3IEFTRFNldE5ld0ludGVyZmFjZUFjdGlvbihwYXJ0KTsKLQkJCQlhY3Rpb24uc2V0SUJpbmRpbmcoKElCaW5kaW5nKSBnZXRNb2RlbCgpKTsKLQkJCQlhY3Rpb24ucnVuKCk7Ci0JCQl9Ci0JCX0KLQotCQlyZWZyZXNoKCk7Ci0JfQotCi0JcHJpdmF0ZSBJQmluZGluZyBnZXRJQmluZGluZygpIHsKLQkJcmV0dXJuIChJQmluZGluZykgZ2V0TW9kZWwoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgewotCQlpZiAoZS53aWRnZXQgPT0gcmVnZW5CaW5kaW5nQnV0dG9uKSB7Ci0JCQlDb21tYW5kIGNvbW1hbmQgPSBnZXRJQmluZGluZygpLmdldEdlbmVyYXRlQmluZGluZ0NvbW1hbmQoKTsKLQkJICAgIENvbW1hbmRTdGFjayBzdGFjayA9IChDb21tYW5kU3RhY2spIEFTREVkaXRvclBsdWdpbi5nZXRBY3RpdmVFZGl0b3IoKS5nZXRBZGFwdGVyKENvbW1hbmRTdGFjay5jbGFzcyk7Ci0JCSAgICBzdGFjay5leGVjdXRlKGNvbW1hbmQpOwotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIGRvV2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgewotCX0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3Byb3BlcnRpZXMvc2VjdGlvbnMvRG9jdW1lbnRhdGlvblNlY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvcHJvcGVydGllcy9zZWN0aW9ucy9Eb2N1bWVudGF0aW9uU2VjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzYyYzkyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvcHJvcGVydGllcy9zZWN0aW9ucy9Eb2N1bWVudGF0aW9uU2VjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QucHJvcGVydGllcy5zZWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtQXR0YWNobWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1EYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy50YWJiZWQuVGFiYmVkUHJvcGVydHlTaGVldFdpZGdldEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWN0aW9ucy5BZGRFbGVtZW50QWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yQ1NIZWxwSWRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5kZXNpZ24uZWRpdHBhcnRzLm1vZGVsLkFic3RyYWN0TW9kZWxDb2xsZWN0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotcHVibGljIGNsYXNzIERvY3VtZW50YXRpb25TZWN0aW9uIGV4dGVuZHMgQVNEQWJzdHJhY3RTZWN0aW9uIHsKLQlUZXh0IGRvY1RleHQ7Ci0KLQkvKioKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkucHJvcGVydGllcy5pbnRlcm5hbC5wcm92aXNpb25hbC5JVGFiYmVkUHJvcGVydHlTZWN0aW9uI2NyZWF0ZUNvbnRyb2xzKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSwgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5wcm9wZXJ0aWVzLmludGVybmFsLnByb3Zpc2lvbmFsLlRhYmJlZFByb3BlcnR5U2hlZXRXaWRnZXRGYWN0b3J5KQotCSAqLwotCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2xzKENvbXBvc2l0ZSBwYXJlbnQsIFRhYmJlZFByb3BlcnR5U2hlZXRXaWRnZXRGYWN0b3J5IGZhY3RvcnkpCi0JewotCQlzdXBlci5jcmVhdGVDb250cm9scyhwYXJlbnQsIGZhY3RvcnkpOwotCQljb21wb3NpdGUgPQlnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlRmxhdEZvcm1Db21wb3NpdGUocGFyZW50KTsKLQotCQlkb2NUZXh0ID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZVRleHQoY29tcG9zaXRlLCAiIiwgU1dULk1VTFRJIHwgU1dULk5PTkUgfCBTV1QuSF9TQ1JPTEwgfCBTV1QuVl9TQ1JPTEwpOyAvLyROT04tTkxTLTEkCi0JCWRvY1RleHQuYWRkTGlzdGVuZXIoU1dULktleURvd24sIHRoaXMpOwotCQlGb3JtRGF0YSBkYXRhID0gbmV3IEZvcm1EYXRhKCk7Ci0JCWRhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKLQkJZGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOwotCQlkYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKLQkJZGF0YS5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKLQkJZG9jVGV4dC5zZXRMYXlvdXREYXRhKGRhdGEpOwotCQlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKGRvY1RleHQsIEFTREVkaXRvckNTSGVscElkcy5QUk9QRVJUSUVTX0RPQ1VNRU5UQVRJT05fVEFCKTsKLQl9Ci0KLQkvKgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5wcm9wZXJ0aWVzLmludGVybmFsLnByb3Zpc2lvbmFsLnZpZXcuSVRhYmJlZFByb3BlcnR5U2VjdGlvbiNyZWZyZXNoKCkKLQkgKi8KLQkvKgotCSAqIFRPRE86IHRoZSBkb0hhbmRsZUV2ZW50KCkgYW5kIHJlZnJlc2goKSBtZXRob2RzIGJvdGggdXNlIFdTREwxMSBzcGVjaWZpYwotCSAqIGtub3dsZWRnZS4gIFRoaXMgY2xhc3MgKERvY3VtZW50YXRpb25TZWN0aW9uKSBzaG91bGQgYmUgZ2VuZXJpYy4gIEluIFBvc3QgMS41LAotCSAqIHdlIG5lZWQgdG8gYWRkIGRvY3VtZW50YXRpb24gc3VwcG9ydCBtZXRob2RzIHRvIG91ciBmYWNhZGUgc28gd2UgZG9uJ3QgbmVlZAotCSAqIHRvIGtub3cgV1NETCBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbi4uLi4uLi4gCi0JICovCi0JcHVibGljIHZvaWQgcmVmcmVzaCgpCi0JewotCQlzdXBlci5yZWZyZXNoKCk7Ci0JCWlmIChkb2NUZXh0LmlzRm9jdXNDb250cm9sKCkpCi0JCXsKLQkJCXJldHVybjsKLQkJfQotCQlzZXRMaXN0ZW5lckVuYWJsZWQoZmFsc2UpOwotCQlkb2NUZXh0LnNldFRleHQoIiIpOyAvLyROT04tTkxTLTEkCi0JCWlmIChnZXRNb2RlbCgpICE9IG51bGwgJiYgZ2V0RWxlbWVudCgpICE9IG51bGwpCi0JCXsKLQkJCUVsZW1lbnQgZG9jTm9kZSA9IGdldEVsZW1lbnQoKS5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpOwotCQkJaWYgKGRvY05vZGUgIT0gbnVsbCkKLQkJCXsKLQkJCQlOb2RlIHRleHROb2RlID0gZG9jTm9kZS5nZXRGaXJzdENoaWxkKCk7Ci0JCQkJaWYgKHRleHROb2RlICE9IG51bGwpCi0JCQkJewotCQkJCQlTdHJpbmcgZG9jVmFsdWUgPSB0ZXh0Tm9kZS5nZXROb2RlVmFsdWUoKTsKLQkJCQkJaWYgKGRvY1ZhbHVlICE9IG51bGwpCi0JCQkJCXsKLQkJCQkJCWRvY1RleHQuc2V0VGV4dChkb2NWYWx1ZSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJc2V0TGlzdGVuZXJFbmFibGVkKHRydWUpOwotCX0KLQotCS8qCi0JICogVE9ETzogdGhlIGRvSGFuZGxlRXZlbnQoKSBhbmQgcmVmcmVzaCgpIG1ldGhvZHMgYm90aCB1c2UgV1NETDExIHNwZWNpZmljCi0JICoga25vd2xlZGdlLiAgVGhpcyBjbGFzcyAoRG9jdW1lbnRhdGlvblNlY3Rpb24pIHNob3VsZCBiZSBnZW5lcmljLiAgSW4gUG9zdCAxLjUsCi0JICogd2UgbmVlZCB0byBhZGQgZG9jdW1lbnRhdGlvbiBzdXBwb3J0IG1ldGhvZHMgdG8gb3VyIGZhY2FkZSBzbyB3ZSBkb24ndCBuZWVkCi0JICogdG8ga25vdyBXU0RMIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLi4uLi4uLiAKLQkgKi8KLQlwdWJsaWMgdm9pZCBkb0hhbmRsZUV2ZW50KEV2ZW50IGV2ZW50KQotCXsKLQkJaWYgKGV2ZW50LndpZGdldCA9PSBkb2NUZXh0KQotCQl7Ci0JCQlTdHJpbmcgdmFsdWUgPSBkb2NUZXh0LmdldFRleHQoKTsKLQkJCWlmIChnZXRNb2RlbCgpICE9IG51bGwgJiYgZ2V0RWxlbWVudCgpICE9IG51bGwpCi0JCQl7Ci0JCQkJRWxlbWVudCBkb2NOb2RlID0gZ2V0RWxlbWVudCgpLmdldERvY3VtZW50YXRpb25FbGVtZW50KCk7Ci0JCQkJaWYgKGRvY05vZGUgIT0gbnVsbCkKLQkJCQl7Ci0JCQkJCU5vZGUgdGV4dE5vZGUgPSBkb2NOb2RlLmdldEZpcnN0Q2hpbGQoKTsKLQkJCQkJaWYgKHRleHROb2RlICE9IG51bGwpCi0JCQkJCXsKLQkJCQkJCXRleHROb2RlLnNldE5vZGVWYWx1ZSh2YWx1ZSk7Ci0JCQkJCX0KLQkJCQkJZWxzZQotCQkJCQl7Ci0JCQkJCQlpZiAodmFsdWUubGVuZ3RoKCkgPiAwKQotCQkJCQkJewotCQkJCQkJCURvY3VtZW50IGRvY3VtZW50ID0gZG9jTm9kZS5nZXRPd25lckRvY3VtZW50KCk7Ci0JCQkJCQkJb3JnLnczYy5kb20uVGV4dCBuZXdUZXh0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHZhbHVlKTsKLQkJCQkJCQlkb2NOb2RlLmFwcGVuZENoaWxkKG5ld1RleHROb2RlKTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCQllbHNlCi0JCQkJewotCQkJCQlFbGVtZW50IGVsZW1lbnQgPSBnZXRFbGVtZW50KCkuZ2V0RWxlbWVudCgpOwotCQkJCQlBZGRFbGVtZW50QWN0aW9uIGFjdGlvbiA9IG5ldyBBZGRFbGVtZW50QWN0aW9uKGVsZW1lbnQsIGVsZW1lbnQuZ2V0UHJlZml4KCksICJkb2N1bWVudGF0aW9uIiwgZWxlbWVudC5nZXRGaXJzdENoaWxkKCkpOyAvLyROT04tTkxTLTEkCi0JCQkJCWFjdGlvbi5ydW4oKTsKLQkJCQkJRWxlbWVudCBuZXdEb2N1bWVudGF0aW9uID0gYWN0aW9uLmdldE5ld0VsZW1lbnQoKTsKLQotCQkJCQlEb2N1bWVudCBkb2N1bWVudCA9IG5ld0RvY3VtZW50YXRpb24uZ2V0T3duZXJEb2N1bWVudCgpOwotCQkJCQlvcmcudzNjLmRvbS5UZXh0IG5ld1RleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodmFsdWUpOwotCQkJCQluZXdEb2N1bWVudGF0aW9uLmFwcGVuZENoaWxkKG5ld1RleHROb2RlKTsKLQkJCQkJZ2V0RWxlbWVudCgpLnNldERvY3VtZW50YXRpb25FbGVtZW50KG5ld0RvY3VtZW50YXRpb24pOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQotCXByaXZhdGUgV1NETEVsZW1lbnQgZ2V0RWxlbWVudCgpIHsKLQkJV1NETEVsZW1lbnQgZWxlbWVudCA9IG51bGw7Ci0JCU9iamVjdCBtb2RlbCA9IGdldE1vZGVsKCk7Ci0KLQkJaWYgKG1vZGVsIGluc3RhbmNlb2YgQWJzdHJhY3RNb2RlbENvbGxlY3Rpb24pIHsKLQkJCW1vZGVsID0gKChBYnN0cmFjdE1vZGVsQ29sbGVjdGlvbikgbW9kZWwpLmdldE1vZGVsKCk7Ci0JCX0KLQkJCi0JCS8vIFRPRE86IFNob3VsZCB3ZSBiZSBoYW5kbGluZyB0aGUgWE1MIFNjaGVtYSBjYXNlIGhlcmUgYXMgd2VsbD8KLQkJaWYgKG1vZGVsIGluc3RhbmNlb2YgV1NETEJhc2VBZGFwdGVyKSB7Ci0JCQlPYmplY3QgdGFyZ2V0ID0gKChXU0RMQmFzZUFkYXB0ZXIpIG1vZGVsKS5nZXRUYXJnZXQoKTsKLQkJCWlmICh0YXJnZXQgaW5zdGFuY2VvZiBXU0RMRWxlbWVudCkgewotCQkJCWVsZW1lbnQgPSAoV1NETEVsZW1lbnQpIHRhcmdldDsKLQkJCX0KLQkJfQotCi0JCXJldHVybiBlbGVtZW50OwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3Byb3BlcnRpZXMvc2VjdGlvbnMvRW5kUG9pbnRTZWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3Byb3BlcnRpZXMvc2VjdGlvbnMvRW5kUG9pbnRTZWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzM2I5MGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9wcm9wZXJ0aWVzL3NlY3Rpb25zL0VuZFBvaW50U2VjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQ3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QucHJvcGVydGllcy5zZWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNDb21ibzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNMYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1BdHRhY2htZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybURhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLnRhYmJlZC5JVGFiYmVkUHJvcGVydHlDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy50YWJiZWQuVGFiYmVkUHJvcGVydHlTaGVldFdpZGdldEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5zZWFyY2guZGlhbG9ncy5Db21wb25lbnRTcGVjaWZpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMUVuZFBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5BU0RFZGl0b3JDU0hlbHBJZHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5hY3Rpb25zLkFTRFNldEV4aXN0aW5nQmluZGluZ0FjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RTZXROZXdCaW5kaW5nQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUFTRE9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklCaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUVuZFBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuUmVmZXJlbmNlRWRpdE1hbmFnZXJIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5Db21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLQotcHVibGljIGNsYXNzIEVuZFBvaW50U2VjdGlvbiBleHRlbmRzIFJlZmVyZW5jZVNlY3Rpb24gewotCXByb3RlY3RlZCBUZXh0IGFkZHJlc3NUZXh0OwotCXByb3RlY3RlZCBDQ29tYm8gcHJvdG9jb2xDb21ibzsKLQkKLQlwcm90ZWN0ZWQgTGlzdCBiaW5kaW5nc0luQ29tYm8gPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCi0JcHJvdGVjdGVkIENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIHJlZk1hbmFnZXI7Ci0JCi0JLyoqCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLnByb3BlcnRpZXMuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVRhYmJlZFByb3BlcnR5U2VjdGlvbiNjcmVhdGVDb250cm9scyhvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUsIG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkucHJvcGVydGllcy5pbnRlcm5hbC5wcm92aXNpb25hbC5UYWJiZWRQcm9wZXJ0eVNoZWV0V2lkZ2V0RmFjdG9yeSkKLQkgKi8KLQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9scyhDb21wb3NpdGUgcGFyZW50LCBUYWJiZWRQcm9wZXJ0eVNoZWV0V2lkZ2V0RmFjdG9yeSBmYWN0b3J5KQotCXsKLQkJc3VwZXIuY3JlYXRlQ29udHJvbHMocGFyZW50LCBmYWN0b3J5KTsKLQkJRm9ybURhdGEgZGF0YTsKLQkJCi0JCS8vIEFkZHJlc3Mgcm93Ci0JCUNMYWJlbCBhZGRyZXNzTGFiZWwgPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlQ0xhYmVsKGNvbXBvc2l0ZSwgTWVzc2FnZXMuX1VJX0xBQkVMX0FERFJFU1MgKyAiOiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJYWRkcmVzc1RleHQgPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlVGV4dChjb21wb3NpdGUsICIiKTsgLy8kTk9OLU5MUy0xJAotCQkKLQkJZGF0YSA9IG5ldyBGb3JtRGF0YSgpOwotCQlkYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7Ci0JCWRhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoYWRkcmVzc1RleHQsIC1JVGFiYmVkUHJvcGVydHlDb25zdGFudHMuSFNQQUNFKTsKLQkJZGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoYWRkcmVzc1RleHQsIDAsIFNXVC5DRU5URVIpOwotCQlhZGRyZXNzTGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsKLQkJCi0JCWRhdGEgPSBuZXcgRm9ybURhdGEoKTsKLQkJZGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDEwMCk7Ci0JCWRhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAtcmlnaHRNYXJnaW5TcGFjZSAtIElUYWJiZWRQcm9wZXJ0eUNvbnN0YW50cy5IU1BBQ0UpOwotCQlkYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChjb21ibywgK0lUYWJiZWRQcm9wZXJ0eUNvbnN0YW50cy5WU1BBQ0UpOwotCQlhZGRyZXNzVGV4dC5zZXRMYXlvdXREYXRhKGRhdGEpOwotCQlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKGFkZHJlc3NUZXh0LCBBU0RFZGl0b3JDU0hlbHBJZHMuUFJPUEVSVElFU19QT1JUX0FERFJFU1NfVEVYVCk7Ci0KLQkJLy8gUHJvdG9jb2wgUm93Ci0JCUNMYWJlbCBwcm90b2NvbExhYmVsID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZUNMYWJlbChjb21wb3NpdGUsIE1lc3NhZ2VzLl9VSV9MQUJFTF9CSU5ESU5HX1BST1RPQ09MICsgIjoiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCXByb3RvY29sQ29tYm8gPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlQ0NvbWJvKGNvbXBvc2l0ZSk7IC8vJE5PTi1OTFMtMSQKLQotCQlkYXRhID0gbmV3IEZvcm1EYXRhKCk7Ci0JCWRhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKLQkJZGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudChwcm90b2NvbENvbWJvLCAtSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLkhTUEFDRSk7Ci0JCWRhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KHByb3RvY29sQ29tYm8sIDAsIFNXVC5DRU5URVIpOwotCQlwcm90b2NvbExhYmVsLnNldExheW91dERhdGEoZGF0YSk7Ci0JCQotCQlkYXRhID0gbmV3IEZvcm1EYXRhKCk7Ci0JCWRhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAxMDApOwotCQlkYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgLXJpZ2h0TWFyZ2luU3BhY2UgLSBJVGFiYmVkUHJvcGVydHlDb25zdGFudHMuSFNQQUNFKTsKLQkJZGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoYWRkcmVzc1RleHQsICtJVGFiYmVkUHJvcGVydHlDb25zdGFudHMuVlNQQUNFKTsKLQkJcHJvdG9jb2xDb21iby5zZXRMYXlvdXREYXRhKGRhdGEpOwotCQlwcm90b2NvbENvbWJvLmFkZExpc3RlbmVyKFNXVC5Nb2RpZnksIHRoaXMpOwotCQlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHByb3RvY29sQ29tYm8sIEFTREVkaXRvckNTSGVscElkcy5QUk9QRVJUSUVTX1BPUlRfUFJPVE9DT0xfVEVYVCk7Ci0KLQkJY29tYm9MYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLl9VSV9MQUJFTF9CSU5ESU5HICsgIjoiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCQotCQlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKGNvbWJvLCBBU0RFZGl0b3JDU0hlbHBJZHMuUFJPUEVSVElFU19QT1JUX0JJTkRJTkdfQ09NQk8pOwotCX0KLQotCS8qCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLnByb3BlcnRpZXMuaW50ZXJuYWwucHJvdmlzaW9uYWwudmlldy5JVGFiYmVkUHJvcGVydHlTZWN0aW9uI3JlZnJlc2goKQotCSAqLwotCXB1YmxpYyB2b2lkIHJlZnJlc2goKSB7Ci0JCXJlbW92ZUxpc3RlbmVycyhhZGRyZXNzVGV4dCk7Ci0JCXByb3RvY29sQ29tYm8ucmVtb3ZlTGlzdGVuZXIoU1dULk1vZGlmeSwgdGhpcyk7Ci0KLQkJc3VwZXIucmVmcmVzaCgpOwotCi0JCUlFbmRQb2ludCBlbmRQb2ludCA9IChJRW5kUG9pbnQpIGdldE1vZGVsKCk7Ci0JCWlmIChlbmRQb2ludC5nZXRBZGRyZXNzKCkgIT0gbnVsbCkgewotCQkJaWYgKCFlbmRQb2ludC5nZXRBZGRyZXNzKCkuZXF1YWxzKGFkZHJlc3NUZXh0LmdldFRleHQoKSkpIHsKLQkJCQlhZGRyZXNzVGV4dC5zZXRUZXh0KGVuZFBvaW50LmdldEFkZHJlc3MoKSk7Ci0JCQl9Ci0JCX0KLQotCQlwcm90b2NvbENvbWJvLnJlbW92ZUFsbCgpOwotCQlpZiAoZW5kUG9pbnQgaW5zdGFuY2VvZiBXMTFFbmRQb2ludCkgewotCQkJU3RyaW5nIHByb3RvY29sVmFsdWUgPSAoKFcxMUVuZFBvaW50KSBlbmRQb2ludCkuZ2V0UHJvdG9jb2woKTsKLQkJCUxpc3QgcHJvdG9jb2xzID0gKChXMTFFbmRQb2ludCkgZ2V0TW9kZWwoKSkuZ2V0QXBwbGljYWJsZVByb3RvY29sKCk7Ci0JCQlJdGVyYXRvciBpdCA9IHByb3RvY29scy5pdGVyYXRvcigpOwotCQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJCXByb3RvY29sQ29tYm8uYWRkKChTdHJpbmcpIGl0Lm5leHQoKSk7Ci0JCQl9Ci0JCQotCQkJcHJvdG9jb2xDb21iby5zZXRUZXh0KHByb3RvY29sVmFsdWUpOwotCQl9Ci0JCQotCQlzZXRDb250cm9sRm9yZWdyb3VuZENvbG9yKGFkZHJlc3NUZXh0KTsKLQkJc2V0Q29udHJvbEZvcmVncm91bmRDb2xvcihwcm90b2NvbENvbWJvKTsKLQkJYXBwbHlUZXh0TGlzdGVuZXJzKGFkZHJlc3NUZXh0KTsKLQkJcHJvdG9jb2xDb21iby5hZGRMaXN0ZW5lcihTV1QuTW9kaWZ5LCB0aGlzKTsKLQl9Ci0JCi0JcHJvdGVjdGVkIENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIGdldENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKCkgewotCQlpZiAocmVmTWFuYWdlciAhPSBudWxsKSB7Ci0JCQlyZXR1cm4gcmVmTWFuYWdlcjsKLQkJfQotCi0JCXJlZk1hbmFnZXIgPSBSZWZlcmVuY2VFZGl0TWFuYWdlckhlbHBlci5nZXRCaW5kaW5nUmVmZXJlbmNlRWRpdE1hbmFnZXIoKElBU0RPYmplY3QpIGdldE1vZGVsKCkpOyAKLQkJCi0JCXJldHVybiByZWZNYW5hZ2VyOwotCX0KLQotCXByb3RlY3RlZCBMaXN0IGdldENvbWJvSXRlbXMoKSB7Ci0JCUNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIG1hbmFnZXIgPSBnZXRDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcigpOwotCQkKLQkJTGlzdCBpdGVtcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJaXRlbXMuYWRkKEJST1dTRV9TVFJJTkcpOwotCQlpdGVtcy5hZGQoTkVXX1NUUklORyk7Ci0KLQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbltdIGNvbWJvSXRlbXMgPSBtYW5hZ2VyLmdldFF1aWNrUGlja3MoKTsKLQkJZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGNvbWJvSXRlbXMubGVuZ3RoOyBpbmRleCsrKSB7Ci0JCQlpdGVtcy5hZGQoY29tYm9JdGVtc1tpbmRleF0pOwotCQl9Ci0JCQotCQlyZXR1cm4gaXRlbXM7Ci0JfQotCQotCXByb3RlY3RlZCBPYmplY3QgZ2V0Q3VycmVudENvbWJvSXRlbSgpIHsKLQkJSUVuZFBvaW50IGVuZFBvaW50ID0gKElFbmRQb2ludCkgZ2V0TW9kZWwoKTsKLQkJcmV0dXJuIGVuZFBvaW50LmdldEJpbmRpbmcoKTsKLQl9Ci0JCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRDb21ib0l0ZW1OYW1lKE9iamVjdCBpdGVtKSB7Ci0JCVN0cmluZyBuYW1lID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJaWYgKGl0ZW0gaW5zdGFuY2VvZiBDb21wb25lbnRTcGVjaWZpY2F0aW9uKSB7Ci0JCQluYW1lID0gKChDb21wb25lbnRTcGVjaWZpY2F0aW9uKSBpdGVtKS5nZXROYW1lKCk7Ci0JCX0KLQkJZWxzZSBpZiAoaXRlbSBpbnN0YW5jZW9mIElCaW5kaW5nKSB7Ci0JCQluYW1lID0gKChJQmluZGluZykgaXRlbSkuZ2V0TmFtZSgpOwotCQl9Ci0JCWVsc2UgaWYgKGl0ZW0gaW5zdGFuY2VvZiBTdHJpbmcpIHsKLQkJCW5hbWUgPSAoU3RyaW5nKSBpdGVtOwotCQl9Ci0JCQotCQlyZXR1cm4gbmFtZTsKLQl9Ci0JCi0JcHJvdGVjdGVkIHZvaWQgcGVyZm9ybUNvbWJvU2VsZWN0aW9uKE9iamVjdCBpdGVtKSB7Ci0JCUNvbXBvbmVudFNwZWNpZmljYXRpb24gc3BlYyA9IG51bGw7Ci0JCQotCQlpZiAoaXRlbSBpbnN0YW5jZW9mIENvbXBvbmVudFNwZWNpZmljYXRpb24pIHsKLQkJCXNwZWMgPSAoQ29tcG9uZW50U3BlY2lmaWNhdGlvbikgaXRlbTsKLQkJCUNvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIG1hbmFnZXIgPSBnZXRDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcigpOwotCQkJbWFuYWdlci5tb2RpZnlDb21wb25lbnRSZWZlcmVuY2UoKElFbmRQb2ludCkgZ2V0TW9kZWwoKSwgc3BlYyk7Ci0JCX0KLQkJZWxzZSBpZiAoaXRlbSBpbnN0YW5jZW9mIFN0cmluZykgewotCQkJaWYgKGl0ZW0uZXF1YWxzKEJST1dTRV9TVFJJTkcpKSB7Ci0JCQkJSVdvcmtiZW5jaFBhcnQgcGFydCA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZVBhcnQoKTsKLQkJCQlBU0RTZXRFeGlzdGluZ0JpbmRpbmdBY3Rpb24gYWN0aW9uID0gbmV3IEFTRFNldEV4aXN0aW5nQmluZGluZ0FjdGlvbihwYXJ0KTsKLQkJCQlhY3Rpb24uc2V0SUVuZFBvaW50KChJRW5kUG9pbnQpIGdldE1vZGVsKCkpOwotCQkJCWFjdGlvbi5ydW4oKTsKLQkJCX0KLQkJCWVsc2UgaWYgKGl0ZW0uZXF1YWxzKE5FV19TVFJJTkcpKSB7Ci0JCQkJSVdvcmtiZW5jaFBhcnQgcGFydCA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZVBhcnQoKTsKLQkJCQlBU0RTZXROZXdCaW5kaW5nQWN0aW9uIGFjdGlvbiA9IG5ldyBBU0RTZXROZXdCaW5kaW5nQWN0aW9uKHBhcnQpOwotCQkJCWFjdGlvbi5zZXRJRW5kUG9pbnQoKElFbmRQb2ludCkgZ2V0TW9kZWwoKSk7Ci0JCQkJYWN0aW9uLnJ1bigpOwotCQkJfQotCQl9Ci0JCQotCQlyZWZyZXNoKCk7Ci0JfQotCQotICBwdWJsaWMgYm9vbGVhbiBzaG91bGRVc2VFeHRyYVNwYWNlKCkKLSAgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGRvSGFuZGxlRXZlbnQoRXZlbnQgZXZlbnQpCi0gIHsKLQkgIGlmIChldmVudC53aWRnZXQgPT0gYWRkcmVzc1RleHQgJiYgIWFkZHJlc3NUZXh0LmlzRGlzcG9zZWQoKSkgewotCQkgIFN0cmluZyBuZXdBZGRyZXNzID0gYWRkcmVzc1RleHQuZ2V0VGV4dCgpOwotCQkgIGlmIChuZXdBZGRyZXNzID09IG51bGwpIHsKLQkJCSAgbmV3QWRkcmVzcyA9ICIiOyAvLyROT04tTkxTLTEkCi0JCSAgfQotCQkgIAotCQkgIFN0cmluZyBvbGRBZGRyZXNzID0gZ2V0T2xkQWRkcmVzcygpOwotCQkgIGlmIChvbGRBZGRyZXNzLmVxdWFscyhuZXdBZGRyZXNzKSkKLQkJCSAgcmV0dXJuOwotCQkgIAotCQkgIElFbmRQb2ludCBlbmRQb2ludCA9IChJRW5kUG9pbnQpIGdldE1vZGVsKCk7Ci0JCSAgQ29tbWFuZCBjb21tYW5kID0gZW5kUG9pbnQuZ2V0U2V0QWRkcmVzc0NvbW1hbmQobmV3QWRkcmVzcyk7Ci0JCSAgZXhlY3V0ZUNvbW1hbmQoY29tbWFuZCk7Ci0JICB9Ci0JICBlbHNlIGlmIChldmVudC53aWRnZXQgPT0gcHJvdG9jb2xDb21ibyAmJiAhcHJvdG9jb2xDb21iby5pc0Rpc3Bvc2VkKCkpIHsKLQkJICBTdHJpbmcgbmV3UHJvdG9jb2wgPSBwcm90b2NvbENvbWJvLmdldFRleHQoKTsKLQkJICBpZiAobmV3UHJvdG9jb2wgIT0gbnVsbCAmJiBnZXRNb2RlbCgpIGluc3RhbmNlb2YgVzExRW5kUG9pbnQpIHsKLQkJCSAgVzExRW5kUG9pbnQgZW5kUG9pbnQgPSAoVzExRW5kUG9pbnQpIGdldE1vZGVsKCk7Ci0JCQkgIGVuZFBvaW50LnNldFByb3RvY29sKG5ld1Byb3RvY29sKTsKLQkJICB9Ci0JICB9Ci0JICBlbHNlIHsKLQkJICBzdXBlci5kb0hhbmRsZUV2ZW50KGV2ZW50KTsKLQkgIH0KLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIGdldE9sZEFkZHJlc3MoKSB7Ci0JICBTdHJpbmcgdmFsdWUgPSBudWxsOwotCSAgaWYgKGdldE1vZGVsKCkgaW5zdGFuY2VvZiBXMTFFbmRQb2ludCkgewotCQkgIHZhbHVlID0gKChXMTFFbmRQb2ludCkgZ2V0TW9kZWwoKSkuZ2V0QWRkcmVzcygpOwotCSAgfQotCi0JICBpZiAodmFsdWUgPT0gbnVsbCkgewotCQkgIHZhbHVlID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkgIH0KLQkgIHJldHVybiB2YWx1ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9wcm9wZXJ0aWVzL3NlY3Rpb25zL0ltcG9ydFNlY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvcHJvcGVydGllcy9zZWN0aW9ucy9JbXBvcnRTZWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1NmFmNDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9wcm9wZXJ0aWVzL3NlY3Rpb25zL0ltcG9ydFNlY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLnByb3BlcnRpZXMuc2VjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5JRGlhbG9nQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1BdHRhY2htZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybURhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklGaWxlRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLnRhYmJlZC5JVGFiYmVkUHJvcGVydHlDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy50YWJiZWQuVGFiYmVkUHJvcGVydHlTaGVldFdpZGdldEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5pbnRlcm5hbC5kaWFsb2dzLlNlbGVjdFNpbmdsZUZpbGVEaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5JbXBvcnRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExSW1wb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklJbXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5Db21wb25lbnRSZWZlcmVuY2VVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuV1NETEVkaXRvclV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgSW1wb3J0U2VjdGlvbiBleHRlbmRzIEFTREFic3RyYWN0U2VjdGlvbgotewotCXByb3RlY3RlZCBUZXh0IG5hbWVzcGFjZVRleHQsIHByZWZpeFRleHQsIGxvY2F0aW9uVGV4dDsKLQlwcml2YXRlIFN0cmluZyBvbGRQcmVmaXhWYWx1ZTsKLQlCdXR0b24gYnV0dG9uOwotCS8vIFRPRE86IFJlbW92ZTogSUVkaXRvclBhcnQgZWRpdG9yUGFydAotCUlFZGl0b3JQYXJ0IGVkaXRvclBhcnQ7Ci0KLQkvKioKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkucHJvcGVydGllcy5pbnRlcm5hbC5wcm92aXNpb25hbC5JVGFiYmVkUHJvcGVydHlTZWN0aW9uI2NyZWF0ZUNvbnRyb2xzKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSwgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5wcm9wZXJ0aWVzLmludGVybmFsLnByb3Zpc2lvbmFsLlRhYmJlZFByb3BlcnR5U2hlZXRXaWRnZXRGYWN0b3J5KQotCSAqLwotCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2xzKENvbXBvc2l0ZSBwYXJlbnQsIFRhYmJlZFByb3BlcnR5U2hlZXRXaWRnZXRGYWN0b3J5IGZhY3RvcnkpCi0JewotCQlzdXBlci5jcmVhdGVDb250cm9scyhwYXJlbnQsIGZhY3RvcnkpOwotCQlDb21wb3NpdGUgY29tcG9zaXRlID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZUZsYXRGb3JtQ29tcG9zaXRlKHBhcmVudCk7Ci0JCUZvcm1EYXRhIGRhdGE7Ci0KLQkJbmFtZXNwYWNlVGV4dCA9IGdldFdpZGdldEZhY3RvcnkoKS5jcmVhdGVUZXh0KGNvbXBvc2l0ZSwgIiIpOyAvLyROT04tTkxTLTEkCi0JCW5hbWVzcGFjZVRleHQuc2V0RWRpdGFibGUoZmFsc2UpOwotLy8JCW5hbWVzcGFjZVRleHQuYWRkTGlzdGVuZXIoU1dULk1vZGlmeSwgdGhpcyk7Ci0JCWRhdGEgPSBuZXcgRm9ybURhdGEoKTsKLQkJZGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDEwMCk7Ci0JCWRhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAtcmlnaHRNYXJnaW5TcGFjZSAtIElUYWJiZWRQcm9wZXJ0eUNvbnN0YW50cy5IU1BBQ0UpOwotCQlkYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKLQkJbmFtZXNwYWNlVGV4dC5zZXRMYXlvdXREYXRhKGRhdGEpOwotCi0JCUNMYWJlbCBuYW1lc3BhY2VMYWJlbCA9IGdldFdpZGdldEZhY3RvcnkoKS5jcmVhdGVDTGFiZWwoY29tcG9zaXRlLCBNZXNzYWdlcy5fVUlfTEFCRUxfTkFNRVNQQUNFKTsgLy8kTk9OLU5MUy0xJAotCQlkYXRhID0gbmV3IEZvcm1EYXRhKCk7Ci0JCWRhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKLQkJZGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudChuYW1lc3BhY2VUZXh0LCAtSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLkhTUEFDRSk7Ci0JCWRhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KG5hbWVzcGFjZVRleHQsIDAsIFNXVC5DRU5URVIpOwotCQluYW1lc3BhY2VMYWJlbC5zZXRMYXlvdXREYXRhKGRhdGEpOwotCi0JCXByZWZpeFRleHQgPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlVGV4dChjb21wb3NpdGUsICIiKTsgLy8kTk9OLU5MUy0xJAotLy8JCXByZWZpeFRleHQuc2V0RWRpdGFibGUoZmFsc2UpOwotCQlhcHBseVRleHRMaXN0ZW5lcnMocHJlZml4VGV4dCk7Ci0JCWRhdGEgPSBuZXcgRm9ybURhdGEoKTsKLQkJZGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDEwMCk7Ci0JCWRhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAtcmlnaHRNYXJnaW5TcGFjZSAtIElUYWJiZWRQcm9wZXJ0eUNvbnN0YW50cy5IU1BBQ0UpOwotCQlkYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChuYW1lc3BhY2VUZXh0LCArSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLlZTUEFDRSk7Ci0JCXByZWZpeFRleHQuc2V0TGF5b3V0RGF0YShkYXRhKTsKLQotCQlDTGFiZWwgcHJlZml4TGFiZWwgPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlQ0xhYmVsKGNvbXBvc2l0ZSwgTWVzc2FnZXMuX1VJX0xBQkVMX1BSRUZJWCk7IC8vJE5PTi1OTFMtMSQKLQkJZGF0YSA9IG5ldyBGb3JtRGF0YSgpOwotCQlkYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7Ci0JCWRhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQocHJlZml4VGV4dCwgLUlUYWJiZWRQcm9wZXJ0eUNvbnN0YW50cy5IU1BBQ0UpOwotCQlkYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChwcmVmaXhUZXh0LCAwLCBTV1QuQ0VOVEVSKTsKLQkJcHJlZml4TGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsKLQotCQlsb2NhdGlvblRleHQgPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlVGV4dChjb21wb3NpdGUsICIiKTsgLy8kTk9OLU5MUy0xJAotCQlsb2NhdGlvblRleHQuc2V0RWRpdGFibGUoZmFsc2UpOwotLy8JCWxvY2F0aW9uVGV4dC5hZGRMaXN0ZW5lcihTV1QuTW9kaWZ5LCB0aGlzKTsKLQotCQlDTGFiZWwgbG9jYXRpb25MYWJlbCA9IGdldFdpZGdldEZhY3RvcnkoKS5jcmVhdGVDTGFiZWwoY29tcG9zaXRlLCBNZXNzYWdlcy5fVUlfTEFCRUxfTE9DQVRJT04pOyAvLyROT04tTkxTLTEkCi0JCWRhdGEgPSBuZXcgRm9ybURhdGEoKTsKLQkJZGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOwotCQlkYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KGxvY2F0aW9uVGV4dCwgLUlUYWJiZWRQcm9wZXJ0eUNvbnN0YW50cy5IU1BBQ0UpOwotCQlkYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChsb2NhdGlvblRleHQsIDAsIFNXVC5DRU5URVIpOwotCQlsb2NhdGlvbkxhYmVsLnNldExheW91dERhdGEoZGF0YSk7Ci0KLQkJYnV0dG9uID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZUJ1dHRvbihjb21wb3NpdGUsICIiLCBTV1QuUFVTSCk7IC8vJE5PTi1OTFMtMSQKLQkJYnV0dG9uLnNldEltYWdlKFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgiaWNvbnMvYnJvd3NlYnV0dG9uLmdpZiIpKTsgLy8kTk9OLU5MUy0xJAotCi0JCWJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKLQkJZGF0YSA9IG5ldyBGb3JtRGF0YSgpOwotCQlkYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAtcmlnaHRNYXJnaW5TcGFjZSArIDIpOwotCQlkYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwwKTsKLQkJZGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQobG9jYXRpb25UZXh0LCAwLCBTV1QuQ0VOVEVSKTsKLQkJYnV0dG9uLnNldExheW91dERhdGEoZGF0YSk7Ci0KLQkJZGF0YSA9IG5ldyBGb3JtRGF0YSgpOwotCQlkYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMTAwKTsKLQkJZGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudChidXR0b24sIDApOwotCQlkYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChwcmVmaXhUZXh0LCArSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLlZTUEFDRSk7Ci0JCWxvY2F0aW9uVGV4dC5zZXRMYXlvdXREYXRhKGRhdGEpOwotCX0KLQotCS8qCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLnByb3BlcnRpZXMuaW50ZXJuYWwucHJvdmlzaW9uYWwudmlldy5JVGFiYmVkUHJvcGVydHlTZWN0aW9uI3JlZnJlc2goKQotCSAqLwotCXB1YmxpYyB2b2lkIHJlZnJlc2goKQotCXsKLQkJc2V0TGlzdGVuZXJFbmFibGVkKGZhbHNlKTsgIAotCQlPYmplY3Qgb2JqID0gZ2V0TW9kZWwoKTsKLQkJYm9vbGVhbiByZWZyZXNoUHJlZml4VGV4dCA9IHRydWU7Ci0JCWJvb2xlYW4gcmVmcmVzaExvY2F0aW9uVGV4dCA9IHRydWU7Ci0JCWJvb2xlYW4gcmVmcmVzaE5hbWVzcGFjZVRleHQgPSB0cnVlOwotCQlpZiAocHJlZml4VGV4dC5pc0ZvY3VzQ29udHJvbCgpKQotCQl7Ci0JCQlyZWZyZXNoUHJlZml4VGV4dCA9IGZhbHNlOwotCQl9Ci0JCWlmIChsb2NhdGlvblRleHQuaXNGb2N1c0NvbnRyb2woKSkKLQkJewotCQkJcmVmcmVzaExvY2F0aW9uVGV4dCA9IGZhbHNlOwotCQl9Ci0JCWlmIChuYW1lc3BhY2VUZXh0LmlzRm9jdXNDb250cm9sKCkpCi0JCXsKLQkJCXJlZnJlc2hOYW1lc3BhY2VUZXh0ID0gZmFsc2U7Ci0JCX0KLQotCQlpZiAocmVmcmVzaFByZWZpeFRleHQpCi0JCXsKLQkJCXByZWZpeFRleHQuc2V0VGV4dCgiIik7IC8vJE5PTi1OTFMtMSQKLQkJfQotCQlpZiAocmVmcmVzaExvY2F0aW9uVGV4dCkKLQkJewotCQkJbG9jYXRpb25UZXh0LnNldFRleHQoIiIpOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJaWYgKHJlZnJlc2hOYW1lc3BhY2VUZXh0KQotCQl7Ci0JCQluYW1lc3BhY2VUZXh0LnNldFRleHQoIiIpOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJaWYgKG9iaiBpbnN0YW5jZW9mIElJbXBvcnQpCi0JCXsKLQkJCUlJbXBvcnQgdGhlSW1wb3J0ID0gKElJbXBvcnQpIG9iajsKLQkJCWlmIChyZWZyZXNoTG9jYXRpb25UZXh0KQotCQkJewotCQkJCVN0cmluZyBsb2NhdGlvblZhbHVlID0gdGhlSW1wb3J0LmdldExvY2F0aW9uKCk7IAotCQkJCWxvY2F0aW9uVGV4dC5zZXRUZXh0KGxvY2F0aW9uVmFsdWUgIT0gbnVsbCA/IGxvY2F0aW9uVmFsdWUgOiAiIik7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQotCQkJU3RyaW5nIG5hbWVzcGFjZVZhbHVlID0gdGhlSW1wb3J0LmdldE5hbWVzcGFjZSgpOwotCQkJaWYgKHJlZnJlc2hOYW1lc3BhY2VUZXh0KQotCQkJewotCQkJCW5hbWVzcGFjZVRleHQuc2V0VGV4dChuYW1lc3BhY2VWYWx1ZSAhPSBudWxsID8gbmFtZXNwYWNlVmFsdWUgOiAiIik7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQotCQkJaWYgKHJlZnJlc2hQcmVmaXhUZXh0KQotCQkJewotCQkJCVN0cmluZyBwcmVmaXggPSB0aGVJbXBvcnQuZ2V0TmFtZXNwYWNlUHJlZml4KCk7Ci0JCQkJcHJlZml4VGV4dC5zZXRUZXh0KHByZWZpeCAhPSBudWxsID8gcHJlZml4IDogIiIpOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0JCX0KLQkJb2xkUHJlZml4VmFsdWUgPSBwcmVmaXhUZXh0LmdldFRleHQoKTsKLQkJc2V0TGlzdGVuZXJFbmFibGVkKHRydWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIGRvSGFuZGxlRXZlbnQoRXZlbnQgZXZlbnQpIHsKLQkJLy8gVE9ETzogV2UgaGF2ZSBzb21lIFdTREwxMSBJbXBsIHNwZWNpZmljIGtub3dsZWRnZSBiZWxvdy4uLiBXZSBzaG91bGQgdHJ5IHRvIHJlbW92ZSB0aGlzLi4uCi0JCWlmIChldmVudC53aWRnZXQgPT0gcHJlZml4VGV4dCAmJiBsb2NhdGlvblRleHQuZ2V0VGV4dCgpLmxlbmd0aCgpID4gMCAmJiBuYW1lc3BhY2VUZXh0LmdldFRleHQoKS5sZW5ndGgoKSA+IDAgJiYgZ2V0TW9kZWwoKSBpbnN0YW5jZW9mIFcxMUltcG9ydCkgewotCQkJaWYgKG9sZFByZWZpeFZhbHVlLmVxdWFscyhwcmVmaXhUZXh0LmdldFRleHQoKSkpCi0JCQkgIHJldHVybjsKLQkJCQotCQkJVzExSW1wb3J0IHcxMUltcG9ydCA9IChXMTFJbXBvcnQpIGdldE1vZGVsKCk7Ci0JCQlJbXBvcnQgaW1wb3J0T2JqID0gKEltcG9ydCkgdzExSW1wb3J0LmdldFRhcmdldCgpOwotLy8JCQlvcmcudzNjLmRvbS5FbGVtZW50IGltcG9ydEVsZW1lbnQgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldEVsZW1lbnRGb3JPYmplY3QoaW1wb3J0T2JqKTsKLQkJCU1hcCBuYW1lc3BhY2VzTWFwID0gaW1wb3J0T2JqLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKS5nZXROYW1lc3BhY2VzKCk7Ci0KLQkJCWlmIChuYW1lc3BhY2VzTWFwLmNvbnRhaW5zS2V5KHByZWZpeFRleHQuZ2V0VGV4dCgpKSkgewotCQkJCS8vIFdlIHNob3VsZCBhZGQgZXJyb3IgbWVzc2FnZXMuLi4uLi4uLi4KLQkJCQkvLyAgICAgICAgICAgc2V0RXJyb3JNZXNzYWdlKFhTREVkaXRvclBsdWdpbi5nZXRYU0RTdHJpbmcoIl9FUlJPUl9MQUJFTF9QUkVGSVhfRVhJU1RTIikpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJRWxlbWVudCBkZWZpbml0aW9uRWxlbWVudCA9IGltcG9ydE9iai5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCkuZ2V0RWxlbWVudCgpOwotCQkJCWRlZmluaXRpb25FbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgieG1sbnM6IitvbGRQcmVmaXhWYWx1ZSk7IC8vJE5PTi1OTFMtMSQKLQkJCQlkZWZpbml0aW9uRWxlbWVudC5zZXRBdHRyaWJ1dGUoInhtbG5zOiIgKyBwcmVmaXhUZXh0LmdldFRleHQoKSwgbmFtZXNwYWNlVGV4dC5nZXRUZXh0KCkpOyAvLyROT04tTkxTLTEkCi0KLS8vCQkJCWNsZWFyRXJyb3JNZXNzYWdlKCk7Ci0JCQkJb2xkUHJlZml4VmFsdWUgPSBwcmVmaXhUZXh0LmdldFRleHQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0JewotCQkvLyBUT0RPOiBXZSBoYXZlIHNvbWUgV1NETDExIEltcGwgc3BlY2lmaWMga25vd2xlZGdlIGJlbG93Li4uIFdlIHNob3VsZCB0cnkgdG8gcmVtb3ZlIHRoaXMuLi4KLQkJaWYgKGUud2lkZ2V0ID09IGJ1dHRvbiAmJiBnZXRNb2RlbCgpIGluc3RhbmNlb2YgVzExSW1wb3J0KQotCQl7Ci0JCQlXMTFJbXBvcnQgdzExSW1wb3J0ID0gKFcxMUltcG9ydCkgZ2V0TW9kZWwoKTsKLQotCQkJSUVkaXRvclBhcnQgZWRpdG9yID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCQlJRmlsZSBjdXJyZW50V1NETEZpbGUgPSAoKElGaWxlRWRpdG9ySW5wdXQpIGVkaXRvci5nZXRFZGl0b3JJbnB1dCgpKS5nZXRGaWxlKCk7Ci0KLQkJCVNlbGVjdFNpbmdsZUZpbGVEaWFsb2cgZGlhbG9nID0gbmV3IFNlbGVjdFNpbmdsZUZpbGVEaWFsb2coV1NETEVkaXRvclBsdWdpbi5nZXRTaGVsbCgpLCBudWxsLCB0cnVlKTsKLQkJCVN0cmluZyBbXSBmaWx0ZXJzID0geyAieHNkIiwgIndzZGwiIH07IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJSUZpbGUgW10gZXhjbHVkZWRGaWxlcyA9IHsgY3VycmVudFdTRExGaWxlIH07Ci0KLQkJCWRpYWxvZy5hZGRGaWx0ZXJFeHRlbnNpb25zKGZpbHRlcnMsIGV4Y2x1ZGVkRmlsZXMpOwotCQkJZGlhbG9nLmNyZWF0ZSgpOwotCQkJZGlhbG9nLmdldFNoZWxsKCkuc2V0VGV4dChvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5NZXNzYWdlcy5fVUlfVElUTEVfU0VMRUNUKTsgLy8kTk9OLU5MUy0xJAotCQkJZGlhbG9nLnNldFRpdGxlKG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzLl9VSV9USVRMRV9TRUxFQ1RfRklMRSk7IC8vJE5PTi1OTFMtMSQKLQkJCWRpYWxvZy5zZXRNZXNzYWdlKG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLk1lc3NhZ2VzLl9VSV9ERVNDUklQVElPTl9TRUxFQ1RfV1NETF9PUl9YU0QpOyAvLyROT04tTkxTLTEkCi0JCQlpbnQgcmMgPSBkaWFsb2cub3BlbigpOwotCQkJaWYgKHJjID09IElEaWFsb2dDb25zdGFudHMuT0tfSUQpCi0JCQl7Ci0JCQkJSUZpbGUgc2VsZWN0ZWRGaWxlID0gZGlhbG9nLmdldEZpbGUoKTsKLQotCQkJCS8vaWYgKHNlbGVjdGVkRmlsZS5nZXRMb2NhdGlvbigpLnRvT1NTdHJpbmcoKS5lcXVhbHMoY3VycmVudFdTRExGaWxlLmdldExvY2F0aW9uKCkudG9PU1N0cmluZygpKSkKLQkJCQkvL3sKLQkJCQkvLyAgU3lzdGVtLm91dC5wcmludGxuKCJTQU1FIEZJTEU6IiArIGN1cnJlbnRXU0RMRmlsZS5nZXRMb2NhdGlvbigpKTsKLQkJCQkvL30KLQotCQkJCVN0cmluZyBsb2NhdGlvbiA9IENvbXBvbmVudFJlZmVyZW5jZVV0aWwuY29tcHV0ZVJlbGF0aXZlVVJJKHNlbGVjdGVkRmlsZSwgY3VycmVudFdTRExGaWxlLCB0cnVlKTsKLQotCQkJCUltcG9ydCBpbXBvcnRPYmogPSAoSW1wb3J0KSB3MTFJbXBvcnQuZ2V0VGFyZ2V0KCk7Ci0vLwkJCQlvcmcudzNjLmRvbS5FbGVtZW50IGltcG9ydEVsZW1lbnQgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldEVsZW1lbnRGb3JPYmplY3QoaW1wb3J0T2JqKTsKLQkJCQlEZWZpbml0aW9uIGRlZmluaXRpb24gPSBpbXBvcnRPYmouZ2V0RW5jbG9zaW5nRGVmaW5pdGlvbigpOwotCQkJCW9yZy53M2MuZG9tLkVsZW1lbnQgZGVmaW5pdGlvbkVsZW1lbnQgPSBXU0RMRWRpdG9yVXRpbC5nZXRJbnN0YW5jZSgpLmdldEVsZW1lbnRGb3JPYmplY3QoZGVmaW5pdGlvbik7Ci0KLQkJCQlTdHJpbmcgaW1wb3J0VGFyZ2V0TmFtZXNwYWNlID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJCQlTdHJpbmcgcHJlZml4ID0gcHJlZml4VGV4dC5nZXRUZXh0KCk7Ci0JCQkJU3RyaW5nIHVuaXF1ZVByZWZpeCA9ICIiOyAvLyROT04tTkxTLTEkCi0KLQkJCQlVUkkgdXJpID0gVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkoc2VsZWN0ZWRGaWxlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSk7ICAgICAgCi0KLQkJCQkvLyBub3RlIHRoYXQgdGhlIGdldFRhcmdldE5hbWVzcGFjZVVSSUZvclNjaGVtYSB3b3JrcyBmb3IgYm90aCBzY2hlbWEgYW5kIHdzZGwgZmlsZXMKLQkJCQkvLyBJIHNob3VsZCBjaGFuZ2UgdGhlIG5hbWUgb2YgdGhpcyBjb252ZW5pZW5jZSBtZXRob2QKLQkJCQlpbXBvcnRUYXJnZXROYW1lc3BhY2UgPSAgV1NETEVkaXRvclV0aWwuZ2V0VGFyZ2V0TmFtZXNwYWNlVVJJRm9yU2NoZW1hKHVyaS50b1N0cmluZygpKTsKLQotCQkJCWlmIChwcmVmaXgudHJpbSgpLmVxdWFscygiIikpIC8vJE5PTi1OTFMtMSQKLQkJCQl7Ci0JCQkJCXVuaXF1ZVByZWZpeCA9IGdldFVuaXF1ZVByZWZpeChkZWZpbml0aW9uLCB1cmkuZmlsZUV4dGVuc2lvbigpKTsKLQkJCQl9Ci0JCQkJZWxzZQotCQkJCXsKLQkJCQkJdW5pcXVlUHJlZml4ID0gcHJlZml4OyAKLQkJCQl9Ci0KLQotCQkJCWlmIChpbXBvcnRUYXJnZXROYW1lc3BhY2UgPT0gbnVsbCB8fAotCQkJCQkJKGltcG9ydFRhcmdldE5hbWVzcGFjZSAhPSBudWxsICYmIGltcG9ydFRhcmdldE5hbWVzcGFjZS50cmltKCkubGVuZ3RoKCkgPT0gMCkpCi0JCQkJewotCQkJCQlyZXR1cm47ICAvLyB3aGF0IHRvIGRvIHdpdGggbm8gbmFtZXNwYWNlIGRvY3M/Ci0JCQkJfQotCi0JCQkJaW1wb3J0T2JqLnNldExvY2F0aW9uVVJJKGxvY2F0aW9uKTsKLQkJCQlpbXBvcnRPYmouc2V0TmFtZXNwYWNlVVJJKGltcG9ydFRhcmdldE5hbWVzcGFjZSk7Ci0JCQkJKChJbXBvcnRJbXBsKSBpbXBvcnRPYmopLmltcG9ydERlZmluaXRpb25PclNjaGVtYSgpOwotCi0JCQkJZGVmaW5pdGlvbkVsZW1lbnQuc2V0QXR0cmlidXRlKCJ4bWxuczoiICsgdW5pcXVlUHJlZml4LCBpbXBvcnRUYXJnZXROYW1lc3BhY2UpOyAvLyROT04tTkxTLTEkCi0KLQkJCQluYW1lc3BhY2VUZXh0LnNldFRleHQoaW1wb3J0VGFyZ2V0TmFtZXNwYWNlKTsKLQkJCQlsb2NhdGlvblRleHQuc2V0VGV4dChsb2NhdGlvbik7Ci0JCQkJcHJlZml4VGV4dC5zZXRUZXh0KHVuaXF1ZVByZWZpeCk7Ci0JCQl9Ci0JCQlyZWZyZXNoKCk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBnZXRVbmlxdWVQcmVmaXgoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBTdHJpbmcgaW5pdFByZWZpeCkKLQl7Ci0JCVN0cmluZyB1bmlxdWVQcmVmaXg7Ci0JCU1hcCBtYXAgPSBkZWZpbml0aW9uLmdldE5hbWVzcGFjZXMoKTsKLQotCQlpZiAoZGVmaW5pdGlvbi5nZXROYW1lc3BhY2UoaW5pdFByZWZpeCkgPT0gbnVsbCkKLQkJewotCQkJdW5pcXVlUHJlZml4ID0gaW5pdFByZWZpeDsKLQkJfQotCQllbHNlIC8vIGlmIHVzZWQsIHRoZW4gdHJ5IHRvIGNyZWF0ZSBhIHVuaXF1ZSBvbmUKLQkJewotCQkJU3RyaW5nIHRlbXBQcmVmaXggPSBpbml0UHJlZml4OwotCQkJaW50IGkgPSAxOwotCQkJd2hpbGUobWFwLmNvbnRhaW5zS2V5KHRlbXBQcmVmaXggKyBpKSkKLQkJCXsKLQkJCQlpKys7Ci0JCQl9Ci0JCQl1bmlxdWVQcmVmaXggPSB0ZW1wUHJlZml4ICsgaTsKLQkJfQotCQlyZXR1cm4gdW5pcXVlUHJlZml4OyAgICAKLQl9Ci0KLQkvLyBUT0RPOiBSZW1vdmUgbWV0b2Qgc2V0RWRpdG9yUGFydCgpIGJlbG93Ci0JcHVibGljIHZvaWQgc2V0RWRpdG9yUGFydChJRWRpdG9yUGFydCBlZGl0b3JQYXJ0KQotCXsKLQkJdGhpcy5lZGl0b3JQYXJ0ID0gZWRpdG9yUGFydDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3Byb3BlcnRpZXMvc2VjdGlvbnMvTmFtZVNlY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvcHJvcGVydGllcy9zZWN0aW9ucy9OYW1lU2VjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZmFhNDFmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvcHJvcGVydGllcy9zZWN0aW9ucy9OYW1lU2VjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QucHJvcGVydGllcy5zZWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNMYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1BdHRhY2htZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybURhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5mb3Jtcy5ldmVudHMuSHlwZXJsaW5rRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZm9ybXMuZXZlbnRzLklIeXBlcmxpbmtMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5mb3Jtcy53aWRnZXRzLkltYWdlSHlwZXJsaW5rOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMudGFiYmVkLklUYWJiZWRQcm9wZXJ0eUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLnRhYmJlZC5UYWJiZWRQcm9wZXJ0eVNoZWV0V2lkZ2V0RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLklTZWxlY3Rpb25NYXBwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuV1NETEVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yQ1NIZWxwSWRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklCaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUludGVyZmFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklNZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSU5hbWVkT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnJlZmFjdG9yLmFjdGlvbnMuUmVuYW1lQ29tcG9uZW50QWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgTmFtZVNlY3Rpb24gZXh0ZW5kcyBBU0RBYnN0cmFjdFNlY3Rpb24gaW1wbGVtZW50cyBJSHlwZXJsaW5rTGlzdGVuZXIgewotCUNMYWJlbCBuYW1lTGFiZWw7Ci0JcHJvdGVjdGVkIFRleHQgbmFtZVRleHQ7Ci0gIC8qKgotICAgKiBDbGlja2luZyBvbiBpdCBpbnZva2VzIHRoZSByZWZhY3Rvci0+cmVuYW1lIGFjdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCBJbWFnZUh5cGVybGluayByZW5hbWVIeXBlcmxpbms7Ci0JCi0JLyoqCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLnByb3BlcnRpZXMuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVRhYmJlZFByb3BlcnR5U2VjdGlvbiNjcmVhdGVDb250cm9scyhvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUsIG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkucHJvcGVydGllcy5pbnRlcm5hbC5wcm92aXNpb25hbC5UYWJiZWRQcm9wZXJ0eVNoZWV0V2lkZ2V0RmFjdG9yeSkKLQkgKi8KLQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9scyhDb21wb3NpdGUgcGFyZW50LCBUYWJiZWRQcm9wZXJ0eVNoZWV0V2lkZ2V0RmFjdG9yeSBmYWN0b3J5KQotCXsKLQkJc3VwZXIuY3JlYXRlQ29udHJvbHMocGFyZW50LCBmYWN0b3J5KTsKLQotCQljb21wb3NpdGUgPQlnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlRmxhdEZvcm1Db21wb3NpdGUocGFyZW50KTsKLQkJCi0JCUZvcm1EYXRhIGRhdGE7CQkKLSAgICAKLQkJbmFtZVRleHQgPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlVGV4dChjb21wb3NpdGUsICIiKTsgLy8kTk9OLU5MUy0xJAotCQlkYXRhID0gbmV3IEZvcm1EYXRhKCk7Ci0JCWRhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAxMDApOwotCQlkYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgLXJpZ2h0TWFyZ2luU3BhY2UpOwotCQlkYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKLQkJbmFtZVRleHQuc2V0TGF5b3V0RGF0YShkYXRhKTsKLQkJUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChuYW1lVGV4dCwgQVNERWRpdG9yQ1NIZWxwSWRzLlBST1BFUlRJRVNfTkFNRV9URVhUKTsKLQotCQluYW1lTGFiZWwgPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlQ0xhYmVsKGNvbXBvc2l0ZSwgTWVzc2FnZXMuX1VJX0xBQkVMX05BTUUgKyAiOiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJZGF0YSA9IG5ldyBGb3JtRGF0YSgpOwotCQlkYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7Ci0JCWRhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQobmFtZVRleHQsIC1JVGFiYmVkUHJvcGVydHlDb25zdGFudHMuSFNQQUNFKTsKLQkJZGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQobmFtZVRleHQsIDAsIFNXVC5DRU5URVIpOwotCQluYW1lTGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsKLQkJYXBwbHlUZXh0TGlzdGVuZXJzKG5hbWVUZXh0KTsKLQl9Ci0JCi0gIHByaXZhdGUgdm9pZCBzaG93UmVmYWN0b3JCdXR0b24oKSB7Ci0gICAgaWYgKGlzUmVhZE9ubHkpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgICAKLSAgICBpZiAocmVuYW1lSHlwZXJsaW5rID09IG51bGwpIHsKLSAgICAgIHJlbmFtZUh5cGVybGluayA9IGdldFdpZGdldEZhY3RvcnkoKS5jcmVhdGVJbWFnZUh5cGVybGluayhjb21wb3NpdGUsIFNXVC5OT05FKTsKLQotICAgICAgcmVuYW1lSHlwZXJsaW5rLnNldEltYWdlKFdTRExFZGl0b3JQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgiaWNvbnMvcXVpY2thc3Npc3QuZ2lmIikpOyAvLyROT04tTkxTLTEkCi0gICAgICByZW5hbWVIeXBlcmxpbmsuc2V0VG9vbFRpcFRleHQoTWVzc2FnZXMuX1VJX1RPT0xUSVBfUkVOQU1FX1JFRkFDVE9SKTsKLSAgICAgIHJlbmFtZUh5cGVybGluay5hZGRIeXBlcmxpbmtMaXN0ZW5lcih0aGlzKTsKLSAgICB9Ci0KLSAgICBGb3JtRGF0YSBkYXRhID0gbmV3IEZvcm1EYXRhKCk7Ci0gICAgZGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIC1yaWdodE1hcmdpblNwYWNlKTsKLSAgICBkYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKLSAgICByZW5hbWVIeXBlcmxpbmsuc2V0TGF5b3V0RGF0YShkYXRhKTsKLSAgICAKLSAgICBkYXRhID0gKEZvcm1EYXRhKSBuYW1lVGV4dC5nZXRMYXlvdXREYXRhKCk7IAotICAgIEZvcm1BdHRhY2htZW50IHJpZ2h0ID0gZGF0YS5yaWdodDsKLSAgICByaWdodC5jb250cm9sID0gcmVuYW1lSHlwZXJsaW5rOwotICAgIHJpZ2h0Lm9mZnNldCA9IC1JVGFiYmVkUHJvcGVydHlDb25zdGFudHMuSFNQQUNFOwotICAgIHJpZ2h0LmFsaWdubWVudCA9IFNXVC5MRUZUOwotICAgIGRhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KHJlbmFtZUh5cGVybGluaywgMCwgU1dULkNFTlRFUik7Ci0gICAgcmVuYW1lSHlwZXJsaW5rLnNldFZpc2libGUodHJ1ZSk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBoaWRlUmVmYWN0b3JCdXR0b24oKSB7Ci0gICAgaWYgKGlzUmVhZE9ubHkpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAocmVuYW1lSHlwZXJsaW5rID09IG51bGwpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgRm9ybURhdGEgZGF0YSA9IChGb3JtRGF0YSkgbmFtZVRleHQuZ2V0TGF5b3V0RGF0YSgpOwotICAgIEZvcm1BdHRhY2htZW50IHJpZ2h0ID0gZGF0YS5yaWdodDsKLSAgICByaWdodC5jb250cm9sID0gbnVsbDsKLSAgICByaWdodC5udW1lcmF0b3IgPSAxMDA7Ci0gICAgcmlnaHQub2Zmc2V0ID0gLXJpZ2h0TWFyZ2luU3BhY2U7IAotICAgIGRhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOwotICAgIHJlbmFtZUh5cGVybGluay5zZXRWaXNpYmxlKGZhbHNlKTsKLSAgfQotICAKLSAgCi0JLyoKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkucHJvcGVydGllcy5pbnRlcm5hbC5wcm92aXNpb25hbC52aWV3LklUYWJiZWRQcm9wZXJ0eVNlY3Rpb24jcmVmcmVzaCgpCi0JICovCi0JcHVibGljIHZvaWQgcmVmcmVzaCgpIHsKLQkJc3VwZXIucmVmcmVzaCgpOwotCQlpZiAobmFtZVRleHQuaXNEaXNwb3NlZCgpIHx8IG5hbWVUZXh0LmlzRm9jdXNDb250cm9sKCkpIHsKLQkJCXJldHVybjsKLQkJfQotCQkKLQkJc2V0TGlzdGVuZXJFbmFibGVkKGZhbHNlKTsKLQkJU3RyaW5nIG5hbWUgPSBudWxsOwotCQlpZiAoZ2V0TW9kZWwoKSBpbnN0YW5jZW9mIElOYW1lZE9iamVjdCkgewotCQkJbmFtZSA9ICgoSU5hbWVkT2JqZWN0KSBnZXRNb2RlbCgpKS5nZXROYW1lKCk7Ci0JCX0KLQkJZWxzZSBpZiAoZ2V0TW9kZWwoKSBpbnN0YW5jZW9mIEVkaXRQYXJ0KSB7Ci0JCQlPYmplY3QgbW9kZWwgPSAoKEVkaXRQYXJ0KSBnZXRNb2RlbCgpKS5nZXRNb2RlbCgpOyAKLQkJCW5hbWUgPSAoKElOYW1lZE9iamVjdCkgbW9kZWwpLmdldE5hbWUoKTsKLQkJfQotCQkKLQkJaWYgKG5hbWUgPT0gbnVsbCkgewotCQkJbmFtZSA9ICIiOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJCi0JCW5hbWVUZXh0LnNldFRleHQobmFtZSk7Ci0JCXNldENvbnRyb2xGb3JlZ3JvdW5kQ29sb3IobmFtZVRleHQpOwotICAgIAotICAgIGlmIChjYW5SZWZhY3RvcigpKSB7Ci0gICAgICBzaG93UmVmYWN0b3JCdXR0b24oKTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICBoaWRlUmVmYWN0b3JCdXR0b24oKTsKLSAgICB9Ci0gICAgc2V0TGlzdGVuZXJFbmFibGVkKHRydWUpOwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBzaG91bGRVc2VFeHRyYVNwYWNlKCkKLQl7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgZG9IYW5kbGVFdmVudChFdmVudCBldmVudCkKLQl7Ci0JCWlmIChldmVudC53aWRnZXQgPT0gbmFtZVRleHQgJiYgIW5hbWVUZXh0LmlzRGlzcG9zZWQoKSkgewotCQkJU3RyaW5nIG5ld1ZhbHVlID0gbmFtZVRleHQuZ2V0VGV4dCgpOwotCQkJT2JqZWN0IG1vZGVsID0gZ2V0TW9kZWwoKTsKLQkJCUlOYW1lZE9iamVjdCBuYW1lZE9iamVjdCA9IG51bGw7Ci0JCQkKLQkJCWlmIChtb2RlbCBpbnN0YW5jZW9mIElOYW1lZE9iamVjdCkgewotCQkJCW5hbWVkT2JqZWN0ID0gKElOYW1lZE9iamVjdCkgbW9kZWw7Ci0JCQl9Ci0JCQkKLQkJCWlmIChuYW1lZE9iamVjdCAhPSBudWxsKSB7Ci0JCQkJaWYgKCAhbmV3VmFsdWUuZXF1YWxzKCBuYW1lZE9iamVjdC5nZXROYW1lKCkgKSApewotCQkJCSAgQ29tbWFuZCBjb21tYW5kID0gbmFtZWRPYmplY3QuZ2V0U2V0TmFtZUNvbW1hbmQobmV3VmFsdWUpOwotCQkJCSAgZXhlY3V0ZUNvbW1hbmQoY29tbWFuZCk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotICAKLSAgcHJpdmF0ZSB2b2lkIGludm9rZVJlbmFtZVJlZmFjdG9yaW5nKCkgewotICAgIElFZGl0b3JQYXJ0IGVkaXRvciA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOwotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKWVkaXRvci5nZXRBZGFwdGVyKERlZmluaXRpb24uY2xhc3MpOwotICAgIElTZWxlY3Rpb24gc2VsZWN0aW9uID0gZWRpdG9yLmdldFNpdGUoKS5nZXRTZWxlY3Rpb25Qcm92aWRlcigpLmdldFNlbGVjdGlvbigpOwotICAgIElTZWxlY3Rpb25NYXBwZXIgbWFwcGVyID0gKElTZWxlY3Rpb25NYXBwZXIpIGVkaXRvci5nZXRBZGFwdGVyKElTZWxlY3Rpb25NYXBwZXIuY2xhc3MpOwotICAgIHNlbGVjdGlvbiA9IG1hcHBlciAhPSBudWxsID8gbWFwcGVyLm1hcFNlbGVjdGlvbihzZWxlY3Rpb24pIDogc2VsZWN0aW9uOwotICAgIFJlbmFtZUNvbXBvbmVudEFjdGlvbiBhY3Rpb24gPSBuZXcgUmVuYW1lQ29tcG9uZW50QWN0aW9uKHNlbGVjdGlvbiwgZGVmaW5pdGlvbik7Ci0gICAgYWN0aW9uLnVwZGF0ZShzZWxlY3Rpb24pOwotICAgIGFjdGlvbi5ydW4oKTsKLSAgfQotCi0gIHByaXZhdGUgT2JqZWN0IGdldFJlYWxNb2RlbCgpIHsKLSAgICBPYmplY3QgcmVhbE1vZGVsID0gZ2V0TW9kZWwoKTsKLSAgICAKLSAgICBpZiAocmVhbE1vZGVsIGluc3RhbmNlb2YgRWRpdFBhcnQpIHsKLSAgICAgIHJlYWxNb2RlbCA9ICgoRWRpdFBhcnQpIGdldE1vZGVsKCkpLmdldE1vZGVsKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiByZWFsTW9kZWw7Ci0gIH0KLQotICAvKioKLSAgICogRGV0ZXJtaW5lcyBpZiB0aGUgbW9kZWwgb2JqZWN0J3MgbmFtZSBjYW4gYmUgcmVmYWN0b3JlZC4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBtb2RlbCBvYmplY3QgY2FuIGJlIHJlZmFjdG9yZWQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBjYW5SZWZhY3RvcigpIHsKLSAgICBPYmplY3QgbW9kZWwgPSBnZXRSZWFsTW9kZWwoKTsKLQotICAgIGJvb2xlYW4gY2FuUmVmYWN0b3IgPSBtb2RlbCBpbnN0YW5jZW9mIElNZXNzYWdlIHx8IAotICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbCBpbnN0YW5jZW9mIElCaW5kaW5nIHx8IAotICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbCBpbnN0YW5jZW9mIElJbnRlcmZhY2U7Ci0gICAgcmV0dXJuIGNhblJlZmFjdG9yOwotICB9Ci0gIAotICAvKgotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLmZvcm1zLmV2ZW50cy5JSHlwZXJsaW5rTGlzdGVuZXIjbGlua0FjdGl2YXRlZChvcmcuZWNsaXBzZS51aS5mb3Jtcy5ldmVudHMuSHlwZXJsaW5rRXZlbnQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBsaW5rQWN0aXZhdGVkKEh5cGVybGlua0V2ZW50IGUpCi0gIHsKLSAgICBpbnZva2VSZW5hbWVSZWZhY3RvcmluZygpOwotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiAKLSAgICogQHNlZSBvcmcuZWNsaXBzZS51aS5mb3Jtcy5ldmVudHMuSUh5cGVybGlua0xpc3RlbmVyI2xpbmtFbnRlcmVkKG9yZy5lY2xpcHNlLnVpLmZvcm1zLmV2ZW50cy5IeXBlcmxpbmtFdmVudCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGxpbmtFbnRlcmVkKEh5cGVybGlua0V2ZW50IGUpCi0gIHsKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UudWkuZm9ybXMuZXZlbnRzLklIeXBlcmxpbmtMaXN0ZW5lciNsaW5rRXhpdGVkKG9yZy5lY2xpcHNlLnVpLmZvcm1zLmV2ZW50cy5IeXBlcmxpbmtFdmVudCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGxpbmtFeGl0ZWQoSHlwZXJsaW5rRXZlbnQgZSkKLSAgewotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3Byb3BlcnRpZXMvc2VjdGlvbnMvTmFtZXNwYWNlU2VjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC9wcm9wZXJ0aWVzL3NlY3Rpb25zL05hbWVzcGFjZVNlY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjgzY2Q4Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3Byb3BlcnRpZXMvc2VjdGlvbnMvTmFtZXNwYWNlU2VjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjU5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QucHJvcGVydGllcy5zZWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNMYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5HQzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1BdHRhY2htZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybURhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy50YWJiZWQuSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMudGFiYmVkLlRhYmJlZFByb3BlcnR5U2hlZXRXaWRnZXRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMURlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmNvbW1hbmRzLlcxMUVkaXROYW1lc3BhY2VzQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yQ1NIZWxwSWRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuYWN0aW9ucy5BU0RFZGl0TmFtZXNwYWNlc0FjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLmVkaXRwYXJ0cy5tb2RlbC5BYnN0cmFjdE1vZGVsQ29sbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklOYW1lZE9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2Qub3V0bGluZS5JQ2F0ZWdvcnlBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwubnNlZGl0LkNvbW1vbkVkaXROYW1lc3BhY2VzVGFyZ2V0RmllbGREaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC5uc2VkaXQuQ29tbW9uTmFtZXNwYWNlSW5mb1RhYmxlOwotCi1wdWJsaWMgY2xhc3MgTmFtZXNwYWNlU2VjdGlvbiBleHRlbmRzIEFTREFic3RyYWN0U2VjdGlvbiB7Ci0JcHJvdGVjdGVkIFN0cmluZyB0YXJnZXROYW1lc3BhY2U7Ci0JcHJvdGVjdGVkIExpc3QgbmFtZXNwYWNlSW5mb0xpc3Q7Ci0JcHJvdGVjdGVkIENvbW1vbkVkaXROYW1lc3BhY2VzVGFyZ2V0RmllbGREaWFsb2cgZWRpdFdTRExOYW1lc3BhY2VzQ29udHJvbDsKLQlwcm90ZWN0ZWQgQnV0dG9uIGJ1dHRvbjsKLQkKLQlUZXh0IG5hbWVUZXh0OwotCVRleHQgcHJlZml4VGV4dDsKLQlUZXh0IHRhcmdldE5hbWVzcGFjZVRleHQ7Ci0JcHJvdGVjdGVkIENvbW1vbk5hbWVzcGFjZUluZm9UYWJsZSB0YWJsZVZpZXdlcjsKLQlwcml2YXRlIGJvb2xlYW4gaGFuZGxpbmdFdmVudDsKLQkKLQkvKioKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkucHJvcGVydGllcy5pbnRlcm5hbC5wcm92aXNpb25hbC5JVGFiYmVkUHJvcGVydHlTZWN0aW9uI2NyZWF0ZUNvbnRyb2xzKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSwgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5wcm9wZXJ0aWVzLmludGVybmFsLnByb3Zpc2lvbmFsLlRhYmJlZFByb3BlcnR5U2hlZXRXaWRnZXRGYWN0b3J5KQotCSAqLwotCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2xzKENvbXBvc2l0ZSBwYXJlbnQsIFRhYmJlZFByb3BlcnR5U2hlZXRXaWRnZXRGYWN0b3J5IGZhY3RvcnkpCi0JewotCQlzdXBlci5jcmVhdGVDb250cm9scyhwYXJlbnQsIGZhY3RvcnkpOwotCQljb21wb3NpdGUgPQlnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlRmxhdEZvcm1Db21wb3NpdGUocGFyZW50KTsKLQkJCi0JCVN0cmluZyBuYW1lU3RyaW5nID0gTWVzc2FnZXMuX1VJX0xBQkVMX05BTUUgKyAiOiI7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQlTdHJpbmcgcHJlZml4U3RyaW5nID0gTWVzc2FnZXMuX1VJX0xBQkVMX1BSRUZJWCArICI6IjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCVN0cmluZyBuYW1lc3BhY2VTdHJpbmcgPSBNZXNzYWdlcy5fVUlfTEFCRUxfVEFSR0VUX05BTUVTUEFDRTsgLy8kTk9OLU5MUy0xJAotCQlHQyBnYyA9IG5ldyBHQyhwYXJlbnQpOwotCQlpbnQgeG9mZnNldCA9IE1hdGgubWF4KDExNSwgZ2MudGV4dEV4dGVudChuYW1lU3RyaW5nKS54ICsgMjApOyAvLyBhZGRzIDIwIGR1ZSB0byBib3JkZXJzCi0JCXhvZmZzZXQgPSBNYXRoLm1heCh4b2Zmc2V0LCBnYy50ZXh0RXh0ZW50KHByZWZpeFN0cmluZykueCArIDIwKTsgLy8gYWRkcyAyMCBkdWUgdG8gYm9yZGVycwotCQl4b2Zmc2V0ID0gTWF0aC5tYXgoeG9mZnNldCwgZ2MudGV4dEV4dGVudChuYW1lc3BhY2VTdHJpbmcpLnggKyAyMCk7IC8vIGFkZHMgMjAgZHVlIHRvIGJvcmRlcnMKLQkJZ2MuZGlzcG9zZSgpOwotCQkKLQkJLy8gbmFtZQotCQlDTGFiZWwgbmFtZUxhYmVsID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZUNMYWJlbChjb21wb3NpdGUsIG5hbWVTdHJpbmcpOyAvLyROT04tTkxTLTEkCi0JCW5hbWVUZXh0ID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZVRleHQoY29tcG9zaXRlLCAiIik7IC8vJE5PTi1OTFMtMSQKLQkJUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChuYW1lVGV4dCwgQVNERWRpdG9yQ1NIZWxwSWRzLlBST1BFUlRJRVNfTkFNRV9URVhUKTsKLQkJCi0JCS8vIHByZWZpeAotCQlDTGFiZWwgcHJlZml4TGFiZWwgPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlQ0xhYmVsKGNvbXBvc2l0ZSwgcHJlZml4U3RyaW5nKTsgLy8kTk9OLU5MUy0xJAotCQlwcmVmaXhUZXh0ID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZVRleHQoY29tcG9zaXRlLCAiIik7IC8vJE5PTi1OTFMtMSQKLQkJUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChwcmVmaXhUZXh0LCBBU0RFZGl0b3JDU0hlbHBJZHMuUFJPUEVSVElFU19ERUZfUFJFRklYX1RFWFQpOwotCQkKLQkJLy8gdGFyZ2V0bmFtZXNwYWNlCi0JCUNMYWJlbCB0YXJnZXROYW1lc3BhY2VMYWJlbCA9IGdldFdpZGdldEZhY3RvcnkoKS5jcmVhdGVDTGFiZWwoY29tcG9zaXRlLCBuYW1lc3BhY2VTdHJpbmcpOyAvLyROT04tTkxTLTEkCi0JCXRhcmdldE5hbWVzcGFjZVRleHQgPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlVGV4dChjb21wb3NpdGUsICIiKTsgLy8kTk9OLU5MUy0xJAotCQlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHRhcmdldE5hbWVzcGFjZVRleHQsIEFTREVkaXRvckNTSGVscElkcy5QUk9QRVJUSUVTX0RFRl9UTlNfVEVYVCk7Ci0JCQotCQkvLyBBZHZhbmNlZCBidXR0b24KLQkJYnV0dG9uID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZUJ1dHRvbihjb21wb3NpdGUsIE1lc3NhZ2VzLl9VSV9TRUNUSU9OX0FEVkFOQ0VEX0FUVFJJQlVURVMgKyAiLi4uIiwgU1dULlBVU0gpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJCi0JCQotCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8gTGFiZWxzCi0JCS8vIG5hbWUgbGF5b3V0Ci0JCUZvcm1EYXRhIGRhdGFOYW1lTGFiZWwgPSBuZXcgRm9ybURhdGEoKTsKLQkJZGF0YU5hbWVMYWJlbC50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQobmFtZVRleHQsIDAsIFNXVC5DRU5URVIpOwotCQluYW1lTGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhTmFtZUxhYmVsKTsKLQkJCi0JCS8vIHByZWZpeCBsYXlvdXQKLQkJRm9ybURhdGEgZGF0YVByZWZpeExhYmVsID0gbmV3IEZvcm1EYXRhKCk7Ci0JCWRhdGFQcmVmaXhMYWJlbC5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOwotCQlkYXRhUHJlZml4TGFiZWwudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KHByZWZpeFRleHQsIDAsIFNXVC5DRU5URVIpOwotCQlwcmVmaXhMYWJlbC5zZXRMYXlvdXREYXRhKGRhdGFQcmVmaXhMYWJlbCk7Ci0JCQotCQkvLyB0YXJnZXROYW1lc3BhY2VMYWJlbCBsYXlvdXQKLQkJRm9ybURhdGEgZGF0YXRuc0xhYmVsID0gbmV3IEZvcm1EYXRhKCk7Ci0JCWRhdGF0bnNMYWJlbC5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOwotCQlkYXRhdG5zTGFiZWwucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQodGFyZ2V0TmFtZXNwYWNlVGV4dCwgMCk7Ci0JCWRhdGF0bnNMYWJlbC50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQodGFyZ2V0TmFtZXNwYWNlVGV4dCwgMCwgU1dULkNFTlRFUik7Ci0JCXRhcmdldE5hbWVzcGFjZUxhYmVsLnNldExheW91dERhdGEoZGF0YXRuc0xhYmVsKTsKLQkJCi0JCQotCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8gVGV4dCBGaWVsZHMKLQkJLy8gbmFtZSB0ZXh0IGZpZWxkCi0JCUZvcm1EYXRhIGRhdGFOYW1lVGV4dCA9IG5ldyBGb3JtRGF0YSgpOwotCQlkYXRhTmFtZVRleHQubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCB4b2Zmc2V0KTsKLQkJZGF0YU5hbWVUZXh0LnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgLXJpZ2h0TWFyZ2luU3BhY2UgLSBJVGFiYmVkUHJvcGVydHlDb25zdGFudHMuSFNQQUNFKTsKLQkJZGF0YU5hbWVUZXh0LnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKLQkJbmFtZVRleHQuc2V0TGF5b3V0RGF0YShkYXRhTmFtZVRleHQpOwotCQlhcHBseVRleHRMaXN0ZW5lcnMobmFtZVRleHQpOwotCQkKLQkJLy8gcHJlZml4IHRleHQgZmllbGQKLQkJRm9ybURhdGEgZGF0YVByZWZpeFRleHQgPSBuZXcgRm9ybURhdGEoKTsKLQkJZGF0YVByZWZpeFRleHQubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCB4b2Zmc2V0KTsKLQkJZGF0YVByZWZpeFRleHQucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAtcmlnaHRNYXJnaW5TcGFjZSAtIElUYWJiZWRQcm9wZXJ0eUNvbnN0YW50cy5IU1BBQ0UpOwotCQlkYXRhUHJlZml4VGV4dC50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQobmFtZVRleHQsICtJVGFiYmVkUHJvcGVydHlDb25zdGFudHMuVlNQQUNFKTsKLQkJcHJlZml4VGV4dC5zZXRMYXlvdXREYXRhKGRhdGFQcmVmaXhUZXh0KTsKLQkJYXBwbHlUZXh0TGlzdGVuZXJzKHByZWZpeFRleHQpOwotCQkKLQkJLy8gdGFyZ2V0bmFtZXNwYWNlIHRleHQgZmllbGQKLQkJRm9ybURhdGEgZGF0YSA9IG5ldyBGb3JtRGF0YSgpOwotCQlkYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgeG9mZnNldCk7Ci0JCWRhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAtcmlnaHRNYXJnaW5TcGFjZSAtIElUYWJiZWRQcm9wZXJ0eUNvbnN0YW50cy5IU1BBQ0UpOwotCQlkYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChwcmVmaXhUZXh0LCArSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLlZTUEFDRSk7Ci0JCXRhcmdldE5hbWVzcGFjZVRleHQuc2V0TGF5b3V0RGF0YShkYXRhKTsKLQkJYXBwbHlUZXh0TGlzdGVuZXJzKHRhcmdldE5hbWVzcGFjZVRleHQpOwotCQkKLQkJLy8gQWR2YW5jZWQgYnV0dG9uIGxheW91dAotCQlGb3JtRGF0YSBkYXRhQnV0dG9uID0gbmV3IEZvcm1EYXRhKCk7Ci0vLwkJZGF0YUJ1dHRvbi5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgLXJpZ2h0TWFyZ2luU3BhY2UgKyAyKTsKLQkJZGF0YUJ1dHRvbi5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIC1yaWdodE1hcmdpblNwYWNlIC0gSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzLkhTUEFDRSk7Ci0JCWRhdGFCdXR0b24udG9wID0gbmV3IEZvcm1BdHRhY2htZW50KHRhcmdldE5hbWVzcGFjZVRleHQsICtJVGFiYmVkUHJvcGVydHlDb25zdGFudHMuVlNQQUNFKTsKLS8vCQlkYXRhQnV0dG9uLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCh0YXJnZXROYW1lc3BhY2VUZXh0LCAwLCBTV1QuQ0VOVEVSKTsKLQkJYnV0dG9uLnNldExheW91dERhdGEoZGF0YUJ1dHRvbik7Ci0JCWJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgZG9IYW5kbGVFdmVudChFdmVudCBldmVudCkKLQl7Ci0JCWhhbmRsaW5nRXZlbnQgPSB0cnVlOwotCQlPYmplY3Qgb2JqID0gZ2V0RGVzY3JpcHRpb24oKTsKLQkJaWYgKG9iaiBpbnN0YW5jZW9mIElEZXNjcmlwdGlvbikgewotCQkJSURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gKElEZXNjcmlwdGlvbikgb2JqOwotCi0JCQlpZiAoZXZlbnQud2lkZ2V0ID09IG5hbWVUZXh0KSB7Ci0JCQkJU3RyaW5nIG5ld05hbWUgPSBuYW1lVGV4dC5nZXRUZXh0KCk7Ci0JCQkJaWYgKCFuZXdOYW1lLmVxdWFscyhkZXNjcmlwdGlvbi5nZXROYW1lKCkpKSB7Ci0JCQkJCUNvbW1hbmQgY29tbWFuZCA9IGRlc2NyaXB0aW9uLmdldFNldE5hbWVDb21tYW5kKG5ld05hbWUpOwotCQkJCQlleGVjdXRlQ29tbWFuZChjb21tYW5kKTsKLQkJCQl9Ci0JCQl9Ci0JCQllbHNlIGlmIChldmVudC53aWRnZXQgPT0gcHJlZml4VGV4dCB8fCBldmVudC53aWRnZXQgPT0gdGFyZ2V0TmFtZXNwYWNlVGV4dCkgewotCQkJCVN0cmluZyBuZXdUYXJnZXROUyA9IHRhcmdldE5hbWVzcGFjZVRleHQuZ2V0VGV4dCgpOwkJCQkKLQkJCQlTdHJpbmcgbmV3UHJlZml4ID0gcHJlZml4VGV4dC5nZXRUZXh0KCk7Ci0JCQkJCi0JCQkJYm9vbGVhbiB0YXJnZXROU2RpZmYgPSAhbmV3VGFyZ2V0TlMuZXF1YWxzKGRlc2NyaXB0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpKTsKLQkJCQlib29sZWFuIHByZWZpeERpZmYgPSAhbmV3UHJlZml4LmVxdWFscyhkZXNjcmlwdGlvbi5nZXRUYXJnZXROYW1lc3BhY2VQcmVmaXgoKSk7Ci0JCQkJaWYgKHRhcmdldE5TZGlmZiB8fCBwcmVmaXhEaWZmICkgewotCQkJCQkvLyBUT0RPOiBUaGUgY29kZSBiZWxvdyBpcyBub3QgZ2VuZXJpYy4gIFdlIG5lZWQgdG8gcmV2aXNpdCB0aGlzIHRvIGVuc3VyZSBpdCBpcwotCQkJCQkvLyBnZW5lcmljLiAgSURlc2NyaXB0aW9uIG5lZWRzIGEgZ2V0TmFtZXNwYWNlc0luZm8oKSBhbmQgZ2V0RWRpdE5hbWVzcGFjZXNDb21tYW5kKCkuLi4KLQkJCQkJVzExRWRpdE5hbWVzcGFjZXNDb21tYW5kIGNvbW1hbmQgPSAKLQkJCQkJCShXMTFFZGl0TmFtZXNwYWNlc0NvbW1hbmQpICgoVzExRGVzY3JpcHRpb24pIGRlc2NyaXB0aW9uKS5nZXRFZGl0TmFtZXNwYWNlc0NvbW1hbmQoKTsKLQkJCQkJaWYgKHRhcmdldE5TZGlmZikKLQkJCQkJICBjb21tYW5kLnNldFRhcmdldE5hbWVzcGFjZShuZXdUYXJnZXROUyk7Ci0JCQkJCWlmIChwcmVmaXhEaWZmKQotCQkJCQkgIGNvbW1hbmQuc2V0VGFyZ2V0TmFtZXNwYWNlUHJlZml4KG5ld1ByZWZpeCk7Ci0JCQkJCWV4ZWN1dGVDb21tYW5kKGNvbW1hbmQpOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCWhhbmRsaW5nRXZlbnQgPSBmYWxzZTsJCQotCX0KLQkKLQlwcm90ZWN0ZWQgT2JqZWN0IGdldERlc2NyaXB0aW9uKCkgewotCQlPYmplY3QgbW9kZWwgPSBnZXRNb2RlbCgpOwotCQlpZiAobW9kZWwgaW5zdGFuY2VvZiBBYnN0cmFjdE1vZGVsQ29sbGVjdGlvbikgewotCQkJbW9kZWwgPSAoKEFic3RyYWN0TW9kZWxDb2xsZWN0aW9uKSBtb2RlbCkuZ2V0TW9kZWwoKTsKLQkJCWlmIChtb2RlbCBpbnN0YW5jZW9mIElEZXNjcmlwdGlvbikgewotCQkJCXJldHVybiAoSURlc2NyaXB0aW9uKSBtb2RlbDsKLQkJCX0KLQkJfQotCQllbHNlIGlmIChtb2RlbCBpbnN0YW5jZW9mIElDYXRlZ29yeUFkYXB0ZXIpIHsKLQkJCXJldHVybiAoKElDYXRlZ29yeUFkYXB0ZXIpIG1vZGVsKS5nZXRPd25lckRlc2NyaXB0aW9uKCk7Ci0JCX0KLQotCQlyZXR1cm4gbW9kZWw7Ci0JfQotCS8qCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLnByb3BlcnRpZXMuaW50ZXJuYWwucHJvdmlzaW9uYWwudmlldy5JVGFiYmVkUHJvcGVydHlTZWN0aW9uI3JlZnJlc2goKQotCSAqLwotCXB1YmxpYyB2b2lkIHJlZnJlc2goKQotCXsKLQkJc3VwZXIucmVmcmVzaCgpOwotCQkKLQkJLy8gU2V0IG5hbWVUZXh0Ci0JCWlmIChuYW1lVGV4dCA9PSBudWxsIHx8IG5hbWVUZXh0LmlzRm9jdXNDb250cm9sKCkpIHsKLQkJCXJldHVybjsKLQkJfQotCQlzZXRMaXN0ZW5lckVuYWJsZWQoZmFsc2UpOwotCQluYW1lVGV4dC5zZXRUZXh0KCIiKTsgLy8kTk9OLU5MUy0xJAotCQlpZiAoZ2V0RGVzY3JpcHRpb24oKSBpbnN0YW5jZW9mIElOYW1lZE9iamVjdCkgewotCQkJbmFtZVRleHQuc2V0VGV4dCgoKElOYW1lZE9iamVjdCkgZ2V0RGVzY3JpcHRpb24oKSkuZ2V0TmFtZSgpKTsKLQkJfQkJCi0JCXNldExpc3RlbmVyRW5hYmxlZCh0cnVlKTsKLQkJCi0JCQotCQkvLyBTZXQgdGFyZ2V0TmFtZXNwYWNlVGV4dCBhbmQgcHJlZml4VGV4dAotCQlpZiAodGFyZ2V0TmFtZXNwYWNlVGV4dCA9PSBudWxsIHx8IHRhcmdldE5hbWVzcGFjZVRleHQuaXNGb2N1c0NvbnRyb2woKSB8fCBoYW5kbGluZ0V2ZW50KQotCQl7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJc2V0TGlzdGVuZXJFbmFibGVkKGZhbHNlKTsKLQkJT2JqZWN0IG9iaiA9IGdldERlc2NyaXB0aW9uKCk7Ci0JCWlmIChvYmogaW5zdGFuY2VvZiBJRGVzY3JpcHRpb24pCi0JCXsKLQkJCUlEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IChJRGVzY3JpcHRpb24pIG9iajsKLQkJCVN0cmluZyB0YXJnZXROUyA9IGRlc2NyaXB0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpOwotCQkJU3RyaW5nIG5ld1ByZWZpeCA9IGRlc2NyaXB0aW9uLmdldFRhcmdldE5hbWVzcGFjZVByZWZpeCgpOyAgICAgICAgICAgIAotCQkJcHJlZml4VGV4dC5zZXRUZXh0KG5ld1ByZWZpeCAhPSBudWxsID8gbmV3UHJlZml4IDogIiIpOyAvLyROT04tTkxTLTEkCi0JCQkKLQkJCS8vIHNldCB0YXJnZXRuYW1lc3BhY2UgZmllbGQgYW5kIHByZWZpeCBmaWVsZAotCQkJaWYgKHRhcmdldE5TICE9IG51bGwpCi0JCQl7Ci0JCQkJdGFyZ2V0TmFtZXNwYWNlVGV4dC5zZXRUZXh0KHRhcmdldE5TKTsKLQkJCX0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgdGFyZ2V0TmFtZXNwYWNlVGV4dC5zZXRUZXh0KCIiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgfQotCQkJaWYgKG5ld1ByZWZpeCAhPSBudWxsKQotCQkJewotCQkJCXByZWZpeFRleHQuc2V0VGV4dChuZXdQcmVmaXgpOwotCQkJfQotCQl9Ci0JCXNldExpc3RlbmVyRW5hYmxlZCh0cnVlKTsKLQl9Ci0JCi0JCi0JcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLQl7Ci0JCWlmIChlLndpZGdldCA9PSBidXR0b24pCXsKLQkJCU9iamVjdCBvYmogPSBnZXREZXNjcmlwdGlvbigpOwotCQkJaWYgKG9iaiBpbnN0YW5jZW9mIElEZXNjcmlwdGlvbikgewotCQkJCUlXb3JrYmVuY2hQYXJ0IHBhcnQgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVQYXJ0KCk7Ci0JCQkJQVNERWRpdE5hbWVzcGFjZXNBY3Rpb24gYWN0aW9uID0gbmV3IEFTREVkaXROYW1lc3BhY2VzQWN0aW9uKHBhcnQsIChJRGVzY3JpcHRpb24pIG9iaik7Ci0JCQkJYWN0aW9uLnJ1bigpOwotCQkJCXJlZnJlc2goKTsKLQkgICAgICAgIH0KLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvcHJvcGVydGllcy9zZWN0aW9ucy9QYXJhbWV0ZXJTZWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3Byb3BlcnRpZXMvc2VjdGlvbnMvUGFyYW1ldGVyU2VjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTg4ZDczLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvcHJvcGVydGllcy9zZWN0aW9ucy9QYXJhbWV0ZXJTZWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5wcm9wZXJ0aWVzLnNlY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZ2VmLmNvbW1hbmRzLkNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNDb21ibzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNMYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1BdHRhY2htZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybURhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy50YWJiZWQuSVRhYmJlZFByb3BlcnR5Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMudGFiYmVkLlRhYmJlZFByb3BlcnR5U2hlZXRXaWRnZXRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuc2VhcmNoLmRpYWxvZ3MuQ29tcG9uZW50U3BlY2lmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuQVNERWRpdG9yQ1NIZWxwSWRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklBU0RPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmZhY2FkZS5JUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuUmVmZXJlbmNlRWRpdE1hbmFnZXJIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5hZHQuZWRpdC5Db21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlcjsKLQotcHVibGljIGNsYXNzIFBhcmFtZXRlclNlY3Rpb24gZXh0ZW5kcyBOYW1lU2VjdGlvbiB7Ci0JcHJvdGVjdGVkIHN0YXRpYyBTdHJpbmcgTkVXX1NUUklORyA9IE1lc3NhZ2VzLl9VSV9CVVRUT05fTkVXOyAvLyROT04tTkxTLTEkCi0JcHJvdGVjdGVkIHN0YXRpYyBTdHJpbmcgQlJPV1NFX1NUUklORyA9IE1lc3NhZ2VzLl9VSV9CVVRUT05fQlJPV1NFOyAvLyROT04tTkxTLTEkCi0JcHJvdGVjdGVkIENMYWJlbCBjb21ib0xhYmVsOyAKLQlwcm90ZWN0ZWQgQ0NvbWJvIGNvbWJvOwotCXByb3RlY3RlZCBib29sZWFuIGhhbmRsZVR5cGVTY2VuYXJpbyA9IHRydWU7Ci0JcHJvdGVjdGVkIENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIHBhcmFtZXRlclJlZk1hbmFnZXI7Ci0JCi0JcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbHMoQ29tcG9zaXRlIHBhcmVudCwgVGFiYmVkUHJvcGVydHlTaGVldFdpZGdldEZhY3RvcnkgZmFjdG9yeSkKLQl7Ci0JCXN1cGVyLmNyZWF0ZUNvbnRyb2xzKHBhcmVudCwgZmFjdG9yeSk7Ci0JCWNyZWF0ZUNvbnRyb2xBcmVhKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2xBcmVhKCkKLQl7Ci0JCUZvcm1EYXRhIGRhdGE7Ci0JCQotCQljb21ibyA9IGdldFdpZGdldEZhY3RvcnkoKS5jcmVhdGVDQ29tYm8oY29tcG9zaXRlKTsKLQkJY29tYm8uc2V0QmFja2dyb3VuZChjb21wb3NpdGUuZ2V0QmFja2dyb3VuZCgpKTsKLQkJY29tYm8uYWRkTGlzdGVuZXIoU1dULk1vZGlmeSwgdGhpcyk7Ci0JCWNvbWJvLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOwotCQkKLQkJY29tYm9MYWJlbCA9IGdldFdpZGdldEZhY3RvcnkoKS5jcmVhdGVDTGFiZWwoY29tcG9zaXRlLCBNZXNzYWdlcy5fVUlfTEFCRUxfVFlQRSArICI6Iik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQlkYXRhID0gbmV3IEZvcm1EYXRhKCk7Ci0JCWRhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKLQkJZGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudChjb21ibywgLUlUYWJiZWRQcm9wZXJ0eUNvbnN0YW50cy5IU1BBQ0UpOwotCQlkYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChjb21ibywgMCwgU1dULkNFTlRFUik7Ci0JCWNvbWJvTGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsKLQkJCi0vLwkJQnV0dG9uIGJ1dHRvbiA9IGdldFdpZGdldEZhY3RvcnkoKS5jcmVhdGVCdXR0b24oY29tcG9zaXRlLCAiIiwgU1dULlBVU0gpOyAvLyROT04tTkxTLTEkCi0vLwkJYnV0dG9uLnNldEltYWdlKEludGVyZmFjZVVJUGx1Z2luLmdldERlZmF1bHQoKS5nZXRJbWFnZSgiaWNvbnMvb2JqMTYvYnJvd3NlYnV0dG9uLmdpZiIpKTsgLy8kTk9OLU5MUy0xJAotLy8JCQotLy8JCWJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKLS8vCQlkYXRhID0gbmV3IEZvcm1EYXRhKCk7Ci0vLwkJZGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgLXJpZ2h0TWFyZ2luU3BhY2UgKyAyKTsKLS8vCQlkYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7Ci0vLwkJZGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQodHlwZUNvbWJvLCAwLCBTV1QuQ0VOVEVSKTsKLS8vCQlidXR0b24uc2V0TGF5b3V0RGF0YShkYXRhKTsKLQkJCi0JCWRhdGEgPSBuZXcgRm9ybURhdGEoKTsKLQkJZGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDEwMCk7Ci0vLwkJZGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudChidXR0b24sIDApOwotCQlkYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgLXJpZ2h0TWFyZ2luU3BhY2UgLSBJVGFiYmVkUHJvcGVydHlDb25zdGFudHMuSFNQQUNFKTsKLQkJZGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQobmFtZVRleHQsICtJVGFiYmVkUHJvcGVydHlDb25zdGFudHMuVlNQQUNFKTsKLQkJY29tYm8uc2V0TGF5b3V0RGF0YShkYXRhKTsKLQl9Ci0JCi0JLyoKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkucHJvcGVydGllcy5pbnRlcm5hbC5wcm92aXNpb25hbC52aWV3LklUYWJiZWRQcm9wZXJ0eVNlY3Rpb24jcmVmcmVzaCgpCi0JICovCi0JcHVibGljIHZvaWQgcmVmcmVzaCgpIHsKLQkJc3VwZXIucmVmcmVzaCgpOwotCQlpZiAobmFtZVRleHQuaXNGb2N1c0NvbnRyb2woKSkgewotCQkJcmV0dXJuOwotCQl9Ci0JCQotCQlzZXRMaXN0ZW5lckVuYWJsZWQoZmFsc2UpOwotCQkKLQkJUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChjb21ibywgQVNERWRpdG9yQ1NIZWxwSWRzLlBST1BFUlRJRVNfUEFSVF9FTEVNRU5UX0NPTUJPKTsKLQotCQlpZiAoaGFuZGxlVHlwZVNjZW5hcmlvKSB7Ci0JCQlyZWZyZXNoQ29tYm8oKTsKLQkJCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoY29tYm8sIEFTREVkaXRvckNTSGVscElkcy5QUk9QRVJUSUVTX1BBUlRfVFlQRV9DT01CTyk7Ci0JCX0KLQkJCi0JCXNldENvbnRyb2xGb3JlZ3JvdW5kQ29sb3IoY29tYm8pOwotCQkKLQkJc2V0TGlzdGVuZXJFbmFibGVkKHRydWUpOwotCX0KLQkKLQlwcm90ZWN0ZWQgdm9pZCByZWZyZXNoQ29tYm8oKSB7Ci0JCUlQYXJhbWV0ZXIgcGFyYW0gPSBudWxsOwotCQlPYmplY3QgbW9kZWwgPSBnZXRNb2RlbCgpOwotCQlzZXRMaXN0ZW5lckVuYWJsZWQoZmFsc2UpOwotCQkKLQkJaWYgKG1vZGVsIGluc3RhbmNlb2YgSVBhcmFtZXRlcikgewotCQkJcGFyYW0gPSAoSVBhcmFtZXRlcikgbW9kZWw7Ci0JCX0KLQkJCi0JCVN0cmluZyBuYW1lID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJU3RyaW5nIHR5cGVOYW1lID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJaWYgKHBhcmFtICE9IG51bGwpIHsKLQkJCW5hbWUgPSBwYXJhbS5nZXROYW1lKCk7Ci0JCQl0eXBlTmFtZSA9IHBhcmFtLmdldENvbXBvbmVudE5hbWUoKTsKLQkJfQotCQkKLQkJaWYgKCFuYW1lVGV4dC5pc0ZvY3VzQ29udHJvbCgpKSB7Ci0JCQluYW1lVGV4dC5zZXRUZXh0KG5hbWUpOwotCQl9Ci0JCQotCQkvLyBQb3B1bGF0ZSB0aGUgdHlwZSBDb21ibwotCQljb21iby5yZW1vdmVBbGwoKTsKLQkJY29tYm8uYWRkKEJST1dTRV9TVFJJTkcpOwotCQljb21iby5hZGQoTkVXX1NUUklORyk7Ci0JCQotCQlDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBlZGl0TWFuYWdlciA9IGdldENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKCk7Ci0JCWlmIChlZGl0TWFuYWdlciAhPSBudWxsKSB7Ci0JCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uW10gc3BlY3MgPSBlZGl0TWFuYWdlci5nZXRRdWlja1BpY2tzKCk7Ci0JCQlmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgc3BlY3MubGVuZ3RoOyBpbmRleCsrKSB7Ci0JCQkJY29tYm8uYWRkKChTdHJpbmcpIHNwZWNzW2luZGV4XS5nZXROYW1lKCkpOwotCQkJfQotCQkJCi0JCQlzcGVjcyA9IGVkaXRNYW5hZ2VyLmdldEhpc3RvcnkoKTsKLQkJCWZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBzcGVjcy5sZW5ndGg7IGluZGV4KyspIHsKLQkJCQljb21iby5hZGQoKFN0cmluZykgc3BlY3NbaW5kZXhdLmdldE5hbWUoKSk7Ci0JCQl9Ci0JCX0JCQotCQkKLQkJLy8gRGlzcGxheSB0aGUgdHlwZSBpbiB0aGUgQ29tYm8KLQkJU3RyaW5nW10gaXRlbXMgPSBjb21iby5nZXRJdGVtcygpOwotCQlpbnQgaW5kZXg7Ci0JCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGl0ZW1zLmxlbmd0aDsgaW5kZXgrKykgewotCQkJaWYgKGl0ZW1zW2luZGV4XS5lcXVhbHModHlwZU5hbWUpKSB7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJCi0JCWlmIChpbmRleCA8IGl0ZW1zLmxlbmd0aCkgewotCQkJLy8gRm91bmQgYSBtYXRjaAotCQkJY29tYm8uc2VsZWN0KGluZGV4KTsKLQkJfQotCQllbHNlIHsKLQkJCWNvbWJvLnNldFRleHQodHlwZU5hbWUpOwotCQl9Ci0JCQotCQlzZXRMaXN0ZW5lckVuYWJsZWQodHJ1ZSk7Ci0JfQotCQotCXB1YmxpYyBib29sZWFuIHNob3VsZFVzZUV4dHJhU3BhY2UoKQotCXsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBoYW5kbGVFdmVudChFdmVudCBldmVudCkKLQl7Ci0JCWlmIChldmVudC53aWRnZXQgPT0gY29tYm8pIHsKLQkJCWlmIChpc0xpc3RlbmVyRW5hYmxlZCgpICYmICFpc0luRG9IYW5kbGUpIAotCQkJewotCQkJCWlzSW5Eb0hhbmRsZSA9IHRydWU7Ci0JCQkJc3RhcnREZWxheWVkRXZlbnQoZXZlbnQpOwotCQkJCWlzSW5Eb0hhbmRsZSA9IGZhbHNlOwotCQkJfQotCQl9Ci0JCWVsc2UgewotCQkJc3VwZXIuaGFuZGxlRXZlbnQoZXZlbnQpOwotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIGRvSGFuZGxlRXZlbnQoRXZlbnQgZXZlbnQpCi0JewotCQlzdXBlci5kb0hhbmRsZUV2ZW50KGV2ZW50KTsKLQkJaWYgKGV2ZW50LndpZGdldCA9PSBjb21ibyAmJiBoYW5kbGVUeXBlU2NlbmFyaW8pIHsKLQkJCWhhbmRsZUNvbWJvU2VsZWN0aW9uKCk7Ci0JCQlyZWZyZXNoKCk7Ci0JCX0KLQl9Ci0JCi0JcHJvdGVjdGVkIHZvaWQgaGFuZGxlQ29tYm9TZWxlY3Rpb24oKSB7Ci0JCVN0cmluZyB2YWx1ZSA9IGNvbWJvLmdldEl0ZW0oY29tYm8uZ2V0U2VsZWN0aW9uSW5kZXgoKSk7Ci0JCQotCQlJUGFyYW1ldGVyIHBhcmFtZXRlciA9IChJUGFyYW1ldGVyKSB0aGlzLmdldE1vZGVsKCk7Ci0JCQotCQlpZiAodmFsdWUuZXF1YWxzKE5FV19TVFJJTkcpKSB7Ci0JCQlDb21tYW5kIGNvbW1hbmQgPSBwYXJhbWV0ZXIuZ2V0U2V0VHlwZUNvbW1hbmQoSVBhcmFtZXRlci5TRVRfTkVXX0FDVElPTl9JRCk7Ci0JCQljb21tYW5kLmV4ZWN1dGUoKTsKLQkJfQotCQllbHNlIGlmICh2YWx1ZS5lcXVhbHMoQlJPV1NFX1NUUklORykpIHsKLQkJCUNvbW1hbmQgY29tbWFuZCA9IHBhcmFtZXRlci5nZXRTZXRUeXBlQ29tbWFuZChJUGFyYW1ldGVyLlNFTEVDVF9FWElTVElOR19BQ1RJT05fSUQpOwotCQkJY29tbWFuZC5leGVjdXRlKCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBlZGl0TWFuYWdlciA9IGdldENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKCk7Ci0JCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uIHNwZWMgPSBnZXRDb21wb25lbnRTcGVjaWZpY2F0aW9uRm9yVmFsdWUoKFN0cmluZyl2YWx1ZSk7Ci0JCQlpZiAoc3BlYyAhPSBudWxsKSB7Ci0JCQkJZWRpdE1hbmFnZXIubW9kaWZ5Q29tcG9uZW50UmVmZXJlbmNlKHBhcmFtZXRlciwgc3BlYyk7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JcHJvdGVjdGVkIENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyIGdldENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKCkgewotCQlpZiAocGFyYW1ldGVyUmVmTWFuYWdlciAhPSBudWxsKSB7Ci0JCQlyZXR1cm4gcGFyYW1ldGVyUmVmTWFuYWdlcjsKLQkJfQkJCi0gICAgICAgIGlmIChnZXRNb2RlbCgpIGluc3RhbmNlb2YgSUFTRE9iamVjdCkKLSAgICAgICAgeyAgCi0JCSAgcGFyYW1ldGVyUmVmTWFuYWdlciA9IFJlZmVyZW5jZUVkaXRNYW5hZ2VySGVscGVyLmdldFhTRFR5cGVSZWZlcmVuY2VFZGl0TWFuYWdlcigoSUFTRE9iamVjdCkgZ2V0TW9kZWwoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJtb2RlbCIgKyBnZXRNb2RlbCgpKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICB9ICAKLQkJcmV0dXJuIHBhcmFtZXRlclJlZk1hbmFnZXI7Ci0JfQotCQotCS8vIFRPRE86IHJtYWg6IFRoaXMgY29kZSBzaG91bGQgbGl2ZSBpbiBhIGNvbW1vbiBwbGFjZS4uLi4uIFRoaXMgY29kZSBpcyBhbHNvIHVzZWQgaW4gb3RoZXIgVUkgc2NlbmFyaW9zIHdoZW4KLQkvLyBhIHNpbWlsYXIgY29tYm8gYm94IGlzIHVzZWQuICBGb3IgZXhhbXBsZSBpbiBEaXJlY3QgRWRpdC4uLihUeXBlUmVmZXJlbmNlRGlyZWN0RWRpdE1hbmFnZXIpICBBbHNvIHVzZWQgaW4gdGhlIFhTREVkaXRvci4uLgotCXByb3RlY3RlZCBDb21wb25lbnRTcGVjaWZpY2F0aW9uIGdldENvbXBvbmVudFNwZWNpZmljYXRpb25Gb3JWYWx1ZShTdHJpbmcgdmFsdWUpCi0JewotCQlDb21wb25lbnRSZWZlcmVuY2VFZGl0TWFuYWdlciBlZGl0TWFuYWdlciA9IGdldENvbXBvbmVudFJlZmVyZW5jZUVkaXRNYW5hZ2VyKCk7Ci0JCWlmIChlZGl0TWFuYWdlciAhPSBudWxsKQotCQl7ICAKLQkJCUNvbXBvbmVudFNwZWNpZmljYXRpb25bXSBxdWlja1BpY2tzID0gZWRpdE1hbmFnZXIuZ2V0UXVpY2tQaWNrcygpOwotCQkJaWYgKHF1aWNrUGlja3MgIT0gbnVsbCkKLQkJCXsKLQkJCQlmb3IgKGludCBpPTA7IGkgPCBxdWlja1BpY2tzLmxlbmd0aDsgaSsrKQotCQkJCXsKLQkJCQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbiBjb21wb25lbnRTcGVjaWZpY2F0aW9uID0gcXVpY2tQaWNrc1tpXTsKLQkJCQkJaWYgKHZhbHVlLmVxdWFscyhjb21wb25lbnRTcGVjaWZpY2F0aW9uLmdldE5hbWUoKSkpCi0JCQkJCXsKLQkJCQkJCXJldHVybiBjb21wb25lbnRTcGVjaWZpY2F0aW9uOwotCQkJCQl9ICAgICAgICAgICAgICAgIAotCQkJCX0gIAotCQkJfQotCQkJQ29tcG9uZW50U3BlY2lmaWNhdGlvbltdIGhpc3RvcnkgPSBlZGl0TWFuYWdlci5nZXRIaXN0b3J5KCk7Ci0JCQlpZiAoaGlzdG9yeSAhPSBudWxsKQotCQkJewotCQkJCWZvciAoaW50IGk9MDsgaSA8IGhpc3RvcnkubGVuZ3RoOyBpKyspCi0JCQkJewotCQkJCQlDb21wb25lbnRTcGVjaWZpY2F0aW9uIGNvbXBvbmVudFNwZWNpZmljYXRpb24gPSBoaXN0b3J5W2ldOwotCQkJCQlpZiAodmFsdWUuZXF1YWxzKGNvbXBvbmVudFNwZWNpZmljYXRpb24uZ2V0TmFtZSgpKSkKLQkJCQkJeyAgCi0JCQkJCQlyZXR1cm4gY29tcG9uZW50U3BlY2lmaWNhdGlvbjsKLQkJCQkJfQotCQkJCX0gIAotCQkJfQotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvcHJvcGVydGllcy9zZWN0aW9ucy9SZWZlcmVuY2VTZWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3Byb3BlcnRpZXMvc2VjdGlvbnMvUmVmZXJlbmNlU2VjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzIyZGRmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvcHJvcGVydGllcy9zZWN0aW9ucy9SZWZlcmVuY2VTZWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5wcm9wZXJ0aWVzLnNlY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DQ29tYm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtQXR0YWNobWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1EYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLnRhYmJlZC5JVGFiYmVkUHJvcGVydHlDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy50YWJiZWQuVGFiYmVkUHJvcGVydHlTaGVldFdpZGdldEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLk1lc3NhZ2VzOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgUmVmZXJlbmNlU2VjdGlvbiBleHRlbmRzIE5hbWVTZWN0aW9uIHsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBCUk9XU0VfU1RSSU5HID0gTWVzc2FnZXMuX1VJX0JVVFRPTl9CUk9XU0U7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBORVdfU1RSSU5HID0gTWVzc2FnZXMuX1VJX0JVVFRPTl9ORVc7IC8vJE5PTi1OTFMtMSQKLQlwcm90ZWN0ZWQgQ0NvbWJvIGNvbWJvOwotCXByb3RlY3RlZCBDTGFiZWwgY29tYm9MYWJlbDsKLQkKLQlwcm90ZWN0ZWQgTGlzdCBpdGVtc0luQ29tYm8gPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLQkvKioKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkucHJvcGVydGllcy5pbnRlcm5hbC5wcm92aXNpb25hbC5JVGFiYmVkUHJvcGVydHlTZWN0aW9uI2NyZWF0ZUNvbnRyb2xzKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSwgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51aS5wcm9wZXJ0aWVzLmludGVybmFsLnByb3Zpc2lvbmFsLlRhYmJlZFByb3BlcnR5U2hlZXRXaWRnZXRGYWN0b3J5KQotCSAqLwotCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2xzKENvbXBvc2l0ZSBwYXJlbnQsIFRhYmJlZFByb3BlcnR5U2hlZXRXaWRnZXRGYWN0b3J5IGZhY3RvcnkpCi0JewotCQlzdXBlci5jcmVhdGVDb250cm9scyhwYXJlbnQsIGZhY3RvcnkpOwotCQlGb3JtRGF0YSBkYXRhOwotCQkKLQkJLy8gQ3JlYXRlIENvbWJvIHJvdyBvZiB3aWRnZXRzCi0JCWNvbWJvTGFiZWwgPSBnZXRXaWRnZXRGYWN0b3J5KCkuY3JlYXRlQ0xhYmVsKGNvbXBvc2l0ZSwgIlJlZmVyZW5jZSIpOyAvLyROT04tTkxTLTEkCi0JCWNvbWJvID0gZ2V0V2lkZ2V0RmFjdG9yeSgpLmNyZWF0ZUNDb21ibyhjb21wb3NpdGUpOwotCQljb21iby5zZXRCYWNrZ3JvdW5kKGNvbXBvc2l0ZS5nZXRCYWNrZ3JvdW5kKCkpOwotCi0JCS8vIExheW91dCBDb21ibyBMYWJlbAotCQlkYXRhID0gbmV3IEZvcm1EYXRhKCk7Ci0JCWRhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKLQkJZGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudChjb21ibywgLUlUYWJiZWRQcm9wZXJ0eUNvbnN0YW50cy5IU1BBQ0UpOwotCQlkYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChjb21ibywgMCwgU1dULkNFTlRFUik7Ci0JCWNvbWJvTGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsKLQkJCi0JCS8vIExheW91dCBDb21ibwotCQlkYXRhID0gbmV3IEZvcm1EYXRhKCk7Ci0JCWRhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAxMDApOwotCQlkYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgLXJpZ2h0TWFyZ2luU3BhY2UgLSBJVGFiYmVkUHJvcGVydHlDb25zdGFudHMuSFNQQUNFKTsKLQkJZGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQobmFtZVRleHQsICtJVGFiYmVkUHJvcGVydHlDb25zdGFudHMuVlNQQUNFKTsKLQkJY29tYm8uc2V0TGF5b3V0RGF0YShkYXRhKTsKLQkJCi0JCWNvbWJvLmFkZExpc3RlbmVyKFNXVC5Nb2RpZnksIHRoaXMpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBoYW5kbGVFdmVudChFdmVudCBldmVudCkKLQl7Ci0JCWlmIChldmVudC53aWRnZXQgPT0gY29tYm8pIHsKLQkJCWlmIChpc0xpc3RlbmVyRW5hYmxlZCgpICYmICFpc0luRG9IYW5kbGUpIAotCQkJewotCQkJCWlzSW5Eb0hhbmRsZSA9IHRydWU7Ci0JCQkJc3RhcnREZWxheWVkRXZlbnQoZXZlbnQpOwotCQkJCWlzSW5Eb0hhbmRsZSA9IGZhbHNlOwotCQkJfQotCQl9Ci0JCWVsc2UgewotCQkJc3VwZXIuaGFuZGxlRXZlbnQoZXZlbnQpOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkucHJvcGVydGllcy5pbnRlcm5hbC5wcm92aXNpb25hbC52aWV3LklUYWJiZWRQcm9wZXJ0eVNlY3Rpb24jcmVmcmVzaCgpCi0JICovCi0JcHVibGljIHZvaWQgcmVmcmVzaCgpIHsKLQkJY29tYm8ucmVtb3ZlTGlzdGVuZXIoU1dULk1vZGlmeSwgdGhpcyk7Ci0JCQotCQlzdXBlci5yZWZyZXNoKCk7Ci0JCQotCQlMaXN0IGNvbWJvSXRlbXMgPSBnZXRDb21ib0l0ZW1zKCk7Ci0JCWlmIChjb21ib0l0ZW1zLnNpemUoKSA+IDApIHsKLQkJCWNvbWJvLnJlbW92ZUFsbCgpOwotCQkJaXRlbXNJbkNvbWJvLmNsZWFyKCk7Ci0KLQkJCS8vIFdlIG5lZWQgdG8gcG9wdWxhdGUgdGhpcyBjb21ibyB3aXRoIHRoZSBhdmFpbGFibGUgcmVmZXJlbmNlcwotCQkJLy8gVE9ETzogcm1haDogV2Ugc2hvdWxkIGluY2x1ZGUgdGhlIHByZWZpeCBhcyB3ZWxsCi0JCQlTdHJpbmcgY3VycmVudENvbWJvSXRlbU5hbWUgPSBnZXRDb21ib0l0ZW1OYW1lKGdldEN1cnJlbnRDb21ib0l0ZW0oKSk7Ci0JCQlpbnQgY3VycmVudEJpbmRpbmdJbmRleCA9IC0xOwotCQkJCi0JCQlMaXN0IGl0ZW1zID0gZ2V0Q29tYm9JdGVtcygpOwotCQkJZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGl0ZW1zLnNpemUoKTsgaW5kZXgrKykgewotCQkJCU9iamVjdCBpdGVtID0gaXRlbXMuZ2V0KGluZGV4KTsKLQkJCQlTdHJpbmcgaXRlbU5hbWUgPSBnZXRDb21ib0l0ZW1OYW1lKGl0ZW0pOwotCQkJCWNvbWJvLmFkZChpdGVtTmFtZSk7Ci0JCQkJaXRlbXNJbkNvbWJvLmFkZChpdGVtKTsKLQotCQkJCWlmIChpdGVtTmFtZS5lcXVhbHMoY3VycmVudENvbWJvSXRlbU5hbWUpKSB7Ci0JCQkJCWN1cnJlbnRCaW5kaW5nSW5kZXggPSBpbmRleDsKLQkJCQl9Ci0JCQl9Ci0KLQkJCWlmIChjdXJyZW50QmluZGluZ0luZGV4ICE9IC0xKSB7Ci0JCQkJY29tYm8uc2VsZWN0KGN1cnJlbnRCaW5kaW5nSW5kZXgpOwkKLQkJCX0KLQkJfQotCQkKLQkJc2V0Q29udHJvbEZvcmVncm91bmRDb2xvcihjb21ibyk7Ci0JCWNvbWJvLmFkZExpc3RlbmVyKFNXVC5Nb2RpZnksIHRoaXMpOwotCX0KLQkKLQlwcm90ZWN0ZWQgYWJzdHJhY3QgTGlzdCBnZXRDb21ib0l0ZW1zKCk7Ci0JcHJvdGVjdGVkIGFic3RyYWN0IE9iamVjdCBnZXRDdXJyZW50Q29tYm9JdGVtKCk7Ci0JcHJvdGVjdGVkIGFic3RyYWN0IFN0cmluZyBnZXRDb21ib0l0ZW1OYW1lKE9iamVjdCBpdGVtKTsKLQlwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCBwZXJmb3JtQ29tYm9TZWxlY3Rpb24oT2JqZWN0IGl0ZW0pOwotCQotICBwdWJsaWMgYm9vbGVhbiBzaG91bGRVc2VFeHRyYVNwYWNlKCkKLSAgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGRvSGFuZGxlRXZlbnQoRXZlbnQgZXZlbnQpCi0gIHsKLQkgIHN1cGVyLmRvSGFuZGxlRXZlbnQoZXZlbnQpOwotCSAgaWYgKGV2ZW50LndpZGdldCA9PSBjb21ibyAmJiAhY29tYm8uaXNEaXNwb3NlZCgpKSB7Ci0JCSAgaW50IHNlbGVjdGlvbkluZGV4ID0gY29tYm8uZ2V0U2VsZWN0aW9uSW5kZXgoKTsKLQkJICBwZXJmb3JtQ29tYm9TZWxlY3Rpb24oaXRlbXNJbkNvbWJvLmdldChzZWxlY3Rpb25JbmRleCkpOwotCQkgIHJlZnJlc2goKTsKLQkgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC91dGlsL0FTREVkaXRQYXJ0RmFjdG9yeUhlbHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC91dGlsL0FTREVkaXRQYXJ0RmFjdG9yeUhlbHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODliNTU5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvdXRpbC9BU0RFZGl0UGFydEZhY3RvcnlIZWxwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLnV0aWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5nZWYuRWRpdFBhcnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5HcmFwaGljYWxWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZGVzaWduLkRlc2lnblZpZXdHcmFwaGljYWxWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYXNkLmRlc2lnbi5lZGl0cGFydHMuQVNERWRpdFBhcnRGYWN0b3J5OwotCi0vKioKLSAqIEBkZXByYWNhdGVkCi0gKi8KLXB1YmxpYyBjbGFzcyBBU0RFZGl0UGFydEZhY3RvcnlIZWxwZXIgewotCXByaXZhdGUgc3RhdGljIEFTREVkaXRQYXJ0RmFjdG9yeUhlbHBlciBpbnN0YW5jZTsKLQkKLQlwcml2YXRlIEVkaXRQYXJ0RmFjdG9yeSBlZGl0UGFydEZhY3Rvcnk7Ci0JCi0JcHVibGljIHN0YXRpYyBBU0RFZGl0UGFydEZhY3RvcnlIZWxwZXIgZ2V0SW5zdGFuY2UoKSB7Ci0JCWlmIChpbnN0YW5jZSA9PSBudWxsKSB7Ci0JCQlpbnN0YW5jZSA9IG5ldyBBU0RFZGl0UGFydEZhY3RvcnlIZWxwZXIoKTsKLQkJfQotCQkKLQkJcmV0dXJuIGluc3RhbmNlOwotCX0KLQkKLQlwdWJsaWMgRWRpdFBhcnRGYWN0b3J5IGdldEVkaXRQYXJ0RmFjdG9yeSgpIHsKLQkJaWYgKGVkaXRQYXJ0RmFjdG9yeSA9PSBudWxsKSB7Ci0JCQllZGl0UGFydEZhY3RvcnkgPSBuZXcgQVNERWRpdFBhcnRGYWN0b3J5KCk7Ci0JCX0KLQkJcmV0dXJuIGVkaXRQYXJ0RmFjdG9yeTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0RWRpdFBhcnRGYWN0b3J5KEVkaXRQYXJ0RmFjdG9yeSBmYWN0b3J5KSB7Ci0JCWVkaXRQYXJ0RmFjdG9yeSA9IGZhY3Rvcnk7Ci0JCUlFZGl0b3JQYXJ0IGVkaXRvciA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOwotCQlPYmplY3QgYWRhcHRlciA9IGVkaXRvci5nZXRBZGFwdGVyKEdyYXBoaWNhbFZpZXdlci5jbGFzcyk7Ci0JCWlmIChhZGFwdGVyIGluc3RhbmNlb2YgRGVzaWduVmlld0dyYXBoaWNhbFZpZXdlcikgewotCQkJKChEZXNpZ25WaWV3R3JhcGhpY2FsVmlld2VyKSBhZGFwdGVyKS5zZXRFZGl0UGFydEZhY3RvcnkoZmFjdG9yeSk7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3V0aWwvRW5kUG9pbnRDb21wYXJhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1hc2Qvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvYXNkL3V0aWwvRW5kUG9pbnRDb21wYXJhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmOWEzYWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC91dGlsL0VuZFBvaW50Q29tcGFyYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbXBhcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QuZmFjYWRlLklCaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUVuZFBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFzZC5mYWNhZGUuSUludGVyZmFjZTsKLQotcHVibGljIGNsYXNzIEVuZFBvaW50Q29tcGFyYXRvciBpbXBsZW1lbnRzIENvbXBhcmF0b3IgewotCXB1YmxpYyBpbnQgY29tcGFyZShPYmplY3QgbzEsIE9iamVjdCBvMikgewotCQlpZiAobzEgaW5zdGFuY2VvZiBJRW5kUG9pbnQgJiYgbzIgaW5zdGFuY2VvZiBJRW5kUG9pbnQpIHsKLQkJCUlCaW5kaW5nIGJpbmRpbmcxID0gKChJRW5kUG9pbnQpIG8xKS5nZXRCaW5kaW5nKCk7Ci0JCQlJQmluZGluZyBiaW5kaW5nMiA9ICgoSUVuZFBvaW50KSBvMikuZ2V0QmluZGluZygpOwotCi0JCQlpZiAoYmluZGluZzEgIT0gbnVsbCAmJiBiaW5kaW5nMiAhPSBudWxsKSB7Ci0JCQkJSUludGVyZmFjZSBpbnRlcmZhY2UxID0gYmluZGluZzEuZ2V0SW50ZXJmYWNlKCk7Ci0JCQkJSUludGVyZmFjZSBpbnRlcmZhY2UyID0gYmluZGluZzIuZ2V0SW50ZXJmYWNlKCk7Ci0KLQkJCQlpZiAoaW50ZXJmYWNlMSAhPSBudWxsICYmIGludGVyZmFjZTIgIT0gbnVsbCkgewotCQkJCQlTdHJpbmcgbmFtZTEgPSBpbnRlcmZhY2UxLmdldE5hbWUoKTsKLQkJCQkJU3RyaW5nIG5hbWUyID0gaW50ZXJmYWNlMi5nZXROYW1lKCk7Ci0JCQkJCXJldHVybiBuYW1lMS5jb21wYXJlVG8obmFtZTIpOwotCQkJCX0KLQotCQkJCXJldHVybiBkb051bGxDb21wYXJpc29uKGludGVyZmFjZTEsIGludGVyZmFjZTIpOwotCQkJfQotCQkJCi0JCQlyZXR1cm4gZG9OdWxsQ29tcGFyaXNvbihiaW5kaW5nMSwgYmluZGluZzIpOwotCQl9Ci0KLQkJcmV0dXJuIGRvTnVsbENvbXBhcmlzb24obzEsIG8yKTsKLQl9Ci0JCi0JcHJpdmF0ZSBpbnQgZG9OdWxsQ29tcGFyaXNvbihPYmplY3QgbzEsIE9iamVjdCBvMikgewotCQlpZiAobzEgIT0gbnVsbCAmJiBvMiA9PSBudWxsKSB7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQkJZWxzZSBpZiAobzEgPT0gbnVsbCAmJiBvMiAhPSBudWxsKSB7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCQkKLQkJcmV0dXJuIDA7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC91dGlsL0lPcGVuRXh0ZXJuYWxFZGl0b3JIZWxwZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLWFzZC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9hc2QvdXRpbC9JT3BlbkV4dGVybmFsRWRpdG9ySGVscGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiYTNkZjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtYXNkL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL2FzZC91dGlsL0lPcGVuRXh0ZXJuYWxFZGl0b3JIZWxwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5hc2QudXRpbDsKLQotcHVibGljIGludGVyZmFjZSBJT3BlbkV4dGVybmFsRWRpdG9ySGVscGVyIHsKLQlwdWJsaWMgdm9pZCBzZXRNb2RlbChPYmplY3Qgb2JqZWN0KTsKLQlwdWJsaWMgdm9pZCBvcGVuRXh0ZXJuYWxFZGl0b3IoKTsKLQlwdWJsaWMgYm9vbGVhbiBsaW5rQXBwbGljYWJsZSgpOwotCXB1YmxpYyBib29sZWFuIGlzVmFsaWQoKTsKLQlwdWJsaWMgdm9pZCBzaG93UHJldmlldygpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtcmVmYWN0b3Ivb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvcmVmYWN0b3IvV1NETENvbXBvbmVudFJlbmFtZVBhcnRpY2lwYW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1yZWZhY3Rvci9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9yZWZhY3Rvci9XU0RMQ29tcG9uZW50UmVuYW1lUGFydGljaXBhbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWNmYzczZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1yZWZhY3Rvci9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9yZWZhY3Rvci9XU0RMQ29tcG9uZW50UmVuYW1lUGFydGljaXBhbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5yZWZhY3RvcjsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc2VhcmNoLklXU0RMU2VhcmNoQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwucmVmYWN0b3IucmVuYW1lLkNvbXBvbmVudFJlbmFtZUFyZ3VtZW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLnJlZmFjdG9yLnJlbmFtZS5YTUxDb21wb25lbnRSZW5hbWVQYXJ0aWNpcGFudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETmFtZWRDb21wb25lbnQ7Ci0KLS8qKgotICogVGhpcyBwYXJ0aWNpcGFudCB0YWtlcyBjYXNlIG9mIHJlbmFtaW5nIG1hdGNoZXMgdGhhdCBhcmUgWFNEIGNvbXBvbmVudHMKLSAqLwotcHVibGljIGNsYXNzIFdTRExDb21wb25lbnRSZW5hbWVQYXJ0aWNpcGFudCBleHRlbmRzIFhNTENvbXBvbmVudFJlbmFtZVBhcnRpY2lwYW50IHsKLQotCXByb3RlY3RlZCBib29sZWFuIGluaXRpYWxpemUoT2JqZWN0IGVsZW1lbnQpIHsKLQotCQlpZihlbGVtZW50IGluc3RhbmNlb2YgV1NETEVsZW1lbnQgfHwgZWxlbWVudCBpbnN0YW5jZW9mIFhTRE5hbWVkQ29tcG9uZW50KXsKLQkJCWlmKGdldEFyZ3VtZW50cygpIGluc3RhbmNlb2YgQ29tcG9uZW50UmVuYW1lQXJndW1lbnRzKXsKLQkJCQltYXRjaGVzID0gKExpc3QpKChDb21wb25lbnRSZW5hbWVBcmd1bWVudHMpZ2V0QXJndW1lbnRzKCkpLmdldE1hdGNoZXMoKS5nZXQoSVdTRExTZWFyY2hDb25zdGFudHMuV1NETF9OQU1FU1BBQ0UpOwotCQkJfQotCQkJaWYobWF0Y2hlcyAhPSBudWxsKXsKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotCQkKLQkJcmV0dXJuICJXU0RMIGNvbXBvbmVudCByZW5hbWUgcGFydGljaXBhbnQiOyAvLyROT04tTkxTLTEkCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtcmVmYWN0b3Ivb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvcmVmYWN0b3IvYWN0aW9ucy9SZW5hbWVDb21wb25lbnRBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXJlZmFjdG9yL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3JlZmFjdG9yL2FjdGlvbnMvUmVuYW1lQ29tcG9uZW50QWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5Mzk1MjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtcmVmYWN0b3Ivb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvcmVmYWN0b3IvYWN0aW9ucy9SZW5hbWVDb21wb25lbnRBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwucmVmYWN0b3IuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLkluY3JlbWVudGFsUHJvamVjdEJ1aWxkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wYXJ0aWNpcGFudHMuUmVuYW1lUmVmYWN0b3Jpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2UubHRrLnVpLnJlZmFjdG9yaW5nLlJlZmFjdG9yaW5nV2l6YXJkOwotaW1wb3J0IG9yZy5lY2xpcHNlLmx0ay51aS5yZWZhY3RvcmluZy5SZWZhY3RvcmluZ1dpemFyZE9wZW5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLkdsb2JhbEJ1aWxkQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udWkuaW50ZXJuYWwuZGlhbG9ncy5TYXZlRGlydHlGaWxlc0RpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkRlZmluaXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuV1NETEVsZW1lbnRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLldTRExFZGl0b3JQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwudXRpbC5Ob2RlQXNzb2NpYXRpb25NYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLnJlZmFjdG9yLlJlZmFjdG9yaW5nQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwucmVmYWN0b3IuUmVmYWN0b3JpbmdNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLnJlZmFjdG9yLlhNTFJlZmFjdG9yaW5nQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwucmVmYWN0b3IucmVuYW1lLlJlbmFtZUNvbXBvbmVudFByb2Nlc3NvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLnJlZmFjdG9yLndpemFyZC5SZW5hbWVSZWZhY3RvcmluZ1dpemFyZDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQXR0cmlidXRlRGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbmNyZXRlQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RFbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRE5hbWVkQ29tcG9uZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgUmVuYW1lQ29tcG9uZW50QWN0aW9uIGV4dGVuZHMgV1NETFNlbGVjdGlvbkRpc3BhdGNoQWN0aW9uIHsKLQotCXByaXZhdGUgUmVmYWN0b3JpbmdDb21wb25lbnQgc2VsZWN0ZWRDb21wb25lbnQ7Ci0KLQlwdWJsaWMgUmVuYW1lQ29tcG9uZW50QWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uLAotCQkJRGVmaW5pdGlvbiBtb2RlbCkgewotCQlzdXBlcihzZWxlY3Rpb24pOwotCQlzZXRNb2RlbChtb2RlbCk7Ci0JfQotIAotCXByb3RlY3RlZCBib29sZWFuIGRvQ2FuRW5hYmxlWFNEU2VsZWN0aW9uKFhTRE5hbWVkQ29tcG9uZW50IHNlbGVjdGVkT2JqZWN0KSB7Ci0KLQkJc2VsZWN0ZWRDb21wb25lbnQgPSBudWxsOwotCQlpZiAoc2VsZWN0ZWRPYmplY3QgIT0gbnVsbCkgewotCQkJc2VsZWN0ZWRDb21wb25lbnQgPSBuZXcgWE1MUmVmYWN0b3JpbmdDb21wb25lbnQoCi0JCQkJCXNlbGVjdGVkT2JqZWN0LAotCQkJCQkoSURPTUVsZW1lbnQpc2VsZWN0ZWRPYmplY3QuZ2V0RWxlbWVudCgpLCAKLQkJCQkJc2VsZWN0ZWRPYmplY3QuZ2V0TmFtZSgpLAotCQkJCQlzZWxlY3RlZE9iamVjdC5nZXRUYXJnZXROYW1lc3BhY2UoKSk7Ci0JCi0JCQkvLyBpZiBpdCdzIGVsZW1lbnQgcmVmZXJlbmNlLCB0aGVuIHRoaXMgYWN0aW9uIGlzIG5vdCBhcHByb3ByaWF0ZQotCQkJaWYgKHNlbGVjdGVkT2JqZWN0IGluc3RhbmNlb2YgWFNERWxlbWVudERlY2xhcmF0aW9uKSB7Ci0JCQkJWFNERWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnQgPSAoWFNERWxlbWVudERlY2xhcmF0aW9uKSBzZWxlY3RlZE9iamVjdDsKLQkJCQlpZiAoZWxlbWVudC5pc0VsZW1lbnREZWNsYXJhdGlvblJlZmVyZW5jZSgpKSB7Ci0JCQkJCXNlbGVjdGVkQ29tcG9uZW50ID0gbnVsbDsKLQkJCQl9Ci0JCQl9Ci0JCQlpZihzZWxlY3RlZE9iamVjdCBpbnN0YW5jZW9mIFhTRFR5cGVEZWZpbml0aW9uKXsKLQkJCQlYU0RUeXBlRGVmaW5pdGlvbiB0eXBlID0gKFhTRFR5cGVEZWZpbml0aW9uKSBzZWxlY3RlZE9iamVjdDsKLQkJCQlYU0RDb25jcmV0ZUNvbXBvbmVudCBwYXJlbnQgPSB0eXBlLmdldENvbnRhaW5lcigpOwotCQkJCWlmIChwYXJlbnQgaW5zdGFuY2VvZiBYU0RFbGVtZW50RGVjbGFyYXRpb24pIHsKLQkJCQkJWFNERWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnQgPSAoWFNERWxlbWVudERlY2xhcmF0aW9uKSBwYXJlbnQ7Ci0JCQkJCWlmKGVsZW1lbnQuZ2V0QW5vbnltb3VzVHlwZURlZmluaXRpb24oKS5lcXVhbHModHlwZSkpewotCQkJCQkJc2VsZWN0ZWRDb21wb25lbnQgPSBudWxsOwotCQkJCQl9Ci0JCQkJfQotCQkJCWVsc2UgaWYocGFyZW50IGluc3RhbmNlb2YgWFNEQXR0cmlidXRlRGVjbGFyYXRpb24pIHsKLQkJCQkJWFNEQXR0cmlidXRlRGVjbGFyYXRpb24gZWxlbWVudCA9IChYU0RBdHRyaWJ1dGVEZWNsYXJhdGlvbikgcGFyZW50OwotCQkJCQlpZihlbGVtZW50LmdldEFub255bW91c1R5cGVEZWZpbml0aW9uKCkuZXF1YWxzKHR5cGUpKXsKLQkJCQkJCXNlbGVjdGVkQ29tcG9uZW50ID0gbnVsbDsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCi0JCXJldHVybiBjYW5SdW4oKTsKLQl9Ci0JCi0JcHJvdGVjdGVkIGJvb2xlYW4gZG9DYW5FbmFibGVXU0RMU2VsZWN0aW9uKFdTRExFbGVtZW50IHNlbGVjdGVkT2JqZWN0KSB7Ci0KLQkJc2VsZWN0ZWRDb21wb25lbnQgPSBudWxsOwotCQlTdHJpbmcgbG9jYWxOYW1lID0gbnVsbDsKLQkJU3RyaW5nIG5hbWVzcGFjZSA9IG51bGw7IAotCQlpZiAoc2VsZWN0ZWRPYmplY3QgaW5zdGFuY2VvZiBCaW5kaW5nKXsKLQkJCWxvY2FsTmFtZSA9ICgoQmluZGluZylzZWxlY3RlZE9iamVjdCkuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLQkJCW5hbWVzcGFjZSA9ICgoQmluZGluZylzZWxlY3RlZE9iamVjdCkuZ2V0UU5hbWUoKS5nZXROYW1lc3BhY2VVUkkoKTsKLQkJfQotCQllbHNlIGlmIChzZWxlY3RlZE9iamVjdCBpbnN0YW5jZW9mIFBvcnRUeXBlKXsKLQkJCWxvY2FsTmFtZSA9ICgoUG9ydFR5cGUpc2VsZWN0ZWRPYmplY3QpLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0JCQluYW1lc3BhY2UgPSAoKFBvcnRUeXBlKXNlbGVjdGVkT2JqZWN0KS5nZXRRTmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpOwotCQl9Ci0JCWVsc2UgaWYgKHNlbGVjdGVkT2JqZWN0IGluc3RhbmNlb2YgTWVzc2FnZSl7Ci0JCQlsb2NhbE5hbWUgPSAoKE1lc3NhZ2Upc2VsZWN0ZWRPYmplY3QpLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0JCQluYW1lc3BhY2UgPSAoKE1lc3NhZ2Upc2VsZWN0ZWRPYmplY3QpLmdldFFOYW1lKCkuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0JCX0KLQkJaWYobG9jYWxOYW1lICE9IG51bGwpewotCQkJc2VsZWN0ZWRDb21wb25lbnQgPSBuZXcgWE1MUmVmYWN0b3JpbmdDb21wb25lbnQoCi0JCQkJCXNlbGVjdGVkT2JqZWN0LAotCQkJCQkoSURPTUVsZW1lbnQpc2VsZWN0ZWRPYmplY3QuZ2V0RWxlbWVudCgpLCAKLQkJCQkJbG9jYWxOYW1lLAotCQkJCQluYW1lc3BhY2UpOwotCQl9Ci0JCQotCQotCQlyZXR1cm4gY2FuUnVuKCk7Ci0JfQotCi0JcHJvdGVjdGVkIGJvb2xlYW4gY2FuRW5hYmxlKE9iamVjdCBzZWxlY3RlZE9iamVjdCkgewotCi0JCWlmIChzZWxlY3RlZE9iamVjdCBpbnN0YW5jZW9mIFhTRE5hbWVkQ29tcG9uZW50KSB7Ci0JCQlyZXR1cm4gZG9DYW5FbmFibGVYU0RTZWxlY3Rpb24oKFhTRE5hbWVkQ29tcG9uZW50KSBzZWxlY3RlZE9iamVjdCk7Ci0JCX0gZWxzZSBpZihzZWxlY3RlZE9iamVjdCBpbnN0YW5jZW9mIFdTRExFbGVtZW50SW1wbCl7Ci0JCQlyZXR1cm4gZG9DYW5FbmFibGVXU0RMU2VsZWN0aW9uKChXU0RMRWxlbWVudEltcGwpIHNlbGVjdGVkT2JqZWN0KTsKLQkJfQotCQlpZiAoc2VsZWN0ZWRPYmplY3QgaW5zdGFuY2VvZiBFbGVtZW50KSB7Ci0JCQlFbGVtZW50IG5vZGUgPSAoRWxlbWVudCkgc2VsZWN0ZWRPYmplY3Q7Ci0JCQlpZiAoZ2V0RGVmaW5pdGlvbigpICE9IG51bGwpIHsKLQkJCQkvLyBpc3N1ZSAoZWIpICBkZXBlbmRlbmN5IG9uIHV0aWxpdHkgY2xhc3MgdG8gZ2V0IGNvbXBvbmVudCBmcm9tIHRoZSBtb2RlbCBiYXNlZCBvbiBlbGVtZW50Ci0JCQkJT2JqZWN0IGNvbmNyZXRlQ29tcG9uZW50ID0gCShuZXcgTm9kZUFzc29jaWF0aW9uTWFuYWdlcigpKS5nZXRNb2RlbE9iamVjdEZvck5vZGUoZ2V0RGVmaW5pdGlvbigpLCBub2RlKTsKLQkJCQlyZXR1cm4gY2FuRW5hYmxlKGNvbmNyZXRlQ29tcG9uZW50KTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0KLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBjYW5SdW4oKSB7Ci0KLQkJcmV0dXJuIHNlbGVjdGVkQ29tcG9uZW50ICE9IG51bGw7Ci0JfQotCi0JcHVibGljIHZvaWQgcnVuKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7Ci0JCi0gICAgICAgIGJvb2xlYW4gcmMgPSBTYXZlRGlydHlGaWxlc0RpYWxvZy5zYXZlRGlydHlGaWxlcygpOwotICAgICAgICBpZiAoIXJjKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9ICAKLQkJUmVuYW1lQ29tcG9uZW50UHJvY2Vzc29yIHByb2Nlc3NvciA9IG5ldyBSZW5hbWVDb21wb25lbnRQcm9jZXNzb3Ioc2VsZWN0ZWRDb21wb25lbnQsIHNlbGVjdGVkQ29tcG9uZW50LmdldE5hbWUoKSk7Ci0JCVJlbmFtZVJlZmFjdG9yaW5nIHJlZmFjdG9yaW5nID0gbmV3IFJlbmFtZVJlZmFjdG9yaW5nKHByb2Nlc3Nvcik7Ci0JCXRyeSB7Ci0JCQlSZWZhY3RvcmluZ1dpemFyZCB3aXphcmQgPSBuZXcgUmVuYW1lUmVmYWN0b3JpbmdXaXphcmQoCi0JCQkJCXJlZmFjdG9yaW5nLAotCQkJCQlSZWZhY3RvcmluZ01lc3NhZ2VzCi0JCQkJCS5nZXRTdHJpbmcoIlJlbmFtZUNvbXBvbmVudFdpemFyZC5kZWZhdWx0UGFnZVRpdGxlIiksIC8vJE5PTi1OTFMtMSQgVE9ETzogcHJvdmlkZSBjb3JyZWN0IHN0cmluZ3MKLQkJCQkJUmVmYWN0b3JpbmdNZXNzYWdlcwotCQkJCQkuZ2V0U3RyaW5nKCJSZW5hbWVDb21wb25lbnRXaXphcmQuaW5wdXRQYWdlLmRlc2NyaXB0aW9uIiksIC8vJE5PTi1OTFMtMSQKLQkJCQkJbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIHBlcmZvcm1GaW5pc2goKQotICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gcmMgPSBzdXBlci5wZXJmb3JtRmluaXNoKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLygoRGVmaW5pdGlvbkltcGwpZ2V0RGVmaW5pdGlvbigpKS5yZWNvbmNpbGVSZWZlcmVuY2VzKHRydWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJjOwotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIH07ICAgICAgICAKLQkJCVJlZmFjdG9yaW5nV2l6YXJkT3Blbk9wZXJhdGlvbiBvcCA9IG5ldyBSZWZhY3RvcmluZ1dpemFyZE9wZW5PcGVyYXRpb24oCi0JCQkJCXdpemFyZCk7Ci0JCQlvcC5ydW4oV1NETEVkaXRvclBsdWdpbi5nZXRTaGVsbCgpLCB3aXphcmQKLQkJCQkJLmdldERlZmF1bHRQYWdlVGl0bGUoKSk7Ci0JCQl0cmlnZ2VyQnVpbGQoKTsKLSAgICAgICAgICAgIAotCQkJRGlzcGxheS5nZXRDdXJyZW50KCkuYXN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpCi0JCQl7CQkJICAKLQkJCSAgcHVibGljIHZvaWQgcnVuKCkKLQkJCSAgewotCQkJICAgICgoRGVmaW5pdGlvbkltcGwpZ2V0RGVmaW5pdGlvbigpKS5yZWNvbmNpbGVSZWZlcmVuY2VzKHRydWUpOwotCQkJICB9Ci0JCQl9KTsgIAotICAgICAgICAgICAgCi0JCX0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKLQkJCS8vIGRvIG5vdGhpbmcuIFVzZXIgYWN0aW9uIGdvdCBjYW5jZWxsZWQKLQkJfQotCQkKLQkJaWYgKGdldE1vZGVsKCkgaW5zdGFuY2VvZiBEZWZpbml0aW9uSW1wbCkgewotCQkJKChEZWZpbml0aW9uSW1wbCkgZ2V0TW9kZWwoKSkucmVjb25jaWxlUmVmZXJlbmNlcyh0cnVlKTsKLQkJfQotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCB0cmlnZ2VyQnVpbGQoKSB7Ci0JCWlmIChSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0RGVzY3JpcHRpb24oKS5pc0F1dG9CdWlsZGluZygpKSB7Ci0JCQluZXcgR2xvYmFsQnVpbGRBY3Rpb24oV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFdvcmtiZW5jaCgpCi0JCQkJCS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKSwKLQkJCQkJSW5jcmVtZW50YWxQcm9qZWN0QnVpbGRlci5JTkNSRU1FTlRBTF9CVUlMRCkucnVuKCk7Ci0JCX0KLQl9Ci0KLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXJlZmFjdG9yL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3JlZmFjdG9yL2FjdGlvbnMvV1NETFJlZmFjdG9yQWN0aW9uR3JvdXAuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXJlZmFjdG9yL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3JlZmFjdG9yL2FjdGlvbnMvV1NETFJlZmFjdG9yQWN0aW9uR3JvdXAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Q0YTcxNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1yZWZhY3Rvci9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9yZWZhY3Rvci9hY3Rpb25zL1dTRExSZWZhY3RvckFjdGlvbkdyb3VwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwucmVmYWN0b3IuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLnJlZmFjdG9yLmFjdGlvbnMuUmVuYW1lQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwucmVmYWN0b3Iud2l6YXJkLlJlZmFjdG9yQWN0aW9uR3JvdXA7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMUmVmYWN0b3JBY3Rpb25Hcm91cCBleHRlbmRzIFJlZmFjdG9yQWN0aW9uR3JvdXAgewotCi0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVOQU1FX0VMRU1FTlQgPSAib3JnLmVjbGlwc2Uud3N0LndzZGwudWkucmVmYWN0b3IucmVuYW1lLmVsZW1lbnQiOyAvLyROT04tTkxTLTEkCi0KLQkKLQlwdWJsaWMgV1NETFJlZmFjdG9yQWN0aW9uR3JvdXAoSVNlbGVjdGlvbiBzZWxlY3Rpb24sCi0JCQlEZWZpbml0aW9uIGRlZmluaXRpb24pIHsKLQkJCi0JCXN1cGVyKHNlbGVjdGlvbik7IAotCSAgCWlmKCBkZWZpbml0aW9uICE9IG51bGwpewotCQkJZkVkaXRvckFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlSZW5hbWVDb21wb25lbnRBY3Rpb24gYWN0aW9uID0gbmV3IFJlbmFtZUNvbXBvbmVudEFjdGlvbihzZWxlY3Rpb24sIGRlZmluaXRpb24pOwotCQkJZlJlbmFtZUFjdGlvbiA9IG5ldyBSZW5hbWVBY3Rpb24oc2VsZWN0aW9uKTsKLQkJCWZSZW5hbWVBY3Rpb24uc2V0UmVuYW1lQ29tcG9uZW50QWN0aW9uKGFjdGlvbik7Ci0JCQlmUmVuYW1lQWN0aW9uLnNldEFjdGlvbkRlZmluaXRpb25JZChSRU5BTUVfRUxFTUVOVCk7Ci0JCQlmRWRpdG9yQWN0aW9ucy5hZGQoZlJlbmFtZUFjdGlvbik7Ci0JCQlpbml0QWN0aW9uKGZSZW5hbWVBY3Rpb24sIHNlbGVjdGlvbik7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotCQkvL2Rpc3Bvc2VBY3Rpb24oZlJlbmFtZUFjdGlvbiwgZlNlbGVjdGlvblByb3ZpZGVyKTsKLQkJc3VwZXIuZGlzcG9zZSgpOwotCX0KLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXJlZmFjdG9yL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3JlZmFjdG9yL2FjdGlvbnMvV1NETFJlZmFjdG9yR3JvdXBBY3Rpb25EZWxlZ2F0ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtcmVmYWN0b3Ivb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvcmVmYWN0b3IvYWN0aW9ucy9XU0RMUmVmYWN0b3JHcm91cEFjdGlvbkRlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyNDVmOWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtcmVmYWN0b3Ivb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvcmVmYWN0b3IvYWN0aW9ucy9XU0RMUmVmYWN0b3JHcm91cEFjdGlvbkRlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwucmVmYWN0b3IuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5NZW51OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0U2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLklTZWxlY3Rpb25NYXBwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5yZWZhY3Rvci53aXphcmQuUmVmYWN0b3JBY3Rpb25Hcm91cDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLnJlZmFjdG9yLndpemFyZC5SZWZhY3Rvckdyb3VwQWN0aW9uRGVsZWdhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5yZWZhY3Rvci53aXphcmQuUmVmYWN0b3JHcm91cFN1Yk1lbnU7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMUmVmYWN0b3JHcm91cEFjdGlvbkRlbGVnYXRlIGV4dGVuZHMgUmVmYWN0b3JHcm91cEFjdGlvbkRlbGVnYXRlCi17Ci0gIHB1YmxpYyBXU0RMUmVmYWN0b3JHcm91cEFjdGlvbkRlbGVnYXRlKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLSAgLyoqCi0gICAqIEZpbGxzIHRoZSBtZW51IHdpdGggYXBwbGljYWJsZSByZWZhY3RvciBzdWItbWVudWVzCi0gICAqIAotICAgKiBAcGFyYW0gbWVudQotICAgKiAgICAgICAgICBUaGUgbWVudSB0byBmaWxsCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBmaWxsTWVudShNZW51IG1lbnUpCi0gIHsKLSAgICBpZiAoZlNlbGVjdGlvbiA9PSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHdvcmtiZW5jaFBhcnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJV29ya2JlbmNoUGFydFNpdGUgc2l0ZSA9IHdvcmtiZW5jaFBhcnQuZ2V0U2l0ZSgpOwotICAgICAgaWYgKHNpdGUgPT0gbnVsbCkKLSAgICAgICAgcmV0dXJuOwotICAgICAgSUVkaXRvclBhcnQgZWRpdG9yID0gc2l0ZS5nZXRQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0gICAgICBpZiAoZWRpdG9yICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIElTZWxlY3Rpb25NYXBwZXIgbWFwcGVyID0gKElTZWxlY3Rpb25NYXBwZXIpIGVkaXRvci5nZXRBZGFwdGVyKElTZWxlY3Rpb25NYXBwZXIuY2xhc3MpOwotICAgICAgICBJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1hcHBlciAhPSBudWxsID8gbWFwcGVyLm1hcFNlbGVjdGlvbihmU2VsZWN0aW9uKSA6IGZTZWxlY3Rpb247Ci0gICAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKSBlZGl0b3IuZ2V0QWRhcHRlcihEZWZpbml0aW9uLmNsYXNzKTsKLSAgICAgICAgaWYgKGRlZmluaXRpb24gIT0gbnVsbCkKLSAgICAgICAgeyAgCi0gICAgICAgICAgUmVmYWN0b3JBY3Rpb25Hcm91cCByZWZhY3Rvck1lbnVHcm91cCA9IG5ldyBXU0RMUmVmYWN0b3JBY3Rpb25Hcm91cChzZWxlY3Rpb24sIGRlZmluaXRpb24pOwotICAgICAgICAgIFJlZmFjdG9yR3JvdXBTdWJNZW51IHN1Yk1lbnUgPSBuZXcgUmVmYWN0b3JHcm91cFN1Yk1lbnUocmVmYWN0b3JNZW51R3JvdXApOwotICAgICAgICAgIHN1Yk1lbnUuZmlsbChtZW51LCAtMSk7Ci0gICAgICAgIH0gIAotICAgICAgfQotICAgIH0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXJlZmFjdG9yL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3JlZmFjdG9yL2FjdGlvbnMvV1NETFNlbGVjdGlvbkRpc3BhdGNoQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1yZWZhY3Rvci9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9yZWZhY3Rvci9hY3Rpb25zL1dTRExTZWxlY3Rpb25EaXNwYXRjaEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODBmNjM0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXJlZmFjdG9yL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3JlZmFjdG9yL2FjdGlvbnMvV1NETFNlbGVjdGlvbkRpc3BhdGNoQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwucmVmYWN0b3IuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwucmVmYWN0b3IuYWN0aW9ucy5TZWxlY3Rpb25EaXNwYXRjaEFjdGlvbjsKLQotCi1wdWJsaWMgY2xhc3MgV1NETFNlbGVjdGlvbkRpc3BhdGNoQWN0aW9uIGV4dGVuZHMgU2VsZWN0aW9uRGlzcGF0Y2hBY3Rpb24KLXsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRU5BTUVfRUxFTUVOVCA9ICJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5yZWZhY3Rvci5yZW5hbWUuZWxlbWVudCI7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBXU0RMU2VsZWN0aW9uRGlzcGF0Y2hBY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pCi0JewotCQlzdXBlcihzZWxlY3Rpb24pOwotCX0KLQkKLQlwcm90ZWN0ZWQgRGVmaW5pdGlvbiBnZXREZWZpbml0aW9uKCl7Ci0JCU9iamVjdCBtb2RlbCA9IGdldE1vZGVsKCk7Ci0JCWlmKG1vZGVsIGluc3RhbmNlb2YgRGVmaW5pdGlvbikKLQkJewotCQkJcmV0dXJuIChEZWZpbml0aW9uKSBtb2RlbDsKLQkJfQotCQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtcmVmYWN0b3Ivb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvc2VhcmNoL0lXU0RMU2VhcmNoQ29uc3RhbnRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1yZWZhY3Rvci9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zZWFyY2gvSVdTRExTZWFyY2hDb25zdGFudHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM2YzVjNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1yZWZhY3Rvci9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zZWFyY2gvSVdTRExTZWFyY2hDb25zdGFudHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5zZWFyY2g7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvcmUuc2VhcmNoLnBhdHRlcm4uUXVhbGlmaWVkTmFtZTsKLQotCi1wdWJsaWMgaW50ZXJmYWNlIElXU0RMU2VhcmNoQ29uc3RhbnRzIHsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFdTRExfTkFNRVNQQUNFID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFhNTFNDSEVNQV9OQU1FU1BBQ0UgPSAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiOyAvLyROT04tTkxTLTEkCi0JCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9DT05URU5UX1RZUEVfSUQgPSAib3JnLmVjbGlwc2Uud3N0LndzZGwud3NkbHNvdXJjZSI7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgUXVhbGlmaWVkTmFtZSBNRVNTQUdFX01FVEFfTkFNRSA9IG5ldyBRdWFsaWZpZWROYW1lKAotCQkJV1NETF9OQU1FU1BBQ0UsICJtZXNzYWdlIik7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgUXVhbGlmaWVkTmFtZSBQT1JUX1RZUEVfTUVUQV9OQU1FID0gbmV3IFF1YWxpZmllZE5hbWUoCi0JCQlXU0RMX05BTUVTUEFDRSwgInBvcnRUeXBlIik7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgUXVhbGlmaWVkTmFtZSBCSU5ESU5HX01FVEFfTkFNRSA9IG5ldyBRdWFsaWZpZWROYW1lKAotCQkJV1NETF9OQU1FU1BBQ0UsICJiaW5kaW5nIik7IC8vJE5PTi1OTFMtMSQKLQotCQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1yZWZhY3Rvci9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zZWFyY2gvV1NETFNlYXJjaENvbnRyaWJ1dG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1yZWZhY3Rvci9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zZWFyY2gvV1NETFNlYXJjaENvbnRyaWJ1dG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjZDIzMGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtcmVmYWN0b3Ivb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvc2VhcmNoL1dTRExTZWFyY2hDb250cmlidXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnNlYXJjaDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvcmUuc2VhcmNoLnBhdHRlcm4uU2VhcmNoUGF0dGVybjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuc2VhcmNoLkNvbXBvbmVudFNlYXJjaENvbnRyaWJ1dG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5zZWFyY2guWE1MU2VhcmNoUGF0dGVybjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLnNlYXJjaC5JWFNEU2VhcmNoQ29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgV1NETFNlYXJjaENvbnRyaWJ1dG9yIGV4dGVuZHMgQ29tcG9uZW50U2VhcmNoQ29udHJpYnV0b3IgewotCi0KLQlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRGVjbGFyYXRpb25zKCkgewotCi0JCWRlY2xhcmF0aW9ucyA9IG5ldyBIYXNoTWFwKCk7Ci0JCVN0cmluZyBucyA9IElXU0RMU2VhcmNoQ29uc3RhbnRzLldTRExfTkFNRVNQQUNFOwotCi0JCVNlYXJjaFBhdHRlcm4gcGF0dGVybiA9IG5ldyBYTUxTZWFyY2hQYXR0ZXJuKG5zLCAibWVzc2FnZSIsICJuYW1lIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQlkZWNsYXJhdGlvbnMucHV0KElXU0RMU2VhcmNoQ29uc3RhbnRzLk1FU1NBR0VfTUVUQV9OQU1FLCBwYXR0ZXJuKTsKLQotCQlwYXR0ZXJuID0gbmV3IFhNTFNlYXJjaFBhdHRlcm4oIG5zLCAicG9ydFR5cGUiLCAibmFtZSIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJZGVjbGFyYXRpb25zLnB1dChJV1NETFNlYXJjaENvbnN0YW50cy5QT1JUX1RZUEVfTUVUQV9OQU1FLCBwYXR0ZXJuKTsKLQotCQlwYXR0ZXJuID0gbmV3IFhNTFNlYXJjaFBhdHRlcm4obnMsICJiaW5kaW5nIiwgIm5hbWUiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCWRlY2xhcmF0aW9ucy5wdXQoSVdTRExTZWFyY2hDb25zdGFudHMuQklORElOR19NRVRBX05BTUUsIHBhdHRlcm4pOwotCi0JfQotCi0JcHJvdGVjdGVkIHZvaWQgIGluaXRpYWxpemVSZWZlcmVuY2VzKCkgewotCi0JCXJlZmVyZW5jZXMgPSBuZXcgSGFzaE1hcCgpOwotCQlTdHJpbmcgbnMgPSBJV1NETFNlYXJjaENvbnN0YW50cy5XU0RMX05BTUVTUEFDRTsKLQotCQlMaXN0IHBhdHRlcm5zID0gbmV3IEFycmF5TGlzdCgpOwotCQlwYXR0ZXJucy5hZGQobmV3IFhNTFNlYXJjaFBhdHRlcm4oIG5zLCAicGFydCIsICJlbGVtZW50IikpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJcmVmZXJlbmNlcy5wdXQoSVhTRFNlYXJjaENvbnN0YW50cy5FTEVNRU5UX01FVEFfTkFNRSwgcGF0dGVybnMpOwotCi0JCXBhdHRlcm5zID0gbmV3IEFycmF5TGlzdCgpOwotCQlwYXR0ZXJucy5hZGQobmV3IFhNTFNlYXJjaFBhdHRlcm4obnMsICJwYXJ0IiwgInR5cGUiKSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQlyZWZlcmVuY2VzLnB1dChJWFNEU2VhcmNoQ29uc3RhbnRzLkNPTVBMRVhfVFlQRV9NRVRBX05BTUUsIHBhdHRlcm5zKTsKLQotCQlwYXR0ZXJucyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJcGF0dGVybnMuYWRkKG5ldyBYTUxTZWFyY2hQYXR0ZXJuKG5zLCAicGFydCIsICJ0eXBlIikpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJcmVmZXJlbmNlcy5wdXQoSVhTRFNlYXJjaENvbnN0YW50cy5TSU1QTEVfVFlQRV9NRVRBX05BTUUsIHBhdHRlcm5zKTsKLQotCQlwYXR0ZXJucyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJcGF0dGVybnMuYWRkKG5ldyBYTUxTZWFyY2hQYXR0ZXJuKG5zLCAiaW5wdXQiLCAibWVzc2FnZSIpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCXBhdHRlcm5zLmFkZChuZXcgWE1MU2VhcmNoUGF0dGVybihucywgIm91dHB1dCIsICJtZXNzYWdlIikpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJcGF0dGVybnMuYWRkKG5ldyBYTUxTZWFyY2hQYXR0ZXJuKG5zLCAiZmF1bHQiLCAibWVzc2FnZSIpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCXJlZmVyZW5jZXMucHV0KElXU0RMU2VhcmNoQ29uc3RhbnRzLk1FU1NBR0VfTUVUQV9OQU1FLCBwYXR0ZXJucyk7Ci0KLQkJcGF0dGVybnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCXBhdHRlcm5zLmFkZChuZXcgWE1MU2VhcmNoUGF0dGVybihucywgImJpbmRpbmciLCAidHlwZSIpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCXJlZmVyZW5jZXMucHV0KElXU0RMU2VhcmNoQ29uc3RhbnRzLlBPUlRfVFlQRV9NRVRBX05BTUUsIHBhdHRlcm5zKTsKLQotCQlwYXR0ZXJucyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJcGF0dGVybnMuYWRkKG5ldyBYTUxTZWFyY2hQYXR0ZXJuKCBucywgInBvcnQiLCAiYmluZGluZyIpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCXJlZmVyZW5jZXMucHV0KElXU0RMU2VhcmNoQ29uc3RhbnRzLkJJTkRJTkdfTUVUQV9OQU1FLCBwYXR0ZXJucyk7Ci0JfQotCQotCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVTdXBwb3J0ZWROYW1lc3BhY2VzKCkgewotCQluYW1lc3BhY2VzID0gbmV3IFN0cmluZ1tdeyBJWFNEU2VhcmNoQ29uc3RhbnRzLlhNTFNDSEVNQV9OQU1FU1BBQ0UsIElXU0RMU2VhcmNoQ29uc3RhbnRzLldTRExfTkFNRVNQQUNFfTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXJlZmFjdG9yL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3NlYXJjaC9XU0RMU2VhcmNoUGFydGljaXBhbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXJlZmFjdG9yL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3NlYXJjaC9XU0RMU2VhcmNoUGFydGljaXBhbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTAyNTUyMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1yZWZhY3Rvci9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zZWFyY2gvV1NETFNlYXJjaFBhcnRpY2lwYW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnNlYXJjaDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29yZS5zZWFyY2guU2VhcmNoUGFydGljaXBhbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb3JlLnNlYXJjaC5TZWFyY2hQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb3JlLnNlYXJjaC5wYXR0ZXJuLlNlYXJjaFBhdHRlcm47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnNlYXJjaC5Db21wb25lbnRTZWFyY2hDb250cmlidXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuc2VhcmNoLlhNTENvbXBvbmVudERlY2xhcmF0aW9uUGF0dGVybjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuc2VhcmNoLlhNTENvbXBvbmVudFJlZmVyZW5jZVBhdHRlcm47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnNlYXJjaC5YTUxDb21wb25lbnRTZWFyY2hQYXR0ZXJuOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5zZWFyY2guWE1MU2VhcmNoUGFydGljaXBhbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnNlYXJjaC5YTUxTZWFyY2hQYXR0ZXJuOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuc2VhcmNoLklYU0RTZWFyY2hDb25zdGFudHM7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMU2VhcmNoUGFydGljaXBhbnQgZXh0ZW5kcyBYTUxTZWFyY2hQYXJ0aWNpcGFudCB7Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIElEID0gIm9yZy5lY2xpcHNlLndzdC53c2RsLnNlYXJjaC5XU0RMU2VhcmNoUGFydGljaXBhbnQiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIFhTRF9QQVJUSUNJUEFOTlRfSUQgPSAib3JnLmVjbGlwc2Uud3N0LnhzZC5zZWFyY2guWFNEU2VhcmNoUGFydGljaXBhbnQiOyAvLyROT04tTkxTLTEkCi0KLQkKLQlwdWJsaWMgV1NETFNlYXJjaFBhcnRpY2lwYW50KCkKLQl7Ci0JICBzdXBlcigpOwotICAgICAgaWQgPSBJRDsKLQl9Ci0JCi0JcHVibGljIFN0cmluZ1tdIGdldFN1cHBvcnRlZENvbnRlbnRUeXBlcygpCi0JewotCSAgU3RyaW5nW10gcmVzdWx0ID0geyAib3JnLmVjbGlwc2Uud3N0LndzZGwud3NkbHNvdXJjZSIgfTsgLy8kTk9OLU5MUy0xJAotCSAgcmV0dXJuIHJlc3VsdDsKLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gaXNBcHBsaWNhYmxlKFNlYXJjaFBhdHRlcm4gcGF0dGVybiwgTWFwIHNlYXJjaE9wdGlvbnMpCi0JewotCQlpZihwYXR0ZXJuIGluc3RhbmNlb2YgWE1MQ29tcG9uZW50U2VhcmNoUGF0dGVybiApewotCQkJWE1MQ29tcG9uZW50U2VhcmNoUGF0dGVybiBjb21wb25lbnRQYXR0ZXJuID0gKFhNTENvbXBvbmVudFNlYXJjaFBhdHRlcm4pcGF0dGVybjsKLQkJCVN0cmluZyBuYW1lc3BhY2UgPSBjb21wb25lbnRQYXR0ZXJuLmdldE1ldGFOYW1lKCkuZ2V0TmFtZXNwYWNlKCk7Ci0JCQlpZihJV1NETFNlYXJjaENvbnN0YW50cy5XU0RMX05BTUVTUEFDRS5lcXVhbHMobmFtZXNwYWNlKSB8fAotCQkJCQlJWFNEU2VhcmNoQ29uc3RhbnRzLlhNTFNDSEVNQV9OQU1FU1BBQ0UuZXF1YWxzKG5hbWVzcGFjZSkpewotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9CQotCQotCXB1YmxpYyBDb21wb25lbnRTZWFyY2hDb250cmlidXRvciBnZXRTZWFyY2hDb250cmlidXRvcigpIHsKLQotCQlyZXR1cm4gbmV3IFdTRExTZWFyY2hDb250cmlidXRvcigpOwotCX0KLQkKLSAgcHVibGljIHZvaWQgYmVnaW5TZWFyY2hpbmcoU2VhcmNoUGF0dGVybiBwYXR0ZXJuLCBNYXAgc2VhcmNoT3B0aW9ucykgewotCQkKLQkJc3VwZXIuYmVnaW5TZWFyY2hpbmcocGF0dGVybiwgc2VhcmNoT3B0aW9ucyk7Ci0JCUxpc3QgcGF0dGVybnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWlmKHBhdHRlcm4gaW5zdGFuY2VvZiBYTUxDb21wb25lbnREZWNsYXJhdGlvblBhdHRlcm4pewotCQkJCi0JCQlYTUxDb21wb25lbnREZWNsYXJhdGlvblBhdHRlcm4gY29tcG9uZW50UGF0dGVybiA9IChYTUxDb21wb25lbnREZWNsYXJhdGlvblBhdHRlcm4pcGF0dGVybjsKLQkJCWlmKElXU0RMU2VhcmNoQ29uc3RhbnRzLldTRExfTkFNRVNQQUNFLmVxdWFscyhjb21wb25lbnRQYXR0ZXJuLmdldE1ldGFOYW1lKCkuZ2V0TmFtZXNwYWNlKCkpKXsKLQkJCQlYTUxTZWFyY2hQYXR0ZXJuIGNoaWxkUGF0dGVybiA9IGdldFNlYXJjaENvbnRyaWJ1dG9yKCkuZ2V0RGVjbGFyYXRpb25QYXR0ZXJuKGNvbXBvbmVudFBhdHRlcm4uZ2V0TWV0YU5hbWUoKSk7Ci0JCQkJaWYoY2hpbGRQYXR0ZXJuICE9IG51bGwpewotCQkJCQljaGlsZFBhdHRlcm4uc2V0U2VhcmNoTmFtZShjb21wb25lbnRQYXR0ZXJuLmdldE5hbWUoKS5nZXRMb2NhbE5hbWUoKSk7Ci0JCQkJCWNoaWxkUGF0dGVybi5zZXRTZWFyY2hOYW1lc3BhY2UoY29tcG9uZW50UGF0dGVybi5nZXROYW1lKCkuZ2V0TmFtZXNwYWNlKCkpOwotCSAgICAgCQkJcGF0dGVybnMuYWRkKGNoaWxkUGF0dGVybik7Ci0JCQkJfQotCQkJfQotCQkJZWxzZSBpZihJWFNEU2VhcmNoQ29uc3RhbnRzLlhNTFNDSEVNQV9OQU1FU1BBQ0UuZXF1YWxzKGNvbXBvbmVudFBhdHRlcm4uZ2V0TWV0YU5hbWUoKS5nZXROYW1lc3BhY2UoKSkpewotCQkJCVNlYXJjaFBhcnRpY2lwYW50IHhzZFBhcnRpY2lwYW50ID0gU2VhcmNoUGx1Z2luLmdldERlZmF1bHQoKS5nZXRTZWFyY2hQYXJ0aWNpcGFudChYU0RfUEFSVElDSVBBTk5UX0lEKTsKLQkJCQlpZih4c2RQYXJ0aWNpcGFudCBpbnN0YW5jZW9mIFhNTFNlYXJjaFBhcnRpY2lwYW50KXsKLQkJCQkJQ29tcG9uZW50U2VhcmNoQ29udHJpYnV0b3IgeHNkQ29udHJpYnV0b3IgPSAoKFhNTFNlYXJjaFBhcnRpY2lwYW50KXhzZFBhcnRpY2lwYW50KS5nZXRTZWFyY2hDb250cmlidXRvcigpOwotCQkJCQlpZih4c2RDb250cmlidXRvciAhPSBudWxsKXsKLQkJCQkJCVhNTFNlYXJjaFBhdHRlcm4gY2hpbGRQYXR0ZXJuID0geHNkQ29udHJpYnV0b3IuZ2V0RGVjbGFyYXRpb25QYXR0ZXJuKGNvbXBvbmVudFBhdHRlcm4uZ2V0TWV0YU5hbWUoKSk7Ci0JCQkJCQlpZihjaGlsZFBhdHRlcm4gIT0gbnVsbCl7Ci0JCQkJCQkJY2hpbGRQYXR0ZXJuLnNldFNlYXJjaE5hbWUoY29tcG9uZW50UGF0dGVybi5nZXROYW1lKCkuZ2V0TG9jYWxOYW1lKCkpOwotCQkJCQkJCWNoaWxkUGF0dGVybi5zZXRTZWFyY2hOYW1lc3BhY2UoY29tcG9uZW50UGF0dGVybi5nZXROYW1lKCkuZ2V0TmFtZXNwYWNlKCkpOwotCQkJICAgICAJCQlwYXR0ZXJucy5hZGQoY2hpbGRQYXR0ZXJuKTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWNvbXBvbmVudFBhdHRlcm4uc2V0Q2hpbGRyZW4oKFhNTFNlYXJjaFBhdHRlcm5bXSkgcGF0dGVybnMudG9BcnJheShuZXcgWE1MU2VhcmNoUGF0dGVybltwYXR0ZXJucy5zaXplKCldKSk7Ci0JCQkKLQkJfQotCQllbHNlIGlmKHBhdHRlcm4gaW5zdGFuY2VvZiBYTUxDb21wb25lbnRSZWZlcmVuY2VQYXR0ZXJuKXsKLQkJCVhNTENvbXBvbmVudFJlZmVyZW5jZVBhdHRlcm4gY29tcG9uZW50UGF0dGVybiA9IChYTUxDb21wb25lbnRSZWZlcmVuY2VQYXR0ZXJuKXBhdHRlcm47Ci0JCQlYTUxTZWFyY2hQYXR0ZXJuW10gY2hpbGRQYXR0ZXJucyA9IGdldFNlYXJjaENvbnRyaWJ1dG9yKCkuZ2V0UmVmZXJlbmNlc1BhdHRlcm5zKGNvbXBvbmVudFBhdHRlcm4uZ2V0TWV0YU5hbWUoKSk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkUGF0dGVybnMubGVuZ3RoOyBpKyspIHsKLQkJCQlYTUxTZWFyY2hQYXR0ZXJuIGNoaWxkUGF0dGVybiA9IGNoaWxkUGF0dGVybnNbaV07Ci0JCQkJY2hpbGRQYXR0ZXJuLnNldFNlYXJjaE5hbWUoY29tcG9uZW50UGF0dGVybi5nZXROYW1lKCkuZ2V0TG9jYWxOYW1lKCkpOwotCQkJCWNoaWxkUGF0dGVybi5zZXRTZWFyY2hOYW1lc3BhY2UoY29tcG9uZW50UGF0dGVybi5nZXROYW1lKCkuZ2V0TmFtZXNwYWNlKCkpOwkKLQkJCQlwYXR0ZXJucy5hZGQoY2hpbGRQYXR0ZXJuKTsKLQkJCX0KLQkJCVNlYXJjaFBhcnRpY2lwYW50IHhzZFBhcnRpY2lwYW50ID0gU2VhcmNoUGx1Z2luLmdldERlZmF1bHQoKS5nZXRTZWFyY2hQYXJ0aWNpcGFudChYU0RfUEFSVElDSVBBTk5UX0lEKTsKLQkJCWlmKHhzZFBhcnRpY2lwYW50IGluc3RhbmNlb2YgWE1MU2VhcmNoUGFydGljaXBhbnQpewotCQkJCUNvbXBvbmVudFNlYXJjaENvbnRyaWJ1dG9yIHhzZENvbnRyaWJ1dG9yID0gKChYTUxTZWFyY2hQYXJ0aWNpcGFudCl4c2RQYXJ0aWNpcGFudCkuZ2V0U2VhcmNoQ29udHJpYnV0b3IoKTsKLQkJCQlpZih4c2RDb250cmlidXRvciAhPSBudWxsKXsKLQkJCQkJY2hpbGRQYXR0ZXJucyA9IHhzZENvbnRyaWJ1dG9yLmdldFJlZmVyZW5jZXNQYXR0ZXJucyhjb21wb25lbnRQYXR0ZXJuLmdldE1ldGFOYW1lKCkpOwotCQkJCQlmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkUGF0dGVybnMubGVuZ3RoOyBpKyspIHsKLQkJCQkJCVhNTFNlYXJjaFBhdHRlcm4gY2hpbGRQYXR0ZXJuID0gY2hpbGRQYXR0ZXJuc1tpXTsKLQkJCQkJCWNoaWxkUGF0dGVybi5zZXRTZWFyY2hOYW1lKGNvbXBvbmVudFBhdHRlcm4uZ2V0TmFtZSgpLmdldExvY2FsTmFtZSgpKTsKLQkJCQkJCWNoaWxkUGF0dGVybi5zZXRTZWFyY2hOYW1lc3BhY2UoY29tcG9uZW50UGF0dGVybi5nZXROYW1lKCkuZ2V0TmFtZXNwYWNlKCkpOwkJCi0JCQkJCQlwYXR0ZXJucy5hZGQoY2hpbGRQYXR0ZXJuKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWNvbXBvbmVudFBhdHRlcm4uc2V0Q2hpbGRyZW4oKFhNTFNlYXJjaFBhdHRlcm5bXSkgcGF0dGVybnMudG9BcnJheShuZXcgWE1MU2VhcmNoUGF0dGVybltwYXR0ZXJucy5zaXplKCldKSk7Ci0JCQkKLQkJfQotCQkKLQl9Ci0KLSAgCi0gIAotCQotCQotCQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1zZWFyY2gvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvc2VhcmNoL2FjdGlvbnMvV1NETEZpbmRSZWZlcmVuY2VzQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1zZWFyY2gvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvc2VhcmNoL2FjdGlvbnMvV1NETEZpbmRSZWZlcmVuY2VzQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4MWM3NDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtc2VhcmNoL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3NlYXJjaC9hY3Rpb25zL1dTRExGaW5kUmVmZXJlbmNlc0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5zZWFyY2guYWN0aW9uczsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc2VhcmNoLnVpLk5ld1NlYXJjaFVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRmlsZUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29yZS5zZWFyY2gucGF0dGVybi5RdWFsaWZpZWROYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29yZS5zZWFyY2guc2NvcGUuU2VhcmNoU2NvcGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb3JlLnNlYXJjaC5zY29wZS5Xb3Jrc3BhY2VTZWFyY2hTY29wZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuV1NETEJhc2VBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMUJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuYmFzaWMuVzExSW50ZXJmYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLmJhc2ljLlcxMU1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc2VhcmNoLklXU0RMU2VhcmNoQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuZWRpdG9yLklTZWxlY3Rpb25NYXBwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5zZWFyY2guWFNEU2VhcmNoUXVlcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5zZWFyY2guYWN0aW9ucy5GaW5kQWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgV1NETEZpbmRSZWZlcmVuY2VzQWN0aW9uIGV4dGVuZHMgRmluZEFjdGlvbgotewotCXByaXZhdGUgV1NETEJhc2VBZGFwdGVyIGNvbXBvbmVudDsKLQlwcml2YXRlIElGaWxlIGZpbGU7Ci0JcHJpdmF0ZSBRdWFsaWZpZWROYW1lW10gbmFtZXM7Ci0KLSAgcHVibGljIFdTRExGaW5kUmVmZXJlbmNlc0FjdGlvbihJRWRpdG9yUGFydCBlZGl0b3IpCi0gIHsKLSAgICBzdXBlcihlZGl0b3IpOwotICAgIGluaXQoKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGluaXQoKSB7Ci0JY29tcG9uZW50ID0gZ2V0V1NETE5hbWVkQ29tcG9uZW50KCk7Ci0JZmlsZSA9IGdldEN1cnJlbnRGaWxlKCk7Ci0JbmFtZXMgPSBkZXRlcm1pbmVNZXRhQW5kUXVhbGlmaWVkTmFtZShjb21wb25lbnQpOwotCWlmIChmaWxlID09IG51bGwgfHwgY29tcG9uZW50ID09IG51bGwgfHwgbmFtZXMgPT0gbnVsbCkKLQkgIHNldEVuYWJsZWQoZmFsc2UpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRBY3Rpb25EZWZpbml0aW9uSWQoU3RyaW5nIHN0cmluZykKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIFRvIGJlIHVzZWQgYnkgc3ViY2xhc3MgaW4gaXRzIHJ1bigpIFJldHVybnMgdGhlIGZpbGUgd2hlcmUgdGhlIHNlbGVjdGlvbiBvZgotICAgKiBhIGNvbXBvbmVudCAoZnJvbSB0aGUgdXNlcikgb2NjdXJzIGllLiBSZXR1cm5zIHRoZSBmaWxlIHRoYXQgdGhlIHVzZXIgaXMKLSAgICogY3VycmVudGx5IHdvcmtpbmcgb24uCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBJRmlsZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgY3VycmVudCB3b3JraW5nIGZpbGUuCi0gICAqLwotICBwcm90ZWN0ZWQgSUZpbGUgZ2V0Q3VycmVudEZpbGUoKQotICB7Ci0gICAgaWYgKGVkaXRvciAhPSBudWxsKQotICAgIHsKLSAgICAgIElFZGl0b3JJbnB1dCBpbnB1dCA9IGVkaXRvci5nZXRFZGl0b3JJbnB1dCgpOwotICAgICAgaWYgKGlucHV0IGluc3RhbmNlb2YgSUZpbGVFZGl0b3JJbnB1dCkKLSAgICAgIHsKLSAgICAgICAgSUZpbGVFZGl0b3JJbnB1dCBmaWxlRWRpdG9ySW5wdXQgPSAoSUZpbGVFZGl0b3JJbnB1dCkgaW5wdXQ7Ci0gICAgICAgIHJldHVybiBmaWxlRWRpdG9ySW5wdXQuZ2V0RmlsZSgpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBUbyBiZSB1c2VkIGJ5IHN1YmNsYXNzIGluIGl0cyBydW4oKS4uIERldGVybWluZXMgdGhlIG1ldGFOYW1lIG9mIHRoZSBXU0RMCi0gICAqIGNvbXBvbmVudCBnaXZlbiB0byB0aGlzIG1ldGhvZC4KLSAgICogCi0gICAqIEBwYXJhbSBjb21wb25lbnQKLSAgICogICAgICAgICAgVGhlIGNvbXBvbmVudCBvZiB3aGljaCB3ZSB3YW50IHRvIGRldGVybWluZSB0aGUgbmFtZQotICAgKiBAcmV0dXJuCi0gICAqIAkJVGhlIGZpcnN0IG9uZSBpcyBmb3IgTWV0YU5hbWUvVHlwZSwgc2Vjb25kIGZvciBFbGVtZW50UXVhbGlmaWVkTmFtZQotICAgKi8KLSAgcHJvdGVjdGVkIFF1YWxpZmllZE5hbWVbXSBkZXRlcm1pbmVNZXRhQW5kUXVhbGlmaWVkTmFtZShXU0RMQmFzZUFkYXB0ZXIgY29tcG9uZW50KQotICB7Ci0gICAgUXVhbGlmaWVkTmFtZSBuYW1lc1tdID0gbnVsbDsKLSAgICBRTmFtZSBxTmFtZTsKLQlpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgVzExTWVzc2FnZSApCi0gICAgewotCQluYW1lcyA9IG5ldyBRdWFsaWZpZWROYW1lWzJdOwotICAgIAluYW1lc1swXSA9IElXU0RMU2VhcmNoQ29uc3RhbnRzLk1FU1NBR0VfTUVUQV9OQU1FOwotICAgIAlxTmFtZSA9ICgoTWVzc2FnZSkgY29tcG9uZW50LmdldFRhcmdldCgpKS5nZXRRTmFtZSgpOwotICAgIAluYW1lc1sxXSA9IG5ldyBRdWFsaWZpZWROYW1lKHFOYW1lLmdldE5hbWVzcGFjZVVSSSgpLCBxTmFtZS5nZXRMb2NhbFBhcnQoKSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIFcxMUludGVyZmFjZSkKLSAgICB7Ci0gICAgCW5hbWVzID0gbmV3IFF1YWxpZmllZE5hbWVbMl07Ci0gICAgCW5hbWVzWzBdID0gSVdTRExTZWFyY2hDb25zdGFudHMuUE9SVF9UWVBFX01FVEFfTkFNRTsKLSAgICAJcU5hbWUgPSAoKFBvcnRUeXBlKSBjb21wb25lbnQuZ2V0VGFyZ2V0KCkpLmdldFFOYW1lKCk7Ci0gICAgCW5hbWVzWzFdID0gbmV3IFF1YWxpZmllZE5hbWUocU5hbWUuZ2V0TmFtZXNwYWNlVVJJKCksIHFOYW1lLmdldExvY2FsUGFydCgpKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgVzExQmluZGluZykKLSAgICB7Ci0gICAgCW5hbWVzID0gbmV3IFF1YWxpZmllZE5hbWVbMl07Ci0gICAgCW5hbWVzWzBdID0gSVdTRExTZWFyY2hDb25zdGFudHMuQklORElOR19NRVRBX05BTUU7Ci0gICAgCXFOYW1lID0gKChCaW5kaW5nKSBjb21wb25lbnQuZ2V0VGFyZ2V0KCkpLmdldFFOYW1lKCk7Ci0gICAgCW5hbWVzWzFdID0gbmV3IFF1YWxpZmllZE5hbWUocU5hbWUuZ2V0TmFtZXNwYWNlVVJJKCksIHFOYW1lLmdldExvY2FsUGFydCgpKTsKLQotICAgIH0KLSAgICByZXR1cm4gbmFtZXM7Ci0gIH0KLQotICBwcm90ZWN0ZWQgV1NETEJhc2VBZGFwdGVyIGdldFdTRExOYW1lZENvbXBvbmVudCgpCi0gIHsKLSAgICBpZiAoZWRpdG9yICE9IG51bGwpCi0gICAgewotICAgICAgSVNlbGVjdGlvblByb3ZpZGVyIHByb3ZpZGVyID0gKElTZWxlY3Rpb25Qcm92aWRlcikgZWRpdG9yLmdldEFkYXB0ZXIoSVNlbGVjdGlvblByb3ZpZGVyLmNsYXNzKTsKLSAgICAgIElTZWxlY3Rpb25NYXBwZXIgbWFwcGVyID0gKElTZWxlY3Rpb25NYXBwZXIpIGVkaXRvci5nZXRBZGFwdGVyKElTZWxlY3Rpb25NYXBwZXIuY2xhc3MpOwotICAgICAgaWYgKHByb3ZpZGVyICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIElTZWxlY3Rpb24gc2VsZWN0aW9uID0gcHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCk7Ci0gICAgICAgIGlmIChtYXBwZXIgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHNlbGVjdGlvbiA9IG1hcHBlci5tYXBTZWxlY3Rpb24oc2VsZWN0aW9uKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoc2VsZWN0aW9uICE9IG51bGwgJiYgc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pCi0gICAgICAgIHsKLSAgICAgICAgICBJU3RydWN0dXJlZFNlbGVjdGlvbiBzID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBzZWxlY3Rpb247Ci0gICAgICAgICAgT2JqZWN0IG8gPSBzLmdldEZpcnN0RWxlbWVudCgpOwotICAgICAgICAgIGlmIChvICE9IG51bGwgJiYgbyBpbnN0YW5jZW9mIFdTRExCYXNlQWRhcHRlcikKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKFdTRExCYXNlQWRhcHRlcikgbzsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gVGhlIGV4cGVjdGVkIGNvbXBvbmVudCB3ZSBnZXQgZnJvbSB0aGUgZWRpdG9yIGRvZXMgbm90IG1lZXQKLSAgICAvLyBvdXIgZXhwZWN0YXRpb24KLSAgICByZXR1cm4gbnVsbDsKLSAgfSAgCi0KLSAgcHVibGljIHZvaWQgcnVuKCkKLSAgewotICAgIFN0cmluZyBwYXR0ZXJuID0gIiI7IC8vJE5PTi1OTFMtMSQKLSAgICBpZiAoZmlsZSAhPSBudWxsICYmIGNvbXBvbmVudCAhPSBudWxsICYmIG5hbWVzICE9IG51bGwpCi0gICAgewotICAgICAgU2VhcmNoU2NvcGUgc2NvcGUgPSBuZXcgV29ya3NwYWNlU2VhcmNoU2NvcGUoKTsKLSAgICAgIFN0cmluZyBzY29wZURlc2NyaXB0aW9uID0gIldvcmtzcGFjZSI7Ci0gICAgICBYU0RTZWFyY2hRdWVyeSBzZWFyY2hRdWVyeSA9IG5ldyBYU0RTZWFyY2hRdWVyeShwYXR0ZXJuLCBmaWxlLCBuYW1lc1sxXSwgCi0gICAgCQkgIG5hbWVzWzBdLCBYU0RTZWFyY2hRdWVyeS5MSU1JVF9UT19SRUZFUkVOQ0VTLCBzY29wZSwgc2NvcGVEZXNjcmlwdGlvbik7Ci0gICAgICBOZXdTZWFyY2hVSS5hY3RpdmF0ZVNlYXJjaFJlc3VsdFZpZXcoKTsKLSAgICAgIE5ld1NlYXJjaFVJLnJ1blF1ZXJ5SW5CYWNrZ3JvdW5kKHNlYXJjaFF1ZXJ5KTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXNlYXJjaC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zZWFyY2gvYWN0aW9ucy9XU0RMRmluZFJlZmVyZW5jZXNJblByb2plY3RBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXNlYXJjaC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zZWFyY2gvYWN0aW9ucy9XU0RMRmluZFJlZmVyZW5jZXNJblByb2plY3RBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQ4NDBmMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1zZWFyY2gvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvc2VhcmNoL2FjdGlvbnMvV1NETEZpbmRSZWZlcmVuY2VzSW5Qcm9qZWN0QWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc2VhcmNoLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc2VhcmNoLnVpLk5ld1NlYXJjaFVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29yZS5zZWFyY2gucGF0dGVybi5RdWFsaWZpZWROYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29yZS5zZWFyY2guc2NvcGUuUHJvamVjdFNlYXJjaFNjb3BlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLmFkYXB0ZXJzLldTRExCYXNlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLnNlYXJjaC5YU0RTZWFyY2hRdWVyeTsKLQotcHVibGljIGNsYXNzIFdTRExGaW5kUmVmZXJlbmNlc0luUHJvamVjdEFjdGlvbiBleHRlbmRzIFdTRExGaW5kUmVmZXJlbmNlc0FjdGlvbnsKLQlwdWJsaWMgV1NETEZpbmRSZWZlcmVuY2VzSW5Qcm9qZWN0QWN0aW9uKElFZGl0b3JQYXJ0IGVkaXRvcikKLQl7Ci0JCXN1cGVyKGVkaXRvcik7Ci0JfQotCi0JcHVibGljIHZvaWQgcnVuKCkKLQl7Ci0JCVN0cmluZyBwYXR0ZXJuID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJV1NETEJhc2VBZGFwdGVyIGNvbXBvbmVudCA9IGdldFdTRExOYW1lZENvbXBvbmVudCgpOwotCQlJRmlsZSBmaWxlID0gZ2V0Q3VycmVudEZpbGUoKTsKLQkJUXVhbGlmaWVkTmFtZVtdIG5hbWVzID0gZGV0ZXJtaW5lTWV0YUFuZFF1YWxpZmllZE5hbWUoY29tcG9uZW50KTsKLQkJaWYgKGZpbGUgIT0gbnVsbCAmJiBjb21wb25lbnQgIT0gbnVsbCAmJiBuYW1lcyAhPSBudWxsKQotCQl7Ci0JCQlJUGF0aCBmdWxsUGF0aCA9IGZpbGUuZ2V0RnVsbFBhdGgoKTsKLQkJCVByb2plY3RTZWFyY2hTY29wZSBzY29wZSA9IG5ldyBQcm9qZWN0U2VhcmNoU2NvcGUoZnVsbFBhdGgpOwotCQkJU3RyaW5nIHNjb3BlRGVzY3JpcHRpb24gPSAiUHJvamVjdCI7Ci0JCQlYU0RTZWFyY2hRdWVyeSBzZWFyY2hRdWVyeSA9IG5ldyBYU0RTZWFyY2hRdWVyeShwYXR0ZXJuLCBmaWxlLCBuYW1lc1sxXSwgCi0JCQkJCW5hbWVzWzBdLCBYU0RTZWFyY2hRdWVyeS5MSU1JVF9UT19SRUZFUkVOQ0VTLCBzY29wZSwgc2NvcGVEZXNjcmlwdGlvbik7Ci0JCQlOZXdTZWFyY2hVSS5hY3RpdmF0ZVNlYXJjaFJlc3VsdFZpZXcoKTsKLQkJCU5ld1NlYXJjaFVJLnJ1blF1ZXJ5SW5CYWNrZ3JvdW5kKHNlYXJjaFF1ZXJ5KTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXNlYXJjaC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zZWFyY2gvYWN0aW9ucy9XU0RMRmluZFJlZmVyZW5jZXNJbldvcmtpbmdTZXRBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXNlYXJjaC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zZWFyY2gvYWN0aW9ucy9XU0RMRmluZFJlZmVyZW5jZXNJbldvcmtpbmdTZXRBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Q5M2Q3YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1zZWFyY2gvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvc2VhcmNoL2FjdGlvbnMvV1NETEZpbmRSZWZlcmVuY2VzSW5Xb3JraW5nU2V0QWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc2VhcmNoLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnNlYXJjaC51aS5OZXdTZWFyY2hVSTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2luZ1NldDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuSVdvcmtpbmdTZXRTZWxlY3Rpb25EaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb3JlLnNlYXJjaC5wYXR0ZXJuLlF1YWxpZmllZE5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb3JlLnNlYXJjaC5zY29wZS5Xb3JraW5nU2V0U2VhcmNoU2NvcGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuYWRhcHRlcnMuV1NETEJhc2VBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuZWRpdG9yLlhTREVkaXRvclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLnNlYXJjaC5YU0RTZWFyY2hRdWVyeTsKLQotcHVibGljIGNsYXNzIFdTRExGaW5kUmVmZXJlbmNlc0luV29ya2luZ1NldEFjdGlvbiBleHRlbmRzIFdTRExGaW5kUmVmZXJlbmNlc0FjdGlvbnsKLQkKLQlwdWJsaWMgV1NETEZpbmRSZWZlcmVuY2VzSW5Xb3JraW5nU2V0QWN0aW9uKElFZGl0b3JQYXJ0IGVkaXRvcikgewotCQlzdXBlcihlZGl0b3IpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBydW4oKXsKLQkJSVdvcmtpbmdTZXRbXSB3b3JraW5nU2V0cyA9IHF1ZXJ5V29ya2luZ1NldHMoKTsKLQkJaWYgKCB3b3JraW5nU2V0cyA9PSBudWxsIHx8IHdvcmtpbmdTZXRzLmxlbmd0aCA9PSAwKQotCQkJLy8gVGhlIHVzZXIgY2hvb3NlcyBub3RoaW5nLCBubyBwb2ludCB0byBjb250aW51ZS4KLQkJCXJldHVybjsKLQkJU3RyaW5nIHBhdHRlcm4gPSAiIjsgLy8kTk9OLU5MUy0xJAotCi0JCVdTRExCYXNlQWRhcHRlciBjb21wb25lbnQgPSBnZXRXU0RMTmFtZWRDb21wb25lbnQoKTsKLQkJSUZpbGUgZmlsZSA9IGdldEN1cnJlbnRGaWxlKCk7Ci0JCVF1YWxpZmllZE5hbWVbXSBuYW1lcyA9IGRldGVybWluZU1ldGFBbmRRdWFsaWZpZWROYW1lKGNvbXBvbmVudCk7Ci0JCWlmICggZmlsZSAhPSBudWxsICYmIGNvbXBvbmVudCAhPSBudWxsKXsKLQkJCS8vIENyZWF0ZSBhIHNjb3BlIGZyb20gdGhlIHNlbGVjdGVkIHdvcmtpbmcgc2V0cwotCQkJV29ya2luZ1NldFNlYXJjaFNjb3BlIHNjb3BlID0gbmV3IFdvcmtpbmdTZXRTZWFyY2hTY29wZSgpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCB3b3JraW5nU2V0cy5sZW5ndGg7IGkrKyl7Ci0JCQkJSUFkYXB0YWJsZVtdIGVsZW1lbnRzID0gd29ya2luZ1NldHNbaV0uZ2V0RWxlbWVudHMoKTsKLQkJCQlzY29wZS5hZGRBV29ya2luZ1NldFRvU2NvcGUoZWxlbWVudHMpOwotCQkJfQotCi0JCQlTdHJpbmcgc2NvcGVEZXNjcmlwdGlvbiA9ICJXb3JraW5nIFNldCI7ICAgIAotCQkJWFNEU2VhcmNoUXVlcnkgc2VhcmNoUXVlcnkgPSAKLQkJCQluZXcgWFNEU2VhcmNoUXVlcnkocGF0dGVybiwgZmlsZSwgbmFtZXNbMV0sIG5hbWVzWzBdLCBYU0RTZWFyY2hRdWVyeS5MSU1JVF9UT19SRUZFUkVOQ0VTLCBzY29wZSwgc2NvcGVEZXNjcmlwdGlvbik7ICAgIAotCQkJTmV3U2VhcmNoVUkuYWN0aXZhdGVTZWFyY2hSZXN1bHRWaWV3KCk7Ci0JCQlOZXdTZWFyY2hVSS5ydW5RdWVyeUluQmFja2dyb3VuZChzZWFyY2hRdWVyeSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBDYWxscyBhIGRpYWxvZyBhc2tpbmcgdGhlIHVzZXIgdG8gY2hvb3NlIHRoZSB3b3JraW5nIFNldHMgaGUgd2FudHMKLQkgKiB0byBkbyB0aGUgc2VhcmNoIG9uCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVdvcmtpbmdTZXRbXSBxdWVyeVdvcmtpbmdTZXRzKCl7Ci0JCVNoZWxsIHNoZWxsPSBYU0RFZGl0b3JQbHVnaW4uZ2V0U2hlbGwoKTsKLQkJaWYgKHNoZWxsID09IG51bGwpCi0JCQlyZXR1cm4gbnVsbDsKLQkJSVdvcmtpbmdTZXRTZWxlY3Rpb25EaWFsb2cgZGlhbG9nID0KLQkJCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0V29ya2luZ1NldE1hbmFnZXIoKS5jcmVhdGVXb3JraW5nU2V0U2VsZWN0aW9uRGlhbG9nKHNoZWxsLCB0cnVlKTsKLQkJaWYgKGRpYWxvZy5vcGVuKCkgPT0gV2luZG93Lk9LKSB7Ci0JCQlJV29ya2luZ1NldFtdIHdvcmtpbmdTZXRzPSBkaWFsb2cuZ2V0U2VsZWN0aW9uKCk7Ci0JCQlpZiAod29ya2luZ1NldHMubGVuZ3RoID4gMCkKLQkJCQlyZXR1cm4gd29ya2luZ1NldHM7Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtc2VhcmNoL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3NlYXJjaC9hY3Rpb25zL1dTRExSZWZlcmVuY2VzU2VhcmNoR3JvdXAuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXNlYXJjaC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zZWFyY2gvYWN0aW9ucy9XU0RMUmVmZXJlbmNlc1NlYXJjaEdyb3VwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlZjZmZTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtc2VhcmNoL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3NlYXJjaC9hY3Rpb25zL1dTRExSZWZlcmVuY2VzU2VhcmNoR3JvdXAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5zZWFyY2guYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuc2VhcmNoLlNlYXJjaE1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuc2VhcmNoLmFjdGlvbnMuUmVmZXJlbmNlc1NlYXJjaEdyb3VwOwotCi1wdWJsaWMgY2xhc3MgV1NETFJlZmVyZW5jZXNTZWFyY2hHcm91cCBleHRlbmRzIFJlZmVyZW5jZXNTZWFyY2hHcm91cCAgewotICAgIC8qKgotICAgICAqIE5vdGU6IFRoaXMgY29uc3RydWN0b3IgaXMgZm9yIGludGVybmFsIHVzZSBvbmx5LiBDbGllbnRzIHNob3VsZCBub3QgY2FsbCB0aGlzIGNvbnN0cnVjdG9yLgotICAgICAqIEBwYXJhbSBlZGl0b3IKLSAgICAgKi8KLSAgICBwdWJsaWMgV1NETFJlZmVyZW5jZXNTZWFyY2hHcm91cChJRWRpdG9yUGFydCBlZGl0b3IpIHsKLSAgICAJc3VwZXIoZWRpdG9yKTsKLSAgICB9Ci0gICAgCi0gICAgcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZSgpIHsKLS8vICAgICAgZkdyb3VwSWQ9IElUZXh0RWRpdG9yQWN0aW9uQ29uc3RhbnRzLkdST1VQX0ZJTkQ7Ci0gICAgCQotICAgIAlmRmluZFJlZmVyZW5jZXNBY3Rpb249IG5ldyBXU0RMRmluZFJlZmVyZW5jZXNBY3Rpb24oZkVkaXRvcik7Ci0gICAgICAgIGZGaW5kUmVmZXJlbmNlc0FjdGlvbi5zZXRUZXh0KFNlYXJjaE1lc3NhZ2VzLlNlYXJjaF9GaW5kRGVjbGFyYXRpb25BY3Rpb25fbGFiZWwpOwotICAgICAgICBmRmluZFJlZmVyZW5jZXNBY3Rpb24uc2V0QWN0aW9uRGVmaW5pdGlvbklkKCJTRUFSQ0hfUkVGRVJFTkNFU19JTl9XT1JLU1BBQ0UiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAvL2ZFZGl0b3Iuc2V0QWN0aW9uKCJTZWFyY2hSZWZlcmVuY2VzSW5Xb3Jrc3BhY2UiLCBmRmluZFJlZmVyZW5jZXNBY3Rpb24pOyAvLyROT04tTkxTLTEkCi0KLSAgICAgICAgZkZpbmRSZWZlcmVuY2VzSW5Qcm9qZWN0QWN0aW9uPSBuZXcgV1NETEZpbmRSZWZlcmVuY2VzSW5Qcm9qZWN0QWN0aW9uKGZFZGl0b3IpOwotICAgICAgICBmRmluZFJlZmVyZW5jZXNJblByb2plY3RBY3Rpb24uc2V0VGV4dChTZWFyY2hNZXNzYWdlcy5TZWFyY2hfRmluZERlY2xhcmF0aW9uc0luUHJvamVjdEFjdGlvbl9sYWJlbCk7ICAgICAgICAKLSAgICAgICAgZkZpbmRSZWZlcmVuY2VzSW5Qcm9qZWN0QWN0aW9uLnNldEFjdGlvbkRlZmluaXRpb25JZCgiU0VBUkNIX1JFRkVSRU5DRVNfSU5fUFJPSkVDVCIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgIC8vZkVkaXRvci5zZXRBY3Rpb24oIlNlYXJjaFJlZmVyZW5jZXNJblByb2plY3QiLCBmRmluZFJlZmVyZW5jZXNJblByb2plY3RBY3Rpb24pOyAvLyROT04tTkxTLTEkCi0gICAgCi0gICAgICAgIGZGaW5kUmVmZXJlbmNlc0luV29ya2luZ1NldEFjdGlvbj0gbmV3IFdTRExGaW5kUmVmZXJlbmNlc0luV29ya2luZ1NldEFjdGlvbihmRWRpdG9yKTsKLSAgICAgICAgZkZpbmRSZWZlcmVuY2VzSW5Xb3JraW5nU2V0QWN0aW9uLnNldFRleHQoU2VhcmNoTWVzc2FnZXMuU2VhcmNoX0ZpbmREZWNsYXJhdGlvbnNJbldvcmtpbmdTZXRBY3Rpb25fbGFiZWwpOyAgICAgICAgIAotICAgICAgICBmRmluZFJlZmVyZW5jZXNJbldvcmtpbmdTZXRBY3Rpb24uc2V0QWN0aW9uRGVmaW5pdGlvbklkKCIuU0VBUkNIX1JFRkVSRU5DRVNfSU5fV09SS0lOR19TRVQiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAvL2ZFZGl0b3Iuc2V0QWN0aW9uKCJTZWFyY2hSZWZlcmVuY2VzSW5Xb3JraW5nU2V0IiwgZkZpbmRSZWZlcmVuY2VzSW5Xb3JraW5nU2V0QWN0aW9uKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXNlYXJjaC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zZWFyY2gvYWN0aW9ucy9XU0RMU2VhcmNoUmVmZXJlbmNlc0dyb3VwQWN0aW9uRGVsZWdhdGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXNlYXJjaC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zZWFyY2gvYWN0aW9ucy9XU0RMU2VhcmNoUmVmZXJlbmNlc0dyb3VwQWN0aW9uRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTVmYzIwOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1zZWFyY2gvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvc2VhcmNoL2FjdGlvbnMvV1NETFNlYXJjaFJlZmVyZW5jZXNHcm91cEFjdGlvbkRlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc2VhcmNoLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5NZW51OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0U2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLnNlYXJjaC5hY3Rpb25zLkJhc2VHcm91cEFjdGlvbkRlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuc2VhcmNoLmFjdGlvbnMuWFNEU2VhcmNoR3JvdXBTdWJNZW51OwotCi1wdWJsaWMgY2xhc3MgV1NETFNlYXJjaFJlZmVyZW5jZXNHcm91cEFjdGlvbkRlbGVnYXRlIGV4dGVuZHMgQmFzZUdyb3VwQWN0aW9uRGVsZWdhdGUKLXsKLSAgICBwcm90ZWN0ZWQgdm9pZCBmaWxsTWVudShNZW51IG1lbnUpIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBpZiAoZlNlbGVjdGlvbiA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHdvcmtiZW5jaFBhcnQgIT0gbnVsbCkKLSAgICAgICAgewotCQkgIElXb3JrYmVuY2hQYXJ0U2l0ZSBzaXRlID0gd29ya2JlbmNoUGFydC5nZXRTaXRlKCk7Ci0JCQlpZiAoc2l0ZSA9PSBudWxsKQotCQkJICByZXR1cm47Ci0JCi0JCSAgSUVkaXRvclBhcnQgZWRpdG9yID0gc2l0ZS5nZXRQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0gICAgICAgICAgaWYgKCBlZGl0b3IgIT0gbnVsbCApewotICAgICAgICAgICAgV1NETFJlZmVyZW5jZXNTZWFyY2hHcm91cCByZWZlcmVuY2VzR3JvdXAgPSBuZXcgV1NETFJlZmVyZW5jZXNTZWFyY2hHcm91cChlZGl0b3IpOwotICAgICAgICAgICAgWFNEU2VhcmNoR3JvdXBTdWJNZW51IHN1Yk1lbnUgPSBuZXcgWFNEU2VhcmNoR3JvdXBTdWJNZW51KHJlZmVyZW5jZXNHcm91cCk7Ci0gICAgICAgICAgICBzdWJNZW51LmZpbGwobWVudSwgLTEpOwotICAgICAgICAgIH0KLSAgICAgICAgfSAgCi0gICAgICB9Ci0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICB9Ci0gICAgfSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3NvYXAvY3VzdG9taXphdGlvbnMvTWVzc2FnZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvc29hcC9jdXN0b21pemF0aW9ucy9NZXNzYWdlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzFjMjE3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvc29hcC9jdXN0b21pemF0aW9ucy9NZXNzYWdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnNvYXAuY3VzdG9taXphdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotCi1wdWJsaWMgY2xhc3MgTWVzc2FnZXMgZXh0ZW5kcyBOTFMgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5zb2FwLmN1c3RvbWl6YXRpb25zLm1lc3NhZ2VzIjsgLy8kTk9OLU5MUy0xJAotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgVUlfU1BFQ0lGWV9QQVJUU19ESUFMT0dfVElUTEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVUlfUEFSVFNfQlVUVE9OOwotCi0Jc3RhdGljIHsKLQkJLy8gbG9hZCBtZXNzYWdlIHZhbHVlcyBmcm9tIGJ1bmRsZSBmaWxlCi0JCU5MUy5pbml0aWFsaXplTWVzc2FnZXMoQlVORExFX05BTUUsIE1lc3NhZ2VzLmNsYXNzKTsKLQl9Ci0KLQlwcml2YXRlIE1lc3NhZ2VzKCkgewotCQkvLyBjYW5ub3QgY3JlYXRlIG5ldyBpbnN0YW5jZQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvc29hcC9jdXN0b21pemF0aW9ucy9TT0FQTm9kZUVkaXRvclByb3ZpZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3NvYXAvY3VzdG9taXphdGlvbnMvU09BUE5vZGVFZGl0b3JQcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTY2OTEwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvc29hcC9jdXN0b21pemF0aW9ucy9TT0FQTm9kZUVkaXRvclByb3ZpZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc29hcC5jdXN0b21pemF0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuTm9kZUFzc29jaWF0aW9uTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmNvbW1vbi5wcm9wZXJ0aWVzLnNlY3Rpb25zLmFwcGluZm8uY3VzdG9tLkRpYWxvZ05vZGVFZGl0b3JDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuY29tbW9uLnByb3BlcnRpZXMuc2VjdGlvbnMuYXBwaW5mby5jdXN0b20uTm9kZUVkaXRvckNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5jb21tb24ucHJvcGVydGllcy5zZWN0aW9ucy5hcHBpbmZvLmN1c3RvbS5Ob2RlRWRpdG9yUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgaXMgcHJvdmlkZWQgYXMgYW4gZXhhbXBsZSBvZiBob3cgYSBOb2RlRWRpdG9yUHJvdmlkZXIgY2FuIHV0aWxpemUgdGhlIFdTREwgbW9kZWwgaWYgcmVxdWlyZWQKLSAqIChhbmQgaXMgbm90IGxpbWl0ZWQgdG8gdGhlIERPTSBtb2RlbCkuICBJdCdzIGhvcGUgdGhhdCBwb3RlbnRpYWwgYWRvcHRlcnMgY2FuIHByb3ZpZGUgZmVlZGJhY2sgYW5kIG9wZW4KLSAqIGJ1Z3Mgd2hlcmUgdGhleSBmaW5kIHN1cHBvcnQgaXMgbGFja2luZyBvciBpbmNvbnZlbmllbnQuIAotICovCi1wdWJsaWMgY2xhc3MgU09BUE5vZGVFZGl0b3JQcm92aWRlciBleHRlbmRzIE5vZGVFZGl0b3JQcm92aWRlcgotewotICBwdWJsaWMgTm9kZUVkaXRvckNvbmZpZ3VyYXRpb24gZ2V0Tm9kZUVkaXRvckNvbmZpZ3VyYXRpb24oU3RyaW5nIHBhcmVudE5hbWUsIFN0cmluZyBub2RlTmFtZSkKLSAgewotICAgIC8vIFRPRE8gKGNzKSB0aGlzIGV4dGVuc2lvbiBpcyBvbmx5IGRlc2lnbmVkIHRvIHdvcmsgd2hlbiB1c2VkIHZpYSB0aGUgV1NETCBFZGl0b3IgY29udGV4dC4KLSAgICAvLyBSZXVzZSBmcm9tIG90aGVyIGNvbnRleHQgaXMgcG9zc2libGUgdG9vIGlmIHRoZSBlZGl0b3IgcHJvdmlkZXMgdGhlIGFwcHJvcHJpYXRlICdnZXRBZGFwdGVyJyBiZWhhdmlvdXIuCi0gICAgLy8gV2UgbmVlZCB0byByZXZpc2l0IHRoaXMgYW5kIGdldCBtb3JlIGZlZWRiYWNrIGZyb20gYWRvcHRlcnMgdG8gc2VlIGlmIGRpZmZlcmVudCBhcHByb2FjaCBpcyByZXF1aXJlZCAKLSAgICAvLyBpbiBvcmRlciB0byBvYnRhaW4gYSBXU0RMIG1vZGVsLgotLy8gICAgLwotICAgIElFZGl0b3JQYXJ0IGVkaXRvciA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOwotICAgIGZpbmFsIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKWVkaXRvci5nZXRBZGFwdGVyKERlZmluaXRpb24uY2xhc3MpOwotICAgIGlmIChkZWZpbml0aW9uICE9IG51bGwpCi0gICAgeyAgCi0gICAgICBpZiAocGFyZW50TmFtZS5lcXVhbHMoImJvZHkiKSAmJiBub2RlTmFtZS5lcXVhbHMoInBhcnRzIikpIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgewotICAgICAgICAvLyBnZWUuLi4gdGhpcyBjYXNlIHNvdW5kcyBzb3J0YSBtb3JiaWQgZWg/Ci0gICAgICAgIC8vCi0gICAgICAgIHJldHVybiBuZXcgRGlhbG9nTm9kZUVkaXRvckNvbmZpZ3VyYXRpb24oKQotICAgICAgICB7ICAgICAgICAgICAgICAgIAotICAgICAgICAgIHB1YmxpYyB2b2lkIGludm9rZURpYWxvZygpCi0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIE5vZGUgcGFyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoKTsKLSAgICAgICAgICAgIGlmIChwYXJlbnROb2RlIGluc3RhbmNlb2YgRWxlbWVudCkKLSAgICAgICAgICAgIHsgICAgICAgICAgIAotICAgICAgICAgICAgICBFbGVtZW50IGVsZW1lbnQgPSAoRWxlbWVudClnZXRQYXJlbnROb2RlKCk7Ci0gICAgICAgICAgICAgIAotICAgICAgICAgICAgICAvLyBUT0RPIChjcykgSSB0aGluayB3ZSBzaG91bGQgcHVzaCB0aGlzIGZ1bmN0aW9uIGRvd24gdG8gdGhlIFdTREwgbW9kZWwgKGFsYSBYU0QgbW9kZWwpCi0gICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgIE5vZGVBc3NvY2lhdGlvbk1hbmFnZXIgbm9kZUFzc29jaWF0aW9uTWFuYWdlciA9IG5ldyBOb2RlQXNzb2NpYXRpb25NYW5hZ2VyKCk7Ci0gICAgICAgICAgICAgIE9iamVjdCBvID0gbm9kZUFzc29jaWF0aW9uTWFuYWdlci5nZXRNb2RlbE9iamVjdEZvck5vZGUoZGVmaW5pdGlvbiwgZWxlbWVudCk7Ci0gICAgICAgICAgICAgIGlmIChvIGluc3RhbmNlb2YgU09BUEJvZHkpCi0gICAgICAgICAgICAgIHsgIAotICAgICAgICAgICAgICAgIFNPQVBTZWxlY3RQYXJ0c0RpYWxvZyBkaWFsb2cgPSBuZXcgU09BUFNlbGVjdFBhcnRzRGlhbG9nKERpc3BsYXkuZ2V0Q3VycmVudCgpLmdldEFjdGl2ZVNoZWxsKCksIGRlZmluaXRpb24sIChTT0FQQm9keSlvKTsKLSAgICAgICAgICAgICAgICBkaWFsb2cuY3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgZGlhbG9nLmdldFNoZWxsKCkuc2V0VGV4dChNZXNzYWdlcy5VSV9TUEVDSUZZX1BBUlRTX0RJQUxPR19USVRMRSk7ICAgICAgICAgICAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICAgICAgaW50IHJjID0gZGlhbG9nLm9wZW4oKTsKLSAgICAgICAgICAgICAgICBpZiAocmMgPT0gRGlhbG9nLk9LKQotICAgICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgIFN0cmluZyB2YWx1ZSA9ICIiOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICAgICAgICBQYXJ0W10gcGFydHMgPSBkaWFsb2cuZ2V0U2VsZWN0ZWRQYXJ0cygpOwotICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICAgIHsgIAotICAgICAgICAgICAgICAgICAgICBQYXJ0IHBhcnQgPSBwYXJ0c1tpXTsKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gcGFydC5nZXROYW1lKCk7Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlICs9ICIgIjsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgICAgICAgfSAgCi0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgIC8vIFRPRE8gKGNzKSB3ZSBuZWVkIHRvIHByb3ZpZGUgJ2NvbW1hbmQnIHN1cHBvcnQgc28gdGhhdCB3ZSBjYW4gaGFuZGxlIHVuZG8gcHJvcGVybHkKLSAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoInBhcnRzIiwgdmFsdWUpOyAgICAgICAgICAgICAgICAgICAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICAgICAgfSAgCi0gICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAKLSAgICAgICAgICAgIH0gCi0gICAgICAgICAgfSAgICAgICAgCi0gICAgICAgICAgcHVibGljIFN0cmluZyBnZXRCdXRvblRleHQoKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBNZXNzYWdlcy5VSV9QQVJUU19CVVRUT047IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICB9Ci0gICAgICAgIH07Ci0gICAgICB9ICAgICAgCi0gICAgfQotICAgIHJldHVybiBudWxsOyAgICAgCi0gIH0KLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zb2FwL2N1c3RvbWl6YXRpb25zL1NPQVBTZWxlY3RQYXJ0c0RpYWxvZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zb2FwL2N1c3RvbWl6YXRpb25zL1NPQVBTZWxlY3RQYXJ0c0RpYWxvZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMWRlMGUyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkvc3JjLXNvYXAvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdWkvaW50ZXJuYWwvc29hcC9jdXN0b21pemF0aW9ucy9TT0FQU2VsZWN0UGFydHNEaWFsb2cuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuaW50ZXJuYWwuc29hcC5jdXN0b21pemF0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkNoZWNrYm94VHJlZVZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUcmVlQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQm9keTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmludGVybmFsLnV0aWwuQ29tcG9uZW50UmVmZXJlbmNlVXRpbDsKLQotcHVibGljIGNsYXNzIFNPQVBTZWxlY3RQYXJ0c0RpYWxvZyBleHRlbmRzIERpYWxvZwoteyAgCi0gIERlZmluaXRpb24gZGVmaW5pdGlvbjsKLSAgU09BUEJvZHkgYm9keTsKLSAgQ2hlY2tib3hUcmVlVmlld2VyIGNoZWNrTGlzdDsKLSAgUGFydFtdIHNlbGVjdGVkUGFydHMgPSB7fTsKLSAgCi0gIHB1YmxpYyBTT0FQU2VsZWN0UGFydHNEaWFsb2coU2hlbGwgcGFyZW50U2hlbGwsIERlZmluaXRpb24gZGVmaW5pdGlvbiwgU09BUEJvZHkgYm9keSkKLSAgewotICAgIHN1cGVyKHBhcmVudFNoZWxsKTsgIAotICAgIHRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247Ci0gICAgdGhpcy5ib2R5ID0gYm9keTsKLSAgfQotCi0gIHByb3RlY3RlZCBDb250cm9sIGNyZWF0ZURpYWxvZ0FyZWEoQ29tcG9zaXRlIHBhcmVudCkKLSAgewotICAgIENvbXBvc2l0ZSBjb21wb3NpdGUgPSAoQ29tcG9zaXRlKXN1cGVyLmNyZWF0ZURpYWxvZ0FyZWEocGFyZW50KTsKLSAgICBjaGVja0xpc3QgPSBuZXcgQ2hlY2tib3hUcmVlVmlld2VyKGNvbXBvc2l0ZSwgU1dULk5PTkUpOwotICAgIEdyaWREYXRhIGdyaWREYXRhID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCk7Ci0gICAgZ3JpZERhdGEuaGVpZ2h0SGludCA9IDEwMDsKLSAgICBncmlkRGF0YS53aWR0aEhpbnQgPSAyMDA7Ci0gICAgY2hlY2tMaXN0LmdldENvbnRyb2woKS5zZXRMYXlvdXREYXRhKGdyaWREYXRhKTsKLSAgICBjaGVja0xpc3Quc2V0Q29udGVudFByb3ZpZGVyKG5ldyBJbnRlcm5hbFRyZWVDb250ZW50UHJvdmlkZXIoKSk7Ci0gICAgY2hlY2tMaXN0LnNldExhYmVsUHJvdmlkZXIobmV3IEludGVybmFsTGFiZWxQcm92aWRlcigpKTsKLSAgICBjaGVja0xpc3Quc2V0SW5wdXQoIiIpOyAvLyROT04tTkxTLTEkCi0gICAgCi0gICAgTGlzdCBsaXN0ID0gYm9keS5nZXRQYXJ0cygpOwotICAgIGNoZWNrTGlzdC5zZXRDaGVja2VkRWxlbWVudHMobGlzdC50b0FycmF5KCkpOyAgICAgCi0gICAgcmV0dXJuIGNvbXBvc2l0ZTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgb2tQcmVzc2VkKCkKLSAgewotICAgIE9iamVjdFtdIGNoZWNrZWQgPSBjaGVja0xpc3QuZ2V0Q2hlY2tlZEVsZW1lbnRzKCk7Ci0gICAgc2VsZWN0ZWRQYXJ0cyA9IG5ldyBQYXJ0W2NoZWNrZWQubGVuZ3RoXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoZWNrZWQubGVuZ3RoOyBpKyspCi0gICAgeyAgCi0gICAgICBzZWxlY3RlZFBhcnRzW2ldID0gKFBhcnQpY2hlY2tlZFtpXTsKLSAgICB9IAotICAgIHN1cGVyLm9rUHJlc3NlZCgpOyAgICAKLSAgfQotICAKLSAKLSAgY2xhc3MgSW50ZXJuYWxMYWJlbFByb3ZpZGVyIGV4dGVuZHMgTGFiZWxQcm92aWRlcgotICB7Ci0gICAgcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBlbGVtZW50KQotICAgIHsKLSAgICAgIFBhcnQgcGFydCA9IChQYXJ0KWVsZW1lbnQ7Ci0gICAgICByZXR1cm4gcGFydC5nZXROYW1lKCk7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBJbWFnZSBnZXRJbWFnZShPYmplY3QgZWxlbWVudCkKLSAgICB7Ci0gICAgICByZXR1cm4gV1NETEVkaXRvclBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEltYWdlKCJpY29ucy9wYXJ0X29iai5naWYiKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgfQotICAKLSAgY2xhc3MgSW50ZXJuYWxUcmVlQ29udGVudFByb3ZpZGVyIGltcGxlbWVudHMgSVRyZWVDb250ZW50UHJvdmlkZXIKLSAgeyAgCi0gICAgcHVibGljIE9iamVjdFtdIGdldEVsZW1lbnRzKE9iamVjdCBpbnB1dEVsZW1lbnQpCi0gICAgeyAgICAKLSAgICAgIEVPYmplY3QgY29udGFpbmVyID0gYm9keS5lQ29udGFpbmVyKCk7Ci0gICAgICBNZXNzYWdlUmVmZXJlbmNlIG1lc3NhZ2VSZWZlcmVuY2UgPSBudWxsOwotICAgICAgaWYgKGNvbnRhaW5lciBpbnN0YW5jZW9mIEJpbmRpbmdJbnB1dCkKLSAgICAgIHsKLSAgICAgICAgbWVzc2FnZVJlZmVyZW5jZSA9IENvbXBvbmVudFJlZmVyZW5jZVV0aWwuY29tcHV0ZUlucHV0KChCaW5kaW5nSW5wdXQpY29udGFpbmVyKTsgCi0gICAgICB9IAotICAgICAgZWxzZSBpZiAoY29udGFpbmVyIGluc3RhbmNlb2YgQmluZGluZ091dHB1dCkKLSAgICAgIHsKLSAgICAgICAgbWVzc2FnZVJlZmVyZW5jZSA9IENvbXBvbmVudFJlZmVyZW5jZVV0aWwuY29tcHV0ZU91dHB1dCgoQmluZGluZ091dHB1dCljb250YWluZXIpOyAgICAgICAgIAotICAgICAgfSAgCi0gICAgICBpZiAobWVzc2FnZVJlZmVyZW5jZSAhPSBudWxsICYmIG1lc3NhZ2VSZWZlcmVuY2UuZ2V0RU1lc3NhZ2UoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICByZXR1cm4gbWVzc2FnZVJlZmVyZW5jZS5nZXRFTWVzc2FnZSgpLmdldEVQYXJ0cygpLnRvQXJyYXkoKTsKLSAgICAgIH0gIAotICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLkVNUFRZX0xJU1QudG9BcnJheSgpOwotICAgIH0KLQotICAgIHB1YmxpYyBPYmplY3RbXSBnZXRDaGlsZHJlbihPYmplY3QgcGFyZW50RWxlbWVudCkKLSAgICB7Ci0gICAgICByZXR1cm4gQ29sbGVjdGlvbnMuRU1QVFlfTElTVC50b0FycmF5KCk7Ci0gICAgfQotCi0gICAgcHVibGljIE9iamVjdCBnZXRQYXJlbnQoT2JqZWN0IGVsZW1lbnQpCi0gICAgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oT2JqZWN0IGVsZW1lbnQpCi0gICAgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKQotICAgIHsgICAgICAKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBpbnB1dENoYW5nZWQoVmlld2VyIHZpZXdlciwgT2JqZWN0IG9sZElucHV0LCBPYmplY3QgbmV3SW5wdXQpCi0gICAgewotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBQYXJ0W10gZ2V0U2VsZWN0ZWRQYXJ0cygpCi0gIHsKLSAgICByZXR1cm4gc2VsZWN0ZWRQYXJ0czsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS9zcmMtc29hcC9vcmcvZWNsaXBzZS93c3Qvd3NkbC91aS9pbnRlcm5hbC9zb2FwL2N1c3RvbWl6YXRpb25zL21lc3NhZ2VzLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3NvYXAvY3VzdG9taXphdGlvbnMvbWVzc2FnZXMucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQzZmE4ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpL3NyYy1zb2FwL29yZy9lY2xpcHNlL3dzdC93c2RsL3VpL2ludGVybmFsL3NvYXAvY3VzdG9taXphdGlvbnMvbWVzc2FnZXMucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLVVJX1NQRUNJRllfUEFSVFNfRElBTE9HX1RJVExFPVNwZWNpZnkgUGFydHMKLVVJX1BBUlRTX0JVVFRPTj0uLi4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi8uY2xhc3NwYXRoIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlODdhZGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkgZXhjbHVkaW5nPSJ3c2RsdmFsaWRhdGV1aS98d3NkbHZhbGlkYXRlLyIga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40Ij4KLQkJPGFjY2Vzc3J1bGVzPgotCQkJPGFjY2Vzc3J1bGUga2luZD0iYWNjZXNzaWJsZSIgcGF0dGVybj0ib3JnL2FwYWNoZS94ZXJjZXMvKioiLz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49ImphdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUiLz4KLQkJPC9hY2Nlc3NydWxlcz4KLQk8L2NsYXNzcGF0aGVudHJ5PgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyI+Ci0JCTxhY2Nlc3NydWxlcz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uLyoqIi8+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvZWNsaXBzZS93c3QvdmFsaWRhdGlvbi9pbnRlcm5hbC9kZWxlZ2F0ZXMvRGVsZWdhdGluZ1ZhbGlkYXRvciIvPgotCQk8L2FjY2Vzc3J1bGVzPgotCTwvY2xhc3NwYXRoZW50cnk+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4MDMyZWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi1iaW4KLWJ1aWxkLnhtbAotdGVtcC5mb2xkZXIKLXdzZGx2YWxpZGF0ZS5qYXIKLXdzZGx2YWxpZGF0ZXVpLmphcgotd3NkbHZhbGlkYXRlc3JjLnppcAotd3NkbHZhbGlkYXRldWlzcmMuemlwCi1AZG90Ci1zcmMuemlwCi1qYXZhQ29tcGlsZXIuLi5hcmdzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vLnByb2plY3QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxOTBjMzcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbjwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWJiZmNhZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotI1R1ZSBBcHIgMTggMTI6MzA6MjkgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2E1Y2VjNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMTggMTI6MzA6MjkgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnRlcm5hbC5kZWZhdWx0LmNvbXBsaWFuY2U9ZGVmYXVsdApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjNmMzg4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVfUExVR0lOX05BTUUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb247IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMS4yMDEucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2UuVmFsaWRhdGVXU0RMUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlX1BST1ZJREVSX05BTUUKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWw7eC1mcmllbmRzOj0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cyxvcmcuZWNsaXBzZS53c3Qud3NpIiwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2U7eC1mcmllbmRzOj0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cyxvcmcuZWNsaXBzZS53c3Qud3NpIiwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmV4Y2VwdGlvbjt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLG9yZy5lY2xpcHNlLndzdC53c2kiLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwubG9nZ2luZzt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLG9yZy5lY2xpcHNlLndzdC53c2kiLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXI7eC1mcmllbmRzOj0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cyxvcmcuZWNsaXBzZS53c3Qud3NpIiwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnVpLmFudDt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLG9yZy5lY2xpcHNlLndzdC53c2kiLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudWkudGV4dDt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLG9yZy5lY2xpcHNlLndzdC53c2kiLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudXRpbDt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLG9yZy5lY2xpcHNlLndzdC53c2kiLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExO3gtZnJpZW5kczo9Im9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMsb3JnLmVjbGlwc2Uud3N0LndzaSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuaHR0cDt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLG9yZy5lY2xpcHNlLndzdC53c2kiLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLm1pbWU7eC1mcmllbmRzOj0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cyxvcmcuZWNsaXBzZS53c3Qud3NpIiwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5zb2FwO3gtZnJpZW5kczo9Im9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMsb3JnLmVjbGlwc2Uud3N0LndzaSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEueHNkO3gtZnJpZW5kczo9Im9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMsb3JnLmVjbGlwc2Uud3N0LndzaSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC54bWw7eC1mcmllbmRzOj0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cyxvcmcuZWNsaXBzZS53c3Qud3NpIgotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuYXBhY2hlLmFudDtidW5kbGUtdmVyc2lvbj0iWzEuNi41LDIuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlcjtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb247YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIGphdmF4LndzZGw7YnVuZGxlLXZlcnNpb249IlsxLjQuMCwxLjUuMCkiLAotIG9yZy5hcGFjaGUueGVyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMi44LjAsMy4wLjApIjt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9hYm91dC5odG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGIzNmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lIDA2LCAyMDA3PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkYjI0YzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLXNvdXJjZS4uID0gc3JjLwotb3V0cHV0Li4gPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICAuLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgZXhzZC8KLXNyYy5pbmNsdWRlcyA9IGJ1aWxkLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9leHNkL2V4dHZhbGlkYXRvci5leHNkIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL2V4c2QvZXh0dmFsaWRhdG9yLmV4c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmZThkZDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL2V4c2QvZXh0dmFsaWRhdG9yLmV4c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KLTwhLS0gU2NoZW1hIGZpbGUgd3JpdHRlbiBieSBQREUgLS0+Ci08c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbiI+Ci08YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2NoZW1hIHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbiIgaWQ9ImV4dHZhbGlkYXRvciIgbmFtZT0iV1NETCBFeHRlbnNpb24gVmFsaWRhdG9yIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFRoZSBXU0RMIEV4dGVuc2lvbiBWYWxpZGF0b3IgZXh0ZW5zaW9uIHBvaW50IGFsbG93cyBjbGllbnRzIHRvIGNvbnRyaWJ1dGUgYSB2YWxpZGF0b3IgdGhhdCBwcm92aWRlcyBjdXN0b20gdmFsaWRhdGlvbiBsb2dpYyBmb3IgV1NETCAxLjEgZG9jdW1lbnRzLgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJleHR2YWxpZGF0b3IiLz4KLSAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGEgZnVsbHkgcXVhbGlmaWVkIGlkZW50aWZpZXIgb2YgdGhlIHRhcmdldCBleHRlbnNpb24gcG9pbnQKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhbiBvcHRpb25hbCBpZGVudGlmaWVyIG9mIHRoZSBleHRlbnNpb24gaW5zdGFuY2UKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIGFuIG9wdGlvbmFsIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiBpbnN0YW5jZQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJleHR2YWxpZGF0b3IiPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjbGFzcyIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGUgY2xhc3MgdGhhdCBpbXBsZW1lbnRzICZsdDtjb2RlJmd0O29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVdTRExWYWxpZGF0b3ImbHQ7L2NvZGUmZ3Q7LgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcEluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUga2luZD0iamF2YSIgYmFzZWRPbj0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5JV1NETFZhbGlkYXRvciIvPgotICAgICAgICAgICAgICAgPC9hcHBJbmZvPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWVzcGFjZSIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGUgV1NETCBuYW1lc3BhY2UgZm9yIHdoaWNoIHRoaXMgdmFsaWRhdG9yIHNob3VsZCBydW4uIEN1cnJlbnRseSB0aGUgb25seSBhY2NlcHRlZCB2YWx1ZSBpcyBodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLy4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0ic2luY2UiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgJmx0O2ImZ3Q7VGhpcyBleHRlbnNpb24gcG9pbnQgaXMgcGFydCBvZiBhbiBpbnRlcmltIEFQSSB0aGF0IGlzIHN0aWxsIHVuZGVyIGRldmVsb3BtZW50IGFuZCBleHBlY3RlZCB0byBjaGFuZ2Ugc2lnbmlmaWNhbnRseSBiZWZvcmUgcmVhY2hpbmcgc3RhYmlsaXR5LiBJdCBpcyBiZWluZyBtYWRlIGF2YWlsYWJsZSBhdCB0aGlzIGVhcmx5IHN0YWdlIHRvIHNvbGljaXQgZmVlZGJhY2sgZnJvbSBwaW9uZWVyaW5nIGFkb3B0ZXJzIG9uIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgYW55IGNvZGUgdGhhdCB1c2VzIHRoaXMgQVBJIHdpbGwgYWxtb3N0IGNlcnRhaW5seSBiZSBicm9rZW4gKHJlcGVhdGVkbHkpIGFzIHRoZSBBUEkgZXZvbHZlcy4mbHQ7L2ImZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImV4YW1wbGVzIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBvZiBhIFdTREwgRXh0ZW5zaW9uIFZhbGlkYXRvciBjb250cmlidXRpb246Ci0mbHQ7cHJlJmd0OwotICAgJmx0O2V4dGVuc2lvbgotICAgICAgICAgaWQ9JnF1b3Q7d3NkbFdTSVZhbGlkYXRvciZxdW90OwotICAgICAgICAgbmFtZT0mcXVvdDtXU0RMIFdTLUkgVmFsaWRhdG9yJnF1b3Q7Ci0gICAgICAgICBwb2ludD0mcXVvdDtvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmV4dHZhbGlkYXRvciZxdW90OyZndDsKLSAgICAgICZsdDtleHR2YWxpZGF0b3IKLSAgICAgICAgICAgIG5hbWVzcGFjZT0mcXVvdDtodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyZxdW90OwotICAgICAgICAgICAgY2xhc3M9JnF1b3Q7b3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC52YWxpZGF0ZS53c2RsLldTRExWYWxpZGF0b3ImcXVvdDsmZ3Q7Ci0gICAgICAmbHQ7L2V4dHZhbGlkYXRvciZndDsKLSAgICZsdDsvZXh0ZW5zaW9uJmd0OwotJmx0Oy9wcmUmZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImFwaUluZm8iLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhlIHN1cHBsaWVkIGNsYXNzIG11c3QgaW1wbGVtZW50ICZsdDtjb2RlJmd0O29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVdTRExWYWxpZGF0b3ImbHQ7L2NvZGUmZ3Q7LgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJpbXBsZW1lbnRhdGlvbiIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAmbHQ7Y29kZSZndDsKLW9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwudmFsaWRhdGUud3NkbC5XU0RMVmFsaWRhdG9yCi0mbHQ7L2NvZGUmZ3Q7Ci1Db250cmlidXRlcyBXUy1JIHZhbGlkYXRpb24gbG9naWMgZm9yIHRoZSBuYW1lc3BhY2UgaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8uCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImNvcHlyaWdodCIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuJmx0O2JyJmd0OwotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSAKLWF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyAKLXRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0ICZsdDthCi1ocmVmPSZxdW90O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJnF1b3Q7Jmd0O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJmx0Oy9hJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9leHNkL3dzZGwxMXZhbGlkYXRvci5leHNkIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL2V4c2Qvd3NkbDExdmFsaWRhdG9yLmV4c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0YjYwZWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL2V4c2Qvd3NkbDExdmFsaWRhdG9yLmV4c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KLTwhLS0gU2NoZW1hIGZpbGUgd3JpdHRlbiBieSBQREUgLS0+Ci08c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbiI+Ci08YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2NoZW1hIHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbiIgaWQ9IndzZGwxMXZhbGlkYXRvciIgbmFtZT0iV1NETCAxLjEgRXh0ZW5zaW9uIFZhbGlkYXRvciIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBUaGUgV1NETCAxLjEgRXh0ZW5zaW9uIFZhbGlkYXRvciBleHRlbnNpb24gcG9pbnQgYWxsb3dzIGNsaWVudHMgdG8gY29udHJpYnV0ZSBhIHZhbGlkYXRvciBmb3IgYSBzcGVjaWZpYyBuYW1lc3BhY2UgdG8gV1NETCAxLjEgdmFsaWRhdGlvbi4KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0idmFsaWRhdG9yIi8+Ci0gICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwb2ludCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhIGZ1bGx5IHF1YWxpZmllZCBpZGVudGlmaWVyIG9mIHRoZSB0YXJnZXQgZXh0ZW5zaW9uIHBvaW50Ci0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgYW4gb3B0aW9uYWwgaWRlbnRpZmllciBvZiB0aGUgZXh0ZW5zaW9uIGluc3RhbmNlCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBhbiBvcHRpb25hbCBuYW1lIG9mIHRoZSBleHRlbnNpb24gaW5zdGFuY2UKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGVsZW1lbnQgbmFtZT0idmFsaWRhdG9yIj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY2xhc3MiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIGNsYXNzIHRoYXQgaW1wbGVtZW50cyAmbHQ7Y29kZSZndDtvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5JV1NETDExVmFsaWRhdG9yJmx0Oy9jb2RlJmd0Oy4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgIDxhcHBJbmZvPgotICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIGtpbmQ9ImphdmEiIGJhc2VkT249Im9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLklXU0RMMTFWYWxpZGF0b3IiLz4KLSAgICAgICAgICAgICAgIDwvYXBwSW5mbz4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lc3BhY2UiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIG5hbWVzcGFjZSB0aGlzIHZhbGlkYXRvciB3aWxsIHZhbGlkYXRlLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJzaW5jZSIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAmbHQ7YiZndDtUaGlzIGV4dGVuc2lvbiBwb2ludCBpcyBwYXJ0IG9mIGFuIGludGVyaW0gQVBJIHRoYXQgaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnQgYW5kIGV4cGVjdGVkIHRvIGNoYW5nZSBzaWduaWZpY2FudGx5IGJlZm9yZSByZWFjaGluZyBzdGFiaWxpdHkuIEl0IGlzIGJlaW5nIG1hZGUgYXZhaWxhYmxlIGF0IHRoaXMgZWFybHkgc3RhZ2UgdG8gc29saWNpdCBmZWVkYmFjayBmcm9tIHBpb25lZXJpbmcgYWRvcHRlcnMgb24gdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBhbnkgY29kZSB0aGF0IHVzZXMgdGhpcyBBUEkgd2lsbCBhbG1vc3QgY2VydGFpbmx5IGJlIGJyb2tlbiAocmVwZWF0ZWRseSkgYXMgdGhlIEFQSSBldm9sdmVzLiZsdDsvYiZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iZXhhbXBsZXMiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIGEgV1NETCAxLjEgRXh0ZW5zaW9uIFZhbGlkYXRvciBjb250cmlidXRpb246Ci0mbHQ7cHJlJmd0OwotICAgJmx0O2V4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9JnF1b3Q7b3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi53c2RsMTF2YWxpZGF0b3ImcXVvdDsmZ3Q7Ci0gICAgICAmbHQ7dmFsaWRhdG9yCi0gICAgICAgICAgICBjbGFzcz0mcXVvdDtvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5odHRwLkhUVFBWYWxpZGF0b3ImcXVvdDsKLSAgICAgICAgICAgIG5hbWVzcGFjZT0mcXVvdDtodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvJnF1b3Q7LyZndDsKLSAgICZsdDsvZXh0ZW5zaW9uJmd0OwotJmx0Oy9wcmUmZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImFwaUluZm8iLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhlIHN1cHBsaWVkIGNsYXNzIG11c3QgaW1wbGVtZW50ICZsdDtjb2RlJmd0O29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLldTREwxMVZhbGlkYXRvciZsdDsvY29kZSZndDsuCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImltcGxlbWVudGF0aW9uIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICZsdDtjb2RlJmd0Owotb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuaHR0cC5IVFRQVmFsZGlhdG9yCi0mbHQ7L2NvZGUmZ3Q7Ci1Db250cmlidXRlcyB2YWxpZGF0aW9uIGxvZ2ljIGZvciB0aGUgbmFtZXNwYWNlIGh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvaHR0cC8uCi0mbHQ7Y29kZSZndDsKLW9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLm1pbWUuTUlNRVZhbGRpYXRvcgotJmx0Oy9jb2RlJmd0OwotQ29udHJpYnV0ZXMgdmFsaWRhdGlvbiBsb2dpYyBmb3IgdGhlIG5hbWVzcGFjZSBodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL21pbWUvLgotJmx0O2NvZGUmZ3Q7Ci1vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5zb2FwLlNPQVBWYWxkaWF0b3IKLSZsdDsvY29kZSZndDsKLUNvbnRyaWJ1dGVzIHZhbGlkYXRpb24gbG9naWMgZm9yIHRoZSBuYW1lc3BhY2UgaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLy4KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iY29weXJpZ2h0Ii8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4mbHQ7YnImZ3Q7Ci1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIAotYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIAotdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgJmx0O2EKLWhyZWY9JnF1b3Q7aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmcXVvdDsmZ3Q7aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmbHQ7L2EmZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL2xpYi8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL2xpYi8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzkyZjBlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9saWIvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSouamFyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vcGx1Z2luLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5NWEzOGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSEtLSBwcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24KLSEtLSBUb29sIE5hbWUKLQotX1BMVUdJTl9OQU1FICAgICAgID0gV1NETCBWYWxpZGF0b3IKLV9QUk9WSURFUl9OQU1FICAgICA9IEVjbGlwc2Uub3JnCi0KLV9VSV9XU0RMNEpfVkFMSURBVE9SX0RFTEVHQVRFID0gV1NETDRKLWJhc2VkIFdTREwgVmFsaWRhdG9yCi1fVUlfV1NETF9WQUxJREFUT1IgPSBXU0RMIFZhbGlkYXRvcgotX1VJX1dTRExfVkFMSURBVE9SX01BUktFUiA9IFdTREwgUHJvYmxlbQotCi0hLS0gRXh0ZW5zaW9uIHBvaW50cwotX1dTRExfRVhURU5TSU9OX1ZBTElEQVRPUl9OQU1FICAgPSBXU0RMIEV4dGVuc2lvbiBWYWxpZGF0b3IKLV9XU0RMMTFfVkFMSURBVE9SX05BTUUgPSBXU0RMIDEuMSBWYWxpZGF0b3IKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9wbHVnaW4ueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlNDlhMjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotPHBsdWdpbj4KLQotICAgPGV4dGVuc2lvbi1wb2ludCBpZD0iZXh0dmFsaWRhdG9yIiBuYW1lPSIlX1dTRExfRVhURU5TSU9OX1ZBTElEQVRPUl9OQU1FIiBzY2hlbWE9ImV4c2QvZXh0dmFsaWRhdG9yLmV4c2QiLz4KLSAgIAotICAgPGV4dGVuc2lvbi1wb2ludCBpZD0id3NkbDExdmFsaWRhdG9yIiBuYW1lPSIlV1NETDExX1ZBTElEQVRPUl9OQU1FIiBzY2hlbWE9ImV4c2Qvd3NkbDExdmFsaWRhdG9yLmV4c2QiLz4KLSAgIAotCTxleHRlbnNpb24KLSAgICAJcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLnZhbGlkYXRvckRlbGVnYXRlcyI+Ci0gICAgICAgIDxkZWxlZ2F0ZQotICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5lY2xpcHNlLlZhbGlkYXRvciIKLSAgICAgICAgICAgICAgbmFtZT0iJV9VSV9XU0RMNEpfVkFMSURBVE9SX0RFTEVHQVRFIgotICAgICAgICAgICAgICB0YXJnZXQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuZWNsaXBzZS5XU0RMRGVsZWdhdGluZ1ZhbGlkYXRvciIvPgotICAgICA8L2V4dGVuc2lvbj4JCi0KLSAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotICAgPCEtLSBBbiBleHRlbnNpb24gZm9yIGFkZGluZyB0aGUgV1NETCB2YWxpZGF0b3IgdG8gdGhlICAgICAgLS0+Ci0gICA8IS0tIHZhbGlkYXRpb24gZnJhbWV3b3JrLiAJCQkJCQkgICAgICAgICAgIC0tPgkJCQkJCQkJCQkgICAtLT4KLSAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotICAgPGV4dGVuc2lvbgotICAgICAgICAgaWQ9IndzZGxWYWxpZGF0b3IiCi0gICAgICAgICBuYW1lPSIlX1VJX1dTRExfVkFMSURBVE9SIgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLnZhbGlkYXRvciI+Ci0gICAgICA8dmFsaWRhdG9yPgotICAgICAgICAgPGZpbHRlcgotICAgICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlIgotICAgICAgICAgICAgICAgY2FzZVNlbnNpdGl2ZT0iZmFsc2UiCi0gICAgICAgICAgICAgICBuYW1lRmlsdGVyPSIqLndzZGwiPgotICAgICAgICAgPC9maWx0ZXI+Ci0gICAgICAgICA8aGVscGVyCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5IZWxwZXIiPgotICAgICAgICAgPC9oZWxwZXI+Ci0gICAgICAgICA8cnVuCi0gICAgICAgICAgICAgICBhc3luYz0idHJ1ZSIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2UuV1NETERlbGVnYXRpbmdWYWxpZGF0b3IiCi0gICAgICAgICAgICAgICBlbmFibGVkPSJ0cnVlIgotICAgICAgICAgICAgICAgZnVsbEJ1aWxkPSJ0cnVlIgotICAgICAgICAgICAgICAgaW5jcmVtZW50YWw9InRydWUiPgotICAgICAgICAgPC9ydW4+Ci0gICAgICAgICA8bWFya2VySWQgbWFya2VySWRWYWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi52YWxpZGF0aW9uTWFya2VyIi8+Ci0gICAgICA8L3ZhbGlkYXRvcj4KLSAgIDwvZXh0ZW5zaW9uPgotICAgPGV4dGVuc2lvbgotICAgICAgICAgaWQ9InZhbGlkYXRpb25NYXJrZXIiCi0gICAgICAgICBuYW1lPSIlX1VJX1dTRExfVkFMSURBVE9SX01BUktFUiIKLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5tYXJrZXJzIj4KLSAgICAgIDxzdXBlciB0eXBlPSJvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5wcm9ibGVtbWFya2VyIi8+Ci0gICAgICA8cGVyc2lzdGVudCB2YWx1ZT0idHJ1ZSIvPgotICAgPC9leHRlbnNpb24+Ci08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9DbGFzc2xvYWRlcldTRExWYWxpZGF0b3JEZWxlZ2F0ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL0NsYXNzbG9hZGVyV1NETFZhbGlkYXRvckRlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4N2NhOTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL0NsYXNzbG9hZGVyV1NETFZhbGlkYXRvckRlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwubG9nZ2luZy5JTG9nZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwubG9nZ2luZy5Mb2dnZXJGYWN0b3J5OwotCi0KLQotLyoqCi0gKiBBIGRlbGVnYXRlIGhvbGRzIGEgdmFsaWRhdG9yJ3MgaW5mb3JtYXRpb24gYW5kIGNhbiBpbnN0YW50aWF0ZSBpdAotICogd2hlbiByZXF1ZXN0ZWQgdG8uCi0gKi8KLXB1YmxpYyBjbGFzcyBDbGFzc2xvYWRlcldTRExWYWxpZGF0b3JEZWxlZ2F0ZSBleHRlbmRzIFdTRExWYWxpZGF0b3JEZWxlZ2F0ZQotewotICBwcml2YXRlIFN0cmluZyB2YWxpZGF0b3JDbGFzc25hbWUgPSBudWxsOwotICBwcml2YXRlIENsYXNzTG9hZGVyIGNsYXNzTG9hZGVyID0gbnVsbDsKLQotICAvKioKLSAgICogQ3JlYXRlIGEgZGVsZWdhdGUgZm9yIGEgdmFsaWRhdG9yIGJ5IGl0cyBjbGFzcyBuYW1lLgotICAgKiAKLSAgICogQHBhcmFtIHZhbGlkYXRvckNsYXNzbmFtZSBUaGUgbmFtZSBvZiB0aGUgdmFsaWRhdG9yIGNsYXNzLgotICAgKi8KLSAgcHVibGljIENsYXNzbG9hZGVyV1NETFZhbGlkYXRvckRlbGVnYXRlKFN0cmluZyB2YWxpZGF0b3JDbGFzc25hbWUpCi0gIHsKLSAgICB0aGlzLnZhbGlkYXRvckNsYXNzbmFtZSA9IHZhbGlkYXRvckNsYXNzbmFtZTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgYSBkZWxlZ2F0ZSBmb3IgYSB2YWxpZGF0b3IgYnkgaXRzIGNsYXNzIG5hbWUgYW5kIAotICAgKiBhIGNsYXNzIGxvYWRlciB0byBsb2FkIHRoZSB2YWxpZGF0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gdmFsaWRhdG9yQ2xhc3NuYW1lIFRoZSBuYW1lIG9mIHRoZSB2YWxpZGF0b3IgY2xhc3MuCi0gICAqIEBwYXJhbSBjbGFzc0xvYWRlciBUaGUgY2xhc3MgbG9hZGVyIHRvIHVzZSB0byBsb2FkIHRoZSB2YWxpZGF0b3IuCi0gICAqLwotICBwdWJsaWMgQ2xhc3Nsb2FkZXJXU0RMVmFsaWRhdG9yRGVsZWdhdGUoU3RyaW5nIHZhbGlkYXRvckNsYXNzbmFtZSwgQ2xhc3NMb2FkZXIgY2xhc3NMb2FkZXIpCi0gIHsKLSAgICB0aGlzKHZhbGlkYXRvckNsYXNzbmFtZSk7Ci0gICAgdGhpcy5jbGFzc0xvYWRlciA9IGNsYXNzTG9hZGVyOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuV1NETFZhbGlkYXRvckRlbGVnYXRlI2xvYWRWYWxpZGF0b3IoKQotICAgKi8KLSAgcHJvdGVjdGVkIElXU0RMVmFsaWRhdG9yIGxvYWRWYWxpZGF0b3IoKQotICB7Ci0JSVdTRExWYWxpZGF0b3IgdmFsaWRhdG9yID0gbnVsbDsKLSAgICBpZihjbGFzc0xvYWRlciA9PSBudWxsKQotICAgIHsKLSAgICAgIGNsYXNzTG9hZGVyID0gZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpOwotICAgIH0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBDbGFzcyB2YWxpZGF0b3JDbGFzcyA9Ci0gICAgICBjbGFzc0xvYWRlciAhPSBudWxsID8gY2xhc3NMb2FkZXIubG9hZENsYXNzKHZhbGlkYXRvckNsYXNzbmFtZSkgOiBDbGFzcy5mb3JOYW1lKHZhbGlkYXRvckNsYXNzbmFtZSk7Ci0KLSAgICAgIHZhbGlkYXRvciA9IChJV1NETFZhbGlkYXRvcil2YWxpZGF0b3JDbGFzcy5uZXdJbnN0YW5jZSgpOwotICAgIH0KLSAgICBjYXRjaChUaHJvd2FibGUgdCkKLSAgICB7Ci0gICAgCUxvZ2dlckZhY3RvcnkuZ2V0SW5zdGFuY2UoKS5nZXRMb2dnZXIoKS5sb2coIlVuYWJsZSB0byBsb2FkIHZhbGlkYXRvciAiICsgdmFsaWRhdG9yQ2xhc3NuYW1lLCBJTG9nZ2VyLlNFVl9FUlJPUiwgdCk7Ci0gICAgfQotICAgIHJldHVybiB2YWxpZGF0b3I7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLldTRExWYWxpZGF0b3JEZWxlZ2F0ZSNnZXRWYWxpZGF0b3JOYW1lKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VmFsaWRhdG9yTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gdmFsaWRhdG9yQ2xhc3NuYW1lOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvQ29uc3RhbnRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvQ29uc3RhbnRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2NjNmMmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL0NvbnN0YW50cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWw7Ci0KLS8qKgotICogU2V0IGNvbnN0YW50cyB0aGF0IHRoZSB2YWxpZGF0b3IgbWFrZXMgdXNlIG9mLgotICovCi1wdWJsaWMgaW50ZXJmYWNlIENvbnN0YW50cwotewotICAvKioKLSAgICogVGhlIG5hbWUgb2YgdGhlIHZhbGlkYXRvciBwcm9wZXJ0aWVzIGZpbGUuCi0gICAqLwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBXU0RMX1ZBTElEQVRPUl9QUk9QRVJUSUVTX0ZJTEUgPSAidmFsaWRhdGV3c2RsIjsKLQotICAvKioKLSAgICogVGhlIFNPQVAgMS4xIG5hbWVzcGFjZS4KLSAgICovCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE5TX1NPQVAxMSA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIjsKLQotICAvKioKLSAgICogVGhlIEhUVFAgbmFtZXNwYWNlLgotICAgKi8KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTlNfSFRUUCA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvIjsKLQotICAvKioKLSAgICogVGhlIE1JTUUgbmFtZXNwYWNlLgotICAgKi8KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTlNfTUlNRSA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL21pbWUvIjsKLSAgCi0gIC8qKgotICAgKiBUaGUgV1NETCBzY2hlbWEgY2FjaGUgYXR0cmlidXRlIGFsbG93cyBhbiBYTUxHcmFtbWFyUG9vbCBvYmplY3QgdG8gYmUgc2V0IGZvciB1c2UgaW4gCi0gICAqIGlubGluZSBzY2hlbWEgdmFsaWRhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFhNTFNDSEVNQV9DQUNIRV9BVFRSSUJVVEUgPSAiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy93c2RsL3NjaGVtYWNhY2hlIjsKLSAgCi0gIC8qKgotICAgKiBUaGUgV1NETCBzY2hlbWEgY2FjaGUgYXR0cmlidXRlIGFsbG93cyBhbiBYTUxHcmFtbWFyUG9vbCBvYmplY3QgdG8gYmUgc2V0IGZvciB1c2UgaW4gCi0gICAqIFhNTCBjb25mb3JtYW5jZSB2YWxpZGF0aW9uLgotICAgKi8KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgWE1MX0NBQ0hFX0FUVFJJQlVURSA9ICJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL3dzZGwveG1sY2FjaGUiOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL0NvbnRyb2xsZXJWYWxpZGF0aW9uSW5mby5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL0NvbnRyb2xsZXJWYWxpZGF0aW9uSW5mby5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMjMwYThkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9Db250cm9sbGVyVmFsaWRhdGlvbkluZm8uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsOwotCi0KLS8qKgotICogQW4gaW50ZXJmYWNlIGZvciB0aGUgdmFsaWRhdGlvbiBpbmZvIHRoYXQgYWxsb3dzIGZvciBzdGFydGluZyBhbmQKLSAqIGNvbXBsZXRpbmcgV1NETCBhbmQgV1MtSSB2YWxpZGF0aW9uLgotICovCi1wdWJsaWMgaW50ZXJmYWNlIENvbnRyb2xsZXJWYWxpZGF0aW9uSW5mbyBleHRlbmRzIElWYWxpZGF0aW9uSW5mbwotewotICAKLSAgLyoqCi0gICAqIFBlcmZvcm0gdGhlIG5lY2Vzc2FyeSBzdGVwcyB0byBjb21wbGV0ZSBXU0RMIHZhbGlkYXRpb24uCi0gICAqLwotICBwdWJsaWMgdm9pZCBjb21wbGV0ZVdTRExWYWxpZGF0aW9uKCk7Ci0gIAotLy8gIC8qKgotLy8gICAqIFBlcmZvcm0gdGhlIG5lY2Vzc2FyeSBzdGVwcyB0byBjb21wbGV0ZSBXUy1JIFdTREwgdmFsaWRhdGlvbi4KLS8vICAgKi8KLS8vICBwdWJsaWMgdm9pZCBjb21wbGV0ZVdTSVZhbGlkYXRpb24oKTsKLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvSVZhbGlkYXRpb25JbmZvLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvSVZhbGlkYXRpb25JbmZvLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmOTRlNjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL0lWYWxpZGF0aW9uSW5mby5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnJlc29sdmVyLlVSSVJlc29sdmVyOwotCi0KLS8qKgotICogQW4gaW50ZXJmYWNlIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCB2YWxpZGF0aW9uIGluZm9ybWF0aW9uLgotICogVGhpcyBpbnRlcmZhY2UgaXMgbm90IG1lYW50IHRvIGJlIGltcGxlbWVudGVkIGJ5IGNsaWVudHMuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSVZhbGlkYXRpb25JbmZvIGV4dGVuZHMgSVZhbGlkYXRpb25SZXBvcnQKLXsKLSAgCi0gIC8qKgotICAgKiBBZGQgYW4gZXJyb3IgbWVzc2FnZSBmb3IgdGhpcyBmaWxlLiAoVXNlcyB0aGUgVVJJIGZyb20gdGhpcyB2YWxpZGF0aW9uIGluZm8gb2JqZWN0LikKLSAgICogCi0gICAqIEBwYXJhbSBtZXNzYWdlIFRoZSBtZXNzYWdlIGZvciB0aGUgZXJyb3IuCi0gICAqIEBwYXJhbSBsaW5lIFRoZSBsaW5lIGxvY2F0aW9uIG9mIHRoZSBlcnJvciBpbiB0aGUgZmlsZS4KLSAgICogQHBhcmFtIGNvbHVtbiBUaGUgY29sdW1uIGxvY2F0aW9uIG9mIHRoZSBlcnJvciBpbiB0aGUgZmlsZS4KLSAgICogQGRlcHJlY2F0ZWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEVycm9yKFN0cmluZyBtZXNzYWdlLCBpbnQgbGluZSwgaW50IGNvbHVtbik7Ci0gIAotICAvKioKLSAgICogQWRkIGFuIGVycm9yIG1lc3NhZ2UuCi0gICAqIAotICAgKiBAcGFyYW0gbWVzc2FnZSBUaGUgbWVzc2FnZSBmb3IgdGhlIGVycm9yLgotICAgKiBAcGFyYW0gbGluZSBUaGUgbGluZSBsb2NhdGlvbiBvZiB0aGUgZXJyb3IgaW4gdGhlIGZpbGUuCi0gICAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbHVtbiBsb2NhdGlvbiBvZiB0aGUgZXJyb3IgaW4gdGhlIGZpbGUuCi0gICAqIEBwYXJhbSB1cmkgVGhlIFVSSSBvZiB0aGUgZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBlcnJvci4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEVycm9yKFN0cmluZyBtZXNzYWdlLCBpbnQgbGluZSwgaW50IGNvbHVtbiwgU3RyaW5nIHVyaSk7Ci0gIAotICAvKioKLSAgICogQWRkIGEgd2FybmluZyBtZXNzYWdlIGZvciB0aGlzIGZpbGUuIChVc2VzIHRoZSBVUkkgZnJvbSB0aGlzIHZhbGlkYXRpb24gaW5mbyBvYmplY3QuKQotICAgKiAKLSAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIG1lc3NhZ2UgZm9yIHRoZSB3YXJuaW5nLgotICAgKiBAcGFyYW0gbGluZSBUaGUgbGluZSBsb2NhdGlvbiBvZiB0aGUgd2FybmluZyBpbiB0aGUgZmlsZS4KLSAgICogQHBhcmFtIGNvbHVtbiBUaGUgY29sdW1uIGxvY2F0aW9uIG9mIHRoZSB3YXJuaW5nIGluIHRoZSBmaWxlLgotICAgKiBAZGVwcmVjYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkV2FybmluZyhTdHJpbmcgbWVzc2FnZSwgaW50IGxpbmUsIGludCBjb2x1bW4pOwotICAKLSAgLyoqCi0gICAqIEFkZCBhIHdhcm5pbmcgbWVzc2FnZS4KLSAgICogCi0gICAqIEBwYXJhbSBtZXNzYWdlIFRoZSBtZXNzYWdlIGZvciB0aGUgd2FybmluZy4KLSAgICogQHBhcmFtIGxpbmUgVGhlIGxpbmUgbG9jYXRpb24gb2YgdGhlIHdhcm5pbmcgaW4gdGhlIGZpbGUuCi0gICAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbHVtbiBsb2NhdGlvbiBvZiB0aGUgd2FybmluZyBpbiB0aGUgZmlsZS4KLSAgICogQHBhcmFtIHVyaSBUaGUgVVJJIG9mIHRoZSBmaWxlIHRoYXQgY29udGFpbnMgdGhlIGVycm9yLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkV2FybmluZyhTdHJpbmcgbWVzc2FnZSwgaW50IGxpbmUsIGludCBjb2x1bW4sIFN0cmluZyB1cmkpOwotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgVVJJIHJlc29sdmVyIGluIHVzZSBmb3IgdGhpcyB2YWxpZGF0aW9uLiBUaGUgVVJJIHJlc29sdmVyCi0gICAqIHJldHVybmVkIGlzIGFjdHVhbGx5IGEgVVJJIHJlc29sdmVyIGhhbmRsZXIgdGhhdCB3aWxsIAotICAgKiBpdGVyYXRlIHRocm91Z2ggYWxsIG9mIHRoZSByZWdpc3RlcmVkIFVSSSByZXNvbHZlcnMuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBVUkkgcmVzb2x2ZXIgaGFuZGxlci4KLSAgICovCi0gIHB1YmxpYyBVUklSZXNvbHZlciBnZXRVUklSZXNvbHZlcigpOwotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgYXR0cmlidXRlIHdpdGggdGhlIGdpdmVuIG5hbWUuIElmIHRoZSBhdHRyaWJ1dGUKLSAgICogaGFzIG5vdCBiZWVuIHJlZ2lzdGVyZWQsIHJldHVybiBudWxsLgotICAgKiAKLSAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSBiZWluZyByZXF1ZXN0ZWQuCi0gICAqIEByZXR1cm4gVGhlIGF0dHJpYnV0ZSB2YWx1ZSBpZiB0aGUgYXR0cmlidXRlIGhhcyBiZWVuIHJlZ2lzdGVyZWQsIG51bGwgb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIE9iamVjdCBnZXRBdHRyaWJ1dGUoU3RyaW5nIG5hbWUpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL0lWYWxpZGF0aW9uTWVzc2FnZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL0lWYWxpZGF0aW9uTWVzc2FnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZGZjYzRjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9JVmFsaWRhdGlvbk1lc3NhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUXVhbGlmaWVkTmFtZTsKLQotLyoqCi0gKiBBbiBpbnRlcmZhY2UgZm9yIGEgdmFsaWRhdGlvbiBtZXNzYWdlLiBBIHZhbGlkYXRpb24gbWVzc2FnZSBjb250YWlucyBpbmZvcm1hdGlvbgotICogZm9yIHRoZSBtZXNzYWdlLCBpdHMgc2V2ZXJpdHkgYW5kIHdoZXJlIGl0J3MgbG9jYXRlZC4KLSAqLwotcHVibGljIGludGVyZmFjZSBJVmFsaWRhdGlvbk1lc3NhZ2UKLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBRdWFsaWZpZWROYW1lIEVSUk9SX01FU1NBR0VfTUFQX1FVQUxJRklFRF9OQU1FID0gbmV3IFF1YWxpZmllZE5hbWUoIm9yZy5lY2xpcHNlLndzZGwudmFsaWRhdGUiLCAiZXJyb3JNZXNzYWdlTWFwIik7Ci0gIC8qKgotICAgKiBTZXZlcml0eSBlcnJvci4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNFVl9FUlJPUiA9IDA7Ci0gIC8qKgotICAgKiBTZXZlcml0eSB3YXJuaW5nLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0VWX1dBUk5JTkcgPSAxOwotICAKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIFVSSSBmb3IgdGhlIGZpbGUgdGhhdCBjb250YWlucyB0aGUgdmFsaWRhdGlvbiBtZXNzYWdlLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgVVJJIGZvciB0aGUgZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSB2YWxpZGF0aW9uIG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFVSSSgpOwotICAKLSAgLyoqCi0gICAqIFJldHVybiB0aGUgbWVzc2FnZSBmb3IgdGhpcyB2YWxpZGF0aW9uIG1lc3NhZ2UuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBtZXNzYWdlIGZvciB0aGlzIHZhbGlkYXRpb24gbWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TWVzc2FnZSgpOwotICAKLSAgLyoqCi0gICAqIFJldHVybiB0aGUgc2V2ZXJpdHkgb2YgdGhpcyB2YWxpZGF0aW9uIG1lc3NhZ2UuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBzZXZlcml0eSBvZiB0aGlzIHZhbGlkYXRpb24gbWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0U2V2ZXJpdHkoKTsKLSAgCi0gIC8qKgotICAgKiBSZXR1cm4gdGhlIGxpbmUgd2hlcmUgdGhpcyB2YWxpZGF0aW9uIG1lc3NhZ2UgaXMgbG9jYXRlZC4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIGxpbmUgd2hlcmUgdGhpcyB2YWxpZGF0aW9uIG1lc3NhZ2UgaXMgbG9jYXRlZC4KLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0TGluZSgpOwotICAKLSAgLyoqCi0gICAqIFJldHVybiB0aGUgY29sdW1uIHdoZXJlIHRoaXMgdmFsaWRhdGlvbiBtZXNzYWdlIGlzIGxvY2F0ZWQuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBjb2x1bW4gd2hlcmUgdGhpcyB2YWxpZGF0aW9uIG1lc3NhZ2UgaXMgbG9jYXRlZC4KLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0Q29sdW1uKCk7Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBsaXN0IG9mIG5lc3RlZCB2YWxpZGF0aW9uIG1lc3NhZ2VzLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgbGlzdCBvZiBuZXN0ZWQgdmFsaWRhdGlvbiBtZXNzYWdlcy4KLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldE5lc3RlZE1lc3NhZ2VzKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvSVZhbGlkYXRpb25SZXBvcnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9JVmFsaWRhdGlvblJlcG9ydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjcyOTk2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9JVmFsaWRhdGlvblJlcG9ydC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLQotLyoqCi0gKiBBbiBpbnRlcmZhY2UgZm9yIGEgV1NETCB2YWxpZGF0aW9uIHJlcG9ydC4KLSAqLwotcHVibGljIGludGVyZmFjZSBJVmFsaWRhdGlvblJlcG9ydAotewotICAvKioKLSAgICogUmV0dXJucyB0aGUgVVJJIGZvciB0aGUgZmlsZSB0aGUgcmVwb3J0IHJlZmVycyB0by4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIFVSSSBmb3IgdGhlIGZpbGUgdGhlIHJlcG9ydCByZWZlcnMgdG8uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEZpbGVVUkkoKTsKLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGZpbGUgaXMgdmFsaWQgYWNjb3JkaW5nIHRvIHRoZSBXU0RMIHNwZWNpZmljYXRpb24uCi0gICAqIAotICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIGZpbGUgaXMgV1NETCB2YWxpZCwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNXU0RMVmFsaWQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyBhbiBhcnJheSBvZiB2YWxpZGF0aW9uIG1lc3NhZ2VzLgotICAgKiAKLSAgICogQHJldHVybiBBbiBhcnJheSBvZiB2YWxpZGF0aW9uIG1lc3NhZ2VzLgotICAgKi8KLSAgcHVibGljIElWYWxpZGF0aW9uTWVzc2FnZVtdIGdldFZhbGlkYXRpb25NZXNzYWdlcygpOwotICAKLSAgLyoqCi0gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBhcmUgZXJyb3JzLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqIAotICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlcmUgYXJlIGVycm9ycywgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaGFzRXJyb3JzKCk7Ci0gIAotICBwdWJsaWMgSGFzaE1hcCBnZXROZXN0ZWRNZXNzYWdlcygpOwotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvSVdTRExWYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9JV1NETFZhbGlkYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzkwMmU2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9JV1NETFZhbGlkYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmV4Y2VwdGlvbi5WYWxpZGF0ZVdTRExFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci0KLS8qKgotICogQW4gaW50ZXJmYWNlIGZvciBhIFdTREwgdmFsaWRhdG9yLiBUaGlzIGlzIHRoZSBpbnRlcmZhY2UgZm9yIGEgdG9wIGxldmVsIHZhbGlkYXRvciAKLSAqIGNvbXBvbmVudCBzdWNoIGFzIGEgV1NETCAxLjEgdmFsaWRhdG9yLCBXU0RMIDEuMiB2YWxpZGF0b3Igb3IgV1MtSSBCYXNpYyBQcm9maWxlIHZhbGlkYXRvci4KLSAqLwotcHVibGljIGludGVyZmFjZSBJV1NETFZhbGlkYXRvcgotewotICAvKioKLSAgICogVmFsaWRhdGUgdGhlIGZpbGUgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KLSAgICogCi0gICAqIEBwYXJhbSBkb21Nb2RlbCBBIERPTSBtb2RlbCBvZiB0aGUgZmlsZSB0byBiZSB2YWxpZGF0ZWQuCi0gICAqIEBwYXJhbSB2YWxJbmZvIFRoZSBpbmZvcm1hdGlvbiBmb3IgdGhlIHZhbGlkYXRpb24gdGhhdCBpcyBiZWluZyBwZXJmb3JtZWQuCi0gICAqIEB0aHJvd3MgVmFsaWRhdGVXU0RMRXhjZXB0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCB2YWxpZGF0ZShEb2N1bWVudCBkb21Nb2RlbCwgSVZhbGlkYXRpb25JbmZvIHZhbEluZm8pIHRocm93cyBWYWxpZGF0ZVdTRExFeGNlcHRpb247Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvVmFsaWRhdGlvbkNvbnRyb2xsZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9WYWxpZGF0aW9uQ29udHJvbGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTBkZmYyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9WYWxpZGF0aW9uQ29udHJvbGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMuaW1wbC5YTUxFcnJvclJlcG9ydGVyOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnBhcnNlcnMuRE9NUGFyc2VyOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnBhcnNlcnMuU3RhbmRhcmRQYXJzZXJDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTklFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLmdyYW1tYXJzLlhNTEdyYW1tYXJQb29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuZXhjZXB0aW9uLlZhbGlkYXRlV1NETEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuSUxvZ2dlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuTG9nZ2VyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnJlc29sdmVyLlVSSVJlc29sdmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudXRpbC5NZXNzYWdlR2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sLkFic3RyYWN0WE1MQ29uZm9ybWFuY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sLkRlZmF1bHRYTUxWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC54bWwuSVhNTFZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbC5MaW5lTnVtYmVyRE9NUGFyc2VyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnhtbC5zYXguSW5wdXRTb3VyY2U7Ci0KLS8qKgotICogVGhpcyBpcyB0aGUgbWFpbiBlbnRyeXBvaW50IHRvIHRoZSBXU0RMIFZhbGlkYXRvci4gVGhlIGNvbnRyb2xsZXIgaXMKLSAqIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIHRoZSByZWFkZXIsIHRoZSBYTUwgY29uZm9ybWFuY2UgY2hlY2ssIHRoZSBXU0RMCi0gKiB2YWxpZGF0aW9uIGFuZCB0aGUgV1MtSSB2YWxpZGF0aW9uIGlmIHNlbGVjdGVkLiBUaGUgY29udHJvbGxlciBjb250YWlucyBhbnkKLSAqIGVycm9ycyBhbmQgd2FybmluZ3MgZ2VuZXJhdGVkIGFzIHdlbGwuCi0gKi8KLXB1YmxpYyBjbGFzcyBWYWxpZGF0aW9uQ29udHJvbGxlcgotewotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIF9FUlJPUl9QUk9CTEVNX1dTRExfVkFMSURBVE9SID0gIl9FUlJPUl9QUk9CTEVNX1dTRExfVkFMSURBVE9SIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBfRVJST1JfTk9fV1NETF9WQUxJREFUT1IgPSAiX0VSUk9SX05PX1dTRExfVkFMSURBVE9SIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBfRVJST1JfUFJPQkxFTV9FWFRfVkFMSURBVE9SID0gIl9FUlJPUl9QUk9CTEVNX0VYVF9WQUxJREFUT1IiOwotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIF9FUlJPUl9ET0NVTUVOVF9MT0NBVElPTiA9ICJfRVJST1JfRE9DVU1FTlRfTE9DQVRJT04iOwotCi0gIHByb3RlY3RlZCBWYWxpZGF0b3JSZWdpc3RyeSB2ZXI7Ci0gIHByb3RlY3RlZCBSZXNvdXJjZUJ1bmRsZSByZXNvdXJjZWJ1bmRsZTsKLSAgcHJvdGVjdGVkIE1lc3NhZ2VHZW5lcmF0b3IgbWVzc2FnZWdlbmVyYXRvcjsKLSAgcHJvdGVjdGVkIFVSSVJlc29sdmVyIHVyaVJlc29sdmVyOwotCi0gIC8vcHJvdGVjdGVkIFN0cmluZyB3c2RsTmFtZXNwYWNlID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIFJlc291cmNlQnVuZGxlIG5lZWRzIHRvIGJlIHNldCBzbyBpdCBjYW4gYmUgcGFzc2VkIHRvIHRoZSByZWFkZXIuCi0gICAqIAotICAgKiBAcGFyYW0gcmIKLSAgICogICAgICAgICAgICBUaGUgcmVzb3VyY2UgYnVuZGxlIGZvciB0aGlzIHZhbGlkYXRvci4KLSAgICovCi0gIHB1YmxpYyBWYWxpZGF0aW9uQ29udHJvbGxlcihSZXNvdXJjZUJ1bmRsZSByYiwgVVJJUmVzb2x2ZXIgdXJpUmVzb2x2ZXIpCi0gIHsKLSAgICByZXNvdXJjZWJ1bmRsZSA9IHJiOwotICAgIG1lc3NhZ2VnZW5lcmF0b3IgPSBuZXcgTWVzc2FnZUdlbmVyYXRvcihyZXNvdXJjZWJ1bmRsZSk7Ci0gICAgdGhpcy51cmlSZXNvbHZlciA9IHVyaVJlc29sdmVyOwotCi0gICAgdmVyID0gVmFsaWRhdG9yUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFZhbGlkYXRlIHRoZSBXU0RMIGZpbGUgd2l0aCB0aGUgc3RyZWFtLiBUaGlzIG1ldGhvZCB3aWxsIHJ1biB0aGUgY2hlY2sgb2YgdGhlIAotICAgKiBXU0RMIGRvY3VtZW50LiBUaGUgdmFsaWRhdGlvbiBpcyBicm9rZW4gdXAgaW50byB0aHJlZSBzdGFnZXM6IFhNTCBjb25mb3JtYW5jZSwKLSAgICogV1NETCBzZW1hbnRpYywgYW5kIHBvc3QgdmFsaWRhdGlvbi4KLSAgICogCi0gKiBAcGFyYW0gdXJpIAotICogCQkJVGhlIFVSSSBvZiB0aGUgV1NETCBkb2N1bWVudCB0byBiZSB2YWxpZGF0ZWQuCi0gKiBAcGFyYW0gaW5wdXRTdHJlYW0gCi0gKiAJCQlUaGUgY29udGVudHMgb2YgdGhlIFdTREwgZG9jdW1lbnQgdG8gYmUgdmFsaWRhdGVkLgotICogQHBhcmFtIGNvbmZpZ3VyYXRpb24KLSAqIAkJCVRoZSBXU0RMIHZhbGlkYXRpb24gY29uZmlndXJhdGlvbiB0byBiZSB1c2VkIHdoaWxlIHZhbGlkYXRpbmcgdGhpcyBVUkkuCi0gKiBAcmV0dXJuIEEgdmFsaWRhdGlvbiByZXBvcnQgd2l0aCB0aGUgdmFsaWRhdGlvbiBpbmZvIGZvciB0aGUgZmlsZS4KLSAqLwotICBwdWJsaWMgSVZhbGlkYXRpb25SZXBvcnQgdmFsaWRhdGUoU3RyaW5nIHVyaSwgSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0sIFdTRExWYWxpZGF0aW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotICB7Ci0gICAgCi0gICAgSW5wdXRTdHJlYW0geG1sVmFsaWRhdGVTdHJlYW0gPSBudWxsOwotICAgIElucHV0U3RyZWFtIHdzZGxWYWxpZGF0ZVN0cmVhbSA9IG51bGw7Ci0gICAgaWYgKGlucHV0U3RyZWFtICE9IG51bGwpCi0gICAgeyAvL2NvcHkgdGhlIGlucHV0U3RyZWFtIHNvIHdlIGNhbiB1c2UgaXQgbW9yZSB0aGFuIG9uY2UKLSAgICAgIFN0cmluZyBjb250ZW50cyA9IGNyZWF0ZVN0cmluZ0ZvcklucHV0U3RyZWFtKGlucHV0U3RyZWFtKTsKLSAgICAgIHhtbFZhbGlkYXRlU3RyZWFtID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGNvbnRlbnRzLmdldEJ5dGVzKCkpOwotICAgICAgd3NkbFZhbGlkYXRlU3RyZWFtID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGNvbnRlbnRzLmdldEJ5dGVzKCkpOwotICAgIH0KLSAgICAKLSAgICBDb250cm9sbGVyVmFsaWRhdGlvbkluZm8gdmFsSW5mbyA9IG5ldyBWYWxpZGF0aW9uSW5mb0ltcGwodXJpLCBtZXNzYWdlZ2VuZXJhdG9yKTsKLSAgICAoKFZhbGlkYXRpb25JbmZvSW1wbCl2YWxJbmZvKS5zZXRVUklSZXNvbHZlcih1cmlSZXNvbHZlcik7Ci0gICAgKChWYWxpZGF0aW9uSW5mb0ltcGwpdmFsSW5mbykuc2V0Q29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uKTsKLQotICAgIGlmICh2YWxpZGF0ZVhNTCh2YWxJbmZvLCB4bWxWYWxpZGF0ZVN0cmVhbSkpCi0gICAgewotICAgICAgRG9jdW1lbnQgd3NkbGRvYyA9IGdldERvY3VtZW50KHVyaSwgd3NkbFZhbGlkYXRlU3RyZWFtLCB2YWxJbmZvKTsKLQotICAgICAgaWYoIXZhbEluZm8uaGFzRXJyb3JzKCkpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyB3c2RsbnMgPSBnZXRXU0RMTmFtZXNwYWNlKHdzZGxkb2MpOwotICAgICAgICBpZih3c2RsbnMgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGlmICh2YWxpZGF0ZVdTREwod3NkbGRvYywgdmFsSW5mbywgd3NkbG5zKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB2YWxpZGF0ZUV4dGVuc2lvblZhbGlkYXRvcnMod3NkbGRvYywgdmFsSW5mbywgd3NkbG5zKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHZhbEluZm87Ci0gIH0KLQotICAvKioKLSAgICogVmFsaWRhdGUgdGhlIGZpbGUgZm9yIFhNTCBjb25mb3JtYW5jZS4KLQkgKiBAcGFyYW0gdmFsSW5mbyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdmFsaWRhdGlvbgotICAgKiBAcGFyYW0gaW5wdXRTdHJlYW0gdGhlIGlucHV0U3RyZWFtIHRvIHZhbGlkYXRlCi0gICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgZmlsZSBpcyBjb25mb3JtYW50LCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZVhNTChDb250cm9sbGVyVmFsaWRhdGlvbkluZm8gdmFsSW5mbywgSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0pCi0gIHsKLSAgICBJWE1MVmFsaWRhdG9yIHhtbFZhbGlkYXRvciA9IEFic3RyYWN0WE1MQ29uZm9ybWFuY2VGYWN0b3J5LmdldEluc3RhbmNlKCkuZ2V0WE1MVmFsaWRhdG9yKCk7Ci0gICAgeG1sVmFsaWRhdG9yLnNldFVSSVJlc29sdmVyKHVyaVJlc29sdmVyKTsKLSAgICB4bWxWYWxpZGF0b3Iuc2V0RmlsZSh2YWxJbmZvLmdldEZpbGVVUkkoKSk7Ci0gICAgaWYgKHhtbFZhbGlkYXRvciBpbnN0YW5jZW9mIERlZmF1bHRYTUxWYWxpZGF0b3IpCi0gICAgewotICAgICAgICAoKERlZmF1bHRYTUxWYWxpZGF0b3IpeG1sVmFsaWRhdG9yKS5zZXRJbnB1dFN0cmVhbShpbnB1dFN0cmVhbSk7Ci0gICAgICAgIFhNTEdyYW1tYXJQb29sIGdyYW1tYXJQb29sID0gKFhNTEdyYW1tYXJQb29sKXZhbEluZm8uZ2V0QXR0cmlidXRlKENvbnN0YW50cy5YTUxfQ0FDSEVfQVRUUklCVVRFKTsKLSAgICAgICAgaWYoZ3JhbW1hclBvb2wgIT0gbnVsbCkKLSAgICAgICAgICAoKERlZmF1bHRYTUxWYWxpZGF0b3IpeG1sVmFsaWRhdG9yKS5zZXRHcmFtbWFyUG9vbChncmFtbWFyUG9vbCk7Ci0gICAgfQotICAgIC8veG1sVmFsaWRhdG9yLnNldFZhbGlkYXRpb25JbmZvKHZhbEluZm8pOwotICAgIHhtbFZhbGlkYXRvci5ydW4oKTsKLSAgICAvLyBpZiB0aGVyZSBhcmUgbm8geG1sIGNvbmZvcm1hbmNlIHByb2JsZW1zIGdvIG9uIHRvIGNoZWNrIHRoZSB3c2RsIHN0dWZmCi0gICAgaWYgKHhtbFZhbGlkYXRvci5oYXNFcnJvcnMoKSkKLSAgICB7Ci0gICAgICAvLyB0ZW1wIGhhbmRsaW5nIG9mIFhNTCBlcnJvcnMgdW50aWwgdmFsaWRhdG9yIGlzIHVwZGF0ZWQuCi0gICAgICBMaXN0IGVycm9ycyA9IHhtbFZhbGlkYXRvci5nZXRFcnJvcnMoKTsKLSAgICAgIEl0ZXJhdG9yIGVycm9yc0l0ZXIgPSBlcnJvcnMuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChlcnJvcnNJdGVyLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgSVZhbGlkYXRpb25NZXNzYWdlIHZhbE1lcyA9IChJVmFsaWRhdGlvbk1lc3NhZ2UpZXJyb3JzSXRlci5uZXh0KCk7Ci0gICAgICAgIAotICAgICAgICBpZiAodmFsTWVzIGluc3RhbmNlb2YgVmFsaWRhdGlvbk1lc3NhZ2VJbXBsICYmIHZhbEluZm8gaW5zdGFuY2VvZiBWYWxpZGF0aW9uSW5mb0ltcGwpCi0gICAgICAgIHsgICBTdHJpbmcgZXJyb3JLZXkgPSAoKFZhbGlkYXRpb25NZXNzYWdlSW1wbCl2YWxNZXMpLmdldEVycm9yS2V5KCk7Ci0gICAgICAgICAgICBPYmplY3RbXSBtZXNzYWdlQXJncyA9ICgoVmFsaWRhdGlvbk1lc3NhZ2VJbXBsKXZhbE1lcykuZ2V0TWVzc2FnZUFyZ3VtZW50cygpOwotICAgICAgICAgICAgKChWYWxpZGF0aW9uSW5mb0ltcGwpdmFsSW5mbykuYWRkRXJyb3IodmFsTWVzLmdldE1lc3NhZ2UoKSwgdmFsTWVzLmdldExpbmUoKSwgdmFsTWVzLmdldENvbHVtbigpLCB2YWxNZXMuZ2V0VVJJKCksIGVycm9yS2V5LCBtZXNzYWdlQXJncyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICB2YWxJbmZvLmFkZEVycm9yKHZhbE1lcy5nZXRNZXNzYWdlKCksIHZhbE1lcy5nZXRMaW5lKCksIHZhbE1lcy5nZXRDb2x1bW4oKSwgdmFsTWVzLmdldFVSSSgpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAvL3dzZGxOYW1lc3BhY2UgPSB4bWxWYWxpZGF0b3IuZ2V0V1NETE5hbWVzcGFjZSgpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIAotICAvKioKLSAgICogVmFsaWRhdGUgdGhlIGZpbGUgZm9yIFhNTCBjb25mb3JtYW5jZS4KLQkgKiBAcGFyYW0gdmFsSW5mbyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdmFsaWRhdGlvbgotICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIGZpbGUgaXMgY29uZm9ybWFudCwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVYTUwoQ29udHJvbGxlclZhbGlkYXRpb25JbmZvIHZhbEluZm8pCi0gIHsgcmV0dXJuIHZhbGlkYXRlWE1MKHZhbEluZm8sIG51bGwpOwotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlIHRoZSBXU0RMIGZpbGUuIFNldCB0aGUgZXJyb3JzIGFuZCB3YXJuaW5nIGFwcHJvcHJpYXRlbHkuCi0gICAqIAotICAgKiBAcGFyYW0gd3NkbGRvYyBBIFczQyBkb2N1bWVudCByZXByZXNlbnRhdGlvbiBvZiB0aGUgV1NETCBkb2N1bWVudC4KLSAgICogQHBhcmFtIHZhbEluZm8gVGhlIGN1cnJlbnQgdmFsaWRhdGlvbiBpbmZvcm1hdGlvbi4KLSAgICogQHBhcmFtIHdzZGxOYW1lc3BhY2UgVGhlIFdTREwgbmFtZXNwYWNlIHRvIHZhbGlkYXRlLgotICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIGZpbGUgaXMgdmFsaWQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlV1NETChEb2N1bWVudCB3c2RsZG9jLCBDb250cm9sbGVyVmFsaWRhdGlvbkluZm8gdmFsSW5mbywgU3RyaW5nIHdzZGxOYW1lc3BhY2UpCi0gIHsKLSAgICBXU0RMVmFsaWRhdG9yRGVsZWdhdGVbXSB3c2RsVmFscyA9IHZlci5xdWVyeVZhbGlkYXRvclJlZ2lzdHJ5KHdzZGxOYW1lc3BhY2UsIFZhbGlkYXRvclJlZ2lzdHJ5LldTRExfVkFMSURBVE9SKTsKLSAgICBpZiAod3NkbFZhbHMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHdzZGxWYWxzLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICBXU0RMVmFsaWRhdG9yRGVsZWdhdGUgd3NkbHZhbGRlbCA9IHdzZGxWYWxzW2ldOwotICAgICAgICBJV1NETFZhbGlkYXRvciB3c2RsVmFsID0gd3NkbHZhbGRlbC5nZXRWYWxpZGF0b3IoKTsKLQotICAgICAgICAvLyBJZiB0aGUgd3NkbCB2YWxpZGF0b3IgaXNuJ3QgbnVsbCwgdmFsaWRhdGUuCi0gICAgICAgIGlmICh3c2RsVmFsICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB3c2RsVmFsLnZhbGlkYXRlKHdzZGxkb2MsIHZhbEluZm8pOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCAoVmFsaWRhdGVXU0RMRXhjZXB0aW9uIGUpCi0gICAgICAgICAgewotICAgICAgICAgICAgdmFsSW5mby5hZGRFcnJvcihtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfRVJST1JfUFJPQkxFTV9XU0RMX1ZBTElEQVRPUiwgd3NkbE5hbWVzcGFjZSksIDEsIDEsIHZhbEluZm8uZ2V0RmlsZVVSSSgpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLy8gSWYgdGhlIHZhbGlkYXRvciBpcyBudWxsIGFuZCB0aGUgbmFtZXNwYWNlIGlzbid0IGNyZWF0ZSBhbiBlcnJvci4KLSAgICAgICAgLy8gSWYgdGhlIG5hbWVzcGFjZSBpcyBudWxsIHRoZSBmaWxlIGlzIGVtcHR5IChhbmQgdGhlIFhNTCB2YWxpZGF0b3IKLSAgICAgICAgLy8gaGFzIGxldCBpdCBnbykKLSAgICAgICAgLy8gc28gaXQgaXMgdmFsaWQgYnV0IGRvZXMgbm90IG5lZWQgdG8gYmUgdmFsaWRhdGVkLgotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX05PX1dTRExfVkFMSURBVE9SLCB3c2RsTmFtZXNwYWNlKSwKLSAgICAgICAgICAgIDEsCi0gICAgICAgICAgICAxLAotICAgICAgICAgICAgdmFsSW5mby5nZXRGaWxlVVJJKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIE5vIHZhbGlkYXRvcnMgcmVnaXN0ZXJlZC4KLSAgICBlbHNlCi0gICAgewotICAgICAgdmFsSW5mby5hZGRFcnJvcihtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfRVJST1JfTk9fV1NETF9WQUxJREFUT1IsIHdzZGxOYW1lc3BhY2UpLCAxLCAxLCB2YWxJbmZvLmdldEZpbGVVUkkoKSk7Ci0gICAgfQotICAgIHZhbEluZm8uY29tcGxldGVXU0RMVmFsaWRhdGlvbigpOwotCi0gICAgcmV0dXJuIHZhbEluZm8uaXNXU0RMVmFsaWQoKTsKLSAgfQotCi0gIC8qKgotICAgKiBWYWxpZGF0ZSB0aGUgV1NETCBmaWxlIHdpdGggdGhlIGV4dGVuc2lvbiB2YWxpZGF0b3IuIFNldCB0aGUgZXJyb3JzIGFuZCB3YXJuaW5nIGFwcHJvcHJpYXRlbHkuCi0gICAqIAotICAgKiBAcGFyYW0gd3NkbGRvYyBBIFczQyBkb2N1bWVudCByZXByZXNlbnRhdGlvbiBvZiB0aGUgV1NETCBkb2N1bWVudC4KLSAgICogQHBhcmFtIHZhbEluZm8gVGhlIGN1cnJlbnQgdmFsaWRhdGlvbiBpbmZvcm1hdGlvbi4KLSAgICogQHBhcmFtIHdzZGxOYW1lc3BhY2UgVGhlIFdTREwgbmFtZXNwYWNlIHRvIHZhbGlkYXRlLgotICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIGZpbGUgaXMgdmFsaWQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHZhbGlkYXRlRXh0ZW5zaW9uVmFsaWRhdG9ycyhEb2N1bWVudCB3c2RsZG9jLCBDb250cm9sbGVyVmFsaWRhdGlvbkluZm8gdmFsSW5mbywgU3RyaW5nIHdzZGxOYW1lc3BhY2UpCi0gIHsKLSAgICBXU0RMVmFsaWRhdG9yRGVsZWdhdGVbXSBleHRWYWxzID0gdmVyLnF1ZXJ5VmFsaWRhdG9yUmVnaXN0cnkod3NkbE5hbWVzcGFjZSwgVmFsaWRhdG9yUmVnaXN0cnkuRVhUX1ZBTElEQVRPUik7Ci0gICAgaWYoZXh0VmFscyAhPSBudWxsKQotICAgIHsKLSAgICAgIGludCBudW12YWxzID0gZXh0VmFscy5sZW5ndGg7Ci0gICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbnVtdmFsczsgaSsrKQotICAgICAgewotICAgICAgICBXU0RMVmFsaWRhdG9yRGVsZWdhdGUgZXh0dmFsZGVsID0gZXh0VmFsc1tpXTsKLSAgICAgICAgSVdTRExWYWxpZGF0b3IgZXh0dmFsID0gZXh0dmFsZGVsLmdldFZhbGlkYXRvcigpOwotICAgICAgICBpZihleHR2YWwgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICBleHR2YWwudmFsaWRhdGUod3NkbGRvYywgdmFsSW5mbyk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoKFRocm93YWJsZSAgdCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB2YWxJbmZvLmFkZFdhcm5pbmcobWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX1BST0JMRU1fRVhUX1ZBTElEQVRPUiwgIGV4dHZhbGRlbC5nZXRWYWxpZGF0b3JOYW1lKCksIHdzZGxOYW1lc3BhY2UpLCAxLCAxLCB2YWxJbmZvLmdldEZpbGVVUkkoKSk7Ci0gICAgICAgICAgICBMb2dnZXJGYWN0b3J5LmdldEluc3RhbmNlKCkuZ2V0TG9nZ2VyKCkubG9nKG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9QUk9CTEVNX0VYVF9WQUxJREFUT1IsICBleHR2YWxkZWwuZ2V0VmFsaWRhdG9yTmFtZSgpLCB3c2RsTmFtZXNwYWNlKSwgSUxvZ2dlci5TRVZfRVJST1IsIHQpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBTZXQgdGhlIFJlc291cmNlQnVuZGxlIGZvciB0aGlzIFZhbGlkYXRvck1hbmFnZXIuCi0gICAqIAotICAgKiBAcGFyYW0gcmIKLSAgICogICAgICAgICAgICBUaGUgcmVzb3VyY2UgYnVuZGxlIHRvIHNldC4KLSAgICogQHNlZSAjZ2V0UmVzb3VyY2VCdW5kbGUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFJlc291cmNlQnVuZGxlKFJlc291cmNlQnVuZGxlIHJiKQotICB7Ci0gICAgcmVzb3VyY2VidW5kbGUgPSByYjsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIFJlc291cmNlQnVuZGxlIGZvciB0aGlzIFZhbGlkYXRpb25Db250cm9sbGVyLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgcmVzb3VyY2UgYnVuZGxlIHNldCBmb3IgdGhpcyBWYWxpZGF0aW9uQ29udHJvbGxlci4KLSAgICogQHNlZSAjc2V0UmVzb3VyY2VCdW5kbGUKLSAgICovCi0gIHB1YmxpYyBSZXNvdXJjZUJ1bmRsZSBnZXRSZXNvdXJjZUJ1bmRsZSgpCi0gIHsKLSAgICByZXR1cm4gcmVzb3VyY2VidW5kbGU7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgYSBET00gZG9jdW1lbnQgcmVwcmVzZW50YXRpb24gb2YgdGhlIFdTREwgZG9jdW1lbnQuCi0gICAqIAotICAgKiBAcGFyYW0gdXJpIAotICAgKiAJCVRoZSB1cmkgb2YgdGhlIGZpbGUgdG8gcmVhZAotICAgKiBAcGFyYW0gaW5wdXRTdHJlYW0KLSAgICogCQlBbiBvcHRpb25hbCBJbnB1dFN0cmVhbSB0byByZWFkIHRoZSBkb2N1bWVudCBmcm9tLgotICAgKiBAcGFyYW0gdmFsaW5mbwotICAgKiAJCUEgdmFsaWRhdGlvbiBpbmZvIG9iamVjdCB1c2VkIGZvciByZXBvcnRpbmcgbWVzc2FnZXMuCi0gICAqIEByZXR1cm4gVGhlIERPTSBtb2RlbCBvZiB0aGUgV1NETCBkb2N1bWVudCBvciBudWxsIGlmIHRoZSBkb2N1bWVudCBjYW4ndCBiZSByZWFkLgotICAgKi8KLSAgcHJpdmF0ZSBEb2N1bWVudCBnZXREb2N1bWVudChTdHJpbmcgdXJpLCBJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSwgQ29udHJvbGxlclZhbGlkYXRpb25JbmZvIHZhbGluZm8pCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBDYXRjaCBhIHByZW1hdHVyZSBFT0YgZXJyb3IgdG8gYWxsb3cgZW1wdHkgV1NETCBmaWxlcyB0byBiZSBjb25zaWRlcmVkIHZhbGlkLgotICAgICAgU3RhbmRhcmRQYXJzZXJDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBuZXcgU3RhbmRhcmRQYXJzZXJDb25maWd1cmF0aW9uKCkKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIFhNTEVycm9yUmVwb3J0ZXIgY3JlYXRlRXJyb3JSZXBvcnRlcigpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gbmV3IFhNTEVycm9yUmVwb3J0ZXIoKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJlcG9ydEVycm9yKFN0cmluZyBkb21haW4sIFN0cmluZyBrZXksIE9iamVjdFtdIGFyZ3VtZW50cywgc2hvcnQgc2V2ZXJpdHkpIHRocm93cyBYTklFeGNlcHRpb24KLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgYm9vbGVhbiByZXBvcnRFcnJvciA9IHRydWU7Ci0gICAgICAgICAgICAgIGlmIChrZXkuZXF1YWxzKCJQcmVtYXR1cmVFT0YiKSkKLSAgICAgICAgICAgICAgeyAgICAgICAgIAotICAgICAgICAgICAgICAgIHJlcG9ydEVycm9yID0gZmFsc2U7Ci0gICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICBpZiAocmVwb3J0RXJyb3IpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzdXBlci5yZXBvcnRFcnJvcihkb21haW4sIGtleSwgYXJndW1lbnRzLCBzZXZlcml0eSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9OwotICAgICAgICB9Ci0gICAgICB9OwotICAgICAgCi0gICAgICBJbnB1dFNvdXJjZSBpbnB1dFNvdXJjZSA9IG51bGw7Ci0gICAgICBpZiAoaW5wdXRTdHJlYW0gIT0gbnVsbCkKLSAgICAgIHsgLy90aGVuIHdlIHdhbnQgdG8gY3JlYXRlIGEgRE9NIGZyb20gdGhlIGlucHV0c3RyZWFtCi0gICAgICAgIGlucHV0U291cmNlID0gbmV3IElucHV0U291cmNlKGlucHV0U3RyZWFtKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsgaW5wdXRTb3VyY2UgPSBuZXcgSW5wdXRTb3VyY2UodXJpKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgRE9NUGFyc2VyIGJ1aWxkZXIgPSBuZXcgTGluZU51bWJlckRPTVBhcnNlcihjb25maWd1cmF0aW9uKTsKLSAgICAgIGJ1aWxkZXIucGFyc2UoaW5wdXRTb3VyY2UpOwotICAgICAgRG9jdW1lbnQgZG9jID0gYnVpbGRlci5nZXREb2N1bWVudCgpOwotCi0gICAgICByZXR1cm4gZG9jOwotICAgIH0KLSAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgewotICAgICAgLy8gSW4gdGhpcyBjYXNlIHRoZSB2YWxpZGF0b3Igd2lsbCBmYWlsIHdpdGggYW4gdW5leHBsYWluZWQgZXJyb3IgbWVzc2FnZQotICAgICAgLy8gYWJvdXQgYSBudWxsIFdTREwgbmFtZXNwYWNlLiBUaGlzIGVycm9yIHNob3VsZCBiZSBhZGRyZXNzZWQgYXMgd2VsbC4KLSAgICAgdmFsaW5mby5hZGRFcnJvcihtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfRVJST1JfRE9DVU1FTlRfTE9DQVRJT04sIHVyaSksIDAsIDAsIHVyaSk7Ci0gICAgICAKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGdldFdTRExOYW1lc3BhY2UoRG9jdW1lbnQgZG9jKQotICB7Ci0gICAgU3RyaW5nIHdzZGxucyA9IG51bGw7Ci0gICAgaWYoZG9jICE9IG51bGwpCi0gICAgewotICAgICAgRWxlbWVudCByb290ZG9jID0gZG9jLmdldERvY3VtZW50RWxlbWVudCgpOwotICAgICAgaWYocm9vdGRvYyAhPSBudWxsKQotICAgICAgewotICAgICAgICB3c2RsbnMgPSByb290ZG9jLmdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gd3NkbG5zOwotICB9Ci0gIAotICAKLSAgCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIGNyZWF0ZVN0cmluZ0ZvcklucHV0U3RyZWFtKElucHV0U3RyZWFtIGlucHV0U3RyZWFtKQotICB7Ci0gICAgLy8gSGVyZSB3ZSBhcmUgcmVhZGluZyB0aGUgZmlsZSBhbmQgc3RvcmluZyB0byBhIHN0cmluZ2J1ZmZlci4KLSAgICBTdHJpbmdCdWZmZXIgZmlsZVN0cmluZyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBJbnB1dFN0cmVhbVJlYWRlciBpbnB1dFJlYWRlciA9IG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpbnB1dFN0cmVhbSk7Ci0gICAgICBCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIoaW5wdXRSZWFkZXIpOwotICAgICAgY2hhcltdIGNoYXJzID0gbmV3IGNoYXJbMTAyNF07Ci0gICAgICBpbnQgbnVtYmVyUmVhZCA9IHJlYWRlci5yZWFkKGNoYXJzKTsKLSAgICAgIHdoaWxlIChudW1iZXJSZWFkICE9IC0xKQotICAgICAgewotICAgICAgICBmaWxlU3RyaW5nLmFwcGVuZChjaGFycywgMCwgbnVtYmVyUmVhZCk7Ci0gICAgICAgIG51bWJlclJlYWQgPSByZWFkZXIucmVhZChjaGFycyk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvL1RPRE86IGxvZyBlcnJvciBtZXNzYWdlCi0gICAgICAvL2UucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfQotICAgIHJldHVybiBmaWxlU3RyaW5nLnRvU3RyaW5nKCk7Ci0gIH0KLSAgCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvVmFsaWRhdGlvbkluZm9JbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvVmFsaWRhdGlvbkluZm9JbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1Y2QyNzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL1ZhbGlkYXRpb25JbmZvSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzA1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5yZXNvbHZlci5VUklSZXNvbHZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnV0aWwuTWVzc2FnZUdlbmVyYXRvcjsKLQotLyoqCi0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgdmFsaWRhdGlvbiBpbmZvIGludGVyZmFjZS4KLSAqLwotcHVibGljIGNsYXNzIFZhbGlkYXRpb25JbmZvSW1wbCBpbXBsZW1lbnRzIElWYWxpZGF0aW9uUmVwb3J0LCBDb250cm9sbGVyVmFsaWRhdGlvbkluZm8KLXsKLSAgcHJpdmF0ZSBib29sZWFuIFdSQVBQRVJfRVJST1JfU1VQUE9SVF9FTkFCTEVEID0gdHJ1ZTsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX1dBUk5fTk9fVkFMRElBVE9SID0gIl9XQVJOX05PX1ZBTERJQVRPUiI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9SRUZfRklMRV9FUlJPUl9NRVNTQUdFID0gIl9SRUZfRklMRV9FUlJPUl9NRVNTQUdFIjsKLSAgcHJpdmF0ZSBTdHJpbmcgdmFsaWRhdGluZ19maWxlX3VyaSA9IG51bGw7Ci0gIHByaXZhdGUgVVJMIHZhbGlkYXRpbmdfZmlsZV91cmwgPSBudWxsOwotICBwcml2YXRlIGJvb2xlYW4gd3NkbFZhbGlkID0gZmFsc2U7Ci0gIHByaXZhdGUgTGlzdCBtZXNzYWdlcyA9IG5ldyBWZWN0b3IoKTsKLSAgLy9wcml2YXRlIExpc3Qgc2NoZW1hcyA9IG5ldyBWZWN0b3IoKTsKLSAgcHJpdmF0ZSBMaXN0IG5zTm9WYWxzID0gbmV3IFZlY3RvcigpOwotICBwcml2YXRlIE1lc3NhZ2VHZW5lcmF0b3IgbWVzc2FnZWdlbmVyYXRvciA9IG51bGw7Ci0gIHByaXZhdGUgYm9vbGVhbiBoYXNlcnJvcnMgPSBmYWxzZTsKLSAgcHJpdmF0ZSBIYXNoTWFwIG5lc3RlZE1lc3NhZ2VzID0gbmV3IEhhc2hNYXAoKTsKLSAgcHJpdmF0ZSBVUklSZXNvbHZlciB1cmlSZXNvbHZlciA9IG51bGw7Ci0gIHByaXZhdGUgV1NETFZhbGlkYXRpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb247Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKiAKLSAgICogQHBhcmFtIHVyaQotICAgKiAgICAgICAgICAgIFRoZSBVUkkgb2YgdGhlIGZpbGUgZm9yIHRoZSB2YWxpZGF0aW9uLgotICAgKi8KLSAgcHVibGljIFZhbGlkYXRpb25JbmZvSW1wbChTdHJpbmcgdXJpLCBNZXNzYWdlR2VuZXJhdG9yIG1lc3NhZ2VnZW5lcmF0b3IpCi0gIHsKLSAgICB0aGlzLnZhbGlkYXRpbmdfZmlsZV91cmkgPSB1cmk7Ci0gICAgaWYodXJpICE9IG51bGwpCi0gICAgewotICAgICAgdXJpID0gdXJpLnJlcGxhY2VBbGwoIiUyMCIsIiAiKTsKLSAgICAgIHRoaXMudmFsaWRhdGluZ19maWxlX3VyaSA9IHVyaTsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICB0aGlzLnZhbGlkYXRpbmdfZmlsZV91cmwgPSBuZXcgVVJMKHVyaSk7Ci0gICAgICB9IGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgIH0KLSAgICB9Ci0gICAgdGhpcy5tZXNzYWdlZ2VuZXJhdG9yID0gbWVzc2FnZWdlbmVyYXRvcjsKLSAgfQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLklWYWxpZGF0aW9uUmVwb3J0I2dldEZpbGVVUkkoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRGaWxlVVJJKCkKLSAgewotICAgIHJldHVybiB2YWxpZGF0aW5nX2ZpbGVfdXJpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5JVmFsaWRhdGlvblJlcG9ydCNpc1dTRExWYWxpZCgpCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1dTRExWYWxpZCgpCi0gIHsKLSAgICByZXR1cm4gd3NkbFZhbGlkOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5JVmFsaWRhdGlvbkluZm8jYWRkRXJyb3IoamF2YS5sYW5nLlN0cmluZywKLSAgICogICAgICBpbnQsIGludCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEVycm9yKFN0cmluZyBtZXNzYWdlLCBpbnQgbGluZSwgaW50IGNvbHVtbikKLSAgewotICAgIGFkZEVycm9yKG1lc3NhZ2UsIGxpbmUsIGNvbHVtbiwgdmFsaWRhdGluZ19maWxlX3VyaSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25JbmZvI2FkZEVycm9yKGphdmEubGFuZy5TdHJpbmcsCi0gICAqICAgICAgaW50LCBpbnQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRFcnJvcihTdHJpbmcgbWVzc2FnZSwgaW50IGxpbmUsIGludCBjb2x1bW4sIFN0cmluZyB1cmkpCi0gIHsKLSAgICBpZihhZGRNZXNzYWdlKG1lc3NhZ2UsIGxpbmUsIGNvbHVtbiwgdXJpLCBWYWxpZGF0aW9uTWVzc2FnZUltcGwuU0VWX0VSUk9SKSkKLSAgICB7Ci0gICAgICBoYXNlcnJvcnMgPSB0cnVlOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZEVycm9yKFN0cmluZyBtZXNzYWdlLCBpbnQgbGluZSwgaW50IGNvbHVtbiwgU3RyaW5nIHVyaSwgU3RyaW5nIGVycm9yS2V5LCBPYmplY3RbXSBtZXNzYWdlQXJndW1lbnRzKQotICB7Ci0gICAgaWYoYWRkTWVzc2FnZShtZXNzYWdlLCBsaW5lLCBjb2x1bW4sIHVyaSwgVmFsaWRhdGlvbk1lc3NhZ2VJbXBsLlNFVl9FUlJPUiwgZXJyb3JLZXksIG1lc3NhZ2VBcmd1bWVudHMpKQotICAgIHsKLSAgICAgIGhhc2Vycm9ycyA9IHRydWU7Ci0gICAgfQotICB9Ci0gIAotICAKLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5JVmFsaWRhdGlvbkluZm8jYWRkV2FybmluZyhqYXZhLmxhbmcuU3RyaW5nLAotICAgKiAgICAgIGludCwgaW50KQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkV2FybmluZyhTdHJpbmcgbWVzc2FnZSwgaW50IGxpbmUsIGludCBjb2x1bW4pCi0gIHsKLSAgICBhZGRXYXJuaW5nKG1lc3NhZ2UsIGxpbmUsIGNvbHVtbiwgdmFsaWRhdGluZ19maWxlX3VyaSk7Ci0gIH0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5JVmFsaWRhdGlvbkluZm8jYWRkV2FybmluZyhqYXZhLmxhbmcuU3RyaW5nLAotICAgKiAgICAgIGludCwgaW50KQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkV2FybmluZyhTdHJpbmcgbWVzc2FnZSwgaW50IGxpbmUsIGludCBjb2x1bW4sIFN0cmluZyB1cmkpCi0gIHsKLSAgICBhZGRNZXNzYWdlKG1lc3NhZ2UsIGxpbmUsIGNvbHVtbiwgdXJpLCBWYWxpZGF0aW9uTWVzc2FnZUltcGwuU0VWX1dBUk5JTkcpOwotICB9Ci0gIAotICAvKioKLSAgICogQWRkIGEgbWVzc2FnZSB0byB0aGUgbGlzdC4gQSBtZXNzYWdlIG1heSBub3QgYmUgYWRkZWQgdG8gdGhlIGxpc3QgaW4gCi0gICAqIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcyBzdWNoIGFzIHdoZW4gdGhlIFVSSSBpcyBpbnZhbGlkIG9yIHRoZSBtZXNzYWdlIAotICAgKiBpcyBudWxsLgotICAgKiAKLSAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gYWRkLgotICAgKiBAcGFyYW0gbGluZSBUaGUgbGluZSBsb2NhdGlvbiBvZiB0aGUgbWVzc2FnZS4KLSAgICogQHBhcmFtIGNvbHVtbiBUaGUgY29sdW1uIGxvY2F0aW9uIG9mIHRoZSBtZXNzYWdlLgotICAgKiBAcGFyYW0gdXJpIFRoZSBVUkkgb2YgdGhlIGZpbGUgdGhhdCBjb250YWlucyB0aGUgbWVzc2FnZS4KLSAgICogQHBhcmFtIHNldmVyaXR5IFRoZSBzZXZlcml0eSBvZiB0aGUgbWVzc2FnZS4KLSAgICogQHJldHVybiBUcnVlIGlmIHRoZSBtZXNzYWdlIHdhcyBhYmxlIHRvIGJlIGFkZGVkLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYWRkTWVzc2FnZShTdHJpbmcgbWVzc2FnZSwgaW50IGxpbmUsIGludCBjb2x1bW4sIFN0cmluZyB1cmksIGludCBzZXZlcml0eSkKLSAgewotICAgICAgcmV0dXJuIHRoaXMuYWRkTWVzc2FnZShtZXNzYWdlLCBsaW5lLCBjb2x1bW4sIHVyaSwgc2V2ZXJpdHksIG51bGwsIG51bGwpOwotICB9Ci0gIAotICAvKioKLSAgICogQWRkIGEgbWVzc2FnZSB0byB0aGUgbGlzdC4gQSBtZXNzYWdlIG1heSBub3QgYmUgYWRkZWQgdG8gdGhlIGxpc3QgaW4gCi0gICAqIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcyBzdWNoIGFzIHdoZW4gdGhlIFVSSSBpcyBpbnZhbGlkIG9yIHRoZSBtZXNzYWdlIAotICAgKiBpcyBudWxsLgotICAgKiAKLSAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gYWRkLgotICAgKiBAcGFyYW0gbGluZSBUaGUgbGluZSBsb2NhdGlvbiBvZiB0aGUgbWVzc2FnZS4KLSAgICogQHBhcmFtIGNvbHVtbiBUaGUgY29sdW1uIGxvY2F0aW9uIG9mIHRoZSBtZXNzYWdlLgotICAgKiBAcGFyYW0gdXJpIFRoZSBVUkkgb2YgdGhlIGZpbGUgdGhhdCBjb250YWlucyB0aGUgbWVzc2FnZS4KLSAgICogQHBhcmFtIHNldmVyaXR5IFRoZSBzZXZlcml0eSBvZiB0aGUgbWVzc2FnZS4KLSAgICogQHBhcmFtIGVycm9yS2V5IFRoZSBYZXJjZXMgRXJyb3IgS2V5Ci0gICAqIEBwYXJhbSBtZXNzYWdlQXJndW1lbnRzIFRoZSBYZXJjZXMgYXJndW1lbnRzIHVzZWQgdG8gY3JlYXRlIHRoZSBlcnJvciBtZXNzYWdlCi0gICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgbWVzc2FnZSB3YXMgYWJsZSB0byBiZSBhZGRlZCwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGFkZE1lc3NhZ2UoU3RyaW5nIG1lc3NhZ2UsIGludCBsaW5lLCBpbnQgY29sdW1uLCBTdHJpbmcgdXJpLCBpbnQgc2V2ZXJpdHksIFN0cmluZyBlcnJvcktleSwgT2JqZWN0W10gbWVzc2FnZUFyZ3VtZW50cykKLSAgewotICAgIGJvb2xlYW4gc3VjY2Vzc2Z1bGx5QWRkZWQgPSBmYWxzZTsKLSAgICAvLyBJZiB0aGUgbWVzc2FnZSBpcyBudWxsIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmVwb3J0LgotICAgIGlmKG1lc3NhZ2UgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gc3VjY2Vzc2Z1bGx5QWRkZWQ7Ci0gICAgfQotICAgIFN0cmluZyBlcnJvclVSSSA9IHVyaTsKLSAgICBVUkwgZXJyb3JVUkwgPSBudWxsOwotICAgIGlmIChlcnJvclVSSSAhPSBudWxsKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBlcnJvclVSSSA9IGVycm9yVVJJLnJlcGxhY2VBbGwoIiUyMCIsICIgIik7Ci0gICAgICAgIGVycm9yVVJMID0gbmV3IFVSTChlcnJvclVSSSk7Ci0gICAgICB9IGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgIH0KLSAgICAgIC8vZXJyb3JVUkkgPSBub3JtYWxpemVVUkkoZXJyb3JVUkkpOwotICAgIH0KLS8vICAgIGVsc2UKLS8vICAgIHsKLS8vICAgICAgZXJyb3JVUkkgPSB2YWxpZGF0aW5nX2ZpbGVfdXJpOwotLy8gICAgICBlcnJvclVSTCA9IHZhbGlkYXRpbmdfZmlsZV91cmw7Ci0vLyAgICB9Ci0gICAgLy9ib29sZWFuIGRvRGlhbG9nID0gdHJ1ZTsKLSAgICBpZiAoZXJyb3JVUkwgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBzdWNjZXNzZnVsbHlBZGRlZCA9IHRydWU7Ci0gICAgICAvLyBBZGQgdG8gdGhlIGFwcHJvcHJpYXRlIGxpc3QgaWYgbmVzdGVkIGVycm9yIHN1cHBvcnQgaXMgb2ZmIG9yCi0gICAgICAvLyB0aGlzIG1lc3NhZ2UgaXMgZm9yIHRoZSBjdXJyZW50IGZpbGUuCi0gICAgICBpZiAoIVdSQVBQRVJfRVJST1JfU1VQUE9SVF9FTkFCTEVEIHx8IHZhbGlkYXRpbmdfZmlsZV91cmwuc2FtZUZpbGUoZXJyb3JVUkwpKQotICAgICAgewotCi0gICAgICAgIFZhbGlkYXRpb25NZXNzYWdlSW1wbCB2YWxtZXMgPSBuZXcgVmFsaWRhdGlvbk1lc3NhZ2VJbXBsKG1lc3NhZ2UsIGxpbmUsCi0gICAgICAgICAgICBjb2x1bW4sIHNldmVyaXR5LCB1cmksIGVycm9yS2V5LCBtZXNzYWdlQXJndW1lbnRzKTsKLSAgICAgICAgbWVzc2FnZXMuYWRkKHZhbG1lcyk7Ci0gICAgICB9Ci0gICAgICAvLyBJZiBuZXN0ZWQgZXJyb3Igc3VwcG9ydCBpcyBlbmFibGVkIGNyZWF0ZSBhIG5lc3RlZCBlcnJvci4KLSAgICAgIGVsc2UgaWYgKFdSQVBQRVJfRVJST1JfU1VQUE9SVF9FTkFCTEVEKQotICAgICAgewotICAgICAgICBTdHJpbmcgbmVzdGVkdXJpID0gZXJyb3JVUkwudG9FeHRlcm5hbEZvcm0oKTsKLSAgICAgICAgVmFsaWRhdGlvbk1lc3NhZ2VJbXBsIG5lc3RlZG1lc3MgPSBuZXcgVmFsaWRhdGlvbk1lc3NhZ2VJbXBsKG1lc3NhZ2UsIGxpbmUsCi0gICAgICAgICAgICBjb2x1bW4sIHNldmVyaXR5LCBuZXN0ZWR1cmkpOwotCi0gICAgICAgIFZhbGlkYXRpb25NZXNzYWdlSW1wbCBjb250YWluZXIgPSAoVmFsaWRhdGlvbk1lc3NhZ2VJbXBsKSBuZXN0ZWRNZXNzYWdlcy5nZXQobmVzdGVkdXJpKTsKLSAgICAgICAgaWYoY29udGFpbmVyID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBJbml0aWFsbHkgc2V0IHRoZSBuZXN0ZWQgZXJyb3IgdG8gYSB3YXJuaW5nLiBUaGlzIHdpbGwgYXV0b21hdGljYWxseSBiZSBjaGFuZ2VkCi0gICAgICAgICAgLy8gdG8gYW4gZXJyb3IgaWYgYSBuZXN0ZWQgbWVzc2FnZSBoYXMgYSBzZXZlcml0eSBvZiBlcnJvci4KLSAgICAgICAgICBjb250YWluZXIgPSBuZXcgVmFsaWRhdGlvbk1lc3NhZ2VJbXBsKG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9SRUZfRklMRV9FUlJPUl9NRVNTQUdFLCBuZXN0ZWR1cmkpLCAxLCAwLCBJVmFsaWRhdGlvbk1lc3NhZ2UuU0VWX1dBUk5JTkcsIG5lc3RlZHVyaSk7Ci0gICAgICAgICAgbmVzdGVkTWVzc2FnZXMucHV0KG5lc3RlZHVyaSwgY29udGFpbmVyKTsKLSAgICAgICAgICBtZXNzYWdlcy5hZGQoY29udGFpbmVyKTsKLSAgICAgICAgfQotICAgICAgICBjb250YWluZXIuYWRkTmVzdGVkTWVzc2FnZShuZXN0ZWRtZXNzKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gc3VjY2Vzc2Z1bGx5QWRkZWQ7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLklWYWxpZGF0aW9uUmVwb3J0I2dldFZhbGlkYXRpb25NZXNzYWdlcygpCi0gICAqLwotICBwdWJsaWMgSVZhbGlkYXRpb25NZXNzYWdlW10gZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKCkKLSAgewotICAgIHJldHVybiAoSVZhbGlkYXRpb25NZXNzYWdlW10pbWVzc2FnZXMudG9BcnJheShuZXcgSVZhbGlkYXRpb25NZXNzYWdlW21lc3NhZ2VzLnNpemUoKV0pOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5JVmFsaWRhdGlvbkluZm8jYWRkTmFtZXNwYWNlV2l0aE5vVmFsaWRhdG9yKGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGROYW1lc3BhY2VXaXRoTm9WYWxpZGF0b3IoU3RyaW5nIG5hbWVzcGFjZSkKLSAgewotICAgIC8vIElmIHRoZSBsaXN0IGRvZXNuJ3QgYWxyZWFkeSBjb250YWluIHRoaXMgbmFtZXNwYWNlLCBhZGQgaXQgdG8gdGhlIGxpc3QKLSAgICAvLyBhbmQgY3JlYXRlIGEgd2FybmluZyBtZXNzYWdlLgotICAgIGlmICghbnNOb1ZhbHMuY29udGFpbnMobmFtZXNwYWNlKSkKLSAgICB7Ci0gICAgICBuc05vVmFscy5hZGQobmFtZXNwYWNlKTsKLSAgICAgIGFkZFdhcm5pbmcobWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX1dBUk5fTk9fVkFMRElBVE9SLCBuYW1lc3BhY2UpLCAxLCAwKTsKLQotICAgIH0KLQotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5Db250cm9sbGVyVmFsaWRhdGlvbkluZm8jY29tcGxldGVXU0RMVmFsaWRhdGlvbigpCi0gICAqLwotICBwdWJsaWMgdm9pZCBjb21wbGV0ZVdTRExWYWxpZGF0aW9uKCkKLSAgewotICAgIGlmIChoYXNlcnJvcnMpCi0gICAgewotICAgICAgd3NkbFZhbGlkID0gZmFsc2U7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICB3c2RsVmFsaWQgPSB0cnVlOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25SZXBvcnQjaGFzRXJyb3JzKCkKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGhhc0Vycm9ycygpCi0gIHsKLSAgICByZXR1cm4gaGFzZXJyb3JzOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3NkbC52YWxpZGF0ZS5WYWxpZGF0aW9uUmVwb3J0I2dldE5lc3RlZE1lc3NhZ2VzKCkKLSAgICovCi0gIHB1YmxpYyBIYXNoTWFwIGdldE5lc3RlZE1lc3NhZ2VzKCkKLSAgewotICAgIHJldHVybiBuZXN0ZWRNZXNzYWdlczsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0VVJJUmVzb2x2ZXIoVVJJUmVzb2x2ZXIgdXJpUmVzb2x2ZXIpCi0gIHsKLSAgCXRoaXMudXJpUmVzb2x2ZXIgPSB1cmlSZXNvbHZlcjsKLSAgfQotICAKLSAgcHVibGljIFVSSVJlc29sdmVyIGdldFVSSVJlc29sdmVyKCkKLSAgewotICAJcmV0dXJuIHVyaVJlc29sdmVyOwotICB9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c2RsLnZhbGlkYXRlLlZhbGlkYXRpb25JbmZvI2dldEF0dHJpYnV0ZShqYXZhLmxhbmcuU3RyaW5nKQotCSAqLwotCXB1YmxpYyBPYmplY3QgZ2V0QXR0cmlidXRlKFN0cmluZyBuYW1lKSAKLQl7Ci0JCWlmKGNvbmZpZ3VyYXRpb24gPT0gbnVsbCkKLQkJewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQkJcmV0dXJuIGNvbmZpZ3VyYXRpb24uZ2V0UHJvcGVydHkobmFtZSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldENvbmZpZ3VyYXRpb24oV1NETFZhbGlkYXRpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi0JewotCQl0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uOwotCX0KLQlwdWJsaWMgYm9vbGVhbiBpc1ZhbGlkKCkgewotCQlyZXR1cm4gIWhhc0Vycm9ycygpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9WYWxpZGF0aW9uTWVzc2FnZUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9WYWxpZGF0aW9uTWVzc2FnZUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWJmZDY0YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvVmFsaWRhdGlvbk1lc3NhZ2VJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotCi0vKioKLSAqIEEgdmFsaWRhdGlvbiBtZXNzYWdlIGlzIGNyZWF0ZWQgd2hlbiB0aGVyZSBpcyBpbmZvcm1hdGlvbiB0byByZXBvcnQgZnJvbQotICogdmFsaWRhdGluZyBhIFdTREwgZG9jdW1lbnQuCi0gKi8KLXB1YmxpYyBjbGFzcyBWYWxpZGF0aW9uTWVzc2FnZUltcGwgaW1wbGVtZW50cyBJVmFsaWRhdGlvbk1lc3NhZ2UKLXsKLSAgcHJvdGVjdGVkIFN0cmluZyBtZXNzYWdlOwotICBwcm90ZWN0ZWQgaW50IGxpbmVOdW1iZXI7Ci0gIHByb3RlY3RlZCBpbnQgY29sdW1uTnVtYmVyOwotICBwcm90ZWN0ZWQgU3RyaW5nIHVyaTsKLSAgcHJvdGVjdGVkIGludCBzZXZlcml0eSA9IFNFVl9FUlJPUjsKLSAgcHJvdGVjdGVkIExpc3QgbmVzdGVkRXJyb3JzOwotICBwcm90ZWN0ZWQgU3RyaW5nIGVycm9yS2V5ID0gbnVsbDsKLSAgcHJvdGVjdGVkIE9iamVjdFtdIG1lc3NhZ2VBcmd1bWVudHMgPSBudWxsOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICogCi0gICAqIEBwYXJhbSBtZXNzYWdlIFRoZSB2YWxpZGF0aW9uIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBsaW5lTnVtYmVyIFRoZSBsaW5lIHdoZXJlIHRoZSBtZXNzYWdlIHNob3VsZCBiZSBkaXNwbGF5ZWQuCi0gICAqIEBwYXJhbSBjb2x1bW5OdW1iZXIgVGhlIGNvbHVtbiB3aGVyZSB0aGUgbWVzc2FnZSBzaG91bGQgYmUgZGlzcGxheWVkLgotICAgKiBAZGVwcmVjYXRlZCBVc2UgY29udHJ1Y3RvciB3aXRoIFVSSSBwYXJhbWV0ZXIuCi0gICAqLwotICBwdWJsaWMgVmFsaWRhdGlvbk1lc3NhZ2VJbXBsKFN0cmluZyBtZXNzYWdlLCBpbnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlciwgaW50IHNldmVyaXR5KQotICB7Ci0gICAgdGhpcyhtZXNzYWdlLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIHNldmVyaXR5LCBudWxsKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICogQWxsb3dzIHNwZWNpZnlpbmcgYSB1cmkgZm9yIHRoZSByZWZlcmVuY2UgdGhhdCB0aGUgbWVzc2FnZSByZWZlcnMgdG8uCi0gICAqIAotICAgKiBAcGFyYW0gbWVzc2FnZSBUaGUgdmFsaWRhdGlvbiBtZXNzYWdlLgotICAgKiBAcGFyYW0gbGluZU51bWJlciBUaGUgbGluZSB3aGVyZSB0aGUgbWVzc2FnZSBzaG91bGQgYmUgZGlzcGxheWVkLgotICAgKiBAcGFyYW0gY29sdW1uTnVtYmVyIFRoZSBjb2x1bW4gd2hlcmUgdGhlIG1lc3NhZ2Ugc2hvdWxkIGJlIGRpc3BsYXllZC4KLSAgICogQHBhcmFtIHVyaSBUaGUgdXJpIG9mIHRoZSByZWZlcmVuY2UgZmlsZSBmb3IgdGhlIG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgVmFsaWRhdGlvbk1lc3NhZ2VJbXBsKFN0cmluZyBtZXNzYWdlLCBpbnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlciwgaW50IHNldmVyaXR5LCBTdHJpbmcgdXJpKQotICB7Ci0gICAgICB0aGlzKG1lc3NhZ2UsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgc2V2ZXJpdHksIHVyaSwgbnVsbCwgbnVsbCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICogQWxsb3dzIHNwZWNpZnlpbmcgYSB1cmkgZm9yIHRoZSByZWZlcmVuY2UgdGhhdCB0aGUgbWVzc2FnZSByZWZlcnMgdG8uCi0gICAqIAotICAgKiBAcGFyYW0gbWVzc2FnZSBUaGUgdmFsaWRhdGlvbiBtZXNzYWdlLgotICAgKiBAcGFyYW0gbGluZU51bWJlciBUaGUgbGluZSB3aGVyZSB0aGUgbWVzc2FnZSBzaG91bGQgYmUgZGlzcGxheWVkLgotICAgKiBAcGFyYW0gY29sdW1uTnVtYmVyIFRoZSBjb2x1bW4gd2hlcmUgdGhlIG1lc3NhZ2Ugc2hvdWxkIGJlIGRpc3BsYXllZC4KLSAgICogQHBhcmFtIHVyaSBUaGUgdXJpIG9mIHRoZSByZWZlcmVuY2UgZmlsZSBmb3IgdGhlIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBlcnJvcktleSBUaGUgWGVyY2VzIEVycm9yIGtleQotICAgKiBAcGFyYW0gbWVzc2FnZUFyZ3VtZW50cyBUaGUgdmFsdWVzIHVzZWQgdG8gImZpbGwgaW4gdGhlIGJsYW5rcyIgb2YgYSBYZXJjZXMgZXJyb3IgTWVzc2FnZQotICAgKi8KLSAgcHVibGljIFZhbGlkYXRpb25NZXNzYWdlSW1wbChTdHJpbmcgbWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIsIGludCBzZXZlcml0eSwgU3RyaW5nIHVyaSwgU3RyaW5nIGVycm9yS2V5LCBPYmplY3RbXSBtZXNzYWdlQXJndW1lbnRzKQotICB7Ci0gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsKLSAgICB0aGlzLmxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOwotICAgIHRoaXMuY29sdW1uTnVtYmVyID0gY29sdW1uTnVtYmVyOwotICAgIHRoaXMuc2V2ZXJpdHkgPSBzZXZlcml0eTsKLSAgICB0aGlzLnVyaSA9IHVyaTsKLSAgICB0aGlzLmVycm9yS2V5ID0gZXJyb3JLZXk7Ci0gICAgdGhpcy5tZXNzYWdlQXJndW1lbnRzID0gbWVzc2FnZUFyZ3VtZW50czsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWxpZGF0aW9uIG1lc3NhZ2UuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSB2YWxpZGF0aW9uIG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UoKQotICB7Ci0gICAgcmV0dXJuIG1lc3NhZ2U7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgY29sdW1uIG51bWJlci4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIGNvbHVtbiBudW1iZXIgd2hlcmUgdGhlIG1lc3NhZ2UgaXMgbG9jYXRlZC4KLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0Q29sdW1uKCkKLSAgewotICAgIHJldHVybiBjb2x1bW5OdW1iZXI7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbGluZSBudW1iZXIuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBsaW5lIG51bWJlciB3aGVyZSB0aGUgbWVzc2FnZSBpcyBsb2NhdGVkLgotICAgKi8KLSAgcHVibGljIGludCBnZXRMaW5lKCkKLSAgewotICAgIHJldHVybiBsaW5lTnVtYmVyOwotICB9Ci0KLSAgLyoqCi0gICAqIHJldHVybnMgdGhlIHVyaSBvZiB0aGUgcmVmZXJlbmNlIGZpbGUgZm9yIHRoZSB2YWxpZGF0aW9uIG1lc3NhZ2UuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSB1cmkgb2YgdGhlIHJlc291cmNlIHRoYXQgdGhlIG1lc3NhZ2UgcmVmZXJzIHRvLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRVUkkoKQotICB7Ci0gICAgcmV0dXJuIHVyaTsKLSAgfQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLklWYWxpZGF0aW9uTWVzc2FnZSNnZXRTZXZlcml0eSgpCi0gICAqLwotICBwdWJsaWMgaW50IGdldFNldmVyaXR5KCkKLSAgewotICAgIHJldHVybiBzZXZlcml0eTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFNldCB0aGUgc2V2ZXJpdHkgb2YgdGhlIG1lc3NhZ2UuCi0gICAqIAotICAgKiBAcGFyYW0gc2V2ZXJpdHkgVGhlIHNldmVyaXR5IG9mIHRoZSBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U2V2ZXJpdHkoaW50IHNldmVyaXR5KQotICB7Ci0gICAgaWYoc2V2ZXJpdHkgPT0gU0VWX0VSUk9SIHx8IHNldmVyaXR5ID09IFNFVl9XQVJOSU5HKQotICAgIHsKLSAgICAgIHRoaXMuc2V2ZXJpdHkgPSBzZXZlcml0eTsKLSAgICB9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBBZGQgYSBuZXN0ZWQgdmFsaWRhdGlvbiBtZXNzYWdlIHRvIHRoaXMgdmFsaWRhdGlvbiBtZXNzYWdlLgotICAgKiAKLSAgICogQHBhcmFtIHZhbGlkYXRpb25NZXNzYWdlIFRoZSB2YWxpZGF0aW9uIG1lc3NhZ2UgdG8gYWRkIGFzIGEgbmVzdGVkIG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGROZXN0ZWRNZXNzYWdlKElWYWxpZGF0aW9uTWVzc2FnZSB2YWxpZGF0aW9uTWVzc2FnZSkKLSAgewotICAgIGlmIChuZXN0ZWRFcnJvcnMgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBuZXN0ZWRFcnJvcnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgfQotICAgIG5lc3RlZEVycm9ycy5hZGQodmFsaWRhdGlvbk1lc3NhZ2UpOwotICAgIGludCB2YWxpZGFpdG9ubWVzc2FnZVNldmVyaXR5ID0gdmFsaWRhdGlvbk1lc3NhZ2UuZ2V0U2V2ZXJpdHkoKTsKLSAgICBpZih2YWxpZGFpdG9ubWVzc2FnZVNldmVyaXR5ID09IFNFVl9FUlJPUikKLSAgICB7Ci0gICAgICBzZXRTZXZlcml0eShTRVZfRVJST1IpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIGxpc3Qgb2YgbmVzdGVkIHZhbGlkYXRpb24gbWVzc2FnZXMuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBsaXN0IG9mIG5lc3RlZCB2YWxpZGF0aW9uIG1lc3NhZ2VzLgotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0TmVzdGVkTWVzc2FnZXMoKQotICB7Ci0gICAgcmV0dXJuIG5lc3RlZEVycm9ycyAhPSBudWxsID8gbmVzdGVkRXJyb3JzIDogQ29sbGVjdGlvbnMuRU1QVFlfTElTVDsKLSAgfQotICAvKioKLSAgICogQHJldHVybiB0aGUgZXJyb3Iga2V5Ci0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEVycm9yS2V5KCkKLSAgewotICAgIHJldHVybiBlcnJvcktleTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEBwYXJhbSBlcnJvcktleSB0aGUgZXJyb3Iga2V5IHRvIHNldAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RXJyb3JLZXkoU3RyaW5nIGVycm9yS2V5KQotICB7Ci0gICAgdGhpcy5lcnJvcktleSA9IGVycm9yS2V5OwotICB9Ci0gIC8qKgotICAgKiBAcmV0dXJuIHRoZSBYZXJjZXMgbWVzc2FnZSBhcmd1bWVudHMgdXNlZCB0byAiZmlsbCBpbiB0aGUgYmxhbmtzIiBvZiB0aGUgbWVzc2FnZXMKLSAgICovCi0gIHB1YmxpYyBPYmplY3RbXSBnZXRNZXNzYWdlQXJndW1lbnRzKCkKLSAgewotICAgIHJldHVybiBtZXNzYWdlQXJndW1lbnRzOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvVmFsaWRhdG9yUmVnaXN0cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9WYWxpZGF0b3JSZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjMwNWU2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9WYWxpZGF0b3JSZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi0KLS8qKgotICogQSByZWdpc3RyeSBvZiBJV1NETFZhbGlkYXRvciB2YWxpZGF0b3JzLiBUaGlzIGhvbGRzIHRoZSB0b3AgbGV2ZWwgV1NETCBhbmQgV1MtSSB2YWxpZGF0b3JzLgotICogVmFsaWRhdG9ycyBhcmUgcmVnaXN0ZXJlZCBieSB0aGUgbmFtZXNwYWNlIHRoZXkgdmFsaWRhdGUuCi0gKi8KLXB1YmxpYyBjbGFzcyBWYWxpZGF0b3JSZWdpc3RyeQotewotICAvKioKLSAgICogVGhlIFdTREwgdmFsaWRhdG9yIHR5cGUuCi0gICAqLwotICBwdWJsaWMgZmluYWwgc3RhdGljIEludGVnZXIgV1NETF9WQUxJREFUT1IgPSBuZXcgSW50ZWdlcigwKTsKLSAgLyoqCi0gICAqIFRoZSBXUy1JIHZhbGlkYXRvciB0eXBlLgotICAgKi8KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBJbnRlZ2VyIEVYVF9WQUxJREFUT1IgPSBuZXcgSW50ZWdlcigxKTsKLSAgcHJvdGVjdGVkIHN0YXRpYyBWYWxpZGF0b3JSZWdpc3RyeSB2ZXJJbnN0YW5jZTsKLSAgLyoKLSAgICBUaGlzIGlzIGEgTWFwIG9mIE1hcHMuIFRoZSB0b3AtbGV2ZWwgTWFwIGlzIGtleWVkIGJ5IChDbGFzcylwYXJlbnRUeXBlLAotICAgIGFuZCB0aGUgaW5uZXIgTWFwcyBhcmUga2V5ZWQgYnkgKFFOYW1lKWVsZW1lbnRUeXBlLgotICAgIFRoaXMgaWRlYSBpcyB0aGUgc2FtZSBhcyBpcyBkb25lIGluIFdTREw0SgotICAqLwotICBwcm90ZWN0ZWQgTWFwIHZhbGlkYXRvclJlZyA9IG5ldyBIYXNodGFibGUoKTsKLQotICBwcm90ZWN0ZWQgSXRlcmF0b3IgZGVmYXVsdFZhbGlkYXRvckl0ZXJhdG9yOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICovCi0gIHByb3RlY3RlZCBWYWxpZGF0b3JSZWdpc3RyeSgpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBpbnN0YW5jZSBvZiB0aGUgcmVnaXN0cnkuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBpbnN0YW5jZSBvZiB0aGUgcmVnaXN0cnkuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFZhbGlkYXRvclJlZ2lzdHJ5IGdldEluc3RhbmNlKCkKLSAgewotICAgIGlmICh2ZXJJbnN0YW5jZSA9PSBudWxsKQotICAgIHsKLSAgICAgIHZlckluc3RhbmNlID0gbmV3IFZhbGlkYXRvclJlZ2lzdHJ5KCk7Ci0gICAgfQotICAgIHJldHVybiB2ZXJJbnN0YW5jZTsKLSAgfQotICAvKioKLSAgICogUmVnaXN0ZXIgdGhpcyB2YWxpZGF0b3Igb2YgdGhlIGdpdmVuIHR5cGUgd2l0aCB0aGUgZ2l2ZW4gbmFtZXNwYWNlLgotICAgKiAKLSAgICogQHBhcmFtIG5hbWVzcGFjZSBUaGUgbmFtZXNwYWNlIHRoZSB2YWxpZGF0b3IgdmFsaWRhdGVzLgotICAgKiBAcGFyYW0gdmFsRGVsZWdhdGUgVGhlIHZhbGlkYXRvciBkZWxlZ2F0ZSB0byByZWdpc3Rlci4KLSAgICogQHBhcmFtIHR5cGUgVGhlIHR5cGUgb2YgdmFsaWRhdG9yLgotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJWYWxpZGF0b3IoU3RyaW5nIG5hbWVzcGFjZSwgV1NETFZhbGlkYXRvckRlbGVnYXRlIHZhbERlbGVnYXRlLCBJbnRlZ2VyIHR5cGUpCi0gIHsKLSAgICAvLyBhbGxvdyB0aGUgbnVsbCBuYW1lc3BhY2UgYnV0IG1ha2UgaXQgdGhlIGVtcHR5IHN0cmluZwotICAgIGlmIChuYW1lc3BhY2UgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBuYW1lc3BhY2UgPSAiIjsKLSAgICB9Ci0KLSAgICAvLyBnZXQgdGhlIGhhc3RhYmxlIGZvciB0aGUgdHlwZSBvZiB2YWxpZGF0b3Igd2Ugd2FudAotICAgIEhhc2h0YWJsZSB0eXBlVmFsaWRhdG9yUmVnID0gKEhhc2h0YWJsZSl2YWxpZGF0b3JSZWcuZ2V0KHR5cGUpOwotICAgIC8vIGlmIGl0J3MgbnVsbCBpZiBtZWFucyB3ZSBoYXZlbid0IGRlZmluZWQgdGhpcyB0eXBlIG9mIHZhbGlkYXRvciB5ZXQKLSAgICBpZiAodHlwZVZhbGlkYXRvclJlZyA9PSBudWxsKQotICAgIHsKLSAgICAgIHR5cGVWYWxpZGF0b3JSZWcgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgICB2YWxpZGF0b3JSZWcucHV0KHR5cGUsIHR5cGVWYWxpZGF0b3JSZWcpOwotICAgIH0KLSAgICAKLSAgICAgIExpc3QgbmFtZXNwYWNldmFscyA9IChMaXN0KXR5cGVWYWxpZGF0b3JSZWcuZ2V0KG5hbWVzcGFjZSk7Ci0gICAgICBpZihuYW1lc3BhY2V2YWxzID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIG5hbWVzcGFjZXZhbHMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgIHR5cGVWYWxpZGF0b3JSZWcucHV0KG5hbWVzcGFjZSwgbmFtZXNwYWNldmFscyk7Ci0gICAgICB9Ci0gICAgICBuYW1lc3BhY2V2YWxzLmFkZCh2YWxEZWxlZ2F0ZSk7Ci0KLSAgfQotICAvKioKLSAgICogQXNrIGZvciB0aGUgdmFsaWRhdG9yIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG5hbWVzcGFjZS4gSWYgbm9uZSBpcyBmb3VuZAotICAgKiByZXR1cm4gbnVsbC4KLSAgICogCi0gICAqIEBwYXJhbSBuYW1lc3BhY2UgVGhlIG5hbWVzcGFjZSBmb3IgdGhlIHZhbGlkYXRvciB0aGF0IGlzIGJlaW5nIHJlcXVlc3RlZC4KLSAgICogQHBhcmFtIHR5cGUgVGhlIHR5cGUgb2YgdmFsaWRhdG9yIHRoYXQgaXMgYmVpbmcgcmVxdWVzdGVkLgotICAgKiBAcmV0dXJuIEFuIGFycmF5IG9mIHZhbGlkYXRvciBkZWxlZ2F0ZXMgaWYgYXQgbGVhc3Qgb25lIGlzIHJlZ2lzdGVyZWQsIG51bGwgb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIFdTRExWYWxpZGF0b3JEZWxlZ2F0ZVtdIHF1ZXJ5VmFsaWRhdG9yUmVnaXN0cnkoU3RyaW5nIG5hbWVzcGFjZSwgSW50ZWdlciB0eXBlKQotICB7Ci0gICAgLy8gaWYgdGhlIG5hbWVzcGFjZSBpcyBudWxsIGFsbG93IGl0IGFuZCB0cmVhdCBpdCBhcyB0aGUgZW1wdHkgc3RyaW5nCi0gICAgaWYgKG5hbWVzcGFjZSA9PSBudWxsKQotICAgIHsKLSAgICAgIG5hbWVzcGFjZSA9ICIiOwotICAgIH0KLSAgICBIYXNodGFibGUgdHlwZVZhbGlkYXRvclJlZyA9IChIYXNodGFibGUpdmFsaWRhdG9yUmVnLmdldCh0eXBlKTsKLSAgICBpZiAodHlwZVZhbGlkYXRvclJlZyA9PSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotCi0gICAgfQotCi0gICAgTGlzdCB2YWxkZWxzID0gKExpc3QpdHlwZVZhbGlkYXRvclJlZy5nZXQobmFtZXNwYWNlKTsKLSAgICBpZih2YWxkZWxzICE9IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIChXU0RMVmFsaWRhdG9yRGVsZWdhdGVbXSl2YWxkZWxzLnRvQXJyYXkobmV3IFdTRExWYWxpZGF0b3JEZWxlZ2F0ZVt2YWxkZWxzLnNpemUoKV0pOwotICAgIH0KLQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBpcyBhIHZhbGlkYXRvciByZWdpc3RlcmVkIG9mIHRoZSBnaXZlbiB0eXBlIHdpdGggdGhlIGdpdmVuIG5hbWVzcGFjZS4KLSAgICogCi0gICAqIEBwYXJhbSBuYW1lc3BhY2UgVGhlIG5hbWVzcGFjZSBvZiB0aGUgdmFsaWRhdG9yLgotICAgKiBAcGFyYW0gdHlwZSBUaGUgdHlwZSBvZiB0aGUgdmFsaWRhdG9yLgotICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlcmUgaXMgYSB2YWxpZGF0b3IgcmVnaXN0ZXJlZCBmb3IgdGhlIG5hbWVzcGFjZSwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaGFzUmVnaXN0ZXJlZFZhbGlkYXRvcihTdHJpbmcgbmFtZXNwYWNlLCBJbnRlZ2VyIHR5cGUpCi0gIHsKLSAgICBpZiAocXVlcnlWYWxpZGF0b3JSZWdpc3RyeShuYW1lc3BhY2UsIHR5cGUpICE9IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL1dTRExWYWxpZGF0aW9uQ29uZmlndXJhdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL1dTRExWYWxpZGF0aW9uQ29uZmlndXJhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYmI4MDJkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9XU0RMVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci0KLS8qKgotICogQ29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdmFsaWRhdGlvbiBvZiBhIHNwZWNpZmljCi0gKiBmaWxlLgotICovCi1wdWJsaWMgY2xhc3MgV1NETFZhbGlkYXRpb25Db25maWd1cmF0aW9uIAotewotICBwcm90ZWN0ZWQgSGFzaHRhYmxlIHByb3BlcnRpZXMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gIAotICAvKioKLSAgICogU2V0IGFuIGF0dHJpYnV0ZSBvbiB0aGUgdmFsaWRhdG9yLiBBbiBhdHRyaWJ1dGUgaXMKLSAgICogZGVmaW5lZCBieSBhIG5hbWUgYW5kIGEgdmFsdWUgcGFpci4gQW4gYXR0cmlidXRlIG1heQotICAgKiBiZSBkZWZpbmVkIGZvciBhbnkgdmFsaWRhdG9yLCBidWlsdCBpbiBvciBhbiBleHRlbnNpb24uCi0gICAqIEV4dGVuc2lvbiB2YWxpZGF0b3JzIGNhbiBwcm9iZSB0aGUgYXR0cmlidXRlcyBzZXQgb24KLSAgICogdGhlIFdTREwgdmFsaWRhdG9yIHRvIGN1c3RvbWl6ZSB0aGUgd2F5IGluIHdoaWNoIHRoZXkKLSAgICogdmFsaWRhdGUuIEEgbnVsbCB2YWx1ZSB3aWxsIHVuc2V0IGFuIGF0dHJpYnV0ZS4KLSAgICogCi0gICAqIEBwYXJhbSBuYW1lIFRoZSBhdHRyaWJ1dGUgaWRlbnRpZmllci4KLSAgICogQHBhcmFtIHZhbHVlIFRoZSBhdHRyaWJ1dGUgaXRzZWxmLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UHJvcGVydHkoU3RyaW5nIG5hbWUsIE9iamVjdCB2YWx1ZSkKLSAgewotCWlmKHZhbHVlID09IG51bGwpCi0JewotCSAgcHJvcGVydGllcy5yZW1vdmUobmFtZSk7Ci0JfQotCWVsc2UKLQl7Ci0gIAkgIHByb3BlcnRpZXMucHV0KG5hbWUsIHZhbHVlKTsKLQl9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIHZhbHVlIHNldCBmb3IgYSBnaXZlbiBwcm9wZXJ0eS4KLSAgICogCi0gICAqIEByZXR1cm4KLSAgICogCQlUaGUgdmFsdWUgZm9yIHRoZSBzcGVjaWZpZWQgcHJvcGVydHkgb3IgbnVsbCBpZiB0aGUgcHJvcGVydHkgaGFzIG5vdCBiZWVuIHNwZWNpZmllZC4KLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZ2V0UHJvcGVydHkoU3RyaW5nIG5hbWUpCi0gIHsKLQlpZihuYW1lICE9IG51bGwpCi0JICByZXR1cm4gcHJvcGVydGllcy5nZXQobmFtZSk7Ci0JcmV0dXJuIG51bGw7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL1dTRExWYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9XU0RMVmFsaWRhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkMzJiMWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL1dTRExWYWxpZGF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5yZXNvbHZlci5JRXh0ZW5zaWJsZVVSSVJlc29sdmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXIuVVJJUmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuQ2xhc3Nsb2FkZXJXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5XU0RMMTFCYXNpY1ZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5XU0RMMTFWYWxpZGF0b3JDb250cm9sbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLldTREwxMVZhbGlkYXRvckRlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLmh0dHAuSFRUUFZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5taW1lLk1JTUVWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuc29hcC5TT0FQVmFsaWRhdG9yOwotCi1pbXBvcnQgY29tLmlibS53c2RsLkNvbnN0YW50czsKLQotLyoqCi0gKiBBbiBtYWluIFdTREwgdmFsaWRhdG9yIGNsYXNzLiBUaGUgV1NETCB2YWxpZGF0b3IgdmFsaWRhdGVzIFdTREwgZG9jdW1lbnRzLgotICovCi1wdWJsaWMgY2xhc3MgV1NETFZhbGlkYXRvcgotewotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgVkFMSURBVE9SX1JFU09VUkNFX0JVTkRMRSA9ICJ2YWxpZGF0ZXdzZGwiOwotICBwcml2YXRlIFZhbGlkYXRpb25Db250cm9sbGVyIHZhbGlkYXRpb25Db250cm9sbGVyOwotICBwcm90ZWN0ZWQgVVJJUmVzb2x2ZXIgdXJpUmVzb2x2ZXI7Ci0gIAotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqLwotICBwdWJsaWMgV1NETFZhbGlkYXRvcigpCi0gIHsKLSAgICBSZXNvdXJjZUJ1bmRsZSByYiA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZShWQUxJREFUT1JfUkVTT1VSQ0VfQlVORExFKTsKLSAgICB1cmlSZXNvbHZlciA9IG5ldyBVUklSZXNvbHZlcigpOwotICAgIHZhbGlkYXRpb25Db250cm9sbGVyID0gbmV3IFZhbGlkYXRpb25Db250cm9sbGVyKHJiLCB1cmlSZXNvbHZlcik7Ci0gICAgCi0gICAgLy9SZWdpc3RlciB0aGUgZGVmYXVsdCB2YWxpZGF0b3JzLgotICAgIFZhbGlkYXRvclJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gVmFsaWRhdG9yUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKTsKLSAgICAvLyBSZWdpc3RlciB0aGUgV1NETCAxLjEgdmFsaWRhdG9yIGNvbnRyb2xsZXIgYW5kIHZhbGlkYXRvcnMuCi0gICAgV1NETFZhbGlkYXRvckRlbGVnYXRlIGRlbGVnYXRlID0gbmV3IENsYXNzbG9hZGVyV1NETFZhbGlkYXRvckRlbGVnYXRlKFdTREwxMVZhbGlkYXRvckNvbnRyb2xsZXIuY2xhc3MuZ2V0TmFtZSgpLCBnZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkpOwotICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyVmFsaWRhdG9yKENvbnN0YW50cy5OU19VUklfV1NETCwgZGVsZWdhdGUsIFZhbGlkYXRvclJlZ2lzdHJ5LldTRExfVkFMSURBVE9SKTsKLSAgICBXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZSBkZWxlZ2F0ZTEgPSBuZXcgQ2xhc3Nsb2FkZXJXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZShXU0RMMTFCYXNpY1ZhbGlkYXRvci5jbGFzcy5nZXROYW1lKCksIGdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKSk7Ci0gICAgcmVnaXN0ZXJXU0RMMTFWYWxpZGF0b3IoQ29uc3RhbnRzLk5TX1VSSV9XU0RMLCBkZWxlZ2F0ZTEpOwotICAgIGRlbGVnYXRlMSA9IG5ldyBDbGFzc2xvYWRlcldTREwxMVZhbGlkYXRvckRlbGVnYXRlKEhUVFBWYWxpZGF0b3IuY2xhc3MuZ2V0TmFtZSgpLCBnZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkpOwotICAgIHJlZ2lzdGVyV1NETDExVmFsaWRhdG9yKG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuQ29uc3RhbnRzLk5TX0hUVFAsIGRlbGVnYXRlMSk7Ci0gICAgZGVsZWdhdGUxID0gbmV3IENsYXNzbG9hZGVyV1NETDExVmFsaWRhdG9yRGVsZWdhdGUoU09BUFZhbGlkYXRvci5jbGFzcy5nZXROYW1lKCksIGdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKSk7Ci0gICAgcmVnaXN0ZXJXU0RMMTFWYWxpZGF0b3Iob3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5Db25zdGFudHMuTlNfU09BUDExLCBkZWxlZ2F0ZTEpOwotICAgIGRlbGVnYXRlMSA9IG5ldyBDbGFzc2xvYWRlcldTREwxMVZhbGlkYXRvckRlbGVnYXRlKE1JTUVWYWxpZGF0b3IuY2xhc3MuZ2V0TmFtZSgpLCBnZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkpOwotICAgIHJlZ2lzdGVyV1NETDExVmFsaWRhdG9yKG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuQ29uc3RhbnRzLk5TX01JTUUsIGRlbGVnYXRlMSk7Ci0gICAKLSAgICAvLyBUaGUgV1NETCAxLjEgc2NoZW1hIHZhbGlkYXRvciBpcyBhIHNwZWNpYWwgY2FzZSBhcyBpdCBpcyByZWdpc3RlcmVkIGZvciB0aHJlZSBuYW1lc3BhY2VzLgotLy8gICAgZGVsZWdhdGUxID0gbmV3IFdTREwxMVZhbGlkYXRvckRlbGVnYXRlKElubGluZVNjaGVtYVZhbGlkYXRvci5jbGFzcy5nZXROYW1lKCksIFZBTElEQVRPUl9SRVNPVVJDRV9CVU5ETEUsIGdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKSk7Ci0vLyAgICByZWdpc3RlcldTREwxMVZhbGlkYXRvcihDb25zdGFudHMuTlNfVVJJX1hTRF8xOTk5LCBkZWxlZ2F0ZTEpOwotLy8gICAgcmVnaXN0ZXJXU0RMMTFWYWxpZGF0b3IoQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMCwgZGVsZWdhdGUxKTsKLS8vICAgIHJlZ2lzdGVyV1NETDExVmFsaWRhdG9yKENvbnN0YW50cy5OU19VUklfWFNEXzIwMDEsIGRlbGVnYXRlMSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBWYWxpZGF0ZSB0aGUgV1NETCBmaWxlIGF0IHRoZSBnaXZlbiBsb2NhdGlvbi4KLSAgICogCi0gICAqIEBwYXJhbSB1cmkgVGhlIGxvY2F0aW9uIG9mIHRoZSBXU0RMIGZpbGUgdG8gdmFsaWRhdGUuCi0gICAqIEByZXR1cm4gQSB2YWxpZGF0aW9uIHJlcG9ydCBzdW1tYXJpemluZyB0aGUgcmVzdWx0cyBvZiB0aGUgdmFsaWRhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBJVmFsaWRhdGlvblJlcG9ydCB2YWxpZGF0ZShTdHJpbmcgdXJpKQotICB7Ci0gICByZXR1cm4gdmFsaWRhdGUodXJpLCBudWxsLCBuZXcgV1NETFZhbGlkYXRpb25Db25maWd1cmF0aW9uKCkpOwotICB9Ci0gIAotICAvKioKLSAgICogCi0gICAqIFZhbGlkYXRlIHRoZSBpbnB1dFN0cmVhbQotICAgKiBAcGFyYW0gdXJpIFRoZSBsb2NhdGlvbiBvZiB0aGUgV1NETCBmaWxlIGJlaW5nIHZhbGlkYXRlZAotICAgKiBAcGFyYW0gaW5wdXRTdHJlYW0gVGhlIHN0cmVhbSB0byB2YWxpZGF0ZQotICAgKiBAcmV0dXJuIEEgVmFsaWRhdGlvbiByZXBvcnQgc3VtbWFyaXppbmcgdGhlIHJlc3VsdHMgb2YgdGhlIHZhbGlkYXRpb24KLSAgICovCi0gIHB1YmxpYyBJVmFsaWRhdGlvblJlcG9ydCB2YWxpZGF0ZShTdHJpbmcgdXJpLCBJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSwgV1NETFZhbGlkYXRpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi0gIHsKLSAgICBpZih1cmkgPT0gbnVsbCkgCi0gICAgICByZXR1cm4gbnVsbDsKLSAgICBpZihjb25maWd1cmF0aW9uID09IG51bGwpCi0gICAgICBjb25maWd1cmF0aW9uID0gbmV3IFdTRExWYWxpZGF0aW9uQ29uZmlndXJhdGlvbigpOwotICAgIHJldHVybiB2YWxpZGF0aW9uQ29udHJvbGxlci52YWxpZGF0ZSh1cmksIGlucHV0U3RyZWFtLCBjb25maWd1cmF0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEFkZCBhIFVSSSByZXNvbHZlciB0byB0aGUgV1NETCB2YWxpZGF0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gdXJpUmVzb2x2ZXIgVGhlIFVSSSByZXNvbHZlciB0byBhZGQgdG8gdGhlIFdTREwgdmFsaWRhdG9yLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkVVJJUmVzb2x2ZXIoSUV4dGVuc2libGVVUklSZXNvbHZlciB1cmlSZXNvbHZlcikKLSAgewotICAJdGhpcy51cmlSZXNvbHZlci5hZGRVUklSZXNvbHZlcih1cmlSZXNvbHZlcik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZWdpc3RlciBhbiBleHRlbnNpb24gV1NETCB2YWxpZGF0b3IgZGVsZWdhdGUgd2l0aCB0aGlzIHZhbGlkYXRvci4KLSAgICogCi0gICAqIEBwYXJhbSBuYW1lc3BhY2UgVGhlIG5hbWVzcGFjZSB0aGUgdmFsaWRhdG9yIHZhbGlkYXRlcyBmb3IuIFRoaXMgaXMgdGhlIFdTREwgbmFtZXNwYWNlLgotICAgKiBAcGFyYW0gZGVsZWdhdGUgVGhlIGRlbGVnYXRlIHRoYXQgaG9sZHMgdGhlIHZhbGlkYXRvci4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyV1NETEV4dGVuc2lvblZhbGlkYXRvcihTdHJpbmcgbmFtZXNwYWNlLCBXU0RMVmFsaWRhdG9yRGVsZWdhdGUgZGVsZWdhdGUpCi0gIHsKLSAgICBWYWxpZGF0b3JSZWdpc3RyeS5nZXRJbnN0YW5jZSgpLnJlZ2lzdGVyVmFsaWRhdG9yKG5hbWVzcGFjZSwgZGVsZWdhdGUsIFZhbGlkYXRvclJlZ2lzdHJ5LkVYVF9WQUxJREFUT1IpOwotICB9Ci0gIAotICAvKioKLSAgICogUmVnaXN0ZXIgYSBXU0RMIDEuMSB2YWxpZGF0b3IgZGVsZWdhdGUgd2l0aCB0aGlzIHZhbGlkYXRvci4KLSAgICogCi0gICAqIEBwYXJhbSBuYW1lc3BhY2UgVGhlIG5hbWVzcGFjZSB0aGUgdmFsaWRhdG9yIHZhbGlkYXRlcyBmb3IuCi0gICAqIEBwYXJhbSBkZWxlZ2F0ZSBUaGUgZGVsZWdhdGUgdGhhdCBob2xkcyB0aGUgdmFsaWRhdG9yLgotICAgKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJXU0RMMTFWYWxpZGF0b3IoU3RyaW5nIG5hbWVzcGFjZSwgV1NETDExVmFsaWRhdG9yRGVsZWdhdGUgZGVsZWdhdGUpCi0gIHsKLSAgICBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5WYWxpZGF0b3JSZWdpc3RyeS5nZXRJbnN0YW5jZSgpLnJlZ2lzdGVyVmFsaWRhdG9yKG5hbWVzcGFjZSwgZGVsZWdhdGUpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvV1NETFZhbGlkYXRvckRlbGVnYXRlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvV1NETFZhbGlkYXRvckRlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyYWUwMjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL1dTRExWYWxpZGF0b3JEZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWw7Ci0KLS8qKgotICogQSBXU0RMVmFsaWRhdG9yRGVsZWdhdGUgaG9sZHMgYSByZWZlcmVuY2UgdG8gYSBXU0RMIHZhbGlkYXRvci4KLSAqIEEgZGVsZWdhdGUgaXMgdXNlZCB0byBsYXp5IGxvYWQgZXh0ZW5zaW9uIHZhbGlkYXRvcnMuCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBXU0RMVmFsaWRhdG9yRGVsZWdhdGUgCi17Ci0gIHByaXZhdGUgSVdTRExWYWxpZGF0b3IgdmFsaWRhdG9yID0gbnVsbDsKLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIHZhbGlkYXRvciBzcGVjaWZpZWQgaW4gdGhpcyBkZWxlZ2F0ZS4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIFdTREwgdmFsaWRhdG9yIHNwZWNpZmllZCBieSB0aGlzIGRlbGVnYXRlLgotICAgKi8KLSAgcHVibGljIElXU0RMVmFsaWRhdG9yIGdldFZhbGlkYXRvcigpCi0gIHsKLSAgICBpZiAodmFsaWRhdG9yID09IG51bGwpCi0gICAgewotICAgICAgdmFsaWRhdG9yID0gbG9hZFZhbGlkYXRvcigpOwotICAgIH0KLSAgICByZXR1cm4gdmFsaWRhdG9yOwotICB9Ci0gIAotICAvKioKLSAgICogTG9hZCB0aGUgdmFsaWRhdG9yIHNwZWNpZmllZCBpbiB0aGlzIGRlbGVnYXRlLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgV1NETCB2YWxpZGF0b3Igc3BlY2lmaWVkIGJ5IHRoaXMgZGVsZWdhdGUuCi0gICAqLwotICBwcm90ZWN0ZWQgYWJzdHJhY3QgSVdTRExWYWxpZGF0b3IgbG9hZFZhbGlkYXRvcigpOwotICAKLSAgLyoqCi0gICAqIFJldHVybiB0aGUgbmFtZSBvZiB0aGUgdmFsaWRhdG9yLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgdmFsaWRhdG9yIG5hbWUuCi0gICAqLwotICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFZhbGlkYXRvck5hbWUoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9lY2xpcHNlL0VjbGlwc2VMb2dnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9lY2xpcHNlL0VjbGlwc2VMb2dnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQ4MmY0YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9FY2xpcHNlTG9nZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuZWNsaXBzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nLklMb2dnZXI7Ci0KLS8qKgotICogQSBsb2dnZXIgdGhhdCB3aWxsIGxvZyB0byB0aGUgbG9nIGZpbGUgaW4gdGhlIEVjbGlwc2UgbWV0YWRhdGEgZGlyZWN0b3J5LgotICovCi1wdWJsaWMgY2xhc3MgRWNsaXBzZUxvZ2dlciBpbXBsZW1lbnRzIElMb2dnZXIKLXsKLQotCQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nLklMb2dnZXIjbG9nKGphdmEubGFuZy5TdHJpbmcsIGludCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGxvZyhTdHJpbmcgbWVzc2FnZSwgaW50IHNldmVyaXR5KSAKLSAgewotICAgIGxvZyhtZXNzYWdlLCBzZXZlcml0eSwgbnVsbCk7CQotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwubG9nZ2luZy5JTG9nZ2VyI2xvZyhqYXZhLmxhbmcuU3RyaW5nLCBpbnQsIGphdmEubGFuZy5UaHJvd2FibGUpCi0gICAqLwotICBwdWJsaWMgdm9pZCBsb2coU3RyaW5nIG1lc3NhZ2UsIGludCBzZXZlcml0eSwgVGhyb3dhYmxlIHRocm93YWJsZSkKLSAgewotCS8vIERvbid0IGxvZyB2ZXJib3NlIGluZm9ybWF0aW9uIGluIHRoZSBFY2xpcHNlIGxvZy4KLQlpZihzZXZlcml0eSA9PSBJTG9nZ2VyLlNFVl9WRVJCT1NFKQotCXsKLQkgIHJldHVybjsKLQl9Ci0JaW50IHN0YXR1cyA9IElTdGF0dXMuSU5GTzsKLQlpZihzZXZlcml0eSA9PSBJTG9nZ2VyLlNFVl9XQVJOSU5HKQotCXsKLQkgIHN0YXR1cyA9IElTdGF0dXMuV0FSTklORzsKLQl9Ci0JZWxzZSBpZihzZXZlcml0eSA9PSBJTG9nZ2VyLlNFVl9FUlJPUikKLQl7Ci0JICBzdGF0dXMgPSBJU3RhdHVzLkVSUk9SOwotCX0KLSAgICBWYWxpZGF0ZVdTRExQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRMb2coKS5sb2cobmV3IFN0YXR1cyhzdGF0dXMsIFZhbGlkYXRlV1NETFBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpLCBJU3RhdHVzLk9LLCBtZXNzYWdlLCB0aHJvd2FibGUpKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvRWNsaXBzZVdTREwxMVZhbGlkYXRvckRlbGVnYXRlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9FY2xpcHNlV1NETDExVmFsaWRhdG9yRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTlhYjZiNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9FY2xpcHNlV1NETDExVmFsaWRhdG9yRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuSUxvZ2dlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuTG9nZ2VyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5JV1NETDExVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLldTREwxMVZhbGlkYXRvckRlbGVnYXRlOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci0KLXB1YmxpYyBjbGFzcyBFY2xpcHNlV1NETDExVmFsaWRhdG9yRGVsZWdhdGUgZXh0ZW5kcyBXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZQotewotICBwcml2YXRlIFN0cmluZyB2YWxpZGF0b3JDbGFzc25hbWUgPSBudWxsOwotICBwcml2YXRlIEJ1bmRsZSBidW5kbGUgPSBudWxsOwotCi0gIC8qKgotICAgKiBDcmVhdGUgYSBkZWxlZ2F0ZSBmb3IgYSB2YWxpZGF0b3IgYnkgaXRzIGNsYXNzIG5hbWUgYW5kIAotICAgKiBhIGNsYXNzIGxvYWRlciB0byBsb2FkIHRoZSB2YWxpZGF0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gdmFsaWRhdG9yQ2xhc3NuYW1lIFRoZSBuYW1lIG9mIHRoZSB2YWxpZGF0b3IgY2xhc3MuCi0gICAqIEBwYXJhbSBidW5kbGUgVGhlIGJ1bmRsZSB0byB1c2UgdG8gbG9hZCB0aGUgdmFsaWRhdG9yLgotICAgKi8KLSAgcHVibGljIEVjbGlwc2VXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZShTdHJpbmcgdmFsaWRhdG9yQ2xhc3NuYW1lLCBCdW5kbGUgYnVuZGxlKQotICB7Ci0JdGhpcy52YWxpZGF0b3JDbGFzc25hbWUgPSB2YWxpZGF0b3JDbGFzc25hbWU7Ci0gICAgdGhpcy5idW5kbGUgPSBidW5kbGU7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5XU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZSNsb2FkVmFsaWRhdG9yKCkKLSAgICovCi0gIHByb3RlY3RlZCBJV1NETDExVmFsaWRhdG9yIGxvYWRWYWxpZGF0b3IoKQotICB7Ci0JSVdTREwxMVZhbGlkYXRvciB2YWxpZGF0b3IgPSBudWxsOwotCWlmKGJ1bmRsZSAhPSBudWxsKQotCXsKLQkgIHRyeQotCSAgewotICAgICAgICBDbGFzcyB2YWxpZGF0b3JDbGFzcyA9IGJ1bmRsZS5sb2FkQ2xhc3ModmFsaWRhdG9yQ2xhc3NuYW1lKTsKLQotICAgICAgICB2YWxpZGF0b3IgPSAoSVdTREwxMVZhbGlkYXRvcil2YWxpZGF0b3JDbGFzcy5uZXdJbnN0YW5jZSgpOwotICAgICAgCi0gICAgICB9Ci0gICAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgICB7Ci0gICAgCUxvZ2dlckZhY3RvcnkuZ2V0SW5zdGFuY2UoKS5nZXRMb2dnZXIoKS5sb2coIlVuYWJsZSB0byBsb2FkIHZhbGlkYXRvciAiICsgdmFsaWRhdG9yQ2xhc3NuYW1lLCBJTG9nZ2VyLlNFVl9FUlJPUiwgdCk7Ci0gICAgICB9Ci0JfQotCXJldHVybiB2YWxpZGF0b3I7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9lY2xpcHNlL0VjbGlwc2VXU0RMVmFsaWRhdG9yRGVsZWdhdGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9lY2xpcHNlL0VjbGlwc2VXU0RMVmFsaWRhdG9yRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzNlMTgxYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9FY2xpcHNlV1NETFZhbGlkYXRvckRlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5lY2xpcHNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5XU0RMVmFsaWRhdG9yRGVsZWdhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5JV1NETFZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuSUxvZ2dlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuTG9nZ2VyRmFjdG9yeTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotCi0KLS8qKgotICogQSBkZWxlZ2F0ZSBob2xkcyBhIHZhbGlkYXRvcidzIGluZm9ybWF0aW9uIGFuZCBjYW4gaW5zdGFudGlhdGUgaXQKLSAqIHdoZW4gcmVxdWVzdGVkIHRvLgotICovCi1wdWJsaWMgY2xhc3MgRWNsaXBzZVdTRExWYWxpZGF0b3JEZWxlZ2F0ZSBleHRlbmRzIFdTRExWYWxpZGF0b3JEZWxlZ2F0ZQotewotICBwcml2YXRlIFN0cmluZyB2YWxpZGF0b3JDbGFzc25hbWUgPSBudWxsOwotICBwcml2YXRlIEJ1bmRsZSBidW5kbGUgPSBudWxsOwotCi0gIC8qKgotICAgKiBDcmVhdGUgYSBkZWxlZ2F0ZSBmb3IgYSB2YWxpZGF0b3IgYnkgaXRzIGNsYXNzIG5hbWUgYW5kIAotICAgKiBhbiBPU0dJIGJ1bmRsZSB0byBsb2FkIHRoZSB2YWxpZGF0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gdmFsaWRhdG9yQ2xhc3NuYW1lIFRoZSBuYW1lIG9mIHRoZSB2YWxpZGF0b3IgY2xhc3MuCi0gICAqIEBwYXJhbSBidW5kbGUgVGhlIE9TR0kgYnVuZGxlIHRvIHVzZSB0byBsb2FkIHRoZSB2YWxpZGF0b3IuCi0gICAqLwotICBwdWJsaWMgRWNsaXBzZVdTRExWYWxpZGF0b3JEZWxlZ2F0ZShTdHJpbmcgdmFsaWRhdG9yQ2xhc3NuYW1lLCBCdW5kbGUgYnVuZGxlKQotICB7Ci0JdGhpcy52YWxpZGF0b3JDbGFzc25hbWUgPSB2YWxpZGF0b3JDbGFzc25hbWU7Ci0gICAgdGhpcy5idW5kbGUgPSBidW5kbGU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5BYnN0cmFjdFdTRExWYWxpZGF0b3JEZWxlZ2F0ZSNsb2FkVmFsaWRhdG9yKCkKLSAgICovCi0gIHByb3RlY3RlZCBJV1NETFZhbGlkYXRvciBsb2FkVmFsaWRhdG9yKCkKLSAgewotCUlXU0RMVmFsaWRhdG9yIHZhbGlkYXRvciA9IG51bGw7Ci0gICAgaWYoYnVuZGxlICE9IG51bGwpCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgCUNsYXNzIHZhbGlkYXRvckNsYXNzID0gYnVuZGxlLmxvYWRDbGFzcyh2YWxpZGF0b3JDbGFzc25hbWUpOwotCi0gICAgICAgIHZhbGlkYXRvciA9IChJV1NETFZhbGlkYXRvcil2YWxpZGF0b3JDbGFzcy5uZXdJbnN0YW5jZSgpOwotICAgICAgfQotICAgICAgY2F0Y2goVGhyb3dhYmxlIHQpCi0gICAgICB7Ci0gICAgCUxvZ2dlckZhY3RvcnkuZ2V0SW5zdGFuY2UoKS5nZXRMb2dnZXIoKS5sb2coIlVuYWJsZSB0byBsb2FkIHZhbGlkYXRvciAiICsgdmFsaWRhdG9yQ2xhc3NuYW1lLCBJTG9nZ2VyLlNFVl9FUlJPUiwgdCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiB2YWxpZGF0b3I7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLkFic3RyYWN0V1NETFZhbGlkYXRvckRlbGVnYXRlI2dldFZhbGlkYXRvck5hbWUoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRWYWxpZGF0b3JOYW1lKCkKLSAgewotICAgIHJldHVybiB2YWxpZGF0b3JDbGFzc25hbWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9lY2xpcHNlL0lubGluZVNjaGVtYU1vZGVsR3JhbW1hclBvb2xJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9JbmxpbmVTY2hlbWFNb2RlbEdyYW1tYXJQb29sSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDg5YmI3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9lY2xpcHNlL0lubGluZVNjaGVtYU1vZGVsR3JhbW1hclBvb2xJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5lY2xpcHNlOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMudXRpbC5YTUxHcmFtbWFyUG9vbEltcGw7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLmdyYW1tYXJzLkdyYW1tYXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLmdyYW1tYXJzLlhNTEdyYW1tYXJEZXNjcmlwdGlvbjsKLQotLyoqCi0gKiBBIGdyYW1tYXIgcG9vbCBmb3IgaW5saW5lIHNjaGVtYXMuIFRoaXMgZ3JhbW1hciBwb29sIHJlc3RyaWN0cyBpbmxpbmUgc2NoZW1hcwotICogZnJvbSBiZWluZyBjYWNoZWQuCi0gKi8KLXB1YmxpYyBjbGFzcyBJbmxpbmVTY2hlbWFNb2RlbEdyYW1tYXJQb29sSW1wbCBleHRlbmRzIFhNTEdyYW1tYXJQb29sSW1wbCAKLXsKLSAgcHVibGljIHZvaWQgcHV0R3JhbW1hcihHcmFtbWFyIGdyYW1tYXIpIAotICB7Ci0JaWYgKGdyYW1tYXIgPT0gbnVsbCkKLQkgIHJldHVybjsKLQkvLyB3ZSBvdmVyaWRlIHRoaXMgbWV0aG9kIHRvIHBlcmZvcm0gJ3NlbGVjdGl2ZScgY2FjaGluZyBvZiBzY2hlbWFzCi0JWE1MR3JhbW1hckRlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gZ3JhbW1hci5nZXRHcmFtbWFyRGVzY3JpcHRpb24oKTsKLQlpZiAoIWZQb29sSXNMb2NrZWQgJiYgIWNvbnRhaW5zR3JhbW1hcihncmFtbWFyLmdldEdyYW1tYXJEZXNjcmlwdGlvbigpKSkgCi0JewotCSAgLy8gaW4gb3JkZXIgdG8gYXZvaWQgY2FjaGluZyB0aGUgaW5saW5lIHNjaGVtYXMKLQkgIC8vIHdlIGVuc3VyZSB0aGUgbGl0ZXJhbCBzeXN0ZW0gaWQgZG9lcyBub3QgZW5kIHdpdGggd3NkbAotCSAgLy8gYmVmb3JlIHdlIGF0dGVtcHQgdG8gJ3B1dCcgdGhlIGdyYW1tYXIKLQkgIFN0cmluZyBsaXRTeXNJZCA9IGRlc2NyaXB0aW9uLmdldExpdGVyYWxTeXN0ZW1JZCgpOwotCSAgU3RyaW5nIGJhc1N5c0lkID0gZGVzY3JpcHRpb24uZ2V0QmFzZVN5c3RlbUlkKCk7Ci0JICBpZiAobGl0U3lzSWQgIT0gbnVsbCAmJiBsaXRTeXNJZC5lbmRzV2l0aCgieHNkIikKLQkJCSYmIGJhc1N5c0lkICE9IG51bGwgJiYgYmFzU3lzSWQuZW5kc1dpdGgoIndzZGwiKSkgCi0JICB7Ci0JCQkJLyoKLQkJCQkgKiBTeXN0ZW0ub3V0LnByaW50bG4oInB1dEdyYW1hbXIgOiAiICsKLQkJCQkgKiBzY2hlbWFEZXNjcmlwdGlvbi5nZXROYW1lc3BhY2UoKSArICIsICIgKwotCQkJCSAqIHNjaGVtYURlc2NyaXB0aW9uLmdldEV4cGFuZGVkU3lzdGVtSWQoKSArICIsICIgKwotCQkJCSAqIHNjaGVtYURlc2NyaXB0aW9uLmdldEJhc2VTeXN0ZW1JZCgpKTsKLQkJCQkgKi8KLQkgICAgc3VwZXIucHV0R3JhbW1hcihncmFtbWFyKTsKLQkgIH0KLQl9Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9VUklSZXNvbHZlcldyYXBwZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9lY2xpcHNlL1VSSVJlc29sdmVyV3JhcHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMWE2YmI3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9lY2xpcHNlL1VSSVJlc29sdmVyV3JhcHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuZWNsaXBzZTsKLQotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyLmludGVybmFsLnByb3Zpc2lvbmFsLlVSSVJlc29sdmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIuaW50ZXJuYWwucHJvdmlzaW9uYWwuVVJJUmVzb2x2ZXJQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5yZXNvbHZlci5JRXh0ZW5zaWJsZVVSSVJlc29sdmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXIuSVVSSVJlc29sdXRpb25SZXN1bHQ7Ci0KLS8qKgotICogQW4gd3JhcHBlciBVUkkgcmVzb2x2ZXIgdGhhdCB3cmFwcyB0aGUgV2ViIFN0YW5kYXJkIFRvb2xzIFVSSSByZXNvbHZlcgotICogaW4gYSBXU0RMIHZhbGlkYXRvciBVUkkgcmVzb2x2ZXIuCi0gKi8KLXB1YmxpYyBjbGFzcyBVUklSZXNvbHZlcldyYXBwZXIgaW1wbGVtZW50cyBJRXh0ZW5zaWJsZVVSSVJlc29sdmVyCi17Ci0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICovCi0gIHB1YmxpYyBVUklSZXNvbHZlcldyYXBwZXIoKQotICB7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnJlc29sdmVyLklFeHRlbnNpYmxlVVJJUmVzb2x2ZXIjcmVzb2x2ZShqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnJlc29sdmVyLklVUklSZXNvbHV0aW9uUmVzdWx0KQotICAgKi8KLSAgcHVibGljIHZvaWQgcmVzb2x2ZShTdHJpbmcgYmFzZUxvY2F0aW9uLCBTdHJpbmcgcHVibGljSWQsIFN0cmluZyBzeXN0ZW1JZCwgSVVSSVJlc29sdXRpb25SZXN1bHQgcmVzdWx0KQotICB7Ci0gICAgVVJJUmVzb2x2ZXIgcmVzb2x2ZXIgPSBVUklSZXNvbHZlclBsdWdpbi5jcmVhdGVSZXNvbHZlcigpOwotICAgIFN0cmluZyByZXNvbHZlZFN5c3RlbUlkID0gcmVzb2x2ZVBsYXRmb3JtVVJMKHN5c3RlbUlkKTsKLSAgICBTdHJpbmcgbG9jYXRpb24gPSBudWxsOwotICAgIGlmIChwdWJsaWNJZCAhPSBudWxsIHx8IHJlc29sdmVkU3lzdGVtSWQgIT0gbnVsbCkKLSAgICB7ICAKLSAgICAgIGxvY2F0aW9uID0gcmVzb2x2ZXIucmVzb2x2ZShiYXNlTG9jYXRpb24sIHB1YmxpY0lkLCByZXNvbHZlZFN5c3RlbUlkKTsKLSAgICB9ICAKLSAgICAKLSAgICBpZiAobG9jYXRpb24gIT0gbnVsbCkKLSAgICB7ICAgICAgIAotICAgICAgcmVzdWx0LnNldExvZ2ljYWxMb2NhdGlvbihsb2NhdGlvbik7Ci0gICAgICBTdHJpbmcgcGh5c2ljYWwgPSByZXNvbHZlci5yZXNvbHZlUGh5c2ljYWxMb2NhdGlvbihiYXNlTG9jYXRpb24sIHB1YmxpY0lkLCBsb2NhdGlvbik7Ci0gICAgICBpZihwaHlzaWNhbCAhPSBudWxsKQotICAgICAgewotICAgICAgICByZXN1bHQuc2V0UGh5c2ljYWxMb2NhdGlvbihwaHlzaWNhbCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdC5zZXRQaHlzaWNhbExvY2F0aW9uKGxvY2F0aW9uKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXNvbHZlIHBsYXRmb3JtIFVSTHMgdG8gc3RhbmRhcmQgVVJMcy4gVGhpcyBtZXRob2QgaGFzIHRoZQotICAgKiBwcmFjdGljYWwgZWZmZWN0IG9mIHRyYW5zZm9ybWluZyBhIFVSTCBzdWNoIGFzCi0gICAqIHBsYXRmb3JtOi9yZXNvdXJjZS90ZXN0L3Rlc3Qud3NkbAotICAgKiBpbnRvCi0gICAqIGZpbGU6L2M6L3d0cC93b3Jrc3BhY2UvdGVzdC90ZXN0LndzZGwKLSAgICogCi0gICAqIEBwYXJhbSB1cmwgVGhlIFVSTCB0aGF0IG1heSBjb250YWluIHRoZSBwbGF0Zm9ybSBzY2hlbWUuCi0gICAqIEByZXR1cm4gQSByZXNvbHZlZCBVUkwgdGhhdCBkb2VzIG5vdCBjb250YWluIHRoZSBwbGF0Zm9ybSBzY2hlbWUuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIHJlc29sdmVQbGF0Zm9ybVVSTChTdHJpbmcgdXJsKQotICB7Ci0JICBTdHJpbmcgcmVzdWx0ID0gdXJsOwotCSAgaWYodXJsICE9IG51bGwgJiYgdXJsLnN0YXJ0c1dpdGgoInBsYXRmb3JtOiIpKQotICAgICAgewotICAgIAkgIHRyeQotICAgIAkgIHsKLSAgICAJCSAgVVJMIGZpbGVVUkwgPSBGaWxlTG9jYXRvci50b0ZpbGVVUkwobmV3IFVSTCh1cmwpKTsKLSAgICAJCSAgcmVzdWx0ID0gZmlsZVVSTC50b0V4dGVybmFsRm9ybSgpOwotICAgIAkgIH0KLSAgICAJICBjYXRjaChFeGNlcHRpb24gZSkKLSAgICAJICB7Ci0gICAgCQkgIC8vIENhbid0IHJlc29sdmUgdXNpbmcgdGhlIEZpbGVMb2NhdG9yIGluIHRoaXMKLSAgICAJCSAgLy8gY2FzZSBzbyBkbyBub3RoaW5nLgotICAgIAkgIH0KLSAgICAgIH0KLQkgIHJldHVybiByZXN1bHQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9lY2xpcHNlL1ZhbGlkYXRlV1NETFBsdWdpbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvVmFsaWRhdGVXU0RMUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmY2QxY2QuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvVmFsaWRhdGVXU0RMUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuZWNsaXBzZTsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwubG9nZ2luZy5Mb2dnZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLldTREwxMVZhbGlkYXRvckRlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sLlhNTENhdGFsb2c7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgcmVxdWlyZWQgZm9yIGVjbGlwc2UuCi0gKi8KLXB1YmxpYyBjbGFzcyBWYWxpZGF0ZVdTRExQbHVnaW4gZXh0ZW5kcyBQbHVnaW4KLXsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBQUk9QRVJUSUVTX0ZJTEUgPSAidmFsaWRhdGV3c2RsdWkiOwotICBwcm90ZWN0ZWQgc3RhdGljIFZhbGlkYXRlV1NETFBsdWdpbiBpbnN0YW5jZTsKLSAgcHJvdGVjdGVkIFJlc291cmNlQnVuZGxlIHJlc291cmNlYnVuZGxlID0gbnVsbDsKLSAgcHJvdGVjdGVkIFJlc291cmNlQnVuZGxlIHdzZGxWYWxpZGF0b3JSZXNvdXJjZUJ1bmRsZSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKi8KLSAgcHVibGljIFZhbGlkYXRlV1NETFBsdWdpbigpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVBY3RpdmF0b3Ijc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIHN1cGVyLnN0YXJ0KGNvbnRleHQpOwotICAgIGluc3RhbmNlID0gdGhpczsKLSAgICB3c2RsVmFsaWRhdG9yUmVzb3VyY2VCdW5kbGUgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoQ29uc3RhbnRzLldTRExfVkFMSURBVE9SX1BST1BFUlRJRVNfRklMRSk7Ci0gICAgcmVzb3VyY2VidW5kbGUgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoUFJPUEVSVElFU19GSUxFKTsKLSAgICAKLSAgICBMb2dnZXJGYWN0b3J5LmdldEluc3RhbmNlKCkuc2V0TG9nZ2VyKG5ldyBFY2xpcHNlTG9nZ2VyKCkpOwotCi0gICAgbmV3IFdTRExWYWxpZGF0b3JQbHVnaW5SZWdpc3RyeVJlYWRlcigKLSAgICAgICJleHR2YWxpZGF0b3IiLAotICAgICAgImV4dHZhbGlkYXRvciIsCi0gICAgICBXU0RMVmFsaWRhdG9yUGx1Z2luUmVnaXN0cnlSZWFkZXIuRVhUX1ZBTElEQVRPUikKLSAgICAgIC5yZWFkUmVnaXN0cnkoKTsKLQotICAgIC8vIHJlZ2lzdGVyIGFueSBXU0RMIDEuMSB2YWxpZGF0b3JzIGRlZmluZWQKLSAgICBuZXcgV1NETDExVmFsaWRhdG9yUGx1Z2luUmVnaXN0cnlSZWFkZXIoIndzZGwxMXZhbGlkYXRvciIsICJ2YWxpZGF0b3IiKS5yZWFkUmVnaXN0cnkoKTsKLSAgfQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUFjdGl2YXRvciNzdG9wKG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIHN1cGVyLnN0b3AoY29udGV4dCk7Ci0gICAgWE1MQ2F0YWxvZy5yZXNldCgpOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJuIHRoZSBpbnN0YW5jZSBvZiB0aGlzIHBsdWdpbiBvYmplY3QuCi0gICAqIAotICAgKiBAcmV0dXJuIHRoZSBpbnN0YW5jZSBvZiB0aGlzIHBsdWdpbiBvYmplY3QKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVmFsaWRhdGVXU0RMUGx1Z2luIGdldEluc3RhbmNlKCkKLSAgewotICAgIHJldHVybiBpbnN0YW5jZTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIGluc3RhbGwgVVJMIG9mIHRoaXMgcGx1Z2luLgotICAgKiAKLSAgICogQHJldHVybiB0aGUgaW5zdGFsbCB1cmwgb2YgdGhpcyBwbHVnaW4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5zdGFsbFVSTCgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICByZXR1cm4gRmlsZUxvY2F0b3IucmVzb2x2ZShnZXRCdW5kbGUoKS5nZXRFbnRyeSgiLyIpKS5nZXRGaWxlKCk7Ci0gICAgfQotICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgfQotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICAqIFJlc291cmNlQnVuZGxlIGhlbHBlciBtZXRob2RzCi0gICAqIAotICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc291cmNlIGJ1bmRsZSBmb3IgdGhpcyBwbHVnaW4uCi0gICAqIAotICAgKiBAcmV0dXJuIHRoZSByZXNvdXJjZSBidW5kbGUgZm9yIHRoaXMgcGx1Z2luCi0gICAqLwotICBwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0UmVzb3VyY2VCdW5kbGUoKQotICB7Ci0gICAgcmV0dXJuIHJlc291cmNlYnVuZGxlOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc291cmNlIGJ1bmRsZSBmb3IgdGhlIFdTREwgdmFsaWRhdG9yLgotICAgKiAKLSAgICogQHJldHVybiB0aGUgcmVzb3VyY2UgYnVuZGxlIGZvciB0aGUgV1NETCB2YWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBSZXNvdXJjZUJ1bmRsZSBnZXRXU0RMVmFsaWRhdG9yUmVzb3VyY2VCdW5kbGUoKQotICB7Ci0gICAgcmV0dXJuIHdzZGxWYWxpZGF0b3JSZXNvdXJjZUJ1bmRsZTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBzdHJpbmcgZm9yIHRoZSBnaXZlbiBpZC4KLSAgICogCi0gICAqIEBwYXJhbSBzdHJpbmdJRCAtIHRoZSBpZCBmb3IgdGhlIHN0cmluZwotICAgKiBAcmV0dXJuIHRoZSBzdHJpbmcgZm9yIHRoZSBnaXZlbiBpZAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIHN0cmluZ0lEKQotICB7Ci0gICAgcmV0dXJuIGdldFJlc291cmNlQnVuZGxlKCkuZ2V0U3RyaW5nKHN0cmluZ0lEKTsKLSAgfQotfQotCi0vKioKLSAqIFRoaXMgY2xhc3MgcmVhZHMgdGhlIHBsdWdpbiBtYW5pZmVzdHMgYW5kIHJlZ2lzdGVycyBlYWNoIFdTRExFeHRlbnNpb25WYWxpZGF0b3IKLSAqLwotY2xhc3MgV1NETFZhbGlkYXRvclBsdWdpblJlZ2lzdHJ5UmVhZGVyCi17Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUX0NMQVNTID0gImNsYXNzIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUX05BTUVTUEFDRSA9ICJuYW1lc3BhY2UiOwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBXU0RMX1ZBTElEQVRPUiA9IDA7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IEVYVF9WQUxJREFUT1IgPSAxOwotICBwcm90ZWN0ZWQgU3RyaW5nIGV4dGVuc2lvblBvaW50SWQ7Ci0gIHByb3RlY3RlZCBTdHJpbmcgdGFnTmFtZTsKLSAgcHJvdGVjdGVkIGludCB2YWxpZGF0b3JUeXBlOwotCi0gIC8qKgotICAgKiAKLSAgICovCi0gIHB1YmxpYyBXU0RMVmFsaWRhdG9yUGx1Z2luUmVnaXN0cnlSZWFkZXIoU3RyaW5nIGV4dGVuc2lvblBvaW50SWQsIFN0cmluZyB0YWdOYW1lLCBpbnQgdmFsaWRhdG9yVHlwZSkKLSAgewotICAgIHRoaXMuZXh0ZW5zaW9uUG9pbnRJZCA9IGV4dGVuc2lvblBvaW50SWQ7Ci0gICAgdGhpcy50YWdOYW1lID0gdGFnTmFtZTsKLSAgICB0aGlzLnZhbGlkYXRvclR5cGUgPSB2YWxpZGF0b3JUeXBlOwotICB9Ci0KLSAgLyoqCi0gICAqIHJlYWQgZnJvbSBwbHVnaW4gcmVnaXN0cnkgYW5kIHBhcnNlIGl0LgotICAgKi8KLSAgcHVibGljIHZvaWQgcmVhZFJlZ2lzdHJ5KCkKLSAgewotICAgIElFeHRlbnNpb25SZWdpc3RyeSBwbHVnaW5SZWdpc3RyeSA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0gICAgSUV4dGVuc2lvblBvaW50IHBvaW50ID0gcGx1Z2luUmVnaXN0cnkuZ2V0RXh0ZW5zaW9uUG9pbnQoUExVR0lOX0lELCBleHRlbnNpb25Qb2ludElkKTsKLSAgICBpZiAocG9pbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBlbGVtZW50cyA9IHBvaW50LmdldENvbmZpZ3VyYXRpb25FbGVtZW50cygpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgcmVhZEVsZW1lbnQoZWxlbWVudHNbaV0pOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiByZWFkRWxlbWVudCgpIC0gcGFyc2UgYW5kIGRlYWwgd2l0aCBhbiBleHRlbnNpb24gbGlrZToKLSAgICoKLSAgICogPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudmFsaWRhdGUud3NkbC5XU0RMRXh0ZW5zaW9uVmFsaWRhdG9yIgotICAgKiAgICAgICAgICAgIGlkPSJzb2FwVmFsaWRhdG9yIgotICAgKiAgICAgICAgICAgIG5hbWU9IlNPQVAgVmFsaWRhdG9yIj4+Ci0gICAqICAgPHZhbGlkYXRvcj4KLSAgICogICAgICAgIDxydW4gY2xhc3M9IiBvcmcuZWNsaXBzZS52YWxpZGF0ZS53c2RsLnNvYXAuU09BUFZhbGlkYXRvciIvPgotICAgKiAgIDwvdmFsaWRhdG9yPgotICAgKiAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZXNwYWNlIiB2YWx1ZT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIvPgotICAgKiA8L2V4dGVuc2lvbj4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHJlYWRFbGVtZW50KElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtZW50KQotICB7Ci0gICAgaWYgKGVsZW1lbnQuZ2V0TmFtZSgpLmVxdWFscyh0YWdOYW1lKSkKLSAgICB7Ci0gICAgICBTdHJpbmcgdmFsaWRhdG9yQ2xhc3MgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRfQ0xBU1MpOwotICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVF9OQU1FU1BBQ0UpOwotCi0gICAgICBpZiAodmFsaWRhdG9yQ2xhc3MgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAvLyAgICAgICAgICBDbGFzc0xvYWRlciBwbHVnaW5Mb2FkZXIgPQotICAgICAgICAgIC8vICAgICAgICAgICAgZWxlbWVudC5nZXREZWNsYXJpbmdFeHRlbnNpb24oKS5nZXREZWNsYXJpbmdQbHVnaW5EZXNjcmlwdG9yKCkuZ2V0UGx1Z2luKCkuZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpOwotICAgICAgICAgIC8vCQkJCW1vZGlmaWVkIHRvIHJlc29sdmUgY2VydGFpbiBzaXR1YXRpb25zIHdoZXJlIHRoZSBwbHVnaW4gaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkCi0KLSAgICAgICAgICBCdW5kbGUgcGx1Z2luQnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKGVsZW1lbnQuZ2V0RGVjbGFyaW5nRXh0ZW5zaW9uKCkuZ2V0Q29udHJpYnV0b3IoKS5nZXROYW1lKCkpOwotICAgICAgICAgIAotICAgICAgICAgIGlmICh2YWxpZGF0b3JUeXBlID09IEVYVF9WQUxJREFUT1IpCi0gICAgICAgICAgIHsKLSAgICAgICAgICAgIEVjbGlwc2VXU0RMVmFsaWRhdG9yRGVsZWdhdGUgZGVsZWdhdGUgPSBuZXcgRWNsaXBzZVdTRExWYWxpZGF0b3JEZWxlZ2F0ZSh2YWxpZGF0b3JDbGFzcywgcGx1Z2luQnVuZGxlKTsKLSAgICAgICAgICAgIFdTRExWYWxpZGF0b3IuZ2V0SW5zdGFuY2UoKS5yZWdpc3RlcldTRExFeHRlbnNpb25WYWxpZGF0b3IobmFtZXNwYWNlLCBkZWxlZ2F0ZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci19Ci0KLS8qKgotICogUmVhZCBXU0RsIDEuMSBleHRlbnNpb24gdmFsaWRhdG9ycy4KLSAqIAotICogIDxleHRlbnNpb24KLSAqICAgICBwb2ludD0iY29tLmlibS5ldG9vbHMudmFsaWRhdGlvbi52YWxpZGF0b3IiCi0gKiAgICAgaWQ9IndzZGxWYWxpZGF0b3IiCi0gKiAgICAgbmFtZT0iJV9VSV9XU0RMX1ZBTElEQVRPUiI+Ci0gKiAgICA8d3NkbDExdmFsaWRhdG9yCi0gKiAgICAgICBuYW1lc3BhY2U9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iCi0gKiAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3NkbC52YWxpZGF0ZS5zb2FwLndzZGwxMS5TT0FQVmFsaWRhdG9yIgotICogICAgICAgcmVzb3VyY2VidW5kbGU9InZhbGlkYXRld3NkbHNvYXAiLz4KLSAqICAgPC9leHRlbnNpb24+Ci0gKiAgCi0gKi8KLWNsYXNzIFdTREwxMVZhbGlkYXRvclBsdWdpblJlZ2lzdHJ5UmVhZGVyCi17Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUX0NMQVNTID0gImNsYXNzIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUX05BTUVTUEFDRSA9ICJuYW1lc3BhY2UiOwotICBwcm90ZWN0ZWQgU3RyaW5nIGV4dGVuc2lvblBvaW50SWQ7Ci0gIHByb3RlY3RlZCBTdHJpbmcgdGFnTmFtZTsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gZXh0ZW5zaW9uUG9pbnRJZCAtIHRoZSBpZCBvZiB0aGUgZXh0ZW5zaW9uIHBvaW50Ci0gICAqIEBwYXJhbSB0YWdOYW1lIC0gdGhlIHRhZyBuYW1lIG9mIHRoZSBleHRlbnNpb24gcG9pbnQKLSAgICovCi0gIHB1YmxpYyBXU0RMMTFWYWxpZGF0b3JQbHVnaW5SZWdpc3RyeVJlYWRlcihTdHJpbmcgZXh0ZW5zaW9uUG9pbnRJZCwgU3RyaW5nIHRhZ05hbWUpCi0gIHsKLSAgICB0aGlzLmV4dGVuc2lvblBvaW50SWQgPSBleHRlbnNpb25Qb2ludElkOwotICAgIHRoaXMudGFnTmFtZSA9IHRhZ05hbWU7Ci0gIH0KLQotICAvKioKLSAgICogUmVhZCBmcm9tIHBsdWdpbiByZWdpc3RyeSBhbmQgaGFuZGxlIHRoZSBjb25maWd1cmF0aW9uIGVsZW1lbnRzIHRoYXQgbWF0Y2gKLSAgICogdGhlIHNwZWRpZmllZCBlbGVtZW50cy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlYWRSZWdpc3RyeSgpCi0gIHsKLSAgICBJRXh0ZW5zaW9uUmVnaXN0cnkgcGx1Z2luUmVnaXN0cnkgPSBQbGF0Zm9ybS5nZXRFeHRlbnNpb25SZWdpc3RyeSgpOwotICAgIElFeHRlbnNpb25Qb2ludCBwb2ludCA9IHBsdWdpblJlZ2lzdHJ5LmdldEV4dGVuc2lvblBvaW50KFBMVUdJTl9JRCwgZXh0ZW5zaW9uUG9pbnRJZCk7Ci0gICAgaWYgKHBvaW50ICE9IG51bGwpCi0gICAgewotICAgICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gZWxlbWVudHMgPSBwb2ludC5nZXRDb25maWd1cmF0aW9uRWxlbWVudHMoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIHJlYWRFbGVtZW50KGVsZW1lbnRzW2ldKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUGFyc2UgYW5kIGRlYWwgd2l0aCB0aGUgZXh0ZW5zaW9uIHBvaW50cy4KLSAgICogCi0gICAqIEBwYXJhbSBlbGVtZW50IFRoZSBleHRlbnNpb24gcG9pbnQgZWxlbWVudC4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHJlYWRFbGVtZW50KElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtZW50KQotICB7Ci0gICAgaWYgKGVsZW1lbnQuZ2V0TmFtZSgpLmVxdWFscyh0YWdOYW1lKSkKLSAgICB7Ci0gICAgICBTdHJpbmcgdmFsaWRhdG9yQ2xhc3MgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRfQ0xBU1MpOwotICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVF9OQU1FU1BBQ0UpOwotCi0gICAgICBpZiAodmFsaWRhdG9yQ2xhc3MgIT0gbnVsbCAmJiBuYW1lc3BhY2UgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBCdW5kbGUgcGx1Z2luQnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKGVsZW1lbnQuZ2V0RGVjbGFyaW5nRXh0ZW5zaW9uKCkuZ2V0Q29udHJpYnV0b3IoKS5nZXROYW1lKCkpOwotICAgICAgICAgIFdTREwxMVZhbGlkYXRvckRlbGVnYXRlIGRlbGVnYXRlID0gbmV3IEVjbGlwc2VXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZSh2YWxpZGF0b3JDbGFzcywgcGx1Z2luQnVuZGxlKTsKLSAgICAgICAgICBXU0RMVmFsaWRhdG9yLmdldEluc3RhbmNlKCkucmVnaXN0ZXJXU0RMMTFWYWxpZGF0b3IobmFtZXNwYWNlLCBkZWxlZ2F0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KLQotCi0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvVmFsaWRhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9WYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc0NTc1Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9WYWxpZGF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuZWNsaXBzZTsKLQotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMudXRpbC5YTUxHcmFtbWFyUG9vbEltcGw7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLmdyYW1tYXJzLlhNTEdyYW1tYXJQb29sOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25SZXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5XU0RMVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5BYnN0cmFjdE5lc3RlZFZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLk5lc3RlZFZhbGlkYXRvckNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uSW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25SZXBvcnQ7Ci0KLS8qKgotICogQSBXU0RMIHZhbGlkYXRvciB0byBjb250cmlidXRlIHRvIHRoZSBXVFAgdmFsaWRhdGlvbiBmcmFtZXdvcmsuCi0gKi8KLXB1YmxpYyBjbGFzcyBWYWxpZGF0b3IgZXh0ZW5kcyBBYnN0cmFjdE5lc3RlZFZhbGlkYXRvciAKLXsKLSAgcHJvdGVjdGVkIEhhc2hNYXAgeHNkR3JhbW1hclBvb2xzID0gbmV3IEhhc2hNYXAoKTsKLSAgcHJvdGVjdGVkIEhhc2hNYXAgeG1sR3JhbW1hclBvb2xzID0gbmV3IEhhc2hNYXAoKTsKLQotICAvKiogCi0gICAqIENyZWF0ZSBhbmQgY29uZmlndXJlIHRoZSB0d28gZ3JhbW1hciBwb29scyBmb3IgdGhpcyBXU0RMIHZhbGlkYXRpb24gY29udGV4dC4KLSAgICogCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5BYnN0cmFjdE5lc3RlZFZhbGlkYXRvciNzZXR1cFZhbGlkYXRpb24ob3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5OZXN0ZWRWYWxpZGF0b3JDb250ZXh0KQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc2V0dXBWYWxpZGF0aW9uKE5lc3RlZFZhbGlkYXRvckNvbnRleHQgY29udGV4dCkgCi0gIHsKLQlzdXBlci5zZXR1cFZhbGlkYXRpb24oY29udGV4dCk7Ci0gICAgCi0JWE1MR3JhbW1hclBvb2wgeHNkR3JhbW1hclBvb2wgPSBuZXcgSW5saW5lU2NoZW1hTW9kZWxHcmFtbWFyUG9vbEltcGwoKTsKLQlYTUxHcmFtbWFyUG9vbCB4bWxHcmFtbWFyUG9vbCA9IG5ldyBYTUxHcmFtbWFyUG9vbEltcGwoKTsKLQkKLQl4c2RHcmFtbWFyUG9vbHMucHV0KGNvbnRleHQsIHhzZEdyYW1tYXJQb29sKTsKLQl4bWxHcmFtbWFyUG9vbHMucHV0KGNvbnRleHQsIHhtbEdyYW1tYXJQb29sKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZW1vdmUgdHdvIGdyYW1tYXIgcG9vbHMgZm9yIHRoaXMgV1NETCB2YWxpZGF0aW9uIGNvbnRleHQuCi0gICAqIAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuQWJzdHJhY3ROZXN0ZWRWYWxpZGF0b3IjdGVhcmRvd25WYWxpZGF0aW9uKG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuTmVzdGVkVmFsaWRhdG9yQ29udGV4dCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHRlYXJkb3duVmFsaWRhdGlvbihOZXN0ZWRWYWxpZGF0b3JDb250ZXh0IGNvbnRleHQpIAotICB7Ci0gICAgWE1MR3JhbW1hclBvb2wgeHNkR3JhbW1hclBvb2wgPSAoWE1MR3JhbW1hclBvb2wpeHNkR3JhbW1hclBvb2xzLnJlbW92ZShjb250ZXh0KTsKLSAgICBpZih4c2RHcmFtbWFyUG9vbCAhPSBudWxsKQotICAgICAgeHNkR3JhbW1hclBvb2wuY2xlYXIoKTsKLSAgICBYTUxHcmFtbWFyUG9vbCB4bWxHcmFtbWFyUG9vbCA9IChYTUxHcmFtbWFyUG9vbCl4bWxHcmFtbWFyUG9vbHMucmVtb3ZlKGNvbnRleHQpOwotICAgIGlmKHhtbEdyYW1tYXJQb29sICE9IG51bGwpCi0gICAgICB4bWxHcmFtbWFyUG9vbC5jbGVhcigpOwotICAgIAotICAgIHN1cGVyLnRlYXJkb3duVmFsaWRhdGlvbihjb250ZXh0KTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLkFic3RyYWN0TmVzdGVkVmFsaWRhdG9yI3ZhbGlkYXRlKGphdmEubGFuZy5TdHJpbmcsIGphdmEuaW8uSW5wdXRTdHJlYW0sIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuTmVzdGVkVmFsaWRhdG9yQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBWYWxpZGF0aW9uUmVwb3J0IHZhbGlkYXRlKFN0cmluZyB1cmksIElucHV0U3RyZWFtIGlucHV0c3RyZWFtLCBOZXN0ZWRWYWxpZGF0b3JDb250ZXh0IGNvbnRleHQpIAotICB7Ci0JWE1MR3JhbW1hclBvb2wgeHNkR3JhbW1hclBvb2wgPSAoWE1MR3JhbW1hclBvb2wpeHNkR3JhbW1hclBvb2xzLmdldChjb250ZXh0KTsKLQlYTUxHcmFtbWFyUG9vbCB4bWxHcmFtbWFyUG9vbCA9IChYTUxHcmFtbWFyUG9vbCl4bWxHcmFtbWFyUG9vbHMuZ2V0KGNvbnRleHQpOwotCQotCVdTRExWYWxpZGF0b3IgdmFsaWRhdG9yID0gV1NETFZhbGlkYXRvci5nZXRJbnN0YW5jZSgpOwotCQotCVdTRExWYWxpZGF0aW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gbmV3IFdTRExWYWxpZGF0aW9uQ29uZmlndXJhdGlvbigpOwotCWNvbmZpZ3VyYXRpb24uc2V0UHJvcGVydHkoQ29uc3RhbnRzLlhNTFNDSEVNQV9DQUNIRV9BVFRSSUJVVEUsIHhzZEdyYW1tYXJQb29sKTsKLSAgICBjb25maWd1cmF0aW9uLnNldFByb3BlcnR5KENvbnN0YW50cy5YTUxfQ0FDSEVfQVRUUklCVVRFLCB4bWxHcmFtbWFyUG9vbCk7Ci0KLQlJVmFsaWRhdGlvblJlcG9ydCB2YWxyZXBvcnQgPSBudWxsOwotCWlmIChpbnB1dHN0cmVhbSAhPSBudWxsKQotCXsKLQkgIHZhbHJlcG9ydCA9IHZhbGlkYXRvci52YWxpZGF0ZSh1cmksIGlucHV0c3RyZWFtLCBjb25maWd1cmF0aW9uKTsKLQl9Ci0JZWxzZQotCXsKLQkgIHZhbHJlcG9ydCA9IHZhbGlkYXRvci52YWxpZGF0ZSh1cmksIG51bGwsIGNvbmZpZ3VyYXRpb24pOwotCX0KLQkJCSAgICAgICAgCi0JcmV0dXJuIGNvbnZlcnRSZXBvcnRUb1hNTFJlcG9ydCh2YWxyZXBvcnQpOwotICB9Ci0gIAotICAvKioKLSAgICogQ29udmVydCBhIFdTREwgSVZhbGlkYXRpb25SZXBvcnQgdG8gYW4gWE1MIFZhbGlkYXRpb24gUmVwb3J0LgotICAgKiAKLSAgICogQHBhcmFtIHJlcG9ydCAKLSAgICogCQlUaGUgV1NETCBJVmFsaWRhdGlvblJlcG9ydCB0byBjb252ZXJ0LgotICAgKiBAcmV0dXJuIAotICAgKiAJCUFuIFhNTCBWYWxpZGF0aW9uIFJlcG9ydCByZXByZXNlbnRpbmcgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBpbiB0aGUgSVZhbGlkYXRpb25SZXBvcnQuCi0gICAqLwotICBwcm90ZWN0ZWQgVmFsaWRhdGlvblJlcG9ydCBjb252ZXJ0UmVwb3J0VG9YTUxSZXBvcnQoSVZhbGlkYXRpb25SZXBvcnQgcmVwb3J0KQotICB7Ci0JVmFsaWRhdGlvbkluZm8gY29udmVydGVkUmVwb3J0ID0gbmV3IFZhbGlkYXRpb25JbmZvKHJlcG9ydC5nZXRGaWxlVVJJKCkpOwotCUlWYWxpZGF0aW9uTWVzc2FnZVtdIG1lc3NhZ2VzID0gcmVwb3J0LmdldFZhbGlkYXRpb25NZXNzYWdlcygpOwotCWludCBudW1NZXNzYWdlcyA9IG1lc3NhZ2VzLmxlbmd0aDsKLQlmb3IoaW50IGkgPSAwOyBpIDwgbnVtTWVzc2FnZXM7IGkrKykKLQl7Ci0JICBjb252ZXJ0TWVzc2FnZShtZXNzYWdlc1tpXSwgY29udmVydGVkUmVwb3J0KTsKLQl9Ci0KLQlyZXR1cm4gY29udmVydGVkUmVwb3J0OwotICB9Ci0gIAotICAvKioKLSAgICogQ29udmVydCBhIFdTREwgSVZhbGlkYXRpb25NZXNzYWdlIGJ5IHJlcG9ydGluZyBpdCBpbiB0aGUgVmFsaWRhdGlvbkluZm8gb2JqZWN0LgotICAgKiAKLSAgICogQHBhcmFtIG1lc3NhZ2UKLSAgICogCQlUaGUgSVZhbGlkYXRpb25NZXNzYWdlIHRvIGNvbnZlcnQuCi0gICAqIEBwYXJhbSBjb252ZXJ0ZWRSZXBvcnQKLSAgICogCQlUaGUgVmFsaWRhdGlvbkluZm8gb2JqZWN0IHJlcHJlc3RpbmcgdGhlIGNvbnZlcnRlZCByZXBvcnQuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBjb252ZXJ0TWVzc2FnZShJVmFsaWRhdGlvbk1lc3NhZ2UgbWVzc2FnZSwgVmFsaWRhdGlvbkluZm8gY29udmVydGVkUmVwb3J0KQotICB7Ci0JTGlzdCBuZXN0ZWRNZXNzYWdlcyA9IG1lc3NhZ2UuZ2V0TmVzdGVkTWVzc2FnZXMoKTsKLQlpZihuZXN0ZWRNZXNzYWdlcyAhPSBudWxsICYmIG5lc3RlZE1lc3NhZ2VzLnNpemUoKSA+IDApCi0JewotCSAgSXRlcmF0b3IgbWVzc2FnZUl0ZXIgPSBuZXN0ZWRNZXNzYWdlcy5pdGVyYXRvcigpOwotCSAgd2hpbGUobWVzc2FnZUl0ZXIuaGFzTmV4dCgpKQotCSAgewotCQljb252ZXJ0TWVzc2FnZSgoSVZhbGlkYXRpb25NZXNzYWdlKW1lc3NhZ2VJdGVyLm5leHQoKSwgY29udmVydGVkUmVwb3J0KTsKLQkgIH0KLQl9Ci0JZWxzZQotCXsKLQkgIGlmKG1lc3NhZ2UuZ2V0U2V2ZXJpdHkoKSA9PSBJVmFsaWRhdGlvbk1lc3NhZ2UuU0VWX1dBUk5JTkcpCi0JICAgIGNvbnZlcnRlZFJlcG9ydC5hZGRXYXJuaW5nKG1lc3NhZ2UuZ2V0TWVzc2FnZSgpLCBtZXNzYWdlLmdldExpbmUoKSwgbWVzc2FnZS5nZXRDb2x1bW4oKSwgbWVzc2FnZS5nZXRVUkkoKSk7Ci0JICBlbHNlCi0JCWNvbnZlcnRlZFJlcG9ydC5hZGRFcnJvcihtZXNzYWdlLmdldE1lc3NhZ2UoKSwgbWVzc2FnZS5nZXRMaW5lKCksIG1lc3NhZ2UuZ2V0Q29sdW1uKCksIG1lc3NhZ2UuZ2V0VVJJKCkpOwotCX0KLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLkFic3RyYWN0TmVzdGVkVmFsaWRhdG9yI2dldFZhbGlkYXRvcklEKCkKLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0VmFsaWRhdG9ySUQoKQotICB7Ci0gICAgLy8gQmVjYXVzZSB0aGlzIGNsYXNzIGlzIHVzZWQgYXMgYSBkZWxlZ2F0ZSwgcmV0dXJuIHRoZSBpZCBvZiB0aGUgdmFsaWRhdG9yCi0gICAgLy8gd2hpY2ggZGVsZWdhdGVzIHRvIHRoaXMgY2xhc3MuCi0gCi0gICAgcmV0dXJuIFdTRExEZWxlZ2F0aW5nVmFsaWRhdG9yLmNsYXNzLmdldE5hbWUoKTsgLy8kTk9OLU5MUy0xJAotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9XU0RMRGVsZWdhdGluZ1ZhbGlkYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvV1NETERlbGVnYXRpbmdWYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQyMGQ0Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9XU0RMRGVsZWdhdGluZ1ZhbGlkYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5kZWxlZ2F0ZXMuRGVsZWdhdGluZ1ZhbGlkYXRvcjsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgdW5pcXVlIG5hbWUgKGNsYXNzIG5hbWUpIHdoaWNoIHRoZSB2YWxpZGF0aW9uIGZyYW1ld29yawotICogd2lsbCB1c2UgdG8gaWRlbnRpZnkgdGhlIFdTREwgdmFsaWRhdG9yLiBUaGUgYWN0dWFsIGRlbGVnYXRpbmcgdmFsaWRhdG9yCi0gKiBmdW5jdGlvbmFsaXR5IGlzIHByb3ZpZGVkIGJ5IHRoZSBiYXNlIGNsYXNzLiBUaGUgYWN0dWFsIHZhbGlkYXRpb24KLSAqIGZ1bmN0aW9uYWxpdHkgaXMgcHJvdmlkZWQgYnkgdGhlIGRlbGVnYXRlcyByZWdpc3RlcmVkIHdpdGggdGhpcyBjbGFzcyBhcwotICogdGhlaXIgdGFyZ2V0LgotICovCi1wdWJsaWMgY2xhc3MgV1NETERlbGVnYXRpbmdWYWxpZGF0b3IgZXh0ZW5kcyBEZWxlZ2F0aW5nVmFsaWRhdG9yCi17Ci0gIC8qKgotICAgKiBEZWZhdWx0IGNvbnN0cnVjdG9yLgotICAgKi8KLSAgcHVibGljIFdTRExEZWxlZ2F0aW5nVmFsaWRhdG9yKCkKLSAgewotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9XU0RMVmFsaWRhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9XU0RMVmFsaWRhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhMzViNmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvV1NETFZhbGlkYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuZWNsaXBzZTsKLQotCi0KLS8qKgotICogQW4gRWNsaXBzZSBXU0RMIHZhbGlkYXRvci4gVGhpcyB2YWxpZGF0b3IgaXMgdGhlIGRlZmF1bHQgdmFsaWRhdG9yCi0gKiB1c2VkIGluIHRoZSB2YWxpZGF0aW9uIGZyYW1ld29yay4gVGhlcmUgaXMgb25seSBhIHNpbmdsZSBpbnN0YW5jZSBvZgotICogdGhpcyB2YWxpZGF0b3IuIFdoZW4gY3JlYXRlZCwgdGhpcyB2YWxpZGF0b3IgcmVnaXN0ZXJzIGFsbCBleHRlbnNpb24KLSAqIFVSSSByZXNvbHZlcnMuCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMVmFsaWRhdG9yIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5XU0RMVmFsaWRhdG9yCi17Ci0JcHJpdmF0ZSBzdGF0aWMgV1NETFZhbGlkYXRvciBpbnN0YW5jZSA9IG51bGw7Ci0KLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IgcmVnaXN0ZXJzIGFsbCBvZiB0aGUgVVJJIHJlc29sdmVycyBkZWZpbmVkIHZpYSB0aGUKLQkgKiBXU0RMIFVSSSByZXNvbHZlciBleHRlbnNpb24gcG9pbnQgd2l0aCB0aGUgV1NETCB2YWxpZGF0b3IuIAotCSAqIAotCSAqLwotCXByb3RlY3RlZCBXU0RMVmFsaWRhdG9yKCkKLQl7Ci0gICAgICBzdXBlcigpOwotICAgICAgVVJJUmVzb2x2ZXJXcmFwcGVyIHJlc29sdmVyID0gbmV3IFVSSVJlc29sdmVyV3JhcHBlcigpOwotICAgICAgYWRkVVJJUmVzb2x2ZXIocmVzb2x2ZXIpOwotCX0KLQkKLQkvKioKLQkgKiBHZXQgdGhlIG9uZSBhbmQgb25seSBpbnN0YW5jZSBvZiB0aGlzIEVjbGlwc2UgV1NETCB2YWxpZGF0b3IuCi0JICogCi0JICogQHJldHVybiBUaGUgb25lIGFuZCBvbmx5IGluc3RhbmNlIG9mIHRoaXMgRWNsaXBzZSBXU0RMIHZhbGlkYXRvci4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFdTRExWYWxpZGF0b3IgZ2V0SW5zdGFuY2UoKQotCXsKLQkJaWYoaW5zdGFuY2UgPT0gbnVsbCkKLQkJewotCQkJaW5zdGFuY2UgPSBuZXcgV1NETFZhbGlkYXRvcigpOwotCQl9Ci0JCXJldHVybiBpbnN0YW5jZTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9leGNlcHRpb24vVmFsaWRhdGVXU0RMRXhjZXB0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZXhjZXB0aW9uL1ZhbGlkYXRlV1NETEV4Y2VwdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzM2QxYjQ4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9leGNlcHRpb24vVmFsaWRhdGVXU0RMRXhjZXB0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmV4Y2VwdGlvbjsKLQotLyoqCi0gKiBDdXN0b20gZXhjZXB0aW9uIGZvciBXU0RMIHZhbGlkYXRpb24uCi0gKi8KLXB1YmxpYyBjbGFzcyBWYWxpZGF0ZVdTRExFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24KLXsKLQkvKioKLSAgICogUmVxdWlyZWQgc2VyaWFsIHZlcnNpb24gdWlkLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKiAKLSAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIGV4Y2VwdGlvbiBtZXNzYWdlCi0gICAqLwotICBwdWJsaWMgVmFsaWRhdGVXU0RMRXhjZXB0aW9uKFN0cmluZyBtZXNzYWdlKQotCXsKLQkgIHN1cGVyKG1lc3NhZ2UpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9sb2dnaW5nL0lMb2dnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9sb2dnaW5nL0lMb2dnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDZhZTg5MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvbG9nZ2luZy9JTG9nZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwubG9nZ2luZzsKLQotLyoqCi0gKiBUaGUgaW50ZXJmYWNlIGZvciBhIHN0YW5kYXJkIGxvZ2dlciBmb3IgdGhlIFdTREwgdmFsaWRhdG9yLiAKLSAqIEFsbG93cyBmb3IgbG9nZ2luZyBlcnJvcnMgYW5kIHdhcm5pbmdzLgotICovCi1wdWJsaWMgaW50ZXJmYWNlIElMb2dnZXIKLXsKLSAgLyoqCi0gICAqIFNldmVyaXR5IGVycm9yIGZvciBsb2dnaW5nLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBpbnQgU0VWX0VSUk9SID0gMDsKLSAgCi0gIC8qKgotICAgKiBTZXZlcml0eSB3YXJuaW5nIGZvciBsb2dnaW5nLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBpbnQgU0VWX1dBUk5JTkcgPSAxOwotICAKLSAgLyoqCi0gICAqIFNldmVyaXR5IGluZm8gZm9yIGxvZ2dpbmcuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGludCBTRVZfSU5GTyA9IDI7Ci0gIAotICAvKioKLSAgICogU2V2ZXJpdHkgdmVyYm9zZSBmb3IgbG9nZ2luZy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgaW50IFNFVl9WRVJCT1NFID0gMzsKLSAgCi0gIC8qKgotICAgKiBMb2cgYSBtZXNzYWdlLgotICAgKiAKLSAgICogQHBhcmFtIG1lc3NhZ2UgCi0gICAqIAkJVGhlIG1lc3NhZ2UgdG8gbG9nLgotICAgKiBAcGFyYW0gc2V2ZXJpdHkKLSAgICogCQlUaGUgc2V2ZXJpdHkgb2YgdGhlIG1lc3NhZ2UgdG8gbG9nLgotICAgKi8KLSAgcHVibGljIHZvaWQgbG9nKFN0cmluZyBtZXNzYWdlLCBpbnQgc2V2ZXJpdHkpOwotICAKLSAgLyoqCi0gICAqIExvZyBhIG1lc3NhZ2UuCi0gICAqIAotICAgKiBAcGFyYW0gbWVzc2FnZSAKLSAgICogCQlUaGUgbWVzc2FnZSB0byBsb2cuCi0gICAqIEBwYXJhbSBzZXZlcml0eQotICAgKiAJCVRoZSBzZXZlcml0eSBvZiB0aGUgbWVzc2FnZSB0byBsb2cuCi0gICAqIEBwYXJhbSB0aHJvd2FibGUgCi0gICAqIAkJVGhlIGV4Y2VwdGlvbiB0byBsb2cuCi0gICAqLwotICBwdWJsaWMgdm9pZCBsb2coU3RyaW5nIG1lc3NhZ2UsIGludCBzZXZlcml0eSwgVGhyb3dhYmxlIHRocm93YWJsZSk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvbG9nZ2luZy9Mb2dnZXJGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvbG9nZ2luZy9Mb2dnZXJGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3YTlkNWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2xvZ2dpbmcvTG9nZ2VyRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmc7Ci0KLS8qKgotICogVGhlIGxvZ2dlciBmYWN0b3J5IGFsbG93cyBmb3Igc2ltcGxlIHVzZSBvZiB3aGF0ZXZlciBsb2dnaW5nIG1lY2hhbmlzbSBpcyBpbgotICogcGxhY2UuIFRoZSB0b29sIGNhbiBzcGVjaWZ5IGEgY3VzdG9tIElMb2dnZXIuIFRoZSBXU0RMIHZhbGlkYXRvciB3aWxsIHJlcXVlc3QgdGhlCi0gKiBsb2dnZXIgZnJvbSB0aGlzIGNsYXNzLgotICovCi1wdWJsaWMgY2xhc3MgTG9nZ2VyRmFjdG9yeQotewotICBwcml2YXRlIHN0YXRpYyBMb2dnZXJGYWN0b3J5IGZhY3RvcnkgPSBudWxsOwotICBwcml2YXRlIElMb2dnZXIgbG9nZ2VyICA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgb25lIGFuZCBvbmx5IGluc3RhbmNlIG9mIHRoZSBsb2dnZXIgZmFjdG9yeS4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIG9uZSBhbmQgb25seSBpbnN0YW5jZSBvZiB0aGUgbG9nZ2VyLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBMb2dnZXJGYWN0b3J5IGdldEluc3RhbmNlKCkKLSAgewotCWlmKGZhY3RvcnkgPT0gbnVsbCkKLQl7Ci0JICBmYWN0b3J5ID0gbmV3IExvZ2dlckZhY3RvcnkoKTsKLQl9Ci0JcmV0dXJuIGZhY3Rvcnk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBTZXQgdGhlIGxvZ2dlciBpbXBsZW1lbnRhdGlvbiB0byBiZSB1c2VkLgotICAgKiAKLSAgICogQHBhcmFtIGxvZ2dlcgotICAgKiAgICAgICAgICAgIFRoZSBJTG9nZ2VyIHRvIHVzZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExvZ2dlcihJTG9nZ2VyIGxvZ2dlcikKLSAgewotICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBsb2dnZXIuCi0gICAqIAotICAgKiBAcmV0dXJuCi0gICAqIAkJVGhlIGxvZ2dlci4KLSAgICovCi0gIHB1YmxpYyBJTG9nZ2VyIGdldExvZ2dlcigpCi0gIHsKLQlpZihsb2dnZXIgPT0gbnVsbCkKLQl7Ci0JICBsb2dnZXIgPSBuZXcgU3RhbmRhcmRMb2dnZXIoKTsKLQl9Ci0JcmV0dXJuIGxvZ2dlcjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2xvZ2dpbmcvU3RhbmRhcmRMb2dnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9sb2dnaW5nL1N0YW5kYXJkTG9nZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwYzFiMjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2xvZ2dpbmcvU3RhbmRhcmRMb2dnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmc7Ci0KLWltcG9ydCBqYXZhLmlvLlByaW50U3RyZWFtOwotCi0vKioKLSAqIEEgbG9nZ2VyIHRoYXQgd2lsbCBwcmludCBsb2cgaW5mbyB0byBzdGFuZGFyZCBzeXN0ZW0gb3V0cHV0cy4KLSAqLwotcHVibGljIGNsYXNzIFN0YW5kYXJkTG9nZ2VyIGltcGxlbWVudHMgSUxvZ2dlcgoteyAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwubG9nZ2luZy5JTG9nZ2VyI2xvZyhqYXZhLmxhbmcuU3RyaW5nLCBpbnQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBsb2coU3RyaW5nIG1lc3NhZ2UsIGludCBzZXZlcml0eSkgCi0gIHsgIAotCVByaW50U3RyZWFtIG91dHB1dFN0cmVhbSA9IFN5c3RlbS5vdXQ7Ci0JaWYoc2V2ZXJpdHkgPT0gSUxvZ2dlci5TRVZfRVJST1IpCi0JewotCSAgb3V0cHV0U3RyZWFtID0gU3lzdGVtLmVycjsKLQl9Ci0gICAgb3V0cHV0U3RyZWFtLnByaW50bG4obWVzc2FnZSk7Ci0gIH0KLQotLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwubG9nZ2luZy5JTG9nZ2VyI2xvZyhqYXZhLmxhbmcuU3RyaW5nLCBpbnQsIGphdmEubGFuZy5UaHJvd2FibGUpCi0gICAqLwotICBwdWJsaWMgdm9pZCBsb2coU3RyaW5nIGVycm9yLCBpbnQgc2V2ZXJpdHksIFRocm93YWJsZSB0aHJvd2FibGUpCi0gIHsKLQlsb2coZXJyb3IsIHNldmVyaXR5KTsKLQlsb2codGhyb3dhYmxlLnRvU3RyaW5nKCksIHNldmVyaXR5KTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3Jlc29sdmVyL0lFeHRlbnNpYmxlVVJJUmVzb2x2ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9yZXNvbHZlci9JRXh0ZW5zaWJsZVVSSVJlc29sdmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyOWZkZjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3Jlc29sdmVyL0lFeHRlbnNpYmxlVVJJUmVzb2x2ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnJlc29sdmVyOwotCi0vKioKLSAqIEFuIGludGVyZmFjZSBmb3IgdGhlIFdTREwgdmFsaWRhdG9yJ3MgVVJJIHJlc29sdmVyIG1lY2hhbmlzbS4gVGhlIFVSSSByZXNvbHZlcgotICogaXMgdXNlZCB0byBmaW5kIHRoZSBsb2NhdGlvbiBvZiBhbiBlbnRpdHkuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSUV4dGVuc2libGVVUklSZXNvbHZlcgotewotIC8qKgotICAqIFJlc29sdmUgdGhlIGxvY2F0aW9uIG9mIHRoZSBlbnRpdHkgZGVzY3JpYmVkIGJ5IHRoZSBwdWJsaWNJZCBhbmQgc3lzdGVtSWQuCi0gICogCi0gICogQHBhcmFtIGJhc2VMb2NhdGlvbiBUaGUgbG9jYXRpb24gb2YgdGhlIHJlc291cmNlIHRoYXQgY29udGFpbnMgdGhlIHVyaS4KLSAgKiBAcGFyYW0gcHVibGljSWQgQW4gb3B0aW9uYWwgcHVibGljIGlkZW50aWZpZXIgKGkuZS4gbmFtZXNwYWNlIG5hbWUpLCBvciBudWxsIGlmIG5vbmUuCi0gICogQHBhcmFtIHN5c3RlbUlkIEFuIGFic29sdXRlIG9yIHJlbGF0aXZlIFVSSSwgb3IgbnVsbCBpZiBub25lLgotICAqIEBwYXJhbSByZXN1bHQgVGhlIHJlc3VsdCBvZiB0aGUgcmVzb2x1dGlvbi4KLSAgKi8KLSAgcHVibGljIHZvaWQgcmVzb2x2ZShTdHJpbmcgYmFzZUxvY2F0aW9uLCBTdHJpbmcgcHVibGljSWQsIFN0cmluZyBzeXN0ZW1JZCwgSVVSSVJlc29sdXRpb25SZXN1bHQgcmVzdWx0KTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9yZXNvbHZlci9JVVJJUmVzb2x1dGlvblJlc3VsdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3Jlc29sdmVyL0lVUklSZXNvbHV0aW9uUmVzdWx0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmYmY4NmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3Jlc29sdmVyL0lVUklSZXNvbHV0aW9uUmVzdWx0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXI7Ci0KLS8qKgotICogVGhlIHJlcHJlc2VudGF0aW9uIG9mIGEgVVJJIHJlc29sdXRpb24gcmVzdWx0LiBUaGlzIGludGVyZmFjZSBpcyBub3QgbWVhbnQgdG8KLSAqIGJlIGltcGxlbWVudGVkIGJ5IGNsaWVudHMuCi0gKgotICovCi1wdWJsaWMgaW50ZXJmYWNlIElVUklSZXNvbHV0aW9uUmVzdWx0IAotewotICAvKioKLSAgICogR2V0IHRoZSBsb2dpY2FsIGxvY2F0aW9uIG9mIHRoZSByZXNvbHV0aW9uIHJlc3VsdC4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIGxvZ2ljYWwgbG9jYXRpb24gb2YgdGhlIHJlc29sdXRpb24gcmVzdWx0LgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRMb2dpY2FsTG9jYXRpb24oKTsKLSAgCi0gIC8qKgotICAgKiBTZXQgdGhlIGxvZ2ljYWwgbG9jYXRpb24gb2YgdGhlIHJlc29sdXRpb24gcmVzdWx0LgotICAgKiAKLSAgICogQHBhcmFtIGxvZ2ljYWxMb2NhdGlvbiBUaGUgbG9naWNhbCBsb2NhdGlvbiBvZiB0aGUgcmVzb2x1dGlvbiByZXN1bHQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRMb2dpY2FsTG9jYXRpb24oU3RyaW5nIGxvZ2ljYWxMb2NhdGlvbik7Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBwaHlzaWNhbCBsb2NhdGlvbiBvZiB0aGUgcmVzb2x1dGlvbiByZXN1bHQuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBwaHlzaWNhbCBsb2NhdGlvbiBvZiB0aGUgcmVzb2x1dGlvbiByZXN1bHQuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFBoeXNpY2FsTG9jYXRpb24oKTsKLSAgCi0gIC8qKgotICAgKiBTZXQgdGhlIHBoeXNpY2FsIGxvY2F0aW9uIG9mIHRoZSByZXNvbHV0aW9uIHJlc3VsdC4KLSAgICogCi0gICAqIEBwYXJhbSBwaHlzaWNhbExvY2F0aW9uIFRoZSBwaHlzaWNhbCBsb2NhdGlvbiBvZiB0aGUgcmVzb2x1dGlvbiByZXN1bHQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRQaHlzaWNhbExvY2F0aW9uKFN0cmluZyBwaHlzaWNhbExvY2F0aW9uKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9yZXNvbHZlci9VUklSZXNvbHV0aW9uUmVzdWx0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvcmVzb2x2ZXIvVVJJUmVzb2x1dGlvblJlc3VsdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTg4OTRlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9yZXNvbHZlci9VUklSZXNvbHV0aW9uUmVzdWx0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXI7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBob2xkcyB0aGUgVVJJIHJlc29sdXRpb24gcmVzdWx0cy4KLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBVUklSZXNvbHV0aW9uUmVzdWx0IGltcGxlbWVudHMgSVVSSVJlc29sdXRpb25SZXN1bHQKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgbG9naWNhbExvY2F0aW9uID0gbnVsbDsKLSAgcHJpdmF0ZSBTdHJpbmcgcGh5c2ljYWxMb2NhdGlvbiA9IG51bGw7Ci0gIAotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqLwotICBwdWJsaWMgVVJJUmVzb2x1dGlvblJlc3VsdCgpCi0gIHsKLSAgfQotICAKLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5yZXNvbHZlci5JVVJJUmVzb2x1dGlvblJlc3VsdCNnZXRMb2dpY2FsTG9jYXRpb24oKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRMb2dpY2FsTG9jYXRpb24oKQotICB7Ci0JcmV0dXJuIGxvZ2ljYWxMb2NhdGlvbjsKLSAgfQotICAKLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5yZXNvbHZlci5JVVJJUmVzb2x1dGlvblJlc3VsdCNzZXRMb2dpY2FsTG9jYXRpb24oamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExvZ2ljYWxMb2NhdGlvbihTdHJpbmcgbG9naWNhbExvY2F0aW9uKQotICB7Ci0JdGhpcy5sb2dpY2FsTG9jYXRpb24gPSBsb2dpY2FsTG9jYXRpb247Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXIuSVVSSVJlc29sdXRpb25SZXN1bHQjZ2V0UGh5c2ljYWxMb2NhdGlvbigpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFBoeXNpY2FsTG9jYXRpb24oKQotICB7Ci0JcmV0dXJuIHBoeXNpY2FsTG9jYXRpb247Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXIuSVVSSVJlc29sdXRpb25SZXN1bHQjc2V0UGh5c2ljYWxMb2NhdGlvbihqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UGh5c2ljYWxMb2NhdGlvbihTdHJpbmcgcGh5c2ljYWxMb2NhdGlvbikKLSAgewotCXRoaXMucGh5c2ljYWxMb2NhdGlvbiA9IHBoeXNpY2FsTG9jYXRpb247Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3Jlc29sdmVyL1VSSVJlc29sdmVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvcmVzb2x2ZXIvVVJJUmVzb2x2ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzlmMzYzOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvcmVzb2x2ZXIvVVJJUmVzb2x2ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5yZXNvbHZlcjsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE1MUmVzb3VyY2VJZGVudGlmaWVyOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTklFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxFbnRpdHlSZXNvbHZlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTElucHV0U291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudXRpbC5MYXp5VVJMSW5wdXRTdHJlYW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC54bWwuWE1MQ2F0YWxvZzsKLQotLyoqCi0gKiBUaGlzIGlzIHRoZSBtYWluIFVSSSByZXNvbHZlciB0aGF0IGNhbGxzIG91dCB0byBhbGwgb2YgdGhlIHJlZ2lzdGVyZWQKLSAqIGV4dGVybmFsIFVSSSByZXNvbHZlcnMgdG8gbG9jYXRlIGFuIGVudGl0eS4gSWYgbm9uZSBvZiB0aGUgZXh0ZXJuYWwgcmVzb2x2ZXJzCi0gKiBjYW4gbG9jYXRlIHRoZSBlbnRpdHkgdGhlIHJlc29sdmVyIHdpbGwgYXNrIHRoZSBpbnRlcm5hbCBXU0RMIHZhbGlkYXRvciBYTUwKLSAqIGNhdGFsb2cgdG8gcmVzb2x2ZSB0aGUgbG9jYXRpb24uCi0gKi8KLXB1YmxpYyBjbGFzcyBVUklSZXNvbHZlciBpbXBsZW1lbnRzIElFeHRlbnNpYmxlVVJJUmVzb2x2ZXIsIFhNTEVudGl0eVJlc29sdmVyCi17Ci0gIHByaXZhdGUgTGlzdCBleHRVUklSZXNvbHZlcnNMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4gCi0gICAqLwotICBwdWJsaWMgVVJJUmVzb2x2ZXIoKQotICB7Ci0gIH0KLQotCi0gIC8qKgotICAgKiBBZGQgYW4gZXh0ZW5zaW9uIFVSSSByZXNvbHZlci4KLSAgICogCi0gICAqIEBwYXJhbSB1cmlSZXNvbHZlcgotICAgKiAgICAgICAgICBUaGUgZXh0ZW5zaW9uIFVSSSByZXNvbHZlci4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZFVSSVJlc29sdmVyKElFeHRlbnNpYmxlVVJJUmVzb2x2ZXIgdXJpUmVzb2x2ZXIpCi0gIHsKLSAgICBleHRVUklSZXNvbHZlcnNMaXN0LmFkZCh1cmlSZXNvbHZlcik7Ci0gIH0KLQotICAKLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5yZXNvbHZlci5JRXh0ZW5zaWJsZVVSSVJlc29sdmVyI3Jlc29sdmUoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5yZXNvbHZlci5JVVJJUmVzb2x1dGlvblJlc3VsdCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc29sdmUoU3RyaW5nIGJhc2VMb2NhdGlvbiwgU3RyaW5nIHB1YmxpY0lkLCBTdHJpbmcgc3lzdGVtSWQsIElVUklSZXNvbHV0aW9uUmVzdWx0IHJlc3VsdCkKLSAgewotICAgIEl0ZXJhdG9yIHJlc29sdmVySXRlciA9IGV4dFVSSVJlc29sdmVyc0xpc3QuaXRlcmF0b3IoKTsKLSAgICB3aGlsZShyZXNvbHZlckl0ZXIuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIElFeHRlbnNpYmxlVVJJUmVzb2x2ZXIgcmVzb2x2ZXIgPSAoSUV4dGVuc2libGVVUklSZXNvbHZlcilyZXNvbHZlckl0ZXIubmV4dCgpOwotICAgICAgaWYgKHJlc29sdmVyID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotICAgICAgcmVzb2x2ZXIucmVzb2x2ZShiYXNlTG9jYXRpb24sIHB1YmxpY0lkLCBzeXN0ZW1JZCwgcmVzdWx0KTsKLSAgICAgIGlmIChyZXN1bHQuZ2V0TG9naWNhbExvY2F0aW9uKCkgIT0gbnVsbCAmJiAhcmVzdWx0LmdldFBoeXNpY2FsTG9jYXRpb24oKS5lcXVhbHMoc3lzdGVtSWQpKQotICAgICAgewotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSBoYXZlbid0IGJlZW4gYWJsZSB0byBsb2NhdGUgdGhlIHJlc3VsdCB5ZXQgYXNrIHRoZSBpbnRlcm5hbCBYTUwKLSAgICAvLyBjYXRhbG9nLgotICAgIGlmIChyZXN1bHQuZ2V0TG9naWNhbExvY2F0aW9uKCkgPT0gbnVsbCAmJiAocHVibGljSWQgIT0gbnVsbCB8fCBzeXN0ZW1JZCAhPSBudWxsKSkKLSAgICB7Ci0gICAgICBTdHJpbmcgdGVtcHJlc3VsdCA9IFhNTENhdGFsb2cuZ2V0SW5zdGFuY2UoKS5yZXNvbHZlRW50aXR5TG9jYXRpb24ocHVibGljSWQsIHN5c3RlbUlkKTsKLSAgICAgIGlmKHRlbXByZXN1bHQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAJcmVzdWx0LnNldExvZ2ljYWxMb2NhdGlvbih0ZW1wcmVzdWx0KTsKLSAgICAJcmVzdWx0LnNldFBoeXNpY2FsTG9jYXRpb24odGVtcHJlc3VsdCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGlmKHJlc3VsdC5nZXRMb2dpY2FsTG9jYXRpb24oKSA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdC5zZXRMb2dpY2FsTG9jYXRpb24obm9ybWFsaXplKGJhc2VMb2NhdGlvbiwgc3lzdGVtSWQpKTsKLSAgICAgIHJlc3VsdC5zZXRQaHlzaWNhbExvY2F0aW9uKHJlc3VsdC5nZXRMb2dpY2FsTG9jYXRpb24oKSk7Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgSVVSSVJlc29sdXRpb25SZXN1bHQgcmVzb2x2ZShTdHJpbmcgYmFzZUxvY2F0aW9uLCBTdHJpbmcgcHVibGljSWQsIFN0cmluZyBzeXN0ZW1JZCkKLSAgewotCUlVUklSZXNvbHV0aW9uUmVzdWx0IHJlc3VsdD0gbmV3IFVSSVJlc29sdXRpb25SZXN1bHQoKTsKLQlyZXNvbHZlKGJhc2VMb2NhdGlvbiwgcHVibGljSWQsIHN5c3RlbUlkLCByZXN1bHQpOwotCXJldHVybiByZXN1bHQ7Ci0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIAotICAgKiBAc2VlIG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MRW50aXR5UmVzb2x2ZXIjcmVzb2x2ZUVudGl0eShvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE1MUmVzb3VyY2VJZGVudGlmaWVyKQotICAgKi8KLSAgcHVibGljIFhNTElucHV0U291cmNlIHJlc29sdmVFbnRpdHkoWE1MUmVzb3VyY2VJZGVudGlmaWVyIHJlc291cmNlSWRlbnRpZmllcikgdGhyb3dzIFhOSUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24KLSAgewotICAgIFN0cmluZyBwdWJsaWNJZCA9IHJlc291cmNlSWRlbnRpZmllci5nZXRQdWJsaWNJZCgpOwotICAgIFN0cmluZyBzeXN0ZW1JZCA9IHJlc291cmNlSWRlbnRpZmllci5nZXRMaXRlcmFsU3lzdGVtSWQoKTsKLSAgICBpZiAocHVibGljSWQgPT0gbnVsbCB8fCBwdWJsaWNJZC5lcXVhbHMoIiIpKQotICAgIHsKLSAgICAgIHB1YmxpY0lkID0gcmVzb3VyY2VJZGVudGlmaWVyLmdldE5hbWVzcGFjZSgpOwotICAgIH0KLSAgICBJVVJJUmVzb2x1dGlvblJlc3VsdCByZXN1bHQgPSByZXNvbHZlKHJlc291cmNlSWRlbnRpZmllci5nZXRCYXNlU3lzdGVtSWQoKSwgcHVibGljSWQsIHN5c3RlbUlkKTsKLSAgICBYTUxJbnB1dFNvdXJjZSB4bWxJbnB1dFNvdXJjZSA9IG51bGw7Ci0gICAgaWYgKHJlc3VsdCAhPSBudWxsKQotICAgIHsKLSAgICAgIExhenlVUkxJbnB1dFN0cmVhbSBpcyA9IG5ldyBMYXp5VVJMSW5wdXRTdHJlYW0ocmVzdWx0LmdldFBoeXNpY2FsTG9jYXRpb24oKSk7Ci0gICAgICB4bWxJbnB1dFNvdXJjZSA9IG5ldyBYTUxJbnB1dFNvdXJjZShwdWJsaWNJZCwgcmVzdWx0LmdldExvZ2ljYWxMb2NhdGlvbigpLCByZXN1bHQuZ2V0TG9naWNhbExvY2F0aW9uKCksIGlzLCBudWxsKTsKLSAgICB9Ci0gICAgcmV0dXJuIHhtbElucHV0U291cmNlOwotICB9Ci0gIAotICAvKioKLSAgICogTm9ybWFsaXplIHRoZSBzeXN0ZW1JZC4gTWFrZSBpdCBhYnNvbHV0ZSB3aXRoIHJlc3BlY3QgdG8gdGhlCi0gICAqIGJhc2VMb2NhdGlvbiBpZiBuZWNlc3NhcnkuCi0gICAqIAotICAgKiBAcGFyYW0gYmFzZUxvY2F0aW9uIFRoZSBiYXNlIGxvY2F0aW9uIG9mIHRoZSBmaWxlLgotICAgKiBAcGFyYW0gc3lzdGVtSWQgVGhlIHN5c3RlbSBpZCBvZiB0aGUgZmlsZS4KLSAgICogQHJldHVybiBBIG5vcm1hbGl6ZWQgdmVyc2lvbiBvZiB0aGUgc3lzdGVtIGlkLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBub3JtYWxpemUoU3RyaW5nIGJhc2VMb2NhdGlvbiwgU3RyaW5nIHN5c3RlbUlkKQotICB7Ci0gIAlpZihzeXN0ZW1JZCA9PSBudWxsKQotICAJewotICAJICByZXR1cm4gc3lzdGVtSWQ7Ci0gIAl9Ci0gIAkvLyBUcnkgdG8gZmluZCBhIHNjaGVtZSBpbiB0aGUgc3lzdGVtSWQuCi0gIAlpbnQgc2NoZW1hTG9jID0gc3lzdGVtSWQuaW5kZXhPZignOicpOwotICAJaWYoc2NoZW1hTG9jICE9IC0xICYmIHN5c3RlbUlkLmNoYXJBdChzY2hlbWFMb2MrMSkgPT0gJy8nKQotICAJewotICAJICAvLyBBIHNjaGVtZSBoYXMgYmVlbiBmb3VuZC4gVGhlIHN5c3RlbUlkIGlzIGFuCi0gIAkgIC8vIGFic29sdXRlIGxvY2F0aW9uIHNvIHJldHVybiBpdC4KLSAgCSAgcmV0dXJuIHN5c3RlbUlkOwotICAJfQotICAJaWYoYmFzZUxvY2F0aW9uID09IG51bGwpCi0gIAl7Ci0gIAkgIHJldHVybiBiYXNlTG9jYXRpb247Ci0gIAl9Ci0gIAkKLSAgCVN0cmluZyByZXN1bHQgPSAiIjsKLSAgCQotICAJLy8gRW5zdXJlIGFsbCBzbGFzaGVzIGluIHRoZSBsb2NhdGlvbnMgYXJlIC8uCi0gIAliYXNlTG9jYXRpb24gPSBiYXNlTG9jYXRpb24ucmVwbGFjZSgnXFwnLCcvJyk7Ci0gIAlzeXN0ZW1JZCA9IHN5c3RlbUlkLnJlcGxhY2UoJ1xcJywnLycpOwotICAJCi0gIAkvLyBSZW1vdmUgdGhlIHRyYWlsaW5nIHNlY3Rpb24gb2YgdGhlIGJhc2VMb2NhdGlvbi4KLQlpbnQgbGFzdFNsYXNoID0gYmFzZUxvY2F0aW9uLmxhc3RJbmRleE9mKCcvJyk7Ci0gIAlTdHJpbmcgdGVtcHJlc3VsdCA9IGJhc2VMb2NhdGlvbi5zdWJzdHJpbmcoMCwgbGFzdFNsYXNoKzEpOwotICAJCi0gIAlpZihzeXN0ZW1JZC5zdGFydHNXaXRoKCIvIikpCi0gIAl7Ci0gIAkgIHN5c3RlbUlkID0gc3lzdGVtSWQuc3Vic3RyaW5nKDEpOwotICAJfQotICAJCi0gIAkvLyBKb2luIHRoZSBiYXNlIGxvY2F0aW9uIHdpdGggdGhlIHN5c3RlbWlkCi0gIAl0ZW1wcmVzdWx0ID0gdGVtcHJlc3VsdCArIHN5c3RlbUlkOwotICAJCi0gIAkvLyBXaGlsZSB0aGUgcmVsYXRpdmUgbG9jYXRpb24gc3RhcnRzIHdpdGggYSAuLi8gb3IgLi8gY2hhbmdlCi0gIAkvLyB0aGUgcmVzdWx0IGFuZCB0aGUgcmVsYXRpdmUgbG9jYXRpb24uCi0gIAlpbnQgbG9jOwotICAJd2hpbGUoKGxvYyA9IHRlbXByZXN1bHQubGFzdEluZGV4T2YoIi4vIikpICE9IC0xKQotICAJewotICAJICByZXN1bHQgPSB0ZW1wcmVzdWx0LnN1YnN0cmluZyhsb2MgKyAyKSArIHJlc3VsdDsKLSAgCSAgaWYodGVtcHJlc3VsdC5jaGFyQXQobG9jIC0gMSkgPT0gJy4nKQotICAJICB7Ci0gIAkgIAlpZih0ZW1wcmVzdWx0LmNoYXJBdChsb2MgLSAyKSA9PSAnLycpCi0gIAkgIAl7Ci0gIAkgIAkgIFN0cmluZyB0ZW1wID0gdGVtcHJlc3VsdC5zdWJzdHJpbmcoMCwgbG9jIC0gMik7Ci0gIAkgIAkgIGludCBsb2MyID0gdGVtcC5sYXN0SW5kZXhPZignLycpOwotICAJICAJICBpZihsb2MyID09IC0xKQotICAJICAJICB7Ci0gIAkgIAkgIAkvLyBJZiB0aGVyZSBpcyBubyBvdGhlciAvIGJlZm9yZSB0aGlzIHRoZSBVUkwgbXVzdCBzdGFydCB3aXRoIHNjaGVtZTovLi4vCi0gIAkgIAkgIAlyZXN1bHQgPSAiLi4vIiArIHJlc3VsdDsKLSAgCSAgCSAgCXRlbXByZXN1bHQgPSB0ZW1wcmVzdWx0LnN1YnN0cmluZygwLCBsb2MgLSAxKTsKLSAgCSAgCSAgfQotICAJICAJICBlbHNlCi0gIAkgIAkgIHsKLSAgCSAgCSAgCS8vIFJlbW92ZSB0aGUgc2VjdGlvbiB0aGF0IGNvbWVzIGJlZm9yZSB0aGlzIG9uZSBmcm9tIHRlbXByZXN1bHQgdW5sZXNzIGl0J3MgLi4vLgotICAJICAJICAgIHRlbXByZXN1bHQgPSB0ZW1wcmVzdWx0LnN1YnN0cmluZygwLCBsb2MgLSAxKTsKLSAgCSAgCSAgICBpbnQgbnVtU2VjdHNUb1JlbW92ZSA9IDE7Ci0gIAkgIAkgICAgCi0gIAkgIAkgICAgd2hpbGUodGVtcHJlc3VsdC5lbmRzV2l0aCgiLi8iKSkKLSAgCSAgCSAgICB7Ci0gIAkgIAkgICAgICBpbnQgdGVtcHJlc2xlbiA9IHRlbXByZXN1bHQubGVuZ3RoKCk7Ci0gIAkgIAkgICAgICBpZih0ZW1wcmVzbGVuID4gMiAmJiB0ZW1wcmVzdWx0LmNoYXJBdCh0ZW1wcmVzbGVuIC0zKSA9PSAnLicpCi0gIAkgIAkgICAgICB7Ci0gIAkgIAkgICAgICAJaWYodGVtcHJlc2xlbiA+IDMgJiYgdGVtcHJlc3VsdC5jaGFyQXQodGVtcHJlc2xlbiAtIDQpID09ICcvJykKLSAgCSAgCSAgICAgIAl7Ci0gIAkgIAkgICAgICAJICBudW1TZWN0c1RvUmVtb3ZlKys7Ci0gIAkgIAkgICAgICAJICB0ZW1wcmVzdWx0ID0gdGVtcHJlc3VsdC5zdWJzdHJpbmcoMCwgdGVtcHJlc3VsdC5sZW5ndGgoKSAtMyk7Ci0gIAkgIAkgICAgICAgIH0KLSAgCSAgCSAgICAgIAllbHNlCi0gIAkgIAkgICAgICAJewotICAJICAJICAgICAgCSAgYnJlYWs7Ci0gIAkgIAkgICAgICAJfQotICAJICAJICAgICAgfQotICAJICAJICAgICAgZWxzZQotICAJICAJICAgICAgewotICAJICAJICAgICAgCWlmKHRlbXByZXN1bHQuY2hhckF0KHRlbXByZXN1bHQubGVuZ3RoKCkgLTIpID09ICcvJykKLSAgCSAgCSAgICAgIAl7Ci0gIAkgIAkgICAgICAJICB0ZW1wcmVzdWx0ID0gdGVtcHJlc3VsdC5zdWJzdHJpbmcoMCwgdGVtcHJlc3VsdC5sZW5ndGgoKSAtMik7Ci0gIAkgIAkgICAgICAJfQotICAJICAJICAgICAgCWVsc2UKLSAgCSAgCSAgICAgIAl7Ci0gIAkgIAkgICAgICAJICBicmVhazsKLSAgCSAgCSAgICAgIAl9Ci0gIAkgIAkgICAgICB9Ci0gIAkgIAkgICAgfQotICAJICAJICAgIC8vIFJlbW92ZSB0aGUgc2VjdGlvbnMuCi0gIAkgIAkgICAgZm9yKGludCBpID0gMDsgaSA8IG51bVNlY3RzVG9SZW1vdmU7IGkrKykKLSAgCSAgCSAgICB7Ci0gIAkgIAkgICAgICBTdHJpbmcgdGVtcDIgPSB0ZW1wcmVzdWx0LnN1YnN0cmluZygwLHRlbXByZXN1bHQubGVuZ3RoKCktMSk7Ci0gIAkgIAkgICAgICBpbnQgbG9jMyA9IHRlbXAyLmxhc3RJbmRleE9mKCcvJyk7Ci0gIAkgIAkgICAgICBpZihsb2MzID09IC0xKQotICAJICAJICAgICAgewotICAJICAJICAgICAgCWJyZWFrOwotICAJICAJICAgICAgfQotICAJICAJICAgICAgdGVtcHJlc3VsdCA9IHRlbXByZXN1bHQuc3Vic3RyaW5nKDAsIGxvYzMrMSk7Ci0gIAkgIAkgICAgfQotICAJICAJICB9IAotICAJICAJfQotICAJICAJZWxzZQotICAJICAJewotICAJICAJICAvLyBUaGUgVVJJIGlzIG9mIHRoZSBmb3JtIGZpbGU6Ly9zb21lZGlyLi4vIHNvIGNvcHkgaXQgYXMgaXMKLSAgCSAgCSAgU3RyaW5nIHRlbXAgPSB0ZW1wcmVzdWx0LnN1YnN0cmluZygwLCBsb2MgLSAxKTsKLQkgIAkgIGludCBsb2MyID0gdGVtcC5sYXN0SW5kZXhPZignLycpOwotCSAgCSAgaWYobG9jMiA9PSAtMSkKLQkgIAkgIHsKLQkgIAkgIAkvLyBUaGUgVVJJIG11c3QgbG9vayBsaWtlIGZpbGU6Li4vIG9yIC4uLyBzbyBjb3B5IG92ZXIgdGhlIHdob2xlIHRlbXByZXN1bHQuCi0JICAJICAJcmVzdWx0ID0gdGVtcHJlc3VsdC5zdWJzdHJpbmcoMCxsb2MrMikgKyByZXN1bHQ7Ci0JICAJICAJdGVtcHJlc3VsdCA9ICIiOwotCSAgCSAgfQotCSAgCSAgZWxzZQotCSAgCSAgewotCSAgCSAgCS8vIENvcHkgb3ZlciB0aGUgd2hvbGUgc29tZWRpci4uLwotCSAgCSAgCXJlc3VsdCA9IHRlbXByZXN1bHQuc3Vic3RyaW5nKGxvYzIgKyAxLCB0ZW1wcmVzdWx0Lmxlbmd0aCgpKTsKLQkgIAkgICAgdGVtcHJlc3VsdCA9IHRlbXByZXN1bHQuc3Vic3RyaW5nKDAsIGxvYzIrMSk7Ci0JICAJICB9Ci0gIAkgIAl9Ci0gIAkgIH0KLSAgCSAgZWxzZQotICAJICB7Ci0gIAkgICAgaWYodGVtcHJlc3VsdC5jaGFyQXQobG9jIC0xICkgPT0gJy8nKQotCSAgCXsKLSAgCSAgCSAgLy8gUmVzdWx0IGlzIG9mIHRoZSBmb3JtIGZpbGU6Ly9zb21ldGhpbmcvLi9zb21ldGhpbmcgc28gcmVtb3ZlIHRoZSAuLwotICAJICAgICAgdGVtcHJlc3VsdCA9IHRlbXByZXN1bHQuc3Vic3RyaW5nKDAsbG9jKTsKLQkgIAl9Ci0gIAkgICAgZWxzZQotICAJICAgIHsKLSAgCSAgICAgIC8vIFJlc3VsdCBVUkkgaXMgb2YgZm9ybSBmaWxlOi8vc29tZWRpci4vIHNvIGNvcHkgb3ZlciB0aGUgd2hvbGUgc2VjdGlvbi4KLSAgICAJICBTdHJpbmcgdGVtcCA9IHRlbXByZXN1bHQuc3Vic3RyaW5nKDAsIGxvYyAtIDEpOwotICAJICAJICBpbnQgbG9jMiA9IHRlbXAubGFzdEluZGV4T2YoJy8nKTsKLSAgCSAgCSAgaWYobG9jMiA9PSAtMSkKLSAgCSAgCSAgewotICAJICAJICAJLy8gVGhlIFVSSSBtdXN0IGxvb2sgbGlrZSBmaWxlOi4vIG9yIC4vIHNvIGNvcHkgb3ZlciB0aGUgd2hvbGUgdGVtcHJlc3VsdC4KLSAgCSAgCSAgCXJlc3VsdCA9IHRlbXByZXN1bHQuc3Vic3RyaW5nKDAsIGxvYykgKyByZXN1bHQ7Ci0gIAkgIAkgIAl0ZW1wcmVzdWx0ID0gIiI7Ci0gIAkgIAkgIH0KLSAgCSAgCSAgZWxzZQotICAJICAJICB7Ci0gIAkgIAkgIAkvLyBDb3B5IG92ZXIgdGhlIHdob2xlIHNvbWVkaXIuLwotICAJICAJICAJcmVzdWx0ID0gdGVtcHJlc3VsdC5zdWJzdHJpbmcobG9jMiArIDEsIHRlbXByZXN1bHQubGVuZ3RoKCkpOwotICAJICAJICAgIHRlbXByZXN1bHQgPSB0ZW1wcmVzdWx0LnN1YnN0cmluZygwLCBsb2MyKzEpOwotICAJICAJICB9Ci0gIAkgICAgfQotICAJICB9Ci0gIAl9Ci0gIAlyZXN1bHQgPSB0ZW1wcmVzdWx0ICsgcmVzdWx0OwotICAJcmV0dXJuIHJlc3VsdDsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvcmVzb2x2ZXIvVVJJUmVzb2x2ZXJEZWxlZ2F0ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3Jlc29sdmVyL1VSSVJlc29sdmVyRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzMyNjZjNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvcmVzb2x2ZXIvVVJJUmVzb2x2ZXJEZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXI7Ci0KLQotLyoqCi0gKiBBIGRlbGVnYXRlIHRvIGhvbGQgaW5mb3JtYXRpb24gYWJvdXQgYW4gZXh0ZW5zaW9uIFVSSSByZXNvbHZlci4KLSAqLwotcHVibGljIGNsYXNzIFVSSVJlc29sdmVyRGVsZWdhdGUKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgY2xhc3NuYW1lOwotICBwcml2YXRlIENsYXNzTG9hZGVyIGNsYXNzbG9hZGVyOwotICBwcml2YXRlIElFeHRlbnNpYmxlVVJJUmVzb2x2ZXIgcmVzb2x2ZXIgPSBudWxsOwotICAKLSAgCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICogCi0gICAqIEBwYXJhbSBjbGFzc25hbWUgVGhlIGNsYXNzIG5hbWUgb2YgdGhlIFVSSSByZXNvbHZlci4KLSAgICogQHBhcmFtIGNsYXNzbG9hZGVyIFRoZSBjbGFzcyBsb2FkZXIgdG8gdXNlIHRvIGxvYWQgdGhlIFVSSSByZXNvbHZlci4KLSAgICovCi0gIHB1YmxpYyBVUklSZXNvbHZlckRlbGVnYXRlKFN0cmluZyBjbGFzc25hbWUsIENsYXNzTG9hZGVyIGNsYXNzbG9hZGVyKQotICB7Ci0gICAgdGhpcy5jbGFzc25hbWUgPSBjbGFzc25hbWU7Ci0gICAgdGhpcy5jbGFzc2xvYWRlciA9IGNsYXNzbG9hZGVyOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBVUkkgcmVzb2x2ZXIgZGVzY3JpYmVkIGJ5IHRoaXMgZGVsZWdhdGUuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBVUkkgcmVzb2x2ZXIgZGVzY3JpYmVkIGJ5IHRoaXMgZGVsZWdhdGUuCi0gICAqLwotICBwdWJsaWMgSUV4dGVuc2libGVVUklSZXNvbHZlciBnZXRVUklSZXNvbHZlcigpCi0gIHsKLSAgICBpZihyZXNvbHZlciA9PSBudWxsKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICByZXNvbHZlciA9IChJRXh0ZW5zaWJsZVVSSVJlc29sdmVyKWNsYXNzbG9hZGVyLmxvYWRDbGFzcyhjbGFzc25hbWUpLm5ld0luc3RhbmNlKCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICByZXNvbHZlciA9IChJRXh0ZW5zaWJsZVVSSVJlc29sdmVyKWdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKS5sb2FkQ2xhc3MoY2xhc3NuYW1lKS5uZXdJbnN0YW5jZSgpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoKEV4Y2VwdGlvbiBlMikKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXNvbHZlcjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL2FudC9BbnRMb2dnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS9hbnQvQW50TG9nZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4NGY3YzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL2FudC9BbnRMb2dnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51aS5hbnQ7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFudC5Qcm9qZWN0OwotaW1wb3J0IG9yZy5hcGFjaGUudG9vbHMuYW50LlRhc2s7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nLklMb2dnZXI7Ci0KLS8qKgotICogQSBsb2dnZXIgdGhhdCBsb2dzIHVzaW5nIEFudCdzIGxvZyBtZXRob2QuCi0gKi8KLXB1YmxpYyBjbGFzcyBBbnRMb2dnZXIgaW1wbGVtZW50cyBJTG9nZ2VyIAotewotICBwcml2YXRlIFRhc2sgdGFzayA9IG51bGw7Ci0JCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICogCi0gICAqIEBwYXJhbSBhbnRUYXNrCi0gICAqIAkJVGhlIEFudCB0YXNrIHRoaXMgbG9nZ2VyIHdpbGwgYWN0IGZvci4KLSAgICovCi0gIHB1YmxpYyBBbnRMb2dnZXIoVGFzayBhbnRUYXNrKQotICB7Ci0gICAgdGFzayA9IGFudFRhc2s7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuSUxvZ2dlciNsb2coamF2YS5sYW5nLlN0cmluZywgaW50KQotICAgKi8KLSAgcHVibGljIHZvaWQgbG9nKFN0cmluZyBtZXNzYWdlLCBpbnQgc2V2ZXJpdHkpIAotICB7Ci0gICAgaW50IG1zZ0xldmVsID0gUHJvamVjdC5NU0dfRVJSOwotICAgIGlmKHNldmVyaXR5ID09IElMb2dnZXIuU0VWX1dBUk5JTkcpCi0gICAgewotICAgICAgbXNnTGV2ZWwgPSBQcm9qZWN0Lk1TR19XQVJOOwotICAgIH0KLSAgICBlbHNlIGlmKHNldmVyaXR5ID09IElMb2dnZXIuU0VWX0lORk8pCi0gICAgewotICAgICAgbXNnTGV2ZWwgPSBQcm9qZWN0Lk1TR19JTkZPOwotICAgIH0KLSAgICBlbHNlIGlmKHNldmVyaXR5ID09IElMb2dnZXIuU0VWX1ZFUkJPU0UpCi0gICAgewotICAgICAgbXNnTGV2ZWwgPSBQcm9qZWN0Lk1TR19WRVJCT1NFOwotICAgIH0KLSAgICB0YXNrLmxvZyhtZXNzYWdlLCBtc2dMZXZlbCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nLklMb2dnZXIjbG9nKGphdmEubGFuZy5TdHJpbmcsIGludCwgamF2YS5sYW5nLlRocm93YWJsZSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGxvZyhTdHJpbmcgbWVzc2FnZSwgaW50IHNldmVyaXR5LCBUaHJvd2FibGUgdGhyb3dhYmxlKSAKLSAgewotCWxvZyhtZXNzYWdlLCBzZXZlcml0eSk7Ci0JbG9nKHRocm93YWJsZS50b1N0cmluZygpLCBzZXZlcml0eSk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL2FudC9FeHRlbnNpb25WYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS9hbnQvRXh0ZW5zaW9uVmFsaWRhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmNDk0NDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL2FudC9FeHRlbnNpb25WYWxpZGF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnVpLmFudDsKLQotLyoqCi0gKiBBbiBleHRlbnNpb24gQW50IFdTREwgdmFsaWRhdG9yLgotICovCi1wdWJsaWMgY2xhc3MgRXh0ZW5zaW9uVmFsaWRhdG9yCi17Ci0gIHByaXZhdGUgU3RyaW5nIGNsYXNzbmFtZSA9IG51bGw7Ci0gIHByaXZhdGUgU3RyaW5nIG5hbWVzcGFjZSA9IG51bGw7Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRDbGFzcyhTdHJpbmcgY2xhc3NuYW1lKQotICB7Ci0gICAgdGhpcy5jbGFzc25hbWUgPSBjbGFzc25hbWU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q2xhc3NOYW1lKCkKLSAgewotICAgIHJldHVybiB0aGlzLmNsYXNzbmFtZTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0TmFtZXNwYWNlKFN0cmluZyBuYW1lc3BhY2UpCi0gIHsKLSAgICB0aGlzLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTsKLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXROYW1lc3BhY2UoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMubmFtZXNwYWNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvYW50L1Byb3BlcnR5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvYW50L1Byb3BlcnR5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMDY1NDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL2FudC9Qcm9wZXJ0eS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnVpLmFudDsKLQotaW1wb3J0IG9yZy5hcGFjaGUudG9vbHMuYW50LlRhc2s7Ci0KLS8qKgotICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgcHJvcGVydHkgc2V0IG9uIHRoZSBXU0RMIHZhbGlkYXRvci4KLSAqLwotcHVibGljIGNsYXNzIFByb3BlcnR5IGV4dGVuZHMgVGFzayAKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgbmFtZSA9IG51bGw7Ci0gIHByaXZhdGUgU3RyaW5nIHZhbHVlID0gbnVsbDsKLSAgCi0gIC8qKgotICAgKiBTZXQgdGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5LgotICAgKiAKLSAgICogQHBhcmFtIG5hbWUKLSAgICogCQlUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKQotICB7Ci0gICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgfQotCSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5LgotICAgKiAKLSAgICogQHJldHVybgotICAgKiAJCVRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gbmFtZTsKLSAgfQotCSAgCi0gIC8qKgotICAgKiBTZXQgdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eS4KLSAgICogCi0gICAqIEBwYXJhbSB2YWx1ZQotICAgKiAJCVRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRWYWx1ZShTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICB0aGlzLnZhbHVlID0gdmFsdWU7Ci0gIH0KLQkgIAotICAvKioKLSAgICogR2V0IHRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkuCi0gICAqIAotICAgKiBAcmV0dXJuCi0gICAqIAkJVGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VmFsdWUoKQotICB7Ci0gICAgcmV0dXJuIHZhbHVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvYW50L1VSSVJlc29sdmVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvYW50L1VSSVJlc29sdmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhNDRhN2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL2FudC9VUklSZXNvbHZlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudWkuYW50OwotCi1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQuVGFzazsKLQotLyoqCi0gKiBUaGUgVVJJUmVzb2x2ZXIgdGFzayBhbGxvd3Mgc3BlY2lmeWluZyBhbiBleHRlbnNpb24gVVJJIHJlc29sdmVyIHdpdGgKLSAqIHRoZSBXU0RMVmFsaWRhdGUgQW50IHRhc2suCi0gKi8KLXB1YmxpYyBjbGFzcyBVUklSZXNvbHZlciBleHRlbmRzIFRhc2sKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgY2xhenogPSBudWxsOwotICAKLSAgLyoqCi0gICAqIFNldCB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uIFVSSSByZXNvbHZlci4KLSAgICogCi0gICAqIEBwYXJhbSBjbGF6eiBUaGUgY2xhc3MgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uIFVSSSByZXNvbHZlci4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldENsYXNzTmFtZShTdHJpbmcgY2xhenopCi0gIHsKLSAgICB0aGlzLmNsYXp6ID0gY2xheno7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiBVUkkgcmVzb2x2ZXIuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBjbGFzcyBuYW1lIG9mIHRoZSBleHRlbnNpb24gVVJJIHJlc29sdmVyLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRDbGFzc05hbWUoKQotICB7Ci0gICAgcmV0dXJuIGNsYXp6OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvYW50L1dTRExWYWxpZGF0ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL2FudC9XU0RMVmFsaWRhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjU0Zjc0NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvYW50L1dTRExWYWxpZGF0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDg5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnVpLmFudDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFudC5CdWlsZEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFudC5EaXJlY3RvcnlTY2FubmVyOwotaW1wb3J0IG9yZy5hcGFjaGUudG9vbHMuYW50LlByb2plY3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQuVGFzazsKLWltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFudC50eXBlcy5EVERMb2NhdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFudC50eXBlcy5GaWxlU2V0OwotaW1wb3J0IG9yZy5hcGFjaGUudG9vbHMuYW50LnR5cGVzLlBhdGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQudHlwZXMuWE1MQ2F0YWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLkNsYXNzbG9hZGVyV1NETFZhbGlkYXRvckRlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25SZXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5XU0RMVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5XU0RMVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwubG9nZ2luZy5Mb2dnZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXIuVVJJUmVzb2x2ZXJEZWxlZ2F0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnV0aWwuTWVzc2FnZUdlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5DbGFzc2xvYWRlcldTREwxMVZhbGlkYXRvckRlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLldTREwxMVZhbGlkYXRvckRlbGVnYXRlOwotCi0vKioKLSAqIEFuIEFudCB0YXNrIHRvIHJ1biBXU0RMIHZhbGlkYXRpb24gb24gYSBmaWxlIG9yIGEgc2V0IG9mIGZpbGVzLgotICogCi0gKiBPcHRpb25zCi0gKiAtIGZpbGUgLSB0aGUgZmlsZSB0byBydW4gdmFsaWRhdGlvbiBvbiAob3B0aW9uYWwgaWYgZmlsZXNldCBpcyB1c2VkKQotICogLSBmYWlsb25lcnJvciAtIGZhaWwgdGhlIGJ1aWxkIHByb2Nlc3Mgb24gdGhlIGZpcnN0IGZpbGUgd2l0aCBhbiBlcnJvcgotICogCi0gKiBTdXBwb3J0ZWQgTmVzdGVkIEVsZW1lbnRzCi0gKiAtIHhtbGNhdGFsb2cgLSBhbiB4bWwgY2F0YWxvZwotICogLSBkdGQgICAgICAgIC0gYSBkdGQgc3BlY2lmaWNhdGlvbiBhcyB3b3VsZCBhcHBlYXIgaW4gYW4geG1sY2F0YWxvZwotICogLSBzY2hlbWEgICAgIC0gYSBzY2hlbWEgc3BlY2lmaWNhdGlvbiBhcyB3b3VsZCBhcHBlYXIgaW4gYW4geG1sY2F0YWxvZwotICogLSBlbnRpdHkgICAgIC0gYW4gZW50aXR5IHNwZWNpZmljYXRpb24gYXMgd291bGQgYXBwZWFyIGluIGFuIHhtbGNhdGFsb2cKLSAqIC0gZmlsZXNldCAgICAtIGEgc2V0IG9mIGZpbGVzIHRvIHZhbGlkYXRlCi0gKiAtIHdzZGwxMXZhbGlkYXRvciAtIGFuIGV4dGVuc2lvbiBXU0RMIDEuMSB2YWxpZGF0b3IKLSAqIC0gdXJpcmVzb2x2ZXIgLSBhbiBleHRlbnNpb24gVVJJIHJlc29sdmVyCi0gKiAKLSAqLwotcHVibGljIGNsYXNzIFdTRExWYWxpZGF0ZSBleHRlbmRzIFRhc2sKLXsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBVSV9QUk9QRVJUSUVTID0gInZhbGlkYXRld3NkbHVpIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBWQUxJREFUT1JfUFJPUEVSVElFUyA9IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuQ29uc3RhbnRzLldTRExfVkFMSURBVE9SX1BST1BFUlRJRVNfRklMRTsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBfRVJST1JfTk9fRklMRV9TUEVDSUZJRUQgPSAiX0VSUk9SX05PX0ZJTEVfU1BFQ0lGSUVEIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBfVUlfSU5GT1JNQVRJT05fREVMSU1JVEVSID0gIl9VSV9JTkZPUk1BVElPTl9ERUxJTUlURVIiOwotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIF9VSV9BQ1RJT05fVkFMSURBVElOR19GSUxFID0gIl9VSV9BQ1RJT05fVkFMSURBVElOR19GSUxFIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBfVUlfRVJST1JfTUFSS0VSID0gIl9VSV9FUlJPUl9NQVJLRVIiOwotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIF9VSV9XQVJOSU5HX01BUktFUiA9ICJfVUlfV0FSTklOR19NQVJLRVIiOwotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIF9VSV9WQUxJRCA9ICJfVUlfVkFMSUQiOwotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIF9VSV9JTlZBTElEID0gIl9VSV9JTlZBTElEIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBfRVhDX1VOQUJMRV9UT19WQUxJREFURV9GSUxFID0gIl9FWENfVU5BQkxFX1RPX1ZBTElEQVRFX0ZJTEUiOwotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIF9FWENfV1NETF9GQUlMX09OX0VSUk9SID0gIl9FWENfV1NETF9GQUlMX09OX0VSUk9SIjsKLSAgCi0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgRklMRV9QUk9UT0NPTCA9ICJmaWxlOi8vLyI7Ci0KLSAgLy8gR2xvYmFsIFZhcnMKLSAgcHJvdGVjdGVkIExpc3QgZmlsZXNldHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIHByb3RlY3RlZCBTdHJpbmcgZmlsZSA9IG51bGw7Ci0gIHByb3RlY3RlZCBQYXRoIGNsYXNzcGF0aDsKLSAgcHJvdGVjdGVkIFN0cmluZyB4c2REaXJlY3RvcnkgPSBudWxsOwotICBwcm90ZWN0ZWQgYm9vbGVhbiBmYWlsT25FcnJvciA9IGZhbHNlOwotICBwcm90ZWN0ZWQgWE1MQ2F0YWxvZyBnbG9iYWxYTUxDYXRhbG9nID0gbmV3IFhNTENhdGFsb2coKTsKLSAgcHJvdGVjdGVkIExpc3Qgd3NkbDExdmFsaWRhdG9ycyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgcHJvdGVjdGVkIExpc3QgZXh0dmFsaWRhdG9ycyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgcHJvdGVjdGVkIExpc3QgZXh0VVJJUmVzb2x2ZXJzID0gbmV3IEFycmF5TGlzdCgpOwotICBwcm90ZWN0ZWQgTGlzdCBwcm9wZXJ0aWVzID0gbmV3IEFycmF5TGlzdCgpOwotCi0gIC8qKgotICAgKiBDb25zdHVjdG9yLgotICAgKi8KLSAgcHVibGljIFdTRExWYWxpZGF0ZSgpCi0gIHsKLQlMb2dnZXJGYWN0b3J5LmdldEluc3RhbmNlKCkuc2V0TG9nZ2VyKG5ldyBBbnRMb2dnZXIodGhpcykpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRlbGxzIHRoZSBXU0RMIHZhbGlkYXRlIHRhc2sgdG8gZmFpbCB0aGUgYnVpbGQgaWYgYW4gZXJyb3IgaXMgZW5jb3VudGVyZWQuCi0gICAqIAotICAgKiBAcGFyYW0gZmFpbE9uRXJyb3IgV2hldGhlciB0byBmYWlsIG9uIGVycm9yIG9yIG5vdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEZhaWxPbkVycm9yKGJvb2xlYW4gZmFpbE9uRXJyb3IpCi0gIHsKLSAgICB0aGlzLmZhaWxPbkVycm9yID0gZmFpbE9uRXJyb3I7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIGJhc2Ugc2NoZW1hIGZpbGVzIGZvciB0aGUgY2F0YWxvZyBhcmUgbG9jYXRlZC4KLSAgICogCi0gICAqIEBwYXJhbSBkaXIgLSB0aGUgZGlyZWN0b3J5IG9mIHRoZSBiYXNlIHNjaGVtYSBmaWxlcwotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U2NoZW1hRGlyKFN0cmluZyBkaXIpCi0gIHsKLSAgICB4c2REaXJlY3RvcnkgPSBkaXI7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IGEgZmlsZSB0byBydW4gV1NETCB2YWxpZGF0aW9uIG9uLgotICAgKiAKLSAgICogQHBhcmFtIGZpbGUgLSBhIGZpbGUgdG8gcnVuIHZhbGlkYXRpb24gb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEZpbGUoU3RyaW5nIGZpbGUpCi0gIHsKLSAgICB0aGlzLmZpbGUgPSBmaWxlOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhIHNldCBvZiBmaWxlcyB0byBydW4gV1NETCB2YWxpZGF0aW9uIG9uLgotICAgKiAKLSAgICogQHJldHVybiB0aGUgRmlsZVNldCBvZiBmaWxlcyB0byBydW4gV1NETCB2YWxpZGF0aW9uIG9uCi0gICAqLwotICBwdWJsaWMgRmlsZVNldCBjcmVhdGVGaWxlc2V0KCkKLSAgewotICAgIEZpbGVTZXQgZmlsZXNldCA9IG5ldyBGaWxlU2V0KCk7Ci0gICAgZmlsZXNldHMuYWRkKGZpbGVzZXQpOwotICAgIHJldHVybiBmaWxlc2V0OwotICB9Ci0KLSAgLyoqCi0gICAqIEFkZCBhbiBYTUwgY2F0YWxvZyB0byB0aGUgdmFsaWRhdG9yLgotICAgKiAKLSAgICogQHBhcmFtIGNhdGFsb2cgLSB0aGUgY2F0YWxvZyB0byBhZGQgdG8gdGhlIHZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkQ29uZmlndXJlZFhNTENhdGFsb2coWE1MQ2F0YWxvZyBjYXRhbG9nKQotICB7Ci0gICAgZ2xvYmFsWE1MQ2F0YWxvZy5hZGRDb25maWd1cmVkWE1MQ2F0YWxvZyhjYXRhbG9nKTsKLSAgfQotICAvKioKLSAgICogQWRkIGFuIGV4dGVuc2lvbiB2YWxpZGF0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gZXh0VmFsIFRoZSBleHRlbnNpb24gdmFsaWRhdG9yIHRvIGFkZC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZENvbmZpZ3VyZWRFeHRlbnNpb25WYWxpZGF0b3IoRXh0ZW5zaW9uVmFsaWRhdG9yIGV4dFZhbCkKLSAgewotICAgIGV4dHZhbGlkYXRvcnMuYWRkKGV4dFZhbCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBBZGQgYW4gZXh0ZW5zaW9uIFdTREwgMS4xIHZhbGlkYXRvci4KLSAgICogCi0gICAqIEBwYXJhbSBleHRWYWwgVGhlIGV4dGVuc2lvbiBXU0RMIDEuMSB2YWxpZGF0b3IgdG8gYWRkLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkQ29uZmlndXJlZFdTREwxMVZhbGlkYXRvcihFeHRlbnNpb25WYWxpZGF0b3IgZXh0VmFsKQotICB7Ci0gICAgd3NkbDExdmFsaWRhdG9ycy5hZGQoZXh0VmFsKTsKLSAgfQotCi0gIC8qKgotICAgKiBBbGxvdyBzcGVjaWZpY2F0aW9uIG9mIGFuIGVudGl0eSBvdXRzaWRlIG9mIGFuIFhNTENhdGFsb2cuCi0gICAqIAotICAgKiBAcmV0dXJuIGEgRFRETG9jYXRpb24gd2l0aCB0aGUgc3BlY2lmaWVkIGVudGl0eQotICAgKiovCi0gIHB1YmxpYyBEVERMb2NhdGlvbiBjcmVhdGVFbnRpdHkoKQotICB7Ci0gICAgRFRETG9jYXRpb24gZHRkTG9jID0gbmV3IERURExvY2F0aW9uKCk7Ci0gICAgZ2xvYmFsWE1MQ2F0YWxvZy5hZGRFbnRpdHkoZHRkTG9jKTsKLSAgICByZXR1cm4gZHRkTG9jOwotICB9Ci0KLSAgLyoqCi0gICAqIEFsbG93IHNwZWNpZmljYXRpb24gb2YgYSBEVEQgb3V0c2lkZSBvZiBhbiBYTUxDYXRhbG9nLgotICAgKiAKLSAgICogQHJldHVybiBhIERURExvY2F0aW9uIHdpdGggdGhlIHNwZWNpZmllZCBEVEQKLSAgICoqLwotICBwdWJsaWMgRFRETG9jYXRpb24gY3JlYXRlRFREKCkKLSAgewotICAgIERURExvY2F0aW9uIGR0ZExvYyA9IG5ldyBEVERMb2NhdGlvbigpOwotICAgIGdsb2JhbFhNTENhdGFsb2cuYWRkRW50aXR5KGR0ZExvYyk7Ci0gICAgcmV0dXJuIGR0ZExvYzsKLSAgfQotICAKLSAgLyoqCi0gICAqIENyZWF0ZSBhIFVSSVJlc29sdmVyIGV4dGVuc2lvbi4KLSAgICogCi0gICAqIEByZXR1cm4gQSBVUklSZXNvbHZlci4KLSAgICovCi0gIHB1YmxpYyBVUklSZXNvbHZlciBjcmVhdGVVUklSZXNvbHZlcigpCi0gIHsKLSAgICBVUklSZXNvbHZlciB1cmlyZXMgPSBuZXcgVVJJUmVzb2x2ZXIoKTsKLSAgICBleHRVUklSZXNvbHZlcnMuYWRkKHVyaXJlcy5nZXRDbGFzc05hbWUoKSk7Ci0gICAgcmV0dXJuIHVyaXJlczsKLSAgfQotICAKLSAgLyoqCi0gICAqIEFkZCBhIHByb3BlcnR5IHRvIHRoZSBXU0RMIHZhbGlkYXRvci4KLSAgICogCi0gICAqIEBwYXJhbSBwcm9wZXJ0eSAKLSAgICogCQlUaGUgcHJvcGVydHkgdG8gYWRkLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkQ29uZmlndXJlZFByb3BlcnR5KFByb3BlcnR5IHByb3BlcnR5KQotICB7Ci0gICAgcHJvcGVydGllcy5hZGQocHJvcGVydHkpOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBhIGxpc3Qgb2YgYWxsIHRoZSBmaWxlcyB0byBydW4gV1NETCB2YWxpZGF0aW9uIG9uLiBUYWtlcyB0aGUgZmlsZSBhbmQgZmlsZXNldAotICAgKiBhbmQgY3JlYXRlcyB0aGUgbGlzdC4KLSAgICogCi0gICAqIEByZXR1cm4gdGhlIGxpc3Qgb2YgZmlsZXMgdG8gYmUgdmFsaWRhdGVkCi0gICAqLwotICBwcm90ZWN0ZWQgTGlzdCBnZXRGaWxlTGlzdCgpCi0gIHsKLSAgICBMaXN0IGZpbGVzID0gbmV3IEFycmF5TGlzdCgpOwotCi0gICAgLy8gaWYgYSBzcGVjaWZpYyBmaWxlIHdhcyBzcGVjaWZpZWQgYWRkIGl0IHRvIHRoZSBsaXN0Ci0gICAgaWYgKGZpbGUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoZmlsZSk7Ci0gICAgICAgIGZpbGVzLmFkZCh1cmwudG9FeHRlcm5hbEZvcm0oKSk7Ci0gICAgICB9Ci0gICAgICBjYXRjaChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgRmlsZSB0aGVGaWxlID0gbmV3IEZpbGUoZmlsZSk7Ci0gICAgICAgIGlmKCF0aGVGaWxlLmlzQWJzb2x1dGUoKSkKLSAgICAgICAgewotICAgICAgICAgIHRoZUZpbGUgPSBuZXcgRmlsZShnZXRQcm9qZWN0KCkuZ2V0QmFzZURpcigpLCBmaWxlKTsKLSAgICAgICAgfQotICAgICAgICBTdHJpbmcgYWJzRmlsZSA9IHRoZUZpbGUudG9TdHJpbmcoKTsgCi0gICAgICAgIGlmKCFhYnNGaWxlLnN0YXJ0c1dpdGgoImZpbGU6IikpCi0gICAgICAgIHsKLSAgICAgICAgICBhYnNGaWxlID0gRklMRV9QUk9UT0NPTCArIGFic0ZpbGU7Ci0gICAgICAgIH0KLSAgICAgICAgYWJzRmlsZSA9IGFic0ZpbGUucmVwbGFjZSgnXFwnLCcvJyk7Ci0gICAgICAgIGZpbGVzLmFkZChhYnNGaWxlKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBnbyB0aHJvdWdoIGFsbCBmaWxlc2V0cyBzcGVjaWZpZWQgYW5kIGFkZCBhbGwgdGhlIGZpbGVzIHRvIHRoZSBsaXN0Ci0gICAgSXRlcmF0b3IgZnNJdGVyID0gZmlsZXNldHMuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoZnNJdGVyLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBGaWxlU2V0IGZpbGVzZXQgPSAoRmlsZVNldClmc0l0ZXIubmV4dCgpOwotICAgICAgRGlyZWN0b3J5U2Nhbm5lciBkcyA9IGZpbGVzZXQuZ2V0RGlyZWN0b3J5U2Nhbm5lcihmaWxlc2V0LmdldFByb2plY3QoKSk7Ci0gICAgICBTdHJpbmcgYmFzZWRpciA9IGRzLmdldEJhc2VkaXIoKS50b1N0cmluZygpICsgRmlsZS5zZXBhcmF0b3I7Ci0KLSAgICAgIFN0cmluZ1tdIGZpbGVsaXN0ID0gZHMuZ2V0SW5jbHVkZWRGaWxlcygpOwotICAgICAgaW50IG51bUZpbGVzID0gZmlsZWxpc3QubGVuZ3RoOwotICAgICAgaWYgKGZpbGVzICE9IG51bGwgJiYgbnVtRmlsZXMgPiAwKQotICAgICAgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUZpbGVzOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgYWJzRmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBiYXNlZGlyICsgZmlsZWxpc3RbaV07Ci0gICAgICAgICAgYWJzRmlsZSA9IGFic0ZpbGUucmVwbGFjZSgnXFwnLCcvJyk7Ci0gICAgICAgICAgZmlsZXMuYWRkKGFic0ZpbGUpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmaWxlczsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuYXBhY2hlLnRvb2xzLmFudC5UYXNrI2V4ZWN1dGUoKQotICAgKi8KLSAgcHVibGljIHZvaWQgZXhlY3V0ZSgpIHRocm93cyBCdWlsZEV4Y2VwdGlvbgotICB7Ci0gICAgLy8gdGhlIHJlc291cmNlIGJ1bmRsZXMgZm9yIHRoZSB1aSBhbmQgdmFsaWRhdG9yIGFyZSBuZWVkZWQKLSAgICBNZXNzYWdlR2VuZXJhdG9yIG1lc3NHZW4gPSBudWxsOwotICAgIHRyeQotICAgIHsKLSAgICAgIFJlc291cmNlQnVuZGxlIHVpUkIgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoVUlfUFJPUEVSVElFUyk7Ci0gICAgICBtZXNzR2VuID0gbmV3IE1lc3NhZ2VHZW5lcmF0b3IodWlSQik7Ci0gICAgfQotICAgIGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBpZiB0aGUgcmVzb3VyY2UgYnVuZGxlcyBjYW4ndCBiZSBvcGVuZWQgd2UgY2FuJ3QgcmVwb3J0IGVycm9yIHNvIHRocm93IGFuIGV4Y2VwdGlvbgotICAgICAgdGhyb3cgbmV3IEJ1aWxkRXhjZXB0aW9uKCJVbmFibGUgdG8gb3BlbiByZXNvdXJjZSBidW5kbGUuICIgKyBlKTsKLSAgICB9Ci0KLSAgICAvLyBTZXQgdGhlIFhNTCBjYXRhbG9nLgotICAgIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sLlhNTENhdGFsb2cuc2V0RXh0ZW5zaW9uWE1MQ2F0YWxvZyhYTUxDYXRhbG9nSW1wbC5jbGFzcy5nZXROYW1lKCksIGdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKSk7Ci0gICAgWE1MQ2F0YWxvZ0ltcGwgeG1sQ2F0YWxvZyA9IChYTUxDYXRhbG9nSW1wbClvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbC5YTUxDYXRhbG9nLmdldEV4dGVuc2lvbkNhdGFsb2dJbnN0YW5jZSgpOwotICAgIHhtbENhdGFsb2cuYWRkWE1MQ2F0YWxvZyhnbG9iYWxYTUxDYXRhbG9nKTsKLSAgICAKLSAgICBXU0RMVmFsaWRhdG9yIHdzZGxWYWxpZGF0b3IgPSBuZXcgV1NETFZhbGlkYXRvcigpOwotICAgIAotICAgIFdTRExWYWxpZGF0aW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gbmV3IFdTRExWYWxpZGF0aW9uQ29uZmlndXJhdGlvbigpOwotICAgIC8vIFNldCB0aGUgcHJvcGVydGllcy4KLSAgICBJdGVyYXRvciBwcm9wZXJ0eUl0ZXIgPSBwcm9wZXJ0aWVzLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUocHJvcGVydHlJdGVyLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBQcm9wZXJ0eSBwcm9wZXJ0eSA9IChQcm9wZXJ0eSlwcm9wZXJ0eUl0ZXIubmV4dCgpOwotICAgICAgY29uZmlndXJhdGlvbi5zZXRQcm9wZXJ0eShwcm9wZXJ0eS5nZXROYW1lKCksIHByb3BlcnR5LmdldFZhbHVlKCkpOwotICAgIH0KLSAgICAJCi0gICAgLy8gU2V0IHRoZSBleHRlbnNpb24gVVJJUmVzb2x2ZXJzLgotICAgIEl0ZXJhdG9yIHJlc29sdmVyc0l0ZXIgPSBleHRVUklSZXNvbHZlcnMuaXRlcmF0b3IoKTsKLSAgICB3aGlsZShyZXNvbHZlcnNJdGVyLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBTdHJpbmcgcmVzb2x2ZXJDbGFzcyA9IChTdHJpbmcpcmVzb2x2ZXJzSXRlci5uZXh0KCk7Ci0gICAgICB3c2RsVmFsaWRhdG9yLmFkZFVSSVJlc29sdmVyKG5ldyBVUklSZXNvbHZlckRlbGVnYXRlKHJlc29sdmVyQ2xhc3MsIGdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKSkuZ2V0VVJJUmVzb2x2ZXIoKSk7Ci0gICAgfQotICAgIAotICAgIC8vIEdldCB0aGUgbGlzdCBvZiBmaWxlcyB0byB2YWxpZGF0ZS4KLSAgICBMaXN0IGZpbGVzID0gZ2V0RmlsZUxpc3QoKTsKLSAgICAKLSAgICAvLyBSZWdpc3RlciB0aGUgV1NETCAxLjEgZXh0ZW5zaW9uIHZhbGlkYXRvcnMuCi0gICAgSXRlcmF0b3Igd3NkbDExZXh0SXRlciA9IHdzZGwxMXZhbGlkYXRvcnMuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSh3c2RsMTFleHRJdGVyLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBFeHRlbnNpb25WYWxpZGF0b3IgZXh0VmFsID0gKEV4dGVuc2lvblZhbGlkYXRvcil3c2RsMTFleHRJdGVyLm5leHQoKTsKLSAgICAgIFdTREwxMVZhbGlkYXRvckRlbGVnYXRlIGRlbGVnYXRlID0gbmV3IENsYXNzbG9hZGVyV1NETDExVmFsaWRhdG9yRGVsZWdhdGUoZXh0VmFsLmdldENsYXNzTmFtZSgpKTsKLSAgICAgIHdzZGxWYWxpZGF0b3IucmVnaXN0ZXJXU0RMMTFWYWxpZGF0b3IoZXh0VmFsLmdldE5hbWVzcGFjZSgpLCBkZWxlZ2F0ZSk7Ci0gICAgfQotICAgIAotICAgIC8vIFJlZ2lzdGVyIHRoZSBleHRlbnNpb24gdmFsaWRhdG9ycy4KLSAgICBJdGVyYXRvciBleHRJdGVyID0gZXh0dmFsaWRhdG9ycy5pdGVyYXRvcigpOwotICAgIHdoaWxlKGV4dEl0ZXIuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIEV4dGVuc2lvblZhbGlkYXRvciBleHRWYWwgPSAoRXh0ZW5zaW9uVmFsaWRhdG9yKWV4dEl0ZXIubmV4dCgpOwotICAgICAgQ2xhc3Nsb2FkZXJXU0RMVmFsaWRhdG9yRGVsZWdhdGUgZGVsZWdhdGUgPSBuZXcgQ2xhc3Nsb2FkZXJXU0RMVmFsaWRhdG9yRGVsZWdhdGUoZXh0VmFsLmdldENsYXNzTmFtZSgpKTsKLSAgICAgIHdzZGxWYWxpZGF0b3IucmVnaXN0ZXJXU0RMRXh0ZW5zaW9uVmFsaWRhdG9yKGV4dFZhbC5nZXROYW1lc3BhY2UoKSwgZGVsZWdhdGUpOwotICAgIH0KLQotICAgIC8vIFRoZSB1c2VyIGRpZG4ndCBzcGVjaWZ5IGFueSBmaWxlcyB0byB2YWxpZGF0ZS4KLSAgICBpZiAoZmlsZXMgPT0gbnVsbCB8fCBmaWxlcy5pc0VtcHR5KCkpCi0gICAgewotICAgICAgbG9nKG1lc3NHZW4uZ2V0U3RyaW5nKF9FUlJPUl9OT19GSUxFX1NQRUNJRklFRCksIFByb2plY3QuTVNHX0VSUik7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHhzZERpcmVjdG9yeSAhPSBudWxsKQotICAgIHsKLSAgICAgIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sLlhNTENhdGFsb2cuYWRkU2NoZW1hRGlyKHhzZERpcmVjdG9yeSk7Ci0gICAgfQotCi0gICAgLy8gVmFsaWRhdGUgYWxsIHRoZSBmaWxlcyBzcGVjaWZpZWQuCi0gICAgSXRlcmF0b3IgaUZpbGVzID0gZmlsZXMuaXRlcmF0b3IoKTsKLQotICAgIC8vIENvbW1vbiBzdHJpbmdzIG5lZWRlZCBpbiB2YWxpZGF0aW9uIG91dHB1dC4KLSAgICBTdHJpbmcgaW5mb0RlbGltID0gbWVzc0dlbi5nZXRTdHJpbmcoX1VJX0lORk9STUFUSU9OX0RFTElNSVRFUik7Ci0gICAgU3RyaW5nIHZhbGlkID0gbWVzc0dlbi5nZXRTdHJpbmcoX1VJX1ZBTElEKTsKLSAgICBTdHJpbmcgaW52YWxpZCA9IG1lc3NHZW4uZ2V0U3RyaW5nKF9VSV9JTlZBTElEKTsKLSAgICBTdHJpbmcgZXJyb3JtYXJrZXIgPSBtZXNzR2VuLmdldFN0cmluZyhfVUlfRVJST1JfTUFSS0VSKTsKLSAgICBTdHJpbmcgd2FybmluZ21hcmtlciA9IG1lc3NHZW4uZ2V0U3RyaW5nKF9VSV9XQVJOSU5HX01BUktFUik7Ci0KLSAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbnVsbDsKLSAgICBib29sZWFuIG5vdHZhbGlkID0gdHJ1ZTsKLSAgICB3aGlsZSAoaUZpbGVzLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICBub3R2YWxpZCA9IGZhbHNlOwotICAgICAgU3RyaW5nIGZpbGVuYW1lID0gKFN0cmluZylpRmlsZXMubmV4dCgpOwotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoaW5mb0RlbGltKS5hcHBlbmQoIlxuIik7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQobWVzc0dlbi5nZXRTdHJpbmcoX1VJX0FDVElPTl9WQUxJREFUSU5HX0ZJTEUsIGZpbGVuYW1lKSkuYXBwZW5kKCIgLSAiKTsKLQotICAgICAgICBJVmFsaWRhdGlvblJlcG9ydCB2YWxSZXBvcnQgPSB3c2RsVmFsaWRhdG9yLnZhbGlkYXRlKGZpbGVuYW1lLCBudWxsLCBjb25maWd1cmF0aW9uKTsKLQotICAgICAgICBJVmFsaWRhdGlvbk1lc3NhZ2VbXSBtZXNzYWdlcyA9IHZhbFJlcG9ydC5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKTsKLQotICAgICAgICBpZiAoIXZhbFJlcG9ydC5oYXNFcnJvcnMoKSkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdC5hcHBlbmQodmFsaWQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdC5hcHBlbmQoaW52YWxpZCk7Ci0gICAgICAgICAgbm90dmFsaWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoIlxuIikuYXBwZW5kKGluZm9EZWxpbSkuYXBwZW5kKCJcbiIpOwotCi0gICAgICAgIHJlc3VsdC5hcHBlbmQocmVwb3J0TWVzc2FnZXMobWVzc2FnZXMsIGVycm9ybWFya2VyLCB3YXJuaW5nbWFya2VyKSk7Ci0KLSAgICAgICAgaWYobm90dmFsaWQpCi0gICAgICAgIHsKLSAgICAgICAgICBsb2cocmVzdWx0LnRvU3RyaW5nKCksIFByb2plY3QuTVNHX0VSUik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgbG9nKHJlc3VsdC50b1N0cmluZygpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICBsb2cobWVzc0dlbi5nZXRTdHJpbmcoX0VYQ19VTkFCTEVfVE9fVkFMSURBVEVfRklMRSwgZmlsZW5hbWUsIGUpLCBQcm9qZWN0Lk1TR19FUlIpOwotICAgICAgfQotICAgICAgZmluYWxseQotICAgICAgewotICAgICAgICBpZiAobm90dmFsaWQgJiYgZmFpbE9uRXJyb3IpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBUbyBmYWlsIG9uIGVycm9yLCB0aHJvdyBhIGJ1aWxkIGV4Y2VwdGlvbi4KLSAgICAgICAgICB0aHJvdyBuZXcgQnVpbGRFeGNlcHRpb24obWVzc0dlbi5nZXRTdHJpbmcoX0VYQ19XU0RMX0ZBSUxfT05fRVJST1IpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sLlhNTENhdGFsb2cucmVzZXQoKTsKLQotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybiBhIHN0cmluZyB3aXRoIGZvcm1hdHRlZCBvdXRwdXQgZm9yIHRoZSBtZXNzYWdlcy4KLSAgICogCi0gICAqIEBwYXJhbSBtZXNzYWdlcyBUaGUgbWVzc2FnZXMgdG8gcmVwb3J0LgotICAgKiBAcGFyYW0gZXJyb3JtYXJrZXIgVGhlIG1hcmtlciB0byB1c2UgZm9yIGVycm9yIG1lc3NhZ2VzLgotICAgKiBAcGFyYW0gd2FybmluZ21hcmtlciBUaGUgbWFya2VyIHRvIHVzZSBmb3Igd2FybmluZyBtZXNzYWdlcy4KLSAgICogQHJldHVybiBBIHN0cmluZyB3aXRoIHRoZSBmb3JtYXR0ZWQgb3V0cHV0LgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyByZXBvcnRNZXNzYWdlcyhJVmFsaWRhdGlvbk1lc3NhZ2VbXSBtZXNzYWdlcywgU3RyaW5nIGVycm9ybWFya2VyLCBTdHJpbmcgd2FybmluZ21hcmtlcikKLSAgewotICAgIFN0cmluZ0J1ZmZlciByZXR1cm5CdWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0KLSAgICBpZiAobWVzc2FnZXMgPT0gbnVsbCkKLSAgICAgIHJldHVybiByZXR1cm5CdWZmZXIudG9TdHJpbmcoKTsKLQotICAgIFN0cmluZyBwcmVmaXggPSBudWxsOwotICAgIGludCBudW1NZXNzYWdlcyA9IG1lc3NhZ2VzLmxlbmd0aDsKLSAgICBmb3IoaW50IGkgPSAwOyBpIDwgbnVtTWVzc2FnZXM7IGkrKykKLSAgICB7Ci0gICAgICBJVmFsaWRhdGlvbk1lc3NhZ2UgbWVzc2FnZSA9IG1lc3NhZ2VzW2ldOwotCi0gICAgICBpZihtZXNzYWdlLmdldFNldmVyaXR5KCkgPT0gSVZhbGlkYXRpb25NZXNzYWdlLlNFVl9FUlJPUikKLSAgICAgICB7Ci0gICAgICAgIHByZWZpeCA9IGVycm9ybWFya2VyOwotICAgICAgfQotICAgICAgZWxzZSBpZihtZXNzYWdlLmdldFNldmVyaXR5KCkgPT0gSVZhbGlkYXRpb25NZXNzYWdlLlNFVl9XQVJOSU5HKQotICAgICAgIHsKLSAgICAgICAgcHJlZml4ID0gd2FybmluZ21hcmtlcjsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICB7Ci0gICAgICAgIHByZWZpeCA9ICIiOwotICAgICAgfWlmKG1lc3NhZ2UuZ2V0U2V2ZXJpdHkoKSA9PSBJVmFsaWRhdGlvbk1lc3NhZ2UuU0VWX0VSUk9SKQotICAgICAgIHsKLSAgICAgICAgcHJlZml4ID0gZXJyb3JtYXJrZXI7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmKG1lc3NhZ2UuZ2V0U2V2ZXJpdHkoKSA9PSBJVmFsaWRhdGlvbk1lc3NhZ2UuU0VWX1dBUk5JTkcpCi0gICAgICAgewotICAgICAgICBwcmVmaXggPSB3YXJuaW5nbWFya2VyOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgIHsKLSAgICAgICAgcHJlZml4ID0gIiI7Ci0gICAgICB9aWYobWVzc2FnZS5nZXRTZXZlcml0eSgpID09IElWYWxpZGF0aW9uTWVzc2FnZS5TRVZfRVJST1IpCi0gICAgICAgewotICAgICAgICBwcmVmaXggPSBlcnJvcm1hcmtlcjsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYobWVzc2FnZS5nZXRTZXZlcml0eSgpID09IElWYWxpZGF0aW9uTWVzc2FnZS5TRVZfV0FSTklORykKLSAgICAgICB7Ci0gICAgICAgIHByZWZpeCA9IHdhcm5pbmdtYXJrZXI7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgewotICAgICAgICBwcmVmaXggPSAiIjsKLSAgICAgIH1pZihtZXNzYWdlLmdldFNldmVyaXR5KCkgPT0gSVZhbGlkYXRpb25NZXNzYWdlLlNFVl9FUlJPUikKLSAgICAgICB7Ci0gICAgICAgIHByZWZpeCA9IGVycm9ybWFya2VyOwotICAgICAgfQotICAgICAgZWxzZSBpZihtZXNzYWdlLmdldFNldmVyaXR5KCkgPT0gSVZhbGlkYXRpb25NZXNzYWdlLlNFVl9XQVJOSU5HKQotICAgICAgIHsKLSAgICAgICAgcHJlZml4ID0gd2FybmluZ21hcmtlcjsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICB7Ci0gICAgICAgIHByZWZpeCA9ICIiOwotICAgICAgfQotICAgICAgcmV0dXJuQnVmZmVyCi0gICAgICAgIC5hcHBlbmQocHJlZml4KQotICAgICAgICAuYXBwZW5kKCIgIikKLSAgICAgICAgLmFwcGVuZChtZXNzYWdlLmdldExpbmUoKSkKLSAgICAgICAgLmFwcGVuZCgiOiIpCi0gICAgICAgIC5hcHBlbmQobWVzc2FnZS5nZXRDb2x1bW4oKSkKLSAgICAgICAgLmFwcGVuZCgiOiIpCi0gICAgICAgIC5hcHBlbmQobWVzc2FnZS5nZXRNZXNzYWdlKCkpCi0gICAgICAgIC5hcHBlbmQoIlxuIik7Ci0gICAgfQotICAgIHJldHVybiByZXR1cm5CdWZmZXIudG9TdHJpbmcoKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS9hbnQvWE1MQ2F0YWxvZ0ltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS9hbnQvWE1MQ2F0YWxvZ0ltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWZjYmRlNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvYW50L1hNTENhdGFsb2dJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51aS5hbnQ7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFudC50eXBlcy5EVERMb2NhdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFudC50eXBlcy5YTUxDYXRhbG9nOwotaW1wb3J0IG9yZy54bWwuc2F4LklucHV0U291cmNlOwotCi0vKioKLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBXU0RMIFZhbGlkYXRvcidzIFhNTCBDYXRhbG9nIHRoYXQgdXNlcyB0aGUgWE1MIENhdGFsb2cKLSAqIGZyb20gYW50LgotICovCi1wdWJsaWMgY2xhc3MgWE1MQ2F0YWxvZ0ltcGwgZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbC5YTUxDYXRhbG9nCi17Ci0gIHByb3RlY3RlZCBYTUxDYXRhbG9nIHhtbENhdGFsb2cgPSBuZXcgWE1MQ2F0YWxvZygpOwotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sLlhNTENhdGFsb2cjYWRkRW50cnlUb0NhdGFsb2coamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEVudHJ5VG9DYXRhbG9nKFN0cmluZyBwdWJsaWNJZCwgU3RyaW5nIHN5c3RlbUlkKQotICB7Ci0gICAgRFRETG9jYXRpb24gcmVzTG9jID0gbmV3IERURExvY2F0aW9uKCk7Ci0gICAgcmVzTG9jLnNldExvY2F0aW9uKHN5c3RlbUlkKTsKLSAgICByZXNMb2Muc2V0UHVibGljSWQocHVibGljSWQpOwotICAgIHhtbENhdGFsb2cuYWRkRW50aXR5KHJlc0xvYyk7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbC5YTUxDYXRhbG9nI3Jlc29sdmVFbnRpdHlMb2NhdGlvbihqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyByZXNvbHZlRW50aXR5TG9jYXRpb24oU3RyaW5nIHB1YmxpY0lkLCBTdHJpbmcgc3lzdGVtSWQpCi0gIHsKLSAgICBTdHJpbmcgcmVzb2x2ZWRJZCA9IG51bGw7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBJbnB1dFNvdXJjZSBpcyA9IHhtbENhdGFsb2cucmVzb2x2ZUVudGl0eShwdWJsaWNJZCwgc3lzdGVtSWQpOwotICAgICAgaWYgKGlzICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHJlc29sdmVkSWQgPSBpcy5nZXRTeXN0ZW1JZCgpOwotICAgICAgfQotICAgIH0KLSAgICAvLyAKLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gRG8gbm90aGluZyBpZiB0aGUgcmVzb3VyY2UgY2FuJ3QgYmUgcmVzb2x2ZWQuCi0gICAgfQotICAgIC8vIG5lZWRzIHRvIHJldHVybiBudWxsIGlmIGl0IGNhbid0IHJlc29sdmUgdGhlIGlkCi0gICAgaWYgKHJlc29sdmVkSWQgIT0gbnVsbCAmJiByZXNvbHZlZElkLmVxdWFscygiIikpCi0gICAgewotICAgICAgcmVzb2x2ZWRJZCA9IG51bGw7Ci0gICAgfQotICAgIHJldHVybiByZXNvbHZlZElkOwotICB9Ci0KLSAgLyoqCi0gICAqIEFkZCBhIGNvbmZpZ3VyZWQgWE1MIENhdGFsb2cgdG8gdGhpcyBjYXRhbG9nLgotICAgKiAKLSAgICogQHBhcmFtIGNhdGFsb2cgQSBjb25maWd1cmVkIFhNTCBjYXRhbG9nIHRvIGFkZCB0byB0aGlzIGNhdGFsb2cuCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRYTUxDYXRhbG9nKFhNTENhdGFsb2cgY2F0YWxvZykKLSAgewotICAgIHhtbENhdGFsb2cuYWRkQ29uZmlndXJlZFhNTENhdGFsb2coY2F0YWxvZyk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL3RleHQvTG9nNGpMb2dnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS90ZXh0L0xvZzRqTG9nZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4YTIyNGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL3RleHQvTG9nNGpMb2dnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudWkudGV4dDsKLQotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25UYXJnZXRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nLklMb2dnZXI7Ci0KLS8qKgotICogQSBjdXN0b20gV1NETCB2YWxpZGF0b3IgbG9nZ2VyIHRoYXQgcGFzc2VzIGxvZ2dpbmcgZXZlbnRzIHRvIGxvZzRqLgotICovCi1wdWJsaWMgY2xhc3MgTG9nNGpMb2dnZXIgaW1wbGVtZW50cyBJTG9nZ2VyIAotewotICAvLyBUaGlzIGNsYXNzIGlzIGltcGxlbWVudGVkIHVzaW5nIHJlZmxlY3Rpb24gdG8gYXZvaWQgYSBjb21pbGF0aW9uIGRlcGVuZGVuY3kKLSAgLy8gb24gbG9nNGouCi0gIHByb3RlY3RlZCBPYmplY3QgbG9nZ2VyID0gbnVsbDsKLSAgcHJvdGVjdGVkIE1ldGhvZCBlcnJvcjEgPSBudWxsOwotICBwcm90ZWN0ZWQgTWV0aG9kIHdhcm4xID0gbnVsbDsKLSAgcHJvdGVjdGVkIE1ldGhvZCBpbmZvMSA9IG51bGw7Ci0gIHByb3RlY3RlZCBNZXRob2QgZGVidWcxID0gbnVsbDsKLSAgcHJvdGVjdGVkIE1ldGhvZCBlcnJvcjIgPSBudWxsOwotICBwcm90ZWN0ZWQgTWV0aG9kIHdhcm4yID0gbnVsbDsKLSAgcHJvdGVjdGVkIE1ldGhvZCBpbmZvMiA9IG51bGw7Ci0gIHByb3RlY3RlZCBNZXRob2QgZGVidWcyID0gbnVsbDsKLSAgCi0gIHB1YmxpYyBMb2c0akxvZ2dlcigpCi0gIHsKLQl0cnkKLSAgICB7Ci0JICBDbGFzcyBsb2dnZXJDbGFzcyA9IGdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKS5sb2FkQ2xhc3MoIm9yZy5hcGFjaGUubG9nNGouTG9nZ2VyIik7Ci0JICBDbGFzcyBjYXRlZ29yeUNsYXNzID0gZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpLmxvYWRDbGFzcygib3JnLmFwYWNoZS5sb2c0ai5DYXRlZ29yeSIpOwotCSAgTWV0aG9kIGdldExvZ2dlciA9IGxvZ2dlckNsYXNzLmdldERlY2xhcmVkTWV0aG9kKCJnZXRMb2dnZXIiICwgbmV3IENsYXNzW117Q2xhc3MuY2xhc3N9KTsKLQkgIGxvZ2dlciA9IGdldExvZ2dlci5pbnZva2UobG9nZ2VyQ2xhc3MsIG5ldyBPYmplY3RbXXtXU0RMVmFsaWRhdGUuY2xhc3N9KTsKLQkgIGVycm9yMSA9IGNhdGVnb3J5Q2xhc3MuZ2V0RGVjbGFyZWRNZXRob2QoImVycm9yIiAsIG5ldyBDbGFzc1tde09iamVjdC5jbGFzc30pOwotCSAgd2FybjEgPSBjYXRlZ29yeUNsYXNzLmdldERlY2xhcmVkTWV0aG9kKCJ3YXJuIiAsIG5ldyBDbGFzc1tde09iamVjdC5jbGFzc30pOwotCSAgaW5mbzEgPSBjYXRlZ29yeUNsYXNzLmdldERlY2xhcmVkTWV0aG9kKCJpbmZvIiAsIG5ldyBDbGFzc1tde09iamVjdC5jbGFzc30pOwotCSAgZGVidWcxID0gY2F0ZWdvcnlDbGFzcy5nZXREZWNsYXJlZE1ldGhvZCgiZGVidWciICwgbmV3IENsYXNzW117T2JqZWN0LmNsYXNzfSk7Ci0JICBlcnJvcjIgPSBjYXRlZ29yeUNsYXNzLmdldERlY2xhcmVkTWV0aG9kKCJlcnJvciIgLCBuZXcgQ2xhc3NbXXtPYmplY3QuY2xhc3MsIFRocm93YWJsZS5jbGFzc30pOwotCSAgd2FybjIgPSBjYXRlZ29yeUNsYXNzLmdldERlY2xhcmVkTWV0aG9kKCJ3YXJuIiAsIG5ldyBDbGFzc1tde09iamVjdC5jbGFzcywgVGhyb3dhYmxlLmNsYXNzfSk7Ci0JICBpbmZvMiA9IGNhdGVnb3J5Q2xhc3MuZ2V0RGVjbGFyZWRNZXRob2QoImluZm8iICwgbmV3IENsYXNzW117T2JqZWN0LmNsYXNzLCBUaHJvd2FibGUuY2xhc3N9KTsKLQkgIGRlYnVnMiA9IGNhdGVnb3J5Q2xhc3MuZ2V0RGVjbGFyZWRNZXRob2QoImRlYnVnIiAsIG5ldyBDbGFzc1tde09iamVjdC5jbGFzcywgVGhyb3dhYmxlLmNsYXNzfSk7Ci0JfQotCWNhdGNoKENsYXNzTm90Rm91bmRFeGNlcHRpb24gZSkKLQl7Ci0JICBTeXN0ZW0uZXJyLnByaW50bG4oIlVuYWJsZSB0byBjcmVhdGUgTG9nNGogTG9nZ2VyLiBFbnN1cmUgTG9nNEogaXMgb24gdGhlIGNsYXNzcGF0aC4iKTsgCi0JfQotCWNhdGNoKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBlKQotCXsKLQkJCi0JfQotCWNhdGNoKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSkKLQl7Ci0JCQotCX0KLQljYXRjaChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGUpCi0JewotCQkKLQl9Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuSUxvZ2dlciNsb2coamF2YS5sYW5nLlN0cmluZywgaW50KQotICAgKi8KLSAgcHVibGljIHZvaWQgbG9nKFN0cmluZyBtZXNzYWdlLCBpbnQgc2V2ZXJpdHkpIAotICB7Ci0JaWYobG9nZ2VyICE9IG51bGwpCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGlmKHNldmVyaXR5ID09IElMb2dnZXIuU0VWX0VSUk9SKQotICAgICAgICB7Ci0gICAgICAgICAgZXJyb3IxLmludm9rZShsb2dnZXIsIG5ldyBPYmplY3RbXXttZXNzYWdlfSk7Ci0JCX0KLSAgICAgICAgZWxzZSBpZihzZXZlcml0eSA9PSBJTG9nZ2VyLlNFVl9XQVJOSU5HKQotICAgICAgICB7Ci0gICAgICAgICAgd2FybjEuaW52b2tlKGxvZ2dlciwgbmV3IE9iamVjdFtde21lc3NhZ2V9KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmKHNldmVyaXR5ID09IElMb2dnZXIuU0VWX0lORk8pCi0gICAgICAgIHsKLSAgICAgICAgICBpbmZvMS5pbnZva2UobG9nZ2VyLCBuZXcgT2JqZWN0W117bWVzc2FnZX0pOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYoc2V2ZXJpdHkgPT0gSUxvZ2dlci5TRVZfVkVSQk9TRSkKLSAgICAgICAgewotICAgICAgICAgIGRlYnVnMS5pbnZva2UobG9nZ2VyLCBuZXcgT2JqZWN0W117bWVzc2FnZX0pOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBjYXRjaChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIC8vIERvIG5vdGhpbmcuCi0gICAgICB9Ci0gICAgICBjYXRjaChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIC8vIERvIG5vdGhpbmcuICAKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nLklMb2dnZXIjbG9nKGphdmEubGFuZy5TdHJpbmcsIGludCwgamF2YS5sYW5nLlRocm93YWJsZSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGxvZyhTdHJpbmcgbWVzc2FnZSwgaW50IHNldmVyaXR5LCBUaHJvd2FibGUgdGhyb3dhYmxlKSAKLSAgewotCWlmKGxvZ2dlciAhPSBudWxsKQotCXsKLQkgIHRyeQotCSAgewotCSAgICBpZihzZXZlcml0eSA9PSBJTG9nZ2VyLlNFVl9FUlJPUikKLQkgICAgewotCQkgIGVycm9yMi5pbnZva2UobG9nZ2VyLCBuZXcgT2JqZWN0W117bWVzc2FnZSwgdGhyb3dhYmxlfSk7Ci0JICAgIH0KLQkgICAgZWxzZSBpZihzZXZlcml0eSA9PSBJTG9nZ2VyLlNFVl9XQVJOSU5HKQotCSAgICB7Ci0JCSAgd2FybjIuaW52b2tlKGxvZ2dlciwgbmV3IE9iamVjdFtde21lc3NhZ2UsIHRocm93YWJsZX0pOwotCSAgICB9Ci0JICAgIGVsc2UgaWYoc2V2ZXJpdHkgPT0gSUxvZ2dlci5TRVZfSU5GTykKLQkgICAgewotCQkgIGluZm8yLmludm9rZShsb2dnZXIsIG5ldyBPYmplY3RbXXttZXNzYWdlLCB0aHJvd2FibGV9KTsKLQkgICAgfQotCSAgICBlbHNlIGlmKHNldmVyaXR5ID09IElMb2dnZXIuU0VWX1ZFUkJPU0UpCi0JICAgIHsKLQkgICAgICBkZWJ1ZzIuaW52b2tlKGxvZ2dlciwgbmV3IE9iamVjdFtde21lc3NhZ2UsIHRocm93YWJsZX0pOwotCSAgICB9Ci0JICB9Ci0JICBjYXRjaChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGUpCi0JICB7Ci0JCS8vIERvIG5vdGhpbmcuCi0JICB9Ci0JICBjYXRjaChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGUpCi0JICB7Ci0JCS8vIERvIG5vdGhpbmcuICAKLQkgIH0KLQl9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS90ZXh0L1dTRExWYWxpZGF0ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL3RleHQvV1NETFZhbGlkYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1NTdiZjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL3RleHQvV1NETFZhbGlkYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudWkudGV4dDsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLkNsYXNzbG9hZGVyV1NETFZhbGlkYXRvckRlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25SZXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5XU0RMVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5XU0RMVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwubG9nZ2luZy5JTG9nZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwubG9nZ2luZy5Mb2dnZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXIuVVJJUmVzb2x2ZXJEZWxlZ2F0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5DbGFzc2xvYWRlcldTREwxMVZhbGlkYXRvckRlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLldTREwxMVZhbGlkYXRvckRlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sLlhNTENhdGFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC54bWwuWE1MQ2F0YWxvZ0VudGl0eUhvbGRlcjsKLQotaW1wb3J0IGNvbS5pYm0ud3NkbC51dGlsLlN0cmluZ1V0aWxzOwotCi0vKioKLSAqIEEgY29tbWFuZGUgbGluZSB0b29sIHRvIHJ1biBXU0RMIFZhbGlkYXRpb24gb24gYSBzaW5nbGUgb3IgbXVsdGlwbGUgZmlsZXMuCi0gKiAKLSAqIE9wdGlvbnMKLSAqIC1zY2hlbWFEaXIgZGlyZWN0b3J5ICAgICAgIDogYSBkaXJlY3Rvcnkgb2Ygc2NoZW1hcyB0byBsb2FkIGludG8gdGhlIGNhdGFsb2cKLSAqIC1zY2hlbWEgbmFtZXNwYWNlIGxvY2F0aW9uIDogYSBzY2hlbWEgdG8gbG9hZCBpbnRvIHRoZSByZWdpc3RyeQotICogLXdzZGwxMXYgY2xhc3NuYW1lIG5hbWVzcGFjZSByZXNvdXJjZWJ1bmRsZSA6IHJlZ2lzdGVyIGEgV1NETCAxLjEgZXh0ZW5zaW9uIHZhbGlkYXRvcgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBsb2FkIGZvciB0aGUgZ2l2ZW4gbmFtZXNwYWNlIHdpdGggdGhlIGdpdmVuIHJlc291cmNlYnVuZGxlCi0gKiAtd3NpdiB2YWxpZGF0b3JDbGFzcyBuYW1lc3BhY2UgcHJvcGVydGllc2ZpbGUgOiByZWdpc3RlciBhIFdTLUkgdmFsaWRhdG9yCi0gKiAtdXJpcmVzb2x2ZXIgVVJJUmVzb2x2ZXJDbGFzcyA6IHJlZ2lzdGVyIGFuIGV4dGVuc2lvbiBVUkkgcmVzb2x2ZXIKLSAqLwotcHVibGljIGNsYXNzIFdTRExWYWxpZGF0ZQotewotICBwcml2YXRlIGZpbmFsIFN0cmluZyBGSUxFX1BSRUZJWCA9ICJmaWxlOi8vLyI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBWQUxJREFUT1JfUFJPUEVSVElFUyA9Ci0gICAgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5Db25zdGFudHMuV1NETF9WQUxJREFUT1JfUFJPUEVSVElFU19GSUxFOwotICAKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSQU1fV1NETDExVkFMID0gIi13c2RsMTF2IjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSQU1fRVhUVkFMID0gIi1leHR2IjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSQU1fU0NIRU1BRElSID0gIi1zY2hlbWFEaXIiOwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBQQVJBTV9TQ0hFTUEgPSAiLXNjaGVtYSI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUkFNX1VSSVJFU09MVkVSID0gIi11cmlyZXNvbHZlciI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUkFNX0xPR0dFUiA9ICItbG9nZ2VyIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSQU1fUFJPUEVSVFkgPSAiLUQiOwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBQQVJBTV9WRVJCT1NFID0gIi12ZXJib3NlIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSQU1fVkVSQk9TRV9TSE9SVCA9ICItdiI7Ci0gIAotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RSSU5HX0VNUFRZID0gIiI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTVFJJTkdfU1BBQ0UgPSAiICI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTVFJJTkdfREFTSCA9ICItIjsKLSAgCi0gIFN0cmluZyB3b3JraW5nZGlyID0gU3lzdGVtLmdldFByb3BlcnR5KCJ1c2VyLmRpciIpOwotICAKLSAgLy9wcm90ZWN0ZWQgUmVzb3VyY2VCdW5kbGUgcmVzb3VyY2VCdW5kbGU7Ci0KLSAgcHJvdGVjdGVkIFdTRExWYWxpZGF0b3Igd3NkbFZhbGlkYXRvciA9IG51bGw7Ci0gIHByb3RlY3RlZCBXU0RMVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IG51bGw7Ci0gIHByb3RlY3RlZCBMaXN0IHdzZGxGaWxlcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgcHJvdGVjdGVkIGJvb2xlYW4gdmVyYm9zZSA9IGZhbHNlOwotICBwcm90ZWN0ZWQgUmVzb3VyY2VCdW5kbGUgdmFsaWRhdG9yUkIgPSBudWxsOwotCi0gIC8qKgotICAgKiBDb25zdHVjdG9yLgotICAgKi8KLSAgcHJvdGVjdGVkIFdTRExWYWxpZGF0ZSgpCi0gIHsKLSAgCXdzZGxWYWxpZGF0b3IgPSBuZXcgV1NETFZhbGlkYXRvcigpOwotICAJY29uZmlndXJhdGlvbiA9IG5ldyBXU0RMVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24oKTsKLSAgCQotICAgIHRyeQotICAgIHsKLSAgICAgIHZhbGlkYXRvclJCID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKFZBTElEQVRPUl9QUk9QRVJUSUVTKTsKLSAgICB9Ci0gICAgY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIExvZ2dlckZhY3RvcnkuZ2V0SW5zdGFuY2UoKS5nZXRMb2dnZXIoKS5sb2coIlZhbGlkYXRpb24gZmFpbGVkOiBVbmFibGUgdG8gbG9hZCB0aGUgV1NETCB2YWxpZGF0b3IgcHJvcGVydGllcyBmaWxlLiIsIElMb2dnZXIuU0VWX0VSUk9SLCBlKTsKLSAgICB9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBWYWxpZGF0ZSB0aGUgZmlsZXMgc3BlY2lmaWVkLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgdmFsaWRhdGUoKQotICB7Ci0JSUxvZ2dlciBsb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldEluc3RhbmNlKCkuZ2V0TG9nZ2VyKCk7Ci0JCi0JaW50IG51bUludmFsaWQgPSAwOwotCi0JSXRlcmF0b3IgZmlsZXNJdGVyID0gd3NkbEZpbGVzLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGZpbGVzSXRlci5oYXNOZXh0KCkpCi0JewotCSAgU3RyaW5nIHdzZGxGaWxlID0gKFN0cmluZylmaWxlc0l0ZXIubmV4dCgpOwotCSAgSVZhbGlkYXRpb25SZXBvcnQgdmFsUmVwb3J0ID0gdmFsaWRhdGVGaWxlKHdzZGxGaWxlKTsKLQotCSAgaWYodmFsUmVwb3J0Lmhhc0Vycm9ycygpKQotCSAgewotCSAgICBudW1JbnZhbGlkKys7Ci0JICAgIGxvZ2dlci5sb2coTWVzc2FnZUZvcm1hdC5mb3JtYXQoV1NETFZhbGlkYXRlVGV4dFVJTWVzc2FnZXMuX1VJX0ZJTEVfSU5WQUxJRCwgbmV3IE9iamVjdFtde3dzZGxGaWxlfSksIElMb2dnZXIuU0VWX0lORk8pOwotCSAgICAvL2xvZ2dlci5sb2coV1NETFZhbGlkYXRlVGV4dFVJTWVzc2FnZXMuX1VJX0lORk9STUFUSU9OX0RFTElNSVRFUiwgSUxvZ2dlci5TRVZfRVJST1IpOwotCSAgICBsb2dnZXIubG9nKGdldE1lc3NhZ2VzKHZhbFJlcG9ydC5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKSksIElMb2dnZXIuU0VWX0lORk8pOwotCSAgfQotCSAgZWxzZSBpZih2ZXJib3NlKQotCSAgewotCSAgICBsb2dnZXIubG9nKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KFdTRExWYWxpZGF0ZVRleHRVSU1lc3NhZ2VzLl9VSV9GSUxFX1ZBTElELCBuZXcgT2JqZWN0W117d3NkbEZpbGV9KSwgSUxvZ2dlci5TRVZfVkVSQk9TRSk7Ci0JICB9Ci0JfQotICAgIAotICAgIC8vIExvZyB0aGUgc3VtbWFyeS4KLSAgICBsb2dnZXIubG9nKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KFdTRExWYWxpZGF0ZVRleHRVSU1lc3NhZ2VzLl9VSV9WQUxJREFUSU9OX1NVTU1BUlksIG5ldyBPYmplY3RbXXtuZXcgSW50ZWdlcih3c2RsRmlsZXMuc2l6ZSgpKSwgbmV3IEludGVnZXIobnVtSW52YWxpZCl9KSwgSUxvZ2dlci5TRVZfSU5GTyk7Ci0gIH0KLQotICAvKioKLSAgICogUnVuIFdTREwgdmFsaWRhdGlvbiBvbiBhIGdpdmVuIGZpbGUuCi0gICAqIAotICAgKiBAcGFyYW0gZmlsZW5hbWUgCi0gICAqIAkJVGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gdmFsaWRhdGUuCi0gICAqIEB0aHJvd3MgRXhjZXB0aW9uCi0gICAqLwotICBwcm90ZWN0ZWQgSVZhbGlkYXRpb25SZXBvcnQgdmFsaWRhdGVGaWxlKFN0cmluZyBmaWxlbmFtZSkKLSAgewkKLSAgICAvLyBSZXNvbHZlIHRoZSBsb2NhdGlvbiBvZiB0aGUgZmlsZS4KLSAgICBTdHJpbmcgZmlsZWxvY2F0aW9uID0gbnVsbDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBVUkwgZmlsZVVSTCA9IFN0cmluZ1V0aWxzLmdldFVSTChuZXcgVVJMKEZJTEVfUFJFRklYICsgd29ya2luZ2RpciArICIvIiksIGZpbGVuYW1lKTsKLSAgICAgIGZpbGVsb2NhdGlvbiA9IGZpbGVVUkwudG9FeHRlcm5hbEZvcm0oKTsKLSAgICB9Ci0gICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vIERvIG5vdGhpbmcuIFRoZSBXU0RMIHZhbGlkYXRvciB3aWxsIGhhbmRsZSB0aGUgZXJyb3IuCi0gICAgICAvL0xvZ2dlckZhY3RvcnkuZ2V0SW5zdGFuY2UoKS5nZXRMb2dnZXIoKS5sb2coTWVzc2FnZUZvcm1hdC5mb3JtYXQoV1NETFZhbGlkYXRlVGV4dFVJTWVzc2FnZXMuX0VSUk9SX1VOQUJMRV9UT19SRUFEX0ZJTEUsIG5ldyBPYmplY3RbXXtmaWxlbmFtZX0pLCBJTG9nZ2VyLlNFVl9FUlJPUik7Ci0gICAgfQotICAgIAotICAgIC8vIFJ1biB2YWxpZGF0aW9uIG9uIHRoZSBmaWxlLgotICAgIElWYWxpZGF0aW9uUmVwb3J0IHZhbFJlcG9ydCA9IHdzZGxWYWxpZGF0b3IudmFsaWRhdGUoZmlsZWxvY2F0aW9uLCBudWxsLCBjb25maWd1cmF0aW9uKTsKLSAgICByZXR1cm4gdmFsUmVwb3J0OwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBTdHJpbmcgd2l0aCBmb3JtYXR0ZWQgb3V0cHV0IGZvciBhIGxpc3Qgb2YgbWVzc2FnZXMuCi0gICAqIAotICAgKiBAcGFyYW0gbWVzc2FnZXMgCi0gICAqIAkJVGhlIG1lc3NhZ2VzIHRvIGdldC4KLSAgICogQHJldHVybiAKLSAgICogCQlBIHN0cmluZyB3aXRoIGEgZm9ybWF0dGVkIGxpc3Qgb2YgdGhlIG1lc3NhZ2VzLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRNZXNzYWdlcyhJVmFsaWRhdGlvbk1lc3NhZ2VbXSBtZXNzYWdlcykKLSAgewotICAgIFN0cmluZ0J1ZmZlciBvdXRwdXRCdWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgaWYgKG1lc3NhZ2VzICE9IG51bGwpCi0gICAgewotICAgICAgLy8gY3JlYXRlIGEgbGlzdCBvZiBtZXNzYWdlcyB0aGF0IGxvb2tzIGxpa2UKLSAgICAgIC8vIEVSUk9SIDE6MSBFcnJvciBtZXNzYWdlIGNvbnRlbnQKLSAgICAgIGludCBudW1NZXNzYWdlcyA9IG1lc3NhZ2VzLmxlbmd0aDsKLSAgICAgIFN0cmluZyBtYXJrZXIgPSBudWxsOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1NZXNzYWdlczsgaSsrKQotICAgICAgewotICAgICAgICBJVmFsaWRhdGlvbk1lc3NhZ2UgbWVzc2FnZSA9IG1lc3NhZ2VzW2ldOwotICAgICAgICBpbnQgc2V2ZXJpdHkgPSBtZXNzYWdlLmdldFNldmVyaXR5KCk7Ci0gICAgICAgIGlmIChzZXZlcml0eSA9PSBJVmFsaWRhdGlvbk1lc3NhZ2UuU0VWX0VSUk9SKQotICAgICAgICB7Ci0gICAgICAgICAgbWFya2VyID0gV1NETFZhbGlkYXRlVGV4dFVJTWVzc2FnZXMuX1VJX0VSUk9SX01BUktFUjsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChzZXZlcml0eSA9PSBJVmFsaWRhdGlvbk1lc3NhZ2UuU0VWX1dBUk5JTkcpCi0gICAgICAgIHsKLSAgICAgICAgICBtYXJrZXIgPSBXU0RMVmFsaWRhdGVUZXh0VUlNZXNzYWdlcy5fVUlfV0FSTklOR19NQVJLRVI7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgbWFya2VyID0gU1RSSU5HX0VNUFRZOwotICAgICAgICB9Ci0gICAgICAgIG91dHB1dEJ1ZmZlcgotICAgICAgICAgIC5hcHBlbmQobWFya2VyKQotICAgICAgICAgIC5hcHBlbmQoU1RSSU5HX1NQQUNFKQotICAgICAgICAgIC5hcHBlbmQobWVzc2FnZS5nZXRMaW5lKCkpCi0gICAgICAgICAgLmFwcGVuZCgiOiIpCi0gICAgICAgICAgLmFwcGVuZChtZXNzYWdlLmdldENvbHVtbigpKQotICAgICAgICAgIC5hcHBlbmQoU1RSSU5HX1NQQUNFKQotICAgICAgICAgIC5hcHBlbmQobWVzc2FnZS5nZXRNZXNzYWdlKCkpOwotICAgICAgICBpZihpICE9IG51bU1lc3NhZ2VzIC0xKQotICAgICAgICB7Ci0gICAgICAgICAgb3V0cHV0QnVmZmVyLmFwcGVuZCgiXG4iKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gb3V0cHV0QnVmZmVyLnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKioKLSAgICogVGhlIG1haW4gZW50cnkgcG9pbnQgaW50byB0aGUgY29tbWFuZCBsaW5lIHRvb2wuIAotICAgKiBDaGVja3MgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMsIHJlZ2lzdGVycyB0aGUgZGVmYXVsdCB2YWxpZGF0b3JzIGFuZCBydW5zIHZhbGlkYXRpb24gb24gdGhlCi0gICAqIGxpc3Qgb2YgZmlsZXMuCi0gICAqIAotICAgKiBAcGFyYW0gYXJncyAtIHRoZSBhcmd1bWVudHMgdG8gdGhlIHZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKLSAgewotICAgIC8vIE5vIGFyZ3VtZW50cyBzcGVjaWZpZWQuIFByaW50IHVzYWdlLgotCWlmIChhcmdzLmxlbmd0aCA8IDEpCi0gICAgewotCSAgU3lzdGVtLmVyci5wcmludGxuKFdTRExWYWxpZGF0ZVRleHRVSU1lc3NhZ2VzLl9FUlJPUl9XUk9OR19BUkdVTUVOVFMpOwotCSAgU3lzdGVtLmV4aXQoMCk7Ci0JfQotCQotCVdTRExWYWxpZGF0ZSB3c2RsVmFsaWRhdGUgPSBuZXcgV1NETFZhbGlkYXRlKCk7Ci0Jd3NkbFZhbGlkYXRlLnBhcnNlQXJndW1lbnRzKGFyZ3MpOwotCXdzZGxWYWxpZGF0ZS52YWxpZGF0ZSgpOwotICB9Ci0gIAotICAvKioKLSAgICogUGFyc2UgdGhlIGFyZ3VtZW50cyBzcGVjaWZpZWQgZm9yIHRoaXMgV1NETFZhbGlkYXRlIHRhc2sgYW5kCi0gICAqIGNvbmZpZ3VyZSB2YWxpZGF0aW9uLgotICAgKiAKLSAgICogQHBhcmFtIGFyZ3MKLSAgICogCQlUaGUgYXJndW1lbnRzIHNwZWNpZmllZCBmb3IgdGhpcyB0YXNrLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgcGFyc2VBcmd1bWVudHMoU3RyaW5nW10gYXJncykKLSAgewotCWludCBudW1hcmdzID0gYXJncy5sZW5ndGg7Ci0KLQlmb3IgKGludCBpID0gMDsgaSA8IG51bWFyZ3M7IGkrKykKLQl7Ci0JICBTdHJpbmcgcGFyYW0gPSBhcmdzW2ldOwotCi0JICAvLyBSZWdpc3RlcmluZyBhbiBleHRlbnNpb24gdmFsaWRhdG9yIG9yIFdTREwgMS4xIGV4dGVuc2lvbiB2YWxpZGF0b3IuCi0JICBpZiAocGFyYW0uZXF1YWxzKFdTRExWYWxpZGF0ZS5QQVJBTV9XU0RMMTFWQUwpIAotCQkJICB8fCBwYXJhbS5lcXVhbHMoV1NETFZhbGlkYXRlLlBBUkFNX0VYVFZBTCkpCi0JICB7Ci0JICAgIFN0cmluZyBuYW1lc3BhY2UgPSBhcmdzWysraV07Ci0JICAgIGlmICghbmFtZXNwYWNlLnN0YXJ0c1dpdGgoV1NETFZhbGlkYXRlLlNUUklOR19EQVNIKSkKLQkgICAgewotCSAgICAgIFN0cmluZyB2YWxpZGF0b3JDbGFzcyA9IGFyZ3NbKytpXTsKLQotCSAgICAgIGlmICghdmFsaWRhdG9yQ2xhc3Muc3RhcnRzV2l0aChXU0RMVmFsaWRhdGUuU1RSSU5HX0RBU0gpKQotCSAgICAgIHsKLQkgICAgICAgIGlmKHBhcmFtLmVxdWFsc0lnbm9yZUNhc2UoV1NETFZhbGlkYXRlLlBBUkFNX1dTREwxMVZBTCkpCi0JICAgICAgICB7ICAKLQkgICAgICAgICAgV1NETDExVmFsaWRhdG9yRGVsZWdhdGUgZGVsZWdhdGUgPSBuZXcgQ2xhc3Nsb2FkZXJXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZSh2YWxpZGF0b3JDbGFzcyk7Ci0JICAgICAgICAgIHdzZGxWYWxpZGF0b3IucmVnaXN0ZXJXU0RMMTFWYWxpZGF0b3IobmFtZXNwYWNlLCBkZWxlZ2F0ZSk7Ci0JICAgICAgICB9Ci0JICAgICAgICBlbHNlIGlmKHBhcmFtLmVxdWFsc0lnbm9yZUNhc2UoV1NETFZhbGlkYXRlLlBBUkFNX0VYVFZBTCkpCi0JICAgICAgICB7Ci0JICAgICAgICAgIENsYXNzbG9hZGVyV1NETFZhbGlkYXRvckRlbGVnYXRlIGRlbGVnYXRlID0gbmV3IENsYXNzbG9hZGVyV1NETFZhbGlkYXRvckRlbGVnYXRlKHZhbGlkYXRvckNsYXNzKTsKLQkgICAgICAgICAgd3NkbFZhbGlkYXRvci5yZWdpc3RlcldTRExFeHRlbnNpb25WYWxpZGF0b3IobmFtZXNwYWNlLCBkZWxlZ2F0ZSk7Ci0JICAgICAgICB9Ci0JICAgICAgfQotCSAgICAgIGVsc2UKLQkgICAgICB7Ci0JICAgICAgICBpLS07Ci0JICAgICAgfQotCSAgICB9Ci0JICAgIGVsc2UKLQkgICAgewotCSAgICAgIGktLTsKLQkgICAgfSAgCi0JICB9Ci0JICAvLyBSZWdpc3RlciBhIGRpcmVjdG9yeSB3aXRoIHNjaGVtYXMuCi0JICBlbHNlIGlmIChwYXJhbS5lcXVhbHNJZ25vcmVDYXNlKFdTRExWYWxpZGF0ZS5QQVJBTV9TQ0hFTUFESVIpKQotCSAgewotCSAgICBTdHJpbmcgeHNkRGlyID0gYXJnc1srK2ldOwotCSAgICBYTUxDYXRhbG9nLmFkZFNjaGVtYURpcih4c2REaXIpOwotCSAgfQotCSAgLy8gUmVnaXN0ZXIgYSBzY2hlbWEuCi0JICAvLyBUT0RPOiBSZXBsYWNlIHRoaXMgd2l0aCBhbiBYTUwgY2F0YWxvZy4KLQkgIGVsc2UgaWYgKHBhcmFtLmVxdWFsc0lnbm9yZUNhc2UoV1NETFZhbGlkYXRlLlBBUkFNX1NDSEVNQSkpCi0JICB7Ci0JICAgIFN0cmluZyBwdWJsaWNpZCA9IGFyZ3NbKytpXTsKLQkgICAgU3RyaW5nIHN5c3RlbWlkID0gYXJnc1srK2ldOwotCSAgICBYTUxDYXRhbG9nLmFkZEVudGl0eShuZXcgWE1MQ2F0YWxvZ0VudGl0eUhvbGRlcihwdWJsaWNpZCwgc3lzdGVtaWQpKTsKLQkgIH0KLQkgIC8vIFJlZ2lzdGVyIGEgVVJJIHJlc29sdmVyLiAKLQkgIC8vIFRPRE86IERldGVybWluZSBpZiB0aGlzIGlzIGFwcHJvcHJpYXRlIGZvciB0aGUgdGV4dCBVSS4KLQkgIGVsc2UgaWYocGFyYW0uZXF1YWxzSWdub3JlQ2FzZShQQVJBTV9VUklSRVNPTFZFUikpCi0JICB7Ci0JICAgIFN0cmluZyByZXNvbHZlckNsYXNzID0gYXJnc1srK2ldOwotCSAgICB3c2RsVmFsaWRhdG9yLmFkZFVSSVJlc29sdmVyKG5ldyBVUklSZXNvbHZlckRlbGVnYXRlKHJlc29sdmVyQ2xhc3MsIG51bGwpLmdldFVSSVJlc29sdmVyKCkpOwotCSAgfQotCSAgLy8gQ29uZmlndXJlIHRoZSBsb2dnZXIuCi0JICBlbHNlIGlmKHBhcmFtLmVxdWFscyhQQVJBTV9MT0dHRVIpKQotCSAgewotCSAgICBTdHJpbmcgbG9nZ2VyQ2xhc3NTdHJpbmcgPSBhcmdzWysraV07Ci0JICAgIHRyeQotCSAgICB7Ci0JICAgICAgQ2xhc3MgbG9nZ2VyQ2xhc3MgPSBXU0RMVmFsaWRhdGUuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKS5sb2FkQ2xhc3MobG9nZ2VyQ2xhc3NTdHJpbmcpOwotCSAgICAgIElMb2dnZXIgbG9nZ2VyID0gKElMb2dnZXIpbG9nZ2VyQ2xhc3MubmV3SW5zdGFuY2UoKTsKLQkgICAgICBMb2dnZXJGYWN0b3J5LmdldEluc3RhbmNlKCkuc2V0TG9nZ2VyKGxvZ2dlcik7Ci0JICAgIH0KLQkgICAgY2F0Y2goRXhjZXB0aW9uIGUpCi0JICAgIHsKLQkgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oTWVzc2FnZUZvcm1hdC5mb3JtYXQoV1NETFZhbGlkYXRlVGV4dFVJTWVzc2FnZXMuX0VSUk9SX0xPQURJTkdfTE9HR0VSLCBuZXcgT2JqZWN0W117bG9nZ2VyQ2xhc3NTdHJpbmd9KSk7Ci0JICAgIH0KLQkgIH0KLQkgIC8vIFNldCBwcm9wZXJ0aWVzLgotCSAgZWxzZSBpZihwYXJhbS5zdGFydHNXaXRoKFBBUkFNX1BST1BFUlRZKSkKLQkgIHsKLQkgICAgaW50IHNlcGFyYXRvciA9IHBhcmFtLmluZGV4T2YoJz0nKTsKLQkgICAgU3RyaW5nIG5hbWUgPSBwYXJhbS5zdWJzdHJpbmcoMiwgc2VwYXJhdG9yKTsKLQkgICAgU3RyaW5nIHZhbHVlID0gcGFyYW0uc3Vic3RyaW5nKHNlcGFyYXRvcisxKTsKLQkgICAgY29uZmlndXJhdGlvbi5zZXRQcm9wZXJ0eShuYW1lLCB2YWx1ZSk7Ci0JICB9Ci0JICAvLyBTZXQgdmVyYm9zZTsKLQkgIGVsc2UgaWYocGFyYW0uZXF1YWxzKFBBUkFNX1ZFUkJPU0UpIHx8IHBhcmFtLmVxdWFscyggUEFSQU1fVkVSQk9TRV9TSE9SVCkpCi0JICB7Ci0JCXZlcmJvc2UgPSB0cnVlOwotCSAgfQotCSAgLy8gYSBmaWxlIHRvIHZhbGlkYXRlCi0JICBlbHNlCi0JICB7Ci0JICAgIGlmKCFwYXJhbS5zdGFydHNXaXRoKFdTRExWYWxpZGF0ZS5TVFJJTkdfREFTSCkpCi0JICAgIHsgIAotCSAgICAgIHdzZGxGaWxlcy5hZGQocGFyYW0pOwotCSAgICB9Ci0JICB9Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvdGV4dC9XU0RMVmFsaWRhdGVUZXh0VUlNZXNzYWdlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL3RleHQvV1NETFZhbGlkYXRlVGV4dFVJTWVzc2FnZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTdhYzhlOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvdGV4dC9XU0RMVmFsaWRhdGVUZXh0VUlNZXNzYWdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENvbW1vbiBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudWkudGV4dDsKLQotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotLyoqCi0gKiBTdHJpbmdzIHVzZWQgYnkgdGhlIFdTRExWYWxpZGF0ZSB0ZXh0IFVJLgotICogVGhpcyBjbGFzcyBtaW1pY3MgdGhlIGJlaGF2aW91ciBvZiB0aGUgT1NHSSBOTFMgY2xhc3MgZm9yIGNvbnZlbmllbmNlLgotICovCi1wdWJsaWMgY2xhc3MgV1NETFZhbGlkYXRlVGV4dFVJTWVzc2FnZXMKLXsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSAib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51aS50ZXh0LndzZGx2YWxpZGF0ZXRleHR1aSI7Ly8kTk9OLU5MUy0xJAotCi0JLy8gRXJyb3IgbWVzc2FnZXMuCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgX0VSUk9SX1dST05HX0FSR1VNRU5UUyA9ICJfRVJST1JfV1JPTkdfQVJHVU1FTlRTIjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfRVJST1JfTE9BRElOR19MT0dHRVIgPSAiX0VSUk9SX0xPQURJTkdfTE9HR0VSIjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfRVJST1JfVU5BQkxFX1RPX1JFQURfRklMRSA9ICJfRVJST1JfVU5BQkxFX1RPX1JFQURfRklMRSI7Ci0JCi0JLy8gVmFsaWRhdGlvbiBtZXNzYWdlcy4KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfSU5GT1JNQVRJT05fREVMSU1JVEVSID0gIl9VSV9JTkZPUk1BVElPTl9ERUxJTUlURVIiOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9GSUxFX1ZBTElEID0gIl9VSV9GSUxFX1ZBTElEIjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBfVUlfRklMRV9JTlZBTElEID0gIl9VSV9GSUxFX0lOVkFMSUQiOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9FUlJPUl9NQVJLRVIgPSAiX1VJX0VSUk9SX01BUktFUiI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX1dBUk5JTkdfTUFSS0VSID0gIl9VSV9XQVJOSU5HX01BUktFUiI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX1ZBTElEQVRJT05fU1VNTUFSWSA9ICJfVUlfVkFMSURBVElPTl9TVU1NQVJZIjsKLQotCXN0YXRpYyAKLQl7Ci0JCS8vIGxvYWQgbWVzc2FnZSB2YWx1ZXMgZnJvbSBidW5kbGUgZmlsZQotCQlSZXNvdXJjZUJ1bmRsZSBidW5kbGUgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoQlVORExFX05BTUUpOwotCQlfRVJST1JfV1JPTkdfQVJHVU1FTlRTID0gYnVuZGxlLmdldFN0cmluZyhTdHJpbmcudmFsdWVPZihfRVJST1JfV1JPTkdfQVJHVU1FTlRTKSk7Ci0JCV9FUlJPUl9MT0FESU5HX0xPR0dFUiA9IGJ1bmRsZS5nZXRTdHJpbmcoX0VSUk9SX0xPQURJTkdfTE9HR0VSKTsKLQkJX0VSUk9SX1VOQUJMRV9UT19SRUFEX0ZJTEUgPSBidW5kbGUuZ2V0U3RyaW5nKF9FUlJPUl9VTkFCTEVfVE9fUkVBRF9GSUxFKTsKLQkJX1VJX0lORk9STUFUSU9OX0RFTElNSVRFUiA9IGJ1bmRsZS5nZXRTdHJpbmcoX1VJX0lORk9STUFUSU9OX0RFTElNSVRFUik7Ci0JCV9VSV9GSUxFX1ZBTElEID0gYnVuZGxlLmdldFN0cmluZyhfVUlfRklMRV9WQUxJRCk7Ci0JCV9VSV9GSUxFX0lOVkFMSUQgPSBidW5kbGUuZ2V0U3RyaW5nKF9VSV9GSUxFX0lOVkFMSUQpOwotCQlfVUlfRVJST1JfTUFSS0VSID0gYnVuZGxlLmdldFN0cmluZyhfVUlfRVJST1JfTUFSS0VSKTsKLQkJX1VJX1dBUk5JTkdfTUFSS0VSID0gYnVuZGxlLmdldFN0cmluZyhfVUlfV0FSTklOR19NQVJLRVIpOwotCQlfVUlfVkFMSURBVElPTl9TVU1NQVJZID0gYnVuZGxlLmdldFN0cmluZyhfVUlfVkFMSURBVElPTl9TVU1NQVJZKTsKLQl9Ci0KLQlwcml2YXRlIFdTRExWYWxpZGF0ZVRleHRVSU1lc3NhZ2VzKCkgCi0JewotCQkvLyBjYW5ub3QgY3JlYXRlIG5ldyBpbnN0YW5jZQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS90ZXh0L3dzZGx2YWxpZGF0ZXRleHR1aS5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL3RleHQvd3NkbHZhbGlkYXRldGV4dHVpLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0ZWQ4MmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL3RleHQvd3NkbHZhbGlkYXRldGV4dHVpLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jIE1lc3NhZ2VzIGZvciB0aGUgV1NETFZhbGlkYXRlIHRleHQgVUkgaW50ZXJmYWNlLgotCi0jIEVycm9yIG1lc3NhZ2VzCi1fRVJST1JfV1JPTkdfQVJHVU1FTlRTICAgICA9IFVzYWdlOiBXU0RMVmFsaWRhdGUgWy13c2RsMTF2IG5hbWVzcGFjZSBjbGFzc25hbWVdIFstZXh0diBuYW1lc3BhY2UgY2xhc3NuYW1lXSBbLURuYW1lPXZhbHVlXSBmaWxlbmFtZVxuXAotXCAgLXdzZGwxMXZcdFJlZ2lzdGVyIHRoZSBXU0RMIDEuMSB2YWxpZGF0b3Igc3BlY2lmaWVkIGJ5IGNsYXNzbmFtZVxuXAotXHRcdGZvciBuYW1lc3BhY2UuXG5cCi1cICAtZXh0dlx0XHRSZWdpc3RlciB0aGUgV1NETCBleHRlbnNpb24gdmFsaWRhdG9yIHNwZWNpZmllZCBieVxuXAotXHRcdGNsYXNzbmFtZSBmb3IgbmFtZXNwYWNlLlxuXAotXCAgLXZlcmJvc2UsIC12XHRQcmludCBvdXQgdmVyYm9zZSBpbmZvcm1hdGlvbi5cblwKLVwgIC1sb2dnZXJcdFNwZWNpZnkgYW4gYWx0ZXJuYXRlIGxvZ2dlciB0aGF0IGltcGxlbWVudHNcblwKLVx0XHRvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuSUxvZ2dlclxuXAotXCAgLURcdFx0U3BlY2lmeSBhIHByb3BlcnR5IHdpdGggbmFtZSBhbmQgdmFsdWUuICAKLV9FUlJPUl9MT0FESU5HX0xPR0dFUiAgICAgID0gVW5hYmxlIHRvIGxvYWQgbG9nZ2VyIGNsYXNzIHswfS4KLV9FUlJPUl9VTkFCTEVfVE9fUkVBRF9GSUxFID0gVW5hYmxlIHRvIHJlYWQgZmlsZSB7MH0uCi0KLSMgVmFsaWRhdGlvbiBtZXNzYWdlcwotX1VJX0lORk9STUFUSU9OX0RFTElNSVRFUiAgPSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLV9VSV9GSUxFX0lOVkFMSUQgICAgICAgICAgID0gezB9IC0gTm90IHZhbGlkCi1fVUlfRklMRV9WQUxJRCAgICAgICAgICAgICA9IHswfSAtIFZhbGlkCi1fVUlfRVJST1JfTUFSS0VSICAgICAgICAgICA9IEVSUk9SCi1fVUlfV0FSTklOR19NQVJLRVIgICAgICAgICA9IFdBUk5JTkcKLV9VSV9WQUxJREFUSU9OX1NVTU1BUlkgICAgID0gezB9IGZpbGVzIHZhbGlkYXRlZC4gezF9IGZpbGVzIHJlcG9ydGVkIGVycm9ycy4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdXRpbC9FcnJvck1lc3NhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91dGlsL0Vycm9yTWVzc2FnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOGExNGJlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91dGlsL0Vycm9yTWVzc2FnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjE2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnV0aWw7Ci0KLS8qKgotICogQSBjbGFzcyB0byBob2xkIHZhbGlkYXRpb24gbWVzc2FnZXMuIEluIHRoaXMgY2FzZSBhbiBlcnJvciBtZXNzYWdlIGlzIGEgZ2VuZXJpYwotICogdGVybSBmb3IgYW55IGtpbmQgb2YgdmFsaWRhdGlvbiBtZXNzYWdlLgotICovCi1wdWJsaWMgY2xhc3MgRXJyb3JNZXNzYWdlCi17Ci0gIHByaXZhdGUgaW50IGVycm9yTGluZSwgZXJyb3JDb2x1bW4sIHNldmVyaXR5OwotICBwcml2YXRlIFN0cmluZyBlcnJvclN0cmluZywgdXJpOwotICBwcml2YXRlIGludCBzdGFydE9mZnNldCA9IC0xOwotICBwcml2YXRlIGludCBlbmRPZmZzZXQgPSAtMTsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqLwotICBwdWJsaWMgRXJyb3JNZXNzYWdlKCkKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIG1lc3NhZ2UuCi0gICAqIAotICAgKiBAcGFyYW0gZXJyb3IgVGhlIG1lc3NhZ2UgdG8gc2V0LgotICAgKiBAc2VlICNnZXRFcnJvck1lc3NhZ2UKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEVycm9yTWVzc2FnZShTdHJpbmcgZXJyb3IpCi0gIHsKLSAgICBlcnJvclN0cmluZyA9IGVycm9yOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHNldmVyaXR5IG9mIHRoZSBtZXNzYWdlLgotICAgKiAKLSAgICogQHBhcmFtIHNldmVyaXR5IFRoZSBzZXZlcml0eSBvZiB0aGUgbWVzc2FnZS4KLSAgICogQHNlZSAjZ2V0U2V2ZXJpdHkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNldmVyaXR5KGludCBzZXZlcml0eSkKLSAgewotICAgIHRoaXMuc2V2ZXJpdHkgPSBzZXZlcml0eTsKLSAgfQotCi0gIC8qKgotICAgKiBTZXRzIHRoZSBzZXZlcml0eSBvZiB0aGUgbWVzc2FnZSB1c2luZyBzdHJpbmcgbmFtZXMgZm9yIHRoZSBzZXZlcml0eS4KLSAgICogCi0gICAqIEBwYXJhbSBzZXZlcml0eSBUaGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzZXZlcml0eS4KLSAgICogQHNlZSAjZ2V0U2V2ZXJpdHkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNldmVyaXR5KFN0cmluZyBzZXZlcml0eSkKLSAgewotICAgIGlmIChzZXZlcml0eS5lcXVhbHMoIndhcm5pbmciKSkKLSAgICB7Ci0gICAgICB0aGlzLnNldmVyaXR5ID0gMDsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc2V2ZXJpdHkuZXF1YWxzKCJlcnJvciIpKQotICAgIHsKLSAgICAgIHRoaXMuc2V2ZXJpdHkgPSAxOwotICAgIH0KLSAgICBlbHNlIGlmIChzZXZlcml0eS5lcXVhbHMoImZhdGFsIikpCi0gICAgewotICAgICAgdGhpcy5zZXZlcml0eSA9IDI7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIGxpbmUgd2hlcmUgdGhlIGVycm9yIGlzIGxvY2F0ZWQuCi0gICAqIAotICAgKiBAcGFyYW0gbGluZSBUaGUgbGluZSB3aGVyZSB0aGUgZXJyb3IgaXMgbG9jYXRlZC4KLSAgICogQHNlZSAjZ2V0RXJyb3JMaW5lCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFcnJvckxpbmUoaW50IGxpbmUpCi0gIHsKLSAgICBlcnJvckxpbmUgPSBsaW5lOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIGNvbHVtbiB3aGVyZSB0aGUgZXJyb3IgaXMgbG9jYXRlZC4KLSAgICogCi0gICAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbHVtbiB3aGVyZSB0aGUgZXJyb3IgaXMgbG9jYXRlZC4KLSAgICogQHNlZSAjZ2V0RXJyb3JDb2x1bW4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEVycm9yQ29sdW1uKGludCBjb2x1bW4pCi0gIHsKLSAgICBlcnJvckNvbHVtbiA9IGNvbHVtbjsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBlcnJvciBtZXNzYWdlLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgZXJyb3IgbWVzc2FnZS4KLSAgICogQHNlZSAjc2V0RXJyb3JNZXNzYWdlCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEVycm9yTWVzc2FnZSgpCi0gIHsKLSAgICByZXR1cm4gZXJyb3JTdHJpbmc7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgc2V2ZXJpdHkgb2YgdGhlIGVycm9yLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgc2V2ZXJpdHkgb2YgdGhlIGVycm9yLgotICAgKiBAc2VlICNzZXRTZXZlcml0eQotICAgKi8KLSAgcHVibGljIGludCBnZXRTZXZlcml0eSgpCi0gIHsKLSAgICByZXR1cm4gc2V2ZXJpdHk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbGluZSBsb2NhdGlvbiBvZiB0aGUgZXJyb3IuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBsaW5lIGxvY2F0aW9uIG9mIHRoZSBlcnJvci4KLSAgICogQHNlZSAjc2V0RXJyb3JMaW5lCi0gICAqLwotICBwdWJsaWMgaW50IGdldEVycm9yTGluZSgpCi0gIHsKLSAgICByZXR1cm4gZXJyb3JMaW5lOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGNvbHVtbiBsb2NhdGlvbiBvZiB0aGUgZXJyb3IuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBjb2x1bW4gbG9jYXRpb24gb2YgdGhlIGVycm9yLgotICAgKiBAc2VlICNzZXRFcnJvckNvbHVtbgotICAgKi8KLSAgcHVibGljIGludCBnZXRFcnJvckNvbHVtbigpCi0gIHsKLSAgICByZXR1cm4gZXJyb3JDb2x1bW47Ci0gIH0KLQotICAvKioKLSAgICogU2V0cyB0aGUgc3RhcnQgb2Zmc2V0LgotICAgKiAKLSAgICogQHBhcmFtIHN0YXJ0IFRoZSBzdGFydCBvZmZzZXQuCi0gICAqIEBzZWUgI2dldEVycm9yU3RhcnRPZmZzZXQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEVycm9yU3RhcnRPZmZzZXQoaW50IHN0YXJ0KQotICB7Ci0gICAgc3RhcnRPZmZzZXQgPSBzdGFydDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBlcnJvciBzdGFydCBvZmZzZXQuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBlcnJvciBzdGFydCBvZmZzZXQuCi0gICAqIEBzZWUgI3NldEVycm9yU3RhcnRPZmZzZXQKLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0RXJyb3JTdGFydE9mZnNldCgpCi0gIHsKLSAgICByZXR1cm4gc3RhcnRPZmZzZXQ7Ci0gIH0KLQotICAvKioKLSAgICogU2V0cyB0aGUgZW5kIG9mZnNldC4KLSAgICogCi0gICAqIEBwYXJhbSBlbmQgVGhlIGVuZCBvZmZzZXQuCi0gICAqIEBzZWUgI2dldEVycm9yRW5kT2Zmc2V0Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFcnJvckVuZE9mZnNldChpbnQgZW5kKQotICB7Ci0gICAgZW5kT2Zmc2V0ID0gZW5kOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGVycm9yIGVuZCBvZmZzZXQuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBlcnJvciBlbmQgb2Zmc2V0LgotICAgKiBAc2VlICNzZXRFcnJvckVuZE9mZnNldAotICAgKi8KLSAgcHVibGljIGludCBnZXRFcnJvckVuZE9mZnNldCgpCi0gIHsKLSAgICByZXR1cm4gZW5kT2Zmc2V0OwotICB9Ci0KLSAgLyoqCi0gICAqIEFkZHMgYSBuZXcgbGluZSBvdCB0aGUgZXJyb3IgbWVzc2FnZS4KLSAgICogCi0gICAqIEBwYXJhbSBuZXdMaW5lIFRoZSBuZXcgbGluZSB0byBhZGQgdG8gdGhlIGVycm9yIG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGROZXdFcnJvck1lc3NhZ2VMaW5lKFN0cmluZyBuZXdMaW5lKQotICB7Ci0gICAgZXJyb3JTdHJpbmcgKz0gIlxuIiArIG5ld0xpbmU7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBTZXQgdGhlIFVSSSBvZiB0aGUgZXJyb3IgbWVzc2FnZS4KLSAgICogCi0gICAqIEBwYXJhbSB1cmkgVGhlIFVSSSB0byBzZXQuCi0gICAqLwotIAotICBwdWJsaWMgdm9pZCBzZXRVUkkoU3RyaW5nIHVyaSkKLSAgewotICAgIHRoaXMudXJpID0gdXJpOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBVUkkgb2YgdGhlIGVycm9yIG1lc3NhZ2UuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBVUkkgb2YgdGhlIGVycm9yIG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFVSSSgpCi0gIHsKLSAgICByZXR1cm4gdXJpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdXRpbC9MYXp5VVJMSW5wdXRTdHJlYW0uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91dGlsL0xhenlVUkxJbnB1dFN0cmVhbS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzYwYWY4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91dGlsL0xhenlVUkxJbnB1dFN0cmVhbS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnV0aWw7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwubG9nZ2luZy5JTG9nZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwubG9nZ2luZy5Mb2dnZXJGYWN0b3J5OwotCi0KLS8qKgotICogVGhpcyBjbGFzcyBhbGxvd3MgSW5wdXRTdHJlYW1zIHRvIGJlIGNyZWF0ZWQgYW5kIHJldHVybmVkIHRvIHhlcmNlcyB3aXRob3V0Ci0gKiBhY3R1YWxseSBvcGVuaW5nIGZpbGUgaGFuZGxlcyBvciBuZXR3b3JrIGNvbm5lY3Rpb25zIHVudGlsIGl0IGlzIGFic29sdXRlbHkKLSAqIG5lY2Nlc3NhcnkuCi0gKi8KLXB1YmxpYyBjbGFzcyBMYXp5VVJMSW5wdXRTdHJlYW0gZXh0ZW5kcyBJbnB1dFN0cmVhbQoteyAgCi0gIHByaXZhdGUgc3RhdGljIGludCBkZWJ1Z1RvdGFsT3BlblN0cmVhbUNvdW50ID0gMDsgCi0gIHByb3RlY3RlZCBJbnB1dFN0cmVhbSBpbm5lcjsKLSAgcHJvdGVjdGVkIFN0cmluZyB1cmw7Ci0gIHByb3RlY3RlZCBib29sZWFuIGVycm9yOwotICBib29sZWFuIGhhc01hcmtzOwotICBib29sZWFuIHByZXRlbmRGaWxlSXNTdGlsbE9wZW47Ci0KLSAgcHVibGljIExhenlVUkxJbnB1dFN0cmVhbShTdHJpbmcgdXJsKQotICB7Ci0gICAgdGhpcy51cmwgPSB1cmw7Ci0JaW5uZXIgPSBudWxsOwotCXByZXRlbmRGaWxlSXNTdGlsbE9wZW4gPSBmYWxzZTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBjcmVhdGVJbm5lclN0cmVhbUlmUmVxdWlyZWQoKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotICAgIGlmIChpbm5lciA9PSBudWxsICYmICFlcnJvcikKLSAgICB7Ci0gICAgICBkZWJ1Z1RvdGFsT3BlblN0cmVhbUNvdW50Kys7Ci0gICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRpbmcgc3RyZWFtICgiICsgZGVidWdUb3RhbE9wZW5TdHJlYW1Db3VudCArICIpLS0gIiArIHVybCk7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgaW5uZXIgPSBuZXcgVVJMKHVybCkub3BlblN0cmVhbSgpOwotCQlwcmV0ZW5kRmlsZUlzU3RpbGxPcGVuID0gZmFsc2U7Ci0JCWhhc01hcmtzID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBmaW5hbGx5IAotICAgICAgewotICAgICAgICBpZiAoaW5uZXIgPT0gbnVsbCkKLSAgICAgICAgeyAgCi0gICAgICAgICAgZXJyb3IgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBjbG9zZVN0cmVhbSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWlmIChpbm5lciAhPSBudWxsICYmICFwcmV0ZW5kRmlsZUlzU3RpbGxPcGVuKSB7Ci0JCQlpbm5lci5jbG9zZSgpOwotCQkJcHJldGVuZEZpbGVJc1N0aWxsT3BlbiA9IHRydWU7Ci0JCX0KLSAgCX0KLQotICBwdWJsaWMgaW50IGF2YWlsYWJsZSgpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0JaWYgKHByZXRlbmRGaWxlSXNTdGlsbE9wZW4pIHJldHVybiAwOwotCWNyZWF0ZUlubmVyU3RyZWFtSWZSZXF1aXJlZCgpOwotCWlmIChpbm5lciA9PSBudWxsKSB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIlN0cmVhbSBub3QgYXZhaWxhYmxlIik7Ci0JcmV0dXJuIGlubmVyLmF2YWlsYWJsZSgpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgY2xvc2UoKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotCWlmIChwcmV0ZW5kRmlsZUlzU3RpbGxPcGVuKSB7Ci0JCS8vIFN0b3AgYmVoYXZpbmcgYXMgaWYgdGhlIHN0cmVhbSB3ZXJlIHN0aWxsIG9wZW4uCi0JCXByZXRlbmRGaWxlSXNTdGlsbE9wZW4gPSBmYWxzZTsKLQl9IGVsc2UgewotCQlpZiAoaW5uZXIgIT0gbnVsbCkgewotCQkJZGVidWdUb3RhbE9wZW5TdHJlYW1Db3VudC0tOwotCQkgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiQ2xvc2luZyBzdHJlYW0gKCIgKyBkZWJ1Z1RvdGFsT3BlblN0cmVhbUNvdW50ICsgIikgLS0gIiArIHVybCk7Ci0JCQlpbm5lci5jbG9zZSgpOwotCQl9Ci0JfQotICB9Ci0KLSAgcHVibGljIHZvaWQgbWFyayhpbnQgcmVhZGxpbWl0KQotICB7Ci0JaWYgKHByZXRlbmRGaWxlSXNTdGlsbE9wZW4pIHJldHVybjsKLQloYXNNYXJrcyA9IHRydWU7Ci0JdHJ5IHsKLQkJY3JlYXRlSW5uZXJTdHJlYW1JZlJlcXVpcmVkKCk7Ci0JCWlubmVyLm1hcmsocmVhZGxpbWl0KTsKLQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JICBMb2dnZXJGYWN0b3J5LmdldEluc3RhbmNlKCkuZ2V0TG9nZ2VyKCkubG9nKCJUaGUgZm9sbG93aW5nIElPRXhjZXB0aW9uIG9jY3VycmVkIGluIHRoZSBXU0RMIHZhbGlkYXRvcidzIExhenlVUkxJbnB1dFN0cmVhbS4iLCBJTG9nZ2VyLlNFVl9FUlJPUiwgZSk7Ci0JfQotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gbWFya1N1cHBvcnRlZCgpCi0gIHsKLQlpZiAocHJldGVuZEZpbGVJc1N0aWxsT3BlbikgcmV0dXJuIGZhbHNlOwotCXRyeSB7Ci0JCWNyZWF0ZUlubmVyU3RyZWFtSWZSZXF1aXJlZCgpOwotCQlpZiAoaW5uZXIgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwotCQlyZXR1cm4gaW5uZXIubWFya1N1cHBvcnRlZCgpOwotCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkgIExvZ2dlckZhY3RvcnkuZ2V0SW5zdGFuY2UoKS5nZXRMb2dnZXIoKS5sb2coIlRoZSBmb2xsb3dpbmcgSU9FeGNlcHRpb24gb2NjdXJyZWQgaW4gdGhlIFdTREwgdmFsaWRhdG9yJ3MgTGF6eVVSTElucHV0U3RyZWFtLiIsIElMb2dnZXIuU0VWX0VSUk9SLCBlKTsKLQl9Ci0JcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHVibGljIGludCByZWFkKCkgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLQlpZiAocHJldGVuZEZpbGVJc1N0aWxsT3BlbikgcmV0dXJuIC0xOwotCWNyZWF0ZUlubmVyU3RyZWFtSWZSZXF1aXJlZCgpOwotCWlmIChpbm5lciA9PSBudWxsKSB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIlN0cmVhbSBub3QgYXZhaWxhYmxlIik7Ci0JaW50IGJ5dGVzUmVhZCA9IGlubmVyLnJlYWQoKTsKLQlpZiAoYnl0ZXNSZWFkID09IC0xICYmICFoYXNNYXJrcykgY2xvc2VTdHJlYW0oKTsKLQlyZXR1cm4gYnl0ZXNSZWFkOwotICB9Ci0KLQotCXB1YmxpYyBpbnQgcmVhZChieXRlW10gYikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJaWYgKHByZXRlbmRGaWxlSXNTdGlsbE9wZW4pIHJldHVybiAtMTsKLQkJY3JlYXRlSW5uZXJTdHJlYW1JZlJlcXVpcmVkKCk7Ci0JCWlmIChpbm5lciA9PSBudWxsKSB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIlN0cmVhbSBub3QgYXZhaWxhYmxlIik7Ci0JCWludCBieXRlc1JlYWQgPSBpbm5lci5yZWFkKGIpOwotCQlpZiAoYnl0ZXNSZWFkID09IC0xICYmICFoYXNNYXJrcykgY2xvc2VTdHJlYW0oKTsKLQkJcmV0dXJuIGJ5dGVzUmVhZDsKLQl9Ci0KLSAgcHVibGljIGludCByZWFkKGJ5dGVbXSBiLCBpbnQgb2ZmLCBpbnQgbGVuKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgeyAgICAKLQlpZiAocHJldGVuZEZpbGVJc1N0aWxsT3BlbikgcmV0dXJuIC0xOwotCWNyZWF0ZUlubmVyU3RyZWFtSWZSZXF1aXJlZCgpOwotCWlmIChpbm5lciA9PSBudWxsKSB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIlN0cmVhbSBub3QgYXZhaWxhYmxlIik7Ci0JaW50IGJ5dGVzUmVhZCA9IGlubmVyLnJlYWQoYiwgb2ZmLCBsZW4pOwotCWlmIChieXRlc1JlYWQgPT0gLTEgJiYgIWhhc01hcmtzKSBjbG9zZVN0cmVhbSgpOwotCXJldHVybiBieXRlc1JlYWQ7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZXNldCgpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0JaWYgKHByZXRlbmRGaWxlSXNTdGlsbE9wZW4pIHJldHVybjsKLQljcmVhdGVJbm5lclN0cmVhbUlmUmVxdWlyZWQoKTsKLQlpZiAoaW5uZXIgPT0gbnVsbCkgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJTdHJlYW0gbm90IGF2YWlsYWJsZSIpOwotCWlubmVyLnJlc2V0KCk7Ci0gIH0KLQotICBwdWJsaWMgbG9uZyBza2lwKGxvbmcgbikgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsgICAKLQlpZiAocHJldGVuZEZpbGVJc1N0aWxsT3BlbikgcmV0dXJuIDA7Ci0JY3JlYXRlSW5uZXJTdHJlYW1JZlJlcXVpcmVkKCk7Ci0JaWYgKGlubmVyID09IG51bGwpIHRocm93IG5ldyBJT0V4Y2VwdGlvbigiU3RyZWFtIG5vdCBhdmFpbGFibGUiKTsKLQlyZXR1cm4gaW5uZXIuc2tpcChuKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3V0aWwvTWVzc2FnZUdlbmVyYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3V0aWwvTWVzc2FnZUdlbmVyYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTIzNDdiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91dGlsL01lc3NhZ2VHZW5lcmF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci1pbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7Ci0KLS8qKgotICogQSBjb252ZW5pZW5jZSBjbGFzcyBmb3Igd29ya2luZyB3aXRoIHJlc291cmNlcyBpbiBhIHJlc291cmNlIGJ1bmRsZS4KLSAqLwotcHVibGljIGNsYXNzIE1lc3NhZ2VHZW5lcmF0b3IKLXsKLSAgcHJvdGVjdGVkIFJlc291cmNlQnVuZGxlIHJlc291cmNlYnVuZGxlOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICogCi0gICAqIEBwYXJhbSByYiBUaGUgcmVzb3VyY2UgYnVuZGxlIHRvIHdvcmsgd2l0aC4KLSAgICovCi0gIHB1YmxpYyBNZXNzYWdlR2VuZXJhdG9yKFJlc291cmNlQnVuZGxlIHJiKQotICB7Ci0gICAgcmVzb3VyY2VidW5kbGUgPSByYjsKLSAgfQotCi0gIC8qKgotICAqIFNldCB0aGUgcmVzb3VyY2VidW5kbGUgdG8gdGhlIG9uZSBzcGVjaWZpZWQuCi0gICogCi0gICogQHBhcmFtIHJiIFRoZSByZXNvdXJjZSBidW5kbGUgdG8gc2V0LgotICAqLwotICBwcm90ZWN0ZWQgdm9pZCBzZXRSZXNvdXJjZUJ1bmRsZShSZXNvdXJjZUJ1bmRsZSByYikKLSAgewotICAgIHJlc291cmNlYnVuZGxlID0gcmI7Ci0gIH0KLQotICAvKioKLSAgKiBHZXRzIHRoZSBzdHJpbmcgcmVzb3VyY2UgZm9yIHRoZSBnaXZlbiBrZXkuCi0gICogCi0gICogQHBhcmFtIGtleSBUaGUga2V5IGZvciB0aGUgcmVzb3VyY2UuCi0gICogQHJldHVybiBUaGUgc3RyaW5nIGZyb20gdGhlIHJlc291cmNlIGJ1bmRsZS4KLSAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSkKLSAgewotICAgIHJldHVybiByZXNvdXJjZWJ1bmRsZS5nZXRTdHJpbmcoa2V5KTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIHRoZSBzdHJpbmcgcmVzb3VyY2UgZm9yIHRoZSBnaXZlbiBrZXkgYW5kIGRvZXMgb25lIHN1YnN0aXR1dGlvbi4KLSAgICogCi0gICAqIEBwYXJhbSBrZXkgVGhlIGtleSBmb3IgdGhlIHJlc291cmNlLgotICAgKiBAcGFyYW0gczEgVGhlIHN1YnN0aXR1dGlvbiB0byBwZXJmb3JtLgotICAgKiBAcmV0dXJuIFRoZSBzdHJpbmcgZnJvbSB0aGUgcmVzb3VyY2UgYnVuZGxlLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSwgT2JqZWN0IHMxKQotICB7Ci0gICAgcmV0dXJuIE1lc3NhZ2VGb3JtYXQuZm9ybWF0KGdldFN0cmluZyhrZXkpLCBuZXcgT2JqZWN0W10geyBzMSB9KTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIHRoZSBzdHJpbmcgcmVzb3VyY2UgZm9yIHRoZSBnaXZlbiBrZXkgYW5kIGRvZXMgdHdvIHN1YnN0aXR1dGlvbnMuCi0gICAqIAotICAgKiBAcGFyYW0ga2V5IFRoZSBrZXkgZm9yIHRoZSByZXNvdXJjZS4KLSAgICogQHBhcmFtIHMxIFRoZSBmaXJzdCBzdWJzdGl0dXRpb24gdG8gcGVyZm9ybS4KLSAgICogQHBhcmFtIHMyIFRoZSBzZWNvbmQgc3Vic3RpdHV0aW9uIHRvIHBlcmZvcm0uCi0gICAqIEByZXR1cm4gVGhlIHN0cmluZyBmcm9tIHRoZSByZXNvdXJjZSBidW5kbGUuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5LCBPYmplY3QgczEsIE9iamVjdCBzMikKLSAgewotICAgIHJldHVybiBNZXNzYWdlRm9ybWF0LmZvcm1hdChnZXRTdHJpbmcoa2V5KSwgbmV3IE9iamVjdFtdIHsgczEsIHMyIH0pOwotICB9Ci0KLSAgLyoqCi0gICAqICBHZXRzIHRoZSBzdHJpbmcgcmVzb3VyY2UgZm9yIHRoZSBnaXZlbiBrZXkgYW5kIGRvZXMgdGhyZWUgc3Vic3RpdHV0aW9ucy4KLSAgICogCi0gICAqIEBwYXJhbSBrZXkgVGhlIGtleSBmb3IgdGhlIHJlc291cmNlLgotICAgKiBAcGFyYW0gczEgVGhlIGZpcnN0IHN1YnN0aXR1dGlvbiB0byBwZXJmb3JtLgotICAgKiBAcGFyYW0gczIgVGhlIHNlY29uZCBzdWJzdGl0dXRpb24gdG8gcGVyZm9ybS4KLSAgICogQHBhcmFtIHMzIFRoZSB0aGlyZCBzdWJzdGl0dXRpb24gdG8gcGVyZm9ybS4KLSAgICogQHJldHVybiBUaGUgc3RyaW5nIGZyb20gdGhlIHJlc291cmNlIGJ1bmRsZS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXksIE9iamVjdCBzMSwgT2JqZWN0IHMyLCBPYmplY3QgczMpCi0gIHsKLSAgICByZXR1cm4gTWVzc2FnZUZvcm1hdC5mb3JtYXQoZ2V0U3RyaW5nKGtleSksIG5ldyBPYmplY3RbXSB7IHMxLCBzMiwgczMgfSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvQ2xhc3Nsb2FkZXJXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9DbGFzc2xvYWRlcldTREwxMVZhbGlkYXRvckRlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2YjdmNjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9DbGFzc2xvYWRlcldTREwxMVZhbGlkYXRvckRlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTE7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuSUxvZ2dlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuTG9nZ2VyRmFjdG9yeTsKLQotcHVibGljIGNsYXNzIENsYXNzbG9hZGVyV1NETDExVmFsaWRhdG9yRGVsZWdhdGUgZXh0ZW5kcyBXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZQotewotICBwcml2YXRlIFN0cmluZyB2YWxpZGF0b3JDbGFzc25hbWUgPSBudWxsOwotICBwcml2YXRlIENsYXNzTG9hZGVyIGNsYXNzTG9hZGVyID0gbnVsbDsKLQotICAvKioKLSAgICogQ3JlYXRlIGEgZGVsZWdhdGUgZm9yIGEgdmFsaWRhdG9yIGJ5IGl0cyBjbGFzcyBuYW1lLgotICAgKiAKLSAgICogQHBhcmFtIHZhbGlkYXRvckNsYXNzbmFtZSBUaGUgbmFtZSBvZiB0aGUgdmFsaWRhdG9yIGNsYXNzLgotICAgKi8KLSAgcHVibGljIENsYXNzbG9hZGVyV1NETDExVmFsaWRhdG9yRGVsZWdhdGUoU3RyaW5nIHZhbGlkYXRvckNsYXNzbmFtZSkKLSAgewotCXRoaXMudmFsaWRhdG9yQ2xhc3NuYW1lID0gdmFsaWRhdG9yQ2xhc3NuYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhIGRlbGVnYXRlIGZvciBhIHZhbGlkYXRvciBieSBpdHMgY2xhc3MgbmFtZSBhbmQgCi0gICAqIGEgY2xhc3MgbG9hZGVyIHRvIGxvYWQgdGhlIHZhbGlkYXRvci4KLSAgICogCi0gICAqIEBwYXJhbSB2YWxpZGF0b3JDbGFzc25hbWUgVGhlIG5hbWUgb2YgdGhlIHZhbGlkYXRvciBjbGFzcy4KLSAgICogQHBhcmFtIGNsYXNzTG9hZGVyIFRoZSBjbGFzcyBsb2FkZXIgdG8gdXNlIHRvIGxvYWQgdGhlIHZhbGlkYXRvci4KLSAgICovCi0gIHB1YmxpYyBDbGFzc2xvYWRlcldTREwxMVZhbGlkYXRvckRlbGVnYXRlKFN0cmluZyB2YWxpZGF0b3JDbGFzc25hbWUsIENsYXNzTG9hZGVyIGNsYXNzTG9hZGVyKQotICB7Ci0gICAgdGhpcyh2YWxpZGF0b3JDbGFzc25hbWUpOwotICAgIHRoaXMuY2xhc3NMb2FkZXIgPSBjbGFzc0xvYWRlcjsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLldTREwxMVZhbGlkYXRvckRlbGVnYXRlI2xvYWRWYWxpZGF0b3IoKQotICAgKi8KLSAgcHJvdGVjdGVkIElXU0RMMTFWYWxpZGF0b3IgbG9hZFZhbGlkYXRvcigpCi0gIHsKLQlJV1NETDExVmFsaWRhdG9yIHZhbGlkYXRvciA9IG51bGw7Ci0JaWYoY2xhc3NMb2FkZXIgPT0gbnVsbCkKLQl7Ci0JICBjbGFzc0xvYWRlciA9IGdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKTsKLQl9Ci0JdHJ5Ci0JewotICAgICAgQ2xhc3MgdmFsaWRhdG9yQ2xhc3MgPQotICAgICAgY2xhc3NMb2FkZXIgIT0gbnVsbCA/IGNsYXNzTG9hZGVyLmxvYWRDbGFzcyh2YWxpZGF0b3JDbGFzc25hbWUpIDogQ2xhc3MuZm9yTmFtZSh2YWxpZGF0b3JDbGFzc25hbWUpOwotCi0gICAgICB2YWxpZGF0b3IgPSAoSVdTREwxMVZhbGlkYXRvcil2YWxpZGF0b3JDbGFzcy5uZXdJbnN0YW5jZSgpOwotICAgIH0KLSAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgewotICAgICAgTG9nZ2VyRmFjdG9yeS5nZXRJbnN0YW5jZSgpLmdldExvZ2dlcigpLmxvZygiVW5hYmxlIHRvIGxvYWQgdmFsaWRhdG9yICIgKyB2YWxpZGF0b3JDbGFzc25hbWUsIElMb2dnZXIuU0VWX0VSUk9SLCB0KTsKLSAgICB9Ci0JcmV0dXJuIHZhbGlkYXRvcjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9JV1NETDExVmFsaWRhdGlvbkluZm8uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvSVdTREwxMVZhbGlkYXRpb25JbmZvLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0YTY5MmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9JV1NETDExVmFsaWRhdGlvbkluZm8uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTE7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLmdyYW1tYXJzLlhNTEdyYW1tYXJQb29sOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5yZXNvbHZlci5VUklSZXNvbHZlcjsKLQotLyoqCi0gKiBBbiBpbnRlcmZhY2UgZm9yIFdTREwgMS4xIHZhbGlkYXRpb24gaW5mb3JtYXRpb24uIFVzZXMgYW4gZXhpc3RpbmcKLSAqIHZhbGlkYXRpb24gaW5mbyBvYmplY3QgYW5kIHByb3ZpZGVzIG1ldGhvZHMgdG8gc2V0IGFuZCByZXRyaWV2ZQotICogc2NoZW1hcyBhbmQgY29udmVuaWVuY2UgbWV0aG9kcyBmb3Igc2V0dGluZyBlcnJvcnMgd2l0aCBvYmplY3RzLgotICovCi1wdWJsaWMgaW50ZXJmYWNlIElXU0RMMTFWYWxpZGF0aW9uSW5mbwotewotICAvKioKLSAgICogUmV0dXJucyB0aGUgVVJJIG9mIHRoZSBmaWxlIGJlaW5nIHZhbGlkYXRlZC4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIFVSSSBvZiB0aGUgZmlsZSBiZWluZyB2YWxpZGF0ZWQuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEZpbGVVUkkoKTsKLSAgCi0gIC8qKgotICAgKiBBZGQgYSBzY2hlbWEgdG8gdGhlIGxpc3Qgb2Ygc2NoZW1hcyBhdmFpbGFibGUgZm9yIHRoaXMgV1NETCBkb2N1bWVudC4KLSAgICogCi0gICAqIEBwYXJhbSB4c01vZGVsIFRoZSBzY2hlbWEgdG8gYWRkIHRvIHRoZSBsaXN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkU2NoZW1hKFhTTW9kZWwgeHNNb2RlbCk7Ci0gIAotICAvKioKLSAgICogR2V0IGFuIGFycmF5IG9mIGFsbCB0aGUgc2NoZW1hcyBhdmFpbGFibGUgZm9yIHRoaXMgV1NETCBkb2N1bWVudC4KLSAgICogCi0gICAqIEByZXR1cm4gQW4gYXJyYXkgb2YgYWxsIHRoZSBzY2hlbWFzIGF2YWlsYWJsZSBmb3IgdGhpcyBXU0RMIGRvY3VtZW50LgotICAgKi8KLSAgcHVibGljIFhTTW9kZWxbXSBnZXRTY2hlbWFzKCk7Ci0gIAotICAvKioKLSAgICogQ2xlYXIgYWxsIHRoZSBzdG9yZWQgc2NoZW1hcy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGNsZWFyU2NoZW1hcygpOwotICAKLSAgLyoqCi0gICAqIFNldCB0aGUgZWxlbWVudCBsb2NhdGlvbnMgaGFzaHRhYmxlLgotICAgKiAKLSAgICogQHBhcmFtIGVsZW1lbnRMb2NhdGlvbnMgVGhlIGhhc2h0YWJsZSB0byBzZXQgd2l0aCB0aGUgZWxlbWVudCBsb2NhdGlvbnMuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFbGVtZW50TG9jYXRpb25zKEhhc2h0YWJsZSBlbGVtZW50TG9jYXRpb25zKTsKLSAgCi0gIC8qKgotICAgKiBDb252ZW5pZW5jZSBtZXRob2QgZm9yIGV4dGVuc2libHkgdmFsaWRhdG9ycyB0byBhZGQgZXJyb3IgbWVzc2FnZXMuCi0gICAqIAotICAgKiBAcGFyYW0gbWVzc2FnZSBUaGUgZXJyb3IgdG8gYWRkLgotICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgb2JqZWN0IHRvIGFkZCB0aGUgZXJyb3IgZm9yLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkRXJyb3IoU3RyaW5nIG1lc3NhZ2UsIE9iamVjdCBlbGVtZW50KTsKLSAgCi0gIC8qKgotICAgKiBDb252ZW5pZW5jZSBtZXRob2QgZm9yIGV4dGVuc2libHkgdmFsaWRhdG9ycyB0byBhZGQgZXJyb3IgbWVzc2FnZXMuCi0gICAqIAotICAgKiBAcGFyYW0gbWVzc2FnZSBUaGUgZXJyb3IgdG8gYWRkLgotICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgb2JqZWN0IHRvIGFkZCB0aGUgZXJyb3IgZm9yLgotICAgKiBAcGFyYW0gZXJyb3JLZXkgVGhlIGVycm9yIGtleSBmb3IgdGhpcyBtZXNzYWdlCi0gICAqIEBwYXJhbSBtZXNzYWdlQXJndW1lbnRzIFRoZSBzdHJpbmdzIHVzZWQgdG8gY3JlYXRlIHRoZSBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkRXJyb3IoU3RyaW5nIG1lc3NhZ2UsIE9iamVjdCBlbGVtZW50LCBTdHJpbmcgZXJyb3JLZXksIE9iamVjdFtdIG1lc3NhZ2VBcmd1bWVudHMpOwotICAKLSAgLyoqCi0gICAqIEFkZCBhbiBlcnJvciBtZXNzYWdlIGF0IHRoZSBnaXZlbiBsaW5lIGFuZCBjb2x1bW4uCi0gICAqIAotICAgKiBAcGFyYW0gbWVzc2FnZSBUaGUgZXJyb3IgdG8gYWRkLgotICAgKiBAcGFyYW0gbGluZSBUaGUgbGluZSBsb2NhdGlvbiBvZiB0aGUgZXJyb3IuCi0gICAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbHVtbiBsb2NhdGlvbiBvZiB0aGUgZXJyb3IuCi0gICAqIEBwYXJhbSB1cmkgVGhlIHVyaSBvZiB0aGUgZmlsZSBjb250YWluaW5nIHRoZSBlcnJvci4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEVycm9yKFN0cmluZyBtZXNzYWdlLCBpbnQgbGluZSwgaW50IGNvbHVtbiwgU3RyaW5nIHVyaSk7Ci0gIAotICAvKioKLSAgICogQ29udmVuaWVuY2UgbWV0aG9kIGZvciBleHRlbnNpYmx5IHZhbGlkYXRvcnMgdG8gYWRkIHdhcm5pbmcgbWVzc2FnZXMuCi0gICAqIAotICAgKiBAcGFyYW0gbWVzc2FnZSBUaGUgd2FybmluZyB0byBhZGQuCi0gICAqIEBwYXJhbSBlbGVtZW50IFRoZSBvYmplY3QgdG8gYWRkIHRoZSB3YXJuaW5nIGZvci4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZFdhcm5pbmcoU3RyaW5nIG1lc3NhZ2UsIE9iamVjdCBlbGVtZW50KTsKLSAgCi0gIC8qKgotICAgKiBBZGQgYSB3YXJuaW5nIG1lc3NhZ2UgYXQgdGhlIGdpdmVuIGxpbmUgYW5kIGNvbHVtbi4KLSAgICogCi0gICAqIEBwYXJhbSBtZXNzYWdlIFRoZSB3YXJuaW5nIHRvIGFkZC4KLSAgICogQHBhcmFtIGxpbmUgVGhlIGxpbmUgbG9jYXRpb24gb2YgdGhlIHdhcm5pbmcuCi0gICAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbHVtbiBsb2NhdGlvbiBvZiB0aGUgd2FybmluZy4KLSAgICogQHBhcmFtIHVyaSBUaGUgdXJpIG9mIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIHdhcm5pbmcuCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRXYXJuaW5nKFN0cmluZyBtZXNzYWdlLCBpbnQgbGluZSwgaW50IGNvbHVtbiwgU3RyaW5nIHVyaSk7Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBVUkkgcmVzb2x2ZXIgaW4gdXNlIGZvciB0aGlzIHZhbGlkYXRpb24uIFRoZSBVUkkgcmVzb2x2ZXIKLSAgICogcmV0dXJuZWQgaXMgYWN0dWFsbHkgYSBVUkkgcmVzb2x2ZXIgaGFuZGxlciB0aGF0IHdpbGwgCi0gICAqIGl0ZXJhdGUgdGhyb3VnaCBhbGwgb2YgdGhlIHJlZ2lzdGVyZWQgVVJJIHJlc29sdmVycy4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIFVSSSByZXNvbHZlciBoYW5kbGVyLgotICAgKi8KLSAgcHVibGljIFVSSVJlc29sdmVyIGdldFVSSVJlc29sdmVyKCk7Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBzY2hlbWEgY2FjaGUgaWYgb25lIGlzIHNwZWNpZmllZC4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIHNjaGVtYSBjYWNoZSBpZiBvbmUgaXMgc3BlY2lmaWVkLCBudWxsIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBYTUxHcmFtbWFyUG9vbCBnZXRTY2hlbWFDYWNoZSgpOwotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgWE1MIGNhY2hlIGlmIG9uZSBpcyBzcGVjaWZpZWQuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBYTUwgY2FjaGUgaWYgb25lIGlzIHNwZWNpZmllZCwgbnVsbCBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgWE1MR3JhbW1hclBvb2wgZ2V0WE1MQ2FjaGUoKTsKLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9JV1NETDExVmFsaWRhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL0lXU0RMMTFWYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGFhYmNkNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL0lXU0RMMTFWYWxpZGF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi0vKioKLSAqIEludGVyZmFjZSBmb3IgYSB2YWxpZGF0b3IgcGx1Z2dlZCBpbnRvIHRoZSBXU0RMIDEuMSB2YWxpZGF0b3IuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSVdTREwxMVZhbGlkYXRvcgotewotICAvKioKLSAgICogVmFsaWRhdGUgdGhlIGdpdmVuIGVsZW1lbnQuCi0gICAqIAotICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgZWxlbWVudCB0byB2YWxpZGF0ZS4KLSAgICogQHBhcmFtIHBhcmVudHMgQSBsaXN0IG9mIHBhcmVudHMgb2YgdGhpcyBlbGVtZW50LgotICAgKiBAcGFyYW0gdmFsSW5mbyBUaGUgY3VycmVudCB2YWxpZGF0aW9uIGluZm9ybWF0aW9uLgotICAgKi8KLSAgcHVibGljIHZvaWQgdmFsaWRhdGUoT2JqZWN0IGVsZW1lbnQsIExpc3QgcGFyZW50cywgSVdTREwxMVZhbGlkYXRpb25JbmZvIHZhbEluZm8pOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9JbXBvcnRIb2xkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvSW1wb3J0SG9sZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhM2FmMmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9JbXBvcnRIb2xkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTE7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5JbXBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLmdyYW1tYXJzLlhNTEdyYW1tYXJQb29sOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5JVmFsaWRhdGlvbk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5yZXNvbHZlci5JVVJJUmVzb2x1dGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnV0aWwuRXJyb3JNZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudXRpbC5NZXNzYWdlR2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLnhzZC5YU0RWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC54bWwuQWJzdHJhY3RYTUxDb25mb3JtYW5jZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC54bWwuRGVmYXVsdFhNTFZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbC5JWE1MVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sLlhNTENhdGFsb2dSZXNvbHZlcjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy54bWwuc2F4LklucHV0U291cmNlOwotCi1pbXBvcnQgY29tLmlibS53c2RsLkNvbnN0YW50czsKLWltcG9ydCBjb20uaWJtLndzZGwudXRpbC5TdHJpbmdVdGlsczsKLWltcG9ydCBjb20uaWJtLndzZGwudXRpbC54bWwuRE9NVXRpbHM7Ci1pbXBvcnQgY29tLmlibS53c2RsLnV0aWwueG1sLlFOYW1lVXRpbHM7Ci0KLS8qKgotICogQSBjbGFzcyB0byBob2xkIGFuZCBwYXJzZSBhbiBpbXBvcnQgZWxlbWVudC4KLSAqLwotcHVibGljIGNsYXNzIEltcG9ydEhvbGRlciBpbXBsZW1lbnRzIENvbXBhcmFibGUKLXsKLSAgcHJpdmF0ZSBNZXNzYWdlR2VuZXJhdG9yIG1lc3NhZ2VnZW5lcmF0b3I7Ci0gIAotICBwcml2YXRlIFdTRExEb2N1bWVudCBpbXBvcnRpbmdXU0RMRG9jID0gbnVsbDsKLSAgcHJpdmF0ZSBXU0RMRG9jdW1lbnQgd3NkbERvY3VtZW50ID0gbnVsbDsKLSAgcHJpdmF0ZSBEZWZpbml0aW9uIGltcG9ydGluZ0RlZiA9IG51bGw7Ci0gIHByaXZhdGUgRWxlbWVudCBpbXBvcnRpbmdEb2NJbXBvcnRFbGVtZW50ID0gbnVsbDsKLSAgcHJpdmF0ZSBTdHJpbmcgbmFtZXNwYWNlID0gbnVsbDsKLSAgcHJpdmF0ZSBTdHJpbmcgbG9jYXRpb24gPSBudWxsOwotICBwcml2YXRlIFN0cmluZyBjbGFzc3BhdGhVUkkgPSBudWxsOwotICBwcml2YXRlIFN0cmluZyBjb250ZXh0VVJJID0gbnVsbDsKLSAgcHJpdmF0ZSBpbnQgZGVwdGg7Ci0gIHByaXZhdGUgRWxlbWVudCBlbGVtZW50ID0gbnVsbDsKLSAgcHJpdmF0ZSBMaXN0IHNjaGVtYXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIHByaXZhdGUgYm9vbGVhbiBpc1dTRExGaWxlSW1wb3J0ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIGltcG9ydEludmFsaWQgPSBmYWxzZTsKLSAgcHJpdmF0ZSBJbXBvcnQgaW1wb3J0RGVmID0gbnVsbDsKLSAgcHJpdmF0ZSBJV1NETDExVmFsaWRhdGlvbkluZm8gdmFsaW5mbzsKLSAgCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICogCi0gICAqIEBwYXJhbSBuYW1lc3BhY2UgVGhlIG5hbWVzcGFjZSBvZiB0aGUgaW1wb3J0LgotICAgKiBAcGFyYW0gbG9jYXRpb24gVGhlIGxvY2F0aW9uIG9mIHRoZSBpbXBvcnQuCi0gICAqIEBwYXJhbSBjb250ZXh0VVJJIFRoZSBjb250ZXh0IFVSSSBmb3IgcmVzb2x2aW5nIHRoZSBpbXBvcnQgbG9jYXRpb24uCi0gICAqIEBwYXJhbSB3c2RsRG9jIFRoZSBXU0RMRG9jdW1lbnQgdGhhdCBjb250YWlucyB0aGUgaW1wb3J0LgotICAgKiBAcGFyYW0gZGVwdGggVGhlIGRlcHRoIG9mIHRoZSBpbXBvcnQuCi0gICAqIEBwYXJhbSBpbXBvcnRpbmdEb2NJbXBvcnRFbGVtZW50IFRoZSBlbGVtZW50IHJlcHJlc2VudGluZyB0aGUgaW1wb3J0IGluIHRoZSBlbmNhcHN1bGF0aW5nIFdTRExEb2N1bWVudC4KLSAgICogQHBhcmFtIG1lc3NhZ2VnZW5lcmF0b3IgQSBtZXNzYWdlZ2VuZXJhdG9yIGZvciBvYnRhaW5pbmcgc3RyaW5ncy4KLSAgICogQHBhcmFtIHZhbGluZm8gVGhlIFdTREwxMVZhbGlkYXRpb25JbmZvIGZvciByZXBvcnRpbmcgbWVzc2FnZXMuCi0gICAqLwotICBwdWJsaWMgSW1wb3J0SG9sZGVyKFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBsb2NhdGlvbiwgU3RyaW5nIGNvbnRleHRVUkksIFdTRExEb2N1bWVudCBpbXBvcnRpbmdXU0RMRG9jLCBpbnQgZGVwdGgsIEVsZW1lbnQgaW1wb3J0aW5nRG9jSW1wb3J0RWxlbWVudCwgTWVzc2FnZUdlbmVyYXRvciBtZXNzYWdlZ2VuZXJhdG9yLCBJV1NETDExVmFsaWRhdGlvbkluZm8gdmFsaW5mbykKLSAgewotICAgIHRoaXMubWVzc2FnZWdlbmVyYXRvciA9IG1lc3NhZ2VnZW5lcmF0b3I7Ci0gICAgdGhpcy52YWxpbmZvID0gdmFsaW5mbzsKLSAgICB0aGlzLmltcG9ydGluZ1dTRExEb2MgPSBpbXBvcnRpbmdXU0RMRG9jOwotICAgIGlmKGltcG9ydGluZ1dTRExEb2MgIT0gbnVsbCkKLSAgICB7Ci0gICAgICB0aGlzLmltcG9ydGluZ0RlZiA9IGltcG9ydGluZ1dTRExEb2MuZ2V0RGVmaW5pdGlvbigpOwotICAgIH0KLSAgICB0aGlzLmltcG9ydGluZ0RvY0ltcG9ydEVsZW1lbnQgPSBpbXBvcnRpbmdEb2NJbXBvcnRFbGVtZW50OwotICAgIHRoaXMuZGVwdGggPSBkZXB0aDsKLSAgICB0aGlzLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTsKLSAgICB0aGlzLmxvY2F0aW9uID0gbG9jYXRpb247Ci0gICAgCi0gICAgLy8gIEFsbG93IFdTREwgaW1wb3J0cyB0byBoYXZlIG5vIGxvY2F0aW9uIGF0dHJpYnV0ZSBldmVuIHRob3VnaCBpdCBpcyByZXF1aXJlZC4KLSAgICAvLyBTY2hlbWEgd2lsbCBub3JtYWxseSBjYXRjaCB0aGUgcHJvYmxlbSBidXQgdGhpcyBhbGxvd3MgdXNlcnMgdG8gb3ZlcnJpZGUgdGhlCi0gICAgLy8gc2NoZW1hIGFuZCBoYXZlIHRoZSB2YWxpZGF0b3IgcnVuLgotICAgIGlmICh0aGlzLmxvY2F0aW9uID09IG51bGwpCi0gICAgewotICAgICAgdGhpcy5sb2NhdGlvbiA9IG5hbWVzcGFjZTsKLSAgICB9Ci0gICAgdGhpcy5jb250ZXh0VVJJID0gY29udGV4dFVSSTsKLSAgICAKLSAgICB0aGlzLmxvY2F0aW9uID0gdGhpcy5sb2NhdGlvbi5yZXBsYWNlKCdcXCcsJy8nKTsKLSAgICBJVVJJUmVzb2x1dGlvblJlc3VsdCBjbGFzc3BhdGhVUkkgPSB2YWxpbmZvLmdldFVSSVJlc29sdmVyKCkucmVzb2x2ZSh0aGlzLmNvbnRleHRVUkksIHRoaXMubmFtZXNwYWNlLCB0aGlzLmxvY2F0aW9uKTsKLSAgICBpZihjbGFzc3BhdGhVUkkuZ2V0TG9naWNhbExvY2F0aW9uKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICB0aGlzLmxvY2F0aW9uID0gY2xhc3NwYXRoVVJJLmdldExvZ2ljYWxMb2NhdGlvbigpOwotICAgIH0KLSAgICBpZihjbGFzc3BhdGhVUkkuZ2V0UGh5c2ljYWxMb2NhdGlvbigpICE9IG51bGwpCi0gICAgewotICAgICAgdGhpcy5jbGFzc3BhdGhVUkkgPSBjbGFzc3BhdGhVUkkuZ2V0UGh5c2ljYWxMb2NhdGlvbigpOwotICAgICAgdGhpcy5jb250ZXh0VVJJID0gbnVsbDsKLSAgICB9IAotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBpbml0aWFsaXplKCkKLSAgewotICAgIEVsZW1lbnQgZG9jdW1lbnRFbGVtZW50ID0gbnVsbDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBkb2N1bWVudEVsZW1lbnQgPSBnZXRFbGVtZW50KCk7Ci0gICAgfQotICAgIGNhdGNoKFdTRExFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgfQotICAgIGlmKGRvY3VtZW50RWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgCSAgLy8gSGFuZGxlIFdTREwgaW1wb3J0cy4KLSAgICAgIGlmIChRTmFtZVV0aWxzLm1hdGNoZXMoQ29uc3RhbnRzLlFfRUxFTV9ERUZJTklUSU9OUywgZG9jdW1lbnRFbGVtZW50KSkKLSAgICAgIHsKLSAgICAgICAgaWYoaXNYTUxWYWxpZCh0aGlzLmNsYXNzcGF0aFVSSSkpCi0gICAgICAgIHsKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB3c2RsRG9jdW1lbnQgPSBuZXcgV1NETERvY3VtZW50KHRoaXMubG9jYXRpb24sIGRvY3VtZW50RWxlbWVudCwgdGhpcy5kZXB0aCwgdGhpcy5tZXNzYWdlZ2VuZXJhdG9yLCB0aGlzLnZhbGluZm8pOwotICAgICAgICAgICAgY3JlYXRlV1NETEltcG9ydCh3c2RsRG9jdW1lbnQpOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaChXU0RMRXhjZXB0aW9uIGUpCi0gICAgICAgICAgewotICAgICAgICAgICAgdmFsaW5mby5hZGRFcnJvcihtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZygiX1VOQUJMRV9UT19JTVBPUlRfQkFEX0xPQ0FUSU9OIiwgIiciICsgaW1wb3J0RGVmLmdldExvY2F0aW9uVVJJKCkgKyAiJyIpLCBpbXBvcnRpbmdEb2NJbXBvcnRFbGVtZW50KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIC8vIEhhbmRsZSBzY2hlbWEgaW1wb3J0cy4KLSAgICAgIGVsc2UgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX1hTRF8yMDAxLCBkb2N1bWVudEVsZW1lbnQpKQotICAgICAgewotICAgICAgICBjcmVhdGVYU0RJbXBvcnQoKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBib29sZWFuIGlzWE1MVmFsaWQoU3RyaW5nIHVyaSkKLSAgewotICAgIElYTUxWYWxpZGF0b3IgeG1sVmFsaWRhdG9yID0gQWJzdHJhY3RYTUxDb25mb3JtYW5jZUZhY3RvcnkuZ2V0SW5zdGFuY2UoKS5nZXRYTUxWYWxpZGF0b3IoKTsKLSAgICB4bWxWYWxpZGF0b3Iuc2V0RmlsZSh1cmkpOwotICAgIHhtbFZhbGlkYXRvci5zZXRVUklSZXNvbHZlcih2YWxpbmZvLmdldFVSSVJlc29sdmVyKCkpOwotICAgIC8veG1sVmFsaWRhdG9yLnNldFZhbGlkYXRpb25JbmZvKHZhbEluZm8pOwotICAgIGlmKHhtbFZhbGlkYXRvciBpbnN0YW5jZW9mIERlZmF1bHRYTUxWYWxpZGF0b3IpCi0gICAgewotICAgIAlYTUxHcmFtbWFyUG9vbCBncmFtbWFyUG9vbCA9IHZhbGluZm8uZ2V0WE1MQ2FjaGUoKTsKLSAgICAgICAgaWYoZ3JhbW1hclBvb2wgIT0gbnVsbCkKLSAgICAgICAgICAoKERlZmF1bHRYTUxWYWxpZGF0b3IpeG1sVmFsaWRhdG9yKS5zZXRHcmFtbWFyUG9vbChncmFtbWFyUG9vbCk7Ci0gICAgfQotICAgIHhtbFZhbGlkYXRvci5ydW4oKTsKLSAgICAvLyBpZiB0aGVyZSBhcmUgbm8geG1sIGNvbmZvcm1hbmNlIHByb2JsZW1zIGdvIG9uIHRvIGNoZWNrIHRoZSB3c2RsIHN0dWZmCi0gICAgaWYgKHhtbFZhbGlkYXRvci5oYXNFcnJvcnMoKSkKLSAgICB7Ci0gICAgICAvLyB0ZW1wIGhhbmRsaW5nIG9mIFhNTCBlcnJvcnMgdW50aWwgdmFsaWRhdG9yIGlzIHVwZGF0ZWQuCi0gICAgICBMaXN0IGVycm9ycyA9IHhtbFZhbGlkYXRvci5nZXRFcnJvcnMoKTsKLSAgICAgIEl0ZXJhdG9yIGVycm9yc0l0ZXIgPSBlcnJvcnMuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChlcnJvcnNJdGVyLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgSVZhbGlkYXRpb25NZXNzYWdlIHZhbE1lcyA9IChJVmFsaWRhdGlvbk1lc3NhZ2UpZXJyb3JzSXRlci5uZXh0KCk7Ci0gICAgICAgIHZhbGluZm8uYWRkRXJyb3IodmFsTWVzLmdldE1lc3NhZ2UoKSwgdmFsTWVzLmdldExpbmUoKSwgdmFsTWVzLmdldENvbHVtbigpLCB2YWxNZXMuZ2V0VVJJKCkpOwotICAgICAgfQotICAgICAgaW1wb3J0SW52YWxpZCA9IHRydWU7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBpbXBvcnRpbmcgV1NETERvY3VtZW50LgotICAgKiAKLSAgICogQHJldHVybiBUaGUgaW1wb3J0aW5nIFdTRExEb2N1bWVudC4KLSAgICovCi0gIHB1YmxpYyBXU0RMRG9jdW1lbnQgZ2V0SW1wb3J0aW5nRG9jdW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIGltcG9ydGluZ1dTRExEb2M7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIFdTREwgZG9jdW1lbnQgdGhpcyBpbXBvcnQgcmVwcmVzZW50cy4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIFdTREwgZG9jdW1lbnQgdGhpcyBpbXBvcnQgcmVwcmVzZW50cy4KLSAgICovCi0gIHB1YmxpYyBXU0RMRG9jdW1lbnQgZ2V0V1NETERvY3VtZW50KCkKLSAgewotICAgIHJldHVybiB3c2RsRG9jdW1lbnQ7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIG5hbWVzcGFjZS4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIG5hbWVzcGFjZS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlKCkKLSAgewotICAgIHJldHVybiBuYW1lc3BhY2U7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIGxvY2F0aW9uLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgbG9jYXRpb24uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldExvY2F0aW9uKCkKLSAgewotICAgIHJldHVybiBsb2NhdGlvbjsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgY29udGV4dCBVUkkuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBjb250ZXh0IFVSSS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q29udGV4dFVSSSgpCi0gIHsKLSAgICByZXR1cm4gY29udGV4dFVSSTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgZGVwdGggaW4gdGhlIFdTREwgdHJlZS4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIGRlcHRoIGluIHRoZSBXU0RMIHRyZWUuCi0gICAqLwotICBwdWJsaWMgaW50IGdldERlcHRoKCkKLSAgewotICAgIHJldHVybiBkZXB0aDsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgY29udGFpbmluZyBkZWZpbnRpb25zIGVsZW1lbnQuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBjb250YWluaW5nIGRlZmluaXRpb25zIGVsZW1lbnQuCi0gICAqLwotICBwdWJsaWMgRGVmaW5pdGlvbiBnZXRJbXBvcnRpbmdEZWZpbml0aW9uKCkKLSAgewotICAgIHJldHVybiBpbXBvcnRpbmdEZWY7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIGVsZW1lbnQgZm9yIHRoaXMgaW1wb3J0LgotICAgKiAKLSAgICogQHJldHVybiBUaGUgZWxlbWVudCBmb3IgdGhpcyBpbXBvcnQuCi0gICAqIEB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICAgKi8KLSAgcHVibGljIEVsZW1lbnQgZ2V0RWxlbWVudCgpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBpZihlbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIGVsZW1lbnQ7Ci0gICAgfQotICAgIAotICAgIFN0cmluZyBsb2NhdGlvblVSSSA9IGxvY2F0aW9uOwotICAgIC8vSW1wb3J0IGltcG9ydERlZiA9IGltcG9ydGluZ0RlZi5jcmVhdGVJbXBvcnQoKTsKLSAgICAKLSAgICAvLyAgQWxsb3cgbG9jYXRpbmcgV1NETCBkb2N1bWVudHMgdXNpbmcgYW55IHJlZ2lzdGVyZWQgVVJJIHJlc29sdmVyLgotICAgIC8vU3RyaW5nIGNsYXNzcGF0aFVSSSA9IFVSSVJlc29sdmVyLmdldEluc3RhbmNlKCkucmVzb2x2ZShjb250ZXh0VVJJLCBuYW1lc3BhY2VVUkksIGxvY2F0aW9uVVJJKTsKLS8vICAgIGlmICghY2xhc3NwYXRoVVJJLmVxdWFscyhsb2NhdGlvblVSSSkpCi0vLyAgICB7Ci0vLyAgICAgIGxvY2F0aW9uVVJJID0gY2xhc3NwYXRoVVJJOwotLy8gICAgICBjb250ZXh0VVJJID0gbnVsbDsKLS8vICAgIH0KLSAgICBSZWFkZXIgcmVhZGVyID0gbnVsbDsKLSAgICBpZiAobG9jYXRpb25VUkkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgLy9TdHJpbmcgY29udGV4dFVSSSA9IGRlZi5nZXREb2N1bWVudEJhc2VVUkkoKTsKLSAgICAgICAgICAvL0RlZmluaXRpb24gaW1wb3J0ZWREZWYgPSBudWxsOwotICAgICAgICAgIAotICAgICAgICAgIElucHV0U291cmNlIGlucHV0U291cmNlID0gbnVsbDsKLSAgICAgICAgICBVUkwgdXJsID0gbnVsbDsKLQotICAgICAgICAgIAotICAgICAgICAgICAgVVJMIGNvbnRleHRVUkwgPSAoY29udGV4dFVSSSAhPSBudWxsKSA/IFN0cmluZ1V0aWxzLmdldFVSTChudWxsLCBjb250ZXh0VVJJKSA6IG51bGw7Ci0KLSAgICAgICAgICAgIHVybCA9IFN0cmluZ1V0aWxzLmdldFVSTChjb250ZXh0VVJMLCBsb2NhdGlvblVSSSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEhhbmRsZSBmaWxlOi8vIHVybHMuIFRoZSBjb3JyZWN0IGZvcm1hdCBzaG91bGQgYmUgZmlsZTovLy8gb3IgZmlsZTovLgotICAgICAgICAgICAgU3RyaW5nIHVybEF1dGhvcml0eSA9IHVybC5nZXRBdXRob3JpdHkoKTsKLSAgICAgICAgICAgIFN0cmluZyB1cmxQcm90b2NvbCA9IHVybC5nZXRQcm90b2NvbCgpOwotICAgICAgICAgICAgaWYodXJsQXV0aG9yaXR5ICE9bnVsbCAmJiB1cmxQcm90b2NvbC5lcXVhbHNJZ25vcmVDYXNlKCJmaWxlIikgJiYgIXVybEF1dGhvcml0eS5lcXVhbHMoIiIpKQotICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgdXJsID0gbmV3IFVSTCh1cmxQcm90b2NvbCwiIiwiLyIgKyB1cmxBdXRob3JpdHkgKyB1cmwuZ2V0RmlsZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgU3RyaW5nIHVybFN0cmluZyA9IHVybC50b1N0cmluZygpOwotCQkJLy8gVGVzdCBmb3IgY2FzZSBzZW5zaXRpdml0eSBvbiBsb2NhbCBmaWxlcy4KLQkJCWlmKHVybFN0cmluZy5zdGFydHNXaXRoKCJmaWxlOiIpKQotCQkJewotCQkJICBGaWxlIHRlc3RmaWxlID0gbmV3IEZpbGUodXJsLmdldEZpbGUoKSk7Ci0JCQkgIFN0cmluZyB0ZXN0ZmlsZVN0cmluZyA9IHRlc3RmaWxlLmdldEFic29sdXRlUGF0aCgpOwotCQkJICBTdHJpbmcgY2Fub25pY2FsZmlsZVN0cmluZyA9IHRlc3RmaWxlLmdldENhbm9uaWNhbFBhdGgoKTsKLQotICAgICAgICAgICAgICBpZiAoIXRlc3RmaWxlU3RyaW5nLmVxdWFscyhjYW5vbmljYWxmaWxlU3RyaW5nKSkKLSAgICAgICAgICAgICAgewotCQkJCWlmICghU3RyaW5nLnZhbHVlT2YodGVzdGZpbGVTdHJpbmcuY2hhckF0KDApKS5lcXVhbHNJZ25vcmVDYXNlCi0JCQkJICAgIChTdHJpbmcudmFsdWVPZihjYW5vbmljYWxmaWxlU3RyaW5nLmNoYXJBdCgwKSkpCi0JCQkJICAgIHx8ICF0ZXN0ZmlsZVN0cmluZy5zdWJzdHJpbmcoMSx0ZXN0ZmlsZVN0cmluZy5sZW5ndGgoKSkuZXF1YWxzCi0JCQkJCShjYW5vbmljYWxmaWxlU3RyaW5nLnN1YnN0cmluZygxLGNhbm9uaWNhbGZpbGVTdHJpbmcubGVuZ3RoKCkpKSkKLQkJCQl7Ci0gICAgICAgICAgICAgICAgICB1cmxTdHJpbmcgPSAiIjsKLSAgICAgICAgICAgICAgICAgIHVybCA9IG51bGw7Ci0JCQkJfQotICAgICAgICAgICAgICB9Ci0JCQl9Ci0JCQlpZih1cmwgIT0gbnVsbCkKLQkJCXsKLQkJCSAgdHJ5Ci0JCQkgIHsKLSAgICAgICAgICAgICAgICByZWFkZXIgPSBTdHJpbmdVdGlscy5nZXRDb250ZW50QXNSZWFkZXIodXJsKTsKLQkJCSAgfQotCQkJICBjYXRjaChJT0V4Y2VwdGlvbiBlKQotCQkJICB7Ci0JCQkgICAgLy8gTm8gbmVlZCB0byBkbyBhbnl0aGluZyBoZXJlLiBUaGUgZXJyb3Igd2lsbCBiZSBoYW5kbGVkIGJlbG93LgotCQkJICB9Ci0JCQl9Ci0gICAgICAgICAgICBpZiAocmVhZGVyICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlucHV0U291cmNlID0gbmV3IElucHV0U291cmNlKHJlYWRlcik7Ci0gICAgICAgICAgICAgIGlmKGNsYXNzcGF0aFVSSSAhPSBudWxsICYmICFjbGFzc3BhdGhVUkkuZXF1YWxzKGxvY2F0aW9uKSkKLSAgCQkJICB7Ci0gIAkJCSAgICBpbnB1dFNvdXJjZS5zZXRCeXRlU3RyZWFtKG5ldyBVUkwoY2xhc3NwYXRoVVJJKS5vcGVuU3RyZWFtKCkpOwotICAJCQkgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGlucHV0U291cmNlID09IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIC8vIEdldCB0aGUgYWN0dWFsIGxvY2F0aW9uIGZyb20gdGhlIGVsZW1lbnQuCi0gICAgICAgICAgICAgIFN0cmluZyBhY3R1YWxMb2NhdGlvbiA9IERPTVV0aWxzLmdldEF0dHJpYnV0ZShpbXBvcnRpbmdEb2NJbXBvcnRFbGVtZW50LCBDb25zdGFudHMuQVRUUl9MT0NBVElPTik7Ci0gICAgICAgICAgICAgIGlmKGFjdHVhbExvY2F0aW9uID09IG51bGwpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgCWFjdHVhbExvY2F0aW9uID0gRE9NVXRpbHMuZ2V0QXR0cmlidXRlKGltcG9ydGluZ0RvY0ltcG9ydEVsZW1lbnQsICJzY2hlbWFMb2NhdGlvbiIpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGlmKGFjdHVhbExvY2F0aW9uID09IG51bGwpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgCWFjdHVhbExvY2F0aW9uID0gbmFtZXNwYWNlOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGltcG9ydGluZ1dTRExEb2MuYWRkUmVhZGVyV2FybmluZygKLSAgICAgICAgICAgICAgICAgIGltcG9ydGluZ0RlZiwKLSAgICAgICAgICAgICAgICAgIGltcG9ydGluZ0RvY0ltcG9ydEVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZygiX1VOQUJMRV9UT19JTVBPUlRfQkFEX0xPQ0FUSU9OIiwgIiciICsgYWN0dWFsTG9jYXRpb24gKyAiJyIpKTsKLSAgICAgICAgICAgICAgaW1wb3J0SW52YWxpZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgLy8gVE9ETzogbW9kaWZ5IHRoZSByZWFkZXIgZXJyb3IgdG8gc2hvdyBpbiBhbGwgdGhlIGNvcnJlY3QgbG9jYXRpb25zLgotICAgICAgICAgICAgICB0aHJvdyBuZXcgV1NETEV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICBXU0RMRXhjZXB0aW9uLk9USEVSX0VSUk9SLAotICAgICAgICAgICAgICAgICJVbmFibGUgdG8gbG9jYXRlIGltcG9ydGVkIGRvY3VtZW50ICIKLSAgICAgICAgICAgICAgICAgICsgImF0ICciCi0gICAgICAgICAgICAgICAgICArIGxvY2F0aW9uVVJJCi0gICAgICAgICAgICAgICAgICArICInIgotICAgICAgICAgICAgICAgICAgKyAoY29udGV4dFVSSSA9PSBudWxsID8gIi4iIDogIiwgcmVsYXRpdmUgdG8gJyIgKyBjb250ZXh0VVJJICsgIicuIikpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgRG9jdW1lbnQgZG9jID0gbnVsbDsKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBkb2MgPSBXU0RMUmVhZGVySW1wbC5nZXREb2N1bWVudChpbnB1dFNvdXJjZSwgbG9jYXRpb25VUkkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2goV1NETEV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvLyBUaGUgRmlsZSBpcyBpbnZhbGlkIGFuZCBjYW5ub3QgYmUgcmVhZC4gCi0gICAgICAgICAgICAgIC8vIFBlcmZvcm0gWE1MIHZhbGlkYXRpb24uCi0gICAgICAgICAgICAgIGlzWE1MVmFsaWQobG9jYXRpb25VUkkpOwotLy8gICAgICAgICAgICAgIGltcG9ydGluZ1dTRExEb2MuYWRkUmVhZGVyRXJyb3IoCi0vLyAgICAgICAgICAgICAgICAgIGltcG9ydGluZ0RlZiwKLS8vICAgICAgICAgICAgICAgICAgaW1wb3J0aW5nRG9jSW1wb3J0RWxlbWVudCwKLS8vICAgICAgICAgICAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoIl9VTkFCTEVfVE9fSU1QT1JUX0lOVkFMSUQiLCAiJyIgKyBsb2NhdGlvbiArICInIikpOwotICAgICAgICAgICAgICB0aHJvdyBlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxlbWVudCA9IGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKTsKLSAgICAgICAgICAgIGlmKCFRTmFtZVV0aWxzLm1hdGNoZXMoQ29uc3RhbnRzLlFfRUxFTV9ERUZJTklUSU9OUywgZWxlbWVudCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlzV1NETEZpbGVJbXBvcnQgPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBpbXBvcnRlZCBkb2N1bWVudCBoYXMgdGhlIHNhbWUgbmFtZXNwYWNlIGFzIHRoZSBpbXBvcnQgZWxlbWVudCBzdGF0ZXMuCi0gICAgICAgICAgICBTdHJpbmcgaW1wb3J0VGFyZ2V0TlMgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShDb25zdGFudHMuQVRUUl9UQVJHRVRfTkFNRVNQQUNFKTsKLSAgICAgICAgICAgIGlmKCFpbXBvcnRUYXJnZXROUy5lcXVhbHMobmFtZXNwYWNlKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgaW1wb3J0aW5nV1NETERvYy5hZGRSZWFkZXJXYXJuaW5nKAotICAgICAgICAgICAgICAgICAgaW1wb3J0aW5nRGVmLAotICAgICAgICAgICAgICAgICAgaW1wb3J0aW5nRG9jSW1wb3J0RWxlbWVudCwKLSAgICAgICAgICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKCJfV0FSTl9XUk9OR19OU19PTl9JTVBPUlQiLCAiJyIgKyBuYW1lc3BhY2UgKyAiJyIsICInIiArIGltcG9ydFRhcmdldE5TICsgIiciKSk7Ci0gICAgICAgICAgICAgIGVsZW1lbnQgPSBudWxsOwotICAgICAgICAgICAgICBpbXBvcnRJbnZhbGlkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBjYXRjaChFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICAgIGZpbmFsbHkKLSAgICAgICAgewotICAgICAgICAgIGlmKHJlYWRlciAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICByZWFkZXIuY2xvc2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoKElPRXhjZXB0aW9uIGUpCi0gICAgICAgICAgICB7fQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgCi0gICAgfQotICAgIHJldHVybiBlbGVtZW50OwotICB9Ci0gIAotICAvKioKLSAgICogQ3JlYXRlIGFuIGltcG9ydCBlbGVtZW50IGZvciBhIFdTREwgaW1wb3J0IG9mIGEgV1NETCBkb2N1bWVudC4KLSAgICogCi0gICAqIEBwYXJhbSB3c2RsRG9jdW1lbnQgVGhlIGRvY3VtZW50IG9mIHRoZSBpbXBvcnQuCi0gICAqIEByZXR1cm4gVGhlIG5ld2x5IGNyZWF0ZWQgaW1wb3J0IGVsZW1lbnQuCi0gICAqLwotICBwdWJsaWMgSW1wb3J0IGNyZWF0ZVdTRExJbXBvcnQoV1NETERvY3VtZW50IHdzZGxEb2N1bWVudCkKLSAgewotICAgIGlmKGltcG9ydERlZiAhPSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiBpbXBvcnREZWY7Ci0gICAgfQotICAgIGltcG9ydERlZiA9IGdldE5ld0ltcG9ydCgpOwotICAKLSAgICBpZiAoaW1wb3J0RGVmICE9IG51bGwpCi0gICAgewotICAgICAgaW1wb3J0RGVmLnNldERlZmluaXRpb24od3NkbERvY3VtZW50LmdldERlZmluaXRpb24oKSk7Ci0gICAgICBzY2hlbWFzLmFkZEFsbCh3c2RsRG9jdW1lbnQuZ2V0U2NoZW1hcygpKTsKLSAgICAgIGltcG9ydGluZ1dTRExEb2MuYWRkU2NoZW1hcyhzY2hlbWFzKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gaW1wb3J0RGVmOwotICB9Ci0gIAotICAvKioKLSAgICogQ3JlYXRlIGFuIGltcG9ydCBlbGVtZW50IGZvciBhIFdTREwgaW1wb3J0IG9mIGEgc2NoZW1hIGltcG9ydCBvZiBhIHNjaGVtYSBkb2N1bWVudC4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIG5ld2x5IGNyZWF0ZWQgaW1wb3J0IGVsZW1lbnQuCi0gICAqLwotICBwdWJsaWMgSW1wb3J0IGNyZWF0ZVhTREltcG9ydCgpCi0gIHsKLSAgICBpZihpbXBvcnREZWYgIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gaW1wb3J0RGVmOwotICAgIH0KLSAgICBpbXBvcnREZWYgPSBnZXROZXdJbXBvcnQoKTsKLSAgICBYU0RWYWxpZGF0b3IgeHNkdmFsaWRhdG9yID0gbmV3IFhTRFZhbGlkYXRvcigpOwotCi0gICAgeHNkdmFsaWRhdG9yLnZhbGlkYXRlKGxvY2F0aW9uLCBYTUxDYXRhbG9nUmVzb2x2ZXIuZ2V0SW5zdGFuY2UoKSwgdmFsaW5mby5nZXRTY2hlbWFDYWNoZSgpKTsKLSAgICBpZiAoeHNkdmFsaWRhdG9yLmlzVmFsaWQoKSkKLSAgICB7Ci0gICAgICBYU01vZGVsIHNjaGVtYSA9IHhzZHZhbGlkYXRvci5nZXRYU01vZGVsKCk7Ci0gICAgICBpZiAoc2NoZW1hICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHNjaGVtYXMuYWRkKHNjaGVtYSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgIC8vIGFkZFJlYWRlcldhcm5pbmcoCi0vLyAgICAgICAgZGVmLAotLy8gICAgICAgIGltcG9ydERlZiwKLS8vICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZygiX1VOQUJMRV9UT19JTVBPUlRfSU5WQUxJRCIsICInIiArIGltcG9ydERlZi5nZXRMb2NhdGlvblVSSSgpICsgIiciKSk7Ci0gICAgICBJdGVyYXRvciBlcnJvcnMgPSB4c2R2YWxpZGF0b3IuZ2V0RXJyb3JzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChlcnJvcnMuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBFcnJvck1lc3NhZ2UgZXJyID0gKEVycm9yTWVzc2FnZSkgZXJyb3JzLm5leHQoKTsKLSAgICAgICAgU3RyaW5nIHVyaSA9IGVyci5nZXRVUkkoKTsKLSAgICAgICAgaW50IGxpbmUgPSBlcnIuZ2V0RXJyb3JMaW5lKCk7Ci0gICAgICAgIFN0cmluZyBlcnJtZXNzID0gZXJyLmdldEVycm9yTWVzc2FnZSgpOwotICAgICAgICB2YWxpbmZvLmFkZEVycm9yKGVycm1lc3MsIGxpbmUsIGVyci5nZXRFcnJvckNvbHVtbigpLCB1cmkpOwotICAgICAgfQotICAgIH0KLSAgICBpbXBvcnRpbmdXU0RMRG9jLmFkZFNjaGVtYXMoc2NoZW1hcyk7Ci0gICAgcmV0dXJuIGltcG9ydERlZjsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgaW1wb3J0IGVsZW1lbnQgaWYgaXQgaGFzIGJlZW4gY3JlYXRlZC4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIGltcG9ydCBlbGVtZW50IGlmIGl0IGhhcyBiZWVuIGNyZWF0ZWQgb3IgbnVsbC4KLSAgICovCi0gIHB1YmxpYyBJbXBvcnQgZ2V0SW1wb3J0KCkKLSAgewotICAgIHJldHVybiBpbXBvcnREZWY7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgYSBuZXcgaW1wb3J0IGVsZW1lbnQuCi0gICAqIAotICAgKiBAcmV0dXJuIEEgbmV3IGltcG9ydCBlbGVtZW50LgotICAgKi8KLSAgcHJpdmF0ZSBJbXBvcnQgZ2V0TmV3SW1wb3J0KCkKLSAgewotICAgIGlmKGltcG9ydEludmFsaWQpCi0gICAgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICAgIEltcG9ydCBpbXBvcnREZWYgPSBpbXBvcnRpbmdEZWYuY3JlYXRlSW1wb3J0KCk7IAotICAgIAotICAgIGlmIChuYW1lc3BhY2UgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpbXBvcnREZWYuc2V0TmFtZXNwYWNlVVJJKG5hbWVzcGFjZSk7Ci0gICAgfQotCi0gICAgaWYgKGxvY2F0aW9uICE9IG51bGwpCi0gICAgewotICAgICAgaW1wb3J0RGVmLnNldExvY2F0aW9uVVJJKGxvY2F0aW9uKTsKLSAgICB9Ci0gICAgCi0gICAgaWYoZWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIEVsZW1lbnQgdGVtcEVsID0gRE9NVXRpbHMuZ2V0Rmlyc3RDaGlsZEVsZW1lbnQoZWxlbWVudCk7Ci0KLSAgICAgIHdoaWxlICh0ZW1wRWwgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX0RPQ1VNRU5UQVRJT04sIHRlbXBFbCkpCi0gICAgICAgIHsKLSAgICAgICAgICBpbXBvcnREZWYuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQodGVtcEVsKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRlbXBFbCA9IERPTVV0aWxzLmdldE5leHRTaWJsaW5nRWxlbWVudCh0ZW1wRWwpOwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBpbXBvcnREZWY7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIHNjaGVtYXMgY29ycmVzcG9uZGluZyB0byB0aGlzIGltcG9ydC4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIHNjaGVtYXMgY29ycmVzcG9uZGluZyB0byB0aGlzIGltcG9ydC4KLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldFNjaGVtYXMoKQotICB7Ci0gICAgcmV0dXJuIHNjaGVtYXM7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBpbXBvcnQgaW1wb3J0cyBhIFdTREwgZG9jdW1lbnQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICogCi0gICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGlzIGltcG9ydCBpbXBvcnRzIGEgV1NETCBkb2N1bWVudCwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNXU0RMRmlsZUltcG9ydCgpCi0gIHsKLSAgICByZXR1cm4gaXNXU0RMRmlsZUltcG9ydDsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGphdmEubGFuZy5PYmplY3QjZXF1YWxzKGphdmEubGFuZy5PYmplY3QpCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iaikKLSAgewotICAgIGlmKG9iai5nZXRDbGFzcygpID09IEltcG9ydEhvbGRlci5jbGFzcykKLSAgICB7Ci0gICAgICBJbXBvcnRIb2xkZXIgb3RoZXJJbXBvcnQgPSAoSW1wb3J0SG9sZGVyKW9iajsKLSAgICAgIAotICAgICAgaWYoZ2V0TmFtZXNwYWNlKCkuZXF1YWxzKG90aGVySW1wb3J0LmdldE5hbWVzcGFjZSgpKSAmJiBnZXRMb2NhdGlvbigpLmVxdWFscyhvdGhlckltcG9ydC5nZXRMb2NhdGlvbigpKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGphdmEubGFuZy5Db21wYXJhYmxlI2NvbXBhcmVUbyhqYXZhLmxhbmcuT2JqZWN0KQotICAgKi8KLSAgcHVibGljIGludCBjb21wYXJlVG8oT2JqZWN0IG9iaikKLSAgewotICAgIGlmKG9iaiA9PSBudWxsKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBOdWxsUG9pbnRlckV4Y2VwdGlvbigpOwotICAgIH0KLSAgICAKLSAgICBJbXBvcnRIb2xkZXIgb3RoZXJJbXBvcnQgPSAoSW1wb3J0SG9sZGVyKW9iajsKLSAgICAgIAotICAgIHJldHVybiAoZ2V0TmFtZXNwYWNlKCkrZ2V0TG9jYXRpb24oKSkuY29tcGFyZVRvKChvdGhlckltcG9ydC5nZXROYW1lc3BhY2UoKStvdGhlckltcG9ydC5nZXRMb2NhdGlvbigpKSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBTZXQgdGhlIG1lc3NhZ2VnZW5lcmF0b3IgZm9yIHRoZSBpbXBvcnQgaG9sZGVyLgotICAgKiAKLSAgICogQHBhcmFtIG1nIFRoZSBtZXNzYWdlIGdlbmVyYXRvciB0byBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRNZXNzYWdlR2VuZXJhdG9yKE1lc3NhZ2VHZW5lcmF0b3IgbWcpCi0gIHsKLSAgICBtZXNzYWdlZ2VuZXJhdG9yID0gbWc7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgaW1wb3J0IGlzIGludmFsaWQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICogCi0gICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgaW1wb3J0IGlzIGludmFsaWQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzSW1wb3J0SW52YWxpZCgpCi0gIHsKLSAgICByZXR1cm4gaW1wb3J0SW52YWxpZDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9Mb2NhdGlvbkhvbGRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9Mb2NhdGlvbkhvbGRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNmVjY2M5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvTG9jYXRpb25Ib2xkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMTsKLQotLyoqCi0gKiBIb2xkcyB0aGUgbG9jYXRpb24gaW5mb3JtYXRpb24gZm9yIGFuIGVsZW1lbnQgaW4gYSBkb2N1bWVudC4KLSAqLwotcHVibGljIGNsYXNzIExvY2F0aW9uSG9sZGVyCi17Ci0gIHByaXZhdGUgaW50IGxpbmU7Ci0gIHByaXZhdGUgaW50IGNvbHVtbjsKLSAgcHJpdmF0ZSBTdHJpbmcgdXJpOwotICAKLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKiAKLSAgICogQHBhcmFtIGxpbmUgVGhlIGxpbmUgbnVtYmVyLgotICAgKiBAcGFyYW0gY29sdW1uIFRoZSBjb2x1bW4gbnVtYmVyLgotICAgKiBAcGFyYW0gdXJpIFRoZSBVUkkgb2YgdGhlIGRvY3VtZW50LgotICAgKi8KLSAgcHVibGljIExvY2F0aW9uSG9sZGVyKGludCBsaW5lLCBpbnQgY29sdW1uLCBTdHJpbmcgdXJpKQotICB7Ci0gICAgdGhpcy5saW5lID0gbGluZTsKLSAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjsKLSAgICB0aGlzLnVyaSA9IHVyaTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgbGluZSBudW1iZXIuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBsaW5lIG51bWJlci4KLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0TGluZSgpCi0gIHsKLSAgICByZXR1cm4gbGluZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgY29sdW1uIG51bWJlci4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIGNvbHVtbiBudW1iZXIuCi0gICAqLwotICBwdWJsaWMgaW50IGdldENvbHVtbigpCi0gIHsKLSAgICByZXR1cm4gY29sdW1uOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBmaWxlIFVSSS4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIGZpbGUgVVJJLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRVUkkoKQotICB7Ci0gICAgcmV0dXJuIHVyaTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9SZWFkZXJFcnJvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9SZWFkZXJFcnJvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YWZlNzgzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvUmVhZGVyRXJyb3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMTsKLQotLyoqCi0gKiBIb2xkcyBhbiBlcnJvciBjcmVhdGVkIHdoZW4gcmVhZGluZyBhIFdTREwgZG9jdW1lbnQuCi0gKi8KLXB1YmxpYyBjbGFzcyBSZWFkZXJFcnJvcgotewotICBwcm90ZWN0ZWQgT2JqZWN0IHBhcmVudE9iamVjdDsgLy8gdGhlIG9iamVjdCBvZiB0aGUgcGFyZW50IG9mIHRoZSBvYmplY3Qgd2l0aCB0aGUgZXJyb3IKLSAgcHJvdGVjdGVkIE9iamVjdCBvYmplY3Q7IC8vIHRoZSBvYmplY3QgdGhlIGVycm9yIGlzIGFzc29jaWF0ZWQgd2l0aAotICBwcm90ZWN0ZWQgU3RyaW5nIGVycm9yOyAvLyB0aGUgZXJyb3IgYXNzb2NpYXRlZCB3aXRoIHRoZSBvYmplY3QgCi0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKiAKLSAgICogQHBhcmFtIHBhcmVudE9iamVjdCB0aGUgcGFyZW50IG9iamVjdCBvZiB0aGUgb2JqZWN0IHdpdGggdGhlIGVycm9yCi0gICAqIEBwYXJhbSBvYmplY3QgdGhlIG9iamVjdCB3aXRoIHRoZSBlcnJvcgotICAgKiBAcGFyYW0gZXJyb3IgdGhlIGVycm9yCi0gICAqLwotICBwdWJsaWMgUmVhZGVyRXJyb3IoT2JqZWN0IHBhcmVudE9iamVjdCwgT2JqZWN0IG9iamVjdCwgU3RyaW5nIGVycm9yKQotICB7Ci0gICAgdGhpcy5wYXJlbnRPYmplY3QgPSBwYXJlbnRPYmplY3Q7Ci0gICAgdGhpcy5vYmplY3QgPSBvYmplY3Q7Ci0gICAgdGhpcy5lcnJvciA9IGVycm9yOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHBhcmVudCBvYmplY3Qgb2YgdGhlIG9iamVjdCB3aXRoIHRoZSBlcnJvci4KLSAgICogCi0gICAqIEByZXR1cm4gdGhlIHBhcmVudCBvYmplY3Qgb2YgdGhlIG9iamVjdCB3aXRoIHRoZSBlcnJvcgotICAgKi8KLSAgcHVibGljIE9iamVjdCBnZXRQYXJlbnRPYmplY3QoKQotICB7Ci0gICAgcmV0dXJuIHBhcmVudE9iamVjdDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBvYmplY3Qgd2l0aCB0aGUgZXJyb3IuCi0gICAqIAotICAgKiBAcmV0dXJuIHRoZSBvYmplY3Qgd2l0aCB0aGUgZXJyb3IKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZ2V0T2JqZWN0KCkKLSAgewotICAgIHJldHVybiBvYmplY3Q7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZS4KLSAgICogCi0gICAqIEByZXR1cm4gdGhlIGVycm9yIG1lc3NhZ2UKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RXJyb3IoKQotICB7Ci0gICAgcmV0dXJuIGVycm9yOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL1ZhbGlkYXRvclJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL1ZhbGlkYXRvclJlZ2lzdHJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0YzZjY2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9WYWxpZGF0b3JSZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMTsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci0KLQotLyoqCi0gKiBBIHJlZ2lzdHJ5IHRvIGhvbGQgYWxsIHRoZSBXU0RMIDEuMSB2YWxpZGF0b3JzLgotICovCi1wdWJsaWMgY2xhc3MgVmFsaWRhdG9yUmVnaXN0cnkKLXsKLQotICBwcm90ZWN0ZWQgc3RhdGljIFZhbGlkYXRvclJlZ2lzdHJ5IHZlckluc3RhbmNlOwotCi0gIHByb3RlY3RlZCBNYXAgdmFsaWRhdG9yUmVnID0gbmV3IEhhc2h0YWJsZSgpOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICovCi0gIHByb3RlY3RlZCBWYWxpZGF0b3JSZWdpc3RyeSgpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBpbnN0YW5jZSBvZiB0aGlzIHJlZ2lzdHJ5LgotICAgKiAKLSAgICogQHJldHVybiBUaGUgaW5zdGFuY2Ugb2YgdGhpcyByZWdpc3RyeS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVmFsaWRhdG9yUmVnaXN0cnkgZ2V0SW5zdGFuY2UoKQotICB7Ci0gICAgaWYgKHZlckluc3RhbmNlID09IG51bGwpCi0gICAgewotICAgICAgdmVySW5zdGFuY2UgPSBuZXcgVmFsaWRhdG9yUmVnaXN0cnkoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHZlckluc3RhbmNlOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlZ2lzdGVyIHRoaXMgdmFsaWRhdG9yIGRlbGVnYXRlIHdpdGggdGhlIGdpdmVuIG5hbWVzcGFjZS4KLSAgICogCi0gICAqIEBwYXJhbSBuYW1lc3BhY2UgVGhlIG5hbWVzcGFjZSB0aGUgdmFsaWRhdG9yIGlzIGFzc29jaWF0ZWQgd2l0aC4KLSAgICogQHBhcmFtIHZhbERlbGVnYXRlIFRoZSB2YWxpZGF0b3IgZGVsZWdhdGUgdG8gcmVnaXN0ZXIuCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWdpc3RlclZhbGlkYXRvcihTdHJpbmcgbmFtZXNwYWNlLCBXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZSB2YWxEZWxlZ2F0ZSkKLSAgewotICAgIC8vIGFsbG93IHRoZSBudWxsIG5hbWVzcGFjZSBidXQgbWFrZSBpdCB0aGUgZW1wdHkgc3RyaW5nCi0gICAgaWYgKG5hbWVzcGFjZSA9PSBudWxsKQotICAgIHsKLSAgICAgIG5hbWVzcGFjZSA9ICIiOwotICAgIH0KLQotICAgIC8vIGFkZCB0aGUgdmFsaWRhdG9yIHRvIHRoZSBoYXNodGFibGUKLSAgICBpZighdmFsaWRhdG9yUmVnLmNvbnRhaW5zS2V5KG5hbWVzcGFjZSkpCi0gICAgewotICAgICAgdmFsaWRhdG9yUmVnLnB1dChuYW1lc3BhY2UsIG5ldyBXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZUNvbnRhaW5lcigpKTsKLSAgICB9Ci0gICAgKChXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZUNvbnRhaW5lcil2YWxpZGF0b3JSZWcuZ2V0KG5hbWVzcGFjZSkpLmFkZFZhbGlkYXRvcih2YWxEZWxlZ2F0ZSk7Ci0gICAgLy92YWxpZGF0b3JSZWcucHV0KG5hbWVzcGFjZSwgdmFsRGVsZWdhdGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIEFzayBmb3IgdGhlIHZhbGlkYXRvciBhc3NvY2lhdGVkIHdpdGggdGhpcyBuYW1lc3BhY2UuIElmIG5vbmUgaXMgZm91bmQKLSAgICogcmV0dXJuIG51bGwuCi0gICAqIAotICAgKiBAcGFyYW0gbmFtZXNwYWNlIFRoZSBuYW1lc3BhY2Ugb2YgdGhlIHZhbGlkYXRvci4KLSAgICogQHJldHVybiBUaGUgV1NETCAxLjEgdmFsaWRhdG9yIGZvciB0aGUgZ2l2ZW4gbmFtZXNwYWNlLgotICAgKi8KLSAgcHVibGljIElXU0RMMTFWYWxpZGF0b3IgcXVlcnlWYWxpZGF0b3JSZWdpc3RyeShTdHJpbmcgbmFtZXNwYWNlKQotICB7Ci0gICAgLy8gaWYgdGhlIG5hbWVzcGFjZSBpcyBudWxsIGFsbG93IGl0IGFuZCB0cmVhdCBpdCBhcyB0aGUgZW1wdHkgc3RyaW5nCi0gICAgaWYgKG5hbWVzcGFjZSA9PSBudWxsKQotICAgIHsKLSAgICAgIG5hbWVzcGFjZSA9ICIiOwotICAgIH0KLSAgICByZXR1cm4gKElXU0RMMTFWYWxpZGF0b3IpdmFsaWRhdG9yUmVnLmdldChuYW1lc3BhY2UpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbnZlbmllbmNlIG1ldGhvZCB0aGF0IHRlbGxzIHdoZXRoZXIgYSB2YWxpZGF0b3IgZm9yIGEgZ2l2ZW4gbmFtZXNwYWNlIGlzIHJlZ2lzdGVyZWQuCi0gICAqIAotICAgKiBAcGFyYW0gbmFtZXNwYWNlIFRoZSBuYW1lc3BhY2UgdG8gY2hlY2suCi0gICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGVyZSBpcyBhIHZhbGlkYXRvciByZWdpc3RlcmVkLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBoYXNSZWdpc3RlcmVkVmFsaWRhdG9yKFN0cmluZyBuYW1lc3BhY2UpCi0gIHsKLSAgICBpZiAocXVlcnlWYWxpZGF0b3JSZWdpc3RyeShuYW1lc3BhY2UpICE9IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAKLSAgcHVibGljIGNsYXNzIFdTREwxMVZhbGlkYXRvckRlbGVnYXRlQ29udGFpbmVyIGltcGxlbWVudHMgSVdTREwxMVZhbGlkYXRvcgotICB7Ci0JcHJpdmF0ZSBMaXN0IHZhbGlkYXRvckRlbGVnYXRlcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkKLQlwdWJsaWMgdm9pZCBhZGRWYWxpZGF0b3IoV1NETDExVmFsaWRhdG9yRGVsZWdhdGUgZGVsZWdhdGUpCi0JewotCSAgdmFsaWRhdG9yRGVsZWdhdGVzLmFkZChkZWxlZ2F0ZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0UmVzb3VyY2VCdW5kbGUoUmVzb3VyY2VCdW5kbGUgcmIpIHsKLQkJLy9Ob3RoaW5nIHRvIGRvCi0JCQotCX0KLQotCXB1YmxpYyB2b2lkIHZhbGlkYXRlKE9iamVjdCBlbGVtZW50LCBMaXN0IHBhcmVudHMsIElXU0RMMTFWYWxpZGF0aW9uSW5mbyB2YWxJbmZvKSB7Ci0JCUl0ZXJhdG9yIHZhbERlbEl0ZXIgPSB2YWxpZGF0b3JEZWxlZ2F0ZXMuaXRlcmF0b3IoKTsKLQkJd2hpbGUodmFsRGVsSXRlci5oYXNOZXh0KCkpCi0JCXsKLQkJICBXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZSBkZWxlZ2F0ZSA9IChXU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZSl2YWxEZWxJdGVyLm5leHQoKTsKLQkJICBkZWxlZ2F0ZS5nZXRWYWxpZGF0b3IoKS52YWxpZGF0ZShlbGVtZW50LCBwYXJlbnRzLCB2YWxJbmZvKTsKLQkJfQotCQkKLQl9Ci0JICAKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9XU0RMMTFCYXNpY1ZhbGlkYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9XU0RMMTFCYXNpY1ZhbGlkYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTNjZTFjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvV1NETDExQmFzaWNWYWxpZGF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY4MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTE7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5GYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLklucHV0OwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLk91dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgamF2YXgud3NkbC5TZXJ2aWNlOwotaW1wb3J0IGphdmF4LndzZGwuVHlwZXM7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU01vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwubG9nZ2luZy5JTG9nZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwubG9nZ2luZy5Mb2dnZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudXRpbC5NZXNzYWdlR2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLnhzZC5TY2hlbWFBdHRyaWJ1dGVUYWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS54c2QuWFNEVmFsaWRhdG9yOwotCi1pbXBvcnQgY29tLmlibS53c2RsLkNvbnN0YW50czsKLS8qKgotICogVmFsaWRhdGUgdGhlIGVsZW1lbnRzIGRlZmluZWQgaW4gYSBXU0RMIDEuMSBEb2N1bWVudC4KLSAqLwotcHVibGljIGNsYXNzIFdTREwxMUJhc2ljVmFsaWRhdG9yIGltcGxlbWVudHMgSVdTREwxMVZhbGlkYXRvcgotewotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgVkFMSURBVE9SX1JFU09VUkNFX0JVTkRMRV9OQU1FID0gInZhbGlkYXRld3NkbCI7Ci0JCi0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgTkFNRVNQQUNFU19GRUFUVVJFX0lEID0gImh0dHA6Ly94bWwub3JnL3NheC9mZWF0dXJlcy9uYW1lc3BhY2VzIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBWQUxJREFUSU9OX0ZFQVRVUkVfSUQgPSAiaHR0cDovL3htbC5vcmcvc2F4L2ZlYXR1cmVzL3ZhbGlkYXRpb24iOwotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIFNDSEVNQV9WQUxJREFUSU9OX0ZFQVRVUkVfSUQgPSAiaHR0cDovL2FwYWNoZS5vcmcveG1sL2ZlYXR1cmVzL3ZhbGlkYXRpb24vc2NoZW1hIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBTQ0hFTUFfRlVMTF9DSEVDS0lOR19GRUFUVVJFX0lEID0KLSAgICAiaHR0cDovL2FwYWNoZS5vcmcveG1sL2ZlYXR1cmVzL3ZhbGlkYXRpb24vc2NoZW1hLWZ1bGwtY2hlY2tpbmciOwotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIENPTlRJTlVFX0FGVEVSX0ZBVEFMX0VSUk9SX0lEID0gImh0dHA6Ly9hcGFjaGUub3JnL3htbC9mZWF0dXJlcy9jb250aW51ZS1hZnRlci1mYXRhbC1lcnJvciI7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgU09BUF9FTkNPRElOR19VUkkgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iOwotICAKLSAgLy8gRXJyb3IgYW5kIFdhcm5pbmcgS2V5cwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfUE9SVF9OQU1FX05PVF9VTklRVUUgPSAiX1BPUlRfTkFNRV9OT1RfVU5JUVVFIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX05PX0JJTkRJTkdfRk9SX1BPUlQgPSAiX05PX0JJTkRJTkdfRk9SX1BPUlQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfTk9fQUREUkVTU19QT1JUID0gIl9OT19BRERSRVNTX1BPUlQiOwotLy8gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9NT1JFX1RIRU5fT05FX0FERFJFU1NfUE9SVCA9ICJfTU9SRV9USEVOX09ORV9BRERSRVNTX1BPUlQiOyAvL1RPRE8gc2hvdWxkIGJlIF9NT1JFX1RIQU5fT05FX0FERFJFU1NfUE9SVCwgbm90IFRIRU4KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX1BPUlRUWVBFX1VOREVGSU5FRF9GT1JfQklORElORyA9ICJfUE9SVFRZUEVfVU5ERUZJTkVEX0ZPUl9CSU5ESU5HIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX09QRVJBVElPTl9VTkRFRklORURfRk9SX1BPUlRUWVBFID0gIl9PUEVSQVRJT05fVU5ERUZJTkVEX0ZPUl9QT1JUVFlQRSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9PUEVSQVRJT05fTk9fSU5QVVRfT1JfT1VUUFVUID0gIl9PUEVSQVRJT05fTk9fSU5QVVRfT1JfT1VUUFVUIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0lOUFVUX05BTUVfTk9UX1VOSVFVRSA9ICJfSU5QVVRfTkFNRV9OT1RfVU5JUVVFIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX01FU1NBR0VfVU5ERUZJTkVEX0ZPUl9JTlBVVCA9ICJfTUVTU0FHRV9VTkRFRklORURfRk9SX0lOUFVUIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX09VVFBVVF9OQU1FX05PVF9VTklRVUUgPSAiX09VVFBVVF9OQU1FX05PVF9VTklRVUUiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfTUVTU0FHRV9VTkRFRklORURfRk9SX09VVFBVVCA9ICJfTUVTU0FHRV9VTkRFRklORURfRk9SX09VVFBVVCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9NRVNTQUdFX1VOREVGSU5FRF9GT1JfRkFVTFQgPSAiX01FU1NBR0VfVU5ERUZJTkVEX0ZPUl9GQVVMVCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9QQVJUX05PX0VMRU1FTlRfT1JfVFlQRSA9ICJfUEFSVF9OT19FTEVNRU5UX09SX1RZUEUiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfUEFSVF9CT1RIX0VMRU1FTlRfQU5EX1RZUEUgPSAiX1BBUlRfQk9USF9FTEVNRU5UX0FORF9UWVBFIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX1BBUlRfSU5WQUxJRF9FTEVNRU5UID0gIl9QQVJUX0lOVkFMSURfRUxFTUVOVCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9QQVJUX0lOVkFMSURfVFlQRSA9ICJfUEFSVF9JTlZBTElEX1RZUEUiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfV0FSTl9TT0FQRU5DX0lNUE9SVEVEX1BBUlQgPSAiX1dBUk5fU09BUEVOQ19JTVBPUlRFRF9QQVJUIjsKLQotICBwcml2YXRlIGZpbmFsIGludCBFTEVNRU5UID0gMDsKLSAgcHJpdmF0ZSBmaW5hbCBpbnQgVFlQRSA9IDE7Ci0gIAotICBwcml2YXRlIGZpbmFsIFN0cmluZyBSRVFVRVNUID0gIlJlcXVlc3QiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBSRVNQT05TRSA9ICJSZXNwb25zZSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFFVT1RFID0gIiciOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBFTVBUWV9TVFJJTkcgPSAiIjsKLSAgCi0KLSAgLy9wcm90ZWN0ZWQgV1NETDExVmFsaWRhdG9yQ29udHJvbGxlciB2YWxpZGF0b3Jjb250cm9sbGVyOwotICBwcm90ZWN0ZWQgTWVzc2FnZUdlbmVyYXRvciBtZXNzYWdlZ2VuZXJhdG9yOwotCi0gIHB1YmxpYyBXU0RMMTFCYXNpY1ZhbGlkYXRvcigpCi0gIHsKLQlSZXNvdXJjZUJ1bmRsZSByYiA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZShWQUxJREFUT1JfUkVTT1VSQ0VfQlVORExFX05BTUUsIExvY2FsZS5nZXREZWZhdWx0KCkpOwotICAgIG1lc3NhZ2VnZW5lcmF0b3IgPSBuZXcgTWVzc2FnZUdlbmVyYXRvcihyYik7Ci0gIH0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuSVdTREwxMVZhbGlkYXRvciN2YWxpZGF0ZShqYXZhLmxhbmcuT2JqZWN0LCBqYXZhLnV0aWwuTGlzdCwgb3JnLmVjbGlwc2Uud3NkbC52YWxpZGF0ZS53c2RsMTEuSVdTREwxMVZhbGlkYXRpb25JbmZvKQotICAgKi8KLSAgcHVibGljIHZvaWQgdmFsaWRhdGUoT2JqZWN0IGVsZW1lbnQsIExpc3QgcGFyZW50cywgSVdTREwxMVZhbGlkYXRpb25JbmZvIHZhbEluZm8pCi0gIHsKLSAgICAvL3RoaXMudmFsaWRhdG9yY29udHJvbGxlciA9IHZhbGlkYXRvcmNvbnRyb2xsZXI7Ci0gICAgLy9zZXREZWZhdWx0UmVzb3VyY2VCdW5kbGVJZk5lZWRlZCh2YWxpZGF0b3Jjb250cm9sbGVyKTsKLSAgICBEZWZpbml0aW9uIHdzZGxEZWZpbml0aW9uID0gKERlZmluaXRpb24pZWxlbWVudDsKLSAgICB2YWxpZGF0ZVR5cGVzKHdzZGxEZWZpbml0aW9uLCB2YWxJbmZvKTsKLSAgICB2YWxpZGF0ZVNlcnZpY2VzKHdzZGxEZWZpbml0aW9uLCB2YWxJbmZvKTsKLSAgICB2YWxpZGF0ZUJpbmRpbmdzKHdzZGxEZWZpbml0aW9uLCB2YWxJbmZvKTsKLSAgICB2YWxpZGF0ZVBvcnRUeXBlcyh3c2RsRGVmaW5pdGlvbiwgdmFsSW5mbyk7Ci0gICAgdmFsaWRhdGVNZXNzYWdlcyh3c2RsRGVmaW5pdGlvbiwgdmFsSW5mbyk7Ci0KLSAgfQotCi0gIC8qKgotICAgKiBUYWtlcyBhIGxpc3Qgb2YgRXh0ZW5zaWJpbGl0eUVsZW1lbnRzIGFuZCBjaGVja3MgaWYgdGhlcmUncyBhIHZhbGlkYXRvciAKLSAgICogYXNzb2NpYXRlZCB3aXRoIGVhY2ggZWxlbWVudCBhbmQgaWYgc28gY2FsbHMgdGhlIHZhbGlkYXRvci4KLSAgICogCi0gICAqIEBwYXJhbSBwYXJlbnRzIFRoZSBsaXN0IG9mIHBhcmVudHMgb2YgdGhlIGVsZW1lbnRzLgotICAgKiBAcGFyYW0gZXh0ZW5zaWJpbGl0eUVsZW1lbnRzIFRoZSBsaXN0IG9mIGVsZW1lbnRzIHRvIHZhbGlkYXRlLgotICAgKiBAcGFyYW0gdmFsaWRhdG9yY29udHJvbGxlciBUaGUgdmFsaWRhdG9yIGNvbnRyb2xsZXIuCi0gICAqIEBwYXJhbSB3c2RsRGVmaW5pdGlvbiBUaGUgZGVmbmludGlvbnMgZWxlbWVudCBmb3IgdGhpcyBkb2N1bWVudC4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHZhbGlkYXRlRXh0ZW5zaWJpbGl0eUVsZW1lbnRMaXN0KAotICAgIExpc3QgcGFyZW50cywKLSAgICBMaXN0IGV4dGVuc2liaWxpdHlFbGVtZW50cywKLSAgICBJV1NETDExVmFsaWRhdGlvbkluZm8gdmFsSW5mbykKLSAgewotICAgIFZhbGlkYXRvclJlZ2lzdHJ5IHZlciA9IFZhbGlkYXRvclJlZ2lzdHJ5LmdldEluc3RhbmNlKCk7Ci0gICAgSXRlcmF0b3IgZXh0RWxlbXMgPSBleHRlbnNpYmlsaXR5RWxlbWVudHMuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoZXh0RWxlbXMuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGVsZW1lbnQgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZXh0RWxlbXMubmV4dCgpOwotICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IGVsZW1lbnQuZ2V0RWxlbWVudFR5cGUoKS5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICAgIElXU0RMMTFWYWxpZGF0b3IgdmFsID0gdmVyLnF1ZXJ5VmFsaWRhdG9yUmVnaXN0cnkobmFtZXNwYWNlKTsKLSAgICAgIGlmICh2YWwgIT0gbnVsbCkKLSAgICAgICB7Ci0gICAgICAgIHZhbC52YWxpZGF0ZShlbGVtZW50LCBwYXJlbnRzLCB2YWxJbmZvKTsKLSAgICAgIH0KLS8vICAgICAgZWxzZQotLy8gICAgICAgewotLy8gICAgICAgIHZhbEluZm8uYWRkTmFtZXNwYWNlV2l0aE5vVmFsaWRhdG9yKG5hbWVzcGFjZSk7Ci0vLyAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogRW5zdXJlIHRoYXQgdGhlIFR5cGVzIGVsZW1lbnQgaXMgY29ycmVjdC4gCi0gICAqIAotICAgKiBAcGFyYW0gd3NkbERlZmluaXRpb24gVGhlIGRlZmluaXRpb25zIGVsZW1lbnQgZnJvbSB0aGUgY3VycmVudCBkb2N1bWVudC4KLSAgICovCi0KLSAgcHJvdGVjdGVkIHZvaWQgdmFsaWRhdGVUeXBlcyhEZWZpbml0aW9uIHdzZGxEZWZpbml0aW9uLCBJV1NETDExVmFsaWRhdGlvbkluZm8gdmFsSW5mbykKLSAgewotICAgIFR5cGVzIHR5cGVzID0gd3NkbERlZmluaXRpb24uZ2V0VHlwZXMoKTsKLSAgICAvLyBlbnN1cmUgdGhhdCB0eXBlcyBpcyBkZWZpbmVkCi0gICAgaWYgKHR5cGVzICE9IG51bGwpCi0gICAgewotICAgICAgTGlzdCBwYXJlbnRzID0gbmV3IFZlY3RvcigpOwotICAgICAgcGFyZW50cy5hZGQod3NkbERlZmluaXRpb24pOwotICAgICAgcGFyZW50cy5hZGQoMCwgdHlwZXMpOwotICAgICAgdmFsaWRhdGVFeHRlbnNpYmlsaXR5RWxlbWVudExpc3QocGFyZW50cywgdHlwZXMuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCksIHZhbEluZm8pOwotICAgICAgcGFyZW50cy5yZW1vdmUoMCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlcyBhbGwgb2YgdGhlIGRlY2xhcmVkIHNlcnZpY2VzIGZvciB0aGUgZGVmaW5pdGlvbi4KLSAgICogCi0gICAqIEBwYXJhbSB3c2RsRGVmaW5pdGlvbiBUaGUgV1NETCBkZWZpbml0aW9ucyBlbGVtZW50LgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgdmFsaWRhdGVTZXJ2aWNlcyhEZWZpbml0aW9uIHdzZGxEZWZpbml0aW9uLCBJV1NETDExVmFsaWRhdGlvbkluZm8gdmFsSW5mbykKLSAgewotICAgIGlmICh3c2RsRGVmaW5pdGlvbi5nZXRTZXJ2aWNlcygpID09IG51bGwpCi0gICAgICByZXR1cm47Ci0gICAgT2JqZWN0IHNlcnZpY2VzW10gPSB3c2RsRGVmaW5pdGlvbi5nZXRTZXJ2aWNlcygpLnZhbHVlcygpLnRvQXJyYXkoKTsKLSAgICBMaXN0IHBhcmVudHMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgcGFyZW50cy5hZGQod3NkbERlZmluaXRpb24pOwotICAgIEhhc2h0YWJsZSBhbGxQb3J0cyA9IG5ldyBIYXNodGFibGUoKTsKLQotICAgIC8vVE9ETzogY2hlY2sgdGhhdCBwb3J0cyBpbiBvdGhlciBpbXBvcnRlZCBmaWxlcyBkb24ndCBjb25mbGljdCB3aXRoIHBvcnRzIGluIHRoaXMgb25lCi0gICAgLy8gICAgLy8gcmVnaXN0ZXIgYWxsIG9mIHRoZSBpbXBvcnRlZCBwb3J0cwotICAgIC8vICAgIEl0ZXJhdG9yIGltcG9ydHMgPSB3c2RsRGVmaW5pdGlvbi5nZXRJbXBvcnRzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICAvLyAgICB3aGlsZShpbXBvcnRzLmhhc05leHQoKSkKLSAgICAvLyAgICB7Ci0gICAgLy8gICAgICBJdGVyYXRvciBpbXBzZXJ2aWNlcyA9ICgoSW1wb3J0KWltcG9ydHMubmV4dCgpKS5nZXREZWZpbml0aW9uKCkuZ2V0U2VydmljZXMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgIC8vICAgICAgd2hpbGUoaW1wc2VydmljZXMuaGFzTmV4dCgpKQotICAgIC8vICAgICAgewotICAgIC8vICAgICAgICBJdGVyYXRvciBpbXBwb3J0cyA9ICgoU2VydmljZSlpbXBzZXJ2aWNlcy5uZXh0KCkpLmdldFBvcnRzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICAvLyAgICAgICAgd2hpbGUoaW1wcG9ydHMuaGFzTmV4dCgpKQotICAgIC8vICAgICAgICB7Ci0gICAgLy8gICAgICAgICAgUG9ydCB0ZW1wUCA9IChQb3J0KWltcHBvcnRzLm5leHQoKTsKLSAgICAvLyAgICAgICAgICBhbGxQb3J0cy5wdXQodGVtcFAuZ2V0TmFtZSgpLHRlbXBQKTsJCi0gICAgLy8gICAgICAgIH0KLSAgICAvLyAgICAgIH0KLSAgICAvLyAgICB9Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZXJ2aWNlcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBTZXJ2aWNlIHMgPSAoU2VydmljZSlzZXJ2aWNlc1tpXTsKLSAgICAgIHBhcmVudHMuYWRkKDAsIHMpOwotICAgICAgT2JqZWN0IHBvcnRzW10gPSBzLmdldFBvcnRzKCkudmFsdWVzKCkudG9BcnJheSgpOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBwb3J0cy5sZW5ndGg7IGorKykKLSAgICAgIHsKLSAgICAgICAgUG9ydCBwID0gKFBvcnQpcG9ydHNbal07Ci0gICAgICAgIHBhcmVudHMuYWRkKDAsIHApOwotICAgICAgICAvLyBhIFBvcnQgbmFtZSBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gdGhlIGVudGlyZSBXRFNMIGRvY3VtZW50Ci0gICAgICAgIGlmIChhbGxQb3J0cy5jb250YWlucyhwLmdldE5hbWUoKSkpCi0gICAgICAgIHsgIFN0cmluZ1tdIGFyZ3MgPSB7cC5nZXROYW1lKCl9OwotICAgICAgICAgIAotICAgICAgICAgIHZhbEluZm8uYWRkRXJyb3IobWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX1BPUlRfTkFNRV9OT1RfVU5JUVVFLCBRVU9URSArIGFyZ3NbMF0gKyBRVU9URSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcCwgX1BPUlRfTkFNRV9OT1RfVU5JUVVFLCBhcmdzKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBhbGxQb3J0cy5wdXQocC5nZXROYW1lKCksIHApOwotCi0gICAgICAgICAgLy8gZ2V0IHRoZSBiaW5kaW5nIGZvciB0aGlzIHBvcnQgYW5kIHNlZSBpZiB0aGUgUG9ydFR5cGUgZm9yIHRoZSBiaW5kaW5nCi0gICAgICAgICAgLy8gaXMgZGVmaW5lZAotICAgICAgICAgIGlmIChwLmdldEJpbmRpbmcoKSA9PSBudWxsIHx8IHAuZ2V0QmluZGluZygpLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIGJpbmRpbmdOYW1lID0gRU1QVFlfU1RSSU5HOwotICAgICAgICAgICAgaWYgKHAuZ2V0QmluZGluZygpICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGJpbmRpbmdOYW1lID0gcC5nZXRCaW5kaW5nKCkuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0cmluZyBhcmdzW10gPSB7cC5nZXROYW1lKCl9OwotICAgICAgICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX05PX0JJTkRJTkdfRk9SX1BPUlQsIFFVT1RFICsgYXJnc1swXSArIFFVT1RFLCBRVU9URSArIGJpbmRpbmdOYW1lICsgUVVPVEUpLAotICAgICAgICAgICAgICBwLCBfTk9fQklORElOR19GT1JfUE9SVCwgYXJncyk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBUT0RPOiBDaGVjayB0aGF0IHRoZSBvdXRwdXQgb2Ygb25lIHBvcnQgaXNuJ3QgdGhlIGlucHV0IG9mIGFub3RoZXIgYW5kIHZpY2UgdmVyc2EKLSAgICAgICAgICAgIC8vIGV4dGVuc2liaWxpdHkgZWxlbWVudHMgdGhlIHBvcnQKLSAgICAgICAgICAgIC8vIHRoZXJlIGNhbiBvbmx5IGJlIG9uZSBhbmQgbXVzdCBiZSBvbmUgZXh0ZW5zaWJpbGl0eSBlbGVtZW50IGRlZmluZWQgZm9yIGEgcG9ydAotICAgICAgICAgICAgLy8gVE9ETzogUmV2aXNpdC4gVGhlcmUgaXMgbm8gc3RhbmRhcmQgd2F5IHRvIGRldGVybWluZSB3aGljaCBleHRlbnNpYmlsaXR5IGVsZW1lbnQKLSAgICAgICAgICAgIC8vIHNwZWNpZmllcyB0aGUgYWRkcmVzcy4gRXZlbiB3aGVuIHRoZSBwb3J0IGhhcyBhdCBsZWFzdCBvbmUgZXh0ZW5zaWJpbGl0eSBlbGVtZW50LAotICAgICAgICAgICAgLy8gdGhlcmUgaXMgbm8gd2F5IHRvIGVuc3VyZSB0aGF0IGlzICJ0aGUiIGFkZHJlc3Mgb25lLgotICAgICAgICAgICAgTGlzdCBleHRlbGVtcyA9IHAuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICAgICAgICBpZiAoZXh0ZWxlbXMuc2l6ZSgpIDwgMSkKLSAgICAgICAgICAgIHsgU3RyaW5nIGFyZ3NbXT0ge3AuZ2V0TmFtZSgpfTsKLSAgICAgICAgICAgICAgdmFsSW5mby5hZGRFcnJvcihtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfTk9fQUREUkVTU19QT1JULCBRVU9URSArIGFyZ3NbMF0gKyBRVU9URSksCi0gICAgICAgICAgICAgICAgICBwLCBfTk9fQUREUkVTU19QT1JULCBhcmdzKTsKLSAgICAgICAgICAgIH0KLS8vIFNlZSBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTczODU0ICAgICAgICAgICAgCi0vLyBUaGUgV1MtSSBiYXNpYyBwcm9maWxlIGhhcyByZWxheGVkIHRoZSBudW1iZXIgb2YgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyBhbGxvd2VkIGZvciBwb3J0cy4KLS8vIEEgbnVtYmVyIG9mIFdTIHNwZWNpZmljYXRpb25zIGxpa2UgSkFYLVdTIGFuZCBXUyBQb2xpY3kgZGVmaW5lIGV4dGVuc2liaWxpdHkgZWxlbWVudHMgZm9yIHBvcnRzLgotLy8gVGhpcyBjb2RlIGlzIGNvbW1lbnRlZCBvdXQgYmVjYXVzZSBpdCBpcyB0b28gcmVzdHJpY3RpdmUgYW5kIGdlbmVyYXRlcyBlcnJvcnMgdGhhdCBhcHBlYXIgaW52YWxpZC4gICAgICAgICAgICAKLS8vICAgICAgICAgICAgZWxzZSBpZiAoZXh0ZWxlbXMuc2l6ZSgpID4gMSkKLS8vICAgICAgICAgICAgewotLy8gICAgICAgICAgICAgIGZvciAoaW50IGsgPSAxOyBrIDwgZXh0ZWxlbXMuc2l6ZSgpOyBrKyspCi0vLyAgICAgICAgICAgICAgewotLy8gICAgICAgICAgICAgICAgU3RyaW5nW10gYXJncyA9IHtwLmdldE5hbWUoKX07Ci0vLyAgICAgICAgICAgICAgICB2YWxJbmZvLmFkZEVycm9yKAotLy8gICAgICAgICAgICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfTU9SRV9USEVOX09ORV9BRERSRVNTX1BPUlQsIFFVT1RFICsgYXJnc1swXSArIFFVT1RFKSwKLS8vICAgICAgICAgICAgICAgICAgZXh0ZWxlbXMuZ2V0KGspLCBfTU9SRV9USEVOX09ORV9BRERSRVNTX1BPUlQsIGFyZ3MpOwotLy8gICAgICAgICAgICAgIH0KLS8vICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFsaWRhdGVFeHRlbnNpYmlsaXR5RWxlbWVudExpc3QocGFyZW50cywgcC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSwgdmFsSW5mbyk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcGFyZW50cy5yZW1vdmUoMCk7Ci0gICAgICB9Ci0gICAgICAvLyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIGZvciB0aGUgc2VydmljZQotICAgICAgdmFsaWRhdGVFeHRlbnNpYmlsaXR5RWxlbWVudExpc3QocGFyZW50cywgcy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSwgdmFsSW5mbyk7Ci0gICAgICBwYXJlbnRzLnJlbW92ZSgwKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2tzIHRoYXQgdGhlIGJpbmRpbmdzIHJlZmVyIHRvIHZhbGlkIFBvcnRUeXBlcyBhbmQgYWxsIG9mIHRoZSBvcGVyYXRpb25zCi0gIC8vIGluIGEgZ2l2ZW4gYmluZGluZyByZWZlciB0byBhIGRlZmluZWQgb3BlcmF0aW9uIHdpdGhpbiB0aGUgY29ycmVzcG9uZGluZwotICAvLyBQb3J0VHlwZS4KLSAgICogCi0gICAqIEBwYXJhbSB3c2RsRGVmaW5pdGlvbiBUaGUgV1NETCBkZWZpbml0aW9ucyBlbGVtZW50LgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgdmFsaWRhdGVCaW5kaW5ncyhEZWZpbml0aW9uIHdzZGxEZWZpbml0aW9uLCBJV1NETDExVmFsaWRhdGlvbkluZm8gdmFsSW5mbykKLSAgewotICAgIGlmICh3c2RsRGVmaW5pdGlvbi5nZXRCaW5kaW5ncygpID09IG51bGwpCi0gICAgICByZXR1cm47Ci0gICAgT2JqZWN0IGJpbmRpbmdzW10gPSB3c2RsRGVmaW5pdGlvbi5nZXRCaW5kaW5ncygpLnZhbHVlcygpLnRvQXJyYXkoKTsKLSAgICBMaXN0IHBhcmVudHMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgcGFyZW50cy5hZGQod3NkbERlZmluaXRpb24pOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYmluZGluZ3MubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgQmluZGluZyBiID0gKEJpbmRpbmcpYmluZGluZ3NbaV07Ci0gICAgICBwYXJlbnRzLmFkZCgwLCBiKTsKLSAgICAgIFBvcnRUeXBlIHBvcnRUeXBlID0gYi5nZXRQb3J0VHlwZSgpOwotCi0gICAgICBpZiAocG9ydFR5cGUgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0gICAgICAvLyB0aGUgUG9ydFR5cGUgaXMgbm90IGRlZmluZWQgc28gZG9uJ3QgYm90aGVyIGNoZWNraW5nIHRoZSBvcGVyYXRpb25zCi0gICAgICBpZiAocG9ydFR5cGUuaXNVbmRlZmluZWQoKSkKLSAgICAgIHsgU3RyaW5nW10gYXJncyA9IHtwb3J0VHlwZS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpLCBiLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCl9OwotICAgICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKAotICAgICAgICAgICAgX1BPUlRUWVBFX1VOREVGSU5FRF9GT1JfQklORElORywKLSAgICAgICAgICAgIFFVT1RFICsgYXJnc1swXSArIFFVT1RFLAotICAgICAgICAgICAgUVVPVEUgKyBhcmdzWzFdICsgUVVPVEUpLAotICAgICAgICAgIGIsIF9QT1JUVFlQRV9VTkRFRklORURfRk9SX0JJTkRJTkcsIGFyZ3MpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyB0aGUgUG9ydFR5cGUgaXMgZGVmaW5lZCBzbyBub3cgd2UgaGF2ZSB0byBjaGVjayB0aGF0IHRoZSBvcGVyYXRpb25zIGFyZSBkZWZpbmVkCi0gICAgICAgIE9iamVjdCBiaW5kaW5nT3BlcmF0aW9uc1tdID0gYi5nZXRCaW5kaW5nT3BlcmF0aW9ucygpLnRvQXJyYXkoKTsKLQotICAgICAgICAvLyBjaGVjayBpZiB0aGUgb3BlcmF0aW9uIGlzIGRlZmluZWQgZm9yIGVhY2ggQmluZGluZ09wZXJhdGlvbgotICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IGJpbmRpbmdPcGVyYXRpb25zLmxlbmd0aDsgaysrKQotICAgICAgICB7Ci0gICAgICAgICAgQmluZGluZ09wZXJhdGlvbiBibyA9IChCaW5kaW5nT3BlcmF0aW9uKWJpbmRpbmdPcGVyYXRpb25zW2tdOwotICAgICAgICAgIHBhcmVudHMuYWRkKDAsIGJvKTsKLSAgICAgICAgICBpZiAoYm8uZ2V0T3BlcmF0aW9uKCkgPT0gbnVsbCB8fCBiby5nZXRPcGVyYXRpb24oKS5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZ1tdIGFyZ3MgPSB7Yi5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpLCBwb3J0VHlwZS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpfTsKLSAgICAgICAgICAgIHZhbEluZm8uYWRkRXJyb3IoCi0gICAgICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKAotICAgICAgICAgICAgICAgIF9PUEVSQVRJT05fVU5ERUZJTkVEX0ZPUl9QT1JUVFlQRSwKLSAgICAgICAgICAgICAgICBRVU9URSArIGFyZ3NbMF0gKyBRVU9URSwKLSAgICAgICAgICAgICAgICBRVU9URSArIGFyZ3NbMV0gKyBRVU9URSksCi0gICAgICAgICAgICAgIGJvLCBfT1BFUkFUSU9OX1VOREVGSU5FRF9GT1JfUE9SVFRZUEUsIGFyZ3MpOwotICAgICAgICAgICAgLy8gbmljZSBpZGVhIHRvIGFkZCBzdWdnZXN0aW9ucyB0byBvdGhlciBlbGVtZW50cyB0byBmaXggdGhlIGVycm9yCi0gICAgICAgICAgICAvLyBidXQgaXQgZG9lc24ndCB3b3JrIHdpdGggbXVsdGlwZSBmaWxlcyBsaWtlIHRoaXMKLSAgICAgICAgICAgIC8vYWRkVmFsaWRhdGlvbk1lc3NhZ2Uod2FybmluZ0xpc3QscG9ydFR5cGUscG9ydFR5cGUuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSArICJEZWZpbmUgYW4gb3BlcmF0aW9uIGhlcmUgdG8gY29ycmVzcG9uZCB3aXRoIHRoZSBvcGVyYXRpb24gaW46ICIgKyBiby5nZXROYW1lKCkpOwotICAgICAgICAgIH0KLSAgICAgICAgICAvLyB0YWtlIGNhcmUgb2YgYWxsIHRoZSBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIGluIHRoZSBiaW5kaW5nIG9wZXJhdGlvbiwgYmluZGluZyBpbnB1dHMsIG91dHB1dHMgYW5kIGZhdWx0cwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBCaW5kaW5nSW5wdXQgYmlucHV0ID0gYm8uZ2V0QmluZGluZ0lucHV0KCk7Ci0gICAgICAgICAgICBpZiAoYmlucHV0ICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHBhcmVudHMuYWRkKDAsIGJpbnB1dCk7Ci0gICAgICAgICAgICAgIC8vIGV4dGVuc2liaWxpdHkgZWxlbWVudHMgZm9yIGJpbmRpbmcgb3BlcmF0aW9uIGlucHV0Ci0gICAgICAgICAgICAgIHZhbGlkYXRlRXh0ZW5zaWJpbGl0eUVsZW1lbnRMaXN0KAotICAgICAgICAgICAgICAgIHBhcmVudHMsCi0gICAgICAgICAgICAgICAgYm8uZ2V0QmluZGluZ0lucHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCksCi0gICAgICAgICAgICAgICAgdmFsSW5mbyk7Ci0gICAgICAgICAgICAgIHBhcmVudHMucmVtb3ZlKDApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgQmluZGluZ091dHB1dCBib3V0cHV0ID0gYm8uZ2V0QmluZGluZ091dHB1dCgpOwotICAgICAgICAgICAgaWYgKGJvdXRwdXQgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgcGFyZW50cy5hZGQoMCwgYm91dHB1dCk7Ci0gICAgICAgICAgICAgIC8vIGV4dGVuc2liaWxpdHkgZWxlbWVudHMgZm9yIGJpbmRpbmcgb3BlcmF0aW9uIG91dHB1dAotICAgICAgICAgICAgICB2YWxpZGF0ZUV4dGVuc2liaWxpdHlFbGVtZW50TGlzdCgKLSAgICAgICAgICAgICAgICBwYXJlbnRzLAotICAgICAgICAgICAgICAgIGJvLmdldEJpbmRpbmdPdXRwdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSwKLSAgICAgICAgICAgICAgICB2YWxJbmZvKTsKLSAgICAgICAgICAgICAgcGFyZW50cy5yZW1vdmUoMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBubyBpbnB1dCBvciBvdXRwdXQgaGFzIGJlZW4gZGVmaW5lZCBmb3IgdGhlIG9wZXJhdGlvbgotICAgICAgICAgICAgaWYgKGJpbnB1dCA9PSBudWxsICYmIGJvdXRwdXQgPT0gbnVsbCkKLSAgICAgICAgICAgIHsgU3RyaW5nW10gYXJncyA9IHsgYm8uZ2V0TmFtZSgpIH07Ci0gICAgICAgICAgICAgIHZhbEluZm8uYWRkRXJyb3IoCi0gICAgICAgICAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX09QRVJBVElPTl9OT19JTlBVVF9PUl9PVVRQVVQsIFFVT1RFICsgYXJnc1swXSArIFFVT1RFKSwKLSAgICAgICAgICAgICAgICBibywgX09QRVJBVElPTl9OT19JTlBVVF9PUl9PVVRQVVQsIGFyZ3MpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyBmb3IgZWFjaCBiaW5kaW5nIG9wZXJhdGlvbiBmYXVsdAotICAgICAgICAgICAgSXRlcmF0b3IgZmF1bHRzID0gYm8uZ2V0QmluZGluZ0ZhdWx0cygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICB3aGlsZSAoZmF1bHRzLmhhc05leHQoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgQmluZGluZ0ZhdWx0IGJmID0gKEJpbmRpbmdGYXVsdClmYXVsdHMubmV4dCgpOwotICAgICAgICAgICAgICBwYXJlbnRzLmFkZCgwLCBiZik7Ci0gICAgICAgICAgICAgIHZhbGlkYXRlRXh0ZW5zaWJpbGl0eUVsZW1lbnRMaXN0KHBhcmVudHMsIGJmLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLCB2YWxJbmZvKTsKLSAgICAgICAgICAgICAgcGFyZW50cy5yZW1vdmUoMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIC8vIGV4dGVuc2liaWxpdHkgZWxlbWVudHMgZm9yIGJpbmRpbmcgb3BlcmF0aW9uCi0gICAgICAgICAgdmFsaWRhdGVFeHRlbnNpYmlsaXR5RWxlbWVudExpc3QocGFyZW50cywgYm8uZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCksIHZhbEluZm8pOwotICAgICAgICAgIHBhcmVudHMucmVtb3ZlKDApOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvLyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIGZvciB0aGUgYmluZGluZwotICAgICAgdmFsaWRhdGVFeHRlbnNpYmlsaXR5RWxlbWVudExpc3QocGFyZW50cywgYi5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSwgdmFsSW5mbyk7Ci0gICAgICBwYXJlbnRzLnJlbW92ZSgwKTsKLSAgICB9Ci0KLSAgfQotCi0gIC8qKgotICAgKiBDaGVjayB0aGF0IGFsbCBvZiB0aGUgUG9ydFR5cGVzIGhhdmUgdmFsaWQgbWVzc2FnZXMgYXNzb2NpYXRlZCB3aXRoIHRoZWlyCi0gIC8vIG9wZXJhdGlvbiBpbnB1dCwgb3V0cHV0IGFuZCBmYXVsdCB0eXBlcy4KLSAgICogCi0gICAqIEBwYXJhbSB3c2RsRGVmaW5pdGlvbiBUaGUgV1NETCBkZWZpbml0aW9ucyBlbGVtZW50LgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgdmFsaWRhdGVQb3J0VHlwZXMoRGVmaW5pdGlvbiB3c2RsRGVmaW5pdGlvbiwgSVdTREwxMVZhbGlkYXRpb25JbmZvIHZhbEluZm8pCi0gIHsKLSAgICBpZiAod3NkbERlZmluaXRpb24uZ2V0UG9ydFR5cGVzKCkgPT0gbnVsbCkKLSAgICAgIHJldHVybjsKLSAgICBPYmplY3QgcG9ydHR5cGVzW10gPSB3c2RsRGVmaW5pdGlvbi5nZXRQb3J0VHlwZXMoKS52YWx1ZXMoKS50b0FycmF5KCk7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHBvcnR0eXBlcy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBQb3J0VHlwZSBwID0gKFBvcnRUeXBlKXBvcnR0eXBlc1tpXTsKLSAgICAgIE9iamVjdCBvcGVyYXRpb25zW10gPSBwLmdldE9wZXJhdGlvbnMoKS50b0FycmF5KCk7Ci0gICAgICBMaXN0IGluQW5kT3V0TmFtZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBqID0gMDsgaiA8IG9wZXJhdGlvbnMubGVuZ3RoOyBqKyspCi0gICAgICB7Ci0gICAgICAgIE9wZXJhdGlvbiBvID0gKE9wZXJhdGlvbilvcGVyYXRpb25zW2pdOwotICAgICAgICBpZiAobyA9PSBudWxsIHx8IG8uaXNVbmRlZmluZWQoKSkKLSAgICAgICAgewotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gY2hlY2sgdGhhdCB0aGUgbWVzc2FnZXMgYXJlIGRlZmluZWQgZm9yIHRoZSBpbnB1dCwgb3V0cHV0IGFuZCBmYXVsdHMKLSAgICAgICAgTWVzc2FnZSBtOwotICAgICAgICBJbnB1dCBpbnB1dCA9IG8uZ2V0SW5wdXQoKTsKLSAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgaW5wdXROYW1lID0gaW5wdXQuZ2V0TmFtZSgpOwotICAgICAgICAgIC8vIGlmIHRoZSBuYW1lIGlzbid0IGRlZmluZWQgaXQgZGVmYXVsdHMgdG8gdGhpcwotICAgICAgICAgIGlmIChpbnB1dE5hbWUgPT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpbnB1dE5hbWUgPSBvLmdldE5hbWUoKSArIFJFUVVFU1Q7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChpbkFuZE91dE5hbWVzLmNvbnRhaW5zKGlucHV0TmFtZSkpCi0gICAgICAgICAgeyBTdHJpbmdbXSBhcmdzID0ge2lucHV0TmFtZSwgcC5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpIH07Ci0gICAgICAgICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZygKLSAgICAgICAgICAgICAgICBfSU5QVVRfTkFNRV9OT1RfVU5JUVVFLAotICAgICAgICAgICAgICAgIFFVT1RFICsgYXJnc1swXSArIFFVT1RFLAotICAgICAgICAgICAgICAgIFFVT1RFICsgYXJnc1sxXSArIFFVT1RFKSwKLSAgICAgICAgICAgICAgaW5wdXQsIF9JTlBVVF9OQU1FX05PVF9VTklRVUUsIGFyZ3MpOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgaW5BbmRPdXROYW1lcy5hZGQoaW5wdXROYW1lKTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBtID0gaW5wdXQuZ2V0TWVzc2FnZSgpOwotICAgICAgICAgIGlmIChtICE9IG51bGwgJiYgbS5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBtZXNzTmFtZSA9IEVNUFRZX1NUUklORzsKLSAgICAgICAgICAgIFFOYW1lIG1lc3NRTmFtZSA9IG0uZ2V0UU5hbWUoKTsKLSAgICAgICAgICAgIGlmIChtZXNzUU5hbWUgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgbWVzc05hbWUgPSBtZXNzUU5hbWUuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBTdHJpbmdbXSBhcmdzID0ge21lc3NOYW1lfTsKLSAgICAgICAgICAgIHZhbEluZm8uYWRkRXJyb3IobWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX01FU1NBR0VfVU5ERUZJTkVEX0ZPUl9JTlBVVCwgUVVPVEUgKyBhcmdzWzBdICsgUVVPVEUpLAotICAgICAgICAgICAgICAgIGlucHV0LCBfTUVTU0FHRV9VTkRFRklORURfRk9SX0lOUFVULCBhcmdzKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgT3V0cHV0IG91dHB1dCA9IG8uZ2V0T3V0cHV0KCk7Ci0gICAgICAgIGlmIChvdXRwdXQgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBvdXRwdXROYW1lID0gb3V0cHV0LmdldE5hbWUoKTsKLSAgICAgICAgICAvLyBpZiB0aGUgbmFtZSBpc24ndCBkZWZpbmVkIGl0IGRlZmF1bHRzIHRvIHRoaXMKLSAgICAgICAgICBpZiAob3V0cHV0TmFtZSA9PSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG91dHB1dE5hbWUgPSBvLmdldE5hbWUoKSArIFJFU1BPTlNFOwotICAgICAgICAgIH0KLQotICAgICAgICAgIGlmIChpbkFuZE91dE5hbWVzLmNvbnRhaW5zKG91dHB1dE5hbWUpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZ1tdIGFyZ3MgPSB7b3V0cHV0TmFtZSwgcC5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpfTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoCi0gICAgICAgICAgICAgICAgX09VVFBVVF9OQU1FX05PVF9VTklRVUUsCi0gICAgICAgICAgICAgICAgUVVPVEUgKyBhcmdzWzBdICsgUVVPVEUsCi0gICAgICAgICAgICAgICAgUVVPVEUgKyBhcmdzWzFdICsgUVVPVEUpLAotICAgICAgICAgICAgICBvdXRwdXQsIF9PVVRQVVRfTkFNRV9OT1RfVU5JUVVFLCBhcmdzKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGluQW5kT3V0TmFtZXMuYWRkKG91dHB1dE5hbWUpOwotICAgICAgICAgIH0KLQotICAgICAgICAgIG0gPSBvdXRwdXQuZ2V0TWVzc2FnZSgpOwotICAgICAgICAgIGlmIChtICE9IG51bGwgJiYgbS5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBtZXNzTmFtZSA9IEVNUFRZX1NUUklORzsKLSAgICAgICAgICAgIFFOYW1lIG1lc3NRTmFtZSA9IG0uZ2V0UU5hbWUoKTsKLSAgICAgICAgICAgIGlmIChtZXNzUU5hbWUgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgbWVzc05hbWUgPSBtZXNzUU5hbWUuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBTdHJpbmdbXSBhcmdzID0ge21lc3NOYW1lfTsKLSAgICAgICAgICAgIHZhbEluZm8uYWRkRXJyb3IobWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX01FU1NBR0VfVU5ERUZJTkVEX0ZPUl9PVVRQVVQsIFFVT1RFICsgYXJnc1swXSArIFFVT1RFKSwKLSAgICAgICAgICAgICAgICBvdXRwdXQsIF9NRVNTQUdFX1VOREVGSU5FRF9GT1JfT1VUUFVULCBhcmdzKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBPYmplY3QgZmF1bHRzW10gPSBvLmdldEZhdWx0cygpLnZhbHVlcygpLnRvQXJyYXkoKTsKLQotICAgICAgICAvL0xpc3QgZmF1bHROYW1lcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBmYXVsdHMubGVuZ3RoOyBrKyspCi0gICAgICAgIHsKLSAgICAgICAgICBGYXVsdCBmID0gKEZhdWx0KWZhdWx0c1trXTsKLSAgICAgICAgICBtID0gZi5nZXRNZXNzYWdlKCk7Ci0gICAgICAgICAgaWYgKG0gIT0gbnVsbCAmJiBtLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIG1lc3NOYW1lID0gRU1QVFlfU1RSSU5HOwotICAgICAgICAgICAgUU5hbWUgbWVzc1FOYW1lID0gbS5nZXRRTmFtZSgpOwotICAgICAgICAgICAgaWYgKG1lc3NRTmFtZSAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBtZXNzTmFtZSA9IG1lc3NRTmFtZS5nZXRMb2NhbFBhcnQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0cmluZyBhcmdzW10gPSB7bWVzc05hbWV9OwotICAgICAgICAgICAgdmFsSW5mby5hZGRFcnJvcihtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfTUVTU0FHRV9VTkRFRklORURfRk9SX0ZBVUxULCBRVU9URSArIGFyZ3NbMF0gKyBRVU9URSksCi0gICAgICAgICAgICAgICAgZiwgX01FU1NBR0VfVU5ERUZJTkVEX0ZPUl9GQVVMVCwgYXJncyk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrIHRoYXQgYWxsIHRoZSBtZXNzYWdlcyBkZWZpbmVkIGluIHRoZSBXU0RMIGRvY3VtZW50IGFyZSB2YWxpZC4KLSAgICogCi0gICAqIEBwYXJhbSB3c2RsRGVmaW5pdGlvbiBUaGUgV1NETCBkZWZpbml0aW9ucyBlbGVtZW50LgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgdmFsaWRhdGVNZXNzYWdlcyhEZWZpbml0aW9uIHdzZGxEZWZpbml0aW9uLCBJV1NETDExVmFsaWRhdGlvbkluZm8gdmFsSW5mbykKLSAgewotICAgIGlmICh3c2RsRGVmaW5pdGlvbi5nZXRNZXNzYWdlcygpID09IG51bGwpCi0gICAgICByZXR1cm47Ci0gICAgSXRlcmF0b3IgbWVzc2FnZXMgPSB3c2RsRGVmaW5pdGlvbi5nZXRNZXNzYWdlcygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0KLSAgICB3aGlsZSAobWVzc2FnZXMuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIE1lc3NhZ2UgbSA9IChNZXNzYWdlKW1lc3NhZ2VzLm5leHQoKTsKLSAgICAgIGlmICghbS5pc1VuZGVmaW5lZCgpKQotICAgICAgewotICAgICAgICAvLyBpZiB0aGUgbWVzc2FnZSBoYXMgYSBwYXJ0IChhbmQgaXQgZG9lc24ndCBoYXZlIHRvKQotICAgICAgICAvLyBlbnN1cmUgZWFjaCBtZXNzYWdlIHBhcnQgaGFzIGVpdGhlciBhbiBlbGVtZW50IG9yIGEgdHlwZQotICAgICAgICBpZiAoIW0uZ2V0UGFydHMoKS5pc0VtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBJdGVyYXRvciBwYXJ0cyA9IG0uZ2V0UGFydHMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgICAgICAgIHdoaWxlIChwYXJ0cy5oYXNOZXh0KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgUGFydCBwID0gKFBhcnQpcGFydHMubmV4dCgpOwotICAgICAgICAgICAgUU5hbWUgZWxlbWVudE5hbWUgPSBwLmdldEVsZW1lbnROYW1lKCk7Ci0gICAgICAgICAgICBRTmFtZSB0eXBlTmFtZSA9IHAuZ2V0VHlwZU5hbWUoKTsKLSAgICAgICAgICAgIE1hcCBleHRBdHRzID0gcC5nZXRFeHRlbnNpb25BdHRyaWJ1dGVzKCk7Ci0gICAgICAgICAgICAvLyBUT0RPOlRoaXMgd2lsbCBoYXZlIHRvIGJlIGV4dGVuZGVkIGFzIHBhcnRzIGNhbiBoYXZlIGV4dGVuc2liaWxpdHkgZWxlbWVudHMKLSAgICAgICAgICAgIC8vZW5zdXJlIHRoZSBwYXJ0IGhhcyBhIHR5cGUgb3IgYW4gZWxlbWVudCBkZWZpbmVkCi0gICAgICAgICAgICBpZiAoZWxlbWVudE5hbWUgPT0gbnVsbCAmJiB0eXBlTmFtZSA9PSBudWxsICYmIChleHRBdHRzID09IG51bGwgfHwgZXh0QXR0cy5pc0VtcHR5KCkpKQotICAgICAgICAgICAgeyBTdHJpbmdbXSBhcmdzID0geyBwLmdldE5hbWUoKX07Ci0gICAgICAgICAgICAgIHZhbEluZm8uYWRkRXJyb3IobWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX1BBUlRfTk9fRUxFTUVOVF9PUl9UWVBFLCBRVU9URSArIGFyZ3NbMF0gKyBRVU9URSksCi0gICAgICAgICAgICAgICAgICBwLCBfUEFSVF9OT19FTEVNRU5UX09SX1RZUEUsIGFyZ3MpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy9oZXJlIHRoZSBwYXJ0IGhhcyBib3RoIHRoZSBlbGVtZW50IGFuZCB0eXBlIGRlZmluZWQgYW5kIGl0IGNhbiBvbmx5IGhhdmUgb25lIGRlZmluZWQJCi0gICAgICAgICAgICBlbHNlIGlmIChlbGVtZW50TmFtZSAhPSBudWxsICYmIHR5cGVOYW1lICE9IG51bGwpCi0gICAgICAgICAgICB7IFN0cmluZ1tdIGFyZ3MgPSB7cC5nZXROYW1lKCl9OwotICAgICAgICAgICAgICB2YWxJbmZvLmFkZEVycm9yKG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9QQVJUX0JPVEhfRUxFTUVOVF9BTkRfVFlQRSwgUVVPVEUgKyBhcmdzWzBdICsgUVVPVEUpLAotICAgICAgICAgICAgICAgICAgcCwgX1BBUlRfQk9USF9FTEVNRU5UX0FORF9UWVBFLCBhcmdzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGVsZW1lbnROYW1lICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlmICghY2hlY2tQYXJ0Q29uc3RpdHVlbnQoZWxlbWVudE5hbWUuZ2V0TmFtZXNwYWNlVVJJKCksCi0gICAgICAgICAgICAgICAgZWxlbWVudE5hbWUuZ2V0TG9jYWxQYXJ0KCksCi0gICAgICAgICAgICAgICAgRUxFTUVOVCwKLSAgICAgICAgICAgICAgICBwLAotICAgICAgICAgICAgICAgIHZhbEluZm8pKQotICAgICAgICAgICAgICB7IFN0cmluZ1tdIGFyZ3MgPSB7cC5nZXROYW1lKCksIGVsZW1lbnROYW1lLmdldExvY2FsUGFydCgpfTsKLSAgICAgICAgICAgICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICAgICAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoCi0gICAgICAgICAgICAgICAgICAgIF9QQVJUX0lOVkFMSURfRUxFTUVOVCwKLSAgICAgICAgICAgICAgICAgICAgUVVPVEUgKyBhcmdzWzBdICsgUVVPVEUsCi0gICAgICAgICAgICAgICAgICAgIFFVT1RFICsgYXJnc1sxXSArIFFVT1RFKSwKLSAgICAgICAgICAgICAgICAgIHAsIF9QQVJUX0lOVkFMSURfRUxFTUVOVCwgYXJncyk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVOYW1lICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIC8vIGNoZWNrIHRoYXQgdGhlIHR5cGUgaXRzZWxmIGlzIGRlZmluZWQgcHJvcGVybHkKLSAgICAgICAgICAgICAgaWYgKCFjaGVja1BhcnRDb25zdGl0dWVudCh0eXBlTmFtZS5nZXROYW1lc3BhY2VVUkkoKSwgdHlwZU5hbWUuZ2V0TG9jYWxQYXJ0KCksIFRZUEUsIHAsIHZhbEluZm8pKQotICAgICAgICAgICAgICB7IFN0cmluZ1tdIGFyZ3MgPSB7cC5nZXROYW1lKCksIHR5cGVOYW1lLmdldExvY2FsUGFydCgpIH07IAotICAgICAgICAgICAgICAgIHZhbEluZm8uYWRkRXJyb3IoCi0gICAgICAgICAgICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZygKLSAgICAgICAgICAgICAgICAgICAgX1BBUlRfSU5WQUxJRF9UWVBFLAotICAgICAgICAgICAgICAgICAgICBRVU9URSArIGFyZ3NbMF0gKyBRVU9URSwKLSAgICAgICAgICAgICAgICAgICAgUVVPVEUgKyBhcmdzWzFdICsgUVVPVEUpLAotICAgICAgICAgICAgICAgICAgcCwgX1BBUlRfSU5WQUxJRF9UWVBFLCBhcmdzKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBDaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gbmFtZSBpcyBkZWZpbmVkIGluIHRoZSBuYW1lc3BhY2UgZm9yIHRoZSBwYXJ0LiAgQSBwYXJ0IGlzIGFuCi0gICAqIEVMRU1FTlQgb3IgYSBUWVBFLgotICAgKiAKLSAgICogQHBhcmFtIG5hbWVzcGFjZSBUaGUgbmFtZXNwYWNlIHRvIGNoZWNrLgotICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSB0byBjaGVjay4KLSAgICogQHBhcmFtIHBhcnQgVGhlIHBhcnQgdG8gY2hlY2ssIGVpdGhlciBFTEVNRU5UIG9yIFRZUEUuCi0gICAqIEBwYXJhbSBwYXJ0T2JqZWN0IFRoZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBnaXZlbiBwYXJ0LgotICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHBhcnQgZWxlbWVudCBvZiB0eXBlIGlzIGRlZmluZWQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIGNoZWNrUGFydENvbnN0aXR1ZW50KAotICAgIFN0cmluZyBuYW1lc3BhY2UsCi0gICAgU3RyaW5nIG5hbWUsCi0gICAgaW50IHBhcnQsCi0gICAgUGFydCBwYXJ0T2JqZWN0LAotICAgIElXU0RMMTFWYWxpZGF0aW9uSW5mbyB2YWxJbmZvKQotICB7Ci0KLSAgICBib29sZWFuIHBhcnR2YWxpZCA9IGZhbHNlOwotICAgIC8vIEZpcnN0IHRha2UgY2FyZSBvZiB0aGUgc2l0dWF0aW9uIHdoZXJlIGl0J3MgZnJvbSB0aGUgc2NoZW1hIG5hbWVzcGFjZS4KLSAgICAvLyBUaGUgMTk5OSwgMjAwMCBhbmQgMjAwMSBzY2hlbWEgbmFtZXNwYWNlcyBhcmUgYWxsIGFjY2VwdGVkLgotICAgIGlmIChuYW1lc3BhY2UuZXF1YWxzKENvbnN0YW50cy5OU19VUklfWFNEXzIwMDEpCi0gICAgICB8fCBuYW1lc3BhY2UuZXF1YWxzKENvbnN0YW50cy5OU19VUklfWFNEXzE5OTkpCi0gICAgICB8fCBuYW1lc3BhY2UuZXF1YWxzKENvbnN0YW50cy5OU19VUklfWFNEXzIwMDApKQotICAgIHsKLSAgICAgIFNjaGVtYUF0dHJpYnV0ZVRhYmxlIHhzZFRhYmxlID0gbmV3IFNjaGVtYUF0dHJpYnV0ZVRhYmxlKCk7Ci0gICAgICBpZiAoeHNkVGFibGUuY29udGFpbnNTeW1ib2wobmFtZSkpCi0gICAgICB7Ci0gICAgICAgIHBhcnR2YWxpZCA9IHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIGNoZWNrIGlubGluZSBhbmQgaW1wb3J0ZWQgc2NoZW1hCi0gICAgZWxzZQotICAgIHsKLSAgICAgIFhTTW9kZWxbXSBzY2hlbWFzID0gdmFsSW5mby5nZXRTY2hlbWFzKCk7Ci0gICAgICBpbnQgbnVtU2NoZW1hcyA9IHNjaGVtYXMubGVuZ3RoOwotICAgICAgLy9JdGVyYXRvciBzY2hlbWFzSXRlciA9IHNjaGVtYXMuaXRlcmF0b3IoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtU2NoZW1hczsgaSsrKQotICAgICAgewotICAgICAgICBYU01vZGVsIHNjaGVtYSA9IHNjaGVtYXNbaV07Ci0gICAgICAgIGlmIChzY2hlbWEgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGlmIChwYXJ0ID09IEVMRU1FTlQgJiYgc2NoZW1hLmdldEVsZW1lbnREZWNsYXJhdGlvbihuYW1lLCBuYW1lc3BhY2UpICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgcGFydHZhbGlkID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIGlmIChwYXJ0ID09IFRZUEUgJiYgc2NoZW1hLmdldFR5cGVEZWZpbml0aW9uKG5hbWUsIG5hbWVzcGFjZSkgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBwYXJ0dmFsaWQgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIElmIHRoZSBTT0FQIGVuY29kaW5nIG5hbWVzcGFjZSBoYXNuJ3QgYmVlbiBleHBsaWNpdGx5IGltcG9ydGVkIGRvIHNvCi0JLy8gbm93LgotICAgIC8vIEFsbG93IHRoZSBTT0FQIGVuY29kaW5nIG5hbWVzcGFjZSB0byBiZSBhdXRvbWF0aWNhbGx5IGltcG9ydGVkIGJ1dCBtYXJrCi0JLy8gaXQgYXMgYSB3YXJuaW5nLgotICAgIGlmICghcGFydHZhbGlkICYmIG5hbWVzcGFjZS5lcXVhbHMoU09BUF9FTkNPRElOR19VUkkpKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBYU0RWYWxpZGF0b3IgeHNkVmFsID0gbmV3IFhTRFZhbGlkYXRvcigpOwotICAgICAgICBTdHJpbmcgc29hcEVuYyA9IHZhbEluZm8uZ2V0VVJJUmVzb2x2ZXIoKS5yZXNvbHZlKCIiLCBTT0FQX0VOQ09ESU5HX1VSSSwgbnVsbCkuZ2V0UGh5c2ljYWxMb2NhdGlvbigpOwotICAgICAgICBpZihzb2FwRW5jICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICB4c2RWYWwudmFsaWRhdGUoc29hcEVuYywgbnVsbCwgdmFsSW5mby5nZXRTY2hlbWFDYWNoZSgpKTsKLSAgICAgICAgICAvLyBzYW5pdHkgY2hlY2sgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyB3cm9uZwotICAgICAgICAgIGlmICh4c2RWYWwuaXNWYWxpZCgpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFhTTW9kZWwgeHNNb2RlbCA9IHhzZFZhbC5nZXRYU01vZGVsKCk7Ci0KLSAgICAgICAgICAgIGlmIChwYXJ0ID09IEVMRU1FTlQgJiYgeHNNb2RlbC5nZXRFbGVtZW50RGVjbGFyYXRpb24obmFtZSwgbmFtZXNwYWNlKSAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBwYXJ0dmFsaWQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAocGFydCA9PSBUWVBFICYmIHhzTW9kZWwuZ2V0VHlwZURlZmluaXRpb24obmFtZSwgbmFtZXNwYWNlKSAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBwYXJ0dmFsaWQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFsSW5mby5hZGRXYXJuaW5nKG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9XQVJOX1NPQVBFTkNfSU1QT1JURURfUEFSVCwgUVVPVEUgKyBuYW1lICsgUVVPVEUpLCBwYXJ0T2JqZWN0KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAJTG9nZ2VyRmFjdG9yeS5nZXRJbnN0YW5jZSgpLmdldExvZ2dlcigpLmxvZygiQW4gZXhjZXB0aW9uIG9jY3VycmVkIHdoaWxlIHBlcmZvcm1pbmcgV1NETCB2YWxpZGF0aW9uIG9mIGEgcGFydCB3aXRoIHRoZSBTT0FQIGVuY29kaW5nIG5hbWVzcGFjZS4iLCBJTG9nZ2VyLlNFVl9FUlJPUiwgZSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBwYXJ0dmFsaWQ7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9XU0RMMTFWYWxpZGF0aW9uSW5mb0ltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvV1NETDExVmFsaWRhdGlvbkluZm9JbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhMzRhNDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9XU0RMMTFWYWxpZGF0aW9uSW5mb0ltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTE7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuZ3JhbW1hcnMuWE1MR3JhbW1hclBvb2w7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLklWYWxpZGF0aW9uSW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLlZhbGlkYXRpb25JbmZvSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnJlc29sdmVyLlVSSVJlc29sdmVyOwotCi0vKioKLSAqIEFuIGltcGxlbWVuYXRpb24gb2YgV1NETDExVmFsaWRhdGlvbkluZm8uCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMMTFWYWxpZGF0aW9uSW5mb0ltcGwgaW1wbGVtZW50cyBJV1NETDExVmFsaWRhdGlvbkluZm8KLXsKLSAgcHJpdmF0ZSBJVmFsaWRhdGlvbkluZm8gdmFsaW5mbyA9IG51bGw7Ci0gIHByaXZhdGUgSGFzaHRhYmxlIGVsZW1lbnRsb2NhdGlvbnMgPSBudWxsOwotICBwcml2YXRlIExpc3Qgc2NoZW1hcyA9IG5ldyBWZWN0b3IoKTsKLSAgCi0gIHB1YmxpYyBXU0RMMTFWYWxpZGF0aW9uSW5mb0ltcGwoSVZhbGlkYXRpb25JbmZvIHZhbGluZm8pCi0gIHsKLSAgICB0aGlzLnZhbGluZm8gPSB2YWxpbmZvOwotICB9Ci0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLklXU0RMMTFWYWxpZGF0aW9uSW5mbyNnZXRGaWxlVVJJKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RmlsZVVSSSgpCi0gIHsKLSAgICByZXR1cm4gdmFsaW5mby5nZXRGaWxlVVJJKCk7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5JV1NETDExVmFsaWRhdGlvbkluZm8jYWRkU2NoZW1hKG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTTW9kZWwpCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRTY2hlbWEoWFNNb2RlbCB4c01vZGVsKQotICB7Ci0gICAgaWYgKHhzTW9kZWwgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBzY2hlbWFzLmFkZCh4c01vZGVsKTsKLSAgICB9Ci0KLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLklXU0RMMTFWYWxpZGF0aW9uSW5mbyNnZXRTY2hlbWFzKCkKLSAgICovCi0gIHB1YmxpYyBYU01vZGVsW10gZ2V0U2NoZW1hcygpCi0gIHsKLSAgICByZXR1cm4gKFhTTW9kZWxbXSlzY2hlbWFzLnRvQXJyYXkobmV3IFhTTW9kZWxbc2NoZW1hcy5zaXplKCldKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c2RsLnZhbGlkYXRlLndzZGwxMS5XU0RMMTFWYWxpZGF0aW9uSW5mbyNjbGVhcmRTY2hlbWFzKCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGNsZWFyU2NoZW1hcygpCi0gIHsKLSAgICBzY2hlbWFzLmNsZWFyKCk7Ci0gIH0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuSVdTREwxMVZhbGlkYXRpb25JbmZvI3NldEVsZW1lbnRMb2NhdGlvbnMoamF2YS51dGlsLkhhc2h0YWJsZSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEVsZW1lbnRMb2NhdGlvbnMoSGFzaHRhYmxlIGVsZW1lbnRMb2NhdGlvbnMpCi0gIHsKLSAgICB0aGlzLmVsZW1lbnRsb2NhdGlvbnMgPSBlbGVtZW50TG9jYXRpb25zOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuSVdTREwxMVZhbGlkYXRpb25JbmZvI2FkZEVycm9yKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5PYmplY3QpCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRFcnJvcihTdHJpbmcgbWVzc2FnZSwgT2JqZWN0IGVsZW1lbnQpCi0gIHsKLSAgICBhZGRFcnJvcihtZXNzYWdlLCBlbGVtZW50LCBudWxsLCBudWxsKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuSVdTREwxMVZhbGlkYXRpb25JbmZvI2FkZEVycm9yKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5PYmplY3QsIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5PYmplY3RbXSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEVycm9yKFN0cmluZyBtZXNzYWdlLCBPYmplY3QgZWxlbWVudCwgU3RyaW5nIGVycm9yS2V5LCBPYmplY3RbXSBtZXNzYWdlQXJndW1lbnRzKQotICB7Ci0gICAgTG9jYXRpb25Ib2xkZXIgbG9jYXRpb247Ci0gICAgaWYgKGVsZW1lbnRsb2NhdGlvbnMuY29udGFpbnNLZXkoZWxlbWVudCkpCi0gICAgewotICAgICAgbG9jYXRpb24gPSAoTG9jYXRpb25Ib2xkZXIpZWxlbWVudGxvY2F0aW9ucy5nZXQoZWxlbWVudCk7Ci0gICAgICBhZGRFcnJvcihtZXNzYWdlLCBsb2NhdGlvbi5nZXRMaW5lKCksIGxvY2F0aW9uLmdldENvbHVtbigpLCBsb2NhdGlvbi5nZXRVUkkoKSwgZXJyb3JLZXksIG1lc3NhZ2VBcmd1bWVudHMpOwotICAgIH0KLSAgICAvLyBpZiB3ZSBnaXZlIGl0IGFuIGVsZW1lbnQgdGhhdCBoYXNuJ3QgYmVlbiBkZWZpbmVkIHdlJ2xsIHNldCB0aGUgbG9jYXRpb24KLSAgICAvLyBhdCAoMCwwKSBzbyB0aGUgZXJyb3Igc2hvd3MgdXAgYnV0IG5vIGxpbmUgbWFya2VyIGluIHRoZSBlZGl0b3IKLSAgICBlbHNlCi0gICAgewotICAgICAgYWRkRXJyb3IobWVzc2FnZSwgMCwgMSwgZ2V0RmlsZVVSSSgpKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5JV1NETDExVmFsaWRhdGlvbkluZm8jYWRkV2FybmluZyhqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuT2JqZWN0KQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkV2FybmluZyhTdHJpbmcgbWVzc2FnZSwgT2JqZWN0IGVsZW1lbnQpCi0gIHsKLSAgICBMb2NhdGlvbkhvbGRlciBsb2NhdGlvbjsKLSAgICBpZiAoZWxlbWVudGxvY2F0aW9ucy5jb250YWluc0tleShlbGVtZW50KSkKLSAgICB7Ci0gICAgICBsb2NhdGlvbiA9IChMb2NhdGlvbkhvbGRlcillbGVtZW50bG9jYXRpb25zLmdldChlbGVtZW50KTsKLSAgICAgIGFkZFdhcm5pbmcobWVzc2FnZSwgbG9jYXRpb24uZ2V0TGluZSgpLCBsb2NhdGlvbi5nZXRDb2x1bW4oKSwgbG9jYXRpb24uZ2V0VVJJKCkpOwotICAgIH0KLSAgICAvLyBpZiB3ZSBnaXZlIGl0IGFuIGVsZW1lbnQgdGhhdCBoYXNuJ3QgYmVlbiBkZWZpbmVkIHdlJ2xsIHNldCB0aGUgbG9jYXRpb24KLSAgICAvLyBhdCAoMCwwKSBzbyB0aGUgZXJyb3Igc2hvd3MgdXAgYnV0IG5vIGxpbmUgbWFya2VyIGluIHRoZSBlZGl0b3IKLSAgICBlbHNlCi0gICAgewotICAgICAgYWRkV2FybmluZyhtZXNzYWdlLCAwLCAxLCBnZXRGaWxlVVJJKCkpOwotICAgIH0KLQotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3NkbC52YWxpZGF0ZS53c2RsMTEuV1NETDExVmFsaWRhdGlvbkluZm8jYWRkTmFtZXNwYWNlV2l0aE5vVmFsaWRhdG9yKGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotLy8gIHB1YmxpYyB2b2lkIGFkZE5hbWVzcGFjZVdpdGhOb1ZhbGlkYXRvcihTdHJpbmcgbmFtZXNwYWNlKQotLy8gIHsKLS8vICAgIHZhbGluZm8uYWRkTmFtZXNwYWNlV2l0aE5vVmFsaWRhdG9yKG5hbWVzcGFjZSk7Ci0vLwotLy8gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5JV1NETDExVmFsaWRhdGlvbkluZm8jYWRkRXJyb3IoamF2YS5sYW5nLlN0cmluZywgaW50LCBpbnQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRFcnJvcihTdHJpbmcgbWVzc2FnZSwgaW50IGxpbmUsIGludCBjb2x1bW4sIFN0cmluZyB1cmkpCi0gIHsKLSAgICBhZGRFcnJvcihtZXNzYWdlLCBsaW5lLCBjb2x1bW4sIHVyaSwgbnVsbCwgbnVsbCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBhZGRFcnJvcihTdHJpbmcgbWVzc2FnZSwgaW50IGxpbmUsIGludCBjb2x1bW4sIFN0cmluZyB1cmksIFN0cmluZyBlcnJvcktleSwgT2JqZWN0W10gbWVzc2FnZUFyZ3VtZW50cykKLSAgeyAKLSAgICB0cnkKLSAgICB7ICgoVmFsaWRhdGlvbkluZm9JbXBsKXZhbGluZm8pLmFkZEVycm9yKG1lc3NhZ2UsIGxpbmUsIGNvbHVtbiwgdXJpLCBlcnJvcktleSwgbWVzc2FnZUFyZ3VtZW50cyk7Ci0gICAgfQotICAgIGNhdGNoIChDbGFzc0Nhc3RFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICB2YWxpbmZvLmFkZEVycm9yKG1lc3NhZ2UsIGxpbmUsIGNvbHVtbiwgdXJpKTsKLSAgICB9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLklXU0RMMTFWYWxpZGF0aW9uSW5mbyNhZGRXYXJuaW5nKGphdmEubGFuZy5TdHJpbmcsIGludCwgaW50KQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkV2FybmluZyhTdHJpbmcgbWVzc2FnZSwgaW50IGxpbmUsIGludCBjb2x1bW4sIFN0cmluZyB1cmkpCi0gIHsKLSAgICB2YWxpbmZvLmFkZFdhcm5pbmcobWVzc2FnZSwgbGluZSwgY29sdW1uLCB1cmkpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzZGwudmFsaWRhdGUud3NkbDExLldTREwxMVZhbGlkYXRpb25JbmZvI2dldFVSSVJlc29sdmVyKCkKLSAgICovCi0gIHB1YmxpYyBVUklSZXNvbHZlciBnZXRVUklSZXNvbHZlcigpIAotICB7Ci0JcmV0dXJuIHZhbGluZm8uZ2V0VVJJUmVzb2x2ZXIoKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLklXU0RMMTFWYWxpZGF0aW9uSW5mbyNnZXRTY2hlbWFDYWNoZSgpCi0gICAqLwotICBwdWJsaWMgWE1MR3JhbW1hclBvb2wgZ2V0U2NoZW1hQ2FjaGUoKSAKLSAgewotCVhNTEdyYW1tYXJQb29sIGdyYW1tYXJQb29sID0gKFhNTEdyYW1tYXJQb29sKXZhbGluZm8uZ2V0QXR0cmlidXRlKENvbnN0YW50cy5YTUxTQ0hFTUFfQ0FDSEVfQVRUUklCVVRFKTsKLQlyZXR1cm4gZ3JhbW1hclBvb2w7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5JV1NETDExVmFsaWRhdGlvbkluZm8jZ2V0WE1MQ2FjaGUoKQotICAgKi8KLSAgcHVibGljIFhNTEdyYW1tYXJQb29sIGdldFhNTENhY2hlKCkgCi0gIHsKLQlYTUxHcmFtbWFyUG9vbCBncmFtbWFyUG9vbCA9IChYTUxHcmFtbWFyUG9vbCl2YWxpbmZvLmdldEF0dHJpYnV0ZShDb25zdGFudHMuWE1MX0NBQ0hFX0FUVFJJQlVURSk7Ci0JcmV0dXJuIGdyYW1tYXJQb29sOwotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9XU0RMMTFWYWxpZGF0b3JDb250cm9sbGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL1dTREwxMVZhbGlkYXRvckNvbnRyb2xsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDg5NzE5YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL1dTREwxMVZhbGlkYXRvckNvbnRyb2xsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTE7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLldTRExFeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU01vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVdTRExWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5JVmFsaWRhdGlvbkluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5leGNlcHRpb24uVmFsaWRhdGVXU0RMRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudXRpbC5NZXNzYWdlR2VuZXJhdG9yOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotCi1pbXBvcnQgY29tLmlibS53c2RsLkNvbnN0YW50czsKLQotLyoqCi0gKiBUaGUgdmFsaWRhdG9yIGNvbnRyb2xsZXIgaXMgdGhlIGhlYWQgb2YgdmFsaWRhdGlvbi4gCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMMTFWYWxpZGF0b3JDb250cm9sbGVyIGltcGxlbWVudHMgSVdTRExWYWxpZGF0b3IKLXsKLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIFZBTElEQVRPUl9SRVNPVVJDRV9CVU5ETEVfTkFNRSA9ICJ2YWxpZGF0ZXdzZGwiOwotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIF9XQVJOX05PX1ZBTERJQVRPUiA9ICJfV0FSTl9OT19WQUxESUFUT1IiOwotLy8gIHByb3RlY3RlZCBmaW5hbCBpbnQgRVJST1JfTUVTU0FHRSA9IDA7Ci0vLyAgcHJvdGVjdGVkIGZpbmFsIGludCBXQVJOSU5HX01FU1NBR0UgPSAxOwotLy8gIHByb3RlY3RlZCBTdHJpbmcgZmlsZVVSSTsKLS8vICBwcm90ZWN0ZWQgTGlzdCBzY2hlbWFzID0gbmV3IFZlY3RvcigpOwotLy8gIHByb3RlY3RlZCBEZWZpbml0aW9uIHdzZGxEZWZpbml0aW9uOwotICBwcm90ZWN0ZWQgTWVzc2FnZUdlbmVyYXRvciBtZXNzYWdlZ2VuZXJhdG9yID0gbnVsbDsKLSAgLy9wcm90ZWN0ZWQgVmFsaWRhdGlvbkNvbnRyb2xsZXIgdmFsaWRhdGlvbkNvbnRyb2xsZXI7Ci0gIHByb3RlY3RlZCBWYWxpZGF0b3JSZWdpc3RyeSB2ZXIgPSBWYWxpZGF0b3JSZWdpc3RyeS5nZXRJbnN0YW5jZSgpOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICovCi0gIHB1YmxpYyBXU0RMMTFWYWxpZGF0b3JDb250cm9sbGVyKCkKLSAgewotICAgIFJlc291cmNlQnVuZGxlIHJiID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKFZBTElEQVRPUl9SRVNPVVJDRV9CVU5ETEVfTkFNRSwgTG9jYWxlLmdldERlZmF1bHQoKSk7Ci0JbWVzc2FnZWdlbmVyYXRvciA9IG5ldyBNZXNzYWdlR2VuZXJhdG9yKHJiKTsKLSAgfQotCi0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzZGwudmFsaWRhdGUuSVdTRExWYWxpZGF0b3IjdmFsaWRhdGUob3JnLnczYy5kb20uRG9jdW1lbnQsIG9yZy5lY2xpcHNlLndzZGwudmFsaWRhdGUuVmFsaWRhdGlvbkluZm8pCi0gICAqLwotICBwdWJsaWMgdm9pZCB2YWxpZGF0ZShEb2N1bWVudCBkb21Nb2RlbCwgSVZhbGlkYXRpb25JbmZvIHZhbEluZm8pIHRocm93cyBWYWxpZGF0ZVdTRExFeGNlcHRpb24KLSAgewotICAgIC8vIHJlc2V0IHRoZSB2YXJpYWJsZXMKLS8vICAgIHJlc2V0KCk7Ci0vLyAgICBmaWxlVVJJID0gdmFsSW5mby5nZXRGaWxlVVJJKCk7Ci0gICAgLy90aGlzLnZhbGlkYXRpb25Db250cm9sbGVyID0gdmFsaWRhdGlvbmNvbnRyb2xsZXI7Ci0KLSAgICBJV1NETDExVmFsaWRhdGlvbkluZm8gd3NkbHZhbGluZm8gPSBuZXcgV1NETDExVmFsaWRhdGlvbkluZm9JbXBsKHZhbEluZm8pOwotICAgIFdTRExEb2N1bWVudFtdIHdzZGxEb2NzID0gcmVhZFdTRExEb2N1bWVudChkb21Nb2RlbCwgdmFsSW5mby5nZXRGaWxlVVJJKCksIGdldE1lc3NhZ2VHZW5lcmF0b3IoKSwgd3NkbHZhbGluZm8pOwotICAgIC8vIERvbid0IHZhbGlkYXRlIGFuIG51bGwgZGVmaW5pdGlvbnMgZWxlbWVudC4gRWl0aGVyIHRoZSBmaWxlIGlzIGVtdHB5IGFuZCB2YWxpZCBvcgotICAgIC8vIGhhZCBhbiBlcnJvciB3aGVuIHJlYWRpbmcuCi0gICAgaWYod3NkbERvY3MgIT0gbnVsbCkKLSAgICB7ICAKLSAgICAgIGludCBudW1XU0RMRG9jcyA9IHdzZGxEb2NzLmxlbmd0aDsKLSAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1XU0RMRG9jczsgaSsrKQotICAgICAgewotICAgICAgICBXU0RMRG9jdW1lbnQgdGVtcERvYyA9IHdzZGxEb2NzW2ldOwotICAgICAgICBEZWZpbml0aW9uIHdzZGxEZWZpbml0aW9uID0gdGVtcERvYy5nZXREZWZpbml0aW9uKCk7Ci0gICAgICAgIC8vIFJlZ2lzdGVyIHRoZSBzY2hlbWFzLgotICAgICAgICBMaXN0IHhzZExpc3QgPSB0ZW1wRG9jLmdldFNjaGVtYXMoKTsKLSAgICAgICAgSXRlcmF0b3IgeHNkSXRlciA9IHhzZExpc3QuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKHhzZEl0ZXIuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgd3NkbHZhbGluZm8uYWRkU2NoZW1hKChYU01vZGVsKXhzZEl0ZXIubmV4dCgpKTsKLSAgICAgICAgfQotICAgICAgICAvLyBTZXQgdGhlIGVsZW1lbnQgbG9jYXRpb25zIHRhYmxlLgotICAgICAgICB3c2RsdmFsaW5mby5zZXRFbGVtZW50TG9jYXRpb25zKHRlbXBEb2MuZ2V0RWxlbWVudExvY2F0aW9ucygpKTsKLSAgICAgICAgLy8gU2V0IGFueSByZWFkZXIgZXJyb3JzLiBUaGlzIG5lZWRzIHRvIGJlIGRvbmUgYWZ0ZXIgdGhlIGVsZW1lbnQgbG9jYXRpb25zIHRhYmxlIGlzIHNldC4KLSAgICAgICAgTGlzdCByZWFkZXJFcnJvcnMgPSB0ZW1wRG9jLmdldFJlYWRlckVycm9ycygpOwotICAgICAgICBpZiAocmVhZGVyRXJyb3JzICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBJdGVyYXRvciByZWFkZXJFcnJvcnNJID0gcmVhZGVyRXJyb3JzLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgd2hpbGUgKHJlYWRlckVycm9yc0kuaGFzTmV4dCgpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFJlYWRlckVycm9yIHJlID0gKFJlYWRlckVycm9yKXJlYWRlckVycm9yc0kubmV4dCgpOwotICAgICAgICAgICAgd3NkbHZhbGluZm8uYWRkRXJyb3IocmUuZ2V0RXJyb3IoKSwgcmUuZ2V0T2JqZWN0KCkpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBMaXN0IHJlYWRlcldhcm5pbmdzID0gdGVtcERvYy5nZXRSZWFkZXJXYXJuaW5ncygpOwotICAgICAgICBpZiAocmVhZGVyV2FybmluZ3MgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIEl0ZXJhdG9yIHJlYWRlcldhcm5pbmdzSSA9IHJlYWRlcldhcm5pbmdzLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgd2hpbGUgKHJlYWRlcldhcm5pbmdzSS5oYXNOZXh0KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgUmVhZGVyRXJyb3IgcmUgPSAoUmVhZGVyRXJyb3IpcmVhZGVyV2FybmluZ3NJLm5leHQoKTsKLSAgICAgICAgICAgIHdzZGx2YWxpbmZvLmFkZFdhcm5pbmcocmUuZ2V0RXJyb3IoKSwgcmUuZ2V0T2JqZWN0KCkpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICB2YWxpZGF0ZVdTRExFbGVtZW50KENvbnN0YW50cy5OU19VUklfV1NETCwgd3NkbERlZmluaXRpb24sIG5ldyBWZWN0b3IoKSwgd3NkbHZhbGluZm8pOwotICAgICAgICB3c2RsdmFsaW5mby5jbGVhclNjaGVtYXMoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gIH0KLSAgCi0gIC8qKgotICAgKiBSZWFkIGluIHRoZSBXU0RMIGRvY3VtZW50IGFuZCBzZXQgdGhlIG1vZGVsIGFuZCBpbXBvcnRlZCBzY2hlbWFzLgotICAgKiAKLSAgICogQHBhcmFtIGRvbU1vZGVsIEEgRE9NIG1vZGVsIG9mIHRoZSBkb2N1bWVudCB0byBiZSByZWFkLgotICAgKiBAcGFyYW0gZmlsZSBUaGUgZmlsZSB0byByZWFkLgotICAgKiBAcGFyYW0gbWVzc2FnZWdlbmVyYXRvciBUaGUgbWVzc2FnZWdlbmVyYXRvciB0aGUgcmVhZGVyIHNob3VsZCB1c2UgZm9yIGFueSBtZXNzYWdlcyBwcm9kdWNlZC4KLSAgICogQHBhcmFtIHdzZGx2YWxpbmZvIFRoZSB2YWxpZGF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgY3VycmVudCB2YWxpZGF0aW9uLgotICAgKiBAcmV0dXJuIFRoZSBkZWZpbml0aW9ucyBlbGVtZW50IGZvciB0aGUgV1NETCBkb2N1bWVudC4KLSAgICogQHRocm93cyBWYWxpZGF0ZVdTRExFeGNlcHRpb24KLSAgICovCi0gIHByb3RlY3RlZCBXU0RMRG9jdW1lbnRbXSByZWFkV1NETERvY3VtZW50KERvY3VtZW50IGRvbU1vZGVsLCBTdHJpbmcgZmlsZSwgTWVzc2FnZUdlbmVyYXRvciBtZXNzYWdlZ2VuZXJhdG9yLCBJV1NETDExVmFsaWRhdGlvbkluZm8gd3NkbHZhbGluZm8pIHRocm93cyBWYWxpZGF0ZVdTRExFeGNlcHRpb24KLSAgewotICAgIFdTRExEb2N1bWVudFtdIHdzZGxEb2NzID0gbnVsbDsKLSAgICB0cnkKLSAgICB7Ci0KLSAgICAgIFdTRExSZWFkZXJJbXBsIHdzZGxSZWFkZXIgPSBuZXcgV1NETFJlYWRlckltcGwod3NkbHZhbGluZm8pOwotICAgICAgd3NkbFJlYWRlci5zZXRNZXNzYWdlR2VuZXJhdG9yKG1lc3NhZ2VnZW5lcmF0b3IpOwotICAgICAgaWYoZG9tTW9kZWwgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgd3NkbERvY3MgPSB3c2RsUmVhZGVyLnJlYWRXU0RMKGZpbGUsIGRvbU1vZGVsKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsgIAotICAgICAgICB3c2RsRG9jcyA9IHdzZGxSZWFkZXIucmVhZFdTREwoZmlsZSk7Ci0gICAgICB9Ci0gICAgICAvL3dzZGx2YWxpbmZvLnNldEVsZW1lbnRMb2NhdGlvbnMod3NkbFJlYWRlci5nZXRFbGVtZW50TG9jYXRpb25zSGFzaHRhYmxlKCkpOwotLy8gICAgICBMaXN0IHJlYWRlckVycm9ycyA9IHdzZGxSZWFkZXIuZ2V0UmVhZGVyRXJyb3JzKCk7Ci0vLyAgICAgIGlmIChyZWFkZXJFcnJvcnMgIT0gbnVsbCkKLS8vICAgICAgIHsKLS8vICAgICAgICBJdGVyYXRvciByZWFkZXJFcnJvcnNJID0gcmVhZGVyRXJyb3JzLml0ZXJhdG9yKCk7Ci0vLyAgICAgICAgd2hpbGUgKHJlYWRlckVycm9yc0kuaGFzTmV4dCgpKQotLy8gICAgICAgICB7Ci0vLyAgICAgICAgICBSZWFkZXJFcnJvciByZSA9IChSZWFkZXJFcnJvcilyZWFkZXJFcnJvcnNJLm5leHQoKTsKLS8vICAgICAgICAgIHdzZGx2YWxpbmZvLmFkZEVycm9yKHJlLmdldEVycm9yKCksIHJlLmdldE9iamVjdCgpKTsKLS8vICAgICAgICB9Ci0vLyAgICAgIH0KLS8vICAgICAgaWYgKHdzZGxSZWFkZXIuaGFzSW1wb3J0U2NoZW1hcygpKQotLy8gICAgICB7Ci0vLyAgICAgICAgTGlzdCB4c2RMaXN0ID0gd3NkbFJlYWRlci5nZXRJbXBvcnRTY2hlbWFzKCk7Ci0vLyAgICAgICAgSXRlcmF0b3IgeHNkSXRlciA9IHhzZExpc3QuaXRlcmF0b3IoKTsKLS8vICAgICAgICB3aGlsZSAoeHNkSXRlci5oYXNOZXh0KCkpCi0vLyAgICAgICAgewotLy8gICAgICAgICAgd3NkbHZhbGluZm8uYWRkU2NoZW1hKChYU01vZGVsKXhzZEl0ZXIubmV4dCgpKTsKLS8vICAgICAgICB9Ci0vLwotLy8gICAgICB9Ci0KLSAgICB9Ci0gICAgY2F0Y2ggKFdTRExFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgVmFsaWRhdGVXU0RMRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpICsgIiAiICsgZS5nZXRGYXVsdENvZGUoKSk7Ci0gICAgfQotCi0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBWYWxpZGF0ZVdTRExFeGNlcHRpb24oInVuYWJsZSB0byByZWFkIGZpbGUiICsgZS5nZXRNZXNzYWdlKCkgKyAiICIgKyBlLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgICByZXR1cm4gd3NkbERvY3M7Ci0gIH0KLQotICAvKioKLSAgICogR2l2ZW4gYSBXU0RMIGVsZW1lbnQsIGNhbGwgVmFsaWRhdGVFbGVtZW50IGZvciBpdC4KLSAgICogCi0gICAqIEBwYXJhbSBuYW1lc3BhY2UgVGhlIG5hbWVzcGFjZSBvZiB0aGUgZWxlbWVudCB0byB2YWxpZGF0ZS4KLSAgICogQHBhcmFtIGVsZW1lbnQgVGhlIGVsZW1lbnQgdG8gdmFsaWRhdGUuCi0gICAqIEBwYXJhbSBwYXJlbnRzIFRoZSBsaXN0IG9mIHBhcmVudHMgZm9yIHRoaXMgZWxlbWVudC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHZhbGlkYXRlV1NETEVsZW1lbnQoU3RyaW5nIG5hbWVzcGFjZSwgT2JqZWN0IGVsZW1lbnQsIExpc3QgcGFyZW50cywgSVdTREwxMVZhbGlkYXRpb25JbmZvIHdzZGx2YWxpbmZvKQotICB7Ci0gICAgSVdTREwxMVZhbGlkYXRvciB2YWwgPSB2ZXIucXVlcnlWYWxpZGF0b3JSZWdpc3RyeShuYW1lc3BhY2UpOwotICAgIGlmICh2YWwgIT0gbnVsbCkKLSAgICB7Ci0gICAgICB2YWwudmFsaWRhdGUoZWxlbWVudCwgcGFyZW50cywgd3NkbHZhbGluZm8pOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotCSAgLy9UT0RPOiBBZGQgdGhpcyBhcyBhIHByZWZlcmVuY2UuCi0gICAgICAvL3dzZGx2YWxpbmZvLmFkZFdhcm5pbmcobWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX1dBUk5fTk9fVkFMRElBVE9SLCBuYW1lc3BhY2UpLCBlbGVtZW50KTsKLSAgICB9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBTZXQgdGhlIG1lc3NhZ2UgZ2VuZXJhdG9yIGZvciB0aGlzIGNvbnRyb2xsZXIuCi0gICAqIAotICAgKiBAcGFyYW0gbWVzZ2VuIFRoZSBtZXNzYWdlIGdlbmVyYXRvciB0byBzZXQgZm9yIHRoaXMgY29udHJvbGxlci4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE1lc3NhZ2VHZW5lcmF0b3IoTWVzc2FnZUdlbmVyYXRvciBtZXNnZW4pCi0gIHsKLSAgICBtZXNzYWdlZ2VuZXJhdG9yID0gbWVzZ2VuOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgbWVzc2FnZSBnZW5lcmF0b3IgcmVnaXN0ZXJlZCBmb3IgdGhpcyBjb250cm9sbGVyLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgbWVzc2FnZSBnZW5lcmF0b3IgcmVnaXN0ZXJlZCBmb3IgdGhpcyBjb250cm9sbGVyLgotICAgKi8KLSAgcHVibGljIE1lc3NhZ2VHZW5lcmF0b3IgZ2V0TWVzc2FnZUdlbmVyYXRvcigpCi0gIHsKLSAgICByZXR1cm4gbWVzc2FnZWdlbmVyYXRvcjsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm4gdGhlIGZpbGVuYW1lIGZvciB0aGUgZmlsZSBjdXJyZW50bHkgYmVpbmcgdmFsaWRhdGVkLiBTb21lIHZhbGlkYXRvcnMgcmVxdWlyZSB0aGlzLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgZmlsZW5hbWUgZm9yIHRoZSBmaWxlIGJlaW5nIHZhbGlkYXRlZC4KLSAgICovCi0vLyAgcHVibGljIFN0cmluZyBnZXRGaWxlbmFtZSgpCi0vLyAgewotLy8gICAgcmV0dXJuIGZpbGVVUkk7Ci0vLyAgfQotCi0gIC8qKgotICAgKiBDb252ZW5pZW5jZSBtZXRob2QgZm9yIGV4dGVuc2libHkgdmFsaWRhdG9ycyB0byBhZGQgZXJyb3IgbWVzc2FnZXMuCi0gICAqIAotICAgKiBAcGFyYW0gb2JqZWN0IFRoZSBvYmplY3QgdG8gYWRkIHRoZSBlcnJvciBmb3IuCi0gICAqIEBwYXJhbSBlcnJvciBUaGUgZXJyb3IgdG8gYWRkLgotICAgKi8KLS8vICBwdWJsaWMgdm9pZCBhZGRFcnJvck1lc3NhZ2UoT2JqZWN0IG9iamVjdCwgU3RyaW5nIGVycm9yKQotLy8gIHsKLS8vICAgIGFkZFZhbGlkYXRpb25NZXNzYWdlKEVSUk9SX01FU1NBR0UsIG9iamVjdCwgZXJyb3IpOwotLy8gICAgZXJyb3JzID0gdHJ1ZTsKLS8vICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBmb3IgZXh0ZW5zaWJseSB2YWxpZGF0b3JzIHRvIGFkZCBlcnJvciBtZXNzYWdlcyB3aGVuIHRoZXkga25vdwotICAgKiBsaW5lIGFuZCBjb2x1bW4gbnVtYmVycy4KLSAgICogCi0gICAqIEBwYXJhbSBsaW5lIFRoZSBsaW5lIHdoZXJlIHRoZSBlcnJvciBtZXNzYWdlIGlzIGxvY2F0ZWQuCi0gICAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbHVtbiB3aGVyZSB0aGUgZXJyb3IgbWVzc2FnZSBpcyBsb2NhdGVkLgotICAgKiBAcGFyYW0gZXJyb3IgVGhlIGVycm9yIG1lc3NhZ2UuCi0gICAqLwotLy8gIHB1YmxpYyB2b2lkIGFkZEVycm9yTWVzc2FnZShpbnQgbGluZSwgaW50IGNvbHVtbiwgU3RyaW5nIGVycm9yKQotLy8gIHsKLS8vICAgIGFkZFZhbGlkYXRpb25NZXNzYWdlKEVSUk9SX01FU1NBR0UsIGxpbmUsIGNvbHVtbiwgZXJyb3IpOwotLy8gICAgZXJyb3JzID0gdHJ1ZTsKLS8vICB9Ci0KLSAgLyoqCi0gICAqIENvbnZlbmllbmNlIG1ldGhvZCBmb3IgZXh0ZW5zaWJseSB2YWxpZGF0b3JzIHRvIGFkZCB3YXJuaW5nIG1lc3NhZ2VzLgotICAgKiAKLSAgICogQHBhcmFtIG9iamVjdCBUaGUgb2JqZWN0IHRvIGFkZCB0aGUgd2FybmluZyBtZXNzYWdlLgotICAgKiBAcGFyYW0gd2FybmluZyBUaGUgd2FybmluZyBtZXNzYWdlLgotICAgKi8KLS8vICBwdWJsaWMgdm9pZCBhZGRXYXJuaW5nTWVzc2FnZShPYmplY3Qgb2JqZWN0LCBTdHJpbmcgd2FybmluZykKLS8vICB7Ci0vLyAgICBhZGRWYWxpZGF0aW9uTWVzc2FnZShXQVJOSU5HX01FU1NBR0UsIG9iamVjdCwgd2FybmluZyk7Ci0vLyAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgZm9yIGV4dGVuc2libHkgdmFsaWRhdG9ycyB0byBhZGQgd2FybmluZyBtZXNzYWdlcyB3aGVuIHRoZXkga25vdwotICAgKiBsaW5lIGFuZCBjb2x1bW4gbnVtYmVycy4KLSAgICogCi0gICAqIEBwYXJhbSBsaW5lIFRoZSBsaW5lIHdoZXJlIHRoZSBlcnJvciBtZXNzYWdlIGlzIGxvY2F0ZWQuCi0gICAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbHVtbiB3aGVyZSB0aGUgZXJyb3IgbWVzc2FnZSBpcyBsb2NhdGVkLgotICAgKiBAcGFyYW0gd2FybmluZyBUaGUgd2FybmluZyBtZXNzYWdlLgotICAgKi8KLS8vICBwdWJsaWMgdm9pZCBhZGRXYXJuaW5nTWVzc2FnZShpbnQgbGluZSwgaW50IGNvbHVtbiwgU3RyaW5nIHdhcm5pbmcpCi0vLyAgewotLy8gICAgYWRkVmFsaWRhdGlvbk1lc3NhZ2UoV0FSTklOR19NRVNTQUdFLCBsaW5lLCBjb2x1bW4sIHdhcm5pbmcpOwotLy8gIH0KLQotICAvKioKLSAgICogSWYgeW91IGhhdmUgYW4gb2JqZWN0IHJlYWQgaW4gYnkgdGhlIHJlYWRlciBmb3IgdGhpcwotICAgKiB2YWxpZGF0b3Jjb250cm9sbGVyIHRoZSBvYmplY3QgY2FuIGJlIHBhc3NlZCBpbiBoZXJlIGFuZCB0aGUgbGluZSBhbmQgY29sdW1uCi0gICAqIGluZm9ybWF0aW9uIHdpbGwgYmUgYWJzdHJhY3RlZCBmcm9tIGl0LgotICAgKiAKLSAgICogQHBhcmFtIHR5cGUgVGhlIHR5cGUgb2YgbWVzc2FnZSB0byBhZGQuCi0gICAqIEBwYXJhbSBvIFRoZSBvYmplY3QgdGhhdCBoYXMgdGhlIGVycm9yICh1c2VkIHRvIGdldCB0aGUgbG9jYXRpb24pLgotICAgKiBAcGFyYW0gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBhZGQuCi0gICAqLwotLy8gIHByb3RlY3RlZCB2b2lkIGFkZFZhbGlkYXRpb25NZXNzYWdlKGludCB0eXBlLCBPYmplY3QgbywgU3RyaW5nIG1lc3NhZ2UpCi0vLyAgewotLy8gICAgaW50W10gbG9jYXRpb247Ci0vLyAgICBpZiAoZWxlbWVudExvY2F0aW9ucy5jb250YWluc0tleShvKSkKLS8vICAgIHsKLS8vICAgICAgbG9jYXRpb24gPSAoaW50W10pZWxlbWVudExvY2F0aW9ucy5nZXQobyk7Ci0vLyAgICB9Ci0vLyAgICAvLyBpZiB3ZSBnaXZlIGl0IGFuIGVsZW1lbnQgdGhhdCBoYXNuJ3QgYmVlbiBkZWZpbmVkIHdlJ2xsIHNldCB0aGUgbG9jYXRpb24KLS8vICAgIC8vIGF0ICgwLDApIHNvIHRoZSBlcnJvciBzaG93cyB1cCBidXQgbm8gbGluZSBtYXJrZXIgaW4gdGhlIGVkaXRvcgotLy8gICAgZWxzZQotLy8gICAgewotLy8gICAgICBsb2NhdGlvbiA9IG5ldyBpbnRbXSB7IDAsIDAgfTsKLS8vICAgIH0KLS8vICAgIGFkZFZhbGlkYXRpb25NZXNzYWdlKHR5cGUsIGxvY2F0aW9uWzBdLCBsb2NhdGlvblsxXSwgbWVzc2FnZSk7Ci0vLyAgfQotCi0gIC8qKgotICAgICogQ3JlYXRlcyBhIHZhbGlkYXRpb24gbWVzc2FnZSBvZiB0aGUgc3BlY2lmaWVkIHR5cGUuCi0gICAgKiAKLSAgCSogQHBhcmFtIHR5cGUgVGhlIHR5cGUgb2YgdmFsaWRhdGlvbiBtZXNzYWdlIHRvIGFkZC4KLSAgCSogQHBhcmFtIGxpbmUgVGhlIGxpbmUgd2hlcmUgdGhlIGVycm9yIG1lc3NhZ2UgaXMgbG9jYXRlZC4KLSAgCSogQHBhcmFtIGNvbHVtbiBUaGUgbGluZSB3aGVyZSB0aGUgY29sdW1uIG1lc3NhZ2UgaXMgbG9jYXRlZC4KLSAgCSogQHBhcmFtIG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gYWRkLgotICAJKi8KLS8vICBwcm90ZWN0ZWQgdm9pZCBhZGRWYWxpZGF0aW9uTWVzc2FnZShpbnQgdHlwZSwgaW50IGxpbmUsIGludCBjb2x1bW4sIFN0cmluZyBtZXNzYWdlKQotLy8gIHsKLS8vICAgIGlmIChtZXNzYWdlICE9IG51bGwpCi0vLyAgICB7Ci0vLyAgICAgIGlmICh0eXBlID09IEVSUk9SX01FU1NBR0UpCi0vLyAgICAgIHsKLS8vICAgICAgICB2YWxpZGF0aW9uQ29udHJvbGxlci5hZGRFcnJvck1lc3NhZ2UobGluZSwgY29sdW1uLCBtZXNzYWdlKTsKLS8vICAgICAgfQotLy8gICAgICBlbHNlIGlmICh0eXBlID09IFdBUk5JTkdfTUVTU0FHRSkKLS8vICAgICAgewotLy8gICAgICAgIHZhbGlkYXRpb25Db250cm9sbGVyLmFkZFdhcm5pbmdNZXNzYWdlKGxpbmUsIGNvbHVtbiwgbWVzc2FnZSk7Ci0vLyAgICAgIH0KLS8vICAgIH0KLS8vICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3NkbC52YWxpZGF0ZS5jb250cm9sbGVyLklXU0RMVmFsaWRhdG9yI2lzVmFsaWQoKQotICAgKi8KLS8vICBwdWJsaWMgYm9vbGVhbiBpc1ZhbGlkKCkKLS8vICB7Ci0vLyAgICByZXR1cm4gIWVycm9yczsKLS8vICB9Ci0KLSAgLyoqCi0gICAqIFJlc2V0IHRoZSB2YWxpZGF0b3IgY29udHJvbGxlci4KLSAgICovCi0vLyAgcHJvdGVjdGVkIHZvaWQgcmVzZXQoKQotLy8gIHsKLS8vICAgIHNjaGVtYXMgPSBuZXcgVmVjdG9yKCk7Ci0vLyAgICBmaWxlVVJJID0gIiI7Ci0vLyAgICB3c2RsRGVmaW5pdGlvbiA9IG51bGw7Ci0vLyAgICBlbGVtZW50TG9jYXRpb25zID0gbnVsbDsKLS8vICAgIHJlc291cmNlYnVuZGxlID0gbnVsbDsKLS8vICAgIC8vdmFsaWRhdGlvbkNvbnRyb2xsZXIgPSBudWxsOwotLy8gICAgZXJyb3JzID0gZmFsc2U7Ci0vLyAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9XU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9XU0RMMTFWYWxpZGF0b3JEZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjEzNWU0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvV1NETDExVmFsaWRhdG9yRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMTsKLQotLyoqCi0gKiBUaGUgV1NETCAxLjEgdmFsaWRhdG9yIGRlbGVnYXRlIGhvbGRzIGEgcmVmZXJlbmNlIHRvIGEgdmFsaWRhdG9yIHRvIGJlIGluc3RhbnRpYXRlZCBhdAotICogYSBsYXRlciBwb2ludC4KLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIFdTREwxMVZhbGlkYXRvckRlbGVnYXRlCi17Ci0gIHByaXZhdGUgSVdTREwxMVZhbGlkYXRvciB2YWxpZGF0b3IgPSBudWxsOwotCi0KLSAgLyoqCi0gICAqIEdldCB0aGUgdmFsaWRhdG9yIHNwZWNpZmllZCBpbiB0aGlzIGRlbGVnYXRlLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgV1NETCAxLjEgdmFsaWRhdG9yIHNwZWNpZmllZCBieSB0aGlzIGRlbGVnYXRlLgotICAgKi8KLSAgcHVibGljIElXU0RMMTFWYWxpZGF0b3IgZ2V0VmFsaWRhdG9yKCkKLSAgewotICAgIGlmICh2YWxpZGF0b3IgPT0gbnVsbCkKLSAgICB7Ci0gICAgICB2YWxpZGF0b3IgPSBsb2FkVmFsaWRhdG9yKCk7Ci0gICAgfQotICAgIHJldHVybiB2YWxpZGF0b3I7Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBhYnN0cmFjdCBJV1NETDExVmFsaWRhdG9yIGxvYWRWYWxpZGF0b3IoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvV1NETERvY3VtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL1dTRExEb2N1bWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxN2E4MTA1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvV1NETERvY3VtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDA5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMTsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci1pbXBvcnQgamF2YS51dGlsLlRyZWVTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uVHlwZTsKLWltcG9ydCBqYXZheC53c2RsLk91dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgamF2YXgud3NkbC5TZXJ2aWNlOwotaW1wb3J0IGphdmF4LndzZGwuVHlwZXM7Ci1pbXBvcnQgamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaW9uRGVzZXJpYWxpemVyOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpb25SZWdpc3RyeTsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZmFjdG9yeS5XU0RMRmFjdG9yeTsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMuZG9tLkVsZW1lbnRJbXBsOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLmRvbS5FbGVtZW50TlNJbXBsOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51dGlsLk1lc3NhZ2VHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEueHNkLklubGluZVNjaGVtYVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbC5FbGVtZW50TG9jYXRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi1pbXBvcnQgY29tLmlibS53c2RsLkNvbnN0YW50czsKLWltcG9ydCBjb20uaWJtLndzZGwudXRpbC5TdHJpbmdVdGlsczsKLWltcG9ydCBjb20uaWJtLndzZGwudXRpbC54bWwuRE9NVXRpbHM7Ci1pbXBvcnQgY29tLmlibS53c2RsLnV0aWwueG1sLlFOYW1lVXRpbHM7Ci1pbXBvcnQgY29tLmlibS53c2RsLnV0aWwueG1sLlhQYXRoVXRpbHM7Ci0KLS8qKgotICogQSBXU0RMIGRvY3VtZW50IHRoYXQga25vd3MgaG93IHRvIHBhcnNlIGl0c2VsZi4KLSAqLwotcHVibGljIGNsYXNzIFdTRExEb2N1bWVudAotewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMaXN0IFNUWUxFX09ORV9XQVkgPSBBcnJheXMuYXNMaXN0KG5ldyBTdHJpbmdbXSB7IENvbnN0YW50cy5FTEVNX0lOUFVUIH0pOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMaXN0IFNUWUxFX1JFUVVFU1RfUkVTUE9OU0UgPQotICAgIEFycmF5cy5hc0xpc3QobmV3IFN0cmluZ1tdIHsgQ29uc3RhbnRzLkVMRU1fSU5QVVQsIENvbnN0YW50cy5FTEVNX09VVFBVVCB9KTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTGlzdCBTVFlMRV9TT0xJQ0lUX1JFU1BPTlNFID0KLSAgICBBcnJheXMuYXNMaXN0KG5ldyBTdHJpbmdbXSB7IENvbnN0YW50cy5FTEVNX09VVFBVVCwgQ29uc3RhbnRzLkVMRU1fSU5QVVQgfSk7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIExpc3QgU1RZTEVfTk9USUZJQ0FUSU9OID0gQXJyYXlzLmFzTGlzdChuZXcgU3RyaW5nW10geyBDb25zdGFudHMuRUxFTV9PVVRQVVQgfSk7Ci0gIAotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgX0VSUk9SX01VTFRJUExFX1RZUEVTX0RFRklORUQgPSAiX0VSUk9SX01VTFRJUExFX1RZUEVTX0RFRklORUQiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgX1VOQUJMRV9UT19JTVBPUlRfTk9fTE9DQVRJT04gPSAiX1VOQUJMRV9UT19JTVBPUlRfTk9fTE9DQVRJT04iOwotCi0gIHByb3RlY3RlZCBFeHRlbnNpb25SZWdpc3RyeSBleHRSZWcgPSBudWxsOwotICBwcm90ZWN0ZWQgU3RyaW5nIGZhY3RvcnlJbXBsTmFtZSA9IG51bGw7Ci0KLSAgLy8gc3RvcmUgdGhlIGVsZW1lbnQgbG9jYXRpb25zIHdpdGhpbiB0aGUgZmlsZSAtIGxpbmUgYW5kIGNvbHVtbiBudW1iZXJzCi0gIC8vIHRoZSBsb2NhdGlvbiBpbmZvIGlzIHN0b3JlZCBhcyBhbiBpbnQgYXJyYXkgb2YgbGVuZ3RoIDIge2xpbmVudW1iZXIsIGNvbG51bWJlcn0KLSAgcHJvdGVjdGVkIEhhc2h0YWJsZSBlbGVtZW50TG9jYXRpb25zID0gbmV3IEhhc2h0YWJsZSgpOwotICAKLSAgLy8gaG9sZCB0aGUgcmVhZGVyIGVycm9ycwotICBwcm90ZWN0ZWQgTGlzdCByZWFkZXJFcnJvcnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIHByb3RlY3RlZCBMaXN0IHJlYWRlcldhcm5pbmdzID0gbmV3IEFycmF5TGlzdCgpOwotICBwcm90ZWN0ZWQgTWVzc2FnZUdlbmVyYXRvciBtZXNzYWdlZ2VuZXJhdG9yOwotICAKLSAgcHJpdmF0ZSBEZWZpbml0aW9uIGRlZiA9IG51bGw7Ci0gIHByaXZhdGUgU2V0IGltcG9ydGVkRGVmcyA9IG5ldyBUcmVlU2V0KCk7Ci0gIHByaXZhdGUgRWxlbWVudCB0eXBlc0VsID0gbnVsbDsKLSAgcHJpdmF0ZSBMaXN0IG1lc3NhZ2VzID0gbmV3IEFycmF5TGlzdCgpOwotICBwcml2YXRlIExpc3QgcG9ydHR5cGVzID0gbmV3IEFycmF5TGlzdCgpOwotICBwcml2YXRlIExpc3QgYmluZGluZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIHByaXZhdGUgTGlzdCBzZXJ2aWNlcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgcHJpdmF0ZSBMaXN0IGV4dGVsZW1lbnRzID0gbmV3IEFycmF5TGlzdCgpOwotICBwcml2YXRlIGludCBkZXB0aDsKLSAgLy8gSG9sZCB0aGUgc2NoZW1hcyB0aGF0IGFyZSBpbXBvcnRlZCBvciBkZWNsYXJlZCBpbmxpbmUgaW4gdGhpcyB3c2RsIGRvY3VtZW50LgotICBwcml2YXRlIExpc3Qgc2NoZW1hcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgcHJpdmF0ZSBJV1NETDExVmFsaWRhdGlvbkluZm8gdmFsaW5mbzsKLSAgCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4gUGVyZm9ybXMgYSBwcmVwYXJzZSBvZiB0aGUgZG9jdW1lbnQgYW5kIGhhbmRsZXMgaW1wb3J0cyBhbmQgdHlwZXMuCi0gICAqIAotICAgKiBAcGFyYW0gZG9jdW1lbnRCYXNlVVJJIFRoZSBVUkkgb2YgdGhpcyBXU0RMIGRvY3VtZW50LgotICAgKiBAcGFyYW0gZGVmRWwgVGhlIGRlZmluaXRpb25zIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBkZXB0aCBUaGUgZGVwdGggb2YgdGhpcyBkb2N1bWVudCBpbiBhIGRvY3VtZW50IHRyZWUuCi0gICAqIEBwYXJhbSBtZXNzYWdlZ2VuZXJhdG9yIEEgbWVzc2FnZWdlbmVyYXRvciB1c2VkIGZvciByZXRyaWV2aW5nIHN0cmluZ3MuCi0gICAqIEBwYXJhbSB2YWxpbmZvIEEgV1NETDExVmFsaWRhdGlvbkluZm8gb2JqZWN0IGZvciByZXBvcnRpbmcgbWVzc2FnZXMuCi0gICAqIEB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICAgKi8KLSAgcHVibGljIFdTRExEb2N1bWVudChTdHJpbmcgZG9jdW1lbnRCYXNlVVJJLCBFbGVtZW50IGRlZkVsLCBpbnQgZGVwdGgsIE1lc3NhZ2VHZW5lcmF0b3IgbWVzc2FnZWdlbmVyYXRvciwgSVdTREwxMVZhbGlkYXRpb25JbmZvIHZhbGluZm8pIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICB0aGlzLm1lc3NhZ2VnZW5lcmF0b3IgPSBtZXNzYWdlZ2VuZXJhdG9yOwotICAgIHRoaXMudmFsaW5mbyA9IHZhbGluZm87Ci0gICAgdGhpcy5kZXB0aCA9IGRlcHRoOwotICAgIAotICAgIGNoZWNrRWxlbWVudE5hbWUoZGVmRWwsIENvbnN0YW50cy5RX0VMRU1fREVGSU5JVElPTlMpOwotICAgIAotICAgIFdTRExGYWN0b3J5IGZhY3RvcnkgPQotICAgICAgKGZhY3RvcnlJbXBsTmFtZSAhPSBudWxsKSA/IFdTRExGYWN0b3J5Lm5ld0luc3RhbmNlKGZhY3RvcnlJbXBsTmFtZSkgOiBXU0RMRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotICAgIGRlZiA9IGZhY3RvcnkubmV3RGVmaW5pdGlvbigpOwotICAgIC8vIEZpeCBmb3IgV1NETDRKIGFkZGluZyBkZWZhdWx0IFdTREwgbmFtZXNwYWNlIHdoZW4gbm8gZGVmYXVsdAotICAgIC8vIG5hbWVzcGFjZSBoYXMgYmVlbiBkZWNsYXJlZC4KLSAgICAvLyBUT0RPOiBSZW1vdmUgdGhpcyBmaXggb25jZSBmaXhlZCBpbiBXU0RMNEouCi0gICAgaWYoZGVmLmdldE5hbWVzcGFjZSgiIikgIT0gbnVsbCkKLSAgICAJZGVmLmdldE5hbWVzcGFjZXMoKS5yZW1vdmUoIiIpOwotCi0gICAgaWYgKGV4dFJlZyAhPSBudWxsKQotICAgIHsKLSAgICAgIGRlZi5zZXRFeHRlbnNpb25SZWdpc3RyeShleHRSZWcpOwotICAgIH0KLQotICAgIFN0cmluZyBuYW1lID0gRE9NVXRpbHMuZ2V0QXR0cmlidXRlKGRlZkVsLCBDb25zdGFudHMuQVRUUl9OQU1FKTsKLSAgICBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlID0gRE9NVXRpbHMuZ2V0QXR0cmlidXRlKGRlZkVsLCBDb25zdGFudHMuQVRUUl9UQVJHRVRfTkFNRVNQQUNFKTsKLSAgICBOYW1lZE5vZGVNYXAgYXR0cnMgPSBkZWZFbC5nZXRBdHRyaWJ1dGVzKCk7Ci0KLSAgICBpZiAoZG9jdW1lbnRCYXNlVVJJICE9IG51bGwpCi0gICAgewotICAgICAgZGVmLnNldERvY3VtZW50QmFzZVVSSShkb2N1bWVudEJhc2VVUkkpOwotICAgIH0KLQotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgewotICAgICAgZGVmLnNldFFOYW1lKG5ldyBRTmFtZSh0YXJnZXROYW1lc3BhY2UsIG5hbWUpKTsKLSAgICB9Ci0KLSAgICBpZiAodGFyZ2V0TmFtZXNwYWNlICE9IG51bGwpCi0gICAgewotICAgICAgZGVmLnNldFRhcmdldE5hbWVzcGFjZSh0YXJnZXROYW1lc3BhY2UpOwotICAgIH0KLQotICAgIGludCBzaXplID0gYXR0cnMuZ2V0TGVuZ3RoKCk7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKLSAgICB7Ci0gICAgICBBdHRyIGF0dHIgPSAoQXR0cilhdHRycy5pdGVtKGkpOwotICAgICAgU3RyaW5nIG5hbWVzcGFjZVVSSSA9IGF0dHIuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICBTdHJpbmcgbG9jYWxQYXJ0ID0gYXR0ci5nZXRMb2NhbE5hbWUoKTsKLSAgICAgIFN0cmluZyB2YWx1ZSA9IGF0dHIuZ2V0VmFsdWUoKTsKLQotICAgICAgaWYgKG5hbWVzcGFjZVVSSSAhPSBudWxsICYmIG5hbWVzcGFjZVVSSS5lcXVhbHMoQ29uc3RhbnRzLk5TX1VSSV9YTUxOUykpCi0gICAgICB7Ci0gICAgICAgIGlmIChsb2NhbFBhcnQgIT0gbnVsbCAmJiAhbG9jYWxQYXJ0LmVxdWFscyhDb25zdGFudHMuQVRUUl9YTUxOUykpCi0gICAgICAgIHsKLSAgICAgICAgICBkZWYuYWRkTmFtZXNwYWNlKGxvY2FsUGFydCwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIGRlZi5hZGROYW1lc3BhY2UobnVsbCwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gVGhlcmUgYXJlIHByb2JsZW1zIHdoZW4gdGhlIG1vZGVsIGlzIGNyZWF0ZWQgYW5kIHRoZSBvcmRlciBvZiBlbGVtZW50cyBpcyBub3QKLSAgICAvLyBJbXBvcnQgLSBUeXBlcyAtIE1lc3NhZ2UgLSBQb3J0VHlwZSAtIEJpbmRpbmcgLSBTZXJ2aWNlIHNvIHdlIG5lZWQgdG8gcmVhZCB0aGVtCi0gICAgLy8gaW50byB0aGUgbW9kZWwgaW4gdGhhdCBvcmRlcgotICAgIC8vIFBlcmZvcm1hbmNlIHdpc2UgdGhpcyBzaG91bGQgYmUgbW9kaWZpZWQgYXMgd2UgaGF2ZSB0byBtYWtlIDUgZXh0cmEgbG9vcHMgdGhyb3VnaAotICAgIC8vIGFsbCBvZiB0aGUgZWxlbWVudHMgYXMgYSByZXN1bHQKLQotICAgIC8vIHRha2UgY2FyZSBvZiBJbXBvcnRzLCBUeXBlcywgRG9jdW1lbnRhdGlvbiBhbmQgZXh0ZW5zaWJsZWVsZW1lbnRzIHRvZ2V0aGVyIC0gc2F2ZXMgYSBwYXNzIGZvciBEb2N1bWVudGF0aW9uIAotICAgIC8vIGxhdGVyIGFuZCBEb2NzIGRvbid0IGVmZmVjdCBhbnl0aGluZyBlbHNlIC0gSW1wb3J0cyBhbmQgVHlwZXMgYXJlIGVzc2VudGlhbGx5IHRoZSBzYW1lIHRoaW5nCi0gICAgLy8gbm8gcHJlY29uY2VpdmVkIGlkZWFzIGFib3V0IGV4dGVuc2libGUgZWxlbWVudHMKLSAgICBFbGVtZW50IHRlbXBFbCA9IERPTVV0aWxzLmdldEZpcnN0Q2hpbGRFbGVtZW50KGRlZkVsKTsKLQotICAgIHdoaWxlICh0ZW1wRWwgIT0gbnVsbCkKLSAgICB7Ci0KLSAgICAgIGlmIChRTmFtZVV0aWxzLm1hdGNoZXMoQ29uc3RhbnRzLlFfRUxFTV9JTVBPUlQsIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBuYW1lc3BhY2VVUkkgPSBET01VdGlscy5nZXRBdHRyaWJ1dGUodGVtcEVsLCBDb25zdGFudHMuQVRUUl9OQU1FU1BBQ0UpOwotICAgICAgICBTdHJpbmcgbG9jYXRpb25VUkkgPSBET01VdGlscy5nZXRBdHRyaWJ1dGUodGVtcEVsLCBDb25zdGFudHMuQVRUUl9MT0NBVElPTik7Ci0gICAgICAgIGlmKGxvY2F0aW9uVVJJID09IG51bGwgfHwgbG9jYXRpb25VUkkuZXF1YWxzKCIiKSkKLSAgICAgICAgewotICAgICAgICAgIGFkZFJlYWRlckVycm9yKGRlZiwgdGVtcEVsLCBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfVU5BQkxFX1RPX0lNUE9SVF9OT19MT0NBVElPTikpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIEltcG9ydEhvbGRlciBpaCA9IG5ldyBJbXBvcnRIb2xkZXIobmFtZXNwYWNlVVJJLCBsb2NhdGlvblVSSSwgZGVmLmdldERvY3VtZW50QmFzZVVSSSgpLCB0aGlzLCBkZXB0aCsxLCB0ZW1wRWwsIG1lc3NhZ2VnZW5lcmF0b3IsIHZhbGluZm8pOwotICAgICAgICAgIC8vIE9ubHkgYWRkIHRoZSBpbXBvcnQgdG8gdGhlIGxpc3QgaWYgaXQgaXMgbm90IGFuIGltcG9ydCBmb3IgdGhpcyBkb2N1bWVudC4KLSAgICAgICAgICBpZighZG9jdW1lbnRCYXNlVVJJLmVxdWFscyhpaC5nZXRMb2NhdGlvbigpKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpbXBvcnRlZERlZnMuYWRkKGloKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgc2V0TG9jYXRpb24odGVtcEVsLCB0ZW1wRWwpOwotLy8gICAgICAgIGlmIChpbXBvcnRlZERlZnMgPT0gbnVsbCkKLS8vICAgICAgICB7Ci0vLyAgICAgICAgICBpbXBvcnRlZERlZnMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0vLyAgICAgICAgfQotLy8gICAgICAgIGlmIChkb2N1bWVudEJhc2VVUkkgIT0gbnVsbCkKLS8vICAgICAgICB7Ci0vLyAgICAgICAgICBpbXBvcnRlZERlZnMucHV0KGRvY3VtZW50QmFzZVVSSSwgZGVmKTsKLS8vICAgICAgICB9Ci0vLyAgICAgICAgZGVmLmFkZEltcG9ydChwYXJzZUltcG9ydCh0ZW1wRWwsIGRlZiwgaW1wb3J0ZWREZWZzKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChRTmFtZVV0aWxzLm1hdGNoZXMoQ29uc3RhbnRzLlFfRUxFTV9ET0NVTUVOVEFUSU9OLCB0ZW1wRWwpKQotICAgICAgewotICAgICAgICBkZWYuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQodGVtcEVsKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX1RZUEVTLCB0ZW1wRWwpKQotICAgICAgewotICAgICAgICBpZih0eXBlc0VsICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBzZXRMb2NhdGlvbih0ZW1wRWwsIHRlbXBFbCk7Ci0gICAgICAgICAgYWRkUmVhZGVyRXJyb3IoZGVmLCB0ZW1wRWwsIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9NVUxUSVBMRV9UWVBFU19ERUZJTkVEKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgdHlwZXNFbCA9IHRlbXBFbDsKLSAgICAgICAgICBwYXJzZVR5cGVzKCk7Ci0gICAgICAgIH0KLS8vICAgICAgICBkZWYuc2V0VHlwZXMocGFyc2VUeXBlcyh0ZW1wRWwsIGRlZikpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fTUVTU0FHRSwgdGVtcEVsKSkKLSAgICAgIHsKLSAgICAgICAgbWVzc2FnZXMuYWRkKHRlbXBFbCk7Ci0gICAgICAgIC8vZGVmLmFkZE1lc3NhZ2UocGFyc2VNZXNzYWdlKHRlbXBFbCwgZGVmKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChRTmFtZVV0aWxzLm1hdGNoZXMoQ29uc3RhbnRzLlFfRUxFTV9QT1JUX1RZUEUsIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIHBvcnR0eXBlcy5hZGQodGVtcEVsKTsKLSAgICAgICAgLy8gICAgICAgICAgICAgUG9ydFR5cGUgcHQgPSBwYXJzZVBvcnRUeXBlKHRlbXBFbCwgZGVmKTsKLSAgICAgICAgLy8gICAgICAgICAgICAgaWYocHQgIT0gbnVsbCkKLSAgICAgICAgLy8gICAgICAgICAgICAgewotICAgICAgICAvLyAgICAgICAgICBkZWYuYWRkUG9ydFR5cGUocHQpOwotICAgICAgICAvLyAgICAgICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChRTmFtZVV0aWxzLm1hdGNoZXMoQ29uc3RhbnRzLlFfRUxFTV9CSU5ESU5HLCB0ZW1wRWwpKQotICAgICAgewotICAgICAgICBiaW5kaW5ncy5hZGQodGVtcEVsKTsKLSAgICAgICAgLy9kZWYuYWRkQmluZGluZyhwYXJzZUJpbmRpbmcodGVtcEVsLCBkZWYpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX1NFUlZJQ0UsIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIHNlcnZpY2VzLmFkZCh0ZW1wRWwpOwotICAgICAgICAvL2RlZi5hZGRTZXJ2aWNlKHBhcnNlU2VydmljZSh0ZW1wRWwsIGRlZikpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBleHRlbGVtZW50cy5hZGQodGVtcEVsKTsKLSAgICAgICAgLy8gICAgICAgIGRlZi5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudCgKLSAgICAgICAgLy8gICAgICAgICAgcGFyc2VFeHRlbnNpYmlsaXR5RWxlbWVudChEZWZpbml0aW9uLmNsYXNzLCB0ZW1wRWwsIGRlZikpOwotICAgICAgfQotICAgICAgdGVtcEVsID0gRE9NVXRpbHMuZ2V0TmV4dFNpYmxpbmdFbGVtZW50KHRlbXBFbCk7Ci0gICAgfQotCi0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIGRlZmluaXRpb25zIGVsZW1lbnQgZm9yIHRoaXMgZG9jdW1lbnQuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBkZWZpbml0aW9ucyBlbGVtZW50IGZvciB0aGlzIGRvY3VtZW50LgotICAgKi8KLSAgcHVibGljIERlZmluaXRpb24gZ2V0RGVmaW5pdGlvbigpCi0gIHsKLSAgICByZXR1cm4gZGVmOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IGEgc2V0IG9mIHRoZSBpbXBvcnRzIGluIHRoaXMgZG9jdW1lbnQuCi0gICAqIAotICAgKiBAcmV0dXJuIEEgc2V0IG9mIHRoZSBpbXBvcnRzIGluIHRoaXMgZG9jdW1lbnQuCi0gICAqLwotICBwdWJsaWMgU2V0IGdldEltcG9ydHMoKQotICB7Ci0gICAgcmV0dXJuIGltcG9ydGVkRGVmczsKLSAgfQotICAKLSAgLyoqCi0gICAqIAotICAgKiBAcGFyYW0gZGVmCi0gICAqIEBwYXJhbSBkb2MKLSAgICogQHBhcmFtIG5hbWVzcGFjZQotICAgKiBAcGFyYW0gbG9jYXRpb24KLSAgICovCi0vLyAgcHVibGljIHZvaWQgc2V0SW1wb3J0KERlZmluaXRpb24gZGVmLCBFbGVtZW50IGRvYywgU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIGxvY2F0aW9uKQotLy8gIHsKLS8vICAgIGlmKGxvY2F0aW9uID09IG51bGwgfHwgbG9jYXRpb24uZXF1YWxzKCIiKSkKLS8vICAgIHsKLS8vICAgICAgdmFsaW5mby5hZGRFcnJvcigpX1VOQUJMRV9UT19JTVBPUlRfTk9fTE9DQVRJT04gCi0vLyAgICB9Ci0vLyAgICBJbXBvcnQgaW1wID0gZGVmLmNyZWF0ZUltcG9ydCgpOwotLy8gICAgaW1wLnNldERlZmluaXRpb24oZGVmKTsKLS8vICAgIGltcC5zZXREb2N1bWVudGF0aW9uRWxlbWVudChkb2MpOwotLy8gICAgaW1wLnNldE5hbWVzcGFjZVVSSShuYW1lc3BhY2UpOwotLy8gICAgaW1wLnNldExvY2F0aW9uVVJJKGxvY2F0aW9uKTsKLS8vICAgIGRlZi5hZGRJbXBvcnQoaW1wKTsKLS8vICB9Ci0gIAotICAvKioKLSAgICogUGFyc2UgdGhlIHR5cGVzIGluIHRoZSBXU0RMIGRvY3VtZW50LiBIYW5kbGVzIGRvY3VtZW50YXRpb24sIGltcG9ydCBhbmQgc2NoZW1hCi0gICAqIGVsZW1lbnRzLgotICAgKi8KLSAgcHVibGljIHZvaWQgcGFyc2VUeXBlcygpCi0gIHsKLSAgICBUeXBlcyB0eXBlcyA9IGRlZi5jcmVhdGVUeXBlcygpOwotCi0gICAgRWxlbWVudCB0ZW1wRWwgPSBET01VdGlscy5nZXRGaXJzdENoaWxkRWxlbWVudCh0eXBlc0VsKTsKLQotICAgIHdoaWxlICh0ZW1wRWwgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fRE9DVU1FTlRBVElPTiwgdGVtcEVsKSkKLSAgICAgIHsKLSAgICAgICAgdHlwZXMuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQodGVtcEVsKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKHRlbXBFbC5nZXRMb2NhbE5hbWUoKS5lcXVhbHNJZ25vcmVDYXNlKCJpbXBvcnQiKSkKLSAgICAgICAgLy9lbHNlIGlmIChRTmFtZVV0aWxzLm1hdGNoZXMoQ29uc3RhbnRzLlFfRUxFTV9JTVBPUlQsIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIC8vIHRoaXMgc2hvdWxkbid0IHJlYWxseSBiZSB1c2VkIGhlcmUgYnV0IGEgbGl0dGxlIGhhY2sgd2lsbCBtYWtlCi0gICAgICAgIC8vIGxpZmUgZWFzaWVyCi0gICAgICAgIC8vcGFyc2VJbXBvcnQodGVtcEVsLCBkZWYsIChNYXApbmV3IEhhc2h0YWJsZSgpKTsKLSAgICAgICAgU3RyaW5nIG5hbWVzcGFjZVVSSSA9IERPTVV0aWxzLmdldEF0dHJpYnV0ZSh0ZW1wRWwsIENvbnN0YW50cy5BVFRSX05BTUVTUEFDRSk7Ci0gICAgICAgIFN0cmluZyBsb2NhdGlvblVSSSA9IERPTVV0aWxzLmdldEF0dHJpYnV0ZSh0ZW1wRWwsICJzY2hlbWFMb2NhdGlvbiIpOwotICAgICAgICBpbXBvcnRlZERlZnMuYWRkKG5ldyBJbXBvcnRIb2xkZXIobmFtZXNwYWNlVVJJLCBsb2NhdGlvblVSSSwgZGVmLmdldERvY3VtZW50QmFzZVVSSSgpLCB0aGlzLCBkZXB0aCsxLCB0ZW1wRWwsIG1lc3NhZ2VnZW5lcmF0b3IsIHZhbGluZm8pKTsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICB0eXBlcy5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChwYXJzZUV4dGVuc2liaWxpdHlFbGVtZW50KFR5cGVzLmNsYXNzLCB0ZW1wRWwsIGRlZikpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoKFdTRExFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0RWxlbSA9IHBhcnNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoVHlwZXMuY2xhc3MsIHRlbXBFbCwgZGVmKTsKLSAgICAgICAgICB0eXBlcy5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChleHRFbGVtKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaChXU0RMRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICB0ZW1wRWwgPSBET01VdGlscy5nZXROZXh0U2libGluZ0VsZW1lbnQodGVtcEVsKTsKLSAgICB9Ci0gICAgZGVmLnNldFR5cGVzKHR5cGVzKTsKLSAgICAKLSAgICB2YWxpbmZvLnNldEVsZW1lbnRMb2NhdGlvbnMoZWxlbWVudExvY2F0aW9ucyk7Ci0gICAgTGlzdCB0eXBlc0VsZW1zID0gdHlwZXMuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgaWYodHlwZXNFbGVtcyAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIHR5cGVzRWxlbXNJdGVyID0gdHlwZXNFbGVtcy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUodHlwZXNFbGVtc0l0ZXIuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCB0eXBlRWxlbWVudCA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCl0eXBlc0VsZW1zSXRlci5uZXh0KCk7Ci0gICAgICAgIAotICAgICAgICBJbmxpbmVTY2hlbWFWYWxpZGF0b3IgeHNkVmFsID0gbmV3IElubGluZVNjaGVtYVZhbGlkYXRvcigpOwotICAgICAgICB4c2RWYWwuc2V0TWVzc2FnZUdlbmVyYXRvcihtZXNzYWdlZ2VuZXJhdG9yKTsKLSAgICAKLSAgICAgICAgTGlzdCBwYXJlbnRzID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICBwYXJlbnRzLmFkZChkZWYpOwotICAgICAgICBwYXJlbnRzLmFkZCgwLHR5cGVzKTsKLSAgICAgICAgeHNkVmFsLnZhbGlkYXRlKHR5cGVFbGVtZW50LCBwYXJlbnRzLHZhbGluZm8pOwotICAgICAgICBYU01vZGVsW10gdHlwZXNTY2hlbWFzID0gdmFsaW5mby5nZXRTY2hlbWFzKCk7Ci0gICAgICAgIExpc3QgdHlwZXNTY2hlbWFMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgdHlwZXNTY2hlbWFzLmxlbmd0aDsgaSsrKQotICAgICAgICB7ICAKLSAgICAgICAgICB0eXBlc1NjaGVtYUxpc3QuYWRkKHR5cGVzU2NoZW1hc1tpXSk7Ci0gICAgICAgIH0KLSAgICAgICAgc2NoZW1hcy5hZGRBbGwodHlwZXNTY2hlbWFMaXN0KTsKLSAgICAgICAgdmFsaW5mby5jbGVhclNjaGVtYXMoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgdmFsaW5mby5zZXRFbGVtZW50TG9jYXRpb25zKG51bGwpOwotICB9Ci0gIAotICAvKioKLSAgICogUGFyc2UgdGhlIG1lc3NhZ2VzIGluIHRoaXMgZG9jdW1lbnQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBwYXJzZU1lc3NhZ2VzKCkKLSAgewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWVzc2FnZXMuc2l6ZSgpOyBpKyspCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGRlZi5hZGRNZXNzYWdlKHBhcnNlTWVzc2FnZSgoRWxlbWVudCltZXNzYWdlcy5nZXQoaSksIGRlZikpOwotICAgICAgfQotICAgICAgY2F0Y2goV1NETEV4Y2VwdGlvbiBlKQotICAgICAge30KLSAgICB9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBQYXJzZSB0aGUgcG9ydFR5cGVzIGluIHRoaXMgZG9jdW1lbnQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBwYXJzZVBvcnR0eXBlcygpCi0gIHsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHBvcnR0eXBlcy5zaXplKCk7IGkrKykKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgUG9ydFR5cGUgcHQgPSBwYXJzZVBvcnRUeXBlKChFbGVtZW50KXBvcnR0eXBlcy5nZXQoaSksIGRlZik7Ci0gICAgICAgIGlmIChwdCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgZGVmLmFkZFBvcnRUeXBlKHB0KTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2F0Y2goV1NETEV4Y2VwdGlvbiBlKQotICAgICAge30KLSAgICB9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBQYXJzZSB0aGUgYmluZGluZ3MgaW4gdGhpcyBkb2N1bWVudC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHBhcnNlQmluZGluZ3MoKQotICB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBiaW5kaW5ncy5zaXplKCk7IGkrKykKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgZGVmLmFkZEJpbmRpbmcocGFyc2VCaW5kaW5nKChFbGVtZW50KWJpbmRpbmdzLmdldChpKSwgZGVmKSk7Ci0gICAgICB9Ci0gICAgICBjYXRjaChXU0RMRXhjZXB0aW9uIGUpCi0gICAgICB7fQotICAgIH0KLSAgfQotICAKLSAgLyoqCi0gICAqIFBhcnNlIHRoZSBzZXJ2aWNlcyBpbiB0aGlzIGRvY3VtZW50LgotICAgKi8KLSAgcHVibGljIHZvaWQgcGFyc2VTZXJ2aWNlcygpCi0gIHsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNlcnZpY2VzLnNpemUoKTsgaSsrKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBkZWYuYWRkU2VydmljZShwYXJzZVNlcnZpY2UoKEVsZW1lbnQpc2VydmljZXMuZ2V0KGkpLCBkZWYpKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoKFdTRExFeGNlcHRpb24gZSkKLSAgICAgIHt9Ci0gICAgfQotICB9Ci0gIAotICAvKioKLSAgICogUGFyc2UgdGhlIGV4dGVuc2liaWxpdHkgZWxlbWVudHMgaW4gdGhpcyBkb2N1bWVudC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHBhcnNlRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkKLSAgewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZXh0ZWxlbWVudHMuc2l6ZSgpOyBpKyspCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGRlZi5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChwYXJzZUV4dGVuc2liaWxpdHlFbGVtZW50KERlZmluaXRpb24uY2xhc3MsIChFbGVtZW50KWV4dGVsZW1lbnRzLmdldChpKSwgZGVmKSk7Ci0gICAgICB9Ci0gICAgICBjYXRjaChXU0RMRXhjZXB0aW9uIGUpCi0gICAgICB7fQotICAgIH0KLSAgfQotICAKLSAgLyoqCi0gICAqIEFkZCB0aGUgZ2l2ZW4gbGlzdCBvZiBzY2hlbWFzIHRvIHRoZSBzY2hlbWFzIGZvciB0aGlzIGRvY3VtZW50LgotICAgKiAKLSAgICogQHBhcmFtIHNjaGVtYXMgVGhlIGxpc3Qgb2Ygc2NoZW1hcyB0byBhZGQgdG8gdGhpcyBkb2N1bWVudCdzIHNjaGVtYXMuCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRTY2hlbWFzKExpc3Qgc2NoZW1hcykKLSAgewotICAgIHRoaXMuc2NoZW1hcy5hZGRBbGwoc2NoZW1hcyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIHNjaGVtYXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZG9jdW1lbnQuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBzY2hlbWFzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRvY3VtZW50LgotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0U2NoZW1hcygpCi0gIHsKLSAgICByZXR1cm4gc2NoZW1hczsKLSAgfQotICAKLSAgLyoqCi0gICAqIFBhcnNlIHRoZSBzcGVjaWZpZWQgYmluZGluZy4KLSAgICogCi0gICAqIEBwYXJhbSBiaW5kaW5nRWwgVGhlIGJpbmRpbmcgZWxlbWVudC4KLSAgICogQHBhcmFtIGRlZiBUaGUgZGVmaW5pdGlvbnMgZWxlbWVudC4KLSAgICogQHJldHVybiBBIFdTREwgYmluZGluZyBlbGVtZW50LgotICAgKiBAdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgICovCi0gIHByb3RlY3RlZCBCaW5kaW5nIHBhcnNlQmluZGluZyhFbGVtZW50IGJpbmRpbmdFbCwgRGVmaW5pdGlvbiBkZWYpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBCaW5kaW5nIGJpbmRpbmcgPSBudWxsOwotICAgIFN0cmluZyBuYW1lID0gRE9NVXRpbHMuZ2V0QXR0cmlidXRlKGJpbmRpbmdFbCwgQ29uc3RhbnRzLkFUVFJfTkFNRSk7Ci0gICAgUU5hbWUgcG9ydFR5cGVOYW1lOwotICAgIHRyeQotICAgIHsKLSAgICAgIHBvcnRUeXBlTmFtZSA9IERPTVV0aWxzLmdldFF1YWxpZmllZEF0dHJpYnV0ZVZhbHVlKGJpbmRpbmdFbCwgQ29uc3RhbnRzLkFUVFJfVFlQRSwgQ29uc3RhbnRzLkVMRU1fQklORElORywgZmFsc2UpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy90aGUgY2FsbCBhYm92ZSBmYWlscyBpZiB0aGVyZSBpcyBubyBxdWFsaWZpZWQgbmFtZXNwYWNlIGZvciB0aGUgbWVzc2FnZSBuYW1lCi0gICAgICBwb3J0VHlwZU5hbWUgPSBuZXcgUU5hbWUobnVsbCwgRE9NVXRpbHMuZ2V0QXR0cmlidXRlKGJpbmRpbmdFbCwgInR5cGUiKSk7Ci0gICAgfQotCi0gICAgUG9ydFR5cGUgcG9ydFR5cGUgPSBudWxsOwotCi0gICAgaWYgKG5hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBRTmFtZSBiaW5kaW5nTmFtZSA9IG5ldyBRTmFtZShkZWYuZ2V0VGFyZ2V0TmFtZXNwYWNlKCksIG5hbWUpOwotCi0gICAgICBiaW5kaW5nID0gZGVmLmdldEJpbmRpbmcoYmluZGluZ05hbWUpOwotCi0gICAgICBpZiAoYmluZGluZyA9PSBudWxsKQotICAgICAgewotICAgICAgICBiaW5kaW5nID0gZGVmLmNyZWF0ZUJpbmRpbmcoKTsKLSAgICAgICAgYmluZGluZy5zZXRRTmFtZShiaW5kaW5nTmFtZSk7Ci0gICAgICB9Ci0gICAgICAvLyByZXBvcnQgYW4gZXJyb3IgaWYgYSBiaW5kaW5nIHdpdGggdGhpcyBuYW1lIGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZAotICAgICAgZWxzZSBpZiAoIWJpbmRpbmcuaXNVbmRlZmluZWQoKSkKLSAgICAgIHsKLSAgICAgICAgLy9hZGRSZWFkZXJFcnJvcihkZWYsYmluZGluZ0VsLCAiX0JJTkRJTkdfTkFNRV9BTFJFQURZX0RFRklORUQiKTsgICAgICAgCi0gICAgICAgIGFkZFJlYWRlckVycm9yKAotICAgICAgICAgIGRlZiwKLSAgICAgICAgICBiaW5kaW5nRWwsCi0gICAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoIl9CSU5ESU5HX05BTUVfQUxSRUFEWV9ERUZJTkVEIiwgIiciICsgYmluZGluZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpICsgIiciKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBiaW5kaW5nID0gZGVmLmNyZWF0ZUJpbmRpbmcoKTsKLSAgICB9Ci0KLSAgICAvLyBXaGV0aGVyIGl0IHdhcyByZXRyaWV2ZWQgb3IgY3JlYXRlZCwgdGhlIGRlZmluaXRpb24gaGFzIGJlZW4gZm91bmQuCi0gICAgYmluZGluZy5zZXRVbmRlZmluZWQoZmFsc2UpOwotCi0gICAgaWYgKHBvcnRUeXBlTmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIHBvcnRUeXBlID0gZGVmLmdldFBvcnRUeXBlKHBvcnRUeXBlTmFtZSk7Ci0KLSAgICAgIGlmIChwb3J0VHlwZSA9PSBudWxsKQotICAgICAgewotICAgICAgICBwb3J0VHlwZSA9IGRlZi5jcmVhdGVQb3J0VHlwZSgpOwotICAgICAgICBwb3J0VHlwZS5zZXRRTmFtZShwb3J0VHlwZU5hbWUpOwotICAgICAgICBkZWYuYWRkUG9ydFR5cGUocG9ydFR5cGUpOwotICAgICAgfQotCi0gICAgICBiaW5kaW5nLnNldFBvcnRUeXBlKHBvcnRUeXBlKTsKLSAgICB9Ci0KLSAgICBFbGVtZW50IHRlbXBFbCA9IERPTVV0aWxzLmdldEZpcnN0Q2hpbGRFbGVtZW50KGJpbmRpbmdFbCk7Ci0KLSAgICB3aGlsZSAodGVtcEVsICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX0RPQ1VNRU5UQVRJT04sIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIGJpbmRpbmcuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQodGVtcEVsKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX09QRVJBVElPTiwgdGVtcEVsKSkKLSAgICAgIHsKLSAgICAgICAgYmluZGluZy5hZGRCaW5kaW5nT3BlcmF0aW9uKHBhcnNlQmluZGluZ09wZXJhdGlvbih0ZW1wRWwsIHBvcnRUeXBlLCBkZWYpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgYmluZGluZy5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChwYXJzZUV4dGVuc2liaWxpdHlFbGVtZW50KEJpbmRpbmcuY2xhc3MsIHRlbXBFbCwgZGVmKSk7Ci0gICAgICB9Ci0KLSAgICAgIHRlbXBFbCA9IERPTVV0aWxzLmdldE5leHRTaWJsaW5nRWxlbWVudCh0ZW1wRWwpOwotICAgIH0KLQotICAgIC8vIGFkZCB0aGUgbG9jYXRpb24gb2YgdGhpcyBlbGVtZW50IHRvIGVsZW1lbnRMb2NhdGlvbnMgCi0gICAgc2V0TG9jYXRpb24oYmluZGluZywgYmluZGluZ0VsKTsKLQotICAgIHJldHVybiBiaW5kaW5nOwotICB9Ci0KLSAgLyoqCi0gICAqIFBhcnNlIGEgc3BlY2lmaWMgYmluZGluZyBvcGVyYXRpb24uCi0gICAqIAotICAgKiBAcGFyYW0gYmluZGluZ09wZXJhdGlvbkVsIFRoZSBiaW5kaW5nIG9wZXJhdGlvbiBlbGVtZW50LgotICAgKiBAcGFyYW0gcG9ydFR5cGUgVGhlIHBvcnRUeXBlIHRoZSBiaW5kaW5nIHJlZmVyZW5jZXMuCi0gICAqIEBwYXJhbSBkZWYgVGhlIGRlZmluaXRpb25zIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gQSBXU0RMIGJpbmRpbmcgb3BlcmF0aW9uIGVsZW1lbnQuCi0gICAqIEB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICAgKi8KLSAgcHJvdGVjdGVkIEJpbmRpbmdPcGVyYXRpb24gcGFyc2VCaW5kaW5nT3BlcmF0aW9uKEVsZW1lbnQgYmluZGluZ09wZXJhdGlvbkVsLCBQb3J0VHlwZSBwb3J0VHlwZSwgRGVmaW5pdGlvbiBkZWYpCi0gICAgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IGRlZi5jcmVhdGVCaW5kaW5nT3BlcmF0aW9uKCk7Ci0gICAgU3RyaW5nIG5hbWUgPSBET01VdGlscy5nZXRBdHRyaWJ1dGUoYmluZGluZ09wZXJhdGlvbkVsLCBDb25zdGFudHMuQVRUUl9OQU1FKTsKLQotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgewotICAgICAgYmluZGluZ09wZXJhdGlvbi5zZXROYW1lKG5hbWUpOwotICAgIH0KLQotICAgIEVsZW1lbnQgdGVtcEVsID0gRE9NVXRpbHMuZ2V0Rmlyc3RDaGlsZEVsZW1lbnQoYmluZGluZ09wZXJhdGlvbkVsKTsKLQotICAgIHdoaWxlICh0ZW1wRWwgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fRE9DVU1FTlRBVElPTiwgdGVtcEVsKSkKLSAgICAgIHsKLSAgICAgICAgYmluZGluZ09wZXJhdGlvbi5zZXREb2N1bWVudGF0aW9uRWxlbWVudCh0ZW1wRWwpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fSU5QVVQsIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIGJpbmRpbmdPcGVyYXRpb24uc2V0QmluZGluZ0lucHV0KHBhcnNlQmluZGluZ0lucHV0KHRlbXBFbCwgZGVmKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChRTmFtZVV0aWxzLm1hdGNoZXMoQ29uc3RhbnRzLlFfRUxFTV9PVVRQVVQsIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIGJpbmRpbmdPcGVyYXRpb24uc2V0QmluZGluZ091dHB1dChwYXJzZUJpbmRpbmdPdXRwdXQodGVtcEVsLCBkZWYpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX0ZBVUxULCB0ZW1wRWwpKQotICAgICAgewotICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLmFkZEJpbmRpbmdGYXVsdChwYXJzZUJpbmRpbmdGYXVsdCh0ZW1wRWwsIGRlZikpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KHBhcnNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoQmluZGluZ09wZXJhdGlvbi5jbGFzcywgdGVtcEVsLCBkZWYpKTsKLSAgICAgIH0KLQotICAgICAgdGVtcEVsID0gRE9NVXRpbHMuZ2V0TmV4dFNpYmxpbmdFbGVtZW50KHRlbXBFbCk7Ci0gICAgfQotCi0gICAgaWYgKHBvcnRUeXBlICE9IG51bGwpCi0gICAgewotICAgICAgQmluZGluZ0lucHV0IGJpbmRpbmdJbnB1dCA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCk7Ci0gICAgICBCaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXRwdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKTsKLSAgICAgIC8vU3RyaW5nIGlucHV0TmFtZSA9IChiaW5kaW5nSW5wdXQgIT0gbnVsbCA/IGJpbmRpbmdJbnB1dC5nZXROYW1lKCkgOiBudWxsKTsKLSAgICAgIC8vU3RyaW5nIG91dHB1dE5hbWUgPSAoYmluZGluZ091dHB1dCAhPSBudWxsID8gYmluZGluZ091dHB1dC5nZXROYW1lKCkgOiBudWxsKTsKLQotICAgICAgLy8gaGFjayBjb2RlIHRvIGdldCBhdCBvcGVyYXRpb25zIHRoYXQgYXJlIGRlZmluZWQgd2l0aCB0aGUgc2FtZSBuYW1lIGJ1dCBkaWZmZXJlbnQKLSAgICAgIC8vIGlucHV0cyBhbmQgb3V0cHV0cyAKLSAgICAgIE9wZXJhdGlvbiBvcCA9IG51bGw7Ci0gICAgICBMaXN0IG9wZXJhdGlvbnMgPSBwb3J0VHlwZS5nZXRPcGVyYXRpb25zKCk7Ci0gICAgICAvLyBnZXQgYSBsaXN0IG9mIGFsbCBvcGVyYXRpb25zIHdpdGggbWF0Y2hpbmcgbmFtZXMKLSAgICAgIExpc3QgbWF0Y2hpbmdPcGVyYXRpb25zID0gbmV3IFZlY3RvcigpOwotICAgICAgSXRlcmF0b3IgaU9wZXJhdGlvbnMgPSBvcGVyYXRpb25zLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaU9wZXJhdGlvbnMuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBPcGVyYXRpb24gb3BlciA9IChPcGVyYXRpb24paU9wZXJhdGlvbnMubmV4dCgpOwotICAgICAgICBpZiAob3Blci5nZXROYW1lKCkuZXF1YWxzSWdub3JlQ2FzZShiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICBtYXRjaGluZ09wZXJhdGlvbnMuYWRkKG9wZXIpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmIChtYXRjaGluZ09wZXJhdGlvbnMgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLy8gSWYgdGhlcmUncyBvbmx5IG9uZSBtYXRjaGluZyBvcGVyYXRpb24gdGhpcyBpcyB3aGF0IHdlJ3JlIHJlZmVycmluZyB0by4KLSAgICAgICAgLy8gT25seSBtYXRjaGluZyBpZiBiaW5kaW5nIG9wZXJhdGlvbiBpbnB1dCBuYW1lIGFuZCBvdXRwdXQgbmFtZSBhcmUKLSAgICAgICAgLy8gYm90aCBudWxsIG9yIHRoZSBzYW1lIGFzIHRoZSBwb3J0VHlwZSBvcGVyYXRpb24gaW5wdXQgYW5kIG91dHB1dCBuYW1lcy4KLSAgICAgICAgLy8gdGhlIHBvcnRUeXBlIG9wZXJhdGlvbiBuYW1lCi0gICAgICAgIGlmIChtYXRjaGluZ09wZXJhdGlvbnMuc2l6ZSgpID09IDEpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBvbmx5IHNheSB0aGUgc2luZ2xlIG9wZXJhdGlvbiBpcyB0aGUgb25lIHdlJ3JlIGxvb2tpbmcgZm9yIGlmIHRoZSBuYW1lcwotICAgICAgICAgIC8vIG9mIHRoZSBiaW5kaW5nIGlucHV0IGFuZCBvdXRwdXQgYXJlIG5vdCBzcGVjaWZpZWQKLSAgICAgICAgICBPcGVyYXRpb24gdGVtcE9wID0gKE9wZXJhdGlvbiltYXRjaGluZ09wZXJhdGlvbnMuZ2V0KDApOwotICAgICAgICAgIGJvb2xlYW4gaW5wdXRPSyA9IGZhbHNlOwotICAgICAgICAgIGJvb2xlYW4gb3V0cHV0T0sgPSBmYWxzZTsKLSAgICAgICAgICBJbnB1dCB0ZW1wSW5wdXQgPSB0ZW1wT3AuZ2V0SW5wdXQoKTsKLSAgICAgICAgICBPdXRwdXQgdGVtcE91dHB1dCA9IHRlbXBPcC5nZXRPdXRwdXQoKTsKLQotICAgICAgICAgIC8vIG9yZGVyIGlzIGltcG9ydGFudCBpbiB0aGVzZSBjb25kaXRpb25zLiBjb25kaXRpb24gMiBtdXN0IGZhaWwgZm9yIDMgdG8gd29yawotICAgICAgICAgIC8vIGNoZWNrIHRoZSBpbnB1dAotICAgICAgICAgIGlmICh0ZW1wSW5wdXQgPT0gbnVsbCAmJiBiaW5kaW5nSW5wdXQgPT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpbnB1dE9LID0gdHJ1ZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZiAoYmluZGluZ0lucHV0ID09IG51bGwgfHwgYmluZGluZ0lucHV0LmdldE5hbWUoKSA9PSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlucHV0T0sgPSB0cnVlOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIGlmICh0ZW1wSW5wdXQgIT0gbnVsbCAmJiBiaW5kaW5nSW5wdXQuZ2V0TmFtZSgpLmVxdWFscyh0ZW1wSW5wdXQuZ2V0TmFtZSgpKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpbnB1dE9LID0gdHJ1ZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgLy8gY2hlY2sgdGhlIG91dHB1dAotICAgICAgICAgIGlmICh0ZW1wT3V0cHV0ID09IG51bGwgJiYgYmluZGluZ091dHB1dCA9PSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG91dHB1dE9LID0gdHJ1ZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZiAoYmluZGluZ091dHB1dCA9PSBudWxsIHx8IGJpbmRpbmdPdXRwdXQuZ2V0TmFtZSgpID09IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgb3V0cHV0T0sgPSB0cnVlOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIGlmICh0ZW1wT3V0cHV0ICE9IG51bGwgJiYgYmluZGluZ091dHB1dC5nZXROYW1lKCkuZXF1YWxzKHRlbXBPdXRwdXQuZ2V0TmFtZSgpKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBvdXRwdXRPSyA9IHRydWU7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChpbnB1dE9LICYmIG91dHB1dE9LKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG9wID0gdGVtcE9wOwotICAgICAgICAgIH0KLSAgICAgICAgICAvLyAgICAgICAgICBvcCA9IChPcGVyYXRpb24pIG1hdGNoaW5nT3BlcmF0aW9ucy5nZXQoMCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gb3RoZXJ3aXNlIGZpbmQgdGhlIG9wZXJhdGlvbiB3aXRoIHRoZSBzYW1lIG5hbWUsIGlucHV0bmFtZSwgb3V0cHV0bmFtZSBzaWduYXR1cmUKLSAgICAgICAgaWYgKG1hdGNoaW5nT3BlcmF0aW9ucyAhPSBudWxsICYmIG9wID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBJdGVyYXRvciBpTWF0Y2hpbmdPcGVyYXRpb25zID0gbWF0Y2hpbmdPcGVyYXRpb25zLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgd2hpbGUgKGlNYXRjaGluZ09wZXJhdGlvbnMuaGFzTmV4dCgpKQotICAgICAgICAgIHsKLQotICAgICAgICAgICAgYm9vbGVhbiBpbnB1dE5hbWVzRXF1YWwgPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2xlYW4gb3V0cHV0TmFtZXNFcXVhbCA9IGZhbHNlOwotICAgICAgICAgICAgT3BlcmF0aW9uIG9wZXIgPSAoT3BlcmF0aW9uKWlNYXRjaGluZ09wZXJhdGlvbnMubmV4dCgpOwotICAgICAgICAgICAgLy8gICAgICAgICAgaWYgKG9wZXIuZ2V0TmFtZSgpLmVxdWFsc0lnbm9yZUNhc2UoYmluZGluZ09wZXJhdGlvbi5nZXROYW1lKCkpKQotICAgICAgICAgICAgLy8gICAgICAgICAgewotICAgICAgICAgICAgSW5wdXQgb3BJbnB1dCA9IG9wZXIuZ2V0SW5wdXQoKTsKLSAgICAgICAgICAgIGlmIChvcElucHV0ICE9IG51bGwgJiYgYmluZGluZ0lucHV0ICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyBvcElucHV0TmFtZSA9IG9wSW5wdXQuZ2V0TmFtZSgpOwotICAgICAgICAgICAgICBTdHJpbmcgYmluZGluZ0lucHV0TmFtZSA9IGJpbmRpbmdJbnB1dC5nZXROYW1lKCk7Ci0gICAgICAgICAgICAgIGlmIChvcElucHV0TmFtZSAhPSBudWxsICYmIG9wSW5wdXROYW1lLmVxdWFsc0lnbm9yZUNhc2UoYmluZGluZ0lucHV0TmFtZSkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnB1dE5hbWVzRXF1YWwgPSB0cnVlOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGVsc2UgaWYgKG9wSW5wdXROYW1lID09IG51bGwgJiYgYmluZGluZ0lucHV0TmFtZSA9PSBudWxsKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW5wdXROYW1lc0VxdWFsID0gdHJ1ZTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAob3BJbnB1dCA9PSBudWxsICYmIGJpbmRpbmdJbnB1dCA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBpbnB1dE5hbWVzRXF1YWwgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgT3V0cHV0IG9wT3V0cHV0ID0gb3Blci5nZXRPdXRwdXQoKTsKLSAgICAgICAgICAgIGlmIChvcE91dHB1dCAhPSBudWxsICYmIGJpbmRpbmdPdXRwdXQgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIG9wT3V0cHV0TmFtZSA9IG9wT3V0cHV0LmdldE5hbWUoKTsKLSAgICAgICAgICAgICAgU3RyaW5nIGJpbmRpbmdPdXRwdXROYW1lID0gYmluZGluZ091dHB1dC5nZXROYW1lKCk7Ci0gICAgICAgICAgICAgIGlmIChvcE91dHB1dE5hbWUgIT0gbnVsbCAmJiBvcE91dHB1dE5hbWUuZXF1YWxzSWdub3JlQ2FzZShiaW5kaW5nT3V0cHV0TmFtZSkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXRwdXROYW1lc0VxdWFsID0gdHJ1ZTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBlbHNlIGlmIChvcE91dHB1dE5hbWUgPT0gbnVsbCAmJiBiaW5kaW5nT3V0cHV0TmFtZSA9PSBudWxsKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0cHV0TmFtZXNFcXVhbCA9IHRydWU7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG9wT3V0cHV0ID09IG51bGwgJiYgYmluZGluZ091dHB1dCA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBvdXRwdXROYW1lc0VxdWFsID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpbnB1dE5hbWVzRXF1YWwgJiYgb3V0cHV0TmFtZXNFcXVhbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgb3AgPSBvcGVyOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgLy9PcGVyYXRpb24gb3AgPSBwb3J0VHlwZS5nZXRPcGVyYXRpb24obmFtZSwgaW5wdXROYW1lLCBvdXRwdXROYW1lKTsKLQotICAgICAgaWYgKG9wID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIG9wID0gZGVmLmNyZWF0ZU9wZXJhdGlvbigpOwotICAgICAgICBvcC5zZXROYW1lKG5hbWUpOwotICAgICAgICBwb3J0VHlwZS5hZGRPcGVyYXRpb24ob3ApOwotICAgICAgfQotCi0gICAgICBiaW5kaW5nT3BlcmF0aW9uLnNldE9wZXJhdGlvbihvcCk7Ci0gICAgfQotCi0gICAgLy8gYWRkIHRoZSBsb2NhdGlvbiBvZiB0aGlzIGVsZW1lbnQgdG8gZWxlbWVudExvY2F0aW9ucyAKLSAgICBzZXRMb2NhdGlvbihiaW5kaW5nT3BlcmF0aW9uLCBiaW5kaW5nT3BlcmF0aW9uRWwpOwotCi0gICAgcmV0dXJuIGJpbmRpbmdPcGVyYXRpb247Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBQYXJzZSBhIHNwZWNpZmljIGJpbmRpbmcgaW5wdXQgZWxlbWVudC4KLSAgICogCi0gICAqIEBwYXJhbSBiaW5kaW5nSW5wdXRFbCBUaGUgYmluZGluZyBpbnB1dCBlbGVtZW50LgotICAgKiBAcGFyYW0gZGVmIFRoZSBkZWZpbml0aW9ucyBlbGVtZW50LgotICAgKiBAcmV0dXJuIEEgV1NETCBiaW5kaW5nIGlucHV0IGVsZW1lbnQuCi0gICAqIEB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICAgKi8KLSAgcHJvdGVjdGVkIEJpbmRpbmdJbnB1dCBwYXJzZUJpbmRpbmdJbnB1dChFbGVtZW50IGJpbmRpbmdJbnB1dEVsLCBEZWZpbml0aW9uIGRlZikgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQgPSBkZWYuY3JlYXRlQmluZGluZ0lucHV0KCk7Ci0gICAgU3RyaW5nIG5hbWUgPSBET01VdGlscy5nZXRBdHRyaWJ1dGUoYmluZGluZ0lucHV0RWwsIENvbnN0YW50cy5BVFRSX05BTUUpOwotCi0gICAgaWYgKG5hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBiaW5kaW5nSW5wdXQuc2V0TmFtZShuYW1lKTsKLSAgICB9Ci0KLSAgICBFbGVtZW50IHRlbXBFbCA9IERPTVV0aWxzLmdldEZpcnN0Q2hpbGRFbGVtZW50KGJpbmRpbmdJbnB1dEVsKTsKLQotICAgIHdoaWxlICh0ZW1wRWwgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fRE9DVU1FTlRBVElPTiwgdGVtcEVsKSkKLSAgICAgIHsKLSAgICAgICAgYmluZGluZ0lucHV0LnNldERvY3VtZW50YXRpb25FbGVtZW50KHRlbXBFbCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGJpbmRpbmdJbnB1dC5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChwYXJzZUV4dGVuc2liaWxpdHlFbGVtZW50KEJpbmRpbmdJbnB1dC5jbGFzcywgdGVtcEVsLCBkZWYpKTsKLSAgICAgIH0KLQotICAgICAgdGVtcEVsID0gRE9NVXRpbHMuZ2V0TmV4dFNpYmxpbmdFbGVtZW50KHRlbXBFbCk7Ci0gICAgfQotCi0gICAgLy8gYWRkIHRoZSBsb2NhdGlvbiBvZiB0aGlzIGVsZW1lbnQgdG8gZWxlbWVudExvY2F0aW9ucyAKLSAgICBzZXRMb2NhdGlvbihiaW5kaW5nSW5wdXQsIGJpbmRpbmdJbnB1dEVsKTsKLQotICAgIHJldHVybiBiaW5kaW5nSW5wdXQ7Ci0gIH0KLQotICAvKioKLSAgICogUGFyc2UgYSBzcGVjaWZpYyBiaW5kaW5nIG91dHB1dCBlbGVtZW50LgotICAgKiAKLSAgICogQHBhcmFtIGJpbmRpbmdPdXRwdXRFbCBUaGUgYmluZGluZyBvdXRwdXQgZWxlbWVudC4KLSAgICogQHBhcmFtIGRlZiBUaGUgZGVmaW5pdGlvbnMgZWxlbWVudC4KLSAgICogQHJldHVybiBBIFdTREwgYmluZGluZyBvdXRwdXQgZWxlbWVudC4KLSAgICogQHRocm93cyBXU0RMRXhjZXB0aW9uCi0gICAqLwotICBwcm90ZWN0ZWQgQmluZGluZ091dHB1dCBwYXJzZUJpbmRpbmdPdXRwdXQoRWxlbWVudCBiaW5kaW5nT3V0cHV0RWwsIERlZmluaXRpb24gZGVmKSB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgQmluZGluZ091dHB1dCBiaW5kaW5nT3V0cHV0ID0gZGVmLmNyZWF0ZUJpbmRpbmdPdXRwdXQoKTsKLSAgICBTdHJpbmcgbmFtZSA9IERPTVV0aWxzLmdldEF0dHJpYnV0ZShiaW5kaW5nT3V0cHV0RWwsIENvbnN0YW50cy5BVFRSX05BTUUpOwotCi0gICAgaWYgKG5hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBiaW5kaW5nT3V0cHV0LnNldE5hbWUobmFtZSk7Ci0gICAgfQotCi0gICAgRWxlbWVudCB0ZW1wRWwgPSBET01VdGlscy5nZXRGaXJzdENoaWxkRWxlbWVudChiaW5kaW5nT3V0cHV0RWwpOwotCi0gICAgd2hpbGUgKHRlbXBFbCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChRTmFtZVV0aWxzLm1hdGNoZXMoQ29uc3RhbnRzLlFfRUxFTV9ET0NVTUVOVEFUSU9OLCB0ZW1wRWwpKQotICAgICAgewotICAgICAgICBiaW5kaW5nT3V0cHV0LnNldERvY3VtZW50YXRpb25FbGVtZW50KHRlbXBFbCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGJpbmRpbmdPdXRwdXQuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQocGFyc2VFeHRlbnNpYmlsaXR5RWxlbWVudChCaW5kaW5nT3V0cHV0LmNsYXNzLCB0ZW1wRWwsIGRlZikpOwotICAgICAgfQotCi0gICAgICB0ZW1wRWwgPSBET01VdGlscy5nZXROZXh0U2libGluZ0VsZW1lbnQodGVtcEVsKTsKLSAgICB9Ci0KLSAgICAvLyBhZGQgdGhlIGxvY2F0aW9uIG9mIHRoaXMgZWxlbWVudCB0byBlbGVtZW50TG9jYXRpb25zIAotICAgIHNldExvY2F0aW9uKGJpbmRpbmdPdXRwdXQsIGJpbmRpbmdPdXRwdXRFbCk7Ci0KLSAgICByZXR1cm4gYmluZGluZ091dHB1dDsKLSAgfQotCi0gIC8qKgotICAgKiBQYXJzZSBhIHNwZWNpZmljIGJpbmRpbmcgZmF1bHQgZWxlbWVudC4KLSAgICogCi0gICAqIEBwYXJhbSBiaW5kaW5nRmF1bHRFbCBUaGUgYmluZGluZyBmYXVsdCBlbGVtZW50LgotICAgKiBAcGFyYW0gZGVmIFRoZSBkZWZpbml0aW9ucyBlbGVtZW50LgotICAgKiBAcmV0dXJuIEEgV1NETCBiaW5kaW5nIGZhdWx0IGVsZW1lbnQuCi0gICAqIEB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICAgKi8KLSAgcHJvdGVjdGVkIEJpbmRpbmdGYXVsdCBwYXJzZUJpbmRpbmdGYXVsdChFbGVtZW50IGJpbmRpbmdGYXVsdEVsLCBEZWZpbml0aW9uIGRlZikgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIEJpbmRpbmdGYXVsdCBiaW5kaW5nRmF1bHQgPSBkZWYuY3JlYXRlQmluZGluZ0ZhdWx0KCk7Ci0gICAgU3RyaW5nIG5hbWUgPSBET01VdGlscy5nZXRBdHRyaWJ1dGUoYmluZGluZ0ZhdWx0RWwsIENvbnN0YW50cy5BVFRSX05BTUUpOwotCi0gICAgaWYgKG5hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBiaW5kaW5nRmF1bHQuc2V0TmFtZShuYW1lKTsKLSAgICB9Ci0KLSAgICBFbGVtZW50IHRlbXBFbCA9IERPTVV0aWxzLmdldEZpcnN0Q2hpbGRFbGVtZW50KGJpbmRpbmdGYXVsdEVsKTsKLQotICAgIHdoaWxlICh0ZW1wRWwgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fRE9DVU1FTlRBVElPTiwgdGVtcEVsKSkKLSAgICAgIHsKLSAgICAgICAgYmluZGluZ0ZhdWx0LnNldERvY3VtZW50YXRpb25FbGVtZW50KHRlbXBFbCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGJpbmRpbmdGYXVsdC5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChwYXJzZUV4dGVuc2liaWxpdHlFbGVtZW50KEJpbmRpbmdGYXVsdC5jbGFzcywgdGVtcEVsLCBkZWYpKTsKLSAgICAgIH0KLQotICAgICAgdGVtcEVsID0gRE9NVXRpbHMuZ2V0TmV4dFNpYmxpbmdFbGVtZW50KHRlbXBFbCk7Ci0gICAgfQotCi0gICAgLy8gYWRkIHRoZSBsb2NhdGlvbiBvZiB0aGlzIGVsZW1lbnQgdG8gZWxlbWVudExvY2F0aW9ucyAKLSAgICBzZXRMb2NhdGlvbihiaW5kaW5nRmF1bHQsIGJpbmRpbmdGYXVsdEVsKTsKLQotICAgIHJldHVybiBiaW5kaW5nRmF1bHQ7Ci0gIH0KLQotICAvKioKLSAgICogUGFyc2UgYSBzcGVjaWZpYyBtZXNzYWdlIGVsZW1lbnQuCi0gICAqIAotICAgKiBAcGFyYW0gbXNnRWwgVGhlIG1lc3NhZ2UgZWxlbWVudC4KLSAgICogQHBhcmFtIGRlZiBUaGUgZGVmaW5pdGlvbnMgZWxlbWVudC4KLSAgICogQHJldHVybiBBIFdTREwgbWVzc2FnZSBlbGVtZW50LgotICAgKiBAdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgICovCi0gIHByb3RlY3RlZCBNZXNzYWdlIHBhcnNlTWVzc2FnZShFbGVtZW50IG1zZ0VsLCBEZWZpbml0aW9uIGRlZikgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIE1lc3NhZ2UgbXNnID0gbnVsbDsKLSAgICBTdHJpbmcgbmFtZSA9IERPTVV0aWxzLmdldEF0dHJpYnV0ZShtc2dFbCwgQ29uc3RhbnRzLkFUVFJfTkFNRSk7Ci0KLSAgICBpZiAobmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIFFOYW1lIG1lc3NhZ2VOYW1lID0gbmV3IFFOYW1lKGRlZi5nZXRUYXJnZXROYW1lc3BhY2UoKSwgbmFtZSk7Ci0KLSAgICAgIG1zZyA9IGRlZi5nZXRNZXNzYWdlKG1lc3NhZ2VOYW1lKTsKLQotICAgICAgaWYgKG1zZyA9PSBudWxsKQotICAgICAgewotICAgICAgICBtc2cgPSBkZWYuY3JlYXRlTWVzc2FnZSgpOwotICAgICAgICBtc2cuc2V0UU5hbWUobWVzc2FnZU5hbWUpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoIW1zZy5pc1VuZGVmaW5lZCgpKQotICAgICAgewotICAgICAgICAvLyBwcm9kdWNlIGFuIGVycm9yIG1lc3NhZ2UgYXMgYSBtZXNzYWdlIHdpdGggdGhpcyBuYW1lIGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZAotICAgICAgICBhZGRSZWFkZXJFcnJvcigKLSAgICAgICAgICBkZWYsCi0gICAgICAgICAgbXNnRWwsCi0gICAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoIl9NRVNTQUdFX05BTUVfQUxSRUFEWV9ERUZJTkVEIiwgIiciICsgbXNnLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkgKyAiJyIpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIG1zZyA9IGRlZi5jcmVhdGVNZXNzYWdlKCk7Ci0gICAgfQotCi0gICAgLy8gV2hldGhlciBpdCB3YXMgcmV0cmlldmVkIG9yIGNyZWF0ZWQsIHRoZSBkZWZpbml0aW9uIGhhcyBiZWVuIGZvdW5kLgotICAgIG1zZy5zZXRVbmRlZmluZWQoZmFsc2UpOwotCi0gICAgRWxlbWVudCB0ZW1wRWwgPSBET01VdGlscy5nZXRGaXJzdENoaWxkRWxlbWVudChtc2dFbCk7Ci0KLSAgICB3aGlsZSAodGVtcEVsICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX0RPQ1VNRU5UQVRJT04sIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIG1zZy5zZXREb2N1bWVudGF0aW9uRWxlbWVudCh0ZW1wRWwpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fUEFSVCwgdGVtcEVsKSkKLSAgICAgIHsKLSAgICAgICAgbXNnLmFkZFBhcnQocGFyc2VQYXJ0KHRlbXBFbCwgZGVmKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIFhNTCBWYWxpZGF0aW9uIHdpbGwgY2F0Y2ggdGhpcwotICAgICAgICBET01VdGlscy50aHJvd1dTRExFeGNlcHRpb24odGVtcEVsKTsKLSAgICAgIH0KLQotICAgICAgdGVtcEVsID0gRE9NVXRpbHMuZ2V0TmV4dFNpYmxpbmdFbGVtZW50KHRlbXBFbCk7Ci0gICAgfQotCi0gICAgLy8gYWRkIHRoZSBsb2NhdGlvbiBvZiB0aGlzIGVsZW1lbnQgdG8gZWxlbWVudExvY2F0aW9ucyAKLSAgICBzZXRMb2NhdGlvbihtc2csIG1zZ0VsKTsKLQotICAgIHJldHVybiBtc2c7Ci0gIH0KLQotICAvKioKLSAgICogUGFyc2UgYSBzcGVjaWZpYyBwYXJ0IGVsZW1lbnQuCi0gICAqIAotICAgKiBAcGFyYW0gcGFydEVsIFRoZSBwYXJ0IGVsZW1lbnQuCi0gICAqIEBwYXJhbSBkZWYgVGhlIGRlZmluaXRpb25zIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gQSBXU0RMIHBhcnQgZWxlbWVudC4KLSAgICogQHRocm93cyBXU0RMRXhjZXB0aW9uCi0gICAqLwotICBwcm90ZWN0ZWQgUGFydCBwYXJzZVBhcnQoRWxlbWVudCBwYXJ0RWwsIERlZmluaXRpb24gZGVmKSB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgUGFydCBwYXJ0ID0gZGVmLmNyZWF0ZVBhcnQoKTsKLSAgICBTdHJpbmcgbmFtZSA9IERPTVV0aWxzLmdldEF0dHJpYnV0ZShwYXJ0RWwsIENvbnN0YW50cy5BVFRSX05BTUUpOwotCi0gICAgUU5hbWUgZWxlbWVudE5hbWU7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgZWxlbWVudE5hbWUgPSBET01VdGlscy5nZXRRdWFsaWZpZWRBdHRyaWJ1dGVWYWx1ZShwYXJ0RWwsIENvbnN0YW50cy5BVFRSX0VMRU1FTlQsIENvbnN0YW50cy5FTEVNX01FU1NBR0UsIGZhbHNlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vdGhlIGNhbGwgYWJvdmUgZmFpbHMgaWYgdGhlcmUgaXMgbm8gcXVhbGlmaWVkIG5hbWVzcGFjZSBmb3IgdGhlIGVsZW1lbnQgbmFtZQotICAgICAgZWxlbWVudE5hbWUgPSBuZXcgUU5hbWUobnVsbCwgRE9NVXRpbHMuZ2V0QXR0cmlidXRlKHBhcnRFbCwgQ29uc3RhbnRzLkFUVFJfRUxFTUVOVCkpOwotICAgIH0KLQotICAgIFFOYW1lIHR5cGVOYW1lOwotICAgIHRyeQotICAgIHsKLSAgICAgIHR5cGVOYW1lID0gRE9NVXRpbHMuZ2V0UXVhbGlmaWVkQXR0cmlidXRlVmFsdWUocGFydEVsLCBDb25zdGFudHMuQVRUUl9UWVBFLAotICAgICAgICAvLyBDb3JyZWN0ZWQgLSB3YXMgQVRUUl9FTEVNRU5UCi0gIENvbnN0YW50cy5FTEVNX01FU1NBR0UsIGZhbHNlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vdGhlIGNhbGwgYWJvdmUgZmFpbHMgaWYgdGhlcmUgaXMgbm8gcXVhbGlmaWVkIG5hbWVzcGFjZSBmb3IgdGhlIGVsZW1lbnQgYXR0cmlidXRlCi0gICAgICB0eXBlTmFtZSA9IG5ldyBRTmFtZShudWxsLCBET01VdGlscy5nZXRBdHRyaWJ1dGUocGFydEVsLCBDb25zdGFudHMuQVRUUl9UWVBFKSk7Ci0gICAgfQotCi0gICAgaWYgKG5hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwYXJ0LnNldE5hbWUobmFtZSk7Ci0gICAgfQotCi0gICAgaWYgKGVsZW1lbnROYW1lICE9IG51bGwpCi0gICAgewotICAgICAgcGFydC5zZXRFbGVtZW50TmFtZShlbGVtZW50TmFtZSk7Ci0gICAgfQotCi0gICAgaWYgKHR5cGVOYW1lICE9IG51bGwpCi0gICAgewotICAgICAgcGFydC5zZXRUeXBlTmFtZSh0eXBlTmFtZSk7Ci0gICAgfQotCi0gICAgRWxlbWVudCB0ZW1wRWwgPSBET01VdGlscy5nZXRGaXJzdENoaWxkRWxlbWVudChwYXJ0RWwpOwotCi0gICAgd2hpbGUgKHRlbXBFbCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChRTmFtZVV0aWxzLm1hdGNoZXMoQ29uc3RhbnRzLlFfRUxFTV9ET0NVTUVOVEFUSU9OLCB0ZW1wRWwpKQotICAgICAgewotICAgICAgICBwYXJ0LnNldERvY3VtZW50YXRpb25FbGVtZW50KHRlbXBFbCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIFhNTCBWYWxpZGF0aW9uIHdpbGwgY2F0Y2ggdGhpcwotICAgICAgICBET01VdGlscy50aHJvd1dTRExFeGNlcHRpb24odGVtcEVsKTsKLSAgICAgIH0KLQotICAgICAgdGVtcEVsID0gRE9NVXRpbHMuZ2V0TmV4dFNpYmxpbmdFbGVtZW50KHRlbXBFbCk7Ci0gICAgfQotCi0gICAgTWFwIGV4dGVuc2lvbkF0dHJpYnV0ZXMgPSBwYXJ0LmdldEV4dGVuc2lvbkF0dHJpYnV0ZXMoKTsKLQotICAgIGV4dGVuc2lvbkF0dHJpYnV0ZXMucHV0QWxsKGdldFBhcnRBdHRyaWJ1dGVzKHBhcnRFbCwgZGVmKSk7Ci0KLSAgICAvLyBOZWVkIHRvIGRvIHNvbWV0aGluZyBoZXJlIHRvIGxvY2F0ZSBwYXJ0IGRlZmluaXRpb24uCi0KLSAgICAvLyBhZGQgdGhlIGxvY2F0aW9uIG9mIHRoaXMgZWxlbWVudCB0byBlbGVtZW50TG9jYXRpb25zIAotICAgIHNldExvY2F0aW9uKHBhcnQsIHBhcnRFbCk7Ci0KLSAgICByZXR1cm4gcGFydDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgYSBtYXAgb2YgdGhlIHBhcnQgYXR0cmlidXRlcy4KLSAgICogCi0gICAqIEBwYXJhbSBlbCBUaGUgcGFydCBhdHRyaWJ1dGVzIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBkZWYgVGhlIGRlZmludGlvbnMgZWxlbWVudC4KLSAgICogQHJldHVybiBBIG1hcCBjb250YWluaW5nIHRoZSBwYXJ0IGF0dHJpYnV0ZXMuCi0gICAqIEB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICAgKi8KLSAgcHJvdGVjdGVkIE1hcCBnZXRQYXJ0QXR0cmlidXRlcyhFbGVtZW50IGVsLCBEZWZpbml0aW9uIGRlZikgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIE1hcCBhdHRyaWJ1dGVzID0gbmV3IEhhc2hNYXAoKTsKLSAgICBOYW1lZE5vZGVNYXAgbm9kZU1hcCA9IGVsLmdldEF0dHJpYnV0ZXMoKTsKLSAgICBpbnQgYXR0cyA9IG5vZGVNYXAuZ2V0TGVuZ3RoKCk7Ci0KLSAgICBmb3IgKGludCBhID0gMDsgYSA8IGF0dHM7IGErKykKLSAgICB7Ci0gICAgICBBdHRyIGF0dHJpYnV0ZSA9IChBdHRyKW5vZGVNYXAuaXRlbShhKTsKLSAgICAgIFN0cmluZyBsTmFtZSA9IGF0dHJpYnV0ZS5nZXRMb2NhbE5hbWUoKTsKLSAgICAgIFN0cmluZyBuU3BhY2UgPSBhdHRyaWJ1dGUuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICBTdHJpbmcgcHJlZml4ID0gYXR0cmlidXRlLmdldFByZWZpeCgpOwotICAgICAgUU5hbWUgbmFtZSA9IG5ldyBRTmFtZShuU3BhY2UsIGxOYW1lKTsKLQotICAgICAgaWYgKG5TcGFjZSAhPSBudWxsICYmICFuU3BhY2UuZXF1YWxzKENvbnN0YW50cy5OU19VUklfV1NETCkpCi0gICAgICB7Ci0gICAgICAgIGlmICghblNwYWNlLmVxdWFscyhDb25zdGFudHMuTlNfVVJJX1hNTE5TKSkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBzdHJWYWx1ZSA9IGF0dHJpYnV0ZS5nZXRWYWx1ZSgpOwotICAgICAgICAgIFFOYW1lIHFWYWx1ZSA9IG51bGw7Ci0KLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBxVmFsdWUgPSBET01VdGlscy5nZXRRTmFtZShzdHJWYWx1ZSwgZWwpOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCAoV1NETEV4Y2VwdGlvbiBlKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHFWYWx1ZSA9IG5ldyBRTmFtZShzdHJWYWx1ZSk7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgYXR0cmlidXRlcy5wdXQobmFtZSwgcVZhbHVlKTsKLQotICAgICAgICAgIFN0cmluZyB0ZW1wTlNVcmkgPSBkZWYuZ2V0TmFtZXNwYWNlKHByZWZpeCk7Ci0KLSAgICAgICAgICB3aGlsZSAodGVtcE5TVXJpICE9IG51bGwgJiYgIXRlbXBOU1VyaS5lcXVhbHMoblNwYWNlKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBwcmVmaXggKz0gIl8iOwotICAgICAgICAgICAgdGVtcE5TVXJpID0gZGVmLmdldE5hbWVzcGFjZShwcmVmaXgpOwotICAgICAgICAgIH0KLQotICAgICAgICAgIGRlZi5hZGROYW1lc3BhY2UocHJlZml4LCBuU3BhY2UpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmICgKLSAgICAgICAgIWxOYW1lLmVxdWFscyhDb25zdGFudHMuQVRUUl9OQU1FKQotICAgICAgICAgICYmICFsTmFtZS5lcXVhbHMoQ29uc3RhbnRzLkFUVFJfRUxFTUVOVCkKLSAgICAgICAgICAmJiAhbE5hbWUuZXF1YWxzKENvbnN0YW50cy5BVFRSX1RZUEUpKQotICAgICAgewotICAgICAgICBXU0RMRXhjZXB0aW9uIHdzZGxFeGMgPQotICAgICAgICAgIG5ldyBXU0RMRXhjZXB0aW9uKAotICAgICAgICAgICAgV1NETEV4Y2VwdGlvbi5JTlZBTElEX1dTREwsCi0gICAgICAgICAgICAiRW5jb3VudGVyZWQgaWxsZWdhbCAiCi0gICAgICAgICAgICAgICsgInBhcnQgZXh0ZW5zaW9uICIKLSAgICAgICAgICAgICAgKyAiYXR0cmlidXRlICciCi0gICAgICAgICAgICAgICsgbmFtZQotICAgICAgICAgICAgICArICInLiBFeHRlbnNpb24gIgotICAgICAgICAgICAgICArICJhdHRyaWJ1dGVzIG11c3QgYmUgaW4gIgotICAgICAgICAgICAgICArICJhIG5hbWVzcGFjZSBvdGhlciB0aGFuICIKLSAgICAgICAgICAgICAgKyAiV1NETCdzLiIpOwotCi0gICAgICAgIHdzZGxFeGMuc2V0TG9jYXRpb24oWFBhdGhVdGlscy5nZXRYUGF0aEV4cHJGcm9tTm9kZShlbCkpOwotICAgICAgICAvL3Rocm93IHdzZGxFeGM7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gYWRkIHRoZSBsb2NhdGlvbiBvZiB0aGlzIGVsZW1lbnQgdG8gZWxlbWVudExvY2F0aW9ucyAKLSAgICBzZXRMb2NhdGlvbihhdHRyaWJ1dGVzLCBlbCk7Ci0KLSAgICByZXR1cm4gYXR0cmlidXRlczsKLSAgfQotCi0gIC8qKgotICAgKiBQYXJzZSBhIHNwZWNpZmljIHBvcnRUeXBlIGVsZW1lbnQuCi0gICAqIAotICAgKiBAcGFyYW0gcG9ydFR5cGVFbCBUaGUgcG9ydFR5cGUgZWxlbWVudC4KLSAgICogQHBhcmFtIGRlZiBUaGUgZGVmaW50aW9ucyBlbGVtZW50LgotICAgKiBAcmV0dXJuIEEgV1NETCBwb3J0VHlwZSBlbGVtZW50LgotICAgKiBAdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgICovCi0gIHByb3RlY3RlZCBQb3J0VHlwZSBwYXJzZVBvcnRUeXBlKEVsZW1lbnQgcG9ydFR5cGVFbCwgRGVmaW5pdGlvbiBkZWYpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLQotICAgIFBvcnRUeXBlIHBvcnRUeXBlID0gbnVsbDsKLSAgICBTdHJpbmcgbmFtZSA9IERPTVV0aWxzLmdldEF0dHJpYnV0ZShwb3J0VHlwZUVsLCBDb25zdGFudHMuQVRUUl9OQU1FKTsKLQotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgewotICAgICAgUU5hbWUgcG9ydFR5cGVOYW1lID0gbmV3IFFOYW1lKGRlZi5nZXRUYXJnZXROYW1lc3BhY2UoKSwgbmFtZSk7Ci0KLSAgICAgIHBvcnRUeXBlID0gZGVmLmdldFBvcnRUeXBlKHBvcnRUeXBlTmFtZSk7Ci0KLSAgICAgIGlmIChwb3J0VHlwZSA9PSBudWxsKQotICAgICAgewotICAgICAgICBwb3J0VHlwZSA9IGRlZi5jcmVhdGVQb3J0VHlwZSgpOwotICAgICAgICBwb3J0VHlwZS5zZXRRTmFtZShwb3J0VHlwZU5hbWUpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoIXBvcnRUeXBlLmlzVW5kZWZpbmVkKCkpCi0gICAgICB7Ci0gICAgICAgIC8vIGlmIHRoZSBQb3J0VHlwZSBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQgcHJvZHVjZSBhbiBlcnJvciBhbmQgcmV0dXJuIG51bGwKLSAgICAgICAgYWRkUmVhZGVyRXJyb3IoCi0gICAgICAgICAgZGVmLAotICAgICAgICAgIHBvcnRUeXBlRWwsCi0gICAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoIl9QT1JUVFlQRV9OQU1FX0FMUkVBRFlfREVGSU5FRCIsICInIiArIHBvcnRUeXBlLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkgKyAiJyIpKTsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBwb3J0VHlwZSA9IGRlZi5jcmVhdGVQb3J0VHlwZSgpOwotICAgIH0KLQotICAgIC8vIFdoZXRoZXIgaXQgd2FzIHJldHJpZXZlZCBvciBjcmVhdGVkLCB0aGUgZGVmaW5pdGlvbiBoYXMgYmVlbiBmb3VuZC4KLSAgICBwb3J0VHlwZS5zZXRVbmRlZmluZWQoZmFsc2UpOwotCi0gICAgRWxlbWVudCB0ZW1wRWwgPSBET01VdGlscy5nZXRGaXJzdENoaWxkRWxlbWVudChwb3J0VHlwZUVsKTsKLQotICAgIHdoaWxlICh0ZW1wRWwgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fRE9DVU1FTlRBVElPTiwgdGVtcEVsKSkKLSAgICAgIHsKLSAgICAgICAgcG9ydFR5cGUuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQodGVtcEVsKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX09QRVJBVElPTiwgdGVtcEVsKSkKLSAgICAgIHsKLSAgICAgICAgLy8gbW9kaWZpZWQgc28gZHVwbGljYXRlIG9wZXJhdGlvbnMgd2lsbCBub3QgYmUgYWRkZWQgdG8gcG9ydHR5cGUgCi0gICAgICAgIE9wZXJhdGlvbiBvcCA9IHBhcnNlT3BlcmF0aW9uKHRlbXBFbCwgcG9ydFR5cGUsIGRlZik7Ci0gICAgICAgIGlmIChvcCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgcG9ydFR5cGUuYWRkT3BlcmF0aW9uKG9wKTsKLSAgICAgICAgfQotICAgICAgICAvL3BvcnRUeXBlLmFkZE9wZXJhdGlvbihwYXJzZU9wZXJhdGlvbih0ZW1wRWwsIHBvcnRUeXBlLCBkZWYpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gc29tZXRoaW5nIGVsc2UgdGhhdCBzaG91bGRuJ3QgYmUgaGVyZQotICAgICAgICAvLyBORUVEIFRPIEFERCBUTyBFUlJPUiBMSVNUCi0gICAgICAgIC8vRE9NVXRpbHMudGhyb3dXU0RMRXhjZXB0aW9uKHRlbXBFbCk7Ci0gICAgICB9Ci0KLSAgICAgIHRlbXBFbCA9IERPTVV0aWxzLmdldE5leHRTaWJsaW5nRWxlbWVudCh0ZW1wRWwpOwotICAgIH0KLQotICAgIC8vIGFkZCB0aGUgbG9jYXRpb24gb2YgdGhpcyBlbGVtZW50IHRvIGVsZW1lbnRMb2NhdGlvbnMgCi0gICAgc2V0TG9jYXRpb24ocG9ydFR5cGUsIHBvcnRUeXBlRWwpOwotCi0gICAgcmV0dXJuIHBvcnRUeXBlOwotICB9Ci0KLSAgLyoqCi0gICAqIFBhcnNlIGEgc3BlY2lmaWMgb3BlcmF0aW9uIGVsZW1lbnQuCi0gICAqIAotICAgKiBAcGFyYW0gb3BFbCBUaGUgb3BlcmF0aW9uIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBwb3J0VHlwZSBUaGUgcG9ydFR5cGUgZWxlbWVudC4KLSAgICogQHBhcmFtIGRlZiBUaGUgZGVmaW5pdGlvbnMgZWxlbWVudC4KLSAgICogQHJldHVybiBBIFdTREwgb3BlcmF0aW9uIGVsZW1lbnQuCi0gICAqIEB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICAgKi8KLSAgcHJvdGVjdGVkIE9wZXJhdGlvbiBwYXJzZU9wZXJhdGlvbihFbGVtZW50IG9wRWwsIFBvcnRUeXBlIHBvcnRUeXBlLCBEZWZpbml0aW9uIGRlZikgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIE9wZXJhdGlvbiBvcCA9IG51bGw7Ci0gICAgU3RyaW5nIG5hbWUgPSBET01VdGlscy5nZXRBdHRyaWJ1dGUob3BFbCwgQ29uc3RhbnRzLkFUVFJfTkFNRSk7Ci0gICAgU3RyaW5nIHBhcmFtZXRlck9yZGVyU3RyID0gRE9NVXRpbHMuZ2V0QXR0cmlidXRlKG9wRWwsIENvbnN0YW50cy5BVFRSX1BBUkFNRVRFUl9PUkRFUik7Ci0gICAgRWxlbWVudCB0ZW1wRWwgPSBET01VdGlscy5nZXRGaXJzdENoaWxkRWxlbWVudChvcEVsKTsKLSAgICBMaXN0IG1lc3NhZ2VPcmRlciA9IG5ldyBWZWN0b3IoKTsKLSAgICBFbGVtZW50IGRvY0VsID0gbnVsbDsKLSAgICBJbnB1dCBpbnB1dCA9IG51bGw7Ci0gICAgT3V0cHV0IG91dHB1dCA9IG51bGw7Ci0gICAgTGlzdCBmYXVsdHMgPSBuZXcgVmVjdG9yKCk7Ci0KLSAgICB3aGlsZSAodGVtcEVsICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX0RPQ1VNRU5UQVRJT04sIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIGRvY0VsID0gdGVtcEVsOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fSU5QVVQsIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIGlucHV0ID0gcGFyc2VJbnB1dCh0ZW1wRWwsIGRlZik7Ci0gICAgICAgIG1lc3NhZ2VPcmRlci5hZGQoQ29uc3RhbnRzLkVMRU1fSU5QVVQpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fT1VUUFVULCB0ZW1wRWwpKQotICAgICAgewotICAgICAgICBvdXRwdXQgPSBwYXJzZU91dHB1dCh0ZW1wRWwsIGRlZik7Ci0gICAgICAgIG1lc3NhZ2VPcmRlci5hZGQoQ29uc3RhbnRzLkVMRU1fT1VUUFVUKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX0ZBVUxULCB0ZW1wRWwpKQotICAgICAgewotICAgICAgICBmYXVsdHMuYWRkKHBhcnNlRmF1bHQodGVtcEVsLCBkZWYpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gaW52YWxpZCBlbGVtZW50IGluIHRoZSBvcGVyYXRpb24KLSAgICAgICAgLy8gWE1MIGNoZWNrIHdpbGwgY2F0Y2ggdGhpcwotICAgICAgICBET01VdGlscy50aHJvd1dTRExFeGNlcHRpb24odGVtcEVsKTsKLSAgICAgIH0KLQotICAgICAgdGVtcEVsID0gRE9NVXRpbHMuZ2V0TmV4dFNpYmxpbmdFbGVtZW50KHRlbXBFbCk7Ci0gICAgfQotCi0gICAgaWYgKG5hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgaW5wdXROYW1lID0gKGlucHV0ICE9IG51bGwgPyBpbnB1dC5nZXROYW1lKCkgOiBudWxsKTsKLSAgICAgIFN0cmluZyBvdXRwdXROYW1lID0gKG91dHB1dCAhPSBudWxsID8gb3V0cHV0LmdldE5hbWUoKSA6IG51bGwpOwotCi0gICAgICBib29sZWFuIG9wRGVmaW5lZCA9IGZhbHNlOwotCi0gICAgICB0cnkKLSAgICAgIHsKLQotICAgICAgICAvL29wID0gcG9ydFR5cGUuZ2V0T3BlcmF0aW9uKG5hbWUsIGlucHV0TmFtZSwgb3V0cHV0TmFtZSk7Ci0KLSAgICAgICAgLy9PcGVyYXRpb24gb3AgPSBudWxsOwotICAgICAgICBMaXN0IG9wZXJhdGlvbnMgPSBwb3J0VHlwZS5nZXRPcGVyYXRpb25zKCk7Ci0gICAgICAgIGlmIChvcGVyYXRpb25zICE9IG51bGwpCi0gICAgICAgIHsKLQotICAgICAgICAgIEl0ZXJhdG9yIGlPcGVyYXRpb25zID0gb3BlcmF0aW9ucy5pdGVyYXRvcigpOwotICAgICAgICAgIHdoaWxlIChpT3BlcmF0aW9ucy5oYXNOZXh0KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgYm9vbGVhbiBpbnB1dE5hbWVzRXF1YWwgPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2xlYW4gb3V0cHV0TmFtZXNFcXVhbCA9IGZhbHNlOwotICAgICAgICAgICAgT3BlcmF0aW9uIG9wZXIgPSAoT3BlcmF0aW9uKWlPcGVyYXRpb25zLm5leHQoKTsKLSAgICAgICAgICAgIGlmIChvcGVyLmdldE5hbWUoKS5lcXVhbHMobmFtZSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIElucHV0IG9wSW5wdXQgPSBvcGVyLmdldElucHV0KCk7Ci0gICAgICAgICAgICAgIGlmIChvcElucHV0ICE9IG51bGwgJiYgaW5wdXQgIT0gbnVsbCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN0cmluZyBvcElucHV0TmFtZSA9IG9wSW5wdXQuZ2V0TmFtZSgpOwotICAgICAgICAgICAgICAgIGlmIChvcElucHV0TmFtZSAhPSBudWxsICYmIGlucHV0TmFtZSAhPSBudWxsICYmIG9wSW5wdXROYW1lLmVxdWFscyhpbnB1dE5hbWUpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGlucHV0TmFtZXNFcXVhbCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9wSW5wdXROYW1lID09IG51bGwgJiYgaW5wdXROYW1lID09IG51bGwpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgaW5wdXROYW1lc0VxdWFsID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZWxzZSBpZiAob3BJbnB1dCA9PSBudWxsICYmIGlucHV0ID09IG51bGwpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnB1dE5hbWVzRXF1YWwgPSB0cnVlOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIE91dHB1dCBvcE91dHB1dCA9IG9wZXIuZ2V0T3V0cHV0KCk7Ci0gICAgICAgICAgICAgIGlmIChvcE91dHB1dCAhPSBudWxsICYmIG91dHB1dCAhPSBudWxsKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIG9wT3V0cHV0TmFtZSA9IG9wT3V0cHV0LmdldE5hbWUoKTsKLSAgICAgICAgICAgICAgICBpZiAob3BPdXRwdXROYW1lICE9IG51bGwgJiYgb3V0cHV0TmFtZSAhPSBudWxsICYmIG9wT3V0cHV0TmFtZS5lcXVhbHMob3V0cHV0TmFtZSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgb3V0cHV0TmFtZXNFcXVhbCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9wT3V0cHV0TmFtZSA9PSBudWxsICYmIG91dHB1dE5hbWUgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBvdXRwdXROYW1lc0VxdWFsID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZWxzZSBpZiAob3BPdXRwdXQgPT0gbnVsbCAmJiBvdXRwdXQgPT0gbnVsbCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dHB1dE5hbWVzRXF1YWwgPSB0cnVlOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGlmIChpbnB1dE5hbWVzRXF1YWwgJiYgb3V0cHV0TmFtZXNFcXVhbCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG9wID0gb3BlcjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICBvcERlZmluZWQgPSB0cnVlOwotICAgICAgfQotCi0gICAgICBpZiAob3AgIT0gbnVsbCAvKiYmICFvcC5pc1VuZGVmaW5lZCgpKi8KLSAgICAgICAgKQotICAgICAgewotICAgICAgICAvL29wID0gbnVsbDsKLSAgICAgICAgb3BEZWZpbmVkID0gdHJ1ZTsKLQotICAgICAgfQotCi0gICAgICBpZiAob3AgIT0gbnVsbCAmJiAhb3BEZWZpbmVkKQotICAgICAgewotICAgICAgICBpZiAoaW5wdXROYW1lID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBJbnB1dCB0ZW1wSW4gPSBvcC5nZXRJbnB1dCgpOwotCi0gICAgICAgICAgaWYgKHRlbXBJbiAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICh0ZW1wSW4uZ2V0TmFtZSgpICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIC8vb3AgPSBudWxsOwotICAgICAgICAgICAgICBvcERlZmluZWQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAob3AgIT0gbnVsbCAmJiAhb3BEZWZpbmVkKQotICAgICAgewotICAgICAgICBpZiAob3V0cHV0TmFtZSA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgT3V0cHV0IHRlbXBPdXQgPSBvcC5nZXRPdXRwdXQoKTsKLQotICAgICAgICAgIGlmICh0ZW1wT3V0ICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKHRlbXBPdXQuZ2V0TmFtZSgpICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIC8vb3AgPSBudWxsOwotICAgICAgICAgICAgICBvcERlZmluZWQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAob3BEZWZpbmVkKQotICAgICAgewotICAgICAgICAvLyBpbnN0ZWFkIG9mIGNyZWF0aW5nIGEgbmV3IG9uZSB3aXRoIHRoZSBzYW1lIG5hbWUgd2UncmUgZ29pbmcgdG8gcmV0dXJuIG51bGwuCi0gICAgICAgIC8vIEFjY29yZGluZyB0byB0aGUgV1NETCAxLjIgd29ya2luZyBkcmFmdCBvcGVyYXRpb24gb3ZlcmxvYWRpbmcgaXMgbm8gbG9uZ2VyIGFsbG93ZWQuCi0gICAgICAgIC8vIEdvaW5nIHRvIHVzZSB0aGF0IGhlcmUgdG8gc2F2ZSBhIGxvdCBvZiB3b3JrCi0gICAgICAgIHNldExvY2F0aW9uKG9wLCBvcEVsKTsKLSAgICAgICAgYWRkUmVhZGVyRXJyb3IoCi0gICAgICAgICAgcG9ydFR5cGUsCi0gICAgICAgICAgb3AsCi0gICAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoCi0gICAgICAgICAgICAiX0RVUExJQ0FURV9PUEVSQVRJT05fRk9SX1BPUlRUWVBFIiwKLSAgICAgICAgICAgICInIiArIG9wLmdldE5hbWUoKSArICInIiwKLSAgICAgICAgICAgICInIiArIHBvcnRUeXBlLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkgKyAiJyIpKTsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0gICAgICBpZiAob3AgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgb3AgPSBkZWYuY3JlYXRlT3BlcmF0aW9uKCk7Ci0gICAgICAgIG9wLnNldE5hbWUobmFtZSk7Ci0KLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIG9wID0gZGVmLmNyZWF0ZU9wZXJhdGlvbigpOwotICAgIH0KLQotICAgIC8vIFdoZXRoZXIgaXQgd2FzIHJldHJpZXZlZCBvciBjcmVhdGVkLCB0aGUgZGVmaW5pdGlvbiBoYXMgYmVlbiBmb3VuZC4KLSAgICBvcC5zZXRVbmRlZmluZWQoZmFsc2UpOwotCi0gICAgaWYgKHBhcmFtZXRlck9yZGVyU3RyICE9IG51bGwpCi0gICAgewotICAgICAgb3Auc2V0UGFyYW1ldGVyT3JkZXJpbmcoU3RyaW5nVXRpbHMucGFyc2VOTVRva2VucyhwYXJhbWV0ZXJPcmRlclN0cikpOwotICAgIH0KLQotICAgIGlmIChkb2NFbCAhPSBudWxsKQotICAgIHsKLSAgICAgIG9wLnNldERvY3VtZW50YXRpb25FbGVtZW50KGRvY0VsKTsKLSAgICB9Ci0KLSAgICBpZiAoaW5wdXQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBvcC5zZXRJbnB1dChpbnB1dCk7Ci0gICAgfQotCi0gICAgaWYgKG91dHB1dCAhPSBudWxsKQotICAgIHsKLSAgICAgIG9wLnNldE91dHB1dChvdXRwdXQpOwotICAgIH0KLQotICAgIGlmIChmYXVsdHMuc2l6ZSgpID4gMCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBmYXVsdEl0ZXJhdG9yID0gZmF1bHRzLml0ZXJhdG9yKCk7Ci0KLSAgICAgIHdoaWxlIChmYXVsdEl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgRmF1bHQgZiA9IChGYXVsdClmYXVsdEl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgLy8gaWYgdGhlIGZhdWx0IGlzbid0IGRlZmluZWQgeWV0Ci0gICAgICAgIGlmIChvcC5nZXRGYXVsdChmLmdldE5hbWUoKSkgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIG9wLmFkZEZhdWx0KGYpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIGFkZFJlYWRlckVycm9yKAotICAgICAgICAgICAgb3AsCi0gICAgICAgICAgICBmLAotICAgICAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoIl9EVVBMSUNBVEVfRkFVTFRfTkFNRSIsICInIiArIGYuZ2V0TmFtZSgpICsgIiciLCAiJyIgKyBvcC5nZXROYW1lKCkgKyAiJyIpKTsKLSAgICAgICAgICAvL2ZhdWx0RXJyb3JzLmFkZChuZXcgT2JqZWN0W117ZiwiRHVwbGljYXRlIE5hbWUiLG9wfSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBPcGVyYXRpb25UeXBlIHN0eWxlID0gbnVsbDsKLQotICAgIGlmIChtZXNzYWdlT3JkZXIuZXF1YWxzKFNUWUxFX09ORV9XQVkpKQotICAgIHsKLSAgICAgIHN0eWxlID0gT3BlcmF0aW9uVHlwZS5PTkVfV0FZOwotICAgIH0KLSAgICBlbHNlIGlmIChtZXNzYWdlT3JkZXIuZXF1YWxzKFNUWUxFX1JFUVVFU1RfUkVTUE9OU0UpKQotICAgIHsKLSAgICAgIHN0eWxlID0gT3BlcmF0aW9uVHlwZS5SRVFVRVNUX1JFU1BPTlNFOwotICAgIH0KLSAgICBlbHNlIGlmIChtZXNzYWdlT3JkZXIuZXF1YWxzKFNUWUxFX1NPTElDSVRfUkVTUE9OU0UpKQotICAgIHsKLSAgICAgIHN0eWxlID0gT3BlcmF0aW9uVHlwZS5TT0xJQ0lUX1JFU1BPTlNFOwotICAgIH0KLSAgICBlbHNlIGlmIChtZXNzYWdlT3JkZXIuZXF1YWxzKFNUWUxFX05PVElGSUNBVElPTikpCi0gICAgewotICAgICAgc3R5bGUgPSBPcGVyYXRpb25UeXBlLk5PVElGSUNBVElPTjsKLSAgICB9Ci0KLSAgICBpZiAoc3R5bGUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBvcC5zZXRTdHlsZShzdHlsZSk7Ci0gICAgfQotCi0gICAgLy8gYWRkIHRoZSBsb2NhdGlvbiBvZiB0aGlzIGVsZW1lbnQgdG8gZWxlbWVudExvY2F0aW9ucyAKLSAgICBzZXRMb2NhdGlvbihvcCwgb3BFbCk7Ci0KLSAgICAvLyBtb2RpZmllZCB0byByZW1vdmUgZHVwbGljYXRlIG9wZXJhdGlvbnMKLSAgICAvLyAgICBpZihvcERlZmluZWQpCi0gICAgLy8gICAgewotICAgIC8vICAgICAgYWRkUmVhZGVyRXJyb3IocG9ydFR5cGUsb3AsVmFsaWRhdGVXU0RMUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0U3RyaW5nKCJfRFVQTElDQVRFX09QRVJBVElPTl9GT1JfUE9SVFRZUEUiLCInIitvcC5nZXROYW1lKCkrIiciLCInIitwb3J0VHlwZS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpKyInIikpOwotICAgIC8vICAgICAgcmV0dXJuIG51bGw7Ci0gICAgLy8gICAgfQotICAgIHJldHVybiBvcDsKLSAgfQotCi0gIC8qKgotICAgKiBQYXJzZSBhIHNwZWNpZmljIHNlcnZpY2UgZWxlbWVudC4KLSAgICogCi0gICAqIEBwYXJhbSBzZXJ2aWNlRWwgVGhlIHNlcnZpY2UgZWxlbWVudC4KLSAgICogQHBhcmFtIGRlZiBUaGUgZGVmaW50aW9ucyBlbGVtZW50LgotICAgKiBAcmV0dXJuIEEgV1NETCBzZXJ2aWNlIGVsZW1lbnQuCi0gICAqIEB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICAgKi8KLSAgcHJvdGVjdGVkIFNlcnZpY2UgcGFyc2VTZXJ2aWNlKEVsZW1lbnQgc2VydmljZUVsLCBEZWZpbml0aW9uIGRlZikgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIFNlcnZpY2Ugc2VydmljZSA9IGRlZi5jcmVhdGVTZXJ2aWNlKCk7Ci0gICAgU3RyaW5nIG5hbWUgPSBET01VdGlscy5nZXRBdHRyaWJ1dGUoc2VydmljZUVsLCBDb25zdGFudHMuQVRUUl9OQU1FKTsKLQotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgewotICAgICAgc2VydmljZS5zZXRRTmFtZShuZXcgUU5hbWUoZGVmLmdldFRhcmdldE5hbWVzcGFjZSgpLCBuYW1lKSk7Ci0gICAgfQotICAgIFNlcnZpY2UgczsKLSAgICAvLyBhIHNlcnZpY2Ugd2l0aCB0aGlzIG5hbWUgaGFzIGFscmVhZHkgYmVlbiBkZWZpbmVkCi0gICAgaWYgKChzID0gZGVmLmdldFNlcnZpY2Uoc2VydmljZS5nZXRRTmFtZSgpKSkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBhZGRSZWFkZXJFcnJvcigKLSAgICAgICAgZGVmLAotICAgICAgICBzZXJ2aWNlRWwsCi0gICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKCJfU0VSVklDRV9OQU1FX0FMUkVBRFlfREVGSU5FRCIsICInIiArIHMuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSArICInIikpOwotICAgICAgcmV0dXJuIHM7Ci0gICAgfQotICAgIEVsZW1lbnQgdGVtcEVsID0gRE9NVXRpbHMuZ2V0Rmlyc3RDaGlsZEVsZW1lbnQoc2VydmljZUVsKTsKLQotICAgIHdoaWxlICh0ZW1wRWwgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fRE9DVU1FTlRBVElPTiwgdGVtcEVsKSkKLSAgICAgIHsKLSAgICAgICAgc2VydmljZS5zZXREb2N1bWVudGF0aW9uRWxlbWVudCh0ZW1wRWwpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fUE9SVCwgdGVtcEVsKSkKLSAgICAgIHsKLSAgICAgICAgc2VydmljZS5hZGRQb3J0KHBhcnNlUG9ydCh0ZW1wRWwsIGRlZikpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBzZXJ2aWNlLmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KHBhcnNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoU2VydmljZS5jbGFzcywgdGVtcEVsLCBkZWYpKTsKLSAgICAgIH0KLQotICAgICAgdGVtcEVsID0gRE9NVXRpbHMuZ2V0TmV4dFNpYmxpbmdFbGVtZW50KHRlbXBFbCk7Ci0gICAgfQotCi0gICAgLy8gYWRkIHRoZSBsb2NhdGlvbiBvZiB0aGlzIGVsZW1lbnQgdG8gZWxlbWVudExvY2F0aW9ucyAKLSAgICBzZXRMb2NhdGlvbihzZXJ2aWNlLCBzZXJ2aWNlRWwpOwotCi0gICAgcmV0dXJuIHNlcnZpY2U7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBQYXJzZSBhIHNwZWNpZmljIHBvcnQgZWxlbWVudC4KLSAgICogCi0gICAqIEBwYXJhbSBwb3J0RWwgVGhlIHBvcnQgZWxlbWVudC4KLSAgICogQHBhcmFtIGRlZiBUaGUgZGVmaW5pdGlvbnMgZWxlbWVudC4KLSAgICogQHJldHVybiBBIFdTREwgcG9ydCBlbGVtZW50LgotICAgKiBAdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgICovCi0gIHByb3RlY3RlZCBQb3J0IHBhcnNlUG9ydChFbGVtZW50IHBvcnRFbCwgRGVmaW5pdGlvbiBkZWYpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBQb3J0IHBvcnQgPSBkZWYuY3JlYXRlUG9ydCgpOwotICAgIFN0cmluZyBuYW1lID0gRE9NVXRpbHMuZ2V0QXR0cmlidXRlKHBvcnRFbCwgQ29uc3RhbnRzLkFUVFJfTkFNRSk7Ci0gICAgUU5hbWUgYmluZGluZ1N0cjsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBiaW5kaW5nU3RyID0gRE9NVXRpbHMuZ2V0UXVhbGlmaWVkQXR0cmlidXRlVmFsdWUocG9ydEVsLCBDb25zdGFudHMuQVRUUl9CSU5ESU5HLCBDb25zdGFudHMuRUxFTV9QT1JULCBmYWxzZSk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvL3RoZSBjYWxsIGFib3ZlIGZhaWxzIGlmIHRoZXJlIGlzIG5vIHF1YWxpZmllZCBuYW1lc3BhY2UgZm9yIHRoZSBtZXNzYWdlIG5hbWUKLSAgICAgIGJpbmRpbmdTdHIgPSBuZXcgUU5hbWUobnVsbCwgRE9NVXRpbHMuZ2V0QXR0cmlidXRlKHBvcnRFbCwgImJpbmRpbmciKSk7Ci0gICAgfQotCi0gICAgaWYgKG5hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwb3J0LnNldE5hbWUobmFtZSk7Ci0gICAgfQotCi0gICAgaWYgKGJpbmRpbmdTdHIgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBCaW5kaW5nIGJpbmRpbmcgPSBkZWYuZ2V0QmluZGluZyhiaW5kaW5nU3RyKTsKLQotICAgICAgaWYgKGJpbmRpbmcgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgYmluZGluZyA9IGRlZi5jcmVhdGVCaW5kaW5nKCk7Ci0gICAgICAgIGJpbmRpbmcuc2V0UU5hbWUoYmluZGluZ1N0cik7Ci0gICAgICAgIGRlZi5hZGRCaW5kaW5nKGJpbmRpbmcpOwotICAgICAgfQotCi0gICAgICBwb3J0LnNldEJpbmRpbmcoYmluZGluZyk7Ci0gICAgfQotCi0gICAgRWxlbWVudCB0ZW1wRWwgPSBET01VdGlscy5nZXRGaXJzdENoaWxkRWxlbWVudChwb3J0RWwpOwotCi0gICAgd2hpbGUgKHRlbXBFbCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChRTmFtZVV0aWxzLm1hdGNoZXMoQ29uc3RhbnRzLlFfRUxFTV9ET0NVTUVOVEFUSU9OLCB0ZW1wRWwpKQotICAgICAgewotICAgICAgICBwb3J0LnNldERvY3VtZW50YXRpb25FbGVtZW50KHRlbXBFbCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHBvcnQuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQocGFyc2VFeHRlbnNpYmlsaXR5RWxlbWVudChQb3J0LmNsYXNzLCB0ZW1wRWwsIGRlZikpOwotICAgICAgfQotCi0gICAgICB0ZW1wRWwgPSBET01VdGlscy5nZXROZXh0U2libGluZ0VsZW1lbnQodGVtcEVsKTsKLSAgICB9Ci0KLSAgICAvLyBhZGQgdGhlIGxvY2F0aW9uIG9mIHRoaXMgZWxlbWVudCB0byBlbGVtZW50TG9jYXRpb25zIAotICAgIHNldExvY2F0aW9uKHBvcnQsIHBvcnRFbCk7Ci0KLSAgICByZXR1cm4gcG9ydDsKLSAgfQotCi0gIC8qKgotICAgKiBQYXJzZSBhIHNwZWNpZmljIGV4dGVuc2liaWxpdHkgZWxlbWVudC4KLSAgICogCi0gICAqIEBwYXJhbSBwYXJlbnRUeXBlIFRoZSBwYXJlbnQgdHlwZSBvZiB0aGUgZXh0ZW5zaWJpbGl0eSBlbGVtZW50LgotICAgKiBAcGFyYW0gZWwgVGhlIGV4dGVuc2liaWxpdHkgZWxlbWVudC4KLSAgICogQHBhcmFtIGRlZiBUaGUgZGVmaW5pdGlvbnMgZWxlbWVudC4KLSAgICogQHJldHVybiBBIFdTREwgZXh0ZW5zaWJpbGl0eSBlbGVtZW50LgotICAgKiBAdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgICovCi0gIHByb3RlY3RlZCBFeHRlbnNpYmlsaXR5RWxlbWVudCBwYXJzZUV4dGVuc2liaWxpdHlFbGVtZW50KENsYXNzIHBhcmVudFR5cGUsIEVsZW1lbnQgZWwsIERlZmluaXRpb24gZGVmKQotICAgIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBRTmFtZSBlbGVtZW50VHlwZSA9IFFOYW1lVXRpbHMubmV3UU5hbWUoZWwpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgRXh0ZW5zaW9uUmVnaXN0cnkgZXh0UmVnID0gZGVmLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0KLSAgICAgIGlmIChleHRSZWcgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IFdTRExFeGNlcHRpb24oCi0gICAgICAgICAgV1NETEV4Y2VwdGlvbi5DT05GSUdVUkFUSU9OX0VSUk9SLAotICAgICAgICAgICJObyBFeHRlbnNpb25SZWdpc3RyeSBzZXQgZm9yIHRoaXMgIgotICAgICAgICAgICAgKyAiRGVmaW5pdGlvbiwgc28gdW5hYmxlIHRvIGRlc2VyaWFsaXplICIKLSAgICAgICAgICAgICsgImEgJyIKLSAgICAgICAgICAgICsgZWxlbWVudFR5cGUKLSAgICAgICAgICAgICsgIicgZWxlbWVudCBpbiB0aGUgIgotICAgICAgICAgICAgKyAiY29udGV4dCBvZiBhICciCi0gICAgICAgICAgICArIHBhcmVudFR5cGUuZ2V0TmFtZSgpCi0gICAgICAgICAgICArICInLiIpOwotICAgICAgfQotCi0gICAgICBFeHRlbnNpb25EZXNlcmlhbGl6ZXIgZXh0RFMgPSBleHRSZWcucXVlcnlEZXNlcmlhbGl6ZXIocGFyZW50VHlwZSwgZWxlbWVudFR5cGUpOwotCi0gICAgICAvLyBhc2lnbiB0aGUgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgdG8gYSB2YXIgc28gd2UgY2FuIGFkZCBpdCB0byB0aGUgbG9jYXRpb25zCi0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtID0gZXh0RFMudW5tYXJzaGFsbChwYXJlbnRUeXBlLCBlbGVtZW50VHlwZSwgZWwsIGRlZiwgZXh0UmVnKTsKLSAgICAgIC8vIGFkZCB0aGUgbG9jYXRpb24gb2YgdGhpcyBlbGVtZW50IHRvIGVsZW1lbnRMb2NhdGlvbnMgCi0gICAgICAvLyB0aGlzIG1pZ2h0IG5vdCB3b3JrIHByb3Blcmx5Ci0gICAgICBzZXRMb2NhdGlvbihleHRFbGVtLCBlbCk7Ci0KLSAgICAgIC8vIHJlZ2lzdGVyIGFsbCBvZiB0aGUgY2hpbGQgRWxlbWVudHMgc28gd2UgY2FuIGZpbmQgdGhlbSBsYXRlcgotICAgICAgLy8gdXNlZCBmb3IgaW5saW5lIHNjaGVtYSB2YWxpZGF0aW9uCi0gICAgICByZWdpc3RlckNoaWxkRWxlbWVudHMoZXh0RWxlbSk7Ci0KLSAgICAgIHJldHVybiBleHRFbGVtOwotICAgIH0KLSAgICBjYXRjaCAoV1NETEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGlmIChlLmdldExvY2F0aW9uKCkgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZS5zZXRMb2NhdGlvbihYUGF0aFV0aWxzLmdldFhQYXRoRXhwckZyb21Ob2RlKGVsKSk7Ci0gICAgICB9Ci0gICAgICB0aHJvdyBlOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBQYXJzZSBhIHNwZWNpZmljIGlucHV0IGVsZW1lbnQuCi0gICAqIAotICAgKiBAcGFyYW0gaW5wdXRFbCBUaGUgaW5wdXQgZWxlbWVudC4KLSAgICogQHBhcmFtIGRlZiBUaGUgZGVmaW50aW9ucyBlbGVtZW50LgotICAgKiBAcmV0dXJuIEEgV1NETCBpbnB1dCBlbGVtZW50LgotICAgKiBAdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgICovCi0gIHByb3RlY3RlZCBJbnB1dCBwYXJzZUlucHV0KEVsZW1lbnQgaW5wdXRFbCwgRGVmaW5pdGlvbiBkZWYpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLQotICAgIElucHV0IGlucHV0ID0gZGVmLmNyZWF0ZUlucHV0KCk7Ci0gICAgU3RyaW5nIG5hbWUgPSBET01VdGlscy5nZXRBdHRyaWJ1dGUoaW5wdXRFbCwgQ29uc3RhbnRzLkFUVFJfTkFNRSk7Ci0gICAgUU5hbWUgbWVzc2FnZU5hbWUgPSBudWxsOwotICAgIHRyeQotICAgIHsKLSAgICAgIG1lc3NhZ2VOYW1lID0gRE9NVXRpbHMuZ2V0UXVhbGlmaWVkQXR0cmlidXRlVmFsdWUoaW5wdXRFbCwgQ29uc3RhbnRzLkFUVFJfTUVTU0FHRSwgQ29uc3RhbnRzLkVMRU1fSU5QVVQsIGZhbHNlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vdGhlIGNhbGwgYWJvdmUgZmFpbHMgaWYgdGhlcmUgaXMgbm8gcXVhbGlmaWVkIG5hbWVzcGFjZSBmb3IgdGhlIG1lc3NhZ2UgbmFtZQotICAgICAgbWVzc2FnZU5hbWUgPSBuZXcgUU5hbWUobnVsbCwgRE9NVXRpbHMuZ2V0QXR0cmlidXRlKGlucHV0RWwsICJtZXNzYWdlIikpOwotICAgIH0KLQotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgewotICAgICAgaW5wdXQuc2V0TmFtZShuYW1lKTsKLSAgICB9Ci0KLSAgICBpZiAobWVzc2FnZU5hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBNZXNzYWdlIG1lc3NhZ2UgPSBkZWYuZ2V0TWVzc2FnZShtZXNzYWdlTmFtZSk7Ci0KLSAgICAgIGlmIChtZXNzYWdlID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIG1lc3NhZ2UgPSBkZWYuY3JlYXRlTWVzc2FnZSgpOwotICAgICAgICBtZXNzYWdlLnNldFFOYW1lKG1lc3NhZ2VOYW1lKTsKLSAgICAgICAgZGVmLmFkZE1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgICB9Ci0KLSAgICAgIGlucHV0LnNldE1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgfQotCi0gICAgRWxlbWVudCB0ZW1wRWwgPSBET01VdGlscy5nZXRGaXJzdENoaWxkRWxlbWVudChpbnB1dEVsKTsKLQotICAgIHdoaWxlICh0ZW1wRWwgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fRE9DVU1FTlRBVElPTiwgdGVtcEVsKSkKLSAgICAgIHsKLSAgICAgICAgaW5wdXQuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQodGVtcEVsKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gWE1MIFZhbGlkYXRpb24gd2lsbCBjYXRjaCB0aGlzCi0gICAgICAgIERPTVV0aWxzLnRocm93V1NETEV4Y2VwdGlvbih0ZW1wRWwpOwotICAgICAgfQotCi0gICAgICB0ZW1wRWwgPSBET01VdGlscy5nZXROZXh0U2libGluZ0VsZW1lbnQodGVtcEVsKTsKLSAgICB9Ci0KLSAgICAvLyBhZGQgdGhlIGxvY2F0aW9uIG9mIHRoaXMgZWxlbWVudCB0byBlbGVtZW50TG9jYXRpb25zIAotICAgIHNldExvY2F0aW9uKGlucHV0LCBpbnB1dEVsKTsKLQotICAgIHJldHVybiBpbnB1dDsKLSAgfQotCi0gIC8qKgotICAgKiBQYXJzZSBhIHNwZWNpZmljIG91dHB1dCBlbGVtZW50LgotICAgKiAKLSAgICogQHBhcmFtIG91dHB1dEVsIFRoZSBvdXRwdXQgZWxlbWVudC4KLSAgICogQHBhcmFtIGRlZiBUaGUgZGVmaW50aW9ucyBlbGVtZW50LgotICAgKiBAcmV0dXJuIEEgV1NETCBvdXRwdXQgZWxlbWVudC4KLSAgICogQHRocm93cyBXU0RMRXhjZXB0aW9uCi0gICAqLwotICBwcm90ZWN0ZWQgT3V0cHV0IHBhcnNlT3V0cHV0KEVsZW1lbnQgb3V0cHV0RWwsIERlZmluaXRpb24gZGVmKSB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgT3V0cHV0IG91dHB1dCA9IGRlZi5jcmVhdGVPdXRwdXQoKTsKLSAgICBTdHJpbmcgbmFtZSA9IERPTVV0aWxzLmdldEF0dHJpYnV0ZShvdXRwdXRFbCwgQ29uc3RhbnRzLkFUVFJfTkFNRSk7Ci0gICAgUU5hbWUgbWVzc2FnZU5hbWUgPSBudWxsOwotICAgIHRyeQotICAgIHsKLSAgICAgIG1lc3NhZ2VOYW1lID0gRE9NVXRpbHMuZ2V0UXVhbGlmaWVkQXR0cmlidXRlVmFsdWUob3V0cHV0RWwsIENvbnN0YW50cy5BVFRSX01FU1NBR0UsIENvbnN0YW50cy5FTEVNX09VVFBVVCwgZmFsc2UpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy90aGUgY2FsbCBhYm92ZSBmYWlscyBpZiB0aGVyZSBpcyBubyBxdWFsaWZpZWQgbmFtZXNwYWNlIGZvciB0aGUgbWVzc2FnZSBuYW1lCi0gICAgICBtZXNzYWdlTmFtZSA9IG5ldyBRTmFtZShudWxsLCBET01VdGlscy5nZXRBdHRyaWJ1dGUob3V0cHV0RWwsICJtZXNzYWdlIikpOwotICAgIH0KLQotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgewotICAgICAgb3V0cHV0LnNldE5hbWUobmFtZSk7Ci0gICAgfQotCi0gICAgaWYgKG1lc3NhZ2VOYW1lICE9IG51bGwpCi0gICAgewotICAgICAgTWVzc2FnZSBtZXNzYWdlID0gZGVmLmdldE1lc3NhZ2UobWVzc2FnZU5hbWUpOwotCi0gICAgICBpZiAobWVzc2FnZSA9PSBudWxsKQotICAgICAgewotICAgICAgICBtZXNzYWdlID0gZGVmLmNyZWF0ZU1lc3NhZ2UoKTsKLSAgICAgICAgbWVzc2FnZS5zZXRRTmFtZShtZXNzYWdlTmFtZSk7Ci0gICAgICAgIGRlZi5hZGRNZXNzYWdlKG1lc3NhZ2UpOwotICAgICAgfQotCi0gICAgICBvdXRwdXQuc2V0TWVzc2FnZShtZXNzYWdlKTsKLSAgICB9Ci0KLSAgICBFbGVtZW50IHRlbXBFbCA9IERPTVV0aWxzLmdldEZpcnN0Q2hpbGRFbGVtZW50KG91dHB1dEVsKTsKLQotICAgIHdoaWxlICh0ZW1wRWwgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fRE9DVU1FTlRBVElPTiwgdGVtcEVsKSkKLSAgICAgIHsKLSAgICAgICAgb3V0cHV0LnNldERvY3VtZW50YXRpb25FbGVtZW50KHRlbXBFbCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIFhNTCBWYWxpZGF0aW9uIHdpbGwgY2F0Y2ggdGhpcwotICAgICAgICBET01VdGlscy50aHJvd1dTRExFeGNlcHRpb24odGVtcEVsKTsKLSAgICAgIH0KLQotICAgICAgdGVtcEVsID0gRE9NVXRpbHMuZ2V0TmV4dFNpYmxpbmdFbGVtZW50KHRlbXBFbCk7Ci0gICAgfQotCi0gICAgLy8gYWRkIHRoZSBsb2NhdGlvbiBvZiB0aGlzIGVsZW1lbnQgdG8gZWxlbWVudExvY2F0aW9ucyAKLSAgICBzZXRMb2NhdGlvbihvdXRwdXQsIG91dHB1dEVsKTsKLQotICAgIHJldHVybiBvdXRwdXQ7Ci0gIH0KLQotICAvKioKLSAgICogUGFyc2UgYSBzcGVjaWZpYyBmYXVsdCBlbGVtZW50LgotICAgKiAKLSAgICogQHBhcmFtIGZhdWx0RWwgVGhlIGZhdWx0IGVsZW1lbnQgdG8gcGFyc2UuCi0gICAqIEBwYXJhbSBkZWYgVGhlIGRlZmluaXRpb25zIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gQSBXU0RMIGZhdWx0IGVsZW1lbnQuCi0gICAqIEB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICAgKi8KLSAgcHJvdGVjdGVkIEZhdWx0IHBhcnNlRmF1bHQoRWxlbWVudCBmYXVsdEVsLCBEZWZpbml0aW9uIGRlZikgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIEZhdWx0IGZhdWx0ID0gZGVmLmNyZWF0ZUZhdWx0KCk7Ci0gICAgU3RyaW5nIG5hbWUgPSBET01VdGlscy5nZXRBdHRyaWJ1dGUoZmF1bHRFbCwgQ29uc3RhbnRzLkFUVFJfTkFNRSk7Ci0gICAgUU5hbWUgbWVzc2FnZU5hbWUgPSBudWxsOwotICAgIHRyeQotICAgIHsKLSAgICAgIG1lc3NhZ2VOYW1lID0gRE9NVXRpbHMuZ2V0UXVhbGlmaWVkQXR0cmlidXRlVmFsdWUoZmF1bHRFbCwgQ29uc3RhbnRzLkFUVFJfTUVTU0FHRSwgQ29uc3RhbnRzLkVMRU1fSU5QVVQsIGZhbHNlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vdGhlIGNhbGwgYWJvdmUgZmFpbHMgaWYgdGhlcmUgaXMgbm8gcXVhbGlmaWVkIG5hbWVzcGFjZSBmb3IgdGhlIG1lc3NhZ2UgbmFtZQotICAgICAgbWVzc2FnZU5hbWUgPSBuZXcgUU5hbWUobnVsbCwgRE9NVXRpbHMuZ2V0QXR0cmlidXRlKGZhdWx0RWwsICJtZXNzYWdlIikpOwotICAgIH0KLQotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgewotICAgICAgZmF1bHQuc2V0TmFtZShuYW1lKTsKLSAgICB9Ci0KLSAgICBpZiAobWVzc2FnZU5hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBNZXNzYWdlIG1lc3NhZ2UgPSBkZWYuZ2V0TWVzc2FnZShtZXNzYWdlTmFtZSk7Ci0KLSAgICAgIGlmIChtZXNzYWdlID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIG1lc3NhZ2UgPSBkZWYuY3JlYXRlTWVzc2FnZSgpOwotICAgICAgICBtZXNzYWdlLnNldFFOYW1lKG1lc3NhZ2VOYW1lKTsKLSAgICAgICAgZGVmLmFkZE1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgICB9Ci0KLSAgICAgIGZhdWx0LnNldE1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgfQotCi0gICAgRWxlbWVudCB0ZW1wRWwgPSBET01VdGlscy5nZXRGaXJzdENoaWxkRWxlbWVudChmYXVsdEVsKTsKLQotICAgIHdoaWxlICh0ZW1wRWwgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fRE9DVU1FTlRBVElPTiwgdGVtcEVsKSkKLSAgICAgIHsKLSAgICAgICAgZmF1bHQuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQodGVtcEVsKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gWE1MIFZhbGlkYXRpb24gd2lsbCBjYXRjaCB0aGlzCi0gICAgICAgIERPTVV0aWxzLnRocm93V1NETEV4Y2VwdGlvbih0ZW1wRWwpOwotICAgICAgfQotCi0gICAgICB0ZW1wRWwgPSBET01VdGlscy5nZXROZXh0U2libGluZ0VsZW1lbnQodGVtcEVsKTsKLSAgICB9Ci0KLSAgICAvLyBhZGQgdGhlIGxvY2F0aW9uIG9mIHRoaXMgZWxlbWVudCB0byBlbGVtZW50TG9jYXRpb25zIAotICAgIHNldExvY2F0aW9uKGZhdWx0LCBmYXVsdEVsKTsKLQotICAgIHJldHVybiBmYXVsdDsKLSAgfQotICAKLSAgLyoqCi0gICAqIFNldCB0aGUgbWVzc2FnZWdlbmVyYXRvciBmb3IgdGhlIHJlYWRlci4KLSAgICogCi0gICAqIEBwYXJhbSBtZyBUaGUgbWVzc2FnZSBnZW5lcmF0b3IgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TWVzc2FnZUdlbmVyYXRvcihNZXNzYWdlR2VuZXJhdG9yIG1nKQotICB7Ci0gICAgbWVzc2FnZWdlbmVyYXRvciA9IG1nOwotICB9Ci0KLSAgLyoqCi0gICAqIEFkZCB0aGUgcmVmT2JqZWN0IHRvIHRoZSBlbGVtZW50TG9jYXRpb24gaGFzaHRhYmxlIHdpdGggdGhlIGxvY2F0aW9uIGRlZmluZWQgaW4gZWxlbWVudC4KLSAgICogCi0gICAqIEBwYXJhbSByZWZPYmplY3QgVGhlIG9iamVjdCB0byBhZGQuCi0gICAqIEBwYXJhbSBlbGVtZW50IFRoZSBlbGVtZW50IHRoYXQgY29udGFpbnMgdGhlIGxvY2F0aW9uIGluZm9ybWF0aW9uLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc2V0TG9jYXRpb24oT2JqZWN0IHJlZk9iamVjdCwgRWxlbWVudCBlbGVtZW50KQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRWxlbWVudEltcGwgZWxlbWVudEltcGwgPSAoRWxlbWVudEltcGwpZWxlbWVudDsKLSAgICAgIEVsZW1lbnRMb2NhdGlvbiBlbGVtZW50TG9jYXRpb24gPSAoRWxlbWVudExvY2F0aW9uKWVsZW1lbnRJbXBsLmdldFVzZXJEYXRhKCk7Ci0gICAgICBpZiAoZWxlbWVudExvY2F0aW9uICE9IG51bGwpCi0gICAgICB7Ci0KLSAgICAgICAgZWxlbWVudExvY2F0aW9ucy5wdXQoCi0gICAgICAgICAgcmVmT2JqZWN0LAotICAgICAgICAgIG5ldyBMb2NhdGlvbkhvbGRlcihlbGVtZW50TG9jYXRpb24uZ2V0TGluZU51bWJlcigpLCBlbGVtZW50TG9jYXRpb24uZ2V0Q29sdW1uTnVtYmVyKCksIGRlZi5nZXREb2N1bWVudEJhc2VVUkkoKSkpOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoQ2xhc3NDYXN0RXhjZXB0aW9uIGUpCi0gICAgewotICAgIH0KLSAgfQotICAvKioKLSAgICogQWRkIGEgcmVhZGVyIGVycm9yIHRvIHRoZSBsaXN0LgotICAgKiAKLSAgICogQHBhcmFtIHBhcmVudG9iamVjdCBUaGUgcGFyZW50IG9iamVjdCBvZiB0aGUgb2JqZWN0IHdpdGggdGhlIGVycm9yLgotICAgKiBAcGFyYW0gb2JqZWN0IFRoZSBvYmplY3Qgd2l0aCB0aGUgZXJyb3IuCi0gICAqIEBwYXJhbSBlcnJvciBUaGUgZXJyb3IgbWVzc2FnZS4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGFkZFJlYWRlckVycm9yKE9iamVjdCBwYXJlbnRvYmplY3QsIE9iamVjdCBvYmplY3QsIFN0cmluZyBlcnJvcikKLSAgewotICAgIHJlYWRlckVycm9ycy5hZGQobmV3IFJlYWRlckVycm9yKHBhcmVudG9iamVjdCwgb2JqZWN0LCBlcnJvcikpOwotICB9Ci0gIAotICAvKioKLSAgICogQWRkIGEgcmVhZGVyIHdhcm5pbmcgdG8gdGhlIGxpc3QuCi0gICAqIAotICAgKiBAcGFyYW0gcGFyZW50b2JqZWN0IFRoZSBwYXJlbnQgb2JqZWN0IG9mIHRoZSBvYmplY3Qgd2l0aCB0aGUgZXJyb3IuCi0gICAqIEBwYXJhbSBvYmplY3QgVGhlIG9iamVjdCB3aXRoIHRoZSBlcnJvci4KLSAgICogQHBhcmFtIHdhcm5pbmcgVGhlIHdhcm5pbmcgbWVzc2FnZS4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGFkZFJlYWRlcldhcm5pbmcoT2JqZWN0IHBhcmVudG9iamVjdCwgT2JqZWN0IG9iamVjdCwgU3RyaW5nIHdhcm5pbmcpCi0gIHsKLSAgICByZWFkZXJXYXJuaW5ncy5hZGQobmV3IFJlYWRlckVycm9yKHBhcmVudG9iamVjdCwgb2JqZWN0LCB3YXJuaW5nKSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZWdpc3RlciBhbGwgb2YgdGhlIGxvY2F0aW9ucyBvZiB0aGUgY2hpbGQgZWxlbWVudHMgb2YgdGhlIGV4dGVuc2liaWxpdHkKLSAgICogZWxlbWVudCBnaXZlbi4KLSAgICogCi0gICAqIEBwYXJhbSBleHRFbGVtIFRoZSBleHRlbnNpYmlsaXR5IGVsZW1lbnQgd2hvc2UgY2hpbGQgZWxlbWVudHMgd2lsbCBiZSByZWdpc3RlcmVkLgotICAgKi8KLQotICBwcm90ZWN0ZWQgdm9pZCByZWdpc3RlckNoaWxkRWxlbWVudHMoRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0RWxlbSkKLSAgewotICAgIC8vIG9ubHkgYWRkIHRob3NlIHRoYXQgYXJlIG9mIHR5cGUgdW5rbm93bi4gaWYgdGhleSdyZSBrbm93biB0aGV5IAotICAgIC8vIHdpbGwgdGFrZSBjYXJlIG9mIHRoZW1zZWx2ZXMKLSAgICBpZiAoZXh0RWxlbSBpbnN0YW5jZW9mIFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCkKLSAgICB7Ci0gICAgICBFbGVtZW50IGVsZW0gPSAoKFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudClleHRFbGVtKS5nZXRFbGVtZW50KCk7Ci0gICAgICByZWdpc3RlckNoaWxkRWxlbWVudHNSZWN1cnNpdmVseShlbGVtKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUmVnaXN0ZXIgdGhlIGxvY2F0aW9uIG9mIGFsbCBvZiB0aGUgY2hpbGQgZWxlbWVudHMgb2YgZWxlbS4KLSAgICogCi0gICAqIEBwYXJhbSBlbGVtIFRoZSBlbGVtZW50IHdob3NlIGNoaWxkIGVsZW1lbnRzIHdpbGwgYmUgcmVnaXN0ZXJlZC4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHJlZ2lzdGVyQ2hpbGRFbGVtZW50c1JlY3Vyc2l2ZWx5KEVsZW1lbnQgZWxlbSkKLSAgewotICAgIGlmIChlbGVtIGluc3RhbmNlb2YgRWxlbWVudE5TSW1wbCkKLSAgICB7Ci0gICAgICBzZXRMb2NhdGlvbihlbGVtLCBlbGVtKTsKLQotICAgICAgLy8gY2FsbCB0aGUgbWV0aG9kIHJlY3Vyc2l2ZWx5IGZvciBlYWNoIGNoaWxkIGVsZW1lbnQKLSAgICAgIE5vZGVMaXN0IGNoaWxkTm9kZXMgPSBlbGVtLmdldENoaWxkTm9kZXMoKTsKLQotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZE5vZGVzLmdldExlbmd0aCgpIHx8IGkgPCA1OyBpKyspCi0gICAgICB7Ci0gICAgICAgIE5vZGUgbiA9IGNoaWxkTm9kZXMuaXRlbShpKTsKLSAgICAgICAgLy8gd2Ugb25seSB3YW50IG5vZGVzIHRoYXQgYXJlIEVsZW1lbnRzCi0gICAgICAgIGlmIChuIGluc3RhbmNlb2YgRWxlbWVudCkKLSAgICAgICAgewotICAgICAgICAgIEVsZW1lbnQgY2hpbGQgPSAoRWxlbWVudCluOwotICAgICAgICAgIHJlZ2lzdGVyQ2hpbGRFbGVtZW50c1JlY3Vyc2l2ZWx5KGNoaWxkKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotICAvKioKLSAgICogQ2hlY2sgdGhhdCBhbiBlbGVtZW50IG5hbWUgbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgbmFtZS4KLSAgICogCi0gICAqIEBwYXJhbSBlbCBUaGUgZWxlbWVudCB3aXRoIHRoZSBuYW1lIHRvIGNoZWNrLgotICAgKiBAcGFyYW0gcW5hbWUgVGhlIG5hbWUgdG8gY2hlY2sgYWdhaW5zdC4KLSAgICogQHRocm93cyBXU0RMRXhjZXB0aW9uCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyB2b2lkIGNoZWNrRWxlbWVudE5hbWUoRWxlbWVudCBlbCwgUU5hbWUgcW5hbWUpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBpZiAoIVFOYW1lVXRpbHMubWF0Y2hlcyhxbmFtZSwgZWwpKQotICAgIHsKLSAgICAgIFdTRExFeGNlcHRpb24gd3NkbEV4YyA9IG5ldyBXU0RMRXhjZXB0aW9uKFdTRExFeGNlcHRpb24uSU5WQUxJRF9XU0RMLCAiRXhwZWN0ZWQgZWxlbWVudCAnIiArIHFuYW1lICsgIicuIik7Ci0KLSAgICAgIHdzZGxFeGMuc2V0TG9jYXRpb24oWFBhdGhVdGlscy5nZXRYUGF0aEV4cHJGcm9tTm9kZShlbCkpOwotCi0gICAgICB0aHJvdyB3c2RsRXhjOwotICAgIH0KLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgZWxlbWVudCBsb2NhdGlvbnMgaGFzaHRhYmxlLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgZWxlbWVudCBsb2NhdGlvbnMgaGFzaHRhYmxlLgotICAgKi8KLSAgcHVibGljIEhhc2h0YWJsZSBnZXRFbGVtZW50TG9jYXRpb25zKCkKLSAgewotICAgIHJldHVybiBlbGVtZW50TG9jYXRpb25zOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSByZWFkZXIgZXJyb3JzLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgcmVhZGVyIGVycm9ycy4KLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldFJlYWRlckVycm9ycygpCi0gIHsKLSAgICByZXR1cm4gcmVhZGVyRXJyb3JzOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHJlYWRlciB3YXJuaW5ncy4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIHJlYWRlciB3YXJuaW5ncy4KLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldFJlYWRlcldhcm5pbmdzKCkKLSAgewotICAgIHJldHVybiByZWFkZXJXYXJuaW5nczsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvV1NETFJlYWRlckltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvV1NETFJlYWRlckltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmJjOWEzZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL1dTRExSZWFkZXJJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExOwotCi1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotaW1wb3J0IGphdmEudXRpbC5Tb3J0ZWRTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLlRyZWVTZXQ7Ci0KLWltcG9ydCBqYXZheC53c2RsLkltcG9ydDsKLWltcG9ydCBqYXZheC53c2RsLldTRExFeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5pbXBsLlhNTEVycm9yUmVwb3J0ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMucGFyc2Vycy5ET01QYXJzZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMucGFyc2Vycy5TdGFuZGFyZFBhcnNlckNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhOSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnV0aWwuTWVzc2FnZUdlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbC5MaW5lTnVtYmVyRE9NUGFyc2VyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnhtbC5zYXguRXJyb3JIYW5kbGVyOwotaW1wb3J0IG9yZy54bWwuc2F4LklucHV0U291cmNlOwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhQYXJzZUV4Y2VwdGlvbjsKLQotaW1wb3J0IGNvbS5pYm0ud3NkbC5EZWZpbml0aW9uSW1wbDsKLWltcG9ydCBjb20uaWJtLndzZGwudXRpbC5TdHJpbmdVdGlsczsKLQotLyoqCi0gKiBBIFdTREwgcmVhZGVyIHRoYXQgc3VwcG9ydHMgY3ljbGljIFdTREwgaW1wb3J0cywgc2NoZW1hIGltcG9ydHMgYW5kIGlubGluZSBzY2hlbWFzLgotICogVGhpcyByZWFkZXIgaXMgYmFzZWQgb24gdGhlIFdTRExSZWFkZXJJbXBsIGZyb20gV1NETDRKLiAKLSAqLwotcHVibGljIGNsYXNzIFdTRExSZWFkZXJJbXBsCi17Ci0gIHByb3RlY3RlZCBNZXNzYWdlR2VuZXJhdG9yIG1lc3NhZ2VnZW5lcmF0b3I7Ci0gIHByb3RlY3RlZCBJV1NETDExVmFsaWRhdGlvbkluZm8gd3NkbHZhbGluZm87Ci0gIAotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gd3NkbHZhbGluZm8gVGhlIFdTREwgMS4xIHZhbGlkYXRpb24gaW5mbyBvYmplY3QgdG8gdXNlLgotICAgKi8KLSAgcHVibGljIFdTRExSZWFkZXJJbXBsKElXU0RMMTFWYWxpZGF0aW9uSW5mbyB3c2RsdmFsaW5mbykKLSAgewotICAgIHRoaXMud3NkbHZhbGluZm8gPSB3c2RsdmFsaW5mbzsKLSAgfQotICAKLSAgLyoqCi0gICAqIFBhcnNlIHRoZSByb290IGRvY3VtZW50LiBUaGlzIG1ldGhvZCB3aWxsIGZpbmQgYWxsIGltcG9ydHMgYW5kIHBhcnNlIHRoZW0gYXMgCi0gICAqIHdlbGwgY3JlYXRpbmcgYSBXU0RMRG9jdW1lbnQgZm9yIGVhY2ggdW5pcXVlIFdTREwgZmlsZS4gVGhpcyBtZXRob2Qgc3VwcG9ydHMKLSAgICogY3ljbGljIFdTREwgaW1wb3J0IHN0YXRlbWVudHMgc3VjaCB0aGF0IGZpbGUgQSBjYW4gaW1wb3J0IGZpbGUgQiBhbmQgZmlsZSBCCi0gICAqIGNhbiBpbXBvcnQgZmlsZSBBLgotICAgKiAKLSAgICogQHBhcmFtIGRvY3VtZW50QmFzZVVSSSBUaGUgYmFzZSBVUkkgb2YgdGhlIHJvb3QgZG9jdW1lbnQuCi0gICAqIEBwYXJhbSBkZWZFbCBUaGUgZGVmaW5pdGlvbiBlbGVtZW50IG9mIHRoZSByb290IGRvY3VtZW50LgotICAgKiBAcmV0dXJuIEFuIGFycmF5IG9mIFdTRExEb2N1bWVudHMgY29udGFpbmluZyBhbGwgb2YgdGhlIHVuaXF1ZSBmaWxlcyBpbiB0aGUgZGVzY3JpcHRpb24uCi0gICAqIEB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICAgKi8KLSAgcHJvdGVjdGVkIFdTRExEb2N1bWVudFtdIHBhcnNlRG9jdW1lbnQoU3RyaW5nIGRvY3VtZW50QmFzZVVSSSwgRWxlbWVudCBkZWZFbCkgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIGludCBpbml0aWFsSW1wb3J0QXJyYXlTaXplID0gMjA7Ci0gICAgTGlzdFtdIGZpbGVzQXREZXB0aCA9IG5ldyBBcnJheUxpc3RbaW5pdGlhbEltcG9ydEFycmF5U2l6ZV07Ci0gICAgTWFwIGZpbGVzSW1wb3J0aW5nID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIFNvcnRlZFNldCBwYXJzZWRJbXBvcnRzID0gbmV3IFRyZWVTZXQoKTsKLSAgICBTb3J0ZWRTZXQgaW1wb3J0c1RvUGFyc2UgPSBuZXcgVHJlZVNldCgpOwotICAgIGludCBtYXhkZXB0aCA9IDA7Ci0KLSAgICBXU0RMRG9jdW1lbnQgcm9vdGRvYyA9IG5ldyBXU0RMRG9jdW1lbnQoZG9jdW1lbnRCYXNlVVJJLCBkZWZFbCwgMCwgbWVzc2FnZWdlbmVyYXRvciwgd3NkbHZhbGluZm8pOwotICAgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSByb290ZG9jLmdldERlZmluaXRpb24oKS5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLSAgICBJbXBvcnRIb2xkZXIgcm9vdEltcG9ydCA9IG5ldyBJbXBvcnRIb2xkZXIodGFyZ2V0TmFtZXNwYWNlLCBkb2N1bWVudEJhc2VVUkksIGRvY3VtZW50QmFzZVVSSSwgcm9vdGRvYywgMCwgbnVsbCwgbWVzc2FnZWdlbmVyYXRvciwgd3NkbHZhbGluZm8pOwotICAgIHJvb3RJbXBvcnQuY3JlYXRlV1NETEltcG9ydChyb290ZG9jKTsKLSAgICBwYXJzZWRJbXBvcnRzLmFkZChyb290SW1wb3J0KTsKLSAgICBMaXN0IHJvb3RMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGZpbGVzSW1wb3J0aW5nLnB1dChyb290SW1wb3J0LmdldExvY2F0aW9uKCksIG5ldyBBcnJheUxpc3QoKSk7Ci0gICAgcm9vdExpc3QuYWRkKHJvb3Rkb2MpOwotICAgIGZpbGVzQXREZXB0aFswXSA9IHJvb3RMaXN0OwotICAgIGltcG9ydHNUb1BhcnNlLmFkZEFsbChyb290ZG9jLmdldEltcG9ydHMoKSk7Ci0gICAgU2V0IGltcHMgPSByb290ZG9jLmdldEltcG9ydHMoKTsKLSAgICBJdGVyYXRvciBpbXBJdGVyID0gaW1wcy5pdGVyYXRvcigpOwotICAgIHdoaWxlKGltcEl0ZXIuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIEltcG9ydEhvbGRlciBpbXAgPSAoSW1wb3J0SG9sZGVyKWltcEl0ZXIubmV4dCgpOwotICAgICAgTGlzdCB0ZW1wTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgIHRlbXBMaXN0LmFkZChpbXAuZ2V0SW1wb3J0aW5nRG9jdW1lbnQoKSk7Ci0gICAgICBmaWxlc0ltcG9ydGluZy5wdXQoaW1wLmdldExvY2F0aW9uKCksIHRlbXBMaXN0KTsKLSAgICB9Ci0gICAgCi0gICAgd2hpbGUoIWltcG9ydHNUb1BhcnNlLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICBJbXBvcnRIb2xkZXIgaW1wID0gKEltcG9ydEhvbGRlcilpbXBvcnRzVG9QYXJzZS5maXJzdCgpOwotICAgICAgLy8gSXQncyBpbXBvcnRhbnQgdG8gaW5pdGlhbGl6ZSB0aGUgaW1wb3J0IGhlcmUgc28gZWFjaCBpbXBvcnQKLSAgICAgIC8vIGlzIG9ubHkgY3JlYXRlZCBvbmNlLiBJbiB0aGUgY2FzZSBvZiByZWNpcHJpY2FsIGltcG9ydHMgdGhpcwotICAgICAgLy8gYXZvaWRzIGFuIGluZmluaXRlIGxvb3AuCi0gICAgICBpbXAuaW5pdGlhbGl6ZSgpOwotICAgICAgV1NETERvY3VtZW50IGltcERvYyA9IGltcC5nZXRXU0RMRG9jdW1lbnQoKTsKLSAgICAgIAotICAgICAgaW1wb3J0c1RvUGFyc2UucmVtb3ZlKGltcCk7Ci0gICAgICAKLSAgICAgIHBhcnNlZEltcG9ydHMuYWRkKGltcCk7Ci0gICAgICAKLSAgICAgIC8vIEFkZCBuZXcgaW1wb3J0cyB0byB0aGUgbGlzdCBvZiBpbXBvcnRzIHRvIHBhcnNlLgotICAgICAgLy8gUmVtb3ZlIGFsbCB0aGUgaW1wb3J0cyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIHBhcnNlZC4KLSAgICAgIGlmKGltcERvYyAhPSBudWxsKQotICAgICAgewotICAgICAgICAvLyBJbmNyZWF0ZSBpbXBvcnQgYXJyYXkgaWYgbmVjZXNzYXJ5LgotICAgICAgICBpZihpbXAuZ2V0RGVwdGgoKSA+PSBpbml0aWFsSW1wb3J0QXJyYXlTaXplKQotICAgICAgICB7Ci0gICAgICAgICAgTGlzdFtdIHRlbXBBcnJheSA9IG5ldyBMaXN0W2ZpbGVzQXREZXB0aC5sZW5ndGggKyBpbml0aWFsSW1wb3J0QXJyYXlTaXplXTsKLSAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KGZpbGVzQXREZXB0aCwgMCwgdGVtcEFycmF5LCAwLCBmaWxlc0F0RGVwdGgubGVuZ3RoKTsKLSAgICAgICAgICBmaWxlc0F0RGVwdGggPSB0ZW1wQXJyYXk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gQ3JlYXRlIHRoZSBsaXN0IGZvciB0aGUgZGVwdGggaWYgbmVjZXNzYXJ5LgotICAgICAgICBpbnQgaW1wRGVwdGggPSBpbXAuZ2V0RGVwdGgoKTsKLSAgICAgICAgaWYoZmlsZXNBdERlcHRoW2ltcERlcHRoXSA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgaWYobWF4ZGVwdGggPCBpbXBEZXB0aCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBtYXhkZXB0aCA9IGltcERlcHRoOwotICAgICAgICAgIH0KLSAgICAgICAgICBmaWxlc0F0RGVwdGhbaW1wRGVwdGhdID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICB9Ci0gICAgICAgIGZpbGVzQXREZXB0aFtpbXAuZ2V0RGVwdGgoKV0uYWRkKGltcERvYyk7Ci0gICAgICAgIAotICAgICAgICBTZXQgaW1wb3J0cyA9IGltcERvYy5nZXRJbXBvcnRzKCk7Ci0gICAgICAgIEltcG9ydEhvbGRlcltdIGltcG9ydHNBcnJheSA9IChJbXBvcnRIb2xkZXJbXSlpbXBvcnRzLnRvQXJyYXkobmV3IEltcG9ydEhvbGRlcltpbXBvcnRzLnNpemUoKV0pOwotICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgaW1wb3J0c0FycmF5Lmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgSW1wb3J0SG9sZGVyIGloID0gaW1wb3J0c0FycmF5W2ldOwotICAgICAgICAgIC8vIElmIGFscmVhZHkgcGFyc2VkLCBhZGQgdGhlIGRlZmluaXRpb24gaW1wb3J0aW5nIHRoaXMgZmlsZSB0byB0aGUgbGlzdC4KLSAgICAgICAgICBpZihmaWxlc0ltcG9ydGluZy5jb250YWluc0tleShpaC5nZXRMb2NhdGlvbigpKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAoKExpc3QpZmlsZXNJbXBvcnRpbmcuZ2V0KGloLmdldExvY2F0aW9uKCkpKS5hZGQoaWguZ2V0SW1wb3J0aW5nRG9jdW1lbnQoKSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIC8vIE90aGVyd2lzZSBhZGQgaXQgdG8gdGhlIGxpc3QgdG8gcGFyc2UuCi0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIEFkZCB0aGlzIGltcG9ydCB0byB0aGUgbGlzdCBvZiBmaWxlcyBpbXBvcnRpbmcgbGlzdC4KLSAgICAgICAgICAgIExpc3QgdGVtcExpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgICAgICB0ZW1wTGlzdC5hZGQoaWguZ2V0SW1wb3J0aW5nRG9jdW1lbnQoKSk7Ci0gICAgICAgICAgICBmaWxlc0ltcG9ydGluZy5wdXQoaWguZ2V0TG9jYXRpb24oKSwgdGVtcExpc3QpOwotICAgICAgICAgICAgaW1wb3J0c1RvUGFyc2UuYWRkKGloKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy8gQWRkIGFsbCBvZiB0aGUgaW1wb3J0cyB0byB0aGUgcmVzcGVjdGl2ZSBkb2N1bWVudHMuCi0gICAgSXRlcmF0b3IgaW1wb3J0RWxlbWVudHNJdGVyID0gcGFyc2VkSW1wb3J0cy5pdGVyYXRvcigpOwotICAgIHdoaWxlKGltcG9ydEVsZW1lbnRzSXRlci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgSW1wb3J0SG9sZGVyIGltcCA9IChJbXBvcnRIb2xkZXIpaW1wb3J0RWxlbWVudHNJdGVyLm5leHQoKTsKLSAgICAgIExpc3QgZmlsZXMgPSAoTGlzdClmaWxlc0ltcG9ydGluZy5nZXQoaW1wLmdldExvY2F0aW9uKCkpOwotICAgICAgSXRlcmF0b3IgZmlsZXNJdGVyID0gZmlsZXMuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlKGZpbGVzSXRlci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIFdTRExEb2N1bWVudCBkb2MgPSAoV1NETERvY3VtZW50KWZpbGVzSXRlci5uZXh0KCk7Ci0gICAgICAgIAotICAgICAgICBEZWZpbml0aW9uSW1wbCBkZWYgPSAoRGVmaW5pdGlvbkltcGwpZG9jLmdldERlZmluaXRpb24oKTsKLSAgICAgICAgSW1wb3J0IGltcEVsZW0gPSBpbXAuZ2V0SW1wb3J0KCk7Ci0gICAgICAgIGlmKGltcEVsZW0gIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGRlZi5hZGRJbXBvcnQoaW1wRWxlbSk7Ci0gICAgICAgICAgaWYoIWltcC5pc1dTRExGaWxlSW1wb3J0KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgZG9jLmFkZFNjaGVtYXMoaW1wLmdldFNjaGVtYXMoKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBQYXJzZSB0aGUgV1NETCBkb2N1bWVudHMuCi0gICAgLy8gUGFyc2UgdGhlIE1lc3NhZ2VzLgotICAgIGZvcihpbnQgaSA9IG1heGRlcHRoOyBpID49MDsgaS0tKQotICAgIHsKLSAgICAgIExpc3QgZG9jcyA9IGZpbGVzQXREZXB0aFtpXTsKLSAgICAgIEl0ZXJhdG9yIGRvY3NJdGVyID0gZG9jcy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUoZG9jc0l0ZXIuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBXU0RMRG9jdW1lbnQgZG9jID0gKFdTRExEb2N1bWVudClkb2NzSXRlci5uZXh0KCk7Ci0gICAgICAgIGRvYy5wYXJzZU1lc3NhZ2VzKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIFBhcnNlIHRoZSBQb3J0dHlwZXMuCi0gICAgZm9yKGludCBpID0gbWF4ZGVwdGg7IGkgPj0wOyBpLS0pCi0gICAgewotICAgICAgTGlzdCBkb2NzID0gZmlsZXNBdERlcHRoW2ldOwotICAgICAgSXRlcmF0b3IgZG9jc0l0ZXIgPSBkb2NzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZShkb2NzSXRlci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIFdTRExEb2N1bWVudCBkb2MgPSAoV1NETERvY3VtZW50KWRvY3NJdGVyLm5leHQoKTsKLSAgICAgICAgZG9jLnBhcnNlUG9ydHR5cGVzKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIFBhcnNlIHRoZSBCaW5kaW5ncy4KLSAgICBmb3IoaW50IGkgPSBtYXhkZXB0aDsgaSA+PTA7IGktLSkKLSAgICB7Ci0gICAgICBMaXN0IGRvY3MgPSBmaWxlc0F0RGVwdGhbaV07Ci0gICAgICBJdGVyYXRvciBkb2NzSXRlciA9IGRvY3MuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlKGRvY3NJdGVyLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgV1NETERvY3VtZW50IGRvYyA9IChXU0RMRG9jdW1lbnQpZG9jc0l0ZXIubmV4dCgpOwotICAgICAgICBkb2MucGFyc2VCaW5kaW5ncygpOwotICAgICAgfQotICAgIH0KLSAgICAvLyBQYXJzZSB0aGUgU2VydmljZXMuCi0gICAgZm9yKGludCBpID0gbWF4ZGVwdGg7IGkgPj0wOyBpLS0pCi0gICAgewotICAgICAgTGlzdCBkb2NzID0gZmlsZXNBdERlcHRoW2ldOwotICAgICAgSXRlcmF0b3IgZG9jc0l0ZXIgPSBkb2NzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZShkb2NzSXRlci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIFdTRExEb2N1bWVudCBkb2MgPSAoV1NETERvY3VtZW50KWRvY3NJdGVyLm5leHQoKTsKLSAgICAgICAgZG9jLnBhcnNlU2VydmljZXMoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gUGFyc2UgdGhlIEV4dGVuc2liaWxpdHkgRWxlbWVudHMuCi0gICAgZm9yKGludCBpID0gbWF4ZGVwdGg7IGkgPj0wOyBpLS0pCi0gICAgewotICAgICAgTGlzdCBkb2NzID0gZmlsZXNBdERlcHRoW2ldOwotICAgICAgSXRlcmF0b3IgZG9jc0l0ZXIgPSBkb2NzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZShkb2NzSXRlci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIFdTRExEb2N1bWVudCBkb2MgPSAoV1NETERvY3VtZW50KWRvY3NJdGVyLm5leHQoKTsKLSAgICAgICAgZG9jLnBhcnNlRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIExpc3Qgd3NkbERvY3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yKGludCBpID0gbWF4ZGVwdGg7IGkgPj0wOyBpLS0pCi0gICAgewotICAgICAgTGlzdCBkb2NzID0gZmlsZXNBdERlcHRoW2ldOwotICAgICAgSXRlcmF0b3IgZG9jc0l0ZXIgPSBkb2NzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZShkb2NzSXRlci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIFdTRExEb2N1bWVudCBkb2MgPSAoV1NETERvY3VtZW50KWRvY3NJdGVyLm5leHQoKTsKLSAgICAgICAgd3NkbERvY3MuYWRkKGRvYyk7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiAoV1NETERvY3VtZW50W10pd3NkbERvY3MudG9BcnJheShuZXcgV1NETERvY3VtZW50W3dzZGxEb2NzLnNpemUoKV0pOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBXU0RMIGRvY3VtZW50LgotICAgKiAKLSAgICogQHBhcmFtIGlucHV0U291cmNlIFRoZSBzb3VyY2Ugb2YgdGhlIGRvY3VtZW50IGJlaW5nIHJldHJpZXZlZC4KLSAgICogQHBhcmFtIGRlc2MgVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBkb2N1bWVudCBiZWluZyByZXRyaWV2ZWQuCi0gICAqIEByZXR1cm4gVGhlIFdTREwgZG9jdW1lbnQuCi0gICAqIEB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBEb2N1bWVudCBnZXREb2N1bWVudChJbnB1dFNvdXJjZSBpbnB1dFNvdXJjZSwgU3RyaW5nIGRlc2MpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBTdGFuZGFyZFBhcnNlckNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IG5ldyBTdGFuZGFyZFBhcnNlckNvbmZpZ3VyYXRpb24oKQotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgWE1MRXJyb3JSZXBvcnRlciBjcmVhdGVFcnJvclJlcG9ydGVyKCkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBuZXcgWE1MRXJyb3JSZXBvcnRlcigpCi0gICAgICAgICAgewotICAgICAgICAgICAgcHVibGljIHZvaWQgcmVwb3J0RXJyb3IoU3RyaW5nIGRvbWFpbiwgU3RyaW5nIGtleSwgT2JqZWN0W10gYXJndW1lbnRzLCBzaG9ydCBzZXZlcml0eSkgdGhyb3dzIFhOSUV4Y2VwdGlvbgotICAgICAgICAgICAgewotICAgICAgICAgICAgICBib29sZWFuIHJlcG9ydEVycm9yID0gdHJ1ZTsKLSAgICAgICAgICAgICAgaWYgKGtleS5lcXVhbHMoIlByZW1hdHVyZUVPRiIpKQotICAgICAgICAgICAgICAgeyAgICAgICAgIAotICAgICAgICAgICAgICAgIHJlcG9ydEVycm9yID0gZmFsc2U7Ci0gICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICBpZiAocmVwb3J0RXJyb3IpCi0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3VwZXIucmVwb3J0RXJyb3IoZG9tYWluLCBrZXksIGFyZ3VtZW50cywgc2V2ZXJpdHkpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfTsKLSAgICAgICAgfQotICAgICAgfTsKLSAgICAgIAotICAgICAgRXJyb3JIYW5kbGVyIGVycm9ySGFuZGxlciA9IG5ldyBFcnJvckhhbmRsZXIoKQotICAgICAgewotICAgICAgICAgICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAgICAgICAqIEBzZWUgb3JnLnhtbC5zYXguRXJyb3JIYW5kbGVyI2Vycm9yKG9yZy54bWwuc2F4LlNBWFBhcnNlRXhjZXB0aW9uKQotICAgICAgICAgICAqLwotICAgICAgICAgIHB1YmxpYyB2b2lkIGVycm9yKFNBWFBhcnNlRXhjZXB0aW9uIGV4Y2VwdGlvbikgdGhyb3dzIFNBWEV4Y2VwdGlvbgotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQotICAgICAgICAgIH0KLSAgICAgICAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgICAgICAgICogQHNlZSBvcmcueG1sLnNheC5FcnJvckhhbmRsZXIjZmF0YWxFcnJvcihvcmcueG1sLnNheC5TQVhQYXJzZUV4Y2VwdGlvbikKLSAgICAgICAgICAgKi8KLSAgICAgICAgICBwdWJsaWMgdm9pZCBmYXRhbEVycm9yKFNBWFBhcnNlRXhjZXB0aW9uIGV4Y2VwdGlvbikgdGhyb3dzIFNBWEV4Y2VwdGlvbgotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQotICAgICAgICAgIH0KLSAgICAgICAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgICAgICAgICogQHNlZSBvcmcueG1sLnNheC5FcnJvckhhbmRsZXIjd2FybmluZyhvcmcueG1sLnNheC5TQVhQYXJzZUV4Y2VwdGlvbikKLSAgICAgICAgICAgKi8KLSAgICAgICAgICBwdWJsaWMgdm9pZCB3YXJuaW5nKFNBWFBhcnNlRXhjZXB0aW9uIGV4Y2VwdGlvbikgdGhyb3dzIFNBWEV4Y2VwdGlvbgotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQotICAgICAgICAgIH0KLSAgICAgIH07Ci0KLSAgICAgIERPTVBhcnNlciBidWlsZGVyID0gbmV3IExpbmVOdW1iZXJET01QYXJzZXIoY29uZmlndXJhdGlvbik7Ci0gICAgICBidWlsZGVyLnNldEVycm9ySGFuZGxlcihlcnJvckhhbmRsZXIpOwotICAgICAgYnVpbGRlci5wYXJzZShpbnB1dFNvdXJjZSk7Ci0gICAgICBEb2N1bWVudCBkb2MgPSBidWlsZGVyLmdldERvY3VtZW50KCk7Ci0KLSAgICAgIHJldHVybiBkb2M7Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgV1NETEV4Y2VwdGlvbihXU0RMRXhjZXB0aW9uLlBBUlNFUl9FUlJPUiwgIlByb2JsZW0gcGFyc2luZyAnIiArIGRlc2MgKyAiJy4iLCB0KTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUmVhZCBhIFdTREwgZG9jdW1lbnQgdXNpbmcgYSBjb250ZXh0IFVSSSBhbmQgZmlsZSBVUkkuCi0gICAqIAotICAgKiBAcGFyYW0gY29udGV4dFVSSSBUaGUgY29udGV4dCBVUkkgdG8gdXNlLgotICAgKiBAcGFyYW0gd3NkbFVSSSBUaGUgV1NETCBVUkkgdG8gdXNlLgotICAgKiBAcmV0dXJuIEFuIGFycmF5IG9mIFdTRExEb2N1bWVudHMuCi0gICAqIEB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICAgKi8KLSAgcHVibGljIFdTRExEb2N1bWVudFtdIHJlYWRXU0RMKFN0cmluZyBjb250ZXh0VVJJLCBTdHJpbmcgd3NkbFVSSSkgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIFVSTCBjb250ZXh0VVJMID0gKGNvbnRleHRVUkkgIT0gbnVsbCkgPyBTdHJpbmdVdGlscy5nZXRVUkwobnVsbCwgY29udGV4dFVSSSkgOiBudWxsOwotICAgICAgVVJMIHVybCA9IFN0cmluZ1V0aWxzLmdldFVSTChjb250ZXh0VVJMLCB3c2RsVVJJKTsKLSAgICAgIFJlYWRlciByZWFkZXIgPSBTdHJpbmdVdGlscy5nZXRDb250ZW50QXNSZWFkZXIodXJsKTsKLSAgICAgIElucHV0U291cmNlIGlucHV0U291cmNlID0gbmV3IElucHV0U291cmNlKHJlYWRlcik7Ci0gICAgICBEb2N1bWVudCBkb2MgPSBnZXREb2N1bWVudChpbnB1dFNvdXJjZSwgd3NkbFVSSSk7Ci0gICAgICByZWFkZXIuY2xvc2UoKTsKLSAgICAgIFdTRExEb2N1bWVudFtdIHdzZGxEb2NzID0gbnVsbDsKLSAgICAgIC8vIG9ubHkgcGFyc2UgdGhlIGRvY3VtZW50IGlmIGl0IGlzbid0IGVtcHR5Ci0gICAgICBpZihkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCkgIT0gbnVsbCkKLSAgICAgICB7ICAgICAgCi0gICAgICAgIHdzZGxEb2NzID0gcmVhZFdTREwodXJsLnRvU3RyaW5nKCksIGRvYyk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gd3NkbERvY3M7Ci0gICAgfQotICAgIGNhdGNoIChXU0RMRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgdGhyb3cgZTsKLSAgICB9Ci0gICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgIHsKLSAgICAgIHRocm93IG5ldyBXU0RMRXhjZXB0aW9uKAotICAgICAgICBXU0RMRXhjZXB0aW9uLk9USEVSX0VSUk9SLAotICAgICAgICAiVW5hYmxlIHRvIHJlc29sdmUgaW1wb3J0ZWQgZG9jdW1lbnQgYXQgJyIgKyB3c2RsVVJJICsgIicuIiwKLSAgICAgICAgdCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFNldCB0aGUgbWVzc2FnZWdlbmVyYXRvciBmb3IgdGhlIHJlYWRlci4KLSAgICogCi0gICAqIEBwYXJhbSBtZyBUaGUgbWVzc2FnZSBnZW5lcmF0b3IgdG8gc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TWVzc2FnZUdlbmVyYXRvcihNZXNzYWdlR2VuZXJhdG9yIG1nKQotICB7Ci0gICAgbWVzc2FnZWdlbmVyYXRvciA9IG1nOwotICB9Ci0gIAotICAvKioKLSAgICogUmVhZCB0aGUgV1NETCBkb2N1bWVudCBhY2Nlc3NpYmxlIHZpYSB0aGUgc3BlY2lmaWVkCi0gICAqIFVSSSBpbnRvIGEgV1NETCBkZWZpbml0aW9uLgotICAgKgotICAgKiBAcGFyYW0gd3NkbFVSSSBBIFVSSSBwb2ludGluZyB0byBhIFdTREwgZmlsZS4KLSAgICogQHJldHVybiBBbiBhcnJheSBvZiBXU0RMRG9jdW1lbnRzLgotICAgKi8KLSAgcHVibGljIFdTRExEb2N1bWVudFtdIHJlYWRXU0RMKFN0cmluZyB3c2RsVVJJKSB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgcmV0dXJuIHJlYWRXU0RMKG51bGwsIHdzZGxVUkkpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlYWQgdGhlIFdTREwgZG9jdW1lbnQgZGVzY3JpYmVkIGJ5IGEgVVJJIGFuZCBpdHMgZGVmaW5pdGlvbnMgZWxlbWVudC4KLSAgICogCi0gICAqIEBwYXJhbSBkb2N1bWVudEJhc2VVUkkgVGhlIFVSSSBvZiB0aGUgV1NETCBkb2N1bWVudC4KLSAgICogQHBhcmFtIGRlZmluaXRpb25zRWxlbWVudCBUaGUgZGVmaW5pdGlvbnMgZWxlbWVudCBmb3IgdGhlIFdTREwgZG9jdW1lbnQuCi0gICAqIEByZXR1cm4gQW4gYXJyYXkgb2YgV1NETERvY3VtZW50cy4KLSAgICogQHRocm93cyBXU0RMRXhjZXB0aW9uCi0gICAqLwotICBwcm90ZWN0ZWQgV1NETERvY3VtZW50W10gcmVhZFdTREwoU3RyaW5nIGRvY3VtZW50QmFzZVVSSSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxlbWVudCBkZWZpbml0aW9uc0VsZW1lbnQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIHJldHVybiBwYXJzZURvY3VtZW50KGRvY3VtZW50QmFzZVVSSSwgZGVmaW5pdGlvbnNFbGVtZW50KTsKLSAgfQotCi0gIC8qKgotICAgKiBSZWFkIHRoZSBzcGVjaWZpZWQgV1NETCBkb2N1bWVudC4KLSAgICoKLSAgICogQHBhcmFtIGRvY3VtZW50QmFzZVVSSSBUaGUgZG9jdW1lbnQgYmFzZSBVUkkuCi0gICAqIEBwYXJhbSB3c2RsRG9jdW1lbnQgVGhlIFdTREwgZG9jdW1lbnQuCi0gICAqIEByZXR1cm4gQW4gYXJyYXkgb2YgV1NETERvY3VtZW50cy4KLSAgICovCi0gIHB1YmxpYyBXU0RMRG9jdW1lbnRbXSByZWFkV1NETChTdHJpbmcgZG9jdW1lbnRCYXNlVVJJLCBEb2N1bWVudCB3c2RsRG9jdW1lbnQpCi0gICAgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIHJldHVybiByZWFkV1NETChkb2N1bWVudEJhc2VVUkksIHdzZGxEb2N1bWVudC5nZXREb2N1bWVudEVsZW1lbnQoKSk7Ci0gIH0KLSAgCi0gIAotICAKLX0KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9odHRwL0hUVFBWYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvaHR0cC9IVFRQVmFsaWRhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxMzRlMzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9odHRwL0hUVFBWYWxpZGF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuaHR0cDsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuaHR0cC5IVFRQT3BlcmF0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51dGlsLk1lc3NhZ2VHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuSVdTREwxMVZhbGlkYXRpb25JbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLklXU0RMMTFWYWxpZGF0b3I7Ci0KLWltcG9ydCBjb20uaWJtLndzZGwuQmluZGluZ0ltcGw7Ci1pbXBvcnQgY29tLmlibS53c2RsLkJpbmRpbmdJbnB1dEltcGw7Ci1pbXBvcnQgY29tLmlibS53c2RsLkJpbmRpbmdPcGVyYXRpb25JbXBsOwotaW1wb3J0IGNvbS5pYm0ud3NkbC5Qb3J0SW1wbDsKLWltcG9ydCBjb20uaWJtLndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBBZGRyZXNzSW1wbDsKLWltcG9ydCBjb20uaWJtLndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBCaW5kaW5nSW1wbDsKLWltcG9ydCBjb20uaWJtLndzZGwuZXh0ZW5zaW9ucy5odHRwLkhUVFBPcGVyYXRpb25JbXBsOwotaW1wb3J0IGNvbS5pYm0ud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUFVybEVuY29kZWRJbXBsOwotaW1wb3J0IGNvbS5pYm0ud3NkbC5leHRlbnNpb25zLmh0dHAuSFRUUFVybFJlcGxhY2VtZW50SW1wbDsKLQotLyoqCi0gKiBUaGUgSFRUUCB2YWxpZGF0b3IgaXMgYW4gZXh0ZW5zaW9uIFdTREwgdmFsaWRhdG9yIHRoYXQgdmFsaWRhdGVzIGFsbCBlbGVtZW50cyBpbiB0aGUgSFRUUAotICogbmFtZXNwYWNlLgotICovCi1wdWJsaWMgY2xhc3MgSFRUUFZhbGlkYXRvciBpbXBsZW1lbnRzIElXU0RMMTFWYWxpZGF0b3IKLXsKLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIEhUVFBfUkVTT1VSQ0VfQlVORExFX05BTUUgPSAidmFsaWRhdGV3c2RsaHR0cCI7Ci0JCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9JTlZBTElEX1BPUlRfRUxFTUVOVCA9ICJfRVJST1JfSU5WQUxJRF9QT1JUX0VMRU1FTlQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfSU5WQUxJRF9CSU5ESU5HX0VMRU1FTlQgPSAiX0VSUk9SX0lOVkFMSURfQklORElOR19FTEVNRU5UIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0VSUk9SX0lOVkFMSURfQklORElOR19PUEVSQVRJT05fRUxFTUVOVCA9ICJfRVJST1JfSU5WQUxJRF9CSU5ESU5HX09QRVJBVElPTl9FTEVNRU5UIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0VSUk9SX0lOVkFMSURfQklORElOR19JTlBVVF9FTEVNRU5UID0gIl9FUlJPUl9JTlZBTElEX0JJTkRJTkdfSU5QVVRfRUxFTUVOVCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9JTlZBTElEX0hUVFBfRUxFTUVOVF9GT1JfTE9DQVRJT04gPSAiX0VSUk9SX0lOVkFMSURfSFRUUF9FTEVNRU5UX0ZPUl9MT0NBVElPTiI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9OT19MT0NBVElPTl9GT1JfQUREUkVTUyA9ICJfRVJST1JfTk9fTE9DQVRJT05fRk9SX0FERFJFU1MiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfTk9fSFRUUEJJTkRJTkdfRk9SX0FERFJFU1MgPSAiX0VSUk9SX05PX0hUVFBCSU5ESU5HX0ZPUl9BRERSRVNTIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0VSUk9SX0lOVkFMSURfQklORElOR19WRVJCID0gIl9FUlJPUl9JTlZBTElEX0JJTkRJTkdfVkVSQiI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9JTlZBTElEX0xPQ0FUSU9OX1VSSSA9ICJfRVJST1JfSU5WQUxJRF9MT0NBVElPTl9VUkkiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfTk9fSFRUUEJJTkRJTkdfRk9SX09QRVJBVElPTiA9ICJfRVJST1JfTk9fSFRUUEJJTkRJTkdfRk9SX09QRVJBVElPTiI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9OT1RfT05MWV9FTEVNRU5UX0RFRklORUQgPSAiX0VSUk9SX05PVF9PTkxZX0VMRU1FTlRfREVGSU5FRCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9OT19IVFRQT1BFUkFUSU9OX0ZPUl9VUkwgPSAiX0VSUk9SX05PX0hUVFBPUEVSQVRJT05fRk9SX1VSTCI7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgR0VUID0gIkdFVCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFBPU1QgPSAiUE9TVCI7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgUVVPVEUgPSAiJyI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEVNUFRZX1NUUklORyA9ICIiOwotCi0gIHByaXZhdGUgTWVzc2FnZUdlbmVyYXRvciBtZXNzYWdlZ2VuZXJhdG9yOwotCi0gIC8qKgotICAgKiBEZWZhdWx0IGNvbnN0cnVjdG9yLgotICAgKi8KLSAgcHVibGljIEhUVFBWYWxpZGF0b3IoKQotICB7Ci0JUmVzb3VyY2VCdW5kbGUgcmIgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoSFRUUF9SRVNPVVJDRV9CVU5ETEVfTkFNRSwgTG9jYWxlLmdldERlZmF1bHQoKSk7Ci0JbWVzc2FnZWdlbmVyYXRvciA9IG5ldyBNZXNzYWdlR2VuZXJhdG9yKHJiKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuSVdTREwxMVZhbGlkYXRvciN2YWxpZGF0ZShqYXZhLmxhbmcuT2JqZWN0LCBqYXZhLnV0aWwuTGlzdCwgb3JnLmVjbGlwc2Uud3NkbC52YWxpZGF0ZS53c2RsMTEuSVdTREwxMVZhbGlkYXRpb25JbmZvKQotICAgKi8KLSAgcHVibGljIHZvaWQgdmFsaWRhdGUoT2JqZWN0IGVsZW1lbnQsIExpc3QgcGFyZW50cywgSVdTREwxMVZhbGlkYXRpb25JbmZvIHZhbEluZm8pCi0gIHsKLSAgICAvLyBQb3J0IEhUVFAgZGVmaW5pdGlvbgotICAgIC8vIG1ha2Ugc3VyZSBldmVyeSBwb3J0IGhhcyBvbmx5IG9uZSBhZGRyZXNzIGVsZW1lbnQgZGVmaW5lZAotICAgIC8vIGlmIGl0IGlzIGFuIGFkZHJlc3MgZWxlbWVudCwgdmFsaWRhdGUgaXQKLSAgICBpZiAocGFyZW50cy5nZXQoMCkuZ2V0Q2xhc3MoKSA9PSBQb3J0SW1wbC5jbGFzcykKLSAgICB7Ci0gICAgICBpZiAoZWxlbWVudC5nZXRDbGFzcygpID09IEhUVFBBZGRyZXNzSW1wbC5jbGFzcykKLSAgICAgIHsKLSAgICAgICAgdmFsaWRhdGVBZGRyZXNzKGVsZW1lbnQsIHBhcmVudHMsIHZhbEluZm8pOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBlID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWVsZW1lbnQ7Ci0gICAgICAgIHZhbEluZm8uYWRkRXJyb3IoCi0gICAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX0lOVkFMSURfUE9SVF9FTEVNRU5ULCBRVU9URSArIGUuZ2V0RWxlbWVudFR5cGUoKS5nZXRMb2NhbFBhcnQoKSArIFFVT1RFKSwKLSAgICAgICAgICBlbGVtZW50KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBCaW5kaW5nIEhUVFAgZGVmaW5pdGlvbgotICAgIC8vIEEgSFRUUCBCaW5kaW5nIG11c3QgaGF2ZSBhIHZlcmIgb2YgR0VUIG9yIFBPU1QKLSAgICBlbHNlIGlmIChwYXJlbnRzLmdldCgwKS5nZXRDbGFzcygpID09IEJpbmRpbmdJbXBsLmNsYXNzKQotICAgIHsKLSAgICAgIGlmIChlbGVtZW50LmdldENsYXNzKCkgPT0gSFRUUEJpbmRpbmdJbXBsLmNsYXNzKQotICAgICAgewotICAgICAgICB2YWxpZGF0ZUJpbmRpbmcoZWxlbWVudCwgcGFyZW50cywgdmFsSW5mbyk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGUgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZWxlbWVudDsKLSAgICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfRVJST1JfSU5WQUxJRF9CSU5ESU5HX0VMRU1FTlQsIFFVT1RFICsgZS5nZXRFbGVtZW50VHlwZSgpLmdldExvY2FsUGFydCgpICsgUVVPVEUpLAotICAgICAgICAgIGVsZW1lbnQpOwotICAgICAgfQotICAgIH0KLSAgICAvLyBCaW5kaW5nIE9wZXJhdGlvbiBIVFRQIGRlZmluaXRpb24KLSAgICAvLyBBIEhUVFAgT3BlcmF0aW9uIGhhcyBhIGxvY2F0aW9uIHVyaSBkZWZpbmVkCi0gICAgZWxzZSBpZiAocGFyZW50cy5nZXQoMCkuZ2V0Q2xhc3MoKSA9PSBCaW5kaW5nT3BlcmF0aW9uSW1wbC5jbGFzcykKLSAgICB7Ci0gICAgICBpZiAoZWxlbWVudC5nZXRDbGFzcygpID09IEhUVFBPcGVyYXRpb25JbXBsLmNsYXNzKQotICAgICAgewotICAgICAgICB2YWxpZGF0ZU9wZXJhdGlvbihlbGVtZW50LCBwYXJlbnRzLCB2YWxJbmZvKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCllbGVtZW50OwotICAgICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKAotICAgICAgICAgICAgX0VSUk9SX0lOVkFMSURfQklORElOR19PUEVSQVRJT05fRUxFTUVOVCwKLSAgICAgICAgICAgIFFVT1RFICsgZS5nZXRFbGVtZW50VHlwZSgpLmdldExvY2FsUGFydCgpICsgUVVPVEUpLAotICAgICAgICAgIGVsZW1lbnQpOwotICAgICAgfQotCi0gICAgfQotICAgIGVsc2UgaWYgKHBhcmVudHMuZ2V0KDApLmdldENsYXNzKCkgPT0gQmluZGluZ0lucHV0SW1wbC5jbGFzcykKLSAgICB7Ci0gICAgICAvLyB2YWxpZGF0ZSB0aGUgSFRUUCB1cmxFbmNvZGVkIGFuZCB1cmxSZXBsYWNlbWVudAotICAgICAgaWYgKGVsZW1lbnQuZ2V0Q2xhc3MoKSA9PSBIVFRQVXJsRW5jb2RlZEltcGwuY2xhc3MgfHwgZWxlbWVudC5nZXRDbGFzcygpID09IEhUVFBVcmxSZXBsYWNlbWVudEltcGwuY2xhc3MpCi0gICAgICB7Ci0gICAgICAgIHZhbGlkYXRlSHR0cFVybChlbGVtZW50LCBwYXJlbnRzLCB2YWxJbmZvKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCllbGVtZW50OwotICAgICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9JTlZBTElEX0JJTkRJTkdfSU5QVVRfRUxFTUVOVCwgUVVPVEUgKyBlLmdldEVsZW1lbnRUeXBlKCkuZ2V0TG9jYWxQYXJ0KCkgKyBRVU9URSksCi0gICAgICAgICAgZWxlbWVudCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gaW4gdGhpcyBjYXNlIHRoZXJlIGhhcyBiZWVuIGEgSFRUUCBlbGVtZW50IGRlZmluZWQgdGhhdCBpcyBub3QgZGVmaW5lZCBmb3IgdGhpcyBwb2ludCBpbiB0aGUgSFRUUCBuYW1lc3BhY2UKLSAgICBlbHNlCi0gICAgewotICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCllbGVtZW50OwotICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoCi0gICAgICAgICAgX0VSUk9SX0lOVkFMSURfSFRUUF9FTEVNRU5UX0ZPUl9MT0NBVElPTiwKLSAgICAgICAgICBRVU9URSArIGUuZ2V0RWxlbWVudFR5cGUoKS5nZXRMb2NhbFBhcnQoKSArIFFVT1RFKSwKLSAgICAgICAgZWxlbWVudCk7Ci0gICAgfQotCi0gIH0KLQotICAvKioKLSAgICogRW5zdXJlIHRoYXQgdGhlIEhUVFAgYWRkcmVzcyBoYXMgYSB2YWx1ZSBzcGVjaWZpZWQgZm9yIGl0J3MgdXJpIGFuZCB0aGF0IHRoZXJlIGlzIGEgSFRUUCBCaW5kaW5nIGRlZmluZWQKLSAgICogZm9yIHRoZSBCaW5kaW5nIHNwZWNpZmllZCBpbiB0aGUgcG9ydC4KLSAgICogCi0gICAqIEBwYXJhbSBlbGVtZW50IFRoZSBIVFRQIGFkZHJlc3MgZWxlbWVudC4KLSAgICogQHBhcmFtIHBhcmVudHMgVGhlIGxpc3Qgb2YgcGFyZW50cyBvZiB0aGUgSFRUUCBhZGRyZXNzIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWxpZGF0b3Jjb250cm9sbGVyIFRoZSB2YWxpZGF0b3IgY29udHJvbGxlciBpbiBjaGFyZ2Ugb2YgdmFsaWRhdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHZhbGlkYXRlQWRkcmVzcyhPYmplY3QgZWxlbWVudCwgTGlzdCBwYXJlbnRzLCBJV1NETDExVmFsaWRhdGlvbkluZm8gdmFsSW5mbykKLSAgewotICAgIEhUVFBBZGRyZXNzSW1wbCBoYSA9IChIVFRQQWRkcmVzc0ltcGwpZWxlbWVudDsKLQotICAgIFN0cmluZyB1cmkgPSBoYS5nZXRMb2NhdGlvblVSSSgpOwotICAgIGlmICh1cmkgPT0gbnVsbCB8fCB1cmkuZXF1YWxzSWdub3JlQ2FzZShFTVBUWV9TVFJJTkcpKQotICAgIHsKLSAgICAgIHZhbEluZm8uYWRkRXJyb3IobWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX05PX0xPQ0FUSU9OX0ZPUl9BRERSRVNTKSwgaGEpOwotICAgIH0KLQotICAgIFBvcnQgcG9ydCA9IChQb3J0KXBhcmVudHMuZ2V0KDApOwotCi0gICAgQmluZGluZyBiaW5kaW5nID0gcG9ydC5nZXRCaW5kaW5nKCk7Ci0KLSAgICBpZiAoIWhhc0h0dHBCaW5kaW5nKGJpbmRpbmcpKQotICAgIHsKLSAgICAgIHZhbEluZm8uYWRkRXJyb3IoCi0gICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKAotICAgICAgICAgIF9FUlJPUl9OT19IVFRQQklORElOR19GT1JfQUREUkVTUywKLSAgICAgICAgICBRVU9URSArIGJpbmRpbmcuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSArIFFVT1RFLAotICAgICAgICAgIFFVT1RFICsgcG9ydC5nZXROYW1lKCkgKyBRVU9URSksCi0gICAgICAgIGhhKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogRW5zdXJlIHRoZSBIVFRQIEJpbmRpbmcgZGVmaW5lZCBpcyB2YWxpZC4gQSBIVFRQIEJpbmRpbmcgbXVzdCBoYXZlIGEgdmVyYiBvZiBHRVQgb3IgUE9TVC4KLSAgICogCi0gICAqIEBwYXJhbSBlbGVtZW50IFRoZSBIVFRQIGJpbmRpbmcgZWxlbWVudC4KLSAgICogQHBhcmFtIHBhcmVudHMgVGhlIGxpc3Qgb2YgcGFyZW50cyBvZiB0aGUgSFRUUCBiaW5kaW5nIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWxpZGF0b3Jjb250cm9sbGVyIFRoZSB2YWxpZGF0b3IgY29udHJvbGxlciBpbiBjaGFyZ2Ugb2YgdmFsaWRhdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHZhbGlkYXRlQmluZGluZyhPYmplY3QgZWxlbWVudCwgTGlzdCBwYXJlbnRzLCBJV1NETDExVmFsaWRhdGlvbkluZm8gdmFsSW5mbykKLSAgewotICAgIEhUVFBCaW5kaW5nSW1wbCBoYiA9IChIVFRQQmluZGluZ0ltcGwpZWxlbWVudDsKLQotICAgIFN0cmluZyB2ZXJiID0gaGIuZ2V0VmVyYigpOwotCi0gICAgaWYgKHZlcmIgIT0gbnVsbCAmJiAhdmVyYi5lcXVhbHMoR0VUKSAmJiAhdmVyYi5lcXVhbHMoUE9TVCkpCi0gICAgewotICAgICAgdmFsSW5mby5hZGRFcnJvcihtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfRVJST1JfSU5WQUxJRF9CSU5ESU5HX1ZFUkIsIFFVT1RFICsgdmVyYiArIFFVT1RFKSwgZWxlbWVudCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEFuIG9wZXJhdGlvbiBtdXN0IGhhdmUgYSBsb2NhdGlvbiBkZWZpbmVkLiBBIEhUVFAgQmluZGluZyBtdXN0IGJlIHNwZWNpZmllZCB0byB1c2UgYW4gb3BlcmF0aW9uLgotICAgKiAKLSAgICogQHBhcmFtIGVsZW1lbnQgVGhlIEhUVFAgb3BlcmF0aW9uIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBwYXJlbnRzIFRoZSBsaXN0IG9mIHBhcmVudHMgb2YgdGhlIEhUVFAgb3BlcmF0aW9uIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWxpZGF0b3Jjb250cm9sbGVyIFRoZSB2YWxpZGF0b3IgY29udHJvbGxlciBpbiBjaGFyZ2Ugb2YgdmFsaWRhdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHZhbGlkYXRlT3BlcmF0aW9uKE9iamVjdCBlbGVtZW50LCBMaXN0IHBhcmVudHMsIElXU0RMMTFWYWxpZGF0aW9uSW5mbyB2YWxJbmZvKQotICB7Ci0gICAgSFRUUE9wZXJhdGlvbiBobyA9IChIVFRQT3BlcmF0aW9uKWVsZW1lbnQ7Ci0KLSAgICBTdHJpbmcgbG9jYXRpb25VUkkgPSBoby5nZXRMb2NhdGlvblVSSSgpOwotCi0gICAgaWYgKGxvY2F0aW9uVVJJICE9IG51bGwgJiYgbG9jYXRpb25VUkkuZXF1YWxzSWdub3JlQ2FzZShFTVBUWV9TVFJJTkcpKQotICAgIHsKLSAgICAgIHZhbEluZm8uYWRkRXJyb3IobWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX0lOVkFMSURfTE9DQVRJT05fVVJJKSwgZWxlbWVudCk7Ci0gICAgfQotCi0gICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpcGFyZW50cy5nZXQoMSk7Ci0gICAgaWYgKCFoYXNIdHRwQmluZGluZyhiaW5kaW5nKSkKLSAgICB7Ci0gICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfRVJST1JfTk9fSFRUUEJJTkRJTkdfRk9SX09QRVJBVElPTiwgUVVPVEUgKyBiaW5kaW5nLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkgKyBRVU9URSksCi0gICAgICAgIGhvKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogVmFsaWRhdGUgdGhlIEhUVFAgdXJsUmVwbGFjZW1lbnQgb3IgdXJsRW5jb2RlZC4gRW5zdXJlIHRoZSBIVFRQIG9wZXJhdGlvbiBoYXMgYmVlbiBkZWZpbmVkLiAKLSAgICogRW5zdXJlIHRoYXQgZWl0aGVyIGVsZW1lbnQgaXMgdGhlIG9ubHkgZWxlbWVudCBzcGVjaWZpZWQuCi0gICAqIAotICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgSFRUUCBiaW5kaW5nIG9wZXJhdGlvbiBlbGVtZW50LgotICAgKiBAcGFyYW0gcGFyZW50cyBUaGUgbGlzdCBvZiBwYXJlbnRzIG9mIHRoZSBIVFRQIGJpbmRpbmcgb3BlcmF0aW9uIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWxpZGF0b3Jjb250cm9sbGVyIFRoZSB2YWxpZGF0b3IgY29udHJvbGxlciBpbiBjaGFyZ2Ugb2YgdmFsaWRhdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHZhbGlkYXRlSHR0cFVybChPYmplY3QgZWxlbWVudCwgTGlzdCBwYXJlbnRzLCBJV1NETDExVmFsaWRhdGlvbkluZm8gdmFsSW5mbykKLSAgewotICAgIEJpbmRpbmdPcGVyYXRpb24gb3BlcmF0aW9uID0gKEJpbmRpbmdPcGVyYXRpb24pcGFyZW50cy5nZXQoMSk7Ci0KLSAgICBTdHJpbmcgZWxlbWVudE5hbWU7Ci0gICAgaWYgKGVsZW1lbnQuZ2V0Q2xhc3MoKSA9PSBIVFRQVXJsRW5jb2RlZEltcGwuY2xhc3MpCi0gICAgewotICAgICAgZWxlbWVudE5hbWUgPSAidXJsRW5jb2RlZCI7Ci0gICAgfQotICAgIGVsc2UgaWYgKGVsZW1lbnQuZ2V0Q2xhc3MoKSA9PSBIVFRQVXJsUmVwbGFjZW1lbnRJbXBsLmNsYXNzKQotICAgIHsKLSAgICAgIGVsZW1lbnROYW1lID0gInVybFJlcGxhY2VtZW50IjsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGVsZW1lbnROYW1lID0gRU1QVFlfU1RSSU5HOwotICAgIH0KLQotICAgIEJpbmRpbmdJbnB1dCBpbnB1dCA9IChCaW5kaW5nSW5wdXQpcGFyZW50cy5nZXQoMCk7Ci0gICAgaWYgKGlucHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLnNpemUoKSAhPSAxKQotICAgIHsKLSAgICAgIHZhbEluZm8uYWRkRXJyb3IobWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX05PVF9PTkxZX0VMRU1FTlRfREVGSU5FRCwgZWxlbWVudE5hbWUpLCBlbGVtZW50KTsKLSAgICB9Ci0KLSAgICBpZiAoIWhhc0h0dHBPcGVyYXRpb24ob3BlcmF0aW9uKSkKLSAgICB7Ci0gICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfRVJST1JfTk9fSFRUUE9QRVJBVElPTl9GT1JfVVJMLCBRVU9URSArIG9wZXJhdGlvbi5nZXROYW1lKCkgKyBRVU9URSwgZWxlbWVudE5hbWUpLAotICAgICAgICBlbGVtZW50KTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogR2l2ZW4gYSBCaW5kaW5nT3BlcmF0aW9uIHRlbGxzIHdoZXRoZXIgaXQgaGFzIGEgSFRUUCBvcGVyYXRpb24gZGVmaW5lZCBmb3IgaXQuCi0gICAqIAotICAgKiBAcGFyYW0gYmluZGluZyBUaGUgSFRUUCBiaW5kaW5nIG9wZXJhdGlvbiBlbGVtZW50LgotICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlcmUgaXMgYW4gSFRUUCBvcGVyYXRpb24gZGVmaW5lZCwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHJvdGVjdGVkIGJvb2xlYW4gaGFzSHR0cE9wZXJhdGlvbihCaW5kaW5nT3BlcmF0aW9uIG9wZXJhdGlvbikKLSAgewotICAgIGlmIChvcGVyYXRpb24gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBMaXN0IGV4dGVsZW1zID0gb3BlcmF0aW9uLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgaWYgKGV4dGVsZW1zICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIEl0ZXJhdG9yIGlleHRlbGVtcyA9IGV4dGVsZW1zLml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChpZXh0ZWxlbXMuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKGlleHRlbGVtcy5uZXh0KCkuZ2V0Q2xhc3MoKSA9PSBIVFRQT3BlcmF0aW9uSW1wbC5jbGFzcykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICAqIEdpdmVuIGEgYmluZGluZyByZXR1cm5zIHRydWUgaWYgaXQgaGFzIGEgSFRUUCBiaW5kaW5nIGRlZmluZWQuCi0gICAqIAotICAgKiBAcGFyYW0gYmluZGluZyBUaGUgYmluZGluZyB0byBjaGVjay4KLSAgICogQHJldHVybiBUcnVlIGlmIHRoZXJlIGlzIGFuIEhUVFAgYmluZGluZyBkZWZpbmVkLgotICAgKi8KLSAgcHJvdGVjdGVkIGJvb2xlYW4gaGFzSHR0cEJpbmRpbmcoQmluZGluZyBiaW5kaW5nKQotICB7Ci0gICAgaWYgKGJpbmRpbmcgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBMaXN0IGV4dGVsZW1zID0gYmluZGluZy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIGlmIChleHRlbGVtcyAhPSBudWxsKQotICAgICAgewotICAgICAgICBJdGVyYXRvciBpZXh0ZWxlbXMgPSBleHRlbGVtcy5pdGVyYXRvcigpOwotICAgICAgICB3aGlsZSAoaWV4dGVsZW1zLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIGlmIChpZXh0ZWxlbXMubmV4dCgpLmdldENsYXNzKCkgPT0gSFRUUEJpbmRpbmdJbXBsLmNsYXNzKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvbWltZS9NSU1FVmFsaWRhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL21pbWUvTUlNRVZhbGlkYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTJhM2I0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEvbWltZS9NSU1FVmFsaWRhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEubWltZTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51dGlsLk1lc3NhZ2VHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuSVdTREwxMVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5JV1NETDExVmFsaWRhdGlvbkluZm87Ci0KLS8qKgotICogVGhlIE1JTUUgdmFsaWRhdG9yIHBsdWdzIGludG8gdGhlIFdTREwgdmFsaWRhdG9yIHRvIHByb3ZpZGUKLSAqIHZhbGlkYXRpb24gZm9yIGFsbCBlbGVtZW50cyBpbiBhIFdTREwgZG9jdW1lbnQgd2l0aGluIHRoZSBNSU1FIG5hbWVzcGFjZS4KLSAqLwotcHVibGljIGNsYXNzIE1JTUVWYWxpZGF0b3IgaW1wbGVtZW50cyBJV1NETDExVmFsaWRhdG9yCi17Ci0gIHByaXZhdGUgc3RhdGljIFN0cmluZyBNSU1FX1JFU09VUkNFX0JVTkRMRV9OQU1FID0gInZhbGlkYXRld3NkbG1pbWUiOwotICBwcm90ZWN0ZWQgTWVzc2FnZUdlbmVyYXRvciBtZXNzYWdlZ2VuZXJhdG9yOwotCi0gIHB1YmxpYyBNSU1FVmFsaWRhdG9yKCkKLSAgewotCVJlc291cmNlQnVuZGxlIHJiID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKE1JTUVfUkVTT1VSQ0VfQlVORExFX05BTUUsIExvY2FsZS5nZXREZWZhdWx0KCkpOwotCW1lc3NhZ2VnZW5lcmF0b3IgPSBuZXcgTWVzc2FnZUdlbmVyYXRvcihyYik7Ci0gIH0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuSVdTREwxMVZhbGlkYXRvciN2YWxpZGF0ZShqYXZhLmxhbmcuT2JqZWN0LCBqYXZhLnV0aWwuTGlzdCwgb3JnLmVjbGlwc2Uud3NkbC52YWxpZGF0ZS53c2RsMTEuSVdTREwxMVZhbGlkYXRpb25JbmZvKQotICAgKi8KLSAgcHVibGljIHZvaWQgdmFsaWRhdGUoT2JqZWN0IGVsZW1lbnQsIExpc3QgcGFyZW50cywgSVdTREwxMVZhbGlkYXRpb25JbmZvIHZhbEluZm8pCi0gIHsKLQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL3NvYXAvU09BUFZhbGlkYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS9zb2FwL1NPQVBWYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDdmODU3MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL3NvYXAvU09BUFZhbGlkYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjA0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5zb2FwOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0ZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5JbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5QYXJ0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUE9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51dGlsLk1lc3NhZ2VHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuSVdTREwxMVZhbGlkYXRpb25JbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLklXU0RMMTFWYWxpZGF0b3I7Ci0KLWltcG9ydCBjb20uaWJtLndzZGwuQmluZGluZ0ZhdWx0SW1wbDsKLWltcG9ydCBjb20uaWJtLndzZGwuQmluZGluZ0ltcGw7Ci1pbXBvcnQgY29tLmlibS53c2RsLkJpbmRpbmdJbnB1dEltcGw7Ci1pbXBvcnQgY29tLmlibS53c2RsLkJpbmRpbmdPcGVyYXRpb25JbXBsOwotaW1wb3J0IGNvbS5pYm0ud3NkbC5CaW5kaW5nT3V0cHV0SW1wbDsKLWltcG9ydCBjb20uaWJtLndzZGwuUG9ydEltcGw7Ci1pbXBvcnQgY29tLmlibS53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQWRkcmVzc0ltcGw7Ci1pbXBvcnQgY29tLmlibS53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZ0ltcGw7Ci1pbXBvcnQgY29tLmlibS53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keUltcGw7Ci1pbXBvcnQgY29tLmlibS53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQRmF1bHRJbXBsOwotaW1wb3J0IGNvbS5pYm0ud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0SW1wbDsKLWltcG9ydCBjb20uaWJtLndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJJbXBsOwotaW1wb3J0IGNvbS5pYm0ud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUE9wZXJhdGlvbkltcGw7Ci0KLS8qKgotICogVGhlIFNPQVAgdmFsaWRhdG9yIHBsdWdzIGludG8gdGhlIFdTREwgdmFsaWRhdG9yIHRvIHByb3ZpZGUKLSAqIHZhbGlkYXRpb24gZm9yIGFsbCBlbGVtZW50cyBpbiBhIFdTREwgZG9jdW1lbnQgd2l0aGluIHRoZSBTT0FQIG5hbWVzcGFjZS4KLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBTT0FQVmFsaWRhdG9yIGltcGxlbWVudHMgSVdTREwxMVZhbGlkYXRvcgotewotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgU09BUF9SRVNPVVJDRV9CVU5ETEVfTkFNRSA9ICJ2YWxpZGF0ZXdzZGxzb2FwIjsKLQkgIAotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfSU5WQUxJRF9QT1JUX0VMRU1FTlQgPSAiX0VSUk9SX0lOVkFMSURfUE9SVF9FTEVNRU5UIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0VSUk9SX0lOVkFMSURfQklORElOR19FTEVNRU5UID0gIl9FUlJPUl9JTlZBTElEX0JJTkRJTkdfRUxFTUVOVCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9JTlZBTElEX0JJTkRJTkdfT1BFUkFUSU9OX0VMRU1FTlQgPSAiX0VSUk9SX0lOVkFMSURfQklORElOR19PUEVSQVRJT05fRUxFTUVOVCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9JTlZBTElEX0hFQURFUl9CT0RZX0VMRU1FTlQgPSAiX0VSUk9SX0lOVkFMSURfSEVBREVSX0JPRFlfRUxFTUVOVCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9JTlZBTElEX0ZBVUxUX0VMRU1FTlQgPSAiX0VSUk9SX0lOVkFMSURfRkFVTFRfRUxFTUVOVCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9JTlZBTElEX1NPQVBfRUxFTUVOVF9GT1JfTE9DQVRJT04gPSAiX0VSUk9SX0lOVkFMSURfU09BUF9FTEVNRU5UX0ZPUl9MT0NBVElPTiI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9OT19MT0NBVElPTl9GT1JfQUREUkVTUyA9ICJfRVJST1JfTk9fTE9DQVRJT05fRk9SX0FERFJFU1MiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfTk9fU09BUEJJTkRJTkdfRk9SX0FERFJFU1MgPSAiX0VSUk9SX05PX1NPQVBCSU5ESU5HX0ZPUl9BRERSRVNTIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0VSUk9SX0lOVkFMSURfQklORElOR19TVFlMRSA9ICJfRVJST1JfSU5WQUxJRF9CSU5ESU5HX1NUWUxFIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0VSUk9SX0lOVkFMSURfQklORElOR19VUkkgPSAiX0VSUk9SX0lOVkFMSURfQklORElOR19VUkkiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfSU5WQUxJRF9PUEVSQVRJT05fU1RZTEUgPSAiX0VSUk9SX0lOVkFMSURfT1BFUkFUSU9OX1NUWUxFIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0VSUk9SX05PX1NPQVBCSU5ESU5HX0ZPUl9PUEVSQVRJT04gPSAiX0VSUk9SX05PX1NPQVBCSU5ESU5HX0ZPUl9PUEVSQVRJT04iOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfSU5WQUxJRF9CT0RZX0VOQ09ESU5HX1NUWUxFID0gIl9FUlJPUl9JTlZBTElEX0JPRFlfRU5DT0RJTkdfU1RZTEUiOwotICAvL3ByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9JTlZBTElEX0JPRFlfTkFNRVNQQUNFX0ZPUl9FTkNPREVEID0gIl9FUlJPUl9JTlZBTElEX0JPRFlfTkFNRVNQQUNFX0ZPUl9FTkNPREVEIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0VSUk9SX0lOVkFMSURfQk9EWV9VU0UgPSAiX0VSUk9SX0lOVkFMSURfQk9EWV9VU0UiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfSU5WQUxJRF9CT0RZX1BBUlRfTk9UX1RZUEUgPSAiX0VSUk9SX0lOVkFMSURfQk9EWV9QQVJUX05PVF9UWVBFIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0VSUk9SX0lOVkFMSURfQk9EWV9QQVJUX1VOREVGSU5FRCA9ICJfRVJST1JfSU5WQUxJRF9CT0RZX1BBUlRfVU5ERUZJTkVEIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0VSUk9SX05PX1NPQVBCSU5ESU5HX0ZPUl9CT0RZID0gIl9FUlJPUl9OT19TT0FQQklORElOR19GT1JfQk9EWSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9IRUFERVJfTUVTU0FHRV9VTkRFRklORUQgPSAiX0VSUk9SX0hFQURFUl9NRVNTQUdFX1VOREVGSU5FRCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9IRUFERVJfUEFSVF9VTkRFRklORUQgPSAiX0VSUk9SX0hFQURFUl9QQVJUX1VOREVGSU5FRCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9IRUFERVJfVVNFX1VOREVGSU5FRCA9ICJfRVJST1JfSEVBREVSX1VTRV9VTkRFRklORUQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfSEVBREVSX0VOQ09ESU5HU1RZTEVfVU5ERUZJTkVEID0gIl9FUlJPUl9IRUFERVJfRU5DT0RJTkdTVFlMRV9VTkRFRklORUQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfSEVBREVSX05BTUVTUEFDRV9VTkRFRklORUQgPSAiX0VSUk9SX0hFQURFUl9OQU1FU1BBQ0VfVU5ERUZJTkVEIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0VSUk9SX05PX1NPQVBCSU5ESU5HX0ZPUl9IRUFERVIgPSAiX0VSUk9SX05PX1NPQVBCSU5ESU5HX0ZPUl9IRUFERVIiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfSEVBREVSRkFVTFRfTUVTU0FHRV9VTkRFRklORUQgPSAiX0VSUk9SX0hFQURFUkZBVUxUX01FU1NBR0VfVU5ERUZJTkVEIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0VSUk9SX0hFQURFUkZBVUxUX1BBUlRfVU5ERUZJTkVEID0gIl9FUlJPUl9IRUFERVJGQVVMVF9QQVJUX1VOREVGSU5FRCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9IRUFERVJGQVVMVF9VU0VfVU5ERUZJTkVEID0gIl9FUlJPUl9IRUFERVJGQVVMVF9VU0VfVU5ERUZJTkVEIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0VSUk9SX0hFQURFUkZBVUxUX0VOQ09ESU5HU1RZTEVfVU5ERUZJTkVEID0gIl9FUlJPUl9IRUFERVJGQVVMVF9FTkNPRElOR1NUWUxFX1VOREVGSU5FRCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9FUlJPUl9IRUFERVJGQVVMVF9OQU1FU1BBQ0VfVU5ERUZJTkVEID0gIl9FUlJPUl9IRUFERVJGQVVMVF9OQU1FU1BBQ0VfVU5ERUZJTkVEIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0VSUk9SX0lOVkFMSURfRkFVTFRfTkFNRSA9ICJfRVJST1JfSU5WQUxJRF9GQVVMVF9OQU1FIjsKLSAgLy9wcml2YXRlIGZpbmFsIFN0cmluZyBfRVJST1JfSU5WQUxJRF9GQVVMVF9FTkNPRElOR19TVFlMRSA9ICJfRVJST1JfSU5WQUxJRF9GQVVMVF9FTkNPRElOR19TVFlMRSI7Ci0gIC8vcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX0VSUk9SX0lOVkFMSURfRkFVTFRfTkFNRVNQQUNFX0ZPUl9FTkNPREVEID0gIl9FUlJPUl9JTlZBTElEX0ZBVUxUX05BTUVTUEFDRV9GT1JfRU5DT0RFRCI7Ci0gIAotICBwcml2YXRlIGZpbmFsIFN0cmluZyBFTkNPREVEID0gImVuY29kZWQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBMSVRFUkFMID0gImxpdGVyYWwiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBSUEMgPSAicnBjIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgRE9DVU1FTlQgPSAiZG9jdW1lbnQiOwotICAKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgUVVPVEUgPSAiJyI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEVNUFRZX1NUUklORyA9ICIiOwotCi0gIHByb3RlY3RlZCBNZXNzYWdlR2VuZXJhdG9yIG1lc3NhZ2VnZW5lcmF0b3I7Ci0gCi0gIC8qKgotICAgKiBEZWZhdWx0IGNvbnN0cnVjdG9yLgotICAgKi8KLSAgcHVibGljIFNPQVBWYWxpZGF0b3IoKQotICB7Ci0JUmVzb3VyY2VCdW5kbGUgcmIgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoU09BUF9SRVNPVVJDRV9CVU5ETEVfTkFNRSwgTG9jYWxlLmdldERlZmF1bHQoKSk7Ci0JbWVzc2FnZWdlbmVyYXRvciA9IG5ldyBNZXNzYWdlR2VuZXJhdG9yKHJiKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuSVdTREwxMVZhbGlkYXRvciN2YWxpZGF0ZShqYXZhLmxhbmcuT2JqZWN0LCBqYXZhLnV0aWwuTGlzdCwgb3JnLmVjbGlwc2Uud3NkbC52YWxpZGF0ZS53c2RsMTEuSVdTREwxMVZhbGlkYXRpb25JbmZvKQotICAgKi8KLSAgcHVibGljIHZvaWQgdmFsaWRhdGUoT2JqZWN0IGVsZW1lbnQsIExpc3QgcGFyZW50cywgSVdTREwxMVZhbGlkYXRpb25JbmZvIHZhbEluZm8pCi0gIHsKLSAgICAvLyBQb3J0IFNPQVAgZGVmaW5pdGlvbgotICAgIC8vIG1ha2Ugc3VyZSBldmVyeSBwb3J0IGhhcyBvbmx5IG9uZSBhZGRyZXNzIGVsZW1lbnQgZGVmaW5lZAotICAgIC8vIGlmIGl0IGlzIGFuIGFkZHJlc3MgZWxlbWVudCwgdmFsaWRhdGUgaXQKLSAgICBpZiAocGFyZW50cy5nZXQoMCkuZ2V0Q2xhc3MoKSA9PSBQb3J0SW1wbC5jbGFzcykKLSAgICB7Ci0gICAgICBpZiAoZWxlbWVudC5nZXRDbGFzcygpID09IFNPQVBBZGRyZXNzSW1wbC5jbGFzcykKLSAgICAgIHsKLSAgICAgICAgdmFsaWRhdGVBZGRyZXNzKGVsZW1lbnQsIHBhcmVudHMsIHZhbEluZm8pOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBlID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWVsZW1lbnQ7Ci0gICAgICAgIHZhbEluZm8uYWRkRXJyb3IoCi0gICAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX0lOVkFMSURfUE9SVF9FTEVNRU5ULCBRVU9URSArIGUuZ2V0RWxlbWVudFR5cGUoKS5nZXRMb2NhbFBhcnQoKSArIFFVT1RFKSwgZWxlbWVudCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gQmluZGluZyBTT0FQIGRlZmluaXRpb24KLSAgICAvLyBBIFNPQVAgQmluZGluZyBtdXN0IGhhdmUgYSBzdHlsZSBvciBycGMgb3IgZG9jdW1lbnQgb3Igbm8gc3R5bGUgZGVmaW5lZCAtIGRlZmF1bHRzIHRvIGRvY3VtZW50Ci0gICAgLy8gTXVzdCBoYXZlIGEgdHJhbnNwb3J0IHVyaSBkZWZpbmVkIC0gY2hlY2sgaWYgdGhlIHVyaSBpcyBlbXB0eQotICAgIGVsc2UgaWYgKHBhcmVudHMuZ2V0KDApLmdldENsYXNzKCkgPT0gQmluZGluZ0ltcGwuY2xhc3MpCi0gICAgewotICAgICAgaWYgKGVsZW1lbnQuZ2V0Q2xhc3MoKSA9PSBTT0FQQmluZGluZ0ltcGwuY2xhc3MpCi0gICAgICB7Ci0gICAgICAgIHZhbGlkYXRlQmluZGluZyhlbGVtZW50LCBwYXJlbnRzLCB2YWxJbmZvKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCllbGVtZW50OwotICAgICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9JTlZBTElEX0JJTkRJTkdfRUxFTUVOVCwgUVVPVEUgKyBlLmdldEVsZW1lbnRUeXBlKCkuZ2V0TG9jYWxQYXJ0KCkgKyBRVU9URSksIGVsZW1lbnQpOwotICAgICAgfQotICAgIH0KLSAgICAvLyBCaW5kaW5nIE9wZXJhdGlvbiBTT0FQIGRlZmluaXRpb24KLSAgICAvLyBBIFNPQVAgT3BlcmF0aW9uIG1heSBoYXZlIGEgc3R5bGUgZGVmaW5lZCBpbiB3aGljaCBjYXNlIGl0IG11c3QgYmUgZG9jdW1lbnQgb3IgcnBjCi0gICAgLy8gYW5kIG1heSBoYXZlIGEgc29hcEFjdGlvbiB1cmkgZGVmaW5lZAotICAgIGVsc2UgaWYgKHBhcmVudHMuZ2V0KDApLmdldENsYXNzKCkgPT0gQmluZGluZ09wZXJhdGlvbkltcGwuY2xhc3MpCi0gICAgewotICAgICAgaWYgKGVsZW1lbnQuZ2V0Q2xhc3MoKSA9PSBTT0FQT3BlcmF0aW9uSW1wbC5jbGFzcykKLSAgICAgIHsKLSAgICAgICAgdmFsaWRhdGVPcGVyYXRpb24oZWxlbWVudCwgcGFyZW50cywgdmFsSW5mbyk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGUgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZWxlbWVudDsKLSAgICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZygKLSAgICAgICAgICAgICAgX0VSUk9SX0lOVkFMSURfQklORElOR19PUEVSQVRJT05fRUxFTUVOVCwKLSAgICAgICAgICAgIFFVT1RFICsgZS5nZXRFbGVtZW50VHlwZSgpLmdldExvY2FsUGFydCgpICsgUVVPVEUpLCBlbGVtZW50KTsKLSAgICAgIH0KLQotICAgIH0KLSAgICBlbHNlIGlmICgKLSAgICAgIHBhcmVudHMuZ2V0KDApLmdldENsYXNzKCkgPT0gQmluZGluZ0lucHV0SW1wbC5jbGFzcyB8fCBwYXJlbnRzLmdldCgwKS5nZXRDbGFzcygpID09IEJpbmRpbmdPdXRwdXRJbXBsLmNsYXNzKQotICAgIHsKLSAgICAgIC8vIHZhbGlkYXRlIHRoZSBTT0FQIGJvZHkKLSAgICAgIGlmIChlbGVtZW50LmdldENsYXNzKCkgPT0gU09BUEJvZHlJbXBsLmNsYXNzKQotICAgICAgewotICAgICAgICB2YWxpZGF0ZUJvZHkoZWxlbWVudCwgcGFyZW50cywgdmFsSW5mbyk7Ci0gICAgICB9Ci0gICAgICAvLyB2YWxpYXRlIHRoZSBTT0FQIGhlYWRlcgotICAgICAgZWxzZSBpZiAoZWxlbWVudC5nZXRDbGFzcygpID09IFNPQVBIZWFkZXJJbXBsLmNsYXNzKQotICAgICAgewotICAgICAgICB2YWxpZGF0ZUhlYWRlcihlbGVtZW50LCBwYXJlbnRzLCB2YWxJbmZvKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCllbGVtZW50OwotICAgICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9JTlZBTElEX0hFQURFUl9CT0RZX0VMRU1FTlQsIFFVT1RFICsgZS5nZXRFbGVtZW50VHlwZSgpLmdldExvY2FsUGFydCgpICsgUVVPVEUpLCBlbGVtZW50KTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAocGFyZW50cy5nZXQoMCkuZ2V0Q2xhc3MoKSA9PSBCaW5kaW5nRmF1bHRJbXBsLmNsYXNzKQotICAgIHsKLSAgICAgIGlmIChlbGVtZW50LmdldENsYXNzKCkgPT0gU09BUEZhdWx0SW1wbC5jbGFzcykKLSAgICAgIHsKLSAgICAgICAgdmFsaWRhdGVGYXVsdChlbGVtZW50LCBwYXJlbnRzLCB2YWxJbmZvKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCllbGVtZW50OwotICAgICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9JTlZBTElEX0ZBVUxUX0VMRU1FTlQsIFFVT1RFICsgZS5nZXRFbGVtZW50VHlwZSgpLmdldExvY2FsUGFydCgpICsgUVVPVEUpLCBlbGVtZW50KTsKLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gaW4gdGhpcyBjYXNlIHRoZXJlIGhhcyBiZWVuIGEgU09BUCBlbGVtZW50IGRlZmluZWQgdGhhdCBpcyBub3QgZGVmaW5lZCBmb3IgdGhpcyBwb2ludCBpbiB0aGUgU09BUCBuYW1lc3BhY2UKLSAgICBlbHNlCi0gICAgewotICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCllbGVtZW50OwotICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoCi0gICAgICAgICAgX0VSUk9SX0lOVkFMSURfU09BUF9FTEVNRU5UX0ZPUl9MT0NBVElPTiwKLSAgICAgICAgICBRVU9URSArIGUuZ2V0RWxlbWVudFR5cGUoKS5nZXRMb2NhbFBhcnQoKSArIFFVT1RFKSwgZWxlbWVudCk7Ci0gICAgfQotCi0gIH0KLQotICAvKioKLSAgICogRW5zdXJlIHRoYXQgdGhlIFNPQVAgYWRkcmVzcyBoYXMgYSB2YWx1ZSBzcGVjaWZpZWQgZm9yIGl0J3MgdXJpIGFuZCB0aGF0IHRoZSBiaW5kaW5nIGhhcyBhIFNPQVAKLSAgICogQmluZGluZyBkZWZpbmVkLgotICAgKiAKLSAgICogQHBhcmFtIGVsZW1lbnQgVGhlIFNPQVAgYWRkcmVzcyBlbGVtZW50LgotICAgKiBAcGFyYW0gcGFyZW50cyBBIGxpc3Qgb2YgcGFyZW50cyBvZiB0aGUgU09BUCBhZGRyZXNzIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWxJbmZvIFRoZSB2YWxpZGF0aW9uIGluZm8gZm9yIHRoaXMgdmFsaWRhdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHZhbGlkYXRlQWRkcmVzcyhPYmplY3QgZWxlbWVudCwgTGlzdCBwYXJlbnRzLCBJV1NETDExVmFsaWRhdGlvbkluZm8gdmFsSW5mbykKLSAgewotICAgIFNPQVBBZGRyZXNzSW1wbCBzYSA9IChTT0FQQWRkcmVzc0ltcGwpZWxlbWVudDsKLQotICAgIFN0cmluZyB1cmkgPSBzYS5nZXRMb2NhdGlvblVSSSgpOwotICAgIGlmICh1cmkgPT0gbnVsbCB8fCB1cmkuZXF1YWxzSWdub3JlQ2FzZShFTVBUWV9TVFJJTkcpKQotICAgIHsKLSAgICAgIHZhbEluZm8uYWRkRXJyb3IobWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX05PX0xPQ0FUSU9OX0ZPUl9BRERSRVNTKSwgc2EpOwotICAgIH0KLQotICAgIFBvcnQgcG9ydCA9IChQb3J0KXBhcmVudHMuZ2V0KDApOwotCi0gICAgQmluZGluZyBiaW5kaW5nID0gcG9ydC5nZXRCaW5kaW5nKCk7Ci0KLSAgICBpZiAoIWhhc1NvYXBCaW5kaW5nKGJpbmRpbmcpKQotICAgIHsKLSAgICAgIHZhbEluZm8uYWRkRXJyb3IoCi0gICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKAotICAgICAgICAgIF9FUlJPUl9OT19TT0FQQklORElOR19GT1JfQUREUkVTUywKLSAgICAgICAgICBRVU9URSArIGJpbmRpbmcuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSArIFFVT1RFLAotICAgICAgICAgIFFVT1RFICsgcG9ydC5nZXROYW1lKCkgKyBRVU9URSksIHNhKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogRW5zdXJlIHRoZSBTT0FQIEJpbmRpbmcgZGVmaW5lZCBpcyB2YWxpZC4gQSBTT0FQIEJpbmRpbmcgbXVzdCBoYXZlIGEgc3R5bGUgb2YgcnBjIG9yIGRvY3VtZW50Ci0gICAqIG9yIG5vIHN0eWxlIGRlZmluZWQgKGRlZmF1bHRzIHRvIGRvY3VtZW50LikgIEEgdmFsaWQgKG5vbiBlbXB0eSkgVVJJIG11c3QgYWxzbyBiZSBzcGVjaWZpZWQuCi0gICAqIAotICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgU09BUCBiaW5kaW5nIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBwYXJlbnRzIEEgbGlzdCBvZiBwYXJlbnRzIG9mIHRoZSBTT0FQIGJpbmRpbmcgZWxlbWVudC4KLSAgICogQHBhcmFtIHZhbEluZm8gVGhlIHZhbGlkYXRpb24gaW5mbyBmb3IgdGhpcyB2YWxpZGF0aW9uLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgdmFsaWRhdGVCaW5kaW5nKE9iamVjdCBlbGVtZW50LCBMaXN0IHBhcmVudHMsIElXU0RMMTFWYWxpZGF0aW9uSW5mbyB2YWxJbmZvKQotICB7Ci0gICAgU09BUEJpbmRpbmdJbXBsIHNiID0gKFNPQVBCaW5kaW5nSW1wbCllbGVtZW50OwotCi0gICAgU3RyaW5nIHN0eWxlID0gc2IuZ2V0U3R5bGUoKTsKLSAgICBTdHJpbmcgdXJpID0gc2IuZ2V0VHJhbnNwb3J0VVJJKCk7Ci0KLSAgICBpZiAoc3R5bGUgIT0gbnVsbCAmJiAhc3R5bGUuZXF1YWxzSWdub3JlQ2FzZShSUEMpICYmICFzdHlsZS5lcXVhbHNJZ25vcmVDYXNlKERPQ1VNRU5UKSkKLSAgICB7Ci0gICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfRVJST1JfSU5WQUxJRF9CSU5ESU5HX1NUWUxFLCBRVU9URSArIHNiLmdldFN0eWxlKCkgKyBRVU9URSksIGVsZW1lbnQpOwotICAgIH0KLSAgICBpZiAodXJpLmVxdWFsc0lnbm9yZUNhc2UoRU1QVFlfU1RSSU5HKSkKLSAgICB7Ci0gICAgICB2YWxJbmZvLmFkZEVycm9yKG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9JTlZBTElEX0JJTkRJTkdfVVJJKSwgZWxlbWVudCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEFuIG9wZXJhdGlvbiBtYXkgaGF2ZSBhIHN0eWxlIGRlZmluZWQuIElmIGl0IGlzIGRlZmluZWQgaXQgbXVzdCBiZSBycGMgb3IgZG9jdW1lbnQuIEl0IG1heSBhbHNvIGhhdmUgYQotICAgKiB1cmkgZGVmaW5lZCB3aGljaCBtdXN0IGJlIG5vbiBlbXB0eS4gIEl0IG1heSBoYXZlIGEgc29hcEFjdGlvbiBkZWZpbmVkIGFzIHdlbGwuCi0gICAqIAotICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgU09BUCBvcGVyYXRpb24gZWxlbWVudC4KLSAgICogQHBhcmFtIHBhcmVudHMgQSBsaXN0IG9mIHBhcmVudHMgb2YgdGhlIFNPQVAgb3BlcmF0aW9uIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWxJbmZvIFRoZSB2YWxpZGF0aW9uIGluZm8gZm9yIHRoaXMgdmFsaWRhdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHZhbGlkYXRlT3BlcmF0aW9uKE9iamVjdCBlbGVtZW50LCBMaXN0IHBhcmVudHMsIElXU0RMMTFWYWxpZGF0aW9uSW5mbyB2YWxJbmZvKQotICB7Ci0gICAgU09BUE9wZXJhdGlvbiBzbyA9IChTT0FQT3BlcmF0aW9uKWVsZW1lbnQ7Ci0KLSAgICBTdHJpbmcgc29hcFN0eWxlID0gc28uZ2V0U3R5bGUoKTsKLQotICAgIGlmIChzb2FwU3R5bGUgIT0gbnVsbCAmJiAhc29hcFN0eWxlLmVxdWFsc0lnbm9yZUNhc2UoUlBDKSAmJiAhc29hcFN0eWxlLmVxdWFsc0lnbm9yZUNhc2UoRE9DVU1FTlQpKQotICAgIHsKLSAgICAgIHZhbEluZm8uYWRkRXJyb3IobWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX0lOVkFMSURfT1BFUkFUSU9OX1NUWUxFKSwgZWxlbWVudCk7Ci0gICAgfQotCi0gICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpcGFyZW50cy5nZXQoMSk7Ci0gICAgaWYgKCFoYXNTb2FwQmluZGluZyhiaW5kaW5nKSkKLSAgICB7Ci0gICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfRVJST1JfTk9fU09BUEJJTkRJTkdfRk9SX09QRVJBVElPTiwgUVVPVEUgKyBiaW5kaW5nLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkgKyBRVU9URSksIHNvKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogVmFsaWRhdGUgdGhlIFNPQVAgYm9keS4gSWYgZW5jb2RlZCBhIGJvZHkgbXVzdCBoYXZlIGFuIGVuY29kaW5nU3R5bGUuIEFsc28sCi0gICAqIGlmIHNwZWNpZmllZCwgYWxsIG9mIHRoZSBwYXJ0cyBsaXN0ZWQgbXVzdCBiZSBkZWZpbmVkIHBhcnRzIGFuZCBpbiB0aGUgZW5jb2RpbmcgdXNlIGNhc2UsIHRoZSBwYXJ0cwotICAgKiBtdXN0IGhhdmUgdHlwZXMgZGVmaW5lZC4KLSAgICogCi0gICAqIEBwYXJhbSBlbGVtZW50IFRoZSBTT0FQIGJvZHkgZWxlbWVudC4KLSAgICogQHBhcmFtIHBhcmVudHMgQSBsaXN0IG9mIHBhcmVudHMgb2YgdGhlIFNPQVAgYm9keSBlbGVtZW50LgotICAgKiBAcGFyYW0gdmFsSW5mbyBUaGUgdmFsaWRhdGlvbiBpbmZvIGZvciB0aGlzIHZhbGlkYXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2YWxpZGF0ZUJvZHkoT2JqZWN0IGVsZW1lbnQsIExpc3QgcGFyZW50cywgSVdTREwxMVZhbGlkYXRpb25JbmZvIHZhbEluZm8pCi0gIHsKLSAgICBTT0FQQm9keUltcGwgc2IgPSAoU09BUEJvZHlJbXBsKWVsZW1lbnQ7Ci0KLSAgICBTdHJpbmcgdXNlID0gc2IuZ2V0VXNlKCk7Ci0KLSAgICAvLyBpZiB0aGUgdXNlID0gZW5jb2RlZCB0aGVuIHRoZXJlIG11c3QgYmUgZW5jb2RpbmdTdHlsZXMuCi0gICAgaWYgKHVzZSAhPSBudWxsICYmIHVzZS5lcXVhbHNJZ25vcmVDYXNlKEVOQ09ERUQpKQotICAgIHsKLSAgICAgIExpc3QgZW5jb2RpbmdTdHlsZXMgPSBzYi5nZXRFbmNvZGluZ1N0eWxlcygpOwotICAgICAgaWYgKGVuY29kaW5nU3R5bGVzID09IG51bGwgfHwgZW5jb2RpbmdTdHlsZXMuc2l6ZSgpID09IDApCi0gICAgICB7Ci0gICAgICAgIHZhbEluZm8uYWRkRXJyb3IobWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX0lOVkFMSURfQk9EWV9FTkNPRElOR19TVFlMRSksIHNiKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAodXNlICE9IG51bGwgJiYgIXVzZS5lcXVhbHNJZ25vcmVDYXNlKExJVEVSQUwpKQotICAgIHsKLSAgICAgIHZhbEluZm8uYWRkRXJyb3IobWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX0lOVkFMSURfQk9EWV9VU0UsIFFVT1RFICsgdXNlICsgUVVPVEUpLCBzYik7Ci0gICAgfQotCi0gICAgLy9DaGVjayB0aGF0IHRoZSBwYXJ0cyBhcmUgdmFsaWQKLSAgICAvLyBwYXJ0cyBtdXN0IGJlIGRlZmluZWQgaW4gdGhlIG1lc3NhZ2Ugc3BlY2lmaWVkIGZvciB0aGUgb3BlcmF0aW9uCi0gICAgTGlzdCBwYXJ0cyA9IHNiLmdldFBhcnRzKCk7Ci0KLSAgICBpZiAocGFydHMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBwYXJ0c0l0ZXJhdG9yID0gcGFydHMuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChwYXJ0c0l0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHBhcnQgPSAoU3RyaW5nKXBhcnRzSXRlcmF0b3IubmV4dCgpOwotICAgICAgICBCaW5kaW5nT3BlcmF0aW9uIGJvID0gKEJpbmRpbmdPcGVyYXRpb24pcGFyZW50cy5nZXQoMSk7Ci0gICAgICAgIE9wZXJhdGlvbiBvID0gYm8uZ2V0T3BlcmF0aW9uKCk7Ci0KLSAgICAgICAgaWYgKG8gIT0gbnVsbCAmJiAhby5pc1VuZGVmaW5lZCgpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gZ2V0IHRoZSBtZXNzYWdlIGZyb20gdGhlIGlucHV0IG9yIG91dHB1dCBpZiBpdCBleGlzdHMKLSAgICAgICAgICBNZXNzYWdlIG1lc3MgPSBudWxsOwotICAgICAgICAgIGlmIChwYXJlbnRzLmdldCgwKS5nZXRDbGFzcygpID09IEJpbmRpbmdJbnB1dEltcGwuY2xhc3MpCi0gICAgICAgICAgewotICAgICAgICAgICAgSW5wdXQgaW5wdXQgPSBvLmdldElucHV0KCk7Ci0KLSAgICAgICAgICAgIGlmIChpbnB1dCAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBtZXNzID0gaW5wdXQuZ2V0TWVzc2FnZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIGlmIChwYXJlbnRzLmdldCgwKS5nZXRDbGFzcygpID09IEJpbmRpbmdPdXRwdXRJbXBsLmNsYXNzKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIE91dHB1dCBvdXRwdXQgPSBvLmdldE91dHB1dCgpOwotCi0gICAgICAgICAgICBpZiAob3V0cHV0ICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIG1lc3MgPSBvdXRwdXQuZ2V0TWVzc2FnZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLQotICAgICAgICAgIGlmIChtZXNzICE9IG51bGwgJiYgIW1lc3MuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBQYXJ0IHAgPSBtZXNzLmdldFBhcnQocGFydCk7Ci0KLSAgICAgICAgICAgIGlmIChwICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIC8vIGlmIHRoZSB1c2UgaXMgZW5jb2RlZCB0aGUgcGFydHMgbXVzdCBhbGwgaGF2ZSBhIHR5cGUgZGVmaW5lZAotICAgICAgICAgICAgICBpZiAodXNlICE9IG51bGwgJiYgdXNlLmVxdWFsc0lnbm9yZUNhc2UoRU5DT0RFRCkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAocC5nZXRUeXBlTmFtZSgpID09IG51bGwpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgLy8gcGFydCBlcnJvciAtIHBhcnQgbmVlZHMgdG8gYmUgdHlwZSBhbmQgaXNuJ3QJCi0gICAgICAgICAgICAgICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICAgICAgICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfRVJST1JfSU5WQUxJRF9CT0RZX1BBUlRfTk9UX1RZUEUsIFFVT1RFICsgcGFydCArIFFVT1RFKSwgc2IpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvL3BhcnQgZXJyb3IgLSBwYXJ0IGlzbid0IGRlZmluZWQJCi0gICAgICAgICAgICAgIHZhbEluZm8uYWRkRXJyb3IoCi0gICAgICAgICAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX0lOVkFMSURfQk9EWV9QQVJUX1VOREVGSU5FRCwgUVVPVEUgKyBwYXJ0ICsgUVVPVEUpLCBzYik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvL3BhcnQgZXJyb3IgLSBpbnB1dCBpc24ndCBkZWZpbmVkCi0gICAgICAgICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfRVJST1JfSU5WQUxJRF9CT0RZX1BBUlRfVU5ERUZJTkVELCBRVU9URSArIHBhcnQgKyBRVU9URSksIHNiKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgLy8gcGFydHMgZXJyb3IgLSBvcGVyYXRpb24gaXNuJ3QgZGVmaW5lZAotICAgICAgICAgIHZhbEluZm8uYWRkRXJyb3IoCi0gICAgICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfRVJST1JfSU5WQUxJRF9CT0RZX1BBUlRfVU5ERUZJTkVELCBRVU9URSArIHBhcnQgKyBRVU9URSksIHNiKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKXBhcmVudHMuZ2V0KDIpOwotICAgIGlmICghaGFzU29hcEJpbmRpbmcoYmluZGluZykpCi0gICAgewotICAgICAgdmFsSW5mby5hZGRFcnJvcigKLSAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX05PX1NPQVBCSU5ESU5HX0ZPUl9CT0RZLCBRVU9URSArIGJpbmRpbmcuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSArIFFVT1RFKSwgc2IpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBBIFNPQVAgaGVhZGVyIG11c3QgaGF2ZSBhIG1lc3NhZ2UsIHBhcnQgYW5kIHVzZSBkZWZpbmVkLiBJZiB0aGUgdXNlIGlzIGVuY29kZWQsIG11c3QKLSAgICogYWxzbyBoYXZlIGEgbm9uLWVtcHR5IGVuY29kaW5nU3R5bGUgYW5kIG5hbWVzcGFjZSBkZWZpbmVkLgotICAgKiBBIFNPQVAgaGVhZGVyIG1heSBoYXZlIGhlYWRlcmZhdWx0cyBkZWZpbmVkIGFzIHdlbGwuCi0gICAqIAotICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgU09BUCBoZWFkZXIgZWxlbWVudC4KLSAgICogQHBhcmFtIHBhcmVudHMgQSBsaXN0IG9mIHBhcmVudHMgb2YgdGhlIFNPQVAgaGVhZGVyIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWxJbmZvIFRoZSB2YWxpZGF0aW9uIGluZm8gZm9yIHRoaXMgdmFsaWRhdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHZhbGlkYXRlSGVhZGVyKE9iamVjdCBlbGVtZW50LCBMaXN0IHBhcmVudHMsIElXU0RMMTFWYWxpZGF0aW9uSW5mbyB2YWxJbmZvKQotICB7Ci0gICAgU09BUEhlYWRlckltcGwgc29hcEhlYWRlciA9IChTT0FQSGVhZGVySW1wbCllbGVtZW50OwotCi0gICAgUU5hbWUgbWVzc2FnZVFOYW1lID0gc29hcEhlYWRlci5nZXRNZXNzYWdlKCk7Ci0gICAgTWVzc2FnZSBtZXNzYWdlID0gKChEZWZpbml0aW9uKXBhcmVudHMuZ2V0KHBhcmVudHMuc2l6ZSgpIC0gMSkpLmdldE1lc3NhZ2UobWVzc2FnZVFOYW1lKTsKLSAgICBpZiAobWVzc2FnZSA9PSBudWxsKQotICAgIHsKLSAgICAgIC8vIG1lc3NhZ2UgdW5kZWZpbmVkCi0gICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfRVJST1JfSEVBREVSX01FU1NBR0VfVU5ERUZJTkVELCBRVU9URSArIG1lc3NhZ2VRTmFtZS5nZXRMb2NhbFBhcnQoKSArIFFVT1RFKSwgc29hcEhlYWRlcik7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBTdHJpbmcgcGFydG5hbWUgPSBzb2FwSGVhZGVyLmdldFBhcnQoKTsKLSAgICAgIFBhcnQgcGFydCA9IG1lc3NhZ2UuZ2V0UGFydChwYXJ0bmFtZSk7Ci0gICAgICBpZiAocGFydCA9PSBudWxsKQotICAgICAgewotICAgICAgICAvLyBwYXJ0IHVuZGVmaW5lZAotICAgICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKAotICAgICAgICAgICAgX0VSUk9SX0hFQURFUl9QQVJUX1VOREVGSU5FRCwKLSAgICAgICAgICAgIFFVT1RFICsgcGFydG5hbWUgKyBRVU9URSwKLSAgICAgICAgICAgIFFVT1RFICsgbWVzc2FnZVFOYW1lLmdldExvY2FsUGFydCgpICsgUVVPVEUpLCBzb2FwSGVhZGVyKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBTdHJpbmcgdXNlID0gc29hcEhlYWRlci5nZXRVc2UoKTsKLSAgICBpZiAodXNlICE9IG51bGwgJiYgIXVzZS5lcXVhbHNJZ25vcmVDYXNlKExJVEVSQUwpICYmICF1c2UuZXF1YWxzSWdub3JlQ2FzZShFTkNPREVEKSkKLSAgICB7Ci0gICAgICAvLyB1c2UgdW5kZWZpbmVkCi0gICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfRVJST1JfSEVBREVSX1VTRV9VTkRFRklORUQsIFFVT1RFICsgdXNlICsgUVVPVEUpLCBzb2FwSGVhZGVyKTsKLSAgICB9Ci0KLSAgICBpZiAodXNlLmVxdWFsc0lnbm9yZUNhc2UoRU5DT0RFRCkpCi0gICAgewotICAgICAgTGlzdCBlbmNvZGluZ1N0eWxlcyA9IHNvYXBIZWFkZXIuZ2V0RW5jb2RpbmdTdHlsZXMoKTsKLSAgICAgIGlmIChlbmNvZGluZ1N0eWxlcyA9PSBudWxsIHx8IGVuY29kaW5nU3R5bGVzLmlzRW1wdHkoKSkKLSAgICAgIHsKLSAgICAgICAgLy8gbm8gZW5jb2RpbmdTdHlsZSBkZWZpbmVkCi0gICAgICAgIHZhbEluZm8uYWRkRXJyb3IobWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX0hFQURFUl9FTkNPRElOR1NUWUxFX1VOREVGSU5FRCksIHNvYXBIZWFkZXIpOwotICAgICAgfQotCi0gICAgICBTdHJpbmcgbmFtZXNwYWNlID0gc29hcEhlYWRlci5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICAgIGlmIChuYW1lc3BhY2UgPT0gbnVsbCB8fCBuYW1lc3BhY2UuZXF1YWxzSWdub3JlQ2FzZShFTVBUWV9TVFJJTkcpKQotICAgICAgewotICAgICAgICAvLyBubyBuYW1lc3BhY2UgZGVmaW5lZAotICAgICAgICB2YWxJbmZvLmFkZEVycm9yKG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9IRUFERVJfTkFNRVNQQUNFX1VOREVGSU5FRCksIHNvYXBIZWFkZXIpOwotICAgICAgfQotICAgIH0KLQotICAgIExpc3QgaGVhZGVyRmF1bHRzID0gc29hcEhlYWRlci5nZXRTT0FQSGVhZGVyRmF1bHRzKCk7Ci0gICAgaWYgKGhlYWRlckZhdWx0cyAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGloZWFkZXJGYXVsdHMgPSBoZWFkZXJGYXVsdHMuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpaGVhZGVyRmF1bHRzLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgdmFsaWRhdGVIZWFkZXJGYXVsdChpaGVhZGVyRmF1bHRzLm5leHQoKSwgcGFyZW50cywgdmFsSW5mbyk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpcGFyZW50cy5nZXQoMik7Ci0gICAgaWYgKCFoYXNTb2FwQmluZGluZyhiaW5kaW5nKSkKLSAgICB7Ci0gICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfRVJST1JfTk9fU09BUEJJTkRJTkdfRk9SX0hFQURFUiwgUVVPVEUgKyBiaW5kaW5nLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkgKyBRVU9URSksIHNvYXBIZWFkZXIpOwotICAgIH0KLSAgfQotICAKLSAgLyoqCi0gICAqIEEgU09BUCBoZWFkZXJmYXVsdCBtdXN0IGhhdmUgYSBtZXNzYWdlLCBwYXJ0IGFuZCB1c2UgZGVmaW5lZC4gSWYgdGhlIHVzZSBpcyBlbmNvZGVkLCBtdXN0Ci0gICAqIGFsc28gaGF2ZSBhIG5vbi1lbXB0eSBlbmNvZGluZ1N0eWxlIGFuZCBuYW1lc3BhY2UgZGVmaW5lZC4KLSAgICogCi0gICAqIEBwYXJhbSBlbGVtZW50IFRoZSBTT0FQIGhlYWRlciBmYXVsdCBlbGVtZW50LgotICAgKiBAcGFyYW0gcGFyZW50cyBBIGxpc3Qgb2YgcGFyZW50cyBvZiB0aGUgU09BUCBoZWFkZXIgZmF1bHQgZWxlbWVudC4KLSAgICogQHBhcmFtIHZhbEluZm8gVGhlIHZhbGlkYXRpb24gaW5mbyBmb3IgdGhpcyB2YWxpZGF0aW9uLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgdmFsaWRhdGVIZWFkZXJGYXVsdChPYmplY3QgZWxlbWVudCwgTGlzdCBwYXJlbnRzLCBJV1NETDExVmFsaWRhdGlvbkluZm8gdmFsSW5mbykKLSAgewotICAgIFNPQVBIZWFkZXJGYXVsdEltcGwgc29hcEhlYWRlckZhdWx0ID0gKFNPQVBIZWFkZXJGYXVsdEltcGwpZWxlbWVudDsKLQotICAgIFFOYW1lIG1lc3NhZ2VRTmFtZSA9IHNvYXBIZWFkZXJGYXVsdC5nZXRNZXNzYWdlKCk7Ci0gICAgTWVzc2FnZSBtZXNzYWdlID0gKChEZWZpbml0aW9uKXBhcmVudHMuZ2V0KHBhcmVudHMuc2l6ZSgpIC0gMSkpLmdldE1lc3NhZ2UobWVzc2FnZVFOYW1lKTsKLSAgICBpZiAobWVzc2FnZSA9PSBudWxsKQotICAgIHsKLSAgICAgIC8vIG1lc3NhZ2UgdW5kZWZpbmVkCi0gICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfRVJST1JfSEVBREVSRkFVTFRfTUVTU0FHRV9VTkRFRklORUQsIFFVT1RFICsgbWVzc2FnZVFOYW1lLmdldExvY2FsUGFydCgpICsgUVVPVEUpLCBzb2FwSGVhZGVyRmF1bHQpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgU3RyaW5nIHBhcnRuYW1lID0gc29hcEhlYWRlckZhdWx0LmdldFBhcnQoKTsKLSAgICAgIFBhcnQgcGFydCA9IG1lc3NhZ2UuZ2V0UGFydChwYXJ0bmFtZSk7Ci0gICAgICBpZiAocGFydCA9PSBudWxsKQotICAgICAgewotICAgICAgICAvLyBwYXJ0IHVuZGVmaW5lZAotICAgICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKAotICAgICAgICAgICAgX0VSUk9SX0hFQURFUkZBVUxUX1BBUlRfVU5ERUZJTkVELAotICAgICAgICAgICAgUVVPVEUgKyBwYXJ0bmFtZSArIFFVT1RFLAotICAgICAgICAgICAgUVVPVEUgKyBtZXNzYWdlUU5hbWUuZ2V0TG9jYWxQYXJ0KCkgKyBRVU9URSksIHNvYXBIZWFkZXJGYXVsdCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgU3RyaW5nIHVzZSA9IHNvYXBIZWFkZXJGYXVsdC5nZXRVc2UoKTsKLSAgICBpZiAodXNlICE9IG51bGwgJiYgIXVzZS5lcXVhbHNJZ25vcmVDYXNlKExJVEVSQUwpICYmICF1c2UuZXF1YWxzSWdub3JlQ2FzZShFTkNPREVEKSkKLSAgICB7Ci0gICAgICAvLyB1c2UgdW5kZWZpbmVkCi0gICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICBtZXNzYWdlZ2VuZXJhdG9yLmdldFN0cmluZyhfRVJST1JfSEVBREVSRkFVTFRfVVNFX1VOREVGSU5FRCwgUVVPVEUgKyB1c2UgKyBRVU9URSksIHNvYXBIZWFkZXJGYXVsdCk7Ci0gICAgfQotCi0gICAgaWYgKHVzZS5lcXVhbHNJZ25vcmVDYXNlKEVOQ09ERUQpKQotICAgIHsKLSAgICAgIExpc3QgZW5jb2RpbmdTdHlsZXMgPSBzb2FwSGVhZGVyRmF1bHQuZ2V0RW5jb2RpbmdTdHlsZXMoKTsKLSAgICAgIGlmIChlbmNvZGluZ1N0eWxlcyA9PSBudWxsIHx8IGVuY29kaW5nU3R5bGVzLmlzRW1wdHkoKSkKLSAgICAgIHsKLSAgICAgICAgLy8gbm8gZW5jb2RpbmdTdHlsZSBkZWZpbmVkCi0gICAgICAgIHZhbEluZm8uYWRkRXJyb3IoCi0gICAgICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX0VSUk9SX0hFQURFUkZBVUxUX0VOQ09ESU5HU1RZTEVfVU5ERUZJTkVEKSwgc29hcEhlYWRlckZhdWx0KTsKLSAgICAgIH0KLQotICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IHNvYXBIZWFkZXJGYXVsdC5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICAgIGlmIChuYW1lc3BhY2UgPT0gbnVsbCB8fCBuYW1lc3BhY2UuZXF1YWxzSWdub3JlQ2FzZShFTVBUWV9TVFJJTkcpKQotICAgICAgewotICAgICAgICAvLyBubyBuYW1lc3BhY2UgZGVmaW5lZAotICAgICAgICB2YWxJbmZvLmFkZEVycm9yKAotICAgICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9IRUFERVJGQVVMVF9OQU1FU1BBQ0VfVU5ERUZJTkVEKSwgc29hcEhlYWRlckZhdWx0KTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgKiBWYWxpZGF0ZSB0aGUgU09BUCBmYXVsdC4gQSBTT0FQIGZhdWx0IG11c3QgaGF2ZSBhIG5hbWUgZGVmaW5lZCB0aGF0IGNvcnJlc3BvbmRzIHdpdGggdGhlIG5hbWUKLSAgKiBzcGVjaWZpZWQgaW4gdGhlIHBvcnRUeXBlLiAgSWYgZW5jb2RlZCBhIGZhdWx0IG11c3QgaGF2ZSBhbiBlbmNvZGluZ1N0eWxlIGFuZCBhIG5hbWVzcGFjZVVSSS4gCi0gICogCi0gICogQHBhcmFtIGVsZW1lbnQgVGhlIFNPQVAgZmF1bHQgZWxlbWVudC4KLSAgICogQHBhcmFtIHBhcmVudHMgQSBsaXN0IG9mIHBhcmVudHMgb2YgdGhlIFNPQVAgZmF1bHQgZWxlbWVudC4KLSAgICogQHBhcmFtIHZhbGlkYXRpb25JbmZvIFRoZSB2YWxpZGF0aW9uIGluZm8gZm9yIHRoaXMgdmFsaWRhdGlvbi4KLSAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgdmFsaWRhdGVGYXVsdChPYmplY3QgZWxlbWVudCwgTGlzdCBwYXJlbnRzLCBJV1NETDExVmFsaWRhdGlvbkluZm8gdmFsSW5mbykKLSAgewotICAgIFNPQVBGYXVsdEltcGwgZmF1bHQgPSAoU09BUEZhdWx0SW1wbCllbGVtZW50OwotCi0gICAgU3RyaW5nIG5hbWUgPSBmYXVsdC5nZXROYW1lKCk7Ci0KLSAgICBTdHJpbmcgcGFyZW50TmFtZSA9ICgoQmluZGluZ0ZhdWx0KXBhcmVudHMuZ2V0KDApKS5nZXROYW1lKCk7Ci0KLSAgICBpZiAoIW5hbWUuZXF1YWxzKHBhcmVudE5hbWUpKQotICAgIHsKLSAgICAgIHZhbEluZm8uYWRkRXJyb3IoCi0gICAgICAgIG1lc3NhZ2VnZW5lcmF0b3IuZ2V0U3RyaW5nKF9FUlJPUl9JTlZBTElEX0ZBVUxUX05BTUUsIFFVT1RFICsgbmFtZSArIFFVT1RFLCBRVU9URSArIHBhcmVudE5hbWUgKyBRVU9URSksIGZhdWx0KTsKLSAgICB9Ci0KLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaGFzU29hcEJpbmRpbmcuIC0gaGVscGVyIE1ldGhvZAotICAgKiBHaXZlbiBhIGJpbmRpbmcgcmV0dXJucyB0cnVlIGlmIGl0IGhhcyBhIFNPQVAgYmluZGluZyBkZWZpbmVkLgotICAgKiAKLSAgICogQHBhcmFtIGJpbmRpbmcgLSB0aGUgU09BUCBiaW5kaW5nIHRvIGNoZWNrCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiBhIGJpbmRpbmcgaGFzIGEgU09BUCBiaW5kaW5nIGRlZmluZWQsIGZhbHNlIG90aGVyd2lzZQotICAgKi8KLSAgcHJvdGVjdGVkIGJvb2xlYW4gaGFzU29hcEJpbmRpbmcoQmluZGluZyBiaW5kaW5nKQotICB7Ci0gICAgaWYgKGJpbmRpbmcgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBMaXN0IGV4dGVsZW1zID0gYmluZGluZy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIGlmIChleHRlbGVtcyAhPSBudWxsKQotICAgICAgewotICAgICAgICBJdGVyYXRvciBpZXh0ZWxlbXMgPSBleHRlbGVtcy5pdGVyYXRvcigpOwotICAgICAgICB3aGlsZSAoaWV4dGVsZW1zLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIGlmIChpZXh0ZWxlbXMubmV4dCgpLmdldENsYXNzKCkgPT0gU09BUEJpbmRpbmdJbXBsLmNsYXNzKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEveHNkL0RPTUVycm9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL3hzZC9ET01FcnJvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjliMTExLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEveHNkL0RPTUVycm9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEueHNkOwotCi0vKioKLSAqIFRoaXMgaW50ZXJmYWNlIGlzIHVzZWQgdG8gc2lnbmlmeSBlcnJvciBsZXZlbHMgdGhhdCBhcmUgdGhlIHJlc3VsdCBvZgotICogWE1MUGFyc2VFeGNlcHRpb24uIFRoZXkgY29uY2VwdHVhbGx5IGNvcnJlc3BvbmQgdG8gb3JnLnczYy5kb20uRE9NRXJyb3IgYnV0Ci0gKiB3ZSB1c2Ugb3VyIG93biBpbnRlcmZhY2UsIHNpbmNlIERPTUVycm9yIGlzIG5vdCBpbiBKYXZhIDEuNCwgYW5kIGl0cwotICogcGFja2FnZSBjaGFuZ2VzIGZyb20gWGVyY2VzIDIuNi4yIGFuZCBYZXJjZXMgMi43LjAuCi0gKi8KLQotcHVibGljIGludGVyZmFjZSBET01FcnJvciB7Ci0JaW50IFNFVkVSSVRZX1dBUk5JTkcgPSAxOwotCWludCBTRVZFUklUWV9FUlJPUiA9IDI7Ci0JaW50IFNFVkVSSVRZX0ZBVEFMX0VSUk9SID0gMzsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEveHNkL0ZpbGVFbnRpdHlSZXNvbHZlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS94c2QvRmlsZUVudGl0eVJlc29sdmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmNTM5MmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS94c2QvRmlsZUVudGl0eVJlc29sdmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEueHNkOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhNTFJlc291cmNlSWRlbnRpZmllcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE5JRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MRW50aXR5UmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxJbnB1dFNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnV0aWwuTGF6eVVSTElucHV0U3RyZWFtOwotCi0vKioKLSAqIEVudGl0eSByZXNvbHZlIHRvIHJlc29sdmUgZmlsZSBlbnRpdGllcy4KLSAqLwotcHVibGljIGNsYXNzIEZpbGVFbnRpdHlSZXNvbHZlciBpbXBsZW1lbnRzIFhNTEVudGl0eVJlc29sdmVyCi17Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxFbnRpdHlSZXNvbHZlciNyZXNvbHZlRW50aXR5KG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTUxSZXNvdXJjZUlkZW50aWZpZXIpCi0gICAqLwotICBwdWJsaWMgWE1MSW5wdXRTb3VyY2UgcmVzb2x2ZUVudGl0eShYTUxSZXNvdXJjZUlkZW50aWZpZXIgcmVzb3VyY2UpIHRocm93cyBYTklFeGNlcHRpb24sIElPRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgcHVibGljSWQgPSByZXNvdXJjZS5nZXRQdWJsaWNJZCgpOwotICAgIFN0cmluZyBzeXN0ZW1JZCA9IHJlc291cmNlLmdldEV4cGFuZGVkU3lzdGVtSWQoKTsKLSAgICBTdHJpbmcgbmFtZXNwYWNlID0gcmVzb3VyY2UuZ2V0TmFtZXNwYWNlKCk7Ci0gICAgU3RyaW5nIHVybCA9IG51bGw7Ci0gICAgaWYoc3lzdGVtSWQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICB1cmwgPSBzeXN0ZW1JZDsKLSAgICB9Ci0gICAgZWxzZSBpZihwdWJsaWNJZCAhPSBudWxsKQotICAgIHsKLSAgICAgIHVybCA9IHB1YmxpY0lkOwotICAgIH0KLSAgICBlbHNlIGlmKG5hbWVzcGFjZSAhPSBudWxsKQotICAgIHsKLSAgICAgIHVybCA9IG5hbWVzcGFjZTsKLSAgICB9Ci0gICAgaWYodXJsICE9IG51bGwpCi0gICAgewotICAgICAgSW5wdXRTdHJlYW0gaXMgPSBuZXcgTGF6eVVSTElucHV0U3RyZWFtKHVybCk7Ci0gICAgICByZXR1cm4gbmV3IFhNTElucHV0U291cmNlKHB1YmxpY0lkLCByZXNvdXJjZS5nZXRFeHBhbmRlZFN5c3RlbUlkKCksIHJlc291cmNlLmdldEV4cGFuZGVkU3lzdGVtSWQoKSwgaXMsIG51bGwpOwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL3hzZC9JbmxpbmVTY2hlbWFHZW5lcmF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEveHNkL0lubGluZVNjaGVtYUdlbmVyYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjE1ZTRlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEveHNkL0lubGluZVNjaGVtYUdlbmVyYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjgxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS54c2Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotaW1wb3J0IGphdmEudXRpbC5UcmVlU2V0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi1pbXBvcnQgY29tLmlibS53c2RsLkNvbnN0YW50czsKLQotLyoqCi0gKiBHZW5lcmF0ZSBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIHNjaGVtYSBmb3IgYW4gaW5saW5lIHNjaGVtYS4gV2lsbCBhZGQgaW1wb3J0cyBmb3IgdW5yZXNvbHZlZAotICogbmFtZXNwYWNlcy4KLSAqLwotcHVibGljIGNsYXNzIElubGluZVNjaGVtYUdlbmVyYXRvcgotewotICAvKioKLSAgICogR2VuZXJhdGluZyBpbXBvcnQgc3RhdGVtZW50cyBmb3IgaW5saW5lIHNjaGVtYSByZWZlcmVuY2VzIGlzIAotICAgKiBpbnZhbGlkIGFjY29yZGluZyB0byB0aGUgV1NETCBzcGVjLiBBcyBzb21lIG9sZGVyIGNsaWVudHMgKFdTVlQpIG1heQotICAgKiBkZXBlbmQgb24gdGhpcyBmdW5jdGlvbmFsaXR5IHRoZSBvcHRpb24gdG8gYWxsb3cgdGhpcyBpcyBsZWZ0Ci0gICAqIGluLiBUaGlzIHNob3VsZCBiZSByZW1vdmVkIHBvc3QgMS41LgotICAgKiBUT0RPOiBSZXZpZXcgcmVtb3ZpbmcgdGhpcyBwcmVmZXJlbmNlLgotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBib29sZWFuIEdFTkVSQVRFX0lOTElORV9JTVBPUlRTID0gZmFsc2U7Ci0gIAotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBTT0FQX0VOQ09ESU5HX1VSSSA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEZJTEVfUFJFRklYID0gImZpbGU6Ly8vIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgWE1MTlMgPSAieG1sbnMiOwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBUQVJHRVROQU1FU1BBQ0UgPSAidGFyZ2V0TmFtZXNwYWNlIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRVNQQUNFID0gIm5hbWVzcGFjZSI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIElNUE9SVCA9ICJpbXBvcnQiOwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBJTkNMVURFID0gImluY2x1ZGUiOwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBTQ0hFTUEgPSAic2NoZW1hIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0NIRU1BTE9DQVRJT04gPSAic2NoZW1hTG9jYXRpb24iOwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFID0gInR5cGUiOwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FID0gIm5hbWUiOwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZ1tdIGlnbm9yZU5hbWVzcGFjZXMgPQotICAgIHsgQ29uc3RhbnRzLk5TX1VSSV9YU0RfMTk5OSwgQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMCwgQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMSB9OwotCi0gIHByb3RlY3RlZCBzdGF0aWMgSW5saW5lU2NoZW1hR2VuZXJhdG9yIGluc3RhbmNlID0gbnVsbDsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqLwotICBwcm90ZWN0ZWQgSW5saW5lU2NoZW1hR2VuZXJhdG9yKCkKLSAgewotCVN0cmluZyBnZW5JbmxpbmVJbXBvcnRzID0gU3lzdGVtLmdldFByb3BlcnR5KCJ3c2RsLnJlcXVpcmUuaW5saW5lLmltcG9ydHMiKTsKLQlpZihnZW5JbmxpbmVJbXBvcnRzICE9IG51bGwgJiYgZ2VuSW5saW5lSW1wb3J0cy5lcXVhbHMoImZhbHNlIikpCi0JewotCSAgR0VORVJBVEVfSU5MSU5FX0lNUE9SVFMgPSB0cnVlOwotCX0KLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIGluc3RhbmNlIG9mIHRoZSBJbmxpbmVTY2hlbWFHZW5lcmF0b3IuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBpbnN0YW5jZSBvZiB0aGUgaW5saW5lIHNjaGVtYSBnZW5lcmF0b3IuCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIElubGluZVNjaGVtYUdlbmVyYXRvciBnZXRJbnN0YW5jZSgpCi0gIHsKLSAgICBpZiAoaW5zdGFuY2UgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBpbnN0YW5jZSA9IG5ldyBJbmxpbmVTY2hlbWFHZW5lcmF0b3IoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGluc3RhbmNlOwotICB9Ci0gIAotICAvKioKLSAgICogQ3JlYXRlIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgc2NoZW1hIGZyb20gdGhlIGVsZW1lbnQgcHJvdmlkZWQuCi0gICAqIAotICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgcm9vdCBlbGVtZW50IG9mIHRoZSBzY2hlbWEuCi0gICAqIEBwYXJhbSBlbGVtZW50cyBBIGxpc3Qgb2YgdGhlIGVsZW1lbnRzIGluIHRoZSBzY2hlbWEgaW4gb3JkZXIuCi0gICAqIEBwYXJhbSBmaWxlbG9jYXRpb24gVGhlIFVSSSBvZiB0aGUgZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBzY2hlbWEuCi0gICAqIEBwYXJhbSB2YWxpZEltcG9ydE5TcyBBIHNldCBvZiBuYW1lc3BhY2VzIGZvciB3aGljaCBpdCdzIHZhbGlkIHRvIGNyZWF0ZSBpbXBvcnQgc3RhdGVtZW50cy4KLSAgICogQHJldHVybiBBIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIHNjaGVtYS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGNyZWF0ZVhTRFN0cmluZyhFbGVtZW50IGVsZW1lbnQsIExpc3QgZWxlbWVudHMsIFN0cmluZyBmaWxlbG9jYXRpb24sIFNldCB2YWxpZEltcG9ydE5TcykKLSAgewotCSAgcmV0dXJuIElubGluZVNjaGVtYUdlbmVyYXRvci5jcmVhdGVYU0RTdHJpbmcoZWxlbWVudCwgZWxlbWVudHMsIGZpbGVsb2NhdGlvbiwgbmV3IEhhc2h0YWJsZSgpLCB2YWxpZEltcG9ydE5Tcyk7Ci0gIH0KLSAgCi0gIC8qKgotICAJKiBDcmVhdGVzIGEgU3RyaW5nIHJlcHJlc2VudGluZyB0aGUgc2NoZW1hIG1vZGVsIHdpdGggdGhlIHJvb3QgZWxlbWVudCBvZgotICAJKiBleHRFbGVtLiBDYWxscyBjcmVhdGVYU0RTdHJpbmdSZWN1cnNpdmVseSB0byB0YWtlIGNhcmUgb2YgYnVpbGRpbmcgdGhlIFN0cmluZwotICAJKiBhZnRlciBpdCBvYnRhaW5zIHRoZSBFbGVtZW50IGZyb20gdGhlIFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudC4KLSAgCSogCi0gIAkqIEBwYXJhbSBlbGVtZW50IFRoZSByb290IGVsZW1lbnQgb2YgdGhlIHNjaGVtYS4KLSAgCSogQHBhcmFtIGVsZW1lbnRzIEEgbGlzdCB0byBjb250YWluIHRoZSBlbGVtZW50cyBpbiB0aGUgc2NoZW1hIGluIG9yZGVyLgotICAJKiBAcGFyYW0gZmlsZWxvY2F0aW9uIFRoZSBsb2NhdGlvbiBvZiB0aGUgZmlsZSB0aGUgc2NoZW1hIGlzIGxvY2F0ZWQgaW4uCi0gIAkqIEBwYXJhbSBwYXJlbnROU3MgQSBoYXNodGFibGUgb2YgcGFyZW50IG5hbWVzcGFjZXMgdG8gdXNlZCB0byByZXNvbHZlIHByZWZpeGVzLgotICAJKiBAcGFyYW0gdmFsaWRJbXBvcnROU3MgQSBzZXQgb2YgbmFtZXNwYWNlcyBmb3Igd2hpY2ggaXQncyB2YWxpZCB0byBjcmVhdGUgaW1wb3J0IHN0YXRlbWVudHMuCi0gIAkqIEByZXR1cm4gQSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNjaGVtYSB3aXRoIHRoZSByb290IGVsZW1lbnQgJ2VsZW1lbnQnLgotICAJKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgY3JlYXRlWFNEU3RyaW5nKEVsZW1lbnQgZWxlbWVudCwgTGlzdCBlbGVtZW50cywgU3RyaW5nIGZpbGVsb2NhdGlvbiwgSGFzaHRhYmxlIHBhcmVudE5TcywgU2V0IHZhbGlkSW1wb3J0TlNzKQotICB7Ci0JU2V0IGltcG9ydE5TcyA9IG5ldyBUcmVlU2V0KCk7IAotICAgIGltcG9ydE5Tcy5hZGRBbGwodmFsaWRJbXBvcnROU3MpOyAKLSAgICBpbXBvcnROU3MuYWRkKFNPQVBfRU5DT0RJTkdfVVJJKTsgCi0KLSAgICBJbmxpbmVTY2hlbWFHZW5lcmF0b3Igc2NoZW1hR2VuZXJhdG9yID0gSW5saW5lU2NoZW1hR2VuZXJhdG9yLmdldEluc3RhbmNlKCk7Ci0gICAgSGFzaHRhYmxlIG5zUmVzb2x2ZXIgPSBzY2hlbWFHZW5lcmF0b3IuZ2V0TlNSZXNvbHZlcihlbGVtZW50KTsKLSAgICBMaXN0IHJlcW5zID0gc2NoZW1hR2VuZXJhdG9yLmdldE5hbWVzcGFjZVByZWZpeGVzKGVsZW1lbnQpOwotICAgIEhhc2h0YWJsZSByZXFOU0RlY2wgPSBzY2hlbWFHZW5lcmF0b3IucmVzb2x2ZU5hbWVzcGFjZXMocmVxbnMsIG5zUmVzb2x2ZXIsIHBhcmVudE5Tcyk7Ci0gICAgLy9IYXNodGFibGUgcmVxTlNEZWNsID0gc2NoZW1hR2VuZXJhdG9yLmdldFJlcXVpcmVkTlNEZWNsYXJhdGlvbnMocmVxbnMsIG5zUmVzb2x2ZXIsIHBhcmVudE5Tcyk7Ci0gICAgaWYoR0VORVJBVEVfSU5MSU5FX0lNUE9SVFMpCi0gICAgewotICAgICAgTGlzdCBpbXBvcnROUyA9IHNjaGVtYUdlbmVyYXRvci5nZXRJbXBvcnROYW1lc3BhY2VzKGVsZW1lbnQpOwotICAgICAgcmVxbnMgPSBzY2hlbWFHZW5lcmF0b3IucmVtb3ZlSW1wb3J0cyhyZXFucywgaW1wb3J0TlMpOwotICAgICAgcmVxbnMgPSBzY2hlbWFHZW5lcmF0b3IucmVtb3ZlTG9jYWxOYW1lc3BhY2VzKHJlcW5zLCBlbGVtZW50KTsKLQkgIHJlcW5zID0gc2NoZW1hR2VuZXJhdG9yLnJlc3RyaWN0SW1wb3J0cyhyZXFucywgdmFsaWRJbXBvcnROU3MpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmVxbnMuY2xlYXIoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHNjaGVtYUdlbmVyYXRvci5jcmVhdGVYU0RTdHJpbmdSZWN1cnNpdmVseShlbGVtZW50LCBlbGVtZW50cywgcmVxbnMsIHJlcU5TRGVjbCwgZmlsZWxvY2F0aW9uKTsKLSAgfQotICAvKioKLSAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBTT0FQIGVuY29kaW5nIG5hbWVzcGFjZSBpcyByZXF1aXJlZCBidXQgbm90IGltcG9ydGVkLgotICAgKiAKLSAgICogQHBhcmFtIGVsZW1lbnQgVGhlIHJvb3QgZWxlbWVudCBvZiB0aGUgc2NoZW1hLgotICAgKiBAcGFyYW0gZmlsZWxvY2F0aW9uIFRoZSBsb2NhdGlvbiBvZiB0aGUgZmlsZSBjb250YWluaW5nIHRoZSBzY2hlbWEuCi0gICAqIEBwYXJhbSBwYXJlbnROU3MgQSBoYXNodGFibGUgb2YgdGhlIHBhcmVudCBuYW1lc3BhY2VzLgotICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHNvYXAgZW5jb2RpbmcgbmFtZXNwYWNlIGlzIHJlcXVpcmVkIGJ1dCBub3QgaW1wb3J0ZWQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBzb2FwRW5jb2RpbmdSZXF1aXJlZE5vdEltcG9ydGVkKEVsZW1lbnQgZWxlbWVudCwgU3RyaW5nIGZpbGVsb2NhdGlvbiwgSGFzaHRhYmxlIHBhcmVudE5TcykKLSAgewotICAgIElubGluZVNjaGVtYUdlbmVyYXRvciBzY2hlbWFHZW5lcmF0b3IgPSBJbmxpbmVTY2hlbWFHZW5lcmF0b3IuZ2V0SW5zdGFuY2UoKTsKLSAgICBIYXNodGFibGUgbnNSZXNvbHZlciA9IHNjaGVtYUdlbmVyYXRvci5nZXROU1Jlc29sdmVyKGVsZW1lbnQpOwotICAgIExpc3QgcmVxbnMgPSBudWxsOwotCi0gICAgcmVxbnMgPSBzY2hlbWFHZW5lcmF0b3IuZ2V0TmFtZXNwYWNlUHJlZml4ZXMoZWxlbWVudCk7Ci0gICAgc2NoZW1hR2VuZXJhdG9yLnJlc29sdmVOYW1lc3BhY2VzKHJlcW5zLCBuc1Jlc29sdmVyLCBwYXJlbnROU3MpOwotICAgIC8vc2NoZW1hR2VuZXJhdG9yLnJlc29sdmVVbmRlY2xhcmVkTmFtZXNwYWNlcyhyZXFucywgcGFyZW50TlNzKTsKLSAgICBMaXN0IGltcG9ydE5TID0gc2NoZW1hR2VuZXJhdG9yLmdldEltcG9ydE5hbWVzcGFjZXMoZWxlbWVudCk7Ci0gICAgcmVxbnMgPSBzY2hlbWFHZW5lcmF0b3IucmVtb3ZlSW1wb3J0cyhyZXFucywgaW1wb3J0TlMpOwotICAgIHJlcW5zID0gc2NoZW1hR2VuZXJhdG9yLnJlbW92ZUxvY2FsTmFtZXNwYWNlcyhyZXFucywgZWxlbWVudCk7Ci0gICAgcmV0dXJuIHNjaGVtYUdlbmVyYXRvci5jaGVja1NPQVBFbmNvZGluZ1JlcXVpcmVkKHJlcW5zKTsKLSAgfQotICAvKioKLSAgICogUmVzb2x2ZSB0aGUgdW5kZWNsYXJlZCBuYW1lc3BhY2VzLgotICAgKiAKLSAgICogQHBhcmFtIHVucmVzb2x2ZWROU3MgQSBsaXN0IG9mIHVucmVzb2x2ZWQgbmFtZXNwYWNlcy4KLSAgICogQHBhcmFtIG5zUmVzb2x2ZXIgVGhlIG5hbWVzcGFjZSByZXNvbHZlciB0byB1c2UuCi0gICAqIEByZXR1cm4gQSBoYXNodGFibGUgb2YgcHJlZml4ZXMgYW5kIG5hbWVzcGFjZXMuCi0gICAqLwotLy8gIHByb3RlY3RlZCBIYXNodGFibGUgcmVzb2x2ZVVuZGVjbGFyZWROYW1lc3BhY2VzKExpc3QgdW5yZXNvbHZlZE5TcywgSGFzaHRhYmxlIG5zUmVzb2x2ZXIpCi0vLyAgewotLy8gICAgSGFzaHRhYmxlIG5hbWVzcGFjZXMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0vLyAgICBpZiAodW5yZXNvbHZlZE5TcyAhPSBudWxsICYmICF1bnJlc29sdmVkTlNzLmlzRW1wdHkoKSAmJiBuc1Jlc29sdmVyICE9IG51bGwpCi0vLyAgICB7Ci0vLyAgICAgIGZvciAoaW50IGkgPSB1bnJlc29sdmVkTlNzLnNpemUoKSAtIDE7IGkgPj0gMDsgaS0tKQotLy8gICAgICB7Ci0vLyAgICAgICAgU3RyaW5nIG5zID0gKFN0cmluZyl1bnJlc29sdmVkTlNzLmdldChpKTsKLS8vICAgICAgICBpZiAobnMuZXF1YWxzKCIiKSkKLS8vICAgICAgICB7Ci0vLyAgICAgICAgICBucyA9IFhNTE5TOwotLy8gICAgICAgIH0KLS8vICAgICAgICBlbHNlCi0vLyAgICAgICAgewotLy8gICAgICAgICAgbnMgPSBYTUxOUyArICI6IiArIG5zOwotLy8gICAgICAgIH0KLS8vICAgICAgICBpZiAobnNSZXNvbHZlci5jb250YWluc0tleShucykpCi0vLyAgICAgICAgewotLy8gICAgICAgICAgLy9uYW1lc3BhY2VzLnJlbW92ZShpKTsKLS8vICAgICAgICAgIC8vbmFtZXNwYWNlcy5hZGQoaSwgbnNSZXNvbHZlci5nZXQobnMpKTsKLS8vICAgICAgICAgIG5hbWVzcGFjZXMucHV0KG5zLCBuc1Jlc29sdmVyLmdldChucykpOwotLy8gICAgICAgICAgdW5yZXNvbHZlZE5Tcy5yZW1vdmUoaSk7Ci0vLyAgICAgICAgICB1bnJlc29sdmVkTlNzLmFkZChpLCBuc1Jlc29sdmVyLmdldChucykpOwotLy8gICAgICAgIH0KLS8vICAgICAgfQotLy8gICAgfQotLy8gICAgcmV0dXJuIG5hbWVzcGFjZXM7Ci0vLyAgfQotCi0gIC8qKgotICAgKiBUaGlzIHJlY3Vyc2l2ZSBtZXRob2QgY3JlYXRlcyB0aGUgc2NoZW1hIFN0cmluZyBmcm9tIHRoZSByb290IEVsZW1lbnQuCi0gICAqIAotICAgKiBAcGFyYW0gZWxlbSBUaGUgcm9vdCBlbGVtZW50IG9mIHRoZSBzY2hlbWEuCi0gICAqIEBwYXJhbSBlbGVtZW50cyBBIGxpc3QgdG8gYmUgY3JlYXRlZCBvZiB0aGUgZWxlbWVudHMgaW4gdGhlIHNjaGVtYSBpbiBvcmRlci4KLSAgICogQHBhcmFtIHJlcXVpcmVkTmFtZXNwYWNlcyBBIGxpc3Qgb2YgcmVxdWlyZWQgbmFtZXNwYWNlcy4KLSAgICogQHBhcmFtIHJlcU5TRGVjbCBBIGhhc2h0YWJsZSBvZiByZXF1aXJlZCBuYW1lc3BhY2UgZGVjbGFyYXRpb25zLgotICAgKiBAcGFyYW0gZmlsZWxvY2F0aW9uIFRoZSB1cmkgb2YgdGhlIGZpbGUgdGhhdCBjb250YWlucyB0aGlzIHNjaGVtYS4KLSAgICogQHJldHVybiBBIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHNjaGVtYS4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgY3JlYXRlWFNEU3RyaW5nUmVjdXJzaXZlbHkoCi0gICAgRWxlbWVudCBlbGVtLAotICAgIExpc3QgZWxlbWVudHMsCi0gICAgTGlzdCByZXF1aXJlZE5hbWVzcGFjZXMsCi0gICAgSGFzaHRhYmxlIHJlcU5TRGVjbCwKLSAgICBTdHJpbmcgZmlsZWxvY2F0aW9uKQotICB7Ci0gICAgaWYgKGVsZW0gPT0gbnVsbCkKLSAgICAgIHJldHVybiAiIjsgLy8ganVzdCBpbiBjYXNlCi0KLSAgICBlbGVtZW50cy5hZGQoZWxlbSk7Ci0KLSAgICBTdHJpbmdCdWZmZXIgeHNkU3RyaW5nID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIFN0cmluZyBlbGVtZW50TmFtZSA9IGVsZW0uZ2V0VGFnTmFtZSgpOwotICAgIHhzZFN0cmluZy5hcHBlbmQoIjwiKS5hcHBlbmQoZWxlbWVudE5hbWUpOwotCi0gICAgU3RyaW5nIG5hbWVQcmVmaXggPSAiIjsgLy8gdGhlIHhtbG5zIHByZWZpeCB1c2VkIGZvciB0aGUgZWxlbWVudHMKLSAgICAvLyBHZXQgYWxsIG9mIHRoZSBhdHRyaWJ1dGVzIGZvciB0aGlzIGVsZW1lbnQgYW5kIGFwcGVuZCB0aGVtIHRvIHRoZSB4c2RTdHJpbmcKLSAgICBOYW1lZE5vZGVNYXAgYXR0cyA9IGVsZW0uZ2V0QXR0cmlidXRlcygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0cy5nZXRMZW5ndGgoKTsgaSsrKQotICAgIHsKLSAgICAgIE5vZGUgbiA9IGF0dHMuaXRlbShpKTsKLSAgICAgIHhzZFN0cmluZy5hcHBlbmQoIiAiKS5hcHBlbmQobi5nZXROb2RlTmFtZSgpKS5hcHBlbmQoIj1cIiIpOwotICAgICAgU3RyaW5nIG5vZGVOYW1lID0gbi5nZXROb2RlTmFtZSgpOwotICAgICAgaWYgKG5vZGVOYW1lLmVxdWFsc0lnbm9yZUNhc2UoU0NIRU1BTE9DQVRJT04pICYmIGZpbGVsb2NhdGlvbiAhPSBudWxsKQotICAgICAgewotICAgICAgICBTdHJpbmcgcmVsYXRpdmVQYXRoID0gbi5nZXROb2RlVmFsdWUoKTsKLSAgICAgICAgeHNkU3RyaW5nLmFwcGVuZChyZWxhdGl2ZVBhdGgpLmFwcGVuZCgiXCIiKTsgICAKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIG5vZGVWYWx1ZSA9IG4uZ2V0Tm9kZVZhbHVlKCk7Ci0gICAgICAgIC8vIGdldCB0aGUgbmFtZSBwcmVmaXggZm9yIHRoaXMgc2NoZW1hIHRvIHVzZSBpbiBnZW5lcmF0aW5nIGltcG9ydCBzdGF0ZW1lbnRzCi0gICAgICAgIGlmIChub2RlTmFtZS5pbmRleE9mKFhNTE5TKSAhPSAtMSkKLSAgICAgICAgewotCi0gICAgICAgICAgaWYgKG5vZGVWYWx1ZS5lcXVhbHNJZ25vcmVDYXNlKGVsZW0uZ2V0TmFtZXNwYWNlVVJJKCkpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG5hbWVQcmVmaXggPSBub2RlTmFtZTsKLSAgICAgICAgICAgIGlmIChuYW1lUHJlZml4LmVxdWFsc0lnbm9yZUNhc2UoWE1MTlMpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBuYW1lUHJlZml4ID0gIiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIG5hbWVQcmVmaXggPSBuYW1lUHJlZml4LnN1YnN0cmluZyg2KSArICI6IjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLy8gUmVwbGFjZSBvbGQgc2NoZW1hIG5hbWVzcGFjZXMgd2l0aCB0aGUgbmV3IHNjaGVtYSBuYW1lc3BhY2UuCi0gICAgICAgIGlmKG5vZGVWYWx1ZS5lcXVhbHMoQ29uc3RhbnRzLk5TX1VSSV9YU0RfMTk5OSkgfHwgbm9kZVZhbHVlLmVxdWFscyhDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAwKSkKLSAgICAgICAgIHsKLSAgICAgICAgICBub2RlVmFsdWUgPSBDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxOwotICAgICAgICB9Ci0gICAgICAgIHhzZFN0cmluZy5hcHBlbmQobm9kZVZhbHVlKS5hcHBlbmQoIlwiIik7Ci0gICAgICB9Ci0gICAgfQotLy8gICAgaWYgKGVsZW1lbnROYW1lLmVxdWFsc0lnbm9yZUNhc2UoImltcG9ydCIpICYmICFmb3VuZFNjaGVtYUxvY2F0aW9uKQotLy8gICAgewotLy8gICAgICB4c2RTdHJpbmcuYXBwZW5kKCIgIikuYXBwZW5kKFNDSEVNQUxPQ0FUSU9OKS5hcHBlbmQoIj1cIiIpLmFwcGVuZChuYW1lc3BhY2UpLmFwcGVuZCgiXCIiKTsKLS8vICAgIH0KLSAgICAvLyBhZGQgaW4gYW55IHJlcXVpcmVkIE5TIGRlY2xhcmF0aW9ucyBmcm9tIHBhcmVudCBlbGVtZW50cwotICAgIGlmIChyZXFOU0RlY2wgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBFbnVtZXJhdGlvbiBrZXlzID0gcmVxTlNEZWNsLmtleXMoKTsKLSAgICAgIHdoaWxlIChrZXlzLmhhc01vcmVFbGVtZW50cygpKQotICAgICAgewotICAgICAgICBTdHJpbmcga2V5ID0gKFN0cmluZylrZXlzLm5leHRFbGVtZW50KCk7Ci0gICAgICAgIFN0cmluZyBkZWNsTlMgPSAoU3RyaW5nKXJlcU5TRGVjbC5nZXQoa2V5KTsKLSAgICAgICAgaWYoZGVjbE5TLmVxdWFscyhDb25zdGFudHMuTlNfVVJJX1hTRF8xOTk5KSB8fCBkZWNsTlMuZXF1YWxzKENvbnN0YW50cy5OU19VUklfWFNEXzIwMDApKQotICAgICAgICAgewotICAgICAgICAgIGRlY2xOUyA9IENvbnN0YW50cy5OU19VUklfWFNEXzIwMDE7Ci0gICAgICAgIH0KLSAgICAgICAgeHNkU3RyaW5nLmFwcGVuZCgiICIpLmFwcGVuZChrZXkpLmFwcGVuZCgiPVwiIikuYXBwZW5kKGRlY2xOUykuYXBwZW5kKCJcIiIpOwotICAgICAgfQotCi0gICAgfQotICAgIHhzZFN0cmluZy5hcHBlbmQoIj4iKTsKLSAgICBpZiAocmVxdWlyZWROYW1lc3BhY2VzICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaVJlcXVpcmVkTmFtZXNwYWNlcyA9IHJlcXVpcmVkTmFtZXNwYWNlcy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGlSZXF1aXJlZE5hbWVzcGFjZXMuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBTdHJpbmcgbnMgPSAoU3RyaW5nKWlSZXF1aXJlZE5hbWVzcGFjZXMubmV4dCgpOwotCi0gICAgICAgIHhzZFN0cmluZwotICAgICAgICAgIC5hcHBlbmQoIjwiKQotICAgICAgICAgIC5hcHBlbmQobmFtZVByZWZpeCkKLSAgICAgICAgICAuYXBwZW5kKElNUE9SVCkKLSAgICAgICAgICAuYXBwZW5kKCIgIikKLSAgICAgICAgICAuYXBwZW5kKE5BTUVTUEFDRSkKLSAgICAgICAgICAuYXBwZW5kKCI9XCIiKQotICAgICAgICAgIC5hcHBlbmQobnMpCi0gICAgICAgICAgLmFwcGVuZCgiXCIgIikKLSAgICAgICAgICAuYXBwZW5kKFNDSEVNQUxPQ0FUSU9OKQotICAgICAgICAgIC5hcHBlbmQoIj1cIiIpCi0gICAgICAgICAgLmFwcGVuZChucykKLSAgICAgICAgICAuYXBwZW5kKCJcIi8+Iik7Ci0gICAgICB9Ci0KLSAgICB9Ci0gICAgeHNkU3RyaW5nLmFwcGVuZCgiXG4iKTsKLQotICAgIC8vIGNhbGwgdGhlIG1ldGhvZCByZWN1cnNpdmVseSBmb3IgZWFjaCBjaGlsZCBlbGVtZW50Ci0gICAgTm9kZUxpc3QgY2hpbGROb2RlcyA9IGVsZW0uZ2V0Q2hpbGROb2RlcygpOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZE5vZGVzLmdldExlbmd0aCgpIHx8IGkgPCA1OyBpKyspCi0gICAgewotICAgICAgTm9kZSBuID0gY2hpbGROb2Rlcy5pdGVtKGkpOwotICAgICAgLy8gd2Ugb25seSB3YW50IG5vZGVzIHRoYXQgYXJlIEVsZW1lbnRzCi0gICAgICBpZiAobiBpbnN0YW5jZW9mIEVsZW1lbnQpCi0gICAgICB7Ci0gICAgICAgIEVsZW1lbnQgY2hpbGQgPSAoRWxlbWVudCluOwotICAgICAgICB4c2RTdHJpbmcuYXBwZW5kKGNyZWF0ZVhTRFN0cmluZ1JlY3Vyc2l2ZWx5KGNoaWxkLCBlbGVtZW50cywgbnVsbCwgbnVsbCwgZmlsZWxvY2F0aW9uKSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgeHNkU3RyaW5nLmFwcGVuZCgiPC8iKS5hcHBlbmQoZWxlbS5nZXRUYWdOYW1lKCkpLmFwcGVuZCgiPiIpOwotCi0gICAgcmV0dXJuIHhzZFN0cmluZy50b1N0cmluZygpOwotCi0gIH0KLSAgLyoqCi0gICAqIEdldCBhIGxpc3Qgb2YgYWxsIHRoZSBuYW1lc3BhY2UgcHJlZml4ZXMgdGhhdCBhcmUgdXNlZCBmb3IgZWxlbWVudHMgb3IgdHlwZXMgaW4gdGhlIHNjaGVtYS4KLSAgICogIAotICAgKiBAcGFyYW0gZWxlbSBUaGUgcm9vdCBlbGVtZW50IG9mIHRoZSBzY2hlbWEgdG8gY2hlY2sgZm9yIG5hbWVzcGFjZSBwcmVmaXhlcy4KLSAgICogQHJldHVybiBBIGxpc3Qgb2YgbmFtZXNwYWNlIHByZWZpeGVzIGZvciB0aGUgZWxlbWVudCBhbmQgYWxsIGl0cyBjaGlsZHJlbi4KLSAgICovCi0gIHByb3RlY3RlZCBMaXN0IGdldE5hbWVzcGFjZVByZWZpeGVzKEVsZW1lbnQgZWxlbSkKLSAgewotICAgIExpc3QgbmFtZXNwYWNlID0gbmV3IEFycmF5TGlzdCgpOwotCi0gICAgLy8gY2FsbCB0aGUgbWV0aG9kIHJlY3Vyc2l2ZWx5IGZvciBlYWNoIGNoaWxkIGVsZW1lbnQKLSAgICAvLyByZWdpc3RlciBhbGwgdGhlIGNoaWxkIHR5cGVzIGZpcnN0Ci0gICAgTm9kZUxpc3QgY2hpbGROb2RlcyA9IGVsZW0uZ2V0Q2hpbGROb2RlcygpOwotICAgIGludCBudW1DaGlsZHJlbiA9IGNoaWxkTm9kZXMuZ2V0TGVuZ3RoKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1DaGlsZHJlbjsgaSsrKQotICAgIHsKLSAgICAgIE5vZGUgbiA9IGNoaWxkTm9kZXMuaXRlbShpKTsKLSAgICAgIC8vIHdlIG9ubHkgd2FudCBub2RlcyB0aGF0IGFyZSBFbGVtZW50cwotICAgICAgaWYgKG4gaW5zdGFuY2VvZiBFbGVtZW50KQotICAgICAgewotICAgICAgICBFbGVtZW50IGNoaWxkID0gKEVsZW1lbnQpbjsKLSAgICAgICAgTGlzdCBjaGlsZG5zID0gZ2V0TmFtZXNwYWNlUHJlZml4ZXMoY2hpbGQpOwotICAgICAgICBmb3IgKGludCBqID0gY2hpbGRucy5zaXplKCkgLSAxOyBqID49IDA7IGotLSkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBucyA9IChTdHJpbmcpY2hpbGRucy5nZXQoaik7Ci0gICAgICAgICAgCi0gICAgICAgICAgaWYgKCFuYW1lc3BhY2UuY29udGFpbnMobnMpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG5hbWVzcGFjZS5hZGQobnMpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAvLyBBZGQgdGhlIG5hbWVzcGFjZSBvZiB0aGUgY3VycmVudCBlbGVtZW50Ci0gICAgU3RyaW5nIGVsZW1OUyA9IGVsZW0uZ2V0UHJlZml4KCk7Ci0gICAgLy8gaWYgdGhlcmUgaXMgbm8gbmFtZXNwYWNlIHByZWZpeCBzZXQgaXQgdG8gdGhlIGVtcHR5IHByZWZpeC4KLSAgICBpZihlbGVtTlMgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBlbGVtTlMgPSAiIjsKLSAgICB9Ci0gICAgaWYgKCFuYW1lc3BhY2UuY29udGFpbnMoZWxlbU5TKSkKLSAgICAgewotICAgICAgbmFtZXNwYWNlLmFkZChlbGVtTlMpOwotICAgIH0KLSAgICAvLyBub3cgYWRkIGFsbCBvZiB0aGUgY3VycmVudCBlbGVtZW50J3MgbmFtZXNwYWNlcwotICAgIC8vIGRvbid0IGluY2x1ZGUgaW1wb3J0IGFuZCBzY2hlbWEgZWxlbWVudHMKLSAgICBTdHJpbmcgbG9jYWxuYW1lID0gZWxlbS5nZXRMb2NhbE5hbWUoKTsKLSAgICBpZiAoIWxvY2FsbmFtZS5lcXVhbHMoSU1QT1JUKSAmJiAhbG9jYWxuYW1lLmVxdWFscyhJTkNMVURFKSAmJiAhbG9jYWxuYW1lLmVxdWFscyhTQ0hFTUEpKQotICAgIHsKLSAgICAgIE5hbWVkTm9kZU1hcCBhdHRzID0gZWxlbS5nZXRBdHRyaWJ1dGVzKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGF0dHMuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgTm9kZSBuID0gYXR0cy5pdGVtKGkpOwotCi0gICAgICAgIFN0cmluZyBub2RlTmFtZSA9IG4uZ2V0Tm9kZU5hbWUoKTsKLSAgICAgICAgLy8gcmVtb3ZlZCByZXN0cmljdGlvbiB0aGF0IHdlJ3JlIG9ubHkgbG9va2luZyBhdCB0eXBlcwotICAgICAgICAvLwkJaWYgKG5vZGVOYW1lLmVxdWFsc0lnbm9yZUNhc2UoVFlQRSkpCi0gICAgICAgIC8vCQl7Ci0gICAgICAgIC8vIGRvbid0IHRha2UgbmFtZXNwYWNlIGluZm8gZnJvbSBhdHRyaWJ1dGVzIGRlZmluaW5nIG5hbWVzcGFjZXMuCi0gICAgICAgIC8vIHRoYXQgaW5jbHVkZXMgeG1sbnMsIHRhcmdldE5hbWVzcGFjZQotICAgICAgICBpZiAobm9kZU5hbWUuaW5kZXhPZihYTUxOUykgIT0gLTEgfHwgbm9kZU5hbWUuZXF1YWxzKFRBUkdFVE5BTUVTUEFDRSkgfHwgbm9kZU5hbWUuZXF1YWxzKE5BTUUpKQotICAgICAgICB7Ci0gICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gR3JhYiBuYW1lc3BhY2UgcHJlZml4ZXMgZnJvbSBhdHRyaWJ1dGVzLgotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBpbnQgY29sb25JbmRleCA9IG5vZGVOYW1lLmluZGV4T2YoIjoiKTsKLSAgICAgICAgICBpZihjb2xvbkluZGV4ICE9IC0xICYmIChjb2xvbkluZGV4ICsgMSA8IG5vZGVOYW1lLmxlbmd0aCgpICYmIG5vZGVOYW1lLmNoYXJBdChjb2xvbkluZGV4ICsgMSkgIT0gJy8nKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgcHJlZml4ID0gbm9kZU5hbWUuc3Vic3RyaW5nKDAsIGNvbG9uSW5kZXgpOwotICAgICAgICAgICAgaWYgKCFuYW1lc3BhY2UuY29udGFpbnMocHJlZml4KSkKLSAgICAgICAgICAgIHsKLQotICAgICAgICAgICAgICBuYW1lc3BhY2UuYWRkKHByZWZpeCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIFN0cmluZyBub2RlVmFsdWUgPSBuLmdldE5vZGVWYWx1ZSgpOwotICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIGludCBjb2xvbkluZGV4ID0gbm9kZVZhbHVlLmluZGV4T2YoIjoiKTsKLSAgICAgICAgLy8gRG9uJ3QgdGFrZSBuYW1lc3BhY2UgaW5mbyBmcm9tIGF0dHJpYnV0ZXMgd2l0aCB0aGUgZGVmYXVsdCBuYW1lc3BhY2UsIHRoYXQgaXMgYXR0cmlidXRlcwotICAgICAgICAvLyB0aGF0IGFyZSBub3QgcHJlZml4ZWQuIChjb2xvbkluZGV4ID09IC0xKQotICAgICAgICAvLyBJZiB0aGUgY29sb25JbmRleCBpcyBmb2xsb3dlZCBieSBhIC8gdGhlbiBpdCBpcyBhIFVSSSBhbmQgbm90Ci0gICAgICAgIC8vIG5hbWVzcGFjZSBxdWFsaWZpZWQuCi0JCWlmIChjb2xvbkluZGV4ID09IC0xIHx8IChjb2xvbkluZGV4ICsgMSA8IG5vZGVWYWx1ZS5sZW5ndGgoKSAmJiBub2RlVmFsdWUuY2hhckF0KGNvbG9uSW5kZXggKyAxKSA9PSAnLycpKQotICAgICAgICB7Ci0gICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gaGVyZSB3ZSBoYXZlIGZvdW5kIGEgY29sb24gZGVsaW1pdGVyIHNvIHdlIG5lZWQgdGhlIG5hbWVzcGFjZSBkZWZpbmVkIGhlcmUKLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgbm9kZVZhbHVlID0gbm9kZVZhbHVlLnN1YnN0cmluZygwLCBjb2xvbkluZGV4KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIW5hbWVzcGFjZS5jb250YWlucyhub2RlVmFsdWUpKQotICAgICAgICB7Ci0KLSAgICAgICAgICBuYW1lc3BhY2UuYWRkKG5vZGVWYWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbmFtZXNwYWNlOwotCi0gIH0KLQotICAvKioKLSAgICogR2V0IGEgbGlzdCBvZiBhbGwgdGhlIG5hbWVzcGFjZXMgdGhhdCBoYXZlIGFuIGltcG9ydCBzdGF0ZW1lbnQuCi0gICAqIAotICAgKiBAcGFyYW0gZWxlbSBUaGUgcm9vdCBlbGVtZW50IG9mIHRoZSBzY2hlbWEuCi0gICAqIEByZXR1cm4gQSBsaXN0IG9mIGFsbCB0aGUgbmFtZXNwYWNlcyB0aGF0IGFyZSBpbXBvcnRlZC4KLSAgICovCi0gIHByb3RlY3RlZCBMaXN0IGdldEltcG9ydE5hbWVzcGFjZXMoRWxlbWVudCBlbGVtKQotICB7Ci0gICAgTGlzdCBuYW1lc3BhY2UgPSBuZXcgVmVjdG9yKCk7Ci0KLSAgICAvLyBjYWxsIHRoZSBtZXRob2QgcmVjdXJzaXZlbHkgZm9yIGVhY2ggY2hpbGQgZWxlbWVudAotICAgIC8vIHJlZ2lzdGVyIGFsbCB0aGUgY2hpbGQgdHlwZXMgZmlyc3QKLSAgICBOb2RlTGlzdCBjaGlsZE5vZGVzID0gZWxlbS5nZXRDaGlsZE5vZGVzKCk7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkTm9kZXMuZ2V0TGVuZ3RoKCkgfHwgaSA8IDU7IGkrKykKLSAgICB7Ci0gICAgICBOb2RlIG4gPSBjaGlsZE5vZGVzLml0ZW0oaSk7Ci0gICAgICAvLyB3ZSBvbmx5IHdhbnQgbm9kZXMgdGhhdCBhcmUgRWxlbWVudHMKLSAgICAgIGlmIChuIGluc3RhbmNlb2YgRWxlbWVudCkKLSAgICAgIHsKLSAgICAgICAgRWxlbWVudCBjaGlsZCA9IChFbGVtZW50KW47Ci0gICAgICAgIExpc3QgY2hpbGRucyA9IGdldEltcG9ydE5hbWVzcGFjZXMoY2hpbGQpOwotICAgICAgICBmb3IgKGludCBqID0gY2hpbGRucy5zaXplKCkgLSAxOyBqID49IDA7IGotLSkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBucyA9IChTdHJpbmcpY2hpbGRucy5nZXQoaik7Ci0gICAgICAgICAgaWYgKCFuYW1lc3BhY2UuY29udGFpbnMobnMpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG5hbWVzcGFjZS5hZGQobnMpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAvLyBpZiB0aGlzIGlzIGFuIGltcG9ydCBlbGVtZW50IGdldCB0aGUgbmFtZXNwYWNlIGFuZCBhZGQgaXQgdG8gdGhlIGxpc3QKLSAgICBpZiAoZWxlbS5nZXRMb2NhbE5hbWUoKS5lcXVhbHNJZ25vcmVDYXNlKElNUE9SVCkpCi0gICAgewotICAgICAgTmFtZWROb2RlTWFwIGF0dHMgPSBlbGVtLmdldEF0dHJpYnV0ZXMoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0cy5nZXRMZW5ndGgoKTsgaSsrKQotICAgICAgewotICAgICAgICBOb2RlIG4gPSBhdHRzLml0ZW0oaSk7Ci0KLSAgICAgICAgU3RyaW5nIG5vZGVOYW1lID0gbi5nZXROb2RlTmFtZSgpOwotICAgICAgICBpZiAobm9kZU5hbWUuZXF1YWxzSWdub3JlQ2FzZShOQU1FU1BBQ0UpKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIG5vZGVWYWx1ZSA9IG4uZ2V0Tm9kZVZhbHVlKCk7Ci0gICAgICAgICAgaWYgKCFuYW1lc3BhY2UuY29udGFpbnMobm9kZVZhbHVlKSkKLSAgICAgICAgICB7Ci0KLSAgICAgICAgICAgIG5hbWVzcGFjZS5hZGQobm9kZVZhbHVlKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbmFtZXNwYWNlOwotCi0gIH0KLQotICAvKioKLSAgICogUmV0dXJuIGEgSGFzaHRhYmxlIHdpdGggbmFtZXNwYWNlIHByZWZpeGVzIGFzIGtleXMgZnJvbSB0aGUgZ2l2ZW4gZWxlbWVudC4KLSAgICogCi0gICAqIEBwYXJhbSBlbGVtIFRoZSByb290IGVsZW1lbnQgb2YgdGhlIHNjaGVtYS4KLSAgICogQHJldHVybiBBIGhhc2h0YWJsZSB3aXRoIG5hbWVzcGFjZSBwcmVmaXhlcyBtYXBwZWQgdG8gbmFtZXNwYWNlcy4KLSAgICovCi0gIHByb3RlY3RlZCBIYXNodGFibGUgZ2V0TlNSZXNvbHZlcihFbGVtZW50IGVsZW0pCi0gIHsKLSAgICBIYXNodGFibGUgbnNSZXNvbHZlciA9IG5ldyBIYXNodGFibGUoKTsKLQotICAgIE5hbWVkTm9kZU1hcCBhdHRzID0gZWxlbS5nZXRBdHRyaWJ1dGVzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRzLmdldExlbmd0aCgpOyBpKyspCi0gICAgewotICAgICAgTm9kZSBuID0gYXR0cy5pdGVtKGkpOwotCi0gICAgICBTdHJpbmcgbm9kZU5hbWUgPSBuLmdldE5vZGVOYW1lKCk7Ci0gICAgICBpZiAobm9kZU5hbWUuaW5kZXhPZihYTUxOUykgIT0gLTEpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBub2RlVmFsdWUgPSBuLmdldE5vZGVWYWx1ZSgpOwotICAgICAgICBTdHJpbmcgbmFtZVByZWZpeCA9IG5vZGVOYW1lOwotCi0gICAgICAgIGlmIChuYW1lUHJlZml4LmVxdWFsc0lnbm9yZUNhc2UoWE1MTlMpKQotICAgICAgICB7Ci0gICAgICAgICAgbmFtZVByZWZpeCA9ICIiOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIG5hbWVQcmVmaXggPSBuYW1lUHJlZml4LnN1YnN0cmluZyg2KTsKLSAgICAgICAgfQotICAgICAgICBuc1Jlc29sdmVyLnB1dChuYW1lUHJlZml4LCBub2RlVmFsdWUpOwotCi0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBuc1Jlc29sdmVyOwotCi0gIH0KLQotICAvKioKLSAgICogUmVzb2x2ZSB0aGUgbmFtZXNwYWNlcyBpbiB0aGUgZ2l2ZW4gbmFtZXNwYWNlcyBsaXN0IHdpdGggdGhlIHR3byBuYW1lc3BhY2UKLSAgICogcmVzb2x2ZXIgaGFzaHRhYmxlcyBwcm92aWRlZC4gUmV0dXJuIGEgbGlzdCBvZiBhbGwgdGhlIG5hbWVzcGFjZSB0aGF0IG5lZWQKLSAgICogdG8gYmUgZGVjbGFyZWQuCi0gICAqIEZpcnN0IHJlc29sdmUgYWdhaW5zdCB0aGUgbG9jYWwgbmFtZXNwYWNlcyB3aXRoIG5zUmVzb2x2ZXIuCi0gICAqIE5leHQgcmVzb2x2ZSBhZ2FpbnN0IHRoZSBwYXJlbnQgbmFtZXNwYWNlIHdpdGggcGFyZW50TlNSZXNvbHZlci4KLSAgICogQSBzaWRlIGFmZmVjdCBvZiB0aGlzIG1ldGhvZCBpcyB0aGUgbmFtZXNwYWNlcyBsaXN0IGlzIGxlZnQgd2l0aCBvbmx5IHRob3NlIAotICAgKiBuYW1lc3BhY2VzIHRoYXQgYXJlIHJlc29sdmVkIGFuZCB0aGUgcmVzb2x2ZWQgZW50aXRpZXMgYXJlIHBsYWNlZCBpbiB0aGUgCi0gICAqIGxpc3QgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgZW50cmllcy4KLSAgICogRm9yIGV4LiBJZiB5b3UgcHJvdmlkZSBhIGxpc3Qgc3VjaCBhcyB7eHNkLCBpbnRmfSBhbmQgb25seSB4c2QgY2FuIGJlIHJlc29sdmVkCi0gICAqIHlvdSB3aWxsIGVuZCB1cCB3aXRoIHRoZSBsaXN0IHtodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYX0KLSAgICogCi0gICAqIEBwYXJhbSBuYW1lc3BhY2VzIFRoZSBsaXN0IG9mIG5hbWVzcGFjZXMgdG8gcmVzb2x2ZS4KLSAgICogQHBhcmFtIG5zUmVzb2x2ZXIgVGhlIGhhc2h0YWJsZSB0byBiZSB1c2VkIGFzIHRoZSBsb2NhbCByZXNvbHZlci4KLSAgICogQHBhcmFtIHBhcmVudE5TUmVzb2x2ZXIgVGhlIGhhc2h0YWJsZSB0byBiZSB1c2VkIGFzIHRoZSBwYXJlbnQgbmFtZXNwYWNlIHJlc29sdmVyLgotICAgKiBAcmV0dXJuIEEgSGFzaHRhYmxlIG9mIG5hbWVzcGFjZXMgdGhhdCBtdXN0IGJlIGRlY2xhcmVkLgotICAgKi8KLSAgcHJvdGVjdGVkIEhhc2h0YWJsZSByZXNvbHZlTmFtZXNwYWNlcyhMaXN0IG5hbWVzcGFjZXMsIEhhc2h0YWJsZSBuc1Jlc29sdmVyLCBIYXNodGFibGUgcGFyZW50TlNSZXNvbHZlcikKLSAgewotICAJSGFzaHRhYmxlIHJlcU5TRGVjbCA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBpZiAobmFtZXNwYWNlcyAhPSBudWxsICYmICFuYW1lc3BhY2VzLmlzRW1wdHkoKSAmJiBuc1Jlc29sdmVyICE9IG51bGwpCi0gICAgewotICAgICAgZm9yIChpbnQgaSA9IG5hbWVzcGFjZXMuc2l6ZSgpIC0gMTsgaSA+PSAwOyBpLS0pCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBucyA9IChTdHJpbmcpbmFtZXNwYWNlcy5nZXQoaSk7Ci0gICAgICAgIC8vIFJlbW92ZSB0aGUgbmFtZXNwYWNlIGZyb20gdGhlIGxpc3QuCi0gICAgICAgIG5hbWVzcGFjZXMucmVtb3ZlKGkpOwotICAgICAgICAvLyBGaXJzdCB0cnkgdG8gcmVzb2x2ZSBhZ2FpbnN0IHRoZSBsb2NhbCBuYW1lc3BhY2UgcmVzb2x2ZXIuCi0gICAgICAgIGlmIChuc1Jlc29sdmVyLmNvbnRhaW5zS2V5KG5zKSkKLSAgICAgICAgewotICAgICAgICAgIE9iamVjdCByZXNvbHZlZE5TID0gbnNSZXNvbHZlci5nZXQobnMpOwotICAgICAgICAgIC8vIE9ubHkgYWRkIHRoZSBuYW1lc3BhY2UgaWYgaXQncyBub3QgYWxyZWFkeSBpbiB0aGUgbGlzdC4KLSAgICAgICAgICBpZighbmFtZXNwYWNlcy5jb250YWlucyhyZXNvbHZlZE5TKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBuYW1lc3BhY2VzLmFkZChpLCBuc1Jlc29sdmVyLmdldChucykpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAvLyBOZXh0IHRyeSB0byByZXNvbHZlIGFnYWluc3QgdGhlIHBhcmVudCBuYW1lc3BhY2UgcmVzb2x2ZXIuCi0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAJaWYgKG5zLmVxdWFscygiIikpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIG5zID0gWE1MTlM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIG5zID0gWE1MTlMgKyAiOiIgKyBuczsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChwYXJlbnROU1Jlc29sdmVyLmNvbnRhaW5zS2V5KG5zKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgT2JqZWN0IHJlc29sdmVkTlMgPSBwYXJlbnROU1Jlc29sdmVyLmdldChucyk7Ci0gICAgICAgICAgICAgIC8vIE9ubHkgYWRkIHRoZSBuYW1lc3BhY2UgaWYgaXQncyBub3QgYWxyZWFkeSBpbiB0aGUgbGlzdC4KLSAgICAgICAgICAgICAgaWYoIW5hbWVzcGFjZXMuY29udGFpbnMocmVzb2x2ZWROUykpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBuYW1lc3BhY2VzLmFkZChpLCByZXNvbHZlZE5TKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAvLyBTdGlsbCBuZWVkIHRvIGRlY2xhcmUgdGhlIG5hbWVzcGFjZSB0aG91Z2guCi0gICAgICAgICAgICAgIHJlcU5TRGVjbC5wdXQobnMsIHJlc29sdmVkTlMpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlcU5TRGVjbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZW1vdmUgYW55IG5hbWVzcGFjZSBmcm9tIHRoZSBuYW1lc3BhY2VzIGxpc3QgaWYgaXQgaXMgaW4gdGhlIGltcG9ydCBsaXN0LgotICAgKiAKLSAgICogQHBhcmFtIG5hbWVzcGFjZXMgVGhlIG5hbWVzcGFjZXMgbGlzdC4KLSAgICogQHBhcmFtIGltcG9ydGVkTmFtZXNwYWNlcyBBIGxpc3Qgb2YgaW1wb3J0ZWQgbmFtZXNwYWNlcy4KLSAgICogQHJldHVybiBUaGUgbGlzdCBvZiBuYW1lc3BhY2VzIHdpdGhvdXQgdGhlIGltcG9ydGVkIG5hbWVzcGFjZXMuCi0gICAqLwotICBwcm90ZWN0ZWQgTGlzdCByZW1vdmVJbXBvcnRzKExpc3QgbmFtZXNwYWNlcywgTGlzdCBpbXBvcnRlZE5hbWVzcGFjZXMpCi0gIHsKLSAgICBpZiAobmFtZXNwYWNlcyAhPSBudWxsICYmIGltcG9ydGVkTmFtZXNwYWNlcyAhPSBudWxsICYmICFpbXBvcnRlZE5hbWVzcGFjZXMuaXNFbXB0eSgpKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGlJbXBvcnRlZE5TID0gaW1wb3J0ZWROYW1lc3BhY2VzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaUltcG9ydGVkTlMuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBTdHJpbmcgaU5TID0gKFN0cmluZylpSW1wb3J0ZWROUy5uZXh0KCk7Ci0KLSAgICAgICAgbmFtZXNwYWNlcy5yZW1vdmUoaU5TKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG5hbWVzcGFjZXM7Ci0gIH0KLQotICAvKioKLSAgICogUmVtb3ZlIHRoZSBsb2NhbCBuYW1lc3BhY2UgZm9yIHRoZSBzY2hlbWEgYW5kIHRoZSBuYW1lc3BhY2VzIGxpc3RlZCBpbiB0aGUgaWdub3JlTmFtZXNwYWNlcwotICAgKiBsaXN0IGZyb20gdGhlIG5hbWVzcGFjZXMgbGlzdCBwcm92aWRlZC4KLSAgICogCi0gICAqIEBwYXJhbSBuYW1lc3BhY2VzIFRoZSBsaXN0IG9mIGxvY2FsIG5hbWVzcGFjZXMuCi0gICAqIEBwYXJhbSBlbGVtIFRoZSByb290IGVsZW1lbnQgb2YgdGhlIHNjaGVtYS4KLSAgICogQHJldHVybiBUaGUgbGlzdCBvZiBuYW1lc3BhY2VzIHdpdGggdGhlIGxvY2FsIG5hbWVzcGFjZXMgcmVtb3ZlZC4KLSAgICovCi0gIHByb3RlY3RlZCBMaXN0IHJlbW92ZUxvY2FsTmFtZXNwYWNlcyhMaXN0IG5hbWVzcGFjZXMsIEVsZW1lbnQgZWxlbSkKLSAgewotICAgIGlmIChuYW1lc3BhY2VzICE9IG51bGwgJiYgZWxlbSAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyBucyA9IGVsZW0uZ2V0QXR0cmlidXRlKFRBUkdFVE5BTUVTUEFDRSk7Ci0gICAgICBuYW1lc3BhY2VzLnJlbW92ZShucyk7Ci0KLSAgICAgIGZvciAoaW50IGkgPSBpZ25vcmVOYW1lc3BhY2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKQotICAgICAgewotICAgICAgICAvLyBrZWVwIHJlbW92aW5nIHRoZSBuYW1lc3BhY2UgdW50aWwgaXQgaXMgbm90IGluIHRoZSBsaXN0Ci0gICAgICAgIGlmIChuYW1lc3BhY2VzLnJlbW92ZShpZ25vcmVOYW1lc3BhY2VzW2ldKSkKLSAgICAgICAgewotICAgICAgICAgIGkrKzsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbmFtZXNwYWNlczsKLSAgfQotICAKLSAgLyoqIAotICAgKiBSZW1vdmUgYWxsIHRoZSBuYW1lc3BhY2VzIGluIHRoZSBuYW1lc3BhY2VzIGxpc3QgdGhhdCBhcmVuJ3QgY29udGFpbmVkIGluIHRoZSAKLSAgICogdmFsaWRJbXBvcnROU3Mgc2V0LiAKLSAgICogCi0gICAqIEBwYXJhbSBuYW1lc3BhY2VzIEEgbGlzdCBvZiBuYW1lc3BhY2VzLiAKLSAgICogQHBhcmFtIHZhbGlkSW1wb3J0TlNzIEEgc2V0IG9mIHZhbGlkIG5hbWVzcGFjZXMuIAotICAgKiBAcmV0dXJuIEEgbGlzdCBvZiBuYW1lc3BhY2VzIHRoYXQgZG9lcyBub3QgY29udGFpbiBhbnkgbWVtYmVycyB3aGljaCBhcmVuJ3QgaW4gdGhlIHZhbGlkSW1wb3J0TlNzIHNldC4gCi0gICAqLyAKLSAgcHJvdGVjdGVkIExpc3QgcmVzdHJpY3RJbXBvcnRzKExpc3QgbmFtZXNwYWNlcywgU2V0IHZhbGlkSW1wb3J0TlNzKSAKLSAgeyAKLSAgICAgICAgSXRlcmF0b3IgbnNJdGVyID0gbmFtZXNwYWNlcy5pdGVyYXRvcigpOyAKLSAgICAgICAgd2hpbGUobnNJdGVyLmhhc05leHQoKSkgCi0gICAgICAgIHsgCi0gICAgICAgICAgU3RyaW5nIG5zID0gKFN0cmluZyluc0l0ZXIubmV4dCgpOyAKLSAgICAgICAgICBpZighdmFsaWRJbXBvcnROU3MuY29udGFpbnMobnMpKSAKLSAgICAgICAgICB7IAotICAgICAgICAgICAgICAgIG5hbWVzcGFjZXMucmVtb3ZlKG5zKTsgCi0JCQkJbnNJdGVyID0gbmFtZXNwYWNlcy5pdGVyYXRvcigpOwotICAgICAgICAgIH0gCi0gICAgICAgIH0gCi0gICAgICAgIHJldHVybiBuYW1lc3BhY2VzOyAKLSAgfSAKLQotICAvKioKLSAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBTT0FQIGVuY29kaW5nIG5hbWVzcGFjZSBpcyBpbiB0aGUgbGlzdCBvZiByZXF1aXJlZCBuYW1lc3BhY2VzLAotICAgKiBmYWxzZSBvdGhlcndpc2UuCi0gICAqIAotICAgKiBAcGFyYW0gcmVxbnMgVGhlIGxpc3Qgb2YgbmFtZXNwYWNlcyB0byBjaGVjayBmb3IgdGhlIFNPQVAgZW5jb2RpbmcgbmFtZXNwYWNlLgotICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIFNPQVAgZW5jb2RpbmcgbmFtZXNwYWNlcyBpcyBpbiB0aGUgbGlzdCwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHJvdGVjdGVkIGJvb2xlYW4gY2hlY2tTT0FQRW5jb2RpbmdSZXF1aXJlZChMaXN0IHJlcW5zKQotICB7Ci0gICAgaWYgKHJlcW5zLmNvbnRhaW5zKFNPQVBfRU5DT0RJTkdfVVJJKSkKLSAgICB7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL3hzZC9JbmxpbmVTY2hlbWFWYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEveHNkL0lubGluZVNjaGVtYVZhbGlkYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjY3ZGU4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEveHNkL0lubGluZVNjaGVtYVZhbGlkYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzE2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS54c2Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotaW1wb3J0IGphdmEudXRpbC5UcmVlU2V0OwotCi1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuVHlwZXM7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudDsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51dGlsLkVycm9yTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnV0aWwuTWVzc2FnZUdlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5JV1NETDExVmFsaWRhdGlvbkluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuSVdTREwxMVZhbGlkYXRvcjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi1pbXBvcnQgY29tLmlibS53c2RsLkNvbnN0YW50czsKLQotLyoqCi0gKiBQbHVnaW4gdmFsaWRhdG9yIGZvciB0aGUgV1NETCBWYWxpZGF0aW9uIGZyYW1ld29yay4gVmFsaWRhdGVzIGlubGluZSBzY2hlbWEgZm91bmQgaW4gYSBXU0RMIGRvY3VtZW50LgotICovCi1wdWJsaWMgY2xhc3MgSW5saW5lU2NoZW1hVmFsaWRhdG9yIGltcGxlbWVudHMgSVdTREwxMVZhbGlkYXRvcgotewotICAvKioKLSAgICogUHJvcGVydHkgdG8gYWxsb3cgdGhlIFdTREwgdmFsaWRhdG9yIHRvIHVzZSB0aGUgdGFyZ2V0IG5hbWVzcGFjZQotICAgKiBkZWZpbmVkIG9uIHRoZSBXU0RMIGRvY3VtZW50IGZvciBzY2hlbWFzIHdpdGggbm8gdGFyZ2V0IG5hbWVzcGFjZS4KLSAgICogVGhpcyBwcm9wZXJ0eSB3aWxsIGFsbG93IGNsaWVudHMgd2hvIGRlcGVuZCBvbiB0aGlzIGZ1bmN0aW9uYWxpdHkKLSAgICogdG8gY29udGludWUgdG8gdXNlIGl0IGFuZCBzaG91bGQgYmUgcmVtb3ZlZCBwb3N0IDEuNS4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBVU0VfV1NETF9UQVJHRVROQU1FU1BBQ0UgPSBmYWxzZTsKLSAgCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIF9XQVJOX09MRF9TQ0hFTUFfTkFNRVNQQUNFID0gIl9XQVJOX09MRF9TQ0hFTUFfTkFNRVNQQUNFIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgX1dBUk5fU09BUEVOQ19JTVBPUlRFRF9TQ0hFTUEgPSAiX1dBUk5fU09BUEVOQ19JTVBPUlRFRF9TQ0hFTUEiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBFTVBUWV9TVFJJTkcgPSAiIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgUVVPVEUgPSAiJyI7Ci0gIE1lc3NhZ2VHZW5lcmF0b3IgbWVzc2FnZWdlbmVyYXRvciA9IG51bGw7Ci0gIAotICBwdWJsaWMgSW5saW5lU2NoZW1hVmFsaWRhdG9yKCkKLSAgewotCVN0cmluZyB1c2VOUyA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgidXNlLndzZGwudGFyZ2V0bmFtZXNwYWNlIik7Ci0JaWYodXNlTlMgIT0gbnVsbCAmJiB1c2VOUy5lcXVhbHMoInRydWUiKSkKLQl7Ci0JICBVU0VfV1NETF9UQVJHRVROQU1FU1BBQ0UgPSB0cnVlOwotCX0KLSAgfQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5JV1NETDExVmFsaWRhdG9yI3ZhbGlkYXRlKGphdmEubGFuZy5PYmplY3QsIGphdmEudXRpbC5MaXN0LCBvcmcuZWNsaXBzZS53c2RsLnZhbGlkYXRlLndzZGwxMS5XU0RMMTFWYWxpZGF0aW9uSW5mbykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZhbGlkYXRlKE9iamVjdCBlbGVtZW50LCBMaXN0IHBhcmVudHMsIElXU0RMMTFWYWxpZGF0aW9uSW5mbyB2YWxJbmZvKQotICB7Ci0gIAlMaXN0IGVsZW1lbnRzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCBlbGVtID0gKFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCkgZWxlbWVudDsKLSAgICBEZWZpbml0aW9uIHdzZGxEZWZpbml0aW9uID0gKERlZmluaXRpb24pIHBhcmVudHMuZ2V0KHBhcmVudHMuc2l6ZSgpIC0gMSk7Ci0gICAgU3RyaW5nIGJhc2VMb2NhdGlvbiA9IHdzZGxEZWZpbml0aW9uLmdldERvY3VtZW50QmFzZVVSSSgpOwotICAgIC8vIEFkZCBpbiB0aGUgbmFtZXNwYWNlcyBkZWZpbmVkIGluIHRoZSBkb2MgYWxyZWFkeSB0aGF0IGFyZW4ndCBkZWZpbmVkIGxvY2FsbHkgaW4gdGhpcyBzY2hlbWEuCi0gICAgLy8gVGhlcmUgaXMgbm8gbmVlZCB0byBjaGVjayBmb3IgbmFtZXNwYWNlcyBvdGhlciB0aGVuIGluIHRoZSBkZWZpbnRpb25zIGFuZCB0eXBlcyBlbGVtZW50cyBhcwotICAgIC8vIGlubGluZSBzY2hlbWEgY2FuIG5vdCBoYXZlIGFueSBvdGhlciBwYXJlbnRzIGFuZCBtdXN0IGhhdmUgdGhlcmUgdHdvIHBhcmVudHMuCi0gICAgLy8gRmlyc3QgdGFrZSBjYXJlIG9mIHRoZSBkZWZpbml0aW9ucyBlbGVtZW50Ci0gICAgCi0gICAgLy8gY3JlYXRlIHRoZSBpbmxpbmUgc2NoZW1hIHN0cmluZwotCUVsZW1lbnQgdzNjZWxlbWVudCA9IGVsZW0uZ2V0RWxlbWVudCgpOwotCUhhc2h0YWJsZSBwYXJlbnRuYW1lc3BhY2VzID0gZ2V0TmFtZXNwYWNlRGVjbGFyYXRpb25zRnJvbVBhcmVudHMod3NkbERlZmluaXRpb24sdzNjZWxlbWVudCk7Ci0JU3RyaW5nIHRhcmdldE5hbWVzcGFjZSA9IHczY2VsZW1lbnQuZ2V0QXR0cmlidXRlKENvbnN0YW50cy5BVFRSX1RBUkdFVF9OQU1FU1BBQ0UpOwotCS8vIGlmIHRoZSB0YXJnZXROYW1lc3BhY2UgaGFzbid0IGJlZW4gZGVmaW5lZCBmb3IgdGhlIHNjaGVtYSB1c2UgdGhlIAotCS8vIHRhcmdldE5hbWVzcGFjZSBvZiB0aGUgZGVmaW5pdGlvbnMgZWxlbWVudAotCWlmKFVTRV9XU0RMX1RBUkdFVE5BTUVTUEFDRSAmJiAodGFyZ2V0TmFtZXNwYWNlID09IG51bGwgfHwgdGFyZ2V0TmFtZXNwYWNlLmVxdWFscyhFTVBUWV9TVFJJTkcpKSkKLQkgewotCSAgdGFyZ2V0TmFtZXNwYWNlID0gd3NkbERlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0JICB3M2NlbGVtZW50LnNldEF0dHJpYnV0ZShDb25zdGFudHMuQVRUUl9UQVJHRVRfTkFNRVNQQUNFLHRhcmdldE5hbWVzcGFjZSk7Ci0JfQotCQotICAgIC8vIElmIHRoZSBuYW1lc3BhY2UgZ2l2ZW4gaXMgb25lIG9mIHRoZSBvbGQgc2NoZW1hIG5hbWVzcGFjZXMgcHJvZHVjZSBhIHdhcm5pbmcuCi0JU3RyaW5nIG5hbWVzcGFjZSA9IHczY2VsZW1lbnQuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0JaWYobmFtZXNwYWNlLmVxdWFscyhDb25zdGFudHMuTlNfVVJJX1hTRF8xOTk5KSB8fCBuYW1lc3BhY2UuZXF1YWxzKENvbnN0YW50cy5OU19VUklfWFNEXzIwMDApKQotCSB7Ci0JICB2YWxJbmZvLmFkZFdhcm5pbmcoCi0JICAgICAgbWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX1dBUk5fT0xEX1NDSEVNQV9OQU1FU1BBQ0UsIFFVT1RFICsgQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMSArIFFVT1RFKSwgZWxlbWVudCk7Ci0JfQotCQotICAgIC8vIG5vdyBjcmVhdGUgYW5kIGNhbGwgdGhlIHZhbGlkYXRvciBmb3IgdGhlIGlubGluZSBzY2hlbWEKLSAgICBYU0RWYWxpZGF0b3Igc2NoZW1hdiA9IG5ldyBYU0RWYWxpZGF0b3IoKTsKLSAgICAKLSAgICAvL1N0cmluZyBmaWxlTG9jYXRpb24gPSBuZXcgVVJMKHZhbGlkYXRvcm1hbmFnZXIuZ2V0RmlsZW5hbWUoKSkuZ2V0UGF0aCgpOwotICAgIElubGluZVhTRFJlc29sdmVyIGlubGluZUVudGl0eVJlc29sdmVyID0KLSAgICAgIGdldEVudGl0eVJlc29sdmVyKHdzZGxEZWZpbml0aW9uLCAoVHlwZXMpIHBhcmVudHMuZ2V0KDApLCBiYXNlTG9jYXRpb24sIHRhcmdldE5hbWVzcGFjZSk7Ci0gICAgLy8JYWRkIGluIHRoZSBleHRlcm5hbCBYU0QgQ2F0YWxvZyB0byByZXNvbHZlIHNjaGVtYXMgb2ZmbGluZQotICAgIFhNTEVudGl0eVJlc29sdmVyQ2hhaW4gZW50aXR5UmVzb2x2ZXJDaGFpbiA9IG5ldyBYTUxFbnRpdHlSZXNvbHZlckNoYWluKCk7Ci0gICAgZW50aXR5UmVzb2x2ZXJDaGFpbi5hZGRFbnRpdHlSZXNvbHZlcihpbmxpbmVFbnRpdHlSZXNvbHZlcik7Ci0gICAgZW50aXR5UmVzb2x2ZXJDaGFpbi5hZGRFbnRpdHlSZXNvbHZlcih2YWxJbmZvLmdldFVSSVJlc29sdmVyKCkpOwotICAgIC8vZW50aXR5UmVzb2x2ZXJDaGFpbi5hZGRFbnRpdHlSZXNvbHZlcihYTUxDYXRhbG9nUmVzb2x2ZXIuZ2V0SW5zdGFuY2UoKSk7Ci0gICAgZW50aXR5UmVzb2x2ZXJDaGFpbi5hZGRFbnRpdHlSZXNvbHZlcihuZXcgRmlsZUVudGl0eVJlc29sdmVyKCkpOwotCQotICAgIC8vCSBDcmVhdGUgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgaW5saW5lIHNjaGVtYS4gCi0gICAgU3RyaW5nIHhzZCA9IElubGluZVNjaGVtYUdlbmVyYXRvci5jcmVhdGVYU0RTdHJpbmcodzNjZWxlbWVudCwgZWxlbWVudHMsIGJhc2VMb2NhdGlvbiwgcGFyZW50bmFtZXNwYWNlcywgaW5saW5lRW50aXR5UmVzb2x2ZXIuZ2V0SW5saW5lU2NoZW1hTlNzKCkpOyAKLQotCQotICAgIHNjaGVtYXYudmFsaWRhdGVJbmxpbmVTY2hlbWEoeHNkLCB0YXJnZXROYW1lc3BhY2UsIGJhc2VMb2NhdGlvbiwgZW50aXR5UmVzb2x2ZXJDaGFpbiwgaW5saW5lRW50aXR5UmVzb2x2ZXIsIHZhbEluZm8uZ2V0U2NoZW1hQ2FjaGUoKSk7Ci0gICAgCi0vLwljaGVjayBpZiB0aGUgU09BUCBFbmNvZGluZyBuYW1lc3BhY2UgaXMgcmVxdWlyZWQgYnV0IG5vdCBpbXBvcnRlZAotCQkgaWYgKElubGluZVNjaGVtYUdlbmVyYXRvci5zb2FwRW5jb2RpbmdSZXF1aXJlZE5vdEltcG9ydGVkKGVsZW0uZ2V0RWxlbWVudCgpLCBiYXNlTG9jYXRpb24sIHBhcmVudG5hbWVzcGFjZXMpKQotCQkgewotCQkgICB2YWxJbmZvLmFkZFdhcm5pbmcobWVzc2FnZWdlbmVyYXRvci5nZXRTdHJpbmcoX1dBUk5fU09BUEVOQ19JTVBPUlRFRF9TQ0hFTUEpLCBlbGVtZW50KTsKLQkJIH0KLQotICAgIC8vIElmIHRoZSBzY2hlbWEgaXNuJ3QgdmFsaWQgYWRkIHRoZSBlcnJvciBtZXNzYWdlcyBwcm9kdWNlZCB0byB2YWxpbmZvLgotICAgIC8vIERvbid0IGFkZCB0aGUgZXJyb3JzIGlmIHRoZXkgYXJlIGxvY2F0ZWQgb24gYW5vdGhlciBpbmxpbmUgc2NoZW1hLiBUaGVzZQotCS8vIHdpbGwgYmUgcmVwb3J0ZWQgd2hlbiB0aGUgb3RoZXIgc2NoZW1hIGlzIHZhbGlkYXRlZC4KLQkJIAotICAgIGlmICghc2NoZW1hdi5pc1ZhbGlkKCkpCi0gICAgewotICAgICAgSXRlcmF0b3IgZXJyb3JzID0gc2NoZW1hdi5nZXRFcnJvcnMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGVycm9ycy5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIEVycm9yTWVzc2FnZSBlcnIgPSAoRXJyb3JNZXNzYWdlKSBlcnJvcnMubmV4dCgpOwotICAgICAgICBTdHJpbmcgdXJpID0gZXJyLmdldFVSSSgpOwotICAgICAgICBpbnQgbGluZSA9IGVyci5nZXRFcnJvckxpbmUoKTsKLSAgICAgICAgU3RyaW5nIGVycm1lc3MgPSBlcnIuZ2V0RXJyb3JNZXNzYWdlKCk7Ci0gICAgICAgIGVycm1lc3MgPSByZXBsYWNlTmFtZXNwYWNlKGVycm1lc3MsIG5hbWVzcGFjZSk7Ci0gICAgICAgIGlmKGxpbmUgPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgaWYodXJpID09IG51bGwgfHwgdXJpLmVxdWFscyh2YWxJbmZvLmdldEZpbGVVUkkoKSkpCi0gICAgICAgICAgewotCQkJdmFsSW5mby5hZGRFcnJvcihlcnJtZXNzLCBnZXRPYmplY3RBdExpbmUobGluZSAtIDEsIGVsZW1lbnRzKSk7Ci0gICAgICAgICAgfQotCQkgIGVsc2UgaWYoIWlubGluZUVudGl0eVJlc29sdmVyLmlzSW5saW5lU2NoZW1hKHVyaSkgJiYgIXVyaS5lcXVhbHModmFsSW5mby5nZXRGaWxlVVJJKCkgKyBJbmxpbmVYU0RSZXNvbHZlci5JTkxJTkVfU0NIRU1BX0lEKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB2YWxJbmZvLmFkZEVycm9yKGVycm1lc3MsIGxpbmUsIGVyci5nZXRFcnJvckNvbHVtbigpLCB1cmkpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCQllbHNlIGlmKHVyaSAhPSBudWxsICYmICFpbmxpbmVFbnRpdHlSZXNvbHZlci5pc0lubGluZVNjaGVtYSh1cmkpICYmICF1cmkuZXF1YWxzKHZhbEluZm8uZ2V0RmlsZVVSSSgpICsgSW5saW5lWFNEUmVzb2x2ZXIuSU5MSU5FX1NDSEVNQV9JRCkpCi0gICAgICAgIHsKLQkgICAgICB2YWxJbmZvLmFkZEVycm9yKGVycm1lc3MsIDAsMCwgdXJpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAvLyBJZiB0aGUgcGFyc2VyIHdhcyBhYmxlIHRvIGNyZWF0ZSBhIHNjaGVtYSBtb2RlbCBhc3NpZ24gaXQgZm9yIHVzZS4gCi0gICAgLy8gSWYgdGhlIHNjaGVtYSBpcyBpbnZhbGlkIHdlIHN0aWxsIHdhbnQgdG8gbWFrZSB1c2Ugb2YgdGhlIG1vZGVsCi0gICAgLy8gd2hlcmUgcG9zc2libGUgdG8gYXZvaWQgY2FzY2FkaW5nIGVycm9yIG1lc3NhZ2VzIHRvIG1lc3NhZ2UgcGFydHMuCi0gICAgWFNNb2RlbCB4c01vZGVsID0gc2NoZW1hdi5nZXRYU01vZGVsKCk7Ci0gICAgaWYoeHNNb2RlbCAhPSBudWxsKQotICAgIHsKLSAgICAgIHZhbEluZm8uYWRkU2NoZW1hKHhzTW9kZWwpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBHZXQgYW4gZW50aXR5IHJlc29sdmVyIHRoYXQgd2lsbCByZXNvbHZlIGlubGluZSBzY2hlbWFzLiAgRXZlcnkgaW5saW5lIHNjaGVtYSBpcyBwcmVyZWdpc3RlcmVkIHdpdGgKLSAgICogdGhlIHJlc29sdmVyLgotICAgKiAKLSAgICogQHBhcmFtIHdzZGxEZWZpbml0aW9uIFRoZSBXU0RMIGRlZmluaXRpb25zIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB0eXBlcyBUaGUgdHlwZXMgZWxlbWVudC4KLSAgICogQHBhcmFtIHJlZmVyZW5jZUxvY2F0aW9uIFRoZSBsb2NhdGlvbiBvZiB0aGUgZmlsZSB0aGF0IGNvbnRhaW5zIHRoaXMgc2NoZW1hLgotICAgKiBAcGFyYW0gdGFyZ2V0TmFtZXNwYWNlIFRoZSB0YXJnZXROYW1lc3BhY2Ugb2YgdGhlIHNjaGVtYS4KLSAgICogQHJldHVybiBBbiBlbnRpdHkgcmVzb2x2ZXIgdGhhdCBjYW4gcmVzb2x2ZSBpbmxpbmUgc2NoZW1hcy4KLSAgICovCi0gIHByb3RlY3RlZCBJbmxpbmVYU0RSZXNvbHZlciBnZXRFbnRpdHlSZXNvbHZlcihEZWZpbml0aW9uIHdzZGxEZWZpbml0aW9uLCBUeXBlcyB0eXBlcywgU3RyaW5nIHJlZmVyZW5jZUxvY2F0aW9uLCBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlKQotICB7Ci0gICAgSW5saW5lWFNEUmVzb2x2ZXIgZW50aXR5UmVzb2x2ZXIgPSBuZXcgSW5saW5lWFNEUmVzb2x2ZXIoKTsKLS8vICAgIGVudGl0eVJlc29sdmVyLnNldFJlZmVyZW5jZUxvY2F0aW9uKHJlZmVyZW5jZUxvY2F0aW9uKTsKLSAgICBMaXN0IHNjaGVtYXMgPSB0eXBlcy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICBpZiAoc2NoZW1hcyAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGlTY2hlbWFzID0gc2NoZW1hcy5pdGVyYXRvcigpOwotCSAgU2V0IG5hbWVzcGFjZXMgPSBuZXcgVHJlZVNldCgpOyAKLSAgICAgIHdoaWxlIChpU2NoZW1hcy5oYXNOZXh0KCkpIAotICAgICAgeyAKLSAgICAgICAgVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50IGV4dEVsZW0gPSAoVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KSBpU2NoZW1hcy5uZXh0KCk7IAotICAgICAgICBTdHJpbmcgdGhpc05hbWVzcGFjZSA9IGV4dEVsZW0uZ2V0RWxlbWVudCgpLmdldEF0dHJpYnV0ZShDb25zdGFudHMuQVRUUl9UQVJHRVRfTkFNRVNQQUNFKTsgCi0gICAgICAgIGlmKHRoaXNOYW1lc3BhY2UgIT0gbnVsbCkgCi0gICAgICAgIHsgCi0gICAgICAgICAgICAgICAgbmFtZXNwYWNlcy5hZGQodGhpc05hbWVzcGFjZSk7IAotICAgICAgICB9IAotICAgICAgfSAKLSAgICAgIGlTY2hlbWFzID0gc2NoZW1hcy5pdGVyYXRvcigpOyAKLQotICAgICAgd2hpbGUgKGlTY2hlbWFzLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50IGV4dEVsZW0gPSAoVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KSBpU2NoZW1hcy5uZXh0KCk7Ci0gICAgICAgIFN0cmluZyB0aGlzTmFtZXNwYWNlID0gZXh0RWxlbS5nZXRFbGVtZW50KCkuZ2V0QXR0cmlidXRlKENvbnN0YW50cy5BVFRSX1RBUkdFVF9OQU1FU1BBQ0UpOwotICAgICAgICBpZiAodGhpc05hbWVzcGFjZSAhPSBudWxsICYmICF0aGlzTmFtZXNwYWNlLmVxdWFsc0lnbm9yZUNhc2UodGFyZ2V0TmFtZXNwYWNlKSkKLSAgICAgICAgewotICAgICAgICAJCi0gICAgICAgIAlFbGVtZW50IGVsZW1lbnQgPSBleHRFbGVtLmdldEVsZW1lbnQoKTsKLQkJCQotLy8JCQljcmVhdGUgdGhlIGlubGluZSBzY2hlbWEgc3RyaW5nCi0JCQkgLy9FbGVtZW50IHczY2VsZW1lbnQgPSBlbGVtLmdldEVsZW1lbnQoKTsKLQkJCSBIYXNodGFibGUgcGFyZW50bmFtZXNwYWNlcyA9IGdldE5hbWVzcGFjZURlY2xhcmF0aW9uc0Zyb21QYXJlbnRzKHdzZGxEZWZpbml0aW9uLGVsZW1lbnQpOwotCQkJIFN0cmluZyB4c2QgPSBJbmxpbmVTY2hlbWFHZW5lcmF0b3IuY3JlYXRlWFNEU3RyaW5nKGVsZW1lbnQsIG5ldyBBcnJheUxpc3QoKSwgcmVmZXJlbmNlTG9jYXRpb24sIHBhcmVudG5hbWVzcGFjZXMsIG5hbWVzcGFjZXMpOwotICAgICAgICAJLy9hZGROYW1lc3BhY2VEZWNsYXJhdGlvbnNGcm9tUGFyZW50cyh3c2RsRGVmaW5pdGlvbixlbGVtZW50KTsKLSAgICAgICAgICBlbnRpdHlSZXNvbHZlci5hZGQodGhpc05hbWVzcGFjZSwgeHNkKTsKLSAgICAgICAgfQotCi0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBlbnRpdHlSZXNvbHZlcjsKLSAgfQotICAKLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEudmFsaWRhdG9yLklXU0RMMTFWYWxpZGF0b3Ijc2V0UmVzb3VyY2VCdW5kbGUoamF2YS51dGlsLlJlc291cmNlQnVuZGxlKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UmVzb3VyY2VCdW5kbGUoUmVzb3VyY2VCdW5kbGUgcmIpCi0gIHsKLSAgCW1lc3NhZ2VnZW5lcmF0b3IgPSBuZXcgTWVzc2FnZUdlbmVyYXRvcihyYik7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldE1lc3NhZ2VHZW5lcmF0b3IoTWVzc2FnZUdlbmVyYXRvciBtZXNzZ2VuKQotICB7Ci0gICAgbWVzc2FnZWdlbmVyYXRvciA9IG1lc3NnZW47Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBuYW1lc3BhY2UgZGVjbGFyYXRpb25zIGFzIGluIHRoZSBmb3JtIAotICAgKiB4bWxucz0ic29tZW5hbWVzcGFjZSIKLSAgICogZnJvbSB0aGUgZGVmaW5pdGlvbnMgYW5kIHR5cGVzIGVsZW1lbnRzIGFuZCBhZGQgdGhlbSB0byB0aGUgc2NoZW1hIGVsZW1lbnQgc28gdGhlIHNjaGVtYSAKLSAgICogdmFsaWRhdG9yIHdpbGwgaGF2ZSBhY2Nlc3MgdG8gdGhlbS4KLSAgICogCi0gICAqIEBwYXJhbSB3c2RsRGVmaW5pdGlvbiBUaGUgV1NETCBkZWZpbml0aW9ucyBlbGVtZW50LgotICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgdHlwZXMgZWxlbWVudC4KLSAgICogQHJldHVybiBBIGhhc2h0YWJsZSB3aXRoIHRoZSBuYW1lc3BhY2UgZWxlbWVudHMgZnJvbSB0aGUgZWxlbWVudHMgcHJvdmlkZWQuCi0gICAqLwotICBwcm90ZWN0ZWQgSGFzaHRhYmxlIGdldE5hbWVzcGFjZURlY2xhcmF0aW9uc0Zyb21QYXJlbnRzKERlZmluaXRpb24gd3NkbERlZmluaXRpb24sIEVsZW1lbnQgZWxlbWVudCkKLSAgewotICAJSGFzaHRhYmxlIG5zcyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICBJdGVyYXRvciBuYW1lU3BhY2VzID0gd3NkbERlZmluaXRpb24uZ2V0TmFtZXNwYWNlcygpLmtleVNldCgpLml0ZXJhdG9yKCk7Ci0KLSAgICBTdHJpbmcgWE1MTlMgPSBDb25zdGFudHMuQVRUUl9YTUxOUzsKLSAgICAKLSAgICB3aGlsZSAobmFtZVNwYWNlcy5oYXNOZXh0KCkpCi0gICAgewotICAgICAgU3RyaW5nIG5zcHJlZml4ID0gWE1MTlM7Ci0gICAgICBTdHJpbmcgbnMgPSAoU3RyaW5nKSBuYW1lU3BhY2VzLm5leHQoKTsKLSAgICAgIGlmICghbnMuZXF1YWxzSWdub3JlQ2FzZSgiIikpCi0gICAgICB7Ci0gICAgICAgIG5zcHJlZml4ICs9ICI6IjsKLSAgICAgIH0KLSAgICAgIGlmICghZWxlbWVudC5oYXNBdHRyaWJ1dGUobnNwcmVmaXggKyBucykpCi0gICAgICB7Ci0gICAgICAJbnNzLnB1dChuc3ByZWZpeCArIG5zLCB3c2RsRGVmaW5pdGlvbi5nZXROYW1lc3BhY2UobnMpKTsKLS8vICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShuc3ByZWZpeCArIG5zLCB3c2RsRGVmaW5pdGlvbi5nZXROYW1lc3BhY2UobnMpKTsKLSAgICAgIH0KLQotICAgIH0KLSAgICAvLyBOZXh0IGhhbmRsZSB0aGUgcGFyZW50IHR5cGVzIGVsZW1lbnQKLSAgICBOYW1lZE5vZGVNYXAgYXR0cyA9IGVsZW1lbnQuZ2V0UGFyZW50Tm9kZSgpLmdldEF0dHJpYnV0ZXMoKTsKLSAgICBpbnQgYXR0c2xlbmd0aCA9IGF0dHMuZ2V0TGVuZ3RoKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRzbGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgTm9kZSB0ZW1wbm9kZSA9IGF0dHMuaXRlbShpKTsKLSAgICAgIFN0cmluZyBub2RlbmFtZSA9IHRlbXBub2RlLmdldE5vZGVOYW1lKCk7Ci0gICAgICAvLyBpZiB0aGlzIGlzIGEgbmFtZXNwYWNlIGF0dHJpYnV0ZQotICAgICAgaWYgKG5vZGVuYW1lLmluZGV4T2YoWE1MTlMpICE9IC0xKQotICAgICAgewotCQluc3MucHV0KG5vZGVuYW1lLCAgdGVtcG5vZGUuZ2V0Tm9kZVZhbHVlKCkpOwotICAgICAgICAvL2VsZW1lbnQuc2V0QXR0cmlidXRlKG5vZGVuYW1lLCB0ZW1wbm9kZS5nZXROb2RlVmFsdWUoKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBuc3M7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHaXZlbiBhIGxpbmUgbnVtYmVyIGZvciB0aGUgc2NoZW1hIHJldHVybnMgdGhlIGVsZW1lbnQgZm91bmQgb24gdGhhdCBsaW5lLiAKLSAgICogVXNlZnVsIGZvciBvYnRhaW5pbmcgZWxlbWVudHMgZnJvbSBzY2hlbWEgU3RyaW5ncy4KLSAgICogCi0gICAqIEBwYXJhbSBsaW5lIFRoZSBsaW5lIG51bWJlciBmb3IgdGhlIHNjaGVtYS4KLSAgICogQHBhcmFtIGVsZW1lbnRzIFRoZSBsaXN0IG9mIGVsZW1lbnRzIHRvIGNoZWNrLgotICAgKiBAcmV0dXJuIFRoZSBvYmplY3QgbG9jYXRlZCBhdCB0aGUgbGluZSBvciBhdCBsaW5lIDAgaWYgdGhlIGxpbmUgaXMgaW52YWxpZC4KLSAgICovCi0gICBwcm90ZWN0ZWQgT2JqZWN0IGdldE9iamVjdEF0TGluZShpbnQgbGluZSwgTGlzdCBlbGVtZW50cykKLSAgIHsKLSAgIAlpZihsaW5lIDwgMCB8fCBsaW5lID49IGVsZW1lbnRzLnNpemUoKSkKLSAgIAl7Ci0gICAJICBsaW5lID0gMDsKLSAgIAl9Ci0JcmV0dXJuIGVsZW1lbnRzLmdldChsaW5lKTsKLSAgIH0KLSAgIAotICAvKioKLSAgICogUmVwbGFjZSBhbnkgaW5zdGFuY2Ugb2YgdGhlIDIwMDEgc2NoZW1hIG5hbWVzcGFjZSBpbiB0aGUgZ2l2ZW4gbWVzc2FnZSB3aXRoCi0gICAqIHRoZSBnaXZlbiBuYW1lc3BhY2UuCi0gICAqIAotICAgKiBAcGFyYW0gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byByZXBsYWNlIHRoZSBuYW1lc3BhY2UgaW4uCi0gICAqIEBwYXJhbSBuYW1lc3BhY2UgVGhlIG5hbWVzcGFjZSB1c2VkIGZvciByZXBsYWNlbWVudC4KLSAgICogQHJldHVybiBUaGUgbWVzc2FnZSB3aXRoIHRoZSAyMDAxIHNjaGVtYSBuYW1lc3BhY2UgcmVwbGFjZWQgYnkgdGhlIGdpdmVuIG5hbWVzcGFjZS4KLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIHJlcGxhY2VOYW1lc3BhY2UoU3RyaW5nIG1lc3NhZ2UsIFN0cmluZyBuYW1lc3BhY2UpCi0gICB7Ci0gICAgIFN0cmluZyB4c2QyMDAxID0gQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMTsKLSAgICAgaW50IHN0YXJ0ID0gbWVzc2FnZS5pbmRleE9mKHhzZDIwMDEpOwotICAgICBpbnQgZW5kID0gc3RhcnQgKyB4c2QyMDAxLmxlbmd0aCgpOwotICAgICBpZihzdGFydCA8IDApCi0gICAgIHsKLSAgICAgICByZXR1cm4gbWVzc2FnZTsKLSAgICAgfQotICAgICBTdHJpbmcgc3RhcnRTdHJpbmcgPSBtZXNzYWdlLnN1YnN0cmluZygwLHN0YXJ0KTsKLSAgICAgU3RyaW5nIGVuZFN0cmluZyA9IG1lc3NhZ2Uuc3Vic3RyaW5nKGVuZCxtZXNzYWdlLmxlbmd0aCgpKTsKLSAgICAgcmV0dXJuIHN0YXJ0U3RyaW5nICsgbmFtZXNwYWNlICsgZW5kU3RyaW5nOwotICAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS94c2QvSW5saW5lWFNEUmVzb2x2ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEveHNkL0lubGluZVhTRFJlc29sdmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzZDUzNjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS94c2QvSW5saW5lWFNEUmVzb2x2ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEueHNkOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1JlYWRlcjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE1MUmVzb3VyY2VJZGVudGlmaWVyOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTklFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxFbnRpdHlSZXNvbHZlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTElucHV0U291cmNlOwotCi0vKioKLSAqIEFuIFhNTEVudGl0eVJlc29sdmVyIHRoYXQgYWxsb3dzIGlubGluZSBzY2hlbWFzIHRvIHJlc29sdmUgZWFjaCBvdGhlciB0aHJvdWdoIGltcG9ydHMuCi0gKi8KLXB1YmxpYyBjbGFzcyBJbmxpbmVYU0RSZXNvbHZlciBpbXBsZW1lbnRzIFhNTEVudGl0eVJlc29sdmVyCi17Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElOTElORV9TQ0hFTUFfSUQgPSAiI2lubGluZXNjaGVtYSI7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgRklMRV9QUkVGSVggPSAiZmlsZToiOwotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIFhNTE5TID0gInhtbG5zIjsKLSAgcHJvdGVjdGVkIEhhc2h0YWJsZSBlbnRpdGllcyA9IG5ldyBIYXNodGFibGUoKTsKLS8vICBwcm90ZWN0ZWQgU3RyaW5nIHJlZkxvY2F0aW9uID0gbnVsbDsKLSAgcHJvdGVjdGVkIFhNTEVudGl0eVJlc29sdmVyIGV4dGVybmFsUmVzb2x2ZXIgPSBudWxsOwotICBwcm90ZWN0ZWQgWE1MSW5wdXRTb3VyY2UgcmVmZXJyaW5nU2NoZW1hSW5wdXRTb3VyY2UgPSBudWxsOwotICBwcm90ZWN0ZWQgU3RyaW5nIHJlZmVycmluZ1NjaGVtYU5hbWVzcGFjZSA9IG51bGw7Ci0gIAotICAvKioKLSAgICogQ29uc3R1Y3Rvci4KLSAgICovCi0gIHB1YmxpYyBJbmxpbmVYU0RSZXNvbHZlcigpCi0gIHsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTEVudGl0eVJlc29sdmVyI3Jlc29sdmVFbnRpdHkob3JnLmFwYWNoZS54ZXJjZXMueG5pLlhNTFJlc291cmNlSWRlbnRpZmllcikKLSAgICovCi0gIHB1YmxpYyBYTUxJbnB1dFNvdXJjZSByZXNvbHZlRW50aXR5KFhNTFJlc291cmNlSWRlbnRpZmllciByZXNvdXJjZUlkZW50aWZpZXIpCi0JCSB0aHJvd3MgWE5JRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JU3RyaW5nIHN5c3RlbUlkID0gcmVzb3VyY2VJZGVudGlmaWVyLmdldEV4cGFuZGVkU3lzdGVtSWQoKTsJIAotCVN0cmluZyBwdWJsaWNJZCA9IHJlc291cmNlSWRlbnRpZmllci5nZXRQdWJsaWNJZCgpOwkKLQlTdHJpbmcgbmFtZXNwYWNlID0gcmVzb3VyY2VJZGVudGlmaWVyLmdldE5hbWVzcGFjZSgpOwotCVhNTElucHV0U291cmNlIGlzID0gbnVsbDsKLQlTdHJpbmcgc2NoZW1hID0gbnVsbDsKLQlpZiAoc3lzdGVtSWQgPT0gbnVsbCkKLQl7Ci0JICBpZihwdWJsaWNJZCA9PSBudWxsKQotCSAgewotCSAgCWlmKG5hbWVzcGFjZSA9PSBudWxsKQotCSAgCXsJCi0JICAgICAgcmV0dXJuIG51bGw7Ci0JICAJfQotCSAgCWVsc2UKLQkgIAl7Ci0JICAJCXN5c3RlbUlkID0gbmFtZXNwYWNlOwotCSAgCX0KLQkgIH0KLQkgIGVsc2UKLQkgIHsJCi0JICAgIHN5c3RlbUlkID0gcHVibGljSWQ7Ci0JICB9Ci0JfQotCSAgCi0JaWYocmVmZXJyaW5nU2NoZW1hTmFtZXNwYWNlICE9IG51bGwgJiYgcmVmZXJyaW5nU2NoZW1hTmFtZXNwYWNlLmVxdWFscyhzeXN0ZW1JZCkpCi0JewotCQlpZihyZWZlcnJpbmdTY2hlbWFJbnB1dFNvdXJjZSE9bnVsbCkKLQkJewotCQkJcmV0dXJuIHJlZmVycmluZ1NjaGVtYUlucHV0U291cmNlOwotCQl9Ci0JfQotCWVsc2UgaWYgKChzY2hlbWEgPSAoU3RyaW5nKSBlbnRpdGllcy5nZXQoc3lzdGVtSWQpKSAhPSBudWxsICYmICFzY2hlbWEuZXF1YWxzKCIiKSkKLQl7Ci0JCWlzID0gbmV3IFhNTElucHV0U291cmNlKHB1YmxpY0lkLCByZWZlcnJpbmdTY2hlbWFJbnB1dFNvdXJjZS5nZXRTeXN0ZW1JZCgpICsgSU5MSU5FX1NDSEVNQV9JRCwgbnVsbCwgbmV3IFN0cmluZ1JlYWRlcihzY2hlbWEpLG51bGwpOwotCX0KLQkKLSAgICAvL2lmKGlzID09IG51bGwpCi0gICAgLy97Ci0gICAgLy8JdGhyb3cgbmV3IElPRXhjZXB0aW9uKCk7Ci0gICAgLy99Ci0JcmV0dXJuIGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEFkZCBhbiBpbmxpbmUgc2NoZW1hLgotICAgKiAKLSAgICogQHBhcmFtIHRhcmdldE5hbWVzcGFjZSAtIHRoZSB0YXJnZXQgbmFtZXNwYWNlIG9mIHRoZSBzY2hlbWEKLSAgICogQHBhcmFtIHNjaGVtYSAtIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzY2hlbWEKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZChTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlLCBTdHJpbmcgc2NoZW1hKQotICB7Ci0gICAgZW50aXRpZXMucHV0KHRhcmdldE5hbWVzcGFjZSwgc2NoZW1hKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEFkZCB0aGUgcmVmZXJyaW5nIGlubGluZSBzY2hlbWEuIAotICAgKiAKLSAgICogQHBhcmFtIGlucHV0U291cmNlIC0gYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgaW5saW5lIHNjaGVtYQotICAgKiBAcGFyYW0gbmFtZXNwYWNlIC0gdGhlIG5hbWVzcGFjZSBvZiB0aGUgaW5saW5lIHNjaGVtYQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkUmVmZXJyaW5nU2NoZW1hKFhNTElucHV0U291cmNlIGlucHV0U291cmNlLCBTdHJpbmcgbmFtZXNwYWNlKQotICB7Ci0gICAgcmVmZXJyaW5nU2NoZW1hSW5wdXRTb3VyY2UgPSBpbnB1dFNvdXJjZTsKLSAgICByZWZlcnJpbmdTY2hlbWFOYW1lc3BhY2UgPSBuYW1lc3BhY2U7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgbmFtZXNwYWNlIGNvcnJlc3BvbmRzIHRvIGFuIGlubGluZSBzY2hlbWEsIGZhbHNlIG90aGVyd2lzZS4KLSAgICogCi0gICAqIEBwYXJhbSBuYW1lc3BhY2UgVGhlIG5hbWVzcGFjZSBvZiB0aGUgc2NoZW1hLgotICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIG5hbWVzcGFjZSBjb3JyZXNwb25kcyB0byBhbiBpbmxpbmUgc2NoZW1hLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0lubGluZVNjaGVtYShTdHJpbmcgbmFtZXNwYWNlKQotICB7Ci0gICAgcmV0dXJuIGVudGl0aWVzLmNvbnRhaW5zS2V5KG5hbWVzcGFjZSk7Ci0gIH0KLSAgCi0gIC8qKiAKLSAgICogR2V0IHRoZSBzZXQgb2YgdGhlIGlubGluZSBzY2hlbWEgbmFtZXNwYWNlcy4gCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBzZXQgb2YgdGhlIGlubGluZSBzY2hlbWEgbmFtZXNwYWNlcy4gCi0gICAqLyAKLSAgcHVibGljIFNldCBnZXRJbmxpbmVTY2hlbWFOU3MoKSAKLSAgeyAKLSAgICAgICAgcmV0dXJuIGVudGl0aWVzLmtleVNldCgpOyAKLSAgfSAKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS94c2QvU2NoZW1hQXR0cmlidXRlVGFibGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEveHNkL1NjaGVtYUF0dHJpYnV0ZVRhYmxlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4ODExMzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS94c2QvU2NoZW1hQXR0cmlidXRlVGFibGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEueHNkOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMuaW1wbC54cy5TY2hlbWFTeW1ib2xzOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnV0aWwuU3ltYm9sVGFibGU7Ci0vKioKLSAqIFRoaXMgY2xhc3Mgd2lsbCBhbGxvdyB0aGUgY2FsbGluZyBjb2RlIHRvIHNlZSBpZiB0aGUgYXR0cmlidXRlIGlzIGRlZmluZWQgaW4gc2NoZW1hLgotICogVGhpcyBzZXJ2ZXMgYXMgc2NoZW1hIGZvciBzY2hlbWEuCi0gKi8KLXB1YmxpYyBjbGFzcyBTY2hlbWFBdHRyaWJ1dGVUYWJsZSBleHRlbmRzIFN5bWJvbFRhYmxlCi17Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKi8KLSAgcHVibGljIFNjaGVtYUF0dHJpYnV0ZVRhYmxlKCkKLSAgewotICAgIC8vIGFkZCBhbGwgb2YgdGhlIHN5Ym9scyB0byB0aGUgdGFibGUuIFNjaGVtYVN5bWJvbHMgcHJvYmFibHkgc2hvdWxkIGhhdmUKLSAgICAvLyBhIFN5bWJvbFRhYmxlIGZvciB0aGVzZSBidXQgaXQgZG9lc24ndAotCi0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1RXT1BPVU5EQU5ZKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfVFdPUE9VTkRMT0NBTCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1RXT1BPVU5ET1RIRVIpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9UV09QT1VORFRBUkdFVE5TKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfUE9VTkRBTEwpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9GQUxTRV8wKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfVFJVRV8xKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfQU5ZU0lNUExFVFlQRSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0FOWVRZUEUpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9BTllVUkkpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9CQVNFNjRCSU5BUlkpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9CT09MRUFOKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfQllURSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0NPTExBUFNFKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfREFURSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0RBVEVUSU1FKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfREFZKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfREVDSU1BTCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0RPVUJMRSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0RVUkFUSU9OKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfRU5USVRZKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfRU5USVRJRVMpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9FWFRFTlNJT04pOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9GQUxTRSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0ZMT0FUKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfSEVYQklOQVJZKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfSUQpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9JRFJFRik7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0lEUkVGUyk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0lOVCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0lOVEVHRVIpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9MQU5HVUFHRSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0xBWCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0xJU1QpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9MT05HKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfTkFNRSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX05FR0FUSVZFSU5URUdFUik7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX01PTlRIKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfTU9OVEhEQVkpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9OQ05BTUUpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9OTVRPS0VOKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfTk1UT0tFTlMpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9OT05ORUdBVElWRUlOVEVHRVIpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9OT05QT1NJVElWRUlOVEVHRVIpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9OT1JNQUxJWkVEU1RSSU5HKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfTk9UQVRJT04pOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9PUFRJT05BTCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1BPU0lUSVZFSU5URUdFUik7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1BSRVNFUlZFKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfUFJPSElCSVRFRCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1FOQU1FKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfUVVBTElGSUVEKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfUkVQTEFDRSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1JFUVVJUkVEKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfUkVTVFJJQ1RJT04pOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9TSE9SVCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1NLSVApOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9TVFJJQ1QpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9TVFJJTkcpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9TVUJTVElUVVRJT04pOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9USU1FKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfVE9LRU4pOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9UUlVFKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfVU5CT1VOREVEKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfVU5JT04pOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9VTlFVQUxJRklFRCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1VOU0lHTkVEQllURSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1VOU0lHTkVESU5UKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfVU5TSUdORURMT05HKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfVU5TSUdORURTSE9SVCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1lFQVIpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9ZRUFSTU9OVEgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL3hzZC9WYWxpZGF0ZUVycm9ySGFuZGxlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS94c2QvVmFsaWRhdGVFcnJvckhhbmRsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjUyZGM0Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL3hzZC9WYWxpZGF0ZUVycm9ySGFuZGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLnhzZDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE5JRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MRXJyb3JIYW5kbGVyOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MUGFyc2VFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51dGlsLkVycm9yTWVzc2FnZTsKLQotLyoqCi0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiBYTUxFcnJvckhhbmRsZXIgdGhhdCBjYXB0dXJlcyBlcnJvciBmcm9tIFhlcmNlcy4KLSAqLwotcHVibGljIGNsYXNzIFZhbGlkYXRlRXJyb3JIYW5kbGVyIGltcGxlbWVudHMgWE1MRXJyb3JIYW5kbGVyCi17Ci0gIEFycmF5TGlzdCBlcnJvckxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLSAgCi0gIAotICAvKioKLSAgICogR2V0IHRoZSBlcnJvciBtZXNzYWdlcyBjcmVhdGVkIGJ5IFhlcmNlcy4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIGVycm9ycyBsaXN0LgotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0RXJyb3JNZXNzYWdlcygpCi0gIHsKLSAgICByZXR1cm4gZXJyb3JMaXN0OwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhIHZhbGlkYXRpb24gbWVzc2FnZSBmcm9tIHRoZSBleGNlcHRpb24gYW5kIHNldmVyaXR5LgotICAgKiAKLSAgICogQHBhcmFtIGtleSBUaGUgWGVyY2VzIGVycm9yIGtleS4KLSAgICogQHBhcmFtIGVycm9yIFRoZSBlcnJvci4KLSAgICogQHBhcmFtIHNldmVyaXR5IFRoZSBzZXZlcml0eS4KLSAgICogQHJldHVybiBBbiBlcnJvciBtZXNzYWdlLgotICAgKi8KLSAgcHJvdGVjdGVkIEVycm9yTWVzc2FnZSBjcmVhdGVWYWxpZGF0aW9uTWVzc2FnZUZvckV4Y2VwdGlvbihTdHJpbmcga2V5LCBYTUxQYXJzZUV4Y2VwdGlvbiBlcnJvciwgaW50IHNldmVyaXR5KQotICB7Ci0gICAgU3RyaW5nIHVyaSA9IGVycm9yLmdldExpdGVyYWxTeXN0ZW1JZCgpOwotICAgIGlmKHVyaSA9PSBudWxsKQotICAgIHsKLSAgICAgIHVyaSA9IGVycm9yLmdldFB1YmxpY0lkKCk7Ci0gICAgfQotICAgIEVycm9yTWVzc2FnZSBlcnJvck1lc3NhZ2UgPSBuZXcgRXJyb3JNZXNzYWdlKCk7Ci0gICAgZXJyb3JNZXNzYWdlLnNldEVycm9yTGluZShlcnJvci5nZXRMaW5lTnVtYmVyKCkpOwotICAgIGVycm9yTWVzc2FnZS5zZXRFcnJvck1lc3NhZ2UoZXJyb3IuZ2V0TWVzc2FnZSgpKTsKLSAgICBlcnJvck1lc3NhZ2Uuc2V0RXJyb3JDb2x1bW4oZXJyb3IuZ2V0Q29sdW1uTnVtYmVyKCkpOwotICAgIGVycm9yTWVzc2FnZS5zZXRVUkkodXJpKTsKLSAgICBlcnJvck1lc3NhZ2Uuc2V0U2V2ZXJpdHkoc2V2ZXJpdHkpOwotICAgIHJldHVybiBlcnJvck1lc3NhZ2U7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTEVycm9ySGFuZGxlciNlcnJvcihqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTFBhcnNlRXhjZXB0aW9uKQotICAgKi8KLSAgcHVibGljIHZvaWQgZXJyb3IoU3RyaW5nIGRvbWFpbiwgU3RyaW5nIGtleSwgWE1MUGFyc2VFeGNlcHRpb24gZXhjZXB0aW9uKSB0aHJvd3MgWE5JRXhjZXB0aW9uCi0gIHsKLSAgICBlcnJvckxpc3QuYWRkKGNyZWF0ZVZhbGlkYXRpb25NZXNzYWdlRm9yRXhjZXB0aW9uKGtleSwgZXhjZXB0aW9uLCBET01FcnJvci5TRVZFUklUWV9FUlJPUikpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxFcnJvckhhbmRsZXIjZmF0YWxFcnJvcihqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTFBhcnNlRXhjZXB0aW9uKQotICAgKi8KLSAgcHVibGljIHZvaWQgZmF0YWxFcnJvcihTdHJpbmcgZG9tYWluLCBTdHJpbmcga2V5LCBYTUxQYXJzZUV4Y2VwdGlvbiBleGNlcHRpb24pIHRocm93cyBYTklFeGNlcHRpb24KLSAgewotICAgIGVycm9yTGlzdC5hZGQoY3JlYXRlVmFsaWRhdGlvbk1lc3NhZ2VGb3JFeGNlcHRpb24oa2V5LCBleGNlcHRpb24sIERPTUVycm9yLlNFVkVSSVRZX0ZBVEFMX0VSUk9SKSk7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTEVycm9ySGFuZGxlciN3YXJuaW5nKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MUGFyc2VFeGNlcHRpb24pCi0gICAqLwotICBwdWJsaWMgdm9pZCB3YXJuaW5nKFN0cmluZyBkb21haW4sIFN0cmluZyBrZXksIFhNTFBhcnNlRXhjZXB0aW9uIGV4Y2VwdGlvbikgdGhyb3dzIFhOSUV4Y2VwdGlvbgotICB7Ci0gICAgZXJyb3JMaXN0LmFkZChjcmVhdGVWYWxpZGF0aW9uTWVzc2FnZUZvckV4Y2VwdGlvbihrZXksIGV4Y2VwdGlvbiwgRE9NRXJyb3IuU0VWRVJJVFlfV0FSTklORykpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL3hzZC9YTUxFbnRpdHlSZXNvbHZlckNoYWluLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL3hzZC9YTUxFbnRpdHlSZXNvbHZlckNoYWluLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhZWI4NTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS94c2QvWE1MRW50aXR5UmVzb2x2ZXJDaGFpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLnhzZDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE1MUmVzb3VyY2VJZGVudGlmaWVyOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTklFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxFbnRpdHlSZXNvbHZlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTElucHV0U291cmNlOwotCi0vKioKLSAqIEhhbmRsZSBhIGNoYWluIG9mIGVudGl0eSByZXNvbHZlcnMuCi0gKi8KLXB1YmxpYyBjbGFzcyBYTUxFbnRpdHlSZXNvbHZlckNoYWluIGltcGxlbWVudHMgWE1MRW50aXR5UmVzb2x2ZXIKLXsKLSAgcHJpdmF0ZSBMaXN0IGVudGl0eVJlc29sdmVycyA9IG5ldyBWZWN0b3IoKTsKLSAgCi0gIC8qKgotICAgKiBAc2VlIG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MRW50aXR5UmVzb2x2ZXIjcmVzb2x2ZUVudGl0eShvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE1MUmVzb3VyY2VJZGVudGlmaWVyKQotICAgKi8KLSAgcHVibGljIFhNTElucHV0U291cmNlIHJlc29sdmVFbnRpdHkoWE1MUmVzb3VyY2VJZGVudGlmaWVyIHhtbFJlc291cmNlSWRlbnRpZmllcikgdGhyb3dzIFhOSUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24KLSAgewotICAgIFhNTElucHV0U291cmNlIGlzID0gbnVsbDsKLSAgICAKLSAgICAvLyBUT0RPOiBUaGlzIGZpeCBzaG91bGQgYmUgcmVtb3ZlZCBvbmNlIHRoaXMgcHJvYmxlbSBpcyBmaXhlZCBpbiBYZXJjZXMuCi0gICAgLy8gWGVyY2VzIGN1cnJlbnRseSAodmVyc2lvbiAyLjcpIGhhcyBhIHByb2JsZW0gd2hlbiB0aGUgaG9ub3VyIGFsbCBzY2hlbWEgbG9jYXRpb25zCi0gICAgLy8gcHJvcGVydHkgaXMgc2V0IGFuZCB0aGUgc2FtZSBzY2hlbWEgaXMgaW1wb3J0ZWQgYnkgdHdvIGRpZmZlcmVudCBmaWxlcyBhbmQgb25lCi0gICAgLy8gb2YgdGhlIGltcG9ydHMgdXNlcyBcIGFuZCBhbm90aGVyIHVzZXMgLyBpbiBwYXJ0IG9mIHRoZSBsb2NhdGlvbi4KLSAgICBpZih4bWxSZXNvdXJjZUlkZW50aWZpZXIuZ2V0TGl0ZXJhbFN5c3RlbUlkKCkgIT0gbnVsbCkKLSAgICAJeG1sUmVzb3VyY2VJZGVudGlmaWVyLnNldExpdGVyYWxTeXN0ZW1JZCh4bWxSZXNvdXJjZUlkZW50aWZpZXIuZ2V0TGl0ZXJhbFN5c3RlbUlkKCkucmVwbGFjZSgnXFwnLCcvJykpOwotICAgIAotICAgIEl0ZXJhdG9yIGVudGl0eVJlc29sdmVySXRlciA9IGVudGl0eVJlc29sdmVycy5pdGVyYXRvcigpOwotICAgIHdoaWxlIChlbnRpdHlSZXNvbHZlckl0ZXIuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIFhNTEVudGl0eVJlc29sdmVyIGVudGl0eVJlc29sdmVyID0gKFhNTEVudGl0eVJlc29sdmVyKWVudGl0eVJlc29sdmVySXRlci5uZXh0KCk7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgaXMgPSBlbnRpdHlSZXNvbHZlci5yZXNvbHZlRW50aXR5KHhtbFJlc291cmNlSWRlbnRpZmllcik7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoWE5JRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgIH0KLSAgICAgIGlmIChpcyAhPSBudWxsKQotICAgICAgewotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gVGhyb3cgYW5kIElPRXhjZXB0aW9uIGlmIHRoZSBmaWxlIGlzbid0IGZvdW5kCi0gICAgaWYgKGlzID09IG51bGwpCi0gICAgewotICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJVbmFibGUgdG8gbG9jYXRlIGZpbGUiKTsKLSAgICB9Ci0gICAgcmV0dXJuIGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEFkZCBhbiBlbnRpdHkgcmVzb2x2ZXIgdG8gdGhpcyBjaGFpbi4KLSAgICogCi0gICAqIEBwYXJhbSBlbnRpdHlSZXNvbHZlciBUaGUgcmVzb2x2ZXIgdG8gYWRkIHRvIHRoZSBjaGFpbi4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEVudGl0eVJlc29sdmVyKFhNTEVudGl0eVJlc29sdmVyIGVudGl0eVJlc29sdmVyKQotICB7Ci0gICAgZW50aXR5UmVzb2x2ZXJzLmFkZChlbnRpdHlSZXNvbHZlcik7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEveHNkL1hTRFZhbGlkYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS94c2QvWFNEVmFsaWRhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2NzBhM2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS94c2QvWFNEVmFsaWRhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLnhzZDsKLQotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nUmVhZGVyOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5pbXBsLkNvbnN0YW50czsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5pbXBsLnhzLlhTRERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnBhcnNlcnMuWE1MR3JhbW1hclByZXBhcnNlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy51dGlsLlhNTEdyYW1tYXJQb29sSW1wbDsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuZ3JhbW1hcnMuR3JhbW1hcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuZ3JhbW1hcnMuWE1MR3JhbW1hckRlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5ncmFtbWFycy5YTUxHcmFtbWFyUG9vbDsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuZ3JhbW1hcnMuWFNHcmFtbWFyOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MRW50aXR5UmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxJbnB1dFNvdXJjZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5TdHJpbmdMaXN0OwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTTW9kZWw7Ci0KLQotLyoqCi0gKiBWYWxpZGF0ZSBzY2hlbWFzIGZyb20gZmlsZXMgb3IgU3RyaW5nLgotICovCi1wdWJsaWMgY2xhc3MgWFNEVmFsaWRhdG9yCi17Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgSE9OT1VSX0FMTF9TQ0hFTUFfTE9DQVRJT05TX0ZFQVRVUkVfSUQgPSAiaHR0cDovL2FwYWNoZS5vcmcveG1sL2ZlYXR1cmVzL2hvbm91ci1hbGwtc2NoZW1hTG9jYXRpb25zIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBGSUxFX1BSRUZJWCA9ICJmaWxlOiI7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgWE1MTlMgPSAieG1sbnMiOwotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIFRBUkdFVE5BTUVTUEFDRSA9ICJ0YXJnZXROYW1lc3BhY2UiOwotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIE5BTUVTUEFDRSA9ICJuYW1lc3BhY2UiOwotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIElNUE9SVCA9ICJpbXBvcnQiOwotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIFNDSEVNQUxPQ0FUSU9OID0gInNjaGVtYUxvY2F0aW9uIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBUWVBFID0gInR5cGUiOwotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nW10gaWdub3JlTmFtZXNwYWNlcyA9Ci0gICAgeyAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiLCAiaHR0cDovL3d3dy53My5vcmcvMTk5OS9YTUxTY2hlbWEiIH07Ci0KLSAgcHJvdGVjdGVkIFhTTW9kZWwgeHNNb2RlbDsKLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNWYWxpZFhTRDsKLSAgcHJvdGVjdGVkIExpc3QgZXJyb3JzOwotICBwcm90ZWN0ZWQgU3RyaW5nIGZpbGVsb2NhdGlvbjsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqLwotICBwdWJsaWMgWFNEVmFsaWRhdG9yKCkKLSAgewotICAgIHhzTW9kZWwgPSBudWxsOwotICAgIGlzVmFsaWRYU0QgPSBmYWxzZTsKLSAgICBlcnJvcnMgPSBudWxsOwotICB9Ci0gIC8qKgotICAgKiBWYWxpZGF0ZSBhbiBpbmxpbmUgc2NoZW1hLgotICAgKiAKLSAgICogQHBhcmFtIHNjaGVtYSBBIHNjaGVtYSByZXByZXNlbnRlZCBhcyBhIHN0cmluZy4KLSAgICogQHBhcmFtIHRhcmdldE5hbWVzcGFjZSBUaGUgdGFyZ2V0IG5hbWVzcGFjZSBvZiB0aGUgc2NoZW1hLgotICAgKiBAcGFyYW0gZmlsZWxvYyBUaGUgdXJpIG9mIHRoZSBmaWxlIHRoYXQgY29udGFpbnMgdGhlIHNjaGVtYS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHZhbGlkYXRlSW5saW5lU2NoZW1hKFN0cmluZyBzY2hlbWEsIFN0cmluZyB0YXJnZXROYW1lc3BhY2UsIFN0cmluZyBmaWxlbG9jKQotICB7Ci0gICAgdmFsaWRhdGVJbmxpbmVTY2hlbWEoc2NoZW1hLCB0YXJnZXROYW1lc3BhY2UsIGZpbGVsb2MsIG51bGwsIG51bGwsIG51bGwpOwotICB9Ci0gIAotICAvKioKLSAgICogVmFsaWRhdGUgYW4gaW5saW5lIHNjaGVtYSBhbmQgc3BlY2lmeSBhbiBlbnRpdHkgcmVzb2x2ZXIuCi0gICAqIAotICAgKiBAcGFyYW0gc2NoZW1hIFRoaXMgc2NoZW1hIHJlcHJlc2VudGVkIGFzIGEgc3RyaW5nLgotICAgKiBAcGFyYW0gdGFyZ2V0TmFtZXNwYWNlIFRoZSB0YXJnZXQgbmFtZXNwYWNlIG9mIHRoZSBzY2hlbWEuCi0gICAqIEBwYXJhbSBmaWxlbG9jIFRoZSB1cmkgb2YgdGhlIGZpbGUgdGhhdCBjb250YWlucyB0aGlzIHNjaGVtYS4KLSAgICogQHBhcmFtIGVudGl0eVJlc29sdmVyQ2hhaW4gVGhlIGVudGl0eSByZXNvbHZlciBjaGFpbi4KLSAgICogQHBhcmFtIGlubGluZVNjaGVtYUVudGl0eVJlc29sdmVyIEFuIGlubGluZSBzY2hlbWEgcmVzb2x2ZXIgZm9yIHRoaXMgc2NoZW1hLgotICAgKiBAcGFyYW0gZ3JhbW1hclBvb2wgQSBYZXJjZXMgWE1MR3JhbW1hclBvb2wgdGhhdCBob2xkcyBwcmVjYWNoZWQgc2NoZW1hcy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHZhbGlkYXRlSW5saW5lU2NoZW1hKAotICAgIFN0cmluZyBzY2hlbWEsCi0gICAgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSwKLSAgICBTdHJpbmcgZmlsZWxvYywKLSAgICBYTUxFbnRpdHlSZXNvbHZlciBlbnRpdHlSZXNvbHZlckNoYWluLAotICAgIFhNTEVudGl0eVJlc29sdmVyIGlubGluZVNjaGVtYUVudGl0eVJlc29sdmVyLAotICAgIFhNTEdyYW1tYXJQb29sIGdyYW1tYXJQb29sKQotICB7Ci0gICAgZmlsZWxvY2F0aW9uID0gZmlsZWxvYzsKLSAgICAKLSAgICB2YWxpZGF0ZVhTRChzY2hlbWEsIHRydWUsIGVudGl0eVJlc29sdmVyQ2hhaW4sdGFyZ2V0TmFtZXNwYWNlLCBpbmxpbmVTY2hlbWFFbnRpdHlSZXNvbHZlciwgZ3JhbW1hclBvb2wpOwotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlIHRoZSBmaWxlIGxvY2F0ZWQgYXQgdGhlIHVyaSBzcGVjaWZpZWQgd2l0aCB0aGUgZ2l2ZW4gZW50aXR5IHJlc29sdmVyLgotICAgKiAKLSAgICogQHBhcmFtIHVyaSBBbiBhYnNvbHV0ZSB1cmkgZm9yIHRoZSBzY2hlbWEgbG9jYXRpb24uCi0gICAqIEBwYXJhbSBlbnRpdHlSZXNvbHZlciBBbiBlbnRpdHkgcmVzb2x2ZXIgdG8gYmUgdXNlZC4KLSAgICogQHBhcmFtIGdyYW1tYXJQb29sIEEgWGVyY2VzIFhNTEdyYW1tYXJQb29sIHRoYXQgaG9sZHMgcHJlY2FjaGVkIHNjaGVtYXMuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2YWxpZGF0ZShTdHJpbmcgdXJpLCBYTUxFbnRpdHlSZXNvbHZlciBlbnRpdHlSZXNvbHZlciwgWE1MR3JhbW1hclBvb2wgZ3JhbW1hclBvb2wpCi0gIHsKLSAgICB2YWxpZGF0ZVhTRCh1cmksIGZhbHNlLCBlbnRpdHlSZXNvbHZlciwgbnVsbCwgbnVsbCwgZ3JhbW1hclBvb2wpOwotICB9Ci0gIAotICAvKioKLSAgICogVmFsaWRhdGUgdGhlIHNjaGVtYS4KLSAgICogCi0gICAqIEBwYXJhbSBzY2hlbWEgVGhlIHNjaGVtYSBvciBpdCdzIGxvY2F0aW9uLgotICAgKiBAcGFyYW0gaW5saW5lWFNEIFRydWUgaWYgYW4gaW5saW5lIHNjaGVtYSwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKiBAcGFyYW0gZW50aXR5UmVzb2x2ZXIgQW4gZW50aXR5IHJlc29sdmVyIHRvIHVzZS4KLSAgICogQHBhcmFtIHRhcmdldE5hbWVzcGFjZSBUaGUgdGFyZ2V0IG5hbWVzcGFjZSBvZiB0aGUgc2NoZW1hIGJlaW5nIHZhbGlkYXRlZC4KLSAgICogQHBhcmFtIGlubGluZVNjaGVtYUVudGl0eVJlc29sdmVyIEFuIGlubGluZSBzY2hlbWEgZW50aXR5IHJlc29sdmVyLgotICAgKiBAcGFyYW0gZ3JhbW1hclBvb2wgQSBYZXJjZXMgWE1MR3JhbW1hclBvb2wgdGhhdCBob2xkcyBwcmVjYWNoZWQgc2NoZW1hcy4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHZhbGlkYXRlWFNEKFN0cmluZyBzY2hlbWEsIGJvb2xlYW4gaW5saW5lWFNELCBYTUxFbnRpdHlSZXNvbHZlciBlbnRpdHlSZXNvbHZlciwgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSwgWE1MRW50aXR5UmVzb2x2ZXIgaW5saW5lU2NoZW1hRW50aXR5UmVzb2x2ZXIsIFhNTEdyYW1tYXJQb29sIGdyYW1tYXJQb29sKQotICB7Ci0JVmFsaWRhdGVFcnJvckhhbmRsZXIgZXJyb3JIYW5kbGVyID0gbmV3IFZhbGlkYXRlRXJyb3JIYW5kbGVyKCk7Ci0JLy9lcnJvckhhbmRsZXIuZ2V0RXJyb3JNZXNzYWdlcygpLmNsZWFyKCk7Ci0JdHJ5Ci0JewotCSAgWE1MR3JhbW1hclByZXBhcnNlciBncmFtbWFyUHJlcGFyc2VyID0gbmV3IFhNTEdyYW1tYXJQcmVwYXJzZXIoKTsKLQkgIGdyYW1tYXJQcmVwYXJzZXIucmVnaXN0ZXJQcmVwYXJzZXIoWE1MR3JhbW1hckRlc2NyaXB0aW9uLlhNTF9TQ0hFTUEsbnVsbC8qc2NoZW1hTG9hZGVyKi8pOwotCQkKLQkgIGdyYW1tYXJQcmVwYXJzZXIuc2V0RmVhdHVyZShDb25zdGFudHMuWEVSQ0VTX0ZFQVRVUkVfUFJFRklYICsgQ29uc3RhbnRzLkNPTlRJTlVFX0FGVEVSX0ZBVEFMX0VSUk9SX0ZFQVRVUkUsIGZhbHNlKTsKLSAgICAgIGdyYW1tYXJQcmVwYXJzZXIuc2V0RmVhdHVyZShDb25zdGFudHMuWEVSQ0VTX0ZFQVRVUkVfUFJFRklYICsgQ29uc3RhbnRzLk5BTUVTUEFDRVNfRkVBVFVSRSwgdHJ1ZSk7Ci0gICAgICBncmFtbWFyUHJlcGFyc2VyLnNldEZlYXR1cmUoQ29uc3RhbnRzLlhFUkNFU19GRUFUVVJFX1BSRUZJWCArIENvbnN0YW50cy5OQU1FU1BBQ0VfUFJFRklYRVNfRkVBVFVSRSwgdHJ1ZSk7Ci0JICBncmFtbWFyUHJlcGFyc2VyLnNldEZlYXR1cmUoQ29uc3RhbnRzLlhFUkNFU19GRUFUVVJFX1BSRUZJWCArIENvbnN0YW50cy5WQUxJREFUSU9OX0ZFQVRVUkUsIHRydWUpOwotCSAgZ3JhbW1hclByZXBhcnNlci5zZXRGZWF0dXJlKENvbnN0YW50cy5YRVJDRVNfRkVBVFVSRV9QUkVGSVggKyBDb25zdGFudHMuU0NIRU1BX1ZBTElEQVRJT05fRkVBVFVSRSwgdHJ1ZSk7Ci0gICAgICBncmFtbWFyUHJlcGFyc2VyLnNldEZlYXR1cmUoQ29uc3RhbnRzLlhFUkNFU19GRUFUVVJFX1BSRUZJWCArIENvbnN0YW50cy5TQ0hFTUFfRlVMTF9DSEVDS0lORywgZmFsc2UpOwotCSAgZ3JhbW1hclByZXBhcnNlci5zZXRGZWF0dXJlKENvbnN0YW50cy5YRVJDRVNfRkVBVFVSRV9QUkVGSVggKyBDb25zdGFudHMuRVhURVJOQUxfR0VORVJBTF9FTlRJVElFU19GRUFUVVJFLCB0cnVlKTsKLQkgIGdyYW1tYXJQcmVwYXJzZXIuc2V0RmVhdHVyZShDb25zdGFudHMuWEVSQ0VTX0ZFQVRVUkVfUFJFRklYICsgQ29uc3RhbnRzLkVYVEVSTkFMX1BBUkFNRVRFUl9FTlRJVElFU19GRUFUVVJFLCB0cnVlKTsKLQkgIGdyYW1tYXJQcmVwYXJzZXIuc2V0RmVhdHVyZShDb25zdGFudHMuWEVSQ0VTX0ZFQVRVUkVfUFJFRklYICsgQ29uc3RhbnRzLldBUk5fT05fRFVQTElDQVRFX0FUVERFRl9GRUFUVVJFLCB0cnVlKTsKLQkgICAgICAKLQkgIHRyeQotCSAgewotCQlncmFtbWFyUHJlcGFyc2VyLnNldEZlYXR1cmUoSE9OT1VSX0FMTF9TQ0hFTUFfTE9DQVRJT05TX0ZFQVRVUkVfSUQsIHRydWUpOwotCSAgfQotCSAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotCSAgewotCSAgICAvLyBDYXRjaCB0aGUgZXhjZXB0aW9uIGFuZCBpZ25vcmUgaWYgd2UgY2FuJ3Qgc2V0IHRoaXMgZmVhdHVyZS4KLQkgIH0KLQotCSAgLy8gY3MgOiB0b2dnbGUgdGhlIGNvbW1lbnRzIG9uIHRoZXNlIDIgbGluZXMgdG8gZWFzaWx5IGRpc2FibGUgY2FjaGluZwotICAgICAgLy8gZ3JhbW1hclByZXBhcnNlci5zZXRHcmFtbWFyUG9vbChuZXcgWE1MR3JhbW1hclBvb2xJbXBsKCkpOyAJCQotCSAgZ3JhbW1hclByZXBhcnNlci5zZXRHcmFtbWFyUG9vbChncmFtbWFyUG9vbCAhPSBudWxsID8gZ3JhbW1hclBvb2wgOiBuZXcgWE1MR3JhbW1hclBvb2xJbXBsKCkpOyAKLQkgIGdyYW1tYXJQcmVwYXJzZXIuc2V0RXJyb3JIYW5kbGVyKGVycm9ySGFuZGxlcik7Ci0JICBpZiAoZW50aXR5UmVzb2x2ZXIgIT0gbnVsbCkKLQkgIHsKLQkgICAgZ3JhbW1hclByZXBhcnNlci5zZXRFbnRpdHlSZXNvbHZlcihlbnRpdHlSZXNvbHZlcik7Ci0JICB9Ci0KLQkgIHRyeQotCSAgewotCSAgICBYTUxJbnB1dFNvdXJjZSBpcyA9IG51bGw7Ci0JICAgIExpc3Qgb2xkR3JhbW1hcnMgPSBudWxsOwotCSAgICBYTUxHcmFtbWFyUG9vbEltcGwgcG9vbCA9IG51bGw7Ci0JICAgIC8vIFRoaXMgYWxsb3dzIHN1cHBvcnQgZm9yIHRoZSBpbmxpbmUgc2NoZW1hIGluIFdTREwgZG9jdW1lbnRzLgotCSAgICBpZiAoaW5saW5lWFNEKQotCSAgICB7ICAgICAgIAotCSAgICAgIFJlYWRlciByZWFkZXIgPSBuZXcgU3RyaW5nUmVhZGVyKHNjaGVtYSk7Ci0JCSAgaXMgPSBuZXcgWE1MSW5wdXRTb3VyY2UobnVsbCxmaWxlbG9jYXRpb24sZmlsZWxvY2F0aW9uLHJlYWRlcixudWxsKTsKLQkJCQkKLQkJICAoKElubGluZVhTRFJlc29sdmVyKWlubGluZVNjaGVtYUVudGl0eVJlc29sdmVyKS5hZGRSZWZlcnJpbmdTY2hlbWEoaXMsdGFyZ2V0TmFtZXNwYWNlKTsKLQkJICAvLyBJbiB0aGUgY2FzZSB0aGF0ICdzaGFyZWQnIGdyYW1tYXIgcG9vbCBpcyB1c2VkIHdlIG5lZWQgdG8gY29uc2lkZXIKLQkJICAvLyB0aGF0IHdlIG1pZ2h0IGhhdmUgYWxyZWFkeSBhZGRlZCBhIHNjaGVtYSB0byB0aGUgcG9vbCB3aXRoIHRoZSBzYW1lIHRhcmdldCBuYW1lc3BhY2UKLQkJICAvLyBhcyB0aGUgaW5saW5lIHNjaGVtYSB3ZSdyZSBob3BpbmcgdG8gY29uc3RydWN0LiAgSW4gdGhpcyBjYXNlIHdlIG5lZWQgdG8gcmVtb3ZlCi0JCSAgLy8gdGhlIHNjaGVtYSBmcm9tIHRoZSBwb29sIGJlZm9yZSBjb25zdHJ1Y3Rpbmcgb3VyIGlubGluZSBzY2hlbWEuICBXZSBjYW4gYWRkIGl0IAotCQkgIC8vIGJhY2sgd2hlbiB3ZSdyZSBhbGwgZG9uZS4KLQkJICBwb29sID0gKFhNTEdyYW1tYXJQb29sSW1wbClncmFtbWFyUHJlcGFyc2VyLmdldEdyYW1tYXJQb29sKCk7ICAgICAgICAJICAgICAgCi0JCSAgb2xkR3JhbW1hcnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCSAgLy8gUmVtb3ZlIHRoZSBpbmxpbmUgc2NoZW1hIG5hbWVzcGFjZSBpZiBpdCBpcyBsaXN0ZWQgZGlyZWN0bHkKLQkJICAvLyBpbiB0aGUgcG9vbC4gSWYgaXQgaXMgaW5kaXJlY3RseSBsaXN0ZWQgYXMgYW4gaW1wb3J0IG9mIGEgZ3JhbW1hciBsaXN0ZWQKLQkJICAvLyBkaXJlY3RseSBpbiB0aGUgcG9vbCBoaWRlIHRoZSBncmFtbWFyIHRvIGNvbnRpbnVlIHRvIGdldCBjYWNoaW5nIGJlbmVmaXRzCi0JCSAgLy8gZnJvbSB0aGUgY2FjaGVkIGdyYW1tYXIuCi0JCSAgR3JhbW1hcltdIGdyYW1tYXJzID0gcG9vbC5yZXRyaWV2ZUluaXRpYWxHcmFtbWFyU2V0KFhNTEdyYW1tYXJEZXNjcmlwdGlvbi5YTUxfU0NIRU1BKTsKLQkJICBpbnQgbnVtR3JhbW1hcnMgPSBncmFtbWFycy5sZW5ndGg7Ci0JCSAgZm9yKGludCBpID0gMDsgaSA8IG51bUdyYW1tYXJzOyBpKyspCi0JCSAgewotCQkgICAgWE1MR3JhbW1hckRlc2NyaXB0aW9uIGRlc2MgPSBncmFtbWFyc1tpXS5nZXRHcmFtbWFyRGVzY3JpcHRpb24oKTsKLQkJICAgIGlmKHRhcmdldE5hbWVzcGFjZS5lcXVhbHMoZGVzYy5nZXROYW1lc3BhY2UoKSkpCi0JCSAgICB7Ci0JCSAgICAgIG9sZEdyYW1tYXJzLmFkZChwb29sLnJlbW92ZUdyYW1tYXIoZGVzYykpOwotCQkgICAgfQotCQkgICAgZWxzZQotCQkgICAgewotCQkgICAgICBpZihncmFtbWFyc1tpXSBpbnN0YW5jZW9mIFhTR3JhbW1hcikKLQkJICAgICAgewotCQkgICAgCVhTR3JhbW1hciBncmFtbWFyID0gKFhTR3JhbW1hcilncmFtbWFyc1tpXTsKLQkJICAgIAkgIAkgIAotCQkgICAgCVN0cmluZ0xpc3QgbmFtZXNwYWNlcyA9IGdyYW1tYXIudG9YU01vZGVsKCkuZ2V0TmFtZXNwYWNlcygpOwotCQkgICAgCWlmKG5hbWVzcGFjZXMuY29udGFpbnModGFyZ2V0TmFtZXNwYWNlKSkKLQkJICAgIAl7Ci0JCSAgICAJICBvbGRHcmFtbWFycy5hZGQocG9vbC5yZW1vdmVHcmFtbWFyKGRlc2MpKTsKLQkJICAgIAkgIAkgICAgLy9wb29sLnB1dEdyYW1tYXIobmV3IFhTR3JhbW1hckhpZGVyKGdyYW1tYXIsIHRhcmdldE5hbWVzcGFjZSkpOwotCQkgICAgCX0KLQkJICAgICAgfQotCQkgICAgfQotCQkgIH0KLQkJICAgIAkKLQkJICBTZXQgaW5saW5lTlNzID0gKChJbmxpbmVYU0RSZXNvbHZlcilpbmxpbmVTY2hlbWFFbnRpdHlSZXNvbHZlcikuZ2V0SW5saW5lU2NoZW1hTlNzKCk7Ci0JCSAgSXRlcmF0b3IgbnNpdGVyID0gaW5saW5lTlNzLml0ZXJhdG9yKCk7Ci0JCSAgd2hpbGUobnNpdGVyLmhhc05leHQoKSkKLQkJICB7Ci0JCSAgICBYU0REZXNjcmlwdGlvbiBkZXNjID0gbmV3IFhTRERlc2NyaXB0aW9uKCk7Ci0JCSAgICBkZXNjLnNldE5hbWVzcGFjZSgoU3RyaW5nKW5zaXRlci5uZXh0KCkpOyAgICAgIAotCQkgICAgR3JhbW1hciBvbGRHcmFtbWFyID0gcG9vbC5yZW1vdmVHcmFtbWFyKGRlc2MpOwotCQkgICAgaWYob2xkR3JhbW1hciAhPSBudWxsKQotCQkgICAgICBvbGRHcmFtbWFycy5hZGQob2xkR3JhbW1hcik7Ci0JCSAgfQotCi0JICAgIH0KLQkgICAgLy8gZ2V0IHRoZSBpbnB1dCBzb3VyY2UgZm9yIGFuIGV4dGVybmFsIHNjaGVtYSBmaWxlCi0JICAgIGVsc2UKLQkgICAgewotCSAgICAgIGlzID0gbmV3IFhNTElucHV0U291cmNlKG51bGwsc2NoZW1hLHNjaGVtYSk7Ci0JICAgIH0KLQotCSAgICBYU0dyYW1tYXIgZ3JhbW1hciA9IChYU0dyYW1tYXIpZ3JhbW1hclByZXBhcnNlci5wcmVwYXJzZUdyYW1tYXIoWE1MR3JhbW1hckRlc2NyaXB0aW9uLlhNTF9TQ0hFTUEsaXMpOwotCSAgICB4c01vZGVsID0gZ3JhbW1hci50b1hTTW9kZWwoKTsKLQkJCQotCSAgICAvLyBIZXJlIHdlIGFkZCB0aGUgdGVtcG9yaWxpeSByZW1vdmVkIHNjaGVtYSBiYWNrLgotCQlpZiAoaW5saW5lWFNEICYmIG9sZEdyYW1tYXJzICE9IG51bGwpCi0JCXsKLQkJICBYU0REZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IG5ldyBYU0REZXNjcmlwdGlvbigpOwotCQkgIGRlc2NyaXB0aW9uLnNldE5hbWVzcGFjZSh0YXJnZXROYW1lc3BhY2UpOyAKLQkJICBwb29sLnJlbW92ZUdyYW1tYXIoZGVzY3JpcHRpb24pOwotCQkJCQotCQkgIFNldCBpbmxpbmVOU3MgPSAoKElubGluZVhTRFJlc29sdmVyKWlubGluZVNjaGVtYUVudGl0eVJlc29sdmVyKS5nZXRJbmxpbmVTY2hlbWFOU3MoKTsKLQkJICBJdGVyYXRvciBuc2l0ZXIgPSBpbmxpbmVOU3MuaXRlcmF0b3IoKTsKLQkJICB3aGlsZShuc2l0ZXIuaGFzTmV4dCgpKQotCQkgIHsKLQkJCVhTRERlc2NyaXB0aW9uIGRlc2MgPSBuZXcgWFNERGVzY3JpcHRpb24oKTsKLQkJICAgIGRlc2Muc2V0TmFtZXNwYWNlKChTdHJpbmcpbnNpdGVyLm5leHQoKSk7ICAgCi0JCSAgICBwb29sLnJlbW92ZUdyYW1tYXIoZGVzYyk7Ci0JCSAgfQotCQkgIAotCQkgIEl0ZXJhdG9yIG9sZEdJdGVyID0gb2xkR3JhbW1hcnMuaXRlcmF0b3IoKTsKLQkgICAgICB3aGlsZShvbGRHSXRlci5oYXNOZXh0KCkpCi0JCSAgewotCQkJIEdyYW1tYXIgb2xkR3JhbW1hciA9IChHcmFtbWFyKW9sZEdJdGVyLm5leHQoKTsKLQkJCSBpZihvbGRHcmFtbWFyICE9IG51bGwpCi0JCQkgICBwb29sLnB1dEdyYW1tYXIob2xkR3JhbW1hcik7Ci0JCSAgfQotCQl9ICAKLQkgIH0KLQkgIGNhdGNoIChFeGNlcHRpb24gZSkKLQkgIHsKLQkgICAgICAgIC8vIFBhcnNlciB3aWxsIHJldHVybiBudWxsIHBvaW50ZXIgZXhjZXB0aW9uIGlmIHRoZSBkb2N1bWVudCBpcyBzdHJ1Y3R1cmFsbHkgaW52YWxpZC4KLQkgICAgICAJLy8gSW4gdGhpcyBjYXNlIHdlIHNpbXBseSBpZ25vcmUgdGhlIGVycm9yLgotCSAgICAgIAkvL1N5c3RlbS5vdXQucHJpbnRsbihlKTsKLQkgIH0KLQkgIGVycm9ycyA9IGVycm9ySGFuZGxlci5nZXRFcnJvck1lc3NhZ2VzKCk7Ci0JfQotCWNhdGNoIChFeGNlcHRpb24gZSkKLQl7Ci0JICBTeXN0ZW0ub3V0LnByaW50bG4oZSk7Ci0JfQotCWlmIChlcnJvcnMuaXNFbXB0eSgpKQotCXsKLQkgIGlzVmFsaWRYU0QgPSB0cnVlOwotCX0KLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBYU01vZGVsIGNyZWF0ZWQuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBYU01vZGVsIGNyZWF0ZWQuCi0gICAqLwotCi0gIHB1YmxpYyBYU01vZGVsIGdldFhTTW9kZWwoKQotICB7Ci0gIAlyZXR1cm4geHNNb2RlbDsKLSAgfQotICAvKioKLSAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBzY2hlbWEgaXMgdmFsaWQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICogCi0gICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgc2NoZW1hIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1ZhbGlkKCkKLSAgewotICAgIHJldHVybiBpc1ZhbGlkWFNEOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybiB0aGUgZXJyb3IgbGlzdC4KLSAgICogCi0gICAqIEByZXR1cm4gQSBsaXN0IG9mIGVycm9yIGZyb20gdGhlIHNjaGVtYS4KLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldEVycm9ycygpCi0gIHsKLSAgICByZXR1cm4gZXJyb3JzOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL0Fic3RyYWN0WE1MQ29uZm9ybWFuY2VGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL0Fic3RyYWN0WE1MQ29uZm9ybWFuY2VGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlOTllY2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3htbC9BYnN0cmFjdFhNTENvbmZvcm1hbmNlRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sOwotCi0vKioKLSAqIEZhY3RvcnkgZm9yIGdlbmVyYXRpbmcgb2JqZWN0cyBuZWVkZWQgZm9yIFhNTCBDb25mb3JtYW5jZSB2YWxpZGF0aW9uLgotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RYTUxDb25mb3JtYW5jZUZhY3RvcnkKLXsKLSAgcHJvdGVjdGVkIHN0YXRpYyBBYnN0cmFjdFhNTENvbmZvcm1hbmNlRmFjdG9yeSBpbnN0YW5jZTsKLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBpbnN0YW5jZSBvZiB0aGlzIGZhY3RvcnkuCi0gICAqIAotICAgKiBAcmV0dXJuIHRoZSBpbnN0YW5jZSBvZiB0aGlzIGZhY3RvcnkKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgQWJzdHJhY3RYTUxDb25mb3JtYW5jZUZhY3RvcnkgZ2V0SW5zdGFuY2UoKQotICB7Ci0gICAgaWYgKGluc3RhbmNlID09IG51bGwpCi0gICAgewotICAgICAgaW5zdGFuY2UgPSBuZXcgRGVmYXVsdFhNTENvbmZvcm1hbmNlRmFjdG9yeSgpOwotICAgIH0KLSAgICByZXR1cm4gaW5zdGFuY2U7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBTZXQgdGhlIGltcGxlbWVudGF0aW9uIGZvciB0aGlzIGZhY3RvcnkgdG8gdXNlLgotICAgKiAKLSAgICogQHBhcmFtIGZhY3RvcnkgLSB0aGUgaW1wbGVtZW50YXRpb24gdGhpcyBmYWN0b3J5IHdpbGwgdXNlCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0SW1wbGVtZW50YXRpb24oQWJzdHJhY3RYTUxDb25mb3JtYW5jZUZhY3RvcnkgZmFjdG9yeSkKLSAgewotICAgIGluc3RhbmNlID0gZmFjdG9yeTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybiBhbiBYTUwgdmFsaWRhdG9yLgotICAgKiAKLSAgICogQHJldHVybiBhbiBYTUwgdmFsaWRhdG9yCi0gICAqLwotICBhYnN0cmFjdCBwdWJsaWMgSVhNTFZhbGlkYXRvciBnZXRYTUxWYWxpZGF0b3IoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC94bWwvRGVmYXVsdFhNTENvbmZvcm1hbmNlRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3htbC9EZWZhdWx0WE1MQ29uZm9ybWFuY2VGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2ODBmYjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3htbC9EZWZhdWx0WE1MQ29uZm9ybWFuY2VGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC54bWw7Ci0KLQotLyoqCi0gKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBBYnN0cmFjdFhNTENvbmZvcm1hbmNlRmFjdG9yeS4KLSAqLwotcHVibGljIGNsYXNzIERlZmF1bHRYTUxDb25mb3JtYW5jZUZhY3RvcnkgZXh0ZW5kcyBBYnN0cmFjdFhNTENvbmZvcm1hbmNlRmFjdG9yeQotewotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICovCi0gIHB1YmxpYyBEZWZhdWx0WE1MQ29uZm9ybWFuY2VGYWN0b3J5KCkKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC54bWwuQWJzdHJhY3RYTUxDb25mb3JtYW5jZUZhY3RvcnkjZ2V0WE1MVmFsaWRhdG9yKCkKLSAgICovCi0gIHB1YmxpYyBJWE1MVmFsaWRhdG9yIGdldFhNTFZhbGlkYXRvcigpCi0gIHsKLSAgICByZXR1cm4gbmV3IERlZmF1bHRYTUxWYWxpZGF0b3IoKTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL0RlZmF1bHRYTUxWYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC94bWwvRGVmYXVsdFhNTFZhbGlkYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjUzMzA0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC94bWwvRGVmYXVsdFhNTFZhbGlkYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDczICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbDsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdSZWFkZXI7Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLWltcG9ydCBqYXZhLnV0aWwuU3RhY2s7Ci1pbXBvcnQgamF2YS51dGlsLlRyZWVTZXQ7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5pbXBsLlhNTEVycm9yUmVwb3J0ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMucGFyc2Vycy5TQVhQYXJzZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMucGFyc2Vycy5TdGFuZGFyZFBhcnNlckNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhNTFJlc291cmNlSWRlbnRpZmllcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE5JRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5ncmFtbWFycy5YTUxHcmFtbWFyUG9vbDsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTEVudGl0eVJlc29sdmVyOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MSW5wdXRTb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5WYWxpZGF0aW9uTWVzc2FnZUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nLklMb2dnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nLkxvZ2dlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5yZXNvbHZlci5JVVJJUmVzb2x1dGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnJlc29sdmVyLlVSSVJlc29sdmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLnhzZC5YU0RWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLnhtbC5zYXguQXR0cmlidXRlczsKLWltcG9ydCBvcmcueG1sLnNheC5JbnB1dFNvdXJjZTsKLWltcG9ydCBvcmcueG1sLnNheC5Mb2NhdG9yOwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhQYXJzZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcueG1sLnNheC5YTUxSZWFkZXI7Ci1pbXBvcnQgb3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlcjsKLQotaW1wb3J0IGNvbS5pYm0ud3NkbC5Db25zdGFudHM7Ci0KLS8qKgotICogVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgSVhNTFZhbGlkYXRvci4KLSAqLwotcHVibGljIGNsYXNzIERlZmF1bHRYTUxWYWxpZGF0b3IgaW1wbGVtZW50cyBJWE1MVmFsaWRhdG9yCi17Ci0gIHByb3RlY3RlZCBTdHJpbmcgdXJpOwotICBwcm90ZWN0ZWQgVVJJUmVzb2x2ZXIgdXJpUmVzb2x2ZXIgPSBudWxsOwotICBwcm90ZWN0ZWQgTGlzdCBlcnJvcnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIC8vcHJvdGVjdGVkIFN0cmluZ0J1ZmZlciBzY2hlbWFMb2NhdGlvblN0cmluZyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgcHJvdGVjdGVkIExpc3QgaWdub3JlZE5hbWVzcGFjZUxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIAotICBwcm90ZWN0ZWQgSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0gPSBudWxsOwotICAKLSAgcHJvdGVjdGVkIFN0cmluZyBjdXJyZW50RXJyb3JLZXkgPSBudWxsOwotICBwcm90ZWN0ZWQgT2JqZWN0W10gY3VycmVudE1lc3NhZ2VBcmd1bWVudHMgPSBudWxsOwotICAKLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNDaGlsZE9mRG9jID0gZmFsc2U7Ci0gIHByb3RlY3RlZCBYTUxHcmFtbWFyUG9vbCBncmFtbWFyUG9vbCA9IG51bGw7IAotICAKLSAgLyoqCi0gICAqIEEgc3RhY2sgb2Ygc3RhcnQgdGFnIGxvY2F0aW9ucywgdXNlZCB0byBtb3ZlIGVycm9ycwotICAgKiByZXBvcnRlZCBhdCB0aGUgY2xvc2UgdGFnIHRvIGJlIHJlcG9ydGVkIGF0IHRoZSBzdGFydCB0YWcuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RhY2sgc3RhcnRFbGVtZW50TG9jYXRpb25zID0gbmV3IFN0YWNrKCk7Ci0gIHByb3RlY3RlZCBTZXQgYWRqdXN0TG9jYXRpb25FcnJvcktleVNldCA9IG5ldyBUcmVlU2V0KCk7Ci0KLS8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICovCi0gIHB1YmxpYyBEZWZhdWx0WE1MVmFsaWRhdG9yKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gICAgCi0gICAgaWdub3JlZE5hbWVzcGFjZUxpc3QuYWRkKENvbnN0YW50cy5OU19VUklfWFNEXzE5OTkpOwotICAgIGlnbm9yZWROYW1lc3BhY2VMaXN0LmFkZChDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAwKTsKLSAgICBpZ25vcmVkTmFtZXNwYWNlTGlzdC5hZGQoQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMSk7Ci0gICAgCi0gICAgYWRqdXN0TG9jYXRpb25FcnJvcktleVNldC5hZGQoImN2Yy1jb21wbGV4LXR5cGUuMi40LmIiKTsKLSAgICBhZGp1c3RMb2NhdGlvbkVycm9yS2V5U2V0LmFkZCgiY3ZjLWNvbXBsZXgtdHlwZS4yLjMiKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbC5JWE1MVmFsaWRhdG9yI3NldEZpbGUoamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEZpbGUoU3RyaW5nIHVyaSkKLSAgewotICAgIHRoaXMudXJpID0gdXJpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC54bWwuSVhNTFZhbGlkYXRvciNzZXRVUklSZXNvbHZlcihvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnJlc29sdmVyLlVSSVJlc29sdmVyKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VVJJUmVzb2x2ZXIoVVJJUmVzb2x2ZXIgdXJpUmVzb2x2ZXIpCi0gIHsKLSAgCXRoaXMudXJpUmVzb2x2ZXIgPSB1cmlSZXNvbHZlcjsKLSAgfQotICAKLSAgLyoqCi0gICAqIEBwYXJhbSBncmFtbWFyUG9vbAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0R3JhbW1hclBvb2woWE1MR3JhbW1hclBvb2wgZ3JhbW1hclBvb2wpCi0gIHsKLQl0aGlzLmdyYW1tYXJQb29sID0gZ3JhbW1hclBvb2w7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC54bWwuSVhNTFZhbGlkYXRvciNydW4oKQotICAgKi8KLSAgcHVibGljIHZvaWQgcnVuKCkKLSAgewotICAgIC8vIFZhbGlkYXRlIHRoZSBYTUwgZmlsZS4KLSAgICB0cnkKLSAgICB7Ci0gICAgICBSZWFkZXIgcmVhZGVyMSA9IG51bGw7IC8vIFVzZWQgZm9yIHZhbGlkYXRpb24gcGFyc2UuCi0gICAgICAKLSAgICAgIElucHV0U291cmNlIHZhbGlkYXRlSW5wdXRTb3VyY2U7IAotICAgICAKLSAgICAgIHZhbGlkYXRlSW5wdXRTb3VyY2UgPSBuZXcgSW5wdXRTb3VyY2UodXJpKTsKLSAgICAgIGlmICh0aGlzLmlucHV0U3RyZWFtICE9IG51bGwpCi0gICAgICB7ICAgIAotICAgICAgICBTdHJpbmcgc3RyaW5nID0gY3JlYXRlU3RyaW5nRm9ySW5wdXRTdHJlYW0oaW5wdXRTdHJlYW0pOwotICAgICAgICByZWFkZXIxID0gbmV3IFN0cmluZ1JlYWRlcihzdHJpbmcpOwotICAgICAgICAgIAotICAgICAgICB2YWxpZGF0ZUlucHV0U291cmNlLnNldEJ5dGVTdHJlYW0oaW5wdXRTdHJlYW0pOwotICAgICAgICB2YWxpZGF0ZUlucHV0U291cmNlLnNldENoYXJhY3RlclN0cmVhbShyZWFkZXIxKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgWE1MUmVhZGVyIHJlYWRlciA9IGNyZWF0ZVhNTFJlYWRlcigpOwotICAgICAgcmVhZGVyLnBhcnNlKHZhbGlkYXRlSW5wdXRTb3VyY2UpOwotICAgIH0KLSAgICBjYXRjaCAoU0FYUGFyc2VFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBObyBuZWVkIHRvIGFkZCBhbiBlcnJvciBoZXJlLiBTQVhQYXJzZUV4Y2VwdGlvbnMgYXJlIHJlcG9ydGVkIGJ5IHRoZSBlcnJvciByZXBvcnRlci4KLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gTm8gbmVlZCB0byBsb2cgdGhpcyBlcnJvci4gVGhlIFdTREwgdmFsaWRhdG9yIHdpbGwgY2F0Y2ggdGhpcyBlcnJvciB3aGVuIGNyZWF0aW5nIHRoZSBkb20gbW9kZWwuCi0gICAgICAvL0xvZ2dlckZhY3RvcnkuZ2V0SW5zdGFuY2UoKS5nZXRMb2dnZXIoKS5sb2coIlRoZSBXU0RMIHZhbGlkYXRvciB3YXMgdW5hYmxlIHRvIHJlYWQgZmlsZSAiICsgdXJpICsgIi4iLCBJTG9nZ2VyLlNFVl9FUlJPUiwgZSk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBMb2dnZXJGYWN0b3J5LmdldEluc3RhbmNlKCkuZ2V0TG9nZ2VyKCkubG9nKCJBbiBleGNlcHRpb24gb2NjdXJyZWQgd2hpbGUgcGVyZm9ybWluZyBXU0RMIFhNTCBjb25mb3JtYW5jZSB2YWxpZGF0aW9uIGZvciBmaWxlICIgKyB1cmkgKyAiLiIsIElMb2dnZXIuU0VWX0VSUk9SLCBlKTsKLSAgICB9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAcGFyYW0gaW5wdXRTdHJlYW0KLSAgICogQHJldHVybgotICAgKi8KLSAgZmluYWwgU3RyaW5nIGNyZWF0ZVN0cmluZ0ZvcklucHV0U3RyZWFtKElucHV0U3RyZWFtIGlucHV0U3RyZWFtKQotICB7Ci0gICAgLy8gSGVyZSB3ZSBhcmUgcmVhZGluZyB0aGUgZmlsZSBhbmQgc3RvcmluZyB0byBhIHN0cmluZ2J1ZmZlci4KLSAgICBTdHJpbmdCdWZmZXIgZmlsZVN0cmluZyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBJbnB1dFN0cmVhbVJlYWRlciBpbnB1dFJlYWRlciA9IG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpbnB1dFN0cmVhbSk7Ci0gICAgICBCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIoaW5wdXRSZWFkZXIpOwotICAgICAgY2hhcltdIGNoYXJzID0gbmV3IGNoYXJbMTAyNF07Ci0gICAgICBpbnQgbnVtYmVyUmVhZCA9IHJlYWRlci5yZWFkKGNoYXJzKTsKLSAgICAgIHdoaWxlIChudW1iZXJSZWFkICE9IC0xKQotICAgICAgewotICAgICAgICBmaWxlU3RyaW5nLmFwcGVuZChjaGFycywgMCwgbnVtYmVyUmVhZCk7Ci0gICAgICAgIG51bWJlclJlYWQgPSByZWFkZXIucmVhZChjaGFycyk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBMb2dnZXJGYWN0b3J5LmdldEluc3RhbmNlKCkuZ2V0TG9nZ2VyKCkubG9nKCJUaGUgV1NETCB2YWxkaWF0b3Igd2FzIHVuYWJsZSB0byBjcmVhdGUgdG8gY3JlYXRlIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIGlucHV0IHN0cmVhbS4gV1NETCBYTUwgdmFsaWRhdGlvbiBtYXkgbm90IGhhdmUgcnVuIGNvcnJlY3RseS4iLCBJTG9nZ2VyLlNFVl9FUlJPUiwgZSk7Ci0gICAgfQotICAgIHJldHVybiBmaWxlU3RyaW5nLnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC54bWwuSVhNTFZhbGlkYXRvciNoYXNFcnJvcnMoKQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaGFzRXJyb3JzKCkKLSAgewotICAgIHJldHVybiAhZXJyb3JzLmlzRW1wdHkoKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbC5JWE1MVmFsaWRhdG9yI2dldEVycm9ycygpCi0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRFcnJvcnMoKQotICB7Ci0gICAgcmV0dXJuIGVycm9yczsKLSAgfQotICAKLSAgLyoqCi0gICAqIEBwYXJhbSBtZXNzYWdlCi0gICAqIEBwYXJhbSBsaW5lCi0gICAqIEBwYXJhbSBjb2x1bW4KLSAgICogQHBhcmFtIHVyaQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkRXJyb3IoU3RyaW5nIG1lc3NhZ2UsIGludCBsaW5lLCBpbnQgY29sdW1uLCBTdHJpbmcgdXJpKQotICB7Ci0JLy8gRm9yIHRoZSBmb2xsb3dpbmcgZXJyb3JzIHRoZSBsaW5lIG51bWJlciB3aWxsIGJlIG1vZGlmaWVkIHRvIHVzZSB0aGF0IG9mIHRoZSBzdGFydAotICAJLy8gdGFnIGluc3RlYWQgb2YgdGhlIGVuZCB0YWcuCi0gIAlpZiAoY3VycmVudEVycm9yS2V5ICE9IG51bGwgJiYgYWRqdXN0TG9jYXRpb25FcnJvcktleVNldC5jb250YWlucyhjdXJyZW50RXJyb3JLZXkpKSAgCi0gIAl7Ci0gIAkgIExvY2F0aW9uQ29vcmRpbmF0ZSBhZGp1c3RlZENvb3JkaW5hdGVzID0gKExvY2F0aW9uQ29vcmRpbmF0ZSlzdGFydEVsZW1lbnRMb2NhdGlvbnMucGVlaygpOwotICAJICBsaW5lID0gYWRqdXN0ZWRDb29yZGluYXRlcy5nZXRMaW5lTnVtYmVyKCk7Ci0gIAkgIGNvbHVtbiA9IGFkanVzdGVkQ29vcmRpbmF0ZXMuZ2V0Q29sdW1uTnVtbmVyKCk7Ci0gIAl9Ci0gIAkKLQllcnJvcnMuYWRkKG5ldyBWYWxpZGF0aW9uTWVzc2FnZUltcGwobWVzc2FnZSwgbGluZSwgY29sdW1uLCBWYWxpZGF0aW9uTWVzc2FnZUltcGwuU0VWX1dBUk5JTkcsIHVyaSwgY3VycmVudEVycm9yS2V5LCBjdXJyZW50TWVzc2FnZUFyZ3VtZW50cykpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBoYW5kbGVyIGZvciB0aGUgU0FYIHBhcnNlci4gVGhpcyBoYW5kbGVyIHdpbGwgb2J0YWluIHRoZSBXU0RMCi0gICAqIG5hbWVzcGFjZSwgaGFuZGxlIGVycm9ycyBhbmQgcmVzb2x2ZSBlbnRpdGllcy4KLSAgICovCi0gIHByb3RlY3RlZCBjbGFzcyBYTUxDb25mb3JtYW5jZURlZmF1bHRIYW5kbGVyIGV4dGVuZHMgRGVmYXVsdEhhbmRsZXIKLSAgewotCXByaXZhdGUgTG9jYXRvciBsb2NhdG9yID0gbnVsbDsKLQkKLSAgICBwdWJsaWMgdm9pZCBzZXREb2N1bWVudExvY2F0b3IoTG9jYXRvciBsb2NhdG9yKSAKLSAgICB7Ci0JCXRoaXMubG9jYXRvciA9IGxvY2F0b3I7Ci0JCXN1cGVyLnNldERvY3VtZW50TG9jYXRvcihsb2NhdG9yKTsKLQl9Ci0KLQkvKioKLSAgICAgKiBAc2VlIG9yZy54bWwuc2F4LkVycm9ySGFuZGxlciNlcnJvcihTQVhQYXJzZUV4Y2VwdGlvbikKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBlcnJvcihTQVhQYXJzZUV4Y2VwdGlvbiBhcmcwKSB0aHJvd3MgU0FYRXhjZXB0aW9uCi0gICAgewotICAgICBTdHJpbmcgdGVtcFVSSSA9IGFyZzAuZ2V0U3lzdGVtSWQoKTsKLSAgICAgaWYgKGlucHV0U3RyZWFtIT0gbnVsbCAmJiBhcmcwLmdldFN5c3RlbUlkKCkgPT0gbnVsbCkKLSAgICAgewotICAgICAgIC8vbWg6IEluIHRoaXMgY2FzZSB3ZSBhcmUgdmFsaWRhdGluZyBhIHN0cmVhbSBzbyB0aGUgVVJJIG1heSBiZSBudWxsIGluIHRoaXMgZXhjZXB0aW9uCi0gICAgICAgdGVtcFVSSSA9IHVyaTsgICAgICAgCi0gICAgIH0KLSAgICAgYWRkRXJyb3IoYXJnMC5nZXRNZXNzYWdlKCksIGFyZzAuZ2V0TGluZU51bWJlcigpLCBhcmcwLmdldENvbHVtbk51bWJlcigpLCB0ZW1wVVJJKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy54bWwuc2F4LkVycm9ySGFuZGxlciNmYXRhbEVycm9yKFNBWFBhcnNlRXhjZXB0aW9uKQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGZhdGFsRXJyb3IoU0FYUGFyc2VFeGNlcHRpb24gYXJnMCkgdGhyb3dzIFNBWEV4Y2VwdGlvbgotICAgIHsKLSAgICAgIGFkZEVycm9yKGFyZzAuZ2V0TWVzc2FnZSgpLCBhcmcwLmdldExpbmVOdW1iZXIoKSwgYXJnMC5nZXRDb2x1bW5OdW1iZXIoKSwgYXJnMC5nZXRTeXN0ZW1JZCgpKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy54bWwuc2F4LkVycm9ySGFuZGxlciN3YXJuaW5nKFNBWFBhcnNlRXhjZXB0aW9uKQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHdhcm5pbmcoU0FYUGFyc2VFeGNlcHRpb24gYXJnMCkgdGhyb3dzIFNBWEV4Y2VwdGlvbgotICAgIHsKLSAgICAgIGFkZEVycm9yKGFyZzAuZ2V0TWVzc2FnZSgpLCBhcmcwLmdldExpbmVOdW1iZXIoKSwgYXJnMC5nZXRDb2x1bW5OdW1iZXIoKSwgYXJnMC5nZXRTeXN0ZW1JZCgpKTsKLSAgICB9Ci0JCi0JLyoqCi0JICogQHNlZSBvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciNlbmRFbGVtZW50KGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpCi0JICovCi0JcHVibGljIHZvaWQgZW5kRWxlbWVudChTdHJpbmcgdXJpLCBTdHJpbmcgbG9jYWxOYW1lLCBTdHJpbmcgcU5hbWUpCi0JCQl0aHJvd3MgU0FYRXhjZXB0aW9uIHsKLQkJaWYobG9jYWxOYW1lLmVxdWFscygiZG9jdW1lbnRhdGlvbiIpICYmICh1cmkuZXF1YWxzKENvbnN0YW50cy5OU19VUklfV1NETCkgfHwgdXJpLmVxdWFscyhDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxKXx8IHVyaS5lcXVhbHMoQ29uc3RhbnRzLk5TX1VSSV9YU0RfMTk5OSkgfHwgdXJpLmVxdWFscyhDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAwKSkpCi0JCXsKLQkJICBpc0NoaWxkT2ZEb2MgPSBmYWxzZTsKLQkJfQotCQlzdXBlci5lbmRFbGVtZW50KHVyaSwgbG9jYWxOYW1lLCBxTmFtZSk7Ci0JCXN0YXJ0RWxlbWVudExvY2F0aW9ucy5wb3AoKTsKLQl9Ci0JLyoqCi0JICogQHNlZSBvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciNzdGFydEVsZW1lbnQoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgb3JnLnhtbC5zYXguQXR0cmlidXRlcykKLQkgKi8KLQlwdWJsaWMgdm9pZCBzdGFydEVsZW1lbnQoU3RyaW5nIHVyaSwgU3RyaW5nIGxvY2FsTmFtZSwgU3RyaW5nIHFOYW1lLAotCQkJQXR0cmlidXRlcyBhdHRzKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsKLQkJc3RhcnRFbGVtZW50TG9jYXRpb25zLnB1c2gobmV3IExvY2F0aW9uQ29vcmRpbmF0ZShsb2NhdG9yLmdldExpbmVOdW1iZXIoKSwgbG9jYXRvci5nZXRDb2x1bW5OdW1iZXIoKSkpOwotCQlpZihsb2NhbE5hbWUuZXF1YWxzKCJkb2N1bWVudGF0aW9uIikgJiYgKHVyaS5lcXVhbHMoQ29uc3RhbnRzLk5TX1VSSV9XU0RMKSB8fCB1cmkuZXF1YWxzKENvbnN0YW50cy5OU19VUklfWFNEXzIwMDEpfHwgdXJpLmVxdWFscyhDb25zdGFudHMuTlNfVVJJX1hTRF8xOTk5KSB8fCB1cmkuZXF1YWxzKENvbnN0YW50cy5OU19VUklfWFNEXzIwMDApKSkKLQkJewotCQkgIGlzQ2hpbGRPZkRvYyA9IHRydWU7Ci0JCX0KLQkJc3VwZXIuc3RhcnRFbGVtZW50KHVyaSwgbG9jYWxOYW1lLCBxTmFtZSwgYXR0cyk7Ci0JfQotICB9Ci0gIAotICAvKioKLSAgICogQHBhcmFtIGlucHV0U3RyZWFtIC0gc2V0IHRoZSBpbnB1dFN0cmVhbSB0byB2YWxpZGF0ZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SW5wdXRTdHJlYW0oSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0pCi0gIHsKLSAgICAgIHRoaXMuaW5wdXRTdHJlYW0gPSBpbnB1dFN0cmVhbTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIGNsYXNzIFhNTFZhbGlkYXRvclBhcnNlckNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBTdGFuZGFyZFBhcnNlckNvbmZpZ3VyYXRpb24KLSAgewotCS8qIChub24tSmF2YWRvYykKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUueGVyY2VzLnBhcnNlcnMuRFREQ29uZmlndXJhdGlvbiNjcmVhdGVFcnJvclJlcG9ydGVyKCkKLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgWE1MRXJyb3JSZXBvcnRlciBjcmVhdGVFcnJvclJlcG9ydGVyKCkKLSAgICB7Ci0gICAgICByZXR1cm4gbmV3IFhNTEVycm9yUmVwb3J0ZXIoKQotICAgICAgewotICAgICAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgICAgICAqIEBzZWUgb3JnLmFwYWNoZS54ZXJjZXMuaW1wbC5YTUxFcnJvclJlcG9ydGVyI3JlcG9ydEVycm9yKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5PYmplY3RbXSwgc2hvcnQpCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgdm9pZCByZXBvcnRFcnJvcihTdHJpbmcgZG9tYWluLCBTdHJpbmcga2V5LCBPYmplY3RbXSBhcmd1bWVudHMsCi0gICAgICAgICAgICBzaG9ydCBzZXZlcml0eSkgdGhyb3dzIFhOSUV4Y2VwdGlvbgotICAgICAgICB7Ci0gICAgICAgICAgY3VycmVudEVycm9yS2V5ID0ga2V5OwotICAgICAgICAgIGN1cnJlbnRNZXNzYWdlQXJndW1lbnRzID0gYXJndW1lbnRzOwotICAgICAgICAgIHN1cGVyLnJlcG9ydEVycm9yKGRvbWFpbiwga2V5LCBhcmd1bWVudHMsIHNldmVyaXR5KTsKLSAgICAgICAgfQotICAgICAgfTsKLSAgICB9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBDcmVhdGUgYW4gWE1MIFJlYWRlci4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIG5ld2x5IGNyZWF0ZWQgWE1MIHJlYWRlciBvciBudWxsIGlmIHVuc3VjY2Vzc2Z1bC4KLSAgICogQHRocm93cyBFeGNlcHRpb24KLSAgICovCi0gIHByb3RlY3RlZCBYTUxSZWFkZXIgY3JlYXRlWE1MUmVhZGVyKCkgdGhyb3dzIEV4Y2VwdGlvbgotICB7ICAgICAKLSAgICBTQVhQYXJzZXIgcmVhZGVyID0gbnVsbDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICByZWFkZXIgPSBuZXcgb3JnLmFwYWNoZS54ZXJjZXMucGFyc2Vycy5TQVhQYXJzZXIobmV3IFhNTFZhbGlkYXRvclBhcnNlckNvbmZpZ3VyYXRpb24oKSk7Ci0gICAgICAKLSAgICAgIFhNTENvbmZvcm1hbmNlRGVmYXVsdEhhbmRsZXIgY29uZm9ybWFuY2VEZWZhdWx0SGFuZGxlciA9IG5ldyBYTUxDb25mb3JtYW5jZURlZmF1bHRIYW5kbGVyKCk7Ci0gICAgICByZWFkZXIuc2V0RXJyb3JIYW5kbGVyKGNvbmZvcm1hbmNlRGVmYXVsdEhhbmRsZXIpOwotICAgICAgcmVhZGVyLnNldENvbnRlbnRIYW5kbGVyKGNvbmZvcm1hbmNlRGVmYXVsdEhhbmRsZXIpOwotICAgICAgCi0gICAgICAvLyBPbGRlciBYZXJjZXMgdmVyc2lvbnMgd2lsbCB0aHJvd24gYSBOUEUgaWYgYSBudWxsIGdyYW1tYXIgcG9vbCBpcyBzZXQuCi0gICAgICBpZihncmFtbWFyUG9vbCAhPSBudWxsKQotICAgICAgewotICAgICAgICByZWFkZXIuc2V0UHJvcGVydHkob3JnLmFwYWNoZS54ZXJjZXMuaW1wbC5Db25zdGFudHMuWEVSQ0VTX1BST1BFUlRZX1BSRUZJWCArIG9yZy5hcGFjaGUueGVyY2VzLmltcGwuQ29uc3RhbnRzLlhNTEdSQU1NQVJfUE9PTF9QUk9QRVJUWSwgZ3JhbW1hclBvb2wpOwotICAgICAgfQotICAgICAgcmVhZGVyLnNldFByb3BlcnR5KG9yZy5hcGFjaGUueGVyY2VzLmltcGwuQ29uc3RhbnRzLlhFUkNFU19QUk9QRVJUWV9QUkVGSVggKyBvcmcuYXBhY2hlLnhlcmNlcy5pbXBsLkNvbnN0YW50cy5FTlRJVFlfUkVTT0xWRVJfUFJPUEVSVFksIG5ldyBNeUVudGl0eVJlc29sdmVyKHVyaVJlc29sdmVyKSk7Ci0gICAgICByZWFkZXIuc2V0RmVhdHVyZShvcmcuYXBhY2hlLnhlcmNlcy5pbXBsLkNvbnN0YW50cy5YRVJDRVNfRkVBVFVSRV9QUkVGSVggKyBvcmcuYXBhY2hlLnhlcmNlcy5pbXBsLkNvbnN0YW50cy5DT05USU5VRV9BRlRFUl9GQVRBTF9FUlJPUl9GRUFUVVJFLCBmYWxzZSk7Ci0gICAgICByZWFkZXIuc2V0RmVhdHVyZShvcmcuYXBhY2hlLnhlcmNlcy5pbXBsLkNvbnN0YW50cy5TQVhfRkVBVFVSRV9QUkVGSVggKyBvcmcuYXBhY2hlLnhlcmNlcy5pbXBsLkNvbnN0YW50cy5OQU1FU1BBQ0VTX0ZFQVRVUkUsIHRydWUpOwotICAgICAgcmVhZGVyLnNldEZlYXR1cmUob3JnLmFwYWNoZS54ZXJjZXMuaW1wbC5Db25zdGFudHMuU0FYX0ZFQVRVUkVfUFJFRklYICsgb3JnLmFwYWNoZS54ZXJjZXMuaW1wbC5Db25zdGFudHMuTkFNRVNQQUNFX1BSRUZJWEVTX0ZFQVRVUkUsIHRydWUpOwotCSAgcmVhZGVyLnNldEZlYXR1cmUob3JnLmFwYWNoZS54ZXJjZXMuaW1wbC5Db25zdGFudHMuU0FYX0ZFQVRVUkVfUFJFRklYICsgb3JnLmFwYWNoZS54ZXJjZXMuaW1wbC5Db25zdGFudHMuVkFMSURBVElPTl9GRUFUVVJFLCB0cnVlKTsKLQkgIHJlYWRlci5zZXRGZWF0dXJlKG9yZy5hcGFjaGUueGVyY2VzLmltcGwuQ29uc3RhbnRzLlhFUkNFU19GRUFUVVJFX1BSRUZJWCArIG9yZy5hcGFjaGUueGVyY2VzLmltcGwuQ29uc3RhbnRzLlNDSEVNQV9WQUxJREFUSU9OX0ZFQVRVUkUsIHRydWUpOwotICAgIH0gCi0gICAgY2F0Y2goRXhjZXB0aW9uIGUpCi0gICAgeyAKLSAgICAgIExvZ2dlckZhY3RvcnkuZ2V0SW5zdGFuY2UoKS5nZXRMb2dnZXIoKS5sb2coIkVycm9yIGNyZWF0aW5nIFhNTCByZWFkZXIgZm9yIFdTREwgWE1MIGNvbmZvcm1hbmNlIHZhbGlkYXRpb24uIiwgSUxvZ2dlci5TRVZfRVJST1IsIGUpOwotICAgIH0KLSAgICByZXR1cm4gcmVhZGVyOwotICB9IAotICAKLSAgLyoqCi0gICAqIEEgY3VzdG9tIGVudGl0eSByZXNvbHZlciB0aGF0IHVzZXMgdGhlIFVSSSByZXNvbHZlciBzcGVjaWZpZWQgdG8gcmVzb2x2ZSBlbnRpdGllcy4KLSAgICovCi0gIHByb3RlY3RlZCBjbGFzcyBNeUVudGl0eVJlc29sdmVyIGltcGxlbWVudHMgWE1MRW50aXR5UmVzb2x2ZXIgCi0gIHsKLSAgICBwcml2YXRlIFVSSVJlc29sdmVyIHVyaVJlc29sdmVyOwotICAgIAotICAgIC8qKgotICAgICAqIENvbnN0cnVjdG9yLgotICAgICAqIAotICAgICAqIEBwYXJhbSB1cmlSZXNvbHZlciBUaGUgVVJJIHJlc29sdmVyIHRvIHVzZSB3aXRoIHRoaXMgZW50aXR5IHJlc29sdmVyLgotICAgICAqLwotICAgIHB1YmxpYyBNeUVudGl0eVJlc29sdmVyKFVSSVJlc29sdmVyIHVyaVJlc29sdmVyKQotICAgIHsKLSAgICAgIHRoaXMudXJpUmVzb2x2ZXIgPSB1cmlSZXNvbHZlcjsKLSAgICB9Ci0gICAgCi0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxFbnRpdHlSZXNvbHZlciNyZXNvbHZlRW50aXR5KG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTUxSZXNvdXJjZUlkZW50aWZpZXIpCi0gICAgICovCi0gICAgcHVibGljIFhNTElucHV0U291cmNlIHJlc29sdmVFbnRpdHkoWE1MUmVzb3VyY2VJZGVudGlmaWVyIHJpZCkgdGhyb3dzIFhOSUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24KLSAgICB7Ci0gICAgICAvLyBJZiB3ZSdyZSBjdXJyZW50bHkgZXhhbWluaW5nIGEgc3ViZWxlbWVudCBvZiB0aGUgCi0JICAvLyBXU0RMIG9yIHNjaGVtYSBkb2N1bWVudGF0aW9uIGVsZW1lbnQgd2UgZG9uJ3Qgd2FudCB0byByZXNvbHZlIGl0Ci0JICAvLyBhcyBhbnl0aGluZyBpcyBhbGxvd2VkIGFzIGEgY2hpbGQgb2YgZG9jdW1lbnRhdGlvbi4KLQkgIGlmKGlzQ2hpbGRPZkRvYykKLQkgIHsKLQkgICAgcmV0dXJuIG5ldyBYTUxJbnB1dFNvdXJjZShyaWQpOwotCSAgfQotCSAgCi0JICBib29sZWFuIG5zVXNlZCA9IGZhbHNlOwotCSAgCi0JICBTdHJpbmcgbnMgPSByaWQuZ2V0TmFtZXNwYWNlKCk7Ci0JICBpZihucyAhPSBudWxsICYmIGlnbm9yZWROYW1lc3BhY2VMaXN0LmNvbnRhaW5zKG5zKSkKLQkgIHsKLQkJcmV0dXJuIG5ldyBYTUxJbnB1dFNvdXJjZShyaWQpOwotCSAgfQotCSAgCi0JICBTdHJpbmcgc3lzdGVtSWQgPSByaWQuZ2V0TGl0ZXJhbFN5c3RlbUlkKCk7Ci0JICBpZihzeXN0ZW1JZCA9PSBudWxsKQotCSAgewotCQlzeXN0ZW1JZCA9IG5zOwotCQluc1VzZWQgPSB0cnVlOwotCSAgfQotCSAgU3RyaW5nIHB1YmxpY0lkID0gcmlkLmdldFB1YmxpY0lkKCk7Ci0gICAgICBpZihwdWJsaWNJZCA9PSBudWxsKQotICAgICAgewotICAgICAgICBwdWJsaWNJZCA9IHN5c3RlbUlkOwotICAgICAgfQotICAgICAgCi0gICAgICAvLyBYZXJjZXMgdGVuZHMgdG8gdHJ5IHRvIHJlc29sdmUgbG9jYXRpb25zIHdpdGggbm8gaW5mb3JtYXRpb24uCi0gICAgICAvLyBObyBuZWVkIHRvIGRvIGFueSBwcm9jZXNzaW5nIGlmIHdlIGhhdmUgbm8gaW5mb3JtYXRpb24uCi0gICAgICBpZihwdWJsaWNJZCAhPSBudWxsIHx8IHN5c3RlbUlkICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIElVUklSZXNvbHV0aW9uUmVzdWx0IHJlc3VsdCA9IHVyaVJlc29sdmVyLnJlc29sdmUoIiIsIHB1YmxpY0lkLCBzeXN0ZW1JZCk7Ci0gICAgICAgIFN0cmluZyB1cmkgPSByZXN1bHQuZ2V0UGh5c2ljYWxMb2NhdGlvbigpOwotICAgICAgICBpZiAodXJpICE9IG51bGwgJiYgIXVyaS5lcXVhbHMoIiIpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gSWYgdGhlIG5hbWVzcGFjZSB3YXMgdXNlZCB0byByZXNvbHZlIHRoaXMgcmVmZXJlbmNlIGVuc3VyZSBhIHNjaGVtYQotICAgICAgICAgIC8vIGhhcyBiZWVuIHJldHVybmVkLiBOYW1lc3BhY2VzIHRlbmQgdG8gcG9pbnQgdG8gV2ViIHJlc291cmNlcyB0aGF0Ci0gICAgICAgICAgLy8gbWF5IG9yIG1heSBub3QgYmUgc2NoZW1hcy4KLSAgICAgICAgICBib29sZWFuIGNyZWF0ZUVudGl0eVJlc3VsdCA9IHRydWU7Ci0gICAgICAgICAgaWYobnNVc2VkKQotICAgICAgICAgIHsKLSAgICAgICAgCVhTRFZhbGlkYXRvciB4c2RWYWwgPSBuZXcgWFNEVmFsaWRhdG9yKCk7Ci0gICAgICAgIAl4c2RWYWwudmFsaWRhdGUodXJpLCB1cmlSZXNvbHZlciwgbnVsbCk7Ci0gICAgICAgIAlpZigheHNkVmFsLmlzVmFsaWQoKSkKLSAgICAgICAgCSAgY3JlYXRlRW50aXR5UmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICAgIGlmKGNyZWF0ZUVudGl0eVJlc3VsdCkKLSAgICAgICAgICB7Ci0JICAgICAgICB0cnkKLQkgICAgICAgIHsKLQkJICAgICAgVVJMIGVudGl0eVVSTCA9IG5ldyBVUkwodXJpKTsKLSAgICAgICAgICAgICAgWE1MSW5wdXRTb3VyY2UgaXMgPSBuZXcgWE1MSW5wdXRTb3VyY2UocmlkLmdldFB1YmxpY0lkKCksIHN5c3RlbUlkLCByZXN1bHQuZ2V0TG9naWNhbExvY2F0aW9uKCkpOwotCQkgICAgICBpcy5zZXRCeXRlU3RyZWFtKGVudGl0eVVSTC5vcGVuU3RyZWFtKCkpOwotICAgICAgICAgICAgICBpZiAoaXMgIT0gbnVsbCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBpczsKLSAgICAgICAgICAgICAgfQotCSAgICAgICAgfQotCSAgICAgICAgY2F0Y2goRXhjZXB0aW9uIGUpCi0JICAgICAgICB7Ci0JCSAgICAgIC8vIE5vIG5lZWQgdG8gcmVwb3J0IHRoaXMgZXJyb3IuIFNpbXBseSBjb250aW51ZSBiZWxvdy4KLQkgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgfSAgCi0gIAotICAvKiogCi0gICAqIEEgbGluZSBhbmQgY29sdW1uIG51bWJlciBjb29yZGluYXRlLgotICAgKi8KLSAgcHJvdGVjdGVkIGNsYXNzIExvY2F0aW9uQ29vcmRpbmF0ZQotICB7CQotCXByaXZhdGUgaW50IGxpbmVObyA9IC0xOwotICAgIHByaXZhdGUgaW50IGNvbHVtbk5vID0gLTE7Ci0gICAgCi0gICAgcHVibGljIExvY2F0aW9uQ29vcmRpbmF0ZShpbnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlcikKLSAgICB7Ci0gICAgICB0aGlzLmxpbmVObyA9IGxpbmVOdW1iZXI7Ci0gICAgICB0aGlzLmNvbHVtbk5vID0gY29sdW1uTnVtYmVyOwotICAgIH0KLSAgICAJCi0gICAgcHVibGljIGludCBnZXRMaW5lTnVtYmVyKCkKLSAgICB7IAotICAgICAgcmV0dXJuIHRoaXMubGluZU5vOwotICAgIH0KLSAgICAJCi0gICAgcHVibGljIGludCBnZXRDb2x1bW5OdW1uZXIoKQotICAgIHsgCi0gICAgICByZXR1cm4gdGhpcy5jb2x1bW5ObzsKLSAgICB9IAotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL0VsZW1lbnRMb2NhdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3htbC9FbGVtZW50TG9jYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmI5Mzk0Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL0VsZW1lbnRMb2NhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sOwotCi0vKioKLSAqIEhvbGRzIHRoZSBsb2NhdGlvbiBpbmZvcm1hdGlvbiBmb3IgYW4gZWxlbWVudCBpbiB0aGUgbW9kZWwuCi0gKi8KLXB1YmxpYyBjbGFzcyBFbGVtZW50TG9jYXRpb24KLXsgIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRCA9ICJsb2NhdGlvbiI7Ci0gIHByb3RlY3RlZCBpbnQgbGluZTsKLSAgcHJvdGVjdGVkIGludCBjb2x1bW47Ci0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICogCi0gICAqIEBwYXJhbSBsaW5lIC0gdGhlIGxpbmUgbG9jYXRpb24gb2YgdGhlIGVsZW1lbnQKLSAgICogQHBhcmFtIGNvbHVtbiAtIHRoZSBjb2x1bW4gbG9jYXRpb24gb2YgdGhlIGVsZW1lbnQKLSAgICovCi0gIHB1YmxpYyBFbGVtZW50TG9jYXRpb24oaW50IGxpbmUsIGludCBjb2x1bW4pCi0gIHsKLSAgICB0aGlzLmxpbmUgPSBsaW5lOwotICAgIHRoaXMuY29sdW1uID0gY29sdW1uOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJuIHRoZSBsaW5lIG51bWJlciBmb3IgdGhpcyBlbGVtZW50LgotICAgKiAKLSAgICogQHJldHVybiB0aGUgbGluZSBudW1iZXIgZm9yIHRoaXMgZWxlbWVudAotICAgKi8KLSAgcHVibGljIGludCBnZXRMaW5lTnVtYmVyKCkKLSAgewotICAJcmV0dXJuIGxpbmU7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm4gdGhlIGNvbHVtbiBudW1iZXIgZm9yIHRoaXMgZWxlbWVudC4KLSAgICogCi0gICAqIEByZXR1cm4gdGhlIGNvbHVtbiBudW1iZXIgZm9yIHRoaXMgZWxlbWVudAotICAgKi8KLSAgcHVibGljIGludCBnZXRDb2x1bW5OdW1iZXIoKQotICB7Ci0gIAlyZXR1cm4gY29sdW1uOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL0lYTUxDYXRhbG9nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL0lYTUxDYXRhbG9nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwY2JmODMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3htbC9JWE1MQ2F0YWxvZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sOwotCi0vKioKLSAqIEFuIGludGVyZmFjZSBmb3IgYW4gWE1MIGNhdGFsb2cuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSVhNTENhdGFsb2cKLXsKLQotICAvKioKLSAgICogQWRkIGEgcHVibGljIGlkIGFuZCBhIGxvY2F0aW9uIHRvIHRoZSBjYXRhbG9nLgotICAgKiAKLSAgICogQHBhcmFtIHB1YmxpY0lkIC0KLSAgICogICAgICAgICAgdGhlIHB1YmxpYyBpZCBvZiB0aGUgZW50cnkKLSAgICogQHBhcmFtIHN5c3RlbUlkIC0KLSAgICogICAgICAgICAgdGhlIHN5c3RlbSBpZCBvZiB0aGUgZW50cnkKLSAgICovCi0gIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGFkZEVudHJ5VG9DYXRhbG9nKFN0cmluZyBwdWJsaWNJZCwgU3RyaW5nIHN5c3RlbUlkKTsKLQotICAvKioKLSAgICogUmVzb2x2ZSB0aGUgbG9jYXRpb24gb2YgYW4gZW50aXR5IGdpdmVuIHB1YmxpYyBhbmQgc3lzdGVtIGlkcy4KLSAgICogCi0gICAqIEBwYXJhbSBwdWJsaWNJZCAtCi0gICAqICAgICAgICAgIHRoZSBwdWJsaWMgaWQgb2YgdGhlIGVudGl0eSB0byBiZSByZXNvbHZlZAotICAgKiBAcGFyYW0gc3lzdGVtSWQgLQotICAgKiAgICAgICAgICB0aGUgc3lzdGVtIGlkIG9mIHRoZSBlbnRpdHkgdG8gYmUgcmVzb2x2ZWQKLSAgICogQHJldHVybiB0aGUgbG9jYXRpb24gb2YgdGhlIGVudGl0eQotICAgKi8KLSAgcHVibGljIGFic3RyYWN0IFN0cmluZyByZXNvbHZlRW50aXR5TG9jYXRpb24oU3RyaW5nIHB1YmxpY0lkLCBTdHJpbmcgc3lzdGVtSWQpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3htbC9JWE1MVmFsaWRhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL0lYTUxWYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzYwNDE0Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL0lYTUxWYWxpZGF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5yZXNvbHZlci5VUklSZXNvbHZlcjsKLQotLyoqCi0gKiBBbiBpbnRlcmZhY2UgZm9yIGFuIFhNTCB2YWxpZGF0b3IuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSVhNTFZhbGlkYXRvcgotewotICAvKioKLSAgICogU2V0IHRoZSBmaWxlIHRvIGJlIHZhbGlkYXRlZC4KLSAgICogCi0gICAqIEBwYXJhbSB1cmkgLSB0aGUgdXJpIG9mIHRoZSBmaWxlIHRvIGJlIHZhbGlkYXRlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RmlsZShTdHJpbmcgdXJpKTsKLSAgCi0gIC8qKgotICAgKiBWYWxpZGF0ZSB0aGUgZmlsZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJ1bigpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlcmUgd2VyZSB2YWxpZGF0aW9uIGVycm9ycywgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKiAKLSAgICogQHJldHVybiB0cnVlIGlmIHRoZXJlIHdlcmUgdmFsaWRhdGlvbiBlcnJvcnMsIGZhbHNlIG90aGVyd2lzZQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaGFzRXJyb3JzKCk7Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgbGlzdCBvZiBlcnJvcnMuCi0gICAqIAotICAgKiBAcmV0dXJuIHRoZSBsaXN0IG9mIGVycm9ycwotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0RXJyb3JzKCk7Ci0gIAotICAvKioKLSAgICogU2V0IHRoZSBVUkkgcmVzb2x2ZXIgdG8gdXNlLgotICAgKiAKLSAgICogQHBhcmFtIHVyaVJlc29sdmVyIFRoZSBVUkkgcmVzb2x2ZXIgdG8gdXNlLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VVJJUmVzb2x2ZXIoVVJJUmVzb2x2ZXIgdXJpUmVzb2x2ZXIpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3htbC9MaW5lTnVtYmVyRE9NUGFyc2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL0xpbmVOdW1iZXJET01QYXJzZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzc5N2YxMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL0xpbmVOdW1iZXJET01QYXJzZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC54bWw7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5kb20uRWxlbWVudEltcGw7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMucGFyc2Vycy5ET01QYXJzZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMudXRpbC5TeW1ib2xUYWJsZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuQXVnbWVudGF0aW9uczsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuTmFtZXNwYWNlQ29udGV4dDsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuUU5hbWU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhNTEF0dHJpYnV0ZXM7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhNTExvY2F0b3I7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhOSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuZ3JhbW1hcnMuWE1MR3JhbW1hclBvb2w7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxQYXJzZXJDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYTm90UmVjb2duaXplZEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhOb3RTdXBwb3J0ZWRFeGNlcHRpb247Ci0KLWltcG9ydCBjb20uaWJtLndzZGwuQ29uc3RhbnRzOwotCi0vKioKLSAqIEEgRE9NIHBhcnNlciB0aGF0IHdpbGwgcmVnaXN0ZXIgbG9jYXRpb24gaW5mb3JtYXRpb24gd2l0aCB0aGUgZWxlbWVudHMgaW4gdGhlIG1vZGVsLgotICovCi1wdWJsaWMgY2xhc3MgTGluZU51bWJlckRPTVBhcnNlciBleHRlbmRzIERPTVBhcnNlcgotewotICBYTUxMb2NhdG9yIGxvY2F0b3IgPSBudWxsOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICovCi0gIHB1YmxpYyBMaW5lTnVtYmVyRE9NUGFyc2VyKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgc2V0RmVhdHVyZShERUZFUl9OT0RFX0VYUEFOU0lPTiwgZmFsc2UpOwotICAgIH0KLSAgICBjYXRjaCAoU0FYTm90U3VwcG9ydGVkRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgU3lzdGVtLm91dC5wcmludGxuKGUpOwotICAgIH0KLSAgICBjYXRjaCAoU0FYTm90UmVjb2duaXplZEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihlKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQ29uc3R1Y3Rvci4KLSAgICogCi0gICAqIEBwYXJhbSBhcmcwIFRoZSBwYXJzZXIgY29uZmlndXJhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBMaW5lTnVtYmVyRE9NUGFyc2VyKFhNTFBhcnNlckNvbmZpZ3VyYXRpb24gYXJnMCkKLSAgewotICAgIHN1cGVyKGFyZzApOwotICAgIHRyeQotICAgIHsKLSAgICAgIHNldEZlYXR1cmUoREVGRVJfTk9ERV9FWFBBTlNJT04sIGZhbHNlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFNBWE5vdFN1cHBvcnRlZEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFNBWE5vdFJlY29nbml6ZWRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKiAKLSAgICogQHBhcmFtIGFyZzAgQSBzeW1ib2wgdGFibGUgZm9yIHRoZSBwYXJzZXIuCi0gICAqLwotICBwdWJsaWMgTGluZU51bWJlckRPTVBhcnNlcihTeW1ib2xUYWJsZSBhcmcwKQotICB7Ci0gICAgc3VwZXIoYXJnMCk7Ci0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gYXJnMCBBIHN5bWJvbCB0YWJsZSBmb3IgdGhlIHBhcnNlci4KLSAgICogQHBhcmFtIGFyZzEgQSBncmFtbWFyIHBvb2wgZm9yIHRoZSBwYXJzZXIuCi0gICAqLwotICBwdWJsaWMgTGluZU51bWJlckRPTVBhcnNlcihTeW1ib2xUYWJsZSBhcmcwLCBYTUxHcmFtbWFyUG9vbCBhcmcxKQotICB7Ci0gICAgc3VwZXIoYXJnMCwgYXJnMSk7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE1MRG9jdW1lbnRIYW5kbGVyI3N0YXJ0RWxlbWVudChvcmcuYXBhY2hlLnhlcmNlcy54bmkuUU5hbWUsIG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTUxBdHRyaWJ1dGVzLCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuQXVnbWVudGF0aW9ucykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHN0YXJ0RWxlbWVudChRTmFtZSBhcmcwLCBYTUxBdHRyaWJ1dGVzIGFyZzEsIEF1Z21lbnRhdGlvbnMgYXJnMikgdGhyb3dzIFhOSUV4Y2VwdGlvbgotICB7Ci0gICAgRWxlbWVudCBlbGVtZW50OwotICAgIC8vIEZvciBlbGVtZW50cyBmcm9tIHRoZSBTY2hlbWEgbmFtZXNwYWNlIHdlIHdhbnQgdG8gcHJlc2VydmUgdGhlbQotICAgIC8vIHRoZSB3YXkgdGhleSB3ZXJlIGVudGVyZWQuIFJldmVydCB0aGUgdmFsdWVzIHRvIHRoZSBub24tbm9ybWFsaXplZCB2YWx1ZXMuCi0gICAgU3RyaW5nIG5zID0gYXJnMC51cmk7Ci0gICAgaWYobnMgIT0gbnVsbCAmJiAobnMuZXF1YWxzKENvbnN0YW50cy5OU19VUklfWFNEXzIwMDEpIHx8IG5zLmVxdWFscyhDb25zdGFudHMuTlNfVVJJX1hTRF8xOTk5KSB8fCBucy5lcXVhbHMoQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMCkpKQotICAgIHsKLSAgICAgIGludCBudW1hdHRzID0gYXJnMS5nZXRMZW5ndGgoKTsKLSAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1hdHRzOyBpKyspCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBub25Ob3JtYWxpemVkVmFsdWUgPSBhcmcxLmdldE5vbk5vcm1hbGl6ZWRWYWx1ZShpKTsKLSAgICAgICAgYXJnMS5zZXRWYWx1ZShpLCBub25Ob3JtYWxpemVkVmFsdWUpOwotICAgICAgfQotICAgIH0KLSAgICBzdXBlci5zdGFydEVsZW1lbnQoYXJnMCwgYXJnMSwgYXJnMik7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgZWxlbWVudCA9IChFbGVtZW50KWdldFByb3BlcnR5KENVUlJFTlRfRUxFTUVOVF9OT0RFKTsKLSAgICAgIEVsZW1lbnRJbXBsIGVsZW1lbnRJbXBsID0gKEVsZW1lbnRJbXBsKWVsZW1lbnQ7Ci0gICAgICAvLyBTZXR0aW5nIHRoZSB1c2VyIGRhdGEgd2l0aCBhbiBpZGVudGlmaWVyIHN1Y2ggYXMgRWxlbWVudExvY2F0aW9uLktFWV9OQU1FCi0gICAgICAvLyBtYXkgYmUgYSBsb25nIHRlcm0gZ29vZCBpZGVhLiBUaGUgc2V0VXNlckRhdGEgbWV0aG9kIHdpdGggbm8gaWQgaXMgdXNlZCAKLSAgICAgIC8vIHRvIHN1cHBvcnQgSlZNcyB3aXRoIGFsdGVybmF0ZSB2ZXJzaW9ucyBvZiBYZXJjZXMuCi0gICAgICBlbGVtZW50SW1wbC5zZXRVc2VyRGF0YShuZXcgRWxlbWVudExvY2F0aW9uKGxvY2F0b3IuZ2V0TGluZU51bWJlcigpLCBsb2NhdG9yLmdldENvbHVtbk51bWJlcigpKSk7Ci0gICAgfQotICAgIC8vIGNhdGNoIFNBWE5vdFJlY29nbml6ZWRFeGNlcHRpb24gYW5kIFNBWE5vdFN1cHBvcnRlZEV4Y2VwdGlvbiBpZiBjYW4ndCBnZXQgZWxlbWVudAotICAgIGNhdGNoIChDbGFzc0Nhc3RFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbihlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFNBWE5vdFJlY29nbml6ZWRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbihlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFNBWE5vdFN1cHBvcnRlZEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKGUpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTUxEb2N1bWVudEhhbmRsZXIjc3RhcnREb2N1bWVudChvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE1MTG9jYXRvciwgamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54ZXJjZXMueG5pLk5hbWVzcGFjZUNvbnRleHQsIG9yZy5hcGFjaGUueGVyY2VzLnhuaS5BdWdtZW50YXRpb25zKQotICAgKi8KLSAgcHVibGljIHZvaWQgc3RhcnREb2N1bWVudChYTUxMb2NhdG9yIGFyZzAsIFN0cmluZyBhcmcxLCBOYW1lc3BhY2VDb250ZXh0IGFyZzIsIEF1Z21lbnRhdGlvbnMgYXJnMykKLSAgICB0aHJvd3MgWE5JRXhjZXB0aW9uCi0gIHsKLSAgICBsb2NhdG9yID0gYXJnMDsKLSAgICBzdXBlci5zdGFydERvY3VtZW50KGFyZzAsIGFyZzEsIGFyZzIsIGFyZzMpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL1hNTENhdGFsb2cuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC94bWwvWE1MQ2F0YWxvZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OWM2MzEzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC94bWwvWE1MQ2F0YWxvZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzY0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkZhY3RvcnlDb25maWd1cmF0aW9uRXJyb3I7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5TQVhQYXJzZXI7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuU0FYUGFyc2VyRmFjdG9yeTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLmpheHAuU0FYUGFyc2VyRmFjdG9yeUltcGw7Ci1pbXBvcnQgb3JnLnhtbC5zYXguQXR0cmlidXRlczsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYTm90UmVjb2duaXplZEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhOb3RTdXBwb3J0ZWRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlcjsKLQotLyoqCi0gKiBYTUxDYXRhbG9nIFRoaXMgY2xhc3MgY2FuIGJlIHVzZWQgdG8gcmVnaXN0ZXIsIG9idGFpbiBhbmQgZGVsZXRlIGFuIGluc3RhbmNlCi0gKiBvZiBhbiBYTUwgY2F0YWxvZy4gTWV0aG9kIGRlZmluaXRpb25zIGFyZSBwcm92aWRlZCBmb3IgdGhlIGNhdGFsb2cgdG8gc2V0IGEKLSAqIGxvY2F0aW9uIGluIHRoZSBjYXRhbG9nIGFuZCByZXNvbHZlIGFuIGVudGl0eSBmcm9tIHRoZSBjYXRhbG9nLgotICovCi1wdWJsaWMgY2xhc3MgWE1MQ2F0YWxvZyBpbXBsZW1lbnRzIElYTUxDYXRhbG9nCi17Ci0gIC8vcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIF9BUEFDSEVfRkVBVFVSRV9DT05USU5VRV9BRlRFUl9GQVRBTF9FUlJPUiA9ICJodHRwOi8vYXBhY2hlLm9yZy94bWwvZmVhdHVyZXMvY29udGludWUtYWZ0ZXItZmF0YWwtZXJyb3IiOwotCi0gIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBfQVBBQ0hFX0ZFQVRVUkVfTkFNRVNQQUNFX1BSRUZJWEVTID0gImh0dHA6Ly94bWwub3JnL3NheC9mZWF0dXJlcy9uYW1lc3BhY2UtcHJlZml4ZXMiOwotCi0gIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBfQVBBQ0hFX0ZFQVRVUkVfTkFNRVNQQUNFUyA9ICJodHRwOi8veG1sLm9yZy9zYXgvZmVhdHVyZXMvbmFtZXNwYWNlcyI7Ci0KLSAgLy9wcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgX0FQQUNIRV9GRUFUVVJFX1ZBTElEQVRJT04gPSAiaHR0cDovL3htbC5vcmcvc2F4L2ZlYXR1cmVzL3ZhbGlkYXRpb24iOwotCi0gIC8vcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIF9BUEFDSEVfRkVBVFVSRV9WQUxJREFUSU9OX1NDSEVNQSA9ICJodHRwOi8vYXBhY2hlLm9yZy94bWwvZmVhdHVyZXMvdmFsaWRhdGlvbi9zY2hlbWEiOwotICAKLSAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIEZJTEVfUFJPVE9DT0wgPSAiZmlsZTovLy8iOwotCi0gIHByaXZhdGUgc3RhdGljIElYTUxDYXRhbG9nIGluc3RhbmNlID0gbnVsbDsKLQotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZXh0eG1sY2F0YWxvZ2NsYXNzID0gbnVsbDsKLQotICBwcml2YXRlIHN0YXRpYyBDbGFzc0xvYWRlciBleHRjbGFzc0xvYWRlciA9IG51bGw7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgSVhNTENhdGFsb2cgZXh0WE1MQ2F0YWxvZ0luc3RhbmNlID0gbnVsbDsKLQotICBwcml2YXRlIHN0YXRpYyBMaXN0IHNjaGVtYWRpcnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgTGlzdCBlbnRpdGllcyA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAvKioKLSAgICogQSBoYXNodGFibGUgdG8gaG9sZCB0aGUgWE1MIGNhdGFsb2cgZW50cmllcy4KLSAgICovCi0gIHByb3RlY3RlZCBNYXAgY2F0YWxvZyA9IG5ldyBIYXNodGFibGUoKTsKLQotICAvKioKLSAgICogUmV0dXJuIGFuIGluc3RhbmNlIG9mIHRoZSBYTUwgY2F0YWxvZy4gQXNzaWducyBhbGwgcmVnaXN0ZXJlZCBzY2hlbWFzIHRvCi0gICAqIHRoZSBYTUwgY2F0YWxvZy4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIGluc3RhbmNlIG9mIHRoZSBYTUwgY2F0YWxvZy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgSVhNTENhdGFsb2cgZ2V0SW5zdGFuY2UoKQotICB7Ci0gICAgaWYgKGluc3RhbmNlID09IG51bGwpCi0gICAgewotICAgICAgaW5zdGFuY2UgPSBuZXcgWE1MQ2F0YWxvZygpOwotCi0gICAgICAvLyBBZGQgdGhlIHJlZ2lzdGVyZWQgZW50aXRpZXMgdG8gdGhlIGNhdGFsb2cuCi0gICAgICBJdGVyYXRvciBlbnRpdHlJdGVyID0gZW50aXRpZXMuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChlbnRpdHlJdGVyLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgWE1MQ2F0YWxvZ0VudGl0eUhvbGRlciBlbnRpdHkgPSAoWE1MQ2F0YWxvZ0VudGl0eUhvbGRlcikgZW50aXR5SXRlci5uZXh0KCk7Ci0gICAgICAgIGluc3RhbmNlLmFkZEVudHJ5VG9DYXRhbG9nKGVudGl0eS5nZXRQdWJsaWNJZCgpLCBlbnRpdHkuZ2V0U3lzdGVtSWQoKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIEFkZCB0aGUgc2NoZW1hcyBpbiB0aGUgc2NoZW1hIGRpcmVjdG9yaWVzIHRvIHRoZSBjYXRhbG9nLgotICAgICAgaWYgKHNjaGVtYWRpcnMuc2l6ZSgpID4gMCkKLSAgICAgIHsKLSAgICAgICAgU0FYUGFyc2VyIHNheFBhcnNlciA9IG51bGw7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgU0FYUGFyc2VyRmFjdG9yeSBwYXJzZXJmYWN0b3J5ID0gbmV3IFNBWFBhcnNlckZhY3RvcnlJbXBsKCk7Ci0gICAgICAgICAgcGFyc2VyZmFjdG9yeS5zZXRGZWF0dXJlKF9BUEFDSEVfRkVBVFVSRV9OQU1FU1BBQ0VfUFJFRklYRVMsIHRydWUpOwotICAgICAgICAgIHBhcnNlcmZhY3Rvcnkuc2V0RmVhdHVyZShfQVBBQ0hFX0ZFQVRVUkVfTkFNRVNQQUNFUywgdHJ1ZSk7Ci0gICAgICAgICAgc2F4UGFyc2VyID0gcGFyc2VyZmFjdG9yeS5uZXdTQVhQYXJzZXIoKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoRmFjdG9yeUNvbmZpZ3VyYXRpb25FcnJvciBlKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKFNBWE5vdFJlY29nbml6ZWRFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoU0FYTm90U3VwcG9ydGVkRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoU0FYRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgICBJdGVyYXRvciBzY2hlbWFkaXJJdGVyID0gc2NoZW1hZGlycy5pdGVyYXRvcigpOwotICAgICAgICBTY2hlbWFOYW1lc3BhY2VIYW5kbGVyIGhhbmRsZXIgPSAoKFhNTENhdGFsb2cpIGluc3RhbmNlKS5uZXcgU2NoZW1hTmFtZXNwYWNlSGFuZGxlcigpOwotICAgICAgICB3aGlsZSAoc2NoZW1hZGlySXRlci5oYXNOZXh0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgc2NoZW1hZGlyID0gKFN0cmluZykgc2NoZW1hZGlySXRlci5uZXh0KCk7Ci0gICAgICAgICAgcmVnaXN0ZXJTY2hlbWFzRm9yRGlyKGluc3RhbmNlLCBzY2hlbWFkaXIsIHNheFBhcnNlciwgaGFuZGxlcik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGluc3RhbmNlOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlZ2lzdGVyIHRoZSBzY2hlbWFzIGluIHRoZSBnaXZlbiBkaXJlY3RvcnkgYW5kIGFsbCBzdWJkaXJlY3RvcmllcyB3aXRoIHRoZQotICAgKiBYTUwgY2F0YWxvZy4KLSAgICogCi0gICAqIEBwYXJhbSBjYXRhbG9nCi0gICAqICAgICAgICAgIFRoZSBjYXRhbG9nIHRvIHJlZ2lzdGVyIHRoZSBzY2hlbWFzIHdpdGguCi0gICAqIEBwYXJhbSBzY2hlbWFkaXIKLSAgICogICAgICAgICAgVGhlIHNjaGVtYSBkaXJlY3RvcnkgdG8gc2VhcmNoIGZvciBzY2hlbWEgZmlsZXMuCi0gICAqIEBwYXJhbSBwYXJzZXIKLSAgICogICAgICAgICAgVGhlIFNBWFBhcnNlciB0byB1c2UgdG8gcGFyc2UgdGhlIHNjaGVtYXMgZm9yIHRoZWlyCi0gICAqICAgICAgICAgIHRhcmdldE5hbWVzcGFjZS4KLSAgICogQHBhcmFtIGhhbmRsZXIKLSAgICogICAgICAgICAgVGhlIGhhbmRsZXIgdG8gdXNlIHRvIGdldCB0aGUgdGFyZ2V0TmFtZXNwYWNlLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCByZWdpc3RlclNjaGVtYXNGb3JEaXIoSVhNTENhdGFsb2cgY2F0YWxvZywgU3RyaW5nIHNjaGVtYWRpciwgU0FYUGFyc2VyIHBhcnNlciwKLSAgICAgIFNjaGVtYU5hbWVzcGFjZUhhbmRsZXIgaGFuZGxlcikKLSAgewotICAgIC8vIFJlbW92ZSBmaWxlOiBhbmQgZmlsZTovIGZyb20gYmVnaW5uaW5nIG9mIGZpbGUgbG9jYXRpb24gaWYgdGhleSBhcmUgcHJlc2VudC4KLSAgICBpZihzY2hlbWFkaXIuc3RhcnRzV2l0aCgiZmlsZToiKSkKLSAgICB7Ci0gICAgICBzY2hlbWFkaXIgPSBzY2hlbWFkaXIuc3Vic3RyaW5nKDUpOwotICAgIH0KLSAgICB3aGlsZShzY2hlbWFkaXIuc3RhcnRzV2l0aCgiLy8iKSkKLSAgICB7Ci0gICAgICBzY2hlbWFkaXIgPSBzY2hlbWFkaXIuc3Vic3RyaW5nKDEpOwotICAgIH0KLSAgICAKLSAgICBGaWxlIGRpciA9IG5ldyBGaWxlKHNjaGVtYWRpcik7Ci0gICAgaWYgKGRpci5pc0RpcmVjdG9yeSgpKQotICAgIHsKLSAgICAgIEZpbGVbXSBmaWxlcyA9IGRpci5saXN0RmlsZXMoKTsKLSAgICAgIGludCBudW1maWxlcyA9IGZpbGVzLmxlbmd0aDsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtZmlsZXM7IGkrKykKLSAgICAgIHsKLSAgICAgICAgRmlsZSB0ZW1wZmlsZSA9IGZpbGVzW2ldOwotICAgICAgICBTdHJpbmcgdGVtcGZpbGVwYXRoID0gdGVtcGZpbGUuZ2V0QWJzb2x1dGVQYXRoKCk7Ci0gICAgICAgIHRlbXBmaWxlcGF0aCA9IHRlbXBmaWxlcGF0aC5yZXBsYWNlKCdcXCcsJy8nKTsKLSAgICAgICAgd2hpbGUodGVtcGZpbGVwYXRoLnN0YXJ0c1dpdGgoIi8iKSkKLSAgICAgICAgewotICAgICAgICAgIHRlbXBmaWxlcGF0aCA9IHRlbXBmaWxlcGF0aC5zdWJzdHJpbmcoMSk7Ci0gICAgICAgIH0KLSAgICAgICAgdGVtcGZpbGVwYXRoID0gRklMRV9QUk9UT0NPTCArIHRlbXBmaWxlcGF0aDsKLSAgICAgICAgaWYgKHRlbXBmaWxlLmlzRGlyZWN0b3J5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICByZWdpc3RlclNjaGVtYXNGb3JEaXIoY2F0YWxvZywgdGVtcGZpbGVwYXRoLCBwYXJzZXIsIGhhbmRsZXIpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgewotICAgICAgICAgIGhhbmRsZXIucmVzZXQoKTsKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBwYXJzZXIucGFyc2UodGVtcGZpbGVwYXRoLCBoYW5kbGVyKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFRPRE86IGxvZyBlcnJvci4KLSAgICAgICAgICB9Ci0gICAgICAgICAgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSA9IGhhbmRsZXIuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgICAgICAgaWYgKHRhcmdldE5hbWVzcGFjZSAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGNhdGFsb2cuYWRkRW50cnlUb0NhdGFsb2codGFyZ2V0TmFtZXNwYWNlLCB0ZW1wZmlsZXBhdGgpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIGluc3RhbmNlIG9mIHRoZSBleHRlbnNpb24gWE1MIGNhdGFsb2cuIFJldHVybnMgdGhlIGluc3RhbmNlIGlmIG9uZQotICAgKiBpcyByZWdpc3RlcmVkIGFuZCBjYW4gYmUgY3JlYXRlZCwgbnVsbCBvdGhlcndpc2UuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBpbnN0YW5jZSBvZiB0aGUgZXh0ZW5zaW9uIFhNTCBjYXRhbG9nIGlmIG9uZSBpcyByZWdpc3RlcmVkLAotICAgKiAgICAgICAgIG51bGwgb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBJWE1MQ2F0YWxvZyBnZXRFeHRlbnNpb25DYXRhbG9nSW5zdGFuY2UoKQotICB7Ci0gICAgaWYgKGV4dFhNTENhdGFsb2dJbnN0YW5jZSA9PSBudWxsKQotICAgIHsKLSAgICAgIGlmIChleHR4bWxjYXRhbG9nY2xhc3MgIT0gbnVsbCAmJiBleHRjbGFzc0xvYWRlciAhPSBudWxsKQotICAgICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIENsYXNzIGNhdGFsb2dDbGFzcyA9IGV4dGNsYXNzTG9hZGVyICE9IG51bGwgPyBleHRjbGFzc0xvYWRlci5sb2FkQ2xhc3MoZXh0eG1sY2F0YWxvZ2NsYXNzKSA6IENsYXNzCi0gICAgICAgICAgICAgIC5mb3JOYW1lKGV4dHhtbGNhdGFsb2djbGFzcyk7Ci0gICAgICAgICAgZXh0WE1MQ2F0YWxvZ0luc3RhbmNlID0gKElYTUxDYXRhbG9nKSBjYXRhbG9nQ2xhc3MubmV3SW5zdGFuY2UoKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICAvL1RPRE86IExvZyBlcnJvcgotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBleHRYTUxDYXRhbG9nSW5zdGFuY2U7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IHRoZSBjbGFzcyBvZiB0aGUgWE1MIGNhdGFsb2cgdG8gYmUgdXNlZC4KLSAgICogCi0gICAqIEBwYXJhbSB4bWxjYXRhbG9nCi0gICAqICAgICAgICAgIFRoZSBjbGFzcyBvZiB0aGUgWE1MIGNhdGFsb2cgdG8gYmUgdXNlZC4KLSAgICogQHBhcmFtIGNsYXNzbG9hZGVyCi0gICAqICAgICAgICAgIFRoZSBjbGFzc2xvYWRlciB0byB1c2UgdG8gbG9hZCB0aGUgY2F0YWxvZy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRFeHRlbnNpb25YTUxDYXRhbG9nKFN0cmluZyB4bWxjYXRhbG9nLCBDbGFzc0xvYWRlciBjbGFzc2xvYWRlcikKLSAgewotICAgIGV4dHhtbGNhdGFsb2djbGFzcyA9IHhtbGNhdGFsb2c7Ci0gICAgZXh0Y2xhc3NMb2FkZXIgPSBjbGFzc2xvYWRlcjsKLSAgfQotCi0gIC8qKgotICAgKiBSZXNldHMgdGhlIGluc3RhbmNlIG9mIHRoZSBYTUwgY2F0YWxvZyB0byBudWxsLiBGb3IgZGVsZXRpbmcgdGhlIGNhdGFsb2cgaWYKLSAgICogbmVjZXNzYXJ5LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyB2b2lkIHJlc2V0KCkKLSAgewotICAgIGluc3RhbmNlID0gbnVsbDsKLSAgICBleHR4bWxjYXRhbG9nY2xhc3MgPSBudWxsOwotICAgIGV4dGNsYXNzTG9hZGVyID0gbnVsbDsKLSAgICBleHRYTUxDYXRhbG9nSW5zdGFuY2UgPSBudWxsOwotICAgIGVudGl0aWVzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIHNjaGVtYWRpcnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIH0KLQotICAvKioKLSAgICogQWRkIGEgc2NoZW1hIGRpcmVjdG9yeSB0byBiZSBjaGVja2VkIGZvciBzY2hlbWFzIHRvIHJlZ2lzdGVyIGluIHRoZQotICAgKiBjYXRhbG9nLgotICAgKiAKLSAgICogQHBhcmFtIHNjaGVtYWRpcgotICAgKiAgICAgICAgICBUaGUgZGlyZWN0b3J5IHRvIGNoZWNrIGZvciBzY2hlbWFzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyB2b2lkIGFkZFNjaGVtYURpcihTdHJpbmcgc2NoZW1hZGlyKQotICB7Ci0gICAgc2NoZW1hZGlycy5hZGQoc2NoZW1hZGlyKTsKLSAgfQotCi0gIC8qKgotICAgKiBBZGQgYW4gZW50aXR5IHRvIHRoZSBjYXRhbG9nLgotICAgKiAKLSAgICogQHBhcmFtIGVudGl0eQotICAgKiAgICAgICAgICBUaGUgZW50aXR5IHRvIGFkZCB0byB0aGUgY2F0YWxvZy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBhZGRFbnRpdHkoWE1MQ2F0YWxvZ0VudGl0eUhvbGRlciBlbnRpdHkpCi0gIHsKLSAgICBlbnRpdGllcy5hZGQoZW50aXR5KTsKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3NkbC52YWxpZGF0ZS5pbnRlcm5hbC54bWwuSVhNTENhdGFsb2cjYWRkRW50cnlUb0NhdGFsb2coamF2YS5sYW5nLlN0cmluZywKLSAgICogICAgICBqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkRW50cnlUb0NhdGFsb2coU3RyaW5nIHB1YmxpY0lkLCBTdHJpbmcgc3lzdGVtSWQpCi0gIHsKLSAgICBjYXRhbG9nLnB1dChwdWJsaWNJZCwgc3lzdGVtSWQpOwotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiAKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c2RsLnZhbGlkYXRlLmludGVybmFsLnhtbC5JWE1MQ2F0YWxvZyNyZXNvbHZlRW50aXR5TG9jYXRpb24oamF2YS5sYW5nLlN0cmluZywKLSAgICogICAgICBqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyByZXNvbHZlRW50aXR5TG9jYXRpb24oU3RyaW5nIHB1YmxpY0lkLCBTdHJpbmcgc3lzdGVtSWQpCi0gIHsKLSAgICBTdHJpbmcgcmVzb2x2ZWRsb2NhdGlvbiA9IG51bGw7Ci0gICAgLy8gRmlyc3QgdHJ5IHRvIHJlc29sdmUgdXNpbmcgdGhlIGV4dCBjYXRhbG9nLgotICAgIElYTUxDYXRhbG9nIGV4dGNhdGFsb2cgPSBnZXRFeHRlbnNpb25DYXRhbG9nSW5zdGFuY2UoKTsKLSAgICBpZiAoZXh0Y2F0YWxvZyAhPSBudWxsKQotICAgIHsKLSAgICAgIHJlc29sdmVkbG9jYXRpb24gPSBleHRjYXRhbG9nLnJlc29sdmVFbnRpdHlMb2NhdGlvbihwdWJsaWNJZCwgc3lzdGVtSWQpOwotICAgIH0KLSAgICBpZiAocmVzb2x2ZWRsb2NhdGlvbiA9PSBudWxsKQotICAgIHsKLSAgICAgIC8vIGlmIHRoZXJlJ3Mgbm8gc3lzdGVtIGlkIHVzZSB0aGUgcHVibGljIGlkCi0gICAgICBpZiAoc3lzdGVtSWQgPT0gbnVsbCB8fCBzeXN0ZW1JZC5lcXVhbHMoIiIpKQotICAgICAgewotICAgICAgICBzeXN0ZW1JZCA9IHB1YmxpY0lkOwotICAgICAgfQotICAgICAgcmVzb2x2ZWRsb2NhdGlvbiA9IChTdHJpbmcpIGNhdGFsb2cuZ2V0KHN5c3RlbUlkKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc29sdmVkbG9jYXRpb247Ci0gIH0KLQotICAvKioKLSAgICogQSBoYW5kbGVyIHVzZWQgaW4gcGFyc2luZyB0byBnZXQgdGhlIHRhcmdldE5hbWVzcGFjZSBzdHJpbmcgb2YgYSBzY2hlbWEuCi0gICAqLwotICBwcm90ZWN0ZWQgY2xhc3MgU2NoZW1hTmFtZXNwYWNlSGFuZGxlciBleHRlbmRzIERlZmF1bHRIYW5kbGVyCi0gIHsKLSAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBUQVJHRVRfTkFNRVNQQUNFID0gInRhcmdldE5hbWVzcGFjZSI7Ci0KLSAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBTQ0hFTUEgPSAic2NoZW1hIjsKLQotICAgIHByaXZhdGUgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSA9IG51bGw7Ci0KLSAgICAvKioKLSAgICAgKiBAc2VlIG9yZy54bWwuc2F4LkNvbnRlbnRIYW5kbGVyI3N0YXJ0RWxlbWVudChqYXZhLmxhbmcuU3RyaW5nLAotICAgICAqICAgICAgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgb3JnLnhtbC5zYXguQXR0cmlidXRlcykKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzdGFydEVsZW1lbnQoU3RyaW5nIHVyaSwgU3RyaW5nIGxvY2FsbmFtZSwgU3RyaW5nIGFyZzIsIEF0dHJpYnV0ZXMgYXR0cmlidXRlcykgdGhyb3dzIFNBWEV4Y2VwdGlvbgotICAgIHsKLSAgICAgIGlmIChsb2NhbG5hbWUuZXF1YWxzKFNDSEVNQSkpCi0gICAgICB7Ci0KLSAgICAgICAgaW50IG51bUF0dHMgPSBhdHRyaWJ1dGVzLmdldExlbmd0aCgpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUF0dHM7IGkrKykKLSAgICAgICAgewotCi0gICAgICAgICAgU3RyaW5nIGF0dG5hbWUgPSBhdHRyaWJ1dGVzLmdldFFOYW1lKGkpOwotICAgICAgICAgIGlmIChhdHRuYW1lLmVxdWFscyhUQVJHRVRfTkFNRVNQQUNFKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0YXJnZXROYW1lc3BhY2UgPSBhdHRyaWJ1dGVzLmdldFZhbHVlKGkpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICB9Ci0gICAgICBzdXBlci5zdGFydEVsZW1lbnQodXJpLCBsb2NhbG5hbWUsIGFyZzIsIGF0dHJpYnV0ZXMpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybiB0aGUgdGFyZ2V0TmFtZXNwYWNlIGZvdW5kIGJ5IHBhcnNpbmcgdGhlIGZpbGUuCi0gICAgICogCi0gICAgICogQHJldHVybiBUaGUgdGFyZ2V0TmFtZXNwYWNlIGZvdW5kIGJ5IHBhcnNpbmcgdGhlIGZpbGUuCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZyBnZXRUYXJnZXROYW1lc3BhY2UoKQotICAgIHsKLSAgICAgIHJldHVybiB0YXJnZXROYW1lc3BhY2U7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVzZXQgdGhlIHN0YXRlIG9mIHRoZSBoYW5kbGVyIHNvIGl0IGNhbiBiZSByZXVzZWQuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgcmVzZXQoKQotICAgIHsKLSAgICAgIHRhcmdldE5hbWVzcGFjZSA9IG51bGw7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL1hNTENhdGFsb2dFbnRpdHlIb2xkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC94bWwvWE1MQ2F0YWxvZ0VudGl0eUhvbGRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNWY5NmQ0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC94bWwvWE1MQ2F0YWxvZ0VudGl0eUhvbGRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sOwotCi0vKioKLSAqIEEgY29udGFpbmVyIHRvIGhvbGQgdGhlIGVudGl0eSBpbmZvcm1hdGlvbiB1bnRpbCBhbiBYTUwgY2F0YWxvZyBpcwotICogdG8gYmUgaW5pdGlhbGl6ZWQuCi0gKi8KLXB1YmxpYyBjbGFzcyBYTUxDYXRhbG9nRW50aXR5SG9sZGVyCi17Ci0gIHByaXZhdGUgU3RyaW5nIHB1YmxpY0lkOwotICBwcml2YXRlIFN0cmluZyBzeXN0ZW1JZDsKLSAgCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICogCi0gICAqIEBwYXJhbSBwdWJsaWNJZCBUaGUgcHVibGljIGlkIG9mIHRoZSBlbnRpdHkuCi0gICAqIEBwYXJhbSBzeXN0ZW1JZCBUaGUgc3lzdGVtIGlkIG9mIHRoZSBlbnRpdHkuCi0gICAqLwotICBwdWJsaWMgWE1MQ2F0YWxvZ0VudGl0eUhvbGRlcihTdHJpbmcgcHVibGljSWQsIFN0cmluZyBzeXN0ZW1JZCkKLSAgewotICAgIHRoaXMucHVibGljSWQgPSBwdWJsaWNJZDsKLSAgICB0aGlzLnN5c3RlbUlkID0gc3lzdGVtSWQ7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBwdWJsaWMgaWQgb2YgdGhlIGVudGl0eS4KLSAgICogQHJldHVybiBUaGUgcHVibGljIGlkIG9mIHRoZSBlbnRpdHkuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFB1YmxpY0lkKCkKLSAgewotICAgIHJldHVybiBwdWJsaWNJZDsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHN5c3RlbSBpZCBvZiB0aGUgZW50aXR5LgotICAgKiBAcmV0dXJuIFRoZSBzeXN0ZW0gaWQgb2YgdGhlIGVudGl0eS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U3lzdGVtSWQoKQotICB7Ci0gICAgcmV0dXJuIHN5c3RlbUlkOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL1hNTENhdGFsb2dSZXNvbHZlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3htbC9YTUxDYXRhbG9nUmVzb2x2ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2FkMGU2OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL1hNTENhdGFsb2dSZXNvbHZlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTUxSZXNvdXJjZUlkZW50aWZpZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhOSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTEVudGl0eVJlc29sdmVyOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MSW5wdXRTb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51dGlsLkxhenlVUkxJbnB1dFN0cmVhbTsKLQotLyoqCi0gKiBBIHJlc29sdmVyIHRvIHJlc29sdmVyIGVudGl0aWVzIGZyb20gdGhlIFhNTCBjYXRhbG9nLgotICovCi1wdWJsaWMgY2xhc3MgWE1MQ2F0YWxvZ1Jlc29sdmVyIGltcGxlbWVudHMgWE1MRW50aXR5UmVzb2x2ZXIKLXsKLSAgcHJvdGVjdGVkIHN0YXRpYyBYTUxDYXRhbG9nUmVzb2x2ZXIgeG1sQ2F0YWxvZzsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqLwotICBwcm90ZWN0ZWQgWE1MQ2F0YWxvZ1Jlc29sdmVyKCkKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgaW5zdGFuY2Ugb2YgdGhpcyByZXNvbHZlci4KLSAgICogCi0gICAqIEByZXR1cm4gdGhlIGluc3RhbmNlIG9mIHRoaXMgcmVzb2x2ZXIKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgWE1MQ2F0YWxvZ1Jlc29sdmVyIGdldEluc3RhbmNlKCkKLSAgewotICAgIGlmICh4bWxDYXRhbG9nID09IG51bGwpCi0gICAgewotICAgICAgeG1sQ2F0YWxvZyA9IG5ldyBYTUxDYXRhbG9nUmVzb2x2ZXIoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHhtbENhdGFsb2c7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcueG1sLnNheC5FbnRpdHlSZXNvbHZlciNyZXNvbHZlRW50aXR5KGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgWE1MSW5wdXRTb3VyY2UgcmVzb2x2ZUVudGl0eShYTUxSZXNvdXJjZUlkZW50aWZpZXIgcmVzb3VyY2VJZGVudGlmaWVyKSB0aHJvd3MgWE5JRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIHB1YmxpY0lkID0gcmVzb3VyY2VJZGVudGlmaWVyLmdldFB1YmxpY0lkKCk7Ci0gICAgaWYocHVibGljSWQgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBwdWJsaWNJZCA9IHJlc291cmNlSWRlbnRpZmllci5nZXROYW1lc3BhY2UoKTsKLSAgICB9Ci0gICAgU3RyaW5nIHN5c3RlbUlkID0gcmVzb3VyY2VJZGVudGlmaWVyLmdldExpdGVyYWxTeXN0ZW1JZCgpOwotICAgIFN0cmluZyBsb2NhdGlvbiA9IFhNTENhdGFsb2cuZ2V0SW5zdGFuY2UoKS5yZXNvbHZlRW50aXR5TG9jYXRpb24ocHVibGljSWQsIHN5c3RlbUlkKTsKLSAgICBpZiAobG9jYXRpb24gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBMYXp5VVJMSW5wdXRTdHJlYW0gaXMgPSBuZXcgTGF6eVVSTElucHV0U3RyZWFtKGxvY2F0aW9uKTsKLSAgICAgIFhNTElucHV0U291cmNlIGlucHV0U291cmNlID0gbmV3IFhNTElucHV0U291cmNlKHB1YmxpY0lkLCBzeXN0ZW1JZCwgc3lzdGVtSWQsIGlzLCBudWxsKTsKLSAgICAgIHJldHVybiBpbnB1dFNvdXJjZTsKLSAgICB9Ci0gICAgLy8gb3RoZXJ3aXNlIHJldHVybiBudWxsIHRvIHRlbGwgdGhlIHBhcnNlciB0byBsb2NhdGUgdGhlIHN5c3RlbUlkIGFzIGEgVVJJCi0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC94bWwvWE1MTWVzc2FnZUluZm9IZWxwZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC94bWwvWE1MTWVzc2FnZUluZm9IZWxwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQzYWI4NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL1hNTE1lc3NhZ2VJbmZvSGVscGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sOwotCi1wdWJsaWMgY2xhc3MgWE1MTWVzc2FnZUluZm9IZWxwZXIKLXsKLSAgCi0gIC8vc2VlIG9yZy5lY2xpcHNlLndzdC54bWwudWkucmVjb25jaWxlLkRlbGVnYXRpbmdTb3VyY2VWYWxpZGF0b3IKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUxMX0FUVFJJQlVURVMgPSAiQUxMX0FUVFJJQlVURVMiOwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSSUJVVEVfTkFNRSA9IkFUVFJJQlVURV9OQU1FIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUklCVVRFX1ZBTFVFID0gIkFUVFJJQlVURV9WQUxVRSI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFNUQVJUX1RBRyA9ICJTVEFSVF9UQUciOwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBURVhUID0gIlRFWFQiOwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBGSVJTVF9OT05fV0hJVEVTUEFDRV9URVhUID0gIkZJUlNUX05PTl9XSElURVNQQUNFX1RFWFQiOwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBURVhUX0VOVElUWV9SRUZFUkVOQ0UgPSAiVEVYVF9FTlRJVFlfUkVGRVJFTkNFIjsgCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFZBTFVFX09GX0FUVFJJQlVURV9XSVRIX0dJVkVOX1ZBTFVFID0gIlZBTFVFX09GX0FUVFJJQlVURV9XSVRIX0dJVkVOX1ZBTFVFIjsKLSAgCi0gIAotICBwdWJsaWMgWE1MTWVzc2FnZUluZm9IZWxwZXIoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiAgcmV0dXJucyBhbiBhcnJheSBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgc2hvdWxkIGJlIHVuZGVybGluZWQgd2l0aCB0aGUgcmVkICJzcXVpZ2dsZXMiCi0gICAqICB1c2luZyB0aGUgZXJyb3JLZXksIGFuZCB0aGUgbWVzc2FnZUFyZ3VtZW50cwotICAgKiAgPGJyPlBvc2l0aW9uIDAgb2YgdGhlIGFycmF5IHJldHVybmVkIGNvbnRhaW5zIHRoZSBzZWxlY3Rpb24gU3RyYXRlZ3ksb3Igd2hhdCBET00gRWxlbWVudCB0byB1bmRlcmxpbmUuICAKLSAgICogIEZvciBleGFtcGxlICJBVFRSSUJVVEVfTkFNRSIgIAotICAgKiAgPGJyPlBvc2l0aW9uIDEgY29udGFpbnMgdGhlIG5hbWUgb3IgdmFsdWUgdG8gc3F1aWdnbGUuCi0gICAqICA8cD5Gb3IgZXhhbXBsZSwgaWYgd2Ugd2FudGVkIHRvIHNxdWlnZ2xlIHRoZSBhdHRyaWJ1dGUgbmFtZSBvZiBhbiBhdHRyaWJ1dGUgbmFtZQotICAgKiAgZm9vIHRoaXMgbWV0aG9kIHdvdWxkIHJldHVybiB7IkFUVFJJQlVURV9OQU1FIiwgImZvbyJ9Ci0gICAqICA8L3A+Ci0gICAqICBAcGFyYW0gZXJyb3JLZXkgdGhlIGVycm9yIGtleSBnaXZlbiBieSB0aGUgWGVyY2VzIHBhcnNlcgotICAgKiAgQHBhcmFtIG1lc3NhZ2VBcmd1bWVudHMgdGhlIGFyZ3VtZW50cyB1c2VkIGJ5IFhlcmNlcyB0byAiZmlsbCBpbiB0aGUgYmxhbmtzIiBvZiB0aGVpciBtZXNzYWdlcwotICAgKiAgQHJldHVybiBhbiBhcnJheSBjb250YWluaW5nIHRoZSBzcXVpZ2dsZSBpbmZvcm1hdGlvbgotICAgKiAgQHNlZSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnJlY29uY2lsZS5EZWxlZ2F0aW5nUmVjb25jaWxlVmFsaWRhdG9yCi0gICAqICAKLSAgICovCi0gIHB1YmxpYyBTdHJpbmdbXSBjcmVhdGVNZXNzYWdlSW5mbyhTdHJpbmcgZXJyb3JLZXksIE9iamVjdFtdIG1lc3NhZ2VBcmd1bWVudHMpCi0gIHsgCi0gICAgU3RyaW5nIHNlbGVjdGlvblN0cmF0ZWd5ID0gbnVsbDsKLSAgICBTdHJpbmcgbmFtZU9yVmFsdWUgPSBudWxsOwotCi0gICAgLy9YTUwgRXJyb3JzCi0gICAgaWYgKGVycm9yS2V5LmVxdWFscygiY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYSIpIHx8IGVycm9yS2V5LmVxdWFscygiY3ZjLWNvbXBsZXgtdHlwZS4yLjQuZCIpIHx8IGVycm9yS2V5LmVxdWFscygiY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYiIpIHx8IGVycm9yS2V5LmVxdWFscygiTVNHX0NPTlRFTlRfSU5WQUxJRCIpCi0gICAgICAgIHwgZXJyb3JLZXkuZXF1YWxzKCJNU0dfQ09OVEVOVF9JTkNPTVBMRVRFIikgfHwgZXJyb3JLZXkuZXF1YWxzKCJNU0dfUkVRVUlSRURfQVRUUklCVVRFX05PVF9TUEVDSUZJRUQiKSB8fCBlcnJvcktleS5lcXVhbHMoImN2Yy1jb21wbGV4LXR5cGUuNCIpKQotICAgIHsKLSAgICAgIHNlbGVjdGlvblN0cmF0ZWd5ID0gU1RBUlRfVEFHOwotICAgIH0KLSAgICBlbHNlIGlmIChlcnJvcktleS5lcXVhbHMoImN2Yy10eXBlLjMuMS4zIikpCi0gICAgewotICAgICAgc2VsZWN0aW9uU3RyYXRlZ3kgPSBURVhUOwotICAgIH0KLSAgICBlbHNlIGlmIChlcnJvcktleS5lcXVhbHMoImN2Yy1jb21wbGV4LXR5cGUuMi4zIikpCi0gICAgewotICAgIAlzZWxlY3Rpb25TdHJhdGVneSA9IEZJUlNUX05PTl9XSElURVNQQUNFX1RFWFQ7Ci0gICAgfQotICAgIGVsc2UgaWYgKGVycm9yS2V5LmVxdWFscygiY3ZjLXR5cGUuMy4xLjEiKSkKLSAgICB7Ci0gICAgICBzZWxlY3Rpb25TdHJhdGVneSA9IEFMTF9BVFRSSUJVVEVTOwotICAgIH0KLSAgICBlbHNlIGlmIChlcnJvcktleS5lcXVhbHMoImN2Yy1jb21wbGV4LXR5cGUuMy4yLjIiKSB8fCBlcnJvcktleS5lcXVhbHMoIk1TR19BVFRSSUJVVEVfTk9UX0RFQ0xBUkVEIikpCi0gICAgewotICAgICAgc2VsZWN0aW9uU3RyYXRlZ3kgPSBBVFRSSUJVVEVfTkFNRTsKLQkgIC8vaW4gdGhpcyBjYXNlIHdlIG5lZWQgbmFtZU9yVmFsdWUgdG8gYmUgdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSB0byB1bmRlcmxpbmUKLQkgIG5hbWVPclZhbHVlID0gKFN0cmluZyltZXNzYWdlQXJndW1lbnRzWzFdOwotICAgIH0KLSAgICBlbHNlIGlmIChlcnJvcktleS5lcXVhbHMoImN2Yy1hdHRyaWJ1dGUuMyIpIHx8IGVycm9yS2V5LmVxdWFscygiTVNHX0FUVFJJQlVURV9WQUxVRV9OT1RfSU5fTElTVCIpKQotICAgIHsJCi0gICAgCXNlbGVjdGlvblN0cmF0ZWd5ID0gQVRUUklCVVRFX1ZBTFVFOyAgCi0JCS8vaW4gdGhpcyBjYXNlIHdlIG5lZWQgbmFtZU9yVmFsdWUgdG8gYmUgdGhlIG5hbWUgb2YgdGhlIEF0dHJpYnV0ZQotICAgIAlpZiAoZXJyb3JLZXkuZXF1YWxzKCJjdmMtYXR0cmlidXRlLjMiKSkKLSAgICAJeyBuYW1lT3JWYWx1ZSA9IChTdHJpbmcpbWVzc2FnZUFyZ3VtZW50c1sxXTsKLSAgICAJfQotICAgIAllbHNlIGlmIChlcnJvcktleS5lcXVhbHMoIk1TR19BVFRSSUJVVEVfVkFMVUVfTk9UX0lOX0xJU1QiKSkKLSAgICAJewluYW1lT3JWYWx1ZSA9IChTdHJpbmcpbWVzc2FnZUFyZ3VtZW50c1swXTsKLSAgICAJfQotICAgIH0KLSAgICBlbHNlIGlmIChlcnJvcktleS5lcXVhbHMoImN2Yy1lbHQuNC4yIikpCi0gICAgewlzZWxlY3Rpb25TdHJhdGVneT1WQUxVRV9PRl9BVFRSSUJVVEVfV0lUSF9HSVZFTl9WQUxVRTsKLQkJLy9pbiB0aGlzIGNhc2Ugd2UgbmVlZCBuYW1lT3JWYWx1ZSB0byBiZSB0aGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSB3ZSB3YW50IHRvIHVuZXJsaW5lCi0gICAgCW5hbWVPclZhbHVlID0gKFN0cmluZyltZXNzYWdlQXJndW1lbnRzWzFdOwkKLSAgICB9Ci0gICAgZWxzZSBpZiAoZXJyb3JLZXkuZXF1YWxzKCJFbnRpdHlOb3REZWNsYXJlZCIpKQotICAgIHsgIAlzZWxlY3Rpb25TdHJhdGVneT1URVhUX0VOVElUWV9SRUZFUkVOQ0U7Ci0gICAgfQotICAgIAotICAgIAotICAgIC8vV1NETCBFcnJvcnMKLSAgICBlbHNlIGlmIChlcnJvcktleS5lcXVhbHMoIl9NRVNTQUdFX1VOREVGSU5FRF9GT1JfT1VUUFVUIikgfHwKLSAgICAgICAgICAgICAgIGVycm9yS2V5LmVxdWFscygiX01FU1NBR0VfVU5ERUZJTkVEX0ZPUl9JTlBVVCIpIHx8Ci0gICAgICAgICAgICAgICBlcnJvcktleS5lcXVhbHMoIl9NRVNTQUdFX1VOREVGSU5FRF9GT1JfRkFVTFQiKSkKLSAgICB7Ci0gICAgICBzZWxlY3Rpb25TdHJhdGVneT1BVFRSSUJVVEVfVkFMVUU7Ci0gICAgICBuYW1lT3JWYWx1ZT0gIm1lc3NhZ2UiOwotICAgIH0KLSAgICBlbHNlIGlmIChlcnJvcktleS5lcXVhbHMoIl9QT1JUVFlQRV9VTkRFRklORURfRk9SX0JJTkRJTkciKSkKLSAgICB7Ci0gICAgICBzZWxlY3Rpb25TdHJhdGVneT1BVFRSSUJVVEVfVkFMVUU7Ci0gICAgICBuYW1lT3JWYWx1ZT0idHlwZSI7Ci0gICAgfQotICAgIGVsc2UgaWYgKGVycm9yS2V5LmVxdWFscygiX09QRVJBVElPTl9VTkRFRklORURfRk9SX1BPUlRUWVBFIikpCi0gICAgewotICAgICAgc2VsZWN0aW9uU3RyYXRlZ3k9QVRUUklCVVRFX1ZBTFVFOwotICAgICAgbmFtZU9yVmFsdWU9Im5hbWUiOwotICAgIH0KLSAgICBlbHNlIGlmIChlcnJvcktleS5lcXVhbHMoIl9QQVJUX0lOVkFMSURfRUxFTUVOVCIpKQotICAgIHsKLSAgICAgIHNlbGVjdGlvblN0cmF0ZWd5PUFUVFJJQlVURV9WQUxVRTsKLSAgICAgIG5hbWVPclZhbHVlPSJlbGVtZW50IjsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZXJyb3JLZXkuZXF1YWxzKCJfTk9fQklORElOR19GT1JfUE9SVCIpKQotICAgIHsKLSAgICAgIHNlbGVjdGlvblN0cmF0ZWd5PUFUVFJJQlVURV9WQUxVRTsKLSAgICAgIG5hbWVPclZhbHVlPSJiaW5kaW5nIjsKLSAgICB9Ci0gICAgCi0gICAgU3RyaW5nIG1lc3NhZ2VJbmZvW10gPSBuZXcgU3RyaW5nWzJdOwotICAgIG1lc3NhZ2VJbmZvWzBdID0gc2VsZWN0aW9uU3RyYXRlZ3k7Ci0gICAgbWVzc2FnZUluZm9bMV0gPSBuYW1lT3JWYWx1ZTsKLSAgICByZXR1cm4gbWVzc2FnZUluZm87Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvdmFsaWRhdGV3c2RsLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL3ZhbGlkYXRld3NkbC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmFjYTJkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvdmFsaWRhdGV3c2RsLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIS0tIENvbnN0YW50cyBmb3Igc3RyaW5ncyAgCi0KLSEtLSBFcnJvciB3aXRoIGRvY3VtZW50IGxvY2F0aW9uCi1fRVJST1JfRE9DVU1FTlRfTE9DQVRJT04gICAgICAgICAgICAgICAgICAgPSBUaGUgV1NETCBkb2N1bWVudCB7MH0gY291bGQgbm90IGJlIHJlYWQuCi0hLS0gV2FybmluZyBNZXNzYWdlcwotX1dBUk5fTk9fVkFMRElBVE9SICAgICAgICAgICAgICAgICAgICAgICAgID0gVGhlcmUgaXMgbm8gcmVnaXN0ZXJlZCB2YWxpZGF0b3IgZm9yIHRoZSBuYW1lc3BhY2UgezB9LgotCi1fRVJST1JfUFJPQkxFTV9XU0RMX1ZBTElEQVRPUiAgICAgICAgICAgICAgPSBBIHByb2JsZW0gb2NjdXJyZWQgd2hpbGUgcnVubmluZyB0aGUgV1NETCB2YWxpZGF0b3IgZm9yIG5hbWVzcGFjZSB7MH0uCi1fRVJST1JfTk9fV1NETF9WQUxJREFUT1IgICAgICAgICAgICAgICAgICAgPSBUaGUgbmFtZXNwYWNlIHswfSBzcGVjaWZpZWQgaXMgbm90IGEgdmFsaWQgV1NETCBuYW1lc3BhY2UuCi1fRVJST1JfUFJPQkxFTV9FWFRfVkFMSURBVE9SICAgICAgICAgICAgICAgPSBBIHByb2JsZW0gb2NjdXJyZWQgd2hpbGUgcnVubmluZyB0aGUgRXh0ZW5zaW9uIHZhbGlkYXRvciB7MH0gZm9yIG5hbWVzcGFjZSB7MX0uCi0KLSEtLSBTdHJpbmdzIGZvciBXU0RMIDEuMSB2YWxpZGF0b3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLV9VTkFCTEVfVE9fSU1QT1JUX0JBRF9MT0NBVElPTiAgICAgICAgICAgICA9IFRoZSB7MH0gZG9jdW1lbnQgY291bGQgbm90IGJlIGltcG9ydGVkLiBDaGVjayB0aGF0IHRoZSBkb2N1bWVudCBleGlzdHMgYW5kIHRoYXQgdGhlIGxvY2F0aW9uIGlzIGNvcnJlY3QuCi1fVU5BQkxFX1RPX0lNUE9SVF9OT19MT0NBVElPTiAgICAgICAgICAgICAgPSBUaGUgbG9jYXRpb24gYXR0cmlidXRlIGlzIGVtcHR5LiBBIGxvY2F0aW9uIG11c3QgYmUgc3BlY2lmaWVkIGZvciB0aGUgbG9jYXRpb24gYXR0cmlidXRlLgotX1VOQUJMRV9UT19JTVBPUlRfSU5WQUxJRCAgICAgICAgICAgICAgICAgID0gVGhlIHswfSBkb2N1bWVudCBjb3VsZCBub3QgYmUgaW1wb3J0ZWQgYmVjYXVzZSBpdCBpcyBub3QgdmFsaWQuIFRoZSBkb2N1bWVudCBtdXN0IGJlIGNvcnJlY3RlZCBiZWZvcmUgaXQgY2FuIGJlIGltcG9ydGVkLgotX05PX0JJTkRJTkdfRk9SX1BPUlQgICAgICAgICAgICAgICAgICAgICAgID0gVGhlIHswfSBwb3J0IGhhcyBhbiBpbnZhbGlkIGJpbmRpbmcgLSB7MX0uIENoZWNrIHRoYXQgdGhlIHsxfSBiaW5kaW5nIGlzIGRlZmluZWQuCi1fUE9SVFRZUEVfVU5ERUZJTkVEX0ZPUl9CSU5ESU5HICAgICAgICAgICAgPSBUaGUgezB9IHBvcnQgdHlwZSBzcGVjaWZpZWQgZm9yIHRoZSB7MX0gYmluZGluZyBpcyB1bmRlZmluZWQuIENoZWNrIHRoZSB7MH0gcG9ydCB0eXBlIG5hbWUgYW5kIGVuc3VyZSBpdCBpcyBkZWZpbmVkLgotX09QRVJBVElPTl9VTkRFRklORURfRk9SX1BPUlRUWVBFICAgICAgICAgID0gVGhlIG9wZXJhdGlvbiBzcGVjaWZpZWQgZm9yIHRoZSB7MH0gYmluZGluZyBpcyBub3QgZGVmaW5lZCBmb3IgcG9ydCB0eXBlIHsxfS4gQWxsIG9wZXJhdGlvbnMgc3BlY2lmaWVkIGluIHRoaXMgYmluZGluZyBtdXN0IGJlIGRlZmluZWQgaW4gcG9ydCB0eXBlIHsxfS4KLV9JTlBVVF9OQU1FX05PVF9VTklRVUUgICAgICAgICAgICAgICAgICAgICA9IFRoZSBuYW1lIHswfSBzcGVjaWZpZWQgZm9yIHRoaXMgaW5wdXQgZWxlbWVudCBpcyBub3QgdW5pcXVlLiBUaGUgbmFtZSBvZiBhbiBpbnB1dCBlbGVtZW50IG11c3QgYmUgdW5pcXVlIGZyb20gdGhlIG5hbWVzIG9mIGFsbCBvdGhlciBpbnB1dCBhbmQgb3V0cHV0IGVsZW1lbnRzIGRlZmluZWQgaW4gdGhlIHsxfSBwb3J0IHR5cGUuCi1fT1VUUFVUX05BTUVfTk9UX1VOSVFVRSAgICAgICAgICAgICAgICAgICAgPSBUaGUgbmFtZSB7MH0gc3BlY2lmaWVkIGZvciB0aGlzIG91dHB1dCBlbGVtZW50IGlzIG5vdCB1bmlxdWUuIFRoZSBuYW1lIG9mIGFuIG91dHB1dCBlbGVtZW50IG11c3QgYmUgdW5pcXVlIGZyb20gdGhlIG5hbWVzIG9mIGFsbCBvdGhlciBpbnB1dHMgYW5kIG91dHB1dCBlbGVtZW50cyBkZWZpbmVkIGluIHRoZSB7MX0gcG9ydCB0eXBlLgotX01FU1NBR0VfVU5ERUZJTkVEX0ZPUl9JTlBVVCAgICAgICAgICAgICAgID0gVGhlIGlucHV0IGVsZW1lbnQgaXMgcmVmZXJlbmNpbmcgYW4gdW5kZWZpbmVkIG1lc3NhZ2UgezB9LiBDaGVjayB0aGF0IHRoZSBtZXNzYWdlIG5hbWUgYW5kIG5hbWVzcGFjZSBhcmUgY29ycmVjdCBhbmQgdGhhdCB0aGUgbWVzc2FnZSBoYXMgYmVlbiBkZWZpbmVkLgotX01FU1NBR0VfVU5ERUZJTkVEX0ZPUl9PVVRQVVQgICAgICAgICAgICAgID0gVGhlIG91dHB1dCBlbGVtZW50IGlzIHJlZmVyZW5jaW5nIGFuIHVuZGVmaW5lZCBtZXNzYWdlIHswfS4gQ2hlY2sgdGhhdCB0aGUgbWVzc2FnZSBuYW1lIGFuZCBuYW1lc3BhY2UgYXJlIGNvcnJlY3QgYW5kIHRoYXQgdGhlIG1lc3NhZ2UgaGFzIGJlZW4gZGVmaW5lZC4KLV9NRVNTQUdFX1VOREVGSU5FRF9GT1JfRkFVTFQgICAgICAgICAgICAgICA9IFRoZSBmYXVsdCBlbGVtZW50IGlzIHJlZmVyZW5jaW5nIGFuIHVuZGVmaW5lZCBtZXNzYWdlIHswfS4gQ2hlY2sgdGhhdCB0aGUgbWVzc2FnZSBuYW1lIGFuZCBuYW1lc3BhY2UgYXJlIGNvcnJlY3QgYW5kIHRoYXQgdGhlIG1lc3NhZ2UgaGFzIGJlZW4gZGVmaW5lZC4KLV9EVVBMSUNBVEVfRkFVTFRfTkFNRSAgICAgICAgICAgICAgICAgICAgICA9IEEgZmF1bHQgd2l0aCB0aGUgbmFtZSB7MH0gaGFzIGFscmVhZHkgYmVlbiBkZWZpbmVkIGZvciB0aGUgezF9IDBwZXJhdGlvbi4gQ2hlY2sgdGhhdCBldmVyeSBmYXVsdCBkZWZpbmVkIGZvciB0aGlzIG9wZXJhdGlvbiBoYXMgYSB1bmlxdWUgbmFtZS4KLV9QQVJUX05PX0VMRU1FTlRfT1JfVFlQRSAgICAgICAgICAgICAgICAgICA9IFRoZSBwYXJ0IHswfSBkb2VzIG5vdCBoYXZlIGEgdHlwZSBkZWZpbmVkLiBFdmVyeSBwYXJ0IG11c3Qgc3BlY2lmeSBhIHR5cGUgZnJvbSBzb21lIHR5cGUgc3lzdGVtLiBUaGUgdHlwZSBjYW4gYmUgc3BlY2lmaWVkIHVzaW5nIHRoZSBidWlsdCBpbiAiZWxlbWVudCIgb3IgInR5cGUiIGF0dHJpYnV0ZXMgb3IgbWF5IGJlIHNwZWNpZmllZCB1c2luZyBhbiBleHRlbnNpb24gYXR0cmlidXRlLgotX1BBUlRfQk9USF9FTEVNRU5UX0FORF9UWVBFICAgICAgICAgICAgICAgID0gVGhlIHBhcnQgezB9IGhhcyBib3RoIGFuIGVsZW1lbnQgYW5kIGEgdHlwZSBkZWZpbmVkLiBFdmVyeSBwYXJ0IG11c3Qgb25seSBoYXZlIGFuIGVsZW1lbnQgb3IgYSB0eXBlIGRlZmluZWQuCi1fUEFSVF9JTlZBTElEX0VMRU1FTlQgICAgICAgICAgICAgICAgICAgICAgPSBUaGUgcGFydCB7MH0gaGFzIGFuIGludmFsaWQgdmFsdWUgezF9IGRlZmluZWQgZm9yIGl0cyBlbGVtZW50LiBFbGVtZW50IGRlY2xhcmF0aW9ucyBtdXN0IHJlZmVyIHRvIHZhbGlkIHZhbHVlcyBkZWZpbmVkIGluIGEgc2NoZW1hLgotX1BBUlRfSU5WQUxJRF9UWVBFICAgICAgICAgICAgICAgICAgICAgICAgID0gVGhlIHBhcnQgezB9IGhhcyBhbiBpbnZhbGlkIHZhbHVlIHsxfSBkZWZpbmVkIGZvciBpdHMgdHlwZS4gVHlwZSBkZWNsYXJhdGlvbnMgbXVzdCByZWZlciB0byB2YWxpZCB2YWx1ZXMgZGVmaW5lZCBpbiBhIHNjaGVtYS4KLV9EVVBMSUNBVEVfT1BFUkFUSU9OX0ZPUl9QT1JUVFlQRSAgICAgICAgICA9IEFuIG9wZXJhdGlvbiB3aXRoIHRoZSBuYW1lIHswfSBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQgZm9yIHRoZSB7MX0gcG9ydCB0eXBlLiBFdmVyeSBvcGVyYXRpb24gZGVmaW5lZCBmb3IgYSBwb3J0IHR5cGUgbXVzdCBoYXZlIGEgdW5pcXVlIG5hbWUuIAotX1NFUlZJQ0VfTkFNRV9BTFJFQURZX0RFRklORUQgICAgICAgICAgICAgID0gQSBTZXJ2aWNlIHdpdGggdGhlIG5hbWUgezB9IGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZC4gRXZlcnkgc2VydmljZSBpbiB0aGUgV1NETCBkb2N1bWVudCBtdXN0IGhhdmUgYSB1bmlxdWUgbmFtZS4KLV9CSU5ESU5HX05BTUVfQUxSRUFEWV9ERUZJTkVEICAgICAgICAgICAgICA9IEEgYmluZGluZyB3aXRoIHRoZSBuYW1lIHswfSBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQuIEV2ZXJ5IGJpbmRpbmcgaW4gdGhlIFdTREwgZG9jdW1lbnQgbXVzdCBoYXZlIGEgdW5pcXVlIG5hbWUuCi1fTUVTU0FHRV9OQU1FX0FMUkVBRFlfREVGSU5FRCAgICAgICAgICAgICAgPSBBIG1lc3NhZ2Ugd2l0aCB0aGUgbmFtZSB7MH0gaGFzIGFscmVhZHkgYmVlbiBkZWZpbmVkLiBFdmVyeSBtZXNzYWdlIGluIHRoZSBXU0RMIGRvY3VtZW50IG11c3QgaGF2ZSBhIHVuaXF1ZSBuYW1lLgotX1BPUlRUWVBFX05BTUVfQUxSRUFEWV9ERUZJTkVEICAgICAgICAgICAgID0gQSBwb3J0IHR5cGUgd2l0aCB0aGUgbmFtZSB7MH0gaGFzIGFscmVhZHkgYmVlbiBkZWZpbmVkLiBFdmVyeSBwb3J0IHR5cGUgaW4gdGhlIFdTREwgZG9jdW1lbnQgbXVzdCBoYXZlIGEgdW5pcXVlIG5hbWUuCi1fTU9SRV9USEVOX09ORV9BRERSRVNTX1BPUlQgICAgICAgICAgICAgICAgPSBBbiBhZGRyZXNzIGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZCBmb3IgcG9ydCB7MH0uIEVhY2ggcG9ydCBjYW4gaGF2ZSBvbmx5IG9uZSBhZGRyZXNzIGRlZmluZWQuCi1fTk9fQUREUkVTU19QT1JUICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBUaGUgcG9ydCB7MH0gaGFzIG5vIGFkZHJlc3MgZGVmaW5lZC4gRWFjaCBwb3J0IG11c3QgZGVmaW5lIG9uZSBhZGRyZXNzLgotX1BPUlRfTkFNRV9OT1RfVU5JUVVFICAgICAgICAgICAgICAgICAgICAgID0gQSBwb3J0IHdpdGggdGhlIG5hbWUgezB9IGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZC4gRXZlcnkgcG9ydCBpbiB0aGUgV1NETCBkb2N1bWVudCBtdXN0IGhhdmUgYSB1bmlxdWUgbmFtZS4KLV9PUEVSQVRJT05fTk9fSU5QVVRfT1JfT1VUUFVUICAgICAgICAgICAgICA9IE5vIGlucHV0IG9yIG91dHB1dCBlbGVtZW50IGhhcyBiZWVuIGRlZmluZWQgZm9yIHRoZSB7MH0gb3BlcmF0aW9uLiBBbiBpbnB1dCBlbGVtZW50LCBhbiBvdXRwdXQgZWxlbWVudCwgb3IgYm90aCBtdXN0IGJlIGRlZmluZWQgZm9yIGV2ZXJ5IG9wZXJhdGlvbi4KLV9XQVJOX1NPQVBFTkNfSU1QT1JURURfUEFSVCAgICAgICAgICAgICAgICA9IFRoZSBwYXJ0IHswfSB1c2VzIGFuIGVsZW1lbnQgb3IgdHlwZSBmcm9tIHRoZSBTT0FQIGVuY29kaW5nIG5hbWVzcGFjZSBidXQgdGhlIG5hbWVzcGFjZSBoYXMgbm90IGJlZW4gaW1wb3J0ZWQuIFRoZSBTT0FQIGVuY29kaW5nIG5hbWVzcGFjZSBzaG91bGQgYmUgaW1wb3J0ZWQgd2l0aCBhbiBpbXBvcnQgc3RhdGVtZW50IGJlZm9yZSBpdCBpcyB1c2VkLgotX1dBUk5fU09BUEVOQ19JTVBPUlRFRF9TQ0hFTUEgICAgICAgICAgICAgID0gVGhlIGlubGluZSBzY2hlbWEgdXNlcyBhbiBlbGVtZW50IG9yIHR5cGUgZnJvbSB0aGUgU09BUCBlbmNvZGluZyBuYW1lc3BhY2UgYnV0IHRoZSBuYW1lc3BhY2UgaGFzIG5vdCBiZWVuIGltcG9ydGVkLiBUaGUgU09BUCBlbmNvZGluZyBuYW1lc3BhY2Ugc2hvdWxkIGJlIGltcG9ydGVkIHdpdGggYW4gaW1wb3J0IHN0YXRlbWVudCBiZWZvcmUgaXQgaXMgdXNlZC4KLV9SRUZFUkVOQ0VEX0ZJTEVfQ09OVEFJTlNfRVJST1JTICAgICAgICAgICA9IFJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHswfSkuCi1fV0FSTl9PTERfU0NIRU1BX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgPSBBbiBvbGQgdmVyc2lvbiBvZiB0aGUgc2NoZW1hIG5hbWVzcGFjZSBoYXMgYmVlbiBzcGVjaWZpZWQuIHswfSBpcyB0aGUgc2NoZW1hIG5hbWVzcGFjZSB0aGF0IHNob3VsZCBiZSB1c2VkLgotX0VSUk9SX01VTFRJUExFX1RZUEVTX0RFRklORUQgICAgICAgICAgICAgID0gQSB0eXBlcyBzZWN0aW9uIGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZC4gT25seSBvbmUgdHlwZXMgZWxlbWVudCBpcyBhbGxvd2VkLgotX1dBUk5fV1JPTkdfTlNfT05fSU1QT1JUICAgICAgICAgICAgICAgICAgID0gVGhlIGZpbGUgY2Fubm90IGJlIGltcG9ydGVkIGJlY2F1c2UgdGhlIG5hbWVzcGFjZSB7MH0gZG9lcyBub3QgbWF0Y2ggdGhlIHRhcmdldCBuYW1lc3BhY2UgezF9IG9mIHRoZSBpbXBvcnRlZCBkb2N1bWVudC4KLSEtLSBSZWZlcmVuY2VkIGZpbGUgZXJyb3IKLSEtLSBOb3RlIHRvIHRyYW5zbGF0b3IgLSBfUkVGX0ZJTEVfRVJST1JfTUVTU0FHRSBuZWVkcyBhIHRyYWlsaW5nIHNwYWNlIGFzIGFub3RoZXIgbWVzc2FnZSBtYXkgZm9sbG93LgotX1JFRl9GSUxFX0VSUk9SX01FU1NBR0UgICAgICAgICAgPSBSZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh7MH0pLiAKLQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL3ZhbGlkYXRld3NkbGh0dHAucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvdmFsaWRhdGV3c2RsaHR0cC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzkzOTBiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvdmFsaWRhdGV3c2RsaHR0cC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotX0VSUk9SX05PX0xPQ0FUSU9OX0ZPUl9BRERSRVNTICAgICAgICAgICAgICAgICAgID0gTm8gbG9jYXRpb24gaGFzIGJlZW4gc3BlY2lmaWVkIGZvciB0aGlzIGFkZHJlc3MuIEV2ZXJ5IGFkZHJlc3MgbXVzdCBoYXZlIGEgdmFsaWQgbG9jYXRpb24gc3BlY2lmaWVkLgotX0VSUk9SX0lOVkFMSURfUE9SVF9FTEVNRU5UICAgICAgICAgICAgICAgICAgICAgID0gVGhlIHswfSBlbGVtZW50IGRlZmluZWQgaGVyZSBpcyB1bmRlZmluZWQgZm9yIHRoZSBIVFRQIG5hbWVzcGFjZS4gVGhlIG9ubHkgdmFsaWQgZWxlbWVudCBpcyAiYWRkcmVzcyIuCi1fRVJST1JfSU5WQUxJRF9CSU5ESU5HX0VMRU1FTlQgICAgICAgICAgICAgICAgICAgPSBUaGUgezB9IGVsZW1lbnQgZGVmaW5lZCBoZXJlIGlzIHVuZGVmaW5lZCBmb3IgdGhlIEhUVFAgbmFtZXNwYWNlLiBUaGUgb25seSB2YWxpZCBlbGVtZW50IGlzICJiaW5kaW5nIi4KLV9FUlJPUl9JTlZBTElEX0JJTkRJTkdfT1BFUkFUSU9OX0VMRU1FTlQgICAgICAgICA9IFRoZSB7MH0gZWxlbWVudCBkZWZpbmVkIGhlcmUgaXMgdW5kZWZpbmVkIGZvciB0aGUgSFRUUCBuYW1lc3BhY2UuIFRoZSBvbmx5IHZhbGlkIGVsZW1lbnQgaXMgIm9wZXJhdGlvbiIuCi1fRVJST1JfSU5WQUxJRF9CSU5ESU5HX0lOUFVUX0VMRU1FTlQgICAgICAgICAgICAgPSBUaGUgezB9IGVsZW1lbnQgZGVmaW5lZCBoZXJlIGlzIHVuZGVmaW5lZCBmb3IgdGhlIEhUVFAgbmFtZXNwYWNlLiBUaGUgb25seSB2YWxpZCBlbGVtZW50cyBhcmUgInVybFJlcGxhY2VtZW50IiBhbmQgInVybEVuY29kZWQiLgotX0VSUk9SX0lOVkFMSURfSFRUUF9FTEVNRU5UX0ZPUl9MT0NBVElPTiAgICAgICAgID0gVGhlIHswfSBlbGVtZW50IGNhbm5vdCBiZSBzcGVjaWZpZWQgaGVyZS4gVGhpcyBlbGVtZW50IGlzIG5vdCBkZWZpbmVkIGluIHRoZSBIVFRQIG5hbWVzcGFjZSBmb3IgdXNlIGF0IHRoaXMgcG9pbnQuCi1fRVJST1JfTk9fSFRUUEJJTkRJTkdfRk9SX0FERFJFU1MgICAgICAgICAgICAgICAgPSBBbiBIVFRQIGFkZHJlc3MgY2Fubm90IGJlIHNwZWNpZmllZCBoZXJlIGFzIHRoZSB7MH0gYmluZGluZyB0aGF0IHRoZSB7MX0gcG9ydCByZWZlcnMgdG8gZG9lcyBub3QgaGF2ZSBhbiBIVFRQIGJpbmRpbmcgZWxlbWVudCBkZWZpbmVkLiBUaGVyZSBtdXN0IGJlIGFuIEhUVFAgYmluZGluZyBlbGVtZW50IGRlZmluZWQgaW4gb3JkZXIgdG8gc3BlY2lmeSBhbiBIVFRQIGFkZHJlc3MgZm9yIGEgYmluZGluZy4KLV9FUlJPUl9JTlZBTElEX0JJTkRJTkdfVkVSQiAgICAgICAgICAgICAgICAgICAgICA9IFRoZSB7MH0gdmVyYiBkZWZpbmVkIGZvciB0aGUgSFRUUCBiaW5kaW5nIGlzIGludmFsaWQuIFRoZSBIVFRQIGJpbmRpbmcgdmVyYiBtdXN0IGJlICJHRVQiIG9yICJQT1NUIiBhbmQgaXMgY2FzZSBzZW5zaXRpdmUuCi1fRVJST1JfSU5WQUxJRF9MT0NBVElPTl9VUkkgICAgICAgICAgICAgICAgICAgICAgPSBUaGUgbG9jYXRpb24gVVJJIGlzIGludmFsaWQgZm9yIHRoZSBIVFRQIG9wZXJhdGlvbi4gWW91IG11c3Qgc3BlY2lmeSBhIHZhbGlkIGxvY2F0aW9uIFVSSSBmb3IgZXZlcnkgSFRUUCBPcGVyYXRpb24uCi1fRVJST1JfTk9fSFRUUEJJTkRJTkdfRk9SX09QRVJBVElPTiAgICAgICAgICAgICAgPSBUaGUgezB9IGJpbmRpbmcgdGhhdCB0aGUgSFRUUCBvcGVyYXRpb24gaXMgc3BlY2lmaWVkIGZvciBkb2VzIG5vdCBoYXZlIGFuIEhUVFAgYmluZGluZyBkZWZpbmVkLiBBbiBIVFRQIGJpbmRpbmcgbXVzdCBiZSBkZWZpbmVkIGluIG9yZGVyIHRvIGRlZmluZSBhbiBIVFRQIG9wZXJhdGlvbiBoZXJlLgotX0VSUk9SX05PX0hUVFBPUEVSQVRJT05fRk9SX1VSTCAgICAgICAgICAgICAgICAgID0gVGhlIHswfSBvcGVyYXRpb24gdGhhdCB0aGUgezF9IEhUVFAgZWxlbWVudCBpcyBzcGVjaWZpZWQgZm9yIGRvZXMgbm90IGhhdmUgYW4gSFRUUCBvcGVyYXRpb24gZGVmaW5lZC4gQSBIVFRQIG9wZXJhdGlvbiBtdXN0IGJlIGRlZmluZWQgaW4gb3JkZXIgdG8gZGVmaW5lIGEgezF9IEhUVFAgZWxlbWVudCBoZXJlLgotX0VSUk9SX05PVF9PTkxZX0VMRU1FTlRfREVGSU5FRCAgICAgICAgICAgICAgICAgID0gVGhlIHswfSBIVFRQIGVsZW1lbnQgZGVmaW5lZCBpcyBub3QgdGhlIG9ubHkgZWxlbWVudCBkZWZpbmVkIGZvciB0aGUgaW5wdXQgZWxlbWVudC4gV2hlbiB7MH0gaXMgZGVmaW5lZCBpdCBtdXN0IGJlIHRoZSBvbmx5IGNoaWxkIGVsZW1lbnQgZGVmaW5lZCBmb3IgdGhlIGlucHV0IGVsZW1lbnQuCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL3ZhbGlkYXRld3NkbG1pbWUucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvdmFsaWRhdGV3c2RsbWltZS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzNlN2JmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvdmFsaWRhdGV3c2RsbWltZS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL3ZhbGlkYXRld3NkbHNvYXAucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvdmFsaWRhdGV3c2Rsc29hcC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YWYwM2Q3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi9zcmMvdmFsaWRhdGV3c2Rsc29hcC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi1fRVJST1JfTk9fTE9DQVRJT05fRk9SX0FERFJFU1MgICAgICAgICAgICAgICAgICAgPSBObyBsb2NhdGlvbiBoYXMgYmVlbiBzcGVjaWZpZWQgZm9yIHRoaXMgYWRkcmVzcy4gRXZlcnkgYWRkcmVzcyBtdXN0IGhhdmUgYSB2YWxpZCBsb2NhdGlvbiBzcGVjaWZpZWQuCi1fRVJST1JfSU5WQUxJRF9QT1JUX0VMRU1FTlQgICAgICAgICAgICAgICAgICAgICAgPSBUaGUgIHswfSBlbGVtZW50IGRlZmluZWQgaGVyZSBpcyB1bmRlZmluZWQgZm9yIHRoZSBTT0FQIG5hbWVzcGFjZS4gVGhlIG9ubHkgdmFsaWQgZWxlbWVudCBpcyAiYWRkcmVzcyIuCi1fRVJST1JfSU5WQUxJRF9CSU5ESU5HX1NUWUxFICAgICAgICAgICAgICAgICAgICAgPSBUaGUgezB9IHN0eWxlIGRlZmluZWQgZm9yIHRoZSBTT0FQIGJpbmRpbmcgaW4gaW52YWxpZC4gVGhlIFNPQVAgYmluZGluZyBzdHlsZSBtdXN0IGJlICJycGMiIG9yICJkb2N1bWVudCIuCi1fRVJST1JfSU5WQUxJRF9CSU5ESU5HX1VSSSAgICAgICAgICAgICAgICAgICAgICAgPSBUaGUgdHJhbnNwb3J0IFVSSSBoYXMgbm90IGJlZW4gZGVmaW5lZCBmb3IgdGhlIFNPQVAgYmluZGluZy4gWW91IG11c3Qgc3BlY2lmeSBhIHRyYW5zcG9ydCBVUkkgZm9yIGV2ZXJ5IFNPQVAgYmluZGluZy4KLV9FUlJPUl9JTlZBTElEX09QRVJBVElPTl9TVFlMRSAgICAgICAgICAgICAgICAgICA9IFRoZSBzdHlsZSBzcGVjaWZpZWQgZm9yIHRoZSBTT0FQIG9wZXJhdGlvbiBpcyBpbnZhbGlkLiBUaGUgU09BUCBvcGVyYXRpb24gc3R5bGUgbXVzdCBiZSAicnBjIiBvciAiZG9jdW1lbnQiLgotX0VSUk9SX0lOVkFMSURfQklORElOR19FTEVNRU5UICAgICAgICAgICAgICAgICAgID0gVGhlIHswfSBlbGVtZW50IGRlZmluZWQgaGVyZSBpcyB1bmRlZmluZWQgZm9yIHRoZSBTT0FQIG5hbWVzcGFjZS4gVGhlIG9ubHkgdmFsaWQgZWxlbWVudCBpcyAiYmluZGluZyIuCi1fRVJST1JfSU5WQUxJRF9CSU5ESU5HX09QRVJBVElPTl9FTEVNRU5UICAgICAgICAgPSBUaGUgezB9IGVsZW1lbnQgZGVmaW5lZCBoZXJlIGlzIHVuZGVmaW5lZCBmb3IgdGhlIFNPQVAgbmFtZXNwYWNlLiBUaGUgb25seSB2YWxpZCBlbGVtZW50IGlzICJvcGVyYXRpb24iLgotX0VSUk9SX0lOVkFMSURfSEVBREVSX0JPRFlfRUxFTUVOVCAgICAgICAgICAgICAgID0gVGhlIHswfSBlbGVtZW50IGRlZmluZWQgaGVyZSBpcyB1bmRlZmluZWQgZm9yIHRoZSBTT0FQIG5hbWVzcGFjZS4gVGhlIG9ubHkgdmFsaWQgZWxlbWVudHMgYXJlICJib2R5IiwgImhlYWRlciIgYW5kICJoZWFkZXJmYXVsdCIuCi1fRVJST1JfSU5WQUxJRF9GQVVMVF9FTEVNRU5UICAgICAgICAgICAgICAgICAgICAgPSBUaGUgezB9IGVsZW1lbnQgZGVmaW5lZCBoZXJlIGlzIHVuZGVmaW5lZCBmb3IgdGhlIFNPQVAgbmFtZXNwYWNlLiBUaGUgb25seSB2YWxpZCBlbGVtZW50IGlzICJmYXVsdCIuCi0KLSEtLSBBIFNPQVAgYm9keSBlbGVtZW50IGluIGEgV1NETCBkb2N1bWVudCBjYW4gaGF2ZSBhbiBhdHRyaWJ1dGUgInVzZSIgZGVmaW5lZCB0byBiZSBlaXRoZXIgbGl0ZXJhbCBvciBlbmNvZGVkLiAtLQotIS0tIFRoaXMgc3RyaW5nIGlzIHVzZWQgaW4gYW4gZXJyb3IgdGFzayBpbiBXU0FEIGlmIHRoZSBkb2N1bWVudCBzcGVjaWZpZXMgYSB1c2Ugb3RoZXIgdGhlbiBsaXRlcmFsIG9yIGVuY29kZWQuIC0tIAotIS0tIEZvciBleGFtcGxlLCBpZiB0aGUgZG9jdW1lbnQgc3BlY2lmaWVzIHRoZSB1c2Ugb2YgdGhlIFNPQVAgYm9keSBhcyAic2ltcGxlIiB0aGUgb3V0cHV0IHN0cmluZyBzaG91bGQgYmU6ICAgIC0tCi0hLS0gVGhlICdzaW1wbGUnIHVzZSBzcGVjaWZpZWQgZm9yIHRoZSBTT0FQIGJvZHkgaXMgaW52YWxpZC4gVGhlIHVzZSBtdXN0IGJlIGxpdGVyYWwgb3IgZW5jb2RlZC4gICAgICAgICAgICAgICAgLS0KLV9FUlJPUl9JTlZBTElEX0JPRFlfVVNFICAgICAgICAgICAgICAgICAgICAgICAgICA9IFRoZSB7MH0gdXNlIHNwZWNpZmllZCBmb3IgdGhlIFNPQVAgYm9keSBpcyBpbnZhbGlkLiBUaGUgdXNlIG11c3QgYmUgbGl0ZXJhbCBvciBlbmNvZGVkLgotX0VSUk9SX0lOVkFMSURfQk9EWV9FTkNPRElOR19TVFlMRSAgICAgICAgICAgICAgID0gVGhlcmUgaXMgbm8gZW5jb2Rpbmcgc3R5bGUgVVJJIGRlZmluZWQgZm9yIHRoZSBTT0FQIGJvZHkuIFlvdSBtdXN0IHNwZWNpZnkgYXQgbGVhc3Qgb25lIFVSSSBmb3IgdGhlIGVuY29kaW5nIHN0eWxlIHdoZW4gdGhlIHVzZSBpcyBlbmNvZGVkLgotX0VSUk9SX0lOVkFMSURfQk9EWV9QQVJUX1VOREVGSU5FRCAgICAgICAgICAgICAgID0gVGhlIHswfSBwYXJ0IHNwZWNpZmllZCBhcyBhIHBhcnQgZm9yIHRoZSBTT0FQIGJvZHkgaXMgdW5kZWZpbmVkLiAgWW91IGNhbiBvbmx5IHNwZWNpZnkgZGVmaW5lZCBwYXJ0cy4KLV9FUlJPUl9JTlZBTElEX0JPRFlfUEFSVF9OT1RfVFlQRSAgICAgICAgICAgICAgICA9IFRoZSB7MH0gcGFydCBkb2VzIG5vdCBoYXZlIGEgdHlwZSBkZWZpbmVkIGFuZCBoYXMgYmVlbiBzcGVjaWZpZWQgZm9yIGEgU09BUCBib2R5IHdpdGggaXRzIHVzZSBlbmNvZGVkLiBXaGVuIHVzZSBpcyBlbmNvZGVkIG9uIGEgU09BUCBib2R5LCBhbGwgcGFydHMgZGVmaW5lZCBtdXN0IG9ubHkgY29udGFpbiBhIHZhbGlkIHR5cGUuCi1fRVJST1JfSU5WQUxJRF9TT0FQX0VMRU1FTlRfRk9SX0xPQ0FUSU9OICAgICAgICAgPSBUaGUgezB9IGVsZW1lbnQgY2Fubm90IGJlIHNwZWNpZmllZCBoZXJlLiBUaGlzIGVsZW1lbnQgaXMgbm90IGRlZmluZWQgaW4gdGhlIFNPQVAgbmFtZXNwYWNlIGZvciB1c2UgYXQgdGhpcyBwb2ludC4KLV9FUlJPUl9OT19TT0FQQklORElOR19GT1JfQUREUkVTUyAgICAgICAgICAgICAgICA9IEEgU09BUCBhZGRyZXNzIGNhbm5vdCBiZSBzcGVjaWZpZWQgaGVyZSBhcyB0aGUgezB9IGJpbmRpbmcgdGhhdCB0aGUgezF9IHBvcnQgcmVmZXJzIHRvIGRvZXMgbm90IGhhdmUgYSBTT0FQIGJpbmRpbmcgZWxlbWVudCBkZWZpbmVkLiBUaGVyZSBtdXN0IGJlIGEgU09BUCBiaW5kaW5nIGVsZW1lbnQgZGVmaW5lZCBpbiBvcmRlciB0byBzcGVjaWZ5IGEgU09BUCBhZGRyZXNzIGZvciBhIGJpbmRpbmcuCi1fRVJST1JfSEVBREVSX01FU1NBR0VfVU5ERUZJTkVEICAgICAgICAgICAgICAgICAgPSBUaGUgezB9IG1lc3NhZ2Ugc3BlY2lmaWVkIGZvciB0aGUgU09BUCBoZWFkZXIgaXMgdW5kZWZpbmVkLiBUaGUgbWVzc2FnZSBzcGVjaWZpZWQgbXVzdCBiZSBkZWZpbmVkIGluIHRoZSBXU0RMIGRvY3VtZW50LgotX0VSUk9SX0hFQURFUl9QQVJUX1VOREVGSU5FRCAgICAgICAgICAgICAgICAgICAgID0gVGhlIHswfSBwYXJ0IHNwZWNpZmllZCBpbiBtZXNzYWdlIHsxfSBmb3IgdGhlIFNPQVAgaGVhZGVyIGlzIHVuZGVmaW5lZC4gRW5zdXJlIHRoZSBwYXJ0IGlzIGRlZmluZWQgaW4gdGhlIHsxfSBtZXNzYWdlLgotX0VSUk9SX0hFQURFUl9VU0VfVU5ERUZJTkVEICAgICAgICAgICAgICAgICAgICAgID0gVGhlIHswfSB1c2Ugc3BlY2lmaWVkIGZvciB0aGUgU09BUCBoZWFkZXIgaXMgaW52YWxpZC4gVGhlIHVzZSBtdXN0IGJlIHNwZWNpZmllZCBhcyBsaXRlcmFsIG9yIGVuY29kZWQuCi1fRVJST1JfSEVBREVSX0VOQ09ESU5HU1RZTEVfVU5ERUZJTkVEICAgICAgICAgICAgPSBUaGUgZW5jb2Rpbmcgc3R5bGUgZm9yIHRoZSBTT0FQIGhlYWRlciBpcyBub3Qgc3BlY2lmaWVkLiBXaGVuIHRoZSB1c2UgaXMgZW5jb2RlZCB0aGUgZW5jb2Rpbmcgc3R5bGUgbXVzdCBzcGVjaWZ5IGF0IGxlYXN0IG9uZSBVUkkuCi1fRVJST1JfSEVBREVSX05BTUVTUEFDRV9VTkRFRklORUQgICAgICAgICAgICAgICAgPSBUaGUgbmFtZXNwYWNlIGZvciB0aGUgU09BUCBoZWFkZXIgaXMgbm90IHNwZWNpZmllZC4gV2hlbiB0aGUgdXNlIGlzIGVuY29kZWQgYSBuYW1lc3BhY2UgVVJJIG11c3QgYmUgZGVmaW5lZC4KLV9FUlJPUl9IRUFERVJGQVVMVF9NRVNTQUdFX1VOREVGSU5FRCAgICAgICAgICAgICA9IFRoZSB7MH0gbWVzc2FnZSBzcGVjaWZpZWQgZm9yIHRoZSBTT0FQIGhlYWRlciBmYXVsdCBpcyB1bmRlZmluZWQuIFRoZSBtZXNzYWdlIHNwZWNpZmllZCBtdXN0IGJlIGRlZmluZWQgaW4gdGhlIFdTREwgZG9jdW1lbnQuCi1fRVJST1JfSEVBREVSRkFVTFRfUEFSVF9VTkRFRklORUQgICAgICAgICAgICAgICAgPSBUaGUgezB9IHBhcnQgc3BlY2lmaWVkIGluIG1lc3NhZ2UgezF9IGZvciB0aGUgU09BUCBoZWFkZXIgZmF1bHQgaXMgdW5kZWZpbmVkLiBFbnN1cmUgdGhlIHBhcnQgaXMgZGVmaW5lZCBpbiB0aGUgezF9IG1lc3NhZ2UuIAotX0VSUk9SX0hFQURFUkZBVUxUX1VTRV9VTkRFRklORUQgICAgICAgICAgICAgICAgID0gVGhlIHswfSB1c2Ugc3BlY2lmaWVkIGZvciB0aGUgU09BUCBoZWFkZXIgZmF1bHQgaXMgaW52YWxpZC4gVGhlIHVzZSBtdXN0IGJlIHNwZWNpZmllZCBhcyBsaXRlcmFsIG9yIGVuY29kZWQuCi1fRVJST1JfSEVBREVSRkFVTFRfRU5DT0RJTkdTVFlMRV9VTkRFRklORUQgICAgICAgPSBUaGUgZW5jb2Rpbmcgc3R5bGUgZm9yIHRoZSBTT0FQIGhlYWRlciBmYXVsdCBpcyBub3Qgc3BlY2lmaWVkLiBXaGVuIHRoZSB1c2UgaXMgZW5jb2RlZCB0aGUgZW5jb2Rpbmcgc3R5bGUgbXVzdCBzcGVjaWZ5IGF0IGxlYXN0IG9uZSBVUkkuCi1fRVJST1JfSEVBREVSRkFVTFRfTkFNRVNQQUNFX1VOREVGSU5FRCAgICAgICAgICAgPSBUaGUgbmFtZXNwYWNlIGZvciB0aGUgU09BUCBoZWFkZXIgZmF1bHQgaXMgbm90IHNwZWNpZmllZC4gV2hlbiB0aGUgdXNlIGlzIGVuY29kZWQgYSBuYW1lc3BhY2UgVVJJIG11c3QgYmUgZGVmaW5lZC4KLV9FUlJPUl9JTlZBTElEX0ZBVUxUX05BTUUgICAgICAgICAgICAgICAgICAgICAgICA9IFRoZSB7MH0gbmFtZSBzcGVjaWZpZWQgZm9yIHRoZSBTT0FQIGZhdWx0IGlzIGludmFsaWQuIFRoZSBuYW1lIHNwZWNpZmllZCBtdXN0IGJlIHsxfSwgdGhlIG5hbWUgZnJvbSB0aGUgZmF1bHQgcGFyZW50IGVsZW1lbnQuCi1fRVJST1JfTk9fU09BUEJJTkRJTkdfRk9SX09QRVJBVElPTiAgICAgICAgICAgICAgPSBUaGUgezB9IGJpbmRpbmcgdGhhdCB0aGUgU09BUCBvcGVyYXRpb24gaXMgc3BlY2lmaWVkIGZvciBkb2VzIG5vdCBoYXZlIGEgU09BUCBiaW5kaW5nIGRlZmluZWQuIEEgU09BUCBiaW5kaW5nIG11c3QgYmUgZGVmaW5lZCBpbiBvcmRlciB0byBkZWZpbmUgYSBTT0FQIG9wZXJhdGlvbiBoZXJlLgotX0VSUk9SX05PX1NPQVBCSU5ESU5HX0ZPUl9CT0RZICAgICAgICAgICAgICAgICAgID0gVGhlIHswfSBiaW5kaW5nIHRoYXQgdGhlIFNPQVAgYm9keSBpcyBzcGVjaWZpZWQgZm9yIGRvZXMgbm90IGhhdmUgYSBTT0FQIGJpbmRpbmcgZGVmaW5lZC4gQSBTT0FQIGJpbmRpbmcgbXVzdCBiZSBkZWZpbmVkIGluIG9yZGVyIHRvIGRlZmluZSBhIFNPQVAgYm9keSBoZXJlLgotX0VSUk9SX05PX1NPQVBCSU5ESU5HX0ZPUl9IRUFERVIgICAgICAgICAgICAgICAgID0gVGhlIHswfSBiaW5kaW5nIHRoYXQgdGhlIFNPQVAgaGVhZGVyIGlzIHNwZWNpZmllZCBmb3IgZG9lcyBub3QgaGF2ZSBhIFNPQVAgYmluZGluZyBkZWZpbmVkLiBBIFNPQVAgYmluZGluZyBtdXN0IGJlIGRlZmluZWQgaW4gb3JkZXIgdG8gZGVmaW5lIGEgU09BUCBoZWFkZXIgaGVyZS4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL3ZhbGlkYXRld3NkbHVpLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24vc3JjL3ZhbGlkYXRld3NkbHVpLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiMjIzNzQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uL3NyYy92YWxpZGF0ZXdzZGx1aS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIS0tIEFudCBVSQotX1VJX0lORk9STUFUSU9OX0RFTElNSVRFUiAgICAgICAgICAgICAgICAgID0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1fVUlfRVJST1JfTUFSS0VSICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBFUlJPUiAgCi1fVUlfV0FSTklOR19NQVJLRVIgICAgICAgICAgICAgICAgICAgICAgICAgPSBXQVJOSU5HCi1fVUlfVkFMSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBWQUxJRAotX1VJX0lOVkFMSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gSU5WQUxJRAotX1VJX0FDVElPTl9WQUxJREFUSU5HX0ZJTEUgICAgICAgICAgICAgICAgID0gVmFsaWRhdGluZyB7MH0KLQotX0VSUk9SX05PX0ZJTEVfU1BFQ0lGSUVEICAgICAgICAgICAgICAgICAgID0gVW5hYmxlIHRvIHJ1biBXU0RMIFZhbGlkYXRpb24uIFlvdSBtdXN0IHNwZWNpZnkgYXQgbGVhc3Qgb25lIGZpbGUuCi0KLV9FWENfVU5BQkxFX1RPX1ZBTElEQVRFX0ZJTEUgICAgICAgICAgICAgICA9IFVuYWJsZSB0byB2YWxpZGF0ZSB0aGUgV1NETCBmaWxlIHswfS4gezF9Ci1fRVhDX1dTRExfRkFJTF9PTl9FUlJPUiAgICAgICAgICAgICAgICAgICAgPSBUaGUgV1NETCBmaWxlIGlzIG5vdCB2YWxpZC4gKEZhaWwgT24gRXJyb3IgaXMgZW5hYmxlZC4pCi0KLV9FUlJPUl9VTkFCTEVfVE9fTE9BRF9FWFRfVkFMSURBVE9SICAgICAgICA9IFVuYWJsZSB0byBsb2FkIHRoZSB2YWxpZGF0b3IgZm9yIG5hbWVzcGFjZSB7MH0uIHsxfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLy5jbGFzc3BhdGggYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzI5MTU5OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjQiPgotCQk8YWNjZXNzcnVsZXM+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJqYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lIi8+Ci0JCTwvYWNjZXNzcnVsZXM+Ci0JPC9jbGFzc3BhdGhlbnRyeT4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDNkNTFlMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotYmluCi10ZW1wLmZvbGRlcgotd3NpdWkuamFyCi1idWlsZC54bWwKLUBkb3QKLXNyYy56aXAKLWphdmFDb21waWxlci4uLmFyZ3MKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS8ucHJvamVjdCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2UxMTEwNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Qud3NpLnVpPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkY2Y0ZmZjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jV2VkIE1hciAyOSAwNDowODo1OCBFU1QgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDI5ZDNjNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1dlZCBNYXIgMjkgMDQ6MDg6NTcgRVNUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnRlcm5hbC5kZWZhdWx0LmNvbXBsaWFuY2U9ZGVmYXVsdApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MGI0MzZjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVfUExVR0lOX05BTUUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC53c2kudWk7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4zMDAucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsLldTSVVJUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlX1BST1ZJREVSX05BTUUKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsLmFjdGlvbnM7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsLmFjdGlvbnMuYWN0aW9uRGVsZWdhdGVzO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbC5hY3Rpb25zLmljb25zO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbC53aXphcmRzO3gtaW50ZXJuYWw6PXRydWUKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7IGJ1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0O2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcztidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UudWk7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpLmlkZTtyZXNvbHV0aW9uOj1vcHRpb25hbDtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UudWkudmlld3M7cmVzb2x1dGlvbjo9b3B0aW9uYWw7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpLmVkaXRvcnM7cmVzb2x1dGlvbjo9b3B0aW9uYWw7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQ7cmVzb2x1dGlvbjo9b3B0aW9uYWw7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC50ZXh0ZWRpdG9yO3Jlc29sdXRpb246PW9wdGlvbmFsO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZmFjZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UudWkuaWRlO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS51aS52aWV3cztidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UudWkud29ya2JlbmNoLnRleHRlZGl0b3I7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpLmVkaXRvcnM7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmRlYnVnLmNvcmU7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24udWk7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3NpO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMSwxLjEuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAyLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IudWk7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAyLDEuMS4wKSIsCi0gamF2YXgud3NkbDtidW5kbGUtdmVyc2lvbj0iWzEuNC4wLDEuNS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC51aTtidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDAsMS4xLjApIiwKLSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiCi1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvYWJvdXQuaHRtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2RiMzZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvYnVpbGQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODU3MGYyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotYmluLmluY2x1ZGVzID0gLixcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIGljb25zLyxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbAotc291cmNlLi4gPSBzcmMvCi1qYXJzLmNvbXBpbGUub3JkZXIgPSAuCi1vdXRwdXQuLiA9IGJpbi8KLXNyYy5pbmNsdWRlcyA9IGJ1aWxkLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9pY29ucy9mdWxsL29iajE2L3ZhbGlkYXRlLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9pY29ucy9mdWxsL29iajE2L3ZhbGlkYXRlLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTBlYjExNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvaWNvbnMvZnVsbC9vYmoxNi92YWxpZGF0ZS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvaWNvbnMvd3NpX2xvZ2ZpbGVfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9pY29ucy93c2lfbG9nZmlsZV9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGIxMTEwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9pY29ucy93c2lfbG9nZmlsZV9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3BsdWdpbi5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjQ0MmZkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLSMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSMgICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgICogCi0jICAqIENvbnRyaWJ1dG9yczogCi0jICAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotIS0tIENvbnN0YW50cyBmb3Igc3RyaW5ncyAgCi0KLV9QTFVHSU5fTkFNRSAgICAgICAgICAgICAgICAgID0gU29hcCBNb25pdG9yCi1fUFJPVklERVJfTkFNRSAgICAgICAgICAgICAgICA9IEVjbGlwc2Uub3JnCi1fVUlfV1NJX1ZBTElEQVRPUiAgICAgICAgICAgICA9IFdTLUkgTWVzc2FnZSBWYWxpZGF0b3IKLV9VSV9BQ1RJT05fVkFMSURBVEUgICAgICAgICAgID0gVmFsaWRhdGUgV1MtSSBMb2cgRmlsZQotX1VJX1dJWkFSRF9WQUxJREFURV9MT0dfVElUTEUgPSBWYWxpZGF0ZSBXUy1JIE1lc3NhZ2UgTG9nIEZpbGUKLV9VSV9MT0dfRURJVE9SICAgICAgICAgICAgICAgID0gWE1MIEVkaXRvcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3BsdWdpbi54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFhOWM2Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS0tPiAKLQotPHBsdWdpbj4KLQotICAgIAotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotPCEtLSBQdXJwb3NlOiBBZGQgdmFsaWRhdG9yIGFjdGlvbiB0byBUQ1BJUCBtb25pdG9yLiAgICAgICAgIC0tPgotPCEtLSBFeHRlbnNpb24gcG9pbnQ6IG9yZy5lY2xpcHNlLnVpLnZpZXdBY3Rpb25zICAgICAgICAgICAgIC0tPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdBY3Rpb25zIj4KLSAgICAgIDx2aWV3Q29udHJpYnV0aW9uCi0gICAgICAgICAgICB0YXJnZXRJRD0ib3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IudmlldyIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS51aS5hcnRpY2xlcy5hY3Rpb24uY29udHJpYnV0aW9uLnZpZXciPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IldTLUkgUHJvZmlsZSBWYWxpZGF0b3IiCi0gICAgICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL29iajE2L3ZhbGlkYXRlLmdpZiIKLSAgICAgICAgICAgICAgIHRvb2x0aXA9IiVfVUlfV0laQVJEX1ZBTElEQVRFX0xPR19USVRMRSIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsLmFjdGlvbnMuYWN0aW9uRGVsZWdhdGVzLlZhbGlkYXRlV1NJUHJvZmlsZUFjdGlvbkRlbGVnYXRlIgotICAgICAgICAgICAgICAgdG9vbGJhclBhdGg9Imdyb3VwMSIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsLmFjdGlvbnMuYWN0aW9uRGVsZWdhdGVzLlZhbGlkYXRlV1NJUHJvZmlsZUFjdGlvbkRlbGVnYXRlIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgPC92aWV3Q29udHJpYnV0aW9uPgotICAgPC9leHRlbnNpb24+Ci0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLTwhLS0gUHVycG9zZTogVG8gcmVnaXN0ZXIgV1MtSSBtZXNzYWdlIHZhbGlkYXRvci4gICAgICAgICAgICAtLT4KLTwhLS0gRXh0ZW5zaW9uIHBvaW50OiBvcmcuZWNsaXBzZS51aS52aWV3QWN0aW9ucyAgICAgICAgICAgICAtLT4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLSAgPGV4dGVuc2lvbgotICAgICAgICAgaWQ9IndzaVZhbGlkYXRvciIKLSAgICAgICAgIG5hbWU9IiVfVUlfV1NJX1ZBTElEQVRPUiIKLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi52YWxpZGF0b3IiPgotICAgICAgPHZhbGlkYXRvcj4KLSAgICAgICAgIDxmaWx0ZXIKLSAgICAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZSIKLSAgICAgICAgICAgICAgIGNhc2VTZW5zaXRpdmU9ImZhbHNlIgotICAgICAgICAgICAgICAgbmFtZUZpbHRlcj0iKi53c2ltc2ciPgotICAgICAgICAgPC9maWx0ZXI+Ci0gICAgICAgICA8aGVscGVyICAgICAgCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5IZWxwZXIiPgotICAgICAgICAgPC9oZWxwZXI+Ci0gICAgICAgICA8cnVuCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbC5XU0lNZXNzYWdlVmFsaWRhdG9yIj4KLSAgICAgICAgIDwvcnVuPgotICAgICAgPC92YWxpZGF0b3I+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIAotICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotICAgPCEtLSBFeHRlbnNpb24gcG9pbnQ6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5jb250ZW50VHlwZXMgIC0tPiAKLSAgIDwhLS0gUHVycG9zZTogU3BlY2lmeSBmaWxlIGFzc29jaWF0aW9uIGZvciB3c2ltc2cuICAgICAgICAgICAtLT4KLSAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLSAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5jb250ZW50VHlwZXMiPiAKLSAgICAgIDxmaWxlLWFzc29jaWF0aW9uIAotICAgICAgIGNvbnRlbnQtdHlwZT0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnhtbCIKLSAgICAgICBmaWxlLWV4dGVuc2lvbnM9IndzaW1zZyIvPgotICAgPC9leHRlbnNpb24+Ci0gICAKLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotPCEtLSBBZGQgdmFsaWRhdGUgYWN0aW9uICB0byAud3NpbXNnIGZpbGUgICAgICAgICAgICAgICAgICAgLS0+Ci08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wb3B1cE1lbnVzIj4KLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICAgIG9iamVjdENsYXNzPSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZSIKLSAgICAgICAgICAgIG5hbWVGaWx0ZXI9Iioud3NpbXNnIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnNvYXAudmFsaWRhdGUud3NpLmFjdGlvbiI+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iJV9VSV9BQ1RJT05fVkFMSURBVEUiCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbC5hY3Rpb25zLmFjdGlvbkRlbGVnYXRlcy5WYWxpZGF0ZVdTSUxvZ0ZpbGVBY3Rpb25EZWxlZ2F0ZSIKLSAgICAgICAgICAgICAgIGVuYWJsZXNGb3I9IjEiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbC5hY3Rpb25zLmFjdGlvbkRlbGVnYXRlcy5WYWxpZGF0ZVdTSUxvZ0ZpbGVBY3Rpb25EZWxlZ2F0ZSI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPgotICAgPC9leHRlbnNpb24+Ci0gICAKLSA8L3BsdWdpbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9NZXNzYWdlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL01lc3NhZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyMTNmZDUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL01lc3NhZ2VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLSAKLS8qKgotICogVHJhbnNsYXRlZCBtZXNzYWdlcy4KLSAqLwotcHVibGljIGNsYXNzIE1lc3NhZ2VzIGV4dGVuZHMgTkxTIAotewotICAgIC8vLS0tLS0tLS0tLS0tLS0tIFZhbGlkYXRpb24gV2l6YXJkIC0tLS0tLS0tLS0tLS0tLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFZBTElEQVRJT05fV0laQVJEX1RJVExFOwotCi0JLy8tLS0tLS0tLS0tLS0tLS0gVmFsaWRhdGlvbiBXaXphcmQgKFdTREwgcGFnZSkgLS0tLS0tLS0tLS0tLS0tCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9QQUdFX0ZJTEVfU0hFTExfVEVYVDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMX1BBR0VfRklMRV9USVRMRSA7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9QQUdFX0ZJTEVfREVTQ1JJUFRJT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9QQUdFX1NFTEVDVF9XU0RMX0ZJTEVOQU1FX0hFQURJTkc7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9QQUdFX1NFTEVDVF9XU0RMX0ZJTEVOQU1FX0VYUEw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9QQUdFX0lOQ0xVREVfV1NETF9CVVRUT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9QQUdFX0lOQ0xVREVfV1NETF9MQUJFTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMX1BBR0VfVkFMSURfV1NETF9MQUJFTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMX1BBR0VfV09SS0JFTkNIX0JVVFRPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMX1BBR0VfQlJPV1NFX0JVVFRPTjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMX1BBR0VfU0VBUkNIX1VERElfQlVUVE9OOwotCi0JLy8tLS0tLS0tLS0tLS0tLS0gVmFsaWRhdGlvbiBXaXphcmQgKFdTREwgY29udGVudCBwYWdlKSAtLS0tLS0tLS0tLS0tLS0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMX0NPTlRFTlRfUEFHRV9TRUxFQ1RfSEVBRElORzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMX0NPTlRFTlRfUEFHRV9TRUxFQ1RfRVhQTDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMX0NPTlRFTlRfUEFHRV9HUk9VUF9URVhUX0VMRU1FTlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9DT05URU5UX1BBR0VfR1JPVVBfVEVYVF9UWVBFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfQ09OVEVOVF9QQUdFX1JBRElPX1BPUlQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9DT05URU5UX1BBR0VfUkFESU9fQklORElORzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMX0NPTlRFTlRfUEFHRV9SQURJT19QT1JUX1RZUEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9DT05URU5UX1BBR0VfUkFESU9fT1BFUkFUSU9OOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExfQ09OVEVOVF9QQUdFX1JBRElPX01FU1NBR0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9DT05URU5UX1BBR0VfTEFCRUxfTkFNRTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMX0NPTlRFTlRfUEFHRV9MQUJFTF9OQU1FU1BBQ0U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETF9DT05URU5UX1BBR0VfTEFCRUxfUEFSRU5UOwotCi0JLy8tLS0tLS0tLS0tLS0tLS0gVmFsaWRhdGlvbiBXaXphcmQgKExvZyBwYWdlKSAtLS0tLS0tLS0tLS0tLS0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMT0dfUEFHRV9TRUxFQ1RfTE9HX0ZJTEVOQU1FX0hFQURJTkc7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTE9HX1BBR0VfU0VMRUNUX0xPR19GSUxFTkFNRV9FWFBMOwotCi0JLy8gQWN0aW9ucwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFDVElPTl9XU0lfVkFMSURBVE9SOwotCi0JLy8tLS0tLS0tLS0tLS0tLS0gRXJyb3JzIC0tLS0tLS0tLS0tLS0tLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEVSUk9SX1VOQUJMRV9UT19WQUxJREFURTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBFUlJPUl9WQUxJREFUSU9OX0ZBSUxFRDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBFUlJPUl9USEVfV1NJTVNHX0ZJTEVfSVNfTk9UX1ZBTElEOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEVSUk9SX1BST0JMRU1TX1JFQURJTkdfV1NJTVNHX0ZJTEU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgRVJST1JfSU5WQUxJRF9MT0dfRklMRV9FWFRFTlNJT047Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV0FSTklOR19WQUxJREFUSU9OX1dBUk5JTkdTX0RFVEVDVEVEOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFdBUk5JTkdfRklMRV9BTFJFQURZX0VYSVNUUzsKLQotCS8vLS0tLS0tLS0tLS0tLS0tIEluZm9ybWF0aW9uYWwgbWVzc2FnZXMgLS0tLS0tLS0tLS0tLS0tCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgSU5GT19WQUxJREFUSU9OX1NVQ0VFREVEOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElORk9fVEhFX1dTSU1TR19GSUxFX0lTX1ZBTElEOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElORk9fTk9fTUVTU0FHRVNfVE9fVkFMSURBVEU7Ci0KLSAgc3RhdGljIAotICB7Ci0JTkxTLmluaXRpYWxpemVNZXNzYWdlcyhXU0lVSVBsdWdpbi5QTFVHSU5fSUQgKyAiLmludGVybmFsLk1lc3NhZ2VzIiwgTWVzc2FnZXMuY2xhc3MpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvTWVzc2FnZXMucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9NZXNzYWdlcy5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NjRiMzcwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9NZXNzYWdlcy5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotIyAgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyAgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAgKiAKLSMgICogQ29udHJpYnV0b3JzOiAKLSMgICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSMgLS0tLS0tLS0tLS0tLS0tIFZhbGlkYXRpb24gV2l6YXJkIC0tLS0tLS0tLS0tLS0tLQotVkFMSURBVElPTl9XSVpBUkRfVElUTEUgICAgICAgICAgICAgICAgPSBWYWxpZGF0ZSBXUy1JIE1lc3NhZ2UgTG9nIEZpbGUKLQotIyAtLS0tLS0tLS0tLS0tLS0gVmFsaWRhdGlvbiBXaXphcmQgKFdTREwgcGFnZSkgLS0tLS0tLS0tLS0tLS0tCi1XU0RMX1BBR0VfRklMRV9TSEVMTF9URVhUICAgICAgICAgICAgICA9IFNlbGVjdCBGaWxlCi1XU0RMX1BBR0VfRklMRV9USVRMRSAgICAgICAgICAgICAgICAgICA9IFNlbGVjdCBhIEZpbGUKLVdTRExfUEFHRV9GSUxFX0RFU0NSSVBUSU9OICAgICAgICAgICAgID0gU2VsZWN0IGEgZmlsZSBmcm9tIHRoZSB3b3JrYmVuY2guCi1XU0RMX1BBR0VfU0VMRUNUX1dTRExfRklMRU5BTUVfSEVBRElORyA9IEluY2x1ZGUgV1NETCBGaWxlCi1XU0RMX1BBR0VfU0VMRUNUX1dTRExfRklMRU5BTUVfRVhQTCAgICA9IE9wdGlvbmFsbHkgc2VsZWN0IGEgV1NETCBmaWxlIGZvciB0aGUgV2ViIHNlcnZpY2UKLVdTRExfUEFHRV9JTkNMVURFX1dTRExfQlVUVE9OICAgICAgICAgID0gSW5jbHVkZSBXU0RMIGRvY3VtZW50IGZvciBXZWIgc2VydmljZQotV1NETF9QQUdFX0lOQ0xVREVfV1NETF9MQUJFTCAgICAgICAgICAgPSBFbnRlciB0aGUgbG9jYXRpb24gb2YgdGhlIFdTREwgZG9jdW1lbnQgZm9yIHRoZSBXZWIgc2VydmljZQotV1NETF9QQUdFX1ZBTElEX1dTRExfTEFCRUwgICAgICAgICAgICAgPSAqTm90ZTogWW91IGNhbiBvbmx5IHNlbGVjdCB0aGUgTmV4dCBidXR0b24gaWYgdGhlIFdTREwgZG9jdW1lbnQgaXMgdmFsaWQuCi1XU0RMX1BBR0VfV09SS0JFTkNIX0JVVFRPTiAgICAgICAgICAgICA9IFdvcmtiZW5jaC4uLgotV1NETF9QQUdFX0JST1dTRV9CVVRUT04gICAgICAgICAgICAgICAgPSBCcm93c2UuLi4KLVdTRExfUEFHRV9TRUFSQ0hfVURESV9CVVRUT04gICAgICAgICAgID0gU2VhcmNoIFVEREkuLi4KLQotIyAtLS0tLS0tLS0tLS0tLS0gVmFsaWRhdGlvbiBXaXphcmQgKFdTREwgY29udGVudCBwYWdlKSAtLS0tLS0tLS0tLS0tLS0KLVdTRExfQ09OVEVOVF9QQUdFX1NFTEVDVF9IRUFESU5HICAgICAgID0gU3BlY2lmeSB0aGUgV1NETCBlbGVtZW50IHRvIGJlIEFuYWx5emVkCi1XU0RMX0NPTlRFTlRfUEFHRV9TRUxFQ1RfRVhQTCAgICAgICAgICA9IEluZGljYXRlIHRoZSBuYW1lLCB0eXBlLCBhbmQgbmFtZXNwYWNlIG9mIHRoZSBXU0RMIGVsZW1lbnQgdG8gYmUgYW5hbHl6ZWQKLVdTRExfQ09OVEVOVF9QQUdFX0dST1VQX1RFWFRfRUxFTUVOVCAgID0gVGhlIFdTREwgZWxlbWVudAotV1NETF9DT05URU5UX1BBR0VfR1JPVVBfVEVYVF9UWVBFICAgICAgPSB0eXBlCi1XU0RMX0NPTlRFTlRfUEFHRV9SQURJT19QT1JUICAgICAgICAgICA9IHBvcnQKLVdTRExfQ09OVEVOVF9QQUdFX1JBRElPX0JJTkRJTkcgICAgICAgID0gYmluZGluZwotV1NETF9DT05URU5UX1BBR0VfUkFESU9fUE9SVF9UWVBFICAgICAgPSBwb3J0VHlwZQotV1NETF9DT05URU5UX1BBR0VfUkFESU9fT1BFUkFUSU9OICAgICAgPSBvcGVyYXRpb24KLVdTRExfQ09OVEVOVF9QQUdFX1JBRElPX01FU1NBR0UgICAgICAgID0gbWVzc2FnZQotV1NETF9DT05URU5UX1BBR0VfTEFCRUxfTkFNRSAgICAgICAgICAgPSBuYW1lOgotV1NETF9DT05URU5UX1BBR0VfTEFCRUxfTkFNRVNQQUNFICAgICAgPSBuYW1lc3BhY2U6Ci1XU0RMX0NPTlRFTlRfUEFHRV9MQUJFTF9QQVJFTlQgICAgICAgICA9IHBhcmVudDoKLQotIyAtLS0tLS0tLS0tLS0tLS0gVmFsaWRhdGlvbiBXaXphcmQgKExvZyBwYWdlKSAtLS0tLS0tLS0tLS0tLS0KLUxPR19QQUdFX1NFTEVDVF9MT0dfRklMRU5BTUVfSEVBRElORyAgID0gU3BlY2lmeSB0aGUgV1MtSSBNZXNzYWdlIExvZyBGaWxlIE5hbWUKLUxPR19QQUdFX1NFTEVDVF9MT0dfRklMRU5BTUVfRVhQTCAgICAgID0gU2VsZWN0IGEgZm9sZGVyIGFuZCBzcGVjaWZ5IGEgbWVzc2FnZSBsb2cgZmlsZSBuYW1lCi0KLSMgQWN0aW9ucwotQUNUSU9OX1dTSV9WQUxJREFUT1IgICAgICAgICAgICAgICAgICAgPSBXUy1JIE1lc3NhZ2UgVmFsaWRhdG9yCi0KLSMgLS0tLS0tLS0tLS0tLS0tIEVycm9ycyAtLS0tLS0tLS0tLS0tLS0KLUVSUk9SX1VOQUJMRV9UT19WQUxJREFURSAgICAgICAgICAgICAgID0gVW5hYmxlIHRvIFZhbGlkYXRlCi1FUlJPUl9WQUxJREFUSU9OX0ZBSUxFRCAgICAgICAgICAgICAgICA9IFZhbGlkYXRpb24gRmFpbGVkCi1FUlJPUl9USEVfV1NJTVNHX0ZJTEVfSVNfTk9UX1ZBTElEICAgICA9IFRoZSBXUy1JIE1lc3NhZ2UgTG9nIGZpbGUgaXMgbm90IHZhbGlkLiAgU2VlIHRoZSBQcm9ibGVtcyB2aWV3IGZvciBhIGxpc3Qgb2YgdGhlIHZhbGlkYXRpb24gZXJyb3JzLgotRVJST1JfUFJPQkxFTVNfUkVBRElOR19XU0lNU0dfRklMRSAgICAgPSBQcm9ibGVtcyByZWFkaW5nIHRoZSBXUy1JIE1lc3NhZ2UgTG9nIGZpbGUuICBTZWUgdGhlIFByb2JsZW1zIHZpZXcgZm9yIGEgbGlzdCBvZiBlcnJvcnMuCi1FUlJPUl9JTlZBTElEX0xPR19GSUxFX0VYVEVOU0lPTiAgICAgICA9IFRoZSBmaWxlIG5hbWUgZXh0ZW5zaW9uIGNhbiBvbmx5IGJlICIud3NpbXNnIi4KLVdBUk5JTkdfVkFMSURBVElPTl9XQVJOSU5HU19ERVRFQ1RFRCAgID0gSG93ZXZlciB3YXJuaW5ncyBoYXZlIGJlZW4gaXNzdWVkLiBTZWUgdGhlIFByb2JsZW1zIHZpZXcgZm9yIGEgbGlzdCBvZiB0aGUgdmFsaWRhdGlvbiB3YXJuaW5ncy4KLVdBUk5JTkdfRklMRV9BTFJFQURZX0VYSVNUUyAgICAgICAgICAgID0gV2FybmluZzogVGhlIGZpbGUgYWxyZWFkeSBleGlzdHMgYW5kIHdpbGwgYmUgb3ZlcndyaXR0ZW4uIAotCi0jIC0tLS0tLS0tLS0tLS0tLSBJbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIC0tLS0tLS0tLS0tLS0tLQotSU5GT19WQUxJREFUSU9OX1NVQ0VFREVEICAgICAgICAgICAgICAgPSBWYWxpZGF0aW9uIFN1Y2NlZWRlZAotSU5GT19USEVfV1NJTVNHX0ZJTEVfSVNfVkFMSUQgICAgICAgICAgPSBUaGUgV1MtSSBNZXNzYWdlIExvZyBmaWxlIGlzIHZhbGlkLgotSU5GT19OT19NRVNTQUdFU19UT19WQUxJREFURSAgICAgICAgICAgPSBObyBNZXNzYWdlcyB0byBWYWxpZGF0ZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL1Jlc291cmNlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvUmVzb3VyY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMThhZjFhOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvUmVzb3VyY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWw7Ci0KLS8qKgotICogR0lGIGNvbnN0YW50cwotICogCi0gKiBAYXV0aG9yIERhdmlkIExhdXpvbiwgSUJNCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgUmVzb3VyY2UKLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVkFMSURBVEVfV1NJX0xPR0ZJTEVfV0laID0gImFjdGlvbnMvaWNvbnMvd3NpX2xvZ2ZpbGVfd2l6LnBuZyI7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvUmVzb3VyY2VGaWx0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9SZXNvdXJjZUZpbHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTAyMjU2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9SZXNvdXJjZUZpbHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlckZpbHRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklDb250YWluZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBSZXNvdXJjZUZpbHRlciBleHRlbmRzIFZpZXdlckZpbHRlciAKLXsKLSAgcHJvdGVjdGVkIFN0cmluZ1tdIGZFeHRlbnNpb25zOwotICBwcm90ZWN0ZWQgSUZpbGVbXSBmRXhjbHVkZWRGaWxlczsKLSAgcHJvdGVjdGVkIENvbGxlY3Rpb24gZkV4Y2x1ZGVzOwotCQotICBwdWJsaWMgUmVzb3VyY2VGaWx0ZXIoU3RyaW5nW10gZXh0ZW5zaW9ucywgQ29sbGVjdGlvbiBleGNsdWRlKSAKLSAgewotICAgIGZFeHRlbnNpb25zPSBleHRlbnNpb25zOwotICAgIGZFeGNsdWRlcz0gZXhjbHVkZTsKLSAgICBmRXhjbHVkZWRGaWxlcyA9IG51bGw7Ci0gIH0KLQotICBwdWJsaWMgUmVzb3VyY2VGaWx0ZXIoU3RyaW5nW10gZXh0ZW5zaW9ucywgSUZpbGVbXSBleGNsdWRlZEZpbGVzLCBDb2xsZWN0aW9uIGV4Y2x1ZGUpIAotICB7Ci0gICAgZkV4dGVuc2lvbnM9IGV4dGVuc2lvbnM7Ci0gICAgZkV4Y2x1ZGVzPSBleGNsdWRlOwotICAgIGZFeGNsdWRlZEZpbGVzID0gZXhjbHVkZWRGaWxlczsKLSAgfQotCQotICBwdWJsaWMgYm9vbGVhbiBpc0ZpbHRlclByb3BlcnR5KE9iamVjdCBlbGVtZW50LCBPYmplY3QgcHJvcGVydHkpIAotICB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0JCi0gIHB1YmxpYyBib29sZWFuIHNlbGVjdChWaWV3ZXIgdmlld2VyLCBPYmplY3QgcGFyZW50LCBPYmplY3QgZWxlbWVudCkgCi0gIHsKLSAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIElGaWxlKSAKLSAgICB7Ci0gICAgICBpZiAoZkV4Y2x1ZGVzICE9IG51bGwgJiYgZkV4Y2x1ZGVzLmNvbnRhaW5zKGVsZW1lbnQpKSAKLSAgICAgIHsKLQlyZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBTdHJpbmcgbmFtZT0gKChJRmlsZSllbGVtZW50KS5nZXROYW1lKCk7Ci0gICAgICBpZiAoZkV4Y2x1ZGVkRmlsZXMgIT0gbnVsbCkgCi0gICAgICB7Ci0gICAgICAgIGZvciAoaW50IGo9IDA7IGogPCBmRXhjbHVkZWRGaWxlcy5sZW5ndGg7IGorKykgCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoICgoSUZpbGUpZWxlbWVudCkuZ2V0TG9jYXRpb24oKS4KLSAgICAgICAgICAgICAgIHRvU3RyaW5nKCkuY29tcGFyZVRvKCgoSUZpbGUpZkV4Y2x1ZGVkRmlsZXNbal0pLmdldExvY2F0aW9uKCkudG9TdHJpbmcoKSkgPT0gMCApCi0gICAgICAgICAgIHJldHVybiBmYWxzZTsgICAgICAgICAgICAgCi0gICAgICAgIH0gICAgICAgICAgICAKLSAgICAgIH0KLSAgICAgIGlmIChmRXh0ZW5zaW9ucy5sZW5ndGggPT0gMCkgCi0gICAgICB7Ci0gICAgICAgIC8vIGFzc3VtZSB0aGF0IHdlIGRvbid0IHdhbnQgdG8gZmlsdGVyIGFueSBmaWxlcyBiYXNlZCBvbiAKLSAgICAgICAgLy8gZXh0ZW5zaW9uCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgZm9yIChpbnQgaT0gMDsgaSA8IGZFeHRlbnNpb25zLmxlbmd0aDsgaSsrKSAKLSAgICAgIHsKLSAgICAgICAgaWYgKG5hbWUuZW5kc1dpdGgoZkV4dGVuc2lvbnNbaV0pKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgIH0gCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSAKLSAgICBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSUNvbnRhaW5lcikgCi0gICAgeyAvLyBJUHJvamVjdCwgSUZvbGRlcgotICAgICAgdHJ5IAotICAgICAgewotICAgICAgCUlSZXNvdXJjZVtdIHJlc291cmNlcz0gKChJQ29udGFpbmVyKWVsZW1lbnQpLm1lbWJlcnMoKTsKLQlmb3IgKGludCBpPSAwOyBpIDwgcmVzb3VyY2VzLmxlbmd0aDsgaSsrKSAKLSAgICAgICAgewotCSAgLy8gcmVjdXJzaXZlIQotCSAgaWYgKHNlbGVjdCh2aWV3ZXIsIHBhcmVudCwgcmVzb3VyY2VzW2ldKSkgCi0gICAgICAgICAgewotCSAgICByZXR1cm4gdHJ1ZTsKLQkgIH0KLQl9Ci0gICAgICB9IAotICAgICAgY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgCi0gICAgICB7Ci0gICAgICB9CQkJCQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9XU0lNZXNzYWdlVmFsaWRhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvV1NJTWVzc2FnZVZhbGlkYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNWVhNDRjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9XU0lNZXNzYWdlVmFsaWRhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwuY29yZS5WYWxpZGF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSVJlcG9ydGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSVZhbGlkYXRpb25Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsLmFjdGlvbnMuV1NJVmFsaWRhdGVBY3Rpb247Ci0vL2ltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LmltcGwuRGVmYXVsdFJlcG9ydGVyOwotCi0vKioKLSAqIEEgVmFsaWRhdG9yIHRoYXQgcGVyZm9ybXMgdmFsaWRhdGlvbiBvbiBhIFdTLUkgTWVzc2FnZSBMb2cgZmlsZS4gCi0gKiAKLSAqIEBhdXRob3IgRGF2aWQgTGF1em9uLCBJQk0KLSAqLwotcHVibGljIGNsYXNzIFdTSU1lc3NhZ2VWYWxpZGF0b3IgaW1wbGVtZW50cyBJVmFsaWRhdG9yCi17Ci0gIHByb3RlY3RlZCBJUmVwb3J0ZXIgcmVwb3J0ZXI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFdTSV9NRVNTQUdFX1ZBTElEQVRPUl9JRCA9ICJ3c2ltZXNzYWdldmFsaWRhdG9yIi5pbnRlcm4oKTsKLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UudmFsaWRhdGUuSVZhbGlkYXRvciN2YWxpZGF0ZShvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZhbGlkYXRlKElGaWxlIGZpbGUpCi0gIHsgIAotICAgIFdTSVZhbGlkYXRlQWN0aW9uIHZhbGlkYXRlQWN0aW9uID0gbmV3IFdTSVZhbGlkYXRlQWN0aW9uKGZpbGUsIGZhbHNlKTsKLSAgICB2YWxpZGF0ZUFjdGlvbi5zZXRWYWxpZGF0b3IodGhpcyk7Ci0gICAgLy92YWxpZGF0ZUFjdGlvbi5zZXRSZXBvcnRlcihnZXRSZXBvcnRlcigpKTsKLSAgICB2YWxpZGF0ZUFjdGlvbi5ydW4oKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLnZhbGlkYXRlLklWYWxpZGF0b3Ijc2V0UmVwb3J0ZXIob3JnLmVjbGlwc2UudmFsaWRhdGUuSVJlcG9ydGVyKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UmVwb3J0ZXIoSVJlcG9ydGVyIHJlcG9ydGVyKQotICB7Ci0gIAl0aGlzLnJlcG9ydGVyID0gcmVwb3J0ZXI7Ci0gIH0KLQotcHVibGljIHZvaWQgY2xlYW51cChJUmVwb3J0ZXIgcmVwb3J0ZXIpIHsKLQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0JCi19Ci0KLXB1YmxpYyB2b2lkIHZhbGlkYXRlKElWYWxpZGF0aW9uQ29udGV4dCBoZWxwZXIsIElSZXBvcnRlciByZXBvcnRlcikgdGhyb3dzIFZhbGlkYXRpb25FeGNlcHRpb24KLSB7Ci0JLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvV1NJVUlQbHVnaW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9XU0lVSVBsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YmFjNjhmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9XU0lVSVBsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZVJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsKLQotLyoqCi0gKiBXU0lWYWxpZGF0ZVBsdWdpbiBpcyBhIHBsdWdpbiB0aGF0IGludGVncmF0ZXMgd2l0aCB0aGUgRWNsaXBzZSBwbGF0Zm9ybSBVSS4gCi0gKiAKLSAqIEBhdXRob3IgRGF2aWQgTGF1em9uLCBJQk0KLSAqIEBhdXRob3IgTGF3cmVuY2UgTWFuZGVsLCBJQk0KLSAqLwotCi1wdWJsaWMgY2xhc3MgV1NJVUlQbHVnaW4gZXh0ZW5kcyBBYnN0cmFjdFVJUGx1Z2luCi17Ci0gIC8qKgotICAgKiBUaGUgc2luZ2xldG9uLgotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBXU0lVSVBsdWdpbiBpbnN0YW5jZTsgICAgICAgICAgICAgICAgCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS53c3Qud3NpLnVpIjsKLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKi8KLSAgcHVibGljIFdTSVVJUGx1Z2luKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gICAgaW5zdGFuY2UgPSB0aGlzOwotICB9ICAgIAotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24uIChCYXNlZCBvbiB0aGUgU2luZ2xldG9uIFBhdHRlcm4pLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBXU0lVSVBsdWdpbiBnZXRJbnN0YW5jZSgpCi0gIHsKLSAgICByZXR1cm4gaW5zdGFuY2U7Ci0gIH0KLQotICBwcm90ZWN0ZWQgSW1hZ2VSZWdpc3RyeSBjcmVhdGVJbWFnZVJlZ2lzdHJ5KCkgCi0gIHsKLQkJSW1hZ2VSZWdpc3RyeSByZWdpc3RyeSA9IHN1cGVyLmNyZWF0ZUltYWdlUmVnaXN0cnkoKTsKLQkJcmVnaXN0ZXJJbWFnZShyZWdpc3RyeSwgUmVzb3VyY2UuVkFMSURBVEVfV1NJX0xPR0ZJTEVfV0laKTsKLQkJcmV0dXJuIHJlZ2lzdHJ5OwotICB9Ci0KLQkvKioKLQkgKiBSZWdpc3RlciBhbiBpbWFnZSB3aXRoIHRoZSByZWdpc3RyeS4KLQkgKiAKLQkgKiBAcGFyYW0ga2V5IHRoZSBrZXkKLQkgKi8KLQlwcml2YXRlIHZvaWQgcmVnaXN0ZXJJbWFnZShJbWFnZVJlZ2lzdHJ5IHJlZ2lzdHJ5LCBTdHJpbmcga2V5KQotCXsKLSAgCSAgdHJ5IAotICAJICB7Ci0JCUltYWdlRGVzY3JpcHRvciBpZCA9IEltYWdlRGVzY3JpcHRvci5jcmVhdGVGcm9tRmlsZShXU0lVSVBsdWdpbi5jbGFzcywga2V5KTsKLQkJcmVnaXN0cnkucHV0KGtleSwgaWQpOwotCSAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIAotCSAgewotICAgICAgfQotCX0KLQotICAvKioKLSAgICogQ29udmllbmNlIEFQSS4gIAotICAgKiBGaW5kcyB0aGUgc3BlY2lmaWVkIGltYWdlIHN0b3JlZCBpbiB0aGlzIHBsdWctaW4ncyBpbWFnZSByZWdpc3RyeS4KLSAgICogQHBhcmFtIGljb25OYW1lOiB0aGUgbmFtZSBvZiB0aGUgaW1hZ2UuCi0gICAqIEByZXR1cm4gdGhlIGltYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgSW1hZ2UgZ2V0UmVzb3VyY2VJbWFnZShTdHJpbmcgaWNvbk5hbWUpCi0gIHsKLSAgICByZXR1cm4gaW5zdGFuY2UuZ2V0SW1hZ2VSZWdpc3RyeSgpLmdldChpY29uTmFtZSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9XU0lWYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9XU0lWYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGRiNjQ0NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvV1NJVmFsaWRhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbC5hY3Rpb25zLldTSVZhbGlkYXRlQWN0aW9uOwotCi0vKioKLSAqIEEgc2ltcGxlIGludGVyZmFjZSB0byB0aGUgV1MtSSBtZXNzYWdlIGxvZyB2YWxpZGF0b3IuCi0gKiAKLSAqIEBhdXRob3IgTGF3cmVuY2UgTWFuZGVsLCBJQk0KLSAqLwotcHVibGljIGNsYXNzIFdTSVZhbGlkYXRvciB7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3Rvci4KLQkgKi8KLQlwdWJsaWMgV1NJVmFsaWRhdG9yKCkKLQl7Ci0JfQotCQotCS8qKgotCSAqIFZhbGlkYXRlIHRoZSBnaXZlbiBsb2cgZmlsZS4KLQkgKiAKLQkgKiBAcGFyYW0gZmlsZSBUaGUgbG9nIGZpbGUgdG8gdmFsaWRhdGUuCi0JICovCi0JcHVibGljIHZvaWQgdmFsaWRhdGUoSUZpbGUgZmlsZSkKLQl7Ci0JCVdTSU1lc3NhZ2VWYWxpZGF0b3IgbWVzc2FnZVZhbGlkYXRvciA9IG5ldyBXU0lNZXNzYWdlVmFsaWRhdG9yKCk7Ci0JCVdTSVZhbGlkYXRlQWN0aW9uIHZhbGlkYXRlQWN0aW9uID0gbmV3IFdTSVZhbGlkYXRlQWN0aW9uKGZpbGUsIHRydWUpOwotCQl2YWxpZGF0ZUFjdGlvbi5zZXRWYWxpZGF0b3IobWVzc2FnZVZhbGlkYXRvcik7Ci0JCXZhbGlkYXRlQWN0aW9uLnJ1bigpOwotCX0KLQkKLQkvKioKLQkgKiBWYWxpZGF0ZSB0aGUgZ2l2ZW4gbG9nIGZpbGUgd2l0aCBhIFdTREwgZG9jdW1lbnQgc3BlY2lmaWVkLgotCSAqIAotCSAqIEBwYXJhbSBmaWxlIFRoZSBsb2cgZmlsZSB0byB2YWxpZGF0ZS4KLQkgKiBAcGFyYW0gd3NkbGZpbGUgVGhlIFdTREwgZmlsZSB0byB1c2UgZm9yIHZhbGlkYXRpb24uCi0JICogQHBhcmFtIGVsZW1lbnRuYW1lIFRoZSBXU0RMIGVsZW1lbnQgdG8gdmFsaWRhdGUuCi0JICogQHBhcmFtIG5hbWVzcGFjZSBUaGUgbmFtZXNwYWNlIG9mIHRoZSBXU0RMIGVsZW1lbnQgdG8gdmFsaWRhdGUuCi0JICogQHBhcmFtIHBhcmVudG5hbWUgVGhlIG5hbWUgb2YgdGhlIHBhcmVudCBlbGVtZW50IG9mIHRoZSBlbGVtZW50IHRvIHZhbGlkYXRlLgotCSAqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIHRoZSBlbGVtZW50IHRvIHZhbGlkYXRlLgotCSAqLwotCS8qKgotCSAqIFZhbGlkYXRlIHRoZSBnaXZlbiBsb2cgZmlsZS4KLQkgKiAKLQkgKiBAcGFyYW0gZmlsZSBUaGUgbG9nIGZpbGUgdG8gdmFsaWRhdGUuCi0JICovCi0JcHVibGljIHZvaWQgdmFsaWRhdGUoSUZpbGUgZmlsZSwgU3RyaW5nIHdzZGxmaWxlLCBTdHJpbmcgZWxlbWVudG5hbWUsIFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBwYXJlbnRuYW1lLCBTdHJpbmcgdHlwZSkKLQl7Ci0JCVdTSU1lc3NhZ2VWYWxpZGF0b3IgbWVzc2FnZVZhbGlkYXRvciA9IG5ldyBXU0lNZXNzYWdlVmFsaWRhdG9yKCk7Ci0JCVdTSVZhbGlkYXRlQWN0aW9uIHZhbGlkYXRlQWN0aW9uID0gbmV3IFdTSVZhbGlkYXRlQWN0aW9uKGZpbGUsIHRydWUsIHdzZGxmaWxlLCBlbGVtZW50bmFtZSwgbmFtZXNwYWNlLCBwYXJlbnRuYW1lLCB0eXBlKTsKLQkJdmFsaWRhdGVBY3Rpb24uc2V0VmFsaWRhdG9yKG1lc3NhZ2VWYWxpZGF0b3IpOwotCQl2YWxpZGF0ZUFjdGlvbi5ydW4oKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvYWN0aW9ucy9WYWxpZGF0ZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL2FjdGlvbnMvVmFsaWRhdGVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGVmY2VjYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvYWN0aW9ucy9WYWxpZGF0ZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JTWFya2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JUGFnZUxheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwub3BlcmF0aW9ucy5Mb2NhbGl6ZWRNZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLm9wZXJhdGlvbnMuV29ya2JlbmNoUmVwb3J0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwucHJvdmlzaW9uYWwuY29yZS5JTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklSZXBvcnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbC5XU0lVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUubG9nZ2luZy5JTG9nZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUubG9nZ2luZy5Mb2dnZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwuTG9nZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwudmFsaWRhdGlvbi5YTUxWYWxpZGF0aW9uVUlNZXNzYWdlczsKLQotLyoqCi0gKiBBIGdlbmVyYWwgdmFsaWRhdGUgYWN0aW9uIGNsYXNzIHRoYXQgY2FuIGJlIGV4dGVuZGVkIGJ5IHZhbGlkYXRvcnMuIFRoaXMgY2xhc3MKLSAqIHByb3ZpZGVzIG1ldGhvZHMgdG8gcnVuIHRoZSBhY3Rpb24sIGFkZCBtYXJrZXJzIHRvIGEgZmlsZSBhbmQgd2lsbCBoYW5kbGUKLSAqIHNob3dpbmcgYSBkaWFsb2cgd2l0aCB0aGUgcmVzdWx0cyBvZiB2YWxpZGF0aW9uIChpZiByZXF1ZXN0ZWQpIGFuZCBwcm9tcHQgdG8KLSAqIHNhdmUgZGlydHkgZmlsZXMgKGlmIHJlcXVlc3RlZC4pCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBWYWxpZGF0ZUFjdGlvbiBleHRlbmRzIEFjdGlvbgotewotICAvLyBMb2NhbGx5IHVzZWQsIG5vbi1VSSBzdHJpbmdzLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVGRVJFTkNFRF9GSUxFX0VSUk9SX09QRU4gPSAicmVmZXJlbmNlZEZpbGVFcnJvcigiOyAvLyROT04tTkxTLTEkCi0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFJFRkVSRU5DRURfRklMRV9FUlJPUl9DTE9TRSA9ICIpIjsgLy8kTk9OLU5MUy0xJAotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBSRUZFUkVOQ0VEX0ZJTEVfRVJST1IgPSAicmVmZXJlbmNlZEZpbGVFcnJvciI7IC8vJE5PTi1OTFMtMSQKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgR1JPVVBfTkFNRSA9ICJncm91cE5hbWUiOyAvLyROT04tTkxTLTEkCi0gIAotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRklMRV9QUk9UT0NPTF9OT19TTEFTSCA9ICJmaWxlOiI7IC8vJE5PTi1OTFMtMSQKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEZJTEVfUFJPVE9DT0wgPSAiZmlsZTovLy8iOyAvLyROT04tTkxTLTEkCi0gIAotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBDT0xVTU5fTlVNQkVSX0FUVFJJQlVURSA9ICJjb2x1bW5OdW1iZXIiOyAvLyROT04tTkxTLTEkCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFNRVUlHR0xFX1NFTEVDVElPTl9TVFJBVEVHWV9BVFRSSUJVVEUgPSAic3F1aWdnbGVTZWxlY3Rpb25TdHJhdGVneSI7IC8vJE5PTi1OTFMtMSQKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1FVSUdHTEVfTkFNRV9PUl9WQUxVRV9BVFRSSUJVVEUgPSAic3F1aWdnbGVOYW1lT3JWYWx1ZSI7IC8vJE5PTi1OTFMtMSQKLQotICBwcm90ZWN0ZWQgYm9vbGVhbiBzaG93RGlhbG9nID0gdHJ1ZTsKLQotICBwcm90ZWN0ZWQgSUZpbGUgZmlsZSA9IG51bGw7Ci0KLSAgcHJvdGVjdGVkIElSZXBvcnRlciByZXBvcnRlcjsKLQotICBwcm90ZWN0ZWQgSVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKiAKLSAgICogQHBhcmFtIGZpbGUKLSAgICogICAgICAgICAgVGhlIGZpbGUgdG8gdmFsaWRhdGUuCi0gICAqIEBwYXJhbSBzaG93RGlhbG9nCi0gICAqICAgICAgICAgIFdoZXRoZXIgb3Igbm90IHRvIHNob3cgYSBkaWFsb2cgd2hlbiB2YWxpZGF0aW9uIGlzIGNvbXBsZXRlLgotICAgKi8KLSAgcHVibGljIFZhbGlkYXRlQWN0aW9uKElGaWxlIGZpbGUsIGJvb2xlYW4gc2hvd0RpYWxvZykKLSAgewotICAgIHRoaXMuc2hvd0RpYWxvZyA9IHNob3dEaWFsb2c7Ci0gICAgdGhpcy5maWxlID0gZmlsZTsKLSAgfQotCi0gIC8qKgotICAgKiBWYWxpZGF0ZSB0aGUgc3BlY2lmaWVkIGZpbGUuCi0gICAqIAotICAgKiBAcGFyYW0gZmlsZQotICAgKiAgICAgICAgICBUaGUgZmlsZSB0byB2YWxpZGF0ZS4KLSAgICovCi0gIHByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIHZhbGlkYXRlKGZpbmFsIElGaWxlIGZpbGUpOwotCi0gIHByb3RlY3RlZCB2b2lkIGFkZEluZm9Ub01lc3NhZ2UgKFZhbGlkYXRpb25NZXNzYWdlIHYsIElNZXNzYWdlIG0pCi0gIHsgLy8gVGhpcyBtZXRob2QgaXMgb3ZlcmlkZGVuIGJ5IHN1YmNsYXNzZXMKLSAgfQotICAKLSAgLyoqCi0gICAqIENyZWF0ZSBtYXJrZXJzIGZvciB0aGUgdmFsaWF0aW9uIG1lc3NhZ2VzIGdlbmVyYXRlZCBmcm9tIHRoZSB2YWxpZGF0aW9uLgotICAgKiAKLSAgICogQHBhcmFtIGlGaWxlCi0gICAqICAgICAgICAgIFRoZSByZXNvdXJjZSB0byBjcmVhdGUgdGhlIG1hcmtlcnMgb24uCi0gICAqIEBwYXJhbSB2YWxtZXNzYWdlcwotICAgKiAgICAgICAgICBUaGUgYXJyYXkgb2YgdmFsaWRhdGlvbiBtZXNzYWdlcy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGNyZWF0ZU1hcmtlcnMoSUZpbGUgaUZpbGUsIFZhbGlkYXRpb25NZXNzYWdlW10gdmFsbWVzc2FnZXMpCi0gIHsKLSAgICBpZiAoIWZpbGVJc09LKGlGaWxlKSkKLSAgICB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGludCBudW1tZXNzYWdlcyA9IHZhbG1lc3NhZ2VzLmxlbmd0aDsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bW1lc3NhZ2VzOyBpKyspCi0gICAgewotICAgICAgVmFsaWRhdGlvbk1lc3NhZ2UgdmFsaWRhdGlvbk1lc3NhZ2UgPSB2YWxtZXNzYWdlc1tpXTsKLSAgICAgIFN0cmluZyB1cmkgPSB2YWxpZGF0aW9uTWVzc2FnZS5nZXRVcmkoKTsKLQotICAgICAgTG9jYWxpemVkTWVzc2FnZSBtZXNzYWdlOwotICAgICAgaWYgKHZhbGlkYXRpb25NZXNzYWdlLmdldFNldmVyaXR5KCkgPT0gVmFsaWRhdGlvbk1lc3NhZ2UuU0VWX0xPVykKLSAgICAgIHsKLSAgICAgICAgbWVzc2FnZSA9IG5ldyBMb2NhbGl6ZWRNZXNzYWdlKGdldFZhbGlkYXRpb25GcmFtZXdvcmtTZXZlcml0eShJTWFya2VyLlNFVkVSSVRZX1dBUk5JTkcpLCB2YWxpZGF0aW9uTWVzc2FnZQotICAgICAgICAgICAgLmdldE1lc3NhZ2UoKSwgaUZpbGUpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgeyAKLSAgICAgICAgbWVzc2FnZSA9IG5ldyBMb2NhbGl6ZWRNZXNzYWdlKGdldFZhbGlkYXRpb25GcmFtZXdvcmtTZXZlcml0eShJTWFya2VyLlNFVkVSSVRZX0VSUk9SKSwgdmFsaWRhdGlvbk1lc3NhZ2UuZ2V0TWVzc2FnZSgpLCBpRmlsZSk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIG1lc3NhZ2Uuc2V0TGluZU5vKHZhbGlkYXRpb25NZXNzYWdlLmdldExpbmVOdW1iZXIoKSk7Ci0gICAgICBhZGRJbmZvVG9NZXNzYWdlKHZhbGlkYXRpb25NZXNzYWdlLCBtZXNzYWdlKTsKLSAgICAgIAotICAgICAgTGlzdCBuZXN0ZWRlcnJvcnMgPSB2YWxpZGF0aW9uTWVzc2FnZS5nZXROZXN0ZWRNZXNzYWdlcygpOwotICAgICAgaWYgKG5lc3RlZGVycm9ycyAhPSBudWxsICYmICFuZXN0ZWRlcnJvcnMuaXNFbXB0eSgpKQotICAgICAgewotICAgICAgICBtZXNzYWdlLnNldEdyb3VwTmFtZShSRUZFUkVOQ0VEX0ZJTEVfRVJST1JfT1BFTiArIHVyaSArIFJFRkVSRU5DRURfRklMRV9FUlJPUl9DTE9TRSk7Ci0gICAgICB9Ci0KLSAgICAgIGdldE9yQ3JlYXRlUmVwb3J0ZXIoKS5hZGRNZXNzYWdlKGdldFZhbGlkYXRvcigpLCBtZXNzYWdlKTsKLQotICAgICAgCi0gICAgfQotICAgIHRyeQotICAgIHsKLSAgICAgIElNYXJrZXJbXSBtYXJrZXJzID0gaUZpbGUuZmluZE1hcmtlcnMobnVsbCwgdHJ1ZSwgSVJlc291cmNlLkRFUFRIX0lORklOSVRFKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWFya2Vycy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgSU1hcmtlciBtYXJrZXIgPSBtYXJrZXJzW2ldOwotICAgICAgICBTdHJpbmcgZ3JvdXBOYW1lID0gbnVsbDsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBncm91cE5hbWUgPSAoU3RyaW5nKSBtYXJrZXIuZ2V0QXR0cmlidXRlKEdST1VQX05BTUUpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGdyb3VwTmFtZSAhPSBudWxsICYmIGdyb3VwTmFtZS5zdGFydHNXaXRoKFJFRkVSRU5DRURfRklMRV9FUlJPUikpCi0gICAgICAgIHsKLQotICAgICAgICAgIG1hcmtlci5zZXRBdHRyaWJ1dGUoSU1hcmtlci5ET05FLCB0cnVlKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfQotCi0gIH0KLQotICBwdWJsaWMgdm9pZCBjbGVhck1hcmtlcnMoSUZpbGUgaUZpbGUpCi0gIHsKLSAgICBpZiAoZmlsZUlzT0soaUZpbGUpKQotICAgIHsKLSAgICAgIGdldE9yQ3JlYXRlUmVwb3J0ZXIoKS5yZW1vdmVBbGxNZXNzYWdlcyhnZXRWYWxpZGF0b3IoKSwgaUZpbGUpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJ1bigpCi0gIHsKLSAgCXRyeQotICAJewotICAJCS8vIENTLi4uIGEgdGVtcG9yYXJ5IHRlc3QgdG8gYXZvaWQgcGVyZm9ybWluZyB2YWxpZGF0aW9uIGluIHRoZSBhYnNlbmNlIG9mIHhlcmNlcyAKLSAgCQkvLwotICAJCS8vZHcgQ2xhc3MgdGhlQ2xhc3MgPSAKLSAgCQlDbGFzcy5mb3JOYW1lKCJvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTFBhcnNlckNvbmZpZ3VyYXRpb24iLCB0cnVlLCB0aGlzLmdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKSk7IC8vJE5PTi1OTFMtMSQKLSAgCQkgIAkJCi0gIAkJaWYgKGZpbGVJc09LKGZpbGUpKQotICAJCXsKLSAgCQkJLy8gQ2hlY2sgaWYgdGhlIGVkaXRvciBpcyBkaXJ0eSBmb3IgdGhpcyBmaWxlLiBJZiBzbywgcHJvbXB0IHRoZSB1c2VyIHRvCi0gIAkJCS8vIHNhdmUgYmVmb3JlIHZhbGlkYXRpbmcuCi0gIAkJCWlmKHNob3dEaWFsb2cpCi0gIAkJCXsKLSAgCQkJCWNoZWNrSWZGaWxlRGlydHkoZmlsZSk7Ci0gIAkJCX0KLSAgCQkJdHJ5Ci0gIAkJCXsKLSAgCQkJCXZhbGlkYXRlKGZpbGUpOwotICAJCQl9Ci0gIAkJCWNhdGNoIChFeGNlcHRpb24gZSkKLSAgCQkJewotICAJCQkJSUxvZ2dlciBsb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlckluc3RhbmNlKCk7Ci0gIAkJCQlsb2dnZXIubG9nRXJyb3IoIiIsIGUpOyAvLyROT04tTkxTLTEkCi0gIAkJCQkvLyAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gIAkJCX0KLSAgCQl9Ci0gIAl9Ci0gIAljYXRjaCAoRXhjZXB0aW9uIGUpCi0gIAl7CQkKLSAgCX0KLSAgfQotCi0gIC8qKgotICAgKiBUZXN0IHdoZXRoZXIgdGhlIGZpbGUgZ2l2ZW4gaXMgT0sgdG8gdXNlLiBBIGZpbGUgaXMgT0sgdG8gdXNlIGlmIDEuIEl0IGlzCi0gICAqIG5vdCBudWxsIDIuIEl0IGV4aXN0cy4gMy4gVGhlIHByb2plY3QgY29udGFpbmluZyB0aGUgZmlsZSBpcyBhY2Nlc3NpYmxlLgotICAgKiAKLSAgICogQHBhcmFtIGZpbGUgVGhlIGZpbGUgdG8gY2hlY2suCi0gICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgZmlsZSBpcyBPSyB0byB1c2UsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIGZpbGVJc09LKElGaWxlIGZpbGUpCi0gIHsKLSAgICBpZiAoZmlsZSAhPSBudWxsICYmIGZpbGUuZXhpc3RzKCkgJiYgZmlsZS5nZXRQcm9qZWN0KCkuaXNBY2Nlc3NpYmxlKCkpCi0gICAgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVjayBpZiB0aGUgZmlsZSBpcyBkaXJ0eS4gQSBmaWxlIGlzIGRpcnR5IGlmIHRoZXJlIGlzIGFuIG9wZW4gZWRpdG9yIGZvcgotICAgKiB0aGUgZmlsZSB0aGF0IGNvbnRhaW5zIGNoYW5nZXMgdGhhdCBoYXZlbid0IGJlZW4gc2F2ZWQuCi0gICAqIAotICAgKiBAcGFyYW0gZmlsZSBUaGUgZmlsZSB0byBjaGVjayB0byBzZWUgaWYgaXQgaXMgZGlydHkuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBjaGVja0lmRmlsZURpcnR5KElGaWxlIGZpbGUpCi0gIHsKLSAgICBJRWRpdG9yUGFydFtdIGRpcnR5RWRpdG9ycyA9IFdTSVVJUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkKLSAgICAgICAgLmdldEFjdGl2ZVBhZ2UoKS5nZXREaXJ0eUVkaXRvcnMoKTsKLSAgICBpbnQgbnVtZWRpdG9ycyA9IGRpcnR5RWRpdG9ycy5sZW5ndGg7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1lZGl0b3JzOyBpKyspCi0gICAgewotICAgICAgSUVkaXRvcklucHV0IGVkaXRvcklucHV0ID0gZGlydHlFZGl0b3JzW2ldLmdldEVkaXRvcklucHV0KCk7Ci0gICAgICBpZiAoZWRpdG9ySW5wdXQgaW5zdGFuY2VvZiBGaWxlRWRpdG9ySW5wdXQpCi0gICAgICB7Ci0gICAgICAgIEZpbGVFZGl0b3JJbnB1dCBmaWxlRWRpdG9ySW5wdXQgPSAoRmlsZUVkaXRvcklucHV0KSBlZGl0b3JJbnB1dDsKLSAgICAgICAgaWYgKGZpbGVFZGl0b3JJbnB1dC5nZXRGaWxlKCkuZXF1YWxzKGZpbGUpKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIG1lc3NhZ2UgPSBYTUxWYWxpZGF0aW9uVUlNZXNzYWdlcy5fVUlfU0FWRV9ESVJUWV9GSUxFX01FU1NBR0U7Ci0gICAgICAgICAgU3RyaW5nIHRpdGxlID0gWE1MVmFsaWRhdGlvblVJTWVzc2FnZXMuX1VJX1NBVkVfRElSVFlfRklMRV9USVRMRTsKLSAgICAgICAgICBpZiAoTWVzc2FnZURpYWxvZy5vcGVuUXVlc3Rpb24oRGlzcGxheS5nZXREZWZhdWx0KCkuZ2V0QWN0aXZlU2hlbGwoKSwgdGl0bGUsIG1lc3NhZ2UpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGRpcnR5RWRpdG9yc1tpXS5kb1NhdmUobnVsbCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIC8vIFRoZXJlIGNhbiBvbmx5IGJlIG9uZSBvcGVuIGVkaXRvci9maWxlIHNvIHdlIGNhbiBicmVhay4KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIHRoZSByZXBvcnRlci4KLSAgICogCi0gICAqIEByZXR1cm4gUmV0dXJucyBhIElSZXBvcnRlcgotICAgKi8KLSAgcHVibGljIElSZXBvcnRlciBnZXRSZXBvcnRlcigpCi0gIHsKLSAgICByZXR1cm4gcmVwb3J0ZXI7Ci0gIH0KLQotICAvKioKLSAgICogU2V0cyB0aGUgcmVwb3J0ZXIuCi0gICAqIAotICAgKiBAcGFyYW0gcmVwb3J0ZXIKLSAgICogICAgICAgICAgVGhlIHJlcG9ydGVyIHRvIHNldAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UmVwb3J0ZXIoSVJlcG9ydGVyIHJlcG9ydGVyKQotICB7Ci0gICAgdGhpcy5yZXBvcnRlciA9IHJlcG9ydGVyOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldHMgdGhlIHZhbGlkYXRvci4KLSAgICogCi0gICAqIEByZXR1cm4gUmV0dXJucyBhIElWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBJVmFsaWRhdG9yIGdldFZhbGlkYXRvcigpCi0gIHsKLSAgICByZXR1cm4gdmFsaWRhdG9yOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHZhbGlkYXRvci4KLSAgICogCi0gICAqIEBwYXJhbSB2YWxpZGF0b3IKLSAgICogICAgICAgICAgVGhlIHZhbGlkYXRvciB0byBzZXQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFZhbGlkYXRvcihJVmFsaWRhdG9yIHZhbGlkYXRvcikKLSAgewotICAgIHRoaXMudmFsaWRhdG9yID0gdmFsaWRhdG9yOwotICB9Ci0KLSAgcHJvdGVjdGVkIElSZXBvcnRlciBnZXRPckNyZWF0ZVJlcG9ydGVyKCkKLSAgewotICAgIGlmIChyZXBvcnRlciA9PSBudWxsKQotICAgIHsgCi0gICAgICByZXBvcnRlciA9IG5ldyBXb3JrYmVuY2hSZXBvcnRlcihmaWxlLmdldFByb2plY3QoKSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0gICAgfQotICAgIHJldHVybiByZXBvcnRlcjsKLSAgfQotCi0gIC8qKgotICAgKiBPcmlnaW5hbGx5IGZyb20gKnZhbGlkYXRpb24uSGVscGVyCi0gICAqIAotICAgKiBAcGFyYW0gc2V2ZXJpdHkKLSAgICogICAgICAgICAgVGhlIHNldmVyaXR5IGdpdmVuLgotICAgKiBAcmV0dXJuIFRoZSB2YWxpZGF0aW9uIGZyYW1ld29yayBzZXZlcml0eSBjb3JyZXNwb25kaW5nIHRvIHRoZSBlcnJvci4KLSAgICovCi0gIHByb3RlY3RlZCBpbnQgZ2V0VmFsaWRhdGlvbkZyYW1ld29ya1NldmVyaXR5KGludCBzZXZlcml0eSkKLSAgewotICAgIHN3aXRjaCAoc2V2ZXJpdHkpIHsKLSAgICBjYXNlIElNYXJrZXIuU0VWRVJJVFlfRVJST1I6Ci0gICAgICByZXR1cm4gSU1lc3NhZ2UuSElHSF9TRVZFUklUWTsKLSAgICBjYXNlIElNYXJrZXIuU0VWRVJJVFlfV0FSTklORzoKLSAgICAgIHJldHVybiBJTWVzc2FnZS5OT1JNQUxfU0VWRVJJVFk7Ci0gICAgY2FzZSBJTWFya2VyLlNFVkVSSVRZX0lORk86Ci0gICAgICByZXR1cm4gSU1lc3NhZ2UuTE9XX1NFVkVSSVRZOwotICAgIH0KLSAgICByZXR1cm4gSU1lc3NhZ2UuTE9XX1NFVkVSSVRZOwotICB9Ci0gIAotICAvKioKLSAgICogT3BlbiBhbiBlcnJvciBkaWFsb2cgd2l0aCB0aGUgZ2l2ZW4gdGl0bGUgYW5kIG1lc3NhZ2UuIFNob3cgdGhlIHByb2JsZW1zIHZpZXcKLSAgICogaWYgaXQgaXMgbm90IGFscmVhZHkgdmlzaWJsZS4KLSAgICogCi0gICAqIEBwYXJhbSB0aXRsZSBUaGUgdGl0bGUgb2YgdGhlIGVycm9yIGRpYWxvZy4KLSAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIG1lc3NhZ2UgaW4gdGhlIGVycm9yIGRpYWxvZy4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIG9wZW5FcnJvckRpYWxvZyhTdHJpbmcgdGl0bGUsIFN0cmluZyBtZXNzYWdlKQotICB7Ci0gICAgc2hvd1Byb2JsZW1zVmlldygpOwotICAgIE1lc3NhZ2VEaWFsb2cub3BlbkVycm9yKERpc3BsYXkuZ2V0RGVmYXVsdCgpLmdldEFjdGl2ZVNoZWxsKCksIHRpdGxlLCBtZXNzYWdlKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIE9wZW4gYW4gd2FybmluZyBkaWFsb2cgd2l0aCB0aGUgZ2l2ZW4gdGl0bGUgYW5kIG1lc3NhZ2UuIFNob3cgdGhlIHByb2JsZW1zIHZpZXcKLSAgICogaWYgaXQgaXMgbm90IGFscmVhZHkgdmlzaWJsZS4KLSAgICogCi0gICAqIEBwYXJhbSB0aXRsZSBUaGUgdGl0bGUgb2YgdGhlIHdhcm5pbmcgZGlhbG9nLgotICAgKiBAcGFyYW0gbWVzc2FnZSBUaGUgbWVzc2FnZSBpbiB0aGUgd2FybmluZyBkaWFsb2cuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBvcGVuV2FybmluZ0RpYWxvZyhTdHJpbmcgdGl0bGUsIFN0cmluZyBtZXNzYWdlKQotICB7Ci0gICAgc2hvd1Byb2JsZW1zVmlldygpOwotICAgIE1lc3NhZ2VEaWFsb2cub3Blbldhcm5pbmcoRGlzcGxheS5nZXREZWZhdWx0KCkuZ2V0QWN0aXZlU2hlbGwoKSwgdGl0bGUsIG1lc3NhZ2UpOwotICB9Ci0gIAotICAvKioKLSAgICogT3BlbiBhIHZhbGlkIGRpYWxvZyB3aXRoIHRoZSBnaXZlbiB0aXRsZSBhbmQgbWVzc2FnZS4gCi0gICAqIAotICAgKiBAcGFyYW0gdGl0bGUgVGhlIHRpdGxlIG9mIHRoZSB2YWxpZCBkaWFsb2cuCi0gICAqIEBwYXJhbSBtZXNzYWdlIFRoZSBtZXNzYWdlIGluIHRoZSB2YWxpZCBkaWFsb2cuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBvcGVuVmFsaWREaWFsb2coU3RyaW5nIHRpdGxlLCBTdHJpbmcgbWVzc2FnZSkKLSAgewotICAgIE1lc3NhZ2VEaWFsb2cub3BlbkluZm9ybWF0aW9uKERpc3BsYXkuZ2V0RGVmYXVsdCgpLmdldEFjdGl2ZVNoZWxsKCksIHRpdGxlLCBtZXNzYWdlKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFNob3cgdGhlIHByb2JsZW1zIHZpZXcgaWYgaXQgaXMgbm90IGFscmVhZHkgdmlzaWJsZS4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNob3dQcm9ibGVtc1ZpZXcoKQotICB7Ci0gICAgSVdvcmtiZW5jaFdpbmRvdyBkdyA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7Ci0gICAgSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IGR3LmdldEFjdGl2ZVBhZ2UoKTsKLSAgICBJV29ya2JlbmNoUGFydCBhY3RpdmVQYXJ0ID0gcGFnZS5nZXRBY3RpdmVQYXJ0KCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgaWYgKHBhZ2UgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcGFnZS5zaG93VmlldyhJUGFnZUxheW91dC5JRF9QUk9CTEVNX1ZJRVcpOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgCUxvZ2dlci5sb2dFeGNlcHRpb24oZSk7Ci0gICAgfQotICAgIHBhZ2UuYWN0aXZhdGUoYWN0aXZlUGFydCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBGb3JtYXQgYSBmaWxlIG5hbWUgaW50byBhIGNvcnJlY3QgVVJJLgotICAgKiAKLSAgICogQHBhcmFtIGZpbGVuYW1lIFRoZSBmaWxlIG5hbWUgdG8gZm9ybWF0LgotICAgKiBAcmV0dXJuIFRoZSBmb3JtYXR0ZWQgVVJJLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBjcmVhdGVVUklGb3JGaWxlUGF0aChTdHJpbmcgZmlsZW5hbWUpCi0gIHsKLSAgCWlmKCFmaWxlbmFtZS5zdGFydHNXaXRoKEZJTEVfUFJPVE9DT0xfTk9fU0xBU0gpKQotICAgIHsKLSAgICAgIHdoaWxlKGZpbGVuYW1lLnN0YXJ0c1dpdGgoIi8iKSkgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLnN1YnN0cmluZygxKTsKLSAgICAgIH0KLSAgICAgIGZpbGVuYW1lID0gRklMRV9QUk9UT0NPTCArIGZpbGVuYW1lOwotICAgIH0KLSAgCXJldHVybiBmaWxlbmFtZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRoZSB2YWxpZGF0aW9uIG91dGNvbWUgY2xhc3MgaG9sZHMgdGhlIHJlc3VsdHMgZnJvbSB2YWxpZGF0aW5nCi0gICAqIGEgZmlsZS4KLSAgICogCi0gICAqIEBhdXRob3IgTGF3cmVuY2UgTWFuZGVsLCBJQk0KLSAgICovCi0gIHByb3RlY3RlZCBjbGFzcyBWYWxpZGF0aW9uT3V0Y29tZQotICB7Ci0gICAgcHVibGljIGJvb2xlYW4gaXNWYWxpZCA9IHRydWU7Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBoYXNNZXNzYWdlcyA9IGZhbHNlOwotCi0gICAgcHVibGljIFZhbGlkYXRpb25PdXRjb21lKCkKLSAgICB7Ci0gICAgfQotICB9Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9hY3Rpb25zL1dTSVZhbGlkYXRlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvYWN0aW9ucy9XU0lWYWxpZGF0ZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNmFhYjg2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9hY3Rpb25zL1dTSVZhbGlkYXRlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbC5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSdW5uYWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwuY29yZS5JTWVzc2FnZUFjY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklNZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSVJlcG9ydGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLk1lc3NhZ2VMaW1pdEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmFuYWx5emVyLk1lc3NhZ2VBbmFseXplcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmFuYWx5emVyLldTSUFuYWx5emVyRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5yZXBvcnQuQXNzZXJ0aW9uRXJyb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25NZXNzYWdlOwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWFBhcnNlRXhjZXB0aW9uOwotCi0vKioKLSAqIEFjdGlvbiBmb3IgcnVubmluZyB0aGUgdmFsaWRhdG9yLgotICogCi0gKiBAYXV0aG9yIERhdmlkIExhdXpvbiwgSUJNCi0gKiBAYXV0aG9yIExhd3JlbmNlIE1hbmRlbCwgSUJNCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0lWYWxpZGF0ZUFjdGlvbiBleHRlbmRzIFZhbGlkYXRlQWN0aW9uCi17Ci0gIHByb3RlY3RlZCBJVmFsaWRhdG9yIHZhbGlkYXRvcjsKLSAgCi0gIHByb3RlY3RlZCBTdHJpbmcgd3NkbGZpbGUgPSBudWxsOwotICBwcm90ZWN0ZWQgU3RyaW5nIGVsZW1lbnRuYW1lID0gbnVsbDsKLSAgcHJvdGVjdGVkIFN0cmluZyBuYW1lc3BhY2UgPSBudWxsOwotICBwcm90ZWN0ZWQgU3RyaW5nIHBhcmVudG5hbWUgPSBudWxsOwotICBwcm90ZWN0ZWQgU3RyaW5nIHR5cGUgPSBudWxsOwotICBwcm90ZWN0ZWQgYm9vbGVhbiB3c2Rsc3BlY2lmaWVkID0gZmFsc2U7Ci0gIHByb3RlY3RlZCBib29sZWFuIGV4Y2VwdGlvbkNhdWdodCA9IGZhbHNlOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICogCi0gICAqIEBwYXJhbSBmIFRoZSBmaWxlIHRvIHZhbGlkYXRlCi0gICAqIEBwYXJhbSBzaG93RGlhbG9nIFdoZXRoZXIgb3Igbm90IHRvIHNob3cgYSBzdGF0dXMgZGlhbG9nIGFmdGVyIHZhbGlkYXRpb24uCi0gICAqLwotICBwdWJsaWMgV1NJVmFsaWRhdGVBY3Rpb24oSUZpbGUgZiwgYm9vbGVhbiBzaG93RGlhbG9nKQotICB7Ci0gIAlzdXBlcihmLCBzaG93RGlhbG9nKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIHdpdGggV1NETCBlbGVtZW50IHNwZWNpZmllZC4KLSAgICogCi0gICAqIEBwYXJhbSBmIFRoZSBmaWxlIHRvIHZhbGlkYXRlLgotICAgKiBAcGFyYW0gc2hvd0RpYWxvZyBXaGV0aGVyIG9yIG5vdCB0byBzaG93IGEgc3RhdHVzIGRpYWxvZyBhZnRlciB2YWxpZGF0aW9uLgotICAgKiBAcGFyYW0gZmlsZSBUaGUgV1NETCBmaWxlIHRvIHVzZSBmb3IgdmFsaWRhdGlvbi4KLSAgICogQHBhcmFtIGVsZW1lbnRuYW1lIFRoZSBuYW1lIG9mIHRoZSBXU0RMIGVsZW1lbnQgdG8gdmFsaWRhdGUuCi0gICAqIEBwYXJhbSBuYW1lc3BhY2UgVGhlIG5hbWVzcGFjZSBvZiB0aGUgV1NETCBlbGVtZW50IHRvIHZhbGlkYXRlCi0gICAqIEBwYXJhbSBwYXJlbnRuYW1lIFRoZSBwYXJlbnQgbmFtZSBvZiB0aGUgV1NETCBlbGVtZW50IHRvIHZhbGlkYXRlLgotICAgKiBAcGFyYW0gdHlwZSBUaGUgdHlwZSBvZiBlbGVtZW50IHRvIHZhbGlkYXRlLgotICAgKi8KLSAgcHVibGljIFdTSVZhbGlkYXRlQWN0aW9uKElGaWxlIGYsIGJvb2xlYW4gc2hvd0RpYWxvZywgU3RyaW5nIGZpbGUsIFN0cmluZyBlbGVtZW50bmFtZSwgU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIHBhcmVudG5hbWUsIFN0cmluZyB0eXBlKQotICB7Ci0gIAl0aGlzKGYsIHNob3dEaWFsb2cpOwotICAJaWYgKGZpbGUgIT0gbnVsbCkKLSAgCXsKLSAgCSAgd3NkbGZpbGUgPSBmaWxlLnJlcGxhY2UoJ1xcJywgJy8nKTsKLSAgCSAgaWYgKCghd3NkbGZpbGUuc3RhcnRzV2l0aChXU0lDb25zdGFudHMuRklMRV9QUkVGSVgpKSAmJiAKLSAgCQkgICghd3NkbGZpbGUuc3RhcnRzV2l0aChXU0lDb25zdGFudHMuSFRUUF9QUkVGSVgpKSkKLSAgICAgIHsKLSAgCSAgICB3c2RsZmlsZSA9IFdTSUNvbnN0YW50cy5GSUxFX1BST1RPQ09MICsgd3NkbGZpbGU7ICAKLSAgCSAgfQotICAJfQotICAJdGhpcy5lbGVtZW50bmFtZSA9IGVsZW1lbnRuYW1lOwotICAJdGhpcy5uYW1lc3BhY2UgPSBuYW1lc3BhY2U7Ci0gIAl0aGlzLnBhcmVudG5hbWUgPSBwYXJlbnRuYW1lOwotICAJdGhpcy50eXBlID0gdHlwZTsKLSAgCXRoaXMud3NkbHNwZWNpZmllZCA9IHRydWU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UudmFsaWRhdGUuVmFsaWRhdGVBY3Rpb24jdmFsaWRhdGUob3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGUpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2YWxpZGF0ZShmaW5hbCBJRmlsZSBmaWxlMSkKLSAgewotICAJZmluYWwgTWVzc2FnZUFuYWx5emVyIG1lc3NhZ2VhbmFseXplcjsKLSAgCQotICAJaWYod3NkbHNwZWNpZmllZCkKLSAgCXsKLSAgCSAgbWVzc2FnZWFuYWx5emVyID0gbmV3IE1lc3NhZ2VBbmFseXplcihXU0lDb25zdGFudHMuRklMRV9QUk9UT0NPTCArIGZpbGUxLmdldExvY2F0aW9uKCkudG9TdHJpbmcoKSwgd3NkbGZpbGUsIGVsZW1lbnRuYW1lLCBuYW1lc3BhY2UsIHBhcmVudG5hbWUsIHR5cGUpOwkKLSAgCX0KLSAgCWVsc2UKLSAgCXsJCi0gIAkgIG1lc3NhZ2VhbmFseXplciA9IG5ldyBNZXNzYWdlQW5hbHl6ZXIoV1NJQ29uc3RhbnRzLkZJTEVfUFJPVE9DT0wgKyBmaWxlMS5nZXRMb2NhdGlvbigpLnRvU3RyaW5nKCkpOwotICAJfQotICAJCi0gIAlJV29ya3NwYWNlUnVubmFibGUgb3AgPSBuZXcgSVdvcmtzcGFjZVJ1bm5hYmxlKCkgCi0gICAgewotICAgICAgcHVibGljIHZvaWQgcnVuKElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiAKLSAgICAgIHsgICAgICAgIAotICAgICAgICBjbGVhck1hcmtlcnMoZmlsZTEpOwotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIG1lc3NhZ2VhbmFseXplci52YWxpZGF0ZUNvbmZvcm1hbmNlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKFdTSUFuYWx5emVyRXhjZXB0aW9uIGFlKQotICAgICAgICB7Ci0gICAgICAgIAlleGNlcHRpb25DYXVnaHQgPSB0cnVlOwotICAgICAgICAJaWYgKGFlLmdldFRhcmdldEV4Y2VwdGlvbigpIGluc3RhbmNlb2YgU0FYUGFyc2VFeGNlcHRpb24pCi0gICAgICAgIAl7Ci0gICAgICAgIAkgIGNyZWF0ZU1hcmtlcnMoZmlsZTEsIG5ldyBWYWxpZGF0aW9uTWVzc2FnZVtde2NyZWF0ZVZhbGlkYXRpb25NZXNzYWdlRm9yRXhjZXB0aW9uKChTQVhQYXJzZUV4Y2VwdGlvbilhZS5nZXRUYXJnZXRFeGNlcHRpb24oKSwgVmFsaWRhdGlvbk1lc3NhZ2UuU0VWX05PUk1BTCl9KTsKLSAgICAgICAgCX0KLSAgICAgICAgCWVsc2UKLSAgICAgICAgCXsKLSAgICAgICAgIAkgIGNyZWF0ZU1hcmtlcnMoZmlsZTEsIG5ldyBWYWxpZGF0aW9uTWVzc2FnZVtde2NyZWF0ZVZhbGlkYXRpb25NZXNzYWdlRm9yRXhjZXB0aW9uKGFlLCBWYWxpZGF0aW9uTWVzc2FnZS5TRVZfTk9STUFMKX0pOwotICAgICAgICAJfQotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgY3JlYXRlTWFya2VycyhmaWxlMSwgY29udmVydFZhbGlkYXRpb25NZXNzYWdlcyhtZXNzYWdlYW5hbHl6ZXIuZ2V0QXNzZXJ0aW9uV2FybmluZ3MoKSwgVmFsaWRhdGlvbk1lc3NhZ2UuU0VWX0xPVykpOwotICAgICAgICBjcmVhdGVNYXJrZXJzKGZpbGUxLCBjb252ZXJ0VmFsaWRhdGlvbk1lc3NhZ2VzKG1lc3NhZ2VhbmFseXplci5nZXRBc3NlcnRpb25FcnJvcnMoKSwgVmFsaWRhdGlvbk1lc3NhZ2UuU0VWX05PUk1BTCkpOwotICAgICAgICBmaWxlLnNldFNlc3Npb25Qcm9wZXJ0eShWYWxpZGF0aW9uTWVzc2FnZS5FUlJPUl9NRVNTQUdFX01BUF9RVUFMSUZJRURfTkFNRSwgZ2V0T3JDcmVhdGVSZXBvcnRlcigpLmdldE1lc3NhZ2VzKCkpOwotCQl9Ci0gICAgfTsKLSAgIAotICAgIAotICAgICB0cnkKLSAgICB7Ci0gICAgICBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkucnVuKG9wLCBudWxsKTsKLSAgICAgaWYgKHNob3dEaWFsb2cpCi0gICAgICB7Ci0gICAgICAgIGlmIChleGNlcHRpb25DYXVnaHQpCi0gICAgICAgIHsKLSAgICAgICAgICBNZXNzYWdlRGlhbG9nLm9wZW5FcnJvcihEaXNwbGF5LmdldERlZmF1bHQoKS5nZXRBY3RpdmVTaGVsbCgpLCAKLSAgICAgICAgICAJCU1lc3NhZ2VzLkVSUk9SX1VOQUJMRV9UT19WQUxJREFURSwgCi0gICAgICAgICAgCQlNZXNzYWdlcy5FUlJPUl9QUk9CTEVNU19SRUFESU5HX1dTSU1TR19GSUxFKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChtZXNzYWdlYW5hbHl6ZXIuZ2V0QXNzZXJ0aW9uRXJyb3JzKCkuc2l6ZSgpICE9IDApCi0gICAgICAgIHsKLSAgICAgICAgICBNZXNzYWdlRGlhbG9nLm9wZW5FcnJvcihEaXNwbGF5LmdldERlZmF1bHQoKS5nZXRBY3RpdmVTaGVsbCgpLCAKLSAgICAgICAgICAJCU1lc3NhZ2VzLkVSUk9SX1ZBTElEQVRJT05fRkFJTEVELCAKLSAgICAgICAgICAJCU1lc3NhZ2VzLkVSUk9SX1RIRV9XU0lNU0dfRklMRV9JU19OT1RfVkFMSUQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKG1lc3NhZ2VhbmFseXplci5nZXRBc3NlcnRpb25XYXJuaW5ncygpLnNpemUoKSAhPSAwKQotICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICBTdHJpbmcgdGl0bGUgPSBNZXNzYWdlcy5JTkZPX1ZBTElEQVRJT05fU1VDRUVERUQ7Ci0gICAgICAgICAgU3RyaW5nIG1lc3NhZ2UgPSBNZXNzYWdlcy5XQVJOSU5HX1ZBTElEQVRJT05fV0FSTklOR1NfREVURUNURUQ7Ci0gICAgICAgICAgTWVzc2FnZURpYWxvZy5vcGVuSW5mb3JtYXRpb24oRGlzcGxheS5nZXREZWZhdWx0KCkuZ2V0QWN0aXZlU2hlbGwoKSwgdGl0bGUsIG1lc3NhZ2UpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyB0aXRsZSA9IE1lc3NhZ2VzLklORk9fVkFMSURBVElPTl9TVUNFRURFRDsKLSAgICAgICAgICBTdHJpbmcgbWVzc2FnZSA9IE1lc3NhZ2VzLklORk9fVEhFX1dTSU1TR19GSUxFX0lTX1ZBTElEOwotICAgICAgICAgIE1lc3NhZ2VEaWFsb2cub3BlbkluZm9ybWF0aW9uKERpc3BsYXkuZ2V0RGVmYXVsdCgpLmdldEFjdGl2ZVNoZWxsKCksIHRpdGxlLCBtZXNzYWdlKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBjYXRjaChFeGNlcHRpb24gZSl7fQotICB9Ci0gIAotICAvKioKLSAgICogQ3JlYXRlIGEgdmFsaWRhdGlvbiBtZXNzYWdlIGZyb20gdGhlIGV4Y2VwdGlvbiBhbmQgc2V2ZXJpdHkuCi0gICAqIAotICAgKiBAcGFyYW0gZXJyb3IgVGhlIGVycm9yLgotICAgKiBAcGFyYW0gc2V2ZXJpdHkgVGhlIHNldmVyaXR5LgotICAgKiBAcmV0dXJuIEFuIGVycm9yIG1lc3NhZ2UuCi0gICAqLwotICBwcm90ZWN0ZWQgVmFsaWRhdGlvbk1lc3NhZ2UgY3JlYXRlVmFsaWRhdGlvbk1lc3NhZ2VGb3JFeGNlcHRpb24oU0FYUGFyc2VFeGNlcHRpb24gZXJyb3IsIGludCBzZXZlcml0eSkKLSAgewotICAgIFN0cmluZyB1cmkgPSBlcnJvci5nZXRTeXN0ZW1JZCgpOwotICAgIGlmKHVyaSA9PSBudWxsKQotICAgIHsKLSAgICAgIHVyaSA9IGVycm9yLmdldFB1YmxpY0lkKCk7Ci0gICAgfQotICAgIFZhbGlkYXRpb25NZXNzYWdlIHZhbGlkYXRpb25NZXNzYWdlID0gbmV3IFZhbGlkYXRpb25NZXNzYWdlKGVycm9yLmdldE1lc3NhZ2UoKSwgZXJyb3IuZ2V0TGluZU51bWJlcigpLCBlcnJvci5nZXRDb2x1bW5OdW1iZXIoKSwgdXJpKTsKLSAgICB2YWxpZGF0aW9uTWVzc2FnZS5zZXRTZXZlcml0eShzZXZlcml0eSk7Ci0gICAgcmV0dXJuIHZhbGlkYXRpb25NZXNzYWdlOwotICB9Ci0KLQotICAvKioKLSAgICogQ3JlYXRlIGEgdmFsaWRhdGlvbiBtZXNzYWdlIGZyb20gdGhlIGV4Y2VwdGlvbiBhbmQgc2V2ZXJpdHkuCi0gICAqIAotICAgKiBAcGFyYW0gZXJyb3IgVGhlIGVycm9yLgotICAgKiBAcGFyYW0gc2V2ZXJpdHkgVGhlIHNldmVyaXR5LgotICAgKiBAcmV0dXJuIEFuIGVycm9yIG1lc3NhZ2UuCi0gICAqLwotICBwcm90ZWN0ZWQgVmFsaWRhdGlvbk1lc3NhZ2UgY3JlYXRlVmFsaWRhdGlvbk1lc3NhZ2VGb3JFeGNlcHRpb24oV1NJQW5hbHl6ZXJFeGNlcHRpb24gZXJyb3IsIGludCBzZXZlcml0eSkKLSAgewotICAgIFZhbGlkYXRpb25NZXNzYWdlIHZhbGlkYXRpb25NZXNzYWdlID0gbmV3IFZhbGlkYXRpb25NZXNzYWdlKGVycm9yLmdldE1lc3NhZ2UoKSwgMCwgMCk7Ci0gICAgdmFsaWRhdGlvbk1lc3NhZ2Uuc2V0U2V2ZXJpdHkoc2V2ZXJpdHkpOwotICAgIHJldHVybiB2YWxpZGF0aW9uTWVzc2FnZTsKLSAgfQotIAotICBwdWJsaWMgVmFsaWRhdGlvbk1lc3NhZ2VbXSAgY29udmVydFZhbGlkYXRpb25NZXNzYWdlcyhMaXN0IGxpc3QsIGludCBtYXJrZXIpCi0gIHsKLQlpZiAobGlzdCAhPSBudWxsKQotCXsKLQkgIGludCBzaXplID0gbGlzdC5zaXplKCk7Ci0JICBWYWxpZGF0aW9uTWVzc2FnZVtdIG1lc3NhZ2VzID0gbmV3IFZhbGlkYXRpb25NZXNzYWdlW3NpemVdOwotCSAKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQotICAgICAgewotICAgICAgICBBc3NlcnRpb25FcnJvciBhc3NlcnRpb25FcnJvciA9IChBc3NlcnRpb25FcnJvcikgbGlzdC5nZXQoaSk7Ci0KLSAgICAgICAgaW50IG4gPSBhc3NlcnRpb25FcnJvci5nZXRMaW5lKCk7Ci0gICAgICAgIGludCBjID0gYXNzZXJ0aW9uRXJyb3IuZ2V0Q29sdW1uKCk7Ci0gICAgICAgIFN0cmluZyBtID0gV1NJQ29uc3RhbnRzLldTSV9QUkVGSVggKyAiKCIgKyBhc3NlcnRpb25FcnJvci5nZXRBc3NlcnRpb25JRCgpKyAiKSAiICsgYXNzZXJ0aW9uRXJyb3IuZ2V0RXJyb3JNZXNzYWdlKCk7Ci0gICAgICAKLSAgICAgICAgVmFsaWRhdGlvbk1lc3NhZ2UgbWVzc2FnZSA9IG5ldyBWYWxpZGF0aW9uTWVzc2FnZShtLG4sIGMpOwotICAgICAgICBtZXNzYWdlLnNldFNldmVyaXR5KG1hcmtlcik7Ci0gICAgICAgIG1lc3NhZ2VzW2ldID0gbWVzc2FnZTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBtZXNzYWdlczsKLSAgICB9Ci0JcmV0dXJuIG5ldyBWYWxpZGF0aW9uTWVzc2FnZVswXTsKLSAgfQotCi0gLyoqCi0gIHByb3RlY3RlZCBJUmVwb3J0ZXIgZ2V0T3JDcmVhdGVSZXBvcnRlcigpCi0gIHsKLSAgICBpZiAocmVwb3J0ZXIgPT0gbnVsbCkKLSAgICB7IAotICAgICAgcmVwb3J0ZXIgPSBuZXcgUmVwb3J0ZXIoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlcG9ydGVyOwotICB9Ci0gICovCi0gIC8vIE15IEltcGxlbWVudGF0aW9uIG9mIElSZXBvcnRlcgotICBjbGFzcyBSZXBvcnRlciBpbXBsZW1lbnRzIElSZXBvcnRlciAKLSAgewotCUxpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQotCXB1YmxpYyBSZXBvcnRlcigpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgSU1lc3NhZ2VBY2Nlc3MgZ2V0TWVzc2FnZUFjY2VzcygpIHsKLQkJcmV0dXJuIG51bGw7IC8vIGRvIG5vdCBuZWVkIHRvIGltcGxlbWVudAotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzQ2FuY2VsbGVkKCkgewotCQlyZXR1cm4gZmFsc2U7IC8vIGRvIG5vdCBuZWVkIHRvIGltcGxlbWVudAotCX0KLQotCXB1YmxpYyB2b2lkIHJlbW92ZUFsbE1lc3NhZ2VzKElWYWxpZGF0b3Igb3JpZ2luLCBPYmplY3Qgb2JqZWN0KSB7IC8vIGRvCi0JCQkJCQkJCQkJCQkJCQkJCQkvLyBub3QKLQkJCQkJCQkJCQkJCQkJCQkJCS8vIG5lZWQKLQkJCQkJCQkJCQkJCQkJCQkJCS8vIHRvCi0JCQkJCQkJCQkJCQkJCQkJCQkvLyBpbXBsZW1lbnQKLQl9Ci0KLQlwdWJsaWMgdm9pZCByZW1vdmVBbGxNZXNzYWdlcyhJVmFsaWRhdG9yIG9yaWdpbikgey8vIGRvIG5vdCBuZWVkIHRvCi0JCQkJCQkJCQkJCQkJCS8vIGltcGxlbWVudAotCX0KLQotCXB1YmxpYyB2b2lkIHJlbW92ZU1lc3NhZ2VTdWJzZXQoSVZhbGlkYXRvciB2YWxpZGF0b3IsIE9iamVjdCBvYmosIFN0cmluZyBncm91cE5hbWUpIHsvLyBkbwotCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkvLyBub3QKLQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJLy8gbmVlZAotCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkvLyB0bwotCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkvLyBpbXBsZW1lbnQKLQl9Ci0KLQlwdWJsaWMgTGlzdCBnZXRNZXNzYWdlcygpIHsKLQkJcmV0dXJuIGxpc3Q7Ci0JfQotCi0JcHVibGljIHZvaWQgYWRkTWVzc2FnZShJVmFsaWRhdG9yIG9yaWdpbiwgSU1lc3NhZ2UgbWVzc2FnZSkgdGhyb3dzIE1lc3NhZ2VMaW1pdEV4Y2VwdGlvbiAKLQl7Ci0JCWxpc3QuYWRkKG1lc3NhZ2UpOwotCX0KLQotCXB1YmxpYyB2b2lkIGRpc3BsYXlTdWJ0YXNrKElWYWxpZGF0b3IgdmFsaWRhdG9yLCBJTWVzc2FnZSBtZXNzYWdlKSAKLQl7Ci0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQkJCi0JfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvYWN0aW9ucy9XU0lWYWxpZGF0aW9uVUlNZXNzYWdlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL2FjdGlvbnMvV1NJVmFsaWRhdGlvblVJTWVzc2FnZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzAxYTJhNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvYWN0aW9ucy9XU0lWYWxpZGF0aW9uVUlNZXNzYWdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ29tbW9uIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLQotLyoqCi0gKiBTdHJpbmdzIHVzZWQgYnkgWE1MIFZhbGlkYXRpb24KLSAqLwotcHVibGljIGNsYXNzIFdTSVZhbGlkYXRpb25VSU1lc3NhZ2VzIGV4dGVuZHMgTkxTIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSAib3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbC5hY3Rpb25zLndzaXZhbGlkYXRpb24iOyAvLyROT04tTkxTLTEkCi0KLQlwcml2YXRlIFdTSVZhbGlkYXRpb25VSU1lc3NhZ2VzKCkgewotCQkvLyBjYW5ub3QgY3JlYXRlIG5ldyBpbnN0YW5jZQotCX0KLQotCXN0YXRpYyB7Ci0JCS8vIGluaXRpYWxpemUgcmVzb3VyY2UgYnVuZGxlCi0JCU5MUy5pbml0aWFsaXplTWVzc2FnZXMoQlVORExFX05BTUUsIFdTSVZhbGlkYXRpb25VSU1lc3NhZ2VzLmNsYXNzKTsKLQl9Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgX1VJX1NBVkVfRElSVFlfRklMRV9NRVNTQUdFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIF9VSV9TQVZFX0RJUlRZX0ZJTEVfVElUTEU7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvYWN0aW9ucy9hY3Rpb25EZWxlZ2F0ZXMvUmVxdWVzdEhhbmRsZXJJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvYWN0aW9ucy9hY3Rpb25EZWxlZ2F0ZXMvUmVxdWVzdEhhbmRsZXJJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyNWY2MDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL2FjdGlvbnMvYWN0aW9uRGVsZWdhdGVzL1JlcXVlc3RIYW5kbGVySW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjI2ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbC5hY3Rpb25zLmFjdGlvbkRlbGVnYXRlczsKLQotaW1wb3J0IGphdmEudXRpbC5EYXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5SZXF1ZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuUmVxdWVzdEhhbmRsZXI7Ci0KLS8qKgotICogSW1wbGVtZW50cyB0aGUgUmVxdWVzdEhhbmRsZXIgaW50ZXJmYWNlIHdoaWNoIHJlcHJlc2VudHMgYSBUQ1AvSVAKLSAqIHJlcXVlc3QgbWFkZSBiZXR3ZWVuIHRoZSBjbGllbnQgYW5kIHRoZSBzZXJ2ZXIuIEVhY2ggcmVxdWVzdCAKLSAqIHJlcHJlc2VudHMgYSByZXF1ZXN0LXJlc3BvbnNlIHBhaXIsIHdoZXJlIHRoZSByZXF1ZXN0IGlzIGZyb20gCi0gKiBjbGllbnQgLT4gc2VydmVyLCBhbmQgdGhlIHJlc3BvbnNlIGlzIGZyb20gc2VydmVyIC0+IGNsaWVudC4KLSAqIAotICogQGF1dGhvciBsYXV6b25kCi0gKi8KLXB1YmxpYyBjbGFzcyBSZXF1ZXN0SGFuZGxlckltcGwgaW1wbGVtZW50cyBSZXF1ZXN0SGFuZGxlciAKLXsKLQkvKioKLQkgKiBUaGUgSFRUUCBoZWFkZXIgb2YgdGhlIHJlcXVlc3QgcG9ydGlvbiBvZiB0aGlzIHJlcXVlc3QuCi0JICovCi0JcHJvdGVjdGVkIGJ5dGVbXSByZXF1ZXN0SGVhZGVyOwotCQotCS8qKgotCSAqIFRoZSBIVFRQIGhlYWRlciBvZiB0aGUgcmVzcG9uc2UgcG9ydGlvbiBvZiB0aGlzIHJlcXVlc3QuCi0JICovCi0JcHJvdGVjdGVkIGJ5dGVbXSByZXNwb25zZUhlYWRlcjsKLQotCS8qKgotCSAqIFRoZSBIVFRQIGJvZHkgb2YgdGhlIHJlcXVlc3QgcG9ydGlvbiBvZiB0aGlzIHJlcXVlc3QuCi0JICovCi0JcHJvdGVjdGVkIGJ5dGVbXSByZXF1ZXN0Q29udGVudDsKLQotCS8qKgotCSAqIFRoZSBIVFRQIGJvZHkgb2YgdGhlIHJlc3BvbnNlIHBvcnRpb24gb2YgdGhpcyByZXF1ZXN0LgotCSAqLwotCXByb3RlY3RlZCBieXRlW10gcmVzcG9uc2VDb250ZW50OwotCi0JLyoqCi0JICogVGhlIHRpbWUgdGhpcyByZXF1ZXN0IHdhcyBtYWRlLgotCSAqLwotCXByb3RlY3RlZCBEYXRlIGRhdGUgPSBudWxsOwotCQotCS8qKgotCSAqIFRoZSBsb2NhbCAoY2xpZW50KSBwb3J0LgotCSAqLwotCXByb3RlY3RlZCBpbnQgbG9jYWxQb3J0ID0gMDsKLQotCS8qKgotCSAqIFRoZSByZW1vdGUgKHNlcnZlcikgcG9ydC4KLQkgKi8KLQlwcm90ZWN0ZWQgaW50IHJlbW90ZVBvcnQgPSAwOwotCQotCS8qKgotCSAqIFRoZSByZW1vdGUgKHNlcnZlcikgaG9zdC4KLQkgKi8KLQlwcm90ZWN0ZWQgU3RyaW5nIHJlbW90ZUhvc3QgPSBudWxsOwotCi0JLyoqCi0JICogVGhlIHNlcnZlcidzIHJlc3BvbnNlIHRpbWUgaW4gbWlsbGlzZWNvbmRzLiAKLQkgKi8KLQlwcm90ZWN0ZWQgbG9uZyByZXNwb25zZVRpbWUgPSAwOwotCQotCS8qKgotCSAqIENvbnN0cnVjdG9yLgotCSAqIEBwYXJhbSByZXF1ZXN0IGEgVENQL0lQIHJlcXVlc3QKLQkgKi8KLQlSZXF1ZXN0SGFuZGxlckltcGwoUmVxdWVzdCByZXF1ZXN0KQotCXsKLQkgIGlmIChyZXF1ZXN0ICE9IG51bGwpCi0JICB7Ci0JCXRoaXMucmVxdWVzdEhlYWRlciA9IHJlcXVlc3QuZ2V0UmVxdWVzdChSZXF1ZXN0LlRSQU5TUE9SVCk7Ci0JCXRoaXMucmVxdWVzdENvbnRlbnQgPSByZXF1ZXN0LmdldFJlcXVlc3QoUmVxdWVzdC5DT05URU5UKTsKLQkJdGhpcy5yZXNwb25zZUhlYWRlciA9IHJlcXVlc3QuZ2V0UmVzcG9uc2UoUmVxdWVzdC5UUkFOU1BPUlQpOwotCQl0aGlzLnJlc3BvbnNlQ29udGVudCA9IHJlcXVlc3QuZ2V0UmVzcG9uc2UoUmVxdWVzdC5DT05URU5UKTsKLQkJdGhpcy5kYXRlID0gcmVxdWVzdC5nZXREYXRlKCk7Ci0JCXRoaXMubG9jYWxQb3J0ID0gcmVxdWVzdC5nZXRMb2NhbFBvcnQoKTsKLQkJdGhpcy5yZW1vdGVQb3J0ID0gcmVxdWVzdC5nZXRSZW1vdGVQb3J0KCk7Ci0JCXRoaXMucmVtb3RlSG9zdCA9IHJlcXVlc3QuZ2V0UmVtb3RlSG9zdCgpOwotCQl0aGlzLnJlc3BvbnNlVGltZSA9IHJlcXVlc3QuZ2V0UmVzcG9uc2VUaW1lKCk7Ci0JICB9Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuUmVxdWVzdEhhbmRsZXIjZ2V0UmVxdWVzdEhlYWRlcigpCi0JICovCi0JcHVibGljIGJ5dGVbXSBnZXRSZXF1ZXN0SGVhZGVyKCkgCi0JewotCQlyZXR1cm4gdGhpcy5yZXF1ZXN0SGVhZGVyOwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuUmVxdWVzdEhhbmRsZXIjc2V0UmVxdWVzdEhlYWRlcihieXRlW10pCi0JICovCi0JcHVibGljIHZvaWQgc2V0UmVxdWVzdEhlYWRlcihieXRlW10gcmVxdWVzdEhlYWRlcikgCi0JewotCQl0aGlzLnJlcXVlc3RIZWFkZXIgPSByZXF1ZXN0SGVhZGVyOwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuUmVxdWVzdEhhbmRsZXIjZ2V0UmVzcG9uc2VIZWFkZXIoKQotCSAqLwotCXB1YmxpYyBieXRlW10gZ2V0UmVzcG9uc2VIZWFkZXIoKSAKLQl7Ci0JCXJldHVybiB0aGlzLnJlc3BvbnNlSGVhZGVyOwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuUmVxdWVzdEhhbmRsZXIjc2V0UmVzcG9uc2VIZWFkZXIoYnl0ZVtdKQotCSAqLwotCXB1YmxpYyB2b2lkIHNldFJlc3BvbnNlSGVhZGVyKGJ5dGVbXSByZXNwb25zZUhlYWRlcikgCi0JewotCQl0aGlzLnJlc3BvbnNlSGVhZGVyID0gcmVzcG9uc2VIZWFkZXI7Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5SZXF1ZXN0SGFuZGxlciNnZXRSZXF1ZXN0Q29udGVudCgpCi0JICovCi0JcHVibGljIGJ5dGVbXSBnZXRSZXF1ZXN0Q29udGVudCgpIAotCXsKLQkJcmV0dXJuIHRoaXMucmVxdWVzdENvbnRlbnQ7Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5SZXF1ZXN0SGFuZGxlciNzZXRSZXNwb25zZUNvbnRlbnQoYnl0ZVtdKQotCSAqLwotCXB1YmxpYyB2b2lkIHNldFJlc3BvbnNlQ29udGVudChieXRlW10gcmVzcG9uc2VDb250ZW50KSAKLQl7Ci0JCXRoaXMucmVzcG9uc2VDb250ZW50ID0gcmVzcG9uc2VDb250ZW50OwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuUmVxdWVzdEhhbmRsZXIjZ2V0UmVzcG9uc2VDb250ZW50KCkKLQkgKi8KLQlwdWJsaWMgYnl0ZVtdIGdldFJlc3BvbnNlQ29udGVudCgpIAotCXsKLQkJcmV0dXJuIHRoaXMucmVzcG9uc2VDb250ZW50OwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuUmVxdWVzdEhhbmRsZXIjc2V0UmVxdWVzdENvbnRlbnQoYnl0ZVtdKQotCSAqLwotCXB1YmxpYyB2b2lkIHNldFJlcXVlc3RDb250ZW50KGJ5dGVbXSByZXF1ZXN0Q29udGVudCkgCi0JewotCQl0aGlzLnJlcXVlc3RDb250ZW50ID0gcmVxdWVzdENvbnRlbnQ7Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5SZXF1ZXN0SGFuZGxlciNnZXREYXRlKCkKLQkgKi8KLQlwdWJsaWMgRGF0ZSBnZXREYXRlKCkgCi0JewotCQlyZXR1cm4gdGhpcy5kYXRlOwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuUmVxdWVzdEhhbmRsZXIjc2V0RGF0ZShqYXZhLnV0aWwuRGF0ZSkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXREYXRlKERhdGUgZGF0ZSkgCi0JewotCQl0aGlzLmRhdGUgPSBkYXRlOwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuUmVxdWVzdEhhbmRsZXIjZ2V0TG9jYWxQb3J0KCkKLQkgKi8KLQlwdWJsaWMgaW50IGdldExvY2FsUG9ydCgpIAotCXsKLQkJcmV0dXJuIHRoaXMubG9jYWxQb3J0OwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuUmVxdWVzdEhhbmRsZXIjc2V0TG9jYWxQb3J0KGludCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRMb2NhbFBvcnQoaW50IGxvY2FsUG9ydCkgCi0JewotCQl0aGlzLmxvY2FsUG9ydCA9IGxvY2FsUG9ydDsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLlJlcXVlc3RIYW5kbGVyI2dldFJlbW90ZVBvcnQoKQotCSAqLwotCXB1YmxpYyBpbnQgZ2V0UmVtb3RlUG9ydCgpIAotCXsKLQkJcmV0dXJuIHRoaXMucmVtb3RlUG9ydDsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLlJlcXVlc3RIYW5kbGVyI3NldFJlbW90ZVBvcnQoaW50KQotCSAqLwotCXB1YmxpYyB2b2lkIHNldFJlbW90ZVBvcnQoaW50IHJlbW90ZVBvcnQpIAotCXsKLQkJdGhpcy5yZW1vdGVQb3J0ID0gcmVtb3RlUG9ydDsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLlJlcXVlc3RIYW5kbGVyI2dldFJlbW90ZUhvc3QoKQotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0UmVtb3RlSG9zdCgpIAotCXsKLQkJcmV0dXJuIHRoaXMucmVtb3RlSG9zdDsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLlJlcXVlc3RIYW5kbGVyI3NldFJlbW90ZUhvc3QoamF2YS5sYW5nLlN0cmluZykKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRSZW1vdGVIb3N0KFN0cmluZyByZW1vdGVIb3N0KSAKLQl7Ci0JCXRoaXMucmVtb3RlSG9zdCA9IHJlbW90ZUhvc3Q7Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5SZXF1ZXN0SGFuZGxlciNnZXRSZXNwb25zZVRpbWUoKQotCSAqLwotCXB1YmxpYyBsb25nIGdldFJlc3BvbnNlVGltZSgpIAotCXsKLQkJcmV0dXJuIHRoaXMucmVzcG9uc2VUaW1lOwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuUmVxdWVzdEhhbmRsZXIjc2V0UmVzcG9uc2VUaW1lKGxvbmcpCi0JICovCi0JcHVibGljIHZvaWQgc2V0UmVzcG9uc2VUaW1lKGxvbmcgcmVzcG9uc2VUaW1lKSAKLQl7Ci0JCXRoaXMucmVzcG9uc2VUaW1lID0gcmVzcG9uc2VUaW1lOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9hY3Rpb25zL2FjdGlvbkRlbGVnYXRlcy9WYWxpZGF0ZVdTSUxvZ0ZpbGVBY3Rpb25EZWxlZ2F0ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL2FjdGlvbnMvYWN0aW9uRGVsZWdhdGVzL1ZhbGlkYXRlV1NJTG9nRmlsZUFjdGlvbkRlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjNDEwZTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL2FjdGlvbnMvYWN0aW9uRGVsZWdhdGVzL1ZhbGlkYXRlV1NJTG9nRmlsZUFjdGlvbkRlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsLmFjdGlvbnMuYWN0aW9uRGVsZWdhdGVzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkRlbGVnYXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbC5XU0lNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwuYWN0aW9ucy5XU0lWYWxpZGF0ZUFjdGlvbjsKLQotCi0vKioKLSAqIEFjdGlvbiBkZWxlZ2F0ZSBmb3IgdmFsaWRhdGluZyBhIFdTLUkgbG9nIGZpbGUuCi0gKiAKLSAqIEBhdXRob3IgRGF2aWQgTGF1em9uLCBJQk0KLSAqIEBhdXRob3IgTGF3cmVuY2UgTWFuZGVsLCBJQk0KLSAqLwotcHVibGljIGNsYXNzIFZhbGlkYXRlV1NJTG9nRmlsZUFjdGlvbkRlbGVnYXRlIGltcGxlbWVudHMgSUFjdGlvbkRlbGVnYXRlCi17Ci0gIC8qKgotICAgKiBUaGUgY3VycmVudCBzZWxlY3Rpb24sIG9yIG51bGwgaWYgdGhlcmUgaXMgbm8gc2VsZWN0aW9uLgotICAgKi8KLSAgSVNlbGVjdGlvbiBzZWxlY3Rpb247Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKi8KLSAgcHVibGljIFZhbGlkYXRlV1NJTG9nRmlsZUFjdGlvbkRlbGVnYXRlKCkKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkRlbGVnYXRlI3J1bihvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJ1bihJQWN0aW9uIGFjdGlvbikKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIGlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikKLSAgICAgIHsKLSAgICAgICAgT2JqZWN0ICBvYmogPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuZ2V0Rmlyc3RFbGVtZW50KCk7Ci0gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJRmlsZSkKLSAgICAgICAgewotICAgICAgICAgIElGaWxlIGZpbGUgPSAoSUZpbGUpb2JqOwotICAgICAgICAgIFdTSU1lc3NhZ2VWYWxpZGF0b3IgbWVzc2FnZVZhbGlkYXRvciA9IG5ldyBXU0lNZXNzYWdlVmFsaWRhdG9yKCk7Ci0gICAgICAgICAgV1NJVmFsaWRhdGVBY3Rpb24gdmFsaWRhdGVBY3Rpb24gPSBuZXcgV1NJVmFsaWRhdGVBY3Rpb24oZmlsZSwgdHJ1ZSk7Ci0gICAgICAgICAgdmFsaWRhdGVBY3Rpb24uc2V0VmFsaWRhdG9yKG1lc3NhZ2VWYWxpZGF0b3IpOwotICAgICAgICAgIHZhbGlkYXRlQWN0aW9uLnJ1bigpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklBY3Rpb25EZWxlZ2F0ZSNzZWxlY3Rpb25DaGFuZ2VkKG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uLCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb24pCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKElBY3Rpb24gYWN0aW9uLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikKLSAgewotICAgIHRoaXMuc2VsZWN0aW9uID0gc2VsZWN0aW9uOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvYWN0aW9ucy9hY3Rpb25EZWxlZ2F0ZXMvVmFsaWRhdGVXU0lQcm9maWxlQWN0aW9uRGVsZWdhdGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9hY3Rpb25zL2FjdGlvbkRlbGVnYXRlcy9WYWxpZGF0ZVdTSVByb2ZpbGVBY3Rpb25EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMWJhZTViLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9hY3Rpb25zL2FjdGlvbkRlbGVnYXRlcy9WYWxpZGF0ZVdTSVByb2ZpbGVBY3Rpb25EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwuYWN0aW9ucy5hY3Rpb25EZWxlZ2F0ZXM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmREaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5SZXF1ZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5pbnRlcm5ldC5tb25pdG9yLnVpLmludGVybmFsLnByb3Zpc2lvbmFsLk1vbml0b3JVSUNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5Mb2dCdWlsZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuUmVxdWVzdEhhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsLndpemFyZHMuVmFsaWRhdGlvbldpemFyZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsLldTSVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklWaWV3QWN0aW9uRGVsZWdhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVZpZXdQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuQ29udGFpbmVyR2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTG9nOwotCi0vKioKLSAqIEFjdGlvbiBkZWxlZ2F0ZSBmb3IgdGhlIFdTLUkgdmFsaWRhdG9yLgotICogCi0gKiBAYXV0aG9yIERhdmlkIExhdXpvbiwgSUJNCi0gKiBAYXV0aG9yIExhd3JlbmNlIE1hbmRlbCwgSUJNCi0gKi8KLXB1YmxpYyBjbGFzcyBWYWxpZGF0ZVdTSVByb2ZpbGVBY3Rpb25EZWxlZ2F0ZSBpbXBsZW1lbnRzIElWaWV3QWN0aW9uRGVsZWdhdGUKLXsKLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IFdTLUkgTWVzc2FnZSBMb2cgZmlsZW5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX0xPR19GSUxFTkFNRSA9ICJsb2cud3NpbXNnIjsKLQotICAvKioKLSAgICogVGhlIEhUVFAgcHJvdG9jb2wuCi0gICAqLwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBIVFRQID0gImh0dHA6Ly8iOwotICAKLSAgCi0gIC8qKgotICAgKiBUaGUgZGVmYXVsdCB0YWcgZm9yIFdTREwgbG9jYXRpb25zLgotICAgKi8KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgV1NETCA9ICI/V1NETCI7Ci0gIAotICAvKioKLSAgICogVGhlIGN1cnJlbnQgc2VsZWN0aW9uLCBvciBudWxsIGlmIHRoZXJlIGlzIG5vIHNlbGVjdGlvbi4KLSAgICovCi0gIElTZWxlY3Rpb24gc2VsZWN0aW9uOwotCi0gIC8qKgotICAgKiBUaGUgbGlzdCBvZiBtZXNzYWdlcyBpbiB0aGUgZm9ybSBvZiByZXF1ZXN0LXJlc3BvbnNlIHBhaXJzLgotICAgKi8KLSAgUmVxdWVzdFtdIHJlcXVlc3RSZXNwb25zZXM7Ci0KLSAgLyoqCi0gICAqIFRoZSB2aWV3IHRoYXQgcHJvdmlkZXMgdGhlIGNvbnRleHQgZm9yIHRoaXMgZGVsZWdhdGUuCi0gICAqLwotICBJVmlld1BhcnQgdmlldzsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqLwotICBwdWJsaWMgVmFsaWRhdGVXU0lQcm9maWxlQWN0aW9uRGVsZWdhdGUoKQotICB7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS51aS5JVmlld0FjdGlvbkRlbGVnYXRlI2luaXQob3JnLmVjbGlwc2UudWkuSVZpZXdQYXJ0KQotICAgKi8KLSAgcHVibGljIHZvaWQgaW5pdChJVmlld1BhcnQgdmlldykKLSAgewotICAgIHRoaXMudmlldyA9IHZpZXc7Ci0gIH0KLQotICAvKiogCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkRlbGVnYXRlI3J1bihvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJ1bihJQWN0aW9uIGFjdGlvbikKLSAgewotICAgIFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBvcGVyYXRpb24gPSBuZXcgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uKCkKLSAgICB7Ci0gICAgICBwcm90ZWN0ZWQgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yKQotICAgICAgdGhyb3dzIENvcmVFeGNlcHRpb24KLSAgICAgIHsKLSAgICAgICAgdmFsaWRhdGUocHJvZ3Jlc3NNb25pdG9yKTsKLSAgICAgIH0KLSAgICB9OwotICAgIAotICAgIHRyeQotICAgIHsKLSAgICAgIG9wZXJhdGlvbi5ydW4obnVsbCk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZXgpCi0gICAgewotICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSB2YWxpZGF0ZSBhY3Rpb24uCi0gICAqIAotICAgKiBAcGFyYW0gcHJvZ3Jlc3NNb25pdG9yCi0gICAqLwotICBwdWJsaWMgdm9pZCB2YWxpZGF0ZShJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHJlcXVlc3RSZXNwb25zZXMgPSBNb25pdG9yVUlDb3JlLmdldFJlcXVlc3RzKCk7Ci0gICAgICBTaGVsbCBzaGVsbCA9IERpc3BsYXkuZ2V0Q3VycmVudCgpLmdldEFjdGl2ZVNoZWxsKCk7Ci0gICAgICBpZiAoKHJlcXVlc3RSZXNwb25zZXMgIT0gbnVsbCkgJiYgKHJlcXVlc3RSZXNwb25zZXMubGVuZ3RoID4gMCkpCi0gICAgICB7Ci0gICAgICAgIFZhbGlkYXRpb25XaXphcmQgdmFsaWRhdGVXaXphcmQgPSBuZXcgVmFsaWRhdGlvbldpemFyZChERUZBVUxUX0xPR19GSUxFTkFNRSk7Ci0gICAgICAgIExpc3Qgd3NkbGxvY3MgPSBuZXcgVmVjdG9yKCk7Ci0KLSAgICAgICAJZm9yIChpbnQgaT0wOyBpPHJlcXVlc3RSZXNwb25zZXMubGVuZ3RoOyBpKyspCi0gICAgICAJewotICAgICAgCSAgUmVxdWVzdCByZXFyZXNwID0gcmVxdWVzdFJlc3BvbnNlc1tpXTsKLSAgICAgIAkgIFN0cmluZyByZW1vdGVob3N0ID0gcmVxcmVzcC5nZXRSZW1vdGVIb3N0KCk7Ci0gICAgICAJICBpbnQgcmVtb3RlcG9ydCA9IHJlcXJlc3AuZ2V0UmVtb3RlUG9ydCgpOwotICAgICAgCSAgU3RyaW5nIHJlbW90ZWxhYmVsID0gcmVxcmVzcC5nZXROYW1lKCk7Ci0gICAgICAJICBTdHJpbmcgbG9jYXRpb24gPSBIVFRQICsgcmVtb3RlaG9zdCArICI6IiArIHJlbW90ZXBvcnQgKyByZW1vdGVsYWJlbCArIFdTREw7Ci0gICAgICAJICBpZighd3NkbGxvY3MuY29udGFpbnMobG9jYXRpb24pKQotICAgICAgCSAgewotICAgICAgCSAgICB3c2RsbG9jcy5hZGQobG9jYXRpb24pOwotICAgICAgCSAgfQotICAgICAgCX0KLSAgICAgIAotICAgICAgICB2YWxpZGF0ZVdpemFyZC5zZXRXU0RMTG9jYXRpb25zKChTdHJpbmdbXSl3c2RsbG9jcy50b0FycmF5KG5ldyBTdHJpbmdbd3NkbGxvY3Muc2l6ZSgpXSkpOwotICAgICAgICBXaXphcmREaWFsb2cgd2l6YXJkRGlhbG9nID0gbmV3IFdpemFyZERpYWxvZyhzaGVsbCwgdmFsaWRhdGVXaXphcmQpOwotICAgICAgICB3aXphcmREaWFsb2cuY3JlYXRlKCk7Ci0KLSAgICAgICAgaW50IHJlc3VsdCA9IHdpemFyZERpYWxvZy5vcGVuKCk7Ci0KLSAgICAgICAgaWYgKHZhbGlkYXRlV2l6YXJkLmlzVmFsaWQoKSAmJiAocmVzdWx0ICE9IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3cuQ0FOQ0VMKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIElmIHRoZSBjb250YWluZXIgZG9lc24ndCBleGlzdCwgY3JlYXRlIGl0IG5vdwotICAgICAgICAgIGNoZWNrQW5kQ3JlYXRlQ29udGFpbmVyKHZhbGlkYXRlV2l6YXJkLmdldENvbnRhaW5lckZ1bGxQYXRoKCkpOwotCi0gICAgICAgICAgSUZpbGUgZmlsZSA9IHZhbGlkYXRlV2l6YXJkLmdldEZpbGUoKTsKLSAgICAgICAgICBMb2dCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgTG9nQnVpbGRlcihmaWxlKTsKLSAgICAgICAgICBMb2cgbG9nID0gYnVpbGRlci5idWlsZExvZyhnZXRSZXF1ZXN0SGFuZGxlcnMocmVxdWVzdFJlc3BvbnNlcykpOwotCi0gICAgICAgICAgYnVpbGRlci53cml0ZUxvZyhsb2cpOwotICAgICAgICAgIGZpbGUucmVmcmVzaExvY2FsKDEsIHByb2dyZXNzTW9uaXRvcik7Ci0gICAgICAgIAotICAgICAgICAgIFdTSVZhbGlkYXRvciBtZXNzYWdlVmFsaWRhdG9yID0gbmV3IFdTSVZhbGlkYXRvcigpOwotICAgICAgICAgIGlmKHZhbGlkYXRlV2l6YXJkLmluY2x1ZGVXU0RMRmlsZSgpKQotICAgICAgICAgIHsJCi0gICAgICAgIAlTdHJpbmcgd3NkbGZpbGUgPSB2YWxpZGF0ZVdpemFyZC5nZXRXU0RMRmlsZSgpOwotICAgICAgICAJU3RyaW5nIG5hbWUgPSB2YWxpZGF0ZVdpemFyZC5nZXRFbGVtZW50TmFtZSgpOwotICAgICAgICAJU3RyaW5nIG5hbWVzcGFjZSA9IHZhbGlkYXRlV2l6YXJkLmdldE5hbWVzcGFjZSgpOwotICAgICAgICAJU3RyaW5nIHBhcmVudG5hbWUgPSB2YWxpZGF0ZVdpemFyZC5nZXRQYXJlbnROYW1lKCk7Ci0gICAgICAgIAlTdHJpbmcgdHlwZSA9IHZhbGlkYXRlV2l6YXJkLmdldFR5cGUoKTsKLSAgICAgICAgCW1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGUoZmlsZSwgd3NkbGZpbGUsIG5hbWUsIG5hbWVzcGFjZSwgcGFyZW50bmFtZSwgdHlwZSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7CQotICAgICAgICAJbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZShmaWxlKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gbm8gYXZhaWxhYmxlIG1lc3NhZ2VzIHRvIHZhbGlkYXRlCi0gICAgCSAgU3RyaW5nIHRpdGxlID0gTWVzc2FnZXMuQUNUSU9OX1dTSV9WQUxJREFUT1I7Ci0gICAgICAgICAgU3RyaW5nIG1lc3NhZ2UgPSBNZXNzYWdlcy5JTkZPX05PX01FU1NBR0VTX1RPX1ZBTElEQVRFOwotICAgIAlNZXNzYWdlRGlhbG9nLm9wZW5JbmZvcm1hdGlvbihzaGVsbCwgdGl0bGUsIG1lc3NhZ2UpOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIExpc3QgZ2V0UmVxdWVzdEhhbmRsZXJzKFJlcXVlc3RbXSByZXF1ZXN0UmVzcG9uc2VzKSAKLSAgewotCUxpc3QgcmVxdWVzdEhhbmRsZXJzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBzaXplID0gcmVxdWVzdFJlc3BvbnNlcy5sZW5ndGg7Ci0JZm9yIChpbnQgaSA9IDA7IGk8c2l6ZTsgaSsrKQotCXsKLQkgIFJlcXVlc3QgcmVxdWVzdCA9IHJlcXVlc3RSZXNwb25zZXNbaV07Ci0JICBSZXF1ZXN0SGFuZGxlciBoYW5kbGVyID0gbmV3IFJlcXVlc3RIYW5kbGVySW1wbChyZXF1ZXN0KTsKLQkgIHJlcXVlc3RIYW5kbGVycy5hZGQoaGFuZGxlcik7Ci0JfQotCXJldHVybiByZXF1ZXN0SGFuZGxlcnM7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS51aS5JQWN0aW9uRGVsZWdhdGUjc2VsZWN0aW9uQ2hhbmdlZChvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbiwgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChJQWN0aW9uIGFjdGlvbiwgSVNlbGVjdGlvbiBzZWxlY3Rpb24pCi0gIHsKLSAgICB0aGlzLnNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKLSAgfQotIAotICAvKioKLSAgICogSWYgdGhlIGNvbnRhaW5lciBkb2Vzbid0IGV4aXN0IGZvciB0aGUgc2VsZWN0ZWQgSUZpbGUsIGNyZWF0ZSBpdCBub3cuCi0gICAqIAotICAgKiBAcGFyYW0gY29udGFpbmVyUGF0aCBUaGUgY29udGFpbmVyIGZvciB0aGUgc2VsZWN0ZWQgSUZpbGUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgY2hlY2tBbmRDcmVhdGVDb250YWluZXIoSVBhdGggY29udGFpbmVyUGF0aCkKLSAgewotICAgIElSZXNvdXJjZSByZXNvdXJjZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZmluZE1lbWJlcihjb250YWluZXJQYXRoKTsKLSAgICAKLSAgICAvLyBJZiB0aGUgY29udGFpbmVyIGRvZXNuJ3QgZXhpc3QgaW4gdGhlIHdvcmtzcGFjZSwgY3JlYXRlIGl0LgotICAgIGlmIChyZXNvdXJjZSA9PSBudWxsKSAKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgQ29udGFpbmVyR2VuZXJhdG9yIGdlbmVyYXRvciA9IG5ldyBDb250YWluZXJHZW5lcmF0b3IoY29udGFpbmVyUGF0aCk7Ci0gICAgICAgIGdlbmVyYXRvci5nZW5lcmF0ZUNvbnRhaW5lcihudWxsKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICB9Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvYWN0aW9ucy9pY29ucy93c2lfbG9nZmlsZV93aXoucG5nIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL2FjdGlvbnMvaWNvbnMvd3NpX2xvZ2ZpbGVfd2l6LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ4NWY4Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvYWN0aW9ucy9pY29ucy93c2lfbG9nZmlsZV93aXoucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL2FjdGlvbnMvd3NpdmFsaWRhdGlvbi5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL2FjdGlvbnMvd3NpdmFsaWRhdGlvbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGY3NDRhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC9hY3Rpb25zL3dzaXZhbGlkYXRpb24ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIyMgQ29uc3RhbnRzIGZvciBzdHJpbmdzICAKLQotIwotIyBEaXJ0eSBGaWxlIERpYWxvZyBSZWxhdGVkIE1lc3NhZ2VzCi0jCi1fVUlfU0FWRV9ESVJUWV9GSUxFX01FU1NBR0UgICAgICAgICA9IEFuIG9wZW4gZWRpdG9yIGNvbnRhaW5zIGNoYW5nZXMgdG8gdGhpcyBmaWxlIHRoYXQgaGF2ZSBub3QgYmVlbiBzYXZlZC4gRG8geW91IHdhbnQgdG8gc2F2ZSB0aGUgZmlsZSBiZWZvcmUgcnVubmluZyB2YWxpZGF0aW9uPyAoSWYgeW91IGRvIG5vdCBzYXZlIHRoZSBmaWxlIHRoZSBwcmV2aW91c2x5IHNhdmVkIHZlcnNpb24gd2lsbCBiZSB2YWxpZGF0ZWQuKQotX1VJX1NBVkVfRElSVFlfRklMRV9USVRMRSAgICAgICAgICAgPSBTYXZlIGZpbGU/CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvd2l6YXJkcy9WYWxpZGF0aW9uV2l6YXJkLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvd2l6YXJkcy9WYWxpZGF0aW9uV2l6YXJkLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiMzhiOWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3VpL2ludGVybmFsL3dpemFyZHMvVmFsaWRhdGlvbldpemFyZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzE5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwud2l6YXJkczsKLQotaW1wb3J0IGphdmF4LndzZGwuZmFjdG9yeS5XU0RMRmFjdG9yeTsKLWltcG9ydCBqYXZheC53c2RsLnhtbC5XU0RMUmVhZGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLklXaXphcmRQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsLlJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwuV1NJVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVZpZXdSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5uYXZpZ2F0b3IuUmVzb3VyY2VOYXZpZ2F0b3I7Ci0KLS8qKgotICogVGhpcyB3aXphcmQgYWxsb3dzIHRoZSB1c2VyIHRvIHNwZWNpZnkgdGhlIGxvY2F0aW9uIG9mIHRoZSAKLSAqIFdTLUkgTWVzc2FnZSBMb2cgZmlsZSBmb3IgcHVycG9zZXMgb2YgdmFsaWRhdGlvbi4KLSAqIAotICogQGF1dGhvciBEYXZpZCBMYXV6b24sIElCTQotICogQGF1dGhvciBMYXdyZW5jZSBNYW5kZWwsIElCTQotICovCi0KLXB1YmxpYyBjbGFzcyBWYWxpZGF0aW9uV2l6YXJkIGV4dGVuZHMgV2l6YXJkCi17Ci0gIC8qKgotICAgKiBXaXphcmQgcGFnZSB0byBzcGVjaWZ5IHRoZSBsb2NhdGlvbiBvZiB0aGUgCi0gICAqIFdTLUkgTWVzc2FnZSBMb2cgZmlsZSBmb3IgcHVycG9zZXMgb2YgdmFsaWRhdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCBWYWxpZGF0aW9uV2l6YXJkTG9nUGFnZSBsb2dQYWdlOwotCi0gIC8qKgotICAgKiBXaXphcmQgcGFnZSB0byBvcHRpb25hbGx5IHNwZWNpZnkgdGhlIGxvY2F0aW9uCi0gICAqIG9mIHRoZSBXU0RMIGRvY3VtZW50IGZvciB0aGUgV2ViIHNlcnZpY2UuCi0gICAqLwotICBwcm90ZWN0ZWQgVmFsaWRhdGlvbldpemFyZFdTRExQYWdlIHdzZGxQYWdlOwotCi0gIC8qKgotICAgKiBXaXphcmQgcGFnZSB0byBzcGVjaWZ5IHRoZSBuYW1lLCB0eXBlIGFuZCBuYW1lc3BhY2UKLSAgICogZm9yIHRoZSBXU0RMIGVsZW1lbnQgdG8gYW5hbHl6ZS4KLSAgICovCi0gIHByb3RlY3RlZCBWYWxpZGF0aW9uV2l6YXJkV1NETENvbnRlbnRQYWdlIHdzZGxDb250ZW50UGFnZTsKLQotICAvKioKLSAgICogRGVmYXVsdCBXUy1JIE1lc3NhZ2UgZmlsZW5hbWUgcGFzc2VkIGluIHRoZSBDb25zdHJ1Y3Rvci4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgZmlsZW5hbWU7Ci0KLSAgLyoqCi0gICAqIFRoZSBzZWxlY3RlZCBXUy1JIE1lc3NhZ2UgTG9nIGZpbGUuCi0gICAqLwotICBwcm90ZWN0ZWQgSUZpbGUgZmlsZTsKLQotICAvKioKLSAgICogVGhlIGNvbnRhaW5lciBob2xkaW5nIHRoZSBzZWxlY3RlZCBXUy1JIE1lc3NhZ2UgTG9nIGZpbGUuCi0gICAqLwotICBwcm90ZWN0ZWQgSVBhdGggY29udGFpbmVyRnVsbFBhdGg7Ci0KLSAgLyoqCi0gICAqIEZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHNlbGVjdGVkIGZpbGUgaXMgdmFsaWQuCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc1ZhbGlkOwotCi0gIC8qKgotICAgKiBUaGUgbmFtZSBvZiB0aGUgZWxlbWVudCB0byB2YWxpZGF0ZS4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgZWxlbWVudG5hbWU7Ci0KLSAgLyoqCi0gICAqIFRoZSBuYW1lc3BhY2Ugb2YgdGhlIGVsZW1lbnQgdG8gdmFsaWRhdGUuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIG5hbWVzcGFjZTsKLQotICAvKioKLSAgICogVGhlIG5hbWUgb2YgdGhlIHBhcmVudCBvZiB0aGUgZWxlbWVudCB0byB2YWxpZGF0ZS4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgcGFyZW50bmFtZTsKLQotICAvKioKLSAgICogVGhlIHR5cGUgb2YgdGhlIGVsZW1lbnQgdG8gdmFsaWRhdGUuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIHR5cGU7Ci0KLSAgLyoqCi0gICAqIFRoZSBXU0RMIGZpbGUgdG8gdXNlIGZvciB2YWxpZGF0aW9uOwotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyB3c2RsZmlsZTsKLQotICAvKioKLSAgICogVHJ1ZSBpZiBhIFdTREwgZmlsZSBpcyBpbmNsdWRlZCwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHJvdGVjdGVkIGJvb2xlYW4gaW5jbHVkZXdzZGxmaWxlOwotCi0gIAotICAvKioKLSAgICogVGhpcyBsaXN0IG9mIFdTREwgbG9jYXRpb25zIHRoZSB1c2VyIGNhbiBjaG9vc2UgZnJvbS4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmdbXSB3c2RsbG9jYXRpb25zID0gbnVsbDsKLSAgCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICogQHBhcmFtIGZpbGVuYW1lIERlZmF1bHQgbWVzc2FnZSBsb2cgZmlsZSBuYW1lLgotICAgKi8KLSAgcHVibGljIFZhbGlkYXRpb25XaXphcmQoU3RyaW5nIGZpbGVuYW1lKQotICB7Ci0gICAgdGhpcy5maWxlbmFtZSA9IGZpbGVuYW1lOwotICAgIHRoaXMuc2V0V2luZG93VGl0bGUoTWVzc2FnZXMuVkFMSURBVElPTl9XSVpBUkRfVElUTEUpOwotICAgIHNldERlZmF1bHRQYWdlSW1hZ2VEZXNjcmlwdG9yKAotICAgICAgSW1hZ2VEZXNjcmlwdG9yLmNyZWF0ZUZyb21GaWxlKFdTSVVJUGx1Z2luLmNsYXNzLCBSZXNvdXJjZS5WQUxJREFURV9XU0lfTE9HRklMRV9XSVopKTsKLSAgICBzZXROZWVkc1Byb2dyZXNzTW9uaXRvcih0cnVlKTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5JV2l6YXJkI2FkZFBhZ2VzKCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZFBhZ2VzKCkKLSAgewotICAgIGxvZ1BhZ2UgPSBuZXcgVmFsaWRhdGlvbldpemFyZExvZ1BhZ2UoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBnZXRSZXNvdXJjZU5hdmlnYXRvclNlbGVjdGlvbigpLCBmaWxlbmFtZSk7Ci0gICAgd3NkbFBhZ2UgPSBuZXcgVmFsaWRhdGlvbldpemFyZFdTRExQYWdlKChJU3RydWN0dXJlZFNlbGVjdGlvbikgZ2V0UmVzb3VyY2VOYXZpZ2F0b3JTZWxlY3Rpb24oKSk7Ci0gICAgd3NkbENvbnRlbnRQYWdlID0gbmV3IFZhbGlkYXRpb25XaXphcmRXU0RMQ29udGVudFBhZ2UoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBnZXRSZXNvdXJjZU5hdmlnYXRvclNlbGVjdGlvbigpKTsKLSAgICBhZGRQYWdlKGxvZ1BhZ2UpOwotICAgIGFkZFBhZ2Uod3NkbFBhZ2UpOwotICAgIGFkZFBhZ2Uod3NkbENvbnRlbnRQYWdlKTsKLQotICB9Ci0KLSAgLyoqCi0gICAqIEByZXR1cm4gVHJ1ZSBpZiBhIFdTREwgZmlsZSBpcyBpbmNsdWRlZCwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaW5jbHVkZVdTRExGaWxlKCkKLSAgewotICAgIGlmICghaXNWYWxpZCkKLSAgICB7Ci0gICAgICByZXR1cm4gd3NkbFBhZ2UuaW5jbHVkZVdTRExGaWxlKCk7Ci0gICAgfQotICAgIHJldHVybiBpbmNsdWRld3NkbGZpbGU7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBlbGVtZW50IG5hbWUgdG8gdmFsaWRhdGUuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBlbGVtZW50IG5hbWUgdG8gdmFsaWRhdGUuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEVsZW1lbnROYW1lKCkKLSAgewotICAgIHJldHVybiBlbGVtZW50bmFtZTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIG5hbWVzcGFjZSBmb3IgdGhlIGVsZW1lbnQuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBuYW1lc3BhY2UgZm9yIHRoZSBlbGVtZW50LgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXROYW1lc3BhY2UoKQotICB7Ci0gICAgcmV0dXJuIG5hbWVzcGFjZTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIG5hbWUgb2YgdGhlIHBhcmVudCBvZiB0aGUgZWxlbWVudC4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIG5hbWUgb2YgdGhlIHBhcmVudCBvZiB0aGUgZWxlbWVudC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UGFyZW50TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gcGFyZW50bmFtZTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIHR5cGUgb2YgdGhlIGVsZW1lbnQuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSB0eXBlIG9mIHRoZSBlbGVtZW50LgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRUeXBlKCkKLSAgewotICAgIHJldHVybiB0eXBlOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRXU0RMRmlsZSgpCi0gIHsKLSAgICBpZiAoIWlzVmFsaWQpCi0gICAgewotICAgICAgcmV0dXJuIHdzZGxQYWdlLmdldFdTRExGaWxlKCk7Ci0gICAgfQotICAgIHJldHVybiB3c2RsZmlsZTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5JV2l6YXJkI2dldE5leHRQYWdlKG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5JV2l6YXJkUGFnZSkKLSAgICovCi0gIHB1YmxpYyBJV2l6YXJkUGFnZSBnZXROZXh0UGFnZShJV2l6YXJkUGFnZSBjdXJyZW50UGFnZSkKLSAgewotICAgIGlmIChjdXJyZW50UGFnZSA9PSB3c2RsUGFnZSkKLSAgICB7Ci0gICAgICBpZiAoIXdzZGxQYWdlLmluY2x1ZGVXU0RMRmlsZSgpKQotICAgICAgewotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBXU0RMRmFjdG9yeSBmYWN0b3J5ID0gV1NETEZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLSAgICAgICAgICBXU0RMUmVhZGVyIHJlYWRlciA9IGZhY3RvcnkubmV3V1NETFJlYWRlcigpOwotICAgICAgICAgIHJlYWRlci5yZWFkV1NETChnZXRXU0RMRmlsZSgpKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIHByb2JsZW0gd2l0aCB0aGUgV1NETCBmaWxlIHRoZXJlIGlzIG5vIG5leHQgcGFnZS4KLSAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gc3VwZXIuZ2V0TmV4dFBhZ2UoY3VycmVudFBhZ2UpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2VsZWN0ZWQgZmlsZSBpcyBhIHZhbGlkIFdTLUkgTWVzc2FnZSBMb2cgZmlsZW5hbWUuCi0gICAqIAotICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHNlbGVjdGVkIGZpbGUgaXMgYSB2YWxpZCBXUy1JIE1lc3NhZ2UgTG9nIGZpbGVuYW1lLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNWYWxpZCgpCi0gIHsKLSAgICByZXR1cm4gaXNWYWxpZDsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5JV2l6YXJkI3BlcmZvcm1GaW5pc2goKQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gcGVyZm9ybUZpbmlzaCgpCi0gIHsKLSAgICBmaWxlID0gbG9nUGFnZS5nZXRGaWxlKCk7Ci0gICAgY29udGFpbmVyRnVsbFBhdGggPSBsb2dQYWdlLmdldENvbnRhaW5lckZ1bGxQYXRoKCk7Ci0gICAgaW5jbHVkZXdzZGxmaWxlID0gd3NkbFBhZ2UuaW5jbHVkZVdTRExGaWxlKCk7Ci0gICAgd3NkbGZpbGUgPSB3c2RsUGFnZS5nZXRXU0RMRmlsZSgpOwotICAgIGVsZW1lbnRuYW1lID0gd3NkbENvbnRlbnRQYWdlLmdldEVsZW1lbnROYW1lKCk7Ci0gICAgbmFtZXNwYWNlID0gd3NkbENvbnRlbnRQYWdlLmdldE5hbWVzcGFjZSgpOwotICAgIHBhcmVudG5hbWUgPSB3c2RsQ29udGVudFBhZ2UuZ2V0UGFyZW50TmFtZSgpOwotICAgIHR5cGUgPSB3c2RsQ29udGVudFBhZ2UuZ2V0VHlwZSgpOwotICAgIGlzVmFsaWQgPSB0cnVlOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGZpbGUgc2VsZWN0ZWQgYnkgdGhlIHVzZXIgaW4gdGhlIGNob29zZSBwYWdlLgotICAgKiAKLSAgICogQHJldHVybiB0aGUgZmlsZSBzZWxlY3RlZGJ5IHRoZSB1c2VyIGluIHRoZSBjaG9vc2UgcGFnZS4KLSAgICovCi0gIHB1YmxpYyBJRmlsZSBnZXRGaWxlKCkKLSAgewotICAgIHJldHVybiBmaWxlOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIElQYXRoIGNvbnRhaW5pbmcgdGhlIHNlbGVjdGVkIElGaWxlLgotICAgKiAKLSAgICogQHJldHVybiB0aGUgSVBhdGggY29udGFpbmluZyB0aGUgc2VsZWN0ZWQgSUZpbGUuCi0gICAqLwotICBwdWJsaWMgSVBhdGggZ2V0Q29udGFpbmVyRnVsbFBhdGgoKQotICB7Ci0gICAgcmV0dXJuIGNvbnRhaW5lckZ1bGxQYXRoOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHNlbGVjdGlvbiBpbiB0aGUgUmVzb3VyY2UgTmF2aWdhdG9yIHZpZXcuCi0gICAqIAotICAgKiBAcmV0dXJuIHRoZSBzZWxlY3Rpb24gaW4gdGhlIFJlc291cmNlIE5hdmlnYXRvciB2aWV3LgotICAgKi8KLSAgcHVibGljIElTZWxlY3Rpb24gZ2V0UmVzb3VyY2VOYXZpZ2F0b3JTZWxlY3Rpb24oKQotICB7Ci0gICAgSVZpZXdSZWZlcmVuY2Ugdmlld1BhcnRzW10gPQotICAgICAgUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0Vmlld1JlZmVyZW5jZXMoKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmlld1BhcnRzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGlmICh2aWV3UGFydHNbaV0gaW5zdGFuY2VvZiBSZXNvdXJjZU5hdmlnYXRvcikKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuICgoUmVzb3VyY2VOYXZpZ2F0b3IpIHZpZXdQYXJ0c1tpXSkuZ2V0Vmlld1NpdGUoKS5nZXRTZWxlY3Rpb25Qcm92aWRlcigpLmdldFNlbGVjdGlvbigpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWTsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQgdGhlIGxpc3Qgb2YgV1NETCBsb2NhdGlvbnMgdG8gbGV0IHRoZSB1c2VyIGNob29zZSBmcm9tLgotICAgKiAKLSAgICogQHBhcmFtIHdzZGxsb2NhdGlvbnMgQSBsaXN0IG9mIFdTREwgZG9jdW1lbnQgbG9jYXRpb25zLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0V1NETExvY2F0aW9ucyhTdHJpbmdbXSB3c2RsbG9jYXRpb25zKSAKLSAgewotCXRoaXMud3NkbGxvY2F0aW9ucyA9IHdzZGxsb2NhdGlvbnM7Ci0JCi0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIGxpc3Qgb2YgV1NETCBsb2NhdGlvbnMgdGhlIHVzZXIgY2FuIGNob29zZSBmcm9tLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgbGlzdCBvZiBXU0RMIGxvY2F0aW9ucy4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRXU0RMTG9jYXRpb25zKCkKLSAgewotICAJcmV0dXJuIHdzZGxsb2NhdGlvbnM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC93aXphcmRzL1ZhbGlkYXRpb25XaXphcmRMb2dQYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvd2l6YXJkcy9WYWxpZGF0aW9uV2l6YXJkTG9nUGFnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Zjg4Y2FhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC93aXphcmRzL1ZhbGlkYXRpb25XaXphcmRMb2dQYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbC53aXphcmRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLldpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsLk1lc3NhZ2VzOwotCi0vKioKLSAqIFdpemFyZCBwYWdlIHRoYXQgYWxsb3dzIHRoZSB1c2VyIHRvIHNwZWNpZnkgdGhlIGxvY2F0aW9uIG9mIHRoZSAKLSAqIFdTLUkgTWVzc2FnZSBMb2cgZmlsZSBmb3IgcHVycG9zZXMgb2YgdmFsaWRhdGlvbi4KLSAqIAotICogQGF1dGhvciBEYXZpZCBMYXV6b24sIElCTQotICovCi0KLXB1YmxpYyBjbGFzcyBWYWxpZGF0aW9uV2l6YXJkTG9nUGFnZSBleHRlbmRzIFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UKLXsKLSAgLyoqCi0gICAqIFJlY29tbWVuZGVkIGV4dGVuc2lvbiBmb3IgYSBXUy1JIE1lc3NhZ2UgTG9nIGZpbGUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBXU0lfTE9HX0VYVEVOU0lPTiA9ICJ3c2ltc2ciOwotIAotICAvKioKLSAgICogRGVmYXVsdCBXUy1JIE1lc3NhZ2UgZmlsZW5hbWUgcGFzc2VkIGluIHRoZSBDb25zdHJ1Y3Rvci4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgZmlsZW5hbWU7Ci0gIAotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gc2VsZWN0aW9uOiBzZWxlY3Rpb24gaW4gdGhlIFJlc291cmNlIE5hdmlnYXRvciB2aWV3LgotICAgKiBAcGFyYW0gZmlsZW5hbWU6IGRlZmF1bHQgbWVzc2FnZSBsb2cgZmlsZSBuYW1lLgotICAgKi8KLSAgcHVibGljIFZhbGlkYXRpb25XaXphcmRMb2dQYWdlKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbiwgU3RyaW5nIGZpbGVuYW1lKQotICB7Ci0gICAgc3VwZXIoIlZhbGlkYXRpb25XaXphcmRMb2dQYWdlIiwgc2VsZWN0aW9uKTsKLSAgICB0aGlzLmZpbGVuYW1lID0gZmlsZW5hbWU7Ci0gICAgdGhpcy5zZXRUaXRsZShNZXNzYWdlcy5MT0dfUEFHRV9TRUxFQ1RfTE9HX0ZJTEVOQU1FX0hFQURJTkcpOwotICAgIHRoaXMuc2V0RGVzY3JpcHRpb24oTWVzc2FnZXMuTE9HX1BBR0VfU0VMRUNUX0xPR19GSUxFTkFNRV9FWFBMKTsKLSAgfQotCi0KLSAgLyoqIAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ1BhZ2UjY3JlYXRlQ29udHJvbChvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUpCi0gICAqLwotICBwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIAotICB7Ci0gICAgc3VwZXIuY3JlYXRlQ29udHJvbChwYXJlbnQpOwotICAgIHN1cGVyLnNldEZpbGVOYW1lKGZpbGVuYW1lKTsKLSAgICBzZXRQYWdlQ29tcGxldGUodmFsaWRhdGVQYWdlKCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgc2VsZWN0ZWQgZmlsZS4KLSAgICogCi0gICAqIEByZXR1cm4gdGhlIHNlbGVjdGVkIElGaWxlLiAgCi0gICAqLwotICBwdWJsaWMgSUZpbGUgZ2V0RmlsZSgpCi0gIHsKLSAgICBTdHJpbmcgZmlsZU5hbWUgPSBnZXRGaWxlTmFtZSgpOwotICAgIFN0cmluZyBmaWxlRXh0ZW5zaW9uID0gKG5ldyBQYXRoKGZpbGVOYW1lKSkuZ2V0RmlsZUV4dGVuc2lvbigpOwotICAgIAotICAgIGlmIChmaWxlRXh0ZW5zaW9uID09IG51bGwpCi0gICAgICBmaWxlTmFtZSA9IGZpbGVOYW1lLmNvbmNhdCgiLiIgKyBXU0lfTE9HX0VYVEVOU0lPTik7Ci0gICAgICAKLSAgICByZXR1cm4gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKGdldENvbnRhaW5lckZ1bGxQYXRoKCkuYXBwZW5kKGZpbGVOYW1lKSk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0cnVlIGlmIHNlbGVjdGVkIGZpbGUgaXMgYSB2YWxpZCBXUy1JIE1lc3NhZ2UgTG9nIGZpbGVuYW1lLgotICAgKiAKLSAgICogU2luY2UgdGhlIFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UgZG9lcyBub3QgcHJvdmlkZSBhbiBpbnRlcmZhY2UgdG8KLSAgICogYWxsb3cgdGhlIGZpbGUgc3BlY2lmaWVkIHRvIGFscmVhZHkgZXhpc3QgKGl0IGdpdmVzIGFuIGVycm9yIHRoYXQgdGhlCi0gICAqIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzLCBhbiBubyB3YXkgb2YgYWxsb3dpbmcgaXQgdG8gcGFzcyksIGFuZCB3ZSB3YW50Ci0gICAqIHRvIGFsbG93IHRoZSBmaWxlIHRvIGV4aXN0LCBzbyB0aGF0IHdlIGNhbiBvdmVyd3JpdGUgaXQsIHdlIGhhdmUgdG8KLSAgICogb3ZlcnJpZGUgdGhpcyBtZXRob2QsIGFuZCBkbyBzb21lIG1hZ2ljIHRvIGFsbG93IHRoaXMgY2FzZSB0byBwYXNzLgotICAgKgotICAgKiBAcmV0dXJuIHRydWUgaWYgc2VsZWN0ZWQgZmlsZSBpcyBhIHZhbGlkIFdTLUkgTWVzc2FnZSBMb2cgZmlsZW5hbWUuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5XaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlI3ZhbGlkYXRlUGFnZSgpCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZVBhZ2UoKSAKLSAgewotICAgIFN0cmluZyBmaWxlRXh0ZW5zaW9uID0gKG5ldyBQYXRoKGdldEZpbGVOYW1lKCkpKS5nZXRGaWxlRXh0ZW5zaW9uKCk7Ci0gICAgaWYgKGZpbGVFeHRlbnNpb24gIT0gbnVsbCkgCi0gICAgewotICAgICAgaWYgKGZpbGVFeHRlbnNpb24uY29tcGFyZVRvKFdTSV9MT0dfRVhURU5TSU9OKSAhPSAwKQotICAgICAgeyAgICAgICAgCi0gICAgICAgIHNldEVycm9yTWVzc2FnZShNZXNzYWdlcy5FUlJPUl9JTlZBTElEX0xPR19GSUxFX0VYVEVOU0lPTik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy8gRXNzZW50aWFsbHksIHdlIHRha2UgdGhlIGNvbnRhaW5lciBhbmQgY29uY2F0IHRoZSBmaWxlIHRvIGl0LCBhbmQKLSAgICAvLyBjaGVjayBpZiBpdHMgaW4gdGhlIHdvcmtzcGFjZSwgaWYgaXQgaXMsIHRoZW4gaXQgZXhpc3RzIGFuZCB3ZSBjYW4gCi0gICAgLy8gcHJvY2VlZC4gT3RoZXJ3aXNlLCBjb250aW51ZSB3aXRoIHRoZSBkZWZhdWx0IHZhbGlkYXRpbmcuCi0gICAgaWYgKCAoZ2V0Q29udGFpbmVyRnVsbFBhdGgoKSAhPSBudWxsKSAmJiAoZ2V0Q29udGFpbmVyRnVsbFBhdGgoKS5pc0VtcHR5KCkgPT0gZmFsc2UpCi0gICAgICAgICAgICYmIChnZXRGaWxlTmFtZSgpLmNvbXBhcmVUbygiIikgIT0gMCkpCi0gICAgewotICAgICAgUGF0aCBmdWxsUGF0aDsKLSAgICAgICAgICAgIAotICAgICAgaWYgKGZpbGVFeHRlbnNpb24gIT0gbnVsbCkKLSAgICAgICAgZnVsbFBhdGggPSBuZXcgUGF0aChnZXRDb250YWluZXJGdWxsUGF0aCgpLnRvU3RyaW5nKCkgKyAnLycgKyBnZXRGaWxlTmFtZSgpKTsKLSAgICAgIGVsc2UKLSAgICAgICAgZnVsbFBhdGggPSBuZXcgUGF0aChnZXRDb250YWluZXJGdWxsUGF0aCgpLnRvU3RyaW5nKCkgKyAnLycgKyBnZXRGaWxlTmFtZSgpICsgIi4iICsgV1NJX0xPR19FWFRFTlNJT04pOwotICAgICAgCi0gICAgICBJUmVzb3VyY2UgcmVzb3VyY2UgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmZpbmRNZW1iZXIoZnVsbFBhdGgpOwotICAgICAgCi0gICAgICBzZXRFcnJvck1lc3NhZ2UobnVsbCk7Ci0gICAgICBpZiAocmVzb3VyY2UgIT0gbnVsbCkKLSAgICAgICAgc2V0TWVzc2FnZShNZXNzYWdlcy5XQVJOSU5HX0ZJTEVfQUxSRUFEWV9FWElTVFMpOwotICAgICAgZWxzZQotICAgICAgICBzZXRNZXNzYWdlKG51bGwpOwotCi0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cGVyLnZhbGlkYXRlUGFnZSgpOwotICB9Ci19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC93aXphcmRzL1ZhbGlkYXRpb25XaXphcmRXU0RMQ29udGVudFBhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC93aXphcmRzL1ZhbGlkYXRpb25XaXphcmRXU0RMQ29udGVudFBhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmNhMDU3MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvd2l6YXJkcy9WYWxpZGF0aW9uV2l6YXJkV1NETENvbnRlbnRQYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbC53aXphcmRzOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuUG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBqYXZheC53c2RsLldTRExFeGNlcHRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5mYWN0b3J5LldTRExGYWN0b3J5OwotaW1wb3J0IGphdmF4LndzZGwueG1sLldTRExSZWFkZXI7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Hcm91cDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotCi0vKioKLSAqIFdpemFyZCBwYWdlIHRoYXQgYWxsb3dzIHRoZSB1c2VyIHRvIHNwZWNpZnkgdGhlIGxvY2F0aW9uIG9mIHRoZSAKLSAqIFdTREwgZG9jdW1lbnQgZm9yIHRoZSBXZWIgc2VydmljZS4KLSAqIAotICogQGF1dGhvciBEYXZpZCBMYXV6b24sIElCTQotICogQGF1dGhvciBMYXdyZW5jZSBNYW5kZWwsIElCTQotICovCi0KLXB1YmxpYyBjbGFzcyBWYWxpZGF0aW9uV2l6YXJkV1NETENvbnRlbnRQYWdlIGV4dGVuZHMgV2l6YXJkUGFnZSBpbXBsZW1lbnRzIFNlbGVjdGlvbkxpc3RlbmVyCi17Ci0gIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbjsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQT1JUID0gInBvcnQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBPUEVSQVRJT04gPSAib3BlcmF0aW9uIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQklORElORyA9ICJiaW5kaW5nIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUE9SVFRZUEUgPSAicG9ydHR5cGUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNRVNTQUdFID0gIm1lc3NhZ2UiOwotICAvKioKLSAgICogQWNjZXNzIHRvIHRoZSBpbmNsdWRlV1NETCBmbGFnLiAgCi0gICAqLwotICBwcm90ZWN0ZWQgQnV0dG9uIHdzZGxQb3J0QnV0dG9uOwotICBwcm90ZWN0ZWQgQnV0dG9uIHdzZGxCaW5kaW5nQnV0dG9uOwotICBwcm90ZWN0ZWQgQnV0dG9uIHdzZGxQb3J0VHlwZUJ1dHRvbjsKLSAgcHJvdGVjdGVkIEJ1dHRvbiB3c2RsT3BlcmF0aW9uQnV0dG9uOwotICBwcm90ZWN0ZWQgQnV0dG9uIHdzZGxNZXNzYWdlQnV0dG9uOwotCi0gIHByb3RlY3RlZCBDb21ibyBuYW1lQ29tYm87Ci0gIHByb3RlY3RlZCBUZXh0IG5hbWVzcGFjZVRleHQ7Ci0gIC8vcHJvdGVjdGVkIENvbWJvIHBhcmVudENvbWJvOwotICAvL3Byb3RlY3RlZCBUZXh0IG5hbWVUZXh0OwotICBwcm90ZWN0ZWQgVGV4dCBwYXJlbnRuYW1lVGV4dDsKLQotICBwcm90ZWN0ZWQgTGlzdCBwb3J0cyA9IG51bGw7Ci0gIHByb3RlY3RlZCBMaXN0IG9wZXJhdGlvbnMgPSBudWxsOwotICBwcm90ZWN0ZWQgTGlzdCBiaW5kaW5ncyA9IG51bGw7Ci0gIHByb3RlY3RlZCBMaXN0IHBvcnR0eXBlcyA9IG51bGw7Ci0gIHByb3RlY3RlZCBMaXN0IG1lc3NhZ2VzID0gbnVsbDsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIAotICAgKiBAcGFyYW0gc2VsZWN0aW9uOiBzZWxlY3Rpb24gaW4gdGhlIFJlc291cmNlIE5hdmlnYXRvciB2aWV3LgotICAgKi8KLSAgcHVibGljIFZhbGlkYXRpb25XaXphcmRXU0RMQ29udGVudFBhZ2UoSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uKQotICB7Ci0gICAgc3VwZXIoIlZhbGlkYXRpb25XaXphcmRXU0RMQ29udGVudFBhZ2UiKTsKLSAgICB0aGlzLnNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKLSAgICB0aGlzLnNldFRpdGxlKE1lc3NhZ2VzLldTRExfQ09OVEVOVF9QQUdFX1NFTEVDVF9IRUFESU5HKTsKLSAgICB0aGlzLnNldERlc2NyaXB0aW9uKE1lc3NhZ2VzLldTRExfQ09OVEVOVF9QQUdFX1NFTEVDVF9FWFBMKTsKLSAgfQotCi0gIC8qKgotICAgKiBBbHdheXMgcmV0dXJucyB0cnVlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNQYWdlQ29tcGxldGUoKQotICB7Ci0gICAgaWYgKCgoVmFsaWRhdGlvbldpemFyZCkgZ2V0V2l6YXJkKCkpLmluY2x1ZGVXU0RMRmlsZSgpKQotICAgIHsKLSAgICAgIGludCBzZWxlY3Rpb24gPSBuYW1lQ29tYm8uZ2V0U2VsZWN0aW9uSW5kZXgoKTsKLSAgICAgIGlmIChzZWxlY3Rpb24gIT0gLTEgJiYgIW5hbWVDb21iby5nZXRJdGVtKHNlbGVjdGlvbikuZXF1YWxzKCIiKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoKLSAgICogQ3JlYXRlcyB0aGUgdG9wIGxldmVsIGNvbnRyb2wgZm9yIHRoaXMgcGFnZSB1bmRlciB0aGUgZ2l2ZW4gCi0gICAqIHBhcmVudCBjb21wb3NpdGUuIEltcGxlbWVudG9ycyBhcmUgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nCi0gICAqIHRoYXQgdGhlIGNyZWF0ZWQgY29udHJvbCBjYW4gYmUgYWNjZXNzZWQgdmlhIGdldENvbnRyb2wgCi0gICAqCi0gICAqIEBwYXJhbSBwYXJlbnQgLSB0aGUgcGFyZW50IGNvbXBvc2l0ZQotICAgKi8KLSAgcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KQotICB7Ci0gICAgQ29tcG9zaXRlIGJhc2UgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotICAgIGJhc2Uuc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KCkpOwotICAgIEdyaWREYXRhIGRhdGE7Ci0KLSAgICAvLyBjcmVhdGUgYSBncm91cAotICAgIEdyb3VwIHdzZGxFbGVtZW50R3JvdXAgPSBuZXcgR3JvdXAoYmFzZSwgU1dULlNIQURPV19FVENIRURfSU4pOwotICAgIHdzZGxFbGVtZW50R3JvdXAuc2V0VGV4dChNZXNzYWdlcy5XU0RMX0NPTlRFTlRfUEFHRV9HUk9VUF9URVhUX0VMRU1FTlQpOwotICAgIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICBkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIGRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7Ci0gICAgd3NkbEVsZW1lbnRHcm91cC5zZXRMYXlvdXREYXRhKGRhdGEpOwotICAgIEdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBsYXlvdXQubnVtQ29sdW1ucyA9IDE7Ci0gICAgd3NkbEVsZW1lbnRHcm91cC5zZXRMYXlvdXQobGF5b3V0KTsKLQotICAgIC8vIGNyZWF0ZSBhIGJhc2UgcGFuZWwgd2l0aCAyIGNvbHVtbnMKLSAgICBDb21wb3NpdGUgYmFzZVBhbmVsID0gbmV3IENvbXBvc2l0ZSh3c2RsRWxlbWVudEdyb3VwLCBTV1QuTk9ORSk7Ci0gICAgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBsYXlvdXQubnVtQ29sdW1ucyA9IDI7Ci0gICAgbGF5b3V0Lm1ha2VDb2x1bW5zRXF1YWxXaWR0aCA9IGZhbHNlOwotICAgIGJhc2VQYW5lbC5zZXRMYXlvdXQobGF5b3V0KTsKLSAgICBkYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICBkYXRhLnZlcnRpY2FsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICBkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOwotICAgIGJhc2VQYW5lbC5zZXRMYXlvdXREYXRhKGRhdGEpOwotCi0gICAgLy8gY29udGVudCBmb3IgZmlyc3QgY29sdW1uCi0gICAgY3JlYXRlV1NETEVsZW1lbnRUeXBlQ29udGVudChiYXNlUGFuZWwpOwotCi0gICAgLy8gY29udGVudCBmb3Igc2Vjb25kIGNvbHVtbgotICAgIGNyZWF0ZVdTRExFbGVtZW50Q29udGVudChiYXNlUGFuZWwpOwotCi0gICAgc2V0Q29udHJvbChiYXNlKTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgYSBncm91cCBvZiByYWRpbyBidXR0b25zIGluZGljYXRpbmcgdGhlIHR5cGUgb2YgV1NETCBlbGVtZW50LgotICAgKiBUaGUgZml2ZSB0cGVzIGFyZTogcG9ydCwgYmluZGluZywgcG9ydFR5cGUsIG9wZXJhdGlvbiBhbmQgbWVzc2FnZS4KLSAgICogQHBhcmFtIHBhcmVudCB0aGUgcGFyZW50IGNvbnRhaW5lci4gCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVXU0RMRWxlbWVudFR5cGVDb250ZW50KENvbXBvc2l0ZSBwYXJlbnQpCi0gIHsKLSAgICAvLyBjcmVhdGUgYSBncm91cAotICAgIEdyb3VwIHdzZGxUeXBlR3JvdXAgPSBuZXcgR3JvdXAocGFyZW50LCBTV1QuU0hBRE9XX0VUQ0hFRF9JTik7Ci0gICAgd3NkbFR5cGVHcm91cC5zZXRUZXh0KE1lc3NhZ2VzLldTRExfQ09OVEVOVF9QQUdFX0dST1VQX1RFWFRfVFlQRSk7Ci0gICAgR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgIGRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gZmFsc2U7Ci0gICAgd3NkbFR5cGVHcm91cC5zZXRMYXlvdXREYXRhKGRhdGEpOwotICAgIEdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLSAgICBsYXlvdXQubnVtQ29sdW1ucyA9IDE7Ci0gICAgd3NkbFR5cGVHcm91cC5zZXRMYXlvdXQobGF5b3V0KTsKLQotICAgIHdzZGxQb3J0QnV0dG9uID0gbmV3IEJ1dHRvbih3c2RsVHlwZUdyb3VwLCBTV1QuUkFESU8pOwotICAgIHdzZGxQb3J0QnV0dG9uLnNldFRleHQoTWVzc2FnZXMuV1NETF9DT05URU5UX1BBR0VfUkFESU9fUE9SVCk7Ci0gICAgd3NkbFBvcnRCdXR0b24uc2V0RGF0YSgid3NkbFBvcnRCdXR0b24iKTsKLSAgICB3c2RsUG9ydEJ1dHRvbi5zZXRTZWxlY3Rpb24odHJ1ZSk7Ci0gICAgd3NkbFBvcnRCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFBvcnRCdXR0b25TZWxlY3Rpb25MaXN0ZW5lcigpKTsKLQotICAgIHdzZGxCaW5kaW5nQnV0dG9uID0gbmV3IEJ1dHRvbih3c2RsVHlwZUdyb3VwLCBTV1QuUkFESU8pOwotICAgIHdzZGxCaW5kaW5nQnV0dG9uLnNldERhdGEoIndzZGxCaW5kaW5nQnV0dG9uIik7Ci0gICAgd3NkbEJpbmRpbmdCdXR0b24uc2V0VGV4dChNZXNzYWdlcy5XU0RMX0NPTlRFTlRfUEFHRV9SQURJT19CSU5ESU5HKTsKLSAgICB3c2RsQmluZGluZ0J1dHRvbi5zZXRTZWxlY3Rpb24oZmFsc2UpOwotICAgIHdzZGxCaW5kaW5nQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBCaW5kaW5nQnV0dG9uU2VsZWN0aW9uTGlzdGVuZXIoKSk7Ci0KLSAgICB3c2RsUG9ydFR5cGVCdXR0b24gPSBuZXcgQnV0dG9uKHdzZGxUeXBlR3JvdXAsIFNXVC5SQURJTyk7Ci0gICAgd3NkbFBvcnRUeXBlQnV0dG9uLnNldERhdGEoIndzZGxQb3J0VHlwZUJ1dHRvbiIpOwotICAgIHdzZGxQb3J0VHlwZUJ1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzLldTRExfQ09OVEVOVF9QQUdFX1JBRElPX1BPUlRfVFlQRSk7Ci0gICAgd3NkbFBvcnRUeXBlQnV0dG9uLnNldFNlbGVjdGlvbihmYWxzZSk7Ci0gICAgd3NkbFBvcnRUeXBlQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBQb3J0VHlwZUJ1dHRvblNlbGVjdGlvbkxpc3RlbmVyKCkpOwotCi0gICAgd3NkbE9wZXJhdGlvbkJ1dHRvbiA9IG5ldyBCdXR0b24od3NkbFR5cGVHcm91cCwgU1dULlJBRElPKTsKLSAgICB3c2RsT3BlcmF0aW9uQnV0dG9uLnNldERhdGEoIndzZGxPcGVyYXRpb25CdXR0b24iKTsKLSAgICB3c2RsT3BlcmF0aW9uQnV0dG9uLnNldFRleHQoTWVzc2FnZXMuV1NETF9DT05URU5UX1BBR0VfUkFESU9fT1BFUkFUSU9OKTsKLSAgICB3c2RsT3BlcmF0aW9uQnV0dG9uLnNldFNlbGVjdGlvbihmYWxzZSk7Ci0gICAgd3NkbE9wZXJhdGlvbkJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgT3BlcmF0aW9uQnV0dG9uU2VsZWN0aW9uTGlzdGVuZXIoKSk7Ci0KLSAgICB3c2RsTWVzc2FnZUJ1dHRvbiA9IG5ldyBCdXR0b24od3NkbFR5cGVHcm91cCwgU1dULlJBRElPKTsKLSAgICB3c2RsTWVzc2FnZUJ1dHRvbi5zZXREYXRhKCJ3c2RsTWVzc2FnZUJ1dHRvbiIpOwotICAgIHdzZGxNZXNzYWdlQnV0dG9uLnNldFRleHQoTWVzc2FnZXMuV1NETF9DT05URU5UX1BBR0VfUkFESU9fTUVTU0FHRSk7Ci0gICAgd3NkbE1lc3NhZ2VCdXR0b24uc2V0U2VsZWN0aW9uKGZhbHNlKTsKLSAgICB3c2RsTWVzc2FnZUJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgTWVzc2FnZUJ1dHRvblNlbGVjdGlvbkxpc3RlbmVyKCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhIHBhbmVsIHRvIGNhcHR1cmUgdGhlIG5hbWUsIG5hbWVzcGFjZSBhbmQgcGFyZW50IG9mIGFuCi0gICAqIFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIHBhcmVudCB0aGUgcGFyZW50IGNvbnRhaW5lci4gCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVXU0RMRWxlbWVudENvbnRlbnQoQ29tcG9zaXRlIHBhcmVudCkKLSAgewotICAgIC8vIGNyZWF0ZSBhIGdyb3VwaW5nIHdpdGggMiBjb2x1bW5zLCBvbmUgZm9yIGxhYmVscyBhbmQgdGhlb3RoZXIgZm9yIGZpZWxkcwotICAgIENvbXBvc2l0ZSBmaWVsZENvbHVtbiA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7Ci0gICAgR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGxheW91dC5udW1Db2x1bW5zID0gMjsKLSAgICBsYXlvdXQubWFrZUNvbHVtbnNFcXVhbFdpZHRoID0gZmFsc2U7Ci0gICAgZmllbGRDb2x1bW4uc2V0TGF5b3V0KGxheW91dCk7Ci0gICAgR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgIGRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgZGF0YS52ZXJ0aWNhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKLSAgICBmaWVsZENvbHVtbi5zZXRMYXlvdXREYXRhKGRhdGEpOwotCi0gICAgLy8gVGhlIFdTREwgZWxlbWVudCBuYW1lIGxhYmVsCi0gICAgTGFiZWwgbGFiZWwgPSBuZXcgTGFiZWwoZmllbGRDb2x1bW4sIFNXVC5MRUZUKTsKLSAgICBsYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLldTRExfQ09OVEVOVF9QQUdFX0xBQkVMX05BTUUpOwotICAgIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICBkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIGxhYmVsLnNldExheW91dERhdGEoZGF0YSk7Ci0KLSAgICAvLyBUaGUgV1NETCBlbGVtZW50IG5hbWUgZmllbGQKLSAgICBuYW1lQ29tYm8gPSBuZXcgQ29tYm8oZmllbGRDb2x1bW4sIFNXVC5SRUFEX09OTFkpOwotICAgIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICBkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIGRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7Ci0gICAgbmFtZUNvbWJvLnNldExheW91dERhdGEoZGF0YSk7Ci0gICAgbmFtZUNvbWJvLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBOYW1lU2VsZWN0aW9uTGlzdGVuZXIoKSk7Ci0gICAgLy9uYW1lVGV4dCA9IG5ldyBUZXh0KGZpZWxkQ29sdW1uLCBTV1QuU0lOR0xFIHwgU1dULkJPUkRFUik7Ci0gICAgLy9kYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgLy9kYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIC8vZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKLSAgICAvL2RhdGEud2lkdGhIaW50ID0gNTA7Ci0gICAgLy9uYW1lVGV4dC5zZXRMYXlvdXREYXRhKGRhdGEpOwotICAgIC8vbmFtZVRleHQuYWRkTW9kaWZ5TGlzdGVuZXIobmV3IFRleHRCb3hMaXN0ZW5lcigpKTsKLQotICAgIC8vIFRoZSBXU0RMIGVsZW1lbnQgbmFtZXNwYWNlIGxhYmVsCi0gICAgbGFiZWwgPSBuZXcgTGFiZWwoZmllbGRDb2x1bW4sIFNXVC5MRUZUKTsKLSAgICBsYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLldTRExfQ09OVEVOVF9QQUdFX0xBQkVMX05BTUVTUEFDRSk7Ci0gICAgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgIGRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgbGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsKLQotICAgIC8vIFRoZSBXU0RMIGVsZW1lbnQgbmFtZXNwYWNlIGZpZWxkCi0gICAgbmFtZXNwYWNlVGV4dCA9IG5ldyBUZXh0KGZpZWxkQ29sdW1uLCBTV1QuU0lOR0xFIHwgU1dULkJPUkRFUik7Ci0gICAgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgIGRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKLSAgICBkYXRhLndpZHRoSGludCA9IDUwOwotICAgIG5hbWVzcGFjZVRleHQuc2V0TGF5b3V0RGF0YShkYXRhKTsKLSAgICBuYW1lc3BhY2VUZXh0LmFkZE1vZGlmeUxpc3RlbmVyKG5ldyBUZXh0Qm94TGlzdGVuZXIoKSk7Ci0gICAgbmFtZXNwYWNlVGV4dC5zZXRFZGl0YWJsZShmYWxzZSk7Ci0KLSAgICAvLyBUaGUgV1NETCBlbGVtZW50IHBhcmVudCBsYWJlbAotICAgIGxhYmVsID0gbmV3IExhYmVsKGZpZWxkQ29sdW1uLCBTV1QuTEVGVCk7Ci0gICAgbGFiZWwuc2V0VGV4dChNZXNzYWdlcy5XU0RMX0NPTlRFTlRfUEFHRV9MQUJFTF9QQVJFTlQpOwotICAgIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICBkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIGxhYmVsLnNldExheW91dERhdGEoZGF0YSk7Ci0KLSAgICAvLyBUaGUgV1NETCBlbGVtZW50IHBhcmVudCBmaWVsZAotICAgIC8vICAgIHBhcmVudENvbWJvID0gbmV3IENvbWJvKGZpZWxkQ29sdW1uLCBTV1QuUkVBRF9PTkxZKTsKLSAgICAvLyAgICBkYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgLy8gICAgZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICAvLyAgICBkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOwotICAgIC8vICAgIHBhcmVudENvbWJvLnNldExheW91dERhdGEoZGF0YSk7Ci0gICAgcGFyZW50bmFtZVRleHQgPSBuZXcgVGV4dChmaWVsZENvbHVtbiwgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIpOwotICAgIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICBkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIGRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7Ci0gICAgZGF0YS53aWR0aEhpbnQgPSA1MDsKLSAgICBwYXJlbnRuYW1lVGV4dC5zZXRMYXlvdXREYXRhKGRhdGEpOwotICAgIHBhcmVudG5hbWVUZXh0LmFkZE1vZGlmeUxpc3RlbmVyKG5ldyBUZXh0Qm94TGlzdGVuZXIoKSk7Ci0gICAgcGFyZW50bmFtZVRleHQuc2V0RWRpdGFibGUoZmFsc2UpOwotICB9Ci0KLSAgLyoqCi0gICAqIEFsd2F5cyByZXR1cm4gdHJ1ZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIHBlcmZvcm1GaW5pc2goKQotICB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogU2VudCB3aGVuIGRlZmF1bHQgc2VsZWN0aW9uIG9jY3VycyBpbiB0aGUgY29udHJvbC4KLSAgICogQHBhcmFtIGUgLSBhbiBldmVudCBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzZWxlY3Rpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotICB7fQotCi0gIC8qKgotICAgKiBIYW5kbGVzIHRoZSBpbmNsdWRlV1NETCBjaGVja2JveC4KLSAgICogU2VudCB3aGVuIHNlbGVjdGlvbiBvY2N1cnMgaW4gdGhlIGNvbnRyb2wuIAotICAgKiBAcGFyYW0gZSAtIGFuIGV2ZW50IGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNlbGVjdGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAge30KLQotICAvKioKLSAgICogR2V0IHRoZSBlbGVtZW50IG5hbWUuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBlbGVtZW50IG5hbWUuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEVsZW1lbnROYW1lKCkKLSAgewotICAgIGludCBzZWxlY3Rpb24gPSBuYW1lQ29tYm8uZ2V0U2VsZWN0aW9uSW5kZXgoKTsKLSAgICBpZihzZWxlY3Rpb24gIT0gLTEpCi0gICAgeyAgCi0gICAgICByZXR1cm4gbmFtZUNvbWJvLmdldEl0ZW0oc2VsZWN0aW9uKTsKLSAgICB9Ci0gICAgcmV0dXJuICIiOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgbmFtZXNwYWNlLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgbmFtZXNwYWNlLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXROYW1lc3BhY2UoKQotICB7Ci0gICAgcmV0dXJuIG5hbWVzcGFjZVRleHQuZ2V0VGV4dCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgbmFtZSBvZiB0aGUgcGFyZW50IG9mIHRoZSBlbGVtZW50LgotICAgKiAKLSAgICogQHJldHVybiBUaGUgbmFtZSBvZiB0aGUgcGFyZW50IG9mIHRoZSBlbGVtZW50LgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRQYXJlbnROYW1lKCkKLSAgewotICAgIC8vcmV0dXJuIHBhcmVudENvbWJvLmdldEl0ZW0ocGFyZW50Q29tYm8uZ2V0U2VsZWN0aW9uSW5kZXgoKSk7Ci0gICAgcmV0dXJuIHBhcmVudG5hbWVUZXh0LmdldFRleHQoKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm4gdGhlIHR5cGUgb2YgdGhlIGVsZW1lbnQuCi0gICAqIAotICAgKiBAcmV0dXJuIHRoZSB0eXBlIG9mIHRoZSBlbGVtZW50LgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRUeXBlKCkKLSAgewotICAgIGlmICh3c2RsQmluZGluZ0J1dHRvbi5nZXRTZWxlY3Rpb24oKSkKLSAgICB7Ci0gICAgICByZXR1cm4gQklORElORzsKLSAgICB9Ci0gICAgZWxzZSBpZiAod3NkbE1lc3NhZ2VCdXR0b24uZ2V0U2VsZWN0aW9uKCkpCi0gICAgewotICAgICAgcmV0dXJuIE1FU1NBR0U7Ci0gICAgfQotICAgIGVsc2UgaWYgKHdzZGxPcGVyYXRpb25CdXR0b24uZ2V0U2VsZWN0aW9uKCkpCi0gICAgewotICAgICAgcmV0dXJuIE9QRVJBVElPTjsKLSAgICB9Ci0gICAgZWxzZSBpZiAod3NkbFBvcnRCdXR0b24uZ2V0U2VsZWN0aW9uKCkpCi0gICAgewotICAgICAgcmV0dXJuIFBPUlQ7Ci0gICAgfQotICAgIGVsc2UgaWYgKHdzZGxQb3J0VHlwZUJ1dHRvbi5nZXRTZWxlY3Rpb24oKSkKLSAgICB7Ci0gICAgICByZXR1cm4gUE9SVFRZUEU7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotCi0gIH0KLQotICBwdWJsaWMgdm9pZCBhZGRFbGVtZW50KFN0cmluZyB0eXBlLCBTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIHBhcmVudCkKLSAgewotICAgIGlmIChwb3J0cyA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc2V0RWxlbWVudHMoKTsKLSAgICB9Ci0gICAgaWYgKHR5cGUuZXF1YWxzKFBPUlQpKQotICAgIHsKLSAgICAgIHBvcnRzLmFkZChuZXcgV1NETEVsZW1lbnQobmFtZSwgbmFtZXNwYWNlLCBwYXJlbnQpKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZS5lcXVhbHNJZ25vcmVDYXNlKE9QRVJBVElPTikpCi0gICAgewotICAgICAgb3BlcmF0aW9ucy5hZGQobmV3IFdTRExFbGVtZW50KG5hbWUsIG5hbWVzcGFjZSwgcGFyZW50KSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGUuZXF1YWxzSWdub3JlQ2FzZShCSU5ESU5HKSkKLSAgICB7Ci0gICAgICBiaW5kaW5ncy5hZGQobmV3IFdTRExFbGVtZW50KG5hbWUsIG5hbWVzcGFjZSwgcGFyZW50KSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGUuZXF1YWxzSWdub3JlQ2FzZShQT1JUVFlQRSkpCi0gICAgewotICAgICAgcG9ydHR5cGVzLmFkZChuZXcgV1NETEVsZW1lbnQobmFtZSwgbmFtZXNwYWNlLCBwYXJlbnQpKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZS5lcXVhbHNJZ25vcmVDYXNlKE1FU1NBR0UpKQotICAgIHsKLSAgICAgIG1lc3NhZ2VzLmFkZChuZXcgV1NETEVsZW1lbnQobmFtZSwgbmFtZXNwYWNlLCBwYXJlbnQpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZXNldEVsZW1lbnRzKCkKLSAgewotICAgIHBvcnRzID0gbmV3IFZlY3RvcigpOwotICAgIG9wZXJhdGlvbnMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgYmluZGluZ3MgPSBuZXcgVmVjdG9yKCk7Ci0gICAgcG9ydHR5cGVzID0gbmV3IFZlY3RvcigpOwotICAgIG1lc3NhZ2VzID0gbmV3IFZlY3RvcigpOwotICAgIG5hbWVDb21iby5jbGVhclNlbGVjdGlvbigpOwotICAgIG5hbWVDb21iby5yZW1vdmVBbGwoKTsKLSAgfQotCi0gIC8qKgotICAgKiBBZGQgdmFsdWUgdG8gdGhlIGxpc3QgYm94Ci0gICAqLwotICBjbGFzcyBXb3Jrc3BhY2VCdXR0b25MaXN0ZW5lciBpbXBsZW1lbnRzIFNlbGVjdGlvbkxpc3RlbmVyCi0gIHsKLSAgICBwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAgICB7fQotCi0gICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAgICB7fQotICB9Ci0KLSAgLyoqCi0gICAqIEFkZCB2YWx1ZSB0byB0aGUgbGlzdCBib3gKLSAgICovCi0gIGNsYXNzIEJyb3dzZUJ1dHRvbkxpc3RlbmVyIGltcGxlbWVudHMgU2VsZWN0aW9uTGlzdGVuZXIKLSAgewotICAgIHB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotICAgIHt9Ci0KLSAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotICAgIHt9Ci0gIH0KLQotICAvKioKLSAgICogQWRkIHZhbHVlIHRvIHRoZSBsaXN0IGJveAotICAgKi8KLSAgY2xhc3MgU2VhcmNoVURESUJ1dHRvbkxpc3RlbmVyIGltcGxlbWVudHMgU2VsZWN0aW9uTGlzdGVuZXIKLSAgewotICAgIHB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotICAgIHt9Ci0KLSAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotICAgIHt9Ci0gIH0KLSAgLyoqCi0gICAqIEFkZCB2YWx1ZSB0byB0aGUgZmlsZSBmaWVsZC4KLSAgICovCi0gIGNsYXNzIFRleHRCb3hMaXN0ZW5lciBpbXBsZW1lbnRzIE1vZGlmeUxpc3RlbmVyCi0gIHsKLQotICAgIC8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lciNtb2RpZnlUZXh0KG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5RXZlbnQpCi0JICovCi0gICAgcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBlKQotICAgIHsKLSAgICAgIGdldENvbnRhaW5lcigpLnVwZGF0ZUJ1dHRvbnMoKTsKLQotICAgIH0KLQotICB9Ci0gIHByaXZhdGUgY2xhc3MgV1NETEVsZW1lbnQKLSAgewotICAgIHByaXZhdGUgU3RyaW5nIG5hbWU7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgbmFtZXNwYWNlOwotICAgIHByaXZhdGUgU3RyaW5nIHBhcmVudDsKLQotICAgIHB1YmxpYyBXU0RMRWxlbWVudChTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIHBhcmVudCkKLSAgICB7Ci0gICAgICB0aGlzLm5hbWUgPSBuYW1lOwotICAgICAgdGhpcy5uYW1lc3BhY2UgPSBuYW1lc3BhY2U7Ci0gICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotICAgIHsKLSAgICAgIHJldHVybiBuYW1lOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlKCkKLSAgICB7Ci0gICAgICByZXR1cm4gbmFtZXNwYWNlOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0UGFyZW50TmFtZSgpCi0gICAgewotICAgICAgcmV0dXJuIHBhcmVudDsKLSAgICB9Ci0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIAotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ1BhZ2Ujc2V0VmlzaWJsZShib29sZWFuKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VmlzaWJsZShib29sZWFuIHZpc2libGUpCi0gIHsKLSAgICByZXNldEVsZW1lbnRzKCk7Ci0gICAgc3VwZXIuc2V0VmlzaWJsZSh2aXNpYmxlKTsKLSAgICBpZiAodmlzaWJsZSkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgV1NETEZhY3RvcnkgZmFjdG9yeSA9IFdTRExGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0gICAgICAgIFdTRExSZWFkZXIgcmVhZGVyID0gZmFjdG9yeS5uZXdXU0RMUmVhZGVyKCk7Ci0gICAgICAgIERlZmluaXRpb24gZGVmRWxlbSA9IHJlYWRlci5yZWFkV1NETCgoKFZhbGlkYXRpb25XaXphcmQpIGdldFdpemFyZCgpKS5nZXRXU0RMRmlsZSgpKTsKLSAgICAgICAgUU5hbWUgZGVmUU5hbWUgPSBkZWZFbGVtLmdldFFOYW1lKCk7Ci0gICAgICAgIFN0cmluZyBkZWZuYW1lID0gIiI7Ci0gICAgICAgIGlmIChkZWZRTmFtZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgZGVmbmFtZSA9IGRlZlFOYW1lLmdldExvY2FsUGFydCgpOwotICAgICAgICB9Ci0gICAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBkZWZFbGVtLmdldFRhcmdldE5hbWVzcGFjZSgpOwotCi0gICAgICAgIC8vIHJlZ2lzdGVyIHRoZSBwb3J0cwotICAgICAgICBNYXAgc2Vydm1hcCA9IGRlZkVsZW0uZ2V0U2VydmljZXMoKTsKLSAgICAgICAgaWYgKHNlcnZtYXAgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIENvbGxlY3Rpb24gc2VydnMgPSBzZXJ2bWFwLnZhbHVlcygpOwotICAgICAgICAgIGlmIChzZXJ2cyAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIEl0ZXJhdG9yIHNlcnZJdGVyID0gc2VydnMuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgIHdoaWxlIChzZXJ2SXRlci5oYXNOZXh0KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKSBzZXJ2SXRlci5uZXh0KCk7Ci0gICAgICAgICAgICAgIFN0cmluZyBzZXJ2bmFtZSA9IHNlcnZpY2UuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLQotICAgICAgICAgICAgICBNYXAgcG9ydG1hcCA9IHNlcnZpY2UuZ2V0UG9ydHMoKTsKLSAgICAgICAgICAgICAgaWYgKHBvcnRtYXAgIT0gbnVsbCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIENvbGxlY3Rpb24gcG9ydHMgPSBwb3J0bWFwLnZhbHVlcygpOwotICAgICAgICAgICAgICAgIGlmIChwb3J0cyAhPSBudWxsKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIEl0ZXJhdG9yIHBvcnRJdGVyID0gcG9ydHMuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgICAgICAgIHdoaWxlIChwb3J0SXRlci5oYXNOZXh0KCkpCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFBvcnQgcG9ydCA9IChQb3J0KSBwb3J0SXRlci5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gcG9ydC5nZXROYW1lKCk7Ci0gICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoVmFsaWRhdGlvbldpemFyZFdTRExDb250ZW50UGFnZS5QT1JULCBuYW1lLCBuYW1lc3BhY2UsIHNlcnZuYW1lKTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBSZWdpc3RlciB0aGUgQmluZGluZ3MKLSAgICAgICAgTWFwIGJpbmRpbmdtYXAgPSBkZWZFbGVtLmdldEJpbmRpbmdzKCk7Ci0gICAgICAgIGlmIChiaW5kaW5nbWFwICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBDb2xsZWN0aW9uIGJpbmRpbmdzID0gYmluZGluZ21hcC52YWx1ZXMoKTsKLSAgICAgICAgICBpZiAoYmluZGluZ3MgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBJdGVyYXRvciBiaW5kSXRlciA9IGJpbmRpbmdzLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICB3aGlsZSAoYmluZEl0ZXIuaGFzTmV4dCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZykgYmluZEl0ZXIubmV4dCgpOwotICAgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IGJpbmRpbmcuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLSAgICAgICAgICAgICAgYWRkRWxlbWVudChWYWxpZGF0aW9uV2l6YXJkV1NETENvbnRlbnRQYWdlLkJJTkRJTkcsIG5hbWUsIG5hbWVzcGFjZSwgZGVmbmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUmVnaXN0ZXIgdGhlIFBvcnRUeXBlcyBhbmQgT3BlcmF0aW9ucwotICAgICAgICBNYXAgcG9ydHR5cGVtYXAgPSBkZWZFbGVtLmdldFBvcnRUeXBlcygpOwotICAgICAgICBpZiAocG9ydHR5cGVtYXAgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIENvbGxlY3Rpb24gcG9ydHR5cGVzID0gcG9ydHR5cGVtYXAudmFsdWVzKCk7Ci0gICAgICAgICAgaWYgKHBvcnR0eXBlcyAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIEl0ZXJhdG9yIHBvcnR0eXBlSXRlciA9IHBvcnR0eXBlcy5pdGVyYXRvcigpOwotICAgICAgICAgICAgd2hpbGUgKHBvcnR0eXBlSXRlci5oYXNOZXh0KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFBvcnRUeXBlIHBvcnR0eXBlID0gKFBvcnRUeXBlKSBwb3J0dHlwZUl0ZXIubmV4dCgpOwotICAgICAgICAgICAgICBTdHJpbmcgcG9ydHR5cGVuYW1lID0gcG9ydHR5cGUuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLSAgICAgICAgICAgICAgYWRkRWxlbWVudChWYWxpZGF0aW9uV2l6YXJkV1NETENvbnRlbnRQYWdlLlBPUlRUWVBFLCBwb3J0dHlwZW5hbWUsIG5hbWVzcGFjZSwgZGVmbmFtZSk7Ci0KLSAgICAgICAgICAgICAgLy8gUmVnaXN0ZXIgdGhlIE9wZXJhdGlvbnMKLSAgICAgICAgICAgICAgTGlzdCBvcGVyYXRpb25zID0gcG9ydHR5cGUuZ2V0T3BlcmF0aW9ucygpOwotICAgICAgICAgICAgICBpZiAob3BlcmF0aW9ucyAhPSBudWxsKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSXRlcmF0b3Igb3Blckl0ZXIgPSBvcGVyYXRpb25zLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKG9wZXJJdGVyLmhhc05leHQoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gKE9wZXJhdGlvbikgb3Blckl0ZXIubmV4dCgpOwotICAgICAgICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSBvcGVyYXRpb24uZ2V0TmFtZSgpOwotICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChWYWxpZGF0aW9uV2l6YXJkV1NETENvbnRlbnRQYWdlLk9QRVJBVElPTiwgbmFtZSwgbmFtZXNwYWNlLCBwb3J0dHlwZW5hbWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBNYXAgbWVzc2FnZW1hcCA9IGRlZkVsZW0uZ2V0TWVzc2FnZXMoKTsKLSAgICAgICAgaWYgKG1lc3NhZ2VtYXAgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIENvbGxlY3Rpb24gbWVzc2FnZXMgPSBtZXNzYWdlbWFwLnZhbHVlcygpOwotICAgICAgICAgIGlmIChtZXNzYWdlcyAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIEl0ZXJhdG9yIG1lc3NJdGVyID0gbWVzc2FnZXMuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgIHdoaWxlIChtZXNzSXRlci5oYXNOZXh0KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IChNZXNzYWdlKSBtZXNzSXRlci5uZXh0KCk7Ci0gICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gbWVzc2FnZS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotICAgICAgICAgICAgICBhZGRFbGVtZW50KFZhbGlkYXRpb25XaXphcmRXU0RMQ29udGVudFBhZ2UuTUVTU0FHRSwgbmFtZSwgbmFtZXNwYWNlLCBkZWZuYW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbmFtZUNvbWJvLnJlbW92ZUFsbCgpOwotICAgICAgICBuYW1lc3BhY2VUZXh0LnNldFRleHQoIiIpOwotICAgICAgICBwYXJlbnRuYW1lVGV4dC5zZXRUZXh0KCIiKTsKLSAgICAgICAgaW50IG51bUVsZW1zID0gcG9ydHMuc2l6ZSgpOwotICAgICAgICBXU0RMRWxlbWVudFtdIGVsZW1zID0gKFdTRExFbGVtZW50W10pIHBvcnRzLnRvQXJyYXkobmV3IFdTRExFbGVtZW50W251bUVsZW1zXSk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtRWxlbXM7IGkrKykKLSAgICAgICAgewotICAgICAgICAgIG5hbWVDb21iby5hZGQoZWxlbXNbaV0uZ2V0TmFtZSgpLCBpKTsKLSAgICAgICAgICBpZiAoaSA9PSAwKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG5hbWVDb21iby5zZWxlY3QoMCk7Ci0gICAgICAgICAgICBuYW1lc3BhY2VUZXh0LnNldFRleHQoZWxlbXNbaV0uZ2V0TmFtZXNwYWNlKCkpOwotICAgICAgICAgICAgcGFyZW50bmFtZVRleHQuc2V0VGV4dChlbGVtc1tpXS5nZXRQYXJlbnROYW1lKCkpOwotCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHdzZGxQb3J0QnV0dG9uLnNldFNlbGVjdGlvbih0cnVlKTsKLSAgICAgICAgd3NkbEJpbmRpbmdCdXR0b24uc2V0U2VsZWN0aW9uKGZhbHNlKTsKLSAgICAgICAgd3NkbE1lc3NhZ2VCdXR0b24uc2V0U2VsZWN0aW9uKGZhbHNlKTsKLSAgICAgICAgd3NkbE9wZXJhdGlvbkJ1dHRvbi5zZXRTZWxlY3Rpb24oZmFsc2UpOwotICAgICAgICB3c2RsUG9ydFR5cGVCdXR0b24uc2V0U2VsZWN0aW9uKGZhbHNlKTsKLQotICAgICAgfQotICAgICAgY2F0Y2ggKFdTRExFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgLy8gVGhlIFdTREwgZmlsZSBpcyBub3QgdmFsaWQuCi0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXNldEVsZW1lbnRzKCk7Ci0gICAgfQotCi0gIH0KLQotICBjbGFzcyBQb3J0QnV0dG9uU2VsZWN0aW9uTGlzdGVuZXIgaW1wbGVtZW50cyBTZWxlY3Rpb25MaXN0ZW5lcgotICB7Ci0KLSAgICAvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXIjd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQpCi0JICovCi0gICAgcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0gICAgewotICAgICAgd2lkZ2V0U2VsZWN0ZWQoZSk7Ci0KLSAgICB9Ci0KLSAgICAvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXIjd2lkZ2V0U2VsZWN0ZWQob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudCkKLQkgKi8KLSAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotICAgIHsKLSAgICAgIG5hbWVDb21iby5yZW1vdmVBbGwoKTsKLSAgICAgIG5hbWVzcGFjZVRleHQuc2V0VGV4dCgiIik7Ci0gICAgICBwYXJlbnRuYW1lVGV4dC5zZXRUZXh0KCIiKTsKLSAgICAgIGludCBudW1FbGVtcyA9IHBvcnRzLnNpemUoKTsKLSAgICAgIFdTRExFbGVtZW50W10gZWxlbXMgPSAoV1NETEVsZW1lbnRbXSkgcG9ydHMudG9BcnJheShuZXcgV1NETEVsZW1lbnRbbnVtRWxlbXNdKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtRWxlbXM7IGkrKykKLSAgICAgIHsKLSAgICAgICAgbmFtZUNvbWJvLmFkZChlbGVtc1tpXS5nZXROYW1lKCksIGkpOwotICAgICAgICBpZiAoaSA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgbmFtZUNvbWJvLnNlbGVjdCgwKTsKLSAgICAgICAgICBuYW1lc3BhY2VUZXh0LnNldFRleHQoZWxlbXNbaV0uZ2V0TmFtZXNwYWNlKCkpOwotICAgICAgICAgIHBhcmVudG5hbWVUZXh0LnNldFRleHQoZWxlbXNbaV0uZ2V0UGFyZW50TmFtZSgpKTsKLQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gIH0KLSAgY2xhc3MgQmluZGluZ0J1dHRvblNlbGVjdGlvbkxpc3RlbmVyIGltcGxlbWVudHMgU2VsZWN0aW9uTGlzdGVuZXIKLSAgewotCi0gICAgLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyI3dpZGdldERlZmF1bHRTZWxlY3RlZChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50KQotCSAqLwotICAgIHB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotICAgIHsKLSAgICAgIHdpZGdldFNlbGVjdGVkKGUpOwotCi0gICAgfQotCi0gICAgLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyI3dpZGdldFNlbGVjdGVkKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQpCi0JICovCi0gICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAgICB7Ci0gICAgICBuYW1lQ29tYm8ucmVtb3ZlQWxsKCk7Ci0gICAgICBuYW1lc3BhY2VUZXh0LnNldFRleHQoIiIpOwotICAgICAgcGFyZW50bmFtZVRleHQuc2V0VGV4dCgiIik7Ci0gICAgICBpbnQgbnVtRWxlbXMgPSBiaW5kaW5ncy5zaXplKCk7Ci0gICAgICBXU0RMRWxlbWVudFtdIGVsZW1zID0gKFdTRExFbGVtZW50W10pIGJpbmRpbmdzLnRvQXJyYXkobmV3IFdTRExFbGVtZW50W251bUVsZW1zXSk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUVsZW1zOyBpKyspCi0gICAgICB7Ci0gICAgICAgIG5hbWVDb21iby5hZGQoZWxlbXNbaV0uZ2V0TmFtZSgpLCBpKTsKLSAgICAgICAgaWYgKGkgPT0gMCkKLSAgICAgICAgewotICAgICAgICAgIG5hbWVDb21iby5zZWxlY3QoMCk7Ci0gICAgICAgICAgbmFtZXNwYWNlVGV4dC5zZXRUZXh0KGVsZW1zW2ldLmdldE5hbWVzcGFjZSgpKTsKLSAgICAgICAgICBwYXJlbnRuYW1lVGV4dC5zZXRUZXh0KGVsZW1zW2ldLmdldFBhcmVudE5hbWUoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgIH0KLQotICB9Ci0gIGNsYXNzIFBvcnRUeXBlQnV0dG9uU2VsZWN0aW9uTGlzdGVuZXIgaW1wbGVtZW50cyBTZWxlY3Rpb25MaXN0ZW5lcgotICB7Ci0KLSAgICAvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXIjd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQpCi0JICovCi0gICAgcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0gICAgewotICAgICAgd2lkZ2V0U2VsZWN0ZWQoZSk7Ci0KLSAgICB9Ci0KLSAgICAvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXIjd2lkZ2V0U2VsZWN0ZWQob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudCkKLQkgKi8KLSAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotICAgIHsKLSAgICAgIG5hbWVDb21iby5yZW1vdmVBbGwoKTsKLSAgICAgIG5hbWVzcGFjZVRleHQuc2V0VGV4dCgiIik7Ci0gICAgICBwYXJlbnRuYW1lVGV4dC5zZXRUZXh0KCIiKTsKLSAgICAgIGludCBudW1FbGVtcyA9IHBvcnR0eXBlcy5zaXplKCk7Ci0gICAgICBXU0RMRWxlbWVudFtdIGVsZW1zID0gKFdTRExFbGVtZW50W10pIHBvcnR0eXBlcy50b0FycmF5KG5ldyBXU0RMRWxlbWVudFtudW1FbGVtc10pOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1FbGVtczsgaSsrKQotICAgICAgewotICAgICAgICBuYW1lQ29tYm8uYWRkKGVsZW1zW2ldLmdldE5hbWUoKSwgaSk7Ci0gICAgICAgIGlmIChpID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICBuYW1lQ29tYm8uc2VsZWN0KDApOwotICAgICAgICAgIG5hbWVzcGFjZVRleHQuc2V0VGV4dChlbGVtc1tpXS5nZXROYW1lc3BhY2UoKSk7Ci0gICAgICAgICAgcGFyZW50bmFtZVRleHQuc2V0VGV4dChlbGVtc1tpXS5nZXRQYXJlbnROYW1lKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICB9Ci0KLSAgfQotICBjbGFzcyBPcGVyYXRpb25CdXR0b25TZWxlY3Rpb25MaXN0ZW5lciBpbXBsZW1lbnRzIFNlbGVjdGlvbkxpc3RlbmVyCi0gIHsKLQotICAgIC8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lciN3aWRnZXREZWZhdWx0U2VsZWN0ZWQob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudCkKLQkgKi8KLSAgICBwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAgICB7Ci0gICAgICB3aWRnZXRTZWxlY3RlZChlKTsKLQotICAgIH0KLQotICAgIC8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lciN3aWRnZXRTZWxlY3RlZChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50KQotCSAqLwotICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0gICAgewotICAgICAgbmFtZUNvbWJvLnJlbW92ZUFsbCgpOwotICAgICAgbmFtZXNwYWNlVGV4dC5zZXRUZXh0KCIiKTsKLSAgICAgIHBhcmVudG5hbWVUZXh0LnNldFRleHQoIiIpOwotICAgICAgaW50IG51bUVsZW1zID0gb3BlcmF0aW9ucy5zaXplKCk7Ci0gICAgICBXU0RMRWxlbWVudFtdIGVsZW1zID0gKFdTRExFbGVtZW50W10pIG9wZXJhdGlvbnMudG9BcnJheShuZXcgV1NETEVsZW1lbnRbbnVtRWxlbXNdKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtRWxlbXM7IGkrKykKLSAgICAgIHsKLSAgICAgICAgbmFtZUNvbWJvLmFkZChlbGVtc1tpXS5nZXROYW1lKCksIGkpOwotICAgICAgICBpZiAoaSA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgbmFtZUNvbWJvLnNlbGVjdCgwKTsKLSAgICAgICAgICBuYW1lc3BhY2VUZXh0LnNldFRleHQoZWxlbXNbaV0uZ2V0TmFtZXNwYWNlKCkpOwotICAgICAgICAgIHBhcmVudG5hbWVUZXh0LnNldFRleHQoZWxlbXNbaV0uZ2V0UGFyZW50TmFtZSgpKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgfQotCi0gIH0KLSAgY2xhc3MgTWVzc2FnZUJ1dHRvblNlbGVjdGlvbkxpc3RlbmVyIGltcGxlbWVudHMgU2VsZWN0aW9uTGlzdGVuZXIKLSAgewotCi0gICAgLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyI3dpZGdldERlZmF1bHRTZWxlY3RlZChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50KQotCSAqLwotICAgIHB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotICAgIHsKLSAgICAgIHdpZGdldFNlbGVjdGVkKGUpOwotCi0gICAgfQotCi0gICAgLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyI3dpZGdldFNlbGVjdGVkKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQpCi0JICovCi0gICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAgICB7Ci0gICAgICBuYW1lQ29tYm8ucmVtb3ZlQWxsKCk7Ci0gICAgICBuYW1lc3BhY2VUZXh0LnNldFRleHQoIiIpOwotICAgICAgcGFyZW50bmFtZVRleHQuc2V0VGV4dCgiIik7Ci0gICAgICBpbnQgbnVtRWxlbXMgPSBtZXNzYWdlcy5zaXplKCk7Ci0gICAgICBXU0RMRWxlbWVudFtdIGVsZW1zID0gKFdTRExFbGVtZW50W10pIG1lc3NhZ2VzLnRvQXJyYXkobmV3IFdTRExFbGVtZW50W251bUVsZW1zXSk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUVsZW1zOyBpKyspCi0gICAgICB7Ci0gICAgICAgIG5hbWVDb21iby5hZGQoZWxlbXNbaV0uZ2V0TmFtZSgpLCBpKTsKLSAgICAgICAgaWYgKGkgPT0gMCkKLSAgICAgICAgewotICAgICAgICAgIG5hbWVDb21iby5zZWxlY3QoMCk7Ci0gICAgICAgICAgbmFtZXNwYWNlVGV4dC5zZXRUZXh0KGVsZW1zW2ldLmdldE5hbWVzcGFjZSgpKTsKLSAgICAgICAgICBwYXJlbnRuYW1lVGV4dC5zZXRUZXh0KGVsZW1zW2ldLmdldFBhcmVudE5hbWUoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgIH0KLQotICB9Ci0KLSAgY2xhc3MgTmFtZVNlbGVjdGlvbkxpc3RlbmVyIGltcGxlbWVudHMgU2VsZWN0aW9uTGlzdGVuZXIKLSAgewotCi0gICAgLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyI3dpZGdldERlZmF1bHRTZWxlY3RlZChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50KQotCSAqLwotICAgIHB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotICAgIHsKLSAgICAgIHdpZGdldFNlbGVjdGVkKGUpOwotCi0gICAgfQotCi0gICAgLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyI3dpZGdldFNlbGVjdGVkKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQpCi0JICovCi0gICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAgICB7Ci0gICAgICBpbnQgc2VsZWN0aW9uID0gKChDb21ibykgZS5nZXRTb3VyY2UoKSkuZ2V0U2VsZWN0aW9uSW5kZXgoKTsKLSAgICAgIFN0cmluZyB0eXBlID0gZ2V0VHlwZSgpOwotICAgICAgV1NETEVsZW1lbnQgZWxlbSA9IG51bGw7Ci0gICAgICBpZiAodHlwZS5lcXVhbHMoUE9SVCkpCi0gICAgICB7Ci0gICAgICAgIGVsZW0gPSAoV1NETEVsZW1lbnQpIHBvcnRzLmdldChzZWxlY3Rpb24pOwotICAgICAgfQotICAgICAgZWxzZSBpZiAodHlwZS5lcXVhbHMoQklORElORykpCi0gICAgICB7Ci0gICAgICAgIGVsZW0gPSAoV1NETEVsZW1lbnQpIGJpbmRpbmdzLmdldChzZWxlY3Rpb24pOwotICAgICAgfQotICAgICAgZWxzZSBpZiAodHlwZS5lcXVhbHMoUE9SVFRZUEUpKQotICAgICAgewotICAgICAgICBlbGVtID0gKFdTRExFbGVtZW50KSBwb3J0dHlwZXMuZ2V0KHNlbGVjdGlvbik7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmICh0eXBlLmVxdWFscyhPUEVSQVRJT04pKQotICAgICAgewotICAgICAgICBlbGVtID0gKFdTRExFbGVtZW50KSBvcGVyYXRpb25zLmdldChzZWxlY3Rpb24pOwotICAgICAgfQotICAgICAgZWxzZSBpZiAodHlwZS5lcXVhbHMoTUVTU0FHRSkpCi0gICAgICB7Ci0gICAgICAgIGVsZW0gPSAoV1NETEVsZW1lbnQpIG1lc3NhZ2VzLmdldChzZWxlY3Rpb24pOwotICAgICAgfQotCi0gICAgICBpZiAoZWxlbSAhPSBudWxsKQotICAgICAgewotICAgICAgICBuYW1lc3BhY2VUZXh0LnNldFRleHQoZWxlbS5nZXROYW1lc3BhY2UoKSk7Ci0gICAgICAgIHBhcmVudG5hbWVUZXh0LnNldFRleHQoZWxlbS5nZXRQYXJlbnROYW1lKCkpOwotICAgICAgfQotICAgIH0KLQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kudWkvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdWkvaW50ZXJuYWwvd2l6YXJkcy9WYWxpZGF0aW9uV2l6YXJkV1NETFBhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC93aXphcmRzL1ZhbGlkYXRpb25XaXphcmRXU0RMUGFnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDU5MzE4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS91aS9pbnRlcm5hbC93aXphcmRzL1ZhbGlkYXRpb25XaXphcmRXU0RMUGFnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzczICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwud2l6YXJkczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpLmludGVybmFsLmRpYWxvZ3MuU2VsZWN0U2luZ2xlRmlsZURpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kudWkuaW50ZXJuYWwuUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS51aS5pbnRlcm5hbC5XU0lVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkZpbGVEaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLQotLyoqCi0gKiBXaXphcmQgcGFnZSB0aGF0IGFsbG93cyB0aGUgdXNlciB0byBzcGVjaWZ5IHRoZSBsb2NhdGlvbiBvZiB0aGUgCi0gKiBXU0RMIGRvY3VtZW50IGZvciB0aGUgV2ViIHNlcnZpY2UuCi0gKiAKLSAqIEBhdXRob3IgRGF2aWQgTGF1em9uLCBJQk0KLSAqIEBhdXRob3IgTGF3cmVuY2UgTWFuZGVsLCBJQk0KLSAqLwotCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGlvbldpemFyZFdTRExQYWdlIGV4dGVuZHMgV2l6YXJkUGFnZSBpbXBsZW1lbnRzIFNlbGVjdGlvbkxpc3RlbmVyCi17Ci0KLSAgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uOwotCi0gIHByb3RlY3RlZCBib29sZWFuIHdzZGxpbnZhbGlkID0gZmFsc2U7Ci0gIC8qKgotICAgKiBBY2Nlc3MgdG8gdGhlIGluY2x1ZGVXU0RMIGZsYWcuICAKLSAgICovCi0gIHByb3RlY3RlZCBCdXR0b24gaW5jbHVkZVdTRExCdXR0b247Ci0KLSAgLyoqCi0gICAqIEFjY2VzcyB0byB0aGUgd3NkbCBkb2N1bWVudCBncm91cC4KLSAgICovCi0gIHByb3RlY3RlZCBHcm91cCBkb2N1bWVudEdyb3VwOwotICBwcm90ZWN0ZWQgVGV4dCBkb2N1bWVudExvY2F0aW9uVGV4dDsKLSAgcHJvdGVjdGVkIENvbWJvIGZpbGVGaWVsZDsKLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKiAKLSAgICogQHBhcmFtIHNlbGVjdGlvbjogc2VsZWN0aW9uIGluIHRoZSBSZXNvdXJjZSBOYXZpZ2F0b3Igdmlldy4KLSAgICovCi0gIHB1YmxpYyBWYWxpZGF0aW9uV2l6YXJkV1NETFBhZ2UoSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uKQotICB7Ci0gICAgc3VwZXIoIlZhbGlkYXRpb25XaXphcmRXU0RMUGFnZSIpOwotICAgIHRoaXMuc2VsZWN0aW9uID0gc2VsZWN0aW9uOwotICAgIHRoaXMuc2V0VGl0bGUoTWVzc2FnZXMuV1NETF9QQUdFX1NFTEVDVF9XU0RMX0ZJTEVOQU1FX0hFQURJTkcpOwotICAgIHRoaXMuc2V0RGVzY3JpcHRpb24oTWVzc2FnZXMuV1NETF9QQUdFX1NFTEVDVF9XU0RMX0ZJTEVOQU1FX0VYUEwpOwotICB9Ci0KLSAgLyoqCi0gICAqIEFsd2F5cyByZXR1cm5zIHRydWUuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1BhZ2VDb21wbGV0ZSgpCi0gIHsKLSAgICBpZiAoaW5jbHVkZVdTRExGaWxlKCkpCi0gICAgewotCi0gICAgICBpZiAoZmlsZUZpZWxkLmdldFRleHQoKSA9PSBudWxsIHx8IGZpbGVGaWVsZC5nZXRUZXh0KCkuZXF1YWxzKCIiKSB8fCB3c2RsaW52YWxpZCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qCi0gICAqIENyZWF0ZXMgdGhlIHRvcCBsZXZlbCBjb250cm9sIGZvciB0aGlzIHBhZ2UgdW5kZXIgdGhlIGdpdmVuIHBhcmVudAotICAgKiBjb21wb3NpdGUuIEltcGxlbWVudG9ycyBhcmUgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgdGhlIGNyZWF0ZWQKLSAgICogY29udHJvbCBjYW4gYmUgYWNjZXNzZWQgdmlhIGdldENvbnRyb2wKLSAgICogCi0gICAqIEBwYXJhbSBwYXJlbnQgLSB0aGUgcGFyZW50IGNvbXBvc2l0ZQotICAgKi8KLSAgcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KQotICB7Ci0gICAgQ29tcG9zaXRlIGJhc2UgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotICAgIGJhc2Uuc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KCkpOwotICAgIEdyaWREYXRhIGRhdGE7Ci0KLSAgICAvLyBhZGQgaW5jbHVkZVdTREwgZmxhZwotICAgIGluY2x1ZGVXU0RMQnV0dG9uID0gbmV3IEJ1dHRvbihiYXNlLCBTV1QuQ0hFQ0spOwotICAgIGluY2x1ZGVXU0RMQnV0dG9uLnNldFRleHQoTWVzc2FnZXMuV1NETF9QQUdFX0lOQ0xVREVfV1NETF9CVVRUT04pOwotICAgIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICBkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIGluY2x1ZGVXU0RMQnV0dG9uLnNldExheW91dERhdGEoZGF0YSk7Ci0gICAgaW5jbHVkZVdTRExCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0gICAgaW5jbHVkZVdTRExCdXR0b24uc2V0U2VsZWN0aW9uKGZhbHNlKTsKLQotICAgIC8vIGNyZWF0ZSBhIFdTREwgZG9jdW1lbnQgZ3JvdXAKLSAgICBkb2N1bWVudEdyb3VwID0gbmV3IEdyb3VwKGJhc2UsIFNXVC5TSEFET1dfRVRDSEVEX0lOKTsKLSAgICBkYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICBkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOwotICAgIGRvY3VtZW50R3JvdXAuc2V0TGF5b3V0RGF0YShkYXRhKTsKLSAgICBHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgbGF5b3V0Lm51bUNvbHVtbnMgPSAxOwotICAgIGRvY3VtZW50R3JvdXAuc2V0TGF5b3V0KGxheW91dCk7Ci0gICAgZG9jdW1lbnRHcm91cC5zZXRWaXNpYmxlKGZhbHNlKTsKLQotICAgIGNyZWF0ZURvY3VtZW50R3JvdXBDb250ZW50cyhkb2N1bWVudEdyb3VwKTsKLQotICAgIHNldENvbnRyb2woYmFzZSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVEb2N1bWVudEdyb3VwQ29udGVudHMoQ29tcG9zaXRlIGRvY3VtZW50R3JvdXApCi0gIHsKLSAgICAvL3JhZGlvIGJ1dHRvbnMnIGNvbnRhaW5lcgotICAgIENvbXBvc2l0ZSBiYXNlUGFuZWwgPSBuZXcgQ29tcG9zaXRlKGRvY3VtZW50R3JvdXAsIFNXVC5OT05FKTsKLSAgICBHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgbGF5b3V0Lm51bUNvbHVtbnMgPSAyOwotICAgIGxheW91dC5tYWtlQ29sdW1uc0VxdWFsV2lkdGggPSBmYWxzZTsKLSAgICBsYXlvdXQubWFyZ2luV2lkdGggPSAwOwotICAgIGJhc2VQYW5lbC5zZXRMYXlvdXQobGF5b3V0KTsKLSAgICBHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICBkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOwotICAgIGJhc2VQYW5lbC5zZXRMYXlvdXREYXRhKGRhdGEpOwotCi0gICAgQ29tcG9zaXRlIGdyb3VwMSA9IG5ldyBDb21wb3NpdGUoYmFzZVBhbmVsLCBTV1QuTk9ORSk7Ci0gICAgZ3JvdXAxLnNldEZvbnQoZ2V0Rm9udCgpKTsKLSAgICBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotICAgIGxheW91dC5udW1Db2x1bW5zID0gMTsKLSAgICBncm91cDEuc2V0TGF5b3V0KGxheW91dCk7Ci0gICAgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgIGRhdGEudmVydGljYWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIGRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgZ3JvdXAxLnNldExheW91dERhdGEoZGF0YSk7Ci0KLSAgICBMYWJlbCBkb2N1bWVudExhYmVsID0gbmV3IExhYmVsKGdyb3VwMSwgU1dULkxFRlQpOwotICAgIGRvY3VtZW50TGFiZWwuc2V0VGV4dChNZXNzYWdlcy5XU0RMX1BBR0VfSU5DTFVERV9XU0RMX0xBQkVMKTsKLSAgICBkYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICBkb2N1bWVudExhYmVsLnNldExheW91dERhdGEoZGF0YSk7Ci0gICAgLyoqCi0JICogTGFiZWwgbGFiZWwgPSBuZXcgTGFiZWwoYmFzZVBhbmVsLCBTV1QuTEVGVCk7IGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKLQkgKiBkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOyBkYXRhLmhvcml6b250YWxTcGFuID0gMTsKLQkgKiBsYWJlbC5zZXRMYXlvdXREYXRhKGRhdGEpOwotCSAqLwotICAgIGZpbGVGaWVsZCA9IG5ldyBDb21ibyhncm91cDEsIFNXVC5EUk9QX0RPV04pOwotICAgIFN0cmluZ1tdIHdzZGxsb2NhdGlvbnMgPSAoKFZhbGlkYXRpb25XaXphcmQpIGdldFdpemFyZCgpKS5nZXRXU0RMTG9jYXRpb25zKCk7Ci0gICAgaWYod3NkbGxvY2F0aW9ucyAhPSBudWxsKQotICAgIHsKLSAgICAgIGludCBudW1sb2NzID0gd3NkbGxvY2F0aW9ucy5sZW5ndGg7Ci0gICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbnVtbG9jczsgaSsrKQotICAgICAgewotICAgICAgCWZpbGVGaWVsZC5hZGQod3NkbGxvY2F0aW9uc1tpXSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICBkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIGRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7Ci0gICAgZGF0YS52ZXJ0aWNhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgZGF0YS5ncmFiRXhjZXNzVmVydGljYWxTcGFjZSA9IHRydWU7Ci0gICAgZGF0YS53aWR0aEhpbnQgPSAzMDsKLSAgICBmaWxlRmllbGQuc2V0TGF5b3V0RGF0YShkYXRhKTsKLSAgICBmaWxlRmllbGQuYWRkTW9kaWZ5TGlzdGVuZXIobmV3IEZpbGVGaWVsZExpc3RlbmVyKCkpOwotCi0gICAgTGFiZWwgd3NkbExhYmVsID0gbmV3IExhYmVsKGdyb3VwMSwgU1dULkxFRlQpOwotICAgIHdzZGxMYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLldTRExfUEFHRV9WQUxJRF9XU0RMX0xBQkVMKTsKLSAgICBkYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICBkb2N1bWVudExhYmVsLnNldExheW91dERhdGEoZGF0YSk7Ci0KLSAgICAvLyBkb2N1bWVudExvY2F0aW9uVGV4dCA9IG5ldyBUZXh0KGRvY3VtZW50R3JvdXAsIFNXVC5TSU5HTEUgfCBTV1QuQk9SREVSKTsKLSAgICAvLyBkYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgLy8gZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICAvLyBkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOwotICAgIC8vIGRhdGEud2lkdGhIaW50ID0gMzA7Ci0gICAgLy8gZG9jdW1lbnRMb2NhdGlvblRleHQuc2V0TGF5b3V0RGF0YShkYXRhKTsKLQotICAgIENvbXBvc2l0ZSBncm91cCA9IG5ldyBDb21wb3NpdGUoYmFzZVBhbmVsLCBTV1QuTk9ORSk7Ci0gICAgZ3JvdXAuc2V0Rm9udChnZXRGb250KCkpOwotICAgIGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0gICAgbGF5b3V0Lm51bUNvbHVtbnMgPSAxOwotICAgIGdyb3VwLnNldExheW91dChsYXlvdXQpOwotICAgIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKLSAgICBkYXRhLnZlcnRpY2FsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICBkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgIGdyb3VwLnNldExheW91dERhdGEoZGF0YSk7Ci0KLSAgICBCdXR0b24gd29ya3NwYWNlQnV0dG9uID0gbmV3IEJ1dHRvbihncm91cCwgU1dULlBVU0gpOwotICAgIHdvcmtzcGFjZUJ1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzLldTRExfUEFHRV9XT1JLQkVOQ0hfQlVUVE9OKTsKLSAgICBkYXRhID0gbmV3IEdyaWREYXRhKCk7Ci0gICAgZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLSAgICB3b3Jrc3BhY2VCdXR0b24uc2V0TGF5b3V0RGF0YShkYXRhKTsKLSAgICB3b3Jrc3BhY2VCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFdvcmtzcGFjZUJ1dHRvbkxpc3RlbmVyKCkpOwotCi0gICAgQnV0dG9uIGJyb3dzZUJ1dHRvbiA9IG5ldyBCdXR0b24oZ3JvdXAsIFNXVC5QVVNIKTsKLSAgICBicm93c2VCdXR0b24uc2V0VGV4dChNZXNzYWdlcy5XU0RMX1BBR0VfQlJPV1NFX0JVVFRPTik7Ci0gICAgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgIGRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgYnJvd3NlQnV0dG9uLnNldExheW91dERhdGEoZGF0YSk7Ci0gICAgYnJvd3NlQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBCcm93c2VCdXR0b25MaXN0ZW5lcigpKTsKLQotICAgIC8vIEJ1dHRvbiBzZWFyY2hVRERJQnV0dG9uID0gbmV3IEJ1dHRvbihncm91cCwgU1dULlBVU0gpOwotICAgIC8vIHNlYXJjaFVERElCdXR0b24uc2V0VGV4dChNZXNzYWdlcy4oIl9VSV9XSVpBUkRfVl9TRUFSQ0hfVURESV9CVVRUT04iKSk7Ci0gICAgLy8gZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgIC8vIGRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0gICAgLy8gc2VhcmNoVURESUJ1dHRvbi5zZXRMYXlvdXREYXRhKGRhdGEpOwotICAgIC8vIHNlYXJjaFVERElCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlYXJjaFVERElCdXR0b25MaXN0ZW5lcigpKTsKLQotICAgIHJldHVybiBkb2N1bWVudEdyb3VwOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaW5jbHVkZVdTRExGaWxlKCkKLSAgewotICAgIHJldHVybiBpbmNsdWRlV1NETEJ1dHRvbi5nZXRTZWxlY3Rpb24oKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V1NETEZpbGUoKQotICB7Ci0gICAgcmV0dXJuIGZpbGVGaWVsZC5nZXRUZXh0KCk7Ci0gIH0KLQotICAvKioKLSAgICogQWx3YXlzIHJldHVybiB0cnVlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gcGVyZm9ybUZpbmlzaCgpCi0gIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBTZW50IHdoZW4gZGVmYXVsdCBzZWxlY3Rpb24gb2NjdXJzIGluIHRoZSBjb250cm9sLgotICAgKiAKLSAgICogQHBhcmFtIGUgLQotICAgKiAgICAgICAgICAgIGFuIGV2ZW50IGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNlbGVjdGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0gIHt9Ci0KLSAgLyoqCi0gICAqIEhhbmRsZXMgdGhlIGluY2x1ZGVXU0RMIGNoZWNrYm94LiBTZW50IHdoZW4gc2VsZWN0aW9uIG9jY3VycyBpbiB0aGUKLSAgICogY29udHJvbC4KLSAgICogCi0gICAqIEBwYXJhbSBlIC0KLSAgICogICAgICAgICAgICBhbiBldmVudCBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzZWxlY3Rpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0gIHsKLSAgICBpZiAoZS53aWRnZXQgPT0gaW5jbHVkZVdTRExCdXR0b24pCi0gICAgewotICAgICAgaWYgKGluY2x1ZGVXU0RMQnV0dG9uLmdldFNlbGVjdGlvbigpKQotICAgICAgewotICAgICAgICBkb2N1bWVudEdyb3VwLnNldFZpc2libGUodHJ1ZSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGRvY3VtZW50R3JvdXAuc2V0VmlzaWJsZShmYWxzZSk7Ci0gICAgICB9Ci0gICAgICBnZXRDb250YWluZXIoKS51cGRhdGVCdXR0b25zKCk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0V1NETEludmFsaWQoKQotICB7Ci0gICAgd3NkbGludmFsaWQgPSB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIEFkZCB2YWx1ZSB0byB0aGUgbGlzdCBib3gKLSAgICovCi0gIGNsYXNzIFdvcmtzcGFjZUJ1dHRvbkxpc3RlbmVyIGltcGxlbWVudHMgU2VsZWN0aW9uTGlzdGVuZXIKLSAgewotICAgIHB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotICAgIHt9Ci0KLSAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotICAgIHsKLSAgICAgIFNlbGVjdFNpbmdsZUZpbGVEaWFsb2cgZGlhbG9nID0gbmV3IFNlbGVjdFNpbmdsZUZpbGVEaWFsb2coZ2V0U2hlbGwoKSwgc2VsZWN0aW9uLCBmYWxzZSk7Ci0gICAgICBkaWFsb2cuYWRkRmlsdGVyRXh0ZW5zaW9ucyhuZXcgU3RyaW5nW10geyAiLndzZGwiIH0pOwotICAgICAgZGlhbG9nLmNyZWF0ZSgpOwotICAgICAgZGlhbG9nLmdldFNoZWxsKCkuc2V0VGV4dChNZXNzYWdlcy5XU0RMX1BBR0VfRklMRV9TSEVMTF9URVhUKTsKLSAgICAgIGRpYWxvZy5zZXRUaXRsZShNZXNzYWdlcy5XU0RMX1BBR0VfRklMRV9USVRMRSk7Ci0gICAgICBkaWFsb2cuc2V0TWVzc2FnZShNZXNzYWdlcy5XU0RMX1BBR0VfRklMRV9ERVNDUklQVElPTik7Ci0gICAgICBkaWFsb2cuc2V0VGl0bGVJbWFnZShXU0lVSVBsdWdpbi5nZXRSZXNvdXJjZUltYWdlKFJlc291cmNlLlZBTElEQVRFX1dTSV9MT0dGSUxFX1dJWikpOwotICAgICAgCi0gICAgICBpbnQgcmVzdWx0ID0gZGlhbG9nLm9wZW4oKTsKLQotICAgICAgaWYgKHJlc3VsdCA9PSBXaW5kb3cuT0spCi0gICAgICB7Ci0gICAgICAgIElGaWxlIGN1cnJlbnRJRmlsZSA9IGRpYWxvZy5nZXRGaWxlKCk7Ci0gICAgICAgIGlmIChjdXJyZW50SUZpbGUgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGZpbGVGaWVsZC5hZGQoY3VycmVudElGaWxlLmdldExvY2F0aW9uKCkudG9TdHJpbmcoKSwgMCk7Ci0gICAgICAgICAgZmlsZUZpZWxkLnNlbGVjdCgwKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBBZGQgdmFsdWUgdG8gdGhlIGxpc3QgYm94Ci0gICAqLwotICBjbGFzcyBCcm93c2VCdXR0b25MaXN0ZW5lciBpbXBsZW1lbnRzIFNlbGVjdGlvbkxpc3RlbmVyCi0gIHsKLSAgICBwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAgICB7fQotCi0gICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAgICB7Ci0gICAgICBGaWxlRGlhbG9nIGRpYWxvZyA9IG5ldyBGaWxlRGlhbG9nKGdldFNoZWxsKCkpOwotICAgICAgZGlhbG9nLnNldEZpbHRlckV4dGVuc2lvbnMobmV3IFN0cmluZ1tdIHsgIioud3NkbCIgfSk7Ci0gICAgICBTdHJpbmcgc2VsZWN0aW9uID0gZGlhbG9nLm9wZW4oKTsKLSAgICAgIGlmIChzZWxlY3Rpb24gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZmlsZUZpZWxkLmFkZChzZWxlY3Rpb24sIDApOwotICAgICAgICBmaWxlRmllbGQuc2VsZWN0KDApOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBBZGQgdmFsdWUgdG8gdGhlIGxpc3QgYm94Ci0gICAqLwotICAvLyBjbGFzcyBTZWFyY2hVRERJQnV0dG9uTGlzdGVuZXIgaW1wbGVtZW50cyBTZWxlY3Rpb25MaXN0ZW5lcgotICAvLyB7Ci0gIC8vICBwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLSAgLy8gIHt9Ci0gIC8vCi0gIC8vICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotICAvLyAgewotICAvLyAgICBTdHJpbmcgdGl0bGUgPSAiSW5mb3JtYXRpb24iOwotICAvLyAgICBTdHJpbmcgbWVzc2FnZSA9ICJUaGUgY2hvc2VuIG9wZXJhdGlvbiBpcyBub3QgY3VycmVudGx5IGF2YWlsYWJsZS4iOwotICAvLyAgICBNZXNzYWdlRGlhbG9nLm9wZW5JbmZvcm1hdGlvbihEaXNwbGF5LmdldERlZmF1bHQoKS5nZXRBY3RpdmVTaGVsbCgpLCB0aXRsZSwgbWVzc2FnZSk7Ci0gIC8vICB9Ci0gIC8vfQotCi0gIC8qKgotICAgKiBBZGQgdmFsdWUgdG8gdGhlIGZpbGUgZmllbGQuCi0gICAqLwotICBjbGFzcyBGaWxlRmllbGRMaXN0ZW5lciBpbXBsZW1lbnRzIE1vZGlmeUxpc3RlbmVyCi0gIHsKLQotICAgIC8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lciNtb2RpZnlUZXh0KG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5RXZlbnQpCi0JICovCi0gICAgcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBlKQotICAgIHsKLSAgICAgIHdzZGxpbnZhbGlkID0gZmFsc2U7Ci0gICAgICBnZXRDb250YWluZXIoKS51cGRhdGVCdXR0b25zKCk7Ci0KLSAgICB9Ci0KLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvLmNsYXNzcGF0aCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDRkMDY0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNCI+Ci0JCTxhY2Nlc3NydWxlcz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy9hcGFjaGUveGVyY2VzLyoqIi8+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvYXBhY2hlL3htbC8qKiIvPgotCQkJPGFjY2Vzc3J1bGUga2luZD0iYWNjZXNzaWJsZSIgcGF0dGVybj0ic3VuL21pc2MvQkFTRTY0RGVjb2RlciIvPgotICAgICAgPGFjY2Vzc3J1bGUga2luZD0iYWNjZXNzaWJsZSIgcGF0dGVybj0ic3VuL21pc2MvQkFTRTY0RW5jb2RlciIvPgotICAgICAgPGFjY2Vzc3J1bGUga2luZD0iYWNjZXNzaWJsZSIgcGF0dGVybj0ic3VuL21pc2MvQ2hhcmFjdGVyRW5jb2RlciIvPgotICAgICAgPGFjY2Vzc3J1bGUga2luZD0iYWNjZXNzaWJsZSIgcGF0dGVybj0ic3VuL21pc2MvQ2hhcmFjdGVyRGVjb2RlciIvPgotICAgICAgPGFjY2Vzc3J1bGUga2luZD0iYWNjZXNzaWJsZSIgcGF0dGVybj0ic3VuL25ldC93d3cvTWVzc2FnZUhlYWRlciIvPiAgICAgICAgICAgIAotCQk8L2FjY2Vzc3J1bGVzPgotCTwvY2xhc3NwYXRoZW50cnk+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1YjE5OWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLWJpbgotdGVtcC5mb2xkZXIKLWJ1aWxkLnhtbAotd3NpLmphcgotQGRvdAotc3JjLnppcAotamF2YUNvbXBpbGVyLi4uYXJncwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLy5wcm9qZWN0IGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzYwYzFmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC53c2k8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0NzAzMmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSNXZWQgTWFyIDI5IDA0OjA4OjI2IEVTVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTkwYjQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jV2VkIE1hciAyOSAwNDowODoyNiBFU1QgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWludGVybmFsLmRlZmF1bHQuY29tcGxpYW5jZT1kZWZhdWx0CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1NGM0MTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJV9QTFVHSU5fTkFNRQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LndzaTsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjEwNS5xdWFsaWZpZXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuV1NJVGVzdFRvb2xzUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlX1BST1ZJREVSX05BTUUKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmFuYWx5emVyO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZzt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuaW1wbDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5jb21tb247eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuY29tbW9uLmltcGw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQ7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuaW1wbDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2c7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLmltcGw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvcjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yLmNvbmZpZzt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yLmNvbmZpZy5pbXBsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGU7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5pbXBsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC51ZGRpO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQ7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LmltcGw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwueHNkO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuZG9tO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5qYXhwO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5zY2hlbWE7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmRvY3VtZW50O3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5yZXBvcnQ7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLnZhbGlkYXRlLndzZGw7eC1pbnRlcm5hbDo9dHJ1ZQotUmVxdWlyZS1CdW5kbGU6ICBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7IGJ1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnY7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjAuMTAxLDEuMS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlcjtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXM7YnVuZGxlLXZlcnNpb249IlszLjIuMCwzLjQuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb247YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLndzdC53cztidW5kbGUtdmVyc2lvbj0iWzEuMC4xMDAsMS4xLjApIiwKLSBqYXZheC53c2RsO2J1bmRsZS12ZXJzaW9uPSJbMS40LjAsMS41LjApIiwKLSBvcmcudWRkaTRqO2J1bmRsZS12ZXJzaW9uPSJbMi4wLjQsMi4xLjApIiwKLSBvcmcuYXBhY2hlLmF4aXM7YnVuZGxlLXZlcnNpb249IlsxLjMuMCwyLjAuMCkiLAotIGNvbS5pYm0uaWN1O2J1bmRsZS12ZXJzaW9uPSJbMy40LjQsNC4wLjApIiwKLSBvcmcuYXBhY2hlLnhlcmNlcztidW5kbGUtdmVyc2lvbj0iWzIuOC4wLDMuMC4wKSIKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9hYm91dC5odG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGIzNmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lIDA2LCAyMDA3PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9idWlsZC5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3ZjE5MWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi1iaW4uaW5jbHVkZXMgPSAuLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwKLXNvdXJjZS4uID0gc3JjLwotamFycy5jb21waWxlLm9yZGVyID0gLgotb3V0cHV0Li4gPSBiaW4vCi1zcmMuaW5jbHVkZXMgPSBjb21wb25lbnQueG1sLFwKLSAgICAgICAgICAgICAgIGJ1aWxkLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9jb21wb25lbnQueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL2NvbXBvbmVudC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4YTJjYWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL2NvbXBvbmVudC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pjxjb21wb25lbnQgIHhtbG5zPSJodHRwOi8vZWNsaXBzZS5vcmcvd3RwL3JlbGVuZy90b29scy9jb21wb25lbnQtbW9kZWwiIG5hbWU9Im9yZy5lY2xpcHNlLndzdC53c2kiPjxkZXNjcmlwdGlvbiB1cmw9IiI+PC9kZXNjcmlwdGlvbj48Y29tcG9uZW50LWRlcGVuZHMgdW5yZXN0cmljdGVkPSJ0cnVlIj48L2NvbXBvbmVudC1kZXBlbmRzPjxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLndzdC53c2kiIGZyYWdtZW50PSJmYWxzZSIvPjxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLndzdC53c2kudWkiIGZyYWdtZW50PSJmYWxzZSIvPjwvY29tcG9uZW50PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9wbHVnaW4ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTEyZTk2Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0jIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jICAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jICAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jICAqIAotIyAgKiBDb250cmlidXRvcnM6IAotIyAgKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLV9QTFVHSU5fTkFNRSAgID0gV1NJIENvbmZvcm1hbmNlIFRvb2xzCi1fUFJPVklERVJfTkFNRSA9IEVjbGlwc2Uub3JnCi1fV1NJX1ZBTElEQVRPRV9OQU1FID0gV1MtSSBWYWxpZGF0b3IKLV9URVNUX0FTU0VSVElPTl9ET0NVTUVOVFNfTkFNRSA9IFRlc3QgQXNzZXJ0aW9uIERvY3VtZW50cwotX1JFUE9SVF9BUlRJRkFDVF9UWVBFU19OQU1FID0gUmVwb3J0IEFydGlmYWN0IFR5cGVzCi1fVUlfV1NETF9XU0lfVkFMSURBVE9SID0gV1NETCBXUy1JIFZhbGlkYXRvcgotX1VJX1dTSV9GUkFNRVdPUktfVURESV9WQUxJREFUT1IgPSBXUy1JIEZyYW1ld29yayBVRERJIFZhbGlkYXRvcgotX1VJX1dTSV9GUkFNRVdPUktfV1NETF9WQUxJREFUT1IgPSBXUy1JIEZyYW1ld29yayBXU0RMVmFsaWRhdG9yCi1fVUlfV1NJX0ZSQU1FV09SS19NRVNTQUdFX1ZBTElEQVRPUiA9IFdTLUkgRnJhbWV3b3JrIE1lc3NhZ2UgVmFsaWRhdG9yCi1fVUlfV1NJX0ZSQU1FV09SS19FTlZFTE9QRV9WQUxJREFUT1IgPSBXUy1JIEZyYW1ld29yayBFbnZlbG9wZSBWYWxpZGF0b3IKLV9VSV9XU0lfQlBfVEFEX1ZFUlNJT05TID0gV1MtSSBCYXNpYyBQcm9maWxlIFRBRCBWZXJzaW9ucwotX1VJX1dTSV9CUF9SRVBPUlRfQVJUSUZBQ1RTID0gV1MtSSBCYXNpYyBQcm9maWxlIFJlcG9ydCBBcnRpZmFjdHMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvcGx1Z2luLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjNlMmVjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLS0+IAotCi08cGx1Z2luPgotICAgPGV4dGVuc2lvbi1wb2ludCBpZD0id3NpdmFsaWRhdG9yIiBuYW1lPSIlX1dTSV9WQUxJREFUT0VfTkFNRSIgc2NoZW1hPSJzY2hlbWEvd3NpdmFsaWRhdG9yLmV4c2QiLz4KLSAgIDxleHRlbnNpb24tcG9pbnQgaWQ9InRhZHMiIG5hbWU9IiVfVEVTVF9BU1NFUlRJT05fRE9DVU1FTlRTX05BTUUiIHNjaGVtYT0ic2NoZW1hL3RhZHMuZXhzZCIvPgotICAgPGV4dGVuc2lvbi1wb2ludCBpZD0icmVwb3J0QXJ0aWZhY3RUeXBlcyIgbmFtZT0iJV9SRVBPUlRfQVJUSUZBQ1RfVFlQRVNfTkFNRSIgc2NoZW1hPSJzY2hlbWEvcmVwb3J0QXJ0aWZhY3RUeXBlcy5leHNkIi8+Ci0gICAgIAotICAgPGV4dGVuc2lvbgotICAgICAgICAgaWQ9IndzZGxXU0lWYWxpZGF0b3IiCi0gICAgICAgICBuYW1lPSIlX1VJX1dTRExfV1NJX1ZBTElEQVRPUiIKLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmV4dHZhbGlkYXRvciI+Ci0gICAgICA8ZXh0dmFsaWRhdG9yCi0gICAgICAgICAgICBuYW1lc3BhY2U9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwudmFsaWRhdGUud3NkbC5XU0RMVmFsaWRhdG9yIj4KLSAgICAgIDwvZXh0dmFsaWRhdG9yPgotICAgPC9leHRlbnNpb24+Ci0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICAgIGlkPSJ1ZGRpVmFsaWRhdG9yIgotICAgICAgICAgICBuYW1lPSIlX1VJX1dTSV9GUkFNRVdPUktfVURESV9WQUxJREFUT1IiCi0gICAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS53c3Qud3NpLndzaXZhbGlkYXRvciI+Ci0gICAgICAgIDx3c2l2YWxpZGF0b3IKLSAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLnVkZGkuVURESVZhbGlkYXRvckltcGwiLz4KLSAgIDwvZXh0ZW5zaW9uPgotICAgPGV4dGVuc2lvbgotICAgICAgICAgICBpZD0id3NkbFZhbGlkYXRvciIKLSAgICAgICAgICAgbmFtZT0iJV9VSV9XU0lfRlJBTUVXT1JLX1dTRExfVkFMSURBVE9SIgotICAgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LndzaS53c2l2YWxpZGF0b3IiPgotICAgICAgICA8d3NpdmFsaWRhdG9yCi0gICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsLldTRExWYWxpZGF0b3JJbXBsIi8+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIDxleHRlbnNpb24KLSAgICAgICAgICAgaWQ9Im1lc3NhZ2VWYWxpZGF0b3IiCi0gICAgICAgICAgIG5hbWU9IiVfVUlfV1NJX0ZSQU1FV09SS19NRVNTQUdFX1ZBTElEQVRPUiIKLSAgICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC53c2kud3NpdmFsaWRhdG9yIj4KLSAgICAgICAgPHdzaXZhbGlkYXRvcgotICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZS5NZXNzYWdlVmFsaWRhdG9ySW1wbCIvPgotICAgPC9leHRlbnNpb24+Ci0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICAgIGlkPSJlbnZlbG9wZVZhbGlkYXRvciIKLSAgICAgICAgICAgbmFtZT0iJV9VSV9XU0lfRlJBTUVXT1JLX0VOVkVMT1BFX1ZBTElEQVRPUiIKLSAgICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC53c2kud3NpdmFsaWRhdG9yIj4KLSAgICAgICAgPHdzaXZhbGlkYXRvcgotICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGUuRW52ZWxvcGVWYWxpZGF0b3JJbXBsIi8+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIDxleHRlbnNpb24KLSAgICAgICAgICAgaWQ9ImJwVGFkcyIKLSAgICAgICAgICAgbmFtZT0iJV9VSV9XU0lfQlBfVEFEUyIKLSAgICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC53c2kudGFkcyI+Ci0gICAgICAgIDx0YWQKLSAgICAgICAgICAgbmFtZT0iQmFzaWMgUHJvZmlsZSBUZXN0IEFzc2VydGlvbnMiCi0gICAgICAgICAgIHZlcnNpb249IjEuMS4wIi8+Ci0gICAgICAgIDx0YWQKLSAgICAgICAgICAgbmFtZT0iQmFzaWMgUHJvZmlsZSAxLjEgVGVzdCBBc3NlcnRpb25zIgotICAgICAgICAgICB2ZXJzaW9uPSIxLjEuMCIvPgotICAgICAgICA8dGFkCi0gICAgICAgICAgIG5hbWU9IlNpbXBsZSBTb2FwIEJpbmRpbmcgUHJvZmlsZSBbMS4wXSAod2l0aCBCYXNpYyBQcm9maWxlIFsxLjFdKSBUZXN0IEFzc2VydGlvbnMiCi0gICAgICAgICAgIHZlcnNpb249IjEuMC4wIi8+Ci0gICAgICAgIDx0YWQKLSAgICAgICAgICAgbmFtZT0iQXR0YWNobWVudHMgUHJvZmlsZSBbMS4wXSAod2l0aCBCYXNpYyBQcm9maWxlIFsxLjFdIGFuZCBTaW1wbGUgU29hcCBCaW5kaW5nIFByb2ZpbGUgWzEuMF0pIFRlc3QgQXNzZXJ0aW9ucyIKLSAgICAgICAgICAgdmVyc2lvbj0iMS4wLjAiLz4KLSAgIDwvZXh0ZW5zaW9uPgotICAgPGV4dGVuc2lvbgotICAgICAgICAgICBpZD0iYnBSZXBvcnRBcnRpZmFjdHMiCi0gICAgICAgICAgIG5hbWU9IiVfVUlfV1NJX0JQX1JFUE9SVF9BUlRJRkFDVFMiCi0gICAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS53c3Qud3NpLnJlcG9ydEFydGlmYWN0VHlwZXMiPgotICAgICAgICA8cmVwb3J0QXJ0aWZhY3RUeXBlCi0gICAgICAgICAgIGFydGlmYWN0VHlwZT0ibWVzc2FnZSIvPgotICAgPC9leHRlbnNpb24+IAotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc2NoZW1hL3JlcG9ydEFydGlmYWN0VHlwZXMuZXhzZCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zY2hlbWEvcmVwb3J0QXJ0aWZhY3RUeXBlcy5leHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYmIxMjg4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zY2hlbWEvcmVwb3J0QXJ0aWZhY3RUeXBlcy5leHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLTw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Ci08IS0tIFNjaGVtYSBmaWxlIHdyaXR0ZW4gYnkgUERFIC0tPgotPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Im9yZy5lY2xpcHNlLndzdC53c2kiPgotPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNjaGVtYSBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC53c2kiIGlkPSJyZXBvcnRBcnRpZmFjdFR5cGVzIiBuYW1lPSJSZXBvcnQgQXJ0aWZhY3QgVHlwZXMiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhlIHJlcG9ydCBhcnRpZmFjdCB0eXBlIGV4dGVuc2lvbiBwb2ludCBhbGxvd3MgY2xpZW50cyB0byBkZW5vdGUgYXJ0aWZhY3QgdHlwZXMgdGhhdCBzaG91bGQgYmUgb3V0cHV0IHRvIHRoZSBsb2cgZmlsZS4KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0icmVwb3J0QXJ0aWZhY3RUeXBlIi8+Ci0gICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwb2ludCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcEluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUgdHJhbnNsYXRhYmxlPSJ0cnVlIi8+Ci0gICAgICAgICAgICAgICA8L2FwcEluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9InJlcG9ydEFydGlmYWN0VHlwZSI+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImFydGlmYWN0VHlwZSIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0ic2luY2UiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgV1RQIDIuMAotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJleGFtcGxlcyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgb2YgYSByZXBvcnQgYXJ0aWZhY3QgdHlwZSBjb250cmlidXRpb246Ci0mbHQ7cHJlJmd0OwotJmx0O2V4dGVuc2lvbgotICAgICAgICBpZD0mcXVvdDticFJlcG9ydEFydGlmYWN0cyZxdW90OwotICAgICAgICBuYW1lPSZxdW90OyVfVUlfV1NJX0JQX1JFUE9SVF9BUlRJRkFDVFMmcXVvdDsKLSAgICAgICAgcG9pbnQ9JnF1b3Q7b3JnLmVjbGlwc2Uud3N0LndzaS5yZXBvcnRBcnRpZmFjdHMmcXVvdDsmZ3Q7Ci0gICAgICZsdDtyZXBvcnRBcnRpZmFjdFR5cGUKLSAgICAgICAgYXJ0aWZhY3RUeXBlPSZxdW90O21lc3NhZ2UmcXVvdDsvJmd0OwotJmx0Oy9leHRlbnNpb24mZ3Q7Ci0mbHQ7L3ByZSZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iYXBpSW5mbyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBObyBBUEkgaXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZXh0ZW5zaW9uIHBvaW50LgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJpbXBsZW1lbnRhdGlvbiIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBObyBpbXBsZW1lbnRhdGlvbiBpcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBleHRlbnNpb24gcG9pbnQuCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImNvcHlyaWdodCIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc2NoZW1hL3RhZHMuZXhzZCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zY2hlbWEvdGFkcy5leHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGFiZmQ5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zY2hlbWEvdGFkcy5leHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTI5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Ci08IS0tIFNjaGVtYSBmaWxlIHdyaXR0ZW4gYnkgUERFIC0tPgotPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Im9yZy5lY2xpcHNlLndzdC53c2kiPgotPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNjaGVtYSBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC53c2kiIGlkPSJ0YWRzIiBuYW1lPSJUZXN0IEFzc2VydGlvbiBEb2N1bWVudHMiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhlIHRhZHMgZXh0ZW5zaW9uIHBvaW50IGFsbG93cyBjbGllbnRzIHRvIGRlbm90ZSBhZGRpdGlvbmFsIFRlc3QgQXNzZXJ0aW9uIERvY3VtZW50cyB0aGF0IHRoZXkgY2FuIGhhbmRsZS4KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIj4KLSAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAobm8gZGVzY3JpcHRpb24gYXZhaWxhYmxlKQotICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJ0YWQiLz4KLSAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICA8YXBwSW5mbz4KLSAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSB0cmFuc2xhdGFibGU9InRydWUiLz4KLSAgICAgICAgICAgICAgIDwvYXBwSW5mbz4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGVsZW1lbnQgbmFtZT0idGFkIj4KLSAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAobm8gZGVzY3JpcHRpb24gYXZhaWxhYmxlKQotICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InZlcnNpb24iIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9InNpbmNlIi8+Ci0gICAgICA8L2FwcEluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFdUUCAyLjAKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iZXhhbXBsZXMiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIGEgVEFEIHZlcnNpb24gY29udHJpYnV0aW9uOgotJmx0O3ByZSZndDsKLSZsdDtleHRlbnNpb24KLSAgICAgICAgaWQ9JnF1b3Q7YnBUYWRWZXJzaW9ucyZxdW90OwotICAgICAgICBuYW1lPSZxdW90OyVfVUlfV1NJX0JQX1RBRF9WRVJTSU9OUyZxdW90OwotICAgICAgICBwb2ludD0mcXVvdDtvcmcuZWNsaXBzZS53c3Qud3NpLnRhZF92ZXJzaW9ucyZxdW90OyZndDsKLSAgICAgJmx0O3RhZAotICAgICAgICBuYW1lPSZxdW90O0Jhc2ljIFByb2ZpbGUgVGVzdCBBc3NlcnRpb25zJnF1b3Q7Ci0gICAgICAgIHZlcnNpb249JnF1b3Q7MS4xLjAmcXVvdDsvJmd0OwotJmx0Oy9leHRlbnNpb24mZ3Q7Ci0mbHQ7L3ByZSZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iYXBpSW5mbyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBObyBBUEkgaXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZXh0ZW5zaW9uIHBvaW50LgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJpbXBsZW1lbnRhdGlvbiIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBObyBpbXBsZW1lbnRhdGlvbiBpcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBleHRlbnNpb24gcG9pbnQuCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImNvcHlyaWdodCIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc2NoZW1hL3dzaXZhbGlkYXRvci5leHNkIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NjaGVtYS93c2l2YWxpZGF0b3IuZXhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI4MDU5Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc2NoZW1hL3dzaXZhbGlkYXRvci5leHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTI3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Ci08IS0tIFNjaGVtYSBmaWxlIHdyaXR0ZW4gYnkgUERFIC0tPgotPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9ImJzcC5vcmcuZWNsaXBzZS53c3Qud3NpIj4KLTxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zY2hlbWEgcGx1Z2luPSJic3Aub3JnLmVjbGlwc2Uud3N0LndzaSIgaWQ9IndzaXZhbGlkYXRvciIgbmFtZT0iV1MtSSBWYWxpZGF0b3IiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhlIFdTLUkgVmFsaWRhdG9yIGV4dGVuc2lvbiBwb2ludCBhbGxvd3MgY2xpZW50cyB0byBjb250cmlidXRlIGEgdmFsaWRhdG9yIHRoYXQgY2FuIHZhbGlkYXRlIGRpZmZlcmVudCBXUy1JIFByb2ZpbGVzLgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgotICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIChubyBkZXNjcmlwdGlvbiBhdmFpbGFibGUpCi0gICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICA8L2Fubm90YXRpb24+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9IndzaXZhbGlkYXRvciIvPgotICAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icG9pbnQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgIDxhcHBJbmZvPgotICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIHRyYW5zbGF0YWJsZT0idHJ1ZSIvPgotICAgICAgICAgICAgICAgPC9hcHBJbmZvPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJ3c2l2YWxpZGF0b3IiPgotICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIChubyBkZXNjcmlwdGlvbiBhdmFpbGFibGUpCi0gICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICA8L2Fubm90YXRpb24+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImNsYXNzIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcEluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUga2luZD0iamF2YSIgYmFzZWRPbj0ib3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkJhc2VWYWxpZGF0b3IiLz4KLSAgICAgICAgICAgICAgIDwvYXBwSW5mbz4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0ic2luY2UiLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgV1RQIDIuMAotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBJbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJleGFtcGxlcyIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgb2YgYSBXUy1JIFZhbGlkYXRvciBjb250cmlidXRpb246Ci0mbHQ7cHJlJmd0OwotJmx0O2V4dGVuc2lvbgotICAgICAgICBpZD0mcXVvdDttZXNzYWdlVmFsaWRhdG9yJnF1b3Q7Ci0gICAgICAgIG5hbWU9JnF1b3Q7JV9VSV9XU0lfRlJBTUVXT1JLX01FU1NBR0VfVkFMSURBVE9SJnF1b3Q7Ci0gICAgICAgIHBvaW50PSZxdW90O29yZy5lY2xpcHNlLndzdC53c2kudmFsaWRhdG9yJnF1b3Q7Jmd0OwotICAgICAmbHQ7d3NpX3ZhbGlkYXRvcgotICAgICAgICBjbGFzcz0mcXVvdDtvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlLk1lc3NhZ2VWYWxpZGF0b3JJbXBsJnF1b3Q7LyZndDsKLSZsdDsvZXh0ZW5zaW9uJmd0OwotJmx0Oy9wcmUmZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImFwaUluZm8iLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgVGhlIHN1cHBsaWVkIGNsYXNzIG11c3QgaW1wbGVtZW50ICZsdDtjb2RlJmd0O29yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5CYXNlVmFsaWRhdG9yJmx0Oy9jb2RlJmd0Oy4KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwSW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iaW1wbGVtZW50YXRpb24iLz4KLSAgICAgIDwvYXBwSW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgJmx0O2NvZGUmZ3Q7Ci1vcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlLk1lc3NhZ2VWYWxpZGF0b3JJbXBsCi0mbHQ7L2NvZGUmZ3Q7Ci1Db250cmlidXRlcyBXUy1JIHZhbGlkYXRpb24gbG9naWMgZm9yIHRoZSBCYXNpYyBQcm9maWxlIHZhbGlkYXRpb24gb2YgbWVzc2FnZXMuCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcEluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImNvcHlyaWdodCIvPgotICAgICAgPC9hcHBJbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvV1NJUHJlZmVyZW5jZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9XU0lQcmVmZXJlbmNlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NGI4ZDIxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9XU0lQcmVmZXJlbmNlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbDsKLQotLyoqCi0gKiBXUy1JIHRlc3QgdG9vbHMgcHJvcGVydHkuCi0gKiAKLSAqIEBhdXRob3IgRGF2aWQgTGF1em9uLCBJQk0KLSAqCi0gKi8KLQotcHVibGljIGNsYXNzIFdTSVByZWZlcmVuY2VzCi17Ci0gIHByb3RlY3RlZCBTdHJpbmcgY29tcGxpYW5jZUxldmVsID0gIiI7Ci0gIHByb3RlY3RlZCBTdHJpbmcgdGFkZmlsZSA9ICIiOwotICAKLSAgLyoqCi0gICAqICBDb25zdHJ1Y3Rvci4KLSAgICovCi0gIHB1YmxpYyBXU0lQcmVmZXJlbmNlcygpCi0gIHsKLQljb21wbGlhbmNlTGV2ZWwgPSBXU0lUZXN0VG9vbHNQcm9wZXJ0aWVzLldBUk5fTk9OX1dTSTsKLQl0YWRmaWxlID0gV1NJVGVzdFRvb2xzUHJvcGVydGllcy5ERUZBVUxUX0FTU0VSVElPTl9GSUxFOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgV1MtSSBjb21wbGlhbmNlIGxldmVsLgotICAgKiBAcmV0dXJuIHRoZSBXUy1JIGNvbXBsaWFuY2UgbGV2ZWwuCi0gICAqIEBzZWUgI3NldENvbXBsaWFuY2VMZXZlbAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRDb21wbGlhbmNlTGV2ZWwoKQotICB7Ci0gICAgcmV0dXJuIGNvbXBsaWFuY2VMZXZlbDsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQgdGhlIFdTLUkgY29tcGxpYW5jZSBsZXZlbC4KLSAgICogQHBhcmFtIGNvbXBsaWFuY2UgdGhlIFdTLUkgY29tcGxpYW5jZSBsZXZlbC4KLSAgICogQHNlZSAjZ2V0Q29tcGxpYW5jZUxldmVsCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDb21wbGlhbmNlTGV2ZWwoU3RyaW5nIGNvbXBsaWFuY2UpCi0gIHsKLSAgICB0aGlzLmNvbXBsaWFuY2VMZXZlbCA9IGNvbXBsaWFuY2U7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbG9jYXRpb24gb2YgdGhlIEJhc2ljIFByb2ZpbGUgVGVzdCBBc3NlcnRpb25zIGZpbGUuCi0gICAqIEByZXR1cm4gdGhlIGxvY2F0aW9uIG9mIHRoZSBCYXNpYyBQcm9maWxlIFRlc3QgQXNzZXJ0aW9ucyBmaWxlLgotICAgKiBAc2VlICNzZXRUQURGaWxlCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFRBREZpbGUoKQotICB7Ci0gICAgcmV0dXJuIHRhZGZpbGU7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IHRoZSBsb2NhdGlvbiBvZiB0aGUgQmFzaWMgUHJvZmlsZSBUZXN0IEFzc2VydGlvbnMgZmlsZS4KLSAgICogQHBhcmFtIGZpbGUgdGhlIGxvY2F0aW9uIG9mIHRoZSBCYXNpYyBQcm9maWxlIFRlc3QgQXNzZXJ0aW9ucyBmaWxlLgotICAgKiBAc2VlICNnZXRUQURGaWxlCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUQURGaWxlKFN0cmluZyBmaWxlKQotICB7Ci0gICAgdGhpcy50YWRmaWxlID0gZmlsZTsKLSAgfQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvV1NJVGVzdFRvb2xzRWNsaXBzZVByb3BlcnRpZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9XU0lUZXN0VG9vbHNFY2xpcHNlUHJvcGVydGllcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZWJjZmY3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9XU0lUZXN0VG9vbHNFY2xpcHNlUHJvcGVydGllcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlci5pbnRlcm5hbC5wcm92aXNpb25hbC5VUklSZXNvbHZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyLmludGVybmFsLnByb3Zpc2lvbmFsLlVSSVJlc29sdmVyUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW4uV1NQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzLlBlcnNpc3RlbnRXU0lDb250ZXh0OwotCi0vKioKLSAqIFdTLUkgdGVzdCB0b29sIHByb3BlcnRpZXMgc3BlY2lmaWMgZm9yIEVjbGlwc2UuCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0lUZXN0VG9vbHNFY2xpcHNlUHJvcGVydGllcyBleHRlbmRzIFdTSVRlc3RUb29sc1Byb3BlcnRpZXMKLXsKLSAvKioKLSAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuV1NJVGVzdFRvb2xzUHJvcGVydGllcyNjaGVja1dTSVByZWZlcmVuY2VzKGphdmEubGFuZy5TdHJpbmcpCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgV1NJUHJlZmVyZW5jZXMgY2hlY2tXU0lQcmVmZXJlbmNlcyhTdHJpbmcgZmlsZXVyaSkKLSAgewotCS8vIENhY2hlIHRoZSBXUy1JIHRhZHMuCi0JY2FjaGVUQURGaWxlcygpOwotCQotICAgIFdTSVByZWZlcmVuY2VzIHByZWZlcmVuY2VzID0gbmV3IFdTSVByZWZlcmVuY2VzKCk7Ci0gICAgLy8gUmVtb3ZlIGZpbGU6IGFuZCBhbnkgc2xhc2hlcyBmcm9tIHRoZSBmaWxldXJpLiAKLSAgICAvLyBFY2xpcHNlJ3MgcmVzb2x1dGlvbiBtZWNoYW5pc20gbmVlZHMgdG8gc3RhcnQgd2l0aCB0aGUgZHJpdmUuCi0gICAgU3RyaW5nIHVyaVN0ciA9IHRyaW1VUkkoZmlsZXVyaSk7Ci0KLSAgICBQZXJzaXN0ZW50V1NJQ29udGV4dCBBUGNvbnRleHQgPSBXU1BsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFdTSUFQQ29udGV4dCgpOwotICAgIFBlcnNpc3RlbnRXU0lDb250ZXh0IFNTQlBjb250ZXh0ID0gV1NQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRXU0lTU0JQQ29udGV4dCgpOwotICAgIAotICAgIElGaWxlW10gZmlsZXMgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmZpbmRGaWxlc0ZvckxvY2F0aW9uKG5ldyBQYXRoKHVyaVN0cikpOwotICAgIGlmIChmaWxlcyAhPSBudWxsICYmIGZpbGVzLmxlbmd0aCA9PSAxKQotICAgIHsKLSAgICAgIC8vY2hlY2sgcHJvamVjdCBsZXZlbCBjb25wbGlhbmNlCi0gICAgICBJUHJvamVjdCBwcm9qZWN0ID0gZmlsZXNbMF0uZ2V0UHJvamVjdCgpOwotICAgICAgCi0gICAgICBpZiAoQVBjb250ZXh0LnByb2plY3RTdG9wTm9uV1NJQ29tcGxpYW5jZXMocHJvamVjdCkpCi0gICAgICB7Ci0gICAgICAgIHByZWZlcmVuY2VzLnNldFRBREZpbGUoQVBfQVNTRVJUSU9OX0ZJTEUpOwotICAgICAgICBwcmVmZXJlbmNlcy5zZXRDb21wbGlhbmNlTGV2ZWwoUGVyc2lzdGVudFdTSUNvbnRleHQuU1RPUF9OT05fV1NJKTsKLSAgICAgIH0gCi0gICAgICBlbHNlIGlmIChBUGNvbnRleHQucHJvamVjdFdhcm5Ob25XU0lDb21wbGlhbmNlcyhwcm9qZWN0KSkKLSAgICAgIHsKLSAgICAgICAgcHJlZmVyZW5jZXMuc2V0VEFERmlsZShBUF9BU1NFUlRJT05fRklMRSk7Ci0gICAgICAgIHByZWZlcmVuY2VzLnNldENvbXBsaWFuY2VMZXZlbChQZXJzaXN0ZW50V1NJQ29udGV4dC5XQVJOX05PTl9XU0kpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoU1NCUGNvbnRleHQucHJvamVjdFN0b3BOb25XU0lDb21wbGlhbmNlcyhwcm9qZWN0KSkKLSAgICAgIHsKLSAgICAgICAgcHJlZmVyZW5jZXMuc2V0VEFERmlsZShTU0JQX0FTU0VSVElPTl9GSUxFKTsKLSAgICAgICAgcHJlZmVyZW5jZXMuc2V0Q29tcGxpYW5jZUxldmVsKFBlcnNpc3RlbnRXU0lDb250ZXh0LlNUT1BfTk9OX1dTSSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChTU0JQY29udGV4dC5wcm9qZWN0V2Fybk5vbldTSUNvbXBsaWFuY2VzKHByb2plY3QpKQotICAgICAgewotICAgICAgICBwcmVmZXJlbmNlcy5zZXRUQURGaWxlKFNTQlBfQVNTRVJUSU9OX0ZJTEUpOwotICAgICAgICBwcmVmZXJlbmNlcy5zZXRDb21wbGlhbmNlTGV2ZWwoUGVyc2lzdGVudFdTSUNvbnRleHQuV0FSTl9OT05fV1NJKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcHJlZmVyZW5jZXMuc2V0VEFERmlsZShERUZBVUxUX0FTU0VSVElPTl9GSUxFKTsKLSAgICAgICAgcHJlZmVyZW5jZXMuc2V0Q29tcGxpYW5jZUxldmVsKFBlcnNpc3RlbnRXU0lDb250ZXh0LklHTk9SRV9OT05fV1NJKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIElmIHdlIGNhbid0IG9idGFpbiB0aGUgcHJvamVjdCBwcmVmZXJlbmNlIHVzZSB0aGUgZ2xvYmFsIHByZWZlcmVuY2UuCi0gICAgICBTdHJpbmcgQVBsZXZlbCA9IEFQY29udGV4dC5nZXRQZXJzaXN0ZW50V1NJQ29tcGxpYW5jZSgpOwotICAgICAgU3RyaW5nIFNTQlBsZXZlbCA9IFNTQlBjb250ZXh0LmdldFBlcnNpc3RlbnRXU0lDb21wbGlhbmNlKCk7Ci0gICAgICBpZihBUGxldmVsLmVxdWFscyhQZXJzaXN0ZW50V1NJQ29udGV4dC5TVE9QX05PTl9XU0kpKQotICAgICAgewotICAgICAgICBwcmVmZXJlbmNlcy5zZXRUQURGaWxlKEFQX0FTU0VSVElPTl9GSUxFKTsKLSAgICAgICAgcHJlZmVyZW5jZXMuc2V0Q29tcGxpYW5jZUxldmVsKFBlcnNpc3RlbnRXU0lDb250ZXh0LlNUT1BfTk9OX1dTSSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmKEFQbGV2ZWwuZXF1YWxzKFBlcnNpc3RlbnRXU0lDb250ZXh0LldBUk5fTk9OX1dTSSkpCi0gICAgICB7Ci0gICAgICAgIHByZWZlcmVuY2VzLnNldFRBREZpbGUoQVBfQVNTRVJUSU9OX0ZJTEUpOwotICAgICAgICBwcmVmZXJlbmNlcy5zZXRDb21wbGlhbmNlTGV2ZWwoUGVyc2lzdGVudFdTSUNvbnRleHQuV0FSTl9OT05fV1NJKTsKLSAgICAgfQotICAgICBpZihTU0JQbGV2ZWwuZXF1YWxzKFBlcnNpc3RlbnRXU0lDb250ZXh0LlNUT1BfTk9OX1dTSSkpCi0gICAgIHsKLSAgICAgICBwcmVmZXJlbmNlcy5zZXRUQURGaWxlKFNTQlBfQVNTRVJUSU9OX0ZJTEUpOwotICAgICAgIHByZWZlcmVuY2VzLnNldENvbXBsaWFuY2VMZXZlbChQZXJzaXN0ZW50V1NJQ29udGV4dC5TVE9QX05PTl9XU0kpOwotICAgICB9Ci0gICAgIGVsc2UgaWYoU1NCUGxldmVsLmVxdWFscyhQZXJzaXN0ZW50V1NJQ29udGV4dC5XQVJOX05PTl9XU0kpKQotICAgICB7Ci0gICAgICBwcmVmZXJlbmNlcy5zZXRUQURGaWxlKFNTQlBfQVNTRVJUSU9OX0ZJTEUpOwotICAgICAgICBwcmVmZXJlbmNlcy5zZXRDb21wbGlhbmNlTGV2ZWwoUGVyc2lzdGVudFdTSUNvbnRleHQuV0FSTl9OT05fV1NJKTsKLSAgICAgfQotICAgICBlbHNlCi0gICAgIHsKLSAgICAgICAgcHJlZmVyZW5jZXMuc2V0VEFERmlsZShERUZBVUxUX0FTU0VSVElPTl9GSUxFKTsKLSAgICAgICAgcHJlZmVyZW5jZXMuc2V0Q29tcGxpYW5jZUxldmVsKFBlcnNpc3RlbnRXU0lDb250ZXh0LklHTk9SRV9OT05fV1NJKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHByZWZlcmVuY2VzOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgc3RhdGljIHZvaWQgY2FjaGVUQURGaWxlcygpCi0gIHsKLQkgIFN0cmluZyByZXN1bHRBUCA9IGNhY2hlRmlsZShBUF9BU1NFUlRJT05fRklMRSk7Ci0JICBpZihyZXN1bHRBUCAhPSBudWxsKQotCSAgewotCQkgIEFQX0FTU0VSVElPTl9GSUxFID0gcmVzdWx0QVA7Ci0JICB9Ci0JICAKLQkgIFN0cmluZyByZXN1bHRTU0JQID0gY2FjaGVGaWxlKFNTQlBfQVNTRVJUSU9OX0ZJTEUpOwotCSAgaWYocmVzdWx0U1NCUCAhPSBudWxsKQotCSAgewotCQkgIFNTQlBfQVNTRVJUSU9OX0ZJTEUgPSByZXN1bHRTU0JQOwotCSAgfQotICB9Ci0gIAotICBwcm90ZWN0ZWQgc3RhdGljIFN0cmluZyBjYWNoZUZpbGUoU3RyaW5nIHVyaSkKLSAgewotCSAgVVJJUmVzb2x2ZXIgcmVzb2x2ZXIgPSBnZXRVUklSZXNvbHZlcigpOwotCSAgU3RyaW5nIHJlc29sdmVkVXJpID0gcmVzb2x2ZXIucmVzb2x2ZSgiIiwgbnVsbCwgdXJpKTsKLQkgIHJldHVybiByZXNvbHZlci5yZXNvbHZlUGh5c2ljYWxMb2NhdGlvbigiIiwgbnVsbCwgcmVzb2x2ZWRVcmkpOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBVUkkgcmVzb2x2ZXIgdG8gdXNlIGZvciBXUy1JIHZhbGlkYWl0b24uCi0gICAqIAotICAgKiBAcmV0dXJuCi0gICAqIAkJVGhlIFVSSSByZXNvbHZlciB0byB1c2UgZm9yIFdTLUkgdmFsaWRhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVVJJUmVzb2x2ZXIgZ2V0VVJJUmVzb2x2ZXIoKQotICB7Ci0JICByZXR1cm4gVVJJUmVzb2x2ZXJQbHVnaW4uY3JlYXRlUmVzb2x2ZXIoKTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvV1NJVGVzdFRvb2xzUGx1Z2luLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvV1NJVGVzdFRvb2xzUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhMGRhZTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL1dTSVRlc3RUb29sc1BsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjA4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkJhc2VWYWxpZGF0b3I7Ci0KLS8qKgotICogVGhlIFdTLUkgdGVzdCB0b29scyBwbHVnaW4uCi0gKiAKLSAqIEBhdXRob3IgbGF1em9uZAotICovCi0KLXB1YmxpYyBjbGFzcyBXU0lUZXN0VG9vbHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4KLXsKLSAgcHJpdmF0ZSBzdGF0aWMgUGx1Z2luIGluc3RhbmNlOwotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIFBMVUdJTl9QUk9QRVJUSUVTID0gIndzaXZhbGlkYXRlIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLndzdC53c2kiOwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBWQUxJREFUT1JfRVhUX0lEID0gUExVR0lOX0lEICsgIi53c2l2YWxpZGF0b3IiOwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBUQURfVkVSU0lPTl9FWFRfSUQgPSBQTFVHSU5fSUQgKyAiLnRhZHMiOwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBSRVBPUlRfQVJUSUZBQ1RfVFlQRVNfRVhUX0lEID0gUExVR0lOX0lEICsgIi5yZXBvcnRBcnRpZmFjdFR5cGVzIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUX0NMQVNTID0gImNsYXNzIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUX1RBRF9OQU1FID0gIm5hbWUiOwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRfVEFEX1ZFUlNJT04gPSAidmVyc2lvbiI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9BUlRJRkFDVF9UWVBFID0gImFydGlmYWN0VHlwZSI7Ci0KLSAgLyogSG9sZHMgdmFsaWRhdG9ycyByZWFkIGZyb20gdGhlIHBsYXRmb3JtIHJlZ2lzdHJ5LiAgTGF6eSBpbml0aWFsaXplZCBpbgotICAgKiBjb21wdXRlVmFsaWRhdG9ycygpLiAgKi8KLSAgcHJpdmF0ZSBCYXNlVmFsaWRhdG9yIHZhbGlkYXRvcnNbXTsKLQotICAvKiBIb2xkcyBhcnJheXMgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCBUZXN0IEFzc2VydGlvbiBkb2N1bWVudCAoVEFEKQotICAgKiB2ZXJzaW9ucyByZWFkIGZyb20gdGhlIHBsYXRmb3JtIHJlZ2lzdHJ5LiAgRWFjaCBhcnJheSBoYXMgdHdvIGVsZW1lbnRzOgotICAgKiAgIDA6IHRoZSBUQUQgbmFtZQotICAgKiAgIDE6IHRoZSBUQUQgdmVyc2lvbiBzdHJpbmcKLSAgICogTGF6eSBpbml0aWFsaXplZCBpbiBjb21wdXRlVEFEVmVyc2lvbnMoKS4gICovCi0gIHByaXZhdGUgU3RyaW5nIHRhZFZlcnNpb25zW11bXTsKLQotICAvKiBIb2xkcyBhcnRpZmFjdCB0eXBlIG5hbWVzIGZvciByZXBvcnRpbmcgcmVhZCBmcm9tIHRoZSBwbGF0Zm9ybSByZWdpc3RyeS4KLSAgICogTGF6eSBpbml0aWFsaXplZCBpbiBnZXRBbGxSZXBvcnRBcnRpZmFjdFR5cGVzKCkuICAqLwotICBwcml2YXRlIFN0cmluZyByZXBvcnRBcnRpZmFjdFR5cGVzW107Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciB3c2lUZXN0VG9vbHNQbHVnaW4uCi0gICAqIEBwYXJhbSBkZXNjcmlwdG9yIGFuIElQbHVnaW5EZXNjcmlwdG9yIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0lUZXN0VG9vbHNQbHVnaW4oKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgICBpbnN0YW5jZSA9IHRoaXM7Ci0KLSAgICAvLyBzZXQgdGhlIGN1cnJlbnQgZGlyZWN0b3J5Ci0gICBXU0lUZXN0VG9vbHNQcm9wZXJ0aWVzLnNldEVjbGlwc2VDb250ZXh0KHRydWUpOwotICAgLy9yZXNvdXJjZWJ1bmRsZSA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZShQTFVHSU5fUFJPUEVSVElFUyk7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldEluc3RhbmNlLgotICAgKiBAcmV0dXJuIEFic3RyYWN0VUlQbHVnaW4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgUGx1Z2luIGdldEluc3RhbmNlKCkKLSAgewotICAgIHJldHVybiBpbnN0YW5jZTsKLSAgfQotCi0gICAvKioKLSAgICogTWV0aG9kIGdldFBsdWdpbi4KLSAgICogQHJldHVybiBXU0lUb29sc1V0aWxQbHVnaW4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgV1NJVGVzdFRvb2xzUGx1Z2luIGdldFBsdWdpbigpCi0gIHsKLSAgICByZXR1cm4gKFdTSVRlc3RUb29sc1BsdWdpbikgaW5zdGFuY2U7Ci0gIH0KLQotICAvKiBDb21wdXRlcyB0aGUgbGlzdCBvZiB2YWxpZGF0b3JzIGJ5IHNjYW5uaW5nIHRoZSBwbGF0Zm9ybSByZWdpc3RyeS4gKi8KLSAgcHJpdmF0ZSBCYXNlVmFsaWRhdG9yW10gY29tcHV0ZVZhbGlkYXRvcnMoKSB7Ci0gICAgICBJRXh0ZW5zaW9uUmVnaXN0cnkgcmVnaXN0cnkgPSBQbGF0Zm9ybS5nZXRFeHRlbnNpb25SZWdpc3RyeSgpOwotICAgICAgSUV4dGVuc2lvblBvaW50IGV4dGVuc2lvblBvaW50ID0gcmVnaXN0cnkuZ2V0RXh0ZW5zaW9uUG9pbnQoCi0gICAgICAgICAgICAgIFZBTElEQVRPUl9FWFRfSUQpOwotICAgICAgSUV4dGVuc2lvbltdIGV4dGVuc2lvbnMgPSBleHRlbnNpb25Qb2ludC5nZXRFeHRlbnNpb25zKCk7Ci0gICAgICBBcnJheUxpc3QgcmVzdWx0cyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZXh0ZW5zaW9ucy5sZW5ndGg7IGkrKykgewotICAgICAgICAgIC8qIE9ubHkgb25lIHZhbGlkYXRvciBwZXIgZXh0ZW5zaW9uIHBvaW50ICovCi0gICAgICAgICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50IHZhbGlkYXRvckVsZW1lbnQgPSBleHRlbnNpb25zW2ldLgotICAgICAgICAgICAgICAgICAgZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzKClbMF07Ci0gICAgICAgICAgQmFzZVZhbGlkYXRvciB2YWxpZGF0b3IgPSBudWxsOwotICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgIHZhbGlkYXRvciA9IChCYXNlVmFsaWRhdG9yKSB2YWxpZGF0b3JFbGVtZW50LgotICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oQVRUX0NMQVNTKTsKLSAgICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgZSkgewotICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAgIH0KLSAgICAgICAgICByZXN1bHRzLmFkZCh2YWxpZGF0b3IpOwotICAgICAgfQotICAgICAgcmV0dXJuIChCYXNlVmFsaWRhdG9yW10pIHJlc3VsdHMudG9BcnJheShuZXcgQmFzZVZhbGlkYXRvclswXSk7Ci0gIH0KLQotICAvKioKLSAgICogRmluZCBhbGwgdmFsaWRhdG9ycyBmb3VuZCBpbiB0aGUgcGxhdGZvcm0gcmVnaXN0cnkgZXh0ZW5zaW9uIHBvaW50cwotICAgKiBvcmcuZWNsaXBzZS53c3Qud3NpLnZhbGlkYXRvci4KLSAgICogQHJldHVybiBhbiBhcnJheSBjb250YWluaW5nIHRoZXNlIHZhbGlkYXRvcnMKLSAgICovCi0gIHB1YmxpYyBCYXNlVmFsaWRhdG9yW10gZ2V0QmFzZVZhbGlkYXRvcnMoKSAKLSAgewotCWlmICh2YWxpZGF0b3JzID09IG51bGwpCi0JICB2YWxpZGF0b3JzID0gY29tcHV0ZVZhbGlkYXRvcnMoKTsKLSAgICByZXR1cm4gdmFsaWRhdG9yczsgIAotICB9Ci0KLSAgLyoqCi0gICAqIFNjYW4gYWxsIHZhbGlkYXRvcnMgZm91bmQgaW4gdGhlIHBsYXRmb3JtIHJlZ2lzdHJ5IGZvciBzdXBwb3J0ZWQgYXJ0aWZhY3QKLSAgICogdHlwZXMuCi0gICAqIEByZXR1cm4gYW4gYXJyYXkgb2YgYXJ0aWZhY3QgdHlwZSBuYW1lcyAoU3RyaW5ncykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRBcnRpZmFjdFR5cGVzKCkgewotICAgICAgaWYgKHZhbGlkYXRvcnMgPT0gbnVsbCkKLSAgICAgICAgIGdldEJhc2VWYWxpZGF0b3JzKCk7Ci0gICAgICBTdHJpbmcgYXJ0aWZhY3RUeXBlc1tdID0gbmV3IFN0cmluZ1t2YWxpZGF0b3JzLmxlbmd0aF07Ci0gICAgICAKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFsaWRhdG9ycy5sZW5ndGg7IGkrKykKLSAgICAgICAgICBhcnRpZmFjdFR5cGVzW2ldID0gdmFsaWRhdG9yc1tpXS5nZXRBcnRpZmFjdFR5cGUoKTsKLSAgICAgIHJldHVybiBhcnRpZmFjdFR5cGVzOwotICB9Ci0gIAotICAvKiBDb21wdXRlcyB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgVEFEIHZlcnNpb25zIGJ5IHNjYW5uaW5nIHRoZSBwbGF0Zm9ybSAKLSAgICogcmVnaXN0cnkuICBTZWUgY29tbWVudCBmb3IgdGFkVmVyc2lvbnMgaW5zdCB2YXIgZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlCi0gICAqIHJldHVybiB0eXBlLiAqLwotICBwcml2YXRlIFN0cmluZ1tdW10gY29tcHV0ZVRBRFZlcnNpb25zKCkgewotICAgICAgSUV4dGVuc2lvblJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKTsKLSAgICAgIElFeHRlbnNpb25Qb2ludCBleHRlbnNpb25Qb2ludCA9IHJlZ2lzdHJ5LmdldEV4dGVuc2lvblBvaW50KAotICAgICAgICAgICAgICBUQURfVkVSU0lPTl9FWFRfSUQpOwotICAgICAgSUV4dGVuc2lvbltdIGV4dGVuc2lvbnMgPSBleHRlbnNpb25Qb2ludC5nZXRFeHRlbnNpb25zKCk7Ci0gICAgICBBcnJheUxpc3QgcmVzdWx0cyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZXh0ZW5zaW9ucy5sZW5ndGg7IGkrKykgewotCi0gICAgICAgICAgSUNvbmZpZ3VyYXRpb25FbGVtZW50IHZlcnNpb25FbGVtZW50c1tdID0gZXh0ZW5zaW9uc1tpXS4KLSAgICAgICAgICAgICAgICAgIGdldENvbmZpZ3VyYXRpb25FbGVtZW50cygpOwotICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgdmVyc2lvbkVsZW1lbnRzLmxlbmd0aDsgaisrKSB7Ci0gICAgICAgICAgICAgIFN0cmluZyBuYW1lVmVyc2lvbltdID0gbmV3IFN0cmluZ1syXTsKLSAgICAgICAgICAgICAgbmFtZVZlcnNpb25bMF0gPSB2ZXJzaW9uRWxlbWVudHNbal0uZ2V0QXR0cmlidXRlKEFUVF9UQURfTkFNRSk7Ci0gICAgICAgICAgICAgIG5hbWVWZXJzaW9uWzFdID0gdmVyc2lvbkVsZW1lbnRzW2pdLmdldEF0dHJpYnV0ZShBVFRfVEFEX1ZFUlNJT04pOwotICAgICAgICAgICAgICByZXN1bHRzLmFkZChuYW1lVmVyc2lvbik7Ci0gICAgICAgICAgfQotICAgICAgfQotICAgICAgcmV0dXJuIChTdHJpbmdbXVtdKSByZXN1bHRzLnRvQXJyYXkobmV3IFN0cmluZ1swXVswXSk7Ci0gIH0KLQotICAvKioKLSAgICogRmluZCBhbGwgVEFEIHZlcnNpb25zIGZvdW5kIGluIHRoZSBwbGF0Zm9ybSByZWdpc3RyeSBleHRlbnNpb24gcG9pbnRzCi0gICAqIG9yZy5lY2xpcHNlLndzdC53c2kudGFkX3ZlcnNpb25zLgotICAgKiAKLSAgICogQHJldHVybiBhbiBhcnJheSB3aGVyZSBlYWNoIG1lbWJlciBpcyBhIHR3byBlbGVtZW50IGFycmF5cyB0aGF0IGRlc2NyaWJlcwotICAgKiBvbmUgVEFEIHZlcnNpb246Ci0gICAqICAgZWxlbWVudCAwOiB0aGUgVEFEIG5hbWUKLSAgICogICBlbGVtZW50IDE6IHRoZSBUQUQgdmVyc2lvbiBzdHJpbmcKLSAgICovCi0gIHB1YmxpYyBTdHJpbmdbXVtdIGdldEFsbFRBRFZlcnNpb25zKCkgCi0gIHsKLQlpZiAodGFkVmVyc2lvbnMgPT0gbnVsbCkKLQkgIHRhZFZlcnNpb25zID0gY29tcHV0ZVRBRFZlcnNpb25zKCk7Ci0gICAgcmV0dXJuIHRhZFZlcnNpb25zOyAgCi0gIH0KLSAgCi0gIC8qIENvbXB1dGVzIHRoZSBsaXN0IG9mIGFydGlmYWN0IHR5cGVzIGJ5IHNjYW5uaW5nIHRoZSBwbGF0Zm9ybSByZWdpc3RyeS4gKi8KLSAgcHJpdmF0ZSBTdHJpbmdbXSBjb21wdXRlUmVwb3J0QXJ0aWZhY3RUeXBlcygpIAotICB7Ci0gICAgSUV4dGVuc2lvblJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKTsKLSAgICBJRXh0ZW5zaW9uUG9pbnQgZXh0ZW5zaW9uUG9pbnQgPSByZWdpc3RyeS5nZXRFeHRlbnNpb25Qb2ludChSRVBPUlRfQVJUSUZBQ1RfVFlQRVNfRVhUX0lEKTsKLSAgICBJRXh0ZW5zaW9uW10gZXh0ZW5zaW9ucyA9IGV4dGVuc2lvblBvaW50LmdldEV4dGVuc2lvbnMoKTsKLSAgICBBcnJheUxpc3QgcmVzdWx0cyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4dGVuc2lvbnMubGVuZ3RoOyBpKyspIAotICAgIHsKLSAgICAgIElDb25maWd1cmF0aW9uRWxlbWVudCByZXBvcnRBcnRpZmFjdEVsZW1lbnRzW10gPSBleHRlbnNpb25zW2ldLmdldENvbmZpZ3VyYXRpb25FbGVtZW50cygpOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByZXBvcnRBcnRpZmFjdEVsZW1lbnRzLmxlbmd0aDsgaisrKSAKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHJlcG9ydEFydGlmYWN0ID0gcmVwb3J0QXJ0aWZhY3RFbGVtZW50c1tqXS5nZXRBdHRyaWJ1dGUoQVRUX0FSVElGQUNUX1RZUEUpOwotICAgICAgICByZXN1bHRzLmFkZChyZXBvcnRBcnRpZmFjdCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiAoU3RyaW5nW10pIHJlc3VsdHMudG9BcnJheShuZXcgU3RyaW5nWzBdKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEZpbmQgYWxsIHJlcG9ydCBhcnRpZmFjdCB0eXBlcyB0YWdzIGZvdW5kIGluIHRoZSBwbGF0Zm9ybSByZWdpc3RyeQotICAgKiBleHRlbnNpb24gcG9pbnRzIG9yZy5lY2xpcHNlLndzdC53c2kucmVwb3J0QXJ0aWZhY3RUeXBlcy4KLSAgICogQHJldHVybiBhbiBhcnJheSBjb250YWluaW5nIHRoZXNlIFN0cmluZ3MKLSAgICovCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRBbGxSZXBvcnRBcnRpZmFjdFR5cGVzKCkgCi0gIHsKLSAgICBpZiAocmVwb3J0QXJ0aWZhY3RUeXBlcyA9PSBudWxsKQotICAgICAgICByZXBvcnRBcnRpZmFjdFR5cGVzID0gY29tcHV0ZVJlcG9ydEFydGlmYWN0VHlwZXMoKTsKLSAgICByZXR1cm4gcmVwb3J0QXJ0aWZhY3RUeXBlczsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL1dTSVRlc3RUb29sc1Byb3BlcnRpZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9XU0lUZXN0VG9vbHNQcm9wZXJ0aWVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzMDMzNDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL1dTSVRlc3RUb29sc1Byb3BlcnRpZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5Qcm9maWxlQXNzZXJ0aW9uczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5Qcm9maWxlQXNzZXJ0aW9uc1JlYWRlcjsKLQotLyoqCi0gKiBXUy1JIHRlc3QgdG9vbHMgcHJvcGVydHkuCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0lUZXN0VG9vbHNQcm9wZXJ0aWVzCi17Ci0gIHByb3RlY3RlZCBzdGF0aWMgU3RyaW5nIGluc3RhbGxVUkwgPSAiIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBTdHJpbmcgdGFkZmlsZSA9ICIiOwotCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIHNjaGVtYURpciA9ICJjb21tb24vc2NoZW1hcy8iOwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBTU0JQX0FTU0VSVElPTl9GSUxFID0gImh0dHA6Ly93d3cud3MtaS5vcmcvVGVzdGluZy9Ub29scy8yMDA1LzAxL1NTQlAxMF9CUDExX1RBRF8xLTAueG1sIjsKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgQVBfQVNTRVJUSU9OX0ZJTEUgPSAiaHR0cDovL3d3dy53cy1pLm9yZy9UZXN0aW5nL1Rvb2xzLzIwMDQvMTIvQVAxMF9CUDExX1NTQlAxMF9UQUQueG1sIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgREVGQVVMVF9BU1NFUlRJT05fRklMRSA9IEFQX0FTU0VSVElPTl9GSUxFOwotICAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RPUF9OT05fV1NJID0gIjAiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBXQVJOX05PTl9XU0kgPSAiMSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElHTk9SRV9OT05fV1NJID0gIjIiOwotICAKLSAgcHJvdGVjdGVkIHN0YXRpYyBib29sZWFuIGVjbGlwc2VDb250ZXh0ID0gZmFsc2U7Ci0gIHByb3RlY3RlZCBzdGF0aWMgTWFwIHVyaVRvQXNzZXJ0aW9uc01hcCA9IG5ldyBIYXNoTWFwKCk7Ci0gIHByb3RlY3RlZCBzdGF0aWMgRG9jdW1lbnRGYWN0b3J5IGRvY3VtZW50RmFjdG9yeSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqICBDb25zdHJ1Y3Rvci4KLSAgICovCi0gIHByb3RlY3RlZCBXU0lUZXN0VG9vbHNQcm9wZXJ0aWVzKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRFY2xpcHNlQ29udGV4dChib29sZWFuIGVjbGlwc2VBY3RpdmUpCi0gIHsKLSAgICBlY2xpcHNlQ29udGV4dCA9IGVjbGlwc2VBY3RpdmU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBnZXRFY2xpcHNlQ29udGV4dCgpCi0gIHsKLSAgICByZXR1cm4gZWNsaXBzZUNvbnRleHQ7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBDaGVja3MgdGhlIFdTLUkgcHJlZmVyZW5jZXMgZm9yIHRoZSBnaXZlbiBmaWxlIGFuZCByZXR1cm4gdGhlbSBpbiBhCi0gICAqIFdTSVByZWZlcmVuY2VzIG9iamVjdC4KLSAgICogCi0gICAqIEBwYXJhbSBmaWxldXJpIFRoZSBmaWxlIFVSSSB0byBjaGVjayB0aGUgV1MtSSBwcmVmZXJlbmNlcyBmb3IuCi0gICAqIEByZXR1cm4gQSBXU0lQcmVmZXJlbmNlcyBvYmplY3QgY29udGFpbmluZyB0aGUgcHJlZmVyZW5jZSBmb3IgdGhpcyBmaWxlIFVSSS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgV1NJUHJlZmVyZW5jZXMgY2hlY2tXU0lQcmVmZXJlbmNlcyhTdHJpbmcgZmlsZXVyaSkKLSAgewotICAJcmV0dXJuIG5ldyBXU0lQcmVmZXJlbmNlcygpOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgcHJvZmlsZSBhc3NlcnRpb25zIGxvY2F0ZWQgYXQgdGhlIGdpdmVuIFVSSS4KLSAgICogQHBhcmFtIGFzc2VydGlvbnNVUkkgIHRoZSBsb2NhdGlvbiBvZiB0aGUgVEFELgotICAgKiBAcmV0dXJuIHRoZSBwcm9maWxlIGFzc2VydGlvbnMgbG9jYXRlZCBhdCB0aGUgZ2l2ZW4gVVJJLgotICogQHRocm93cyBXU0lFeGNlcHRpb24gCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFByb2ZpbGVBc3NlcnRpb25zIGdldFByb2ZpbGVBc3NlcnRpb25zKFN0cmluZyBhc3NlcnRpb25zVVJJKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQkgUHJvZmlsZUFzc2VydGlvbnMgcmVzdWx0ID0gbnVsbDsKLQkgaWYgKGFzc2VydGlvbnNVUkkgIT0gbnVsbCkKLQkgewotCSAgIHRyeQotCSAgIHsKLQkgICAgIGlmICh1cmlUb0Fzc2VydGlvbnNNYXAuY29udGFpbnNLZXkoYXNzZXJ0aW9uc1VSSSkpCi0JCSAgIHJlc3VsdCA9IChQcm9maWxlQXNzZXJ0aW9ucyl1cmlUb0Fzc2VydGlvbnNNYXAuZ2V0KGFzc2VydGlvbnNVUkkpOwotCSAgICAgZWxzZQotCSAgICAgewotCSAgICAgICAvLyBSZWFkIHByb2ZpbGUgYXNzZXJ0aW9ucwotCSAgICAgICBpZiAoZG9jdW1lbnRGYWN0b3J5ID09IG51bGwpCi0JICAgIAkgICBkb2N1bWVudEZhY3RvcnkgPSBEb2N1bWVudEZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLQkgICAgICAgUHJvZmlsZUFzc2VydGlvbnNSZWFkZXIgcHJvZmlsZUFzc2VydGlvbnNSZWFkZXIgPSBkb2N1bWVudEZhY3RvcnkubmV3UHJvZmlsZUFzc2VydGlvbnNSZWFkZXIoKTsKLQkgICAgICAgcmVzdWx0ID0gcHJvZmlsZUFzc2VydGlvbnNSZWFkZXIucmVhZFByb2ZpbGVBc3NlcnRpb25zKGFzc2VydGlvbnNVUkkpOwotICAgICAgICAgICBpZiAocmVzdWx0ICE9IG51bGwpCi0gICAgICAgICAgIHsKLSAgICAgICAgCSB1cmlUb0Fzc2VydGlvbnNNYXAucHV0KGFzc2VydGlvbnNVUkksIHJlc3VsdCk7Ci0gICAgICAgICAgIH0KLQkgICAgIH0KLQkgICB9Ci0JICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotCSAgIHsKLQkJIHJlc3VsdCA9IG51bGw7Ci0JICAgfQotCSB9Ci0JIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZW1vdmUgZmlsZTogYW5kIGFueSBzbGFzaGVzIGZyb20gdGhlIGZpbGV1cmkuIAotICAgKiBFY2xpcHNlJ3MgcmVzb2x1dGlvbiBtZWNoYW5pc20gbmVlZHMgdG8gc3RhcnQgd2l0aCB0aGUgZHJpdmUuCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIFN0cmluZyB0cmltVVJJKFN0cmluZyBmaWxldXJpKQotICB7Ci0gIAlTdHJpbmcgdXJpU3RyID0gZmlsZXVyaTsKLSAgCQotICAgIGlmKGZpbGV1cmkuc3RhcnRzV2l0aCgiZmlsZToiKSkKLSAgICB7Ci0gICAgICB1cmlTdHIgPSBmaWxldXJpLnN1YnN0cmluZyg1KTsKLSAgICB9Ci0gICAgd2hpbGUodXJpU3RyLnN0YXJ0c1dpdGgoIi8iKSB8fCB1cmlTdHIuc3RhcnRzV2l0aCgiXFwiKSkKLSAgICB7Ci0gICAgICB1cmlTdHIgPSB1cmlTdHIuc3Vic3RyaW5nKDEpOwotICAgIH0KLSAgICByZXR1cm4gdXJpU3RyOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9hbmFseXplci9NZXNzYWdlQW5hbHl6ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9hbmFseXplci9NZXNzYWdlQW5hbHl6ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDk3MGQzZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvYW5hbHl6ZXIvTWVzc2FnZUFuYWx5emVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5hbmFseXplcjsKLQotaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlci5pbnRlcm5hbC51dGlsLlVSSUVuY29kZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5XU0lQcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLldTSVRlc3RUb29sc0VjbGlwc2VQcm9wZXJ0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5BbmFseXplckNvbmZpZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLkFzc2VydGlvblJlc3VsdFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5Bc3NlcnRpb25SZXN1bHRzT3B0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5XU0RMUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuaW1wbC5Bc3NlcnRpb25SZXN1bHRzT3B0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLmltcGwuV1NETEVsZW1lbnRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuaW1wbC5XU0RMUmVmZXJlbmNlSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuY29tbW9uLkFkZFN0eWxlU2hlZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmNvbW1vbi5pbXBsLkFkZFN0eWxlU2hlZXRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuaW1wbC5GYWlsdXJlRGV0YWlsSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LmltcGwuUmVwb3J0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLmRvbS5FbGVtZW50TG9jYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5yZXBvcnQuQXNzZXJ0aW9uRXJyb3I7Ci0KLS8qKgotICogTWVzc2FnZUFuYWx5emVyCi0gKiAKLSAqIEEgY2xhc3MgdGhhdCBhbGxvd3Mgc2ltcGxlIGFjY2VzcyB0byB0aGUgV1MtSSBUZXN0IFRvb2xzIGluIG9yZGVyIHRvIGFuYWx5emUKLSAqIG1lc3NhZ2VzIGluIGEgbG9nIGZpbGUuCi0gKi8KLQotcHVibGljIGNsYXNzIE1lc3NhZ2VBbmFseXplcgotewotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLndzaS50ZXN0LnRvb2xzIjsKLSAgCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFRZUEVfUE9SVCA9ICJwb3J0IjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgVFlQRV9CSU5ESU5HID0gImJpbmRpbmciOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBUWVBFX1BPUlRUWVBFID0gInBvcnR0eXBlIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgVFlQRV9PUEVSQVRJT04gPSAib3BlcmF0aW9uIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgVFlQRV9NRVNTQUdFID0gIm1lc3NhZ2UiOwotCi0gIC8vIFRlc3QgcmVzdWx0IFN0cmluZ3MKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBOT1RQQVNTRUQgPSAibm90UGFzc2VkIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBXQVJOSU5HID0gIndhcm5pbmciOwotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIEZBSUxFRCA9ICJmYWlsZWQiOwotICAKLSAgcHJvdGVjdGVkIFN0cmluZyBmaWxlbmFtZTsKLSAgcHJvdGVjdGVkIFN0cmluZyB3c2RsZmlsZSA9IG51bGw7Ci0gIHByb3RlY3RlZCBTdHJpbmcgZWxlbWVudG5hbWUgPSBudWxsOwotICBwcm90ZWN0ZWQgU3RyaW5nIG5hbWVzcGFjZSA9IG51bGw7Ci0gIHByb3RlY3RlZCBTdHJpbmcgcGFyZW50bmFtZSA9IG51bGw7Ci0gIHByb3RlY3RlZCBib29sZWFuIHdzZGxzcGVjaWZpZWQgPSBmYWxzZTsKLSAgcHJvdGVjdGVkIFN0cmluZyB0eXBlICA9IG51bGw7Ci0gIHByb3RlY3RlZCBMaXN0IGFzc2VydGlvbndhcm5pbmdzOwotICBwcm90ZWN0ZWQgTGlzdCBhc3NlcnRpb25lcnJvcnM7Ci0gIHByb3RlY3RlZCBXU0lQcmVmZXJlbmNlcyB3c2lQcmVmZXJlbmNlcyA9IG51bGw7Ci0gIAotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIE1lc3NhZ2VBbmFseXplci4KLSAgICogQHBhcmFtIGZpbGVuYW1lIGxvZyBmaWxlIG5hbWUuCi0gICAqLwotICBwdWJsaWMgTWVzc2FnZUFuYWx5emVyKFN0cmluZyBmaWxlbmFtZSkKLSAgewotICAgIHRoaXMuZmlsZW5hbWUgPSBmaWxlbmFtZS5yZXBsYWNlKCdcXCcsICcvJyk7Ci0KLSAgICBhc3NlcnRpb253YXJuaW5ncyA9IG5ldyBWZWN0b3IoKTsKLSAgICBhc3NlcnRpb25lcnJvcnMgPSBuZXcgVmVjdG9yKCk7Ci0gIAl0aGlzLndzaVByZWZlcmVuY2VzID0gV1NJVGVzdFRvb2xzRWNsaXBzZVByb3BlcnRpZXMuY2hlY2tXU0lQcmVmZXJlbmNlcyhmaWxlbmFtZSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgTWVzc2FnZUFuYWx5emVyLgotICAgKiBAcGFyYW0gZmlsZW5hbWUgbG9nIGZpbGUgbmFtZS4KLSAgICovCi0gIHB1YmxpYyBNZXNzYWdlQW5hbHl6ZXIoU3RyaW5nIGZpbGVuYW1lLCBXU0lQcmVmZXJlbmNlcyB3c2lQcmVmZXJlbmNlcykKLSAgewotICAgIHRoaXMuZmlsZW5hbWUgPSBmaWxlbmFtZS5yZXBsYWNlKCdcXCcsICcvJyk7Ci0KLSAgICBhc3NlcnRpb253YXJuaW5ncyA9IG5ldyBWZWN0b3IoKTsKLSAgICBhc3NlcnRpb25lcnJvcnMgPSBuZXcgVmVjdG9yKCk7Ci0gIAl0aGlzLndzaVByZWZlcmVuY2VzID0gd3NpUHJlZmVyZW5jZXM7Ci0gIH0KLQotICBwdWJsaWMgTWVzc2FnZUFuYWx5emVyKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIHdzZGxmaWxlLCBTdHJpbmcgZWxlbWVudG5hbWUsIFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBwYXJlbnRuYW1lLCBTdHJpbmcgdHlwZSkKLSAgewotICAJdGhpcyhmaWxlbmFtZS5yZXBsYWNlKCdcXCcsICcvJykpOwotICAJd3NkbHNwZWNpZmllZCA9IHRydWU7Ci0gIAkKLSAgCXRoaXMud3NkbGZpbGUgPSB3c2RsZmlsZS5yZXBsYWNlKCdcXCcsICcvJyk7Ci0gIAl0aGlzLmVsZW1lbnRuYW1lID0gZWxlbWVudG5hbWU7Ci0gIAl0aGlzLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTsKLSAgCXRoaXMucGFyZW50bmFtZSA9IHBhcmVudG5hbWU7Ci0gIAl0aGlzLnR5cGUgPSB0eXBlOwotICB9Ci0KLSAgcHVibGljIE1lc3NhZ2VBbmFseXplcihTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyB3c2RsZmlsZSwgU3RyaW5nIGVsZW1lbnRuYW1lLCBTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgcGFyZW50bmFtZSwgU3RyaW5nIHR5cGUsIFdTSVByZWZlcmVuY2VzIHdzaVByZWZlcmVuY2VzKQotICB7Ci0gIAl0aGlzKGZpbGVuYW1lLCB3c2lQcmVmZXJlbmNlcyk7Ci0gIAl3c2Rsc3BlY2lmaWVkID0gdHJ1ZTsKLSAgCQotICAJdGhpcy53c2RsZmlsZSA9IHdzZGxmaWxlLnJlcGxhY2UoJ1xcJywgJy8nKTsKLSAgCXRoaXMuZWxlbWVudG5hbWUgPSBlbGVtZW50bmFtZTsKLSAgCXRoaXMubmFtZXNwYWNlID0gbmFtZXNwYWNlOwotICAJdGhpcy5wYXJlbnRuYW1lID0gcGFyZW50bmFtZTsKLSAgCXRoaXMudHlwZSA9IHR5cGU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIHZhbGlkYXRlQ29uZm9ybWFuY2UuCi0gICAqIAotICAgKiBDaGVja3MgdGhlIGNvbmZvcm1hbmNlIG9mIHRoZSBnaXZlbiBsb2dmaWxlIGFnYWluc3QgdGhlIFdTLUkgQmFzaWMgUHJvZmlsZS4KLSAgICogSWYgdGhlcmUgYXJlIGNvbmZvcm1hbmNlIHByb2JsZW1zIHRoZXkgY2FuIGJlIG9idGFpbmVkIGZyb20gZ2V0QXNzZXJ0aW9uRXJyb3JzLgotICAgKiAKLSAgICogQHRocm93cyBXU0lBbmFseXplckV4Y2VwdGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgdmFsaWRhdGVDb25mb3JtYW5jZSgpIHRocm93cyBXU0lBbmFseXplckV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotCSAgaWYgKHdzaVByZWZlcmVuY2VzLmdldENvbXBsaWFuY2VMZXZlbCgpICE9IFdTSVRlc3RUb29sc0VjbGlwc2VQcm9wZXJ0aWVzLklHTk9SRV9OT05fV1NJKQotCSAgewotICAgICAgICBEb2N1bWVudEZhY3RvcnkgZG9jdW1lbnRGYWN0b3J5ID0gRG9jdW1lbnRGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0gICAgICAgIC8vIEluaXRpYWxpemUgdGhlIEJhc2ljUHJvZmlsZUFuYWx5emVyIHVzaW5nIGFuIGFuYWx5emVyY29uZmlnIG9iamVjdAotICAgICAgICBBbmFseXplckNvbmZpZyBhbmFseXplcmNvbmZpZyA9IGRvY3VtZW50RmFjdG9yeS5uZXdBbmFseXplckNvbmZpZygpOwotICAgICAgICBpZih3c2Rsc3BlY2lmaWVkKQotICAgICAgICB7Ci0gICAgICAJICBXU0RMUmVmZXJlbmNlIHdzZGxyZWYgPSBuZXcgV1NETFJlZmVyZW5jZUltcGwoKTsKLSAgICAgIAkgIHdzZGxyZWYuc2V0V1NETExvY2F0aW9uKHdzZGxmaWxlKTsKLSAgICAgIAkKLSAgICAgIAkgIFdTRExFbGVtZW50IHdzZGxlbGVtID0gbmV3IFdTRExFbGVtZW50SW1wbCgpOwotICAgICAgCSAgd3NkbGVsZW0uc2V0TmFtZShlbGVtZW50bmFtZSk7Ci0gICAgICAJICB3c2RsZWxlbS5zZXROYW1lc3BhY2UobmFtZXNwYWNlKTsKLSAgICAgIAkgIHdzZGxlbGVtLnNldFBhcmVudEVsZW1lbnROYW1lKHBhcmVudG5hbWUpOwotICAgICAgCSAgd3NkbGVsZW0uc2V0VHlwZSh0eXBlKTsKLSAgICAgIAkKLSAgICAgIAkgIHdzZGxyZWYuc2V0V1NETEVsZW1lbnQod3NkbGVsZW0pOwotICAgICAgCQotICAgICAgCSAgYW5hbHl6ZXJjb25maWcuc2V0V1NETFJlZmVyZW5jZSh3c2RscmVmKTsKLSAgICAgICAgfQotCi0gICAgICAgIEFzc2VydGlvblJlc3VsdHNPcHRpb24gYXJvID0gbmV3IEFzc2VydGlvblJlc3VsdHNPcHRpb25JbXBsKCk7Ci0gICAgICAgIGFyby5zZXRBc3NlcnRpb25SZXN1bHRUeXBlKEFzc2VydGlvblJlc3VsdFR5cGUubmV3SW5zdGFuY2UoTk9UUEFTU0VEKSk7Ci0gICAgICAgIGFyby5zZXRTaG93QXNzZXJ0aW9uRGVzY3JpcHRpb24oZmFsc2UpOwotICAgICAgICBhcm8uc2V0U2hvd0ZhaWx1cmVEZXRhaWwoZmFsc2UpOwotICAgICAgICBhcm8uc2V0U2hvd0ZhaWx1cmVNZXNzYWdlKGZhbHNlKTsKLSAgICAgICAgYXJvLnNldFNob3dNZXNzYWdlRW50cnkoZmFsc2UpOwotCi0gICAgICAgIC8vIGFsdGhvdWdoIHdlIGRvbid0IHVzZSBhIHN0eWxlc2hlZXQgZm9yIG91ciBhcHBsaWNhdGlvbiBpdCBpcyByZXF1aXJlZCBvciB0aGUgCi0gICAgICAgIC8vIFdTLUkgdG9vbHMgd2lsbCBmYWlsCi0gICAgICAgIEFkZFN0eWxlU2hlZXQgYWRkc3R5bGVzaGVldCA9IG5ldyBBZGRTdHlsZVNoZWV0SW1wbCgpOwotCi0gICAgICAgIGFuYWx5emVyY29uZmlnLnNldEFzc2VydGlvblJlc3VsdHNPcHRpb24oYXJvKTsKLSAgICAgICAgYW5hbHl6ZXJjb25maWcuc2V0QWRkU3R5bGVTaGVldChhZGRzdHlsZXNoZWV0KTsKLSAgICAgIAotICAgICAgICBhbmFseXplcmNvbmZpZy5zZXRDb3JyZWxhdGlvblR5cGUoImVuZHBvaW50Iik7Ci0gIAkgICAgdHJ5Ci0JCXsKLQkJICBhbmFseXplcmNvbmZpZy5zZXRMb2dMb2NhdGlvbihVUklFbmNvZGVyLmVuY29kZShmaWxlbmFtZSwgIlVURjgiKSk7Ci0JCSAgYW5hbHl6ZXJjb25maWcuc2V0VGVzdEFzc2VydGlvbnNEb2N1bWVudExvY2F0aW9uKHdzaVByZWZlcmVuY2VzLmdldFRBREZpbGUoKSk7Ci0JCX0KLQkJY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gdWVlKQotCQl7Ci0JCSAgYW5hbHl6ZXJjb25maWcuc2V0TG9nTG9jYXRpb24oVVJJRW5jb2Rlci5lbmNvZGUoZmlsZW5hbWUsICJVVEY4IikpOwotCSAgICAgIGFuYWx5emVyY29uZmlnLnNldFRlc3RBc3NlcnRpb25zRG9jdW1lbnRMb2NhdGlvbihVUklFbmNvZGVyLmVuY29kZSh3c2lQcmVmZXJlbmNlcy5nZXRUQURGaWxlKCksICJVVEY4IikpOwotCQl9Ci0gICAgICAgIC8vYW5hbHl6ZXJjb25maWcuc2V0TG9nTG9jYXRpb24oZmlsZW5hbWUpOwotICAgICAgICAvL2FuYWx5emVyY29uZmlnLnNldFRlc3RBc3NlcnRpb25zRG9jdW1lbnRMb2NhdGlvbihnZXRCYXNpY1Byb2ZpbGVUZXN0QXNzZXJ0aW9uc0ZpbGUoKSk7Ci0gICAgICAgIGFuYWx5emVyY29uZmlnLnNldFZlcmJvc2VPcHRpb24oZmFsc2UpOwotICAgICAgCi0KLSAgICAgICAgTGlzdCBhbmFseXplckNvbmZpZ3MgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgIGFuYWx5emVyQ29uZmlncy5hZGQoYW5hbHl6ZXJjb25maWcpOwotICAgICAgICAvLyBoZXJlJ3Mgd2hlcmUgdGhlIHZhbGlkYXRpb24gYWN0dWFsbHkgc3RhcnRzIGhhcHBlbmluZwotICAgICAgICBXU0lCYXNpY1Byb2ZpbGVBbmFseXplciBicGFuYWx5emVyID0gbmV3IFdTSUJhc2ljUHJvZmlsZUFuYWx5emVyKGFuYWx5emVyQ29uZmlncyk7Ci0KLSAgICAgICAgYnBhbmFseXplci52YWxpZGF0ZUFsbCgpOwotICAgICAgICBSZXBvcnRJbXBsIHJlcG9ydCA9IChSZXBvcnRJbXBsKSBicGFuYWx5emVyLmdldFJlcG9ydCgpOwotCi0gICAgICAgIExpc3QgZW50cmllcyA9IHJlcG9ydC5nZXRFbnRyaWVzKCk7Ci0KLSAgICAgICAgLy8gaWYgdGhlcmUgYXJlIHJlcG9ydCBlbnRyaWVzIHdlIGl0ZXJhdGUgdGhyb3VnaCB0aGVtIGFuZCBhZGQgYWxsCi0gICAgICAgIC8vIGVycm9yIGFuZCB3YXJuaW5nIG1lc3NhZ2VzIHRvIHRoZSBlcnJvciBsaXN0LgotICAgICAgICBpZiAoZW50cmllcyAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgSXRlcmF0b3IgaWVudHJ5ID0gZW50cmllcy5pdGVyYXRvcigpOwotICAgICAgICAgIHdoaWxlIChpZW50cnkuaGFzTmV4dCgpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIEVudHJ5IGVudHJ5ID0gKEVudHJ5KSBpZW50cnkubmV4dCgpOwotICAgICAgICAgICAgTWFwIGFzc2VydGlvblJlc3VsdHMgPSBlbnRyeS5nZXRBc3NlcnRpb25SZXN1bHRMaXN0KCk7Ci0KLSAgICAgICAgICAgIGlmIChhc3NlcnRpb25SZXN1bHRzICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEl0ZXJhdG9yIGlhc3NlcnRpb25SZXN1bHRzID0gYXNzZXJ0aW9uUmVzdWx0cy52YWx1ZXMoKS5pdGVyYXRvcigpOwotCi0gICAgICAgICAgICAgIHdoaWxlIChpYXNzZXJ0aW9uUmVzdWx0cy5oYXNOZXh0KCkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBBc3NlcnRpb25SZXN1bHQgYXIgPSAoQXNzZXJ0aW9uUmVzdWx0KSBpYXNzZXJ0aW9uUmVzdWx0cy5uZXh0KCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoYXIuZ2V0UmVzdWx0KCkuZXF1YWxzSWdub3JlQ2FzZShGQUlMRUQpICYmIAotICAgICAgICAgICAgICAgIAl3c2lQcmVmZXJlbmNlcy5nZXRDb21wbGlhbmNlTGV2ZWwoKS5lcXVhbHMoV1NJVGVzdFRvb2xzRWNsaXBzZVByb3BlcnRpZXMuU1RPUF9OT05fV1NJKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBUZXN0QXNzZXJ0aW9uIHRhID0gYXIuZ2V0QXNzZXJ0aW9uKCk7Ci0gICAgICAgICAgICAgICAgICBpZiAodGEuaXNFbmFibGVkKCkpCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEl0ZXJhdG9yIGVycm9yTWVzc2FnZXMgPSBhci5nZXRGYWlsdXJlRGV0YWlsTGlzdCgpLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChlcnJvck1lc3NhZ2VzLmhhc05leHQoKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgIEZhaWx1cmVEZXRhaWxJbXBsIGZkaSA9IChGYWlsdXJlRGV0YWlsSW1wbCllcnJvck1lc3NhZ2VzLm5leHQoKTsKLSAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZU51bWJlciA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgaW50IGNvbHVtbk51bWJlciA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnRMb2NhdGlvbiBlbCA9IGZkaS5nZXRFbGVtZW50TG9jYXRpb24oKTsKLQotICAgICAgICAgICAgICAgICAgICAgIGlmIChlbCAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIgPSBlbC5nZXRMaW5lTnVtYmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5OdW1iZXIgPSBlbC5nZXRDb2x1bW5OdW1iZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAvL1RPRE86IGdldCBhc3NlcnRpb24gbG9jYXRpb25zIGluIHRoZSBsb2cgZmlsZQotICAgICAgICAgICAgICAgICAgICAgIGFzc2VydGlvbmVycm9ycy5hZGQoCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgQXNzZXJ0aW9uRXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICB0YS5nZXRJZCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgIk1lc3NhZ2UgSUQgIiArIGVudHJ5LmdldFJlZmVyZW5jZUlEKCkgKyAiOiIgKyB0YS5nZXRGYWlsdXJlTWVzc2FnZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbk51bWJlcikpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGFyLmdldFJlc3VsdCgpLmVxdWFsc0lnbm9yZUNhc2UoRkFJTEVEKSAmJiAKLSAgICAgICAgICAgICAgICAgICAgICAgICB3c2lQcmVmZXJlbmNlcy5nZXRDb21wbGlhbmNlTGV2ZWwoKS5lcXVhbHMoV1NJVGVzdFRvb2xzRWNsaXBzZVByb3BlcnRpZXMuV0FSTl9OT05fV1NJKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBUZXN0QXNzZXJ0aW9uIHRhID0gYXIuZ2V0QXNzZXJ0aW9uKCk7Ci0gICAgICAgICAgICAgICAgICBpZiAodGEuaXNFbmFibGVkKCkpCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEl0ZXJhdG9yIGVycm9yTWVzc2FnZXMgPSBhci5nZXRGYWlsdXJlRGV0YWlsTGlzdCgpLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChlcnJvck1lc3NhZ2VzLmhhc05leHQoKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgIEZhaWx1cmVEZXRhaWxJbXBsIGZkaSA9IChGYWlsdXJlRGV0YWlsSW1wbCllcnJvck1lc3NhZ2VzLm5leHQoKTsKLSAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZU51bWJlciA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgaW50IGNvbHVtbk51bWJlciA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnRMb2NhdGlvbiBlbCA9IGZkaS5nZXRFbGVtZW50TG9jYXRpb24oKTsKLQotICAgICAgICAgICAgICAgICAgICAgIGlmIChlbCAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIgPSBlbC5nZXRMaW5lTnVtYmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5OdW1iZXIgPSBlbC5nZXRDb2x1bW5OdW1iZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgLy9UT0RPOiBnZXQgYXNzZXJ0aW9uIGxvY2F0aW9ucyBpbiB0aGUgbG9nIGZpbGUKLSAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRpb253YXJuaW5ncy5hZGQoCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgQXNzZXJ0aW9uRXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICB0YS5nZXRJZCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgIk1lc3NhZ2UgSUQgIiArIGVudHJ5LmdldFJlZmVyZW5jZUlEKCkgKyAiOiIgKyB0YS5nZXRGYWlsdXJlTWVzc2FnZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbk51bWJlcikpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9IAotCSAgfQotICAgIH0KLSAgICBjYXRjaCAoV1NJRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTSUFuYWx5emVyRXhjZXB0aW9uKCJUaGUgTWVzc2FnZUFuYWx5emVyIHdhcyB1bmFibGUgdG8gdmFsaWRhdGUgdGhlIGdpdmVuIGxvZ2ZpbGUuIiwgZS5nZXRUYXJnZXRFeGNlcHRpb24oKSk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgV1NJQW5hbHl6ZXJFeGNlcHRpb24oIlRoZSBNZXNzYWdlQW5hbHl6ZXIgd2FzIHVuYWJsZSB0byB2YWxpZGF0ZSB0aGUgZ2l2ZW4gbG9nZmlsZS4iKTsKLSAgICB9Ci0KLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgZ2V0QXNzZXJ0aW9uV2FybmluZ3MuCi0gICAqIFJldHVybnMgYSBsaXN0IG9mIGFueSBhc3NlcnRpb24gd2FybmluZ3MgZ2VuZXJhdGVkIGZyb20gdmFsaWRhdGVDb25mb3JtYW5jZS4KLSAgICogQHJldHVybiBMaXN0Ci0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRBc3NlcnRpb25XYXJuaW5ncygpCi0gIHsKLSAgICByZXR1cm4gYXNzZXJ0aW9ud2FybmluZ3M7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldEFzc2VydGlvbkZhaWx1cmVzLgotICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBhbnkgYXNzZXJ0aW9uIGVycm9ycyBnZW5lcmF0ZWQgZnJvbSB2YWxpZGF0ZUNvbmZvcm1hbmNlLgotICAgKiBAcmV0dXJuIExpc3QKLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldEFzc2VydGlvbkVycm9ycygpCi0gIHsKLSAgICByZXR1cm4gYXNzZXJ0aW9uZXJyb3JzOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvYW5hbHl6ZXIvV1NETEFuYWx5emVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvYW5hbHl6ZXIvV1NETEFuYWx5emVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5YmYyMzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2FuYWx5emVyL1dTRExBbmFseXplci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzg0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuYW5hbHl6ZXI7Ci0KLWltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIuaW50ZXJuYWwudXRpbC5VUklFbmNvZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuV1NJUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5XU0lUZXN0VG9vbHNFY2xpcHNlUHJvcGVydGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLldTSVRlc3RUb29sc1Byb3BlcnRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLkFuYWx5emVyQ29uZmlnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuQXNzZXJ0aW9uUmVzdWx0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLkFzc2VydGlvblJlc3VsdHNPcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLldTRExSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5pbXBsLkFzc2VydGlvblJlc3VsdHNPcHRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuaW1wbC5XU0RMRWxlbWVudEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5pbXBsLldTRExSZWZlcmVuY2VJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5jb21tb24uQWRkU3R5bGVTaGVldDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuY29tbW9uLmltcGwuQWRkU3R5bGVTaGVldEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5pbXBsLkZhaWx1cmVEZXRhaWxJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuaW1wbC5SZXBvcnRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuZG9tLkVsZW1lbnRMb2NhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLnJlcG9ydC5Bc3NlcnRpb25FcnJvcjsKLQotLyoqCi0gKiBXU0RMQW5hbHl6ZXIKLSAqIFRoZSBpbnRlcmZhY2UgdG8gdGhlIFdTLUkgVGVzdCBUb29scyBmb3IgYW5hbHl6aW5nIGEgV1NETCBmaWxlLiAgQWxsb3dzIGEgV1NETCBmaWxlIHRvIGJlIGFuYWx5emVkCi0gKiBhdCBhbnkgb2YgdGhlIGZvbGxvd2luZyBsZXZlbHMuCi0gKiAgcG9ydAotICogIGJpbmRpbmcKLSAqICBwb3J0VHlwZQotICogIG9wZXJhdGlvbgotICogIG1lc3NhZ2UKLSAqLwotCi1wdWJsaWMgY2xhc3MgV1NETEFuYWx5emVyCi17Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcud3NpLnRlc3QudG9vbHMiOwotICAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUE9SVCA9ICJwb3J0IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQklORElORyA9ICJiaW5kaW5nIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUE9SVFRZUEUgPSAicG9ydFR5cGUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBPUEVSQVRJT04gPSAib3BlcmF0aW9uIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUVTU0FHRSA9ICJtZXNzYWdlIjsKLQotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIE5PVFBBU1NFRCA9ICJub3RQYXNzZWQiOwotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIFdBUk5JTkcgPSAid2FybmluZyI7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgRkFJTEVEID0gImZhaWxlZCI7Ci0gIAotICBwcm90ZWN0ZWQgTGlzdCBhbmFseXplckNvbmZpZ3M7Ci0gIHByb3RlY3RlZCBTdHJpbmcgd3NkbFVSSTsKLSAgLy8gYXNzZXJ0aW9ucyB0byBpZ25vcmUgLSB1c2VkIGZvciBhc3NlcnRpb25zIHRoYXQgdGhlIHRvb2xzIGhhdmUgbm90IGltcGxlbWVudGVkIHByb3Blcmx5IHlldAotICAvL3Byb3RlY3RlZCBTdHJpbmdbXSBpZ25vcmVBc3NlcnRpb25zID0geyAvKiJXU0kyMTA1IiAsICJXU0kyMTE5IiovfTsKLSAgcHJvdGVjdGVkIExpc3QgYXNzZXJ0aW9uZXJyb3JzOwotICBwcm90ZWN0ZWQgTGlzdCBhc3NlcnRpb253YXJuaW5nczsKLSAgcHJvdGVjdGVkIFdTSVByZWZlcmVuY2VzIHdzaVByZWZlcmVuY2VzID0gbnVsbDsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIEdpdmVuIHRoZSBmaWxlIG5hbWUsIHBhcmVudCBlbGVtZW50IG5hbWUsIHRoZSBlbGVtZW50IHRvIGFuYWx5emUgYW5kIHRoZSB0eXBlIG9mIGVsZW1lbnQKLSAgICogc2V0cyB1cCB0aGUgV1NETEFuYWx5emVyIHRvIGFuYWx5emUgdGhlIGZpbGUuCi0gICAqIEBwYXJhbSBmaWxlTmFtZSBsb2cgZmlsZSBuYW1lLgotICAgKiBAcGFyYW0gcGFyZW50TmFtZSBwYXJlbnQgZWxlbWVudCBuYW1lLgotICAgKiBAcGFyYW0gbmFtZXNwYWNlICBhIG5hbWVzcGFjZS4KLSAgICogQHBhcmFtIGVsZW1lbnROYW1lIHRoZSBlbGVtZW50IHRvIGFuYWx5emUuCi0gICAqIEBwYXJhbSBlbGVtZW50VHlwZSB0aGUgdHlwZSBvZiB0aGUgZWxlbWVudC4KLSAgICogQHBhcmFtIHdzaVByZWZlcmVuY2VzIHRoZSBwcmVmZXJlbmNlcy4KLSAgICogQHRocm93cyBXU0lBbmFseXplckV4Y2VwdGlvbiBpZiB1bmFibGUgdG8gYWRkIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uCi0gICAqLwotICBwdWJsaWMgV1NETEFuYWx5emVyKFN0cmluZyBmaWxlTmFtZSwgU3RyaW5nIHBhcmVudE5hbWUsIFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBlbGVtZW50TmFtZSwgU3RyaW5nIGVsZW1lbnRUeXBlLCBXU0lQcmVmZXJlbmNlcyB3c2lQcmVmZXJlbmNlcykgdGhyb3dzIFdTSUFuYWx5emVyRXhjZXB0aW9uCi0gIHsKLSAgICB0aGlzKGZpbGVOYW1lLCB3c2lQcmVmZXJlbmNlcyk7Ci0gICAgYWRkQ29uZmlndXJhdGlvblRvVGVzdChwYXJlbnROYW1lLCBuYW1lc3BhY2UsIGVsZW1lbnROYW1lLCBlbGVtZW50VHlwZSk7Ci0KLSAgfQotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICogR2l2ZW4gdGhlIGZpbGUgbmFtZSwgcGFyZW50IGVsZW1lbnQgbmFtZSwgdGhlIGVsZW1lbnQgdG8gYW5hbHl6ZSBhbmQgdGhlIHR5cGUgb2YgZWxlbWVudAotICAgKiBzZXRzIHVwIHRoZSBXU0RMQW5hbHl6ZXIgdG8gYW5hbHl6ZSB0aGUgZmlsZS4KLSAgICogQHBhcmFtIGZpbGVOYW1lIGxvZyBmaWxlIG5hbWUuCi0gICAqIEBwYXJhbSBwYXJlbnROYW1lIHBhcmVudCBlbGVtZW50IG5hbWUuCi0gICAqIEBwYXJhbSBuYW1lc3BhY2UgIGEgbmFtZXNwYWNlLgotICAgKiBAcGFyYW0gZWxlbWVudE5hbWUgdGhlIGVsZW1lbnQgdG8gYW5hbHl6ZS4KLSAgICogQHBhcmFtIGVsZW1lbnRUeXBlIHRoZSB0eXBlIG9mIHRoZSBlbGVtZW50LgotICAgKiBAdGhyb3dzIFdTSUFuYWx5emVyRXhjZXB0aW9uIGlmIHVuYWJsZSB0byBhZGQgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4KLSAgICovCi0gIHB1YmxpYyBXU0RMQW5hbHl6ZXIoU3RyaW5nIGZpbGVOYW1lLCBTdHJpbmcgcGFyZW50TmFtZSwgU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIGVsZW1lbnROYW1lLCBTdHJpbmcgZWxlbWVudFR5cGUpIHRocm93cyBXU0lBbmFseXplckV4Y2VwdGlvbgotICB7Ci0gICAgdGhpcyhmaWxlTmFtZSk7Ci0gICAgYWRkQ29uZmlndXJhdGlvblRvVGVzdChwYXJlbnROYW1lLCBuYW1lc3BhY2UsIGVsZW1lbnROYW1lLCBlbGVtZW50VHlwZSk7Ci0KLSAgfQotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICogQHBhcmFtIGZpbGVOYW1lICBsb2cgZmlsZSBuYW1lLgotICAgKi8KLSAgcHVibGljIFdTRExBbmFseXplcihTdHJpbmcgZmlsZU5hbWUsIFdTSVByZWZlcmVuY2VzIHdzaVByZWZlcmVuY2VzKQotICB7Ci0gICAgcmVzZXQoZmlsZU5hbWUpOwotICAgIHRoaXMud3NpUHJlZmVyZW5jZXMgPSB3c2lQcmVmZXJlbmNlczsKLSAgfQotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICogQHBhcmFtIGZpbGVOYW1lICBsb2cgZmlsZSBuYW1lLgotICAgKi8KLSAgcHVibGljIFdTRExBbmFseXplcihTdHJpbmcgZmlsZU5hbWUpCi0gIHsKLSAgICByZXNldChmaWxlTmFtZSk7Ci0gICAgaWYoV1NJVGVzdFRvb2xzUHJvcGVydGllcy5nZXRFY2xpcHNlQ29udGV4dCgpKQotICAgIHsKLSAgICAgIHRoaXMud3NpUHJlZmVyZW5jZXMgPSBXU0lUZXN0VG9vbHNFY2xpcHNlUHJvcGVydGllcy5jaGVja1dTSVByZWZlcmVuY2VzKGZpbGVOYW1lKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgCSAgdGhpcy53c2lQcmVmZXJlbmNlcyA9IFdTSVRlc3RUb29sc1Byb3BlcnRpZXMuY2hlY2tXU0lQcmVmZXJlbmNlcyhmaWxlTmFtZSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIFdTSVByZWZlcmVuY2VzIGdldFdTSVByZWZlcmVuY2VzKCkKLSAgewotCSAgcmV0dXJuIHRoaXMud3NpUHJlZmVyZW5jZXM7Ci0gIH0KLQkgIAotICAvKioKLSAgICogdmFsaWRhdGVDb25mb3JtYW5jZS4KLSAgICogVmFsaWRhdGUgdGhlIFdTREwgZmlsZSBhcyBzZXR1cCBpbiB0aGUgY29uc3RydWN0b3IuCi0gICAqIEB0aHJvd3MgV1NJQW5hbHl6ZXJFeGNlcHRpb24gaWYgdW5hYmxlIHRvIHZhbGlkYXRlIHRoZSBnaXZlbiBXU0RMIEZpbGUuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2YWxpZGF0ZUNvbmZvcm1hbmNlKCkgdGhyb3dzIFdTSUFuYWx5emVyRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0JICBpZiAod3NpUHJlZmVyZW5jZXMuZ2V0Q29tcGxpYW5jZUxldmVsKCkgIT0gV1NJVGVzdFRvb2xzUHJvcGVydGllcy5JR05PUkVfTk9OX1dTSSkKLQkgIHsKLSAgICAgICAgLy8gaGVyZSdzIHdoZXJlIHRoZSB2YWxpZGF0aW9uIGFjdHVhbGx5IHN0YXJ0cyBoYXBwZW5pbmcKLSAgICAgICAgV1NJQmFzaWNQcm9maWxlQW5hbHl6ZXIgYnBhbmFseXplciA9IG5ldyBXU0lCYXNpY1Byb2ZpbGVBbmFseXplcihhbmFseXplckNvbmZpZ3Msd3NkbFVSSSk7Ci0gICAgICAgIGJwYW5hbHl6ZXIudmFsaWRhdGVBbGwoKTsKLSAgICAgICAgUmVwb3J0SW1wbCByZXBvcnQgPSAoUmVwb3J0SW1wbCkgYnBhbmFseXplci5nZXRSZXBvcnQoKTsKLQotICAgICAgICBMaXN0IGVudHJpZXMgPSByZXBvcnQuZ2V0RW50cmllcygpOwotCi0gICAgICAgIC8vIGlmIHRoZXJlIGFyZSByZXBvcnQgZW50cmllcyB3ZSBpdGVyYXRlIHRocm91Z2ggdGhlbSBhbmQgYWRkIGFsbAotICAgICAgICAvLyBlcnJvciBhbmQgd2FybmluZyBtZXNzYWdlcyB0byB0aGUgZXJyb3IgbGlzdC4gCi0gICAgICAgIGlmIChlbnRyaWVzICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBJdGVyYXRvciBpZW50cnkgPSBlbnRyaWVzLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgd2hpbGUgKGllbnRyeS5oYXNOZXh0KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgRW50cnkgZW50cnkgPSAoRW50cnkpIGllbnRyeS5uZXh0KCk7Ci0gICAgICAgICAgICBNYXAgYXNzZXJ0aW9uUmVzdWx0cyA9IGVudHJ5LmdldEFzc2VydGlvblJlc3VsdExpc3QoKTsKLQotICAgICAgICAgICAgaWYgKGFzc2VydGlvblJlc3VsdHMgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgSXRlcmF0b3IgaWFzc2VydGlvblJlc3VsdHMgPSBhc3NlcnRpb25SZXN1bHRzLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0KLSAgICAgICAgICAgICAgd2hpbGUgKGlhc3NlcnRpb25SZXN1bHRzLmhhc05leHQoKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEFzc2VydGlvblJlc3VsdCBhciA9IChBc3NlcnRpb25SZXN1bHQpIGlhc3NlcnRpb25SZXN1bHRzLm5leHQoKTsKLSAgICAgICAgICAgICAgICBUZXN0QXNzZXJ0aW9uIHRhID0gYXIuZ2V0QXNzZXJ0aW9uKCk7Ci0gICAgICAgICAgICAgICAgLy8gYWRkIGluIHRvIHNraXAgZXJyb3JzIGZvciBhc3NlcnRpb25zIHRoYXQgYXJlIHJlcG9ydGluZyBpbmNvcnJlY3QgcHJvYmxlbXMuCi0gICAgICAgICAgICAgICAgLy8gVGhpcyBhbGxvd3MgdXMgdG8gbm90IHJlcG9ydCBpbmNvcnJlY3QgZXJyb3JzIHJlcG9ydGVkIGluIHRoZSB0b29scyB3aXRob3V0IGRpc2FibGluZyB0aGVtCi0gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFN0cmluZyBhc3NlcnRpb25JZCA9IHRhLmdldElkKCk7Ci0gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGJvb2xlYW4gaWdub3JlQXNzZXJ0aW9uID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGZvcihpbnQgaSA9IGlnbm9yZUFzc2VydGlvbnMubGVuZ3RoLTE7IGkgPj0wO2ktLSkKLSAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAJaWYoaWdub3JlQXNzZXJ0aW9uc1tpXS5lcXVhbHNJZ25vcmVDYXNlKGFzc2VydGlvbklkKSkKLSAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgCXsKLSAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgCQlpZ25vcmVBc3NlcnRpb24gPSB0cnVlOwotICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAJfQotICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIGlmKGlnbm9yZUFzc2VydGlvbikKLSAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAJY29udGludWU7Ci0gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoYXIuZ2V0UmVzdWx0KCkuZXF1YWxzSWdub3JlQ2FzZShGQUlMRUQpICYmIAotICAgICAgICAgICAgICAgIAl3c2lQcmVmZXJlbmNlcy5nZXRDb21wbGlhbmNlTGV2ZWwoKS5lcXVhbHMoV1NJVGVzdFRvb2xzUHJvcGVydGllcy5TVE9QX05PTl9XU0kpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGlmICh0YS5pc0VuYWJsZWQoKSkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgTGlzdCBlcnJvck1lc3NhZ2VMaXN0ID0gYXIuZ2V0RmFpbHVyZURldGFpbExpc3QoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yTWVzc2FnZUxpc3QgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgIEl0ZXJhdG9yIGVycm9yTWVzc2FnZXMgPSBlcnJvck1lc3NhZ2VMaXN0Lml0ZXJhdG9yKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoZXJyb3JNZXNzYWdlcy5oYXNOZXh0KCkpCi0gICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgRmFpbHVyZURldGFpbEltcGwgZmRpID0gKEZhaWx1cmVEZXRhaWxJbXBsKSBlcnJvck1lc3NhZ2VzLm5leHQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaW5lTnVtYmVyID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb2x1bW5OdW1iZXIgPSAwOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBFbGVtZW50TG9jYXRpb24gZWwgPSBmZGkuZ2V0RWxlbWVudExvY2F0aW9uKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbCAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyID0gZWwuZ2V0TGluZU51bWJlcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5OdW1iZXIgPSBlbC5nZXRDb2x1bW5OdW1iZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0aW9uZXJyb3JzLmFkZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEFzc2VydGlvbkVycm9yKHRhLmdldElkKCksIHRhLmdldEZhaWx1cmVNZXNzYWdlKCksIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikpOwotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAvLyB0aGUgZXJyb3JNZXNzYWdlTGlzdCBpcyBudWxsIGJ1dCB0aGVyZSBpcyBhbiBlcnJvciBzbyBhc3NpZ24gaXQgdG8gbGluZSAwIGZvciBub3cKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0aW9uZXJyb3JzLmFkZChuZXcgQXNzZXJ0aW9uRXJyb3IodGEuZ2V0SWQoKSwgdGEuZ2V0RmFpbHVyZU1lc3NhZ2UoKSwgMCwgMCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGFyLmdldFJlc3VsdCgpLmVxdWFsc0lnbm9yZUNhc2UoRkFJTEVEKSAmJiAKLSAgICAgICAgICAgICAgICAgICAgICAgICB3c2lQcmVmZXJlbmNlcy5nZXRDb21wbGlhbmNlTGV2ZWwoKS5lcXVhbHMoV1NJVGVzdFRvb2xzUHJvcGVydGllcy5XQVJOX05PTl9XU0kpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGlmICh0YS5pc0VuYWJsZWQoKSkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgTGlzdCBlcnJvck1lc3NhZ2VMaXN0ID0gYXIuZ2V0RmFpbHVyZURldGFpbExpc3QoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yTWVzc2FnZUxpc3QgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgIEl0ZXJhdG9yIGVycm9yTWVzc2FnZXMgPSBlcnJvck1lc3NhZ2VMaXN0Lml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGVycm9yTWVzc2FnZXMuaGFzTmV4dCgpKQotICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEZhaWx1cmVEZXRhaWxJbXBsIGZkaSA9IChGYWlsdXJlRGV0YWlsSW1wbCkgZXJyb3JNZXNzYWdlcy5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZU51bWJlciA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29sdW1uTnVtYmVyID0gMDsKLQotICAgICAgICAgICAgICAgICAgICAgICAgRWxlbWVudExvY2F0aW9uIGVsID0gZmRpLmdldEVsZW1lbnRMb2NhdGlvbigpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWwgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlciA9IGVsLmdldExpbmVOdW1iZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uTnVtYmVyID0gZWwuZ2V0Q29sdW1uTnVtYmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRpb253YXJuaW5ncy5hZGQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBBc3NlcnRpb25FcnJvcih0YS5nZXRJZCgpLCB0YS5nZXRGYWlsdXJlTWVzc2FnZSgpLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpKTsKLSAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGVycm9yTWVzc2FnZUxpc3QgaXMgbnVsbCBidXQgdGhlcmUgaXMgYW4gZXJyb3Igc28gYXNzaWduIGl0IHRvIGxpbmUgMCBmb3Igbm93Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgIGFzc2VydGlvbndhcm5pbmdzLmFkZChuZXcgQXNzZXJ0aW9uRXJyb3IodGEuZ2V0SWQoKSwgdGEuZ2V0RmFpbHVyZU1lc3NhZ2UoKSwgMCwgMCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0JICB9Ci0gICAgfQotCi0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBXU0lBbmFseXplckV4Y2VwdGlvbihlICsgIlRoZSBXU0RMQW5hbHl6ZXIgd2FzIHVuYWJsZSB0byB2YWxpZGF0ZSB0aGUgZ2l2ZW4gV1NETCBGaWxlLiIpOwotICAgIH0KLQotICB9Ci0KLSAgLyoqCi0gICAqIEFkZCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLgotICAgKiBAcGFyYW0gcGFyZW50TmFtZSBwYXJlbnQgZWxlbWVudCBuYW1lLgotICAgKiBAcGFyYW0gbmFtZXNwYWNlICBhIG5hbWVzcGFjZS4KLSAgICogQHBhcmFtIGVsZW1lbnROYW1lIHRoZSBlbGVtZW50IHRvIGFuYWx5emUuCi0gICAqIEBwYXJhbSBlbGVtZW50VHlwZSB0aGUgdHlwZSBvZiB0aGUgZWxlbWVudC4KLSAgICogQHRocm93cyBXU0lBbmFseXplckV4Y2VwdGlvbiBpZiB1bmFibGUgdG8gYWRkIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRDb25maWd1cmF0aW9uVG9UZXN0KAotICAgIFN0cmluZyBwYXJlbnROYW1lLAotICAgIFN0cmluZyBuYW1lc3BhY2UsCi0gICAgU3RyaW5nIGVsZW1lbnROYW1lLAotICAgIFN0cmluZyBlbGVtZW50VHlwZSkgdGhyb3dzIFdTSUFuYWx5emVyRXhjZXB0aW9uCi0gIHsKLSAgCXRyeQotICAJewotICAgICAgV1NETFJlZmVyZW5jZSB3c2RsUmVmZXJlbmNlID0gbmV3IFdTRExSZWZlcmVuY2VJbXBsKCk7Ci0KLSAgICAgIFdTRExFbGVtZW50IHdzZGxFbGVtZW50ID0gKFdTRExFbGVtZW50KSBuZXcgV1NETEVsZW1lbnRJbXBsKCk7Ci0gICAgICB3c2RsRWxlbWVudC5zZXRUeXBlKGVsZW1lbnRUeXBlKTsKLSAgICAgIGlmIChwYXJlbnROYW1lICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHdzZGxFbGVtZW50LnNldFBhcmVudEVsZW1lbnROYW1lKHBhcmVudE5hbWUpOwotICAgICAgfQotICAgICAgd3NkbEVsZW1lbnQuc2V0TmFtZXNwYWNlKG5hbWVzcGFjZSk7Ci0gICAgICB3c2RsRWxlbWVudC5zZXROYW1lKGVsZW1lbnROYW1lKTsKLSAgICAgIHdzZGxSZWZlcmVuY2Uuc2V0V1NETEVsZW1lbnQod3NkbEVsZW1lbnQpOwotCi0gICAgICB3c2RsUmVmZXJlbmNlLnNldFdTRExMb2NhdGlvbih3c2RsVVJJKTsKLSAgICAgIERvY3VtZW50RmFjdG9yeSBkb2N1bWVudEZhY3RvcnkgPSBEb2N1bWVudEZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLSAgICAgIC8vIEluaXRpYWxpemUgdGhlIEJhc2ljUHJvZmlsZUFuYWx5emVyIHVzaW5nIGFuIGFuYWx5emVyY29uZmlnIG9iamVjdAotICAgICAgQW5hbHl6ZXJDb25maWcgYW5hbHl6ZXJjb25maWcgPSBkb2N1bWVudEZhY3RvcnkubmV3QW5hbHl6ZXJDb25maWcoKTsKLQotICAgICAgQXNzZXJ0aW9uUmVzdWx0c09wdGlvbiBhcm8gPSBuZXcgQXNzZXJ0aW9uUmVzdWx0c09wdGlvbkltcGwoKTsKLSAgICAgIGFyby5zZXRBc3NlcnRpb25SZXN1bHRUeXBlKEFzc2VydGlvblJlc3VsdFR5cGUubmV3SW5zdGFuY2UoTk9UUEFTU0VEKSk7Ci0gICAgICBhcm8uc2V0U2hvd0Fzc2VydGlvbkRlc2NyaXB0aW9uKGZhbHNlKTsKLSAgICAgIGFyby5zZXRTaG93RmFpbHVyZURldGFpbChmYWxzZSk7Ci0gICAgICBhcm8uc2V0U2hvd0ZhaWx1cmVNZXNzYWdlKGZhbHNlKTsKLSAgICAgIGFyby5zZXRTaG93TWVzc2FnZUVudHJ5KGZhbHNlKTsKLQotICAgICAgLy8gYWx0aG91Z2ggd2UgZG9uJ3QgdXNlIGEgc3R5bGVzaGVldCBmb3Igb3VyIGFwcGxpY2F0aW9uIGl0IGlzIHJlcXVpcmVkIG9yIHRoZSAKLSAgICAgIC8vIFdTLUkgdG9vbHMgd2lsbCBmYWlsCi0gICAgICBBZGRTdHlsZVNoZWV0IGFkZHN0eWxlc2hlZXQgPSBuZXcgQWRkU3R5bGVTaGVldEltcGwoKTsKLQotICAgICAgYW5hbHl6ZXJjb25maWcuc2V0QXNzZXJ0aW9uUmVzdWx0c09wdGlvbihhcm8pOwotICAgICAgYW5hbHl6ZXJjb25maWcuc2V0QWRkU3R5bGVTaGVldChhZGRzdHlsZXNoZWV0KTsKLSAgICAgIGFuYWx5emVyY29uZmlnLnNldFJlcGxhY2VSZXBvcnQodHJ1ZSk7Ci0gICAgICAvL2FuYWx5emVyY29uZmlnLnNldExvZ0xvY2F0aW9uKGZpbGVuYW1lKTsKLSAgICAgIGFuYWx5emVyY29uZmlnLnNldFRlc3RBc3NlcnRpb25zRG9jdW1lbnRMb2NhdGlvbih3c2lQcmVmZXJlbmNlcy5nZXRUQURGaWxlKCkpOwotICAgICAgYW5hbHl6ZXJjb25maWcuc2V0VmVyYm9zZU9wdGlvbihmYWxzZSk7Ci0KLSAgICAgIC8vIHNldCB0aGUgd3NkbFJlZmVyZW5jZQotICAgICAgYW5hbHl6ZXJjb25maWcuc2V0V1NETFJlZmVyZW5jZSh3c2RsUmVmZXJlbmNlKTsKLSAgICAgIGFuYWx5emVyQ29uZmlncy5hZGQoYW5hbHl6ZXJjb25maWcpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTSUFuYWx5emVyRXhjZXB0aW9uKCJVbmFibGUgdG8gYWRkIEFuYWx5emVyQ29uZmlnIHRvIGxpc3QuICIgKyBlKTsKLSAgICB9Ci0gIH0KLSAgLyoqCi0gICAqIE1ldGhvZCBnZXRBc3NlcnRpb25GYWlsdXJlcy4KLSAgICogUmV0dXJuIGEgbGlzdCBvZiB0aGUgYXNzZXJ0aW9uIGZhaWx1cmVzLgotICAgKiBAcmV0dXJuIGEgbGlzdCBvZiB0aGUgYXNzZXJ0aW9uIGZhaWx1cmVzLgotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0QXNzZXJ0aW9uRXJyb3JzKCkKLSAgewotICAgIHJldHVybiBhc3NlcnRpb25lcnJvcnM7Ci0gIH0KLQotICAvKioKLSAgCSAqIE1ldGhvZCBnZXRBc3NlcnRpb25XYXJuaW5ncy4KLSAgCSAqIFJldHVybnMgYSBsaXN0IG9mIGFueSBhc3NlcnRpb24gd2FybmluZ3MgZ2VuZXJhdGVkIGZyb20gdmFsaWRhdGVDb25mb3JtYW5jZS4KLSAgCSAqIEByZXR1cm4gYSBsaXN0IG9mIGFueSBhc3NlcnRpb24gd2FybmluZ3MgZ2VuZXJhdGVkIGZyb20gdmFsaWRhdGVDb25mb3JtYW5jZS4KLSAgCSAqLwotICBwdWJsaWMgTGlzdCBnZXRBc3NlcnRpb25XYXJuaW5ncygpCi0gIHsKLSAgICByZXR1cm4gYXNzZXJ0aW9ud2FybmluZ3M7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXNldC4KLSAgICogQHBhcmFtIGZpbGVuYW1lIGxvZyBmaWxlIG5hbWUuCi0gICAqLwotICBwdWJsaWMgdm9pZCByZXNldChTdHJpbmcgZmlsZW5hbWUpCi0gIHsKLQlpZiAoZmlsZW5hbWUgIT0gbnVsbCkKLQl7Ci0JICBTdHJpbmcgdG1wID0gZmlsZW5hbWUucmVwbGFjZSgnXFwnLCAnLycpOwotCSAgaWYgKCghdG1wLnN0YXJ0c1dpdGgoV1NJQ29uc3RhbnRzLkhUVFBfUFJFRklYKSkgJiYKLSAgICAgICAgICAoIXRtcC5zdGFydHNXaXRoKFdTSUNvbnN0YW50cy5GSUxFX1BSRUZJWCkpKQotCSAgewotCSAgICB0bXAgPSBXU0lDb25zdGFudHMuRklMRV9QUk9UT0NPTCArIHRtcDsKLQkgIH0KLQkgIHRyeQotCSAgewotCSAgICB3c2RsVVJJID0gVVJJRW5jb2Rlci5lbmNvZGUodG1wLCAiVVRGOCIpOwotCSAgfQotCSAgY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gdWVlKQotCSAgewotCSAgfQotCX0KLSAgCWFuYWx5emVyQ29uZmlncyA9IG5ldyBWZWN0b3IoKTsKLSAgCWFzc2VydGlvbmVycm9ycyA9IG5ldyBWZWN0b3IoKTsKLSAgCWFzc2VydGlvbndhcm5pbmdzID0gbmV3IFZlY3RvcigpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvYW5hbHl6ZXIvV1NJQW5hbHl6ZXJFeGNlcHRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9hbmFseXplci9XU0lBbmFseXplckV4Y2VwdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Nzc3ODUzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9hbmFseXplci9XU0lBbmFseXplckV4Y2VwdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5hbmFseXplcjsKLQotLyoqCi0gKiBBbmFseXplckV4Y2VwdGlvbgotICogCi0gKiBFeGNlcHRpb24gdG8gYmUgdGhyb3duIGlmIGFuIGFuYWx5emVyIGZhaWxzCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0lBbmFseXplckV4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbgotewotICAvKioKLQkgKiBDb21tZW50IGZvciA8Y29kZT5zZXJpYWxWZXJzaW9uVUlEPC9jb2RlPgotCSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDM4MzUxNTgzNTAyMTkxOTQ2NzdMOwotCS8qKgotICAgKiBUaHJvd2FibGUuCi0gICAqLwotICBwcm90ZWN0ZWQgVGhyb3dhYmxlIHRocm93YWJsZSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBBbmFseXplckV4Y2VwdGlvbi4KLSAgICovCi0gIHB1YmxpYyBXU0lBbmFseXplckV4Y2VwdGlvbigpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBBbmFseXplckV4Y2VwdGlvbi4KLSAgICogQHBhcmFtIHMgZGV0YWlsIG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgV1NJQW5hbHl6ZXJFeGNlcHRpb24oU3RyaW5nIHMpCi0gIHsKLSAgICBzdXBlcihzKTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgYW4gZXhjZXB0aW9uIHdpdGggYSBtZXNzYWdlIGFuZCByZWxhdGVkIGV4Y2VwdGlvbi4KLSAgICogCi0gICAqIEBwYXJhbSBtc2cgICAgICAgIHRoZSBleGNlcHRpb24gbWVzc2FnZQotICAgKiBAcGFyYW0gdGhyb3dhYmxlICB0aHJvd2FibGUgdGhhdCBpcyByZWxhdGVkIHRvIHRoaXMgZXhjZXB0aW9uCi0gICAqLwotICBwdWJsaWMgV1NJQW5hbHl6ZXJFeGNlcHRpb24oU3RyaW5nIG1zZywgVGhyb3dhYmxlIHRocm93YWJsZSkKLSAgewotICAgIC8vIEV4Y2VwdGlvbgotICAgIHN1cGVyKG1zZyk7Ci0KLSAgICAvLyBTYXZlIGlucHV0IHJlZmVyZW5jZQotICAgIHRoaXMudGhyb3dhYmxlID0gdGhyb3dhYmxlOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdCdzIHZhbHVlcy4KLSAgICoKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBkZXRhaWwgbWVzc2FnZSBvZiB0aGlzIHRocm93YWJsZSBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UoKQotICB7Ci0gICAgcmV0dXJuIHN1cGVyLmdldE1lc3NhZ2UoKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBleGNlcHRpb24gdGhhdCBjYXVzZWQgdGhpcyBleGNlcHRpb24gdG8gYmUgY3JlYXRlZC4KLSAgICogCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgZW5jYXBzdWxhdGVkIHRocm93YWJsZSBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgVGhyb3dhYmxlIGdldFRhcmdldEV4Y2VwdGlvbigpCi0gIHsKLSAgICAvLyBSZXR1cm4gdGhyb3dhYmxlCi0gICAgcmV0dXJuIHRocm93YWJsZTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvYW5hbHl6ZXIvV1NJQmFzaWNQcm9maWxlQW5hbHl6ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9hbmFseXplci9XU0lCYXNpY1Byb2ZpbGVBbmFseXplci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjliOTI4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9hbmFseXplci9XU0lCYXNpY1Byb2ZpbGVBbmFseXplci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5hbmFseXplcjsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLlRvb2xJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkJhc2ljUHJvZmlsZUFuYWx5emVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5Qcm9maWxlVmFsaWRhdG9yRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5NZXNzYWdlTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmRvY3VtZW50LkRvY3VtZW50RmFjdG9yeUltcGw7Ci0KLS8qKgotICogV1NJQmFzaWNQcm9maWxlQW5hbHl6ZXIKLSAqIAotICogQW4gZXh0ZW5zaW9uIG9mIHRoZSBCYXNpY1Byb2ZpbGVBbmFseXplciBmcm9tIHRoZSBXUy1JIFRlc3QgVG9vbHMgdGhhdAotICogYWxsb3dzIGNhbGxpbmcgY29kZSB0byBnZXQgdGhlIHJlcG9ydCBnZW5lcmF0ZWQgZnJvbSBXUy1JIHZhbGlkYXRpb24uCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0lCYXNpY1Byb2ZpbGVBbmFseXplciBleHRlbmRzIEJhc2ljUHJvZmlsZUFuYWx5emVyCi17Ci0gIC8qKgotICAgKiBEZWZhdWx0IGRvY3VtZW50IGZhY3RvcnkgY2xhc3MgbmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERFRl9ET0NVTUVOVF9GQUNUT1JZID0gIm9yZy5lY2xpcHNlLndzaS50ZXN0LnRvb2xzLnV0aWwuZG9jdW1lbnQuRG9jdW1lbnRGYWN0b3J5SW1wbCI7Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBXU0lCYXNpY1Byb2ZpbGVBbmFseXplci4KLSAgICogQHBhcmFtIGFuYWx5emVyQ29uZmlnIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uCi0gICAqIEBwYXJhbSB3c2RsVVJJIHRoZSBsb2NhdGlvbiBvZiB0aGUgV1NETCBkb2N1bWVudC4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdW5hYmxlIHRvIGNyZWF0ZSBhIEJhc2ljIHByb2ZpbGUgYW5hbHl6ZXIuCi0gICAqLwotICBwdWJsaWMgV1NJQmFzaWNQcm9maWxlQW5hbHl6ZXIoTGlzdCBhbmFseXplckNvbmZpZywgU3RyaW5nIHdzZGxVUkkpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHN1cGVyKGFuYWx5emVyQ29uZmlnLCB3c2RsVVJJKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgV1NJQmFzaWNQcm9maWxlQW5hbHl6ZXIuCi0gICAqIEBwYXJhbSBhbmFseXplckNvbmZpZyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB1bmFibGUgdG8gY3JlYXRlIGEgQmFzaWMgcHJvZmlsZSBhbmFseXplci4KLSAgICovCi0gIHB1YmxpYyBXU0lCYXNpY1Byb2ZpbGVBbmFseXplcihMaXN0IGFuYWx5emVyQ29uZmlnKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBzdXBlcihhbmFseXplckNvbmZpZyk7Ci0gIH0KLQotICAvKioKLSAgICogQ29tbW9uIGluaXRpYWxpemF0aW9uLgotICAgKiBAcGFyYW0gdG9vbEluZm8gYSBUb29sSW5mbyBvYmplY3QuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW1zIGR1cmluZyBpbml0aWFsaXphdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGluaXQoVG9vbEluZm8gdG9vbEluZm8pIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHRoaXMudG9vbEluZm8gPSB0b29sSW5mbzsKLSAgICAKLSAgICAvLyBDcmVhdGUgbWVzc2FnZSBsaXN0Ci0gICAgbWVzc2FnZUxpc3QgPSBuZXcgTWVzc2FnZUxpc3QoUkVTT1VSQ0VfQlVORExFX05BTUUpOwotCi0gICAgLy8gQ3JlYXRlIHByb2ZpbGUgdmFsaWRhdG9yIGZhY3RvcnkKLSAgICBmYWN0b3J5ID0gUHJvZmlsZVZhbGlkYXRvckZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLQotICAgIC8vIENyZWF0ZSBkb2N1bWVudCBmYWN0b3J5Ci0gICAgZG9jdW1lbnRGYWN0b3J5ID0gbmV3IERvY3VtZW50RmFjdG9yeUltcGwoKTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgZ2V0UmVwb3J0LgotICAgKiAKLSAgICogUmV0dXJuIHRoZSBSZXBvcnQgZ2VuZXJhdGVkIGJ5IHRoZSB2YWxpZGF0aW9uLgotICAgKiBAcmV0dXJuIHRoZSBSZXBvcnQgZ2VuZXJhdGVkIGJ5IHRoZSB2YWxpZGF0aW9uLgotICAgKi8KLSAgcHVibGljIFJlcG9ydCBnZXRSZXBvcnQoKQotICB7Ci0gICAgcmV0dXJuIHJlcG9ydGVyLmdldFJlcG9ydCgpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL1Rvb2xFbnZpcm9ubWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvVG9vbEVudmlyb25tZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4YmVlM2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvVG9vbEVudmlyb25tZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlOwotCi1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlhNTEluZm87Ci0KLS8qKgotICogVGhpcyBjbGFzcyBjb250YWlucyBUb29sIGVudmlyb25tZW50IGluZm9ybWF0aW9uLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBUb29sRW52aXJvbm1lbnQKLXsKLSAgLyoqCi0gICAqIEVsZW1lbnQgbmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fTkFNRSA9IFdTSUNvbnN0YW50cy5FTEVNX0VOVklST05NRU5UOwotCi0gIC8qKgotICAgKiBRTmFtZS4KLSAgICovCi0gIC8vcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBRTkFNRSA9IG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9DT01NT04sIEVMRU1fTkFNRSk7Ci0KLSAgLyoqCi0gICAqIFRvb2wgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIHJ1bnRpbWVOYW1lID0gU3lzdGVtLmdldFByb3BlcnR5KCJqYXZhLnJ1bnRpbWUubmFtZSIpOwotICBwcm90ZWN0ZWQgU3RyaW5nIHJ1bnRpbWVWZXJzaW9uID0gU3lzdGVtLmdldFByb3BlcnR5KCJqYXZhLnJ1bnRpbWUudmVyc2lvbiIpOwotCi0gIHByb3RlY3RlZCBTdHJpbmcgb3NOYW1lID0gU3lzdGVtLmdldFByb3BlcnR5KCJvcy5uYW1lIik7Ci0gIHByb3RlY3RlZCBTdHJpbmcgb3NWZXJzaW9uID0gU3lzdGVtLmdldFByb3BlcnR5KCJvcy52ZXJzaW9uIik7Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyB4bWxQYXJzZXJOYW1lID0gIj8iOwotICBwcm90ZWN0ZWQgU3RyaW5nIHhtbFBhcnNlclZlcnNpb24gPSAiPyI7Ci0KLSAgLyoqCi0gICAqIEFkZGl0aW9uYWwgdG9vbCBlbnZpcm9ubWVudCBpbmZvcm1hdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCBYTUxJbmZvIHhtbEluZm8gPSBudWxsOwotCi0gIC8qKgotICAgKiBDcmVhdGUgb2JqZWN0IHRoYXQgcmVwcmVzZW50cyB0b29sIHJ1bnRpbWUgZW52aXJvbm1lbnQuCi0gICAqLwotICBwdWJsaWMgVG9vbEVudmlyb25tZW50KCkKLSAgewotICAgIHRyeQotICAgIHsKLQotICAgICAgLy8gRlVUVVJFOiBtYWRlIGNvbXBhdGlibGUgd2l0aCBsYXRlciB2ZXJzaW9ucyBvZiBYZXJjZXMgd2hlcmUgZ2V0VmVyc2lvbgotICAgICAgLy8gaXMgbm8gbG9uZ2VyIHN0YXRpY2FsbHkgYXZhaWxhYmxlLgotICAgICAgLy8geG1sUGFyc2VyVmVyc2lvbiA9IG5ldyBvcmcuYXBhY2hlLnhlcmNlcy5pbXBsLlZlcnNpb24oKS5nZXRWZXJzaW9uKCk7Ci0gICAgICB4bWxQYXJzZXJWZXJzaW9uID0gb3JnLmFwYWNoZS54ZXJjZXMuaW1wbC5WZXJzaW9uLmdldFZlcnNpb24oKTsKLQotICAgICAgeG1sUGFyc2VyTmFtZSA9ICJBcGFjaGUgWGVyY2VzIjsKLSAgICB9Ci0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gQUREOiBIb3cgZWxzZSBjYW4gd2UgZ2V0IHRoZSBuYW1lIHZlcnNpb24gbnVtYmVyCi0gICAgfQotCi0gICAgY2F0Y2ggKEVycm9yIGVycikKLSAgICB7Ci0gICAgICAvLyBBREQ6IEhvdyBlbHNlIGNhbiB3ZSBnZXQgdGhlIG5hbWUgdmVyc2lvbiBudW1iZXIKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIG9iamVjdCB0aGF0IHJlcHJlc2VudHMgdG9vbCBydW50aW1lIGVudmlyb25tZW50LgotICAgKiBAcGFyYW0geG1sSW5mbyBhZGRpdGlvbmFsIHRvb2wgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24uCi0gICAqLwotICBwdWJsaWMgVG9vbEVudmlyb25tZW50KFhNTEluZm8geG1sSW5mbykKLSAgewotICAgIHRoaXMueG1sSW5mbyA9IHhtbEluZm87Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgb3NOYW1lLgotICAgKiBAcmV0dXJuIHRoZSBvc05hbWUuCi0gICAqIEBzZWUgI3NldE9TTmFtZQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRPU05hbWUoKQotICB7Ci0gICAgcmV0dXJuIG9zTmFtZTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBvc1ZlcnNpb24uCi0gICAqIEByZXR1cm4gdGhlIG9zVmVyc2lvbi4KLSAgICogQHNlZSAjc2V0T1NWZXJzaW9uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE9TVmVyc2lvbigpCi0gIHsKLSAgICByZXR1cm4gb3NWZXJzaW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHBhcnNlck5hbWUuCi0gICAqIEByZXR1cm4gdGhlIHBhcnNlck5hbWUuCi0gICAqIEBzZWUgI3NldFhNTFBhcnNlck5hbWUKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0WE1MUGFyc2VyTmFtZSgpCi0gIHsKLSAgICByZXR1cm4geG1sUGFyc2VyTmFtZTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBwYXJzZXJWZXJzaW9uLgotICAgKiBAcmV0dXJuIHRoZSBwYXJzZXJWZXJzaW9uLgotICAgKiBAc2VlICNzZXRYTUxQYXJzZXJWZXJzaW9uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFhNTFBhcnNlclZlcnNpb24oKQotICB7Ci0gICAgcmV0dXJuIHhtbFBhcnNlclZlcnNpb247Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcnVudGltZU5hbWUuCi0gICAqIEByZXR1cm4gdGhlIHJ1bnRpbWVOYW1lLgotICAgKiBAc2VlICNzZXRSdW50aW1lTmFtZQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRSdW50aW1lTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gcnVudGltZU5hbWU7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcnVudGltZVZlcnNpb24uCi0gICAqIEByZXR1cm4gdGhlIHJ1bnRpbWVWZXJzaW9uLgotICAgKiBAc2VlICNzZXRSdW50aW1lVmVyc2lvbgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRSdW50aW1lVmVyc2lvbigpCi0gIHsKLSAgICByZXR1cm4gcnVudGltZVZlcnNpb247Ci0gIH0KLQotICAvKioKLSAgICogU2V0cyB0aGUgb3NOYW1lLgotICAgKiBAcGFyYW0gb3NOYW1lIHRoZSBvc05hbWUgdG8gc2V0LgotICAgKiBAc2VlICNnZXRPU05hbWUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE9TTmFtZShTdHJpbmcgb3NOYW1lKQotICB7Ci0gICAgdGhpcy5vc05hbWUgPSBvc05hbWU7Ci0gIH0KLQotICAvKioKLSAgICogU2V0cyB0aGUgb3NWZXJzaW9uLgotICAgKiBAcGFyYW0gb3NWZXJzaW9uIHRoZSBvc1ZlcnNpb24gdG8gc2V0LgotICAgKiBAc2VlICNnZXRPU1ZlcnNpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE9TVmVyc2lvbihTdHJpbmcgb3NWZXJzaW9uKQotICB7Ci0gICAgdGhpcy5vc1ZlcnNpb24gPSBvc1ZlcnNpb247Ci0gIH0KLQotICAvKioKLSAgICogU2V0cyB0aGUgcGFyc2VyTmFtZS4KLSAgICogQHBhcmFtIHhtbFBhcnNlck5hbWUgdGhlIHBhcnNlck5hbWUgdG8gc2V0LgotICAgKiBAc2VlICNnZXRYTUxQYXJzZXJOYW1lCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRYTUxQYXJzZXJOYW1lKFN0cmluZyB4bWxQYXJzZXJOYW1lKQotICB7Ci0gICAgdGhpcy54bWxQYXJzZXJOYW1lID0geG1sUGFyc2VyTmFtZTsKLSAgfQotCi0gIC8qKgotICAgKiBTZXRzIHRoZSBwYXJzZXJWZXJzaW9uLgotICAgKiBAcGFyYW0geG1sUGFyc2VyVmVyc2lvbiB0aGUgcGFyc2VyVmVyc2lvbiB0byBzZXQuCi0gICAqIEBzZWUgI2dldFhNTFBhcnNlclZlcnNpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFhNTFBhcnNlclZlcnNpb24oU3RyaW5nIHhtbFBhcnNlclZlcnNpb24pCi0gIHsKLSAgICB0aGlzLnhtbFBhcnNlclZlcnNpb24gPSB4bWxQYXJzZXJWZXJzaW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHJ1bnRpbWVOYW1lLgotICAgKiBAcGFyYW0gcnVudGltZU5hbWUgdGhlIHJ1bnRpbWVOYW1lIHRvIHNldC4KLSAgICogQHNlZSAjZ2V0UnVudGltZU5hbWUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFJ1bnRpbWVOYW1lKFN0cmluZyBydW50aW1lTmFtZSkKLSAgewotICAgIHRoaXMucnVudGltZU5hbWUgPSBydW50aW1lTmFtZTsKLSAgfQotCi0gIC8qKgotICAgKiBTZXRzIHRoZSBydW50aW1lVmVyc2lvbi4KLSAgICogQHBhcmFtIHJ1bnRpbWVWZXJzaW9uIHRoZSBydW50aW1lVmVyc2lvbiB0byBzZXQuCi0gICAqIEBzZWUgI2dldFJ1bnRpbWVWZXJzaW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSdW50aW1lVmVyc2lvbihTdHJpbmcgcnVudGltZVZlcnNpb24pCi0gIHsKLSAgICB0aGlzLnJ1bnRpbWVWZXJzaW9uID0gcnVudGltZVZlcnNpb247Ci0gIH0KLQotICAvKioKLSAgICogU2V0cyB0aGUgYWRkaXRpb25hbCBlbnZpcm9ubWVudCBpbmZvcm1hdGlvbi4KLSAgICogQHBhcmFtIHhtbEluZm8gYWRkaXRpb25hbCB0b29sIGVudmlyb25tZW50IGluZm9ybWF0aW9uLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0QWRkaXRpb25hbFRvb2xFbnZpcm9ubWVudChYTUxJbmZvIHhtbEluZm8pCi0gIHsKLSAgICB0aGlzLnhtbEluZm8gPSB4bWxJbmZvOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybiBYTUwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgb2JqZWN0LiAKLSAgICogQHBhcmFtIG5hbWVzcGFjZU5hbWUgIHRoZSBuYW1lc3BhY2UgcHJlZml4LgotICAgKiBAcmV0dXJuIHRoZSBYTUwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgb2JqZWN0LiAKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9YTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgU3RyaW5nIG5zTmFtZSA9IG5hbWVzcGFjZU5hbWU7Ci0gICAgaWYgKCFuc05hbWUuZXF1YWxzKCIiKSkKLSAgICAgIG5zTmFtZSArPSAiOiI7Ci0KLSAgICAvLyBTdGFydCBlbGVtZW50Ci0gICAgcHcucHJpbnRsbigiICAgIDwiICsgbnNOYW1lICsgRUxFTV9OQU1FICsgIj4iKTsKLQotICAgIHB3LnByaW50KCIgICAgICA8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX1JVTlRJTUUgKyAiICIpOwotICAgIHB3LnByaW50KFdTSUNvbnN0YW50cy5BVFRSX05BTUUgKyAiPVwiIiArIHJ1bnRpbWVOYW1lICsgIlwiICIpOwotICAgIHB3LnByaW50bG4oV1NJQ29uc3RhbnRzLkFUVFJfVkVSU0lPTiArICI9XCIiICsgcnVudGltZVZlcnNpb24gKyAiXCIvPiIpOwotICAgIHB3LnByaW50KCIgICAgICA8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX09QRVJBVElOR19TWVNURU0gKyAiICIpOwotICAgIHB3LnByaW50KFdTSUNvbnN0YW50cy5BVFRSX05BTUUgKyAiPVwiIiArIG9zTmFtZSArICJcIiAiKTsKLSAgICBwdy5wcmludGxuKFdTSUNvbnN0YW50cy5BVFRSX1ZFUlNJT04gKyAiPVwiIiArIG9zVmVyc2lvbiArICJcIi8+Iik7Ci0gICAgcHcucHJpbnQoIiAgICAgIDwiICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fWE1MX1BBUlNFUiArICIgIik7Ci0gICAgcHcucHJpbnQoV1NJQ29uc3RhbnRzLkFUVFJfTkFNRSArICI9XCIiICsgeG1sUGFyc2VyTmFtZSArICJcIiAiKTsKLSAgICBwdy5wcmludGxuKFdTSUNvbnN0YW50cy5BVFRSX1ZFUlNJT04gKyAiPVwiIiArIHhtbFBhcnNlclZlcnNpb24gKyAiXCIvPiIpOwotCi0gICAgLy8gSWYgYWRkdGlvbmFsIGluZm8sIHRoZW4gZ2V0IGl0Ci0gICAgaWYgKHhtbEluZm8gIT0gbnVsbCkKLSAgICAgIHB3LnByaW50KHhtbEluZm8udG9YTUxTdHJpbmcobnNOYW1lKSk7Ci0KLSAgICAvLyBFbmQgZWxlbWVudAotICAgIHB3LnByaW50bG4oIiAgICA8LyIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiPiIpOwotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL1Rvb2xJbmZvLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9Ub29sSW5mby5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjk3ZWY0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL1Rvb2xJbmZvLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlOwotCi1pbXBvcnQgamF2YS5pby5GaWxlV3JpdGVyOwotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci1pbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5VdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5YTUxJbmZvOwotCi0vKioKLSAqIEluZm9ybWF0aW9uIHRoYXQgZGVzY3JpYmVzIGEgY29uZm9ybWFuY2UgdG9vbC4KLSAqCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBUb29sSW5mbwotewotICAvKioKLSAgICogVG9vbCBpbmZvcm1hdGlvbiBwcm9wZXJ0eSBuYW1lcy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBST1BfVE9PTF9WRVJTSU9OID0gIndzaS50b29sLnZlcnNpb24iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9QX1RPT0xfUkVMRUFTRV9EQVRFID0gIndzaS50b29sLnJlbGVhc2UuZGF0ZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBST1BfVE9PTF9JTVBMRU1FTlRFUiA9ICJ3c2kudG9vbC5pbXBsZW1lbnRlciI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBST1BfVE9PTF9MT0NBVElPTiA9ICJ3c2kudG9vbC5sb2NhdGlvbiI7Ci0KLSAgLyoqCi0gICAqIERlZmF1bHQgdG9vbCBpbmZvcm1hdGlvbiBwcm9wZXJ0eSB2YWx1ZXMuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGX1RPT0xfVkVSU0lPTiA9ICIxLjAuMSI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERUZfVE9PTF9SRUxFQVNFX0RBVEUgPSAiMjAwNC0wMS0yMiI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERUZfVE9PTF9JTVBMRU1FTlRFUiA9ICJFY2xpcHNlLm9yZyBPcmdhbml6YXRpb24iOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGX1RPT0xfTE9DQVRJT04gPSAiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93c3Z0IjsKLQotICAvKioKLSAgICogVG9vbCBpbmZvcm1hdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgbmFtZTsKLSAgcHJvdGVjdGVkIFN0cmluZyB2ZXJzaW9uOwotICBwcm90ZWN0ZWQgU3RyaW5nIHJlbGVhc2VEYXRlOwotICBwcm90ZWN0ZWQgU3RyaW5nIGltcGxlbWVudGVyOwotICBwcm90ZWN0ZWQgU3RyaW5nIGxvY2F0aW9uOwotCi0gIC8qKgotICAgKiBUb29sIGVudmlyb25tZW50LgotICAgKi8KLSAgcHJvdGVjdGVkIFRvb2xFbnZpcm9ubWVudCB0b29sRW52aXJvbm1lbnQgPSBudWxsOwotCi0gIC8qKgotICAgKiBUb29sIGluZm8gcHJvcGVydGllcyBmaWxlbmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBST1BfRklMRU5BTUUgPSAib3JnLndzaS50ZXN0LnRvb2xpbmZvIjsKLQotICAvKioKLSAgICogQ3JlYXRlIHRvb2wgaW5mb3JtYXRpb24uCi0gICAqLwotICBwdWJsaWMgVG9vbEluZm8oKQotICB7Ci0gICAgdGhpcy50b29sRW52aXJvbm1lbnQgPSBuZXcgVG9vbEVudmlyb25tZW50KCk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIHRvb2wgaW5mb3JtYXRpb24gZnJvbSBpbmZvcm1hdGlvbiBpbiB0aGUgdG9vbGluZm8ucHJvcGVydGllcyBmaWxlLgotICAgKiBAcGFyYW0gbmFtZSAgdGhlIHRvb2wgbmFtZS4KLSAgICovCi0gIHB1YmxpYyBUb29sSW5mbyhTdHJpbmcgbmFtZSkKLSAgewotICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0KLSAgICBnZXRQcm9wZXJ0aWVzKCk7Ci0KLSAgICB0aGlzLnRvb2xFbnZpcm9ubWVudCA9IG5ldyBUb29sRW52aXJvbm1lbnQoKTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgdG9vbCBpbmZvcm1hdGlvbi4KLSAgICogQHBhcmFtIG5hbWUgICAgICAgICB0aGUgdG9vbCBuYW1lLgotICAgKiBAcGFyYW0gdmVyc2lvbiAgICAgIHRoZSB2ZXJzaW9uIG9mIHRoZSB0b29sLgotICAgKiBAcGFyYW0gcmVsZWFzZURhdGUgIHRoZSByZWxlYXNlIGRhdGUgb2YgdGhlIHRvb2wuCi0gICAqIEBwYXJhbSBpbXBsZW1lbnRlciAgdGhlIGltcGxlbWVudGVyIG9mIHRoZSB0b29sLgotICAgKiBAcGFyYW0gbG9jYXRpb24gICAgIHRoZSBpbXBsZW1lbnRlciBsb2NhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBUb29sSW5mbygKLSAgICBTdHJpbmcgbmFtZSwKLSAgICBTdHJpbmcgdmVyc2lvbiwKLSAgICBTdHJpbmcgcmVsZWFzZURhdGUsCi0gICAgU3RyaW5nIGltcGxlbWVudGVyLAotICAgIFN0cmluZyBsb2NhdGlvbikKLSAgewotICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvbjsKLSAgICB0aGlzLnJlbGVhc2VEYXRlID0gcmVsZWFzZURhdGU7Ci0gICAgdGhpcy5pbXBsZW1lbnRlciA9IGltcGxlbWVudGVyOwotICAgIHRoaXMubG9jYXRpb24gPSBsb2NhdGlvbjsKLQotICAgIHRoaXMudG9vbEVudmlyb25tZW50ID0gbmV3IFRvb2xFbnZpcm9ubWVudCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSB0b29sIGluZm9ybWF0aW9uIHdpdGggdG9vbCB1bmlxdWUgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24uCi0gICAqIEBwYXJhbSBuYW1lICAgICAgICAgdGhlIHRvb2wgbmFtZS4KLSAgICogQHBhcmFtIHZlcnNpb24gICAgICB0aGUgdmVyc2lvbiBvZiB0aGUgdG9vbC4KLSAgICogQHBhcmFtIHJlbGVhc2VEYXRlICB0aGUgcmVsZWFzZSBkYXRlIG9mIHRoZSB0b29sLgotICAgKiBAcGFyYW0gaW1wbGVtZW50ZXIgIHRoZSBpbXBsZW1lbnRlciBvZiB0aGUgdG9vbC4KLSAgICogQHBhcmFtIGxvY2F0aW9uICAgICB0aGUgaW1wbGVtZW50ZXIgbG9jYXRpb24uCi0gICAqIEBwYXJhbSB4bWxJbmZvICAgICAgYWRkaXRpb25hbCB0b29sIGVudmlyb25tZW50IGluZm9ybWF0aW9uLgotICAgKi8KLSAgcHVibGljIFRvb2xJbmZvKAotICAgIFN0cmluZyBuYW1lLAotICAgIFN0cmluZyB2ZXJzaW9uLAotICAgIFN0cmluZyByZWxlYXNlRGF0ZSwKLSAgICBTdHJpbmcgaW1wbGVtZW50ZXIsCi0gICAgU3RyaW5nIGxvY2F0aW9uLAotICAgIFhNTEluZm8geG1sSW5mbykKLSAgewotICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvbjsKLSAgICB0aGlzLnJlbGVhc2VEYXRlID0gcmVsZWFzZURhdGU7Ci0gICAgdGhpcy5pbXBsZW1lbnRlciA9IGltcGxlbWVudGVyOwotICAgIHRoaXMubG9jYXRpb24gPSBsb2NhdGlvbjsKLQotICAgIHRoaXMudG9vbEVudmlyb25tZW50ID0gbmV3IFRvb2xFbnZpcm9ubWVudCh4bWxJbmZvKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgbmFtZS4KLSAgICogQHJldHVybiBuYW1lLgotICAgKiBAc2VlICNzZXROYW1lCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIG5hbWU7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHZlcnNpb24uCi0gICAqIEByZXR1cm4gdmVyc2lvbi4KLSAgICogQHNlZSAjc2V0VmVyc2lvbgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRWZXJzaW9uKCkKLSAgewotICAgIHJldHVybiB2ZXJzaW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCByZWxlYXNlIGRhdGUuCi0gICAqIEByZXR1cm4gcmVsZWFzZSBkYXRlLgotICAgKiBAc2VlICNzZXRSZWxlYXNlRGF0ZQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRSZWxlYXNlRGF0ZSgpCi0gIHsKLSAgICByZXR1cm4gcmVsZWFzZURhdGU7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGltcGxlbWVudGVyLgotICAgKiBAcmV0dXJuIGltcGxlbWVudGVyLgotICAgKiBAc2VlICNzZXRJbXBsZW1lbnRlcgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRJbXBsZW1lbnRlcigpCi0gIHsKLSAgICByZXR1cm4gaW1wbGVtZW50ZXI7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGltcGxlbWVudGVyIGxvY2F0aW9uLgotICAgKiBAcmV0dXJuIGltcGxlbWVudGVyIGxvY2F0aW9uLgotICAgKiBAc2VlICNzZXRMb2NhdGlvbgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRMb2NhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gbG9jYXRpb247Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdG9vbEVudmlyb25tZW50LgotICAgKiBAcmV0dXJuIFRvb2xFbnZpcm9ubWVudAotICAgKiBAc2VlICNzZXRUb29sRW52aXJvbm1lbnQKLSAgICovCi0gIHB1YmxpYyBUb29sRW52aXJvbm1lbnQgZ2V0VG9vbEVudmlyb25tZW50KCkKLSAgewotICAgIHJldHVybiB0b29sRW52aXJvbm1lbnQ7Ci0gIH0KLQotICAvKioKLSAgICogU2V0cyB0aGUgaW1wbGVtZW50ZXIuCi0gICAqIEBwYXJhbSBpbXBsZW1lbnRlciB0aGUgaW1wbGVtZW50ZXIgdG8gc2V0LgotICAgKiBAc2VlICNnZXRJbXBsZW1lbnRlcgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SW1wbGVtZW50ZXIoU3RyaW5nIGltcGxlbWVudGVyKQotICB7Ci0gICAgdGhpcy5pbXBsZW1lbnRlciA9IGltcGxlbWVudGVyOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIGxvY2F0aW9uLgotICAgKiBAcGFyYW0gbG9jYXRpb24gdGhlIGxvY2F0aW9uIHRvIHNldC4KLSAgICogQHNlZSAjZ2V0TG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExvY2F0aW9uKFN0cmluZyBsb2NhdGlvbikKLSAgewotICAgIHRoaXMubG9jYXRpb24gPSBsb2NhdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiBTZXRzIHRoZSBuYW1lLgotICAgKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSB0byBzZXQuCi0gICAqIEBzZWUgI2dldE5hbWUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICB0aGlzLm5hbWUgPSBuYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHJlbGVhc2VEYXRlLgotICAgKiBAcGFyYW0gcmVsZWFzZURhdGUgdGhlIHJlbGVhc2VEYXRlIHRvIHNldC4KLSAgICogQHNlZSAjZ2V0UmVsZWFzZURhdGUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFJlbGVhc2VEYXRlKFN0cmluZyByZWxlYXNlRGF0ZSkKLSAgewotICAgIHRoaXMucmVsZWFzZURhdGUgPSByZWxlYXNlRGF0ZTsKLSAgfQotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB0b29sRW52aXJvbm1lbnQuCi0gICAqIEBwYXJhbSB0b29sRW52aXJvbm1lbnQgdGhlIHRvb2xFbnZpcm9ubWVudCB0byBzZXQuCi0gICAqIEBzZWUgI2dldFRvb2xFbnZpcm9ubWVudAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VG9vbEVudmlyb25tZW50KFRvb2xFbnZpcm9ubWVudCB0b29sRW52aXJvbm1lbnQpCi0gIHsKLSAgICB0aGlzLnRvb2xFbnZpcm9ubWVudCA9IHRvb2xFbnZpcm9ubWVudDsKLSAgfQotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB0b29sRW52aXJvbm1lbnQuCi0gICAqIEBwYXJhbSB4bWxJbmZvIGFkZGl0aW9uYWwgdG9vbCBlbnZpcm9ubWVudCBpbmZvcm1hdGlvbi4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEFkZGl0aW9uYWxUb29sRW52aXJvbm1lbnQoWE1MSW5mbyB4bWxJbmZvKQotICB7Ci0gICAgdGhpcy50b29sRW52aXJvbm1lbnQuc2V0QWRkaXRpb25hbFRvb2xFbnZpcm9ubWVudCh4bWxJbmZvKTsKLSAgfQotCi0gIC8qKgotICAgKiBTZXRzIHRoZSB2ZXJzaW9uLgotICAgKiBAcGFyYW0gdmVyc2lvbiB0aGUgdmVyc2lvbiB0byBzZXQuCi0gICAqIEBzZWUgI2dldFZlcnNpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFZlcnNpb24oU3RyaW5nIHZlcnNpb24pCi0gIHsKLSAgICB0aGlzLnZlcnNpb24gPSB2ZXJzaW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybiBzdGFydCBYTUwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgb2JqZWN0LgotICAgKiBAcGFyYW0gbmFtZXNwYWNlTmFtZSAgdGhlIG5hbWVzcGFjZSBwcmVmaXguCi0gICAqIEByZXR1cm4gdGhlIHN0YXJ0IFhNTCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuIAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTdGFydFhNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSkKLSAgewotICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICBQcmludFdyaXRlciBwdyA9IG5ldyBQcmludFdyaXRlcihzdyk7Ci0KLSAgICBTdHJpbmcgbnNOYW1lID0gbmFtZXNwYWNlTmFtZTsKLSAgICBpZiAoIW5zTmFtZS5lcXVhbHMoIiIpKQotICAgICAgbnNOYW1lICs9ICI6IjsKLQotICAgIHB3LnByaW50KCIgIDwiICsgbnNOYW1lICsgZ2V0TmFtZSgpLnRvTG93ZXJDYXNlKCkgKyAiICIpOwotICAgIHB3LnByaW50KFdTSUNvbnN0YW50cy5BVFRSX1ZFUlNJT04gKyAiPVwiIiArIGdldFZlcnNpb24oKSArICJcIiAiKTsKLSAgICBwdy5wcmludGxuKAotICAgICAgV1NJQ29uc3RhbnRzLkFUVFJfUkVMRUFTRV9EQVRFICsgIj1cIiIgKyBnZXRSZWxlYXNlRGF0ZSgpICsgIlwiPiIpOwotCi0gICAgcHcucHJpbnQoIiAgICA8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX0lNUExFTUVOVEVSICsgIiAiKTsKLSAgICBwdy5wcmludChXU0lDb25zdGFudHMuQVRUUl9OQU1FICsgIj1cIiIgKyBnZXRJbXBsZW1lbnRlcigpICsgIlwiICIpOwotICAgIHB3LnByaW50bG4oV1NJQ29uc3RhbnRzLkFUVFJfTE9DQVRJT04gKyAiPVwiIiArIGdldExvY2F0aW9uKCkgKyAiXCIvPiIpOwotCi0gICAgLy8gRW52aXJvbm1lbnQKLSAgICBwdy5wcmludCh0b29sRW52aXJvbm1lbnQudG9YTUxTdHJpbmcobmFtZXNwYWNlTmFtZSkpOwotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJuIHRoZSBlbmQgWE1MIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4KLSAgICogQHBhcmFtIG5hbWVzcGFjZU5hbWUgIHRoZSBuYW1lc3BhY2UgcHJlZml4LgotICAgKiBAcmV0dXJuIHRoZSBlbmQgWE1MIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4gCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEVuZFhNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSkKLSAgewotICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICBQcmludFdyaXRlciBwdyA9IG5ldyBQcmludFdyaXRlcihzdyk7Ci0KLSAgICBTdHJpbmcgbnNOYW1lID0gbmFtZXNwYWNlTmFtZTsKLSAgICBpZiAoIW5zTmFtZS5lcXVhbHMoIiIpKQotICAgICAgbnNOYW1lICs9ICI6IjsKLQotICAgIHB3LnByaW50bG4oIiAgPC8iICsgbnNOYW1lICsgZ2V0TmFtZSgpLnRvTG93ZXJDYXNlKCkgKyAiPiIpOwotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHZhbHVlcyBmcm9tIHRoZSB0b29scy5wcm9wZXJ0aWVzIGZpbGUuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBnZXRQcm9wZXJ0aWVzKCkKLSAgewotICAgIC8vUHJvcGVydGllcyBwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7Ci0gICAgUmVzb3VyY2VCdW5kbGUgcmVzb3VyY2VCdW5kbGU7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBUcnkgdG8gbG9hZCBwcm9wZXJ0aWVzIGZyb20gd3NpLnByb3BlcnRpZXMKLSAgICAgIC8vSW5wdXRTdHJlYW0gaXMgPSBVdGlscy5nZXRJbnB1dFN0cmVhbShQUk9QX0ZJTEVOQU1FKTsKLQotICAgICAgLy8gTG9hZCBwcm9wZXJ0aWVzIGZyb20gZmlsZQotICAgICAgLy9wcm9wcy5sb2FkKGlzKTsKLQotICAgICAgLy8gR2V0IHJlc291cmNlCi0gICAgICByZXNvdXJjZUJ1bmRsZSA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZShQUk9QX0ZJTEVOQU1FKTsKLQotICAgICAgLy8gR2V0IHByb3BlcnR5IHZhbHVlcwotICAgICAgdGhpcy52ZXJzaW9uID0KLSAgICAgICAgZ2V0UHJvcGVydHkocmVzb3VyY2VCdW5kbGUsIFBST1BfVE9PTF9WRVJTSU9OLCBERUZfVE9PTF9WRVJTSU9OKTsKLSAgICAgIHRoaXMucmVsZWFzZURhdGUgPQotICAgICAgICBnZXRQcm9wZXJ0eSgKLSAgICAgICAgICByZXNvdXJjZUJ1bmRsZSwKLSAgICAgICAgICBQUk9QX1RPT0xfUkVMRUFTRV9EQVRFLAotICAgICAgICAgIERFRl9UT09MX1JFTEVBU0VfREFURSk7Ci0gICAgICB0aGlzLmltcGxlbWVudGVyID0KLSAgICAgICAgZ2V0UHJvcGVydHkoCi0gICAgICAgICAgcmVzb3VyY2VCdW5kbGUsCi0gICAgICAgICAgUFJPUF9UT09MX0lNUExFTUVOVEVSLAotICAgICAgICAgIERFRl9UT09MX0lNUExFTUVOVEVSKTsKLSAgICAgIHRoaXMubG9jYXRpb24gPQotICAgICAgICBnZXRQcm9wZXJ0eShyZXNvdXJjZUJ1bmRsZSwgUFJPUF9UT09MX0xPQ0FUSU9OLCBERUZfVE9PTF9MT0NBVElPTik7Ci0gICAgfQotCi0gICAgY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBtcmUpCi0gICAgewotICAgICAgLy8gREVCVUc6Ci0gICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiRXhjZXB0aW9uIGxvYWRpbmcgcHJvcGVydGllczogICIgKyBlLnRvU3RyaW5nKCkpOwotCi0gICAgICAvLyBTZXQgZGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMKLSAgICAgIHRoaXMudmVyc2lvbiA9IERFRl9UT09MX1ZFUlNJT047Ci0gICAgICB0aGlzLnJlbGVhc2VEYXRlID0gREVGX1RPT0xfUkVMRUFTRV9EQVRFOwotICAgICAgdGhpcy5pbXBsZW1lbnRlciA9IERFRl9UT09MX0lNUExFTUVOVEVSOwotICAgICAgdGhpcy5sb2NhdGlvbiA9IERFRl9UT09MX0xPQ0FUSU9OOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBHZXQgcHJvcGVydHkuCi0gICAqIEBwYXJhbSByZXNvdXJjZUJ1bmRsZSAgYSByZXNvdXJjZSBidW5kbGUuCi0gICAqIEBwYXJhbSBrZXkgICAgICAgICAgICAgYSBrZXkuCi0gICAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgICAgYSBkZWZhdWx0IHZhbHVlLgotICAgKiBAcmV0dXJuIHByb3BlcnR5LiBJZiBub3QgZm91bmQgcmV0dXJuIGRlZmF1bHQgdmFsdWUuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGdldFByb3BlcnR5KAotICAgIFJlc291cmNlQnVuZGxlIHJlc291cmNlQnVuZGxlLAotICAgIFN0cmluZyBrZXksCi0gICAgU3RyaW5nIGRlZmF1bHRWYWx1ZSkKLSAgewotICAgIFN0cmluZyB2YWx1ZTsKLQotICAgIGlmICgodmFsdWUgPSByZXNvdXJjZUJ1bmRsZS5nZXRTdHJpbmcoa2V5KSkgPT0gbnVsbCkKLSAgICAgIHZhbHVlID0gZGVmYXVsdFZhbHVlOwotCi0gICAgcmV0dXJuIHZhbHVlOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSB0aGUgdG9vbHMucHJvcGVydGllcyBmaWxlIGZyb20gdGhlIGNvbW1hbmQgbGluZS4KLSAgICogVGhlIGlucHV0IGFyZ3VlbWVudHMgYXJlOgotICAgKiA8b2w+Ci0gICAqIDxsaT5GaWxlbmFtZSBmb3IgdGhlIHByb3BlcnRpZXMgZmlsZSB0byBjcmVhdGUKLSAgICogPGxpPlZlcnNpb24gbnVtYmVyCi0gICAqIDxsaT4KLSAgICogPC9vbD4KLSAgICogQHBhcmFtIGFyZ3MgIHRoZSBhcmd1bWVudHMgZm9yIG1haW4uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQotICB7Ci0gICAgaW50IHN0YXR1c0NvZGUgPSAwOwotICAgIFN0cmluZyBmaWxlbmFtZSA9IFBST1BfRklMRU5BTUU7Ci0gICAgU3RyaW5nIHZlcnNpb24gPSBERUZfVE9PTF9WRVJTSU9OOwotICAgIFN0cmluZyBpbXBsZW1lbnRlciA9IERFRl9UT09MX0lNUExFTUVOVEVSOwotICAgIFN0cmluZyBsb2NhdGlvbiA9IERFRl9UT09MX0xPQ0FUSU9OOwotCi0gICAgLy8gU2V0IHRoZSBmaWxlIG5hbWUKLSAgICBpZiAoYXJncy5sZW5ndGggPj0gMSkKLSAgICAgIGZpbGVuYW1lID0gYXJnc1swXTsKLQotICAgIGlmIChhcmdzLmxlbmd0aCA+PSAyKQotICAgICAgdmVyc2lvbiA9IGFyZ3NbMV07Ci0KLSAgICBpZiAoYXJncy5sZW5ndGggPj0gMykKLSAgICAgIGltcGxlbWVudGVyID0gYXJnc1syXTsKLQotICAgIGlmIChhcmdzLmxlbmd0aCA+PSA0KQotICAgICAgbG9jYXRpb24gPSBhcmdzWzNdOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gQ3JlYXRlIGZpbGUgd3JpdGVyCi0gICAgICBGaWxlV3JpdGVyIGZpbGVXcml0ZXIgPSBuZXcgRmlsZVdyaXRlcihmaWxlbmFtZSk7Ci0KLSAgICAgIC8vIENyZWF0ZSBwcmludCB3cml0ZXIKLSAgICAgIFByaW50V3JpdGVyIHByaW50V3JpdGVyID0gbmV3IFByaW50V3JpdGVyKGZpbGVXcml0ZXIpOwotCi0gICAgICAvLyBXcml0ZSBvdXQgY29udGVudHMgb2YgcHJvcGVydGllcyBmaWxlCi0gICAgICBwcmludFdyaXRlci5wcmludGxuKENPTU1FTlRTKTsKLSAgICAgIHByaW50V3JpdGVyLnByaW50bG4oUFJPUF9UT09MX1ZFUlNJT04gKyAiPSIgKyB2ZXJzaW9uKTsKLSAgICAgIHByaW50V3JpdGVyLnByaW50bG4oUFJPUF9UT09MX1JFTEVBU0VfREFURSArICI9IiArIFV0aWxzLmdldERhdGUoKSk7Ci0gICAgICBwcmludFdyaXRlci5wcmludGxuKFBST1BfVE9PTF9JTVBMRU1FTlRFUiArICI9IiArIGltcGxlbWVudGVyKTsKLSAgICAgIHByaW50V3JpdGVyLnByaW50bG4oUFJPUF9UT09MX0xPQ0FUSU9OICsgIj0iICsgbG9jYXRpb24pOwotCi0gICAgICAvLyBDbG9zZSBmaWxlIHdyaXRlcgotICAgICAgZmlsZVdyaXRlci5jbG9zZSgpOwotCi0gICAgICAvLyBEb25lCi0gICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZpbGUgWyIgKyBmaWxlbmFtZSArICJdIGNyZWF0ZWQuIik7Ci0gICAgfQotCi0gICAgY2F0Y2ggKGphdmEuaW8uSU9FeGNlcHRpb24gaW9lKQotICAgIHsKLSAgICAgIHN0YXR1c0NvZGUgPSAxOwotICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFWENFUFRJT046ICIgKyBpb2UudG9TdHJpbmcoKSk7Ci0gICAgICBpb2UucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfQotCi0gICAgLy8gRXhpdAotICAgIFN5c3RlbS5leGl0KHN0YXR1c0NvZGUpOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENPTU1FTlRTID0gIiI7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9XU0lDb25zdGFudHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL1dTSUNvbnN0YW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWM3YzQ3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL1dTSUNvbnN0YW50cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDgzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwMyBJQk0gQ29ycG9yYXRpb24sIFBhcmFzb2Z0IGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gICAgICAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICBQYXJhc29mdCAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZTsKLQotLyoqCi0gKiBXUy1JIGNvbnN0YW50cy4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICogQGF1dGhvciBKaW0gQ2x1bmUKLSAqIEBhdXRob3IgR3JhaGFtIFR1cnJlbGwgKGd0dXJyZWxsQHVrLmlibS5jb20pCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgV1NJQ29uc3RhbnRzIHsKLQotCS8qKgotCSAqIFhNTCBkZWNsYXJhdGlvbiBzdGF0ZW1lbnQuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgWE1MX0RFQ0wgPSAiPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIj8+IjsKLQotCS8qKgotCSAqIFhNTCBuYW1lc3BhY2UgVVJJLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX1VSSV9YTUxOUyA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfVVJJX1hNTCA9ICAiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIjsKLQkvKioKLQkgKiBYTUwgc2NoZW1hIG5hbWVzcGFjZSBVUkkuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfVVJJX1hTRCA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI7Ci0KLQkvKioKLQkgKiBYTUwgc2NoZW1hIGxvY2F0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFhTRF9TQ0hFTUFfTE9DQVRJT04gPSAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEueHNkIjsKLQotCS8qKgotCSAqIFhNTCBzY2hlbWEgbmFtZXNwYWNlIG5hbWUuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfTkFNRV9YU0QgPSAieHNkIjsKLQotCS8qKgotCSAqIFhNTCBzY2hlbWEgaW5zdGFuY2UgbmFtZXNwYWNlIFVSSS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOU19VUklfWFNJID0gImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIjsKLQotCS8qKgotCSAqIFhNTCBzY2hlbWEgbmFtZXNwYWNlIG5hbWUuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfTkFNRV9YU0kgPSAieHNpIjsKLQotCi0JLyoqCi0JICogV1MtSSBtZXNzYWdlIGxvZyBuYW1lc3BhY2UgVVJJLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX1VSSV9XU0lfTE9HID0gImh0dHA6Ly93d3cud3MtaS5vcmcvdGVzdGluZy8yMDA0LzA3L2xvZy8iOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfTkFNRV9XU0lfTE9HID0gIndzaS1sb2ciOwotCi0JLyoqCi0JICogV1MtSSBjb25mb3JtYW5jZSByZXBvcnQgbmFtZXNwYWNlIFVSSS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOU19VUklfV1NJX1JFUE9SVCA9ICJodHRwOi8vd3d3LndzLWkub3JnL3Rlc3RpbmcvMjAwNC8wNy9yZXBvcnQvIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOU19OQU1FX1dTSV9SRVBPUlQgPSAid3NpLXJlcG9ydCI7Ci0KLQkvKioKLQkgKiBXUy1JIHByb2ZpbGUgdGVzdCBhc3NlcnRpb25zIG5hbWVzcGFjZSBVUkkuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfVVJJX1dTSV9BU1NFUlRJT05TXzIwMDMgPSAiaHR0cDovL3d3dy53cy1pLm9yZy90ZXN0aW5nLzIwMDMvMDMvYXNzZXJ0aW9ucy8iOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX1VSSV9XU0lfQVNTRVJUSU9OUyA9ICJodHRwOi8vd3d3LndzLWkub3JnL3Rlc3RpbmcvMjAwNC8wNy9hc3NlcnRpb25zLyI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOU19OQU1FX1dTSV9BU1NFUlRJT05TID0gIndzaS1hc3NlcnRpb25zIjsKLQotCS8qKgotCSAqIFdTLUkgbW9uaXRvciBjb25maWd1cmF0aW9uIGZpbGUgbmFtZXNhcGNlIFVSSS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOU19VUklfV1NJX01PTklUT1JfQ09ORklHXzIwMDMgPSAiaHR0cDovL3d3dy53cy1pLm9yZy90ZXN0aW5nLzIwMDMvMDMvbW9uaXRvckNvbmZpZy8iOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX1VSSV9XU0lfTU9OSVRPUl9DT05GSUcgPSAiaHR0cDovL3d3dy53cy1pLm9yZy90ZXN0aW5nLzIwMDQvMDcvbW9uaXRvckNvbmZpZy8iOwotCQotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfTkFNRV9XU0lfTU9OSVRPUl9DT05GSUcgPSAid3NpLW1vbkNvbmZpZyI7Ci0KLQkvKioKLQkgKiBXUy1JIGFuYWx5emVyIGNvbmZpZ3VyYXRpb24gZmlsZSBuYW1lc2FwY2UgVVJJLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX1VSSV9XU0lfQU5BTFlaRVJfQ09ORklHXzIwMDMgPSAiaHR0cDovL3d3dy53cy1pLm9yZy90ZXN0aW5nLzIwMDMvMDMvYW5hbHl6ZXJDb25maWcvIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOU19VUklfV1NJX0FOQUxZWkVSX0NPTkZJRyA9ICJodHRwOi8vd3d3LndzLWkub3JnL3Rlc3RpbmcvMjAwNC8wNy9hbmFseXplckNvbmZpZy8iOwotCQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX05BTUVfV1NJX0FOQUxZWkVSX0NPTkZJRyA9ICJ3c2ktYW5hbHl6ZXJDb25maWciOwotCi0JLyoqCi0JICogV1MtSSBjb21tb24gbmFtZXNhcGNlIFVSSS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOU19VUklfV1NJX0NPTU1PTl8yMDAzID0gImh0dHA6Ly93d3cud3MtaS5vcmcvdGVzdGluZy8yMDAzLzAzL2NvbW1vbi8iOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX1VSSV9XU0lfQ09NTU9OID0gImh0dHA6Ly93d3cud3MtaS5vcmcvdGVzdGluZy8yMDA0LzA3L2NvbW1vbi8iOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX05BTUVfV1NJX0NPTU1PTiA9ICJ3c2ktY29tbW9uIjsKLQotCS8qKgotCSAqIFNPQVAgVjEuMSBuYW1lc3BhY2UuCi0JICovCi0JcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTlNfVVJJX1NPQVAgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8iOwotCi0JLyoqCi0JICogU09BUC8xLjEgZW5jb2RpbmcuCi0JICovCi0JcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTlNfVVJJX1NPQVBfRU5DT0RJTkcgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfVVJJX1NPQVBfTkVYVF9BQ1RPUiA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2FjdG9yL25leHQiIDsKLQkvKioKLQkgKiBIVFRQIHRyYW5zcG9ydC4KLQkgKi8KLQlwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBOU19VUklfU09BUF9IVFRQID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCI7Ci0KLQkvKioKLQkgKiBXU0RMIFYxLjEgbmFtZXNwYWNlLgotCSAqLwotCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE5TX1VSSV9XU0RMID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIjsKLQotCS8qKgotCSAqIFdTREwgU09BUCBiaW5kaW5nIG5hbWVzcGFjZS4KLQkgKi8KLQlwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBOU19VUklfV1NETF9TT0FQID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iOwotCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE5TX1VSSV9XU0RMX1NPQVAxMiA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAxMi8iOwotCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE5TX05BTUVfV1NETF9TT0FQID0gInNvYXAiOwotCi0JLyoqCi0JICogV1NETCBNSU1FIGJpbmRpbmcgbmFtZXNwYWNlLgotCSAqLwotCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE5TX05BTUVfV1NETF9NSU1FID0gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iOwotCi0JLyoqCi0JICogV1NETCBIVFRQIEdFVCAmIFBPU1QgYmluZGluZyBuYW1lc3BhY2UuCi0JICovCi0JcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTlNfTkFNRV9XU0RMX0hUVFAgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9odHRwLyI7Ci0KLQkvKioKLQkgKiBXU0RMIERJTUUgYmluZGluZyBuYW1lc3BhY2UuCi0JICovCi0JcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTlNfTkFNRV9XU0RMX0RJTUUgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwMi8wNC9kaW1lL3dzZGwvIjsKLQotCS8qKgotCSAqIENvbmZvcm1hbmNlIENsYWltIG5hbWVzcGFjZS4KLQkgKi8KLQlwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBOU19VUklfQ0xBSU0gPSAiaHR0cDovL3dzLWkub3JnL3NjaGVtYXMvY29uZm9ybWFuY2VDbGFpbS8iOwotCi0JLyoqCi0JICogVURESSBWMiBuYW1lc3BhY2UuCi0JICovCi0JcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTlNfVVJJX1VERElfVjIgPSAidXJuOnVkZGktb3JnOmFwaV92MiI7Ci0KLQkvKioKLQkgKiBUaGUgWE1MIFNjaGVtYSBmb3IgdGhlIHR5cGUgdXNlZCB0byByZWZlciB0byBhdHRhY2htZW50cyBmcm9tIHRoZSBTT0FQCi0JICogZW52ZWxvcGUuCi0JICovCi0JcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTlNfVVJJX1NXQV9SRUYgPSAiaHR0cDovL3dzLWkub3JnL3Byb2ZpbGVzL2Jhc2ljLzEuMS94c2QiOwotCi0JcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgU0NIRU1BX1RZUEVfU1dBX1JFRiA9ICJzd2FSZWYiOwotCi0JLyoqCi0JICogRWxlbWVudCBuYW1lcy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX0FERF9TVFlMRV9TSEVFVCA9ICJhZGRTdHlsZVNoZWV0IjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fQURESVRJT05BTF9FTlRSWV9UWVBFX0xJU1QgPSAiYWRkaXRpb25hbEVudHJ5VHlwZUxpc3QiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9BTkFMWVpFUl9GQUlMVVJFID0gImFuYWx5emVyRmFpbHVyZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX0FSVElGQUNUID0gImFydGlmYWN0IjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fQVJUSUZBQ1RfUkVGRVJFTkNFID0gImFydGlmYWN0UmVmZXJlbmNlIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fQVNTRVJUSU9OX0NPVkVSQUdFID0gImFzc2VydGlvbkNvdmVyYWdlIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fQVNTRVJUSU9OX0RFU0NSSVBUSU9OID0gImFzc2VydGlvbkRlc2NyaXB0aW9uIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fQVNTRVJUSU9OX1JFU1VMVCA9ICJhc3NlcnRpb25SZXN1bHQiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9BU1NFUlRJT05fUkVTVUxUX1NVTU1BUlkgPSAiYXNzZXJ0aW9uUmVzdWx0U3VtbWFyeSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX0FTU0VSVElPTl9SRVNVTFRTID0gImFzc2VydGlvblJlc3VsdHMiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9DTEVBTlVQX1RJTUVPVVRfU0VDT05EUyA9ICJjbGVhbnVwVGltZW91dFNlY29uZHMiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9DT05GSUcgPSAiY29uZmlndXJhdGlvbiI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX0NPTU1FTlQgPSAiY29tbWVudCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX0NPTlRFWFQgPSAiY29udGV4dCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX0RFVEFJTCA9ICJkZXRhaWwiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9ERVRBSUxfREVTQ1JJUFRJT04gPSAiZGV0YWlsRGVzY3JpcHRpb24iOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9ERVNDUklQVElPTiA9ICJkZXNjcmlwdGlvbiI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX0VOVklST05NRU5UID0gImVudmlyb25tZW50IjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fRU5UUlkgPSAiZW50cnkiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9GQUlMVVJFX0RFVEFJTCA9ICJmYWlsdXJlRGV0YWlsIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fRkFJTFVSRV9ERVRBSUxfREVTQ1JJUFRJT04gPSAiZmFpbHVyZURldGFpbERlc2NyaXB0aW9uIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fRkFJTFVSRV9NRVNTQUdFID0gImZhaWx1cmVNZXNzYWdlIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fSFRUUF9IRUFERVJTID0gImh0dHBIZWFkZXJzIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fSU1QTEVNRU5URVIgPSAiaW1wbGVtZW50ZXIiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9JTlFVSVJZX1VSTCA9ICJpbnF1aXJ5VVJMIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fTElTVEVOX1BPUlQgPSAibGlzdGVuUG9ydCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX0xPRyA9ICJsb2ciOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9MT0dfRFVSQVRJT04gPSAibG9nRHVyYXRpb24iOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9MT0dfRklMRSA9ICJsb2dGaWxlIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fTUFOX0lOX1RIRV9NSURETEUgPSAibWFuSW5UaGVNaWRkbGUiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9NQVhfQ09OTkVDVElPTlMgPSAibWF4Q29ubmVjdGlvbnMiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9NRVNTQUdFX0NPTlRFTlQgPSAibWVzc2FnZUNvbnRlbnQiOwotCQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fTUVTU0FHRV9DT05URU5UX1dJVEhfQVRUQUNITUVOVFMgPSAibWVzc2FnZUNvbnRlbnRXaXRoQXR0YWNobWVudHMiOwotCQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fTUVTU0FHRV9FTlRSWSA9ICJtZXNzYWdlRW50cnkiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9NRVNTQUdFX0lOUFVUID0gIm1lc3NhZ2VJbnB1dCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX01PTklUT1IgPSAibW9uaXRvciI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX09QRVJBVElOR19TWVNURU0gPSAib3BlcmF0aW5nU3lzdGVtIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fUFJFUkVRX0ZBSUxFRF9MSVNUID0gInByZXJlcUZhaWxlZExpc3QiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9QUkVSRVFfTElTVCA9ICJwcmVyZXFMaXN0IjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fUFJPRklMRSA9ICJwcm9maWxlIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fUFJPRklMRV9BU1NFUlRJT05TID0gInByb2ZpbGVBc3NlcnRpb25zIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fUkVBRF9USU1FT1VUX1NFQ09ORFMgPSAicmVhZFRpbWVvdXRTZWNvbmRzIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fUkVDRUlWRVJfSE9TVF9BTkRfUE9SVCA9ICJyZWNlaXZlckhvc3RBbmRQb3J0IjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fUkVESVJFQ1QgPSAicmVkaXJlY3QiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9SRVBPUlQgPSAicmVwb3J0IjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fUkVQT1JUX0ZJTEUgPSAicmVwb3J0RmlsZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX1JVTlRJTUUgPSAicnVudGltZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX1NDSEVNRV9BTkRfSE9TVFBPUlQgPSAic2NoZW1lQW5kSG9zdFBvcnQiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9TRU5ERVJfSE9TVF9BTkRfUE9SVCA9ICJzZW5kZXJIb3N0QW5kUG9ydCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX1NFUlZJQ0VfTE9DQVRJT04gPSAic2VydmljZUxvY2F0aW9uIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fU1VNTUFSWSA9ICJzdW1tYXJ5IjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fVEVTVF9BU1NFUlRJT04gPSAidGVzdEFzc2VydGlvbiI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX1RFU1RfQVNTRVJUSU9OU19GSUxFID0gInRlc3RBc3NlcnRpb25zRmlsZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX1RFU1RfQVNTRVJUSU9OX0lEID0gInRlc3RBc3NlcnRpb25JRCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX1RFU1RfQ09WRVJBR0UgPSAidGVzdENvdmVyYWdlIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fVURESV9FTlRSWSA9ICJ1ZGRpRW50cnkiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9VRERJX0tFWSA9ICJ1ZGRpS2V5IjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fVURESV9SRUZFUkVOQ0UgPSAidWRkaVJlZmVyZW5jZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX1ZFUkJPU0UgPSAidmVyYm9zZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX1dTRExfRUxFTUVOVCA9ICJ3c2RsRWxlbWVudCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX1dTRExfSU5QVVQgPSAid3NkbElucHV0IjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fV1NETF9SRUZFUkVOQ0UgPSAid3NkbFJlZmVyZW5jZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX1dTRExfVVJJID0gIndzZGxVUkkiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9YTUxfUEFSU0VSID0gInhtbFBhcnNlciI7Ci0JCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9NSU1FX1BBUlQgPSAibWltZVBhcnQiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9NSU1FX0hFQURFUlMgPSAibWltZUhlYWRlcnMiOwotCQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fTUlNRV9DT05URU5UID0gIm1pbWVDb250ZW50IjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fQk9VTkRBUllfU1RSSU5HID0gImJvdW5kYXJ5U3RyaW5nIjsKLQotCS8qKgotCSAqIEF0dHJpYnV0ZSBuYW1lcy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX0FMVEVSTkFURSA9ICJhbHRlcm5hdGUiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9BUlJBWV9UWVBFID0gImFycmF5VHlwZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX0FTU0VSVElPTl9ERVNDUklQVElPTiA9ICJhc3NlcnRpb25EZXNjcmlwdGlvbiI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX0JPTSA9ICJCT00iOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9DSEFSU0VUID0gImNoYXJzZXQiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9DT0RFID0gImNvZGUiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9DT0xVTU5fTlVNQkVSID0gImNvbHVtbk51bWJlciI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX0NPTlZFUlNBVElPTl9JRCA9ICJjb252ZXJzYXRpb25JRCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX0NPUlJFTEFUSU9OX1RZUEUgPSAiY29ycmVsYXRpb25UeXBlIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfREFURSA9ICJkYXRlIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfRU5BQkxFRCA9ICJlbmFibGVkIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfRU5UUllfVFlQRSA9ICJlbnRyeVR5cGUiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9GQUlMVVJFX01FU1NBR0UgPSAiZmFpbHVyZU1lc3NhZ2UiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9GQUlMVVJFX0RFVEFJTCA9ICJmYWlsdXJlRGV0YWlsIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfSFJFRiA9ICJocmVmIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfSUQgPSAiaWQiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9JRF9VQyA9ICJJRCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX0lNUExFTUVOVEVSID0gImltcGxlbWVudGVyIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfTElORV9OVU1CRVIgPSAibGluZU51bWJlciI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX0xPQ0FUSU9OID0gImxvY2F0aW9uIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfTUVESUEgPSAibWVkaWEiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9NRVNTQUdFX0VOVFJZID0gIm1lc3NhZ2VFbnRyeSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX01FU1NBR0VTID0gIm1lc3NhZ2VzIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfTkFNRSA9ICJuYW1lIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfTkFNRVNQQUNFID0gIm5hbWVzcGFjZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX1BBUkVOVF9FTEVNRU5UX05BTUUgPSAicGFyZW50RWxlbWVudE5hbWUiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9SRUZFUkVOQ0VfSUQgPSAicmVmZXJlbmNlSUQiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9SRUZFUkVOQ0VfVFlQRSA9ICJyZWZlcmVuY2VUeXBlIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfUkVMRUFTRV9EQVRFID0gInJlbGVhc2VEYXRlIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfUkVQTEFDRSA9ICJyZXBsYWNlIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfUkVTVUxUID0gInJlc3VsdCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX1NFUlZJQ0VfTkFNRSA9ICJzZXJ2aWNlTmFtZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX1NQRUNJRklDQVRJT04gPSAic3BlY2lmaWNhdGlvbiI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX1RJTUVTVEFNUCA9ICJ0aW1lc3RhbXAiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9USVRMRSA9ICJ0aXRsZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX1RZUEUgPSAidHlwZSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX1ZFUlNJT04gPSAidmVyc2lvbiI7Ci0KLQkvKioKLQkgKiBEZWZhdWx0IHZhbHVlcy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX1JFUE9SVF9VUkkgPSAicmVwb3J0LnhtbCI7Ci0KLQkvLyBURU1QOiBVc2UgdGhlIGZvbGxvd2luZyByZXBvcnQgdGl0bGUgZm9yIHRoZSBkcmFmdCByZWxlYXNlIG9ubHkuCi0JLy9wdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX1JFUE9SVF9USVRMRSA9ICJXUy1JIFByb2ZpbGUKLQkvLyBDb25mb3JtYW5jZSBSZXBvcnQiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfUkVQT1JUX1RJVExFID0gIldTLUkgQmFzaWMgUHJvZmlsZSBDb25mb3JtYW5jZSBSZXBvcnQuIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfVEVTVF9BU1NFUlRJT05TX0RPQ1VNRU5UX1VSSSA9ICJodHRwOi8vd3d3LndzLWkub3JnL1Rlc3RpbmcvVG9vbHMvMjAwNC8xMi9BUDEwX0JQMTFfU1NCUDEwX1RBRC54bWwiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9MT0dfWFNMID0gIi4uL2NvbW1vbi94c2wvbG9nLnhzbCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX1JFUE9SVF9YU0wgPSAiLi4vY29tbW9uL3hzbC9yZXBvcnQueHNsIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfWFNMX1RZUEUgPSAidGV4dC94c2wiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9YTUxfRU5DT0RJTkcgPSAiVVRGLTgiOwotCi0JLyoqCi0JICogQk9NIGNvbnN0YW50cy4KLQkgKiAgCi0JICovCi0JcHVibGljIHN0YXRpYyBpbnQgQk9NX1VURjE2ID0gMHhGRkZFOwotCi0JcHVibGljIHN0YXRpYyBpbnQgQk9NX1VURjE2X0JJR19FTkRJQU4gPSAweEZFRkY7Ci0KLQlwdWJsaWMgc3RhdGljIGludCBCT01fVVRGOCA9IDB4RUZCQkJGOwotCi0JLyoqCi0JICogVmFsaWRhdGlvbiBjb25zdGFudHMuCi0JICogIAotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJWQUxfU09BUF9CT0RZX1VTRV9MSVQgPSAibGl0ZXJhbCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSVkFMX1NPQVBfQk9EWV9VU0VfRU5DID0gImVuY29kZWQiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUlZBTF9TT0FQX0JJTkRfU1RZTEVfRE9DID0gImRvY3VtZW50IjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX1JQQyA9ICJycGMiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUlZBTF9DT1JSRUxBVElPTl9UWVBFX0VORFBPSU5UID0gImVuZHBvaW50IjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJWQUxfQ09SUkVMQVRJT05fVFlQRV9OQU1FU1BBQ0UgPSAibmFtZXNwYWNlIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJWQUxfQ09SUkVMQVRJT05fVFlQRV9PUEVSQVRJT04gPSAib3BlcmF0aW9uIjsKLQotCS8qKgotCSAqIFdTLUkgY29uc3RhbnRzIC0gYXR0cmlidXRlcyBmb3IgY29uZm9ybWFuY2UgY2xhaW1zIChkaXNjb3ZlcnkpLgotCSAqICAKLQkgKi8KLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJWQUxfVURESV9DTEFJTV9LRVlWQUxVRSA9ICJodHRwOi8vd3MtaS5vcmcvcHJvZmlsZXMvYmFzaWMvMS4wIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJWQUxfVURESV9DTEFJTV9UTU9ERUxLRVkgPSAidXVpZDo2NTcxOTE2OC03MmM2LTNmMjktOGMyMC02MmRlZmIwOTYxYzAiOwotCi0JLyoqCi0JICogV1MtSSBuYW1lcyBhbmQgdmVyc2lvbnMgb2YgdGhlIHByb2ZpbGUgdGVzdCBhc3NlcnRpb24gZG9jdW1lbnQgc3VwcG9ydGVkCi0JICogaW4gdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgdGVzdCB0b29scy4KLSAgICAgKi8KLQkvKiogQGRlcHJlY2F0ZWQgLS0gdGhpcyBoYXMgYmVlbiByZXBsYWNlZCB3aXRoIGEgVEFEIHJlZ2lzdHJ5IG1lY2hhbmlzbS4gKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBCQVNJQ19QUk9GSUxFX1RBRF9OQU1FID0gIkJhc2ljIFByb2ZpbGUgVGVzdCBBc3NlcnRpb25zIjsKLSAgICAvKiogQGRlcHJlY2F0ZWQgLS0gdGhpcyBoYXMgYmVlbiByZXBsYWNlZCB3aXRoIGEgVEFEIHJlZ2lzdHJ5IG1lY2hhbmlzbS4gKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBCQVNJQ19QUk9GSUxFXzFfMV9UQURfTkFNRSA9ICJCYXNpYyBQcm9maWxlIDEuMSBUZXN0IEFzc2VydGlvbnMiOwotICAgIC8qKiBAZGVwcmVjYXRlZCAtLSB0aGlzIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYSBUQUQgcmVnaXN0cnkgbWVjaGFuaXNtLiAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNJTVBMRV9TT0FQX0JJTkRJTkdTX1BST0ZJTEVfVEFEX05BTUUgPSAiU2ltcGxlIFNvYXAgQmluZGluZyBQcm9maWxlIFsxLjBdICh3aXRoIEJhc2ljIFByb2ZpbGUgWzEuMV0pIFRlc3QgQXNzZXJ0aW9ucyI7Ci0gICAgLyoqIEBkZXByZWNhdGVkIC0tIHRoaXMgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBhIFRBRCByZWdpc3RyeSBtZWNoYW5pc20uICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUQUNITUVOVFNfUFJPRklMRV9UQURfTkFNRSA9ICJBdHRhY2htZW50cyBQcm9maWxlIFsxLjBdICh3aXRoIEJhc2ljIFByb2ZpbGUgWzEuMV0gYW5kIFNpbXBsZSBTb2FwIEJpbmRpbmcgUHJvZmlsZSBbMS4wXSkgVGVzdCBBc3NlcnRpb25zIjsKLSAgICAvKiogQGRlcHJlY2F0ZWQgLS0gdGhpcyBoYXMgYmVlbiByZXBsYWNlZCB3aXRoIGEgVEFEIHJlZ2lzdHJ5IG1lY2hhbmlzbS4gKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBCQVNJQ19QUk9GSUxFX1RBRF9WRVJTSU9OID0gIjEuMS4wIjsKLSAgICAvKiogQGRlcHJlY2F0ZWQgLS0gdGhpcyBoYXMgYmVlbiByZXBsYWNlZCB3aXRoIGEgVEFEIHJlZ2lzdHJ5IG1lY2hhbmlzbS4gKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBCQVNJQ19QUk9GSUxFXzFfMV9UQURfVkVSU0lPTiA9ICIxLjEuMCI7Ci0gICAgLyoqIEBkZXByZWNhdGVkIC0tIHRoaXMgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBhIFRBRCByZWdpc3RyeSBtZWNoYW5pc20uICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0lNUExFX1NPQVBfQklORElOR1NfUFJPRklMRV9UQURfVkVSU0lPTiA9ICIxLjAuMCI7Ci0gICAgLyoqIEBkZXByZWNhdGVkIC0tIHRoaXMgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBhIFRBRCByZWdpc3RyeSBtZWNoYW5pc20uICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUQUNITUVOVFNfUFJPRklMRV9UQURfVkVSU0lPTiA9ICIxLjAuMCI7Ci0KLQkvKioKLQkgKiBTeXN0ZW0gZGVwZW5kZW50IGxpbmUgc2VwYXJhdG9yIGNoYXJhY3Rlci4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBMSU5FX1NFUEFSQVRPUiA9IFN5c3RlbQotCQkJLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpOwotCi0JLyoqCi0JICogU3lzdGVtIGRlcGVuZGVudCBwYXRoIHNlcGFyYXRvciBjaGFyYWN0ZXIuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFUSF9TRVBBUkFUT1IgPSBTeXN0ZW0KLQkJCS5nZXRQcm9wZXJ0eSgicGF0aC5zZXBhcmF0b3IiKTsKLQotCS8qKgotCSAqIEZpbGUgd2hpY2ggY29udGFpbnMgdGhlIGNvcHlyaWdodCwgbGljZW5zZSBhbmQgZmVlZGJhY2sgY29tbWVudHMuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09NTUVOVFNfRklMRSA9ICJjb21tZW50cy54bWwiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTlRFTlRfVFlQRV9URVhUX1hNTCA9ICJ0ZXh0L3htbCI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09OVEVOVF9UWVBFX01VTFRJUEFSVCA9ICJtdWx0aXBhcnQvcmVsYXRlZCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGSUxFX1BSRUZJWCA9ICJmaWxlOiI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSFRUUF9QUkVGSVggPSAiaHR0cDoiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZJTEVfUFJPVE9DT0wgPSAiZmlsZTovLy8iOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFdTSV9QUkVGSVggPSAiV1MtSTogIjsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9XU0lFeGNlcHRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL1dTSUV4Y2VwdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNmU4ZGI0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL1dTSUV4Y2VwdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZTsKLQotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25UYXJnZXRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKLQotLyoqCi0gKiBQcmltYXJ5IFdTLUkgZXhjZXB0aW9uLgotICoKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0KLSAqLwotcHVibGljIGNsYXNzIFdTSUV4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbgotewotCi0gIC8qKgotICAgKiBTdGF0aWMgbmVlZGVkIGZvciBzZXJpYWxpemFibGUgY2xhc3MKLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDU0NDY4MjMyMjI3NjcyOTkzMDhMOwotCi0gIC8qKgotICAgKiBUaHJvd2FibGUuCi0gICAqLwotICBwcm90ZWN0ZWQgVGhyb3dhYmxlIHRocm93YWJsZSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhbiBleGNlcHRpb24gd2l0aG91dCBhIG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgV1NJRXhjZXB0aW9uKCkKLSAgewotICAgIC8vIEV4Y2VwdGlvbgotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIGFuIGV4Y2VwdGlvbiB3aXRoIGEgbWVzc2FnZS4KLSAgICogCi0gICAqIEBwYXJhbSBtc2cgdGhlIGV4Y2VwdGlvbiBtZXNzYWdlCi0gICAqLwotICBwdWJsaWMgV1NJRXhjZXB0aW9uKFN0cmluZyBtc2cpCi0gIHsKLSAgICAvLyBFeGNlcHRpb24KLSAgICBzdXBlcihtc2cpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhbiBleGNlcHRpb24gd2l0aCBhIG1lc3NhZ2UgYW5kIHJlbGF0ZWQgZXhjZXB0aW9uLgotICAgKiAKLSAgICogQHBhcmFtIG1zZyAgICAgICAgdGhlIGV4Y2VwdGlvbiBtZXNzYWdlCi0gICAqIEBwYXJhbSB0aHJvd2FibGUgIHRocm93YWJsZSB0aGF0IGlzIHJlbGF0ZWQgdG8gdGhpcyBleGNlcHRpb24KLSAgICovCi0gIHB1YmxpYyBXU0lFeGNlcHRpb24oU3RyaW5nIG1zZywgVGhyb3dhYmxlIHRocm93YWJsZSkKLSAgewotICAgIC8vIEV4Y2VwdGlvbgotICAgIHN1cGVyKG1zZyk7Ci0KLSAgICAvLyBTYXZlIGlucHV0IHJlZmVyZW5jZQotICAgIHRoaXMudGhyb3dhYmxlID0gdGhyb3dhYmxlOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdCdzIHZhbHVlcy4KLSAgICoKLSAgICogQHJldHVybiBSZXR1cm5zIHRoZSBkZXRhaWwgbWVzc2FnZSBvZiB0aGlzIHRocm93YWJsZSBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UoKQotICB7Ci0gICAgcmV0dXJuIHN1cGVyLmdldE1lc3NhZ2UoKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QncyB2YWx1ZXMuCi0gICAqCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgZGV0YWlsIG1lc3NhZ2Ugb2YgdGhpcyB0aHJvd2FibGUgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICAvL1N0cmluZ1dyaXRlciBzdzsKLSAgICAvL1ByaW50V3JpdGVyIHB3OwotCi0gICAgLy8gQWx3YXlzIGdldCBtZXNzYWdlIGZyb20gc3VwZXIgY2xhc3MKLSAgICBTdHJpbmcgbXNnID0gc3VwZXIuZ2V0TWVzc2FnZSgpOwotCi0gICAgLy8gSWYgdGhpcyBleGNlcHRpb24gY29udGFpbnMgYSByZWZlcmVuY2UgdG8gYW5vdGhlciBleGNlcHRpb24sCi0gICAgLy8gdGhlbiBhZGQgaXQgdG8gdGhlIG1lc3NhZ2UKLSAgICBpZiAodGhyb3dhYmxlICE9IG51bGwpCi0gICAgewotICAgICAgbXNnICs9ICJcbiIKLSAgICAgICAgKyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCi0gICAgICAgICsgIiAgTmVzdGVkIGV4Y2VwdGlvbiBpczogXG5cbiAgIgotICAgICAgICArIHRocm93YWJsZS50b1N0cmluZygpCi0gICAgICAgICsgIlxuIjsKLQotICAgICAgLy8gSWYgdGhyb3dhYmxlIGlzIE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiwgCi0gICAgICAvLyB0aGVuIGFkZCBjbGFzcyBuYW1lIGFuZCBrZXkgdG8gb3V0cHV0Ci0gICAgICBpZiAodGhyb3dhYmxlIGluc3RhbmNlb2YgTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uKQotICAgICAgewotICAgICAgICBNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gbXJlID0gKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbikgdGhyb3dhYmxlOwotCi0gICAgICAgIC8vIEdldCBjbGFzcyBuYW1lIGFuZCBrZXkKLSAgICAgICAgbXNnICs9ICIgLSAiCi0gICAgICAgICAgKyBtcmUuZ2V0S2V5KCkKLSAgICAgICAgICArICJcblx0IgotICAgICAgICAgICsgIltDbGFzcyBOYW1lOiAiCi0gICAgICAgICAgKyBtcmUuZ2V0Q2xhc3NOYW1lKCkKLSAgICAgICAgICArICJdIjsKLSAgICAgIH0KLQotICAgICAgLy8gSWYgdGhyb3dhYmxlIGlzIEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24sIAotICAgICAgLy8gdGhlbiB0YXJnZXQgb2YgZXhjZXB0aW9uCi0gICAgICBlbHNlIGlmICh0aHJvd2FibGUgaW5zdGFuY2VvZiBJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uKQotICAgICAgewotICAgICAgICBJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl0ZSA9IChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uKSB0aHJvd2FibGU7Ci0KLSAgICAgICAgLy8gR2V0IHRhcmdldAotICAgICAgICBtc2cgKz0gIiAtICIgKyBpdGUuZ2V0VGFyZ2V0RXhjZXB0aW9uKCkudG9TdHJpbmcoKTsKLSAgICAgIH0KLQotICAgICAgLy8gQUREOiBQcmludCBzdGFjayB0cmFjZQotICAgICAgLy9zdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICAgIC8vcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotICAgICAgLy90aHJvd2FibGUucHJpbnRTdGFja1RyYWNlKHB3KTsKLQotICAgICAgLy8gQWRkIGl0IHRvIHRoZSBtZXNzYWdlCi0gICAgICAvL21zZyArPSBzdy50b1N0cmluZygpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBtZXNzYWdlCi0gICAgcmV0dXJuIG1zZzsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBleGNlcHRpb24gdGhhdCBjYXVzZWQgdGhpcyBleGNlcHRpb24gdG8gYmUgY3JlYXRlZC4KLSAgICogCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgZW5jYXBzdWxhdGVkIHRocm93YWJsZSBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgVGhyb3dhYmxlIGdldFRhcmdldEV4Y2VwdGlvbigpCi0gIHsKLSAgICAvLyBSZXR1cm4gdGhyb3dhYmxlCi0gICAgcmV0dXJuIHRocm93YWJsZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvV1NJRmlsZU5vdEZvdW5kRXhjZXB0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9XU0lGaWxlTm90Rm91bmRFeGNlcHRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFiZjVkYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9XU0lGaWxlTm90Rm91bmRFeGNlcHRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZTsKLQotLyoqCi0gKiBTaWduYWxzIHRoYXQgYW4gYXR0ZW1wdCB0byBvcGVuIHRoZSBmaWxlIGRlbm90ZWQgYnkgYSBzcGVjaWZpZWQgCi0gKiBwYXRobmFtZSBoYXMgZmFpbGVkLgotICogCi0gKiBAYXV0aG9yIFBldGVyICBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKiBAdmVyc2lvbiAxLjAuMQotICovCi1wdWJsaWMgY2xhc3MgV1NJRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGV4dGVuZHMgV1NJRXhjZXB0aW9uCi17Ci0KLSAgLyoqCi0gICAqIFN0YXRpYyBuZWVkZWQgZm9yIHNlcmlhbGl6YWJsZSBjbGFzcwotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gLTE5MTYwMTA0NDQ2MDE2NjY0MDFMOwotCi0vKioKLSAgICogQ29uc3RydWN0b3IgZm9yIFdTSUZpbGVOb3RGb3VuZEV4Y2VwdGlvbi4KLSAgICovCi0gIHB1YmxpYyBXU0lGaWxlTm90Rm91bmRFeGNlcHRpb24oKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgV1NJRmlsZU5vdEZvdW5kRXhjZXB0aW9uLgotICAgKiBAcGFyYW0gbXNnICB0aGUgZGV0YWlsIG1lc3NhZ2UuCi0gIAotICAgKi8KLSAgcHVibGljIFdTSUZpbGVOb3RGb3VuZEV4Y2VwdGlvbihTdHJpbmcgbXNnKQotICB7Ci0gICAgc3VwZXIobXNnKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgV1NJRmlsZU5vdEZvdW5kRXhjZXB0aW9uLgotICAgKiBAcGFyYW0gbXNnICAgICAgICB0aGUgZGV0YWlsIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSB0aHJvd2FibGUgIGluaXRpYWwgZXhjZXB0aW9uIHRocm93bi4KLSAgICovCi0gIHB1YmxpYyBXU0lGaWxlTm90Rm91bmRFeGNlcHRpb24oU3RyaW5nIG1zZywgVGhyb3dhYmxlIHRocm93YWJsZSkKLSAgewotICAgIHN1cGVyKG1zZywgdGhyb3dhYmxlKTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9XU0lSdW50aW1lRXhjZXB0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9XU0lSdW50aW1lRXhjZXB0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhZTMwYjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvV1NJUnVudGltZUV4Y2VwdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBydW50aW1lIGV4Y2VwdGlvbnMgdGhhdCBvY2N1ciBhZnRlciBwcm9jZXNzaW5nIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzLgotICogCi0gKiBAYXV0aG9yIFBldGVyICBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKiBAdmVyc2lvbiAxLjAuMQotICovCi1wdWJsaWMgY2xhc3MgV1NJUnVudGltZUV4Y2VwdGlvbiBleHRlbmRzIFdTSUV4Y2VwdGlvbgotewotCi0gIC8qKgotICAgKiBTdGF0aWMgbmVlZGVkIGZvciBzZXJpYWxpemFibGUgY2xhc3MKLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDQzMDkzMjA5ODE1MTU1MTMxNzFMOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgV1NJUnVudGltZUV4Y2VwdGlvbi4KLSAgICovCi0gIHB1YmxpYyBXU0lSdW50aW1lRXhjZXB0aW9uKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIFdTSVJ1bnRpbWVFeGNlcHRpb24uCi0gICAqIEBwYXJhbSBtc2cgIHRoZSBkZXRhaWwgbWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyBXU0lSdW50aW1lRXhjZXB0aW9uKFN0cmluZyBtc2cpCi0gIHsKLSAgICBzdXBlcihtc2cpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBXU0lSdW50aW1lRXhjZXB0aW9uLgotICAgKiBAcGFyYW0gbXNnICAgICAgICB0aGUgZGV0YWlsIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSB0aHJvd2FibGUgIHRoZSBpbml0aWFsIGV4Y2VwdGlvbiB0aHJvd24uCi0gIAotICAgKi8KLSAgcHVibGljIFdTSVJ1bnRpbWVFeGNlcHRpb24oU3RyaW5nIG1zZywgVGhyb3dhYmxlIHRocm93YWJsZSkKLSAgewotICAgIHN1cGVyKG1zZywgdGhyb3dhYmxlKTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9XU0lUYWcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL1dTSVRhZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmIzNDMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL1dTSVRhZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZTsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFRhZ3M7Ci0KLS8qKgotICogV1MtSSBjb25zdGFudHMuICAKLSAqICAKLSAqIEBhdXRob3IgS3VsaWsKLSAqLwotcHVibGljIGludGVyZmFjZSBXU0lUYWcgZXh0ZW5kcyBYTUxUYWdzCi17Ci0gIC8qKgotICAgKiBRdWFsaWZpZWQgbmFtZXMgb2YgV1NETCBlbGVtZW50cy4KLSAgICovCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgUU5hbWUgV1NETF9JTVBPUlQgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTREwsICJpbXBvcnQiKTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBXU0RMX1RZUEVTID0KLSAgICBuZXcgUU5hbWUoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0RMLCAidHlwZXMiKTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBXU0RMX01FU1NBR0UgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTREwsICJtZXNzYWdlIik7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgUU5hbWUgV1NETF9ET0NVTUVOVEFUSU9OID0KLSAgICBuZXcgUU5hbWUoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0RMLCAiZG9jdW1lbnRhdGlvbiIpOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIFdTRExfREVGSU5JVElPTlMgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTREwsICJkZWZpbml0aW9ucyIpOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIFdTRExfQklORElORyA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NETCwgImJpbmRpbmciKTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBXU0RMX09QRVJBVElPTiA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NETCwgIm9wZXJhdGlvbiIpOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIFdTRExfUEFSVCA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NETCwgInBhcnQiKTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBXU0RMX0lOUFVUID0KLSAgICBuZXcgUU5hbWUoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0RMLCAiaW5wdXQiKTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBXU0RMX09VVFBVVCA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NETCwgIm91dHB1dCIpOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIFdTRExfRkFVTFQgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTREwsICJmYXVsdCIpOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIFdTRExfU0VSVklDRSA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NETCwgInNlcnZpY2UiKTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBXU0RMX1BPUlQgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTREwsICJwb3J0Iik7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgUU5hbWUgV1NETF9QT1JUVFlQRSA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NETCwgInBvcnRUeXBlIik7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBXU0RMX1NPQVBfQklORElORyA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NETF9TT0FQLCAiYmluZGluZyIpOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIFdTRExfU09BUF9CT0RZID0KLSAgICBuZXcgUU5hbWUoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0RMX1NPQVAsICJib2R5Iik7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgV1NETF9TT0FQX0hFQURFUiA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NETF9TT0FQLCAiaGVhZGVyIik7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgV1NETF9TT0FQX0hFQURFUkZBVUxUID0KLSAgICBuZXcgUU5hbWUoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0RMX1NPQVAsICJoZWFkZXJmYXVsdCIpOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIFdTRExfU09BUF9GQVVMVCA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NETF9TT0FQLCAiZmF1bHQiKTsKLQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIFdTRExfTUlNRV9DT05URU5UID0KLSAgICBuZXcgUU5hbWUoV1NJQ29uc3RhbnRzLk5TX05BTUVfV1NETF9NSU1FLCAiY29udGVudCIpOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIFdTRExfTUlNRV9YTUwgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfTkFNRV9XU0RMX01JTUUsICJtaW1lWG1sIik7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgV1NETF9NSU1FX1BBUlQgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfTkFNRV9XU0RMX01JTUUsICJwYXJ0Iik7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgV1NETF9NSU1FX01VTFRJUEFSVCA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19OQU1FX1dTRExfTUlNRSwgIm11bHRpcGFydFJlbGF0ZWQiKTsKLQotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIEFUVFJfV1NETF9BUlJBWVRZUEUgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTREwsICJhcnJheVR5cGUiKTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBBVFRSX1dTRExfTkFNRVNQQUNFID0KLSAgICBuZXcgUU5hbWUoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0RMLCAibmFtZXNwYWNlIik7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgUU5hbWUgQVRUUl9XU0RMX0xPQ0FUSU9OID0KLSAgICBuZXcgUU5hbWUoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0RMLCAibG9jYXRpb24iKTsKLQotICAvKioKLSAgICogTmFtZXNwYWNlcy4KLSAgICovCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE5TX1VSSV9DTEFJTSA9Ci0gICAgImh0dHA6Ly93cy1pLm9yZy9zY2hlbWFzL2NvbmZvcm1hbmNlQ2xhaW0vIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTlNfVVJJX1NPQVAgPQotICAgICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE5TX1VSSV9TT0FQRU5DID0KLSAgICAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBOU19VUklfQkFTSUNfUFJPRklMRTEwID0KLSAgICAiaHR0cDovL3dzaS5vcmcvcHJvZmlsZXMvYmFzaWMxLjAvIjsKLQotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIFNPQVBFTkNfQVJSQVkgPSBuZXcgUU5hbWUoTlNfVVJJX1NPQVBFTkMsICJBcnJheSIpOwotCi0gIC8qKgotICAgKiBRdWFsaWZpZWQgbmFtZXMgb2YgV1MtSSBjbGFpbSBlbGVtZW50cy4KLSAgICovCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgUU5hbWUgV1NJX0NMQUlNID0gbmV3IFFOYW1lKE5TX1VSSV9DTEFJTSwgIkNsYWltIik7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgUU5hbWUgQVRUUl9DTEFJTV9DT05GT1JNU1RPID0KLSAgICBuZXcgUU5hbWUoTlNfVVJJX0NMQUlNLCAiY29uZm9ybXNUbyIpOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIEFUVFJfU09BUF9NVVNUVU5ERVJTVEFORCA9Ci0gICAgbmV3IFFOYW1lKE5TX1VSSV9TT0FQLCAibXVzdFVuZGVyc3RhbmQiKTsKLQotICAvKioKLSAgICogUXVhbGlmaWVkIG5hbWVzIG9mIFNPQVAgZWxlbWVudHMuCi0gICAqLwotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIEVMRU1fU09BUF9FTlZFTE9QRSA9IG5ldyBRTmFtZShOU19VUklfU09BUCwgIkVudmVsb3BlIik7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgUU5hbWUgRUxFTV9TT0FQX0JPRFkgPSBuZXcgUU5hbWUoTlNfVVJJX1NPQVAsICJCb2R5Iik7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgUU5hbWUgRUxFTV9TT0FQX0ZBVUxUID0gbmV3IFFOYW1lKE5TX1VSSV9TT0FQLCAiRmF1bHQiKTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBFTEVNX1NPQVBfSEVBREVSID0gbmV3IFFOYW1lKE5TX1VSSV9TT0FQLCAiSGVhZGVyIik7Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9BbmFseXplci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvQW5hbHl6ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODc5YWEyZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9BbmFseXplci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzE0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXI7Ci0KLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuVG9vbEluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuQW5hbHl6ZXJDb25maWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLkxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5Qcm9maWxlQXNzZXJ0aW9uczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuUHJvZmlsZVZhbGlkYXRvckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5NZXNzYWdlTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5UZXN0VXRpbHM7Ci0KLS8qKgotICogVGhlIEFuYWx5emVyIHdpbGwgcHJvY2VzcyBhbGwgUHJvZmlsZSBjb25mb3JtYW5jZSBmdW5jdGlvbnMuCi0gKiBUaGlzIGNsYXNzIHNob3VsZCBiZSBzdWItY2xhc3NlZCBmb3IgZWFjaCBwcm9maWxlLgotICoKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIEppbSBDbHVuZQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBbmFseXplcgotewotICAvKioKLSAgICogTWVzc2FnZSBsaXN0LgotICAgKi8KLSAgcHJvdGVjdGVkIE1lc3NhZ2VMaXN0IG1lc3NhZ2VMaXN0ID0gbnVsbDsKLQotICBwcm90ZWN0ZWQgZmluYWwgc3RhdGljIFN0cmluZyBSRVNPVVJDRV9CVU5ETEVfTkFNRSA9Ci0gICAgIm9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5BbmFseXplciI7Ci0KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgVVNBR0VfTUVTU0FHRSA9Ci0gICAgIlVzYWdlOiBBbmFseXplciAtY29uZmlnIDxjb25maWdGaWxlbmFtZT4iOwotCi0gIHByb3RlY3RlZCBSZXBvcnRlciByZXBvcnRlciA9IG51bGw7Ci0gIHByb3RlY3RlZCBBbmFseXplckNvbnRleHQgYW5hbHl6ZXJDb250ZXh0ID0gbnVsbDsKLSAgcHJvdGVjdGVkIENhbmRpZGF0ZUluZm8gY2FuZGlkYXRlSW5mbyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIEFuYWx5emVyIHRvb2wgaW5mb3JtYXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgVG9vbEluZm8gdG9vbEluZm8gPSBudWxsOwotCi0gIC8qKgotICAgKiBQcm9maWxlIHZhbGlkYXRvciBmYWN0b3J5LgotICAgKi8KLSAgcHJvdGVjdGVkIFByb2ZpbGVWYWxpZGF0b3JGYWN0b3J5IGZhY3RvcnkgPSBudWxsOwotCi0gIC8qKgotICAgKiBQcm9maWxlIHZhbGlkYXRvciBmYWN0b3J5LgotICAgKi8KLSAgcHJvdGVjdGVkIERvY3VtZW50RmFjdG9yeSBkb2N1bWVudEZhY3RvcnkgPSBudWxsOwotCi0gIC8qKgotICAgKiBBbmFseXplciBjb25maWcgZmlsZSBsaXN0LgotICAgKi8KLSAgcHJvdGVjdGVkIExpc3QgYW5hbHl6ZXJDb25maWdMaXN0ID0gbmV3IFZlY3RvcigpOwotICBwcm90ZWN0ZWQgaW50IGFuYWx5emVyQ29uZmlnSW5kZXggPSAwOwotCi0gIC8qKgotICAgKiBQcm9maWxlIGFzc2VydGlvbnMuCi0gICAqLwotICBwcm90ZWN0ZWQgUHJvZmlsZUFzc2VydGlvbnMgcHJvZmlsZUFzc2VydGlvbnMgPSBudWxsOwotCi0gIC8qKgotICAgKiBMb2cgZmlsZS4KLSAgICovCi0gIHByb3RlY3RlZCBMb2cgbG9nID0gbnVsbDsKLQotICAvKioKLSAgICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoZSBhbmFseXplciB0b29sLgotICAgKiBAcGFyYW0gYXJncyAgICAgIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCi0gICAqIEBwYXJhbSB0b29sSW5mbyAgYW5hbHl6ZXIgdG9vbCBpbmZvcm1hdGlvbi4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbXMgY3JlYXRpbmcgdGhlIGluc3RhbmNlIG9mIHRoZSBhbmFseXplciB0b29sLgotICAgKi8KLSAgcHVibGljIEFuYWx5emVyKFN0cmluZ1tdIGFyZ3MsIFRvb2xJbmZvIHRvb2xJbmZvKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBpbml0KHRvb2xJbmZvKTsKLQotICAgIC8vIEdldCBuZXcgY29uZmlnIG9iamVjdCAgIAotICAgIHRoaXMuYW5hbHl6ZXJDb25maWdMaXN0LmFkZCgKLSAgICAgIGFuYWx5emVyQ29uZmlnSW5kZXgsCi0gICAgICBkb2N1bWVudEZhY3RvcnkubmV3QW5hbHl6ZXJDb25maWcoKSk7Ci0gICAgZ2V0QW5hbHl6ZXJDb25maWcoKS5pbml0KG1lc3NhZ2VMaXN0KTsKLQotICAgIC8vIFBhcnNlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKLSAgICBnZXRBbmFseXplckNvbmZpZygpLnBhcnNlQXJncyhhcmdzLCB0cnVlKTsKLQotICAgIC8vIERpc3BsYXkgY29weXJpZ2h0IGFuZCBvcHRpb25zIHRoYXQgd2VyZSBzcGVjaWZpZWQKLSAgICBUZXN0VXRpbHMucHJpbnRUb29sSW5mbyh0b29sSW5mbyk7Ci0gICAgU3lzdGVtLm91dC5wcmludGxuKGdldEFuYWx5emVyQ29uZmlnKCkudG9TdHJpbmcoKSk7Ci0KLSAgICAvLyBEaXNwbGF5IG1lc3NhZ2UKLSAgICBwcmludE1lc3NhZ2UoCi0gICAgICAicHJvZ3Jlc3MwMSIsCi0gICAgICBudWxsLAotICAgICAgIlBsZWFzZSB3YWl0IHdoaWxlIHRoZSBzcGVjaWZpZWQgYXJ0aWZhY3RzIGFyZSBhbmFseXplZC4uLiIpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGUgYW5hbHl6ZXIgdG9vbC4KLSAgICogQHBhcmFtIGFyZ3MgICAgICBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgotICAgKiBAcGFyYW0gdG9vbEluZm8gIGFuYWx5emVyIHRvb2wgaW5mb3JtYXRpb24uCi0gICAqIEBwYXJhbSB2YWxpZGF0ZSAgZmxhZyBmb3IgY29uZmlnIG9wdGlvbnMgdmFsaWRhdGlvbi4gCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW1zIGNyZWF0aW5nIHRoZSBpbnN0YW5jZSBvZiB0aGUgYW5hbHl6ZXIgdG9vbC4KLSAgICovCi0gIHB1YmxpYyBBbmFseXplcihTdHJpbmdbXSBhcmdzLCBUb29sSW5mbyB0b29sSW5mbywgYm9vbGVhbiB2YWxpZGF0ZSkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgaW5pdCh0b29sSW5mbyk7Ci0KLSAgICAvLyBHZXQgbmV3IGNvbmZpZyBvYmplY3QgICAKLSAgICB0aGlzLmFuYWx5emVyQ29uZmlnTGlzdC5hZGQoCi0gICAgICAgIGFuYWx5emVyQ29uZmlnSW5kZXgsCi0gICAgICAgIGRvY3VtZW50RmFjdG9yeS5uZXdBbmFseXplckNvbmZpZygpKTsKLSAgICBnZXRBbmFseXplckNvbmZpZygpLmluaXQobWVzc2FnZUxpc3QpOwotCi0gICAgLy8gUGFyc2UgY29tbWFuZCBsaW5lIGFyZ3VtZW50cwotICAgIGdldEFuYWx5emVyQ29uZmlnKCkucGFyc2VBcmdzKGFyZ3MsIHZhbGlkYXRlKTsKLQotICAgIC8vIERpc3BsYXkgY29weXJpZ2h0IGFuZCBvcHRpb25zIHRoYXQgd2VyZSBzcGVjaWZpZWQKLSAgICBUZXN0VXRpbHMucHJpbnRUb29sSW5mbyh0b29sSW5mbyk7Ci0gICAgU3lzdGVtLm91dC5wcmludGxuKGdldEFuYWx5emVyQ29uZmlnKCkudG9TdHJpbmcoKSk7Ci0KLSAgICAvLyBEaXNwbGF5IG1lc3NhZ2UKLSAgICBwcmludE1lc3NhZ2UoCi0gICAgICAgICJwcm9ncmVzczAxIiwKLSAgICAgICAgbnVsbCwKLSAgICAiUGxlYXNlIHdhaXQgd2hpbGUgdGhlIHNwZWNpZmllZCBhcnRpZmFjdHMgYXJlIGFuYWx5emVkLi4uIik7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoZSBhbmFseXplciB0b29sLgotICAgKiBAcGFyYW0gYW5hbHl6ZXJDb25maWdMaXN0ICBhbmFseXplciBjb25maWcgZmlsZSBsaXN0LgotICAgKiBAcGFyYW0gdG9vbEluZm8gICAgICAgICAgICBhbmFseXplciB0b29sIGluZm9ybWF0aW9uLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtcyBjcmVhdGluZyB0aGUgaW5zdGFuY2Ugb2YgdGhlIGFuYWx5emVyIHRvb2wuCi0gICAqLwotICBwdWJsaWMgQW5hbHl6ZXIoTGlzdCBhbmFseXplckNvbmZpZ0xpc3QsIFRvb2xJbmZvIHRvb2xJbmZvKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIGluaXQodG9vbEluZm8pOwotCi0gICAgdGhpcy5hbmFseXplckNvbmZpZ0xpc3QgPSBhbmFseXplckNvbmZpZ0xpc3Q7Ci0gIH0KLQotICAvKioKLSAgICogQ29tbW9uIGluaXRpYWxpemF0aW9uLgotICAgKiBAcGFyYW0gdG9vbEluZm8gIGFuYWx5emVyIHRvb2wgaW5mb3JtYXRpb24uCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW1zIG9jY3VyIGR1cmluZyBjb21tb24gaW5pdGlhbGl6YXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBpbml0KFRvb2xJbmZvIGluZm8pIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHRoaXMudG9vbEluZm8gPSBpbmZvOwotCi0gICAgLy8gQ3JlYXRlIG1lc3NhZ2UgbGlzdAotICAgIG1lc3NhZ2VMaXN0ID0gbmV3IE1lc3NhZ2VMaXN0KFJFU09VUkNFX0JVTkRMRV9OQU1FKTsKLQotICAgIC8vIENyZWF0ZSBwcm9maWxlIHZhbGlkYXRvciBmYWN0b3J5Ci0gICAgZmFjdG9yeSA9IFByb2ZpbGVWYWxpZGF0b3JGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0KLSAgICAvLyBDcmVhdGUgZG9jdW1lbnQgZmFjdG9yeQotICAgIGRvY3VtZW50RmFjdG9yeSA9IERvY3VtZW50RmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFByb2Nlc3MgYWxsIGNvbmZvcm1hbmNlIHZhbGlkYXRpb24gZnVuY3Rpb25zLgotICAgKiBAcmV0dXJuIHN0YXR1cyBjb2RlLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtcyBvY2N1ciBkdXJpbmcgdmFsaWRhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBpbnQgdmFsaWRhdGVBbGwoKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBpbnQgc3RhdHVzQ29kZSA9IDA7Ci0gICAgaW50IHRlbXBTdGF0dXNDb2RlOwotCi0gICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGFuYWx5emVyQ29uZmlnTGlzdC5zaXplKCk7IGluZGV4KyspCi0gICAgewotICAgICAgLy8gREVCVUc6Ci0gICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiaW5kZXg6ICIgKyBpbmRleCk7Ci0KLSAgICAgIC8vIFNldCBjdXJyZW50IGFuYWx5emVyIGNvbmZpZyBpbmRleCAKLSAgICAgIHNldEFuYWx5emVyQ29uZmlnKGluZGV4KTsKLQotICAgICAgaWYgKCh0ZW1wU3RhdHVzQ29kZSA9IHZhbGlkYXRlQ29uZm9ybWFuY2UoKSkgPiBzdGF0dXNDb2RlKQotICAgICAgICBzdGF0dXNDb2RlID0gdGVtcFN0YXR1c0NvZGU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN0YXR1c0NvZGU7Ci0gIH0KLQotICAvKioKLSAgICogUHJvY2VzcyBhbGwgY29uZm9ybWFuY2UgdmFsaWRhdGlvbiBmdW5jdGlvbnMuCi0gICAqIEByZXR1cm4gc3RhdHVzIGNvZGUuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW1zIG9jY3VyIGR1cmluZyBjb25mb3JtYW5jZSB2YWxpZGF0aW9uLgotICAgKi8KLSAgcHVibGljIGFic3RyYWN0IGludCB2YWxpZGF0ZUNvbmZvcm1hbmNlKCkgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLQotICAvKioKLSAgICogR2V0IHRvb2wgaW5mb3JtYXRpb24uCi0gICAqIEByZXR1cm4gdGhlIHRvb2wgaW5mb3JtYXRpb24uCi0gICAqLwotICBwdWJsaWMgVG9vbEluZm8gZ2V0VG9vbEluZm8oKQotICAKLSAgewotICAgIHJldHVybiB0aGlzLnRvb2xJbmZvOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldCBjdXJyZW50IGFuYWx5emVyIGNvbmZpZ3VyYXRpb24uCi0gICAqIEBwYXJhbSBpbmRleCAgdXJyZW50IGFuYWx5emVyIGNvbmZpZ3VyYXRpb24uCi0gICAqIEBzZWUgI2dldEFuYWx5emVyQ29uZmlnCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBzZXRBbmFseXplckNvbmZpZyhpbnQgaW5kZXgpCi0gIHsKLSAgICB0aGlzLmFuYWx5emVyQ29uZmlnSW5kZXggPSBpbmRleDsKLSAgfQotCi0gIHByb3RlY3RlZCBpbnQgZ2V0QW5hbHl6ZXJDb25maWdJbmRleCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5hbmFseXplckNvbmZpZ0luZGV4OwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBhbmFseXplciBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLgotICAgKiBAcmV0dXJuIGFuYWx5emVyIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uCi0gICAqIEBzZWUgI3NldEFuYWx5emVyQ29uZmlnCi0gICAqLwotICBwdWJsaWMgQW5hbHl6ZXJDb25maWcgZ2V0QW5hbHl6ZXJDb25maWcoKQotICB7Ci0gICAgcmV0dXJuIChBbmFseXplckNvbmZpZykgdGhpcy5hbmFseXplckNvbmZpZ0xpc3QuZ2V0KGFuYWx5emVyQ29uZmlnSW5kZXgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFByaW50IGEgbWVzc2FnZSBmcm9tIHRoZSByZXNvdXJjZSBidW5kbGUuCi0gICAqIEBwYXJhbSBrZXkgICAgICAgICAgICAgYSBrZXkuCi0gICAqIEBwYXJhbSBtZXNzYWdlRGF0YSAgICAgbWVzc2FnZSBkYXRhLgotICAgKiBAcGFyYW0gZGVmYXVsdE1lc3NhZ2UgIGEgZGVmYXVsdCBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIHZvaWQgcHJpbnRNZXNzYWdlKAotICAgIFN0cmluZyBrZXksCi0gICAgU3RyaW5nIG1lc3NhZ2VEYXRhLAotICAgIFN0cmluZyBkZWZhdWx0TWVzc2FnZSkKLSAgewotICAgIG1lc3NhZ2VMaXN0LnByaW50TWVzc2FnZShrZXksIG1lc3NhZ2VEYXRhLCBkZWZhdWx0TWVzc2FnZSk7Ci0gIH0KLQotICAvKioKLSAgICogUHJpbnQgbWVzc2FnZS4KLSAgICogQHBhcmFtIGtleSAgICAgICAgICAgICBhIGtleS4KLSAgICogQHBhcmFtIG1lc3NhZ2VEYXRhICAgICBtZXNzYWdlIGRhdGEuCi0gICAqIEBwYXJhbSBkZWZhdWx0TWVzc2FnZSAgYSBkZWZhdWx0IG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgc3RhdGljUHJpbnRNZXNzYWdlKAotICAgIFN0cmluZyBrZXksCi0gICAgU3RyaW5nIG1lc3NhZ2VEYXRhLAotICAgIFN0cmluZyBkZWZhdWx0TWVzc2FnZSkKLSAgewotICAgIE1lc3NhZ2VMaXN0LnByaW50TWVzc2FnZSgKLSAgICAgIFJFU09VUkNFX0JVTkRMRV9OQU1FLAotICAgICAga2V5LAotICAgICAgbWVzc2FnZURhdGEsCi0gICAgICBkZWZhdWx0TWVzc2FnZSk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJuIFhNTCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuCi0gICAqIEBwYXJhbSBuYW1lc3BhY2VOYW1lICBhIG5hbWVzcGFjZSBwcmVmaXguCi0gICAqIEByZXR1cm4gWE1MIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9YTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgLy8gU3RhcnQgICAgIAotICAgIHB3LnByaW50KHRvb2xJbmZvLmdldFN0YXJ0WE1MU3RyaW5nKG5hbWVzcGFjZU5hbWUpKTsKLQotICAgIC8vIENvbmZpZwotICAgIHB3LnByaW50KAotICAgICAgZ2V0QW5hbHl6ZXJDb25maWcoKS50b1hNTFN0cmluZygKLSAgICAgICAgV1NJQ29uc3RhbnRzLk5TX05BTUVfV1NJX0FOQUxZWkVSX0NPTkZJRykpOwotCi0gICAgLy8gRW5kCi0gICAgcHcucHJpbnRsbih0b29sSW5mby5nZXRFbmRYTUxTdHJpbmcobmFtZXNwYWNlTmFtZSkpOwotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKioKLSAgICogUHJpbnQgYSBtZXNzYWdlLgotICAgKiBAcGFyYW0gbWVzc2FnZSBhIG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgdm9pZCBwcmludE1lc3NhZ2UoU3RyaW5nIG1lc3NhZ2UpCi0gIHsKLSAgICBpZiAoZ2V0QW5hbHl6ZXJDb25maWcoKS5nZXRWZXJib3NlT3B0aW9uKCkpCi0gICAgewotICAgICAgU3lzdGVtLmVyci5wcmludGxuKG1lc3NhZ2UpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvQW5hbHl6ZXIucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL0FuYWx5emVyLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwODQ4MmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvQW5hbHl6ZXIucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLSMgLyoqCi0jICAqIDxjb3B5cmlnaHQ+Ci0jICAqCi0jICAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jICAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jICAqIAotIyAgKiBDb250cmlidXRvcnM6IAotIyAgKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyAgKgotIyAgKiA8L2NvcHlyaWdodD4KLSMgICovCi0KLSMKLSMgQW5hbHl6ZXIgcmVzb3VyY2UgYnVuZGxlLgotIwotdXNhZ2UwMT1Vc2FnZTogQW5hbHl6ZXIgLWNvbmZpZyA8Y29uZmlnRmlsZW5hbWU+Ci1jcmVhdGVkMDE9Q29uZm9ybWFuY2UgcmVwb3J0IGhhcyBiZWVuIGNyZWF0ZWQuCi1wcm9ncmVzczAxPVBsZWFzZSB3YWl0IHdoaWxlIHRoZSBzcGVjaWZpZWQgYXJ0aWZhY3RzIGFyZSBhbmFseXplZC4uLgotZXJyb3IwMT1BbmFseXplciBFcnJvcjoKLWVycm9yMDI9QW5hbHl6ZXIgU3RvcHBlZCBCeSBFeGNlcHRpb246Ci1lcnJvcjAzPVRoZSBjb25mb3JtYW5jZSB2YWxpZGF0aW9uIHByb2Nlc3MgZmFpbGVkLgotZXhjZXB0aW9uMDE9RXhjZXB0aW9uOgotY29uZmlnMDE9QW5hbHl6ZXIgY29uZmlndXJhdGlvbiBmaWxlIHdhcyBub3QgZm91bmQuICBTcGVjaWZpZWQgZmlsZSBsb2NhdGlvbjoKLWNvbmZpZzAyPUNvdWxkIG5vdCBmaW5kIGxvZyBmaWxlLiAgU3BlY2lmaWVkIGZpbGUgbG9jYXRpb246Ci1jb25maWcwMz1Db3VsZCBub3QgZmluZCBXU0RMIGZpbGUuICBTcGVjaWZpZWQgZmlsZSBsb2NhdGlvbjoKLWNvbmZpZzA0PUNhbiBub3Qgc3BlY2lmeSBib3RoIHRoZSBXU0RMIHJlZmVyZW5jZSBhbmQgVURESSByZWZlcmVuY2Ugb3B0aW9ucy4KLWNvbmZpZzA1PVdTREwgZG9jdW1lbnQgd2FzIGVpdGhlciBub3QgZm91bmQgb3IgY291bGQgbm90IGJlIHByb2Nlc3NlZC4KLWNvbmZpZzA2PUludmFsaWQgYW5hbHl6ZXIgY29uZmlndXJhdGlvbiBlbGVtZW50OgotY29uZmlnMDc9Qm90aCB0aGUgPHdzZGxFbGVtZW50PiBhbmQgPHdzZGxVUkk+IGVsZW1lbnRzIG11c3QgYmUgc3BlY2lmaWVkLgotY29uZmlnMDg9Q291bGQgbm90IHJlYWQgYW5hbHl6ZXIgY29uZmlndXJhdGlvbiBmaWxlLiAgU3BlY2lmaWVkIGZpbGUgbG9jYXRpb246Ci1jb25maWcwOT1UaGUgcGFyZW50RWxlbWVudE5hbWUgYXR0cmlidXRlIG11c3QgYmUgc3BlY2lmaWVkIHdpdGggYSBXU0RMIHR5cGUgb2YgcG9ydCBvciBvcGVyYXRpb24uCi1jb25maWcxMD1UaGUgLXdzZGxFbGVtZW50IG9wdGlvbiBtdXN0IGFwcGVhciBhZnRlciB0aGUgLXdzZGxVUkkgb3IgLXVkZGlLZXkgb3B0aW9ucy4KLWNvbmZpZzExPVRoZSAtc2VydmljZUxvY2F0aW9uIG9wdGlvbiBtdXN0IGFwcGVhciBhZnRlciB0aGUgLXdzZGxVUkkgb3IgLXVkZGlLZXkgb3B0aW9ucy4KLWNvbmZpZzEyPVRoZSBzcGVjaWZpZWQgb3B0aW9uIGlzIG5vdCBzdXBwb3J0ZWQ6Ci1jb25maWcxMz1PcHRpb24gZGlkIG5vdCBjb250YWluIGEgdmFsdWUuICBTcGVjaWZpZWQgb3B0aW9uOgotY29uZmlnMTQ9Q291bGQgbm90IGZpbmQgdGVzdCBhc3NlcnRpb24gZG9jdW1lbnQuICBTcGVjaWZpZWQgZmlsZSBsb2NhdGlvbjoKLWNvbmZpZzE1PVJlcG9ydCBmaWxlIGFscmVhZHkgZXhpc3RzIGFuZCByZXBsYWNlIG9wdGlvbiB3YXMgbm90IHNwZWNpZmllZC4KLWNvbmZpZzE2PVRlc3QgYXNzZXJ0aW9uIGRvY3VtZW50IGxvY2F0aW9uIG11c3QgYmUgc3BlY2lmaWVkLgotY29uZmlnMTc9Q291bGQgbm90IGdldCByZXBvcnQgZmlsZSBsb2NhdGlvbi4KLWNvbmZpZzE4PUludmFsaWQgY29ycmVsYXRpb24gdHlwZSBzcGVjaWZpZWQuCi1jb25maWcxOT1UaGUgV1NETCBlbGVtZW50IG5hbWUgbXVzdCBiZSBzcGVjaWZpZWQuCi1jb25maWcyMD1UaGUgV1MtSSBUZXN0IEFzc2VydGlvbiBEb2N1bWVudCAoVEFEKWRvY3VtZW50IHdhcyBlaXRoZXIgbm90IGZvdW5kIG9yIGNvdWxkIG5vdCBiZSBwcm9jZXNzZWQuCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9BbmFseXplckNvbnRleHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL0FuYWx5emVyQ29udGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZmFkNWFkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL0FuYWx5emVyQ29udGV4dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLldTRExEb2N1bWVudDsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIGNvbnRhaW5zIGNvbnRleHR1YWwgaW5mb3JtYXRpb24gd2hpY2ggaXMgcmVxdWlyZWQgYnkgdGVzdCBhc3NlcnRpb25zIGFjcm9zcyBhbGwgYXJ0aWZhY3RzLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgQW5hbHl6ZXJDb250ZXh0Ci17Ci0gIHByb3RlY3RlZCBTZXJ2aWNlUmVmZXJlbmNlIHNlcnZpY2VSZWZlcmVuY2UgPSBudWxsOwotICBwcm90ZWN0ZWQgQ2FuZGlkYXRlSW5mbyBjYW5kaWRhdGVJbmZvID0gbnVsbDsKLSAgcHJvdGVjdGVkIFdTRExEb2N1bWVudCB3c2RsRG9jdW1lbnQgPSBudWxsOwotCi0gIC8qKgotICAgKiBDcmVhdGUgYW5hbHl6ZXIgY29udGV4dCB3aXRoIHNlcnZpY2UgcmVmZXJlbmNlLgotICAgKiBAcGFyYW0gc2VydmljZVJlZmVyZW5jZSBhIHNlcnZpY2UgcmVmZXJlbmNlLgotICAgKi8KLSAgcHVibGljIEFuYWx5emVyQ29udGV4dChTZXJ2aWNlUmVmZXJlbmNlIHNlcnZpY2VSZWZlcmVuY2UpCi0gIHsKLSAgICB0aGlzLnNlcnZpY2VSZWZlcmVuY2UgPSBzZXJ2aWNlUmVmZXJlbmNlOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBzZXJ2aWNlIHJlZmVyZW5jZS4KLSAgICogQHJldHVybiBzZXJ2aWNlIHJlZmVyZW5jZS4KLSAgICogQHNlZSAjc2V0U2VydmljZVJlZmVyZW5jZQotICAgKi8KLSAgcHVibGljIFNlcnZpY2VSZWZlcmVuY2UgZ2V0U2VydmljZVJlZmVyZW5jZSgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5zZXJ2aWNlUmVmZXJlbmNlOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldCBzZXJ2aWNlIHJlZmVyZW5jZS4KLSAgICogQHBhcmFtIHNlcnZpY2VSZWZlcmVuY2UgYSBzZXJ2aWNlIHJlZmVyZW5jZS4KLSAgICogQHNlZSAjZ2V0U2VydmljZVJlZmVyZW5jZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U2VydmljZVJlZmVyZW5jZShTZXJ2aWNlUmVmZXJlbmNlIHNlcnZpY2VSZWZlcmVuY2UpCi0gIHsKLSAgICB0aGlzLnNlcnZpY2VSZWZlcmVuY2UgPSBzZXJ2aWNlUmVmZXJlbmNlOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGNhbmRpZGF0ZUluZm8uCi0gICAqIEByZXR1cm4gQ2FuZGlkYXRlSW5mby4KLSAgICogQHNlZSAjc2V0Q2FuZGlkYXRlSW5mbwotICAgKi8KLSAgcHVibGljIENhbmRpZGF0ZUluZm8gZ2V0Q2FuZGlkYXRlSW5mbygpCi0gIHsKLSAgICByZXR1cm4gY2FuZGlkYXRlSW5mbzsKLSAgfQotCi0gIC8qKgotICAgKiBTZXRzIHRoZSBjYW5kaWRhdGVJbmZvLgotICAgKiBAcGFyYW0gY2FuZGlkYXRlSW5mbyB0aGUgY2FuZGlkYXRlSW5mbyB0byBzZXQuCi0gICAqIEBzZWUgI2dldENhbmRpZGF0ZUluZm8KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldENhbmRpZGF0ZUluZm8oQ2FuZGlkYXRlSW5mbyBjYW5kaWRhdGVJbmZvKQotICB7Ci0gICAgdGhpcy5jYW5kaWRhdGVJbmZvID0gY2FuZGlkYXRlSW5mbzsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHdzZGxEb2N1bWVudC4KLSAgICogQHJldHVybiBXU0RMRG9jdW1lbnQuCi0gICAqIEBzZWUgI3NldFdzZGxEb2N1bWVudAotICAgKi8KLSAgcHVibGljIFdTRExEb2N1bWVudCBnZXRXc2RsRG9jdW1lbnQoKSB7Ci0gICAgICByZXR1cm4gd3NkbERvY3VtZW50OwotICB9Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHdzZGxEb2N1bWVudC4KLSAgICogQHBhcmFtIHdzZGxEb2N1bWVudCB0aGUgd3NkbERvY3VtZW50IHRvIHNldC4KLSAgICogQHNlZSAjZ2V0V3NkbERvY3VtZW50Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRXc2RsRG9jdW1lbnQoV1NETERvY3VtZW50IHdzZGxEb2N1bWVudCkgewotICAgICAgdGhpcy53c2RsRG9jdW1lbnQgPSB3c2RsRG9jdW1lbnQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL0Fzc2VydGlvbkZhaWxFeGNlcHRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL0Fzc2VydGlvbkZhaWxFeGNlcHRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGRmNWEyYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9Bc3NlcnRpb25GYWlsRXhjZXB0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXI7Ci0KLS8qKgotICogQmFzZSBFeGNlcHRpb24gZm9yIEFzc2VydGlvbiBGYWlsLgotICogCi0gKiBAYXV0aG9yIGd0dXJyZWxsCi0gKiAqLwotcHVibGljIGNsYXNzIEFzc2VydGlvbkZhaWxFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24KLXsKLQotICAvKioKLQkgKiBDb21tZW50IGZvciA8Y29kZT5zZXJpYWxWZXJzaW9uVUlEPC9jb2RlPgotCSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDMyNTcwMDc2MzU3NDMyNTg5MzNMOwotCi0JLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBBc3NlcnRpb25FeGNlcHRpb24uCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBBc3NlcnRpb25FeGNlcHRpb24uCi0gICAqIEBwYXJhbSBhcmcwIHRoZSBkZXRhaWwgbWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKFN0cmluZyBhcmcwKQotICB7Ci0gICAgc3VwZXIoYXJnMCk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDM0YTUwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL0Fzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplcjsKLQotLyoqCi0gKiBFeGNlcHRpb24gZm9yIEFzc2VydGlvbiBOb3QgQXBwbGljYWJsZS4KLSAqIAotICogQGF1dGhvciBndHVycmVsbAotICovCi1wdWJsaWMgY2xhc3MgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbgotewotCi0gIC8qKgotCSAqIENvbW1lbnQgZm9yIDxjb2RlPnNlcmlhbFZlcnNpb25VSUQ8L2NvZGU+Ci0JICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMzkwNTUyMzc4Mjk5NDExMjU2NEw7Ci0KLQkvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24uCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpCi0gIHsKLSAgICBzdXBlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uLgotICAgKiBAcGFyYW0gYXJnMCB0aGUgZGV0YWlsIG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbihTdHJpbmcgYXJnMCkKLSAgewotICAgIHN1cGVyKGFyZzApOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL0Fzc2VydGlvblBhc3NFeGNlcHRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL0Fzc2VydGlvblBhc3NFeGNlcHRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDk1N2Q2Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9Bc3NlcnRpb25QYXNzRXhjZXB0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXI7Ci0KLS8qKgotICogRXhjZXB0aW9uIGZvciBBc3NlcnRpb24gUGFzcy4KLSAqIAotICogQGF1dGhvciBndHVycmVsbAotICovCi1wdWJsaWMgY2xhc3MgQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbgotewotCi0JLyoqCi0JICogQ29tbWVudCBmb3IgPGNvZGU+c2VyaWFsVmVyc2lvblVJRDwvY29kZT4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAzMjU3Mjg1ODQyMjgzNTQxODEwTDsKLQotCS8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgQXNzZXJ0aW9uUEFzc0V4Y2VwdGlvbi4KLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25QYXNzRXhjZXB0aW9uKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIEFzc2VydGlvblBBc3NFeGNlcHRpb24uCi0gICAqIEBwYXJhbSBhcmcwIHRoZSBkZXRhaWwgbWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25QYXNzRXhjZXB0aW9uKFN0cmluZyBhcmcwKQotICB7Ci0gICAgc3VwZXIoYXJnMCk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvQXNzZXJ0aW9uUmVzdWx0RXhjZXB0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9Bc3NlcnRpb25SZXN1bHRFeGNlcHRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGUwNWFlYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9Bc3NlcnRpb25SZXN1bHRFeGNlcHRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplcjsKLQotLyoqCi0gKiBFeGNlcHRpb24gZm9yIEFzc2VydGlvbiBSZXN1bHQuCi0gKiAKLSAqIEBhdXRob3IgZ3R1cnJlbGwKLSAqLwotcHVibGljIGNsYXNzIEFzc2VydGlvblJlc3VsdEV4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbgotewotCi0gIC8qKgotCSAqIENvbW1lbnQgZm9yIDxjb2RlPnNlcmlhbFZlcnNpb25VSUQ8L2NvZGU+Ci0JICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMzI1NjcyMDY4NDcwMDE1MjYzMkw7Ci0JcHJpdmF0ZSBTdHJpbmcgZGV0YWlsTWVzc2FnZTsKLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBBc3NlcnRpb25yZXN1bHRFeGNlcHRpb24uCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0RXhjZXB0aW9uKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gICAgZGV0YWlsTWVzc2FnZSA9IG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIEFzc2VydGlvblJlc3VsdEV4Y2VwdGlvbi4KLSAgICogQHBhcmFtIGFyZzAgdGhlIGRldGFpbCBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdEV4Y2VwdGlvbihTdHJpbmcgYXJnMCkKLSAgewotICAgIHN1cGVyKGFyZzApOwotICAgIGRldGFpbE1lc3NhZ2UgPSBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBBc3NlcnRpb25SZXN1bHRFeGNlcHRpb24uCi0gICAqIEBwYXJhbSBhcmcwIHRoZSBkZXRhaWwgbWVzc2FnZS4KLSAgICogQHBhcmFtIGFyZzEgIGZ1cnRoZXIgZGV0YWlsZWQgbWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHRFeGNlcHRpb24oU3RyaW5nIGFyZzAsIFN0cmluZyBhcmcxKQotICB7Ci0gICAgc3VwZXIoYXJnMCk7Ci0gICAgZGV0YWlsTWVzc2FnZSA9IGFyZzE7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgZGV0YWlsTWVzc2FnZS4KLSAgICogQHJldHVybiB0aGUgZGV0YWlsTWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RGV0YWlsTWVzc2FnZSgpCi0gIHsKLSAgICByZXR1cm4gZGV0YWlsTWVzc2FnZTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9CYXNpY1Byb2ZpbGVBbmFseXplci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvQmFzaWNQcm9maWxlQW5hbHl6ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmU3YmE3Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9CYXNpY1Byb2ZpbGVBbmFseXplci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwMyBJQk0gQ29ycG9yYXRpb24sIFBhcmFzb2Z0LCBCZWFjb24gSW5mb3JtYXRpb24gVGVjaG5vbG9neSBJbmMuIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gICAgICAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICBQYXJhc29mdCAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICBCZWFjb25JVCAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplcjsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5XU0lUZXN0VG9vbHNQcm9wZXJ0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5Ub29sSW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLlVERElSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLmltcGwuV1NETEVsZW1lbnRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5CYXNlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5XU0RMVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGwuV1NETFZhbGlkYXRvckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnRBcnRpZmFjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydENvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnRXcml0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5pbXBsLkRlZmF1bHRSZXBvcnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5BcnRpZmFjdFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVURESVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLldTSVByb3BlcnRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwuV1NETERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLldTRExVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTERvY3VtZW50Q2FjaGU7Ci1pbXBvcnQgb3JnLnVkZGk0ai5jbGllbnQuVURESVByb3h5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYmluZGluZy5CaW5kaW5nVGVtcGxhdGU7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuQmluZGluZ0RldGFpbDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlRNb2RlbERldGFpbDsKLWltcG9ydCBvcmcudWRkaTRqLnRyYW5zcG9ydC5UcmFuc3BvcnRGYWN0b3J5OwotCi0KLS8qKgotICogQW5hbHl6ZXMgbG9nIGZpbGVzIHRvIGNvbmZpcm0gY29uZm9ybWFuY2UgdG8gYSBwcm9maWxlLgotICoKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIEppbSBDbHVuZQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtCi0gKiBAYXV0aG9yIEdyYWhhbSBUdXJyZWxsCi0gKi8KLXB1YmxpYyBjbGFzcyBCYXNpY1Byb2ZpbGVBbmFseXplciBleHRlbmRzIEFuYWx5emVyCi17Ci0gIC8qKgotICAgKiBUb29sIGluZm9ybWF0aW9uLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVE9PTF9OQU1FID0gIkFuYWx5emVyIjsKLQotICAvKioKLSAgICogV1NETCBkb2N1bWVudCB0byBhbmFseXplLgotICAgKi8KLSAgcHJvdGVjdGVkIFdTRExEb2N1bWVudCB3c2RsRG9jdW1lbnQgPSBudWxsOwotICAvLyBwcml2YXRlIFdTRExWYWxpZGF0b3Igd3NkbFZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQmFzaWMgcHJvZmlsZSBhbmFseXplci4KLSAgICogQHBhcmFtIGFyZ3MgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdW5hYmxlIHRvIGNyZWF0ZSBhIEJhc2ljIHByb2ZpbGUgYW5hbHl6ZXIuCi0gICAqLwotICBwdWJsaWMgQmFzaWNQcm9maWxlQW5hbHl6ZXIoU3RyaW5nW10gYXJncykgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgc3VwZXIoYXJncywgbmV3IFRvb2xJbmZvKFRPT0xfTkFNRSkpOwotICAgIG5ldyBYTUxEb2N1bWVudENhY2hlKCk7Ci0gIH0KLQotICAvKioKLSAgICogQmFzaWMgcHJvZmlsZSBhbmFseXplci4KLSAgICogQHBhcmFtIGFyZ3MgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KLSAgICogQHBhcmFtIHZhbGlkYXRlIGZsYWcgZm9yIGNvbW1hbmQgbGluZSBhcmd1bWVudCB2YWxpZGF0aW9uLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB1bmFibGUgdG8gY3JlYXRlIGEgQmFzaWMgcHJvZmlsZSBhbmFseXplci4KLSAgICovCi0gIHB1YmxpYyBCYXNpY1Byb2ZpbGVBbmFseXplcihTdHJpbmdbXSBhcmdzLCBib29sZWFuIHZhbGlkYXRlKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBzdXBlcihhcmdzLCBuZXcgVG9vbEluZm8oVE9PTF9OQU1FKSwgdmFsaWRhdGUpOwotICAgIG5ldyBYTUxEb2N1bWVudENhY2hlKCk7Ci0gIH0KLQotICAvKioKLSAgICogQmFzaWMgcHJvZmlsZSBhbmFseXplci4KLSAgICogQHBhcmFtIGFuYWx5emVyQ29uZmlnTGlzdCBhIGxpc3Qgb2YgY29uZmlndXJhdGlvbnMgZm9yIHRoZSBhbmFseXplci4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdW5hYmxlIHRvIGNyZWF0ZSBhIEJhc2ljIHByb2ZpbGUgYW5hbHl6ZXIuCi0gICAqLwotICBwdWJsaWMgQmFzaWNQcm9maWxlQW5hbHl6ZXIoTGlzdCBhbmFseXplckNvbmZpZ0xpc3QpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHN1cGVyKGFuYWx5emVyQ29uZmlnTGlzdCwgbmV3IFRvb2xJbmZvKFRPT0xfTkFNRSkpOwotICAgIG5ldyBYTUxEb2N1bWVudENhY2hlKCk7Ci0gIH0KLQotICAvKioKLSAgICogQmFzaWMgcHJvZmlsZSBhbmFseXplci4KLSAgICogQHBhcmFtIGFuYWx5emVyQ29uZmlnTGlzdCBhIGxpc3Qgb2YgY29uZmlndXJhdGlvbnMgZm9yIHRoZSBhbmFseXplci4KLSAgICogQHBhcmFtIHdzZGxVUkkgYSB3c2RsIGRvY3VtZW50IGxvY2F0aW9uLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB1bmFibGUgdG8gY3JlYXRlIGEgQmFzaWMgcHJvZmlsZSBhbmFseXplci4KLSAgICovCi0gIHB1YmxpYyBCYXNpY1Byb2ZpbGVBbmFseXplcihMaXN0IGFuYWx5emVyQ29uZmlnTGlzdCwgU3RyaW5nIHdzZGxVUkkpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgc3VwZXIoYW5hbHl6ZXJDb25maWdMaXN0LCBuZXcgVG9vbEluZm8oVE9PTF9OQU1FKSk7Ci0gICAgbmV3IFhNTERvY3VtZW50Q2FjaGUoKTsKLSAgICAKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBHZXQgdGhlIFdTREwgZG9jdW1lbnQKLSAgICAgIGlmICh3c2RsVVJJICE9IG51bGwpCi0gICAgICAgIHRoaXMud3NkbERvY3VtZW50ID0gbmV3IFdTRExEb2N1bWVudCh3c2RsVVJJKTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoV1NETEV4Y2VwdGlvbiB3ZSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKHdlLmdldE1lc3NhZ2UoKSwgd2UpOwotICAgIH0KLQotICB9Ci0gIAotICBwcml2YXRlIFdTRExEb2N1bWVudCBnZXRXc2RsRnJvbVVkZGkoKSB7Ci0gICAgICBXU0RMRG9jdW1lbnQgd3NkbERvYyA9IG51bGw7Ci0gICAgICB0cnkgewotICAgICAgICAgIFVERElQcm94eSB1ZGRpUHJveHkgPSBuZXcgVURESVByb3h5KCk7Ci0gICAgICAgICAgVURESVJlZmVyZW5jZSB1ZGRpUmVmZXJlbmNlID0gZ2V0QW5hbHl6ZXJDb25maWcoKS5nZXRVRERJUmVmZXJlbmNlKCk7Ci0gICAgICAgICAgdWRkaVByb3h5LnNldElucXVpcnlVUkwodWRkaVJlZmVyZW5jZS5nZXRJbnF1aXJ5VVJMKCkpOwotICAgICAgICAgIFRNb2RlbCB0TW9kZWwgPSBudWxsOwotCi0gICAgICAgICAgaWYgKHVkZGlSZWZlcmVuY2UuZ2V0S2V5VHlwZSgpLmVxdWFscyhVRERJUmVmZXJlbmNlLkJJTkRJTkdfS0VZKSkgewotICAgICAgICAgICAgICBCaW5kaW5nRGV0YWlsIGJpbmRpbmdEZXRhaWwgPSB1ZGRpUHJveHkuZ2V0X2JpbmRpbmdEZXRhaWwoCi0gICAgICAgICAgICAgICAgICAgICAgdWRkaVJlZmVyZW5jZS5nZXRLZXkoKSk7Ci0gICAgICAgICAgICAgIEJpbmRpbmdUZW1wbGF0ZSBiaW5kaW5nVGVtcGxhdGUgPSAoQmluZGluZ1RlbXBsYXRlKSBiaW5kaW5nRGV0YWlsLgotICAgICAgICAgICAgICAgICAgICAgIGdldEJpbmRpbmdUZW1wbGF0ZVZlY3RvcigpLmVsZW1lbnRBdCgwKTsKLSAgICAgICAgICAgICAgdE1vZGVsID0gVURESVV0aWxzLmZpbmRUTW9kZWwodWRkaVByb3h5LCBiaW5kaW5nVGVtcGxhdGUsIGZhbHNlKTsKLSAgICAgICAgICB9IGVsc2UgeyAvLyBVRERJUmVmZXJlbmNlLlRNT0RFTF9LRVkKLSAgICAgICAgICAgICAgVE1vZGVsRGV0YWlsIHRNb2RlbERldGFpbCA9IHVkZGlQcm94eS5nZXRfdE1vZGVsRGV0YWlsKAotICAgICAgICAgICAgICAgICAgICAgICAgICB1ZGRpUmVmZXJlbmNlLmdldEtleSgpKTsKLSAgICAgICAgICAgICAgdE1vZGVsID0gKFRNb2RlbCkgdE1vZGVsRGV0YWlsLmdldFRNb2RlbFZlY3RvcigpLmVsZW1lbnRBdCgwKTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBTdHJpbmcgb3ZlcnZpZXdVUkwgPSBVRERJVXRpbHMuZ2V0T3ZlcnZpZXdVUkwodE1vZGVsKTsKLSAgICAgICAgICBTdHJpbmcgd3NkbFVSSSA9IFVERElVdGlscy5nZXRXU0RMTG9jYXRpb24ob3ZlcnZpZXdVUkwpOwotICAgICAgICAgIHdzZGxEb2MgPSBuZXcgV1NETERvY3VtZW50KHdzZGxVUkkpOwotCi0gICAgICAgICAgLyogVE9ETzogIEkgcmVmYWN0b3JlZCB0aGlzIGNvZGUgZnJvbSBCU1AzMDAxIGJ1dCBJJ20gbm90IHN1cmUgdGhhdAotICAgICAgICAgICAqIGl0J3MgY29ycmVjdC4gIFRoaXMgb3ZlcnJpZGVzIHRoZSA8d3NkbEVsZW1lbnQ+IGNoaWxkIG9mCi0gICAgICAgICAgICogPHVkZGlSZWZlcmVuY2U+IGZyb20gdGhlIGNvbmZpZyBmaWxlLCB3aGljaCBuZXZlciBnZXRzIHVzZWQuCi0gICAgICAgICAgICovCi0gICAgICAgICAgLy8gSWYgdGhlIHdzZGxFbGVtZW50IGRvZXMgbm90IGV4aXN0LCB0aGVuIHNldCBpdAotICAgICAgICAgIGlmIChhbmFseXplckNvbnRleHQuZ2V0U2VydmljZVJlZmVyZW5jZSgpLmdldFdTRExFbGVtZW50KCkgPT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEJpbmRpbmcgYmluZGluZyA9IFVERElVdGlscy5nZXRCaW5kaW5nKG92ZXJ2aWV3VVJMLCB3c2RsRG9jKTsKLSAgICAgICAgICAgICAgU3RyaW5nIGJpbmRpbmdOYW1lID0KLSAgICAgICAgICAgICAgICAgIGJpbmRpbmcgPT0gbnVsbCA/IG51bGwgOiBiaW5kaW5nLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9Ci0gICAgICAgICAgICAgICAgICBiaW5kaW5nID09IG51bGwgPyBudWxsIDogYmluZGluZy5nZXRRTmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpOwotCi0gICAgICAgICAgICAvLyBHZXQgV1NETCBiaW5kaW5nIGZyb20gdGhlIG92ZXJ2aWV3VVJMIGFuZCBzZXQgaW4gYW5hbHl6ZXJDb250ZXh0Ci0gICAgICAgICAgICBXU0RMRWxlbWVudCB3c2RsRWxlbWVudCA9IG5ldyBXU0RMRWxlbWVudEltcGwoKTsKLSAgICAgICAgICAgIHdzZGxFbGVtZW50LnNldE5hbWUoYmluZGluZ05hbWUpOwotICAgICAgICAgICAgd3NkbEVsZW1lbnQuc2V0TmFtZXNwYWNlKG5hbWVzcGFjZSk7Ci0gICAgICAgICAgICB3c2RsRWxlbWVudC5zZXRUeXBlKFdTRExWYWxpZGF0b3IuVFlQRV9ERVNDUklQVElPTl9CSU5ESU5HKTsKLSAgICAgICAgICAgIGFuYWx5emVyQ29udGV4dC5nZXRTZXJ2aWNlUmVmZXJlbmNlKCkuc2V0V1NETEVsZW1lbnQod3NkbEVsZW1lbnQpOwotICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gd3NkbERvYzsKLQotICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgLyogSWYgdGhlIHdzZGxEb2MgaXMgc2V0IGF0IHRoZSBwb2ludCBvZiB0aGUgZXhjZXB0aW9uLCByZXR1cm4gaXQ7Ci0gICAgICAgICAqIG90aGVyd2lzZSByZXR1cm4gbnVsbC4gKi8KLSAgICAgICAgcmV0dXJuIHdzZGxEb2M7Ci0gICAgfQotICB9Ci0gIAotICAKLSAgLyoqCi0gICAqIFByb2Nlc3MgYWxsIGNvbmZvcm1hbmNlIHZhbGlkYXRpb24gZnVuY3Rpb25zLgotICAgKiBAcmV0dXJuIHN0YXR1cyBjb2RlLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBjb25mb3JtYW5jZSB2YWxpZGF0aW9uIHByb2Nlc3MgZmFpbGVkLgotICAgKi8KLSAgcHVibGljIGludCB2YWxpZGF0ZUNvbmZvcm1hbmNlKCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgaW50IHN0YXR1c0NvZGUgPSAwOwotCi0gICAgUmVwb3J0IHJlcG9ydCA9IG51bGw7Ci0gICAgUmVwb3J0QXJ0aWZhY3QgcmVwb3J0QXJ0aWZhY3QgPSBudWxsOwotCi0gICAgLy8gU2V0IHVwIGluaXRpYWwgYW5hbHl6ZXIgY29udGV4dCBiYXNlZCBvbiBlbnRyaWVzIGluIHRoZSBjb25maWcgZmlsZQotICAgIHRoaXMuYW5hbHl6ZXJDb250ZXh0ID0KLSAgICAgIG5ldyBBbmFseXplckNvbnRleHQobmV3IFNlcnZpY2VSZWZlcmVuY2UoZ2V0QW5hbHl6ZXJDb25maWcoKSkpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgdGhpcy5wcm9maWxlQXNzZXJ0aW9ucyA9IFdTSVRlc3RUb29sc1Byb3BlcnRpZXMuZ2V0UHJvZmlsZUFzc2VydGlvbnMoCi0gICAgICAgICAgICAgICAgZ2V0QW5hbHl6ZXJDb25maWcoKS5nZXRUZXN0QXNzZXJ0aW9uc0RvY3VtZW50TG9jYXRpb24oKSk7Ci0KLSAgICAgIGlmICh0aGlzLnByb2ZpbGVBc3NlcnRpb25zID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBXU0lFeGNlcHRpb24obWVzc2FnZUxpc3QuZ2V0TWVzc2FnZSgiY29uZmlnMjAiLAotICAgICAgIAkJICAgIlRoZSBXUy1JIFRlc3QgQXNzZXJ0aW9uIERvY3VtZW50IChUQUQpZG9jdW1lbnQgd2FzIGVpdGhlciBub3QgZm91bmQgb3IgY291bGQgbm90IGJlIHByb2Nlc3NlZC4iKSk7ICAKLSAgICAgIH0JCi0KLSAgICAgIC8vIENyZWF0ZSByZXBvcnQgZnJvbSBkb2N1bWVudCBmYWN0b3J5Ci0gICAgICByZXBvcnQgPSBkb2N1bWVudEZhY3RvcnkubmV3UmVwb3J0KCk7Ci0gICAgICByZXBvcnQuc2V0TG9jYXRpb24oZ2V0QW5hbHl6ZXJDb25maWcoKS5nZXRSZXBvcnRMb2NhdGlvbigpKTsKLQotICAgICAgLy8gQ3JlYXRlIHJlcG9ydCBjb250ZXh0Ci0gICAgICBSZXBvcnRDb250ZXh0IHJlcG9ydENvbnRleHQgPQotICAgICAgICBuZXcgUmVwb3J0Q29udGV4dCgKLSAgICAgICAgICBXU0lDb25zdGFudHMuREVGQVVMVF9SRVBPUlRfVElUTEUsCi0gICAgICAgICAgcHJvZmlsZUFzc2VydGlvbnMsCi0gICAgICAgICAgdGhpcyk7Ci0gICAgICByZXBvcnQuc2V0UmVwb3J0Q29udGV4dChyZXBvcnRDb250ZXh0KTsKLQotICAgICAgLy8gQ3JlYXRlIHJlcG9ydCB3cml0ZXIKLSAgICAgIFJlcG9ydFdyaXRlciByZXBvcnRXcml0ZXIgPSBkb2N1bWVudEZhY3RvcnkubmV3UmVwb3J0V3JpdGVyKCk7Ci0gICAgICAvLyBJMThOOiAyMDAzLjAyLjI2IG1vZGlmaWVkIGJ5IEsuTmFrYWdvbWVAQmVhY29uSVQgCi0gICAgICAvL3JlcG9ydFdyaXRlci5zZXRXcml0ZXIobmV3IEZpbGVXcml0ZXIoYW5hbHl6ZXJDb25maWcuZ2V0UmVwb3J0TG9jYXRpb24oKSkpOwotICAgICAgcmVwb3J0V3JpdGVyLnNldFdyaXRlcihnZXRBbmFseXplckNvbmZpZygpLmdldFJlcG9ydExvY2F0aW9uKCkpOwotCi0gICAgICAvLyBDcmVhdGUgcmVwb3J0ZXIKLSAgICAgIHRoaXMucmVwb3J0ZXIgPSBuZXcgRGVmYXVsdFJlcG9ydGVyKHJlcG9ydCwgcmVwb3J0V3JpdGVyKTsKLQotICAgICAgLy8gZmV0Y2ggV1NETCBpZiBub3Qgc2V0IGluIGNvbnN0cnVjdG9yCi0gICAgICAvLyBGaXJzdCwgYXR0ZW1wdCB0byBnZXQgdGhlIFdTREwgVVJJIGZyb20gYSBVRERJIHRNb2RlbAotICAgICAgaWYgKCh3c2RsRG9jdW1lbnQgPT0gbnVsbCkgJiYgKGdldEFuYWx5emVyQ29uZmlnKCkuaXNVRERJUmVmZXJlbmNlU2V0KCkpKQotICAgICAgICAgICAgICB3c2RsRG9jdW1lbnQgPSBnZXRXc2RsRnJvbVVkZGkoKTsKLQotICAgICAgLyogTmV4dCwgdHJ5IHRvIHVzZSB0aGUgV1NETCBzZXR0aW5ncyBmcm9tIHRoZSBjb25maWcgZmlsZS4gIElmIHdlIGNhbid0Ci0gICAgICAgKiBmZXRjaCB0aGF0IFdTREwsIGFuZCB0aGUgY29uZmlnIGZpbGUgaXMgc2V0IHVwIHRvIHRlc3QgYSBXU0RMLCB0aGVuIHRoZQotICAgICAgICogdmFsaWRhdG9yIGZhaWxzIGhlcmUuICovCi0gICAgICBpZiAoKHdzZGxEb2N1bWVudCA9PSBudWxsKSAmJiAoZ2V0QW5hbHl6ZXJDb25maWcoKS5pc1dTRExSZWZlcmVuY2VTZXQoKSkpCi0gICAgICB7Ci0gICAgICAgICAgd3NkbERvY3VtZW50ID0gbmV3IFdTRExEb2N1bWVudChnZXRBbmFseXplckNvbmZpZygpLgotICAgICAgICAgICAgICAgICAgZ2V0V1NETExvY2F0aW9uKCkpOwotCi0gICAgICAgICAgaWYgKHdzZGxEb2N1bWVudCA9PSBudWxsKQotICAgICAgICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKG1lc3NhZ2VMaXN0LmdldE1lc3NhZ2UoImNvbmZpZzA1IiwKLSAgICAgICAgICAgICAgICAgICAgICAiV1NETCBkb2N1bWVudCB3YXMgZWl0aGVyIG5vdCBmb3VuZCBvciBjb3VsZCBub3QgYmUgIiArIAotICAgICAgICAgICAgICAgICAgICAgICJwcm9jZXNzZWQuIikpOwotICAgICAgfQotICAgICAgCi0gICAgICAvKgotICAgICAgICogT25seSB2YWxpZGF0ZSBtZXNzYWdlcyBhZ2FpbnN0IGEgd3NkbCBkb2N1bWVudCBpZiB0aGUgd3NkbCBkb2N1bWVudAotICAgICAgICogZG9lcyBub3QgY29udGFpbiBzb2FwIDEuMiBiaW5kaW5ncy4gCi0gICAgICAgKi8KLQkgIGlmIChXU0RMVXRpbHMuaXNTT0FQMTJXU0RMKHdzZGxEb2N1bWVudCkgJiYgZ2V0QW5hbHl6ZXJDb25maWcoKS5nZXRMb2dMb2NhdGlvbigpICE9IG51bGwpCi0JCSAgZ2V0QW5hbHl6ZXJDb25maWcoKS5zZXRXU0RMUmVmZXJlbmNlKG51bGwpOwotCSAgZWxzZQotCQkgIGFuYWx5emVyQ29udGV4dC5zZXRXc2RsRG9jdW1lbnQod3NkbERvY3VtZW50KTsgIAotCi0gICAgICAvLyBTdGFydCB3cml0aW5nIHJlcG9ydAotICAgICAgdGhpcy5yZXBvcnRlci5zdGFydFJlcG9ydCgpOwotCi0gICAgICAvLyBXYWxrIHRocm91Z2ggdGhlIGFydGlmYWN0IGVsZW1lbnRzIGZyb20gdGhlIFRBRCwgdmFsaWRhdGluZyBlYWNoIG9uZQotICAgICAgcHJvZmlsZUFzc2VydGlvbnMuZ2V0QXJ0aWZhY3RMaXN0KCkua2V5U2V0KCkuaXRlcmF0b3IoKTsKLSAgICAgIGZvciAoSXRlcmF0b3IgaSA9IHByb2ZpbGVBc3NlcnRpb25zLmdldEFydGlmYWN0TGlzdCgpLmtleVNldCgpLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICAgIGkuaGFzTmV4dCgpOyApIHsKLSAgICAgICAgICBTdHJpbmcgYXJ0aWZhY3RUeXBlID0gKFN0cmluZykgaS5uZXh0KCk7Ci0gICAgICAgICAgLy8gU2V0IGN1cnJlbnQgYXJ0aWZhY3QKLSAgICAgICAgICByZXBvcnRBcnRpZmFjdCA9IHNldEN1cnJlbnRBcnRpZmFjdChBcnRpZmFjdFR5cGUuZ2V0QXJ0aWZhY3RUeXBlKAotICAgICAgICAgICAgICAgICAgYXJ0aWZhY3RUeXBlKSk7Ci0gICAgICAgICAgdmFsaWRhdGUocmVwb3J0QXJ0aWZhY3QsIGZhY3RvcnkuZ2V0VmFsaWRhdG9yRm9yQXJ0aWZhY3QoCi0gICAgICAgICAgICAgICAgICBhcnRpZmFjdFR5cGUpKTsKLSAgICAgICAgICB0aGlzLnJlcG9ydGVyLmVuZEN1cnJlbnRBcnRpZmFjdCgpOwotICAgICAgfQotCi0gICAgICAvLyBGaW5pc2ggdGhlIGNvbmZvcm1hbmNlIHJlcG9ydAotICAgICAgcmVwb3J0ZXIuZmluaXNoUmVwb3J0KCk7Ci0gICAgfQotCi0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgICAgU3RyaW5nIG1lc3NhZ2UgPQotICAgICAgICBtZXNzYWdlTGlzdC5nZXRNZXNzYWdlKAotICAgICAgICAgICJlcnJvcjAzIiwKLSAgICAgICAgICAiVGhlIGNvbmZvcm1hbmNlIHZhbGlkYXRpb24gcHJvY2VzcyBmYWlsZWQuIik7Ci0KLSAgICAgIC8vIEZpbmlzaCByZXBvcnQKLSAgICAgIGlmIChyZXBvcnRlciAhPSBudWxsKQotICAgICAgewotICAgICAgICBwdy5wcmludGxuKG1lc3NhZ2UpOwotICAgICAgICBwdy5wcmludGxuKAotICAgICAgICAgIG1lc3NhZ2VMaXN0LmdldE1lc3NhZ2UoImV4Y2VwdGlvbjAxIiwgIkV4Y2VwdGlvbjogIikKLSAgICAgICAgICAgICsgZS5nZXRDbGFzcygpLmdldE5hbWUoKSk7Ci0gICAgICAgIGUucHJpbnRTdGFja1RyYWNlKHB3KTsKLSAgICAgICAgcmVwb3J0ZXIuZmluaXNoUmVwb3J0V2l0aEVycm9yKHN3LnRvU3RyaW5nKCkpOwotICAgICAgfQotCi0gICAgICBpZiAoZSBpbnN0YW5jZW9mIFdTSUV4Y2VwdGlvbikKLSAgICAgICAgdGhyb3cgKFdTSUV4Y2VwdGlvbikgZTsKLSAgICAgIGVsc2UKLSAgICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbihtZXNzYWdlLCBlKTsKLSAgICB9Ci0KLSAgICBpZiAocmVwb3J0ICE9IG51bGwpCi0gICAgewotICAgICAgc3RhdHVzQ29kZSA9Ci0gICAgICAgIChyZXBvcnQuZ2V0U3VtbWFyeVJlc3VsdCgpLmVxdWFscyhBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRCkKLSAgICAgICAgICA/IDAKLSAgICAgICAgICA6IDEpOwotICAgIH0KLQotICAgIHJldHVybiBzdGF0dXNDb2RlOwotICB9Ci0KLSAgLyoqCi0gICAqIFJ1biB0ZXN0IGFzc2VydGlvbnMuCi0gICAqLwotICBwcml2YXRlIHZvaWQgdmFsaWRhdGUoUmVwb3J0QXJ0aWZhY3QgcmVwb3J0QXJ0aWZhY3QsIEJhc2VWYWxpZGF0b3IgdmFsaWRhdG9yKQotICAgICAgICAgIHRocm93cyBXU0lFeGNlcHRpb24gCi0gIHsKLSAgICBpZiAodmFsaWRhdG9yIGluc3RhbmNlb2YgV1NETFZhbGlkYXRvckltcGwpCi0JewotICAgIAkoKFdTRExWYWxpZGF0b3JJbXBsKXZhbGlkYXRvcikuaW5pdChhbmFseXplckNvbnRleHQsIHByb2ZpbGVBc3NlcnRpb25zLCByZXBvcnRBcnRpZmFjdCwgZ2V0QW5hbHl6ZXJDb25maWcoKSwgcmVwb3J0ZXIsCi0gICAgCQkJZ2V0QW5hbHl6ZXJDb25maWdJbmRleCgpID09IDApOwotCX0KLSAgICBlbHNlCi0gICAgewotICAgICAgdmFsaWRhdG9yLmluaXQoYW5hbHl6ZXJDb250ZXh0LCBwcm9maWxlQXNzZXJ0aW9ucywgcmVwb3J0QXJ0aWZhY3QsIGdldEFuYWx5emVyQ29uZmlnKCksIHJlcG9ydGVyKTsKLSAgICB9Ci0KLSAgICBpZiAodmFsaWRhdG9yLnJ1blRlc3RzKCkpIHsKLSAgICAgICAgdmFsaWRhdG9yLnZhbGlkYXRlQXJ0aWZhY3QoKTsKLSAgICAgICAgdmFsaWRhdG9yLmNsZWFudXAoKTsKLSAgICB9IAotICAgIGVsc2UgCi0gICAgewotICAgICAgdmFsaWRhdG9yLnNldEFsbE1pc3NpbmdJbnB1dCgpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBDb21tYW5kIGxpbmUgaW50ZXJmYWNlIGZvciB0aGUgYW5hbHl6ZXIgdG9vbC4KLSAgICogQHBhcmFtIGFyZ3MgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KLSAgICogQHRocm93cyBJT0V4Y2VwdGlvbiBpZiBJTyBwcm9ibGVtcyBvY2N1ci4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgaW50IHN0YXR1c0NvZGUgPSAwOwotICAgIEFuYWx5emVyIGFuYWx5emVyID0gbnVsbDsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIFNldCBkb2N1bWVudCBidWlsZGVyIGZhY3RvcnkgY2xhc3MKLSAgICAgIFN5c3RlbS5zZXRQcm9wZXJ0eSgKLSAgICAgICAgV1NJUHJvcGVydGllcy5QUk9QX0pBWFBfRE9DVU1FTlRfRkFDVE9SWSwKLSAgICAgICAgV1NJUHJvcGVydGllcy5nZXRQcm9wZXJ0eShXU0lQcm9wZXJ0aWVzLlBST1BfSkFYUF9ET0NVTUVOVF9GQUNUT1JZKSk7Ci0KLSAgICAgIC8vIFNldCB0aGUgc3lzdGVtIHByb3BlcnR5IGZvciBVRERJNEogdHJhbnNwb3J0Ci0gICAgICBTeXN0ZW0uc2V0UHJvcGVydHkoCi0gICAgICAgIFRyYW5zcG9ydEZhY3RvcnkuUFJPUEVSVFlfTkFNRSwKLSAgICAgICAgV1NJUHJvcGVydGllcy5nZXRQcm9wZXJ0eShUcmFuc3BvcnRGYWN0b3J5LlBST1BFUlRZX05BTUUpKTsKLQotICAgICAgLy8gQ3JlYXRlIHRoZSBhbmFseXplciBvYmplY3QKLSAgICAgIGFuYWx5emVyID0gbmV3IEJhc2ljUHJvZmlsZUFuYWx5emVyKGFyZ3MpOwotCi0gICAgICAvLyBIYXZlIGl0IHByb2Nlc3MgdGhlIGNvbmZvcm1hbmNlIHZhbGlkYXRpb24gZnVuY3Rpb25zCi0gICAgICBzdGF0dXNDb2RlID0gYW5hbHl6ZXIudmFsaWRhdGVDb25mb3JtYW5jZSgpOwotCi0gICAgICAvLyBEaXNwbGF5IG1lc3NhZ2UKLSAgICAgIGFuYWx5emVyLnByaW50TWVzc2FnZSgKLSAgICAgICAgImNyZWF0ZWQwMSIsCi0gICAgICAgIG51bGwsCi0gICAgICAgICJDb25mb3JtYW5jZSByZXBvcnQgaGFzIGJlZW4gY3JlYXRlZC4iKTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgc3RhdHVzQ29kZSA9IDE7Ci0KLSAgICAgIFN0cmluZyBtZXNzYWdlSUQ7Ci0gICAgICBTdHJpbmcgZGVmYXVsdE1lc3NhZ2U7Ci0gICAgICBTdHJpbmcgbWVzc2FnZURhdGE7Ci0KLSAgICAgIGlmICgoZSBpbnN0YW5jZW9mIFdTSUZpbGVOb3RGb3VuZEV4Y2VwdGlvbikKLSAgICAgICAgfHwgKGUgaW5zdGFuY2VvZiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24pKQotICAgICAgewotICAgICAgICAvL3ByaW50U3RhY2tUcmFjZSA9IGZhbHNlOwotICAgICAgICBtZXNzYWdlSUQgPSAiZXJyb3IwMSI7Ci0gICAgICAgIGRlZmF1bHRNZXNzYWdlID0gIkFuYWx5emVyIEVycm9yOiI7Ci0gICAgICAgIG1lc3NhZ2VEYXRhID0gZS5nZXRNZXNzYWdlKCk7Ci0gICAgICB9Ci0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy9wcmludFN0YWNrVHJhY2UgPSB0cnVlOwotICAgICAgICBtZXNzYWdlSUQgPSAiZXJyb3IwMiI7Ci0gICAgICAgIGRlZmF1bHRNZXNzYWdlID0gIkFuYWx5emVyIFN0b3BwZWQgQnkgRXhjZXB0aW9uOiI7Ci0gICAgICAgIG1lc3NhZ2VEYXRhID0gZS50b1N0cmluZygpOwotICAgICAgfQotCi0gICAgICBpZiAoYW5hbHl6ZXIgIT0gbnVsbCkKLSAgICAgICAgYW5hbHl6ZXIucHJpbnRNZXNzYWdlKG1lc3NhZ2VJRCwgbWVzc2FnZURhdGEsIGRlZmF1bHRNZXNzYWdlKTsKLSAgICAgIGVsc2UKLSAgICAgICAgQW5hbHl6ZXIuc3RhdGljUHJpbnRNZXNzYWdlKG1lc3NhZ2VJRCwgbWVzc2FnZURhdGEsIGRlZmF1bHRNZXNzYWdlKTsKLQotICAgICAgaWYgKGFuYWx5emVyICE9IG51bGwKLSAgICAgICAgJiYgYW5hbHl6ZXIuZ2V0QW5hbHl6ZXJDb25maWcoKSAhPSBudWxsCi0gICAgICAgICYmIGFuYWx5emVyLmdldEFuYWx5emVyQ29uZmlnKCkuZ2V0VmVyYm9zZU9wdGlvbigpKQotICAgICAgICBkdW1wKGUpOwotICAgIH0KLQotICAgIC8vIEV4aXQKLSAgICBTeXN0ZW0uZXhpdChzdGF0dXNDb2RlKTsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQgY3VycmVudCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIGFydGlmYWN0VHlwZSBhbiBBcnRpZmFjdFR5cGUgb2JqZWN0LgotICAgKiBAcmV0dXJuIGEgUmVwb3J0QXJ0aWZhY3Qgb2JqZWN0LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtcyBjcmVhdGluZyByZXBvcnQgYXJ0aWZhY3QuCi0gICAqLwotICBwcm90ZWN0ZWQgUmVwb3J0QXJ0aWZhY3Qgc2V0Q3VycmVudEFydGlmYWN0KEFydGlmYWN0VHlwZSBhcnRpZmFjdFR5cGUpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gQ3JlYXRlIGFydGlmYWN0Ci0gICAgUmVwb3J0QXJ0aWZhY3QgcmVwb3J0QXJ0aWZhY3QgPSByZXBvcnRlci5jcmVhdGVBcnRpZmFjdCgpOwotICAgIHJlcG9ydEFydGlmYWN0LnNldFR5cGUoYXJ0aWZhY3RUeXBlKTsKLQotICAgIC8vIEFkZCBhcnRpZmFjdCB0byByZXBvcnQKLSAgICB0aGlzLnJlcG9ydGVyLnNldEN1cnJlbnRBcnRpZmFjdChyZXBvcnRBcnRpZmFjdCk7Ci0KLSAgICByZXR1cm4gcmVwb3J0QXJ0aWZhY3Q7Ci0gIH0KLQotICAvKioKLSAgICogUHJpbnQgZXhjZXB0aW9uLgotICAgKiBAcGFyYW0gdCBhIFRocm93YWJsZSBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgZHVtcChUaHJvd2FibGUgdCkKLSAgewotICAgIHdoaWxlICh0IGluc3RhbmNlb2YgV1NJRXhjZXB0aW9uKQotICAgIHsKLSAgICAgIFRocm93YWJsZSBuZXN0ZWQgPSAoKFdTSUV4Y2VwdGlvbikgdCkuZ2V0VGFyZ2V0RXhjZXB0aW9uKCk7Ci0gICAgICBpZiAobmVzdGVkID09IG51bGwpCi0gICAgICAgIGJyZWFrOwotICAgICAgZWxzZQotICAgICAgICB0ID0gbmVzdGVkOwotICAgIH0KLSAgICB0LnByaW50U3RhY2tUcmFjZSgpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9DYW5kaWRhdGVJbmZvLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9DYW5kaWRhdGVJbmZvLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmZTgyOGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvQ2FuZGlkYXRlSW5mby5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTIyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplcjsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5GYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLkltcG9ydDsKLWltcG9ydCBqYXZheC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgamF2YXgud3NkbC5TZXJ2aWNlOwotaW1wb3J0IGphdmF4LndzZGwuVHlwZXM7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBBZGRyZXNzOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy51dGlsLlVSSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwuV1NETERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLldTRExVdGlsczsKLQotLyoqCi0gKiBQcm92aWRlIGEgbm9ybWFsaXplZCBzZXQgb2YgZGF0YSByZWxhdGluZyB0byB0aGUgc2VydmljZSB1bmRlciB0ZXN0LgotICogRm9yIGV4YW1wbGUsIHdpdGggZW5kcG9pbnQgY29ycmVsYXRpb24gYW5kIHdzZGxFbGVtZW50IG9mIHR5cGUgIm1lc3NhZ2UiIAotICogdGhlcmUgY291bGQgYmUgbXVsdGlwbGUgbWF0Y2hlcyBmb3IgbW9zdCBlbGVtZW50IHR5cGVzIGluY2x1ZGluZyBXU0RMIFNlcnZpY2UuCi0gKiAodGhvdWdoIHRoZSBvYmplY3RpdmUgaXMgdG8gZW5zdXJlIGZpbHRlcmluZyB0byBhIHNpbmdsZSBzZXJ2aWNlIGlmIGF0IGFsbCBwb3NzaWJsZSkuIAotICogCi0gKiBAYXV0aG9yIGd0dXJyZWxsCi0gKi8KLQotLy8gQUREOmNvdWxkIGJlIGJldHRlciBhcyBhIHNpbmdsZXRvbj8KLQotcHVibGljIGNsYXNzIENhbmRpZGF0ZUluZm8KLXsKLQotICAvLyBOb3JtYWxpemVkIGZpeGVkIGNvcnJlbGF0aW9uIGRhdGEgZGVyaXZlZCBmcm9tIHRoZSBhbmFseXplciBjb25maWcgYW5kIHRoZSB3c2RsLAotICAvLyByZXByZXNlbnRpbmcgd2hhdCB3ZSBrbm93IGFib3V0IHRoZSBzZXJ2aWNlIGZyb20gdGhlc2UgdHdvIHNvdXJjZXMuICAKLSAgcHJpdmF0ZSBEZWZpbml0aW9uW10gZGVmaW5pdGlvbnMgPSBudWxsOwotCi0gIHByaXZhdGUgSW1wb3J0W10gaW1wb3J0cyA9IG51bGw7Ci0gIHByaXZhdGUgVHlwZXNbXSB0eXBlcyA9IG51bGw7Ci0KLSAgcHJpdmF0ZSBNZXNzYWdlW10gbWVzc2FnZXMgPSBudWxsOwotICBwcml2YXRlIE9wZXJhdGlvbltdIG9wZXJhdGlvbnMgPSBudWxsOwotICBwcml2YXRlIFBvcnRUeXBlW10gcG9ydFR5cGVzID0gbnVsbDsKLSAgcHJpdmF0ZSBCaW5kaW5nW10gYmluZGluZ3MgPSBudWxsOwotICBwcml2YXRlIFBvcnRbXSBwb3J0cyA9IG51bGw7Ci0KLSAgcHJpdmF0ZSBVUklbXSBlbmRQb2ludHMgPSBudWxsOyAvLyBsaXN0IG9idGFpbmFibGUgZnJvbSBhIHBvcnQKLQotICBwcml2YXRlIFdTRExEb2N1bWVudCB3c2RsRG9jdW1lbnQ7IC8vIHJlZmVyZW5jZSBwcm9iYWJseSBub3QgZGVzaXJhYmxlIGhlcmUKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIENhbmRpZGF0ZUluZm8uCi0gICAqIEV4dHJhY3Qgbm9ybWFsaXNlZCBlbnRyeSBkYXRhIGZyb20gd3NkbCwgYWNjb3JkaW5nIHRvIGNvbmZpZyB3c2RsRWxlbWVudCAmIHNlcnZpY2VMb2NhdGlvbgotICAgKiBAcGFyYW0gc2VydmljZVJlZmVyZW5jZSBhIFNlcnZpY2VSZWZlcmVuY2Ugb2JqZWN0LgotICAgKiBAcGFyYW0gd3NkbERvY3VtZW50IGEgV1NETCBkb2N1bWVudC4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbXMgb2NjdXIgY3JlYXRpbmcgQ2FuZGlkYXRlSW5mbyBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgQ2FuZGlkYXRlSW5mbygKLSAgICBTZXJ2aWNlUmVmZXJlbmNlIHNlcnZpY2VSZWZlcmVuY2UsCi0gICAgV1NETERvY3VtZW50IHdzZGxEb2N1bWVudCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIC8vIEFERDogY2hlY2sgZm9yIG51bGwgZG9jdW1lbnQ/Ci0KLSAgICBXU0RMRWxlbWVudCB3c2RsRWxlbWVudCA9IHNlcnZpY2VSZWZlcmVuY2UuZ2V0V1NETEVsZW1lbnQoKTsKLQotICAgIHRoaXMud3NkbERvY3VtZW50ID0gd3NkbERvY3VtZW50OwotCi0gICAgLyoKLSAgICAgKiBHZW5lcmFsaXNlZCBmaWVsZHMgaW5kZXBlbmRlbnQgb2Ygd3NkbEVsZW1lbnQ6Ci0gICAgICovCi0gICAgLy8gQUREOiBjaGVjayB3aGV0aGVyIHRoZXNlIG5lZWQgdG8gYmUgZWl0aGVyIGV4cGFuZGVkIG9yIGZpbHRlcmVkIGRvd24uCi0gICAgLy8gQXNzdW1lIFdTREw0SiBwdWxscyBpbnQgdGhlIGZ1bGwgdHJlZSBhdCB0aGUgcm9vdCBkb2N1bWVudCBmb3Igbm93CQkKLSAgICAvL3RoaXMuaW1wb3J0cyA9IHdzZGxEb2N1bWVudC5nZXRJbXBvcnRzKCk7Ci0KLSAgICAvLyAuLi4gb3IgaWYgb25seSBkb3duIHRvIGZpcnN0IGxldmVsLi4uLgotICAgIHRoaXMuaW1wb3J0cyA9Ci0gICAgICAoSW1wb3J0W10pIGdldEFsbEltcG9ydHMoCi0gICAgICAgIHdzZGxEb2N1bWVudC5nZXREZWZpbml0aW9ucygpKS50b0FycmF5KG5ldyBJbXBvcnRbXSB7Ci0gICAgfSk7Ci0KLSAgICAvKiBEZWZpbml0aW9ucy4gCi0gICAgICogTm90ZSB0aGF0IHRoZSB0aGUgZmlyc3QgYXJyYXkgZWxlbWVudCBpcyBmb3IgdGhlIHJvb3QgZG9jCi0gICAgICogd2hpY2ggY29udGFpbnMgYWxsIFdTREwgZWxlbWVudHMgaW4gc2NvcGUgdmlhIDxpbXBvcnQ+IGRlY2xhcmF0aW9ucywKLSAgICAgKiBhcyB3ZWxsIGFzIHRoZSByb290IGRvY3VtZW50IGl0c2VsZi4gVGhlcmVmb3JlIHRoZSBzZWNvbmQgZGVmaW5pdGlvbnMgCi0gICAgICogYXJyYXkgZWxlbWVudCBhbmQgYWJvdmUgYXJlIHJlZHVuZGFudCwgYnV0ICptYXkqIHByb3ZlIHVzZWZ1bCB0byB0aGUgYXNzZXJ0aW9uCi0gICAgICogY29kZS4KLSAgICAgKi8KLQotICAgIHRoaXMuZGVmaW5pdGlvbnMgPSBuZXcgRGVmaW5pdGlvbltpbXBvcnRzLmxlbmd0aCArIDFdOwotICAgIC8vIGFsbG93IHJvb20gZm9yIHJvb3QgZG9jCQkKLQotICAgIHRoaXMuZGVmaW5pdGlvbnNbMF0gPSB3c2RsRG9jdW1lbnQuZ2V0RGVmaW5pdGlvbnMoKTsgLy8gcm9vdCBkb2N1bWVudCAgICAKLQotICAgIC8vIEFsbG9jYXRlIGFycmF5IGZvciB0eXBlcyBlbGVtZW50cwotICAgIFR5cGVzW10gdGVtcFR5cGVzID0gbmV3IFR5cGVzW2RlZmluaXRpb25zLmxlbmd0aF07Ci0KLSAgICBpbnQgdHlwZXNDb3VudCA9IDA7Ci0KLSAgICBpZiAoZGVmaW5pdGlvbnNbMF0uZ2V0VHlwZXMoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIHRlbXBUeXBlc1swXSA9IHRoaXMuZGVmaW5pdGlvbnNbMF0uZ2V0VHlwZXMoKTsgLy8gcm9vdCBkb2N1bWVudAkKLSAgICAgIHR5cGVzQ291bnQrKzsKLSAgICB9Ci0KLSAgICAvLyBEZWZpbml0aW9ucyBmcm9tIG90aGVyIChpbXBvcnRlZCkgd3NkbHMgY29ycmVsYXRpbmcgdG8gdGhlIGNhbmRpZGF0ZQotICAgIC8vIE9ubHkgb25lIGxldmVsIGRvd24gZm9yIG5vdwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW1wb3J0cy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpZiAoKChkZWZpbml0aW9uc1tpICsgMV0gPSBpbXBvcnRzW2ldLmdldERlZmluaXRpb24oKSkgIT0gbnVsbCkKLSAgICAgICAgJiYgKGRlZmluaXRpb25zW2kgKyAxXS5nZXRUeXBlcygpICE9IG51bGwpKQotICAgICAgewotICAgICAgICB0ZW1wVHlwZXNbdHlwZXNDb3VudF0gPSBkZWZpbml0aW9uc1tpICsgMV0uZ2V0VHlwZXMoKTsKLSAgICAgICAgdHlwZXNDb3VudCsrOwotICAgICAgfQotICAgIH0KLQotICAgIGlmICh0eXBlc0NvdW50ID4gMCkKLSAgICB7Ci0gICAgICB0aGlzLnR5cGVzID0gbmV3IFR5cGVzW3R5cGVzQ291bnRdOwotCi0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVzQ291bnQ7IGkrKykKLSAgICAgICAgdGhpcy50eXBlc1tpXSA9IHRlbXBUeXBlc1tpXTsKLSAgICB9Ci0gICAgLyogCi0gICAgICogUG9wdWxhdGUgZWxlbWVudCBoaWVyYWNoeToKLSAgICAgKiBQb3J0Ci0gICAgICogQmluZGluZwotICAgICAqIFBvcnRUeXBlCi0gICAgICogb3BlcmF0aW9uKHMpCi0gICAgICogbWVzc2FnZShzKQotICAgICAqLwotCi0gICAgaWYgKHdzZGxFbGVtZW50LmlzUG9ydCgpKQotICAgIHsKLQotICAgICAgUG9ydCBwb3J0ID0gbnVsbDsKLQotICAgICAgLy8gVXNlIHBhcmVudEVsZW1lbnROYW1lIHRvIHF1YWxpZnkgdGhlIHBvcnQgd2l0aGluIGEgc2VydmljZS4JCQotICAgICAgUU5hbWUgc2VydmljZU5hbWUgPSB3c2RsRWxlbWVudC5nZXRQYXJlbnRFbGVtZW50UU5hbWUoKTsKLSAgICAgIFNlcnZpY2VbXSBzID0gd3NkbERvY3VtZW50LmdldFNlcnZpY2VzKCk7Ci0gICAgICBTdHJpbmcgcG9ydE5hbWUgPSB3c2RsRWxlbWVudC5nZXROYW1lKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHMubGVuZ3RoICYmIHBvcnQgPT0gbnVsbDsgaSsrKQotICAgICAgewotICAgICAgICBpZiAoc1tpXS5nZXRRTmFtZSgpLmVxdWFscyhzZXJ2aWNlTmFtZSkpCi0gICAgICAgIHsKLSAgICAgICAgICBwb3J0ID0gc1tpXS5nZXRQb3J0KHBvcnROYW1lKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAocG9ydCA9PSBudWxsKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKAotICAgICAgICAgICJXU0RMIFBvcnQgXCciCi0gICAgICAgICAgICArIHBvcnROYW1lCi0gICAgICAgICAgICArICJcJyBmb3IgU2VydmljZSBcJyIKLSAgICAgICAgICAgICsgc2VydmljZU5hbWUKLSAgICAgICAgICAgICsgIlwnIG5vdCBmb3VuZCBpbiBzZXJ2aWNlIGRlc2NyaXB0aW9uIik7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHRoaXMucG9ydHMgPSBuZXcgUG9ydFtdIHsgcG9ydCB9OwotICAgICAgICAvLyBBREQ6IGRvIHNlcnZpY2VMb2NhdGlvbiBjaGVjayBmb3Igc29hcGJpbmQ6YWRkcmVzcz8KLSAgICAgICAgZGVzY2VuZGVudHMocG9ydCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIEFERDogdGhlIGZvbGxvd2luZyBjb3VsZCBiZSBpbnN0YW50aWF0ZWQgaGVyZSBpbnN0ZWFkIHRvIHJlZmluZSBjb250ZXh0IGluZm8KLSAgICAgIC8vIGRlZmluaXRpb25zIAotICAgICAgLy8gaW1wb3J0cyAKLSAgICAgIC8vIHR5cGVzCi0KLSAgICB9Ci0KLSAgICBlbHNlIGlmICh3c2RsRWxlbWVudC5pc0JpbmRpbmcoKSkKLSAgICB7Ci0gICAgICBpZiAod3NkbEVsZW1lbnQuZ2V0UU5hbWUoKSAhPSBudWxsCi0gICAgICAgICYmIHdzZGxFbGVtZW50LmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkgIT0gbnVsbAotICAgICAgICAmJiB3c2RsRWxlbWVudC5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpLmxlbmd0aCgpID4gMCkKLSAgICAgIHsKLSAgICAgICAgQmluZGluZyBiaW5kaW5nID0KLSAgICAgICAgICB3c2RsRG9jdW1lbnQuZ2V0RGVmaW5pdGlvbnMoKS5nZXRCaW5kaW5nKHdzZGxFbGVtZW50LmdldFFOYW1lKCkpOwotCi0gICAgICAgIGlmIChiaW5kaW5nID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKAotICAgICAgICAgICAgIldTREwgQmluZGluZyBuYW1lZCBcJyIKLSAgICAgICAgICAgICAgKyB3c2RsRWxlbWVudC5nZXRRTmFtZSgpCi0gICAgICAgICAgICAgICsgIlwnIG5vdCBmb3VuZCBpbiBzZXJ2aWNlIGRlc2NyaXB0aW9uIik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgdGhpcy5iaW5kaW5ncyA9IG5ldyBCaW5kaW5nW10geyBiaW5kaW5nIH07Ci0KLSAgICAgICAgICAvLyB0aGUgcmVzdCAuLi4gYmVsb3cgYmluZGluZzoJCi0gICAgICAgICAgLy8gcG9ydFR5cGVzIGZyb20gYmluZGluZwotICAgICAgICAgIC8vIG9wZXJhdGlvbnMgZnJvbSBwb3J0VHlwZXMKLSAgICAgICAgICAvLyBtZXNzYWdlcyBmcm9tIG9wZXJhdGlvbnMKLSAgICAgICAgICBkZXNjZW5kZW50cyhiaW5kaW5nKTsKLQotICAgICAgICAgIC8vIGFib3ZlIGJpbmRpbmc6Ci0gICAgICAgICAgLy8gcG9ydHMKLSAgICAgICAgICAvLyBkZWZpbml0aW9ucywgaW1wb3J0cywgdHlwZXMgKGZ1dHVyZT8pCQkJCQotICAgICAgICAgIC8vIGFuY2VzdG9ycyhiaW5kaW5ncyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBlbHNlIGlmICh3c2RsRWxlbWVudC5pc1BvcnRUeXBlKCkpCi0gICAgewotCi0gICAgICBQb3J0VHlwZSBwb3J0VHlwZSA9Ci0gICAgICAgIHdzZGxEb2N1bWVudC5nZXREZWZpbml0aW9ucygpLmdldFBvcnRUeXBlKHdzZGxFbGVtZW50LmdldFFOYW1lKCkpOwotICAgICAgdGhpcy5wb3J0VHlwZXMgPSBuZXcgUG9ydFR5cGVbXSB7IHBvcnRUeXBlIH07Ci0KLSAgICAgIGlmIChwb3J0VHlwZSA9PSBudWxsKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKAotICAgICAgICAgICJXU0RMIFBvcnRUeXBlIG5hbWVkIFwnIgotICAgICAgICAgICAgKyB3c2RsRWxlbWVudC5nZXRRTmFtZSgpCi0gICAgICAgICAgICArICJcJyBub3QgZm91bmQgaW4gc2VydmljZSBkZXNjcmlwdGlvbiIpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICB0aGlzLnBvcnRUeXBlcyA9IG5ldyBQb3J0VHlwZVtdIHsgcG9ydFR5cGUgfTsKLSAgICAgICAgLy8gdGhlIHJlc3QgLi4uIGJlbG93IHBvcnRUeXBlOgkKLSAgICAgICAgZGVzY2VuZGVudHMocG9ydFR5cGUpOwotCi0gICAgICAgIC8vIGFib3ZlIHBvcnRUeXBlOgotICAgICAgICAvLyBwb3J0cwotICAgICAgICAvLyBkZWZpbml0aW9ucywgaW1wb3J0cywgdHlwZXMgKGZ1dHVyZSkgPwotICAgICAgICAvL2FuY2VzdG9ycyhwb3J0VHlwZXMpOwkJCi0gICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKHdzZGxFbGVtZW50LmlzT3BlcmF0aW9uKCkpCi0gICAgewotCi0gICAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gbnVsbDsKLSAgICAgIFN0cmluZyBjb25maWdPcE5hbWUgPSB3c2RsRWxlbWVudC5nZXROYW1lKCk7Ci0KLSAgICAgIC8vIFVzZSBwYXJlbnRFbGVtZW50TmFtZSB0byBxdWFsaWZ5IHRoZSBvcGVyYXRpb24gd2l0aGluIGEgcG9ydFR5cGUuCi0gICAgICBRTmFtZSBwb3J0VHlwZU5hbWUgPSB3c2RsRWxlbWVudC5nZXRQYXJlbnRFbGVtZW50UU5hbWUoKTsKLSAgICAgIFBvcnRUeXBlW10gcCA9IHdzZGxEb2N1bWVudC5nZXRQb3J0VHlwZXMoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcC5sZW5ndGggJiYgb3BlcmF0aW9uID09IG51bGw7IGkrKykKLSAgICAgIHsKLSAgICAgICAgaWYgKHBbaV0uZ2V0UU5hbWUoKS5lcXVhbHMocG9ydFR5cGVOYW1lKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIHdzZGw0aiBhdmFpbGFibGUgbWV0aG9kIGNhbGwgYmVsb3cgaW1wbGllcyB0aGF0IG9ubHkgCi0gICAgICAgICAgLy8gbmFtZStpbnB1dG5hbWUrb3V0cHV0bmFtZSB1bmlxdWVseSBkZWZpbmVzIG9wZXJhdGlvbiEgCi0gICAgICAgICAgLy8gU2luY2Ugd2UgZG8gbm90IGhhdmUgPGlucHV0PiAmIDxvdXRwdXQ+IG5hbWUgaW5mb3JtYXRpb24KLSAgICAgICAgICAvLyBhdmFpbGFibGUgaW4gdGhlIGNvbmZpZywgdXNlIHRoaXMgaW5zdGVhZCBmb3Igbm93OiAtIAotICAgICAgICAgIC8vIEdldCB0aGUgZmlyc3Qgb3BlcmF0aW9uIHdlIGZpbmQ6Ci0gICAgICAgICAgSXRlcmF0b3Igb3BJdCA9IHBbaV0uZ2V0T3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgT3BlcmF0aW9uIG9wID0gbnVsbDsKLSAgICAgICAgICB3aGlsZSAob3BJdC5oYXNOZXh0KCkgJiYgb3BlcmF0aW9uID09IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgb3AgPSAoT3BlcmF0aW9uKSBvcEl0Lm5leHQoKTsKLSAgICAgICAgICAgIGlmIChjb25maWdPcE5hbWUuZXF1YWxzKG9wLmdldE5hbWUoKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAob3BlcmF0aW9uID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBXU0lFeGNlcHRpb24oCi0gICAgICAgICAgIk5vIFdTREwgT3BlcmF0aW9uIG5hbWVkIFwnIgotICAgICAgICAgICAgKyB3c2RsRWxlbWVudC5nZXRRTmFtZSgpCi0gICAgICAgICAgICArICJcJyBmb3VuZCBpbiBzZXJ2aWNlIGRlc2NyaXB0aW9uIik7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHRoaXMub3BlcmF0aW9ucyA9IG5ldyBPcGVyYXRpb25bXSB7IG9wZXJhdGlvbiB9OwotCi0gICAgICAgIGRlc2NlbmRlbnRzKG9wZXJhdGlvbik7Ci0gICAgICAgIC8vYW5jZXN0b3JzKG9wZXJhdGlvbnMpOwotICAgICAgfQotICAgIH0KLQotICAgIGVsc2UgaWYgKHdzZGxFbGVtZW50LmlzTWVzc2FnZSgpKQotICAgIHsKLQotICAgICAgTWVzc2FnZSBtZXNzYWdlID0KLSAgICAgICAgd3NkbERvY3VtZW50LmdldERlZmluaXRpb25zKCkuZ2V0TWVzc2FnZSh3c2RsRWxlbWVudC5nZXRRTmFtZSgpKTsKLSAgICAgIGlmIChtZXNzYWdlID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBXU0lFeGNlcHRpb24oCi0gICAgICAgICAgIk5vIFdTREwgTWVzc2FnZSBuYW1lZCBcJyIKLSAgICAgICAgICAgICsgd3NkbEVsZW1lbnQuZ2V0UU5hbWUoKQotICAgICAgICAgICAgKyAiXCcgZm91bmQgaW4gc2VydmljZSBkZXNjcmlwdGlvbiIpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICB0aGlzLm1lc3NhZ2VzID0gbmV3IE1lc3NhZ2VbXSB7IG1lc3NhZ2UgfTsKLQotICAgICAgICAvL2FuY2VzdG9ycyhtZXNzYWdlcyk7IAotICAgICAgfQotICAgIH0KLQotICAgIGVsc2UKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKAotICAgICAgICAiVW5yZWNvZ25pc2VkIDxXU0RMRWxlbWVudCB0eXBlPiBpbiBjb25maWc6ICIgKyB3c2RsRWxlbWVudC5nZXRUeXBlKCkpOwotICAgIH0KLQotICAgIC8vIGdldCBpbmZvIGFib3V0IHRoZSBlZmZlY3RpdmUgc2VydmljZSBsb2NhdGlvbiAocykKLSAgICAvL3RoaXMuZW5kUG9pbnRzID0gZGVyaXZlRW5kcG9pbnRzKGFuYWx5emVyQ29uZmlnLCB0aGlzLnBvcnRzLCB0aGlzLmRlZmluaXRpb25zKTsKLSAgICB0aGlzLmVuZFBvaW50cyA9Ci0gICAgICBkZXJpdmVFbmRwb2ludHMoc2VydmljZVJlZmVyZW5jZSwgdGhpcy5wb3J0cywgdGhpcy5kZWZpbml0aW9ucyk7Ci0gIH0KLQotICAvKiogCi0gICAgICogYW5jZXN0b3IgY29kZSBpcyBub3QgdXNlZCBhdCBwcmVzZW50LgotICAgICAqIAotICAgICAqLwotICAvKiAgIAotICAgICBwcm90ZWN0ZWQgdm9pZCBhbmNlc3RvcnMoUG9ydFtdIHBvcnRzKSB7Ci0gICAgIAkvLyBubyBhbmNlc3RvcnMgb2YgUG9ydCByZXF1aXJlZCAoZm9yIG5vdykKLSAgICAgfSAJICAgIAotICAgICBwcm90ZWN0ZWQgdm9pZCBhbmNlc3RvcnMoQmluZGluZ1tdIGJpbmRpbmdzKSB7CSAgICAKLSAgICAJCS8vIFBvcnRzIGZyb20gQmluZGluZ3MgIDEtMi0xCi0gICAgIAkKLSAgICAgCS8vICoqKiBjaGVhdCBmb3Igbm93IC0gZ2V0IHBvcnRzIGZyb20gYWxsIHNlcnZpY2VzIGluIHRoZSB3c2RsIGRvYwotICAgICAJLy8gQUREOiBmaW5kIGNvcnJlY3QgbWFwcGluZyBiYXNlZCBvbiB0aGUgc3VwcGxpZWQgYmluZGluZ3MKLSAgICAgCVNlcnZpY2VbXSBzZXJ2aWNlID0gd3NkbERvY3VtZW50LmdldFNlcnZpY2VzKCk7Ci0gICAgIAlIYXNoU2V0IHNldCA9IG5ldyBIYXNoU2V0KCk7Ci0gIAkJZm9yIChpbnQgaT0wOyBpPnNlcnZpY2UubGVuZ3RoOyBpKyspIHsKLSAgCQkJc2V0LmFkZChzZXJ2aWNlW2ldLmdldFBvcnRzKCkpOyAgCi0gIAkJfQotICAJCQkKLSAgCQkvLyBhc3NpZ24gdGhlIHBhcmVudCBncm91cCBhbmQgcHJvY2VzcyB0aGUgZ3JhbmRwYXJlbnRzIGlmIGFueQkJCQkJCQkJCi0gIAkJYW5jZXN0b3JzKHRoaXMucG9ydHMgPSAoUG9ydFtdKXNldC50b0FycmF5KHRoaXMucG9ydHMgPSBuZXcgUG9ydFswXSkpOwotICAgICB9Ci0gICAgIHByb3RlY3RlZCB2b2lkIGFuY2VzdG9ycyhQb3J0VHlwZVtdIHBvcnRUeXBlcykgewkgICAgCi0gICAgCQkvLyBCaW5kaW5ncyBmcm9tIFBvcnRUeXBlcyAgMS0yLTEKLSAgICAgCQotICAgICAJLy8gYWRkIGhhdmUgdG8gc3RhcnQgd2l0aCBhbGwgYmluZGluZ3MgaW4gZG9jIGFuZCBzZWFyY2ggZm9yIHRob3NlCi0gICAgIAkvLyB3aXRoIHRoZSBwb3J0VHlwZSAgCi0gICAgIAlIYXNoU2V0IHNldCA9IG5ldyBIYXNoU2V0KCk7Ci0gIAkJZm9yIChpbnQgaT0wOyBpPnBvcnRUeXBlcy5sZW5ndGg7IGkrKykgewotICAJCS8vIHNldC5hZGQocG9ydFR5cGVzW2ldLmdldCgpKTsgIAotICAJCX0KLSAgCQkJCi0gIAkJLy8gYXNzaWduIHRoZSBwYXJlbnQgZ3JvdXAgYW5kIHByb2Nlc3MgdGhlIGdyYW5kcGFyZW50cyBpZiBhbnkJCQkJCQkJCQotICAJCWFuY2VzdG9ycyh0aGlzLmJpbmRpbmdzID0gKEJpbmRpbmdbXSlzZXQudG9BcnJheSh0aGlzLmJpbmRpbmdzID0gbmV3IEJpbmRpbmdbMF0pKTsKLSAgICAgfQotICAgICBwcm90ZWN0ZWQgdm9pZCBhbmNlc3RvcnMoT3BlcmF0aW9uW10gb3BlcmF0aW9ucykgewkgICAgCi0gICAgCQkvLyBQb3J0VHlwZXMgZnJvbSBPcGVyYXRpb25zICAxLTItMQotICAgICAJICAKLSAgICAgCUhhc2hTZXQgc2V0ID0gbmV3IEhhc2hTZXQoKTsKLSAgCQlmb3IgKGludCBpPTA7IGk+b3BlcmF0aW9ucy5sZW5ndGg7IGkrKykgewotICAJCQkvLyBzZXQuYWRkKG9wZXJhdGlvbnNbaV0uZ2V0KCkpOyAgCi0gIAkJfQotICAJCQkKLSAgCQkvLyBhc3NpZ24gdGhlIHBhcmVudCBncm91cCBhbmQgcHJvY2VzcyB0aGUgZ3JhbmRwYXJlbnRzIGlmIGFueQkJCQkJCQkJCi0gIAkJYW5jZXN0b3JzKHRoaXMucG9ydFR5cGVzID0gKFBvcnRUeXBlW10pc2V0LnRvQXJyYXkodGhpcy5wb3J0VHlwZXMgPSBuZXcgUG9ydFR5cGVbMF0pKTsKLSAgICAgfQotICAgICBwcm90ZWN0ZWQgdm9pZCBhbmNlc3RvcnMoTWVzc2FnZVtdIG1lc3NhZ2VzKSB7CSAgICAKLSAgICAJCS8vIE9wZXJhdGlvbnMgZnJvbSBNZXNzYWdlcyAgMS0yLTEKLSAgICAgCS8vIEFERCBmaXggaXQhICAKLSAgICAgCUhhc2hTZXQgc2V0ID0gbmV3IEhhc2hTZXQoKTsKLSAgCQlmb3IgKGludCBpPTA7IGk+bWVzc2FnZXMubGVuZ3RoOyBpKyspIHsKLSAgCQkJLy8gc2V0LmFkZChtZXNzYWdlc1tpXS5nZXQoKSk7ICAKLSAgCQl9Ci0gIAkJCQotICAJCS8vIGFzc2lnbiB0aGUgcGFyZW50IGdyb3VwIAkKLSAgCQl0aGlzLnBvcnRUeXBlcyA9IChQb3J0VHlwZVtdKXNldC50b0FycmF5KHRoaXMucG9ydFR5cGVzID0gbmV3IFBvcnRUeXBlWzBdKTsKLSAgICAgfQotICAqLwotCi0gIC8qKgotICAgKiBEZXNjZW5kYW50IG1ldGhvZCBmb3IgY29tcGxldGluZyBjYW5kaWRhdGUgc2VydmljZSBjb250ZXh0IGNyZWF0aW9uLgotICAgKiBAcGFyYW0gcG9ydCAgYSBQb3J0IG9iamVjdAotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwb3J0IGlzIG51bGwuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBkZXNjZW5kZW50cyhQb3J0IHBvcnQpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEJpbmRpbmcgZnJvbSBQb3J0ICAxLTItMQotCi0gICAgaWYgKHBvcnQgPT0gbnVsbCkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKCJJbnRlcm5hbCBlcnJvcjogZXhwZWN0ZWQgYSBQb3J0IHZhbHVlIik7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICB0aGlzLmJpbmRpbmdzID0gbmV3IEJpbmRpbmdbXSB7IHBvcnQuZ2V0QmluZGluZygpfTsKLSAgICAgIGlmICh0aGlzLmJpbmRpbmdzWzBdICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIC8qIEFzc2lnbiB0aGUgY2hpbGQgZ3JvdXAgYW5kIHByb2Nlc3MgdGhlIGdyYW5kY2hpbGRyZW4gaWYgYW55LgotICAgICAgICAqIE51bGwgYXJndW1lbnQgdmFsdWUgcGFzc2VkIGludG8gdGhlIGZvbGxvd2luZyBtZXRob2Qgd291bGQgCi0gICAgICAgICogc3VnZ2VzdCBhIFdTREwgZGVmaW5pdGlvbiBpbmNvbnNpc3RlbmN5Ci0gICAgICAgICogd2hpY2ggd2lsbCBiZSBwaWNrZWQgdXAgZHVyaW5nIERlc2NyaXB0aW9uIEFydGlmYWN0IFRBIHRlc3RpbmcuCi0gICAgICAgICovCi0gICAgICAgIGRlc2NlbmRlbnRzKHRoaXMuYmluZGluZ3NbMF0pOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBEZXNjZW5kYW50IG1ldGhvZCBmb3IgY29tcGxldGluZyBjYW5kaWRhdGUgc2VydmljZSBjb250ZXh0IGNyZWF0aW9uLgotICAgKiBAcGFyYW0gYmluZGluZyAgYSBCaW5kaW5nIG9iamVjdAotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBiaW5kaW5nIGlzIG51bGwuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBkZXNjZW5kZW50cyhCaW5kaW5nIGJpbmRpbmcpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIHBvcnRUeXBlIGZyb20gQmluZGluZyAxLTItMQotCi0gICAgaWYgKGJpbmRpbmcgPT0gbnVsbCkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKCJJbnRlcm5hbCBlcnJvcjogZXhwZWN0ZWQgYSBCaW5kaW5nIHZhbHVlIik7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICB0aGlzLnBvcnRUeXBlcyA9IG5ldyBQb3J0VHlwZVtdIHsgYmluZGluZy5nZXRQb3J0VHlwZSgpfTsKLSAgICAgIGlmICh0aGlzLnBvcnRUeXBlc1swXSAhPSBudWxsKQotICAgICAgewotICAgICAgICAvKiBBc3NpZ24gdGhlIGNoaWxkIGdyb3VwIGFuZCBwcm9jZXNzIHRoZSBncmFuZGNoaWxkcmVuIGlmIGFueS4KLSAgICAgICAgCSogTnVsbCBhcmd1bWVudCB2YWx1ZSBwYXNzZWQgaW50byB0aGUgZm9sbG93aW5nIG1ldGhvZCB3b3VsZCAKLSAgICAgICAgCSogc3VnZ2VzdCBhIFdTREwgZGVmaW5pdGlvbiBpbmNvbnNpc3RlbmN5Ci0gICAgICAgIAkqIHdoaWNoIHdpbGwgYmUgcGlja2VkIHVwIGR1cmluZyBEZXNjcmlwdGlvbiBBcnRpZmFjdCBUQSB0ZXN0aW5nLgotICAgICAgICAJKi8KLSAgICAgICAgZGVzY2VuZGVudHModGhpcy5wb3J0VHlwZXNbMF0pOwotCi0gICAgICAgIC8vIEdldCBhbnkgbWVzc2FnZXMgdGhhdCBhcmUgcmVmZXJlbmNlZCBmcm9tIGhlYWRlcnMgYW5kIGhlYWRlcmZhdWx0cwotCi0gICAgICAgIC8vIEdldCByZWZlcmVuY2UgdG8gZGVmaW5pdGlvbgotICAgICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBkZWZpbml0aW9uc1swXTsKLQotICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbWVzc2FnZXMgYWxyZWFkeSwgdGhlbiBnZXQgdGhlbSBhcyBhIGNvbGxlY3Rpb24KLSAgICAgICAgSGFzaFNldCBtZXNzYWdlU2V0ID0gbmV3IEhhc2hTZXQoKTsKLSAgICAgICAgaWYgKG1lc3NhZ2VzICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1lc3NhZ2VzLmxlbmd0aDsgaSsrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG1lc3NhZ2VTZXQuYWRkKG1lc3NhZ2VzW2ldKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBHZXQgdGhlIG1lc3NhZ2VzIHRoYXQgYXJlIHJlZmVyZW5jZWQgb25seSBieSBhIGJpbmRpbmcgCi0gICAgICAgIEhhc2hTZXQgYmluZGluZ01lc3NhZ2VzID0gV1NETFV0aWxzLmZpbmRNZXNzYWdlcyhkZWZpbml0aW9uLCBiaW5kaW5nKTsKLQotICAgICAgICAvLyBBZGQgdGhlc2UgbWVzc2FnZXMgdG8gdGhlIGNvbXBsZXRlIG1lc3NhZ2UgbGlzdCAgCi0gICAgICAgIG1lc3NhZ2VTZXQuYWRkQWxsKGJpbmRpbmdNZXNzYWdlcyk7Ci0KLSAgICAgICAgLy8gQ3JlYXRlIGFycmF5IGZyb20gbWVzc2FnZSBzZXQKLSAgICAgICAgdGhpcy5tZXNzYWdlcyA9Ci0gICAgICAgICAgKE1lc3NhZ2VbXSkgbWVzc2FnZVNldC50b0FycmF5KHRoaXMubWVzc2FnZXMgPSBuZXcgTWVzc2FnZVswXSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIERlc2NlbmRhbnQgbWV0aG9kIGZvciBjb21wbGV0aW5nIGNhbmRpZGF0ZSBzZXJ2aWNlIGNvbnRleHQgY3JlYXRpb24uCi0gICAqIEBwYXJhbSBwb3J0VHlwZSAgYSBQb3J0VHlwZSBvYmplY3QKLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcG9ydFR5cGUgaXMgbnVsbC4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGRlc2NlbmRlbnRzKFBvcnRUeXBlIHBvcnRUeXBlKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBPcGVyYXRpb25zIGZyb20gUG9ydFR5cGUgMS0yLW4KLQotICAgIGlmIChwb3J0VHlwZSA9PSBudWxsKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBXU0lFeGNlcHRpb24oIkludGVybmFsIGVycm9yOiBleHBlY3RlZCBhIFBvcnRUeXBlIHZhbHVlIik7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICB0aGlzLm9wZXJhdGlvbnMgPQotICAgICAgICAoT3BlcmF0aW9uW10pIChwb3J0VHlwZQotICAgICAgICAgIC5nZXRPcGVyYXRpb25zKCkKLSAgICAgICAgICAudG9BcnJheSh0aGlzLm9wZXJhdGlvbnMgPSBuZXcgT3BlcmF0aW9uWzBdKSk7Ci0gICAgICBpZiAodGhpcy5vcGVyYXRpb25zLmxlbmd0aCA+IDApCi0gICAgICB7Ci0gICAgICAgIGRlc2NlbmRlbnRzKHRoaXMub3BlcmF0aW9ucyk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAgICogRGVzY2VuZGFudCBtZXRob2QgZm9yIGNvbXBsZXRpbmcgY2FuZGlkYXRlIHNlcnZpY2UgY29udGV4dCBjcmVhdGlvbi4KLSAgICAgKiBAcGFyYW0gb3BlcmF0aW9uICBhIE9wZXJhdGlvbiBvYmplY3QKLSAgICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBvcGVyYXRpb24gaXMgbnVsbC4KLSAgICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgZGVzY2VuZGVudHMoT3BlcmF0aW9uIG9wZXJhdGlvbikgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gTWVzc2FnZXMgZnJvbSBPcGVyYXRpb24KLQotICAgIGlmIChvcGVyYXRpb24gPT0gbnVsbCkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKCJJbnRlcm5hbCBlcnJvcjogZXhwZWN0ZWQgYW4gT3BlcmF0aW9uIHZhbHVlIik7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBkZXNjZW5kZW50cyhuZXcgT3BlcmF0aW9uW10geyBvcGVyYXRpb24gfSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIERlc2NlbmRhbnQgbWV0aG9kIGZvciBjb21wbGV0aW5nIGNhbmRpZGF0ZSBzZXJ2aWNlIGNvbnRleHQgY3JlYXRpb24uCi0gICAqIEBwYXJhbSBvcGVyYXRpb25zICBhbiBhcnJheSBvZiBvcGVyYXRpb25zLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBvcGVyYXRpb25zIGlzIG51bGwuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBkZXNjZW5kZW50cyhPcGVyYXRpb25bXSBvcGVyYXRpb25zKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBNZXNzYWdlcyBmcm9tIE9wZXJhdGlvbnMgMS0yLW4KLQotICAgIGlmIChvcGVyYXRpb25zID09IG51bGwpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigiSW50ZXJuYWwgZXJyb3I6IGV4cGVjdGVkIGFuIE9wZXJhdGlvbltdIHZhbHVlIik7Ci0gICAgfQotCi0gICAgSGFzaFNldCBzZXQgPSBuZXcgSGFzaFNldCgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb3BlcmF0aW9ucy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpZiAob3BlcmF0aW9uc1tpXS5nZXRJbnB1dCgpICE9IG51bGwpCi0gICAgICAgIHNldC5hZGQob3BlcmF0aW9uc1tpXS5nZXRJbnB1dCgpLmdldE1lc3NhZ2UoKSk7IC8vMS0yLTEKLSAgICAgIGlmIChvcGVyYXRpb25zW2ldLmdldE91dHB1dCgpICE9IG51bGwpCi0gICAgICAgIHNldC5hZGQob3BlcmF0aW9uc1tpXS5nZXRPdXRwdXQoKS5nZXRNZXNzYWdlKCkpOyAvLzEtMi0xCi0KLSAgICAgIC8vIGdldCBtZXNzYWdlcyBhc3NvY2lhdGVkIHdpdGggZmF1bHRzIGZvciB0aGlzIG9wZXJhdGlvbiAKLSAgICAgIC8vIDEtMi1uCi0gICAgICBJdGVyYXRvciBpdCA9IG9wZXJhdGlvbnNbaV0uZ2V0RmF1bHRzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIHNldC5hZGQoKChGYXVsdCkgaXQubmV4dCgpKS5nZXRNZXNzYWdlKCkpOwotICAgICAgfQotICAgIH0KLSAgICB0aGlzLm1lc3NhZ2VzID0gKE1lc3NhZ2VbXSkgc2V0LnRvQXJyYXkodGhpcy5tZXNzYWdlcyA9IG5ldyBNZXNzYWdlWzBdKTsKLSAgICAvLyBubyBkZXNjZW5kZW50cyBvZiBtZXNzYWdlcyBzbyBzdG9wLgotICB9Ci0KLSAgLyoqCi0gICAqIFByb3ZpZGUgYSByZWN1cnNpdmUgbm9uLXJlcGVhdGluZyBsaXN0IG9mIGltcG9ydHMgZm9yIHRoZSBzcGVjaWZpZWQKLSAgICogV1NETCBkb2N1bWVudCBkZWZpbml0aW9uLgotICAgKi8KLSAgLyogICBwcml2YXRlIEhhc2hTZXQgZ2V0QWxsSW1wb3J0cyhEZWZpbml0aW9uIHJvb3REZWYpIHRocm93cyBXU0lFeGNlcHRpb24gewotICAgICAJCi0gICAgIAlIYXNoU2V0IGltcG9ydFNldCA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgIAkKLSAgICAgCUNvbGxlY3Rpb24gaW1wb3J0TGlzdCA9ICByb290RGVmLmdldEltcG9ydHMoKS52YWx1ZXMoKTsKLSAgICAgCUl0ZXJhdG9yIGkgPSBpbXBvcnRMaXN0Lml0ZXJhdG9yKCk7Ci0gICAgIAkKLSAgICAgCXdoaWxlIChpLmhhc05leHQoKSkgewotICAgICAJCUltcG9ydCBuZXh0SW1wb3J0ID0gKEltcG9ydCkoaS5uZXh0KCkpOwotICAgICAJCWlmIChuZXh0SW1wb3J0ICE9IG51bGwpIHsKLSAgICAgCQkJLy8gaXRzIGEgd3NkbCBkb2N1bWVudAotICAgICAJCQlpbXBvcnRTZXQuYWRkQWxsKGdldEFsbEltcG9ydHMobmV4dEltcG9ydC5nZXREZWZpbml0aW9uKCkpKTsKLSAgICAgCQl9ICAgCQkJCi0gICAgIAl9Ci0gICAgIAkKLSAgICAgCXJldHVybiAoaW1wb3J0U2V0KTsKLSAgICAgfQotICAgKi8KLSAgcHJpdmF0ZSBIYXNoU2V0IGdldEFsbEltcG9ydHMoRGVmaW5pdGlvbiByb290RGVmKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIEhhc2hTZXQgaW1wb3J0U2V0ID0gbmV3IEhhc2hTZXQoKTsKLSAgICBpbXBvcnRTZXQgPSAgZ2V0QWxsSW1wb3J0cyhuZXcgQXJyYXlMaXN0KCksIHJvb3REZWYpOwotICAgIHJldHVybiAoaW1wb3J0U2V0KTsKLSAgfQotICAKLSAgcHJpdmF0ZSBIYXNoU2V0IGdldEFsbEltcG9ydHMoTGlzdCBhbHJlYWR5UHJvY2Vzc2VkRGVmaW5pdGlvbnMsIERlZmluaXRpb24gcm9vdERlZikgCi0gIHsKLQlIYXNoU2V0IGltcG9ydFNldCA9IG5ldyBIYXNoU2V0KCk7Ci0JaWYgKChyb290RGVmICE9IG51bGwpICYmICghYWxyZWFkeVByb2Nlc3NlZERlZmluaXRpb25zLmNvbnRhaW5zKHJvb3REZWYpKSkKLQl7Ci0gICAgICBhbHJlYWR5UHJvY2Vzc2VkRGVmaW5pdGlvbnMuYWRkKHJvb3REZWYpOwkKLQkgIE1hcCBpbXBvcnRNYXAgPSByb290RGVmLmdldEltcG9ydHMoKTsKLSAgICAgIEl0ZXJhdG9yIGkgPSBpbXBvcnRNYXAudmFsdWVzKCkuaXRlcmF0b3IoKTsKLQotICAgICAgd2hpbGUgKGkuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBMaXN0IG5leHRJbXBvcnRMaXN0ID0gKExpc3QpIChpLm5leHQoKSk7Ci0gICAgICAgIEl0ZXJhdG9yIGxpc3RJdCA9IG5leHRJbXBvcnRMaXN0Lml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChsaXN0SXQuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgSW1wb3J0IG5leHRJbXBvcnQgPSAoSW1wb3J0KSBsaXN0SXQubmV4dCgpOwotICAgICAgICAgIGlmIChuZXh0SW1wb3J0ICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgaW1wb3J0U2V0LmFkZChuZXh0SW1wb3J0KTsKLSAgICAgICAgICAgIERlZmluaXRpb24gZGVmID0gbmV4dEltcG9ydC5nZXREZWZpbml0aW9uKCk7Ci0gICAgICAgCSAgICBIYXNoU2V0IG5lc3RlZEltcG9ydHMgPSBnZXRBbGxJbXBvcnRzKGFscmVhZHlQcm9jZXNzZWREZWZpbml0aW9ucywgZGVmKTsKLSAgICAgICAgICAgIGZvciAoSXRlcmF0b3IgaiA9IG5lc3RlZEltcG9ydHMuaXRlcmF0b3IoKTsgai5oYXNOZXh0KCk7KQotICAgICAgICAgICAgICBpbXBvcnRTZXQuYWRkKGoubmV4dCgpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGltcG9ydFNldDsKLSAgfQotCi0gIC8qKgotICAgKiBnZXQgYWxsIHNlcnZpY2UgbG9jYXRpb24gZW5kcG9pbnQgdmFsdWVzCi0gICAqIHJlbGV2YW50IHRvIHRoZSBzZXJ2aWNlIHVuZGVyIHRlc3QuCi0gICAqIAotICAgKiBJZiB0aGUgc2VydmljZSBsb2NhdGlvbiBpcyBzcGVjaWZpZWQgaW4gdGhlIGNvbmZpZyB3ZSB1c2UKLSAgICoganVzdCB0aGF0LgotICAgKiBPdGhlcndpc2UsIGlmIHRoZSBwb3J0IGlzIHNwZWNpZmllZCwgd2UgZ2V0IGFsbCBlbmRwb2ludHMKLSAgICogYXNzb2NpYXRlZCB3aXRoIHRoYXQgcG9ydC4KLSAgICogSWYgd2UgaGF2ZSBuZWl0aGVyIHRoZSBzZXJ2aWNlIGxvY2F0aW9uIHZhbHVlIG9yIHRoZSBwb3J0LAotICAgKiB0aGVuIGFsbCBlbmRwb2ludHMgaW4gdGhlIGRlZmluaXRpb24gYXJlIHVzZWQuCi0gICAqLwotICBwcml2YXRlIFVSSVtdIGRlcml2ZUVuZHBvaW50cygKLSAgLy9BbmFseXplckNvbmZpZyBhbmFseXplckNvbmZpZywgCi0gIFNlcnZpY2VSZWZlcmVuY2Ugc2VydmljZVJlZmVyZW5jZSwgUG9ydFtdIHBvcnRzLCBEZWZpbml0aW9uW10gZGVmaW5pdGlvbnMpCi0gIHsKLQotICAgIFVSSVtdIGVuZHAgPSBudWxsOwotICAgIC8vUG9ydCBwb3J0ID0gbnVsbDsJCi0gICAgdHJ5Ci0gICAgewotICAgICAgU3RyaW5nIHNlcnZpY2VMb2NhdGlvbiA9IG51bGw7Ci0gICAgICAvLyB0cnkgc2VydmljZSBsb2NhdGlvbi4uLgotICAgICAgLy9pZiAoKHNlcnZpY2VMb2NhdGlvbiA9IGFuYWx5emVyQ29uZmlnLmdldFNlcnZpY2VMb2NhdGlvbigpKSAhPSBudWxsKSB7ICAgICAgCi0gICAgICBpZiAoKHNlcnZpY2VMb2NhdGlvbiA9IHNlcnZpY2VSZWZlcmVuY2UuZ2V0U2VydmljZUxvY2F0aW9uKCkpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGVuZHAgPSBuZXcgVVJJW10geyBuZXcgVVJJKHNlcnZpY2VMb2NhdGlvbil9OwotICAgICAgfQotICAgICAgLy9lbHNlIGlmIChhbmFseXplckNvbmZpZy5nZXRXU0RMRWxlbWVudCgpLmlzUG9ydCgpKSB7Ci0gICAgICBlbHNlIGlmIChzZXJ2aWNlUmVmZXJlbmNlLmdldFdTRExFbGVtZW50KCkuaXNQb3J0KCkpCi0gICAgICB7Ci0gICAgICAgIGlmIChwb3J0cy5sZW5ndGggIT0gMSkKLSAgICAgICAgewotICAgICAgICAgIHRocm93IG5ldyBXU0lFeGNlcHRpb24oIkludGVybmFsIGVycm9yIC0gZXhwZWN0ZWQgMS1lbGVtZW50IFBvcnQgYXJyYXkiKTsKLSAgICAgICAgfQotICAgICAgICAvL2Vsc2UgewotICAgICAgICAvLwlwb3J0ID0gcG9ydHNbMF07IC8vIGlmIFBvcnQgd2FzIGdpdmVuIGluIGNvbmZpZywgdGhlcmUgaXMganVzdCBvbmUKLSAgICAgICAgLy99Ci0gICAgICAgIC8vUU5hbWUgc29hcEFkZHJlc3MgPSBuZXcgUU5hbWUoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0RMX1NPQVAsICJhZGRyZXNzIik7Ci0gICAgICAgIEl0ZXJhdG9yIGkgPSBwb3J0c1swXS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgICAgICB3aGlsZSAoaS5oYXNOZXh0KCkgJiYgc2VydmljZUxvY2F0aW9uID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBpLm5leHQoKTsKLSAgICAgICAgICBpZiAoZXh0RWxlbSBpbnN0YW5jZW9mIFNPQVBBZGRyZXNzKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vaWYgKGV4dEVsLmdldEVsZW1lbnRUeXBlKCkuZXF1YWxzKHNvYXBBZGRyZXNzKSB7Ci0gICAgICAgICAgICAvLyB0aGlzIGVsZW1lbnQgaXMgb3VyIFNPQVBBZGRyZXNzIC0gZ2V0IHRoZSBsb2NhdGlvbgotICAgICAgICAgICAgc2VydmljZUxvY2F0aW9uID0gKChTT0FQQWRkcmVzcykgZXh0RWxlbSkuZ2V0TG9jYXRpb25VUkkoKTsKLSAgICAgICAgICAgIGVuZHAgPSBuZXcgVVJJW10geyBuZXcgVVJJKHNlcnZpY2VMb2NhdGlvbil9OwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgeyAvLyBubyBwb3J0IGluZm8gZnJvbSBjb25maWcsIHNvIHN1cHBseSBhbGwgaW4gZG9jdW1lbnQKLSAgICAgICAgLy8gUU5hbWUgc29hcEFkZHJlc3MgPSBuZXcgUU5hbWUoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0RMX1NPQVAsICJhZGRyZXNzIik7Ci0gICAgICAgIEhhc2hTZXQgZW5kcG9pbnRTZXQgPSBuZXcgSGFzaFNldCgpOwotICAgICAgICBJdGVyYXRvciBpID0gZGVmaW5pdGlvbnNbMF0uZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKGkuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0RWxlbSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCkgaS5uZXh0KCk7Ci0gICAgICAgICAgaWYgKGV4dEVsZW0gaW5zdGFuY2VvZiBTT0FQQWRkcmVzcykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvL2lmIChleHRFbC5nZXRFbGVtZW50VHlwZSgpLmVxdWFscyhzb2FwQWRkcmVzcykgewotICAgICAgICAgICAgLy8gdGhpcyBlbGVtZW50IGlzIG91ciBTT0FQQWRkcmVzcyAtIGdldCB0aGUgbG9jYXRpb24KLSAgICAgICAgICAgIGVuZHBvaW50U2V0LmFkZCgoKFNPQVBBZGRyZXNzKSBleHRFbGVtKS5nZXRMb2NhdGlvblVSSSgpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLy8gQ29udmVydCB0aGUgZGVyaXZlZCBMaXN0IHRvIGEgVVJJIGFycmF5Ci0gICAgICAgIGVuZHAgPSAoVVJJW10pIGVuZHBvaW50U2V0LnRvQXJyYXkoZW5kcCA9IG5ldyBVUklbMF0pOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgIH0KLSAgICByZXR1cm4gZW5kcDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBiaW5kaW5nLgotICAgKiBAcmV0dXJuIEJpbmRpbmcKLSAgICovCi0gIHB1YmxpYyBCaW5kaW5nW10gZ2V0QmluZGluZ3MoKQotICB7Ci0gICAgcmV0dXJuIGJpbmRpbmdzOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGVuZFBvaW50cy4KLSAgICogQHJldHVybiBVUklbXQotICAgKi8KLSAgcHVibGljIFVSSVtdIGdldEVuZFBvaW50cygpCi0gIHsKLSAgICAvLyBnZXQgbGlzdCBvZiBtYXRjaGluZyBlbmRwb2ludChzKSBhc3NvY2lhdGVkIHdpdGggc2VydmljZS4KLSAgICByZXR1cm4gZW5kUG9pbnRzOwotICB9Ci0KLSAgLyoqCi0gICogUmV0dXJucyB0aGUgZW5kUG9pbnRzIG1hdGNoaW5nIHRoZSBzcGVjaWZpZWQgaG9zdCBhbmQgcG9ydC4KLSAgKiBAcGFyYW0gaG9zdEFuZFBvcnQgIGhvc3QgYW5kIHBvcnQgbG9jYXRpb24uCi0gICogQHJldHVybiBVUklbXSBpZiBtYXRjaGVkLCBudWxsIG90aGVyd2lzZS4KLSAgKi8KLSAgcHVibGljIFVSSVtdIGdldEVuZFBvaW50cyhTdHJpbmcgaG9zdEFuZFBvcnQpCi0gIHsKLSAgICAvLyBnZXQgbGlzdCBvZiBtYXRjaGluZyBlbmRwb2ludHMgYXNzb2NpYXRlZCB3aXRoIHNlcnZpY2UsCi0gICAgLy8gaGF2aW5nIHRoZSBzcGVjaWZpZWQgaG9zdCBhbmQgcG9ydCBjb25maWd1cmF0aW9uCi0gICAgU3RyaW5nIHBvcnQ7Ci0KLSAgICBWZWN0b3IgbWF0Y2hlZEVuZHBvaW50cyA9IG5ldyBWZWN0b3IoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGVuZFBvaW50cy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICAvLyBQQjogSWYgdGhlIGVuZHBvaW50IGRvZXMgbm90IGNvbnRhaW4gYSBwb3J0IG51bWJlciwgdGhlbiBkZWZhdWx0IGl0IHRvICI4MCIKLSAgICAgIHBvcnQgPQotICAgICAgICAoZW5kUG9pbnRzW2ldLmdldFBvcnQoKSA9PSAtMSkKLSAgICAgICAgICA/ICI4MCIKLSAgICAgICAgICA6IFN0cmluZy52YWx1ZU9mKGVuZFBvaW50c1tpXS5nZXRQb3J0KCkpOwotICAgICAgaWYgKGhvc3RBbmRQb3J0LmVxdWFscyhlbmRQb2ludHNbaV0uZ2V0SG9zdCgpICsgIjoiICsgcG9ydCkpCi0gICAgICB7Ci0gICAgICAgIG1hdGNoZWRFbmRwb2ludHMuYWRkKGVuZFBvaW50c1tpXSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiAoVVJJW10pIG1hdGNoZWRFbmRwb2ludHMudG9BcnJheShuZXcgVVJJWzBdKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBvcGVyYXRpb24uCi0gICAqIEByZXR1cm4gT3BlcmF0aW9uCi0gICAqLwotICBwdWJsaWMgT3BlcmF0aW9uW10gZ2V0T3BlcmF0aW9ucygpCi0gIHsKLSAgICByZXR1cm4gb3BlcmF0aW9uczsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBwb3J0VHlwZS4KLSAgICogQHJldHVybiBQb3J0VHlwZQotICAgKi8KLSAgcHVibGljIFBvcnRUeXBlW10gZ2V0UG9ydFR5cGUoKQotICB7Ci0gICAgcmV0dXJuIHBvcnRUeXBlczsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGhvc3RBbmRQb3J0IG1hdGNoZXMgYXQgbGVhc3Qgb25lIGNvbnRleHQgZW5kcG9pbnQuCi0gICAqIEBwYXJhbSBob3N0QW5kUG9ydFN0cmluZyBhIGhvc3QgYW5kIHBvcnQgbG9jYXRpb24uCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgaG9zdEFuZFBvcnQgbWF0Y2hlcyBhdCBsZWFzdCBvbmUgY29udGV4dCBlbmRwb2ludC4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgZ2l2ZW4gaG9zdGFuZFBvcnQgU3RyaW5nIGRvZXMgbm90IGNvbnZlcnQgdG8gVVJJLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaGFzSG9zdEFuZFBvcnQoU3RyaW5nIGhvc3RBbmRQb3J0U3RyaW5nKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBVUkkgaG9zdEFuZFBvcnQ7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgaG9zdEFuZFBvcnQgPSBuZXcgVVJJKGhvc3RBbmRQb3J0U3RyaW5nKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBXU0lFeGNlcHRpb24oCi0gICAgICAgICJDb3VsZCBub3QgY29udmVydCBzdHJpbmcgdG8gVVJJOiAiICsgaG9zdEFuZFBvcnRTdHJpbmcpOwotICAgIH0KLSAgICBTdHJpbmcgaG9zdCA9IGhvc3RBbmRQb3J0LmdldEhvc3QoKTsKLSAgICBpbnQgcG9ydCA9IGhvc3RBbmRQb3J0LmdldFBvcnQoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHRoaXMuZW5kUG9pbnRzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGlmICh0aGlzLmVuZFBvaW50c1tpXS5nZXRIb3N0KCkuZXF1YWxzKGhvc3QpCi0gICAgICAgICYmIHRoaXMuZW5kUG9pbnRzW2ldLmdldFBvcnQoKSA9PSBwb3J0KQotICAgICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOyAvLyBmb3Igbm93Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgZGVmaW5pdGlvbnMuCi0gICAqIEByZXR1cm4gRGVmaW5pdGlvbltdCi0gICAqLwotICBwdWJsaWMgRGVmaW5pdGlvbltdIGdldERlZmluaXRpb25zKCkKLSAgewotICAgIHJldHVybiBkZWZpbml0aW9uczsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBpbXBvcnRzLgotICAgKiBAcmV0dXJuIEltcG9ydFtdCi0gICAqLwotICBwdWJsaWMgSW1wb3J0W10gZ2V0SW1wb3J0cygpCi0gIHsKLSAgICByZXR1cm4gaW1wb3J0czsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBtZXNzYWdlcy4KLSAgICogQHJldHVybiBNZXNzYWdlW10KLSAgICovCi0gIHB1YmxpYyBNZXNzYWdlW10gZ2V0TWVzc2FnZXMoKQotICB7Ci0gICAgcmV0dXJuIG1lc3NhZ2VzOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHBvcnRzLgotICAgKiBAcmV0dXJuIFBvcnRbXQotICAgKi8KLSAgcHVibGljIFBvcnRbXSBnZXRQb3J0cygpCi0gIHsKLSAgICByZXR1cm4gcG9ydHM7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcG9ydFR5cGVzLgotICAgKiBAcmV0dXJuIFBvcnRUeXBlW10KLSAgICovCi0gIHB1YmxpYyBQb3J0VHlwZVtdIGdldFBvcnRUeXBlcygpCi0gIHsKLSAgICByZXR1cm4gcG9ydFR5cGVzOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHR5cGVzLgotICAgKiBAcmV0dXJuIFR5cGVzW10KLSAgICovCi0gIHB1YmxpYyBUeXBlc1tdIGdldFR5cGVzKCkKLSAgewotICAgIHJldHVybiB0eXBlczsKLSAgfQotICAvKioKLSAgICogUmV0dXJucyB0aGUgd3NkbERvY3VtZW50LgotICAgKiBAcmV0dXJuIFdTRExEb2N1bWVudAotICAgKi8KLSAgcHVibGljIFdTRExEb2N1bWVudCBnZXRXc2RsRG9jdW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIHdzZGxEb2N1bWVudDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm4gdGhlIGRlZmluaXRpb24gZWxlbWVudCB0aGF0IGNvbnRhaW5zIHRoZSB0eXBlcyBlbGVtZW50LgotICAgKiBAcGFyYW0gdHlwZXMgYSBUeXBlcyBvYmplY3QuCi0gICAqIEByZXR1cm4gdGhlIGRlZmluaXRpb24gZWxlbWVudCB0aGF0IGNvbnRhaW5zIHRoZSB0eXBlcyBlbGVtZW50LgotICAgKi8KLSAgcHVibGljIERlZmluaXRpb24gZ2V0RGVmaW5pdGlvbihUeXBlcyB0eXBlcykKLSAgewotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG51bGw7Ci0gICAgVHlwZXMgY2hlY2tUeXBlczsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVmaW5pdGlvbnMubGVuZ3RoICYmIGRlZmluaXRpb24gPT0gbnVsbDsgaSsrKQotICAgIHsKLSAgICAgIGlmICgoKGNoZWNrVHlwZXMgPSBkZWZpbml0aW9uc1tpXS5nZXRUeXBlcygpKSAhPSBudWxsKQotICAgICAgICAmJiAoY2hlY2tUeXBlcy5lcXVhbHModHlwZXMpKSkKLSAgICAgIHsKLSAgICAgICAgZGVmaW5pdGlvbiA9IGRlZmluaXRpb25zW2ldOwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBkZWZpbml0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybiB0aGUgZGVmaW5pdGlvbiBlbGVtZW50IHRoYXQgY29udGFpbnMgdGhlIGJpbmRpbmcgZWxlbWVudC4KLSAgICogQHBhcmFtIGJpbmRpbmcgYSBCaW5kaW5nIG9iamVjdC4KLSAgICogQHJldHVybiB0aGUgZGVmaW5pdGlvbiBlbGVtZW50IHRoYXQgY29udGFpbnMgdGhlIGJpbmRpbmcgZWxlbWVudC4KLSAgICovCi0gIHB1YmxpYyBEZWZpbml0aW9uIGdldERlZmluaXRpb24oQmluZGluZyBiaW5kaW5nKQotICB7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gbnVsbDsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVmaW5pdGlvbnMubGVuZ3RoICYmIGRlZmluaXRpb24gPT0gbnVsbDsgaSsrKQotICAgIHsKLSAgICAgIGlmIChkZWZpbml0aW9uc1tpXS5nZXRCaW5kaW5nKGJpbmRpbmcuZ2V0UU5hbWUoKSkgIT0gbnVsbCkKLSAgICAgICAgZGVmaW5pdGlvbiA9IGRlZmluaXRpb25zW2ldOwotICAgIH0KLQotICAgIHJldHVybiBkZWZpbml0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybiB0aGUgZGVmaW5pdGlvbiBlbGVtZW50IHRoYXQgY29udGFpbnMgdGhlIHBvcnRUeXBlIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBwb3J0VHlwZSBhIFBvcnRUeXBlIG9iamVjdC4KLSAgICogQHJldHVybiB0aGUgZGVmaW5pdGlvbiBlbGVtZW50IHRoYXQgY29udGFpbnMgdGhlIHBvcnRUeXBlIGVsZW1lbnQuCi0gICAqLwotICBwdWJsaWMgRGVmaW5pdGlvbiBnZXREZWZpbml0aW9uKFBvcnRUeXBlIHBvcnRUeXBlKQotICB7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gbnVsbDsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVmaW5pdGlvbnMubGVuZ3RoICYmIGRlZmluaXRpb24gPT0gbnVsbDsgaSsrKQotICAgIHsKLSAgICAgIGlmIChkZWZpbml0aW9uc1tpXS5nZXRQb3J0VHlwZShwb3J0VHlwZS5nZXRRTmFtZSgpKSAhPSBudWxsKQotICAgICAgICBkZWZpbml0aW9uID0gZGVmaW5pdGlvbnNbaV07Ci0gICAgfQotCi0gICAgcmV0dXJuIGRlZmluaXRpb247Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJuIHRoZSBkZWZpbml0aW9uIGVsZW1lbnQgdGhhdCBjb250YWlucyB0aGUgbWVzc2FnZS4KLSAgICogQHBhcmFtIG1lc3NhZ2UgYSBNZXNzYWdlIG9iamVjdC4KLSAgICogQHJldHVybiB0aGUgZGVmaW5pdGlvbiBlbGVtZW50IHRoYXQgY29udGFpbnMgdGhlIG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgRGVmaW5pdGlvbiBnZXREZWZpbml0aW9uKE1lc3NhZ2UgbWVzc2FnZSkKLSAgewotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG51bGw7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlZmluaXRpb25zLmxlbmd0aCAmJiBkZWZpbml0aW9uID09IG51bGw7IGkrKykKLSAgICB7Ci0gICAgICBpZiAoZGVmaW5pdGlvbnNbaV0uZ2V0TWVzc2FnZShtZXNzYWdlLmdldFFOYW1lKCkpICE9IG51bGwpCi0gICAgICAgIGRlZmluaXRpb24gPSBkZWZpbml0aW9uc1tpXTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZGVmaW5pdGlvbjsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9FbnZpcm9ubWVudEluZm8uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL0Vudmlyb25tZW50SW5mby5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjNlYjRkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL0Vudmlyb25tZW50SW5mby5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyOwotCi1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuWE1MSW5mbzsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIG1haW50YWlucyB0aGUgRW52aXJvbm1lbnQgaW5mb3JtYXRpb24uCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBFbnZpcm9ubWVudEluZm8gaW1wbGVtZW50cyBYTUxJbmZvCi17Ci0gIC8qKgotICAgKiBMb2cgdGltZXN0YW1wLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBsb2dUaW1lc3RhbXAgPSBudWxsOwotCi0gIC8qKgotICAgKiBNb25pdG9yIGNvbmZpZyBjb21tZW50LgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBtb25pdG9yQ29uZmlnQ29tbWVudCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBvYmplY3QuCi0gICAqIEBwYXJhbSBsb2dUaW1lc3RhbXAgdGhlIGxvZyB0aW1lc3RhbXAuCi0gICAqIEBwYXJhbSBtb25pdG9yQ29uZmlnQ29tbWVudCB0aGUgTW9uaXRvciBjb25maWcgY29tbWVudC4KLSAgICovCi0gIHB1YmxpYyBFbnZpcm9ubWVudEluZm8oU3RyaW5nIGxvZ1RpbWVzdGFtcCwgU3RyaW5nIG1vbml0b3JDb25maWdDb21tZW50KQotICB7Ci0gICAgdGhpcy5sb2dUaW1lc3RhbXAgPSBsb2dUaW1lc3RhbXA7Ci0gICAgdGhpcy5tb25pdG9yQ29uZmlnQ29tbWVudCA9IG1vbml0b3JDb25maWdDb21tZW50OwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuWE1MSW5mbyN0b1hNTFN0cmluZyhTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvWE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIFN0cmluZyBuc05hbWUgPSBuYW1lc3BhY2VOYW1lOwotICAgIGlmICghbnNOYW1lLmVxdWFscygiIikpCi0gICAgICBuc05hbWUgKz0gIjoiOwotCi0gICAgLy8gU3RhcnQgZWxlbWVudAotICAgIHB3LnByaW50KCIgICAgICA8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX0xPRyArICIgIik7Ci0gICAgcHcucHJpbnRsbigKLSAgICAgIFdTSUNvbnN0YW50cy5BVFRSX1RJTUVTVEFNUCArICI9XCIiICsgdGhpcy5sb2dUaW1lc3RhbXAgKyAiXCIvPiIpOwotCi0gICAgcHcucHJpbnQoCi0gICAgICAiICAgICAgICA8IgotICAgICAgICArIFdTSUNvbnN0YW50cy5OU19OQU1FX1dTSV9MT0cKLSAgICAgICAgKyBXU0lDb25zdGFudHMuRUxFTV9DT01NRU5UCi0gICAgICAgICsgIj4iKTsKLSAgICBwdy5wcmludCh0aGlzLm1vbml0b3JDb25maWdDb21tZW50KTsKLSAgICBwdy5wcmludGxuKAotICAgICAgIiAgICAgICAgPC8iCi0gICAgICAgICsgV1NJQ29uc3RhbnRzLk5TX05BTUVfV1NJX0xPRwotICAgICAgICArIFdTSUNvbnN0YW50cy5FTEVNX0NPTU1FTlQKLSAgICAgICAgKyAiPiIpOwotCi0gICAgLy8gRW5kIGVsZW1lbnQKLSAgICBwdy5wcmludGxuKCIgICAgPC8iICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fTE9HICsgIj4iKTsKLQotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL1NlcnZpY2VSZWZlcmVuY2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL1NlcnZpY2VSZWZlcmVuY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzczZTQ4NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9TZXJ2aWNlUmVmZXJlbmNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5BbmFseXplckNvbmZpZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLldTRExFbGVtZW50OwotCi0vKioKLSAqIFRoaXMgY2xhc3MgY29udGFpbnMgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiB0aGF0IGlzIG5lZWRlZCB0byBwcm9jZXNzIGRlc2NyaXB0aW9uIHRlc3QgYXNzZXJ0aW9ucy4gIFRoZSBpbmZyb21hdGlvbgotICogaW4gdGhpcyBvYmplY3Qgd2lsbCBiZSBkZXJpdmVkIGZyb20gYW5hbHl6ZXIgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiwgVURESSBlbnRyaWVzLCBvciB0aGUgV1NETCBwb3J0IGVsZW1lbnQuIAotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgU2VydmljZVJlZmVyZW5jZQotewotICBwcm90ZWN0ZWQgV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQ7Ci0gIHByb3RlY3RlZCBTdHJpbmcgd3NkbExvY2F0aW9uOwotICBwcm90ZWN0ZWQgU3RyaW5nIHNlcnZpY2VMb2NhdGlvbjsKLQotICAvKioKLSAgICogQ3JlYXRlIHNlcnZpY2UgcmVmZXJlbmNlIHdpdGhvdXQgcmVmZXJlbmNlcy4gIEFsbCBvZiB0aGVtIHdpbGwgYmUgc2V0IGxhdGVyIGFzIHRlc3QgYXNzZXJ0aW9ucyBhcmUgCi0gICAqIGJlaW5nIHByb2Nlc3NlZC4KLSAgICovCi0gIHB1YmxpYyBTZXJ2aWNlUmVmZXJlbmNlKCkKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBzZXJ2aWNlIHJlZmVyZW5jZSBmcm9tIGVudHJpZXMgc3BlY2lmaWVkIGluIHRoZSBhbmFseXplciBjb25maWcgZmlsZS4gIFRoaXMgaW5mb3JtYXRpb24gbWF5IGluY2x1ZGUKLSAgICogdGhlIGluZm9ybWF0aW9uIGV4dHJhY3RlZCBmcm9tIHRoZSB3c2RsRWxlbWVudCwgd3NkbFVSSSBhbmQgc2VydmljZUxvY2F0aW9uIGVsZW1lbnRzLgotICAgKiBAcGFyYW0gYW5hbHl6ZXJDb25maWcgYW4gQW5hbHl6ZXJDb25maWcgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFNlcnZpY2VSZWZlcmVuY2UoQW5hbHl6ZXJDb25maWcgYW5hbHl6ZXJDb25maWcpCi0gIHsKLSAgICB0aGlzLndzZGxFbGVtZW50ID0gYW5hbHl6ZXJDb25maWcuZ2V0V1NETEVsZW1lbnQoKTsKLSAgICB0aGlzLndzZGxMb2NhdGlvbiA9IGFuYWx5emVyQ29uZmlnLmdldFdTRExMb2NhdGlvbigpOwotICAgIHRoaXMuc2VydmljZUxvY2F0aW9uID0gYW5hbHl6ZXJDb25maWcuZ2V0U2VydmljZUxvY2F0aW9uKCk7Ci0KLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIFdTREwgZWxlbWVudCB3aGVyZSBhbmFseXNpcyBzaG91bGQgYmVnaW4uCi0gICAqIEByZXR1cm4gaGUgV1NETCBlbGVtZW50IHdoZXJlIGFuYWx5c2lzIHNob3VsZCBiZWdpbi4KLSAgICogQHNlZSAjc2V0V1NETEVsZW1lbnQKLSAgICovCi0gIHB1YmxpYyBXU0RMRWxlbWVudCBnZXRXU0RMRWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy53c2RsRWxlbWVudDsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQgdGhlIFdTREwgZWxlbWVudCB3aGVyZSBhbmFseXNpcyBzaG91bGQgYmVnaW4uCi0gICAqIEBwYXJhbSB3c2RsRWxlbWVudCB0aGUgV1NETCBlbGVtZW50IHdoZXJlIGFuYWx5c2lzIHNob3VsZCBiZWdpbi4KLSAgICogQHNlZSAjZ2V0V1NETEVsZW1lbnQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdTRExFbGVtZW50KFdTRExFbGVtZW50IHdzZGxFbGVtZW50KQotICB7Ci0gICAgdGhpcy53c2RsRWxlbWVudCA9IHdzZGxFbGVtZW50OwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBXU0RMIGRvY3VtZW50IGxvY2F0aW9uLgotICAgKiBAcmV0dXJuIFdTREwgZG9jdW1lbnQgbG9jYXRpb24uCi0gICAqIEBzZWUgI3NldFdTRExMb2NhdGlvbgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRXU0RMTG9jYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIHRoaXMud3NkbExvY2F0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldCBXU0RMIGRvY3VtZW50IGxvY2F0aW9uLgotICAgKiBAcGFyYW0gd3NkbExvY2F0aW9uIFdTREwgZG9jdW1lbnQgbG9jYXRpb24uCi0gICAqIEBzZWUgI2dldFdTRExMb2NhdGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0V1NETExvY2F0aW9uKFN0cmluZyB3c2RsTG9jYXRpb24pCi0gIHsKLSAgICB0aGlzLndzZGxMb2NhdGlvbiA9IHdzZGxMb2NhdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgV2ViIHNlcnZpY2UgbG9jYXRpb24uCi0gICAqIEByZXR1cm4gV2ViIHNlcnZpY2UgbG9jYXRpb24uCi0gICAqIEBzZWUgI3NldFNlcnZpY2VMb2NhdGlvbgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlTG9jYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuc2VydmljZUxvY2F0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldCBXZWIgc2VydmljZSBsb2NhdGlvbi4KLSAgICogQHBhcmFtIHNlcnZpY2VMb2NhdGlvbiBlYiBzZXJ2aWNlIGxvY2F0aW9uLgotICAgKiBAc2VlICNnZXRTZXJ2aWNlTG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VMb2NhdGlvbihTdHJpbmcgc2VydmljZUxvY2F0aW9uKQotICB7Ci0gICAgdGhpcy5zZXJ2aWNlTG9jYXRpb24gPSBzZXJ2aWNlTG9jYXRpb247Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9BbmFseXplckNvbmZpZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL0FuYWx5emVyQ29uZmlnLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0YTIxOTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL0FuYWx5emVyQ29uZmlnLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZzsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmNvbW1vbi5BZGRTdHlsZVNoZWV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5XU0lEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5NZXNzYWdlTGlzdDsKLQotLyoqCi0gKiBUaGlzIGlzIHRoZSBpbnRlcmZhY2UgZm9yIHRoZSBhbmFsenllciBjb25maWd1cmF0aW9uIGZpbGUuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBBbmFseXplckNvbmZpZyBleHRlbmRzIFdTSURvY3VtZW50Ci17Ci0gIC8qKgotICAgKiBFbGVtZW50IG5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX05BTUUgPSBXU0lDb25zdGFudHMuRUxFTV9DT05GSUc7Ci0KLSAgLyoqCi0gICAqIFFOYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBRTkFNRSA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NJX0FOQUxZWkVSX0NPTkZJRywgRUxFTV9OQU1FKTsKLQotICAvKioKLSAgICogQ29ycmVsYXRpb24gdHlwZXMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDT1JSRUxBVElPTl9UWVBFX09QRVJBVElPTiA9ICJvcGVyYXRpb24iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDT1JSRUxBVElPTl9UWVBFX05BTUVTUEFDRSA9ICJuYW1lc3BhY2UiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDT1JSRUxBVElPTl9UWVBFX0VORFBPSU5UID0gImVuZHBvaW50IjsKLQotICAvKioKLSAgICogSW5pdGlhbGl6ZSBhbmFseXplciBjb25maWcuCi0gICAqIEBwYXJhbSBtZXNzYWdlTGlzdCBhIE1lc3NhZ2VMaXN0IG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXQoTWVzc2FnZUxpc3QgbWVzc2FnZUxpc3QpOwotCi0gIC8qKgotICAgKiBHZXQgb3B0aW9uYWwgZGVzY3JpcHRpb24uCi0gICAqIEByZXR1cm4gb3B0aW9uYWwgZGVzY3JpcHRpb24uCi0gICAqIEBzZWUgI3NldERlc2NyaXB0aW9uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBvcHRpb25hbCBkZXNjcmlwdGlvbi4KLSAgICogQHBhcmFtIGRlc2NyaXB0aW9uICBhbiBvcHRpb25hbCBkZXNjcmlwdGlvbi4KLSAgICogQHNlZSAjZ2V0RGVzY3JpcHRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldERlc2NyaXB0aW9uKFN0cmluZyBkZXNjcmlwdGlvbik7Ci0KLSAgLyoqCi0gICAqIEdldCB2ZXJib3NlIG9wdGlvbi4KLSAgICogQHJldHVybiB0cnVlIGlmIHZlcmJvc2UuCi0gICAqIEBzZWUgI3NldFZlcmJvc2VPcHRpb24KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldFZlcmJvc2VPcHRpb24oKTsKLQotICAvKioKLSAgICogU2V0IHZlcmJvc2Ugb3B0aW9uLgotICAgKiBAcGFyYW0gdmVyYm9zZSB2ZXJib3NlIG9wdGlvbi4KLSAgICogQHNlZSAjZ2V0VmVyYm9zZU9wdGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VmVyYm9zZU9wdGlvbihib29sZWFuIHZlcmJvc2UpOwotCi0gIC8qKgotICAgKiBHZXQgYXNzZXJ0aW9uIHJlc3VsdHMgb3B0aW9uLgotICAgKiBAcmV0dXJuIGFzc2VydGlvbiByZXN1bHRzIG9wdGlvbi4KLSAgICogQHNlZSAjc2V0QXNzZXJ0aW9uUmVzdWx0c09wdGlvbgotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdHNPcHRpb24gZ2V0QXNzZXJ0aW9uUmVzdWx0c09wdGlvbigpOwotCi0gIC8qKgotICAgKiBTZXQgYXNzZXJ0aW9uIHJlc3VsdHMgb3B0aW9uLgotICAgKiBAcGFyYW0gYXNzZXJ0aW9uUmVzdWx0c09wdGlvbiAgYXNzZXJ0aW9uIHJlc3VsdHMgb3B0aW9uLgotICAgKiBAc2VlICNnZXRBc3NlcnRpb25SZXN1bHRzT3B0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRBc3NlcnRpb25SZXN1bHRzT3B0aW9uKEFzc2VydGlvblJlc3VsdHNPcHRpb24gYXNzZXJ0aW9uUmVzdWx0c09wdGlvbik7Ci0KLSAgLyoqCi0gICAqIEdldCByZXBsYWNlIHJlcG9ydCBmaWxlIG9wdGlvbi4KLSAgICogQHJldHVybiByZXBsYWNlIHJlcG9ydCBmaWxlIG9wdGlvbi4KLSAgICogQHNlZSAjc2V0UmVwbGFjZVJlcG9ydAotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0UmVwbGFjZVJlcG9ydCgpOwotCi0gIC8qKgotICAgKiBTZXQgcmVwbGFjZSByZXBvcnQgZmlsZSBvcHRpb24uCi0gICAqIEBwYXJhbSByZXBsYWNlUmVwb3J0ICBlcGxhY2UgcmVwb3J0IGZpbGUgb3B0aW9uLgotICAgKiBAc2VlICNnZXRSZXBsYWNlUmVwb3J0Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZXBsYWNlUmVwb3J0KGJvb2xlYW4gcmVwbGFjZVJlcG9ydCk7Ci0KLSAgLyoqCi0gICAqIEdldCByZXBvcnQgZmlsZSBsb2NhdGlvbi4KLSAgICogQHJldHVybiByZXBvcnQgZmlsZSBsb2NhdGlvbi4KLSAgICogQHNlZSAjc2V0UmVwb3J0TG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVwb3J0TG9jYXRpb24oKTsKLQotICAvKioKLSAgICogU2V0IHJlcGxhY2UgcmVwb3J0IGZpbGUgb3B0aW9uLgotICAgKiBAcGFyYW0gcmVwb3J0VVJJIHJlcG9ydCBsb2NhdGlvbi4KLSAgICogQHNlZSAjZ2V0UmVwb3J0TG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFJlcG9ydExvY2F0aW9uKFN0cmluZyByZXBvcnRVUkkpOwotCi0gIC8qKgotICAgKiBHZXQgc3R5bGUgc2hlZXQuCi0gICAqIEByZXR1cm4gc3R5bGUgc2hlZXQuCi0gICAqIEBzZWUgI3NldEFkZFN0eWxlU2hlZXQKLSAgICovCi0gIHB1YmxpYyBBZGRTdHlsZVNoZWV0IGdldEFkZFN0eWxlU2hlZXQoKTsKLQotICAvKioKLSAgICogU2V0IHN0eWxlIHNoZWV0LgotICAgKiBAcGFyYW0gYWRkU3R5bGVTaGVldCBhIHN0eWxlIHNoZWV0LgotICAgKiBAc2VlICNnZXRBZGRTdHlsZVNoZWV0Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRBZGRTdHlsZVNoZWV0KEFkZFN0eWxlU2hlZXQgYWRkU3R5bGVTaGVldCk7Ci0KLSAgLyoqCi0gICAqIEdldCBwcm9maWxlIHRlc3QgYXNzZXJ0aW9ucyBkb2N1bWVudCBsb2NhdGlvbi4KLSAgICogQHJldHVybiByb2ZpbGUgdGVzdCBhc3NlcnRpb25zIGRvY3VtZW50IGxvY2F0aW9uLgotICAgKiBAc2VlICNzZXRUZXN0QXNzZXJ0aW9uc0RvY3VtZW50TG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VGVzdEFzc2VydGlvbnNEb2N1bWVudExvY2F0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBwcm9maWxlIHRlc3QgYXNzZXJ0aW9ucyBkb2N1bWVudCBsb2NhdGlvbi4KLSAgICogQHBhcmFtIHRlc3RBc3NlcnRpb25zRG9jdW1lbnRVUkkgcHJvZmlsZSB0ZXN0IGFzc2VydGlvbnMgZG9jdW1lbnQgbG9jYXRpb24uCi0gICAqIEBzZWUgI2dldFRlc3RBc3NlcnRpb25zRG9jdW1lbnRMb2NhdGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VGVzdEFzc2VydGlvbnNEb2N1bWVudExvY2F0aW9uKFN0cmluZyB0ZXN0QXNzZXJ0aW9uc0RvY3VtZW50VVJJKTsKLQotICAvKioKLSAgICogR2V0IG1lc2FnZSBsb2cgbG9jYXRpb24uCi0gICAqIEByZXR1cm4gbWVzYWdlIGxvZyBsb2NhdGlvbi4KLSAgICogQHNlZSAjc2V0TG9nTG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9nTG9jYXRpb24oKTsKLQotICAvKioKLSAgICogU2V0IG1lc3NhZ2UgbG9nIGxvY2F0aW9uLgotICAgKiBAcGFyYW0gbG9nVVJJIG1lc3NhZ2UgbG9nIGxvY2F0aW9uLgotICAgKiBAc2VlICNnZXRMb2dMb2NhdGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TG9nTG9jYXRpb24oU3RyaW5nIGxvZ1VSSSk7Ci0KLSAgLyoqCi0gICAqIElzIG1lc3NhZ2UgbG9nIGxvY2F0aW9uIHNwZWNpZmllZC4KLSAgICogQHJldHVybiB0cnVlIGlmIG1lc3NhZ2UgbG9nIGxvY2F0aW9uIGlzIHNldC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzTG9nU2V0KCk7Ci0KLSAgLyoqCi0gICAqIEdldCBjb3JyZWxhdGlvbiB0eXBlLgotICAgKiBAcmV0dXJuIGNvcnJlbGF0aW9uIHR5cGUuCi0gICAqIEBzZWUgI3NldENvcnJlbGF0aW9uVHlwZQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRDb3JyZWxhdGlvblR5cGUoKTsKLQotICAvKioKLSAgICogU2V0IGNvcnJlbGF0aW9uIHR5cGUuCi0gICAqIEBwYXJhbSBjb3JyZWxhdGlvblR5cGUgY29ycmVsYXRpb24gdHlwZS4KLSAgICogQHNlZSAjZ2V0Q29ycmVsYXRpb25UeXBlCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDb3JyZWxhdGlvblR5cGUoU3RyaW5nIGNvcnJlbGF0aW9uVHlwZSk7Ci0KLSAgLyoqCi0gICAqIElzIFdTREwgcmVmZXJlbmNlIHNldC4KLSAgICogQHJldHVybiB0cnVlIGlmIFdTREwgcmVmZXJlbmNlIGlzIHNldC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzV1NETFJlZmVyZW5jZVNldCgpOwotCi0gIC8qKgotICAgKiBHZXQgV1NETCByZWZlcmVuY2UuCi0gICAqIEByZXR1cm4gV1NETCByZWZlcmVuY2UuCi0gICAqIEBzZWUgI3NldFdTRExSZWZlcmVuY2UKLSAgICovCi0gIHB1YmxpYyBXU0RMUmVmZXJlbmNlIGdldFdTRExSZWZlcmVuY2UoKTsKLQotICAvKioKLSAgICogU2V0IFdTREwgcmVmZXJlbmNlLgotICAgKiBAcGFyYW0gd3NkbFJlZmVyZW5jZSBXU0RMIHJlZmVyZW5jZS4KLSAgICogQHNlZSAjZ2V0V1NETFJlZmVyZW5jZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0V1NETFJlZmVyZW5jZShXU0RMUmVmZXJlbmNlIHdzZGxSZWZlcmVuY2UpOwotCi0gIC8qKgotICAgKiBHZXQgV1NETCBlbGVtZW50LgotICAgKiBAcmV0dXJuIFdTREwgZWxlbWVudC4KLSAgICovCi0gIHB1YmxpYyBXU0RMRWxlbWVudCBnZXRXU0RMRWxlbWVudCgpOwotCi0gIC8qKgotICAgKiBHZXQgV1NETCBkb2N1bWVudCBsb2NhdGlvbi4KLSAgICogQHJldHVybiBXU0RMIGRvY3VtZW50IGxvY2F0aW9uLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRXU0RMTG9jYXRpb24oKTsKLQotICAvKioKLSAgICogR2V0IHNlcnZpY2UgbG9jYXRpb24uCi0gICAqIEByZXR1cm4gc2VydmljZSBsb2NhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmljZUxvY2F0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIElzIFVEREkgcmVmZXJlbmNlIHNldC4KLSAgICogQHJldHVybiB0cnVlIGlmIFVEREkgcmVmZXJlbmNlIGlzIHNldC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzVURESVJlZmVyZW5jZVNldCgpOwotCi0gIC8qKgotICAgKiBHZXQgVURESSByZWZlcmVuY2UuCi0gICAqIEByZXR1cm4gVURESSByZWZlcmVuY2UuCi0gICAqIEBzZWUgI3NldFVERElSZWZlcmVuY2UKLSAgICovCi0gIHB1YmxpYyBVRERJUmVmZXJlbmNlIGdldFVERElSZWZlcmVuY2UoKTsKLQotICAvKioKLSAgICogU2V0IFVEREkgcmVmZXJlbmNlLgotICAgKiBAcGFyYW0gdWRkaVJlZmVyZW5jZSBVRERJIHJlZmVyZW5jZS4KLSAgICogQHNlZSAjZ2V0VURESVJlZmVyZW5jZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VURESVJlZmVyZW5jZShVRERJUmVmZXJlbmNlIHVkZGlSZWZlcmVuY2UpOwotCi0gIC8qKgotICAgKiBQYXJzZSB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KLSAgICogQHBhcmFtIGFyZ3MgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCi0gICAqIEBwYXJhbSB2YWxpZGF0ZSBmbGFnIGZvciBjb21tYW5kIGxpbmUgdmFsaWRhdGlvbi4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbXMgcGFyc2luZyB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHBhcnNlQXJncyhTdHJpbmdbXSBhcmdzLCBib29sZWFuIHZhbGlkYXRlKSB0aHJvd3MgV1NJRXhjZXB0aW9uOwotCi0gIC8qKgotICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgb2JqZWN0LgotICAgKiBAcmV0dXJuIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9BbmFseXplckNvbmZpZ1JlYWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL0FuYWx5emVyQ29uZmlnUmVhZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjMzY0ZmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL0FuYWx5emVyQ29uZmlnUmVhZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnOwotCi1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudFJlYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5NZXNzYWdlTGlzdDsKLQotCi0vKioKLSAqIERlZmluZXMgdGhlIGludGVyZmFjZSB1c2VkIHRvIHJlYWQgdGhlIGFuYWx5emVyIGNvbmZpZyBkb2N1bWVudHMuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBBbmFseXplckNvbmZpZ1JlYWRlciBleHRlbmRzIERvY3VtZW50UmVhZGVyIHsKLQotICAvKioKLSAgICogSW5pdGlhbGl6ZSBhbmFseXplciBjb25maWcgcmVhZGVyLgotICAgKiBAcGFyYW0gbWVzc2FnZUxpc3QgYSBNZXNzYWdlTGlzdCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCBpbml0KE1lc3NhZ2VMaXN0IG1lc3NhZ2VMaXN0KTsKLSAgCi0gIC8qKgotICAgKiBSZWFkIHRoZSBhbmFseXplciBjb25maWcgZmlsZS4KLSAgICogQHBhcmFtIGFuYWx5emVyQ29uZmlnVVJJIHRoZSBhbmFseXplciBjb25maWcgZmlsZSBsb2NhdGlvbi4KLSAgICogQHJldHVybiB0aGUgQW5hbHl6ZXJDb25maWcgb2JqZWN0LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB1bmFibGUgdG8gcmVhZCB0aGUgYW5hbHl6ZXIgY29uZmlnIGZpbGUuCi0gICAqLwotICBwdWJsaWMgQW5hbHl6ZXJDb25maWcgcmVhZEFuYWx5emVyQ29uZmlnKFN0cmluZyBhbmFseXplckNvbmZpZ1VSSSkgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLSAgCi0gIC8qKgotICAgKiBSZWFkIHRoZSBhbmFseXplciBjb25maWcgZmlsZS4KLSAgICogQHBhcmFtIHJlYWRlciBhIFJlYWRlciBvYmplY3QuCi0gICAqIEByZXR1cm4gdGhlIEFuYWx5emVyQ29uZmlnIG9iamVjdC4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdW5hYmxlIHRvIHBhcnNlIHRoZSBhbmFseXplciBjb25maWcgZmlsZS4KLSAgICovCi0gIHB1YmxpYyBBbmFseXplckNvbmZpZyByZWFkQW5hbHl6ZXJDb25maWcoUmVhZGVyIHJlYWRlcikgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLX0KLQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9jb25maWcvQXNzZXJ0aW9uUmVzdWx0VHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL0Fzc2VydGlvblJlc3VsdFR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDIwYzlkMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9jb25maWcvQXNzZXJ0aW9uUmVzdWx0VHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLQotLyoqCi0gKiBUZXN0IGFzc2VydGlvbiByZXN1bHQgdHlwZS4KLSAqCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBBc3NlcnRpb25SZXN1bHRUeXBlCi17Ci0gIC8qKgotICAgKiBUaGlzIHR5cGUuCi0gICAqLwotICBwcml2YXRlIFN0cmluZyByZXN1bHRUeXBlID0gX0FMTDsKLQotICAvKioKLSAgICogU3RyaW5nIHZlcnNpb24gb2YgcmVzdWx0IHR5cGVzLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIF9BTEwgPSAiYWxsIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIF9OT1RfSU5GTyA9ICJub3RJbmZvIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIF9PTkxZX0ZBSUxFRCA9ICJvbmx5RmFpbGVkIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIF9OT1RfUEFTU0VEID0gIm5vdFBhc3NlZCI7Ci0KLSAgLyoqCi0gICAqIFJlc3VsdCB0eXBlcy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgQXNzZXJ0aW9uUmVzdWx0VHlwZSBBTEwgPSBuZXcgQXNzZXJ0aW9uUmVzdWx0VHlwZShfQUxMKTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBBc3NlcnRpb25SZXN1bHRUeXBlIE5PVF9JTkZPID0gbmV3IEFzc2VydGlvblJlc3VsdFR5cGUoX05PVF9JTkZPKTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBBc3NlcnRpb25SZXN1bHRUeXBlIE9OTFlfRkFJTEVEID0KLSAgICBuZXcgQXNzZXJ0aW9uUmVzdWx0VHlwZShfT05MWV9GQUlMRUQpOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIEFzc2VydGlvblJlc3VsdFR5cGUgTk9UX1BBU1NFRCA9Ci0gICAgbmV3IEFzc2VydGlvblJlc3VsdFR5cGUoX05PVF9QQVNTRUQpOwotCi0gIC8qKgotICAgKiBEbyBub3QgYWxsb3cgdGhpcyBvYmplY3QgdG8gYmUgY3JlYXRlZCB3aXRoIG51bGwgY29uc3RydWN0b3IuCi0gICAqLwotICBwcml2YXRlIEFzc2VydGlvblJlc3VsdFR5cGUoKQotICB7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIHJlc3VsdCB0eXBlLgotICAgKiBAcGFyYW0gcmVzdWx0VHlwZSBhIHJlc3VsdCB0eXBlLgotICAgKi8KLSAgcHJpdmF0ZSBBc3NlcnRpb25SZXN1bHRUeXBlKFN0cmluZyByZXN1bHRUeXBlKQotICB7Ci0gICAgdGhpcy5yZXN1bHRUeXBlID0gcmVzdWx0VHlwZTsKLSAgfQotCi0gIC8qKgotICAgKiBJcyByZXN1bHQgdHlwZSBhbGwuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgcmVzdWx0IHR5cGUgaXMgYWxsLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNBbGwoKQotICB7Ci0gICAgcmV0dXJuIHJlc3VsdFR5cGUuZXF1YWxzKF9BTEwpOwotICB9Ci0KLSAgLyoqCi0gICAqIElzIHJlc3VsdCB0eXBlIGZhaWxlZCBvbmx5LgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHJlc3VsdCB0eXBlIGlzIGZhaWxlZCBvbmx5LgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNGYWlsZWRPbmx5KCkKLSAgewotICAgIHJldHVybiByZXN1bHRUeXBlLmVxdWFscyhfT05MWV9GQUlMRUQpOwotICB9Ci0KLSAgLyoqCi0gICAqIElzIHJlc3VsdCB0eXBlIG5vdCBwYXNzZWQuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgcmVzdWx0IHR5cGUgaXMgbm90IHBhc3NlZC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzTm90UGFzc2VkKCkKLSAgewotICAgIHJldHVybiByZXN1bHRUeXBlLmVxdWFscyhfTk9UX1BBU1NFRCk7Ci0gIH0KLQotICAvKioKLSAgICogSXMgcmVzdWx0IHR5cGUgbm90IGluZm8uCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgcmVzdWx0IHR5cGUgaXMgbm90IGluZm8uCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc05vdEluZm8oKQotICB7Ci0gICAgcmV0dXJuIHJlc3VsdFR5cGUuZXF1YWxzKF9OT1RfSU5GTyk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHJlc3VsdCB0eXBlLgotICAgKiBAcmV0dXJuIHJlc3VsdCB0eXBlLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRUeXBlKCkKLSAgewotICAgIHJldHVybiByZXN1bHRUeXBlOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBuZXcgYXNzZXJ0aW9uIHJlc3VsdCB0eXBlLgotICAgKiBAcGFyYW0gcmVzdWx0VHlwZSBhbiBhc3NlcnRpb24gcmVzdWx0IHR5cGUuCi0gICAqIEByZXR1cm4gbmV3IGFzc2VydGlvbiByZXN1bHQgdHlwZS4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgaW52YWxpZCBhc3NlcnRpb24gcmVzdWx0IHR5cGUgd2FzIHNwZWNpZmllZC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgQXNzZXJ0aW9uUmVzdWx0VHlwZSBuZXdJbnN0YW5jZShTdHJpbmcgcmVzdWx0VHlwZSkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBBc3NlcnRpb25SZXN1bHRUeXBlIGFzc2VydGlvblJlc3VsdFR5cGUgPSBudWxsOwotCi0gICAgaWYgKHJlc3VsdFR5cGUgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBhc3NlcnRpb25SZXN1bHRUeXBlID0gTk9UX0lORk87Ci0gICAgfQotCi0gICAgZWxzZSBpZiAocmVzdWx0VHlwZS5lcXVhbHMoX0FMTCkpCi0gICAgewotICAgICAgYXNzZXJ0aW9uUmVzdWx0VHlwZSA9IEFMTDsKLSAgICB9Ci0KLSAgICBlbHNlIGlmIChyZXN1bHRUeXBlLmVxdWFscyhfT05MWV9GQUlMRUQpKQotICAgIHsKLSAgICAgIGFzc2VydGlvblJlc3VsdFR5cGUgPSBPTkxZX0ZBSUxFRDsKLSAgICB9Ci0KLSAgICBlbHNlIGlmIChyZXN1bHRUeXBlLmVxdWFscyhfTk9UX1BBU1NFRCkpCi0gICAgewotICAgICAgYXNzZXJ0aW9uUmVzdWx0VHlwZSA9IE5PVF9QQVNTRUQ7Ci0gICAgfQotICAgIGVsc2UgaWYgKHJlc3VsdFR5cGUuZXF1YWxzKF9OT1RfSU5GTykpCi0gICAgewotICAgICAgYXNzZXJ0aW9uUmVzdWx0VHlwZSA9IE5PVF9JTkZPOwotICAgIH0KLQotICAgIGVsc2UKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKAotICAgICAgICAiQW4gaW52YWxpZCBhc3NlcnRpb24gcmVzdWx0IHR5cGUgd2FzIHNwZWNpZmllZDogIiArIHJlc3VsdFR5cGUgKyAiLiIpOwotICAgIH0KLQotICAgIHJldHVybiBhc3NlcnRpb25SZXN1bHRUeXBlOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuCi0gICAqIEByZXR1cm4gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICByZXR1cm4gcmVzdWx0VHlwZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL0Fzc2VydGlvblJlc3VsdHNPcHRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9Bc3NlcnRpb25SZXN1bHRzT3B0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0ZWQ1NmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL0Fzc2VydGlvblJlc3VsdHNPcHRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50RWxlbWVudDsKLQotLyoqCi0gKiBUaGlzIGludGVyZmFjZSBjb250YWlucyBhIGRlZmluaXRpb24gb2YgdGhlIGFzc2VydGlvbiByZXN1bHRzIHRoYXQgCi0gKiBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIHJlcG9ydC4gIEl0IGFsc28gY29udGFpbnMgaW5mb3JtYXRpb24gCi0gKiB0aGF0IGluZGljYXRlcyB3aGljaCBtZXNzYWdlcyBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIHJlcG9ydC4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIEFzc2VydGlvblJlc3VsdHNPcHRpb24gZXh0ZW5kcyBEb2N1bWVudEVsZW1lbnQKLXsKLSAgLyoqCi0gICAqIEdldCBhc3NlcnRpb24gcmVzdWx0IHR5cGUuCi0gICAqIEByZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdCB0eXBlLgotICAgKiBAc2VlICNzZXRBc3NlcnRpb25SZXN1bHRUeXBlCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0VHlwZSBnZXRBc3NlcnRpb25SZXN1bHRUeXBlKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBhc3NlcnRpb24gcmVzdWx0IHR5cGUuCi0gICAqIEBwYXJhbSByZXN1bHRUeXBlIGFzc2VydGlvbiByZXN1bHQgdHlwZS4KLSAgICogQHNlZSAjZ2V0QXNzZXJ0aW9uUmVzdWx0VHlwZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0QXNzZXJ0aW9uUmVzdWx0VHlwZShBc3NlcnRpb25SZXN1bHRUeXBlIHJlc3VsdFR5cGUpOwotCi0gIC8qKgotICAgKiBHZXQgc2hvdyBtZXNzYWdlIGVudHJ5IGluZGljYXRvci4KLSAgICogQHJldHVybiBzaG93IG1lc3NhZ2UgZW50cnkgaW5kaWNhdG9yLgotICAgKiBAc2VlICNzZXRTaG93TWVzc2FnZUVudHJ5Ci0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRTaG93TWVzc2FnZUVudHJ5KCk7Ci0KLSAgLyoqCi0gICAqIFNldCBzaG93IG1lc3NhZ2UgZW50cnkgaW5kaWN0b3IuCi0gICAqIEBwYXJhbSBzaG93TWVzc2FnZUVudHJ5IHNob3cgbWVzc2FnZSBlbnRyeSBpbmRpY3Rvci4KLSAgICogQHNlZSAjZ2V0U2hvd01lc3NhZ2VFbnRyeQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U2hvd01lc3NhZ2VFbnRyeShib29sZWFuIHNob3dNZXNzYWdlRW50cnkpOwotCi0gIC8qKgotICAgKiBHZXQgc2hvdyBhc3NlcnRpb24gZGVzY3JpcHRpb24gaW5kaWNhdG9yLgotICAgKiBAcmV0dXJuIHNob3cgYXNzZXJ0aW9uIGRlc2NyaXB0aW9uIGluZGljYXRvci4KLSAgICogQHNlZSAjc2V0U2hvd0Fzc2VydGlvbkRlc2NyaXB0aW9uCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRTaG93QXNzZXJ0aW9uRGVzY3JpcHRpb24oKTsKLQotICAvKioKLSAgICogU2V0IHNob3cgYXNzZXJ0aW9uIGRlc2NyaXB0aW9uIGluZGljdG9yLgotICAgKiBAcGFyYW0gc2hvd0Fzc2VydGlvbkRlc2NyaXB0aW9uIHNob3cgYXNzZXJ0aW9uIGRlc2NyaXB0aW9uIGluZGljdG9yLgotICAgKiBAc2VlICNnZXRTaG93QXNzZXJ0aW9uRGVzY3JpcHRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNob3dBc3NlcnRpb25EZXNjcmlwdGlvbihib29sZWFuIHNob3dBc3NlcnRpb25EZXNjcmlwdGlvbik7Ci0KLSAgLyoqCi0gICAqIEdldCBzaG93IGZhaWx1cmUgbWVzc2FnZSBpbmRpY2F0b3IuCi0gICAqIEByZXR1cm4gc2hvdyBmYWlsdXJlIG1lc3NhZ2UgaW5kaWNhdG9yLgotICAgKiBAc2VlICNzZXRTaG93RmFpbHVyZU1lc3NhZ2UKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldFNob3dGYWlsdXJlTWVzc2FnZSgpOwotCi0gIC8qKgotICAgKiBTZXQgc2hvdyBmYWlsdXJlIG1lc3NhZ2UgaW5kaWNhdG9yLgotICAgKiBAcGFyYW0gc2hvd0ZhaWx1cmVNZXNzYWdlIHNob3cgZmFpbHVyZSBtZXNzYWdlIGluZGljYXRvci4KLSAgICogQHNlZSAjZ2V0U2hvd0ZhaWx1cmVNZXNzYWdlCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTaG93RmFpbHVyZU1lc3NhZ2UoYm9vbGVhbiBzaG93RmFpbHVyZU1lc3NhZ2UpOwotCi0gIC8qKgotICAgKiBHZXQgc2hvdyBlcnJvciBkZXRhaWwgaW5kaWNhdG9yLgotICAgKiBAcmV0dXJuIHNob3cgZXJyb3IgZGV0YWlsIGluZGljYXRvci4KLSAgICogQHNlZSAjc2V0U2hvd0ZhaWx1cmVEZXRhaWwKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldFNob3dGYWlsdXJlRGV0YWlsKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBzaG93IGVycm9yIGRldGFpbCBpbmRpY2F0b3IuCi0gICAqIEBwYXJhbSBzaG93ZmFpbHVyZURldGFpbCBzaG93IGVycm9yIGRldGFpbCBpbmRpY2F0b3IuCi0gICAqIEBzZWUgI2dldFNob3dGYWlsdXJlRGV0YWlsCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTaG93RmFpbHVyZURldGFpbChib29sZWFuIHNob3dmYWlsdXJlRGV0YWlsKTsKLQotICAvKioKLSAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4KLSAgICogQHJldHVybiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9jb25maWcvVURESVJlZmVyZW5jZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL1VERElSZWZlcmVuY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmEzYmNkMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9jb25maWcvVURESVJlZmVyZW5jZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWc7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50OwotCi0vKioKLSAqIFRoZSBpbnRlcmZhY2UgZm9yIGEgcmVmZXJlbmNlIHRvIGEgZGlzY292ZXJ5IGFydGlmYWN0LiAgCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgVURESVJlZmVyZW5jZSBleHRlbmRzIERvY3VtZW50RWxlbWVudAotewotICAvKioKLSAgICogRWxlbWVudCBuYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9OQU1FID0gV1NJQ29uc3RhbnRzLkVMRU1fVURESV9SRUZFUkVOQ0U7Ci0KLSAgLyoqCi0gICAqIFFOYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBRTkFNRSA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NJX0FOQUxZWkVSX0NPTkZJRywgRUxFTV9OQU1FKTsKLQotICAvKioKLSAgICogVURESSBrZXkgdHlwZTogYmluZGluZ0tleS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEJJTkRJTkdfS0VZID0gImJpbmRpbmdLZXkiOwotCi0gIC8qKgotICAgKiBVRERJIGtleSB0eXBlOiB0TW9kZWxLZXkuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUTU9ERUxfS0VZID0gInRNb2RlbEtleSI7Ci0KLSAgLyoqCi0gICAqIEdldCBVRERJICBrZXkgdHlwZS4KLSAgICogQHJldHVybiBVRERJICBrZXkgdHlwZS4KLSAgICogQHNlZSAjc2V0S2V5VHlwZQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRLZXlUeXBlKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBVRERJIGtleSB0eXBlLgotICAgKiBAcGFyYW0ga2V5VHlwZSBVRERJIGtleSB0eXBlLgotICAgKiBAc2VlICNnZXRLZXlUeXBlCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRLZXlUeXBlKFN0cmluZyBrZXlUeXBlKTsKLQotICAvKioKLSAgICogR2V0IFVEREkga2V5LgotICAgKiBAcmV0dXJuIFVEREkga2V5LgotICAgKiBAc2VlICNzZXRLZXkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0S2V5KCk7Ci0KLSAgLyoqCi0gICAqIFNldCBVRERJIGtleS4KLSAgICogQHBhcmFtIGtleSBVRERJIGtleS4KLSAgICogQHNlZSAjZ2V0S2V5Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRLZXkoU3RyaW5nIGtleSk7Ci0KLSAgLyoqCi0gICAqIEdldCBVRERJIGlucXVpcnkgVVJMLgotICAgKiBAcmV0dXJuIFVEREkgaW5xdWlyeSBVUkwuCi0gICAqIEBzZWUgI3NldElucXVpcnlVUkwKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5xdWlyeVVSTCgpOwotCi0gIC8qKgotICAgKiBTZXQgVURESSBpbnF1aXJ5VVJMLgotICAgKiBAcGFyYW0gaW5xdWlyeVVSTCBVRERJIGlucXVpcnlVUkwuCi0gICAqIEBzZWUgI2dldElucXVpcnlVUkwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldElucXVpcnlVUkwoU3RyaW5nIGlucXVpcnlVUkwpOwotCi0gIC8qKgotICAgKiBHZXQgV1NETCBlbGVtZW50LgotICAgKiBAcmV0dXJuIFdTREwgZWxlbWVudC4KLSAgICogQHNlZSAjc2V0V1NETEVsZW1lbnQKLSAgICovCi0gIHB1YmxpYyBXU0RMRWxlbWVudCBnZXRXU0RMRWxlbWVudCgpOwotCi0gIC8qKgotICAgKiBTZXQgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gd3NkbEVsZW1lbnQgV1NETCBlbGVtZW50LgotICAgKiBAc2VlICNnZXRXU0RMRWxlbWVudAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0V1NETEVsZW1lbnQoV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQpOwotCi0gIC8qKgotICAgKiBHZXQgc2VydmljZSBsb2NhdGlvbi4KLSAgICogQHJldHVybiBzZXJ2aWNlIGxvY2F0aW9uLgotICAgKiBAc2VlICNzZXRTZXJ2aWNlTG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmljZUxvY2F0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBzZXJ2aWNlIGxvY2F0aW9uLgotICAgKiBAcGFyYW0gc2VydmljZUxvY2F0aW9uIHNlcnZpY2UgbG9jYXRpb24uCi0gICAqIEBzZWUgI2dldFNlcnZpY2VMb2NhdGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U2VydmljZUxvY2F0aW9uKFN0cmluZyBzZXJ2aWNlTG9jYXRpb24pOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL1dTRExFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9jb25maWcvV1NETEVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmJlMzNlMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9jb25maWcvV1NETEVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50RWxlbWVudDsKLQotLyoqCi0gKiBUaGUgYmFzZSBpbnRlcmZhY2UgZm9yIFdTREwgZGVmaW5pdGlvbnMuIAotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIFdTRExFbGVtZW50IGV4dGVuZHMgRG9jdW1lbnRFbGVtZW50Ci17Ci0gIC8qKgotICAgKiBFbGVtZW50IG5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX05BTUUgPSBXU0lDb25zdGFudHMuRUxFTV9XU0RMX0VMRU1FTlQ7Ci0KLSAgLyoqCi0gICAqIFFOYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBRTkFNRSA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NJX0FOQUxZWkVSX0NPTkZJRywgRUxFTV9OQU1FKTsKLQotICAvKioKLSAgICogR2V0IFdTREwgZWxlbWVudCB0eXBlLgotICAgKiBAcmV0dXJuIFdTREwgZWxlbWVudCB0eXBlLgotICAgKiBAc2VlICNzZXRUeXBlCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFR5cGUoKTsKLQotICAvKioKLSAgICogU2V0IFdTREwgZWxlbWVudCB0eXBlLgotICAgKiBAcGFyYW0gdHlwZSBXU0RMIGVsZW1lbnQgdHlwZS4KLSAgICogQHNlZSAjZ2V0VHlwZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VHlwZShTdHJpbmcgdHlwZSk7Ci0KLSAgLyoqCi0gICAqIEdldCBXU0RMIGVsZW1lbnQgbmFtZXNwYWNlLgotICAgKiBAcmV0dXJuIFdTREwgZWxlbWVudCBuYW1lc3BhY2UuCi0gICAqIEBzZWUgI3NldE5hbWVzcGFjZQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXROYW1lc3BhY2UoKTsKLQotICAvKioKLSAgICogU2V0IFdTREwgZWxlbWVudCBuYW1lc3BhY2UuCi0gICAqIEBwYXJhbSBuYW1lc3BhY2UgV1NETCBlbGVtZW50IG5hbWVzcGFjZS4KLSAgICogQHNlZSAjZ2V0TmFtZXNwYWNlCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXROYW1lc3BhY2UoU3RyaW5nIG5hbWVzcGFjZSk7Ci0KLSAgLyoqCi0gICAqIEdldCBXU0RMIGVsZW1lbnQgbmFtZS4KLSAgICogQHJldHVybiBXU0RMIGVsZW1lbnQgbmFtZS4KLSAgICogQHNlZSAjc2V0TmFtZQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBXU0RMIGVsZW1lbnQgbmFtZS4KLSAgICogQHBhcmFtIG5hbWUgV1NETCBlbGVtZW50IG5hbWUuCi0gICAqIEBzZWUgI2dldE5hbWUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpOwotCi0gIC8qKgotICAgKiBHZXQgV1NETCBlbGVtZW50IHF1YWxpZmllZCBuYW1lLgotICAgKiBAcmV0dXJuIFdTREwgZWxlbWVudCBxdWFsaWZpZWQgbmFtZS4KLSAgICovCi0gIHB1YmxpYyBRTmFtZSBnZXRRTmFtZSgpOwotCi0gIC8qKgotICAgKiBHZXQgV1NETCBwYXJlbnQgZWxlbWVudCBuYW1lLgotICAgKiBAcmV0dXJuIFdTREwgcGFyZW50IGVsZW1lbnQgbmFtZS4KLSAgICogQHNlZSAjc2V0UGFyZW50RWxlbWVudE5hbWUKLSAgICogCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFBhcmVudEVsZW1lbnROYW1lKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBXU0RMIHBhcmVudCBlbGVtZW50IG5hbWUuCi0gICAqIEBwYXJhbSBwYXJlbnRFbGVtZW50TmFtZSBXU0RMIHBhcmVudCBlbGVtZW50IG5hbWUuCi0gICAqIEBzZWUgI2dldFBhcmVudEVsZW1lbnROYW1lCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRQYXJlbnRFbGVtZW50TmFtZShTdHJpbmcgcGFyZW50RWxlbWVudE5hbWUpOwotCi0gIC8qKgotICAgKiBHZXQgV1NETCBwYXJlbnQgZWxlbWVudCBRTmFtZS4KLSAgICogQHJldHVybiBXU0RMIHBhcmVudCBlbGVtZW50IFFOYW1lLgotICAgKi8KLSAgcHVibGljIFFOYW1lIGdldFBhcmVudEVsZW1lbnRRTmFtZSgpOwotCi0gIC8qKgotICAgKiBJcyBwb3J0IGVsZW1lbnQuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgZWxlbWVudCBpcyBhIHBvcnQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1BvcnQoKTsKLQotICAvKioKLSAgICogSXMgYmluZGluZyBlbGVtZW50LgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGxlbWVudCBpcyBhIGJpbmRpbmcuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0JpbmRpbmcoKTsKLQotICAvKioKLSAgICogSXMgcG9ydFR5cGUgZWxlbWVudC4KLSAgICogQHJldHVybiB0cnVlIGlmIGVsZW1lbnQgaXMgYSBwb3J0IHR5cGUuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1BvcnRUeXBlKCk7Ci0KLSAgLyoqCi0gICAqIElzIG9wZXJhdGlvbiBlbGVtZW50LgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGVsZW1lbnQgaXMgYW4gb3BlcmF0aW9uLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNPcGVyYXRpb24oKTsKLQotICAvKioKLSAgICogSXMgbWVzc2FnZSBlbGVtZW50LgotICAgKiBAcmV0dXJuIHRydWUgaWYgZWxlbWVudCBpcyBhIG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc01lc3NhZ2UoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9XU0RMUmVmZXJlbmNlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9jb25maWcvV1NETFJlZmVyZW5jZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzU1MGMyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9XU0RMUmVmZXJlbmNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50RWxlbWVudDsKLQotLyoqCi0gKiBUaGUgaW50ZXJmYWNlIGZvciBhIHJlZmVyZW5jZSB0byBhIGRlc2NyaXB0aW9uIGFydGlmYWN0LiAgCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgV1NETFJlZmVyZW5jZSBleHRlbmRzIERvY3VtZW50RWxlbWVudAotewotICAvKioKLSAgICogRWxlbWVudCBuYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9OQU1FID0gV1NJQ29uc3RhbnRzLkVMRU1fV1NETF9SRUZFUkVOQ0U7Ci0KLSAgLyoqCi0gICAqIFFOYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBRTkFNRSA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NJX0FOQUxZWkVSX0NPTkZJRywgRUxFTV9OQU1FKTsKLQotICAvKioKLSAgICogR2V0IFdTREwgZWxlbWVudC4KLSAgICogQHJldHVybiBXU0RMIGVsZW1lbnQuCi0gICAqIEBzZWUgI3NldFdTRExFbGVtZW50Ci0gICAqLwotICBwdWJsaWMgV1NETEVsZW1lbnQgZ2V0V1NETEVsZW1lbnQoKTsKLQotICAvKioKLSAgICogU2V0IFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIHdzZGxFbGVtZW50IFdTREwgZWxlbWVudC4KLSAgICogQHNlZSAjZ2V0V1NETEVsZW1lbnQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdTRExFbGVtZW50KFdTRExFbGVtZW50IHdzZGxFbGVtZW50KTsKLQotICAvKioKLSAgICogR2V0IFdTREwgbG9jYXRpb24uCi0gICAqIEByZXR1cm4gV1NETCBsb2NhdGlvbi4KLSAgICogQHNlZSAjc2V0V1NETExvY2F0aW9uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFdTRExMb2NhdGlvbigpOwotCi0gIC8qKgotICAgKiBTZXQgV1NETCBsb2NhdGlvbi4KLSAgICogQHBhcmFtIHdzZGxMb2NhdGlvbiBXU0RMIGxvY2F0aW9uLgotICAgKiBAc2VlICNnZXRXU0RMTG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdTRExMb2NhdGlvbihTdHJpbmcgd3NkbExvY2F0aW9uKTsKLQotICAvKioKLSAgICogR2V0IHNlcnZpY2UgbG9jYXRpb24uCi0gICAqIEByZXR1cm4gc2VydmljZSBsb2NhdGlvbi4KLSAgICogQHNlZSAjc2V0U2VydmljZUxvY2F0aW9uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFNlcnZpY2VMb2NhdGlvbigpOwotCi0gIC8qKgotICAgKiBTZXQgc2VydmljZSBsb2NhdGlvbi4KLSAgICogQHBhcmFtIHNlcnZpY2VMb2NhdGlvbiBzZXJ2aWNlIGxvY2F0aW9uLgotICAgKiBAc2VlICNnZXRTZXJ2aWNlTG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VMb2NhdGlvbihTdHJpbmcgc2VydmljZUxvY2F0aW9uKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9pbXBsL0FuYWx5emVyQ29uZmlnSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL2ltcGwvQW5hbHl6ZXJDb25maWdJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1ZWU3NGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL2ltcGwvQW5hbHl6ZXJDb25maWdJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuaW1wbDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5BbmFseXplcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLkFuYWx5emVyQ29uZmlnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuQW5hbHl6ZXJDb25maWdSZWFkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5Bc3NlcnRpb25SZXN1bHRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuQXNzZXJ0aW9uUmVzdWx0c09wdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLlVERElSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLldTRExSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmNvbW1vbi5BZGRTdHlsZVNoZWV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5jb21tb24uaW1wbC5BZGRTdHlsZVNoZWV0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5NZXNzYWdlTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5VdGlsczsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBhbmFseXplciBjb25maWd1cmF0aW9uIGZpbGUgaW50ZXJmYWNlLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBBbmFseXplckNvbmZpZ0ltcGwgaW1wbGVtZW50cyBBbmFseXplckNvbmZpZwotewotICAvKioKLSAgICogTWVzc2FnZSBsaXN0IHJlZmVyZW5jZS4KLSAgICovCi0gIHByb3RlY3RlZCBNZXNzYWdlTGlzdCBtZXNzYWdlTGlzdCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIEFuYWx5emVyIGNvbmZpZ3VyYXRpb24gZmlsZSBVUkkuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGNvbmZpZ1VSSSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIE9wdGlvbmFsIGRlc2NyaXB0aW9uLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBkZXNjcmlwdGlvbiA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFZlcmJvc2Ugb3B0aW9uLgotICAgKi8KLSAgcHJvdGVjdGVkIGJvb2xlYW4gdmVyYm9zZSA9IGZhbHNlOwotCi0gIC8qKgotICAgKiBBc3NlcnRpb24gcmVzdWx0cyBvcHRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgQXNzZXJ0aW9uUmVzdWx0c09wdGlvbiBhc3NlcnRpb25SZXN1bHRzT3B0aW9uID0KLSAgICBuZXcgQXNzZXJ0aW9uUmVzdWx0c09wdGlvbkltcGwoKTsKLQotICAvKioKLSAgICogUmVwb3J0IGxvY2F0aW9uLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyByZXBvcnRVUkkgPSBXU0lDb25zdGFudHMuREVGQVVMVF9SRVBPUlRfVVJJOwotCi0gIC8qKgotICAgKiBSZXBsYWNlIHJlcG9ydCBpbmRpY2F0b3IuCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiByZXBsYWNlUmVwb3J0ID0gZmFsc2U7Ci0KLSAgLyoqCi0gICAqIEFkZCBzdHlsZSBzaGVldC4KLSAgICovCi0gIHByb3RlY3RlZCBBZGRTdHlsZVNoZWV0IGFkZFN0eWxlU2hlZXQ7Ci0KLSAgLyoqCi0gICAqIFByb2ZpbGUgdGVzdCBhc3NlcnRpb25zIGRvY3VtZW50IGxvY2F0aW9uLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyB0ZXN0QXNzZXJ0aW9uc0RvY3VtZW50VVJJID0KLSAgICBXU0lDb25zdGFudHMuREVGQVVMVF9URVNUX0FTU0VSVElPTlNfRE9DVU1FTlRfVVJJOwotCi0gIC8qKgotICAgKiBNZXNzYWdlIGxvZyBsb2NhdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgbG9nVVJJID0gbnVsbDsKLQotICAvKioKLSAgICogTWVzc2FnZSBjb3JyZWxhdGlvbiB0eXBlLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBjb3JyZWxhdGlvblR5cGUgPQotICAgIFdTSUNvbnN0YW50cy5BVFRSVkFMX0NPUlJFTEFUSU9OX1RZUEVfT1BFUkFUSU9OOwotCi0gIC8qKgotICAgKiBXU0RMIHJlZmVyZW5jZS4KLSAgICovCi0gIHByb3RlY3RlZCBXU0RMUmVmZXJlbmNlIHdzZGxSZWZlcmVuY2UgPSBudWxsOwotCi0gIC8qKgotICAgKiBVRERJIHJlZmVyZW5jZS4KLSAgICovCi0gIHByb3RlY3RlZCBVRERJUmVmZXJlbmNlIHVkZGlSZWZlcmVuY2UgPSBudWxsOwotCi0gIC8qKgotICAgKiBEZWZhdWx0IGNvbnN0cnVjdG9yLgotICAgKi8KLSAgcHVibGljIEFuYWx5emVyQ29uZmlnSW1wbCgpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciB3aXRoIGFsbCBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGRlc2NyaXB0aW9uICAgICAgICAgICAgICAgIGFuIG9wdGlvbmFsIGRlc2NyaXB0aW9uLgotICAgKiBAcGFyYW0gdmVyYm9zZSAgICAgICAgICAgICAgICAgICAgdGhlIHZlcmJvc2Ugb3B0aW9uLgotICAgKiBAcGFyYW0gYXNzZXJ0aW9uUmVzdWx0c09wdGlvbiAgICAgYW4gYXNzZXJ0aW9uIHJlc3VsdHMgb3B0aW9uLgotICAgKiBAcGFyYW0gcmVwb3J0VVJJICAgICAgICAgICAgICAgICAgcmVwb3J0IGxvY2F0aW9uLgotICAgKiBAcGFyYW0gcmVwbGFjZVJlcG9ydCAgICAgICAgICAgICAgYSByZXBsYWNlIHJlcG9ydCBpbmRpY2F0b3IuCi0gICAqIEBwYXJhbSBhZGRTdHlsZVNoZWV0ICAgICAgICAgICAgICBhZGQgc3R5bGUgc2hlZXQuCi0gICAqIEBwYXJhbSB0ZXN0QXNzZXJ0aW9uc0RvY3VtZW50VVJJICBwcm9maWxlIHRlc3QgYXNzZXJ0aW9ucyBkb2N1bWVudCBsb2NhdGlvbi4KLSAgICogQHBhcmFtIGxvZ1VSSSAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgbG9nIGxvY2F0aW9uLgotICAgKiBAcGFyYW0gY29ycmVsYXRpb25UeXBlICAgICAgICAgICAgbWVzc2FnZSBjb3JyZWxhdGlvbiB0eXBlLgotICAgKiBAcGFyYW0gd3NkbFJlZmVyZW5jZSAgICAgICAgICAgICAgYSBXU0RMIHJlZmVyZW5jZS4uCi0gICAqIEBwYXJhbSB1ZGRpUmVmZXJlbmNlICAgICAgICAgICAgICBhIFVVRERJIHJlZmVyZW5jZS4KLSAgICovCi0gIHB1YmxpYyBBbmFseXplckNvbmZpZ0ltcGwoCi0gICAgU3RyaW5nIGRlc2NyaXB0aW9uLAotICAgIGJvb2xlYW4gdmVyYm9zZSwKLSAgICBBc3NlcnRpb25SZXN1bHRzT3B0aW9uIGFzc2VydGlvblJlc3VsdHNPcHRpb24sCi0gICAgU3RyaW5nIHJlcG9ydFVSSSwKLSAgICBib29sZWFuIHJlcGxhY2VSZXBvcnQsCi0gICAgQWRkU3R5bGVTaGVldCBhZGRTdHlsZVNoZWV0LAotICAgIFN0cmluZyB0ZXN0QXNzZXJ0aW9uc0RvY3VtZW50VVJJLAotICAgIFN0cmluZyBsb2dVUkksCi0gICAgU3RyaW5nIGNvcnJlbGF0aW9uVHlwZSwKLSAgICBXU0RMUmVmZXJlbmNlIHdzZGxSZWZlcmVuY2UsCi0gICAgVURESVJlZmVyZW5jZSB1ZGRpUmVmZXJlbmNlKQotICB7Ci0gICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOwotICAgIHRoaXMudmVyYm9zZSA9IHZlcmJvc2U7Ci0gICAgdGhpcy5hc3NlcnRpb25SZXN1bHRzT3B0aW9uID0gYXNzZXJ0aW9uUmVzdWx0c09wdGlvbjsKLSAgICB0aGlzLnJlcG9ydFVSSSA9IHJlcG9ydFVSSTsKLSAgICB0aGlzLnJlcGxhY2VSZXBvcnQgPSByZXBsYWNlUmVwb3J0OwotICAgIHRoaXMuYWRkU3R5bGVTaGVldCA9IGFkZFN0eWxlU2hlZXQ7Ci0gICAgdGhpcy50ZXN0QXNzZXJ0aW9uc0RvY3VtZW50VVJJID0gdGVzdEFzc2VydGlvbnNEb2N1bWVudFVSSTsKLSAgICB0aGlzLmxvZ1VSSSA9IGxvZ1VSSTsKLSAgICB0aGlzLmNvcnJlbGF0aW9uVHlwZSA9IGNvcnJlbGF0aW9uVHlwZTsKLSAgICB0aGlzLndzZGxSZWZlcmVuY2UgPSB3c2RsUmVmZXJlbmNlOwotICAgIHRoaXMudWRkaVJlZmVyZW5jZSA9IHVkZGlSZWZlcmVuY2U7Ci0gIH0KLQotICAvKioKLSAgICogSW5pdGlhbGl6ZSBhbmFseXplciBjb25maWcuCi0gICAqLwotICBwdWJsaWMgdm9pZCBpbml0KE1lc3NhZ2VMaXN0IG1lc3NhZ2VMaXN0KQotICB7Ci0gICAgdGhpcy5tZXNzYWdlTGlzdCA9IG1lc3NhZ2VMaXN0OwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBvcHRpb25hbCBkZXNjcmlwdGlvbi4KLSAgICogQHNlZSAjc2V0RGVzY3JpcHRpb24KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuZGVzY3JpcHRpb247Ci0gIH0KLQotICAvKioKLSAgICogU2V0IG9wdGlvbmFsIGRlc2NyaXB0aW9uLgotICAgKiBAc2VlICNnZXREZXNjcmlwdGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RGVzY3JpcHRpb24oU3RyaW5nIGRlc2NyaXB0aW9uKQotICB7Ci0gICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgI3NldFZlcmJvc2VPcHRpb24KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldFZlcmJvc2VPcHRpb24oKQotICB7Ci0gICAgcmV0dXJuIHRoaXMudmVyYm9zZTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlICNnZXRWZXJib3NlT3B0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRWZXJib3NlT3B0aW9uKGJvb2xlYW4gdmVyYm9zZSkKLSAgewotICAgIHRoaXMudmVyYm9zZSA9IHZlcmJvc2U7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGFzc2VydGlvbiByZXN1bHRzIG9wdGlvbi4KLSAgICogQHNlZSAjc2V0QXNzZXJ0aW9uUmVzdWx0c09wdGlvbgotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdHNPcHRpb24gZ2V0QXNzZXJ0aW9uUmVzdWx0c09wdGlvbigpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5hc3NlcnRpb25SZXN1bHRzT3B0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldCBhc3NlcnRpb24gcmVzdWx0cyBvcHRpb24uCi0gICAqIEBzZWUgI2dldEFzc2VydGlvblJlc3VsdHNPcHRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEFzc2VydGlvblJlc3VsdHNPcHRpb24oQXNzZXJ0aW9uUmVzdWx0c09wdGlvbiBhc3NlcnRpb25SZXN1bHRzT3B0aW9uKQotICB7Ci0gICAgdGhpcy5hc3NlcnRpb25SZXN1bHRzT3B0aW9uID0gYXNzZXJ0aW9uUmVzdWx0c09wdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlICNzZXRSZXBvcnRMb2NhdGlvbgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRSZXBvcnRMb2NhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5yZXBvcnRVUkk7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSAjZ2V0UmVwb3J0TG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFJlcG9ydExvY2F0aW9uKFN0cmluZyByZXBvcnRVUkkpCi0gIHsKLSAgICB0aGlzLnJlcG9ydFVSSSA9IHJlcG9ydFVSSTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgcmVwbGFjZSByZXBvcnQgZmlsZSBvcHRpb24uCi0gICAqIEBzZWUgI3NldFJlcGxhY2VSZXBvcnQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldFJlcGxhY2VSZXBvcnQoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMucmVwbGFjZVJlcG9ydDsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQgcmVwb3J0IGZpbGUgbG9jYXRpb24uCi0gICAqIEBzZWUgI2dldFJlcGxhY2VSZXBvcnQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFJlcGxhY2VSZXBvcnQoYm9vbGVhbiByZXBsYWNlUmVwb3J0KQotICB7Ci0gICAgdGhpcy5yZXBsYWNlUmVwb3J0ID0gcmVwbGFjZVJlcG9ydDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgYWRkIHN0eWxlIHNoZWV0LgotICAgKiBAc2VlICNzZXRBZGRTdHlsZVNoZWV0Ci0gICAqLwotICBwdWJsaWMgQWRkU3R5bGVTaGVldCBnZXRBZGRTdHlsZVNoZWV0KCkKLSAgewotICAgIHJldHVybiB0aGlzLmFkZFN0eWxlU2hlZXQ7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IHJlcGxhY2UgcmVwb3J0IGZpbGUgb3B0aW9uLgotICAgKiBAc2VlICNnZXRBZGRTdHlsZVNoZWV0Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRBZGRTdHlsZVNoZWV0KEFkZFN0eWxlU2hlZXQgYWRkU3R5bGVTaGVldCkKLSAgewotICAgIHRoaXMuYWRkU3R5bGVTaGVldCA9IGFkZFN0eWxlU2hlZXQ7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSAjc2V0VGVzdEFzc2VydGlvbkRvY3VtZW50TG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VGVzdEFzc2VydGlvbnNEb2N1bWVudExvY2F0aW9uKCkKLSAgewotICAgIHJldHVybiB0aGlzLnRlc3RBc3NlcnRpb25zRG9jdW1lbnRVUkk7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSAjZ2V0VGVzdEFzc2VydGlvbkRvY3VtZW50TG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFRlc3RBc3NlcnRpb25zRG9jdW1lbnRMb2NhdGlvbihTdHJpbmcgdGVzdEFzc2VydGlvbnNEb2N1bWVudFVSSSkKLSAgewotICAgIHRoaXMudGVzdEFzc2VydGlvbnNEb2N1bWVudFVSSSA9IHRlc3RBc3NlcnRpb25zRG9jdW1lbnRVUkk7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSAjc2V0TG9nTG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9nTG9jYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIGxvZ1VSSTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlICNnZXRMb2dMb2NhdGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TG9nTG9jYXRpb24oU3RyaW5nIGxvZ1VSSSkKLSAgewotICAgIHRoaXMubG9nVVJJID0gbG9nVVJJOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNMb2dTZXQoKQotICB7Ci0gICAgcmV0dXJuIChsb2dVUkkgIT0gbnVsbCk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGNvcnJlbGF0aW9uIHR5cGUuCi0gICAqIEBzZWUgI3NldENvcnJlbGF0aW9uVHlwZQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRDb3JyZWxhdGlvblR5cGUoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuY29ycmVsYXRpb25UeXBlOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldCBjb3JyZWxhdGlvbiB0eXBlLgotICAgKiBAc2VlICNnZXRDb3JyZWxhdGlvblR5cGUKLSAgICogCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDb3JyZWxhdGlvblR5cGUoU3RyaW5nIGNvcnJlbGF0aW9uVHlwZSkKLSAgewotICAgIHRoaXMuY29ycmVsYXRpb25UeXBlID0gY29ycmVsYXRpb25UeXBlOwotICB9Ci0KLSAgLyoqCi0gICAqIElzIFdTREwgcmVmZXJlbmNlIHNldC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzV1NETFJlZmVyZW5jZVNldCgpCi0gIHsKLSAgICByZXR1cm4gKHRoaXMud3NkbFJlZmVyZW5jZSA9PSBudWxsID8gZmFsc2UgOiB0cnVlKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgV1NETCByZWZlcmVuY2UuCi0gICAqIEBzZWUgI3NldFdTRExSZWZlcmVuY2UKLSAgICovCi0gIHB1YmxpYyBXU0RMUmVmZXJlbmNlIGdldFdTRExSZWZlcmVuY2UoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMud3NkbFJlZmVyZW5jZTsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQgV1NETCByZWZlcmVuY2UuCi0gICAqIEBzZWUgI2dldFdTRExSZWZlcmVuY2UKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdTRExSZWZlcmVuY2UoV1NETFJlZmVyZW5jZSB3c2RsUmVmZXJlbmNlKQotICB7Ci0gICAgdGhpcy53c2RsUmVmZXJlbmNlID0gd3NkbFJlZmVyZW5jZTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgV1NETCBlbGVtZW50LgotICAgKiAKLSAgICovCi0gIHB1YmxpYyBXU0RMRWxlbWVudCBnZXRXU0RMRWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gKHRoaXMud3NkbFJlZmVyZW5jZSA9PSBudWxsKQotICAgICAgPyBudWxsCi0gICAgICA6IHRoaXMud3NkbFJlZmVyZW5jZS5nZXRXU0RMRWxlbWVudCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBzZXJ2aWNlIGxvY2F0aW9uLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTZXJ2aWNlTG9jYXRpb24oKQotICB7Ci0gICAgcmV0dXJuICh0aGlzLndzZGxSZWZlcmVuY2UgPT0gbnVsbCkKLSAgICAgID8gbnVsbAotICAgICAgOiB0aGlzLndzZGxSZWZlcmVuY2UuZ2V0U2VydmljZUxvY2F0aW9uKCk7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLkFuYWx5emVyQ29uZmlnI2dldFdTRExMb2NhdGlvbigpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFdTRExMb2NhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gKHRoaXMud3NkbFJlZmVyZW5jZSA9PSBudWxsKQotICAgICAgPyBudWxsCi0gICAgICA6IHRoaXMud3NkbFJlZmVyZW5jZS5nZXRXU0RMTG9jYXRpb24oKTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy53c2kudGVzdC5hbmFseXplci5jb25maWcuQW5hbHl6ZXJDb25maWcjaXNVZGRpUmVmZXJlbmNlU2V0KQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNVRERJUmVmZXJlbmNlU2V0KCkKLSAgewotICAgIHJldHVybiAodGhpcy51ZGRpUmVmZXJlbmNlID09IG51bGwgPyBmYWxzZSA6IHRydWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBVRERJIHJlZmVyZW5jZS4KLSAgICogQHNlZSAjc2V0VURESVJlZmVyZW5jZQotICAgKi8KLSAgcHVibGljIFVERElSZWZlcmVuY2UgZ2V0VURESVJlZmVyZW5jZSgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy51ZGRpUmVmZXJlbmNlOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldCBVRERJIHJlZmVyZW5jZS4KLSAgICogQHNlZSAjZ2V0VURESVJlZmVyZW5jZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VURESVJlZmVyZW5jZShVRERJUmVmZXJlbmNlIHVkZGlSZWZlcmVuY2UpCi0gIHsKLSAgICB0aGlzLnVkZGlSZWZlcmVuY2UgPSB1ZGRpUmVmZXJlbmNlOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgI3NldExvY2F0aW9uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldExvY2F0aW9uKCkKLSAgewotICAgIHJldHVybiBjb25maWdVUkk7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBnZXRMb2NhdGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TG9jYXRpb24oU3RyaW5nIGNvbmZpZ1VSSSkKLSAgewotICAgIHRoaXMuY29uZmlnVVJJID0gY29uZmlnVVJJOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LldTSURvY3VtZW50I3RvWE1MU3RyaW5nKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9YTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgU3RyaW5nIG5zTmFtZSA9IG5hbWVzcGFjZU5hbWU7Ci0gICAgaWYgKCghbnNOYW1lLmVxdWFscygiIikgJiYgKCFuc05hbWUuZW5kc1dpdGgoIjoiKSkpKQotICAgICAgbnNOYW1lICs9ICI6IjsKLQotICAgIC8vIFN0YXJ0IGVsZW1lbnQKLSAgICBwdy5wcmludGxuKCIgICAgPCIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiPiIpOwotCi0gICAgLy8gVmVyYm9zZSBvcHRpb24KLSAgICBwdy5wcmludCgiICAgICAgPCIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9WRVJCT1NFICsgIj4iKTsKLSAgICBwdy5wcmludChnZXRWZXJib3NlT3B0aW9uKCkpOwotICAgIHB3LnByaW50bG4oIjwvIiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX1ZFUkJPU0UgKyAiPiIpOwotCi0gICAgLy8gR2V0IGFzc2VydGlvbiByZXN1bHRzIG9wdGlvbgotICAgIHB3LnByaW50KGFzc2VydGlvblJlc3VsdHNPcHRpb24udG9YTUxTdHJpbmcobnNOYW1lKSk7Ci0KLSAgICAvLyByZXBvcnQgZmlsZQotICAgIHB3LnByaW50KCIgICAgICAgIDwiICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fUkVQT1JUX0ZJTEUgKyAiICIpOwotICAgIHB3LnByaW50KFdTSUNvbnN0YW50cy5BVFRSX1JFUExBQ0UgKyAiPVwiIiArIGdldFJlcGxhY2VSZXBvcnQoKSArICJcIiAiKTsKLSAgICBwdy5wcmludGxuKAotICAgICAgV1NJQ29uc3RhbnRzLkFUVFJfTE9DQVRJT04gKyAiPVwiIiArIGdldFJlcG9ydExvY2F0aW9uKCkgKyAiXCI+Iik7Ci0gICAgcHcucHJpbnQoZ2V0QWRkU3R5bGVTaGVldCgpLnRvWE1MU3RyaW5nKG5hbWVzcGFjZU5hbWUpKTsKLSAgICBwdy5wcmludGxuKCIgICAgICAgIDwvIiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX1JFUE9SVF9GSUxFICsgIj4iKTsKLQotICAgIC8vIHRlc3QgYXNzZXJ0aW9uIGZpbGUKLSAgICBwdy5wcmludCgKLSAgICAgICIgICAgICAgIDwiICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fVEVTVF9BU1NFUlRJT05TX0ZJTEUgKyAiPiIpOwotICAgIHB3LnByaW50KGdldFRlc3RBc3NlcnRpb25zRG9jdW1lbnRMb2NhdGlvbigpKTsKLSAgICBwdy5wcmludGxuKCI8LyIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9URVNUX0FTU0VSVElPTlNfRklMRSArICI+Iik7Ci0KLSAgICAvLyBsb2cgZmlsZQotICAgIHB3LnByaW50KCIgICAgICAgIDwiICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fTE9HX0ZJTEUpOwotICAgIHB3LnByaW50KAotICAgICAgIiAiCi0gICAgICAgICsgV1NJQ29uc3RhbnRzLkFUVFJfQ09SUkVMQVRJT05fVFlQRQotICAgICAgICArICI9XCIiCi0gICAgICAgICsgdGhpcy5jb3JyZWxhdGlvblR5cGUKLSAgICAgICAgKyAiXCI+Iik7Ci0gICAgcHcucHJpbnQoZ2V0TG9nTG9jYXRpb24oKSk7Ci0gICAgcHcucHJpbnRsbigiPC8iICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fTE9HX0ZJTEUgKyAiPiIpOwotCi0gICAgLy8gV1NETCByZWZlcmVuY2UgCi0gICAgaWYgKHRoaXMud3NkbFJlZmVyZW5jZSAhPSBudWxsKQotICAgIHsKLSAgICAgIHB3LnByaW50KGdldFdTRExSZWZlcmVuY2UoKS50b1hNTFN0cmluZyhuc05hbWUpKTsKLSAgICB9Ci0KLSAgICAvLyBVRERJIFJlZmVyZW5jZQotICAgIGlmICh0aGlzLnVkZGlSZWZlcmVuY2UgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwdy5wcmludChnZXRVRERJUmVmZXJlbmNlKCkudG9YTUxTdHJpbmcobnNOYW1lKSk7Ci0gICAgfQotCi0gICAgLy8gRW5kIGVsZW1lbnQKLSAgICBwdy5wcmludGxuKCIgICAgPC8iICsgbnNOYW1lICsgRUxFTV9OQU1FICsgIj4iKTsKLQotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICBQcmludFdyaXRlciBwdyA9IG5ldyBQcmludFdyaXRlcihzdyk7Ci0KLSAgICAvLyB2ZXJib3NlIG9wdGlvbgotICAgIHB3LnByaW50bG4oIiAgdmVyYm9zZSAuLi4uLi4uLi4uLi4uLi4uLi4uLiAiICsgdGhpcy52ZXJib3NlKTsKLQotICAgIC8vIGFzc2VydGlvblJlc3VsdHMgb3B0aW9ucwotICAgIHB3LnByaW50KHRoaXMuYXNzZXJ0aW9uUmVzdWx0c09wdGlvbi50b1N0cmluZygpKTsKLQotICAgIC8vIHJlcG9ydEZpbGUgb3B0aW9ucwotICAgIHB3LnByaW50bG4oIiAgUmVwb3J0IEZpbGU6Iik7Ci0gICAgcHcucHJpbnRsbigiICAgIHJlcGxhY2UgLi4uLi4uLi4uLi4uLi4uLi4uICIgKyB0aGlzLnJlcGxhY2VSZXBvcnQpOwotICAgIHB3LnByaW50bG4oIiAgICBsb2NhdGlvbiAuLi4uLi4uLi4uLi4uLi4uLiAiICsgdGhpcy5yZXBvcnRVUkkpOwotICAgIGlmICh0aGlzLmFkZFN0eWxlU2hlZXQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwdy5wcmludGxuKCIgICAgU3R5bGUgU2hlZXQ6Iik7Ci0gICAgICBpZiAodGhpcy5hZGRTdHlsZVNoZWV0LmdldEhyZWYoKSAhPSBudWxsKQotICAgICAgICBwdy5wcmludGxuKAotICAgICAgICAgICIgICAgICBocmVmIC4uLi4uLi4uLi4uLi4uLi4uLi4gIiArIHRoaXMuYWRkU3R5bGVTaGVldC5nZXRIcmVmKCkpOwotICAgICAgaWYgKHRoaXMuYWRkU3R5bGVTaGVldC5nZXRUeXBlKCkgIT0gbnVsbCkKLSAgICAgICAgcHcucHJpbnRsbigKLSAgICAgICAgICAiICAgICAgdHlwZSAuLi4uLi4uLi4uLi4uLi4uLi4uICIgKyB0aGlzLmFkZFN0eWxlU2hlZXQuZ2V0VHlwZSgpKTsKLSAgICAgIGlmICh0aGlzLmFkZFN0eWxlU2hlZXQuZ2V0VGl0bGUoKSAhPSBudWxsKQotICAgICAgICBwdy5wcmludGxuKAotICAgICAgICAgICIgICAgICB0aXRsZSAuLi4uLi4uLi4uLi4uLi4uLi4gIiArIHRoaXMuYWRkU3R5bGVTaGVldC5nZXRUaXRsZSgpKTsKLSAgICAgIGlmICh0aGlzLmFkZFN0eWxlU2hlZXQuZ2V0TWVkaWEoKSAhPSBudWxsKQotICAgICAgICBwdy5wcmludGxuKAotICAgICAgICAgICIgICAgICBtZWRpYSAuLi4uLi4uLi4uLi4uLi4uLi4gIiArIHRoaXMuYWRkU3R5bGVTaGVldC5nZXRNZWRpYSgpKTsKLSAgICAgIGlmICh0aGlzLmFkZFN0eWxlU2hlZXQuZ2V0Q2hhcnNldCgpICE9IG51bGwpCi0gICAgICAgIHB3LnByaW50bG4oCi0gICAgICAgICAgIiAgICAgIGNoYXJzZXQgLi4uLi4uLi4uLi4uLi4uLiAiICsgdGhpcy5hZGRTdHlsZVNoZWV0LmdldENoYXJzZXQoKSk7Ci0gICAgICBpZiAodGhpcy5hZGRTdHlsZVNoZWV0LmdldEFsdGVybmF0ZSgpICE9IG51bGwpCi0gICAgICAgIHB3LnByaW50bG4oCi0gICAgICAgICAgIiAgICAgIGFsdGVybmF0ZSAuLi4uLi4uLi4uLi4uLiAiCi0gICAgICAgICAgICArIHRoaXMuYWRkU3R5bGVTaGVldC5nZXRBbHRlcm5hdGUoKSk7Ci0gICAgfQotCi0gICAgLy8gdGVzdEFzc2VydGlvbnNGaWxlIHBhcmFtZXRlcgotICAgIHB3LnByaW50bG4oCi0gICAgICAiICB0ZXN0QXNzZXJ0aW9uc0ZpbGUgLi4uLi4uLi4uICIgKyB0aGlzLnRlc3RBc3NlcnRpb25zRG9jdW1lbnRVUkkpOwotCi0gICAgLy8gbG9nRmlsZSBvcHRpb25zCi0gICAgaWYgKHRoaXMubG9nVVJJICE9IG51bGwpCi0gICAgewotICAgICAgcHcucHJpbnRsbigiICBNZXNzYWdlIExvZyBGaWxlOiIpOwotICAgICAgcHcucHJpbnRsbigiICAgIGxvY2F0aW9uIC4uLi4uLi4uLi4uLi4uLi4uICIgKyB0aGlzLmxvZ1VSSSk7Ci0gICAgICBwdy5wcmludGxuKCIgICAgY29ycmVsYXRpb25UeXBlIC4uLi4uLi4uLi4gIiArIHRoaXMuY29ycmVsYXRpb25UeXBlKTsKLSAgICB9Ci0KLSAgICAvLyB3c2RsUmVmZXJlbmNlIG9wdGlvbnMgICAKLSAgICBpZiAodGhpcy5pc1dTRExSZWZlcmVuY2VTZXQoKSkKLSAgICB7Ci0gICAgICBwdy5wcmludCh0aGlzLndzZGxSZWZlcmVuY2UudG9TdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgLy8gdWRkaVJlZmVyZW5jZSBvcHRpb25zCi0gICAgaWYgKHRoaXMuaXNVRERJUmVmZXJlbmNlU2V0KCkpCi0gICAgewotICAgICAgcHcucHJpbnQodGhpcy51ZGRpUmVmZXJlbmNlLnRvU3RyaW5nKCkpOwotICAgIH0KLQotICAgIC8vIGRlc2NyaXB0aW9uIHBhcmFtZXRlcgotICAgIGlmICh0aGlzLmRlc2NyaXB0aW9uICE9IG51bGwpCi0gICAgewotICAgICAgcHcucHJpbnRsbigiICBkZXNjcmlwdGlvbiAuLi4uLi4uLi4uLi4uLi4uICIgKyB0aGlzLmRlc2NyaXB0aW9uKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3cudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQgY29uZmlnIHZhbHVlcyBmcm9tIGFub3RoZXIgYW5hbHl6ZXIgY29uZmlnIG9iamVjdC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBzZXRDb25maWcoQW5hbHl6ZXJDb25maWcgYW5hbHl6ZXJDb25maWcpCi0gIHsKLSAgICB0aGlzLmNvbmZpZ1VSSSA9IGFuYWx5emVyQ29uZmlnLmdldExvY2F0aW9uKCk7Ci0gICAgdGhpcy5kZXNjcmlwdGlvbiA9IGFuYWx5emVyQ29uZmlnLmdldERlc2NyaXB0aW9uKCk7Ci0gICAgdGhpcy52ZXJib3NlID0gYW5hbHl6ZXJDb25maWcuZ2V0VmVyYm9zZU9wdGlvbigpOwotICAgIHRoaXMuYXNzZXJ0aW9uUmVzdWx0c09wdGlvbiA9IGFuYWx5emVyQ29uZmlnLmdldEFzc2VydGlvblJlc3VsdHNPcHRpb24oKTsKLSAgICB0aGlzLnJlcG9ydFVSSSA9IGFuYWx5emVyQ29uZmlnLmdldFJlcG9ydExvY2F0aW9uKCk7Ci0gICAgdGhpcy5yZXBsYWNlUmVwb3J0ID0gYW5hbHl6ZXJDb25maWcuZ2V0UmVwbGFjZVJlcG9ydCgpOwotICAgIHRoaXMubG9nVVJJID0gYW5hbHl6ZXJDb25maWcuZ2V0TG9nTG9jYXRpb24oKTsKLSAgICB0aGlzLmNvcnJlbGF0aW9uVHlwZSA9IGFuYWx5emVyQ29uZmlnLmdldENvcnJlbGF0aW9uVHlwZSgpOwotICAgIHRoaXMudGVzdEFzc2VydGlvbnNEb2N1bWVudFVSSSA9Ci0gICAgICBhbmFseXplckNvbmZpZy5nZXRUZXN0QXNzZXJ0aW9uc0RvY3VtZW50TG9jYXRpb24oKTsKLSAgICB0aGlzLmFkZFN0eWxlU2hlZXQgPSBhbmFseXplckNvbmZpZy5nZXRBZGRTdHlsZVNoZWV0KCk7Ci0gICAgdGhpcy53c2RsUmVmZXJlbmNlID0gYW5hbHl6ZXJDb25maWcuZ2V0V1NETFJlZmVyZW5jZSgpOwotICAgIHRoaXMudWRkaVJlZmVyZW5jZSA9IGFuYWx5emVyQ29uZmlnLmdldFVERElSZWZlcmVuY2UoKTsKLSAgfQotCi0gIC8qKgotICAgKiBQYXJzZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgotICAgKi8KLSAgcHVibGljIHZvaWQgcGFyc2VBcmdzKFN0cmluZ1tdIGFyZ3MsIGJvb2xlYW4gdmFsaWRhdGUpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIFdTRExSZWZlcmVuY2Ugd3NkbFJlZmVyZW5jZSA9IG51bGw7Ci0gICAgVURESVJlZmVyZW5jZSB1ZGRpUmVmZXJlbmNlID0gbnVsbDsKLQotICAgIC8vIEdldCBuZXcgY29uZmlnIHJlYWRlcgotICAgIEFuYWx5emVyQ29uZmlnUmVhZGVyIGFuYWx5emVyQ29uZmlnUmVhZGVyID0gbmV3IEFuYWx5emVyQ29uZmlnUmVhZGVySW1wbCgpOwotICAgIGFuYWx5emVyQ29uZmlnUmVhZGVyLmluaXQodGhpcy5tZXNzYWdlTGlzdCk7Ci0KLSAgICAvLyBBbmFseXplciBjb25maWcgb2JqZWN0IHdoaWNoIHdpbGwgYmUgbWVyZ2VkIGFmdGVyIGFsbCBvZiB0aGUgaW5wdXQgcGFybXMgYXJlIHByb2Nlc3NlZAotICAgIEFuYWx5emVyQ29uZmlnIGFuYWx5emVyQ29uZmlnRnJvbUFyZ3MgPSBudWxsOwotCi0gICAgLy8gQXNzZXJ0aW9uIHJlc3VsdHMgb3B0aW9uCi0gICAgQXNzZXJ0aW9uUmVzdWx0c09wdGlvbiBhc3NlcnRpb25SZXN1bHRzT3B0aW9uID0gbnVsbDsKLQotICAgIC8vIElmIG5vIGlucHV0IGFyZ3VtZW50cywgdGhlbiB0aHJvdyBleGNlcHRpb24KLSAgICBpZiAoYXJncy5sZW5ndGggPT0gMCkKLSAgICB7Ci0gICAgICAvLyBBREQ6IAotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgZ2V0TWVzc2FnZSgidXNhZ2UwMSIsIEFuYWx5emVyLlVTQUdFX01FU1NBR0UpKTsKLSAgICB9Ci0KLSAgICAvLyBQYXJzZSB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyB0byBsb2NhdGUgdGhlIGNvbmZpZyBmaWxlIG9wdGlvbiAoaWYgaXQgd2FzIHNwZWNpZmllZCkKLSAgICBmb3IgKGludCBhcmdDb3VudCA9IDA7IGFyZ0NvdW50IDwgYXJncy5sZW5ndGg7IGFyZ0NvdW50KyspCi0gICAgewotICAgICAgLy8gLWNvbmZpZwotICAgICAgaWYgKChhcmdzW2FyZ0NvdW50XS5lcXVhbHNJZ25vcmVDYXNlKCItY29uZmlnIikpCi0gICAgICAgIHx8IChhcmdzW2FyZ0NvdW50XS5lcXVhbHMoIi1jIikpKQotICAgICAgewotICAgICAgICBhcmdDb3VudCsrOwotICAgICAgICBhbmFseXplckNvbmZpZ0Zyb21BcmdzID0KLSAgICAgICAgICBhbmFseXplckNvbmZpZ1JlYWRlci5yZWFkQW5hbHl6ZXJDb25maWcoCi0gICAgICAgICAgICBnZXRPcHRpb25WYWx1ZShhcmdzLCBhcmdDb3VudCkpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIElmIGNvbmZpZyBmaWxlIHdhcyBub3Qgc3BlY2lmaWVkLCB0aGVuIGNyZWF0ZSBhbmFseXplciBjb25maWcgb2JqZWN0Ci0gICAgaWYgKGFuYWx5emVyQ29uZmlnRnJvbUFyZ3MgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBhbmFseXplckNvbmZpZ0Zyb21BcmdzID0gbmV3IEFuYWx5emVyQ29uZmlnSW1wbCgpOwotICAgICAgYW5hbHl6ZXJDb25maWdGcm9tQXJncy5pbml0KHRoaXMubWVzc2FnZUxpc3QpOwotICAgIH0KLQotICAgIC8vIEdldCBhc3NlcnRpb24gcmVzdWx0cyBvcHRpb24KLSAgICBpZiAoKGFzc2VydGlvblJlc3VsdHNPcHRpb24gPQotICAgICAgYW5hbHl6ZXJDb25maWdGcm9tQXJncy5nZXRBc3NlcnRpb25SZXN1bHRzT3B0aW9uKCkpCi0gICAgICA9PSBudWxsKQotICAgIHsKLSAgICAgIGFzc2VydGlvblJlc3VsdHNPcHRpb24gPSBuZXcgQXNzZXJ0aW9uUmVzdWx0c09wdGlvbkltcGwoKTsKLSAgICAgIGFuYWx5emVyQ29uZmlnRnJvbUFyZ3Muc2V0QXNzZXJ0aW9uUmVzdWx0c09wdGlvbihhc3NlcnRpb25SZXN1bHRzT3B0aW9uKTsKLSAgICB9Ci0KLSAgICAvLyBQYXJzZSBhbGwgb2YgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKLSAgICBmb3IgKGludCBhcmdDb3VudCA9IDA7IGFyZ0NvdW50IDwgYXJncy5sZW5ndGg7IGFyZ0NvdW50KyspCi0gICAgewotICAgICAgLy8gLWNvbmZpZwotICAgICAgaWYgKChhcmdzW2FyZ0NvdW50XS5lcXVhbHNJZ25vcmVDYXNlKCItY29uZmlnIikpCi0gICAgICAgIHx8IChhcmdzW2FyZ0NvdW50XS5lcXVhbHMoIi1jIikpKQotICAgICAgewotICAgICAgICAvLyBTa2lwIHRoaXMgb3B0aW9uIHNpbmNlIGl0IHdhcyBhbHJlYWR5IHByb2Nlc3NlZAotICAgICAgICBhcmdDb3VudCsrOwotICAgICAgfQotCi0gICAgICAvLyAtdmVyYm9zZQotICAgICAgZWxzZSBpZiAoCi0gICAgICAgIChhcmdzW2FyZ0NvdW50XS5lcXVhbHNJZ25vcmVDYXNlKCItdmVyYm9zZSIpKQotICAgICAgICAgIHx8IChhcmdzW2FyZ0NvdW50XS5lcXVhbHMoIi12IikpKQotICAgICAgewotICAgICAgICBhcmdDb3VudCsrOwotICAgICAgICBhbmFseXplckNvbmZpZ0Zyb21BcmdzLnNldFZlcmJvc2VPcHRpb24oCi0gICAgICAgICAgQm9vbGVhbi52YWx1ZU9mKGdldE9wdGlvblZhbHVlKGFyZ3MsIGFyZ0NvdW50KSkuYm9vbGVhblZhbHVlKCkpOwotICAgICAgfQotCi0gICAgICAvLyAtYXNzZXJ0aW9uUmVzdWx0cwotICAgICAgZWxzZSBpZiAoCi0gICAgICAgIChhcmdzW2FyZ0NvdW50XS5lcXVhbHNJZ25vcmVDYXNlKCItYXNzZXJ0aW9uUmVzdWx0cyIpKQotICAgICAgICAgIHx8IChhcmdzW2FyZ0NvdW50XS5lcXVhbHMoIi1hIikpKQotICAgICAgewotICAgICAgICBhcmdDb3VudCsrOwotICAgICAgICBhc3NlcnRpb25SZXN1bHRzT3B0aW9uLnNldEFzc2VydGlvblJlc3VsdFR5cGUoCi0gICAgICAgICAgQXNzZXJ0aW9uUmVzdWx0VHlwZS5uZXdJbnN0YW5jZShnZXRPcHRpb25WYWx1ZShhcmdzLCBhcmdDb3VudCkpKTsKLSAgICAgIH0KLQotICAgICAgLy8gLW1lc3NhZ2VFbnRyeQotICAgICAgZWxzZSBpZiAoCi0gICAgICAgIChhcmdzW2FyZ0NvdW50XS5lcXVhbHNJZ25vcmVDYXNlKCItbWVzc2FnZUVudHJ5IikpCi0gICAgICAgICAgfHwgKGFyZ3NbYXJnQ291bnRdLmVxdWFscygiLU0iKSkpCi0gICAgICB7Ci0gICAgICAgIGFyZ0NvdW50Kys7Ci0gICAgICAgIGFzc2VydGlvblJlc3VsdHNPcHRpb24uc2V0U2hvd01lc3NhZ2VFbnRyeSgKLSAgICAgICAgICBCb29sZWFuLnZhbHVlT2YoZ2V0T3B0aW9uVmFsdWUoYXJncywgYXJnQ291bnQpKS5ib29sZWFuVmFsdWUoKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIC1hc3NlcnRpb25EZXNjcmlwdGlvbgotICAgICAgZWxzZSBpZiAoCi0gICAgICAgIChhcmdzW2FyZ0NvdW50XS5lcXVhbHNJZ25vcmVDYXNlKCItYXNzZXJ0aW9uRGVzY3JpcHRpb24iKSkKLSAgICAgICAgICB8fCAoYXJnc1thcmdDb3VudF0uZXF1YWxzKCItQSIpKSkKLSAgICAgIHsKLSAgICAgICAgYXJnQ291bnQrKzsKLSAgICAgICAgYXNzZXJ0aW9uUmVzdWx0c09wdGlvbi5zZXRTaG93QXNzZXJ0aW9uRGVzY3JpcHRpb24oCi0gICAgICAgICAgQm9vbGVhbi52YWx1ZU9mKGFyZ3NbYXJnQ291bnRdKS5ib29sZWFuVmFsdWUoKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIC1mYWlsdXJlTWVzc2FnZQotICAgICAgZWxzZSBpZiAoCi0gICAgICAgIChhcmdzW2FyZ0NvdW50XS5lcXVhbHNJZ25vcmVDYXNlKCItZmFpbHVyZU1lc3NhZ2UiKSkKLSAgICAgICAgICB8fCAoYXJnc1thcmdDb3VudF0uZXF1YWxzKCItRiIpKSkKLSAgICAgIHsKLSAgICAgICAgYXJnQ291bnQrKzsKLSAgICAgICAgYXNzZXJ0aW9uUmVzdWx0c09wdGlvbi5zZXRTaG93RmFpbHVyZU1lc3NhZ2UoCi0gICAgICAgICAgQm9vbGVhbi52YWx1ZU9mKGdldE9wdGlvblZhbHVlKGFyZ3MsIGFyZ0NvdW50KSkuYm9vbGVhblZhbHVlKCkpOwotICAgICAgfQotCi0gICAgICAvLyAtZmFpbHVyZURldGFpbAotICAgICAgZWxzZSBpZiAoCi0gICAgICAgIChhcmdzW2FyZ0NvdW50XS5lcXVhbHNJZ25vcmVDYXNlKCItZmFpbHVyZURldGFpbCIpKQotICAgICAgICAgIHx8IChhcmdzW2FyZ0NvdW50XS5lcXVhbHMoIi1EIikpKQotICAgICAgewotICAgICAgICBhcmdDb3VudCsrOwotICAgICAgICBhc3NlcnRpb25SZXN1bHRzT3B0aW9uLnNldFNob3dGYWlsdXJlRGV0YWlsKAotICAgICAgICAgIEJvb2xlYW4udmFsdWVPZihnZXRPcHRpb25WYWx1ZShhcmdzLCBhcmdDb3VudCkpLmJvb2xlYW5WYWx1ZSgpKTsKLSAgICAgIH0KLQotICAgICAgLy8gLWxvZ0ZpbGUKLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLWxvZ0ZpbGUiKSkKLSAgICAgICAgICB8fCAoYXJnc1thcmdDb3VudF0uZXF1YWxzKCItbCIpKSkKLSAgICAgIHsKLSAgICAgICAgYXJnQ291bnQrKzsKLSAgICAgICAgYW5hbHl6ZXJDb25maWdGcm9tQXJncy5zZXRMb2dMb2NhdGlvbihnZXRPcHRpb25WYWx1ZShhcmdzLCBhcmdDb3VudCkpOwotICAgICAgfQotCi0gICAgICAvLyAtdGVzdEFzc2VydGlvbkZpbGUKLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLXRlc3RBc3NlcnRpb25GaWxlIikpCi0gICAgICAgICAgfHwgKGFyZ3NbYXJnQ291bnRdLmVxdWFscygiLXQiKSkpCi0gICAgICB7Ci0gICAgICAgIGFyZ0NvdW50Kys7Ci0gICAgICAgIGFuYWx5emVyQ29uZmlnRnJvbUFyZ3Muc2V0VGVzdEFzc2VydGlvbnNEb2N1bWVudExvY2F0aW9uKAotICAgICAgICAgIGdldE9wdGlvblZhbHVlKGFyZ3MsIGFyZ0NvdW50KSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIC1yZXBvcnRGaWxlCi0gICAgICBlbHNlIGlmICgKLSAgICAgICAgKGFyZ3NbYXJnQ291bnRdLmVxdWFsc0lnbm9yZUNhc2UoIi1yZXBvcnRGaWxlIikpCi0gICAgICAgICAgfHwgKGFyZ3NbYXJnQ291bnRdLmVxdWFscygiLXIiKSkpCi0gICAgICB7Ci0gICAgICAgIGFyZ0NvdW50Kys7Ci0gICAgICAgIGFuYWx5emVyQ29uZmlnRnJvbUFyZ3Muc2V0UmVwb3J0TG9jYXRpb24oCi0gICAgICAgICAgZ2V0T3B0aW9uVmFsdWUoYXJncywgYXJnQ291bnQpKTsKLSAgICAgIH0KLQotICAgICAgLy8gLXJlcGxhY2UKLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLXJlcGxhY2UiKSkKLSAgICAgICAgICB8fCAoYXJnc1thcmdDb3VudF0uZXF1YWxzKCItUiIpKSkKLSAgICAgIHsKLSAgICAgICAgYXJnQ291bnQrKzsKLSAgICAgICAgYW5hbHl6ZXJDb25maWdGcm9tQXJncy5zZXRSZXBsYWNlUmVwb3J0KAotICAgICAgICAgIEJvb2xlYW4udmFsdWVPZihnZXRPcHRpb25WYWx1ZShhcmdzLCBhcmdDb3VudCkpLmJvb2xlYW5WYWx1ZSgpKTsKLSAgICAgIH0KLQotICAgICAgLy8gLWNvcnJlbGF0aW9uVHlwZQotICAgICAgZWxzZSBpZiAoCi0gICAgICAgIChhcmdzW2FyZ0NvdW50XS5lcXVhbHNJZ25vcmVDYXNlKCItY29ycmVsYXRpb25UeXBlIikpCi0gICAgICAgICAgfHwgKGFyZ3NbYXJnQ291bnRdLmVxdWFscygiLUMiKSkpCi0gICAgICB7Ci0gICAgICAgIGFyZ0NvdW50Kys7Ci0gICAgICAgIGFuYWx5emVyQ29uZmlnRnJvbUFyZ3Muc2V0Q29ycmVsYXRpb25UeXBlKAotICAgICAgICAgIGdldE9wdGlvblZhbHVlKGFyZ3MsIGFyZ0NvdW50KSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIC13c2RsRWxlbWVudAotICAgICAgZWxzZSBpZiAoCi0gICAgICAgIChhcmdzW2FyZ0NvdW50XS5lcXVhbHNJZ25vcmVDYXNlKCItd3NkbEVsZW1lbnQiKSkKLSAgICAgICAgICB8fCAoYXJnc1thcmdDb3VudF0uZXF1YWxzKCItVyIpKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIG9wdGlvbk5hbWUgPSBhcmdzW2FyZ0NvdW50XTsKLSAgICAgICAgYXJnQ291bnQrKzsKLQotICAgICAgICBXU0RMRWxlbWVudCB3c2RsRWxlbWVudCA9IG5ldyBXU0RMRWxlbWVudEltcGwoKTsKLSAgICAgICAgd3NkbEVsZW1lbnQuc2V0TmFtZShnZXRPcHRpb25WYWx1ZShhcmdzLCBhcmdDb3VudCwgb3B0aW9uTmFtZSkpOwotICAgICAgICBhcmdDb3VudCsrOwotICAgICAgICB3c2RsRWxlbWVudC5zZXRUeXBlKGdldE9wdGlvblZhbHVlKGFyZ3MsIGFyZ0NvdW50LCBvcHRpb25OYW1lKSk7Ci0gICAgICAgIGFyZ0NvdW50Kys7Ci0gICAgICAgIHdzZGxFbGVtZW50LnNldE5hbWVzcGFjZShnZXRPcHRpb25WYWx1ZShhcmdzLCBhcmdDb3VudCwgb3B0aW9uTmFtZSkpOwotICAgICAgICBpZiAoIWFyZ3NbYXJnQ291bnRdLnN0YXJ0c1dpdGgoIi0iKSkKLSAgICAgICAgewotICAgICAgICAgIGFyZ0NvdW50Kys7Ci0gICAgICAgICAgd3NkbEVsZW1lbnQuc2V0UGFyZW50RWxlbWVudE5hbWUoCi0gICAgICAgICAgICBnZXRPcHRpb25WYWx1ZShhcmdzLCBhcmdDb3VudCwgb3B0aW9uTmFtZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHdzZGxSZWZlcmVuY2UgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHdzZGxSZWZlcmVuY2Uuc2V0V1NETEVsZW1lbnQod3NkbEVsZW1lbnQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHVkZGlSZWZlcmVuY2UgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHVkZGlSZWZlcmVuY2Uuc2V0V1NETEVsZW1lbnQod3NkbEVsZW1lbnQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgICAgICBnZXRNZXNzYWdlKAotICAgICAgICAgICAgICAiY29uZmlnMTAiLAotICAgICAgICAgICAgICAiVGhlIC13c2RsRWxlbWVudCBvcHRpb24gbXVzdCBhcHBlYXIgYWZ0ZXIgdGhlIC13c2RsVVJJIG9yIC11ZGRpS2V5IG9wdGlvbnMuIikpOwotICAgICAgICB9Ci0KLSAgICAgICAgYW5hbHl6ZXJDb25maWdGcm9tQXJncy5zZXRXU0RMUmVmZXJlbmNlKHdzZGxSZWZlcmVuY2UpOwotICAgICAgfQotCi0gICAgICAvLyAtc2VydmljZUxvY2F0aW9uCi0gICAgICBlbHNlIGlmICgKLSAgICAgICAgKGFyZ3NbYXJnQ291bnRdLmVxdWFsc0lnbm9yZUNhc2UoIi1zZXJ2aWNlTG9jYXRpb24iKSkKLSAgICAgICAgICB8fCAoYXJnc1thcmdDb3VudF0uZXF1YWxzKCItUyIpKSkKLSAgICAgIHsKLSAgICAgICAgYXJnQ291bnQrKzsKLQotICAgICAgICBpZiAod3NkbFJlZmVyZW5jZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgd3NkbFJlZmVyZW5jZS5zZXRTZXJ2aWNlTG9jYXRpb24oZ2V0T3B0aW9uVmFsdWUoYXJncywgYXJnQ291bnQpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh1ZGRpUmVmZXJlbmNlICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICB1ZGRpUmVmZXJlbmNlLnNldFNlcnZpY2VMb2NhdGlvbihnZXRPcHRpb25WYWx1ZShhcmdzLCBhcmdDb3VudCkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgICAgICBnZXRNZXNzYWdlKAotICAgICAgICAgICAgICAiY29uZmlnMTEiLAotICAgICAgICAgICAgICAiVGhlIC1zZXJ2aWNlTG9jYXRpb24gb3B0aW9uIG11c3QgYXBwZWFyIGFmdGVyIHRoZSAtd3NkbFVSSSBvciAtdWRkaUtleSBvcHRpb25zLiIpKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICAvLyAtd3NkbFVSSQotICAgICAgZWxzZSBpZiAoCi0gICAgICAgIChhcmdzW2FyZ0NvdW50XS5lcXVhbHNJZ25vcmVDYXNlKCItd3NkbFVSSSIpKQotICAgICAgICAgIHx8IChhcmdzW2FyZ0NvdW50XS5lcXVhbHMoIi1XIikpKQotICAgICAgewotICAgICAgICBhcmdDb3VudCsrOwotICAgICAgICBpZiAod3NkbFJlZmVyZW5jZSA9PSBudWxsKQotICAgICAgICAgIHdzZGxSZWZlcmVuY2UgPSBuZXcgV1NETFJlZmVyZW5jZUltcGwoKTsKLSAgICAgICAgd3NkbFJlZmVyZW5jZS5zZXRXU0RMTG9jYXRpb24oZ2V0T3B0aW9uVmFsdWUoYXJncywgYXJnQ291bnQpKTsKLSAgICAgICAgYW5hbHl6ZXJDb25maWdGcm9tQXJncy5zZXRXU0RMUmVmZXJlbmNlKHdzZGxSZWZlcmVuY2UpOwotICAgICAgfQotCi0gICAgICAvLyAtdWRkaUtleVR5cGUKLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLXVkZGlLZXlUeXBlIikpCi0gICAgICAgICAgfHwgKGFyZ3NbYXJnQ291bnRdLmVxdWFscygiLUsiKSkpCi0gICAgICB7Ci0gICAgICAgIGFyZ0NvdW50Kys7Ci0gICAgICAgIGlmICh1ZGRpUmVmZXJlbmNlID09IG51bGwpCi0gICAgICAgICAgdWRkaVJlZmVyZW5jZSA9IG5ldyBVRERJUmVmZXJlbmNlSW1wbCgpOwotICAgICAgICB1ZGRpUmVmZXJlbmNlLnNldEtleVR5cGUoZ2V0T3B0aW9uVmFsdWUoYXJncywgYXJnQ291bnQpKTsKLSAgICAgICAgYW5hbHl6ZXJDb25maWdGcm9tQXJncy5zZXRVRERJUmVmZXJlbmNlKHVkZGlSZWZlcmVuY2UpOwotICAgICAgfQotCi0gICAgICAvLyAtdWRkaUtleQotICAgICAgZWxzZSBpZiAoCi0gICAgICAgIChhcmdzW2FyZ0NvdW50XS5lcXVhbHNJZ25vcmVDYXNlKCItdWRkaUtleSIpKQotICAgICAgICAgIHx8IChhcmdzW2FyZ0NvdW50XS5lcXVhbHMoIi1rIikpKQotICAgICAgewotICAgICAgICBhcmdDb3VudCsrOwotICAgICAgICBpZiAodWRkaVJlZmVyZW5jZSA9PSBudWxsKQotICAgICAgICAgIHVkZGlSZWZlcmVuY2UgPSBuZXcgVURESVJlZmVyZW5jZUltcGwoKTsKLSAgICAgICAgdWRkaVJlZmVyZW5jZS5zZXRLZXkoZ2V0T3B0aW9uVmFsdWUoYXJncywgYXJnQ291bnQpKTsKLSAgICAgICAgYW5hbHl6ZXJDb25maWdGcm9tQXJncy5zZXRVRERJUmVmZXJlbmNlKHVkZGlSZWZlcmVuY2UpOwotICAgICAgfQotCi0gICAgICAvLyAtaW5xdWlyeVVSTAotICAgICAgZWxzZSBpZiAoCi0gICAgICAgIChhcmdzW2FyZ0NvdW50XS5lcXVhbHNJZ25vcmVDYXNlKCItaW5xdWlyeVVSTCIpKQotICAgICAgICAgIHx8IChhcmdzW2FyZ0NvdW50XS5lcXVhbHMoIi1pIikpKQotICAgICAgewotICAgICAgICBhcmdDb3VudCsrOwotICAgICAgICBpZiAodWRkaVJlZmVyZW5jZSA9PSBudWxsKQotICAgICAgICAgIHVkZGlSZWZlcmVuY2UgPSBuZXcgVURESVJlZmVyZW5jZUltcGwoKTsKLSAgICAgICAgdWRkaVJlZmVyZW5jZS5zZXRJbnF1aXJ5VVJMKGdldE9wdGlvblZhbHVlKGFyZ3MsIGFyZ0NvdW50KSk7Ci0gICAgICAgIGFuYWx5emVyQ29uZmlnRnJvbUFyZ3Muc2V0VURESVJlZmVyZW5jZSh1ZGRpUmVmZXJlbmNlKTsKLSAgICAgIH0KLQotICAgICAgLy8gQUREOiBOZWVkIHRvIGFkZCBzdXBwb3J0IGZvciBvdGhlciBvcHRpb25zICgtY29uZmlnLCAtYmluZGluZywgZXRjLikKLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgICBnZXRNZXNzYWdlKAotICAgICAgICAgICAgImNvbmZpZzEyIiwKLSAgICAgICAgICAgIGFyZ3NbYXJnQ291bnRdLAotICAgICAgICAgICAgIlRoZSBzcGVjaWZpZWQgb3B0aW9uIGlzIG5vdCBzdXBwb3J0ZWQ6IikpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIElmIGFkZFN0eWxlU2hlZXQgd2FzIG5vdCBzcGVjaWZpZWQsIHRoZW4gY3JlYXRlIGEgY29tbWVudCB2ZXJzaW9uIG9mIGl0Ci0gICAgaWYgKGFuYWx5emVyQ29uZmlnRnJvbUFyZ3MuZ2V0QWRkU3R5bGVTaGVldCgpID09IG51bGwpCi0gICAgewotICAgICAgQWRkU3R5bGVTaGVldCBhZGRTdHlsZVNoZWV0ID0gbmV3IEFkZFN0eWxlU2hlZXRJbXBsKCk7Ci0gICAgICBhZGRTdHlsZVNoZWV0LnNldEhyZWYoV1NJQ29uc3RhbnRzLkRFRkFVTFRfUkVQT1JUX1hTTCk7Ci0gICAgICBhZGRTdHlsZVNoZWV0LnNldFR5cGUoV1NJQ29uc3RhbnRzLkRFRkFVTFRfWFNMX1RZUEUpOwotICAgICAgYWRkU3R5bGVTaGVldC5zZXRDb21tZW50KHRydWUpOwotICAgICAgYW5hbHl6ZXJDb25maWdGcm9tQXJncy5zZXRBZGRTdHlsZVNoZWV0KGFkZFN0eWxlU2hlZXQpOwotICAgIH0KLQotICAgIC8vIE1lcmdlIGNvbmZpZyBpbmZvIGludG8gdGhpcyBvYmplY3QKLSAgICBzZXRDb25maWcoYW5hbHl6ZXJDb25maWdGcm9tQXJncyk7Ci0KLSAgICBpZiAodmFsaWRhdGUpCi0gICAgeyAgCi0gICAgICAvLyBWZXJpZnkgdGhhdCBhbGwgcmVxdWlyZWQgb3B0aW9ucyB3ZXJlIHNwZWNpZmllZCBhbmQgCi0gICAgICAvLyB0aGF0IHRoZSBzcGVjaWZpZWQgb25lcyB3ZXJlIGNvcnJlY3QKLSAgICAgIGNoZWNrQ29uZmlnT3B0aW9ucygpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBWZXJpZnkgY29uZmlnIG9wdGlvbnMuCi0gICAqLwotICBwcml2YXRlIHZvaWQgY2hlY2tDb25maWdPcHRpb25zKCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIGZpbGVMb2NhdGlvbjsKLQotICAgIC8vIElmIHdzZGxSZWZlcmVuY2UgYW5kIHVkZGlSZWZlcmVuY2Ugc3BlY2lmaWVkLCB0aGVuIHRocm93IGV4Y2VwdGlvbgotICAgIGlmICgodGhpcy5pc1dTRExSZWZlcmVuY2VTZXQoKSkgJiYgKHRoaXMuaXNVRERJUmVmZXJlbmNlU2V0KCkpKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgIGdldE1lc3NhZ2UoCi0gICAgICAgICAgImNvbmZpZzA0IiwKLSAgICAgICAgICAiQ2FuIG5vdCBzcGVjaWZ5IGJvdGggdGhlIFdTREwgcmVmZXJlbmNlIGFuZCBVRERJIHJlZmVyZW5jZSBvcHRpb25zIikpOwotICAgIH0KLQotICAgIC8vIENoZWNrIGlmIHRlc3QgYXNzZXJ0aW9uIGZpbGUgZXhpc3RzCi0gICAgaWYgKChmaWxlTG9jYXRpb24gPSB0aGlzLmdldFRlc3RBc3NlcnRpb25zRG9jdW1lbnRMb2NhdGlvbigpKSA9PSBudWxsKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgIGdldE1lc3NhZ2UoCi0gICAgICAgICAgImNvbmZpZzE2IiwKLSAgICAgICAgICAiVGVzdCBhc3NlcnRpb24gZG9jdW1lbnQgbG9jYXRpb24gbXVzdCBiZSBzcGVjaWZpZWQuIikpOwotICAgIH0KLQotICAgIGVsc2UgaWYgKCFVdGlscy5maWxlRXhpc3RzKGZpbGVMb2NhdGlvbikpCi0gICAgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgZ2V0TWVzc2FnZSgKLSAgICAgICAgICAiY29uZmlnMTQiLAotICAgICAgICAgIGZpbGVMb2NhdGlvbiwKLSAgICAgICAgICAiQ291bGQgbm90IGZpbmQgdGVzdCBhc3NlcnRpb24gZG9jdW1lbnQuICBTcGVjaWZpZWQgZmlsZSBsb2NhdGlvbjoiKSk7Ci0gICAgfQotCi0gICAgLy8gQ2hlY2sgaWYgbG9nIGZpbGUgZXhpc3RzCi0gICAgaWYgKChmaWxlTG9jYXRpb24gPSB0aGlzLmdldExvZ0xvY2F0aW9uKCkpICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKCFVdGlscy5maWxlRXhpc3RzKGZpbGVMb2NhdGlvbikpCi0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgICAgbWVzc2FnZUxpc3QuZ2V0TWVzc2FnZSgKLSAgICAgICAgICAgICJjb25maWcwMiIsCi0gICAgICAgICAgICBmaWxlTG9jYXRpb24sCi0gICAgICAgICAgICAiQ291bGQgbm90IGZpbmQgbG9nIGZpbGU6IikpOwotICAgIH0KLQotICAgIC8vIENoZWNrIGlmIFdTREwgZmlsZSBleGlzdHMKLSAgICBpZiAoKHRoaXMuZ2V0V1NETFJlZmVyZW5jZSgpICE9IG51bGwpCi0gICAgICAmJiAoZmlsZUxvY2F0aW9uID0gdGhpcy5nZXRXU0RMUmVmZXJlbmNlKCkuZ2V0V1NETExvY2F0aW9uKCkpICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKCFVdGlscy5maWxlRXhpc3RzKGZpbGVMb2NhdGlvbikpCi0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgICAgbWVzc2FnZUxpc3QuZ2V0TWVzc2FnZSgKLSAgICAgICAgICAgICJjb25maWcwMyIsCi0gICAgICAgICAgICBmaWxlTG9jYXRpb24sCi0gICAgICAgICAgICAiQ291bGQgbm90IGZpbmQgV1NETCBmaWxlOiIpKTsKLSAgICB9Ci0KLSAgICBGaWxlIGZpbGUgPSBudWxsOwotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdldCBmaWxlIG9iamVjdCBmb3IgcmVwb3J0IGZpbGUKLSAgICAgIGZpbGUgPSBuZXcgRmlsZSh0aGlzLmdldFJlcG9ydExvY2F0aW9uKCkpOwotICAgIH0KLQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICBtZXNzYWdlTGlzdC5nZXRNZXNzYWdlKAotICAgICAgICAgICJjb25maWcxNyIsCi0gICAgICAgICAgIkNvdWxkIG5vdCBnZXQgcmVwb3J0IGZpbGUgbG9jYXRpb24uIikpOwotICAgIH0KLQotICAgIC8vIElmIHJlcGxhY2UgZmxhZyBpcyBmYWxzZSBhbmQgZmlsZSBleGlzdHMsIHRoZW4gdGhyb3cgZXhjZXB0aW9uCi0gICAgaWYgKGZpbGUuZXhpc3RzKCkgJiYgIXRoaXMuZ2V0UmVwbGFjZVJlcG9ydCgpKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgIG1lc3NhZ2VMaXN0LmdldE1lc3NhZ2UoCi0gICAgICAgICAgImNvbmZpZzE1IiwKLSAgICAgICAgICAiUmVwb3J0IGZpbGUgYWxyZWFkeSBleGlzdHMgYW5kIHJlcGxhY2Ugb3B0aW9uIHdhcyBub3Qgc3BlY2lmaWVkLiIpKTsKLSAgICB9Ci0KLSAgICBpZiAoY29ycmVsYXRpb25UeXBlICE9IG51bGwKLSAgICAgICYmICF0aGlzLmNvcnJlbGF0aW9uVHlwZS5lcXVhbHMoCi0gICAgICAgIFdTSUNvbnN0YW50cy5BVFRSVkFMX0NPUlJFTEFUSU9OX1RZUEVfRU5EUE9JTlQpCi0gICAgICAmJiAhdGhpcy5jb3JyZWxhdGlvblR5cGUuZXF1YWxzKAotICAgICAgICBXU0lDb25zdGFudHMuQVRUUlZBTF9DT1JSRUxBVElPTl9UWVBFX05BTUVTUEFDRSkKLSAgICAgICYmICF0aGlzLmNvcnJlbGF0aW9uVHlwZS5lcXVhbHMoCi0gICAgICAgIFdTSUNvbnN0YW50cy5BVFRSVkFMX0NPUlJFTEFUSU9OX1RZUEVfT1BFUkFUSU9OKSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICBtZXNzYWdlTGlzdC5nZXRNZXNzYWdlKAotICAgICAgICAgICJjb25maWcxOCIsCi0gICAgICAgICAgIkludmFsaWQgY29ycmVsYXRpb24gdHlwZSBzcGVjaWZpZWQuIikpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBHZXQgb3B0aW9uIHZhbHVlLgotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0T3B0aW9uVmFsdWUoU3RyaW5nW10gYXJncywgaW50IGluZGV4KSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4gZ2V0T3B0aW9uVmFsdWUoYXJncywgaW5kZXgsIGFyZ3NbaW5kZXggLSAxXSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IG9wdGlvbiB2YWx1ZS4KLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGdldE9wdGlvblZhbHVlKFN0cmluZ1tdIGFyZ3MsIGludCBpbmRleCwgU3RyaW5nIG9wdGlvbk5hbWUpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gSWYgaW5kZXggZ3JlYXRlciB0aGFuIGFycmF5IGxlbmd0aCwgdGhlbiB0aHJvdyBleGNlcHRpb24KLSAgICBpZiAoaW5kZXggPj0gYXJncy5sZW5ndGgpCi0gICAgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgZ2V0TWVzc2FnZSgKLSAgICAgICAgICAiY29uZmlnMTMiLAotICAgICAgICAgIG9wdGlvbk5hbWUsCi0gICAgICAgICAgIk9wdGlvbiBkaWQgbm90IGNvbnRhaW4gYSB2YWx1ZS4gIFNwZWNpZmllZCBvcHRpb246IikpOwotICAgIH0KLQotICAgIC8vIElmIHRoZSB2YWx1ZSBpcyBhbiBvcHRpb24gKGkuZS4gc3RhcnRzIHdpdGggYSAiLSIpLCB0aGVuIHRocm93IGV4Y2VwdGlvbgotICAgIGlmIChhcmdzW2luZGV4XS5zdGFydHNXaXRoKCItIikpCi0gICAgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgZ2V0TWVzc2FnZSgKLSAgICAgICAgICAiY29uZmlnMTMiLAotICAgICAgICAgIG9wdGlvbk5hbWUsCi0gICAgICAgICAgIk9wdGlvbiBkaWQgbm90IGNvbnRhaW4gYSB2YWx1ZS4gIFNwZWNpZmllZCBvcHRpb246IikpOwotICAgIH0KLQotICAgIHJldHVybiAoYXJnc1tpbmRleF0pOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBtZXNzYWdlIGZyb20gcmVzb3VyY2UgYnVuZGxlLgotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0TWVzc2FnZShTdHJpbmcgbWVzc2FnZUlELCBTdHJpbmcgZGVmYXVsdE1lc3NhZ2UpCi0gIHsKLSAgICByZXR1cm4gZ2V0TWVzc2FnZShtZXNzYWdlSUQsIG51bGwsIGRlZmF1bHRNZXNzYWdlKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgbWVzc2FnZSBmcm9tIHJlc291cmNlIGJ1bmRsZS4KLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGdldE1lc3NhZ2UoCi0gICAgU3RyaW5nIG1lc3NhZ2VJRCwKLSAgICBTdHJpbmcgbWVzc2FnZURhdGEsCi0gICAgU3RyaW5nIGRlZmF1bHRNZXNzYWdlKQotICB7Ci0gICAgU3RyaW5nIG1lc3NhZ2UgPSBkZWZhdWx0TWVzc2FnZTsKLSAgICBpZiAobWVzc2FnZUxpc3QgIT0gbnVsbCkKLSAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlTGlzdC5nZXRNZXNzYWdlKG1lc3NhZ2VJRCwgbWVzc2FnZURhdGEsIGRlZmF1bHRNZXNzYWdlKTsKLSAgICBlbHNlIGlmIChtZXNzYWdlRGF0YSAhPSBudWxsKQotICAgICAgbWVzc2FnZSArPSAiICIgKyBtZXNzYWdlRGF0YSArICIuIjsKLQotICAgIHJldHVybiBtZXNzYWdlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9jb25maWcvaW1wbC9BbmFseXplckNvbmZpZ1JlYWRlckltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9pbXBsL0FuYWx5emVyQ29uZmlnUmVhZGVySW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTk5MWNhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9pbXBsL0FuYWx5emVyQ29uZmlnUmVhZGVySW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTU5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuaW1wbDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lGaWxlTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5BbmFseXplckNvbmZpZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLkFuYWx5emVyQ29uZmlnUmVhZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuQXNzZXJ0aW9uUmVzdWx0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLkFzc2VydGlvblJlc3VsdHNPcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5VRERJUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5XU0RMUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5jb21tb24uQWRkU3R5bGVTaGVldDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuY29tbW9uLmltcGwuQWRkU3R5bGVTaGVldEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLldTRExWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuTWVzc2FnZUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVGVzdFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIFRoaXMgY2xhc3MgaXMgdGhlIGltcGxlbWVudGF0aW9uIHVzZWQgdG8gcmVhZCB0aGUgYW5hbHl6ZXIgY29uZmlnIGRvY3VtZW50cy4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgQW5hbHl6ZXJDb25maWdSZWFkZXJJbXBsIGltcGxlbWVudHMgQW5hbHl6ZXJDb25maWdSZWFkZXIKLXsKLSAgLyoqCi0gICAqIE1lc3NhZ2UgbGlzdC4KLSAgICovCi0gIHByb3RlY3RlZCBNZXNzYWdlTGlzdCBtZXNzYWdlTGlzdDsKLQotICAvKioKLSAgICogRG9jdW1lbnQgbG9jYXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGRvY3VtZW50VVJJOwotCi0gIC8qKgotICAgKiBJbml0aWFsaXplIGFuYWx5emVyIGNvbmZpZyByZWFkZXIuCi0gICAqLwotICBwdWJsaWMgdm9pZCBpbml0KE1lc3NhZ2VMaXN0IG1lc3NhZ2VMaXN0KQotICB7Ci0gICAgdGhpcy5tZXNzYWdlTGlzdCA9IG1lc3NhZ2VMaXN0OwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5BbmFseXplckNvbmZpZ1JlYWRlciNyZWFkQW5hbHl6ZXJDb25maWcoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIEFuYWx5emVyQ29uZmlnIHJlYWRBbmFseXplckNvbmZpZyhTdHJpbmcgYW5hbHl6ZXJDb25maWdVUkkpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgRmlsZVJlYWRlciBmaWxlUmVhZGVyID0gbnVsbDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBmaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoYW5hbHl6ZXJDb25maWdVUkkpOwotICAgIH0KLQotICAgIGNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZm5mZSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgV1NJRmlsZU5vdEZvdW5kRXhjZXB0aW9uKAotICAgICAgICBnZXRNZXNzYWdlKAotICAgICAgICAgICJjb25maWcwMSIsCi0gICAgICAgICAgYW5hbHl6ZXJDb25maWdVUkksCi0gICAgICAgICAgIkNvdWxkIG5vdCBmaW5kIGFuYWx5emVyIGNvbmZpZyBmaWxlOiAiKSwKLSAgICAgICAgZm5mZSk7Ci0gICAgfQotCi0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBXU0lFeGNlcHRpb24oCi0gICAgICAgIGdldE1lc3NhZ2UoCi0gICAgICAgICAgImNvbmZpZzA4IiwKLSAgICAgICAgICBhbmFseXplckNvbmZpZ1VSSSwKLSAgICAgICAgICAiQ291bGQgbm90IHJlYWQgYW5hbHl6ZXIgY29uZmlnIGZpbGU6ICIpLAotICAgICAgICBlKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVhZEFuYWx5emVyQ29uZmlnKGZpbGVSZWFkZXIpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5BbmFseXplckNvbmZpZ1JlYWRlciNyZWFkQW5hbHl6ZXJDb25maWcoUmVhZGVyKQotICAgKi8KLSAgcHVibGljIEFuYWx5emVyQ29uZmlnIHJlYWRBbmFseXplckNvbmZpZyhSZWFkZXIgcmVhZGVyKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBBbmFseXplckNvbmZpZyBhbmFseXplckNvbmZpZyA9IG5ldyBBbmFseXplckNvbmZpZ0ltcGwoKTsKLQotICAgIC8vIFBhcnNlIFhNTAotICAgIERvY3VtZW50IGRvYyA9IFhNTFV0aWxzLnBhcnNlWE1MKHJlYWRlcik7Ci0KLSAgICAvLyBQYXJzZSBlbGVtZW50cyBpbiB0aGUgY29uZmlnIGRvY3VtZW50Ci0gICAgcGFyc2VDb25maWdFbGVtZW50KGFuYWx5emVyQ29uZmlnLCBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCkpOwotCi0gICAgcmV0dXJuIGFuYWx5emVyQ29uZmlnOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50UmVhZGVyI2dldExvY2F0aW9uKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9jYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRVUkk7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuRG9jdW1lbnRSZWFkZXIjc2V0TG9jYXRpb24oU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TG9jYXRpb24oU3RyaW5nIGRvY3VtZW50VVJJKQotICB7Ci0gICAgdGhpcy5kb2N1bWVudFVSSSA9IGRvY3VtZW50VVJJOwotICB9Ci0KLSAgLyoqCi0gICAqIFBhcnNlIGNvbmZpZyBlbGVtZW50LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHBhcnNlQ29uZmlnRWxlbWVudCgKLSAgICBBbmFseXplckNvbmZpZyBhbmFseXplckNvbmZpZywKLSAgICBFbGVtZW50IGVsZW1lbnQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gQUREOiBHZXQgbmFtZSBhbmQgdmVyc2lvbgotCi0gICAgLy8gQUREOiBWZXJpZnkgdGhhdCB0aGlzIGlzIHRoZSBjb25maWcgZWxlbWVudAotCi0gICAgLy8gR2V0IGZpcnN0IGNoaWxkIGVsZW1lbnQKLSAgICBFbGVtZW50IG5leHRFbGVtZW50ID0gWE1MVXRpbHMuZ2V0Rmlyc3RDaGlsZChlbGVtZW50KTsKLQotICAgIC8vIERFQlVHOgotICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJFbGVtZW50IG5hbWU6ICIgKyBuZXh0RWxlbWVudC5nZXRDbGFzcygpLmdldE5hbWUoKSk7Ci0KLSAgICAvLyBQcm9jZXNzIGVhY2ggY2hpbGQgZWxlbWVudAotICAgIHdoaWxlIChuZXh0RWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIDxkZXNjcmlwdGlvbj4KLSAgICAgIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX0RFU0NSSVBUSU9OKSkKLSAgICAgIHsKLSAgICAgICAgYW5hbHl6ZXJDb25maWcuc2V0RGVzY3JpcHRpb24oWE1MVXRpbHMuZ2V0VGV4dChuZXh0RWxlbWVudCkpOwotICAgICAgfQotCi0gICAgICAvLyA8dmVyYm9zZT4KLSAgICAgIGVsc2UgaWYgKGlzRWxlbWVudChuZXh0RWxlbWVudCwgV1NJQ29uc3RhbnRzLkVMRU1fVkVSQk9TRSkpCi0gICAgICB7Ci0gICAgICAgIGFuYWx5emVyQ29uZmlnLnNldFZlcmJvc2VPcHRpb24oCi0gICAgICAgICAgWE1MVXRpbHMuZ2V0Qm9vbGVhblZhbHVlKG5leHRFbGVtZW50LCBmYWxzZSkpOwotICAgICAgfQotCi0gICAgICAvLyA8YXNzZXJ0aW9uUmVzdWx0cz4KLSAgICAgIGVsc2UgaWYgKGlzRWxlbWVudChuZXh0RWxlbWVudCwgV1NJQ29uc3RhbnRzLkVMRU1fQVNTRVJUSU9OX1JFU1VMVFMpKQotICAgICAgewotICAgICAgICAvLyBDcmVhdGUgYXNzZXJ0aW9uIHJlc3VsdHMgb3B0aW9uIG9iamVjdAotICAgICAgICBBc3NlcnRpb25SZXN1bHRzT3B0aW9uIGFzc2VydGlvblJlc3VsdHNPcHRpb24gPQotICAgICAgICAgIG5ldyBBc3NlcnRpb25SZXN1bHRzT3B0aW9uSW1wbCgpOwotICAgICAgICBhbmFseXplckNvbmZpZy5zZXRBc3NlcnRpb25SZXN1bHRzT3B0aW9uKGFzc2VydGlvblJlc3VsdHNPcHRpb24pOwotCi0gICAgICAgIC8vIFNldCByZXN1bHQgdHlwZQotICAgICAgICBTdHJpbmcgcmVzdWx0VHlwZSA9Ci0gICAgICAgICAgWE1MVXRpbHMuZ2V0QXR0cmlidXRlVmFsdWUobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5BVFRSX1RZUEUpOwotICAgICAgICBhc3NlcnRpb25SZXN1bHRzT3B0aW9uLnNldEFzc2VydGlvblJlc3VsdFR5cGUoCi0gICAgICAgICAgQXNzZXJ0aW9uUmVzdWx0VHlwZS5uZXdJbnN0YW5jZShyZXN1bHRUeXBlKSk7Ci0KLSAgICAgICAgLy8gU2V0IHNob3cgbG9nIGVudHJ5Ci0gICAgICAgIGFzc2VydGlvblJlc3VsdHNPcHRpb24uc2V0U2hvd01lc3NhZ2VFbnRyeSgKLSAgICAgICAgICBYTUxVdGlscy5nZXRCb29sZWFuVmFsdWUoCi0gICAgICAgICAgICBuZXh0RWxlbWVudCwKLSAgICAgICAgICAgIFdTSUNvbnN0YW50cy5BVFRSX01FU1NBR0VfRU5UUlksCi0gICAgICAgICAgICBhc3NlcnRpb25SZXN1bHRzT3B0aW9uLmdldFNob3dNZXNzYWdlRW50cnkoKSkpOwotCi0gICAgICAgIC8vIFNldCBzaG93IGZhaWx1cmUgbWVzc2FnZQotICAgICAgICBhc3NlcnRpb25SZXN1bHRzT3B0aW9uLnNldFNob3dGYWlsdXJlTWVzc2FnZSgKLSAgICAgICAgICBYTUxVdGlscy5nZXRCb29sZWFuVmFsdWUoCi0gICAgICAgICAgICBuZXh0RWxlbWVudCwKLSAgICAgICAgICAgIFdTSUNvbnN0YW50cy5BVFRSX0ZBSUxVUkVfTUVTU0FHRSwKLSAgICAgICAgICAgIGFzc2VydGlvblJlc3VsdHNPcHRpb24uZ2V0U2hvd0ZhaWx1cmVNZXNzYWdlKCkpKTsKLQotICAgICAgICAvLyBTZXQgc2hvdyBmYWlsdXJlIGRldGFpbAotICAgICAgICBhc3NlcnRpb25SZXN1bHRzT3B0aW9uLnNldFNob3dGYWlsdXJlRGV0YWlsKAotICAgICAgICAgIFhNTFV0aWxzLmdldEJvb2xlYW5WYWx1ZSgKLSAgICAgICAgICAgIG5leHRFbGVtZW50LAotICAgICAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJfRkFJTFVSRV9ERVRBSUwsCi0gICAgICAgICAgICBhc3NlcnRpb25SZXN1bHRzT3B0aW9uLmdldFNob3dGYWlsdXJlRGV0YWlsKCkpKTsKLQotICAgICAgICAvLyBSRU1PVkU6IFNldCBzaG93IHdhcm5pbmcgbWVzc2FnZQotICAgICAgICAvL2Fzc2VydGlvblJlc3VsdHNPcHRpb24uc2V0U2hvd1dhcm5pbmdNZXNzYWdlKFhNTFV0aWxzLmdldEJvb2xlYW5WYWx1ZShuZXh0RWxlbWVudCwgCi0gICAgICAgIC8vICAgICAgV1NJQ29uc3RhbnRzLkFUVFJfV0FSTklOR19NRVNTQUdFLCBhc3NlcnRpb25SZXN1bHRzT3B0aW9uLmdldFNob3dXYXJuaW5nTWVzc2FnZSgpKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxyZXBvcnRGaWxlPgotICAgICAgZWxzZSBpZiAoaXNFbGVtZW50KG5leHRFbGVtZW50LCBXU0lDb25zdGFudHMuRUxFTV9SRVBPUlRfRklMRSkpCi0gICAgICB7Ci0gICAgICAgIHBhcnNlUmVwb3J0RmlsZUVsZW1lbnQoYW5hbHl6ZXJDb25maWcsIG5leHRFbGVtZW50KTsKLSAgICAgIH0KLQotICAgICAgLy8gPHRlc3RBc3NlcnRpb25GaWxlPgotICAgICAgZWxzZSBpZiAoaXNFbGVtZW50KG5leHRFbGVtZW50LCBXU0lDb25zdGFudHMuRUxFTV9URVNUX0FTU0VSVElPTlNfRklMRSkpCi0gICAgICB7Ci0gICAgICAgIGFuYWx5emVyQ29uZmlnLnNldFRlc3RBc3NlcnRpb25zRG9jdW1lbnRMb2NhdGlvbigKLSAgICAgICAgICBYTUxVdGlscy5nZXRUZXh0KG5leHRFbGVtZW50KSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxsb2dGaWxlPgotICAgICAgZWxzZSBpZiAoaXNFbGVtZW50KG5leHRFbGVtZW50LCBXU0lDb25zdGFudHMuRUxFTV9MT0dfRklMRSkpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBjb3JyZWxhdGlvblR5cGUgPQotICAgICAgICAgIFhNTFV0aWxzLmdldEF0dHJpYnV0ZVZhbHVlKAotICAgICAgICAgICAgbmV4dEVsZW1lbnQsCi0gICAgICAgICAgICBXU0lDb25zdGFudHMuQVRUUl9DT1JSRUxBVElPTl9UWVBFKTsKLSAgICAgICAgYW5hbHl6ZXJDb25maWcuc2V0Q29ycmVsYXRpb25UeXBlKAotICAgICAgICAgIGNvcnJlbGF0aW9uVHlwZSA9PSBudWxsID8gIm9wZXJhdGlvbiIgOiBjb3JyZWxhdGlvblR5cGUpOwotICAgICAgICBhbmFseXplckNvbmZpZy5zZXRMb2dMb2NhdGlvbihYTUxVdGlscy5nZXRUZXh0KG5leHRFbGVtZW50KSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDx3c2RsUmVmZXJlbmNlPgotICAgICAgZWxzZSBpZiAoaXNFbGVtZW50KG5leHRFbGVtZW50LCBXU0lDb25zdGFudHMuRUxFTV9XU0RMX1JFRkVSRU5DRSkpCi0gICAgICB7Ci0gICAgICAgIHBhcnNlV3NkbFJlZmVyZW5jZShhbmFseXplckNvbmZpZywgbmV4dEVsZW1lbnQpOwotICAgICAgfQotCi0gICAgICAvLyA8dWRkaVJlZmVyZW5jZT4KLSAgICAgIGVsc2UgaWYgKGlzRWxlbWVudChuZXh0RWxlbWVudCwgV1NJQ29uc3RhbnRzLkVMRU1fVURESV9SRUZFUkVOQ0UpKQotICAgICAgewotICAgICAgICBwYXJzZVVkZGlSZWZlcmVuY2UoYW5hbHl6ZXJDb25maWcsIG5leHRFbGVtZW50KTsKLSAgICAgIH0KLQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBUaHJvdyBleGNlcHRpb24KLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgICBnZXRNZXNzYWdlKAotICAgICAgICAgICAgImNvbmZpZzA2IiwKLSAgICAgICAgICAgIG5leHRFbGVtZW50LmdldExvY2FsTmFtZSgpLAotICAgICAgICAgICAgIkludmFsaWQgYW5hbHl6ZXIgY29uZmlnIGVsZW1lbnQ6IikpOwotICAgICAgfQotCi0gICAgICAvLyBHZXQgbmV4dCBlbGVtZW50Ci0gICAgICBuZXh0RWxlbWVudCA9IFhNTFV0aWxzLmdldE5leHRTaWJsaW5nKG5leHRFbGVtZW50KTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUGFyc2UgcmVwb3J0RmlsZSBlbGVtZW50LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHBhcnNlUmVwb3J0RmlsZUVsZW1lbnQoCi0gICAgQW5hbHl6ZXJDb25maWcgYW5hbHl6ZXJDb25maWcsCi0gICAgRWxlbWVudCBlbGVtZW50KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEdldCByZXBvcnQgbG9jYXRpb24gYW5kIHJlcGxhY2UgaW5kaWNhdG9yCi0gICAgYW5hbHl6ZXJDb25maWcuc2V0UmVwbGFjZVJlcG9ydCgKLSAgICAgIFhNTFV0aWxzLmdldEJvb2xlYW5WYWx1ZShlbGVtZW50LCBXU0lDb25zdGFudHMuQVRUUl9SRVBMQUNFLCBmYWxzZSkpOwotICAgIGFuYWx5emVyQ29uZmlnLnNldFJlcG9ydExvY2F0aW9uKAotICAgICAgWE1MVXRpbHMuZ2V0QXR0cmlidXRlVmFsdWUoCi0gICAgICAgIGVsZW1lbnQsCi0gICAgICAgIFdTSUNvbnN0YW50cy5BVFRSX0xPQ0FUSU9OLAotICAgICAgICBXU0lDb25zdGFudHMuREVGQVVMVF9SRVBPUlRfVVJJKSk7Ci0KLSAgICAvLyBBREQ6IElmIHRoZSByZXBvcnQgbG9jYXRpb24gd2Fzbid0IHNwZWNpZmllZCwgdGhlbiB0aHJvdyBhbiBleGNlcHRpb24KLSAgICAvL2lmIChhbmFseXplckNvbmZpZy5nZXRSZXBvcnRMb2NhdGlvbigpID09IG51bGwpCi0gICAgLy8gIHRocm93IG5ldyBXU0lFeGNlcHRpb24oIlRoZSBhbmFseXplciBjb25maWd1cmF0aW9uIGZpbGUgbXVzdCBjb250YWluIHRoZSByZXBvcnQgZmlsZSBsb2NhdGlvbi4iKTsKLQotICAgIC8vIEdldCBmaXJzdCBjaGlsZCBlbGVtZW50Ci0gICAgRWxlbWVudCBuZXh0RWxlbWVudCA9IFhNTFV0aWxzLmdldEZpcnN0Q2hpbGQoZWxlbWVudCk7Ci0KLSAgICAvLyBQcm9jZXNzIGVhY2ggY2hpbGQgZWxlbWVudAotICAgIHdoaWxlIChuZXh0RWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIDxhZGRTdHlsZVNoZWV0PgotICAgICAgaWYgKGlzRWxlbWVudChuZXh0RWxlbWVudCwgV1NJQ29uc3RhbnRzLkVMRU1fQUREX1NUWUxFX1NIRUVUKSkKLSAgICAgIHsKLSAgICAgICAgQWRkU3R5bGVTaGVldCBhZGRTdHlsZVNoZWV0ID0gbmV3IEFkZFN0eWxlU2hlZXRJbXBsKCk7Ci0KLSAgICAgICAgLy8gUGFyc2UgdGhlIGVsZW1lbnQgIAotICAgICAgICBUZXN0VXRpbHMucGFyc2VBZGRTdHlsZVNoZWV0KAotICAgICAgICAgIG5leHRFbGVtZW50LAotICAgICAgICAgIGFkZFN0eWxlU2hlZXQsCi0gICAgICAgICAgV1NJQ29uc3RhbnRzLkRFRkFVTFRfUkVQT1JUX1hTTCk7Ci0KLSAgICAgICAgLy8gU2V0IGFkZCBzdHlsZSBzaGVldAotICAgICAgICBhbmFseXplckNvbmZpZy5zZXRBZGRTdHlsZVNoZWV0KGFkZFN0eWxlU2hlZXQpOwotICAgICAgfQotCi0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIFRocm93IGV4Y2VwdGlvbgotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICAgIGdldE1lc3NhZ2UoCi0gICAgICAgICAgICAiY29uZmlnMDYiLAotICAgICAgICAgICAgbmV4dEVsZW1lbnQuZ2V0TG9jYWxOYW1lKCksCi0gICAgICAgICAgICAiSW52YWxpZCBhbmFseXplciBjb25maWcgZWxlbWVudDoiKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIEdldCBuZXh0IGVsZW1lbnQKLSAgICAgIG5leHRFbGVtZW50ID0gWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcobmV4dEVsZW1lbnQpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBQYXJzZSB3c2RsIHJlZmVyZW5jZSBlbGVtZW50LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHBhcnNlV3NkbFJlZmVyZW5jZSgKLSAgICBBbmFseXplckNvbmZpZyBhbmFseXplckNvbmZpZywKLSAgICBFbGVtZW50IGVsZW1lbnQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gQ3JlYXRlIFVEREkgcmVmZXJlbmNlCi0gICAgV1NETFJlZmVyZW5jZSB3c2RsUmVmZXJlbmNlID0gbmV3IFdTRExSZWZlcmVuY2VJbXBsKCk7Ci0KLSAgICAvLyBTZXQgV1NETCByZWZlcmVuY2UKLSAgICBhbmFseXplckNvbmZpZy5zZXRXU0RMUmVmZXJlbmNlKHdzZGxSZWZlcmVuY2UpOwotCi0gICAgLy8gR2V0IGZpcnN0IGNoaWxkIGVsZW1lbnQKLSAgICBFbGVtZW50IG5leHRFbGVtZW50ID0gWE1MVXRpbHMuZ2V0Rmlyc3RDaGlsZChlbGVtZW50KTsKLQotICAgIC8vIFByb2Nlc3MgZWFjaCBjaGlsZCBlbGVtZW50Ci0gICAgd2hpbGUgKG5leHRFbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgLy8gPHdzZGxVUkk+Ci0gICAgICBpZiAoaXNFbGVtZW50KG5leHRFbGVtZW50LCBXU0lDb25zdGFudHMuRUxFTV9XU0RMX1VSSSkpCi0gICAgICB7Ci0gICAgICAgIC8vIFNldCBXU0RMIGxvY2F0aW9uCi0gICAgICAgIHdzZGxSZWZlcmVuY2Uuc2V0V1NETExvY2F0aW9uKFhNTFV0aWxzLmdldFRleHQobmV4dEVsZW1lbnQpKTsKLSAgICAgIH0KLQotICAgICAgLy8gPHNlcnZpY2VMb2NhdGlvbj4KLSAgICAgIGVsc2UgaWYgKGlzRWxlbWVudChuZXh0RWxlbWVudCwgV1NJQ29uc3RhbnRzLkVMRU1fU0VSVklDRV9MT0NBVElPTikpCi0gICAgICB7Ci0gICAgICAgIC8vIFNldCBzZXJ2aWNlIGxvY2F0aW9uCi0gICAgICAgIHdzZGxSZWZlcmVuY2Uuc2V0U2VydmljZUxvY2F0aW9uKFhNTFV0aWxzLmdldFRleHQobmV4dEVsZW1lbnQpKTsKLSAgICAgIH0KLQotICAgICAgLy8gPHdzZGxFbGVtZW50PgotICAgICAgZWxzZSBpZiAoaXNFbGVtZW50KG5leHRFbGVtZW50LCBXU0lDb25zdGFudHMuRUxFTV9XU0RMX0VMRU1FTlQpKQotICAgICAgewotICAgICAgICAvLyBTZXQgV1NETCBlbGVtZW50Ci0gICAgICAgIHdzZGxSZWZlcmVuY2Uuc2V0V1NETEVsZW1lbnQocGFyc2VXc2RsRWxlbWVudChuZXh0RWxlbWVudCkpOwotICAgICAgfQotCi0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIFRocm93IGV4Y2VwdGlvbgotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICAgIGdldE1lc3NhZ2UoCi0gICAgICAgICAgICAiY29uZmlnMDYiLAotICAgICAgICAgICAgbmV4dEVsZW1lbnQuZ2V0TG9jYWxOYW1lKCksCi0gICAgICAgICAgICAiSW52YWxpZCBhbmFseXplciBjb25maWcgZWxlbWVudDoiKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIEdldCBuZXh0IGVsZW1lbnQKLSAgICAgIG5leHRFbGVtZW50ID0gWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcobmV4dEVsZW1lbnQpOwotICAgIH0KLQotICAgIC8vIElmIFdTREwgZWxlbWVudCBvciBXU0wgVVJJIG5vdCBzcGVjaWZpZWQsIHRoZW4gdGhyb3cgZXhjZXB0aW9uCi0gICAgaWYgKCh3c2RsUmVmZXJlbmNlLmdldFdTRExFbGVtZW50KCkgPT0gbnVsbCkKLSAgICAgIHx8ICh3c2RsUmVmZXJlbmNlLmdldFdTRExMb2NhdGlvbigpID09IG51bGwpKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgIGdldE1lc3NhZ2UoCi0gICAgICAgICAgImNvbmZpZzA3IiwKLSAgICAgICAgICAiQm90aCB0aGUgPHdzZGxFbGVtZW50PiBhbmQgPHdzZGxVUkk+IGVsZW1lbnRzIG11c3QgYmUgc3BlY2lmaWVkLiIpKTsKLSAgICB9Ci0KLSAgICAvLyBJZiB0eXBlIGlzIHBvcnQgb3Igb3BlcmF0aW9uLCB0aGVuIHBhcmVudCBlbGVtZW50IG5hbWUgbXVzdCBiZSBzcGVjaWZpZWQKLSAgICBpZiAoKCh3c2RsUmVmZXJlbmNlCi0gICAgICAuZ2V0V1NETEVsZW1lbnQoKQotICAgICAgLmdldFR5cGUoKQotICAgICAgLmVxdWFsc0lnbm9yZUNhc2UoV1NETFZhbGlkYXRvci5UWVBFX0RFU0NSSVBUSU9OX1BPUlQpKQotICAgICAgfHwgKHdzZGxSZWZlcmVuY2UKLSAgICAgICAgLmdldFdTRExFbGVtZW50KCkKLSAgICAgICAgLmdldFR5cGUoKQotICAgICAgICAuZXF1YWxzSWdub3JlQ2FzZShXU0RMVmFsaWRhdG9yLlRZUEVfREVTQ1JJUFRJT05fT1BFUkFUSU9OKSkpCi0gICAgICAmJiAod3NkbFJlZmVyZW5jZS5nZXRXU0RMRWxlbWVudCgpLmdldFBhcmVudEVsZW1lbnROYW1lKCkgPT0gbnVsbCkpCi0gICAgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgZ2V0TWVzc2FnZSgKLSAgICAgICAgICAiY29uZmlnMDkiLAotICAgICAgICAgICJUaGUgcGFyZW50RWxlbWVudE5hbWUgYXR0cmlidXRlIG11c3QgYmUgc3BlY2lmaWVkIHdpdGggYSBXU0RMIHR5cGUgb2YgIgotICAgICAgICAgICAgKyBXU0RMVmFsaWRhdG9yLlRZUEVfREVTQ1JJUFRJT05fUE9SVAotICAgICAgICAgICAgKyAiIG9yICIKLSAgICAgICAgICAgICsgV1NETFZhbGlkYXRvci5UWVBFX0RFU0NSSVBUSU9OX09QRVJBVElPTgotICAgICAgICAgICAgKyAiLiIpKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUGFyc2UgdWRkaSByZWZlcmVuY2UuCi0gICAqLwotICBwcml2YXRlIHZvaWQgcGFyc2VVZGRpUmVmZXJlbmNlKAotICAgIEFuYWx5emVyQ29uZmlnIGFuYWx5emVyQ29uZmlnLAotICAgIEVsZW1lbnQgZWxlbWVudCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBDcmVhdGUgVURESSByZWZlcmVuY2UKLSAgICBVRERJUmVmZXJlbmNlIHVkZGlSZWZlcmVuY2UgPSBuZXcgVURESVJlZmVyZW5jZUltcGwoKTsKLQotICAgIC8vIFNldCBVRERJIHJlZmVyZW5jZQotICAgIGFuYWx5emVyQ29uZmlnLnNldFVERElSZWZlcmVuY2UodWRkaVJlZmVyZW5jZSk7Ci0KLSAgICAvLyBHZXQgZmlyc3QgY2hpbGQgZWxlbWVudAotICAgIEVsZW1lbnQgbmV4dEVsZW1lbnQgPSBYTUxVdGlscy5nZXRGaXJzdENoaWxkKGVsZW1lbnQpOwotCi0gICAgLy8gUHJvY2VzcyBlYWNoIGNoaWxkIGVsZW1lbnQKLSAgICB3aGlsZSAobmV4dEVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyA8aW5xdWlyeVVSTD4KLSAgICAgIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX0lOUVVJUllfVVJMKSkKLSAgICAgIHsKLSAgICAgICAgLy8gU2V0IGlucXVpcnkgVVJMCi0gICAgICAgIHVkZGlSZWZlcmVuY2Uuc2V0SW5xdWlyeVVSTChYTUxVdGlscy5nZXRUZXh0KG5leHRFbGVtZW50KSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDx1ZGRpS2V5PgotICAgICAgZWxzZSBpZiAoaXNFbGVtZW50KG5leHRFbGVtZW50LCBXU0lDb25zdGFudHMuRUxFTV9VRERJX0tFWSkpCi0gICAgICB7Ci0gICAgICAgIC8vIFNldCBVRERJIGtleSBhbmQga2V5IHR5cGUKLSAgICAgICAgdWRkaVJlZmVyZW5jZS5zZXRLZXkoWE1MVXRpbHMuZ2V0VGV4dChuZXh0RWxlbWVudCkpOwotICAgICAgICB1ZGRpUmVmZXJlbmNlLnNldEtleVR5cGUoCi0gICAgICAgICAgWE1MVXRpbHMuZ2V0QXR0cmlidXRlVmFsdWUobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5BVFRSX1RZUEUpKTsKLSAgICAgIH0KLQotICAgICAgLy8gPHdzZGxFbGVtZW50PgotICAgICAgZWxzZSBpZiAoaXNFbGVtZW50KG5leHRFbGVtZW50LCBXU0lDb25zdGFudHMuRUxFTV9XU0RMX0VMRU1FTlQpKQotICAgICAgewotICAgICAgICAvLyBTZXQgV1NETCBlbGVtZW50Ci0gICAgICAgIHVkZGlSZWZlcmVuY2Uuc2V0V1NETEVsZW1lbnQocGFyc2VXc2RsRWxlbWVudChuZXh0RWxlbWVudCkpOwotICAgICAgfQotCi0gICAgICAvLyA8c2VydmljZUxvY2F0aW9uPgotICAgICAgZWxzZSBpZiAoaXNFbGVtZW50KG5leHRFbGVtZW50LCBXU0lDb25zdGFudHMuRUxFTV9TRVJWSUNFX0xPQ0FUSU9OKSkKLSAgICAgIHsKLSAgICAgICAgLy8gU2V0IHNlcnZpY2UgbG9jYXRpb24KLSAgICAgICAgdWRkaVJlZmVyZW5jZS5zZXRTZXJ2aWNlTG9jYXRpb24oWE1MVXRpbHMuZ2V0VGV4dChuZXh0RWxlbWVudCkpOwotICAgICAgfQotCi0gICAgICAvKiBSRU1PVkU6Ci0gICAgICAvLyA8d3NkbEVsZW1lbnQ+Ci0gICAgICBlbHNlIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX1dTRExfRUxFTUVOVCkpIHsKLSAgICAgICAgLy8gU2V0IHNlcnZpY2UgbG9jYXRpb24KLSAgICAgICAgcGFyc2VXc2RsRWxlbWVudChhbmFseXplckNvbmZpZywgbmV4dEVsZW1lbnQpOwotICAgICAgIH0KLSAgICAgICAqLwotCi0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIFRocm93IGV4Y2VwdGlvbgotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICAgIGdldE1lc3NhZ2UoCi0gICAgICAgICAgICAiY29uZmlnMDYiLAotICAgICAgICAgICAgbmV4dEVsZW1lbnQuZ2V0TG9jYWxOYW1lKCksCi0gICAgICAgICAgICAiSW52YWxpZCBhbmFseXplciBjb25maWcgZWxlbWVudDoiKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIEdldCBuZXh0IGVsZW1lbnQKLSAgICAgIG5leHRFbGVtZW50ID0gWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcobmV4dEVsZW1lbnQpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBQYXJzZSBXU0RMIGVsZW1lbnQuCi0gICAqLwotICBwcml2YXRlIFdTRExFbGVtZW50IHBhcnNlV3NkbEVsZW1lbnQoRWxlbWVudCBlbGVtZW50KSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBXU0RMRWxlbWVudCB3c2RsRWxlbWVudCA9IG5ldyBXU0RMRWxlbWVudEltcGwoKTsKLQotICAgIC8vIFNldCB0eXBlLCBuYW1lc3BhY2UsIHBhcmVudCBlbGVtZW50IG5hbWUgYW5kIG5hbWUKLSAgICB3c2RsRWxlbWVudC5zZXRUeXBlKAotICAgICAgWE1MVXRpbHMuZ2V0QXR0cmlidXRlVmFsdWUoZWxlbWVudCwgV1NJQ29uc3RhbnRzLkFUVFJfVFlQRSkpOwotICAgIHdzZGxFbGVtZW50LnNldE5hbWVzcGFjZSgKLSAgICAgIFhNTFV0aWxzLmdldEF0dHJpYnV0ZVZhbHVlKGVsZW1lbnQsIFdTSUNvbnN0YW50cy5BVFRSX05BTUVTUEFDRSkpOwotICAgIHdzZGxFbGVtZW50LnNldFBhcmVudEVsZW1lbnROYW1lKAotICAgICAgWE1MVXRpbHMuZ2V0QXR0cmlidXRlVmFsdWUoCi0gICAgICAgIGVsZW1lbnQsCi0gICAgICAgIFdTSUNvbnN0YW50cy5BVFRSX1BBUkVOVF9FTEVNRU5UX05BTUUpKTsKLQotICAgIFN0cmluZyB3c2RsRWxlbWVudE5hbWUgPSBYTUxVdGlscy5nZXRUZXh0KGVsZW1lbnQpOwotICAgIGlmICh3c2RsRWxlbWVudE5hbWUuZXF1YWxzKCIiKSkKLSAgICB7Ci0gICAgICAvLyBUaHJvdyBleGNlcHRpb24KLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgIGdldE1lc3NhZ2UoImNvbmZpZzE5IiwgIlRoZSBXU0RMIGVsZW1lbnQgbmFtZSBtdXN0IGJlIHNwZWNpZmllZC4iKSk7Ci0gICAgfQotICAgIHdzZGxFbGVtZW50LnNldE5hbWUod3NkbEVsZW1lbnROYW1lKTsKLQotICAgIHJldHVybiB3c2RsRWxlbWVudDsKLSAgfQotCi0gIC8qKgotICAgKiBEZXRlcm1pbmUgaWYgdGhpcyBlbGVtZW50IG1hdGNoZXMgc3BlY2lmaWVkIGxvY2FsIG5hbWUgaW4gdGhlIGFuYWx5emVyIGNvbmZpZyBuYW1lc3BhY2UuCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gaXNFbGVtZW50KEVsZW1lbnQgZWxlbWVudCwgU3RyaW5nIGxvY2FsTmFtZSkKLSAgewotICAgIHJldHVybiBpc0VsZW1lbnQoCi0gICAgICBlbGVtZW50LAotICAgICAgZ2V0VmFsaWRXU0lBbmFseXplckNvbmZpZ05hbWVzcGFjZXMoKSwKLSAgICAgIGxvY2FsTmFtZSk7Ci0gIH0KLQotICAKLSAgc3RhdGljIHB1YmxpYyBMaXN0IGdldFZhbGlkV1NJQW5hbHl6ZXJDb25maWdOYW1lc3BhY2VzKCkKLSAgewotICAJQXJyYXlMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIAlsaXN0LmFkZChXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9BTkFMWVpFUl9DT05GSUdfMjAwMyk7Ci0gIAlsaXN0LmFkZChXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9BTkFMWVpFUl9DT05GSUcpOwotICAJcmV0dXJuIGxpc3Q7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBEZXRlcm1pbmUgaWYgdGhpcyBlbGVtZW50IG1hdGNoZXMgc3BlY2lmaWVkIGxvY2FsIG5hbWUgaW4gdGhlIGFuYWx5emVyIGNvbmZpZyBuYW1lc3BhY2UuCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gaXNFbGVtZW50KAotICAgIEVsZW1lbnQgZWxlbWVudCwKLSAgICBMaXN0IG5hbWVzcGFjZXMsCi0gICAgU3RyaW5nIGxvY2FsTmFtZSkKLSAgewotICAgIHJldHVybiBYTUxVdGlscy5pc0VsZW1lbnQoZWxlbWVudCwgbmFtZXNwYWNlcywgbG9jYWxOYW1lKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgbWVzc2FnZSBmcm9tIHJlc291cmNlIGJ1bmRsZS4KLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGdldE1lc3NhZ2UoU3RyaW5nIG1lc3NhZ2VJRCwgU3RyaW5nIGRlZmF1bHRNZXNzYWdlKQotICB7Ci0gICAgcmV0dXJuIGdldE1lc3NhZ2UobWVzc2FnZUlELCBudWxsLCBkZWZhdWx0TWVzc2FnZSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IG1lc3NhZ2UgZnJvbSByZXNvdXJjZSBidW5kbGUuCi0gICAqLwotICBwcml2YXRlIFN0cmluZyBnZXRNZXNzYWdlKAotICAgIFN0cmluZyBtZXNzYWdlSUQsCi0gICAgU3RyaW5nIG1lc3NhZ2VEYXRhLAotICAgIFN0cmluZyBkZWZhdWx0TWVzc2FnZSkKLSAgewotICAgIFN0cmluZyBtZXNzYWdlID0gZGVmYXVsdE1lc3NhZ2U7Ci0gICAgaWYgKG1lc3NhZ2VMaXN0ICE9IG51bGwpCi0gICAgICBtZXNzYWdlID0gbWVzc2FnZUxpc3QuZ2V0TWVzc2FnZShtZXNzYWdlSUQsIG1lc3NhZ2VEYXRhLCBkZWZhdWx0TWVzc2FnZSk7Ci0gICAgZWxzZQotICAgICAgbWVzc2FnZSArPSAiICIgKyBtZXNzYWdlRGF0YSArICIuIjsKLQotICAgIHJldHVybiBtZXNzYWdlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9jb25maWcvaW1wbC9Bc3NlcnRpb25SZXN1bHRzT3B0aW9uSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL2ltcGwvQXNzZXJ0aW9uUmVzdWx0c09wdGlvbkltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmJlM2QwZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9jb25maWcvaW1wbC9Bc3NlcnRpb25SZXN1bHRzT3B0aW9uSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwMyBJQk0gQ29ycG9yYXRpb24sIFBhcmFzb2Z0IGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gICAgICAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICBQYXJhc29mdCAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuaW1wbDsKLQotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuQXNzZXJ0aW9uUmVzdWx0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLkFzc2VydGlvblJlc3VsdHNPcHRpb247Ci0KLS8qKgotICogVGhpcyBjbGFzcyBjb250YWlucyB0aGUgYXNzZXJ0aW9uIHJlc3VsdHMgb3B0aW9uIGRlZmluaXRpb24uCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIEFzc2VydGlvblJlc3VsdHNPcHRpb25JbXBsIGltcGxlbWVudHMgQXNzZXJ0aW9uUmVzdWx0c09wdGlvbgotewotICAvKioKLSAgICogQXNzZXJ0aW9uIHJlc3VsdCB0eXBlLgotICAgKi8KLSAgcHJvdGVjdGVkIEFzc2VydGlvblJlc3VsdFR5cGUgcmVzdWx0VHlwZSA9IEFzc2VydGlvblJlc3VsdFR5cGUuQUxMOwotCi0gIC8qKgotICAgKiBTaG93IG1lc3NhZ2UgZW50cnkgaW5kaWNhdG9yLgotICAgKi8KLSAgcHJvdGVjdGVkIGJvb2xlYW4gc2hvd01lc3NhZ2VFbnRyeSA9IHRydWU7Ci0KLSAgLyoqCi0gICAqIFNob3cgYXNzZXJ0aW9uIGRlc2NyaXB0aW9uIGluZGljYXRvci4KLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIHNob3dBc3NlcnRpb25EZXNjcmlwdGlvbiA9IGZhbHNlOwotCi0gIC8qKgotICAgKiBTaG93IGZhaWx1cmUgbWVzc2FnZSBpbmRpY2F0b3IuCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiBzaG93RmFpbHVyZU1lc3NhZ2UgPSB0cnVlOwotCi0gIC8qKgotICAgKiBTaG93IGZhaWx1cmUgZGV0YWlsIGluZGljYXRvci4KLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIHNob3dGYWlsdXJlRGV0YWlsID0gdHJ1ZTsKLQotICAvKioKLSAgICogR2V0IGFzc2VydGlvbiByZXN1bHQgdHlwZS4KLSAgICogQHNlZSAjc2V0QXNzZXJ0aW9uUmVzdWx0VHlwZQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdFR5cGUgZ2V0QXNzZXJ0aW9uUmVzdWx0VHlwZSgpCi0gIHsKLSAgICByZXR1cm4gcmVzdWx0VHlwZTsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQgYXNzZXJ0aW9uIHJlc3VsdCB0eXBlLgotICAgKiBAc2VlICNnZXRBc3NlcnRpb25SZXN1bHRUeXBlCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRBc3NlcnRpb25SZXN1bHRUeXBlKEFzc2VydGlvblJlc3VsdFR5cGUgcmVzdWx0VHlwZSkKLSAgewotICAgIHRoaXMucmVzdWx0VHlwZSA9IHJlc3VsdFR5cGU7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHNob3cgbWVzc2FnZSBlbnRyeSBpbmRpY2F0b3IuCi0gICAqIEBzZWUgI3NldFNob3dNZXNzYWdlRW50cnkKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldFNob3dNZXNzYWdlRW50cnkoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuc2hvd01lc3NhZ2VFbnRyeTsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQgc2hvdyBtZXNzYWdlIGVudHJ5IGluZGljdG9yLgotICAgKiBAc2VlICNnZXRTaG93TWVzc2FnZUVudHJ5Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTaG93TWVzc2FnZUVudHJ5KGJvb2xlYW4gc2hvd01lc3NhZ2VFbnRyeSkKLSAgewotICAgIHRoaXMuc2hvd01lc3NhZ2VFbnRyeSA9IHNob3dNZXNzYWdlRW50cnk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHNob3cgYXNzZXJ0aW9uIGRlc2NyaXB0aW9uIGluZGljYXRvci4KLSAgICogQHNlZSAjc2V0U2hvd0Fzc2VydGlvbkRlc2NyaXB0aW9uCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBnZXRTaG93QXNzZXJ0aW9uRGVzY3JpcHRpb24oKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuc2hvd0Fzc2VydGlvbkRlc2NyaXB0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldCBzaG93IGFzc2VydGlvbiBkZXNjcmlwdGlvbiBpbmRpY3Rvci4KLSAgICogQHNlZSAjZ2V0U2hvd0Fzc2VydGlvbkRlc2NyaXB0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTaG93QXNzZXJ0aW9uRGVzY3JpcHRpb24oYm9vbGVhbiBzaG93QXNzZXJ0aW9uRGVzY3JpcHRpb24pCi0gIHsKLSAgICB0aGlzLnNob3dBc3NlcnRpb25EZXNjcmlwdGlvbiA9IHNob3dBc3NlcnRpb25EZXNjcmlwdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgc2hvdyBmYWlsdXJlIG1lc3NhZ2UgaW5kaWNhdG9yLgotICAgKiBAc2VlICNzZXRTaG93RmFpbHVyZU1lc3NhZ2UKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldFNob3dGYWlsdXJlTWVzc2FnZSgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5zaG93RmFpbHVyZU1lc3NhZ2U7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IHNob3cgZmFpbHVyZSBtZXNhZ2UgaW5kaWNhdG9yLgotICAgKiBAc2VlICNnZXRTaG93RmFpbHVyZU1lc3NhZ2UKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNob3dGYWlsdXJlTWVzc2FnZShib29sZWFuIHNob3dGYWlsdXJlTWVzc2FnZSkKLSAgewotICAgIHRoaXMuc2hvd0ZhaWx1cmVNZXNzYWdlID0gc2hvd0ZhaWx1cmVNZXNzYWdlOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBzaG93IGZhaWx1cmUgZGV0YWlsIGluZGljYXRvci4KLSAgICogQHNlZSAjc2V0U2hvd0ZhaWx1cmVEZXRhaWwKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldFNob3dGYWlsdXJlRGV0YWlsKCkKLSAgewotICAgIHJldHVybiB0aGlzLnNob3dGYWlsdXJlRGV0YWlsOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldCBzaG93IGZhaWx1cmUgZGV0YWlsIGluZGljYXRvci4KLSAgICogQHNlZSAjZ2V0U2hvd0ZhaWx1cmVEZXRhaWwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNob3dGYWlsdXJlRGV0YWlsKGJvb2xlYW4gc2hvd0ZhaWx1cmVEZXRhaWwpCi0gIHsKLSAgICB0aGlzLnNob3dGYWlsdXJlRGV0YWlsID0gc2hvd0ZhaWx1cmVEZXRhaWw7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIHB3LnByaW50bG4oIiAgQXNzZXJ0aW9uIFJlc3VsdHM6Iik7Ci0gICAgcHcucHJpbnRsbigiICAgIHR5cGUgLi4uLi4uLi4uLi4uLi4uLi4uLi4uICIgKyB0aGlzLnJlc3VsdFR5cGUpOwotICAgIHB3LnByaW50bG4oIiAgICBtZXNzYWdlRW50cnkgLi4uLi4uLi4uLi4uLiAiICsgdGhpcy5zaG93TWVzc2FnZUVudHJ5KTsKLSAgICBwdy5wcmludGxuKAotICAgICAgIiAgICBhc3NlcnRpb25EZXNjcmlwdGlvbiAuLi4uLiAiICsgdGhpcy5zaG93QXNzZXJ0aW9uRGVzY3JpcHRpb24pOwotICAgIHB3LnByaW50bG4oIiAgICBmYWlsdXJlTWVzc2FnZSAuLi4uLi4uLi4uLiAiICsgdGhpcy5zaG93RmFpbHVyZU1lc3NhZ2UpOwotICAgIHB3LnByaW50bG4oIiAgICBmYWlsdXJlRGV0YWlsIC4uLi4uLi4uLi4uLiAiICsgdGhpcy5zaG93RmFpbHVyZURldGFpbCk7Ci0KLSAgICByZXR1cm4gc3cudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QgYXMgYW4gWE1MIHN0cmluZy4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9YTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgU3RyaW5nIG5zTmFtZSA9IG5hbWVzcGFjZU5hbWU7Ci0gICAgaWYgKCghbnNOYW1lLmVxdWFscygiIikgJiYgKCFuc05hbWUuZW5kc1dpdGgoIjoiKSkpKQotICAgICAgbnNOYW1lICs9ICI6IjsKLQotICAgIC8vIENvbmZpZyBvcHRpb25zCi0gICAgcHcucHJpbnQoIiAgICAgIDwiICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fQVNTRVJUSU9OX1JFU1VMVFMgKyAiICIpOwotICAgIHB3LnByaW50KFdTSUNvbnN0YW50cy5BVFRSX1RZUEUgKyAiPVwiIiArIGdldEFzc2VydGlvblJlc3VsdFR5cGUoKSArICJcIiAiKTsKLSAgICBwdy5wcmludCgKLSAgICAgIFdTSUNvbnN0YW50cy5BVFRSX01FU1NBR0VfRU5UUlkgKyAiPVwiIiArIGdldFNob3dNZXNzYWdlRW50cnkoKSArICJcIiAiKTsKLSAgICBwdy5wcmludCgKLSAgICAgIFdTSUNvbnN0YW50cy5BVFRSX0FTU0VSVElPTl9ERVNDUklQVElPTgotICAgICAgICArICI9XCIiCi0gICAgICAgICsgZ2V0U2hvd0Fzc2VydGlvbkRlc2NyaXB0aW9uKCkKLSAgICAgICAgKyAiXCIgIik7Ci0gICAgcHcucHJpbnQoCi0gICAgICBXU0lDb25zdGFudHMuQVRUUl9GQUlMVVJFX01FU1NBR0UKLSAgICAgICAgKyAiPVwiIgotICAgICAgICArIGdldFNob3dGYWlsdXJlTWVzc2FnZSgpCi0gICAgICAgICsgIlwiICIpOwotICAgIHB3LnByaW50bG4oCi0gICAgICBXU0lDb25zdGFudHMuQVRUUl9GQUlMVVJFX0RFVEFJTAotICAgICAgICArICI9XCIiCi0gICAgICAgICsgZ2V0U2hvd0ZhaWx1cmVEZXRhaWwoKQotICAgICAgICArICJcIi8+Iik7Ci0gICAgLy8gUkVNT1ZFOgotICAgIC8vcHcucHJpbnRsbihXU0lDb25zdGFudHMuQVRUUl9XQVJOSU5HX01FU1NBR0UgKyAiPVwiIiArIGdldFNob3dXYXJuaW5nTWVzc2FnZSgpICsgIlwiLz4iKTsKLQotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9jb25maWcvaW1wbC9VRERJUmVmZXJlbmNlSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL2ltcGwvVURESVJlZmVyZW5jZUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGRjN2I2Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9jb25maWcvaW1wbC9VRERJUmVmZXJlbmNlSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTk3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLmltcGw7Ci0KLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLlVERElSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5XU0RMRWxlbWVudDsKLQotLyoqCi0gKiBUaGUgaWltcGxlbWVudGF0aW9uIGZvciBhIHJlZmVyZW5jZSB0byBhIGRpc2NvdmVyeSBhcnRpZmFjdC4gIAotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgVURESVJlZmVyZW5jZUltcGwgaW1wbGVtZW50cyBVRERJUmVmZXJlbmNlCi17Ci0gIC8qKgotICAgKiBVRERJIGtleSB0eXBlLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBrZXlUeXBlID0gbnVsbDsKLQotICAvKioKLSAgICogVURESSBrZXkuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGtleSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFVEREkgaW5xdWlyeSBVUkwuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGlucXVpcnlVUkwgPSBudWxsOwotCi0gIC8qKgotICAgKiBXU0RMIGVsZW1lbnQuCi0gICAqLwotICBwcm90ZWN0ZWQgV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQgPSBudWxsOwotCi0gIC8qKgotICAgKiBTZXJ2aWNlIGxvY2F0aW9uLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBzZXJ2aWNlTG9jYXRpb24gPSBudWxsOwotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuVURESVJlZmVyZW5jZSNnZXRLZXlUeXBlKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0S2V5VHlwZSgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5rZXlUeXBlOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5VRERJUmVmZXJlbmNlI3NldEtleVR5cGUoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0S2V5VHlwZShTdHJpbmcga2V5VHlwZSkKLSAgewotICAgIGlmIChrZXlUeXBlLmVxdWFscyhCSU5ESU5HX0tFWSkgfHwga2V5VHlwZS5lcXVhbHMoVE1PREVMX0tFWSkpCi0gICAgICB0aGlzLmtleVR5cGUgPSBrZXlUeXBlOwotICAgIGVsc2UKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgICJJbnZhbGlkIFVEREkga2V5IHR5cGU6IFsiICsga2V5VHlwZSArICJdLiIpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5VRERJUmVmZXJlbmNlI2dldEtleSgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEtleSgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5rZXk7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLlVERElSZWZlcmVuY2Ujc2V0S2V5KFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEtleShTdHJpbmcga2V5KQotICB7Ci0gICAgdGhpcy5rZXkgPSBrZXk7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLlVERElSZWZlcmVuY2UjZ2V0SW5xdWlyeVVSTCgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldElucXVpcnlVUkwoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuaW5xdWlyeVVSTDsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuVURESVJlZmVyZW5jZSNzZXRJbnF1aXJ5VVJMKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldElucXVpcnlVUkwoU3RyaW5nIGlucXVpcnlVUkwpCi0gIHsKLSAgICB0aGlzLmlucXVpcnlVUkwgPSBpbnF1aXJ5VVJMOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5XU0RMUmVmZXJlbmNlI2dldFdTRExFbGVtZW50KCkKLSAgICovCi0gIHB1YmxpYyBXU0RMRWxlbWVudCBnZXRXU0RMRWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy53c2RsRWxlbWVudDsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuV1NETFJlZmVyZW5jZSNzZXRXU0RMRWxlbWVudChXU0RMRWxlbWVudCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdTRExFbGVtZW50KFdTRExFbGVtZW50IHdzZGxFbGVtZW50KQotICB7Ci0gICAgdGhpcy53c2RsRWxlbWVudCA9IHdzZGxFbGVtZW50OwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5XU0RMUmVmZXJlbmNlI2dldFNlcnZpY2VMb2NhdGlvbigpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFNlcnZpY2VMb2NhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5zZXJ2aWNlTG9jYXRpb247Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLldTRExSZWZlcmVuY2Ujc2V0U2VydmljZUxvY2F0aW9uKCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VMb2NhdGlvbihTdHJpbmcgc2VydmljZUxvY2F0aW9uKQotICB7Ci0gICAgdGhpcy5zZXJ2aWNlTG9jYXRpb24gPSBzZXJ2aWNlTG9jYXRpb247Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIHB3LnByaW50bG4oIiAgVURESSBSZWZlcmVuY2U6ICIpOwotICAgIHB3LnByaW50bG4oIiAgICBVRERJIEtleTogIik7Ci0gICAgcHcucHJpbnRsbigiICAgICAgdHlwZSAuLi4uLi4uLi4uLi4uLi4uLi4uICIgKyB0aGlzLmtleVR5cGUpOwotICAgIHB3LnByaW50bG4oIiAgICAgIGtleSAuLi4uLi4uLi4uLi4uLi4uLi4uLiAiICsgdGhpcy5rZXkpOwotICAgIHB3LnByaW50bG4oIiAgICBpbnF1aXJ5VVJMIC4uLi4uLi4uLi4uLi4uLiAiICsgdGhpcy5pbnF1aXJ5VVJMKTsKLSAgICBpZiAodGhpcy5zZXJ2aWNlTG9jYXRpb24gIT0gbnVsbCkKLSAgICAgIHB3LnByaW50bG4oIiAgICBzZXJ2aWNlTG9jYXRpb24gLi4uLi4uLi4uLiAiICsgdGhpcy5zZXJ2aWNlTG9jYXRpb24pOwotICAgIGlmICh0aGlzLndzZGxFbGVtZW50ICE9IG51bGwpCi0gICAgICBwdy5wcmludCh0aGlzLndzZGxFbGVtZW50LnRvU3RyaW5nKCkpOwotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50I3RvWE1MU3RyaW5nKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9YTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgU3RyaW5nIG5zTmFtZSA9IG5hbWVzcGFjZU5hbWU7Ci0gICAgaWYgKCghbnNOYW1lLmVxdWFscygiIikgJiYgKCFuc05hbWUuZW5kc1dpdGgoIjoiKSkpKQotICAgICAgbnNOYW1lICs9ICI6IjsKLQotICAgIC8vIEVsZW1lbnQKLSAgICBwdy5wcmludGxuKCIgICAgICA8IiArIG5zTmFtZSArIEVMRU1fTkFNRSArICI+Iik7Ci0gICAgcHcucHJpbnQoIiAgICAgICAgPCIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9VRERJX0tFWSArICIgIik7Ci0gICAgcHcucHJpbnQoV1NJQ29uc3RhbnRzLkFUVFJfVFlQRSArICI9XCIiICsgZ2V0S2V5VHlwZSgpICsgIlwiPiIpOwotICAgIHB3LnByaW50KGdldEtleSgpKTsKLSAgICBwdy5wcmludGxuKCI8LyIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9VRERJX0tFWSArICI+Iik7Ci0gICAgcHcucHJpbnQoIiAgICAgICAgPCIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9JTlFVSVJZX1VSTCArICI+Iik7Ci0gICAgcHcucHJpbnQoZ2V0SW5xdWlyeVVSTCgpKTsKLSAgICBwdy5wcmludGxuKCI8LyIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9JTlFVSVJZX1VSTCArICI+Iik7Ci0KLSAgICBpZiAodGhpcy53c2RsRWxlbWVudCAhPSBudWxsKQotICAgICAgcHcucHJpbnQoZ2V0V1NETEVsZW1lbnQoKS50b1hNTFN0cmluZyhuc05hbWUpKTsKLQotICAgIGlmICh0aGlzLnNlcnZpY2VMb2NhdGlvbiAhPSBudWxsKQotICAgIHsKLSAgICAgIHB3LnByaW50KCIgICAgICAgIDwiICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fU0VSVklDRV9MT0NBVElPTiArICI+Iik7Ci0gICAgICBwdy5wcmludChnZXRTZXJ2aWNlTG9jYXRpb24oKSk7Ci0gICAgICBwdy5wcmludGxuKAotICAgICAgICAiICAgICAgICA8LyIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9TRVJWSUNFX0xPQ0FUSU9OICsgIj4iKTsKLSAgICB9Ci0KLSAgICBwdy5wcmludGxuKCIgICAgICA8LyIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiPiIpOwotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL2ltcGwvV1NETEVsZW1lbnRJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9jb25maWcvaW1wbC9XU0RMRWxlbWVudEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmVjNjdkNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9hbmFseXplci9jb25maWcvaW1wbC9XU0RMRWxlbWVudEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLmltcGw7Ci0KLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuV1NETFZhbGlkYXRvcjsKLQotLyoqCi0gKiBUaGUgaW1wbGVtZW50YXRpb24gZm9yIFdTREwgZGVmaW5pdGlvbnMuIAotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgV1NETEVsZW1lbnRJbXBsIGltcGxlbWVudHMgV1NETEVsZW1lbnQKLXsKLSAgcHJvdGVjdGVkIFN0cmluZyB0eXBlOwotICBwcm90ZWN0ZWQgU3RyaW5nIG5hbWVzcGFjZTsKLSAgcHJvdGVjdGVkIFN0cmluZyBuYW1lOwotICBwcm90ZWN0ZWQgU3RyaW5nIHBhcmVudEVsZW1lbnROYW1lOwotCi0gIC8qKgotICAgKiBAc2VlICNzZXRUeXBlCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFR5cGUoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMudHlwZTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlICNnZXRUeXBlCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUeXBlKFN0cmluZyB0eXBlKQotICB7Ci0gICAgdGhpcy50eXBlID0gdHlwZTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlICNzZXROYW1lc3BhY2UKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlKCkKLSAgewotICAgIHJldHVybiB0aGlzLm5hbWVzcGFjZTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlICNnZXROYW1lc3BhY2UKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE5hbWVzcGFjZShTdHJpbmcgbmFtZXNwYWNlKQotICB7Ci0gICAgdGhpcy5uYW1lc3BhY2UgPSBuYW1lc3BhY2U7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSAjc2V0TmFtZQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLSAgewotICAgIHJldHVybiB0aGlzLm5hbWU7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSAjZ2V0TmFtZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkKLSAgewotICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gIH0KLQotICBwdWJsaWMgUU5hbWUgZ2V0UU5hbWUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBRTmFtZSh0aGlzLm5hbWVzcGFjZSwgdGhpcy5uYW1lKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgV1NETCBwYXJlbnQgZWxlbWVudCBuYW1lLgotICAgKiBAc2VlICNzZXRQYXJlbnRFbGVtZW50TmFtZQotICAKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UGFyZW50RWxlbWVudE5hbWUoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMucGFyZW50RWxlbWVudE5hbWU7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IFdTREwgcGFyZW50IGVsZW1lbnQgbmFtZS4KLSAgICogQHNlZSAjZ2V0UGFyZW50RWxlbWVudE5hbWUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFBhcmVudEVsZW1lbnROYW1lKFN0cmluZyBwYXJlbnRFbGVtZW50TmFtZSkKLSAgewotICAgIHRoaXMucGFyZW50RWxlbWVudE5hbWUgPSBwYXJlbnRFbGVtZW50TmFtZTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kudGVzdC5hbmFseXplci5jb25maWcuV1NETEVsZW1lbnQjZ2V0UGFyZW50RWxlbWVudFFOYW1lKCkKLSAgICovCi0gIHB1YmxpYyBRTmFtZSBnZXRQYXJlbnRFbGVtZW50UU5hbWUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBRTmFtZSh0aGlzLm5hbWVzcGFjZSwgdGhpcy5wYXJlbnRFbGVtZW50TmFtZSk7Ci0gIH0KLQotICAvKioKLSAgICogSXMgcG9ydCBlbGVtZW50LgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNQb3J0KCkKLSAgewotICAgIHJldHVybiB0eXBlLmVxdWFscyhXU0RMVmFsaWRhdG9yLlRZUEVfREVTQ1JJUFRJT05fUE9SVCk7Ci0gIH0KLQotICAvKioKLSAgICogSXMgYmluZGluZyBlbGVtZW50LgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNCaW5kaW5nKCkKLSAgewotICAgIHJldHVybiB0eXBlLmVxdWFscyhXU0RMVmFsaWRhdG9yLlRZUEVfREVTQ1JJUFRJT05fQklORElORyk7Ci0gIH0KLQotICAvKioKLSAgICogSXMgcG9ydFR5cGUgZWxlbWVudC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzUG9ydFR5cGUoKQotICB7Ci0gICAgcmV0dXJuIHR5cGUuZXF1YWxzKFdTRExWYWxpZGF0b3IuVFlQRV9ERVNDUklQVElPTl9QT1JUVFlQRSk7Ci0gIH0KLQotICAvKioKLSAgICogSXMgb3BlcmF0aW9uIGVsZW1lbnQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc09wZXJhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gdHlwZS5lcXVhbHMoV1NETFZhbGlkYXRvci5UWVBFX0RFU0NSSVBUSU9OX09QRVJBVElPTik7Ci0gIH0KLQotICAvKioKLSAgICogSXMgbWVzc2FnZSBlbGVtZW50LgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNNZXNzYWdlKCkKLSAgewotICAgIHJldHVybiB0eXBlLmVxdWFscyhXU0RMVmFsaWRhdG9yLlRZUEVfREVTQ1JJUFRJT05fTUVTU0FHRSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIHB3LnByaW50bG4oIiAgICBXU0RMIEVsZW1lbnQ6ICIpOwotICAgIHB3LnByaW50bG4oIiAgICAgIHR5cGUgLi4uLi4uLi4uLi4uLi4uLi4uLiAiICsgdGhpcy50eXBlKTsKLSAgICBwdy5wcmludGxuKCIgICAgICBuYW1lc3BhY2UgLi4uLi4uLi4uLi4uLi4gIiArIHRoaXMubmFtZXNwYWNlKTsKLSAgICBwdy5wcmludGxuKCIgICAgICBuYW1lIC4uLi4uLi4uLi4uLi4uLi4uLi4gIiArIHRoaXMubmFtZSk7Ci0KLSAgICBpZiAodGhpcy5wYXJlbnRFbGVtZW50TmFtZSAhPSBudWxsKQotICAgICAgcHcucHJpbnRsbigiICAgICAgcGFyZW50RWxlbWVudE5hbWUgLi4uLi4uICIgKyB0aGlzLnBhcmVudEVsZW1lbnROYW1lKTsKLQotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdCBhcyBhbiBYTUwgc3RyaW5nLgotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1hNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSkKLSAgewotICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICBQcmludFdyaXRlciBwdyA9IG5ldyBQcmludFdyaXRlcihzdyk7Ci0KLSAgICBTdHJpbmcgbnNOYW1lID0gbmFtZXNwYWNlTmFtZTsKLSAgICBpZiAoKCFuc05hbWUuZXF1YWxzKCIiKSAmJiAoIW5zTmFtZS5lbmRzV2l0aCgiOiIpKSkpCi0gICAgICBuc05hbWUgKz0gIjoiOwotCi0gICAgLy8gQ29uZmlnIG9wdGlvbnMKLSAgICBwdy5wcmludCgiICAgICAgICA8IiArIG5zTmFtZSArIEVMRU1fTkFNRSArICIgIik7Ci0gICAgcHcucHJpbnQoV1NJQ29uc3RhbnRzLkFUVFJfVFlQRSArICI9XCIiICsgZ2V0VHlwZSgpICsgIlwiICIpOwotICAgIHB3LnByaW50KFdTSUNvbnN0YW50cy5BVFRSX05BTUVTUEFDRSArICI9XCIiICsgZ2V0TmFtZXNwYWNlKCkgKyAiXCIgIik7Ci0gICAgaWYgKHRoaXMucGFyZW50RWxlbWVudE5hbWUgIT0gbnVsbCkKLSAgICAgIHB3LnByaW50KAotICAgICAgICBXU0lDb25zdGFudHMuQVRUUl9QQVJFTlRfRUxFTUVOVF9OQU1FCi0gICAgICAgICAgKyAiPVwiIgotICAgICAgICAgICsgZ2V0UGFyZW50RWxlbWVudE5hbWUoKQotICAgICAgICAgICsgIlwiIik7Ci0gICAgcHcucHJpbnQoIj4iKTsKLSAgICBwdy5wcmludChnZXROYW1lKCkpOwotICAgIHB3LnByaW50bG4oIjwvIiArIG5zTmFtZSArIEVMRU1fTkFNRSArICI+Iik7Ci0KLSAgICByZXR1cm4gc3cudG9TdHJpbmcoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL2ltcGwvV1NETFJlZmVyZW5jZUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2FuYWx5emVyL2NvbmZpZy9pbXBsL1dTRExSZWZlcmVuY2VJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0YmZmNDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvYW5hbHl6ZXIvY29uZmlnL2ltcGwvV1NETFJlZmVyZW5jZUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLmltcGw7Ci0KLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuV1NETFJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotCi0vKioKLSAqIFRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgYSByZWZlcmVuY2UgdG8gYSBkZXNjcmlwdGlvbiBhcnRpZmFjdC4gIAotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgV1NETFJlZmVyZW5jZUltcGwgaW1wbGVtZW50cyBXU0RMUmVmZXJlbmNlCi17Ci0gIC8qKgotICAgKiBXU0RMIGVsZW1lbnQuCi0gICAqLwotICBwcm90ZWN0ZWQgV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQgPSBudWxsOwotCi0gIC8qKgotICAgKiBTZXJ2aWNlIGxvY2F0aW9uLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBzZXJ2aWNlTG9jYXRpb24gPSBudWxsOwotCi0gIC8qKgotICAgKiBXU0RMIGRvY3VtZW50IGxvY2F0aW9uLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyB3c2RsTG9jYXRpb24gPSBudWxsOwotCi0gIC8qKgotICAgKiBEZWZhdWx0IGNvbnN0cnVjdG9yLgotICAgKi8KLSAgcHVibGljIFdTRExSZWZlcmVuY2VJbXBsKCkKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIHdpdGggYWxsIHNldHRpbmdzLgotICAgKiBAcGFyYW0gd3NkbEVsZW1lbnQgICAgICBhIFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIHdzZGxMb2NhdGlvbiAgICAgYSBXU0RMIGRvY3VtZW50IGxvY2F0aW9uLgotICAgKiBAcGFyYW0gc2VydmljZUxvY2F0aW9uICBhIHNlcnZpY2UgbG9jYXRpb24uCi0gICAqLwotICBwdWJsaWMgV1NETFJlZmVyZW5jZUltcGwoCi0gICAgV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQsCi0gICAgU3RyaW5nIHdzZGxMb2NhdGlvbiwKLSAgICBTdHJpbmcgc2VydmljZUxvY2F0aW9uKQotICB7Ci0gICAgdGhpcy53c2RsRWxlbWVudCA9IHdzZGxFbGVtZW50OwotICAgIHRoaXMud3NkbExvY2F0aW9uID0gd3NkbExvY2F0aW9uOwotICAgIHRoaXMuc2VydmljZUxvY2F0aW9uID0gc2VydmljZUxvY2F0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5XU0RMUmVmZXJlbmNlI2dldFdTRExFbGVtZW50KCkKLSAgICovCi0gIHB1YmxpYyBXU0RMRWxlbWVudCBnZXRXU0RMRWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy53c2RsRWxlbWVudDsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuV1NETFJlZmVyZW5jZSNzZXRXU0RMRWxlbWVudChXU0RMRWxlbWVudCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdTRExFbGVtZW50KFdTRExFbGVtZW50IHdzZGxFbGVtZW50KQotICB7Ci0gICAgdGhpcy53c2RsRWxlbWVudCA9IHdzZGxFbGVtZW50OwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5XU0RMUmVmZXJlbmNlI2dldFdTRExMb2NhdGlvbigpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFdTRExMb2NhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gdGhpcy53c2RsTG9jYXRpb247Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLldTRExSZWZlcmVuY2Ujc2V0V1NETExvY2F0aW9uKCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdTRExMb2NhdGlvbihTdHJpbmcgd3NkbExvY2F0aW9uKQotICB7Ci0gICAgdGhpcy53c2RsTG9jYXRpb24gPSB3c2RsTG9jYXRpb247Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLldTRExSZWZlcmVuY2UjZ2V0U2VydmljZUxvY2F0aW9uKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmljZUxvY2F0aW9uKCkKLSAgewotICAgIHJldHVybiB0aGlzLnNlcnZpY2VMb2NhdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuV1NETFJlZmVyZW5jZSNzZXRTZXJ2aWNlTG9jYXRpb24oKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U2VydmljZUxvY2F0aW9uKFN0cmluZyBzZXJ2aWNlTG9jYXRpb24pCi0gIHsKLSAgICB0aGlzLnNlcnZpY2VMb2NhdGlvbiA9IHNlcnZpY2VMb2NhdGlvbjsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgcHcucHJpbnRsbigiICBXU0RMIFJlZmVyZW5jZToiKTsKLSAgICBwdy5wcmludCh0aGlzLndzZGxFbGVtZW50LnRvU3RyaW5nKCkpOwotICAgIHB3LnByaW50bG4oIiAgICB3c2RsVVJJIC4uLi4uLi4uLi4uLi4uLi4uLiAiICsgdGhpcy53c2RsTG9jYXRpb24pOwotICAgIGlmICh0aGlzLnNlcnZpY2VMb2NhdGlvbiAhPSBudWxsKQotICAgICAgcHcucHJpbnRsbigiICBzZXJ2aWNlTG9jYXRpb24gLi4uLi4uLi4uLiAiICsgdGhpcy5zZXJ2aWNlTG9jYXRpb24pOwotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50I3RvWE1MU3RyaW5nKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9YTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgU3RyaW5nIG5zTmFtZSA9IG5hbWVzcGFjZU5hbWU7Ci0gICAgaWYgKCghbnNOYW1lLmVxdWFscygiIikgJiYgKCFuc05hbWUuZW5kc1dpdGgoIjoiKSkpKQotICAgICAgbnNOYW1lICs9ICI6IjsKLQotICAgIC8vIEVsZW1lbnQKLSAgICBwdy5wcmludGxuKCIgICAgICA8IiArIG5zTmFtZSArIEVMRU1fTkFNRSArICI+Iik7Ci0gICAgcHcucHJpbnQoZ2V0V1NETEVsZW1lbnQoKS50b1hNTFN0cmluZyhuc05hbWUpKTsKLSAgICBwdy5wcmludCgiICAgICAgICA8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX1dTRExfVVJJICsgIj4iKTsKLSAgICBwdy5wcmludChnZXRXU0RMTG9jYXRpb24oKSk7Ci0gICAgcHcucHJpbnRsbigiPC8iICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fV1NETF9VUkkgKyAiPiIpOwotCi0gICAgaWYgKHRoaXMuc2VydmljZUxvY2F0aW9uICE9IG51bGwpCi0gICAgewotICAgICAgcHcucHJpbnQoIiAgICAgICAgPCIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9TRVJWSUNFX0xPQ0FUSU9OICsgIj4iKTsKLSAgICAgIHB3LnByaW50KFhNTFV0aWxzLnhtbEVzY2FwZWRTdHJpbmcoZ2V0U2VydmljZUxvY2F0aW9uKCkpKTsKLSAgICAgIHB3LnByaW50bG4oIjwvIiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX1NFUlZJQ0VfTE9DQVRJT04gKyAiPiIpOwotICAgIH0KLQotICAgIHB3LnByaW50bG4oIiAgICAgIDwvIiArIG5zTmFtZSArIEVMRU1fTkFNRSArICI+Iik7Ci0KLSAgICByZXR1cm4gc3cudG9TdHJpbmcoKTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9jb21tb24vQWRkU3R5bGVTaGVldC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvY29tbW9uL0FkZFN0eWxlU2hlZXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGZkZjdmOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9jb21tb24vQWRkU3R5bGVTaGVldC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5jb21tb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQ7Ci0KLS8qKgotICogVGhlIGludGVyZmFjZSBmb3IgQWRkU3R5bGVTaGVldCBlbGVtZW50LiAKLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBBZGRTdHlsZVNoZWV0IGV4dGVuZHMgRG9jdW1lbnRFbGVtZW50Ci17Ci0gIC8qKgotICAgKiBFbGVtZW50IG5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX05BTUUgPSBXU0lDb25zdGFudHMuRUxFTV9BRERfU1RZTEVfU0hFRVQ7Ci0KLSAgLyoqCi0gICAqIEdldCBocmVmLgotICAgKiBAcmV0dXJuIGhyZWYuCi0gICAqIEBzZWUgI3NldEhyZWYKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SHJlZigpOwotCi0gIC8qKgotICAgKiBTZXQgaHJlZi4KLSAgICogQHBhcmFtIGhyZWYgYSBocmVmLgotICAgKiBAc2VlICNnZXRIcmVmCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRIcmVmKFN0cmluZyBocmVmKTsKLQotICAvKioKLSAgICogR2V0IHR5cGUuCi0gICAqIEByZXR1cm4gdHlwZS4KLSAgICogQHNlZSAjc2V0VHlwZQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRUeXBlKCk7Ci0KLSAgLyoqCi0gICAqIFNldCB0eXBlLgotICAgKiBAcGFyYW0gdHlwZSBhIHR5cGUuCi0gICAqIEBzZWUgI2dldFR5cGUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFR5cGUoU3RyaW5nIHR5cGUpOwotCi0gIC8qKgotICAgKiBHZXQgdGl0bGUuCi0gICAqIEByZXR1cm4gdGl0bGUuCi0gICAqIEBzZWUgI3NldFRpdGxlCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFRpdGxlKCk7Ci0KLSAgLyoqCi0gICAqIFNldCB0aXRsZS4KLSAgICogQHBhcmFtIHRpdGxlIGEgdGl0bGUuCi0gICAqIEBzZWUgI2dldFRpdGxlCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUaXRsZShTdHJpbmcgdGl0bGUpOwotCi0gIC8qKgotICAgKiBHZXQgbWVkaWEuCi0gICAqIEByZXR1cm4gbWVkaWEuCi0gICAqIEBzZWUgI3NldE1lZGlhCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE1lZGlhKCk7Ci0KLSAgLyoqCi0gICAqIFNldCB0aXRsZS4KLSAgICogQHBhcmFtIG1lZGlhIG1lZGlhLgotICAgKiBAc2VlICNnZXRNZWRpYQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TWVkaWEoU3RyaW5nIG1lZGlhKTsKLQotICAvKioKLSAgICogR2V0IGNoYXJzZXQuCi0gICAqIEByZXR1cm4gY2hhcnNldC4KLSAgICogQHNlZSAjc2V0Q2hhcnNldAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRDaGFyc2V0KCk7Ci0KLSAgLyoqCi0gICAqIFNldCBjaGFyc2V0LgotICAgKiBAcGFyYW0gY2hhcnNldCBjaGFyc2V0LgotICAgKiBAc2VlICNnZXRDaGFyc2V0Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDaGFyc2V0KFN0cmluZyBjaGFyc2V0KTsKLQotICAvKioKLSAgICogR2V0IGFsdGVybmF0ZS4KLSAgICogQHJldHVybiBhbHRlcm5hdGUuCi0gICAqIEBzZWUgI3NldEFsdGVybmF0ZQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRBbHRlcm5hdGUoKTsKLQotICAvKioKLSAgICogU2V0IGFsdGVybmF0ZS4KLSAgICogQHBhcmFtIGFsdGVybmF0ZSBhbHRlcm5hdGUuCi0gICAqIEBzZWUgI2dldEFsdGVybmF0ZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0QWx0ZXJuYXRlKFN0cmluZyBhbHRlcm5hdGUpOwotCi0gIC8qKgotICAgKiBTZXQgaWYgdGhlIHN0eWxlIHNoZWV0IGRlY2xhcmF0aW9uIHNob3VsZCBiZSBhIGNvbW1lbnQuCi0gICAqIEBwYXJhbSBjb21tZW50IGEgYm9vbGVhbi4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldENvbW1lbnQoYm9vbGVhbiBjb21tZW50KTsKLQotICAvKioKLSAgICogR2V0IHN0eWxlIHNoZWV0IGRlY2xhcmF0aW9uLgotICAgKiBAcmV0dXJuIHN0eWxlIHNoZWV0IGRlY2xhcmF0aW9uLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTdHlsZVNoZWV0U3RyaW5nKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9jb21tb24vaW1wbC9BZGRTdHlsZVNoZWV0SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvY29tbW9uL2ltcGwvQWRkU3R5bGVTaGVldEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTk2NWQxNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9jb21tb24vaW1wbC9BZGRTdHlsZVNoZWV0SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5jb21tb24uaW1wbDsKLQotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci1pbXBvcnQgamF2YS51dGlsLlRyZWVNYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5jb21tb24uQWRkU3R5bGVTaGVldDsKLQotLyoqCi0gKiBUaGUgaW1wbGVtZW50YXRpb24gZm9yIEFkZFN0eWxlU2hlZXQgZWxlbWVudC4gCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBBZGRTdHlsZVNoZWV0SW1wbCBpbXBsZW1lbnRzIEFkZFN0eWxlU2hlZXQKLXsKLSAgLyoqCi0gICAqIEF0dHJpYnV0ZSB2YWx1ZXMuCi0gICAqLwotICBwcm90ZWN0ZWQgVHJlZU1hcCBhdHRyaWJ1dGVWYWx1ZUxpc3QgPSBuZXcgVHJlZU1hcCgpOwotCi0gIC8qKgotICAgKiBMaXN0IG9mIGF0dHJpYnV0ZXMuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nW10gYXR0cmlidXRlTmFtZUxpc3QgPQotICAgIHsKLSAgICAgIFdTSUNvbnN0YW50cy5BVFRSX0hSRUYsCi0gICAgICBXU0lDb25zdGFudHMuQVRUUl9UWVBFLAotICAgICAgV1NJQ29uc3RhbnRzLkFUVFJfVElUTEUsCi0gICAgICBXU0lDb25zdGFudHMuQVRUUl9NRURJQSwKLSAgICAgIFdTSUNvbnN0YW50cy5BVFRSX0NIQVJTRVQsCi0gICAgICBXU0lDb25zdGFudHMuQVRUUl9BTFRFUk5BVEUgfTsKLQotICAvKioKLSAgICogU2V0IGlmIHRoZSBzdHlsZSBzaGVldCBkZWNsYXJhdGlvbiBzaG91bGQgYmUgYSBjb21tZW50LgotICAgKi8KLSAgcHJvdGVjdGVkIGJvb2xlYW4gY29tbWVudCA9IGZhbHNlOwotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuY29tbW9uLkFkZFN0eWxlU2hlZXQjZ2V0SHJlZigpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEhyZWYoKQotICB7Ci0gICAgcmV0dXJuIChTdHJpbmcpIHRoaXMuYXR0cmlidXRlVmFsdWVMaXN0LmdldChXU0lDb25zdGFudHMuQVRUUl9IUkVGKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuY29tbW9uLkFkZFN0eWxlU2hlZXQjc2V0SHJlZihTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRIcmVmKFN0cmluZyBocmVmKQotICB7Ci0gICAgdGhpcy5hdHRyaWJ1dGVWYWx1ZUxpc3QucHV0KFdTSUNvbnN0YW50cy5BVFRSX0hSRUYsIGhyZWYpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5jb21tb24uQWRkU3R5bGVTaGVldCNnZXRUeXBlKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VHlwZSgpCi0gIHsKLSAgICByZXR1cm4gKFN0cmluZykgdGhpcy5hdHRyaWJ1dGVWYWx1ZUxpc3QuZ2V0KFdTSUNvbnN0YW50cy5BVFRSX1RZUEUpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5jb21tb24uQWRkU3R5bGVTaGVldCNzZXRUeXBlKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFR5cGUoU3RyaW5nIHR5cGUpCi0gIHsKLSAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlTGlzdC5wdXQoV1NJQ29uc3RhbnRzLkFUVFJfVFlQRSwgdHlwZSk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmNvbW1vbi5BZGRTdHlsZVNoZWV0I2dldFRpdGxlKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VGl0bGUoKQotICB7Ci0gICAgcmV0dXJuIChTdHJpbmcpIHRoaXMuYXR0cmlidXRlVmFsdWVMaXN0LmdldChXU0lDb25zdGFudHMuQVRUUl9USVRMRSk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmNvbW1vbi5BZGRTdHlsZVNoZWV0I3NldFRpdGxlKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFRpdGxlKFN0cmluZyB0aXRsZSkKLSAgewotICAgIHRoaXMuYXR0cmlidXRlVmFsdWVMaXN0LnB1dChXU0lDb25zdGFudHMuQVRUUl9USVRMRSwgdGl0bGUpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5jb21tb24uQWRkU3R5bGVTaGVldCNnZXRNZWRpYSgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE1lZGlhKCkKLSAgewotICAgIHJldHVybiAoU3RyaW5nKSB0aGlzLmF0dHJpYnV0ZVZhbHVlTGlzdC5nZXQoV1NJQ29uc3RhbnRzLkFUVFJfTUVESUEpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5jb21tb24uQWRkU3R5bGVTaGVldCNzZXRNZWRpYShTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRNZWRpYShTdHJpbmcgbWVkaWEpCi0gIHsKLSAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlTGlzdC5wdXQoV1NJQ29uc3RhbnRzLkFUVFJfTUVESUEsIG1lZGlhKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuY29tbW9uLkFkZFN0eWxlU2hlZXQjZ2V0Q2hhcnNldCgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldENoYXJzZXQoKQotICB7Ci0gICAgcmV0dXJuIChTdHJpbmcpIHRoaXMuYXR0cmlidXRlVmFsdWVMaXN0LmdldChXU0lDb25zdGFudHMuQVRUUl9DSEFSU0VUKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuY29tbW9uLkFkZFN0eWxlU2hlZXQjc2V0Q2hhcnNldChTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDaGFyc2V0KFN0cmluZyBjaGFyc2V0KQotICB7Ci0gICAgdGhpcy5hdHRyaWJ1dGVWYWx1ZUxpc3QucHV0KFdTSUNvbnN0YW50cy5BVFRSX0NIQVJTRVQsIGNoYXJzZXQpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5jb21tb24uQWRkU3R5bGVTaGVldCNnZXRBbHRlcm5hdGUoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRBbHRlcm5hdGUoKQotICB7Ci0gICAgcmV0dXJuIChTdHJpbmcpIHRoaXMuYXR0cmlidXRlVmFsdWVMaXN0LmdldChXU0lDb25zdGFudHMuQVRUUl9BTFRFUk5BVEUpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5jb21tb24uQWRkU3R5bGVTaGVldCNzZXRBbHRlcm5hdGUoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0QWx0ZXJuYXRlKFN0cmluZyBhbHRlcm5hdGUpCi0gIHsKLSAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlTGlzdC5wdXQoV1NJQ29uc3RhbnRzLkFUVFJfQUxURVJOQVRFLCBhbHRlcm5hdGUpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBTZXQgaWYgdGhlIHN0eWxlIHNoZWV0IGRlY2xhcmF0aW9uIHNob3VsZCBiZSBhIGNvbW1lbnQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDb21tZW50KGJvb2xlYW4gY29tbWVudCkKLSAgewotICAgIHRoaXMuY29tbWVudCA9IGNvbW1lbnQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmNvbW1vbi5BZGRTdHlsZVNoZWV0I2dldFN0eWxlU2hlZXRTdHJpbmcoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTdHlsZVNoZWV0U3RyaW5nKCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBzdHlsZVNoZWV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCi0gICAgaWYgKGNvbW1lbnQpCi0gICAgICBzdHlsZVNoZWV0LmFwcGVuZCgiPCEtLSAiKTsKLQotICAgIHN0eWxlU2hlZXQuYXBwZW5kKCI8P3htbC1zdHlsZXNoZWV0Iik7Ci0KLSAgICBTdHJpbmcgdmFsdWU7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRyaWJ1dGVOYW1lTGlzdC5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpZiAoKHZhbHVlID0gKFN0cmluZykgYXR0cmlidXRlVmFsdWVMaXN0LmdldChhdHRyaWJ1dGVOYW1lTGlzdFtpXSkpCi0gICAgICAgICE9IG51bGwpCi0gICAgICAgIHN0eWxlU2hlZXQuYXBwZW5kKCIgIiArIGF0dHJpYnV0ZU5hbWVMaXN0W2ldICsgIj1cIiIgKyB2YWx1ZSArICJcIiIpOwotICAgIH0KLQotICAgIC8vIEVuZCBlbGVtZW50Ci0gICAgc3R5bGVTaGVldC5hcHBlbmQoIiA/PiIpOwotCi0gICAgaWYgKGNvbW1lbnQpCi0gICAgICBzdHlsZVNoZWV0LmFwcGVuZCgiIC0tPiIpOwotCi0gICAgcmV0dXJuIHN0eWxlU2hlZXQudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICByZXR1cm4gZ2V0U3R5bGVTaGVldFN0cmluZygpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQjdG9YTUxTdHJpbmcoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1hNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSkKLSAgewotICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICBQcmludFdyaXRlciBwdyA9IG5ldyBQcmludFdyaXRlcihzdyk7Ci0KLSAgICBTdHJpbmcgbnNOYW1lID0gbmFtZXNwYWNlTmFtZTsKLSAgICBpZiAoKCFuc05hbWUuZXF1YWxzKCIiKSAmJiAoIW5zTmFtZS5lbmRzV2l0aCgiOiIpKSkpCi0gICAgICBuc05hbWUgKz0gIjoiOwotCi0gICAgLy8gQ29uZmlnIG9wdGlvbnMKLSAgICBwdy5wcmludCgiICAgICAgPCIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiICIpOwotICAgIHB3LnByaW50KFdTSUNvbnN0YW50cy5BVFRSX0hSRUYgKyAiPVwiIiArIGdldEhyZWYoKSArICJcIiAiKTsKLSAgICBwdy5wcmludChXU0lDb25zdGFudHMuQVRUUl9UWVBFICsgIj1cIiIgKyBnZXRUeXBlKCkgKyAiXCIgIik7Ci0gICAgaWYgKGdldFRpdGxlKCkgIT0gbnVsbCkKLSAgICAgIHB3LnByaW50KFdTSUNvbnN0YW50cy5BVFRSX1RJVExFICsgIj1cIiIgKyBnZXRUaXRsZSgpICsgIlwiICIpOwotICAgIGlmIChnZXRNZWRpYSgpICE9IG51bGwpCi0gICAgICBwdy5wcmludChXU0lDb25zdGFudHMuQVRUUl9NRURJQSArICI9XCIiICsgZ2V0TWVkaWEoKSArICJcIiAiKTsKLSAgICBpZiAoZ2V0Q2hhcnNldCgpICE9IG51bGwpCi0gICAgICBwdy5wcmludChXU0lDb25zdGFudHMuQVRUUl9DSEFSU0VUICsgIj1cIiIgKyBnZXRDaGFyc2V0KCkgKyAiXCIgIik7Ci0gICAgaWYgKGdldEFsdGVybmF0ZSgpICE9IG51bGwpCi0gICAgICBwdy5wcmludChXU0lDb25zdGFudHMuQVRUUl9BTFRFUk5BVEUgKyAiPVwiIiArIGdldEFsdGVybmF0ZSgpICsgIlwiICIpOwotICAgIHB3LnByaW50bG4oIi8+Iik7Ci0KLSAgICByZXR1cm4gc3cudG9TdHJpbmcoKTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9kb2N1bWVudC9Eb2N1bWVudEVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2RvY3VtZW50L0RvY3VtZW50RWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTZkMjc4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2RvY3VtZW50L0RvY3VtZW50RWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50OwotCi0vKioKLSAqIERlZmluZXMgdGhlIGludGVyZmFjZSB1c2VkIGZvciBhbGwgQ29uZm9ybWFuY2UgWE1MIGRvY3VtZW50cy4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIERvY3VtZW50RWxlbWVudAotewotICAvKioKLSAgICogUmV0dXJuIFhNTCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuCi0gICAqIEBwYXJhbSBuYW1lc3BhY2VOYW1lICBhIG5hbWVzcGFjZSBwcmVmaXguCi0gICAqIEByZXR1cm4gWE1MIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9YTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpOwotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9kb2N1bWVudC9Eb2N1bWVudEZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2RvY3VtZW50L0RvY3VtZW50RmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjhkZTM3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2RvY3VtZW50L0RvY3VtZW50RmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5BbmFseXplckNvbmZpZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLkFuYWx5emVyQ29uZmlnUmVhZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTG9nUmVhZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTG9nV3JpdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yLmNvbmZpZy5Nb25pdG9yQ29uZmlnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yLmNvbmZpZy5Nb25pdG9yQ29uZmlnUmVhZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlByb2ZpbGVBc3NlcnRpb25zOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlByb2ZpbGVBc3NlcnRpb25zUmVhZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0V3JpdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuV1NJUHJvcGVydGllczsKLQotLyoqCi0gKiBUaGlzIGFic3RyYWN0IGNsYXNzIGRlZmluZXMgdGhlIGZhY3RvcnkgaW50ZXJmYWNlIHRoYXQgY2FuIGJlIHVzZWQgdG8gCi0gKiByZWFkIGFuZCB3cml0ZSBhbGwgb2YgdGhlIENvbmZvcm1hbmNlIFhNTCBkb2N1bWVudHMuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIERvY3VtZW50RmFjdG9yeQotewotICAvKioKLSAgICogR2V0IGEgbmV3IGluc3RhbmNlIG9mIGEgRG9jdW1lbnRGYWN0b3J5LgotICAgKiBAcmV0dXJuIGEgbmV3IGluc3RhbmNlIG9mIGEgRG9jdW1lbnRGYWN0b3J5LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtcyBvY2N1ciBkdXJpbmcgY3JlYXRpb24uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIERvY3VtZW50RmFjdG9yeSBuZXdJbnN0YW5jZSgpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIFJldHVybiBpbnN0YW5jZSBvZiBmYWN0b3J5Ci0gICAgcmV0dXJuIG5ld0luc3RhbmNlKGdldEZhY3RvcnlDbGFzc05hbWUoKSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGEgbmV3IGluc3RhbmNlIG9mIGEgRG9jdW1lbnRGYWN0b3J5IHVzaW5nIHRoZSBzcGVjaWZpZWQKLSAgICogZmFjdG9yeSBjbGFzcyBuYW1lLgotICAgKiBAcGFyYW0gZmFjdG9yeUNsYXNzTmFtZSBmYWN0b3J5IGNsYXNzIG5hbWUuCi0gICAqIEByZXR1cm4gYSBuZXcgaW5zdGFuY2Ugb2YgYSBEb2N1bWVudEZhY3RvcnkuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW1zIG9jY3VyIGR1cmluZyBjcmVhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgRG9jdW1lbnRGYWN0b3J5IG5ld0luc3RhbmNlKFN0cmluZyBmYWN0b3J5Q2xhc3NOYW1lKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIERvY3VtZW50RmFjdG9yeSBkb2N1bWVudEZhY3RvcnkgPSBudWxsOwotCi0gICAgLy8gSWYgYSBmYWN0b3J5IGNsYXNzIG5hbWUgd2FzIHNwZWNpZmllZCwgdGhlbiBjcmVhdGUgb2JqZWN0Ci0gICAgaWYgKGZhY3RvcnlDbGFzc05hbWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgLy8gR2V0IGNsYXNzIG9iamVjdAotICAgICAgICBDbGFzcyBmYWN0b3J5Q2xhc3MgPSBDbGFzcy5mb3JOYW1lKGZhY3RvcnlDbGFzc05hbWUpOwotCi0gICAgICAgIC8vIENyZWF0ZSBuZXcgZmFjdG9yeQotICAgICAgICBkb2N1bWVudEZhY3RvcnkgPSAoRG9jdW1lbnRGYWN0b3J5KSBmYWN0b3J5Q2xhc3MubmV3SW5zdGFuY2UoKTsKLSAgICAgIH0KLQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKAotICAgICAgICAgICJDb3VsZCBub3QgaW5zdGFudGlhdGUgZG9jdW1lbnQgZmFjdG9yeSBjbGFzczogIgotICAgICAgICAgICAgKyBmYWN0b3J5Q2xhc3NOYW1lCi0gICAgICAgICAgICArICIuIiwKLSAgICAgICAgICBlKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHRocm93IG5ldyBXU0lFeGNlcHRpb24oIkEgV1NJRG9jdW1lbnRGYWN0b3J5IGltcGxlbWVudGF0aW9uIGNsYXNzIHdhcyBub3QgZm91bmQuIik7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGZhY3RvcnkKLSAgICByZXR1cm4gZG9jdW1lbnRGYWN0b3J5OwotICB9Ci0KLSAgLy8gRE9DVU1FTlQgVFlQRVMKLQotICAvKioKLSAgICogQ3JlYXRlIGxvZyBmaWxlLgotICAgKiBAcmV0dXJuIGxvZyBmaWxlLgotICAgKi8KLSAgcHVibGljIGFic3RyYWN0IExvZyBuZXdMb2coKTsKLQotICAvKioKLSAgICogQ3JlYXRlIG1vbml0b3IgY29uZmlnLgotICAgKiBAcmV0dXJuIG5ld2x5IGNyZWF0ZWQgbW9uaXRvciBjb25maWcuCi0gICAqLwotICBwdWJsaWMgYWJzdHJhY3QgTW9uaXRvckNvbmZpZyBuZXdNb25pdG9yQ29uZmlnKCk7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhbmFseXplciBjb25maWcuCi0gICAqIEByZXR1cm4gbmV3bHkgY3JlYXRlZCBhbmFseXplciBjb25maWcuCi0gICAqLwotICBwdWJsaWMgYWJzdHJhY3QgQW5hbHl6ZXJDb25maWcgbmV3QW5hbHl6ZXJDb25maWcoKTsKLQotICAvKioKLSAgICogQ3JlYXRlIHByb2ZpbGUgYXNzZXJ0aW9ucy4KLSAgICogQHJldHVybiBuZXdseSBjcmVhdGVkIHByb2ZpbGUgYXNzZXJ0aW9ucy4KLSAgICovCi0gIHB1YmxpYyBhYnN0cmFjdCBQcm9maWxlQXNzZXJ0aW9ucyBuZXdQcm9maWxlQXNzZXJ0aW9ucygpOwotCi0gIC8qKgotICAgKiBDcmVhdGUgcmVwb3J0LgotICAgKiBAcmV0dXJuIG5ld2x5IGNyZWF0ZWQgcmVwb3J0LgotICAgKi8KLSAgcHVibGljIGFic3RyYWN0IFJlcG9ydCBuZXdSZXBvcnQoKTsKLQotICAvLyBSRUFERVJTCi0KLSAgLyoqCi0gICAqIENyZWF0ZSBwcm9maWxlIGFzc2VydGlvbnMgcmVhZGVyLgotICAgKiBAcmV0dXJuIG5ld2x5IGNyZWF0ZWQgcHJvZmlsZSBhc3NlcnRpb25zIHJlYWRlci4KLSAgICovCi0gIHB1YmxpYyBhYnN0cmFjdCBQcm9maWxlQXNzZXJ0aW9uc1JlYWRlciBuZXdQcm9maWxlQXNzZXJ0aW9uc1JlYWRlcigpOwotCi0gIC8qKgotICAgKiBDcmVhdGUgbW9uaXRvciBjb25maWcgcmVhZGVyLgotICAgKiBAcmV0dXJuIG5ld2x5IGNyZWF0ZWQgbW9uaXRvciBjb25maWcgcmVhZGVyLgotICAgKi8KLSAgcHVibGljIGFic3RyYWN0IE1vbml0b3JDb25maWdSZWFkZXIgbmV3TW9uaXRvckNvbmZpZ1JlYWRlcigpOwotCi0gIC8qKgotICAgKiBDcmVhdGUgYW5hbHl6ZXIgY29uZmlnIHJlYWRlci4KLSAgICogQHJldHVybiBuZXdseSBjcmVhdGVkIGFuYWx5emVyIGNvbmZpZyByZWFkZXIuCi0gICAqLwotICBwdWJsaWMgYWJzdHJhY3QgQW5hbHl6ZXJDb25maWdSZWFkZXIgbmV3QW5hbHl6ZXJDb25maWdSZWFkZXIoKTsKLQotICAvKioKLSAgICogQ3JlYXRlIGxvZyByZWFkZXIuCi0gICAqIEByZXR1cm4gbmV3bHkgY3JlYXRlZCBsb2cgcmVhZGVyLgotICAgKi8KLSAgcHVibGljIGFic3RyYWN0IExvZ1JlYWRlciBuZXdMb2dSZWFkZXIoKTsKLQotICAvLyBBREQ6IEFkZCBvdGhlciByZWFkZXJzCi0KLSAgLy8gV1JJVEVSUwotCi0gIC8qKgotICAgKiBDcmVhdGUgcmVwb3J0IHdyaXRlci4KLSAgICogQHJldHVybiBuZXdseSBjcmVhdGVkIHJlcG9ydCB3cml0ZXIuCi0gICAqLwotICBwdWJsaWMgYWJzdHJhY3QgUmVwb3J0V3JpdGVyIG5ld1JlcG9ydFdyaXRlcigpOwotCi0gIC8qKgotICAgKiBDcmVhdGUgbG9nIHdyaXRlci4KLSAgICogQHJldHVybiBuZXdseSBjcmVhdGVkIGxvZyB3cml0ZXIuCi0gICAqLwotICBwdWJsaWMgYWJzdHJhY3QgTG9nV3JpdGVyIG5ld0xvZ1dyaXRlcigpOwotCi0gIC8qKgotICAgKiBDcmVhdGUgYSByZXBvcnRlci4KLSAgICogQHJldHVybiBuZXdseSBjcmVhdGVkIHJlcG9ydGVyLgotICAgKi8KLSAgcHVibGljIGFic3RyYWN0IFJlcG9ydGVyIG5ld1JlcG9ydGVyKFJlcG9ydCByZXBvcnQsIFJlcG9ydFdyaXRlciByZXBvcnRXcml0ZXIpOwotCi0gIC8vIEFERDogQWRkIG90aGVyIHdyaXRlcnMKLQotICAvKioKLSAgICogRmluZCB0aGUgZmFjdG9yeSBjbGFzcyBuYW1lIHdoaWNoIGNhbiBiZSBzcGVjaWZpZWQgYXMgYSBKYXZhIHByb3BlcnR5LgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldEZhY3RvcnlDbGFzc05hbWUoKQotICB7Ci0gICAgLy8gR2V0IHByb3BlcnR5IHZhbHVlCi0gICAgcmV0dXJuIFdTSVByb3BlcnRpZXMuZ2V0UHJvcGVydHkoCi0gICAgICBXU0lQcm9wZXJ0aWVzLlBST1BfRE9DVU1FTlRfRkFDVE9SWSwKLSAgICAgIFdTSVByb3BlcnRpZXMuREVGX0RPQ1VNRU5UX0ZBQ1RPUlkpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9kb2N1bWVudC9Eb2N1bWVudFJlYWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvZG9jdW1lbnQvRG9jdW1lbnRSZWFkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzg3Y2U1My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9kb2N1bWVudC9Eb2N1bWVudFJlYWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50OwotCi0vKioKLSAqIERlZmluZXMgdGhlIGludGVyZmFjZSB1c2VkIHRvIHJlYWQgdGhlIENvbmZvcm1hbmNlIFhNTCBkb2N1bWVudHMuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBEb2N1bWVudFJlYWRlcgotewotICAvKioKLSAgICogR2V0IGRvY3VtZW50IGxvY2F0aW9uLgotICAgKiBAcmV0dXJuIGRvY3VtZW50IGxvY2F0aW9uLgotICAgKiBAc2VlICNzZXRMb2NhdGlvbgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRMb2NhdGlvbigpOwotCi0gIC8qKgotICAgKiBTZXQgZG9jdW1lbnQgbG9jYXRpb24uCi0gICAqIEBwYXJhbSBkb2N1bWVudFVSSSBkb2N1bWVudCBsb2NhdGlvbi4KLSAgICogQHNlZSAjZ2V0TG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExvY2F0aW9uKFN0cmluZyBkb2N1bWVudFVSSSk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9kb2N1bWVudC9Eb2N1bWVudFdyaXRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvZG9jdW1lbnQvRG9jdW1lbnRXcml0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWM4ODkyNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9kb2N1bWVudC9Eb2N1bWVudFdyaXRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50OwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLldyaXRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci0KLS8qKgotICogRGVmaW5lcyB0aGUgaW50ZXJmYWNlIHVzZWQgdG8gd3JpdGUgdGhlIENvbmZvcm1hbmNlIFhNTCBkb2N1bWVudHMuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBEb2N1bWVudFdyaXRlcgotewotICAvKioKLSAgICogR2V0IHRoZSBEb2N1bWVudCBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgQ29uZm9ybWFuY2UgZG9jdW1lbnQuCi0gICAqIEByZXR1cm4gdGhlIERvY3VtZW50IG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhpcyBDb25mb3JtYW5jZSBkb2N1bWVudC4KLSAgICogQHRocm93cyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBpZiBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZC4KLSAgICovCi0gIHB1YmxpYyBEb2N1bWVudCBnZXREb2N1bWVudCgpIHRocm93cyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbjsKLQotICAvKioKLSAgICogU2V0IHdyaXRlci4KLSAgICogQHBhcmFtIGRvY3VtZW50TG9jYXRpb24gdGhlIGxvY2F0aW9uIG9mIHRoZSBkb2N1bWVudC4KLSAgICogQHRocm93cyBJT0V4Y2VwdGlvbiBpZiBmYWlsZWQgb3IgaW50ZXJydXB0ZWQgSS9PIG9wZXJhdGlvbnMuIAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0V3JpdGVyKFN0cmluZyBkb2N1bWVudExvY2F0aW9uKSB0aHJvd3MgSU9FeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIFdyaXRlIG91dCBvbmx5IGEgcGFydCBvZiBhIGRvY3VtZW50IHRvIHRoZSBsb2NhdGlvbgotICAgKiB0aGF0IHdhcyBwcmV2aW91c2x5IHNldCB1c2luZyB0aGUgc2V0TG9jYXRpb24gbWV0aG9kLgotICAgKiBAcGFyYW0gcmVhZGVyIGEgUmVhZGVyIG9iamVjdC4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdGhlcmUgaXMgdHJvdWJsZSB3cml0aW5nIG91dCB0aGUgZG9jdW1lbnQuCi0gICAqIEB0aHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlmIHRoaXMgb3BlcmF0aW9uIGhhcyBiZWVuIGludm9rZWQgCi0gICAqICAgICAgICAgYXQgYW4gaWxsZWdhbCBvciBpbmFwcHJvcHJpYXRlIHRpbWUuCi0gICAqLwotICBwdWJsaWMgdm9pZCB3cml0ZShSZWFkZXIgcmVhZGVyKSB0aHJvd3MgV1NJRXhjZXB0aW9uLCBJbGxlZ2FsU3RhdGVFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIFdyaXRlIG91dCBvbmx5IGEgcGFydCBvZiBhIGRvY3VtZW50LgotICAgKiBAcGFyYW0gcmVhZGVyIGEgUmVhZGVyIG9iamVjdC4KLSAgICogQHBhcmFtIHdyaXRlciBhIFdyaXRlciBvYmplY3QuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHRoZXJlIGlzIHRyb3VibGUgd3JpdGluZyBvdXQgdGhlIGRvY3VtZW50LgotICAgKi8KLSAgcHVibGljIHZvaWQgd3JpdGUoUmVhZGVyIHJlYWRlciwgV3JpdGVyIHdyaXRlcikgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLQotICAvKioKLSAgICogQ2xvc2Ugd3JpdGVyLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyB0cm91YmxlIGNsb3NpbmcgdGhlIHdyaXRlci4KLSAgICogQHRocm93cyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gaWYgdGhpcyBvcGVyYXRpb24gaGFzIGJlZW4gaW52b2tlZCAKLSAgICogICAgICAgICBhdCBhbiBpbGxlZ2FsIG9yIGluYXBwcm9wcmlhdGUgdGltZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGNsb3NlKCkgdGhyb3dzIFdTSUV4Y2VwdGlvbiwgSWxsZWdhbFN0YXRlRXhjZXB0aW9uOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvZG9jdW1lbnQvV1NJRG9jdW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2RvY3VtZW50L1dTSURvY3VtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4ZGIwZDcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvZG9jdW1lbnQvV1NJRG9jdW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudDsKLQotLyoqCi0gKiBEZWZpbmVzIHRoZSBpbnRlcmZhY2UgdXNlZCBmb3IgYWxsIENvbmZvcm1hbmNlIFhNTCBkb2N1bWVudHMuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBXU0lEb2N1bWVudCBleHRlbmRzIERvY3VtZW50RWxlbWVudAotewotICAvKioKLSAgICogR2V0IHRoZSBsb2NhdGlvbiBvZiB0aGUgZG9jdW1lbnQuCi0gICAqIEByZXR1cm4gdGhlIGxvY2F0aW9uIG9mIHRoZSBkb2N1bWVudC4KLSAgICogQHNlZSAjc2V0TG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9jYXRpb24oKTsKLQotICAvKioKLSAgICogU2V0IHRoZSBsb2NhdGlvbiBvZiB0aGUgZG9jdW1lbnQuCi0gICAqIEBwYXJhbSBkb2N1bWVudFVSSSB0aGUgbG9jYXRpb24gb2YgdGhlIGRvY3VtZW50LgotICAgKiBAc2VlICNnZXRMb2NhdGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TG9jYXRpb24oU3RyaW5nIGRvY3VtZW50VVJJKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2RvY3VtZW50L2ltcGwvRG9jdW1lbnRGYWN0b3J5SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvZG9jdW1lbnQvaW1wbC9Eb2N1bWVudEZhY3RvcnlJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5M2ZmZDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvZG9jdW1lbnQvaW1wbC9Eb2N1bWVudEZhY3RvcnlJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLkFuYWx5emVyQ29uZmlnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuQW5hbHl6ZXJDb25maWdSZWFkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5pbXBsLkFuYWx5emVyQ29uZmlnSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLmltcGwuQW5hbHl6ZXJDb25maWdSZWFkZXJJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5Mb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5Mb2dSZWFkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5Mb2dXcml0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5pbXBsLkxvZ0ltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5pbXBsLkxvZ1JlYWRlckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5pbXBsLkxvZ1dyaXRlckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3IuY29uZmlnLk1vbml0b3JDb25maWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3IuY29uZmlnLk1vbml0b3JDb25maWdSZWFkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3IuY29uZmlnLmltcGwuTW9uaXRvckNvbmZpZ0ltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3IuY29uZmlnLmltcGwuTW9uaXRvckNvbmZpZ1JlYWRlckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuUHJvZmlsZUFzc2VydGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuUHJvZmlsZUFzc2VydGlvbnNSZWFkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuaW1wbC5Qcm9maWxlQXNzZXJ0aW9uc0ltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuaW1wbC5Qcm9maWxlQXNzZXJ0aW9uc1JlYWRlckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnRXcml0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LmltcGwuRGVmYXVsdFJlcG9ydGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuaW1wbC5SZXBvcnRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuaW1wbC5SZXBvcnRXcml0ZXJJbXBsOwotCi0vKioKLSAqIFRoaXMgaXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBDb25mb3JtYW5jZSBkb2N1bWVudCBmYWN0b3J5IHdoaWNoIHByb3ZpZGVzIGFjY2VzcyB0bwotICogaW1wbGVtZW50YXRpb25zIG9mIHRoZSBkb2N1bWVudHMsIHJlYWRlcnMgYW5kIHdyaXRlcnMuIAotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBEb2N1bWVudEZhY3RvcnlJbXBsIGV4dGVuZHMgRG9jdW1lbnRGYWN0b3J5Ci17Ci0gIC8qKgotICAgKiBEb2N1bWVudCBmYWN0b3J5IGltcGxlbWVudGF0aW9uLgotICAgKi8KLSAgcHVibGljIERvY3VtZW50RmFjdG9yeUltcGwoKQotICB7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIGxvZyBmaWxlLgotICAgKi8KLSAgcHVibGljIExvZyBuZXdMb2coKQotICB7Ci0gICAgcmV0dXJuIG5ldyBMb2dJbXBsKCk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIG1vbml0b3IgY29uZmlnLgotICAgKi8KLSAgcHVibGljIE1vbml0b3JDb25maWcgbmV3TW9uaXRvckNvbmZpZygpCi0gIHsKLSAgICByZXR1cm4gbmV3IE1vbml0b3JDb25maWdJbXBsKCk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIGFuYWx5emVyIGNvbmZpZy4KLSAgICovCi0gIHB1YmxpYyBBbmFseXplckNvbmZpZyBuZXdBbmFseXplckNvbmZpZygpCi0gIHsKLSAgICByZXR1cm4gbmV3IEFuYWx5emVyQ29uZmlnSW1wbCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBwcm9maWxlIGFzc2VydGlvbnMuCi0gICAqLwotICBwdWJsaWMgUHJvZmlsZUFzc2VydGlvbnMgbmV3UHJvZmlsZUFzc2VydGlvbnMoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBQcm9maWxlQXNzZXJ0aW9uc0ltcGwoKTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgcmVwb3J0LgotICAgKi8KLSAgcHVibGljIFJlcG9ydCBuZXdSZXBvcnQoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBSZXBvcnRJbXBsKCk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIG1vbml0b3IgY29uZmlnIHJlYWRlci4KLSAgICovCi0gIHB1YmxpYyBNb25pdG9yQ29uZmlnUmVhZGVyIG5ld01vbml0b3JDb25maWdSZWFkZXIoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBNb25pdG9yQ29uZmlnUmVhZGVySW1wbCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhbmFseXplciBjb25maWcgcmVhZGVyLgotICAgKi8KLSAgcHVibGljIEFuYWx5emVyQ29uZmlnUmVhZGVyIG5ld0FuYWx5emVyQ29uZmlnUmVhZGVyKCkKLSAgewotICAgIHJldHVybiBuZXcgQW5hbHl6ZXJDb25maWdSZWFkZXJJbXBsKCk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIHByb2ZpbGUgYXNzZXJ0aW9ucyByZWFkZXIuCi0gICAqLwotICBwdWJsaWMgUHJvZmlsZUFzc2VydGlvbnNSZWFkZXIgbmV3UHJvZmlsZUFzc2VydGlvbnNSZWFkZXIoKQotICB7Ci0gICAgLy8gUmV0dXJuIGltcGxlbWVudGF0aW9uCi0gICAgcmV0dXJuIG5ldyBQcm9maWxlQXNzZXJ0aW9uc1JlYWRlckltcGwoKTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgbG9nIHJlYWRlci4KLSAgICovCi0gIHB1YmxpYyBMb2dSZWFkZXIgbmV3TG9nUmVhZGVyKCkKLSAgewotICAgIC8vIFJldHVybiBpbXBsZW1lbnRhdGlvbgotICAgIHJldHVybiBuZXcgTG9nUmVhZGVySW1wbCgpOwotICB9Ci0KLSAgLy8gV1JJVEVSUwotCi0gIC8qKgotICAgKiBDcmVhdGUgbG9nIHdyaXRlci4KLSAgICovCi0gIHB1YmxpYyBMb2dXcml0ZXIgbmV3TG9nV3JpdGVyKCkKLSAgewotICAgIHJldHVybiBuZXcgTG9nV3JpdGVySW1wbCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBhIERvY3VtZW50UmVhZGVyLgotICAgKi8KLSAgcHVibGljIFJlcG9ydFdyaXRlciBuZXdSZXBvcnRXcml0ZXIoKQotICB7Ci0gICAgLy8gUmV0dXJuIGltcGxlbWVudGF0aW9uCi0gICAgcmV0dXJuIG5ldyBSZXBvcnRXcml0ZXJJbXBsKCk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIGEgRGVmYXVsdFJlcG9ydGVyCi0gICAqLwotICBwdWJsaWMgUmVwb3J0ZXIgbmV3UmVwb3J0ZXIoUmVwb3J0IHJlcG9ydCwgUmVwb3J0V3JpdGVyIHJlcG9ydFdyaXRlcikKLSAgewotICAgIHJldHVybiBuZXcgRGVmYXVsdFJlcG9ydGVyKHJlcG9ydCwgcmVwb3J0V3JpdGVyKTsKLSAgfQotCi0gIC8qKgotICAgKiBGaW5kIHRoZSBmYWN0b3J5IGNsYXNzIG5hbWUgd2hpY2ggY2FuIGJlIHNwZWNpZmllZCBhcyBhIEphdmEgcHJvcGVydHkuCi0gICAqLwotICAvL3ByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRGYWN0b3J5Q2xhc3NOYW1lKCkKLSAgLy97Ci0gIC8vICAvLyBHZXQgcHJvcGVydHkgdmFsdWUKLSAgLy8gIHJldHVybiBXU0lQcm9wZXJ0aWVzLmdldFByb3BlcnR5KAotICAvLyAgICBXU0lQcm9wZXJ0aWVzLlBST1BfRE9DVU1FTlRfRkFDVE9SWSwKLSAgLy8gICAgV1NJUHJvcGVydGllcy5ERUZfRE9DVU1FTlRfRkFDVE9SWSk7Ci0gIC8vfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvZG9jdW1lbnQvaW1wbC9Eb2N1bWVudFdyaXRlckltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2RvY3VtZW50L2ltcGwvRG9jdW1lbnRXcml0ZXJJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2MWU2ZDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvZG9jdW1lbnQvaW1wbC9Eb2N1bWVudFdyaXRlckltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDMgSUJNIENvcnBvcmF0aW9uLCBCZWFjb24gSW5mb3JtYXRpb24gVGVjaG5vbG9neSBJbmMuIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gICAgICAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICBCZWFjb25JVCAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5pbXBsOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbVdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLldyaXRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50V3JpdGVyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotCi0vKioKLSAqIERlZmluZXMgdGhlIGltcGxlbWVudGF0aW9uIHVzZWQgdG8gd3JpdGUgdGhlIENvbmZvcm1hbmNlIFhNTCAKLSAqIGRvY3VtZW50cy4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgRG9jdW1lbnRXcml0ZXJJbXBsIGltcGxlbWVudHMgRG9jdW1lbnRXcml0ZXIKLXsKLSAgLyoqCi0gICAqIERvY3VtZW50IHdyaXRlci4KLSAgICovCi0gIHByb3RlY3RlZCBXcml0ZXIgd3JpdGVyID0gbnVsbDsKLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LkRvY3VtZW50V3JpdGVyI2dldERvY3VtZW50KCkKLSAgICovCi0gIHB1YmxpYyBEb2N1bWVudCBnZXREb2N1bWVudCgpIHRocm93cyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbgotICB7Ci0gICAgLy8gQUREOgotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5kb2N1bWVudC5Eb2N1bWVudFdyaXRlciNzZXRXcml0ZXIoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0V3JpdGVyKFN0cmluZyBkb2N1bWVudExvY2F0aW9uKQotICAgIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBGaWxlTm90Rm91bmRFeGNlcHRpb24KLSAgewotICAgIC8vIEkxOE46IDIwMDMuMDIuMjYgbW9kaWZpZWQgYnkgSy5OYWthZ29tZUBCZWFjb25JVCAKLSAgICB0aGlzLndyaXRlciA9Ci0gICAgICBuZXcgUHJpbnRXcml0ZXIoCi0gICAgICAgIG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIoCi0gICAgICAgICAgbmV3IEZpbGVPdXRwdXRTdHJlYW0oZG9jdW1lbnRMb2NhdGlvbiksCi0gICAgICAgICAgIlVURi04IikpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5kb2N1bWVudC5Eb2N1bWVudFdyaXRlciN3cml0ZShSZWFkZXIpCi0gICAqLwotICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgd3JpdGUoUmVhZGVyIHJlYWRlcikKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uLCBJbGxlZ2FsU3RhdGVFeGNlcHRpb24KLSAgewotICAgIC8vIElmIHRoZSB3cml0ZXIgd2FzIG5vdCBzcGVjaWZpZWQsIHRoZW4gdGhyb3cgYW4gZXhjZXB0aW9uCi0gICAgaWYgKHdyaXRlciA9PSBudWxsKQotICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiQ291bGQgbm90IHdyaXRlIGRvY3VtZW50IHNpbmNlIHdyaXRlciB3YXMgbm90IHNldC4iKTsKLQotICAgIHdyaXRlKHJlYWRlciwgd3JpdGVyKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRXcml0ZXIjd3JpdGUoUmVhZGVyLCBXcml0ZXIpCi0gICAqLwotICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgd3JpdGUoUmVhZGVyIHJlYWRlciwgV3JpdGVyIHdyaXRlcikKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBDcmVhdGUgYnVmZmVyZWQgcmVhZGVyCi0gICAgQnVmZmVyZWRSZWFkZXIgYnVmUmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKHJlYWRlcik7Ci0KLSAgICAvLyBDcmVhdGUgcHJpbnQgd3JpdGVyCi0gICAgUHJpbnRXcml0ZXIgcHJpbnRXcml0ZXIgPSBuZXcgUHJpbnRXcml0ZXIod3JpdGVyKTsKLQotICAgIFN0cmluZyBuZXh0TGluZSA9IG51bGw7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBSZWFkIGVhY2ggbGluZSBmcm9tIHRoZSByZWFkZXIKLSAgICAgIHdoaWxlICgobmV4dExpbmUgPSBidWZSZWFkZXIucmVhZExpbmUoKSkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLy8gV3JpdGUgdGV4dCBhbmQgZmx1c2ggc3RyZWFtCi0gICAgICAgIHByaW50V3JpdGVyLnByaW50bG4obmV4dExpbmUpOwotICAgICAgfQotICAgIH0KLQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKCJDb3VsZCBub3Qgd3JpdGUgZG9jdW1lbnQuIiwgZSk7Ci0gICAgfQotCi0gICAgLy8gRmx1c2ggYW5kIGNsb3NlIHRoZSB3cml0ZXIKLSAgICBwcmludFdyaXRlci5mbHVzaCgpOwotICAgIC8vcHJpbnRXcml0ZXIuY2xvc2UoKTsgICAgCi0gIH0KLQotICAvKioKLSAgICogQ2xvc2Ugd3JpdGVyLgotICAgKi8KLSAgcHVibGljIHZvaWQgY2xvc2UoKSB0aHJvd3MgV1NJRXhjZXB0aW9uLCBJbGxlZ2FsU3RhdGVFeGNlcHRpb24KLSAgewotICAgIC8vIElmIHRoZSB3cml0ZXIgd2FzIG5vdCBzcGVjaWZpZWQsIHRoZW4gdGhyb3cgYW4gZXhjZXB0aW9uCi0gICAgaWYgKHdyaXRlciA9PSBudWxsKQotICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiQ291bGQgbm90IHdyaXRlIGxvZyBmaWxlIHNpbmNlIHdyaXRlciB3YXMgbm90IHNldC4iKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIENsb3NlIHRoZSB3cml0ZXIKLSAgICAgIHdyaXRlci5jbG9zZSgpOwotICAgIH0KLQotICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbihpb2UudG9TdHJpbmcoKSwgaW9lKTsKLSAgICB9Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbG9nL0xvZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbG9nL0xvZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzU4NmI3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9Mb2cuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2c7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuV1NJRG9jdW1lbnQ7Ci0KLS8qKgotICogVGhlIGludGVyZmFjZSBmb3IgdGhlIG1lc3NhZ2UgbG9nIGZpbGUuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBMb2cgZXh0ZW5kcyBXU0lEb2N1bWVudAotewotICAvKioKLSAgICogRWxlbWVudCBuYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9OQU1FID0gV1NJQ29uc3RhbnRzLkVMRU1fTE9HOwotCi0gIC8qKgotICAgKiBRTmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgUU5BTUUgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9MT0csIEVMRU1fTkFNRSk7Ci0KLSAgLyoqCi0gICAqIEFkZCBtZXNzYWdlIHRvIGxvZyBmaWxlLiAgVGhlIG1lc3NhZ2Ugd2lsbCBjb250YWluIGJvdGggCi0gICAqIHRyYW5zcG9ydCBhbmQgY29udGVudCBpbmZvcm1hdGlvbi4KLSAgICogQHBhcmFtIGxvZ0VudHJ5IG1lc3NhZ2UgY29udGFpbmluZyBib3RoIHRyYW5zcG9ydCBhbmQgY29udGVudCBpbmZvcm1hdGlvbi4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbXMgb2NjdXIgYWRkaW5nIHRoZSBtZXNzYWdlIHRvIGxvZyBmaWxlLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkTG9nRW50cnkoTWVzc2FnZUVudHJ5IGxvZ0VudHJ5KSB0aHJvd3MgV1NJRXhjZXB0aW9uOwotCi0gIC8qKgotICAgKiBHZXQgdGhlIG51bWJlciBvZiBsb2cgZW50cmllcy4KLSAgICogQHJldHVybiB0aGUgbnVtYmVyIG9mIGxvZyBlbnRyaWVzLiAKLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0RW50cnlDb3VudCgpOwotCi0gIC8qKgotICAgKiBHZXQgYSBzcGVjaWZpYyBsb2cgZmlsZSBlbnRyeS4gCi0gICAqIEBwYXJhbSBpbmRleCBpbmRleCBpbnRvIGxvZyBlbnRyaWVzLgotICAgKiBAcmV0dXJuIGxvZyBmaWxlIGVudHJ5IGF0IHNwZWNpZmllZCBpbmRleC4KLSAgICovCi0gIHB1YmxpYyBNZXNzYWdlRW50cnkgZ2V0TG9nRW50cnkoaW50IGluZGV4KTsKLQotICAvKioKLSAgICogR2V0IGxvZyBlbnRyeSBsaXN0LgotICAgKiBAcmV0dXJuIGxpc3Qgb2YgbG9nIGVudHJpZXMuCi0gICAqLwotICBwdWJsaWMgVmVjdG9yIGdldExvZ0VudHJ5TGlzdCgpOwotCi0gIC8qKgotICAgKiBHZXQgbGFzdCBsb2cgZW50cnkuCi0gICAqIEByZXR1cm4gYXN0IGxvZyBlbnRyeS4KLSAgICovCi0gIHB1YmxpYyBNZXNzYWdlRW50cnkgZ2V0TGFzdExvZ0VudHJ5KCk7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBsb2cgZW50cnkgb2JqZWN0LgotICAgKiBAcmV0dXJuIG5ld2x5IGNyZWF0ZWQgbG9nIGVudHJ5LgotICAgKi8KLSAgcHVibGljIE1lc3NhZ2VFbnRyeSBjcmVhdGVMb2dFbnRyeSgpOwotCi0gIC8qKgotICAgKiBTZXQgc3R5bGUgc2hlZXQgc3RyaW5nLgotICAgKiBAcGFyYW0gc3R5bGVTaGVldFN0cmluZyBhIHN0eWxlIHNoZWV0IHN0cmluZy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFN0eWxlU2hlZXRTdHJpbmcoU3RyaW5nIHN0eWxlU2hlZXRTdHJpbmcpOwotCi0gIC8qKgotICAgKiBHZXQgc3RhcnQgZWxlbWVudCBzdHJpbmcuCi0gICAqIEBwYXJhbSBuYW1lc3BhY2VOYW1lIGEgbmFtZXNwYWNlIHByZWZpeC4KLSAgICogQHJldHVybiBzdGFydCBlbGVtZW50IHN0cmluZy4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U3RhcnRYTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpOwotCi0gIC8qKgotICAgKiBHZXQgZW5kIGVsZW1lbnQgc3RyaW5nLgotICAgKiBAcGFyYW0gbmFtZXNwYWNlTmFtZSBhIG5hbWVzcGFjZSBwcmVmaXguCi0gICAqIEByZXR1cm4gZW5kIGVsZW1lbnQgc3RyaW5nLiAKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RW5kWE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9Mb2dCdWlsZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvTG9nQnVpbGRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzRjYTc3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9Mb2dCdWlsZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZzsKLQotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci1pbXBvcnQgamF2YS51dGlsLkRhdGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLlRvb2xJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmNvbW1vbi5BZGRTdHlsZVNoZWV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5jb21tb24uaW1wbC5BZGRTdHlsZVNoZWV0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuRG9jdW1lbnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuaW1wbC5Mb2dJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuaW1wbC5Mb2dXcml0ZXJJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuaW1wbC5NZXNzYWdlRW50cnlJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yLmNvbmZpZy5Db21tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yLmNvbmZpZy5NYW5JblRoZU1pZGRsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuTW9uaXRvckNvbmZpZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuaW1wbC5Db21tZW50SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuaW1wbC5NYW5JblRoZU1pZGRsZUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVXRpbHM7Ci0KLWltcG9ydCBjb20uaWJtLmljdS50ZXh0LlNpbXBsZURhdGVGb3JtYXQ7Ci1pbXBvcnQgY29tLmlibS5pY3UudXRpbC5UaW1lWm9uZTsKLQotLyoqCi0gKiBHaXZlbiBhIGxpc3Qgb2YgUmVxdWVzdEhhbmRsZXJzLCB0aGlzIGNsYXNzIGJ1aWxkcyBhIAotICogV1MtSSBjb21wbGlhbnQgTWVzc2FnZSBMb2cgZmlsZS4KLSAqIAotICogQGF1dGhvciBEYXZpZCBMYXV6b24sIElCTQotICovCi1wdWJsaWMgY2xhc3MgTG9nQnVpbGRlcgotewotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiKGMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMCwgMjAwMi4iOwotCi0gIC8qKgotICAgKiBJRHMgdG8gaWRlbnRpZnkgcmVxdWVzdHMgYW5kIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2VzLgotICAgKi8KLSAgcHJvdGVjdGVkIGludCBjb252ZXJzYXRpb25JZCA9IDE7Ci0KLSAgLyoqCi0gICAqIElEcyB0byB1bmlxdWVseSBpZGVudGlmeSBlYWNoIGFuZCBldmVyeSBtZXNzYWdlIHdpdGhpbiB0aGUgbG9nIGZpbGUuCi0gICAqLwotICBwcm90ZWN0ZWQgaW50IGlkID0gMTsKLQotICAvKioKLSAgICogVGhlIGFjdHVhbCBsb2cgb2JqZWN0LgotICAgKi8KLSAgcHJvdGVjdGVkIExvZyBsb2cgPSBudWxsOwotCi0gIC8qKgotICAgKiBUaGUgbG9nIGZpbGUuCi0gICAqLwotICBwcm90ZWN0ZWQgSUZpbGUgaWZpbGU7Ci0KLSAgLyoqCi0gICAqIFRvb2wgaW5mb3JtYXRpb24gcHJvcGVydHkgdmFsdWVzLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRPT0xfTkFNRSA9ICJNb25pdG9yIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRPT0xfVkVSU0lPTiA9ICIxLjAiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVE9PTF9SRUxFQVNFX0RBVEUgPSAiMjAwMy0wMy0yMCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUT09MX0lNUExFTUVOVEVSID0gIklCTSI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUT09MX0xPQ0FUSU9OID0gIiI7Ci0KLSAgLyoqCi0gICAqIENvbW1vbiB0aW1lc3RhbXAgZm9ybWF0LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTaW1wbGVEYXRlRm9ybWF0IHRpbWVzdGFtcEZvcm1hdCA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0ICgieXl5eS1NTS1kZCdUJ0hIOm1tOnNzLlNTUydaJyIpOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICogQHBhcmFtIGlmaWxlOiB0aGUgZmlsZSBoYW5kbGVyIGZvciB0aGUgbG9nLgotICAgKi8KLSAgcHVibGljIExvZ0J1aWxkZXIoSUZpbGUgaWZpbGUpCi0gIHsKLSAgICB0aGlzLmlmaWxlID0gaWZpbGU7Ci0gIH0KLQotICAvKioKLSAgICogVGhpcyBidWlsZHMgYW5kIHRoZW4gcmV0dXJucyBhIGxvZyBiYXNlZCBvbiB0aGUgbGlzdCBvZiByZXF1ZXN0LXJlc3BvbnNlIHBhaXJzLgotICAgKiBAcGFyYW0gcmVxdWVzdFJlc3BvbnNlczogYSBsaXN0IG9mIG1lc3NhZ2VzIGluIHRoZSBmb3JtIG9mIHJlcXVlc3QtcmVzcG9uc2UgcGFpcnMuCi0gICAqIEByZXR1cm4gYSBsb2cgYmFzZWQgb24gYSBsaXN0IG9mIHJlcXVlc3QtcmVzcG9uc2UgcGFpcnMuCi0gICAqLwotICBwdWJsaWMgTG9nIGJ1aWxkTG9nKExpc3QgcmVxdWVzdFJlc3BvbnNlcykKLSAgewotICAgIGxvZyA9IG5ldyBMb2dJbXBsKCk7Ci0gICAgbG9nTW9uaXRvckluZm9ybWF0aW9uKCk7Ci0KLSAgICAvLyBsb2cgdGhlIG1lc3NhZ2VzCi0gICAgZm9yIChJdGVyYXRvciBpID0gcmVxdWVzdFJlc3BvbnNlcy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgUmVxdWVzdEhhbmRsZXIgcnIgPSAoUmVxdWVzdEhhbmRsZXIpaS5uZXh0KCk7Ci0gICAgICBpZiAocnIgIT0gbnVsbCkgewotICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgIGxvZ1JlcXVlc3RSZXNwb25zZShycik7Ci0gICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgLyogRW1wdHkgY2F0Y2ggYmxvY2suICBUaGlzIHJlcXVlc3QvcmVzcG9uc2UgcGFpciBpcyBub3QgYSB2YWxpZCBTT0FQCi0gICAgICAgICAgICAgICAqIG1lc3NhZ2UsIHNvIHNraXAgaXQuICovCi0gICAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbG9nOwotICB9Ci0KLSAgLyoqCi0gICAqIEN1cnJlbnRseSBhIG5vLW9wLgotICAgKi8KLSAgcHVibGljIHZvaWQgbG9nTW9uaXRvckluZm9ybWF0aW9uKCkKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIExvZyB0aGUgcmVxdWVzdC1yZXNwb25zZSBwYWlyLgotICAgKkBwYXJhbSBycjogYSByZXF1ZXN0LXJlc3BvbnNlIHBhaXIuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBsb2dSZXF1ZXN0UmVzcG9uc2UoUmVxdWVzdEhhbmRsZXIgcnIpCi0gIHsKLSAgICBpZiAocnIgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBieXRlW10gcmVxdWVzdEhlYWRlckJ5dGVzID0gcnIuZ2V0UmVxdWVzdEhlYWRlcigpOwotICAgICAgYnl0ZVtdIHJlc3BvbnNlSGVhZGVyQnl0ZXMgPSByci5nZXRSZXNwb25zZUhlYWRlcigpOwotIAotICAgICAgaWYgKChyZXF1ZXN0SGVhZGVyQnl0ZXMgIT0gbnVsbCkgfHwgKHJlc3BvbnNlSGVhZGVyQnl0ZXMgIT0gbnVsbCkpCi0gICAgICB7Ci0gICAgICAgIGxvbmcgdGltZXN0YW1wID0gcnIuZ2V0RGF0ZSgpLmdldFRpbWUoKTsKLSAgICAgICAgU3RyaW5nIGxvY2FsSG9zdEFuZFBvcnQgPSAibG9jYWxob3N0OiIgKyByci5nZXRMb2NhbFBvcnQoKTsKLSAgICAgICAgU3RyaW5nIHJlbW90ZUhvc3RBbmRQb3J0ID0gcnIuZ2V0UmVtb3RlSG9zdCgpICsgIjoiICsgcnIuZ2V0UmVtb3RlUG9ydCgpOwotCi0gICAgICAgIGludCBjb252ZXJzYXRpb25JZCA9IGdldE5leHRBdmFpbGFibGVDb252ZXJzYXRpb25JZCgpOwotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIGlmIChyZXF1ZXN0SGVhZGVyQnl0ZXMgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgcmVxdWVzdEhlYWRlciA9IG5ldyBTdHJpbmcocmVxdWVzdEhlYWRlckJ5dGVzKTsKLSAgICAgICAgICAgIGJ5dGVbXSB1bmNodW5rZWRSZXF1ZXN0Qm9keSA9IHJyLmdldFJlcXVlc3RDb250ZW50KCk7Ci0gICAgICAgICAgICBpbnQgcmVxdWVzdElkICA9IGdldE5leHRBdmFpbGFibGVJZCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBNZXNzYWdlRW50cnkgbWVzc2FnZUVudHJ5UmVxdWVzdCA9IGNyZWF0ZU1lc3NhZ2VFbnRyeShyZXF1ZXN0SWQsIGNvbnZlcnNhdGlvbklkLCAKLSAgICAgICAgICAgICAgICBNZXNzYWdlRW50cnkuVFlQRV9SRVFVRVNULCB0aW1lc3RhbXAsIGxvY2FsSG9zdEFuZFBvcnQsCi0gICAgICAgICAgICAgICAgcmVtb3RlSG9zdEFuZFBvcnQsIHVuY2h1bmtlZFJlcXVlc3RCb2R5LCByZXF1ZXN0SGVhZGVyKTsKLQotICAgICAgICAgICAgaWYgKG1lc3NhZ2VFbnRyeVJlcXVlc3QgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgbG9nLmFkZExvZ0VudHJ5KG1lc3NhZ2VFbnRyeVJlcXVlc3QpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAocmVzcG9uc2VIZWFkZXJCeXRlcyAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyByZXNwb25zZUhlYWRlciA9IG5ldyBTdHJpbmcocmVzcG9uc2VIZWFkZXJCeXRlcyk7Ci0gICAgICAgICAgICBieXRlW10gdW5jaHVua2VkUmVzcG9uc2VCb2R5ID0gcnIuZ2V0UmVzcG9uc2VDb250ZW50KCk7Ci0gICAgICAgICAgICBpbnQgcmVzcG9uc2VJZCA9IGdldE5leHRBdmFpbGFibGVJZCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBNZXNzYWdlRW50cnkgbWVzc2FnZUVudHJ5UmVzcG9uc2UgPSBjcmVhdGVNZXNzYWdlRW50cnkocmVzcG9uc2VJZCwgY29udmVyc2F0aW9uSWQsIAotICAgICAgICAgICAgICAgIE1lc3NhZ2VFbnRyeS5UWVBFX1JFU1BPTlNFLCB0aW1lc3RhbXAgKyByci5nZXRSZXNwb25zZVRpbWUoKSwgcmVtb3RlSG9zdEFuZFBvcnQsCi0gICAgICAgICAgICAgICAgbG9jYWxIb3N0QW5kUG9ydCwgdW5jaHVua2VkUmVzcG9uc2VCb2R5LCByZXNwb25zZUhlYWRlcik7Ci0gCi0gICAgICAgICAgICBpZiAobWVzc2FnZUVudHJ5UmVzcG9uc2UgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgbG9nLmFkZExvZ0VudHJ5KG1lc3NhZ2VFbnRyeVJlc3BvbnNlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gaWdub3JlIHRoZSByZXF1ZXN0IHJlc3BvbnNlIHBhaXIKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbnRlbnQgb2YgdGhlIG1lc3NhZ2UgaGFzIGF0IGxlYXN0Ci0gICAqIG9uZSBsZWZ0IGFuZCBvbmUgcmlnaHQgYnJhY2tldC4KLSAgICogQHBhcmFtIG1lc3NhZ2U6IGEgbWVzc2FnZSBjb250ZW50LgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvbnRlbnQgb2YgdGhlIG1lc3NhZ2UgaGFzIGF0IGxlYXN0Ci0gICAqICAgICAgICAgb25lIGxlZnQgYW5kIG9uZSByaWdodCBicmFja2V0LgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNNZXNzYWdlV2l0aEJyYWNrZXRzKFN0cmluZyBtZXNzYWdlKQotICB7Ci0gICAgcmV0dXJuICgobWVzc2FnZSAhPSBudWxsKSAmJiAKLSAgICAgICAgICAgIChtZXNzYWdlLmluZGV4T2YoIjwiKSE9IC0xKSAmJiAKLSAgICAgICAgICAgIChtZXNzYWdlLmluZGV4T2YoIj4iKSAhPSAtMSkpOwotICB9Ci0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBoZWFkZXIgb2YgYSBtZXNzYWdlLgotICAgKiBAcGFyYW0gcmVxdWVzdE9yUmVzcG9uc2U6IGEgbWVzc2FnZS4KLSAgICogQHBhcmFtIGhlYWRlckxlbmd0aDogdGhlIGxlbmd0aCBvZiB0aGUgaGVhZGVyIGluIHRoZSBtZXNzYWdlLgotICAgKiBAcmV0dXJuIHRoZSBoZWFkZXIgb2YgYSBtZXNzYWdlLgotICAgKi8gCi0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0SGVhZGVyKGJ5dGVbXSByZXF1ZXN0T3JSZXNwb25zZSwgIGludCBoZWFkZXJMZW5ndGgpCi0gIHsKLSAgICBTdHJpbmcgcmVzdWx0ID0gbnVsbDsKLSAgICAKLSAgICBpZiAoKHJlcXVlc3RPclJlc3BvbnNlICE9IG51bGwpICYmIAotICAgICAgICAoaGVhZGVyTGVuZ3RoID4gMCkgJiYgCi0gICAgICAgIChyZXF1ZXN0T3JSZXNwb25zZS5sZW5ndGggPj0gaGVhZGVyTGVuZ3RoKSkKLSAgICB7Ci0gICAgICBieXRlW10gaGVhZGVyID0gbmV3IGJ5dGVbaGVhZGVyTGVuZ3RoXTsKLSAgICAgIFN5c3RlbS5hcnJheWNvcHkocmVxdWVzdE9yUmVzcG9uc2UsIDAsIGhlYWRlciwgMCwgaGVhZGVyTGVuZ3RoKTsKLSAgICAgIHJlc3VsdCA9IG5ldyBTdHJpbmcoaGVhZGVyKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBib2R5IG9mIGEgbWVzc2FnZS4KLSAgICogQHBhcmFtIHJlcXVlc3RPclJlc3BvbnNlOiBhIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBoZWFkZXJMZW5ndGg6IHRoZSBsZW5ndGggb2YgdGhlIGhlYWRlciBpbiB0aGUgbWVzc2FnZS4KLSAgICogQHJldHVybiB0aGUgYm9keSBvZiBhIG1lc3NhZ2UuCi0gICAqLyAKLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRCb2R5KGJ5dGVbXSByZXF1ZXN0T3JSZXNwb25zZSwgIGludCBoZWFkZXJMZW5ndGgpCi0gIHsKLSAgICBTdHJpbmcgcmVzdWx0ID0gbnVsbDsKLSAgICAKLSAgICBpZiAoKHJlcXVlc3RPclJlc3BvbnNlICE9IG51bGwpICYmIAotICAgICAgICAoaGVhZGVyTGVuZ3RoID4gMCkgJiYgCi0gICAgICAgIChyZXF1ZXN0T3JSZXNwb25zZS5sZW5ndGggPiBoZWFkZXJMZW5ndGgpKQotICAgIHsKLSAgICAgIGludCBib2R5TGVuZ3RoID0gcmVxdWVzdE9yUmVzcG9uc2UubGVuZ3RoIC0gaGVhZGVyTGVuZ3RoOwotICAgICAgYnl0ZVtdIGJvZHkgPSBuZXcgYnl0ZVtib2R5TGVuZ3RoXTsKLSAgICAgIFN5c3RlbS5hcnJheWNvcHkocmVxdWVzdE9yUmVzcG9uc2UsIGhlYWRlckxlbmd0aCwgYm9keSwgMCwgYm9keUxlbmd0aCk7Ci0gICAgICByZXN1bHQgPSBuZXcgU3RyaW5nKGJvZHkpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0gICAgICAKLSAgLyoqCi0gICAqIENyZWF0ZSBhIGxvZyBlbnRyeS4KLSAgICogQHBhcmFtIGlkOiB1bmlxdWUgbWVzc2FnZSBpZCB3aXRoaW4gdGhlIGxvZy4KLSAgICogQHBhcmFtIGNvbnZlcnNhdGlvbklkOiBjb252ZXJzYXRpb24gaWQgdG8gaWRlbnRpZnkgcmVxdWVzdC1yZXNwb25zZSBwYWlycy4KLSAgICogQHBhcmFtIHR5cGU6IHR5cGUgaW5kaWNhdGluZyBhIHJlcXVlc3Qgb3IgcmVzcG9uc2UuCi0gICAqIEBwYXJhbSB0aW1lc3RhbXA6IHRoZSBkYXRlIGFuZCB0aW1lIG9mIHRoZSBtZXNzYWdlLgotICAgKiBAcGFyYW0gc2VuZGVySG9zdEFuZFBvcnQ6IHRoZSBob3N0IGFuZCBwb3J0IG9mIHRoZSBzZW5kZXIuCi0gICAqIEBwYXJhbSByZWNlaXZlckhvc3RBbmRQb3J0OiB0aGUgaG9zdCBhbmQgcG9ydCBvZiB0aGUgcmVjZWl2ZXIuCi0gICAqIEBwYXJhbSBtZXNzYWdlQ29udGVudDogdGhlIGNvbnRlbnQgb3IgYm9keSBvZiB0aGUgbWVzc2FnZS4KLSAgICogQHBhcmFtIGhlYWRlcjogdGhlIGhlYWRlciBvZiB0aGUgbWVzc2FnZS4KLSAgICogQHJldHVybiBhIGxvZyBlbnRyeS4KLSAgICovCi0gIHByb3RlY3RlZCBNZXNzYWdlRW50cnkgY3JlYXRlTWVzc2FnZUVudHJ5KGludCBpZCwgaW50IGNvbnZlcnNhdGlvbklkLCBTdHJpbmcgdHlwZSwgbG9uZyB0aW1lc3RhbXAsIAotICAgICAgICBTdHJpbmcgc2VuZGVySG9zdEFuZFBvcnQsIFN0cmluZyByZWNlaXZlckhvc3RBbmRQb3J0LCBieXRlW10gbWVzc2FnZUNvbnRlbnQsIFN0cmluZyBoZWFkZXIpIAotICB7Ci0gCS8vIENyZWF0ZSBsb2cgZW50cnkKLSAgICBNZXNzYWdlRW50cnkgbWVzc2FnZUVudHJ5ID0gbmV3IE1lc3NhZ2VFbnRyeUltcGwoKTsKLSAgICBtZXNzYWdlRW50cnkuc2V0SWQoU3RyaW5nLnZhbHVlT2YoaWQpKTsKLSAgICBtZXNzYWdlRW50cnkuc2V0Q29udmVyc2F0aW9uSWQoU3RyaW5nLnZhbHVlT2YoY29udmVyc2F0aW9uSWQpKTsKLSAgICBtZXNzYWdlRW50cnkuc2V0VHlwZSh0eXBlKTsKLSAgICBtZXNzYWdlRW50cnkuc2V0VGltZXN0YW1wKGdldFRpbWVzdGFtcChuZXcgRGF0ZSh0aW1lc3RhbXApKSk7Ci0gICAgbWVzc2FnZUVudHJ5LnNldFNlbmRlckhvc3RBbmRQb3J0KHNlbmRlckhvc3RBbmRQb3J0KTsKLSAgICBtZXNzYWdlRW50cnkuc2V0UmVjZWl2ZXJIb3N0QW5kUG9ydChyZWNlaXZlckhvc3RBbmRQb3J0KTsKLSAgICBtZXNzYWdlRW50cnkuc2V0RW5jb2RpbmcoV1NJQ29uc3RhbnRzLkRFRkFVTFRfWE1MX0VOQ09ESU5HKTsKLSAgICAKLSAgICBtZXNzYWdlRW50cnkuc2V0SFRUUEhlYWRlcnMoaGVhZGVyKTsKLQotICAgIGlmIChVdGlscy5pc011bHRpcGFydFJlbGF0ZWRNZXNzYWdlKGhlYWRlcikpCi0gICAgewotICAgIAlNaW1lUGFydHMgbWltZVBhcnRzID0gVXRpbHMucGFyc2VNdWx0aXBhcnRSZWxhdGVkTWVzc2FnZShtZXNzYWdlQ29udGVudCwgaGVhZGVyLCBXU0lDb25zdGFudHMuREVGQVVMVF9YTUxfRU5DT0RJTkcpOwotICAgIAlpZiAobWltZVBhcnRzID09IG51bGwpCi0gICAgCXsKLSAgICAJICAvLyBwcm9ibGVtIGNyZWF0aW5nIE1pbWVwYXJ0cyAtLSB0cmVhdCBpdCBhcyBzaW1wbGUgU09BUCBtZXNzYWdlCi0gICAgCSAgaWYgKG1lc3NhZ2VDb250ZW50ICE9IG51bGwpCi0gICAgCSAgewotICAgIAkgICAgbWVzc2FnZUVudHJ5LnNldE1lc3NhZ2UobmV3IFN0cmluZyhtZXNzYWdlQ29udGVudCkpOwotICAgIAkgIH0KLSAgICAJICBlbHNlCi0gICAgCSAgewotICAgIAkgICAgbWVzc2FnZUVudHJ5LnNldE1lc3NhZ2UoIiIpOwotICAgIAkgIH0KLSAgICAJICBtZXNzYWdlRW50cnkuc2V0TWltZUNvbnRlbnQoZmFsc2UpOwotICAgIAl9Ci0gICAgCWVsc2UKLSAgICAJewotICAgICAgICAgIG1lc3NhZ2VFbnRyeS5zZXRNaW1lUGFydHMobWltZVBhcnRzKTsKLSAgICAgICAgICBtZXNzYWdlRW50cnkuc2V0TWltZUNvbnRlbnQodHJ1ZSk7Ci0gICAgCX0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIEdldCB0aGUgbWVzc2FnZSBjb250ZW50Ci0gICAgICBpZiAobWVzc2FnZUNvbnRlbnQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgbWVzc2FnZUVudHJ5LnNldE1lc3NhZ2UobmV3IFN0cmluZyhtZXNzYWdlQ29udGVudCkpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBtZXNzYWdlRW50cnkuc2V0TWVzc2FnZSgiIik7Ci0gICAgICB9Ci0gICAgICBtZXNzYWdlRW50cnkuc2V0TWltZUNvbnRlbnQoZmFsc2UpOwotICAgIH0KLSAgICByZXR1cm4gbWVzc2FnZUVudHJ5OwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG5leHQgYXZhaWxhYmxlIGlkLCB0aGVuIGluY3JlbWVudHMgdGhlIGlkIHZhbHVlLgotICAgKiBAcmV0dXJuIHRoZSBuZXh0IGF2YWlsYWJsZSBpZC4KLSAgICovCi0gIHByb3RlY3RlZCBpbnQgZ2V0TmV4dEF2YWlsYWJsZUlkKCkKLSAgewotICAgIHJldHVybiBpZCsrOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG5leHQgYXZhaWxhYmxlIGNvbnZlcnNhdGlvbiBpZCwgdGhlbiBpbmNyZW1lbnRzIHRoZSBjb252ZXJzYXRpb24gaWQgdmFsdWUuCi0gICAqIEEgY29udmVyc2F0aW9uIGlkIGlkZW50ZmllcyBhIHJlcXVlc3QgYW5kIGl0cyBjb3JyZXNwb25kaW5nIHJlc3BvbnNlLgotICAgKiBAcmV0dXJuIHRoZSBuZXh0IGF2YWlsYWJsZSBjb252ZXJhc2F0aW9uaWQuCi0gICAqLwotICBwcm90ZWN0ZWQgaW50IGdldE5leHRBdmFpbGFibGVDb252ZXJzYXRpb25JZCgpCi0gIHsKLSAgICByZXR1cm4gY29udmVyc2F0aW9uSWQrKzsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0SGVhZGVyTGVuZ3RoKEludGVnZXIgb2JqKQotICB7Ci0gICAgaW50IHJlc3VsdCA9IDA7Ci0gICAgaWYgKG9iaiAhPSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IG9iai5pbnRWYWx1ZSgpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgLyoqCi0gICAqIFdyaXRlIGxvZyBvdXQgdG8gZmlsZS4KLSAgICogQHBhcmFtIGxvZzogbG9nIHRvIGJlIHdyaXR0ZW4gdG8gZmlsZS4KLSAgICovCi0KLSAgcHVibGljIHZvaWQgd3JpdGVMb2coTG9nIGxvZykKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdldCBsb2cgd3JpdGVyCi0gICAgICBMb2dXcml0ZXIgbG9nV3JpdGVyID0gbmV3IExvZ1dyaXRlckltcGwoKTsKLSAgICAKLSAgICAgIGxvZ1dyaXRlci5zZXRXcml0ZXIoaWZpbGUuZ2V0TG9jYXRpb24oKS50b1N0cmluZygpKTsKLSAgICAgIAotICAgICAgLy8gV3JpdGUgc3RhcnQgb2YgbG9nIGZpbGUKLSAgICAgIGxvZ1dyaXRlci53cml0ZShuZXcgU3RyaW5nUmVhZGVyKGxvZy5nZXRTdGFydFhNTFN0cmluZygiIikpKTsKLSAgICAKLSAgICAgIC8vIFdyaXRlIG1vbml0b3IgdG9vbCBpbmZvcm1hdGlvbgotICAgICAgU3RyaW5nIG1vbml0b3JJbmZvID0gZ2VuZXJhdGVNb25pdG9yVG9vbEluZm8oKTsKLSAgICAgIGxvZ1dyaXRlci53cml0ZShuZXcgU3RyaW5nUmVhZGVyKG1vbml0b3JJbmZvKSk7Ci0KLSAgICAgIGZvciAoaW50IGk9MDsgaTxsb2cuZ2V0RW50cnlDb3VudCgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIE1lc3NhZ2VFbnRyeSBtZSA9IGxvZy5nZXRMb2dFbnRyeShpKTsKLSAgICAgICAgbG9nV3JpdGVyLndyaXRlKG5ldyBTdHJpbmdSZWFkZXIobWUudG9YTUxTdHJpbmcoIiIpKSk7Ci0gICAgICB9Ci0gICAgICBsb2dXcml0ZXIud3JpdGUobmV3IFN0cmluZ1JlYWRlcihsb2cuZ2V0RW5kWE1MU3RyaW5nKCIiKSkpOwotICAgICAgbG9nV3JpdGVyLmNsb3NlKCk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4Y2VwdGlvbiB0aHJvd24gd2hlbiBwcmludGluZyBsb2cgZmlsZS4iKTsKLSAgICB9Ci0gIH0KLQotCi0gIC8qKgotICAgKiBSZXR1cm5zIFhNTCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIE1vbml0b3IgdG9vbC4KLSAgICogQHJldHVybiBYTUwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBNb25pdG9yIHRvb2wuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGdlbmVyYXRlTW9uaXRvclRvb2xJbmZvKCkKLSAgewotCi0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsgCi0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBUb29sIGluZm9ybWF0aW9uCi0gICAgICBUb29sSW5mbyB0b29sSW5mbyA9IG5ldyBUb29sSW5mbyhUT09MX05BTUUsIFRPT0xfVkVSU0lPTiwgVE9PTF9SRUxFQVNFX0RBVEUsIFRPT0xfSU1QTEVNRU5URVIsIFRPT0xfTE9DQVRJT04pOwotCi0gICAgICBEb2N1bWVudEZhY3RvcnkgZG9jdW1lbnRGYWN0b3J5ID0gRG9jdW1lbnRGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0gICAgICBNb25pdG9yQ29uZmlnIG1vbml0b3JDb25maWcgPSBkb2N1bWVudEZhY3RvcnkubmV3TW9uaXRvckNvbmZpZygpOwotICAgIAotICAgICAgQ29tbWVudCBjb21tZW50ID0gbmV3IENvbW1lbnRJbXBsKCk7Ci0gICAgICBjb21tZW50LnNldFRleHQoIkNvbW1lbnQiKTsKLSAgICAgIG1vbml0b3JDb25maWcuc2V0Q29tbWVudChjb21tZW50KTsKLSAgICAgIG1vbml0b3JDb25maWcuc2V0TG9nTG9jYXRpb24oIlVSTCIpOwotICAgICAgbW9uaXRvckNvbmZpZy5zZXRSZXBsYWNlTG9nKHRydWUpOwotCi0gICAgICBBZGRTdHlsZVNoZWV0IGFkZFN0eWxlU2hlZXQgPSBuZXcgQWRkU3R5bGVTaGVldEltcGwoKTsKLSAgICAgIG1vbml0b3JDb25maWcuc2V0QWRkU3R5bGVTaGVldChhZGRTdHlsZVNoZWV0KTsKLQotICAgICAgbW9uaXRvckNvbmZpZy5zZXRMb2dEdXJhdGlvbig2MDApOwotICAgICAgbW9uaXRvckNvbmZpZy5zZXRUaW1lb3V0KDMpOwotICAgICAKLSAgICAgIE1hbkluVGhlTWlkZGxlIG1hbkluVGhlTWlkZGxlID0gbmV3IE1hbkluVGhlTWlkZGxlSW1wbCgpOwotICAgICAgbW9uaXRvckNvbmZpZy5zZXRNYW5JblRoZU1pZGRsZShtYW5JblRoZU1pZGRsZSk7Ci0KLSAgICAgIG1vbml0b3JDb25maWcuc2V0TG9jYXRpb24oImRvY3VtZW50VVJJIik7Ci0gICAgICBtb25pdG9yQ29uZmlnLnNldFZlcmJvc2VPcHRpb24oZmFsc2UpOwotCi0gICAgICAvLyBTdGFydCAgICAgCi0gICAgICBwdy5wcmludCh0b29sSW5mby5nZXRTdGFydFhNTFN0cmluZygiIikpOwotICAgIAotICAgICAgLy8gQ29uZmlnCi0gICAgICBwdy5wcmludChtb25pdG9yQ29uZmlnLnRvWE1MU3RyaW5nKFdTSUNvbnN0YW50cy5OU19OQU1FX1dTSV9NT05JVE9SX0NPTkZJRykpOwotCi0gICAgICAvLyBFbmQKLSAgICAgIHB3LnByaW50bG4odG9vbEluZm8uZ2V0RW5kWE1MU3RyaW5nKCIiKSk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgfQotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgZ2l2ZW4gZGF0ZSBhbmQgdGltZSBhcyBhIHRpbWVzdGFtcC4KLSAgICogQHBhcmFtIGRhdGU6IGEgZGF0ZSBvYmplY3QuCi0gICAqIEByZXR1cm4gdGhlIGdpdmVuIGRhdGUgYW5kIHRpbWUgYXMgYSB0aW1lc3RhbXAuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRUaW1lc3RhbXAoRGF0ZSBkYXRlKQotICB7Ci0gICAgdGltZXN0YW1wRm9ybWF0LnNldFRpbWVab25lKFRpbWVab25lLmdldERlZmF1bHQoKSk7Ci0gICAgcmV0dXJuIHRpbWVzdGFtcEZvcm1hdC5mb3JtYXQoZGF0ZSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9Mb2dSZWFkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9Mb2dSZWFkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Q2MDEyOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvTG9nUmVhZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nOwotCi1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudFJlYWRlcjsKLQotLyoqCi0gKiBEZWZpbmVzIHRoZSBpbnRlcmZhY2UgdXNlZCB0byByZWFkIHRoZSBMb2cgZmlsZS4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgTmVpbCBEZWxpbWEgKG5kZGVsaW1hQGNhLmlibS5jb20pCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBMb2dSZWFkZXIgZXh0ZW5kcyBEb2N1bWVudFJlYWRlcgotewotICAvKioKLSAgICogU3RhcnQgcmVhZGluZyBsb2cgZW50cmllcyBmcm9tIGEgc3BlY2lmaWVkIFVSSSBsb2NhdGlvbiB1c2luZyB0aGUgc3BlY2lmaWVkIGNhbGxiYWNrLgotICAgKiAKLSAgICogQHBhcmFtIGxvZ1VSSSB0aGUgbG9jYXRpb24gb2YgdGhlIGxvZyBmaWxlLgotICAgKiBAcGFyYW0gbG9nRW50cnlIYW5kbGVyIHRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHRvIHByb2Nlc3MgZWFjaCBsb2cgZW50cnkuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW0gcmVhZGluZyBsb2cuCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWFkTG9nKFN0cmluZyBsb2dVUkksIE1lc3NhZ2VFbnRyeUhhbmRsZXIgbG9nRW50cnlIYW5kbGVyKQotICAgIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIFN0YXJ0IHJlYWRpbmcgbG9nIGVudHJpZXMgZnJvbSBhIHJlYWRlciB1c2luZyB0aGUgc3BlY2lmaWVkIGNhbGxiYWNrLgotICAgKiAKLSAgICogQHBhcmFtIHJlYWRlciB0aGUgc291cmNlIGZvciB0aGUgbG9nIGZpbGUuCi0gICAqIEBwYXJhbSBsb2dFbnRyeUhhbmRsZXIgdGhlIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgdG8gcHJvY2VzcyBlYWNoIGxvZyBlbnRyeS4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbSByZWFkaW5nIGxvZy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlYWRMb2coUmVhZGVyIHJlYWRlciwgTWVzc2FnZUVudHJ5SGFuZGxlciBsb2dFbnRyeUhhbmRsZXIpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLQotICAvLyBBREQ6IERvIHdlIG5lZWQgdG8gYWRkIGZ1bmN0aW9ucyB0aGF0IHdpbGwgcmVhZCB0aGUgZW50aXJlIGxvZyBmaWxlPwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbG9nL0xvZ1dyaXRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbG9nL0xvZ1dyaXRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGUzM2U4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9Mb2dXcml0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2c7Ci0KLWltcG9ydCBqYXZhLmlvLldyaXRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50V3JpdGVyOwotCi0vKioKLSAqIERlZmluZXMgdGhlIGludGVyZmFjZSB1c2VkIHRvIHdyaXRlIHRoZSBMb2cgZmlsZS4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgTmVpbCBEZWxpbWEgKG5kZGVsaW1hQGNhLmlibS5jb20pCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBMb2dXcml0ZXIgZXh0ZW5kcyBEb2N1bWVudFdyaXRlcgotewotICAvKioKLSAgICogV3JpdGUgdGhlIGVudGlyZSBjb250ZW50cyBvZiB0aGUgZG9jdW1lbnQgdXNpbmcgdGhlIGxvY2F0aW9uCi0gICAqIHRoYXQgd2FzIHByZXZpb3VzbHkgc2V0IHVzaW5nIHRoZSBzZXRMb2NhdGlvbiBtZXRob2QuCi0gICAqIEBwYXJhbSBsb2cgdGhlIExvZyBvYmplY3QuCi0gICAqIEB0aHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlmIHRoaXMgb3BlcmF0aW9uIGhhcyBiZWVuIGludm9rZWQgCi0gICAqICAgICAgICAgYXQgYW4gaWxsZWdhbCBvciBpbmFwcHJvcHJpYXRlIHRpbWUKLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbXMgb2NjdXIgZHVyaW5nIHRoZSB3cml0aW5nIG9mIAotICAgKiAgICAgICAgIHRoZSBsb2cuCi0gICAqLwotICBwdWJsaWMgdm9pZCB3cml0ZShMb2cgbG9nKSB0aHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uLCBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIFdyaXRlIHRoZSBlbnRpcmUgY29udGVudHMgb2YgdGhlIGRvY3VtZW50LgotICAgKiBAcGFyYW0gbG9nIHRoZSBMb2cgb2JqZWN0LgotICAgKiBAcGFyYW0gd3JpdGVyIGEgV3JpdGVyIG9iamVjdC4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbXMgb2NjdXIgZHVyaW5nIHRoZSB3cml0aW5nIG9mIAotICAgKiAgICAgICAgIHRoZSBsb2cuCi0gICAqLwotICBwdWJsaWMgdm9pZCB3cml0ZShMb2cgbG9nLCBXcml0ZXIgd3JpdGVyKSB0aHJvd3MgV1NJRXhjZXB0aW9uOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbG9nL01lc3NhZ2VFbnRyeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbG9nL01lc3NhZ2VFbnRyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjU4ZmYzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9NZXNzYWdlRW50cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLmRvbS5FbGVtZW50TG9jYXRpb247Ci0KLS8qKgotKiBNZXNzYWdlIGVudHJ5IGludGVyZmFjZS4KLSoKLSogQHZlcnNpb24gMS4wLjEKLSogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0qLwotcHVibGljIGludGVyZmFjZSBNZXNzYWdlRW50cnkgZXh0ZW5kcyBEb2N1bWVudEVsZW1lbnQKLXsKLSAvKioKLSAgKiBFbGVtZW50IG5hbWUuCi0gICovCi0gcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9OQU1FID0gV1NJQ29uc3RhbnRzLkVMRU1fTUVTU0FHRV9FTlRSWTsKLQotIC8qKgotICAqIFFOYW1lLgotICAqLwotIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgUU5BTUUgPQotICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NJX0xPRywgRUxFTV9OQU1FKTsKLQotIC8qKgotICAqIFR5cGUgb2YgbG9nIGVudHJ5LgotICAqLwotIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfUkVRVUVTVCA9ICJyZXF1ZXN0IjsKLSBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX1JFU1BPTlNFID0gInJlc3BvbnNlIjsKLQotIC8qKgotICAqIEdldHMgdGhlIGlkLgotICAqIEByZXR1cm4gdGhlIGlkLgotICAqIEBzZWUgI3NldElkCi0gICovCi0gcHVibGljIFN0cmluZyBnZXRJZCgpOwotCi0gLyoqCi0gICogU2V0cyB0aGUgaWQuCi0gICogQHBhcmFtIGlkIHRoZSBpZGVudGlmaWVyIGZvciB0aGUgbG9nIGVudHJ5LgotICAqIEBzZWUgI2dldElkCi0gICovCi0gcHVibGljIHZvaWQgc2V0SWQoU3RyaW5nIGlkKTsKLQotIC8qKgotICAqIEdldHMgdGhlIGNvbnZlcnNhdGlvbiBpZC4KLSAgKiBAcmV0dXJuIHRoZSBjb252ZXJzYXRpb24gaWQuCi0gICogQHNlZSAjc2V0Q29udmVyc2F0aW9uSWQKLSAgKi8KLSBwdWJsaWMgU3RyaW5nIGdldENvbnZlcnNhdGlvbklkKCk7Ci0KLSAvKioKLSAgKiBTZXRzIHRoZSBjb252ZXJzYXRpb24gaWQuCi0gICogQHBhcmFtIGNvbnZlcnNhdGlvbklkIHRoZSBjb252ZXJzYXRpb24gaWQuCi0gICogQHNlZSAjZ2V0Q29udmVyc2F0aW9uSWQKLSAgKi8KLSBwdWJsaWMgdm9pZCBzZXRDb252ZXJzYXRpb25JZChTdHJpbmcgY29udmVyc2F0aW9uSWQpOwotCi0gLyoqCi0gICogR2V0cyB0aGUgdGltZXN0YW1wLgotICAqIEByZXR1cm4gdGhlIHRpbWVzdGFtcC4KLSAgKiBAc2VlICNzZXRUaW1lc3RhbXAKLSAgKi8KLSBwdWJsaWMgU3RyaW5nIGdldFRpbWVzdGFtcCgpOwotCi0gLyoqCi0gICogU2V0cyB0aGUgdGltZXN0YW1wLgotICAqIEBwYXJhbSB0aW1lc3RhbXAgdGhlIHRpbWVzdGFtcC4KLSAgKiBAc2VlICNnZXRUaW1lc3RhbXAKLSAgKi8KLSBwdWJsaWMgdm9pZCBzZXRUaW1lc3RhbXAoU3RyaW5nIHRpbWVzdGFtcCk7Ci0KLSAvKioKLSAgKiBHZXRzIHRoZSB0eXBlLgotICAqIEByZXR1cm4gdGhlIHR5cGUuCi0gICogQHNlZSAjc2V0VHlwZQotICAqLwotIHB1YmxpYyBTdHJpbmcgZ2V0VHlwZSgpOwotCi0gLyoqCi0gICogU2V0cyB0aGUgdHlwZS4KLSAgKiBAcGFyYW0gdHlwZSB0aGUgdHlwZS4KLSAgKiBAc2VlICNnZXRUeXBlCi0gICovCi0gcHVibGljIHZvaWQgc2V0VHlwZShTdHJpbmcgdHlwZSk7Ci0KLSAvKioKLSAgKiBHZXRzIHRoZSBzZW5kZXIgaG9zdCBhbmQgcG9ydC4KLSAgKiBAcmV0dXJuICB0aGUgc2VuZGVyIGhvc3QgYW5kIHBvcnQuCi0gICogQHNlZSAjc2V0U2VuZGVySG9zdEFuZFBvcnQKLSAgKi8KLSBwdWJsaWMgU3RyaW5nIGdldFNlbmRlckhvc3RBbmRQb3J0KCk7Ci0KLSAvKioKLSAgKiBTZXRzIHRoZSBzZW5kZXIgaG9zdCBhbmQgcG9ydC4KLSAgKiBAcGFyYW0gc2VuZGVySG9zdEFuZFBvcnQgdGhlIHNlbmRlciBob3N0IGFuZCBwb3J0LgotICAqIEBzZWUgI2dldFNlbmRlckhvc3RBbmRQb3J0Ci0gICovCi0gcHVibGljIHZvaWQgc2V0U2VuZGVySG9zdEFuZFBvcnQoU3RyaW5nIHNlbmRlckhvc3RBbmRQb3J0KTsKLQotIC8qKgotICAqIEdldHMgdGhlIHJlY2VpdmVyIGhvc3QgYW5kIHBvcnQuCi0gICogQHJldHVybiB0aGUgcmVjZWl2ZXIgaG9zdCBhbmQgcG9ydC4KLSAgKiBAc2VlICNzZXRSZWNlaXZlckhvc3RBbmRQb3J0Ci0gICovCi0gcHVibGljIFN0cmluZyBnZXRSZWNlaXZlckhvc3RBbmRQb3J0KCk7Ci0KLSAvKioKLSAgKiBTZXRzIHRoZSByZWNlaXZlciBob3N0IGFuZCBwb3J0LgotICAqIEBwYXJhbSByZWNlaXZlckhvc3RBbmRQb3J0IHRoZSByZWNlaXZlciBob3N0IGFuZCBwb3J0LgotICAqIEBzZWUgI2dldFJlY2VpdmVySG9zdEFuZFBvcnQKLSAgKi8KLSBwdWJsaWMgdm9pZCBzZXRSZWNlaXZlckhvc3RBbmRQb3J0KFN0cmluZyByZWNlaXZlckhvc3RBbmRQb3J0KTsKLQotIC8qKgotICAqIEdldHMgdGhlIG1lc3NhZ2UuCi0gICogQHJldHVybiB0aGUgbWVzc2FnZS4KLSAgKiBAc2VlICNzZXRNZXNzYWdlCi0gICovCi0gcHVibGljIFN0cmluZyBnZXRNZXNzYWdlKCk7Ci0KLSAvKioKLSAgKiBTZXRzIHRoZSBtZXNzYWdlLgotICAqIEBwYXJhbSBtZXNzYWdlIHRoZSBtZXNzYWdlLgotICAqIEBzZWUgI2dldE1lc3NhZ2UKLSAgKi8KLSBwdWJsaWMgdm9pZCBzZXRNZXNzYWdlKFN0cmluZyBtZXNzYWdlKTsKLQotIC8qKgotICAqIFNldHMgdGhlIGVuY29kaW5nLgotICAqIEBwYXJhbSBlbmNvZGluZyB0aGUgZW5jb2RpbmcuCi0gICogQHNlZSAjZ2V0TWVzc2FnZQotICAqLwotIHB1YmxpYyB2b2lkIHNldEVuY29kaW5nKFN0cmluZyBlbmNvZGluZyk7Ci0KLSAvKioKLSAgKiBHZXRzIHRoZSBCT00uCi0gICogQHJldHVybiB0aGUgQk9NLgotICAqIEBzZWUgI3NldEJPTQotICAqLwotIHB1YmxpYyBpbnQgZ2V0Qk9NKCk7Ci0KLSAvKioKLSAgKiBTZXRzIHRoZSBCT00uCi0gICogQHBhcmFtIGJvbSB0aGUgQk9NLgotICAqIEBzZWUgI2dldEJPTQotICAqLwotIHB1YmxpYyB2b2lkIHNldEJPTShpbnQgYm9tKTsKLQotIC8qKgotICAqIEdldHMgdGhlIEhUVFAgaGVhZGVycy4KLSAgKiBAcmV0dXJuIHRoZSBIVFRQIGhlYWRlcnMuCi0gICogQHNlZSAjc2V0SFRUUEhlYWRlcnMKLSAgKi8KLSBwdWJsaWMgU3RyaW5nIGdldEhUVFBIZWFkZXJzKCk7Ci0KLSAvKioKLSAgKiBTZXRzIHRoZSBIVFRQIGhlYWRlcnMuCi0gICogQHBhcmFtIGh0dHBIZWFkZXJzIHRoZSBIVFRQIGhlYWRlcnMuCi0gICogQHNlZSAjZ2V0SFRUUEhlYWRlcnMKLSAgKi8KLSBwdWJsaWMgdm9pZCBzZXRIVFRQSGVhZGVycyhTdHJpbmcgaHR0cEhlYWRlcnMpOwotCi0gLyoqCi0gICogR2V0cyBlbGVtZW50IGxvY2F0aW9uLgotICAqIEByZXR1cm4gZWxlbWVudCBsb2NhdGlvbi4KLSAgKiBAc2VlICNzZXRFbGVtZW50TG9jYXRpb24KLSAgKi8KLSBwdWJsaWMgRWxlbWVudExvY2F0aW9uIGdldEVsZW1lbnRMb2NhdGlvbigpOwotCi0gLyoqCi0gICogU2V0cyBlbGVtZW50IGxvY2F0aW9uLgotICAqIEBwYXJhbSBlbGVtZW50TG9jYXRpb24gZWxlbWVudCBsb2NhdGlvbi4KLSAgKiBAc2VlICNnZXRFbGVtZW50TG9jYXRpb24KLSAgKi8KLSBwdWJsaWMgdm9pZCBzZXRFbGVtZW50TG9jYXRpb24oRWxlbWVudExvY2F0aW9uIGVsZW1lbnRMb2NhdGlvbik7Ci0gCi0gLyoqCi0gICogSWYgY29udGVudCBpcyBNSU1FIHR5cGUgcmV0dXJucyB0cnVlLCBvdGhlcndpc2UgZmFsc2UgIAotICAqIEByZXR1cm4gaWYgY29udGVudCBpcyBNSU1FIHR5cGUgcmV0dXJucyB0cnVlLCBvdGhlcndpc2UgZmFsc2UKLSAgKi8KLSBwdWJsaWMgYm9vbGVhbiBpc01pbWVDb250ZW50KCk7Ci0gCi0gLyoqCi0gICogU2V0IGZsYWcgdG8gZGV0ZXJtaW5lIGlmIGNvbnRlbnQgaXMgTUlNRSB0eXBlLiAKLSAgKiBAcGFyYW0gaXNNaW1lQ29udGVudCBhIGJvb29sZWFuIHZhbHVlCi0gICovCi0gcHVibGljIHZvaWQgc2V0TWltZUNvbnRlbnQoYm9vbGVhbiBpc01pbWVDb250ZW50KTsKLQotIC8qKgotICAqIFJldHVybnMgYXJyYXkgb2YgdGhlIE1JTUUgcGFydHMgb2YgdGhlIG1lc3NhZ2UuCi0gICogQHJldHVybiBhcnJheSBvZiB0aGUgTUlNRSBwYXJ0cyBvZiB0aGUgbWVzc2FnZS4KLSAgKiBAc2VlICNpc01JTUVDb250ZW50KCkgCi0gICovCi0gcHVibGljIE1pbWVQYXJ0cyBnZXRNaW1lUGFydHMoKTsKLSAKLSAvKioKLSAgKiBTZXRzIHRoZSBNSU1FIHBhcnRzIG9mIHRoZSBtZXNzYWdlLgotICAqIEBwYXJhbSBtaW1lUGFydHMgaGUgTUlNRSBwYXJ0cyBvZiB0aGUgbWVzc2FnZS4KLSAgKiBAc2VlICNnZXRNaW1lUGFydHMKLSAgKi8KLSBwdWJsaWMgdm9pZCBzZXRNaW1lUGFydHMoTWltZVBhcnRzIG1pbWVQYXJ0cyk7Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9NZXNzYWdlRW50cnlIYW5kbGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvTWVzc2FnZUVudHJ5SGFuZGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDAxZTJhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9NZXNzYWdlRW50cnlIYW5kbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXJ0aWZhY3RSZWZlcmVuY2U7Ci0KLS8qKgotICogRGVmaW5lcyB0aGUgaW50ZXJmYWNlIGZvciB0aGUgTWVzc2FnZUVudHJ5IGhhbmRsZXIuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqIEBhdXRob3IgR3JhaGFtIFR1cnJlbGwgKGd0dXJyZWxsQHVrLmlibS5jb20pCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgTWVzc2FnZUVudHJ5SGFuZGxlcgotewotICAvKioKLSAgICogUHJvY2VzcyBhcnRpZmFjdCByZWZlcmVuY2UuCi0gICAqIEBwYXJhbSBhcnRpZmFjdFJlZmVyZW5jZSBhcnRpZmFjdCByZWZlcmVuY2UuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW1zIG9jY3VyIHdoaWxlIHByb2Nlc3NpbmcgYXJ0aWZhY3QgcmVmZXJlbmNlLgotICAgKi8KLSAgcHVibGljIHZvaWQgcHJvY2Vzc0FydGlmYWN0UmVmZXJlbmNlKEFydGlmYWN0UmVmZXJlbmNlIGFydGlmYWN0UmVmZXJlbmNlKQotICAgIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIFByb2Nlc3MgYSBzaW5nbGUgbG9nIGVudHJ5LgotICAgKiBAcGFyYW0gZW50cnlDb250ZXh0IGEgc2luZ2xlIGxvZyBlbnRyeS4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbXMgb2NjdXIgd2hpbGUgcHJvY2Vzc2luZyBhIHNpbmdsZSBsb2cgZW50cnkuCi0gIAotICAgKi8KLSAgcHVibGljIHZvaWQgcHJvY2Vzc0xvZ0VudHJ5KEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpIHRocm93cyBXU0lFeGNlcHRpb247Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvTWltZVBhcnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9NaW1lUGFydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZTQ2ZGM1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9NaW1lUGFydC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZzsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQ7Ci0KLS8qKgotICogQGF1dGhvciBsYXV6b25kCi0gKiAKLSAqIFRPRE8gVG8gY2hhbmdlIHRoZSB0ZW1wbGF0ZSBmb3IgdGhpcyBnZW5lcmF0ZWQgdHlwZSBjb21tZW50IGdvIHRvIFdpbmRvdyAtCi0gKiBQcmVmZXJlbmNlcyAtIEphdmEgLSBDb2RlIFN0eWxlIC0gQ29kZSBUZW1wbGF0ZXMKLSAqLwotcHVibGljIGludGVyZmFjZSBNaW1lUGFydCBleHRlbmRzIERvY3VtZW50RWxlbWVudCB7Ci0KLQkvKioKLQkgKiBHZXRzIHRoZSBjb250ZW50IGZvciB0aGUgbWltZSBwYXJ0LgotCSAqIAotCSAqIEByZXR1cm4gdGhlIG1pbWUgY29udGVudC4KLQkgKiBAc2VlICNzZXRDb250ZW50Ci0JICovCi0JcHVibGljIFN0cmluZyBnZXRDb250ZW50KCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBjb250ZW50IGZvciB0aGUgbWltZSBwYXJ0LgotCSAqIAotCSAqIEBwYXJhbSBtaW1lQ29udGVudAotCSAqICAgICAgICAgICAgdGhlIG1pbWUgY29udGVudC4KLQkgKiBAc2VlICNnZXRDb250ZW50Ci0JICovCi0JcHVibGljIHZvaWQgc2V0Q29udGVudChTdHJpbmcgbWltZUNvbnRlbnQpOwotCi0JLyoqCi0JICogR2V0cyB0aGUgaGVhZGVycyBmb3IgdGhlIG1pbWUgcGFydC4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBtaW1lIGhlYWRlcnMuCi0JICogQHNlZSAjc2V0TWltZUhlYWRlcnMKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldEhlYWRlcnMoKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIGhlYWRlcnMgZm9yIHRoZSBtaW1lIHBhcnQuCi0JICogCi0JICogQHBhcmFtIG1pbWVIZWFkZXJzCi0JICogICAgICAgICAgICB0aGUgbWltZSBoZWFkZXJzLgotCSAqIEBzZWUgI2dldEhlYWRlcnMKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRIZWFkZXJzKFN0cmluZyBtaW1lSGVhZGVycyk7Ci0KLQkvKioKLQkgKiBHZXRzIHRoZSBib3VuZGFyeSBzdHJpbmdzIGZvciB0aGUgbWltZSBwYXJ0LiBOb3RlIHRoYXQgdGhlIGxhc3QgcGFydCBvZiBhCi0JICogbXVsdGlwYXJ0LyByZWxhdGVkIG1lc3NhZ2Ugd2lsbCBoYXZlIDIgYm91bmRhcnkgc3RyaW5ncy4gQWxsIG90aGVyIHBhcnRzCi0JICogd2lsbCBoYXZlIG9uZS4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBib3VuZGFyeSBzdHJpbmdzLgotCSAqIEBzZWUgI3NldEJvdW5kYXJ5U3RyaW5ncwotCSAqLwotCXB1YmxpYyBTdHJpbmdbXSBnZXRCb3VuZGFyeVN0cmluZ3MoKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIGJvdW5kYXJ5IHN0cmluZ3MgZm9yIHRoZSBtaW1lIHBhcnQuIE5vdGUgdGhhdCB0aGUgbGFzdCBwYXJ0IG9mIGEKLQkgKiBtdWx0aXBhcnQvIHJlbGF0ZWQgbWVzc2FnZSB3aWxsIGhhdmUgMiBib3VuZGFyeSBzdHJpbmdzLiBBbGwgb3RoZXIgcGFydHMKLQkgKiB3aWxsIGhhdmUgb25lLgotCSAqIAotCSAqIEBwYXJhbSBib3VuZGFyeVN0cmluZ3MKLQkgKiAgICAgICAgICAgIHRoZSBib3VuZGFyeSBzdHJpbmdzLgotCSAqIEBzZWUgI2dldEJvdW5kYXJ5U3RyaW5ncwotCSAqLwotCXB1YmxpYyB2b2lkIHNldEJvdW5kYXJ5U3RyaW5ncyhTdHJpbmdbXSBtaW1lSGVhZGVycyk7Ci0KLQlwdWJsaWMgU3RyaW5nIHRvWE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9NaW1lUGFydHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9NaW1lUGFydHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2NlM2YxYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvTWltZVBhcnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLS8qKgotICogTWltZSBwYXJ0cyBpbnRlcmZhY2UuCi0gKgotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgRGF2aWQgTGF1em9uIChsYXV6b25kQGNhLmlibS5jb20pCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgTWltZVBhcnRzCi17Ci0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBzdGFydCBhdHRyaWJ1dGUgdmFsdWUgZnJvbSB0aGUgLgotICAgKiBAcmV0dXJuIHRoZSBoZSBzdGFydCBhdHRyaWJ1dGUgdmFsdWUuCi0gICAqIEBzZWUgI3NldFJvb3RQYXJ0Ci0gICAqLwotICAvKioKLSAgICogUmV0dXJucyB0aGUgcm9vdCBwYXJ0LCBvdGhlcndpc2UgbnVsbC4KLSAgICogQHJldHVybiB0aGUgcm9vdCBwYXJ0LgotICAgKiBAc2VlICNzZXRSb290UGFydAotICAgKi8KLSAgcHVibGljIE1pbWVQYXJ0IGdldFJvb3RQYXJ0KCk7Ci0KLSAgLyoqCi0gICAqIFNldHMgdGhlIHJvb3QgcGFydC4KLSAgICogQHBhcmFtIHJvb3RQYXJ0IHRoZSByb290IHBhcnQuCi0gICAqIEBzZWUgI2dldFJvb3RQYXJ0Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSb290UGFydChNaW1lUGFydCByb290UGFydCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBwYXJ0cy4KLSAgICogQHJldHVybiB0aGUgbnVtYmVyIG9mIHBhcnRzLgotICAgKi8KLSAgcHVibGljIGludCBjb3VudCgpOwotCi0gIC8qKgotICAgKiBHZXRzIHRoZSBjb252ZXJzYXRpb24gaWQuCi0gICAqIEByZXR1cm4gdGhlIGNvbnZlcnNhdGlvbiBpZC4KLSAgICogQHNlZSAjc2V0Q29udmVyc2F0aW9uSWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZFBhcnQoTWltZVBhcnQgcGFydCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBsaXN0IG9mIG1pbWUgcGFydHMuCi0gICAqIEByZXR1cm4gYSBsaXN0IG9mIG1pbWUgcGFydHMuCi0gICAqLwotICBwdWJsaWMgQ29sbGVjdGlvbiBnZXRQYXJ0cygpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbG9nL1JlcXVlc3RIYW5kbGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvUmVxdWVzdEhhbmRsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGE5MmRmNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvUmVxdWVzdEhhbmRsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nOwotCi1pbXBvcnQgamF2YS51dGlsLkRhdGU7Ci0KLS8qKgotICogUmVwcmVzZW50cyBhIFRDUC9JUCByZXF1ZXN0IG1hZGUgYmV0d2VlbiB0aGUgY2xpZW50IGFuZCB0aGUgc2VydmVyLgotICogRWFjaCByZXF1ZXN0IHJlcHJlc2VudHMgYSByZXF1ZXN0LXJlc3BvbnNlIHBhaXIsIHdoZXJlIHRoZSByZXF1ZXN0Ci0gKiBpcyBmcm9tIGNsaWVudCAtPiBzZXJ2ZXIsIGFuZCB0aGUgcmVzcG9uc2UgaXMgZnJvbSBzZXJ2ZXIgLT4gY2xpZW50LgotICogCi0gKiBAYXV0aG9yIGxhdXpvbmQKLSAqLwotCi1wdWJsaWMgaW50ZXJmYWNlIFJlcXVlc3RIYW5kbGVyIAotewotCS8qKgotCSAqIFJldHVybnMganVzdCB0aGUgSFRUUCBoZWFkZXIgb2YgdGhlIHJlcXVlc3QgcG9ydGlvbiBvZiB0aGlzIHJlcXVlc3QuCi0JICogQHJldHVybiB0aGUgY29udGVudCBieXRlcwotCSAqLwotCWJ5dGVbXSBnZXRSZXF1ZXN0SGVhZGVyKCk7Ci0KLQkvKioKLQkgKiBBZGQgdGhlIEhUVFAgaGVhZGVyIG9mIHRoZSByZXF1ZXN0IHBvcnRpb24gb2YgdGhpcyByZXF1ZXN0LgotCSAqIEBwYXJhbSByZXF1ZXN0SGVhZGVyIGJ5dGVbXQotCSAqLwotCXZvaWQgc2V0UmVxdWVzdEhlYWRlcihieXRlW10gcmVxdWVzdEhlYWRlcik7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGp1c3QgdGhlIEhUVFAgaGVhZGVyIG9mIHRoZSByZXNwb25zZSBwb3J0aW9uIG9mIHRoaXMgcmVxdWVzdC4KLQkgKiBAcmV0dXJuIHRoZSBjb250ZW50IGJ5dGVzCi0JICovCi0JYnl0ZVtdIGdldFJlc3BvbnNlSGVhZGVyKCk7Ci0KLQkvKioKLQkgKiBBZGQgdGhlIEhUVFAgaGVhZGVyIG9mIHRoZSByZXNwb25zZSBwb3J0aW9uIG9mIHRoaXMgcmVxdWVzdC4KLQkgKiBAcGFyYW0gcmVzcG9uc2VIZWFkZXIgYnl0ZVtdCi0JICovCi0Jdm9pZCBzZXRSZXNwb25zZUhlYWRlcihieXRlW10gcmVzcG9uc2VIZWFkZXIpOwotCi0JLyoqCi0JICogUmV0dXJucyBqdXN0IHRoZSBIVFRQIGJvZHkgb2YgdGhlIHJlcXVlc3QgcG9ydGlvbiBvZiB0aGlzIHJlcXVlc3QuCi0JICogQHJldHVybiB0aGUgY29udGVudCBieXRlcwotCSAqLwotCWJ5dGVbXSBnZXRSZXF1ZXN0Q29udGVudCgpOwotCi0JLyoqCi0JICogQWRkIHRoZSBIVFRQIGJvZHkgb2YgdGhlIHJlcXVlc3QgcG9ydGlvbiBvZiB0aGlzIHJlcXVlc3QuCi0JICogQHBhcmFtIHJlcXVlc3RDb250ZW50IGJ5dGVbXQotCSAqLwotCXZvaWQgc2V0UmVxdWVzdENvbnRlbnQoYnl0ZVtdIHJlcXVlc3RDb250ZW50KTsKLQotCS8qKgotCSAqIFJldHVybnMganVzdCB0aGUgSFRUUCBib2R5IG9mIHRoZSByZXNwb25zZSBwb3J0aW9uIG9mIHRoaXMgcmVxdWVzdC4KLQkgKiBAcmV0dXJuIHRoZSBjb250ZW50IGJ5dGVzCi0JICovCi0JYnl0ZVtdIGdldFJlc3BvbnNlQ29udGVudCgpOwotCi0JLyoqCi0JICogQWRkIHRoZSBIVFRQIGJvZHkgb2YgdGhlIHJlc3BvbnNlIHBvcnRpb24gb2YgdGhpcyByZXF1ZXN0LgotCSAqIEBwYXJhbSByZXNwb25zZUNvbnRlbnQgYnl0ZVtdCi0JICovCi0Jdm9pZCBzZXRSZXNwb25zZUNvbnRlbnQoYnl0ZVtdIHJlc3BvbnNlQ29udGVudCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB0aW1lIHRoaXMgcmVxdWVzdCB3YXMgbWFkZS4KLQkgKiBAcmV0dXJuIHRoZSB0aW1lc3RhbXAKLQkgKi8KLQlEYXRlIGdldERhdGUoKTsKLQotCS8qKgotCSAqIEFkZCB0aGUgdGltZSB0aGlzIHJlcXVlc3Qgd2FzIG1hZGUuCi0JICogQHBhcmFtIGRhdGUgdGhlIHRpbWUKLQkgKi8KLSAgICB2b2lkIHNldERhdGUoRGF0ZSBkYXRlKTsKLQotICAgIC8qKgotCSAqIFJldHVybnMgdGhlIGxvY2FsIChjbGllbnQpIHBvcnQuCi0JICogQHJldHVybiB0aGUgbG9jYWwgcG9ydCBudW1iZXIKLQkgKi8KLQlpbnQgZ2V0TG9jYWxQb3J0KCk7Ci0KLQkvKioKLQkgKiBBZGQgdGhlIGxvY2FsIChjbGllbnQpIHBvcnQuCi0JICogQHBhcmFtIGxvY2FsUG9ydCB0aGUgbG9jYWwgcG9ydAotCSAqLwotCXZvaWQgc2V0TG9jYWxQb3J0KGludCBsb2NhbFBvcnQpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcmVtb3RlIChzZXJ2ZXIpIHBvcnQuCi0JICogQHJldHVybiB0aGUgcmVtb3RlIHBvcnQgbnVtYmVyCi0JICovCi0JaW50IGdldFJlbW90ZVBvcnQoKTsKLQotCS8qKgotCSAqIEFkZCB0aGUgdGhlIHJlbW90ZSAoc2VydmVyKSBwb3J0LgotCSAqIEBwYXJhbSByZW1vdGVQb3J0IHRoZSByZW1vdGUgcG9ydAotCSAqLwotCXZvaWQgc2V0UmVtb3RlUG9ydChpbnQgcmVtb3RlUG9ydCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSByZW1vdGUgKHNlcnZlcikgaG9zdC4KLSAgICAgKiBAcmV0dXJuIHRoZSByZW1vdGUgaG9zdAotCSAqLwotCVN0cmluZyBnZXRSZW1vdGVIb3N0KCk7Ci0KLQkvKioKLQkgKiBBZGQgdGhlIHJlbW90ZSAoc2VydmVyKSBob3N0LgotCSAqIEBwYXJhbSByZW1vdGVIb3N0IHRoZSByZW1vdGUgaG9zdAotCSAqLwotCXZvaWQgc2V0UmVtb3RlSG9zdChTdHJpbmcgcmVtb3RlSG9zdCk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzZXJ2ZXIncyByZXNwb25zZSB0aW1lIGluIG1pbGxpc2Vjb25kcy4gCi0JICogQHJldHVybiB0aGUgc2VydmVyJ3MgcmVzcG9uc2UgdGltZQotCSAqLwotCWxvbmcgZ2V0UmVzcG9uc2VUaW1lKCk7Ci0KLQkvKioKLQkgKiBBZGQgdGhlIHRoZSBzZXJ2ZXIncyByZXNwb25zZSB0aW1lIGluIG1pbGxpc2Vjb25kcy4gCi0JICogQHBhcmFtIHJlc3BvbnNlVGltZSB0aGUgcmVzcG9uc2UgdGltZQotCSAqLwotCXZvaWQgc2V0UmVzcG9uc2VUaW1lKGxvbmcgcmVzcG9uc2VUaW1lKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9pbXBsL0xvZ0ltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9pbXBsL0xvZ0ltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDJkNzhhZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvaW1wbC9Mb2dJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5pbXBsOwotCi1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWVzc2FnZUVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlRlc3RVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5VdGlsczsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIG1lc3NhZ2UgbG9nIGZpbGUuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIExvZ0ltcGwgaW1wbGVtZW50cyBMb2cKLXsKLSAgLyoqCi0gICAqIExvZyBVUkkuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGxvZ1VSSSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFN0YXJ0IHRpbWUgc3RhbXAuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIHN0YXJ0VGltZXN0YW1wID0gbnVsbDsKLQotICAvKioKLSAgICogTG9nIGVudHJpZXMuCi0gICAqLwotICBwcm90ZWN0ZWQgVmVjdG9yIGxvZ0VudHJ5TGlzdCA9IG5ldyBWZWN0b3IoKTsKLQotICAvKioKLSAgICogTGFzdCBsb2cgZW50cnkuCi0gICAqLwotICBwcm90ZWN0ZWQgTWVzc2FnZUVudHJ5IGxhc3RMb2dFbnRyeSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIExvZyB0aXRsZS4KLSAgICovCi0gIC8vIEFERDogU2hvdWxkIHdlIHByb3ZpZGUgYSB3YXkgdG8gc2V0IHRoZSBsb2cgdGl0bGU/Ci0gIHByb3RlY3RlZCBTdHJpbmcgbG9nVGl0bGUgPSAiTWVzc2FnZSBMb2cgRmlsZSI7Ci0KLSAgLyoqCi0gICAqIFN0eWxlIHNoZWV0IHN0cmluZy4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgc3R5bGVTaGVldFN0cmluZyA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5Mb2cjYWRkTG9nRW50cnkoTG9nRW50cnkpCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRMb2dFbnRyeShNZXNzYWdlRW50cnkgbG9nRW50cnkpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIFNhdmUgbGFzdCBsb2cgZW50cnkKLSAgICBsYXN0TG9nRW50cnkgPSBsb2dFbnRyeTsKLQotICAgIC8vIEFkZCBsb2cgZW50cnkKLSAgICBsb2dFbnRyeUxpc3QuYWRkKGxvZ0VudHJ5KTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTG9nI2dldEVudHJ5Q291bnQoKQotICAgKi8KLSAgcHVibGljIGludCBnZXRFbnRyeUNvdW50KCkKLSAgewotICAgIHJldHVybiBsb2dFbnRyeUxpc3Quc2l6ZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5Mb2cjZ2V0TG9nRW50cnkoaW50KQotICAgKi8KLSAgcHVibGljIE1lc3NhZ2VFbnRyeSBnZXRMb2dFbnRyeShpbnQgaW5kZXgpCi0gIHsKLSAgICByZXR1cm4gKE1lc3NhZ2VFbnRyeSkgbG9nRW50cnlMaXN0LmVsZW1lbnRBdChpbmRleCk7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLkxvZyNnZXRMb2dFbnRyeUxpc3QoKQotICAgKi8KLSAgcHVibGljIFZlY3RvciBnZXRMb2dFbnRyeUxpc3QoKQotICB7Ci0gICAgcmV0dXJuIGxvZ0VudHJ5TGlzdDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgbGFzdCBsb2cgZW50cnkuCi0gICAqLwotICBwdWJsaWMgTWVzc2FnZUVudHJ5IGdldExhc3RMb2dFbnRyeSgpCi0gIHsKLSAgICByZXR1cm4gbGFzdExvZ0VudHJ5OwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBsb2cgZW50cnkgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIE1lc3NhZ2VFbnRyeSBjcmVhdGVMb2dFbnRyeSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IE1lc3NhZ2VFbnRyeUltcGwoKTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5XU0lEb2N1bWVudCNnZXRMb2NhdGlvbigpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldExvY2F0aW9uKCkKLSAgewotICAgIHJldHVybiB0aGlzLmxvZ1VSSTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5XU0lEb2N1bWVudCNzZXRMb2NhdGlvbihTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRMb2NhdGlvbihTdHJpbmcgZG9jdW1lbnRVUkkpCi0gIHsKLSAgICB0aGlzLmxvZ1VSSSA9IGRvY3VtZW50VVJJOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldCBzdHlsZSBzaGVldCBzdHJpbmcuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTdHlsZVNoZWV0U3RyaW5nKFN0cmluZyBzdHlsZVNoZWV0U3RyaW5nKQotICB7Ci0gICAgdGhpcy5zdHlsZVNoZWV0U3RyaW5nID0gc3R5bGVTaGVldFN0cmluZzsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgc3RhcnQgZWxlbWVudCBzdHJpbmcuIAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTdGFydFhNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSkKLSAgewotICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICBQcmludFdyaXRlciBwdyA9IG5ldyBQcmludFdyaXRlcihzdyk7Ci0KLSAgICBTdHJpbmcgbnNOYW1lID0gbmFtZXNwYWNlTmFtZTsKLSAgICBpZiAoKCFuc05hbWUuZXF1YWxzKCIiKSAmJiAoIW5zTmFtZS5lbmRzV2l0aCgiOiIpKSkpCi0gICAgICBuc05hbWUgKz0gIjoiOwotCi0gICAgLy8gQ3JlYXRlIHJlcG9ydCBlbGVtZW50IAotICAgIHB3LnByaW50bG4oV1NJQ29uc3RhbnRzLlhNTF9ERUNMKTsKLSAgICBpZiAodGhpcy5zdHlsZVNoZWV0U3RyaW5nICE9IG51bGwpCi0gICAgICBwdy5wcmludGxuKHRoaXMuc3R5bGVTaGVldFN0cmluZyk7Ci0KLSAgICAvLyBBZGQgWE1MIGNvbW1lbnQKLSAgICBTdHJpbmcgY29tbWVudDsKLSAgICBpZiAoKGNvbW1lbnQgPSBUZXN0VXRpbHMuZ2V0WE1MQ29tbWVudCgpKSAhPSBudWxsKQotICAgICAgcHcucHJpbnQoY29tbWVudCk7Ci0KLSAgICAvLyBMb2cKLSAgICBwdy5wcmludCgiPCIgKyBuc05hbWUgKyBFTEVNX05BTUUpOwotCi0gICAgLy8gUkVNT1ZFRDogTm8gbG9uZ2VyIHJlcXVpcmVkIGJ5IHRoZSBtb25pdG9yIHNwZWMKLSAgICAvL3B3LnByaW50KCIgIiArIFdTSUNvbnN0YW50cy5BVFRSX05BTUUgKyAiPVwiIiArIGxvZ1RpdGxlICsgIlwiIik7Ci0gICAgcHcucHJpbnRsbigKLSAgICAgICIgIiArIFdTSUNvbnN0YW50cy5BVFRSX1RJTUVTVEFNUCArICI9XCIiICsgVXRpbHMuZ2V0VGltZXN0YW1wKCkgKyAiXCIiKTsKLSAgICBwdy5wcmludGxuKCIgICAgeG1sbnM9XCIiICsgV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0lfTE9HICsgIlwiIik7Ci0gICAgcHcucHJpbnRsbigKLSAgICAgICIgICAgeG1sbnM6IgotICAgICAgICArIFdTSUNvbnN0YW50cy5OU19OQU1FX1dTSV9NT05JVE9SX0NPTkZJRwotICAgICAgICArICI9XCIiCi0gICAgICAgICsgV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0lfTU9OSVRPUl9DT05GSUcKLSAgICAgICAgKyAiXCIiKTsKLSAgICAvL3B3LnByaW50bG4oIiAgICB4bWxuczoiICsgV1NJQ29uc3RhbnRzLk5TX05BTUVfV1NJX0NPTU1PTiArICI9XCIiICsgCi0gICAgLy8gICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9DT01NT04gKyAiXCIiKTsKLSAgICBwdy5wcmludGxuKAotICAgICAgIiAgICB4bWxuczoiCi0gICAgICAgICsgV1NJQ29uc3RhbnRzLk5TX05BTUVfWFNJCi0gICAgICAgICsgIj1cIiIKLSAgICAgICAgKyBXU0lDb25zdGFudHMuTlNfVVJJX1hTSQotICAgICAgICArICJcIj4iKTsKLQotICAgIC8vIEFkZCAgbW9uaXRvciB0b29sIGluZm8KLSAgICAvL3B3LnByaW50bG4obW9uaXRvci50b1hNTFN0cmluZyhuc05hbWUpKTsKLQotICAgIC8vIFJldHVybiBYTUwgc3RyaW5nCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGVuZCBlbGVtZW50IHN0cmluZy4gCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEVuZFhNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSkKLSAgewotICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICBQcmludFdyaXRlciBwdyA9IG5ldyBQcmludFdyaXRlcihzdyk7Ci0KLSAgICBTdHJpbmcgbnNOYW1lID0gbmFtZXNwYWNlTmFtZTsKLSAgICBpZiAoKCFuc05hbWUuZXF1YWxzKCIiKSAmJiAoIW5zTmFtZS5lbmRzV2l0aCgiOiIpKSkpCi0gICAgICBuc05hbWUgKz0gIjoiOwotCi0gICAgLy8gRW5kIGxvZyBlbGVtZW50IAotICAgIHB3LnByaW50bG4oIjwvIiArIG5zTmFtZSArIEVMRU1fTkFNRSArICI+Iik7Ci0KLSAgICAvLyBSZXR1cm4gWE1MIHN0cmluZwotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50RWxlbWVudCN0b1hNTFN0cmluZyhTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvWE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKQotICB7Ci0gICAgLy8gQUREOgotICAgIHJldHVybiBudWxsOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9pbXBsL0xvZ1JlYWRlckltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9pbXBsL0xvZ1JlYWRlckltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjdhYTc2My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvaW1wbC9Mb2dSZWFkZXJJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5pbXBsOwotCi1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLlRvb2xFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuVG9vbEluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTG9nUmVhZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWVzc2FnZUVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWVzc2FnZUVudHJ5SGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1pbWVQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWltZVBhcnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yLmNvbmZpZy5Db21tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yLmNvbmZpZy5pbXBsLkNvbW1lbnRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLk1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5BcnRpZmFjdFJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuaW1wbC5BcnRpZmFjdFJlZmVyZW5jZUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5pbXBsLkVudHJ5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5FbnRyeVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLmRvbS5FbGVtZW50TG9jYXRpb247Ci1pbXBvcnQgb3JnLnhtbC5zYXguQXR0cmlidXRlczsKLWltcG9ydCBvcmcueG1sLnNheC5JbnB1dFNvdXJjZTsKLWltcG9ydCBvcmcueG1sLnNheC5Mb2NhdG9yOwotaW1wb3J0IG9yZy54bWwuc2F4LlhNTFJlYWRlcjsKLWltcG9ydCBvcmcueG1sLnNheC5oZWxwZXJzLkRlZmF1bHRIYW5kbGVyOwotCi0vKioKLSAqIERlZmluZXMgdGhlIGltcGxlbWVudGF0aW9uIHVzZWQgdG8gcmVhZCB0aGUgTG9nIGZpbGUuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIE5laWwgRGVsaW1hIChuZGRlbGltYUBjYS5pYm0uY29tKQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKiBAYXV0aG9yIEdyYWhhbSBUdXJyZWxsIChndHVycmVsbEB1ay5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgTG9nUmVhZGVySW1wbCBpbXBsZW1lbnRzIExvZ1JlYWRlcgotewotICAvKioKLSAgICogRG9jdW1lbnQgbG9jYXRpb24uCi0gICAqLwotICBwcml2YXRlIFN0cmluZyBkb2N1bWVudFVSSTsKLQotICAvKiogVXNlZCB0byBlbnN1cmUgdGhhdCB0aGUgaW1wbGVtZW50ZXIgaXMgdGhlIGZpcnN0IGVsZW1lbnQgYWZ0ZXIgdGhlIGxvZyBlbGVtZW50ICoqLwotICBwcml2YXRlIGludCBmaXJzdExvZ0VsZW1lbnQgPSAwOwotICBwcml2YXRlIGludCBlbGVtZW50Q291bnQgPSAwOwotICBwcml2YXRlIGJvb2xlYW4gYk1vbml0b3JGaXJzdCA9IGZhbHNlOwotCi0gIHByaXZhdGUgV1NJRXhjZXB0aW9uIHdzaUV4Y2VwdGlvbiA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5Mb2dSZWFkZXIjcmVhZExvZyhTdHJpbmcsIExvZ0VudHJ5SGFuZGxlcikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlYWRMb2coU3RyaW5nIGxvZ1VSSSwgTWVzc2FnZUVudHJ5SGFuZGxlciBsb2dSZWFkZXJDYWxsYmFjaykKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBSZWFkIHRoZSBsb2cgZmlsZSBlbnRyaWVzCi0gICAgcmVhZExvZyhuZXcgSW5wdXRTb3VyY2UobG9nVVJJKSwgbG9nUmVhZGVyQ2FsbGJhY2spOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5Mb2dSZWFkZXIjcmVhZExvZyhSZWFkZXIsIExvZ0VudHJ5SGFuZGxlcikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlYWRMb2coUmVhZGVyIHJlYWRlciwgTWVzc2FnZUVudHJ5SGFuZGxlciBsb2dSZWFkZXJDYWxsYmFjaykKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBSZWFkIHRoZSBsb2cgZmlsZSBlbnRyaWVzCi0gICAgcmVhZExvZyhuZXcgSW5wdXRTb3VyY2UocmVhZGVyKSwgbG9nUmVhZGVyQ2FsbGJhY2spOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlYWQgYW5kIHBhcnNlIHRoZSBsb2cgZmlsZS4KLSAgICogQHBhcmFtIGlucHV0U291cmNlICAgICAgICAgIGFuIElucHV0U291cmNlIG9iamVjdAotICAgKiBAcGFyYW0gbWVzc2FnZUVudHJ5SGFuZGxlciAgYSBNZXNzYWdlRW50cnlIYW5kbGVyIG9iamVjdAotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBhIHByb2JsZW0gb2NjdXJzIHdoaWxlIHJlYWRpbmcgdGhlIGxvZyBmaWxlLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgcmVhZExvZygKLSAgICBJbnB1dFNvdXJjZSBpbnB1dFNvdXJjZSwKLSAgICBNZXNzYWdlRW50cnlIYW5kbGVyIG1lc3NhZ2VFbnRyeUhhbmRsZXIpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gR2V0IHRoZSBYTUwgcmVhZGVyCi0gICAgICBYTUxSZWFkZXIgeG1sUmVhZGVyID0gWE1MVXRpbHMuZ2V0WE1MUmVhZGVyKCk7Ci0KLSAgICAgIC8qKiBUTyBETzogIFRoZSBMb2dGaWxlIG11c3QgYmUgdmFsaWQgd3J0IGl0cyBzY2hlbWEuICBUaGUgc2NoZW1hTG9jYXRpb24gcHJvYmFibHkKLSAgICAgICAqIG5lZWRzIHRvIGJlIHNldCBpbiBzb21lIHByb3BlcnRpZXMgZmlsZS4KLSAgICAgICAqIFRoZXNlIHR3byBhcmUgdG8gdHVybiBvbiB2YWxpZGF0aW9uIAotICAgICAgcmVhZGVyLnNldEZlYXR1cmUoRkVBVFVSRV9WQUxJREFUSU9OLHRydWUpOwotICAgICAgKi8KLQotICAgICAgLy8gU2V0IHRoZSBjb250ZW50IGhhbmRsZXIKLSAgICAgIHhtbFJlYWRlci5zZXRDb250ZW50SGFuZGxlcihuZXcgTG9nRmlsZUhhbmRsZXIobWVzc2FnZUVudHJ5SGFuZGxlcikpOwotCi0gICAgICAvLyBTdGFydCBwYXJzaW5nIHRoZSBmaWxlCi0gICAgICB4bWxSZWFkZXIucGFyc2UoaW5wdXRTb3VyY2UpOwotCi0gICAgICAvLyBBREQ6IE5lZWQgdG8gZmluZCBhIHdheSB0byBkZXRlcm1pbmUgd2hlbiB0aGlzIGV4Y2VwdGlvbiBzaG91bGQgYmUgdGhyb3duLCAKLSAgICAgIC8vIHNpbmNlIGJ5IHRoZSB0aW1lIHdlIGdldCBoZXJlIGFsbCBvZiB0aGUgdGVzdCBhc3NlcnRpb25zIGhhdmUgYmVlbiBwcm9jZXNzZWQuCi0gICAgICAvLyBBbHNvLCBvbmx5IHRoZSBsYXN0IGV4Y2VwdGlvbiBpcyBwcm9wb2dhdGVkIGJhY2suICBTaG91bGQgYWxsIG9mIHRoZSBleGNlcHRpb25zCi0gICAgICAvLyBiZSBjYXB0dXJlZCBhbmQgcHJvcG9nYXRlZCBiYWNrPwotICAgICAgaWYgKHdzaUV4Y2VwdGlvbiAhPSBudWxsKQotICAgICAgewotICAgICAgICAvLyBURU1QOiBGb3Igbm93LCBkb24ndCB0aHJvdyB0aGUgZXhjZXB0aW9uCi0gICAgICAgIC8vdGhyb3cgd3NpRXhjZXB0aW9uOwotICAgICAgfQotCi0gICAgICAvL1JlcXVpcmVtZW50LCB0aGUgbW9uaXRvciBNVVNUIGJlIHRoZSBmaXJzdCBjaGlsZCBvZiB0aGUgbG9nLgotICAgICAgLy9QZXJoYXBzIHdlIG5lZWQgdG8gcHJlcHJvY2VzcyB0aGUgbG9nIGlmIHRoaXMgaXMgdGhlIGZpcnN0IGNvbmRpdGlvbiB0byBiZSBtZXQuCi0gICAgICBpZiAoIWJNb25pdG9yRmlyc3QpCi0gICAgICAgIHRocm93IG5ldyBXU0lFeGNlcHRpb24oCi0gICAgICAgICAgIlRoZSBFbGVtZW50IFwiIgotICAgICAgICAgICAgKyBXU0lDb25zdGFudHMuRUxFTV9NT05JVE9SCi0gICAgICAgICAgICArICJcIiBpcyBub3QgdGhlIGZpcnN0IGNoaWxkIG9mIHRoZSBFbGVtZW50IFwibG9nXCIiKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBXU0lFeGNlcHRpb24oCi0gICAgICAgICJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBwcm9jZXNzaW5nIHRoZSBtZXNzYWdlIGxvZyBmaWxlLiIsCi0gICAgICAgIGUpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudFJlYWRlciNnZXRMb2NhdGlvbigpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldExvY2F0aW9uKCkKLSAgewotICAgIHJldHVybiB0aGlzLmRvY3VtZW50VVJJOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50UmVhZGVyI3NldExvY2F0aW9uKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExvY2F0aW9uKFN0cmluZyBkb2N1bWVudFVSSSkKLSAgewotICAgIHRoaXMuZG9jdW1lbnRVUkkgPSBkb2N1bWVudFVSSTsKLSAgfQotCi0gIC8qKgotICAqIFByb2Nlc3MgYW5kIGhhbmRsZXMgZWxlbWVudHMgYW5kIGF0dHJpYnV0ZSBpbiB0aGUgbG9nIGZpbGUgYW5kIGludm9rZXMKLSAgKiBtZXNzYWdlIHZhbGlkYXRpb24gYXNzZXJ0aW9ucyBzZXJpYWxseSBhcyB0aGUgZmlsZSBpcyBiZWluZyBwcm9jZXNzZWQsCi0gICogaWYgYSBtZXNzYWdldmFsaWRhdG9yIGV4aXN0cy4KLSAgKi8KLSAgcHJpdmF0ZSBjbGFzcyBMb2dGaWxlSGFuZGxlciBleHRlbmRzIERlZmF1bHRIYW5kbGVyCi0gIHsKLQotICAgIC8qKiBwcml2YXRlIG1lbWJlcnMgdGhhdCByZXByZXNlbnQgYSBNZXNzYWdlRW50cnkuKi8KLSAgICBwcml2YXRlIFN0cmluZyBpZDsKLSAgICBwcml2YXRlIFN0cmluZyBjb252ZXJzYXRpb25JRDsKLSAgICBwcml2YXRlIFN0cmluZyB0eXBlOwotICAgIHByaXZhdGUgU3RyaW5nIHRpbWVzdGFtcDsKLSAgICBwcml2YXRlIFN0cmluZ0J1ZmZlciBzZW5kZXJIb3N0QW5kUG9ydCA9IG51bGw7Ci0gICAgcHJpdmF0ZSBTdHJpbmdCdWZmZXIgcmVjZWl2ZXJIb3N0QW5kUG9ydCAgPSBudWxsOwotICAgIHByaXZhdGUgU3RyaW5nQnVmZmVyIG1lc3NhZ2VDb250ZW50ICA9IG51bGw7Ci0gICAgcHJpdmF0ZSBTdHJpbmdCdWZmZXIgaHR0cEhlYWRlcnMgID0gbnVsbDsKLSAgICBwcml2YXRlIFN0cmluZ0J1ZmZlciBib3VuZGFyeSAgPSBudWxsOwotICAgIHByaXZhdGUgU3RyaW5nQnVmZmVyIG1pbWVIZWFkZXJzID0gbnVsbDsKLSAgICBwcml2YXRlIFN0cmluZ0J1ZmZlciBtaW1lQ29udGVudCA9IG51bGw7Ci0gICAgcHJpdmF0ZSBNaW1lUGFydHMgbWltZVBhcnRzID0gbnVsbDsKLSAgICBwcml2YXRlIExpc3QgYm91bmRhcmllcyA9IG51bGw7Ci0KLSAgICBwcml2YXRlIGludCBib20gPSAwOwotCi0gICAgcHJpdmF0ZSBTdHJpbmcgbG9nVGltZXN0YW1wID0gbnVsbDsKLSAgICBwcml2YXRlIFN0cmluZ0J1ZmZlciBtb25pdG9yQ29tbWVudDsKLSAgICBwcml2YXRlIGJvb2xlYW4gaWdub3JlQ29tbWVudCA9IGZhbHNlOwotCi0gICAgLyoqIE90aGVyIHByaXZhdGUgbWVtYmVycyAqLwotICAgIHByaXZhdGUgU3RyaW5nIGN1cnJlbnRFbGVtZW50OwotCi0gICAgcHJpdmF0ZSBFbGVtZW50TG9jYXRpb24gZW50cnlFbGVtZW50TG9jYXRpb24gPSBudWxsOwotCi0gICAgcHJpdmF0ZSBUb29sSW5mbyB0b29sSW5mbyA9IG51bGw7Ci0KLSAgICBwcml2YXRlIFZlY3RvciBtZXNzYWdlRW50cnlMaXN0ID0gbmV3IFZlY3RvcigpOwotCi0gICAgcHJpdmF0ZSBNZXNzYWdlRW50cnlIYW5kbGVyIGxvZ0VudHJ5SGFuZGxlciA9IG51bGw7Ci0KLSAgICBwcml2YXRlIExvY2F0b3IgbG9jYXRvciA9IG51bGw7Ci0KLSAgICAvKioKLSAgICAgKiBMb2cgZmlsZSBoYW5kbGVyLiAKLSAgICAgKi8KLSAgICBwdWJsaWMgTG9nRmlsZUhhbmRsZXIoTWVzc2FnZUVudHJ5SGFuZGxlciBsb2dFbnRyeUhhbmRsZXIpCi0gICAgewotICAgICAgdGhpcy5sb2dFbnRyeUhhbmRsZXIgPSBsb2dFbnRyeUhhbmRsZXI7Ci0KLSAgICAgIHRvb2xJbmZvID0gbmV3IFRvb2xJbmZvKCk7Ci0gICAgICB0b29sSW5mby5zZXRUb29sRW52aXJvbm1lbnQobmV3IFRvb2xFbnZpcm9ubWVudCgpKTsKLSAgICB9Ci0KLSAgICAvKiogCi0gICAgICogU3RhcnQgZG9jdW1lbnQuIAotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHN0YXJ0RG9jdW1lbnQoKQotICAgIHsKLSAgICB9Ci0KLSAgICAvKiogCi0gICAgICogU2V0IGRvY3VtZW50IGxvY2F0by4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXREb2N1bWVudExvY2F0b3IoTG9jYXRvciBsb2NhdG9yKQotICAgIHsKLSAgICAgIHRoaXMubG9jYXRvciA9IGxvY2F0b3I7Ci0KLSAgICAgIC8vIERFQlVHOgotICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oImxpbmU6ICIgKyBsb2NhdG9yLmdldExpbmVOdW1iZXIoKSArICIsIGNvbHVtbjogIiArIGxvY2F0b3IuZ2V0Q29sdW1uTnVtYmVyKCkpOwotICAgIH0KLQotICAgIC8qKiAKLSAgICAgKiBTdGFydCBlbGVtZW50LiAKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzdGFydEVsZW1lbnQoCi0gICAgICBTdHJpbmcgbmFtZXNwYWNlVVJJLAotICAgICAgU3RyaW5nIGxvY2FsTmFtZSwKLSAgICAgIFN0cmluZyBxTmFtZSwKLSAgICAgIEF0dHJpYnV0ZXMgYXR0cmlidXRlcykKLSAgICB7Ci0gICAgICAvLyBERUJVRzoKLSAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJsb2NhbE5hbWU6IiArIGxvY2FsTmFtZSArICIsIGxpbmU6ICIgKyBsb2NhdG9yLmdldExpbmVOdW1iZXIoKSArICIsIGNvbHVtbjogIiArIGxvY2F0b3IuZ2V0Q29sdW1uTnVtYmVyKCkpOwotCi0gICAgICAvL1JlcXVpcmVtZW50LCB0aGUgaW1wbGVtZW50ZXIgTVVTVCBiZSB0aGUgZmlyc3QgY2hpbGQgb2YgdGhlIGxvZyAgICAgICAKLSAgICAgIGlmIChlbGVtZW50Q291bnQgPT0gMikKLSAgICAgICAgaWYgKGZpcnN0TG9nRWxlbWVudCA9PSAxKQotICAgICAgICAgIGJNb25pdG9yRmlyc3QgPSB0cnVlOwotCi0gICAgICBlbGVtZW50Q291bnQrKzsKLQotICAgICAgLy8gPGxvZz4KLSAgICAgIGlmIChsb2NhbE5hbWUgPT0gV1NJQ29uc3RhbnRzLkVMRU1fTE9HKQotICAgICAgewotICAgICAgICAvLyBTYXZlIHRoZSB0aW1lc3RhbXAgdmFsdWUKLSAgICAgICAgdGhpcy5sb2dUaW1lc3RhbXAgPSBhdHRyaWJ1dGVzLmdldFZhbHVlKFdTSUNvbnN0YW50cy5BVFRSX1RJTUVTVEFNUCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDx3c2ktY29uZmlnOmNvbmZpZ3VyYXRpb24+Ci0gICAgICBlbHNlIGlmICgKLSAgICAgICAgKGxvY2FsTmFtZSA9PSBXU0lDb25zdGFudHMuRUxFTV9DT05GSUcpCi0gICAgICAgICAgJiYgKG5hbWVzcGFjZVVSSSA9PSBXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9NT05JVE9SX0NPTkZJRykpCi0gICAgICB7Ci0gICAgICAgIC8vIFNhdmUgY29tbWVudCBlbGVtZW50IGlmIGl0IGV4aXN0cwotICAgICAgICBpZ25vcmVDb21tZW50ID0gZmFsc2U7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDx3c2ktY29uZmlnOmNvbW1lbnQ+Ci0gICAgICBlbHNlIGlmICgKLSAgICAgICAgKGxvY2FsTmFtZSA9PSBXU0lDb25zdGFudHMuRUxFTV9DT01NRU5UKQotICAgICAgICAgICYmIChuYW1lc3BhY2VVUkkgPT0gV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0lfTU9OSVRPUl9DT05GSUcpKQotICAgICAgewotICAgICAgICAvLyBJZiB0aGlzIGlzIHRoZSBjb21tZW50IGVsZW1lbnQgd2l0aGluIHRoZSBjb25maWd1cmF0aW9uIGVsZW1lbnQsIHRoZW4gZ2V0IGl0cyBjb250ZW50Ci0gICAgICAgIGlmICghaWdub3JlQ29tbWVudCkKLSAgICAgICAgewotICAgICAgICAgIGN1cnJlbnRFbGVtZW50ID0gV1NJQ29uc3RhbnRzLkVMRU1fQ09NTUVOVDsKLSAgICAgICAgICBtb25pdG9yQ29tbWVudCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICAvLyA8d3NpLWNvbmZpZzpyZWRpcmVjdD4KLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAobG9jYWxOYW1lID09IFdTSUNvbnN0YW50cy5FTEVNX1JFRElSRUNUKQotICAgICAgICAgICYmIChuYW1lc3BhY2VVUkkgPT0gV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0lfTU9OSVRPUl9DT05GSUcpKQotICAgICAgewotICAgICAgICAvLyBBZnRlciBoaXR0aW5nIHRoZSBmaXJzdCByZWRpcmVjdCBzdGF0ZW1lbnQsIGlnbm9yZSBhbGwgY29tbWVudCBlbGVtZW50cwotICAgICAgICBpZ25vcmVDb21tZW50ID0gdHJ1ZTsKLSAgICAgICAgbW9uaXRvckNvbW1lbnQgPSBudWxsOwotICAgICAgfQotCi0gICAgICAvLyA8bW9uaXRvcj4KLSAgICAgIGVsc2UgaWYgKGxvY2FsTmFtZSA9PSBXU0lDb25zdGFudHMuRUxFTV9NT05JVE9SKQotICAgICAgewotICAgICAgICBmaXJzdExvZ0VsZW1lbnQrKzsKLSAgICAgICAgdG9vbEluZm8uc2V0TmFtZShXU0lDb25zdGFudHMuRUxFTV9NT05JVE9SKTsKLQotICAgICAgICAvLyBHZXQgdGhlIG1vbml0b3IgdmVyc2lvbiBhbmQgcmVsZWFzZSBkYXRlCi0gICAgICAgIHRvb2xJbmZvLnNldFZlcnNpb24oYXR0cmlidXRlcy5nZXRWYWx1ZShXU0lDb25zdGFudHMuQVRUUl9WRVJTSU9OKSk7Ci0gICAgICAgIHRvb2xJbmZvLnNldFJlbGVhc2VEYXRlKAotICAgICAgICAgIGF0dHJpYnV0ZXMuZ2V0VmFsdWUoV1NJQ29uc3RhbnRzLkFUVFJfUkVMRUFTRV9EQVRFKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxpbXBsZW1lbnRlcj4KLSAgICAgIGVsc2UgaWYgKGxvY2FsTmFtZSA9PSBXU0lDb25zdGFudHMuRUxFTV9JTVBMRU1FTlRFUikKLSAgICAgIHsKLSAgICAgICAgY3VycmVudEVsZW1lbnQgPSBXU0lDb25zdGFudHMuRUxFTV9JTVBMRU1FTlRFUjsKLSAgICAgICAgdG9vbEluZm8uc2V0SW1wbGVtZW50ZXIoYXR0cmlidXRlcy5nZXRWYWx1ZShXU0lDb25zdGFudHMuQVRUUl9OQU1FKSk7Ci0gICAgICAgIHRvb2xJbmZvLnNldExvY2F0aW9uKGF0dHJpYnV0ZXMuZ2V0VmFsdWUoV1NJQ29uc3RhbnRzLkFUVFJfTE9DQVRJT04pKTsKLSAgICAgIH0KLQotICAgICAgLy8gPHJ1bnRpbWU+Ci0gICAgICBlbHNlIGlmIChsb2NhbE5hbWUgPT0gV1NJQ29uc3RhbnRzLkVMRU1fUlVOVElNRSkKLSAgICAgIHsKLSAgICAgICAgY3VycmVudEVsZW1lbnQgPSBXU0lDb25zdGFudHMuRUxFTV9SVU5USU1FOwotICAgICAgICB0b29sSW5mby5nZXRUb29sRW52aXJvbm1lbnQoKS5zZXRSdW50aW1lTmFtZSgKLSAgICAgICAgICBhdHRyaWJ1dGVzLmdldFZhbHVlKFdTSUNvbnN0YW50cy5BVFRSX05BTUUpKTsKLSAgICAgICAgdG9vbEluZm8uZ2V0VG9vbEVudmlyb25tZW50KCkuc2V0UnVudGltZVZlcnNpb24oCi0gICAgICAgICAgYXR0cmlidXRlcy5nZXRWYWx1ZShXU0lDb25zdGFudHMuQVRUUl9WRVJTSU9OKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxvcGVyYXRpbmdTeXN0ZW0+Ci0gICAgICBlbHNlIGlmIChsb2NhbE5hbWUgPT0gV1NJQ29uc3RhbnRzLkVMRU1fT1BFUkFUSU5HX1NZU1RFTSkKLSAgICAgIHsKLSAgICAgICAgY3VycmVudEVsZW1lbnQgPSBXU0lDb25zdGFudHMuRUxFTV9PUEVSQVRJTkdfU1lTVEVNOwotICAgICAgICB0b29sSW5mby5nZXRUb29sRW52aXJvbm1lbnQoKS5zZXRPU05hbWUoCi0gICAgICAgICAgYXR0cmlidXRlcy5nZXRWYWx1ZShXU0lDb25zdGFudHMuQVRUUl9OQU1FKSk7Ci0gICAgICAgIHRvb2xJbmZvLmdldFRvb2xFbnZpcm9ubWVudCgpLnNldE9TVmVyc2lvbigKLSAgICAgICAgICBhdHRyaWJ1dGVzLmdldFZhbHVlKFdTSUNvbnN0YW50cy5BVFRSX1ZFUlNJT04pKTsKLSAgICAgIH0KLQotICAgICAgLy8gPHhtbFBhcnNlcj4KLSAgICAgIGVsc2UgaWYgKGxvY2FsTmFtZSA9PSBXU0lDb25zdGFudHMuRUxFTV9YTUxfUEFSU0VSKQotICAgICAgewotICAgICAgICBjdXJyZW50RWxlbWVudCA9IFdTSUNvbnN0YW50cy5FTEVNX1hNTF9QQVJTRVI7Ci0gICAgICAgIHRvb2xJbmZvLmdldFRvb2xFbnZpcm9ubWVudCgpLnNldFhNTFBhcnNlck5hbWUoCi0gICAgICAgICAgYXR0cmlidXRlcy5nZXRWYWx1ZShXU0lDb25zdGFudHMuQVRUUl9OQU1FKSk7Ci0gICAgICAgIHRvb2xJbmZvLmdldFRvb2xFbnZpcm9ubWVudCgpLnNldFhNTFBhcnNlclZlcnNpb24oCi0gICAgICAgICAgYXR0cmlidXRlcy5nZXRWYWx1ZShXU0lDb25zdGFudHMuQVRUUl9WRVJTSU9OKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxtZXNzYWdlRW50cnk+Ci0gICAgICBlbHNlIGlmIChsb2NhbE5hbWUgPT0gV1NJQ29uc3RhbnRzLkVMRU1fTUVTU0FHRV9FTlRSWSkKLSAgICAgIHsKLSAgICAgICAgY3VycmVudEVsZW1lbnQgPSBXU0lDb25zdGFudHMuRUxFTV9NRVNTQUdFX0VOVFJZOwotICAgICAgICBlbnRyeUVsZW1lbnRMb2NhdGlvbiA9IG5ldyBFbGVtZW50TG9jYXRpb24odGhpcy5sb2NhdG9yKTsKLSAgICAgICAgdGltZXN0YW1wID0gYXR0cmlidXRlcy5nZXRWYWx1ZShXU0lDb25zdGFudHMuQVRUUl9USU1FU1RBTVApOwotICAgICAgICBjb252ZXJzYXRpb25JRCA9IGF0dHJpYnV0ZXMuZ2V0VmFsdWUoV1NJQ29uc3RhbnRzLkFUVFJfQ09OVkVSU0FUSU9OX0lEKTsKLSAgICAgICAgaWQgPSBhdHRyaWJ1dGVzLmdldFZhbHVlKFdTSUNvbnN0YW50cy5BVFRSX0lEX1VDKTsKLSAgICAgICAgdHlwZSA9IGF0dHJpYnV0ZXMuZ2V0VmFsdWUoV1NJQ29uc3RhbnRzLkFUVFJfVFlQRSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxodHRwSGVhZGVycz4KLSAgICAgIGVsc2UgaWYgKGxvY2FsTmFtZSA9PSBXU0lDb25zdGFudHMuRUxFTV9IVFRQX0hFQURFUlMpCi0gICAgICB7Ci0gICAgICAgIC8vTm90ZTogQ2hhcmFjdGVyIGRhdGEgY291bGQgYmUgc3BsaXQgdXAgYW5kIHJldHVybmVkIAotICAgICAgICAvL2luIG1vcmUgbW9yZSB0aGFuIG9uZSBjaGFyYWN0ZXJzIGNhbGwuIAotICAgICAgICBodHRwSGVhZGVycyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgY3VycmVudEVsZW1lbnQgPSBXU0lDb25zdGFudHMuRUxFTV9IVFRQX0hFQURFUlM7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxtZXNzYWdlQ29udGVudD4KLSAgICAgIGVsc2UgaWYgKGxvY2FsTmFtZSA9PSBXU0lDb25zdGFudHMuRUxFTV9NRVNTQUdFX0NPTlRFTlQpCi0gICAgICB7Ci0gICAgICAgIG1lc3NhZ2VDb250ZW50ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICBtaW1lUGFydHMgPSBudWxsOwotICAgICAgICBjdXJyZW50RWxlbWVudCA9IFdTSUNvbnN0YW50cy5FTEVNX01FU1NBR0VfQ09OVEVOVDsKLSAgICAgICAgU3RyaW5nIGJvbVN0cmluZyA9IGF0dHJpYnV0ZXMuZ2V0VmFsdWUoV1NJQ29uc3RhbnRzLkFUVFJfQk9NKTsKLSAgICAgICAgaWYgKGJvbVN0cmluZyAhPSBudWxsKQotICAgICAgICAgIGJvbSA9IEludGVnZXIudmFsdWVPZihib21TdHJpbmcpLmludFZhbHVlKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBib20gPSAwOwotICAgICAgfQotCi0gICAgICAvLyA8bWVzc2FnZUNvbnRlbnRXaXRoQXR0YWNobWVudHM+Ci0gICAgICBlbHNlIGlmIChsb2NhbE5hbWUgPT0gV1NJQ29uc3RhbnRzLkVMRU1fTUVTU0FHRV9DT05URU5UX1dJVEhfQVRUQUNITUVOVFMpCi0gICAgICB7Ci0gICAgICAgIG1lc3NhZ2VDb250ZW50ID0gbnVsbDsKLSAgICAgICAgbWltZVBhcnRzID0gbmV3IE1pbWVQYXJ0c0ltcGwoKTsKLQotICAgICAgICBTdHJpbmcgYm9tU3RyaW5nID0gYXR0cmlidXRlcy5nZXRWYWx1ZShXU0lDb25zdGFudHMuQVRUUl9CT00pOwotICAgICAgICBpZiAoYm9tU3RyaW5nICE9IG51bGwpCi0gICAgICAgICAgYm9tID0gSW50ZWdlci52YWx1ZU9mKGJvbVN0cmluZykuaW50VmFsdWUoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIGJvbSA9IDA7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxtaW1lUGFydD4KLSAgICAgIGVsc2UgaWYgKGxvY2FsTmFtZSA9PSBXU0lDb25zdGFudHMuRUxFTV9NSU1FX1BBUlQpCi0gICAgICB7Ci0gICAgICAgIGlmIChib3VuZGFyaWVzID09IG51bGwpCi0gICAgICAgICAgYm91bmRhcmllcyA9IG5ldyBBcnJheUxpc3QoMik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBib3VuZGFyaWVzLmNsZWFyKCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxib3VuZGFyeVN0cmluZz4KLSAgICAgIGVsc2UgaWYgKGxvY2FsTmFtZSA9PSBXU0lDb25zdGFudHMuRUxFTV9CT1VOREFSWV9TVFJJTkcpCi0gICAgICB7Ci0gICAgICAgIGJvdW5kYXJ5ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICBjdXJyZW50RWxlbWVudCA9IFdTSUNvbnN0YW50cy5FTEVNX0JPVU5EQVJZX1NUUklORzsKLSAgICAgIH0KLQotICAgICAgLy8gPG1pbWVIZWFkZXJzPgotICAgICAgZWxzZSBpZiAobG9jYWxOYW1lID09IFdTSUNvbnN0YW50cy5FTEVNX01JTUVfSEVBREVSUykKLSAgICAgIHsKLSAgICAgICAgbWltZUhlYWRlcnMgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIGN1cnJlbnRFbGVtZW50ID0gV1NJQ29uc3RhbnRzLkVMRU1fTUlNRV9IRUFERVJTOwotICAgICAgfQotCi0gICAgICAvLyA8bWltZUNvbnRlbnQ+Ci0gICAgICBlbHNlIGlmIChsb2NhbE5hbWUgPT0gV1NJQ29uc3RhbnRzLkVMRU1fTUlNRV9DT05URU5UKQotICAgICAgewotICAgICAgICBtaW1lQ29udGVudCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgY3VycmVudEVsZW1lbnQgPSBXU0lDb25zdGFudHMuRUxFTV9NSU1FX0NPTlRFTlQ7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxzZW5kZXJIb3N0QW5kUG9ydD4KLSAgICAgIGVsc2UgaWYgKGxvY2FsTmFtZSA9PSBXU0lDb25zdGFudHMuRUxFTV9TRU5ERVJfSE9TVF9BTkRfUE9SVCkKLSAgICAgIHsKLSAgICAgICAgc2VuZGVySG9zdEFuZFBvcnQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIGN1cnJlbnRFbGVtZW50ID0gV1NJQ29uc3RhbnRzLkVMRU1fU0VOREVSX0hPU1RfQU5EX1BPUlQ7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxyZWNlaXZlckhvc3RBbmRQb3J0PgotICAgICAgZWxzZSBpZiAobG9jYWxOYW1lID09IFdTSUNvbnN0YW50cy5FTEVNX1JFQ0VJVkVSX0hPU1RfQU5EX1BPUlQpCi0gICAgICB7Ci0gICAgICAgIHJlY2VpdmVySG9zdEFuZFBvcnQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIGN1cnJlbnRFbGVtZW50ID0gV1NJQ29uc3RhbnRzLkVMRU1fUkVDRUlWRVJfSE9TVF9BTkRfUE9SVDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiogCi0gICAgKiBDaGFyYWN0ZXJzIGNhbGxiYWNrLiAKLSAgICAqLwotICAgIHB1YmxpYyB2b2lkIGNoYXJhY3RlcnMoY2hhciBjaFtdLCBpbnQgc3RhcnQsIGludCBsZW5ndGgpCi0gICAgewotICAgICAgLy8gSWdub3JpbmcgQ1JMRiB0aGF0IGFwcGVhcnMgaW4gbG9nIGVsZW1lbnRzCi0gICAgICBpbnQgYWx0U3RhcnQgPSBzdGFydDsKLSAgICAgIGludCBhbHRMZW5ndGggPSBsZW5ndGg7Ci0gICAgICBpZiAoc3RhcnQgPiAwICYmIGNoW3N0YXJ0LTFdID09IDEzICYmIGNoW3N0YXJ0XSA9PSAxMCkKLSAgICAgIHsKLSAgICAgICAgYWx0U3RhcnQrKzsKLSAgICAgICAgYWx0TGVuZ3RoLS07Ci0gICAgICB9Ci0KLSAgICAgIC8vIDx3c2ktbW9uQ29uZmlnOmNvbW1lbnQ+Ci0gICAgICBpZiAobW9uaXRvckNvbW1lbnQgIT0gbnVsbCAmJiBjdXJyZW50RWxlbWVudCA9PSBXU0lDb25zdGFudHMuRUxFTV9DT01NRU5UKQotICAgICAgewotICAgICAgICBtb25pdG9yQ29tbWVudC5hcHBlbmQoY2gsIHN0YXJ0LCBsZW5ndGgpOwotICAgICAgfQotCi0gICAgICAvLyA8bWVzc2FnZUNvbnRlbnQ+Ci0gICAgICBlbHNlIGlmIChtZXNzYWdlQ29udGVudCAhPSBudWxsCi0gICAgICAgICYmIGN1cnJlbnRFbGVtZW50ID09IFdTSUNvbnN0YW50cy5FTEVNX01FU1NBR0VfQ09OVEVOVCkKLSAgICAgIHsKLSAgICAgICAgbWVzc2FnZUNvbnRlbnQuYXBwZW5kKGNoLCBzdGFydCwgbGVuZ3RoKTsKLSAgICAgIH0KLQotICAgICAgLy8gPGh0dHBIZWFkZXJzPgotICAgICAgZWxzZSBpZiAoaHR0cEhlYWRlcnMgIT0gbnVsbAotICAgICAgICAmJiBjdXJyZW50RWxlbWVudCA9PSBXU0lDb25zdGFudHMuRUxFTV9IVFRQX0hFQURFUlMpCi0gICAgICB7Ci0gICAgICAgIGh0dHBIZWFkZXJzLmFwcGVuZChjaCwgc3RhcnQsIGxlbmd0aCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxib3VuZGFyeVN0cmluZz4KLSAgICAgIGVsc2UgaWYgKGJvdW5kYXJ5ICE9IG51bGwKLSAgICAgICAgJiYgY3VycmVudEVsZW1lbnQgPT0gV1NJQ29uc3RhbnRzLkVMRU1fQk9VTkRBUllfU1RSSU5HKQotICAgICAgewotICAgICAgICBib3VuZGFyeS5hcHBlbmQoY2gsIGFsdFN0YXJ0LCBhbHRMZW5ndGgpOwotICAgICAgfQotCi0gICAgICAvLyA8bWltZUhlYWRlcnM+Ci0gICAgICBlbHNlIGlmIChtaW1lSGVhZGVycyAhPSBudWxsCi0gICAgICAgICYmIGN1cnJlbnRFbGVtZW50ID09IFdTSUNvbnN0YW50cy5FTEVNX01JTUVfSEVBREVSUykKLSAgICAgIHsKLSAgICAgICAgbWltZUhlYWRlcnMuYXBwZW5kKGNoLCBhbHRTdGFydCwgYWx0TGVuZ3RoKTsKLSAgICAgIH0KLQotICAgICAgLy8gPG1pbWVDb250ZW50PgotICAgICAgZWxzZSBpZiAobWltZUNvbnRlbnQgIT0gbnVsbAotICAgICAgICAmJiBjdXJyZW50RWxlbWVudCA9PSBXU0lDb25zdGFudHMuRUxFTV9NSU1FX0NPTlRFTlQpCi0gICAgICB7Ci0gICAgICAgIG1pbWVDb250ZW50LmFwcGVuZChjaCwgYWx0U3RhcnQsIGFsdExlbmd0aCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxzZW5kZXJIb3N0QW5kUG9ydD4KLSAgICAgIGVsc2UgaWYgKHNlbmRlckhvc3RBbmRQb3J0ICE9IG51bGwKLSAgICAgICAgJiYgY3VycmVudEVsZW1lbnQgPT0gV1NJQ29uc3RhbnRzLkVMRU1fU0VOREVSX0hPU1RfQU5EX1BPUlQpCi0gICAgICB7Ci0gICAgICAgIHNlbmRlckhvc3RBbmRQb3J0LmFwcGVuZChjaCwgc3RhcnQsIGxlbmd0aCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxyZWNlaXZlckhvc3RBbmRQb3J0PgotICAgICAgZWxzZSBpZiAocmVjZWl2ZXJIb3N0QW5kUG9ydCAhPSBudWxsCi0gICAgICAgICYmIGN1cnJlbnRFbGVtZW50ID09IFdTSUNvbnN0YW50cy5FTEVNX1JFQ0VJVkVSX0hPU1RfQU5EX1BPUlQpCi0gICAgICB7Ci0gICAgICAgIHJlY2VpdmVySG9zdEFuZFBvcnQuYXBwZW5kKGNoLCBzdGFydCwgbGVuZ3RoKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiogCi0gICAgICogRW5kIEVsZW1lbnQuIAotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGVuZEVsZW1lbnQoU3RyaW5nIG5hbWVzcGFjZVVSSSwgU3RyaW5nIGxvY2FsTmFtZSwgU3RyaW5nIHFOYW1lKQotICAgIHsKLSAgICAgIC8vIDx3c2ktY29uZmlnOmNvbW1lbnQ+Ci0gICAgICBpZiAoCi0gICAgICAgIChsb2NhbE5hbWUgPT0gV1NJQ29uc3RhbnRzLkVMRU1fQ09NTUVOVCkKLSAgICAgICAgICAmJiAobmFtZXNwYWNlVVJJID09IFdTSUNvbnN0YW50cy5OU19VUklfV1NJX01PTklUT1JfQ09ORklHKSkKLSAgICAgIHsKLSAgICAgICAgLy8gSWYgd2Ugc2F2ZWQgdGhlIGNvbW1lbnQsIHRoZW4gcHJvY2VzcyBpdCBhbmQgdGhlIGxvZyB0aW1lc3RhbXAKLSAgICAgICAgaWYgKHRoaXMubW9uaXRvckNvbW1lbnQgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIEFydGlmYWN0UmVmZXJlbmNlIGFydGlmYWN0UmVmZXJlbmNlID0gbmV3IEFydGlmYWN0UmVmZXJlbmNlSW1wbCgpOwotICAgICAgICAgIGFydGlmYWN0UmVmZXJlbmNlLnNldFRpbWVzdGFtcCh0aGlzLmxvZ1RpbWVzdGFtcCk7Ci0gICAgICAgICAgQ29tbWVudCBjb21tZW50ID0gbmV3IENvbW1lbnRJbXBsKCk7Ci0gICAgICAgICAgY29tbWVudC5zZXRUZXh0KG1vbml0b3JDb21tZW50LnRvU3RyaW5nKCkpOwotICAgICAgICAgIGFydGlmYWN0UmVmZXJlbmNlLnNldERvY3VtZW50RWxlbWVudCgKLSAgICAgICAgICAgIGNvbW1lbnQsCi0gICAgICAgICAgICBXU0lDb25zdGFudHMuTlNfTkFNRV9XU0lfTU9OSVRPUl9DT05GSUcpOwotICAgICAgICAgIHByb2Nlc3NBcnRpZmFjdFJlZmVyZW5jZShhcnRpZmFjdFJlZmVyZW5jZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8gPGJvdW5kYXJ5U3RyaW5nPgotICAgICAgZWxzZSBpZiAobG9jYWxOYW1lID09IFdTSUNvbnN0YW50cy5FTEVNX0JPVU5EQVJZX1NUUklORykKLSAgICAgIHsKLSAgICAgICAgLy8gQWRkaW5nIGJvdW5kYXJ5IHN0cmluZyB0byBhIGxpc3QKLSAgICAgICAgYm91bmRhcmllcy5hZGQoYm91bmRhcnkudG9TdHJpbmcoKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxtaW1lUGFydD4KLSAgICAgIGVsc2UgaWYgKGxvY2FsTmFtZSA9PSBXU0lDb25zdGFudHMuRUxFTV9NSU1FX1BBUlQpCi0gICAgICB7Ci0gICAgICAgIC8vIENyZWF0aW5nIGEgTWVzc2FnZU1JTUVQYXJ0IGluc3RhbmNlCi0gICAgICAgIE1pbWVQYXJ0IHBhcnQgPSBuZXcgTWltZVBhcnRJbXBsKCk7Ci0gICAgICAgIHBhcnQuc2V0SGVhZGVycyhtaW1lSGVhZGVycy50b1N0cmluZygpKTsKLSAgICAgICAgcGFydC5zZXRDb250ZW50KG1pbWVDb250ZW50LnRvU3RyaW5nKCkpOwotICAgICAgICBwYXJ0LnNldEJvdW5kYXJ5U3RyaW5ncygoU3RyaW5nW10pYm91bmRhcmllcy50b0FycmF5KG5ldyBTdHJpbmdbMF0pKTsKLQotICAgICAgICBtaW1lUGFydHMuYWRkUGFydChwYXJ0KTsKLSAgICAgIH0KLQotICAgICAgLy8gPG1lc3NhZ2VFbnRyeT4KLSAgICAgIGVsc2UgaWYgKGxvY2FsTmFtZSA9PSBXU0lDb25zdGFudHMuRUxFTV9NRVNTQUdFX0VOVFJZKQotICAgICAgewotICAgICAgICAvLyBBc3N1bXB0aW9uOiBSZWxhdGVkIG1lc3NhZ2VzIGFyZSBzZXF1ZW50aWFsbHkgYXZhaWxhYmxlIGluIHRoZSBtZXNzYWdlIGxvZy4KLSAgICAgICAgaWYgKE1lc3NhZ2VFbnRyeS5UWVBFX1JFUVVFU1QuZXF1YWxzSWdub3JlQ2FzZSh0eXBlKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIENyZWF0ZSBsb2cgZW50cnkKLSAgICAgICAgICBNZXNzYWdlRW50cnkgbWVzc2FnZUVudHJ5UmVxdWVzdCA9Ci0gICAgICAgICAgICBjcmVhdGVNZXNzYWdlRW50cnkoCi0gICAgICAgICAgICAgICAgaWQsCi0gICAgICAgICAgICAgICAgY29udmVyc2F0aW9uSUQsCi0gICAgICAgICAgICAgICAgdHlwZSwKLSAgICAgICAgICAgICAgICB0aW1lc3RhbXAsCi0gICAgICAgICAgICAgICAgc2VuZGVySG9zdEFuZFBvcnQudG9TdHJpbmcoKSwKLSAgICAgICAgICAgICAgICByZWNlaXZlckhvc3RBbmRQb3J0LnRvU3RyaW5nKCksCi0gICAgICAgICAgICAgICAgbWVzc2FnZUNvbnRlbnQgPT0gbnVsbCA/ICIiIDogbWVzc2FnZUNvbnRlbnQudG9TdHJpbmcoKSwKLSAgICAgICAgICAgICAgICBodHRwSGVhZGVycy50b1N0cmluZygpLAotICAgICAgICAgICAgICAgIG1pbWVQYXJ0cywKLSAgICAgICAgICAgICAgICBlbnRyeUVsZW1lbnRMb2NhdGlvbik7Ci0KLSAgICAgICAgICAvLyBBZGQgbG9nIGVudHJ5IHRvIHRoZSBsaXN0Ci0gICAgICAgICAgbWVzc2FnZUVudHJ5TGlzdC5hZGQobWVzc2FnZUVudHJ5UmVxdWVzdCk7Ci0gICAgICAgICAgLy8gUmVxdWVzdCBpcyBub3cgcHJvY2Vzc2VkIG9ubHkgd2hlbiB0aGUgcmVzcG9uc2UgaXMgcmVjZWl2ZWQuCi0gICAgICAgIH0KLQotICAgICAgICBlbHNlIGlmIChNZXNzYWdlRW50cnkuVFlQRV9SRVNQT05TRS5lcXVhbHNJZ25vcmVDYXNlKHR5cGUpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gQ3JlYXRlIGxvZyBlbnRyeQotICAgICAgICAgIE1lc3NhZ2VFbnRyeSBtZXNzYWdlRW50cnlSZXNwb25zZSA9Ci0gICAgICAgICAgICBjcmVhdGVNZXNzYWdlRW50cnkoCi0gICAgICAgICAgICAgICAgaWQsCi0gICAgICAgICAgICAgICAgY29udmVyc2F0aW9uSUQsCi0gICAgICAgICAgICAgICAgdHlwZSwKLSAgICAgICAgICAgICAgICB0aW1lc3RhbXAsCi0gICAgICAgICAgICAgICAgc2VuZGVySG9zdEFuZFBvcnQudG9TdHJpbmcoKSwKLSAgICAgICAgICAgICAgICByZWNlaXZlckhvc3RBbmRQb3J0LnRvU3RyaW5nKCksCi0gICAgICAgICAgICAgICAgbWVzc2FnZUNvbnRlbnQgPT0gbnVsbCA/ICIiIDogbWVzc2FnZUNvbnRlbnQudG9TdHJpbmcoKSwKLSAgICAgICAgICAgICAgICBodHRwSGVhZGVycy50b1N0cmluZygpLAotICAgICAgICAgICAgICAgIG1pbWVQYXJ0cywKLSAgICAgICAgICAgICAgICBlbnRyeUVsZW1lbnRMb2NhdGlvbik7Ci0KLSAgICAgICAgICBpZiAobG9nRW50cnlIYW5kbGVyICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gbG9vayB1cCB0aGUgcmVxdWVzdCBtZXNzYWdlCi0gICAgICAgICAgICAvLyBJU1NVRSA6IG5lZWQgdG8gdGhyb3cgJiBjYXRjaCBhIG51bGxwb2ludGVyZXhjZXB0aW9uIGluIGhlcmUuLi4KLSAgICAgICAgICAgIE1lc3NhZ2VFbnRyeSBtZXNzYWdlRW50cnlSZXF1ZXN0ID0gZmluZFJlbGF0ZWRSZXF1ZXN0KG1lc3NhZ2VFbnRyeVJlc3BvbnNlKTsKLQotICAgICAgICAgICAgaWYgKG1lc3NhZ2VFbnRyeVJlcXVlc3QgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgaWYgKCFpc01lc3NhZ2VFbmNyeXB0ZWQobWVzc2FnZUVudHJ5UmVxdWVzdC5nZXRNZXNzYWdlKCkpICYmCi0gICAgICAgICAgICAgICAgICAhaXNNZXNzYWdlRW5jcnlwdGVkKG1lc3NhZ2VFbnRyeVJlc3BvbnNlLmdldE1lc3NhZ2UoKSkpCi0gICAgICAgICAgICAgIHsKLQkgICAgICAgIGlmICghb21pdFJlcXVlc3QobWVzc2FnZUVudHJ5UmVxdWVzdCkpCi0JICAgICAgICB7Ci0JICAgICAgICAgIC8vIENyZWF0ZSBlbnRyeSAKLQkgICAgICAgICAgLy8gQUREOiBOZWVkIHRvIGNyZWF0ZSBlbnRyeSBmcm9tIHJlcG9ydAotCSAgICAgICAgICAvL0VudHJ5IGVudHJ5ID0gdGhpcy5yZXBvcnRlci5nZXRSZXBvcnQoKS5jcmVhdGVFbnRyeSgpOwotCSAgICAgICAgICBFbnRyeSBlbnRyeSA9IG5ldyBFbnRyeUltcGwoKTsKLQkgICAgICAgICAgZW50cnkuc2V0RW50cnlUeXBlKAotCSAgICAgICAgICAgICAgICBFbnRyeVR5cGUuZ2V0RW50cnlUeXBlKE1lc3NhZ2VWYWxpZGF0b3IuVFlQRV9NRVNTQUdFX1JFUVVFU1QpKTsKLQkgICAgICAgICAgZW50cnkuc2V0UmVmZXJlbmNlSUQobWVzc2FnZUVudHJ5UmVxdWVzdC5nZXRJZCgpKTsKLQkgICAgICAgICAgZW50cnkuc2V0RW50cnlEZXRhaWwobWVzc2FnZUVudHJ5UmVxdWVzdCk7Ci0JCi0JICAgICAgICAgIC8vIENyZWF0ZSB0aGUgY29udGV4dCBmb3IgdGhlIHJlcXVlc3QtcmVzcG9uc2UgcGFpcgotCSAgICAgICAgICBFbnRyeUNvbnRleHQgcmVxdWVzdFRhcmdldENvbnRleHQgPQotCSAgICAgICAgICAgICAgIG5ldyBFbnRyeUNvbnRleHQoCi0JICAgICAgICAgICAgICAgICAgICBlbnRyeSwKLQkgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VFbnRyeVJlcXVlc3QsCi0JICAgICAgICAgICAgICAgICAgICBtZXNzYWdlRW50cnlSZXNwb25zZSk7Ci0JICAgICAgICAgIGlmIChyZXF1ZXN0VGFyZ2V0Q29udGV4dCAhPSBudWxsKQotCSAgICAgICAgICAgIHByb2Nlc3NMb2dFbnRyeShyZXF1ZXN0VGFyZ2V0Q29udGV4dCk7Ci0JCi0JICAgICAgICAgIC8vIENyZWF0ZSBlbnRyeSAKLQkgICAgICAgICAgLy8gQUREOiBOZWVkIHRvIGNyZWF0ZSBlbnRyeSBmcm9tIHJlcG9ydAotCSAgICAgICAgICAvL0VudHJ5IGVudHJ5ID0gdGhpcy5yZXBvcnRlci5nZXRSZXBvcnQoKS5jcmVhdGVFbnRyeSgpOwotCSAgICAgICAgICBlbnRyeSA9IG5ldyBFbnRyeUltcGwoKTsKLQkgICAgICAgICAgZW50cnkuc2V0RW50cnlUeXBlKAotCSAgICAgICAgICAgIEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoTWVzc2FnZVZhbGlkYXRvci5UWVBFX01FU1NBR0VfUkVTUE9OU0UpKTsKLQkgICAgICAgICAgZW50cnkuc2V0UmVmZXJlbmNlSUQobWVzc2FnZUVudHJ5UmVzcG9uc2UuZ2V0SWQoKSk7Ci0JICAgICAgICAgIGVudHJ5LnNldEVudHJ5RGV0YWlsKG1lc3NhZ2VFbnRyeVJlc3BvbnNlKTsKLQkKLQkgICAgICAgICAgRW50cnlDb250ZXh0IHJlc3BvbnNlVGFyZ2V0Q29udGV4dCA9Ci0JICAgICAgICAgICAgICAgIG5ldyBFbnRyeUNvbnRleHQoCi0JICAgICAgICAgICAgICAgICAgZW50cnksCi0JICAgICAgICAgICAgICAgICAgbWVzc2FnZUVudHJ5UmVxdWVzdCwKLQkgICAgICAgICAgICAgICAgICBtZXNzYWdlRW50cnlSZXNwb25zZSk7Ci0JICAgICAgICAgIGlmIChyZXNwb25zZVRhcmdldENvbnRleHQgIT0gbnVsbCkKLQkgICAgICAgICAgICBwcm9jZXNzTG9nRW50cnkocmVzcG9uc2VUYXJnZXRDb250ZXh0KTsKLQkgICAgICAgIH0KLQkgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGN1cnJlbnRFbGVtZW50ID0gbnVsbDsKLSAgICB9Ci0KLSAgICAvKiogCi0gICAgKiBFbmQgRG9jdW1lbnQuIAotICAgICovCi0gICAgcHVibGljIHZvaWQgZW5kRG9jdW1lbnQoKQotICAgIHsKLSAgICAgIC8vSWYgd2Ugd2FudCB0byBzZXJpYWxseSBwcm9jZXNzIHRoZSBsb2cgZmlsZS4gIEludm9rZSB2YWxpZGF0ZU1lc3NhZ2VzIHdpdGgKLSAgICAgIC8vbXNnVmFsaWRhdG9yIT1udWxsLiAgSGVyZSB3ZSBoYXZlIHRoZSBvcHRpb24gb2YgY2xlYXJpbmcgdGhlIGxvZ0VudHJ5IHZlY3RvcgotICAgICAgLy9vbmNlIG1lc3NhZ2UgdmFsaWRhdGlvbiBpcyBkb25lLgotICAgICAgLy9pZiAobXNnVmFsaWRhdG9yIT1udWxsKQotICAgICAgLy9sb2dFbnRyeUxpc3QuY2xlYXIoKTsKLSAgICAgICAgCi0gICAgICAgIC8qIFByb2Nlc3MgYWxsIHJlbWFpbmluZyByZXF1ZXN0cyBpbiB0aGUgbWVzc2FnZUVudHJ5TGlzdCAqLwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1lc3NhZ2VFbnRyeUxpc3Quc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgIE1lc3NhZ2VFbnRyeSBsb2dFbnRyeSA9IChNZXNzYWdlRW50cnkpIG1lc3NhZ2VFbnRyeUxpc3QuZ2V0KGkpOwotICAgICAgICAgICAgaWYgKCFvbWl0UmVxdWVzdChsb2dFbnRyeSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEVudHJ5IGVudHJ5ID0gbmV3IEVudHJ5SW1wbCgpOwotICAgICAgICAgICAgICBlbnRyeS5zZXRFbnRyeVR5cGUoRW50cnlUeXBlLmdldEVudHJ5VHlwZSgKLSAgICAgICAgICAgICAgICAgICAgTWVzc2FnZVZhbGlkYXRvci5UWVBFX01FU1NBR0VfUkVRVUVTVCkpOwotICAgICAgICAgICAgICBlbnRyeS5zZXRSZWZlcmVuY2VJRChsb2dFbnRyeS5nZXRJZCgpKTsKLSAgICAgICAgICAgICAgZW50cnkuc2V0RW50cnlEZXRhaWwobG9nRW50cnkpOwotICAgICAgICAgICAgICBFbnRyeUNvbnRleHQgcmVxdWVzdFRhcmdldENvbnRleHQgPQotICAgICAgICAgICAgICAgIG5ldyBFbnRyeUNvbnRleHQoZW50cnksIGxvZ0VudHJ5LCBudWxsKTsKLSAgICAgICAgICAgICAgaWYgKHJlcXVlc3RUYXJnZXRDb250ZXh0ICE9IG51bGwpCi0gICAgICAgICAgICAgICAgcHJvY2Vzc0xvZ0VudHJ5KHJlcXVlc3RUYXJnZXRDb250ZXh0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFByb2Nlc3MgdGhlIG1lc3NhZ2UgaW4gdGhlIGxvZyBlbnRyeS4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBwcm9jZXNzTG9nRW50cnkoRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgLy9CZWZvcmUgdmFsaWRhdGluZyBhbnkgbWVzc2FnZXMgY2hlY2sgaWYgaW1wbGVtZW50ZXIgaXMgdGhlIGZpcnN0IGVsZW1lbnQuCi0gICAgICAgIGxvZ0VudHJ5SGFuZGxlci5wcm9jZXNzTG9nRW50cnkoZW50cnlDb250ZXh0KTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgd3NpRXhjZXB0aW9uID0KLSAgICAgICAgICBuZXcgV1NJRXhjZXB0aW9uKAotICAgICAgICAgICAgIkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHZhbGlkYXRpbmciCi0gICAgICAgICAgICAgICsgIiB0aGUgbWVzc2FnZSBsb2dFbnRyeTogIgotICAgICAgICAgICAgICArIGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRJZCgpLAotICAgICAgICAgICAgZSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUHJvY2VzcyB0aGUgYXJ0aWZhY3QgcmVmZXJlbmNlLgotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBwcm9jZXNzQXJ0aWZhY3RSZWZlcmVuY2UoQXJ0aWZhY3RSZWZlcmVuY2UgYXJ0aWZhY3RSZWZlcmVuY2UpCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIC8vQmVmb3JlIHZhbGlkYXRpbmcgYW55IG1lc3NhZ2VzIGNoZWNrIGlmIGltcGxlbWVudGVyIGlzIHRoZSBmaXJzdCBlbGVtZW50LgotICAgICAgICBsb2dFbnRyeUhhbmRsZXIucHJvY2Vzc0FydGlmYWN0UmVmZXJlbmNlKGFydGlmYWN0UmVmZXJlbmNlKTsKLSAgICAgIH0KLQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICB3c2lFeGNlcHRpb24gPQotICAgICAgICAgIG5ldyBXU0lFeGNlcHRpb24oCi0gICAgICAgICAgICAiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcHJvY2Vzc2luZyIKLSAgICAgICAgICAgICAgKyAiIHRoZSBhcnRpZmFjdCByZWZlcmVuY2U6ICIKLSAgICAgICAgICAgICAgKyBhcnRpZmFjdFJlZmVyZW5jZS50b1N0cmluZygpLAotICAgICAgICAgICAgZSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICAgKiBGaW5kIHRoZSByZWxhdGVkIFJlcXVlc3QgTG9nRW50cnkuICBUaGUgY3VycmVudCBydWxlIGZvciByZWxhdGVkIGxvZyBlbnRpcmVzIGlzCi0gICAgICAgKiB0aGF0IGEgcmVxdWVzdCB3aWxsIGFsd2F5cyBwcmVjZWRlIGl0cyByZXNwb25zZS4KLSAgICAgICAqIElTU1VFOiBTZXF1ZW5jZSBpbiBsb2cgZmlsZSBpcyB0aW1lc3RhbXAgZHJpdmVuIChtb25pdG9yIHNwZWMpLiAKLSAgICAgICAqIEFzc2VydGlvbiBpcyB0aGF0IGZvciBhIGdpdmVuIGNvbnZlcnNhdGlvbklELCBhIHNlY29uZCByZXF1ZXN0IGlzIG5vdCBzZW50IAotICAgICAgICogdW50aWwgaXRzIHJlc3BvbnNlIGlzIHJlY2VpdmVkIChjaHJvbm9sb2dpY2FsbHkpLiAKLSAgICAgICAqIFRoaXMgbWV0aG9kIHdpbGwgaGF2ZSB0byBiZSBtb2RpZmllZCBpZiB0aGUgcnVsZSBjaGFuZ2VzLgotICAgICAgICovCi0gICAgLy8gY291bGQgYmUgbWFkZSBtb3JlIGVmZmljaWVudCBieSBrZWVwaW5nIGEgbXVjaCBzbWFsbGVyIGxpc3Qgb2YgdW5yZXNwb25kZWQgcmVxdWVzdHMuLi4KLSAgICBwdWJsaWMgTWVzc2FnZUVudHJ5IGZpbmRSZWxhdGVkUmVxdWVzdChNZXNzYWdlRW50cnkgbG9nRW50cnlSZXNwb25zZSkKLSAgICB7Ci0gICAgICBpZiAobG9nRW50cnlSZXNwb25zZSAhPSBudWxsKQotICAgICAgewotICAgICAgICBmb3IgKGludCBlbnRyeSA9IG1lc3NhZ2VFbnRyeUxpc3Quc2l6ZSgpIC0gMTsgZW50cnkgPj0gMDsgZW50cnktLSkKLSAgICAgICAgewotICAgICAgICAgIC8vIEdldCB0aGUgbG9nIGVudHJ5IG9mIHRoZSBtYXRjaGluZyByZXF1ZXN0Ci0gICAgICAgICAgTWVzc2FnZUVudHJ5IGxvZ0VudHJ5ID0gKE1lc3NhZ2VFbnRyeSkgbWVzc2FnZUVudHJ5TGlzdC5nZXQoZW50cnkpOwotICAgICAgICAgIC8vIElnbm9yZSBvd24gZW50cnkKLSAgICAgICAgICBpZiAoIWxvZ0VudHJ5UmVzcG9uc2UuZXF1YWxzKGxvZ0VudHJ5KSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobG9nRW50cnlSZXNwb25zZQotICAgICAgICAgICAgICAuZ2V0Q29udmVyc2F0aW9uSWQoKQotICAgICAgICAgICAgICAuZXF1YWxzKGxvZ0VudHJ5LmdldENvbnZlcnNhdGlvbklkKCkpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvLyBmb3VuZCB0aGUgbW9zdCByZWNlbnRseSByZWFkIG1lc3NhZ2Ugd2l0aCB0aGUgc2FtZSBjb252ZXJzYXRpb25JRC4KLSAgICAgICAgICAgICAgLy8gRnJvbSBhYm92ZSwgdGhpcyBzaG91bGQgYmUgdGhlIGNvcnJlc3BvbmRpbmcgcmVxdWVzdC4gQ2hlY2sgYXMgZmFyIGFzIHBvc3NpYmxlLgotICAgICAgICAgICAgICBpZiAobG9nRW50cnkuZ2V0VHlwZSgpLmVxdWFscyhNZXNzYWdlRW50cnkuVFlQRV9SRVFVRVNUKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1lc3NhZ2VFbnRyeUxpc3QucmVtb3ZlKGVudHJ5KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbG9nRW50cnk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7IC8vIGV4cGVjdGVkIGEgcmVxdWVzdC4gbmVlZCB0byB0aHJvdyBhbiBleGNlcHRpb24hCi0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiBudWxsOwotICAgICAgLy8gY29udmVyc2F0aW9uSUQgbWF0Y2ggbm90IGZvdW5kIGFueXdoZXJlLiBuZWVkIHRvIHRocm93IGFuIGV4Y2VwdGlvbiEKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGUgbG9nIGVudHJ5LgotICAgICAqLwotICAgIHByaXZhdGUgTWVzc2FnZUVudHJ5IGNyZWF0ZU1lc3NhZ2VFbnRyeSgKLSAgICAgIFN0cmluZyBpZCwKLSAgICAgIFN0cmluZyBjb252ZXJzYXRpb25JZCwKLSAgICAgIFN0cmluZyB0eXBlLAotICAgICAgU3RyaW5nIHRpbWVzdGFtcCwKLSAgICAgIFN0cmluZyBzZW5kZXJJUFBvcnQsCi0gICAgICBTdHJpbmcgcmVjZWl2ZXJJUFBvcnQsCi0gICAgICBTdHJpbmcgbWVzc2FnZUNvbnRlbnQsCi0gICAgICBTdHJpbmcgaHR0cEhlYWRlcnMsCi0gICAgICBNaW1lUGFydHMgbWltZVBhcnRzLAotICAgICAgRWxlbWVudExvY2F0aW9uIGVsZW1lbnRMb2NhdGlvbikKLSAgICB7Ci0gICAgICAvLyBDcmVhdGUgbG9nIGVudHJ5Ci0gICAgICBNZXNzYWdlRW50cnkgbWVzc2FnZUVudHJ5ID0gbmV3IE1lc3NhZ2VFbnRyeUltcGwoKTsKLSAgICAgIG1lc3NhZ2VFbnRyeS5zZXRJZChpZCk7Ci0gICAgICBtZXNzYWdlRW50cnkuc2V0Q29udmVyc2F0aW9uSWQoY29udmVyc2F0aW9uSUQpOwotICAgICAgbWVzc2FnZUVudHJ5LnNldFR5cGUodHlwZSk7Ci0gICAgICBtZXNzYWdlRW50cnkuc2V0VGltZXN0YW1wKHRpbWVzdGFtcCk7Ci0gICAgICBtZXNzYWdlRW50cnkuc2V0U2VuZGVySG9zdEFuZFBvcnQoc2VuZGVySVBQb3J0KTsKLSAgICAgIG1lc3NhZ2VFbnRyeS5zZXRSZWNlaXZlckhvc3RBbmRQb3J0KHJlY2VpdmVySVBQb3J0KTsKLSAgICAgIG1lc3NhZ2VFbnRyeS5zZXRIVFRQSGVhZGVycyhodHRwSGVhZGVycyk7Ci0gICAgICBtZXNzYWdlRW50cnkuc2V0Qk9NKGJvbSk7Ci0gICAgICBtZXNzYWdlRW50cnkuc2V0RWxlbWVudExvY2F0aW9uKGVsZW1lbnRMb2NhdGlvbik7Ci0KLSAgICAgIFN0cmluZyBlbmNvZGluZyA9IG51bGw7Ci0gICAgICBpZiAobWltZVBhcnRzID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIC8vIEdldCB0aGUgZW5jb2RpbmcgZm9yIHRoaXMgbWVzc2FnZSBjb250ZW50Ci0gICAgICAgIGVuY29kaW5nID0gVXRpbHMuZ2V0WE1MRW5jb2RpbmcobWVzc2FnZUNvbnRlbnQpOwotICAgICAgICBtZXNzYWdlRW50cnkuc2V0TWVzc2FnZShtZXNzYWdlQ29udGVudCk7Ci0gICAgICAgCW1lc3NhZ2VFbnRyeS5zZXRNaW1lQ29udGVudChmYWxzZSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgCW1lc3NhZ2VFbnRyeS5zZXRNaW1lUGFydHMobWltZVBhcnRzKTsKLSAgICAgICAJTWltZVBhcnQgcm9vdCA9IFV0aWxzLmZpbmRSb290UGFydChodHRwSGVhZGVycywgbWltZVBhcnRzLmdldFBhcnRzKCkpOwotICAgICAgIAlpZiAocm9vdCAhPSBudWxsKQotICAgICAgIAl7Ci0gICAgICAgICAgLy8gR2V0IHRoZSBlbmNvZGluZyBmb3IgdGhpcyBtZXNzYWdlIGNvbnRlbnQKLSAgICAgICAgICBlbmNvZGluZyA9IFV0aWxzLmdldFhNTEVuY29kaW5nKHJvb3QuZ2V0Q29udGVudCgpKTsKLSAgICAgICAgICBtaW1lUGFydHMuc2V0Um9vdFBhcnQocm9vdCk7Ci0gICAgICAgCX0KLSAgIAkJLy8gZWxzZSBlbXB0eSBib2R5Ci0gICAgICAgCW1lc3NhZ2VFbnRyeS5zZXRNaW1lQ29udGVudCh0cnVlKTsKLSAgICAgIH0KLSAgICAgIGlmICgoZW5jb2RpbmcgPT0gbnVsbCkgfHwgKGVuY29kaW5nLmVxdWFscygiIikpKQotICAgICAgICAgZW5jb2RpbmcgPSBXU0lDb25zdGFudHMuREVGQVVMVF9YTUxfRU5DT0RJTkc7Ci0gICAgICBtZXNzYWdlRW50cnkuc2V0RW5jb2RpbmcoZW5jb2RpbmcpOwotCi0gICAgICByZXR1cm4gbWVzc2FnZUVudHJ5OwotICAgIH0KLQotICB9IC8vRW5kIENvbnRlbnRIYW5kbGVyCi0gIAotICAvKioKLSAgICogQ2hlY2sgZm9yIEhUVFAgbWVzc2FnZXMgdGhhdCBzaG91bGQgbm90IGJlIGxvZ2dlZC4KLSAgICogQHBhcmFtIHJyOiBhIHJlcXVlc3QtcmVzcG9uc2UgcGFpci4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSByZXF1ZXN0LXJlc3BvbnNlIHBhaXIgc2hvdWxkIGJlIG9taXR0ZWQgZnJvbSB0aGUgbG9nLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIG9taXRSZXF1ZXN0KE1lc3NhZ2VFbnRyeSBtZXNzYWdlRW50cnlSZXF1ZXN0KQotICB7Ci0gICAgYm9vbGVhbiBvbWl0ID0gZmFsc2U7Ci0gICAgaWYgKG1lc3NhZ2VFbnRyeVJlcXVlc3QgPT0gbnVsbCkKLSAgICAgICBvbWl0ID0gdHJ1ZTsKLSAgICBlbHNlCi0gICAgewotICAgICAgU3RyaW5nIHJlcXVlc3RIZWFkZXJzID0gbWVzc2FnZUVudHJ5UmVxdWVzdC5nZXRIVFRQSGVhZGVycygpOwotICAgICAgaWYgKChyZXF1ZXN0SGVhZGVycyAhPSBudWxsKSAmJgotICAgICAgICAgICgocmVxdWVzdEhlYWRlcnMuc3RhcnRzV2l0aCgiQ09OTkVDVCIpKSB8fAotICAgICAgICAgICAocmVxdWVzdEhlYWRlcnMuc3RhcnRzV2l0aCgiVFJBQ0UiKSkgfHwgCi0gICAgICAgICAgIChyZXF1ZXN0SGVhZGVycy5zdGFydHNXaXRoKCJERUxFVEUiKSkgfHwgCi0gICAgICAgICAgIChyZXF1ZXN0SGVhZGVycy5zdGFydHNXaXRoKCJPUFRJT05TIikpIHx8IAotICAgICAgICAgICAocmVxdWVzdEhlYWRlcnMuc3RhcnRzV2l0aCgiSEVBRCIpKSB8fAotICAgICAgICAgICAoKHJlcXVlc3RIZWFkZXJzLnN0YXJ0c1dpdGgoIkdFVCIpKSAmJgotICAgICAgICAJKCFpc01lc3NhZ2VXaXRoQnJhY2tldHMobWVzc2FnZUVudHJ5UmVxdWVzdC5nZXRNZXNzYWdlKCkpKSkpKQotICAgICAgeyAKLSAgICAgICAgb21pdCA9IHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBvbWl0OwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgY29udGVudCBvZiB0aGUgbWVzc2FnZSBoYXMgYXQgbGVhc3QKLSAgICogb25lIGxlZnQgYW5kIG9uZSByaWdodCBicmFja2V0LgotICAgKiBAcGFyYW0gbWVzc2FnZTogYSBtZXNzYWdlIGNvbnRlbnQuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgY29udGVudCBvZiB0aGUgbWVzc2FnZSBoYXMgYXQgbGVhc3QKLSAgICogICAgICAgICBvbmUgbGVmdCBhbmQgb25lIHJpZ2h0IGJyYWNrZXQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc01lc3NhZ2VXaXRoQnJhY2tldHMoU3RyaW5nIG1lc3NhZ2UpCi0gIHsKLSAgICByZXR1cm4gKChtZXNzYWdlICE9IG51bGwpICYmIAotICAgICAgICAgICAgKG1lc3NhZ2UuaW5kZXhPZigiPCIpIT0gLTEpICYmIAotICAgICAgICAgICAgKG1lc3NhZ2UuaW5kZXhPZigiPiIpICE9IC0xKSk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgYm9vbGVhbiBpc01lc3NhZ2VFbmNyeXB0ZWQoU3RyaW5nIG1lc3NhZ2UpCi0gIHsKLSAgICByZXR1cm4gKChtZXNzYWdlICE9IG51bGwpICYmIAotCSAgICAobWVzc2FnZS5pbmRleE9mKCI8RW5jcnlwdGVkS2V5ICIpICE9IC0xKSk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvaW1wbC9Mb2dXcml0ZXJJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvaW1wbC9Mb2dXcml0ZXJJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwZWU5ODIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbG9nL2ltcGwvTG9nV3JpdGVySW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5pbXBsOwotCi1pbXBvcnQgamF2YS5pby5Xcml0ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5pbXBsLkRvY3VtZW50V3JpdGVySW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLkxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLkxvZ1dyaXRlcjsKLQotLyoqCi0gKiBEZWZpbmVzIHRoZSBpbXBsZW1lbnRhdGlvbiB1c2VkIHRvIHdyaXRlIHRoZSBMb2cgZmlsZS4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgTmVpbCBEZWxpbWEgKG5kZGVsaW1hQGNhLmlibS5jb20pCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIExvZ1dyaXRlckltcGwgZXh0ZW5kcyBEb2N1bWVudFdyaXRlckltcGwgaW1wbGVtZW50cyBMb2dXcml0ZXIKLXsKLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5Mb2dXcml0ZXIjd3JpdGUoTG9nKQotICAgKi8KLSAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHdyaXRlKExvZyBsb2cpCi0gICAgdGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiwgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBJZiB0aGUgd3JpdGVyIHdhcyBub3Qgc3BlY2lmaWVkLCB0aGVuIHRocm93IGFuIGV4Y2VwdGlvbgotICAgIGlmICh3cml0ZXIgPT0gbnVsbCkKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkNvdWxkIG5vdCB3cml0ZSBsb2cgZmlsZSBzaW5jZSB3cml0ZXIgd2FzIG5vdCBzZXQuIik7Ci0KLSAgICAvLyBXcml0ZSBsb2cgZmlsZQotICAgIHdyaXRlKGxvZywgd3JpdGVyKTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTG9nV3JpdGVyI3dyaXRlKExvZywgV3JpdGVyKQotICAgKi8KLSAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHdyaXRlKExvZyBsb2csIFdyaXRlciB3cml0ZXIpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEFERDoKLSAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKCJXcml0ZSBlbnRpcmUgbG9nIGZpbGUgZnVuY3Rpb24gbm90IHN1cHBvcnRlZCB5ZXQuIik7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9pbXBsL01lc3NhZ2VFbnRyeUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9pbXBsL01lc3NhZ2VFbnRyeUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZjN2EzZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9sb2cvaW1wbC9NZXNzYWdlRW50cnlJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5pbXBsOwotCi1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWVzc2FnZUVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWltZVBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NaW1lUGFydHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLmRvbS5FbGVtZW50TG9jYXRpb247Ci0KLS8qKgotICogTWVzc2FnZSBlbnRyeSBpbXBsZW1lbnRhdGlvbi4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgTWVzc2FnZUVudHJ5SW1wbCBpbXBsZW1lbnRzIE1lc3NhZ2VFbnRyeQotewotICAvKioKLSAgICogTG9nIGVudHJ5IGlkLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBpZDsKLQotICBwcm90ZWN0ZWQgU3RyaW5nIGNvbnZlcnNhdGlvbklkOwotICBwcm90ZWN0ZWQgU3RyaW5nIHR5cGU7Ci0gIHByb3RlY3RlZCBTdHJpbmcgdGltZXN0YW1wOwotICBwcm90ZWN0ZWQgU3RyaW5nIHNlbmRlckhvc3RBbmRQb3J0OwotICBwcm90ZWN0ZWQgU3RyaW5nIHJlY2VpdmVySG9zdEFuZFBvcnQ7Ci0gIHByb3RlY3RlZCBTdHJpbmcgbWVzc2FnZSA9ICIiOwotICBwcm90ZWN0ZWQgU3RyaW5nIGh0dHBIZWFkZXJzID0gIiI7Ci0gIHByb3RlY3RlZCBpbnQgYm9tOwotICBwcm90ZWN0ZWQgU3RyaW5nIGVuY29kaW5nID0gIiI7Ci0gIHByb3RlY3RlZCBib29sZWFuIGlzTWltZUNvbnRlbnQgPSBmYWxzZTsKLSAgcHJvdGVjdGVkIE1pbWVQYXJ0cyBtaW1lUGFydHMgPSBuZXcgTWltZVBhcnRzSW1wbCgpOwotCi0gIHByb3RlY3RlZCBFbGVtZW50TG9jYXRpb24gZWxlbWVudExvY2F0aW9uID0gbnVsbDsKLQotICAvKioKLSAgICogRW1wdHkgY29uc3RydWN0b3IuCi0gICAqLwotICBwdWJsaWMgTWVzc2FnZUVudHJ5SW1wbCgpCi0gIHsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5sb2cuTG9nRW50cnkjZ2V0SWQoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRJZCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5pZDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubG9nLkxvZ0VudHJ5I3NldElkKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldElkKFN0cmluZyBpZCkKLSAgewotICAgIHRoaXMuaWQgPSBpZDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubG9nLkxvZ0VudHJ5I2dldENvbnZlcnNhdGlvbklkKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q29udmVyc2F0aW9uSWQoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuY29udmVyc2F0aW9uSWQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmxvZy5Mb2dFbnRyeSNzZXRDb252ZXJzYXRpb25JZChTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDb252ZXJzYXRpb25JZChTdHJpbmcgY29udmVyc2F0aW9uSWQpCi0gIHsKLSAgICB0aGlzLmNvbnZlcnNhdGlvbklkID0gY29udmVyc2F0aW9uSWQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmxvZy5Mb2dFbnRyeSNnZXRUaW1lc3RhbXAoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRUaW1lc3RhbXAoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMudGltZXN0YW1wOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5sb2cuTG9nRW50cnkjc2V0VGltZXN0YW1wKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFRpbWVzdGFtcChTdHJpbmcgdGltZXN0YW1wKQotICB7Ci0gICAgdGhpcy50aW1lc3RhbXAgPSB0aW1lc3RhbXA7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmxvZy5Mb2dFbnRyeSNnZXRUeXBlKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VHlwZSgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy50eXBlOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5sb2cuTG9nRW50cnkjc2V0VHlwZShTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUeXBlKFN0cmluZyB0eXBlKQotICB7Ci0gICAgdGhpcy50eXBlID0gdHlwZTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubG9nLkxvZ0VudHJ5I2dldFNlbmRlckhvc3RBbmRQb3J0KCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2VuZGVySG9zdEFuZFBvcnQoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuc2VuZGVySG9zdEFuZFBvcnQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmxvZy5Mb2dFbnRyeSNzZXRTZW5kZXJIb3N0QW5kUG9ydChTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTZW5kZXJIb3N0QW5kUG9ydChTdHJpbmcgc2VuZGVySG9zdEFuZFBvcnQpCi0gIHsKLSAgICB0aGlzLnNlbmRlckhvc3RBbmRQb3J0ID0gc2VuZGVySG9zdEFuZFBvcnQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmxvZy5Mb2dFbnRyeSNnZXRSZWNlaXZlckhvc3RBbmRQb3J0KCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVjZWl2ZXJIb3N0QW5kUG9ydCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5yZWNlaXZlckhvc3RBbmRQb3J0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5sb2cuTG9nRW50cnkjc2V0UmVjZWl2ZXJIb3N0QW5kUG9ydChTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZWNlaXZlckhvc3RBbmRQb3J0KFN0cmluZyByZWNlaXZlckhvc3RBbmRQb3J0KQotICB7Ci0gICAgdGhpcy5yZWNlaXZlckhvc3RBbmRQb3J0ID0gcmVjZWl2ZXJIb3N0QW5kUG9ydDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubG9nLkxvZ0VudHJ5I2dldE1lc3NhZ2UoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRNZXNzYWdlKCkKLSAgewotICAJaWYgKCF0aGlzLmlzTWltZUNvbnRlbnQpCi0gICAgICAgcmV0dXJuIHRoaXMubWVzc2FnZTsKLSAgCWVsc2UKLSAgCXsKLSAgCSAgIGlmICh0aGlzLm1pbWVQYXJ0cy5nZXRSb290UGFydCgpID09IG51bGwpIHJldHVybiAiIjsKLSAgCSAgIGVsc2UgcmV0dXJuIHRoaXMubWltZVBhcnRzLmdldFJvb3RQYXJ0KCkuZ2V0Q29udGVudCgpOwotICAJfQotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5sb2cuTG9nRW50cnkjc2V0TWVzc2FnZShTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRNZXNzYWdlKFN0cmluZyBtZXNzYWdlKQotICB7Ci0gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubG9nLkxvZ0VudHJ5I3NldEVuY29kaW5nKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEVuY29kaW5nKFN0cmluZyBlbmNvZGluZykKLSAgewotICAgIHRoaXMuZW5jb2RpbmcgPSBlbmNvZGluZzsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubG9nLk1lc3NhZ2VFbnRyeSNnZXRCT00oKQotICAgKi8KLSAgcHVibGljIGludCBnZXRCT00oKQotICB7Ci0gICAgcmV0dXJuIGJvbTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubG9nLk1lc3NhZ2VFbnRyeSNzZXRCT00oaW50KQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Qk9NKGludCBib20pCi0gIHsKLSAgICB0aGlzLmJvbSA9IGJvbTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubG9nLkxvZ0VudHJ5I2dldEhUVFBIZWFkZXJzKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SFRUUEhlYWRlcnMoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuaHR0cEhlYWRlcnM7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmxvZy5Mb2dFbnRyeSNzZXRIVFRQSGVhZGVycyhTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRIVFRQSGVhZGVycyhTdHJpbmcgaHR0cEhlYWRlcnMpCi0gIHsKLSAgICB0aGlzLmh0dHBIZWFkZXJzID0gaHR0cEhlYWRlcnM7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmxvZy5NZXNzYWdlRW50cnkjZ2V0RWxlbWVudExvY2F0aW9uKCkKLSAgICovCi0gIHB1YmxpYyBFbGVtZW50TG9jYXRpb24gZ2V0RWxlbWVudExvY2F0aW9uKCkKLSAgewotICAgIHJldHVybiB0aGlzLmVsZW1lbnRMb2NhdGlvbjsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubG9nLk1lc3NhZ2VFbnRyeSNzZXRFbGVtZW50TG9jYXRpb24ob3JnLndzaS54bWwuZG9tLkVsZW1lbnRMb2NhdGlvbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEVsZW1lbnRMb2NhdGlvbihFbGVtZW50TG9jYXRpb24gZWxlbWVudExvY2F0aW9uKQotICB7Ci0gICAgdGhpcy5lbGVtZW50TG9jYXRpb24gPSBlbGVtZW50TG9jYXRpb247Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgcmV0dXJuIHRvWE1MU3RyaW5nKFdTSUNvbnN0YW50cy5OU19OQU1FX1dTSV9MT0cpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQjdG9YTUxTdHJpbmcoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1hNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSkKLSAgewotICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICBQcmludFdyaXRlciBwdyA9IG5ldyBQcmludFdyaXRlcihzdyk7Ci0KLSAgICBTdHJpbmcgbnNOYW1lID0gbmFtZXNwYWNlTmFtZTsKLSAgICBpZiAoKCFuc05hbWUuZXF1YWxzKCIiKSAmJiAoIW5zTmFtZS5lbmRzV2l0aCgiOiIpKSkpCi0gICAgICBuc05hbWUgKz0gIjoiOwotCi0gICAgLy8gQUREOiBOZWVkIHRvIGFkZCB3YXkgdG8gaW5kaWNhdGUgWE1MIHNjaGVtYSB0eXBlIGZvciBsb2dFbnRyeQotICAgIC8vIEFkZCBsb2cgZW50cnkKLSAgICBwdy5wcmludCgiPCIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiICIpOwotICAgIHB3LnByaW50KAotICAgICAgInhzaTp0eXBlPVwiaHR0cE1lc3NhZ2VFbnRyeVwiICIpOwotICAgIHB3LnByaW50KFdTSUNvbnN0YW50cy5BVFRSX0lEX1VDICsgIj1cIiIgKyBpZCArICJcIiAiKTsKLSAgICBwdy5wcmludCgKLSAgICAgIFdTSUNvbnN0YW50cy5BVFRSX0NPTlZFUlNBVElPTl9JRCArICI9XCIiICsgY29udmVyc2F0aW9uSWQgKyAiXCIgIik7Ci0gICAgcHcucHJpbnQoV1NJQ29uc3RhbnRzLkFUVFJfVFlQRSArICI9XCIiICsgdHlwZSArICJcIiAiKTsKLSAgICBwdy5wcmludGxuKFdTSUNvbnN0YW50cy5BVFRSX1RJTUVTVEFNUCArICI9XCIiICsgdGltZXN0YW1wICsgIlwiPiIpOwotCi0gICAgaWYgKGlzTWltZUNvbnRlbnQoKSkKLSAgICB7Ci0gICAgICAgIC8vIEFkZCBtZXNzYWdlIGNvbnRlbnQgd2l0aCBhdHRhY2htZW50cyBlbGVtZW50Ci0gICAgICAgIHB3LnByaW50KCI8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX01FU1NBR0VfQ09OVEVOVF9XSVRIX0FUVEFDSE1FTlRTKTsKLSAgICAgICAgaWYgKGJvbSAhPSAwKQotICAgICAgICAgIHB3LnByaW50KCIgIiArIFdTSUNvbnN0YW50cy5BVFRSX0JPTSArICI9XCIiICsgYm9tICsgIlwiIik7Ci0gICAgICAgIHB3LnByaW50KCI+Iik7Ci0KLSAgICAgICAgQ29sbGVjdGlvbiBwYXJ0TGlzdCA9IG1pbWVQYXJ0cy5nZXRQYXJ0cygpOwotICAgICAgICBpZiAoIXBhcnRMaXN0LmlzRW1wdHkoKSkKLSAgICAgICAgewotICAgICAgICAgCUl0ZXJhdG9yIGlNaW1lUGFydHMgPSBwYXJ0TGlzdC5pdGVyYXRvcigpOwotICAgICAgICAJd2hpbGUgKGlNaW1lUGFydHMuaGFzTmV4dCgpKQotICAgICAgICAgICAgewotICAgICAgICAJICBNaW1lUGFydCBtaW1lUGFydCA9IChNaW1lUGFydClpTWltZVBhcnRzLm5leHQoKTsKLSAgICAgICAgIAkgIHB3LnByaW50KG1pbWVQYXJ0LnRvWE1MU3RyaW5nKG5hbWVzcGFjZU5hbWUpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIEFkZCBlbmQgbWVzc2FnZSBlbGVtZW50Ci0gICAgICAgIHB3LnByaW50bG4oIjwvIiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX01FU1NBR0VfQ09OVEVOVF9XSVRIX0FUVEFDSE1FTlRTICsgIj4iKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIEFkZCBtZXNzYWdlIGNvbnRlbnQgZWxlbWVudAotICAgICAgcHcucHJpbnQoIjwiICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fTUVTU0FHRV9DT05URU5UKTsKLSAgICAgIGlmIChib20gIT0gMCkKLSAgICAgICAgcHcucHJpbnQoIiAiICsgV1NJQ29uc3RhbnRzLkFUVFJfQk9NICsgIj1cIiIgKyBib20gKyAiXCIiKTsKLSAgICAgIHB3LnByaW50KCI+Iik7Ci0KLSAgICAgIC8vIEFkZCBlbmNvZGVkIG1lc3NhZ2UKLSAgICAgIHB3LnByaW50KFhNTFV0aWxzLnhtbEVzY2FwZWRTdHJpbmcobWVzc2FnZSkpOwotICAgICAgCi0gICAgICAvLyBBZGQgZW5kIG1lc3NhZ2UgZWxlbWVudAotICAgICAgcHcucHJpbnRsbigiPC8iICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fTUVTU0FHRV9DT05URU5UICsgIj4iKTsKLSAgICB9Ci0KLSAgICAvLyBBZGQgc2VuZGVySVBQb3J0IGVsZW1lbnQKLSAgICBwdy5wcmludGxuKAotICAgICAgIjwiCi0gICAgICAgICsgbnNOYW1lCi0gICAgICAgICsgV1NJQ29uc3RhbnRzLkVMRU1fU0VOREVSX0hPU1RfQU5EX1BPUlQKLSAgICAgICAgKyAiPiIKLSAgICAgICAgKyBzZW5kZXJIb3N0QW5kUG9ydAotICAgICAgICArICI8LyIKLSAgICAgICAgKyBuc05hbWUKLSAgICAgICAgKyBXU0lDb25zdGFudHMuRUxFTV9TRU5ERVJfSE9TVF9BTkRfUE9SVAotICAgICAgICArICI+Iik7Ci0KLSAgICAvLyBBZGQgcmVjZWl2ZXJJUCBlbGVtZW50Ci0gICAgcHcucHJpbnRsbigKLSAgICAgICI8IgotICAgICAgICArIG5zTmFtZQotICAgICAgICArIFdTSUNvbnN0YW50cy5FTEVNX1JFQ0VJVkVSX0hPU1RfQU5EX1BPUlQKLSAgICAgICAgKyAiPiIKLSAgICAgICAgKyByZWNlaXZlckhvc3RBbmRQb3J0Ci0gICAgICAgICsgIjwvIgotICAgICAgICArIG5zTmFtZQotICAgICAgICArIFdTSUNvbnN0YW50cy5FTEVNX1JFQ0VJVkVSX0hPU1RfQU5EX1BPUlQKLSAgICAgICAgKyAiPiIpOwotCi0gICAgLy8gQWRkIEhUVFBIZWFkZXJzIGVsZW1lbnQKLSAgICBwdy5wcmludCgiPCIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9IVFRQX0hFQURFUlMgKyAiPiIpOwotCi0gICAgLy8gQUREOiBEb2VzIHRoaXMgc3RyaW5nIG5lZWQgdG8gYmUgWE1MIGVuY29kZWQ/Ci0gICAgLy8gQWRkIEhUVFAgaGVhZGVycwotICAgIHB3LnByaW50KFhNTFV0aWxzLnhtbEVzY2FwZWRTdHJpbmcoaHR0cEhlYWRlcnMpKTsKLQotICAgIC8vIEVuZCBIVFRQSGVhZGVycyBlbGVtZW50Ci0gICAgcHcucHJpbnRsbigiPC8iICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fSFRUUF9IRUFERVJTICsgIj4iKTsKLQotICAgIC8vIEVuZCBsb2cgZW50cnkKLSAgICBwdy5wcmludGxuKCI8LyIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiPiIpOwotCi0gICAgLy8gUmV0dXJuIHN0cmluZwotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5sb2cuTWVzc2FnZUVudHJ5I2lzTWltZUNvbnRlbnQoKQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNNaW1lQ29udGVudCgpCi0gIHsKLSAgICByZXR1cm4gaXNNaW1lQ29udGVudDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubG9nLk1lc3NhZ2VFbnRyeSNzZXRNaW1lQ29udGVudCgpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRNaW1lQ29udGVudChib29sZWFuIGlzTWltZUNvbnRlbnQpCi0gIHsKLSAgICB0aGlzLmlzTWltZUNvbnRlbnQgPSBpc01pbWVDb250ZW50OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5sb2cuTWVzc2FnZUVudHJ5I2dldE1JTUVQYXJ0cygpCi0gICAqLwotICBwdWJsaWMgTWltZVBhcnRzIGdldE1pbWVQYXJ0cygpCi0gIHsKLSAgICByZXR1cm4gbWltZVBhcnRzOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5sb2cuTWVzc2FnZUVudHJ5I3NldE1pbWVQYXJ0cygpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRNaW1lUGFydHMoTWltZVBhcnRzIG1pbWVQYXJ0cykKLSAgewotICAgIHRoaXMubWltZVBhcnRzID0gbWltZVBhcnRzOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9pbXBsL01pbWVQYXJ0SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbG9nL2ltcGwvTWltZVBhcnRJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5ZTdkZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbG9nL2ltcGwvTWltZVBhcnRJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5pbXBsOwotCi1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NaW1lUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotCi0vKioKLSAqIEBhdXRob3IgbGF1em9uZAotICoKLSAqIFRPRE8gVG8gY2hhbmdlIHRoZSB0ZW1wbGF0ZSBmb3IgdGhpcyBnZW5lcmF0ZWQgdHlwZSBjb21tZW50IGdvIHRvCi0gKiBXaW5kb3cgLSBQcmVmZXJlbmNlcyAtIEphdmEgLSBDb2RlIFN0eWxlIC0gQ29kZSBUZW1wbGF0ZXMKLSAqLwotcHVibGljIGNsYXNzIE1pbWVQYXJ0SW1wbCBpbXBsZW1lbnRzIE1pbWVQYXJ0IAotewotICBwcml2YXRlIFN0cmluZyBtaW1lQ29udGVudDsKLSAgcHJpdmF0ZSBTdHJpbmcgbWltZUhlYWRlcnM7Ci0gIHByaXZhdGUgU3RyaW5nW10gYm91bmRhcnlTdHJpbmdzID0gbmV3IFN0cmluZ1swXTsKLSAgCi0gIHB1YmxpYyBNaW1lUGFydEltcGwgKCkKLSAgewotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmxvZy5NaW1lUGFydCNnZXRDb250ZW50KCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q29udGVudCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5taW1lQ29udGVudDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubG9nLk1pbWVQYXJ0I3NldENvbnRlbnQoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q29udGVudChTdHJpbmcgbWltZUNvbnRlbnQpCi0gIHsKLSAgCXRoaXMubWltZUNvbnRlbnQgPSBtaW1lQ29udGVudDsKLSAgfQotCi0gIC8qKgotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NaW1lUGFydCNnZXRIZWFkZXJzKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SGVhZGVycygpCi0gIHsKLSAgCXJldHVybiB0aGlzLm1pbWVIZWFkZXJzOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5sb2cuTWltZVBhcnQjc2V0SGVhZGVycyhTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRIZWFkZXJzKFN0cmluZyBtaW1lSGVhZGVycykKLSAgewotICAJdGhpcy5taW1lSGVhZGVycyA9IG1pbWVIZWFkZXJzOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5sb2cuTWltZVBhcnQjZ2V0Qm91bmRhcnlTdHJpbmdzKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRCb3VuZGFyeVN0cmluZ3MoKQotICB7Ci0gIAlyZXR1cm4gdGhpcy5ib3VuZGFyeVN0cmluZ3M7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmxvZy5NaW1lUGFydCNzZXRCb3VuZGFyeVN0cmluZ3MoU3RyaW5nW10pCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRCb3VuZGFyeVN0cmluZ3MoU3RyaW5nW10gYm91bmRhcnlTdHJpbmdzKQotICB7Ci0gIAl0aGlzLmJvdW5kYXJ5U3RyaW5ncyA9IGJvdW5kYXJ5U3RyaW5nczsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICByZXR1cm4gdG9YTUxTdHJpbmcoV1NJQ29uc3RhbnRzLk5TX05BTUVfV1NJX0xPRyk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LkRvY3VtZW50RWxlbWVudCN0b1hNTFN0cmluZyhTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvWE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIFN0cmluZyBuc05hbWUgPSBuYW1lc3BhY2VOYW1lOwotICAgIGlmICgoIW5zTmFtZS5lcXVhbHMoIiIpICYmICghbnNOYW1lLmVuZHNXaXRoKCI6IikpKSkKLSAgICAgIG5zTmFtZSArPSAiOiI7Ci0KLSAgICAvLyBBZGQgbWltZVBhcnQgZWxlbWVudAotICAgIHB3LnByaW50bG4oIjwiICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fTUlNRV9QQVJUICArICI+Iik7Ci0gICAgCi0gICAgLy8gQWRkIGJvdW5kYXJ5IHN0cmluZyBlbGVtZW50Ci0gICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYm91bmRhcnlTdHJpbmdzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgICAgcHcucHJpbnQoIjwiICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fQk9VTkRBUllfU1RSSU5HICsgIj4iKTsKLSAgICAgICAgcHcucHJpbnQoYm91bmRhcnlTdHJpbmdzW2ldKTsKLSAgICAgICAgcHcucHJpbnRsbigiPC8iICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fQk9VTkRBUllfU1RSSU5HICsgIj4iKTsKLSAgICB9Ci0gICAKLSAgICAvLyBBZGQgbWltZUhlYWRlcnMgZWxlbWVudAotICAgIHB3LnByaW50KCI8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX01JTUVfSEVBREVSUyArICI+Iik7Ci0gICAgcHcucHJpbnQoWE1MVXRpbHMueG1sRXNjYXBlZFN0cmluZyhtaW1lSGVhZGVycykpOwotICAgIHB3LnByaW50bG4oIjwvIiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX01JTUVfSEVBREVSUyArICI+Iik7Ci0KLSAgICAvLyBBZGQgZW5jb2RlZCBjb250ZW50Ci0gICAgcHcucHJpbnQoIjwiICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fTUlNRV9DT05URU5UICsgIj4iKTsKLSAgICBpZiAoKG1pbWVDb250ZW50LmluZGV4T2YoIjwiKSAhPSAtMSkgIHx8IAotICAgICAgICAobWltZUNvbnRlbnQuaW5kZXhPZigiPiIpICE9IC0xKSAgfHwgCi0JCShtaW1lQ29udGVudC5pbmRleE9mKCJcIiIpICE9IC0xKSB8fAotCQkobWltZUNvbnRlbnQuaW5kZXhPZigiXCciKSAhPSAtMSkpCi0gICAgCXB3LnByaW50KFhNTFV0aWxzLnhtbEVzY2FwZWRTdHJpbmcobWltZUNvbnRlbnQpKTsKLSAgICBlbHNlCi0gICAgICAgIHB3LnByaW50KGdldENvbnRlbnQoKSk7Ci0gICAgcHcucHJpbnRsbigiPC8iICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fTUlNRV9DT05URU5UICsgIj4iKTsKLSAKLSAgICAvLyBBZGQgZW5kIG1lc3NhZ2UgZWxlbWVudAotICAgIHB3LnByaW50bG4oIjwvIiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX01JTUVfUEFSVCArICI+Iik7Ci0KLSAgICAvLyBSZXR1cm4gc3RyaW5nCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbG9nL2ltcGwvTWltZVBhcnRzSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbG9nL2ltcGwvTWltZVBhcnRzSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzM5MmMxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL2xvZy9pbXBsL01pbWVQYXJ0c0ltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuaW1wbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1pbWVQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWltZVBhcnRzOwotCi0vKioKLSAqIE1pbWVQYXJ0c0ltcGwgY2xhc3MuCi0gKgotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgRGF2aWQgTGF1em9uIChsYXV6b25kQGNhLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBNaW1lUGFydHNJbXBsIGltcGxlbWVudHMgTWltZVBhcnRzCi17Ci0JCi0gIHByb3RlY3RlZCBNaW1lUGFydCByb290UGFydDsKLSAgcHJvdGVjdGVkIENvbGxlY3Rpb24gbWltZVBhcnRzID0gbmV3IEFycmF5TGlzdCgpOwotCi0gIHB1YmxpYyBNaW1lUGFydHNJbXBsKCkKLSAgewotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5sb2cuTWltZVBhcnRzI2dldFJvb3RQYXJ0KCkKLSAgICovCi0gIHB1YmxpYyBNaW1lUGFydCBnZXRSb290UGFydCgpCi0gIHsKLQlyZXR1cm4gcm9vdFBhcnQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmxvZy5NaW1lUGFydHMjc2V0Um9vdFBhcnQoTWltZVBhcnQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSb290UGFydChNaW1lUGFydCByb290UGFydCkKLSAgewotICAJdGhpcy5yb290UGFydCA9IHJvb3RQYXJ0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5sb2cuTWltZVBhcnRzI2NvdW50KCkKLSAgICovCi0gIHB1YmxpYyBpbnQgY291bnQoKQotICB7Ci0JcmV0dXJuIG1pbWVQYXJ0cy5zaXplKCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmxvZy5NaW1lUGFydHMjYWRkUGFydChNaW1lUGFydCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZFBhcnQoTWltZVBhcnQgcGFydCkKLSAgewotICAJaWYgKHBhcnQgIT0gbnVsbCkKLSAgCSAgbWltZVBhcnRzLmFkZChwYXJ0KTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubG9nLk1pbWVQYXJ0cyNnZXRQYXJ0cygpCi0gICAqLwotICBwdWJsaWMgQ29sbGVjdGlvbiBnZXRQYXJ0cygpCi0gIHsKLSAgCXJldHVybiBtaW1lUGFydHM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvQ2h1bmtlZERhdGEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvQ2h1bmtlZERhdGEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZiMWEwMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL0NodW5rZWREYXRhLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3I7Ci0KLS8qKgotICogVGhpcyBjbGFzcyB3aWxsIHByb2Nlc3MgY2h1bmtlZCBkYXRhLgotICogCi0gKiBAYXV0aG9yIFBldGVyICBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKiBAdmVyc2lvbiAxLjAuMQotICovCi1wdWJsaWMgY2xhc3MgQ2h1bmtlZERhdGEKLXsKLSAgcHJvdGVjdGVkIGJvb2xlYW4gbW9yZUNodW5rZWREYXRhID0gZmFsc2U7Ci0gIHByb3RlY3RlZCBTdHJpbmcgY2h1bmtlZERhdGEgPSAiIjsKLSAgcHJvdGVjdGVkIFNvY2tldEhhbmRsZXIgc29ja2V0SGFuZGxlciA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdHMgYSBDaHVua2VkRGF0YSBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgQ2h1bmtlZERhdGEoKQotICB7Ci0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0cyBhIENodW5rZWREYXRhIG9iamVjdC4KLSAgICogQHBhcmFtIHNvY2tldEhhbmRsZXIgc29ja2V0IGhhbmRsZXIuCi0gICAqIEBwYXJhbSBtb3JlQ2h1bmtlZERhdGEgY2h1bmtlZCBkYXRhLgotICAgKi8KLSAgcHVibGljIENodW5rZWREYXRhKFNvY2tldEhhbmRsZXIgc29ja2V0SGFuZGxlciwgYm9vbGVhbiBtb3JlQ2h1bmtlZERhdGEpCi0gIHsKLSAgICB0aGlzLnNvY2tldEhhbmRsZXIgPSBzb2NrZXRIYW5kbGVyOwotICAgIHRoaXMubW9yZUNodW5rZWREYXRhID0gbW9yZUNodW5rZWREYXRhOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdHMgYSBDaHVua2VkRGF0YSBvYmplY3QuCi0gICAqIEBwYXJhbSBzb2NrZXRIYW5kbGVyIHNvY2tldCBoYW5kbGVyLgotICAgKiBAcGFyYW0gY2h1bmtlZERhdGEgY2h1bmtlZCBkYXRhLgotICAgKi8KLSAgcHVibGljIENodW5rZWREYXRhKFNvY2tldEhhbmRsZXIgc29ja2V0SGFuZGxlciwgU3RyaW5nIGNodW5rZWREYXRhKQotICB7Ci0gICAgdGhpcy5zb2NrZXRIYW5kbGVyID0gc29ja2V0SGFuZGxlcjsKLSAgICB0aGlzLmNodW5rZWREYXRhID0gY2h1bmtlZERhdGE7Ci0gICAgdGhpcy5tb3JlQ2h1bmtlZERhdGEgPSBjaGVja0RhdGEoY2h1bmtlZERhdGEpOwotICB9Ci0KLSAgLyoqCi0gICAqIEFkZCB0aGUgY2h1bmtlZCBkYXRhIHRvIHRoZSBidWZmZXIuCi0gICAqIEBwYXJhbSBjaHVua2VkRGF0YSBjaHVua2VkIGRhdGEuCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGREYXRhKFN0cmluZyBjaHVua2VkRGF0YSkKLSAgewotICAgIHRoaXMuY2h1bmtlZERhdGEgKz0gY2h1bmtlZERhdGE7Ci0gICAgdGhpcy5tb3JlQ2h1bmtlZERhdGEgPSBjaGVja0RhdGEoY2h1bmtlZERhdGEpOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBkYXRhIGJ1ZmZlci4KLSAgICogQHJldHVybiAgZGF0YSBidWZmZXIuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldERhdGEoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuY2h1bmtlZERhdGE7Ci0gIH0KLQotICAvKioKLSAgICogQ2xlYXIgZGF0YSBidWZmZXIuCi0gICAqLwotICBwdWJsaWMgdm9pZCBjbGVhckRhdGEoKQotICB7Ci0gICAgdGhpcy5jaHVua2VkRGF0YSA9ICIiOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBpcyBtb3JlIGNodW5rZWQgZGF0YS4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZXJlIGlzIG1vcmUgY2h1bmtlZCBkYXRhLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNNb3JlQ2h1bmtlZERhdGEoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMubW9yZUNodW5rZWREYXRhOwotICB9Ci0KLSAgLyoqCi0gICAqIERlY29kZSBhbmQgYWRkIGRhdGEgdG8gdGhlIGJ1ZmZlci4KLSAgICogQHBhcmFtIG1lc3NhZ2VCdWZmZXIgYSBTdHJpbmdCdWZmZXIgb2JqZWN0LgotICAgKiBAcmV0dXJuIHRydWUgaWYgZGF0YSBpcyBhZGRlZCB0byB0aGUgYnVmZmVyLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZGVjb2RlQW5kQWRkRGF0YVRvQnVmZmVyKFN0cmluZ0J1ZmZlciBtZXNzYWdlQnVmZmVyKQotICB7Ci0gICAgYm9vbGVhbiBtb3JlQ2h1bmtlZERhdGEgPSBmYWxzZTsKLSAgICBpZiAoIXRoaXMubW9yZUNodW5rZWREYXRhKQotICAgIHsKLSAgICAgIC8vIERFQlVHOgotICAgICAgZGVidWcoImRlY29kZUFuZEFkZERhdGFUb0J1ZmZlciIsICJjaHVua2VkRGF0YTogIiArIGNodW5rZWREYXRhKTsKLQotICAgICAgbW9yZUNodW5rZWREYXRhID0gZGVjb2RlRGF0YShjaHVua2VkRGF0YSwgbWVzc2FnZUJ1ZmZlcik7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1vcmVDaHVua2VkRGF0YTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVjayBkYXRhLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGNoZWNrRGF0YShTdHJpbmcgY2h1bmtlZERhdGEpCi0gIHsKLSAgICBib29sZWFuIG1vcmVDaHVua2VkRGF0YSA9IGZhbHNlOwotICAgIC8vIExvb2sgZm9yIFtDUkxGXVswXVtDUkxGXSBpbiB0aGUgY2h1bmtlZCBkYXRhICAgICAgCi0gICAgaWYgKGNodW5rZWREYXRhLmluZGV4T2YoU29ja2V0SGFuZGxlci5DUkxGICsgIjAiICsgU29ja2V0SGFuZGxlci5DUkxGKSAhPSAtMSkKLSAgICB7Ci0gICAgICBtb3JlQ2h1bmtlZERhdGEgPSBmYWxzZTsKLQotICAgICAgLy8gREVCVUc6Ci0gICAgICBkZWJ1ZygKLSAgICAgICAgImNoZWNrRGF0YSIsCi0gICAgICAgICJDaHVuayBjb250YWlucyBbQ1JMRl1bMF1bQ1JMRl0sIHNvIHRoZXJlIGlzIG5vIG1vcmUgZGF0YS4iKTsKLSAgICB9Ci0KLSAgICAvLyBMb29rIGZvciBbMF1bQ1JMRl0gYXQgc3RhcnQgb2YgY2h1bmtlZCBkYXRhICAgICAgCi0gICAgZWxzZSBpZiAoY2h1bmtlZERhdGEuc3RhcnRzV2l0aCgiMCIgKyBTb2NrZXRIYW5kbGVyLkNSTEYpKQotICAgIHsKLSAgICAgIG1vcmVDaHVua2VkRGF0YSA9IGZhbHNlOwotCi0gICAgICAvLyBERUJVRzoKLSAgICAgIGRlYnVnKAotICAgICAgICAiY2hlY2tEYXRhIiwKLSAgICAgICAgIkNodW5rIGRhdGEgc3RhcnRzIHdpdGggWzBdW0NSTEZdLCBzbyB0aGVyZSBpcyBubyBtb3JlIGRhdGEuIik7Ci0gICAgfQotCi0gICAgLy8gT3RoZXJ3aXNlIHN0ZXAgdGhyb3VnaCBpdCB0byBzZWUgaWYgd2UgaGF2ZSBhbGwgb2YgdGhlIGRhdGEKLSAgICBlbHNlCi0gICAgewotICAgICAgbW9yZUNodW5rZWREYXRhID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbW9yZUNodW5rZWREYXRhOwotICB9Ci0KLSAgLyoqCi0gICAqIERlY29kZSBjaHVua2VkIGRhdGEuCi0gICAqIAotICAgKiBEYXRhIGZvcm1hdDoKLSAgICogPHByZT4KLSAgICogICBbQ2h1bmsgU2l6ZV1bQ1JMRl1bRGF0YSBDaHVua11bQ1JMRl1bQ2h1bmsgU2l6ZV1bQ1JMRl1bRGF0YSBDaHVua11bQ1JMRl0uLi5bMF1bQ1JMRl1bT3B0aW9uYWwgRm9vdGVyXVtDUkxGXQotICAgKiA8L3ByZT4KLSAgICogCi0gICAqIEBwYXJhbSBjaHVua2VkRGF0YQotICAgKiBAcGFyYW0gbWVzc2FnZUxvZ2dpbmdCdWZmZXIKLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBkZWNvZGVEYXRhKFN0cmluZyBjaHVua2VkRGF0YSwgU3RyaW5nQnVmZmVyIG1lc3NhZ2VCdWZmZXIpCi0gIHsKLSAgICBib29sZWFuIGVuZE9mRGF0YSA9IGZhbHNlOwotICAgIGludCBuZXh0SW5kZXggPSAwOwotICAgIGludCBwcmV2SW5kZXggPSAwOwotICAgIGludCBjaHVua1NpemUgPSAwOwotCi0gICAgU3RyaW5nIG5leHRDaHVua0RhdGEgPSBudWxsOwotCi0gICAgLy8gUHJvY2VzcyBlYWNoIGNodW5rIG9mIGRhdGEKLSAgICB3aGlsZSAoIShlbmRPZkRhdGEpCi0gICAgICAmJiAobmV4dEluZGV4IDwgY2h1bmtlZERhdGEubGVuZ3RoKCkpCi0gICAgICAmJiAobmV4dEluZGV4ID0gY2h1bmtlZERhdGEuaW5kZXhPZihTb2NrZXRIYW5kbGVyLkNSTEYsIHByZXZJbmRleCkpICE9IC0xKQotICAgIHsKLSAgICAgIC8vIEdldCB0aGUgZGF0YSBsZW5ndGggd2hpY2ggaXMgcmlnaHQgYWZ0ZXIgdGhpcwotICAgICAgU3RyaW5nIGhleENodW5rZWRTaXplID0gY2h1bmtlZERhdGEuc3Vic3RyaW5nKHByZXZJbmRleCwgbmV4dEluZGV4KTsKLQotICAgICAgLy8gRGVjb2RlIGxlbmd0aAotICAgICAgY2h1bmtTaXplID0gSW50ZWdlci5kZWNvZGUoIjB4IiArIGhleENodW5rZWRTaXplKS5pbnRWYWx1ZSgpOwotCi0gICAgICAvLyBERUJVRzoKLSAgICAgIGRlYnVnKCJkZWNvZGVEYXRhIiwgImNodW5rZWRTaXplOiAiICsgY2h1bmtTaXplKTsKLQotICAgICAgLy8gSWYgc2l6ZSBpcyB6ZXJvLCB0aGVuIHdlIGhhdmUgaGl0IHRoZSBlbmQgb2YgdGhlIGNodW5rZWQgZGF0YQotICAgICAgaWYgKGNodW5rU2l6ZSA9PSAwKQotICAgICAgewotICAgICAgICBlbmRPZkRhdGEgPSB0cnVlOwotICAgICAgfQotCi0gICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGFsbCBvZiB0aGUgZGF0YSB0aGVuIHN0b3AKLSAgICAgIGVsc2UgaWYgKG5leHRJbmRleCArIDIgKyBjaHVua1NpemUgPiBjaHVua2VkRGF0YS5sZW5ndGgoKSkKLSAgICAgIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgbmV4dENodW5rRGF0YSA9Ci0gICAgICAgICAgY2h1bmtlZERhdGEuc3Vic3RyaW5nKG5leHRJbmRleCArIDIsIG5leHRJbmRleCArIDIgKyBjaHVua1NpemUpOwotCi0gICAgICAgIC8vIERFQlVHOgotICAgICAgICBkZWJ1ZygiZGVjb2RlRGF0YSIsICJuZXh0Q2h1bmtEYXRhOiAiICsgbmV4dENodW5rRGF0YSk7Ci0KLSAgICAgICAgLy8gR2V0IG1lc3NhZ2UgYmFzZWQgb24gbGVuZ3RoCi0gICAgICAgIGlmIChtZXNzYWdlQnVmZmVyICE9IG51bGwpCi0gICAgICAgICAgbWVzc2FnZUJ1ZmZlci5hcHBlbmQobmV4dENodW5rRGF0YSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIFBvaW50IGF0IHRoZSBuZXh0IGNodW5rIHNpemUKLSAgICAgIHByZXZJbmRleCA9IG5leHRJbmRleCArIDIgKyBjaHVua1NpemUgKyAyOwotICAgIH0KLQotICAgIHJldHVybiBlbmRPZkRhdGE7Ci0gIH0KLQotICAvKioKLSAgICogRGVidWcuCi0gICAqLwotICBwcml2YXRlIHZvaWQgZGVidWcoU3RyaW5nIG1ldGhvZCwgU3RyaW5nIG1lc3NhZ2UpCi0gIHsKLSAgICB0aGlzLnNvY2tldEhhbmRsZXIuZGVidWcoIkNodW5rZWREYXRhIiwgbWV0aG9kLCBtZXNzYWdlKTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL0Nvbm5lY3Rpb25MaXN0ZW5lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9Db25uZWN0aW9uTGlzdGVuZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQ4Y2U5ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL0Nvbm5lY3Rpb25MaXN0ZW5lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3I7Ci0KLS8qKgotICogVGhpcyBpbnRlcmZhY2UgaXMgZm9yIHJlY2VpdmluZyBjb25uZWN0aW9uIGV2ZW50cy4KLSAqIAotICogQGF1dGhvciBTZXJnZXkgU3Vob3J1Y2hraW4KLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgQ29ubmVjdGlvbkxpc3RlbmVyCi17Ci0gIC8qKgotICAgKiBJbnZva2VkIHdoZW4gY29ubmVjdGlvbiBpcyBjbG9zZWQuCi0gICAqIEBwYXJhbSBjb25uZWN0aW9uIHNvY2tldCBjb25uZWN0aW9uLgotICAgKi8KLSAgcHVibGljIHZvaWQgY29ubmVjdGlvbkNsb3NlZChTb2NrZXRDb25uZWN0aW9uIGNvbm5lY3Rpb24pOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9NZXNzYWdlRW50cnlRdWV1ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9NZXNzYWdlRW50cnlRdWV1ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OWNjMDQ5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvTWVzc2FnZUVudHJ5UXVldWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvcjsKLQotaW1wb3J0IGphdmEuaW8uU3RyaW5nUmVhZGVyOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTG9nV3JpdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWVzc2FnZUVudHJ5OwotCi0vKioKLSAqIFRoaXMgY2xhc3MgaXMgdGhlIHF1ZXVlIHRoYXQgaXMgdXNlZCB0byB3cml0ZSByZXF1ZXN0IGFuZCByZXNwb25zZSBtZXNzYWdlcwotICogdG8gdGhlIGxvZyBmaWxlIGluIHRoZSBjb3JyZWN0IG9yZGVyLgotICoKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIE1lc3NhZ2VFbnRyeVF1ZXVlCi17Ci0gIC8qKgotICAgKiBSZXF1ZXN0IHR5cGUgbWVzc2FnZSBlbnRyeSBxdWV1ZS4KLSAgICovCi0gIHByb3RlY3RlZCBWZWN0b3IgcmVxdWVzdExpc3QgPSBuZXcgVmVjdG9yKCk7Ci0KLSAgLyoqCi0gICAqIFJlc3BvbnNlIHR5cGUgbWVzc2FnZSBlbnRyeSBxdWV1ZS4KLSAgICovCi0gIHByb3RlY3RlZCBWZWN0b3IgcmVzcG9uc2VMaXN0ID0gbmV3IFZlY3RvcigpOwotCi0gIC8qKgotICAgKiBNb25pdG9yLgotICAgKi8KLSAgcHJvdGVjdGVkIE1vbml0b3IgbW9uaXRvciA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIExvZyBmaWxlLgotICAgKi8KLSAgcHJvdGVjdGVkIExvZyBsb2cgPSBudWxsOwotCi0gIC8qKgotICAgKiBMb2cgd3JpdGVyLgotICAgKi8KLSAgcHJvdGVjdGVkIExvZ1dyaXRlciBsb2dXcml0ZXIgPSBudWxsOwotCi0gIC8qKgotICAgKiBMaXN0IGxvY2suCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGxpc3RMb2NrID0gImxpc3RMb2NrIjsKLQotICAvKioKLSAgICogTWVzc2FnZSBJRCB3aGljaCBpcyBpbmNyZW1lbnRlZCB3aGVuIGEgbmV3IGxvZyBlbnRyeSBpcyBhZGRlZCB0byB0aGUgbG9nIGZpbGUuCi0gICAqLwotICBwcm90ZWN0ZWQgaW50IG1lc3NhZ2VJZCA9IDE7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBtZXNzYWdlIGVudHJ5IHF1ZXVlLgotICAgKiBAcGFyYW0gbW9uaXRvciBhIG1vbml0b3IuCi0gICAqIEBwYXJhbSBsb2cgdGhlIGxvZy4KLSAgICogQHBhcmFtIGxvZ1dyaXRlciBhIGxvZyB3cml0ZXIuCi0gICAqLwotICBwdWJsaWMgTWVzc2FnZUVudHJ5UXVldWUoTW9uaXRvciBtb25pdG9yLCBMb2cgbG9nLCBMb2dXcml0ZXIgbG9nV3JpdGVyKQotICB7Ci0gICAgLy8gU2F2ZSBpbnB1dCByZWZlcmVuY2VzCi0gICAgdGhpcy5tb25pdG9yID0gbW9uaXRvcjsKLSAgICB0aGlzLmxvZyA9IGxvZzsKLSAgICB0aGlzLmxvZ1dyaXRlciA9IGxvZ1dyaXRlcjsKLSAgfQotCi0gIC8qKgotICAgKiBBZGQgbG9nIGVudHJ5IHRvIHF1ZXVlLgotICAgKiBAcGFyYW0gbWVzc2FnZUVudHJ5IGEgbWVzc2FnZSBlbnRyeS4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaXMgdGhlcmUgaXMgYSBwcm9ibGVtIGFkZGluZyB0aGUgbG9nIAotICAgKiAgICAgICAgIGVudHJ5IHRvIHRoZSBxdWV1ZS4KLSAgICovCi0gIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBhZGRNZXNzYWdlRW50cnkoTWVzc2FnZUVudHJ5IG1lc3NhZ2VFbnRyeSkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBzeW5jaHJvbml6ZWQgKGxpc3RMb2NrKQotICAgIHsKLSAgICAgIC8vIElmIHRoaXMgaXMgYSByZXF1ZXN0IHR5cGUgb2YgbWVzc2FnZSBlbnRyeSwgdGhlbiBhZGQgdG8gcmVxdWVzdCBsaXN0Ci0gICAgICBpZiAobWVzc2FnZUVudHJ5LmdldFR5cGUoKS5lcXVhbHMoTWVzc2FnZUVudHJ5LlRZUEVfUkVRVUVTVCkpCi0gICAgICB7Ci0gICAgICAgIHJlcXVlc3RMaXN0LmFkZChtZXNzYWdlRW50cnkpOwotICAgICAgfQotCi0gICAgICAvLyBPdGhlcndpc2UgdGhpcyBpcyBhIHJlc3BvbnNlIHR5cGUgb2YgbWVzc2FnZSBlbnRyeQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICByZXNwb25zZUxpc3QuYWRkKG1lc3NhZ2VFbnRyeSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gVGVsbCB0aGUgbG9nIGVudHJ5IHdyaXRlciB0aHJlYWQgdG8gcnVuCi0gICAgd3JpdGVGcm9tUXVldWUoKTsKLSAgfQotCi0gIC8qKgotICAgKiBEZXRlcm1pbmUgaWYgYW55IGxvZyBlbnRyaWVzIG5lZWQgdG8gYmUgd3JpdHRlbi4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaXMgdGhlcmUgaXMgYSBwcm9ibGVtIGFkZGluZyBsb2cgZW50cmllcy4KLSAgCi0gICAqLwotICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgd3JpdGVGcm9tUXVldWUoKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBNZXNzYWdlRW50cnkgcmVxdWVzdE1lc3NhZ2VFbnRyeSA9IG51bGw7Ci0gICAgTWVzc2FnZUVudHJ5IHJlc3BvbnNlTWVzc2FnZUVudHJ5ID0gbnVsbDsKLSAgICBib29sZWFuIHJlc3BvbnNlRm91bmQgPSBmYWxzZTsKLQotICAgIC8vIENyZWF0ZSBhcnJheSB0aGF0IHdpbGwgY29udGFpbiBsaXN0IG9mIGluZGV4IHRvIHJlbW92ZSBmcm9tIHJlcXVlc3QgbGlzdAotICAgIGludFtdIHJlcXVlc3RJbmRleExpc3QgPSBuZXcgaW50W3JlcXVlc3RMaXN0LnNpemUoKV07Ci0gICAgaW50IHJlcUluZGV4Q291bnQgPSAwOwotCi0gICAgc3luY2hyb25pemVkIChsaXN0TG9jaykKLSAgICB7Ci0gICAgICAvLyBJZiB0aGVyZSBhcmUgZW50cmllcyBpbiB0aGUgcmVxdWVzdCBxdWV1ZSwKLSAgICAgIC8vIHRoZW4gdHJ5IHRvIG1hdGNoIHRoZW0gd2l0aCBlbnRyaWVzIGluIHRoZSByZXNwb25zZSBxdWV1ZQotICAgICAgZm9yIChpbnQgcmVxSW5kZXggPSAwOyByZXFJbmRleCA8IHJlcXVlc3RMaXN0LnNpemUoKTsgcmVxSW5kZXgrKykKLSAgICAgIHsKLSAgICAgICAgLy8gR2V0IHJlcXVlc3QgbG9nIGVudHJ5Ci0gICAgICAgIHJlcXVlc3RNZXNzYWdlRW50cnkgPSAoTWVzc2FnZUVudHJ5KSByZXF1ZXN0TGlzdC5lbGVtZW50QXQocmVxSW5kZXgpOwotCi0gICAgICAgIC8vIENoZWNrIGVhY2ggcmVzcG9uc2UgbG9nIGVudHJ5IHRvIHNlZSBpZiB0aGUgY29udmVyc2F0aW9uSWQgbWF0Y2hlcwotICAgICAgICByZXNwb25zZUZvdW5kID0gZmFsc2U7Ci0gICAgICAgIGZvciAoaW50IHJlc3BJbmRleCA9IDA7Ci0gICAgICAgICAgcmVzcEluZGV4IDwgcmVzcG9uc2VMaXN0LnNpemUoKSAmJiAhcmVzcG9uc2VGb3VuZDsKLSAgICAgICAgICByZXNwSW5kZXgrKykKLSAgICAgICAgewotICAgICAgICAgIC8vIEdldCByZXNwb25zZSBsb2cgZW50cnkKLSAgICAgICAgICByZXNwb25zZU1lc3NhZ2VFbnRyeSA9Ci0gICAgICAgICAgICAoTWVzc2FnZUVudHJ5KSByZXNwb25zZUxpc3QuZWxlbWVudEF0KHJlc3BJbmRleCk7Ci0KLSAgICAgICAgICAvLyBJZiB0aGUgcmVxdWVzdCBhbmQgcmVzcG9uc2UgaGF2ZSB0aGUgc2FtZSBjb252ZXJzYXRpb25JZCwKLSAgICAgICAgICAvLyB0aGVuIHdyaXRlIHRoZW0gb3V0IHRvIHRoZSBsb2cgZmlsZQotICAgICAgICAgIGlmIChyZXF1ZXN0TWVzc2FnZUVudHJ5Ci0gICAgICAgICAgICAuZ2V0Q29udmVyc2F0aW9uSWQoKQotICAgICAgICAgICAgLmVxdWFscyhyZXNwb25zZU1lc3NhZ2VFbnRyeS5nZXRDb252ZXJzYXRpb25JZCgpKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXNwb25zZUZvdW5kID0gdHJ1ZTsKLQotICAgICAgICAgICAgLy8gU2V0IHRoZSBpZCBmb3IgdGhlIGxvZyBlbnRyaWVzCi0gICAgICAgICAgICByZXF1ZXN0TWVzc2FnZUVudHJ5LnNldElkKGdldE5leHRNZXNzYWdlSWQoKSk7Ci0gICAgICAgICAgICByZXNwb25zZU1lc3NhZ2VFbnRyeS5zZXRJZChnZXROZXh0TWVzc2FnZUlkKCkpOwotCi0gICAgICAgICAgICAvLyBXcml0ZSBvdXQgcmVxdWVzdCBhbmQgdGhlbiByZXNwb25zZQotICAgICAgICAgICAgLy89PT09IFNTIHN0YXJ0IDogd2hhdCB0aGlzIGxpbmUgaXMgdXNlZCBmb3I/Pz8gLSBjYXVzZXMgbWVtb3J5IGxlYWssIGFzIG5vIHJlbW92ZUxvZ0VudHJ5IGlzIGNhbGxlZCA9PT09Ci0gICAgICAgICAgICAvLyAgICAgICAgICAgIGxvZy5hZGRMb2dFbnRyeShyZXF1ZXN0TWVzc2FnZUVudHJ5KTsKLSAgICAgICAgICAgIC8vPT09PSBTUyBlbmQgPT09Ci0gICAgICAgICAgICBTdHJpbmdSZWFkZXIgcmVxdWVzdFJlYWRlciA9Ci0gICAgICAgICAgICAgIG5ldyBTdHJpbmdSZWFkZXIocmVxdWVzdE1lc3NhZ2VFbnRyeS50b1hNTFN0cmluZygiIikpOwotICAgICAgICAgICAgbG9nV3JpdGVyLndyaXRlKHJlcXVlc3RSZWFkZXIpOwotCi0gICAgICAgICAgICAvLyBEaXNwbGF5IG1lc3NhZ2UKLSAgICAgICAgICAgIHByaW50TWVzc2FnZShyZXF1ZXN0TWVzc2FnZUVudHJ5KTsKLQotICAgICAgICAgICAgLy8gV3JpdGUgb3V0IHJlc3BvbnNlCi0gICAgICAgICAgICAvLz09PT0gU1Mgc3RhcnQgOiB3aGF0IHRoaXMgbGluZSBpcyB1c2VkIGZvcj8/PyAtIGNhdXNlcyBtZW1vcnkgbGVhaywgYXMgbm8gcmVtb3ZlTG9nRW50cnkgaXMgY2FsbGVkID09PT0KLSAgICAgICAgICAgIC8vICAgICAgICAgICAgbG9nLmFkZExvZ0VudHJ5KHJlc3BvbnNlTWVzc2FnZUVudHJ5KTsKLSAgICAgICAgICAgIC8vPT09PSBTUyBlbmQgPT09Ci0gICAgICAgICAgICBTdHJpbmdSZWFkZXIgcmVzcG9uc2VSZWFkZXIgPQotICAgICAgICAgICAgICBuZXcgU3RyaW5nUmVhZGVyKHJlc3BvbnNlTWVzc2FnZUVudHJ5LnRvWE1MU3RyaW5nKCIiKSk7Ci0gICAgICAgICAgICBsb2dXcml0ZXIud3JpdGUocmVzcG9uc2VSZWFkZXIpOwotCi0gICAgICAgICAgICAvLyBEaXNwbGF5IG1lc3NhZ2UKLSAgICAgICAgICAgIHByaW50TWVzc2FnZShyZXNwb25zZU1lc3NhZ2VFbnRyeSk7Ci0KLSAgICAgICAgICAgIC8vIEFkZCByZXF1ZXN0IHRvIGxpc3Qgc28gdGhhdCBpdCBjYW4gYmUgcmVtb3ZlZCBsYXRlcgotICAgICAgICAgICAgcmVxdWVzdEluZGV4TGlzdFtyZXFJbmRleENvdW50KytdID0gcmVxSW5kZXg7Ci0KLSAgICAgICAgICAgIC8vIFJlbW92ZSBsb2cgZW50cnkgZnJvbSByZXNwb25zZSBsaXN0Ci0gICAgICAgICAgICByZXNwb25zZUxpc3QucmVtb3ZlKHJlc3BJbmRleCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8vIFJlbW92ZSByZXF1ZXN0cyB0aGF0IHdlcmUgd3JpdHRlbiBvdXQKLSAgICAgIGZvciAoaW50IGNvdW50ID0gMDsgY291bnQgPCByZXFJbmRleENvdW50OyBjb3VudCsrKQotICAgICAgICByZXF1ZXN0TGlzdC5yZW1vdmUocmVxdWVzdEluZGV4TGlzdFtjb3VudF0pOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIG5leHQgbWVzc2FnZSBpZGVudGlmaWVyLgotICAgKiBAcmV0dXJuIHRoZSBuZXh0IG1lc3NhZ2UgaWRlbnRpZmllci4KLSAgICovCi0gIHByb3RlY3RlZCBzeW5jaHJvbml6ZWQgU3RyaW5nIGdldE5leHRNZXNzYWdlSWQoKQotICB7Ci0gICAgcmV0dXJuIFN0cmluZy52YWx1ZU9mKG1lc3NhZ2VJZCsrKTsKLSAgfQotCi0gIC8qKgotICAgKiBEaXNwbGF5IG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBtZXNzYWdlRW50cnkgYSBtZXNzYWdlIGVudHJ5LgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgcHJpbnRNZXNzYWdlKE1lc3NhZ2VFbnRyeSBtZXNzYWdlRW50cnkpCi0gIHsKLSAgICAvLyBEaXNwbGF5IG1lc3NhZ2UKLSAgICBtb25pdG9yLnByaW50TWVzc2FnZSgKLSAgICAgICJsb2cwMSIsCi0gICAgICBtZXNzYWdlRW50cnkuZ2V0SWQoKQotICAgICAgICArICIsICIKLSAgICAgICAgKyBtZXNzYWdlRW50cnkuZ2V0VHlwZSgpCi0gICAgICAgICsgIiwgIgotICAgICAgICArIG1lc3NhZ2VFbnRyeS5nZXRTZW5kZXJIb3N0QW5kUG9ydCgpLAotICAgICAgIkxvZyBtZXNzYWdlIGVudHJ5IC0gIElEOiAiCi0gICAgICAgICsgbWVzc2FnZUVudHJ5LmdldElkKCkKLSAgICAgICAgKyAiLCBUeXBlOiAiCi0gICAgICAgICsgbWVzc2FnZUVudHJ5LmdldFR5cGUoKQotICAgICAgICArICIsIFNlbmRlcjogIgotICAgICAgICArIG1lc3NhZ2VFbnRyeS5nZXRTZW5kZXJIb3N0QW5kUG9ydCgpKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9Nb25pdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL01vbml0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTllMmZkNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL01vbml0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvcjsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1JlYWRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5Ub29sSW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuRG9jdW1lbnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTG9nV3JpdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yLmNvbmZpZy5NYW5JblRoZU1pZGRsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuTW9uaXRvckNvbmZpZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuUmVkaXJlY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuTWVzc2FnZUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVGVzdFV0aWxzOwotCi0vKioKLSAqIE1lc3NhZ2UgTW9uaXRvci4KLSAqCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnIudXMuaWJtLmNvbSkKLSAqLwotCi1wdWJsaWMgY2xhc3MgTW9uaXRvcgotewotICAvKioKLSAgICogTWVzc2FnZSBsaXN0LgotICAgKi8KLSAgcHJvdGVjdGVkIE1lc3NhZ2VMaXN0IG1lc3NhZ2VMaXN0ID0gbnVsbDsKLQotICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgUkVTT1VSQ0VfQlVORExFX05BTUUgPQotICAgICJvcmcud3NpLnRlc3QubW9uaXRvci5Nb25pdG9yIjsKLQotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBVU0FHRV9NRVNTQUdFID0KLSAgICAiVXNhZ2U6IE1vbml0b3IgLWNvbmZpZyA8Y29uZmlnRmlsZW5hbWU+IjsKLQotICAvKioKLSAgICogQ29udmVyc3RhdGlvbiBJRC4KLSAgICovCi0gIHByaXZhdGUgaW50IGNvbnZlcnNhdGlvbklkID0gMTsKLQotICBwcml2YXRlIExvZyBsb2cgPSBudWxsOwotICBwcml2YXRlIExvZ1dyaXRlciBsb2dXcml0ZXIgPSBudWxsOwotICBwcml2YXRlIE1vbml0b3JDb25maWcgbW9uaXRvckNvbmZpZyA9IG51bGw7Ci0KLSAgLyoqCi0gICogVG9vbCBpbmZvcm1hdGlvbi4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVE9PTF9OQU1FID0gIk1vbml0b3IiOwotCi0gIHByb3RlY3RlZCBUb29sSW5mbyB0b29sSW5mbyA9IG51bGw7Ci0KLSAgcHJvdGVjdGVkIFZlY3RvciBsaXN0ZW5lckxpc3QgPSBuZXcgVmVjdG9yKCk7Ci0KLSAgcHJvdGVjdGVkIE1lc3NhZ2VFbnRyeVF1ZXVlIG1lc3NhZ2VFbnRyeVF1ZXVlID0gbnVsbDsKLQotICAvKioKLSAgICogTWVzc2FnZSBtb25pdG9yLgotICAgKiBAcGFyYW0gYXJncyBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBhIHByb2JsZW0gY3JlYXRpbmcgYSBNb25pdG9yIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBNb25pdG9yKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIENyZWF0ZSBtZXNzYWdlIGxpc3QKLSAgICB0aGlzLm1lc3NhZ2VMaXN0ID0gbmV3IE1lc3NhZ2VMaXN0KFJFU09VUkNFX0JVTkRMRV9OQU1FKTsKLQotICAgIC8vIFRvb2wgaW5mb3JtYXRpb24KLSAgICB0b29sSW5mbyA9IG5ldyBUb29sSW5mbyhUT09MX05BTUUpOwotCi0gICAgLy8gQ3JlYXRlIGRvY3VtZW50IGZhY3RvcnkKLSAgICBEb2N1bWVudEZhY3RvcnkgZG9jdW1lbnRGYWN0b3J5ID0gRG9jdW1lbnRGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0KLSAgICAvLyBHZXQgbmV3IGNvbmZpZyBvYmplY3QKLSAgICBtb25pdG9yQ29uZmlnID0gZG9jdW1lbnRGYWN0b3J5Lm5ld01vbml0b3JDb25maWcoKTsKLSAgICBtb25pdG9yQ29uZmlnLmluaXQodGhpcy5tZXNzYWdlTGlzdCk7Ci0KLSAgICAvLyBQYXJzZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzCi0gICAgbW9uaXRvckNvbmZpZy5wYXJzZUFyZ3MoYXJncyk7Ci0KLSAgICBTdHJpbmcgbG9nTG9jYXRpb24gPSBtb25pdG9yQ29uZmlnLmdldExvZ0xvY2F0aW9uKCk7Ci0gICAgaWYgKGxvZ0xvY2F0aW9uLmluZGV4T2YoV1NJQ29uc3RhbnRzLlBBVEhfU0VQQVJBVE9SKSA+IC0xKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBXU0lFeGNlcHRpb24oCi0gICAgICAgIG1lc3NhZ2VMaXN0LmdldE1lc3NhZ2UoCi0gICAgICAgICAgImNvbmZpZzExIiwKLSAgICAgICAgICBtb25pdG9yQ29uZmlnLmdldExvZ0xvY2F0aW9uKCksCi0gICAgICAgICAgIlRoZSBsb2cgZmlsZSBsb2NhdGlvbiB2YWx1ZSBjYW5ub3QgY29udGFpbiB0aGUgcGFzcyBzZXBhcmF0b3IgY2hhcmFjdGVyOiIpKTsKLSAgICB9Ci0KLSAgICBGaWxlIGZpbGUgPSBudWxsOwotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdldCBmaWxlIG9iamVjdCBmb3IgbG9nIGZpbGUKLSAgICAgIGZpbGUgPSBuZXcgRmlsZShtb25pdG9yQ29uZmlnLmdldExvZ0xvY2F0aW9uKCkpOwotICAgIH0KLQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKAotICAgICAgICBtZXNzYWdlTGlzdC5nZXRNZXNzYWdlKCJjb25maWcwNyIsICJDb3VsZCBub3QgZ2V0IGxvZyBmaWxlIGxvY2F0aW9uLiIpLAotICAgICAgICBlKTsKLSAgICB9Ci0KLSAgICAvLyBJZiByZXBsYWNlIGZsYWcgaXMgZmFsc2UgYW5kIGZpbGUgZXhpc3RzLCB0aGVuIHRocm93IGV4Y2VwdGlvbgotICAgIGlmIChmaWxlLmV4aXN0cygpICYmICFtb25pdG9yQ29uZmlnLmdldFJlcGxhY2VMb2coKSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICBtZXNzYWdlTGlzdC5nZXRNZXNzYWdlKAotICAgICAgICAgICJjb25maWcwOCIsCi0gICAgICAgICAgbW9uaXRvckNvbmZpZy5nZXRMb2dMb2NhdGlvbigpLAotICAgICAgICAgICJMb2cgZmlsZSBhbHJlYWR5IGV4aXN0czoiKSk7Ci0gICAgfQotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gQ3JlYXRlIG91dHB1dCBmaWxlCi0gICAgICBsb2cgPSBkb2N1bWVudEZhY3RvcnkubmV3TG9nKCk7Ci0KLSAgICAgIC8vIFNldCBzdHlsZSBzaGVldCBzdHJpbmcKLSAgICAgIGxvZy5zZXRTdHlsZVNoZWV0U3RyaW5nKAotICAgICAgICBtb25pdG9yQ29uZmlnLmdldEFkZFN0eWxlU2hlZXQoKS5nZXRTdHlsZVNoZWV0U3RyaW5nKCkpOwotCi0gICAgICAvLyBHZXQgbG9nIHdyaXRlcgotICAgICAgbG9nV3JpdGVyID0gZG9jdW1lbnRGYWN0b3J5Lm5ld0xvZ1dyaXRlcigpOwotICAgICAgbG9nV3JpdGVyLnNldFdyaXRlcihtb25pdG9yQ29uZmlnLmdldExvZ0xvY2F0aW9uKCkpOwotCi0gICAgICAvLyBXcml0ZSBzdGFydCBvZiBsb2cgZmlsZQotICAgICAgbG9nV3JpdGVyLndyaXRlKG5ldyBTdHJpbmdSZWFkZXIobG9nLmdldFN0YXJ0WE1MU3RyaW5nKCIiKSkpOwotCi0gICAgICAvLyBXcml0ZSBtb25pdG9yIHRvb2wgaW5mb3JtYXRpb24KLSAgICAgIGxvZ1dyaXRlci53cml0ZShuZXcgU3RyaW5nUmVhZGVyKHRvWE1MU3RyaW5nKCIiKSkpOwotCi0gICAgICAvLyBDcmVhdGUgbG9nIGVudHJ5IHF1ZXVlCi0gICAgICBtZXNzYWdlRW50cnlRdWV1ZSA9IG5ldyBNZXNzYWdlRW50cnlRdWV1ZSh0aGlzLCBsb2csIGxvZ1dyaXRlcik7Ci0gICAgfQotCi0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBXU0lFeGNlcHRpb24oCi0gICAgICAgIG1lc3NhZ2VMaXN0LmdldE1lc3NhZ2UoCi0gICAgICAgICAgImVycm9yMDMiLAotICAgICAgICAgICJDb3VsZCBub3QgY3JlYXRlIGxvZyBvciBsb2cgd3JpdGVyLiIpLAotICAgICAgICBlKTsKLSAgICB9Ci0KLSAgICAvLyBHZXQgbWFuSW5UaGVNaWRkbGUgc2V0dGluZ3MKLSAgICBNYW5JblRoZU1pZGRsZSBtYW5JblRoZU1pZGRsZSA9IG1vbml0b3JDb25maWcuZ2V0TWFuSW5UaGVNaWRkbGUoKTsKLQotICAgIC8vIEdldCBsaXN0IG9mIHJlZGlyZWN0cwotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gbWFuSW5UaGVNaWRkbGUuZ2V0UmVkaXJlY3RMaXN0KCkuaXRlcmF0b3IoKTsKLQotICAgIC8vIFByb2Nlc3MgZWFjaCByZWRpcmVjdAotICAgIFJlZGlyZWN0IHJlZGlyZWN0OwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgLy8gR2V0IG5leHQgcmVkaXJlY3QKLSAgICAgIHJlZGlyZWN0ID0gKFJlZGlyZWN0KSBpdGVyYXRvci5uZXh0KCk7Ci0KLSAgICAgIC8vIENyZWF0ZSBzZXJ2ZXIgc29ja2V0IHNvY2tldCBsaXN0ZW5lcgotICAgICAgbGlzdGVuZXJMaXN0LmFkZChuZXcgU2VydmVyU29ja2V0TGlzdGVuZXIodGhpcywgcmVkaXJlY3QpKTsKLSAgICB9Ci0KLSAgICAvLyBBZGQgc2h1dGRvd24gaG9vawotICAgIFJ1bnRpbWUuZ2V0UnVudGltZSgpLmFkZFNodXRkb3duSG9vayhuZXcgU2h1dGRvd25Ib29rKCkpOwotCi0gICAgLy8gQ3JlYXRlIGFuZCBzdGFydCBjb25zb2xlCi0gICAgQ29uc29sZSBjb25zb2xlID0gbmV3IENvbnNvbGUoKTsKLSAgICBjb25zb2xlLnN0YXJ0KCk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBtb25pdG9yIGNvbmZpZyBmaWxlLgotICAgKiBAcmV0dXJuIHRoZSBtb25pdG9yIGNvbmZpZyBmaWxlLgotICAgKi8KLSAgcHVibGljIE1vbml0b3JDb25maWcgZ2V0TW9uaXRvckNvbmZpZygpCi0gIHsKLSAgICByZXR1cm4gbW9uaXRvckNvbmZpZzsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIGxvZyBvYmplY3QuCi0gICAqIEByZXR1cm4gdGhlIGxvZyBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgTG9nIGdldExvZygpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5sb2c7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBsb2cgZW50cnkgcXVldWUgb2JqZWN0LgotICAgKiBAcmV0dXJuIHRoZSBsb2cgZW50cnkgcXVldWUgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIE1lc3NhZ2VFbnRyeVF1ZXVlIGdldE1lc3NhZ2VFbnRyeVF1ZXVlKCkKLSAgewotICAgIHJldHVybiB0aGlzLm1lc3NhZ2VFbnRyeVF1ZXVlOwotICB9Ci0KLSAgLyoqCi0gICAqIFRlcm1pbmF0ZSB0aGUgbW9uaXRvci4KLSAgICovCi0gIHZvaWQgZXhpdE1vbml0b3IoKQotICB7Ci0gICAgcHJpbnRNZXNzYWdlKCJzdG9wcGluZzAxIiwgIlN0b3BwaW5nIHRoZSBtb25pdG9yLi4uIik7Ci0gICAgU3lzdGVtLmV4aXQoMCk7Ci0gIH0KLQotICAvKioKLSAgICogU3RvcCB0aGUgbW9uaXRvciBiZWNhdXNlIGFuIGV4Y2VwdGlvbiBvY2N1cnJlZC4KLSAgICovCi0gIHZvaWQgZXhpdE1vbml0b3IoRXhjZXB0aW9uIGUpCi0gIHsKLSAgICAvLyBEaXNwbGF5IGVycm9yIG1lc3NhZ2UKLSAgICBwcmludE1lc3NhZ2UoCi0gICAgICAic3RvcHBpbmcwMiIsCi0gICAgICAiU3RvcHBpbmcgbW9uaXRvciBiZWNhdXNlIGFuIGV4Y2VwdGlvbiBvY2N1cnJlZC4iKTsKLSAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkVYQ0VQVElPTjogIiArIGUudG9TdHJpbmcoKSk7Ci0gICAgaWYgKHRoaXMubW9uaXRvckNvbmZpZy5nZXRWZXJib3NlT3B0aW9uKCkpCi0gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCi0gICAgLy8gRXhpdCBtb25pdG9yCi0gICAgZXhpdE1vbml0b3IoKTsKLSAgfQotCi0gIC8qKgotICAgKiBTdG9wIHRoZSBtb25pdG9yLgotICAgKi8KLSAgdm9pZCBzdG9wTW9uaXRvcigpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBHZXQgbGlzdCBvZiBsaXN0ZW5lcnMgdG8gc3RvcAotICAgICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBsaXN0ZW5lckxpc3QuaXRlcmF0b3IoKTsKLQotICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgKChTZXJ2ZXJTb2NrZXRMaXN0ZW5lcikgaXRlcmF0b3IubmV4dCgpKS5zaHV0ZG93bigpOwotICAgICAgfQotCi0gICAgICAvLyBXYWl0IGZvciB0aGUgY2xlYW51cCB0aW1lb3V0IHNlY29uZHMKLSAgICAgIFRocmVhZC5zbGVlcChtb25pdG9yQ29uZmlnLmdldFRpbWVvdXQoKSAqIDEwMDApOwotCi0gICAgICAvLyBXcml0ZSBlbmQgb2YgbG9nIGZpbGUKLSAgICAgIGlmIChsb2dXcml0ZXIgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgbG9nV3JpdGVyLndyaXRlKG5ldyBTdHJpbmdSZWFkZXIobG9nLmdldEVuZFhNTFN0cmluZygiIikpKTsKLQotICAgICAgICBsb2dXcml0ZXIuY2xvc2UoKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gQUREOiBIb3cgc2hvdWxkIHRoaXMgZXhlY3B0aW9uIGJlIGhhbmRsZWQ/Ci0gICAgfQotCi0gICAgcHJpbnRNZXNzYWdlKCJzdG9wcGVkMDEiLCAiTW9uaXRvciBzdG9wcGVkLiIpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbW1hbmQgbGluZSBpbnRlcmZhY2UuCi0gICAqIEBwYXJhbSBhcmdzIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQotICB7Ci0gICAgTW9uaXRvciBtb25pdG9yID0gbnVsbDsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIGlmIChhcmdzLmxlbmd0aCA8IDIpCi0gICAgICB7Ci0gICAgICAgIHN0YXRpY1ByaW50TWVzc2FnZSgidXNhZ2UwMSIsIFVTQUdFX01FU1NBR0UpOwotICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKLSAgICAgIH0KLQotICAgICAgaWYgKCFhcmdzWzBdLmVxdWFsc0lnbm9yZUNhc2UoIi1jb25maWciKSkKLSAgICAgIHsKLSAgICAgICAgc3RhdGljUHJpbnRNZXNzYWdlKCJ1c2FnZTAxIiwgVVNBR0VfTUVTU0FHRSk7Ci0gICAgICAgIFN5c3RlbS5leGl0KDEpOwotICAgICAgfQotCi0gICAgICAvLyBSdW4gdGhlIG1vbml0b3IKLSAgICAgIG1vbml0b3IgPSBuZXcgTW9uaXRvcihhcmdzKTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgYm9vbGVhbiBwcmludFN0YWNrVHJhY2UgPSB0cnVlOwotICAgICAgU3RyaW5nIG1lc3NhZ2VJRDsKLSAgICAgIFN0cmluZyBkZWZhdWx0TWVzc2FnZTsKLSAgICAgIFN0cmluZyBtZXNzYWdlRGF0YTsKLQotICAgICAgaWYgKChlIGluc3RhbmNlb2YgV1NJRmlsZU5vdEZvdW5kRXhjZXB0aW9uKQotICAgICAgICB8fCAoZSBpbnN0YW5jZW9mIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbikpCi0gICAgICB7Ci0gICAgICAgIHByaW50U3RhY2tUcmFjZSA9IGZhbHNlOwotICAgICAgICBtZXNzYWdlSUQgPSAiZXJyb3IwMSI7Ci0gICAgICAgIGRlZmF1bHRNZXNzYWdlID0gIk1vbml0b3IgRXJyb3I6IjsKLSAgICAgICAgbWVzc2FnZURhdGEgPSBlLmdldE1lc3NhZ2UoKTsKLSAgICAgIH0KLQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBwcmludFN0YWNrVHJhY2UgPSB0cnVlOwotICAgICAgICBtZXNzYWdlSUQgPSAiZXJyb3IwMiI7Ci0gICAgICAgIGRlZmF1bHRNZXNzYWdlID0gIk1vbml0b3IgU3RvcHBlZCBCeSBFeGNlcHRpb246IjsKLSAgICAgICAgbWVzc2FnZURhdGEgPSBlLnRvU3RyaW5nKCk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChtb25pdG9yICE9IG51bGwpCi0gICAgICAgIG1vbml0b3IucHJpbnRNZXNzYWdlKG1lc3NhZ2VJRCwgbWVzc2FnZURhdGEsIGRlZmF1bHRNZXNzYWdlKTsKLSAgICAgIGVsc2UKLSAgICAgICAgTW9uaXRvci5zdGF0aWNQcmludE1lc3NhZ2UobWVzc2FnZUlELCBtZXNzYWdlRGF0YSwgZGVmYXVsdE1lc3NhZ2UpOwotCi0gICAgICBpZiAocHJpbnRTdGFja1RyYWNlKQotICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCi0gICAgICAvLyBFeGl0Ci0gICAgICBpZiAobW9uaXRvciAhPSBudWxsKQotICAgICAgICBtb25pdG9yLmV4aXRNb25pdG9yKCk7Ci0gICAgICBlbHNlCi0gICAgICAgIFN5c3RlbS5leGl0KDIpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBQcmludCBhIG1lc3NhZ2UgZnJvbSB0aGUgcmVzb3VyY2UgYnVuZGxlLgotICAgKiBAcGFyYW0ga2V5IGEga2V5LgotICAgKiBAcGFyYW0gZGVmYXVsdE1lc3NhZ2UgYSBkZWZhdWx0IG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgdm9pZCBwcmludE1lc3NhZ2UoU3RyaW5nIGtleSwgU3RyaW5nIGRlZmF1bHRNZXNzYWdlKQotICB7Ci0gICAgcHJpbnRNZXNzYWdlKGtleSwgbnVsbCwgZGVmYXVsdE1lc3NhZ2UpOwotICB9Ci0KLSAgLyoqCi0gICAqIFByaW50IGEgbWVzc2FnZSBmcm9tIHRoZSByZXNvdXJjZSBidW5kbGUuCi0gICAqIEBwYXJhbSBrZXkgYSBrZXkuCi0gICAqIEBwYXJhbSBtZXNzYWdlRGF0YSBtZXNzYWdlIGRhdGEuCi0gICAqIEBwYXJhbSBkZWZhdWx0TWVzc2FnZSBhIGRlZmF1bHQgbWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHByaW50TWVzc2FnZSgKLSAgICBTdHJpbmcga2V5LAotICAgIFN0cmluZyBtZXNzYWdlRGF0YSwKLSAgICBTdHJpbmcgZGVmYXVsdE1lc3NhZ2UpCi0gIHsKLSAgICBtZXNzYWdlTGlzdC5wcmludE1lc3NhZ2Uoa2V5LCBtZXNzYWdlRGF0YSwgZGVmYXVsdE1lc3NhZ2UpOwotICB9Ci0KLSAgLyoqCi0gICAqIFByaW50IG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBrZXkgYSBrZXkuCi0gICAqIEBwYXJhbSBkZWZhdWx0TWVzc2FnZSBhIGRlZmF1bHQgbWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBzdGF0aWNQcmludE1lc3NhZ2UoU3RyaW5nIGtleSwgU3RyaW5nIGRlZmF1bHRNZXNzYWdlKQotICB7Ci0gICAgc3RhdGljUHJpbnRNZXNzYWdlKGtleSwgbnVsbCwgZGVmYXVsdE1lc3NhZ2UpOwotICB9Ci0KLSAgLyoqCi0gICAqIFByaW50IG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBrZXkgYSBrZXkuCi0gICAqIEBwYXJhbSBtZXNzYWdlRGF0YSBtZXNzYWdlIGRhdGEuCi0gICAqIEBwYXJhbSBkZWZhdWx0TWVzc2FnZSBhIGRlZmF1bHQgbWVzc2FnZS4KLSAgCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgc3RhdGljUHJpbnRNZXNzYWdlKAotICAgIFN0cmluZyBrZXksCi0gICAgU3RyaW5nIG1lc3NhZ2VEYXRhLAotICAgIFN0cmluZyBkZWZhdWx0TWVzc2FnZSkKLSAgewotICAgIE1lc3NhZ2VMaXN0LnByaW50TWVzc2FnZSgKLSAgICAgIFJFU09VUkNFX0JVTkRMRV9OQU1FLAotICAgICAga2V5LAotICAgICAgbWVzc2FnZURhdGEsCi0gICAgICBkZWZhdWx0TWVzc2FnZSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBuZXh0IGNvbnZlcnNhdGlvbiBpZGVudGlmaWVyLgotICAgKiBAcmV0dXJuIHRoZSBuZXh0IGNvbnZlcnNhdGlvbiBpZGVudGlmaWVyLgotICAgKi8KLSAgc3luY2hyb25pemVkIGludCBnZXROZXh0Q29udmVyc2F0aW9uSWQoKQotICB7Ci0gICAgcmV0dXJuIGNvbnZlcnNhdGlvbklkKys7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJuIFhNTCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuCi0gICAqIEBwYXJhbSBuYW1lc3BhY2VOYW1lIG5hbWVzcGFjZSBwcmVmaXguCi0gICAqIEByZXR1cm4gWE1MIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9YTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgLy8gU3RhcnQKLSAgICBwdy5wcmludCh0b29sSW5mby5nZXRTdGFydFhNTFN0cmluZyhuYW1lc3BhY2VOYW1lKSk7Ci0KLSAgICAvLyBDb25maWcKLSAgICBwdy5wcmludCgKLSAgICAgIG1vbml0b3JDb25maWcudG9YTUxTdHJpbmcoV1NJQ29uc3RhbnRzLk5TX05BTUVfV1NJX01PTklUT1JfQ09ORklHKSk7Ci0KLSAgICAvLyBFbmQKLSAgICBwdy5wcmludGxuKHRvb2xJbmZvLmdldEVuZFhNTFN0cmluZyhuYW1lc3BhY2VOYW1lKSk7Ci0KLSAgICByZXR1cm4gc3cudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qKgotICAgKiBTaHV0ZG93biBob29rLgotICAgKi8KLSAgY2xhc3MgU2h1dGRvd25Ib29rIGV4dGVuZHMgVGhyZWFkCi0gIHsKLSAgICAvKioKLSAgICAgKiBSdW4gc2h1dGRvd24gcHJvY2VkdXJlLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHJ1bigpCi0gICAgewotICAgICAgc3RvcE1vbml0b3IoKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUnVuIGNvbW1hbmQgZnJvbSBjb25zb2xlLgotICAgKi8KLSAgY2xhc3MgQ29uc29sZSBleHRlbmRzIFRocmVhZAotICB7Ci0gICAgLyoqCi0gICAgICogUHJvbXB0IHVzZXIgYW5kIHdhaXQgZm9yIGlucHV0LgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHJ1bigpCi0gICAgewotICAgICAgLy8gR2V0IHRoZSBleGl0IHN0cmluZwotICAgICAgU3RyaW5nIGV4aXRTdHJpbmcgPSBtZXNzYWdlTGlzdC5nZXRNZXNzYWdlKCJleGl0MDEiLCAiZXhpdCIpOwotCi0gICAgICAvLyBEaXNwbGF5IG9wdGlvbnMgYW5kIGhvdyB0byBzdG9wIGFwcGxpY2F0aW9uCi0gICAgICBUZXN0VXRpbHMucHJpbnRUb29sSW5mbyh0b29sSW5mbyk7Ci0gICAgICBTeXN0ZW0ub3V0LnByaW50KG1vbml0b3JDb25maWcudG9TdHJpbmcoKSk7Ci0gICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAiKTsKLSAgICAgIHByaW50TWVzc2FnZSgKLSAgICAgICAgInN0YXJ0MDEiLAotICAgICAgICAiVGhlICIKLSAgICAgICAgICArIHRvb2xJbmZvLmdldE5hbWUoKQotICAgICAgICAgICsgIiB0b29sIGlzIHJlYWR5IHRvIGludGVyY2VwdCBhbmQgbG9nIHdlYiBzZXJ2aWNlIG1lc3NhZ2VzLiIpOwotICAgICAgcHJpbnRNZXNzYWdlKAotICAgICAgICAic3RhcnQwMiIsCi0gICAgICAgICJUeXBlIFwiZXhpdFwiIHRvIHN0b3AgdGhlICIgKyB0b29sSW5mby5nZXROYW1lKCkgKyAiLiIpOwotICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgIik7Ci0KLSAgICAgIC8vIEdldCB0aGUgdGltZSB0byBzdG9wIGFjY2VwdGluZyBjb25uZWN0aW9ucwotICAgICAgbG9uZyBzdG9wVGltZSA9Ci0gICAgICAgIFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpICsgKG1vbml0b3JDb25maWcuZ2V0TG9nRHVyYXRpb24oKSAqIDEwMDApOwotICAgICAgLy8gU1MKLQotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIC8vIEdldCBzdGRpbiBhcyBhIGJ1ZmZlcmVkIHJlYWRlcgotICAgICAgICBCdWZmZXJlZFJlYWRlciByZWFkZXIgPQotICAgICAgICAgIG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoU3lzdGVtLmluKSk7Ci0KLSAgICAgICAgLy8gUHJvY2VzcyBpbnB1dCBmcm9tIGNvbnNvbGUKLSAgICAgICAgYm9vbGVhbiBleGl0ID0gZmFsc2U7Ci0gICAgICAgIHdoaWxlICgoIWV4aXQpICYmIChTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSA8IHN0b3BUaW1lKSkKLSAgICAgICAgeyAvLyBTUwotICAgICAgICAgIC8vIFNsZWVwCi0gICAgICAgICAgVGhyZWFkLnNsZWVwKDUwMCk7Ci0KLSAgICAgICAgICAvLyBDaGVjayBmb3IgdXNlciBpbnB1dAotICAgICAgICAgIGlmIChyZWFkZXIucmVhZHkoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocmVhZGVyLnJlYWRMaW5lKCkuZXF1YWxzSWdub3JlQ2FzZShleGl0U3RyaW5nKSkKLSAgICAgICAgICAgICAgZXhpdCA9IHRydWU7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgLy8gQUREOiBIb3cgc2hvdWxkIHRoaXMgYmUgaGFuZGxlZD8KLSAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKGUudG9TdHJpbmcoKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIEV4aXQKLSAgICAgIGV4aXRNb25pdG9yKCk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL01vbml0b3IucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvTW9uaXRvci5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNGQ2MDZjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvTW9uaXRvci5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotIyAgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyAgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAgKiAKLSMgICogQ29udHJpYnV0b3JzOiAKLSMgICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSMKLSMgTW9uaXRvciBtZXNzYWdlIHJlc291cmNlIGJ1bmRsZS4KLSMKLXVzYWdlMDE9VXNhZ2U6IE1vbml0b3IgLWNvbmZpZyA8Y29uZmlnRmlsZW5hbWU+Ci1zdG9wcGVkMDE9TW9uaXRvciBzdG9wcGVkLgotZXJyb3IwMT1Nb25pdG9yIEVycm9yOgotZXJyb3IwMj1Nb25pdG9yIFN0b3BwZWQgQnkgRXhjZXB0aW9uOiAKLWVycm9yMDM9Q291bGQgbm90IGNyZWF0ZSBsb2cgb3IgbG9nIHdyaXRlci4KLWVycm9yMDQ9TW9uaXRvciBjYW5ub3QgY29ubmVjdCB0byBhIHJlZGlyZWN0IGhvc3Q6Ci1zdG9wcGluZzAxPVN0b3BwaW5nIHRoZSBtb25pdG9yLi4uCi1zdG9wcGluZzAyPVN0b3BwaW5nIG1vbml0b3IgYmVjYXVzZSBhbiBleGNlcHRpb24gb2NjdXJyZWQuCi1sb2cwMT1Mb2cgbWVzc2FnZSBlbnRyeSBbSUQsIFR5cGUsIFNlbmRlcl06Ci1zdGFydDAxPVRoZSBNb25pdG9yIHRvb2wgaXMgcmVhZHkgdG8gaW50ZXJjZXB0IGFuZCBsb2cgd2ViIHNlcnZpY2UgbWVzc2FnZXMuCi1zdGFydDAyPVR5cGUgImV4aXQiIHRvIHN0b3AgdGhlIE1vbml0b3IuCi1leGl0MDE9ZXhpdAotY29uZmlnMDE9VGhlIHNwZWNpZmllZCBvcHRpb24gaXMgbm90IHN1cHBvcnRlZDoKLWNvbmZpZzAyPU1vbml0b3IgY29uZmlndXJhdGlvbiBmaWxlIHdhcyBub3QgZm91bmQuICBTcGVjaWZpZWQgZmlsZSBsb2NhdGlvbjoKLWNvbmZpZzAzPUNvdWxkIG5vdCByZWFkIG1vbml0b3IgY29uZmlndXJhdGlvbiBmaWxlLiAgU3BlY2lmaWVkIGZpbGUgbG9jYXRpb246Ci1jb25maWcwND1FbGVtZW50IG11c3QgY29udGFpbiBhbiBpbnRlZ2VyIHZhbHVlLiAgRWxlbWVudCBuYW1lOgotY29uZmlnMDU9TW9uaXRvciBjb25maWd1cmF0aW9uIGZpbGUgZGlkIG5vdCBjb250YWluIGFueSByZWRpcmVjdCBzdGF0ZW1lbnRzLgotY29uZmlnMDY9TW9uaXRvciBjb25maWd1cmF0aW9uIGZpbGUgZGlkIG5vdCBjb250YWluIHRoZSBsb2cgZmlsZSBVUkkuCi1jb25maWcwNz1Db3VsZCBub3QgZ2V0IGxvZyBmaWxlIGxvY2F0aW9uLgotY29uZmlnMDg9TG9nIGZpbGUgYWxyZWFkeSBleGlzdHMuICBTcGVjaWZpZWQgZmlsZSBsb2NhdGlvbjoKLWNvbmZpZzA5PUVsZW1lbnQgaXMgbWlzc2luZy4gRWxlbWVudCBuYW1lOgotY29uZmlnMTA9UGFyYW1ldGVyIHZhbHVlIGNhbid0IGJlIG5lZ2F0aXZlLiBFbGVtZW50IG5hbWU6Ci1jb25maWcxMT1UaGUgbG9nIGZpbGUgbG9jYXRpb24gdmFsdWUgY2Fubm90IGNvbnRhaW4gdGhlIHBhc3Mgc2VwYXJhdG9yIGNoYXJhY3RlcjoKLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9TZXJ2ZXJTb2NrZXRMaXN0ZW5lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9TZXJ2ZXJTb2NrZXRMaXN0ZW5lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTE2YzhjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvU2VydmVyU29ja2V0TGlzdGVuZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvcjsKLQotaW1wb3J0IGphdmEubmV0LlNlcnZlclNvY2tldDsKLWltcG9ydCBqYXZhLm5ldC5Tb2NrZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuUmVkaXJlY3Q7Ci0KLS8qKgotICogQSBzZXJ2ZXIgc29ja2V0IGxpc3RlbmVyLgotICoKLSAqIEBhdXRob3IgUGV0ZXIgIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKi8KLXB1YmxpYyBjbGFzcyBTZXJ2ZXJTb2NrZXRMaXN0ZW5lcgotICBleHRlbmRzIFRocmVhZAotICBpbXBsZW1lbnRzIENvbm5lY3Rpb25MaXN0ZW5lciAvLyBTUwotewotICBwcm90ZWN0ZWQgTW9uaXRvciBtb25pdG9yID0gbnVsbDsKLSAgcHJvdGVjdGVkIFJlZGlyZWN0IHJlZGlyZWN0ID0gbnVsbDsKLQotICBwcm90ZWN0ZWQgU2VydmVyU29ja2V0IHNlcnZlclNvY2tldCA9IG51bGw7Ci0gIHByb3RlY3RlZCBib29sZWFuIHN0b3BTZXJ2ZXJTb2NrZXQgPSBmYWxzZTsKLQotICBwcm90ZWN0ZWQgVmVjdG9yIGNvbm5lY3Rpb25MaXN0ID0gbmV3IFZlY3RvcigpOwotCi0gIC8qKgotICAgKiBDcmVhdGUgc2VydmVyIHNvY2tldCBsaXN0ZW5lci4KLSAgICogQHBhcmFtIG1vbml0b3IgYSBNb25pdG9yIG9iamVjdC4KLSAgICogQHBhcmFtIHJlZGlyZWN0IGEgUmVkaXJlY3Qgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFNlcnZlclNvY2tldExpc3RlbmVyKE1vbml0b3IgbW9uaXRvciwgUmVkaXJlY3QgcmVkaXJlY3QpCi0gIHsKLSAgICB0aGlzLm1vbml0b3IgPSBtb25pdG9yOwotICAgIHRoaXMucmVkaXJlY3QgPSByZWRpcmVjdDsKLQotICAgIC8vIFN0YXJ0IGxpc3RlbmluZwotICAgIHN0YXJ0KCk7Ci0gIH0KLQotICAvKioKLSAgICogUnVuIHRoZSB0aHJlYWQgYW5kIGxpc3RlbiBmb3IgYSBjb25uZWN0aW9uIG9uIHRoZSBzb2NrZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBydW4oKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gQ3JlYXRlIHNlcnZlciBzb2NrZXQKLSAgICAgIHNlcnZlclNvY2tldCA9Ci0gICAgICAgIG5ldyBTZXJ2ZXJTb2NrZXQoCi0gICAgICAgICAgcmVkaXJlY3QuZ2V0TGlzdGVuUG9ydCgpLAotICAgICAgICAgIHJlZGlyZWN0LmdldE1heENvbm5lY3Rpb25zKCkpOwotICAgICAgLy8gU1MKLQotICAgICAgLy8gU2V0IHRpbWVvdXQgc28gdGhhdCBzZXJ2ZXIgc29ja2V0IHdpbGwgY29udGludWUgdG8gYWNjZXB0IGNvbm5lY3Rpb25zCi0gICAgICBzZXJ2ZXJTb2NrZXQuc2V0U29UaW1lb3V0KDApOwotCi0gICAgICAvLyBMaXN0ZW4gZm9yIGNvbm5lY3Rpb25zIHVudGlsIGludGVycnVwdGVkCi0gICAgICB3aGlsZSAoIXN0b3BTZXJ2ZXJTb2NrZXQpCi0gICAgICB7Ci0gICAgICAgIC8vIEFjY2VwdCBjb25uZWN0aW9ucwotICAgICAgICBTb2NrZXQgc29ja2V0ID0gc2VydmVyU29ja2V0LmFjY2VwdCgpOwotCi0gICAgICAgIC8vIElmIHRoZSBzZXJ2ZXIgc29ja2V0IHdhcyBOT1Qgc3RvcHBlZCwgcHJvY2VzcyBjb25uZWN0aW9uCi0gICAgICAgIGlmICghc3RvcFNlcnZlclNvY2tldCkKLSAgICAgICAgewotICAgICAgICAgIC8vIENyZWF0ZSBuZXcgY29ubmVjdGlvbgotICAgICAgICAgIFNvY2tldENvbm5lY3Rpb24gc29ja2V0Q29ubmVjdGlvbiA9Ci0gICAgICAgICAgICBuZXcgU29ja2V0Q29ubmVjdGlvbih0aGlzLm1vbml0b3IsIHRoaXMucmVkaXJlY3QsIHNvY2tldCk7Ci0KLSAgICAgICAgICAvL3JlZ2lzdGVyIGFzIGEgbGlzdGVuZXIKLSAgICAgICAgICBzb2NrZXRDb25uZWN0aW9uLmFkZENvbm5lY3Rpb25MaXN0ZW5lcih0aGlzKTsgLy8gU1MKLQotICAgICAgICAgIC8vIEFkZCB0byBjb25uZWN0aW9uIGxpc3QKLSAgICAgICAgICBjb25uZWN0aW9uTGlzdC5hZGQoc29ja2V0Q29ubmVjdGlvbik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gSWYgdGhlIGV4Y2VwdGlvbiB3YXMgTk9UIGNhdXNlZCBieSBjbG9zaW5nIHRoZSBzb2NrZXQsIHRoZW4gc3RvcCBtb25pdG9yCi0gICAgICBpZiAoIWUuZ2V0TWVzc2FnZSgpLmVxdWFscygic29ja2V0IGNsb3NlZCIpKQotICAgICAgewotICAgICAgICBtb25pdG9yLmV4aXRNb25pdG9yKGUpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBTdG9wIGxpc3RlbmluZyBmb3IgYSBjb25uZWN0aW9uIG9uIHRoZSBzb2NrZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzaHV0ZG93bigpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBTaHV0ZG93biBhbGwgYWN0aXZlIGNvbm5lY3Rpb25zCi0gICAgICBJdGVyYXRvciBpdGVyYXRvciA9IGNvbm5lY3Rpb25MaXN0Lml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICAoKFNvY2tldENvbm5lY3Rpb24pIGl0ZXJhdG9yLm5leHQoKSkuc2h1dGRvd24oKTsKLSAgICAgIH0KLQotICAgICAgLy8gVGVsbCB0aGUgc2VydmVyIHNvY2tldCBsaXN0ZW5pbmcgdGhyZWFkIHRvIHN0b3AKLSAgICAgIHRoaXMuc3RvcFNlcnZlclNvY2tldCA9IHRydWU7Ci0KLSAgICAgIC8vIFNldCB0aGUgc2VydmVyIHNvY2tldCB0aW1lb3V0IHRvIDEgbXMKLSAgICAgIHNlcnZlclNvY2tldC5zZXRTb1RpbWVvdXQoMSk7Ci0KLSAgICAgIC8vIENsb3NlIHRoZSBzZXJ2ZXIgc29ja2V0Ci0gICAgICBpZiAoc2VydmVyU29ja2V0ICE9IG51bGwpCi0gICAgICAgIHNlcnZlclNvY2tldC5jbG9zZSgpOwotICAgIH0KLQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgfQotICB9Ci0KLSAgLy8gPT09PSBTUyBzdGFydCA9PT09Ci0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubW9uaXRvci5Db25uZWN0aW9uTGlzdGVuZXIjY29ubmVjdGlvbkNsb3NlZCgpCi0gICAqLwotICBwdWJsaWMgdm9pZCBjb25uZWN0aW9uQ2xvc2VkKFNvY2tldENvbm5lY3Rpb24gY29ubmVjdGlvbikKLSAgewotICAgIGNvbm5lY3Rpb25MaXN0LnJlbW92ZShjb25uZWN0aW9uKTsKLSAgfQotICAvLyA9PT09IFNTIGVuZCA9PT09Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL1NvY2tldENvbm5lY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvU29ja2V0Q29ubmVjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTJhMGY0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvU29ja2V0Q29ubmVjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzA2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yOwotCi1pbXBvcnQgamF2YS5uZXQuU29ja2V0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1pbWVQYXJ0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuUmVkaXJlY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVXRpbHM7Ci0KLS8qKgotICogQSBzb2NrZXQgY29ubmVjdGlvbi4KLSAqCi0gKiBAYXV0aG9yIFBldGVyICBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKiBAdmVyc2lvbiAxLjAuMQotICovCi1wdWJsaWMgY2xhc3MgU29ja2V0Q29ubmVjdGlvbiBleHRlbmRzIFRocmVhZAotewotICBwcm90ZWN0ZWQgTW9uaXRvciBtb25pdG9yOwotICBwcm90ZWN0ZWQgUmVkaXJlY3QgcmVkaXJlY3Q7Ci0gIHByb3RlY3RlZCBTb2NrZXQgaW5Tb2NrZXQ7Ci0gIHByb3RlY3RlZCBTb2NrZXQgb3V0U29ja2V0OwotCi0gIHByb3RlY3RlZCBTdHJpbmcgaHR0cFByb3h5SG9zdCA9IG51bGw7Ci0gIHByb3RlY3RlZCBpbnQgaHR0cFByb3h5UG9ydDsKLQotICBwcm90ZWN0ZWQgU29ja2V0SGFuZGxlciByZXF1ZXN0U29ja2V0SGFuZGxlciA9IG51bGw7Ci0gIHByb3RlY3RlZCBTb2NrZXRIYW5kbGVyIHJlc3BvbnNlU29ja2V0SGFuZGxlciA9IG51bGw7Ci0KLSAgcHJpdmF0ZSBWZWN0b3IgbGlzdGVuZXJzID0gbmV3IFZlY3RvcigpOyAvLyBTUwotCi0gIC8qKgotICAgKiBDcmVhdGUgc29ja2V0IGNvbm5lY3Rpb24uCi0gICAqIEBwYXJhbSBtb25pdG9yICBhIE1vbml0b3Igb2JqZWN0LgotICAgKiBAcGFyYW0gcmVkaXJlY3QgYSBSZWRpcmVjdCBvYmplY3QuCi0gICAqIEBwYXJhbSBpblNvY2tldCBpbiBzb2NrZXQuCi0gICAqLwotICBwdWJsaWMgU29ja2V0Q29ubmVjdGlvbihNb25pdG9yIG1vbml0b3IsIFJlZGlyZWN0IHJlZGlyZWN0LCBTb2NrZXQgaW5Tb2NrZXQpCi0gIHsKLSAgICB0aGlzLm1vbml0b3IgPSBtb25pdG9yOwotICAgIHRoaXMucmVkaXJlY3QgPSByZWRpcmVjdDsKLSAgICB0aGlzLmluU29ja2V0ID0gaW5Tb2NrZXQ7Ci0KLSAgICAvLyBTdGFydCBwcm9jZXNzaW5nIHRoZSBjb25uZWN0aW9uCi0gICAgc3RhcnQoKTsKLSAgfQotCi0gIC8qKgotICAgKiBQcm9jZXNzIHRoZSBzb2NrZXQgY29ubmVjdGlvbi4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJ1bigpCi0gIHsKLSAgICAvLyBHZXQgdGhlIEhUVFAgcHJveHkgc2V0dGluZ3MgaWYgdGhlcmUgYXJlIGFueSBzZXQgKG5vdCB1c2VkIGN1cnJlbnRseSkKLSAgICBsb2FkSHR0cFByb3h5U2V0dGluZ3MoKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIE9wZW4gdGhlIGNvbm5lY3Rpb24gdG8gdGhlIHNlcnZlcgotICAgICAgdGhpcy5vdXRTb2NrZXQgPSBuZXcgU29ja2V0KHJlZGlyZWN0LmdldFRvSG9zdCgpLCByZWRpcmVjdC5nZXRUb1BvcnQoKSk7Ci0KLSAgICAgIC8vIFNldCB0aGUgcmVhZCB0aW1lb3V0IGZvciB0aGUgaW5wdXQgc29ja2V0Ci0gICAgICB0aGlzLmluU29ja2V0LnNldFNvVGltZW91dChyZWRpcmVjdC5nZXRSZWFkVGltZW91dFNlY29uZHMoKSAqIDEwMDApOwotCi0gICAgICAvLyBHZXQgdGhlIG5leHQgY29udmVyc2F0aW9uIElECi0gICAgICBpbnQgY29udmVyc2F0aW9uSWQgPSBtb25pdG9yLmdldE5leHRDb252ZXJzYXRpb25JZCgpOwotCi0gICAgICAvLyBDcmVhdGUgdGhlIHNvY2tldCBoYW5kbGVycyB3aGljaCBhcmUgdXNlZCB0byBzZW5kIHRoZSBkYXRhIGZyb20KLSAgICAgIC8vIHRoZSBjbGllbnQgdG8gdGhlIHNlcnZlcgotICAgICAgcmVxdWVzdFNvY2tldEhhbmRsZXIgPQotICAgICAgICBuZXcgU29ja2V0SGFuZGxlcigKLSAgICAgICAgICB0aGlzLAotICAgICAgICAgIE1lc3NhZ2VFbnRyeS5UWVBFX1JFUVVFU1QsCi0gICAgICAgICAgY29udmVyc2F0aW9uSWQsCi0gICAgICAgICAgcmVkaXJlY3QuZ2V0VG9Ib3N0KCksCi0gICAgICAgICAgdGhpcy5pblNvY2tldCwKLSAgICAgICAgICB0aGlzLm91dFNvY2tldCwKLSAgICAgICAgICByZWRpcmVjdC5nZXRSZWFkVGltZW91dFNlY29uZHMoKSk7Ci0gICAgICByZXNwb25zZVNvY2tldEhhbmRsZXIgPQotICAgICAgICBuZXcgU29ja2V0SGFuZGxlcigKLSAgICAgICAgICB0aGlzLAotICAgICAgICAgIE1lc3NhZ2VFbnRyeS5UWVBFX1JFU1BPTlNFLAotICAgICAgICAgIGNvbnZlcnNhdGlvbklkLAotICAgICAgICAgIHJlZGlyZWN0LmdldFRvSG9zdCgpLAotICAgICAgICAgIHRoaXMub3V0U29ja2V0LAotICAgICAgICAgIHRoaXMuaW5Tb2NrZXQsCi0gICAgICAgICAgcmVkaXJlY3QuZ2V0UmVhZFRpbWVvdXRTZWNvbmRzKCkpOwotCi0gICAgICAvLyBUZWxsIGVhY2ggc29ja2V0SGFuZGxlciBhYm91dCB0aGUgb3RoZXIgb25lCi0gICAgICByZXF1ZXN0U29ja2V0SGFuZGxlci5zZXRQYWlyZWRTb2NrZXRIYW5kbGVyKHJlc3BvbnNlU29ja2V0SGFuZGxlcik7Ci0gICAgICByZXNwb25zZVNvY2tldEhhbmRsZXIuc2V0UGFpcmVkU29ja2V0SGFuZGxlcihyZXF1ZXN0U29ja2V0SGFuZGxlcik7Ci0gICAgfQotCi0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIE1vbml0b3Iuc3RhdGljUHJpbnRNZXNzYWdlKAotICAgICAgICAiZXJyb3IwNCIsCi0gICAgICAgIHJlZGlyZWN0LmdldFRvSG9zdCgpLAotICAgICAgICAiTW9uaXRvciBjYW5ub3QgY29ubmVjdCB0byBhIHJlZGlyZWN0IGhvc3Q6Iik7Ci0KLSAgICAgIHNodXRkb3duKCk7Ci0KLSAgICAgIHRyeQotICAgICAgewotICAgICAgICB0aGlzLmluU29ja2V0LmNsb3NlKCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgICB7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIExvZyBtZXNzYWdlLgotICAgKiBAcGFyYW0gY29udmVyc2F0aW9uSUQgICAgICB0aGUgY292ZXJzYXRpb24gaWQuCi0gICAqIEBwYXJhbSBjb25uZWN0aW9uVHlwZSAgICAgIHRoZSBjb25uZWN0aW9uIHR5cGUuCi0gICAqIEBwYXJhbSB0aW1lc3RhbXAgICAgICAgICAgIHRoZSB0aW1lc3RhbXAuCi0gICAqIEBwYXJhbSBzZW5kZXJIb3N0QW5kUG9ydCAgIHRoZSBzZW5kZXIgaG9zdCBhbmQgcG9ydC4KLSAgICogQHBhcmFtIHJlY2VpdmVySG9zdEFuZFBvcnQgdGhlIHJlY2VpdmVyIGhvc3QgYW5kIHBvcnQuCi0gICAqIEBwYXJhbSBtZXNzYWdlQnVmZmVyICAgICAgIHRoZSBtZXNzYWdlLgotICAgKiBAcGFyYW0gYm9tICAgICAgICAgICAgICAgICB0aGUgQk9NLgotICAgKiBAcGFyYW0gZW5jb2RpbmcgICAgICAgICAgICB0aGUgZW5jb2RpbmcuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmICB0aGVyZSBpcyBhIHByb2JsZW0gbG9nZ2luZyBtZXNzYWdlLgotICAqLwotICBwdWJsaWMgdm9pZCBsb2dNZXNzYWdlKAotICAgIGludCBjb252ZXJzYXRpb25JRCwKLSAgICBTdHJpbmcgY29ubmVjdGlvblR5cGUsCi0gICAgU3RyaW5nIHRpbWVzdGFtcCwKLSAgICBTdHJpbmcgc2VuZGVySG9zdEFuZFBvcnQsCi0gICAgU3RyaW5nIHJlY2VpdmVySG9zdEFuZFBvcnQsCi0gICAgU3RyaW5nQnVmZmVyIG1lc3NhZ2VCdWZmZXIsCi0gICAgaW50IGJvbSwKLSAgICBTdHJpbmcgZW5jb2RpbmcpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgTWVzc2FnZUVudHJ5IG1lc3NhZ2VFbnRyeSA9IG51bGw7Ci0KLSAgICAvLyBDcmVhdGUgbWVzc2FnZSBlbnRyeQotICAgIG1lc3NhZ2VFbnRyeSA9Ci0gICAgICBjcmVhdGVNZXNzYWdlRW50cnkoCi0gICAgICAgIGNvbnZlcnNhdGlvbklELAotICAgICAgICBjb25uZWN0aW9uVHlwZSwKLSAgICAgICAgdGltZXN0YW1wLAotICAgICAgICBzZW5kZXJIb3N0QW5kUG9ydCwKLSAgICAgICAgcmVjZWl2ZXJIb3N0QW5kUG9ydCwKLSAgICAgICAgbWVzc2FnZUJ1ZmZlci50b1N0cmluZygpLAotICAgICAgICBib20sCi0gICAgICAgIGVuY29kaW5nKTsKLQotICAgIC8vIERFQlVHOgotICAgIC8vZGVidWcoImxvZ01lc3NhZ2UiLCAiIG1lc3NhZ2VFbnRyeTogIiArIG1lc3NhZ2VFbnRyeSk7Ci0KLSAgICAvLyBBZGQgZW50cnkgdG8gdGhlIHF1ZXVlCi0gICAgbW9uaXRvci5nZXRNZXNzYWdlRW50cnlRdWV1ZSgpLmFkZE1lc3NhZ2VFbnRyeShtZXNzYWdlRW50cnkpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhIGxvZyBlbnRyeSBmcm9tIGFsbCBvZiB0aGUgZGF0YSB0aGF0IHdhcyBnYXRoZXJlZC4KLSAgICovCi0gIHByaXZhdGUgTWVzc2FnZUVudHJ5IGNyZWF0ZU1lc3NhZ2VFbnRyeSgKLSAgICBpbnQgY29udmVyc2F0aW9uSUQsCi0gICAgU3RyaW5nIG1lc3NhZ2VUeXBlLAotICAgIFN0cmluZyB0aW1lc3RhbXAsCi0gICAgU3RyaW5nIHNlbmRlckhvc3RBbmRQb3J0LAotICAgIFN0cmluZyByZWNlaXZlckhvc3RBbmRQb3J0LAotICAgIFN0cmluZyBtZXNzYWdlLAotICAgIGludCBib20sCi0gICAgU3RyaW5nIGVuY29kaW5nKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIENyZWF0ZSBsb2cgZW50cnkgb2JqZWN0Ci0gICAgTWVzc2FnZUVudHJ5IG1lc3NhZ2VFbnRyeSA9IG1vbml0b3IuZ2V0TG9nKCkuY3JlYXRlTG9nRW50cnkoKTsKLQotICAgIC8vIFNldCBpbnB1dCBpbmZvcm1hdGlvbiBpbiBsb2cgZW50cnkKLSAgICAvLyBOT1RFOiAgVGhlIElEIGlzIHNldCBqdXN0IGJlZm9yZSB0aGUgbG9nIGVudHJ5IGlzIHdyaXR0ZW4gdG8gdGhlIGxvZyBmaWxlIGluIExvZ0VudHJ5UXVldWUKLSAgICAvL2xvZ0VudHJ5LnNldElkKGlkKTsKLSAgICBtZXNzYWdlRW50cnkuc2V0Q29udmVyc2F0aW9uSWQoU3RyaW5nLnZhbHVlT2YoY29udmVyc2F0aW9uSUQpKTsKLSAgICBtZXNzYWdlRW50cnkuc2V0VHlwZShtZXNzYWdlVHlwZSk7Ci0gICAgbWVzc2FnZUVudHJ5LnNldFRpbWVzdGFtcCh0aW1lc3RhbXApOwotICAgIG1lc3NhZ2VFbnRyeS5zZXRTZW5kZXJIb3N0QW5kUG9ydChzZW5kZXJIb3N0QW5kUG9ydCk7Ci0gICAgbWVzc2FnZUVudHJ5LnNldFJlY2VpdmVySG9zdEFuZFBvcnQocmVjZWl2ZXJIb3N0QW5kUG9ydCk7Ci0gICAgbWVzc2FnZUVudHJ5LnNldEVuY29kaW5nKGVuY29kaW5nKTsKLQotICAgIC8vIEdldCBIVFRQIGhlYWRlcnMgZnJvbSBmdWxsIG1lc3NhZ2UKLSAgICBTdHJpbmcgaHR0cEhlYWRlcnMgPSBVdGlscy5nZXRIVFRQSGVhZGVycyhtZXNzYWdlKTsKLSAgICBtZXNzYWdlRW50cnkuc2V0SFRUUEhlYWRlcnMoaHR0cEhlYWRlcnMpOwotCQotICAgaWYgKFV0aWxzLmlzTXVsdGlwYXJ0UmVsYXRlZE1lc3NhZ2UoaHR0cEhlYWRlcnMpKQotICAgIHsKLSAgICAJTWltZVBhcnRzIG1pbWVQYXJ0cyA9IFV0aWxzLnBhcnNlTXVsdGlwYXJ0UmVsYXRlZE1lc3NhZ2UobWVzc2FnZSwgaHR0cEhlYWRlcnMsIGVuY29kaW5nKTsKLSAgICAJaWYgKG1pbWVQYXJ0cyA9PSBudWxsKQotICAgIAl7Ci0gICAgCSAgLy8gcHJvYmxlbSBjcmVhdGluZyBNaW1lcGFydHMgLS0gdHJlYXQgaXQgYXMgc2ltcGxlIFNPQVAgbWVzc2FnZQotICAgIAkgIFN0cmluZyBjb250ZW50ID0gVXRpbHMuZ2V0Q29udGVudChtZXNzYWdlKTsKLSAgICAJICBtZXNzYWdlRW50cnkuc2V0TWVzc2FnZShjb250ZW50KTsKLSAgICAJICBtZXNzYWdlRW50cnkuc2V0TWltZUNvbnRlbnQoZmFsc2UpOwotICAgIAl9Ci0gICAgCWVsc2UKLSAgICAJewotICAgICAgICAgIG1lc3NhZ2VFbnRyeS5zZXRNaW1lUGFydHMobWltZVBhcnRzKTsKLSAgICAgICAgICBtZXNzYWdlRW50cnkuc2V0TWltZUNvbnRlbnQodHJ1ZSk7Ci0gICAgCX0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIEdldCB0aGUgbWVzc2FnZSBjb250ZW50Ci0gICAgICBTdHJpbmcgY29udGVudCA9IFV0aWxzLmdldENvbnRlbnQobWVzc2FnZSk7Ci0gICAgICBtZXNzYWdlRW50cnkuc2V0TWVzc2FnZShjb250ZW50KTsKLSAgICAgIG1lc3NhZ2VFbnRyeS5zZXRNaW1lQ29udGVudChmYWxzZSk7Ci0gICAgfQotCi0gICAgLy8gU2V0IHRoZSBCT00sIGlmIHRoZXJlIGlzIG9uZQotICAgIGlmIChib20gIT0gMCkKLSAgICAgIG1lc3NhZ2VFbnRyeS5zZXRCT00oYm9tKTsKLQotICAgIHJldHVybiBtZXNzYWdlRW50cnk7Ci0gIH0KLQotICAvKioKLSAgICogTG9hZCBIVFRQIHByb3h5IHNldHRpbmdzLgotICAgKi8KLSAgcHVibGljIHZvaWQgbG9hZEh0dHBQcm94eVNldHRpbmdzKCkKLSAgewotICAgIC8vIEdldCB0aGUgSFRUUCBwcm94eSBob3N0IHNldHRpbmcKLSAgICB0aGlzLmh0dHBQcm94eUhvc3QgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImh0dHAucHJveHlIb3N0Iik7Ci0gICAgaWYgKHRoaXMuaHR0cFByb3h5SG9zdCAhPSBudWxsICYmIGh0dHBQcm94eUhvc3QuZXF1YWxzKCIiKSkKLSAgICAgIHRoaXMuaHR0cFByb3h5SG9zdCA9IG51bGw7Ci0KLSAgICAvLyBJZiB0aGVyZSB3YXMgYW4gSFRUUCBwcm94eSBob3N0IHNldHRpbmcsIHRoZW4gZ2V0IHRoZSBwb3J0Ci0gICAgaWYgKHRoaXMuaHR0cFByb3h5SG9zdCAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyBwb3J0U3RyaW5nID0gU3lzdGVtLmdldFByb3BlcnR5KCJodHRwLnByb3h5UG9ydCIpOwotCi0gICAgICAvLyBTZXQgZGVmYXVsdCB0byA4MAotICAgICAgaWYgKHBvcnRTdHJpbmcgPT0gbnVsbCB8fCBwb3J0U3RyaW5nLmVxdWFscygiIikpCi0gICAgICAgIHRoaXMuaHR0cFByb3h5UG9ydCA9IDgwOwotICAgICAgZWxzZQotICAgICAgICBodHRwUHJveHlQb3J0ID0gSW50ZWdlci5wYXJzZUludChwb3J0U3RyaW5nKTsKLSAgICB9Ci0gIH0KLQotICBNb25pdG9yIGdldE1vbml0b3IoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMubW9uaXRvcjsKLSAgfQotCi0gIHN5bmNocm9uaXplZCB2b2lkIHdha2VVcCgpCi0gIHsKLSAgICBmaXJlQ29ubmVjdGlvbkNsb3NlZCgpOyAvLyBTUwotICAgIG5vdGlmeUFsbCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFNodXRkb3duLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2h1dGRvd24oKQotICB7Ci0gICAgaWYgKHRoaXMucmVxdWVzdFNvY2tldEhhbmRsZXIgIT0gbnVsbCkKLSAgICAgIHRoaXMucmVxdWVzdFNvY2tldEhhbmRsZXIuc2h1dGRvd24oKTsKLSAgICBpZiAodGhpcy5yZXNwb25zZVNvY2tldEhhbmRsZXIgIT0gbnVsbCkKLSAgICAgIHRoaXMucmVzcG9uc2VTb2NrZXRIYW5kbGVyLnNodXRkb3duKCk7Ci0gIH0KLQotICAvLyA9PT09IFNTIHN0YXJ0ID09PT0KLSAgLyoqCi0gICAqIEFkZCBjb25uZWN0aW9uIGV2ZW50IGxpc3RlbmVyLgotICAgKiBAcGFyYW0gbGlzdGVuZXIgZXZlbnQgbGlzdGVuZXIuCi0gICAqIEBzZWUgI3JlbW92ZUNvbm5lY3Rpb25MaXN0ZW5lcgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkQ29ubmVjdGlvbkxpc3RlbmVyKENvbm5lY3Rpb25MaXN0ZW5lciBsaXN0ZW5lcikKLSAgewotICAgIGxpc3RlbmVycy5hZGQobGlzdGVuZXIpOwotICB9Ci0gIC8qKgotICAgKiBSZW1vdmUgY29ubmVjdGlvbiBldmVudCBsaXN0ZW5lci4KLSAgICogQHBhcmFtIGxpc3RlbmVyIGV2ZW50IGxpc3RlbmVyLgotICAgKiBAc2VlICNhZGRDb25uZWN0aW9uTGlzdGVuZXIKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlbW92ZUNvbm5lY3Rpb25MaXN0ZW5lcihDb25uZWN0aW9uTGlzdGVuZXIgbGlzdGVuZXIpCi0gIHsKLSAgICBsaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsKLSAgfQotICAvKioKLSAgICogTm90aWZ5IGxpc3RlbmVycyBvbiBjb25uZWN0aW9uIGNsb3NlLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGZpcmVDb25uZWN0aW9uQ2xvc2VkKCkKLSAgewotICAgIGZvciAoSXRlcmF0b3IgaSA9IGxpc3RlbmVycy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgewotICAgICAgQ29ubmVjdGlvbkxpc3RlbmVyIGxpc3RlbmVyID0gKENvbm5lY3Rpb25MaXN0ZW5lcikgaS5uZXh0KCk7Ci0gICAgICBsaXN0ZW5lci5jb25uZWN0aW9uQ2xvc2VkKHRoaXMpOwotICAgIH0KLSAgfQotICAvLyA9PT09IFNTIGVuZCA9PT09Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL1NvY2tldEhhbmRsZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvU29ja2V0SGFuZGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTM4YTI2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvU29ja2V0SGFuZGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwMyBJQk0gQ29ycG9yYXRpb24sIEJlYWNvbiBJbmZvcm1hdGlvbiBUZWNobm9sb2d5IEluYy4gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAgICAgIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgIEJlYWNvbklUIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3I7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JbnRlcnJ1cHRlZElPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5Tb2NrZXQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NZXNzYWdlRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVXRpbHM7Ci0KLS8qKgotICogU29ja2V0IEhhbmRsZXIuCi0gKiAKLSAqIEBhdXRob3IgUGV0ZXIgIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKi8KLXB1YmxpYyBjbGFzcyBTb2NrZXRIYW5kbGVyIGV4dGVuZHMgVGhyZWFkCi17Ci0gIHByb3RlY3RlZCBTb2NrZXRDb25uZWN0aW9uIHNvY2tldENvbm5lY3Rpb247Ci0gIHByb3RlY3RlZCBTb2NrZXRIYW5kbGVyIHBhaXJlZFNvY2tldEhhbmRsZXI7Ci0gIHByb3RlY3RlZCBTdHJpbmcgY29ubmVjdGlvblR5cGU7Ci0gIHByb3RlY3RlZCBpbnQgY29udmVyc2F0aW9uSUQ7Ci0gIHByb3RlY3RlZCBTdHJpbmcgdGFyZ2V0SG9zdDsKLSAgcHJvdGVjdGVkIGludCByZWFkVGltZW91dFNlY29uZHM7Ci0KLSAgcHJvdGVjdGVkIFNvY2tldCBpblNvY2tldDsKLSAgcHJvdGVjdGVkIFNvY2tldCBvdXRTb2NrZXQ7Ci0gIHByb3RlY3RlZCBJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IG51bGw7Ci0gIHByb3RlY3RlZCBPdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtID0gbnVsbDsKLQotICBwcm90ZWN0ZWQgYm9vbGVhbiB2ZXJib3NlID0gZmFsc2U7Ci0KLSAgcHJvdGVjdGVkIGJvb2xlYW4gcmVhZFRpbWVkT3V0ID0gZmFsc2U7Ci0KLSAgLy8gSTE4TjogMjAwMy4wMi4yNiBtb2RpZmllZCBieSBLLk5ha2Fnb21lQEJlYWNvbklUCi0gIHByaXZhdGUgU3RyaW5nIG1pbWVDaGFyc2V0ID0gbnVsbDsKLSAgcHJpdmF0ZSBTdHJpbmcgeG1sRW5jb2RpbmcgPSBudWxsOwotCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIENSTEYgPSAiXHJcbiI7Ci0KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgSFRUUF8xMDBfQ09OVElOVUUgPQotICAgICIxMDAgQ29udGludWUiLnRvVXBwZXJDYXNlKCk7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIENIVU5LRUQgPQotICAgICJUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZCIudG9VcHBlckNhc2UoKTsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0hVTktFRF9XSVRIX1FVT1RFUyA9Ci0gICAgIlRyYW5zZmVyLUVuY29kaW5nOiBcImNodW5rZWRcIiIudG9VcHBlckNhc2UoKTsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09OVEVOVF9MRU5HVEggPQotICAgICJDb250ZW50LUxlbmd0aDoiLnRvVXBwZXJDYXNlKCk7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBzb2NrZXQgaGFuZGxlci4KLSAgICogQHBhcmFtIHNvY2tldENvbm5lY3Rpb24gICBzb2NrZXQgY29ubmVjdGlvbi4KLSAgICogQHBhcmFtIGNvbm5lY3Rpb25UeXBlICAgICBjb25uZWN0aW9uIHR5cGUuCi0gICAqIEBwYXJhbSBjb252ZXJzYXRpb25JRCAgICAgY29udmVyc2F0aW9uIGlkLgotICAgKiBAcGFyYW0gdGFyZ2V0SG9zdCAgICAgICAgIHRhcmdldCBob3N0LgotICAgKiBAcGFyYW0gaW5Tb2NrZXQgICAgICAgICAgIGluIHNvY2tldC4KLSAgICogQHBhcmFtIG91dFNvY2tldCAgICAgICAgICBvdXQgc29ja2V0LgotICAgKiBAcGFyYW0gcmVhZFRpbWVvdXRTZWNvbmRzIHJlYWQgdGltZW91dCBzZWNvbmRzLgotICAgKi8KLSAgcHVibGljIFNvY2tldEhhbmRsZXIoCi0gICAgU29ja2V0Q29ubmVjdGlvbiBzb2NrZXRDb25uZWN0aW9uLAotICAgIFN0cmluZyBjb25uZWN0aW9uVHlwZSwKLSAgICBpbnQgY29udmVyc2F0aW9uSUQsCi0gICAgU3RyaW5nIHRhcmdldEhvc3QsCi0gICAgU29ja2V0IGluU29ja2V0LAotICAgIFNvY2tldCBvdXRTb2NrZXQsCi0gICAgaW50IHJlYWRUaW1lb3V0U2Vjb25kcykKLSAgewotICAgIHRoaXMuc29ja2V0Q29ubmVjdGlvbiA9IHNvY2tldENvbm5lY3Rpb247Ci0gICAgdGhpcy5jb25uZWN0aW9uVHlwZSA9IGNvbm5lY3Rpb25UeXBlOwotICAgIHRoaXMuY29udmVyc2F0aW9uSUQgPSBjb252ZXJzYXRpb25JRDsKLSAgICB0aGlzLnRhcmdldEhvc3QgPSB0YXJnZXRIb3N0OwotICAgIHRoaXMuaW5Tb2NrZXQgPSBpblNvY2tldDsKLSAgICB0aGlzLm91dFNvY2tldCA9IG91dFNvY2tldDsKLSAgICB0aGlzLnJlYWRUaW1lb3V0U2Vjb25kcyA9IHJlYWRUaW1lb3V0U2Vjb25kczsKLQotICAgIC8vIEFERDoKLSAgICB2ZXJib3NlID0KLSAgICAgIHNvY2tldENvbm5lY3Rpb24uZ2V0TW9uaXRvcigpLmdldE1vbml0b3JDb25maWcoKS5nZXRWZXJib3NlT3B0aW9uKCk7Ci0KLSAgICBzdGFydCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldCBwYWlyZWQgc29ja2V0IGhhbmRsZXIuCi0gICAqIEBwYXJhbSBwYWlyZWRTb2NrZXRIYW5kbGVyIHBhaXJlZCBzb2NrZXQgaGFuZGxlci4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFBhaXJlZFNvY2tldEhhbmRsZXIoU29ja2V0SGFuZGxlciBwYWlyZWRTb2NrZXRIYW5kbGVyKQotICB7Ci0gICAgdGhpcy5wYWlyZWRTb2NrZXRIYW5kbGVyID0gcGFpcmVkU29ja2V0SGFuZGxlcjsKLSAgfQotCi0gIC8qKgotICAgKiBTZW5kIHRoZSBkYXRhIGZyb20gdGhlIGlucHV0IHNvY2tldCB0byB0aGUgb3V0cHV0IHNvY2tldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJ1bigpCi0gIHsKLSAgICBpbnQgcmVhZExlbjsKLSAgICBTdHJpbmcgcmVhZE1zZzsKLSAgICBNZXNzYWdlQ29udGV4dCBtZXNzYWdlQ29udGV4dCA9IG51bGw7Ci0KLSAgICAvLyBDcmVhdGUgcmVhZCBidWZmZXIgICAgICAKLSAgICBieXRlW10gcmVhZEJ1ZmZlciA9IG5ldyBieXRlWzQwOTZdOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gR2V0IHRoZSBpbnB1dCBhbmQgb3V0cHV0IHN0cmVhbXMKLSAgICAgIHRoaXMuaW5wdXRTdHJlYW0gPSB0aGlzLmluU29ja2V0LmdldElucHV0U3RyZWFtKCk7Ci0gICAgICB0aGlzLm91dHB1dFN0cmVhbSA9IHRoaXMub3V0U29ja2V0LmdldE91dHB1dFN0cmVhbSgpOwotCi0gICAgICAvLyBQcm9jZXNzIHdoaWxlIHRoZSBjb25uZWN0aW9uIGlzIGFjdGl2ZSAKLSAgICAgIC8vIChOT1RFOiB0aGVyZSBtaWdodCBiZSBtb3JlIHRoYW4gMSBtZXNzYWdlIHBlciBjb25uZWN0aW9uKQotICAgICAgYm9vbGVhbiBjb25uZWN0aW9uQWN0aXZlID0gdHJ1ZTsKLSAgICAgIHdoaWxlIChjb25uZWN0aW9uQWN0aXZlKQotICAgICAgewotICAgICAgICAvLyBSZXNldCBhbGwgZGF0YQotICAgICAgICByZWFkTGVuID0gMDsKLSAgICAgICAgbWVzc2FnZUNvbnRleHQgPSBuZXcgTWVzc2FnZUNvbnRleHQoKTsKLQotICAgICAgICAvLyBSZWFkIHVudGlsIG1lc3NhZ2UgaXMgY29tcGxldGUKLSAgICAgICAgYm9vbGVhbiBtZXNzYWdlQ29tcGxldGUgPSBmYWxzZTsKLSAgICAgICAgd2hpbGUgKCFtZXNzYWdlQ29tcGxldGUpCi0gICAgICAgIHsKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBERUJVRzoKLSAgICAgICAgICAgIGRlYnVnKCJydW4iLCAiUmVhZCBkYXRhIGZyb20gdGhlIGlucHV0IHN0cmVhbS4iKTsKLQotICAgICAgICAgICAgLy8gUmVhZCBkYXRhIGZyb20gdGhlIGlucHV0IHN0cmVhbQotICAgICAgICAgICAgcmVhZExlbiA9IGlucHV0U3RyZWFtLnJlYWQocmVhZEJ1ZmZlciwgMCwgcmVhZEJ1ZmZlci5sZW5ndGgpOwotCi0gICAgICAgICAgICAvLyBSZXNldCByZWFkIHRpbWVvdXQgZmxhZwotICAgICAgICAgICAgcmVhZFRpbWVkT3V0ID0gZmFsc2U7Ci0KLSAgICAgICAgICAgIC8vIERFQlVHOgotICAgICAgICAgICAgZGVidWcoInJ1biIsICJyZWFkTGVuOiAiICsgcmVhZExlbik7Ci0KLSAgICAgICAgICAgIGlmIChyZWFkTGVuID09IC0xKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjb25uZWN0aW9uQWN0aXZlID0gZmFsc2U7Ci0gICAgICAgICAgICAgIG1lc3NhZ2VDb21wbGV0ZSA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIElmIGRhdGEgd2FzIHJlYWQsIHRoZW4gY2hlY2sgZm9yIDEwMCBjb250aW51ZQotICAgICAgICAgICAgZWxzZSBpZiAocmVhZExlbiA+IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgdGhlIGZpcnN0IGRhdGEgdGhhdCB3YXMgcmVhZCwgdGhlbiBnZXQgdGhlIHRpbWVzdGFtcAotICAgICAgICAgICAgICBpZiAobWVzc2FnZUNvbnRleHQudGltZXN0YW1wID09IG51bGwpCi0gICAgICAgICAgICAgICAgbWVzc2FnZUNvbnRleHQudGltZXN0YW1wID0gVXRpbHMuZ2V0VGltZXN0YW1wKCk7Ci0KLSAgICAgICAgICAgICAgaWYgKGNvbm5lY3Rpb25UeXBlLmVxdWFscyhNZXNzYWdlRW50cnkuVFlQRV9SRVFVRVNUKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJ5dGVbXSB0b0hvc3QgPQotICAgICAgICAgICAgICAgICAgbmV3IFN0cmluZygKLSAgICAgICAgICAgICAgICAgICAgc29ja2V0Q29ubmVjdGlvbi5yZWRpcmVjdC5nZXRUb0hvc3QoKQotICAgICAgICAgICAgICAgICAgICAgICsgIjoiCi0gICAgICAgICAgICAgICAgICAgICAgKyBzb2NrZXRDb25uZWN0aW9uLnJlZGlyZWN0LmdldFRvUG9ydCgpKQotICAgICAgICAgICAgICAgICAgICAuZ2V0Qnl0ZXMoKTsKLQotICAgICAgICAgICAgICAgIFN0cmluZyBtZXNzYWdlID0gbmV3IFN0cmluZyhyZWFkQnVmZmVyLCAwLCByZWFkTGVuKTsKLQotICAgICAgICAgICAgICAgIGludCBpbmRleCA9IG1lc3NhZ2UuaW5kZXhPZihDUkxGICsgIkhvc3Q6ICIpOwotICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGluZGV4ICs9IDg7Ci0gICAgICAgICAgICAgICAgICBpbnQgc2Vjb25kUGFydCA9IG1lc3NhZ2UuaW5kZXhPZihDUkxGLCBpbmRleCk7Ci0KLSAgICAgICAgICAgICAgICAgIC8vIFdyaXRlIHRoZSBkYXRhIHRvIHRoZSBvdXRwdXQgc3RyZWFtIGFuZCB0aGVuIGdvIGZvcm1hdCBpdAotICAgICAgICAgICAgICAgICAgd3JpdGUodGhpcy5vdXRwdXRTdHJlYW0sIHJlYWRCdWZmZXIsIDAsIGluZGV4KTsKLSAgICAgICAgICAgICAgICAgIHdyaXRlKHRoaXMub3V0cHV0U3RyZWFtLCB0b0hvc3QsIDAsIHRvSG9zdC5sZW5ndGgpOwotICAgICAgICAgICAgICAgICAgd3JpdGUoCi0gICAgICAgICAgICAgICAgICAgIHRoaXMub3V0cHV0U3RyZWFtLAotICAgICAgICAgICAgICAgICAgICByZWFkQnVmZmVyLAotICAgICAgICAgICAgICAgICAgICBzZWNvbmRQYXJ0LAotICAgICAgICAgICAgICAgICAgICByZWFkTGVuIC0gc2Vjb25kUGFydCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAvLyBXcml0ZSB0aGUgZGF0YSB0byB0aGUgb3V0cHV0IHN0cmVhbSBhbmQgdGhlbiBnbyBmb3JtYXQgaXQKLSAgICAgICAgICAgICAgICAgIHdyaXRlKHRoaXMub3V0cHV0U3RyZWFtLCByZWFkQnVmZmVyLCAwLCByZWFkTGVuKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gV3JpdGUgdGhlIGRhdGEgdG8gdGhlIG91dHB1dCBzdHJlYW0gYW5kIHRoZW4gZ28gZm9ybWF0IGl0Ci0gICAgICAgICAgICAgICAgd3JpdGUodGhpcy5vdXRwdXRTdHJlYW0sIHJlYWRCdWZmZXIsIDAsIHJlYWRMZW4pOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgLy8gREVCVUc6Ci0gICAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGJ1ZmZlclN0cmluZyA9IG5ldyBTdHJpbmcocmVhZEJ1ZmZlciwgMCwgcmVhZExlbik7Ci0gICAgICAgICAgICAgICAgZGVidWcoInJ1biIsICJidWZmZXIgYXMgc3RyaW5nOiBbIiArIGJ1ZmZlclN0cmluZyArICJdIik7Ci0gICAgICAgICAgICAgICAgaWYgKGJ1ZmZlclN0cmluZy5sZW5ndGgoKSA8PSA1MCkKLSAgICAgICAgICAgICAgICAgIGRlYnVnKAotICAgICAgICAgICAgICAgICAgICAicnVuIiwKLSAgICAgICAgICAgICAgICAgICAgImJ1ZmZlciBhcyBoZXhzdHJpbmc6IFsiCi0gICAgICAgICAgICAgICAgICAgICAgKyBVdGlscy50b0hleFN0cmluZyhidWZmZXJTdHJpbmcpCi0gICAgICAgICAgICAgICAgICAgICAgKyAiXSIpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIGRlYnVnKAotICAgICAgICAgICAgICAgICAgICAicnVuIiwKLSAgICAgICAgICAgICAgICAgICAgImJ1ZmZlciBhcyBoZXhzdHJpbmc6IFsiCi0gICAgICAgICAgICAgICAgICAgICAgKyBVdGlscy50b0hleFN0cmluZyhidWZmZXJTdHJpbmcuc3Vic3RyaW5nKDAsIDUwKSkKLSAgICAgICAgICAgICAgICAgICAgICArICIgLi4uXSIpOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgLy8gU2VlIGlmIHRoaXMgcGFydCBvZiB0aGUgYnVmZmVyIGNvbnRhaW5zIHRoZSBCT00KLSAgICAgICAgICAgICAgaWYgKG1lc3NhZ2VDb250ZXh0LmJvbSA9PSAwKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbWVzc2FnZUNvbnRleHQuYm9tID0gZ2V0Qk9NKHJlYWRCdWZmZXIpOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgLy8gREVCVUcKLSAgICAgICAgICAgICAgZGVidWcoInJ1biIsICJib206ICIgKyBtZXNzYWdlQ29udGV4dC5ib20pOwotCi0gICAgICAgICAgICAgIFN0cmluZyBlbmNvZGluZzsKLQotICAgICAgICAgICAgICB0cnkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGVuY29kaW5nID0gZ2V0RW5jb2RpbmcoKTsKLSAgICAgICAgICAgICAgICByZWFkTXNnID0KLSAgICAgICAgICAgICAgICAgIG5ldyBTdHJpbmcoCi0gICAgICAgICAgICAgICAgICAgIHJlYWRCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgICAgIHJlYWRMZW4sCi0gICAgICAgICAgICAgICAgICAgIFV0aWxzLmdldEphdmFFbmNvZGluZyhlbmNvZGluZykpOwotICAgICAgICAgICAgICAgIHNldEVuY29kaW5nKHJlYWRNc2cpOwotICAgICAgICAgICAgICAgIGlmICghZW5jb2RpbmcuZXF1YWxzKGdldEVuY29kaW5nKCkpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGVuY29kaW5nID0gZ2V0RW5jb2RpbmcoKTsKLSAgICAgICAgICAgICAgICAgIHJlYWRNc2cgPQotICAgICAgICAgICAgICAgICAgICBuZXcgU3RyaW5nKAotICAgICAgICAgICAgICAgICAgICAgIHJlYWRCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAgICAgICByZWFkTGVuLAotICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLmdldEphdmFFbmNvZGluZyhlbmNvZGluZykpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIGNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIHVlZSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGRlYnVnKCJydW4iLCAiRVhDRVBUSU9OICgzKTogIiArIHVlZS50b1N0cmluZygpKTsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbih1ZWUudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAvLyBTZXQgZW5jb2RpbmcgaW4gdGhlIG1lc3NhZ2UgY29udGV4dAotICAgICAgICAgICAgICBtZXNzYWdlQ29udGV4dC5lbmNvZGluZyA9IGVuY29kaW5nOwotCi0gICAgICAgICAgICAgIC8vIERFQlVHCi0gICAgICAgICAgICAgIGRlYnVnKCJydW4iLCAiZW5jb2Rpbmc6ICIgKyBtZXNzYWdlQ29udGV4dC5lbmNvZGluZyk7Ci0KLSAgICAgICAgICAgICAgLy8gUHJvY2VzcyBtZXNzYWdlCi0gICAgICAgICAgICAgIG1lc3NhZ2VDb250ZXh0ID0gcHJvY2Vzc01lc3NhZ2UocmVhZExlbiwgcmVhZE1zZywgbWVzc2FnZUNvbnRleHQpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBJZiBtZXNzYWdlIGlzIGNvbXBsZXRlLCB0aGVuIGxvZyBpdCBhbmQgcmVzZXQgYnVmZmVyCi0gICAgICAgICAgICBpZiAoKGlzTWVzc2FnZUNvbXBsZXRlKG1lc3NhZ2VDb250ZXh0KSkKLSAgICAgICAgICAgICAgfHwgKChyZWFkTGVuID09IC0xKSAmJiAobWVzc2FnZUNvbnRleHQubWVzc2FnZUJ1ZmZlci5sZW5ndGgoKSA+IDApKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gTG9nIG1lc3NhZ2UKLSAgICAgICAgICAgICAgbG9nTWVzc2FnZShtZXNzYWdlQ29udGV4dCk7Ci0KLSAgICAgICAgICAgICAgLy8gU2V0IG1lc3NhZ2UgY29tcGxldGUKLSAgICAgICAgICAgICAgbWVzc2FnZUNvbXBsZXRlID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBjYXRjaCAoSW50ZXJydXB0ZWRJT0V4Y2VwdGlvbiBpZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBTZXQgcmVhZCB0aW1lb3V0IGZsYWcKLSAgICAgICAgICAgIHJlYWRUaW1lZE91dCA9IHRydWU7Ci0KLSAgICAgICAgICAgIGRlYnVnKCJydW4iLCAiSW50ZXJydXB0ZWRJT0V4Y2VwdGlvbjogIiArIGllLnRvU3RyaW5nKCkpOwotCi0gICAgICAgICAgICAvLyBJZiB0aGUgcmVhZCBpcyBub3QgZG9uZSwgdGhlbiBzaHV0ZG93biAKLSAgICAgICAgICAgIGlmIChwYWlyZWRTb2NrZXRIYW5kbGVyICE9IG51bGwKLSAgICAgICAgICAgICAgJiYgcGFpcmVkU29ja2V0SGFuZGxlci5pc1JlYWRXYWl0aW5nKCkKLSAgICAgICAgICAgICAgJiYgcGFpcmVkU29ja2V0SGFuZGxlci5pc1JlYWRUaW1lZE91dCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvLyBERUJVRzoKLSAgICAgICAgICAgICAgZGVidWcoInJ1biIsICJyZWFkIHRpbWVkIG91dCBvbiBib3RoIHNvY2tldHMiKTsKLQotICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBkYXRhIGluIHRoZSBtZXNzYWdlIGJ1ZmZlciBhbmQgaXQgaXMgY29tcGxldGUsIHRoZW4gbG9nIGl0Ci0gICAgICAgICAgICAgIGlmICgoaXNNZXNzYWdlQ29tcGxldGUobWVzc2FnZUNvbnRleHQpKQotICAgICAgICAgICAgICAgIHx8IChtZXNzYWdlQ29udGV4dC5tZXNzYWdlQnVmZmVyLmxlbmd0aCgpID4gMCkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBMb2cgbWVzc2FnZQotICAgICAgICAgICAgICAgIGxvZ01lc3NhZ2UobWVzc2FnZUNvbnRleHQpOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgLy8gU2V0IG1lc3NhZ2UgY29tcGxldGUKLSAgICAgICAgICAgICAgY29ubmVjdGlvbkFjdGl2ZSA9IGZhbHNlOwotICAgICAgICAgICAgICBtZXNzYWdlQ29tcGxldGUgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLQotICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZTIpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gREVCVUc6Ci0gICAgICAgICAgICBkZWJ1ZygKLSAgICAgICAgICAgICAgInJ1biIsCi0gICAgICAgICAgICAgICJFWENFUFRJT04gKDIpOiAiCi0gICAgICAgICAgICAgICAgKyBlMi50b1N0cmluZygpCi0gICAgICAgICAgICAgICAgKyAiXG4iCi0gICAgICAgICAgICAgICAgKyBVdGlscy5nZXRFeGNlcHRpb25EZXRhaWxzKGUyKSk7Ci0gICAgICAgICAgICAvL2UyLnByaW50U3RhY2tUcmFjZSgpOwotCi0gICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBkYXRhIGluIHRoZSBtZXNzYWdlIGJ1ZmZlciBhbmQgaXQgaXMgY29tcGxldGUsIHRoZW4gbG9nIGl0Ci0gICAgICAgICAgICBpZiAoKGlzTWVzc2FnZUNvbXBsZXRlKG1lc3NhZ2VDb250ZXh0KSkKLSAgICAgICAgICAgICAgfHwgKG1lc3NhZ2VDb250ZXh0Lm1lc3NhZ2VCdWZmZXIubGVuZ3RoKCkgPiAwKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gTG9nIG1lc3NhZ2UKLSAgICAgICAgICAgICAgbG9nTWVzc2FnZShtZXNzYWdlQ29udGV4dCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFNldCBtZXNzYWdlIGNvbXBsZXRlCi0gICAgICAgICAgICBjb25uZWN0aW9uQWN0aXZlID0gZmFsc2U7Ci0gICAgICAgICAgICBtZXNzYWdlQ29tcGxldGUgPSB0cnVlOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBERUJVRzoKLSAgICAgIGRlYnVnKAotICAgICAgICAicnVuIiwKLSAgICAgICAgIkVYQ0VQVElPTiAoMSk6ICIKLSAgICAgICAgICArIGUuZ2V0TWVzc2FnZSgpCi0gICAgICAgICAgKyAiXG4iCi0gICAgICAgICAgKyBVdGlscy5nZXRFeGNlcHRpb25EZXRhaWxzKGUpKTsKLSAgICAgIC8vZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoRXJyb3IgZXJyKQotICAgIHsKLSAgICAgIC8vIERFQlVHOgotICAgICAgZGVidWcoInJ1biIsICJFUlJPUjogIiArIGVyci5nZXRNZXNzYWdlKCkpOwotICAgICAgLy9lcnIucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfQotCi0gICAgZmluYWxseQotICAgIHsKLSAgICAgIHNodXRkb3duKCk7Ci0gICAgICBzb2NrZXRDb25uZWN0aW9uLndha2VVcCgpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBQcm9jZXNzIHRoZSBtZXNzYWdlLgotICAgKi8KLSAgcHJpdmF0ZSBNZXNzYWdlQ29udGV4dCBwcm9jZXNzTWVzc2FnZSgKLSAgICBpbnQgcmVhZExlbiwKLSAgICBTdHJpbmcgcmVhZE1zZywKLSAgICBNZXNzYWdlQ29udGV4dCBpbk1lc3NhZ2VDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIGJvb2xlYW4gY29udGludWVSZWFkID0gZmFsc2U7Ci0KLSAgICAvLyBJbml0aWFsaXplIG1lc3NhZ2UgY29udGV4dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIE1lc3NhZ2VDb250ZXh0IG1lc3NhZ2VDb250ZXh0ID0gaW5NZXNzYWdlQ29udGV4dDsKLQotICAgIC8vIEdldCBtZXNzYWdlIGJ1ZmZlciBhbmQgY2h1bmtlZCBkYXRhIGZyb20gbWVzc2FnZSBjb250ZXh0Ci0gICAgU3RyaW5nQnVmZmVyIG1lc3NhZ2VCdWZmZXIgPSBtZXNzYWdlQ29udGV4dC5tZXNzYWdlQnVmZmVyOwotICAgIENodW5rZWREYXRhIGNodW5rZWREYXRhID0gbWVzc2FnZUNvbnRleHQuY2h1bmtlZERhdGE7Ci0KLSAgICAvLyBJZiBhbGwgd2UgcmVjZWl2ZWQgd2FzIHRoZSBoZWFkZXIgd2l0aCAxMDAgY29udGludWUsIHRoZW4gaWdub3JlIGl0Ci0gICAgaWYgKChyZWFkTXNnLnRvVXBwZXJDYXNlKCkuaW5kZXhPZihIVFRQXzEwMF9DT05USU5VRSkgIT0gLTEpCi0gICAgICAmJiAocmVhZExlbiA+PSAyNSkpCi0gICAgewotICAgICAgLy8gREVCVUc6Ci0gICAgICBkZWJ1ZygicHJvY2Vzc01lc3NhZ2UiLCAiSWdub3JlIEhUVFAgMTAwIENvbnRpbnVlLiIpOwotCi0gICAgICAvLyBGaW5kIHRoZSBlbmQgb2YgdGhlIEhUVFAgMTAwIG1lc3NhZ2UKLSAgICAgIGludCBpbmRleCA9IFV0aWxzLmdldEZpcnN0Q1JMRkNSTEYocmVhZE1zZyk7Ci0KLSAgICAgIC8vIElmIHRoZXJlIGlzIG9ubHkgdGhlIEhUVFAgMTAwIG1lc3NhZ2UsIHRoZW4ganVzdCBpZ25vcmUgaXQKLSAgICAgIGlmIChpbmRleCA9PSByZWFkTXNnLmxlbmd0aCgpKQotICAgICAgICBjb250aW51ZVJlYWQgPSB0cnVlOwotCi0gICAgICAvLyBPdGhlcndpc2UgcmVtb3ZlIHRoZSBIVFRQIDEwMCBtZXNzYWdlIGFuZCBjb250aW51ZQotICAgICAgZWxzZQotICAgICAgICByZWFkTXNnID0gcmVhZE1zZy5zdWJzdHJpbmcoaW5kZXgpOwotICAgIH0KLQotICAgIC8vIEFERDogV2hhdCBpZiBhIGJ5cGFzc2VkIG1lc3NhZ2UgY29udGFpbnMgYW5vdGhlciBtZXNzYWdlIGFmdGVyIGl0PwotICAgIGlmICghY29udGludWVSZWFkICYmIGJ5cGFzc01lc3NhZ2UocmVhZE1zZykpCi0gICAgewotICAgICAgLy8gREVCVUc6Ci0gICAgICBkZWJ1ZygKLSAgICAgICAgInByb2Nlc3NNZXNzYWdlIiwKLSAgICAgICAgIkRvIG5vdCBsb2cgbWVzc2FnZSBhcyBkZWZpbmVkIGluIHRoZSBtb25pdG9yIHNwZWMsIGJ1dCBpdCB3aWxsIGJlIHNlbnQuIik7Ci0KLSAgICAgIGNvbnRpbnVlUmVhZCA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKCFjb250aW51ZVJlYWQpCi0gICAgewotICAgICAgaW50IGluZGV4ID0gMDsKLQotICAgICAgLy8gSWYgdGhlcmUgaXMgY2h1bmtlZCBkYXRhLCB0aGVuIGdldCB0aGUgbGVuZ3RoCi0gICAgICBpZiAoKHJlYWRNc2cudG9VcHBlckNhc2UoKS5pbmRleE9mKENIVU5LRUQpICE9IC0xKQotICAgICAgICB8fCAocmVhZE1zZy50b1VwcGVyQ2FzZSgpLmluZGV4T2YoQ0hVTktFRF9XSVRIX1FVT1RFUykgIT0gLTEpKQotICAgICAgewotICAgICAgICAvLyBERUJVRzoKLSAgICAgICAgZGVidWcoInByb2Nlc3NNZXNzYWdlIiwgIlByb2Nlc3NpbmcgY2h1bmtlZCBkYXRhLi4uIik7Ci0KLSAgICAgICAgLy8gR2V0IHRoZSBsb2NhdGlvbiBvZiB0aGUgZmlyc3QgQ0ZMRgotICAgICAgICBpZiAoKGluZGV4ID0gcmVhZE1zZy5pbmRleE9mKENSTEYgKyBDUkxGKSkgPT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKCJDb3VsZCBub3QgbG9jYXRlIGVuZCBvZiBIVFRQIGhlYWRlci4iKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEluY2x1ZGUgdGhlIENSTEYrQ1JMRiBpbiB0aGUgaW5kZXgKLSAgICAgICAgaW5kZXggKz0gNDsKLQotICAgICAgICAvLyBERUJVRzoKLSAgICAgICAgZGVidWcoCi0gICAgICAgICAgInByb2Nlc3NNZXNzYWdlIiwKLSAgICAgICAgICAiQWRkIGhlYWRlciBiZWZvcmUgZGVjb2RpbmcgY2h1bmtlZCBkYXRhOiBbIgotICAgICAgICAgICAgKyByZWFkTXNnLnN1YnN0cmluZygwLCBpbmRleCkKLSAgICAgICAgICAgICsgIl0iKTsKLQotICAgICAgICAvLyBBZGQgSFRUUCBoZWFkZXIgdG8gYnVmZmVyCi0gICAgICAgIG1lc3NhZ2VCdWZmZXIuYXBwZW5kKHJlYWRNc2cuc3Vic3RyaW5nKDAsIGluZGV4KSk7Ci0KLSAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gbW9yZSBkYXRhIChpLmUuIGhlYWRlciBvbmx5KSwgdGhlbiBqdXN0IGluZGljYXRlIHRoYXQgdGhlcmUgaXMgbW9yZSBjaHVua2VkIGRhdGEKLSAgICAgICAgaWYgKHJlYWRNc2cubGVuZ3RoKCkgPT0gaW5kZXgpCi0gICAgICAgIHsKLSAgICAgICAgICBjaHVua2VkRGF0YSA9IG5ldyBDaHVua2VkRGF0YSh0aGlzLCB0cnVlKTsKLQotICAgICAgICAgIC8vIERFQlVHOgotICAgICAgICAgIGRlYnVnKAotICAgICAgICAgICAgInByb2Nlc3NNZXNzYWdlIiwKLSAgICAgICAgICAgICJUaGVyZSBpcyBjaHVuayBkYXRhLCBidXQgbm9uZSBpbiB0aGlzIHBhcnQgb2YgdGhlIG1lc3NhZ2UuIik7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBEZXRlcm1pbmUgaWYgdGhlIHJlbWFpbmRlciBvZiB0aGUgZGF0YSBpcyBjb21wbGV0ZSAoaS5lLiBlbmRzIHdpdGggWzBdW0NSTEZdW09wdGlvbmFsIEZvb3Rlcl1bQ1JMRl0pCi0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIC8vIENyZWF0ZSBjaHVua2VkIGRhdGEgb2JqZWN0Ci0gICAgICAgICAgY2h1bmtlZERhdGEgPSBuZXcgQ2h1bmtlZERhdGEodGhpcywgcmVhZE1zZy5zdWJzdHJpbmcoaW5kZXgpKTsKLQotICAgICAgICAgIGlmICghY2h1bmtlZERhdGEuaXNNb3JlQ2h1bmtlZERhdGEoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBjaHVua2VkRGF0YS5kZWNvZGVBbmRBZGREYXRhVG9CdWZmZXIobWVzc2FnZUJ1ZmZlcik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGVsc2UgaWYgKGNodW5rZWREYXRhICE9IG51bGwgJiYgY2h1bmtlZERhdGEuaXNNb3JlQ2h1bmtlZERhdGEoKSkKLSAgICAgIHsKLSAgICAgICAgLy8gREVCVUc6Ci0gICAgICAgIGRlYnVnKCJwcm9jZXNzTWVzc2FnZSIsICJQcm9jZXNzaW5nIE1PUkUgY2h1bmtlZCBkYXRhLi4uIik7Ci0KLSAgICAgICAgLy8gQWRkIGRhdGEKLSAgICAgICAgY2h1bmtlZERhdGEuYWRkRGF0YShyZWFkTXNnKTsKLQotICAgICAgICAvLyBEZWNvZGUgZGF0YQotICAgICAgICBpZiAoIWNodW5rZWREYXRhLmlzTW9yZUNodW5rZWREYXRhKCkpCi0gICAgICAgIHsKLSAgICAgICAgICBjaHVua2VkRGF0YS5kZWNvZGVBbmRBZGREYXRhVG9CdWZmZXIobWVzc2FnZUJ1ZmZlcik7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8gRWxzZSBqdXN0IGFwcGVuZCB0aGUgZGF0YSB0byB0aGUgYnVmZmVyCi0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIERFQlVHOgotICAgICAgICBkZWJ1ZygKLSAgICAgICAgICAicHJvY2Vzc01lc3NhZ2UiLAotICAgICAgICAgICJBZGQgZGF0YSB0byBtZXNzYWdlIGVudHJ5IGJ1ZmZlcjogWyIgKyByZWFkTXNnICsgIl0iKTsKLQotICAgICAgICBtZXNzYWdlQnVmZmVyLmFwcGVuZChyZWFkTXNnKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBTZXQgdXBkYXRlZCBtZXNzYWdlIGJ1ZmZlciBhbmQgY2h1bmtlZCBkYXRhIGluIG1lc3NhZ2UgY29udGV4dCAgICAKLSAgICBtZXNzYWdlQ29udGV4dC5tZXNzYWdlQnVmZmVyID0gbWVzc2FnZUJ1ZmZlcjsKLSAgICBtZXNzYWdlQ29udGV4dC5jaHVua2VkRGF0YSA9IGNodW5rZWREYXRhOwotCi0gICAgLy8gUmV0dXJuIG1lc3NhZ2UgY29udGV4dCAKLSAgICByZXR1cm4gbWVzc2FnZUNvbnRleHQ7Ci0gIH0KLQotICAvKioKLSAgICogU2h1dGRvd24gaW5wdXQgc29ja2V0IGFuZCBjbG9zZSBpbnB1dCBzdHJlYW0uCi0gICAqIEBwYXJhbSBpblNvY2tldCBpbiBzb2NrZXQuCi0gICAqIEBwYXJhbSBpbnB1dFN0cmVhbSBpbnB1dCBzdHJlYW0uCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBzdG9wSW5wdXQoU29ja2V0IGluU29ja2V0LCBJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIElmIHRoZXJlIGlzIGEgaW5wdXQgc29ja2V0LCB0aGVuIHNodXRkb3duIHRoZSBpbnB1dAotICAgICAgaWYgKGluU29ja2V0ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGluU29ja2V0LnNodXRkb3duSW5wdXQoKTsKLSAgICAgIH0KLQotICAgICAgLy8gSWYgdGhlcmUgaXMgYW4gaW5wdXQgc3RyZWFtIHRoZW4gY2xvc2UgaXQKLSAgICAgIGlmIChpbnB1dFN0cmVhbSAhPSBudWxsKQotICAgICAgewotICAgICAgICBpbnB1dFN0cmVhbS5jbG9zZSgpOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gSWdub3JlIHNpbmNlIHdlIGFyZSBzdG9wcGluZyBldmVyeXRoaW5nCi0gICAgfQotCi0gICAgaW5wdXRTdHJlYW0gPSBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFNodXRkb3duIG91dHB1dCBzb2NrZXQgYW5kIGNsb3NlIG91dHB1dCBzdHJlYW0uCi0gICAqIEBwYXJhbSBvdXRTb2NrZXQgb3V0IHNvY2tldC4KLSAgICogQHBhcmFtIG91dHB1dFN0cmVhbSBvdXRwdXQgc3RyZWFtLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc3RvcE91dHB1dChTb2NrZXQgb3V0U29ja2V0LCBPdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gSWYgdGhlcmUgaXMgYW4gb3V0cHV0IHN0cmVhbSwgdGhlbiBmbHVzaCBpdAotICAgICAgaWYgKG91dHB1dFN0cmVhbSAhPSBudWxsKQotICAgICAgewotICAgICAgICBvdXRwdXRTdHJlYW0uZmx1c2goKTsKLSAgICAgIH0KLQotICAgICAgLy8gSWYgdGhlcmUgaXMgYSBpbnB1dCBzb2NrZXQsIHRoZW4gc2h1dGRvd24gdGhlIGlucHV0Ci0gICAgICBpZiAob3V0U29ja2V0ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIG91dFNvY2tldC5zaHV0ZG93bk91dHB1dCgpOwotICAgICAgfQotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBhbiBvdXRwdXQgc3RyZWFtIHRoZW4gY2xvc2UgaXQKLSAgICAgIGlmIChvdXRwdXRTdHJlYW0gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgb3V0cHV0U3RyZWFtLmNsb3NlKCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vIElnbm9yZSBzaW5jZSB3ZSBhcmUgc3RvcHBpbmcgZXZlcnl0aGluZwotICAgIH0KLQotICAgIG91dHB1dFN0cmVhbSA9IG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogU2h1dGRvd24gaGFuZGxlci4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNodXRkb3duKCkKLSAgewotICAgIC8vIFN0b3AgYm90aCB0aGUgaW5wdXQgYW5kIG91dHB1dAotICAgIHN0b3BJbnB1dCh0aGlzLmluU29ja2V0LCB0aGlzLmlucHV0U3RyZWFtKTsKLSAgICBzdG9wT3V0cHV0KHRoaXMub3V0U29ja2V0LCB0aGlzLm91dHB1dFN0cmVhbSk7Ci0gIH0KLQotICAvKioKLSAgICogRGlzcGxheSBkZWJ1ZyBtZXNzYWdlcy4KLSAgICovCi0gIHZvaWQgZGVidWcoU3RyaW5nIG1ldGhvZCwgU3RyaW5nIG1lc3NhZ2UpCi0gIHsKLSAgICBkZWJ1ZygiU29ja2V0SGFuZGxlciIsIG1ldGhvZCwgbWVzc2FnZSk7Ci0gIH0KLQotICAvKioKLSAgICogRGlzcGxheSBkZWJ1ZyBtZXNzYWdlcy4KLSAgICovCi0gIHZvaWQgZGVidWcoU3RyaW5nIGNsYXNzTmFtZSwgU3RyaW5nIG1ldGhvZCwgU3RyaW5nIG1lc3NhZ2UpCi0gIHsKLSAgICBpZiAodmVyYm9zZSkKLSAgICAgIHByaW50KGNsYXNzTmFtZSwgbWV0aG9kLCBtZXNzYWdlKTsKLSAgfQotCi0gIC8qKgotICAgKiBEaXNwbGF5IG1lc3NhZ2VzLgotICAgKi8KLSAgdm9pZCBwcmludChTdHJpbmcgY2xhc3NOYW1lLCBTdHJpbmcgbWV0aG9kLCBTdHJpbmcgbWVzc2FnZSkKLSAgewotICAgIFN5c3RlbS5vdXQucHJpbnRsbigKLSAgICAgICJbIgotICAgICAgICArIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0TmFtZSgpCi0gICAgICAgICsgIl0gWyIKLSAgICAgICAgKyBjbGFzc05hbWUKLSAgICAgICAgKyAiLiIKLSAgICAgICAgKyBtZXRob2QKLSAgICAgICAgKyAiXSBbIgotICAgICAgICArIHRoaXMuY29ubmVjdGlvblR5cGUKLSAgICAgICAgKyAiXSAiCi0gICAgICAgICsgbWVzc2FnZSk7Ci0gIH0KLQotICAvKiogCi0gICAqIFdyaXRlIGRhdGEuCi0gICAqLwotICBwcml2YXRlIHZvaWQgd3JpdGUoCi0gICAgT3V0cHV0U3RyZWFtIG91dHB1dFN0cmVhbSwKLSAgICBieXRlW10gYnVmZmVyLAotICAgIGludCBzdGFydCwKLSAgICBpbnQgbGVuZ3RoKQotICAgIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgaWYgKG91dHB1dFN0cmVhbSA9PSBudWxsKQotICAgIHsKLSAgICAgIC8vIERFQlVHOgotICAgICAgZGVidWcoIndyaXRlIiwgIkNvdWxkIG5vdCB3cml0ZSBidWZmZXIgYmVjYXVzZSBvdXRwdXQgc3RyZWFtIGlzIG51bGwuIik7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBERUJVRzoKLSAgICAgIGRlYnVnKCJ3cml0ZSIsICJidWZmZXI6IFsiICsgbmV3IFN0cmluZyhidWZmZXIsIHN0YXJ0LCBsZW5ndGgpICsgIl0iKTsKLQotICAgICAgb3V0cHV0U3RyZWFtLndyaXRlKGJ1ZmZlciwgc3RhcnQsIGxlbmd0aCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqIAotICAgKiBDaGVjayBpZiBtZXNzYWdlIGlzIGNvbXBsZXRlLgotICAgKiAKLSAgICogQHBhcmFtIG1lc3NhZ2VDb250ZXh0Ci0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gaXNNZXNzYWdlQ29tcGxldGUoTWVzc2FnZUNvbnRleHQgbWVzc2FnZUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgaW50IGluZGV4LCBpbmRleDIsIGNvbnRlbnRMZW47Ci0gICAgYm9vbGVhbiBtZXNzYWdlQ29tcGxldGUgPSBmYWxzZTsKLQotICAgIGJvb2xlYW4gbW9yZUNodW5rZWREYXRhID0gbWVzc2FnZUNvbnRleHQuY2h1bmtlZERhdGEuaXNNb3JlQ2h1bmtlZERhdGEoKTsKLQotICAgIFN0cmluZyBtZXNzYWdlID0gbWVzc2FnZUNvbnRleHQubWVzc2FnZUJ1ZmZlci50b1N0cmluZygpOwotCi0gICAgLy8gRmluZCB0aGUgZmlyc3QgQ1JMRiArIENSTEYgd2hpY2ggbWFya3MgdGhlIGVuZCBvZiB0aGUgSFRUUCBoZWFkZXIKLSAgICBTdHJpbmcgaHR0cEhlYWRlcjsKLSAgICBpbmRleCA9IFV0aWxzLmdldEZpcnN0Q1JMRkNSTEYobWVzc2FnZSk7Ci0gICAgaWYgKGluZGV4ID09IC0xKQotICAgICAgaHR0cEhlYWRlciA9IG1lc3NhZ2U7Ci0gICAgZWxzZQotICAgICAgaHR0cEhlYWRlciA9IG1lc3NhZ2Uuc3Vic3RyaW5nKDAsIGluZGV4KTsKLQotICAgIC8vIElmIGNodW5rZWQgZGF0YSwgdGhlbiBjb21wbGV0ZSBvbmx5IGlmIHRoZXJlIGlzIG5vIG1vcmUgZGF0YQotICAgIGlmICgoKGh0dHBIZWFkZXIudG9VcHBlckNhc2UoKS5pbmRleE9mKENIVU5LRUQpICE9IC0xKQotICAgICAgfHwgKGh0dHBIZWFkZXIudG9VcHBlckNhc2UoKS5pbmRleE9mKENIVU5LRURfV0lUSF9RVU9URVMpICE9IC0xKSkKLSAgICAgICYmICghbW9yZUNodW5rZWREYXRhKSkKLSAgICB7Ci0gICAgICBkZWJ1ZygKLSAgICAgICAgImlzTWVzc2FnZUNvbXBsZXRlIiwKLSAgICAgICAgIkhUVFAgaGVhZGVyIGluZGljYXRlcyBjaHVua2VkIGRhdGEgYW5kIHRoZXJlIGlzIG5vIG1vcmUgY2h1bmtlZCBkYXRhIik7Ci0gICAgICBtZXNzYWdlQ29tcGxldGUgPSB0cnVlOwotICAgIH0KLQotICAgIC8vIENoZWNrIGZvciBjb250ZW50IGxlbmd0aAotICAgIGVsc2UgaWYgKChpbmRleCA9IGh0dHBIZWFkZXIudG9VcHBlckNhc2UoKS5pbmRleE9mKENPTlRFTlRfTEVOR1RIKSkgPT0gLTEpCi0gICAgewotICAgICAgZGVidWcoImlzTWVzc2FnZUNvbXBsZXRlIiwgIkhUVFAgaGVhZGVyIGRvZXMgbm90IGNvbnRhaW4gY29udGVudCBsZW5ndGgiKTsKLQotICAgICAgLy8gU2hvdWxkIG5vdCBoYXZlIGNvbXBsZXRlIFBPU1QgaGVhZGVyIHdpdGhvdXQgY29udGVudCBsZW5ndGgKLSAgICAgIGlmIChodHRwSGVhZGVyLnN0YXJ0c1dpdGgoIlBPU1QiKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKGh0dHBIZWFkZXIuZW5kc1dpdGgoQ1JMRiArIENSTEYpKQotICAgICAgICB7Ci0gICAgICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigiQ291bGQgbm90IGxvY2F0ZSBjb250ZW50LWxlbmd0aCBpbiBIVFRQIFBPU1QgaGVhZGVyLiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgbWVzc2FnZUNvbXBsZXRlID0gZmFsc2U7Ci0gICAgICB9Ci0KLSAgICAgIC8vIFRoaXMgY291bGQgYmUgYSBHRVQsIHNvIHNlZSBpZiB0aGUgdGhlIGNvbXBsZXRlIGhlYWRlciBoYXMgYmVlbiByZWNlaXZlZAotICAgICAgZWxzZSBpZiAoCi0gICAgICAgIGh0dHBIZWFkZXIuc3RhcnRzV2l0aCgiR0VUIikKLSAgICAgICAgICAmJiAobWVzc2FnZS5sZW5ndGgoKSA9PSBodHRwSGVhZGVyLmxlbmd0aCgpCi0gICAgICAgICAgICAmJiBtZXNzYWdlLmVuZHNXaXRoKENSTEYgKyBDUkxGKSkpCi0gICAgICB7Ci0gICAgICAgIG1lc3NhZ2VDb21wbGV0ZSA9IHRydWU7Ci0gICAgICB9Ci0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgbWVzc2FnZUNvbXBsZXRlID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlcmUgaXMgY29udGVudCBsZW5ndGgsIHRoZW4gc2VlIGlmIHRoZSBlbnRpcmUgbWVzc2FnZSBoYXMgYmVlbiByZWNlaXZlZAotICAgIGVsc2UgaWYgKChpbmRleCA9IGh0dHBIZWFkZXIudG9VcHBlckNhc2UoKS5pbmRleE9mKENPTlRFTlRfTEVOR1RIKSkgIT0gLTEpCi0gICAgewotICAgICAgLy8gRmluZCBlbmQgb2YgY29udGVudCBsZW5ndGggdmFsdWUKLSAgICAgIGluZGV4MiA9IGh0dHBIZWFkZXIuaW5kZXhPZihDUkxGLCBpbmRleCk7Ci0KLSAgICAgIGRlYnVnKCJpc01lc3NhZ2VDb21wbGV0ZSIsICJDUkxGOiAiICsgVXRpbHMudG9IZXhTdHJpbmcoQ1JMRikpOwotICAgICAgZGVidWcoCi0gICAgICAgICJpc01lc3NhZ2VDb21wbGV0ZSIsCi0gICAgICAgICJodHRwSGVhZGVyL2luZGV4OiAiICsgVXRpbHMudG9IZXhTdHJpbmcoaHR0cEhlYWRlci5zdWJzdHJpbmcoaW5kZXgpKSk7Ci0KLSAgICAgIC8vIEdldCBjb250ZW50IGxlbmd0aAotICAgICAgY29udGVudExlbiA9Ci0gICAgICAgIEludGVnZXIKLSAgICAgICAgICAuZGVjb2RlKAotICAgICAgICAgICAgaHR0cEhlYWRlci5zdWJzdHJpbmcoaW5kZXggKyBDT05URU5UX0xFTkdUSC5sZW5ndGgoKSArIDEsIGluZGV4MikpCi0gICAgICAgICAgLmludFZhbHVlKCk7Ci0KLSAgICAgIC8vIERFQlVHOgotICAgICAgZGVidWcoImlzTWVzc2FnZUNvbXBsZXRlIiwgImNvbnRlbnRMZW46ICIgKyBjb250ZW50TGVuKTsKLQotICAgICAgLy8gRmluZCB0aGUgZmlyc3QgQ1JMRiArIENSTEYgd2hpY2ggbWFya3MgdGhlIGVuZCBvZiB0aGUgSFRUUCBoZWFkZXIKLSAgICAgIGluZGV4ID0gVXRpbHMuZ2V0Rmlyc3RDUkxGQ1JMRihtZXNzYWdlKTsKLQotICAgICAgLy8gREVCVUc6Ci0gICAgICBkZWJ1ZygKLSAgICAgICAgImlzTWVzc2FnZUNvbXBsZXRlIiwKLSAgICAgICAgImFjdHVhbCByZWNlaXZlZCBtZXNzYWdlIGxlbmd0aDogIiArIChtZXNzYWdlLmxlbmd0aCgpIC0gKGluZGV4KSkpOwotCi0gICAgICAvLyBJZiBjb250ZW50IGxlbmd0aCBpcyBlcXVhbCB0byBhY3R1YWwgbWVzc2FnZSBjb250ZW50IGxlbmd0aCwgdGhlbiBtZXNzYWdlIGlzIGNvbXBsZXRlCi0gICAgICBpZiAoY29udGVudExlbiA9PSBtZXNzYWdlLmxlbmd0aCgpIC0gaW5kZXgpCi0gICAgICB7Ci0gICAgICAgIG1lc3NhZ2VDb21wbGV0ZSA9IHRydWU7Ci0KLSAgICAgICAgLy8gREVCVUc6Ci0gICAgICAgIGRlYnVnKAotICAgICAgICAgICJpc01lc3NhZ2VDb21wbGV0ZSIsCi0gICAgICAgICAgImNvbnRlbnRMZW4gPSBhY3R1YWwgcmVjZWl2ZWQgbWVzc2FnZSBsZW5ndGguIik7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gTWVzc2FnZSBpcyBub3QgY29tcGxldGUKLSAgICBlbHNlCi0gICAgewotICAgICAgbWVzc2FnZUNvbXBsZXRlID0gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gREVCVUc6Ci0gICAgZGVidWcoImlzTWVzc2FnZUNvbXBsZXRlIiwgIm1lc3NhZ2VDb21wbGV0ZTogIiArIG1lc3NhZ2VDb21wbGV0ZSk7Ci0KLSAgICByZXR1cm4gbWVzc2FnZUNvbXBsZXRlOwotICB9Ci0KLSAgLyoqIAotICAgKiBMb2cgbWVzc2FnZS4KLSAgICogCi0gICAqIEBwYXJhbSBtZXNzYWdlQnVmZmVyCi0gICAqLwotICBwcml2YXRlIHZvaWQgbG9nTWVzc2FnZShNZXNzYWdlQ29udGV4dCBtZXNzYWdlQ29udGV4dCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gRGV0ZXJtaW5lIHNlbmRlciBhbmQgcmVjZWl2ZXIgaG9zdC9wb3J0Ci0gICAgU3RyaW5nIHNlbmRlckhvc3RBbmRQb3J0LCByZWNlaXZlckhvc3RBbmRQb3J0OwotCi0gICAgLy8gUmVxdWVzdAotICAgIGlmIChjb25uZWN0aW9uVHlwZS5lcXVhbHMoTWVzc2FnZUVudHJ5LlRZUEVfUkVRVUVTVCkpCi0gICAgewotICAgICAgc2VuZGVySG9zdEFuZFBvcnQgPQotICAgICAgICBpblNvY2tldC5nZXRJbmV0QWRkcmVzcygpLmdldEhvc3RBZGRyZXNzKCkgKyAiOiIgKyBpblNvY2tldC5nZXRQb3J0KCk7Ci0gICAgICByZWNlaXZlckhvc3RBbmRQb3J0ID0gdGFyZ2V0SG9zdCArICI6IiArIG91dFNvY2tldC5nZXRQb3J0KCk7Ci0gICAgfQotCi0gICAgLy8gUmVzcG9uc2UgICAgICAKLSAgICBlbHNlCi0gICAgewotICAgICAgc2VuZGVySG9zdEFuZFBvcnQgPSB0YXJnZXRIb3N0ICsgIjoiICsgaW5Tb2NrZXQuZ2V0UG9ydCgpOwotICAgICAgcmVjZWl2ZXJIb3N0QW5kUG9ydCA9Ci0gICAgICAgIG91dFNvY2tldC5nZXRJbmV0QWRkcmVzcygpLmdldEhvc3RBZGRyZXNzKCkgKyAiOiIgKyBvdXRTb2NrZXQuZ2V0UG9ydCgpOwotICAgIH0KLQotICAgIC8vIENyZWF0ZSBtZXNzYWdlIGVudHJ5Ci0gICAgdGhpcy5zb2NrZXRDb25uZWN0aW9uLmxvZ01lc3NhZ2UoCi0gICAgICBjb252ZXJzYXRpb25JRCwKLSAgICAgIHRoaXMuY29ubmVjdGlvblR5cGUsCi0gICAgICBtZXNzYWdlQ29udGV4dC50aW1lc3RhbXAsCi0gICAgICBzZW5kZXJIb3N0QW5kUG9ydCwKLSAgICAgIHJlY2VpdmVySG9zdEFuZFBvcnQsCi0gICAgICBtZXNzYWdlQ29udGV4dC5tZXNzYWdlQnVmZmVyLAotICAgICAgbWVzc2FnZUNvbnRleHQuYm9tLAotICAgICAgbWVzc2FnZUNvbnRleHQuZW5jb2RpbmcpOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrIGZvciBIVFRQIG1lc3NhZ2VzIHRoYXQgc2hvdWxkIG5vdCBiZSBsb2dnZWQuCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYnlwYXNzTWVzc2FnZShTdHJpbmcgbWVzc2FnZSkKLSAgewotICAgIGJvb2xlYW4gYnlwYXNzID0gZmFsc2U7Ci0gICAgaWYgKChtZXNzYWdlLnN0YXJ0c1dpdGgoIkNPTk5FQ1QiKSkKLSAgICAgIHx8IChtZXNzYWdlLnN0YXJ0c1dpdGgoIlRSQUNFIikpCi0gICAgICB8fCAobWVzc2FnZS5zdGFydHNXaXRoKCJERUxFVEUiKSkKLSAgICAgIHx8IChtZXNzYWdlLnN0YXJ0c1dpdGgoIk9QVElPTlMiKSkKLSAgICAgIHx8IChtZXNzYWdlLnN0YXJ0c1dpdGgoIkhFQUQiKSkpCi0gICAgewotICAgICAgYnlwYXNzID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYnlwYXNzOwotICB9Ci0KLSAgLy8gSTE4TjogMjAwMy4wMi4yNiBtb2RpZmllZCBieSBLLk5ha2Fnb21lQEJlYWNvbklUCi0gIC8qKgotICAgKiBTZXQgRW5jb2RpbmcgUGFyYW1ldGVycwotICAgKiBAcGFyYW0gbWVzc2FnZUZyYWdtZW50IFN0cmluZyBvZiBhIEhUVFAgbWVzc2FnZSBmcmFnbWVudC4KLSAgICogQGF1dGhvciBLLk5ha2Fnb21lQEJlYWNvbklUIEphcGFuIFNJRyAKLSAgICovCi0gIHByaXZhdGUgdm9pZCBzZXRFbmNvZGluZyhTdHJpbmcgbWVzc2FnZUZyYWdtZW50KQotICB7Ci0gICAgaWYgKG1pbWVDaGFyc2V0ID09IG51bGwgfHwgbWltZUNoYXJzZXQubGVuZ3RoKCkgPT0gMCkKLSAgICB7Ci0gICAgICBtaW1lQ2hhcnNldCA9IFV0aWxzLmdldEhUVFBDaGFyc2V0KG1lc3NhZ2VGcmFnbWVudCk7Ci0gICAgfQotICAgIGlmICh4bWxFbmNvZGluZyA9PSBudWxsIHx8IHhtbEVuY29kaW5nLmxlbmd0aCgpID09IDApCi0gICAgewotICAgICAgeG1sRW5jb2RpbmcgPSBVdGlscy5nZXRYTUxFbmNvZGluZyhtZXNzYWdlRnJhZ21lbnQpOwotICAgIH0KLSAgICByZXR1cm47Ci0gIH0KLQotICAvLyBJMThOOiAyMDAzLjAyLjI2IG1vZGlmaWVkIGJ5IEsuTmFrYWdvbWVAQmVhY29uSVQKLSAgLyoqCi0gICAqIEdldCBFbmNvZGluZyBQYXJhbWV0ZXIKLSAgICogQHJldHVybiBDaGFyYWN0ZXIgZW5jb2Rpbmcgb2YgSFRUUCBtZXNzYWdlLgotICAgKiBAYXV0aG9yIEsuTmFrYWdvbWVAQmVhY29uSVQgSmFwYW4gU0lHIAotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0RW5jb2RpbmcoKQotICB7Ci0gICAgU3RyaW5nIGVuY29kaW5nID0gV1NJQ29uc3RhbnRzLkRFRkFVTFRfWE1MX0VOQ09ESU5HOwotICAgIGlmIChtaW1lQ2hhcnNldCAhPSBudWxsICYmIG1pbWVDaGFyc2V0Lmxlbmd0aCgpID4gMCkKLSAgICB7Ci0gICAgICBlbmNvZGluZyA9IG1pbWVDaGFyc2V0OwotICAgIH0KLSAgICBpZiAoeG1sRW5jb2RpbmcgIT0gbnVsbCAmJiB4bWxFbmNvZGluZy5sZW5ndGgoKSA+IDApCi0gICAgewotICAgICAgZW5jb2RpbmcgPSB4bWxFbmNvZGluZzsKLSAgICB9Ci0gICAgcmV0dXJuIGVuY29kaW5nOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgQnl0ZSBPcmRlciBNYXJrIGZyb20gdGhlIG1lc3NhZ2UgKGlmIHRoZXJlIGlzIG9uZSkuCi0gICAqLwotICBwcml2YXRlIGludCBnZXRCT00oYnl0ZVtdIG1lc3NhZ2UpCi0gIHsKLSAgICBpbnQgYm9tID0gMDsKLQotICAgIGJ5dGUgRkYgPSAoYnl0ZSkgMHhGRjsKLSAgICBieXRlIEZFID0gKGJ5dGUpIDB4RkU7Ci0gICAgYnl0ZSBFRiA9IChieXRlKSAweEVGOwotICAgIGJ5dGUgQkIgPSAoYnl0ZSkgMHhCQjsKLSAgICBieXRlIEJGID0gKGJ5dGUpIDB4QkY7Ci0KLSAgICAvLyBTZWFyY2ggdGhyb3VnaCB0aGUgYnl0ZSBhcnJheSBmb3IgQ1JMRitDUkxGLiAgVGhpcyB3aWxsIG1hcmsgdGhlIGVuZCBvZiB0aGUgaGVhZGVyLgotICAgIGludCBpID0gVXRpbHMuZ2V0Rmlyc3RDUkxGQ1JMRihtZXNzYWdlLCAwKTsKLSAgICBpZiAoaSAhPSAtMSkKLSAgICB7Ci0gICAgICAvLyBERUJVRzoKLSAgICAgIGRlYnVnKAotICAgICAgICAiZ2V0Qk9NIiwKLSAgICAgICAgIm1lc3NhZ2VbaV06ICIKLSAgICAgICAgICArIG1lc3NhZ2VbaV0KLSAgICAgICAgICArICIsIG1lc3NhZ2VbaSsxXTogIgotICAgICAgICAgICsgbWVzc2FnZVtpKzFdKTsKLQotICAgICAgLy8gQ2hlY2sgZm9yIFVURi04IEJPTQotICAgICAgaWYgKCgoaSArIDIpIDwgbWVzc2FnZS5sZW5ndGgpCi0gICAgICAgICYmIG1lc3NhZ2VbaV0gPT0gRUYKLSAgICAgICAgJiYgbWVzc2FnZVtpKzFdID09IEJCCi0gICAgICAgICYmIG1lc3NhZ2VbaSsyXSA9PSBCRikKLSAgICAgIHsKLSAgICAgICAgYm9tID0gMHhFRkJCQkY7Ci0gICAgICB9Ci0gICAgICAvLyBDaGVjayBmb3IgVVRGLTE2IGJpZy1lbmRpYW4gQk9NCi0gICAgICBlbHNlIGlmICgKLSAgICAgICAgKChpKzEpIDwgbWVzc2FnZS5sZW5ndGgpCi0gICAgICAgICAgJiYgbWVzc2FnZVtpXSA9PSBGRQotICAgICAgICAgICYmIG1lc3NhZ2VbaSArIDFdID09IEZGKQotICAgICAgewotICAgICAgICBib20gPSAweEZFRkY7Ci0gICAgICB9Ci0gICAgICAvLyBDaGVjayBmb3IgVVRGLTE2IGxpdHRsZS1lbmRpYW4gQk9NCi0gICAgICBlbHNlIGlmICgKLSAgICAgICAgKChpKzEpIDwgbWVzc2FnZS5sZW5ndGgpCi0gICAgICAgICAgJiYgbWVzc2FnZVtpXSA9PSBGRgotICAgICAgICAgICYmIG1lc3NhZ2VbaSsxXSA9PSBGRSkKLSAgICAgIHsKLSAgICAgICAgYm9tID0gMHhGRkZFOwotICAgICAgfQotICAgICAgLy8gQUREOiBEbyB3ZSBuZWVkIHRvIGNoZWNrIGZvciBvdGhlciBCT01zCi0gICAgfQotICAgIHJldHVybiBib207Ci0gIH0KLQotICAvKioKLSAgICogRGV0ZXJtaW5lIGlmIHRoZSByZWFkIGlzIHN0aWxsIHdhaXRpbmcgZm9yIGRhdGEuCi0gICAqLwotICBib29sZWFuIGlzUmVhZFdhaXRpbmcoKQotICB7Ci0gICAgYm9vbGVhbiByZWFkV2FpdGluZyA9IGZhbHNlOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gREVCVUc6Ci0gICAgICBkZWJ1ZygKLSAgICAgICAgImlzUmVhZFdhaXRpbmciLAotICAgICAgICAiaW5Tb2NrZXQuZ2V0SW5wdXRTdHJlYW0oKS5hdmFpbGFibGUoKTogIgotICAgICAgICAgICsgaW5Tb2NrZXQuZ2V0SW5wdXRTdHJlYW0oKS5hdmFpbGFibGUoKSk7Ci0KLSAgICAgIGlmIChpblNvY2tldC5nZXRJbnB1dFN0cmVhbSgpLmF2YWlsYWJsZSgpID09IDApCi0gICAgICB7Ci0gICAgICAgIHJlYWRXYWl0aW5nID0gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKQotICAgIHsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVhZFdhaXRpbmc7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHJlYWQgdGltZWQgb3V0IGZsYWcuCi0gICAqLwotICBib29sZWFuIGlzUmVhZFRpbWVkT3V0KCkKLSAgewotICAgIHJldHVybiB0aGlzLnJlYWRUaW1lZE91dDsKLSAgfQotCi0gIC8qKgotICAgKiBNZXNzYWdlIGNvbnRleHQgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1lc3NhZ2UgdGhhdCBpcyBiZWluZyBwcm9jZXNzZWQuCi0gICAqLwotICBjbGFzcyBNZXNzYWdlQ29udGV4dAotICB7Ci0gICAgU3RyaW5nQnVmZmVyIG1lc3NhZ2VCdWZmZXI7Ci0gICAgQ2h1bmtlZERhdGEgY2h1bmtlZERhdGE7Ci0gICAgU3RyaW5nIHRpbWVzdGFtcDsKLSAgICBpbnQgYm9tOwotICAgIFN0cmluZyBlbmNvZGluZzsKLQotICAgIC8qKgotICAgICAqIENyZWF0ZSBuZXcgbWVzc2FnZSBjb250ZXh0LgotICAgICAqLwotICAgIE1lc3NhZ2VDb250ZXh0KCkKLSAgICB7Ci0gICAgICBtZXNzYWdlQnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgY2h1bmtlZERhdGEgPSBuZXcgQ2h1bmtlZERhdGEoKTsKLSAgICAgIHRpbWVzdGFtcCA9IG51bGw7Ci0gICAgICBib20gPSAwOwotICAgICAgZW5jb2RpbmcgPSBXU0lDb25zdGFudHMuREVGQVVMVF9YTUxfRU5DT0RJTkc7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL2NvbmZpZy9Db21tZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL2NvbmZpZy9Db21tZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkZTRhZDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9jb25maWcvQ29tbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3IuY29uZmlnOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50RWxlbWVudDsKLQotLyoqCi0gKiBUaGUgaW50ZXJmYWNlIGZvciBtb25pdG9yIGNvbmZpZyBDb21tZW50IGVsZW1lbnQuICAKLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBDb21tZW50IGV4dGVuZHMgRG9jdW1lbnRFbGVtZW50Ci17Ci0gIC8qKgotICAgKiBFbGVtZW50IG5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX05BTUUgPSBXU0lDb25zdGFudHMuRUxFTV9DT01NRU5UOwotCi0gIC8qKgotICAgKiBRTmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgUU5BTUUgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9NT05JVE9SX0NPTkZJRywgRUxFTV9OQU1FKTsKLQotICAvKioKLSAgICogR2V0IGNvbW1lbnQgdGV4dC4KLSAgICogQHJldHVybiBjb21tZW50IHRleHQuCi0gICAqIEBzZWUgI3NldFRleHQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpOwotCi0gIC8qKgotICAgKiBTZXQgY29tbWVudCB0ZXh0LgotICAgKiBAcGFyYW0gdGV4dCB0aGUgY29tbWVudCB0ZXh0LgotICAgKiBAc2VlICNnZXRUZXh0Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUZXh0KFN0cmluZyB0ZXh0KTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvY29uZmlnL01hbkluVGhlTWlkZGxlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL2NvbmZpZy9NYW5JblRoZU1pZGRsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NWMwYWEyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvY29uZmlnL01hbkluVGhlTWlkZGxlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWc7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50RWxlbWVudDsKLQotLyoqCi0gKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgbW9uaXRvciBjb25maWcgTWFuSW5UaGVNaWRkbGUgZWxlbWVudC4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIE1hbkluVGhlTWlkZGxlIGV4dGVuZHMgRG9jdW1lbnRFbGVtZW50Ci17Ci0gIC8qKgotICAgKiBFbGVtZW50IG5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX05BTUUgPSBXU0lDb25zdGFudHMuRUxFTV9NQU5fSU5fVEhFX01JRERMRTsKLQotICAvKioKLSAgICogUU5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIFFOQU1FID0KLSAgICBuZXcgUU5hbWUoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0lfTU9OSVRPUl9DT05GSUcsIEVMRU1fTkFNRSk7Ci0KLSAgLyoqCi0gICAqIEdldCBjb21tZW50LgotICAgKiBAcmV0dXJuIGNvbW1lbnQuCi0gICAqIEBzZWUgI3NldENvbW1lbnQKLSAgICovCi0gIHB1YmxpYyBDb21tZW50IGdldENvbW1lbnQoKTsKLQotICAvKioKLSAgICogU2V0IGNvbW1lbnQuCi0gICAqIEBwYXJhbSBjb21tZW50IHRoZSBDb21tZW50IG9iamVjdC4KLSAgICogQHNlZSAjZ2V0Q29tbWVudAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q29tbWVudChDb21tZW50IGNvbW1lbnQpOwotCi0gIC8qKgotICAgKiBHZXQgcmVkaXJlY3RzLgotICAgKiBAcmV0dXJuIHRoZSByZWRpcmlyZWN0cy4KLSAgICogQHNlZSAjc2V0UmVkaXJlY3RMaXN0Ci0gICAqLwotICBwdWJsaWMgVmVjdG9yIGdldFJlZGlyZWN0TGlzdCgpOwotCi0gIC8qKgotICAgKiBBZGQgcmVkaXJlY3QuCi0gICAqIEBwYXJhbSByZWRpcmVjdCB0aGUgUmVkaXJlY3Qgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkUmVkaXJlY3QoUmVkaXJlY3QgcmVkaXJlY3QpOwotCi0gIC8qKgotICAgKiBTZXQgcmVkaXJlY3RzLgotICAgKiBAcGFyYW0gcmVkaXJlY3RMaXN0IGEgbGlzdCBvZiB0aGUgcmVkaXJlY3RzLgotICAgKiBAc2VlICNnZXRSZWRpcmVjdExpc3QgCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZWRpcmVjdExpc3QoVmVjdG9yIHJlZGlyZWN0TGlzdCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL2NvbmZpZy9Nb25pdG9yQ29uZmlnLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL2NvbmZpZy9Nb25pdG9yQ29uZmlnLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExZGYxZWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9jb25maWcvTW9uaXRvckNvbmZpZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yLmNvbmZpZzsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmNvbW1vbi5BZGRTdHlsZVNoZWV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5XU0lEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5NZXNzYWdlTGlzdDsKLQotLyoqCi0gKiBUaGlzIGlzIHRoZSBpbnRlcmZhY2UgZm9yIHRoZSBtb25pdG9yIGNvbmZpZ3VyYXRpb24gZmlsZS4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIE1vbml0b3JDb25maWcgZXh0ZW5kcyBXU0lEb2N1bWVudAotewotICAvKioKLSAgICogRWxlbWVudCBuYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9OQU1FID0gV1NJQ29uc3RhbnRzLkVMRU1fQ09ORklHOwotCi0gIC8qKgotICAgKiBRTmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgUU5BTUUgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9NT05JVE9SX0NPTkZJRywgRUxFTV9OQU1FKTsKLQotICAvKioKLSAgICogSW5pdGlhbGl6ZSBtb25pdG9yIGNvbmZpZy4KLSAgICogQHBhcmFtIG1lc3NhZ2VMaXN0IGEgbE1lc3NhZ2VMaXN0IG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXQoTWVzc2FnZUxpc3QgbWVzc2FnZUxpc3QpOwotCi0gIC8qKgotICAgKiBHZXQgY29tbWVudC4KLSAgICogQHJldHVybiBjb21tZW50LgotICAgKiBAc2VlICNzZXRDb21tZW50Ci0gICAqLwotICBwdWJsaWMgQ29tbWVudCBnZXRDb21tZW50KCk7Ci0KLSAgLyoqCi0gICAqIFNldCBjb21tZW50LgotICAgKiBAcGFyYW0gY29tbWVudCBhIENvbW1lbnQgb2JqZWN0LgotICAgKiBAc2VlICNnZXRDb21tZW50Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDb21tZW50KENvbW1lbnQgY29tbWVudCk7Ci0KLSAgLyoqCi0gICAqIEdldCBsb2cgZmlsZSBsb2NhdGlvbi4KLSAgICogQHJldHVybiBsb2cgZmlsZSBsb2NhdGlvbi4KLSAgICogQHNlZSAjc2V0TG9nTG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9nTG9jYXRpb24oKTsKLQotICAvKioKLSAgICogU2V0IGxvZyBmaWxlIGxvY2F0aW9uLgotICAgKiBAcGFyYW0gbG9nVVJJIGxvZyBmaWxlIGxvY2F0aW9uLgotICAgKiBAc2VlICNnZXRMb2dMb2NhdGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TG9nTG9jYXRpb24oU3RyaW5nIGxvZ1VSSSk7Ci0KLSAgLyoqCi0gICAqIEdldCByZXBsYWNlIGxvZy4KLSAgICogQHJldHVybiByZXBsYWNlIGxvZy4KLSAgICogQHNlZSAjc2V0UmVwbGFjZUxvZwotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0UmVwbGFjZUxvZygpOwotCi0gIC8qKgotICAgKiBTZXQgcmVwbGFjZSBsb2cuCi0gICAqIEBwYXJhbSByZXBsYWNlTG9nIGEgcmVwbGFjZSBsb2cuCi0gICAqIEBzZWUgI2dldFJlcGxhY2VMb2cKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFJlcGxhY2VMb2coYm9vbGVhbiByZXBsYWNlTG9nKTsKLQotICAvKioKLSAgICogR2V0IGFkZCBzdHlsZSBzaGVldC4KLSAgICogQHJldHVybiBhZGQgc3R5bGUgc2hlZXQuCi0gICAqIEBzZWUgI3NldEFkZFN0eWxlU2hlZXQKLSAgICovCi0gIHB1YmxpYyBBZGRTdHlsZVNoZWV0IGdldEFkZFN0eWxlU2hlZXQoKTsKLQotICAvKioKLSAgICogU2V0IGFkZCBzdHlsZSBzaGVldC4KLSAgICogQHBhcmFtIGFkZFN0eWxlU2hlZXQgYWRkIHN0eWxlIHNoZWV0LgotICAgKiBAc2VlICNnZXRBZGRTdHlsZVNoZWV0Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRBZGRTdHlsZVNoZWV0KEFkZFN0eWxlU2hlZXQgYWRkU3R5bGVTaGVldCk7Ci0KLSAgLyoqCi0gICAqIEdldCBsb2cgZHVyYXRpb24uCi0gICAqIEByZXR1cm4gbG9nIGR1cmF0aW9uLgotICAgKiBAc2VlICNzZXRMb2dEdXJhdGlvbgotICAgKi8KLSAgcHVibGljIGludCBnZXRMb2dEdXJhdGlvbigpOwotCi0gIC8qKgotICAgKiBTZXQgbG9nIGR1cmF0aW9uLgotICAgKiBAcGFyYW0gbG9nRHVyYXRpb24gbG9nIGR1cmF0aW9uLgotICAgKiBAc2VlICNnZXRMb2dEdXJhdGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TG9nRHVyYXRpb24oaW50IGxvZ0R1cmF0aW9uKTsKLQotICAvKioKLSAgICogR2V0IHRpbWVvdXQuCi0gICAqIEByZXR1cm4gdGltZW91dC4KLSAgICogQHNlZSAjc2V0VGltZW91dAotICAgKi8KLSAgcHVibGljIGludCBnZXRUaW1lb3V0KCk7Ci0KLSAgLyoqCi0gICAqIFNldCB0aW1lb3V0LgotICAgKiBAcGFyYW0gdGltZW91dCB0aW1lb3V0LgotICAgKiBAc2VlICNnZXRUaW1lb3V0Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUaW1lb3V0KGludCB0aW1lb3V0KTsKLQotICAvKioKLSAgICogR2V0IG1hbi1pbi10aGUtbWlkZGxlIGluZm9ybWF0aW9uLgotICAgKiBAcmV0dXJuIG1hbi1pbi10aGUtbWlkZGxlIGluZm9ybWF0aW9uLgotICAgKiBAc2VlICNzZXRNYW5JblRoZU1pZGRsZQotICAgKi8KLSAgcHVibGljIE1hbkluVGhlTWlkZGxlIGdldE1hbkluVGhlTWlkZGxlKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBtYW4taW4tdGhlLW1pZGRsZSBpbmZvcm1hdGlvbi4KLSAgICogQHBhcmFtIG1hbkluVGhlTWlkZGxlIG1hbi1pbi10aGUtbWlkZGxlIGluZm9ybWF0aW9uLgotICAgKiBAc2VlICNnZXRNYW5JblRoZU1pZGRsZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TWFuSW5UaGVNaWRkbGUoTWFuSW5UaGVNaWRkbGUgbWFuSW5UaGVNaWRkbGUpOwotCi0gIC8qKgotICAgKiBHZXQgdmVyYm9zZSBvcHRpb24uCi0gICAqIEByZXR1cm4gdmVyYm9zZSBvcHRpb24uCi0gICAqIEBzZWUgI3NldFZlcmJvc2VPcHRpb24KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldFZlcmJvc2VPcHRpb24oKTsKLQotICAvKioKLSAgICogU2V0IHZlcmJvc2Ugb3B0aW9uLgotICAgKiBAcGFyYW0gdmVyYm9zZSB2ZXJib3NlIG9wdGlvbi4KLSAgICogQHNlZSAjZ2V0VmVyYm9zZU9wdGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VmVyYm9zZU9wdGlvbihib29sZWFuIHZlcmJvc2UpOwotCi0gIC8qKgotICAgKiBQYXJzZSB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KLSAgICogQHBhcmFtIGFyZ3MgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW1zIG9jY3VyIHdoaWxlIHBhcnNpbmcgdGhlIAotICAgKiAgICAgICAgIGNvbW1hbmQgbGluZSBhcmd1bWVudHMsCi0gICAqLwotICBwdWJsaWMgdm9pZCBwYXJzZUFyZ3MoU3RyaW5nW10gYXJncykgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvY29uZmlnL01vbml0b3JDb25maWdSZWFkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvY29uZmlnL01vbml0b3JDb25maWdSZWFkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzhmYmQwNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL2NvbmZpZy9Nb25pdG9yQ29uZmlnUmVhZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWc7Ci0KLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50UmVhZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLk1lc3NhZ2VMaXN0OwotCi0vKioKLSAqIERlZmluZXMgdGhlIGludGVyZmFjZSB1c2VkIHRvIHJlYWQgdGhlIG1vbml0b3IgY29uZmlnIGRvY3VtZW50cy4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIE1vbml0b3JDb25maWdSZWFkZXIgZXh0ZW5kcyBEb2N1bWVudFJlYWRlcgotewotICAvKioKLSAgICogSW5pdGlhbGl6ZSBtb25pdG9yIGNvbmZpZy4KLSAgICogQHBhcmFtIG1lc3NhZ2VMaXN0IGEgTWVzc2FnZUxpc3Qgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgaW5pdChNZXNzYWdlTGlzdCBtZXNzYWdlTGlzdCk7Ci0KLSAgLyoqCi0gICAqIFJlYWQgdGhlIG1vbml0b3IgY29uZmlnIGZpbGUuCi0gICAqIEBwYXJhbSBtb25pdG9yQ29uZmlnVVJJIHRoZSBtb25pdG9yIGNvbmZpZyBmaWxlIGxvY2F0aW9uLgotICAgKiBAcmV0dXJuIGEgTW9uaXRvckNvbmZpZyBvYmplY3QKLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbXMgb2NjdXIgd2hpbGUgcmVhZGluZyBtb25pdG9yIGNvbmZpZyBmaWxlLgotICAgKi8KLSAgcHVibGljIE1vbml0b3JDb25maWcgcmVhZE1vbml0b3JDb25maWcoU3RyaW5nIG1vbml0b3JDb25maWdVUkkpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLQotICAvKioKLSAgICogUmVhZCB0aGUgbW9uaXRvciBjb25maWcgZmlsZS4KLSAgICogQHBhcmFtIHJlYWRlciBhIFJlYWRlciBvYmplY3QuCi0gICAqIEByZXR1cm4gYSBNb25pdG9yQ29uZmlnIG9iamVjdAotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtcyBvY2N1ciB3aGlsZSByZWFkaW5nIG1vbml0b3IgY29uZmlnIGZpbGUuCi0gICAqLwotICBwdWJsaWMgTW9uaXRvckNvbmZpZyByZWFkTW9uaXRvckNvbmZpZyhSZWFkZXIgcmVhZGVyKSB0aHJvd3MgV1NJRXhjZXB0aW9uOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9jb25maWcvUmVkaXJlY3QuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvY29uZmlnL1JlZGlyZWN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlMzA4MmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9jb25maWcvUmVkaXJlY3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWc7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50OwotCi0vKioKLSAqIFRoZSBpbnRlcmZhY2UgZm9yIG1vbml0b3IgY29uZmlnIFJlZGlyZWN0IGVsZW1lbnQuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBSZWRpcmVjdCBleHRlbmRzIERvY3VtZW50RWxlbWVudAotewotICAvKioKLSAgICogRWxlbWVudCBuYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9OQU1FID0gV1NJQ29uc3RhbnRzLkVMRU1fUkVESVJFQ1Q7Ci0KLSAgLyoqCi0gICAqIFFOYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBRTkFNRSA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NJX01PTklUT1JfQ09ORklHLCBFTEVNX05BTUUpOwotCi0gIC8qKgotICAgKiBHZXQgY29tbWVudC4KLSAgICogQHJldHVybiBjb21tZW50LgotICAgKiBAc2VlICNzZXRDb21tZW50Ci0gICAqLwotICBwdWJsaWMgQ29tbWVudCBnZXRDb21tZW50KCk7Ci0KLSAgLyoqCi0gICAqIFNldCBjb21tZW50LgotICAgKiBAcGFyYW0gY29tbWVudCBhIENvbW1lbnRvYmplY3QuCi0gICAqIEBzZWUgI2dldENvbW1lbnQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldENvbW1lbnQoQ29tbWVudCBjb21tZW50KTsKLQotICAvKioKLSAgICogR2V0IGxpc3RlbiBwb3J0LgotICAgKiBAcmV0dXJuIGxpc3RlbiBwb3J0LgotICAgKiBAc2VlICNzZXRMaXN0ZW5Qb3J0Ci0gICAqLwotICBwdWJsaWMgaW50IGdldExpc3RlblBvcnQoKTsKLQotICAvKioKLSAgICogU2V0IGxpc3RlbiBwb3J0LgotICAgKiBAcGFyYW0gbGlzdGVuUG9ydCBsaXN0ZW4gcG9ydC4KLSAgICogQHNlZSAjZ2V0TGlzdGVuUG9ydAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TGlzdGVuUG9ydChpbnQgbGlzdGVuUG9ydCk7Ci0KLSAgLyoqCi0gICAqIEdldCBob3N0LgotICAgKiBAcmV0dXJuIGhvc3QuCi0gICAqIEBzZWUgI3NldEhvc3QKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SG9zdCgpOwotCi0gIC8qKgotICAgKiBTZXQgaG9zdC4KLSAgICogQHBhcmFtIGhvc3QgIGhvc3QuCi0gICAqIEBzZWUgI2dldEhvc3QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEhvc3QoU3RyaW5nIGhvc3QpOwotCi0gIC8qKgotICAgKiBHZXQgc2VuZCB0byBwb3J0LgotICAgKiBAcmV0dXJuIHNlbmQgdG8gcG9ydC4KLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0VG9Qb3J0KCk7Ci0KLSAgLyoqCi0gICAqIEdldCBzZW5kIHRvIGhvc3QuCi0gICAqIEByZXR1cm4gc2VuZCB0byBob3N0LgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRUb0hvc3QoKTsKLQotICAvKioKLSAgICogR2V0IHNlbmQgdG8gcHJvdG9jb2wuCi0gICAqIEByZXR1cm4gc2VuZCB0byBwcm90b2NvbC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VG9Qcm90b2NvbCgpOwotCi0gIC8qKgotICAgKiBHZXQgbWF4aW11bSBjb25uZWN0aW9ucy4KLSAgICogQHJldHVybiBtYXhpbXVtIGNvbm5lY3Rpb25zLgotICAgKiBAc2VlICNzZXRNYXhDb25uZWN0aW9ucwotICAgKi8KLSAgcHVibGljIGludCBnZXRNYXhDb25uZWN0aW9ucygpOwotCi0gIC8qKgotICAgKiBTZXQgbWF4aW11bSBjb25uZWN0aW9ucy4KLSAgICogQHBhcmFtIG1heENvbm5lY3Rpb25zIG1heGltdW0gY29ubmVjdGlvbnMuCi0gICAqIEBzZWUgI2dldE1heENvbm5lY3Rpb25zCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRNYXhDb25uZWN0aW9ucyhpbnQgbWF4Q29ubmVjdGlvbnMpOwotCi0gIC8qKgotICAgKiBHZXQgcmVhZCB0aW1lb3V0IHNlY29uZHMuCi0gICAqIEByZXR1cm4gcmVhZCB0aW1lb3V0IHNlY29uZHMuCi0gICAqIEBzZWUgI3NldFJlYWRUaW1lb3V0U2Vjb25kcwotICAgKi8KLSAgcHVibGljIGludCBnZXRSZWFkVGltZW91dFNlY29uZHMoKTsKLQotICAvKioKLSAgICogU2V0IHJlYWQgdGltZW91dCBzZWNvbmRzLgotICAgKiBAcGFyYW0gcmVhZFRpbWVvdXRTZWNvbmRzIHJlYWQgdGltZW91dCBzZWNvbmRzLgotICAgKiBAc2VlICNnZXRSZWFkVGltZW91dFNlY29uZHMKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFJlYWRUaW1lb3V0U2Vjb25kcyhpbnQgcmVhZFRpbWVvdXRTZWNvbmRzKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvY29uZmlnL2ltcGwvQ29tbWVudEltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvY29uZmlnL2ltcGwvQ29tbWVudEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFjMDliNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL2NvbmZpZy9pbXBsL0NvbW1lbnRJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuaW1wbDsKLQotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuQ29tbWVudDsKLQotLyoqCi0gKiBUaGUgaW1wbGVtZW50YXRpb24gZm9yIG1vbml0b3IgY29uZmlnIENvbW1lbnQgZWxlbWVudC4gCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBDb21tZW50SW1wbCBpbXBsZW1lbnRzIENvbW1lbnQKLXsKLSAgLyoqCi0gICAqIENvbW1lbnQgdGV4dC4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgdGV4dCA9IG51bGw7Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5tb25pdG9yLmNvbmZpZy5Db21tZW50I2dldFRleHQoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRUZXh0KCkKLSAgewotICAgIHJldHVybiB0aGlzLnRleHQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLkNvbW1lbnQjc2V0VGV4dChTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUZXh0KFN0cmluZyB0ZXh0KQotICB7Ci0gICAgdGhpcy50ZXh0ID0gdGV4dDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50I3RvWE1MU3RyaW5nKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9YTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgU3RyaW5nIG5zTmFtZSA9IG5hbWVzcGFjZU5hbWU7Ci0gICAgaWYgKCghbnNOYW1lLmVxdWFscygiIikgJiYgKCFuc05hbWUuZW5kc1dpdGgoIjoiKSkpKQotICAgICAgbnNOYW1lICs9ICI6IjsKLQotICAgIC8vIENvbmZpZyBvcHRpb25zCi0gICAgLy9wdy5wcmludCgiICAgIDwiICsgbnNOYW1lICsgRUxFTV9OQU1FICsgIiB4bWxucz1cIiIgKyBXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9NT05JVE9SX0NPTkZJRyArICJcIj4iKTsgICAgCi0gICAgcHcucHJpbnQoIiAgICA8IiArIG5zTmFtZSArIEVMRU1fTkFNRSArICI+Iik7Ci0gICAgcHcucHJpbnQodGhpcy50ZXh0KTsKLQotICAgIC8vIEVuZCBlbGVtZW50Ci0gICAgcHcucHJpbnRsbigiPC8iICsgbnNOYW1lICsgRUxFTV9OQU1FICsgIj4iKTsKLQotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICByZXR1cm4gdGV4dDsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL2NvbmZpZy9pbXBsL01hbkluVGhlTWlkZGxlSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9jb25maWcvaW1wbC9NYW5JblRoZU1pZGRsZUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODU4ZmE2My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL2NvbmZpZy9pbXBsL01hbkluVGhlTWlkZGxlSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yLmNvbmZpZy5pbXBsOwotCi1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yLmNvbmZpZy5Db21tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yLmNvbmZpZy5NYW5JblRoZU1pZGRsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuUmVkaXJlY3Q7Ci0KLS8qKgotICogVGhlIGltcGxlbWVudGF0aW9uIGZvciB0aGUgbW9uaXRvciBjb25maWcgTWFuSW5UaGVNaWRkbGUgZWxlbWVudC4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgTWFuSW5UaGVNaWRkbGVJbXBsIGltcGxlbWVudHMgTWFuSW5UaGVNaWRkbGUKLXsKLSAgLyoqCi0gICAqIENvbW1lbnQuCi0gICAqLwotICBwcm90ZWN0ZWQgQ29tbWVudCBjb21tZW50OwotCi0gIC8qKgotICAgKiBSZWRpcmVjdCBsaXN0LgotICAgKi8KLSAgcHJvdGVjdGVkIFZlY3RvciByZWRpcmVjdExpc3QgPSBuZXcgVmVjdG9yKCk7Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5tb25pdG9yLmNvbmZpZy5NYW5JblRoZU1pZGRsZSNnZXRDb21tZW50KCkKLSAgICovCi0gIHB1YmxpYyBDb21tZW50IGdldENvbW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuY29tbWVudDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubW9uaXRvci5jb25maWcuTWFuSW5UaGVNaWRkbGUjc2V0Q29tbWVudChDb21tZW50KQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q29tbWVudChDb21tZW50IGNvbW1lbnQpCi0gIHsKLSAgICB0aGlzLmNvbW1lbnQgPSBjb21tZW50OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5tb25pdG9yLmNvbmZpZy5NYW5JblRoZU1pZGRsZSNnZXRSZWRpcmVjdExpc3QoKQotICAgKi8KLSAgcHVibGljIFZlY3RvciBnZXRSZWRpcmVjdExpc3QoKQotICB7Ci0gICAgcmV0dXJuIHJlZGlyZWN0TGlzdDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubW9uaXRvci5jb25maWcuTWFuSW5UaGVNaWRkbGUjYWRkUmVkaXJlY3QoUmVkaXJlY3QpCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRSZWRpcmVjdChSZWRpcmVjdCByZWRpcmVjdCkKLSAgewotICAgIHJlZGlyZWN0TGlzdC5hZGQocmVkaXJlY3QpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5tb25pdG9yLmNvbmZpZy5NYW5JblRoZU1pZGRsZSNzZXRSZWRpcmVjdExpc3QoVmVjdG9yKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UmVkaXJlY3RMaXN0KFZlY3RvciByZWRpcmVjdExpc3QpCi0gIHsKLSAgICB0aGlzLnJlZGlyZWN0TGlzdCA9IHJlZGlyZWN0TGlzdDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIHB3LnByaW50bG4oIiAgbWFuLWluLXRoZS1taWRkbGUgY29tbWVudCAuLi4gIiArIHRoaXMuY29tbWVudCk7Ci0KLSAgICAvLyBSZWRpcmVjdCBsaXN0Ci0gICAgaW50IGNvdW50ID0gMTsKLSAgICBSZWRpcmVjdCByZWRpcmVjdDsKLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IHJlZGlyZWN0TGlzdC5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgLy8gR2V0IG5leHQgcmVkaXJlY3QgZWxlbWVudAotICAgICAgcmVkaXJlY3QgPSAoUmVkaXJlY3QpIGl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIHB3LnByaW50bG4oIiAgcmVkaXJlY3QgWyIgKyBjb3VudCsrICsiXSIpOwotICAgICAgcHcucHJpbnQocmVkaXJlY3QudG9TdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LkRvY3VtZW50RWxlbWVudCN0b1hNTFN0cmluZyhTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvWE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIFN0cmluZyBuc05hbWUgPSBuYW1lc3BhY2VOYW1lOwotICAgIGlmICgoIW5zTmFtZS5lcXVhbHMoIiIpICYmICghbnNOYW1lLmVuZHNXaXRoKCI6IikpKSkKLSAgICAgIG5zTmFtZSArPSAiOiI7Ci0KLSAgICAvLyBTdGFydCBlbGVtZW50Ci0gICAgcHcucHJpbnRsbigiICAgICAgPCIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiPiIpOwotCi0gICAgLy8gQ29tbWVudAotICAgIGlmICh0aGlzLmNvbW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwdy5wcmludGxuKHRoaXMuY29tbWVudC50b1hNTFN0cmluZyhuc05hbWUpKTsKLSAgICB9Ci0KLSAgICAvLyBSZWRpcmVjdAotICAgIFJlZGlyZWN0IHJlZGlyZWN0OwotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gcmVkaXJlY3RMaXN0Lml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICAvLyBHZXQgbmV4dCByZWRpcmVjdCBlbGVtZW50Ci0gICAgICByZWRpcmVjdCA9IChSZWRpcmVjdCkgaXRlcmF0b3IubmV4dCgpOwotICAgICAgcHcucHJpbnQocmVkaXJlY3QudG9YTUxTdHJpbmcobnNOYW1lKSk7Ci0gICAgfQotCi0gICAgLy8gRW5kIGVsZW1lbnQKLSAgICBwdy5wcmludGxuKCIgICAgICA8LyIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiPiIpOwotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9jb25maWcvaW1wbC9Nb25pdG9yQ29uZmlnSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9jb25maWcvaW1wbC9Nb25pdG9yQ29uZmlnSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODY5NjZkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvY29uZmlnL2ltcGwvTW9uaXRvckNvbmZpZ0ltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuaW1wbDsKLQotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmNvbW1vbi5BZGRTdHlsZVNoZWV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5jb21tb24uaW1wbC5BZGRTdHlsZVNoZWV0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5Nb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yLmNvbmZpZy5Db21tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yLmNvbmZpZy5NYW5JblRoZU1pZGRsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuTW9uaXRvckNvbmZpZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuTW9uaXRvckNvbmZpZ1JlYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuUmVkaXJlY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuTWVzc2FnZUxpc3Q7Ci0KLS8qKgotICogVGhpcyBpcyB0aGUgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBtb25pdG9yIGNvbmZpZ3VyYXRpb24gZmlsZS4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgTW9uaXRvckNvbmZpZ0ltcGwgaW1wbGVtZW50cyBNb25pdG9yQ29uZmlnCi17Ci0gIC8qKgotICAgKiBNZXNzYWdlIGxpc3QgcmVmZXJlbmNlLgotICAgKi8KLSAgcHJvdGVjdGVkIE1lc3NhZ2VMaXN0IG1lc3NhZ2VMaXN0ID0gbnVsbDsKLQotICAvKioKLSAgICogTW9uaXRvciBjb25maWd1cmF0aW9uIGZpbGUgVVJJLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBkb2N1bWVudFVSSSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIENvbW1lbnQuCi0gICAqLwotICBwcm90ZWN0ZWQgQ29tbWVudCBjb21tZW50ID0gbnVsbDsKLQotICAvKioKLSAgICogTG9nIGxvY2F0aW9uLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBsb2dVUkk7Ci0KLSAgLyoqCi0gICAqIFJlcGxhY2UgbG9nIGluZGljYXRvci4KLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIHJlcGxhY2VMb2cgPSBmYWxzZTsKLQotICAvKioKLSAgICogU3R5bGUgc2hlZXQgZGVjbGFyYXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgQWRkU3R5bGVTaGVldCBhZGRTdHlsZVNoZWV0OwotCi0gIC8qKgotICAgKiBMb2cgZHVyYXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgaW50IGxvZ0R1cmF0aW9uID0gNjAwOwotCi0gIC8qKgotICAgKiBUaW1lb3V0LgotICAgKi8KLSAgcHJvdGVjdGVkIGludCB0aW1lb3V0ID0gMzsKLQotICAvKioKLSAgICogTWFuLWluLXRoZS1taWRkbGUgc2V0dGluZ3MuCi0gICAqLwotICBwcm90ZWN0ZWQgTWFuSW5UaGVNaWRkbGUgbWFuSW5UaGVNaWRkbGUgPSBudWxsOwotCi0gIC8qKgotICAgKiBWZXJib3NlIG9wdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIHZlcmJvc2UgPSBmYWxzZTsKLQotICAvKioKLSAgICogSW5pdGlhbGl6ZSBtb25pdG9yIGNvbmZpZy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXQoTWVzc2FnZUxpc3QgbWVzc2FnZUxpc3QpCi0gIHsKLSAgICB0aGlzLm1lc3NhZ2VMaXN0ID0gbWVzc2FnZUxpc3Q7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLk1vbml0b3JDb25maWcjZ2V0Q29tbWVudCgpCi0gICAqLwotICBwdWJsaWMgQ29tbWVudCBnZXRDb21tZW50KCkKLSAgewotICAgIHJldHVybiB0aGlzLmNvbW1lbnQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLk1vbml0b3JDb25maWcjc2V0Q29tbWVudChDb21tZW50KQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q29tbWVudChDb21tZW50IGNvbW1lbnQpCi0gIHsKLSAgICB0aGlzLmNvbW1lbnQgPSBjb21tZW50OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5tb25pdG9yLmNvbmZpZy5Nb25pdG9yQ29uZmlnI2dldExvZ0xvY2F0aW9uKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9nTG9jYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIHRoaXMubG9nVVJJOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5tb25pdG9yLmNvbmZpZy5Nb25pdG9yQ29uZmlnI3NldExvZ0xvY2F0aW9uKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExvZ0xvY2F0aW9uKFN0cmluZyBsb2dVUkkpCi0gIHsKLSAgICB0aGlzLmxvZ1VSSSA9IGxvZ1VSSTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubW9uaXRvci5jb25maWcuTW9uaXRvckNvbmZpZyNnZXRSZXBsYWNlTG9nKCkKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldFJlcGxhY2VMb2coKQotICB7Ci0gICAgcmV0dXJuIHRoaXMucmVwbGFjZUxvZzsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubW9uaXRvci5jb25maWcuTW9uaXRvckNvbmZpZyNzZXRSZXBsYWNlTG9nKGJvb2xlYW4pCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZXBsYWNlTG9nKGJvb2xlYW4gcmVwbGFjZUxvZykKLSAgewotICAgIHRoaXMucmVwbGFjZUxvZyA9IHJlcGxhY2VMb2c7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLk1vbml0b3JDb25maWcjZ2V0QWRkU3R5bGVTaGVldCgpCi0gICAqLwotICBwdWJsaWMgQWRkU3R5bGVTaGVldCBnZXRBZGRTdHlsZVNoZWV0KCkKLSAgewotICAgIHJldHVybiB0aGlzLmFkZFN0eWxlU2hlZXQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLk1vbml0b3JDb25maWcjc2V0QWRkU3R5bGVTaGVldChvcmcud3NpLnRlc3QuY29tbW9uLkFkZFN0eWxlU2hlZXQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRBZGRTdHlsZVNoZWV0KEFkZFN0eWxlU2hlZXQgYWRkU3R5bGVTaGVldCkKLSAgewotICAgIHRoaXMuYWRkU3R5bGVTaGVldCA9IGFkZFN0eWxlU2hlZXQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLk1vbml0b3JDb25maWcjZ2V0TG9nRHVyYXRpb24oKQotICAgKi8KLSAgcHVibGljIGludCBnZXRMb2dEdXJhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gbG9nRHVyYXRpb247Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLk1vbml0b3JDb25maWcjc2V0TG9nRHVyYXRpb24oaW50KQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TG9nRHVyYXRpb24oaW50IGxvZ0R1cmF0aW9uKQotICB7Ci0gICAgdGhpcy5sb2dEdXJhdGlvbiA9IGxvZ0R1cmF0aW9uOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5tb25pdG9yLmNvbmZpZy5Nb25pdG9yQ29uZmlnI2dldFRpbWVvdXQoKQotICAgKi8KLSAgcHVibGljIGludCBnZXRUaW1lb3V0KCkKLSAgewotICAgIHJldHVybiB0aGlzLnRpbWVvdXQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLk1vbml0b3JDb25maWcjc2V0VGltZW91dChpbnQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUaW1lb3V0KGludCB0aW1lb3V0KQotICB7Ci0gICAgdGhpcy50aW1lb3V0ID0gdGltZW91dDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubW9uaXRvci5jb25maWcuTW9uaXRvckNvbmZpZyNnZXRNYW5JblRoZU1pZGRsZSgpCi0gICAqLwotICBwdWJsaWMgTWFuSW5UaGVNaWRkbGUgZ2V0TWFuSW5UaGVNaWRkbGUoKQotICB7Ci0gICAgcmV0dXJuIG1hbkluVGhlTWlkZGxlOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5tb25pdG9yLmNvbmZpZy5Nb25pdG9yQ29uZmlnI3NldE1hbkluVGhlTWlkZGxlKE1hbkluVGhlTWlkZGxlKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TWFuSW5UaGVNaWRkbGUoTWFuSW5UaGVNaWRkbGUgbWFuSW5UaGVNaWRkbGUpCi0gIHsKLSAgICB0aGlzLm1hbkluVGhlTWlkZGxlID0gbWFuSW5UaGVNaWRkbGU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LldTSURvY3VtZW50I2dldExvY2F0aW9uKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9jYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRVUkk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LldTSURvY3VtZW50I3NldExvY2F0aW9uKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExvY2F0aW9uKFN0cmluZyBkb2N1bWVudFVSSSkKLSAgewotICAgIHRoaXMuZG9jdW1lbnRVUkkgPSBkb2N1bWVudFVSSTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubW9uaXRvci5jb25maWcuTW9uaXRvckNvbmZpZyNnZXRWZXJib3NlT3B0aW9uKCkKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGdldFZlcmJvc2VPcHRpb24oKQotICB7Ci0gICAgcmV0dXJuIHRoaXMudmVyYm9zZTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubW9uaXRvci5jb25maWcuTW9uaXRvckNvbmZpZyNzZXRWZXJib3NlT3B0aW9uKGJvb2xlYW4pCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRWZXJib3NlT3B0aW9uKGJvb2xlYW4gdmVyYm9zZSkKLSAgewotICAgIHRoaXMudmVyYm9zZSA9IHZlcmJvc2U7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LkRvY3VtZW50RWxlbWVudCN0b1hNTFN0cmluZyhTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvWE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIFN0cmluZyBuc05hbWUgPSBuYW1lc3BhY2VOYW1lOwotICAgIGlmICgoIW5zTmFtZS5lcXVhbHMoIiIpICYmICghbnNOYW1lLmVuZHNXaXRoKCI6IikpKSkKLSAgICAgIG5zTmFtZSArPSAiOiI7Ci0KLSAgICAvLyBDb25maWcgb3B0aW9ucwotICAgIHB3LnByaW50bG4oIiAgICA8IiArIG5zTmFtZSArIEVMRU1fTkFNRSArICI+Iik7Ci0KLSAgICAvLyBDb21tZW50Ci0gICAgaWYgKHRoaXMuY29tbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIHB3LnByaW50KGNvbW1lbnQudG9YTUxTdHJpbmcobnNOYW1lKSk7Ci0gICAgfQotCi0gICAgLy8gTG9nIGZpbGUKLSAgICBwdy5wcmludCgiICAgICAgPCIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9MT0dfRklMRSArICIgIik7Ci0gICAgcHcucHJpbnQoV1NJQ29uc3RhbnRzLkFUVFJfUkVQTEFDRSArICI9XCIiICsgdGhpcy5yZXBsYWNlTG9nICsgIlwiICIpOwotICAgIHB3LnByaW50bG4oV1NJQ29uc3RhbnRzLkFUVFJfTE9DQVRJT04gKyAiPVwiIiArIHRoaXMubG9nVVJJICsgIlwiPiIpOwotICAgIHB3LnByaW50KGdldEFkZFN0eWxlU2hlZXQoKS50b1hNTFN0cmluZyhuYW1lc3BhY2VOYW1lKSk7Ci0gICAgcHcucHJpbnRsbigiICAgIDwvIiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX0xPR19GSUxFICsgIj4iKTsKLQotICAgIC8vIExvZyBkdXJhdGlvbgotICAgIHB3LnByaW50KCIgICAgICA8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX0xPR19EVVJBVElPTiArICI+Iik7Ci0gICAgcHcucHJpbnQodGhpcy5sb2dEdXJhdGlvbik7Ci0gICAgcHcucHJpbnRsbigiPC8iICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fTE9HX0RVUkFUSU9OICsgIj4iKTsKLQotICAgIC8vIFRpbWVvdXQKLSAgICBwdy5wcmludCgKLSAgICAgICIgICAgICA8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX0NMRUFOVVBfVElNRU9VVF9TRUNPTkRTICsgIj4iKTsKLSAgICBwdy5wcmludCh0aGlzLnRpbWVvdXQpOwotICAgIHB3LnByaW50bG4oIjwvIiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX0NMRUFOVVBfVElNRU9VVF9TRUNPTkRTICsgIj4iKTsKLQotICAgIC8vIE1hbi1pbi10aGUtbWlkZGxlCi0gICAgaWYgKHRoaXMubWFuSW5UaGVNaWRkbGUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwdy5wcmludChtYW5JblRoZU1pZGRsZS50b1hNTFN0cmluZyhuc05hbWUpKTsKLSAgICB9Ci0KLSAgICAvLyBFbmQgZWxlbWVudAotICAgIHB3LnByaW50bG4oIiAgICA8LyIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiPiIpOwotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIHB3LnByaW50bG4oIiAgY29tbWVudCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4gIiArIHRoaXMuY29tbWVudCk7Ci0gICAgcHcucHJpbnRsbigiICBsb2dVUkkgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAiICsgdGhpcy5sb2dVUkkpOwotICAgIHB3LnByaW50bG4oIiAgcmVwbGFjZUxvZyAuLi4uLi4uLi4uLi4uLi4uLi4gIiArIHRoaXMucmVwbGFjZUxvZyk7Ci0gICAgcHcucHJpbnRsbigiICBsb2dEdXJhdGlvbiAuLi4uLi4uLi4uLi4uLi4uLiAiICsgdGhpcy5sb2dEdXJhdGlvbik7Ci0gICAgcHcucHJpbnRsbigiICB0aW1lb3V0IC4uLi4uLi4uLi4uLi4uLi4uLi4uLiAiICsgdGhpcy50aW1lb3V0KTsKLQotICAgIC8vIGFkZFN0eWxlU2hlZXQKLSAgICBpZiAodGhpcy5hZGRTdHlsZVNoZWV0ICE9IG51bGwpCi0gICAgICBwdy5wcmludGxuKAotICAgICAgICAiICBhZGRTdHlsZVNoZWV0IC4uLi4uLi4uLi4uLi4uLiAiICsgdGhpcy5hZGRTdHlsZVNoZWV0LnRvU3RyaW5nKCkpOwotCi0gICAgLy8gTWFuLWluLXRoZS1taWRkbGUKLSAgICBpZiAodGhpcy5tYW5JblRoZU1pZGRsZSAhPSBudWxsKQotICAgIHsKLSAgICAgIHB3LnByaW50KHRoaXMubWFuSW5UaGVNaWRkbGUudG9TdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IGNvbmZpZyB2YWx1ZXMgZnJvbSBhbm90aGVyIG1vbml0b3IgY29uZmlnIG9iamVjdC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBzZXRDb25maWcoTW9uaXRvckNvbmZpZyBtb25pdG9yQ29uZmlnKQotICB7Ci0gICAgLy8gQUREOiBTaG91bGQgdGhpcyBiZSBhIGNsb25lIG9wZXJhdGlvbj8KLSAgICB0aGlzLmNvbW1lbnQgPSBtb25pdG9yQ29uZmlnLmdldENvbW1lbnQoKTsKLSAgICB0aGlzLmRvY3VtZW50VVJJID0gbW9uaXRvckNvbmZpZy5nZXRMb2NhdGlvbigpOwotICAgIHRoaXMubG9nVVJJID0gbW9uaXRvckNvbmZpZy5nZXRMb2dMb2NhdGlvbigpOwotICAgIHRoaXMucmVwbGFjZUxvZyA9IG1vbml0b3JDb25maWcuZ2V0UmVwbGFjZUxvZygpOwotICAgIHRoaXMubG9nRHVyYXRpb24gPSBtb25pdG9yQ29uZmlnLmdldExvZ0R1cmF0aW9uKCk7Ci0gICAgdGhpcy50aW1lb3V0ID0gbW9uaXRvckNvbmZpZy5nZXRUaW1lb3V0KCk7Ci0gICAgdGhpcy5tYW5JblRoZU1pZGRsZSA9IG1vbml0b3JDb25maWcuZ2V0TWFuSW5UaGVNaWRkbGUoKTsKLSAgICB0aGlzLmFkZFN0eWxlU2hlZXQgPSBtb25pdG9yQ29uZmlnLmdldEFkZFN0eWxlU2hlZXQoKTsKLSAgICB0aGlzLnZlcmJvc2UgPSBtb25pdG9yQ29uZmlnLmdldFZlcmJvc2VPcHRpb24oKTsKLSAgfQotCi0gIC8qKgotICAgKiBWZXJpZnkgY29uZmlnIG9wdGlvbnMuCi0gICAqLwotICBwcml2YXRlIHZvaWQgdmVyaWZ5Q29uZmlnKCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gSWYgbm8gcmVkaXJlY3Qgc3RhdGVtZW50cywgdGhlbiBleGl0Ci0gICAgaWYgKCh0aGlzLm1hbkluVGhlTWlkZGxlID09IG51bGwpCi0gICAgICB8fCAodGhpcy5tYW5JblRoZU1pZGRsZS5nZXRSZWRpcmVjdExpc3QoKSA9PSBudWxsKQotICAgICAgfHwgKHRoaXMubWFuSW5UaGVNaWRkbGUuZ2V0UmVkaXJlY3RMaXN0KCkuc2l6ZSgpID09IDApKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgIGdldE1lc3NhZ2UoCi0gICAgICAgICAgImNvbmZpZzA1IiwKLSAgICAgICAgICAiTW9uaXRvciBjb25maWcgZmlsZSBkaWQgbm90IGNvbnRhaW4gYW55IHJlZGlyZWN0IHN0YXRlbWVudHMuIikpOwotICAgIH0KLQotICAgIGlmICh0aGlzLmxvZ1VSSSA9PSBudWxsKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgIGdldE1lc3NhZ2UoCi0gICAgICAgICAgImNvbmZpZzA2IiwKLSAgICAgICAgICAiTW9uaXRvciBjb25maWcgZmlsZSBkaWQgbm90IGNvbnRhaW4gdGhlIGxvZyBmaWxlIFVSSS4iKSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFBhcnNlIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgotICAgKi8KLSAgcHVibGljIHZvaWQgcGFyc2VBcmdzKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEdldCBuZXcgY29uZmlnIHJlYWRlcgotICAgIE1vbml0b3JDb25maWdSZWFkZXIgbW9uaXRvckNvbmZpZ1JlYWRlciA9IG5ldyBNb25pdG9yQ29uZmlnUmVhZGVySW1wbCgpOwotCi0gICAgLy8gTW9uaXRvciBjb25maWcgb2JqZWN0IHdoaWNoIHdpbGwgYmUgbWVyZ2VkIGFmdGVyIGFsbCBvZiB0aGUgaW5wdXQgcGFybXMgYXJlIHByb2Nlc3NlZAotICAgIE1vbml0b3JDb25maWcgbW9uaXRvckNvbmZpZ0Zyb21BcmdzID0gbnVsbDsKLQotICAgIC8vIElmIG5vIGlucHV0IGFyZ3VtZW50cywgdGhlbiB0aHJvdyBleGNlcHRpb24KLSAgICBpZiAoYXJncy5sZW5ndGggPT0gMCkKLSAgICB7Ci0gICAgICAvLyBBREQ6IAotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgZ2V0TWVzc2FnZSgidXNhZ2UwMSIsIE1vbml0b3IuVVNBR0VfTUVTU0FHRSkpOwotICAgIH0KLQotICAgIC8vIFBhcnNlIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzIHRvIGxvY2F0ZSB0aGUgY29uZmlnIGZpbGUgb3B0aW9uIChpZiBpdCB3YXMgc3BlY2lmaWVkKQotICAgIGZvciAoaW50IGFyZ0NvdW50ID0gMDsgYXJnQ291bnQgPCBhcmdzLmxlbmd0aDsgYXJnQ291bnQrKykKLSAgICB7Ci0gICAgICAvLyAtY29uZmlnRmlsZQotICAgICAgaWYgKChhcmdzW2FyZ0NvdW50XS5lcXVhbHNJZ25vcmVDYXNlKCItY29uZmlnIikpCi0gICAgICAgIHx8IChhcmdzW2FyZ0NvdW50XS5lcXVhbHMoIi1jIikpKQotICAgICAgewotICAgICAgICBhcmdDb3VudCsrOwotICAgICAgICBtb25pdG9yQ29uZmlnRnJvbUFyZ3MgPQotICAgICAgICAgIG1vbml0b3JDb25maWdSZWFkZXIucmVhZE1vbml0b3JDb25maWcoYXJnc1thcmdDb3VudF0pOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIElmIGNvbmZpZyBmaWxlIHdhcyBub3Qgc3BlY2lmaWVkLCB0aGVuIGNyZWF0ZSBhbmFseXplciBjb25maWcgb2JqZWN0Ci0gICAgaWYgKG1vbml0b3JDb25maWdGcm9tQXJncyA9PSBudWxsKQotICAgIHsKLSAgICAgIG1vbml0b3JDb25maWdGcm9tQXJncyA9IG5ldyBNb25pdG9yQ29uZmlnSW1wbCgpOwotICAgICAgbW9uaXRvckNvbmZpZ0Zyb21BcmdzLmluaXQodGhpcy5tZXNzYWdlTGlzdCk7Ci0gICAgfQotCi0gICAgLy8gUGFyc2UgYWxsIG9mIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzCi0gICAgZm9yIChpbnQgYXJnQ291bnQgPSAwOyBhcmdDb3VudCA8IGFyZ3MubGVuZ3RoOyBhcmdDb3VudCsrKQotICAgIHsKLSAgICAgIC8vIC1jb25maWdGaWxlCi0gICAgICBpZiAoKGFyZ3NbYXJnQ291bnRdLmVxdWFsc0lnbm9yZUNhc2UoIi1jb25maWciKSkKLSAgICAgICAgfHwgKGFyZ3NbYXJnQ291bnRdLmVxdWFscygiLWMiKSkpCi0gICAgICB7Ci0gICAgICAgIC8vIFNraXAgdGhpcyBvcHRpb24gc2luY2UgaXQgd2FzIGFscmVhZHkgcHJvY2Vzc2VkCi0gICAgICAgIGFyZ0NvdW50Kys7Ci0gICAgICB9Ci0KLSAgICAgIC8vIC1jb21tZW50Ci0gICAgICBlbHNlIGlmICgKLSAgICAgICAgKGFyZ3NbYXJnQ291bnRdLmVxdWFsc0lnbm9yZUNhc2UoIi1jb21tZW50IikpCi0gICAgICAgICAgfHwgKGFyZ3NbYXJnQ291bnRdLmVxdWFscygiLUMiKSkpCi0gICAgICB7Ci0gICAgICAgIGFyZ0NvdW50Kys7Ci0gICAgICAgIENvbW1lbnQgY29tbWVudCA9IG5ldyBDb21tZW50SW1wbCgpOwotICAgICAgICBjb21tZW50LnNldFRleHQoYXJnc1thcmdDb3VudF0pOwotICAgICAgICBtb25pdG9yQ29uZmlnRnJvbUFyZ3Muc2V0Q29tbWVudChjb21tZW50KTsKLSAgICAgIH0KLQotICAgICAgLy8gLWxvZ0ZpbGUKLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLWxvZ0ZpbGUiKSkKLSAgICAgICAgICB8fCAoYXJnc1thcmdDb3VudF0uZXF1YWxzKCItbCIpKSkKLSAgICAgIHsKLSAgICAgICAgYXJnQ291bnQrKzsKLSAgICAgICAgbW9uaXRvckNvbmZpZ0Zyb21BcmdzLnNldExvZ0xvY2F0aW9uKGFyZ3NbYXJnQ291bnRdKTsKLSAgICAgIH0KLQotICAgICAgLy8gLXJlcGxhY2UKLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLXJlcGxhY2UiKSkKLSAgICAgICAgICB8fCAoYXJnc1thcmdDb3VudF0uZXF1YWxzKCItciIpKSkKLSAgICAgIHsKLSAgICAgICAgYXJnQ291bnQrKzsKLSAgICAgICAgbW9uaXRvckNvbmZpZ0Zyb21BcmdzLnNldFJlcGxhY2VMb2coCi0gICAgICAgICAgQm9vbGVhbi52YWx1ZU9mKGFyZ3NbYXJnQ291bnRdKS5ib29sZWFuVmFsdWUoKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIC1sb2dEdXJhdGlvbgotICAgICAgZWxzZSBpZiAoCi0gICAgICAgIChhcmdzW2FyZ0NvdW50XS5lcXVhbHNJZ25vcmVDYXNlKCItbG9nRHVyYXRpb24iKSkKLSAgICAgICAgICB8fCAoYXJnc1thcmdDb3VudF0uZXF1YWxzKCItZCIpKSkKLSAgICAgIHsKLSAgICAgICAgYXJnQ291bnQrKzsKLSAgICAgICAgbW9uaXRvckNvbmZpZ0Zyb21BcmdzLnNldExvZ0R1cmF0aW9uKAotICAgICAgICAgIEludGVnZXIudmFsdWVPZihhcmdzW2FyZ0NvdW50XSkuaW50VmFsdWUoKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIC10aW1lb3V0Ci0gICAgICBlbHNlIGlmICgKLSAgICAgICAgKGFyZ3NbYXJnQ291bnRdLmVxdWFsc0lnbm9yZUNhc2UoIi10aW1lb3V0IikpCi0gICAgICAgICAgfHwgKGFyZ3NbYXJnQ291bnRdLmVxdWFscygiLXQiKSkpCi0gICAgICB7Ci0gICAgICAgIGFyZ0NvdW50Kys7Ci0gICAgICAgIG1vbml0b3JDb25maWdGcm9tQXJncy5zZXRUaW1lb3V0KAotICAgICAgICAgIEludGVnZXIudmFsdWVPZihhcmdzW2FyZ0NvdW50XSkuaW50VmFsdWUoKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIC1tYW5JblRoZU1pZGRsZQotICAgICAgZWxzZSBpZiAoCi0gICAgICAgIChhcmdzW2FyZ0NvdW50XS5lcXVhbHNJZ25vcmVDYXNlKCItbWFuSW5UaGVNaWRkbGUiKSkKLSAgICAgICAgICB8fCAoYXJnc1thcmdDb3VudF0uZXF1YWxzKCItbSIpKSkKLSAgICAgIHsKLSAgICAgICAgTWFuSW5UaGVNaWRkbGUgbWFuSW5UaGVNaWRkbGUgPSBudWxsOwotCi0gICAgICAgIC8vIEluY3JlbWVudCBhcmcgY291bnQKLSAgICAgICAgYXJnQ291bnQrKzsKLQotICAgICAgICAvLyBHZXQgdGhlIG1hbi1pbi10aGUtbWlkZGxlIG9iamVjdAotICAgICAgICBpZiAoKG1hbkluVGhlTWlkZGxlID0gbW9uaXRvckNvbmZpZ0Zyb21BcmdzLmdldE1hbkluVGhlTWlkZGxlKCkpCi0gICAgICAgICAgPT0gbnVsbCkKLSAgICAgICAgICBtYW5JblRoZU1pZGRsZSA9IG5ldyBNYW5JblRoZU1pZGRsZUltcGwoKTsKLQotICAgICAgICAvLyBBREQ6IENoZWNrIGZvciBjb3JyZWN0IG51bWJlciBvZiByZW1haW5pbmcgYXJncwotCi0gICAgICAgIC8vIENyZWF0ZSByZWRpcmVjdAotICAgICAgICBSZWRpcmVjdCByZWRpcmVjdCA9IG5ldyBSZWRpcmVjdEltcGwoKTsKLQotICAgICAgICAvLyBHZXQgdGhlIHJlZGlyZWN0IHZhbHVlcyAKLSAgICAgICAgcmVkaXJlY3Quc2V0TGlzdGVuUG9ydChJbnRlZ2VyLnZhbHVlT2YoYXJnc1thcmdDb3VudCsrXSkuaW50VmFsdWUoKSk7Ci0gICAgICAgIHJlZGlyZWN0LnNldEhvc3QoYXJnc1thcmdDb3VudCsrXSk7Ci0gICAgICAgIHJlZGlyZWN0LnNldE1heENvbm5lY3Rpb25zKAotICAgICAgICAgIEludGVnZXIudmFsdWVPZihhcmdzW2FyZ0NvdW50KytdKS5pbnRWYWx1ZSgpKTsKLSAgICAgICAgcmVkaXJlY3Quc2V0UmVhZFRpbWVvdXRTZWNvbmRzKAotICAgICAgICAgIEludGVnZXIudmFsdWVPZihhcmdzW2FyZ0NvdW50KytdKS5pbnRWYWx1ZSgpKTsKLQotICAgICAgICAvLyBBZGQgcmVkaXJlY3QKLSAgICAgICAgbWFuSW5UaGVNaWRkbGUuYWRkUmVkaXJlY3QocmVkaXJlY3QpOwotCi0gICAgICAgIC8vIFNldCB0aGUgbWFuLWluLXRoZS1taWRkbGUKLSAgICAgICAgbW9uaXRvckNvbmZpZ0Zyb21BcmdzLnNldE1hbkluVGhlTWlkZGxlKG1hbkluVGhlTWlkZGxlKTsKLSAgICAgIH0KLQotICAgICAgLy8gLXZlcmJvc2UKLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoYXJnc1thcmdDb3VudF0uZXF1YWxzSWdub3JlQ2FzZSgiLXZlcmJvc2UiKSkKLSAgICAgICAgICB8fCAoYXJnc1thcmdDb3VudF0uZXF1YWxzKCItdiIpKSkKLSAgICAgIHsKLSAgICAgICAgYXJnQ291bnQrKzsKLSAgICAgICAgLy9tb25pdG9yQ29uZmlnRnJvbUFyZ3Muc2V0VmVyYm9zZU9wdGlvbihCb29sZWFuLnZhbHVlT2YoYXJnc1thcmdDb3VudF0pLmJvb2xlYW5WYWx1ZSgpKTsKLSAgICAgICAgbW9uaXRvckNvbmZpZ0Zyb21BcmdzLnNldFZlcmJvc2VPcHRpb24odHJ1ZSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIC1HVUkKLSAgICAgIGVsc2UgaWYgKGFyZ3NbYXJnQ291bnRdLmVxdWFsc0lnbm9yZUNhc2UoIi1HVUkiKSkKLSAgICAgIHsKLSAgICAgICAgLy8gSWdub3JlIC1HVUkgb3B0aW9uCi0gICAgICB9Ci0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgICBnZXRNZXNzYWdlKAotICAgICAgICAgICAgImNvbmZpZzAxIiwKLSAgICAgICAgICAgIGFyZ3NbYXJnQ291bnRdLAotICAgICAgICAgICAgIlRoZSBzcGVjaWZpZWQgb3B0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuIikpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIElmIGFkZFN0eWxlU2hlZXQgd2FzIG5vdCBzcGVjaWZpZWQsIHRoZW4gY3JlYXRlIGEgY29tbWVudCB2ZXJzaW9uIG9mIGl0Ci0gICAgaWYgKG1vbml0b3JDb25maWdGcm9tQXJncy5nZXRBZGRTdHlsZVNoZWV0KCkgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBBZGRTdHlsZVNoZWV0IGFkZFN0eWxlU2hlZXQgPSBuZXcgQWRkU3R5bGVTaGVldEltcGwoKTsKLSAgICAgIGFkZFN0eWxlU2hlZXQuc2V0SHJlZihXU0lDb25zdGFudHMuREVGQVVMVF9MT0dfWFNMKTsKLSAgICAgIGFkZFN0eWxlU2hlZXQuc2V0VHlwZShXU0lDb25zdGFudHMuREVGQVVMVF9YU0xfVFlQRSk7Ci0gICAgICBhZGRTdHlsZVNoZWV0LnNldENvbW1lbnQodHJ1ZSk7Ci0gICAgICBtb25pdG9yQ29uZmlnRnJvbUFyZ3Muc2V0QWRkU3R5bGVTaGVldChhZGRTdHlsZVNoZWV0KTsKLSAgICB9Ci0KLSAgICAvLyBNZXJnZSBjb25maWcgaW5mbyBpbnRvIHRoaXMgb2JqZWN0Ci0gICAgc2V0Q29uZmlnKG1vbml0b3JDb25maWdGcm9tQXJncyk7Ci0KLSAgICAvLyBWZXJpZnkgY29uZmlnIG9wdGlvbnMKLSAgICB2ZXJpZnlDb25maWcoKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgbWVzc2FnZSBmcm9tIHJlc291cmNlIGJ1bmRsZS4KLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGdldE1lc3NhZ2UoU3RyaW5nIG1lc3NhZ2VJRCwgU3RyaW5nIGRlZmF1bHRNZXNzYWdlKQotICB7Ci0gICAgcmV0dXJuIGdldE1lc3NhZ2UobWVzc2FnZUlELCBudWxsLCBkZWZhdWx0TWVzc2FnZSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IG1lc3NhZ2UgZnJvbSByZXNvdXJjZSBidW5kbGUuCi0gICAqLwotICBwcml2YXRlIFN0cmluZyBnZXRNZXNzYWdlKAotICAgIFN0cmluZyBtZXNzYWdlSUQsCi0gICAgU3RyaW5nIG1lc3NhZ2VEYXRhLAotICAgIFN0cmluZyBkZWZhdWx0TWVzc2FnZSkKLSAgewotICAgIFN0cmluZyBtZXNzYWdlID0gZGVmYXVsdE1lc3NhZ2U7Ci0gICAgaWYgKG1lc3NhZ2VMaXN0ICE9IG51bGwpCi0gICAgICBtZXNzYWdlID0gbWVzc2FnZUxpc3QuZ2V0TWVzc2FnZShtZXNzYWdlSUQsIG1lc3NhZ2VEYXRhLCBkZWZhdWx0TWVzc2FnZSk7Ci0gICAgZWxzZQotICAgICAgbWVzc2FnZSArPSAiICIgKyBtZXNzYWdlRGF0YSArICIuIjsKLQotICAgIHJldHVybiBtZXNzYWdlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL2NvbmZpZy9pbXBsL01vbml0b3JDb25maWdSZWFkZXJJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9tb25pdG9yL2NvbmZpZy9pbXBsL01vbml0b3JDb25maWdSZWFkZXJJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwNGFiY2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9jb25maWcvaW1wbC9Nb25pdG9yQ29uZmlnUmVhZGVySW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDc5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5tb25pdG9yLmNvbmZpZy5pbXBsOwotCi1pbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lGaWxlTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmNvbW1vbi5BZGRTdHlsZVNoZWV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5jb21tb24uaW1wbC5BZGRTdHlsZVNoZWV0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuQ29tbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuTWFuSW5UaGVNaWRkbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3IuY29uZmlnLk1vbml0b3JDb25maWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3IuY29uZmlnLk1vbml0b3JDb25maWdSZWFkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3IuY29uZmlnLlJlZGlyZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLk1lc3NhZ2VMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlRlc3RVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLS8qKgotICogRGVmaW5lcyB0aGUgaW1wbGVtZW50YXRpb24gdXNlZCB0byByZWFkIHRoZSBtb25pdG9yIGNvbmZpZyBkb2N1bWVudHMuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIE1vbml0b3JDb25maWdSZWFkZXJJbXBsIGltcGxlbWVudHMgTW9uaXRvckNvbmZpZ1JlYWRlcgotewotICAvKioKLSAgICogTWVzc2FnZSBsaXN0IHJlZmVyZW5jZS4KLSAgICovCi0gIHByb3RlY3RlZCBNZXNzYWdlTGlzdCBtZXNzYWdlTGlzdCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIERvY3VtZW50IGxvY2F0aW9uLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBkb2N1bWVudFVSSTsKLQotICAvKioKLSAgICogSW5pdGlhbGl6ZSBtb25pdG9yIGNvbmZpZy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXQoTWVzc2FnZUxpc3QgbWVzc2FnZUxpc3QpCi0gIHsKLSAgICB0aGlzLm1lc3NhZ2VMaXN0ID0gbWVzc2FnZUxpc3Q7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLk1vbml0b3JDb25maWdSZWFkZXIjcmVhZE1vbml0b3JDb25maWcoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIE1vbml0b3JDb25maWcgcmVhZE1vbml0b3JDb25maWcoU3RyaW5nIG1vbml0b3JDb25maWdVUkkpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgRmlsZVJlYWRlciBmaWxlUmVhZGVyID0gbnVsbDsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIGZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcihtb25pdG9yQ29uZmlnVVJJKTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGZuZmUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTSUZpbGVOb3RGb3VuZEV4Y2VwdGlvbigKLSAgICAgICAgZ2V0TWVzc2FnZSgiY29uZmlnMDIiLCBtb25pdG9yQ29uZmlnVVJJLCAiQ291bGQgbm90IGZpbmQgZmlsZToiKSwKLSAgICAgICAgZm5mZSk7Ci0gICAgfQotCi0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBXU0lFeGNlcHRpb24oCi0gICAgICAgIGdldE1lc3NhZ2UoImNvbmZpZzAzIiwgbW9uaXRvckNvbmZpZ1VSSSwgIkNvdWxkIG5vdCByZWFkIGZpbGU6IiksCi0gICAgICAgIGUpOwotICAgIH0KLQotICAgIHJldHVybiByZWFkTW9uaXRvckNvbmZpZyhmaWxlUmVhZGVyKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QubW9uaXRvci5jb25maWcuTW9uaXRvckNvbmZpZ1JlYWRlciNyZWFkTW9uaXRvckNvbmZpZyhSZWFkZXIpCi0gICAqLwotICBwdWJsaWMgTW9uaXRvckNvbmZpZyByZWFkTW9uaXRvckNvbmZpZyhSZWFkZXIgcmVhZGVyKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBNb25pdG9yQ29uZmlnIG1vbml0b3JDb25maWcgPSBuZXcgTW9uaXRvckNvbmZpZ0ltcGwoKTsKLQotICAgIC8vIFBhcnNlIFhNTAotICAgIERvY3VtZW50IGRvYyA9IFhNTFV0aWxzLnBhcnNlWE1MKHJlYWRlcik7Ci0KLSAgICAvLyBQYXJzZSBlbGVtZW50cyBpbiB0aGUgY29uZmlnIGRvY3VtZW50Ci0gICAgcGFyc2VDb25maWdFbGVtZW50KG1vbml0b3JDb25maWcsIGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKSk7Ci0KLSAgICByZXR1cm4gbW9uaXRvckNvbmZpZzsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRSZWFkZXIjZ2V0TG9jYXRpb24oKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRMb2NhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5kb2N1bWVudFVSSTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRSZWFkZXIjc2V0TG9jYXRpb24oU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TG9jYXRpb24oU3RyaW5nIGRvY3VtZW50VVJJKQotICB7Ci0gICAgdGhpcy5kb2N1bWVudFVSSSA9IGRvY3VtZW50VVJJOwotICB9Ci0KLSAgLyoqCi0gICAqIFBhcnNlIGNvbmZpZyBlbGVtZW50LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHBhcnNlQ29uZmlnRWxlbWVudChNb25pdG9yQ29uZmlnIG1vbml0b3JDb25maWcsIEVsZW1lbnQgZWxlbWVudCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBBREQ6IFZlcmlmeSB0aGF0IHRoaXMgaXMgdGhlIGNvbmZpZyBlbGVtZW50Ci0KLSAgICAvLyBHZXQgZmlyc3QgY2hpbGQgZWxlbWVudAotICAgIEVsZW1lbnQgbmV4dEVsZW1lbnQgPSBYTUxVdGlscy5nZXRGaXJzdENoaWxkKGVsZW1lbnQpOwotCi0gICAgYm9vbGVhbiBpc0xvZ0R1cmF0aW9uRGVmaW5lID0gZmFsc2U7Ci0gICAgYm9vbGVhbiBpc0NsZWFudXBUaW1lb3V0U2Vjb25kc0RlZmluZSA9IGZhbHNlOwotCi0gICAgLy8gUHJvY2VzcyBlYWNoIGNoaWxkIGVsZW1lbnQKLSAgICB3aGlsZSAobmV4dEVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyA8bG9nRmlsZT4KLSAgICAgIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX0xPR19GSUxFKSkKLSAgICAgIHsKLSAgICAgICAgLy8gUGFyc2UgdGhlIGxvZyBlbGVtZW50Ci0gICAgICAgIHBhcnNlTG9nRmlsZUVsZW1lbnQobW9uaXRvckNvbmZpZywgbmV4dEVsZW1lbnQpOwotICAgICAgfQotCi0gICAgICAvLyA8bG9nRHVyYXRpb24+Ci0gICAgICBlbHNlIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX0xPR19EVVJBVElPTikpCi0gICAgICB7Ci0gICAgICAgIG1vbml0b3JDb25maWcuc2V0TG9nRHVyYXRpb24oZ2V0SW50VmFsdWUobmV4dEVsZW1lbnQpKTsKLSAgICAgICAgaWYgKG1vbml0b3JDb25maWcuZ2V0TG9nRHVyYXRpb24oKSA8IDApCi0gICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgICAgIGdldE1lc3NhZ2UoCi0gICAgICAgICAgICAgICJjb25maWcwOSIsCi0gICAgICAgICAgICAgIFdTSUNvbnN0YW50cy5FTEVNX0xPR19EVVJBVElPTiwKLSAgICAgICAgICAgICAgIlBhcmFtZXRlciB2YWx1ZSBjYW4ndCBiZSBuZWdhdGl2ZS4gRWxlbWVudCBuYW1lOiIpKTsKLSAgICAgICAgaXNMb2dEdXJhdGlvbkRlZmluZSA9IHRydWU7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxjbGVhbnVwVGltZW91dFNlY29uZHM+Ci0gICAgICBlbHNlIGlmICgKLSAgICAgICAgaXNFbGVtZW50KG5leHRFbGVtZW50LCBXU0lDb25zdGFudHMuRUxFTV9DTEVBTlVQX1RJTUVPVVRfU0VDT05EUykpCi0gICAgICB7Ci0gICAgICAgIG1vbml0b3JDb25maWcuc2V0VGltZW91dChnZXRJbnRWYWx1ZShuZXh0RWxlbWVudCkpOwotICAgICAgICBpZiAobW9uaXRvckNvbmZpZy5nZXRUaW1lb3V0KCkgPCAwKQotICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgICAgICBnZXRNZXNzYWdlKAotICAgICAgICAgICAgICAiY29uZmlnMDkiLAotICAgICAgICAgICAgICBXU0lDb25zdGFudHMuRUxFTV9DTEVBTlVQX1RJTUVPVVRfU0VDT05EUywKLSAgICAgICAgICAgICAgIlBhcmFtZXRlciB2YWx1ZSBjYW4ndCBiZSBuZWdhdGl2ZS4gRWxlbWVudCBuYW1lOiIpKTsKLSAgICAgICAgaXNDbGVhbnVwVGltZW91dFNlY29uZHNEZWZpbmUgPSB0cnVlOwotICAgICAgfQotCi0gICAgICAvLyA8bWFuSW5UaGVNaWRkbGU+Ci0gICAgICBlbHNlIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX01BTl9JTl9USEVfTUlERExFKSkKLSAgICAgIHsKLSAgICAgICAgTWFuSW5UaGVNaWRkbGUgbWFuSW5UaGVNaWRkbGUgPSBuZXcgTWFuSW5UaGVNaWRkbGVJbXBsKCk7Ci0gICAgICAgIG1vbml0b3JDb25maWcuc2V0TWFuSW5UaGVNaWRkbGUobWFuSW5UaGVNaWRkbGUpOwotICAgICAgICBwYXJzZU1hbkluVGhlTWlkZGxlRWxlbWVudChtYW5JblRoZU1pZGRsZSwgbmV4dEVsZW1lbnQpOwotICAgICAgfQotCi0gICAgICAvLyA8Y29tbWVudD4KLSAgICAgIGVsc2UgaWYgKGlzRWxlbWVudChuZXh0RWxlbWVudCwgV1NJQ29uc3RhbnRzLkVMRU1fQ09NTUVOVCkpCi0gICAgICB7Ci0gICAgICAgIENvbW1lbnQgY29tbWVudCA9IG5ldyBDb21tZW50SW1wbCgpOwotICAgICAgICBjb21tZW50LnNldFRleHQoWE1MVXRpbHMuZ2V0VGV4dChuZXh0RWxlbWVudCkpOwotICAgICAgICBtb25pdG9yQ29uZmlnLnNldENvbW1lbnQoY29tbWVudCk7Ci0gICAgICB9Ci0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gQUREOiBoYW5kbGUgaW52YWxpZCBlbGVtZW50cwotICAgICAgfQotCi0gICAgICAvLyBHZXQgbmV4dCBlbGVtZW50Ci0gICAgICBuZXh0RWxlbWVudCA9IFhNTFV0aWxzLmdldE5leHRTaWJsaW5nKG5leHRFbGVtZW50KTsKLSAgICB9Ci0KLSAgICBpZiAoIWlzTG9nRHVyYXRpb25EZWZpbmUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgZ2V0TWVzc2FnZSgKLSAgICAgICAgICAiY29uZmlnMTAiLAotICAgICAgICAgIFdTSUNvbnN0YW50cy5FTEVNX0xPR19EVVJBVElPTiwKLSAgICAgICAgICAiRWxlbWVudCBpcyBtaXNzaW5nLiBFbGVtZW50IG5hbWU6IikpOwotICAgIH0KLSAgICBpZiAoIWlzQ2xlYW51cFRpbWVvdXRTZWNvbmRzRGVmaW5lKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgIGdldE1lc3NhZ2UoCi0gICAgICAgICAgImNvbmZpZzEwIiwKLSAgICAgICAgICBXU0lDb25zdGFudHMuRUxFTV9DTEVBTlVQX1RJTUVPVVRfU0VDT05EUywKLSAgICAgICAgICAiRWxlbWVudCBpcyBtaXNzaW5nLiBFbGVtZW50IG5hbWU6IikpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBQYXJzZSBsb2dGaWxlIGVsZW1lbnQuCi0gICAqLwotICBwcml2YXRlIHZvaWQgcGFyc2VMb2dGaWxlRWxlbWVudCgKLSAgICBNb25pdG9yQ29uZmlnIG1vbml0b3JDb25maWcsCi0gICAgRWxlbWVudCBlbGVtZW50KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEdldCB0aGUgbG9jYXRpb24gYXR0cmlidXRlCi0gICAgbW9uaXRvckNvbmZpZy5zZXRMb2dMb2NhdGlvbigKLSAgICAgIFhNTFV0aWxzLmdldEF0dHJpYnV0ZVZhbHVlKGVsZW1lbnQsIFdTSUNvbnN0YW50cy5BVFRSX0xPQ0FUSU9OKSk7Ci0KLSAgICAvLyBHZXQgdGhlIHJlcGxhY2UgYXR0cmlidXRlCi0gICAgbW9uaXRvckNvbmZpZy5zZXRSZXBsYWNlTG9nKAotICAgICAgWE1MVXRpbHMuZ2V0Qm9vbGVhblZhbHVlKGVsZW1lbnQsIFdTSUNvbnN0YW50cy5BVFRSX1JFUExBQ0UsIGZhbHNlKSk7Ci0KLSAgICAvLyBHZXQgZmlyc3QgY2hpbGQgZWxlbWVudAotICAgIEVsZW1lbnQgbmV4dEVsZW1lbnQgPSBYTUxVdGlscy5nZXRGaXJzdENoaWxkKGVsZW1lbnQpOwotCi0gICAgLy8gUHJvY2VzcyBlYWNoIGNoaWxkIGVsZW1lbnQKLSAgICB3aGlsZSAobmV4dEVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyA8YWRkU3R5bGVTaGVldD4KLSAgICAgIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX0FERF9TVFlMRV9TSEVFVCkpCi0gICAgICB7Ci0gICAgICAgIEFkZFN0eWxlU2hlZXQgYWRkU3R5bGVTaGVldCA9IG5ldyBBZGRTdHlsZVNoZWV0SW1wbCgpOwotCi0gICAgICAgIC8vIFBhcnNlIHRoZSBlbGVtZW50ICAKLSAgICAgICAgVGVzdFV0aWxzLnBhcnNlQWRkU3R5bGVTaGVldCgKLSAgICAgICAgICBuZXh0RWxlbWVudCwKLSAgICAgICAgICBhZGRTdHlsZVNoZWV0LAotICAgICAgICAgIFdTSUNvbnN0YW50cy5ERUZBVUxUX0xPR19YU0wpOwotCi0gICAgICAgIC8vIFNldCBhZGQgc3R5bGUgc2hlZXQKLSAgICAgICAgbW9uaXRvckNvbmZpZy5zZXRBZGRTdHlsZVNoZWV0KGFkZFN0eWxlU2hlZXQpOwotICAgICAgfQotCi0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIEFERDogaGFuZGxlIGludmFsaWQgZWxlbWVudHMKLSAgICAgIH0KLQotICAgICAgLy8gR2V0IG5leHQgZWxlbWVudAotICAgICAgbmV4dEVsZW1lbnQgPSBYTUxVdGlscy5nZXROZXh0U2libGluZyhuZXh0RWxlbWVudCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFBhcnNlIG1hbkludGhlTWlkZGxlIGVsZW1lbnQuCi0gICAqLwotICBwcml2YXRlIHZvaWQgcGFyc2VNYW5JblRoZU1pZGRsZUVsZW1lbnQoCi0gICAgTWFuSW5UaGVNaWRkbGUgbWFuSW5UaGVNaWRkbGUsCi0gICAgRWxlbWVudCBlbGVtZW50KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEdldCBmaXJzdCBjaGlsZCBlbGVtZW50Ci0gICAgRWxlbWVudCBuZXh0RWxlbWVudCA9IFhNTFV0aWxzLmdldEZpcnN0Q2hpbGQoZWxlbWVudCk7Ci0KLSAgICAvLyBQcm9jZXNzIGVhY2ggY2hpbGQgZWxlbWVudAotICAgIHdoaWxlIChuZXh0RWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIDxyZWRpcmVjdD4KLSAgICAgIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX1JFRElSRUNUKSkKLSAgICAgIHsKLSAgICAgICAgUmVkaXJlY3QgcmVkaXJlY3QgPSBuZXcgUmVkaXJlY3RJbXBsKCk7Ci0gICAgICAgIG1hbkluVGhlTWlkZGxlLmFkZFJlZGlyZWN0KHJlZGlyZWN0KTsKLSAgICAgICAgcGFyc2VSZWRpcmVjdEVsZW1lbnQocmVkaXJlY3QsIG5leHRFbGVtZW50KTsKLSAgICAgIH0KLQotICAgICAgLy8gPGNvbW1lbnQ+Ci0gICAgICBlbHNlIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX0NPTU1FTlQpKQotICAgICAgewotICAgICAgICBDb21tZW50IGNvbW1lbnQgPSBuZXcgQ29tbWVudEltcGwoKTsKLSAgICAgICAgY29tbWVudC5zZXRUZXh0KFhNTFV0aWxzLmdldFRleHQobmV4dEVsZW1lbnQpKTsKLSAgICAgICAgbWFuSW5UaGVNaWRkbGUuc2V0Q29tbWVudChjb21tZW50KTsKLSAgICAgIH0KLQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBBREQ6IGhhbmRsZSBpbnZhbGlkIGVsZW1lbnRzCi0gICAgICB9Ci0KLSAgICAgIC8vIEdldCBuZXh0IGVsZW1lbnQKLSAgICAgIG5leHRFbGVtZW50ID0gWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcobmV4dEVsZW1lbnQpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBQYXJzZSByZWRpcmVjdCBlbGVtZW50LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHBhcnNlUmVkaXJlY3RFbGVtZW50KFJlZGlyZWN0IHJlZGlyZWN0LCBFbGVtZW50IGVsZW1lbnQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gR2V0IGZpcnN0IGNoaWxkIGVsZW1lbnQKLSAgICBFbGVtZW50IG5leHRFbGVtZW50ID0gWE1MVXRpbHMuZ2V0Rmlyc3RDaGlsZChlbGVtZW50KTsKLQotICAgIGJvb2xlYW4gaXNMaXN0ZW5Qb3J0RGVmaW5lID0gZmFsc2U7Ci0gICAgYm9vbGVhbiBpc1NjaGVtZUFuZEhvc3RQb3J0RGVmaW5lID0gZmFsc2U7Ci0gICAgYm9vbGVhbiBpc01heENvbm5lY3Rpb25zRGVmaW5lID0gZmFsc2U7Ci0gICAgYm9vbGVhbiBpc1JlYWRUaW1lb3V0U2Vjb25kc0RlZmluZSA9IGZhbHNlOwotCi0gICAgLy8gUHJvY2VzcyBlYWNoIGNoaWxkIGVsZW1lbnQKLSAgICB3aGlsZSAobmV4dEVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyA8bGlzdGVuUG9ydD4KLSAgICAgIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX0xJU1RFTl9QT1JUKSkKLSAgICAgIHsKLSAgICAgICAgcmVkaXJlY3Quc2V0TGlzdGVuUG9ydChnZXRJbnRWYWx1ZShuZXh0RWxlbWVudCkpOwotICAgICAgICBpc0xpc3RlblBvcnREZWZpbmUgPSB0cnVlOwotICAgICAgfQotCi0gICAgICAvLyA8c2NoZW1lQW5kSG9zdFBvcnQ+Ci0gICAgICBlbHNlIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX1NDSEVNRV9BTkRfSE9TVFBPUlQpKQotICAgICAgewotICAgICAgICByZWRpcmVjdC5zZXRIb3N0KFhNTFV0aWxzLmdldFRleHQobmV4dEVsZW1lbnQpKTsKLSAgICAgICAgaXNTY2hlbWVBbmRIb3N0UG9ydERlZmluZSA9IHRydWU7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxtYXhDb25uZWN0aW9ucz4KLSAgICAgIGVsc2UgaWYgKGlzRWxlbWVudChuZXh0RWxlbWVudCwgV1NJQ29uc3RhbnRzLkVMRU1fTUFYX0NPTk5FQ1RJT05TKSkKLSAgICAgIHsKLSAgICAgICAgcmVkaXJlY3Quc2V0TWF4Q29ubmVjdGlvbnMoZ2V0SW50VmFsdWUobmV4dEVsZW1lbnQpKTsKLSAgICAgICAgaXNNYXhDb25uZWN0aW9uc0RlZmluZSA9IHRydWU7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxyZWFkVGltZW91dFNlY29uZHM+Ci0gICAgICBlbHNlIGlmIChpc0VsZW1lbnQobmV4dEVsZW1lbnQsIFdTSUNvbnN0YW50cy5FTEVNX1JFQURfVElNRU9VVF9TRUNPTkRTKSkKLSAgICAgIHsKLSAgICAgICAgcmVkaXJlY3Quc2V0UmVhZFRpbWVvdXRTZWNvbmRzKGdldEludFZhbHVlKG5leHRFbGVtZW50KSk7Ci0gICAgICAgIGlmIChyZWRpcmVjdC5nZXRSZWFkVGltZW91dFNlY29uZHMoKSA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICAgICAgZ2V0TWVzc2FnZSgKLSAgICAgICAgICAgICAgImNvbmZpZzA5IiwKLSAgICAgICAgICAgICAgV1NJQ29uc3RhbnRzLkVMRU1fUkVBRF9USU1FT1VUX1NFQ09ORFMsCi0gICAgICAgICAgICAgICJQYXJhbWV0ZXIgdmFsdWUgY2FuJ3QgYmUgbmVnYXRpdmUuIEVsZW1lbnQgbmFtZToiKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaXNSZWFkVGltZW91dFNlY29uZHNEZWZpbmUgPSB0cnVlOwotICAgICAgfQotCi0gICAgICAvLyA8Y29tbWVudD4KLSAgICAgIGVsc2UgaWYgKGlzRWxlbWVudChuZXh0RWxlbWVudCwgV1NJQ29uc3RhbnRzLkVMRU1fQ09NTUVOVCkpCi0gICAgICB7Ci0gICAgICAgIENvbW1lbnQgY29tbWVudCA9IG5ldyBDb21tZW50SW1wbCgpOwotICAgICAgICBjb21tZW50LnNldFRleHQoWE1MVXRpbHMuZ2V0VGV4dChuZXh0RWxlbWVudCkpOwotICAgICAgICByZWRpcmVjdC5zZXRDb21tZW50KGNvbW1lbnQpOwotICAgICAgfQotCi0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIEFERDogaGFuZGxlIGludmFsaWQgZWxlbWVudHMKLSAgICAgIH0KLQotICAgICAgLy8gR2V0IG5leHQgZWxlbWVudAotICAgICAgbmV4dEVsZW1lbnQgPSBYTUxVdGlscy5nZXROZXh0U2libGluZyhuZXh0RWxlbWVudCk7Ci0gICAgfQotCi0gICAgaWYgKCFpc0xpc3RlblBvcnREZWZpbmUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgZ2V0TWVzc2FnZSgKLSAgICAgICAgICAiY29uZmlnMTAiLAotICAgICAgICAgIFdTSUNvbnN0YW50cy5FTEVNX0xJU1RFTl9QT1JULAotICAgICAgICAgICJFbGVtZW50IGlzIG1pc3NpbmcuIEVsZW1lbnQgbmFtZToiKSk7Ci0gICAgfQotICAgIGlmICghaXNTY2hlbWVBbmRIb3N0UG9ydERlZmluZSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICBnZXRNZXNzYWdlKAotICAgICAgICAgICJjb25maWcxMCIsCi0gICAgICAgICAgV1NJQ29uc3RhbnRzLkVMRU1fU0NIRU1FX0FORF9IT1NUUE9SVCwKLSAgICAgICAgICAiRWxlbWVudCBpcyBtaXNzaW5nLiBFbGVtZW50IG5hbWU6IikpOwotCi0gICAgfQotICAgIGlmICghaXNNYXhDb25uZWN0aW9uc0RlZmluZSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICBnZXRNZXNzYWdlKAotICAgICAgICAgICJjb25maWcxMCIsCi0gICAgICAgICAgV1NJQ29uc3RhbnRzLkVMRU1fTUFYX0NPTk5FQ1RJT05TLAotICAgICAgICAgICJFbGVtZW50IGlzIG1pc3NpbmcuIEVsZW1lbnQgbmFtZToiKSk7Ci0gICAgfQotICAgIGlmICghaXNSZWFkVGltZW91dFNlY29uZHNEZWZpbmUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgZ2V0TWVzc2FnZSgKLSAgICAgICAgICAiY29uZmlnMTAiLAotICAgICAgICAgIFdTSUNvbnN0YW50cy5FTEVNX1JFQURfVElNRU9VVF9TRUNPTkRTLAotICAgICAgICAgICJFbGVtZW50IGlzIG1pc3NpbmcuIEVsZW1lbnQgbmFtZToiKSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIERldGVybWluZSBpZiB0aGlzIGVsZW1lbnQgbWF0Y2hlcyBzcGVjaWZpZWQgbG9jYWwgbmFtZSBpbiB0aGUgYW5hbHl6ZXIgY29uZmlnIG5hbWVzcGFjZS4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBpc0VsZW1lbnQoRWxlbWVudCBlbGVtZW50LCBTdHJpbmcgbG9jYWxOYW1lKQotICB7Ci0gICAgcmV0dXJuIGlzRWxlbWVudCgKLSAgICAgIGVsZW1lbnQsCi0gICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9NT05JVE9SX0NPTkZJRywKLSAgICAgIGxvY2FsTmFtZSk7Ci0gIH0KLQotICAvKioKLSAgICogRGV0ZXJtaW5lIGlmIHRoaXMgZWxlbWVudCBtYXRjaGVzIHNwZWNpZmllZCBsb2NhbCBuYW1lIGluIHRoZSBhbmFseXplciBjb25maWcgbmFtZXNwYWNlLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGlzRWxlbWVudCgKLSAgICBFbGVtZW50IGVsZW1lbnQsCi0gICAgU3RyaW5nIG5hbWVzcGFjZSwKLSAgICBTdHJpbmcgbG9jYWxOYW1lKQotICB7Ci0gICAgcmV0dXJuIFhNTFV0aWxzLmlzRWxlbWVudChlbGVtZW50LCBuYW1lc3BhY2UsIGxvY2FsTmFtZSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGVsZW1lbnQgdGV4dCBhcyBhbiBpbnQuCi0gICAqLwotICBwcml2YXRlIGludCBnZXRJbnRWYWx1ZShFbGVtZW50IGVsZW1lbnQpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIGludCByZXR1cm5WYWx1ZTsKLSAgICBTdHJpbmcgaW50VmFsdWUgPSBudWxsOwotCi0gICAgLy8gR2V0IHZhbHVlIGFzIGEgc3RyaW5nCi0gICAgaWYgKChpbnRWYWx1ZSA9IFhNTFV0aWxzLmdldFRleHQoZWxlbWVudCkpID09IG51bGwpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigKLSAgICAgICAgZ2V0TWVzc2FnZSgKLSAgICAgICAgICAiY29uZmlnMDQiLAotICAgICAgICAgIGVsZW1lbnQuZ2V0TG9jYWxOYW1lKCkgKyAiRWxlbWVudCBtdXN0IGNvbnRhaW4gYW4gaW50ZWdlciB2YWx1ZToiKSk7Ci0gICAgfQotCi0gICAgZWxzZQotICAgIHsKLSAgICAgIHJldHVyblZhbHVlID0gSW50ZWdlci52YWx1ZU9mKGludFZhbHVlKS5pbnRWYWx1ZSgpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBpbnQKLSAgICByZXR1cm4gcmV0dXJuVmFsdWU7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IG1lc3NhZ2UgZnJvbSByZXNvdXJjZSBidW5kbGUuCi0gICAqLwotICBwcml2YXRlIFN0cmluZyBnZXRNZXNzYWdlKFN0cmluZyBtZXNzYWdlSUQsIFN0cmluZyBkZWZhdWx0TWVzc2FnZSkKLSAgewotICAgIHJldHVybiBnZXRNZXNzYWdlKG1lc3NhZ2VJRCwgbnVsbCwgZGVmYXVsdE1lc3NhZ2UpOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBtZXNzYWdlIGZyb20gcmVzb3VyY2UgYnVuZGxlLgotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0TWVzc2FnZSgKLSAgICBTdHJpbmcgbWVzc2FnZUlELAotICAgIFN0cmluZyBtZXNzYWdlRGF0YSwKLSAgICBTdHJpbmcgZGVmYXVsdE1lc3NhZ2UpCi0gIHsKLSAgICBTdHJpbmcgbWVzc2FnZSA9IGRlZmF1bHRNZXNzYWdlOwotICAgIGlmIChtZXNzYWdlTGlzdCAhPSBudWxsKQotICAgICAgbWVzc2FnZSA9IG1lc3NhZ2VMaXN0LmdldE1lc3NhZ2UobWVzc2FnZUlELCBtZXNzYWdlRGF0YSwgZGVmYXVsdE1lc3NhZ2UpOwotICAgIGVsc2UKLSAgICAgIG1lc3NhZ2UgKz0gIiAiICsgbWVzc2FnZURhdGEgKyAiLiI7Ci0KLSAgICByZXR1cm4gbWVzc2FnZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9jb25maWcvaW1wbC9SZWRpcmVjdEltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL21vbml0b3IvY29uZmlnL2ltcGwvUmVkaXJlY3RJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExZDE2OWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvbW9uaXRvci9jb25maWcvaW1wbC9SZWRpcmVjdEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubW9uaXRvci5jb25maWcuaW1wbDsKLQotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3IuY29uZmlnLkNvbW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLm1vbml0b3IuY29uZmlnLlJlZGlyZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci0KLS8qKgotICogIFRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgbW9uaXRvciBjb25maWcgUmVkaXJlY3QgZWxlbWVudC4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgUmVkaXJlY3RJbXBsIGltcGxlbWVudHMgUmVkaXJlY3QKLXsKLSAgLyoqCi0gICAqIENvbW1lbnQuCi0gICAqLwotICBwcm90ZWN0ZWQgQ29tbWVudCBjb21tZW50OwotCi0gIC8qKgotICAgKiBMaXN0ZW4gcG9ydC4KLSAgICovCi0gIHByb3RlY3RlZCBpbnQgbGlzdGVuUG9ydDsKLQotICAvKioKLSAgICogSG9zdC4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgaG9zdDsKLQotICAvKioKLSAgICogVG8gcHJvdG9jb2wuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIHRvUHJvdG9jb2w7Ci0KLSAgLyoqCi0gICAqIFRvIHBvcnQuCi0gICAqLwotICBwcm90ZWN0ZWQgaW50IHRvUG9ydDsKLQotICAvKioKLSAgICogVG8gaG9zdC4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgdG9Ib3N0OwotCi0gIC8qKgotICAgKiBNYXhpbXVtIGNvbm5lY3Rpb25zLgotICAgKi8KLSAgcHJvdGVjdGVkIGludCBtYXhDb25uZWN0aW9uczsKLQotICAvKioKLSAgICogUmVhZCB0aW1lb3V0IHNlY29uZHMuCi0gICAqLwotICBwcm90ZWN0ZWQgaW50IHJlYWRUaW1lb3V0U2Vjb25kczsKLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLlJlZGlyZWN0I2dldENvbW1lbnQoKQotICAgKi8KLSAgcHVibGljIENvbW1lbnQgZ2V0Q29tbWVudCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5jb21tZW50OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5tb25pdG9yLmNvbmZpZy5SZWRpcmVjdCNzZXRDb21tZW50KGNvbW1lbnQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDb21tZW50KENvbW1lbnQgY29tbWVudCkKLSAgewotICAgIHRoaXMuY29tbWVudCA9IGNvbW1lbnQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLlJlZGlyZWN0I2dldExpc3RlblBvcnQoKQotICAgKi8KLSAgcHVibGljIGludCBnZXRMaXN0ZW5Qb3J0KCkKLSAgewotICAgIHJldHVybiB0aGlzLmxpc3RlblBvcnQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLlJlZGlyZWN0I3NldExpc3RlblBvcnQoaW50KQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TGlzdGVuUG9ydChpbnQgbGlzdGVuUG9ydCkKLSAgewotICAgIHRoaXMubGlzdGVuUG9ydCA9IGxpc3RlblBvcnQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLlJlZGlyZWN0I2dldEhvc3QoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRIb3N0KCkKLSAgewotICAgIHJldHVybiB0aGlzLmhvc3Q7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLlJlZGlyZWN0I3NldEhvc3QoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SG9zdChTdHJpbmcgaG9zdCkKLSAgewotICAgIHRoaXMuaG9zdCA9IGhvc3Q7Ci0KLSAgICAvLyBQYXJzZSBsb2NhdGlvbiB0byBnZXQgcHJvdG9jb2wsIGhvc3QgYW5kIHBvcnQKLSAgICBVUkwgdXJsOwotICAgIHRyeQotICAgIHsKLSAgICAgIHVybCA9IG5ldyBVUkwoaG9zdCk7Ci0gICAgICB0aGlzLnRvUHJvdG9jb2wgPSB1cmwuZ2V0UHJvdG9jb2woKTsKLSAgICAgIHRoaXMudG9Ib3N0ID0gdXJsLmdldEhvc3QoKTsKLSAgICAgIHRoaXMudG9Qb3J0ID0gdXJsLmdldFBvcnQoKTsKLSAgICAgIGlmICh0aGlzLnRvUG9ydCA9PSAtMSkKLSAgICAgIHsKLSAgICAgICAgaWYgKHRoaXMudG9Qcm90b2NvbC5lcXVhbHNJZ25vcmVDYXNlKCJodHRwIikpCi0gICAgICAgICAgdGhpcy50b1BvcnQgPSA4MDsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHRoaXMudG9Qb3J0ID0gODA7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBtdWUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgIlRoZSAiCi0gICAgICAgICAgKyBXU0lDb25zdGFudHMuRUxFTV9TQ0hFTUVfQU5EX0hPU1RQT1JUCi0gICAgICAgICAgKyAiIG9wdGlvbiBjb250YWlucyBhbiBpbnZhbGlkIHZhbHVlOiAiCi0gICAgICAgICAgKyBob3N0KTsKLSAgICB9Ci0KLSAgICBpZiAoKHVybC5nZXRQYXRoKCkgIT0gbnVsbCAmJiAhdXJsLmdldFBhdGgoKS5lcXVhbHMoIiIpKQotICAgICAgfHwgKHVybC5nZXRRdWVyeSgpICE9IG51bGwgJiYgIXVybC5nZXRRdWVyeSgpLmVxdWFscygiIikpKQotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgIlRoZSAiCi0gICAgICAgICAgKyBXU0lDb25zdGFudHMuRUxFTV9TQ0hFTUVfQU5EX0hPU1RQT1JUCi0gICAgICAgICAgKyAiIG9wdGlvbiBtdXN0IGNvbnRhaW4gb25seSBhIHNjaGVtZSwgaG9zdCBhbmQgcG9ydDogIgotICAgICAgICAgICsgaG9zdCk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRvIHBvcnQuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5tb25pdG9yLmNvbmZpZy5SZWRpcmVjdCNnZXRUb1BvcnQoKQotICAgKi8KLSAgcHVibGljIGludCBnZXRUb1BvcnQoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMudG9Qb3J0OwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB0byBob3N0LgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kubW9uaXRvci5jb25maWcuUmVkaXJlY3QjZ2V0VG9Ib3N0KCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VG9Ib3N0KCkKLSAgewotICAgIHJldHVybiB0aGlzLnRvSG9zdDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdG8gcHJvdG9jb2wuCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS5tb25pdG9yLmNvbmZpZy5SZWRpcmVjdCNnZXRUb1Byb3RvY29sKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VG9Qcm90b2NvbCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy50b1Byb3RvY29sOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5tb25pdG9yLmNvbmZpZy5SZWRpcmVjdCNnZXRNYXhDb25uZWN0aW9ucygpCi0gICAqLwotICBwdWJsaWMgaW50IGdldE1heENvbm5lY3Rpb25zKCkKLSAgewotICAgIHJldHVybiB0aGlzLm1heENvbm5lY3Rpb25zOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5tb25pdG9yLmNvbmZpZy5SZWRpcmVjdCNzZXRNYXhDb25uZWN0aW9ucyhpbnQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRNYXhDb25uZWN0aW9ucyhpbnQgbWF4Q29ubmVjdGlvbnMpCi0gIHsKLSAgICB0aGlzLm1heENvbm5lY3Rpb25zID0gbWF4Q29ubmVjdGlvbnM7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLlJlZGlyZWN0I2dldFJlYWRUaW1lb3V0U2Vjb25kcygpCi0gICAqLwotICBwdWJsaWMgaW50IGdldFJlYWRUaW1lb3V0U2Vjb25kcygpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5yZWFkVGltZW91dFNlY29uZHM7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0Lm1vbml0b3IuY29uZmlnLlJlZGlyZWN0I3NldFJlYWRUaW1lb3V0U2Vjb25kcyhpbnQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZWFkVGltZW91dFNlY29uZHMoaW50IHJlYWRUaW1lb3V0U2Vjb25kcykKLSAgewotICAgIHRoaXMucmVhZFRpbWVvdXRTZWNvbmRzID0gcmVhZFRpbWVvdXRTZWNvbmRzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICBQcmludFdyaXRlciBwdyA9IG5ldyBQcmludFdyaXRlcihzdyk7Ci0KLSAgICBwdy5wcmludGxuKCIgICAgY29tbWVudCAuLi4uLi4uLi4uLi4uLi4uLi4uICIgKyB0aGlzLmNvbW1lbnQpOwotICAgIHB3LnByaW50bG4oIiAgICBsaXN0ZW5Qb3J0IC4uLi4uLi4uLi4uLi4uLi4gIiArIHRoaXMubGlzdGVuUG9ydCk7Ci0gICAgcHcucHJpbnRsbigiICAgIGhvc3QgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAiICsgY3V0SG9zdCh0aGlzLmhvc3QpKTsKLSAgICBwdy5wcmludGxuKCIgICAgbWF4Q29ubmVjdGlvbnMgLi4uLi4uLi4uLi4uICIgKyB0aGlzLm1heENvbm5lY3Rpb25zKTsKLSAgICBwdy5wcmludGxuKCIgICAgcmVhZFRpbWVvdXRTZWNvbmRzIC4uLi4uLi4uICIgKyB0aGlzLnJlYWRUaW1lb3V0U2Vjb25kcyk7Ci0KLSAgICByZXR1cm4gc3cudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qKgotICAgKiBGb3JtYXRzIGhvc3QgbmFtZSBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmljYXRpb24gKHBhdGggaXMgb21taXRlZCkuCi0gICAqIEBwYXJhbSBob3N0Ci0gICAqIEByZXR1cm4KLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGN1dEhvc3QoU3RyaW5nIGhvc3QpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBVUkwgdXJsID0gbmV3IFVSTChob3N0KTsKLSAgICAgIFN0cmluZyBwb3J0ID0gdXJsLmdldFBvcnQoKSA+IC0xID8gU3RyaW5nLnZhbHVlT2YodXJsLmdldFBvcnQoKSkgOiAiODAiOwotICAgICAgLy8gUkVNT1ZFRDogVGhpcyBjb2RlIG9ubHkgd29ya3Mgb24gMS40Ci0gICAgICAvLyBTdHJpbmcudmFsdWVPZih1cmwuZ2V0RGVmYXVsdFBvcnQoKSk7Ci0gICAgICByZXR1cm4gdXJsLmdldFByb3RvY29sKCkgKyAiOi8vIiArIHVybC5nZXRIb3N0KCkgKyAiOiIgKyBwb3J0OwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmV0dXJuIGhvc3Q7Ci0gICAgfQotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQjdG9YTUxTdHJpbmcoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1hNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSkKLSAgewotICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICBQcmludFdyaXRlciBwdyA9IG5ldyBQcmludFdyaXRlcihzdyk7Ci0KLSAgICBTdHJpbmcgbnNOYW1lID0gbmFtZXNwYWNlTmFtZTsKLSAgICBpZiAoKCFuc05hbWUuZXF1YWxzKCIiKSAmJiAoIW5zTmFtZS5lbmRzV2l0aCgiOiIpKSkpCi0gICAgICBuc05hbWUgKz0gIjoiOwotCi0gICAgLy8gU3RhcnQgZWxlbWVudAotICAgIHB3LnByaW50bG4oIiAgICAgICAgPCIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9SRURJUkVDVCArICI+Iik7Ci0KLSAgICAvLyBDb21tZW50Ci0gICAgaWYgKHRoaXMuY29tbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIHB3LnByaW50bG4odGhpcy5jb21tZW50LnRvWE1MU3RyaW5nKG5zTmFtZSkpOwotICAgIH0KLQotICAgIC8vIGxpc3RlblBvcnQKLSAgICBwdy5wcmludCgiICAgICAgICAgIDwiICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fTElTVEVOX1BPUlQgKyAiPiIpOwotICAgIHB3LnByaW50KGdldExpc3RlblBvcnQoKSk7Ci0gICAgcHcucHJpbnRsbigiPC8iICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fTElTVEVOX1BPUlQgKyAiPiIpOwotCi0gICAgLy8gc2NoZW1lQW5kSG9zdFBvcnQKLSAgICBwdy5wcmludCgKLSAgICAgICIgICAgICAgICAgPCIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9TQ0hFTUVfQU5EX0hPU1RQT1JUICsgIj4iKTsKLSAgICBwdy5wcmludChYTUxVdGlscy54bWxFc2NhcGVkU3RyaW5nKGdldEhvc3QoKSkpOwotICAgIHB3LnByaW50bG4oIjwvIiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX1NDSEVNRV9BTkRfSE9TVFBPUlQgKyAiPiIpOwotCi0gICAgLy8gbWF4Q29ubmVjdGlvbnMKLSAgICBwdy5wcmludCgiICAgICAgICAgIDwiICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fTUFYX0NPTk5FQ1RJT05TICsgIj4iKTsKLSAgICBwdy5wcmludChnZXRNYXhDb25uZWN0aW9ucygpKTsKLSAgICBwdy5wcmludGxuKCI8LyIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9NQVhfQ09OTkVDVElPTlMgKyAiPiIpOwotCi0gICAgLy8gcmVhZFRpbWVvdXRTZWNvbmRzCi0gICAgcHcucHJpbnQoCi0gICAgICAiICAgICAgICAgIDwiICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fUkVBRF9USU1FT1VUX1NFQ09ORFMgKyAiPiIpOwotICAgIHB3LnByaW50KGdldFJlYWRUaW1lb3V0U2Vjb25kcygpKTsKLSAgICBwdy5wcmludGxuKCI8LyIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9SRUFEX1RJTUVPVVRfU0VDT05EUyArICI+Iik7Ci0KLSAgICAvLyBFbmQgRWxlbWVudAotICAgIHB3LnByaW50bG4oIiAgICAgICAgPC8iICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fUkVESVJFQ1QgKyAiPiIpOwotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS9FbnRyeVR5cGVMaXN0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL0VudHJ5VHlwZUxpc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQ4ZDEzYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL0VudHJ5VHlwZUxpc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50RWxlbWVudDsKLQotLyoqCi0gKiBUaGlzIGludGVyZmFjZSBpcyB1c2VkIHRvIG1haW50YWluIGEgcHJvZmlsZSBFbnRyeVR5cGVMaXN0LgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIEVudHJ5VHlwZUxpc3QgZXh0ZW5kcyBEb2N1bWVudEVsZW1lbnQKLXsKLSAgLyoqCi0gICAqIExvZyBpbnB1dC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIExPR19JTlBVVF9OT05FID0gIm5vbmUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBMT0dfSU5QVVRfUkVRVUVTVCA9ICJyZXF1ZXN0IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9HX0lOUFVUX1JFU1BPTlNFID0gInJlc3BvbnNlIjsKLQotICAvKioKLSAgICogV1NETCBpbnB1dC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFdTRExfSU5QVVRfTk9ORSA9ICJub25lIjsKLQotICAvKioKLSAgICogVURESSBpbnB1dC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFVERElfSU5QVVRfTk9ORSA9ICJub25lIjsKLQotICAvKioKLSAgICogR2V0IGxvZyBpbnB1dC4KLSAgICogQHJldHVybiBsb2cgaW5wdXQuCi0gICAqIEBzZWUgI3NldExvZ0lucHV0Ci0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldExvZ0lucHV0KCk7Ci0KLSAgLyoqCi0gICAqIFNldCBsb2cgaW5wdXQuCi0gICAqIEBwYXJhbSBsb2dJbnB1dCBsb2cgaW5wdXQuCi0gICAqIEBzZWUgI2dldExvZ0lucHV0Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRMb2dJbnB1dChTdHJpbmcgbG9nSW5wdXQpOwotCi0gIC8qKgotICAgKiBHZXQgV1NETCBpbnB1dC4KLSAgICogQHJldHVybiBXU0RMIGlucHV0LgotICAgKiBAc2VlICNzZXRXU0RMSW5wdXQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0V1NETElucHV0KCk7Ci0KLSAgLyoqCi0gICAqIFNldCBXU0RMIGlucHV0LgotICAgKiBAcGFyYW0gd3NkbElucHV0IFdTREwgaW5wdXQuCi0gICAqIEBzZWUgI2dldFdTRExJbnB1dAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0V1NETElucHV0KFN0cmluZyB3c2RsSW5wdXQpOwotCi0gIC8qKgotICAgKiBHZXQgVURESSBpbnB1dC4KLSAgICogQHJldHVybiBVRERJIGlucHV0LgotICAgKiBAc2VlICNzZXRVRERJSW5wdXQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VURESUlucHV0KCk7Ci0KLSAgLyoqCi0gICAqIFNldCBVRERJIGlucHV0LgotICAgKiBAcGFyYW0gdWRkaUlucHV0IFVEREkgaW5wdXQuCi0gICAqIEBzZWUgI2dldFVERElJbnB1dAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VURESUlucHV0KFN0cmluZyB1ZGRpSW5wdXQpOwotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL1Byb2ZpbGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvUHJvZmlsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzMyNmMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvUHJvZmlsZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50OwotCi0vKioKLSAqIFRoaXMgaW50ZXJmYWNlIGlzIHVzZWQgdG8gbWFpbnRhaW4gUHJvZmlsZSBpbmZvcm1hdGlvbi4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBQcm9maWxlIGV4dGVuZHMgRG9jdW1lbnRFbGVtZW50Ci17Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvUHJvZmlsZUFydGlmYWN0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL1Byb2ZpbGVBcnRpZmFjdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTM0ZjJhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvUHJvZmlsZUFydGlmYWN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZTsKLQotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkFydGlmYWN0VHlwZTsKLQotLyoqCi0gKiBBbiBhcnRpZmFjdCBjb250YWlucyBhIHNldCBvZiByZWxhdGVkIHRlc3QgYXNzZXJ0aW9ucy4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIFByb2ZpbGVBcnRpZmFjdCBleHRlbmRzIERvY3VtZW50RWxlbWVudAotewotICAvKioKLSAgICogRWxlbWVudCBuYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9OQU1FID0gV1NJQ29uc3RhbnRzLkVMRU1fQVJUSUZBQ1Q7Ci0KLSAgLyoqCi0gICAqIFFOYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBRTkFNRSA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NJX0FTU0VSVElPTlMsIEVMRU1fTkFNRSk7Ci0KLSAgLyoqCi0gICAqIEdldCB0eXBlLgotICAgKiBAcmV0dXJuIGFydGlmYWN0IHR5cGUuCi0gICAqIEBzZWUgI3NldFR5cGUKLSAgICovCi0gIHB1YmxpYyBBcnRpZmFjdFR5cGUgZ2V0VHlwZSgpOwotCi0gIC8qKgotICAgKiBTZXQgdHlwZS4KLSAgICogQHBhcmFtIHR5cGUgYW4gYXJ0aWZhY3QgdHlwZS4KLSAgICogQHNlZSAjZ2V0VHlwZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VHlwZShBcnRpZmFjdFR5cGUgdHlwZSk7Ci0KLSAgLyoqCi0gICAqIEdldCBzcGVjaWZpY2F0aW9uIGxpc3QuCi0gICAqIEByZXR1cm4gc3BlY2lmaWNhdGlvbiBsaXN0LgotICAgKiBAc2VlICNzZXRTcGVjaWZpY2F0aW9uTGlzdAotICAgKi8KLSAgcHVibGljIFZlY3RvciBnZXRTcGVjaWZpY2F0aW9uTGlzdCgpOwotCi0gIC8qKgotICAgKiBTZXQgc3BlY2lmaWNhdGlvbiBsaXN0LgotICAgKiBAcGFyYW0gc3BlY2lmaWNhdGlvbkxpc3Qgc3BlY2lmaWNhdGlvbiBsaXN0LgotICAgKiBAc2VlICNnZXRTcGVjaWZpY2F0aW9uTGlzdAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U3BlY2lmaWNhdGlvbkxpc3QoVmVjdG9yIHNwZWNpZmljYXRpb25MaXN0KTsKLQotICAvKioKLSAgICogR2V0IHRlc3QgYXNzZXJ0aW9uIGxpc3QuCi0gICAqIEByZXR1cm4gdGVzdCBhc3NlcnRpb24gbGlzdC4KLSAgICovCi0gIHB1YmxpYyBMaW5rZWRMaXN0IGdldFRlc3RBc3NlcnRpb25MaXN0KCk7Ci0KLSAgLyoqCi0gICAqIEdldCB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHBhcmFtIGlkIHRlc3QgYXNzZXJ0aW9uIGlkLgotICAgKiBAcmV0dXJuIHRlc3QgYXNzZXJ0aW9uLgotICAgKi8KLSAgcHVibGljIFRlc3RBc3NlcnRpb24gZ2V0VGVzdEFzc2VydGlvbihTdHJpbmcgaWQpOwotCi0gIC8qKgotICAgKiBBZGQgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBwYXJhbSB0ZXN0QXNzZXJ0aW9uIHRlc3QgYXNzZXJ0aW9uLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkVGVzdEFzc2VydGlvbihUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24pOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS9Qcm9maWxlQXNzZXJ0aW9ucy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS9Qcm9maWxlQXNzZXJ0aW9ucy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzY3NzYxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvUHJvZmlsZUFzc2VydGlvbnMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZTsKLQotaW1wb3J0IGphdmEudXRpbC5UcmVlTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuV1NJRG9jdW1lbnQ7Ci0KLS8qKgotICogVGhpcyBpbnRlcmZhY2UgbWFpbnRhaW5zIHByb2ZpbGUgYXNzZXJ0aW9ucy4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBQcm9maWxlQXNzZXJ0aW9ucyBleHRlbmRzIFdTSURvY3VtZW50Ci17Ci0gIC8qKgotICAgKiBFbGVtZW50IG5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX05BTUUgPSBXU0lDb25zdGFudHMuRUxFTV9QUk9GSUxFX0FTU0VSVElPTlM7Ci0KLSAgLyoqCi0gICAqIFFOYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBRTkFNRSA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NJX0FTU0VSVElPTlMsIEVMRU1fTkFNRSk7Ci0KLSAgLyoqCi0gICAqIEdldCBsaXN0IG9mIHByb2ZpbGVzLgotICAgKiBAcmV0dXJuIGxpc3Qgb2YgcHJvZmlsZXMuCi0gICAqIEBzZWUgI3NldFByb2ZpbGVMaXN0Ci0gICAqLwotICBwdWJsaWMgVmVjdG9yIGdldFByb2ZpbGVMaXN0KCk7Ci0KLSAgLyoqCi0gICAqIFNldCBsaXN0IG9mIHByb2ZpbGVzLgotICAgKiBAcGFyYW0gcHJvZmlsZUxpc3QgbGlzdCBvZiBwcm9maWxlcy4KLSAgICogQHNlZSAjZ2V0UHJvZmlsZUxpc3QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFByb2ZpbGVMaXN0KFZlY3RvciBwcm9maWxlTGlzdCk7Ci0KLSAgLyoqCi0gICAqIEFkZCBwcm9maWxlLgotICAgKiBAcGFyYW0gcHJvZmlsZSBwcm9maWxlLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkUHJvZmlsZShQcm9maWxlIHByb2ZpbGUpOwotCi0gIC8qKgotICAgKiBHZXQgbGlzdCBvZiBhcnRpZmFjdHMuCi0gICAqIEByZXR1cm4gbGlzdCBvZiBhcnRpZmFjdHMuCi0gICAqIEBzZWUgI3NldEFydGlmYWN0TGlzdAotICAgKi8KLSAgcHVibGljIFRyZWVNYXAgZ2V0QXJ0aWZhY3RMaXN0KCk7Ci0KLSAgLyoqCi0gICAqIEdldCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHR5cGUgYW4gYXJ0aWZhY3QgdHlwZS4KLSAgICogQHJldHVybiBhIHByb2ZpbGUgYXJ0aWZhY3QgYmFzZWQgb24gdGhlIGdpdmVuIHR5cGUuCi0gICAqLwotICBwdWJsaWMgUHJvZmlsZUFydGlmYWN0IGdldEFydGlmYWN0KFN0cmluZyB0eXBlKTsKLQotICAvKioKLSAgICogU2V0IGxpc3Qgb2YgYXJ0aWZhY3RzLgotICAgKiBAcGFyYW0gYXJ0aWZhY3RMaXN0IGEgbGlzdCBwZiBwcm9maWxlIGFydGlmaWFjdHMuCi0gICAqIEBzZWUgI2dldEFydGlmYWN0TGlzdAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0QXJ0aWZhY3RMaXN0KFRyZWVNYXAgYXJ0aWZhY3RMaXN0KTsKLQotICAvKioKLSAgICogQWRkIGFydGlmYWN0LgotICAgKiBAcGFyYW0gYXJ0aWZhY3QgcHJvZmlsZSBhcnRpZmFjdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEFydGlmYWN0KFByb2ZpbGVBcnRpZmFjdCBhcnRpZmFjdCk7Ci0KLSAgLyoqCi0gICAqIEdldCB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHBhcmFtIGlkIHRlc3QgYXNzZXJ0aW9uIGlkLgotICAgKiBAcmV0dXJuIHRlc3QgYXNzZXJ0aW9uLgotICAgKi8KLSAgcHVibGljIFRlc3RBc3NlcnRpb24gZ2V0VGVzdEFzc2VydGlvbihTdHJpbmcgaWQpOwotCi0gIC8qKgotICAgKiBDcmVhdGUgYXJ0aWZhY3QuCi0gICAqIEByZXR1cm4gbmV3bHkgY3JlYXRlZCBwcm9maWxlIGFydGlmYWN0LgotICAgKi8KLSAgcHVibGljIFByb2ZpbGVBcnRpZmFjdCBjcmVhdGVBcnRpZmFjdCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBwcm9maWxlIHRlc3QgYXNzZXJ0aW9uIGRvY3VtZW50LgotICAgKiBAcmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBkb2N1bWVudC4gCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFRBRE5hbWUoKTsKLQotICAvKioKLSAgICogU2V0IHRoZSBuYW1lIG9mIHRoZSBwcm9maWxlIHRlc3QgYXNzZXJ0aW9uIGRvY3VtZW50LgotICAgKiBAcGFyYW0gZG9jdW1lbnROYW1lIHRoZSBuYW1lIG9mIHRoZSBkb2N1bWVudC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFRBRE5hbWUoU3RyaW5nIGRvY3VtZW50TmFtZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZlcnNpb24gb2YgdGhlIHByb2ZpbGUgdGVzdCBhc3NlcnRpb24gZG9jdW1lbnQuCi0gICAqIEByZXR1cm4gdGhlIHZlcnNpb24gb2YgdGhlIGRvY3VtZW50LgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRUQURWZXJzaW9uKCk7Ci0KLSAgLyoqCi0gICAqIFNldCB0aGUgdmVyc2lvbiBvZiB0aGUgcHJvZmlsZSB0ZXN0IGFzc2VydGlvbiBkb2N1bWVudC4KLSAgICogQHBhcmFtIGRvY3VtZW50VmVyc2lvbiB0aGUgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRUQURWZXJzaW9uKFN0cmluZyBkb2N1bWVudFZlcnNpb24pOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS9Qcm9maWxlQXNzZXJ0aW9uc1JlYWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS9Qcm9maWxlQXNzZXJ0aW9uc1JlYWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMGIwYTNkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvUHJvZmlsZUFzc2VydGlvbnNSZWFkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlOwotCi1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudFJlYWRlcjsKLQotLyoqCi0gKiBEZWZpbmVzIHRoZSBpbnRlcmZhY2UgdXNlZCB0byByZWFkIGEgcHJvZmlsZSBhc3NlcnRpb25zIGRvY3VtZW50cy4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIFByb2ZpbGVBc3NlcnRpb25zUmVhZGVyIGV4dGVuZHMgRG9jdW1lbnRSZWFkZXIKLXsKLSAgLyoqCi0gICAqIFJlYWQgdGhlIHByb2ZpbGUgYXNzZXJ0aW9ucyBmaWxlLgotICAgKiBAcGFyYW0gYXNzZXJ0aW9uc1VSSSBoZSBwcm9maWxlIGFzc2VydGlvbnMgZmlsZSBsb2NhdGlvbi4KLSAgICogQHJldHVybiB0aGUgUHJvZmlsZUFzc2VydGlvbnMgb2JqZWN0LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtIG9jY3VyIHdoaWxlIHJlYWRpbmcgdGhlIGZpbGUuCi0gICAqLwotICBwdWJsaWMgUHJvZmlsZUFzc2VydGlvbnMgcmVhZFByb2ZpbGVBc3NlcnRpb25zKFN0cmluZyBhc3NlcnRpb25zVVJJKQotICAgIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIFJlYWQgdGhlIHByb2ZpbGUgYXNzZXJ0aW9ucyAgZmlsZS4KLSAgICogQHBhcmFtIHJlYWRlciBhIFJlYWRlciBvYmplY3QuCi0gICAqIEByZXR1cm4gdGhlIFByb2ZpbGVBc3NlcnRpb25zIG9iamVjdC4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gIGlmIHByb2JsZW0gb2NjdXIgd2hpbGUgcmVhZGluZyB0aGUgZmlsZS4KLSAgICovCi0gIHB1YmxpYyBQcm9maWxlQXNzZXJ0aW9ucyByZWFkUHJvZmlsZUFzc2VydGlvbnMoUmVhZGVyIHJlYWRlcikKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS9UZXN0QXNzZXJ0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL1Rlc3RBc3NlcnRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBlYTRiNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL1Rlc3RBc3NlcnRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZTsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLS8qKgotICogQSB0ZXN0IGFzc2VydGlvbiBpcyBvbmUgYXNzZXJ0aW9uIGluIGEgcHJvZmlsZSBkZWZpbml0aW9uLgotICoKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBUZXN0QXNzZXJ0aW9uCi17Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfSU5GT1JNQVRJT05BTCA9ICJpbmZvcm1hdGlvbmFsIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9SRUNPTU1FTkRFRCA9ICJyZWNvbW1lbmRlZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfUkVRVUlSRUQgPSAicmVxdWlyZWQiOwotICAvKioKLSAgICogR2V0IHRlc3QgYXNzZXJ0aW9uIGlkLgotICAgKiBAcmV0dXJuIHRlc3QgYXNzZXJ0aW9uIGlkLgotICAgKiBAc2VlICNzZXRJZAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRJZCgpOwotCi0gIC8qKgotICAgKiBTZXQgdGVzdCBhc3NlcnRpb24gaWQuCi0gICAqIEBwYXJhbSBpZCB0ZXN0IGFzc2VydGlvbiBpZC4KLSAgICogQHNlZSAjZ2V0SWQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldElkKFN0cmluZyBpZCk7Ci0KLSAgLyoqCi0gICAqIEdldCB0ZXN0IGFzc2VydGlvbiB0eXBlLgotICAgKiBAcmV0dXJuIHRlc3QgYXNzZXJ0aW9uIHR5cGUuCi0gICAqIEBzZWUgI3NldFR5cGUKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VHlwZSgpOwotCi0gIC8qKgotICAgKiBTZXQgdGVzdCBhc3NlcnRpb24gdHlwZS4KLSAgICogQHBhcmFtICB0eXBlIHRlc3QgYXNzZXJ0aW9uIHR5cGUuCi0gICAqIEBzZWUgI2dldFR5cGUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFR5cGUoU3RyaW5nIHR5cGUpOwotCi0gIC8qKgotICAgKiBHZXQgdGVzdCBhc3NlcnRpb24gcHJpbWFyeSBlbnRyeSB0eXBlIG5hbWUuCi0gICAqIEByZXR1cm4gdGVzdCBhc3NlcnRpb24gcHJpbWFyeSBlbnRyeSB0eXBlIG5hbWUuCi0gICAqIEBzZWUgI3NldEVudHJ5VHlwZU5hbWUKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RW50cnlUeXBlTmFtZSgpOwotCi0gIC8qKgotICAgKiBTZXQgdGVzdCBhc3NlcnRpb24gcHJpbWFyeSBlbnRyeSB0eXBlIG5hbWUuCi0gICAqIEBwYXJhbSBlbnRyeVR5cGVOYW1lIHRlc3QgYXNzZXJ0aW9uIHByaW1hcnkgZW50cnkgdHlwZSBuYW1lLgotICAgKiBAc2VlICNnZXRFbnRyeVR5cGVOYW1lCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFbnRyeVR5cGVOYW1lKFN0cmluZyBlbnRyeVR5cGVOYW1lKTsKLQotICAvKioKLSAgICogR2V0IGVuYWJsZWQgaW5kaWNhdG9yLgotICAgKiBAcmV0dXJuIGVuYWJsZWQgaW5kaWNhdG9yLgotICAgKiBAc2VlICNzZXRFbmFibGVkCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoKTsKLQotICAvKioKLSAgICogU2V0ICBlbmFibGVkIGluZGljYXRvci4KLSAgICogQHBhcmFtIGVuYWJsZWQgZW5hYmxlZCBpbmRpY2F0b3IuCi0gICAqIEBzZWUgI2lzRW5hYmxlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RW5hYmxlZChib29sZWFuIGVuYWJsZWQpOwotCi0gIC8qKgotICAgKiBHZXQgY29udGV4dC4KLSAgICogQHJldHVybiBjb250ZXh0LgotICAgKiBAc2VlICNzZXRDb250ZXh0Ci0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldENvbnRleHQoKTsKLQotICAvKioKLSAgICogU2V0IGNvbnRleHQuCi0gICAqIEBwYXJhbSBjb250ZXh0IGNvbnRleHQuCi0gICAqIEBzZWUgI2dldENvbnRleHQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldENvbnRleHQoU3RyaW5nIGNvbnRleHQpOwotCi0gIC8qKgotICAgKiBHZXQgYXNzZXJ0aW9uIGRlc2NyaXB0aW9uLgotICAgKiBAcmV0dXJuIGFzc2VydGlvbiBkZXNjcmlwdGlvbi4KLSAgICogQHNlZSAjc2V0QXNzZXJ0aW9uRGVzY3JpcHRpb24KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0QXNzZXJ0aW9uRGVzY3JpcHRpb24oKTsKLQotICAvKioKLSAgICogU2V0IGFzc2VydGlvbiBkZXNjcmlwdGlvbi4KLSAgICogQHBhcmFtIGFzc2VydGlvbkRlc2NyaXB0aW9uIGFzc2VydGlvbiBkZXNjcmlwdGlvbi4KLSAgICogQHNlZSAjZ2V0QXNzZXJ0aW9uRGVzY3JpcHRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEFzc2VydGlvbkRlc2NyaXB0aW9uKFN0cmluZyBhc3NlcnRpb25EZXNjcmlwdGlvbik7Ci0KLSAgLyoqCi0gICAqIEdldCBmYWlsdXJlIG1lc3NhZ2UuCi0gICAqIEByZXR1cm4gZmFpbHVyZSBtZXNzYWdlLgotICAgKiBAc2VlICNzZXRGYWlsdXJlTWVzc2FnZQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRGYWlsdXJlTWVzc2FnZSgpOwotCi0gIC8qKgotICAgKiBTZXQgZmFpbHVyZSBtZXNzYWdlLgotICAgKiBAcGFyYW0gZmFpbHVyZU1lc3NhZ2UgZmFpbHVyZSBtZXNzYWdlLgotICAgKiBAc2VlICNnZXRGYWlsdXJlTWVzc2FnZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RmFpbHVyZU1lc3NhZ2UoU3RyaW5nIGZhaWx1cmVNZXNzYWdlKTsKLQotICAvKioKLSAgICogR2V0IGZhaWx1cmUgZGV0YWlsIGRlc2NyaXB0aW9uLgotICAgKiBAcmV0dXJuIGZhaWx1cmUgZGV0YWlsIGRlc2NyaXB0aW9uLgotICAgKiBAc2VlICNzZXRGYWlsdXJlRGV0YWlsRGVzY3JpcHRpb24KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RmFpbHVyZURldGFpbERlc2NyaXB0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBmYWlsdXJlIGRldGFpbCBkZXNjcmlwdGlvbi4KLSAgICogQHBhcmFtIGZhaWx1cmVEZXRhaWxEZXNjcmlwdGlvbiBmYWlsdXJlIGRldGFpbCBkZXNjcmlwdGlvbi4KLSAgICogQHNlZSAjZ2V0RmFpbHVyZURldGFpbERlc2NyaXB0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRGYWlsdXJlRGV0YWlsRGVzY3JpcHRpb24oU3RyaW5nIGZhaWx1cmVEZXRhaWxEZXNjcmlwdGlvbik7Ci0KLSAgLyoqCi0gICAqIEdldCBkZXRhaWwgZGVzY3JpcHRpb24uCi0gICAqIEByZXR1cm4gZGV0YWlsIGRlc2NyaXB0aW9uLgotICAgKiBAc2VlICNzZXREZXRhaWxEZXNjcmlwdGlvbgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXREZXRhaWxEZXNjcmlwdGlvbigpOwotCi0gIC8qKgotICAgKiBTZXQgZGV0YWlsIGRlc2NyaXB0aW9uLgotICAgKiBAcGFyYW0gZGV0YWlsRGVzY3JpcHRpb24gZGV0YWlsIGRlc2NyaXB0aW9uLgotICAgKiBAc2VlICNnZXREZXRhaWxEZXNjcmlwdGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RGV0YWlsRGVzY3JpcHRpb24oU3RyaW5nIGRldGFpbERlc2NyaXB0aW9uKTsKLQotICAvKioKLSAgICogR2V0IGFkZGl0aW9uYWwgZW50cnkgdHlwZSBsaXN0LgotICAgKiBAcmV0dXJuIGFkZGl0aW9uYWwgZW50cnkgdHlwZSBsaXN0LgotICAgKiBAc2VlICNzZXRBZGRpdGlvbmFsRW50cnlUeXBlTGlzdAotICAgKi8KLSAgcHVibGljIEVudHJ5VHlwZUxpc3QgZ2V0QWRkaXRpb25hbEVudHJ5VHlwZUxpc3QoKTsKLQotICAvKioKLSAgICogU2V0IGFkZGl0aW9uYWwgZW50cnkgdHlwZSBsaXN0LgotICAgKiBAcGFyYW0gZW50cnlUeXBlTGlzdCBhZGRpdGlvbmFsIGVudHJ5IHR5cGUgbGlzdC4KLSAgICogQHNlZSAjZ2V0QWRkaXRpb25hbEVudHJ5VHlwZUxpc3QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEFkZGl0aW9uYWxFbnRyeVR5cGVMaXN0KEVudHJ5VHlwZUxpc3QgZW50cnlUeXBlTGlzdCk7Ci0KLSAgLyoqCi0gICAqIEdldCBsaXN0IG9mIHByZXJlcSBpZHMuCi0gICAqIEByZXR1cm4gbGlzdCBvZiBwcmVyZXEgaWRzLgotICAgKi8KLSAgcHVibGljIFZlY3RvciBnZXRQcmVyZXFJZExpc3QoKTsKLQotICAvKioKLSAgICogQWRkIHByZXJlcSB0ZXN0IGFzc2VydGlvbiBpZC4KLSAgICogQHBhcmFtICBwcmVyZXFJZCBwcmVyZXEgdGVzdCBhc3NlcnRpb24gaWQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRQcmVyZXFJZChTdHJpbmcgcHJlcmVxSWQpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS9pbXBsL0VudHJ5VHlwZUxpc3RJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL2ltcGwvRW50cnlUeXBlTGlzdEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQ4MWYyZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL2ltcGwvRW50cnlUeXBlTGlzdEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLmltcGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5FbnRyeVR5cGVMaXN0OwotCi0vKioKLSAqIFRoaXMgaW1wbGVtZW50YXRpb24gaXMgdXNlZCB0byBtYWludGFpbiBhIHByb2ZpbGUgRW50cnlUeXBlTGlzdC4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIEVudHJ5VHlwZUxpc3RJbXBsIGltcGxlbWVudHMgRW50cnlUeXBlTGlzdAotewotICAvKioKLSAgICogTG9nIGlucHV0LgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBsb2dJbnB1dCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFdTREwgaW5wdXQuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIHdzZGxJbnB1dCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFVEREkgaW5wdXQuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIHVkZGlJbnB1dCA9IG51bGw7Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLkVudHJ5VHlwZUxpc3QjZ2V0TG9nSW5wdXQoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRMb2dJbnB1dCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5sb2dJbnB1dDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS5FbnRyeVR5cGVMaXN0I3NldExvZ0lucHV0KFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExvZ0lucHV0KFN0cmluZyBsb2dJbnB1dCkKLSAgewotICAgIHRoaXMubG9nSW5wdXQgPSBsb2dJbnB1dDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS5FbnRyeVR5cGVMaXN0I2dldFdTRExJbnB1dCgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFdTRExJbnB1dCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy53c2RsSW5wdXQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuRW50cnlUeXBlTGlzdCNzZXRXU0RMSW5wdXQoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0V1NETElucHV0KFN0cmluZyB3c2RsSW5wdXQpCi0gIHsKLSAgICB0aGlzLndzZGxJbnB1dCA9IHdzZGxJbnB1dDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS5FbnRyeVR5cGVMaXN0I2dldFVERElJbnB1dCgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFVERElJbnB1dCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy51ZGRpSW5wdXQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuRW50cnlUeXBlTGlzdCNzZXRVRERJSW5wdXQoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VURESUlucHV0KFN0cmluZyB1ZGRpSW5wdXQpCi0gIHsKLSAgICB0aGlzLnVkZGlJbnB1dCA9IHVkZGlJbnB1dDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50I3RvWE1MU3RyaW5nKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9YTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL2ltcGwvUHJvZmlsZUFydGlmYWN0SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS9pbXBsL1Byb2ZpbGVBcnRpZmFjdEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjRhYjNiZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL2ltcGwvUHJvZmlsZUFydGlmYWN0SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLmltcGw7Ci0KLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwotaW1wb3J0IGphdmEudXRpbC5UcmVlTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5Qcm9maWxlQXJ0aWZhY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5BcnRpZmFjdFR5cGU7Ci0KLS8qKgotICogQW4gYXJ0aWZhY3QgY29udGFpbnMgYSBzZXQgb2YgcmVsYXRlZCB0ZXN0IGFzc2VydGlvbnMuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBQcm9maWxlQXJ0aWZhY3RJbXBsIGltcGxlbWVudHMgUHJvZmlsZUFydGlmYWN0Ci17Ci0gIC8qKgotICAgKiBBcnRpZmFjdCB0eXBlLgotICAgKi8KLSAgcHJvdGVjdGVkIEFydGlmYWN0VHlwZSB0eXBlOwotCi0gIC8qKgotICAgKiBUZXN0IGFzc2VydGlvbiBtYXAuCi0gICAqLwotICBwcm90ZWN0ZWQgVHJlZU1hcCB0ZXN0QXNzZXJ0aW9uTWFwID0gbmV3IFRyZWVNYXAoKTsKLQotICAvKioKLSAgICogVGVzdCBhc3NlcnRpb24gbGlzdC4KLSAgICovCi0gIHByb3RlY3RlZCBMaW5rZWRMaXN0IHRlc3RBc3NlcnRpb25MaXN0ID0gbmV3IExpbmtlZExpc3QoKTsKLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuUmVwb3J0QXJ0aWZhY3QjZ2V0VHlwZSgpCi0gICAqLwotICBwdWJsaWMgQXJ0aWZhY3RUeXBlIGdldFR5cGUoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMudHlwZTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS5SZXBvcnRBcnRpZmFjdCNzZXRUeXBlKEFydGlmYWN0VHlwZSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFR5cGUoQXJ0aWZhY3RUeXBlIHR5cGUpCi0gIHsKLSAgICB0aGlzLnR5cGUgPSB0eXBlOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlJlcG9ydEFydGlmYWN0I2dldFNwZWNpZmljYXRpb25MaXN0KCkKLSAgICovCi0gIHB1YmxpYyBWZWN0b3IgZ2V0U3BlY2lmaWNhdGlvbkxpc3QoKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuUmVwb3J0QXJ0aWZhY3Qjc2V0U3BlY2lmaWNhdGlvbkxpc3QoVmVjdG9yKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U3BlY2lmaWNhdGlvbkxpc3QoVmVjdG9yIHNwZWNpZmljYXRpb25MaXN0KQotICB7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuUmVwb3J0QXJ0aWZhY3QjZ2V0VGVzdEFzc2VydGlvbkxpc3QoKQotICAgKi8KLSAgcHVibGljIExpbmtlZExpc3QgZ2V0VGVzdEFzc2VydGlvbkxpc3QoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMudGVzdEFzc2VydGlvbkxpc3Q7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuUmVwb3J0QXJ0aWZhY3QjZ2V0VGVzdEFzc2VydGlvbihTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgVGVzdEFzc2VydGlvbiBnZXRUZXN0QXNzZXJ0aW9uKFN0cmluZyBpZCkKLSAgewotICAgIHJldHVybiAoVGVzdEFzc2VydGlvbikgdGhpcy50ZXN0QXNzZXJ0aW9uTWFwLmdldChpZCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuUmVwb3J0QXJ0aWZhY3QjYWRkVGVzdEFzc2VydGlvbihUZXN0QXNzZXJ0aW9uKQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkVGVzdEFzc2VydGlvbihUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24pCi0gIHsKLSAgICAvLyBBREQ6IE5lZWQgdG8gbWVyZ2UgdGhlIGxpc3QgYW5kIG1hcAotICAgIHRoaXMudGVzdEFzc2VydGlvbk1hcC5wdXQodGVzdEFzc2VydGlvbi5nZXRJZCgpLCB0ZXN0QXNzZXJ0aW9uKTsKLSAgICB0aGlzLnRlc3RBc3NlcnRpb25MaXN0LmFkZCh0ZXN0QXNzZXJ0aW9uKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50I3RvWE1MU3RyaW5nKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9YTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgU3RyaW5nIG5zTmFtZSA9IG5hbWVzcGFjZU5hbWU7Ci0gICAgaWYgKCghbnNOYW1lLmVxdWFscygiIikgJiYgKCFuc05hbWUuZW5kc1dpdGgoIjoiKSkpKQotICAgICAgbnNOYW1lICs9ICI6IjsKLQotICAgIC8vIFJlcG9ydEFydGlmYWN0Ci0gICAgcHcucHJpbnRsbigiICAgICAgPCIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiPiIpOwotCi0gICAgcHcucHJpbnRsbigiICAgICAgPC8iICsgbnNOYW1lICsgRUxFTV9OQU1FICsgIj4iKTsKLQotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvaW1wbC9Qcm9maWxlQXNzZXJ0aW9uc0ltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvaW1wbC9Qcm9maWxlQXNzZXJ0aW9uc0ltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmM4MTQxOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL2ltcGwvUHJvZmlsZUFzc2VydGlvbnNJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuaW1wbDsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuVHJlZU1hcDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuUHJvZmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5Qcm9maWxlQXJ0aWZhY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuUHJvZmlsZUFzc2VydGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIC4uLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgUHJvZmlsZUFzc2VydGlvbnNJbXBsIGltcGxlbWVudHMgUHJvZmlsZUFzc2VydGlvbnMKLXsKLSAgLyoqCi0gICAqIExvY2F0aW9uIG9mIHRoZSBwcm9maWxlIGRlZmluaXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGRvY3VtZW50VVJJOwotCi0gIC8qKgotICAgKiBOYW1lIG9mIHRoZSBwcm9maWxlIHRlc3QgYXNzZXJ0aW9uIGRvY3VtZW50LgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBkb2N1bWVudE5hbWU7Ci0KLSAgLyoqCi0gICAqIFZlcnNpb24gb2YgdGhlIHByb2ZpbGUgdGVzdCBhc3NlcnRpb24gZG9jdW1lbnQuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGRvY3VtZW50VmVyc2lvbjsKLQotICAvLyBBREQ6IEEgcHJvZmlsZSBkZWZpbml0aW9uIHNob3VsZCBhbHNvIGhhdmUgYSBkZXNjcmlwdGlvbi4KLQotICAvKioKLSAgICogTGlzdCBvZiBwcm9maWxlcy4KLSAgICovCi0gIFZlY3RvciBwcm9maWxlTGlzdCA9IG5ldyBWZWN0b3IoKTsKLQotICAvKioKLSAgICogTGlzdCBvZiBhcnRpZmFjdHMuCi0gICAqLwotICBUcmVlTWFwIGFydGlmYWN0TGlzdCA9IG5ldyBUcmVlTWFwKCk7Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlByb2ZpbGVBc3NlcnRpb25zI2dldFByb2ZpbGVMaXN0KCkKLSAgICovCi0gIHB1YmxpYyBWZWN0b3IgZ2V0UHJvZmlsZUxpc3QoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMucHJvZmlsZUxpc3Q7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuUHJvZmlsZUFzc2VydGlvbnMjc2V0UHJvZmlsZUxpc3QoVmVjdG9yKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UHJvZmlsZUxpc3QoVmVjdG9yIHByb2ZpbGVMaXN0KQotICB7Ci0gICAgdGhpcy5wcm9maWxlTGlzdCA9IHByb2ZpbGVMaXN0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlByb2ZpbGVBc3NlcnRpb25zI2FkZFByb2ZpbGUoUHJvZmlsZSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZFByb2ZpbGUoUHJvZmlsZSBwcm9maWxlKQotICB7Ci0gICAgdGhpcy5wcm9maWxlTGlzdC5hZGQocHJvZmlsZSk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuUHJvZmlsZUFzc2VydGlvbnMjZ2V0QXJ0aWZhY3RMaXN0KCkKLSAgICovCi0gIHB1YmxpYyBUcmVlTWFwIGdldEFydGlmYWN0TGlzdCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5hcnRpZmFjdExpc3Q7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuUHJvZmlsZUFzc2VydGlvbnMjZ2V0QXJ0aWZhY3QoamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyBQcm9maWxlQXJ0aWZhY3QgZ2V0QXJ0aWZhY3QoU3RyaW5nIHR5cGUpCi0gIHsKLSAgICByZXR1cm4gKFByb2ZpbGVBcnRpZmFjdCkgdGhpcy5hcnRpZmFjdExpc3QuZ2V0KHR5cGUpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlByb2ZpbGVBc3NlcnRpb25zI3NldEFydGlmYWN0TGlzdChUcmVlTWFwKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0QXJ0aWZhY3RMaXN0KFRyZWVNYXAgYXJ0aWZhY3RMaXN0KQotICB7Ci0gICAgdGhpcy5hcnRpZmFjdExpc3QgPSBhcnRpZmFjdExpc3Q7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuUHJvZmlsZUFzc2VydGlvbnMjYWRkQXJ0aWZhY3QoUmVwb3J0QXJ0aWZhY3QpCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRBcnRpZmFjdChQcm9maWxlQXJ0aWZhY3QgYXJ0aWZhY3QpCi0gIHsKLSAgICB0aGlzLmFydGlmYWN0TGlzdC5wdXQoYXJ0aWZhY3QuZ2V0VHlwZSgpLCBhcnRpZmFjdCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuUHJvZmlsZUFzc2VydGlvbnMjZ2V0VGVzdEFzc2VydGlvbihTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgVGVzdEFzc2VydGlvbiBnZXRUZXN0QXNzZXJ0aW9uKFN0cmluZyBpZCkKLSAgewotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiA9IG51bGw7Ci0KLSAgICAvLyBHbyB0aHJvdWdoIHRoZSBsaXN0IG9mIGFydGlmYWN0cyBhbmQgZmluZCB0aGUgdGVzdCBhc3NlcnRpb24gCi0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBhcnRpZmFjdExpc3QudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoKGl0ZXJhdG9yLmhhc05leHQoKSkgJiYgKHRlc3RBc3NlcnRpb24gPT0gbnVsbCkpCi0gICAgewotICAgICAgdGVzdEFzc2VydGlvbiA9ICgoUHJvZmlsZUFydGlmYWN0KSBpdGVyYXRvci5uZXh0KCkpLmdldFRlc3RBc3NlcnRpb24oaWQpOwotICAgIH0KLQotICAgIHJldHVybiB0ZXN0QXNzZXJ0aW9uOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlByb2ZpbGVBc3NlcnRpb25zI2NyZWF0ZUFydGlmYWN0KCkKLSAgICovCi0gIHB1YmxpYyBQcm9maWxlQXJ0aWZhY3QgY3JlYXRlQXJ0aWZhY3QoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBQcm9maWxlQXJ0aWZhY3RJbXBsKCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LldTSURvY3VtZW50I2dldExvY2F0aW9uKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9jYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRVUkk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LldTSURvY3VtZW50I3NldExvY2F0aW9uKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExvY2F0aW9uKFN0cmluZyBkb2N1bWVudFVSSSkKLSAgewotICAgIHRoaXMuZG9jdW1lbnRVUkkgPSBkb2N1bWVudFVSSTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlByb2ZpbGVBc3NlcnRpb25zI2dldFRBRE5hbWUoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRUQUROYW1lKCkKLSAgewotICAgIHJldHVybiB0aGlzLmRvY3VtZW50TmFtZTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlByb2ZpbGVBc3NlcnRpb25zI3NldFRBRE5hbWUoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VEFETmFtZShTdHJpbmcgZG9jdW1lbnROYW1lKQotICB7Ci0gICAgdGhpcy5kb2N1bWVudE5hbWUgPSBkb2N1bWVudE5hbWU7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5Qcm9maWxlQXNzZXJ0aW9ucyNnZXRUQURWZXJzaW9uKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VEFEVmVyc2lvbigpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5kb2N1bWVudFZlcnNpb247Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5Qcm9maWxlQXNzZXJ0aW9ucyNzZXRUQURWZXJzaW9uKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFRBRFZlcnNpb24oU3RyaW5nIGRvY3VtZW50VmVyc2lvbikKLSAgewotICAgIHRoaXMuZG9jdW1lbnRWZXJzaW9uID0gZG9jdW1lbnRWZXJzaW9uOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQjdG9YTUxTdHJpbmcoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1hNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSkKLSAgewotICAgIHJldHVybiBudWxsOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL2ltcGwvUHJvZmlsZUFzc2VydGlvbnNSZWFkZXJJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL2ltcGwvUHJvZmlsZUFzc2VydGlvbnNSZWFkZXJJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmZTBkYmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS9pbXBsL1Byb2ZpbGVBc3NlcnRpb25zUmVhZGVySW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTg2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLmltcGw7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlRyZWVNYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyLmludGVybmFsLnByb3Zpc2lvbmFsLlVSSVJlc29sdmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuV1NJVGVzdFRvb2xzRWNsaXBzZVByb3BlcnRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5XU0lUZXN0VG9vbHNQcm9wZXJ0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5FbnRyeVR5cGVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlByb2ZpbGVBcnRpZmFjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5Qcm9maWxlQXNzZXJ0aW9uczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5Qcm9maWxlQXNzZXJ0aW9uc1JlYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkFydGlmYWN0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5VdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy54bWwuc2F4LkF0dHJpYnV0ZXM7Ci1pbXBvcnQgb3JnLnhtbC5zYXguRW50aXR5UmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLnhtbC5zYXguSW5wdXRTb3VyY2U7Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uOwotaW1wb3J0IG9yZy54bWwuc2F4LlhNTFJlYWRlcjsKLWltcG9ydCBvcmcueG1sLnNheC5oZWxwZXJzLkRlZmF1bHRIYW5kbGVyOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgLi4uCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBQcm9maWxlQXNzZXJ0aW9uc1JlYWRlckltcGwgaW1wbGVtZW50cyBQcm9maWxlQXNzZXJ0aW9uc1JlYWRlcgotewotICAvKioKLSAgICogUHJvZmlsZSBhc3NlcnRpb25zLgotICAgKi8KLSAgcHJvdGVjdGVkIFByb2ZpbGVBc3NlcnRpb25zIHByb2ZpbGVBc3NlcnRpb25zOwotCi0gIC8qKgotICAgKiBSZXBvcnRBcnRpZmFjdCBsaXN0LgotICAgKi8KLSAgcHJvdGVjdGVkIFRyZWVNYXAgYXJ0aWZhY3RMaXN0ID0gbmV3IFRyZWVNYXAoKTsKLQotICAvKioKLSAgICogQ3JlYXRlIG5ldyByZWFkZXIuCi0gICAqLwotICBwdWJsaWMgUHJvZmlsZUFzc2VydGlvbnNSZWFkZXJJbXBsKCkKLSAgewotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlByb2ZpbGVBc3NlcnRpb25zUmVhZGVyI3JlYWRQcm9maWxlQXNzZXJ0aW9ucyhTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgUHJvZmlsZUFzc2VydGlvbnMgcmVhZFByb2ZpbGVBc3NlcnRpb25zKFN0cmluZyBhc3NlcnRpb25zVVJJKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJldHVybiByZWFkUHJvZmlsZUFzc2VydGlvbnMobmV3IElucHV0U291cmNlKGFzc2VydGlvbnNVUkkpKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS5Qcm9maWxlQXNzZXJ0aW9uc1JlYWRlciNyZWFkUHJvZmlsZUFzc2VydGlvbnMoUmVhZGVyKQotICAgKi8KLSAgcHVibGljIFByb2ZpbGVBc3NlcnRpb25zIHJlYWRQcm9maWxlQXNzZXJ0aW9ucyhSZWFkZXIgcmVhZGVyKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJldHVybiByZWFkUHJvZmlsZUFzc2VydGlvbnMobmV3IElucHV0U291cmNlKHJlYWRlcikpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlYWQgcHJvZmlsZSBhc3NlcnRpb25zLgotICAgKi8KLSAgcHJpdmF0ZSBQcm9maWxlQXNzZXJ0aW9ucyByZWFkUHJvZmlsZUFzc2VydGlvbnMoSW5wdXRTb3VyY2UgaW5wdXRTb3VyY2UpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gQ3JlYXRlIHByb2ZpbGUgYXNzZXJ0aW9ucwotICAgIHByb2ZpbGVBc3NlcnRpb25zID0gbmV3IFByb2ZpbGVBc3NlcnRpb25zSW1wbCgpOwotCi0gICAgLy8gUHJvZmlsZSBwYXJ0cyBhcmUgcHV0IGludG8gYSB2ZWN0b3IKLSAgICBhcnRpZmFjdExpc3QgPSBuZXcgVHJlZU1hcCgpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gQ3JlYXRlIHhtbCByZWFkZXIKLSAgICAgIFhNTFJlYWRlciByZWFkZXIgPSBYTUxVdGlscy5nZXRYTUxSZWFkZXIoKTsKLQotICAgICAgLy8gU2V0IGNvbnRlbnQgaGFuZGxlciB0byBpbm5lciBjbGFzcwotICAgICAgcmVhZGVyLnNldENvbnRlbnRIYW5kbGVyKG5ldyBQcm9maWxlQXNzZXJ0aW9uc0hhbmRsZXIoKSk7Ci0gICAgICAKLSAgICAgIGlmKFdTSVRlc3RUb29sc1Byb3BlcnRpZXMuZ2V0RWNsaXBzZUNvbnRleHQoKSkKLSAgICAgIHsKLSAgICAJICBFbnRpdHlSZXNvbHZlciByZXNvbHZlciA9IG5ldyBFbnRpdHlSZXNvbHZlcigpewotCi0JCQlwdWJsaWMgSW5wdXRTb3VyY2UgcmVzb2x2ZUVudGl0eShTdHJpbmcgcHVibGljSWQsIFN0cmluZyBzeXN0ZW1JZCkgdGhyb3dzIFNBWEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQkJCVVSSVJlc29sdmVyIHJlc29sdmVyID0gV1NJVGVzdFRvb2xzRWNsaXBzZVByb3BlcnRpZXMuZ2V0VVJJUmVzb2x2ZXIoKTsKLQkJCQlTdHJpbmcgdXJpID0gcmVzb2x2ZXIucmVzb2x2ZSgiIiwgcHVibGljSWQsIHN5c3RlbUlkKTsKLQkJCQlTdHJpbmcgcGh5c2ljYWxMb2NhdGlvbiA9IHJlc29sdmVyLnJlc29sdmVQaHlzaWNhbExvY2F0aW9uKCIiLCBwdWJsaWNJZCwgdXJpKTsKLQkJCQlJbnB1dFNvdXJjZSBpcyA9IG51bGw7Ci0JCQkJdHJ5Ci0JCQkJewotCQkJCQlVUkwgdXJsID0gbmV3IFVSTChwaHlzaWNhbExvY2F0aW9uKTsKLQkJCQkJaXMgPSBuZXcgSW5wdXRTb3VyY2UodXJpKTsKLQkJCQkJaXMuc2V0Qnl0ZVN0cmVhbSh1cmwub3BlblN0cmVhbSgpKTsKLQkJCQl9Ci0JCQkJY2F0Y2goRXhjZXB0aW9uIGUpCi0JCQkJewotCQkJCQkvLyBEbyBub3RoaW5nIGlmIG9wZW5pbmcgdGhlIHN0cmVhbSBmYWlscy4KLQkJCQl9Ci0JCQkJcmV0dXJuIGlzOwotCQkJfQotICAgIAkJICAKLSAgICAJICB9OwotICAgIAkgIHJlYWRlci5zZXRFbnRpdHlSZXNvbHZlcihyZXNvbHZlcik7Ci0gICAgICB9Ci0gICAgICAvLyBQYXJzZSBwcm9maWxlIGRlZmluaXRpb24gZmlsZQotICAgICAgcmVhZGVyLnBhcnNlKGlucHV0U291cmNlKTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigiQ291bGQgbm90IHJlYWQgYW5kIHBhcnNlIHByb2ZpbGUgZGVmaW5pdGlvbi4iLCBlKTsKLSAgICB9Ci0gICAgZmluYWxseQotICAgIHsKLSAgICAgIC8vQ2hlY2sgdG8gc2VlIGlmIHRoZSB2ZXJzaW9uIG9mIHRlc3QgYXNzc2VydGlvbiBkb2N1bWVudCBpcyBzdXBwb3J0ZWQKLSAgICAgIGlmICghVXRpbHMuaXNWYWxpZFByb2ZpbGVUQURWZXJzaW9uKHByb2ZpbGVBc3NlcnRpb25zKSkKLSAgICAgIHsKLSAgICAJU3RyaW5nIHRhZFZlcnNpb24gPSBwcm9maWxlQXNzZXJ0aW9ucy5nZXRUQURWZXJzaW9uKCk7Ci0gICAgCWlmKHRhZFZlcnNpb24gIT0gbnVsbCkKLSAgICAJewotICAgIAkgIFN0cmluZyB0YWROYW1lID0gcHJvZmlsZUFzc2VydGlvbnMuZ2V0VEFETmFtZSgpOwotICAgICAgICAgIHRocm93IG5ldyBXU0lFeGNlcHRpb24oCi0gICAgICAgICAgIlxuVmVyc2lvbiAiCi0gICAgICAgICAgICArIHRhZFZlcnNpb24KLSAgICAgICAgICAgICsgIiBvZiB0aGUgXCIiCi0gICAgICAgICAgICArIHRhZE5hbWUKLSAgICAgICAgICAgICsgIlwiXG4iCi0gICAgICAgICAgICArICJkb2N1bWVudCBpcyBub3QgY29tcGF0aWJsZSB3aXRoIHRoaXMgdmVyc2lvbiBvZiIKLSAgICAgICAgICAgICsgIlxuIgotICAgICAgICAgICAgKyAidGhlIHRlc3QgdG9vbHMuIik7Ci0gICAgCX0KLSAgICAJZWxzZQotICAgIAl7Ci0gICAgCSAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigiV1MtSSB2YWxpZGF0aW9uIHdhcyB1bmFibGUgdG8gcnVuLiBVbmFibGUgdG8gcmVhZCB0aGUgdGVzdCBhc3NlcnRpb24gZG9jdW1lbnQuIik7Ci0gICAgCX0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBUaGUgYXNzZXJ0aW9ucyBmcm9tIHRoZSBUQUQgYXJlIHJlb3JkZXJlZCBmb3IgcHVycG9zZXMgb2YgcHJvY2Vzc2luZy4gQWxsCi0gICAgLy8gYXNzZXJ0aW9ucyBvZiBhbiBhcnRpZmFjdCBhcmUgcmVvcmRlcmVkIHN1Y2ggdGhhdCBwcmVyZXF1aXNpdGVzIG9jY3VyCi0gICAgLy8gYmVmb3JlIHRoZSBhc3NlcnRpb25zIHRoZXkgcHJlcmVxLiBUaGUgYXNzdW1wdGlvbiBpcyB0aGF0ICBwcmVyZXF1aXNpdGVzIGRvCi0gICAgLy8gbm90IGNyb3NzIGFydGlmYWN0IHR5cGVzLgotICAgIC8vCi0gICAgSXRlcmF0b3IgaXQgPSBhcnRpZmFjdExpc3Qua2V5U2V0KCkuaXRlcmF0b3IoKTsKLSAgICAvLyBmb3IgZWFjaCBhcnRpZmFjdCB0eXBlIGRvIHJlb3JkZXJpbmcgYXNzZXJ0aW9uIAotICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgewotICAgICAgUHJvZmlsZUFydGlmYWN0IGFydCA9IChQcm9maWxlQXJ0aWZhY3QpIGFydGlmYWN0TGlzdC5nZXQoaXQubmV4dCgpKTsKLSAgICAgIC8vIHJlc3VsdCBsaXN0IG9mIHRoZSByZW9yZGVyaW5nIGFzc2VydGlvbnMgCi0gICAgICBMaW5rZWRMaXN0IHJlcyA9IG5ldyBMaW5rZWRMaXN0KCk7Ci0gICAgICBJdGVyYXRvciBpdDIgPSBhcnQuZ2V0VGVzdEFzc2VydGlvbkxpc3QoKS5pdGVyYXRvcigpOwotICAgICAgLy8gc29ydCB0aGUgYXJ0aWZhY3QgYXNzZXJ0aW9ucyBpbnRvIHJlc3VsdCBsaXN0IAotICAgICAgd2hpbGUgKGl0Mi5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIC8vIGNhbGwgZm9yIGVhY2ggYXNzZXJ0aW9uICwgCi0gICAgICAgIC8vIGlmIHRoZSBhc3NlcnRpb24gaGFzIHRoZSBwcmVyZXEsIHRoZSBwcmVyZXEgd2lsbCBhZGRlZCBmaXJzdCBpbnRvIHJlcyBsaXN0Ci0gICAgICAgIHNvcnRUZXN0QXNzZXJ0aW9ucyhhcnQsIChUZXN0QXNzZXJ0aW9uKSBpdDIubmV4dCgpLCByZXMpOwotICAgICAgfQotICAgICAgLy8gcmVwbGFjZSB0aGUgb3JpZ2luYWwgYXNzZXJ0aW9ucyBsaXN0IHRvIHRoZSBwcmVyZXEgcmVvcmRlcmluZyBhc3NlcnRpb25zIGxpc3QKLSAgICAgIGFydC5nZXRUZXN0QXNzZXJ0aW9uTGlzdCgpLmNsZWFyKCk7Ci0gICAgICBhcnQuZ2V0VGVzdEFzc2VydGlvbkxpc3QoKS5hZGRBbGwocmVzKTsKLSAgICB9Ci0gICAgLy8gUHV0IHRoZSBwcm9maWxlIHBhcnRzIGludG8gdGhlIHByb2ZpbGUgZGVmaW5pdGlvbgotICAgIHByb2ZpbGVBc3NlcnRpb25zLnNldEFydGlmYWN0TGlzdChhcnRpZmFjdExpc3QpOwotCi0gICAgcmV0dXJuIHByb2ZpbGVBc3NlcnRpb25zOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LkRvY3VtZW50UmVhZGVyI2dldExvY2F0aW9uKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9jYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LkRvY3VtZW50UmVhZGVyI3NldExvY2F0aW9uKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldExvY2F0aW9uKFN0cmluZyBkb2N1bWVudFVSSSkKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIFJlY3Vyc2l2ZSB3YWxrIHRvIG9yZGVyIGFzc2VydGlvbnMgc28gdGhhdCBhc3NlcnRpb25zIGFyZSAKLSAgICogcHJvY2Vzc2VkIGZvbGxvd2luZyB0aGUgb25lcyB0aGF0IHByZXJlcSB0aGVtLgotICAgKiBJZiBhc3NlcnRpb24gaGFzIHByZXJlcSwgdGhlbiBhZGQgaXQgdG8gdGhlIHJlc3VsdCBsaXN0IGZpcnN0LgotICAgKiAgCi0gICAqIEBwYXJhbSBhcnQgcHJvZmlsZSBhcnRpZmFjdCBmb3IgY2FsbCBAbGluayBQcm9maWxlQXJ0aWZhY3QjZ2V0VGVzdEFzc2VydGlvbihTdHJpbmcpCi0gICAqIEBwYXJhbSBhc3J0IHRlc3QgYXNzZXJ0aW9uCi0gICAqIEBwYXJhbSBsaXN0IHJlc3VsdCBsaXN0IHRvIHNvcnQKLSAgICovCi0gIHByaXZhdGUgdm9pZCBzb3J0VGVzdEFzc2VydGlvbnMoUHJvZmlsZUFydGlmYWN0IGFydCwgVGVzdEFzc2VydGlvbiBhc3J0LCBMaXN0IGxpc3QpCi0gIHsKLSAgICAvLyBpZiBhc3NlcnRpb24gaXMgbnVsbCBvciBkb2VzIG5vdCBleGlzdCwgdGhlbiBleGl0Ci0gICAgaWYoKGFzcnQgPT0gbnVsbCkgfHwgbGlzdC5jb250YWlucyhhc3J0KSkgCi0gICAgICByZXR1cm47Ci0gICAgCi0gICAgLy8gaWYgaXQgaGFzIG5vdCBwcmVyZXEsIGFkZCB0aGUgYXNlcnRpb24gYW5kIGV4aXQKLSAgICBpZihhc3J0LmdldFByZXJlcUlkTGlzdCgpLmlzRW1wdHkoKSkgCi0gICAgewotICAgICAgbGlzdC5hZGQoYXNydCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIGdldCBsaXN0IHByZXJlcSBhc3NlcnRpb24gYW5kIHJlcXVyc2l2ZSBjYWxsIHNvcnRUZXN0QXNzZXJ0aW9ucyB0aGlzIGVhY2ggICAgCi0gICAgSXRlcmF0b3IgaXQgPSBhc3J0LmdldFByZXJlcUlkTGlzdCgpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUoaXQuaGFzTmV4dCgpKSB7Ci0gICAgICBTdHJpbmcgaWQgPSAoU3RyaW5nKSBpdC5uZXh0KCk7Ci0gICAgICBzb3J0VGVzdEFzc2VydGlvbnMoYXJ0LCBhcnQuZ2V0VGVzdEFzc2VydGlvbihpZCksIGxpc3QpOwotICAgIH0KLSAgICBsaXN0LmFkZChhc3J0KTsKLSAgfQotCi0gIC8qKgotICAgKiBJbm5lciBjbGFzczogUHJvZmlsZUFzc2VydGlvbnNIYW5kbGVyCi0gICAqLwotICBjbGFzcyBQcm9maWxlQXNzZXJ0aW9uc0hhbmRsZXIgZXh0ZW5kcyBEZWZhdWx0SGFuZGxlcgotICB7Ci0gICAgcHJpdmF0ZSBQcm9maWxlQXJ0aWZhY3QgYXJ0aWZhY3QgPSBwcm9maWxlQXNzZXJ0aW9ucy5jcmVhdGVBcnRpZmFjdCgpOwotICAgIHByaXZhdGUgU3RyaW5nQnVmZmVyIGNvbnRleHQgPSBudWxsOwotICAgIHByaXZhdGUgU3RyaW5nQnVmZmVyIGFzc2VydGlvbkRlc2NyaXB0aW9uID0gbnVsbDsKLSAgICBwcml2YXRlIFN0cmluZ0J1ZmZlciBmYWlsdXJlTWVzc2FnZSA9IG51bGw7Ci0gICAgcHJpdmF0ZSBTdHJpbmdCdWZmZXIgZmFpbHVyZURldGFpbERlc2NyaXB0aW9uID0gbnVsbDsKLSAgICBwcml2YXRlIFN0cmluZ0J1ZmZlciBkZXRhaWxEZXNjcmlwdGlvbiA9IG51bGw7Ci0gICAgcHJpdmF0ZSBTdHJpbmdCdWZmZXIgdGVzdEFzc2VydGlvbklkID0gbnVsbDsKLSAgICBwcml2YXRlIFN0cmluZyBjdXJyZW50RWxlbWVudCA9IG51bGw7Ci0gICAgcHJpdmF0ZSBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24gPSBudWxsOwotICAgIHByaXZhdGUgU3RyaW5nQnVmZmVyIGxvZ0lucHV0ID0gbnVsbDsKLSAgICBwcml2YXRlIFN0cmluZ0J1ZmZlciB3c2RsSW5wdXQgPSBudWxsOwotICAgIHByaXZhdGUgRW50cnlUeXBlTGlzdCBlbnRyeVR5cGVMaXN0ID0gbnVsbDsKLQotICAgIC8vIFByb2Nlc3Mgc3RhcnQgZWxlbWVudCBldmVudAotICAgIHB1YmxpYyB2b2lkIHN0YXJ0RWxlbWVudCgKLSAgICAgIFN0cmluZyBuYW1lc3BhY2VVUkksCi0gICAgICBTdHJpbmcgbG9jYWxOYW1lLAotICAgICAgU3RyaW5nIHFOYW1lLAotICAgICAgQXR0cmlidXRlcyBhdHRzKQotICAgIHsKLSAgICAgIGlmIChuYW1lc3BhY2VVUkkgIT0gbnVsbAotICAgICAgICAmJiAobmFtZXNwYWNlVVJJLmVxdWFscyhXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9BU1NFUlRJT05TXzIwMDMpCi0gICAgICAgIHx8ICBuYW1lc3BhY2VVUkkuZXF1YWxzKFdTSUNvbnN0YW50cy5OU19VUklfV1NJX0FTU0VSVElPTlMpKSkKLSAgICAgIHsKLSAgICAgICAgLy8gU2F2ZSBlbGVtZW50IG5hbWUKLSAgICAgICAgY3VycmVudEVsZW1lbnQgPSBsb2NhbE5hbWU7Ci0KLSAgICAgICAgLy8gPGFydGlmYWN0PgotICAgICAgICBpZiAobG9jYWxOYW1lLmVxdWFscyhXU0lDb25zdGFudHMuRUxFTV9BUlRJRkFDVCkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBDcmVhdGUgYSBuZXcgcHJvZmlsZSBhcnRpZmFjdCBvYmplY3QKLSAgICAgICAgICBhcnRpZmFjdCA9IHByb2ZpbGVBc3NlcnRpb25zLmNyZWF0ZUFydGlmYWN0KCk7Ci0KLSAgICAgICAgICAvLyBTZXQgdHlwZQotICAgICAgICAgIGFydGlmYWN0LnNldFR5cGUoCi0gICAgICAgICAgICBBcnRpZmFjdFR5cGUuZ2V0QXJ0aWZhY3RUeXBlKAotICAgICAgICAgICAgICBhdHRzLmdldFZhbHVlKFdTSUNvbnN0YW50cy5BVFRSX1RZUEUpKSk7Ci0KLSAgICAgICAgICAvLyBBREQ6IEdldCBzcGVjaWZpY2F0aW9uIGxpc3QKLQotICAgICAgICAgIC8vIEFkZCBhcnRpZmFjdCB0byBsaXN0IG9mIGFydGlmYWN0IGxpc3QKLSAgICAgICAgICBhcnRpZmFjdExpc3QucHV0KGFydGlmYWN0LmdldFR5cGUoKS5nZXRUeXBlTmFtZSgpLCBhcnRpZmFjdCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA8dGVzdEFzc2VydGlvbj4KLSAgICAgICAgZWxzZSBpZiAobG9jYWxOYW1lLmVxdWFscyhXU0lDb25zdGFudHMuRUxFTV9URVNUX0FTU0VSVElPTikpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBDcmVhdGUgdGVzdCBhc3NlcnRpb24KLSAgICAgICAgICB0ZXN0QXNzZXJ0aW9uID0gbmV3IFRlc3RBc3NlcnRpb25JbXBsKCk7Ci0KLSAgICAgICAgICAvLyBHZXQgYXR0cmlidXRlIHZhbHVlcwotICAgICAgICAgIFN0cmluZyBpZCA9IGF0dHMuZ2V0VmFsdWUoIiIsIFdTSUNvbnN0YW50cy5BVFRSX0lEKTsKLSAgICAgICAgICB0ZXN0QXNzZXJ0aW9uLnNldElkKGlkKTsKLSAgICAgICAgICB0ZXN0QXNzZXJ0aW9uLnNldFR5cGUoYXR0cy5nZXRWYWx1ZSgiIiwgV1NJQ29uc3RhbnRzLkFUVFJfVFlQRSkpOwotICAgICAgICAgIHRlc3RBc3NlcnRpb24uc2V0RW50cnlUeXBlTmFtZSgKLSAgICAgICAgICAgIGF0dHMuZ2V0VmFsdWUoIiIsIFdTSUNvbnN0YW50cy5BVFRSX0VOVFJZX1RZUEUpKTsKLSAgICAgICAgICAKLSAgICAgICAgICAvLyBpZiBhc3NlcnRpb24gaXMgbm90IHJlcXVpcmVkIG9yIGl0IGhhcyBhbHJlYWR5IGJlZW4gY2hlY2tlZCBieSBjb3JlIHZhbGlkYXRvciB0aGVuIGRpc2FibGUgaXQKLSAgICAgICAgICBpZiAoYWxyZWFkeUNoZWNrZWQoaWQpIHx8ICEodGVzdEFzc2VydGlvbi5nZXRUeXBlKCkuZXF1YWxzKFRlc3RBc3NlcnRpb24uVFlQRV9SRVFVSVJFRCkpKQotICAgICAgICAJICB0ZXN0QXNzZXJ0aW9uLnNldEVuYWJsZWQoZmFsc2UpOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgCSAgdGVzdEFzc2VydGlvbi5zZXRFbmFibGVkKEJvb2xlYW4udmFsdWVPZihhdHRzLmdldFZhbHVlKCIiLCBXU0lDb25zdGFudHMuQVRUUl9FTkFCTEVEKSkuYm9vbGVhblZhbHVlKCkpOwotCi0gICAgICAgICAgLy8gQWRkIHRlc3QgYXNzZXJ0aW9uIHRvIGFydGlmYWN0Ci0gICAgICAgICAgYXJ0aWZhY3QuYWRkVGVzdEFzc2VydGlvbih0ZXN0QXNzZXJ0aW9uKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIDxjb250ZXh0PgotICAgICAgICBlbHNlIGlmIChsb2NhbE5hbWUuZXF1YWxzKFdTSUNvbnN0YW50cy5FTEVNX0NPTlRFWFQpKQotICAgICAgICB7Ci0gICAgICAgICAgY29udGV4dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIDxhc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAgICAgICAgZWxzZSBpZiAobG9jYWxOYW1lLmVxdWFscyhXU0lDb25zdGFudHMuRUxFTV9BU1NFUlRJT05fREVTQ1JJUFRJT04pKQotICAgICAgICB7Ci0gICAgICAgICAgYXNzZXJ0aW9uRGVzY3JpcHRpb24gPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA8ZmFpbHVyZU1lc3NhZ2U+Ci0gICAgICAgIGVsc2UgaWYgKGxvY2FsTmFtZS5lcXVhbHMoV1NJQ29uc3RhbnRzLkVMRU1fRkFJTFVSRV9NRVNTQUdFKSkKLSAgICAgICAgewotICAgICAgICAgIGZhaWx1cmVNZXNzYWdlID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gPGZhaWx1cmVEZXRhaWxEZXNjcmlwdGlvbj4KLSAgICAgICAgZWxzZSBpZiAobG9jYWxOYW1lLmVxdWFscyhXU0lDb25zdGFudHMuRUxFTV9GQUlMVVJFX0RFVEFJTF9ERVNDUklQVElPTikpCi0gICAgICAgIHsKLSAgICAgICAgICBmYWlsdXJlRGV0YWlsRGVzY3JpcHRpb24gPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA8ZGV0YWlsRGVzY3JpcHRpb24+Ci0gICAgICAgIGVsc2UgaWYgKGxvY2FsTmFtZS5lcXVhbHMoV1NJQ29uc3RhbnRzLkVMRU1fREVUQUlMX0RFU0NSSVBUSU9OKSkKLSAgICAgICAgewotICAgICAgICAgIGRldGFpbERlc2NyaXB0aW9uID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gPHRlc3RBc3NlcnRpb25JRD4KLSAgICAgICAgZWxzZSBpZiAobG9jYWxOYW1lLmVxdWFscyhXU0lDb25zdGFudHMuRUxFTV9URVNUX0FTU0VSVElPTl9JRCkpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0QXNzZXJ0aW9uSWQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA8YWRkaXRpb25hbEVudHJ5VHlwZUxpc3Q+Ci0gICAgICAgIGVsc2UgaWYgKAotICAgICAgICAgIGxvY2FsTmFtZS5lcXVhbHMoV1NJQ29uc3RhbnRzLkVMRU1fQURESVRJT05BTF9FTlRSWV9UWVBFX0xJU1QpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gQ3JlYXRlIGVudHJ5IHR5cGUgbGlzdAotICAgICAgICAgIGVudHJ5VHlwZUxpc3QgPSBuZXcgRW50cnlUeXBlTGlzdEltcGwoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIDxtZXNzYWdlSW5wdXQ+Ci0gICAgICAgIGVsc2UgaWYgKGxvY2FsTmFtZS5lcXVhbHMoV1NJQ29uc3RhbnRzLkVMRU1fTUVTU0FHRV9JTlBVVCkpCi0gICAgICAgIHsKLSAgICAgICAgICBsb2dJbnB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIDx3c2RsSW5wdXQ+Ci0gICAgICAgIGVsc2UgaWYgKGxvY2FsTmFtZS5lcXVhbHMoV1NJQ29uc3RhbnRzLkVMRU1fV1NETF9JTlBVVCkpCi0gICAgICAgIHsKLSAgICAgICAgICB3c2RsSW5wdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gPHByb2ZpbGVBc3NlcnRpb25zPgotICAgICAgICBlbHNlIGlmIChsb2NhbE5hbWUuZXF1YWxzKFdTSUNvbnN0YW50cy5FTEVNX1BST0ZJTEVfQVNTRVJUSU9OUykpCi0gICAgICAgIHsKLSAgICAgICAgICBwcm9maWxlQXNzZXJ0aW9ucy5zZXRUQUROYW1lKAotICAgICAgICAgICAgYXR0cy5nZXRWYWx1ZSgiIiwgV1NJQ29uc3RhbnRzLkFUVFJfTkFNRSkpOwotICAgICAgICAgIHByb2ZpbGVBc3NlcnRpb25zLnNldFRBRFZlcnNpb24oCi0gICAgICAgICAgICBhdHRzLmdldFZhbHVlKCIiLCBXU0lDb25zdGFudHMuQVRUUl9WRVJTSU9OKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBSRU1PVkU6ICAgICAKLSAgICAgICAgLy8gPHVkZGlJbnB1dD4KLSAgICAgICAgZWxzZSBpZiAobG9jYWxOYW1lLmVxdWFscyhXU0lDb25zdGFudHMuRUxFTV9VRERJX0lOUFVUKSkgewotICAgICAgICAgIHVkZGlJbnB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgfSAKLSAgICAgICAgKi8KLSAgICAgIH0KLSAgICB9IC8vIEVORCBzdGFydEVsZW1lbnQKLQotICAgIHB1YmxpYyB2b2lkIGVuZEVsZW1lbnQoU3RyaW5nIG5hbWVzcGFjZVVSSSwgU3RyaW5nIGxvY2FsTmFtZSwgU3RyaW5nIHFuYW1lKQotICAgIHsKLSAgICAgIC8vIElmIHRoaXMgaXMgdGhlIHByb2ZpbGUgbmFtZXNwYWNlLCB0aGVuIGNoZWNrIGZvciBhbmQgcHJvY2VzcyBzZWxlY3RlZCBlbGVtZW50cwotICAgICAgaWYgKG5hbWVzcGFjZVVSSSAhPSBudWxsCi0gICAgICAgICYmIChuYW1lc3BhY2VVUkkuZXF1YWxzKFdTSUNvbnN0YW50cy5OU19VUklfV1NJX0FTU0VSVElPTlNfMjAwMykKLSAgICAgICAgfHwgbmFtZXNwYWNlVVJJLmVxdWFscyhXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9BU1NFUlRJT05TKSkpCi0gICAgICB7Ci0gICAgICAgIC8vIDxjb250ZXh0PgotICAgICAgICBpZiAobG9jYWxOYW1lLmVxdWFscyhXU0lDb25zdGFudHMuRUxFTV9DT05URVhUKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIFNldCBjb250ZXh0IGluIHRlc3QgYXNzZXJ0aW9uCi0gICAgICAgICAgdGVzdEFzc2VydGlvbi5zZXRDb250ZXh0KGNvbnRleHQudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgY29udGV4dCA9IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gICAgICAgIGVsc2UgaWYgKGxvY2FsTmFtZS5lcXVhbHMoV1NJQ29uc3RhbnRzLkVMRU1fQVNTRVJUSU9OX0RFU0NSSVBUSU9OKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIFNldCBhc3NlcnRpb24gZGVzY3JpcHRpb24gaW4gdGVzdCBhc3NlcnRpb24KLSAgICAgICAgICB0ZXN0QXNzZXJ0aW9uLnNldEFzc2VydGlvbkRlc2NyaXB0aW9uKAotICAgICAgICAgICAgYXNzZXJ0aW9uRGVzY3JpcHRpb24udG9TdHJpbmcoKSk7Ci0gICAgICAgICAgYXNzZXJ0aW9uRGVzY3JpcHRpb24gPSBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gPGZhaWx1cmVNZXNzYWdlPgotICAgICAgICBlbHNlIGlmIChsb2NhbE5hbWUuZXF1YWxzKFdTSUNvbnN0YW50cy5FTEVNX0ZBSUxVUkVfTUVTU0FHRSkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBTZXQgZmFpbHVyZSBtZXNzYWdlIGluIHRlc3QgYXNzZXJ0aW9uCi0gICAgICAgICAgdGVzdEFzc2VydGlvbi5zZXRGYWlsdXJlTWVzc2FnZShmYWlsdXJlTWVzc2FnZS50b1N0cmluZygpKTsKLSAgICAgICAgICBmYWlsdXJlTWVzc2FnZSA9IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA8ZmFpbHVyZURldGFpbERlc2NyaXB0aW9uPgotICAgICAgICBlbHNlIGlmIChsb2NhbE5hbWUuZXF1YWxzKFdTSUNvbnN0YW50cy5FTEVNX0ZBSUxVUkVfREVUQUlMX0RFU0NSSVBUSU9OKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIFNldCBmYWlsdXJlIGRldGFpbCBkZXNjcmlwdGlvbiBpbiB0ZXN0IGFzc2VydGlvbgotICAgICAgICAgIHRlc3RBc3NlcnRpb24uc2V0RmFpbHVyZURldGFpbERlc2NyaXB0aW9uKAotICAgICAgICAgICAgZmFpbHVyZURldGFpbERlc2NyaXB0aW9uLnRvU3RyaW5nKCkpOwotICAgICAgICAgIGZhaWx1cmVEZXRhaWxEZXNjcmlwdGlvbiA9IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA8ZGV0YWlsRGVzY3JpcHRpb24+Ci0gICAgICAgIGVsc2UgaWYgKGxvY2FsTmFtZS5lcXVhbHMoV1NJQ29uc3RhbnRzLkVMRU1fREVUQUlMX0RFU0NSSVBUSU9OKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIFNldCBkZXRhaWwgZGVzY3JpcHRpb24gaW4gdGVzdCBhc3NlcnRpb24KLSAgICAgICAgICB0ZXN0QXNzZXJ0aW9uLnNldERldGFpbERlc2NyaXB0aW9uKGRldGFpbERlc2NyaXB0aW9uLnRvU3RyaW5nKCkpOwotICAgICAgICAgIGRldGFpbERlc2NyaXB0aW9uID0gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIDx0ZXN0QXNzZXJ0aW9uSUQ+Ci0gICAgICAgIGVsc2UgaWYgKGxvY2FsTmFtZS5lcXVhbHMoV1NJQ29uc3RhbnRzLkVMRU1fVEVTVF9BU1NFUlRJT05fSUQpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gU2V0IHRlc3QgYXNzZXJ0aW9uIGlkIGluIHByZXJlcSBsaXN0Ci0gICAgICAgICAgdGVzdEFzc2VydGlvbi5hZGRQcmVyZXFJZCh0ZXN0QXNzZXJ0aW9uSWQudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgdGVzdEFzc2VydGlvbklkID0gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIDxhZGR0aW9uYWxFbnRyeVR5cGVMaXN0PgotICAgICAgICBlbHNlIGlmICgKLSAgICAgICAgICBsb2NhbE5hbWUuZXF1YWxzKFdTSUNvbnN0YW50cy5FTEVNX0FERElUSU9OQUxfRU5UUllfVFlQRV9MSVNUKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIFNldCB0YXJnZXQgbGlzdAotICAgICAgICAgIHRlc3RBc3NlcnRpb24uc2V0QWRkaXRpb25hbEVudHJ5VHlwZUxpc3QoZW50cnlUeXBlTGlzdCk7Ci0gICAgICAgICAgZW50cnlUeXBlTGlzdCA9IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA8bWVzc2FnZUlucHV0PgotICAgICAgICBlbHNlIGlmIChsb2NhbE5hbWUuZXF1YWxzKFdTSUNvbnN0YW50cy5FTEVNX01FU1NBR0VfSU5QVVQpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gU2V0IHRlc3QgYXNzZXJ0aW9uIGlkIGluIHByZXJlcSBsaXN0Ci0gICAgICAgICAgZW50cnlUeXBlTGlzdC5zZXRMb2dJbnB1dChsb2dJbnB1dC50b1N0cmluZygpKTsKLSAgICAgICAgICBsb2dJbnB1dCA9IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA8d3NkbElucHV0PgotICAgICAgICBlbHNlIGlmIChsb2NhbE5hbWUuZXF1YWxzKFdTSUNvbnN0YW50cy5FTEVNX1dTRExfSU5QVVQpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gU2V0IHRlc3QgYXNzZXJ0aW9uIGlkIGluIHByZXJlcSBsaXN0Ci0gICAgICAgICAgZW50cnlUeXBlTGlzdC5zZXRXU0RMSW5wdXQod3NkbElucHV0LnRvU3RyaW5nKCkpOwotICAgICAgICAgIHdzZGxJbnB1dCA9IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA8cHJvZmlsZUFzc2VydGlvbnM+Ci0gICAgICAgIGVsc2UgaWYgKGxvY2FsTmFtZS5lcXVhbHMoV1NJQ29uc3RhbnRzLkVMRU1fUFJPRklMRV9BU1NFUlRJT05TKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIGEgbm8tb3AKLSAgICAgICAgfQotCi0gICAgICAgIC8qIFJFTU9WRToKLSAgICAgICAgLy8gPHVkZGlJbnB1dD4KLSAgICAgICAgZWxzZSBpZiAobG9jYWxOYW1lLmVxdWFscyhXU0lDb25zdGFudHMuRUxFTV9VRERJX0lOUFVUKSkgewotICAgICAgICAgIC8vIFNldCB0ZXN0IGFzc2VydGlvbiBpZCBpbiBwcmVyZXEgbGlzdAotICAgICAgICAgICBlbnRyeVR5cGVMaXN0LnNldFVERElJbnB1dCh1ZGRpSW5wdXQudG9TdHJpbmcoKSk7ICAgICAgICAgCi0gICAgICAgICAgdWRkaUlucHV0ID0gbnVsbDsKLSAgICAgICAgfQotICAgICAgICAqLwotICAgICAgfQotICAgIH0gLy8gRU5EIGVuZEVsZW1lbnQKLQotICAgIHB1YmxpYyB2b2lkIGNoYXJhY3RlcnMoY2hhcltdIGNoLCBpbnQgc3RhcnQsIGludCBsZW5ndGgpCi0gICAgewotICAgICAgLy8gPGNvbnRleHQ+Ci0gICAgICBpZiAoKGNvbnRleHQgIT0gbnVsbCkKLSAgICAgICAgJiYgKGN1cnJlbnRFbGVtZW50LmVxdWFscyhXU0lDb25zdGFudHMuRUxFTV9DT05URVhUKSkpCi0gICAgICB7Ci0gICAgICAgIGNvbnRleHQuYXBwZW5kKGNoLCBzdGFydCwgbGVuZ3RoKTsKLSAgICAgIH0KLQotICAgICAgLy8gPGFzc2VydGlvbkRlc2NyaXB0aW9uPgotICAgICAgZWxzZSBpZiAoCi0gICAgICAgIChhc3NlcnRpb25EZXNjcmlwdGlvbiAhPSBudWxsKQotICAgICAgICAgICYmIChjdXJyZW50RWxlbWVudC5lcXVhbHMoV1NJQ29uc3RhbnRzLkVMRU1fQVNTRVJUSU9OX0RFU0NSSVBUSU9OKSkpCi0gICAgICB7Ci0gICAgICAgIGFzc2VydGlvbkRlc2NyaXB0aW9uLmFwcGVuZChjaCwgc3RhcnQsIGxlbmd0aCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxmYWlsdXJlTWVzc2FnZT4KLSAgICAgIGVsc2UgaWYgKAotICAgICAgICAoZmFpbHVyZU1lc3NhZ2UgIT0gbnVsbCkKLSAgICAgICAgICAmJiAoY3VycmVudEVsZW1lbnQuZXF1YWxzKFdTSUNvbnN0YW50cy5FTEVNX0ZBSUxVUkVfTUVTU0FHRSkpKQotICAgICAgewotICAgICAgICBmYWlsdXJlTWVzc2FnZS5hcHBlbmQoY2gsIHN0YXJ0LCBsZW5ndGgpOwotICAgICAgfQotCi0gICAgICAvLyA8ZmFpbHVyZURldGFpbERlc2NyaXB0aW9uPgotICAgICAgZWxzZSBpZiAoCi0gICAgICAgIChmYWlsdXJlRGV0YWlsRGVzY3JpcHRpb24gIT0gbnVsbCkgJiYgKAotICAgICAgICAgIGN1cnJlbnRFbGVtZW50LmVxdWFscyhXU0lDb25zdGFudHMuRUxFTV9GQUlMVVJFX0RFVEFJTF9ERVNDUklQVElPTikpKQotICAgICAgewotICAgICAgICBmYWlsdXJlRGV0YWlsRGVzY3JpcHRpb24uYXBwZW5kKGNoLCBzdGFydCwgbGVuZ3RoKTsKLSAgICAgIH0KLQotICAgICAgLy8gPGRldGFpbERlc2NyaXB0aW9uPgotICAgICAgZWxzZSBpZiAoCi0gICAgICAgIChkZXRhaWxEZXNjcmlwdGlvbiAhPSBudWxsKQotICAgICAgICAgICYmIChjdXJyZW50RWxlbWVudC5lcXVhbHMoV1NJQ29uc3RhbnRzLkVMRU1fREVUQUlMX0RFU0NSSVBUSU9OKSkpCi0gICAgICB7Ci0gICAgICAgIGRldGFpbERlc2NyaXB0aW9uLmFwcGVuZChjaCwgc3RhcnQsIGxlbmd0aCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDx0ZXN0QXNzZXJ0aW9uSUQ+Ci0gICAgICBlbHNlIGlmICgKLSAgICAgICAgKHRlc3RBc3NlcnRpb25JZCAhPSBudWxsKQotICAgICAgICAgICYmIChjdXJyZW50RWxlbWVudC5lcXVhbHMoV1NJQ29uc3RhbnRzLkVMRU1fVEVTVF9BU1NFUlRJT05fSUQpKSkKLSAgICAgIHsKLSAgICAgICAgdGVzdEFzc2VydGlvbklkLmFwcGVuZChjaCwgc3RhcnQsIGxlbmd0aCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDxtZXNzYWdlSW5wdXQ+Ci0gICAgICBlbHNlIGlmICgKLSAgICAgICAgKGxvZ0lucHV0ICE9IG51bGwpCi0gICAgICAgICAgJiYgKGN1cnJlbnRFbGVtZW50LmVxdWFscyhXU0lDb25zdGFudHMuRUxFTV9NRVNTQUdFX0lOUFVUKSkpCi0gICAgICB7Ci0gICAgICAgIGxvZ0lucHV0LmFwcGVuZChjaCwgc3RhcnQsIGxlbmd0aCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIDx3c2RsSW5wdXQ+Ci0gICAgICBlbHNlIGlmICgKLSAgICAgICAgKHdzZGxJbnB1dCAhPSBudWxsKQotICAgICAgICAgICYmIChjdXJyZW50RWxlbWVudC5lcXVhbHMoV1NJQ29uc3RhbnRzLkVMRU1fV1NETF9JTlBVVCkpKQotICAgICAgewotICAgICAgICB3c2RsSW5wdXQuYXBwZW5kKGNoLCBzdGFydCwgbGVuZ3RoKTsKLSAgICAgIH0KLQotICAgICAgLyogUkVNT1ZFOgotICAgICAgLy8gPHVkZGlJbnB1dD4KLSAgICAgIGVsc2UgaWYgKCh1ZGRpSW5wdXQgIT0gbnVsbCkgJiYgKGN1cnJlbnRFbGVtZW50LmVxdWFscyhXU0lDb25zdGFudHMuRUxFTV9VRERJX0lOUFVUKSkpIHsKLSAgICAgICAgdWRkaUlucHV0LmFwcGVuZChjaCwgc3RhcnQsIGxlbmd0aCk7Ci0gICAgICB9Ci0gICAgICAqLwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBOT1RFIHRoYXQgdGhpcyBhcGkgYXNzdW1lcyB0aGF0IGJhc2Ugd3NkbCB2YWxpZGF0b3IgaGFzIGFscmVhZHkgdmFsaWRhdGVkCi0gICAqIHRoZSB3c2RsIGRvY3VtZW50IGFuZCBjb3JyZXNwb25kaW5nIHNjaGVtYXMgYWdhaW5zdCB0aGUgd3NkbCAxLjEgc3BlY2lmaWNhdGlvbi4KLSAgICogTm90ZSBhbHNvIHRoYXQgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIGR1cGxpY2F0ZSBjaGVja3MgYmV0d2VlbiB0aGUgYmFzZSB2YWxpZGF0b3IKLSAgICogYW5kIHRoZSB3cy1pIHZhbGlkYXRvci4gU2luY2Ugc29tZSBvZiB0aGVzZSBjaGVja3MgYXJlIGNwdSBpbnRlbnNpdmUsIHdlIGRpc2FibGUgCi0gICAqIHRob3NlIGFzc2VydGlvbnMgaGVyZS4gCi0gICAqCi0gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgYXNzZXJ0aW9uIGhhcyBhbHJlYWR5IGJlZW4gY2hlY2tlZCBieSB0aGUgYmFzZSB2YWxpZGF0b3IuIAotICAgKiBAcGFyYW0gdGVzdEFzc2VydGlvbgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGFzc2VydGlvbiBoYXMgYWxyZWFkeSBiZWVuIGNoZWNrZWQgYnkgdGhlIGJhc2UgdmFsaWRhdG9yLiAKLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIGFscmVhZHlDaGVja2VkKFN0cmluZyBpZCkKLSAgewotCSBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotCSBpZiAoaWQgIT0gbnVsbCkKLQkgewotICAgICAgIHJlc3VsdCA9IChpZC5lcXVhbHMoIkJQMjExMCIpIHx8Ci0gICAgCQkgICAJIGlkLmVxdWFscygiQlAyMTE1IikgfHwKLQkJICAgICAgICAgaWQuZXF1YWxzKCJCUDI0MTciKSB8fAotCQkgICAgICAgICBpZC5lcXVhbHMoIkJQMjExNCIpIHx8Ci0JCSAgICAgICAgIGlkLmVxdWFscygiQlAyMTIzIikgfHwKLQkJICAgICAgICAgaWQuZXF1YWxzKCJTU0JQMjIwOSIpIHx8Ci0JCSAgICAgICAgIGlkLmVxdWFscygiQVAyMjA5IikgfHwKLQkJICAgICAgICAgaWQuZXF1YWxzKCJCUDI3MDAiKQkgICAgICAgICAKLQkJICAgICAgICAgKTsKLQkgfQotCSByZXR1cm4gcmVzdWx0OwotfQotCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvaW1wbC9UZXN0QXNzZXJ0aW9uSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS9pbXBsL1Rlc3RBc3NlcnRpb25JbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2OTc1N2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS9pbXBsL1Rlc3RBc3NlcnRpb25JbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuaW1wbDsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5FbnRyeVR5cGVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci0KLS8qKgotICogVGhpcyBjbGFzcyAuLi4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIFRlc3RBc3NlcnRpb25JbXBsIGltcGxlbWVudHMgVGVzdEFzc2VydGlvbgotewotICAvKioKLSAgICogVGVzdCBhc3NlcnRpb24gaWQuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGlkID0gbnVsbDsKLQotICAvKioKLSAgICogVGVzdCBhc3NlcnRpb24gdHlwZS4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgdHlwZSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFRlc3QgYXNzZXJ0aW9uIHByaW1hcnkgZW50cnkgdHlwZSBuYW1lLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBlbnRyeVR5cGVOYW1lID0gbnVsbDsKLQotICAvKioKLSAgICogVGVzdCBhc3NlcnRpb24gZW5hYmxlZCBpbmRpY2F0b3IuCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiBlbmFibGVkID0gdHJ1ZTsKLQotICAvKioKLSAgICogQ29udGV4dC4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgY29udGV4dCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIEFzc2VydGlvbiBkZXNjcmlwdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgYXNzZXJ0aW9uRGVzY3JpcHRpb24gPSBudWxsOwotCi0gIC8qKgotICAgKiBGYWlsdXJlIG1lc3NhZ2UuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGZhaWx1cmVNZXNzYWdlID0gbnVsbDsKLQotICAvKioKLSAgICogRmFpbHVyZSBkZXRhaWwgZGVzY3JpcHRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGZhaWx1cmVEZXRhaWxEZXNjcmlwdGlvbiA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIERldGFpbCBkZXNjcmlwdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgZGV0YWlsRGVzY3JpcHRpb24gPSBudWxsOwotCi0gIC8qKgotICAgKiBBZGR0aW9uYWwgZW50cnkgdHlwZSBsaXN0LgotICAgKi8KLSAgcHJvdGVjdGVkIEVudHJ5VHlwZUxpc3QgZW50cnlUeXBlTGlzdCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFByZXJlcSBJRCBsaXN0LgotICAgKi8KLSAgcHJvdGVjdGVkIFZlY3RvciBwcmVyZXFJZExpc3QgPSBuZXcgVmVjdG9yKCk7Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24jZ2V0SWQoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRJZCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5pZDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uI3NldElkKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldElkKFN0cmluZyBpZCkKLSAgewotICAgIHRoaXMuaWQgPSBpZDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uI2dldFR5cGUoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRUeXBlKCkKLSAgewotICAgIHJldHVybiB0aGlzLnR5cGU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiNzZXRUeXBlKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFR5cGUoU3RyaW5nIHR5cGUpCi0gIHsKLSAgICB0aGlzLnR5cGUgPSB0eXBlOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24jZ2V0RW50cnlUeXBlTmFtZSgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEVudHJ5VHlwZU5hbWUoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuZW50cnlUeXBlTmFtZTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uI3NldEVudHJ5VHlwZU5hbWUoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RW50cnlUeXBlTmFtZShTdHJpbmcgZW50cnlUeXBlTmFtZSkKLSAgewotICAgIHRoaXMuZW50cnlUeXBlTmFtZSA9IGVudHJ5VHlwZU5hbWU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiNpc0VuYWJsZWQoKQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNFbmFibGVkKCkKLSAgewotICAgIHJldHVybiBlbmFibGVkOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24jc2V0RW5hYmxlZChib29sZWFuKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RW5hYmxlZChib29sZWFuIGVuYWJsZWQpCi0gIHsKLSAgICB0aGlzLmVuYWJsZWQgPSBlbmFibGVkOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24jZ2V0Q29udGV4dCgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldENvbnRleHQoKQotICB7Ci0gICAgcmV0dXJuIGNvbnRleHQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiNzZXRDb250ZXh0KFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldENvbnRleHQoU3RyaW5nIGNvbnRleHQpCi0gIHsKLSAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24jZ2V0QXNzZXJ0aW9uRGVzY3JpcHRpb24oKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRBc3NlcnRpb25EZXNjcmlwdGlvbigpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5hc3NlcnRpb25EZXNjcmlwdGlvbjsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uI3NldEFzc2VydGlvbkRlc2NyaXB0aW9uKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEFzc2VydGlvbkRlc2NyaXB0aW9uKFN0cmluZyBhc3NlcnRpb25EZXNjcmlwdGlvbikKLSAgewotICAgIHRoaXMuYXNzZXJ0aW9uRGVzY3JpcHRpb24gPSBhc3NlcnRpb25EZXNjcmlwdGlvbjsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uI2dldEZhaWx1cmVNZXNzYWdlKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RmFpbHVyZU1lc3NhZ2UoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuZmFpbHVyZU1lc3NhZ2U7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiNzZXRGYWlsdXJlTWVzc2FnZShTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRGYWlsdXJlTWVzc2FnZShTdHJpbmcgZmFpbHVyZU1lc3NhZ2UpCi0gIHsKLSAgICB0aGlzLmZhaWx1cmVNZXNzYWdlID0gZmFpbHVyZU1lc3NhZ2U7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiNnZXRGYWlsdXJlRGV0YWlsRGVzY3JpcHRpb24oKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRGYWlsdXJlRGV0YWlsRGVzY3JpcHRpb24oKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuZmFpbHVyZURldGFpbERlc2NyaXB0aW9uOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24jc2V0RmFpbHVyZURldGFpbERlc2NyaXB0aW9uKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEZhaWx1cmVEZXRhaWxEZXNjcmlwdGlvbihTdHJpbmcgZmFpbHVyZURldGFpbERlc2NyaXB0aW9uKQotICB7Ci0gICAgdGhpcy5mYWlsdXJlRGV0YWlsRGVzY3JpcHRpb24gPSBmYWlsdXJlRGV0YWlsRGVzY3JpcHRpb247Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiNnZXREZXRhaWxEZXNjcmlwdGlvbigpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldERldGFpbERlc2NyaXB0aW9uKCkKLSAgewotICAgIHJldHVybiB0aGlzLmRldGFpbERlc2NyaXB0aW9uOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24jc2V0RGV0YWlsRGVzY3JpcHRpb24oU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RGV0YWlsRGVzY3JpcHRpb24oU3RyaW5nIGRldGFpbERlc2NyaXB0aW9uKQotICB7Ci0gICAgdGhpcy5kZXRhaWxEZXNjcmlwdGlvbiA9IGRldGFpbERlc2NyaXB0aW9uOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24jZ2V0QWRkaXRpb25hbEVudHJ5VHlwZUxpc3QoKQotICAgKi8KLSAgcHVibGljIEVudHJ5VHlwZUxpc3QgZ2V0QWRkaXRpb25hbEVudHJ5VHlwZUxpc3QoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuZW50cnlUeXBlTGlzdDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uI3NldEFkZGl0aW9uYWxFbnRyeVR5cGVMaXN0KG9yZy53c2kudGVzdC5wcm9maWxlLkVudHJ5VHlwZUxpc3QpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRBZGRpdGlvbmFsRW50cnlUeXBlTGlzdChFbnRyeVR5cGVMaXN0IGVudHJ5VHlwZUxpc3QpCi0gIHsKLSAgICB0aGlzLmVudHJ5VHlwZUxpc3QgPSBlbnRyeVR5cGVMaXN0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24jZ2V0UHJlcmVxSWRMaXN0KCkKLSAgICovCi0gIHB1YmxpYyBWZWN0b3IgZ2V0UHJlcmVxSWRMaXN0KCkKLSAgewotICAgIHJldHVybiBwcmVyZXFJZExpc3Q7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiNhZGRQcmVyZXFJZChTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRQcmVyZXFJZChTdHJpbmcgcHJlcmVxSWQpCi0gIHsKLSAgICB0aGlzLnByZXJlcUlkTGlzdC5hZGQocHJlcmVxSWQpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9CYXNlVmFsaWRhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9CYXNlVmFsaWRhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyZTcwMmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvQmFzZVZhbGlkYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQW5hbHl6ZXJDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuQW5hbHl6ZXJDb25maWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuUHJvZmlsZUFzc2VydGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnRBcnRpZmFjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydGVyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotCi0vKioKLSAqIFRoZSBiYXNlIGludGVyZmFjZSBmb3IgdGhlIHByb2ZpbGUgdmFsaWRhdG9yLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIEJhc2VWYWxpZGF0b3IKLXsKLSAgLyoqCi0gICAqIFNldCBhbGwgdGVzdCBhc3NlcnRpb25zIGZvciBhbiBhcnRpZmFjdCB0byBtaXNzaW5nSW5wdXQuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHRoZXJlIGlzIGFueSBwcm9ibGVtcyB3aGlsZSBwcm9jZXNzaW5nLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0QWxsTWlzc2luZ0lucHV0KCkgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLQotICAvKioKLSAgICogQ2xlYW51cCBhZnRlciBwcm9jZXNzaW5nIGFsbCBvZiB0aGUgdGVzdCBhc3NlcnRpb25zIGZvciBhbiBhcnRpZmFjdC4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdGhlcmUgaXMgYW55IHByb2JsZW1zIGR1cmluZyBjbGVhbnVwLgotICAgKi8KLSAgcHVibGljIHZvaWQgY2xlYW51cCgpIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAgICogUGFyc2UgWE1MIGRvY3VtZW50IGFuZCB2YWxpZGF0ZSB3aXRoIGEgc2NoZW1hIGRvY3VtZW50LgotICAgICAqIEBwYXJhbSB1cmxTdHJpbmcgWE1MIGRvY3VtZW50IGxvY2F0aW9uLgotICAgICAqIEBwYXJhbSBiYXNlVVJJIGEgYmFzZSB1cmwgdG8gYXNzaXN0IGluIGxvY2F0aW5nIHRoZSBYTUwgZG9jdW1lbnQuCi0gICAgICogQHBhcmFtIHNjaGVtYSB0aGUgcmVsYXRlZCBYTUwgc2NoZW1hLgotICAgICAqIEByZXR1cm4gWE1MIGRvY3VtZW50LgotICAgICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHRoZXJlIGFyZSBhbnkgcHJvYmxlbXMgd2hpbGUgcGFyc2luZyBvciAKLSAgICAgKiAgICAgICAgIHZhbGlkYXRpbmcgdGhlIFhNTCBkb2N1bWVudC4KLSAgICAgKi8KLSAgcHVibGljIERvY3VtZW50IHBhcnNlWE1MRG9jdW1lbnRVUkwoCi0gICAgU3RyaW5nIHVybFN0cmluZywKLSAgICBTdHJpbmcgYmFzZVVSSSwKLSAgICBTdHJpbmcgc2NoZW1hKQotICAgIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIEluaXRpYWlsaXplIHZhbGlkYXRpb24gdGVzdCBwcm9jZWR1cmUuCi0gICAqIEBwYXJhbSBhbmFseXplckNvbnRleHQgdGhlIGFuYWx5emVyQ29udGV4dC4KLSAgICogQHBhcmFtIGFzc2VydGlvbnMgICAgICB0aGUgYXNzZXJ0aW9ucwotICAgKiBAcGFyYW0gcmVwb3J0QXJ0aWZhY3QgIHRoZSByZXBvcnQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBhbmFseXplckNvbmZpZyAgdGhlIGFuYWx5emVyQ29uZmlnCi0gICAqIEBwYXJhbSByZXBvcnRlciAgICAgICAgdGhlIHJlcG9ydGVyIHdoaWNoIGlzIHVzZWQgdG8gYWRkIGVycm9ycyB0byB0aGUKLSAgICogICAgICAgICAgICAgICAgICAgICAgICBjb25mb3JtYW5jZSByZXBvcnQKLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gICBpZiBtZXNzYWdlIHZhbGlkYXRvciBjb3VsZCBub3QgYmUgaW5pdGlhbGl6ZWQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBpbml0KAotICAgIEFuYWx5emVyQ29udGV4dCBhbmFseXplckNvbnRleHQsCi0gICAgUHJvZmlsZUFzc2VydGlvbnMgYXNzZXJ0aW9ucywKLSAgICBSZXBvcnRBcnRpZmFjdCByZXBvcnRBcnRpZmFjdCwKLSAgICBBbmFseXplckNvbmZpZyBhbmFseXplckNvbmZpZywKLSAgICBSZXBvcnRlciByZXBvcnRlcikKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uOwotCi0gIC8qKgotICAgKiBEZXRlcm1pbmVzIGlmIHRoaXMgdmFsaWRhdG9yIHNob3VsZCBiZSBydW4gKGRlcGVuZGluZyBvbiB0aGUgYW5hbHl6ZXIKLSAgICogY29uZmlnKQotICAgKiBAcmV0dXJuIGJvb2xlYW4gIHRydWUgaWYgdmFsaWRhdG9yIHNob3VsZCBiZSBydW4sIGZhbHNlIGlmIG5vdAotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gcnVuVGVzdHMoKTsKLQotICAvKioKLSAgICogUnVuIHRoZSB2YWxpZGF0b3IKLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgYW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cnMgZHVyaW5nIHZhbGlkYXRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHZhbGlkYXRlQXJ0aWZhY3QoKSB0aHJvd3MgV1NJRXhjZXB0aW9uOwotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgYXJ0aWZhY3QgdHlwZSB0aGF0IHRoaXMgdmFsaWRhdG9yIGFwcGxpZXMgdG8uCi0gICAqIEByZXR1cm4gdGhlIGFydGlmYWN0IHR5cGUgKGEgU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRBcnRpZmFjdFR5cGUoKTsKLQotICAvKioKLSAgICogR2V0IHRoZSBjb2xsZWN0aW9uIG9mIGVudHJ5IHR5cGVzIHRoYXQgdGhpcyB2YWxpZGF0b3IgYXBwbGllcyB0by4KLSAgICogQHJldHVybiBhbiBhcnJheSBvZiBlbnRyeSB0eXBlcyAoU3RyaW5ncykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRFbnRyeVR5cGVzKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9FbnRyeUNvbnRleHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL0VudHJ5Q29udGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZGJkODkzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL0VudHJ5Q29udGV4dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjI0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFuYWx5emVyQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1pbWVQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRW50cnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLldTRExEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotCi0vKioKLSAqIFRoaXMgY2xhc3MgY29udGFpbnMgdGhlIHRhcmdldCBpbmZvcm1hdGlvbiBuZWVkZWQgYnkgYSB0ZXN0IGFzc2VydGlvbi4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqIEBhdXRob3IgR3JhaGFtIFR1cnJlbGwgKGd0dXJyZWxsQHVrLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBFbnRyeUNvbnRleHQKLXsKLSAgcHJvdGVjdGVkIEVudHJ5IGVudHJ5ID0gbnVsbDsKLQotICBwcm90ZWN0ZWQgTWVzc2FnZUVudHJ5IHJlcXVlc3QgPSBudWxsOwotICBwcm90ZWN0ZWQgTWVzc2FnZUVudHJ5IHJlc3BvbnNlID0gbnVsbDsKLSAgcHJvdGVjdGVkIE1lc3NhZ2VFbnRyeSBtZXNzYWdlRW50cnkgPSBudWxsOwotCi0gIHByb3RlY3RlZCBEb2N1bWVudCByZXF1ZXN0RG9jdW1lbnQgPSBudWxsOwotICBwcm90ZWN0ZWQgRG9jdW1lbnQgcmVzcG9uc2VEb2N1bWVudCA9IG51bGw7Ci0gIHByb3RlY3RlZCBEb2N1bWVudCBtZXNzYWdlRW50cnlEb2N1bWVudCA9IG51bGw7Ci0KLSAgcHJvdGVjdGVkIFdTRExEb2N1bWVudCB3c2RsRG9jdW1lbnQgPSBudWxsOwotCi0gIHByb3RlY3RlZCBBbmFseXplckNvbnRleHQgYW5hbHl6ZXJDb250ZXh0ID0gbnVsbDsKLQotICAvKioKLSAgICogQ3JlYXRlIGVudHJ5IGNvbnRleHQuCi0gICAqIEBwYXJhbSBlbnRyeSAgICBhIG1lc3NhZ2UgZW50cnkuCi0gICAqIEBwYXJhbSByZXF1ZXN0ICB0aGUgcmVxdWVzdC4KLSAgICogQHBhcmFtIHJlc3BvbnNlIHRoZSByZXNwb25zZS4KLSAgICovCi0gIHB1YmxpYyBFbnRyeUNvbnRleHQoRW50cnkgZW50cnksIE1lc3NhZ2VFbnRyeSByZXF1ZXN0LCBNZXNzYWdlRW50cnkgcmVzcG9uc2UpCi0gIHsKLSAgICB0aGlzKGVudHJ5LCByZXF1ZXN0LCByZXNwb25zZSwgbnVsbCk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIGVudHJ5IGNvbnRleHQuCi0gICAqIEBwYXJhbSBlbnRyeSAgICAgICAgICAgYSBtZXNzYWdlIGVudHJ5LgotICAgKiBAcGFyYW0gcmVxdWVzdCAgICAgICAgIHRoZSByZXF1ZXN0LgotICAgKiBAcGFyYW0gcmVzcG9uc2UgICAgICAgIHRoZSByZXNwb25zZS4KLSAgICogQHBhcmFtIGFuYWx5emVyQ29udGV4dCB0aGUgYW5hbHl6ZXJDb250ZXh0LgotICAgKi8KLSAgcHVibGljIEVudHJ5Q29udGV4dCgKLSAgICBFbnRyeSBlbnRyeSwKLSAgICBNZXNzYWdlRW50cnkgcmVxdWVzdCwKLSAgICBNZXNzYWdlRW50cnkgcmVzcG9uc2UsCi0gICAgQW5hbHl6ZXJDb250ZXh0IGFuYWx5emVyQ29udGV4dCkKLSAgewotICAgIHRoaXMuZW50cnkgPSBlbnRyeTsKLSAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0OwotICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZTsKLSAgICB0aGlzLmFuYWx5emVyQ29udGV4dCA9IGFuYWx5emVyQ29udGV4dDsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIFBhcnNlIGFsbCBkb2N1bWVudHMKLSAgICAgIGlmKHJlcXVlc3QuaXNNaW1lQ29udGVudCgpKSAKLSAgICAgIHsKLSAgICAgIAlNaW1lUGFydCBwYXJ0ID0gcmVxdWVzdC5nZXRNaW1lUGFydHMoKS5nZXRSb290UGFydCgpOwotICAgICAgICBpZiAoKHBhcnQgIT0gbnVsbCkgJiYgKHBhcnQuZ2V0Q29udGVudCgpLmxlbmd0aCgpID4gMCkpCi0gICAgICAgICAgcmVxdWVzdERvY3VtZW50ID0gWE1MVXRpbHMucGFyc2VYTUwocGFydC5nZXRDb250ZW50KCkpOwotICAgICAgfQotICAgICAgZWxzZSAKLSAgICAgIHsKLSAgICAgICAgaWYgKHJlcXVlc3QuZ2V0TWVzc2FnZSgpLmxlbmd0aCgpID4gMCkKLSAgICAgICAgICByZXF1ZXN0RG9jdW1lbnQgPSBYTUxVdGlscy5wYXJzZVhNTChyZXF1ZXN0LmdldE1lc3NhZ2UoKSk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChyZXNwb25zZSAhPSBudWxsKSB7Ci0gICAgICAgICAgaWYocmVzcG9uc2UuaXNNaW1lQ29udGVudCgpKSAKLSAgICAgICAgICB7Ci0gICAgICAgICAgCU1pbWVQYXJ0IHBhcnQgPSByZXNwb25zZS5nZXRNaW1lUGFydHMoKS5nZXRSb290UGFydCgpOwotICAgICAgICAgIAlpZiAoKHBhcnQgIT0gbnVsbCkgJiYgKHBhcnQuZ2V0Q29udGVudCgpLmxlbmd0aCgpID4gMCkpCi0gICAgICAgICAgICAgIHJlc3BvbnNlRG9jdW1lbnQgPSBYTUxVdGlscy5wYXJzZVhNTChwYXJ0LmdldENvbnRlbnQoKSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UgCi0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmdldE1lc3NhZ2UoKS5sZW5ndGgoKSA+IDApCi0gICAgICAgICAgICAgIHJlc3BvbnNlRG9jdW1lbnQgPSBYTUxVdGlscy5wYXJzZVhNTChyZXNwb25zZS5nZXRNZXNzYWdlKCkpOwotICAgICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBjYXRjaCAoV1NJRXhjZXB0aW9uIHdlKQotICAgIHsKLSAgICB9Ci0KLSAgICAvLyBuZWVkIHNvbWUgZXhjZXB0aW9uIGhhbmRsaW5nIGluIGhlcmUgYW5kIG1vcmUgY2FyZWZ1bCBjaGVja2luZwotICAgIGlmIChlbnRyeS5nZXRFbnRyeVR5cGUoKS5lcXVhbHMoRW50cnlUeXBlLmdldEVudHJ5VHlwZShNZXNzYWdlVmFsaWRhdG9yLlRZUEVfTUVTU0FHRV9SRVFVRVNUKSkpCi0gICAgewotICAgICAgdGhpcy5tZXNzYWdlRW50cnkgPSByZXF1ZXN0OwotICAgICAgdGhpcy5tZXNzYWdlRW50cnlEb2N1bWVudCA9IHJlcXVlc3REb2N1bWVudDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHRoaXMubWVzc2FnZUVudHJ5ID0gcmVzcG9uc2U7Ci0gICAgICB0aGlzLm1lc3NhZ2VFbnRyeURvY3VtZW50ID0gcmVzcG9uc2VEb2N1bWVudDsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIGVudHJ5IGNvbnRleHQuCi0gICAqIEBwYXJhbSBlbnRyeSBhIG1lc3NhZ2UgZW50cnkuCi0gICAqIEBwYXJhbSB3c2RsRG9jdW1lbnQgYSBXU0RMIGRvY3VtZW50LgotICAgKi8KLSAgcHVibGljIEVudHJ5Q29udGV4dChFbnRyeSBlbnRyeSwgV1NETERvY3VtZW50IHdzZGxEb2N1bWVudCkKLSAgewotICAgIHRoaXMuZW50cnkgPSBlbnRyeTsKLSAgICB0aGlzLndzZGxEb2N1bWVudCA9IHdzZGxEb2N1bWVudDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgZW50cnkgY29udGV4dC4KLSAgICogQHBhcmFtIGVudHJ5IGEgbWVzc2FnZSBlbnRyeS4KLSAgICogQHBhcmFtIGFuYWx5emVyQ29udGV4dCB0aGUgYW5hbHl6ZXJDb250ZXh0LgotICAgKi8KLSAgcHVibGljIEVudHJ5Q29udGV4dChFbnRyeSBlbnRyeSwgQW5hbHl6ZXJDb250ZXh0IGFuYWx5emVyQ29udGV4dCkKLSAgewotICAgIHRoaXMuZW50cnkgPSBlbnRyeTsKLSAgICB0aGlzLmFuYWx5emVyQ29udGV4dCA9IGFuYWx5emVyQ29udGV4dDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBlbnRyeS4gCi0gICAqIEByZXR1cm4gdGhlIGVudHJ5LiAKLSAgICovCi0gIHB1YmxpYyBFbnRyeSBnZXRFbnRyeSgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5lbnRyeTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXF1ZXN0LgotICAgKiBAcmV0dXJuIHRoZSByZXF1ZXN0LgotICAgKi8KLSAgcHVibGljIE1lc3NhZ2VFbnRyeSBnZXRSZXF1ZXN0KCkKLSAgewotICAgIHJldHVybiByZXF1ZXN0OwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3BvbnNlLgotICAgKiBAcmV0dXJuIHRoZSByZXNwb25zZS4KLSAgICovCi0gIHB1YmxpYyBNZXNzYWdlRW50cnkgZ2V0UmVzcG9uc2UoKQotICB7Ci0gICAgcmV0dXJuIHJlc3BvbnNlOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGxvZyBlbnRyeSB3aGljaCBpcyBub3QgbnVsbC4KLSAgICogQHJldHVybiB0aGUgbG9nIGVudHJ5LgotICAgKi8KLSAgcHVibGljIE1lc3NhZ2VFbnRyeSBnZXRNZXNzYWdlRW50cnkoKQotICB7Ci0gICAgcmV0dXJuIG1lc3NhZ2VFbnRyeTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSByZXF1ZXN0LgotICAgKiBAcmV0dXJuIE1lc3NhZ2VFbnRyeQotICAgKi8KLSAgcHVibGljIERvY3VtZW50IGdldFJlcXVlc3REb2N1bWVudCgpCi0gIHsKLSAgICByZXR1cm4gcmVxdWVzdERvY3VtZW50OwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHJlc3BvbnNlLgotICAgKiBAcmV0dXJuIHRoZSByZXNwb25zZS4KLSAgICovCi0gIHB1YmxpYyBEb2N1bWVudCBnZXRSZXNwb25zZURvY3VtZW50KCkKLSAgewotICAgIHJldHVybiByZXNwb25zZURvY3VtZW50OwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGxvZyBlbnRyeSB3aGljaCBpcyBub3QgbnVsbC4KLSAgICogQHJldHVybiB0aGUgbG9nIGVudHJ5LgotICAgKi8KLSAgcHVibGljIERvY3VtZW50IGdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCkKLSAgewotICAgIHJldHVybiBtZXNzYWdlRW50cnlEb2N1bWVudDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBXU0RMIGRvY3VtZW50LgotICAgKiBAcmV0dXJuIHRoZSBXU0RMIGRvY3VtZW50LgotICAgKi8KLSAgcHVibGljIFdTRExEb2N1bWVudCBnZXRXU0RMRG9jdW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIHdzZGxEb2N1bWVudDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIGFuYWx5emVyQ29udGV4dC4KLSAgICogQHJldHVybiBhbmFseXplckNvbnRleHQKLSAgICovCi0gIHB1YmxpYyBBbmFseXplckNvbnRleHQgZ2V0QW5hbHl6ZXJDb250ZXh0KCkKLSAgewotICAgIHJldHVybiB0aGlzLmFuYWx5emVyQ29udGV4dDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvRW52ZWxvcGVWYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL0VudmVsb3BlVmFsaWRhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwZGNjOTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvRW52ZWxvcGVWYWxpZGF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFuYWx5emVyQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5Qcm9maWxlQXJ0aWZhY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnRBcnRpZmFjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLldTRExEb2N1bWVudDsKLQotLyoqCi0gKiBJbnRlcmZhY2UgZGVmaW5pdGlvbiBmb3IgZW52ZWxvcGUgdmFsaWRhdGlvbiB0ZXN0IHByb2NlZHVyZS4KLSAqCi0gKiBAdmVyc2lvbiAxLjAKLSAqLwotcHVibGljIGludGVyZmFjZSBFbnZlbG9wZVZhbGlkYXRvciBleHRlbmRzIExvZ1ZhbGlkYXRvcgotewotCi0gIC8qKgotICAgKiBJbml0aWFpbGl6ZSB2YWxpZGF0aW9uIHRlc3QgcHJvY2VkdXJlLgotICAgKiBAcGFyYW0gYW5hbHl6ZXJDb250ZXh0IHRoZSBhbmFseXplckNvbnRleHQuCi0gICAqIEBwYXJhbSBhcnRpZmFjdCAgICAgICAgYW4gcHJvZmlsZSBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHJlcG9ydEFydGlmYWN0ICB0aGUgcmVwb3J0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gd3NkbERvY3VtZW50IHRoZSBXZWIgc2VydmljZSBkZWZpbml0aW9uCi0gICAqIEBwYXJhbSByZXBvcnRlciB0aGUgcmVwb3J0ZXIgd2hpY2ggaXMgdXNlZCB0byBhZGQgZXJyb3JzIHRvIHRoZSBjb25mb3JtYW5jZSByZXBvcnQKLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgbWVzc2FnZSB2YWxpZGF0b3IgY291bGQgbm90IGJlIGluaXRpYWxpemVkLgotICAgKiBAZGVwcmVjYXRlZCAtLSB1c2UgaW5pdChBbmFseXplckNvbnRleHQgYW5hbHl6ZXJDb250ZXh0LAotICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBQcm9maWxlQXNzZXJ0aW9ucyBhc3NlcnRpb25zLAotICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBSZXBvcnRBcnRpZmFjdCByZXBvcnRBcnRpZmFjdCwKLSAgICogICAgICAgICAgICAgICAgICAgICAgICAgQW5hbHl6ZXJDb25maWcgYW5hbHl6ZXJDb25maWcsCi0gICAqICAgICAgICAgICAgICAgICAgICAgICAgIFJlcG9ydGVyIHJlcG9ydGVyKQotICAgKi8KLSAgcHVibGljIHZvaWQgaW5pdCgKLSAgICBBbmFseXplckNvbnRleHQgYW5hbHl6ZXJDb250ZXh0LAotICAgIFByb2ZpbGVBcnRpZmFjdCBhcnRpZmFjdCwKLSAgICBSZXBvcnRBcnRpZmFjdCByZXBvcnRBcnRpZmFjdCwKLSAgICBXU0RMRG9jdW1lbnQgd3NkbERvY3VtZW50LAotICAgIFJlcG9ydGVyIHJlcG9ydGVyKQotICAgIHRocm93cyBXU0lFeGNlcHRpb247Ci0gIAotICAvKiogRW52ZWxvcGUgYXJ0aWZhY3QgdHlwZSAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0VOVkVMT1BFID0gImVudmVsb3BlIjsKLQotICAvKiogUmVxdWVzdCBlbnZlbG9wZSBlbnRyeSB0eXBlLiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0VOVkVMT1BFX1JFUVVFU1QgPSAicmVxdWVzdEVudmVsb3BlIjsKLQotICAvKiogUmVzcG9uc2UgZW52ZWxvcGUgZW50cnkgdHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9FTlZFTE9QRV9SRVNQT05TRSA9ICJyZXNwb25zZUVudmVsb3BlIjsKLQotICAvKiogQW55IGVudmVsb3BlIGVudHJ5IHR5cGUuICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfRU5WRUxPUEVfQU5ZID0gImFueUVudmVsb3BlIjsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9Mb2dWYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL0xvZ1ZhbGlkYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTRkZGI5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL0xvZ1ZhbGlkYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLQotLyoqCi0gKiBJbnRlcmZhY2UgZGVmaW5pdGlvbiBmb3IgdmFsaWRhdGlvbiB0ZXN0IHByb2NlZHVyZXMgY29tbW9uIHRvIGVudmVsb3BlcyBhbmQKLSAqIG1lc3NhZ2VzLgotICovCi1wdWJsaWMgaW50ZXJmYWNlIExvZ1ZhbGlkYXRvciBleHRlbmRzIEJhc2VWYWxpZGF0b3IgewotICAgIC8qKgotICAgICAqIFZhbGlkYXRlIHRoZSBlbnZlbG9wZSBsb2NhdGVkIGJ5IHRoZSBsb2cgZW50cnkuIAotICAgICAqIEBwYXJhbSBlbnRyeUNvbnRleHQgYSBsb2cgZW50cnkgbG9jYXRpbmcgYW4gZW52ZWxvcGUuCi0gICAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgYW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cnJlZCB3aGlsZQotICAgICAqICAgICAgICAgcHJvY2Vzc2luZyB0aGUgbG9nIGVudHJ5LgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHZhbGlkYXRlKEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpIHRocm93cyBXU0lFeGNlcHRpb247Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9NZXNzYWdlVmFsaWRhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9NZXNzYWdlVmFsaWRhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhNTNmNGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvTWVzc2FnZVZhbGlkYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQW5hbHl6ZXJDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlByb2ZpbGVBcnRpZmFjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydEFydGlmYWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwuV1NETERvY3VtZW50OwotCi0vKioKLSAqIEludGVyZmFjZSBkZWZpbml0aW9uIGZvciBtZXNzYWdlIHZhbGlkYXRpb24gdGVzdCBwcm9jZWR1cmUuCi0gKgotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbQotICogQGF1dGhvciBHcmFoYW0gVHVycmVsbCAoZ3R1cnJlbGxAdWsuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBNZXNzYWdlVmFsaWRhdG9yIGV4dGVuZHMgTG9nVmFsaWRhdG9yCi17Ci0gIC8qKgotICAgKiBIVFRQIDEuMCB2ZXJzaW9uIGluZGljYXRvci4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhUVFBfVkVSU0lPTl8xXzAgPSAiSFRUUC8xLjAiOwotCi0gIC8qKgotICAgKiBIVFRQIDEuMSB2ZXJzaW9uIGluZGljYXRvci4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhUVFBfVkVSU0lPTl8xXzEgPSAiSFRUUC8xLjEiOwotCi0gIC8qKgotICAgKiBIVFRQIFBPU1QgbWVzc2FnZSBpbmRpY2F0b3IuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIVFRQX1BPU1QgPSAiUE9TVCI7Ci0KLSAgLyoqIE1lc3NhZ2UgYXJ0aWZhY3QgdHlwZSAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX01FU1NBR0UgPSAibWVzc2FnZSI7Ci0KLSAgLyoqIFJlcXVlc3QgbWVzc2FnZSBlbnRyeSB0eXBlLiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX01FU1NBR0VfUkVRVUVTVCA9ICJyZXF1ZXN0TWVzc2FnZSI7Ci0KLSAgLyoqIFJlc3BvbnNlIG1lc3NhZ2UgZW50cnkgdHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9NRVNTQUdFX1JFU1BPTlNFID0gInJlc3BvbnNlTWVzc2FnZSI7Ci0KLSAgLyoqIEFueSBtZXNzYWdlIGVudHJ5IHR5cGUuICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfTUVTU0FHRV9BTlkgPSAiYW55TWVzc2FnZSI7Ci0KLSAgLyoqIE1pbWUgcGFydCBtZXNzYWdlIGVudHJ5IHR5cGUuICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfTUlNRV9QQVJUID0gInBhcnQiOwotCi0gIC8qKiBNaW1lIHJvb3QgcGFydCBtZXNzYWdlIGVudHJ5IHR5cGUuICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfTUlNRV9ST09UX1BBUlQgPSAicm9vdC1wYXJ0IjsKLQotICAvKioKLSAgICogSW5pdGlhaWxpemUgdmFsaWRhdGlvbiB0ZXN0IHByb2NlZHVyZS4KLSAgICogQHBhcmFtIGFuYWx5emVyQ29udGV4dCB0aGUgYW5hbHl6ZXJDb250ZXh0LgotICAgKiBAcGFyYW0gYXJ0aWZhY3QgICAgICAgIGFuIHByb2ZpbGUgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSByZXBvcnRBcnRpZmFjdCAgdGhlIHJlcG9ydCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHdzZGxEb2N1bWVudCB0aGUgV2ViIHNlcnZpY2UgZGVmaW5pdGlvbgotICAgKiBAcGFyYW0gcmVwb3J0ZXIgdGhlIHJlcG9ydGVyIHdoaWNoIGlzIHVzZWQgdG8gYWRkIGVycm9ycyB0byB0aGUgY29uZm9ybWFuY2UgcmVwb3J0Ci0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIG1lc3NhZ2UgdmFsaWRhdG9yIGNvdWxkIG5vdCBiZSBpbml0aWFsaXplZC4KLSAgICogQGRlcHJlY2F0ZWQgLS0gdXNlIGluaXQoQW5hbHl6ZXJDb250ZXh0IGFuYWx5emVyQ29udGV4dCwKLSAgICogICAgICAgICAgICAgICAgICAgICAgICAgUHJvZmlsZUFzc2VydGlvbnMgYXNzZXJ0aW9ucywKLSAgICogICAgICAgICAgICAgICAgICAgICAgICAgUmVwb3J0QXJ0aWZhY3QgcmVwb3J0QXJ0aWZhY3QsCi0gICAqICAgICAgICAgICAgICAgICAgICAgICAgIEFuYWx5emVyQ29uZmlnIGFuYWx5emVyQ29uZmlnLAotICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBSZXBvcnRlciByZXBvcnRlcikKLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXQoCi0gICAgQW5hbHl6ZXJDb250ZXh0IGFuYWx5emVyQ29udGV4dCwKLSAgICBQcm9maWxlQXJ0aWZhY3QgYXJ0aWZhY3QsCi0gICAgUmVwb3J0QXJ0aWZhY3QgcmVwb3J0QXJ0aWZhY3QsCi0gICAgV1NETERvY3VtZW50IHdzZGxEb2N1bWVudCwKLSAgICBSZXBvcnRlciByZXBvcnRlcikKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvUHJvZmlsZVZhbGlkYXRvckZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL1Byb2ZpbGVWYWxpZGF0b3JGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExNmYxZDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvUHJvZmlsZVZhbGlkYXRvckZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLldTSVByb3BlcnRpZXM7Ci0KLS8qKgotKiBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gYWNjZXNzIGFuIGltcGxlbWVudGF0aW9uIG9mIGEgUHJvZmlsZVZhbGlkYXRvckZhY3RvcnkgYWJzdHJhY3QgY2xhc3MuCi0gKgotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbQotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgUHJvZmlsZVZhbGlkYXRvckZhY3RvcnkKLXsKLSAgLyoqCi0gICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBhIHZhbGlkYXRvciBkZXBlbmRpbmcgb24gdGhlIGdpdmVuIGFydGlmYWN0IG5hbWUKLSAgICogQHBhcmFtIGFydGlmYWN0TmFtZSAtIFN0cmluZyBjb250YWluaW5nIHRoZSBhcnRpZmFjdCBuYW1lIGZyb20gdGhlIFRBRAotICAgKiBAcmV0dXJuIGFuIG9iamVjdCB0aGF0IGltcGxlbWVudHMgdGhlIEJhc2VWYWxpZGF0b3IgaW50ZXJmYWNlLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGUgdmFsaWRhdG9yIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQKLSAgICovCi0gIHB1YmxpYyBhYnN0cmFjdCBCYXNlVmFsaWRhdG9yIGdldFZhbGlkYXRvckZvckFydGlmYWN0KFN0cmluZyBhcnRpZmFjdE5hbWUpCi0gICAgICAgICAgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLQotICAvKiogCi0gICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBhIFVEREkgdmFsaWRhdG9yLgotICAgKiBAcmV0dXJuICBhbiBvYmplY3QgdGhhdCBpbXBsZW1lbnRzIHRoZSBXU0RMVmFsaWRhdG9yIGludGVyZmFjZS4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgVURESSB2YWxpZGF0b3IgY2Fubm90IGJlIGluc3RhbnRpYXRlZC4KLSAgICogQGRlcHJlY2F0ZWQgLS0gdXNlIGdldFZhbGlkYXRvckZvckFydGlmYWN0KFN0cmluZyBhcnRpZmFjdE5hbWUpLgotICAgKi8KLSAgcHVibGljIGFic3RyYWN0IFVERElWYWxpZGF0b3IgbmV3VURESVZhbGlkYXRvcigpIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqIAotICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgYSBXU0RMIHZhbGlkYXRvci4KLSAgICogQHJldHVybiBhbiBvYmplY3QgdGhhdCBpbXBsZW1lbnRzIHRoZSBXU0RMVmFsaWRhdG9yIGludGVyZmFjZS4gCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIFdTREwgdmFsaWRhdG9yIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQuCi0gICAqIEBkZXByZWNhdGVkIC0tIHVzZSBnZXRWYWxpZGF0b3JGb3JBcnRpZmFjdChTdHJpbmcgYXJ0aWZhY3ROYW1lKS4KLSAgICovCi0gIHB1YmxpYyBhYnN0cmFjdCBXU0RMVmFsaWRhdG9yIG5ld1dTRExWYWxpZGF0b3IoKSB0aHJvd3MgV1NJRXhjZXB0aW9uOwotCi0gIC8qKiAKLSAgICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIGEgbWVzc2FnZSB2YWxpZGF0b3IuCi0gICAqIE5PVEU6IERvIHdlIG5lZWQgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIHRoZSB0cmFucG9ydCBhbmQgU09BUCAKLSAgICogbWVzc2FnZSB2YWxpZGF0b3I/Ci0gICAqCi0gICAqIEByZXR1cm4gYW4gb2JqZWN0IHRoYXQgaW1wbGVtZW50cyB0aGUgTWVzc2FnZVZhbGlkYXRvciBpbnRlcmZhY2UuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIG1lc3NhZ2UgdmFsaWRhdG9yY2Fubm90IGJlIGluc3RhbnRpYXRlZC4KLSAgICogQGRlcHJlY2F0ZWQgLS0gdXNlIGdldFZhbGlkYXRvckZvckFydGlmYWN0KFN0cmluZyBhcnRpZmFjdE5hbWUpLgotICAgKi8KLSAgcHVibGljIGFic3RyYWN0IE1lc3NhZ2VWYWxpZGF0b3IgbmV3TWVzc2FnZVZhbGlkYXRvcigpIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqIAotICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgYW4gZW52ZWxvcGUgdmFsaWRhdG9yLgotICAgKiBAcmV0dXJuIGFuIG9iamVjdCB0aGF0IGltcGxlbWVudHMgdGhlIEVudmVsb3BlVmFsaWRhdG9yIGludGVyZmFjZS4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgbWVzc2FnZSB2YWxpZGF0b3IgY2Fubm90IGJlIGluc3RhbnRpYXRlZC4gCi0gICAqIEBkZXByZWNhdGVkIC0tIHVzZSBnZXRWYWxpZGF0b3JGb3JBcnRpZmFjdChTdHJpbmcgYXJ0aWZhY3ROYW1lKS4KLSAgICovCi0gIHB1YmxpYyBhYnN0cmFjdCBFbnZlbG9wZVZhbGlkYXRvciBuZXdFbnZlbG9wZVZhbGlkYXRvcigpIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIEluc3RhbnRpYXRlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUHJvZmlsZVZhbGlkYXRvckZhY3RvcnkgY2xhc3MuCi0gICAqIFRoZSBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgdGhpcyBpbnRlcmZhY2UgaXMgc3BlY2lmaWVkIGluIHRoZSBmb2xsb3dpbmcgCi0gICAqIEphdmEgc3lzdGVtIHByb3BlcnR5OgotICAgKiA8VUw+Ci0gICAqICAgPExJPndzaS5wcm9maWxlLnZhbGlkYXRvci5mYWN0b3J5Ci0gICAqIDwvVUw+Ci0gICAqCi0gICAqIEByZXR1cm4gdGhlIFByb2ZpbGVWYWxpZGF0b3JGYWN0b3J5IG9iamVjdC4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgZmFjdG9yeSBjbGFzcyBjYW5ub3QgYmUgaW5zdGFudGlhdGVkLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBQcm9maWxlVmFsaWRhdG9yRmFjdG9yeSBuZXdJbnN0YW5jZSgpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIFByb2ZpbGVWYWxpZGF0b3JGYWN0b3J5IGZhY3RvcnkgPSBudWxsOwotICAgIFN0cmluZyBmYWN0b3J5Q2xhc3NOYW1lID0gbnVsbDsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdldCBmYWN0b3J5IGNsYXNzIG5hbWUKLSAgICAgIGZhY3RvcnlDbGFzc05hbWUgPQotICAgICAgICBXU0lQcm9wZXJ0aWVzLmdldFByb3BlcnR5KAotICAgICAgICAgIFdTSVByb3BlcnRpZXMuUFJPUF9WQUxJREFUT1JfRkFDVE9SWSwKLSAgICAgICAgICBXU0lQcm9wZXJ0aWVzLkRFRl9WQUxJREFUT1JfRkFDVE9SWSk7Ci0KLSAgICAgIC8vIENyZWF0ZSB0aGUgZmFjdG9yeSBjbGFzcwotICAgICAgQ2xhc3MgZmFjdG9yeUNsYXNzID0gQ2xhc3MuZm9yTmFtZShmYWN0b3J5Q2xhc3NOYW1lKTsKLQotICAgICAgLy8gSW5zdGFudGlhdGUgdGhlIGZhY3RvcnkgCi0gICAgICBmYWN0b3J5ID0gKFByb2ZpbGVWYWxpZGF0b3JGYWN0b3J5KSBmYWN0b3J5Q2xhc3MubmV3SW5zdGFuY2UoKTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigKLSAgICAgICAgIkNvdWxkIG5vdCBpbnN0YW50aWF0ZSBmYWN0b3J5IGNsYXNzOiAiICsgZmFjdG9yeUNsYXNzTmFtZSArICIuIiwKLSAgICAgICAgZSk7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGZhY3RvcnkKLSAgICByZXR1cm4gZmFjdG9yeTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL1VERElWYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL1VERElWYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmMxMjliZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9VRERJVmFsaWRhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5BbmFseXplckNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5VRERJUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlByb2ZpbGVBcnRpZmFjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydEFydGlmYWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0ZXI7Ci0KLS8qKgotICogVGhlIFdTREwgdmFsaWRhdG9yIHdpbGwgdmVyaWZ5IHRoYXQgdGhlIFdTREwgYW5kIGFzc29jaWF0ZWQgWE1MIHNjaGVtYSBkZWZpbml0aW9ucwotICogYXJlIGluIGNvbmZvcm1hbmNlIHdpdGggdGhlIHByb2ZpbGUuCi0gKgotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbQotICovCi1wdWJsaWMgaW50ZXJmYWNlIFVERElWYWxpZGF0b3IgZXh0ZW5kcyBCYXNlVmFsaWRhdG9yCi17Ci0gIC8qKiBEaXNjb3ZlcnkgYXJ0aWZhY3QgdHlwZSAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0RJU0NPVkVSWSA9ICJkaXNjb3ZlcnkiOwotCi0gIC8qKiBCaW5kaW5nIHRlbXBsYXRlIGRpc2NvdmVyeSBlbnRyeSB0eXBlLiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0RJU0NPVkVSWV9CSU5ESU5HVEVNUExBVEUgPSAiYmluZGluZ1RlbXBsYXRlIjsKLQotICAvKiogdE1vZGVsIGRpc2NvdmVyeSBlbnRyeSB0eXBlLiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0RJU0NPVkVSWV9UTU9ERUwgPSAidE1vZGVsIjsKLQotICAvKioKLSAgICogSW5pdGlhaWxpemUgdmFsaWRhdGlvbiB0ZXN0IHByb2NlZHVyZS4KLSAgICogQHBhcmFtIGFuYWx5emVyQ29udGV4dCB0aGUgYW5hbHl6ZXJDb250ZXh0LgotICAgKiBAcGFyYW0gYXJ0aWZhY3QgICAgICAgIGFuIHByb2ZpbGUgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSByZXBvcnRBcnRpZmFjdCAgdGhlIHJlcG9ydCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHVkZGlSZWZlcmVuY2UgICBhIFVEREkgcmVmZXJlbmNlLgotICAgKiBAcGFyYW0gcmVwb3J0ZXIgICAgICAgIGEgUmVwb3J0ZXIgb2JqZWN0LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBVRERJIHZhbGlkYXRvciBjb3VsZCBub3QgYmUgaW5pdGlhbGl6ZWQuCi0gICAqIEBkZXByZWNhdGVkIC0tIHVzZSBpbml0KEFuYWx5emVyQ29udGV4dCBhbmFseXplckNvbnRleHQsCi0gICAqICAgICAgICAgICAgICAgICAgICAgICAgIFByb2ZpbGVBc3NlcnRpb25zIGFzc2VydGlvbnMsCi0gICAqICAgICAgICAgICAgICAgICAgICAgICAgIFJlcG9ydEFydGlmYWN0IHJlcG9ydEFydGlmYWN0LAotICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBBbmFseXplckNvbmZpZyBhbmFseXplckNvbmZpZywKLSAgICogICAgICAgICAgICAgICAgICAgICAgICAgUmVwb3J0ZXIgcmVwb3J0ZXIpCi0KLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXQoCi0gICAgQW5hbHl6ZXJDb250ZXh0IGFuYWx5emVyQ29udGV4dCwKLSAgICBQcm9maWxlQXJ0aWZhY3QgYXJ0aWZhY3QsCi0gICAgUmVwb3J0QXJ0aWZhY3QgcmVwb3J0QXJ0aWZhY3QsCi0gICAgVURESVJlZmVyZW5jZSB1ZGRpUmVmZXJlbmNlLAotICAgIFJlcG9ydGVyIHJlcG9ydGVyKQotICAgIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlIHRoZSBVRERJIGJhc2VkIHNlcnZpY2UgZGVzY3JpcHRpb24uCi0gICAqIEByZXR1cm4gSWYgdGhlIFVEREkgZW50cmllcyBhcmUgdmFsaWQsIHRoZW4gdGhlIHZhbHVlIHJldHVybmVkIAotICAgKiAgICAgICAgIGlzIHRoZSBVUkwgZm9yIHRoZSBXU0RMIGRvY3VtZW50LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBXU0lFeGNlcHRpb24gaWYgYW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cnJlZAotICAgKiAgICAgICAgIHdoaWxlIHByb2Nlc3NpbmcgdGhlIFVEREllbnRyaWVzLgotICAgKiBAZGVwcmVjYXRlZCAtLSB1c2UgdmFsaWRhdGVBcnRpZmFjdCgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHZhbGlkYXRlKCkgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL1dTRExWYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL1dTRExWYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjVkODg2NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9XU0RMVmFsaWRhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5BbmFseXplckNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuUHJvZmlsZUFydGlmYWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0QXJ0aWZhY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC5XU0RMRG9jdW1lbnQ7Ci0KLS8qKgotICogVGhlIFdTREwgdmFsaWRhdG9yIHdpbGwgdmVyaWZ5IHRoYXQgdGhlIFdTREwgYW5kIGFzc29jaWF0ZWQgWE1MIHNjaGVtYSBkZWZpbml0aW9ucwotICogYXJlIGluIGNvbmZvcm1hbmNlIHdpdGggdGhlIHByb2ZpbGUuCi0gKgotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbQotICovCi1wdWJsaWMgaW50ZXJmYWNlIFdTRExWYWxpZGF0b3IgZXh0ZW5kcyBCYXNlVmFsaWRhdG9yCi17Ci0gIC8qKiBEZXNjcmlwdGlvbiBhcnRpZmFjdCB0eXBlICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfREVTQ1JJUFRJT04gPSAiZGVzY3JpcHRpb24iOwotCSAKLSAgLyoqIERlZmluaXRpb25zIGRlc2NyaXB0aW9uIGVudHJ5IHR5cGUuICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfREVTQ1JJUFRJT05fREVGSU5JVElPTlMgPSAiZGVmaW5pdGlvbnMiOwotCi0gIC8qKiBJbXBvcnQgZGVzY3JpcHRpb24gZW50cnkgdHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9ERVNDUklQVElPTl9JTVBPUlQgPSAiaW1wb3J0IjsKLQotICAvKiogVHlwZXMgZGVzY3JpcHRpb24gZW50cnkgdHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9ERVNDUklQVElPTl9UWVBFUyA9ICJ0eXBlcyI7Ci0KLSAgLyoqIE1lc3NhZ2UgZGVzY3JpcHRpb24gZW50cnkgdHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9ERVNDUklQVElPTl9NRVNTQUdFID0gIm1lc3NhZ2UiOwotCi0gIC8qKiBPcGVyYXRpb24gZGVzY3JpcHRpb24gZW50cnkgdHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9ERVNDUklQVElPTl9PUEVSQVRJT04gPSAib3BlcmF0aW9uIjsKLQotICAvKiogUG9ydFR5cGUgZGVzY3JpcHRpb24gZW50cnkgdHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9ERVNDUklQVElPTl9QT1JUVFlQRSA9ICJwb3J0VHlwZSI7Ci0KLSAgLyoqIEJpbmRpbmcgZGVzY3JpcHRpb24gZW50cnkgdHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9ERVNDUklQVElPTl9CSU5ESU5HID0gImJpbmRpbmciOwotCi0gIC8qKiBQb3J0IGRlc2NyaXB0aW9uIGVudHJ5IHR5cGUuICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfREVTQ1JJUFRJT05fUE9SVCA9ICJwb3J0IjsKLQotICAvKioKLSAgICogSW5pdGlhaWxpemUgdmFsaWRhdGlvbiB0ZXN0IHByb2NlZHVyZS4KLSAgICogQHBhcmFtIGFuYWx5emVyQ29udGV4dCB0aGUgYW5hbHl6ZXJDb250ZXh0LgotICAgKiBAcGFyYW0gYXJ0aWZhY3QgICAgICAgIHRoZSBwcm9maWxlIGFydGlmYWN0LgotICAgKiBAcGFyYW0gcmVwb3J0QXJ0aWZhY3QgIHRoZSByZXBvcnQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSB3c2RsVVJMICAgICAgICAgdGhlIFdTREwgZG9jdW1lbnQgbG9jYXRpb24uCi0gICAqIEBwYXJhbSB3c2RsRG9jdW1lbnQgICAgdGhlIFdTREwgZG9jdW1lbnQuCi0gICAqIEBwYXJhbSByZXBvcnRlciAgICAgICAgYSBSZXBvcnRlciBvYmplY3QuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIFdTREwgdmFsaWRhdG9yIGNvdWxkIG5vdCBiZSBpbml0aWFsaXplZC4KLSAgICogQGRlcHJlY2F0ZWQgLS0gdXNlIGluaXQoQW5hbHl6ZXJDb250ZXh0IGFuYWx5emVyQ29udGV4dCwKLSAgICogICAgICAgICAgICAgICAgICAgICAgICAgUHJvZmlsZUFzc2VydGlvbnMgYXNzZXJ0aW9ucywKLSAgICogICAgICAgICAgICAgICAgICAgICAgICAgUmVwb3J0QXJ0aWZhY3QgcmVwb3J0QXJ0aWZhY3QsCi0gICAqICAgICAgICAgICAgICAgICAgICAgICAgIEFuYWx5emVyQ29uZmlnIGFuYWx5emVyQ29uZmlnLAotICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBSZXBvcnRlciByZXBvcnRlcikKLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXQoCi0gICAgQW5hbHl6ZXJDb250ZXh0IGFuYWx5emVyQ29udGV4dCwKLSAgICBQcm9maWxlQXJ0aWZhY3QgYXJ0aWZhY3QsCi0gICAgUmVwb3J0QXJ0aWZhY3QgcmVwb3J0QXJ0aWZhY3QsCi0gICAgU3RyaW5nIHdzZGxVUkwsCi0gICAgV1NETERvY3VtZW50IHdzZGxEb2N1bWVudCwKLSAgICBSZXBvcnRlciByZXBvcnRlcikKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uOwotCi0gIC8qKgotICAgKiBWYWxpZGF0ZSB0aGUgV1NETCBiYXNlZCBzZXJ2aWNlIGRlc2NyaXB0aW9uLgotICAgKiBAcmV0dXJuIHRoZSBXU0RMIGRvY3VtZW50LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBhbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VycmVkCi0gICAqICAgICAgICAgd2hpbGUgdmFsaWRhdGluZyBoZSBXU0RMIGJhc2VkIHNlcnZpY2UgZGVzY3JpcHRpb24uCi0gICAqIEBkZXByZWNhdGVkICAtLSB1c2UgdmFsaWRhdGVBcnRpZmFjdCgpCi0gICAqLwotICBwdWJsaWMgV1NETERvY3VtZW50IHZhbGlkYXRlKCkgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvQXNzZXJ0aW9uUHJvY2Vzcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9Bc3NlcnRpb25Qcm9jZXNzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzYTNkMmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9Bc3NlcnRpb25Qcm9jZXNzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuRmFpbHVyZURldGFpbDsKLQotCi0vKioKLSAqIFByb2Nlc3MgYXNzZXJ0aW9uLgotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcm90ZWN0ZWQgU3RyaW5nIHJlc3VsdDsKLSAgcHJvdGVjdGVkIFN0cmluZyBmYWlsdXJlRGV0YWlsTWVzc2FnZTsKLSAgcHJvdGVjdGVkIEZhaWx1cmVEZXRhaWwgZmFpbHVyZURldGFpbDsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlVmFsaWRhdG9ySW1wbCBiYXNlX3ZhbGlkYXRvcjsKLSAgCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZVZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25Qcm9jZXNzKEJhc2VWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICB0aGlzLmJhc2VfdmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgYXNzZXJ0aW9uIHJlc3VsdC4KLSAgICovCi0gIHZvaWQgcmVzZXQoKQotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0gICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgPSBudWxsOwotICAgIGZhaWx1cmVEZXRhaWwgPSBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlIGFzc2VydGlvbi4KLSAgICovCi0gIHB1YmxpYyBhYnN0cmFjdCBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCB0YXJnZXRDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIFZlcmJvc2Ugb3V0cHV0LgotICAgKi8KLSAgcHVibGljIHZvaWQgZGVidWcoU3RyaW5nIG1lc3NhZ2UpCi0gIHsKLSAgICBpZiAoKGJhc2VfdmFsaWRhdG9yICE9IG51bGwpICYmIGJhc2VfdmFsaWRhdG9yLnZlcmJvc2VPcHRpb24pCi0gICAgewotICAgICAgU3lzdGVtLmVyci5wcmludGxuKG1lc3NhZ2UpOwotICAgIH0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGNjY2VlZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL0Fzc2VydGlvblByb2Nlc3NWaXNpdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGw7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5GYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLkltcG9ydDsKLWltcG9ydCBqYXZheC53c2RsLklucHV0OwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLk91dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgamF2YXgud3NkbC5TZXJ2aWNlOwotaW1wb3J0IGphdmF4LndzZGwuVHlwZXM7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvcjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogUHJvY2VzcyBhc3NlcnRpb24gdXNpbmcgV1NETFZpc2l0b3IgaW50ZXJmYWNlLgotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IKLSAgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi0gIGltcGxlbWVudHMgV1NETFZpc2l0b3IKLXsKLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblByb2Nlc3NWaXNpdG9yKEJhc2VWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdmlzaXQoUGFydCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIHB1YmxpYyB2b2lkIHZpc2l0KFNlcnZpY2Ugb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICBwdWJsaWMgdm9pZCB2aXNpdChUeXBlcyBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIHB1YmxpYyB2b2lkIHZpc2l0KE9wZXJhdGlvbiBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIHB1YmxpYyB2b2lkIHZpc2l0KElucHV0IG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgcHVibGljIHZvaWQgdmlzaXQoT3V0cHV0IG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgcHVibGljIHZvaWQgdmlzaXQoRmF1bHQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICBwdWJsaWMgdm9pZCB2aXNpdChCaW5kaW5nIG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgQmluZGluZ09wZXJhdGlvbiBvYmosCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBCaW5kaW5nSW5wdXQgb2JqLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgQmluZGluZ091dHB1dCBvYmosCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBCaW5kaW5nRmF1bHQgb2JqLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgcHVibGljIHZvaWQgdmlzaXQoSW1wb3J0IG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgcHVibGljIHZvaWQgdmlzaXQoRWxlbWVudCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIHB1YmxpYyB2b2lkIHZpc2l0KE1lc3NhZ2Ugb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICBwdWJsaWMgdm9pZCB2aXNpdChQb3J0IG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgcHVibGljIHZvaWQgdmlzaXQoUG9ydFR5cGUgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICBwdWJsaWMgdm9pZCB2aXNpdChEZWZpbml0aW9uIG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgb2JqLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgcHVibGljIHZvaWQgdmlzaXQoU09BUEJpbmRpbmcgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICBwdWJsaWMgdm9pZCB2aXNpdChTT0FQQm9keSBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIHB1YmxpYyB2b2lkIHZpc2l0KFNPQVBIZWFkZXIgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBTT0FQSGVhZGVyRmF1bHQgb2JqLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgcHVibGljIHZvaWQgdmlzaXQoU09BUEZhdWx0IG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgU09BUE9wZXJhdGlvbiBvYmosCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvQmFzZU1lc3NhZ2VWYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvQmFzZU1lc3NhZ2VWYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDJjMDU4Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL0Jhc2VNZXNzYWdlVmFsaWRhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTEwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwMyBJQk0gQ29ycG9yYXRpb24sIFBhcmFzb2Z0IGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gICAgICAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICBQYXJhc29mdCAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBjb20uaWJtLmljdS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5TZXJ2aWNlOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FTXVsdGlwYXJ0UmVsYXRlZDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FUGFydDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keTsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnV0aWwuVVJJOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTTW9kZWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQW5hbHl6ZXJDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5DYW5kaWRhdGVJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5TZXJ2aWNlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuQW5hbHl6ZXJDb25maWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLkxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLkxvZ1JlYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeUhhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuUHJvZmlsZUFydGlmYWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlByb2ZpbGVBc3NlcnRpb25zOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuTG9nVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5NZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGwuV1NETFZhbGlkYXRvckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5BcnRpZmFjdFJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkZhaWx1cmVEZXRhaWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnRBcnRpZmFjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVudHJ5VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5IVFRQVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwuV1NETERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLldTRExVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci0KLWltcG9ydCBjb20uaWJtLndzZGwuQ29uc3RhbnRzOwotaW1wb3J0IGNvbS5pYm0ud3NkbC51dGlsLnhtbC5ET00yV3JpdGVyOwotaW1wb3J0IGNvbS5pYm0ud3NkbC51dGlsLnhtbC5ET01VdGlsczsKLQotLyoqCi0gKiBUaGUgV1NETCB2YWxpZGF0b3Igd2lsbCB2ZXJpZnkgdGhhdCB0aGUgV1NETCBhbmQgYXNzb2NpYXRlZCBYTUwgc2NoZW1hIGRlZmluaXRpb25zCi0gKiBhcmUgaW4gY29uZm9ybWFuY2Ugd2l0aCB0aGUgcHJvZmlsZS4KLSAqCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKiBAYXV0aG9yIEppbSBDbHVuZQotICogQGF1dGhvciBHcmFoYW0gVHVycmVsbCAoZ3R1cnJlbGxAdWsuaWJtLmNvbSkKLSAqIEBhdXRob3IgTmVpbCBEZWxpbWEgKG5kZGVsaW1hQGNhLmlibS5jb20pIAotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgZXh0ZW5kcyBCYXNlVmFsaWRhdG9ySW1wbAotICBpbXBsZW1lbnRzIExvZ1ZhbGlkYXRvcgotewotICAvKioKLSAgKiBXU0RMIGRvY3VtZW50LgotICAqLwotICBwcml2YXRlIFdTRExEb2N1bWVudCB3c2RsRG9jdW1lbnQ7Ci0KLSAgLyoqCi0gICAqIExvZyBlbnRyeS4KLSAgICovCi0gIHByb3RlY3RlZCBNZXNzYWdlRW50cnkgbG9nRW50cnk7Ci0gIHByb3RlY3RlZCBMb2cgbG9nOwotICAKLSAgcHJpdmF0ZSBib29sZWFuIHRlc3RhYmxlOwotICBwcml2YXRlIEFuYWx5emVyQ29uZmlnIGFuYWx5emVyQ29uZmlnOwotCi0gIHB1YmxpYyB2b2lkIGluaXQoQW5hbHl6ZXJDb250ZXh0IGFuYWx5emVyQ29udGV4dCwKLSAgICAgICAgICBQcm9maWxlQXNzZXJ0aW9ucyBhc3NlcnRpb25zLAotICAgICAgICAgIFJlcG9ydEFydGlmYWN0IHJlcG9ydEFydGlmYWN0LAotICAgICAgICAgIEFuYWx5emVyQ29uZmlnIGFuYWx5emVyQ29uZmlnLAotICAgICAgICAgIFJlcG9ydGVyIHJlcG9ydGVyKQotICAgICAgICAgIHRocm93cyBXU0lFeGNlcHRpb24gewotCi0gICAgICBzdXBlci5pbml0KGFuYWx5emVyQ29udGV4dCwgYXNzZXJ0aW9ucy5nZXRBcnRpZmFjdChnZXRBcnRpZmFjdFR5cGUoKSksCi0gICAgICAgICAgICAgIHJlcG9ydEFydGlmYWN0LCByZXBvcnRlcik7Ci0KLSAgICAgIHRlc3RhYmxlID0gYW5hbHl6ZXJDb25maWcuZ2V0TG9nTG9jYXRpb24oKSAhPSBudWxsOwotICAgICAgdGhpcy5hbmFseXplckNvbmZpZyA9IGFuYWx5emVyQ29uZmlnOwotICAgICAgdGhpcy53c2RsRG9jdW1lbnQgPSAoV1NETERvY3VtZW50KSBhbmFseXplckNvbnRleHQuZ2V0V3NkbERvY3VtZW50KCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLk1lc3NhZ2VWYWxpZGF0b3IjaW5pdChvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQW5hbHl6ZXJDb250ZXh0LCBvcmcud3NpLnRlc3QucHJvZmlsZS5Qcm9maWxlQXJ0aWZhY3QsIG9yZy53c2kudGVzdC5yZXBvcnQuUmVwb3J0QXJ0aWZhY3QsIG9yZy53c2kud3NkbC5XU0RMRG9jdW1lbnQsIG9yZy53c2kudGVzdC5yZXBvcnQuUmVwb3J0ZXIpCi0gICAqLwotICBwdWJsaWMgdm9pZCBpbml0KAotICAgIEFuYWx5emVyQ29udGV4dCBhbmFseXplckNvbnRleHQsCi0gICAgUHJvZmlsZUFydGlmYWN0IHByb2ZpbGVBcnRpZmFjdCwKLSAgICBSZXBvcnRBcnRpZmFjdCByZXBvcnRBcnRpZmFjdCwKLSAgICBXU0RMRG9jdW1lbnQgd3NkbERvY3VtZW50LAotICAgIFJlcG9ydGVyIHJlcG9ydGVyKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEJhc2VWYWxpZGF0b3JJbXBsCi0gICAgc3VwZXIuaW5pdChhbmFseXplckNvbnRleHQsIHByb2ZpbGVBcnRpZmFjdCwgcmVwb3J0QXJ0aWZhY3QsIHJlcG9ydGVyKTsKLQotICAgIHRoaXMuYW5hbHl6ZXJDb25maWcgPSBVdGlscy5nZXRBbmFseXplckNvbmZpZyhyZXBvcnRlcik7Ci0gICAgdGVzdGFibGUgPSAoKGFuYWx5emVyQ29uZmlnICE9IG51bGwpICYmIChhbmFseXplckNvbmZpZy5nZXRMb2dMb2NhdGlvbigpICE9IG51bGwpKTsJCi0KLSAgICAvLyBTYXZlIGlucHV0IHJlZmVyZW5jZXMKLSAgICB0aGlzLndzZGxEb2N1bWVudCA9IHdzZGxEb2N1bWVudDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHdzZGxEb2N1bWVudAotICAgKiBAcmV0dXJuIHdzZGxEb2N1bWVudAotICAgKi8KLSAgcHVibGljIFdTRExEb2N1bWVudCBnZXRXU0RMRG9jdW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIHdzZGxEb2N1bWVudDsKLSAgfQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLk1lc3NhZ2VWYWxpZGF0b3IjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZhbGlkYXRlKEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vRW50cnkgZW50cnkgPSBudWxsOwotCi0gICAgLy8gU2F2ZSBsb2cgZW50cnkgdG8gYmUgcmVmZXJlbmNlZCBieSBvdGhlciBtZXRob2RzCi0gICAgdGhpcy5sb2dFbnRyeSA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKTsKLQotICAgIC8vIEdldCByZWZlcmVuY2UgdG8gdGhlIGFuYWx5emVyIGNvbmZpZyBvYmplY3QKLSAgICBBbmFseXplckNvbmZpZyBhbmFseXplckNvbmZpZyA9Ci0gICAgICByZXBvcnRlci5nZXRSZXBvcnQoKS5nZXRSZXBvcnRDb250ZXh0KCkuZ2V0QW5hbHl6ZXIoKS5nZXRBbmFseXplckNvbmZpZygpOwotCi0gICAgLyogSWYgU2VydmljZSBEZXNjcmlwdGlvbiAoV1NETC9VRERJKSBOT1Qgc3VwcGxpZWQgaW4gYW5hbHl6ZXIgY29uZmlnIE9SCi0gICAgICogU2VydmljZSBEZXNjcmlwdGlvbiBJUyBzdXBwbGllZCBhbmQgdGhlIGN1cnJlbnQgbWVzc2FnZSBjb3JyZWxhdGVzIHRvIGl0Li4uCi0gICAgICovCi0gICAgaWYgKCghYW5hbHl6ZXJDb25maWcuaXNXU0RMUmVmZXJlbmNlU2V0KCkpCi0gICAgICB8fCBtZXNzYWdlQ29ycmVsYXRlc1RvU2VydmljZSgKLSAgICAgICAgZW50cnlDb250ZXh0LAotICAgICAgICBhbmFseXplckNvbmZpZy5nZXRDb3JyZWxhdGlvblR5cGUoKSkpCi0gICAgewotICAgICAgLy8gbm93IGlubmVyIGNsYXNzZXMgbW92ZWQgb3V0IGZyb20gdGhlIHZhbGlkYXRvcgotICAgICAgLy9TdHJpbmcgY2xhc3NQcmVmaXggPSB0aGlzLmdldENsYXNzKCkuZ2V0TmFtZSgpICsgIiQiOwotICAgICAgU3RyaW5nIGNsYXNzUHJlZml4ID0gdGhpcy5nZXRDbGFzcygpLmdldFBhY2thZ2UoKS5nZXROYW1lKCkrIi4iOwotCi0gICAgICAvLyBQcm9jZXNzIGFzc2VydGlvbnMgZm9yIHRoaXMgYXJ0aWZhY3QgYWdhaW5zdCB0aGUgdGFyZ2V0IGNvbnRleHQKLSAgICAgIHByb2Nlc3NBc3NlcnRpb25zKGNsYXNzUHJlZml4LCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBDaGVjayB3aGV0aGVyIHRoZSBtZXNzYWdlIGNvcnJlbGF0ZXMgdG8gdGhlIHNlcnZpY2UgdW5kZXIgdGVzdC4KLSAgICogVXNlIHRoZSByZXF1ZXN0IHBhcnQgb2YgdGhlIHJlcXVlc3QtcmVzcG9uc2UgcGFpciwgZnJvbSB3aGljaCB0aGUgY29ycmVsYXRpb24gb2YgdGhlIHJlc3BvbnNlIGlzIGltcGxpZWQuCi0gICAqIEVudGl0aWVzIGZyb20gdGhlIFNlcnZpY2UgdW5kZXIgdGVzdCBhcmUgZGV0ZXJtaW5lZCBvbmNlIGZvciBhbGwuCi0gICAqIEBwYXJhbSBlbnRyeUNvbnRleHQgICAgYW4gZW50cnkgY29udGV4dC4KLSAgICogQHBhcmFtIGNvcnJlbGF0aW9uVHlwZSBhIGNvcnJlbGF0aW9uIHR5cGUuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgbWVzc2FnZSBjb3JyZWxhdGVzIHRvIHRoZSBzZXJ2aWNlIHVuZGVyIHRlc3QuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIGNvcnJlbGF0aW9uIHR5cGUgaXMgbm90IGFwcHJvcHJpYXRlLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIG1lc3NhZ2VDb3JyZWxhdGVzVG9TZXJ2aWNlKAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQsCi0gICAgU3RyaW5nIGNvcnJlbGF0aW9uVHlwZSkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIFVSSVtdIGVuZHBvaW50cyA9IG51bGw7Ci0gICAgYm9vbGVhbiBjb3JyZWxhdGlvbiA9IGZhbHNlOwotCi0gICAgLyogVEVNUDogR2V0IGl0IGZyb20gYW5hbHl6ZXIgY29uZmlnIHBhc3NlZCBpbiBvbiBpbml0IG1ldGhvZAotICAgIENhbmRpZGF0ZUluZm8gY2FuZGlkYXRlID0gZW50cnlDb250ZXh0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0QW5hbHl6ZXJDb250ZXh0KCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRDYW5kaWRhdGVJbmZvKCk7Ci0gICAgKi8KLSAgICBDYW5kaWRhdGVJbmZvIGNhbmRpZGF0ZSA9IGFuYWx5emVyQ29udGV4dC5nZXRDYW5kaWRhdGVJbmZvKCk7Ci0KLSAgICAvLyBTZXJ2aWNlIHJlZmVyZW5jZSAKLSAgICBTZXJ2aWNlUmVmZXJlbmNlIHNlcnZpY2VSZWZlcmVuY2UgPSBhbmFseXplckNvbnRleHQuZ2V0U2VydmljZVJlZmVyZW5jZSgpOwotCi0gICAgLy8gR2V0IHRoZSBkZWZpbml0aW9uIGVsZW1lbnQKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBjYW5kaWRhdGUuZ2V0V3NkbERvY3VtZW50KCkuZ2V0RGVmaW5pdGlvbnMoKTsKLQotICAgIEJpbmRpbmcgYmluZGluZyA9IG51bGw7Ci0gICAgaWYgKHNlcnZpY2VSZWZlcmVuY2UuZ2V0V1NETEVsZW1lbnQoKS5pc1BvcnQoKSkKLSAgICB7Ci0gICAgICAvLyBHZXQgc2VydmljZQotICAgICAgU2VydmljZSBzZXJ2aWNlID0KLSAgICAgICAgZGVmaW5pdGlvbi5nZXRTZXJ2aWNlKAotICAgICAgICAgIHNlcnZpY2VSZWZlcmVuY2UuZ2V0V1NETEVsZW1lbnQoKS5nZXRQYXJlbnRFbGVtZW50UU5hbWUoKSk7Ci0KLSAgICAgIC8vIEdldCBwb3J0Ci0gICAgICBQb3J0IHBvcnQgPSBzZXJ2aWNlLmdldFBvcnQoc2VydmljZVJlZmVyZW5jZS5nZXRXU0RMRWxlbWVudCgpLmdldE5hbWUoKSk7Ci0KLSAgICAgIC8vIEdldCBiaW5kaW5nCi0gICAgICBiaW5kaW5nID0gcG9ydC5nZXRCaW5kaW5nKCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHNlcnZpY2VSZWZlcmVuY2UuZ2V0V1NETEVsZW1lbnQoKS5pc0JpbmRpbmcoKSkKLSAgICB7Ci0gICAgICAvLyBHZXQgYmluZGluZwotICAgICAgYmluZGluZyA9Ci0gICAgICAgIGRlZmluaXRpb24uZ2V0QmluZGluZyhzZXJ2aWNlUmVmZXJlbmNlLmdldFdTRExFbGVtZW50KCkuZ2V0UU5hbWUoKSk7Ci0gICAgfQotCi0gICAgaWYgKGJpbmRpbmcgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKChlbmRwb2ludHMgPSBob3N0QW5kUG9ydENvcnJlbGF0aW9uKGVudHJ5Q29udGV4dCkpICE9IG51bGwKLSAgICAgICYmIHVybFBhdGhDb3JyZWxhdGlvbihlbnRyeUNvbnRleHQsIGVuZHBvaW50cykpCi0gICAgewotCi0gICAgICAvKiBJZiBjb3JyZWxhdGlvbiB0eXBlIGlzICJlbmRwb2ludCIsIHRoaXMgaXMgYWxsIHRoZSBjb3JyZWxhdGlvbiB0aGF0IGNhbiBiZSBkb25lLgotICAgICAgICogKE5vdGUgLSB0aGlzIGlzIGluY29tcGxldGUgY29ycmVsYXRpb24gc2luY2UgPjEgc2VydmljZSBjb3VsZCBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIGVuZHBvaW50LgotICAgICAgICogIFRoZXJlZm9yZSAsIGlmIG1lc3NhZ2VzIGZvciBkaWZmZXJlbnQgc2VydmljZXMgb24gdGhlIHNhbWUgZW5kcG9pbnQgYXBwZWFyIGluIHRoZSBsb2cgZmlsZQotICAgICAgICogIGFuZCBjb3JyZWxhdGlvbiB0eXBlIGlzICJlbmRwb2ludCIsIGFsbCB0aG9zZSBtZXNzYWdlcyB3aWxsIGJlIGFuYWx5emVkKS4KLSAgICAgICAqLwotICAgICAgaWYgKGNvcnJlbGF0aW9uVHlwZQotICAgICAgICAuZXF1YWxzKFdTSUNvbnN0YW50cy5BVFRSVkFMX0NPUlJFTEFUSU9OX1RZUEVfRU5EUE9JTlQpKQotICAgICAgewotICAgICAgICBjb3JyZWxhdGlvbiA9IHRydWU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIGFsd2F5cyBhbGxvdyBHRVQgcmVxdWVzdHMgcmlnaHQgdGhyb3VnaCBpZiB0aGV5J3ZlIHBhc3NlZCBFbmRwb2ludCBDb3JyZWxhdGlvbgotICAgICAgICBTdHJpbmcgcmVxdWVzdFR5cGUgPSBnZXRIdHRwUmVxdWVzdFR5cGUoZW50cnlDb250ZXh0KTsKLSAgICAgICAgaWYgKChyZXF1ZXN0VHlwZSAhPSBudWxsKSAmJiByZXF1ZXN0VHlwZS5lcXVhbHNJZ25vcmVDYXNlKCJHRVQiKSkKLSAgICAgICAgewotICAgICAgICAgIGNvcnJlbGF0aW9uID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBUaGUgY29ycmVsYXRpb25UeXBlIGlzIG5vdCAiZW5kcG9pbnQiIHNvIGNvbnRpbnVlIG9uIHRvIHByb2Nlc3NpbmcgZm9yIGF0IGxlYXN0IAotICAgICAgICAgIC8vICJuYW1lc3BhY2UiIGNvcnJlbGF0aW9uLi4uCi0KLSAgICAgICAgICAvLyBnZXQgdGhlIG9wZXJhdGlvbiBzaWduYXR1cmUgKGlucHV0ICYgb3V0cHV0KSBmcm9tIHJlcXVlc3QgJiByZXNwb25zZSBtZXNzYWdlcy4uLgkgICAKLSAgICAgICAgICAvLyBhbmQgZG8gYSBxdWljayBET00gcGFyc2UgCi0gICAgICAgICAgRG9jdW1lbnQgcmVxdWVzdE1lc3NhZ2UgPSBlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdERvY3VtZW50KCk7Ci0KLSAgICAgICAgICAvLyBDaGVjayBpZiBuYW1lc3BhY2UgaXMgZm91bmQgaW4gcmVxdWVzdCBtZXNzYWdlIG9ubHkKLSAgICAgICAgICBpZiAobmFtZXNwYWNlQ29ycmVsYXRpb24oYmluZGluZywgcmVxdWVzdE1lc3NhZ2UpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIElmIG5hbWVzcGFjZSBmb3VuZCBhbmQgdGhlIGNvcnJlbGF0aW9uIHR5cGUgaXMgbmFtZXNwYWNlLCB0aGVuIHByb2Nlc3MgbWVzc2FnZXMKLSAgICAgICAgICAgIGlmIChjb3JyZWxhdGlvblR5cGUKLSAgICAgICAgICAgICAgLmVxdWFscyhXU0lDb25zdGFudHMuQVRUUlZBTF9DT1JSRUxBVElPTl9UWVBFX05BTUVTUEFDRSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNvcnJlbGF0aW9uID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gSWYgb3BlcmF0aW9uIGlzIGZvdW5kIGFuZCBjb3JyZWxhdGlvbiB0eXBlIGlzIG9wZXJhdGlvbiwgdGhlbiBwcm9jZXNzIG1lc3NhZ2VzCi0gICAgICAgICAgICBlbHNlIGlmICgKLSAgICAgICAgICAgICAgKG9wZXJhdGlvbkNvcnJlbGF0aW9uKGJpbmRpbmcsIHJlcXVlc3RNZXNzYWdlKSkKLSAgICAgICAgICAgICAgICAmJiAoY29ycmVsYXRpb25UeXBlCi0gICAgICAgICAgICAgICAgICAuZXF1YWxzKFdTSUNvbnN0YW50cy5BVFRSVkFMX0NPUlJFTEFUSU9OX1RZUEVfT1BFUkFUSU9OKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNvcnJlbGF0aW9uID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIGlmIGNvbmZpZyBzY2hlbWEgd2FzIGZvbGxvd2VkIGNvcnJlY3RseQotICAgICAgICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICJCYWQgY29ycmVsYXRpb24gdHlwZSBmb3VuZCBpbiBjb25maWc6ICIgKyBjb3JyZWxhdGlvblR5cGUpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBjb3JyZWxhdGlvbjsKLSAgfQotCi0gIC8qKiAKLSAgICogIENvcnJlbGF0aW9uIENoZWNrIDE6IFNlcnZpY2UgRGVzY3JpcHRpb24gZW5kcG9pbnQgdnMgSFRUUCBIZWFkZXIgKHRlc3QgMSkKLSAgICogIENoZWNrIGlmIHJlY2VpdmVySG9zdEFuZFBvcnQgZnJvbSByZXF1ZXN0IG1lc3NhZ2UgbG9nIG1hdGNoZXMgaG9zdCAmIHBvcnQgZnJvbSBXU0RMIFNPQVAgYmluZGluZyBmb3IKLSAgICogIHRoZSBTZXJ2aWNlIHVuZGVyIHRlc3QuCi0gICAqICBJZiBpdCBkb2VzIG5vdCwgc3RvcCBwcm9jZXNzaW5nIHRoaXMgbWVzc2FnZSBwYWlyLgotICAgKiBAcGFyYW0gZW50cnlDb250ZXh0IGFuIGVudHJ5IGNvbnRleHQuCi0gICAqIEByZXR1cm4gaWYgcmVjZWl2ZXJIb3N0QW5kUG9ydCBmcm9tIHJlcXVlc3QgbWVzc2FnZSBsb2cgbWF0Y2hlcyAKLSAgICogICAgICAgICBob3N0ICYgcG9ydCBmcm9tIFdTREwgU09BUCBiaW5kaW5nIGZvciB0aGUgU2VydmljZS4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbSBvY2N1cnMgZHVyaW5nIGNvcnJlbGF0aW9uIGNoZWNrLgotICAgKi8KLSAgcHJpdmF0ZSBVUklbXSBob3N0QW5kUG9ydENvcnJlbGF0aW9uKEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICAvLyBnZXQgPHJlY2VpdmVySG9zdEFuZFBvcnQ+IGZyb20gcmVxdWVzdCBtZXNzYWdlCi0gICAgU3RyaW5nIGh0dHBIb3N0QW5kUG9ydCA9IGVudHJ5Q29udGV4dC5nZXRSZXF1ZXN0KCkuZ2V0UmVjZWl2ZXJIb3N0QW5kUG9ydCgpOwotICAgIC8vIFNlYXJjaCBlbmRwb2ludCBsaXN0IGZvciBhIG1hdGNoIHdpdGggPHJlY2VpdmVySG9zdEFuZFBvcnQ+Ci0KLSAgICAvKiBURU1QOiBHZXQgaXQgZnJvbSBhbmFseXplciBjb25maWcgcGFzc2VkIGluIG9uIGluaXQgbWV0aG9kCi0gICAgcmV0dXJuIGVudHJ5Q29udGV4dC5nZXRBbmFseXplckNvbnRleHQoKQotICAgICAgICAgICAgICAgICAgICAgICAuZ2V0Q2FuZGlkYXRlSW5mbygpCi0gICAgICAgICAgICAgICAgICAgICAgIC5nZXRFbmRQb2ludHMoaHR0cEhvc3RBbmRQb3J0KTsKLSAgICAqLwotICAgIHJldHVybiBhbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldEVuZFBvaW50cyhodHRwSG9zdEFuZFBvcnQpOwotICB9Ci0KLSAgLyoqIAotICAgKiBDb3JyZWxhdGlvbiBDaGVjayAyOiBTZXJ2aWNlIERlc2NyaXB0aW9uIGVuZHBvaW50IHZzIEhUVFAgSGVhZGVyICh0ZXN0IDIpCi0gICAqIAotICAgKiBVc2UgYW5hbHl6ZXIgY29uZmlnIGhvc3QgJiBwb3J0LCBwbHVzIFVSTCBwYXRoIChmcm9tIHJlcXVlc3QgbWVzc2FnZSBoZWFkZXIgSFRUUCBQT1NUKQotICAgKiB0byBsb29rIGZvciB0aGUgY29ycmVzcG9uZGluZyBlbmRwb2ludCBpbiB0aGUgU2VydmljZSBEZWZpbml0aW9uLgotICAgKiBJZiBpdCBkb2VzIG5vdCwgc3RvcCBwcm9jZXNzaW5nIHRoaXMgbWVzc2FnZSBwYWlyLgotICAgKiBAcGFyYW0gZW50cnlDb250ZXh0IGFuIGVudHJ5IGNvbnRleHQuCi0gICAqIEBwYXJhbSBlbmRwb2ludHMgYW4gYXJyYXkgb2YgZW5kcG9pbnRzLgotICAgKiBAcmV0dXJuIHRydWUgaWYgY29ycmVzcG9uZGluZyBlbmRwb2ludHMgYXJlIGZvdW5kIGluIHRoZSBTZXJ2aWNlIERlZmluaXRpb24uCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW0gb2NjdXJzIGR1cmluZyBjb3JyZWxhdGlvbiBjaGVjay4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiB1cmxQYXRoQ29ycmVsYXRpb24oCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCwKLSAgICBVUklbXSBlbmRwb2ludHMpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICAvLyBjb21wYXJlczogcHJvdG9jb2wgKG11c3QgYmUgaHR0cCBmb3IgUE9TVCksIGhvc3QsIHBvcnQgYW5kIHBhdGguCi0KLSAgICAvLyBnZXQgUE9TVCBVUkkgcGF0aCBmcm9tIG1lc3NhZ2UgdXNpbmcgVG9rZW5pemVyCQotICAgIFZlY3RvciByZXF1ZXN0TGluZSA9Ci0gICAgICBnZXRIdHRwUmVxdWVzdChlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdCgpLmdldEhUVFBIZWFkZXJzKCkpOwotICAgIGlmIChyZXF1ZXN0TGluZSA9PSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiBmYWxzZTsgLy8gYW4gdW5leHBlY3RlZCBIVFRQIHJlcXVlc3QgdHlwZSAhCi0gICAgfQotCi0gICAgU3RyaW5nIHJlcXVlc3RQYXRoID0gKFN0cmluZykgcmVxdWVzdExpbmUuZ2V0KDEpOwotICAgIC8vIFBhdGggaW1tZWRpYXRlbHkgZm9sbG93cyBQT1NUCi0KLSAgICAvLyBjb21wYXJlIHBhdGggd2l0aCB0aG9zZSBpbiB0aGUgcHJldmlvdXMgZ2VuZXJhdGVkIFVSSSBsaXN0CQotICAgIFZlY3RvciBmaWx0ZXJlZEVuZHBvaW50cyA9IG5ldyBWZWN0b3IoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGVuZHBvaW50cy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpZiAoZW5kcG9pbnRzW2ldLnRvU3RyaW5nKCkuZW5kc1dpdGgocmVxdWVzdFBhdGgpKQotICAgICAgewotICAgICAgICBmaWx0ZXJlZEVuZHBvaW50cy5hZGQoZW5kcG9pbnRzW2ldKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoZmlsdGVyZWRFbmRwb2ludHMuc2l6ZSgpID09IDApCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyB0aGlzIFVSSSBzaG91bGQgYmUgdW5pcXVlIGluIHRoZSBXU0RMIC0gdGhlcmUgc2hvdWxkIGJlIGF0IG1vc3Qgb25lIG1hdGNoCi0gICAgLy8gYnV0IGlmIHdlIGhhdmUgYXQgbGVhc3Qgb25lLCB0aGF0J3Mgc3VmZmljaWVudCB0byBhY2NlcHQgdGhlIG1lc3NhZ2UKLQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqIAotICAgKiBDb3JyZWxhdGlvbiBDaGVjayAzOiBTZXJ2aWNlIERlc2NyaXB0aW9uIG5hbWVzcGFjZS4KLSAgICogCi0gICAqIERldGVybWluZSBpZiB0aGUgU2VydmljZSBEZXNjcmlwdGlvbiBkZWNsYXJlcyB0aGUgbmFtZXNwYWNlIHRoYXQgYXBwZWFycyBpbiB0aGUgKHJlcXVlc3Q/KSBtZXNzYWdlIHNvYXAgYm9keS4KLSAgICogTG9jYXRpb24gb2YgcmVsZXZlbnQgbmFtZXNwYWNlIDoKLSAgICogT3BlcmF0aW9uIHR5cGUgICAgICAgICAgICAgICAgICAgIAktIE1lc3NhZ2UgTmFtZXNwYWNlOiAoY29tcGFyZSB3aXRoKSAgU2VydmljZSBEZWZpbml0aW9uIE5hbWVzcGFjZToKLSAgICogKGZyb20gbWVzc2FnZT8gZW5kcG9pbnQ/IHdoZXJlPykKLSAgICogcnBjLWxpdGVyYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAmbHQ7c29hcDpCb2R5Jmd0OyBjaGlsZCBuYW1lc3BhY2UuICAgICAgICAmbHQ7c29hcGJpbmQ6Ym9keSZndDsgbmFtZXNwYWNlLgotICAgKiBkb2MtbGl0ZXJhbAkJCSAgICAgICAgICAgICAgICAgJmx0O3NvYXA6Qm9keSZndDsgY2hpbGQgbmFtZXNwYWNlLiAgICAgICB0YXJnZXROYW1lU3BhY2Ugb2Ygc2NoZW1hIHRoYXQKLSAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMgICZsdDtzb2FwOmJvZHkmZ3Q7IGNoaWxkLgotICAgKiBJZiBpdCBkb2Vzbid0IG1hdGNoLCBzdG9wIHByb2Nlc3NpbmcgdGhpcyBtZXNzYWdlIHBhaXIuCi0gICAqIEBwYXJhbSBiaW5kaW5nIGEgYmluZGluZy4KLSAgICogQHBhcmFtIHJlcXVlc3QgYSByZXF1ZXN0LgotICAgKiBAcmV0dXJuIHRydWUgaWYgZGVzY3JpcHRpb24gZGVjbGFyZWQgaW4gdGhlIGRlc2NyaXB0aW9uIGFyZSB0aGUgCi0gICAqICAgICAgICAgc2FtZSBhcyB0aG9zZSB0aGF0IGFwcGVhciBpbiB0aGUgbWVzc2FnZSBzb2FwIGJvZHkuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW0gb2NjdXJzIGR1cmluZyBjb3JyZWxhdGlvbmNoZWNrLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gbmFtZXNwYWNlQ29ycmVsYXRpb24oQmluZGluZyBiaW5kaW5nLCBEb2N1bWVudCByZXF1ZXN0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIGJvb2xlYW4gbmFtZXNwYWNlRm91bmQgPSBmYWxzZTsKLSAgICBTdHJpbmcgYmluZGluZ1N0eWxlID0gV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQzsKLQotICAgIC8vIEdldCBvcGVyYXRpb24gbmFtZXNwYWNlIGZyb20gdGhlIHJlcXVlc3Qgc29hcCBtZXNzYWdlCi0gICAgU3RyaW5nIHNvYXBPcE5TID0gZ2V0U29hcEJvZHlDaGlsZChyZXF1ZXN0KS5nZXROYW1lc3BhY2VVUkkoKTsKLQotICAgIC8vIEdldCBzb2FwYmluZDpiaW5kaW5nCi0gICAgU09BUEJpbmRpbmcgc29hcEJpbmRpbmcgPSBudWxsOwotICAgIGlmICgoc29hcEJpbmRpbmcgPSBXU0RMVXRpbHMuZ2V0U29hcEJpbmRpbmcoYmluZGluZykpICE9IG51bGwpCi0gICAgewotICAgICAgYmluZGluZ1N0eWxlID0gc29hcEJpbmRpbmcuZ2V0U3R5bGUoKTsKLSAgICB9Ci0KLSAgICAvLyBHbyB0aHJvdWdoIGVhY2ggb3BlcmF0aW9uIGluIHRoZSBiaW5kaW5nIGFuZCBjaGVjayBmb3IgbmFtZXNwYWNlIG1hdGNoCi0gICAgSXRlcmF0b3Igb3BlcmF0aW9ucyA9IGJpbmRpbmcuZ2V0QmluZGluZ09wZXJhdGlvbnMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChvcGVyYXRpb25zLmhhc05leHQoKSAmJiAhKG5hbWVzcGFjZUZvdW5kKSkKLSAgICB7Ci0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbikgb3BlcmF0aW9ucy5uZXh0KCk7Ci0KLSAgICAgIC8vIElmIHJwYy1saXRlcmFsLCB0aGVuIGxvb2sgYXQgbmFtZXNwYWNlIGF0dHJpYnV0ZSBvbiBzb2FwYmluZDpib2R5Ci0gICAgICBpZiAoV1NETFV0aWxzLmlzUnBjTGl0ZXJhbChiaW5kaW5nU3R5bGUsIGJpbmRpbmdPcGVyYXRpb24pKQotICAgICAgewotICAgICAgICAvLyBHZXQgc29hcGJpbmQ6Ym9keSBlbGVtZW50IAotICAgICAgICBTT0FQQm9keSBzb2FwQm9keSA9IFdTRExVdGlscy5nZXRJbnB1dFNvYXBCb2R5KGJpbmRpbmdPcGVyYXRpb24pOwotCi0gICAgICAgIGlmICgoc29hcEJvZHkuZ2V0TmFtZXNwYWNlVVJJKCkgIT0gbnVsbCkKLSAgICAgICAgICAmJiAoc29hcEJvZHkuZ2V0TmFtZXNwYWNlVVJJKCkuZXF1YWxzKHNvYXBPcE5TKSkpCi0gICAgICAgIHsKLSAgICAgICAgICBuYW1lc3BhY2VGb3VuZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8gSWYgZG9jLWxpdGVyYWwsIHRoZW4gY2hlY2sgbmFtZXNwYWNlCi0gICAgICBlbHNlIGlmIChXU0RMVXRpbHMuaXNEb2NMaXRlcmFsKGJpbmRpbmdTdHlsZSwgYmluZGluZ09wZXJhdGlvbikpCi0gICAgICB7Ci0gICAgICAgIGludCBwYXJ0Q291bnQ7Ci0gICAgICAgIEl0ZXJhdG9yIHBhcnRzSXRlcmF0b3IgPSBudWxsOwotCi0gICAgICAgIC8vIEdldCBmaXJzdCBwYXJ0IG5hbWUgZnJvbSBzb2FwYmluZDpib2R5IGVsZW1lbnQgcGFydHMgYXR0cmlidXRlCi0gICAgICAgIFN0cmluZyBwYXJ0TmFtZSA9IGdldEZpcnN0UGFydE5hbWUoYmluZGluZ09wZXJhdGlvbik7Ci0KLSAgICAgICAgLy8gR2V0IHRoZSBsaXN0IG9mIHBhcnRzIGZyb20gdGhlIG1lc3NhZ2UgICAgICAgICAgIAotICAgICAgICBNYXAgcGFydHNNYXAgPSBudWxsOwotICAgICAgICBpZiAoKHBhcnRzTWFwID0KLSAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLmdldE9wZXJhdGlvbigpLmdldElucHV0KCkuZ2V0TWVzc2FnZSgpLmdldFBhcnRzKCkpCi0gICAgICAgICAgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHBhcnRzSXRlcmF0b3IgPSBwYXJ0c01hcC52YWx1ZXMoKS5pdGVyYXRvcigpOwotCi0gICAgICAgICAgLy8gSWYgdGhlIHBhcnQgbmFtZSB3YXNuJ3Qgc3BlY2lmaWVkIG9uIHRoZSBzb2FwYmluZDpib2R5IGVsZW1lbnQsIHRoZW4gcHJvY2VzcyBqdXN0IHRoZSBmaXJzdCBvbmUKLSAgICAgICAgICBpZiAocGFydE5hbWUgPT0gbnVsbCkKLSAgICAgICAgICAgIHBhcnRDb3VudCA9IDE7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgcGFydENvdW50ID0gcGFydHNNYXAuc2l6ZSgpOwotCi0gICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJ0Q291bnQgJiYgIW5hbWVzcGFjZUZvdW5kOyBpKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gR2V0IG5leHQgcGFydAotICAgICAgICAgICAgUGFydCBwYXJ0ID0gKFBhcnQpIHBhcnRzSXRlcmF0b3IubmV4dCgpOwotCi0gICAgICAgICAgICAvLyBJZiBwYXJ0IG5hbWUgbWF0Y2hlcyBvciB0aGVyZSBpcyBubyBwYXJ0IG5hbWUsIHRoZW4gY2hlY2sgbmFtZXNwYWNlCi0gICAgICAgICAgICBpZiAoKHBhcnROYW1lID09IG51bGwpCi0gICAgICAgICAgICAgIHx8ICgocGFydE5hbWUgIT0gbnVsbCkgJiYgKHBhcnQuZ2V0TmFtZSgpLmVxdWFscyhwYXJ0TmFtZSkpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgaWYgKChwYXJ0LmdldEVsZW1lbnROYW1lKCkuZ2V0TmFtZXNwYWNlVVJJKCkgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAmJiAocGFydC5nZXRFbGVtZW50TmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpLmVxdWFscyhzb2FwT3BOUykpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbmFtZXNwYWNlRm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG5hbWVzcGFjZUZvdW5kOwotICB9Ci0KLSAgLyoqIAotICAqIENvcnJlbGF0aW9uIENoZWNrIDQgOiBTZXJ2aWNlIERlc2NyaXB0aW9uICJvcGVyYXRpb24iCi0gICoKLSAgKiBDaGVjayBpZiB0aGUgbWVzc2FnZSBjb250ZW50IG1hdGNoZXMgYW55IG9mIHRoZSBjYW5kaWRhdGUgb3BlcmF0aW9uIGRlZmluaXRpb25zIAotICAqIGZvciByZXF1ZXN0IGFuZCByZXNwb25zZSBpbiB0aGUgU2VydmljZSBEZXNjcmlwdGlvbi4KLSAgKiAgCi0gICogRm9yIGJvdGggcmVxdWVzdCBhbmQgcmVzcG9uc2UsIGxvb2sgZm9yIHRoZSBzb2FwIGJvZHkgY2hpbGQgZWxlbWVudCBuYW1lCi0gICogaW4gdGhlIGxpc3Qgb2YgY2FuZGlkYXRlIG9wZXJhdGlvbiBuYW1lcy4KLSAgKiBAcGFyYW0gYmluZGluZyAgICAgICAgYSBiaW5kaW5nLgotICAqIEBwYXJhbSByZXF1ZXN0TWVzc2FnZSBhIHJlcXVlc3QgbWVzc2FnZS4KLSAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIG1lc3NhZ2UgY29udGVudCBtYXRjaGVzIGFueSBvZiB0aGUgY2FuZGlkYXRlIAotICAqICAgICAgICAgb3BlcmF0aW9uIGRlZmluaXRpb25zIGZvciByZXF1ZXN0IGFuZCByZXNwb25zZSBpbiB0aGUgCi0gICogICAgICAgICBTZXJ2aWNlIERlc2NyaXB0aW9uLgotICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW0gb2NjdXJzIGR1cmluZyBjb3JyZWxhdGlvbmNoZWNrLgotICAqLwotICBwcml2YXRlIGJvb2xlYW4gb3BlcmF0aW9uQ29ycmVsYXRpb24oCi0gICAgQmluZGluZyBiaW5kaW5nLAotICAgIERvY3VtZW50IHJlcXVlc3RNZXNzYWdlKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIGJvb2xlYW4gb3BlcmF0aW9uRm91bmQgPSBmYWxzZTsKLQotICAgIFN0cmluZyBiaW5kaW5nU3R5bGUgPSBXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JJTkRfU1RZTEVfRE9DOwotCi0gICAgLy8gR2V0IHNvYXBiaW5kOmJpbmRpbmcKLSAgICBTT0FQQmluZGluZyBzb2FwQmluZGluZyA9IG51bGw7Ci0gICAgaWYgKChzb2FwQmluZGluZyA9IFdTRExVdGlscy5nZXRTb2FwQmluZGluZyhiaW5kaW5nKSkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBiaW5kaW5nU3R5bGUgPSBzb2FwQmluZGluZy5nZXRTdHlsZSgpOwotICAgIH0KLQotICAgIC8vIEdldCB0aGUgZmlyc3QgY2hpbGQgZWxlbWVudCBmcm9tIHRoZSBzb2FwIGJvZHkKLSAgICBFbGVtZW50IHNvYXBCb2R5Q2hpbGQgPSBnZXRTb2FwQm9keUNoaWxkKHJlcXVlc3RNZXNzYWdlKTsKLQotICAgIC8vIElmIHRoZXJlIGlzIGEgY2hpbGQgZWxlbWVudCwgdGhlbiBjaGVjayBpdAotICAgIGlmIChzb2FwQm9keUNoaWxkICE9IG51bGwpCi0gICAgewotICAgICAgLy8gR2V0IG9wZXJhdGlvbiBuYW1lIGZyb20gdGhlIHNvYXA6Ym9keQotICAgICAgU3RyaW5nIG9wZXJhdGlvbk5hbWUgPSBzb2FwQm9keUNoaWxkLmdldExvY2FsTmFtZSgpOwotCi0gICAgICAvLyBHZXQgb3BlcmF0aW9uIFFOYW1lCi0gICAgICBRTmFtZSBvcGVyYXRpb25RTmFtZSA9Ci0gICAgICAgIG5ldyBRTmFtZShzb2FwQm9keUNoaWxkLmdldE5hbWVzcGFjZVVSSSgpLCBvcGVyYXRpb25OYW1lKTsKLQotICAgICAgLy8gR28gdGhyb3VnaCBlYWNoIG9wZXJhdGlvbiBpbiB0aGUgYmluZGluZyBhbmQgY2hlY2sgZm9yIG5hbWVzcGFjZSBtYXRjaAotICAgICAgSXRlcmF0b3Igb3BlcmF0aW9ucyA9IGJpbmRpbmcuZ2V0QmluZGluZ09wZXJhdGlvbnMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKG9wZXJhdGlvbnMuaGFzTmV4dCgpICYmICEob3BlcmF0aW9uRm91bmQpKQotICAgICAgewotICAgICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPQotICAgICAgICAgIChCaW5kaW5nT3BlcmF0aW9uKSBvcGVyYXRpb25zLm5leHQoKTsKLQotICAgICAgICAvLyBJZiBycGMtbGl0ZXJhbCwgdGhlbiBsb29rIGF0IG5hbWVzcGFjZSBhdHRyaWJ1dGUgb24gc29hcGJpbmQ6Ym9keQotICAgICAgICBpZiAoV1NETFV0aWxzLmlzUnBjTGl0ZXJhbChiaW5kaW5nU3R5bGUsIGJpbmRpbmdPcGVyYXRpb24pKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gR2V0IHNvYXBiaW5kOmJvZHkgZWxlbWVudCAKLSAgICAgICAgICBpZiAoYmluZGluZ09wZXJhdGlvbi5nZXROYW1lKCkuZXF1YWxzKG9wZXJhdGlvbk5hbWUpKQotICAgICAgICAgICAgb3BlcmF0aW9uRm91bmQgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgZG9jLWxpdGVyYWwsIHRoZW4gY2hlY2sgbmFtZXNwYWNlCi0gICAgICAgIGVsc2UgaWYgKFdTRExVdGlscy5pc0RvY0xpdGVyYWwoYmluZGluZ1N0eWxlLCBiaW5kaW5nT3BlcmF0aW9uKSkKLSAgICAgICAgewotICAgICAgICAgIGludCBwYXJ0Q291bnQ7Ci0gICAgICAgICAgSXRlcmF0b3IgcGFydHNJdGVyYXRvciA9IG51bGw7Ci0KLSAgICAgICAgICAvLyBHZXQgZmlyc3QgcGFydCBuYW1lIGZyb20gc29hcGJpbmQ6Ym9keSBlbGVtZW50IHBhcnRzIGF0dHJpYnV0ZQotICAgICAgICAgIFN0cmluZyBwYXJ0TmFtZSA9IGdldEZpcnN0UGFydE5hbWUoYmluZGluZ09wZXJhdGlvbik7Ci0KLSAgICAgICAgICAvLyBHZXQgdGhlIGxpc3Qgb2YgcGFydHMgZnJvbSB0aGUgbWVzc2FnZSAgICAgICAgICAgCi0gICAgICAgICAgTWFwIHBhcnRzTWFwID0gbnVsbDsKLSAgICAgICAgICBpZiAoKHBhcnRzTWFwID0KLSAgICAgICAgICAgIGJpbmRpbmdPcGVyYXRpb24uZ2V0T3BlcmF0aW9uKCkuZ2V0SW5wdXQoKS5nZXRNZXNzYWdlKCkuZ2V0UGFydHMoKSkKLSAgICAgICAgICAgICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgcGFydHNJdGVyYXRvciA9IHBhcnRzTWFwLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0KLSAgICAgICAgICAgIC8vIElmIHRoZSBwYXJ0IG5hbWUgd2Fzbid0IHNwZWNpZmllZCBvbiB0aGUgc29hcGJpbmQ6Ym9keSBlbGVtZW50LCB0aGVuIHByb2Nlc3MganVzdCB0aGUgZmlyc3Qgb25lCi0gICAgICAgICAgICBpZiAocGFydE5hbWUgPT0gbnVsbCkKLSAgICAgICAgICAgICAgcGFydENvdW50ID0gMTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgcGFydENvdW50ID0gcGFydHNNYXAuc2l6ZSgpOwotCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhcnRDb3VudCAmJiAhb3BlcmF0aW9uRm91bmQ7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gR2V0IG5leHQgcGFydAotICAgICAgICAgICAgICBQYXJ0IHBhcnQgPSAoUGFydCkgcGFydHNJdGVyYXRvci5uZXh0KCk7Ci0KLSAgICAgICAgICAgICAgLy8gSWYgcGFydCBuYW1lIG1hdGNoZXMgb3IgdGhlcmUgaXMgbm8gcGFydCBuYW1lLCB0aGVuIGNoZWNrIG5hbWVzcGFjZQotICAgICAgICAgICAgICBpZiAoKHBhcnROYW1lID09IG51bGwpCi0gICAgICAgICAgICAgICAgfHwgKChwYXJ0TmFtZSAhPSBudWxsKSAmJiAocGFydC5nZXROYW1lKCkuZXF1YWxzKHBhcnROYW1lKSkpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKChwYXJ0LmdldEVsZW1lbnROYW1lKCkgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICYmIChwYXJ0LmdldEVsZW1lbnROYW1lKCkuZXF1YWxzKG9wZXJhdGlvblFOYW1lKSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uRm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIC8vIEdvIHRocm91Z2ggZWFjaCBvcGVyYXRpb24gdG8gZmluZCBhIG1hdGNoCi0gICAgcmV0dXJuIG9wZXJhdGlvbkZvdW5kOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBmYWlsdXJlIGRldGFpbC4KLSAgICogQHBhcmFtIG1lc3NhZ2UgICAgICAgYSBtZXNzYWdlLgotICAgKiBAcGFyYW0gZW50cnlDb250ZXh0ICBhbiBlbnRyeSBjb250ZXh0LgotICAgKiBAcmV0dXJuIGZhaWx1cmUgZGV0YWlsLgotICAgKi8KLSAgcHVibGljIEZhaWx1cmVEZXRhaWwgY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICBTdHJpbmcgbWVzc2FnZSwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICB7Ci0gICAgRmFpbHVyZURldGFpbCBmYWlsdXJlRGV0YWlsID0gcmVwb3J0ZXIuY3JlYXRlRmFpbHVyZURldGFpbCgpOwotICAgIGZhaWx1cmVEZXRhaWwuc2V0RmFpbHVyZU1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgZmFpbHVyZURldGFpbC5zZXRFbGVtZW50TG9jYXRpb24oCi0gICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0RWxlbWVudExvY2F0aW9uKCkpOwotICAgIHJldHVybiBmYWlsdXJlRGV0YWlsOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsI2lzTm90QXBwbGljYWJsZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uKQotICAgKi8KLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNOb3RBcHBsaWNhYmxlKFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbikKLSAgewotICAgIGJvb2xlYW4gbm90QXBwbGljYWJsZSA9IGZhbHNlOwotCi0gICAgLy8gSWYgdGhlIGFkZGl0aW9uYWwgZW50cnkgaXMgbm90IGF2YWlsYWJsZSwgdGhlbiBzZXQgbm90QXBwbGljYWJsZQotICAgIGlmICh0ZXN0QXNzZXJ0aW9uLmdldEFkZGl0aW9uYWxFbnRyeVR5cGVMaXN0KCkuZ2V0V1NETElucHV0KCkgIT0gbnVsbAotICAgICAgJiYgIXRlc3RBc3NlcnRpb24uZ2V0QWRkaXRpb25hbEVudHJ5VHlwZUxpc3QoKS5nZXRXU0RMSW5wdXQoKS5lcXVhbHMoIm5vbmUiKQotICAgICAgJiYgYW5hbHl6ZXJDb250ZXh0LmdldFNlcnZpY2VSZWZlcmVuY2UoKS5nZXRXU0RMTG9jYXRpb24oKSA9PSBudWxsKQotICAgIHsKLSAgICAgIG5vdEFwcGxpY2FibGUgPSB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBub3RBcHBsaWNhYmxlOwotICB9Ci0KLQotICAvKioKLSAgICogR2V0IFBPU1QgcmVxdWVzdC4KLSAgICogQHBhcmFtIGh0dHBIZWFkZXIgYW4gSFRUUCAKLSAgICogQHJldHVybiBQT1NUIHJlcXVlc3QuCi0gICAqLwotICBwdWJsaWMgVmVjdG9yIGdldFBvc3RSZXF1ZXN0KFN0cmluZyBodHRwSGVhZGVyKQotICB7Ci0gICAgLy9SZXF1ZXN0LUxpbmUgICA9IE1ldGhvZCBTUCBSZXF1ZXN0LVVSSSBTUCBIVFRQLVZlcnNpb24gQ1JMRgotICAgIFZlY3RvciByZXF1ZXN0TGluZSA9IG5ldyBWZWN0b3IoKTsKLSAgICBTdHJpbmcgc3RhcnRMaW5lID0gbnVsbDsKLQotICAgIFN0cmluZ1Rva2VuaXplciBodHRwTWVzc2FnZVRva2VuaXplciA9Ci0gICAgICBuZXcgU3RyaW5nVG9rZW5pemVyKGh0dHBIZWFkZXIsICJcblxyXGYiKTsKLQotICAgIGlmIChodHRwTWVzc2FnZVRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpCi0gICAgewotICAgICAgc3RhcnRMaW5lID0gaHR0cE1lc3NhZ2VUb2tlbml6ZXIubmV4dFRva2VuKCk7Ci0gICAgfQotCi0gICAgaWYgKHN0YXJ0TGluZS5zdGFydHNXaXRoKCJQT1NUIikpCi0gICAgewotICAgICAgU3RyaW5nVG9rZW5pemVyIHN0YXJ0TGluZVRva2VuaXplciA9Ci0gICAgICAgIG5ldyBTdHJpbmdUb2tlbml6ZXIoc3RhcnRMaW5lLCAiXHUwMDIwIik7Ci0gICAgICB3aGlsZSAoc3RhcnRMaW5lVG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkKLSAgICAgIHsKLSAgICAgICAgcmVxdWVzdExpbmUuYWRkKHN0YXJ0TGluZVRva2VuaXplci5uZXh0VG9rZW4oKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXF1ZXN0TGluZTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgSFRUUCByZXF1ZXN0LgotICAgKiBAcGFyYW0gaHR0cEhlYWRlciBhbiBIVFRQIAotICAgKiBAcmV0dXJuIEhUVFAgcmVxdWVzdC4KLSAgKi8KLSAgcHJpdmF0ZSBWZWN0b3IgZ2V0SHR0cFJlcXVlc3QoU3RyaW5nIGh0dHBIZWFkZXIpCi0gIHsKLSAgICAvL1JlcXVlc3QtTGluZSAgID0gTWV0aG9kIFNQIFJlcXVlc3QtVVJJIFNQIEhUVFAtVmVyc2lvbiBDUkxGCi0gICAgVmVjdG9yIHJlcXVlc3RMaW5lID0gbmV3IFZlY3RvcigpOwotICAgIFN0cmluZyBzdGFydExpbmUgPSBudWxsOwotCi0gICAgU3RyaW5nVG9rZW5pemVyIGh0dHBNZXNzYWdlVG9rZW5pemVyID0KLSAgICAgIG5ldyBTdHJpbmdUb2tlbml6ZXIoaHR0cEhlYWRlciwgIlxuXHJcZiIpOwotCi0gICAgaWYgKGh0dHBNZXNzYWdlVG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkKLSAgICB7Ci0gICAgICBzdGFydExpbmUgPSBodHRwTWVzc2FnZVRva2VuaXplci5uZXh0VG9rZW4oKTsKLSAgICB9Ci0KLSAgICBpZiAoc3RhcnRMaW5lLnN0YXJ0c1dpdGgoIlBPU1QiKSB8fCBzdGFydExpbmUuc3RhcnRzV2l0aCgiR0VUIikpCi0gICAgewotICAgICAgU3RyaW5nVG9rZW5pemVyIHN0YXJ0TGluZVRva2VuaXplciA9Ci0gICAgICAgIG5ldyBTdHJpbmdUb2tlbml6ZXIoc3RhcnRMaW5lLCAiXHUwMDIwIik7Ci0gICAgICB3aGlsZSAoc3RhcnRMaW5lVG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkKLSAgICAgIHsKLSAgICAgICAgcmVxdWVzdExpbmUuYWRkKHN0YXJ0TGluZVRva2VuaXplci5uZXh0VG9rZW4oKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXF1ZXN0TGluZSA9IG51bGw7IC8vIHNpZ25pZnkgbm90IFBPU1Qgb3IgR0VUCi0gICAgfQotCi0gICAgcmV0dXJuIHJlcXVlc3RMaW5lOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBIVFRQIHJlcXVlc3QgdHlwZS4KLSAgICogQHBhcmFtIGVudHJ5Q29udGV4dCBhbiBlbnRyeSBjb250ZXh0LgotICAgKiBAcmV0dXJuIEhUVFAgcmVxdWVzdCB0eXBlLgotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0SHR0cFJlcXVlc3RUeXBlKEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gIHsKLSAgICAvL1JlcXVlc3QtTGluZSAgID0gTWV0aG9kIFNQIFJlcXVlc3QtVVJJIFNQIEhUVFAtVmVyc2lvbiBDUkxGCi0KLSAgICBTdHJpbmcgaHR0cEhlYWRlciA9IGVudHJ5Q29udGV4dC5nZXRSZXF1ZXN0KCkuZ2V0SFRUUEhlYWRlcnMoKTsKLSAgICBTdHJpbmcgaHR0cFJlcXVlc3RUeXBlID0gbnVsbDsKLSAgICBTdHJpbmcgc3RhcnRMaW5lID0gbnVsbDsKLQotICAgIFN0cmluZ1Rva2VuaXplciBodHRwTWVzc2FnZVRva2VuaXplciA9Ci0gICAgICBuZXcgU3RyaW5nVG9rZW5pemVyKGh0dHBIZWFkZXIsICJcblxyXGYiKTsKLQotICAgIGlmIChodHRwTWVzc2FnZVRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpCi0gICAgewotICAgICAgc3RhcnRMaW5lID0gaHR0cE1lc3NhZ2VUb2tlbml6ZXIubmV4dFRva2VuKCk7Ci0gICAgICBTdHJpbmdUb2tlbml6ZXIgc3RhcnRMaW5lVG9rZW5pemVyID0KLSAgICAgICAgbmV3IFN0cmluZ1Rva2VuaXplcihzdGFydExpbmUsICJcdTAwMjAiKTsKLSAgICAgIGlmIChzdGFydExpbmVUb2tlbml6ZXIuaGFzTW9yZVRva2VucygpKQotICAgICAgewotICAgICAgICBodHRwUmVxdWVzdFR5cGUgPSBzdGFydExpbmVUb2tlbml6ZXIubmV4dFRva2VuKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBodHRwUmVxdWVzdFR5cGU7Ci0gIH0KLQotICAvKioKLSAgICogRGV0ZXJtaW5lIGlmIHRoZSBtZXNzYWdlIGlzIGEgcmVzcG9uc2UgZm9yIGEgb25lLXdheSBvcGVyYXRpb24uCi0gICAqIEBwYXJhbSBlbnRyeUNvbnRleHQgYW4gZW50cnkgY29udGV4dC4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBtZXNzYWdlIGlzIGEgcmVzcG9uc2UgZm9yIGEgb25lLXdheSBvcGVyYXRpb24uCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc09uZVdheVJlc3BvbnNlKEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gIHsKLSAgICBib29sZWFuIG9uZXdheSA9IGZhbHNlOwotCi0gICAgLy8gVEVNUDogSWYgdGhpcyBpcyBhIHJlc3BvbnNlIG1lc3NhZ2UgYW5kIHRoZXJlIGlzIG5vIGNvbnRlbnQsIHRoZW4gc2V0IG9uZS13YXkgdG8gdHJ1ZQotICAgIC8vIFRFTVA6IE5lZWQgdG8gZmluZCBhIHdheSB0byBkZXRlcm1pbmUgaWYgdGhlIHJlc3BvbnNlIGlzIGZvciBhIG9uZS13YXkgbWVzc2FnZQotICAgIGlmIChlbnRyeUNvbnRleHQKLSAgICAgIC5nZXRNZXNzYWdlRW50cnkoKQotICAgICAgLmdldFR5cGUoKQotICAgICAgLmVxdWFsc0lnbm9yZUNhc2UoTWVzc2FnZUVudHJ5LlRZUEVfUkVTUE9OU0UpCi0gICAgICAmJiBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpLmxlbmd0aCgpID09IDApCi0gICAgewotICAgICAgb25ld2F5ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gb25ld2F5OwotICB9Ci0KLSAgLyoqCi0gICAqIG1lc3NhZ2VJc0RvY0xpdFNjaGVtYVZhbGlkLgotICAgKgotICAgKiBWYWxpZGF0ZXMgdGhlIGRvYy1saXQgbWVzc2FnZXMgYWdhaW5zdCB0aGUgc2NoZW1hIGZvdW5kIGluIGEgY2FuZGlkYXRlIHdzZGwgZG9jdW1lbnQuCi0gICAqCi0gICAqIElkZW50aWZ5IChvciBiZSBnaXZlbikgYSByZWZlcmVuY2UgaW4gdGhlIHdzZGwgdG8gZWxlbWVudHMgKGZvdW5kIGluICZsdDt3c2RsOnR5cGVzJmd0OyZsdDtzY2hlbWEmZ3Q7Li4uKQotICAgKiB0aGF0IGFyZSBpbW1lZGlhdGUgY2hpbGRyZW4gZWxlbWVudHMgaW4gdGhlIHNvYXAgYm9keS4KLSAgICogQHBhcmFtIGVudHJ5Q29udGV4dCBhbiBlbnRyeSBjb250ZXh0LgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGRvY3VtZW50IGxpdGVyYWwgbWVzc2FnZSBpcyBjb21wbGlhbnQgdG8gdGhlIAotICAgKiAgICAgICAgIHNjaGVtYSBmb3VuZCBpbiBhIGNhbmRpZGF0ZSBXU0RMIGRvY3VtZW50LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBhIHBhcnNpbmcgcHJvYmxlbSBkdXJpbmcgdmFsaWRhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIG1lc3NhZ2VJc0RvY0xpdFNjaGVtYVZhbGlkKEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICAvLyBUaGlzIG1ldGhvZCBzaG91bGQgdXNlIGEgdmFsaWRhdGluZyBwYXJzZXIgdGhhdCBpcyBjYXBhYmxlIG9mIGFjY2VwcHRpbmcgbXVsdGlwbGUgc2NoZW1hIHJlZmVyZW5jZXMKLSAgICAvLyBwcm9ncmFtbWF0aWNhbGx5LiBUaGVuLCBldmVyeSBzY2hlbWEgaW4gY2FuZGlkYXRlIHdzZGwgY2FuIGJlIHBhc3NlZCBpbiB0byB0aGUgdmFsaWRhdG9yLiBUaGlzIGF2b2lkcyB0aGUKLSAgICAvLyBuZWVkIHRvIHBpbnBvaW50IGEgcGFydGljdWxhciBzY2hlbWEgZWxlbWVudCBmcm9tIGFsbCBjYW5kaWRhdGUgd3NkbDp0eXBlcywgY29ycmVzcG9uZGluZyB0byB0aGUgCi0gICAgLy8gd3NkbDpvcGVyYXRpb24gYmVpbmcgdXNlZC4gVGhlIHBpbnBvaW50aW5nIGlzIGFuIGluY29tcGxldGUgd29ya2Fyb3VuZCBmb3IgcGFyc2VycyBub3QgY2FwYWJsZSAKLSAgICAvLyBvZiBhY2NlcHRpbmcgYXJyYXlzIG9mIHNjZWhtYSByZWZlcmVuY2VzIAotICAgIC8vIFsgaS5lLiB0aGUgRE9NIGZhY3Rvcnkuc2V0QXR0cmlidXRlKEpBWFBfU0NIRU1BIFNPVVJDRSwgT2JqZWN0W10gey4uLn0pIF0KLSAgICAvLyBnZXQgYWxsIHhzOnNjaGVtYSBmcm9tIGFsbCBjYW5kaWRhdGUgd3NkbDp0eXBlcyAgICAgICAgICAgICAgICAgICAgCi0gICAgLy8gYWRkIGVhY2ggPHNjaGVtYT4gdG8gYW4gYXJyYXkgYW5kIHBhc3MgdGhpcyBhcnJheSB0byB0aGUgdmFsaWRhdGluZyBwYXJzZXIKLSAgICAvLyB3aGVuIHZhbGlkYXRpbmcgdGhlL2VhY2ggc29hcCBib2R5IGNoaWxkLgotCi0gICAgLy8gdXNlIHRoZSByZWZlcmVuY2VkIFdTREwgZmlsZSBhbmQgaXRzIGltcG9ydGVkIGZpbGVzIHRvIGZpbmQgc2NoZW1hcwotICAgIExpc3Qgc2NoZW1hV1NETHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgTGlzdCBpbmxpbmVTY2hlbWFzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIExpc3Qgc2NoZW1hU3RyaW5ncyA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAgIERlZmluaXRpb25bXSBhbGxEZWZzID0KLSAgICAgIGFuYWx5emVyQ29udGV4dC5nZXRDYW5kaWRhdGVJbmZvKCkuZ2V0RGVmaW5pdGlvbnMoKTsKLSAgICBmb3IgKGludCB0aGlzRGVmID0gMDsgdGhpc0RlZiA8IGFsbERlZnMubGVuZ3RoOyB0aGlzRGVmKyspCi0gICAgewotICAgICAgc2NoZW1hV1NETHMuYWRkKGFsbERlZnNbdGhpc0RlZl0uZ2V0RG9jdW1lbnRCYXNlVVJJKCkpOwotICAgIH0KLSAgICBJdGVyYXRvciBmaWxlSXRlcmF0b3IgPSBzY2hlbWFXU0RMcy5pdGVyYXRvcigpOwotICAgIHdoaWxlIChmaWxlSXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIC8vIHBhcnNlIGZpbGUgaWYgcG9zc2libGUKLSAgICAgIERvY3VtZW50IHdzZGxEb2MgPSBudWxsOwotICAgICAgU3RyaW5nIHdzZGxVUkkgPSAoU3RyaW5nKSBmaWxlSXRlcmF0b3IubmV4dCgpOwotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIHdzZGxEb2MgPSBYTUxVdGlscy5wYXJzZVhNTERvY3VtZW50VVJMKHdzZGxVUkksIG51bGwpOwotICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAgIEVsZW1lbnQgcm9vdCA9IHdzZGxEb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICAvLyBmaW5kIHRoZSBzY2hlbWEKLSAgICAgIE5vZGVMaXN0IHNjaGVtYUVsZW1lbnRzID0gcm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKAotICAgICAgICBXU0lUYWcuRUxFTV9YU0RfU0NIRU1BLmdldE5hbWVzcGFjZVVSSSgpLAotICAgICAgICBXU0lUYWcuRUxFTV9YU0RfU0NIRU1BLmdldExvY2FsUGFydCgpKTsKLQotICAgICAgZm9yIChpbnQgZWxlbSA9IDA7IGVsZW0gPCBzY2hlbWFFbGVtZW50cy5nZXRMZW5ndGgoKTsgZWxlbSsrKQotICAgICAgeyAgICAgCi0gICAgICAgIEVsZW1lbnQgc2NoZW1hID0gKEVsZW1lbnQpIHNjaGVtYUVsZW1lbnRzLml0ZW0oZWxlbSk7Ci0gICAgICAgIC8vIGNvcHlpbmcgYWxsIHRoZSBOUyBkZWNsYXJhdGlvbnMgZnJvbSB3c2RsOmRlZmluaXRpb25zIHdzZGw6dHlwZXMKLSAgICAgICAgY29weU5TRGVjbGFyYXRpb25zKHJvb3QsIHNjaGVtYSk7Ci0gICAgICAgIGNvcHlOU0RlY2xhcmF0aW9ucygoRWxlbWVudCkgc2NoZW1hLmdldFBhcmVudE5vZGUoKSwgc2NoZW1hKTsKLSAgICAgICAgLy8gUmVwbGFjaW5nIGFsbCByZWxhdGl2ZSBzY2hlbWFMb2NhdGlvbiBVUklzIHdpdGggYWJzb2x1dGUgb25lcwotICAgICAgICByZXBsYWNlUmVsYXRpdmVVUklzKHNjaGVtYSwgd3NkbFVSSSk7Ci0gICAgICAgIGlubGluZVNjaGVtYXMuYWRkKHNjaGVtYSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gTm90ZSB0aGF0IHRoZSBYZXJjZXMgcGFyc2VyIE9OTFkgYWNjZXB0cyBhbiBhcnJheQotICAgIC8vIG9mIHNjaGVtYXMgd2l0aCB1bmlxdWUgbmFtZXNwYWNlcy4KLSAgICBpZiAoIWR1cGxpY2F0ZU5hbWVzcGFjZXNEZXRlY3RlZChpbmxpbmVTY2hlbWFzKSkKLSAgICB7Ci0gICAgICAvLyBTZXJpYWxpemUgdGhlIHNjaGVtYSBlbGVtZW50cyBpbnNpZGUgdGhlIFR5cGVzLCB0aGVuIHVzZSB0aGlzIGFzCi0gICAgICAvLyB0aGUgc2NoZW1hIHN0cmluZyBmb3IgdGhlIHZhbGlkYXRpb24KLSAgICAgIEl0ZXJhdG9yIGkgPSBpbmxpbmVTY2hlbWFzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaS5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgCUVsZW1lbnQgc2NoZW1hID0gKEVsZW1lbnQpaS5uZXh0KCk7IAotICAgICAgICBTdHJpbmcgc2NoZW1hU3RyaW5nID0gRE9NMldyaXRlci5ub2RlVG9TdHJpbmcoc2NoZW1hKTsKLSAgICAgICAgc2NoZW1hU3RyaW5ncy5hZGQoc2NoZW1hU3RyaW5nKTsKLSAgICAgIH0KLQotICAgICAgTm9kZUxpc3QgZWxlbWVudExpc3QgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKQotICAgICAgICAuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUyhXU0lUYWcuRUxFTV9TT0FQX0JPRFkuZ2V0TmFtZXNwYWNlVVJJKCksCi0gICAgICAgICAgICBXU0lUYWcuRUxFTV9TT0FQX0JPRFkuZ2V0TG9jYWxQYXJ0KCkpOwotICAgICAgaWYgKGVsZW1lbnRMaXN0ID09IG51bGwgfHwgZWxlbWVudExpc3QuZ2V0TGVuZ3RoKCkgIT0gMSkKLSAgICAgIHsKLSAgICAgICAgLy8gc2hvdWxkIG9ubHkgYmUgYSBzaW5nbGUgc29hcCBib2R5ICEKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBwcm9iYWJseSBhbiBlcnJvciBjb25kaXRpb24gdGhvdWdoCi0gICAgICB9Ci0KLSAgICAgIE5vZGVMaXN0IHNvYXBCb2R5Q2hpbGRMaXN0ID0gKChFbGVtZW50KWVsZW1lbnRMaXN0Lml0ZW0oMCkpLmdldENoaWxkTm9kZXMoKTsKLSAgICAgIGZvciAoaW50IGNoaWxkID0gMDsgY2hpbGQgPCBzb2FwQm9keUNoaWxkTGlzdC5nZXRMZW5ndGgoKTsgY2hpbGQrKykKLSAgICAgIHsKLSAgICAgICAgTm9kZSBzb2FwQm9keUNoaWxkID0gc29hcEJvZHlDaGlsZExpc3QuaXRlbShjaGlsZCk7Ci0gICAgICAgIGlmIChzb2FwQm9keUNoaWxkLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBkbyBhbGwgZm9yIG5vdwotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFdyaXRlIG91dCBlbGVtZW50IHRyZWUgdG8gU3RyaW5nCi0gICAgICAgICAgICBTdHJpbmcgbWVzc2FnZUNvbnRlbnQgPSBET00yV3JpdGVyLm5vZGVUb1N0cmluZyhzb2FwQm9keUNoaWxkKTsKLSAgICAgICAgICAgIC8vIHBhcnNlIHRoZSBjaGlsZCBlbGVtZW50LCB2YWxpZGF0aW5nIGFnYWluc3QgdGhlIHNjaGVtYSAKLSAgICAgICAgICAgIFhNTFV0aWxzLnBhcnNlWE1MKG1lc3NhZ2VDb250ZW50LCBzY2hlbWFTdHJpbmdzKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKFdTSUV4Y2VwdGlvbiBlKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChlLmdldFRhcmdldEV4Y2VwdGlvbigpIGluc3RhbmNlb2YgU0FYRXhjZXB0aW9uKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZhaWxlZAotICAgICAgICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKGUuZ2V0VGFyZ2V0RXhjZXB0aW9uKCkuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRocm93IGU7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKCJWYWxpZGF0aW5nIFBhcnNpbmcgcHJvYmxlbSIsIGUpOwotICAgICAgICAgICAgLy8gQmFkIHRoaW5ncyBoYXZlIGhhcHBlbmVkCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9ICAgCi0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIENvcHkgdGhlIG5hbWVzcGFjZSBkZWNsYXJhdGlvbnMuCi0gICAqIEBwYXJhbSBwYXJlbnQgYSBtZXNzYWdlLgotICAgKiBAcGFyYW0gY2hpbGQgYSBzdHJpcHBlZCBtZXNzYWdlLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGNvcHlOU0RlY2xhcmF0aW9ucyhFbGVtZW50IHBhcmVudCwgRWxlbWVudCBjaGlsZCkKLSAgewotICAgIE5hbWVkTm9kZU1hcCBub2RlTWFwID0gcGFyZW50LmdldEF0dHJpYnV0ZXMoKTsKLSAgICBmb3IgKGludCBub2RlSWQgPSAwOyBub2RlSWQgPCBub2RlTWFwLmdldExlbmd0aCgpOyBub2RlSWQrKykKLSAgICB7Ci0gICAgICBOb2RlIG5vZGUgPSBub2RlTWFwLml0ZW0obm9kZUlkKTsKLQotICAgICAgaWYgKChub2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5BVFRSSUJVVEVfTk9ERSkKLSAgICAgICAgJiYgKG5vZGUuZ2V0Tm9kZU5hbWUoKS5zdGFydHNXaXRoKCJ4bWxuczoiKSkpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBub2RlTmFtZSA9IG5vZGUuZ2V0Tm9kZU5hbWUoKTsKLSAgICAgICAgLy8gSWYgYW4gTlMgYmVpbmcgY29waWVkIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgY2hpbGQgZWxlbWVudCBoYXMsIGNvcHkgaXQKLSAgICAgICAgaWYgKCFjaGlsZC5nZXROb2RlTmFtZSgpLnN0YXJ0c1dpdGgoCi0gICAgICAgICAgbm9kZU5hbWUuc3Vic3RyaW5nKG5vZGVOYW1lLmluZGV4T2YoIjoiKSArIDEpICsgIjoiKSkKLSAgICAgICAgewotICAgICAgICAgIGNoaWxkLnNldEF0dHJpYnV0ZShub2RlTmFtZSwgbm9kZS5nZXROb2RlVmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUmVwbGFjZXMgYWxsIHJlbGF0aXZlIFVSSXMgZm9yIHNjaGVtYUxvY2F0aW9uIGF0dHJpYnV0ZXMuCi0gICAqIEBwYXJhbSBzY2hlbWEgYW4geHNkOnNjaGVtYSBlbGVtZW50LgotICAgKiBAcGFyYW0gd3NkbFVSSSBhbiBVUkkgb2YgV1NETCB0aGF0IGNvbnRhaW5zIHhzZDpzY2hlbWEgYmVpbmcgcHJvY2Vzc2VkLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHJlcGxhY2VSZWxhdGl2ZVVSSXMoRWxlbWVudCBzY2hlbWEsIFN0cmluZyB3c2RsVVJJKQotICB7Ci0gICAgLy8gUmV0cmlldmluZyBhbGwgeHNkOmltcG9ydCBlbGVtZW50cwotICAgIE5vZGVMaXN0IGltcG9ydHMgPSBzY2hlbWEuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUygKLSAgICAgIFdTSVRhZy5FTEVNX1hTRF9JTVBPUlQuZ2V0TmFtZXNwYWNlVVJJKCksCi0gICAgICBXU0lUYWcuRUxFTV9YU0RfSU1QT1JULmdldExvY2FsUGFydCgpKTsKLSAgICAvLyBHb2luZyB0aHJvdWdoIHRoZSBlbGVtZW50cwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW1wb3J0cy5nZXRMZW5ndGgoKTsgaSsrKQotICAgIHsKLSAgICAgIEVsZW1lbnQgaW1wID0gKEVsZW1lbnQpIGltcG9ydHMuaXRlbShpKTsKLSAgICAgIC8vIEdldHRpbmcgdGhlIHNjaGVtYUxvY2F0aW9uIGF0dHJpYnV0ZQotICAgICAgQXR0ciBzY2hlbWFMb2NhdGlvbiA9Ci0gICAgICAgIFhNTFV0aWxzLmdldEF0dHJpYnV0ZShpbXAsIFdTSVRhZy5BVFRSX1hTRF9TQ0hFTUFMT0NBVElPTik7Ci0gICAgICAvLyBJZiB0aGUgYXR0cmlidXRlIGlzIHByZXNlbnQKLSAgICAgIGlmIChzY2hlbWFMb2NhdGlvbiAhPSBudWxsKQotICAgICAgewotICAgICAgICAvLyBUcnlpbmcgdG8gY3JlYXRlIGFuIFVSSSBvYmplY3QgdXNpbmcgYXR0cmlidXRlJ3MgdmFsdWUKLSAgICAgICAgVVJJIHVyaSA9IG51bGw7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgdXJpID0gbmV3IFVSSShzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9Ci0gICAgICAgIC8vIElmIHRoZSB2YWx1ZSBpcyBub3QgYW4gYWJzb2x1dGUgVVJJICh0aGUgVVJJIGNvbnN0cnVjdG9yIHRocm93cyB0aGUKLSAgICAgICAgLy8gTWFsZm9ybWVkVVJJRXhjZXB0aW9uKSwgY3JlYXRpbmcgdGhlIGFic29sdXRlIFVSSSB1c2luZyB3c2RsVVJJCi0gICAgICAgIGlmICh1cmkgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBuZXdVUkkgPSB3c2RsVVJJLnN1YnN0cmluZygwLCB3c2RsVVJJLmxhc3RJbmRleE9mKCIvIikgKyAxKQotICAgICAgICAgICAgKyBzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpOwotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHVyaSA9IG5ldyBVUkkobmV3VVJJKTsKLSAgICAgICAgICAgIC8vIFNldHRpbmcgYSBuZXcgVVJJIGFzIGEgdmFsdWUgZm9yIHRoZSBzY2hlbWFMb2NhdGlvbiBhdHRyaWJ1dGUKLSAgICAgICAgICAgIHNjaGVtYUxvY2F0aW9uLnNldFZhbHVlKHVyaS50b1N0cmluZygpKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYmluZGluZyBvcGVyYXRpb24gbWF0Y2hlZCBmb3IgU09BUCBtZXNzYWdlLgotICAgKiBAcGFyYW0gZW50cnlUeXBlIG1lc3NhZ2UgZW50cnkgdHlwZS4KLSAgICogQHBhcmFtIGRvYyBhIG1lc3NhZ2UuCi0gICAqIEByZXR1cm4gYW55IGJpbmRpbmcgb3BlcmF0aW9uIG1hdGNoZWQsIG51bGwgaWYgaXQgaXMgbm90IGZvdW5kLgotICAgKi8KLSAgcHVibGljIEJpbmRpbmdPcGVyYXRpb24gZ2V0T3BlcmF0aW9uTWF0Y2goRW50cnlUeXBlIGVudHJ5VHlwZSwgRG9jdW1lbnQgZG9jKSAKLSAgewotICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gR2V0dGluZyB0aGUgbmFtZSBvZiB0aGUgZmlyc3QgU09BUCBCb2R5IGNoaWxkIGVsZW1lbnQKLSAgICAgIFFOYW1lIG9wZXJhdGlvbiA9IGdldE9wZXJhdGlvbkZyb21NZXNzYWdlKGRvYyk7Ci0gICAgICBpZiAob3BlcmF0aW9uICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIC8vIFJldHJpZXZpbmcgYWxsIHRoZSBSUEMgYmluZGluZyBvcGVyYXRpb25zIGZyb20gd3NkbDpiaW5kaW5nCi0gICAgICAgIEJpbmRpbmdPcGVyYXRpb25bXSBycGNCaW5kaW5nT3BzID0gZ2V0TWF0Y2hpbmdCaW5kaW5nT3BzKAotICAgICAgICAgIFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9SUEMsCi0gICAgICAgICAgYW5hbHl6ZXJDb250ZXh0LmdldENhbmRpZGF0ZUluZm8oKS5nZXRCaW5kaW5ncygpKTsKLSAgICAgICAgLy8gUmV0cmlldmluZyBiaW5kaW5nIG9wZXJhdGlvbiBieSB0aGUgZ2l2ZW4gb3BlcmF0aW9uIG5hbWUKLSAgICAgICAgYmluZGluZ09wZXJhdGlvbiA9IGdldE9wZXJhdGlvbk1hdGNoKAotICAgICAgICAgIGVudHJ5VHlwZSwgb3BlcmF0aW9uLCBycGNCaW5kaW5nT3BzKTsKLSAgICAgICAgLy8gSWYgbm8gb25lIFJQQyBvcGVyYXRpb24gbWF0Y2hlZAotICAgICAgICBpZihiaW5kaW5nT3BlcmF0aW9uID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBSZXRyaWV2aW5nIGFsbCB0aGUgZG9jdW1lbnQgYmluZGluZyBvcGVyYXRpb25zIGZyb20gd3NkbDpiaW5kaW5nCi0gICAgICAgICAgQmluZGluZ09wZXJhdGlvbltdIGRvY0JpbmRpbmdPcGVyYXRpb25zID0gZ2V0TWF0Y2hpbmdCaW5kaW5nT3BzKAotICAgICAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQywKLSAgICAgICAgICAgIGFuYWx5emVyQ29udGV4dC5nZXRDYW5kaWRhdGVJbmZvKCkuZ2V0QmluZGluZ3MoKSk7Ci0gICAgICAgICAgLy8gUmV0cmlldmluZyBiaW5kaW5nIG9wZXJhdGlvbiBieSBnaXZlbiBlbGVtZW50IG5hbWUKLSAgICAgICAgICBCaW5kaW5nT3BlcmF0aW9uW10gcG90ZW50aWFsRG9jTGl0T3BzID0KLSAgICAgICAgICAgIGdldERvY0xpdE9wZXJhdGlvbnMoZW50cnlUeXBlLCBvcGVyYXRpb24sIGRvY0JpbmRpbmdPcGVyYXRpb25zKTsKLSAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBleGFjdGx5IG9uZSBvcGVyYXRpb24gbWF0Y2hlZAotICAgICAgICAgIGlmIChwb3RlbnRpYWxEb2NMaXRPcHMubGVuZ3RoID09IDEpCi0gICAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uID0gcG90ZW50aWFsRG9jTGl0T3BzWzBdOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkge30KLQotICAgIHJldHVybiBiaW5kaW5nT3BlcmF0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIE1hdGNoIGVpdGhlciBJbnB1dCBvciBPdXRwdXQuCi0gICAqIEBwYXJhbSBtZXNzYWdlRW50cnlUeXBlIG1lc3NhZ2UgZW50cnkgdHlwZS4KLSAgICogQHBhcmFtIHNvYXBNZXNzYWdlIHNvYXAgbWVzc2FnZS4KLSAgICogQHBhcmFtIG9wIGJpbmRpbmcgb3BlcmF0aW9ucy4KLSAgICogQHJldHVybiBtYXRjaGVkIG9wZXJhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBCaW5kaW5nT3BlcmF0aW9uIGdldE9wZXJhdGlvbk1hdGNoKAotICAgIEVudHJ5VHlwZSBtZXNzYWdlRW50cnlUeXBlLAotICAgIERvY3VtZW50IHNvYXBNZXNzYWdlLAotICAgIEJpbmRpbmdPcGVyYXRpb25bXSBvcCkKLSAgewotICAgIC8vIEdldCBvcGVyYXRpb24gZnJvbSBtZXNzYWdlCi0gICAgUU5hbWUgb3BlcmF0aW9uID0gZ2V0T3BlcmF0aW9uRnJvbU1lc3NhZ2Uoc29hcE1lc3NhZ2UpOwotICAgIC8vIGxpc3Qgb2YgUU5hbWVzCi0KLSAgICByZXR1cm4gZ2V0T3BlcmF0aW9uTWF0Y2gobWVzc2FnZUVudHJ5VHlwZSwgb3BlcmF0aW9uLCBvcCk7Ci0gIH0KLQotICAvKioKLSAgICogTWF0Y2ggZWl0aGVyIElucHV0IG9yIE91dHB1dC4KLSAgICogQHBhcmFtIG1lc3NhZ2VFbnRyeVR5cGUgbWVzc2FnZSBlbnRyeSB0eXBlLgotICAgKiBAcGFyYW0gb3BlcmF0aW9uIFNPQVAgb3BlcmF0aW9uIG5hbWUuCi0gICAqIEBwYXJhbSBvcCBiaW5kaW5nIG9wZXJhdGlvbnMuCi0gICAqIEByZXR1cm4gbWF0Y2hlZCBvcGVyYXRpb24uCi0gICAqLwotICBwdWJsaWMgQmluZGluZ09wZXJhdGlvbiBnZXRPcGVyYXRpb25NYXRjaCgKLSAgICBFbnRyeVR5cGUgbWVzc2FnZUVudHJ5VHlwZSwKLSAgICBRTmFtZSBvcGVyYXRpb24sCi0gICAgQmluZGluZ09wZXJhdGlvbltdIG9wKQotICB7Ci0gICAgUU5hbWUgY2hlY2tPcGVyYXRpb247Ci0KLSAgICAvLyBMb29rIGZvciBhIGNhbmRpZGF0ZSBvcGVyYXRpb24gaW4gdGhlIHdzZGwgdGhhdCBtYXRjaGVzIHRoaXMgc2lnbmF0dXJlLgotICAgIGZvciAoaW50IGsgPSAwOyBrIDwgb3AubGVuZ3RoOyBrKyspCi0gICAgewotICAgICAgU3RyaW5nIG5hbWUgPSBudWxsOwotICAgICAgTGlzdCBleHRlbnNpYmxlcyA9IG51bGw7Ci0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcCA9IG9wW2tdOwotCi0gICAgICBpZiAobWVzc2FnZUVudHJ5VHlwZS5pc1R5cGUoTWVzc2FnZVZhbGlkYXRvci5UWVBFX01FU1NBR0VfUkVRVUVTVCkKLSAgICAgICAgJiYgKGJpbmRpbmdPcC5nZXRPcGVyYXRpb24oKS5nZXRJbnB1dCgpICE9IG51bGwpKQotICAgICAgewotICAgICAgICBuYW1lID0gYmluZGluZ09wLmdldE9wZXJhdGlvbigpLmdldE5hbWUoKTsKLSAgICAgICAgZXh0ZW5zaWJsZXMgPSBiaW5kaW5nT3AuZ2V0QmluZGluZ0lucHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmICgKLSAgICAgICAgbWVzc2FnZUVudHJ5VHlwZS5pc1R5cGUoTWVzc2FnZVZhbGlkYXRvci5UWVBFX01FU1NBR0VfUkVTUE9OU0UpCi0gICAgICAgICAgJiYgKGJpbmRpbmdPcC5nZXRPcGVyYXRpb24oKS5nZXRPdXRwdXQoKSAhPSBudWxsKSkKLSAgICAgIHsKLSAgICAgICAgbmFtZSA9IGJpbmRpbmdPcC5nZXRPcGVyYXRpb24oKS5nZXROYW1lKCkgKyAiUmVzcG9uc2UiOwotICAgICAgICBleHRlbnNpYmxlcyA9IGJpbmRpbmdPcC5nZXRCaW5kaW5nT3V0cHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIEdldCBzb2FwOmJvZHkKLSAgICAgIFNPQVBCb2R5IHNvYXBCb2R5ID0gZ2V0U29hcEJvZHkoZXh0ZW5zaWJsZXMpOwotICAgICAgaWYgKHNvYXBCb2R5ID09IG51bGwpCi0gICAgICAgIGNoZWNrT3BlcmF0aW9uID0gbmV3IFFOYW1lKG5hbWUpOwotICAgICAgZWxzZQotICAgICAgICBjaGVja09wZXJhdGlvbiA9IG5ldyBRTmFtZShzb2FwQm9keS5nZXROYW1lc3BhY2VVUkkoKSwgbmFtZSk7Ci0KLSAgICAgIGlmIChvcGVyYXRpb24gIT0gbnVsbCAmJiBvcGVyYXRpb24uZXF1YWxzKGNoZWNrT3BlcmF0aW9uKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIChiaW5kaW5nT3ApOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBNYXRjaCBlaXRoZXIgSW5wdXQgb3IgT3V0cHV0LgotICAgKiBAcGFyYW0gbWVzc2FnZUVudHJ5VHlwZSBhIG1lc3NhZ2UgZW50cnkgdHlwZS4KLSAgICogQHBhcmFtIHNvYXBNZXNzYWdlIGEgc29hcCBtZXNzYWdlLgotICAgKiBAcGFyYW0gb3AgYmluc2luZyBvcGVyYXRpb25zLgotICAgKiBAcmV0dXJuIG1hdGNoZWQgb3BlcmF0aW9uLgotICAgKi8KLSAgcHVibGljIEJpbmRpbmdPcGVyYXRpb24gZ2V0T3BlcmF0aW9uUGFydHNNYXRjaCgKLSAgICBFbnRyeVR5cGUgbWVzc2FnZUVudHJ5VHlwZSwKLSAgICBEb2N1bWVudCBzb2FwTWVzc2FnZSwKLSAgICBCaW5kaW5nT3BlcmF0aW9uW10gb3ApCi0gIHsKLSAgICBNYXAgcGFydHMgPSBnZXRQYXJ0TGlzdEZyb21NZXNzYWdlKHNvYXBNZXNzYWdlKTsgLy8gbGlzdCBvZiBRTmFtZXMKLQotICAgIC8vIExvb2sgZm9yIGEgY2FuZGlkYXRlIG9wZXJhdGlvbiBpbiB0aGUgd3NkbCB0aGF0IG1hdGNoZXMgdGhpcyBzaWduYXR1cmUuCi0gICAgZm9yIChpbnQgayA9IDA7IGsgPCBvcC5sZW5ndGg7IGsrKykKLSAgICB7Ci0KLSAgICAgIE1lc3NhZ2Ugd3NkbE1lc3NhZ2UgPSBudWxsOwotICAgICAgTGlzdCBleHRlbnNpYmxlcyA9IG51bGw7Ci0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcCA9IG9wW2tdOwotCi0gICAgICBpZiAobWVzc2FnZUVudHJ5VHlwZS5pc1R5cGUoTWVzc2FnZVZhbGlkYXRvci5UWVBFX01FU1NBR0VfUkVRVUVTVCkKLSAgICAgICAgJiYgKGJpbmRpbmdPcC5nZXRPcGVyYXRpb24oKS5nZXRJbnB1dCgpICE9IG51bGwpKQotICAgICAgewotICAgICAgICB3c2RsTWVzc2FnZSA9IGJpbmRpbmdPcC5nZXRPcGVyYXRpb24oKS5nZXRJbnB1dCgpLmdldE1lc3NhZ2UoKTsKLSAgICAgICAgZXh0ZW5zaWJsZXMgPSBiaW5kaW5nT3AuZ2V0QmluZGluZ0lucHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmICgKLSAgICAgICAgbWVzc2FnZUVudHJ5VHlwZS5pc1R5cGUoTWVzc2FnZVZhbGlkYXRvci5UWVBFX01FU1NBR0VfUkVTUE9OU0UpCi0gICAgICAgICAgJiYgKGJpbmRpbmdPcC5nZXRPcGVyYXRpb24oKS5nZXRPdXRwdXQoKSAhPSBudWxsKSkKLSAgICAgIHsKLSAgICAgICAgd3NkbE1lc3NhZ2UgPSBiaW5kaW5nT3AuZ2V0T3BlcmF0aW9uKCkuZ2V0T3V0cHV0KCkuZ2V0TWVzc2FnZSgpOwotICAgICAgICBleHRlbnNpYmxlcyA9IGJpbmRpbmdPcC5nZXRCaW5kaW5nT3V0cHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICB9Ci0gICAgICAvL3dzZGxGYXVsdFBhcnRzID0gb3Bba10uZ2V0RmF1bHRzKCk7Ci0gICAgICAvLyBBREQ6IGNoZWNrIGZvciBjYXNlIHdoZW4gcmVzcG9uc2UgbWVzc2FnZSBpcyBhIGZhdWx0Ci0KLSAgICAgIGlmIChzYW1lUGFydHMocGFydHMsIHdzZGxNZXNzYWdlLCBnZXRTb2FwSGVhZGVyKGV4dGVuc2libGVzKSkpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiAoYmluZGluZ09wKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKiogCi0gICAqIEJpbmRpbmdPcGVyYXRpb24gZ2V0T3BlcmF0aW9uUGFydHNNYXRjaCguLikuCi0gICAqIAotICAgKiBGaW5kIG9uZSBvciBtb3JlIG1hdGNoaW5nIGJpbmRpbmcgb3BlcmF0aW9ucyBmcm9tIHRoZSBXU0RMIGNvcnJlc3BvbmRpbmcgdG8gdGhlCi0gICAqIGdpdmVuIHJlcXVlc3QtcmVzcG9uc2Ugc2lnbmF0dXJlLgotICAgKiAKLSAgICogVGhpcyBvdmVybG9hZGVkIHZlcnNpb24gaXMgaW50ZW5kZWQgZm9yIHBvc3NpYmxlIENvcnJlbGF0aW9uIG9ubHkgKG5vdCBhc3NlcnRpb25zKSwKLSAgICogc2luY2UgaXQgY2hlY2tzIGZvciBhbiBvcGVyYXRpb24gc2lnbmF0dXJlIG9uIGEgcmVxdWVzdC1yZXNwb25zZSBwYWlyLgotICAgKiBBc3NlcnRpb25zIG5vdyBjaGVjayByZXF1ZXN0ICYgcmVzcG9uc2UgbWVzc2FnZXMgaW5kZXBlbmRlbnRseS4gCi0gICAqIEBwYXJhbSByZXF1ZXN0TWVzc2FnZSBhIHJlcXVlc3QgbWVzc2FnZS4KLSAgICogQHBhcmFtIHJlc3BvbnNlTWVzc2FnZSBhIHJlc3BvbnNlIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBvcCBiaW5kaW5nIG9wZXJhdGlvbnMuCi0gICAqIEByZXR1cm4gbWF0Y2hlZCBvcGVyYXRpb24uCi0gICAqLwotICAvL3ByaXZhdGUgQmluZGluZ09wZXJhdGlvbiBnZXRPcGVyYXRpb25QYXJ0c01hdGNoKAotICAvLyAgRG9jdW1lbnQgcmVxdWVzdE1lc3NhZ2UsCi0gIC8vICBEb2N1bWVudCByZXNwb25zZU1lc3NhZ2UsCi0gIC8vICBCaW5kaW5nT3BlcmF0aW9uW10gb3ApCi0gIC8vewotICAvLyAgTWFwIGluUGFydHMgPSBnZXRQYXJ0TGlzdEZyb21NZXNzYWdlKHJlcXVlc3RNZXNzYWdlKTsgLy8gbGlzdCBvZiBRTmFtZXMKLSAgLy8gIE1hcCBvdXRQYXJ0cyA9IGdldFBhcnRMaXN0RnJvbU1lc3NhZ2UocmVzcG9uc2VNZXNzYWdlKTsKLSAgLy8gIC8vIGxpc3Qgb2YgUU5hbWVzCi0gIC8vCi0gIC8vICAvLyBMb29rIGZvciBhIGNhbmRpZGF0ZSBvcGVyYXRpb24gaW4gdGhlIHdzZGwgdGhhdCBtYXRjaGVzIHRoaXMgc2lnbmF0dXJlLgotICAvLyAgZm9yIChpbnQgayA9IDA7IGsgPCBvcC5sZW5ndGg7IGsrKykKLSAgLy8gIHsKLSAgLy8KLSAgLy8gICAgLy9NYXAgd3NkbEZhdWx0UGFydHMgPSBudWxsOwotICAvLyAgICBNZXNzYWdlIHdzZGxJbk1lc3NhZ2UgPSBudWxsOwotICAvLyAgICBNZXNzYWdlIHdzZGxPdXRNZXNzYWdlID0gbnVsbDsKLSAgLy8KLSAgLy8gICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3AgPSBvcFtrXTsKLSAgLy8gICAgaWYgKGJpbmRpbmdPcC5nZXRPcGVyYXRpb24oKS5nZXRJbnB1dCgpICE9IG51bGwpCi0gIC8vICAgIHsKLSAgLy8gICAgICB3c2RsSW5NZXNzYWdlID0gYmluZGluZ09wLmdldE9wZXJhdGlvbigpLmdldElucHV0KCkuZ2V0TWVzc2FnZSgpOwotICAvLyAgICB9Ci0gIC8vCi0gIC8vICAgIGlmIChiaW5kaW5nT3AuZ2V0T3BlcmF0aW9uKCkuZ2V0T3V0cHV0KCkgIT0gbnVsbCkKLSAgLy8gICAgewotICAvLyAgICAgIHdzZGxPdXRNZXNzYWdlID0gYmluZGluZ09wLmdldE9wZXJhdGlvbigpLmdldE91dHB1dCgpLmdldE1lc3NhZ2UoKTsKLSAgLy8gICAgfQotICAvLyAgICAvL3dzZGxGYXVsdFBhcnRzID0gb3Bba10uZ2V0RmF1bHRzKCk7Ci0gIC8vICAgIC8vIEFERDogY2hlY2sgZm9yIGNhc2Ugd2hlbiByZXNwb25zZSBtZXNzYWdlIGlzIGEgZmF1bHQKLSAgLy8KLSAgLy8gICAgaWYgKHNhbWVQYXJ0cyhpblBhcnRzLAotICAvLyAgICAgIHdzZGxJbk1lc3NhZ2UsCi0gIC8vICAgICAgZ2V0U29hcEhlYWRlcihiaW5kaW5nT3AuZ2V0QmluZGluZ0lucHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpKSkKLSAgLy8gICAgewotICAvLyAgICAgIC8vIG1hdGNoIG9uIHRoZSByZXF1ZXN0IC0gbm93IGNoZWNrIHJlc3BvbnNlIGlmIGl0cyBub3QgYSBmYXVsdAotICAvLyAgICAgIGlmIChyZXNwb25zZU1lc3NhZ2UgIT0gbnVsbCAmJiBpc0ZhdWx0KHJlc3BvbnNlTWVzc2FnZSkpCi0gIC8vICAgICAgewotICAvLyAgICAgICAgcmV0dXJuIChiaW5kaW5nT3ApOwotICAvLyAgICAgIH0KLSAgLy8gICAgICBlbHNlIGlmICgKLSAgLy8gICAgICAgIHNhbWVQYXJ0cygKLSAgLy8gICAgICAgICAgb3V0UGFydHMsCi0gIC8vICAgICAgICAgIHdzZGxPdXRNZXNzYWdlLAotICAvLyAgICAgICAgICBnZXRTb2FwSGVhZGVyKAotICAvLyAgICAgICAgICAgIGJpbmRpbmdPcC5nZXRCaW5kaW5nT3V0cHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpKSkKLSAgLy8gICAgICB7Ci0gIC8vICAgICAgICAvLyBJdCBkb2VzIG1hdGNoIHNvIHRyZWF0IHRoaXMgYXMgYSByZWxldmFudCBtZXNzYWdlIHBhaXIuIAotICAvLyAgICAgICAgLy8gTGV0IHRoZSBtZXNzYWdlIHRocm91Z2ggZm9yIHZhbGlkYXRpb24uCi0gIC8vICAgICAgICAvL0FERDogY291bGQgcGFzcyB0aGUgb3BlcmF0aW9ucyBsaXN0IGJhY2sgdG8gdGhlIGVudHJ5Q29udGV4dCBmb3IgdGhlIG1lc3NhZ2UuCi0gIC8vICAgICAgICByZXR1cm4gKGJpbmRpbmdPcCk7Ci0gIC8vICAgICAgfQotICAvLyAgICB9Ci0gIC8vICB9Ci0gIC8vICByZXR1cm4gbnVsbDsKLSAgLy99Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgc29hcDpib2R5IGZyb20gYSBMaXN0IG9mIGV4dGVuc2liaWxpdHkgZWxlbWVudHMuCi0gICAqIEBwYXJhbSBleHRFbGVtcyBhIGxpc3Qgb2YgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cy4KLSAgICogQHJldHVybiB0aGUgc29hcDpib2R5IGZyb20gYSBMaXN0IG9mIGV4dGVuc2liaWxpdHkgZWxlbWVudHMuCi0gICAqLwotICBwcml2YXRlIFNPQVBCb2R5IGdldFNvYXBCb2R5KExpc3QgZXh0RWxlbXMpCi0gIHsKLSAgICAvLyBGaW5kIHRoZSBzb2FwIGJvZHkKLSAgICBpZiAoZXh0RWxlbXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4dEVsZW1zLnNpemUoKTsgaSsrKQotICAgICAgewotICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBleHRFbGVtcy5nZXQoaSk7Ci0gICAgICAgIGlmIChleHRFbGVtLmdldEVsZW1lbnRUeXBlKCkuZXF1YWxzKFdTSVRhZy5XU0RMX1NPQVBfQk9EWSkpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gKFNPQVBCb2R5KSBleHRFbGVtOwotICAgICAgICB9Ci0gICAgICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZAotICAgICAgICBlbHNlIGlmIChleHRFbGVtLmdldEVsZW1lbnRUeXBlKCkuZXF1YWxzKFdTSVRhZy5XU0RMX01JTUVfTVVMVElQQVJUKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIEdldHRpbmcgdGhlIG1pbWU6cGFydCBlbGVtZW50cyBvZiB0aGUgbWltZTptdWx0aXBhcnRSZWxhdGVkCi0gICAgICAgICAgTGlzdCBtaW1lUGFydHMgPSAoKE1JTUVNdWx0aXBhcnRSZWxhdGVkKSBleHRFbGVtKS5nZXRNSU1FUGFydHMoKTsKLSAgICAgICAgICAvLyBHb2luZyB0aHJvdWdoIGFsbCB0aGUgbWltZTpwYXJ0IGVsZW1lbnRzCi0gICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBtaW1lUGFydHMuc2l6ZSgpOyBqKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gQ29sbGVjdGluZyBhbGwgdGhlIG1pbWU6Y29udGVudCBlbGVtZW50cyBvZiB0aGlzIG1pbWU6cGFydAotICAgICAgICAgICAgU09BUEJvZHkgc29hcEJvZHkgPSBnZXRTb2FwQm9keSgKLSAgICAgICAgICAgICAgKChNSU1FUGFydCkgbWltZVBhcnRzLmdldChqKSkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpOwotICAgICAgICAgICAgaWYgKHNvYXBCb2R5ICE9IG51bGwpCi0gICAgICAgICAgICAgIHJldHVybiBzb2FwQm9keTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIFNPQVBIZWFkZXIgZnJvbSBhIExpc3Qgb2YgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cy4KLSAgICogQHBhcmFtIGV4dGVuc2libGVzIGEgbGlzdCBvZiBleHRlbnNpYmlsaXR5IGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIHRoZSBTT0FQSGVhZGVyIGZyb20gYSBMaXN0IG9mIGV4dGVuc2liaWxpdHkgZWxlbWVudHMuCi0gICAqLwotICBwcml2YXRlIFNPQVBIZWFkZXIgZ2V0U29hcEhlYWRlcihMaXN0IGV4dGVuc2libGVzKQotICB7Ci0gICAgU09BUEhlYWRlciBzb2FwSGVhZGVyID0gbnVsbDsKLQotICAgIC8vIGZpbmQgdGhlIHNvYXAgaGVhZGVyCi0gICAgaWYgKGV4dGVuc2libGVzICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaSA9IGV4dGVuc2libGVzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaS5oYXNOZXh0KCkgJiYgc29hcEhlYWRlciA9PSBudWxsKQotICAgICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIHNvYXBIZWFkZXIgPSAoU09BUEhlYWRlcikgaS5uZXh0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKENsYXNzQ2FzdEV4Y2VwdGlvbiBjKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHNvYXBIZWFkZXI7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGZpcnN0IHBhcnQgbmFtZSBmcm9tIHNvYXBiaW5kOmJvZHkgZWxlbWVudC4KLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGdldEZpcnN0UGFydE5hbWUoQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uKQotICB7Ci0gICAgU3RyaW5nIHBhcnROYW1lID0gbnVsbDsKLSAgICBMaXN0IGV4dExpc3QgPSBudWxsOwotICAgIEl0ZXJhdG9yIHBhcnRzSXRlcmF0b3IgPSBudWxsOwotCi0gICAgLy8gRGV0ZXJtaW5lIGlmIHRoZXJlIGlzIGEgbGlzdCBvZiBwYXJ0cyBieSBmaW5kaW5nIHRoZSBzb2FwYmluZDpib2R5IGVsZW1lbnQKLSAgICBpZiAoKGV4dExpc3QgPQotICAgICAgYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nSW5wdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSkKLSAgICAgICE9IG51bGwpCi0gICAgewotICAgICAgTGlzdCBwYXJ0c0xpc3QgPSBudWxsOwotICAgICAgSXRlcmF0b3IgZXh0SXRlcmF0b3IgPSBleHRMaXN0Lml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoZXh0SXRlcmF0b3IuaGFzTmV4dCgpICYmIChwYXJ0TmFtZSA9PSBudWxsKSkKLSAgICAgIHsKLSAgICAgICAgT2JqZWN0IGV4dEVsZW1lbnQgPSBleHRJdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgIGlmIChleHRFbGVtZW50IGluc3RhbmNlb2YgU09BUEJvZHkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoKHBhcnRzTGlzdCA9ICgoU09BUEJvZHkpIGV4dEVsZW1lbnQpLmdldFBhcnRzKCkpICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgcGFydHNJdGVyYXRvciA9IHBhcnRzTGlzdC5pdGVyYXRvcigpOwotCi0gICAgICAgICAgICAvLyBTaW5jZSB0aGlzIGlzIGEgZG9jIGxpdGVyYWwgYmluZGluZyB0aGVyZSBzaG91bGQgYmUgb25seSBvbmUgcGFydCBuYW1lCi0gICAgICAgICAgICBpZiAocGFydHNJdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICAgICAgICAgIHBhcnROYW1lID0gKFN0cmluZykgcGFydHNJdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHBhcnROYW1lOwotICB9Ci0KLSAgcHVibGljIEJpbmRpbmdPcGVyYXRpb25bXSBnZXREb2NMaXRPcGVyYXRpb25zKAotICAgIEVudHJ5VHlwZSBtZXNzYWdlVHlwZSwKLSAgICBRTmFtZSBwYXJ0RWxlbWVudFFOYW1lLAotICAgIEJpbmRpbmdPcGVyYXRpb25bXSB3c2RsT3BlcmF0aW9ucykKLSAgewotCi0gICAgaWYgKG1lc3NhZ2VUeXBlLmlzVHlwZShFbnRyeVR5cGUuZ2V0RW50cnlUeXBlKE1lc3NhZ2VWYWxpZGF0b3IuVFlQRV9NRVNTQUdFX1JFUVVFU1QpKSkKLSAgICB7Ci0gICAgICByZXR1cm4gZ2V0SW5wdXREb2NMaXRPcGVyYXRpb25zKHBhcnRFbGVtZW50UU5hbWUsIHdzZGxPcGVyYXRpb25zKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobWVzc2FnZVR5cGUuaXNUeXBlKEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoTWVzc2FnZVZhbGlkYXRvci5UWVBFX01FU1NBR0VfUkVTUE9OU0UpKSkKLSAgICB7Ci0gICAgICByZXR1cm4gZ2V0T3V0cHV0RG9jTGl0T3BlcmF0aW9ucyhwYXJ0RWxlbWVudFFOYW1lLCB3c2RsT3BlcmF0aW9ucyk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsgLy8gc2hvdWxkIGJlIG9uZSBvciB0aGUgb3RoZXIKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIEJpbmRpbmdPcGVyYXRpb25bXSBnZXRJbnB1dERvY0xpdE9wZXJhdGlvbnMoCi0gICAgUU5hbWUgcGFydEVsZW1lbnRRTmFtZSwKLSAgICBCaW5kaW5nT3BlcmF0aW9uW10gd3NkbE9wZXJhdGlvbnMpCi0gIHsKLQotICAgIFZlY3RvciBwb3RlbnRpYWxPcHMgPSBuZXcgVmVjdG9yKCk7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHdzZGxPcGVyYXRpb25zLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGlmICh3c2RsT3BlcmF0aW9uc1tpXS5nZXRPcGVyYXRpb24oKS5nZXRJbnB1dCgpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IHdzZGxPcGVyYXRpb25zW2ldLmdldE9wZXJhdGlvbigpLmdldElucHV0KCkuZ2V0TWVzc2FnZSgpOwotICAgICAgICAvLyBJZiBTT0FQIEJvZHkgY2hpbGQgZWxlbWVudCBpcyBub3QgcHJlc2VudCBhbmQgd3NkbDptZXNzYWdlIGRvZXMgbm90IGhhdmUgYW55IHdzZGw6cGFydHMsIHRoYXQgaXMgdGhlIG1hdGNoIAotICAgICAgICBpZiAocGFydEVsZW1lbnRRTmFtZSA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKG1lc3NhZ2UuZ2V0UGFydHMoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBwb3RlbnRpYWxPcHMuYWRkKHdzZGxPcGVyYXRpb25zW2ldKTsKLSAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIEl0ZXJhdG9yIHBhcnRzSXQgPSBtZXNzYWdlLmdldFBhcnRzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKHBhcnRzSXQuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgUGFydCBuZXh0UGFydCA9IChQYXJ0KSBwYXJ0c0l0Lm5leHQoKTsKLSAgICAgICAgICBpZiAocGFydEVsZW1lbnRRTmFtZS5lcXVhbHMobmV4dFBhcnQuZ2V0RWxlbWVudE5hbWUoKSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gbWF0Y2hpbmcgcGFydCBmb3VuZCAoZG9jLWxpdCkgLSBhZGQgdG8gbGlzdCBvZiBwb3NzaWJsZSBvcGVyYXRpb24gbWF0Y2hlcwotICAgICAgICAgICAgcG90ZW50aWFsT3BzLmFkZCh3c2RsT3BlcmF0aW9uc1tpXSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIChCaW5kaW5nT3BlcmF0aW9uW10pIHBvdGVudGlhbE9wcy50b0FycmF5KG5ldyBCaW5kaW5nT3BlcmF0aW9uWzBdKTsKLSAgfQotCi0gIHByaXZhdGUgQmluZGluZ09wZXJhdGlvbltdIGdldE91dHB1dERvY0xpdE9wZXJhdGlvbnMoCi0gICAgUU5hbWUgcGFydEVsZW1lbnRRTmFtZSwKLSAgICBCaW5kaW5nT3BlcmF0aW9uW10gd3NkbE9wZXJhdGlvbnMpCi0gIHsKLQotICAgIFZlY3RvciBwb3RlbnRpYWxPcHMgPSBuZXcgVmVjdG9yKCk7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHdzZGxPcGVyYXRpb25zLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGlmICh3c2RsT3BlcmF0aW9uc1tpXS5nZXRPcGVyYXRpb24oKS5nZXRPdXRwdXQoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSB3c2RsT3BlcmF0aW9uc1tpXS5nZXRPcGVyYXRpb24oKS5nZXRPdXRwdXQoKS5nZXRNZXNzYWdlKCk7Ci0gICAgICAgIC8vIElmIFNPQVAgQm9keSBjaGlsZCBlbGVtZW50IGlzIG5vdCBwcmVzZW50IGFuZCB3c2RsOm1lc3NhZ2UgZG9lcyBub3QgaGF2ZSBhbnkgd3NkbDpwYXJ0cywgdGhhdCBpcyB0aGUgbWF0Y2gKLSAgICAgICAgaWYgKHBhcnRFbGVtZW50UU5hbWUgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGlmIChtZXNzYWdlLmdldFBhcnRzKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgcG90ZW50aWFsT3BzLmFkZCh3c2RsT3BlcmF0aW9uc1tpXSk7Ci0gICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBJdGVyYXRvciBwYXJ0c0l0ID0gbWVzc2FnZS5nZXRQYXJ0cygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChwYXJ0c0l0Lmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIFBhcnQgbmV4dFBhcnQgPSAoUGFydCkgcGFydHNJdC5uZXh0KCk7Ci0gICAgICAgICAgaWYgKHBhcnRFbGVtZW50UU5hbWUuZXF1YWxzKG5leHRQYXJ0LmdldEVsZW1lbnROYW1lKCkpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIG1hdGNoaW5nIHBhcnQgZm91bmQgKGRvYy1saXQpIC0gYWRkIHRvIGxpc3Qgb2YgcG9zc2libGUgb3BlcmF0aW9uIG1hdGNoZXMKLSAgICAgICAgICAgIHBvdGVudGlhbE9wcy5hZGQod3NkbE9wZXJhdGlvbnNbaV0pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiAoQmluZGluZ09wZXJhdGlvbltdKSBwb3RlbnRpYWxPcHMudG9BcnJheShuZXcgQmluZGluZ09wZXJhdGlvblswXSk7Ci0gIH0KLQotICAvKioKLSAgICogQ29tcGFyZSBzb2FwIG1lc3NhZ2UgZWxlbWVudCBwYXJ0IG5hbWVzIHdpdGggUGFydHMgZnJvbSBzcGVjaWZpZWQgd3NkbCBPcGVyYXRpb24KLSAgICovCi0gIC8vcHJpdmF0ZSBib29sZWFuIHNhbWVQYXJ0cyhIYXNoU2V0IG1lc3NhZ2VQYXJ0cywgTWFwIHdzZGxQYXJ0cykKLSAgLy97Ci0gIC8vCi0gIC8vICAvLyBsb29rIGZvciB0aGUgc29hcC1tZXNzYWdlIG9wZXJhdGlvbiBzaWduYXR1cmUKLSAgLy8gIEl0ZXJhdG9yIGkgPSB3c2RsUGFydHMudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgLy8gIC8vIGJ1aWxkIGEgc2V0IG9mIFBhcnQgbmFtZXMKLSAgLy8gIEhhc2hTZXQgaCA9IG5ldyBIYXNoU2V0KCk7Ci0gIC8vICB3aGlsZSAoaS5oYXNOZXh0KCkpCi0gIC8vICB7Ci0gIC8vICAgIFBhcnQgcCA9IChQYXJ0KSBpLm5leHQoKTsKLSAgLy8gICAgaC5hZGQocC5nZXROYW1lKCkpOwotICAvLyAgfQotICAvLwotICAvLyAgLy8gY29tcGFyZSB3aXRoIHRoZSBwYXJ0cyBsaXN0IGZyb20gdGhlIG1lc3NhZ2UJKHVub3JkZXJlZCkKLSAgLy8gIHJldHVybiAoaC5lcXVhbHMobWVzc2FnZVBhcnRzKSk7Ci0gIC8vfQotCi0gIC8qKgotICAgKiBDb21wYXJlIHNvYXAgbWVzc2FnZSBlbGVtZW50IHBhcnQgbmFtZXMgd2l0aCBQYXJ0cyBmcm9tIHNwZWNpZmllZCB3c2RsIE9wZXJhdGlvbgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIHNhbWVQYXJ0cygKLSAgICBNYXAgbWVzc2FnZVBhcnRzLAotICAgIE1lc3NhZ2Ugd3NkbE1lc3NhZ2UsCi0gICAgU09BUEhlYWRlciBzb2FwSGVhZGVyKQotICB7Ci0KLSAgICBTdHJpbmcgc29hcEhlYWRlclBhcnQgPSBudWxsOwotICAgIGlmIChzb2FwSGVhZGVyICE9IG51bGwpCi0gICAgICBzb2FwSGVhZGVyUGFydCA9IHNvYXBIZWFkZXIuZ2V0UGFydCgpOwotCi0gICAgLy8gY2hlY2sgbnVsbCBjb25kaXRpb25zCi0gICAgaWYgKG1lc3NhZ2VQYXJ0cyA9PSBudWxsICYmIHdzZGxNZXNzYWdlID09IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIHRydWU7IC8vIHNpbXBsZSBlcXVhbGl0eSB0ZXN0Ci0gICAgfQotICAgIGVsc2UgaWYgKG1lc3NhZ2VQYXJ0cyA9PSBudWxsIHx8IHdzZGxNZXNzYWdlID09IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFZlY3RvciB2ID0gbmV3IFZlY3RvcigpOwotICAgIC8vTGlzdCB3c2RsUGFydHMgPSB3c2RsTWVzc2FnZS5nZXRPcmRlcmVkUGFydHMobnVsbCk7Ci0gICAgTWFwIHdzZGxQYXJ0cyA9IG51bGw7Ci0gICAgaWYgKHdzZGxNZXNzYWdlLmdldFBhcnRzKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICB3c2RsUGFydHMgPSB3c2RsTWVzc2FnZS5nZXRQYXJ0cygpOwotICAgICAgLy8gbG9vayBmb3IgdGhlIHNvYXAtbWVzc2FnZSBvcGVyYXRpb24gc2lnbmF0dXJlCi0gICAgICBJdGVyYXRvciBpID0gd3NkbFBhcnRzLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICAvLyBidWlsZCBhIHNldCBvZiBQYXJ0IG5hbWVzICAgIAotICAgICAgd2hpbGUgKGkuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBQYXJ0IHAgPSAoUGFydCkgaS5uZXh0KCk7Ci0gICAgICAgIC8vIGRvIG5vdCBpbmNsdWRlIHRoZSBwYXJ0IGZvciB0aGUgc29hcDpoZWFkZXIgKGlmIGFueSkKLSAgICAgICAgaWYgKCFwLmdldE5hbWUoKS5lcXVhbHMoc29hcEhlYWRlclBhcnQpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gY2hlY2sgdGhhdCB0aGUgcGFydCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIHNvYXA6Ym9keQotICAgICAgICAgIHYuYWRkKG5ldyBRTmFtZShwLmdldE5hbWUoKSkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvLyBpZiBvbmUgb2YgdGhlIHBhcnRzIGlzIGFzc29jaWF0ZWQgd2l0aCBhIHNvYXA6aGVhZGVyIGluIHRoZSBiaW5kaW5nCi0gICAgICAvLyAoYnkgPHNvYXA6aGVhZGVyIHBhcnQ9IntwYXJ0bmFtZX0iPiksIHJlbW92ZSB0aGlzIGZyb20gdGhlIHNldAotCi0gICAgfQotCi0gICAgLy8gY29tcGFyZSB3aXRoIHRoZSBwYXJ0cyBsaXN0IGZyb20gdGhlIG1lc3NhZ2UJKG9yZGVyZWQpCi0gICAgaWYgKHYuaXNFbXB0eSgpICYmIG1lc3NhZ2VQYXJ0cy5pc0VtcHR5KCkpCi0gICAgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gUEI6IENoYW5nZWQgdG8gY29udGFpbnNBbGwoKSBzaW5jZSBlcXVhbHMoKSBmYWlscyB3aGVuIHVzaW5nIEpSRSAxLjQKLSAgICBpZiAodi5jb250YWluc0FsbChtZXNzYWdlUGFydHMua2V5U2V0KCkpCi0gICAgICAmJiAodi5zaXplKCkgPT0gbWVzc2FnZVBhcnRzLnNpemUoKSkpCi0gICAgewotICAgICAgLy8gQ2hlY2sgZm9yIHhzaTp0eXBlIG1pc21hdGNoCi0gICAgICBJdGVyYXRvciBwYXJ0cyA9IG1lc3NhZ2VQYXJ0cy5rZXlTZXQoKS5pdGVyYXRvcigpOwotICAgICAgUU5hbWUgcGFydE5hbWUsIHhzaVR5cGU7Ci0gICAgICB3aGlsZSAocGFydHMuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBwYXJ0TmFtZSA9IChRTmFtZSkgcGFydHMubmV4dCgpOwotCi0gICAgICAgIC8vIEdldCB4c2k6dHlwZSBRTmFtZQotICAgICAgICBpZiAoKHhzaVR5cGUgPSAoUU5hbWUpIG1lc3NhZ2VQYXJ0cy5nZXQocGFydE5hbWUpKSAhPSBudWxsCi0gICAgICAgICAgJiYgd3NkbFBhcnRzICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXQgdGhlIFdTREwgcGFydCBkZWZpbml0aW9uCi0gICAgICAgICAgUGFydCBwYXJ0ID0gKFBhcnQpIHdzZGxQYXJ0cy5nZXQocGFydE5hbWUuZ2V0TG9jYWxQYXJ0KCkpOwotCi0gICAgICAgICAgLy8gSWYgeHNpVHlwZSBpcyBOT1QgZGVyaXZlZCBmcm9tIHRoZSB0eXBlIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgcGFydAotICAgICAgICAgIGlmICghaXNEZXJpdmVkVHlwZSh4c2lUeXBlLCBwYXJ0LmdldFR5cGVOYW1lKCkpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIHJldHVybiBmYWxzZQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8vcmV0dXJuICh2LmVxdWFscyhtZXNzYWdlUGFydHMpKTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja3Mgd2hldGhlciBvbmUgc2NoZW1hIHR5cGUgaXMgZGVyaXZlZCBmcm9tIGFub3RoZXIuCi0gICAqIEBwYXJhbSBleHRUeXBlIGFuIGFzc3VtZWQgZGVyaXZlZCB0eXBlLgotICAgKiBAcGFyYW0gdHlwZSBhbiBhc3N1bWVkIGJhc2UgdHlwZS4KLSAgICogQHJldHVybiB0cnVlIGlmIGV4dFR5cGUgaXMgZGVyaXZlZCBmcm9tIHR5cGUsIGZhbHNlIG90aGVyd2lzZQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNEZXJpdmVkVHlwZShRTmFtZSBleHRUeXBlLCBRTmFtZSB0eXBlKQotICB7Ci0gICAgLy8gSWYgZWl0aGVyIG9mIHR5cGVzIGlzIG51bGwsIHJldHVybiBmYWxzZQotICAgIGlmIChleHRUeXBlID09IG51bGwgfHwgdHlwZSA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8vIElmIHRoZSB0eXBlcyBhcmUgZXF1YWwsIHJldHVybiB0cnVlCi0gICAgaWYgKGV4dFR5cGUuZXF1YWxzKHR5cGUpKQotICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBHb2luZyB0aHJvdWdoIGFsbCBzY2hlbWFzIAotICAgIEl0ZXJhdG9yIGkgPSB3c2RsRG9jdW1lbnQuZ2V0U2NoZW1hcygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGkuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIFhTTW9kZWwgeHNNb2RlbCA9IChYU01vZGVsKSBpLm5leHQoKTsKLSAgICAgIC8vIFJldHJpZXZpbmcgdGhlIGRlcml2ZWQgdHlwZSBkZWZpbml0aW9uCi0gICAgICBYU1R5cGVEZWZpbml0aW9uIHhzVHlwZSA9IHhzTW9kZWwuZ2V0VHlwZURlZmluaXRpb24oCi0gICAgICAgIGV4dFR5cGUuZ2V0TG9jYWxQYXJ0KCksIGV4dFR5cGUuZ2V0TmFtZXNwYWNlVVJJKCkpOwotICAgICAgLy8gSWYgaXQgaXMgZm91bmQgYW5kIGRlcml2ZWQgZnJvbSB0aGUgYmFzZSB0eXBlLCByZXR1cm4gdHJ1ZQotICAgICAgaWYgKHhzVHlwZSAhPSBudWxsICYmIHhzVHlwZS5kZXJpdmVkRnJvbSh0eXBlLmdldE5hbWVzcGFjZVVSSSgpLAotICAgICAgICB0eXBlLmdldExvY2FsUGFydCgpLCBYU0NvbnN0YW50cy5ERVJJVkFUSU9OX05PTkUpKQotICAgICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gZXh0VHlwZSBpcyBub3QgZGVyaXZlZCBmcm9tIHR5cGUsIHJldHVybiBmYWxzZQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAJKiBHZXQgYSBsaXN0IG9mIFFOYW1lcyBvZiBwYXJ0cyBmcm9tIHRoZSBzb2FwIGJvZHkgb2YgdGhlIHNwZWNpZmllZCBtZXNzYWdlCi0gIAkqLwotICBwdWJsaWMgRWxlbWVudCBnZXRTb2FwQm9keUNoaWxkKERvY3VtZW50IGRvYykKLSAgewotCi0gICAgRWxlbWVudCBvcEVsZW0gPSBudWxsOwotICAgIGlmIChkb2MgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBFbGVtZW50IHJvb3QgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICBOb2RlTGlzdCBib2RpZXMgPQotICAgICAgICByb290LmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQLCAiQm9keSIpOwotICAgICAgLy8gR2V0IHRoZSBsaXN0IG9mIHNvYXA6Ym9keSBjaGlsZCBlbGVtZW50IG5hbWVzIGZyb20gdGhlIHJlcXVlc3QgbWVzc2FnZQotICAgICAgaWYgKGJvZGllcyAhPSBudWxsICYmIGJvZGllcy5nZXRMZW5ndGgoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIEVsZW1lbnQgYm9keSA9IChFbGVtZW50KSBib2RpZXMuaXRlbSgwKTsKLSAgICAgICAgTm9kZUxpc3QgY2hpbGRyZW4gPSBib2R5LmdldENoaWxkTm9kZXMoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5nZXRMZW5ndGgoKSAmJiBvcEVsZW0gPT0gbnVsbDsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgTm9kZSBuID0gY2hpbGRyZW4uaXRlbShpKTsKLSAgICAgICAgICBpZiAobiBpbnN0YW5jZW9mIEVsZW1lbnQpCi0gICAgICAgICAgewotICAgICAgICAgICAgb3BFbGVtID0gKEVsZW1lbnQpIG47Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBvcEVsZW07Ci0gIH0KLQotICAvKiogQ2hlY2sgd2hldGhlciB0aGlzIG1lc3NhZ2UgaXMgYSBzb2FwIGZhdWx0Ci0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0ZhdWx0KERvY3VtZW50IGRvYykKLSAgewotICAgIGJvb2xlYW4gaXNGYXVsdCA9IGZhbHNlOwotCi0gICAgaWYgKGRvYyAhPSBudWxsKQotICAgIHsKLSAgICAgIEVsZW1lbnQgcm9vdCA9IGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKTsKLSAgICAgIGlzRmF1bHQgPQotICAgICAgICAocm9vdAotICAgICAgICAgIC5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKFdTSUNvbnN0YW50cy5OU19VUklfU09BUCwgIkZhdWx0IikKLSAgICAgICAgICAuZ2V0TGVuZ3RoKCkKLSAgICAgICAgICA+IDApOwotICAgIH0KLQotICAgIHJldHVybiBpc0ZhdWx0OwotICB9Ci0KLSAgLyoqIAotICAgKiBDaGVjayB3aGV0aGVyIHRoaXMgbWVzc2FnZSBoYXMgYSBzb2FwIGJvZHkgd2l0aCBhIGNoaWxkIGVsZW1lbnQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBjb250YWluc1NvYXBCb2R5V2l0aENoaWxkKERvY3VtZW50IGRvYykKLSAgewotICAgIGJvb2xlYW4gY29udGFpbnMgPSBmYWxzZTsKLQotICAgIGlmIChkb2MgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBjb250YWlucyA9ICgoZ2V0U29hcEJvZHlDaGlsZChkb2MpID09IG51bGwpID8gZmFsc2UgOiB0cnVlKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gY29udGFpbnM7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IFNPQVBBY3Rpb24gdmFsdWUgZnJvbSB0aGUgSFRUUCBoZWFkZXJzLgotICAgKiBAcGFyYW0gaGVhZGVycyBIVFRQIGhlYWRlcnMKLSAgICogQHJldHVybiBTT0FQQWN0aW9uIHZhbHVlCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFNvYXBBY3Rpb24oU3RyaW5nIGhlYWRlcnMpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIGdldCBTT0FQQWN0aW9uCi0gICAgU3RyaW5nIGFjdGlvbiA9IG51bGw7Ci0gICAgaWYgKGhlYWRlcnMgIT0gbnVsbCkKLSAgICAgIGFjdGlvbiA9IChTdHJpbmcpIEhUVFBVdGlscy5nZXRIdHRwSGVhZGVyVG9rZW5zKGhlYWRlcnMsICI6IikuZ2V0KCJTT0FQQWN0aW9uIi50b1VwcGVyQ2FzZSgpKTsKLSAgICByZXR1cm4gYWN0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBhIGxpc3Qgb2YgUU5hbWVzIG9mIHBhcnRzIGZyb20gdGhlIHNvYXAgYm9keSBvZiB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UuCi0gICAqIFRoaXMgbWV0aG9kIGFzc3VtZXMgUlBDIHN0eWxlIG1lc3NhZ2UgY29udGVudAotICAgKi8KLSAgcHJpdmF0ZSBRTmFtZSBnZXRPcGVyYXRpb25Gcm9tTWVzc2FnZShEb2N1bWVudCBkb2MpCi0gIHsKLSAgICBRTmFtZSBvcGVyYXRpb24gPSBudWxsOwotICAgIGlmIChkb2MgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBFbGVtZW50IHJvb3QgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICBOb2RlTGlzdCBib2RpZXMgPQotICAgICAgICByb290LmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQLCAiQm9keSIpOwotICAgICAgaWYgKGJvZGllcyAhPSBudWxsICYmIGJvZGllcy5nZXRMZW5ndGgoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIEVsZW1lbnQgYm9keSA9IChFbGVtZW50KSBib2RpZXMuaXRlbSgwKTsKLSAgICAgICAgTm9kZUxpc3QgY2hpbGRyZW4gPSBib2R5LmdldENoaWxkTm9kZXMoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5nZXRMZW5ndGgoKTsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgTm9kZSBuID0gY2hpbGRyZW4uaXRlbShpKTsKLSAgICAgICAgICAvLyBJZiBlbGVtZW50LCB0aGVuIHRoaXMgaXMgdGhlIG9wZXJhdGlvbiBuYW1lCi0gICAgICAgICAgaWYgKG4gaW5zdGFuY2VvZiBFbGVtZW50KQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG9wZXJhdGlvbiA9IG5ldyBRTmFtZShuLmdldE5hbWVzcGFjZVVSSSgpLCBuLmdldExvY2FsTmFtZSgpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gb3BlcmF0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBhIGxpc3Qgb2YgUU5hbWVzIG9mIHBhcnRzIGZyb20gdGhlIHNvYXAgYm9keSBvZiB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UuCi0gICAqIFRoaXMgbWV0aG9kIGFzc3VtZXMgUlBDIHN0eWxlIG1lc3NhZ2UgY29udGVudAotICAgKi8KLSAgcHJpdmF0ZSBNYXAgZ2V0UGFydExpc3RGcm9tTWVzc2FnZShEb2N1bWVudCBkb2MpCi0gIHsKLSAgICBNYXAgcGFydHMgPSBuZXcgSGFzaE1hcCgpOwotICAgIGlmIChkb2MgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBFbGVtZW50IHJvb3QgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICBOb2RlTGlzdCBib2RpZXMgPQotICAgICAgICByb290LmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQLCAiQm9keSIpOwotICAgICAgLy8gR2V0IHRoZSBsaXN0IG9mIHNvYXA6Ym9keSBncmFuZC1jaGlsZCBlbGVtZW50IG5hbWVzIGZyb20gdGhlIHJlcXVlc3QgbWVzc2FnZQotICAgICAgLy8gKGltbWVkaWF0ZSBjaGlsZCBpcyB0aGUgbWVzc2FnZSBuYW1lKQotICAgICAgaWYgKGJvZGllcyAhPSBudWxsICYmIGJvZGllcy5nZXRMZW5ndGgoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIEVsZW1lbnQgYm9keSA9IChFbGVtZW50KSBib2RpZXMuaXRlbSgwKTsKLSAgICAgICAgTm9kZUxpc3QgY2hpbGRyZW4gPSBib2R5LmdldENoaWxkTm9kZXMoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5nZXRMZW5ndGgoKTsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgTm9kZSBuID0gY2hpbGRyZW4uaXRlbShpKTsKLSAgICAgICAgICBpZiAobiBpbnN0YW5jZW9mIEVsZW1lbnQpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gdGhpcyBpcyB0aGUgb3BlcmF0aW9uIG5hbWUuIEl0cyBjaGlsZHJlbiBhcmUgdGhlIHBhcnRzCi0gICAgICAgICAgICBOb2RlTGlzdCBncmFuZENoaWxkcmVuID0gbi5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGdyYW5kQ2hpbGRyZW4uZ2V0TGVuZ3RoKCk7IGorKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgTm9kZSBtID0gZ3JhbmRDaGlsZHJlbi5pdGVtKGopOwotICAgICAgICAgICAgICBpZiAobSBpbnN0YW5jZW9mIEVsZW1lbnQpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBEZXRlcm1pbmUgaWYgdGhlIHBhcnQgaGFzIGFuIHhzaTp0eXBlCi0gICAgICAgICAgICAgICAgQXR0ciBhdHRyID0KLSAgICAgICAgICAgICAgICAgIFhNTFV0aWxzLmdldEF0dHJpYnV0ZSgKLSAgICAgICAgICAgICAgICAgICAgKEVsZW1lbnQpIG0sCi0gICAgICAgICAgICAgICAgICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1hTSSwgInR5cGUiKSk7Ci0KLSAgICAgICAgICAgICAgICBRTmFtZSB4c2lUeXBlID0gbnVsbDsKLQotICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGFuIHhzaTp0eXBlIGF0dHJpYnV0ZSwgdGhlbiBnZXQgdGhlIHZhbHVlIGFzIGEgUU5hbWUgCi0gICAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgaWYgKGF0dHIgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgeHNpVHlwZSA9Ci0gICAgICAgICAgICAgICAgICAgICAgRE9NVXRpbHMuZ2V0UU5hbWUoYXR0ci5nZXROb2RlVmFsdWUoKSwgKEVsZW1lbnQpIG0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYXRjaCAoamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uIHdlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBhZGQgdG8gdGhlIGNoaWxkIGVsZW1lbnQgbGlzdAotICAgICAgICAgICAgICAgIHBhcnRzLnB1dCgKLSAgICAgICAgICAgICAgICAgIG5ldyBRTmFtZShtLmdldE5hbWVzcGFjZVVSSSgpLCBtLmdldExvY2FsTmFtZSgpKSwKLSAgICAgICAgICAgICAgICAgIHhzaVR5cGUpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBwYXJ0czsKLSAgfQotCi0gIHB1YmxpYyBCaW5kaW5nT3BlcmF0aW9uW10gZ2V0TWF0Y2hpbmdCaW5kaW5nT3BzKAotICAgIFN0cmluZyBiaW5kaW5nU3R5bGUsCi0gICAgQmluZGluZ1tdIGJpbmRpbmdzKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgSGFzaFNldCBiaW5kaW5nT3BlcmF0aW9uc1NldCA9IG5ldyBIYXNoU2V0KCk7Ci0KLSAgICAvLyB3aGl6eiB0aHJvdWdoIHRoZSBiaW5kaW5ncywgY2hlY2tpbmcgZm9yIGEgYmluZGluZ09wZXJhdGlvbiBtYXRjaGluZyB0aGUgbWVzc2FnZQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYmluZGluZ3MubGVuZ3RoOyBpKyspCi0gICAgewotCi0gICAgICBCaW5kaW5nIHRyeUJpbmRpbmcgPSBiaW5kaW5nc1tpXTsKLSAgICAgIExpc3QgYmluZGluZ09wcyA9IHRyeUJpbmRpbmcuZ2V0QmluZGluZ09wZXJhdGlvbnMoKTsKLQotICAgICAgaWYgKGJpbmRpbmdPcHMgIT0gbnVsbCkKLSAgICAgIHsKLQotICAgICAgICAvLyBzZWFyY2ggdGhyb3VnaCBiaW5kaW5nIE9wZXJhdGlvbnMKLSAgICAgICAgSXRlcmF0b3IgYmluZGluZ09wSXQgPSB0cnlCaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb25zKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKGJpbmRpbmdPcEl0Lmhhc05leHQoKSkKLSAgICAgICAgewotCi0gICAgICAgICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3AgPSAoQmluZGluZ09wZXJhdGlvbikgYmluZGluZ09wSXQubmV4dCgpOwotICAgICAgICAgIC8vIGNoZWNrIGRlcGVuZHMgb24gd2hpY2ggYmluZGluZyBzdHlsZSBpcyBkZWNsYXJlZCBpbiB0aGUgd3NkbAotICAgICAgICAgIFNPQVBPcGVyYXRpb24gc29hcE9wID0gV1NETFZhbGlkYXRvckltcGwuZ2V0U29hcE9wZXJhdGlvbihiaW5kaW5nT3ApOwotICAgICAgICAgIC8vR1Q6IG1vdmUgdGhpcyBtZXRob2QgdG8gdXRpbHMKLQotICAgICAgICAgIFN0cmluZyBzdHlsZTsKLSAgICAgICAgICBpZiAoKHNvYXBPcCA9PSBudWxsKSB8fCAoc3R5bGUgPSBzb2FwT3AuZ2V0U3R5bGUoKSkgPT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyB1c2UgdGhlIHN0eWxlIG9mIHRoZSBwYXJlbnQgYmluZGluZ09wCi0KLSAgICAgICAgICAgIFNPQVBCaW5kaW5nIHNvYXBCaW5kID0gV1NETFZhbGlkYXRvckltcGwuZ2V0U29hcEJpbmRpbmcodHJ5QmluZGluZyk7Ci0gICAgICAgICAgICAvL0dUOiBtb3ZlIHRoaXMgbWV0aG9kIHRvIHV0aWxzCi0gICAgICAgICAgICBpZiAoKHN0eWxlID0gc29hcEJpbmQuZ2V0U3R5bGUoKSkgPT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgc3R5bGUgPSBXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JJTkRfU1RZTEVfRE9DOwotICAgICAgICAgICAgICAvL2RlZmF1bHQKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKHN0eWxlLmVxdWFscyhiaW5kaW5nU3R5bGUpKQotICAgICAgICAgIHsKLQotICAgICAgICAgICAgYmluZGluZ09wZXJhdGlvbnNTZXQuYWRkKGJpbmRpbmdPcCk7Ci0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0gLy8gY3VycmVudCBiaW5kaW5nIGhhcyBubyBiaW5kaW5nT3BlcmF0aW9ucywgaWdub3JlCi0gICAgfQotICAgIHJldHVybiAoQmluZGluZ09wZXJhdGlvbltdKSBiaW5kaW5nT3BlcmF0aW9uc1NldC50b0FycmF5KAotICAgICAgbmV3IEJpbmRpbmdPcGVyYXRpb25bMF0pOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrcyB3aGV0aGVyIHNvYXA6Ym9keSBlbGVtZW50IGlzIGxpdGVyYWwuCi0gICAqIEBwYXJhbSBleHRFbGVtZW50cyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIG9mIHdzZGw6aW5wdXQgb3Igd3NkbDpvdXRwdXQKLSAgICogb2YgYSBiaW5kaW5nCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0xpdGVyYWwoTGlzdCBleHRFbGVtcykKLSAgewotICAgIFNPQVBCb2R5IHNvYXBCb2R5ID0gZ2V0U09BUEJvZHkoZXh0RWxlbXMpOwotICAgIGlmIChzb2FwQm9keSAhPSBudWxsCi0gICAgICAmJiBzb2FwQm9keS5nZXRVc2UoKS5lcXVhbHMoV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CT0RZX1VTRV9MSVQpKQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICAqIE9yZGVycyB3c2RsOnBhcnQgbmFtZXMga2VlcGluZyBpbiBtaW5kIHRoZSAicGFydHMiIGF0dHJpYnV0ZSBvZiBXU0RMIHNvYXA6Ym9keQotICAgKiBAcGFyYW0gbWVzc2FnZVBhcnRzIGEgbGlzdCBvZiB3c2RsOnBhcnRTCi0gICAqIEBwYXJhbSBleHRFbGVtcyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIGluIHRoZSBiaW5kaW5nCi0gICAqIEByZXR1cm4gdGhlIG9yZGVyZWQgbGlzdCBvZiBwYXJ0IG5hbWVzCi0gICAqLwotICBwdWJsaWMgTGlzdCBvcmRlclBhcnROYW1lcyhMaXN0IG1lc3NhZ2VQYXJ0cywgTGlzdCBleHRFbGVtcykKLSAgewotICAgIExpc3Qgb3JkZXJlZFBhcnROYW1lcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBMaXN0IGJvZHlQYXJ0cyA9IG51bGw7Ci0KLSAgICBTT0FQQm9keSBzb2FwQm9keSA9IGdldFNPQVBCb2R5KGV4dEVsZW1zKTsKLSAgICBpZiAoc29hcEJvZHkgIT0gbnVsbCkKLSAgICAgIGJvZHlQYXJ0cyA9IHNvYXBCb2R5LmdldFBhcnRzKCk7Ci0KLSAgICBJdGVyYXRvciBpID0gbWVzc2FnZVBhcnRzLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGkuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIFN0cmluZyBwYXJ0TmFtZSA9ICgoUGFydCkgaS5uZXh0KCkpLmdldE5hbWUoKTsKLSAgICAgIC8vIElmIHRoZSBwYXJ0cyBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCBvciBjb250YWlucwotICAgICAgLy8gdGhlIHdzZGw6cGFydCBuYW1lLCB0aGVuIGFkZGluZyBwYXJ0IG5hbWUgdG8gdGhlIG9yZGVyZWQgbGlzdAotICAgICAgaWYgKGJvZHlQYXJ0cyA9PSBudWxsIHx8IGJvZHlQYXJ0cy5jb250YWlucyhwYXJ0TmFtZSkpCi0gICAgICAgIG9yZGVyZWRQYXJ0TmFtZXMuYWRkKHBhcnROYW1lKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gb3JkZXJlZFBhcnROYW1lczsKLSAgfQotCi0gIC8qKgotICAgKiBSZXRyaWV2ZXMgdGhlIFNPQVBCb2R5IG9iamVjdCBmcm9tIGEgbGlzdCBvZiBleHRlbnNpYmlsaXR5IGVsbWVudHMgaW4gYmluZGluZwotICAgKiBAcGFyYW0gZXh0RWxlbXMgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cwotICAgKiBAcmV0dXJuIHRoZSBTT0FQQm9keSBlbGVtZW50Ci0gICAqLwotICBwdWJsaWMgU09BUEJvZHkgZ2V0U09BUEJvZHkoTGlzdCBleHRFbGVtcykKLSAgewotICAgIGlmIChleHRFbGVtcyA9PSBudWxsKQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgZm9yIChJdGVyYXRvciBpID0gZXh0RWxlbXMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIE9iamVjdCBvYmogPSBpLm5leHQoKTsKLSAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBTT0FQQm9keSkKLSAgICAgICAgcmV0dXJuIChTT0FQQm9keSkgb2JqOwotICAgIH0KLQotICAgIHJldHVybiBudWxsOwotICB9Ci0gCi0gIHB1YmxpYyBMaXN0IHJlc29sdmVTYW1lTmFtZXNwYWNlcyhMaXN0IHNjaGVtYUVsZW1lbnRzKQotICB7Ci0gIAlMaXN0IG5hbWVzcGFjZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIAlMaXN0IHJlc3VsdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgCUl0ZXJhdG9yIGkgPSBzY2hlbWFFbGVtZW50cy5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBFbGVtZW50IHNjaGVtYSA9IChFbGVtZW50KSBpLm5leHQoKTsKLSAgICAgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSBzY2hlbWEuZ2V0QXR0cmlidXRlKENvbnN0YW50cy5BVFRSX1RBUkdFVF9OQU1FU1BBQ0UpOwotICAgICAgaWYgKCFuYW1lc3BhY2VzLmNvbnRhaW5zKHRhcmdldE5hbWVzcGFjZSkpCi0gICAgICB7Ci0gICAgICAgIG5hbWVzcGFjZXMuYWRkKHRhcmdldE5hbWVzcGFjZSk7Ci0gICAgCUxpc3Qgc2NoZW1hcyA9IGdldFNjaGVtYXNXaXRoU2FtZU5hbWVzcGFjZShzY2hlbWFFbGVtZW50cywgdGFyZ2V0TmFtZXNwYWNlKTsKLSAgICAJaWYgKHNjaGVtYXMuc2l6ZSgpID09IDEpCi0gICAgICAJewotICAgICAgCSAgcmVzdWx0LmFkZChzY2hlbWEpOwotICAgICAgCX0KLSAgICAJZWxzZQotICAgIAl7Ci0gICAgCQkvLyBjb3B5aW5nIGFsbCB0aGUgTlMgZGVjbGFyYXRpb25zIGZyb20gd3NkbDpkZWZpbml0aW9ucyB3c2RsOnR5cGVzCi0gICAgICAvL2NvcHlOU0RlY2xhcmF0aW9ucyhyb290LCBzY2hlbWEpOwotICAgICAgY29weU5TRGVjbGFyYXRpb25zKChFbGVtZW50KSBzY2hlbWEuZ2V0UGFyZW50Tm9kZSgpLCBzY2hlbWEpOwotICAgICAgLy8gUmVwbGFjaW5nIGFsbCByZWxhdGl2ZSBzY2hlbWFMb2NhdGlvbiBVUklzIHdpdGggYWJzb2x1dGUgb25lcwotICAgICAgLy9yZXBsYWNlUmVsYXRpdmVVUklzKHNjaGVtYSwgd3NkbFVSSSk7Ci0gICAgICAvLyBTZXJpYWxpemUgdGhlIHNjaGVtYSBlbGVtZW50cyBpbnNpZGUgdGhlIFR5cGVzLCB0aGVuIHVzZSB0aGlzIGFzCi0gICAgICAvLyB0aGUgc2NoZW1hIHN0cmluZyBmb3IgdGhlIHZhbGlkYXRpb24KLSAgICAgIC8vU3RyaW5nIHNjaGVtYVN0cmluZyA9Ci0gICAgICAvLyAgRE9NMldyaXRlci5ub2RlVG9TdHJpbmcoc2NoZW1hKTsKLSAgICAgIC8vIHNjaGVtYVN0cmluZ3MuYWRkKHNjaGVtYVN0cmluZyk7Ci0gICAgICAJfQotICAgICAgfQotICAgIH0KLSAgCXJldHVybiBudWxsOwotICB9Ci0gIAkKLSAgcHVibGljIExpc3QgZ2V0U2NoZW1hc1dpdGhTYW1lTmFtZXNwYWNlKExpc3Qgc2NoZW1hRWxlbWVudHMsIFN0cmluZyB0YXJnZXROYW1lc3BhY2UpCi0gIHsgCi0gIAlMaXN0IHJlc3VsdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBJdGVyYXRvciBpID0gc2NoZW1hRWxlbWVudHMuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaS5oYXNOZXh0KCkpCi0gICAgewotICAgICAgRWxlbWVudCBzY2hlbWEgPSAoRWxlbWVudClpLm5leHQoKTsKLSAgICAgIFN0cmluZyBzY2hlbWFUYXJnZXROYW1lc3BhY2UgPSBzY2hlbWEuZ2V0QXR0cmlidXRlKENvbnN0YW50cy5BVFRSX1RBUkdFVF9OQU1FU1BBQ0UpOwotICAgICAgaWYgKHNjaGVtYVRhcmdldE5hbWVzcGFjZSA9PSBudWxsKQotICAgICAgIAlzY2hlbWFUYXJnZXROYW1lc3BhY2UgPSAiIjsKLSAgICAgICAgCi0gICAgICBpZiAoc2NoZW1hVGFyZ2V0TmFtZXNwYWNlLmVxdWFscyh0YXJnZXROYW1lc3BhY2UpKQotICAgICAgewotICAgICAgIAlyZXN1bHQuYWRkKHNjaGVtYSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBkdXBsaWNhdGVOYW1lc3BhY2VzRGV0ZWN0ZWQoTGlzdCBzY2hlbWFFbGVtZW50cykKLSAgeyAKLSAgCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0gICAgTGlzdCBuYW1lc3BhY2VzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIEl0ZXJhdG9yIGkgPSBzY2hlbWFFbGVtZW50cy5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpLmhhc05leHQoKSkKLSAgICB7Ci0gICAgCUVsZW1lbnQgc2NoZW1hID0gKEVsZW1lbnQpaS5uZXh0KCk7Ci0gICAgICAgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSBzY2hlbWEuZ2V0QXR0cmlidXRlKENvbnN0YW50cy5BVFRSX1RBUkdFVF9OQU1FU1BBQ0UpOwotICAgICAgICBpZiAodGFyZ2V0TmFtZXNwYWNlID09IG51bGwpCi0gICAgICAgIAl0YXJnZXROYW1lc3BhY2UgPSAiIjsKLSAgICAgICAgCi0gICAgICAgIGlmIChuYW1lc3BhY2VzLmNvbnRhaW5zKHRhcmdldE5hbWVzcGFjZSkpCi0gICAgICAgIHsKLSAgICAgICAgCXJlc3VsdCA9IHRydWU7Ci0gICAgICAgIAlicmVhazsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgCW5hbWVzcGFjZXMuYWRkKHRhcmdldE5hbWVzcGFjZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlc2UgdGVzdHMgc2hvdWxkIGJlIHJ1biAoZGVwZW5kaW5nIG9uIHRoZSBhbmFseXplcgotICAgKiBjb25maWcpCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBydW5UZXN0cygpIHsgcmV0dXJuIHRlc3RhYmxlOyB9Ci0gIAotICBwdWJsaWMgdm9pZCB2YWxpZGF0ZUFydGlmYWN0KCkgdGhyb3dzIFdTSUV4Y2VwdGlvbiB7Ci0gICAgICAvLyBHZXQgdGhlIGxvZyBmaWxlIHJlYWRlcgotICAgICAgTG9nUmVhZGVyIGxvZ1JlYWRlciA9IERvY3VtZW50RmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld0xvZ1JlYWRlcigpOwotCi0gICAgICAvLyBDcmVhdGUgbG9nIHJlYWRlciBjYWxsYmFjawotICAgICAgTG9nUHJvY2Vzc29yIGVudmVsb3BlUHJvY2Vzc29yID0gbmV3IExvZ1Byb2Nlc3Nvcih0aGlzKTsKLQotICAgICAgLy8gU3RhcnQgcmVhZGluZyB0aGUgbG9nIGZpbGUKLSAgICAgIGxvZ1JlYWRlci5yZWFkTG9nKGFuYWx5emVyQ29uZmlnLmdldExvZ0xvY2F0aW9uKCksIGVudmVsb3BlUHJvY2Vzc29yKTsKLSAgfQotCi0gIHByb3RlY3RlZCBjbGFzcyBMb2dQcm9jZXNzb3IgaW1wbGVtZW50cyBNZXNzYWdlRW50cnlIYW5kbGVyIHsKLSAgICAgIExvZ1ZhbGlkYXRvciB2YWxpZGF0b3IgPSBudWxsOwotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlIG1lc3NhZ2UgcHJvY2Vzc29yIGFzIGEgbG9nIHJlYWRlciBjYWxsYmFjayBmdW5jdGlvbi4KLSAgICAgKi8KLSAgICAgIExvZ1Byb2Nlc3NvcihMb2dWYWxpZGF0b3IgdmFsaWRhdG9yKSB7Ci0gICAgICAgICAgdGhpcy52YWxpZGF0b3IgPSB2YWxpZGF0b3I7Ci0gICAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBQcm9jZXNzIGFydGlmYWN0IHJlZmVyZW5jZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBwcm9jZXNzQXJ0aWZhY3RSZWZlcmVuY2UoQXJ0aWZhY3RSZWZlcmVuY2UgYXJ0aWZhY3RSZWZlcmVuY2UpCi0gICAgICAgICAgICB0aHJvd3MgV1NJRXhjZXB0aW9uIHsKLSAgICAgICAgcmVwb3J0ZXIuYWRkQXJ0aWZhY3RSZWZlcmVuY2UoYXJ0aWZhY3RSZWZlcmVuY2UpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFByb2Nlc3MgYSBzaW5nbGUgbG9nIGVudHJ5LgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHByb2Nlc3NMb2dFbnRyeShFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KSB0aHJvd3MgV1NJRXhjZXB0aW9uIHsKLSAgICAgICAgdmFsaWRhdG9yLnZhbGlkYXRlKGVudHJ5Q29udGV4dCk7Ci0gICAgfQotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9CYXNlVmFsaWRhdG9ySW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9CYXNlVmFsaWRhdG9ySW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzJjZTM0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvQmFzZVZhbGlkYXRvckltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5UcmVlTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5BbmFseXplckNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuUHJvZmlsZUFydGlmYWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkJhc2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW52ZWxvcGVWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5FbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkZhaWx1cmVEZXRhaWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5QcmVyZXFGYWlsZWRMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0QXJ0aWZhY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LmltcGwuUHJlcmVxRmFpbGVkTGlzdEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRW50cnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MRG9jdW1lbnRDYWNoZVVzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5kb20uRWxlbWVudExvY2F0aW9uOwotCi0vKioKLSAqIFRoZSBXU0RMIHZhbGlkYXRvciB3aWxsIHZlcmlmeSB0aGF0IHRoZSBXU0RMIGFuZCBhc3NvY2lhdGVkIFhNTCBzY2hlbWEgZGVmaW5pdGlvbnMKLSAqIGFyZSBpbiBjb25mb3JtYW5jZSB3aXRoIHRoZSBwcm9maWxlLgotICoKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqIEBhdXRob3IgR3JhaGFtIFR1cnJlbGwgICAoZ3R1cnJlbGxAdWsuaWJtLmNvbSkKLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIEJhc2VWYWxpZGF0b3JJbXBsCi0gIGV4dGVuZHMgWE1MRG9jdW1lbnRDYWNoZVVzZXIKLSAgaW1wbGVtZW50cyBCYXNlVmFsaWRhdG9yCi17Ci0KLSAgLyoqCi0gICAqIEEgaGFzaHRhYmxlIHRoYXQgbWFwcyBhc3NlcnRpb24gcmVzdWx0cyB0byB0aGVpciBwcmlvcml0aWVzLCAwIGlzIGxvd2VzdAotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgSGFzaHRhYmxlIHJlc3VsdFByaW9yaXR5ID0gbmV3IEhhc2h0YWJsZSg2KTsKLSAgc3RhdGljIHsKLSAgICByZXN1bHRQcmlvcml0eS5wdXQoQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQsIG5ldyBJbnRlZ2VyKDApKTsKLSAgICByZXN1bHRQcmlvcml0eS5wdXQoQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRSwgbmV3IEludGVnZXIoMSkpOwotICAgIHJlc3VsdFByaW9yaXR5LnB1dChBc3NlcnRpb25SZXN1bHQuUkVTVUxUX01JU1NJTkdfSU5QVVQsIG5ldyBJbnRlZ2VyKDIpKTsKLSAgICByZXN1bHRQcmlvcml0eS5wdXQoQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9XQVJOSU5HLCBuZXcgSW50ZWdlcigzKSk7Ci0gICAgcmVzdWx0UHJpb3JpdHkucHV0KEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUFJFUkVRX0ZBSUxFRCwgbmV3IEludGVnZXIoNCkpOwotICAgIHJlc3VsdFByaW9yaXR5LnB1dChBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRCwgbmV3IEludGVnZXIoNSkpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBoaWdoZXN0IHByaW9yaXR5IHZhbHVlIGJlaW5nIHBhc3NlZCB3aGVuIHByb2Nlc3NpbmcgcHJlLXJlcXVpc2l0ZXMKLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVhfVkFMSURfUFJJT1JJVFkgPSAxOwotCi0gIC8qKgotICAgKiBBbmFseXplciBjb250ZXh0LgotICAgKi8KLSAgcHVibGljIEFuYWx5emVyQ29udGV4dCBhbmFseXplckNvbnRleHQ7Ci0KLSAgLyoqCi0gICAqIFByb2ZpbGUgYXJ0aWZhY3QuCi0gICAqLwotICBwcm90ZWN0ZWQgUHJvZmlsZUFydGlmYWN0IHByb2ZpbGVBcnRpZmFjdDsKLQotICAvKioKLSAgICogUmVwb3J0ZXIuCi0gICAqLwotICBwcm90ZWN0ZWQgUmVwb3J0ZXIgcmVwb3J0ZXI7Ci0KLSAgLyoqCi0gICAqIEVudHJ5LgotICAgKi8KLSAgLy8gcHJvdGVjdGVkIEVudHJ5IGVudHJ5OwotCi0gIC8qKgotICAgKiBSZXBvcnQgYXJ0aWZhY3QuCi0gICAqLwotICBwcm90ZWN0ZWQgUmVwb3J0QXJ0aWZhY3QgcmVwb3J0QXJ0aWZhY3Q7Ci0KLSAgLyoqCi0gICAqIFZlcmJvc2Ugb3B0aW9uLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gdmVyYm9zZU9wdGlvbiA9IGZhbHNlOwotCi0gIC8qKgotICAgKiBUZXN0IGFzc2VydGlvbiBwcm9jZXNzZWQgY291bnQuCi0gICAqLwotICBwcm90ZWN0ZWQgaW50IGFzc2VydGlvbkNvdW50ID0gMDsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqLwotICBwdWJsaWMgQmFzZVZhbGlkYXRvckltcGwoKQotICB7Ci0gIH0KLQotICAvKioKLSAgICogSW5pdGlhaWxpemUgdmFsaWRhdGlvbiB0ZXN0IHByb2NlZHVyZS4KLSAgICogQHBhcmFtIGFuYWx5emVyQ29udGV4dCB0aGUgYW5hbHl6ZXJDb250ZXh0LgotICAgKiBAcGFyYW0gcHJvZmlsZUFydGlmYWN0IHRoZSBwcm9maWxlIGFydGlmaWFjdC4KLSAgICogQHBhcmFtIHJlcG9ydEFydGlmYWN0ICB0aGUgcmVwb3J0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gcmVwb3J0ZXIgICAgICAgIGEgUmVwb3J0ZXIgb2JqZWN0LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB2YWxpZGF0b3IgY291bGQgbm90IGJlIGluaXRpYWxpemVkLgotICAgKi8KLSAgcHVibGljIHZvaWQgaW5pdCgKLSAgICBBbmFseXplckNvbnRleHQgYW5hbHl6ZXJDb250ZXh0LAotICAgIFByb2ZpbGVBcnRpZmFjdCBwcm9maWxlQXJ0aWZhY3QsCi0gICAgUmVwb3J0QXJ0aWZhY3QgcmVwb3J0QXJ0aWZhY3QsCi0gICAgUmVwb3J0ZXIgcmVwb3J0ZXIpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gU2F2ZSBpbnB1dCByZWZlcmVuY2VzCi0gICAgdGhpcy5hbmFseXplckNvbnRleHQgPSBhbmFseXplckNvbnRleHQ7Ci0gICAgdGhpcy5wcm9maWxlQXJ0aWZhY3QgPSBwcm9maWxlQXJ0aWZhY3Q7Ci0gICAgdGhpcy5yZXBvcnRBcnRpZmFjdCA9IHJlcG9ydEFydGlmYWN0OwotICAgIHRoaXMucmVwb3J0ZXIgPSByZXBvcnRlcjsKLQotICAgIC8vIEdldCB2ZXJib3NlIG9wdGlvbiAgICAKLSAgICB2ZXJib3NlT3B0aW9uID0KLSAgICAgIHJlcG9ydGVyCi0gICAgICAgIC5nZXRSZXBvcnQoKQotICAgICAgICAuZ2V0UmVwb3J0Q29udGV4dCgpCi0gICAgICAgIC5nZXRBbmFseXplcigpCi0gICAgICAgIC5nZXRBbmFseXplckNvbmZpZygpCi0gICAgICAgIC5nZXRWZXJib3NlT3B0aW9uKCk7Ci0gIH0KLQotICAvKioKLSAgICogUHJvY2VzcyBhbGwgb2YgdGhlIHRlc3QgYXNzZXJ0aW9ucyBmb3Igb25lIGVudHJ5LgotICAgKiBAcGFyYW0gY2xhc3NQcmVmaXggYSBjbGFzcyBwcmVmaXguCi0gICAqIEBwYXJhbSBlbnRyeUNvbnRleHQgYW4gZW50cnkgY29udGV4dC4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgc2VyaW91cyBwcm9ibGVtcyBvY2N1ciB3aGlsZSBwcm9jZXNzaW5nIAotICAgKiAgICAgICAgIGFsbCBvZiB0aGUgdGVzdCBhc3NlcnRpb25zIGZvciBhbiBlbnRyeS4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHByb2Nlc3NBc3NlcnRpb25zKAotICAgIFN0cmluZyBjbGFzc1ByZWZpeCwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIGxvbmcgc3RhcnRUaW1lID0gMDsKLQotICAgIEhhc2hNYXAgcHJvY2Vzc0xpc3QgPSBuZXcgSGFzaE1hcCgpOwotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiA9IG51bGw7Ci0gICAgQXNzZXJ0aW9uUHJvY2VzcyBhc3NlcnRpb25Qcm9jZXNzOwotICAgIEFzc2VydGlvblJlc3VsdCBhc3NlcnRpb25SZXN1bHQ7Ci0KLSAgICBUcmVlTWFwIHByZVJlcVJlc3VsdHM7Ci0gICAgUHJlcmVxRmFpbGVkTGlzdCBwcmVyZXFGYWlsZWRMaXN0OwotICAgIFN0cmluZyBwcmVSZXFJZDsKLQotICAgIENsYXNzW10gcGFyYW1UeXBlcyA9IG5ldyBDbGFzc1sxXTsKLSAgICAvLyBJZiB0aGlzIGlzIGFuIGluc3RhbmNlIG9mIE1lc3NhZ2VWYWxpZGF0b3Igb3IgRW52ZWxvcGVWYWxpZGF0b3IKLSAgICAvLyB0aGVuIHVzZSBCYXNlTWVzc2FnZVZhbGlkYXRvciBhcyBhIHBhcmFtIHR5cGUgb2YgYXNzZXJ0aW9ucyBjb25zdHJ1Y3RvcgotICAgIHBhcmFtVHlwZXNbMF0gPSB0aGlzIGluc3RhbmNlb2YgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgPwotICAgICAgQmFzZU1lc3NhZ2VWYWxpZGF0b3IuY2xhc3MgOiB0aGlzLmdldENsYXNzKCk7Ci0KLSAgICBPYmplY3RbXSBwYXJhbXMgPSBuZXcgT2JqZWN0WzFdOwotICAgIHBhcmFtc1swXSA9IHRoaXM7Ci0KLSAgICAvLyBHZXQgZW50cnkgZnJvbSBjb250ZXh0Ci0gICAgRW50cnkgZW50cnkgPSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKTsKLQotICAgIC8vIEFkZCBlbnRyeSB0byBhcnRpZmFjdAotICAgIHRoaXMucmVwb3J0QXJ0aWZhY3QuYWRkRW50cnkoZW50cnkpOwotCi0gICAgLy8gQWRkIGVudHJ5IHRvIHJlcG9ydAotICAgIGlmICh0aGlzIGluc3RhbmNlb2YgRW52ZWxvcGVWYWxpZGF0b3IpCi0gICAgIAl0aGlzLnJlcG9ydGVyLnNldEN1cnJlbnRFbnZlbG9wZUVudHJ5KGVudHJ5KTsgCi0JZWxzZSB0aGlzLnJlcG9ydGVyLnNldEN1cnJlbnRFbnRyeShlbnRyeSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBHbyB0aHJvdWdoIHRoZSBsaXN0IG9mIHRlc3QgYXNzZXJ0aW9ucyBmb3IgdGhlIGFydGlmYWN0Ci0gICAgICBJdGVyYXRvciBpdGVyYXRvciA9IHByb2ZpbGVBcnRpZmFjdC5nZXRUZXN0QXNzZXJ0aW9uTGlzdCgpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICAvLyBHZXQgbmV4dCB0ZXN0IGFzc2VydGlvbgotICAgICAgICB0ZXN0QXNzZXJ0aW9uID0gKFRlc3RBc3NlcnRpb24pIGl0ZXJhdG9yLm5leHQoKTsKLQotICAgICAgICAvLyBSZXNldCB2YXJpYWJsZXMKLSAgICAgICAgYXNzZXJ0aW9uUmVzdWx0ID0gbnVsbDsKLQotICAgICAgICAvLyBJZiB0aGUgdGVzdCBhc3NlcnRpb24gaXMgZW5hYmxlZCwgdGhlbiBjb250aW51ZQotICAgICAgICAvLyAgICAgICAgaWYgKCh0ZXN0QXNzZXJ0aW9uLmlzRW5hYmxlZCgpKSAmJiAKLSAgICAgICAgLy8gICAgICAgICAgICB0ZXN0QXNzZXJ0aW9uLmdldEVudHJ5VHlwZU5hbWUoKS5lcXVhbHModGFyZ2V0Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5VHlwZSgpLmdldFR5cGVOYW1lKCkpKSB7IAotICAgICAgICBpZiAodGVzdEFzc2VydGlvbi5pc0VuYWJsZWQoKQotICAgICAgICAgICYmIGlzUHJpbWFyeUVudHJ5VHlwZU1hdGNoKHRlc3RBc3NlcnRpb24sIGVudHJ5Q29udGV4dCkpCi0gICAgICAgIHsKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBBZGQgMSB0byBhc3NlcnRpb24gcHJvY2Vzc2VkIGNvdW50Ci0gICAgICAgICAgICBhc3NlcnRpb25Db3VudCsrOwotCi0gICAgICAgICAgICAvLyBJZiB0aGUgYXNzZXJ0aW9uIHByb2Nlc3MgaGFzbid0IGJlZW4gY3JlYXRlZCB5ZXQsIHRoZW4gY3JlYXRlIGl0Ci0gICAgICAgICAgICBpZiAoKGFzc2VydGlvblByb2Nlc3MgPQotICAgICAgICAgICAgICAoQXNzZXJ0aW9uUHJvY2VzcykgcHJvY2Vzc0xpc3QuZ2V0KHRlc3RBc3NlcnRpb24uZ2V0SWQoKSkpCi0gICAgICAgICAgICAgID09IG51bGwpCi0gICAgICAgICAgICB7Ci0KLSAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IGFzc2VydGlvbiBwcm9jZXNzCi0gICAgICAgICAgICAgIENsYXNzIGFzc2VydGlvbkNsYXNzID0KLSAgICAgICAgICAgICAgICBDbGFzcy5mb3JOYW1lKGNsYXNzUHJlZml4ICsgdGVzdEFzc2VydGlvbi5nZXRJZCgpKTsKLQotICAgICAgICAgICAgICBhc3NlcnRpb25Qcm9jZXNzID0KLSAgICAgICAgICAgICAgICAoQXNzZXJ0aW9uUHJvY2VzcykgYXNzZXJ0aW9uQ2xhc3MuZ2V0Q29uc3RydWN0b3IoCi0gICAgICAgICAgICAgICAgICBwYXJhbVR5cGVzKS5uZXdJbnN0YW5jZSgKLSAgICAgICAgICAgICAgICAgIHBhcmFtcyk7Ci0KLSAgICAgICAgICAgICAgLy8gQWRkIGl0IHRvIHRoZSBsaXN0Ci0gICAgICAgICAgICAgIHByb2Nlc3NMaXN0LnB1dCh0ZXN0QXNzZXJ0aW9uLmdldElkKCksIGFzc2VydGlvblByb2Nlc3MpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBDaGVjayB3aGV0aGVyIGVudHJ5IGlzIG51bGwKLSAgICAgICAgICAgIGlmIChlbnRyeS5nZXRFbnRyeURldGFpbCgpID09IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGFzc2VydGlvblJlc3VsdCA9Ci0gICAgICAgICAgICAgICAgY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgICAgICAgICAgICAgdGVzdEFzc2VydGlvbiwKLSAgICAgICAgICAgICAgICAgIEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTUlTU0lOR19JTlBVVCwKLSAgICAgICAgICAgICAgICAgIChTdHJpbmcpIG51bGwpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIHRlc3QgYXNzZXJ0aW9uIHNob3VsZCBiZSBydW4KLSAgICAgICAgICAgIC8vaWYgKGlzTm90QXBwbGljYWJsZSh0ZXN0QXNzZXJ0aW9uLCBlbnRyeUNvbnRleHQpKSB7Ci0gICAgICAgICAgICBlbHNlIGlmIChpc05vdEFwcGxpY2FibGUodGVzdEFzc2VydGlvbikpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGFzc2VydGlvblJlc3VsdCA9Ci0gICAgICAgICAgICAgICAgY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgICAgICAgICAgICAgdGVzdEFzc2VydGlvbiwKLSAgICAgICAgICAgICAgICAgIEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEUsCi0gICAgICAgICAgICAgICAgICAoU3RyaW5nKSBudWxsKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gUHJvY2Vzc2luZyBhbGwgdGhlIGFzc2VydGlvbiBwcmUtcmVxdWlzaXRlcwotCi0gICAgICAgICAgICAgIHByZVJlcVJlc3VsdHMgPSBudWxsOwotICAgICAgICAgICAgICBwcmVyZXFGYWlsZWRMaXN0ID0gbnVsbDsKLSAgICAgICAgICAgICAgLy8gR2V0IGxpc3Qgb2YgcHJlLXJlcXMgZm9yIHNwZWNpZmllZCBhc3NlcnRpb24KLSAgICAgICAgICAgICAgSXRlcmF0b3IgaSA9IHRlc3RBc3NlcnRpb24uZ2V0UHJlcmVxSWRMaXN0KCkuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgICAgd2hpbGUgKGkuaGFzTmV4dCgpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHByZVJlcVJlc3VsdHMgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgIHByZVJlcVJlc3VsdHMgPSBuZXcgVHJlZU1hcCgpOwotICAgICAgICAgICAgICAgIC8vIEdldCBuZXh0IGlkCi0gICAgICAgICAgICAgICAgcHJlUmVxSWQgPSAoU3RyaW5nKSBpLm5leHQoKTsKLSAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIHByZXJlcSByZXN1bHQKLSAgICAgICAgICAgICAgICBBc3NlcnRpb25SZXN1bHQgcHJlUmVxUmVzdWx0ID0gcmVwb3J0ZXIuZ2V0QXNzZXJ0aW9uUmVzdWx0KHByZVJlcUlkKTsKLQotICAgICAgICAgICAgICAgIC8vIEFkZGluZyBhIHJlc3VsdCBwcmlvcml0eSB2YWx1ZSB0byBwcmVSZXFSZXN1bHRzCi0gICAgICAgICAgICAgICAgcHJlUmVxUmVzdWx0cy5wdXQoCi0gICAgICAgICAgICAgICAgICByZXN1bHRQcmlvcml0eS5nZXQocHJlUmVxUmVzdWx0LmdldFJlc3VsdCgpKSwKLSAgICAgICAgICAgICAgICAgIHByZVJlcVJlc3VsdC5nZXRSZXN1bHQoKSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcHJlcmVxIGZhaWxlZCwgdGhlbiBhZGQgaXQgdG8gdGhlIGxpc3QKLSAgICAgICAgICAgICAgICBpZiAoKChJbnRlZ2VyKXJlc3VsdFByaW9yaXR5LmdldChwcmVSZXFSZXN1bHQuZ2V0UmVzdWx0KCkpKS5pbnRWYWx1ZSgpCi0gICAgICAgICAgICAgICAgICA+IE1BWF9WQUxJRF9QUklPUklUWSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAvLyBBZGRpbmcgZmFpbGVkIHByZXJlcSBJRCB0byB0aGUgbGlzdAotICAgICAgICAgICAgICAgICAgaWYgKHByZXJlcUZhaWxlZExpc3QgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgcHJlcmVxRmFpbGVkTGlzdCA9IG5ldyBQcmVyZXFGYWlsZWRMaXN0SW1wbCgpOwotICAgICAgICAgICAgICAgICAgcHJlcmVxRmFpbGVkTGlzdC5hZGRUZXN0QXNzZXJ0aW9uSUQocHJlUmVxSWQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIGlmIChwcmVyZXFGYWlsZWRMaXN0ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAvLyBHZXR0aW5nIHRoZSBoaWdoZXN0IHByZS1yZXF1aXNpdGVzJyByZXN1bHQKLSAgICAgICAgICAgICAgICBJbnRlZ2VyIG1heFJlcyA9IChJbnRlZ2VyKXByZVJlcVJlc3VsdHMubGFzdEtleSgpOwotICAgICAgICAgICAgICAgIFN0cmluZyByZXNTdHJpbmcgPSAoU3RyaW5nKXByZVJlcVJlc3VsdHMuZ2V0KG1heFJlcyk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlc1N0cmluZy5lcXVhbHMoQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQpCi0gICAgICAgICAgICAgICAgICB8fHJlc1N0cmluZy5lcXVhbHMoQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9XQVJOSU5HKSkgewotICAgICAgICAgICAgICAgICAgcmVzU3RyaW5nID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QUkVSRVFfRkFJTEVEOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYXNzZXJ0aW9uIHJlc3VsdCBiYXNlZCBvbiBwcmUtcmVxdWlzaXRlcyB3aGljaCBhcmUgbm90IHBhc3NlZAotICAgICAgICAgICAgICAgIGFzc2VydGlvblJlc3VsdCA9IGNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXNTdHJpbmcsIHByZXJlcUZhaWxlZExpc3QpOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgLy8gUHJlLXJlcXVpc2l0ZXMgYXJlIHBhc3NlZCwgdmFsaWRhdGUgY3VycmVudCBhc3NlcnRpb24KLSAgICAgICAgICAgICAgZWxzZSB7Ci0KLSAgICAgICAgICAgICAgICAvLyBSZXNldCB0ZXN0IGFzc2VydGlvbgotICAgICAgICAgICAgICAgIGFzc2VydGlvblByb2Nlc3MucmVzZXQoKTsKLQotICAgICAgICAgICAgICAgIC8vICBWRVJCT1NFCi0gICAgICAgICAgICAgICAgaWYgKHZlcmJvc2VPcHRpb24pCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKAotICAgICAgICAgICAgICAgICAgICAiICBQcm9jZXNzaW5nICIKLSAgICAgICAgICAgICAgICAgICAgICArIHRlc3RBc3NlcnRpb24uZ2V0SWQoKQotICAgICAgICAgICAgICAgICAgICAgICsgIiBmb3IgZW50cnkgcmVmZXJlbmNlIElEIFsiCi0gICAgICAgICAgICAgICAgICAgICAgKyBlbnRyeS5nZXRSZWZlcmVuY2VJRCgpCi0gICAgICAgICAgICAgICAgICAgICAgKyAiXSAuLi4iKTsKLSAgICAgICAgICAgICAgICAgIHN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIFZhbGlkYXRlIHRoZSB0YXJnZXQKLSAgICAgICAgICAgICAgICBhc3NlcnRpb25SZXN1bHQgPQotICAgICAgICAgICAgICAgICAgYXNzZXJ0aW9uUHJvY2Vzcy52YWxpZGF0ZSh0ZXN0QXNzZXJ0aW9uLCBlbnRyeUNvbnRleHQpOwotCi0gICAgICAgICAgICAgICAgLy8gIFZFUkJPU0UKLSAgICAgICAgICAgICAgICBpZiAodmVyYm9zZU9wdGlvbikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oCi0gICAgICAgICAgICAgICAgICAgICIgICAgRWxhcHNlZCB0aW1lOiAiCi0gICAgICAgICAgICAgICAgICAgICAgKyAoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBzdGFydFRpbWUpCi0gICAgICAgICAgICAgICAgICAgICAgKyAibXMiKTsKLSAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEFkZCByZXN1bHQgdG8gdGhlIHJlcG9ydAotICAgICAgICAgICAgcmVwb3J0ZXIuYWRkQXNzZXJ0aW9uUmVzdWx0KGFzc2VydGlvblJlc3VsdCk7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgY2F0Y2ggKENsYXNzTm90Rm91bmRFeGNlcHRpb24gY25mZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBERUJVRzoKLSAgICAgICAgICAgIGlmICh0ZXN0QXNzZXJ0aW9uICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHJlcG9ydGVyCi0gICAgICAgICAgICAgICAgLmdldFJlcG9ydCgpCi0gICAgICAgICAgICAgICAgLmdldFJlcG9ydENvbnRleHQoKQotICAgICAgICAgICAgICAgIC5nZXRBbmFseXplcigpCi0gICAgICAgICAgICAgICAgLnByaW50TWVzc2FnZSgKLSAgICAgICAgICAgICAgICAiV0FSTklORzogIgotICAgICAgICAgICAgICAgICAgKyB0ZXN0QXNzZXJ0aW9uLmdldElkKCkKLSAgICAgICAgICAgICAgICAgICsgIiBpcyBub3Qgc3VwcG9ydGVkIGN1cnJlbnRseS4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJFWEVDRVBUSU9OOiAiICsgZS5nZXRNZXNzYWdlKCkpOwotICAgICAgaWYgKHZlcmJvc2VPcHRpb24pCi0gICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0KLSAgICAgIGlmIChlIGluc3RhbmNlb2YgV1NJRXhjZXB0aW9uKQotICAgICAgICB0aHJvdyAoV1NJRXhjZXB0aW9uKSBlOwotICAgICAgZWxzZQotICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpLCBlKTsKLSAgICB9Ci0KLSAgICBmaW5hbGx5Ci0gICAgewotICAgICAgLy8gSW5kaWNhdGUgdGhhdCB3ZSBhcmUgZG9uZSB3aXRoIHRoaXMgYXNzZXJ0aW9uIHRhcmdldAotICAgICAgdGhpcy5yZXBvcnRlci5lbmRDdXJyZW50RW50cnkoKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogRGV0ZXJtaW5lIGlmIHRoZSB0ZXN0IGFzc2VydGlvbiBzaG91bGQgYmUgcHJvY2Vzc2VkIGZvciB0aGUgY3VycmVudCBlbnRyeS4KLSAgICogQHBhcmFtIHRlc3RBc3NlcnRpb24gYSB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHBhcmFtIGVudHJ5Q29udGV4dCAgdGhlIGVudHJ5IGNvbnRleHQuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdGVzdCBhc3NlcnRpb24gc2hvdWxkIGJlIHByb2Nlc3NlZCBmb3IgdGhlIGN1cnJlbnQgZW50cnkuCi0gICAqLwotICBwcm90ZWN0ZWQgYWJzdHJhY3QgYm9vbGVhbiBpc1ByaW1hcnlFbnRyeVR5cGVNYXRjaCgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCk7Ci0KLSAgLyoqCi0gICAqIERldGVybWluZSBpZiB0aGUgdGVzdCBhc3NlcnRpb24gc2hvdWxkIGJlIHByb2Nlc3NlZCBmb3IgdGhlIGN1cnJlbnQgZW50cnkuCi0gICAqIEBwYXJhbSB0ZXN0QXNzZXJ0aW9uICBhIHRlc3QgYXNzZXJ0aW9uLgotICAgKiBAcGFyYW0gZW50cnkgICAgICAgICAgYW4gRW50cnkgb2JqZWN0Ci0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdGVzdCBhc3NlcnRpb24gc2hvdWxkIGJlIHByb2Nlc3NlZCBmb3IgdGhlIGN1cnJlbnQgZW50cnkuCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc1ByaW1hcnlFbnRyeVR5cGVNYXRjaCgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnkgZW50cnkpCi0gIHsKLSAgICBib29sZWFuIG1hdGNoID0gZmFsc2U7Ci0KLSAgICAvLyBJZiB0aGUgdGVzdCBhc3NlcnRpb24gZW50cnkgdHlwZSBtYXRjaGVzIHRoZSB0YXJnZXQgY29udGV4dCBlbnRyeSB0eXBlLCB0aGVuIGNvbnRpbmUKLSAgICBpZiAodGVzdEFzc2VydGlvbgotICAgICAgLmdldEVudHJ5VHlwZU5hbWUoKQotICAgICAgLmVxdWFscyhlbnRyeS5nZXRFbnRyeVR5cGUoKS5nZXRUeXBlTmFtZSgpKSkKLSAgICB7Ci0gICAgICBtYXRjaCA9IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1hdGNoOwotICB9Ci0KLSAgLyoqCi0gICAqIERldGVybWluZSBpZiB0aGUgdGVzdCBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUuCi0gICAqIEBwYXJhbSB0ZXN0QXNzZXJ0aW9uIGEgdGVzdCBhc3NlcnRpb24uCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdGVzdCBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUuCi0gICAqLwotICBwcm90ZWN0ZWQgYWJzdHJhY3QgYm9vbGVhbiBpc05vdEFwcGxpY2FibGUoVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uKTsKLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkJhc2VWYWxpZGF0b3IjY2xlYW51cCgpCi0gICAqLwotICBwdWJsaWMgdm9pZCBjbGVhbnVwKCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gSWYgbm8gYXNzZXJ0aW9ucyB3ZXJlIHByb2Nlc3NlZCwgdGhlbiBzZXQgYWxsIG1pc3NpbmdJbnB1dAotICAgIGlmIChhc3NlcnRpb25Db3VudCA9PSAwKQotICAgICAgc2V0QWxsTWlzc2luZ0lucHV0KCk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIGFzc2VydGlvbiByZXN1bHQuCi0gICAqIEBwYXJhbSB0ZXN0QXNzZXJ0aW9uIGEgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBwYXJhbSByZXN1bHQgICAgICAgIGEgU3RyaW5nIG9iamVjdC4KLSAgICogQHBhcmFtIGZhaWx1cmVEZXRhaWwgYSBGYWlsdXJlRGV0YWlsIG9iamVjdC4KLSAgICogQHJldHVybiBuZXdseSBjcmVhdGVkIHRlc3QgcmVzdWx0LgotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCBjcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIFN0cmluZyByZXN1bHQsCi0gICAgRmFpbHVyZURldGFpbCBmYWlsdXJlRGV0YWlsKQotICB7Ci0gICAgVmVjdG9yIGZhaWx1cmVEZXRhaWxMaXN0ID0gbnVsbDsKLQotICAgIC8vIENyZWF0ZSBmYWlsdXJlIGRldGFpbCBsaXN0Ci0gICAgaWYgKGZhaWx1cmVEZXRhaWwgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmYWlsdXJlRGV0YWlsTGlzdCA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIGZhaWx1cmVEZXRhaWxMaXN0LmFkZChmYWlsdXJlRGV0YWlsKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbExpc3QpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhc3NlcnRpb24gcmVzdWx0LgotICAgKiBAcGFyYW0gdGVzdEFzc2VydGlvbiAgICAgICAgIGEgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBwYXJhbSByZXN1bHQgICAgICAgICAgICAgICAgYSBTdHJpbmcgb2JqZWN0LgotICAgKiBAcGFyYW0gZmFpbHVyZURldGFpbE1lc3NhZ2UgIGEgZmFpbHVyZSBkZXRhaWwgbWVzc2FnZS4KLSAgICogQHJldHVybiBuZXdseSBjcmVhdGVkIHRlc3QgcmVzdWx0LgotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCBjcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIFN0cmluZyByZXN1bHQsCi0gICAgU3RyaW5nIGZhaWx1cmVEZXRhaWxNZXNzYWdlKQotICB7Ci0gICAgcmV0dXJuIGNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sCi0gICAgICByZXN1bHQsCi0gICAgICBmYWlsdXJlRGV0YWlsTWVzc2FnZSwKLSAgICAgIG51bGwpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhc3NlcnRpb24gcmVzdWx0LgotICAgKiBAcGFyYW0gdGVzdEFzc2VydGlvbiAgICAgICAgIGEgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBwYXJhbSByZXN1bHQgICAgICAgICAgICAgICAgYSBTdHJpbmcgb2JqZWN0LgotICAgKiBAcGFyYW0gZmFpbHVyZURldGFpbE1lc3NhZ2UgIGEgZmFpbHVyZSBkZXRhaWwgbWVzc2FnZS4KLSAgICogQHBhcmFtIGVsZW1lbnRMb2NhdGlvbiAgICAgICBlbGVtZW50IGxvY2F0aW9uLgotICAgKiBAcmV0dXJuIG5ld2x5IGNyZWF0ZWQgdGVzdCByZXN1bHQuCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IGNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgU3RyaW5nIHJlc3VsdCwKLSAgICBTdHJpbmcgZmFpbHVyZURldGFpbE1lc3NhZ2UsCi0gICAgRWxlbWVudExvY2F0aW9uIGVsZW1lbnRMb2NhdGlvbikKLSAgewotICAgIC8vIENyZWF0ZSBmYWlsdXJlIGRldGFpbCBsaXN0Ci0gICAgVmVjdG9yIGZhaWx1cmVEZXRhaWxMaXN0ID0gbnVsbDsKLSAgICBpZiAoZmFpbHVyZURldGFpbE1lc3NhZ2UgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmYWlsdXJlRGV0YWlsTGlzdCA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIEZhaWx1cmVEZXRhaWwgZmFpbHVyZURldGFpbCA9IHJlcG9ydGVyLmNyZWF0ZUZhaWx1cmVEZXRhaWwoKTsKLSAgICAgIGZhaWx1cmVEZXRhaWwuc2V0RmFpbHVyZU1lc3NhZ2UoZmFpbHVyZURldGFpbE1lc3NhZ2UpOwotICAgICAgZmFpbHVyZURldGFpbC5zZXRFbGVtZW50TG9jYXRpb24oZWxlbWVudExvY2F0aW9uKTsKLSAgICAgIGZhaWx1cmVEZXRhaWxMaXN0LmFkZChmYWlsdXJlRGV0YWlsKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbExpc3QpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhc3NlcnRpb24gcmVzdWx0LgotICAgKiBAcGFyYW0gdGVzdEFzc2VydGlvbiAgICAgYSB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHBhcmFtIHJlc3VsdCAgICAgICAgICAgIGEgU3RyaW5nIG9iamVjdC4KLSAgICogQHBhcmFtIGZhaWx1cmVEZXRhaWxMaXN0IGEgZmFpbHVyZSBkZXRhaWwgbGlzdC4KLSAgICogQHJldHVybiBuZXdseSBjcmVhdGVkIHRlc3QgcmVzdWx0LgotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCBjcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIFN0cmluZyByZXN1bHQsCi0gICAgVmVjdG9yIGZhaWx1cmVEZXRhaWxMaXN0KQotICB7Ci0gICAgLy8gQ3JlYXRlIGFzc2VydGlvbiByZXN1bHQKLSAgICBBc3NlcnRpb25SZXN1bHQgYXNzZXJ0aW9uUmVzdWx0ID0gcmVwb3J0ZXIuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KCk7Ci0KLSAgICAvLyBTZXQgdmFsdWVzIGluIGFzc2VydGlvbiByZXN1bHQKLSAgICBhc3NlcnRpb25SZXN1bHQuc2V0QXNzZXJ0aW9uKHRlc3RBc3NlcnRpb24pOwotICAgIGFzc2VydGlvblJlc3VsdC5zZXRSZXN1bHQocmVzdWx0KTsKLSAgICBhc3NlcnRpb25SZXN1bHQuc2V0RW50cnkocmVwb3J0ZXIuZ2V0UmVwb3J0KCkuZ2V0Q3VycmVudEVudHJ5KCkpOwotCi0gICAgLy8gU2V0IGZhaWx1cmUgZGV0YWlsIGxpc3QKLSAgICBhc3NlcnRpb25SZXN1bHQuc2V0RmFpbHVyZURldGFpbExpc3QoZmFpbHVyZURldGFpbExpc3QpOwotCi0gICAgcmV0dXJuIGFzc2VydGlvblJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgYXNzZXJ0aW9uIHJlc3VsdC4KLSAgICogQHBhcmFtIHRlc3RBc3NlcnRpb24gICAgIGEgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBwYXJhbSByZXN1bHQgICAgICAgICAgICBhIFN0cmluZyBvYmplY3QuCi0gICAqIEBwYXJhbSBwcmVyZXFGYWlsZWRMaXN0ICBhIGxpc3QgZmFpbGVkIHByZS1yZXF1aXNpdGUgYXNzZXJ0aW9ucy4KLSAgICogQHJldHVybiBuZXdseSBjcmVhdGVkIHRlc3QgcmVzdWx0LgotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCBjcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIFN0cmluZyByZXN1bHQsCi0gICAgUHJlcmVxRmFpbGVkTGlzdCBwcmVyZXFGYWlsZWRMaXN0KQotICB7Ci0gICAgLy8gQ3JlYXRlIGFzc2VydGlvbiByZXN1bHQKLSAgICBBc3NlcnRpb25SZXN1bHQgYXNzZXJ0aW9uUmVzdWx0ID0gcmVwb3J0ZXIuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KCk7Ci0KLSAgICAvLyBTZXQgdmFsdWVzIGluIGFzc2VydGlvbiByZXN1bHQKLSAgICBhc3NlcnRpb25SZXN1bHQuc2V0QXNzZXJ0aW9uKHRlc3RBc3NlcnRpb24pOwotICAgIGFzc2VydGlvblJlc3VsdC5zZXRSZXN1bHQocmVzdWx0KTsKLSAgICBhc3NlcnRpb25SZXN1bHQuc2V0RW50cnkocmVwb3J0ZXIuZ2V0UmVwb3J0KCkuZ2V0Q3VycmVudEVudHJ5KCkpOwotICAgIGFzc2VydGlvblJlc3VsdC5zZXRQcmVyZXFGYWlsZWRMaXN0KHByZXJlcUZhaWxlZExpc3QpOwotCi0gICAgcmV0dXJuIGFzc2VydGlvblJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiBBZGQgYXNzZXJ0aW9uIHJlc3VsdCB0byByZXBvcnQuCi0gICAqIEBwYXJhbSBhc3NlcnRpb25JZCAgYXNzZXJ0aW9uIGlkLgotICAgKiBAcGFyYW0gcmVzdWx0ICAgICAgIGFzc2VydGlvbiByZXN1bHQuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHRoZSBhc3NlcnRpb24gcmVzdWx0IGNhbm5vdCBiZSBhZGRlZCB0byB0aGUgcmVwb3J0LgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgYWRkQXNzZXJ0aW9uUmVzdWx0KFN0cmluZyBhc3NlcnRpb25JZCwgU3RyaW5nIHJlc3VsdCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBDcmVhdGUgdGVzdCBhc3NlcnRpb24gcmVzdWx0Ci0gICAgQXNzZXJ0aW9uUmVzdWx0IGFzc2VydGlvblJlc3VsdCA9IHJlcG9ydGVyLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgpOwotCi0gICAgLy8gU2V0IGFzc2VydGlvbiwgcmVzdWx0IGFuZCB0YXJnZXQKLSAgICBhc3NlcnRpb25SZXN1bHQuc2V0QXNzZXJ0aW9uKHByb2ZpbGVBcnRpZmFjdC5nZXRUZXN0QXNzZXJ0aW9uKGFzc2VydGlvbklkKSk7Ci0gICAgYXNzZXJ0aW9uUmVzdWx0LnNldFJlc3VsdChyZXN1bHQpOwotICAgIGFzc2VydGlvblJlc3VsdC5zZXRFbnRyeShyZXBvcnRlci5nZXRSZXBvcnQoKS5nZXRDdXJyZW50RW50cnkoKSk7Ci0KLSAgICAvLyBBZGQgaXQgdG8gdGhlIHJlcG9ydAotICAgIHJlcG9ydGVyLmFkZEFzc2VydGlvblJlc3VsdChhc3NlcnRpb25SZXN1bHQpOwotICB9Ci0KLSAgLyoqCi0gICAqIEFkZCBhc3NlcnRpb24gcmVzdWx0IHRvIHJlcG9ydCB3aXRoIGFuIGVycm9yIGRldGFpbCBtZXNzYWdlLgotICAgKiBAcGFyYW0gYXNzZXJ0aW9uSWQgICAgICAgICAgYXNzZXJ0aW9uIGlkLgotICAgKiBAcGFyYW0gcmVzdWx0ICAgICAgICAgICAgICAgYXNzZXJ0aW9uIHJlc3VsdC4KLSAgICogQHBhcmFtIGZhaWx1cmVEZXRhaWxNZXNzYWdlIGFuIGVycm9yIGRldGFpbCBtZXNzYWdlLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGUgYXNzZXJ0aW9uIHJlc3VsdCBjYW5ub3QgYmUgYWRkZWQgdG8gdGhlIHJlcG9ydC4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGFkZEFzc2VydGlvblJlc3VsdCgKLSAgICBTdHJpbmcgYXNzZXJ0aW9uSWQsCi0gICAgU3RyaW5nIHJlc3VsdCwKLSAgICBTdHJpbmcgZmFpbHVyZURldGFpbE1lc3NhZ2UpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gQ29udmVydCBtZXNzYWdlIHRvIHZlY3RvcgotICAgIFZlY3RvciBmYWlsdXJlRGV0YWlsTGlzdCA9IG51bGw7Ci0gICAgaWYgKGZhaWx1cmVEZXRhaWxNZXNzYWdlICE9IG51bGwpCi0gICAgewotICAgICAgZmFpbHVyZURldGFpbExpc3QgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBGYWlsdXJlRGV0YWlsIGZhaWx1cmVEZXRhaWwgPSByZXBvcnRlci5jcmVhdGVGYWlsdXJlRGV0YWlsKCk7Ci0gICAgICBmYWlsdXJlRGV0YWlsTGlzdC5hZGQoZmFpbHVyZURldGFpbCk7Ci0gICAgfQotCi0gICAgLy8gQWRkIGFzc2VydGlvbiByZXN1bHQKLSAgICBhZGRBc3NlcnRpb25SZXN1bHQoYXNzZXJ0aW9uSWQsIHJlc3VsdCwgZmFpbHVyZURldGFpbExpc3QpOwotICB9Ci0KLSAgLyoqCi0gICAqIEFkZCBhc3NlcnRpb24gcmVzdWx0IHRvIHJlcG9ydC4KLSAgICogQHBhcmFtIGFzc2VydGlvbklkICAgICAgICBhc3NlcnRpb24gaWQuCi0gICAqIEBwYXJhbSByZXN1bHQgICAgICAgICAgICAgYXNzZXJ0aW9uIHJlc3VsdC4KLSAgICogQHBhcmFtIGZhaWx1cmVEZXRhaWxMaXN0ICBhIGxpc3Qgb2YgZXJyb3IgZGV0YWlsIG1lc3NhZ2VzLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGUgYXNzZXJ0aW9uIHJlc3VsdCBjYW5ub3QgYmUgYWRkZWQgdG8gdGhlIHJlcG9ydC4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGFkZEFzc2VydGlvblJlc3VsdCgKLSAgICBTdHJpbmcgYXNzZXJ0aW9uSWQsCi0gICAgU3RyaW5nIHJlc3VsdCwKLSAgICBWZWN0b3IgZmFpbHVyZURldGFpbExpc3QpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gQ3JlYXRlIHRlc3QgYXNzZXJ0aW9uIHJlc3VsdAotICAgIEFzc2VydGlvblJlc3VsdCBhc3NlcnRpb25SZXN1bHQgPSByZXBvcnRlci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoKTsKLQotICAgIC8vIFNldCBhc3NlcnRpb24sIHJlc3VsdCBhbmQgdGFyZ2V0Ci0gICAgYXNzZXJ0aW9uUmVzdWx0LnNldEFzc2VydGlvbihwcm9maWxlQXJ0aWZhY3QuZ2V0VGVzdEFzc2VydGlvbihhc3NlcnRpb25JZCkpOwotICAgIGFzc2VydGlvblJlc3VsdC5zZXRSZXN1bHQocmVzdWx0KTsKLSAgICBhc3NlcnRpb25SZXN1bHQuc2V0RW50cnkocmVwb3J0ZXIuZ2V0UmVwb3J0KCkuZ2V0Q3VycmVudEVudHJ5KCkpOwotICAgIGFzc2VydGlvblJlc3VsdC5zZXRGYWlsdXJlRGV0YWlsTGlzdChmYWlsdXJlRGV0YWlsTGlzdCk7Ci0KLSAgICAvLyBBZGQgaXQgdG8gdGhlIHJlcG9ydAotICAgIHJlcG9ydGVyLmFkZEFzc2VydGlvblJlc3VsdChhc3NlcnRpb25SZXN1bHQpOwotICB9Ci0KLSAgLyoqCi0gICAqIEFkZCBtaXNzaW5nSW5wdXQgYXNzZXJ0aW9uIHJlc3VsdCB0byByZXBvcnQuCi0gICAqIEBwYXJhbSB0ZXN0QXNzZXJ0aW9uIGEgdGVzdCBhc3NlcnRpb24uCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHRoZXJlIGlzIGFueSBwcm9ibGVtIGFkZGluZyBtaXNzaW5nSW5wdXQgCi0gICAqIAkJIGFzc2VydGlvbiByZXN1bHQgdG8gcmVwb3J0LgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgYWRkTWlzc2luZ0lucHV0UmVzdWx0KFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbikKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBDcmVhdGUgdGVzdCBhc3NlcnRpb24gcmVzdWx0Ci0gICAgQXNzZXJ0aW9uUmVzdWx0IGFzc2VydGlvblJlc3VsdCA9IHJlcG9ydGVyLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgpOwotCi0gICAgLy8gU2V0IGFzc2VydGlvbiwgcmVzdWx0IGFuZCB0YXJnZXQKLSAgICBhc3NlcnRpb25SZXN1bHQuc2V0QXNzZXJ0aW9uKHRlc3RBc3NlcnRpb24pOwotICAgIGFzc2VydGlvblJlc3VsdC5zZXRSZXN1bHQoQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9NSVNTSU5HX0lOUFVUKTsKLSAgICBhc3NlcnRpb25SZXN1bHQuc2V0RW50cnkocmVwb3J0ZXIuZ2V0UmVwb3J0KCkuZ2V0Q3VycmVudEVudHJ5KCkpOwotCi0gICAgLy8gQWRkIGl0IHRvIHRoZSByZXBvcnQKLSAgICByZXBvcnRlci5hZGRBc3NlcnRpb25SZXN1bHQoYXNzZXJ0aW9uUmVzdWx0KTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuQmFzZVZhbGlkYXRvciNzZXRBbGxNaXNzaW5nSW5wdXQoKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0QWxsTWlzc2luZ0lucHV0KCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gSWYgcHJvZmlsZSBhcnRpZmFjdCBpcyBzZXQKLSAgICBpZiAocHJvZmlsZUFydGlmYWN0ICE9IG51bGwpCi0gICAgewotICAgICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uOwotICAKLSAgICAgIC8vIENyZWF0ZSBlbnRyeQotICAgICAgRW50cnkgZW50cnkgPSB0aGlzLnJlcG9ydGVyLmdldFJlcG9ydCgpLmNyZWF0ZUVudHJ5KCk7Ci0gICAgICBlbnRyeS5zZXRBcnRpZmFjdE5hbWUodGhpcy5yZXBvcnRBcnRpZmFjdC5nZXRUeXBlKCkuZ2V0VHlwZU5hbWUoKSk7Ci0gIAotICAgICAgLy8gQWRkIGVudHJ5IHRvIGFydGlmYWN0Ci0gICAgICB0aGlzLnJlcG9ydEFydGlmYWN0LmFkZEVudHJ5KGVudHJ5KTsKLSAgCi0gICAgICAvLyBBZGQgZW50cnkgdG8gcmVwb3J0Ci0gICAgICB0aGlzLnJlcG9ydGVyLnNldEN1cnJlbnRFbnRyeShlbnRyeSk7Ci0gIAotICAgICAgLy8gR28gdGhyb3VnaCB0aGUgbGlzdCBvZiB0ZXN0IGFzc2VydGlvbnMgZm9yIHRoZSBhcnRpZmFjdAotICAgICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBwcm9maWxlQXJ0aWZhY3QuZ2V0VGVzdEFzc2VydGlvbkxpc3QoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgLy8gR2V0IG5leHQgdGVzdCBhc3NlcnRpb24KLSAgICAgICAgdGVzdEFzc2VydGlvbiA9IChUZXN0QXNzZXJ0aW9uKSBpdGVyYXRvci5uZXh0KCk7Ci0gIAotICAgICAgICAvLyBBZGQgbWlzc2luZ0lucHV0IHJlc3VsdAotICAgICAgICBpZiAodGVzdEFzc2VydGlvbi5pc0VuYWJsZWQoKSkKLSAgICAgICAgICBhZGRNaXNzaW5nSW5wdXRSZXN1bHQodGVzdEFzc2VydGlvbik7Ci0gICAgICB9Ci0gIAotICAgICAgLy8gSW5kaWNhdGUgdGhhdCB3ZSBhcmUgZG9uZSB3aXRoIHRoaXMgYXNzZXJ0aW9uIHRhcmdldAotICAgICAgdGhpcy5yZXBvcnRlci5lbmRDdXJyZW50RW50cnkoKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogU2V0IGFsbCByZXN1bHRzIGZvciBhbiBlbnRyeSB0eXBlIHRvIG1pc3NpbmdJbnB1dC4KLSAgICogQHBhcmFtIGVudHJ5VHlwZSBhbiBFbnRyeVR5cGUgb2JqZWN0LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBhbnkgcHJvYmxlbSB3aGlsZSBwcm9jZXNzaW5nLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc2V0TWlzc2luZ0lucHV0KEVudHJ5VHlwZSBlbnRyeVR5cGUpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbjsKLQotICAgIC8vIENyZWF0ZSBlbnRyeSAKLSAgICBFbnRyeSBlbnRyeSA9IHRoaXMucmVwb3J0ZXIuZ2V0UmVwb3J0KCkuY3JlYXRlRW50cnkoKTsKLSAgICBlbnRyeS5zZXRFbnRyeVR5cGUoZW50cnlUeXBlKTsKLSAgICBlbnRyeS5zZXRSZWZlcmVuY2VJRCgiWyIgKyBlbnRyeVR5cGUuZ2V0VHlwZU5hbWUoKSArICJdIik7Ci0KLSAgICAvLyBBZGQgZW50cnkgdG8gYXJ0aWZhY3QKLSAgICB0aGlzLnJlcG9ydEFydGlmYWN0LmFkZEVudHJ5KGVudHJ5KTsKLQotICAgIC8vIEFkZCBlbnRyeSB0byByZXBvcnQKLSAgICB0aGlzLnJlcG9ydGVyLnNldEN1cnJlbnRFbnRyeShlbnRyeSk7Ci0KLSAgICAvL3RyeSB7Ci0gICAgLy8gR28gdGhyb3VnaCB0aGUgbGlzdCBvZiB0ZXN0IGFzc2VydGlvbnMgZm9yIHRoZSBhcnRpZmFjdAotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gcHJvZmlsZUFydGlmYWN0LmdldFRlc3RBc3NlcnRpb25MaXN0KCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIC8vIEdldCBuZXh0IHRlc3QgYXNzZXJ0aW9uCi0gICAgICB0ZXN0QXNzZXJ0aW9uID0gKFRlc3RBc3NlcnRpb24pIGl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIGlmICh0ZXN0QXNzZXJ0aW9uLmlzRW5hYmxlZCgpCi0gICAgICAgICYmIGlzUHJpbWFyeUVudHJ5VHlwZU1hdGNoKHRlc3RBc3NlcnRpb24sIGVudHJ5KSkKLSAgICAgIHsKLSAgICAgICAgYWRkTWlzc2luZ0lucHV0UmVzdWx0KHRlc3RBc3NlcnRpb24pOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIEluZGljYXRlIHRoYXQgd2UgYXJlIGRvbmUgd2l0aCB0aGlzIGVudHJ5Ci0gICAgdGhpcy5yZXBvcnRlci5lbmRDdXJyZW50RW50cnkoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9Qcm9maWxlVmFsaWRhdG9yRmFjdG9yeUltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvUHJvZmlsZVZhbGlkYXRvckZhY3RvcnlJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1Y2M2ZTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9Qcm9maWxlVmFsaWRhdG9yRmFjdG9yeUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLldTSVRlc3RUb29sc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5CYXNlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnZlbG9wZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuUHJvZmlsZVZhbGlkYXRvckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLlVERElWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLldTRExWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGUuRW52ZWxvcGVWYWxpZGF0b3JJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2UuTWVzc2FnZVZhbGlkYXRvckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwudWRkaS5VRERJVmFsaWRhdG9ySW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsLldTRExWYWxpZGF0b3JJbXBsOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFdTSUxEb2N1bWVudEZhY3RvcnkuCi0gKgotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3I6IFBldGVyIEJyaXR0ZW5oYW0KLSAqLwotcHVibGljIGNsYXNzIFByb2ZpbGVWYWxpZGF0b3JGYWN0b3J5SW1wbCBleHRlbmRzIFByb2ZpbGVWYWxpZGF0b3JGYWN0b3J5Ci17Ci0gIHByaXZhdGUgc3RhdGljIE1hcCB2YWxpZGF0b3JSZWdpc3RyeTsKLQotICBwdWJsaWMgc3RhdGljIHZvaWQgYWRkVG9WYWxpZGF0YXRvclJlZ2lzdHJ5KFN0cmluZyBhcnRpZmFjdE5hbWUsCi0gICAgICAgICAgQmFzZVZhbGlkYXRvciB2YWxpZGF0b3JDbGFzcykgewotICAgICAgaWYgKHZhbGlkYXRvclJlZ2lzdHJ5ID09IG51bGwpCi0gICAgICAgICAgdmFsaWRhdG9yUmVnaXN0cnkgPSBuZXcgSGFzaE1hcCgpOwotICAgICAgdmFsaWRhdG9yUmVnaXN0cnkucHV0KGFydGlmYWN0TmFtZSwgdmFsaWRhdG9yQ2xhc3MpOwotICB9Ci0KLSAgcHVibGljIEJhc2VWYWxpZGF0b3IgZ2V0VmFsaWRhdG9yRm9yQXJ0aWZhY3QoU3RyaW5nIGFydGlmYWN0TmFtZSkgCi0gICAgICAgICAgdGhyb3dzIFdTSUV4Y2VwdGlvbiB7Ci0gICAgICBpZiAodmFsaWRhdG9yUmVnaXN0cnkgPT0gbnVsbCkgewotICAgICAgICAgIEJhc2VWYWxpZGF0b3IgdmFsaWRhdG9yc1tdID0gV1NJVGVzdFRvb2xzUGx1Z2luLmdldFBsdWdpbigpLgotICAgICAgICAgICAgICAgICAgZ2V0QmFzZVZhbGlkYXRvcnMoKTsKLSAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhbGlkYXRvcnMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICAgIGFkZFRvVmFsaWRhdGF0b3JSZWdpc3RyeSh2YWxpZGF0b3JzW2ldLmdldEFydGlmYWN0VHlwZSgpLAotICAgICAgICAgICAgICB2YWxpZGF0b3JzW2ldKTsKLSAgICAgICAgICAKLSAgICAgIH0KLSAgICAgIHJldHVybiAoQmFzZVZhbGlkYXRvcikgdmFsaWRhdG9yUmVnaXN0cnkuZ2V0KGFydGlmYWN0TmFtZSk7Ci0gIH0KLSAgCi0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5Qcm9maWxlVmFsaWRhdG9yRmFjdG9yeSNuZXdVRERJVmFsaWRhdG9yKCkKLSAgICovCi0gIHB1YmxpYyBVRERJVmFsaWRhdG9yIG5ld1VERElWYWxpZGF0b3IoKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBDcmVhdGUgbmV3IFVEREkgdmFsaWRhdG9yIAotICAgIFVERElWYWxpZGF0b3IgdWRkaVZhbGlkYXRvciA9IG5ldyBVRERJVmFsaWRhdG9ySW1wbCgpOwotICAgIC8vIFJldHVybiB2YWxpZGF0b3IKLSAgICByZXR1cm4gdWRkaVZhbGlkYXRvcjsKLSAgfQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLlByb2ZpbGVWYWxpZGF0b3JGYWN0b3J5I25ld1dTRExWYWxpZGF0b3IoKQotICAgKi8KLSAgcHVibGljIFdTRExWYWxpZGF0b3IgbmV3V1NETFZhbGlkYXRvcigpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIENyZWF0ZSBuZXcgV1NETCB2YWxpZGF0b3IgCi0gICAgV1NETFZhbGlkYXRvciB3c2RsVmFsaWRhdG9yID0gbmV3IFdTRExWYWxpZGF0b3JJbXBsKCk7Ci0KLSAgICAvLyBSZXR1cm4gdmFsaWRhdG9yCi0gICAgcmV0dXJuIHdzZGxWYWxpZGF0b3I7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLlByb2ZpbGVWYWxpZGF0b3JGYWN0b3J5I25ld01lc3NhZ2VWYWxpZGF0b3IoKQotICAgKi8KLSAgcHVibGljIE1lc3NhZ2VWYWxpZGF0b3IgbmV3TWVzc2FnZVZhbGlkYXRvcigpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIENyZWF0ZSBuZXcgbWVzc2FnZSB2YWxpZGF0b3IgCi0gICAgTWVzc2FnZVZhbGlkYXRvciBtZXNzYWdlVmFsaWRhdG9yID0gbmV3IE1lc3NhZ2VWYWxpZGF0b3JJbXBsKCk7Ci0gICAgLy8gUmV0dXJuIHZhbGlkYXRvcgotICAgIHJldHVybiBtZXNzYWdlVmFsaWRhdG9yOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5Qcm9maWxlVmFsaWRhdG9yRmFjdG9yeSNuZXdFbnZlbG9wZVZhbGlkYXRvcigpCi0gICAqLwotICBwdWJsaWMgRW52ZWxvcGVWYWxpZGF0b3IgbmV3RW52ZWxvcGVWYWxpZGF0b3IoKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBDcmVhdGUgbmV3IGVudmVsb3BlIHZhbGlkYXRvciAKLSAgICBFbnZlbG9wZVZhbGlkYXRvciBlbnZlbG9wZVZhbGlkYXRvciA9IG5ldyBFbnZlbG9wZVZhbGlkYXRvckltcGwoKTsKLSAgICAvLyBSZXR1cm4gdmFsaWRhdG9yCi0gICAgcmV0dXJuIGVudmVsb3BlVmFsaWRhdG9yOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9BUDE5MjAuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQVAxOTIwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0MTFjOWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9BUDE5MjAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVudHJ5VHlwZTsKLQotLyoqCi0gKiBBUDE5MjAKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYW4gZW52ZWxvcGUgaW4gYSByZXNwb25zZSBtZXNzYWdlCi0gKiBjb250YWluaW5nIGEgc29hcDpGYXVsdCBlbGVtZW50PC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPkluIGEgZGVzY3JpcHRpb24sIGlmIGFuZCBvbmx5IGlmLCB0aGUgd3NkbDpvdXRwdXQKLSAqIGVsZW1lbnQgaXMgZGVzY3JpYmVkIHVzaW5nIFdTREwgTUlNRSBiaW5kaW5nLCB0aGVuIHRoZSBlbnZlbG9wZSBpbiB0aGUKLSAqIHJlc3BvbnNlIG1lc3NhZ2UgY2FuIGNvbnRhaW4gZmF1bHRzIHdpdGggYXR0YWNobWVudHMuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEFQMTkyMCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEFQMTkyMChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkgCi0gICAgewotICAgICAgaWYgKCFlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuaXNNaW1lQ29udGVudCgpKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBjaGVjayBmb3IgYSBmYXVsdCBlbGVtZW50IHdpdGhpbiB0aGUgbWVzc2FnZSAKLSAgICAgIGlmKChlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKSA9PSBudWxsKSB8fCAKLSAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKS4KLSAgICAgICAgICBnZXRFbGVtZW50c0J5VGFnTmFtZU5TKFdTSVRhZy5FTEVNX1NPQVBfRkFVTFQuZ2V0TmFtZXNwYWNlVVJJKCksIAotICAgICAgICAgICAgICBXU0lUYWcuRUxFTV9TT0FQX0ZBVUxULmdldExvY2FsUGFydCgpKS5nZXRMZW5ndGgoKSAhPSAxKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSB2YWxpZGF0b3IuZ2V0T3BlcmF0aW9uTWF0Y2goCi0gICAgICAgICAgRW50cnlUeXBlLmdldEVudHJ5VHlwZShNZXNzYWdlVmFsaWRhdG9yLlRZUEVfTUVTU0FHRV9SRVFVRVNUKSwKLSAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdERvY3VtZW50KCkpOwotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBubyBtYXRjaGVkIG9wZXJhdGlvbiwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24gPT0gbnVsbCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIC8vIElmIHRoZSBlbnZlbG9wZSBpbiBhIHJlc3BvbnNlIG1lc3NhZ2UgY29udGFpbnMgYSBmYXVsdCB3aXRoIGF0dGFjaG1lbnRzCi0gICAgICAvLyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgd3NkbDpvdXRwdXQgZWxlbWVudCBpbiB0aGUgZGVzY3JpcHRpb24gaXMgbm90IAotICAgICAgLy8gZGVzY3JpYmVkIHVzaW5nIHRoZSBXU0RMIE1JTUUgYmluZGluZywgdGhlIGFzc2VydGlvbiBpcyBmYWlsZWQgIAotICAgICAgaWYgKChlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWltZVBhcnRzKCkuY291bnQoKSA+IDEpICYmCi0gICAgICAgICAgKGdldE11bHRpcGFydFJlbGF0ZWRCaW5kaW5ncyhiaW5kaW5nT3BlcmF0aW9uKSA9PSBudWxsKSkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgIGZhaWx1cmVEZXRhaWwgPSAKLSAgICAgICAgICB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgiVGhlIG1lc3NhZ2UgY29udGFpbnMgXCIiICsgCi0gICAgICAgICAgICAgIGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRNaW1lUGFydHMoKS5jb3VudCgpICsgIlwiIHBhcnQocykiLCAKLSAgICAgICAgICAgICAgZW50cnlDb250ZXh0KTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOyAKLSAgICB9Ci0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIE11bHRpcGFydCByZWxhdGVkIGJpbmRpbmdzLCBpZiBkb2VzIG5vdCBmb3VuZCwgcmV0dXJucyBudWxsLgotICAgKiBAcGFyYW0gb3AgYmluZGluZyBvcGVyYXRpb24KLSAgICogQHJldHVybiBNdWx0aXBhcnQgcmVsYXRlZCBiaW5kaW5ncywgaWYgZG9lcyBub3QgZm91bmQsIHJldHVybnMgbnVsbC4KLSAgICovCi0gIHByaXZhdGUgTUlNRU11bHRpcGFydFJlbGF0ZWQgZ2V0TXVsdGlwYXJ0UmVsYXRlZEJpbmRpbmdzKAotICAgICAgQmluZGluZ09wZXJhdGlvbiBvcCkgCi0gIHsKLSAgICAvLyBGaW5kaW5nIG9wZXJhdGlvbiBleHRlbnNpYmlsaXR5IGVsZW1zCi0gICAgLy8gaW4gdGhlIGJpbmRpbmcgZGVwZW5kaW5nIG9uIG1lc3NhZ2UgdHlwZQotICAgIExpc3QgZXh0RWxlbXMgPSBvcC5nZXRCaW5kaW5nT3V0cHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgLy8gY2hlY2sgbGlzdCBvbiBmaXJzdCBlbGVtZW50Ci0gICAgaWYoKGV4dEVsZW1zID09IG51bGwpIHx8IChleHRFbGVtcy5zaXplKCkgPT0gMCkgfHwgCi0gICAgICAgIShleHRFbGVtcy5nZXQoMCkgaW5zdGFuY2VvZiBNSU1FTXVsdGlwYXJ0UmVsYXRlZCkpCi0gICAgICByZXR1cm4gbnVsbDsKLSAgICByZXR1cm4gKE1JTUVNdWx0aXBhcnRSZWxhdGVkKSBleHRFbGVtcy5nZXQoMCk7IAotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9BUDE5MjguamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQVAxOTI4LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5NjVmY2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9BUDE5MjguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FTXVsdGlwYXJ0UmVsYXRlZDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMubWltZS5NSU1FUGFydDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keTsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU0NvbXBsZXhUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU0NvbnN0YW50czsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU0VsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU01vZGVsOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTTW9kZWxHcm91cDsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU09iamVjdExpc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNQYXJ0aWNsZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU1Rlcm07Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1pbWVQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWltZVBhcnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLk1JTUVDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuTUlNRVV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotLyoqCi0gKiBBUDE5MjgKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgZW52ZWxvcGUgY29udGFpbmluZyBhIFVSSSByZWZlcmVuY2UKLSAqIHRoYXQgaXMgdHlwZWQgdXNpbmcgdGhlIHJlZjpzd2FSZWYgc2NoZW1hIHR5cGU8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+SW4gYW4gZW52ZWxvcGUsIGEgVVJJIHJlZmVyZW5jZSB0aGF0IGlzIHR5cGVkIHVzaW5nCi0gKiB0aGUgcmVmOnN3YVJlZiBzY2hlbWEgdHlwZSByZXNvbHZlcyB0byBhIE1JTUUgcGFydCBpbiB0aGUgc2FtZSBtZXNzYWdlCi0gKiBhcyB0aGUgZW52ZWxvcGUuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEFQMTkyOCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEFQMTkyOChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBpZiAoIWVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5pc01pbWVDb250ZW50KCkpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0gICAgICAvLyBnZXQgdGhlIHJyb3QgcGFydCBvZiBhIG11bHRpcGFydC9yZWxhdGVkIG1lc3NhZ2UKLSAgICAgIERvY3VtZW50IHJvb3QgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLSAgICAgIE1pbWVQYXJ0cyBtaW1lUGFydHMgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWltZVBhcnRzKCk7Ci0KLSAgICAgIC8vIGdldCBhbiBvcGVyYXRpb24gbWF0Y2hlZCBmb3IgdGhlIG1lc3NhZ2UKLSAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IHZhbGlkYXRvci5nZXRPcGVyYXRpb25NYXRjaCgKLSAgICAgICAgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlUeXBlKCksIHJvb3QpOwotIAotICAgICAgLy8gaWYgbm8gb25lIG9wZXJhdGlvbiBtYXRjaGVzLCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAoYmluZGluZ09wZXJhdGlvbiA9PSBudWxsKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotCi0gICAgICAvLyBnZXQgdGhlIGNvcnJlc3BvbmRpbmcgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyBhbmQgbWVzc2FnZQotICAgICAgTGlzdCBleHRFbGVtczsKLSAgICAgIE1lc3NhZ2UgbWVzc2FnZTsKLSAgICAgIGlmIChNZXNzYWdlRW50cnkuVFlQRV9SRVFVRVNUCi0gICAgICAgIC5lcXVhbHMoZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlUeXBlKCkpKQotICAgICAgewotICAgICAgICBleHRFbGVtcyA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCkgPT0gbnVsbCA/IG51bGwKLSAgICAgICAgICA6IGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICAgIG1lc3NhZ2UgPSBiaW5kaW5nT3BlcmF0aW9uLmdldE9wZXJhdGlvbigpLmdldElucHV0KCkgPT0gbnVsbCA/IG51bGwKLSAgICAgICAgICA6IGJpbmRpbmdPcGVyYXRpb24uZ2V0T3BlcmF0aW9uKCkuZ2V0SW5wdXQoKS5nZXRNZXNzYWdlKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGV4dEVsZW1zID0gYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nT3V0cHV0KCkgPT0gbnVsbCA/IG51bGwKLSAgICAgICAgICA6IGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ091dHB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgICBtZXNzYWdlID0gYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKS5nZXRPdXRwdXQoKSA9PSBudWxsID8gbnVsbAotICAgICAgICAgIDogYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKS5nZXRPdXRwdXQoKS5nZXRNZXNzYWdlKCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIGluIHRoZSBXU0RMIGJpbmRpbmcgb3BlcmF0aW9uLAotICAgICAgLy8gdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGV4dEVsZW1zID09IG51bGwgfHwgZXh0RWxlbXMuc2l6ZSgpIDwgMSkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgLy8gQ29sbGVjdGluZyB0aGUgbmFtZXMgb2Ygc2NoZW1hIGVsZW1lbnRzIHRoYXQgYXJlIGRlZmluZWQKLSAgICAgIC8vIHdpdGggdGhlIHJlZjpzd2FSZWYgc2NoZW1hIHR5cGUKLSAgICAgIExpc3Qgc3dhUmVmcyA9IGdldFN3YVJlZnMoKEV4dGVuc2liaWxpdHlFbGVtZW50KWV4dEVsZW1zLmdldCgwKSwgbWVzc2FnZSk7Ci0gICAgICAvLyBJZiBzdWNoIHNjaGVtYSBlbGVtZW50cyBhcmUgbm90IGZvdW5kLCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAoc3dhUmVmcy5pc0VtcHR5KCkpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggYWxsIHRoZSBzY2hlbWEgZWxlbWVudCBuYW1lcwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzd2FSZWZzLnNpemUoKTsgaSsrKQotICAgICAgewotICAgICAgICBRTmFtZSBlbGVtTmFtZSA9IChRTmFtZSkgc3dhUmVmcy5nZXQoaSk7Ci0gICAgICAgIC8vIExvb2tpbmcgZm9yIHN1Y2ggZWxlbWVudHMgaW4gdGhlIHJvb3QgTUlNRSBwYXJ0Ci0gICAgICAgIE5vZGVMaXN0IGVsZW1zID0gcm9vdC5nZXREb2N1bWVudEVsZW1lbnQoKS5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKAotICAgICAgICAgICAgZWxlbU5hbWUuZ2V0TmFtZXNwYWNlVVJJKCksIGVsZW1OYW1lLmdldExvY2FsUGFydCgpKTsKLSAgICAgICAgLy8gR29pbmcgdGhyb3VnaCBhbGwgdGhlIHJlZjpzd2FSZWYgcmVmZXJlbmNlcwotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGVsZW1zLmdldExlbmd0aCgpOyBqKyspCi0gICAgICAgIHsKLSAgICAgICAgICBOb2RlIGVsZW0gPSBlbGVtcy5pdGVtKGopOwotICAgICAgICAgIC8vIEdldHRpbmcgYSB2YWx1ZSBvZiB0aGlzIHJlZmVyZW5jZQotICAgICAgICAgIFN0cmluZyByZWYgPSBlbGVtLmdldEZpcnN0Q2hpbGQoKSA9PSBudWxsID8gbnVsbAotICAgICAgICAgICAgOiBlbGVtLmdldEZpcnN0Q2hpbGQoKS5nZXROb2RlVmFsdWUoKTsKLSAgICAgICAgICAvLyBJZiB0aGUgdmFsdWUgaXMgaW52YWxpZCwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICBpZiAocmVmID09IG51bGwpCi0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIGVsZW1lbnQgIiArIGVsZW0uZ2V0Tm9kZU5hbWUoKQotICAgICAgICAgICAgICArICIgb2YgdGhlIHJlZjpzd2FSZWYgc2NoZW1hIHR5cGUgaXMgc3BlY2lmaWVkLCBidXQgaXRzIHZhdWxlIgotICAgICAgICAgICAgICArICIgaXMgaW52YWxpZC4iKTsKLSAgICAgICAgICAvLyBJZiB0aGUgVVJJIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlICJjaWQ6IiBjb250ZW50LWlkIHByZWZpeAotICAgICAgICAgIC8vIFRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgaWYgKCFyZWYuc3RhcnRzV2l0aCgiY2lkOiIpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgVVJJICIgKyByZWYKLSAgICAgICAgICAgICAgKyAiIG9mIHRoZSByZWY6c3dhUmVmIHNjaGVtYSB0eXBlIG11c3QgdXNlIHRoZSBjaWQ6IHByZWZpeC4iKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYm9vbGVhbiByZWZGb3VuZCA9IGZhbHNlOwotICAgICAgICAgIEl0ZXJhdG9yIGlNaW1lUGFydHMgPSBtaW1lUGFydHMuZ2V0UGFydHMoKS5pdGVyYXRvcigpOwotICAgICAgICAgIC8vIEdvaW5nIHRocm91Z2ggYWxsIHRoZSBNSU1FIHBhcnRzIG9mIHRoZSBTT0FQIG1lc3NhZ2UKLSAgICAgICAgICB3aGlsZSAoaU1pbWVQYXJ0cy5oYXNOZXh0KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgTWltZVBhcnQgbWltZVBhcnQgPSAoTWltZVBhcnQpaU1pbWVQYXJ0cy5uZXh0KCk7Ci0gICAgICAgICAgICAvLyBHZXR0aW5nIHBhcnQncyBDb250ZW50LUlEIGhlYWRlcgotICAgICAgICAgICAgU3RyaW5nIGNpZCA9IE1JTUVVdGlscy5nZXRNaW1lSGVhZGVyQXR0cmlidXRlKAotICAgICAgICAgICAgICAgIG1pbWVQYXJ0LmdldEhlYWRlcnMoKSwgTUlNRUNvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9JRCk7Ci0gICAgICAgICAgICBpZiAoY2lkICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIC8vIElmIHRoZSBoZWFkZXIgdmFsdWUgZXF1YWxzIHRoZSByZWZlcmVuY2UgVVJJLAotICAgICAgICAgICAgICAvLyB0aGUgY29ycmVzcG9uZGluZyBNSU1FIHBhcnQgaXMgZm91bmQKLSAgICAgICAgICAgICAgaWYgKGNpZC5lcXVhbHMoJzwnICsgcmVmLnN1YnN0cmluZyg0KSArICc+JykpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZWZGb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgLy8gSWYgdGhlIGNvcnJlc3BvbmRpbmcgTUlNRSBwYXJ0IGlzIG5vdCBmb3VuZAotICAgICAgICAgIC8vIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgaWYgKCFyZWZGb3VuZCkKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgU09BUCBtZXNzYWdlIGRvZXMgbm90IGNvbnRhaW4iCi0gICAgICAgICAgICAgICsgIiBhIE1JTUUgcGFydCB3aXRoIHRoZSA8IiArIHJlZi5zdWJzdHJpbmcoNCkgKyAiPiBDb250ZW50LUlELiIpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGFuYWUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gYWZlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBhZmUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb2xsZWN0cyBuYW1lcyBvZiBzY2hlbWEgZWxlbWVudHMgdGhhdCBhcmUgZGVmaW5lZCB3aXRoIHRoZSByZWY6c3dhUmVmCi0gICAqIHNjaGVtYSB0eXBlLgotICAgKiBAcGFyYW0gZXh0RWxlbSBhIGxpc3Qgb2YgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cwotICAgKiBAcGFyYW0gbWVzc2FnZSB0aGUgY29ycmVzcG9uZGluZyBtZXNzYWdlIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gYSBsaXN0IG9mIHN1Y2ggbmFtZXMgZm91bmQuCi0gICAqLwotICBwcml2YXRlIExpc3QgZ2V0U3dhUmVmcyhFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtLCBNZXNzYWdlIG1lc3NhZ2UpCi0gIHsKLSAgICBMaXN0IHN3YVJlZnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgaWYgKGV4dEVsZW0uZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9NSU1FX01VTFRJUEFSVCkpCi0gICAgewotICAgICAgLy8gR2V0dGluZyB0aGUgcm9vdCBtaW1lOnBhcnQKLSAgICAgIExpc3QgbWltZVBhcnRzID0gKChNSU1FTXVsdGlwYXJ0UmVsYXRlZCkgZXh0RWxlbSkuZ2V0TUlNRVBhcnRzKCk7Ci0gICAgICBpZiAobWltZVBhcnRzLnNpemUoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIC8vIEdldHRpbmcgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyBvZiB0aGUgZmlyc3QgbWltZTpwYXJ0Ci0gICAgICAgIExpc3QgZWxlbXMgPSAoKE1JTUVQYXJ0KSBtaW1lUGFydHMuZ2V0KDApKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgICAgTGlzdCBib3VuZFBhcnRzID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICAvLyBHb2luZyB0aHJvdWdoIGFsbCB0aGUgTUlNRSBwYXJ0J3MgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cwotICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IGVsZW1zLnNpemUoKTsgayArKykKLSAgICAgICAgewotICAgICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGVsZW0gPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGVsZW1zLmdldChrKTsKLSAgICAgICAgICAvLyBJZiB0aGF0IGlzIGEgc29hcDpib2R5Ci0gICAgICAgICAgaWYgKGVsZW0uZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9TT0FQX0JPRFkpICYmIG1lc3NhZ2UgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBHZXR0aW5nIHBhcnRzIHNwZWNpZmllZCBieSB0aGUgcGFydHMgYXR0cmlidXRlCi0gICAgICAgICAgICBMaXN0IGJvZHlQYXJ0cyA9ICgoU09BUEJvZHkpIGVsZW0pLmdldFBhcnRzKCk7Ci0gICAgICAgICAgICAvLyBDb2xsZWN0aW5nIGFsbCB0aGUgbWVzc2FnZSBwYXJ0cyBib3VuZCBieSB0aGlzIHNvYXBiaW5kOmJvZHkKLSAgICAgICAgICAgIEl0ZXJhdG9yIGkgPSBtZXNzYWdlLmdldFBhcnRzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgIHdoaWxlIChpLmhhc05leHQoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgUGFydCBwYXJ0ID0gKFBhcnQpIGkubmV4dCgpOwotICAgICAgICAgICAgICBpZiAoYm9keVBhcnRzID09IG51bGwgfHwgYm9keVBhcnRzLmNvbnRhaW5zKHBhcnQuZ2V0TmFtZSgpKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvdW5kUGFydHMuYWRkKHBhcnQpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIC8vIGVsc2UgaWYgdGhhdCBpcyBhIHNvYXA6aGVhZGVyCi0gICAgICAgICAgZWxzZSBpZiAoZWxlbS5nZXRFbGVtZW50VHlwZSgpLmVxdWFscyhXU0RMX1NPQVBfSEVBREVSKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBRTmFtZSBtc2dOYW1lOwotICAgICAgICAgICAgU3RyaW5nIHBhcnROYW1lOwotICAgICAgICAgICAgaWYgKGVsZW0gaW5zdGFuY2VvZiBTT0FQSGVhZGVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTT0FQSGVhZGVyIGhlYWRlciA9IChTT0FQSGVhZGVyKSBlbGVtOwotICAgICAgICAgICAgICAvLyBJZiB0aGUgcGFydCBpcyBib3VuZCBieSB0aGlzIGVsZW1lbnQKLSAgICAgICAgICAgICAgbXNnTmFtZSA9IGhlYWRlci5nZXRNZXNzYWdlKCk7Ci0gICAgICAgICAgICAgIHBhcnROYW1lID0gaGVhZGVyLmdldFBhcnQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIFdTREw0SiAxLjQgZG9lcyBub3QgcmVjb2duaXplIHNvYXA6aGVhZGVyIGVsZW1lbnRzIHRoYXQKLSAgICAgICAgICAgIC8vIGFyZSBlbmNsb3NlZCBpbiBtaW1lOm11bHRpcGFydFJlbGF0ZWQsIHNvIHVzaW5nIGEgd29ya2Fyb3VuZAotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFbGVtZW50IGhlYWRlciA9Ci0gICAgICAgICAgICAgICAgKChVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGVsZW0pLmdldEVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgLy8gR2V0dGluZyB0aGUgZWxlbWVudCdzIG1lc3NhZ2UgYXR0cmlidXRlCi0gICAgICAgICAgICAgIFN0cmluZyBtc2dWYWwgPSBoZWFkZXIuZ2V0QXR0cmlidXRlKCJtZXNzYWdlIik7Ci0gICAgICAgICAgICAgIC8vIGZpbmRpbmcgdGhlIGNvbG9uIGRlbGltaXRlcgotICAgICAgICAgICAgICBpbnQgY29sb25Qb3MgPSBtc2dWYWwuaW5kZXhPZigiOiIpOwotICAgICAgICAgICAgICBTdHJpbmcgbnMgPSBudWxsOwotICAgICAgICAgICAgICAvLyBHZXR0aW5nIGEgbG9jYWwgcGFydAotICAgICAgICAgICAgICBTdHJpbmcgbHAgPSBjb2xvblBvcyA+IC0xID8gbXNnVmFsLnN1YnN0cmluZyhjb2xvblBvcyArIDEpIDogbXNnVmFsOwotICAgICAgICAgICAgICAvLyBJZiB0aGUgZGVsaW1pdGVyIGlzIGZvdW5kCi0gICAgICAgICAgICAgIGlmIChjb2xvblBvcyA+IC0xKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gUmV0cmlldmluZyBhIG5hbWVzcGFjZSBVUkkKLSAgICAgICAgICAgICAgICBucyA9IHZhbGlkYXRvci5nZXRXU0RMRG9jdW1lbnQoKQotICAgICAgICAgICAgICAgIC5nZXREZWZpbml0aW9ucygpLmdldE5hbWVzcGFjZShtc2dWYWwuc3Vic3RyaW5nKDAsIGNvbG9uUG9zKSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgbXNnTmFtZSA9IG5ldyBRTmFtZShucywgbHApOwotICAgICAgICAgICAgICBwYXJ0TmFtZSA9IGhlYWRlci5nZXRBdHRyaWJ1dGUoInBhcnQiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIEdldHRpbmcgYSBtZXNzYWdlIHJlZmVyZW5jZWQgYnkgdGhpcyBzb2FwYmluZDpoZWFkZXIgZWxlbWVudAotICAgICAgICAgICAgTWVzc2FnZSBtc2cgPSAKLSAgICAgICAgICAgICAgdmFsaWRhdG9yLmdldFdTRExEb2N1bWVudCgpLmdldERlZmluaXRpb25zKCkuZ2V0TWVzc2FnZShtc2dOYW1lKTsKLSAgICAgICAgICAgIGlmIChtc2cgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gQWRkaW5nIHRoZSBwYXJ0IHRvIHRoZSBsaXN0IG9mIGJvdW5kIHBhcnRzCi0gICAgICAgICAgICAgIFBhcnQgcGFydCA9IG1zZy5nZXRQYXJ0KHBhcnROYW1lKTsKLSAgICAgICAgICAgICAgaWYgKHBhcnQgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICBib3VuZFBhcnRzLmFkZChwYXJ0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBBbGwgdGhlIGJvdW5kIHBhcnRzIGZyb20gc29hcGJpbmQ6Ym9keSBhbmQgc29hcGJpbmQ6aGVhZGVyCi0gICAgICAgIC8vIGFyZSBjb2xsZWN0ZWQsIGZpbmRpbmcgc3dhUmVmIHJlZmVyZW5jZXMuCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYm91bmRQYXJ0cy5zaXplKCk7IGkrKykKLSAgICAgICAgewotICAgICAgICAgIFBhcnQgcGFydCA9IChQYXJ0KSBib3VuZFBhcnRzLmdldChpKTsKLSAgICAgICAgICBRTmFtZSByZWY7Ci0gICAgICAgICAgc2hvcnQgdHlwZTsKLSAgICAgICAgICAvLyBHZXR0aW5nIGVpdGhlciBwYXJ0J3MgZWxlbWVudCByZWZlcmVuY2Ugb3IgdHlwZSByZWZlcmVuY2UKLSAgICAgICAgICBpZiAoKHJlZiA9IHBhcnQuZ2V0VHlwZU5hbWUoKSkgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0eXBlID0gWFNDb25zdGFudHMuVFlQRV9ERUZJTklUSU9OOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIGlmICgocmVmID0gcGFydC5nZXRFbGVtZW50TmFtZSgpKSAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHR5cGUgPSBYU0NvbnN0YW50cy5FTEVNRU5UX0RFQ0xBUkFUSU9OOwotICAgICAgICAgIH0KLSAgICAgICAgICAvLyBUaGUgcGFydCBjb25hdGlucyBuZWl0aGVyIGVsZW1lbnQgbm9yIHR5cGUgYXR0cmlidXRlLAotICAgICAgICAgIC8vIHByb2NlZWRpbmcgd2l0aCB0aGUgbmV4dCBwYXJ0Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgIH0KLSAgICAgICAgICAvLyBHZXR0aW5nIGEgbGlzdCBvZiBzY2hlbWFzIGRlZmluZWQKLSAgICAgICAgICBNYXAgc2NoZW1hcyA9IHZhbGlkYXRvci5nZXRXU0RMRG9jdW1lbnQoKS5nZXRTY2hlbWFzKCk7Ci0gICAgICAgICAgLy8gR29pbmcgdGhyb3VnaCB0aGUgc2NoZW1hcwotICAgICAgICAgIEl0ZXJhdG9yIGl0ID0gc2NoZW1hcy52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgICAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgWFNNb2RlbCB4c01vZGVsID0gKFhTTW9kZWwpIGl0Lm5leHQoKTsKLSAgICAgICAgICAgIFhTVHlwZURlZmluaXRpb24geHNUeXBlID0gbnVsbDsKLSAgICAgICAgICAgIC8vIEdldHRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgcGFydCB0eXBlCi0gICAgICAgICAgICBpZiAodHlwZSA9PSBYU0NvbnN0YW50cy5FTEVNRU5UX0RFQ0xBUkFUSU9OKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvLyBHZXR0aW5nIHNjaGVtYSBlbGVtZW50Ci0gICAgICAgICAgICAgIFhTRWxlbWVudERlY2xhcmF0aW9uIGVsZW0gPSB4c01vZGVsLmdldEVsZW1lbnREZWNsYXJhdGlvbigKLSAgICAgICAgICAgICAgICByZWYuZ2V0TG9jYWxQYXJ0KCksIHJlZi5nZXROYW1lc3BhY2VVUkkoKSk7Ci0gICAgICAgICAgICAgIGlmIChlbGVtICE9IG51bGwpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBHZXR0aW5nIGVsZW1lbnQncyB0eXBlCi0gICAgICAgICAgICAgICAgeHNUeXBlID0gZWxlbS5nZXRUeXBlRGVmaW5pdGlvbigpOwotICAgICAgICAgICAgICAgIC8vIElmIGl0IGlzIHJlZjpzd2FSZWYKLSAgICAgICAgICAgICAgICBpZiAoV1NJQ29uc3RhbnRzLk5TX1VSSV9TV0FfUkVGLmVxdWFscyh4c1R5cGUuZ2V0TmFtZSgpKQotICAgICAgICAgICAgICAgICAgJiYgV1NJQ29uc3RhbnRzLlNDSEVNQV9UWVBFX1NXQV9SRUYuZXF1YWxzKAotICAgICAgICAgICAgICAgICAgICB4c1R5cGUuZ2V0TmFtZXNwYWNlKCkpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIC8vIEFkZGluZyB0aGUgbmFtZSBvZiB0aGUgZWxlbWVudCB0byB0aGUgbGlzdAotICAgICAgICAgICAgICAgICAgc3dhUmVmcy5hZGQoCi0gICAgICAgICAgICAgICAgICAgIG5ldyBRTmFtZShlbGVtLmdldE5hbWVzcGFjZSgpLCBlbGVtLmdldE5hbWUoKSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICB4c1R5cGUgPSB4c01vZGVsLmdldFR5cGVEZWZpbml0aW9uKAotICAgICAgICAgICAgICAgIHJlZi5nZXRMb2NhbFBhcnQoKSwgcmVmLmdldE5hbWVzcGFjZVVSSSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIENvbGxlY3RpbmcgYWxsIHRoZSBlbGVtZW50IG5hbWVzLGFkZGluZyBlbGVtZW50IG5hbWVzIHRvIHRoZSBsaXN0Ci0gICAgICAgICAgICBzd2FSZWZzLmFkZEFsbChjb2xsZWN0U3dhUmVmcyh4c1R5cGUpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHN3YVJlZnM7Ci0gIH0KLQotICAvKioKLSAgICogQ29sbGVjdHMgbmFtZXMgb2Ygc2NoZW1hIGVsZW1lbnRzIHRoYXQgYXJlIGRlZmluZWQgd2l0aCB0aGUgcmVmOnN3YVJlZgotICAgKiBzY2hlbWEgdHlwZS4KLSAgICogQHBhcmFtIHhzVHlwZSBhIHNjaGVtYSB0eXBlLgotICAgKiBAcmV0dXJuIGEgbGlzdCBvZiBuYW1lcyBmb3VuZC4KLSAgICovCi0gIHByaXZhdGUgTGlzdCBjb2xsZWN0U3dhUmVmcyhYU1R5cGVEZWZpbml0aW9uIHhzVHlwZSkKLSAgewotICAgIExpc3Qgc3dhUmVmcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBpZiAoeHNUeXBlICE9IG51bGwpCi0gICAgewotICAgICAgLy8gSWYgdGhpcyBpcyBhIGNvbXBsZXggdHlwZQotICAgICAgaWYgKHhzVHlwZS5nZXRUeXBlQ2F0ZWdvcnkoKSA9PSBYU1R5cGVEZWZpbml0aW9uLkNPTVBMRVhfVFlQRSkKLSAgICAgIHsKLSAgICAgICAgWFNDb21wbGV4VHlwZURlZmluaXRpb24geHNDb21wbGV4VHlwZSA9Ci0gICAgICAgICAgKFhTQ29tcGxleFR5cGVEZWZpbml0aW9uKSB4c1R5cGU7Ci0gICAgICAgIC8vIElmIGl0IGNvbnRhaW5zIG1peGVkIGNvbnRleHQKLSAgICAgICAgaWYgKHhzQ29tcGxleFR5cGUuZ2V0UGFydGljbGUoKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gY29sbGVjdGluZyBlbGVtZW50IG5hbWVzIAotICAgICAgICAgIHN3YVJlZnMuYWRkQWxsKGNvbGxlY3RTd2FSZWZzKHhzQ29tcGxleFR5cGUuZ2V0UGFydGljbGUoKS5nZXRUZXJtKCkpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gc3dhUmVmczsKLSAgfQotCi0gIC8qKgotICAgKiBDb2xsZWN0cyBuYW1lcyBvZiBzY2hlbWEgZWxlbWVudHMgdGhhdCBhcmUgZGVmaW5lZCB3aXRoIHRoZSByZWY6c3dhUmVmCi0gICAqIHNjaGVtYSB0eXBlLgotICAgKiBAcGFyYW0gdGVybSBhIHNjaGVtYSB0ZXJtLgotICAgKiBAcmV0dXJuIGEgbGlzdCBvZiBuYW1lcyBmb3VuZC4KLSAgICovCi0gIHByaXZhdGUgTGlzdCBjb2xsZWN0U3dhUmVmcyhYU1Rlcm0gdGVybSkKLSAgewotICAgIExpc3Qgc3dhUmVmcyA9IG5ldyBBcnJheUxpc3QoKTsgCi0gICAgLy8gSWYgYSB0ZXJtIGlzIGFuIGVsZW1lbnQgZGVjbGFyYXRpb24KLSAgICBpZiAodGVybS5nZXRUeXBlKCkgPT0gWFNDb25zdGFudHMuRUxFTUVOVF9ERUNMQVJBVElPTikKLSAgICB7Ci0gICAgICBYU0VsZW1lbnREZWNsYXJhdGlvbiBlbGVtID0gKFhTRWxlbWVudERlY2xhcmF0aW9uKSB0ZXJtOwotICAgICAgWFNUeXBlRGVmaW5pdGlvbiB4c1R5cGUgPSBlbGVtLmdldFR5cGVEZWZpbml0aW9uKCk7Ci0gICAgICAvLyBJZiBlbGVtZW50J3MgdHlwZSBpcyByZWY6c3dhUmVmCi0gICAgICBpZiAoV1NJQ29uc3RhbnRzLk5TX1VSSV9TV0FfUkVGLmVxdWFscyh4c1R5cGUuZ2V0TmFtZXNwYWNlKCkpCi0gICAgICAgICYmIFdTSUNvbnN0YW50cy5TQ0hFTUFfVFlQRV9TV0FfUkVGLmVxdWFscyh4c1R5cGUuZ2V0TmFtZSgpKSkKLSAgICAgIHsKLSAgICAgICAgLy8gQWRkIGVsZW1lbnQncyBuYW1lIHRvIHRoZSBsaXN0Ci0gICAgICAgIHN3YVJlZnMuYWRkKAotICAgICAgICAgIG5ldyBRTmFtZShlbGVtLmdldE5hbWVzcGFjZSgpLCBlbGVtLmdldE5hbWUoKSkpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBlbHNlIGNvbGxlY3RpbmcgZWxlbWVudCBuYW1lcyBmcm9tIGVsZW1lbnQncyB0eXBlCi0gICAgICAgIHN3YVJlZnMuYWRkQWxsKGNvbGxlY3RTd2FSZWZzKHhzVHlwZSkpOwotICAgICAgfQotICAgIH0KLSAgICAvLyBlbHNlIGlmIGEgdGVybSBpcyBhIG1vZGVsIGdyb3VwCi0gICAgZWxzZSBpZih0ZXJtLmdldFR5cGUoKSA9PSBYU0NvbnN0YW50cy5NT0RFTF9HUk9VUCkKLSAgICB7Ci0gICAgICAvLyBHZXR0aW5nIGEgbGlzdCBvZiBQYXJ0aWNsZSBzY2hlbWEgY29tcG9uZW50cwotICAgICAgWFNPYmplY3RMaXN0IGxpc3QgPSAoKFhTTW9kZWxHcm91cCkgdGVybSkuZ2V0UGFydGljbGVzKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpc3QuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgLy8gQ29sbGVjdGluZyBlbGVtZW50IG5hbWVzCi0gICAgICAgIHN3YVJlZnMuYWRkQWxsKGNvbGxlY3RTd2FSZWZzKCgoWFNQYXJ0aWNsZSkgbGlzdC5pdGVtKGkpKS5nZXRUZXJtKCkpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHN3YVJlZnM7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTAwNS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEwMDUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2FhNDY1ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTAwNS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5PcGVyYXRpb25TaWduYXR1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVHlwZXNSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotLyoqCi0gKiBCUDEwMDUuCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDEwMDUgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEwMDUoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgaWYgKHRoaXMudmFsaWRhdG9yLmlzT25lV2F5UmVzcG9uc2UoZW50cnlDb250ZXh0KSkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgLy8gUGFyc2UgbWVzc2FnZQotICAgICAgRG9jdW1lbnQgZG9jID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCk7Ci0KLSAgICAgIC8vIElmIHRoaXMgaXMgYSBmYXVsdCBtZXNhZ2UsIHRoZW4gaXQgaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmICh0aGlzLnZhbGlkYXRvci5pc0ZhdWx0KGRvYykpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIENoZWNrIGlmIHRoZXJlIGlzIGEgc29hcCBib2R5IGVsZW1lbnQKLSAgICAgIGlmICghdGhpcy52YWxpZGF0b3IuY29udGFpbnNTb2FwQm9keVdpdGhDaGlsZChkb2MpKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBQYXJzZSByZXF1ZXN0IG1lc3NhZ2UKLSAgICAgIERvY3VtZW50IGRvY1JlcXVlc3QgPSBlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdERvY3VtZW50KCk7Ci0KLSAgICAgIC8vIGdldCBTT0FQQWN0aW9uCi0gICAgICBTdHJpbmcgaGVhZGVycyA9IGVudHJ5Q29udGV4dC5nZXRSZXF1ZXN0KCkuZ2V0SFRUUEhlYWRlcnMoKTsKLSAgICAgIFN0cmluZyBhY3Rpb24gPSBudWxsOwotICAgICAgaWYgKGhlYWRlcnMgIT0gbnVsbCkKLSAgICAgICAgYWN0aW9uID0gKFN0cmluZykgSFRUUFV0aWxzLmdldEh0dHBIZWFkZXJUb2tlbnMoaGVhZGVycywgIjoiKS5nZXQoIlNPQVBBY3Rpb24iLnRvVXBwZXJDYXNlKCkpOwotCi0gICAgICBCaW5kaW5nIGJpbmRpbmcgPSB2YWxpZGF0b3IuYW5hbHl6ZXJDb250ZXh0LmdldENhbmRpZGF0ZUluZm8oKS5nZXRCaW5kaW5ncygpWzBdOwotICAgICAgVHlwZXNSZWdpc3RyeSByZWdpc3RyeSA9Ci0gICAgICAgIG5ldyBUeXBlc1JlZ2lzdHJ5KAotICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmdldFdTRExEb2N1bWVudCgpLmdldERlZmluaXRpb25zKCksCi0gICAgICAgICAgdmFsaWRhdG9yKTsKLSAgICAgIE9wZXJhdGlvblNpZ25hdHVyZS5PcGVyYXRpb25NYXRjaCBtYXRjaCA9Ci0gICAgICAgIE9wZXJhdGlvblNpZ25hdHVyZS5tYXRjaE9wZXJhdGlvbigKLSAgICAgICAgICBkb2NSZXF1ZXN0LAotICAgICAgICAgIGFjdGlvbiwKLSAgICAgICAgICBiaW5kaW5nLAotICAgICAgICAgIHJlZ2lzdHJ5KTsKLSAgICAgIGlmIChtYXRjaCA9PSBudWxsKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSBtYXRjaC5nZXRPcGVyYXRpb24oKTsKLQotICAgICAgLy8gSXMgcnBjIHN0eWxlPwotICAgICAgaWYgKCFXU0lDb25zdGFudHMKLSAgICAgICAgLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX1JQQwotICAgICAgICAuZXF1YWxzKG1hdGNoLmdldE9wZXJhdGlvblN0eWxlKCkpKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotCi0gICAgICBMaXN0IGV4dEVsZW1lbnRzID0gbnVsbDsKLQotICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ091dHB1dCgpICE9IG51bGwpCi0gICAgICAgIGV4dEVsZW1lbnRzID0KLSAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLQotICAgICAgLy8gSXMgbWVzc2FnZSBSUEMtbGl0ZXJhbD8KLSAgICAgIGlmICghdmFsaWRhdG9yLmlzTGl0ZXJhbChleHRFbGVtZW50cykpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vR2V0IG1lc3NhZ2UKLQotICAgICAgLy8gR2V0cyBib2R5Ci0gICAgICBOb2RlTGlzdCBzb2FwQm9keUxpc3QgPQotICAgICAgICBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUygKLSAgICAgICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1NPQVAsCi0gICAgICAgICAgWE1MVXRpbHMuU09BUF9FTEVNX0JPRFkpOwotICAgICAgaWYgKHNvYXBCb2R5TGlzdC5nZXRMZW5ndGgoKSA9PSAwIHx8IHNvYXBCb2R5TGlzdC5nZXRMZW5ndGgoKSA+IDEpCi0gICAgICB7Ci0gICAgICAgIC8vIFRoZXJlIGlzIG5vdCBhIGJvZHkgb3IgbW9yZSB0aGFuIG9uZSBib2RpZXMgaW4gdGhlIGVudmxvcGUuCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0gICAgICBFbGVtZW50IHNvYXBCb2R5RWxlbSA9IChFbGVtZW50KSBzb2FwQm9keUxpc3QuaXRlbSgwKTsKLQotICAgICAgLy8gRmluZCB3cmFwcGVyIGVsZW1lbnQgaW4gdGhlIGJvZHkKLSAgICAgIEVsZW1lbnQgd3JhcHBlckVsZW1lbnQgPSBYTUxVdGlscy5nZXRGaXJzdENoaWxkKHNvYXBCb2R5RWxlbSk7Ci0gICAgICBpZiAod3JhcHBlckVsZW1lbnQgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgaWYgKHdyYXBwZXJFbGVtZW50Ci0gICAgICAgIC5nZXRMb2NhbE5hbWUoKQotICAgICAgICAuZXF1YWxzKGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpICsgIlJlc3BvbnNlIikpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIH0KLQotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMDA3LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTAwNy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Njk0ODY5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMDA3LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci0KLQotLyoqCi0gKiBCUDEwMDcKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgbWVzc2FnZSwgaW4gdGhlIG1lc3NhZ2UgbG9nIGZpbGU8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+RFREcyByZWxhdGluZyB0byBzb2FwOmhlYWRlciBvciBzb2FwOmJvZHkgZG9jdW1lbnRzLCBhcmUgbm90IHByZXNlbnQgaW4gdGhlIG1lc3NhZ2U6IG5vIERPQ1RZUEUgZWxlbWVudCBpcyBwcmVzZW50LjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDEwMDcgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEwMDcoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gUGFyc2UgbG9nIG1lc3NhZ2UgCi0gICAgRG9jdW1lbnQgZG9jID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCk7Ci0gICAgaWYgKGRvYyA9PSBudWxsKQotICAgIHsKLSAgICAgIC8vIG1lc3NhZ2UgaXMgZW1wdHkgb3IgaW52YWxpZCwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgLy8gZWxzZSBpZiB0aGUgbWVzc2FnZSBjb250YWlucyBhIERvY3VtZW50IFR5cGUgRGVjbGFyYXRpb24sIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgZWxzZSBpZiAoZG9jLmdldERvY3R5cGUoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICB0ZXN0QXNzZXJ0aW9uLmdldEZhaWx1cmVEZXRhaWxEZXNjcmlwdGlvbigpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMDA4LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTAwOC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTIwMjM2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMDA4LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5PcGVyYXRpb25TaWduYXR1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVHlwZXNSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotLyoqCi0gKiBCUDEwMDguCi0gKiBNZXNzYWdlIGhhcyBwYXJ0IGFjY2Vzc29yIGVsZW1lbnRzIGZvciBwYXJhbWV0ZXJzIGFuZCByZXR1cm4gdmFsdWUsIGluIG5vIG5hbWVzcGFjZXMsIAotICogYnV0IHRoZSBjaGlsZHJlbiBvZiB0aGVzZSBhcmUgbmFtZXNwYWNlIHF1YWxpZmllZCB3aXRoIHRoZSBzYW1lIHRhcmdldE5hbWVzcGFjZSB3aXRoIHdoaWNoIAotICogdGhlaXIgdHlwZXMgYXJlIGRlZmluZWQuCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDEwMDggZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEwMDgoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHRyeQotICAgIHsKLQotICAgICAgaWYgKHRoaXMudmFsaWRhdG9yLmlzT25lV2F5UmVzcG9uc2UoZW50cnlDb250ZXh0KSkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oCi0gICAgICAgICAgQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRSk7Ci0KLSAgICAgIC8vIFBhcnNlIG1lc3NhZ2UKLSAgICAgIERvY3VtZW50IGRvYyA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpOwotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBubyBtZXNzYWdlLCB0aGVuIHRocm93IGZhaWwgZXhjZXB0aW9uCi0gICAgICBpZiAoZG9jID09IG51bGwpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCk7Ci0KLSAgICAgIGlmICh0aGlzLnZhbGlkYXRvci5pc0ZhdWx0KGRvYykpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKAotICAgICAgICAgIEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEUpOwotICAgICAgfQotCi0gICAgICAvLyBDaGVjayBpZiB0aGVyZSBpcyBhIHNvYXAgYm9keSBlbGVtZW50Ci0gICAgICBpZiAoIXRoaXMudmFsaWRhdG9yLmNvbnRhaW5zU29hcEJvZHlXaXRoQ2hpbGQoZG9jKSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgLy8gUGFyc2UgcmVxdWVzdCBtZXNzYWdlCi0gICAgICBEb2N1bWVudCBkb2NSZXF1ZXN0ID0gZW50cnlDb250ZXh0LmdldFJlcXVlc3REb2N1bWVudCgpOwotCi0gICAgICAvLyBnZXQgU09BUEFjdGlvbgotICAgICAgU3RyaW5nIGFjdGlvbiA9Ci0gICAgICAgIHZhbGlkYXRvci5nZXRTb2FwQWN0aW9uKGVudHJ5Q29udGV4dC5nZXRSZXF1ZXN0KCkuZ2V0SFRUUEhlYWRlcnMoKSk7Ci0KLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IHZhbGlkYXRvci5hbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldEJpbmRpbmdzKClbMF07Ci0gICAgICAvL0RlZmluaXRpb24gZGVmaW5pdGlvbiA9IGVudHJ5Q29udGV4dC5nZXRBbmFseXplckNvbnRleHQoKS5nZXRDYW5kaWRhdGVJbmZvKCkuZ2V0RGVmaW5pdGlvbnMoKVswXTsKLSAgICAgIFR5cGVzUmVnaXN0cnkgcmVnaXN0cnkgPQotICAgICAgICBuZXcgVHlwZXNSZWdpc3RyeSgKLSAgICAgICAgICB0aGlzLnZhbGlkYXRvci5nZXRXU0RMRG9jdW1lbnQoKS5nZXREZWZpbml0aW9ucygpLAotICAgICAgICAgIHZhbGlkYXRvcik7Ci0gICAgICBPcGVyYXRpb25TaWduYXR1cmUuT3BlcmF0aW9uTWF0Y2ggbWF0Y2ggPQotICAgICAgICBPcGVyYXRpb25TaWduYXR1cmUubWF0Y2hPcGVyYXRpb24oCi0gICAgICAgICAgZG9jUmVxdWVzdCwKLSAgICAgICAgICBhY3Rpb24sCi0gICAgICAgICAgYmluZGluZywKLSAgICAgICAgICByZWdpc3RyeSk7Ci0gICAgICBpZiAobWF0Y2ggPT0gbnVsbCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gbWF0Y2guZ2V0T3BlcmF0aW9uKCk7Ci0KLSAgICAgIC8vIElzIHJwYyBzdHlsZT8KLSAgICAgIGlmICghV1NJQ29uc3RhbnRzCi0gICAgICAgIC5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9SUEMKLSAgICAgICAgLmVxdWFscyhtYXRjaC5nZXRPcGVyYXRpb25TdHlsZSgpKSkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oCi0gICAgICAgICAgQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRSk7Ci0KLSAgICAgIC8vIEdldHMgYm9keQotICAgICAgTm9kZUxpc3Qgc29hcEJvZHlMaXN0ID0KLSAgICAgICAgZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoCi0gICAgICAgICAgV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQLAotICAgICAgICAgIFhNTFV0aWxzLlNPQVBfRUxFTV9CT0RZKTsKLSAgICAgIGlmIChzb2FwQm9keUxpc3QuZ2V0TGVuZ3RoKCkgPT0gMCB8fCBzb2FwQm9keUxpc3QuZ2V0TGVuZ3RoKCkgPiAxKQotICAgICAgewotICAgICAgICAvLyBUaGVyZSBpcyBub3QgYSBib2R5IG9yIG1vcmUgdGhhbiBvbmUgYm9kaWVzIGluIHRoZSBlbnZsb3BlLgotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigpOwotICAgICAgfQotICAgICAgRWxlbWVudCBzb2FwQm9keUVsZW0gPSAoRWxlbWVudCkgc29hcEJvZHlMaXN0Lml0ZW0oMCk7Ci0KLSAgICAgIHJlc3VsdCA9IG51bGw7Ci0KLSAgICAgIC8vIEZpbmQgb3BlcmF0aW9uIGluIHRoZSBib2R5Ci0gICAgICBFbGVtZW50IHNvYXBPcGVyYXRpb24gPSBYTUxVdGlscy5nZXRGaXJzdENoaWxkKHNvYXBCb2R5RWxlbSk7Ci0gICAgICBpZiAoc29hcE9wZXJhdGlvbiA9PSBudWxsKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBGaW5kIG9wZXJhdGlvbiBtZXNzYWdlIGFuZCBleHQuIGVsZW1lbnRzIGluIHRoZSBiaW5kaW5nCi0gICAgICBNZXNzYWdlIG9wZXJhdGlvbk1lc3NhZ2UgPSBudWxsOwotICAgICAgTGlzdCBleHRFbGVtZW50cyA9IG51bGw7Ci0gICAgICBpZiAoTWVzc2FnZUVudHJ5Ci0gICAgICAgIC5UWVBFX1JFUVVFU1QKLSAgICAgICAgLmVxdWFscyhlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0VHlwZSgpKSkKLSAgICAgIHsKLSAgICAgICAgb3BlcmF0aW9uTWVzc2FnZSA9Ci0gICAgICAgICAgYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKS5nZXRJbnB1dCgpLmdldE1lc3NhZ2UoKTsKLSAgICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCkgIT0gbnVsbCkKLSAgICAgICAgICBleHRFbGVtZW50cyA9Ci0gICAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBpZiAoTWVzc2FnZUVudHJ5Ci0gICAgICAgICAgLlRZUEVfUkVTUE9OU0UKLSAgICAgICAgICAuZXF1YWxzKGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRUeXBlKCkpKQotICAgICAgICB7Ci0gICAgICAgICAgb3BlcmF0aW9uTWVzc2FnZSA9Ci0gICAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLmdldE9wZXJhdGlvbigpLmdldE91dHB1dCgpLmdldE1lc3NhZ2UoKTsKLSAgICAgICAgICBpZiAoYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nT3V0cHV0KCkgIT0gbnVsbCkKLSAgICAgICAgICAgIGV4dEVsZW1lbnRzID0KLSAgICAgICAgICAgICAgYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nT3V0cHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8gSXMgbWVzc2FnZSBSUEMtbGl0ZXJhbD8KLSAgICAgIGlmICghdmFsaWRhdG9yLmlzTGl0ZXJhbChleHRFbGVtZW50cykpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKAotICAgICAgICAgIEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEUpOwotCi0gICAgICAvLyBnZXRzIGZpcnN0IGNoaWxkIG9mIG1lc3NhZ2UKLSAgICAgIEVsZW1lbnQgc29hcE1lc3NhZ2VQYXJ0ID0gWE1MVXRpbHMuZ2V0Rmlyc3RDaGlsZChzb2FwT3BlcmF0aW9uKTsKLSAgICAgIGlmIChzb2FwTWVzc2FnZVBhcnQgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvblBhc3NFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgd2hpbGUgKHNvYXBNZXNzYWdlUGFydCAhPSBudWxsKQotICAgICAgewotICAgICAgICAvLyBjaGVjayB3aGV0aGVyIHBhcnQgYWNjZXNzb3Igb3IgcmV0dXJuIGFyZSBpbiBubyBuYW1lc3BhY2UJCSAgICAJCQotCi0gICAgICAgIGlmIChzb2FwTWVzc2FnZVBhcnQuZ2V0TmFtZXNwYWNlVVJJKCkgIT0gbnVsbAotICAgICAgICAgIHx8ICIiLmVxdWFscyhzb2FwTWVzc2FnZVBhcnQuZ2V0TmFtZXNwYWNlVVJJKCkpKQotICAgICAgICB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vICAgIGNoZWNrIHdoZXRoZXIgY2hpbGRyZW4gYXJlIG5hbWVzcGFjZSBxdWFsaWZpZWQgCi0gICAgICAgIC8vICB3aXRoIHRoZSBzYW1lIHRhcmdldE5hbWVzcGFjZSB3aXRoIHdoaWNoIHRoZWlyIHR5cGVzIGFyZSBkZWZpbmVkCi0gICAgICAgIFN0cmluZyB0eXBlc1RhcmdldE5TID0KLSAgICAgICAgICBnZXRUeXBlTlMob3BlcmF0aW9uTWVzc2FnZSwgc29hcE1lc3NhZ2VQYXJ0LmdldExvY2FsTmFtZSgpKTsKLQotICAgICAgICBpZiAodHlwZXNUYXJnZXROUyA9PSBudWxsKQotICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCk7Ci0KLSAgICAgICAgaWYgKCFjaGVja0NoaWxkcmVuTmFtZXNwYWNlKHNvYXBNZXNzYWdlUGFydCwgdHlwZXNUYXJnZXROUykpCi0gICAgICAgIHsKLSAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigpOwotICAgICAgICB9Ci0KLSAgICAgICAgc29hcE1lc3NhZ2VQYXJ0ID0gWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcoc29hcE1lc3NhZ2VQYXJ0KTsKLSAgICAgIH0KLQotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBpZiAoZS5nZXRNZXNzYWdlKCkgIT0gbnVsbCAmJiBlLmdldE1lc3NhZ2UoKS5sZW5ndGgoKSA+IDApCi0gICAgICAgIHJlc3VsdCA9IGUuZ2V0TWVzc2FnZSgpOwotICAgICAgZWxzZQotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvblBhc3NFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotCi0gICAgaWYgKHJlc3VsdCA9PSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRCkKLSAgICB7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChudWxsLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIHBhcnQgdHlwZSBOUy4KLSAgICogQHBhcmFtIG1lc3NhZ2UKLSAgICogQHBhcmFtIHBhcnROYW1lCi0gICAqIEByZXR1cm4gU3RyaW5nCi0gICAqLwotICBwcml2YXRlIFN0cmluZyBnZXRUeXBlTlMoTWVzc2FnZSBtZXNzYWdlLCBTdHJpbmcgcGFydE5hbWUpCi0gIHsKLSAgICBQYXJ0IHBhcnQgPSBtZXNzYWdlLmdldFBhcnQocGFydE5hbWUpOwotICAgIGlmIChwYXJ0ID09IG51bGwpCi0gICAgICByZXR1cm4gbnVsbDsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gcGFydC5nZXRUeXBlTmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrcyBjaGlsZHJlbiBlbGVtZW50cycgbmFtZXNwYWNlLgotICAgKiBAcGFyYW0gbm9kZQotICAgKiBAcGFyYW0gdHlwZXNUYXJnZXROUwotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0KLSAgcHJpdmF0ZSBib29sZWFuIGNoZWNrQ2hpbGRyZW5OYW1lc3BhY2UoRWxlbWVudCBub2RlLCBTdHJpbmcgdHlwZXNUYXJnZXROUykKLSAgewotICAgIE5vZGVMaXN0IHBhcnRzID0gbm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGFydHMuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICB7Ci0gICAgICBFbGVtZW50IHBhcnQgPSAoRWxlbWVudCkgcGFydHMuaXRlbShpKTsKLSAgICAgIGlmICghdHlwZXNUYXJnZXROUy5lcXVhbHMocGFydC5nZXROYW1lc3BhY2VVUkkoKSkpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGlmICghY2hlY2tDaGlsZHJlbk5hbWVzcGFjZShwYXJ0LCB0eXBlc1RhcmdldE5TKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEwMDkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMDA5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyZTQwMWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEwMDkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uVHlwZTsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlcjsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvblBhc3NFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NZXNzYWdlRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuSFRUUFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLk9wZXJhdGlvblNpZ25hdHVyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5UeXBlc1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotCi0vKioKLSAqIEJQMTAwOS4KLSAqIE1lc3NhZ2UgaW5jbHVkZXMgYWxsIHNvYXBiaW5kOmhlYWRlcnMgc3BlY2lmaWVkIGluIHRoZSB3c2RsOmlucHV0IAotICogKGlmIHJlcXVlc3QpIG9yIHdzZGw6b3V0cHV0IChpZiByZXNwb25zZSkgb2YgdGhlIG9wZXJhdGlvbiByZWZlcnJlZCAKLSAqIHRvIGJ5IGl0cyB3c2RsOmJpbmRpbmcsIGFuZCBtYXkgYWxzbyBpbmNsdWRlIGhlYWRlcnMgdGhhdCB3ZXJlIG5vdCBzcGVjaWZpZWQuCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDEwMDkgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEwMDkoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUoVGVzdEFzc2VydGlvbiwgRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBpZiAodGhpcy52YWxpZGF0b3IuaXNPbmVXYXlSZXNwb25zZShlbnRyeUNvbnRleHQpKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBQYXJzZSBtZXNzYWdlCi0gICAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLQotICAgICAgLy8gUGFyc2UgcmVxdWVzdCBtZXNzYWdlCi0gICAgICBEb2N1bWVudCBkb2NSZXF1ZXN0ID0gZW50cnlDb250ZXh0LmdldFJlcXVlc3REb2N1bWVudCgpOwotCi0gICAgICBpZiAoZG9jID09IG51bGwgfHwgZG9jUmVxdWVzdCA9PSBudWxsKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotCi0gICAgICAvLyBDaGVjayBpZiB0aGVyZSBpcyBhIHNvYXAgYm9keSBlbGVtZW50Ci0gICAgICBpZiAoIXRoaXMudmFsaWRhdG9yLmNvbnRhaW5zU29hcEJvZHlXaXRoQ2hpbGQoZG9jKSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgaWYgKHRoaXMudmFsaWRhdG9yLmlzRmF1bHQoZG9jKSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oCi0gICAgICAgICAgQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIGdldCBTT0FQQWN0aW9uCi0gICAgICBTdHJpbmcgaGVhZGVycyA9IGVudHJ5Q29udGV4dC5nZXRSZXF1ZXN0KCkuZ2V0SFRUUEhlYWRlcnMoKTsKLSAgICAgIFN0cmluZyBhY3Rpb24gPSBudWxsOwotICAgICAgaWYgKGhlYWRlcnMgIT0gbnVsbCkKLSAgICAgICAgYWN0aW9uID0gKFN0cmluZykgSFRUUFV0aWxzLmdldEh0dHBIZWFkZXJUb2tlbnMoaGVhZGVycywgIjoiKS5nZXQoIlNPQVBBY3Rpb24iLnRvVXBwZXJDYXNlKCkpOwotCi0gICAgICBCaW5kaW5nIGJpbmRpbmcgPSB2YWxpZGF0b3IuYW5hbHl6ZXJDb250ZXh0LmdldENhbmRpZGF0ZUluZm8oKS5nZXRCaW5kaW5ncygpWzBdOwotICAgICAgVHlwZXNSZWdpc3RyeSByZWdpc3RyeSA9Ci0gICAgICAgIG5ldyBUeXBlc1JlZ2lzdHJ5KAotICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmdldFdTRExEb2N1bWVudCgpLmdldERlZmluaXRpb25zKCksCi0gICAgICAgICAgdmFsaWRhdG9yKTsKLSAgICAgIE9wZXJhdGlvblNpZ25hdHVyZS5PcGVyYXRpb25NYXRjaCBtYXRjaCA9Ci0gICAgICAgIE9wZXJhdGlvblNpZ25hdHVyZS5tYXRjaE9wZXJhdGlvbigKLSAgICAgICAgICBkb2NSZXF1ZXN0LAotICAgICAgICAgIGFjdGlvbiwKLSAgICAgICAgICBiaW5kaW5nLAotICAgICAgICAgIHJlZ2lzdHJ5KTsKLQotICAgICAgaWYgKG1hdGNoID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0KLSAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IG1hdGNoLmdldE9wZXJhdGlvbigpOwotCi0gICAgICAvLyBJZiB0aGlzIGlzIGEgb25lLXdheSBvcGVyYXRpb24gYW5kIHdlIGFyZSBwcm9jZXNzaW5nIGEgcmVzcG9uc2UsIHRoZW4gc2V0IHJlc3VsdCB0byBub3RBcHBsaWNhYmxlCi0gICAgICBpZiAoYmluZGluZ09wZXJhdGlvbgotICAgICAgICAuZ2V0T3BlcmF0aW9uKCkKLSAgICAgICAgLmdldFN0eWxlKCkKLSAgICAgICAgLmVxdWFscyhPcGVyYXRpb25UeXBlLk9ORV9XQVkpCi0gICAgICAgICYmIChlbnRyeUNvbnRleHQKLSAgICAgICAgICAuZ2V0TWVzc2FnZUVudHJ5KCkKLSAgICAgICAgICAuZ2V0VHlwZSgpCi0gICAgICAgICAgLmVxdWFscyhNZXNzYWdlRW50cnkuVFlQRV9SRVNQT05TRSkpKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBmaW5kIGJvZHkKLSAgICAgIE5vZGVMaXN0IHNvYXBCb2R5TGlzdCA9Ci0gICAgICAgIGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKAotICAgICAgICAgIFdTSUNvbnN0YW50cy5OU19VUklfU09BUCwKLSAgICAgICAgICBYTUxVdGlscy5TT0FQX0VMRU1fQk9EWSk7Ci0gICAgICBpZiAoc29hcEJvZHlMaXN0LmdldExlbmd0aCgpID09IDAgfHwgc29hcEJvZHlMaXN0LmdldExlbmd0aCgpID4gMSkKLSAgICAgIHsKLSAgICAgICAgLy8gVGhlcmUgaXMgbm90IGEgYm9keSBvciBtb3JlIHRoYW4gb25lIGJvZGllcyBpbiB0aGUgZW52bG9wZS4KLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvblBhc3NFeGNlcHRpb24oKTsKLSAgICAgIH0KLSAgICAgIC8vIGZpbmQgaGVhZGVycwotICAgICAgTm9kZUxpc3Qgc29hcEhlYWRlcnMgPQotICAgICAgICBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUygKLSAgICAgICAgICBXU0lUYWcuRUxFTV9TT0FQX0hFQURFUi5nZXROYW1lc3BhY2VVUkkoKSwKLSAgICAgICAgICBXU0lUYWcuRUxFTV9TT0FQX0hFQURFUi5nZXRMb2NhbFBhcnQoKSk7Ci0KLSAgICAgIC8vZmluZCBhbGwgb3BlcmF0aW9uCi0gICAgICAvL0VsZW1lbnQgc29hcE9wZXJhdGlvbiA9IFhNTFV0aWxzLmdldEZpcnN0Q2hpbGQoc29hcEJvZHlFbGVtKTsKLQotICAgICAgLy8gZ2V0cyBzb2FwYmluZDpoZWFkZXJzCi0gICAgICBMaXN0IGJpbmRpbmdIZWFkZXJzID0gbnVsbDsKLSAgICAgIGlmIChlbnRyeUNvbnRleHQKLSAgICAgICAgLmdldE1lc3NhZ2VFbnRyeSgpCi0gICAgICAgIC5nZXRUeXBlKCkKLSAgICAgICAgLmVxdWFscyhNZXNzYWdlRW50cnkuVFlQRV9SRVFVRVNUKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCkgIT0gbnVsbCkKLSAgICAgICAgICBiaW5kaW5nSGVhZGVycyA9Ci0gICAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oKTsKLQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBpZiAoZW50cnlDb250ZXh0Ci0gICAgICAgICAgLmdldE1lc3NhZ2VFbnRyeSgpCi0gICAgICAgICAgLmdldFR5cGUoKQotICAgICAgICAgIC5lcXVhbHMoTWVzc2FnZUVudHJ5LlRZUEVfUkVTUE9OU0UpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ091dHB1dCgpICE9IG51bGwpCi0gICAgICAgICAgICBiaW5kaW5nSGVhZGVycyA9Ci0gICAgICAgICAgICAgIGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ091dHB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmIChiaW5kaW5nSGVhZGVycyA9PSBudWxsIHx8IGJpbmRpbmdIZWFkZXJzLnNpemUoKSA9PSAwKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICBJdGVyYXRvciBpdGVyYXRvciA9IGJpbmRpbmdIZWFkZXJzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBPYmplY3QgYmluZGluZ0hlYWRlciA9IGl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgaWYgKGJpbmRpbmdIZWFkZXIgaW5zdGFuY2VvZiBTT0FQSGVhZGVyKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gZmluZCBzb2FwYmluZDpoZWFkZXIgaW4gU09BUCBtZXNzYWdlCi0gICAgICAgICAgaWYgKCFpc0JpbmRpbmdIZWFkZXJJblNPQVBNZXNzYWdlKGVudHJ5Q29udGV4dCwKLSAgICAgICAgICAgIHNvYXBIZWFkZXJzLAotICAgICAgICAgICAgKFNPQVBIZWFkZXIpIGJpbmRpbmdIZWFkZXIpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotCi0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgaWYgKGUuZ2V0TWVzc2FnZSgpICE9IG51bGwgJiYgZS5nZXRNZXNzYWdlKCkubGVuZ3RoKCkgPiAwKQotICAgICAgICByZXN1bHQgPSBlLmdldE1lc3NhZ2UoKTsKLSAgICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25QYXNzRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIGlmIChyZXN1bHQgPT0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQpCi0gICAgewotICAgICAgZmFpbHVyZURldGFpbCA9IHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwobnVsbCwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotICAvKioKLSAgKiBDaGVja3Mgd2hldGhlciBzcGVjaWZpZWQgU09BUEhlYWRlciBpcyBpbiB0aGUgU09BUE1lc3NhZ2UuCi0gICogQHBhcmFtIHNvYXBIZWFkZXJMaXN0Ci0gICogQHBhcmFtIFNPQVBIZWFkZXIKLSAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGlzQmluZGluZ0hlYWRlckluU09BUE1lc3NhZ2UoCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCwKLSAgICBOb2RlTGlzdCBzb2FwSGVhZGVycywKLSAgICBTT0FQSGVhZGVyIGJpbmRpbmdIZWFkZXIpCi0gIHsKLQotICAgIE1lc3NhZ2UgbXNnID0gZ2V0TWVzc2FnZUJ5UU5hbWUoZW50cnlDb250ZXh0LCBiaW5kaW5nSGVhZGVyLmdldE1lc3NhZ2UoKSk7Ci0gICAgaWYgKG1zZyA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUGFydCBwYXJ0ID0gbXNnLmdldFBhcnQoYmluZGluZ0hlYWRlci5nZXRQYXJ0KCkpOwotICAgIGlmIChwYXJ0ID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBRTmFtZSBwYXJ0RWxlbWVudE5hbWUgPSBwYXJ0LmdldEVsZW1lbnROYW1lKCk7Ci0gICAgUU5hbWUgcGFydFR5cGVOYW1lID0gcGFydC5nZXRUeXBlTmFtZSgpOwotCi0gICAgaWYgKHBhcnRUeXBlTmFtZSA9PSBudWxsICYmIHBhcnRFbGVtZW50TmFtZSA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHNvYXBIZWFkZXJzID09IG51bGwgfHwgc29hcEhlYWRlcnMuZ2V0TGVuZ3RoKCkgPT0gMCkKLSAgICB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIFZlY3RvciBoZWFkZXJzTGlzdCA9Ci0gICAgICBYTUxVdGlscy5nZXRDaGlsZEVsZW1lbnRzKChFbGVtZW50KSBzb2FwSGVhZGVycy5pdGVtKDApKTsKLQotICAgIGZvciAoaW50IGluZGV4SGVhZGVyID0gMDsKLSAgICAgIGluZGV4SGVhZGVyIDwgaGVhZGVyc0xpc3Quc2l6ZSgpOwotICAgICAgaW5kZXhIZWFkZXIrKykKLSAgICB7Ci0gICAgICBFbGVtZW50IHNvYXBIZWFkZXJQYXJ0ID0gKEVsZW1lbnQpIGhlYWRlcnNMaXN0LmdldChpbmRleEhlYWRlcik7Ci0gICAgICBpZiAoc29hcEhlYWRlclBhcnQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgUU5hbWUgc29hcEhlYWRlclBhcnRRTmFtZSA9Ci0gICAgICAgICAgbmV3IFFOYW1lKAotICAgICAgICAgICAgc29hcEhlYWRlclBhcnQuZ2V0TmFtZXNwYWNlVVJJKCksCi0gICAgICAgICAgICBzb2FwSGVhZGVyUGFydC5nZXRMb2NhbE5hbWUoKSk7Ci0gICAgICAgIGlmICgocGFydFR5cGVOYW1lICE9IG51bGwKLSAgICAgICAgICAmJiBwYXJ0VHlwZU5hbWUuZXF1YWxzKHNvYXBIZWFkZXJQYXJ0UU5hbWUpKQotICAgICAgICAgIHx8IChwYXJ0RWxlbWVudE5hbWUgIT0gbnVsbAotICAgICAgICAgICAgJiYgcGFydEVsZW1lbnROYW1lLmVxdWFscyhzb2FwSGVhZGVyUGFydFFOYW1lKSkpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIG1lc3NhZ2UgYnkgUU5hbWUuCi0gICAqIEBwYXJhbSBlbnRyeUNvbnRleHQKLSAgICogQHBhcmFtIG1lc3NhZ2VOYW1lCi0gICAqIEByZXR1cm4gTWVzc2FnZQotICAgKi8KLSAgcHJpdmF0ZSBNZXNzYWdlIGdldE1lc3NhZ2VCeVFOYW1lKAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQsCi0gICAgUU5hbWUgbWVzc2FnZU5hbWUpCi0gIHsKLSAgICBEZWZpbml0aW9uW10gZGVmcyA9IHZhbGlkYXRvci5hbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldERlZmluaXRpb25zKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZWZzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIE1lc3NhZ2UgbXNnID0gZGVmc1tpXS5nZXRNZXNzYWdlKG1lc3NhZ2VOYW1lKTsKLSAgICAgIGlmIChtc2cgIT0gbnVsbCkKLSAgICAgICAgcmV0dXJuIG1zZzsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMDExLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTAxMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTM3YWI2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMDExLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvblBhc3NFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIEJQMTAxMS4KLSAqLwotcHVibGljIGNsYXNzIEJQMTAxMSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQMTAxMShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBUT0RPIG5lZWQgdG8gaGFuZGxlIHNvYXAgd2l0aCBhdHRhY2htZW50cwotICAgICAgaWYgKGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5pc01pbWVDb250ZW50KCkpCi0gICAgICAJIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICAgICAKLSAgICAgIEJpbmRpbmdbXSBiaW5kaW5ncyA9IHZhbGlkYXRvci5hbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldEJpbmRpbmdzKCk7Ci0KLSAgICAgIC8vIGdldCBzb2FwIG1lc3NhZ2UgY2hpbGQgbmFtZQotICAgICAgLy8gR2V0IHRoZSBET00gY29udGVudHMgb2YgdGhlIG1lc3NhZ2Ugc29hcDpib2R5IChpZiBub24tZW1wdHkpCi0gICAgICBEb2N1bWVudCBtZXNzYWdlRG9jID0gbnVsbDsKLQotICAgICAgUU5hbWUgbWVzc2FnZVBhcnRFbGVtZW50UU5hbWUgPSBudWxsOwotCi0gICAgICBpZiAoIWVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRNZXNzYWdlKCkuZXF1YWxzKCIiKSkKLSAgICAgIHsKLSAgICAgICAgbWVzc2FnZURvYyA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpOwotICAgICAgICAvL21lc3NhZ2VEb2MgPSBYTUxVdGlscy5wYXJzZVhNTChlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpLCAKLSAgICAgICAgLy8JV1NJUHJvcGVydGllcy5ERUZfU09BUF9TQ0hFTUEpOwotICAgICAgICAvLyBnZXQgc29hcCBvcGVyYXRpb24gbmFtZSBmcm9tIHRoZSBzb2FwOmJvZHkKLQotICAgICAgICAvLyBOT1RFOiBnZXRTb2FwQm9keUNoaWxkKCkgbWF5IHJldHVybiBudWxsLCBpZiB0aGUgc29hcDpib2R5IGRpZCBub3QgY29udGFpbiBhbnkgY2hpbGQgZWxlbWVudHMKLSAgICAgICAgRWxlbWVudCBzb2FwTWVzc2FnZUVsZW1lbnQgPSB2YWxpZGF0b3IuZ2V0U29hcEJvZHlDaGlsZChtZXNzYWdlRG9jKTsKLQotICAgICAgICAvLyBmb3IgZG9jLWxpdC4uLiBmaW5kIHRoZSB3c2RsOnBhcnQgZnJvbSBvbmUgb2YgdGhlIHNwZWNpZmllZCBvcGVyYXRpb25zIHRoYXQgaGFzIAotICAgICAgICAvLyB0aGUgc29hcCBlbGVtZW50IHVzZWQgaW4gdGhlIG1lc3NhZ2UuICAgICAgCi0gICAgICAgIC8vIHdlIGFyZSBsb29raW5nIGZvciBhIHBhcnQgd2l0aCBhbiBlbGVtZW50IGF0dHJpYiB2YWwgbWF0Y2hpbmcgdGhlIHNvYXAgbWVzc2FnZSBlbGVtZW50Ci0gICAgICAgIGlmIChzb2FwTWVzc2FnZUVsZW1lbnQgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIG1lc3NhZ2VQYXJ0RWxlbWVudFFOYW1lID0KLSAgICAgICAgICAgIG5ldyBRTmFtZSgKLSAgICAgICAgICAgICAgc29hcE1lc3NhZ2VFbGVtZW50LmdldE5hbWVzcGFjZVVSSSgpLAotICAgICAgICAgICAgICBzb2FwTWVzc2FnZUVsZW1lbnQuZ2V0TG9jYWxOYW1lKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmICgobWVzc2FnZURvYyA9PSBudWxsKSB8fCB0aGlzLnZhbGlkYXRvci5pc0ZhdWx0KG1lc3NhZ2VEb2MpKQotICAgICAgewotICAgICAgICAvLyBlbXB0eSBtZXNzYWdlcyBhbmQgZmF1bHQgbWVzc2FnZXMgZG8gbm90IHF1YWxpZnkgZm9yIHRoaXMgVEEKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgLy8gbG9vayBmb3IgbWF0Y2gocykgaW4gZG9jIG9wZXJhdGlvbnMKLSAgICAgIC8vIGlmIGZvdW5kLCB3ZSdyZSBkb25lLCBlbHNlCi0gICAgICAvLyBsb29rIGZvciBtYXRjaChzKSBpbiBycGMgb3BlcmF0aW9ucwotCi0gICAgICAvKiBEb2MtbGl0IAotICAgICAgICogZ2V0IGxpc3Qgb2Ygb3BlcmF0aW9ucyAoZnJvbSBjYW5kaWRhdGVzKSBmb3Igd2hpY2ggdGhlIGZpcnN0IHNvYXA6Ym9keSBjaGlsZCBRTmFtZSBpcyB0aGUKLSAgICAgICAqIDxwYXJ0IGVsZW1lbnQ9Ii4uLiI+IHZhbHVlIG9mIHRoYXQgb3BlcmF0aW9uJ3MgPHdzZGw6aW5wdXQ+IG9yIDx3c2RsOm91dHB1dD4gZWxlbWVudCAoZGVwZW5kaW5nCi0gICAgICAgKiBvbiB3aGV0aGVyIG1lc3NhZ2UgaXMgYSByZXF1ZXN0IG9yIGEgcmVzcG9uc2UpLgotICAgICAgICovCi0KLSAgICAgIEJpbmRpbmdPcGVyYXRpb25bXSBkb2NCaW5kaW5nT3BlcmF0aW9ucyA9Ci0gICAgICAgIHZhbGlkYXRvci5nZXRNYXRjaGluZ0JpbmRpbmdPcHMoCi0gICAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQywKLSAgICAgICAgICBiaW5kaW5ncyk7Ci0gICAgICAvLyBsaXN0IG9mIG9wZXJhdGlvbnMgdGhhdCBtYXRjaCB0aGUgPHdzZGw6aW5wdXQ+IG9yIDx3c2RsOm91dHB1dD4gKGRlcGVuZGluZyBvbiBlbnRyeVR5cGUpCi0gICAgICAvLyBmb3IgcGFydCBlbGVtZW50PSIuLi4iCi0gICAgICAvLyAoSVNTVUU6IHdoYXQgYWJvdXQgcGFydCB0eXBlPSIuLi4iPykKLSAgICAgIEJpbmRpbmdPcGVyYXRpb25bXSBwb3RlbnRpYWxEb2NMaXRPcHMgPQotICAgICAgICB2YWxpZGF0b3IuZ2V0RG9jTGl0T3BlcmF0aW9ucygKLSAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeVR5cGUoKSwKLSAgICAgICAgICBtZXNzYWdlUGFydEVsZW1lbnRRTmFtZSwKLSAgICAgICAgICBkb2NCaW5kaW5nT3BlcmF0aW9ucyk7Ci0gICAgICBpZiAocG90ZW50aWFsRG9jTGl0T3BzLmxlbmd0aCAhPSAwKQotICAgICAgewotICAgICAgICAvLyBmb3VuZCBhdCBsZWFzdCBvbmUgZG9jIGxpdCBtYXRjaAotCi0gICAgICAgIC8vICoqKiBOb3cgd2Uga25vdyBpdCdzIGRvY3VtZW50LWxpdGVyYWwsIHNjaGVtYS12YWxpZGF0ZSB0aGUgU09BUCBwYXlsb2FkIGFjY29yZGluZ2x5ICAgICAgICAgICAgCQkKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICB0aGlzLnZhbGlkYXRvci5tZXNzYWdlSXNEb2NMaXRTY2hlbWFWYWxpZChlbnRyeUNvbnRleHQpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgfQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvKiBzb2FwIG1lc3NhZ2UgaXMgbm90IGRvYy1saXQgc28gdHJ5IDoKLSAgICAgICAqIFJwYy1saXQKLSAgICAgICAqLwotICAgICAgQmluZGluZ09wZXJhdGlvbltdIHJwY0JpbmRpbmdPcGVyYXRpb25zID0KLSAgICAgICAgdGhpcy52YWxpZGF0b3IuZ2V0TWF0Y2hpbmdCaW5kaW5nT3BzKAotICAgICAgICAgIFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9SUEMsCi0gICAgICAgICAgYmluZGluZ3MpOwotCi0gICAgICAvLyBEZXRlcm1pbmUgaWYgdGhlcmUgaXMgYW4gb3BlcmF0aW9uIG1hdGNoCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIHJjcE9wTWF0Y2ggPQotICAgICAgICB0aGlzLnZhbGlkYXRvci5nZXRPcGVyYXRpb25NYXRjaCgKLSAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeVR5cGUoKSwKLSAgICAgICAgICBtZXNzYWdlRG9jLAotICAgICAgICAgIHJwY0JpbmRpbmdPcGVyYXRpb25zKTsKLSAgICAgIGlmIChyY3BPcE1hdGNoICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIC8vIERldGVybWluZSBpZiB0aGUgcGFydHMgbWF0Y2gKLSAgICAgICAgcmNwT3BNYXRjaCA9Ci0gICAgICAgICAgdGhpcy52YWxpZGF0b3IuZ2V0T3BlcmF0aW9uUGFydHNNYXRjaCgKLSAgICAgICAgICAgIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5VHlwZSgpLAotICAgICAgICAgICAgbWVzc2FnZURvYywKLSAgICAgICAgICAgIHJwY0JpbmRpbmdPcGVyYXRpb25zKTsKLSAgICAgIH0KLQotICAgICAgaWYgKHJjcE9wTWF0Y2ggPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLy9ub3QgbWF0Y2hlZCB3aXRoIHJwYyBlaXRoZXIuIFByZXBhcmUgYXNzZXJ0aW9uIGZhaWx1cmUuCi0gICAgICAgIFN0cmluZ0J1ZmZlciBycGNPcGVyYXRpb25MaXN0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJwY0JpbmRpbmdPcGVyYXRpb25zLmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgcnBjT3BlcmF0aW9uTGlzdC5hcHBlbmQocnBjQmluZGluZ09wZXJhdGlvbnNbaV0udG9TdHJpbmcoKSArICJcbiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nQnVmZmVyIGRvY09wZXJhdGlvbkxpc3QgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZG9jQmluZGluZ09wZXJhdGlvbnMubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBkb2NPcGVyYXRpb25MaXN0LmFwcGVuZChkb2NCaW5kaW5nT3BlcmF0aW9uc1tpXS50b1N0cmluZygpICsgIlxuIik7Ci0gICAgICAgIH0KLQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigKLSAgICAgICAgICAiLS1NRVNTQUdFOlxuIgotICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpCi0gICAgICAgICAgICArICJcbi0tQ0FORElEQVRFIFJQQyBTVFlMRSBPUEVSQVRJT05TICgiCi0gICAgICAgICAgICArIChycGNCaW5kaW5nT3BlcmF0aW9ucy5sZW5ndGggIT0gMAotICAgICAgICAgICAgICA/IChycGNCaW5kaW5nT3BlcmF0aW9ucy5sZW5ndGggKyAiKTpcbiIgKyBycGNPcGVyYXRpb25MaXN0KQotICAgICAgICAgICAgICA6ICJOT05FKSIpCi0gICAgICAgICAgICArICJcbi0tQ0FORElEQVRFIERPQ1VNRU5UIFNUWUxFIE9QRVJBVElPTlMgKCIKLSAgICAgICAgICAgICsgKGRvY0JpbmRpbmdPcGVyYXRpb25zLmxlbmd0aCAhPSAwCi0gICAgICAgICAgICAgID8gKGRvY0JpbmRpbmdPcGVyYXRpb25zLmxlbmd0aCArICIpOlxuIiArIGRvY09wZXJhdGlvbkxpc3QpCi0gICAgICAgICAgICAgIDogIk5PTkUpIikpOwotCi0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25QYXNzRXhjZXB0aW9uIGUpCi0gICAgewotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZS5nZXRNZXNzYWdlKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLQotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEwMTIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMDEyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExNWQ0ZWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEwMTIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotLyoqCi0gKiBCUDEwMTIuCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDEwMTIgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEwMTIoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gbG9vayBmb3IgPHNvYXA6RW52ZWxvcGU+IGVsZW1lbnRzOgotICAgICAgLy8gKE5vdGU6IHNpbmNlIHRoaXMgaXMgYSBTb2FwIG1lc3NhZ2Ugd2UgZXhwZWN0IGV4YWN0bHkgb25lIHNvYXAgZW52ZWxvcGUsIGJ1dCB3ZSBkbyBub3QgYXNzdW1lIGl0KS4KLSAgICAgIERvY3VtZW50IHJlcXVlc3REb2MgPSBlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdERvY3VtZW50KCk7Ci0KLSAgICAgIC8vIG1lc3NhZ2UgaXMgZW1wdHkgb3IgaW52YWxpZCwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKHJlcXVlc3REb2MgPT0gbnVsbCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgRWxlbWVudCBlbnZFbGVtID0gcmVxdWVzdERvYy5nZXREb2N1bWVudEVsZW1lbnQoKTsKLSAgICAgIC8vTm9kZUxpc3Qgc29hcEVudkxpc3QgPSByZXF1ZXN0RG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQLCAiRW52ZWxvcGUiKTsKLQotICAgICAgLy8gSWYgdGhlIGRvY3VtZW50IGVsZW1lbnQgdGFnIG5hbWUgaXMgbm90IEVudmVsb3BlCi0gICAgICAvLyBvciB0aGUgbmFtZXNwYWNlIGlzIGh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvCi0gICAgICBpZiAoIWVudkVsZW0uZ2V0TG9jYWxOYW1lKCkuZXF1YWxzKFhNTFV0aWxzLlNPQVBfRUxFTV9FTlZFTE9QRSkKLSAgICAgICAgfHwgZW52RWxlbS5nZXROYW1lc3BhY2VVUkkoKS5lcXVhbHMoV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQKSkKLSAgICAgICAgLy8gUmVxdWVzdCBjb250YWlucyBwcm9wZXIgc29hcCBFbnZlbG9wZSBlbGVtZW50Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIHdlIGV4cGVjdCBhIFNvYXAgRmF1bHQgYXMgYSByZXNwb25zZQkKLSAgICAgIERvY3VtZW50IHJlc3BvbnNlRG9jID0KLSAgICAgICAgWE1MVXRpbHMucGFyc2VYTUwoZW50cnlDb250ZXh0LmdldFJlc3BvbnNlKCkuZ2V0TWVzc2FnZSgpKTsKLSAgICAgIE5vZGVMaXN0IHNvYXBGYXVsdExpc3QgPQotICAgICAgICByZXNwb25zZURvYy5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKAotICAgICAgICAgIFdTSUNvbnN0YW50cy5OU19VUklfU09BUCwKLSAgICAgICAgICAiRmF1bHQiKTsKLSAgICAgIC8vIEFERCBleHRyYSBjaGVjayBoZXJlIHRoYXQgdGhlIDxzb2FwOkZhdWx0PiBpcyBhIGNoaWxkIG9mIDxzb2FwOkVudmVsb3BlPiA/PwkJICAgICAgCQkJCQotICAgICAgaWYgKChzb2FwRmF1bHRMaXN0ID09IG51bGwpIHx8IChzb2FwRmF1bHRMaXN0LmdldExlbmd0aCgpID09IDApKQotICAgICAgewotICAgICAgICAvLyBObyBTb2FwIGZhdWx0IGZvdW5kLgotICAgICAgICAvLyBBc3NlcnRpb24gZmFpbGVkIChBREQgaGlnaGxpZ2h0IHRoZSBjaGlsZCBoZXJlID8pCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKAotICAgICAgICAgICItLS0gUkVRVUVTVDpcbiIKLSAgICAgICAgICAgICsgZW50cnlDb250ZXh0LmdldFJlcXVlc3QoKS5nZXRNZXNzYWdlKCkKLSAgICAgICAgICAgICsgIlxuLS0tIFJFU1BPTlNFOlxuIgotICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0UmVzcG9uc2UoKS5nZXRNZXNzYWdlKCkpOwotICAgICAgfQotCi0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGFuYWUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMDEzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTAxMy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjZmOGViLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMDEzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotCi0KLQotLyoqCi0gKiBCUDEwMTMuCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDEwMTMgZXh0ZW5kcyBCUDEwMTEKLXsKLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQMTAxMyhCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTAzMS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEwMzEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZiZGFmYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTAzMS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi0KLS8qKgotICogQlAxMDMxLgotICogCi0gKiBAYXV0aG9yOiBHcmFoYW0gVHVycmVsbCwgSUJNIFVLCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDEwMzEgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEwMzEoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgZmFpbHVyZURldGFpbCA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRG9jdW1lbnQgZG9jOwotICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBvbmUgd2F5IHJlc3BvbnNlCi0gICAgICAvLyBvciBtZXNzYWdlIGlzIG1lcHR5IG9yIGludmFsaWQKLSAgICAgIGlmICh0aGlzLnZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCkKLSAgICAgICAgICB8fCAoZG9jID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCkpID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0KLSAgICAgIGlmICghdGhpcy52YWxpZGF0b3IuaXNGYXVsdChkb2MpKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICBOb2RlTGlzdCBmYXVsdENvZGVzID0gZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJmYXVsdGNvZGUiKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmF1bHRDb2Rlcy5nZXRMZW5ndGgoKTsgaSsrKQotICAgICAgewotICAgICAgICBOb2RlTGlzdCBmYXVsdENvZGVOb2RlcyA9IChmYXVsdENvZGVzLml0ZW0oaSkpLmdldENoaWxkTm9kZXMoKTsKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBmYXVsdENvZGVOb2Rlcy5nZXRMZW5ndGgoKTsgaisrKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKGZhdWx0Q29kZU5vZGVzLml0ZW0oaikgaW5zdGFuY2VvZiBUZXh0KQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFRleHQgZmF1bHRDb2RlVGV4dCA9IChUZXh0KSBmYXVsdENvZGVOb2Rlcy5pdGVtKGopOwotICAgICAgICAgICAgaWYgKGZhdWx0Q29kZVRleHQuZ2V0RGF0YSgpLmluZGV4T2YoJy4nKSA+IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICAgIC8vIGRvdHRlZCBub3RhdGlvbiB1c2VkLgotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbigpOwotICAgICAgLy8gbm8gZG90dGVkIG5vdGF0aW9uIHVzZWQgaW4gYSBmYXVsdGNvZGUgZWxlbWVudAotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9XQVJOSU5HOwotICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKSwKLSAgICAgICAgICBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMDMyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTAzMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzQxMzA3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMDMyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotCi0KLS8qKgotICogQlAxMDMyCi0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIGVudmVsb3BlPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSBzb2FwOkVudmVsb3BlLCBzb2FwOkhlYWRlciwgYW5kIHNvYXA6Qm9keSBlbGVtZW50cyBkbyBub3QgaGF2ZSBhbnkgYXR0cmlidXRlcyBpbiB0aGUgbmFtZXNwYWNlICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyI8L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAxMDMyIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlAxMDMyKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gR2V0dGluZyBhIG1lc3NhZ2UgZG9jdW1lbnQKLSAgICAgIERvY3VtZW50IGRvYyA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpOwotCi0gICAgICAvLyBJZiB0aGUgbWVzc2FnZSBpcyBlbXB0eSBvciBpbnZhbGlkLCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAoZG9jID09IG51bGwpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIEdldHRpbmcgYSByb290IGVsZW1lbnQKLSAgICAgIEVsZW1lbnQgZWxlbWVudCA9IGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKTsKLQotICAgICAgLy8gQXNzdW1pbmcgdGhhdCByb290IGVsZW1lbnQgc2hvdWxkIGJlIHNvYXA6RW52ZWxvcGUKLSAgICAgIC8vIElmIG5vdCwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKCFlbGVtZW50LmdldExvY2FsTmFtZSgpLmVxdWFscyhYTUxVdGlscy5TT0FQX0VMRU1fRU5WRUxPUEUpKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotCi0gICAgICAvLyBsb29raW5nIGZvciBhbnkgYXR0cmlidXRlIG9mIHNvYXA6RW52ZWxvcGUgaW4gdGhlIG5hbWVzcGFjZQotICAgICAgLy8gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIgotICAgICAgLy8gSWYgYXQgbGVhc3Qgb25lIGF0dHJpYnV0ZSBpcyBmb3VuZCwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgIEF0dHIgYXR0ciA9IGdldEF0dHJpYnV0ZShlbGVtZW50LmdldEF0dHJpYnV0ZXMoKSk7Ci0gICAgICBpZiAoYXR0ciAhPSBudWxsKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigic29hcDpFbnZlbG9wZSBhdHRyaWJ1dGUgbmFtZSBpcyAiCi0gICAgICAgICAgKyBhdHRyLmdldE5hbWUoKSk7Ci0KLSAgICAgIC8vIEdldHRpbmcgdGhlIGZpcnN0IGNoaWxkIG9mIHNvYXA6RW52ZWxvcGUKLSAgICAgIGVsZW1lbnQgPSBYTUxVdGlscy5nZXRGaXJzdENoaWxkKGVsZW1lbnQpOwotCi0gICAgICAvLyBJZiB0aGUgY2hpbGQgaXMgc29hcDpIZWFkZXIKLSAgICAgIGlmIChlbGVtZW50ICE9IG51bGwKLSAgICAgICAgJiYgZWxlbWVudC5nZXRMb2NhbE5hbWUoKS5lcXVhbHMoWE1MVXRpbHMuU09BUF9FTEVNX0hFQURFUikpCi0gICAgICB7Ci0gICAgICAgIC8vIGxvb2tpbmcgZm9yIGFueSBhdHRyaWJ1dGUgb2Ygc29hcDpIZWFkZXIgaW4gdGhlIG5hbWVzcGFjZQotICAgICAgICAvLyAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8iCi0gICAgICAgIC8vIElmIGF0IGxlYXN0IG9uZSBhdHRyaWJ1dGUgaXMgZm91bmQsIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgIGF0dHIgPSBnZXRBdHRyaWJ1dGUoZWxlbWVudC5nZXRBdHRyaWJ1dGVzKCkpOwotICAgICAgICBpZiAoYXR0ciAhPSBudWxsKQotICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJzb2FwOkhlYWRlciBhdHRyaWJ1dGUgbmFtZSBpcyAiCi0gICAgICAgICAgICArIGF0dHIuZ2V0TmFtZSgpKTsKLQotICAgICAgICAvLyBNb3ZpbmcgdG8gdGhlIG5leHQgc29hcDpFbnZlbG9wZSBjaGlsZAotICAgICAgICBlbGVtZW50ID0gWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcoZWxlbWVudCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIElmIHRoZSBjaGlsZCBpcyBzb2FwOkJvZHkKLSAgICAgIGlmIChlbGVtZW50ICE9IG51bGwKLSAgICAgICAgJiYgZWxlbWVudC5nZXRMb2NhbE5hbWUoKS5lcXVhbHMoWE1MVXRpbHMuU09BUF9FTEVNX0JPRFkpKQotICAgICAgewotICAgICAgICAvLyBsb29raW5nIGZvciBhbnkgYXR0cmlidXRlIG9mIHNvYXA6Qm9keSBpbiB0aGUgbmFtZXNwYWNlCi0gICAgICAgIC8vICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyIKLSAgICAgICAgLy8gSWYgYXQgbGVhc3Qgb25lIGF0dHJpYnV0ZSBpcyBmb3VuZCwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgYXR0ciA9IGdldEF0dHJpYnV0ZShlbGVtZW50LmdldEF0dHJpYnV0ZXMoKSk7Ci0gICAgICAgIGlmIChhdHRyICE9IG51bGwpCi0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oInNvYXA6Qm9keSBhdHRyaWJ1dGUgbmFtZSBpcyAiCi0gICAgICAgICAgICArIGF0dHIuZ2V0TmFtZSgpKTsKLSAgICAgIH0KLQotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBhbmFlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGFmZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgYWZlLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotICAvKioKLSAgICogTG9va3MgZm9yIGFuIGF0dHJpYnV0ZSB0aGF0IGlzIGluIHRoZSBuYW1lc3BhY2UKLSAgICogaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8KLSAgICogQHBhcmFtIGF0dHJzIGEgY29sbGVjdGlvbiBvZiBhdHRyaWJ1dGVzCi0gICAqIEByZXR1cm4gYW4gYXR0cmlidXRlIGluIHRoZSBzcGVjaWZpZWQgbmFtZXNwYWNlIG9yIG51bGwKLSAgICovCi0gIHByaXZhdGUgQXR0ciBnZXRBdHRyaWJ1dGUoTmFtZWROb2RlTWFwIGF0dHJzKQotICB7Ci0gICAgQXR0ciByZXQgPSBudWxsOwotICAgIGlmIChhdHRycyAhPSBudWxsKQotICAgIHsKLSAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBhdHRycy5nZXRMZW5ndGgoKTsgaSsrKQotICAgICAgewotICAgICAgICBBdHRyIGF0dHIgPSAoQXR0cikgYXR0cnMuaXRlbShpKTsKLSAgICAgICAgaWYgKGF0dHIuZ2V0TmFtZXNwYWNlVVJJKCkgIT0gbnVsbAotICAgICAgICAgICYmIGF0dHIuZ2V0TmFtZXNwYWNlVVJJKCkuZXF1YWxzKFdTSUNvbnN0YW50cy5OU19VUklfU09BUCkpCi0gICAgICAgIHsKLSAgICAgICAgICByZXQgPSBhdHRyOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJldDsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMDMzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTAzMy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMmVjOGExLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMDMzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0vKioKLSAqIEJQMTAzMwotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBlbnZlbG9wZTwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgU09BUCBlbnZlbG9wZSBkb2VzIG5vdCBjb250YWluIHRoZSBuYW1lc3BhY2UgZGVjbGFyYXRpb24geG1sbnM6eG1sPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDEwMzMgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEwMzMoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gR2V0dGluZyBhIG1lc3NhZ2UgZG9jdW1lbnQKLSAgICAgIERvY3VtZW50IGRvYyA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpOwotICAgICAgLy8gSWYgdGhlIG1lc3NhZ2UgaXMgZW1wdHkgb3IgaW52YWxpZCwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGRvYyA9PSBudWxsKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBHZXR0aW5nIHRoZSByb290IGVsZW1lbnQKLSAgICAgIEVsZW1lbnQgZWxlbSA9IGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKTsKLSAgICAgIC8vIElmIGl0IGlzIG5vdCB0aGUgc29hcDpFbnZlbG9wZSwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKCFlbGVtLmdldE5hbWVzcGFjZVVSSSgpLmVxdWFscyhXU0lDb25zdGFudHMuTlNfVVJJX1NPQVApCi0gICAgICAgIHx8ICFlbGVtLmdldExvY2FsTmFtZSgpLmVxdWFscyhYTUxVdGlscy5TT0FQX0VMRU1fRU5WRUxPUEUpKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBJZiB0aGUgZW52ZWxvcGUgY29udGFpbnMgdGhlIHhtbG5zOnhtbCBuYW1lc3BhY2UgZGVjbGFyYXRpb24sCi0gICAgICAvLyB0aGUgYXNzZXJ0aW9uIGZhaWxlZAotICAgICAgU3RyaW5nIGluY29ycmVjdEVsZW1lbnROYW1lID0gZ2V0SW5jb3JyZWN0RWxlbWVudE5hbWUoZWxlbSk7Ci0gICAgICBpZiAoaW5jb3JyZWN0RWxlbWVudE5hbWUgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSBuYW1lIG9mIGFuIGVsZW1lbnQgY29udGFpbmluZyAiCi0gICAgICAgICAgKyAic3VjaCBuYW1lc3BhY2UgZGVjbGFyYXRpb24gaXMgXCIiICsgaW5jb3JyZWN0RWxlbWVudE5hbWUgKyAiXCIuIik7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGFuYWUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gYWZlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfV0FSTklORzsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgYWZlLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qKgotICAgKiBMb29rcyBmb3IgYW55IGVsZW1lbnQgdGhhdCBjb250YWlucyB0aGUgYXR0cmlidXRlIHhtbG5zOnhtbD0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIi4gCi0gICAqIEBwYXJhbSBlbGVtIHRoZSByb290IGVsZW1lbnQuCi0gICAqIEByZXR1cm4gdGhlIG5hbWUgb2YgYW4gZWxlbWVudCBmb3VuZCBvciBudWxsLgotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0SW5jb3JyZWN0RWxlbWVudE5hbWUoRWxlbWVudCBlbGVtKQotICB7Ci0gICAgLy8gR2V0dGluZyBhIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgeG1sbnM6eG1sCi0gICAgU3RyaW5nIGF0dHJWYWx1ZSA9IGVsZW0uZ2V0QXR0cmlidXRlTlMoCi0gICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1hNTE5TLCAieG1sIik7Ci0gICAgLy8gSWYgaXQgZXF1YWxzIHRvICJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLAotICAgIC8vIHJldHVybiBhbiBlbGVtZW50IG5hbWU7Ci0gICAgaWYgKFdTSUNvbnN0YW50cy5OU19VUklfWE1MLmVxdWFscyhhdHRyVmFsdWUpKQotICAgIHsKLSAgICAgIHJldHVybiBlbGVtLmdldE5vZGVOYW1lKCk7Ci0gICAgfQotICAgIC8vIEdvaW5nIHRocm91Z2ggZWxlbWVudCdzIGNoaWxkcmVuCi0gICAgRWxlbWVudCBjaGlsZCA9IFhNTFV0aWxzLmdldEZpcnN0Q2hpbGQoZWxlbSk7Ci0gICAgd2hpbGUgKGNoaWxkICE9IG51bGwpCi0gICAgewotICAgICAgLy8gSWYgYW55IG9mIHRoZW0gaGFzIHhtbG5zOnhtbCBhdHRyaWJ1dGUsIHJldHVybiBhIHZhbHVlCi0gICAgICBTdHJpbmcgbmFtZSA9IGdldEluY29ycmVjdEVsZW1lbnROYW1lKGNoaWxkKTsKLSAgICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBuYW1lOwotICAgICAgfQotICAgICAgLy8gR2V0dGluZyB0aGUgbmV4dCBlbGVtZW50J3MgY2hpbGQKLSAgICAgIGNoaWxkID0gWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcoY2hpbGQpOwotICAgIH0KLSAgICAvLyBObyB4bWxuczp4bWwgYXR0cmlidXRlcyBmb3VuZCwgcmV0dXJuIG51bGwKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMTAwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTEwMC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMmJhZDcyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMTAwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotCi0vKioKLSAqIEJQMTEwMC4KLSAqIEEgbWVzc2FnZSB0aGF0IGRvZXMgbm90IGNvbnRhaW4gYSBTT0FQIGZhdWx0IFNIT1VMRCB1c2UgYSAiMjAwIE9LIiAKLSAqIEhUVFAgc3RhdHVzIGNvZGUuCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDExMDAgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDExMDAoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUoVGVzdEFzc2VydGlvbiwgRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBpZiAodGhpcy52YWxpZGF0b3IuaXNPbmVXYXlSZXNwb25zZShlbnRyeUNvbnRleHQpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBsb29rIGZvciA8c29hcDpGYXVsdD4gZWxlbWVudDoKLSAgICAgIERvY3VtZW50IGRvYyA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpOwotICAgICAgaWYgKGRvYyA9PSBudWxsKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBFbGVtZW50IHJvb3QgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICAgIE5vZGVMaXN0IGZhdWx0TGlzdCA9Ci0gICAgICAgICAgcm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKFdTSUNvbnN0YW50cy5OU19VUklfU09BUCwgIkZhdWx0Iik7Ci0KLSAgICAgICAgLy8gSWYgcmVzcG9uc2UgZG9lcyBub3QgY29udGFpbiBhIHNvYXA6RmF1bHQsIHRoZW4gY2hlY2sgaXQKLSAgICAgICAgaWYgKChmYXVsdExpc3QgPT0gbnVsbCkgfHwgKGZhdWx0TGlzdC5nZXRMZW5ndGgoKSA9PSAwKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIFJlc3BvbnNlIGRvZXMgbm90IGNvbnRhaW4gYSBzb2FwOkZhdWx0Ci0gICAgICAgICAgLy8gY2hlY2sgSFRUUCBzdGF0dXMgY29kZQotICAgICAgICAgIFN0cmluZyBodHRwU3RhdHVzID0KLSAgICAgICAgICAgIFV0aWxzLmdldEhUVFBTdGF0dXNDb2RlKAotICAgICAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0SFRUUEhlYWRlcnMoKSk7Ci0gICAgICAgICAgaWYgKCEiMjAwIi5lcXVhbHMoaHR0cFN0YXR1cykpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9XQVJOSU5HOwotICAgICAgICAgICAgLy9mYWlsdXJlRGV0YWlsTWVzc2FnZSA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRNZXNzYWdlKCk7Ci0gICAgICAgICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgICAgICAgdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgICAgICAgICAiXG5SZXNwb25zZSBtZXNzYWdlOlxuSGVhZGVyczpcbiIKLSAgICAgICAgICAgICAgICAgICsgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldEhUVFBIZWFkZXJzKCkKLSAgICAgICAgICAgICAgICAgICsgIlxuTWVzc2FnZTpcbiIKLSAgICAgICAgICAgICAgICAgICsgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKSwKLSAgICAgICAgICAgICAgICBlbnRyeUNvbnRleHQpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIGl0IGlzIGEgc29hcDpGYXVsdCwgdGhlbiB0aGUgcmVzdWx0IG11c3QgYmUgbm90QXBwbGljYWJsZQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDExMDcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMTA3LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExYzg2OTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDExMDcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IGphdmF4LndzZGwuRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQRmF1bHQ7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5OdWxsVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5PcGVyYXRpb25TaWduYXR1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVHlwZXNSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5XU0RMVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogQlAxMTA3LgotICogVGhlIGNvbnRhaW5lZCBzb2FwYmluZDpmYXVsdCBpcyBkZWZpbmVkIGluIHRoZSB3c2RsOmJpbmRpbmcuCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDExMDcgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzVmlzaXRvcgotewotCi0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDExMDcoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHByaXZhdGUgT3BlcmF0aW9uU2lnbmF0dXJlIHJlc3BvbnNlU2lnID0gbnVsbDsKLSAgcHJpdmF0ZSBWZWN0b3IgZmF1bHRzID0gbnVsbDsKLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KFNPQVBGYXVsdCwgT2JqZWN0LCBXU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KFNPQVBGYXVsdCBmYXVsdCwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgU3RyaW5nIGZhdWx0TmFtZSA9IGZhdWx0LmdldE5hbWUoKTsKLQotICAgIGlmIChmYXVsdE5hbWUgPT0gbnVsbCkKLSAgICAgIGZhdWx0TmFtZSA9IGN0eC5nZXRCaW5kaW5nRmF1bHQoKS5nZXROYW1lKCk7Ci0KLSAgICBPcGVyYXRpb24gb3AgPSBjdHguZ2V0QmluZGluZ09wZXJhdGlvbigpLmdldE9wZXJhdGlvbigpOwotICAgIGlmIChvcCA9PSBudWxsIC8qIHx8IGZhdWx0TmFtZSA9PSBudWxsKi8KLSAgICAgICkgLy8gbWF5IGJlIGl0J3MgcG9zc2libGUgdG8gaGF2ZSBsZWdhbCBmYXVsdCB3aXRoIG51bGwgbmFtZQotICAgICAgcmV0dXJuOwotCi0gICAgLy8gd2Ugc3VwcG9zZSB0aGF0IFNPQVBGYXVsdC5nZXROYW1lKCkgY29ycmVzcG9uZHMgdG8gdGhlIGFic3RyYWN0IG9wZXJhdGlvbidzIGZhdWx0IG5hbWUgICAgICAgICAgIAotICAgIEZhdWx0IGYgPSBvcC5nZXRGYXVsdChmYXVsdE5hbWUpOwotICAgIGlmIChmID09IG51bGwpCi0gICAgICByZXR1cm47Ci0KLSAgICBNZXNzYWdlIG0gPSBmLmdldE1lc3NhZ2UoKTsKLSAgICAvLyBtZXNzYWdlIHNob3VsZCBoYXZlIG9ubHkgb25lIHBhcnQKLSAgICBpZiAobSA9PSBudWxsIHx8IG0uZ2V0UGFydHMoKSA9PSBudWxsIHx8IG0uZ2V0UGFydHMoKS5zaXplKCkgIT0gMSkKLSAgICAgIHJldHVybjsKLQotICAgIC8vUGFydCBmYXVsdFBhcnQgPSBXU0RMVXRpbC5nZXRQYXJ0KG0sIGZhdWx0TmFtZSk7Ci0gICAgUGFydCBmYXVsdFBhcnQgPSAoUGFydCkgbS5nZXRQYXJ0cygpLnZhbHVlcygpLml0ZXJhdG9yKCkubmV4dCgpOwotCi0gICAgVHlwZXNSZWdpc3RyeSB0UmVnID0gKFR5cGVzUmVnaXN0cnkpIGN0eC5nZXRQYXJhbWV0ZXIoIlR5cGVzUmVnaXN0cnkiKTsKLSAgICBRTmFtZSBlbGVtUU5hbWUgPSBmYXVsdFBhcnQuZ2V0RWxlbWVudE5hbWUoKTsKLSAgICBRTmFtZSB0eXBlUU5hbWUgPSBmYXVsdFBhcnQuZ2V0VHlwZU5hbWUoKTsKLSAgICBpZiAodHlwZVFOYW1lID09IG51bGwpCi0gICAgICB0eXBlUU5hbWUgPSB0UmVnLmdldFR5cGUoZmF1bHRQYXJ0LmdldEVsZW1lbnROYW1lKCkpOwotICAgIGlmICh0eXBlUU5hbWUgPT0gbnVsbCkKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlBhcnQgdHlwZSBjYW4gbm90IGJlIG51bGwuIik7Ci0KLSAgICAvLyBmb3IgYWxsIGZhdWx0czsgaWYgaXQgcHJlc2VudHMgaW4gdGhlIGRlZmluaXRpb24gcmVtb3ZlIGl0IGZyb20gbGlzdAotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmF1bHRzLnNpemUoKTspCi0gICAgewotICAgICAgRWxlbWVudCBlbGVtID0gKEVsZW1lbnQpIGZhdWx0cy5nZXQoaSk7Ci0KLSAgICAgIC8vIFRPRE86IEkgZG9uJ3QgdW5kZXJzdGFuZCB3aHkgdGhpcyBpcyBoZXJlLiAgT25seSB0aGUgZWxlbWVudCBzZXR0aW5nIHNob3VsZCBiZSBjaGVja2VkLiAKLSAgICAgIC8vYm9vbGVhbiBtYXRjaEJ5VHlwZSA9Ci0gICAgICAvLyAgZWxlbS5nZXRMb2NhbE5hbWUoKS5lcXVhbHModHlwZVFOYW1lLmdldExvY2FsUGFydCgpKSAmJiBOdWxsVXRpbC5lcXVhbHMoZWxlbS5nZXROYW1lc3BhY2VVUkkoKSwgdHlwZVFOYW1lLmdldE5hbWVzcGFjZVVSSSgpKTsKLQotICAgICAgYm9vbGVhbiBtYXRjaEJ5RWxlbWVudCA9Ci0gICAgICAgIGVsZW1RTmFtZSAhPSBudWxsCi0gICAgICAgICAgJiYgZWxlbS5nZXRMb2NhbE5hbWUoKS5lcXVhbHMoZWxlbVFOYW1lLmdldExvY2FsUGFydCgpKQotICAgICAgICAgICYmIE51bGxVdGlsLmVxdWFscygKLSAgICAgICAgICAgIGVsZW0uZ2V0TmFtZXNwYWNlVVJJKCksCi0gICAgICAgICAgICBlbGVtUU5hbWUuZ2V0TmFtZXNwYWNlVVJJKCkpOwotCi0gICAgICAvL2lmIChtYXRjaEJ5VHlwZSB8fCBtYXRjaEJ5RWxlbWVudCkKLSAgICAgIGlmIChtYXRjaEJ5RWxlbWVudCkKLSAgICAgICAgZmF1bHRzLnJlbW92ZShpKTsKLSAgICAgIGVsc2UKLSAgICAgICAgaSsrOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUoVGVzdEFzc2VydGlvbiwgRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIGlmICh0aGlzLnZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIFBhcnNlIHJlcXVlc3QgYW5kIHJlc3BvbnNlIG1lc3NhZ2UKLSAgICAgIERvY3VtZW50IGRvY1JlcXVlc3QgPSBlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdERvY3VtZW50KCk7Ci0gICAgICBEb2N1bWVudCBkb2NSZXNwb25zZSA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpOwotCi0gICAgICBpZiAoKGRvY1JlcXVlc3QgPT0gbnVsbCkgfHwgKGRvY1Jlc3BvbnNlID09IG51bGwpKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoIXRoaXMudmFsaWRhdG9yLmlzRmF1bHQoZG9jUmVzcG9uc2UpKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBjcmVhdGUgcmVxdWVzdCBzaWduYXR1cmUKLSAgICAgICAgT3BlcmF0aW9uU2lnbmF0dXJlLk9wZXJhdGlvbk1hdGNoIG1hdGNoID0KLSAgICAgICAgICBPcGVyYXRpb25TaWduYXR1cmUubWF0Y2hPcGVyYXRpb24oCi0gICAgICAgICAgICBkb2NSZXF1ZXN0LAotICAgICAgICAgICAgdGhpcy52YWxpZGF0b3IuZ2V0U29hcEFjdGlvbihlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdCgpLmdldEhUVFBIZWFkZXJzKCkpLAotICAgICAgICAgICAgdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dC5nZXRDYW5kaWRhdGVJbmZvKCkuZ2V0QmluZGluZ3MoKVswXSwKLSAgICAgICAgICAgIG5ldyBUeXBlc1JlZ2lzdHJ5KAotICAgICAgICAgICAgICAgIHZhbGlkYXRvci5hbmFseXplckNvbnRleHQKLSAgICAgICAgICAgICAgICAuZ2V0Q2FuZGlkYXRlSW5mbygpCi0gICAgICAgICAgICAgICAgLmdldFdzZGxEb2N1bWVudCgpCi0gICAgICAgICAgICAgICAgLmdldERlZmluaXRpb25zKCksCi0gICAgICAgICAgICAgICAgdmFsaWRhdG9yKSk7Ci0KLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLQotICAgICAgICBpZiAobWF0Y2ggIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIC8vIE1PVkVEOiBQYXJzZSByZXNwb25zZSBtZXNzYWdlCi0gICAgICAgICAgLy9kb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLQotICAgICAgICAgIHJlc3BvbnNlU2lnID0gbmV3IE9wZXJhdGlvblNpZ25hdHVyZShkb2NSZXNwb25zZSk7Ci0gICAgICAgICAgaWYgKFdTSUNvbnN0YW50cwotICAgICAgICAgICAgLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX1JQQwotICAgICAgICAgICAgLmVxdWFscyhtYXRjaC5nZXRPcGVyYXRpb25TdHlsZSgpKSkKLSAgICAgICAgICAgIHJlc3BvbnNlU2lnLmNyZWF0ZVJQQ1NpZ25hdHVyZSgpOwotCi0gICAgICAgICAgV1NETFRyYXZlcnNhbCB0cmF2ZXJzYWwgPSBuZXcgV1NETFRyYXZlcnNhbCgpOwotICAgICAgICAgIC8vVmlzaXRvckFkYXB0b3IuYWRhcHQodGhpcyk7Ci0gICAgICAgICAgdHJhdmVyc2FsLnNldFZpc2l0b3IodGhpcyk7Ci0gICAgICAgICAgdHJhdmVyc2FsLnZpc2l0U09BUEZhdWx0KHRydWUpOwotICAgICAgICAgIHRyYXZlcnNhbC5pZ25vcmVCaW5kaW5nSW5wdXQoKTsKLSAgICAgICAgICB0cmF2ZXJzYWwuaWdub3JlQmluZGluZ091dHB1dCgpOwotCi0gICAgICAgICAgaWYgKHJlc3BvbnNlU2lnID09IG51bGwgfHwgIXJlc3BvbnNlU2lnLmlzRmF1bHQoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIGlmIChyZXNwb25zZVNpZyAhPSBudWxsICYmIHJlc3BvbnNlU2lnLmlzRmF1bHQoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBleHRyYWN0IGFsbCBmYXVsdHMgYW5kIHRyeSBmaW5kIHRoZW0gaW4gdGhlIGRlZmluaXRpb24KLSAgICAgICAgICAgIC8vIGV4dHJhY3RzIG9ubHkgZmF1bHRzIHdpdGggbmFtZXNwYWNlCi0gICAgICAgICAgICBFbGVtZW50IGJvZHkgPQotICAgICAgICAgICAgICBYTUxVdGlscy5maW5kQ2hpbGRFbGVtZW50KAotICAgICAgICAgICAgICAgIGRvY1Jlc3BvbnNlLmdldERvY3VtZW50RWxlbWVudCgpLAotICAgICAgICAgICAgICAgIFdTSVRhZy5FTEVNX1NPQVBfQk9EWSk7Ci0gICAgICAgICAgICBFbGVtZW50IGZhdWx0ID0KLSAgICAgICAgICAgICAgWE1MVXRpbHMuZmluZENoaWxkRWxlbWVudChib2R5LCBXU0lUYWcuRUxFTV9TT0FQX0ZBVUxUKTsKLSAgICAgICAgICAgIEVsZW1lbnQgZGV0YWlsID0gWE1MVXRpbHMuZ2V0RWxlbWVudCgiZGV0YWlsIiwgZmF1bHQpOwotICAgICAgICAgICAgaWYgKGRldGFpbCA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgICAgICAgICAgICBmYXVsdHMgPSBYTUxVdGlscy5nZXRDaGlsZEVsZW1lbnRzKGRldGFpbCk7Ci0KLSAgICAgICAgICAgICAgLy8gUkVNT1ZFOiBXaHkgZG8gdGhlIGZhdWx0cyBoYXZlIHRvIGJlIG5hbWVzcGFjZWQgcXVhbGlmaWVkPwotICAgICAgICAgICAgICAvL1hNTFV0aWxzLnJlbW92ZUFsbEVsZW1lbnRzV2l0aG91dE5TKGZhdWx0cyk7Ci0KLSAgICAgICAgICAgICAgLy8gaWYgZmF1bHRzIGV4aXN0IHRyeSB0byB2YWxpZGF0ZSBpdAotICAgICAgICAgICAgICBpZiAoZmF1bHRzLnNpemUoKSA+IDApCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBNYXAgbSA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgICAgICAgICAgICAgV1NETFV0aWwuZXhwYW5kRGVmaW5pdGlvbigKLSAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dAotICAgICAgICAgICAgICAgICAgICAuZ2V0Q2FuZGlkYXRlSW5mbygpCi0gICAgICAgICAgICAgICAgICAgIC5nZXRXc2RsRG9jdW1lbnQoKQotICAgICAgICAgICAgICAgICAgICAuZ2V0RGVmaW5pdGlvbnMoKSk7Ci0gICAgICAgICAgICAgICAgbS5wdXQoCi0gICAgICAgICAgICAgICAgICAiZGVmaW5pdGlvbiIsCi0gICAgICAgICAgICAgICAgICB2YWxpZGF0b3IuYW5hbHl6ZXJDb250ZXh0Ci0gICAgICAgICAgICAgICAgICAgIC5nZXRDYW5kaWRhdGVJbmZvKCkKLSAgICAgICAgICAgICAgICAgICAgLmdldFdzZGxEb2N1bWVudCgpCi0gICAgICAgICAgICAgICAgICAgIC5nZXREZWZpbml0aW9ucygpKTsKLSAgICAgICAgICAgICAgICBUeXBlc1JlZ2lzdHJ5IHRSZWcgPQotICAgICAgICAgICAgICAgICAgbmV3IFR5cGVzUmVnaXN0cnkoCi0gICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dAotICAgICAgICAgICAgICAgICAgICAgIC5nZXRDYW5kaWRhdGVJbmZvKCkKLSAgICAgICAgICAgICAgICAgICAgICAuZ2V0V3NkbERvY3VtZW50KCkKLSAgICAgICAgICAgICAgICAgICAgICAuZ2V0RGVmaW5pdGlvbnMoKSwKLSAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3IpOwotICAgICAgICAgICAgICAgIG0ucHV0KCJUeXBlc1JlZ2lzdHJ5IiwgdFJlZyk7Ci0gICAgICAgICAgICAgICAgdHJhdmVyc2FsLnRyYXZlcnNlKG1hdGNoLmdldE9wZXJhdGlvbigpLCBtKTsKLSAgICAgICAgICAgICAgICBpZiAoZmF1bHRzLnNpemUoKSA+IDApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9XQVJOSU5HOwotICAgICAgICAgICAgICAgICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmYXVsdHMuc2l6ZSgpOyBpKyspCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgWE1MVXRpbHMuc2VyaWFsaXplRWxlbWVudCgoRWxlbWVudCkgZmF1bHRzLmdldChpKSwgc3cpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICB0cnkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3cuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGZhaWx1cmVEZXRhaWwgPQotICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgICAgICAgICAgICJcbkZhdWx0czpcbiIgKyBzdy50b1N0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgIGVudHJ5Q29udGV4dCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEyMDEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMjAxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhZjY5MzQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEyMDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiBCUDEyMDEuCi0gKiBUaGUgbmFtZXNwYWNlIG9mIHRoZSBzb2FwOkVudmVsb3BlIGluIHRoZSBtZXNzYWdlIGhhcyB2YWx1ZTogaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8uIAotICovCi1wdWJsaWMgY2xhc3MgQlAxMjAxIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcyBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlAxMjAxKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIERvY3VtZW50IGRvYzsKLSAgICAvLyBDaGVjayBpZiB0aGlzIGlzIG9uZSB3YXkgcmVzcG9uc2Ugb3IgbWVzc2FnZSBpcyBtZXB0eSBvciBpbnZhbGlkCi0gICAgaWYgKHRoaXMudmFsaWRhdG9yLmlzT25lV2F5UmVzcG9uc2UoZW50cnlDb250ZXh0KSB8fAotICAgICAgKGRvYyA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpKSA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBFbGVtZW50IHJvb3QgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICBTdHJpbmcgbnMgPSByb290LmdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgU3RyaW5nIGxvY2FsID0gcm9vdC5nZXRMb2NhbE5hbWUoKTsKLSAgICAgIGlmICghRUxFTV9TT0FQX0VOVkVMT1BFLmdldE5hbWVzcGFjZVVSSSgpLmVxdWFscyhucykpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgIlJvb3QgZWxlbWVudCBoYXMgbmFtZXNwYWNlOiAiICsgbnMsIGVudHJ5Q29udGV4dCk7Ci0gICAgICB9Ci0KLSAgICAgIGVsc2UgaWYgKCFFTEVNX1NPQVBfRU5WRUxPUEUuZ2V0TG9jYWxQYXJ0KCkuZXF1YWxzKGxvY2FsKSkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgICAiUm9vdCBlbGVtZW50IGhhcyBsb2NhbCBuYW1lOiAiICsgbG9jYWwsIGVudHJ5Q29udGV4dCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTIwMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEyMDIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTVhYmVlMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTIwMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotCi0vKioKLSAqIEJQMTIwMi4gCi0gKiBFYWNoIGNoaWxkIGVsZW1lbnQgKGlmIGFueSkgb2YgdGhlIHNvYXA6Qm9keSBlbGVtZW50IGlzIG5hbWVzcGFjZSBxdWFsaWZpZWQgKG5vdCB0aGUgZ3JhbmRjaGlsZHJlbikuCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDEyMDIgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIGltcGxlbWVudHMgV1NJVGFnCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEyMDIoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gUGFyc2UgbG9nIG1lc3NhZ2UgCi0gICAgRG9jdW1lbnQgZG9jID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCk7Ci0KLSAgICBpZiAodmFsaWRhdG9yLmlzT25lV2F5UmVzcG9uc2UoZW50cnlDb250ZXh0KSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIC8vIENoZWNrIGlmIHRoZXJlIGlzIGEgc29hcCBib2R5IGVsZW1lbnQKLSAgICBlbHNlIGlmICghdmFsaWRhdG9yLmNvbnRhaW5zU29hcEJvZHlXaXRoQ2hpbGQoZG9jKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gR2V0IHRoZSByb290IGVsZW1lbnQKLSAgICAgIEVsZW1lbnQgcm9vdCA9IGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKTsKLQotICAgICAgLy8gR2V0IGEgbm9kZSBsaXN0IHdoaWNoIHNob3VsZCBjb250YWluIHRoZSBzb2FwOkJvZHkgZWxlbWVudAotICAgICAgTm9kZUxpc3Qgcm9vdE5vZGVMaXN0ID0gcm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKAotICAgICAgICBFTEVNX1NPQVBfQk9EWS5nZXROYW1lc3BhY2VVUkkoKSwgRUxFTV9TT0FQX0JPRFkuZ2V0TG9jYWxQYXJ0KCkpOwotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgc29hcDpCb2R5IGVsZW1lbnQsCi0gICAgICAvLyB0aGVuIG1ha2Ugc3VyZSB0aGF0IGVhY2ggY2hpbGQgaXMgbmFtZXNwYWNlIHF1YWxpZmllZAotICAgICAgaWYgKHJvb3ROb2RlTGlzdC5nZXRMZW5ndGgoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIC8vIEdldCB0aGUgc29hcDpCb2R5IGVsZW1lbnQKLSAgICAgICAgRWxlbWVudCBib2R5ID0gKEVsZW1lbnQpIHJvb3ROb2RlTGlzdC5pdGVtKDApOwotCi0gICAgICAgIC8vIEdldCB0aGUgbGlzdCBvZiBzb2FwOkJvZHkgY2hpbGQgZWxlbWVudHMgCi0gICAgICAgIE5vZGVMaXN0IGNoaWxkcmVuID0gYm9keS5nZXRDaGlsZE5vZGVzKCk7Ci0KLSAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgZWFjaCBjaGlsZCBlbGVtZW50IGlzIG5hbWVzcGFjZSBxdWFsaWZpZWQKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7Ci0gICAgICAgICAgaSA8IGNoaWxkcmVuLmdldExlbmd0aCgpICYmIHJlc3VsdCA9PSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICAgICAgICArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICBOb2RlIG4gPSBjaGlsZHJlbi5pdGVtKGkpOwotICAgICAgICAgIGlmIChuIGluc3RhbmNlb2YgRWxlbWVudCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgbnMgPSBuLmdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgICAgICAgaWYgKG5zID09IG51bGwgfHwgbnMubGVuZ3RoKCkgPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgICAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEyMDMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMjAzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0NzBhY2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEyMDMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotLyoqCi0gKiBCUDEyMDMuIAotICogVGhlIG5hbWVzcGFjZSBvZiB0aGUgZGV0YWlsIGVsZW1lbnQgb2YgYSBxdWFsaWZpZWQgYXR0cmlidXRlIGluIHRoZSBzb2FwOkZhdWx0IGlzIGEgCi0gKiBmb3JlaWduIG5hbWVzcGFjZSwgZGlmZmVyZW50IGZyb20gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIi4KLSAqLwotcHVibGljIGNsYXNzIEJQMTIwMyBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQMTIwMyhCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBib29sZWFuIHF1YWxpZmllZEF0dHJpYnV0ZXMgPSBmYWxzZTsKLQotICAgIERvY3VtZW50IGRvYzsKLSAgICAvLyBDaGVjayBpZiB0aGlzIGlzIG9uZSB3YXkgcmVzcG9uc2Ugb3IgbWVzc2FnZSBpcyBtZXB0eSBvciBpbnZhbGlkCi0gICAgaWYgKHRoaXMudmFsaWRhdG9yLmlzT25lV2F5UmVzcG9uc2UoZW50cnlDb250ZXh0KQotICAgICAgICB8fCAoZG9jID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCkpID09IG51bGwpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIEFERDogTmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBjaGVjayBpcyByZXF1aXJlZCwgc2luY2UgaXQgc2hvdWxkIGFscmVhZHkgYmUgZG9uZQotICAgICAgLy8gQXBwbGljYWJsZSB0byByZXNwb25zZSBtZXNzYWdlcyBvbmx5Ci0gICAgICBpZiAoZW50cnlDb250ZXh0Ci0gICAgICAgIC5nZXRNZXNzYWdlRW50cnkoKQotICAgICAgICAuZ2V0VHlwZSgpCi0gICAgICAgIC5lcXVhbHNJZ25vcmVDYXNlKE1lc3NhZ2VFbnRyeS5UWVBFX1JFU1BPTlNFKSkKLSAgICAgIHsKLSAgICAgICAgLy8gbG9vayBmb3IgPHNvYXA6RmF1bHQ+IGVsZW1lbnQ6Ci0gICAgICAgIE5vZGVMaXN0IGZhdWx0TGlzdCA9Ci0gICAgICAgICAgZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoCi0gICAgICAgICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1NPQVAsCi0gICAgICAgICAgICBYTUxVdGlscy5TT0FQX0VMRU1fRkFVTFQpOwotICAgICAgICBpZiAoKGZhdWx0TGlzdCA9PSBudWxsKSB8fCAoZmF1bHRMaXN0LmdldExlbmd0aCgpID09IDApKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gUmVzcG9uc2UgZG9lcyBub3QgY29udGFpbiBhIHNvYXA6RmF1bHQKLSAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gd2UgaGF2ZSBhIHNvYXA6RmF1bHQuIAotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBsb29rIGF0IGVhY2ggc29hcDpGYXVsdCBpbiB0dXJuCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZhdWx0TGlzdC5nZXRMZW5ndGgoKTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBFbGVtZW50IHNvYXBGYXVsdCA9IChFbGVtZW50KSBmYXVsdExpc3QuaXRlbShpKTsKLSAgICAgICAgICAgICAgLy8gZmluZCB0aGUgZGV0YWlsIGVsZW1lbnQocykgaWYgYW55Ci0gICAgICAgICAgICAgIE5vZGVMaXN0IGRldGFpbExpc3QgPQotICAgICAgICAgICAgICAgIHNvYXBGYXVsdC5nZXRFbGVtZW50c0J5VGFnTmFtZShYTUxVdGlscy5TT0FQX0VMRU1fRkFVTFRfREVUQUlMKTsKLSAgICAgICAgICAgICAgaWYgKGRldGFpbExpc3QgIT0gbnVsbCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIGZvciBlYWNoIGRldGFpbCBlbGVtZW50Li4uICAgICAJCQkJCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBkZXRhaWxMaXN0LmdldExlbmd0aCgpOyBqKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgTmFtZWROb2RlTWFwIGRldGFpbEF0dHJpYnMgPQotICAgICAgICAgICAgICAgICAgICBkZXRhaWxMaXN0Lml0ZW0oaikuZ2V0QXR0cmlidXRlcygpOwotICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgZm9yIGFueSBxdWFsaWZpZWQgYXR0cmlidXRlcwotICAgICAgICAgICAgICAgICAgaWYgKGRldGFpbEF0dHJpYnMgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBkZXRhaWxBdHRyaWJzLmdldExlbmd0aCgpOyBrKyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICBBdHRyIG5leHRBdHRyID0gKEF0dHIpIChkZXRhaWxBdHRyaWJzLml0ZW0oaykpOwotICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBlYWNoIHF1YWxpZmllZCBhdHRyaWJ1dGUsIGNoZWNrIHRoYXQgCi0gICAgICAgICAgICAgICAgICAgICAgLy8gcW5hbWUgIT0gaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZQotICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0QXR0ci5nZXROYW1lc3BhY2VVUkkoKSAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHF1YWxpZmllZEF0dHJpYnV0ZXMgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRBdHRyCi0gICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXROYW1lc3BhY2VVUkkoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAuZXF1YWxzKFdTSUNvbnN0YW50cy5OU19VUklfU09BUCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvdW5kIHVuZXhwZWN0ZWQgcW5hbWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghcXVhbGlmaWVkQXR0cmlidXRlcykKLSAgICAgICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyB0YXJnZXQgbWVzc2FnZSBpcyBub3QgYSBSZXNwb25zZQotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMjA0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTIwNC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YmY0ODBkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMjA0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5UeXBlczsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25QYXNzRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWVzc2FnZUVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5PcGVyYXRpb25TaWduYXR1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVHlwZXNSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotLyoqCi0gKiBCUDEyMDQuCi0gKiBUaGUgc2VyaWFsaXplZCBhcnJheSBmb3JtIGluIHRoZSBtZXNzYWdlIGRvZXMgbm90IGNvbnRhaW4gdGhlIAotICogc29hcGVuYzphcnJheVR5cGUgYXR0cmlidXRlLgotICogCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDEyMDQgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEyMDQoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUoVGVzdEFzc2VydGlvbiwgRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0KLSAgICAgIGlmICh0aGlzLnZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCkpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIFBhcnNlIG1lc3NhZ2UKLSAgICAgIERvY3VtZW50IGRvYyA9Ci0gICAgICAgIFhNTFV0aWxzLnBhcnNlWE1MKGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRNZXNzYWdlKCkpOwotCi0gICAgICBpZiAodGhpcy52YWxpZGF0b3IuaXNGYXVsdChkb2MpKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBQYXJzZSByZXF1ZXN0IG1lc3NhZ2UKLSAgICAgIERvY3VtZW50IGRvY1JlcXVlc3QgPQotICAgICAgICBYTUxVdGlscy5wYXJzZVhNTChlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdCgpLmdldE1lc3NhZ2UoKSk7Ci0KLSAgICAgIC8vIGdldCBTT0FQQWN0aW9uCi0gICAgICBTdHJpbmcgaGVhZGVycyA9IGVudHJ5Q29udGV4dC5nZXRSZXF1ZXN0KCkuZ2V0SFRUUEhlYWRlcnMoKTsKLSAgICAgIFN0cmluZyBhY3Rpb24gPSBudWxsOwotICAgICAgaWYgKGhlYWRlcnMgIT0gbnVsbCkKLSAgICAgICAgYWN0aW9uID0gKFN0cmluZykgSFRUUFV0aWxzLmdldEh0dHBIZWFkZXJUb2tlbnMoaGVhZGVycywgIjoiKS5nZXQoIlNPQVBBY3Rpb24iLnRvVXBwZXJDYXNlKCkpOwotCi0gICAgICBCaW5kaW5nIGJpbmRpbmcgPSB2YWxpZGF0b3IuYW5hbHl6ZXJDb250ZXh0LmdldENhbmRpZGF0ZUluZm8oKS5nZXRCaW5kaW5ncygpWzBdOwotICAgICAgVHlwZXNSZWdpc3RyeSByZWdpc3RyeSA9Ci0gICAgICAgIG5ldyBUeXBlc1JlZ2lzdHJ5KAotICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmdldFdTRExEb2N1bWVudCgpLmdldERlZmluaXRpb25zKCksCi0gICAgICAgICAgdmFsaWRhdG9yKTsKLSAgICAgIE9wZXJhdGlvblNpZ25hdHVyZS5PcGVyYXRpb25NYXRjaCBtYXRjaCA9Ci0gICAgICAgIE9wZXJhdGlvblNpZ25hdHVyZS5tYXRjaE9wZXJhdGlvbigKLSAgICAgICAgICBkb2NSZXF1ZXN0LAotICAgICAgICAgIGFjdGlvbiwKLSAgICAgICAgICBiaW5kaW5nLAotICAgICAgICAgIHJlZ2lzdHJ5KTsKLQotICAgICAgaWYgKG1hdGNoID09IG51bGwpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25QYXNzRXhjZXB0aW9uKCk7Ci0KLSAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IG1hdGNoLmdldE9wZXJhdGlvbigpOwotCi0gICAgICBNZXNzYWdlIG9wZXJhdGlvbk1lc3NhZ2UgPSBudWxsOwotICAgICAgaWYgKE1lc3NhZ2VFbnRyeQotICAgICAgICAuVFlQRV9SRVFVRVNUCi0gICAgICAgIC5lcXVhbHMoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldFR5cGUoKSkKLSAgICAgICAgJiYgKGJpbmRpbmdPcGVyYXRpb24uZ2V0T3BlcmF0aW9uKCkuZ2V0SW5wdXQoKSAhPSBudWxsKSkKLSAgICAgIHsKLSAgICAgICAgb3BlcmF0aW9uTWVzc2FnZSA9Ci0gICAgICAgICAgYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKS5nZXRJbnB1dCgpLmdldE1lc3NhZ2UoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgaWYgKE1lc3NhZ2VFbnRyeQotICAgICAgICAgIC5UWVBFX1JFU1BPTlNFCi0gICAgICAgICAgLmVxdWFscyhlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0VHlwZSgpKQotICAgICAgICAgICYmIChiaW5kaW5nT3BlcmF0aW9uLmdldE9wZXJhdGlvbigpLmdldE91dHB1dCgpICE9IG51bGwpKQotICAgICAgICB7Ci0gICAgICAgICAgb3BlcmF0aW9uTWVzc2FnZSA9Ci0gICAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLmdldE9wZXJhdGlvbigpLmdldE91dHB1dCgpLmdldE1lc3NhZ2UoKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAob3BlcmF0aW9uTWVzc2FnZSA9PSBudWxsKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbigpOwotCi0gICAgICBib29sZWFuIGlzQ29udGFpbkFycmF5ID0gZmFsc2U7Ci0KLSAgICAgIENvbGxlY3Rpb24gcGFydHMgPSBvcGVyYXRpb25NZXNzYWdlLmdldFBhcnRzKCkudmFsdWVzKCk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGl0ZXIgPSBwYXJ0cy5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIFBhcnQgcGFydCA9IChQYXJ0KSBpdGVyLm5leHQoKTsKLQotICAgICAgICBRTmFtZSB0eXBlID0gbnVsbDsKLQotICAgICAgICBpZiAocGFydC5nZXRUeXBlTmFtZSgpID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICB0eXBlID0gcmVnaXN0cnkuZ2V0VHlwZShwYXJ0LmdldEVsZW1lbnROYW1lKCkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHR5cGUgPSBwYXJ0LmdldFR5cGVOYW1lKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpc0NvbnRhaW5BcnJheSA9Ci0gICAgICAgICAgcmVnaXN0cnkuaXNFeHRlbmRzQXJyYXkodHlwZSkKLSAgICAgICAgICAgIHx8IHJlZ2lzdHJ5LmlzVXNlc1dTRExBcnJheVR5cGUodHlwZSkKLSAgICAgICAgICAgIHx8IGlzQXJyYXlUeXBlKHR5cGUpOwotICAgICAgICBpZiAoaXNDb250YWluQXJyYXkpCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChpc0NvbnRhaW5BcnJheSkKLSAgICAgIHsKLSAgICAgICAgLy8gR2V0cyBib2R5Ci0gICAgICAgIE5vZGVMaXN0IHNvYXBCb2R5TGlzdCA9Ci0gICAgICAgICAgZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoCi0gICAgICAgICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1NPQVAsCi0gICAgICAgICAgICBYTUxVdGlscy5TT0FQX0VMRU1fQk9EWSk7Ci0gICAgICAgIGlmIChzb2FwQm9keUxpc3QuZ2V0TGVuZ3RoKCkgPT0gMCB8fCBzb2FwQm9keUxpc3QuZ2V0TGVuZ3RoKCkgPiAxKQotICAgICAgICB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEVsZW1lbnQgc29hcEJvZHlFbGVtID0gKEVsZW1lbnQpIHNvYXBCb2R5TGlzdC5pdGVtKDApOwotCi0gICAgICAgIE5vZGVMaXN0IHNvYXBCb2R5Q2lsZHJlbkxpc3QgPQotICAgICAgICAgIHNvYXBCb2R5RWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKCIqIiwgIioiKTsKLSAgICAgICAgZm9yIChpbnQgaW5kZXhDaGlsZCA9IDA7Ci0gICAgICAgICAgaW5kZXhDaGlsZCA8IHNvYXBCb2R5Q2lsZHJlbkxpc3QuZ2V0TGVuZ3RoKCk7Ci0gICAgICAgICAgaW5kZXhDaGlsZCsrKQotICAgICAgICB7Ci0gICAgICAgICAgRWxlbWVudCBlbGVtID0gKEVsZW1lbnQpIHNvYXBCb2R5Q2lsZHJlbkxpc3QuaXRlbShpbmRleENoaWxkKTsKLSAgICAgICAgICBpZiAoZWxlbQotICAgICAgICAgICAgLmhhc0F0dHJpYnV0ZU5TKAotICAgICAgICAgICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1NPQVBfRU5DT0RJTkcsCi0gICAgICAgICAgICAgIFdTSUNvbnN0YW50cy5BVFRSX0FSUkFZX1RZUEUpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvblBhc3NFeGNlcHRpb24oKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvblBhc3NFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpLAotICAgICAgICAgIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25QYXNzRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja3Mgd2hldGhlciB0eXBlIHVzZXMgYW4gYXJyYXkgb3Igbm90LgotICAgKiBAcGFyYW0gdHlwZQotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBpc0FycmF5VHlwZShRTmFtZSB0eXBlKQotICB7Ci0gICAgYm9vbGVhbiBhcnJheVR5cGUgPSBmYWxzZTsKLQotICAgIEVsZW1lbnQgdHlwZUVsZW1lbnQgPSBnZXRUeXBlRWxlbWVudCh0eXBlKTsKLSAgICBpZiAodHlwZUVsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBOb2RlTGlzdCBsaXN0ID0KLSAgICAgICAgdHlwZUVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUygKLSAgICAgICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1hTRCwKLSAgICAgICAgICAic2VxdWVuY2UiKTsKLSAgICAgIGlmIChsaXN0LmdldExlbmd0aCgpID4gMCkKLSAgICAgICAgYXJyYXlUeXBlID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYXJyYXlUeXBlOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldHMgWE1MIGVsZW1lbnQgZGVmaW5pbmcgdGhlIHR5cGUuCi0gICAqIEBwYXJhbSB0eXBlCi0gICAqIEByZXR1cm4gRWxlbWVudAotICAgKi8KLSAgcHJpdmF0ZSBFbGVtZW50IGdldFR5cGVFbGVtZW50KFFOYW1lIHR5cGUpCi0gIHsKLSAgICBUeXBlc1tdIGFsbFR5cGVzID0gdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dC5nZXRDYW5kaWRhdGVJbmZvKCkuZ2V0VHlwZXMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgYWxsVHlwZXMgIT0gbnVsbCAmJiBpIDwgYWxsVHlwZXMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgRWxlbWVudCB0eXBlc0VsZW1lbnQgPSBudWxsOwotICAgICAgaWYgKGFsbFR5cGVzW2ldICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHR5cGVzRWxlbWVudCA9IGFsbFR5cGVzW2ldLmdldERvY3VtZW50YXRpb25FbGVtZW50KCk7Ci0gICAgICAgIGlmICh0eXBlc0VsZW1lbnQgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIExpc3QgZXh0TGlzdCA9IGFsbFR5cGVzW2ldLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgICAgIGZvciAoSXRlcmF0b3IgaXRlciA9IGV4dExpc3QuaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7KQotICAgICAgICAgIHsKLSAgICAgICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dEVsZW0gPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGl0ZXIubmV4dCgpOwotCi0gICAgICAgICAgICBpZiAoZXh0RWxlbQotICAgICAgICAgICAgICAuZ2V0RWxlbWVudFR5cGUoKQotICAgICAgICAgICAgICAuZXF1YWxzKG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1hTRCwgInNjaGVtYSIpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgdHlwZXNFbGVtZW50ID0KLSAgICAgICAgICAgICAgICAoKFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCkgZXh0RWxlbSkuZ2V0RWxlbWVudCgpOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHR5cGVzRWxlbWVudCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgTm9kZUxpc3QgY29tcGxleFR5cGVzTGlzdCA9Ci0gICAgICAgICAgICB0eXBlc0VsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUygKLSAgICAgICAgICAgICAgV1NJQ29uc3RhbnRzLk5TX1VSSV9YU0QsCi0gICAgICAgICAgICAgICJjb21wbGV4VHlwZSIpOwotICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgY29tcGxleFR5cGVzTGlzdC5nZXRMZW5ndGgoKTsgaisrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIEVsZW1lbnQgdHlwZUVsZW0gPSAoRWxlbWVudCkgY29tcGxleFR5cGVzTGlzdC5pdGVtKGopOwotICAgICAgICAgICAgaWYgKHR5cGUuZ2V0TG9jYWxQYXJ0KCkuZXF1YWxzKHR5cGVFbGVtLmdldEF0dHJpYnV0ZSgibmFtZSIpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgcmV0dXJuIHR5cGVFbGVtOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEyMDguamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMjA4LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyNmFmOTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEyMDguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFRyYXZlcnNhbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb247Ci0KLQotLyoqCi0gKiBCUDEyMDggTk9UIEZVTExZIFRFU1RFRC4KLSAqLwotcHVibGljIGNsYXNzIEJQMTIwOCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQMTIwOChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBQYXJzZSBsb2cgbWVzc2FnZSAKLSAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLSAgICBpZiAoZG9jID09IG51bGwpIHsKLSAgICAgIC8vbWVzc2FnZSBpcyBlbXB0eSBvciBpbnZhbGlkLCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotCi0gICAgfSBlbHNlIHsKLQotICAgICAgLy8gVHJhdmVyc2UgZG9jdW1lbnQgbG9va2luZyBmb3IgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbnMuCi0gICAgICAvLyBJU1NVRTogdGhpcyBpbm5lciBjbGFzcyBuZWVkcyAuLi4gcmV2aXNpdGluZy9yZXBsYWNpbmcKLSAgICAgIC8vIEVHLiBEbyB3ZSB3YW50IHRvIGxpc3QgYWxsIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zLCAKLSAgICAgIC8vIG9yIGlzIHRoZSBmaXJzdCBzdWZmaWNpZW50PwotICAgICAgWE1MVHJhdmVyc2FsIHRyYXZlcnNhbCA9IG5ldyBYTUxUcmF2ZXJzYWwoKQotICAgICAgewotICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdChQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gcGkpCi0gICAgICAgIHsKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgICAgIGZhaWx1cmVEZXRhaWxNZXNzYWdlID0KLSAgICAgICAgICAgICAgIlRhcmdldDogIiArIHBpLmdldFRhcmdldCgpICsgIiwgRGF0YTogIiArIHBpLmdldERhdGEoKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIEFERDogSG93IHNob3VsZCB0aGlzIGV4Y2VwdGlvbiBiZSBoYW5kbGVkPwotICAgICAgICAgIH0KLQotICAgICAgICAgIHN1cGVyLnZpc2l0KHBpKTsKLSAgICAgICAgfQotICAgICAgfTsKLQotICAgICAgdHJhdmVyc2FsLnZpc2l0KGRvYyk7Ci0KLSAgICAgIGlmIChyZXN1bHQgPT0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQKLSAgICAgICAgJiYgZmFpbHVyZURldGFpbE1lc3NhZ2UgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZmFpbHVyZURldGFpbCA9IHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZmFpbHVyZURldGFpbE1lc3NhZ2UsIGVudHJ5Q29udGV4dCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEyMTEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMjExLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5MTMzYjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEyMTEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5PcGVyYXRpb25TaWduYXR1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVHlwZXNSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC5XU0RMVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxUYWdzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogQlAxMjExLgotICogCi0gKiBDb250ZXh0OiAKLSAqIEZvciBhIGNhbmRpZGF0ZSBtZXNzYWdlIGluIHRoZSBtZXNzYWdlIGxvZyBmaWxlLCB0aGF0IGlzIHJlZmVycmVkIGJ5IGEgYmluZGluZyBzdHlsZSBSUEMtbGl0ZXJhbAotICogCi0gKiBEZXNjcmlwdGlvbjoKLSAqIFBhcnQgYWNjZXNzb3IgZWxlbWVudHMgaW4gdGhlIG1lc3NhZ2UgZG8gbm90IGhhdmUgYW4geHNpOm5pbCBhdHRyaWJ1dGUgd2l0aCBhIHZhbHVlIG9mICIxIiBvciAidHJ1ZSIuCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDEyMTEgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIGltcGxlbWVudHMgWE1MVGFncwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlAxMjExKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKFRlc3RBc3NlcnRpb24sIEVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgaWYgKHZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCkpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIFBhcnNlIG1lc3NhZ2UKLSAgICAgIERvY3VtZW50IGRvYyA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpOwotICAgICAgRG9jdW1lbnQgZG9jUmVxdWVzdCA9IGVudHJ5Q29udGV4dC5nZXRSZXF1ZXN0RG9jdW1lbnQoKTsKLQotICAgICAgRWxlbWVudCBzb2FwT3BlcmF0aW9uID0gbnVsbDsKLSAgICAgIC8vIElmIHRoZXJlIGlzIGEgRmF1bHQgZW50cnkgb3Igbm8gYm9keSBlbnRyaWVzLAotICAgICAgLy8gdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKHZhbGlkYXRvci5pc0ZhdWx0KGRvYykKLSAgICAgICAgfHwgKHNvYXBPcGVyYXRpb24gPSB2YWxpZGF0b3IuZ2V0U29hcEJvZHlDaGlsZChkb2MpKSA9PSBudWxsKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotCi0gICAgICAvLyBHZXQgU09BUEFjdGlvbgotICAgICAgU3RyaW5nIGhlYWRlcnMgPSBlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdCgpLmdldEhUVFBIZWFkZXJzKCk7Ci0gICAgICBTdHJpbmcgYWN0aW9uID0gbnVsbDsKLSAgICAgIGlmIChoZWFkZXJzICE9IG51bGwpCi0gICAgICAgIGFjdGlvbiA9IChTdHJpbmcpIEhUVFBVdGlscy5nZXRIdHRwSGVhZGVyVG9rZW5zKGhlYWRlcnMsICI6IikuZ2V0KCJTT0FQQWN0aW9uIi50b1VwcGVyQ2FzZSgpKTsKLQotICAgICAgLy8gR2V0IHRoZSBiaW5kaW5nIHRoYXQgaXMgYmVpbmcgcHJvY2Vzc2VkICAgICAgICAgICAgICAgIAotICAgICAgQmluZGluZyBiaW5kaW5nID0gdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dC5nZXRDYW5kaWRhdGVJbmZvKCkuZ2V0QmluZGluZ3MoKVswXTsKLQotICAgICAgLy9DcmVhdGUgdGhlIHR5cGVzIHJlZ2lzdHJ5Ci0gICAgICBUeXBlc1JlZ2lzdHJ5IHJlZ2lzdHJ5ID0KLSAgICAgICAgbmV3IFR5cGVzUmVnaXN0cnkoCi0gICAgICAgICAgdGhpcy52YWxpZGF0b3IuZ2V0V1NETERvY3VtZW50KCkuZ2V0RGVmaW5pdGlvbnMoKSwKLSAgICAgICAgICB2YWxpZGF0b3IpOwotCi0gICAgICAvLyBGaW5kIGFuIG9wZXJhdGlvbiBtYXRjaCAgICAgICAgCi0gICAgICBPcGVyYXRpb25TaWduYXR1cmUuT3BlcmF0aW9uTWF0Y2ggbWF0Y2ggPQotICAgICAgICBPcGVyYXRpb25TaWduYXR1cmUubWF0Y2hPcGVyYXRpb24oCi0gICAgICAgICAgZG9jUmVxdWVzdCwKLSAgICAgICAgICBhY3Rpb24sCi0gICAgICAgICAgYmluZGluZywKLSAgICAgICAgICByZWdpc3RyeSk7Ci0gICAgICBpZiAobWF0Y2ggPT0gbnVsbCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgLy8gR2V0IHRoZSBiaW5kaW5nIG9wZXJhdGlvbiBiYXNlZCBvbiB0aGUgbWF0Y2gKLSAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IG1hdGNoLmdldE9wZXJhdGlvbigpOwotCi0gICAgICAvLyBJZiB0aGlzIGlzIG5vdCBycGMtbGl0ZXJhbCwgdGhlbiByZXR1cm4gbm90QXBwbGljYWJsZSByZXN1bHQKLSAgICAgIGlmICghV1NETFV0aWxzCi0gICAgICAgIC5pc1JwY0xpdGVyYWwobWF0Y2guZ2V0T3BlcmF0aW9uU3R5bGUoKSwgYmluZGluZ09wZXJhdGlvbikpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggYWxsIHRoZSBhY2Nlc3NvcnMKLSAgICAgIEVsZW1lbnQgYWNjZXNzb3IgPSBYTUxVdGlscy5nZXRGaXJzdENoaWxkKHNvYXBPcGVyYXRpb24pOwotICAgICAgd2hpbGUgKGFjY2Vzc29yICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIEF0dHIgYXR0ciA9IFhNTFV0aWxzLmdldEF0dHJpYnV0ZShhY2Nlc3NvciwgQVRUUl9YU0lfTklMKTsKLSAgICAgICAgLy8gSWYgdGhlcmUgaXMgeHNpOm5pbCBhdHRyaWJ1dGUgYW5kIGl0cyB2YWx1ZSBpcyAiMSIgb3IgInRydWUiCi0gICAgICAgIC8vIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgIGlmIChhdHRyICE9IG51bGwKLSAgICAgICAgICAmJiAoYXR0ci5nZXRWYWx1ZSgpLmVxdWFscygiMSIpIHx8IGF0dHIuZ2V0VmFsdWUoKS5lcXVhbHMoInRydWUiKSkpCi0gICAgICAgIHsKLSAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIGFjY2Vzc29yIG5hbWUgaXMgIgotICAgICAgICAgICAgKyBhY2Nlc3Nvci5nZXROb2RlTmFtZSgpKTsKLSAgICAgICAgfQotICAgICAgICAvLyBHZXR0aW5nIHRoZSBuZXh0IGFjY2Vzc29yCi0gICAgICAgIGFjY2Vzc29yID0gWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcoYWNjZXNzb3IpOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBhZmUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgIGFmZS5nZXRNZXNzYWdlKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTIxMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEyMTIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGMxZjc3Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTIxMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NZXNzYWdlRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0vKioKLSAqIEJQMTIxMgotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBub24tZmF1bHQgZW52ZWxvcGUgY29udGFpbmluZyBhIHNvYXA6Ym9keSB3aXRoIGF0IGxlYXN0IG9uZSBlbGVtZW50PC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSBlbnZlbG9wZSBjb250YWlucyBleGFjdGx5IG9uZSBwYXJ0IGFjY2Vzc29yIGVsZW1lbnQgZm9yIGVhY2ggb2YgdGhlIHdzZGw6cGFydCBlbGVtZW50cyBib3VuZCB0byB0aGUgZW52ZWxvcGUncyBjb3JyZXNwb25kaW5nIHNvYXBiaW5kOmJvZHkgZWxlbWVudC48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAxMjEyIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcyB7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQMTIxMihCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBpZiAodmFsaWRhdG9yLmlzT25lV2F5UmVzcG9uc2UoZW50cnlDb250ZXh0KSkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgLy8gR2V0dGluZyBhIG1lc3NhZ2UgZG9jdW1lbnQKLSAgICAgIERvY3VtZW50IGRvYyA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpOwotCi0gICAgICBFbGVtZW50IHNvYXBPcGVyYXRpb24gPSBudWxsOwotICAgICAgLy8gSWYgdGhlcmUgaXMgYSBGYXVsdCBlbnRyeSBvciBubyBib2R5IGVudHJpZXMsCi0gICAgICAvLyB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAodmFsaWRhdG9yLmlzRmF1bHQoZG9jKQotICAgICAgICB8fCAoc29hcE9wZXJhdGlvbiA9IHZhbGlkYXRvci5nZXRTb2FwQm9keUNoaWxkKGRvYykpID09IG51bGwpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIENyZWF0aW5nIGEgcXVhbGlmaWVkIG5hbWUgb2YgcG90ZW50aWFsIFNPQVAgb3BlcmF0aW9uCi0gICAgICBRTmFtZSBvcGVyYXRpb25RTmFtZSA9IG5ldyBRTmFtZSgKLSAgICAgICAgc29hcE9wZXJhdGlvbi5nZXROYW1lc3BhY2VVUkkoKSwgc29hcE9wZXJhdGlvbi5nZXRMb2NhbE5hbWUoKSk7Ci0KLSAgICAgIC8vIFJldHJpZXZpbmcgYWxsIHRoZSBSUEMgYmluZGluZyBvcGVyYXRpb25zIGZyb20gd3NkbDpiaW5kaW5nCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uW10gcnBjQmluZGluZ09wZXJhdGlvbnMgPQotICAgICAgICB2YWxpZGF0b3IuZ2V0TWF0Y2hpbmdCaW5kaW5nT3BzKAotICAgICAgICAgIFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9SUEMsCi0gICAgICAgICAgdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dC5nZXRDYW5kaWRhdGVJbmZvKCkuZ2V0QmluZGluZ3MoKSk7Ci0KLSAgICAgIC8vIFJldHJpZXZpbmcgYmluZGluZyBvcGVyYXRpb24gYnkgZ2l2ZW4gb3BlcmF0aW9uIG5hbWUKLSAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IHZhbGlkYXRvci5nZXRPcGVyYXRpb25NYXRjaCgKLSAgICAgICAgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlUeXBlKCksCi0gICAgICAgIG9wZXJhdGlvblFOYW1lLAotICAgICAgICBycGNCaW5kaW5nT3BlcmF0aW9ucyk7Ci0KLSAgICAgIC8vIElmIHRoZXJlIGlzIG5vIG1hdGNoZWQgb3BlcmF0aW9uLCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAoYmluZGluZ09wZXJhdGlvbiA9PSBudWxsKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotCi0gICAgICAvLyBGaW5kaW5nIG9wZXJhdGlvbiBtZXNzYWdlIHBhcnRzIGFuZCBleHRlbnNpYmlsaXR5IGVsZW1zCi0gICAgICAvLyBpbiB0aGUgYmluZGluZyBkZXBlbmRpbmcgb24gbWVzc2FnZSB0eXBlCi0gICAgICBMaXN0IG9wZXJhdGlvbk1lc3NhZ2VQYXJ0cyA9IG51bGw7Ci0gICAgICBMaXN0IGV4dEVsZW1zID0gbnVsbDsKLSAgICAgIGlmIChlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0VHlwZSgpLmVxdWFscygKLSAgICAgICAgTWVzc2FnZUVudHJ5LlRZUEVfUkVRVUVTVCkpCi0gICAgICB7Ci0gICAgICAgIG9wZXJhdGlvbk1lc3NhZ2VQYXJ0cyA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0T3BlcmF0aW9uKCkKLSAgICAgICAgICAuZ2V0SW5wdXQoKS5nZXRNZXNzYWdlKCkuZ2V0T3JkZXJlZFBhcnRzKG51bGwpOwotICAgICAgICBpZiAoYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nSW5wdXQoKSAhPSBudWxsKQotICAgICAgICAgIGV4dEVsZW1zID0KLSAgICAgICAgICAgIGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIG9wZXJhdGlvbk1lc3NhZ2VQYXJ0cyA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0T3BlcmF0aW9uKCkKLSAgICAgICAgICAuZ2V0T3V0cHV0KCkuZ2V0TWVzc2FnZSgpLmdldE9yZGVyZWRQYXJ0cyhudWxsKTsKLSAgICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ091dHB1dCgpICE9IG51bGwpCi0gICAgICAgICAgZXh0RWxlbXMgPQotICAgICAgICAgICAgYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nT3V0cHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIEdldHRpbmcgYWxsIHRoZSBhY2Nlc3NvcnMgb2YgdGhlIG9wZXJhdGlvbiBlbGVtZW50Ci0gICAgICBMaXN0IGFjY2Vzc29ycyA9IFhNTFV0aWxzLmdldENoaWxkRWxlbWVudHMoc29hcE9wZXJhdGlvbik7Ci0gICAgICAvLyBHZXR0aW5nIHRoZSBvcmRlcmVkIGxpc3Qgb2Ygd3NkbDpwYXJ0IG5hbWVzCi0gICAgICBMaXN0IG9yZGVyZWRQYXJ0TmFtZXMgPQotICAgICAgICB2YWxpZGF0b3Iub3JkZXJQYXJ0TmFtZXMob3BlcmF0aW9uTWVzc2FnZVBhcnRzLCBleHRFbGVtcyk7Ci0gICAgICAvLyBHb2luZyB0aHJvdWdoIGFsbCB0aGUgd3NkbDpwYXJ0IG5hbWVzCi0gICAgICBJdGVyYXRvciBpID0gb3JkZXJlZFBhcnROYW1lcy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGkuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBTdHJpbmcgcGFydE5hbWUgPSAoU3RyaW5nKSBpLm5leHQoKTsKLSAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm90IGV4YWN0bHkgb25lIGFjY2Vzc29yIGZvciB0aGUgcGFydCBzcGVjaWZpZWQsCi0gICAgICAgIC8vIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgIGlmIChnZXRQYXJ0c0NvdW50KGFjY2Vzc29ycywgcGFydE5hbWUpICE9IDEpCi0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oCi0gICAgICAgICAgICAiVGhlIG5hbWUgb2Ygd3NkbDpwYXJ0IGlzICIgKyBwYXJ0TmFtZSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGFuYWUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gYWZlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBhZmUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb3VudHMgdGhlIGFtb3VudCBvZiBhY2Nlc3NvcnMgb2YgYSBzcGVjaWZpYyBuYW1lCi0gICAqIEBwYXJhbSBhY2Nlc3NvcnMgYSBsaXN0IG9mIGFjY2Vzc29ycwotICAgKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSBvZiBhY2Nlc3NvciBlbGVtZW50cyB0byBiZSBjb3VudGVkCi0gICAqIEByZXR1cm4KLSAgICovCi0gIHByaXZhdGUgaW50IGdldFBhcnRzQ291bnQoTGlzdCBhY2Nlc3NvcnMsIFN0cmluZyBuYW1lKQotICB7Ci0gICAgaW50IGNvdW50ID0gMDsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWNjZXNzb3JzLnNpemUoKTsgaSsrKQotICAgIHsKLSAgICAgIEVsZW1lbnQgYWNjZXNzb3IgPSAoRWxlbWVudCkgYWNjZXNzb3JzLmdldChpKTsKLSAgICAgIGlmIChhY2Nlc3Nvci5nZXRMb2NhbE5hbWUoKS5lcXVhbHMobmFtZSkpCi0gICAgICAgIGNvdW50Kys7Ci0gICAgfQotCi0gICAgcmV0dXJuIGNvdW50OwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEyMTMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMjEzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1NWQ4NDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEyMTMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NZXNzYWdlRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0vKioKLSAqIEJQMTIxMwotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBub24tZmF1bHQgZW52ZWxvcGUgY29udGFpbmluZyBhIHNvYXA6Qm9keSBlbGVtZW50LCBhbmQgaXMgcmVmZXJyZWQgYnkgYSBkb2MtbGl0ZXJhbCBiaW5kaW5nPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSBlbnZlbG9wZSBoYXMgbm8gZWxlbWVudCBjb250ZW50IGluIHRoZSBzb2FwOkJvZHkgZWxlbWVudCBpZiB0aGUgdmFsdWUgb2YgdGhlIHBhcnRzIGF0dHJpYnV0ZSBvZiB0aGUgc29hcGJpbmQ6Ym9keSBpcyBhbiBlbXB0eSBzdHJpbmcgaW4gdGhlIGNvcnJlc3BvbmRpbmcgZG9jLWxpdGVyYWwgZGVzY3JpcHRpb24uPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEJQMTIxMyBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgewotCi0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEyMTMoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgaWYgKHZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCkpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIEdldHRpbmcgYSBtZXNzYWdlIGRvY3VtZW50Ci0gICAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLQotICAgICAgRWxlbWVudCBtZXNzYWdlRWxlbWVudCA9IG51bGw7Ci0gICAgICAvLyBJZiB0aGUgbWVzc2FnZSBpcyBlbXB0eSBvciBpbnZhbGlkIG9yIHRoZXJlIGlzIGEgRmF1bHQgZW50cnkKLSAgICAgIC8vIG9yIHRoZXJlIGlzIG5vIGJvZHkgZW50cmllcywgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGRvYyA9PSBudWxsCi0gICAgICAgIHx8IHZhbGlkYXRvci5pc0ZhdWx0KGRvYykKLSAgICAgICAgfHwgKG1lc3NhZ2VFbGVtZW50ID0gdmFsaWRhdG9yLmdldFNvYXBCb2R5Q2hpbGQoZG9jKSkgPT0gbnVsbCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgLy8gR2V0dGluZyBhIHF1YWxpZmllZCBuYW1lIG9mIG1lc3NhZ2UgZWxlbWVudAotICAgICAgUU5hbWUgbWVzc2FnZVBhcnRFbGVtZW50UU5hbWUgPSBuZXcgUU5hbWUoCi0gICAgICAgIG1lc3NhZ2VFbGVtZW50LmdldE5hbWVzcGFjZVVSSSgpLCBtZXNzYWdlRWxlbWVudC5nZXRMb2NhbE5hbWUoKSk7Ci0KLSAgICAgIC8vIFJldHJpZXZpbmcgYWxsIHRoZSBkb2N1bWVudCBiaW5kaW5nIG9wZXJhdGlvbnMgZnJvbSB3c2RsOmJpbmRpbmcKLSAgICAgIEJpbmRpbmdPcGVyYXRpb25bXSBkb2NCaW5kaW5nT3BlcmF0aW9ucyA9Ci0gICAgICAgIHZhbGlkYXRvci5nZXRNYXRjaGluZ0JpbmRpbmdPcHMoCi0gICAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQywKLSAgICAgICAgICB2YWxpZGF0b3IuYW5hbHl6ZXJDb250ZXh0LmdldENhbmRpZGF0ZUluZm8oKS5nZXRCaW5kaW5ncygpKTsKLQotICAgICAgLy8gUmV0cmlldmluZyBiaW5kaW5nIG9wZXJhdGlvbiBieSBnaXZlbiBlbGVtZW50IG5hbWUKLSAgICAgIEJpbmRpbmdPcGVyYXRpb25bXSBwb3RlbnRpYWxEb2NMaXRPcHMgPQotICAgICAgICB2YWxpZGF0b3IuZ2V0RG9jTGl0T3BlcmF0aW9ucygKLSAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeVR5cGUoKSwKLSAgICAgICAgICBtZXNzYWdlUGFydEVsZW1lbnRRTmFtZSwKLSAgICAgICAgICBkb2NCaW5kaW5nT3BlcmF0aW9ucyk7Ci0KLSAgICAgIC8vIElmIHRoZXJlIGlzIG5vdCBleGFjdGx5IG9uZSBvcGVyYXRpb24gbWF0Y2hlZCwKLSAgICAgIC8vIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmIChwb3RlbnRpYWxEb2NMaXRPcHMubGVuZ3RoICE9IDEpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIEZpbmRpbmcgb3BlcmF0aW9uIGV4dGVuc2liaWxpdHkgZWxlbXMKLSAgICAgIC8vIGluIHRoZSBiaW5kaW5nIGRlcGVuZGluZyBvbiBtZXNzYWdlIHR5cGUKLSAgICAgIExpc3QgZXh0RWxlbXMgPSBudWxsOwotICAgICAgaWYgKGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRUeXBlKCkuZXF1YWxzKAotICAgICAgICBNZXNzYWdlRW50cnkuVFlQRV9SRVFVRVNUKQotICAgICAgICAmJiBwb3RlbnRpYWxEb2NMaXRPcHNbMF0uZ2V0QmluZGluZ0lucHV0KCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZXh0RWxlbXMgPSBwb3RlbnRpYWxEb2NMaXRPcHNbMF0KLSAgICAgICAgICAuZ2V0QmluZGluZ0lucHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0VHlwZSgpLmVxdWFscygKLSAgICAgICAgTWVzc2FnZUVudHJ5LlRZUEVfUkVTUE9OU0UpCi0gICAgICAgICYmIHBvdGVudGlhbERvY0xpdE9wc1swXS5nZXRCaW5kaW5nT3V0cHV0KCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZXh0RWxlbXMgPSBwb3RlbnRpYWxEb2NMaXRPcHNbMF0KLSAgICAgICAgICAuZ2V0QmluZGluZ091dHB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgfQotCi0gICAgICAvLyBHZXR0aW5nIHRoZSBwYXJ0cyBhdHRyaWJ1dGUgZnJvbSBzb2FwYmluZDpib2R5Ci0gICAgICBMaXN0IHBhcnRzID0gbnVsbDsKLSAgICAgIFNPQVBCb2R5IHNvYXBCb2R5ID0gdmFsaWRhdG9yLmdldFNPQVBCb2R5KGV4dEVsZW1zKTsKLSAgICAgIGlmIChzb2FwQm9keSAhPSBudWxsKQotICAgICAgICBwYXJ0cyA9IHNvYXBCb2R5LmdldFBhcnRzKCk7Ci0KLSAgICAgIC8vIGlmIHRoZSBwYXJ0cyBhdHRyaWJ1dGUgaXMgYW4gZW1wdHkgc3RyaW5nIGFuZCB0aGVyZSBpcwotICAgICAgLy8gYXQgbGVhc3Qgb25lIGFjY2Vzc29yLCB0aGUgYXNzZXJ0aW9uIGZhaWxlZAotICAgICAgaWYgKHBhcnRzICE9IG51bGwgJiYgcGFydHMuaXNFbXB0eSgpCi0gICAgICAgICYmICFYTUxVdGlscy5nZXRDaGlsZEVsZW1lbnRzKG1lc3NhZ2VFbGVtZW50KS5pc0VtcHR5KCkpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJ3c2RsOm9wZXJhdGlvbiBuYW1lIGlzICIKLSAgICAgICAgICArIHBvdGVudGlhbERvY0xpdE9wc1swXS5nZXROYW1lKCkpOwotCi0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGFuYWUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gYWZlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBhZmUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMjE0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTIxNC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZGExMzQ2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMjE0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keTsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWVzc2FnZUVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotLyoqCi0gKiBCUDEyMTQKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgbm9uLWZhdWx0IGVudmVsb3BlIGNvbnRhaW5pbmcgYSBzb2FwOkJvZHkgZWxlbWVudCwgYW5kIGlzIHJlZmVycmVkIGJ5IGEgcnBjLWxpdGVyYWwgYmluZGluZzwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgZW52ZWxvcGUgZG9lcyBub3QgY29udGFpbiBhbnkgcGFydCBhY2Nlc3NvciBlbGVtZW50cyBpZiB0aGUgdmFsdWUgb2YgdGhlIHBhcnRzIGF0dHJpYnV0ZSBvZiB0aGUgc29hcGJpbmQ6Ym9keSBpcyBhbiBlbXB0eSBzdHJpbmcgaW4gdGhlIGNvcnJlc3BvbmRpbmcgcnBjLWxpdGVyYWwgZGVzY3JpcHRpb24uPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEJQMTIxNCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgewotCi0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEyMTQoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgaWYgKHZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCkpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIEdldHRpbmcgYSBtZXNzYWdlIGRvY3VtZW50Ci0gICAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLQotICAgICAgRWxlbWVudCBzb2FwT3BlcmF0aW9uID0gbnVsbDsKLSAgICAgIC8vIElmIHRoZXJlIGlzIGEgRmF1bHQgZW50cnkgb3Igbm8gYm9keSBlbnRyaWVzLAotICAgICAgLy8gdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKHZhbGlkYXRvci5pc0ZhdWx0KGRvYykKLSAgICAgICAgfHwgKHNvYXBPcGVyYXRpb24gPSB2YWxpZGF0b3IuZ2V0U29hcEJvZHlDaGlsZChkb2MpKSA9PSBudWxsKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotCi0gICAgICAvLyBDcmVhdGluZyBhIHF1YWxpZmllZCBuYW1lIG9mIHBvdGVudGlhbCBTT0FQIG9wZXJhdGlvbgotICAgICAgUU5hbWUgb3BlcmF0aW9uUU5hbWUgPSBuZXcgUU5hbWUoCi0gICAgICAgIHNvYXBPcGVyYXRpb24uZ2V0TmFtZXNwYWNlVVJJKCksIHNvYXBPcGVyYXRpb24uZ2V0TG9jYWxOYW1lKCkpOwotCi0gICAgICAvLyBSZXRyaWV2aW5nIGFsbCB0aGUgUlBDIGJpbmRpbmcgb3BlcmF0aW9ucyBmcm9tIHdzZGw6YmluZGluZwotICAgICAgQmluZGluZ09wZXJhdGlvbltdIHJwY0JpbmRpbmdPcGVyYXRpb25zID0KLSAgICAgICAgdmFsaWRhdG9yLmdldE1hdGNoaW5nQmluZGluZ09wcygKLSAgICAgICAgICBXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JJTkRfU1RZTEVfUlBDLAotICAgICAgICAgIHZhbGlkYXRvci5hbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldEJpbmRpbmdzKCkpOwotCi0gICAgICAvLyBSZXRyaWV2aW5nIGJpbmRpbmcgb3BlcmF0aW9uIGJ5IGdpdmVuIG9wZXJhdGlvbiBuYW1lCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSB2YWxpZGF0b3IuZ2V0T3BlcmF0aW9uTWF0Y2goCi0gICAgICAgIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5VHlwZSgpLAotICAgICAgICBvcGVyYXRpb25RTmFtZSwKLSAgICAgICAgcnBjQmluZGluZ09wZXJhdGlvbnMpOwotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBubyBtYXRjaGVkIG9wZXJhdGlvbiwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24gPT0gbnVsbCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgLy8gRmluZGluZyBvcGVyYXRpb24gZXh0ZW5zaWJpbGl0eSBlbGVtcwotICAgICAgLy8gaW4gdGhlIGJpbmRpbmcgZGVwZW5kaW5nIG9uIG1lc3NhZ2UgdHlwZQotICAgICAgTGlzdCBleHRFbGVtcyA9IG51bGw7Ci0gICAgICBpZiAoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldFR5cGUoKS5lcXVhbHMoCi0gICAgICAgIE1lc3NhZ2VFbnRyeS5UWVBFX1JFUVVFU1QpCi0gICAgICAgICYmIGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZXh0RWxlbXMgPQotICAgICAgICAgIGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0VHlwZSgpLmVxdWFscygKLSAgICAgICAgTWVzc2FnZUVudHJ5LlRZUEVfUkVTUE9OU0UpCi0gICAgICAgICYmIGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ091dHB1dCgpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGV4dEVsZW1zID0KLSAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIH0KLQotICAgICAgLy8gSWYgdGhlIG1lc3NhZ2UgaXMgbm90IGxpdGVyYWwsIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmICghdmFsaWRhdG9yLmlzTGl0ZXJhbChleHRFbGVtcykpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIEdldHRpbmcgdGhlIHBhcnRzIGF0dHJpYnV0ZSBmcm9tIHNvYXBiaW5kOmJvZHkKLSAgICAgIExpc3QgcGFydHMgPSBudWxsOwotICAgICAgU09BUEJvZHkgc29hcEJvZHkgPSB2YWxpZGF0b3IuZ2V0U09BUEJvZHkoZXh0RWxlbXMpOwotICAgICAgaWYgKHNvYXBCb2R5ICE9IG51bGwpCi0gICAgICAgIHBhcnRzID0gc29hcEJvZHkuZ2V0UGFydHMoKTsKLQotICAgICAgLy8gaWYgdGhlIHBhcnRzIGF0dHJpYnV0ZSBpcyBhbiBlbXB0eSBzdHJpbmcgYW5kIHRoZXJlIGlzCi0gICAgICAvLyBhdCBsZWFzdCBvbmUgYWNjZXNzb3IsIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICBpZiAocGFydHMgIT0gbnVsbCAmJiBwYXJ0cy5pc0VtcHR5KCkKLSAgICAgICAgJiYgIVhNTFV0aWxzLmdldENoaWxkRWxlbWVudHMoc29hcE9wZXJhdGlvbikuaXNFbXB0eSgpKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigid3NkbDpvcGVyYXRpb24gbmFtZSBpcyAiCi0gICAgICAgICAgKyBiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKSk7Ci0KLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gYW5hZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBhZmUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgIGFmZS5nZXRNZXNzYWdlKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEzMDEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMzAxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyYTIwYzcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEzMDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotCi0vKioKLSAqIEJQMTMwMS4KLSAqLwotcHVibGljIGNsYXNzIEJQMTMwMSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQMTMwMShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIC8vR2V0IHRoZSByZXF1ZXRzIG1lc3NhZ2UgYW5kIGNoZWNrIHRoZSB2YWx1ZSBvZiBtdXN0VW5kZXJzdGFuZC4KLSAgICBTdHJpbmcgbWVzc2FnZSA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRNZXNzYWdlKCk7Ci0gICAgT2JqZWN0W10gbXVzdFVuZGVyc3RhbmRBdHRyaWJ1dGVzID0gZ2V0TXVzdFVuZGVyc3RhbmRBdHRyaWJ1dGVzKG1lc3NhZ2UpOwotCi0gICAgaWYgKG11c3RVbmRlcnN0YW5kQXR0cmlidXRlcyA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgbXVzdFVuZGVyc3RhbmRBdHRyaWJ1dGVzLmxlbmd0aDsgaW5kZXgrKykKLSAgICAgIHsKLSAgICAgICAgaWYgKChtdXN0VW5kZXJzdGFuZEF0dHJpYnV0ZXNbaW5kZXhdICE9IG51bGwpCi0gICAgICAgICAgJiYgKG11c3RVbmRlcnN0YW5kQXR0cmlidXRlc1tpbmRleF0uZXF1YWxzKCIxIikKLSAgICAgICAgICAgIHx8IG11c3RVbmRlcnN0YW5kQXR0cmlidXRlc1tpbmRleF0uZXF1YWxzKCIwIikpKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgICAiVGhlIFNPQVAgbXVzdFVuZGVyc3RhbmQgYXR0cmlidXRlIHdhcyBwcmVzZW50ICIKLSAgICAgICAgICAgICAgICArICIgYW5kIGl0cyB2YWx1ZSB3YXMgICIKLSAgICAgICAgICAgICAgICArIG11c3RVbmRlcnN0YW5kQXR0cmlidXRlc1tpbmRleF0sCi0gICAgICAgICAgICAgIGVudHJ5Q29udGV4dCk7Ci0gICAgICAgIH0gLy9FbmQgaWYKLSAgICAgIH0gLy9FbmQgZm9yCi0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLSAgLy9SZXRyZWl2ZXMgdGhlIHZhbHVlIG9mIHRoZSBtdXN0VW5kZXJzdGFuZCBhdHRyaWJ1dGUgZnJvbSBBTEwgU09BUCBoZWFkZXIKLSAgLy9JZiB0aGUgSGVhZGVyIGlzIG1pc3Npbmcgb3IgaWYgaXQgZG9lcyBub3QgY29udGFpbiBhbnkgdGFyZ2V0cyBvciBpZgotICAvL3RoZSBoZWFkZXIgZG9lcyBub3QgY29udGFpbiBhIG11c3RVbmRlcnN0YW5kIGF0dHJpYnV0ZSB0aGVuIHNldCB0aGUKLSAgLy9hc3NlcnRpb25SZXN1bHQgdG8gUkVTVUxUX05PVF9BUFBMSUNBQkxFLgotICBwcml2YXRlIE9iamVjdFtdIGdldE11c3RVbmRlcnN0YW5kQXR0cmlidXRlcyhTdHJpbmcgbWVzc2FnZSkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBpZiAobWVzc2FnZSA9PSBudWxsIHx8IG1lc3NhZ2UudHJpbSgpLmVxdWFscygiIikpIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIERvY3VtZW50IGRvYyA9IFhNTFV0aWxzLnBhcnNlWE1MKG1lc3NhZ2UpOwotICAgIE5vZGVMaXN0IGhlYWRlcnMgPQotICAgICAgZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQLCAiSGVhZGVyIik7Ci0KLSAgICAvL0lmIGEgaGVhZGVyIG5vdCBwcmVzZW50IHNldCByZXN1bHQgdG8gbm90QXBwbGljYWJsZQotICAgIC8vZWxzZSBwcm9jZXNzIGVhY2ggaGVhZGVyRW50cnkKLSAgICBpZiAoaGVhZGVycy5nZXRMZW5ndGgoKSA8PSAwKQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgVmVjdG9yIG11c3RVbmRlcnN0YW5kQXR0cmlidXRlcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIEVsZW1lbnQgaGVhZGVyID0gKEVsZW1lbnQpIGhlYWRlcnMuaXRlbSgwKTsKLSAgICAgIGlmIChoZWFkZXIgPT0gbnVsbCkKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgIE5vZGVMaXN0IGhlYWRlckVudHJpZXMgPSBoZWFkZXIuZ2V0Q2hpbGROb2RlcygpOwotICAgICAgLy9Gb3IgZWFjaCBoZWFkZXIgZW50cnkgY2hlY2sgcmV0cmVpdmUgdGhlIG11c3RVbmRlcnN0YW5kIGF0dHJpYnV0ZSAKLSAgICAgIC8vaWYgYW55LCBlbHNlIHNldCB0aGUgdGVzdCByZXN1bHQgdG8gbm90QXBwbGljYWJsZQotCi0gICAgICAvL1RoaXMgaXMgdXNlZCB0byBpbmRpY2F0ZSBpZiBhIGhlYWRlciBjb250YWluZWQgYW55IGNoaWxkIEVsZW1lbnRzCi0gICAgICBib29sZWFuIGhlYWRlclRhcmdldHMgPSBmYWxzZTsKLQotICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGhlYWRlckVudHJpZXMuZ2V0TGVuZ3RoKCk7ICsraW5kZXgpCi0gICAgICB7Ci0gICAgICAgIE5vZGUgaGVhZGVyRW50cnkgPSBoZWFkZXJFbnRyaWVzLml0ZW0oaW5kZXgpOwotICAgICAgICBpZiAoaGVhZGVyRW50cnkuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICAgICAgewotICAgICAgICAgIGhlYWRlclRhcmdldHMgPSB0cnVlOwotICAgICAgICAgIEF0dHIgbXVzdFVuZGVyc3RhbmQgPQotICAgICAgICAgICAgKChFbGVtZW50KSBoZWFkZXJFbnRyeSkuZ2V0QXR0cmlidXRlTm9kZU5TKAotICAgICAgICAgICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1NPQVAsCi0gICAgICAgICAgICAgICJtdXN0VW5kZXJzdGFuZCIpOwotICAgICAgICAgIC8vUmV0cmVpdmUgdGhlIHZhbHVlIG9mIHRoZSBtdXN0VW5kZXJzdGFuZCBhdHRyaWJ1dGUgb2YgdGhlIHJlcXVlc3QuCi0gICAgICAgICAgaWYgKG11c3RVbmRlcnN0YW5kICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIG11c3RVbmRlcnN0YW5kVmFsdWUgPSBtdXN0VW5kZXJzdGFuZC5nZXROb2RlVmFsdWUoKTsKLSAgICAgICAgICAgIG11c3RVbmRlcnN0YW5kQXR0cmlidXRlcy5hZGQobXVzdFVuZGVyc3RhbmRWYWx1ZSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgICAgICAgLy9UaGUgU09BUCBIZWFkZXIgZG9lcyBub3QgY29udGFpbiBhIG11c3RVbmRlcnN0YW5kIGF0dHJpYnV0ZS4iCi0gICAgICAgICAgfSAvLwltdXN0VW5kZXJzdGFuZCAhPSBudWxsCi0gICAgICAgIH0KLSAgICAgIH0gLy9FbmQgZm9yCi0KLSAgICAgIGlmICghaGVhZGVyVGFyZ2V0cykKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgICAgLy9UaGUgU09BUCBIZWFkZXIgZG9lcyBub3QgY29udGFpbiBhbnkgaGVhZGVyIGVudHJpZXMuCi0gICAgICB9Ci0KLSAgICAgIHJldHVybiBtdXN0VW5kZXJzdGFuZEF0dHJpYnV0ZXMudG9BcnJheSgpOwotICAgIH0gLy9FbmQgSWYgaGVhZGVycy5nZXRMZW5ndGgoKSA8IDAJCi0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0cnVlIGlmIHRoaXMgb2JqZWN0IGlzIG11c3QgdW5kZXJzdGFuZCBmYXVsdCBjb2RlLgotICAgKiBAcGFyYW0gZmF1bHRDb2RlRWxlbSB1bmRlcnN0YW5kIGZhdWx0IGNvZGUuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGlzIG9iamVjdCBpcyBtdXN0IHVuZGVyc3RhbmQgZmF1bHQgY29kZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzTXVzdFVuZGVyc3RhbmRGYXVsdENvZGUoRWxlbWVudCBmYXVsdENvZGVFbGVtKQotICB7Ci0gICAgLy9BIGZhdWx0Y29kZSBtYXkgb3IgbWF5bm90IGhhdmUgYSBwcmVmaXgsIGlmIGl0IGRvZXMgaXRzIG5hbWVzcGFjZSBzaG91bGQgYmUgCi0gICAgLy9odHQ6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUgd2hpY2ggaXMgdGhlIHNhbWUgYXMgdGhlIGZhdWx0Y29kZSBlbGVtZW50LgotICAgIC8vSWYgYSBwcmVmaXggaXMgcHJlc2VudCBhbmQgaXQgY29ycmVzcG9uZHMgdG8gYSBkaWZmZXJlbnQgbmFtZXNwYWNlIG9yIGlzIG51bGwgCi0gICAgLy90aGVuIHRoaXMgcmV0dXJucyBmYWxzZS4gIFRoZSBsb2NhbCBwYXJ0IG9mIHRoZSBmYXVsdGNvZGUgaXMgdGhlbiBjaGVjayB0byBzZWUKLSAgICAvL2lmIGl0IGlzIG9uZSBvZiB0aGUgcGVybWl0dGVkIHZhbHVlcy4KLSAgICBpZiAoZmF1bHRDb2RlRWxlbSA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgU3RyaW5nIGZhdWx0Q29kZSA9IGZhdWx0Q29kZUVsZW0uZ2V0Rmlyc3RDaGlsZCgpLmdldE5vZGVWYWx1ZSgpLnRyaW0oKTsKLSAgICBpZiAoZmF1bHRDb2RlID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBTdHJpbmcgZmF1bHRDb2RlRWxlbVByZWZpeCA9IGZhdWx0Q29kZUVsZW0uZ2V0UHJlZml4KCk7Ci0gICAgU3RyaW5nIGZhdWx0Q29kZVByZWZpeCA9IGZhdWx0Q29kZS5zdWJzdHJpbmcoMCwgZmF1bHRDb2RlLmluZGV4T2YoJzonKSk7Ci0gICAgU3RyaW5nIGZhdWx0Q29kZU5hbWUgPQotICAgICAgZmF1bHRDb2RlLnN1YnN0cmluZyhmYXVsdENvZGUuaW5kZXhPZignOicpICsgMSwgZmF1bHRDb2RlLmxlbmd0aCgpKTsKLQotICAgIGlmICgoZmF1bHRDb2RlRWxlbVByZWZpeCAhPSBudWxsIHx8IGZhdWx0Q29kZVByZWZpeCAhPSBudWxsKSkKLSAgICB7Ci0gICAgICBpZiAoZmF1bHRDb2RlUHJlZml4LmVxdWFscyhmYXVsdENvZGVFbGVtUHJlZml4KQotICAgICAgICAmJiAoZmF1bHRDb2RlTmFtZS5lcXVhbHMoIk11c3RVbmRlcnN0YW5kIikKLSAgICAgICAgICB8fCBmYXVsdENvZGVOYW1lLnN0YXJ0c1dpdGgoIk11c3RVbmRlcnN0YW5kLiIpKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBlbHNlCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGlmIChmYXVsdENvZGUuZXF1YWxzKCJNdXN0VW5kZXJzdGFuZCIpCi0gICAgICAgIHx8IGZhdWx0Q29kZU5hbWUuc3RhcnRzV2l0aCgiTXVzdFVuZGVyc3RhbmQuIikpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEzMDIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMzAyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzYWNkNTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEzMDIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NZXNzYWdlRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotLyoqCi0gICAqIEJQMTMwMi4KLSAgICogVGhlIHNvYXA6ZmF1bHRjb2RlIHZhbHVlIGluIHRoZSBzb2FwOkZhdWx0IGVsZW1lbnQgb2YgdGhlIHJlc3BvbnNlIAotICAgKiBtZXNzYWdlIGlzIG5vdCBjdXN0b20sIGFuZCBpcyBvbmUgb2Y6IFZlcnNpb25NaXNtYXRjaCwgTXVzdFVuZGVyc3RhbmQsIENsaWVudCwgU2VydmVyLgotICAgKi8KLXB1YmxpYyBjbGFzcyBCUDEzMDIgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEzMDIoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8vU09BUCBmYXVsdCBjb2RlIHZhbHVlcyBzaG91bGQgbm90IGJlIGN1c3RvbTogb25seSBzdGFuZGFyZCBjb2RlIHF1YWxpZmllcnMgCi0gIC8vYXJlIHVzZWQ6IFZlcnNpb25NaXNtYXRjaCwgTXVzdFVuZGVyc3RhbmQsIENsaWVudCwgU2VydmVyCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICAvL1N0cmluZyByZXF1ZXN0TWVzc2FnZSA9IG51bGw7Ci0gICAgU3RyaW5nIHJlc3BvbnNlTWVzc2FnZSA9IG51bGw7Ci0KLSAgICBpZiAodGhpcy52YWxpZGF0b3IuaXNPbmVXYXlSZXNwb25zZShlbnRyeUNvbnRleHQpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvL0dldCB0aGUgcmVzcG9uc2UgbWVzc2FnZSBjaGVjayB0aGUgZmF1bHRjb2RlLgotICAgICAgTWVzc2FnZUVudHJ5IGxvZ0VudHJ5UmVzcG9uc2UgPSBlbnRyeUNvbnRleHQuZ2V0UmVzcG9uc2UoKTsKLSAgICAgIGlmIChsb2dFbnRyeVJlc3BvbnNlICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHJlc3BvbnNlTWVzc2FnZSA9IGxvZ0VudHJ5UmVzcG9uc2UuZ2V0TWVzc2FnZSgpOwotCi0gICAgICAgIERvY3VtZW50IHRhcmdldERvYyA9IFhNTFV0aWxzLnBhcnNlWE1MKHJlc3BvbnNlTWVzc2FnZSk7Ci0gICAgICAgIE5vZGVMaXN0IGZhdWx0Q29kZXMgPSB0YXJnZXREb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImZhdWx0Y29kZSIpOwotICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0RG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQLCAiZmF1bHRjb2RlIik7Ci0KLSAgICAgICAgaWYgKGZhdWx0Q29kZXMuZ2V0TGVuZ3RoKCkgPD0gMCkKLSAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgICAvL05vIGZhdWx0Y29kZQkKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZhdWx0Q29kZXMuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICAgICAgewotICAgICAgICAgIE5vZGUgZmF1bHRDb2RlRWxlbSA9IGZhdWx0Q29kZXMuaXRlbShpKTsKLSAgICAgICAgICAvL0lmIHRoZSBmYXVsdGNvZGUgd2FzIE11c3RVbmRlcnN0YW5kLCBjaGVjayB0aGUgdmFsdWUgb2YgCi0gICAgICAgICAgLy90aGUgbXVzdFVuZGVyc3RhbmQgYXR0cmlidXRlIGluIHRoZSByZXF1ZXN0LgotICAgICAgICAgIGlmIChmYXVsdENvZGVFbGVtID09IG51bGwpCi0gICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgICAgIGVsc2UgaWYgKGZhdWx0Q29kZUVsZW0uZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaXNWYWxpZEZhdWx0Q29kZSgoRWxlbWVudCkgZmF1bHRDb2RlRWxlbSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1dBUk5JTkc7Ci0gICAgICAgICAgICAgIGZhaWx1cmVEZXRhaWwgPQotICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwocmVzcG9uc2VNZXNzYWdlLCBlbnRyeUNvbnRleHQpOwotICAgICAgICAgICAgICAvL2ZhaWx1cmVEZXRhaWwgPQotICAgICAgICAgICAgICAvLyAgICAiVGhlIGZhdWx0Y29kZSB2YWx1ZSB3YXMgOiAiCi0gICAgICAgICAgICAgIC8vICAgICAgICArIGZhdWx0Q29kZUVsZW0uZ2V0Rmlyc3RDaGlsZCgpLmdldE5vZGVWYWx1ZSgpLnRyaW0oKTsKLSAgICAgICAgICAgIH0gLy9FbmQgaWYgKGZhdWx0Q29kZS5lcXVhbHMuLi4pCi0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgICAgIH0KLSAgICAgICAgfSAvL0VuZCBmb3IJCi0gICAgICB9IC8vRW5kIGlmIGxvZ0VudHJ5UmVzcG9uc2UhPSBudWxsCi0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrIGZhdWx0Q29kZS4KLSAgICogQHBhcmFtIGZhdWx0Q29kZUVsZW0gYSBmYXVsdGNvZGUuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiBmYXVsdGNvZGUgaXMgdmFsaWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1ZhbGlkRmF1bHRDb2RlKEVsZW1lbnQgZmF1bHRDb2RlRWxlbSkKLSAgewotICAgIC8vQSBmYXVsdGNvZGUgbWF5IG9yIG1heW5vdCBoYXZlIGEgcHJlZml4LCBpZiBpdCBkb2VzIGl0cyBuYW1lc3BhY2Ugc2hvdWxkIGJlIAotICAgIC8vaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZSB3aGljaCBpcyB0aGUgc2FtZSBhcyB0aGUgZmF1bHRjb2RlIGVsZW1lbnQuCi0gICAgLy9JZiBhIHByZWZpeCBpcyBwcmVzZW50IGFuZCBpdCBjb3JyZXNwb25kcyB0byBhIGRpZmZlcmVudCBuYW1lc3BhY2Ugb3IgaXMgbnVsbCAKLSAgICAvL3RoZW4gdGhpcyByZXR1cm5zIGZhbHNlLiAgVGhlIGxvY2FsIHBhcnQgb2YgdGhlIGZhdWx0Y29kZSBpcyB0aGVuIGNoZWNrIHRvIHNlZQotICAgIC8vaWYgaXQgaXMgb25lIG9mIHRoZSBwZXJtaXR0ZWQgdmFsdWVzLgotICAgIGlmIChmYXVsdENvZGVFbGVtID09IG51bGwpCi0gICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFN0cmluZyBmYXVsdENvZGUgPSBmYXVsdENvZGVFbGVtLmdldEZpcnN0Q2hpbGQoKS5nZXROb2RlVmFsdWUoKS50cmltKCk7Ci0gICAgaWYgKGZhdWx0Q29kZSA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRklYOiBUaGlzIGlzIG5vdCBjb3JyZWN0LCBzaW5jZSB0aGlzIGVsZW1lbnQgY2FuIG5vdCBiZSBuYW1lc3BhY2UgcXVhbGlmaWVkCi0gICAgU3RyaW5nIGZhdWx0Q29kZUVsZW1QcmVmaXggPSBmYXVsdENvZGVFbGVtLmdldFBhcmVudE5vZGUoKS5nZXRQcmVmaXgoKTsKLQotICAgIC8vIElmIHRoaXMgaXMgbm90IGEgUU5hbWUgdGhlbiByZXR1cm4gZmFsc2UKLSAgICBpbnQgaW5kZXg7Ci0gICAgU3RyaW5nIGZhdWx0Q29kZVByZWZpeCA9IG51bGw7Ci0gICAgU3RyaW5nIGZhdWx0Q29kZU5hbWUgPSBmYXVsdENvZGU7Ci0gICAgaWYgKChpbmRleCA9IGZhdWx0Q29kZS5pbmRleE9mKCc6JykpICE9IC0xKQotICAgIHsKLSAgICAgIGZhdWx0Q29kZVByZWZpeCA9IGZhdWx0Q29kZS5zdWJzdHJpbmcoMCwgaW5kZXgpOwotICAgICAgZmF1bHRDb2RlTmFtZSA9IGZhdWx0Q29kZS5zdWJzdHJpbmcoaW5kZXggKyAxLCBmYXVsdENvZGUubGVuZ3RoKCkpOwotICAgIH0KLQotICAgIGlmICgoZmF1bHRDb2RlRWxlbVByZWZpeCAhPSBudWxsICYmIGZhdWx0Q29kZVByZWZpeCAhPSBudWxsKSkKLSAgICB7Ci0gICAgICBpZiAoZmF1bHRDb2RlUHJlZml4LmVxdWFscyhmYXVsdENvZGVFbGVtUHJlZml4KSkKLSAgICAgIHsKLSAgICAgICAgaWYgKChmYXVsdENvZGVOYW1lLmVxdWFscygiTXVzdFVuZGVyc3RhbmQiKQotICAgICAgICAgIHx8IGZhdWx0Q29kZU5hbWUuZXF1YWxzKCJWZXJzaW9uTWlzbWF0Y2giKQotICAgICAgICAgIHx8IGZhdWx0Q29kZU5hbWUuZXF1YWxzKCJDbGllbnQiKQotICAgICAgICAgIHx8IGZhdWx0Q29kZU5hbWUuZXF1YWxzKCJTZXJ2ZXIiKSkpCi0gICAgICAgICAgLyogUkVNT1ZFOgotICAgICAgICAgIHx8IGZhdWx0Q29kZU5hbWUuc3RhcnRzV2l0aCgiTXVzdFVuZGVyc3RhbmQuIikKLSAgICAgICAgICB8fCBmYXVsdENvZGVOYW1lLnN0YXJ0c1dpdGgoIlZlcnNpb25NaXNtYXRjaC4iKQotICAgICAgICAgIHx8IGZhdWx0Q29kZU5hbWUuc3RhcnRzV2l0aCgiQ2xpZW50LiIpCi0gICAgICAgICAgfHwgZmF1bHRDb2RlTmFtZS5zdGFydHNXaXRoKCJTZXJ2ZXIuIikpKQotICAgICAgICAgICovCi0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgaWYgKGZhdWx0Q29kZU5hbWUuZXF1YWxzKCJNdXN0VW5kZXJzdGFuZCIpCi0gICAgICAgIHx8IGZhdWx0Q29kZU5hbWUuZXF1YWxzKCJWZXJzaW9uTWlzbWF0Y2giKQotICAgICAgICB8fCBmYXVsdENvZGVOYW1lLmVxdWFscygiQ2xpZW50IikKLSAgICAgICAgfHwgZmF1bHRDb2RlTmFtZS5lcXVhbHMoIlNlcnZlciIpCi0gICAgICAgIHx8IGZhdWx0Q29kZU5hbWUuc3RhcnRzV2l0aCgiTXVzdFVuZGVyc3RhbmQuIikKLSAgICAgICAgfHwgZmF1bHRDb2RlTmFtZS5zdGFydHNXaXRoKCJWZXJzaW9uTWlzbWF0Y2guIikKLSAgICAgICAgfHwgZmF1bHRDb2RlTmFtZS5zdGFydHNXaXRoKCJDbGllbnQuIikKLSAgICAgICAgfHwgZmF1bHRDb2RlTmFtZS5zdGFydHNXaXRoKCJTZXJ2ZXIuIikpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEzMDUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMzA1LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlOWIyYWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEzMDUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IGphdmEubmV0Lkh0dHBVUkxDb25uZWN0aW9uOwotaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuU3RyaW5nVG9rZW5pemVyOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotCi0vKioKLSAgICogQlAxMzA1LgotICAgKiBJdCBpcyBpbiBhbiBIVFRQIDUwMCBtZXNzYWdlIHdpdGggIlNlcnZlciIgRXJyb3IgY29kZS4KLSAgICovCi1wdWJsaWMgY2xhc3MgQlAxMzA1IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlAxMzA1KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgRG9jdW1lbnQgZG9jOwotICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgb25lIHdheSByZXNwb25zZQotICAgIC8vIG9yIG1lc3NhZ2UgaXMgbWVwdHkgb3IgaW52YWxpZAotICAgIGlmICh0aGlzLnZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCkKLSAgICAgIHx8IChkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKSkgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gbG9vayBmb3IgPHNvYXA6RmF1bHQ+IGVsZW1lbnQ6Ci0gICAgICBOb2RlTGlzdCBmYXVsdExpc3QgPQotICAgICAgICBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUygKLSAgICAgICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1NPQVAsCi0gICAgICAgICAgWE1MVXRpbHMuU09BUF9FTEVNX0ZBVUxUKTsKLSAgICAgIGlmICgoZmF1bHRMaXN0ID09IG51bGwpIHx8IChmYXVsdExpc3QuZ2V0TGVuZ3RoKCkgPT0gMCkpCi0gICAgICB7Ci0gICAgICAgIC8vIFJlc3BvbnNlIGRvZXMgbm90IGNvbnRhaW4gYSBzb2FwOmZhdWx0Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIHdlIGhhdmUgYSBzb2FwOkZhdWx0LiBDaGVjayB0aGF0IGl0IGlzIGNvbnRhaW5lZCBpbiBhIEhUVFAgNTAwIG1lc3NhZ2UKLSAgICAgICAgLy8gR1QgOiBiYXNlIEhUVFAgSGVhZGVyIHBhcnNpbmcgb24gQlAxMDAxIC0gdGhpcyBzaG91bGQgYmUgZmFjdG9yZWQgdG8gYSAKLSAgICAgICAgLy8gZ2VuZXJhbC1wdXJwb3NlIEhUVFAgbWVzc2FnZSBwYXJzaW5nIG1ldGhvZCBvciBtZXRob2RzIChyZXF1ZXN0ICYgcmVzcG9uc2UpCi0gICAgICAgIFN0cmluZyBodHRwSGVhZGVyID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldEhUVFBIZWFkZXJzKCk7Ci0gICAgICAgIC8vUmVzcG9uc2UtTGluZSAgID0gSFRUUC1WZXJzaW9uIFJlc3BvbnNlQ29kZSBSZXNwb25zZU1zZyBTUCBDUkxGCi0gICAgICAgIFZlY3RvciByZXNwb25zZUxpbmUgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgIFN0cmluZyBzdGFydExpbmUgPSBudWxsOwotICAgICAgICAvL1N0cmluZyBodHRwVmVyc2lvbiA9IG51bGw7Ci0gICAgICAgIC8vU3RyaW5nIHJlc3BvbnNlQ29kZSA9IG51bGw7Ci0gICAgICAgIFN0cmluZyBzdGF0dXNDb2RlID0gbnVsbDsKLSAgICAgICAgU3RyaW5nVG9rZW5pemVyIGh0dHBNZXNzYWdlVG9rZW5pemVyID0KLSAgICAgICAgICBuZXcgU3RyaW5nVG9rZW5pemVyKGh0dHBIZWFkZXIsICJcblxyXGYiKTsKLQotICAgICAgICBpZiAoaHR0cE1lc3NhZ2VUb2tlbml6ZXIuaGFzTW9yZVRva2VucygpKQotICAgICAgICAgIHN0YXJ0TGluZSA9IGh0dHBNZXNzYWdlVG9rZW5pemVyLm5leHRUb2tlbigpOwotCi0gICAgICAgIGlmIChzdGFydExpbmUuc3RhcnRzV2l0aCgiSFRUUCIpKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0YXJ0TGluZVRva2VuaXplciA9Ci0gICAgICAgICAgICBuZXcgU3RyaW5nVG9rZW5pemVyKHN0YXJ0TGluZSwgIlx1MDAyMCIpOwotCi0gICAgICAgICAgd2hpbGUgKHN0YXJ0TGluZVRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmVzcG9uc2VMaW5lLmFkZChzdGFydExpbmVUb2tlbml6ZXIubmV4dFRva2VuKCkpOwotICAgICAgICAgIH0KLQotICAgICAgICAgIC8vaHR0cFZlcnNpb24gPSAoU3RyaW5nKSByZXNwb25zZUxpbmUuZ2V0KDApOwotCi0gICAgICAgICAgLy8gUEI6IENoZWNrIGZvciA1MDAgc3RhdHVzIGNvZGUgd2hpY2ggc2hvdWxkIGJlIHRoZSBzZWNvbmQgdG9rZW4gaW4gdGhlIHN0cmluZwotICAgICAgICAgIHN0YXR1c0NvZGUgPSAoU3RyaW5nKSByZXNwb25zZUxpbmUuZ2V0KDEpOwotCi0gICAgICAgICAgLy9yZXNwb25zZUNvZGUgPSAoU3RyaW5nKSByZXNwb25zZUxpbmUuZ2V0KDEpOwotICAgICAgICAgIC8vc3RhdHVzQ29kZSA9IChTdHJpbmcpIHJlc3BvbnNlTGluZS5nZXQoMik7Ci0gICAgICAgIH0KLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAvLyBQQjogSnVzdCBjaGVjayBmb3IgNTAwIHN0YXR1cyBjb2RlCi0gICAgICAgICAgaWYgKCFzdGF0dXNDb2RlCi0gICAgICAgICAgICAuZXF1YWxzKFN0cmluZy52YWx1ZU9mKEh0dHBVUkxDb25uZWN0aW9uLkhUVFBfSU5URVJOQUxfRVJST1IpKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvL2lmICghcmVzcG9uc2VDb2RlLmVxdWFsc0lnbm9yZUNhc2UoIk9LIikgfHwKLSAgICAgICAgICAgIC8vCSghc3RhdHVzQ29kZS5lcXVhbHNJZ25vcmVDYXNlKCJTZXJ2ZXJFcnJvciIpKSkgeyAgICAgCQkJCi0gICAgICAgICAgICAvLyBBc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbihodHRwSGVhZGVyKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEzMDYuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMzA2LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzZTQwZWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEzMDYuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotLyoqCi0gICAqIEJQMTMwNi4KLSAgICogVGhlIHNvYXA6RmF1bHQgZWxlbWVudCBkb2VzIG5vdCBoYXZlIGNoaWxkcmVuIG90aGVyIHRoYW4gc29hcDpmYXVsdGNvZGUsIHNvYXA6ZmF1bHRzdHJpbmcsIHNvYXA6ZmF1bHRhY3RvciBvciBzb2FwOmRldGFpbC4KLSAgICovCi1wdWJsaWMgY2xhc3MgQlAxMzA2IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlAxMzA2KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgRG9jdW1lbnQgZG9jOwotICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgb25lIHdheSByZXNwb25zZQotICAgIC8vIG9yIG1lc3NhZ2UgaXMgbWVwdHkgb3IgaW52YWxpZAotICAgIGlmICh0aGlzLnZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCkKLSAJICAgIHx8IChkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKSkgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gbG9vayBmb3IgPHNvYXA6RmF1bHQ+IGVsZW1lbnQ6Ci0gICAgICBOb2RlTGlzdCBmYXVsdExpc3QgPQotICAgICAgICBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUygKLSAgICAgICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1NPQVAsCi0gICAgICAgICAgWE1MVXRpbHMuU09BUF9FTEVNX0ZBVUxUKTsKLSAgICAgIGlmICgoZmF1bHRMaXN0ID09IG51bGwpIHx8IChmYXVsdExpc3QuZ2V0TGVuZ3RoKCkgPT0gMCkpCi0gICAgICB7Ci0gICAgICAgIC8vIFJlc3BvbnNlIGRvZXMgbm90IGNvbnRhaW4gYSBzb2FwOmZhdWx0Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIGNoZWNrIHRoYXQgbm8gc29hcDpmYXVsdCBjb250YWlucyBvbmx5IGZhdWx0Y29kZSwgZmF1bHRzdHJpbmcsIGZhdWx0YWN0b3IsIGRldGFpbC4KLSAgICAgICAgLy8gSWYgaXQgZG9lcywgZnVydGhlciBjaGVjayB0aGF0IGl0IGlzIHVucXVhbGlmaWVkLgotICAgICAgICAvLyBGb3IgZWFjaCA8c29hcDpGYXVsdD4KLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBmb3IgKGludCBuID0gMDsgbiA8IGZhdWx0TGlzdC5nZXRMZW5ndGgoKTsgbisrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoTm9kZSBjaGlsZCA9IGZhdWx0TGlzdC5pdGVtKG4pLmdldEZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAgICAgY2hpbGQgIT0gbnVsbDsKLSAgICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC5nZXROZXh0U2libGluZygpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBpZiAoKGNoaWxkLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpCi0gICAgICAgICAgICAgICAgJiYgIShjaGlsZAotICAgICAgICAgICAgICAgICAgLmdldExvY2FsTmFtZSgpCi0gICAgICAgICAgICAgICAgICAuZXF1YWxzSWdub3JlQ2FzZShYTUxVdGlscy5TT0FQX0VMRU1fRkFVTFRfQ09ERSkKLSAgICAgICAgICAgICAgICAgIHx8IGNoaWxkLmdldExvY2FsTmFtZSgpLmVxdWFsc0lnbm9yZUNhc2UoCi0gICAgICAgICAgICAgICAgICAgIFhNTFV0aWxzLlNPQVBfRUxFTV9GQVVMVF9TVFJJTkcpCi0gICAgICAgICAgICAgICAgICB8fCBjaGlsZC5nZXRMb2NhbE5hbWUoKS5lcXVhbHNJZ25vcmVDYXNlKAotICAgICAgICAgICAgICAgICAgICBYTUxVdGlscy5TT0FQX0VMRU1fRkFVTFRfQUNUT1IpCi0gICAgICAgICAgICAgICAgICB8fCBjaGlsZC5nZXRMb2NhbE5hbWUoKS5lcXVhbHNJZ25vcmVDYXNlKAotICAgICAgICAgICAgICAgICAgICBYTUxVdGlscy5TT0FQX0VMRU1fRkFVTFRfREVUQUlMKSkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBQQjogVGhpcyBpcyBjaGVja2VkIGluIDEzMTYgbm93Ci0gICAgICAgICAgICAgICAgLy98fCAoY2hpbGQuZ2V0TmFtZXNwYWNlVVJJKCkgIT0gbnVsbCkpIHsKLSAgICAgICAgICAgICAgICAvLyBBc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgICAgZmFpbHVyZURldGFpbCA9IHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZS5nZXRNZXNzYWdlKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTMwNy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEzMDcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjY2ZGQ2MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTMwNy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotCi0vKioKLSAqIEJQMTMwNy4KLSAqIFRoZSBlbGVtZW50cyBvZiB0aGUgbWVzc2FnZSB0aGF0IGFyZSBuYW1lc3BhY2VkIAotICogImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIiBkbyBub3QgaGF2ZSBhIHNvYXA6ZW5jb2RpbmdTdHlsZSBhdHRyaWJ1dGUuCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDEzMDcgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEzMDcoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICBEb2N1bWVudCBkb2M7Ci0gICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBvbmUgd2F5IHJlc3BvbnNlCi0gICAgLy8gb3IgbWVzc2FnZSBpcyBtZXB0eSBvciBpbnZhbGlkCi0gICAgaWYgKHRoaXMudmFsaWRhdG9yLmlzT25lV2F5UmVzcG9uc2UoZW50cnlDb250ZXh0KQotICAgICAgfHwgKGRvYyA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpKSA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBsb29rIGZvciA8c29hcDp4eHg+IGVsZW1lbnRzOgotICAgICAgTm9kZUxpc3Qgc29hcExpc3QgPQotICAgICAgICBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUyhXU0lDb25zdGFudHMuTlNfVVJJX1NPQVAsICIqIik7Ci0gICAgICBpZiAoKHNvYXBMaXN0ID09IG51bGwpIHx8IChzb2FwTGlzdC5nZXRMZW5ndGgoKSA9PSAwKSkKLSAgICAgIHsKLSAgICAgICAgLy8gUmVzcG9uc2UgZG9lcyBub3QgY29udGFpbiBhbnkgc29hcCBlbnZlbG9wZSBlbGVtZW50cwotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBjaGVjayB0aGF0IG5vIDxzb2FwOnh4eD4gZWxlbWVudHMgY29udGFpbnMgYSBzb2FwOmVuY29kaW5nU3R5bGUgYXR0cmlidXRlCi0gICAgICAgIC8vIEZvciBlYWNoIDxzb2FwOnh4eD4KLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBmb3IgKGludCBuID0gMDsgbiA8IHNvYXBMaXN0LmdldExlbmd0aCgpOyBuKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgRWxlbWVudCBuZXh0RWxlbSA9IChFbGVtZW50KSBzb2FwTGlzdC5pdGVtKG4pOwotICAgICAgICAgICAgaWYgKG5leHRFbGVtCi0gICAgICAgICAgICAgIC5nZXRBdHRyaWJ1dGVOb2RlTlMoV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQLCAiZW5jb2RpbmdTdHlsZSIpCi0gICAgICAgICAgICAgICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIC8vIEFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMzA4LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTMwOC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlY2MwYTZmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMzA4LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotLyoqCi0gKiBCUDEzMDguCi0gKiBUaGUgY2hpbGRyZW4gZWxlbWVudHMgb2Ygc29hcDpCb2R5IGRvIG5vdCBoYXZlIGEgc29hcDplbmNvZGluZ1N0eWxlIGF0dHJpYnV0ZS4KLSAqLwotcHVibGljIGNsYXNzIEJQMTMwOCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQMTMwOChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBHZXR0aW5nIGEgbWVzc2FnZSBkb2N1bWVudAotICAgICAgRG9jdW1lbnQgZG9jID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCk7Ci0gICAgICAvLyBJZiB0aGUgbWVzc2FnZSBpcyBlbXB0eSBvciBpbnZhbGlkLCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAoZG9jID09IG51bGwpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIGxvb2sgZm9yIHNvYXA6Qm9keSBlbGVtZW50czoKLSAgICAgIE5vZGVMaXN0IHNvYXBCb2R5TGlzdCA9IGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKAotICAgICAgICBFTEVNX1NPQVBfQk9EWS5nZXROYW1lc3BhY2VVUkkoKSwgRUxFTV9TT0FQX0JPRFkuZ2V0TG9jYWxQYXJ0KCkpOwotCi0gICAgICAvLyBUaGUgbWVzc2FnZSBkb2VzIG5vdCBjb250YWluIGFueSBzb2FwOkJvZHksIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmICgoc29hcEJvZHlMaXN0ID09IG51bGwpIHx8IChzb2FwQm9keUxpc3QuZ2V0TGVuZ3RoKCkgPT0gMCkpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIGNoZWNrIHRoYXQgbm8gc29hcDpCb2R5IGNoaWxkIGVsZW1lbnRzIGNvbnRhaW4gYSBzb2FwOmVuY29kaW5nU3R5bGUgYXR0cmlidXRlCi0gICAgICAvLyBHZXR0aW5nIHRoZSBmaXJzdCBzb2FwOkJvZHkgY2hpbGQgZWxlbWVudAotICAgICAgRWxlbWVudCBjaGlsZCA9Ci0gICAgICAgIFhNTFV0aWxzLmdldEZpcnN0Q2hpbGQoKEVsZW1lbnQpIHNvYXBCb2R5TGlzdC5pdGVtKDApKTsKLSAgICAgIHdoaWxlIChjaGlsZCAhPSBudWxsKQotICAgICAgewotICAgICAgICBpZiAoY2hpbGQuZ2V0QXR0cmlidXRlTm9kZU5TKAotICAgICAgICAgIEVMRU1fU09BUF9CT0RZLmdldE5hbWVzcGFjZVVSSSgpLCAiZW5jb2RpbmdTdHlsZSIpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIGNoaWxkIGVsZW1lbnQgbmFtZSBpcyBcIiIgKwotICAgICAgICAgICAgY2hpbGQuZ2V0Tm9kZU5hbWUoKSArICJcIi4iKTsKLSAgICAgICAgfQotICAgICAgICAvLyBHZXR0aW5nIHRoZSBuZXh0IHNvYXA6Qm9keSBjaGlsZCBlbGVtZW50Ci0gICAgICAgIGNoaWxkID0gWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcoY2hpbGQpOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBhbmFlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGFmZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgYWZlLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMzA5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTMwOS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjNiNmE0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMzA5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi0KLS8qKgotICogQlAxMzA5LgotICogVGhlIHNvYXA6RW52ZWxvcGUgZG9lcyBub3QgaGF2ZSBkaXJlY3QgY2hpbGRyZW4gYWZ0ZXIgdGhlIHNvYXA6Qm9keSBlbGVtZW50IAotICovCi1wdWJsaWMgY2xhc3MgQlAxMzA5IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlAxMzA5KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgRG9jdW1lbnQgZG9jOwotICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgb25lIHdheSByZXNwb25zZQotICAgIC8vIG9yIG1lc3NhZ2UgaXMgbWVwdHkgb3IgaW52YWxpZAotICAgIGlmICh0aGlzLnZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCkKLSAgICAgIHx8IChkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKSkgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gbG9vayBmb3IgPHNvYXA6RW52ZWxvcGU+IGVsZW1lbnRzOgotICAgICAgLy8gKE5vdGU6IHNpbmNlIHRoaXMgaXMgYSBTb2FwIG1lc3NhZ2Ugd2UgZXhwZWN0IGV4YWN0bHkgb25lIHNvYXAgZW52ZWxvcGUsIGJ1dCB3ZSBkbyBub3QgYXNzdW1lIGl0KS4KLSAgICAgIE5vZGVMaXN0IHNvYXBFbnZMaXN0ID0KLSAgICAgICAgZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoCi0gICAgICAgICAgV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQLAotICAgICAgICAgIFhNTFV0aWxzLlNPQVBfRUxFTV9FTlZFTE9QRSk7Ci0gICAgICBpZiAoKHNvYXBFbnZMaXN0ID09IG51bGwpIHx8IChzb2FwRW52TGlzdC5nZXRMZW5ndGgoKSA9PSAwKSkKLSAgICAgIHsKLSAgICAgICAgLy8gUmVzcG9uc2UgZG9lcyBub3QgY29udGFpbiBhbnkgc29hcCBFbnZlbG9wZSBlbGVtZW50KHMpCi0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIGNoZWNrIHRoYXQgaWYgYSA8c29hcDpCb2R5PiBleGlzdHMgaW4gYSA8c29hcDpFbnZlbG9wZT4sIHRoYXQgaXRzIHRoZSBsYXN0IGluIHRoZSBlbnZlbG9wZSAgICAgICAgCQkgICAgICAJCQotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIC8vIEZvciBlYWNoIDxzb2FwOkVudmVsb3BlPgotICAgICAgICAgIGZvciAoaW50IG4gPSAwOyBuIDwgc29hcEVudkxpc3QuZ2V0TGVuZ3RoKCk7IG4rKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBHZXQgdGhlIGxpc3Qgb2YgYWxsIGVsZW1lbnRzIGluIHRoZSBFbnZlbG9wZSAgICAgICAJCQkJCi0gICAgICAgICAgICBFbGVtZW50IHNvYXBFbnYgPSAoRWxlbWVudCkgc29hcEVudkxpc3QuaXRlbShuKTsKLSAgICAgICAgICAgIE5vZGVMaXN0IGVudkNoaWxkTGlzdCA9IHNvYXBFbnYuZ2V0Q2hpbGROb2RlcygpOwotICAgICAgICAgICAgVmVjdG9yIGVudkNoaWxkRWxlbUxpc3QgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgICAgICBmb3IgKGludCB2ID0gMDsgdiA8IGVudkNoaWxkTGlzdC5nZXRMZW5ndGgoKTsgdisrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBOb2RlIG5leHROb2RlID0gZW52Q2hpbGRMaXN0Lml0ZW0odik7Ci0gICAgICAgICAgICAgIGlmIChuZXh0Tm9kZS5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZW52Q2hpbGRFbGVtTGlzdC5hZGRFbGVtZW50KChFbGVtZW50KSBuZXh0Tm9kZSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIFNlYXJjaCB0aGUgbGlzdCBmb3IgPHNvYXA6Qm9keT4KLSAgICAgICAgICAgIGZvciAoaW50IG0gPSAwOyBtIDwgZW52Q2hpbGRFbGVtTGlzdC5zaXplKCk7IG0rKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRWxlbWVudCBlbnZDaGlsZEVsZW0gPSAoRWxlbWVudCkgZW52Q2hpbGRFbGVtTGlzdC5lbGVtZW50QXQobSk7Ci0gICAgICAgICAgICAgIGlmIChlbnZDaGlsZEVsZW0KLSAgICAgICAgICAgICAgICAuZ2V0TmFtZXNwYWNlVVJJKCkKLSAgICAgICAgICAgICAgICAuZXF1YWxzKFdTSUNvbnN0YW50cy5OU19VUklfU09BUCkKLSAgICAgICAgICAgICAgICAmJiBlbnZDaGlsZEVsZW0uZ2V0TG9jYWxOYW1lKCkuZXF1YWxzKFhNTFV0aWxzLlNPQVBfRUxFTV9CT0RZKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIGZvdW5kIGEgPHNvYXA6Qm9keT4gc28gY2hlY2sgaXRzIHRoZSBsYXN0IGluIHRoZSBsaXN0IG9mIGNoaWxkIGVsZW1lbnRzIG9mIHRoZSBFbnZlbG9wZQotICAgICAgICAgICAgICAgIGlmIChlbnZDaGlsZEVsZW0gIT0gZW52Q2hpbGRFbGVtTGlzdC5sYXN0RWxlbWVudCgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEzMTYuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMzE2LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4NDE4MmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEzMTYuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotLyoqCi0gKiBCUDEzMTYuCi0gKiBUaGUgc29hcDpGYXVsdCBlbGVtZW50IGNoaWxkcmVuIChzb2FwOmZhdWx0Y29kZSwgc29hcDpmYXVsdHN0cmluZywgc29hcDpmYXVsdGFjdG9yIG9yIHNvYXA6ZGV0YWlsKSBhcmUgdW5xdWFsaWZpZWQuCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDEzMTYgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEzMTYoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICBEb2N1bWVudCBkb2M7Ci0gICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBvbmUgd2F5IHJlc3BvbnNlCi0gICAgLy8gb3IgbWVzc2FnZSBpcyBtZXB0eSBvciBpbnZhbGlkCi0gICAgaWYgKHRoaXMudmFsaWRhdG9yLmlzT25lV2F5UmVzcG9uc2UoZW50cnlDb250ZXh0KQotICAgICAgfHwgKGRvYyA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpKSA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBsb29rIGZvciA8c29hcDpGYXVsdD4gZWxlbWVudDoKLSAgICAgIE5vZGVMaXN0IGZhdWx0TGlzdCA9Ci0gICAgICAgIGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKAotICAgICAgICAgIFdTSUNvbnN0YW50cy5OU19VUklfU09BUCwKLSAgICAgICAgICBYTUxVdGlscy5TT0FQX0VMRU1fRkFVTFQpOwotICAgICAgaWYgKChmYXVsdExpc3QgPT0gbnVsbCkgfHwgKGZhdWx0TGlzdC5nZXRMZW5ndGgoKSA9PSAwKSkKLSAgICAgIHsKLSAgICAgICAgLy8gUmVzcG9uc2UgZG9lcyBub3QgY29udGFpbiBhIHNvYXA6ZmF1bHQKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gY2hlY2sgdGhhdCBubyBzb2FwOmZhdWx0IGNvbnRhaW5zIG9ubHkgZmF1bHRjb2RlLCBmYXVsdHN0cmluZywgZmF1bHRhY3RvciwgZGV0YWlsLgotICAgICAgICAvLyBJZiBpdCBkb2VzLCBmdXJ0aGVyIGNoZWNrIHRoYXQgaXQgaXMgdW5xdWFsaWZpZWQuCi0gICAgICAgIC8vIEZvciBlYWNoIDxzb2FwOkZhdWx0PgotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIGZvciAoaW50IG4gPSAwOyBuIDwgZmF1bHRMaXN0LmdldExlbmd0aCgpOyBuKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgZm9yIChOb2RlIGNoaWxkID0gZmF1bHRMaXN0Lml0ZW0obikuZ2V0Rmlyc3RDaGlsZCgpOwotICAgICAgICAgICAgICBjaGlsZCAhPSBudWxsOwotICAgICAgICAgICAgICBjaGlsZCA9IGNoaWxkLmdldE5leHRTaWJsaW5nKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlmICgoY2hpbGQuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICAgICAgICAgICAgICAmJiAoY2hpbGQKLSAgICAgICAgICAgICAgICAgIC5nZXRMb2NhbE5hbWUoKQotICAgICAgICAgICAgICAgICAgLmVxdWFsc0lnbm9yZUNhc2UoWE1MVXRpbHMuU09BUF9FTEVNX0ZBVUxUX0NPREUpCi0gICAgICAgICAgICAgICAgICB8fCBjaGlsZC5nZXRMb2NhbE5hbWUoKS5lcXVhbHNJZ25vcmVDYXNlKAotICAgICAgICAgICAgICAgICAgICBYTUxVdGlscy5TT0FQX0VMRU1fRkFVTFRfU1RSSU5HKQotICAgICAgICAgICAgICAgICAgfHwgY2hpbGQuZ2V0TG9jYWxOYW1lKCkuZXF1YWxzSWdub3JlQ2FzZSgKLSAgICAgICAgICAgICAgICAgICAgWE1MVXRpbHMuU09BUF9FTEVNX0ZBVUxUX0FDVE9SKQotICAgICAgICAgICAgICAgICAgfHwgY2hpbGQuZ2V0TG9jYWxOYW1lKCkuZXF1YWxzSWdub3JlQ2FzZSgKLSAgICAgICAgICAgICAgICAgICAgWE1MVXRpbHMuU09BUF9FTEVNX0ZBVUxUX0RFVEFJTCkpCi0gICAgICAgICAgICAgICAgJiYgKGNoaWxkLmdldE5hbWVzcGFjZVVSSSgpICE9IG51bGwpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gQXNzZXJ0aW9uIGZhaWxlZAotICAgICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICAgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEzMTguamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxMzE4LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExODA4MDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDEzMTguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuSFRUUFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLk9wZXJhdGlvblNpZ25hdHVyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5UeXBlc1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLldTRExVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotCi0vKioKLQkgKiBCUDEzMTgKLQkgKiAKLQkgKiBUaGUgZ3JhbmRjaGlsZHJlbiBlbGVtZW50cyBvZiBzb2FwOkJvZHkgZG8gbm90IGhhdmUgYSBzb2FwOmVuY29kaW5nU3R5bGUgYXR0cmlidXRlLgotCSAqLwotcHVibGljIGNsYXNzIEJQMTMxOCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQMTMxOChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBpZiAodGhpcy52YWxpZGF0b3IuaXNPbmVXYXlSZXNwb25zZShlbnRyeUNvbnRleHQpKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotCi0gICAgICAvLyBQYXJzZSBtZXNzYWdlCi0gICAgICBEb2N1bWVudCByZXNwb25zZURvYyA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpOwotICAgICAgRG9jdW1lbnQgcmVxdWVzdERvYyA9IGVudHJ5Q29udGV4dC5nZXRSZXF1ZXN0RG9jdW1lbnQoKTsKLQotICAgICAgLy8gbWVzc2FnZXMgYXJlIGVtcHR5IG9yIGludmFsaWQsIERPTSBvYmplY3RzIGFyZSBudWxsCi0gICAgICBpZiAocmVzcG9uc2VEb2MgPT0gbnVsbCB8fCByZXF1ZXN0RG9jID09IG51bGwpIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgLy9pZiAoaXNGYXVsdChyZXNwb25zZURvYykpCi0gICAgICAvLyAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgLy8gR2V0IFNPQVBBY3Rpb24KLSAgICAgIFN0cmluZyBoZWFkZXJzID0gZW50cnlDb250ZXh0LmdldFJlcXVlc3QoKS5nZXRIVFRQSGVhZGVycygpOwotICAgICAgU3RyaW5nIGFjdGlvbiA9IG51bGw7Ci0gICAgICBpZiAoaGVhZGVycyAhPSBudWxsKQotICAgICAgICBhY3Rpb24gPSAoU3RyaW5nKSBIVFRQVXRpbHMuZ2V0SHR0cEhlYWRlclRva2VucyhoZWFkZXJzLCAiOiIpLmdldCgiU09BUEFjdGlvbiIudG9VcHBlckNhc2UoKSk7Ci0KLSAgICAgIC8vIEdldCB0aGUgYmluZGluZyB0aGF0IGlzIGJlaW5nIHByb2Nlc3NlZCAgICAgICAgICAgICAgICAKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IHZhbGlkYXRvci5hbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldEJpbmRpbmdzKClbMF07Ci0KLSAgICAgIC8vQ3JlYXRlIHRoZSB0eXBlcyByZWdpc3RyeQotICAgICAgVHlwZXNSZWdpc3RyeSByZWdpc3RyeSA9Ci0gICAgICAgIG5ldyBUeXBlc1JlZ2lzdHJ5KAotICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmdldFdTRExEb2N1bWVudCgpLmdldERlZmluaXRpb25zKCksCi0gICAgICAgICAgdmFsaWRhdG9yKTsKLQotICAgICAgLy8gRmluZCBhbiBvcGVyYXRpb24gbWF0Y2ggICAgICAgIAotICAgICAgT3BlcmF0aW9uU2lnbmF0dXJlLk9wZXJhdGlvbk1hdGNoIG1hdGNoID0KLSAgICAgICAgT3BlcmF0aW9uU2lnbmF0dXJlLm1hdGNoT3BlcmF0aW9uKAotICAgICAgICAgIHJlcXVlc3REb2MsCi0gICAgICAgICAgYWN0aW9uLAotICAgICAgICAgIGJpbmRpbmcsCi0gICAgICAgICAgcmVnaXN0cnkpOwotICAgICAgaWYgKG1hdGNoID09IG51bGwpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIEdldCB0aGUgYmluZGluZyBvcGVyYXRpb24gYmFzZWQgb24gdGhlIG1hdGNoCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSBtYXRjaC5nZXRPcGVyYXRpb24oKTsKLQotICAgICAgLy8gSWYgdGhpcyBpcyBub3QgcnBjLWxpdGVyYWwsIHRoZW4gcmV0dXJuIG5vdEFwcGxpY2FibGUgcmVzdWx0Ci0gICAgICBpZiAoIVdTRExVdGlscwotICAgICAgICAuaXNScGNMaXRlcmFsKG1hdGNoLmdldE9wZXJhdGlvblN0eWxlKCksIGJpbmRpbmdPcGVyYXRpb24pKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotICAgICAgLy8gbG9vayBmb3IgPHNvYXA6Qm9keT4gZWxlbWVudHM6Ci0gICAgICBOb2RlTGlzdCBzb2FwQm9keUxpc3QgPQotICAgICAgICByZXNwb25zZURvYy5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKAotICAgICAgICAgIFdTSUNvbnN0YW50cy5OU19VUklfU09BUCwKLSAgICAgICAgICBYTUxVdGlscy5TT0FQX0VMRU1fQk9EWSk7Ci0gICAgICBpZiAoKHNvYXBCb2R5TGlzdCA9PSBudWxsKSB8fCAoc29hcEJvZHlMaXN0LmdldExlbmd0aCgpID09IDApKQotICAgICAgICAvLyBSZXNwb25zZSBkb2VzIG5vdCBjb250YWluIGFueSBzb2FwIEJvZHkgZWxlbWVudHMKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgLy8gY2hlY2sgdGhhdCBubyA8c29hcDpCb2R5PiBjaGlsZCBvciBncmFuZGNoaWxkIGVsZW1lbnRzIGNvbnRhaW5zIGEgc29hcDplbmNvZGluZ1N0eWxlIGF0dHJpYnV0ZQotICAgICAgLy8gRm9yIGVhY2ggPHNvYXA6Qm9keT4KLSAgICAgIGJvb2xlYW4gZ3JhbmRDaGlsZEZvdW5kID0gZmFsc2U7Ci0gICAgICBmb3IgKGludCBuID0gMDsgbiA8IHNvYXBCb2R5TGlzdC5nZXRMZW5ndGgoKTsgbisrKQotICAgICAgewotICAgICAgICBFbGVtZW50IG5leHRCb2R5RWxlbSA9IChFbGVtZW50KSBzb2FwQm9keUxpc3QuaXRlbShuKTsKLSAgICAgICAgLy8gUkVNT1ZFOiBUaGlzIHdpbGwgZ2V0IGFsbCBub2RlcyAoY2hpbGQsIGdyYW5kY2hpbGRyZW4sIGV0Yy4pCi0gICAgICAgIC8vTm9kZUxpc3QgY2hpbGRMaXN0ID0gbmV4dEJvZHlFbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7Ci0gICAgICAgIE5vZGVMaXN0IGNoaWxkTGlzdCA9IG5leHRCb2R5RWxlbS5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgICAgIGlmIChjaGlsZExpc3QgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIC8vIGNoZWNrIGFsbCBjaGlsZCBlbGVtZW50cwotICAgICAgICAgIGZvciAoaW50IG0gPSAwOyBtIDwgY2hpbGRMaXN0LmdldExlbmd0aCgpOyBtKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKGNoaWxkTGlzdC5pdGVtKG0pLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEVsZW1lbnQgbmV4dENoaWxkRWxlbSA9IChFbGVtZW50KSBjaGlsZExpc3QuaXRlbShtKTsKLSAgICAgICAgICAgICAgLy8gY2hlY2sgY2hpbGRyZW4gb2YgdGhpcyBjaGlsZAotICAgICAgICAgICAgICAvLyBSRU1PVkU6IFRoaXMgd2lsbCBnZXQgYWxsIG5vZGVzIChjaGlsZCwgZ3JhbmRjaGlsZHJlbiwgZXRjLikKLSAgICAgICAgICAgICAgTm9kZUxpc3QgZ3JhbmRDaGlsZExpc3QgPSBuZXh0Q2hpbGRFbGVtLmdldENoaWxkTm9kZXMoKTsKLSAgICAgICAgICAgICAgaWYgKGdyYW5kQ2hpbGRMaXN0ICE9IG51bGwpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBwID0gMDsgcCA8IGdyYW5kQ2hpbGRMaXN0LmdldExlbmd0aCgpOyBwKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgaWYgKGdyYW5kQ2hpbGRMaXN0Lml0ZW0ocCkuZ2V0Tm9kZVR5cGUoKQotICAgICAgICAgICAgICAgICAgICA9PSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIAlncmFuZENoaWxkRm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBFbGVtZW50IG5leHRHcmFuZENoaWxkRWxlbSA9Ci0gICAgICAgICAgICAgICAgICAgICAgKEVsZW1lbnQpIGdyYW5kQ2hpbGRMaXN0Lml0ZW0ocCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0R3JhbmRDaGlsZEVsZW0KLSAgICAgICAgICAgICAgICAgICAgICAuZ2V0QXR0cmlidXRlTm9kZU5TKAotICAgICAgICAgICAgICAgICAgICAgICAgV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQLAotICAgICAgICAgICAgICAgICAgICAgICAgImVuY29kaW5nU3R5bGUiKQotICAgICAgICAgICAgICAgICAgICAgICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAvLyBBc3NlcnRpb24gZmFpbGVkIChBREQgaGlnaGxpZ2h0IHRoZSBjaGlsZCBoZXJlID8pCi0gICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgaWYgKCFncmFuZENoaWxkRm91bmQpCi0gICAgICB7Ci0gICAgICAJdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxNjAwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTYwMC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDE0YzFhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxNjAwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci0KLQotLyoqCi0gKiBCUDE2MDAKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgZW52ZWxvcGU8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIGVudmVsb3BlIGNvbmZvcm1zIHRvIHRoZSBzdHJ1Y3R1cmUgc3BlY2lmaWVkIGluIFNPQVAgMS4xIFNlY3Rpb24gNC48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAxNjAwIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlAxNjAwKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdldHRpbmcgYSBtZXNzYWdlIGRvY3VtZW50Ci0gICAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLQotICAgICAgLy8gSWYgdGhlIG1lc3NhZ2UgaXMgZW1wdHkgb3IgaW52YWxpZCwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgIGlmIChkb2MgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgIAlpZiAodGhpcy52YWxpZGF0b3IuaXNPbmVXYXlSZXNwb25zZShlbnRyeUNvbnRleHQpKQotICAgICAgCQl0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgICBlbHNlIAotICAgICAgICAJdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSBsb2cgbWVzc2FnZSBpcyBlbXB0eSBvciBpbnZhbGlkLiIpOwotICAgICAgfQotICAgICAgLy8gU09BUCAxLjEgc3BlY2lmaWNhdGlvbnMsIFNlY3Rpb24gNC4KLSAgICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvTk9URS1TT0FQLTIwMDAwNTA4LyNfVG9jNDc4MzgzNDk0Ci0KLSAgICAgIC8vIFRoZSBuYW1lc3BhY2UgaWRlbnRpZmllciBmb3IgdGhlIGVsZW1lbnRzIGFuZCBhdHRyaWJ1dGVzIGRlZmluZWQKLSAgICAgIC8vIGluIHRoaXMgc2VjdGlvbiBpcyAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8iLgotCi0gICAgICAvLyAgbyBUaGUgRW52ZWxvcGUgaXMgdGhlIHRvcCBlbGVtZW50IG9mIHRoZSBYTUwgZG9jdW1lbnQgcmVwcmVzZW50aW5nIHRoZSBtZXNzYWdlLgotCi0gICAgICAvLyBSdWxlIDEuIEVudmVsb3BlCi0gICAgICAvLyAgbyBUaGUgZWxlbWVudCBuYW1lIGlzICJFbnZlbG9wZSIuCi0gICAgICAvLyAgbyBUaGUgZWxlbWVudCBNVVNUIGJlIHByZXNlbnQgaW4gYSBTT0FQIG1lc3NhZ2UKLSAgICAgIC8vICBvIFRoZSBlbGVtZW50IE1BWSBjb250YWluIG5hbWVzcGFjZSBkZWNsYXJhdGlvbnMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIGF0dHJpYnV0ZXMuCi0gICAgICAvLyAgICBJZiBwcmVzZW50LCBzdWNoIGFkZGl0aW9uYWwgYXR0cmlidXRlcyBNVVNUIGJlIG5hbWVzcGFjZS1xdWFsaWZpZWQuIFNpbWlsYXJseSwKLSAgICAgIC8vICAgIHRoZSBlbGVtZW50IE1BWSBjb250YWluIGFkZGl0aW9uYWwgc3ViIGVsZW1lbnRzLiBJZiBwcmVzZW50IHRoZXNlIGVsZW1lbnRzCi0gICAgICAvLyAgICBNVVNUIGJlIG5hbWVzcGFjZS1xdWFsaWZpZWQgYW5kIE1VU1QgZm9sbG93IHRoZSBTT0FQIEJvZHkgZWxlbWVudC4KLQotICAgICAgLy8gR2V0dGluZyB0aGUgdG9wIGVsZW1lbnQKLSAgICAgIEVsZW1lbnQgZWxlbWVudCA9IGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKTsKLQotICAgICAgLy8gQXNzdW1pbmcgdGhhdCB0aGUgdG9wIGVsZW1lbnQgc2hvdWxkIGJlIHNvYXA6RW52ZWxvcGUKLSAgICAgIC8vIElmIG5vdCwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgIGlmICghZWxlbWVudC5nZXRMb2NhbE5hbWUoKS5lcXVhbHMoWE1MVXRpbHMuU09BUF9FTEVNX0VOVkVMT1BFKQotICAgICAgICB8fCAhaXNTT0FQTmFtZXNwYWNlKGVsZW1lbnQuZ2V0TmFtZXNwYWNlVVJJKCkpKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIHRvcCBlbGVtZW50IGlzIG5vdCBzb2FwOkVudmVsb3BlIik7Ci0KLSAgICAgIC8vIENvbGxlY3RpbmcgYWxsIHRoZSBuYW1lc3BhY2UgZGVjbGFyYXRpb25zCi0gICAgICBDb2xsZWN0aW9uIGVudmVsb3BlTmFtZXNwYWNlcyA9IGNvbGxlY3ROYW1lc3BhY2VzKGVsZW1lbnQuZ2V0QXR0cmlidXRlcygpKTsKLSAgICAgIGVudmVsb3BlTmFtZXNwYWNlcy5hZGQoV1NJQ29uc3RhbnRzLk5TX1VSSV9YTUxOUyk7Ci0KLSAgICAgIC8vIEdldHRpbmcgYW4gYXR0cmlidXRlIHRoYXQgaXMgbm90IGluIGFueSBvZiB0aGUgbmFtZXNwYWNlcwotICAgICAgQXR0ciBub3RWYWxpZEF0dHIgPSBnZXROb3RWYWxpZEF0dHIoCi0gICAgICAgIGVsZW1lbnQuZ2V0QXR0cmlidXRlcygpLAotICAgICAgICBlbnZlbG9wZU5hbWVzcGFjZXMpOwotCi0gICAgICAvLyBJZiBmb3VuZCBvbmUsIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICBpZiAobm90VmFsaWRBdHRyICE9IG51bGwpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgYXR0cmlidXRlICIKLSAgICAgICAgICArIG5vdFZhbGlkQXR0ci5nZXROb2RlTmFtZSgpICsgIiBpcyBub3QgbmFtZXNwYWNlLXF1YWxpZmllZCIpOwotCi0KLSAgICAgIC8vIFJ1bGUgMi4gSGVhZGVyIAotICAgICAgLy8gIG8gVGhlIGVsZW1lbnQgbmFtZSBpcyAiSGVhZGVyIi4KLSAgICAgIC8vICBvIFRoZSBlbGVtZW50IE1BWSBiZSBwcmVzZW50IGluIGEgU09BUCBtZXNzYWdlLiBJZiBwcmVzZW50LCB0aGUgZWxlbWVudAotICAgICAgLy8gICAgTVVTVCBiZSB0aGUgZmlyc3QgaW1tZWRpYXRlIGNoaWxkIGVsZW1lbnQgb2YgYSBTT0FQIEVudmVsb3BlIGVsZW1lbnQuCi0gICAgICAvLyAgbyBUaGUgZWxlbWVudCBNQVkgY29udGFpbiBhIHNldCBvZiBoZWFkZXIgZW50cmllcyBlYWNoIGJlaW5nIGFuIGltbWVkaWF0ZQotICAgICAgLy8gICAgY2hpbGQgZWxlbWVudCBvZiB0aGUgU09BUCBIZWFkZXIgZWxlbWVudC4gQWxsIGltbWVkaWF0ZSBjaGlsZCBlbGVtZW50cwotICAgICAgLy8gICAgb2YgdGhlIFNPQVAgSGVhZGVyIGVsZW1lbnQgTVVTVCBiZSBuYW1lc3BhY2UtcXVhbGlmaWVkLgotCi0gICAgICAvLyBHZXR0aW5nIHRoZSBmaXJzdCBzdWIgZWxlbWVudCBvZiB0aGUgZW52ZWxvcGUKLSAgICAgIGVsZW1lbnQgPSBYTUxVdGlscy5nZXRGaXJzdENoaWxkKGVsZW1lbnQpOwotICAgICAgQ29sbGVjdGlvbiBoZWFkZXJOYW1lc3BhY2VzID0gY29sbGVjdE5hbWVzcGFjZXMoZWxlbWVudC5nZXRBdHRyaWJ1dGVzKCkpOwotCi0gICAgICAvLyBJZiB0aGUgY2hpbGQgaXMgc29hcDpIZWFkZXIKLSAgICAgIGlmIChlbGVtZW50ICE9IG51bGwKLSAgICAgICAgJiYgZWxlbWVudC5nZXRMb2NhbE5hbWUoKS5lcXVhbHMoWE1MVXRpbHMuU09BUF9FTEVNX0hFQURFUikKLSAgICAgICAgJiYgaXNTT0FQTmFtZXNwYWNlKGVsZW1lbnQuZ2V0TmFtZXNwYWNlVVJJKCkpKQotICAgICAgewotCi0gICAgICAgIC8vIEdvaW5nIHRocm91Z2ggYWxsIHRoZSBIZWFkZXIgZW50cmllcwotICAgICAgICBFbGVtZW50IGhlYWRlckVudHJ5ID0gWE1MVXRpbHMuZ2V0Rmlyc3RDaGlsZChlbGVtZW50KTsKLSAgICAgICAgd2hpbGUgKGhlYWRlckVudHJ5ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBDb2xsZWN0aW5nIGFsbCB0aGUgbmFtZXNwYWNlcyBmb3IgdGhlIGN1cnJlbnQgZW50cnkKLSAgICAgICAgICBDb2xsZWN0aW9uIGhlYWRlckVudHJ5TmFtZXNwYWNlcyA9IGNvbGxlY3ROYW1lc3BhY2VzKAotICAgICAgICAgICAgaGVhZGVyRW50cnkuZ2V0QXR0cmlidXRlcygpKTsKLQotICAgICAgICAgIC8vIElmIHRoZSBlbnRyeSBpcyBub3QgaW4gdGhlIG5hbWVzcGFjZXMsIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgaWYgKCFlbnZlbG9wZU5hbWVzcGFjZXMuY29udGFpbnMoaGVhZGVyRW50cnkuZ2V0TmFtZXNwYWNlVVJJKCkpCi0gICAgICAgICAgICAmJiAhaGVhZGVyTmFtZXNwYWNlcy5jb250YWlucyhoZWFkZXJFbnRyeS5nZXROYW1lc3BhY2VVUkkoKSkKLSAgICAgICAgICAgICYmICFoZWFkZXJFbnRyeU5hbWVzcGFjZXMuY29udGFpbnMoaGVhZGVyRW50cnkuZ2V0TmFtZXNwYWNlVVJJKCkpKQotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSBoZWFkZXIgZW50cnkgIgotICAgICAgICAgICAgICArIGhlYWRlckVudHJ5LmdldE5vZGVOYW1lKCkgKyAiIGlzIG5vdCBuYW1lc3BhY2UtcXVhbGlmaWVkIik7Ci0KLSAgICAgICAgICAvLyBHZXR0aW5nIHRoZSBuZXh0IEhlYWRlciBlbnRyeQotICAgICAgICAgIGhlYWRlckVudHJ5ID0gWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcoaGVhZGVyRW50cnkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gR2V0dGluZyB0aGUgbmV4dCBzdWIgZWxlbWVudCBvZiB0aGUgZW52ZWxvcGUKLSAgICAgICAgZWxlbWVudCA9IFhNTFV0aWxzLmdldE5leHRTaWJsaW5nKGVsZW1lbnQpOwotICAgICAgfQotCi0KLSAgICAgIC8vIFJ1bGUgMy4gQm9keQotICAgICAgLy8gIG8gVGhlIGVsZW1lbnQgbmFtZSBpcyAiQm9keSIuCi0gICAgICAvLyAgbyBUaGUgZWxlbWVudCBNVVNUIGJlIHByZXNlbnQgaW4gYSBTT0FQIG1lc3NhZ2UgYW5kIE1VU1QgYmUgYW4gaW1tZWRpYXRlCi0gICAgICAvLyAgICBjaGlsZCBlbGVtZW50IG9mIGEgU09BUCBFbnZlbG9wZSBlbGVtZW50LiBJdCBNVVNUIGRpcmVjdGx5IGZvbGxvdyB0aGUKLSAgICAgIC8vICAgIFNPQVAgSGVhZGVyIGVsZW1lbnQgaWYgcHJlc2VudC4gT3RoZXJ3aXNlIGl0IE1VU1QgYmUgdGhlIGZpcnN0IGltbWVkaWF0ZQotICAgICAgLy8gICAgY2hpbGQgZWxlbWVudCBvZiB0aGUgU09BUCBFbnZlbG9wZSBlbGVtZW50LgotICAgICAgLy8gIG8gVGhlIGVsZW1lbnQgTUFZIGNvbnRhaW4gYSBzZXQgb2YgYm9keSBlbnRyaWVzIGVhY2ggYmVpbmcgYW4gaW1tZWRpYXRlCi0gICAgICAvLyAgICBjaGlsZCBlbGVtZW50IG9mIHRoZSBTT0FQIEJvZHkgZWxlbWVudC4gSW1tZWRpYXRlIGNoaWxkIGVsZW1lbnRzIG9mIHRoZQotICAgICAgLy8gICAgU09BUCBCb2R5IGVsZW1lbnQgTUFZIGJlIG5hbWVzcGFjZS1xdWFsaWZpZWQuIFNPQVAgZGVmaW5lcyB0aGUgU09BUCBGYXVsdAotICAgICAgLy8gICAgZWxlbWVudCwgd2hpY2ggaXMgdXNlZCB0byBpbmRpY2F0ZSBlcnJvciBtZXNzYWdlcy4KLQotICAgICAgLy8gaWYgdGhlIFNPQVAgQm9keSBlbGVtZW50IGlzIG5vdCBwcmVzZW50ZWQsIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICBpZiAoZWxlbWVudCA9PSBudWxsCi0gICAgICAgIHx8ICFlbGVtZW50LmdldExvY2FsTmFtZSgpLmVxdWFscyhYTUxVdGlscy5TT0FQX0VMRU1fQk9EWSkKLSAgICAgICAgfHwgIWlzU09BUE5hbWVzcGFjZShlbGVtZW50LmdldE5hbWVzcGFjZVVSSSgpKSkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSBzb2FwOkJvZHkgZWxlbWVudCBpcyBub3QgcHJlc2VudGVkICIKLSAgICAgICAgICArICJvciBmb2xsb3dzIGFuIGFkZGl0aW9uYWwgc3ViIGVsZW1lbnQgb2Ygc29hcDpFbnZlbG9wZSIpOwotCi0gICAgICAvLyBQcm9jZXNzaW5nIGFsbCBvdGhlciBzdWIgZWxlbWVudHMgb2YgdGhlIGVudmVsb3BlCi0gICAgICBlbGVtZW50ID0gWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcoZWxlbWVudCk7Ci0gICAgICB3aGlsZSAoZWxlbWVudCAhPSBudWxsKQotICAgICAgewotICAgICAgICAvLyBDaGVja2luZyBmb3IgdGhlIFNPQVAgSGVhZGVyIGVsZW1lbnQKLSAgICAgICAgaWYgKGVsZW1lbnQuZ2V0TG9jYWxOYW1lKCkuZXF1YWxzKFhNTFV0aWxzLlNPQVBfRUxFTV9IRUFERVIpCi0gICAgICAgICAgJiYgaXNTT0FQTmFtZXNwYWNlKGVsZW1lbnQuZ2V0TmFtZXNwYWNlVVJJKCkpKQotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oCi0gICAgICAgICAgICAgICJUaGUgc29hcDpIZWFkZXIgZWxlbWVudCBjYW5ub3QgZm9sbG93IHRoZSBzb2FwOkJvZHkgZWxlbWVudCIpOwotCi0gICAgICAgIC8vIENvbGxlY3RpbmcgYWxsIHRoZSBuYW1lc3BhY2VzIGZvciB0aGUgY3VycmVudCBlbGVtZW50Ci0gICAgICAgIENvbGxlY3Rpb24gZWxlbWVudE5hbWVzcGFjZXMgPSBjb2xsZWN0TmFtZXNwYWNlcygKLSAgICAgICAgICBlbGVtZW50LmdldEF0dHJpYnV0ZXMoKSk7Ci0KLSAgICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgbm90IGluIHRoZSBuYW1lc3BhY2VzLCB0aGUgYXNzZXJ0aW9uIGZhaWxlZAotICAgICAgICBpZiAoIWVudmVsb3BlTmFtZXNwYWNlcy5jb250YWlucyhlbGVtZW50LmdldE5hbWVzcGFjZVVSSSgpKQotICAgICAgICAgICYmICFlbGVtZW50TmFtZXNwYWNlcy5jb250YWlucyhlbGVtZW50LmdldE5hbWVzcGFjZVVSSSgpKSkKLSAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIHN1YiBlbnZlbG9wZSBlbGVtZW50ICIKLSAgICAgICAgICAgICsgZWxlbWVudC5nZXROb2RlTmFtZSgpICsgIiBpcyBub3QgbmFtZXNwYWNlLXF1YWxpZmllZCIpOwotCi0gICAgICAgIC8vIEdldHRpbmcgdGhlIG5leHQgc3ViIGVsZW1lbnQgb2YgdGhlIGVudmVsb3BlCi0gICAgICAgIGVsZW1lbnQgPSBYTUxVdGlscy5nZXROZXh0U2libGluZyhlbGVtZW50KTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gYWZlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBhZmUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGFuYWUpCi0JewotCSAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLQl9Ci0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotICAvKioKLSAgICogQ29sbGVjdHMgYWxsIHRoZSBuYW1lc3BhY2UgZGVjbGFyYXRpb25zIGZyb20gYXR0cmlidXRlcyBjb2xsZWN0aW9uCi0gICAqIEBwYXJhbSBhdHRycyBhbiBhdHRyaWJ1dGVzIGNvbGxlY3Rpb24KLSAgICogQHJldHVybiBhIGNvbGxlY3Rpb24gb2YgbmFtZXNwYWNlcwotICAgKi8KLSAgcHJpdmF0ZSBDb2xsZWN0aW9uIGNvbGxlY3ROYW1lc3BhY2VzKE5hbWVkTm9kZU1hcCBhdHRycykKLSAgewotICAgIENvbGxlY3Rpb24gbnMgPSBuZXcgSGFzaFNldCgpOwotICAgIGlmIChhdHRycyAhPSBudWxsKQotICAgIHsKLSAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBhdHRycy5nZXRMZW5ndGgoKTsgaSsrKQotICAgICAgewotICAgICAgICBBdHRyIGF0dHIgPSAoQXR0cikgYXR0cnMuaXRlbShpKTsKLSAgICAgICAgaWYgKGF0dHIuZ2V0TmFtZXNwYWNlVVJJKCkgIT0gbnVsbAotICAgICAgICAgICYmIGF0dHIuZ2V0TmFtZXNwYWNlVVJJKCkuZXF1YWxzKFdTSUNvbnN0YW50cy5OU19VUklfWE1MTlMpKQotICAgICAgICAgIG5zLmFkZChhdHRyLmdldFZhbHVlKCkpOwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBuczsKLSAgfQotCi0gIC8qKgotICAgKiBSZXRyaWV2ZXMgYW4gYXR0cmlidXRlIHRoYXQgaXMgbm90IGluIG5hbWVzcGFjZXMKLSAgICogQHBhcmFtIGF0dHJzIGFuIGF0dHJpYnV0ZXMgY29sbGVjdGlvbgotICAgKiBAcGFyYW0gbnMgYSBuYW1lc3BhY2VzIGNvbGxlY3Rpb24KLSAgICogQHJldHVybiBhbiBhdHRyaWJ0dWUgdGhhdCBpcyBub3QgaW4gYW55IG9mIHRoZSBuYW1lc3BhY2VzIHNwZWNpZmllZAotICAgKi8KLSAgcHJpdmF0ZSBBdHRyIGdldE5vdFZhbGlkQXR0cihOYW1lZE5vZGVNYXAgYXR0cnMsIENvbGxlY3Rpb24gbnMpCi0gIHsKLSAgICBBdHRyIHJldCA9IG51bGw7Ci0gICAgaWYgKGF0dHJzICE9IG51bGwpCi0gICAgewotICAgICAgZm9yKGludCBpID0gMDsgaSA8IGF0dHJzLmdldExlbmd0aCgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIEF0dHIgYXR0ciA9IChBdHRyKSBhdHRycy5pdGVtKGkpOwotICAgICAgICBpZiAoYXR0ci5nZXROYW1lc3BhY2VVUkkoKSA9PSBudWxsCi0gICAgICAgICAgfHwgIW5zLmNvbnRhaW5zKGF0dHIuZ2V0TmFtZXNwYWNlVVJJKCkpKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0ID0gYXR0cjsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmV0OwotICB9Ci0KLSAgLyoqCi0gICAqIFF1YWxpZmllcyB3aGV0aGVyIGEgbmFtZXNwYWNlIGlzIHRoZSBTT0FQIG5hbWVzcGFjZQotICAgKiAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8iCi0gICAqIEBwYXJhbSBucyBhIG5hbWVzcGFjZSB0byBiZSBxdWFsaWZpZWQKLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBuYW1lc3BhY2UgaXMgcXVhbGlmaWVkLCBmYWxzZSBvdGhlcndpc2UKLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBpc1NPQVBOYW1lc3BhY2UoU3RyaW5nIG5zKQotICB7Ci0gICAgaWYgKG5zID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gbnMuZXF1YWxzKFdTSUNvbnN0YW50cy5OU19VUklfU09BUCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTYwMS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDE2MDEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzhlN2M0NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTYwMS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uOwotCi0KLS8qKgotICogQlAxNjAxLgotICovCi1wdWJsaWMgY2xhc3MgQlAxNjAxIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlAxNjAxKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIE9uZS13YXkgcmVzcG9uc2VzIHdpbGwgbm90IGNvbnRhaW4gYSBTT0FQIG1lc3NhZ2UKLSAgICBpZiAodGhpcy52YWxpZGF0b3IuaXNPbmVXYXlSZXNwb25zZShlbnRyeUNvbnRleHQpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgLy8gVHJ5IHRvIHBhcnNlIHRoZSBTT0FQIG1lc3NhZ2UKLSAgICAgICAgLy9Eb2N1bWVudCBkb2MgPSBYTUxVdGlscy5wYXJzZVhNTChlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgWE1MVXRpbHMucGFyc2VYTUwoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKSk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoV1NJRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIGlmIChlLmdldFRhcmdldEV4Y2VwdGlvbigpIGluc3RhbmNlb2YgU0FYRXhjZXB0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgICBlLmdldFRhcmdldEV4Y2VwdGlvbigpLmdldE1lc3NhZ2UoKSwKLSAgICAgICAgICAgICAgZW50cnlDb250ZXh0KTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxNzAxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTcwMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjY2ExYzg5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxNzAxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVGVzdFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci0KLWltcG9ydCBjb20uaWJtLndzZGwudXRpbC54bWwuRE9NMldyaXRlcjsKLQotCi0vKioKLSAqIEJQMTcwMS4KLSAqLwotcHVibGljIGNsYXNzIEJQMTcwMSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQMTcwMShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBpZiAodGhpcy52YWxpZGF0b3IuaXNPbmVXYXlSZXNwb25zZShlbnRyeUNvbnRleHQpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgLy8gVEVNUDogVXNlIGxvY2FsIGNvcHkgb2Ygc2NoZW1hIGZvciBub3cKLSAgICAgICAgLy8gRG9jdW1lbnQgZG9jID0gWE1MVXRpbHMucGFyc2VYTUwoZW50cnlDb250ZXh0LmdldExvZ0VudHJ5KCkuZ2V0TWVzc2FnZSgpLCBXU0lDb25zdGFudHMuTlNfVVJJX1NPQVApOwotICAgICAgICAvLyBEb2N1bWVudCBkb2MgPSBYTUxVdGlscy5wYXJzZVhNTChlbnRyeUNvbnRleHQuZ2V0TG9nRW50cnkoKS5nZXRNZXNzYWdlKCksICJzY2hlbWFzL3NvYXBFbnZlbG9wZS54c2QiKTsKLQotICAgICAgICAvLyBHZXQgYSBub24tdmFsaWRhdGVkIGJ1dCAod2VsbC1mb3JtZWQpIERPTSB0cmVlIG9mIHRoZSBtZXNzYWdlIGNvbnRlbnQKLSAgICAgICAgRG9jdW1lbnQgZG9jID0KLSAgICAgICAgICBYTUxVdGlscy5wYXJzZVhNTChlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpKTsKLQotICAgICAgICAvLyBSZW1vdmUgYW55IHhzaTp0eXBlcyBhdHRyaWJ1dGVzIGZyb20gdGhlIG1lc3NhZ2UgKFNPQVAgSGVhZGVyLCBCb2R5IGFuZCBFbnZlbG9wZSBpdHNlbGYpCi0KLSAgICAgICAgTm9kZUxpc3QgZWxlbWVudExpc3QgPSBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTsKLSAgICAgICAgaWYgKGVsZW1lbnRMaXN0ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGVsZW1lbnRMaXN0LmdldExlbmd0aCgpOyBpKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgRWxlbWVudCBlbGVtZW50ID0gKEVsZW1lbnQpIGVsZW1lbnRMaXN0Lml0ZW0oaSk7Ci0gICAgICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZU5TKFdTSUNvbnN0YW50cy5OU19VUklfWFNJLCAidHlwZSIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIFdyaXRlIG91dCB0aGUgKHBvdGVudGlhbGx5KSBtb2RpZmllZCB0cmVlIHRvIFN0cmluZwotICAgICAgICBTdHJpbmcgZmlsdGVyZWRNZXNzYWdlID0gRE9NMldyaXRlci5ub2RlVG9TdHJpbmcoZG9jKTsKLQotICAgICAgICAvLyBQYXJzZSB0aGUgcmVzdWx0IHdpdGggdmFsaWRhdGlvbiAib24iCi0gICAgICAgIFhNTFV0aWxzLnBhcnNlWE1MKAotICAgICAgICAgIGZpbHRlcmVkTWVzc2FnZSwKLSAgICAgICAgICBUZXN0VXRpbHMuZ2V0U09BUFNjaGVtYUxvY2F0aW9uKCkpOwotICAgICAgfQotICAgICAgY2F0Y2ggKFdTSUV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICBpZiAoZS5nZXRUYXJnZXRFeGNlcHRpb24oKSBpbnN0YW5jZW9mIFNBWEV4Y2VwdGlvbikKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICAgIGZhaWx1cmVEZXRhaWwgPQotICAgICAgICAgICAgdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgICAgICAgVXRpbHMuZ2V0RXhjZXB0aW9uRGV0YWlscyhlLmdldFRhcmdldEV4Y2VwdGlvbigpKSwKLSAgICAgICAgICAgICAgZW50cnlDb250ZXh0KTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChVdGlscy5nZXRFeGNlcHRpb25EZXRhaWxzKGUpLCBlbnRyeUNvbnRleHQpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxNzU1LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQMTc1NS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjgzZWUyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlAxNzU1LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLS8qKgotICogQlAxNzU1Ci0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIG5vbi1mYXVsdCBlbnZlbG9wZSBjb250YWluaW5nIGEgc29hcDpib2R5IHdpdGggYXQgbGVhc3Qgb25lIGVsZW1lbnQsIGFuZCB0aGF0IGlzIHJlZmVycmVkIGJ5IGEgYmluZGluZyBzdHlsZSBSUEMtbGl0ZXJhbDwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5FYWNoIHBhcnQgYWNjZXNzb3IgZWxlbWVudCBpbiB0aGUgZW52ZWxvcGUgaGFzIGEgbG9jYWwgbmFtZSBvZiB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUgbmFtZSBhdHRyaWJ1dGUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgd3NkbDpwYXJ0IGVsZW1lbnQuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEJQMTc1NSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgewotCi0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDE3NTUoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgaWYgKHZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCkpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0KLSAgICAgIC8vIEdldHRpbmcgYSBtZXNzYWdlIGRvY3VtZW50Ci0gICAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLQotICAgICAgRWxlbWVudCBzb2FwT3BlcmF0aW9uID0gbnVsbDsKLSAgICAgIC8vIElmIHRoZXJlIGlzIGEgRmF1bHQgZW50cnkgb3Igbm8gYm9keSBlbnRyaWVzLAotICAgICAgLy8gdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKHZhbGlkYXRvci5pc0ZhdWx0KGRvYykKLSAgICAgICAgfHwgKHNvYXBPcGVyYXRpb24gPSB2YWxpZGF0b3IuZ2V0U29hcEJvZHlDaGlsZChkb2MpKSA9PSBudWxsKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotCi0gICAgICAvLyBDcmVhdGluZyBhIHF1YWxpZmllZCBuYW1lIG9mIHBvdGVudGlhbCBTT0FQIG9wZXJhdGlvbgotICAgICAgUU5hbWUgb3BlcmF0aW9uUU5hbWUgPSBuZXcgUU5hbWUoCi0gICAgICAgIHNvYXBPcGVyYXRpb24uZ2V0TmFtZXNwYWNlVVJJKCksIHNvYXBPcGVyYXRpb24uZ2V0TG9jYWxOYW1lKCkpOwotCi0gICAgICAvLyBSZXRyaWV2aW5nIGFsbCB0aGUgUlBDIGJpbmRpbmcgb3BlcmF0aW9ucyBmcm9tIHdzZGw6YmluZGluZwotICAgICAgQmluZGluZ09wZXJhdGlvbltdIHJwY0JpbmRpbmdPcGVyYXRpb25zID0KLSAgICAgICAgdmFsaWRhdG9yLmdldE1hdGNoaW5nQmluZGluZ09wcygKLSAgICAgICAgICBXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JJTkRfU1RZTEVfUlBDLAotICAgICAgICAgIHZhbGlkYXRvci5hbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldEJpbmRpbmdzKCkpOwotCi0gICAgICAvLyBSZXRyaWV2aW5nIGJpbmRpbmcgb3BlcmF0aW9uIGJ5IGdpdmVuIG9wZXJhdGlvbiBuYW1lCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSB2YWxpZGF0b3IuZ2V0T3BlcmF0aW9uTWF0Y2goCi0gICAgICAgIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5VHlwZSgpLAotICAgICAgICBvcGVyYXRpb25RTmFtZSwKLSAgICAgICAgcnBjQmluZGluZ09wZXJhdGlvbnMpOwotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBubyBtYXRjaGVkIG9wZXJhdGlvbiwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24gPT0gbnVsbCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgLy8gRmluZGluZyBvcGVyYXRpb24gbWVzc2FnZSBwYXJ0cyBhbmQgZXh0ZW5zaWJpbGl0eSBlbGVtcwotICAgICAgLy8gaW4gdGhlIGJpbmRpbmcgZGVwZW5kaW5nIG9uIG1lc3NhZ2UgdHlwZQotICAgICAgTGlzdCBvcGVyYXRpb25NZXNzYWdlUGFydHMgPSBudWxsOwotICAgICAgTGlzdCBleHRFbGVtcyA9IG51bGw7Ci0gICAgICBpZiAoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldFR5cGUoKS5lcXVhbHMoCi0gICAgICAgIE1lc3NhZ2VFbnRyeS5UWVBFX1JFUVVFU1QpKQotICAgICAgewotICAgICAgICBvcGVyYXRpb25NZXNzYWdlUGFydHMgPSBiaW5kaW5nT3BlcmF0aW9uLmdldE9wZXJhdGlvbigpCi0gICAgICAgICAgLmdldElucHV0KCkuZ2V0TWVzc2FnZSgpLmdldE9yZGVyZWRQYXJ0cyhudWxsKTsKLSAgICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCkgIT0gbnVsbCkKLSAgICAgICAgICBleHRFbGVtcyA9Ci0gICAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBvcGVyYXRpb25NZXNzYWdlUGFydHMgPSBiaW5kaW5nT3BlcmF0aW9uLmdldE9wZXJhdGlvbigpCi0gICAgICAgICAgLmdldE91dHB1dCgpLmdldE1lc3NhZ2UoKS5nZXRPcmRlcmVkUGFydHMobnVsbCk7Ci0gICAgICAgIGlmIChiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKSAhPSBudWxsKQotICAgICAgICAgIGV4dEVsZW1zID0KLSAgICAgICAgICAgIGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ091dHB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgfQotCi0gICAgICAvLyBJZiB0aGUgbWVzc2FnZSBpcyBub3QgbGl0ZXJhbCwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKCF2YWxpZGF0b3IuaXNMaXRlcmFsKGV4dEVsZW1zKSkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotCi0gICAgICAvKiBCYXNpYyBQcm9maWxlIFZlcnNpb24gMS4xIChodHRwOi8vd3d3LndzLWkub3JnL1Byb2ZpbGVzL0Jhc2ljLzIwMDMtMTIvQmFzaWNQcm9maWxlLTEuMS5odG0pCi0gICAgICAgKiBzYXlzIHRoYXQgdGhlIG9yZGVyIG9mIHRoZSBlbGVtZW50cyBpbiB0aGUgc29hcDpib2R5IG9mIGFuIEVOVkVMT1BFIE1VU1QgYmUKLSAgICAgICAqIHRoZSBzYW1lIGFzIHRoYXQgb2YgdGhlIHdzZGw6cGFydHMgaW4gdGhlIHdzZGw6bWVzc2FnZSB0aGF0IGRlc2NyaWJlcyBpdC4KLSAgICAgICAqIEhvd2V2ZXIsIHdlIHNob3VsZCBrZWVwIGluIG1pbmQgdGhlcmUgaXMgdGhlICJwYXJ0cyIgYXR0cmlidXRlIG9mIHNvYXBiaW5kOmJvZHkKLSAgICAgICAqIHRoYXQgaW5kaWNhdGVzIHdoaWNoIHBhcnRzIGFwcGVhciB3aXRoaW4gdGhlIFNPQVAgQm9keS4gCi0gICAgICAgKi8KLQotICAgICAgLy8gR2V0dGluZyB0aGUgb3JkZXJlZCBsaXN0IG9mIHdzZGw6cGFydCBuYW1lcwotICAgICAgTGlzdCBvcmRlcmVkUGFydE5hbWVzID0KLSAgICAgICAgdmFsaWRhdG9yLm9yZGVyUGFydE5hbWVzKG9wZXJhdGlvbk1lc3NhZ2VQYXJ0cywgZXh0RWxlbXMpOwotICAgICAgSXRlcmF0b3IgaSA9IG9yZGVyZWRQYXJ0TmFtZXMuaXRlcmF0b3IoKTsKLSAgICAgIC8vIEdldHRpbmcgdGhlIGZpcnN0IGFjY2Vzc29yCi0gICAgICBFbGVtZW50IGFjY2Vzc29yID0gWE1MVXRpbHMuZ2V0Rmlyc3RDaGlsZChzb2FwT3BlcmF0aW9uKTsKLSAgICAgIHdoaWxlIChhY2Nlc3NvciAhPSBudWxsKQotICAgICAgewotICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyB0aGUgY29ycmVzcG9uZGluZyB3c2RsOnBhcnQgZWxlbWVudAotICAgICAgICAvLyBmb3IgYW4gYWNjZXNzb3IsIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgIGlmICghaS5oYXNOZXh0KCkpCi0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oCi0gICAgICAgICAgICAiVGhlIHBhcnQgYWNjZXNzb3IgZWxlbWVudCAnIiArIGFjY2Vzc29yLmdldExvY2FsTmFtZSgpCi0gICAgICAgICAgICArICInIGRvZXMgbm90IGhhdmUgdGhlIGNvcnJlc3BvbmRpbmcgd3NkbDpwYXJ0IGVsZW1lbnQuIik7Ci0KLSAgICAgICAgLy8gSWYgbG9jYWwgbmFtZSBvZiBhY2Nlc3NvciBkb2VzIG5vdCBlcXVhbCB0byB0aGUgbmFtZSBvZiB0aGUKLSAgICAgICAgLy8gY29ycmVzcG9uZGluZyB3c2RsOnBhcnQgZWxlbWVudCwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgU3RyaW5nIHBhcnROYW1lID0gKFN0cmluZykgaS5uZXh0KCk7Ci0gICAgICAgIGlmICghYWNjZXNzb3IuZ2V0TG9jYWxOYW1lKCkuZXF1YWxzKHBhcnROYW1lKSkKLSAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigKLSAgICAgICAgICAgICJUaGUgYWNjZXNzb3IgbG9jYWwgbmFtZSBpcyAiICsgYWNjZXNzb3IuZ2V0TG9jYWxOYW1lKCkKLSAgICAgICAgICAgICsgIiwgdGhlIGNvcnJlc3BvbmRpbmcgcGFydCBlbGVtZW50IG5hbWUgaXMgIiArIHBhcnROYW1lKTsKLQotICAgICAgICAvLyBHZXR0aW5nIHRoZSBuZXh0IGFjY2Vzc29yCi0gICAgICAgIGFjY2Vzc29yID0gWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcoYWNjZXNzb3IpOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBhbmFlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGFmZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgYWZlLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQNDEwMC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDQxMDAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmUwOWMwMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQNDEwMC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvblBhc3NFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NZXNzYWdlRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotCi0vKioKLSAqIEJQNDEwMAotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIGVudmVsb3BlIGNvbnRhaW5pbmcgYSBoZWFkZXIgYmxvY2sgdGhhdCBpcyBlaXRoZXIgbWFuZGF0b3J5IG9yIGlzIG5vdCBkZXNjcmliZWQgaW4gdGhlIHdzZGw6YmluZGluZy48L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+QW4gZW52ZWxvcGUgY29udGFpbnMgYSBoZWFkZXIgYmxvY2sgdGhhdCBpcyBlaXRoZXIgbWFuZGF0b3J5IG9yIGlzIG5vdCBkZXNjcmliZWQgaW4gdGhlIHdzZGw6YmluZGluZy48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlA0MTAwIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcyB7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQNDEwMChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBQYXJzaW5nIHRoZSBtZXNzYWdlCi0gICAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLQotICAgICAgLy8gSWYgdGhlIG1lc3NhZ2UgaXMgZW1wdHkgb3IgaW52YWxpZCwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGRvYyA9PSBudWxsKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBHZXR0aW5nIGhlYWRlciBlbGVtZW50cyBmcm9tIGVudmVsb3BlCi0gICAgICBFbGVtZW50IHJvb3QgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICBOb2RlTGlzdCBoZWFkZXJMaXN0ID0gcm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKAotICAgICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1NPQVAsIFhNTFV0aWxzLlNPQVBfRUxFTV9IRUFERVIpOwotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBubyBoZWFkZXIsIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmIChoZWFkZXJMaXN0ID09IG51bGwgfHwgaGVhZGVyTGlzdC5nZXRMZW5ndGgoKSA9PSAwKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBHZXR0aW5nIHRoZSBoZWFkZXIgZWxlbWVudAotICAgICAgTm9kZSBoZWFkZXIgPSBoZWFkZXJMaXN0Lml0ZW0oMCk7Ci0KLSAgICAgIC8vIEdldHRpbmcgdGhlIGltbWVkaWF0ZSBjaGlsZCBlbGVtZW50cyBvZiB0aGUgaGVhZGVyCi0gICAgICBOb2RlTGlzdCBlbGVtcyA9IGhlYWRlci5nZXRDaGlsZE5vZGVzKCk7Ci0KLSAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBjaGlsZCBlbGVtZW50cyBvZiB0aGUgaGVhZGVyCi0gICAgICAvLyB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAoZWxlbXMgPT0gbnVsbCB8fCBlbGVtcy5nZXRMZW5ndGgoKSA9PSAwKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBXYWxraW5nIHRocm91Z2ggY2hpbGQgZWxlbWVudHMKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZWxlbXMuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICAgIHsKLQotICAgICAgICBpZiAoZWxlbXMuaXRlbShpKS5oYXNBdHRyaWJ1dGVzKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXR0aW5nIHRoZSBtdXN0VW5kZXJzdGFuZCBhdHRyaWJ1dGUKLSAgICAgICAgICBOb2RlIG11Tm9kZSA9IGVsZW1zLml0ZW0oaSkuZ2V0QXR0cmlidXRlcygpLmdldE5hbWVkSXRlbSgKLSAgICAgICAgICAgIHJvb3QuZ2V0UHJlZml4KCkgKyAiOiIgKyBYTUxVdGlscy5TT0FQX0FUVFJfTVVTVF9VTkRFUlNUQU5EKTsKLSAgICAgICAgICAvLyBJZiBhIGhlYWRlciBibG9jayBpcyBtYW5kYXRvcnksIHRoZW4gdGhlIGFzc2VydGlvbiBwYXNzZWQKLSAgICAgICAgICBpZiAobXVOb2RlICE9IG51bGwgJiYgbXVOb2RlLmdldE5vZGVWYWx1ZSgpLmVxdWFscygiMSIpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25QYXNzRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gR2V0dGluZyBoZWFkZXIgYmxvY2sgbmFtZQotICAgICAgICBTdHJpbmcgYmxvY2tOYW1lID0gZWxlbXMuaXRlbShpKS5nZXRMb2NhbE5hbWUoKTsKLSAgICAgICAgLy8gSWYgdGhlIG5hbWUgaXMgbm90IHByZXNlbnRlZCAob2NjdXJzIHdoZW4gZWxlbWVudCBpcyBlbXB0eSBzdHJpbmcpCi0gICAgICAgIC8vIHRoZW4gY29udGludWUgd2l0aCB0aGUgbmV4dCBlbGVtZW50Ci0gICAgICAgIGlmIChibG9ja05hbWUgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbGVhbiBibG9ja05hbWVFeGlzdHMgPSBmYWxzZTsKLQotICAgICAgICAvLyBHZXR0aW5nIFdTREwgYmluZGluZ3MKLSAgICAgICAgQmluZGluZ1tdIGJpbmRpbmdzID0gdmFsaWRhdG9yLmdldFdTRExEb2N1bWVudCgpLmdldEJpbmRpbmdzKCk7Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgYmluZGluZ3MubGVuZ3RoOyBqKyspIAotICAgICAgICB7Ci0gICAgICAgICAgLy8gR2V0dGluZyB3c2RsOm9wZXJhdGlvbnMKLSAgICAgICAgICBMaXN0IG9wZXJhdGlvbnMgPSBiaW5kaW5nc1tqXS5nZXRCaW5kaW5nT3BlcmF0aW9ucygpOwotICAgICAgICAgIEl0ZXJhdG9yIGsgPSBvcGVyYXRpb25zLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgd2hpbGUgKGsuaGFzTmV4dCgpICYmICFibG9ja05hbWVFeGlzdHMpCi0gICAgICAgICAgewotICAgICAgICAgICAgQmluZGluZ09wZXJhdGlvbiBvcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbikgay5uZXh0KCk7Ci0KLSAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSByZXF1ZXN0IG1lc3NhZ2UsCi0gICAgICAgICAgICAvLyB0aGVuIGdldHRpbmcgd3NkbDppbnB1dCBmb3IgYW4gb3BlcmF0aW9uIAotICAgICAgICAgICAgaWYgKGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRUeXBlKCkuZXF1YWxzKAotICAgICAgICAgICAgICBNZXNzYWdlRW50cnkuVFlQRV9SRVFVRVNUKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgQmluZGluZ0lucHV0IG9wSW5wdXQgPSBvcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCk7Ci0gICAgICAgICAgICAgIGlmIChvcElucHV0ICE9IG51bGwpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBJZiB3c2RsOmlucHV0IGlzIHByZXNlbnRlZCB0aGVuIGNoZWNraW5nCi0gICAgICAgICAgICAgICAgLy8gd2hldGhlciB0aGUgYmxvY2sgbmFtZSBpcyBkZXNjcmliZWQgdGhlcmUgb3Igbm90Ci0gICAgICAgICAgICAgICAgYmxvY2tOYW1lRXhpc3RzID0gYmxvY2tOYW1lRXhpc3RzKAotICAgICAgICAgICAgICAgICAgb3BJbnB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSwgYmxvY2tOYW1lKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIHJlc3BvbnNlIG1lc3NhZ2UsCi0gICAgICAgICAgICAvLyB0aGVuIGdldHRpbmcgd3NkbDpvdXRwdXQgZm9yIGFuIG9wZXJhdGlvbgotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBCaW5kaW5nT3V0cHV0IG9wT3V0cHV0ID0gb3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKTsKLSAgICAgICAgICAgICAgaWYgKG9wT3V0cHV0ICE9IG51bGwpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBJZiB3c2RsOm91dHB1dCBpcyBwcmVzZW50ZWQgdGhlbiBjaGVja2luZwotICAgICAgICAgICAgICAgIC8vIHdoZXRoZXIgdGhlIGJsb2NrIG5hbWUgaXMgZGVzY3JpYmVkIHRoZXJlIG9yIG5vdAotICAgICAgICAgICAgICAgIGJsb2NrTmFtZUV4aXN0cyA9IGJsb2NrTmFtZUV4aXN0cygKLSAgICAgICAgICAgICAgICAgIG9wT3V0cHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLCBibG9ja05hbWUpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgYSBoZWFkZXIgYmxvY2sgaXMgbm90IGRlc2NyaWJlZCBpbiB0aGUgYXBwcm9wcmlhdGUgd3NkbDpiaW5kaW5nCi0gICAgICAgIC8vIHRoZW4gdGhlIGFzc2VydGlvbiBwYXNzZWQKLSAgICAgICAgaWYgKCFibG9ja05hbWVFeGlzdHMpCi0gICAgICAgIHsKLSAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbigpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8vIE5vIG9uZSBoZWFkZXIgYmxvY2sgaXMgZWl0aGVyIG1hbmRhdG9yeSBvciBpcyBub3QgZGVzY3JpYmVkIGluIHRoZQotICAgICAgLy8gYXBwcm9wcmlhdGUgd3NkbDpiaW5kaW5nLCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotCi0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25QYXNzRXhjZXB0aW9uIGFwZSkKLSAgICB7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgIHRlc3RBc3NlcnRpb24uZ2V0RGV0YWlsRGVzY3JpcHRpb24oKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gYW5hZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja3MgdGhlIGV4aXN0ZW5zZSBvZiBibG9ja05hbWUgaW4gd3NkbHNvYXA6aGVhZGVyLCBpZiBpdCBpcyBmb3VuZCBpbgotICAgKiBhIGxpc3Qgb2YgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgb2JqZWN0cwotICAgKiAKLSAgICogQHBhcmFtIGVsZW1zIEEgbGlzdCBvZiBFeHRlbnNpYmlsaXR5RWxlbWVudCBvYmplY3RzCi0gICAqIEBwYXJhbSBibG9ja05hbWUgVGhlIG5hbWUgdGhhdCB3aWxsIGJlIGNoZWNrZWQgZm9yIGV4aXN0ZW5jZQotICAgKiBAcmV0dXJuIHRydWUgaWYgYmxvY2tOYW1lIGlzIGRlc2NyaWJlZCBpbiB0aGUgd3NkbHNvYXA6aGVhZGVyIGV4dGVuc2liaWxpdHkgZWxlbWVudAotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGJsb2NrTmFtZUV4aXN0cyhMaXN0IGVsZW1zLCBTdHJpbmcgYmxvY2tOYW1lKQotICB7Ci0gICAgaWYgKGVsZW1zID09IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEl0ZXJhdG9yIGkgPSBlbGVtcy5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBlbGVtID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBpLm5leHQoKTsKLSAgICAgIFN0cmluZyBlbGVtTmFtZSA9IGVsZW0uZ2V0RWxlbWVudFR5cGUoKS5nZXRMb2NhbFBhcnQoKTsKLSAgICAgIGlmIChlbGVtTmFtZS5lcXVhbHMoImhlYWRlciIpKQotICAgICAgewotICAgICAgICBTT0FQSGVhZGVyIHNvYXBIZWFkZXIgPSAoU09BUEhlYWRlcikgZWxlbTsKLSAgICAgICAgaWYgKHNvYXBIZWFkZXIuZ2V0UGFydCgpLmVxdWFscyhibG9ja05hbWUpKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQNDEwMS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDQxMDEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZkOTNmMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQNDEwMS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25QYXNzRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotLyoqCi0gKiBCUDQxMDEKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBlbnZlbG9wZSBjb250YWluaW5nIGEgc29hcDphY3RvciBhdHRyaWJ1dGUgd2l0aCBhIHZhbHVlIG90aGVyIHRoYW4gdGhlIHNwZWNpYWwgdXJpICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2FjdG9yL25leHQiLjwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5BIGhlYWRlciBlbGVtZW50IGluIHRoZSBlbnZlbG9wZSBjb250YWlucyBhIHNvYXA6YWN0b3IgYXR0cmlidXRlIHdpdGggYSB2YWx1ZSBvdGhlciB0aGFuIHRoZSBzcGVjaWFsIHVyaSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9hY3Rvci9uZXh0Ii48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlA0MTAxIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcyB7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQNDEwMShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkgewotCi0gICAgICAvLyBQYXJzaW5nIHRoZSBtZXNzYWdlCi0gICAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLQotICAgICAgLy8gSWYgdGhlIG1lc3NhZ2UgaXMgZW1wdHkgb3IgaW52YWxpZCwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGRvYyA9PSBudWxsKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBHZXR0aW5nIGhlYWRlciBlbGVtZW50cyBmcm9tIGVudmVsb3BlCi0gICAgICBFbGVtZW50IHJvb3QgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICBOb2RlTGlzdCBoZWFkZXJMaXN0ID0gcm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKAotICAgICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1NPQVAsIFhNTFV0aWxzLlNPQVBfRUxFTV9IRUFERVIpOwotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBubyBoZWFkZXIsIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmIChoZWFkZXJMaXN0ID09IG51bGwgfHwgaGVhZGVyTGlzdC5nZXRMZW5ndGgoKSA9PSAwKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBHZXR0aW5nIHRoZSBoZWFkZXIgZWxlbWVudAotICAgICAgTm9kZSBoZWFkZXIgPSBoZWFkZXJMaXN0Lml0ZW0oMCk7Ci0KLSAgICAgIC8vIEdldHRpbmcgdGhlIGltbWVkaWF0ZSBjaGlsZCBlbGVtZW50cyBvZiB0aGUgaGVhZGVyCi0gICAgICBOb2RlTGlzdCBlbGVtcyA9IGhlYWRlci5nZXRDaGlsZE5vZGVzKCk7Ci0KLSAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGNoaWxkIGVsZW1lbnRzIG9mIHRoZSBoZWFkZXIKLSAgICAgIC8vIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmIChlbGVtcyA9PSBudWxsIHx8IGVsZW1zLmdldExlbmd0aCgpID09IDApCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIFdhbGtpbmcgdGhyb3VnaCBjaGlsZCBlbGVtZW50cwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbGVtcy5nZXRMZW5ndGgoKTsgaSsrKQotICAgICAgewotICAgICAgICAvLyBHZXR0aW5nIG5vZGUgYXR0cmlidXRlcwotICAgICAgICBOYW1lZE5vZGVNYXAgYXR0cnMgPSBlbGVtcy5pdGVtKGkpLmdldEF0dHJpYnV0ZXMoKTsKLQotICAgICAgICAvLyBJZiB0aGUgbm9kZSBkb2VzIG5vdCBoYXZlIGF0dHJpYnV0ZXMgdGhlbiBjb250aW51ZQotICAgICAgICBpZiAoYXR0cnMgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gR2V0dGluZyBhY3RvciBhdHRyaWJ1dGUKLSAgICAgICAgTm9kZSBhY3RvciA9IGF0dHJzLmdldE5hbWVkSXRlbShyb290LmdldFByZWZpeCgpCi0gICAgICAgICAgKyAiOiIgKyBYTUxVdGlscy5TT0FQX0FUVFJfQUNUT1IpOwotCi0gICAgICAgIC8vIElmIHRoZSBhY3RvciBhdHRyaWJ1dGUgaXMgcHJlc2VudGVkIGFuZCBkb2VzIG5vdCBlcXVhbAotICAgICAgICAvLyB0byAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9hY3Rvci9uZXh0IiwKLSAgICAgICAgLy8gdGhlbiB0aGUgYXNzZXJ0aW9uIHBhc3NlZAotICAgICAgICBpZiAoYWN0b3IgIT0gbnVsbAotICAgICAgICAgICYmICFhY3Rvci5nZXROb2RlVmFsdWUoKS5lcXVhbHMoV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQX05FWFRfQUNUT1IpKQotICAgICAgICB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvblBhc3NFeGNlcHRpb24oKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICAvLyBObyBvbmUgYWN0b3IgYXR0cmlidXRlIGhhcyBhIHZhbHVlIG90aGVyIHRoYW4KLSAgICAgIC8vICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2FjdG9yL25leHQiLAotICAgICAgLy8gdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZSAKLSAgICAgIHJlc3VsdCAgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotCi0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25QYXNzRXhjZXB0aW9uIGFwZSkKLSAgICB7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgIHRlc3RBc3NlcnRpb24uZ2V0RGV0YWlsRGVzY3JpcHRpb24oKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gYW5hZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlA0MTAyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0JQNDEwMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYmUxNzkyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlA0MTAyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvblBhc3NFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLS8qKgotICogQlA0MTAyCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgZW52ZWxvcGUgY29udGFpbmluZyBhIGZhdWx0IHdpdGggYSBub24tZW1wdHkgZGV0YWlsIGVsZW1lbnQuPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPkEgRmF1bHQgZWxlbWVudCBpbiBhbiBlbnZlbG9wZSBjb250YWlucyBhIG5vbi1lbXB0eSBkZXRhaWwgZWxlbWVudC48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlA0MTAyIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcyB7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQNDEwMihCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkgewotCi0gICAgICAvLyBQYXJzaW5nIHRoZSBtZXNzYWdlCi0gICAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLQotICAgICAgLy8gSWYgdGhlIG1lc3NhZ2UgaXMgZW1wdHkgb3IgaW52YWxpZCwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGRvYyA9PSBudWxsKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBHZXR0aW5nIEZhdWx0IGVsZW1lbnRzIGZyb20gZW52ZWxvcGUKLSAgICAgIEVsZW1lbnQgcm9vdCA9IGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKTsKLSAgICAgIE5vZGVMaXN0IGZhdWx0TGlzdCA9IHJvb3QuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUygKLSAgICAgICAgV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQLCBYTUxVdGlscy5TT0FQX0VMRU1fRkFVTFQpOwotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBubyBGYXVsdCBlbGVtZW50LCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAoZmF1bHRMaXN0ID09IG51bGwgfHwgZmF1bHRMaXN0LmdldExlbmd0aCgpID09IDApCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIEZhdWx0IGVsZW1lbnQgbXVzdCBub3QgYXBwZWFyIG1vcmUgdGhhbiBvbmNlCi0gICAgICAvLyB3aXRoaW4gYSBCb2R5IGVsZW1lbnQsIHNvIGdldHRpbmcgdGhlIGZpcnN0IG9uZQotICAgICAgRWxlbWVudCBmYXVsdCA9IChFbGVtZW50KSBmYXVsdExpc3QuaXRlbSgwKTsKLQotICAgICAgLy8gR2V0dGluZyBGdWFsdCdzIGRldGFpbCBlbGVtZW50cwotICAgICAgTm9kZUxpc3QgZGV0YWlscyA9IGZhdWx0LmdldEVsZW1lbnRzQnlUYWdOYW1lKAotICAgICAgICBYTUxVdGlscy5TT0FQX0VMRU1fRkFVTFRfREVUQUlMKTsKLSAgICAgIC8vIElmIHRoZXJlIGlzIGEgbm9uLWVtcHR5IGRldGFpbCBlbGVtZW50LCB0aGVuIHRoZSBhc3NlcnRpb24gcGFzc2VkCi0gICAgICBpZiAoZGV0YWlscyAhPSBudWxsCi0gICAgICAgICYmIGRldGFpbHMuZ2V0TGVuZ3RoKCkgPiAwKQotICAgICAgewotICAgICAgICBOb2RlTGlzdCBsaXN0ID0gZGV0YWlscy5pdGVtKDApLmdldENoaWxkTm9kZXMoKTsKLSAgICAgICAgLy8gc2VhcmNoIGZpcnN0IGVsZW1lbnQgbm9kZSAKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaXN0LmdldExlbmd0aCgpOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBpZigobGlzdC5pdGVtKGkpLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpIAotICAgICAgICAgICYmIChsaXN0Lml0ZW0oaSkuZ2V0TG9jYWxOYW1lKCkgIT0gbnVsbCkgKSAKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbigpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICAvLyBUaGVyZSBpcyBubyBkZXRhaWwgZWxlbWVudCBpbiBGYXVsdCwKLSAgICAgIC8vIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0KLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvblBhc3NFeGNlcHRpb24gYXBlKQotICAgIHsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgdGVzdEFzc2VydGlvbi5nZXREZXRhaWxEZXNjcmlwdGlvbigpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBhbmFlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDQxMDkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvQlA0MTA5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyZjhkMWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9CUDQxMDkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLS8qKgotICogQlA0MTA5Ci0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIGVudmVsb3BlIGNvbnRhaW5pbmcgYSBzb2FwOkJvZHkgZWxlbWVudCB3aXRoIGF0dHJpYnV0ZXM8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+QW4gZW52ZWxvcGUgY29udGFpbnMgYSBhIHNvYXA6Qm9keSBlbGVtZW50IHdpdGggYXR0cmlidXRlcy48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlA0MTA5IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcyB7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQNDEwOShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkgewotCi0gICAgICAvLyBQYXJzaW5nIHRoZSBtZXNzYWdlCi0gICAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLQotICAgICAgLy8gSWYgdGhlIG1lc3NhZ2UgaXMgZW1wdHkgb3IgaW52YWxpZCwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGRvYyA9PSBudWxsKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICAvLyBHZXR0aW5nIHRoZSBzb2FwOkJvZHkgZWxlbWVudHMgZnJvbSBlbnZlbG9wZQotICAgICAgTm9kZUxpc3QgYm9keUxpc3QgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCkuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUygKLSAgICAgICAgV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQLCBYTUxVdGlscy5TT0FQX0VMRU1fQk9EWSk7Ci0KLSAgICAgIC8vIElmIHRoZXJlIGlzIG5vIEJvZHkgZWxlbWVudCwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGJvZHlMaXN0ID09IG51bGwgfHwgYm9keUxpc3QuZ2V0TGVuZ3RoKCkgPT0gMCkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgLy8gR2V0dGluZyB0aGUgZmlyc3Qgc29hcDpCb2R5IGVsZW1lbnQKLSAgICAgIEVsZW1lbnQgYm9keSA9IChFbGVtZW50KSBib2R5TGlzdC5pdGVtKDApOwotCi0gICAgICAvLyBJZiB0aGUgQm9keSBlbGVtZW50IGhhcyBhdHRyaWJ1dGVzIChleGNsdWRpbmcgbmFtZXNwYWNlIGRlY2xhcmF0aW9ucyksCi0gICAgICAvLyB0aGUgYXNzZXJ0aW9uIHBhc3NlZAotICAgICAgTmFtZWROb2RlTWFwIGF0dHJzID0gYm9keS5nZXRBdHRyaWJ1dGVzKCk7Ci0gICAgICBpZiAoYXR0cnMgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRycy5nZXRMZW5ndGgoKTsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIGF0dHJOYW1lID0gKChBdHRyKSBhdHRycy5pdGVtKGkpKS5nZXROYW1lKCk7Ci0gICAgICAgICAgaWYgKCFhdHRyTmFtZS5lcXVhbHMoInhtbG5zIikgJiYgIWF0dHJOYW1lLnN0YXJ0c1dpdGgoInhtbG5zOiIpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25QYXNzRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25QYXNzRXhjZXB0aW9uIGFwZSkKLSAgICB7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgIHRlc3RBc3NlcnRpb24uZ2V0RGV0YWlsRGVzY3JpcHRpb24oKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gYW5hZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvRW52ZWxvcGVWYWxpZGF0b3JJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL0VudmVsb3BlVmFsaWRhdG9ySW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTdiZDA5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvRW52ZWxvcGVWYWxpZGF0b3JJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDMgSUJNIENvcnBvcmF0aW9uLCBQYXJhc29mdCBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNICAgICAgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgUGFyYXNvZnQgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW52ZWxvcGVWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLk1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci0KLS8qKgotICogQHZlcnNpb24gMS4wCi0gKi8KLXB1YmxpYyBjbGFzcyBFbnZlbG9wZVZhbGlkYXRvckltcGwKLSAgZXh0ZW5kcyBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICBpbXBsZW1lbnRzIEVudmVsb3BlVmFsaWRhdG9yCi17Ci0gIC8qKgotICAgKiBHZXQgdGhlIGFydGlmYWN0IHR5cGUgdGhhdCB0aGlzIHZhbGlkYXRvciBhcHBsaWVzIHRvLgotICAgKiBAcmV0dXJuIHRoZSBhcnRpZmFjdCB0eXBlIChhIFN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0QXJ0aWZhY3RUeXBlKCkgewotICAgICAgcmV0dXJuIFRZUEVfRU5WRUxPUEU7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBjb2xsZWN0aW9uIG9mIGVudHJ5IHR5cGVzIHRoYXQgdGhpcyB2YWxpZGF0b3IgYXBwbGllcyB0by4KLSAgICogQHJldHVybiBhbiBhcnJheSBvZiBlbnRyeSB0eXBlcyAoU3RyaW5ncykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXRFbnRyeVR5cGVzKCkgewotICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbXSB7Ci0gICAgICAgICAgICAgIFRZUEVfRU5WRUxPUEVfUkVRVUVTVCwKLSAgICAgICAgICAgICAgVFlQRV9FTlZFTE9QRV9SRVNQT05TRSwKLSAgICAgICAgICAgICAgVFlQRV9FTlZFTE9QRV9BTlkKLSAgICAgIH07Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwjaXNQcmltYXJ5RW50cnlUeXBlTWF0Y2gob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIGlzUHJpbWFyeUVudHJ5VHlwZU1hdGNoKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICB7Ci0gICAgYm9vbGVhbiBtYXRjaCA9IGZhbHNlOwotCi0gICAgLy8gVmVyaWZ5IHRoYXQgdGhlIGVudHJ5IGFuZCB0ZXN0IGFzc2VydGlvbiBoYXZlIHRoZSBzYW1lIHByaW1hcnkgY29udGV4dAotICAgIGlmICgodGVzdEFzc2VydGlvbi5nZXRFbnRyeVR5cGVOYW1lKCkuZXF1YWxzKFRZUEVfRU5WRUxPUEVfQU5ZKSkKLSAgICAgIHx8ICh0ZXN0QXNzZXJ0aW9uLmdldEVudHJ5VHlwZU5hbWUoKS5lcXVhbHMoVFlQRV9FTlZFTE9QRV9SRVFVRVNUKQotICAgICAgICAmJiAoZW50cnlDb250ZXh0Ci0gICAgICAgICAgLmdldEVudHJ5KCkKLSAgICAgICAgICAuZ2V0RW50cnlUeXBlKCkKLSAgICAgICAgICAuZ2V0VHlwZU5hbWUoKQotICAgICAgICAgIC5lcXVhbHMoTWVzc2FnZVZhbGlkYXRvci5UWVBFX01FU1NBR0VfUkVRVUVTVCkpKQotICAgICAgfHwgKHRlc3RBc3NlcnRpb24uZ2V0RW50cnlUeXBlTmFtZSgpLmVxdWFscyhUWVBFX0VOVkVMT1BFX1JFU1BPTlNFKQotICAgICAgICAmJiAoZW50cnlDb250ZXh0Ci0gICAgICAgICAgLmdldEVudHJ5KCkKLSAgICAgICAgICAuZ2V0RW50cnlUeXBlKCkKLSAgICAgICAgICAuZ2V0VHlwZU5hbWUoKQotICAgICAgICAgIC5lcXVhbHMoTWVzc2FnZVZhbGlkYXRvci5UWVBFX01FU1NBR0VfUkVTUE9OU0UpKSkpCi0gICAgewotICAgICAgbWF0Y2ggPSB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBtYXRjaDsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvU1NCUDE2MDEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvZW52ZWxvcGUvU1NCUDE2MDEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTE5ZDM1YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL1NTQlAxNjAxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotCi0vKioKLSAqIFNTQlAxNjAxCi0gKi8KLXB1YmxpYyBjbGFzcyBTU0JQMTYwMSBleHRlbmRzIEJQMTYwMQotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBTU0JQMTYwMShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL1NTQlA5NzA0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL2VudmVsb3BlL1NTQlA5NzA0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjNTUyNmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9lbnZlbG9wZS9TU0JQOTcwNC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotLyoqCi0gKiBTU0JQOTcwNAotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBlbnZlbG9wZTwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgRU5WRUxPUEUgZG9lcyBub3QgY29udGFpbiB0aGUgbmFtZXNwYWNlIGRlY2xhcmF0aW9uIHhtbG5zOnhtbD0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIi48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgU1NCUDk3MDQgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBTU0JQOTcwNChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBHZXR0aW5nIGEgbWVzc2FnZSBkb2N1bWVudAotICAgICAgRG9jdW1lbnQgZG9jID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCk7Ci0gICAgICAvLyBJZiB0aGUgbWVzc2FnZSBpcyBlbXB0eSBvciBpbnZhbGlkLCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAoZG9jID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIEdldHRpbmcgdGhlIHJvb3QgZWxlbWVudAotICAgICAgRWxlbWVudCBlbGVtID0gZG9jLmdldERvY3VtZW50RWxlbWVudCgpOwotICAgICAgLy8gSWYgaXQgaXMgbm90IHRoZSBzb2FwOkVudmVsb3BlLCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAoIWVsZW0uZ2V0TmFtZXNwYWNlVVJJKCkuZXF1YWxzKFdTSUNvbnN0YW50cy5OU19VUklfU09BUCkKLSAgICAgICAgfHwgIWVsZW0uZ2V0TG9jYWxOYW1lKCkuZXF1YWxzKFhNTFV0aWxzLlNPQVBfRUxFTV9FTlZFTE9QRSkpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIElmIHRoZSBlbnZlbG9wZSBjb250YWlucyB0aGUgeG1sbnM6eG1sIG5hbWVzcGFjZSBkZWNsYXJhdGlvbiwKLSAgICAgIC8vIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICBTdHJpbmcgaW5jb3JyZWN0RWxlbWVudE5hbWUgPSBnZXRJbmNvcnJlY3RFbGVtZW50TmFtZShlbGVtKTsKLSAgICAgIGlmIChpbmNvcnJlY3RFbGVtZW50TmFtZSAhPSBudWxsKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIG5hbWUgb2YgYW4gZWxlbWVudCBjb250YWluaW5nICIKLSAgICAgICAgICArICJzdWNoIG5hbWVzcGFjZSBkZWNsYXJhdGlvbiBpcyBcIiIgKyBpbmNvcnJlY3RFbGVtZW50TmFtZSArICJcIi4iKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gYW5hZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBhZmUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9XQVJOSU5HOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBhZmUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLSAgLyoqCi0gICAqIExvb2tzIGZvciBhbnkgZWxlbWVudCB0aGF0IGNvbnRhaW5zIHRoZSBhdHRyaWJ1dGUgeG1sbnM6eG1sPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLiAKLSAgICogQHBhcmFtIGVsZW0gdGhlIHJvb3QgZWxlbWVudC4KLSAgICogQHJldHVybiB0aGUgbmFtZSBvZiBhbiBlbGVtZW50IGZvdW5kIG9yIG51bGwuCi0gICAqLwotICBwcml2YXRlIFN0cmluZyBnZXRJbmNvcnJlY3RFbGVtZW50TmFtZShFbGVtZW50IGVsZW0pCi0gIHsKLSAgICAvLyBHZXR0aW5nIGEgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSB4bWxuczp4bWwKLSAgICBTdHJpbmcgYXR0clZhbHVlID0gZWxlbS5nZXRBdHRyaWJ1dGVOUygKLSAgICAgIFdTSUNvbnN0YW50cy5OU19VUklfWE1MTlMsICJ4bWwiKTsKLSAgICAvLyBJZiBpdCBlcXVhbHMgdG8gImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsCi0gICAgLy8gcmV0dXJuIGFuIGVsZW1lbnQgbmFtZTsKLSAgICBpZiAoV1NJQ29uc3RhbnRzLk5TX1VSSV9YTUwuZXF1YWxzKGF0dHJWYWx1ZSkpCi0gICAgewotICAgICAgcmV0dXJuIGVsZW0uZ2V0Tm9kZU5hbWUoKTsKLSAgICB9Ci0gICAgLy8gR29pbmcgdGhyb3VnaCBlbGVtZW50J3MgY2hpbGRyZW4KLSAgICBFbGVtZW50IGNoaWxkID0gWE1MVXRpbHMuZ2V0Rmlyc3RDaGlsZChlbGVtKTsKLSAgICB3aGlsZSAoY2hpbGQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBJZiBhbnkgb2YgdGhlbSBoYXMgeG1sbnM6eG1sIGF0dHJpYnV0ZSwgcmV0dXJuIGEgdmFsdWUKLSAgICAgIFN0cmluZyBuYW1lID0gZ2V0SW5jb3JyZWN0RWxlbWVudE5hbWUoY2hpbGQpOwotICAgICAgaWYgKG5hbWUgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIG5hbWU7Ci0gICAgICB9Ci0gICAgICAvLyBHZXR0aW5nIHRoZSBuZXh0IGVsZW1lbnQncyBjaGlsZAotICAgICAgY2hpbGQgPSBYTUxVdGlscy5nZXROZXh0U2libGluZyhjaGlsZCk7Ci0gICAgfQotICAgIC8vIE5vIHhtbG5zOnhtbCBhdHRyaWJ1dGVzIGZvdW5kLCByZXR1cm4gbnVsbAotICAgIHJldHVybiBudWxsOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTAwMy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTAwMy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2ZmMzcyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9BUDEwMDMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLQotLyoqCi0gKiBBUDEwMDMKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgbm9uLW11bHRpcGFydC9yZWxhdGVkIG1lc3NhZ2UgaW4gdGhlIGxvZyBmaWxlLCB3aGljaCBoYXMgYSBub24tZW1wdHkgZW50aXR5LWJvZHk8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKiAgVGhlIGxvZ2dlZCBTT0FQIGVudmVsb3BlIGlzIGEgVVRGLTggdHJhbnNjcmlwdCBvZiBhbiBlbnZlbG9wZSBvcmlnaW5hbGx5IGVuY29kZWQgYXMgVVRGLTggb3IgVVRGLTE2LiAKLSAqICBUaGUgSFRUUCBDb250ZW50LVR5cGUgaGVhZGVyJ3MgY2hhcnNldCB2YWx1ZSBpcyBlaXRoZXIgVVRGLTggb3IgVVRGLTE2LiBMb29raW5nIGF0IHRoZSBtZXNzYWdlQ29udGVudCAKLSAqICBlbGVtZW50IG9mIHRoZSBsb2dnZWQgbWVzc2FnZSwgZWl0aGVyIAotICogICAgKDEpIGl0IGhhcyBhIEJPTSBhdHRyaWJ1dGUgd2hpY2ggbWFwcyB0aGUgY2hhcnNldCB2YWx1ZSBpbiB0aGUgQ29udGVudC1UeXBlIGhlYWRlciwgb3IgCi0gKiAgICAoMikgaXQgaGFzIGl0IGhhcyBhbiBYTUwgZGVjbGFyYXRpb24gd2hpY2ggbWF0Y2hlcyB0aGUgY2hhcnNldCB2YWx1ZSBpbiB0aGUgQ29udGVudC1UeXBlIGhlYWRlciwgb3IgCi0gKiAgICAoMykgdGhlcmUgaXMgbm8gQk9NIGF0dHJpYnV0ZSBhbmQgbm8gWE1MIGRlY2xhcmF0aW9uLCBhbmQgdGhlIGNoYXJzZXQgdmFsdWUgaXMgVVRGLTguCi0gKiA8L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICoKLSAqIEBhdXRob3IgbGF1em9uZAotICovCi1wdWJsaWMgY2xhc3MgQVAxMDAzIGV4dGVuZHMgU1NCUDEwMDMgewotCi0JLyoqCi0JICogQHBhcmFtIGltcGwKLQkgKi8KLQlwdWJsaWMgQVAxMDAzKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpIAotCXsKLQkJc3VwZXIoaW1wbCk7Ci0JfQotCi0JcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLQkgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLQkgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0JICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0JewotCSAgLy8gSWYgdGhlcmUgaXMgYSBTT0FQIE1lc3NhZ2Ugd2l0aCBBdHRhY2htZW50cywgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotCSAgaWYgKGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5pc01pbWVDb250ZW50KCkpCi0JICB7Ci0JICAJcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRSwgZmFpbHVyZURldGFpbCk7Ci0JICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBzdXBlci52YWxpZGF0ZSh0ZXN0QXNzZXJ0aW9uLCBlbnRyeUNvbnRleHQpOwotCSAgfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9BUDE5MDIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9BUDE5MDIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQ5MDBlNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTAyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLQotLyoqCi0gKiBBUDE5MDIKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgbWVzc2FnZTwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5JbiBhIGRlc2NyaXB0aW9uLCBpZiB0aGUgd3NkbDppbnB1dCBvciB3c2RsOm91dHB1dAotICogZWxlbWVudCBpbiB0aGUgd3NkbDpiaW5kaW5nIHNwZWNpZmllcyBXU0RMIE1JTUUgYmluZGluZywgdGhlbiB0aGUgbWVzc2FnZQotICogY2FuIGNvbnRhaW4gU09BUCBhdHRhY2htZW50cy48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQVAxOTAyIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcyBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQVAxOTAyKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdldHRpbmcgYW4gb3BlcmF0aW9uIG1hdGNoZWQgZm9yIGEgbWVzc2FnZQotICAgICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gdmFsaWRhdG9yLmdldE9wZXJhdGlvbk1hdGNoKAotICAgICAgICBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeVR5cGUoKSwKLSAgICAgICAgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCkpOwotICAgICAgLy8gSWYgbm8gb25lIG9wZXJhdGlvbiBtYXRjaGVzLCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAoYmluZGluZ09wZXJhdGlvbiA9PSBudWxsKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgLy8gR2V0dGluZyB0aGUgY29ycmVzcG9uZGluZyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzCi0gICAgICBMaXN0IGV4dEVsZW1zOwotICAgICAgU3RyaW5nIHR5cGU7Ci0gICAgICBpZiAoTWVzc2FnZUVudHJ5LlRZUEVfUkVRVUVTVAotICAgICAgICAuZXF1YWxzKGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5VHlwZSgpKSkKLSAgICAgIHsKLSAgICAgICAgdHlwZSA9ICJpbnB1dCI7Ci0gICAgICAgIGV4dEVsZW1zID0gYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nSW5wdXQoKSA9PSBudWxsID8gbnVsbAotICAgICAgICAgIDogYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nSW5wdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgdHlwZSA9ICJvdXRwdXQiOwotICAgICAgICBleHRFbGVtcyA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ091dHB1dCgpID09IG51bGwgPyBudWxsCi0gICAgICAgICAgOiBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIH0KLSAgICAgIC8vIElmIHRoZSBNSU1FIGJpbmRpbmcgaXMgbm90IHVzZWQsIGJ1dCB0aGUgbWVzc2FnZSBoYXMKLSAgICAgIC8vIGF0IGxlYXN0IG9uZSBub24tcm9vdCBNSU1FIHBhcnQsIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICBpZiAoIXVzZXNNaW1lQmluZGluZyhleHRFbGVtcykKLSAgICAgICAgJiYgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1pbWVQYXJ0cygpLmNvdW50KCkgPiAxKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIHdzZGw6IiArIHR5cGUgKyAiIG9mIHRoZSBcIiIKLSAgICAgICAgICArIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpICsgIlwiIGJpbmRpbmcgb3BlcmF0aW9uLiIpOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBhbmFlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGFmZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgYWZlLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGZpcnN0IGV4dGVuc2liaWxpdHkgZWxlbWVudCBpcyBtaW1lOm11bHRpcGFydFJlbGF0ZWQuCi0gICAqIEBwYXJhbSBleHRFbGVtcyBhIGxpc3Qgb2YgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cy4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBlbGVtZW50IGlzIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCwgZmFsc2Ugb3RoZXJ3aXNlCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gdXNlc01pbWVCaW5kaW5nKExpc3QgZXh0RWxlbXMpIHsKLSAgICAvLyBJZiB0aGUgZmlyc3QgZXh0ZW5zaWJpbGl0eSBlbGVtZW50IGlzIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCwKLSAgICAvLyByZXR1cm4gdHJ1ZQotICAgIGlmIChleHRFbGVtcyAhPSBudWxsICYmIGV4dEVsZW1zLnNpemUoKSA+IDAKLSAgICAgICYmICgoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZXh0RWxlbXMuZ2V0KDApKQotICAgICAgLmdldEVsZW1lbnRUeXBlKCkuZXF1YWxzKFdTRExfTUlNRV9NVUxUSVBBUlQpKQotICAgIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAvLyBvdGhlcndpc2UgcmV0dXJuIGZhbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTkxNS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTkxNS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODUyOTc2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9BUDE5MTUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWltZVBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NaW1lUGFydHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuTUlNRUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5NSU1FVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVXRpbHM7Ci0KLS8qKgotICogQVAxOTE1Ci0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHJvb3QtcGFydCBvZiBhIG11bHRpcGFydC9yZWxhdGVkIG1lc3NhZ2U8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIGVudGl0eSBib2R5IG9mIHRoZSByb290LXBhcnQgb2YgYQotICogbXVsdGlwYXJ0L3JlbGF0ZWQgbWVzc2FnZSBpcyBzZXJpYWxpemVkIHVzaW5nIGVpdGhlciBVVEYtOCBvciBVVEYtMTYKLSAqIGNoYXJhY3RlciBlbmNvZGluZy48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQVAxOTE1IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQVAxOTE1KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIGdldCBNSU1FIHBhcnRzCi0gICAgaWYgKCFlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuaXNNaW1lQ29udGVudCgpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBNaW1lUGFydHMgbWltZVBhcnRzID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1pbWVQYXJ0cygpOyAgICAJCi0gICAgICBNaW1lUGFydCBwYXJ0ID0gbWltZVBhcnRzLmdldFJvb3RQYXJ0KCk7Ci0gICAgICBpZiAocGFydCA9PSBudWxsKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBTdHJpbmcgeG1sRW5jb2RpbmcgPSBudWxsOwotICAgICAgICBTdHJpbmcgY2hhcnNldCA9IE1JTUVVdGlscy5nZXRNaW1lSGVhZGVyU3ViQXR0cmlidXRlKAotICAgICAgICAgIHBhcnQuZ2V0SGVhZGVycygpLAotICAgICAgICAgIE1JTUVDb25zdGFudHMuSEVBREVSX0NPTlRFTlRfVFlQRSwgCi0gICAgICAgICAgImNoYXJzZXQiKTsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAvLyBUaGUgSFRUUCBDb250ZW50LVR5cGUgaGVhZGVyJ3MgY2hhcnNldCB2YWx1ZSBpcyBlaXRoZXIgVVRGLTggb3IgVVRGLTE2LiAKLSAgICAgICAgICBpZigoY2hhcnNldCAhPSBudWxsKSAmJiAoY2hhcnNldC5lcXVhbHNJZ25vcmVDYXNlKCJ1dGYtOCIpIHx8Ci0gICAgICAgICAgICAgIGNoYXJzZXQuZXF1YWxzSWdub3JlQ2FzZSgidXRmLTE2IikpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIExvb2tpbmcgYXQgdGhlIG1lc3NhZ2VDb250ZW50IGVsZW1lbnQgb2YgdGhlIGxvZ2dlZCBtZXNzYWdlLCBlaXRoZXIgCi0gICAgICAgICAgICAvLyAoMSkgaXQgaGFzIGEgQk9NIGF0dHJpYnV0ZSB3aGljaCBtYXBzIHRoZSBjaGFyc2V0IHZhbHVlIGluIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyLCBvciAKLSAgICAgICAgICAgIGludCBib20gPSAwOwotICAgICAgICAgICAgaWYgKChib20gPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0Qk9NKCkpICE9IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlmICgoYm9tID09IFdTSUNvbnN0YW50cy5CT01fVVRGOAotICAgICAgICAgICAgICAgICYmICFjaGFyc2V0LmVxdWFsc0lnbm9yZUNhc2UoInV0Zi04IikpCi0gICAgICAgICAgICAgICAgfHwgKChib20gPT0gV1NJQ29uc3RhbnRzLkJPTV9VVEYxNgotICAgICAgICAgICAgICAgICAgJiYgIWNoYXJzZXQuZXF1YWxzSWdub3JlQ2FzZSgidXRmLTE2IikpKQotICAgICAgICAgICAgICAgIHx8ICgoYm9tID09IFdTSUNvbnN0YW50cy5CT01fVVRGMTZfQklHX0VORElBTgotICAgICAgICAgICAgICAgICAgJiYgIWNoYXJzZXQuZXF1YWxzSWdub3JlQ2FzZSgidXRmLTE2IikpKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgQk9NICgiICsgYm9tICsgCi0gICAgICAgICAgICAgICAgICAgICIpIGFuZCBjaGFyc2V0IHZhbHVlICgiICsgY2hhcnNldCArICIpZG8gbm90IG1hdGNoLiIpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyAoMikgaXQgaGFzIGFuIFhNTCBkZWNsYXJhdGlvbiB3aGljaCBtYXRjaGVzIHRoZSBjaGFyc2V0IHZhbHVlIGluIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyLCBvciAKLSAgICAgICAgICAgIGVsc2UgaWYgKCgoeG1sRW5jb2RpbmcgPSAKLSAgICAgICAgICAgICAgVXRpbHMuZ2V0WE1MRW5jb2RpbmcocGFydC5nZXRDb250ZW50KCkpKSAhPSBudWxsKSAmJgotICAgICAgICAgICAgICAheG1sRW5jb2RpbmcuZXF1YWxzKCIiKSkgIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICBpZigheG1sRW5jb2RpbmcuZXF1YWxzSWdub3JlQ2FzZShjaGFyc2V0KSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgWE1MIGRlY2xhcmF0aW9uIGVuY29kaW5nICgiICsgCi0gICAgICAgICAgICAgICAgICAgIHhtbEVuY29kaW5nICsgIikgYW5kIGNoYXJzZXQgdmFsdWUgKCIgKyBjaGFyc2V0ICsgCi0gICAgICAgICAgICAgICAgICAgICIpIGRvIG5vdCBtYXRjaC4iKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyAoMykgdGhlcmUgaXMgbm8gQk9NIGF0dHJpYnV0ZSBhbmQgbm8gWE1MIGRlY2xhcmF0aW9uLCBhbmQgdGhlIGNoYXJzZXQgdmFsdWUgaXMgVVRGLTguCi0gICAgICAgICAgICBlbHNlIGlmKCFjaGFyc2V0LmVxdWFsc0lnbm9yZUNhc2UoInV0Zi04IikpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgbm8gQk9NIGF0dHJpYnV0ZSBhbmQgbm8gWE1MICIrCi0gICAgICAgICAgICAgICAgICAiZGVjbGFyYXRpb24sIGFuZCB0aGUgY2hhcnNldCB2YWx1ZSBpcyAoIiArIGNoYXJzZXQgKyAiKSIpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICAvLyBoZWFkZXIgZG8gbm90IGZvdW5kIG9yIGluY29ycmVjdCBjaGFyc2V0IHZhbHVlCi0gICAgICAgICAgZWxzZSAKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiRWl0aGVyIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyIGlzIG5vdCAiKwotICAgICAgICAgICAgICAgICJwcmVzZW50IGluIHRoZSBSb290IFBhcnQgb3IgYSBjaGFyc2V0IHZhbHVlIGlzIGludmFsaWQuIik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGUpIAotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTkxNy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTkxNy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTJkMGQ2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9BUDE5MTcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NZXNzYWdlRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuSFRUUENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5IVFRQVXRpbHM7Ci0KLS8qKgotICogQVAxOTE3Ci0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIG1lc3NhZ2UgY29udGFpbmluZyB6ZXJvIGF0dGFjaG1lbnQgcGFydHM8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+QSBtZXNzYWdlIGNvbnRhaW5pbmcgemVybyBhdHRhY2htZW50IHBhcnRzIGlzIHNlbnQKLSAqIHVzaW5nIGEgY29udGVudC10eXBlIG9mIGVpdGhlciAidGV4dC94bWwiIGFzIHRob3VnaCBhIFNPQVAgSFRUUCBiaW5kaW5nIHdlcmUKLSAqIHVzZWQgb3IgIm11bHRpcGFydC9yZWxhdGVkIiB3aGVuIHRoZSBXU0RMIGRlc2NyaXB0aW9uIGZvciB0aGUgbWVzc2FnZQotICogc3BlY2lmaWVzIHRoZSBtaW1lOm11bHRpcGFydFJlbGF0ZWQgZWxlbWVudCBvbiB0aGUgY29ycmVzcG9uZGluZyB3c2RsOmlucHV0Ci0gKiBvciB3c2RsOm91dHB1dCBlbGVtZW50IGluIGl0cyB3c2RsOmJpbmRpbmcuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEFQMTkxNyBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEFQMTkxNyhCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBub3QgYXBwbGljYWJsZSBpZiB0aGVyZSBhcmUgYXR0YWNobWVudHMKLSAgICAgIGlmIChlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuaXNNaW1lQ29udGVudCgpKQotICAgICAgewotICAgICAgICBpZiAoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1pbWVQYXJ0cygpLmNvdW50KCkgPiAxKQotICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSB2YWxpZGF0b3IuZ2V0T3BlcmF0aW9uTWF0Y2goCi0gICAgICAgICAgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlUeXBlKCksCi0gICAgICAgICAgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCkpOwotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBubyBtYXRjaGVkIG9wZXJhdGlvbiwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24gPT0gbnVsbCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgLy8gRmluZGluZyBvcGVyYXRpb24gZXh0ZW5zaWJpbGl0eSBlbGVtcwotICAgICAgLy8gaW4gdGhlIGJpbmRpbmcgZGVwZW5kaW5nIG9uIG1lc3NhZ2UgdHlwZQotICAgICAgTGlzdCBleHRFbGVtcyA9IG51bGw7Ci0gICAgICBpZiAoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldFR5cGUoKS5lcXVhbHMoCi0gICAgICAgIE1lc3NhZ2VFbnRyeS5UWVBFX1JFUVVFU1QpCi0gICAgICAgICYmIGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZXh0RWxlbXMgPSBiaW5kaW5nT3BlcmF0aW9uCi0gICAgICAgICAgLmdldEJpbmRpbmdJbnB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldFR5cGUoKS5lcXVhbHMoCi0gICAgICAgIE1lc3NhZ2VFbnRyeS5UWVBFX1JFU1BPTlNFKQotICAgICAgICAmJiBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBleHRFbGVtcyA9IGJpbmRpbmdPcGVyYXRpb24KLSAgICAgICAgICAuZ2V0QmluZGluZ091dHB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgfQotCi0gICAgICAvLyBjaGVjayBsaXN0Ci0gICAgICBpZigoZXh0RWxlbXMgPT0gbnVsbCkgfHwgKGV4dEVsZW1zLnNpemUoKSA9PSAwKSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgLy8gZGV0ZXJtaW5lIHR5cGUgCi0gICAgICBib29sZWFuIGlzTXVsdGlQYXJ0ID0gZmFsc2U7Ci0gICAgICAKLSAgICAgIC8vIGlmIE1JTUVNdWx0aXBhcnRSZWxhdGVkIHRoZW4gb25seSByb290LXBhcnQgYWxsb3dlZCAKLSAgICAgIGlmKGV4dEVsZW1zLmdldCgwKSBpbnN0YW5jZW9mIE1JTUVNdWx0aXBhcnRSZWxhdGVkKQotICAgICAgewotICAgICAgICBpZigoKE1JTUVNdWx0aXBhcnRSZWxhdGVkKSBleHRFbGVtcy5nZXQoMCkpLmdldE1JTUVQYXJ0cygpLnNpemUoKSAhPSAxKSB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgICAgfQotICAgICAgICBpc011bHRpUGFydCA9IHRydWU7Ci0gICAgICB9Ci0gICAgICAvLyBlbHNlIGlmIG5vdCBzb2FwYmluZDpib2R5IHJvb3QgZWxlbWVudAotICAgICAgZWxzZSBpZighKGV4dEVsZW1zLmdldCgwKSBpbnN0YW5jZW9mIFNPQVBCb2R5KSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgLy8gZ2V0IEhUVFAgY29udGVudCB0eXBlCi0gICAgICBTdHJpbmcgY29udGVudFR5cGUgPSBIVFRQVXRpbHMuZ2V0SHR0cEhlYWRlckF0dHJpYnV0ZSgKLSAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0SFRUUEhlYWRlcnMoKSwKLSAgICAgICAgICBIVFRQQ29uc3RhbnRzLkhFQURFUl9DT05URU5UX1RZUEUpOwotIAotICAgICAgLy9hbGxvdyAidGV4dC94bWwiIG9yIAotICAgICAgLy8oIm11bHRpcGFydC9yZWxhdGVkIiBhbmQgIm1pbWU6bXVsdGlwYXJ0UmVsYXRlZCIgV1NETCBiaW5kaW5ncykKLSAgICAgIGlmKChjb250ZW50VHlwZSA9PSBudWxsKSB8fCAKLSAgICAgICAgICghY29udGVudFR5cGUuZXF1YWxzSWdub3JlQ2FzZShXU0lDb25zdGFudHMuQ09OVEVOVF9UWVBFX01VTFRJUEFSVCkgJiYKLSAgICAgICAgICFjb250ZW50VHlwZS5lcXVhbHNJZ25vcmVDYXNlKFdTSUNvbnN0YW50cy5DT05URU5UX1RZUEVfVEVYVF9YTUwpKSB8fAotICAgICAgICAgKChjb250ZW50VHlwZS5lcXVhbHNJZ25vcmVDYXNlKFdTSUNvbnN0YW50cy5DT05URU5UX1RZUEVfTVVMVElQQVJUKSAmJiAKLSAgICAgICAgICAgICAhaXNNdWx0aVBhcnQpKSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSBjb250ZW50LXR5cGUgaGVhZGVyIGZpZWxkICAiICsKLSAgICAgICAgICAgICJ2YWx1ZSBcIiIgKyBjb250ZW50VHlwZSArICJcIiBpcyBpbmNvcnJlY3QiKTsKLSAgICAgIH0KLSAgICB9IAotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSAKLSAgICAgICAgdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZS5nZXRNZXNzYWdlKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotICAgIAotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTkyNS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTkyNS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDFhMmI4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9BUDE5MjUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWVzc2FnZUVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuSFRUUFV0aWxzOwotCi0vKioKLSAqIEFQMTkyNQotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBtZXNzYWdlPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPklmIHRoZSBXU0RMIGRlc2NyaXB0aW9uIGxpc3RzIGF0IGxlYXN0IG9uZSBub24tcm9vdAotICogTUlNRSBwYXJ0LCB0aGVuIHRoZSBjb3JyZXNwb25kaW5nIG1lc3NhZ2UgaGFzIGEgQ29udGVudC1UeXBlIEhUVFAgaGVhZGVyCi0gKiBmaWVsZC12YWx1ZSB3aXRoIGEgbWVkaWEtdHlwZSBvZiAibXVsdGlwYXJ0L3JlbGF0ZWQuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEFQMTkyNSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEFQMTkyNShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSB2YWxpZGF0b3IuZ2V0T3BlcmF0aW9uTWF0Y2goCi0gICAgICAgICAgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlUeXBlKCksCi0gICAgICAgICAgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCkpOwotICAKLSAgICAgIC8vIElmIHRoZXJlIGlzIG5vIG1hdGNoZWQgb3BlcmF0aW9uLCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAoYmluZGluZ09wZXJhdGlvbiA9PSBudWxsKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAKLSAgICAgIC8vIEZpbmRpbmcgb3BlcmF0aW9uIGV4dGVuc2liaWxpdHkgZWxlbXMKLSAgICAgIC8vIGluIHRoZSBiaW5kaW5nIGRlcGVuZGluZyBvbiBtZXNzYWdlIHR5cGUKLSAgICAgIExpc3QgZXh0RWxlbXMgPSBudWxsOwotICAgICAgaWYgKGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRUeXBlKCkuZXF1YWxzKAotICAgICAgICBNZXNzYWdlRW50cnkuVFlQRV9SRVFVRVNUKQotICAgICAgICAmJiBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGV4dEVsZW1zID0gYmluZGluZ09wZXJhdGlvbgotICAgICAgICAgIC5nZXRCaW5kaW5nSW5wdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRUeXBlKCkuZXF1YWxzKAotICAgICAgICBNZXNzYWdlRW50cnkuVFlQRV9SRVNQT05TRSkKLSAgICAgICAgJiYgYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nT3V0cHV0KCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZXh0RWxlbXMgPSBiaW5kaW5nT3BlcmF0aW9uCi0gICAgICAgICAgLmdldEJpbmRpbmdPdXRwdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIH0KLSAgICAgIC8vIGNoZWNrIGxpc3Qgb24gZmlyc3QgZWxlbWVudAotICAgICAgaWYoKGV4dEVsZW1zID09IG51bGwpIHx8IChleHRFbGVtcy5zaXplKCkgPT0gMCkgfHwgCi0gICAgICAgICAhKGV4dEVsZW1zLmdldCgwKSBpbnN0YW5jZW9mIE1JTUVNdWx0aXBhcnRSZWxhdGVkKSkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIAotICAgICAgLy8gZ2V0IGxpc3QgbWltZSBwYXJ0cyBmcm9tIGRlZmluaXRpb24KLSAgICAgIE1JTUVNdWx0aXBhcnRSZWxhdGVkIG1pbWUgPSAoTUlNRU11bHRpcGFydFJlbGF0ZWQpIGV4dEVsZW1zLmdldCgwKTsKLSAgICAgIExpc3QgcGFydHMgPSBtaW1lLmdldE1JTUVQYXJ0cygpOwotICAgICAgLy8gaWYgcGFydHMgY291bnQgaXMgbW9yZSB0aGFuIG9uZSwgdGhhbiBhc3NlcnRpb24gaXMgbm90QXBwbGljYWJsZQotICAgICAgaWYocGFydHMuc2l6ZSgpIDw9IDEpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICBTdHJpbmcgY29udGVudFR5cGUgPSBIVFRQVXRpbHMuZ2V0SHR0cEhlYWRlckF0dHJpYnV0ZSgKLSAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0SFRUUEhlYWRlcnMoKSwKLSAgICAgICAgICBIVFRQQ29uc3RhbnRzLkhFQURFUl9DT05URU5UX1RZUEUpOyAKLSAgICAgIGlmKChjb250ZW50VHlwZSA9PSBudWxsKSB8fCAKLSAgICAgICAgICFjb250ZW50VHlwZS5lcXVhbHNJZ25vcmVDYXNlKFdTSUNvbnN0YW50cy5DT05URU5UX1RZUEVfTVVMVElQQVJUKSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIkluY29ycmVjdCBDb250ZW50LVR5cGUgdmFsdWUgXCIiICsKLSAgICAgICAgICAgIGNvbnRlbnRUeXBlICsgIlwiIGluIEhUVFAgaGVhZGVyIik7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSAKLSAgICAgICAgdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZS5nZXRNZXNzYWdlKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHBhcnQgdmFsdWUgZnJvbSBNSU1FQ29udGVudCBlbGVtZW50Ci0gICAqIEBwYXJhbSBwYXJ0IE1JTUVQYXJ0IGVsZW1lbnQKLSAgICogQHJldHVybiB0aGUgcGFydCB2YWx1ZSBmcm9tIE1JTUVDb250ZW50IGVsZW1lbnQKLSAgICovCi0gIC8vcHJpdmF0ZSBTdHJpbmcgZ2V0TUlNRUNvbnRlbnRQYXJ0KE1JTUVQYXJ0IHBhcnQpIHsKLSAgLy8gIExpc3QgbGlzdCA9IHBhcnQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gIC8vICBpZihsaXN0LnNpemUoKSA9PSAwKQotICAvLyAgICByZXR1cm4gbnVsbDsKLSAgLy8gIHJldHVybiAoKE1JTUVDb250ZW50KSBsaXN0LmdldCgwKSkuZ2V0UGFydCgpOwotICAvL30KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTI2LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTI2LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzZjI0ZWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTkyNi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjEwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRUNvbnRlbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWVzc2FnZUVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWltZVBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NaW1lUGFydHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuTUlNRUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5NSU1FVXRpbHM7Ci0KLS8qKgotICogQVAxOTI2Ci0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIG1lc3NhZ2U8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+QSBtZXNzYWdlIGluY2x1ZGVzIGFsbCBvZiB0aGUgTUlNRSBwYXJ0cyBkZXNjcmliZWQgYnkKLSAqIGl0cyBXU0RMIE1JTUUgYmluZGluZy48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQVAxOTI2IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQVAxOTI2KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIGlmKCFlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuaXNNaW1lQ29udGVudCgpKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotICAgICAgCi0gICAgICAvLyBnZXQgbWVzc2FnZSBtaW1lIHBhcnRzCi0gICAgICBNaW1lUGFydHMgbWltZVBhcnRzID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1pbWVQYXJ0cygpOwotICAgICAgCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSB2YWxpZGF0b3IuZ2V0T3BlcmF0aW9uTWF0Y2goCi0gICAgICAgICAgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlUeXBlKCksCi0gICAgICAgICAgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCkpOwotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBubyBtYXRjaGVkIG9wZXJhdGlvbiwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24gPT0gbnVsbCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgLy8gRmluZGluZyBvcGVyYXRpb24gZXh0ZW5zaWJpbGl0eSBlbGVtcwotICAgICAgLy8gaW4gdGhlIGJpbmRpbmcgZGVwZW5kaW5nIG9uIG1lc3NhZ2UgdHlwZQotICAgICAgTGlzdCBleHRFbGVtcyA9IG51bGw7Ci0gICAgICBpZiAoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldFR5cGUoKS5lcXVhbHMoCi0gICAgICAgIE1lc3NhZ2VFbnRyeS5UWVBFX1JFUVVFU1QpCi0gICAgICAgICYmIGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZXh0RWxlbXMgPSBiaW5kaW5nT3BlcmF0aW9uCi0gICAgICAgICAgLmdldEJpbmRpbmdJbnB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldFR5cGUoKS5lcXVhbHMoCi0gICAgICAgIE1lc3NhZ2VFbnRyeS5UWVBFX1JFU1BPTlNFKQotICAgICAgICAmJiBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBleHRFbGVtcyA9IGJpbmRpbmdPcGVyYXRpb24KLSAgICAgICAgICAuZ2V0QmluZGluZ091dHB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgfQotICAgICAgLy8gY2hlY2sgbGlzdCBmb3IgdGhlIGZpcnN0IGVsZW1lbnQKLSAgICAgIGlmKChleHRFbGVtcyA9PSBudWxsKSB8fCAoZXh0RWxlbXMuc2l6ZSgpID09IDApIHx8IAotICAgICAgICAgIShleHRFbGVtcy5nZXQoMCkgaW5zdGFuY2VvZiBNSU1FTXVsdGlwYXJ0UmVsYXRlZCkpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICAKLSAgICAgIC8vIGdldCBsaXN0IG1pbWUgcGFydHMgZnJvbSBkZWZpbml0aW9uCi0gICAgICBNSU1FTXVsdGlwYXJ0UmVsYXRlZCBtaW1lID0gKE1JTUVNdWx0aXBhcnRSZWxhdGVkKSBleHRFbGVtcy5nZXQoMCk7Ci0gICAgICBMaXN0IHBhcnRzID0gbWltZS5nZXRNSU1FUGFydHMoKTsKLQotICAgICAgaWYobWltZVBhcnRzLmdldFJvb3RQYXJ0KCkgPT0gbnVsbCB8fCBtaW1lUGFydHMuY291bnQoKT09MCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIC8vIHNraXAgcm9vdCBwYXJ0Ci0gICAgICBmb3IgKGludCBpID0gMTsgaSA8IHBhcnRzLnNpemUoKTsgaSsrKQotICAgICAgewotICAgICAgICBTdHJpbmcgcGFydE5hbWUgPSBnZXRNSU1FQ29udGVudFBhcnQoKE1JTUVQYXJ0KSBwYXJ0cy5nZXQoaSkpOwotICAgICAgICAvLyBmaW5kIHRoZSBjb3JyZXNwb25kaW5nIE1JTUUgcGFydAotICAgICAgICBpZiAoZmluZE1JTUVQYXJ0KG1pbWVQYXJ0cy5nZXRQYXJ0cygpLCBwYXJ0TmFtZSkgPT0gbnVsbCkgCi0gICAgICAgIHsgICAgICAgICAgICAKLSAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIGNvcnJlc3BvbmRpbmcgYmluZGluZyAiICsKLSAgICAgICAgICAgICAgIm9wZXJhdGlvbiBcIiIgKyBiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKSArIAotICAgICAgICAgICAgICAiXCIgZG9lcyBub3QgY29udGFpbiBwYXJ0IFwiIiArIHBhcnROYW1lICsgIlwiIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IAotICAgICAgICB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0gICAgCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotICAvKioKLSAgICogZmluZCBjb3JyZXNwb25kaW5nIE1JTUUgcGFydAotICAgKiBAcGFyYW0gcGFydHMgYXJyYXkgb2Ygc29hcCBNSU1FIHBhcnRzCi0gICAqIEBwYXJhbSBwYXJ0TmFtZSBwYXJ0IG5hbWUgdG8gZmluZAotICAgKiBAcmV0dXJuIGNvcnJlc3BvbmRpbmcgTUlNRSBwYXJ0ICJDb250ZW50LUlEIiB2YWx1ZSwgCi0gICAqIGlmIHRoZSBwYXJ0IGRvZXNudCBmb3VuZCwgcmV0dW5zIG51bGwKLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24KLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGZpbmRNSU1FUGFydChDb2xsZWN0aW9uIHBhcnRzLCBTdHJpbmcgcGFydE5hbWUpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgaWYocGFydE5hbWUgPT0gbnVsbCkKLSAgICAgICByZXR1cm4gbnVsbDsKLSAgICBJdGVyYXRvciBpcGFydHMgPSBwYXJ0cy5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpcGFydHMuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIE1pbWVQYXJ0IHBhcnQgPSAoTWltZVBhcnQpaXBhcnRzLm5leHQoKTsKLSAgICAgIFN0cmluZyBtX3BhcnROYW1lID0gTUlNRVV0aWxzLmdldE1pbWVIZWFkZXJBdHRyaWJ1dGUoCi0gICAgICAgICAgcGFydC5nZXRIZWFkZXJzKCksIE1JTUVDb25zdGFudHMuSEVBREVSX0NPTlRFTlRfSUQpOwotCi0gICAgICAvLyBjaGVjayB2YWx1ZSBmb3JtYXQgPHBhcnRuYW1lPVVJREBob3N0PgotICAgICAgaWYgKChtX3BhcnROYW1lICE9IG51bGwpICYmIChtX3BhcnROYW1lLnN0YXJ0c1dpdGgoIjwiKSkgJiYgCi0gICAgICAgICAgKG1fcGFydE5hbWUuaW5kZXhPZigiPSIpICE9IC0xKSAmJiAKLSAgICAgICAgICAoZW5jb2RlUGFydE5hbWUobV9wYXJ0TmFtZS5zdWJzdHJpbmcoMSwgbV9wYXJ0TmFtZS5pbmRleE9mKCI9IikpKS5lcXVhbHMocGFydE5hbWUpKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcGFydE5hbWU7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHBhcnQgdmFsdWUgZnJvbSBNSU1FQ29udGVudCBlbGVtZW50Ci0gICAqIEBwYXJhbSBwYXJ0IE1JTUVQYXJ0IGVsZW1lbnQKLSAgICogQHJldHVybiB0aGUgcGFydCB2YWx1ZSBmcm9tIE1JTUVDb250ZW50IGVsZW1lbnQKLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGdldE1JTUVDb250ZW50UGFydChNSU1FUGFydCBwYXJ0KSB7Ci0gICAgTGlzdCBsaXN0ID0gcGFydC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICBpZihsaXN0LnNpemUoKSA9PSAwKQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgcmV0dXJuICgoTUlNRUNvbnRlbnQpIGxpc3QuZ2V0KDApKS5nZXRQYXJ0KCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBFbmNvZGUgc3RyaW5nIGZyb20gJUhIIHRvIFVURgotICAgKiBAcGFyYW0gc3RyIHN0cmluZwotICAgKiBAcmV0dXJuIGVuY29kZWQgc3RyaW5nIGZyb20gJUhIIGZvcm1hdAotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZW5jb2RlUGFydE5hbWUoU3RyaW5nIHN0cikgewotICAgIFN0cmluZ0J1ZmZlciByZXMgPSBuZXcgU3RyaW5nQnVmZmVyKCIiKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0ci5sZW5ndGgoKTsgaSsrKQotICAgIHsKLSAgICAgIGlmKChzdHIuY2hhckF0KGkpID09ICclJykgJiYgKHN0ci5sZW5ndGgoKSA+IGkrMikpCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgaW50IHZhbHVlID0gSW50ZWdlci5wYXJzZUludCgKLSAgICAgICAgICAgICAgU3RyaW5nLnZhbHVlT2Yoc3RyLmNoYXJBdChpKzEpKSArCi0gICAgICAgICAgICAgIFN0cmluZy52YWx1ZU9mKHN0ci5jaGFyQXQoaSsyKSksIDE2KTsKLSAgICAgICAgICByZXMuYXBwZW5kKChjaGFyKSB2YWx1ZSk7Ci0gICAgICAgICAgaSArPTI7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2goTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpe30KLSAgICAgIH0gCi0gICAgICBlbHNlIAotICAgICAgewotICAgICAgICByZXMuYXBwZW5kKHN0ci5jaGFyQXQoaSkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzLnRvU3RyaW5nKCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTMxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTMxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxY2RmYzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTkzMS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLS8qKgotICogQVAxOTMxCi0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHJvb3QtcGFydCBvZiBhIG11bHRpcGFydC9yZWxhdGVkIG1lc3NhZ2U8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIGVudGl0eSBib2R5IG9mIHRoZSByb290LXBhcnQgb2YgbXVsdGlwYXJ0L3JlbGF0ZWQKLSAqIG1lc3NhZ2UgaXMgYSBzb2FwOkVudmVsb3BlLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBBUDE5MzEgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBBUDE5MzEoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gY2hlY2sgZm9yIHRoZSByb290IHBhcnQKLSAgICBpZihlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuaXNNaW1lQ29udGVudCgpICYmCi0gICAgICAgKGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRNaW1lUGFydHMoKS5nZXRSb290UGFydCgpICE9IG51bGwpKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgLy8gcGFyc2Ugcm9vdCBwYXJ0IG1lc3NhZ2UKLSAgICAgIERvY3VtZW50IGRvYyA9IFhNTFV0aWxzLnBhcnNlWE1MKAotICAgICAgICAgIGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRNaW1lUGFydHMoKS5nZXRSb290UGFydCgpLmdldENvbnRlbnQoKSk7Ci0gICAgICAKLSAgICAgIC8vIGdldCBlbnRpdHkgYm9keQotICAgICAgRWxlbWVudCBlbCA9IGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKTsKLSAgICAgIAotICAgICAgLy8gaWYgdGhlIGVsZW1lbnQgaXMgbm90IHNvYXA6RW52ZWxvcGUsIHRoZW4gZmFpbCAgCi0gICAgICBpZighZWwuZ2V0TG9jYWxOYW1lKCkuZXF1YWxzKFdTSVRhZy5FTEVNX1NPQVBfRU5WRUxPUEUuZ2V0TG9jYWxQYXJ0KCkpIHx8Ci0gICAgICAgICAhZWwuZ2V0TmFtZXNwYWNlVVJJKCkuZXF1YWxzKFdTSVRhZy5FTEVNX1NPQVBfRU5WRUxPUEUuZ2V0TmFtZXNwYWNlVVJJKCkpKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgInRoZSBlbnRpdHkgYm9keSBvZiB0aGUgcm9vdCBwYXJ0IGlzIHsiICsKLSAgICAgICAgICAgIGVsLmdldE5hbWVzcGFjZVVSSSgpICsgIn0iICsgZWwuZ2V0TG9jYWxOYW1lKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgICB9Ci0gICAgICB9IAotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgInRoZSBlbnRpdHkgYm9keSBvZiB0aGUgcm9vdCBwYXJ0IGRvZXMgbm90IGNvbnRhaW4gIiArCi0gICAgICAgICAgICAiXCJzb2FwOkVudmVsb3BlXCIgZWxlbWVudCIsIGVudHJ5Q29udGV4dCk7Ci0gICAgICB9Ci0gICAgfSAKLSAgICBlbHNlIAotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTkzMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTkzMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOWMwZmM3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9BUDE5MzIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuSFRUUENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5IVFRQVXRpbHM7Ci0KLS8qKgotICogQVAxOTMyCi0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIG1lc3NhZ2UgY29udGFpbmluZyBhIENvbnRlbnQtVHlwZSBIVFRQIGhlYWRlcgotICogZmllbGQtdmFsdWUgd2l0aCBhIG1lZGlhIHR5cGUgb2YgIm11bHRpcGFydC9yZWxhdGVkIjwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5JbiBhIG1lc3NhZ2UsIHRoZSBDb250ZW50LVR5cGUgSFRUUCBoZWFkZXIgZmllbGQtdmFsdWUKLSAqIGhhcyBhIHR5cGUgcGFyYW1ldGVyIHdpdGggYSB2YWx1ZSBvZiAidGV4dC94bWwiIHdoZW4gaXQgaGFzIGEgbWVkaWEgdHlwZSBvZgotICogIm11bHRpcGFydC9yZWxhdGVkIi48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQVAxOTMyIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQVAxOTMyKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIGNoZWNrIGZvciBtdWx0aXBhcnQvcmVsYXRlZCBjb250ZW50IHR5cGUKLSAgICBTdHJpbmcgY29udGVudF90eXBlID0gSFRUUFV0aWxzLmdldEh0dHBIZWFkZXJBdHRyaWJ1dGUoCi0gICAgICAgIGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRIVFRQSGVhZGVycygpLCAKLSAgICAgICAgSFRUUENvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9UWVBFKTsKLSAgICAKLSAgICBpZigoY29udGVudF90eXBlID09IG51bGwpIHx8IAotICAgICAgICghY29udGVudF90eXBlLmVxdWFsc0lnbm9yZUNhc2UoV1NJQ29uc3RhbnRzLkNPTlRFTlRfVFlQRV9NVUxUSVBBUlQpKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0gCi0gICAgZWxzZSAgCi0gICAgewotICAgICAgU3RyaW5nIHN1YlR5cGUgPSBIVFRQVXRpbHMuZ2V0SHR0cEhlYWRlclN1YkF0dHJpYnV0ZSgKLSAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0SFRUUEhlYWRlcnMoKSwgCi0gICAgICAgICAgSFRUUENvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9UWVBFLCAidHlwZSIpOwotICAgICAgaWYoKHN1YlR5cGUgPT0gbnVsbCkKLSAgICAgICAgfHwgIXN1YlR5cGUuZXF1YWxzSWdub3JlQ2FzZShXU0lDb25zdGFudHMuQ09OVEVOVF9UWVBFX1RFWFRfWE1MKSkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgICAgICJUaGUgXCJ0eXBlXCIgcGFyYW1ldGVyIHZhbHVlIGlzIFwiIiArIHN1YlR5cGUgKyAiXCIiLCBlbnRyeUNvbnRleHQpOwotICAgICAgfQotICAgIH0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9BUDE5MzMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9BUDE5MzMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ0OTFmYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTMzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVDb250ZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVQYXJ0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1pbWVQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWltZVBhcnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLk1JTUVDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuTUlNRVV0aWxzOwotCi0vKioKLSAqIEFQMTkzMwotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBtZXNzYWdlPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPklmIGEgZGVzY3JpcHRpb24gYmluZHMgYSB3c2RsOm1lc3NhZ2UgcGFydCB0byBhCi0gKiBtaW1lOmNvbnRlbnQgZWxlbWVudCwgdGhlbiB0aGUgY29ycmVzcG9uZGluZyBNSU1FIHBhcnQgaW4gYSBtZXNzYWdlIGhhcyBhCi0gKiBjb250ZW50LWlkIGhlYWRlciB3aXRoIGEgZ2xvYmFsbHkgdW5pcXVlIHZhbHVlIG9mIHRoZSBmb3JtCi0gKiAmbHQ7cGFydG5hbWU9SURAaG9zdG5hbWUmZ3Q7LCB3aGVyZSAncGFydG5hbWUnIGlzIHRoZSB2YWx1ZSBvZiB0aGUgbmFtZSBhdHRyaWJ1dGUgb2YKLSAqIHRoZSB3c2RsOnBhcnQgZWxlbWVudCByZWZlcmVuY2VkIGJ5IHRoZSBtaW1lOmNvbnRlbnQuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEFQMTkzMyBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEFQMTkzMyhCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIGlmKCFlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuaXNNaW1lQ29udGVudCgpKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotICAgICAgCi0gICAgICAvLyBnZXQgbWVzc2FnZSBtaW1lIHBhcnRzCi0gICAgICBNaW1lUGFydHMgbWltZVBhcnRzID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1pbWVQYXJ0cygpOwotICAgICAgCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSB2YWxpZGF0b3IuZ2V0T3BlcmF0aW9uTWF0Y2goCi0gICAgICAgICAgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlUeXBlKCksCi0gICAgICAgICAgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCkpOwotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBubyBtYXRjaGVkIG9wZXJhdGlvbiwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24gPT0gbnVsbCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLQotICAgICAgLy8gRmluZGluZyBvcGVyYXRpb24gZXh0ZW5zaWJpbGl0eSBlbGVtcwotICAgICAgLy8gaW4gdGhlIGJpbmRpbmcgZGVwZW5kaW5nIG9uIG1lc3NhZ2UgdHlwZQotICAgICAgTGlzdCBleHRFbGVtcyA9IG51bGw7Ci0gICAgICBpZiAoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldFR5cGUoKS5lcXVhbHMoCi0gICAgICAgIE1lc3NhZ2VFbnRyeS5UWVBFX1JFUVVFU1QpCi0gICAgICAgICYmIGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZXh0RWxlbXMgPSBiaW5kaW5nT3BlcmF0aW9uCi0gICAgICAgICAgLmdldEJpbmRpbmdJbnB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldFR5cGUoKS5lcXVhbHMoCi0gICAgICAgIE1lc3NhZ2VFbnRyeS5UWVBFX1JFU1BPTlNFKQotICAgICAgICAmJiBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBleHRFbGVtcyA9IGJpbmRpbmdPcGVyYXRpb24KLSAgICAgICAgICAuZ2V0QmluZGluZ091dHB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgfQotICAgICAgLy8gY2hlY2sgbGlzdCBmb3IgdGhlIGZpcnN0IGVsZW1lbnQKLSAgICAgIGlmKChleHRFbGVtcyA9PSBudWxsKSB8fCAoZXh0RWxlbXMuc2l6ZSgpID09IDApIHx8IAotICAgICAgICAgIShleHRFbGVtcy5nZXQoMCkgaW5zdGFuY2VvZiBNSU1FTXVsdGlwYXJ0UmVsYXRlZCkpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICAKLSAgICAgIC8vIGdldCBsaXN0IG1pbWUgcGFydHMgZnJvbSBkZWZpbml0aW9uCi0gICAgICBNSU1FTXVsdGlwYXJ0UmVsYXRlZCBtaW1lID0gKE1JTUVNdWx0aXBhcnRSZWxhdGVkKSBleHRFbGVtcy5nZXQoMCk7Ci0gICAgICBMaXN0IHBhcnRzID0gbWltZS5nZXRNSU1FUGFydHMoKTsKLSAgICAgIAotICAgICAgLy8gc2tpcCByb290IHBhcnQKLSAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgcGFydHMuc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBwYXJ0TmFtZSA9IGdldE1JTUVDb250ZW50UGFydCgoTUlNRVBhcnQpIHBhcnRzLmdldChpKSk7Ci0gICAgICAgIC8vIGZpbmQgdGhlIGNvcnJlc3BvbmRpbmcgTUlNRSBwYXJ0Ci0gICAgICAgIGlmIChmaW5kTUlNRVBhcnQobWltZVBhcnRzLmdldFBhcnRzKCksIHBhcnROYW1lKSA9PSBudWxsKSAKLSAgICAgICAgeyAgICAgICAgICAgIAotICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgY29ycmVzcG9uZGluZyBiaW5kaW5nICIgKwotICAgICAgICAgICAgICAib3BlcmF0aW9uIFwiIiArIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpICsgCi0gICAgICAgICAgICAgICJcIiBkb2VzIG5vdCBjb250YWluIHBhcnQgXCIiICsgcGFydE5hbWUgKyAiXCIiKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gCi0gICAgICAgIHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIGZpbmQgY29ycmVzcG9uZGluZyBNSU1FIHBhcnQKLSAgICogQHBhcmFtIHBhcnRzIGFycmF5IG9mIHNvYXAgTUlNRSBwYXJ0cwotICAgKiBAcGFyYW0gcGFydE5hbWUgcGFydCBuYW1lIHRvIGZpbmQKLSAgICogQHJldHVybiBjb3JyZXNwb25kaW5nIE1JTUUgcGFydCAiQ29udGVudC1JRCIgdmFsdWUsIAotICAgKiBpZiB0aGUgcGFydCBkb2VzbnQgZm91bmQsIHJldHVucyBudWxsCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gICAqLwotICBwcml2YXRlIFN0cmluZyBmaW5kTUlNRVBhcnQoQ29sbGVjdGlvbiBwYXJ0cywgU3RyaW5nIHBhcnROYW1lKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24sIEFzc2VydGlvbkZhaWxFeGNlcHRpb24KLSAgewotICAgIGlmKHBhcnROYW1lID09IG51bGwpCi0gICAgICAgcmV0dXJuIG51bGw7Ci0gICAgCi0gICAgSXRlcmF0b3IgaXBhcnRzID0gcGFydHMuaXRlcmF0b3IoKTsKLSAgICBpbnQgaSA9IDA7Ci0gICAgd2hpbGUgKGlwYXJ0cy5oYXNOZXh0KCkpCi0gICAgewotICAgICAgaSA9IGkgKyAxOwotICAgICAgTWltZVBhcnQgcGFydCA9IChNaW1lUGFydClpcGFydHMubmV4dCgpOwotICAgICAgU3RyaW5nIG1fcGFydE5hbWUgPSBNSU1FVXRpbHMuZ2V0TWltZUhlYWRlckF0dHJpYnV0ZSgKLSAgICAgICAgICBwYXJ0LmdldEhlYWRlcnMoKSwgTUlNRUNvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9JRCk7Ci0KLSAgICAgIC8vIGNoZWNrIHZhbHVlIGZvcm1hdCA8cGFydG5hbWU9VUlEQGhvc3RuYW1lPgotICAgICAgaWYgKChtX3BhcnROYW1lICE9IG51bGwpICYmIG1fcGFydE5hbWUuc3RhcnRzV2l0aCgiPCIpICYmIG1fcGFydE5hbWUuZW5kc1dpdGgoIj4iKSkgCi0gICAgICB7Ci0gICAgICAgIGludCBpZHgsIGF0SWR4OwotICAgICAgICBTdHJpbmcgZW5QYXJ0TmFtZSA9IG51bGw7Ci0gICAgICAgIFN0cmluZyB1aWQgPSBudWxsOwotICAgICAgICBTdHJpbmcgaG9zdCA9IG51bGw7Ci0gICAgICAgIAotICAgICAgICAvLyBnZXQgcGFydCBuYW1lIGZyb20gY29udGVudC1pZAotICAgICAgICBpZiAoKGlkeCA9IG1fcGFydE5hbWUuaW5kZXhPZigiPSIpKSAhPSAtMSkgCi0gICAgICAgIHsKLSAgICAgICAgICBlblBhcnROYW1lID0gZW5jb2RlUGFydE5hbWUobV9wYXJ0TmFtZS5zdWJzdHJpbmcoMSwgaWR4KSk7IAotICAgICAgICB9Ci0gICAgICAgIC8vIGdldCB1aWQgYW5kIGhvc3RuYW1lIGZyb20gY29udGVudC1pZAotICAgICAgICBpZiAoKChhdElkeCA9IG1fcGFydE5hbWUuaW5kZXhPZigiQCIpKSAhPSAtMSkgJiYgKGF0SWR4ID4gaWR4KSkgCi0gICAgICAgIHsKLSAgICAgICAgICB1aWQgPSBtX3BhcnROYW1lLnN1YnN0cmluZyhpZHgrMSwgYXRJZHgpOwotICAgICAgICAgIGhvc3QgPSBtX3BhcnROYW1lLnN1YnN0cmluZyhhdElkeCsxLCBtX3BhcnROYW1lLmxlbmd0aCgpLTEpOwotICAgICAgICB9Ci0gICAgICAgIC8vIGlmIHBhcnQgbmFtZXMgbWF0Y2gsIHZhbGlkYXRlIGZvcm1hdAotICAgICAgICBpZigoZW5QYXJ0TmFtZSAhPSBudWxsKSAmJiBlblBhcnROYW1lLmVxdWFscyhwYXJ0TmFtZSkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZigodWlkID09IG51bGwpIHx8ICh1aWQubGVuZ3RoKCkgPT0gMCkpCi0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAiVGhlIFwiQ29udGVudC1JRFwiIGF0dHJpYnV0ZSBvZiB0aGUgcGFydCBcIiIrKGkrMSkrCi0gICAgICAgICAgICAgICAgIlwiY29udGFpbnMgdmFsdWUgXCIiKyBtX3BhcnROYW1lKwotICAgICAgICAgICAgICAgICJcIiB3aGljaCBoYXMgYSBpbmNvcnJlY3QgVUlEIGZvcm1hdCIpOwotICAgICAgICAgIGlmKGhvc3QgPT0gbnVsbCkgCi0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAiVGhlIFwiQ29udGVudC1JRFwiIGF0dHJpYnV0ZSBvZiB0aGUgcGFydCBcIiIrKGkrMSkrCi0gICAgICAgICAgICAgICAgIlwiY29udGFpbnMgdmFsdWUgXCIiKyBtX3BhcnROYW1lKwotICAgICAgICAgICAgICAgICJcIiB3aGljaCBoYXMgYSBpbmNvcnJlY3QgaG9zdCBmb3JtYXQiKTsKLSAgICAgICAgICAvLyBjaGVjayBmb3IgbWFsZm9ybWVkIFVSTAotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG5ldyBVUkwoIkhUVFAiLCBob3N0LCAiIik7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAiVGhlIFwiQ29udGVudC1JRFwiIGF0dHJpYnV0ZSBvZiB0aGUgcGFydCBcIiIrKGkrMSkrCi0gICAgICAgICAgICAgICAgIlwiY29udGFpbnMgdmFsdWUgXCIiKyBtX3BhcnROYW1lKwotICAgICAgICAgICAgICAgICJcIiB3aGljaCBoYXMgYSBpbmNvcnJlY3QgaG9zdCBmb3JtYXQiKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIG1fcGFydE5hbWU7Ci0gICAgICAgIH0gCi0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgcGFydCB2YWx1ZSBmcm9tIE1JTUVDb250ZW50IGVsZW1lbnQKLSAgICogQHBhcmFtIHBhcnQgTUlNRVBhcnQgZWxlbWVudAotICAgKiBAcmV0dXJuIHRoZSBwYXJ0IHZhbHVlIGZyb20gTUlNRUNvbnRlbnQgZWxlbWVudAotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0TUlNRUNvbnRlbnRQYXJ0KE1JTUVQYXJ0IHBhcnQpIAotICB7Ci0gICAgTGlzdCBsaXN0ID0gcGFydC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICBpZihsaXN0LnNpemUoKSA9PSAwKQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgcmV0dXJuICgoTUlNRUNvbnRlbnQpIGxpc3QuZ2V0KDApKS5nZXRQYXJ0KCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBFbmNvZGUgc3RyaW5nIGZyb20gJUhIIHRvIFVURgotICAgKiBAcGFyYW0gc3RyIHN0cmluZwotICAgKiBAcmV0dXJuIGVuY29kZWQgc3RyaW5nIGZyb20gJUhIIGZvcm1hdAotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZW5jb2RlUGFydE5hbWUoU3RyaW5nIHN0cikgewotICAgIFN0cmluZ0J1ZmZlciByZXMgPSBuZXcgU3RyaW5nQnVmZmVyKCIiKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0ci5sZW5ndGgoKTsgaSsrKQotICAgIHsKLSAgICAgIGlmKChzdHIuY2hhckF0KGkpID09ICclJykgJiYgKHN0ci5sZW5ndGgoKSA+IGkrMikpCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgaW50IHZhbHVlID0gSW50ZWdlci5wYXJzZUludCgKLSAgICAgICAgICAgICAgU3RyaW5nLnZhbHVlT2Yoc3RyLmNoYXJBdChpKzEpKSArCi0gICAgICAgICAgICAgIFN0cmluZy52YWx1ZU9mKHN0ci5jaGFyQXQoaSsyKSksIDE2KTsKLSAgICAgICAgICByZXMuYXBwZW5kKChjaGFyKSB2YWx1ZSk7Ci0gICAgICAgICAgaSArPTI7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2goTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpe30KLSAgICAgIH0gCi0gICAgICBlbHNlIAotICAgICAgewotICAgICAgICByZXMuYXBwZW5kKHN0ci5jaGFyQXQoaSkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzLnRvU3RyaW5nKCk7Ci0gIH0gIAotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9BUDE5MzQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9BUDE5MzQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWMwNjA1MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTM0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NaW1lUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1pbWVQYXJ0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5NSU1FQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLk1JTUVVdGlsczsKLQotLyoqCi0gKiBBUDE5MzQKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgcGFydCBvZiBhIG11bHRpcGFydC9yZWxhdGVkIG1lc3NhZ2U8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIENvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmcgZmllbGQgb2YgYSBwYXJ0IGluIGEKLSAqIG11bHRpcGFydC9yZWxhdGVkIG1lc3NhZ2UgaGFzIGEgdmFsdWUgb2YgIjdiaXQiLCAiOGJpdCIsICJiaW5hcnkiLAotICogInF1b3RlZC1wcmludGFibGUiIG9yICJiYXNlNjQiLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBBUDE5MzQgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBBUDE5MzQoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gY2hlY2sgZm9yIG11bHRpcGFydC9yZWxhdGVkIGNvbnRlbnQgdHlwZQotICAgIGlmKCFlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuaXNNaW1lQ29udGVudCgpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfSAKLSAgICBlbHNlIAotICAgIHsKLSAgICAgIC8vIGdldCBNSU1FIHBhcnRzCi0gICAgICBNaW1lUGFydHMgcGFydHMgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWltZVBhcnRzKCk7Ci0gICAgICBpZihwYXJ0cy5jb3VudCgpID09IDApIAotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgCUl0ZXJhdG9yIGlwYXJ0cyA9IHBhcnRzLmdldFBhcnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgLy8gY2hlY2sgZWFjaCBwYXJ0IGZvciB0aGUgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZyBmaWVsZAotICAgICAgICBpbnQgaSA9IDA7Ci0gICAgICAgIHdoaWxlIChpcGFydHMuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgTWltZVBhcnQgcGFydCA9IChNaW1lUGFydClpcGFydHMubmV4dCgpOwotICAgICAgICAgIFN0cmluZyB0eXBlX3ZhbHVlID0gTUlNRVV0aWxzLmdldE1pbWVIZWFkZXJBdHRyaWJ1dGUoCi0gICAgICAgICAgICAgIHBhcnQuZ2V0SGVhZGVycygpLAotICAgICAgICAgICAgICBNSU1FQ29uc3RhbnRzLkhFQURFUl9DT05URU5UX1RSQU5TRkVSX0VOQ09ESU5HKTsKLSAgICAgICAgICBpZiAodHlwZV92YWx1ZSAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmKCh0eXBlX3ZhbHVlID09IG51bGwpIHx8ICEodHlwZV92YWx1ZS5lcXVhbHNJZ25vcmVDYXNlKCI3Yml0IikgfHwKLSAgICAgICAgICAgICAgICB0eXBlX3ZhbHVlLmVxdWFsc0lnbm9yZUNhc2UoIjhiaXQiKSB8fCAKLSAgICAgICAgICAgICAgICB0eXBlX3ZhbHVlLmVxdWFsc0lnbm9yZUNhc2UoImJhc2U2NCIpIHx8Ci0gICAgICAgICAgICAgICAgdHlwZV92YWx1ZS5lcXVhbHNJZ25vcmVDYXNlKCJxdW90ZWQtcHJpbnRhYmxlIikgfHwKLSAgICAgICAgICAgICAgICB0eXBlX3ZhbHVlLmVxdWFsc0lnbm9yZUNhc2UoImJpbmFyeSIpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgICAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgICAgICAgICAgICIoIiArIChpKzEpICsKLSAgICAgICAgICAgICAgICAgICIpLCBwYXJ0IGhlYWRlciBmaWVsZCBcIkNvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmdcIiBoYXMgaW5jb3JyZWN0IHZhbHVlIFwiIisKLSAgICAgICAgICAgICAgICAgIHR5cGVfdmFsdWUrIlwiIiwgZW50cnlDb250ZXh0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgaSsrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTM1LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTM1LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4MjUxZjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTkzNS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NaW1lUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1pbWVQYXJ0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5IVFRQQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5VdGlsczsKLQotLyoqCi0gKiBBUDE5MzUKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgcGFydCBvZiBhIG11bHRpcGFydC9yZWxhdGVkIG1lc3NhZ2U8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIGVuY29kaW5nIG9mIHRoZSBib2R5IG9mIGEgcGFydCBpbiBhCi0gKiBtdWx0aXBhcnQvcmVsYXRlZCBtZXNzYWdlIGNvbmZvcm1zIHRvIHRoZSBlbmNvZGluZyBpbmRpY2F0ZWQgYnkgdGhlCi0gKiBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nIGZpZWxkLXZhbHVlLAotICogYXMgc3BlY2lmaWVkIGJ5IFJGQzIwNDUuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEFQMTkzNSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEFQMTkzNShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBpZighZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmlzTWltZUNvbnRlbnQoKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0gCi0gICAgZWxzZSAKLSAgICB7Ci0gICAgICAvLyBnZXQgTUlNRSBwYXJ0cwotICAgICAgTWltZVBhcnRzIHBhcnRzID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1pbWVQYXJ0cygpOwotICAgICAgaWYocGFydHMuY291bnQoKSA9PSAwKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBjaGVjayBlYWNoIHBhcnQgZm9yIHRoZSBlbmNvZGluZyBtYXRjaAotICAgICAgCUl0ZXJhdG9yIGlwYXJ0cyA9IHBhcnRzLmdldFBhcnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgIAlpbnQgaSA9IDA7Ci0gICAgICAJTWltZVBhcnQgcm9vdCA9IHBhcnRzLmdldFJvb3RQYXJ0KCk7Ci0gICAgICAgIHdoaWxlIChpcGFydHMuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgaSA9IDE7Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAJTWltZVBhcnQgcGFydCA9IChNaW1lUGFydClpcGFydHMubmV4dCgpOwotICAgICAgICAJCi0gICAgICAgICAgICAvLyBnZXQgZW5jb2RpbmcgZnJvbSBoZWFkZXIKLSAgICAgICAgICAgIFN0cmluZyBlbmNvZGluZyA9ICBIVFRQVXRpbHMuZ2V0SHR0cEhlYWRlckF0dHJpYnV0ZShwYXJ0LmdldEhlYWRlcnMoKSwgCi0gICAgICAgICAgICAJSFRUUENvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9UUkFOU0ZFUl9FTkNPRElORyk7Ci0gICAgICAgICAgCi0gICAgICAgICAgIAlpZiAoKHBhcnQgPT0gcm9vdCkgfHwgCi0gICAgICAgICAgIAkJKChlbmNvZGluZyAhPSBudWxsKSAmJiBlbmNvZGluZy5lcXVhbHNJZ25vcmVDYXNlKCJiYXNlNjQiKSkpCi0gICAgICAgICAgICAgIGNoZWNrUGFydChwYXJ0LCBlbmNvZGluZywgZmFsc2UpOwotICAgICAgICAgIAllbHNlIAotICAgICAgICAgIAkgIGNoZWNrUGFydChwYXJ0LCBlbmNvZGluZywgdHJ1ZSk7Ci0gICAgICAgICAgfSBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBlKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgICAgICJwYXJ0ICIrKGkrMSkrIiBFcnJvcjogIiArIGUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotICAvKioKLSAgICogQ2hlY2sgbWVzc2FnZSBlbnRyeSB0byBlbmNvZGluZyBjb25mb3JtaXR5IAotICAgKiBAcGFyYW0gZW50cnkgbWVzc2FnZSBlbnRyeQotICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxFeGNlcHRpb24gaWYgbWVzc2FnZSBkb2VzIG5vdCBlbmNvZGluZyBjb25mb3JtaXR5ICAKLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gCi0gICAqLwotICBwcml2YXRlIHZvaWQgY2hlY2tQYXJ0KE1pbWVQYXJ0IHBhcnQsIFN0cmluZyAgZW5jb2RpbmcsIGJvb2xlYW4gZW5jb2RlZCkgCi0gICAgdGhyb3dzIEFzc2VydGlvbkZhaWxFeGNlcHRpb24sIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIGNvbnRlbnQgPSBudWxsOwotICAgIGlmIChlbmNvZGVkKQotICAgICAgIGNvbnRlbnQgPSBuZXcgU3RyaW5nKFV0aWxzLmRlY29kZUJhc2U2NChwYXJ0LmdldENvbnRlbnQoKSkpOwotICAgICBlbHNlCi0gICAgCWNvbnRlbnQgPSBwYXJ0LmdldENvbnRlbnQoKTsKLSAgICAKLSAgICBpZihlbmNvZGluZyA9PSBudWxsKSAKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIC8vIGNoZWNrIDdiaXQKLSAgICB9IGVsc2UgaWYoZW5jb2RpbmcuZXF1YWxzSWdub3JlQ2FzZSgiN2JpdCIpKSB7Ci0gICAgICBjaGVja09uN2JpdChjb250ZW50KTsKLSAgICAvLyBjaGVjayA4Yml0Ci0gICAgfSBlbHNlIGlmKGVuY29kaW5nLmVxdWFsc0lnbm9yZUNhc2UoIjhiaXQiKSkgewotICAgICAgY2hlY2tPbjhiaXQoY29udGVudCk7Ci0gICAgLy8gY2hlY2sgcXVvdGVkLXByaW50YWJsZQotICAgIH0gZWxzZSBpZihlbmNvZGluZy5lcXVhbHNJZ25vcmVDYXNlKCJxdW90ZWQtcHJpbnRhYmxlIikpIHsKLSAgICAgIGNoZWNrT25RdW90ZWRQcmludGFibGUoY29udGVudCk7Ci0gICAgLy8gY2hlY2sgYmFzZTY0Ci0gICAgfSBlbHNlIGlmKGVuY29kaW5nLmVxdWFsc0lnbm9yZUNhc2UoImJhc2U2NCIpKSB7Ci0gICAgICBjaGVja09uQmFzZTY0KGNvbnRlbnQpOwotICAgIH0KLSAgICAvLyB3ZSBkb250IGNoZWNrIGJpbmFyeSBlbmNvZGluZywgc2luY2UgbWVzc2FnZSBjYW4gY29udGFpbnMgYW55IGNoYXJzIAotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlIGEgN2JpdCBlbmNvZGVkIG1lc3NhZ2UgKFJGQzIwNDUpCi0gICAqIEBwYXJhbSBtZXNzYWdlIG1lc3NhZ2UgdG8gY2hlY2sKLSAgICogQHRocm93cyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGlmIG1lc3NhZ2UgZG9lcyBub3QgY29uZm9ybQotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGNoZWNrT243Yml0KFN0cmluZyBtZXNzYWdlKSAKLSAgICB0aHJvd3MgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nW10gc3RycyA9IHNwbGl0KG1lc3NhZ2UpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3Rycy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBTdHJpbmcgc3RyID0gc3Ryc1tpXTsKLSAgICAgIAotICAgICAgLy8gY2hlY2sgc3RyaW5nIGxlbmd0aAotICAgICAgaWYoc3RyLmxlbmd0aCgpID4gOTk4KSAKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSBsZW5ndGggKCIgKyBzdHIubGVuZ3RoKCkgKyAKLSAgICAgICAgICAgICIpIG9mIHRoZSBsaW5lICgiICsgKGkrMSkgKyAiKSBncmVhdGVyIHRoYW4gOTk4Iik7Ci0gICAgICB9Ci0gICAgICAvLyBObyBvY3RldHMgd2l0aCBkZWNpbWFsIHZhbHVlcyBncmVhdGVyIHRoYW4gMTI3Ci0gICAgICAvLyBhcmUgYWxsb3dlZCBhbmQgbmVpdGhlciBhcmUgTlVMcyAob2N0ZXRzIHdpdGggZGVjaW1hbCB2YWx1ZSAwKS4gIENSCi0gICAgICAvLyhkZWNpbWFsIHZhbHVlIDEzKSBhbmQgTEYgKGRlY2ltYWwgdmFsdWUgMTApIG9jdGV0cyBvbmx5IG9jY3VyIGFzCi0gICAgICAvLyBwYXJ0IG9mIENSTEYgbGluZSBzZXBhcmF0aW9uIHNlcXVlbmNlcy4KLSAgICAgIGNoYXJbXSBjaGFycyA9IHN0ci50b0NoYXJBcnJheSgpOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjaGFycy5sZW5ndGg7IGorKykKLSAgICAgIHsKLSAgICAgICAgaWYoKGNoYXJzW2pdID4gMTI3KSB8fCAoY2hhcnNbal0gPT0gMCkgfHwgCi0gICAgICAgICAgICAoY2hhcnNbal0gPT0gMTApIHx8IChjaGFyc1tqXSA9PSAxMykpCi0gICAgICAgIHsKLSAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIGNoYXIgKCIgKyBjaGFyc1tqXSArIAotICAgICAgICAgICAgICAiKVtjb2RlPSIgKyAoYnl0ZSkgY2hhcnNbal0gKyAiIHBvc2l0aW9uPSIgKyBqICsgCi0gICAgICAgICAgICAgICJdIGRvZXMgbm90IGFsbG93cyBpbiA3Yml0IGVuY29kaW5nIGNvbnRlbnQiKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBWYWxpZGF0ZSBhbiA4Yml0IGVuY29kZWQgbWVzc2FnZSAoUkZDMjA0NSkKLSAgICogQHBhcmFtIG1lc3NhZ2UgbWVzc2FnZSB0byBjaGVjawotICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxFeGNlcHRpb24gaWYgbWVzc2FnZSBkb2VzIG5vdCBjb25mb3JtCi0gICAqLwotICBwcml2YXRlIHZvaWQgY2hlY2tPbjhiaXQoU3RyaW5nIG1lc3NhZ2UpIAotICAgIHRocm93cyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmdbXSBzdHJzID0gc3BsaXQobWVzc2FnZSk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdHJzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIFN0cmluZyBzdHIgPSBzdHJzW2ldOwotICAgICAgCi0gICAgICAvLyBjaGVjayBzdHJpbmcgbGVuZ3RoCi0gICAgICBpZihzdHIubGVuZ3RoKCkgPiA5OTgpIAotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIGxlbmd0aCAoIiArIHN0ci5sZW5ndGgoKSArIAotICAgICAgICAgICAgIikgb2YgdGhlIGxpbmUgKCIgKyAoaSsxKSArICIpIGdyZWF0ZXIgdGhhbiA5OTgiKTsKLSAgICAgIH0KLSAgICAgIC8vIG9jdGV0cyB3aXRoIGRlY2ltYWwgdmFsdWVzIGdyZWF0ZXIgdGhhbiAxMjcKLSAgICAgIC8vIG1heSBiZSB1c2VkLiAgQXMgd2l0aCAiN2JpdCBkYXRhIiBDUiBhbmQgTEYgb2N0ZXRzIG9ubHkgb2NjdXIgYXMgcGFydAotICAgICAgLy8gb2YgQ1JMRiBsaW5lIHNlcGFyYXRpb24gc2VxdWVuY2VzIGFuZCBubyBOVUxzIGFyZSBhbGxvd2VkLiAKLSAgICAgIGNoYXJbXSBjaGFycyA9IHN0ci50b0NoYXJBcnJheSgpOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjaGFycy5sZW5ndGg7IGorKykKLSAgICAgIHsKLSAgICAgICAgaWYoKGNoYXJzW2pdID09IDApIHx8IChjaGFyc1tqXSA9PSAxMCkgfHwgKGNoYXJzW2pdID09IDEzKSkKLSAgICAgICAgewotICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgY2hhciAoIiArIGNoYXJzW2pdICsgCi0gICAgICAgICAgICAgICIpW2NvZGU9IiArIChieXRlKSBjaGFyc1tqXSArICIgcG9zaXRpb249IiArIGogKyAKLSAgICAgICAgICAgICAgIl0gZG9lcyBub3QgYWxsb3dzIGluIDhiaXQgZW5jb2RpbmcgY29udGVudCIpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlIGEgcXVvdGVkLXByaW50YWJsZSBlbmNvZGVkIG1lc3NhZ2UgKFJGQzIwNDUpCi0gICAqIEBwYXJhbSBtZXNzYWdlIG1lc3NhZ2UgdG8gY2hlY2sKLSAgICogQHRocm93cyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGlmIG1lc3NhZ2UgZG9lcyBub3QgY29uZm9ybQotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGNoZWNrT25RdW90ZWRQcmludGFibGUoU3RyaW5nIG1lc3NhZ2UpCi0gICAgdGhyb3dzIEFzc2VydGlvbkZhaWxFeGNlcHRpb24KLSAgewotICAgIFN0cmluZ1tdIHN0cnMgPSBzcGxpdChtZXNzYWdlKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0cnMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgLy8gY2hlY2sgbGVuZ3RoCi0gICAgICAvLyBSRkMyMDQ1Ci0gICAgICAvLyAoNSkgICAoU29mdCBMaW5lIEJyZWFrcykgVGhlIFF1b3RlZC1QcmludGFibGUgZW5jb2RpbmcKLSAgICAgIC8vUkVRVUlSRVMgdGhhdCBlbmNvZGVkIGxpbmVzIGJlIG5vIG1vcmUgdGhhbiA3NgotICAgICAgLy9jaGFyYWN0ZXJzIGxvbmcuICBJZiBsb25nZXIgbGluZXMgYXJlIHRvIGJlIGVuY29kZWQKLSAgICAgIC8vd2l0aCB0aGUgUXVvdGVkLVByaW50YWJsZSBlbmNvZGluZywgInNvZnQiIGxpbmUgYnJlYWtzCi0gICAgICAvL211c3QgYmUgdXNlZC4gIEFuIGVxdWFsIHNpZ24gYXMgdGhlIGxhc3QgY2hhcmFjdGVyIG9uIGEKLSAgICAgIC8vZW5jb2RlZCBsaW5lIGluZGljYXRlcyBzdWNoIGEgbm9uLXNpZ25pZmljYW50ICgic29mdCIpCi0gICAgICAvL2xpbmUgYnJlYWsgaW4gdGhlIGVuY29kZWQgdGV4dC4KLSAgICAgIGlmKCgoc3Ryc1tpXS5pbmRleE9mKCJcdCIpICE9IC0xKSB8fCAoc3Ryc1tpXS5pbmRleE9mKCIgIikgIT0gLTEpKSAmJgotICAgICAgICAgIChzdHJzW2ldLmxlbmd0aCgpID4gNzYpKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIGxlbmd0aCAoIiArIHN0cnNbaV0ubGVuZ3RoKCkgKyAKLSAgICAgICAgICAgICIpIG9mIHRoZSBsaW5lICgiICsgKGkrMSkgKyAKLSAgICAgICAgICAgICIpIGdyZWF0ZXIgdGhhbiA3NiwgXCJzb2Z0XCIgbGluZSBicmVha3MgbXVzdCBiZSB1c2VkIik7Ci0gICAgICB9Ci0KLSAgICAgIGNoYXJbXSBjaGFycyA9IHN0cnNbaV0udG9DaGFyQXJyYXkoKTsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgY2hhcnMubGVuZ3RoOyBqKyspCi0gICAgICB7Ci0gICAgICAgIC8vKDEpICAgKEdlbmVyYWwgOGJpdCByZXByZXNlbnRhdGlvbikgQW55IG9jdGV0LCBleGNlcHQgYSBDUiBvcgotICAgICAgICAvL0xGIHRoYXQgaXMgcGFydCBvZiBhIENSTEYgbGluZSBicmVhayBvZiB0aGUgY2Fub25pY2FsCi0gICAgICAgIC8vKHN0YW5kYXJkKSBmb3JtIG9mIHRoZSBkYXRhIGJlaW5nIGVuY29kZWQsIG1heSBiZQotICAgICAgICAvL3JlcHJlc2VudGVkIGJ5IGFuICI9IiBmb2xsb3dlZCBieSBhIHR3byBkaWdpdAotICAgICAgICAvL2hleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvY3RldCdzIHZhbHVlLiAgVGhlCi0gICAgICAgIC8vZGlnaXRzIG9mIHRoZSBoZXhhZGVjaW1hbCBhbHBoYWJldCwgZm9yIHRoaXMgcHVycG9zZSwKLSAgICAgICAgLy9hcmUgIjAxMjM0NTY3ODlBQkNERUYiLiAgVXBwZXJjYXNlIGxldHRlcnMgbXVzdCBiZQotICAgICAgICAvL3VzZWQ7IGxvd2VyY2FzZSBsZXR0ZXJzIGFyZSBub3QgYWxsb3dlZC4gIFRodXMsIGZvcgotICAgICAgICAvL2V4YW1wbGUsIHRoZSBkZWNpbWFsIHZhbHVlIDEyIChVUy1BU0NJSSBmb3JtIGZlZWQpIGNhbgotICAgICAgICAvL2JlIHJlcHJlc2VudGVkIGJ5ICI9MEMiLCBhbmQgdGhlIGRlY2ltYWwgdmFsdWUgNjEgKFVTLQotICAgICAgICAvL0FTQ0lJIEVRVUFMIFNJR04pIGNhbiBiZSByZXByZXNlbnRlZCBieSAiPTNEIi4gIFRoaXMKLSAgICAgICAgLy9ydWxlIG11c3QgYmUgZm9sbG93ZWQgZXhjZXB0IHdoZW4gdGhlIGZvbGxvd2luZyBydWxlcwotICAgICAgICAvL2FsbG93IGFuIGFsdGVybmF0aXZlIGVuY29kaW5nLgotICAgICAgICAvLyAoMikgICAoTGl0ZXJhbCByZXByZXNlbnRhdGlvbikgT2N0ZXRzIHdpdGggZGVjaW1hbCB2YWx1ZXMgb2YKLSAgICAgICAgLy8zMyB0aHJvdWdoIDYwIGluY2x1c2l2ZSwgYW5kIDYyIHRocm91Z2ggMTI2LCBpbmNsdXNpdmUsCi0gICAgICAgIC8vTUFZIGJlIHJlcHJlc2VudGVkIGFzIHRoZSBVUy1BU0NJSSBjaGFyYWN0ZXJzIHdoaWNoCi0gICAgICAgIC8vY29ycmVzcG9uZCB0byB0aG9zZSBvY3RldHMgKEVYQ0xBTUFUSU9OIFBPSU5UIHRocm91Z2gKLSAgICAgICAgLy9MRVNTIFRIQU4sIGFuZCBHUkVBVEVSIFRIQU4gdGhyb3VnaCBUSUxERSwKLSAgICAgICAgLy9yZXNwZWN0aXZlbHkpLgotICAgICAgICBpZigoY2hhcnNbal0gPT0gNjEpICYmIChjaGFycy5sZW5ndGggPiBqKzIpKSAKLSAgICAgICAgewotICAgICAgICAgIGlmKCFpc0hleChjaGFyc1tqKzFdKSB8fCAhaXNIZXgoY2hhcnNbaisyXSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oInRoZSBxdW90ZWQgY2hhciAoIiArIAotICAgICAgICAgICAgICAgICBjaGFyc1tqXSArIGNoYXJzW2orMV0gKyBjaGFyc1tqKzJdICsgIikgaXMgaW5jb3JyZWN0Iik7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGogKz0gMjsKLSAgICAgICAgICB9Ci0gICAgICAgIH0gCi0gICAgICAgIC8vIGNoZWNrIGZvciBzcGFjZSBhbmQgdGFiCi0gICAgICAgIGVsc2UgaWYoKGNoYXJzW2pdICE9IDkpICYmIChjaGFyc1tqXSAhPSAzMikpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBjaGVjayBpbnZhbGlkIHN5bWJvbAotICAgICAgICAgIGlmKChjaGFyc1tqXSA9PSAwKSB8fCAoY2hhcnNbal0gPT0gMTApIHx8IChjaGFyc1tqXSA9PSAxMykgfHwKLSAgICAgICAgICAgICAoY2hhcnNbal0gPCAzMykgfHwgKGNoYXJzW2pdID4gMTI2KSB8fCAoY2hhcnNbal0gPT0gNjEpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgY2hhciAoIiArIGNoYXJzW2pdICsgCi0gICAgICAgICAgICAgICAgIilbY29kZT0iICsgKGJ5dGUpIGNoYXJzW2pdICsgIiBwb3NpdGlvbj0iICsgaiArIAotICAgICAgICAgICAgICAgICJdIG11c3QgYmUgcXVvdGVkIik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlIGEgYmFzZTY0IGVuY29kZWQgbWVzc2FnZSAoUkZDMzU0OCkKLSAgICogQHBhcmFtIG1lc3NhZ2UgbWVzc2FnZSB0byBjaGVjawotICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxFeGNlcHRpb24gaWYgbWVzc2FnZSBkb2VzIG5vdCBjb25mb3JtCi0gICAqLwotICBwcml2YXRlIHZvaWQgY2hlY2tPbkJhc2U2NChTdHJpbmcgbWVzc2FnZSkKLSAgdGhyb3dzIEFzc2VydGlvbkZhaWxFeGNlcHRpb24KLSAgewotICAgIFN0cmluZ1tdIHN0cnMgPSBzcGxpdChtZXNzYWdlKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0cnMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgU3RyaW5nIHN0ciA9IHN0cnNbaV07Ci0gICAgICAKLSAgICAgIC8vIGNoZWNrIHN0cmluZyBsZW5ndGgKLSAgICAgIGlmKHN0ci5sZW5ndGgoKSA+IDc2KSAKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSBsZW5ndGggKCIgKyBzdHIubGVuZ3RoKCkgKyAKLSAgICAgICAgICAgICIpIG9mIHRoZSBsaW5lICgiICsgKGkrMSkgKyAiKSBncmVhdGVyIHRoYW4gOTk4Iik7Ci0gICAgICB9Ci0gICAgICAvLyBjaGVjayBmb3IgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkvKyIKLSAgICAgIGNoYXJbXSBjaGFycyA9IHN0ci50b0NoYXJBcnJheSgpOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjaGFycy5sZW5ndGg7IGorKykKLSAgICAgIHsKLSAgICAgICAgY2hhciBjID0gY2hhcnNbaV07Ci0gICAgICAgIGlmKChjIDwgNDcpIHx8IChjID4gMTIyKSB8fCAoKGMgPiA1NykgJiYgKGMgPCA2NSkpIHx8IAotICAgICAgICAgICAoKGMgPiA5MCkgJiYgKGMgPCA5NykpKQotICAgICAgICB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSBjaGFyICgiICsgY2hhcnNbal0gKyAKLSAgICAgICAgICAgICAgIilbY29kZT0iICsgKGJ5dGUpIGNoYXJzW2pdICsgIiBwb3NpdGlvbj0iICsgaiArIAotICAgICAgICAgICAgICAiXSBkb2VzIG5vdCBhbGxvd3MgaW4gYmFzZTY0IGVuY29kaW5nIGNvbnRlbnQiKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotICAKLSAgLyoqCi0gICAqIHNwbGl0IHN0cmluZyB0byBhcnJheSBvZiBzdHJpbmdzIGFuZCB1c2UgYXMgZGVsaW1ldGVyIENSTEYKLSAgICogQHBhcmFtIHN0ciBvcmlnaW5hbCBzdHJpbmcKLSAgICogQHJldHVybiBhcnJheSBvZiBzdHJpbmdzCi0gICAqLwotICBwcml2YXRlIFN0cmluZ1tdIHNwbGl0KFN0cmluZyBzdHIpCi0gIHsKLSAgICBBcnJheUxpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBmb3IoaW50IGlkeCA9IHN0ci5pbmRleE9mKCJcclxuIik7IGlkeCAhPSAtMTsgaWR4ID0gc3RyLmluZGV4T2YoIlxyXG4iKSkKLSAgICB7Ci0gICAgICBsaXN0LmFkZChzdHIuc3Vic3RyaW5nKDAsIGlkeCkpOwotICAgICAgc3RyID0gc3RyLnN1YnN0cmluZyhpZHgrMik7Ci0gICAgfQotICAgIGxpc3QuYWRkKHN0cik7Ci0gICAgcmV0dXJuIChTdHJpbmdbXSkgbGlzdC50b0FycmF5KG5ldyBTdHJpbmdbbGlzdC5zaXplKCldKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgdHJ1ZSBpZiBieXRlIGlzICIwMTIzNDU2Nzg5QUJDREVGIiByYW5nZSwgZmFsc2Ugb3RoZXdpc2UKLSAgICogQHBhcmFtIGMgY2hhcgotICAgKiBAcmV0dXJuIHRydWUgaWYgYnl0ZSBpcyAiMDEyMzQ1Njc4OUFCQ0RFRiIgcmFuZ2UsIGZhbHNlIG90aGV3aXNlCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gaXNIZXgoY2hhciBjKSB7Ci0gICAgcmV0dXJuICgoKGMgPj0gNDgpICYmIChjIDw9IDU3KSkgfHwgKChjID49IDY1KSAmJiAoYyA8PSA3MCkpKTsgCi0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTM2LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTM2LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiOGFlNzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTkzNi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLS8qKgotICogQVAxOTM2Ci0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgbXVsdGlwYXJ0L3JlbGF0ZWQgbWVzc2FnZTwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5JbiBhIG1lc3NhZ2UsIGFsbCBNSU1FIGVuY2Fwc3VsYXRpb24gYm91bmRhcnkgc3RyaW5ncyAKLSAqIGFyZSBwcmVjZWRlZCB3aXRoIHRoZSBhc2NpaSBjaGFyYWN0ZXJzIENSICgxMykgYW5kIExGICgxMCkgCi0gKiBpbiB0aGF0IHNlcXVlbmNlLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBBUDE5MzYgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBBUDE5MzYoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gaWYgYm91bmRhcnkgZXF1YWxzIG51bGwsIHRoZW4gcmVzdWx0IGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgaWYgKCFlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuaXNNaW1lQ29udGVudCgpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfSAgICAKLSAgICAvLyBvdGhlcndpc2UgaXQgaXMgdHJ1ZSAtLSBjaGVja2VkIGluIG1vbml0b3IKLSAgICAvLyBNaW1lUGFydHMgbWltZVBhcnRzID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1pbWVQYXJ0cygpOwotICAgIC8vIEl0ZXJhdG9yIGkgPSBtaW1lUGFydHMuZ2V0UGFydHMoKS5pdGVyYXRvcigpOwotICAgIC8vIGJvb2xlYW4gaW52YWxpZEJvdW5kYXJ5U3RyaW5nRm91bmQgPSBmYWxzZTsKLSAgICAvL3doaWxlIChpLmhhc05leHQoKSAmJiAhaW52YWxpZEJvdW5kYXJ5U3RyaW5nRm91bmQpCi0gICAgLy97Ci0gICAgLy8JTWltZVBhcnQgcGFydCA9IChNaW1lUGFydClpLm5leHQoKTsKLSAgICAvLwlTdHJpbmdbXSBib3VuZGFyaWVzID0gcGFydC5nZXRCb3VuZGFyeVN0cmluZ3MoKTsKLSAgICAvLwlmb3IgKGludCBqID0gMDsgajxib3VuZGFyaWVzLmxlbmd0aDsgaisrKQotICAgIC8vCXsKLSAgICAvLwkJaWYgKCFib3VuZGFyaWVzW2pdLnN0YXJ0c1dpdGgoIiYjeGQ7XG4iKSkKLSAgICAvLwkJewotICAgIC8vCQkJaW52YWxpZEJvdW5kYXJ5U3RyaW5nRm91bmQgPSB0cnVlOwotICAgIC8vCQkJcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgLy8JCQlmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoYm91bmRhcmllc1tqXSwgZW50cnlDb250ZXh0KTsKLSAgICAvLwkJCWJyZWFrOwotICAgIC8vCQl9Ci0gICAgLy8JfQotICAgIC8vfQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTk0Mi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTk0Mi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZmI3OTczLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9BUDE5NDIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVDb250ZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVQYXJ0OwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NZXNzYWdlRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NaW1lUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1pbWVQYXJ0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5NSU1FQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLk1JTUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotCi0vKioKLSAqIEFQMTk0MgotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBwYXJ0IG9mIGEgbXVsdGlwYXJ0L3JlbGF0ZWQgbWVzc2FnZSB0aGF0IGlzIGJvdW5kCi0gKiB0byBhIG1pbWU6Y29udGVudCB0aGF0IHJlZmVycyB0byBnbG9iYWwgZWxlbWVudCBkZWNsYXJhdGlvbiAodmlhIHRoZSBlbGVtZW50Ci0gKiBhdHRyaWJ1dGUgb2YgdGhlIHdzZGw6cGFydCBlbGVtZW50KTwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgYm91bmQgbWVzc2FnZSBwYXJ0IGlzIHNlcmlhbGl6ZWQgd2l0aGluIHRoZSBNSU1FCi0gKiBwYXJ0IGFzIGEgc2VyaWFsaXphdGlvbiBvZiBhbiBYTUwgaW5mb3NldCB3aG9zZSByb290IGVsZW1lbnQgaXMgZGVzY3JpYmVkIGJ5Ci0gKiB0aGUgcmVmZXJlbmNlZCBlbGVtZW50LjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBBUDE5NDIgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIGltcGxlbWVudHMgV1NJVGFnCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBBUDE5NDIoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgaWYgKCFlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuaXNNaW1lQ29udGVudCgpKQotICAgICAgewotICAgICAgCXRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAJTWltZVBhcnRzIG1pbWVQYXJ0cyA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRNaW1lUGFydHMoKTsKLSAgICAgIAotICAgICAgICAvLyBJZiB0aGUgbWVzc2FnZSBkb2VzIG5vdCBjb250YWluIG5vbi1yb290IE1JTUUgcGFydHMKLSAgICAgICAgLy8gdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgICBpZiAobWltZVBhcnRzLmNvdW50KCk8IDIpCi0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIAotICAgICAgICAvLyBHZXR0aW5nIGFuIG9wZXJhdGlvbiBtYXRjaGVkIGZvciBhIG1lc3NhZ2UKLSAgICAgICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gdmFsaWRhdG9yLmdldE9wZXJhdGlvbk1hdGNoKAotICAgICAgICAgIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5VHlwZSgpLAotICAgICAgICAgIGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpKTsKLSAgICAgICAgLy8gSWYgbm8gb25lIG9wZXJhdGlvbiBtYXRjaGVzLCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICAgIGlmIChiaW5kaW5nT3BlcmF0aW9uID09IG51bGwpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICAgIC8vIEdldHRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyBhbmQgbWVzc2FnZQotICAgICAgICBMaXN0IGV4dEVsZW1zOwotICAgICAgICBNZXNzYWdlIG1lc3NhZ2U7Ci0gICAgICAgIGlmIChNZXNzYWdlRW50cnkuVFlQRV9SRVFVRVNUCi0gICAgICAgICAgLmVxdWFscyhlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeVR5cGUoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICBleHRFbGVtcyA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCkgPT0gbnVsbCA/IG51bGwKLSAgICAgICAgICAgIDogYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nSW5wdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgICAgICBtZXNzYWdlID0gYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKS5nZXRJbnB1dCgpID09IG51bGwgPyBudWxsCi0gICAgICAgICAgICA6IGJpbmRpbmdPcGVyYXRpb24uZ2V0T3BlcmF0aW9uKCkuZ2V0SW5wdXQoKS5nZXRNZXNzYWdlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgZXh0RWxlbXMgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKSA9PSBudWxsID8gbnVsbAotICAgICAgICAgICAgOiBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgICAgICBtZXNzYWdlID0gYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKS5nZXRPdXRwdXQoKSA9PSBudWxsID8gbnVsbAotICAgICAgICAgICAgOiBiaW5kaW5nT3BlcmF0aW9uLmdldE9wZXJhdGlvbigpLmdldE91dHB1dCgpLmdldE1lc3NhZ2UoKTsKLSAgICAgICAgfQotICAgICAgICAvLyBBIHZhcmlhYmxlIHRoYXQgaW5kaWNhdGVzIGEgYmluZGluZyBjb250YWlucyBhdCBsZWFzdCBvbmUKLSAgICAgICAgLy8gbWltZTpjb250ZW50IGVsZW1lbnQgdGhhdCByZWZlcnMgdG8gZ2xvYmFsIGVsZW1lbnQgZGVjbGFyYXRpb24gCi0gICAgICAgIGJvb2xlYW4gbWltZUNvbnRlbnRGb3VuZCA9IGZhbHNlOwotICAgICAgICAvLyBHb2luZyB0aHJvdWdoIHRoZSBtZXNzYWdlIE1JTUUgcGFydHMKLSAgICAgICAgSXRlcmF0b3IgaU1pbWVQYXJ0cyA9IG1pbWVQYXJ0cy5nZXRQYXJ0cygpLml0ZXJhdG9yKCk7Ci0gICAgICAgIGludCBpID0gMDsKLSAgICAgICAgd2hpbGUgKGlNaW1lUGFydHMuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAJICBpID0gaSArIDE7Ci0gICAgICAgICAgLy8gR2V0dGluZyBhIE1JTUUgcGFydAotICAgICAgICAgIE1pbWVQYXJ0IG1pbWVQYXJ0ID0gKE1pbWVQYXJ0KWlNaW1lUGFydHMubmV4dCgpOwotICAgICAgICAgIC8vIEdldHRpbmcgYSBwYXJ0IG5hbWUgZm9ybSB0aGUgQ29udGVudC1JRCBoZWFkZXIKLSAgICAgICAgICBTdHJpbmcgcGFydE5hbWUgPSBNSU1FVXRpbHMuZ2V0TWltZUhlYWRlckF0dHJpYnV0ZSgKLSAgICAgICAgICAgIG1pbWVQYXJ0LmdldEhlYWRlcnMoKSwgTUlNRUNvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9JRCk7Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgaW50IGlkeCA9IHBhcnROYW1lLmluZGV4T2YoIj0iKTsKLSAgICAgICAgICAgIGlmKChpZHggIT0gLTEpICYmIHBhcnROYW1lLnN0YXJ0c1dpdGgoIjwiKSkKLSAgICAgICAgICAgICAgcGFydE5hbWUgPSBlbmNvZGVQYXJ0TmFtZShwYXJ0TmFtZS5zdWJzdHJpbmcoMSwgaWR4KSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBDb3VsZCBub3QgZXh0cmFjdCBhIHBhcnQgbmFtZSBmcm9tIHRoZSBoZWFkZXIsCi0gICAgICAgICAgICAvLyBwcm9jZWVkIHdpdGggdGhlIG5leHQgTUlNRSBwYXJ0Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICAvLyBJZiB0aGUgcGFydCBpcyBib3VuZCBieSBhIG1pbWU6Y29udGVudCBlbGVtZW50Ci0gICAgICAgICAgaWYgKGJvdW5kVG9NaW1lQ29udGVudChleHRFbGVtcywgcGFydE5hbWUpICYmIG1lc3NhZ2UgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBHZXR0aW5nIHRoZSBjb3JyZXNwb25kaW5nIHBhcnQKLSAgICAgICAgICAgIFBhcnQgcGFydCA9IChQYXJ0KSBtZXNzYWdlLmdldFBhcnRzKCkuZ2V0KHBhcnROYW1lKTsKLSAgICAgICAgICAgIFFOYW1lIHJlZk5hbWU7Ci0gICAgICAgICAgICAvLyBJZiB0aGUgcGFydCByZWZlcnMgdG8gZ2xvYmFsIGVsZW1lbnQgZGVjbGFyYXRpb24KLSAgICAgICAgICAgIGlmIChwYXJ0ICE9IG51bGwgJiYgKHJlZk5hbWUgPSBwYXJ0LmdldEVsZW1lbnROYW1lKCkpICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIG1pbWVDb250ZW50Rm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAvLyBUcnlpbmcgdG8gcGFyc2UgcGFydCBjb250ZW50Ci0gICAgICAgICAgICAgIERvY3VtZW50IGRvYyA9IG51bGw7Ci0gICAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZG9jID0gWE1MVXRpbHMucGFyc2VYTUwobWltZVBhcnQuZ2V0Q29udGVudCgpKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9Ci0gICAgICAgICAgICAgIC8vIElmIHRoZSBtZXNzYWdlIGlzIG5vdCBhbiBYTUwgaW5mb3NldCwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICAgICAgaWYgKGRvYyA9PSBudWxsKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSBib3VuZCBtZXNzYWdlIHBhcnQgb2YgdGhlICIKLSAgICAgICAgICAgICAgICAgICsgIk1JTUUgcGFydCBudW1iZXIgIiArIChpICsgMSkgKyAiIGlzIGludmFsaWQgWE1MIGluZm9zZXQuIik7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBRTmFtZSBvYmplY3Qgb2YgdGhlIHJvb3QgZWxlbWVudAotICAgICAgICAgICAgICBRTmFtZSByb290TmFtZSA9IG5ldyBRTmFtZSgKLSAgICAgICAgICAgICAgICBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCkuZ2V0TmFtZXNwYWNlVVJJKCksCi0gICAgICAgICAgICAgICAgZG9jLmdldERvY3VtZW50RWxlbWVudCgpLmdldExvY2FsTmFtZSgpKTsKLSAgICAgICAgICAgICAgLy8gSWYgdGhlIG5hbWVzIG9mIHRoZSByb290IGVsZW1lbnQgYW5kIHRoZSByZWZlcmVuY2VkIGVsZW1lbnQKLSAgICAgICAgICAgICAgLy8gYXJlIG5vdCBlcXVhbCwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICAgICAgaWYgKCFyZWZOYW1lLmVxdWFscyhyb290TmFtZSkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIHJvb3QgZWxlbWVudCBuYW1lIGlzICIKLSAgICAgICAgICAgICAgICAgICsgcm9vdE5hbWUgKyAiLCB0aGUgbmFtZSBvZiB0aGUgcmVmZXJlbmNlZCBlbGVtZW50IGlzICIKLSAgICAgICAgICAgICAgICAgICsgcmVmTmFtZSArICIuIik7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLy8gSWYgbm8gbWltZTpjb250ZW50UyBmb3VuZCwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgICBpZiAoIW1pbWVDb250ZW50Rm91bmQpCi0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gYW5hZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBhZmUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgIGFmZS5nZXRNZXNzYWdlKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLQotICAvKioKLSAgICogVmFsaWRhdGVzIHdoZXRoZXIgYSBwYXJ0IGlzIGJvdW5kIGJ5IGEgbWltZTpjb250ZW50IGVsZW1lbnQuCi0gICAqIEBwYXJhbSBleHRFbGVtcyBhIGxpc3Qgb2YgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cy4KLSAgICogQHBhcmFtIHBhcnQgYSBwYXJ0IG5hbWUuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiBhIHBhcnQgaXMgYm91bmQgYnkgbWltZTpjb250ZW50LCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYm91bmRUb01pbWVDb250ZW50KExpc3QgZXh0RWxlbXMsIFN0cmluZyBwYXJ0KQotICB7Ci0gICAgaWYgKGV4dEVsZW1zICE9IG51bGwgJiYgZXh0RWxlbXMuc2l6ZSgpID4gMCkKLSAgICB7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBleHRFbGVtcy5nZXQoMCk7Ci0gICAgICAvLyBFeHBlY3RlZCB0aGUgZmlyc3QgZXh0IGVsZW0gaXMgbWltZTptdWx0aXBhcnRSZWxhdGVkCi0gICAgICBpZiAoZXh0RWxlbS5nZXRFbGVtZW50VHlwZSgpLmVxdWFscyhXU0RMX01JTUVfTVVMVElQQVJUKSkKLSAgICAgIHsKLSAgICAgICAgLy8gR2V0dGluZyB0aGUgbWltZTpwYXJ0IGVsZW1lbnRzIG9mIHRoZSBtaW1lOm11bHRpcGFydFJlbGF0ZWQKLSAgICAgICAgTGlzdCBtaW1lUGFydHMgPSAoKE1JTUVNdWx0aXBhcnRSZWxhdGVkKSBleHRFbGVtKS5nZXRNSU1FUGFydHMoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtaW1lUGFydHMuc2l6ZSgpOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXR0aW5nIHRoZSBtaW1lOnBhcnQgZWxlbWVudCBuZWVkZWQKLSAgICAgICAgICBMaXN0IGVsZW1zID0gKChNSU1FUGFydCkgbWltZVBhcnRzLmdldChpKSkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICAgICAgaWYgKGVsZW1zLnNpemUoKSA+IDApCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gR2V0dGluZyB0aGUgZmlyc3QgZWxlbWVudAotICAgICAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZWxlbSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCkgZWxlbXMuZ2V0KDApOwotICAgICAgICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgbWltZTpjb250ZW50IGFuZCBpdCBiaW5kcyBhIHBhcnQKLSAgICAgICAgICAgIGlmIChlbGVtLmdldEVsZW1lbnRUeXBlKCkuZXF1YWxzKFdTRExfTUlNRV9DT05URU5UKQotICAgICAgICAgICAgICAmJiBwYXJ0LmVxdWFscygoKE1JTUVDb250ZW50KWVsZW0pLmdldFBhcnQoKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBFbmNvZGUgc3RyaW5nIGZyb20gJUhIIHRvIFVURgotICAgKiBAcGFyYW0gc3RyIHN0cmluZwotICAgKiBAcmV0dXJuIGVuY29kZWQgc3RyaW5nIGZyb20gJUhIIGZvcm1hdAotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZW5jb2RlUGFydE5hbWUoU3RyaW5nIHN0cikgewotICAgIFN0cmluZ0J1ZmZlciByZXMgPSBuZXcgU3RyaW5nQnVmZmVyKCIiKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0ci5sZW5ndGgoKTsgaSsrKQotICAgIHsKLSAgICAgIGlmKChzdHIuY2hhckF0KGkpID09ICclJykgJiYgKHN0ci5sZW5ndGgoKSA+IGkrMikpCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgaW50IHZhbHVlID0gSW50ZWdlci5wYXJzZUludCgKLSAgICAgICAgICAgICAgU3RyaW5nLnZhbHVlT2Yoc3RyLmNoYXJBdChpKzEpKSArCi0gICAgICAgICAgICAgIFN0cmluZy52YWx1ZU9mKHN0ci5jaGFyQXQoaSsyKSksIDE2KTsKLSAgICAgICAgICByZXMuYXBwZW5kKChjaGFyKSB2YWx1ZSk7Ci0gICAgICAgICAgaSArPTI7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2goTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpe30KLSAgICAgIH0gCi0gICAgICBlbHNlIAotICAgICAgewotICAgICAgICByZXMuYXBwZW5kKHN0ci5jaGFyQXQoaSkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzLnRvU3RyaW5nKCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTQ1LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTQ1LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkYmYzMTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTk0NS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5IVFRQQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBVdGlsczsKLQotLyoqCi0gKiBBUDE5NDUKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBtZXNzYWdlPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSBDb250ZW50LVR5cGUgSFRUUCBoZWFkZXIgZmllbGQtdmFsdWUgaW4gYSBtZXNzYWdlIAotICogaXMgZWl0aGVyICJtdWx0aXBhcnQvcmVsYXRlZCIgb3IgInRleHQveG1sIi48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQVAxOTQ1IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQVAxOTQ1KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyBoZWFkZXJOYW1lID0gSFRUUENvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9UWVBFOwotCi0gICAgLy8gR2V0dGluZyBhIGhlYWRlcgotICAgIFN0cmluZyBoZWFkZXJWYWx1ZSA9IEhUVFBVdGlscy5nZXRIdHRwSGVhZGVyQXR0cmlidXRlKAotICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0SFRUUEhlYWRlcnMoKSwKLSAgICAgICAgaGVhZGVyTmFtZSk7Ci0gICAgLy8gSWYgaGVhZGVyVmFsdWUgaXMgbnVsbCwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgIGlmIChoZWFkZXJWYWx1ZSA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfSAKLSAgICAvLyBJZiB0aGUgaGVhZGVyIGlzICJtdWx0aXBhcnQvcmVsYXRlZCIgb3IgInRleHQveG1sIiwKLSAgICAvLyB0aGVuIHRoZSBhc3NlcnRpb24gcGFzc2VkCi0gICAgZWxzZSBpZiAoaGVhZGVyVmFsdWUuZXF1YWxzSWdub3JlQ2FzZShXU0lDb25zdGFudHMuQ09OVEVOVF9UWVBFX01VTFRJUEFSVCkKLSAgICAgICAgfHwgaGVhZGVyVmFsdWUuZXF1YWxzSWdub3JlQ2FzZShXU0lDb25zdGFudHMuQ09OVEVOVF9UWVBFX1RFWFRfWE1MKSkKLSAgICB7Ci0gICAgfQotICAgIC8vIGVsc2UgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICBlbHNlIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgIGhlYWRlclZhbHVlLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTQ2LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVAxOTQ2LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhZjBmMWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQMTk0Ni5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLS8qKgotICogQVAxOTQ2Ci0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIG11bHRpcGFydC9yZWxhdGVkIG1lc3NhZ2UKLSAqIGNvbnRhaW5pbmcgbm9uLXJvb3QgcGFydHM8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIGNhbmRpZGF0ZSBtdWx0aXBhcnQvcmVsYXRlZCBtZXNzYWdlCi0gKiBjb250YWluaW5nIG5vbi1yb290IHBhcnRzLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBBUDE5NDYgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBBUDE5NDYoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gSWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgTUlNRSBwYXJ0cywgdGhlIGFzc2VydGlvbiBwYXNzZWQgCi0gICAgaWYgKGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRNaW1lUGFydHMoKS5jb3VudCgpID4gMSkKLSAgICB7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgdGVzdEFzc2VydGlvbi5nZXREZXRhaWxEZXNjcmlwdGlvbigpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICAvLyBUaGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgZWxzZQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQNTEwMC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQNTEwMC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTBlNjYwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9BUDUxMDAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLQotLyoqCi0gKiBBUDUxMDAKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgIG5vbi1tdWx0aXBhcnQvcmVsYXRlZCBtZXNzYWdlIGluIHRoZSBsb2cgZmlsZSwgd2l0aCBhbiBIVFRQIGVudGl0eS1ib2R5LjwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgU09BUCBlbnZlbG9wZSBpcyB0aGUgZXhjbHVzaXZlIHBheWxvYWQgb2YgdGhlIEhUVFAgZW50aXR5LWJvZHkuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqCi0gKiBAYXV0aG9yIGxhdXpvbmQKLSAqLwotcHVibGljIGNsYXNzIEFQNTEwMCBleHRlbmRzIFNTQlA1MTAwIAotewotCS8qKgotICAgICAqIENvbnN0cnVjdG9yLgotCSAqIEBwYXJhbSBpbXBsCi0JICovCi0JcHVibGljIEFQNTEwMChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKSAKLQl7Ci0JCXN1cGVyKGltcGwpOwotCX0KLQotCXB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0JICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0JICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotCSAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotCXsKLQkgIC8vIElmIHRoZXJlIGlzIGEgU09BUCBNZXNzYWdlIHdpdGggQXR0YWNobWVudHMsIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLQkgIGlmIChlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuaXNNaW1lQ29udGVudCgpKQotCSAgewotCSAgCXJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEUsIGZhaWx1cmVEZXRhaWwpOwotCSAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICByZXR1cm4gc3VwZXIudmFsaWRhdGUodGVzdEFzc2VydGlvbiwgZW50cnlDb250ZXh0KTsKLQkgIH0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVA1MTAxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQVA1MTAxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViYTJjYjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0FQNTEwMS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSBwYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLQotLyoqCi0gKiBBUDUxMDEKLSAqIDxjb250ZXh0PkZvciBhIG5vbi1tdWx0aXBhcnQvcmVsYXRlZCBjYW5kaWRhdGUgbWVzc2FnZSBpbiB0aGUgbG9nIGZpbGUuPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPkEgbWVzc2FnZSBtdXN0IGhhdmUgYSAiQ29udGVudC1UeXBlIiBIVFRQIGhlYWRlciBmaWVsZC4gIFRoZSAiQ29udGVudC1UeXBlIiBIVFRQIGhlYWRlciBmaWVsZCBtdXN0IGhhdmUgYSBmaWVsZC12YWx1ZSB3aG9zZSBtZWRpYSB0eXBlIGlzICJ0ZXh0L3htbCIuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqIAotICogQGF1dGhvciBsYXV6b25kCi0gKi8KLXB1YmxpYyBjbGFzcyBBUDUxMDEgZXh0ZW5kcyBTU0JQNTEwMSB7Ci0KLQkvKioKLQkgKiBAcGFyYW0gaW1wbAotCSAqLwotCXB1YmxpYyBBUDUxMDEoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkgCi0JewotCQlzdXBlcihpbXBsKTsKLQl9Ci0KLQlwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotCSAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotCSAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLQkgIHRocm93cyBXU0lFeGNlcHRpb24KLQl7Ci0JICAvLyBJZiB0aGVyZSBpcyBhIFNPQVAgTWVzc2FnZSB3aXRoIEF0dGFjaG1lbnRzLCB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0JICBpZiAoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmlzTWltZUNvbnRlbnQoKSkKLQkgIHsKLQkgIAlyZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFLCBmYWlsdXJlRGV0YWlsKTsKLQkgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHN1cGVyLnZhbGlkYXRlKHRlc3RBc3NlcnRpb24sIGVudHJ5Q29udGV4dCk7Ci0JICB9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0JQMTAwMS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0JQMTAwMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYWJjYmNjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDEwMDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotIHBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWVzc2FnZUVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotCi0KLS8qKgotICogQlAxMDAxLgotICogSWYgaXQgaXMgYSByZXF1ZXN0LCB0aGUgYXJnICMyIG9mIFBPU1QgaXMgJmx0O0hUVFAvMS4xJmd0Oy4gSWYgYWJzZW50LCBmaXJzdCBsaW5lIG9mIHRoZSAKLSAqIGJvZHkgaXM6IEhUVFAtVmVyc2lvbiA9IEhUVFAvMS4xLiBJZiBpdCBpcyBhIHJlc3BvbnNlLCBpdCBzdGFydHMgd2l0aCAmbHQ7SFRUUC8xLjEmZ3Q7LgotICovCi1wdWJsaWMgY2xhc3MgQlAxMDAxIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlAxMDAxKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIFN0cmluZyBodHRwSGVhZGVyID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldEhUVFBIZWFkZXJzKCk7Ci0KLSAgICAvLyBJZiB0aGlzIGlzIGEgcmVxdWVzdCBtZXNzYWdlLCB0aGVuIGNoZWNrIFBPU1QgaGVhZGVyCi0gICAgaWYgKGVudHJ5Q29udGV4dAotICAgICAgLmdldE1lc3NhZ2VFbnRyeSgpCi0gICAgICAuZ2V0VHlwZSgpCi0gICAgICAuZXF1YWxzSWdub3JlQ2FzZShNZXNzYWdlRW50cnkuVFlQRV9SRVFVRVNUKSkKLSAgICB7Ci0gICAgICBWZWN0b3IgcmVxdWVzdExpbmU7Ci0gICAgICBpZiAoKChyZXF1ZXN0TGluZSA9IHRoaXMudmFsaWRhdG9yLmdldFBvc3RSZXF1ZXN0KGh0dHBIZWFkZXIpKSA9PSBudWxsKQotICAgICAgICB8fCAocmVxdWVzdExpbmUuc2l6ZSgpID09IDApKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBTdHJpbmcgbWV0aG9kID0gKFN0cmluZykgcmVxdWVzdExpbmUuZ2V0KDApOwotICAgICAgICAvL1N0cmluZyByZXF1ZXN0VVJJID0gKFN0cmluZykgcmVxdWVzdExpbmUuZ2V0KDEpOwotICAgICAgICBTdHJpbmcgaHR0cFZlcnNpb24gPSAoU3RyaW5nKSByZXF1ZXN0TGluZS5nZXQoMik7Ci0KLSAgICAgICAgLy9Gb3IgZWFjaCByZXF1ZXN0IG1lc3NhZ2UgdGhhdCBpcyBhbiBIVFRQIFBPU1QKLSAgICAgICAgaWYgKG1ldGhvZC5lcXVhbHMoTWVzc2FnZVZhbGlkYXRvci5IVFRQX1BPU1QpICYmIGh0dHBWZXJzaW9uICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoaHR0cFZlcnNpb24uZXF1YWxzKE1lc3NhZ2VWYWxpZGF0b3IuSFRUUF9WRVJTSU9OXzFfMSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1dBUk5JTkc7Ci0gICAgICAgICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChodHRwSGVhZGVyLCBlbnRyeUNvbnRleHQpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIC8vIE90aGVyd2lzZSBpdCBtdXN0IGJlIGEgcmVzcG9uc2UKLSAgICBlbHNlCi0gICAgewotICAgICAgaWYgKGh0dHBIZWFkZXIuc3RhcnRzV2l0aChNZXNzYWdlVmFsaWRhdG9yLkhUVFBfVkVSU0lPTl8xXzEpKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9XQVJOSU5HOwotICAgICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChodHRwSGVhZGVyLCBlbnRyeUNvbnRleHQpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDEwMDIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDEwMDIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU5YTQ2YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQlAxMDAyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuU3RyaW5nVG9rZW5pemVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLk1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLQotCi0vKioKLSAqIEJQMTAwMi4KLSAqIElmIGl0IGlzIGEgcmVxdWVzdCwgdGhlIGFyZyAjMiBvZiBQT1NUIGlzICZsdDtIVFRQLzEuMSZndDsgb3IgJmx0O0hUVFAvMS4wJmd0Oy4gSWYgYWJzZW50LCBmaXJzdCBsaW5lIAotICogb2YgdGhlIGJvZHkgaXM6IEhUVFAtVmVyc2lvbiA9IEhUVFAvMS4xLiAob3IgSFRUUC8xLjApLiBJZiBpdCBpcyBhIHJlc3BvbnNlLCBpdCBzdGFydHMgd2l0aCAKLSAqICZsdDtIVFRQLzEuMSZndDsgb3IgJmx0O0hUVFAvMS4wJmd0OyBvciBoaWdoZXI7Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDEwMDIgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDEwMDIoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIGh0dHBIZWFkZXIgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0SFRUUEhlYWRlcnMoKTsKLQotICAgIC8vIElmIHRoaXMgaXMgYSByZXF1ZXN0IG1lc3NhZ2UsIHRoZW4gY2hlY2sgUE9TVCBmb3IgMS4xIG9yIDEuMAotICAgIGlmIChlbnRyeUNvbnRleHQKLSAgICAgIC5nZXRNZXNzYWdlRW50cnkoKQotICAgICAgLmdldFR5cGUoKQotICAgICAgLmVxdWFsc0lnbm9yZUNhc2UoTWVzc2FnZUVudHJ5LlRZUEVfUkVRVUVTVCkpCi0gICAgewotICAgICAgLy8gR2V0IGVhY2ggZW50cnkgaW4gdGhlIHBvc3QgaGVhZGVyCi0gICAgICBTdHJpbmdUb2tlbml6ZXIgcG9zdE1lc3NhZ2UgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGh0dHBIZWFkZXIsICIgXHJcbiIpOwotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBubyB0aGlyZCB0b2tlbiwgdGhlbiBmYWlsCi0gICAgICBpZiAocG9zdE1lc3NhZ2UuY291bnRUb2tlbnMoKSA8IDMpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChodHRwSGVhZGVyLCBlbnRyeUNvbnRleHQpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBHZXQgdGhlIDNyZCB0b2tlbiAodGhlcmUgbXVzdCBiZSBhIGJldHRlciB3YXkgdG8gZG8gdGhpcz8pCi0gICAgICAgIFN0cmluZyBodHRwVmVyc2lvbiA9ICIiOwotICAgICAgICBTdHJpbmcgbWVzc2FnZVR5cGUgPSAiIjsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBNZXNzYWdlIHR5cGUKLSAgICAgICAgICBpZiAoaSA9PSAwKQotICAgICAgICAgICAgbWVzc2FnZVR5cGUgPSBwb3N0TWVzc2FnZS5uZXh0VG9rZW4oKTsKLSAgICAgICAgICBlbHNlIGlmIChpID09IDIpCi0gICAgICAgICAgICBodHRwVmVyc2lvbiA9IHBvc3RNZXNzYWdlLm5leHRUb2tlbigpOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBvc3RNZXNzYWdlLm5leHRUb2tlbigpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFtZXNzYWdlVHlwZS5lcXVhbHMoIlBPU1QiKSkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiB0aGUgdGhpcmQgdG9rZW4gaXMgbm90IEhUVFAvMS4xIG90IEhUVFAvMS4wLCB0aGVuIGZhaWwKLSAgICAgICAgZWxzZSBpZiAoCi0gICAgICAgICAgKCFodHRwVmVyc2lvbi5lcXVhbHNJZ25vcmVDYXNlKE1lc3NhZ2VWYWxpZGF0b3IuSFRUUF9WRVJTSU9OXzFfMSkpCi0gICAgICAgICAgICAmJiAoIWh0dHBWZXJzaW9uLmVxdWFsc0lnbm9yZUNhc2UoTWVzc2FnZVZhbGlkYXRvci5IVFRQX1ZFUlNJT05fMV8wKSkpCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChodHRwSGVhZGVyLCBlbnRyeUNvbnRleHQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gRWxzZSBpdCBpcyBhIHJlc3BvbnNlIG1lc3NhZ2UKLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gUmVzcG9uc2UtTGluZSAoMXN0KSA9IEhUVFAtVmVyc2lvbiBTUCBSZXNwb25zZS1jb2RlIFNQIFJlc3BvbnNlLXRleHQgQ1JMRgotICAgICAgU3RyaW5nVG9rZW5pemVyIGh0dHBNZXNzYWdlVG9rZW5pemVyID0KLSAgICAgICAgbmV3IFN0cmluZ1Rva2VuaXplcihodHRwSGVhZGVyLCAiXG5cclxmIik7Ci0KLSAgICAgIFN0cmluZyBzdGFydExpbmUgPSBudWxsOwotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGlmIChodHRwTWVzc2FnZVRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpCi0gICAgICAgIHsKLSAgICAgICAgICBzdGFydExpbmUgPSBodHRwTWVzc2FnZVRva2VuaXplci5uZXh0VG9rZW4oKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBIVFRQIHZlcnNpb24gaW5mbyBleHBlY3RlZCBidXQgbm90IGZvdW5kCi0gICAgICAgICAgLy8gKHN0YXRlIHRoZSBmYWN0IGluIHRoZSBleGNlcHRpb24gbWVzc2FnZT8pCi0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oaHR0cEhlYWRlcik7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBjaGVjayB0aGF0IHByb3RvY29sIHZlcnNpb24gaW5kaWNhdGVzIEhUVFAvMS4wIG9yIEhUVFAvMS4xCi0gICAgICAgIGlmICghc3RhcnRMaW5lLnN0YXJ0c1dpdGgoTWVzc2FnZVZhbGlkYXRvci5IVFRQX1ZFUlNJT05fMV8xKQotICAgICAgICAgICYmICFzdGFydExpbmUuc3RhcnRzV2l0aChNZXNzYWdlVmFsaWRhdG9yLkhUVFBfVkVSU0lPTl8xXzApKQotICAgICAgICB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oaHR0cEhlYWRlcik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQlAxMDA0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQlAxMDA0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmN2YxZjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0JQMTAwNC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuU3RyaW5nVG9rZW5pemVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLk1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLQotCi0vKioKLSAqIEJQMTAwNC4gCi0gKiBUaGUgcmVxdWVzdCBtZXNzYWdlIGlzIGEgUE9TVCBtZXNzYWdlLCB3aXRob3V0IGFueSB1c2Ugb2YgZnJhbWV3b3JrIGV4dGVuc2lvbi4KLSAqLwotcHVibGljIGNsYXNzIEJQMTAwNCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQMTAwNChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgaHR0cEhlYWRlciA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRIVFRQSGVhZGVycygpOwotICAgIFN0cmluZ1Rva2VuaXplciBodHRwTWVzc2FnZVRva2VuaXplciA9Ci0gICAgICBuZXcgU3RyaW5nVG9rZW5pemVyKGh0dHBIZWFkZXIsICJcblxyXGYiKTsKLQotICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSBQT1NUIG1lc3NhZ2UKLSAgICBpZiAoIWh0dHBIZWFkZXIuc3RhcnRzV2l0aChNZXNzYWdlVmFsaWRhdG9yLkhUVFBfUE9TVCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChodHRwSGVhZGVyLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIFN0cmluZyBsaW5lID0gbnVsbDsKLSAgICB3aGlsZSAoaHR0cE1lc3NhZ2VUb2tlbml6ZXIuaGFzTW9yZVRva2VucygpCi0gICAgICAmJiAocmVzdWx0LmVxdWFscyhBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRCkpKQotICAgIHsKLSAgICAgIGxpbmUgPSBodHRwTWVzc2FnZVRva2VuaXplci5uZXh0VG9rZW4oKTsKLSAgICAgIGlmICgobGluZSAhPSBudWxsKQotICAgICAgICAmJiAobGluZS5zdGFydHNXaXRoKCJNLVBPU1QiKSB8fCBsaW5lLnN0YXJ0c1dpdGgoIkV4dDoiKSkpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChodHRwSGVhZGVyLCBlbnRyeUNvbnRleHQpOwotICAgICAgfQotICAgIH0gLy9FbmQgV2hpbGUKLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDEwMDYuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDEwMDYuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjA2N2NlMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQlAxMDA2LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuSFRUUFV0aWxzOwotCi0KLS8qKgotICogQlAxMDA2LiAKLSAqLwotcHVibGljIGNsYXNzIEJQMTAwNiBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQMTAwNihCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBQYXJzZSB0aGUgSFRUUCBoZWFkZXIKLSAgICBTdHJpbmcgcmF3SFRUUEhlYWRlciA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRIVFRQSGVhZGVycygpOwotICAgIE1hcCBodHRwSGVhZGVyID0gSFRUUFV0aWxzLmdldEh0dHBIZWFkZXJUb2tlbnMocmF3SFRUUEhlYWRlciwgIjoiKTsKLQotICAgIC8vIEdldCB0aGUgc29hcCBhY3Rpb24gaGVhZGVyCi0gICAgU3RyaW5nIHNvYXBBY3Rpb24gPSAoU3RyaW5nKSBodHRwSGVhZGVyLmdldCgiU09BUEFjdGlvbiIudG9VcHBlckNhc2UoKSk7Ci0KLSAgICAvLyBJZiB0aGVyZSBpcyBubyBzb2FwIGFjdGlvbiBoZWFkZXIsIHRoZW4gTkEKLSAgICBpZiAoc29hcEFjdGlvbiA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGVsc2UgaWYgKCEoc29hcEFjdGlvbi5zdGFydHNXaXRoKCJcIiIpKSB8fCAhKHNvYXBBY3Rpb24uZW5kc1dpdGgoIlwiIikpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgIkhUVFAgSGVhZGVyOiBcIiIgKyByYXdIVFRQSGVhZGVyICsgIlwiLiIsCi0gICAgICAgICAgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQlAxMDEwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQlAxMDEwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhYWM3MzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0JQMTAxMC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5IVFRQVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuT3BlcmF0aW9uU2lnbmF0dXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlR5cGVzUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci0KLQotLyoqCi0gKiBCUDEwMTAuCi0gKiBJdCBNVVNUIE5PVCBjb250YWluIGEgU09BUCBFbnZlbG9wZTogdGhlIEhUVFAgZW50aXR5LWJvZHkgbXVzdCBiZSBlbXB0eS4KLSAqLwotcHVibGljIGNsYXNzIEJQMTAxMCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQMTAxMChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShUZXN0QXNzZXJ0aW9uLCBFbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gUGFyc2UgcmVxdWVzdCBtZXNzYWdlCi0gICAgICBEb2N1bWVudCBkb2NSZXF1ZXN0ID0gZW50cnlDb250ZXh0LmdldFJlcXVlc3REb2N1bWVudCgpOwotCi0gICAgICAvLyBnZXQgU09BUEFjdGlvbgotICAgICAgU3RyaW5nIGhlYWRlcnMgPSBlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdCgpLmdldEhUVFBIZWFkZXJzKCk7Ci0gICAgICBTdHJpbmcgYWN0aW9uID0gbnVsbDsKLSAgICAgIGlmIChoZWFkZXJzICE9IG51bGwpCi0gICAgICAgIGFjdGlvbiA9IChTdHJpbmcpIEhUVFBVdGlscy5nZXRIdHRwSGVhZGVyVG9rZW5zKGhlYWRlcnMsICI6IikuZ2V0KCJTT0FQQWN0aW9uIi50b1VwcGVyQ2FzZSgpKTsKLQotICAgICAgQmluZGluZyBiaW5kaW5nID0gdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dC5nZXRDYW5kaWRhdGVJbmZvKCkuZ2V0QmluZGluZ3MoKVswXTsKLSAgICAgIFR5cGVzUmVnaXN0cnkgcmVnaXN0cnkgPQotICAgICAgICBuZXcgVHlwZXNSZWdpc3RyeSgKLSAgICAgICAgICB0aGlzLnZhbGlkYXRvci5nZXRXU0RMRG9jdW1lbnQoKS5nZXREZWZpbml0aW9ucygpLAotICAgICAgICAgIHZhbGlkYXRvcik7Ci0gICAgICBPcGVyYXRpb25TaWduYXR1cmUuT3BlcmF0aW9uTWF0Y2ggbWF0Y2ggPQotICAgICAgICBPcGVyYXRpb25TaWduYXR1cmUubWF0Y2hPcGVyYXRpb24oCi0gICAgICAgICAgZG9jUmVxdWVzdCwKLSAgICAgICAgICBhY3Rpb24sCi0gICAgICAgICAgYmluZGluZywKLSAgICAgICAgICByZWdpc3RyeSk7Ci0KLSAgICAgIGlmIChtYXRjaCA9PSBudWxsKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotCi0gICAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IG1hdGNoLmdldE9wZXJhdGlvbigpOwotICAgICAgICAvL2ZpbmQgb3BlcmF0aW9uIGluIHBvcnQgdHlwZQotICAgICAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKTsKLSAgICAgICAgaWYgKG9wZXJhdGlvbiA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKG9wZXJhdGlvbi5nZXRPdXRwdXQoKSA9PSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBtZXNzYWdlID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKTsKLSAgICAgICAgICAgIGlmIChtZXNzYWdlLmxlbmd0aCgpID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmIChyZXN1bHQgPT0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQpCi0gICAgICB7Ci0gICAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKG51bGwsIGVudHJ5Q29udGV4dCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDExMDEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDExMDEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmFlY2FjMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQlAxMTAxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5VdGlsczsKLQotCi0vKioKLSAqIEJQMTEwMS4KLSAqIEEgcmVzcG9uc2UgbWVzc2FnZSB0aGF0IGRvZXMgbm90IGNvbnRhaW4gYSBTT0FQIG1lc3NhZ2UgU0hPVUxEIGJlIHNlbnQgCi0gKiB1c2luZyBlaXRoZXIgYSAiMjAwIE9LIiBvciAiMjAyIEFjY2VwdGVkIiBIVFRQIHN0YXR1cyBjb2RlLgotICovCi1wdWJsaWMgY2xhc3MgQlAxMTAxIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlAxMTAxKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKFRlc3RBc3NlcnRpb24sIEVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICAvLyByZXNwb25zZSBkb2VzIG5vdCBjb250YWlucyBTT0FQIG1lc3NhZ2UKLSAgICBpZiAoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKSA9PSBudWxsCi0gICAgICB8fCAiIi5lcXVhbHMoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKSkpCi0gICAgewotICAgICAgLy8gY2hlY2sgSFRUUCBzdGF0dXMgY29kZSAKLSAgICAgIFN0cmluZyBodHRwU3RhdHVzID0KLSAgICAgICAgVXRpbHMuZ2V0SFRUUFN0YXR1c0NvZGUoCi0gICAgICAgICAgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldEhUVFBIZWFkZXJzKCkpOwotICAgICAgaWYgKCIyMDAiLmVxdWFscyhodHRwU3RhdHVzKSk7Ci0gICAgICBlbHNlIGlmICgiMjAyIi5lcXVhbHMoaHR0cFN0YXR1cykpOwotCi0gICAgICAvLyBJZiA0eHgsIHRoZW4gcmVzdWx0IGlzIG5vdEFwcGxpY2FibGUKLSAgICAgIGVsc2UgaWYgKGh0dHBTdGF0dXMuc3RhcnRzV2l0aCgiNCIpKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1dBUk5JTkc7Ci0gICAgICAgIGZhaWx1cmVEZXRhaWwgPQotICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgICAiXG5SZXNwb25zZSBtZXNzYWdlOlxuSGVhZGVyczpcbiIKLSAgICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0SFRUUEhlYWRlcnMoKQotICAgICAgICAgICAgICArICJNZXNzYWdlOlxuIgotICAgICAgICAgICAgICArIGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRNZXNzYWdlKCksCi0gICAgICAgICAgICBlbnRyeUNvbnRleHQpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gcmVzcG9uc2UgY29udGFpbnMgU09BUCBtZXNzYWdlCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDExMDMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDExMDMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTAwOTM4Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQlAxMTAzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5VdGlsczsKLQotCi0vKioKLSAqIEJQMTEwMy4KLSAqIFRoZSByZXF1ZXN0IG1lc3NhZ2Ugc2hvdWxkIG5vdCBjb250YWluIGEgUE9TVCBtZXRob2QuCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDExMDMgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDExMDMoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUoVGVzdEFzc2VydGlvbiwgRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIE1lc3NhZ2VFbnRyeSByZXF1ZXN0ID0gZW50cnlDb250ZXh0LmdldFJlcXVlc3QoKTsKLSAgICBTdHJpbmcgcmVxdWVzdEhlYWRlcnMgPSByZXF1ZXN0LmdldEhUVFBIZWFkZXJzKCk7Ci0KLSAgICAvLyBHZXQgSFRUUCBzdGF0dXMgY29kZQotICAgIFN0cmluZyBodHRwU3RhdHVzID0KLSAgICAgIFV0aWxzLmdldEhUVFBTdGF0dXNDb2RlKAotICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0SFRUUEhlYWRlcnMoKSk7Ci0KLSAgICBpZiAocmVxdWVzdEhlYWRlcnMuc3RhcnRzV2l0aCgiUE9TVCAiKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBlbHNlIGlmICghIjQwNSIuZXF1YWxzKGh0dHBTdGF0dXMpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfV0FSTklORzsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPQotICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICJcblJlcXVlc3QgbWVzc2FnZTpcbkhlYWRlcnM6XG4iCi0gICAgICAgICAgICArIGVudHJ5Q29udGV4dC5nZXRSZXF1ZXN0KCkuZ2V0SFRUUEhlYWRlcnMoKQotICAgICAgICAgICAgKyAiXG5NZXNzYWdlOlxuIgotICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdCgpLmdldE1lc3NhZ2UoKQotICAgICAgICAgICAgKyAiXG5cblJlc3BvbnNlIG1lc3NhZ2U6XG5IZWFkZXJzOlxuIgotICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0UmVzcG9uc2UoKS5nZXRIVFRQSGVhZGVycygpCi0gICAgICAgICAgICArICJcbk1lc3NhZ2U6XG4iCi0gICAgICAgICAgICArIGVudHJ5Q29udGV4dC5nZXRSZXNwb25zZSgpLmdldE1lc3NhZ2UoKSwKLSAgICAgICAgICBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDExMDQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDExMDQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGZjZGJkNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQlAxMTA0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWVzc2FnZUVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuSFRUUFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlV0aWxzOwotCi0KLS8qKgotICogQlAxMTA0LgotICogVGhlIHJlcXVlc3QgbWVzc2FnZSBzaG91bGQgbm90IGNvbnRhaW4gYSBjb250ZW50LXR5cGUgb2YgInRleHQveG1sIi4KLSAqLwotcHVibGljIGNsYXNzIEJQMTEwNCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQMTEwNChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShUZXN0QXNzZXJ0aW9uLCBFbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIGNoZWNrIHJlcXVlc3QgZm9yIHRoZSAidGV4dC94bWwiIGNvbnRlbnQgdHlwZQotICAgIE1lc3NhZ2VFbnRyeSByZXF1ZXN0ID0gZW50cnlDb250ZXh0LmdldFJlcXVlc3QoKTsKLSAgICBTdHJpbmcgaGVhZGVycyA9IHJlcXVlc3QuZ2V0SFRUUEhlYWRlcnMoKTsKLSAgICBTdHJpbmcgY29udGVudFR5cGUgPSAoU3RyaW5nKSBIVFRQVXRpbHMuZ2V0SHR0cEhlYWRlclRva2VucyhoZWFkZXJzLCAiOiIpCi0gICAgICAuZ2V0KEhUVFBDb25zdGFudHMuSEVBREVSX0NPTlRFTlRfVFlQRS50b1VwcGVyQ2FzZSgpKTsKLQotICAgIC8vIEdldCBIVFRQIHN0YXR1cyBjb2RlCi0gICAgU3RyaW5nIGh0dHBTdGF0dXMgPQotICAgICAgVXRpbHMuZ2V0SFRUUFN0YXR1c0NvZGUoCi0gICAgICAgIGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRIVFRQSGVhZGVycygpKTsKLQotICAgIC8vIElmIHRoZSByZXF1ZXN0IG1lc3NhZ2UgaGFzIGEgY29udGVudCB0eXBlIG9mIHRleHQveG1sLAotICAgIC8vIHRoZW4gdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgIGlmIChjb250ZW50VHlwZSAhPSBudWxsCi0gICAgICAmJiBjb250ZW50VHlwZS5pbmRleE9mKFdTSUNvbnN0YW50cy5DT05URU5UX1RZUEVfVEVYVF9YTUwpICE9IC0xKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBjaGVjayBIVFRQIHN0YXR1cyBjb2RlCi0gICAgICBpZiAoISI0MTUiLmVxdWFscyhodHRwU3RhdHVzKSkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9XQVJOSU5HOwotICAgICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgIlxuUmVxdWVzdCBtZXNzYWdlOlxuSGVhZGVyczpcbiIKLSAgICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdCgpLmdldEhUVFBIZWFkZXJzKCkKLSAgICAgICAgICAgICAgKyAiXG5NZXNzYWdlOlxuIgotICAgICAgICAgICAgICArIGVudHJ5Q29udGV4dC5nZXRSZXF1ZXN0KCkuZ2V0TWVzc2FnZSgpCi0gICAgICAgICAgICAgICsgIlxuXG5SZXNwb25zZSBtZXNzYWdlOlxuSGVhZGVyczpcbiIKLSAgICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0UmVzcG9uc2UoKS5nZXRIVFRQSGVhZGVycygpCi0gICAgICAgICAgICAgICsgIlxuTWVzc2FnZTpcbiIKLSAgICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0UmVzcG9uc2UoKS5nZXRNZXNzYWdlKCksCi0gICAgICAgICAgICBlbnRyeUNvbnRleHQpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0JQMTExNi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0JQMTExNi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTBmODRmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDExMTYuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUE9wZXJhdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5PcGVyYXRpb25TaWduYXR1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVHlwZXNSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci0KLQotLyoqCi0gKiBCUDExMTYuCi0gKiBTT0FQQWN0aW9uIGhlYWRlciBzaG91bGQgY29udGFpbiBhIHF1b3RlZCBzdHJpbmcgdGhhdCBoYXMgc2FtZSAKLSAqIHZhbHVlIGFzIHRoZSB2YWx1ZSBvZiB0aGUgc29hcGJpbmQ6b3BlcmF0aW9uL0Bzb2FwQWN0aW9uIGF0dHJpYnV0ZSwgCi0gKiBhbmQgYW4gZW1wdHkgc3RyaW5nICgiIikgaWYgdGhlcmUgaXMgbm8gc3VjaCBhdHRyaWJ1dGUuCi0gKi8KLXB1YmxpYyBjbGFzcyBCUDExMTYgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzVmlzaXRvcgotewotCi0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBCUDExMTYoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIGFjdGlvbiA9IG51bGw7Ci0gIHByaXZhdGUgU3RyaW5nIGhlYWRlcnMgPSBudWxsOwotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb24sIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBTT0FQT3BlcmF0aW9uIHNvYXBPcGVyLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgU3RyaW5nIHNvYXBBY3Rpb24gPSBzb2FwT3Blci5nZXRTb2FwQWN0aW9uVVJJKCk7Ci0gICAgaWYgKHNvYXBBY3Rpb24gPT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoISIiLmVxdWFscyhhY3Rpb24pKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgPQotICAgICAgICAgICJcbkhUVFAgaGVhZGVyczpcbiIgKyBoZWFkZXJzICsgIlxuc29hcEFjdGlvbjpcbiIgKyBzb2FwQWN0aW9uOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgaWYgKCFzb2FwQWN0aW9uLmVxdWFscyhhY3Rpb24pKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgPQotICAgICAgICAgICJcbkhUVFAgaGVhZGVyczpcbiIgKyBoZWFkZXJzICsgIlxuc29hcEFjdGlvbjpcbiIgKyBzb2FwQWN0aW9uOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIFBhcnNlIHJlcXVlc3QgbWVzc2FnZQotICAgICAgRG9jdW1lbnQgZG9jID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeURvY3VtZW50KCk7Ci0KLSAgICAgIC8vIGdldCBTT0FQQWN0aW9uCi0gICAgICBoZWFkZXJzID0gZW50cnlDb250ZXh0LmdldFJlcXVlc3QoKS5nZXRIVFRQSGVhZGVycygpOwotICAgICAgaWYgKGhlYWRlcnMgIT0gbnVsbCkKLSAgICAgICAgYWN0aW9uID0gKFN0cmluZykgSFRUUFV0aWxzLmdldEh0dHBIZWFkZXJUb2tlbnMoaGVhZGVycywgIjoiKS5nZXQoIlNPQVBBY3Rpb24iLnRvVXBwZXJDYXNlKCkpOwotCi0gICAgICBpZiAoYWN0aW9uID09IG51bGwpIAotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotCi0gICAgICBpZiAoYWN0aW9uLmxlbmd0aCgpID4gMQotICAgICAgICAmJiBhY3Rpb24uY2hhckF0KDApID09ICciJwotICAgICAgICAmJiBhY3Rpb24uY2hhckF0KGFjdGlvbi5sZW5ndGgoKSAtIDEpID09ICciJykKLSAgICAgIHsKLSAgICAgICAgYWN0aW9uID0gYWN0aW9uLnN1YnN0cmluZygxLCBhY3Rpb24ubGVuZ3RoKCkgLSAxKTsKLSAgICAgIH0KLQotICAgICAgT3BlcmF0aW9uU2lnbmF0dXJlLk9wZXJhdGlvbk1hdGNoIG1hdGNoID0KLSAgICAgICAgT3BlcmF0aW9uU2lnbmF0dXJlLm1hdGNoT3BlcmF0aW9uKAotICAgICAgICAgIGRvYywKLSAgICAgICAgICBudWxsLAotICAgICAgICAgIHZhbGlkYXRvci5hbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldEJpbmRpbmdzKClbMF0sCi0gICAgICAgICAgbmV3IFR5cGVzUmVnaXN0cnkoCi0gICAgICAgICAgICAgIHZhbGlkYXRvci5hbmFseXplckNvbnRleHQKLSAgICAgICAgICAgICAgLmdldENhbmRpZGF0ZUluZm8oKQotICAgICAgICAgICAgICAuZ2V0V3NkbERvY3VtZW50KCkKLSAgICAgICAgICAgICAgLmdldERlZmluaXRpb25zKCksCi0gICAgICAgICAgICAgIHZhbGlkYXRvciksCi0gICAgICAgICAgZmFsc2UpOwotCi0gICAgICBpZiAobWF0Y2ggIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgV1NETFRyYXZlcnNhbCB0cmF2ZXJzYWwgPSBuZXcgV1NETFRyYXZlcnNhbCgpOwotICAgICAgICAvL1Zpc2l0b3JBZGFwdG9yLmFkYXB0KHRoaXMpOwotICAgICAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcih0aGlzKTsKLSAgICAgICAgdHJhdmVyc2FsLnZpc2l0U09BUE9wZXJhdGlvbih0cnVlKTsKLSAgICAgICAgdHJhdmVyc2FsLnRyYXZlcnNlKG1hdGNoLmdldE9wZXJhdGlvbigpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotCi0gICAgaWYgKHJlc3VsdCA9PSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRAotICAgICAgJiYgZmFpbHVyZURldGFpbE1lc3NhZ2UgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChmYWlsdXJlRGV0YWlsTWVzc2FnZSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQlA0MTAzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQlA0MTAzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2M2E1Y2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0JQNDEwMy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuTWVzc2FnZUVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuSFRUUFV0aWxzOwotCi0vKioKLSAqIEJQNDEwMwotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBtZXNzYWdlIGluIHRoZSBtZXNzYWdlIGxvZyBmaWxlPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSBtZXNzYWdlIGNvbnRhaW5zIGFuIEhUVFAgQXV0aGVudGljYXRpb24gaGVhZGVyIGZpZWxkPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEJQNDEwMyBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgewotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIVFRQX0FVVEhfU0NIRU1FX0JBU0lDID0gIkJhc2ljIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhUVFBfQVVUSF9TQ0hFTUVfRElHRVNUID0gIkRpZ2VzdCI7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQNDEwMyhCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBHZXR0aW5nIG1lc3NhZ2UgaGVhZGVycwotICAgIFN0cmluZyBoZWFkZXJzID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldEhUVFBIZWFkZXJzKCk7Ci0gICAgLy8gSWYgdGhpcyBpcyBhIHJlcXVlc3QgbWVzc2FnZQotICAgIGlmIChlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0VHlwZSgpLmVxdWFscyhNZXNzYWdlRW50cnkuVFlQRV9SRVFVRVNUKSkKLSAgICB7Ci0gICAgICAvLyBJZiB0aGUgcmVxdWVzdCBoZWFkZXJzIGNvbnRhaW4gYXV0aGVudGljYXRpb24gc2NoZW1lICJCYXNpYyIgb3IgIkRpZ2VzdCIKLSAgICAgIC8vIG9yIHRoZXJlIGFyZSBubyBIVFRQIEF1dGhlbnRpY2F0aW9uIGhlYWRlcnMsIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmICghY29udGFpbnNJbnZhbGlkQXV0aChoZWFkZXJzLCBIVFRQQ29uc3RhbnRzLkhFQURFUl9BVVRIT1JJWkFUSU9OKQotICAgICAgICAmJiAhY29udGFpbnNJbnZhbGlkQXV0aChoZWFkZXJzLCBIVFRQQ29uc3RhbnRzLkhFQURFUl9QUk9YWV9BVVRIT1JJWkFUSU9OKSkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gZWxzZSB0aGlzIGlzIGEgcmVzcG9uc2UKLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gSWYgdGhlIHJlc3BvbnNlIGhlYWRlcnMgY29udGFpbiBhdXRoZW50aWNhdGlvbiBzY2hlbWUgIkJhc2ljIiBvciAiRGlnZXN0IgotICAgICAgLy8gb3IgdGhlcmUgYXJlIG5vIEhUVFAgQXV0aGVudGljYXRpb24gaGVhZGVycywgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKCFjb250YWluc0ludmFsaWRBdXRoKGhlYWRlcnMsIEhUVFBDb25zdGFudHMuSEVBREVSX1dXV19BVVRIRU5USUNBVEUpCi0gICAgICAgICYmICFjb250YWluc0ludmFsaWRBdXRoKGhlYWRlcnMsIEhUVFBDb25zdGFudHMuSEVBREVSX1BST1hZX0FVVEhFTlRJQ0FURSkpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gQXNzZXJ0aW9uIHJlc3VsdCBoYXMgbm90IGJlZW4gY2hhbmdlZCwgSFRUUCBBdXRoZW50aWNhdGlvbiBoZWFkZXJzCi0gICAgLy8gZG9lcyBub3QgY29udGFpbiBhdXRoZW50aWNhdGlvbiBzY2hlbWUgIkJhc2ljIiBvciAiRGlnZXN0IiwKLSAgICAvLyB0aGUgYXNzZXJ0aW9uIHBhc3NlZAotICAgIGlmIChyZXN1bHQuZXF1YWxzKEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEKSkKLSAgICB7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgIHRlc3RBc3NlcnRpb24uZ2V0RGV0YWlsRGVzY3JpcHRpb24oKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja3Mgd2hldGhlciBIVFRQIGhlYWRlcnMgY29udGFpbiBIVFRQIEF1dGhlbnRpY2F0aW9uIGhlYWRlcnMgdGhhdCB1c2VzCi0gICAqIGF1dGhlbnRpY2F0aW9uIHNjaGVtZSBvdGhlciB0aGFuICJCYXNpYyIgb3IgIkRpZ2VzdCIuCi0gICAqIEBwYXJhbSBoZWFkZXJzIEhUVFAgaGVhZGVycy4KLSAgICogQHBhcmFtIGhlYWRlciBhIGhlYWRlciBuYW1lIGJlaW5nIHJldHJpZXZlZC4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBIVFRQIEF1dGhlbnRpY2F0aW9uIGhlYWRlciB0aGF0IHVzZXMgYXV0aGVudGljYXRpb24KLSAgICogc2NoZW1lIG90aGVyIHRoYW4gIkJhc2ljIiBvciAiRGlnZXN0IiBpcyBmb3VuZCwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGNvbnRhaW5zSW52YWxpZEF1dGgoU3RyaW5nIGhlYWRlcnMsIFN0cmluZyBoZWFkZXIpCi0gIHsKLSAgICAvLyBHZXR0aW5nIGEgaGVhZGVyIHZhbHVlCi0gICAgU3RyaW5nIGhlYWRlclZhbHVlID0gbnVsbDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBoZWFkZXJWYWx1ZSA9IChTdHJpbmcpIEhUVFBVdGlscy5nZXRIdHRwSGVhZGVyVG9rZW5zKGhlYWRlcnMsIjoiKQotICAgICAgICAuZ2V0KGhlYWRlci50b1VwcGVyQ2FzZSgpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQotCi0gICAgLy8gSWYgdGhlIGhlYWRlciBpcyBwcmVzZW50ZWQKLSAgICBpZiAoaGVhZGVyVmFsdWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBSZXRyaWV2aW5nIGF1dGhlbnRpY2F0aW9uIHNjaGVtZQotICAgICAgaW50IGlkeFNQID0gaGVhZGVyVmFsdWUuaW5kZXhPZigiICIpOwotICAgICAgaWYgKGlkeFNQID4gLTEpCi0gICAgICB7Ci0gICAgICAgIGhlYWRlclZhbHVlID0gaGVhZGVyVmFsdWUuc3Vic3RyaW5nKDAsIGlkeFNQKTsKLSAgICAgIH0KLSAgICAgIC8vIElmIGEgc2NoZW1lIGlzIG5laXRoZXIgIkJhc2ljIiBub3IgIkRpZ2VzdCIsIHJldHVybiB0cnVlCi0gICAgICBpZiAoIWhlYWRlclZhbHVlLmVxdWFsc0lnbm9yZUNhc2UoSFRUUF9BVVRIX1NDSEVNRV9CQVNJQykKLSAgICAgICAgJiYgIWhlYWRlclZhbHVlLmVxdWFsc0lnbm9yZUNhc2UoSFRUUF9BVVRIX1NDSEVNRV9ESUdFU1QpKQotICAgICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0JQNDEwNC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0JQNDEwNC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNmQwY2Y5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDQxMDQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuSFRUUENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5IVFRQVXRpbHM7Ci0KLS8qKgotICogQlA0MTA0Ci0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgbWVzc2FnZSBpbiB0aGUgbWVzc2FnZSBsb2cgZmlsZSBjb250YWluaW5nIGFuIEhUVFAgSGVhZGVyIGZpZWxkIHRoYXQgaXMgbm90IGZyb20gdGhlIGZvbGxvd2luZyBsaXN0IG9mIHNwZWNpZmllZCBoZWFkZXIgZmllbGRzOiAoaHR0cDovL3d3dy5tbm90Lm5ldC9kcmFmdHMvZHJhZnQtbm90dGluZ2hhbS1odHRwLWhlYWRlci1yZWctMDAudHh0KTwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgbWVzc2FnZSBjb250YWlucyBhbiBIVFRQIEhlYWRlciBmaWVsZCB0aGF0IGlzIG5vdCBmcm9tIHRoZSBmb2xsb3dpbmcgbGlzdCBvZiBzcGVjaWZpZWQgaGVhZGVyIGZpZWxkczogKGh0dHA6Ly93d3cubW5vdC5uZXQvZHJhZnRzL2RyYWZ0LW5vdHRpbmdoYW0taHR0cC1oZWFkZXItcmVnLTAwLnR4dCk8L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlA0MTA0IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcyB7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgcHJpdmF0ZSBMaXN0IGtub3duSGVhZGVyTmFtZXM7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIEJQNDEwNChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICAgIGtub3duSGVhZGVyTmFtZXMgPSBudWxsOwotICB9Ci0KLSAgcHJpdmF0ZSBMaXN0IGdldEFsbEtub3duSGVhZGVyTmFtZXMoKSB7Ci0gICAgaWYgKGtub3duSGVhZGVyTmFtZXMgPT0gbnVsbCkgewotICAgICAga25vd25IZWFkZXJOYW1lcyA9IEhUVFBDb25zdGFudHMuZ2V0QWxsS25vd25IZWFkZXJOYW1lcygpOwotICAgIH0KLSAgICByZXR1cm4ga25vd25IZWFkZXJOYW1lczsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICAvLyBnZXR0aW5nIEhUVFAgSGVhZGVycwotICAgIE1hcCBobWFwID0gSFRUUFV0aWxzLmdldEh0dHBIZWFkZXJUb2tlbnMoCi0gICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0SFRUUEhlYWRlcnMoKSwgIjoiKTsKLQotICAgIEl0ZXJhdG9yIGkgPSBobWFwLmtleVNldCgpLml0ZXJhdG9yKCkgOwotICAgIHdoaWxlIChpLmhhc05leHQoKSkgewotICAgICAgU3RyaW5nIGhlYWRlck5hbWUgPSAoU3RyaW5nKSBpLm5leHQoKTsKLSAgICAgIC8vIElmIGhlYWRlciBuYW1lIGlzIG5vdCBrbm93biwgdGhlbiB0aGUgYXNzZXJ0aW9uIHBhc3NlZAotICAgICAgaWYgKCFnZXRBbGxLbm93bkhlYWRlck5hbWVzKCkuY29udGFpbnMoaGVhZGVyTmFtZS50b1VwcGVyQ2FzZSgpKSkKLSAgICAgIHsKLSAgICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgIHRlc3RBc3NlcnRpb24uZ2V0RGV0YWlsRGVzY3JpcHRpb24oKSwgZW50cnlDb250ZXh0KTsKLQotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBJZiB0aGVyZSBpcyBubyBIVFRQIGhlYWRlciB0aGF0IGlzIG5vdCBmcm9tIGEgbGlzdCwKLSAgICAvLyB0aGVuIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUgCi0gICAgaWYgKGZhaWx1cmVEZXRhaWwgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDQxMDUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDQxMDUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDkwM2QzNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQlA0MTA1LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgY29tLmlibS5pY3UudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuSFRUUFV0aWxzOwotCi0KLS8qKgotICogQlA0MTA1Ci0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgbWVzc2FnZSBpbiB0aGUgbWVzc2FnZSBsb2cgZmlsZSBjb250YWluaW5nIGEgQ29udGVudC1lbmNvZGluZyBIVFRQIGhlYWRlciBmaWVsZCB3aXRoIGEgdmFsdWUgb3RoZXIgdGhhbiAiZ3ppcCIsICJjb21wcmVzcyIgb3IgImRlZmxhdGUiPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSBjb250YWluZWQgQ29udGVudC1lbmNvZGluZyBIVFRQIGhlYWRlciBmaWVsZCBoYXMgYSB2YWx1ZSBvdGhlciB0aGFuICJnemlwIiwgImNvbXByZXNzIiBvciAiZGVmbGF0ZSIuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEJQNDEwNSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgewotCi0gIC8vIEFsbCB0aGUgcmVnaXN0ZXJlZCBjb250ZW50LWNvZGluZyB2YWx1ZSB0b2tlbnMgKFJGQzI2MTYpIGV4Y2VwdCAiaWRlbnRpdHkiCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBHWklQX1ZBTFVFID0gImd6aXAiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09NUFJFU1NfVkFMVUUgPSAiY29tcHJlc3MiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGTEFURV9WQUxVRSA9ICJkZWZsYXRlIjsKLQotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlA0MTA1KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgLy8gR2V0dGluZyB0aGUgQ29udGVudC1FbmNvZGluZyBIVFRQIGhlYWRlciB2YWx1ZQotICAgIFN0cmluZyBjb250ZW50RW5jb2RpbmcgPSAoU3RyaW5nKSBIVFRQVXRpbHMuZ2V0SHR0cEhlYWRlclRva2VucygKLSAgICAgIGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRIVFRQSGVhZGVycygpLAotICAgICAgIjoiKS5nZXQoSFRUUENvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9FTkNPRElORy50b1VwcGVyQ2FzZSgpKTsKLQotICAgIGlmIChjb250ZW50RW5jb2RpbmcgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBMb3dlcmluZyB2YWx1ZSdzIGNhc2UgYmVjYXVzZSBSRkMyNjE2IHNheXMKLSAgICAgIC8vIHRoYXQgYWxsIGNvbnRlbnQtY29kaW5nIHZhbHVlcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZQotICAgICAgY29udGVudEVuY29kaW5nID0gY29udGVudEVuY29kaW5nLnRvTG93ZXJDYXNlKCk7Ci0KLSAgICAgIC8vIE11bHRpcGxlIGVuY29kaW5ncyBjYW4gYmUgYXBwbGllZCB0byBhbiBlbnRpdHksCi0gICAgICAvLyBzbyBicmVha2luZyB0aGUgdmFsdWUgaW50byB0b2tlbnMKLSAgICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoY29udGVudEVuY29kaW5nLCAiLCIpOwotICAgICAgd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHRva2VuID0gc3QubmV4dFRva2VuKCkudHJpbSgpOwotICAgICAgICAvLyBJZiBhIHRva2VuIGRvZXMgbm90IGVxdWFsIHRvIGFueSByZWdpc3RlcmVkIG9uZQotICAgICAgICAvLyB0aGVuIHRoZSBhc3NlcnRpb24gcGFzc2VkCi0gICAgICAgIGlmICggIXRva2VuLmVxdWFscyhHWklQX1ZBTFVFKQotICAgICAgICAgICYmICF0b2tlbi5lcXVhbHMoQ09NUFJFU1NfVkFMVUUpCi0gICAgICAgICAgJiYgIXRva2VuLmVxdWFscyhERUZMQVRFX1ZBTFVFKSkgewotCi0gICAgICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgdGVzdEFzc2VydGlvbi5nZXREZXRhaWxEZXNjcmlwdGlvbigpLCBlbnRyeUNvbnRleHQpOwotCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBJZiB0aGVyZSBpcyBubyB1bnJlZ2lzdGVyZWQgdmFsdWUgb2YgQ29udGVudC1FbmNvZGluZywKLSAgICAvLyB0aGVuIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUgCi0gICAgaWYgKGZhaWx1cmVEZXRhaWwgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDQxMDYuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDQxMDYuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTI3ODYzMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvQlA0MTA2LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5IVFRQQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBVdGlsczsKLQotCi0vKioKLSAqIEJQNDEwNgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHJlc3BvbnNlIG1lc3NhZ2UgaW4gdGhlIG1lc3NhZ2UgbG9nIGZpbGUgdGhhdCBjb250YWlucyBhIHRyYW5zZmVyLWVuY29kaW5nIEhUVFAgaGVhZGVyIGZpZWxkLjwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgY29udGFpbmVkIHRyYW5zZmVyLWVuY29kaW5nIEhUVFAgaGVhZGVyIGZpZWxkIGhhcyBhIHZhbHVlIG9mICJjaHVua2VkIjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDQxMDYgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIHsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0hVTktFRF9WQUxVRSA9ICJjaHVua2VkIjsKLQotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlA0MTA2KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgLy8gR2V0dGluZyBhIFRyYW5zZmVyLUVuY29kaW5nIEhUVFAgaGVhZGVyIHZhbHVlCi0gICAgU3RyaW5nIHRyYW5zZmVyRW5jb2RpbmcgPSAoU3RyaW5nKSBIVFRQVXRpbHMuZ2V0SHR0cEhlYWRlclRva2VucygKLSAgICAgIGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRIVFRQSGVhZGVycygpLAotICAgICAgIjoiKS5nZXQoSFRUUENvbnN0YW50cy5IRUFERVJfVFJBTlNGRVJfRU5DT0RJTkcudG9VcHBlckNhc2UoKSk7Ci0KLSAgICBpZiAodHJhbnNmZXJFbmNvZGluZyAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIExvd2VyaW5nIHZhbHVlJ3MgY2FzZSBiZWNhdXNlIFJGQzI2MTYgc2F5cwotICAgICAgLy8gdGhhdCBhbGwgdHJhbnNmZXItY29kaW5nIHZhbHVlcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZQotICAgICAgdHJhbnNmZXJFbmNvZGluZyA9IHRyYW5zZmVyRW5jb2RpbmcudG9Mb3dlckNhc2UoKTsKLQotICAgICAgLy8gSWYgdGhlIHZhbHVlIGlzIG90aGVyIHRoYW4gImNodW5rZWQiLCB0aGVuIHRoZSBhc3NlcnRpb24gcGFzc2VkCi0gICAgICBpZiAoIXRyYW5zZmVyRW5jb2RpbmcuZXF1YWxzKENIVU5LRURfVkFMVUUpKSB7Ci0gICAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgICB0ZXN0QXNzZXJ0aW9uLmdldERldGFpbERlc2NyaXB0aW9uKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlcmUgaXMgbm8gVHJhbmZlci1FbmNvZGluZyBvciBpdHMgdmFsdWUgaXMgImNodW5rZWQiLAotICAgIC8vIHRoZW4gdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZSAKLSAgICBpZiAoZmFpbHVyZURldGFpbCA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0JQNDEwNy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL0JQNDEwNy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjk5YTMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9CUDQxMDcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuSFRUUFV0aWxzOwotCi0KLS8qKgotICogQlA0MTA3Ci0gKiA8Y29udGV4dD5Gb3IgYSByZXF1ZXN0IG1lc3NhZ2UgY29udGFpbmluZyBhbiBVcGdyYWRlIGZpZWxkIGluIHRoZSBIVFRQIEhlYWRlcnMuPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSByZXF1ZXN0IG1lc3NhZ2UgY29udGFpbnMgYW4gVXBncmFkZSBmaWVsZCBpbiB0aGUgSFRUUCBIZWFkZXJzLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDQxMDcgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIHsKLQotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgQlA0MTA3KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEdldHRpbmcgdGhlIFVwZ3JhZGUgSFRUUCBoZWFkZXIgdmFsdWUKLSAgICBTdHJpbmcgdXBncmFnZSA9IChTdHJpbmcpIEhUVFBVdGlscy5nZXRIdHRwSGVhZGVyVG9rZW5zKAotICAgICAgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldEhUVFBIZWFkZXJzKCksCi0gICAgICAiOiIpLmdldChIVFRQQ29uc3RhbnRzLkhFQURFUl9VUEdSQURFLnRvVXBwZXJDYXNlKCkpOyAKLQotICAgIC8vIElmIHRoZSBoZWFkZXIgaXMgcHJlc2VudGVkLCB0aGVuIHRoZSBhc3NlcnRpb24gcGFzc2VkCi0gICAgaWYgKHVwZ3JhZ2UgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgIHRlc3RBc3NlcnRpb24uZ2V0RGV0YWlsRGVzY3JpcHRpb24oKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0gICAgLy8gZWxzZSB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgZWxzZQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL01lc3NhZ2VWYWxpZGF0b3JJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvTWVzc2FnZVZhbGlkYXRvckltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTVhZjBlNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvTWVzc2FnZVZhbGlkYXRvckltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwMyBJQk0gQ29ycG9yYXRpb24sIFBhcmFzb2Z0IGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAgICAgIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgIFBhcmFzb2Z0IC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLQotLyoqCi0gKiBAdmVyc2lvbiAxLjAKLSAqLwotcHVibGljIGNsYXNzIE1lc3NhZ2VWYWxpZGF0b3JJbXBsCi0gIGV4dGVuZHMgQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgaW1wbGVtZW50cyBNZXNzYWdlVmFsaWRhdG9yCi17Ci0gIC8qKgotICAgKiBHZXQgdGhlIGFydGlmYWN0IHR5cGUgdGhhdCB0aGlzIHZhbGlkYXRvciBhcHBsaWVzIHRvLgotICAgKiBAcmV0dXJuIHRoZSBhcnRpZmFjdCB0eXBlIChhIFN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0QXJ0aWZhY3RUeXBlKCkgewotICAgICAgcmV0dXJuIFRZUEVfTUVTU0FHRTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIGNvbGxlY3Rpb24gb2YgZW50cnkgdHlwZXMgdGhhdCB0aGlzIHZhbGlkYXRvciBhcHBsaWVzIHRvLgotICAgKiBAcmV0dXJuIGFuIGFycmF5IG9mIGVudHJ5IHR5cGVzIChTdHJpbmdzKQotICAgKi8KLSAgcHVibGljIFN0cmluZ1tdIGdldEVudHJ5VHlwZXMoKSB7Ci0gICAgICByZXR1cm4gbmV3IFN0cmluZ1tdIHsKLSAgICAgICAgICAgICAgVFlQRV9NRVNTQUdFX1JFUVVFU1QsCi0gICAgICAgICAgICAgIFRZUEVfTUVTU0FHRV9SRVNQT05TRSwKLSAgICAgICAgICAgICAgVFlQRV9NRVNTQUdFX0FOWSwKLSAgICAgICAgICAgICAgVFlQRV9NSU1FX1BBUlQsCi0gICAgICAgICAgICAgIFRZUEVfTUlNRV9ST09UX1BBUlQKLSAgICAgIH07Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwjaXNQcmltYXJ5RW50cnlUeXBlTWF0Y2gob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIGlzUHJpbWFyeUVudHJ5VHlwZU1hdGNoKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICB7Ci0gICAgYm9vbGVhbiBtYXRjaCA9IGZhbHNlOwotCi0gICAgLy8gVmVyaWZ5IHRoYXQgdGhlIGVudHJ5IGFuZCB0ZXN0IGFzc2VydGlvbiBoYXZlIHRoZSBzYW1lIHByaW1hcnkgY29udGV4dAotICAgIGlmICgodGVzdEFzc2VydGlvbi5nZXRFbnRyeVR5cGVOYW1lKCkuZXF1YWxzKFRZUEVfTUVTU0FHRV9BTlkpKQotICAgICAgfHwgKHRlc3RBc3NlcnRpb24uZ2V0RW50cnlUeXBlTmFtZSgpLmVxdWFscyhUWVBFX01FU1NBR0VfUkVRVUVTVCkKLSAgICAgICAgJiYgKGVudHJ5Q29udGV4dAotICAgICAgICAgIC5nZXRFbnRyeSgpCi0gICAgICAgICAgLmdldEVudHJ5VHlwZSgpCi0gICAgICAgICAgLmdldFR5cGVOYW1lKCkKLSAgICAgICAgICAuZXF1YWxzKFRZUEVfTUVTU0FHRV9SRVFVRVNUKSkpCi0gICAgICB8fCAodGVzdEFzc2VydGlvbi5nZXRFbnRyeVR5cGVOYW1lKCkuZXF1YWxzKFRZUEVfTUVTU0FHRV9SRVNQT05TRSkKLSAgICAgICAgJiYgKGVudHJ5Q29udGV4dAotICAgICAgICAgIC5nZXRFbnRyeSgpCi0gICAgICAgICAgLmdldEVudHJ5VHlwZSgpCi0gICAgICAgICAgLmdldFR5cGVOYW1lKCkKLSAgICAgICAgICAuZXF1YWxzKFRZUEVfTUVTU0FHRV9SRVNQT05TRSkpKQotICAgICAgfHwgdGVzdEFzc2VydGlvbi5nZXRFbnRyeVR5cGVOYW1lKCkuZXF1YWxzKFRZUEVfTUlNRV9ST09UX1BBUlQpCi0gICAgICB8fCB0ZXN0QXNzZXJ0aW9uLmdldEVudHJ5VHlwZU5hbWUoKS5lcXVhbHMoVFlQRV9NSU1FX1BBUlQpKQotICAgIHsKLSAgICAgIG1hdGNoID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbWF0Y2g7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvU1NCUDEwMDMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9TU0JQMTAwMy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NjFlYWU2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9TU0JQMTAwMy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25QYXNzRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBVdGlsczsKLQotCi0vKioKLSAqIFNTQlAxMDAzLgotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBub24tbXVsdGlwYXJ0L3JlbGF0ZWQgbWVzc2FnZSBpbiB0aGUgbG9nIGZpbGUsIHdoaWNoIGhhcyBhIG5vbi1lbXB0eSBlbnRpdHktYm9keTwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqICBUaGUgbG9nZ2VkIFNPQVAgZW52ZWxvcGUgaXMgYSBVVEYtOCB0cmFuc2NyaXB0IG9mIGFuIGVudmVsb3BlIG9yaWdpbmFsbHkgZW5jb2RlZCBhcyBVVEYtOCBvciBVVEYtMTYuIAotICogIFRoZSBIVFRQIENvbnRlbnQtVHlwZSBoZWFkZXIncyBjaGFyc2V0IHZhbHVlIGlzIGVpdGhlciBVVEYtOCBvciBVVEYtMTYuIExvb2tpbmcgYXQgdGhlIG1lc3NhZ2VDb250ZW50IAotICogIGVsZW1lbnQgb2YgdGhlIGxvZ2dlZCBtZXNzYWdlLCBlaXRoZXIgCi0gKiAgICAoMSkgaXQgaGFzIGEgQk9NIGF0dHJpYnV0ZSB3aGljaCBtYXBzIHRoZSBjaGFyc2V0IHZhbHVlIGluIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyLCBvciAKLSAqICAgICgyKSBpdCBoYXMgaXQgaGFzIGFuIFhNTCBkZWNsYXJhdGlvbiB3aGljaCBtYXRjaGVzIHRoZSBjaGFyc2V0IHZhbHVlIGluIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyLCBvciAKLSAqICAgICgzKSB0aGVyZSBpcyBubyBCT00gYXR0cmlidXRlIGFuZCBubyBYTUwgZGVjbGFyYXRpb24sIGFuZCB0aGUgY2hhcnNldCB2YWx1ZSBpcyBVVEYtOC4KLSAqIDwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKgotICogQGF1dGhvciBsYXV6b25kCi0gKi8gCi1wdWJsaWMgY2xhc3MgU1NCUDEwMDMgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByb3RlY3RlZCBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFNTQlAxMDAzKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIElmIHRoZXJlIGlzIGEgcmVzcG9uc2UgbWVzc2FnZSBmb3Igb25lLXdheSBvcGVyYXRpb24sIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmICh2YWxpZGF0b3IuaXNPbmVXYXlSZXNwb25zZShlbnRyeUNvbnRleHQpKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICBTdHJpbmcgaHR0cEhlYWRlciA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRIVFRQSGVhZGVycygpOwotCi0gICAgICBNYXAgaHR0cEhlYWRlck1hcCA9IEhUVFBVdGlscy5nZXRIdHRwSGVhZGVyVG9rZW5zKGh0dHBIZWFkZXIsICI6Iik7Ci0gICAgICBTdHJpbmcgY29udGVudFR5cGUgPSAoU3RyaW5nKSBodHRwSGVhZGVyTWFwLmdldCgiQ29udGVudC1UeXBlIi50b1VwcGVyQ2FzZSgpKTsKLQotICAgICAgaWYgKGNvbnRlbnRUeXBlID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKAotICAgICAgICAgICJUaGUgQ29udGVudC1UeXBlIGhlYWRlciBpcyBub3QgcHJlc2VudC4iKTsKLSAgICAgIH0KLQotICAgICAgY29udGVudFR5cGUgPSBjb250ZW50VHlwZS50cmltKCk7Ci0gICAgICBTdHJpbmcgY2hhcnNldCA9IGNvbnRlbnRUeXBlLnN1YnN0cmluZygKLSAgICAgICAgY29udGVudFR5cGUuaW5kZXhPZigiOyIpICsgMSwgY29udGVudFR5cGUubGVuZ3RoKCkpOwotICAgICAgY2hhcnNldCA9IGNoYXJzZXQudHJpbSgpOwotICAgICAgaWYgKCFjaGFyc2V0LnN0YXJ0c1dpdGgoImNoYXJzZXQiKSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oCi0gICAgICAgICAgIk1pc3Npbmcgb3IgYmFkIFwiY2hhcnNldFwiIGF0dHJpYnV0ZSBpbiB0aGUgQ29udGVudC1UeXBlIGhlYWRlcjogIgotICAgICAgICAgICsgY2hhcnNldCk7Ci0gICAgICB9Ci0KLSAgICAgIFN0cmluZyBjaGFyc2V0VmFsdWUgPSBjaGFyc2V0LnN1YnN0cmluZygKLSAgICAgICAgY2hhcnNldC5pbmRleE9mKCI9IikgKyAxLCBjaGFyc2V0Lmxlbmd0aCgpKTsKLSAgICAgIGlmIChjaGFyc2V0VmFsdWUuc3RhcnRzV2l0aCgiXCIiKSkKLSAgICAgIHsKLSAgICAgICAgY2hhcnNldFZhbHVlID0gY2hhcnNldFZhbHVlLnN1YnN0cmluZygxLCBjaGFyc2V0VmFsdWUubGVuZ3RoKCkgLSAxKTsKLSAgICAgIH0KLQotICAgICAgaWYgKCFjaGFyc2V0VmFsdWUuZXF1YWxzSWdub3JlQ2FzZSgidXRmLTgiKQotICAgICAgICAgICYmICFjaGFyc2V0VmFsdWUuZXF1YWxzSWdub3JlQ2FzZSgidXRmLTE2IikpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgdmFsdWUgb2YgdGhlIFwiY2hhcnNldFwiICIKLSAgICAgICAgICArICJhdHRyaWJ1dGUgb2YgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXIgaXMgIiArIGNvbnRlbnRUeXBlKTsKLSAgICAgIH0KLSAgICAgIC8vIFBhcnNlIGxvZyBtZXNzYWdlCi0gICAgICAvL2dldHMgZmlyc3Qgc3RyaW5nCi0gICAgICBpbnQgaWR4ID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKS5pbmRleE9mKCI8P3htbCIpOwotICAgICAgaWYgKGlkeCA9PSAtMSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvblBhc3NFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgaW50IGlkeDIgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpLmluZGV4T2YoIj8+Iik7Ci0gICAgICBpZiAoaWR4MiA9PSAtMSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvblBhc3NFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgU3RyaW5nIHhtbERlY2xhcmF0aW9uID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKQotICAgICAgICAuc3Vic3RyaW5nKGlkeCwgaWR4MiArICI/PiIubGVuZ3RoKCkpOwotCi0gICAgICBpZHggPSB4bWxEZWNsYXJhdGlvbi5pbmRleE9mKCJlbmNvZGluZyIpOwotICAgICAgaWYgKGlkeCA9PSAtMSkKLSAgICAgIHsKLSAgICAgICAgaWYgKGNoYXJzZXRWYWx1ZS5lcXVhbHNJZ25vcmVDYXNlKCJ1dGYtOCIpKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbigpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGVyZSBpcyBubyBYTUwgZGVjbGFyYXRpb24gYW5kIHRoZSIKLSAgICAgICAgICAgICsgIiBjaGFyc2V0IHZhbHVlIGluIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyIGlzIG5vdCBVVEYtOC4iCi0gICAgICAgICAgICArICJcbkNoYXJzZXQgdmFsdWUgaW4gdGhlIENvbnRlbnQtVHlwZSBoZWFkZXI6ICIgKyBjaGFyc2V0VmFsdWUpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGludCBpZHhRID0geG1sRGVjbGFyYXRpb24uaW5kZXhPZignXCcnLCBpZHgpOwotICAgICAgaW50IGlkeFFRID0geG1sRGVjbGFyYXRpb24uaW5kZXhPZignXCInLCBpZHgpOwotICAgICAgaW50IGlkeFF1b3RlID0gLTE7Ci0gICAgICBjaGFyIHFvdXRlQ2ggPSAnXDAnOwotICAgICAgaWYgKGlkeFEgPT0gLTEpCi0gICAgICB7Ci0gICAgICAgIGlkeFF1b3RlID0gaWR4UVE7Ci0gICAgICAgIHFvdXRlQ2ggPSAnXCInOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBpZiAoaWR4UVEgPT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICBpZHhRdW90ZSA9IGlkeFE7Ci0gICAgICAgICAgcW91dGVDaCA9ICdcJyc7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKGlkeFFRIDwgaWR4USkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZHhRdW90ZSA9IGlkeFFROwotICAgICAgICAgICAgcW91dGVDaCA9ICdcIic7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZHhRdW90ZSA9IGlkeFE7Ci0gICAgICAgICAgICBxb3V0ZUNoID0gJ1wnJzsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgaWYgKGlkeFF1b3RlID09IC0xIHx8IHFvdXRlQ2ggPT0gJ1wwJykKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvblBhc3NFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgaW50IGlkeExRb3V0ZSA9IHhtbERlY2xhcmF0aW9uLmluZGV4T2YocW91dGVDaCwgaWR4UXVvdGUgKyAxKTsKLQotICAgICAgaWYgKGlkeExRb3V0ZSA9PSAtMSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvblBhc3NFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgU3RyaW5nIHhtbEVuY29kaW5nID0KLSAgICAgICAgeG1sRGVjbGFyYXRpb24uc3Vic3RyaW5nKGlkeFF1b3RlICsgMSwgaWR4TFFvdXRlKTsKLSAgICAgIGlmIChjaGFyc2V0VmFsdWUuZXF1YWxzSWdub3JlQ2FzZSh4bWxFbmNvZGluZykpCi0gICAgICB7Ci0gICAgICAgIC8vIElmIHRoZXJlIGlzIGEgQk9NLCB0aGVuIGNoZWNrIHRoYXQgaXQgaXMgdGhlIHNhbWUgYXMgdGhlIHhtbEVuY29kaW5nCi0gICAgICAgIGludCBib20gPSAwOwotICAgICAgICBpZiAoKGJvbSA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRCT00oKSkgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgIGlmICgoYm9tID09IFdTSUNvbnN0YW50cy5CT01fVVRGOAotICAgICAgICAgICAgJiYgIXhtbEVuY29kaW5nLmVxdWFsc0lnbm9yZUNhc2UoInV0Zi04IikpCi0gICAgICAgICAgICB8fCAoKGJvbSA9PSBXU0lDb25zdGFudHMuQk9NX1VURjE2Ci0gICAgICAgICAgICAgICYmICF4bWxFbmNvZGluZy5lcXVhbHNJZ25vcmVDYXNlKCJ1dGYtMTYiKSkpCi0gICAgICAgICAgICB8fCAoKGJvbSA9PSBXU0lDb25zdGFudHMuQk9NX1VURjE2X0JJR19FTkRJQU4KLSAgICAgICAgICAgICAgJiYgIXhtbEVuY29kaW5nLmVxdWFsc0lnbm9yZUNhc2UoInV0Zi0xNiIpKSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oCi0gICAgICAgICAgICAgICJUaGUgQk9NIGFuZCBYTUwgZGVjbGFyYXRpb24gZG8gbm90IG1hdGNoLiIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25QYXNzRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGVyZSBpcyBhbiBYTUwgZGVjbGFyYXRpb24sIGJ1dCBpdHMgIgotICAgICAgICAgICsgImVuY29kaW5nIHZhbHVlIGRvZXMgbm90IG1hdGNoIHRoZSBjaGFyc2V0IHZhbHVlLlxuIgotICAgICAgICAgICsgIkNoYXJzZXQgdmFsdWUgaW4gdGhlIENvbnRlbnQtVHlwZSBoZWFkZXI6ICIgKyBjaGFyc2V0VmFsdWUKLSAgICAgICAgICArICJcbkVuY29kaW5nIGluIHRoZSBYTUwgZGVjbGFyYXRpb246ICIgKyB4bWxFbmNvZGluZyk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25QYXNzRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGFuYWUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gYWZlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBhZmUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1NTQlA1MTAwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvU1NCUDUxMDAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjYyMTUyYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvU1NCUDUxMDAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci0KLQotLyoqCi0gKiBTU0JQNTEwMAotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIG1lc3NhZ2UgaW4gdGhlIGxvZyBmaWxlLCB3aXRoIGFuIEhUVFAgZW50aXR5LWJvZHkuPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSBTT0FQIGVudmVsb3BlIGlzIHRoZSBleGNsdXNpdmUgcGF5bG9hZCBvZiB0aGUgSFRUUCBlbnRpdHktYm9keS48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgU1NCUDUxMDAgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIHsKLQotICBwcm90ZWN0ZWQgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBTU0JQNTEwMChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdldHRpbmcgYSBtZXNzYWdlIGRvY3VtZW50Ci0gICAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLSAgICAgIAotICAgICAgLy8gSWYgdGhlIG1lc3NhZ2UgaXMgZW1wdHkgb3IgaW52YWxpZCwgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKGRvYyA9PSBudWxsKQotICAgICAgeyAKLSAgICAgIAlpZiAodGhpcy52YWxpZGF0b3IuaXNPbmVXYXlSZXNwb25zZShlbnRyeUNvbnRleHQpKQotICAgICAgCQkgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIAllbHNlCQotICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0gICAgICBpZiAoIWRvYy5nZXREb2N1bWVudEVsZW1lbnQoKS5nZXRMb2NhbE5hbWUoKS5lcXVhbHMoWE1MVXRpbHMuU09BUF9FTEVNX0VOVkVMT1BFKSkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gYWZlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgIHRlc3RBc3NlcnRpb24uZ2V0RmFpbHVyZU1lc3NhZ2UoKSwKLSAgICAgICAgICBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBhbmFlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1NTQlA1MTAxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvU1NCUDUxMDEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJhZTUyMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvU1NCUDUxMDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuSFRUUENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5IVFRQVXRpbHM7Ci0KLS8qKgotICogU1NCUDUxMDEKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBtZXNzYWdlIGluIHRoZSBsb2cgZmlsZS48L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+QSBtZXNzYWdlIG11c3QgaGF2ZSBhICJDb250ZW50LVR5cGUiIEhUVFAgaGVhZGVyIGZpZWxkLiAgVGhlICJDb250ZW50LVR5cGUiIEhUVFAgaGVhZGVyIGZpZWxkIG11c3QgaGF2ZSBhIGZpZWxkLXZhbHVlIHdob3NlIG1lZGlhIHR5cGUgaXMgInRleHQveG1sIi48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICogCi0gKiBAYXV0aG9yIGxhdXpvbmQKLSAqLwotcHVibGljIGNsYXNzIFNTQlA1MTAxIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcyB7Ci0KLSAgcHJvdGVjdGVkIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgU1NCUDUxMDEoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICAvLyBnZXR0aW5nIENvbnRlbnQtVHlwZSBIVFRQIGhlYWRlcgotICAgIFN0cmluZyBjb250ZW50VHlwZSA9IChTdHJpbmcpIEhUVFBVdGlscy5nZXRIdHRwSGVhZGVyVG9rZW5zKAotICAgICAgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldEhUVFBIZWFkZXJzKCksCi0gICAgICAiOiIpLmdldChIVFRQQ29uc3RhbnRzLkhFQURFUl9DT05URU5UX1RZUEUudG9VcHBlckNhc2UoKSk7Ci0KLSAgICAvLyBpZiBDb250ZW50LVR5cGUgaGVhZGVyIGlzIG5vdCBwcmVzZW50ZWQKLSAgICAvLyBvciBkb2VzIG5vdCBlcXVhbCB0byB0ZXh0L3htbCwgdGhlbiB0aGUgYXNzZXJ0aW9uIGlzIGZhaWxlZAotICAgIGlmIChjb250ZW50VHlwZSA9PSBudWxsCi0gICAgICB8fCAhY29udGVudFR5cGUuc3RhcnRzV2l0aChXU0lDb25zdGFudHMuQ09OVEVOVF9UWVBFX1RFWFRfWE1MKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgdGVzdEFzc2VydGlvbi5nZXRGYWlsdXJlTWVzc2FnZSgpLAotICAgICAgICBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICByZXR1cm4gdGhpcy52YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDAxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTAwMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzA2NmI1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDAxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci0KLS8qKgotICogV1NJMTAwMQotICovCi1wdWJsaWMgY2xhc3MgV1NJMTAwMSBleHRlbmRzIEJQMTAwMQotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMDAxKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDAyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTAwMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjQzMDhiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDAyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci0KLS8qKgotICogV1NJMTAwMgotICovCi1wdWJsaWMgY2xhc3MgV1NJMTAwMiBleHRlbmRzIEJQMTAwMgotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMDAyKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDAzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTAwMy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDA0MTA0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDAzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci0KLS8qKgotICogV1NJMTAwMwotICovCi1wdWJsaWMgY2xhc3MgV1NJMTAwMyBleHRlbmRzIFNTQlAxMDAzCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTEwMDMoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEwMDQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDA0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkZmFkODYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEwMDQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLQotLyoqCi0gKiBXU0kxMDA0Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMDA0IGV4dGVuZHMgQlAxMDA0Ci17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTEwMDQoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEwMDUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDA1LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzMWMwMDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEwMDUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZS5CUDEwMDU7Ci0KLS8qKgotICogV1NJMTAwNQotICovCi1wdWJsaWMgY2xhc3MgV1NJMTAwNSBleHRlbmRzIEJQMTAwNQotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMDA1KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDA2LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTAwNi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmQ2Zjg4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDA2LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci0KLS8qKgotICogV1NJMTAwNgotICovCi1wdWJsaWMgY2xhc3MgV1NJMTAwNiBleHRlbmRzIEJQMTAwNgotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMDA2KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDA3LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTAwNy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Mzg1YWFhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDA3LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGUuQlAxMDA3OwotCi0vKioKLSAqIFdTSTEwMDcKLSAqLwotcHVibGljIGNsYXNzIFdTSTEwMDcgZXh0ZW5kcyBCUDEwMDcKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTAwNyhCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTAwOC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEwMDguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJjZDBlZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTAwOC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlLkJQMTAwODsKLQotLyoqCi0gKiBXU0kxMDA4Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMDA4IGV4dGVuZHMgQlAxMDA4Ci17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTEwMDgoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEwMDkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDA5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViNjhlYmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEwMDkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZS5CUDEwMDk7Ci0KLS8qKgotICogV1NJMTAwOQotICovCi1wdWJsaWMgY2xhc3MgV1NJMTAwOSBleHRlbmRzIEJQMTAwOQotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMDA5KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDEwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTAxMC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjJkOTg2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDEwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci0KLS8qKgotICogV1NJMTAxMAotICovCi1wdWJsaWMgY2xhc3MgV1NJMTAxMCBleHRlbmRzIEJQMTAxMAotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMDEwKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDExLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTAxMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYWRjZGNiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDExLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGUuQlAxMDExOwotCi0vKioKLSAqIFdTSTEwMTEKLSAqLwotcHVibGljIGNsYXNzIFdTSTEwMTEgZXh0ZW5kcyBCUDEwMTEKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTAxMShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTAxMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEwMTIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTdmNTcxYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTAxMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlLkJQMTAxMjsKLQotLyoqCi0gKiBXU0kxMDEyCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMDEyIGV4dGVuZHMgQlAxMDEyCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTEwMTIoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEwMTMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDEzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4N2U1OTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEwMTMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZS5CUDEwMTM7Ci0KLS8qKgotICogV1NJMTAxMwotICovCi1wdWJsaWMgY2xhc3MgV1NJMTAxMyBleHRlbmRzIEJQMTAxMwotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMDEzKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDMxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTAzMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkY2QzOTE3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMDMxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGUuQlAxMDMxOwotCi0vKioKLSAqIFdTSTEwMzEKLSAqLwotcHVibGljIGNsYXNzIFdTSTEwMzEgZXh0ZW5kcyBCUDEwMzEKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTAzMShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTEwMC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTExMDAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGMyMGEwNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTEwMC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlLkJQMTEwMDsKLQotLyoqCi0gKiBXU0kxMTAwCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMTAwIGV4dGVuZHMgQlAxMTAwCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTExMDAoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTExMDEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMTAxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiYjExM2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTExMDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLQotLyoqCi0gKiBXU0kxMTAxCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMTAxIGV4dGVuZHMgQlAxMTAxCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTExMDEoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTExMDIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMTAyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxMzgzMmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTExMDIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgamF2YS5pby5TdHJpbmdSZWFkZXI7Ci0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXI7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5IVFRQQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkhUVFBVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5IdHRwSGVhZGVyc1ZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5VdGlsczsKLWltcG9ydCBvcmcueG1sLnNheC5JbnB1dFNvdXJjZTsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci0KLQotLyoqCi0gKiBCUFdTSTQuCi0gKiBUaGUgcmVxdWVzdCBtZXNzYWdlIHNob3VsZCBiZSBpbnZhbGlkIChIVFRQIHJlcXVlc3QgbWFsZm9ybWVkLCAKLSAqIFhNTCBub3Qgd2VsbCBmb3JtZWQsIC4uLikuCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMTAyIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTEwMihCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICBTdHJpbmcgaHR0cEhlYWRlciA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRIVFRQSGVhZGVycygpOwotCi0gICAgU3RyaW5nIHJlcXVlc3RNZXNzYWdlID0gbnVsbDsKLSAgICAvL1N0cmluZyByZXNwb25zZU1lc3NhZ2UgPSBudWxsOwotICAgIFN0cmluZyBjb250ZW50VHlwZSA9IG51bGw7Ci0gICAgcmVzdWx0ID0gbnVsbDsKLSAgICAvLwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gY2hlY2sgSFRUUCBzdGF0dXMgY29kZQotICAgICAgU3RyaW5nIGh0dHBTdGF0dXMgPQotICAgICAgICBVdGlscy5nZXRIVFRQU3RhdHVzQ29kZSgKLSAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0SFRUUEhlYWRlcnMoKSk7Ci0gICAgICBpZiAoIjQwMCIuZXF1YWxzKGh0dHBTdGF0dXMpKQotICAgICAgewotCi0gICAgICAgIHJlcXVlc3RNZXNzYWdlID0gZW50cnlDb250ZXh0LmdldFJlcXVlc3QoKS5nZXRNZXNzYWdlKCk7Ci0KLSAgICAgICAgU3RyaW5nIHJlcXVlc3RIVFRQSGVhZGVycyA9Ci0gICAgICAgICAgZW50cnlDb250ZXh0LmdldFJlcXVlc3QoKS5nZXRIVFRQSGVhZGVycygpOwotCi0gICAgICAgIC8vY2hlY2sgcmVxdWVzdCBIVFRQIEhlYWRlcnMKLQotICAgICAgICAvL0h0dHBIZWFkZXJzVmFsaWRhdG9yIHZhbGlkYXRvciA9IG5ldyBIdHRwSGVhZGVyc1ZhbGlkYXRvcigpOwotCi0gICAgICAgIGlmICghSHR0cEhlYWRlcnNWYWxpZGF0b3IKLSAgICAgICAgICAudmFsaWRhdGVIdHRwUmVxdWVzdEhlYWRlcnMocmVxdWVzdEhUVFBIZWFkZXJzKSkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgICAgICB9Ci0KLSAgICAgICAgLy9jaGVjayByZXF1ZXN0IHhtbCBtZXNzYWdlCi0KLSAgICAgICAgY29udGVudFR5cGUgPSAoU3RyaW5nKSBIVFRQVXRpbHMuZ2V0SHR0cEhlYWRlclRva2VucyhodHRwSGVhZGVyLCAiOiIpCi0gICAgICAgICAuZ2V0KEhUVFBDb25zdGFudHMuSEVBREVSX0NPTlRFTlRfVFlQRS50b1VwcGVyQ2FzZSgpKTsKLSAgICAgICAgaWYgKGNvbnRlbnRUeXBlLmluZGV4T2YoV1NJQ29uc3RhbnRzLkNPTlRFTlRfVFlQRV9URVhUX1hNTCkgIT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocmVxdWVzdE1lc3NhZ2UgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBmYWN0b3J5ID0KLSAgICAgICAgICAgICAgICBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0gICAgICAgICAgICAgIERvY3VtZW50QnVpbGRlciBidWlsZGVyID0gZmFjdG9yeS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKLSAgICAgICAgICAgICAgLy9Eb2N1bWVudCBkb2MgPSBidWlsZGVyLnBhcnNlKG5ldyBJbnB1dFNvdXJjZShuZXcgU3RyaW5nUmVhZGVyKHJlcXVlc3RNZXNzYWdlKSkpOwotICAgICAgICAgICAgICBidWlsZGVyLnBhcnNlKAotICAgICAgICAgICAgICAgIG5ldyBJbnB1dFNvdXJjZShuZXcgU3RyaW5nUmVhZGVyKHJlcXVlc3RNZXNzYWdlKSkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoIChTQVhFeGNlcHRpb24gZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG5ldyBXU0lFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCksIGUpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfV0FSTklORzsKLSAgICAgICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgICAgICJcblJlcXVlc3QgbWVzc2FnZTpcbkhlYWRlcnM6XG4iCi0gICAgICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdCgpLmdldEhUVFBIZWFkZXJzKCkKLSAgICAgICAgICAgICAgICArICJNZXNzYWdlOlxuIgotICAgICAgICAgICAgICAgICsgZW50cnlDb250ZXh0LmdldFJlcXVlc3QoKS5nZXRNZXNzYWdlKCkKLSAgICAgICAgICAgICAgICArICJcblxuUmVzcG9uc2UgbWVzc2FnZTpcbkhlYWRlcnM6XG4iCi0gICAgICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0UmVzcG9uc2UoKS5nZXRIVFRQSGVhZGVycygpCi0gICAgICAgICAgICAgICAgKyAiTWVzc2FnZTpcbiIKLSAgICAgICAgICAgICAgICArIGVudHJ5Q29udGV4dC5nZXRSZXNwb25zZSgpLmdldE1lc3NhZ2UoKSwKLSAgICAgICAgICAgICAgZW50cnlDb250ZXh0KTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoV1NJRXhjZXB0aW9uIHdzaWUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTEwMy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTExMDMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjI0NjUyOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTEwMy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotCi0vKioKLSAqIFdTSTExMDMKLSAqLwotcHVibGljIGNsYXNzIFdTSTExMDMgZXh0ZW5kcyBCUDExMDMKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTEwMyhCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTEwNC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTExMDQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDIyZTQ2ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTEwNC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotCi0vKioKLSAqIFdTSTExMDQuCi0gKiBUaGUgcmVxdWVzdCBtZXNzYWdlIHNob3VsZCBub3QgY29udGFpbiBhIGNvbnRlbnQtdHlwZSBvZiAidGV4dC94bWwiLgotICovCi1wdWJsaWMgY2xhc3MgV1NJMTEwNCBleHRlbmRzIEJQMTEwNAotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMTA0KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTExMDUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMTA1LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkMWEzYmMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTExMDUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5IVFRQVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuU2V0Q29va2llMlZhbGlkYXRvcjsKLQotCi0vKioKLSAqIEJQV1NJNC4KLSAqIFRoZSBDb29raWVzIHNob3VsZCBjb25mb3JtIHRvIFJGQzI5NjUuCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMTA1IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTEwNShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShUZXN0QXNzZXJ0aW9uLCBFbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgU2V0Q29va2llMlZhbGlkYXRvciBjb29raWVWYWwgPSBuZXcgU2V0Q29va2llMlZhbGlkYXRvcigpOwotICAgIFN0cmluZyBoZWFkZXJzID0gZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldEhUVFBIZWFkZXJzKCk7Ci0gICAgaWYgKGVudHJ5Q29udGV4dAotICAgICAgLmdldE1lc3NhZ2VFbnRyeSgpCi0gICAgICAuZ2V0VHlwZSgpCi0gICAgICAuZXF1YWxzSWdub3JlQ2FzZShNZXNzYWdlRW50cnkuVFlQRV9SRVNQT05TRSkpCi0gICAgewotICAgICAgLy8gaWYgcmVzcG9uc2UgdHJvbSBzZXJ2ZXIKLSAgICAgIFN0cmluZyBzZXRDb29raWUyID0KLSAgICAgICAgKFN0cmluZykgSFRUUFV0aWxzLmdldEh0dHBIZWFkZXJUb2tlbnMoaGVhZGVycywgIjoiKS5nZXQoIlNldC1Db29raWUyIi50b1VwcGVyQ2FzZSgpKTsKLSAgICAgIGlmIChzZXRDb29raWUyID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGlmIChjb29raWVWYWwuaXNTZXRDb29raWUyKHNldENvb2tpZTIudHJpbSgpKSkKLSAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9XQVJOSU5HOwotICAgICAgICAgIGZhaWx1cmVEZXRhaWwgPQotICAgICAgICAgICAgdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgICAgICAgIlxuTWVzc2FnZTpcbkhlYWRlcnM6XG4iCi0gICAgICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0SFRUUEhlYWRlcnMoKQotICAgICAgICAgICAgICAgICsgIlxuU09BUCBtZXNzYWdlOlxuIgotICAgICAgICAgICAgICAgICsgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKSwKLSAgICAgICAgICAgICAgZW50cnlDb250ZXh0KTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gaWYgcmVxdWVzdCB0byB0aGUgc2VydmVyCi0gICAgICBTdHJpbmcgY29va2llID0KLSAgICAgICAgKFN0cmluZykgSFRUUFV0aWxzLmdldEh0dHBIZWFkZXJUb2tlbnMoaGVhZGVycywgIjoiKS5nZXQoIkNvb2tpZSIpOwotICAgICAgaWYgKGNvb2tpZSA9PSBudWxsKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBpZiAoY29va2llVmFsLmlzQ29va2llKGNvb2tpZS50cmltKCkpKQotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1dBUk5JTkc7Ci0gICAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgICAiXG5NZXNzYWdlOlxuSGVhZGVyczpcbiIKLSAgICAgICAgICAgICAgICArIGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRIVFRQSGVhZGVycygpCi0gICAgICAgICAgICAgICAgKyAiXG5TT0FQIG1lc3NhZ2U6XG4iCi0gICAgICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpLAotICAgICAgICAgICAgICBlbnRyeUNvbnRleHQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMTA3LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTEwNy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTkxM2U1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMTA3LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGUuQlAxMTA3OwotCi0vKioKLSAqIFdTSTExMDcKLSAqLwotcHVibGljIGNsYXNzIFdTSTExMDcgZXh0ZW5kcyBCUDExMDcKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTEwNyhCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTEwOC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTExMDguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTUyMzZlNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTEwOC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDE1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHk7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXI7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0OwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1lc3NhZ2VFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuTnVsbFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuT3BlcmF0aW9uU2lnbmF0dXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlR5cGVzUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuV1NETFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIEJQV1NJNC4KLSAqIEVhY2ggc29hcGJpbmQgZXh0ZW5zaW9uIGVsZW1lbnQgd2l0aCBhIHdzZGw6cmVxdWlyZWQgCi0gKiBhdHRyaWJ1dGUgb2YgZmFsc2UgbXVzdCBhcHBlYXIgaW4gYSBtZXNzYWdlLgotICovCi1wdWJsaWMgY2xhc3MgV1NJMTEwOCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3NWaXNpdG9yIGltcGxlbWVudHMgV1NJVGFnCi17Ci0KLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTExMDgoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHByaXZhdGUgT3BlcmF0aW9uU2lnbmF0dXJlLk9wZXJhdGlvbk1hdGNoIG1hdGNoID0gbnVsbDsKLSAgcHJpdmF0ZSBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0ID0gbnVsbDsKLSAgcHJpdmF0ZSBPcGVyYXRpb25TaWduYXR1cmUgcmVzcG9uc2VTaWcgPSBudWxsOwotICBwcml2YXRlIFZlY3RvciBoZWFkZXJSYXJ0cyA9IG51bGw7Ci0gIHByaXZhdGUgYm9vbGVhbiB2aXNpdEZhdWx0ID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiBleGlzdFNPQVBIZWFkZXIgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gaXNSZXF1ZXN0ID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiBleGlzdFNPQVBIZWFkZXJGYXVsdCA9IHRydWU7Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChTT0FQQm9keSwgT2JqZWN0LCBXU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KFNPQVBCb2R5IGJvZHksIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotCi0gICAgLy8gaWYgIndzZGw6cmVxdWlyZWQiIGlzIHRydWUgdGhlbiByZXR1cm4KLSAgICBpZiAoYm9keS5nZXRSZXF1aXJlZCgpICE9IG51bGwKLSAgICAgICYmIGJvZHkuZ2V0UmVxdWlyZWQoKS5ib29sZWFuVmFsdWUoKSA9PSB0cnVlKQotICAgICAgcmV0dXJuOwotCi0gICAgLy8gYXNzZXJ0IHBhcmVudCBpbnN0YW5jZW9mIEJpbmRpbmdPdXRwdXQKLSAgICBCaW5kaW5nT3BlcmF0aW9uIGJvcCA9IGN0eC5nZXRCaW5kaW5nT3BlcmF0aW9uKCk7Ci0gICAgaWYgKGJvcC5nZXRPcGVyYXRpb24oKSA9PSBudWxsCi0gICAgICB8fCBib3AuZ2V0T3BlcmF0aW9uKCkuZ2V0T3V0cHV0KCkgPT0gbnVsbAotICAgICAgfHwgYm9wLmdldE9wZXJhdGlvbigpLmdldE91dHB1dCgpLmdldE1lc3NhZ2UoKSA9PSBudWxsKQotICAgICAgcmV0dXJuOwotICAgIE1lc3NhZ2UgbXNnID0gYm9wLmdldE9wZXJhdGlvbigpLmdldE91dHB1dCgpLmdldE1lc3NhZ2UoKTsKLSAgICBMaXN0IHBhcnRzID0KLSAgICAgIFdTRExVdGlsLmdldFBhcnRzKAotICAgICAgICBib3AuZ2V0T3BlcmF0aW9uKCksCi0gICAgICAgIG1zZywKLSAgICAgICAgYm9keSwKLSAgICAgICAgbWF0Y2guZ2V0T3BlcmF0aW9uU3R5bGUoKSk7Ci0KLSAgICBRTmFtZSBhZGRpdGlvbmFsTmFtZSA9IG51bGw7Ci0gICAgLy8gaWYgb3BlcmF0aW9uIGlzIHJwYywgYWRkIHRvIHBhcnRzIHFuYW1lIHFpdGggZnVuY3Rpb24gbmFtZQotICAgIGlmIChXU0lDb25zdGFudHMKLSAgICAgIC5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9SUEMKLSAgICAgIC5lcXVhbHMobWF0Y2guZ2V0T3BlcmF0aW9uU3R5bGUoKSkpCi0gICAgewotICAgICAgLy8gZm91bmQgb3V0IHRhcmdldCBuYW1lc3BhY2UKLSAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBib2R5LmdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgaWYgKG5hbWVzcGFjZSA9PSBudWxsIHx8IG5hbWVzcGFjZS5sZW5ndGgoKSA9PSAwKQotICAgICAgICAvLyAhISBBVFRFTlRJT04KLSAgICAgICAgLy8gbmFtZXNwYWNlIHNob3VsZCBiZSByZXRyaWV2ZWQgZnJvbSBzZXJ2aWNlIHRhcmdldCBuYW1lYXBjZSAgICAgICAgICAgIAotICAgICAgICBuYW1lc3BhY2UgPSBjdHguZ2V0QmluZGluZygpLmdldFFOYW1lKCkuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0KLSAgICAgIC8vIGluc2VydCBvcGVyYXRpb24gbmFtZSBhcyBmaXJzdCBzaWduYXR1cmUgcGFydAotICAgICAgYWRkaXRpb25hbE5hbWUgPQotICAgICAgICBuZXcgUU5hbWUoCi0gICAgICAgICAgbmFtZXNwYWNlLAotICAgICAgICAgIGJvcAotICAgICAgICAgICAgLmdldE9wZXJhdGlvbigpCi0gICAgICAgICAgICAuZ2V0T3V0cHV0KCkKLSAgICAgICAgICAgIC5nZXRNZXNzYWdlKCkKLSAgICAgICAgICAgIC5nZXRRTmFtZSgpCi0gICAgICAgICAgICAuZ2V0TG9jYWxQYXJ0KCkpOwotICAgIH0KLQotICAgIC8vIGNyZWF0ZSB0aGUgc2lnbmF0dXJlIG9mIHRoaXMgb3BlcmF0aW9uCi0gICAgT3BlcmF0aW9uU2lnbmF0dXJlIG9wID0KLSAgICAgIG5ldyBPcGVyYXRpb25TaWduYXR1cmUoCi0gICAgICAgIHBhcnRzLAotICAgICAgICBudWxsLAotICAgICAgICBuZXcgVHlwZXNSZWdpc3RyeSgKLSAgICAgICAgICAgIHZhbGlkYXRvci5hbmFseXplckNvbnRleHQKLSAgICAgICAgICAgIC5nZXRDYW5kaWRhdGVJbmZvKCkKLSAgICAgICAgICAgIC5nZXRXc2RsRG9jdW1lbnQoKQotICAgICAgICAgICAgLmdldERlZmluaXRpb25zKCksCi0gICAgICAgICAgICB2YWxpZGF0b3IpLAotICAgICAgICBmYWxzZSk7Ci0gICAgaWYgKGFkZGl0aW9uYWxOYW1lICE9IG51bGwpCi0gICAgICBvcC5nZXRTaWduYXR1cmUoKS5hZGQoMCwgYWRkaXRpb25hbE5hbWUpOwotCi0gICAgaWYgKG9wLmdldFNpZ25hdHVyZSgpLmVxdWFscyhyZXNwb25zZVNpZy5nZXRTaWduYXR1cmUoKSkpCi0gICAgewotICAgICAgLy8gICAgICAgICAgICBjdHguY2FuY2VsQmluZGluZ09wZXJhdGlvblByb2Nlc3NpbmcoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIGNyZWF0ZSB0aGUgc2lnbmF0dXJlIG9mIHRoaXMgb3BlcmF0aW9uCi0gICAgICBvcCA9Ci0gICAgICAgIG5ldyBPcGVyYXRpb25TaWduYXR1cmUoCi0gICAgICAgICAgcGFydHMsCi0gICAgICAgICAgbnVsbCwKLSAgICAgICAgICBuZXcgVHlwZXNSZWdpc3RyeSgKLSAgICAgICAgICAgICAgdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dAotICAgICAgICAgICAgICAuZ2V0Q2FuZGlkYXRlSW5mbygpCi0gICAgICAgICAgICAgIC5nZXRXc2RsRG9jdW1lbnQoKQotICAgICAgICAgICAgICAuZ2V0RGVmaW5pdGlvbnMoKSwKLSAgICAgICAgICAgICAgdmFsaWRhdG9yKSwKLSAgICAgICAgICB0cnVlKTsKLQotICAgICAgaWYgKGFkZGl0aW9uYWxOYW1lICE9IG51bGwpCi0gICAgICAgIG9wLmdldFNpZ25hdHVyZSgpLmFkZCgwLCBhZGRpdGlvbmFsTmFtZSk7Ci0gICAgICBpZiAob3AuZ2V0U2lnbmF0dXJlKCkuZXF1YWxzKHJlc3BvbnNlU2lnLmdldFNpZ25hdHVyZSgpKSkKLSAgICAgIHsKLSAgICAgICAgLy8gICAgICAgICAgICAgIGN0eC5jYW5jZWxCaW5kaW5nT3BlcmF0aW9uUHJvY2Vzc2luZygpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgICAgICJcbk1lc3NhZ2U6XG4iICsgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKSwKLSAgICAgICAgICAgIGVudHJ5Q29udGV4dCk7Ci0gICAgICAgIGN0eC5jYW5jZWxCaW5kaW5nT3BlcmF0aW9uUHJvY2Vzc2luZygpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXIsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBTT0FQSGVhZGVyIGhlYWRlciwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotCi0gICAgaWYgKGV4aXN0U09BUEhlYWRlckZhdWx0ID09IGZhbHNlKQotICAgIHsKLSAgICAgIGV4aXN0U09BUEhlYWRlciA9IGZhbHNlOwotICAgICAgY3R4LmNhbmNlbEJpbmRpbmdPcGVyYXRpb25Qcm9jZXNzaW5nKCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIGlmICJ3c2RsOnJlcXVpcmVkIiBpcyB0cnVlIHRoZW4gcmV0dXJuCi0gICAgaWYgKGhlYWRlci5nZXRSZXF1aXJlZCgpICE9IG51bGwKLSAgICAgICYmIGhlYWRlci5nZXRSZXF1aXJlZCgpLmJvb2xlYW5WYWx1ZSgpID09IHRydWUpCi0gICAgICByZXR1cm47Ci0gICAgLy8gZmluZCBoZWFkciBwYXJ0Ci0gICAgRGVmaW5pdGlvbiBkID0gKERlZmluaXRpb24pIGN0eC5nZXRQYXJhbWV0ZXIoImRlZmluaXRpb24iKTsKLSAgICBUeXBlc1JlZ2lzdHJ5IHRSZWcgPSAoVHlwZXNSZWdpc3RyeSkgY3R4LmdldFBhcmFtZXRlcigiVHlwZXNSZWdpc3RyeSIpOwotICAgIFBhcnQgbWVzUGFydCA9Ci0gICAgICBXU0RMVXRpbC5nZXRQYXJ0KGQuZ2V0TWVzc2FnZShoZWFkZXIuZ2V0TWVzc2FnZSgpKSwgaGVhZGVyLmdldFBhcnQoKSk7Ci0KLSAgICAvLyB0ZXN0IHRoaXMgcGFydCBhbmQgcGFydHMgZnJvbSBoZWFkZXIgICAgICAgIAotICAgIFFOYW1lIHBhcnRRTmFtZSA9IG1lc1BhcnQuZ2V0VHlwZU5hbWUoKTsKLSAgICBpZiAocGFydFFOYW1lID09IG51bGwpCi0gICAgICBwYXJ0UU5hbWUgPSB0UmVnLmdldFR5cGUobWVzUGFydC5nZXRFbGVtZW50TmFtZSgpKTsKLSAgICBpZiAocGFydFFOYW1lID09IG51bGwpCi0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICAiUGFydCB0eXBlIGNhbiBub3QgYmUgbnVsbC4iICsgbWVzUGFydC5nZXRFbGVtZW50TmFtZSgpLnRvU3RyaW5nKCkpOwotICAgIFN0cmluZyBsb2NhbCA9IHBhcnRRTmFtZS5nZXRMb2NhbFBhcnQoKTsKLSAgICBTdHJpbmcgbnMgPSBwYXJ0UU5hbWUuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0KLSAgICBleGlzdFNPQVBIZWFkZXIgPSBmYWxzZTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGhlYWRlclJhcnRzLnNpemUoKTsgaSsrKQotICAgIHsKLSAgICAgIEVsZW1lbnQgZWxlbSA9IChFbGVtZW50KSBoZWFkZXJSYXJ0cy5nZXQoaSk7Ci0gICAgICBpZiAoZWxlbS5nZXRMb2NhbE5hbWUoKS5lcXVhbHMobG9jYWwpCi0gICAgICAgICYmIE51bGxVdGlsLmVxdWFscyhucywgZWxlbS5nZXROYW1lc3BhY2VVUkkoKSkpCi0gICAgICB7Ci0gICAgICAgIGV4aXN0U09BUEhlYWRlciA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICBpZiAoZXhpc3RTT0FQSGVhZGVyID09IHRydWUpCi0gICAgICBjdHguY2FuY2VsU09BUEhlYWRlclByb2Nlc3NpbmcoKTsKLSAgICBpZiAoaXNSZXF1ZXN0ID09IHRydWUpCi0gICAgICBjdHguY2FuY2VsQmluZGluZ09wZXJhdGlvblByb2Nlc3NpbmcoKTsKLSAgICBpZiAoZXhpc3RTT0FQSGVhZGVyID09IGZhbHNlICYmIGlzUmVxdWVzdCA9PSBmYWxzZSkKLSAgICAgIGV4aXN0U09BUEhlYWRlckZhdWx0ID0gZmFsc2U7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyRmF1bHQsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBTT0FQSGVhZGVyRmF1bHQgaGVhZGVyRmF1bHQsCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICAvLyBmaW5kIGhlYWRyIHBhcnQKLSAgICBEZWZpbml0aW9uIGQgPSAoRGVmaW5pdGlvbikgY3R4LmdldFBhcmFtZXRlcigiZGVmaW5pdGlvbiIpOwotICAgIFR5cGVzUmVnaXN0cnkgdFJlZyA9IChUeXBlc1JlZ2lzdHJ5KSBjdHguZ2V0UGFyYW1ldGVyKCJUeXBlc1JlZ2lzdHJ5Iik7Ci0gICAgUGFydCBtZXNQYXJ0ID0KLSAgICAgIFdTRExVdGlsLmdldFBhcnQoCi0gICAgICAgIGQuZ2V0TWVzc2FnZShoZWFkZXJGYXVsdC5nZXRNZXNzYWdlKCkpLAotICAgICAgICBoZWFkZXJGYXVsdC5nZXRQYXJ0KCkpOwotCi0gICAgLy8gdGVzdCB0aGlzIHBhcnQgYW5kIHBhcnRzIGZyb20gaGVhZGVyZmF1bHQKLSAgICBRTmFtZSBwYXJ0UU5hbWUgPSBtZXNQYXJ0LmdldFR5cGVOYW1lKCk7Ci0gICAgaWYgKHBhcnRRTmFtZSA9PSBudWxsKQotICAgICAgcGFydFFOYW1lID0gdFJlZy5nZXRUeXBlKG1lc1BhcnQuZ2V0RWxlbWVudE5hbWUoKSk7Ci0gICAgaWYgKHBhcnRRTmFtZSA9PSBudWxsKQotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgIlBhcnQgdHlwZSBjYW4gbm90IGJlIG51bGwuIiArIG1lc1BhcnQuZ2V0RWxlbWVudE5hbWUoKS50b1N0cmluZygpKTsKLSAgICBTdHJpbmcgbG9jYWwgPSBwYXJ0UU5hbWUuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgU3RyaW5nIG5zID0gcGFydFFOYW1lLmdldE5hbWVzcGFjZVVSSSgpOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBoZWFkZXJSYXJ0cy5zaXplKCk7IGkrKykKLSAgICB7Ci0gICAgICBFbGVtZW50IGVsZW0gPSAoRWxlbWVudCkgaGVhZGVyUmFydHMuZ2V0KGkpOwotICAgICAgaWYgKGVsZW0uZ2V0TG9jYWxOYW1lKCkuZXF1YWxzKGxvY2FsKQotICAgICAgICAmJiBOdWxsVXRpbC5lcXVhbHMobnMsIGVsZW0uZ2V0TmFtZXNwYWNlVVJJKCkpKQotICAgICAgewotICAgICAgICBleGlzdFNPQVBIZWFkZXJGYXVsdCA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICBpZiAoZXhpc3RTT0FQSGVhZGVyRmF1bHQgPT0gdHJ1ZSkKLSAgICAgIGN0eC5jYW5jZWxTT0FQSGVhZGVyUHJvY2Vzc2luZygpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoU09BUEZhdWx0IGZhdWx0LCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICAvLyBzZXQgaW4gdHJ1ZSBpZiBhbnkgU09BUEZhdWx0IGV4aXN0Ci0gICAgdmlzaXRGYXVsdCA9IHRydWU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIGlmICh0aGlzLnZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHRoaXMuZW50cnlDb250ZXh0ID0gZW50cnlDb250ZXh0OwotICAgICAgLy8gUGFyc2UgcmVxdWVzdCBtZXNzYWdlCi0gICAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdERvY3VtZW50KCk7Ci0gICAgICAvLyBjcmVhdGUgcmVxdWVzdCBzaWduYXR1cmUKLSAgICAgIG1hdGNoID0KLSAgICAgICAgT3BlcmF0aW9uU2lnbmF0dXJlLm1hdGNoT3BlcmF0aW9uKAotICAgICAgICAgIGRvYywKLSAgICAgICAgICBudWxsLAotICAgICAgICAgIHZhbGlkYXRvci5hbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldEJpbmRpbmdzKClbMF0sCi0gICAgICAgICAgbmV3IFR5cGVzUmVnaXN0cnkoCi0gICAgICAgICAgICAgIHZhbGlkYXRvci5hbmFseXplckNvbnRleHQKLSAgICAgICAgICAgICAgLmdldENhbmRpZGF0ZUluZm8oKQotICAgICAgICAgICAgICAuZ2V0V3NkbERvY3VtZW50KCkKLSAgICAgICAgICAgICAgLmdldERlZmluaXRpb25zKCksCi0gICAgICAgICAgICAgIHZhbGlkYXRvciksCi0gICAgICAgICAgZmFsc2UpOwotCi0gICAgICAvLyBpZiBzdWNoIG9wZXJhdGlvbiBleGlzdCAgICAgIAotICAgICAgaWYgKG1hdGNoICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGlzUmVxdWVzdCA9Ci0gICAgICAgICAgTWVzc2FnZUVudHJ5LlRZUEVfUkVRVUVTVC5lcXVhbHMoCi0gICAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0VHlwZSgpKTsKLSAgICAgICAgLy8gUGFyc2UgbWVzc2FnZQotICAgICAgICBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLQotICAgICAgICBpZiAoIWlzUmVxdWVzdCkKLSAgICAgICAgewotICAgICAgICAgIHJlc3BvbnNlU2lnID0gbmV3IE9wZXJhdGlvblNpZ25hdHVyZShkb2MpOwotICAgICAgICAgIGlmIChXU0lDb25zdGFudHMKLSAgICAgICAgICAgIC5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9SUEMKLSAgICAgICAgICAgIC5lcXVhbHMobWF0Y2guZ2V0T3BlcmF0aW9uU3R5bGUoKSkpCi0gICAgICAgICAgICByZXNwb25zZVNpZy5jcmVhdGVSUENTaWduYXR1cmUoKTsKLSAgICAgICAgfQotICAgICAgICAvLyBleHRyYWN0IGFsbCBoZWFkZXJzIGZyb20gbWVzc2FnZQotICAgICAgICBFbGVtZW50IGhlYWRlckVsZW0gPQotICAgICAgICAgIFhNTFV0aWxzLmZpbmRDaGlsZEVsZW1lbnQoCi0gICAgICAgICAgICBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCksCi0gICAgICAgICAgICBXU0lUYWcuRUxFTV9TT0FQX0hFQURFUik7Ci0gICAgICAgIGhlYWRlclJhcnRzID0gbmV3IFZlY3RvcigpOwotICAgICAgICBpZiAoaGVhZGVyRWxlbSAhPSBudWxsKQotICAgICAgICAgIGhlYWRlclJhcnRzID0gWE1MVXRpbHMuZ2V0Q2hpbGRFbGVtZW50cyhoZWFkZXJFbGVtKTsKLQotICAgICAgICBXU0RMVHJhdmVyc2FsIHRyYXZlcnNhbCA9IG5ldyBXU0RMVHJhdmVyc2FsKCk7Ci0gICAgICAgIC8vVmlzaXRvckFkYXB0b3IuYWRhcHQodGhpcyk7Ci0gICAgICAgIHRyYXZlcnNhbC5zZXRWaXNpdG9yKHRoaXMpOwotICAgICAgICB0cmF2ZXJzYWwudmlzaXRTT0FQQm9keSh0cnVlKTsKLSAgICAgICAgdHJhdmVyc2FsLnZpc2l0U09BUEhlYWRlcih0cnVlKTsKLSAgICAgICAgdHJhdmVyc2FsLnZpc2l0U09BUEhlYWRlckZhdWx0KHRydWUpOwotICAgICAgICB0cmF2ZXJzYWwudmlzaXRTT0FQRmF1bHQodHJ1ZSk7Ci0KLSAgICAgICAgdHJhdmVyc2FsLmlnbm9yZVJlZmVyZW5jZXMoKTsKLSAgICAgICAgdHJhdmVyc2FsLmlnbm9yZUJpbmRpbmdJbnB1dDJTT0FQQm9keSgpOwotCi0gICAgICAgIGlmIChpc1JlcXVlc3QpCi0gICAgICAgICAgdHJhdmVyc2FsLmlnbm9yZUJpbmRpbmdPdXRwdXQoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHRyYXZlcnNhbC5pZ25vcmVCaW5kaW5nSW5wdXQyU09BUEhlYWRlcigpOwotCi0gICAgICAgIGlmIChyZXNwb25zZVNpZyAhPSBudWxsICYmIHJlc3BvbnNlU2lnLmlzRmF1bHQoKSkKLSAgICAgICAgICB0cmF2ZXJzYWwuaWdub3JlQmluZGluZ091dHB1dCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgdHJhdmVyc2FsLmlnbm9yZUJpbmRpbmdGYXVsdCgpOwotCi0gICAgICAgIGV4aXN0U09BUEhlYWRlckZhdWx0ID0gdHJ1ZTsKLSAgICAgICAgTWFwIG0gPSBuZXcgSGFzaE1hcCgpOwotICAgICAgICBXU0RMVXRpbC5leHBhbmREZWZpbml0aW9uKAotICAgICAgICAgICAgdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dAotICAgICAgICAgICAgLmdldENhbmRpZGF0ZUluZm8oKQotICAgICAgICAgICAgLmdldFdzZGxEb2N1bWVudCgpCi0gICAgICAgICAgICAuZ2V0RGVmaW5pdGlvbnMoKSk7Ci0gICAgICAgIG0ucHV0KAotICAgICAgICAgICJkZWZpbml0aW9uIiwKLSAgICAgICAgICB2YWxpZGF0b3IuYW5hbHl6ZXJDb250ZXh0Ci0gICAgICAgICAgICAuZ2V0Q2FuZGlkYXRlSW5mbygpCi0gICAgICAgICAgICAuZ2V0V3NkbERvY3VtZW50KCkKLSAgICAgICAgICAgIC5nZXREZWZpbml0aW9ucygpKTsKLSAgICAgICAgVHlwZXNSZWdpc3RyeSB0UmVnID0KLSAgICAgICAgICBuZXcgVHlwZXNSZWdpc3RyeSgKLSAgICAgICAgICAgICAgdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dAotICAgICAgICAgICAgICAuZ2V0Q2FuZGlkYXRlSW5mbygpCi0gICAgICAgICAgICAgIC5nZXRXc2RsRG9jdW1lbnQoKQotICAgICAgICAgICAgICAuZ2V0RGVmaW5pdGlvbnMoKSwKLSAgICAgICAgICAgICAgdmFsaWRhdG9yKTsKLSAgICAgICAgbS5wdXQoIlR5cGVzUmVnaXN0cnkiLCB0UmVnKTsKLSAgICAgICAgdHJhdmVyc2FsLnRyYXZlcnNlKG1hdGNoLmdldE9wZXJhdGlvbigpLCBtKTsKLQotICAgICAgICBpZiAoaXNSZXF1ZXN0ID09IGZhbHNlKQotICAgICAgICAgIGlmIChleGlzdFNPQVBIZWFkZXJGYXVsdCA9PSB0cnVlKQotICAgICAgICAgICAgZXhpc3RTT0FQSGVhZGVyID0gdHJ1ZTsKLQotICAgICAgICBpZiAocmVzcG9uc2VTaWcgIT0gbnVsbAotICAgICAgICAgICYmIHJlc3BvbnNlU2lnLmlzRmF1bHQoKQotICAgICAgICAgICYmIHZpc2l0RmF1bHQgPT0gZmFsc2UpCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgICAgICJcbk1lc3NhZ2U6XG4iICsgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKSwKLSAgICAgICAgICAgICAgZW50cnlDb250ZXh0KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZXhpc3RTT0FQSGVhZGVyID09IGZhbHNlKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgICAiXG5NZXNzYWdlOlxuIiArIGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRNZXNzYWdlKCksCi0gICAgICAgICAgICAgIGVudHJ5Q29udGV4dCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTEwOS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTExMDkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGJmNDRjZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTEwOS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotCi0vKioKLSAqIFdTSTExMDkuCi0gKiBBbnkgY29uZm9ybWFuY2UgY2xhaW1zIE1VU1QgYmUgY2hpbGRyZW4gb2YgdGhlIHNvYXA6SGVhZGVyIGVsZW1lbnQuCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMTA5IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTEwOShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShUZXN0QXNzZXJ0aW9uLCBFbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgaWYgKChlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkgIT0gbnVsbCkKLSAgICAgICYmICghdGhpcy52YWxpZGF0b3IuaXNPbmVXYXlSZXNwb25zZShlbnRyeUNvbnRleHQpKSkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgLy8gUGFyc2UgbWVzc2FnZQotICAgICAgICBEb2N1bWVudCBkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKTsKLSAgICAgICAgRWxlbWVudCByb290ID0gZG9jLmdldERvY3VtZW50RWxlbWVudCgpOwotICAgICAgICAvLyBmaW5kICJIZWFkZXIiIGVsZW1lbnQKLSAgICAgICAgTm9kZUxpc3QgaGVhZGVyTGlzdCA9Ci0gICAgICAgICAgcm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKFdTSUNvbnN0YW50cy5OU19VUklfU09BUCwgIkhlYWRlciIpOwotICAgICAgICBFbGVtZW50IGhlYWRlckVsZW0gPSBudWxsOwotICAgICAgICBpZiAoaGVhZGVyTGlzdCAhPSBudWxsICYmIGhlYWRlckxpc3QuZ2V0TGVuZ3RoKCkgIT0gMCkKLSAgICAgICAgICBoZWFkZXJFbGVtID0gKEVsZW1lbnQpIGhlYWRlckxpc3QuaXRlbSgwKTsKLQotICAgICAgICAvLyBmaW5kICJDbGFpbSIgZWxlbWVudAotICAgICAgICBOb2RlTGlzdCBjbGFpbUxpc3QgPQotICAgICAgICAgIHJvb3QuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUyhXU0lDb25zdGFudHMuTlNfVVJJX0NMQUlNLCAiQ2xhaW0iKTsKLSAgICAgICAgaWYgKGNsYWltTGlzdCA9PSBudWxsIHx8IGNsYWltTGlzdC5nZXRMZW5ndGgoKSA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNsYWltTGlzdC5nZXRMZW5ndGgoKTsgaSsrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChoZWFkZXJFbGVtID09IG51bGwKLSAgICAgICAgICAgICAgfHwgY2xhaW1MaXN0Lml0ZW0oaSkuZ2V0UGFyZW50Tm9kZSgpICE9IGhlYWRlckVsZW0pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICAgICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgICAgICAgIlxuU09BUCBtZXNzYWdlOlxuIgotICAgICAgICAgICAgICAgICAgICArIGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRNZXNzYWdlKCksCi0gICAgICAgICAgICAgICAgICBlbnRyeUNvbnRleHQpOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMTEwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTExMC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjNiOWUyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMTEwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotLyoqCi0gKiBXU0kxMTEwLgotICogQW55IGNvbmZvcm1hbmNlIGNsYWltcyBNVVNUIGFkaGVyZSB0byB0aGUgV1MtSSBjb25mb3JtYW5jZSAKLSAqIGNsYWltIHNjaGVtYSBkZWZpbmVkIGluIHRoZSBCYXNpYyBQcm9maWxlLgotICovCi1wdWJsaWMgY2xhc3MgV1NJMTExMCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBCYXNlTWVzc2FnZVZhbGlkYXRvciB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTExMTAoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUoVGVzdEFzc2VydGlvbiwgRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIERvY3VtZW50IGRvYzsKLSAgICBpZiAoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpICE9IG51bGwKLSAgICAgICYmICF0aGlzLnZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCkKLSAgICAgICYmIChkb2MgPSBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5RG9jdW1lbnQoKSkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBFbGVtZW50IHJvb3QgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICAvLyBmaW5kICJDbGFpbSIgZWxlbWVudAotICAgICAgTm9kZUxpc3QgY2xhaW1MaXN0ID0KLSAgICAgICAgcm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKFdTSUNvbnN0YW50cy5OU19VUklfQ0xBSU0sICJDbGFpbSIpOwotICAgICAgaWYgKGNsYWltTGlzdCA9PSBudWxsIHx8IGNsYWltTGlzdC5nZXRMZW5ndGgoKSA9PSAwKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNsYWltTGlzdC5nZXRMZW5ndGgoKTsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgRWxlbWVudCBlbGVtID0gKEVsZW1lbnQpIGNsYWltTGlzdC5pdGVtKGkpOwotICAgICAgICAgIC8vIGNoZWNrICJjb25mb3Jtc1RvIiBhdHRyaWJ1dGUKLSAgICAgICAgICBOb2RlIG5vZGUgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoImNvbmZvcm1zVG8iKTsKLSAgICAgICAgICBpZiAobm9kZSA9PSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgICAgICAgIlxuU09BUCBtZXNzYWdlOlxuIgotICAgICAgICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpLAotICAgICAgICAgICAgICAgIGVudHJ5Q29udGV4dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgLyogVGhpcyBpcyBjaGVja2VkIGluIFdTSTExMTEKLSAgICAgICAgICAvLyBjaGVjayAibXVzdFVuZGVyc3RhbmQiIGF0dHJpYnV0ZQotICAgICAgICAgIG5vZGUgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGVOUyhXU0lDb25zdGFudHMuTlNfVVJJX1NPQVAsICJtdXN0VW5kZXJzdGFuZCIpOwotICAgICAgICAgIGlmIChub2RlICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgICAgICBmYWlsdXJlRGV0YWlsID0gY3JlYXRlRmFpbHVyZURldGFpbCgiXG5TT0FQIG1lc3NhZ2U6XG4iICsgZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICAqLwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMTExLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTExMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODRlM2ZiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMTExLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotLyoqCi0gKiBXU0kxMTExLgotICogQW55IGNvbmZvcm1hbmNlIGNsYWltcyBNVVNUIE5PVCB1c2Ugc29hcDptdXN0VW5kZXJzdGFuZD0nMScuCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMTExIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTExMShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShUZXN0QXNzZXJ0aW9uLCBFbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgRG9jdW1lbnQgZG9jOwotICAgIGlmIChlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkgIT0gbnVsbAotICAgICAgJiYgIXRoaXMudmFsaWRhdG9yLmlzT25lV2F5UmVzcG9uc2UoZW50cnlDb250ZXh0KQotICAgICAgJiYgKGRvYyA9IGVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnlEb2N1bWVudCgpKSAhPSBudWxsKQotICAgIHsKLSAgICAgIEVsZW1lbnQgcm9vdCA9IGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKTsKLSAgICAgIC8vIGZpbmQgIkNsYWltIiBlbGVtZW50Ci0gICAgICBOb2RlTGlzdCBjbGFpbUxpc3QgPQotICAgICAgICByb290LmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoV1NJQ29uc3RhbnRzLk5TX1VSSV9DTEFJTSwgIkNsYWltIik7Ci0gICAgICBpZiAoY2xhaW1MaXN0ICE9IG51bGwgJiYgY2xhaW1MaXN0LmdldExlbmd0aCgpICE9IDApCi0gICAgICB7Ci0gICAgICAgIC8vIGlmIGNvbnRhaW5zICJDbGFpbSIgZWxlbWVudCBmaW5kIGFsbCAiSGVhZGVyIiBlbGVtZW50cwotICAgICAgICBOb2RlTGlzdCBoZWFkZXJMaXN0ID0KLSAgICAgICAgICByb290LmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoV1NJQ29uc3RhbnRzLk5TX1VSSV9TT0FQLCAiSGVhZGVyIik7Ci0gICAgICAgIGlmIChoZWFkZXJMaXN0ICE9IG51bGwgJiYgaGVhZGVyTGlzdC5nZXRMZW5ndGgoKSAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgZm9yIChpbnQgaUhlYWRlciA9IDA7IGlIZWFkZXIgPCBoZWFkZXJMaXN0LmdldExlbmd0aCgpOyBpSGVhZGVyKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gZmluZCBhbGwgIkhlYWRlciIgY2hpbGQgZWxlbWVudHMKLSAgICAgICAgICAgIE5vZGUgY2hpbGQgPSBoZWFkZXJMaXN0Lml0ZW0oaUhlYWRlcikuZ2V0Rmlyc3RDaGlsZCgpOwotICAgICAgICAgICAgd2hpbGUgKGNoaWxkICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlmIChjaGlsZC5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gaWYgY29udGFpbnMgIm11c3RVbmRlcnN0YW5kIiAtPiBmYWlsCi0gICAgICAgICAgICAgICAgU3RyaW5nIGF0dHJWYWwgPQotICAgICAgICAgICAgICAgICAgKChFbGVtZW50KSBjaGlsZCkuZ2V0QXR0cmlidXRlTlMoCi0gICAgICAgICAgICAgICAgICAgIFdTSUNvbnN0YW50cy5OU19VUklfU09BUCwKLSAgICAgICAgICAgICAgICAgICAgIm11c3RVbmRlcnN0YW5kIik7Ci0gICAgICAgICAgICAgICAgaWYgKGF0dHJWYWwgIT0gbnVsbCAmJiAhIiIuZXF1YWxzKGF0dHJWYWwpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICAgICAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgICAgICAgICAgICAgIlxuU09BUCBtZXNzYWdlOlxuIgotICAgICAgICAgICAgICAgICAgICAgICAgKyBlbnRyeUNvbnRleHQuZ2V0TWVzc2FnZUVudHJ5KCkuZ2V0TWVzc2FnZSgpLAotICAgICAgICAgICAgICAgICAgICAgIGVudHJ5Q29udGV4dCk7Ci0gICAgICAgICAgICAgICAgICBpSGVhZGVyID0gaGVhZGVyTGlzdC5nZXRMZW5ndGgoKTsKLSAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBjaGlsZCA9IGNoaWxkLmdldE5leHRTaWJsaW5nKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMTE2LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTExNi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjg5ZGQ2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMTE2LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci0KLS8qKgotICogV1NJMTExNgotICovCi1wdWJsaWMgY2xhc3MgV1NJMTExNiBleHRlbmRzIEJQMTExNgotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMTE2KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMTIxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTEyMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjNlYmFlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMTIxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiBCUFdTSTQuCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMTIxIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIEJhc2VNZXNzYWdlVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTEyMShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdUOiAtLSBzdGFydDogYmFzZSBvbiB3c2kxMDExIC0gc2hvdWxkIHJlZmFjdG9yIHRoaXMKLQotICAgICAgQmluZGluZ1tdIGJpbmRpbmdzID0gdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dC5nZXRDYW5kaWRhdGVJbmZvKCkuZ2V0QmluZGluZ3MoKTsKLQotICAgICAgLy8gZ2V0IHNvYXAgbWVzc2FnZSBjaGlsZCBuYW1lCi0gICAgICAvLyBHZXQgdGhlIERPTSBjb250ZW50cyBvZiB0aGUgbWVzc2FnZSBzb2FwOmJvZHkgKGlmIG5vbi1lbXB0eSkKLSAgICAgIERvY3VtZW50IG1lc3NhZ2VEb2MgPSBudWxsOwotCi0gICAgICBRTmFtZSBtZXNzYWdlUGFydEVsZW1lbnRRTmFtZSA9IG51bGw7Ci0gICAgICBpZiAoIWVudHJ5Q29udGV4dC5nZXRNZXNzYWdlRW50cnkoKS5nZXRNZXNzYWdlKCkuZXF1YWxzKCIiKSkKLSAgICAgIHsKLSAgICAgICAgbWVzc2FnZURvYyA9Ci0gICAgICAgICAgWE1MVXRpbHMucGFyc2VYTUwoZW50cnlDb250ZXh0LmdldE1lc3NhZ2VFbnRyeSgpLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgIC8vIGdldCBzb2FwIG9wZXJhdGlvbiBuYW1lIGZyb20gdGhlIHNvYXA6Ym9keQotCi0gICAgICAgIC8vIE5PVEU6IGdldFNvYXBCb2R5Q2hpbGQoKSBtYXkgcmV0dXJuIG51bGwsIGlmIHRoZSBzb2FwOmJvZHkgZGlkIG5vdCBjb250YWluIGFueSBjaGlsZCBlbGVtZW50cwotICAgICAgICBFbGVtZW50IHNvYXBNZXNzYWdlRWxlbWVudCA9IHRoaXMudmFsaWRhdG9yLmdldFNvYXBCb2R5Q2hpbGQobWVzc2FnZURvYyk7Ci0KLSAgICAgICAgLy8gZm9yIGRvYy1saXQuLi4gZmluZCB0aGUgd3NkbDpwYXJ0IGZyb20gb25lIG9mIHRoZSBzcGVjaWZpZWQgb3BlcmF0aW9ucyB0aGF0IGhhcyAKLSAgICAgICAgLy8gdGhlIHNvYXAgZWxlbWVudCB1c2VkIGluIHRoZSBtZXNzYWdlLiAgICAgIAotICAgICAgICAvLyB3ZSBhcmUgbG9va2luZyBmb3IgYSBwYXJ0IHdpdGggYW4gZWxlbWVudCBhdHRyaWIgdmFsIG1hdGNoaW5nIHRoZSBzb2FwIG1lc3NhZ2UgZWxlbWVudAotICAgICAgICBpZiAoc29hcE1lc3NhZ2VFbGVtZW50ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBtZXNzYWdlUGFydEVsZW1lbnRRTmFtZSA9Ci0gICAgICAgICAgICBuZXcgUU5hbWUoCi0gICAgICAgICAgICAgIHNvYXBNZXNzYWdlRWxlbWVudC5nZXROYW1lc3BhY2VVUkkoKSwKLSAgICAgICAgICAgICAgc29hcE1lc3NhZ2VFbGVtZW50LmdldExvY2FsTmFtZSgpKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAoKG1lc3NhZ2VEb2MgPT0gbnVsbCkgfHwgdGhpcy52YWxpZGF0b3IuaXNGYXVsdChtZXNzYWdlRG9jKSkKLSAgICAgIHsKLSAgICAgICAgLy8gZW1wdHkgbWVzc2FnZXMgYW5kIG1lc3NhZ2VzIGNvbnRhaW5pbmcgc29hcDpGYXVsdHMgZG8gbm90IHF1YWxpZnkgZm9yIHRoaXMgVEEKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgQmluZGluZ09wZXJhdGlvbltdIGRvY0JpbmRpbmdPcGVyYXRpb25zID0KLSAgICAgICAgdGhpcy52YWxpZGF0b3IuZ2V0TWF0Y2hpbmdCaW5kaW5nT3BzKAotICAgICAgICAgIFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9ET0MsCi0gICAgICAgICAgYmluZGluZ3MpOwotICAgICAgLy8gbGlzdCBvZiBvcGVyYXRpb25zIHRoYXQgbWF0Y2ggdGhlIDx3c2RsOmlucHV0PiBvciA8d3NkbDpvdXRwdXQ+IChkZXBlbmRpbmcgb24gZW50cnlUeXBlKQotICAgICAgLy8gZm9yIHBhcnQgZWxlbWVudD0iLi4uIgotICAgICAgLy8gKElTU1VFOiB3aGF0IGFib3V0IHBhcnQgdHlwZT0iLi4uIj8pCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uW10gcG90ZW50aWFsRG9jTGl0T3BzID0KLSAgICAgICAgdGhpcy52YWxpZGF0b3IuZ2V0RG9jTGl0T3BlcmF0aW9ucygKLSAgICAgICAgICBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeVR5cGUoKSwKLSAgICAgICAgICBtZXNzYWdlUGFydEVsZW1lbnRRTmFtZSwKLSAgICAgICAgICBkb2NCaW5kaW5nT3BlcmF0aW9ucyk7Ci0gICAgICAvLyBHVDogLS0tIGVuZDogYmFzZSBvbiB3c2kxMDExCi0KLSAgICAgIC8vICAgICAgICAgICAgICAgCi0gICAgICBpZiAocG90ZW50aWFsRG9jTGl0T3BzLmxlbmd0aCA9PSAwKQotICAgICAgewotICAgICAgICAvLyBub3QgZG9jLWxpdCBzbyBxdWl0Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIFdlIGtub3cgdGhlcmUgaXMgYSBkb2MtbGl0IG1hdGNoLCBzbyBub3cgdHJ5IHRvIHZhbGlkYXRlIHRoZSBzb2FwIG1lc3NhZ2UgYWdhaW5zdCB0aGUKLSAgICAgIC8vIHJlZmVyZW5jZWQgc2NoZW1hCi0KLSAgICAgIC8vIEdUIC0gaG93IHRvIHJlZmVyZW5jZSB0aGUgc2NoZW1hIGRvY3VtZW50Pz8gbmVlZCB0byB1c2UgdGhlIDx3c2RsOnBhcnQ+LCBvciBkbyBpdCBwdXJlbHkKLSAgICAgIC8vIGZyb20gdGhlIHNvYXAgbWVzc2FnZSBlbGVtZW50cz8KLSAgICAgIC8vIGllIGJvZHksIGVudmVsb3BlIG9yIHdzZGw/PwotCi0gICAgICAvLyA8ZXhwZXJpbWVudD4KLQotICAgICAgYm9vbGVhbiBpc1NjaGVtYVZhbGlkOwotICAgICAgCi0gICAgICB0cnkgewotICAgICAgCQlpc1NjaGVtYVZhbGlkID0gdGhpcy52YWxpZGF0b3IubWVzc2FnZUlzRG9jTGl0U2NoZW1hVmFsaWQoZW50cnlDb250ZXh0KTsgICAgICAgICAKLSAgICAgIAl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgIAkJdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oKTsKLSAgICAgIAl9Ci0gICAgICAvLyA8L2V4cGVyaW1lbnQ+Ci0gICAgICAKLQotICAgICAgLy9pc1NjaGVtYVZhbGlkID0gdHJ1ZTsgLy8gZm9yIG5vdywgZ2V0dGluZyB0aGlzIGZhciBkb2VzIGl0Ci0KLSAgICAgIGlmIChpc1NjaGVtYVZhbGlkKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbigpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25QYXNzRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotCi0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEyMDEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMjAxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjNmYwODcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEyMDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZS5CUDEyMDE7Ci0KLS8qKgotICogV1NJMTIwMQotICovCi1wdWJsaWMgY2xhc3MgV1NJMTIwMSBleHRlbmRzIEJQMTIwMQotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMjAxKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMjAyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTIwMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTMxY2Q2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMjAyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGUuQlAxMjAyOwotCi0vKioKLSAqIFdTSTEyMDIKLSAqLwotcHVibGljIGNsYXNzIFdTSTEyMDIgZXh0ZW5kcyBCUDEyMDIKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTIwMihCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTIwMy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEyMDMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzYzYmNiZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTIwMy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlLkJQMTIwMzsKLQotLyoqCi0gKiBXU0kxMjAzCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMjAzIGV4dGVuZHMgQlAxMjAzCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTEyMDMoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEyMDQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMjA0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2ZGRhNTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEyMDQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZS5CUDEyMDQ7Ci0KLS8qKgotICogV1NJMTIwNAotICovCi1wdWJsaWMgY2xhc3MgV1NJMTIwNCBleHRlbmRzIEJQMTIwNAotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMjA0KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMjA4LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTIwOC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Yjk0OTYzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMjA4LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGUuQlAxMjA4OwotCi0vKioKLSAqIFdTSTEyMDgKLSAqLwotcHVibGljIGNsYXNzIFdTSTEyMDggZXh0ZW5kcyBCUDEyMDgKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTIwOChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTIxMS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEyMTEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNmNTdjNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTIxMS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlLkJQMTIxMTsKLQotLyoqCi0gKiBXU0kxMjExCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMjExIGV4dGVuZHMgQlAxMjExCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTEyMTEoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEzMDEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMzAxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmMGViODIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEzMDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZS5CUDEzMDE7Ci0KLS8qKgotICogV1NJMTMwMQotICovCi1wdWJsaWMgY2xhc3MgV1NJMTMwMSBleHRlbmRzIEJQMTMwMQotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMzAxKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMzAyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTMwMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTk3NmZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMzAyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGUuQlAxMzAyOwotCi0vKioKLSAqIFdTSTEzMDIKLSAqLwotcHVibGljIGNsYXNzIFdTSTEzMDIgZXh0ZW5kcyBCUDEzMDIKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTMwMihCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTMwNS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEzMDUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmIyZTEzYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTMwNS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlLkJQMTMwNTsKLQotLyoqCi0gKiBXU0kxMzA1Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMzA1IGV4dGVuZHMgQlAxMzA1Ci17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTEzMDUoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEzMDYuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMzA2LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2MTA2MjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEzMDYuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZS5CUDEzMDY7Ci0KLS8qKgotICogV1NJMTMwNgotICovCi1wdWJsaWMgY2xhc3MgV1NJMTMwNiBleHRlbmRzIEJQMTMwNgotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMzA2KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMzA3LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTMwNy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzcwNWE4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMzA3LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGUuQlAxMzA3OwotCi0vKioKLSAqIFdTSTEzMDcKLSAqLwotcHVibGljIGNsYXNzIFdTSTEzMDcgZXh0ZW5kcyBCUDEzMDcKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTMwNyhCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTMwOC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEzMDguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTIyNzFjZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTMwOC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlLkJQMTMwODsKLQotLyoqCi0gKiBXU0kxMzA4Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMzA4IGV4dGVuZHMgQlAxMzA4Ci17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTEzMDgoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEzMDkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMzA5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlNjQzNTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEzMDkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZS5CUDEzMDk7Ci0KLS8qKgotICogV1NJMTMwOQotICovCi1wdWJsaWMgY2xhc3MgV1NJMTMwOSBleHRlbmRzIEJQMTMwOQotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMzA5KEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMzExLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTMxMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTk4ZmFhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMzExLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvblBhc3NFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuSFRUUFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLk9wZXJhdGlvblNpZ25hdHVyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5UeXBlc1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotCi0vKioKLSAqIEJQV1NJNC4KLSAqIFRoZSByZXNwb25zZSAoU09BUCBlbnZlbG9wZSkgc2hvdWxkIGJlIGNhcnJpZWQgYnkgYW4gSFRUUCAKLSAqIHJlc3BvbnNlLCBvdmVyIHNhbWUgSFRUUCBjb25uZWN0aW9uIGFzIHRoZSBSZXF1ZXN0LiAKLSAqLwotcHVibGljIGNsYXNzIFdTSTEzMTEgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgQmFzZU1lc3NhZ2VWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxMzExKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKFRlc3RBc3NlcnRpb24sIEVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICBib29sZWFuIGlzT25lV2F5UmVzcG9uc2UgPSB0aGlzLnZhbGlkYXRvci5pc09uZVdheVJlc3BvbnNlKGVudHJ5Q29udGV4dCk7Ci0KLSAgICBEb2N1bWVudCBkb2NSZXNwb25zZSA9IG51bGw7Ci0gICAgaWYgKCFpc09uZVdheVJlc3BvbnNlKQotICAgICAgZG9jUmVzcG9uc2UgPSBlbnRyeUNvbnRleHQuZ2V0UmVzcG9uc2VEb2N1bWVudCgpOwotCi0gICAgLy9pZiBmYXVsdAotICAgIGlmICghaXNPbmVXYXlSZXNwb25zZSAmJiB0aGlzLnZhbGlkYXRvci5pc0ZhdWx0KGRvY1Jlc3BvbnNlKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsgLy8gbm90IGZhdWx0Ci0gICAgICAvLyAxLiBnZXQgYW4gb3BlcmF0aW9uIGZyb20gcmVxdWVzdAotICAgICAgLy8gUGFyc2UgcmVxdWVzdCBtZXNzYWdlCi0gICAgICBEb2N1bWVudCBkb2NSZXF1ZXN0ID0gZW50cnlDb250ZXh0LmdldFJlcXVlc3REb2N1bWVudCgpOwotCi0gICAgICAvLyBnZXQgU09BUEFjdGlvbgotICAgICAgU3RyaW5nIGhlYWRlcnMgPSBlbnRyeUNvbnRleHQuZ2V0UmVxdWVzdCgpLmdldEhUVFBIZWFkZXJzKCk7Ci0gICAgICBTdHJpbmcgYWN0aW9uID0gbnVsbDsKLSAgICAgIGlmIChoZWFkZXJzICE9IG51bGwpCi0gICAgICAgIGFjdGlvbiA9IChTdHJpbmcpIEhUVFBVdGlscy5nZXRIdHRwSGVhZGVyVG9rZW5zKGhlYWRlcnMsICI6IikuZ2V0KCJTT0FQQWN0aW9uIi50b1VwcGVyQ2FzZSgpKTsKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IHZhbGlkYXRvci5hbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldEJpbmRpbmdzKClbMF07Ci0gICAgICBUeXBlc1JlZ2lzdHJ5IHJlZ2lzdHJ5ID0KLSAgICAgICAgbmV3IFR5cGVzUmVnaXN0cnkoCi0gICAgICAgICAgdGhpcy52YWxpZGF0b3IuZ2V0V1NETERvY3VtZW50KCkuZ2V0RGVmaW5pdGlvbnMoKSwKLSAgICAgICAgICB2YWxpZGF0b3IpOwotICAgICAgT3BlcmF0aW9uU2lnbmF0dXJlLk9wZXJhdGlvbk1hdGNoIG1hdGNoID0KLSAgICAgICAgT3BlcmF0aW9uU2lnbmF0dXJlLm1hdGNoT3BlcmF0aW9uKAotICAgICAgICAgIGRvY1JlcXVlc3QsCi0gICAgICAgICAgYWN0aW9uLAotICAgICAgICAgIGJpbmRpbmcsCi0gICAgICAgICAgcmVnaXN0cnkpOwotCi0gICAgICBpZiAobWF0Y2ggPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLQotICAgICAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IG1hdGNoLmdldE9wZXJhdGlvbigpOwotICAgICAgICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSBudWxsOwotCi0gICAgICAgICAgLy8gICAgQ2hlY2sgd2hldGhlciB0aGUgdHJhbnNwb3J0IGF0dHJpYnV0ZSBoYXMgdGhlIHZhbHVlIAotICAgICAgICAgIC8vICAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi4gCi0gICAgICAgICAgTGlzdCBleHRFbGVtID0gYmluZGluZy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgICAgICBmb3IgKEl0ZXJhdG9yIGluZGV4ID0gZXh0RWxlbS5pdGVyYXRvcigpOyBpbmRleC5oYXNOZXh0KCk7KQotICAgICAgICAgIHsKLSAgICAgICAgICAgIE9iamVjdCBvID0gKE9iamVjdCkgaW5kZXgubmV4dCgpOwotICAgICAgICAgICAgaWYgKG8gaW5zdGFuY2VvZiBTT0FQQmluZGluZykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU09BUEJpbmRpbmcgc29hcEJpbmRpbmcgPSAoU09BUEJpbmRpbmcpIG87Ci0gICAgICAgICAgICAgIGlmICghV1NJQ29uc3RhbnRzCi0gICAgICAgICAgICAgICAgLk5TX1VSSV9TT0FQX0hUVFAKLSAgICAgICAgICAgICAgICAuZXF1YWxzKHNvYXBCaW5kaW5nLmdldFRyYW5zcG9ydFVSSSgpKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLQotICAgICAgICAgIC8vZmluZCBvcGVyYXRpb24gaW4gcG9ydCB0eXBlCi0gICAgICAgICAgb3BlcmF0aW9uID0gYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKTsKLSAgICAgICAgICBpZiAob3BlcmF0aW9uID09IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oKTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBpZiAoaXNPbmVXYXlSZXNwb25zZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAob3BlcmF0aW9uLmdldE91dHB1dCgpID09IG51bGwpCi0gICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25QYXNzRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgLy8gICAgY2hlY2sgd2hldGhlciB0aGUgcmVzcG9uc2UgbWVzc2FnZSBmcm9tIHRoZSBsb2cgCi0gICAgICAgICAgLy8gIGNvbnRhaW5zIHRoZSBvdXRwdXQgbWVzc2FnZQotICAgICAgICAgIE5vZGVMaXN0IHNvYXBCb2R5TGlzdCA9Ci0gICAgICAgICAgICBkb2NSZXNwb25zZS5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKAotICAgICAgICAgICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1NPQVAsCi0gICAgICAgICAgICAgIFhNTFV0aWxzLlNPQVBfRUxFTV9CT0RZKTsKLSAgICAgICAgICBpZiAoKHNvYXBCb2R5TGlzdCA9PSBudWxsKSB8fCAoc29hcEJvZHlMaXN0LmdldExlbmd0aCgpID09IDApKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFJlc3BvbnNlIGRvZXMgbm90IGNvbnRhaW4gYW55IHNvYXAgQm9keSBlbGVtZW50cwotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzb2FwQm9keUxpc3QuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBFbGVtZW50IG5leHRCb2R5RWxlbSA9IChFbGVtZW50KSBzb2FwQm9keUxpc3QuaXRlbShpKTsKLSAgICAgICAgICAgIEVsZW1lbnQgc29hcE1lc3NhZ2VFbGVtZW50ID0gWE1MVXRpbHMuZ2V0Rmlyc3RDaGlsZChuZXh0Qm9keUVsZW0pOwotICAgICAgICAgICAgd2hpbGUgKHNvYXBNZXNzYWdlRWxlbWVudCAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvLyBjaGVjayB3aGV0aGVyIHRoZSBvcGVyYXRpb24gb3V0cHV0IGhhcyBtZXNzYWdlIGZyb20gU09BUCByZXNwb25zZQotICAgICAgICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSBvcGVyYXRpb24uZ2V0T3V0cHV0KCkuZ2V0TWVzc2FnZSgpOwotICAgICAgICAgICAgICBRTmFtZSBzb2FwTWVzc2FnZVFOYW1lID0KLSAgICAgICAgICAgICAgICBuZXcgUU5hbWUoCi0gICAgICAgICAgICAgICAgICBzb2FwTWVzc2FnZUVsZW1lbnQuZ2V0TmFtZXNwYWNlVVJJKCksCi0gICAgICAgICAgICAgICAgICBzb2FwTWVzc2FnZUVsZW1lbnQuZ2V0TG9jYWxOYW1lKCkpOwotCi0gICAgICAgICAgICAgIGlmIChtZXNzYWdlICE9IG51bGwKLSAgICAgICAgICAgICAgICAmJiBzb2FwTWVzc2FnZVFOYW1lLmVxdWFscyhtZXNzYWdlLmdldFFOYW1lKCkpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvblBhc3NFeGNlcHRpb24oKTsKLSAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIHNvYXBNZXNzYWdlRWxlbWVudCA9Ci0gICAgICAgICAgICAgICAgWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcoc29hcE1lc3NhZ2VFbGVtZW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0KLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoQXNzZXJ0aW9uUGFzc0V4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICB9Ci0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocmVzdWx0ID09IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEKQotICAgIHsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKG51bGwsIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMzE2LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTMxNi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZmQzMTY4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxMzE2LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGUuQlAxMzE2OwotCi0vKioKLSAqIFdTSTEzMTYKLSAqLwotcHVibGljIGNsYXNzIFdTSTEzMTYgZXh0ZW5kcyBCUDEzMTYKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTMxNihCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTMxOC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTEzMTguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWEzY2Q5OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTMxOC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlLkJQMTMxODsKLQotLyoqCi0gKiBXU0kxMzE4Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0kxMzE4IGV4dGVuZHMgQlAxMzE4Ci17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTEzMTgoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTE2MDEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxNjAxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1OTIwZjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTE2MDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZS5CUDE2MDE7Ci0KLS8qKgotICogV1NJMTYwMQotICovCi1wdWJsaWMgY2xhc3MgV1NJMTYwMSBleHRlbmRzIEJQMTYwMQotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0kxNjAxKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxNzAxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJMTcwMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTdiZWZiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0kxNzAxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGUuQlAxNzAxOwotCi0vKioKLSAqIFdTSTE3MDEKLSAqLwotcHVibGljIGNsYXNzIFdTSTE3MDEgZXh0ZW5kcyBCUDE3MDEKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJMTcwMShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJNDEwMC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTQxMDAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODFjMWExMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJNDEwMC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLmVudmVsb3BlLkJQNDEwMDsKLQotLyoqCi0gKiBXU0k0MTAwCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0k0MTAwIGV4dGVuZHMgQlA0MTAwCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBCYXNlTWVzc2FnZVZhbGlkYXRvcgotICAgKi8KLSAgcHVibGljIFdTSTQxMDAoQmFzZU1lc3NhZ2VWYWxpZGF0b3IgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTQxMDEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0k0MTAxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1MDE2NWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTQxMDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlTWVzc2FnZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5lbnZlbG9wZS5CUDQxMDE7Ci0KLS8qKgotICogV1NJNDEwMQotICovCi1wdWJsaWMgY2xhc3MgV1NJNDEwMSBleHRlbmRzIEJQNDEwMQotewotCi0gIC8qKgotICAgKiBAcGFyYW0gQmFzZU1lc3NhZ2VWYWxpZGF0b3IKLSAgICovCi0gIHB1YmxpYyBXU0k0MTAxKEJhc2VNZXNzYWdlVmFsaWRhdG9yIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0k0MTAyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJNDEwMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjVmZmFmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvbWVzc2FnZS9XU0k0MTAyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5tZXNzYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZU1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuZW52ZWxvcGUuQlA0MTAyOwotCi0vKioKLSAqIFdTSTQxMDIKLSAqLwotcHVibGljIGNsYXNzIFdTSTQxMDIgZXh0ZW5kcyBCUDQxMDIKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJNDEwMihCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJNDEwMy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTQxMDMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmE2MWQwNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJNDEwMy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotCi0vKioKLSAqIFdTSTQxMDMKLSAqLwotcHVibGljIGNsYXNzIFdTSTQxMDMgZXh0ZW5kcyBCUDQxMDMKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJNDEwMyhCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJNDEwNC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTQxMDQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTYxNzZkMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJNDEwNC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotCi0vKioKLSAqIFdTSTQxMDQKLSAqLwotcHVibGljIGNsYXNzIFdTSTQxMDQgZXh0ZW5kcyBCUDQxMDQKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJNDEwNChCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJNDEwNS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTQxMDUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZmZjhkMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJNDEwNS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotCi0vKioKLSAqIFdTSTQxMDUKLSAqLwotcHVibGljIGNsYXNzIFdTSTQxMDUgZXh0ZW5kcyBCUDQxMDUKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJNDEwNShCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJNDEwNi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTQxMDYuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdhNDRhZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJNDEwNi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotCi0vKioKLSAqIFdTSTQxMDYKLSAqLwotcHVibGljIGNsYXNzIFdTSTQxMDYgZXh0ZW5kcyBCUDQxMDYKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJNDEwNihCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJNDEwNy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC9tZXNzYWdlL1dTSTQxMDcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFkNTI0Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL21lc3NhZ2UvV1NJNDEwNy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwubWVzc2FnZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VNZXNzYWdlVmFsaWRhdG9yOwotCi0vKioKLSAqIFdTSTQxMDcKLSAqLwotcHVibGljIGNsYXNzIFdTSTQxMDcgZXh0ZW5kcyBCUDQxMDcKLXsKLQotICAvKioKLSAgICogQHBhcmFtIEJhc2VNZXNzYWdlVmFsaWRhdG9yCi0gICAqLwotICBwdWJsaWMgV1NJNDEwNyhCYXNlTWVzc2FnZVZhbGlkYXRvciBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3VkZGkvQlAzMDAxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3VkZGkvQlAzMDAxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmZjAzZTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC91ZGRpL0JQMzAwMS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLnVkZGk7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5VRERJVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwuV1NETERvY3VtZW50OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuT3ZlcnZpZXdEb2M7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsOwotCi0KLS8qKgotICogQlAzMDAxIC0gVGhlIHRNb2RlbCBlbGVtZW50IHVzZXMgV1NETCBhcyB0aGUgZGVzY3JpcHRpb24gbGFuZ3VhZ2U6Ci0gKiB0aGUgdWRkaTpvdmVydmlld0RvYy91ZGRpOm92ZXJ2aWV3VVJMIGVsZW1lbnQgY29udGFpbnMgYSByZWZlcmVuY2UKLSAqIHRvIGEgV1NETCBkZWZpbml0aW9uLCB3aGljaCB1c2VzIGEgbmFtZXNwYWNlCi0gKiBvZiBodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLy4KLSAqIFRoZSB1ZGRpOm92ZXJ2aWV3VVJMIG1heSB1c2UgdGhlIGZyYWdtZW50IG5vdGF0aW9uIHRvIHJlc29sdmUKLSAqIHRvIGEgd3NkbDpiaW5kaW5nLgotICovCi1wdWJsaWMgY2xhc3MgQlAzMDAxIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIFVERElWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFVERElWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAzMDAxKFVERElWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKioKLSAgICogU2V0cyB0aGUgcmVzdWx0IHZhcmlhYmxlIHRvIEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEIHZhbHVlIGFuZAotICAgKiBwbGFjZXMgYSB0TW9kZWwga2V5IGluIHRoZSBmYXVsdCBkZXRhaWwgbWVzc2FnZS4KLSAgICogQHBhcmFtIHRNb2RlbEtleQotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHNldEZhdWx0TWVzc2FnZShTdHJpbmcgdE1vZGVsS2V5KQotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgPSAiVGhlIHRNb2RlbCBrZXkgaXM6IFsiICsgdE1vZGVsS2V5ICsgIl0uIjsKLSAgfQotCi0gIC8qKgotICAgKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICBCaW5kaW5nIGJpbmRpbmcgPSBudWxsOwotCi0gICAgLy8gR2V0IHRoZSB0TW9kZWwgZnJvbSB0aGUgZW50cnlDb250ZXh0Ci0gICAgVE1vZGVsIHRNb2RlbCA9IChUTW9kZWwpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0KLSAgICAvLyBJZiB0aGUgdE1vZGVsIGRvZXMgbm90IGV4aXN0LCB0aGVuIGZhaWwKLSAgICBpZiAodE1vZGVsID09IG51bGwpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsTWVzc2FnZSA9ICJDb3VsZCBub3QgbG9jYXRlIGEgdE1vZGVsLiI7Ci0gICAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgICAgdGVzdEFzc2VydGlvbiwKLSAgICAgICAgcmVzdWx0LAotICAgICAgICBmYWlsdXJlRGV0YWlsTWVzc2FnZSk7Ci0gICAgfQotCi0gICAgU3RyaW5nIGtleSA9IHRNb2RlbC5nZXRUTW9kZWxLZXkoKTsKLQotICAgIE92ZXJ2aWV3RG9jIGRvYyA9IHRNb2RlbC5nZXRPdmVydmlld0RvYygpOwotICAgIGlmIChkb2MgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgdXJsVGV4dCA9IGRvYy5nZXRPdmVydmlld1VSTFN0cmluZygpOwotCi0gICAgICAvLyBUcnkgdG8gcmVzb2x2ZSB0aGUgVVJMICYgY2hlY2sgdGhlIFdTREwKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBXU0RMRG9jdW1lbnQgd3NkbERvY3VtZW50ID0gbmV3IFdTRExEb2N1bWVudCh1cmxUZXh0KTsKLSAgICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gd3NkbERvY3VtZW50LmdldERlZmluaXRpb25zKCk7Ci0gICAgICAgIE1hcCBuYW1lc3BhY2VzID0gZGVmaW5pdGlvbi5nZXROYW1lc3BhY2VzKCk7Ci0gICAgICAgIGlmICghbmFtZXNwYWNlcy5jb250YWluc1ZhbHVlKFdTSUNvbnN0YW50cy5OU19VUklfV1NETCkpCi0gICAgICAgIHsKLSAgICAgICAgICB1cmxUZXh0ID0gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEdldCBiaW5kaW5nCi0gICAgICAgIGJpbmRpbmcgPSBVRERJVXRpbHMuZ2V0QmluZGluZyh1cmxUZXh0LCB3c2RsRG9jdW1lbnQpOwotCi0gICAgICAgIC8vIFNlZSBpZiB0aGUgYmluZGluZyBpcyBpbiB0aGUgV1NETCBkb2N1bWVudAotICAgICAgICBpZiAoYmluZGluZyA9PSBudWxsCi0gICAgICAgICAgfHwgZGVmaW5pdGlvbi5nZXRCaW5kaW5nKGJpbmRpbmcuZ2V0UU5hbWUoKSkgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHVybFRleHQgPSBudWxsOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgdXJsVGV4dCA9IG51bGw7Ci0gICAgICB9Ci0KLSAgICAgIGlmICh1cmxUZXh0ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBmcmFnbWVudElEID0gbnVsbDsKLSAgICAgICAgaW50IGluZGV4ID0gdXJsVGV4dC5pbmRleE9mKCIjIik7Ci0gICAgICAgIGlmIChpbmRleCA+IC0xKQotICAgICAgICB7Ci0gICAgICAgICAgZnJhZ21lbnRJRCA9IHVybFRleHQuc3Vic3RyaW5nKGluZGV4ICsgMSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoKGZyYWdtZW50SUQgIT0gbnVsbCkKLSAgICAgICAgICAmJiAoZnJhZ21lbnRJRC5sZW5ndGgoKSAhPSAwKQotICAgICAgICAgICYmIChmcmFnbWVudElELnRvVXBwZXJDYXNlKCkuaW5kZXhPZigieHBvaW50ZXIoIi50b1VwcGVyQ2FzZSgpKSA9PSAtMQotICAgICAgICAgICAgfHwgZnJhZ21lbnRJRC5sYXN0SW5kZXhPZigiKSIpICE9IGZyYWdtZW50SUQubGVuZ3RoKCkgLSAxKSkKLSAgICAgICAgewotICAgICAgICAgIHNldEZhdWx0TWVzc2FnZShrZXkpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgc2V0RmF1bHRNZXNzYWdlKGtleSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZWxzZQotICAgIHsKLSAgICAgIHNldEZhdWx0TWVzc2FnZShrZXkpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsTWVzc2FnZSk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3VkZGkvQlAzMDAyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3VkZGkvQlAzMDAyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MmNkZTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC91ZGRpL0JQMzAwMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwudWRkaTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5iaW5kaW5nLkJpbmRpbmdUZW1wbGF0ZTsKLQotCi0vKioKLSAqIEJQMzAwMiAtIFRoZSB1ZGRpOmJpbmRpbmdUZW1wbGF0ZSBlbGVtZW50IGNvbnRhaW5zIGEgdWRkaTphY2Nlc3NQb2ludCBlbGVtZW50LAotICogd2l0aCBhIG5vbi1lbXB0eSB2YWx1ZS4KLSAqLwotcHVibGljIGNsYXNzIEJQMzAwMiBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBVRERJVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBVRERJVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMzAwMihVRERJVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIHNlcnZpY2VMb2NhdGlvbiA9IG51bGw7Ci0KLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgIC8vIEdldCB0aGUgYmluZGluZ1RlbXBsYXRlIGZyb20gdGhlIGVudHJ5Q29udGV4dAotICAgIEJpbmRpbmdUZW1wbGF0ZSBiaW5kaW5nVGVtcGxhdGUgPQotICAgICAgKEJpbmRpbmdUZW1wbGF0ZSkgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgIC8vIElmIHRoZSBiaW5kaW5nVGVtcGxhdGUgZG9lcyBub3QgY29udGFpbiBhbiBhY2Nlc3NQb2ludCwgdGhlbiBmYWlsCi0gICAgaWYgKChiaW5kaW5nVGVtcGxhdGUuZ2V0QWNjZXNzUG9pbnQoKSA9PSBudWxsKQotICAgICAgfHwgKChzZXJ2aWNlTG9jYXRpb24gPSBiaW5kaW5nVGVtcGxhdGUuZ2V0QWNjZXNzUG9pbnQoKS5nZXRUZXh0KCkpCi0gICAgICAgID09IG51bGwpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgPQotICAgICAgICAiVGhlIGJpbmRpbmdUZW1wYXRlIGtleSBpczogWyIKLSAgICAgICAgICArIGJpbmRpbmdUZW1wbGF0ZS5nZXRCaW5kaW5nS2V5KCkKLSAgICAgICAgICArICJdLiI7Ci0gICAgfQotCi0gICAgLy8gRWxzZSBzYXZlIHRoZSBzZXJ2aWNlIGxvY2F0aW9uIGluIHRoZSBhc3NlcnRpb24gcmVzdWx0Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIFNhdmUgc2VydmljZSBsb2NhdGlvbiBpbiBhbmFseXplciBjb250ZXh0Ci0gICAgICBlbnRyeUNvbnRleHQKLSAgICAgICAgLmdldEFuYWx5emVyQ29udGV4dCgpCi0gICAgICAgIC5nZXRTZXJ2aWNlUmVmZXJlbmNlKCkKLSAgICAgICAgLnNldFNlcnZpY2VMb2NhdGlvbigKLSAgICAgICAgc2VydmljZUxvY2F0aW9uKTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbE1lc3NhZ2UpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC91ZGRpL0JQMzAwMy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC91ZGRpL0JQMzAwMy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OGU3ZDQ4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9CUDMwMDMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLnVkZGk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlVERElVdGlsczsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci0KLQotLyoqCi0gKiBCUDMwMDMgLSBUaGUgdWRkaTp0TW9kZWwgaXMgY2F0ZWdvcml6ZWQgdXNpbmcgdGhlIHVkZGk6dHlwZXMgdGF4b25vbXksCi0gKiBhcyAid3NkbFNwZWMiOiB0aGUgdWRkaTprZXllZFJlZmVyZW5jZSBlbGVtZW50IGhhcyBhbiBhdHRyaWJ1dGUga2V5VmFsdWUKLSAqIGVxdWFsIHRvICJ3c2RsU3BlYyIsIGFuZCBrZXlOYW1lIGVxdWFsIHRvICJ1ZGRpLW9yZzp0eXBlcyIgb3IgInR5cGVzIi4KLSAqLwotcHVibGljIGNsYXNzIEJQMzAwMyBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBVRERJVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBVRERJVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMzAwMyhVRERJVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICAvLyBHZXQgdGhlIHRNb2RlbCBmcm9tIHRoZSBlbnRyeUNvbnRleHQKLSAgICBUTW9kZWwgdE1vZGVsID0gKFRNb2RlbCkgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgIC8vIElmIHRoZSB0TW9kZWwgZG9lcyBub3QgZXhpc3QsIHRoZW4gZmFpbAotICAgIGlmICh0TW9kZWwgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWxNZXNzYWdlID0KLSAgICAgICAgIkNvdWxkIG5vdCBsb2NhdGUgYSB0TW9kZWwgd2l0aCBhIGNhdGVnb3JpemF0aW9uIG9mICd3c2RsU3BlYycuIjsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGVyZSBpcyBhIHRNb2RlbCBhbmQgaXQgaXMgbm90IGNhdGVnb3JpemVkIGFzICJ3c2RsU3BlYyIsIHRoZW4gZmFpbAotICAgIGVsc2UgaWYgKCEoVURESVV0aWxzLmlzV3NkbFNwZWModE1vZGVsKSkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsTWVzc2FnZSA9Ci0gICAgICAgICJUaGUgdE1vZGVsIGtleSBpczogWyIKLSAgICAgICAgICArIHRNb2RlbC5nZXRUTW9kZWxLZXkoKQotICAgICAgICAgICsgIl1cbiIKLSAgICAgICAgICArICJUaGUgY2F0ZWdvcnlCYWcgaXM6IFsiCi0gICAgICAgICAgKyB0aGlzLnZhbGlkYXRvci5jYXRlZ29yeUJhZ1RvU3RyaW5nKHRNb2RlbC5nZXRDYXRlZ29yeUJhZygpKQotICAgICAgICAgICsgIl0iOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsTWVzc2FnZSk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3VkZGkvVURESVZhbGlkYXRvckltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9VRERJVmFsaWRhdG9ySW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNGJjOWVhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9VRERJVmFsaWRhdG9ySW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLnVkZGk7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLm5ldC5Vbmtub3duSG9zdEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLldTRExFeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5BbmFseXplckNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLlNlcnZpY2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5BbmFseXplckNvbmZpZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLlVERElSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5XU0RMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLmltcGwuV1NETEVsZW1lbnRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlByb2ZpbGVBcnRpZmFjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5Qcm9maWxlQXNzZXJ0aW9uczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLlVERElWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLldTRExWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5FbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydEFydGlmYWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRW50cnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlVERElVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5VdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC5XU0RMRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnVkZGk0ai5jbGllbnQuVURESVByb3h5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYmluZGluZy5CaW5kaW5nVGVtcGxhdGU7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuQmluZGluZ0RldGFpbDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlRNb2RlbERldGFpbDsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuQ2F0ZWdvcnlCYWc7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLktleWVkUmVmZXJlbmNlOwotCi1pbXBvcnQgY29tLmlibS53c2RsLnV0aWwuU3RyaW5nVXRpbHM7Ci0KLS8qKgotICogVGhlIFVEREkgdmFsaWRhdG9yIHdpbGwgdmVyaWZ5IHRoYXQgYSB3ZWIgc2VydmljZSBkZXNjcmlwdGlvbiB3YXMgcHVibGlzaGVkIGNvcnJlY3RseSBpbiBhIFVEREkgcmVnaXN0cnkuCi0gKgotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgVURESVZhbGlkYXRvckltcGwKLSAgZXh0ZW5kcyBCYXNlVmFsaWRhdG9ySW1wbAotICBpbXBsZW1lbnRzIFVERElWYWxpZGF0b3IKLXsKLSAgLyoqCi0gICAqIFVEREkgcmVmZXJlbmNlLgotICAgKi8KLSAgcHJvdGVjdGVkIFVERElSZWZlcmVuY2UgdWRkaVJlZmVyZW5jZTsKLSAgLyoqCi0gICAqIFVEREkgcHJveHkuCi0gICAqLwotICBwcm90ZWN0ZWQgVURESVByb3h5IHVkZGlQcm94eTsKLSAgcHJpdmF0ZSBib29sZWFuIHRlc3RhYmxlOwotCi0gIC8qKgotICAgKiBHZXQgdGhlIGFydGlmYWN0IHR5cGUgdGhhdCB0aGlzIHZhbGlkYXRvciBhcHBsaWVzIHRvLgotICAgKiBAcmV0dXJuIHRoZSBhcnRpZmFjdCB0eXBlIChhIFN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0QXJ0aWZhY3RUeXBlKCkgewotICAgICAgcmV0dXJuIFRZUEVfRElTQ09WRVJZOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgY29sbGVjdGlvbiBvZiBlbnRyeSB0eXBlcyB0aGF0IHRoaXMgdmFsaWRhdG9yIGFwcGxpZXMgdG8uCi0gICAqIEByZXR1cm4gYW4gYXJyYXkgb2YgZW50cnkgdHlwZXMgKFN0cmluZ3MpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nW10gZ2V0RW50cnlUeXBlcygpIHsKLSAgICAgIHJldHVybiBuZXcgU3RyaW5nW10gewotICAgICAgICAgICAgICBUWVBFX0RJU0NPVkVSWV9CSU5ESU5HVEVNUExBVEUsCi0gICAgICAgICAgICAgIFRZUEVfRElTQ09WRVJZX1RNT0RFTH07Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIGluaXQoCi0gICAgICAgICAgQW5hbHl6ZXJDb250ZXh0IGFuYWx5emVyQ29udGV4dCwKLSAgICAgICAgICBQcm9maWxlQXNzZXJ0aW9ucyBhc3NlcnRpb25zLAotICAgICAgICAgIFJlcG9ydEFydGlmYWN0IHJlcG9ydEFydGlmYWN0LAotICAgICAgICAgIEFuYWx5emVyQ29uZmlnIGFuYWx5emVyQ29uZmlnLAotICAgICAgICAgIFJlcG9ydGVyIHJlcG9ydGVyKQotICAgICAgICAgIHRocm93cyBXU0lFeGNlcHRpb24gewotICAgICAgc3VwZXIuaW5pdChhbmFseXplckNvbnRleHQsCi0gICAgICAgICAgICAgIGFzc2VydGlvbnMuZ2V0QXJ0aWZhY3QoVFlQRV9ESVNDT1ZFUlkpLCByZXBvcnRBcnRpZmFjdCwgcmVwb3J0ZXIpOwotICAgICAgdGhpcy51ZGRpUmVmZXJlbmNlID0gYW5hbHl6ZXJDb25maWcuZ2V0VURESVJlZmVyZW5jZSgpOwotICAgICAgdGVzdGFibGUgPSBhbmFseXplckNvbmZpZy5pc1VERElSZWZlcmVuY2VTZXQoKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuVURESVZhbGlkYXRvciNpbml0KG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5BbmFseXplckNvbnRleHQsIG9yZy53c2kudGVzdC5wcm9maWxlLlByb2ZpbGVBcnRpZmFjdCwgb3JnLndzaS50ZXN0LnJlcG9ydC5SZXBvcnRBcnRpZmFjdCwgb3JnLndzaS50ZXN0LmFuYWx5emVyLmNvbmZpZy5VRERJUmVmZXJlbmNlLCBvcmcud3NpLnRlc3QucmVwb3J0LlJlcG9ydGVyKQotICAgKi8KLSAgcHVibGljIHZvaWQgaW5pdCgKLSAgICBBbmFseXplckNvbnRleHQgYW5hbHl6ZXJDb250ZXh0LAotICAgIFByb2ZpbGVBcnRpZmFjdCBwcm9maWxlQXJ0aWZhY3QsCi0gICAgUmVwb3J0QXJ0aWZhY3QgcmVwb3J0QXJ0aWZhY3QsCi0gICAgVURESVJlZmVyZW5jZSB1ZGRpUmVmZXJlbmNlLAotICAgIFJlcG9ydGVyIHJlcG9ydGVyKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEJhc2VWYWxpZGF0b3JJbXBsCi0gICAgc3VwZXIuaW5pdChhbmFseXplckNvbnRleHQsIHByb2ZpbGVBcnRpZmFjdCwgcmVwb3J0QXJ0aWZhY3QsIHJlcG9ydGVyKTsKLQotICAgIEFuYWx5emVyQ29uZmlnIGFuYWx5emVyQ29uZmlnID0gVXRpbHMuZ2V0QW5hbHl6ZXJDb25maWcocmVwb3J0ZXIpOwotICAgIHRlc3RhYmxlID0gKChhbmFseXplckNvbmZpZyAhPSBudWxsKSAmJiAoYW5hbHl6ZXJDb25maWcuaXNVRERJUmVmZXJlbmNlU2V0KCkpKTsJCi0KLSAgICAvLyBTYXZlIGlucHV0IHJlZmVyZW5jZXMKLSAgICB0aGlzLnVkZGlSZWZlcmVuY2UgPSB1ZGRpUmVmZXJlbmNlOwotICB9Ci0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuVURESVZhbGlkYXRvciN2YWxpZGF0ZSgpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2YWxpZGF0ZUFydGlmYWN0KCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgRW50cnkgZW50cnkgPSBudWxsOwotCi0gICAgQmluZGluZ1RlbXBsYXRlIGJpbmRpbmdUZW1wbGF0ZSA9IG51bGw7Ci0gICAgVE1vZGVsIHRNb2RlbCA9IG51bGw7Ci0KLSAgICAvLyBpdCBkZXByaWNhdGVkIGFmdGVyIHJlZmFjdG9yaW5nIAotICAgIC8vIG5vdyB0aGUgaW5uZXIgY2xhc3NlcyBtb3ZlZCBvdXQgZnJvbSB2YWxpZGF0b3IKLSAgICAvL1N0cmluZyBjbGFzc1ByZWZpeCA9IHRoaXMuZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKyAiJCI7Ci0gICAgU3RyaW5nIGNsYXNzUHJlZml4ID0gdGhpcy5nZXRDbGFzcygpLmdldFBhY2thZ2UoKS5nZXROYW1lKCkrIi4iOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gU2V0IHVwIGEgcmVmZXJlbmNlIHRvIHRoZSBVRERJIHJlZ2lzdHJ5Ci0gICAgICB1ZGRpUHJveHkgPSBuZXcgVURESVByb3h5KCk7Ci0KLSAgICAgIC8vbmV3IFNvY2tldChuZXcgSW5ldEFkZHJlc3ModWRkaVJlZmVyZW5jZS5nZXRJbnF1aXJ5VVJMKCkpKTsKLSAgICAgIHVkZGlQcm94eS5zZXRJbnF1aXJ5VVJMKHVkZGlSZWZlcmVuY2UuZ2V0SW5xdWlyeVVSTCgpKTsKLSAgICAgIGJvb2xlYW4gd2FzRXggPSBmYWxzZTsKLSAgICAgIElucHV0U3RyZWFtIHN0cmVhbTsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBVUkwgdXJsID0gU3RyaW5nVXRpbHMuZ2V0VVJMKG51bGwsIHVkZGlSZWZlcmVuY2UuZ2V0SW5xdWlyeVVSTCgpKTsKLSAgICAgICAgc3RyZWFtID0gdXJsLm9wZW5TdHJlYW0oKTsKLSAgICAgICAgc3RyZWFtLmNsb3NlKCk7Ci0gICAgICB9Ci0KLSAgICAgIGNhdGNoIChVbmtub3duSG9zdEV4Y2VwdGlvbiBleCkKLSAgICAgIHsKLSAgICAgICAgd2FzRXggPSB0cnVlOwotICAgICAgfQotCi0gICAgICBjYXRjaCAoSU9FeGNlcHRpb24gZXgpCi0gICAgICB7Ci0gICAgICB9Ci0KLSAgICAgIGlmICghd2FzRXgpCi0gICAgICB7Ci0KLSAgICAgICAgLy8gSWYgdGhlIFVEREkgcmVmZXJlbmNlIGlzIHRvIGEgYmluZGluZ1RlbXBsYXRlIHRoZW4gZ2V0IGl0Ci0gICAgICAgIGlmICh1ZGRpUmVmZXJlbmNlLmdldEtleVR5cGUoKS5lcXVhbHMoVURESVJlZmVyZW5jZS5CSU5ESU5HX0tFWSkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXQgYmluZGluZyBkZXRhaWwgd2hpY2ggd2lsbCBjb250YWluIHRoZSBiaW5kaW5nVGVtcGxhdGUKLSAgICAgICAgICBCaW5kaW5nRGV0YWlsIGJpbmRpbmdEZXRhaWwgPQotICAgICAgICAgICAgdWRkaVByb3h5LmdldF9iaW5kaW5nRGV0YWlsKHVkZGlSZWZlcmVuY2UuZ2V0S2V5KCkpOwotCi0gICAgICAgICAgLy8gR2V0IGJpbmRpbmdUZW1wbGF0ZQotICAgICAgICAgIGJpbmRpbmdUZW1wbGF0ZSA9Ci0gICAgICAgICAgICAoQmluZGluZ1RlbXBsYXRlKSBiaW5kaW5nRGV0YWlsCi0gICAgICAgICAgICAgIC5nZXRCaW5kaW5nVGVtcGxhdGVWZWN0b3IoKQotICAgICAgICAgICAgICAuZWxlbWVudEF0KAotICAgICAgICAgICAgICAwKTsKLQotICAgICAgICAgIGlmICh2ZXJib3NlT3B0aW9uKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigKLSAgICAgICAgICAgICAgIiAgICBCaW5kaW5nVGVtcGxhdGUgLSAiCi0gICAgICAgICAgICAgICAgKyBVRERJVXRpbHMuYmluZGluZ1RlbXBsYXRlVG9TdHJpbmcoYmluZGluZ1RlbXBsYXRlKSk7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgLy8gR2V0IHRoZSB3c2RsU3BlYyB0TW9kZWwKLSAgICAgICAgICB0TW9kZWwgPSBVRERJVXRpbHMuZmluZFRNb2RlbCh1ZGRpUHJveHksIGJpbmRpbmdUZW1wbGF0ZSwKLSAgICAgICAgICAgICAgICAgIHZlcmJvc2VPcHRpb24pOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRWxzZSBpdCBoYXMgdG8gYmUgYSB0TW9kZWwKLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgVE1vZGVsRGV0YWlsIHRNb2RlbERldGFpbCA9Ci0gICAgICAgICAgICB1ZGRpUHJveHkuZ2V0X3RNb2RlbERldGFpbCh1ZGRpUmVmZXJlbmNlLmdldEtleSgpKTsKLSAgICAgICAgICB0TW9kZWwgPSAoVE1vZGVsKSB0TW9kZWxEZXRhaWwuZ2V0VE1vZGVsVmVjdG9yKCkuZWxlbWVudEF0KDApOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHZlcmJvc2VPcHRpb24pCi0gICAgICAgIHsKLSAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oCi0gICAgICAgICAgICAiICAgIFRNb2RlbCBzcGVjaWZpZWQgb3IgZm91bmQgaW4gYmluZGluZ1RlbXBsYXRlIC0gIgotICAgICAgICAgICAgICArIFVERElVdGlscy50TW9kZWxUb1N0cmluZyh0TW9kZWwpKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAoYmluZGluZ1RlbXBsYXRlID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHNldE1pc3NpbmdJbnB1dCgKLSAgICAgICAgICBFbnRyeVR5cGUuZ2V0RW50cnlUeXBlKFRZUEVfRElTQ09WRVJZX0JJTkRJTkdURU1QTEFURSkpOwotICAgICAgfQotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBhIGJpbmRpbmdUZW1wbGF0ZSwgdGhlbiBwcm9jZXNzIHRlc3QgYXNzZXJ0aW9ucyBmb3IgaXQKLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gQ3JlYXRlIGVudHJ5Ci0gICAgICAgIGVudHJ5ID0gdGhpcy5yZXBvcnRlci5nZXRSZXBvcnQoKS5jcmVhdGVFbnRyeSgpOwotICAgICAgICBlbnRyeS5zZXRFbnRyeVR5cGUoCi0gICAgICAgICAgRW50cnlUeXBlLmdldEVudHJ5VHlwZShUWVBFX0RJU0NPVkVSWV9CSU5ESU5HVEVNUExBVEUpKTsKLSAgICAgICAgZW50cnkuc2V0UmVmZXJlbmNlSUQoYmluZGluZ1RlbXBsYXRlLmdldEJpbmRpbmdLZXkoKSk7Ci0gICAgICAgIGVudHJ5LnNldEVudHJ5RGV0YWlsKGJpbmRpbmdUZW1wbGF0ZSk7Ci0KLSAgICAgICAgLy8gUHJvY2VzcyB0ZXN0IGFzc2VydGlvbnMKLSAgICAgICAgcHJvY2Vzc0Fzc2VydGlvbnMoCi0gICAgICAgICAgY2xhc3NQcmVmaXgsCi0gICAgICAgICAgbmV3IEVudHJ5Q29udGV4dChlbnRyeSwgdGhpcy5hbmFseXplckNvbnRleHQpKTsKLSAgICAgIH0KLQotICAgICAgLy8gTk9URTogRnJvbSB0aGlzIHBvaW50IGZvcndhcmQsIGlmIGEgYmluZGluZ1RlbXBsYXRlIGRvZXMgTk9UIGhhdmUgYSB3c2RsU3BlYyB0TW9kZWwsCi0gICAgICAvLyAgICAgICB0aGUgdE1vZGVsIHdpbGwgYmUgTlVMTC4KLQotICAgICAgLy8gQ3JlYXRlIGVudHJ5Ci0gICAgICBlbnRyeSA9IHRoaXMucmVwb3J0ZXIuZ2V0UmVwb3J0KCkuY3JlYXRlRW50cnkoKTsKLSAgICAgIGVudHJ5LnNldEVudHJ5VHlwZSgKLSAgICAgICAgRW50cnlUeXBlLmdldEVudHJ5VHlwZShUWVBFX0RJU0NPVkVSWV9UTU9ERUwpKTsKLSAgICAgIGVudHJ5LnNldFJlZmVyZW5jZUlEKAotICAgICAgICAodE1vZGVsID09IG51bGwgPyAiW3RNb2RlbF0iIDogdE1vZGVsLmdldFRNb2RlbEtleSgpKSk7Ci0gICAgICBlbnRyeS5zZXRFbnRyeURldGFpbCh0TW9kZWwpOwotCi0gICAgICAvLyBQcm9jZXNzIHRlc3QgYXNzZXJ0aW9ucwotICAgICAgcHJvY2Vzc0Fzc2VydGlvbnMoCi0gICAgICAgIGNsYXNzUHJlZml4LAotICAgICAgICBuZXcgRW50cnlDb250ZXh0KGVudHJ5LCB0aGlzLmFuYWx5emVyQ29udGV4dCkpOwotICAgIH0KLQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBUaHJvdyBXU0lFeGNlcHRpb24KLSAgICAgIGlmIChlIGluc3RhbmNlb2YgV1NJRXhjZXB0aW9uKQotICAgICAgICB0aHJvdyAoV1NJRXhjZXB0aW9uKSBlOwotICAgICAgZWxzZQotICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKAotICAgICAgICAgICJBbiBleGNlcHRpb24gb2NjdXJyZWQgd2hpbGUgcHJvY2Vzc2luZyB0aGUgZGlzY292ZXJ5IHRlc3QgYXNzZXJ0aW9ucy4iLAotICAgICAgICAgIGUpOwotICAgIH0KLQotICAgIC8vIENsZWFudXAKLSAgICBjbGVhbnVwKCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLlVERElWYWxpZGF0b3IjdmFsaWRhdGUoKQotICAgKi8KLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSB2YWxpZGF0ZUFydGlmYWN0KCkuICovCi0gIHB1YmxpYyBTdHJpbmcgdmFsaWRhdGUoKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB2YWxpZGF0ZUFydGlmYWN0KCk7Ci0gICAgLy8gR2V0IFdTREwgbG9jYXRpb24KLSAgICByZXR1cm4gdGhpcy5hbmFseXplckNvbnRleHQuZ2V0U2VydmljZVJlZmVyZW5jZSgpLmdldFdTRExMb2NhdGlvbigpOwotICB9Ci0gIAotICAvKioKLSAgICogU2V0IFdTREwgYmluZGluZyBpbiB0aGUgc2VydmljZSByZWZlcmVuY2UgcG9ydGlvbiBvZiB0aGUgYW5hbHl6ZXIgY29udGV4dC4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldFdTRExCaW5kaW5nKEJpbmRpbmcgYmluZGluZykKLSAgewotICAgIFN0cmluZyBiaW5kaW5nTmFtZSA9Ci0gICAgICBiaW5kaW5nID09IG51bGwgPyBudWxsIDogYmluZGluZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotICAgIFN0cmluZyBuYW1lc3BhY2UgPQotICAgICAgYmluZGluZyA9PSBudWxsID8gbnVsbCA6IGJpbmRpbmcuZ2V0UU5hbWUoKS5nZXROYW1lc3BhY2VVUkkoKTsKLQotICAgIC8vIFNldCB0aGUgV1NETCBkb2N1bWVudCBsb2NhdGlvbiBpbiBhbmFseXplckNvbnRleHQKLSAgICBTZXJ2aWNlUmVmZXJlbmNlIHNlcnZpY2VSZWZlcmVuY2UgPQotICAgICAgdGhpcy5hbmFseXplckNvbnRleHQuZ2V0U2VydmljZVJlZmVyZW5jZSgpOwotCi0gICAgLy8gSWYgdGhlIHdzZGxFbGVtZW50IGRvZXMgbm90IGV4aXN0LCB0aGVuIHNldCBpdAotICAgIFdTRExFbGVtZW50IHdzZGxFbGVtZW50OwotICAgIGlmICgod3NkbEVsZW1lbnQgPSBzZXJ2aWNlUmVmZXJlbmNlLmdldFdTRExFbGVtZW50KCkpID09IG51bGwpCi0gICAgewotICAgICAgLy8gR2V0IHRoZSBXU0RMIGJpbmRpbmcgZnJvbSB0aGUgb3ZlcnZpZXdVUkwgYW5kIHNldCBpbiBhbmFseXplckNvbnRleHQKLSAgICAgIHdzZGxFbGVtZW50ID0gbmV3IFdTRExFbGVtZW50SW1wbCgpOwotICAgICAgd3NkbEVsZW1lbnQuc2V0TmFtZShiaW5kaW5nTmFtZSk7Ci0gICAgICB3c2RsRWxlbWVudC5zZXROYW1lc3BhY2UobmFtZXNwYWNlKTsKLSAgICAgIHdzZGxFbGVtZW50LnNldFR5cGUoV1NETFZhbGlkYXRvci5UWVBFX0RFU0NSSVBUSU9OX0JJTkRJTkcpOwotICAgIH0KLQotICAgIC8vIFNldCB0aGUgd3NkbEVsZW1lbnQgaW4gdGhlIHNlcnZpY2UgcmVmZXJlbmNlCi0gICAgc2VydmljZVJlZmVyZW5jZS5zZXRXU0RMRWxlbWVudCh3c2RsRWxlbWVudCk7Ci0KLSAgICAvLyBTZXQgdGhlIHNlcnZpY2UgcmVmZXJlbmNlIGJhY2sgaW50byB0aGUgYW5hbHl6ZXJDb250ZXh0Ci0gICAgYW5hbHl6ZXJDb250ZXh0LnNldFNlcnZpY2VSZWZlcmVuY2Uoc2VydmljZVJlZmVyZW5jZSk7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IHRoZSBXU0RMIGxvY2F0aW9uIGluIHRoZSBzZXJ2aWNlIHJlZmVyZW5jZSBwb3J0aW9uIG9mIHRoZSBhbmFseXplciBjb250ZXh0LgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc2V0V1NETExvY2F0aW9uKFN0cmluZyB3c2RsVVJMKQotICB7Ci0gICAgLy8gU2V0IHRoZSBXU0RMIGRvY3VtZW50IGxvY2F0aW9uIGluIGFuYWx5emVyQ29udGV4dAotICAgIFNlcnZpY2VSZWZlcmVuY2Ugc2VydmljZVJlZmVyZW5jZSA9Ci0gICAgICB0aGlzLmFuYWx5emVyQ29udGV4dC5nZXRTZXJ2aWNlUmVmZXJlbmNlKCk7Ci0gICAgc2VydmljZVJlZmVyZW5jZS5zZXRXU0RMTG9jYXRpb24od3NkbFVSTCk7Ci0KLSAgICAvLyBTZXQgdGhlIHNlcnZpY2UgcmVmZXJlbmNlIGJhY2sgaW50byB0aGUgYW5hbHl6ZXJDb250ZXh0Ci0gICAgYW5hbHl6ZXJDb250ZXh0LnNldFNlcnZpY2VSZWZlcmVuY2Uoc2VydmljZVJlZmVyZW5jZSk7Ci0gIH0KLQotICAgLyoqCi0gICAqIERldGVybWluZSBpZiB0aGlzIGlzIGEgd3NkbFNwZWMgdE1vZGVsLgotICAgKiBAZGVwcmVjYXRlZCAtLSB1c2UgVURESVV0aWxzLmlzV3NkbFNwZWMoU3RyaW5nIHdzZGxMb2NhdGlvbikuCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiBpc1dzZGxTcGVjKFRNb2RlbCB0TW9kZWwpCi0gIHsKLSAgICBib29sZWFuIHRNb2RlbEZvdW5kID0gZmFsc2U7Ci0gICAgQ2F0ZWdvcnlCYWcgY2F0ZWdvcnlCYWcgPSBudWxsOwotICAgIEl0ZXJhdG9yIGNhdGVnb3J5QmFnSXRlcmF0b3IgPSBudWxsOwotCi0gICAgLy8gRGV0ZXJtaW5lIGlmIHRoZSBjYXRldGdvcnlCYWcgY29udGFpbnMgd3NkbFNwZWMKLSAgICBpZiAoKGNhdGVnb3J5QmFnID0gdE1vZGVsLmdldENhdGVnb3J5QmFnKCkpICE9IG51bGwpCi0gICAgewotICAgICAgLy8gR2V0IHRoZSBsaXN0IG9mIGtleWVkIHJlZmVyZW5jZXMKLSAgICAgIGNhdGVnb3J5QmFnSXRlcmF0b3IgPSBjYXRlZ29yeUJhZy5nZXRLZXllZFJlZmVyZW5jZVZlY3RvcigpLml0ZXJhdG9yKCk7Ci0KLSAgICAgIEtleWVkUmVmZXJlbmNlIGtleWVkUmVmZXJlbmNlID0gbnVsbDsKLQotICAgICAgLy8gR28gdGhyb3VnaCB0aGUgbGlzdCBvZiBrZXllZCByZWZlcmVuY2VzCi0gICAgICB3aGlsZSAoY2F0ZWdvcnlCYWdJdGVyYXRvci5oYXNOZXh0KCkgJiYgISh0TW9kZWxGb3VuZCkpCi0gICAgICB7Ci0gICAgICAgIC8vIEdldCBuZXh0IGtleWVkIHJlZmVyZW5jZQotICAgICAgICBrZXllZFJlZmVyZW5jZSA9IChLZXllZFJlZmVyZW5jZSkgY2F0ZWdvcnlCYWdJdGVyYXRvci5uZXh0KCk7Ci0KLSAgICAgICAgLy8gSWYgdGhpcyBpcyBhIHR5cGVzIHRheG9ub215IHRNb2RlbCBhbmQgdGhlIHZhbHVlIGlzIHdzZGxTcGVjLCB0aGVuIHRoaXMgaXMgdGhlIHRNb2RlbCB3ZSB3YW50Ci0gICAgICAgIC8vIFJFTU9WRTogSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBjaGVjayB0aGUga2V5IG5hbWUKLSAgICAgICAgLy9pZiAoa2V5ZWRSZWZlcmVuY2UuZ2V0VE1vZGVsS2V5KCkuZXF1YWxzSWdub3JlQ2FzZShUTW9kZWwuVFlQRVNfVE1PREVMX0tFWSkgJiYKLSAgICAgICAgLy8gICAid3NkbFNwZWMiLmVxdWFscyhrZXllZFJlZmVyZW5jZS5nZXRLZXlWYWx1ZSgpKSAmJgotICAgICAgICAvLyAgICgidHlwZXMiLmVxdWFscyhrZXllZFJlZmVyZW5jZS5nZXRLZXlOYW1lKCkpIHx8Ci0gICAgICAgIC8vICAgICJ1ZGRpLW9yZzp0eXBlcyIuZXF1YWxzKGtleWVkUmVmZXJlbmNlLmdldEtleU5hbWUoKSkpKSB7Ci0gICAgICAgIC8vICB0TW9kZWxGb3VuZCA9IHRydWU7Ci0gICAgICAgIC8vfQotICAgICAgICBpZiAoa2V5ZWRSZWZlcmVuY2UKLSAgICAgICAgICAuZ2V0VE1vZGVsS2V5KCkKLSAgICAgICAgICAuZXF1YWxzSWdub3JlQ2FzZShUTW9kZWwuVFlQRVNfVE1PREVMX0tFWSkKLSAgICAgICAgICAmJiAid3NkbFNwZWMiLmVxdWFscyhrZXllZFJlZmVyZW5jZS5nZXRLZXlWYWx1ZSgpKSkKLSAgICAgICAgewotICAgICAgICAgIHRNb2RlbEZvdW5kID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0TW9kZWxGb3VuZDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgYW4gT3ZlcnZpZXdVUkwgZnJvbSB0TW9kZWwuCi0gICAqIEBkZXByZWNhdGVkIC0tIHVzZSBVRERJVXRpbHMuZ2V0T3ZlcnZpZXdVUkwoU3RyaW5nIHdzZGxMb2NhdGlvbikuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGdldE92ZXJ2aWV3VVJMKFRNb2RlbCB0TW9kZWwpCi0gIHsKLSAgICBpZiAodE1vZGVsICE9IG51bGwKLSAgICAgICYmIHRNb2RlbC5nZXRPdmVydmlld0RvYygpICE9IG51bGwKLSAgICAgICYmIHRNb2RlbC5nZXRPdmVydmlld0RvYygpLmdldE92ZXJ2aWV3VVJMKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gdE1vZGVsLmdldE92ZXJ2aWV3RG9jKCkuZ2V0T3ZlcnZpZXdVUkwoKS5nZXRUZXh0KCk7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBXU0RMIGRvY3VtZW50LgotICAgKiBAZGVwcmVjYXRlZCAtLSB1c2UgVURESVV0aWxzLmdldFdTRExMb2NhdGlvbihTdHJpbmcgd3NkbExvY2F0aW9uKS4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0V1NETExvY2F0aW9uKFN0cmluZyB3c2RsTG9jYXRpb24pCi0gIHsKLSAgICBpbnQgaW5kZXg7Ci0KLSAgICAvLyBDaGVjayBpZiB0aGUgb3ZlcnZpZXdVUkwgY29udGFpbnMgYSBmcmFnbWVudCBpZGVudGlmaWVyCi0gICAgaWYgKChpbmRleCA9IHdzZGxMb2NhdGlvbi5pbmRleE9mKCIjIikpID4gLTEpCi0gICAgewotICAgICAgd3NkbExvY2F0aW9uID0gd3NkbExvY2F0aW9uLnN1YnN0cmluZygwLCBpbmRleCk7Ci0gICAgfQotICAgIHJldHVybiB3c2RsTG9jYXRpb247Ci0gIH0KLSAKLSAgLyoqCi0gICAqIEdldCBXU0RMIGRvY3VtZW50LgotICAgKi8KLSAgcHJvdGVjdGVkIFdTRExEb2N1bWVudCBnZXRXU0RMRG9jdW1lbnQoU3RyaW5nIHdzZGxMb2NhdGlvbikKLSAgICB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4gbmV3IFdTRExEb2N1bWVudChVRERJVXRpbHMuZ2V0V1NETExvY2F0aW9uKHdzZGxMb2NhdGlvbikpOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBXU0RMIGJpbmRpbmcgZnJvbSB0aGUgb3ZlcnZpZXdVUkwgaW4gdGhlIHRNb2RlbC4KLSAgICovCi0gIHByb3RlY3RlZCBCaW5kaW5nIGdldEJpbmRpbmcoU3RyaW5nIG92ZXJ2aWV3VVJMLCBXU0RMRG9jdW1lbnQgd3NkbERvY3VtZW50KQotICB7Ci0gICAgaW50IGluZGV4OwotICAgIGludCBuYW1lSW5kZXg7Ci0KLSAgICBCaW5kaW5nW10gYmluZGluZ3MgPSB3c2RsRG9jdW1lbnQuZ2V0QmluZGluZ3MoKTsKLSAgICBpZiAoYmluZGluZ3MgPT0gbnVsbCB8fCBiaW5kaW5ncy5sZW5ndGggPT0gMCkKLSAgICAgIHJldHVybiBudWxsOwotCi0gICAgaWYgKG92ZXJ2aWV3VVJMICE9IG51bGwpCi0gICAgewotICAgICAgLy8gQ2hlY2sgaWYgdGhlIG92ZXJ2aWV3VVJMIGNvbnRhaW5zIGEgZnJhZ21lbnQgaWRlbnRpZmllcgotICAgICAgaWYgKChpbmRleCA9IG92ZXJ2aWV3VVJMLmluZGV4T2YoIiMiKSkgPiAtMSkKLSAgICAgIHsKLSAgICAgICAgLy8gVEVNUDogTmVlZCB0byB1c2UgYSByZWFsIFhQYXRoIGV2YWx1YXRvciBsaWtlIFhhbGFuCi0gICAgICAgIFN0cmluZyBuYW1lQXR0cmlidXRlID0gIkBuYW1lPSI7Ci0KLSAgICAgICAgLy8gTG9jYXRlIG5hbWUgcmVmZXJlbmNlCi0gICAgICAgIGlmICgobmFtZUluZGV4ID0KLSAgICAgICAgICBvdmVydmlld1VSTC5zdWJzdHJpbmcoaW5kZXggKyAxKS5pbmRleE9mKG5hbWVBdHRyaWJ1dGUpKQotICAgICAgICAgID4gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXQgdGhlIG5leHQgY2hhcmFjdGVyIHdoaWNoIHNob3VsZCBiZSBhIHF1b3RlCi0gICAgICAgICAgaW50IGZpcnN0UXVvdGVJbmRleCA9IGluZGV4ICsgMSArIG5hbWVJbmRleCArIG5hbWVBdHRyaWJ1dGUubGVuZ3RoKCk7Ci0gICAgICAgICAgU3RyaW5nIHF1b3RlID0KLSAgICAgICAgICAgIG92ZXJ2aWV3VVJMLnN1YnN0cmluZyhmaXJzdFF1b3RlSW5kZXgsIGZpcnN0UXVvdGVJbmRleCArIDEpOwotCi0gICAgICAgICAgLy8gR2V0IHRoZSBwYXJ0IG9mIHRoZSBVUkwgd2hpY2ggc2hvdWxkIGNvbnRhaW4gdGhlIGJpbmRpbmcgbmFtZQotICAgICAgICAgIFN0cmluZyB1cmxQYXJ0ID0gb3ZlcnZpZXdVUkwuc3Vic3RyaW5nKGZpcnN0UXVvdGVJbmRleCArIDEpOwotCi0gICAgICAgICAgLy8gRmluZCB0aGUgbmV4dCBxdW90ZQotICAgICAgICAgIGludCBuZXh0UXVvdGVJbmRleDsKLSAgICAgICAgICBpZiAoKG5leHRRdW90ZUluZGV4ID0gdXJsUGFydC5pbmRleE9mKHF1b3RlKSkgPiAtMSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgYmluZGluZ05hbWUgPSB1cmxQYXJ0LnN1YnN0cmluZygwLCBuZXh0UXVvdGVJbmRleCk7Ci0gICAgICAgICAgICAvL2xvb2sgZm9yIGJpbmRpbmcgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYmluZGluZ3MubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlmIChiaW5kaW5nTmFtZS5lcXVhbHMoYmluZGluZ3NbaV0uZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGJpbmRpbmdzW2ldOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBiaW5kaW5nc1swXTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGNhdGVnb3J5QmFnLgotICAgKiBAcGFyYW0gY2F0ZWdvcnlCYWcgYSBDYXRlZ29yeUJhZyBvYmplY3QuCi0gICAqIEByZXR1cm4gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGNhdGVnb3J5QmFnLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBjYXRlZ29yeUJhZ1RvU3RyaW5nKENhdGVnb3J5QmFnIGNhdGVnb3J5QmFnKQotICB7Ci0gICAgU3RyaW5nIHRvU3RyaW5nID0gIiI7Ci0KLSAgICBpZiAoY2F0ZWdvcnlCYWcgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBWZWN0b3Iga2V5ZWRSZWZlcmVuY2VMaXN0ID0gbnVsbDsKLSAgICAgIGlmICgoKGtleWVkUmVmZXJlbmNlTGlzdCA9IGNhdGVnb3J5QmFnLmdldEtleWVkUmVmZXJlbmNlVmVjdG9yKCkpCi0gICAgICAgID09IG51bGwpCi0gICAgICAgIHx8IChrZXllZFJlZmVyZW5jZUxpc3Quc2l6ZSgpID09IDApKQotICAgICAgewotICAgICAgICB0b1N0cmluZyArPSAiTm8gS2V5ZWRSZWZlcmVuY2VzIjsKLSAgICAgIH0KLQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBpbnQgY291bnQgPSAxOwotICAgICAgICBLZXllZFJlZmVyZW5jZSBrZXllZFJlZmVyZW5jZTsKLSAgICAgICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBrZXllZFJlZmVyZW5jZUxpc3QuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIGtleWVkUmVmZXJlbmNlID0gKEtleWVkUmVmZXJlbmNlKSBpdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgICAgdG9TdHJpbmcgKz0gIlxuICBbIgotICAgICAgICAgICAgKyBjb3VudCsrCi0gICAgICAgICAgICArICJdIHRNb2RlbEtleTogIgotICAgICAgICAgICAgKyBrZXllZFJlZmVyZW5jZS5nZXRUTW9kZWxLZXkoKQotICAgICAgICAgICAgKyAiLCBrZXlOYW1lOiAiCi0gICAgICAgICAgICArIGtleWVkUmVmZXJlbmNlLmdldEtleU5hbWUoKQotICAgICAgICAgICAgKyAiLCBrZXlWYWx1ZTogIgotICAgICAgICAgICAgKyBrZXllZFJlZmVyZW5jZS5nZXRLZXlWYWx1ZSgpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICB0b1N0cmluZyA9ICJudWxsIjsKLSAgICB9Ci0KLSAgICByZXR1cm4gdG9TdHJpbmc7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwjaXNQcmltYXJ5RW50cnlUeXBlTWF0Y2gob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIGlzUHJpbWFyeUVudHJ5VHlwZU1hdGNoKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgdGFyZ2V0Q29udGV4dCkKLSAgewotICAgIGJvb2xlYW4gbWF0Y2ggPSBmYWxzZTsKLQotICAgIC8vIElmIHRoZSB0ZXN0IGFzc2VydGlvbiBlbnRyeSB0eXBlIG1hdGNoZXMgdGhlIHRhcmdldCBjb250ZXh0IGVudHJ5IHR5cGUsIHRoZW4gY29udGluZQotICAgIGlmICh0ZXN0QXNzZXJ0aW9uCi0gICAgICAuZ2V0RW50cnlUeXBlTmFtZSgpCi0gICAgICAuZXF1YWxzKHRhcmdldENvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeVR5cGUoKS5nZXRUeXBlTmFtZSgpKSkKLSAgICB7Ci0gICAgICBtYXRjaCA9IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1hdGNoOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsI2lzTm90QXBwbGljYWJsZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uKQotICAgKi8KLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNOb3RBcHBsaWNhYmxlKFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbikKLSAgewotICAgIGJvb2xlYW4gbm90QXBwbGljYWJsZSA9IGZhbHNlOwotCi0gICAgLy8gQUREOgotCi0gICAgcmV0dXJuIG5vdEFwcGxpY2FibGU7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0cnVlIGlmIHRoZXNlIHRlc3RzIHNob3VsZCBiZSBydW4gKGRlcGVuZGluZyBvbiB0aGUgYW5hbHl6ZXIKLSAgICogY29uZmlnKQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gcnVuVGVzdHMoKSB7IHJldHVybiB0ZXN0YWJsZTsgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC91ZGRpL1dTSTMwMDEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9XU0kzMDAxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlNjg0YjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC91ZGRpL1dTSTMwMDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLnVkZGk7Ci0KLS8qKgotICogV1NJMzAwMQotICovCi1wdWJsaWMgY2xhc3MgV1NJMzAwMSBleHRlbmRzIEJQMzAwMQotewotCi0gIC8qKgotICAgKiBAcGFyYW0gVURESVZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kzMDAxKFVERElWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9XU0kzMDAyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3VkZGkvV1NJMzAwMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDhkZDJlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9XU0kzMDAyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC51ZGRpOwotCi0vKioKLSAqIFdTSTMwMDIKLSAqLwotcHVibGljIGNsYXNzIFdTSTMwMDIgZXh0ZW5kcyBCUDMwMDIKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFVERElWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMzAwMihVRERJVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3VkZGkvV1NJMzAwMy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC91ZGRpL1dTSTMwMDMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGViMDE3Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3VkZGkvV1NJMzAwMy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwudWRkaTsKLQotLyoqCi0gKiBXU0kzMDAzCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kzMDAzIGV4dGVuZHMgQlAzMDAzCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBVRERJVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTMwMDMoVURESVZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC91ZGRpL1dTSTMwMDQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9XU0kzMDA0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhMTczYTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC91ZGRpL1dTSTMwMDQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC51ZGRpOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlVERElVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC5XU0RMRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS50bW9kZWwuVE1vZGVsOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5DYXRlZ29yeUJhZzsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuS2V5ZWRSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIFdTSTMwMDQgLSBUaGUgY29uZm9ybWFuY2UgY2xhaW1zIGluIHRoZSB1ZGRpOnRNb2RlbCBhcmUgdGhlIHNhbWUKLSAqIGFzIHRob3NlIGluIHRoZSB3c2RsOmJpbmRpbmcgd2hpY2ggaXMgcmVmZXJlbmNlZCBieSB0aGUgdWRkaTp0TW9kZWwuCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kzMDA0IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBVRERJVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBVRERJVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTMwMDQoVURESVZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQT1JUU19QQVJBTSA9ICJwb3J0cyI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCSU5ESU5HX1BBUkFNID0gImJpbmRpbmciOwotCi0gIC8qKgotICAgKiBHZXRzIFdTSSBjb25mb3JtYW5jZSBjbGFpbXMgZnJvbSBhIHRNb2RlbC4KLSAgICogQHBhcmFtIHRNb2RlbAotICAgKiBAcmV0dXJuIEhhc2hTZXQKLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24KLSAgICovCi0gIHByaXZhdGUgSGFzaFNldCBnZXRDb25mb3JtYW5jZUNsYWltc0Zyb21VRERJKFRNb2RlbCB0TW9kZWwpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIGNvbmZvcm1hbmNlS2V5ID0gVURESVV0aWxzLmdldFdTSUNvbmZvcm1hbmNlVE1vZGVsS2V5KHZhbGlkYXRvci51ZGRpUHJveHkpOwotCi0gICAgSGFzaFNldCByZXN1bHQgPSBuZXcgSGFzaFNldCgpOwotCi0gICAgQ2F0ZWdvcnlCYWcgYmFnID0gdE1vZGVsLmdldENhdGVnb3J5QmFnKCk7Ci0gICAgaWYgKGJhZyAhPSBudWxsKQotICAgIHsKLSAgICAgIFZlY3RvciByZWZlcmVuY2VzID0gYmFnLmdldEtleWVkUmVmZXJlbmNlVmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlZmVyZW5jZXMuc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIEtleWVkUmVmZXJlbmNlIHJlZiA9IChLZXllZFJlZmVyZW5jZSkgcmVmZXJlbmNlcy5nZXQoaSk7Ci0KLSAgICAgICAgaWYgKHJlZi5nZXRUTW9kZWxLZXkoKS5lcXVhbHNJZ25vcmVDYXNlKGNvbmZvcm1hbmNlS2V5KSkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdC5hZGQocmVmLmdldEtleVZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIFdTSSBjb25mb3JtYW5jZSBjbGFpbXMgZnJvbSBXU0RMIGJpbmRpbmcKLSAgICogdGhhdCByZWZlcmVuY2VzIHNwZWNpZmllZCB0TW9kZWwuIEFkZGl0aW9uYWxseSwKLSAgICogV1NETCBwb3J0cywgd2hpY2ggdXNlcyB0aGUgYmluZGluZywgYXJlIHByb2Nlc3NlZC4KLSAgICoKLSAgICogQHBhcmFtIHRNb2RlbAotICAgKiBAcmV0dXJuIEhhc2hTZXQKLSAgICovCi0gIHByaXZhdGUgSGFzaFNldCBnZXRDb25mb3JtYW5jZUNsYWltc0Zyb21XU0RMKFRNb2RlbCB0TW9kZWwpCi0gIHsKLSAgICBIYXNoU2V0IHJlc3VsdCA9IG5ldyBIYXNoU2V0KCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBSZWFkIHRoZSBXU0RMIGRvY3VtZW50Ci0gICAgICBTdHJpbmcgb3ZlcnZpZXdVUkwgPSBVRERJVXRpbHMuZ2V0T3ZlcnZpZXdVUkwodE1vZGVsKTsKLSAgICAgIFdTRExEb2N1bWVudCB3c2RsRG9jdW1lbnQgPSB2YWxpZGF0b3IuZ2V0V1NETERvY3VtZW50KG92ZXJ2aWV3VVJMKTsKLQotICAgICAgLy8gR2V0IGJpbmRpbmcKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IFVERElVdGlscy5nZXRCaW5kaW5nKG92ZXJ2aWV3VVJMLCB3c2RsRG9jdW1lbnQpOwotICAgICAgU3RyaW5nIGJpbmRpbmdOYW1lID0gYmluZGluZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotCi0gICAgICAvLyBHZXQgY2xhaW1zCi0gICAgICByZXN1bHQgPQotICAgICAgICBnZXRDbGFpbXNGcm9tRWxlbWVudChiaW5kaW5nLmdldERvY3VtZW50YXRpb25FbGVtZW50KCksIHJlc3VsdCk7Ci0KLSAgICAgIC8vIEdldCBwb3J0cywgd2hpY2ggcmVmZXJlbmNlIHRoaXMgYmluZGluZywgYmVjYXVzZToKLSAgICAgIC8vICJBIGNsYWltIG9uIGEgd3NkbDpwb3J0IGlzIGluaGVyaXRlZCBieSB0aGUgcmVmZXJlbmNlZCB3c2RsOmJpbmRpbmdzLiIKLSAgICAgIFZlY3RvciBwb3J0cyA9IGdldFBvcnRzKHdzZGxEb2N1bWVudCwgYmluZGluZ05hbWUpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwb3J0cy5zaXplKCk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgUG9ydCBwb3J0ID0gKFBvcnQpIHBvcnRzLmdldChpKTsKLQotICAgICAgICByZXN1bHQgPSBnZXRDbGFpbXNGcm9tRWxlbWVudChwb3J0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCksIHJlc3VsdCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBBREQ6Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIFdTSSBjb25mb3JtYW5jZSBjbGFpbXMgZnJvbSB0aGUgJ2RvY3VtZW50YXRpb24nIFhNTCBlbGVtZW50Ci0gICAqIGFuZCBwdXRzIHRoZW0gaW50byB0aGUgSGFzaFNldC4KLSAgICogQHBhcmFtIGRvY0VsZW1lbnQKLSAgICogQHBhcmFtIHJlc3VsdAotICAgKiBAcmV0dXJuIEhhc2hTZXQKLSAgICovCi0gIHByaXZhdGUgSGFzaFNldCBnZXRDbGFpbXNGcm9tRWxlbWVudChFbGVtZW50IGRvY0VsZW1lbnQsIEhhc2hTZXQgcmVzdWx0KQotICB7Ci0gICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgfQotCi0gICAgaWYgKGRvY0VsZW1lbnQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBFbGVtZW50IGNsYWltRWxlbWVudCA9IFhNTFV0aWxzLmZpbmRDaGlsZEVsZW1lbnQoZG9jRWxlbWVudCwgV1NJX0NMQUlNKTsKLSAgICAgIHdoaWxlIChjbGFpbUVsZW1lbnQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLyoKLSAgICAgICAgTm9kZSBhdHRyID0gWE1MVXRpbHMuZ2V0QXR0cmlidXRlKGNsYWltRWxlbWVudCwgQVRUUl9DTEFJTV9DT05GT1JNU1RPKTsKLSAgICAgICAgaWYgKGF0dHIgIT0gbnVsbCkKLSAgICAgICAgCXJlc3VsdC5hZGQoYXR0ci5nZXROb2RlVmFsdWUoKSk7Ci0gICAgICAgICovCi0gICAgICAgIFN0cmluZyB2YWx1ZSA9Ci0gICAgICAgICAgY2xhaW1FbGVtZW50LmdldEF0dHJpYnV0ZShBVFRSX0NMQUlNX0NPTkZPUk1TVE8uZ2V0TG9jYWxQYXJ0KCkpOwotICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkKLSAgICAgICAgICByZXN1bHQuYWRkKHZhbHVlKTsKLQotICAgICAgICBjbGFpbUVsZW1lbnQgPSBYTUxVdGlscy5maW5kRWxlbWVudChjbGFpbUVsZW1lbnQsIFdTSV9DTEFJTSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIHdzZGw6cG9ydHMsIHdoaWNoIHVzZSBzcGVjaWZpZWQgYmluZGluZy4KLSAgICogQHBhcmFtIHdzZGxEb2N1bWVudAotICAgKiBAcGFyYW0gYmluZGluZ05hbWUKLSAgICogQHJldHVybiBWZWN0b3IKLSAgICovCi0gIHByaXZhdGUgVmVjdG9yIGdldFBvcnRzKFdTRExEb2N1bWVudCB3c2RsRG9jdW1lbnQsIFN0cmluZyBiaW5kaW5nTmFtZSkKLSAgewotICAgIFZlY3RvciBwb3J0cyA9IG5ldyBWZWN0b3IoKTsKLQotICAgIE1hcCBwYXJhbXMgPSBuZXcgSGFzaE1hcCgpOwotICAgIHBhcmFtcy5wdXQoUE9SVFNfUEFSQU0sIHBvcnRzKTsKLSAgICBwYXJhbXMucHV0KEJJTkRJTkdfUEFSQU0sIGJpbmRpbmdOYW1lKTsKLQotICAgIFdTRExUcmF2ZXJzYWwgdHJhdmVyc2FsID0gbmV3IFdTRExUcmF2ZXJzYWwoKTsKLSAgICAvL1Zpc2l0b3JBZGFwdG9yLmFkYXB0KHRoaXMpOwotICAgIHRyYXZlcnNhbC5zZXRWaXNpdG9yKHRoaXMpOwotICAgIHRyYXZlcnNhbC52aXNpdFBvcnQodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLmlnbm9yZVJlZmVyZW5jZXMoKTsKLSAgICB0cmF2ZXJzYWwuaWdub3JlSW1wb3J0KCk7Ci0gICAgdHJhdmVyc2FsLnRyYXZlcnNlKHdzZGxEb2N1bWVudC5nZXREZWZpbml0aW9ucygpLCBwYXJhbXMpOwotCi0gICAgcmV0dXJuIHBvcnRzOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5Qb3J0LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoUG9ydCBwb3J0LCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBpZiAocG9ydAotICAgICAgLmdldEJpbmRpbmcoKQotICAgICAgLmdldFFOYW1lKCkKLSAgICAgIC5nZXRMb2NhbFBhcnQoKQotICAgICAgLmVxdWFscyhjdHguZ2V0UGFyYW1ldGVyKEJJTkRJTkdfUEFSQU0pLnRvU3RyaW5nKCkpKQotICAgIHsKLSAgICAgICgoVmVjdG9yKSBjdHguZ2V0UGFyYW1ldGVyKFBPUlRTX1BBUkFNKSkuYWRkKHBvcnQpOwotICAgIH0KLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgIC8vIEdldCB0aGUgdE1vZGVsIGZyb20gdGhlIGVudHJ5Q29udGV4dAotICAgIFRNb2RlbCB0TW9kZWwgPSAoVE1vZGVsKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgLy8gSWYgdGhlIHRNb2RlbCBkb2VzIG5vdCBleGlzdCwgdGhlbiBmYWlsCi0gICAgaWYgKHRNb2RlbCA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgPSAiQ291bGQgbm90IGxvY2F0ZSBhIHRNb2RlbC4iOwotICAgIH0KLQotICAgIC8vIElmIHRoZXJlIGlzIGEgdE1vZGVsCi0gICAgZWxzZQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBIYXNoU2V0IGNsYWltc0Zyb21VRERJID0gZ2V0Q29uZm9ybWFuY2VDbGFpbXNGcm9tVURESSh0TW9kZWwpOwotICAgICAgICBIYXNoU2V0IGNsYWltc0Zyb21XU0RMID0gZ2V0Q29uZm9ybWFuY2VDbGFpbXNGcm9tV1NETCh0TW9kZWwpOwotCi0gICAgICAgIGlmIChjbGFpbXNGcm9tVURESS5zaXplKCkgPT0gMCkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGNsYWltc0Zyb21VRERJLnNpemUoKSA9PSBjbGFpbXNGcm9tV1NETC5zaXplKCkpCi0gICAgICAgIHsKLSAgICAgICAgICBpbnQgY291bnRlciA9IDA7Ci0gICAgICAgICAgZm9yIChJdGVyYXRvciBpdGVyID0gY2xhaW1zRnJvbVdTREwuaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7KQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBjbGFpbSA9IChTdHJpbmcpIGl0ZXIubmV4dCgpOwotCi0gICAgICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ZXIyID0gY2xhaW1zRnJvbVVEREkuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgICAgaXRlcjIuaGFzTmV4dCgpOwotICAgICAgICAgICAgICApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFN0cmluZyB1ZGRpQ2xhaW0gPSAoU3RyaW5nKSBpdGVyMi5uZXh0KCk7Ci0gICAgICAgICAgICAgIGlmIChjbGFpbS5lcXVhbHNJZ25vcmVDYXNlKHVkZGlDbGFpbSkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb3VudGVyKys7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBpZiAoY291bnRlciAhPSBjbGFpbXNGcm9tV1NETC5zaXplKCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gZmFpbGVkCi0gICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgICAgIGZhaWx1cmVEZXRhaWxNZXNzYWdlID0KLSAgICAgICAgICAgICAgIlRoZSB0TW9kZWwga2V5IGlzOiBbIiArIHRNb2RlbC5nZXRUTW9kZWxLZXkoKSArICJdLiI7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIC8vIGZhaWxlZAotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICAgIGZhaWx1cmVEZXRhaWxNZXNzYWdlID0KLSAgICAgICAgICAgICJUaGUgdE1vZGVsIGtleSBpczogWyIgKyB0TW9kZWwuZ2V0VE1vZGVsS2V5KCkgKyAiXS4iOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICBmYWlsdXJlRGV0YWlsTWVzc2FnZSA9Ci0gICAgICAgICAgIlRoZSB0TW9kZWwga2V5IGlzOiBbIiArIHRNb2RlbC5nZXRUTW9kZWxLZXkoKSArICJdLiI7Ci0gICAgICB9Ci0KLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbE1lc3NhZ2UpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC91ZGRpL1dTSTMwMDVfT0JTT0xFVEUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9XU0kzMDA1X09CU09MRVRFLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjNmY1YTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC91ZGRpL1dTSTMwMDVfT0JTT0xFVEUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC51ZGRpOwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVURESVV0aWxzOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkNhdGVnb3J5QmFnOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5LZXllZFJlZmVyZW5jZTsKLQotCi0vKioKLSAqIFdTSTMwMDVfT0JTT0xFVEUgLSBBIHVkZGk6dE1vZGVsIHdoaWNoIGNsYWltcyBjb25mb3JtYW5jZSB3aXRoIGEgV1MtSSBwcm9maWxlCi0gKiBtdXN0IGJlIGNhdGVnb3JpemVkIHVzaW5nIHRoZSB3cy1pLW9yZzpjb25mb3Jtc1RvIHRheG9ub215LgotICovCi1wdWJsaWMgY2xhc3MgV1NJMzAwNV9PQlNPTEVURSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBVRERJVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBVRERJVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTMwMDVfT0JTT0xFVEUoVURESVZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qKgotICAgKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgIC8vIEdldCB0aGUgdE1vZGVsIGZyb20gdGhlIGVudHJ5Q29udGV4dAotICAgIFRNb2RlbCB0TW9kZWwgPSAoVE1vZGVsKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgLy8gSWYgdGhlIHRNb2RlbCBkb2VzIG5vdCBleGlzdCwgdGhlbiBmYWlsCi0gICAgaWYgKHRNb2RlbCA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgPSAiQ291bGQgbm90IGxvY2F0ZSBhIHRNb2RlbC4iOwotICAgIH0KLQotICAgIC8vIElmIHRoZXJlIGlzIGEgdE1vZGVsCi0gICAgZWxzZQotICAgIHsKLSAgICAgIENhdGVnb3J5QmFnIGJhZyA9IHRNb2RlbC5nZXRDYXRlZ29yeUJhZygpOwotCi0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgaWYgKCFjaGVja0NhdGVnb3J5QmFnKHRoaXMudmFsaWRhdG9yLnVkZGlQcm94eSwgYmFnKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIGZhaWxlZAotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICAgIGZhaWx1cmVEZXRhaWxNZXNzYWdlID0KLSAgICAgICAgICAgICJUaGUgdE1vZGVsIGtleSBpczogWyIgKyB0TW9kZWwuZ2V0VE1vZGVsS2V5KCkgKyAiXS4iOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICBmYWlsdXJlRGV0YWlsTWVzc2FnZSA9Ci0gICAgICAgICAgIlRoZSBVRERJIHJlZ2lzdHJ5IGRvZXMgbm90IGNvbnRhaW4gV1NJIGNvbmZvcm1hbmNlIHRheG9ub215IgotICAgICAgICAgICAgKyAiIHRNb2RlbCAoXCJ3cy1pLW9yZzpjb25mb3Jtc1RvOjIwMDJfMTJcIikuIjsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbE1lc3NhZ2UpOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrcyBhIGNhdGVnb3J5IGJhZy4KLSAgICogQHBhcmFtIHByb3h5Ci0gICAqIEBwYXJhbSBiYWcKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gY2hlY2tDYXRlZ29yeUJhZyhVRERJUHJveHkgcHJveHksIENhdGVnb3J5QmFnIGJhZykKLSAgewotICAgIFN0cmluZyBjb25mb3JtYW5jZUtleSA9IFVERElVdGlscy5nZXRXU0lDb25mb3JtYW5jZVRNb2RlbEtleShwcm94eSk7Ci0KLSAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotCi0gICAgaWYgKGJhZyAhPSBudWxsKQotICAgIHsKLSAgICAgIFZlY3RvciByZWZlcmVuY2VzID0gYmFnLmdldEtleWVkUmVmZXJlbmNlVmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlZmVyZW5jZXMuc2l6ZSgpICYmICFyZXN1bHQ7IGkrKykKLSAgICAgIHsKLSAgICAgICAgS2V5ZWRSZWZlcmVuY2UgcmVmID0gKEtleWVkUmVmZXJlbmNlKSByZWZlcmVuY2VzLmdldChpKTsKLQotICAgICAgICByZXN1bHQgPSByZWYuZ2V0VE1vZGVsS2V5KCkuZXF1YWxzSWdub3JlQ2FzZShjb25mb3JtYW5jZUtleSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9XU0kzMDA2LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3VkZGkvV1NJMzAwNi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYThjMDAzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9XU0kzMDA2LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwudWRkaTsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvblJlc3VsdEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5VRERJVXRpbHM7Ci1pbXBvcnQgb3JnLnVkZGk0ai5jbGllbnQuVURESVByb3h5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLlRNb2RlbDsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuQ2F0ZWdvcnlCYWc7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLktleWVkUmVmZXJlbmNlOwotCi0KLS8qKgotICogV1NJMzAwNiAtIFRoZSB1ZGRpOnRNb2RlbCB1c2VzIHRoZSB3cy1pLW9yZzpjb25mb3Jtc1RvOjIwMDJfMTIgY2F0ZWdvcml6YXRpb24KLSAqIHZhbHVlIG9mICJodHRwOi8vd3MtaS5vcmcvcHJvZmlsZXMvYmFzZS8xLjAiLiBUaGUgY2F0ZWdvcnlCYWcgaW4gdGhlIHRNb2RlbAotICogY29udGFpbnMgYSBrZXllZFJlZmVyZW5jZSB3aXRoIGEgdE1vZGVsS2V5IHRoYXQgY29udGFpbnMgdGhlIGtleSB2YWx1ZQotICogdXVpZDo2NTcxOTE2OC03MmM2LTNmMjktOGMyMC02MmRlZmIwOTYxYzAgZm9yIHRoZSB3cy1pLW9yZzpjb25mb3Jtc1RvOjIwMDJfMTIKLSAqIHRNb2RlbC4KLSAqLwotcHVibGljIGNsYXNzIFdTSTMwMDYgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgVURESVZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotICAvKioKLSAgICogQHBhcmFtIFVERElWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMzAwNihVRERJVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgIGZhaWx1cmVEZXRhaWxNZXNzYWdlID0gbnVsbDsKLSAgICBLZXllZFJlZmVyZW5jZSBjbGFpbUtleWVkUmVmID0gbnVsbDsKLQotICAgIC8vIGNoZWNrIHdoZXRoZXIgYSBVRERJIGNvbmZvcm1hbmNlIGNsYWltIGlzIGJlaW5nIG1hZGUuLi4KLQotICAgIC8vIEdldCB0aGUgdE1vZGVsIGZyb20gdGhlIGVudHJ5Q29udGV4dAotICAgIFRNb2RlbCB0TW9kZWwgPSAoVE1vZGVsKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIGlmICgoY2xhaW1LZXllZFJlZiA9IGNvbmZvcm1hbmNlQ2xhaW1NYWRlKHRNb2RlbCkpID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25SZXN1bHRFeGNlcHRpb24oCi0gICAgICAgICAgQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIHdlIGhhdmUgYSBjb25mb3JtYW5jZSBjbGFpbSwgc28gY2hlY2sgdGhlIGtleWVkUmVmZXJlbmNlIGtleVZhbHVlCi0gICAgICBpZiAoIWNsYWltS2V5ZWRSZWYKLSAgICAgICAgLmdldEtleVZhbHVlKCkKLSAgICAgICAgLmVxdWFscyhXU0lDb25zdGFudHMuQVRUUlZBTF9VRERJX0NMQUlNX0tFWVZBTFVFKSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvblJlc3VsdEV4Y2VwdGlvbigKLSAgICAgICAgICBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRCwKLSAgICAgICAgICAiVGhlIHRNb2RlbCBrZXkgaXM6IFsiCi0gICAgICAgICAgICArIHRNb2RlbC5nZXRUTW9kZWxLZXkoKQotICAgICAgICAgICAgKyAiXS5cblRoZSBjYXRlZ29yeUJhZyBpczogWyIKLSAgICAgICAgICAgICsgdE1vZGVsLmdldENhdGVnb3J5QmFnKCkKLSAgICAgICAgICAgICsgIl0uIik7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25SZXN1bHRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBlLmdldE1lc3NhZ2UoKTsKLSAgICAgIGZhaWx1cmVEZXRhaWxNZXNzYWdlID0gZS5nZXREZXRhaWxNZXNzYWdlKCk7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWxNZXNzYWdlKTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja3MgYSBjYXRlZ29yeSBiYWcgYW5kIGV4dHJhY3RzIEtleWVkUmVmZXJlbmNlIGNvbnRhaW5pbmcKLSAgICogdGhlIGNvbmZvcm1hbmNlIGNsYWltLgotICAgKiBAcGFyYW0gcHJveHkKLSAgICogQHBhcmFtIGJhZwotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0gIHByaXZhdGUgS2V5ZWRSZWZlcmVuY2UgY2hlY2tDYXRlZ29yeUJhZyhVRERJUHJveHkgcHJveHksIENhdGVnb3J5QmFnIGJhZykKLSAgewotICAgIFN0cmluZyBjb25mb3JtYW5jZUtleSA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgY29uZm9ybWFuY2VLZXkgPSBVRERJVXRpbHMuZ2V0V1NJQ29uZm9ybWFuY2VUTW9kZWxLZXkocHJveHkpOwotICAgIH0KLSAgICBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGV4KQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIGJvb2xlYW4gcmVzdWx0ID0gdHJ1ZTsKLSAgICBLZXllZFJlZmVyZW5jZSBjb25mb3JtYW5jZVJlZiA9IG51bGw7Ci0KLSAgICBpZiAoYmFnICE9IG51bGwpCi0gICAgewotICAgICAgVmVjdG9yIHJlZmVyZW5jZXMgPSBiYWcuZ2V0S2V5ZWRSZWZlcmVuY2VWZWN0b3IoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVmZXJlbmNlcy5zaXplKCkgJiYgcmVzdWx0OyBpKyspCi0gICAgICB7Ci0gICAgICAgIEtleWVkUmVmZXJlbmNlIHJlZiA9IChLZXllZFJlZmVyZW5jZSkgcmVmZXJlbmNlcy5nZXQoaSk7Ci0KLSAgICAgICAgaWYgKHJlZgotICAgICAgICAgIC5nZXRUTW9kZWxLZXkoKQotICAgICAgICAgIC5lcXVhbHNJZ25vcmVDYXNlKGNvbmZvcm1hbmNlS2V5KSAvLyYmIHJlZi5nZXRLZXlWYWx1ZSgpLmVxdWFscyhXU0lDb25zdGFudHMuQVRUUlZBTF9VRERJX0NMQUlNX0tFWVZBTFVFKQotICAgICAgICAvLyB3ZSBuZWVkIG9ubHkgdE1vZGVsIGtleQotICAgICAgICApCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQgPSB0cnVlOwotICAgICAgICAgIGNvbmZvcm1hbmNlUmVmID0gcmVmOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGNvbmZvcm1hbmNlUmVmOwotICB9Ci0gIC8qKgotICAgKiBHZXRzIEtleWVkUmVmZXJlbmNlIGNvbnRhaW5pbmcgdGhlIGNvbmZvcm1hbmNlIGNsYWltLgotICAgKiBAcGFyYW0gdE1vZGVsCi0gICAqIEByZXR1cm4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24KLSAgICovCi0gIHByaXZhdGUgS2V5ZWRSZWZlcmVuY2UgY29uZm9ybWFuY2VDbGFpbU1hZGUoVE1vZGVsIHRNb2RlbCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIC8vIElmIHRoZSB0TW9kZWwgZG9lcyBub3QgZXhpc3QsIHRoZW4gZmFpbAotICAgIGlmICh0TW9kZWwgPT0gbnVsbCkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJ0TW9kZWwgY2Fubm90IGJlIG51bGwiKTsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGVyZSBpcyBhIHRNb2RlbAotICAgIGVsc2UKLSAgICB7Ci0gICAgICBDYXRlZ29yeUJhZyBiYWcgPSB0TW9kZWwuZ2V0Q2F0ZWdvcnlCYWcoKTsKLSAgICAgIHJldHVybiBjaGVja0NhdGVnb3J5QmFnKHRoaXMudmFsaWRhdG9yLnVkZGlQcm94eSwgYmFnKTsKLSAgICB9Ci0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9XU0kzMDA3LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3VkZGkvV1NJMzAwNy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjY3NGRkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9XU0kzMDA3LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwudWRkaTsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlVERElVdGlsczsKLWltcG9ydCBvcmcudWRkaTRqLmNsaWVudC5VRERJUHJveHk7Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5iaW5kaW5nLkJpbmRpbmdUZW1wbGF0ZTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJ1c2luZXNzLkJ1c2luZXNzRW50aXR5OwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuc2VydmljZS5CdXNpbmVzc1NlcnZpY2U7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkNhdGVnb3J5QmFnOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5LZXllZFJlZmVyZW5jZTsKLQotCi0vKioKLSAqIFdTSTMwMDcgLSBBIHVkZGk6YnVzaW5lc3NFbnRpdHkgb3IgdWRkaTpidXNpbmVzc1NlcnZpY2UgYXNzb2NpYXRlZAotICogd2l0aCB0aGlzIHVkZGk6YmluZGluZ1RlbXBsYXRlIGlzIG5vdCBjYXRlZ29yaXplZCB1c2luZwotICogdGhlIHdzLWktb3JnOmNvbmZvcm1zVG86MjAwMl8xMiB0YXhvbm9teS4KLSAqLwotcHVibGljIGNsYXNzIFdTSTMwMDcgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgVURESVZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gVURESVZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kzMDA3KFVERElWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKioKLSAgICogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotCi0gICAgLy8gR2V0IHRoZSBiaW5kaW5nVGVtcGxhdGUgZnJvbSB0aGUgZW50cnlDb250ZXh0Ci0gICAgQmluZGluZ1RlbXBsYXRlIGJpbmRpbmdUZW1wbGF0ZSA9Ci0gICAgICAoQmluZGluZ1RlbXBsYXRlKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgYm9vbGVhbiB2YWxpZFNlcnZpY2UgPSBmYWxzZTsKLSAgICBib29sZWFuIHZhbGlkQnVzaW5lc3MgPSBmYWxzZTsKLQotICAgIFN0cmluZyBzZXJ2aWNlS2V5ID0gbnVsbDsKLSAgICBTdHJpbmcgYnVzaW5lc3NLZXkgPSBudWxsOwotICAgIHRyeQotICAgIHsKLSAgICAgIHNlcnZpY2VLZXkgPSBiaW5kaW5nVGVtcGxhdGUuZ2V0U2VydmljZUtleSgpOwotICAgICAgQnVzaW5lc3NTZXJ2aWNlIHNlcnZpY2UgPQotICAgICAgICBVRERJVXRpbHMuZ2V0QnVzaW5lc3NTZXJ2aWNlQnlLZXkodGhpcy52YWxpZGF0b3IudWRkaVByb3h5LCBzZXJ2aWNlS2V5KTsKLQotICAgICAgYnVzaW5lc3NLZXkgPSBzZXJ2aWNlLmdldEJ1c2luZXNzS2V5KCk7Ci0gICAgICBCdXNpbmVzc0VudGl0eSBidXNpbmVzcyA9Ci0gICAgICAgIFVERElVdGlscy5nZXRCdXNpbmVzc0J5S2V5KHRoaXMudmFsaWRhdG9yLnVkZGlQcm94eSwgYnVzaW5lc3NLZXkpOwotCi0gICAgICB2YWxpZFNlcnZpY2UgPSBjaGVja0NhdGVnb3J5QmFnKHRoaXMudmFsaWRhdG9yLnVkZGlQcm94eSwgc2VydmljZS5nZXRDYXRlZ29yeUJhZygpKTsKLSAgICAgIHZhbGlkQnVzaW5lc3MgPSBjaGVja0NhdGVnb3J5QmFnKHRoaXMudmFsaWRhdG9yLnVkZGlQcm94eSwgYnVzaW5lc3MuZ2V0Q2F0ZWdvcnlCYWcoKSk7Ci0KLSAgICAgIGlmICghdmFsaWRCdXNpbmVzcyB8fCAhdmFsaWRTZXJ2aWNlKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLQotICAgICAgICBpZiAoIXZhbGlkQnVzaW5lc3MpCi0gICAgICAgIHsKLSAgICAgICAgICBmYWlsdXJlRGV0YWlsTWVzc2FnZSA9Ci0gICAgICAgICAgICAiVGhlIGJ1c2luZXNzRW50aXR5IGtleSBpczogWyIgKyBidXNpbmVzc0tleSArICJdLiI7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXZhbGlkU2VydmljZSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghdmFsaWRCdXNpbmVzcykKLSAgICAgICAgICAgIGZhaWx1cmVEZXRhaWxNZXNzYWdlICs9ICIgIjsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBmYWlsdXJlRGV0YWlsTWVzc2FnZSA9ICIiOwotCi0gICAgICAgICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgKz0gIlRoZSBidXNpbmVzc1NlcnZpY2Uga2V5IGlzOiBbIgotICAgICAgICAgICAgKyBzZXJ2aWNlS2V5Ci0gICAgICAgICAgICArICJdLiI7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgPQotICAgICAgICAiVGhlIFVEREkgcmVnaXN0cnkgZG9lcyBub3QgY29udGFpbiBXU0kgY29uZm9ybWFuY2UgdGF4b25vbXkiCi0gICAgICAgICAgKyAiIHRNb2RlbCAoXCJ3cy1pLW9yZzpjb25mb3Jtc1RvOjIwMDJfMTJcIikuIjsKLSAgICB9Ci0gICAgY2F0Y2ggKFRocm93YWJsZSBlKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBXU0lFeGNlcHRpb24oCi0gICAgICAgICJBbiBleGNlcHRpb24gb2NjdXJyZWQgd2hpbGUgcHJvY2Vzc2luZyB0aGUgZGlzY292ZXJ5IHRlc3QgYXNzZXJ0aW9ucy4iLAotICAgICAgICBlKTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbE1lc3NhZ2UpOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrcyB3aGV0aGVyIHRoZSBjYXRlZ29yeSBiYWcgY29udGFpbnMgdGhlIGNvbmZvcm1hbmNlIGNsYWltLgotICAgKiBSZXR1cm5zIDxiPnRydWU8L2I+IGlmIHRoZSBiYWcgZG9lcyBub3QgY29udGFpbiB0aGUgY29uZm9ybWFuY2UgY2xhaW0uCi0gICAqIEBwYXJhbSBwcm94eQotICAgKiBAcGFyYW0gYmFnCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGNoZWNrQ2F0ZWdvcnlCYWcoVURESVByb3h5IHByb3h5LCBDYXRlZ29yeUJhZyBiYWcpCi0gIHsKLSAgICBTdHJpbmcgY29uZm9ybWFuY2VLZXkgPSBudWxsOwotICAgIHRyeQotICAgIHsKLSAgICAgIGNvbmZvcm1hbmNlS2V5ID0gVURESVV0aWxzLmdldFdTSUNvbmZvcm1hbmNlVE1vZGVsS2V5KHByb3h5KTsKLSAgICB9Ci0gICAgY2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBleCkKLSAgICB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgYm9vbGVhbiByZXN1bHQgPSB0cnVlOwotCi0gICAgaWYgKGJhZyAhPSBudWxsKQotICAgIHsKLSAgICAgIFZlY3RvciByZWZlcmVuY2VzID0gYmFnLmdldEtleWVkUmVmZXJlbmNlVmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlZmVyZW5jZXMuc2l6ZSgpICYmIHJlc3VsdDsgaSsrKQotICAgICAgewotICAgICAgICBLZXllZFJlZmVyZW5jZSByZWYgPSAoS2V5ZWRSZWZlcmVuY2UpIHJlZmVyZW5jZXMuZ2V0KGkpOwotCi0gICAgICAgIHJlc3VsdCA9ICFyZWYuZ2V0VE1vZGVsS2V5KCkuZXF1YWxzSWdub3JlQ2FzZShjb25mb3JtYW5jZUtleSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9XU0kzMDIxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3VkZGkvV1NJMzAyMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODUzNTJkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvdWRkaS9XU0kzMDIxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwudWRkaTsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlVERElVdGlsczsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnRtb2RlbC5UTW9kZWw7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkNhdGVnb3J5QmFnOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5LZXllZFJlZmVyZW5jZTsKLQotCi0vKioKLSogV1NJMzAyMSAtIFRoZSB1ZGRpOnRNb2RlbCBoYXMgYSAibmFtZSIgZWxlbWVudCBvZiB2YWx1ZSAid3MtaS1vcmc6Y29uZm9ybXNUbzoyMDAyXzEyIiAsCi0qIGhhcyBhbiBvdmVydmlld1VSTCB2YWx1ZSBvZiAiaHR0cDovL3dzLWkub3JnL3NjaGVtYXMvY29uZm9ybWFuY2VDbGFpbS8iLCBhbmQgaGFzCi0qIGEga2V5ZWRSZWZlcmVuY2UgZWxlbWVudCB3aXRoIGtleU5hbWUgYXR0cmlidXRlIHZhbHVlIG9mICJ1ZGRpLW9yZzp0eXBlczpjYXRlZ29yaXphdGlvbiIuCi0qLwotcHVibGljIGNsYXNzIFdTSTMwMjEgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgVURESVZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gVURESVZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kzMDIxKFVERElWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKioKLSAgICogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotCi0gICAgVE1vZGVsIHRNb2RlbCA9Ci0gICAgICBVRERJVXRpbHMuZ2V0VE1vZGVsQnlLZXkoCi0gICAgICAgIHRoaXMudmFsaWRhdG9yLnVkZGlQcm94eSwKLSAgICAgICAgVURESVV0aWxzLmdldFdTSUNvbmZvcm1hbmNlVE1vZGVsS2V5KHRoaXMudmFsaWRhdG9yLnVkZGlQcm94eSkpOwotCi0gICAgLy8gSWYgdGhlIHRNb2RlbCBkb2VzIG5vdCBleGlzdCwgdGhlbiBmYWlsCi0gICAgaWYgKHRNb2RlbCA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgPSAiQ291bGQgbm90IGxvY2F0ZSBhIHRNb2RlbC4iOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgYm9vbGVhbiB2YWxpZFVSTCA9Ci0gICAgICAgIHRNb2RlbC5nZXRPdmVydmlld0RvYygpICE9IG51bGwKLSAgICAgICAgICAmJiAiaHR0cDovL3dzLWkub3JnL3NjaGVtYXMvY29uZm9ybWFuY2VDbGFpbS8iLmVxdWFscygKLSAgICAgICAgICAgIHRNb2RlbC5nZXRPdmVydmlld0RvYygpLmdldE92ZXJ2aWV3VVJMU3RyaW5nKCkpOwotICAgICAgYm9vbGVhbiB2YWxpZENhdGVnb3J5ID0gY2hlY2tDYXRlZ29yeUJhZyh0TW9kZWwuZ2V0Q2F0ZWdvcnlCYWcoKSk7Ci0KLSAgICAgIGlmICh2YWxpZFVSTCAmJiB2YWxpZENhdGVnb3J5KQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgIGZhaWx1cmVEZXRhaWxNZXNzYWdlID0gdGhpcy52YWxpZGF0b3IudWRkaVJlZmVyZW5jZS5nZXRJbnF1aXJ5VVJMKCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWxNZXNzYWdlKTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja3Mgd2hldGhlciB0aGUgY2F0ZWdvcnkgYmFnIG1lZXRzIHRoZSBXU0kncyByZXF1aXJlbWVudHMuCi0gICAqIEBwYXJhbSBiYWcKLSAgICogQHJldHVybgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGNoZWNrQ2F0ZWdvcnlCYWcoQ2F0ZWdvcnlCYWcgYmFnKQotICB7Ci0gICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLQotICAgIGlmIChiYWcgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBWZWN0b3IgcmVmZXJlbmNlcyA9IGJhZy5nZXRLZXllZFJlZmVyZW5jZVZlY3RvcigpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWZlcmVuY2VzLnNpemUoKSAmJiAhcmVzdWx0OyBpKyspCi0gICAgICB7Ci0gICAgICAgIEtleWVkUmVmZXJlbmNlIHJlZiA9IChLZXllZFJlZmVyZW5jZSkgcmVmZXJlbmNlcy5nZXQoaSk7Ci0KLSAgICAgICAgcmVzdWx0ID0KLSAgICAgICAgICAidWRkaS1vcmc6dHlwZXM6Y2F0ZWdvcml6YXRpb24iLmVxdWFscyhyZWYuZ2V0S2V5TmFtZSgpKQotICAgICAgICAgICAgJiYgImNhdGVnb3JpemF0aW9uIi5lcXVhbHMocmVmLmdldEtleVZhbHVlKCkpCi0gICAgICAgICAgICAmJiAidXVpZDpDMUFDRjI2RC05NjcyLTQ0MDQtOUQ3MC0zOUI3NTZFNjJBQjQiLmVxdWFscygKLSAgICAgICAgICAgICAgcmVmLmdldFRNb2RlbEtleSgpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjkwMS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjkwMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MmU1NjFmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLQotLyoqCi0gKiBBUDI5MDEKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDpiaW5kaW5nIGVsZW1lbnQ8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+QSBkZXNjcmlwdGlvbiB1c2VzIGVpdGhlciB0aGUgV1NETCBNSU1FIEJpbmRpbmcgYXMgZGVzY3JpYmVkIGluIFdTREwgMS4xIFNlY3Rpb24gNQotICogb3IgV1NETCBTT0FQIGJpbmRpbmcgYXMgZGVzY3JpYmVkIGluIFdTREwgMS4xIFNlY3Rpb24gMwotICogb24gZWFjaCBvZiB0aGUgd3NkbDppbnB1dCBvciB3c2RsOm91dHB1dCBlbGVtZW50cyBvZiBhIHdzZGw6YmluZGluZy4gPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEFQMjkwMSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgLyoqCi0gICAqIFdTRExWYWxpZGF0b3IKLSAgICovCi0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIHByaXZhdGUgQ29sbGVjdGlvbiBtaW1lRWxlbWVudHM7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEFQMjkwMShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotCi0gICAgbWltZUVsZW1lbnRzID0gbmV3IEhhc2hTZXQoKTsKLSAgICBtaW1lRWxlbWVudHMuYWRkKFdTRExfTUlNRV9DT05URU5UKTsKLSAgICBtaW1lRWxlbWVudHMuYWRkKFdTRExfTUlNRV9YTUwpOwotICAgIG1pbWVFbGVtZW50cy5hZGQoV1NETF9NSU1FX01VTFRJUEFSVCk7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdldHRpbmcgYSB3c2RsOmJpbmRpbmcKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgICAvLyBHZXR0aW5nIGl0cyB3c2RsOm9wZXJhdGlvbiBlbGVtZW50cwotICAgICAgTGlzdCBvcHMgPSBiaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb25zKCk7Ci0KLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggdGhlIG9wZXJhdGlvbiBlbGVtZW50cwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvcHMuc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKSBvcHMuZ2V0KGkpOwotCi0gICAgICAgIC8vIEdldHRpbmcgd3NkbDppbnB1dCBhbmQgd3NkbDpvdXRwdXQgZWxlbWVudHMgb2YgYW4gb3BlcmF0aW9uCi0gICAgICAgIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpOwotICAgICAgICBCaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXRwdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKTsKLQotICAgICAgICBRTmFtZSBpbmFwcGxpY2FibGVFbGVtZW50ID0gbnVsbDsKLSAgICAgICAgLy8gR2V0dGluZyBhbiBpbmFwcGxpY2FibGUgZXh0ZW5zaWJpbGl0eSBlbGVtZW50IG9mIHdzZGw6aW5wdXQKLSAgICAgICAgLy8gSWYgc3VjaCBlbGVtZW50IGV4aXN0cywgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgaWYgKGJpbmRpbmdJbnB1dCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gR2V0dGluZyBhbiBpbmFwcGxpY2FibGUgZXh0ZW5zaWJpbGl0eSBlbGVtZW50IG9mIHdzZGw6aW5wdXQKLSAgICAgICAgICAvLyBJZiBzdWNoIGVsZW1lbnQgZXhpc3RzLCB0aGUgYXNzZXJ0aW9uIGZhaWxlZAotICAgICAgICAgIGluYXBwbGljYWJsZUVsZW1lbnQgPSBnZXRJbmFwcGxpY2FibGVFbGVtZW50KGJpbmRpbmdJbnB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0KLSAgICAgICAgICBpZiAoaW5hcHBsaWNhYmxlRWxlbWVudCAhPSBudWxsKQotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oaW5hcHBsaWNhYmxlRWxlbWVudC50b1N0cmluZygpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gR2V0dGluZyBhbiBpbmFwcGxpY2FibGUgZXh0ZW5zaWJpbGl0eSBlbGVtZW50IG9mIHdzZGw6b3V0cHV0Ci0gICAgICAgIC8vIElmIHN1Y2ggZWxlbWVudCBleGlzdHMsIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgIGlmIChiaW5kaW5nT3V0cHV0ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBpbmFwcGxpY2FibGVFbGVtZW50ID0KLSAgICAgICAgICAgIGdldEluYXBwbGljYWJsZUVsZW1lbnQoYmluZGluZ091dHB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgICAgICAgaWYgKGluYXBwbGljYWJsZUVsZW1lbnQgIT0gbnVsbCkKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKGluYXBwbGljYWJsZUVsZW1lbnQudG9TdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gYWZlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBhZmUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qKgotICAgKiBMb29rcyBmb3IgYW55IGV4dGVuc2liaWxpdHkgZWxlbWVudCBvZiB3c2RsOmlucHV0IG9yIHdzZGw6b3V0cHV0Ci0gICAqIHRoYXQgZG9lcyBub3QgY29uZm9ybSB0byB0aGUgU09BUCBiaW5kaW5nIG9yIHRoZSBNSU1FIGJpbmRpbmcuCi0gICAqIEBwYXJhbSBleHRFbGVtcyBhIGxpc3Qgb2YgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cwotICAgKiBAcmV0dXJuIHRoZSBRTmFtZSBvZiBhbiBpbmFwcGxpY2FibGUgZWxlbWVudAotICAgKi8KLSAgcHJpdmF0ZSBRTmFtZSBnZXRJbmFwcGxpY2FibGVFbGVtZW50KExpc3QgZXh0RWxlbXMpCi0gIHsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4dEVsZW1zLnNpemUoKTsgaSsrKQotICAgIHsKLSAgICAgIFFOYW1lIGVsZW1lbnROYW1lID0KLSAgICAgICAgKChFeHRlbnNpYmlsaXR5RWxlbWVudCkgZXh0RWxlbXMuZ2V0KGkpKS5nZXRFbGVtZW50VHlwZSgpOwotCi0gICAgICBpZiAoIW1pbWVFbGVtZW50cy5jb250YWlucyhlbGVtZW50TmFtZSkgJiYKLSAgICAgICAgICAhZWxlbWVudE5hbWUuZXF1YWxzKFdTRExfU09BUF9CT0RZKSAmJgotICAgICAgICAgICFlbGVtZW50TmFtZS5lcXVhbHMoV1NETF9TT0FQX0hFQURFUikpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBlbGVtZW50TmFtZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MDMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MDMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDJiYzMxMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQVAyOTAzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLklucHV0OwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLk91dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRUNvbnRlbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLS8qKgotICogQVAyOTAzCi0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZyB3aXRoIGF0IGxlYXN0IG9uZSBtaW1lOmNvbnRlbnQgZWxlbWVudDwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgcGFydCBhdHRyaWJ1dGUgb2YgZWFjaCBtaW1lOmNvbnRlbnQgZWxlbWVudCBpbiBhIHdzZGw6YmluZGluZyByZWZlcmVuY2VzCi0gKiBhIHdzZGw6cGFydCBlbGVtZW50IG9mIGEgd3NkbDptZXNzYWdlIHRoYXQgaXMgcHJlc2VudCBpbiB0aGUgcmVzcGVjdGl2ZSB3c2RsOmlucHV0IG9yIHdzZGw6b3V0cHV0IG9mIHRoZQotICogY29ycmVzcG9uZGluZyB3c2RsOm9wZXJhdGlvbiBvZiB0aGUgY29ycmVzcG9uZGluZyB3c2RsOnBvcnRUeXBlLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBBUDI5MDMgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIGltcGxlbWVudHMgV1NJVGFnCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBBUDI5MDMoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gQSB2YXJpYWJsZSB0aGF0IGluZGljYXRlcyBhIGJpbmRpbmcgY29udGFpbnMgYXQgbGVhc3Qgb25lCi0gICAgICAvLyBtaW1lOmNvbnRlbnQgZWxlbWVudAotICAgICAgYm9vbGVhbiBtaW1lQ29udGVudHNGb3VuZCA9IGZhbHNlOwotCi0gICAgICAvLyBHZXR0aW5nIGEgd3NkbDpiaW5kaW5nCi0gICAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgICAgLy8gR2V0dGluZyBpdHMgd3NkbDpvcGVyYXRpb24gZWxlbWVudHMKLSAgICAgIExpc3Qgb3BzID0gYmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9ucygpOwotCi0gICAgICAvLyBHb2luZyB0aHJvdWdoIHRoZSBvcGVyYXRpb24gZWxlbWVudHMKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb3BzLnNpemUoKTsgaSsrKQotICAgICAgewotICAgICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbikgb3BzLmdldChpKTsKLQotICAgICAgICAvLyBHZXR0aW5nIHdzZGw6aW5wdXQgYW5kIHdzZGw6b3V0cHV0IGVsZW1lbnRzIG9mIGFuIG9wZXJhdGlvbgotICAgICAgICBCaW5kaW5nSW5wdXQgYmluZGluZ0lucHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nSW5wdXQoKTsKLSAgICAgICAgQmluZGluZ091dHB1dCBiaW5kaW5nT3V0cHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nT3V0cHV0KCk7Ci0KLSAgICAgICAgLy8gQ29sbGVjdGluZyBhbGwgdGhlIG1pbWU6Y29udGVudCBlbGVtZW50cyBmcm9tIHdzZGw6aW5wdXQgYW5kIHdzZGw6b3V0cHV0Ci0gICAgICAgIExpc3QgaW5wdXRNaW1lQ29udGVudHMgPSBnZXRNaW1lQ29udGVudEVsZW1lbnRzKAotICAgICAgICAgIGJpbmRpbmdJbnB1dCA9PSBudWxsID8gbnVsbCA6IGJpbmRpbmdJbnB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgICAgIExpc3Qgb3V0cHV0TWltZUNvbnRlbnRzID0gZ2V0TWltZUNvbnRlbnRFbGVtZW50cygKLSAgICAgICAgICBiaW5kaW5nT3V0cHV0ID09IG51bGwgPyBudWxsIDogYmluZGluZ091dHB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0KLSAgICAgICAgLy8gSWYgdGhlIHdzZGw6aW5wdXQgY29udGFpbnMgbWltZTpjb250ZW50IGVsZW1lbnRzCi0gICAgICAgIGlmICghaW5wdXRNaW1lQ29udGVudHMuaXNFbXB0eSgpKQotICAgICAgICB7Ci0gICAgICAgICAgbWltZUNvbnRlbnRzRm91bmQgPSB0cnVlOwotICAgICAgICAgIElucHV0IHBvcnRUeXBlSW5wdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldE9wZXJhdGlvbigpLmdldElucHV0KCk7Ci0gICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gdGhlIGNvcnJlc3BvbmRpbmcgd3NkbDppbnB1dCBpbiB3c2RsOnBvcnRUeXBlLAotICAgICAgICAgIC8vIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgaWYgKHBvcnRUeXBlSW5wdXQgPT0gbnVsbCkKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKAotICAgICAgICAgICAgICAiVGhlcmUgaXMgbm8gdGhlIGNvcnJlc3Bvbmdpbmcgd3NkbDppbnB1dCBpbiB0aGUgd3NkbDpwb3J0VHlwZSIKLSAgICAgICAgICAgICAgKyAiIG9wZXJhdGlvbiBmb3IgdGhlIHdzZGw6aW5wdXQgb2YgdGhlIFwiIgotICAgICAgICAgICAgICArIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpICsgIlwiIGJpbmRpbmcgb3BlcmF0aW9uLiIpOwotCi0gICAgICAgICAgLy8gSWYgdGhlIHdzZGw6cG9ydFR5cGUgaW5wdXQgZG9lcyBub3QgcmVmZXJlbmNlIGFueSB3c2RsOm1lc3NhZ2UsCi0gICAgICAgICAgLy8gdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICBpZiAocG9ydFR5cGVJbnB1dC5nZXRNZXNzYWdlKCkgPT0gbnVsbCkKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgd3NkbDppbnB1dCBvZiB0aGUgXCIiCi0gICAgICAgICAgICAgICsgYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKS5nZXROYW1lKCkgKyAiXCIgd3NkbDpwb3J0VHlwZSAiCi0gICAgICAgICAgICAgICsgIm9wZXJhdGlvbiBkb2VzIG5vdCByZWZlcmVuY2UgYW55IHdzZGw6bWVzc2FnZS4iKTsKLQotICAgICAgICAgIC8vIEdldHRpbmcgdGhlIHBhcnQgbmFtZSB0aGF0IGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIHdzZGw6bWVzc2FnZQotICAgICAgICAgIC8vIHRoZSBpbnB1dCBvZiB3c2RsOnBvcnRUeXBlIHJlZmVycyB0bwotICAgICAgICAgIFN0cmluZyBwYXJ0ID0gZ2V0SW52YWxpZE1pbWVDb250ZW50UGFydCgKLSAgICAgICAgICAgIGlucHV0TWltZUNvbnRlbnRzLCBwb3J0VHlwZUlucHV0LmdldE1lc3NhZ2UoKSk7Ci0KLSAgICAgICAgICAvLyBJZiBzdWNoIHBhcnQgaXMgZm91bmQsIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgaWYgKHBhcnQgIT0gbnVsbCkKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJwYXJ0PVwiIiArIHBhcnQgKwotICAgICAgICAgICAgICAiXCIsIHRoZSBpbnB1dCBvZiB0aGUgYmluZGluZyBvcGVyYXRpb24gXCIiCi0gICAgICAgICAgICAgICsgYmluZGluZ09wZXJhdGlvbi5nZXROYW1lKCkgKyAiXCIiKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIHRoZSB3c2RsOm91dHB1dCBjb250YWlucyBtaW1lOmNvbnRlbnQgZWxlbWVudHMKLSAgICAgICAgaWYgKCFvdXRwdXRNaW1lQ29udGVudHMuaXNFbXB0eSgpKQotICAgICAgICB7Ci0gICAgICAgICAgbWltZUNvbnRlbnRzRm91bmQgPSB0cnVlOwotICAgICAgICAgIE91dHB1dCBwb3J0VHlwZU91dHB1dCA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0T3BlcmF0aW9uKCkuZ2V0T3V0cHV0KCk7Ci0gICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gdGhlIGNvcnJlc3BvbmRpbmcgd3NkbDppbnB1dCBpbiB3c2RsOnBvcnRUeXBlLAotICAgICAgICAgIC8vIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgaWYgKHBvcnRUeXBlT3V0cHV0ID09IG51bGwpCi0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgIlRoZXJlIGlzIG5vIHRoZSBjb3JyZXNwb25naW5nIHdzZGw6b3V0cHV0IGluIHRoZSB3c2RsOnBvcnRUeXBlIgotICAgICAgICAgICAgICArICIgb3BlcmF0aW9uIGZvciB0aGUgd3NkbDpvdXRwdXQgb2YgdGhlIFwiIgotICAgICAgICAgICAgICArIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpICsgIlwiIGJpbmRpbmcgb3BlcmF0aW9uLiIpOwotCi0gICAgICAgICAgLy8gSWYgdGhlIHdzZGw6cG9ydFR5cGUgb3V0cHV0IGRvZXMgbm90IHJlZmVyZW5jZSBhbnkgd3NkbDptZXNzYWdlLAotICAgICAgICAgIC8vIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgaWYgKHBvcnRUeXBlT3V0cHV0LmdldE1lc3NhZ2UoKSA9PSBudWxsKQotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSB3c2RsOm91dHB1dCBvZiB0aGUgXCIiCi0gICAgICAgICAgICAgICsgYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKS5nZXROYW1lKCkgKyAiXCIgd3NkbDpwb3J0VHlwZSAiCi0gICAgICAgICAgICAgICsgIm9wZXJhdGlvbiBkb2VzIG5vdCByZWZlcmVuY2UgYW55IHdzZGw6bWVzc2FnZS4iKTsKLQotICAgICAgICAgIC8vIEdldHRpbmcgdGhlIHBhcnQgbmFtZSB0aGF0IGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIHdzZGw6bWVzc2FnZQotICAgICAgICAgIC8vIHRoZSBvdXRwdXQgb2Ygd3NkbDpwb3J0VHlwZSByZWZlcnMgdG8KLSAgICAgICAgICBTdHJpbmcgcGFydCA9IGdldEludmFsaWRNaW1lQ29udGVudFBhcnQoCi0gICAgICAgICAgICAgIG91dHB1dE1pbWVDb250ZW50cywgcG9ydFR5cGVPdXRwdXQuZ2V0TWVzc2FnZSgpKTsKLQotICAgICAgICAgIC8vIElmIHN1Y2ggcGFydCBpcyBmb3VuZCwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICBpZiAocGFydCAhPSBudWxsKQotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oInBhcnQ9XCIiICsgcGFydCArCi0gICAgICAgICAgICAgICAgIlwiLCB0aGUgb3V0cHV0IG9mIHRoZSBiaW5kaW5nIG9wZXJhdGlvbiBcIiIKLSAgICAgICAgICAgICAgICArIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpICsgIlwiIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8gSWYgdGhlIGJpbmRpbmcgY29udGFpbnMgbm8gbWltZTpjb250ZW50IGVsZW1lbnRzLAotICAgICAgLy8gdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKCFtaW1lQ29udGVudHNGb3VuZCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gYW5hZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBhZmUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgIGFmZS5nZXRNZXNzYWdlKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotICAvKioKLSAgICogQ29sbGVjdHMgYWxsIG1pbWU6Y29udGVudCBlbGVtZW50cy4KLSAgICogQHBhcmFtIGV4dEVsZW1zIGEgbGlzdCBvZiBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIHRoYXQgY2FuIGNvbnRhaW4gbWltZTpjb250ZW50Uy4KLSAgICogQHJldHVybiB0aGUgbGlzdCBvZiBtaW1lOmNvbnRlbnQgZWxlbWVudHMgZm91bmQuCi0gICAqLwotICBwcml2YXRlIExpc3QgZ2V0TWltZUNvbnRlbnRFbGVtZW50cyhMaXN0IGV4dEVsZW1zKQotICB7Ci0gICAgTGlzdCBtaW1lQ29udGVudEVsZW1lbnRzID0gbmV3IEFycmF5TGlzdCgpOwotCi0gICAgaWYgKGV4dEVsZW1zICE9IG51bGwpCi0gICAgewotICAgICAgLy8gR29pbmcgdGhyb3VnaCBhbGwgdGhlIGV4dGVuc2liaWxpdHkgZWxlbWVudHMKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZXh0RWxlbXMuc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dEVsZW0gPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGV4dEVsZW1zLmdldChpKTsKLSAgICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgbWltZTptdWx0aXBhcnRSZWxhdGVkCi0gICAgICAgIGlmIChleHRFbGVtLmdldEVsZW1lbnRUeXBlKCkuZXF1YWxzKFdTRExfTUlNRV9NVUxUSVBBUlQpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gR2V0dGluZyB0aGUgbWltZTpwYXJ0IGVsZW1lbnRzIG9mIHRoZSBtaW1lOm11bHRpcGFydFJlbGF0ZWQKLSAgICAgICAgICBMaXN0IG1pbWVQYXJ0cyA9ICgoTUlNRU11bHRpcGFydFJlbGF0ZWQpIGV4dEVsZW0pLmdldE1JTUVQYXJ0cygpOwotICAgICAgICAgIC8vIEdvaW5nIHRocm91Z2ggYWxsIHRoZSBtaW1lOnBhcnQgZWxlbWVudHMKLSAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG1pbWVQYXJ0cy5zaXplKCk7IGorKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBDb2xsZWN0aW5nIGFsbCB0aGUgbWltZTpjb250ZW50IGVsZW1lbnRzIG9mIHRoaXMgbWltZTpwYXJ0Ci0gICAgICAgICAgICBMaXN0IGVsZW1zID0gZ2V0TWltZUNvbnRlbnRFbGVtZW50cygKLSAgICAgICAgICAgICAgKChNSU1FUGFydCkgbWltZVBhcnRzLmdldChqKSkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpOwotICAgICAgICAgICAgLy8gQWRkaW5nIHRoZSBlbGVtZW50cyB0byB0aGUgbGlzdCBiZWluZyByZXR1cm5lZAotICAgICAgICAgICAgbWltZUNvbnRlbnRFbGVtZW50cy5hZGRBbGwoZWxlbXMpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAvLyBFbHNlIGlmIHRoZSBlbGVtZW50IGlzIG1pbWU6Y29udGVudAotICAgICAgICBlbHNlIGlmIChleHRFbGVtLmdldEVsZW1lbnRUeXBlKCkuZXF1YWxzKFdTRExfTUlNRV9DT05URU5UKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIEFkZGluZyB0aGUgZWxlbWVudCB0byB0aGUgbGlzdCBiZWluZyByZXR1cm5lZAotICAgICAgICAgIG1pbWVDb250ZW50RWxlbWVudHMuYWRkKGV4dEVsZW0pOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1pbWVDb250ZW50RWxlbWVudHM7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyBwYXJ0IG5hbWUgc3BlY2lmaWVkIGluIG1pbWU6Y29udGVudCBlbGVtZW50IHRoYXQgaXMgbm90IHByZXNlbnRlZCBpbiB3c2RsOm1lc3NhZ2UKLSAgICogQHBhcmFtIG1pbWVDb250ZW50cyBhIGxpc3Qgb2YgbWltZTpjb250ZW50IGVsZW1lbnRzIHdoaWNoIHBhcnQgYXR0cmlidXRlcyBhcmUgdmFsaWRhdGVkCi0gICAqIEBwYXJhbSBtZXNzYWdlIGEgd3NkbDptZXNzYWdlCi0gICAqIEByZXR1cm4gYSBwYXJ0IG5hbWUKLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGdldEludmFsaWRNaW1lQ29udGVudFBhcnQoTGlzdCBtaW1lQ29udGVudHMsIE1lc3NhZ2UgbWVzc2FnZSkKLSAgewotICAgIC8vIEdvaW5nIHRocm91ZyBhbGwgdGhlIG1pbWU6Y29udGVudCBlbGVtZW50cwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWltZUNvbnRlbnRzLnNpemUoKTsgaSsrKQotICAgIHsKLSAgICAgIC8vIEdldHRpbmcgdGhlIHBhcnQgbmFtZSBvZiBhIG1pbWU6ZWxlbWVudAotICAgICAgU3RyaW5nIHBhcnQgPSAoKE1JTUVDb250ZW50KSBtaW1lQ29udGVudHMuZ2V0KGkpKS5nZXRQYXJ0KCk7Ci0gICAgICAvLyBJZiB0aGUgd3NkbDptZXNzYWdlIGRvZXMgbm90IGNvbnRhaW4gc3VjaCBwYXJ0LCByZXR1cm4gdGhlIHBhcnQKLSAgICAgIGlmICghbWVzc2FnZS5nZXRQYXJ0cygpLmtleVNldCgpLmNvbnRhaW5zKHBhcnQpKQotICAgICAgICByZXR1cm4gcGFydDsKLSAgICB9Ci0gICAgLy8gUmV0dXJuIG51bGwgaWYgbm8gb25lIHBhcnQgaXMgZm91bmQKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MDQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MDQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzVhOTcxNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQVAyOTA0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLS8qKgotICogQVAyOTA0Ci0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDpiaW5kaW5nIHdpdGggYXQgbGVhc3Qgb25lIG1pbWU6Y29udGVudCBlbGVtZW50PC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSBwYXJ0IGF0dHJpYnV0ZSBvZiBlYWNoIG1pbWU6Y29udGVudCBlbGVtZW50IGluIGEgd3NkbDpiaW5kaW5nCi0gKiBkb2VzIG5vdCByZWZlcmVuY2UgYSBzdWItY29tcG9uZW50IG9mIGEgd3NkbDpwYXJ0IG9mIHRoZSB3c2RsOm1lc3NhZ2UgdGhhdCBpcyBwcmVzZW50IGluIHRoZQotICogcmVzcGVjdGl2ZSB3c2RsOmlucHV0IG9yIHdzZGw6b3V0cHV0IG9mIHRoZSBjb3JyZXNwb25kaW5nIHdzZGw6b3BlcmF0aW9uIG9mIHRoZSBjb3JyZXNwb25kaW5nCi0gKiB3c2RsOnBvcnRUeXBlLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBBUDI5MDQgZXh0ZW5kcyBBUDI5MDMKLXsKLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEFQMjkwNChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHN1cGVyLnZhbGlkYXRlKHRlc3RBc3NlcnRpb24sIGVudHJ5Q29udGV4dCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQVAyOTA2LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQVAyOTA2LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjOWM3Y2QuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjkwNi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjE2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVQYXJ0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotCi0vKioKLSAqIEFQMjkwNgotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmJpbmRpbmcgY29udGFpbmluZyBhIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50PC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPkEgbm9uLXJvb3QgTUlNRSBwYXJ0IGluIGEgd3NkbDpiaW5kaW5nIGRvZXMgbm90IGNvbnRhaW4gYSBzb2FwYmluZDpoZWFkZXIgZWxlbWVudC48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQVAyOTA2IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcyBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQVAyOTA2KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEEgdmFyaWFibGUgdGhhdCBpbmRpY2F0ZXMgYSBiaW5kaW5nIGNvbnRhaW5zIGF0IGxlYXN0IG9uZQotICAgICAgLy8gbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnQKLSAgICAgIGJvb2xlYW4gbXVsdGlwYXJ0c0ZvdW5kID0gZmFsc2U7Ci0KLSAgICAgIC8vIEdldHRpbmcgYSB3c2RsOmJpbmRpbmcKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgICAvLyBHZXR0aW5nIGl0cyB3c2RsOm9wZXJhdGlvbiBlbGVtZW50cwotICAgICAgTGlzdCBvcHMgPSBiaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb25zKCk7Ci0KLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggdGhlIG9wZXJhdGlvbiBlbGVtZW50cwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvcHMuc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKSBvcHMuZ2V0KGkpOwotCi0gICAgICAgIC8vIEdldHRpbmcgd3NkbDppbnB1dCBhbmQgd3NkbDpvdXRwdXQgZWxlbWVudHMgb2YgYW4gb3BlcmF0aW9uCi0gICAgICAgIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpOwotICAgICAgICBCaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXRwdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKTsKLQotICAgICAgICAvLyBDb2xsZWN0aW5nIGFsbCB0aGUgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzIGZyb20gd3NkbDppbnB1dCBhbmQgd3NkbDpvdXRwdXQKLSAgICAgICAgTGlzdCBpbnB1dE11bHRpcGFydHMgPSBnZXRNaW1lTXVsdGlwYXJ0RWxlbWVudHMoCi0gICAgICAgICAgYmluZGluZ0lucHV0ID09IG51bGwgPyBudWxsIDogYmluZGluZ0lucHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpKTsKLSAgICAgICAgTGlzdCBvdXRwdXRNdWx0aXBhcnRzID0gZ2V0TWltZU11bHRpcGFydEVsZW1lbnRzKAotICAgICAgICAgIGJpbmRpbmdPdXRwdXQgPT0gbnVsbCA/IG51bGwgOiBiaW5kaW5nT3V0cHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpKTsKLQotICAgICAgICAvLyBJZiB0aGUgd3NkbDppbnB1dCBjb250YWlucyBtaW1lOm11bHRpcGFydFJlbGF0ZWQgZWxlbWVudHMKLSAgICAgICAgaWYgKCFpbnB1dE11bHRpcGFydHMuaXNFbXB0eSgpKQotICAgICAgICB7Ci0gICAgICAgICAgbXVsdGlwYXJ0c0ZvdW5kID0gdHJ1ZTsKLQotICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGEgc29hcDpoZWFkZXIgaW4gdGhlIG5vbi1yb290IG1pbWU6cGFydCwKLSAgICAgICAgICAvLyB0aGUgYXNzZXJ0aW9uIGZhaWxlZAotICAgICAgICAgIGlmIChjb250YWluc0ludmFsaWRNaW1lUGFydChpbnB1dE11bHRpcGFydHMpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgaW52YWxpZCBtaW1lOnBhcnQgZWxlbWVudCAiCi0gICAgICAgICAgICAgICsgImlzIGluIHRoZSB3c2RsOmlucHV0IG9mIHRoZSBcIiIgKyBiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKQotICAgICAgICAgICAgICArICJcIiBiaW5kaW5nIG9wZXJhdGlvbi4iKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiB0aGUgd3NkbDpvdXRwdXQgY29udGFpbnMgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzCi0gICAgICAgIGlmICghb3V0cHV0TXVsdGlwYXJ0cy5pc0VtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBtdWx0aXBhcnRzRm91bmQgPSB0cnVlOwotCi0gICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSBzb2FwOmhlYWRlciBpbiB0aGUgbm9uLXJvb3QgbWltZTpwYXJ0LAotICAgICAgICAgIC8vIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgaWYgKGNvbnRhaW5zSW52YWxpZE1pbWVQYXJ0KG91dHB1dE11bHRpcGFydHMpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgaW52YWxpZCBtaW1lOnBhcnQgZWxlbWVudCAiCi0gICAgICAgICAgICAgICAgKyAiaXMgaW4gdGhlIHdzZGw6b3V0cHV0IG9mIHRoZSBcIiIgKyBiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKQotICAgICAgICAgICAgICAgICsgIlwiIGJpbmRpbmcgb3BlcmF0aW9uLiIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgLy8gSWYgdGhlIGJpbmRpbmcgY29udGFpbnMgbm8gb25lIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50LAotICAgICAgLy8gdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKCFtdWx0aXBhcnRzRm91bmQpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGFuYWUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gYWZlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBhZmUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLSAgLyoqCi0gICAqIExvb2tzIGZvciBzdWNoIG5vbi1yb290IG1pbWU6cGFydCBlbGVtZW50IGZyb20gYSBsaXN0IG9mIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50cwotICAgKiB0aGF0IGNvbnRhaW5zIGEgc29hcDpoZWFkZXIgZWxlbWVudC4KLSAgICogQHBhcmFtIG11bHRpcGFydHMgYSBsaXN0IG9mIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50cwotICAgKiBAcmV0dXJuIHRydWUsIGlmIHN1Y2ggZWxlbWVudCBpcyBmb3VuZCwgZmFsc2Ugb3RoZXJ3aXNlCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gY29udGFpbnNJbnZhbGlkTWltZVBhcnQoTGlzdCBtdWx0aXBhcnRzKQotICB7Ci0gICAgLy8gR29pbmcgdGhyb3VnaCBhIGxpc3Qgb2YgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtdWx0aXBhcnRzLnNpemUoKTsgaSsrKQotICAgIHsKLSAgICAgIC8vIEdldHRpbmcgYSBsaXN0IG9mIG1pbWU6cGFydCBlbGVtZW50cwotICAgICAgTGlzdCBtaW1lUGFydHMgPQotICAgICAgICAoKE1JTUVNdWx0aXBhcnRSZWxhdGVkKSBtdWx0aXBhcnRzLmdldChpKSkuZ2V0TUlNRVBhcnRzKCk7Ci0KLSAgICAgIC8vIExvb2tpbmcgZm9yIG5vbi1yb290IG1pbWU6cGFydFMKLSAgICAgIGlmIChtaW1lUGFydHMuc2l6ZSgpID4gMSkKLSAgICAgIHsKLSAgICAgICAgZm9yIChpbnQgaiA9IDE7IGogPCBtaW1lUGFydHMuc2l6ZSgpOyBqKyspCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXR0aW5nIGEgbGlzdCBvZiBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIG9mIGEgbWltZTpwYXJ0Ci0gICAgICAgICAgTGlzdCBleHRFbGVtcyA9Ci0gICAgICAgICAgICAoKE1JTUVQYXJ0KSBtaW1lUGFydHMuZ2V0KGopKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgICAgICAvLyBHb2luZyB0aHJvdWdoIHRoZSBleHRlbnNpYmlsaXR5IGVsZW1lbnRzCi0gICAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBleHRFbGVtcy5zaXplKCk7IGsrKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBJZiBhbiBleHRlbnNpYmlsaXR5IGVsZW1lbnQgaXMgYSBzb2FwOmhlYWRlciwKLSAgICAgICAgICAgIC8vIHJldHVybiB0cnVlCi0gICAgICAgICAgICBpZiAoKChFeHRlbnNpYmlsaXR5RWxlbWVudClleHRFbGVtcy5nZXQoaykpCi0gICAgICAgICAgICAgIC5nZXRFbGVtZW50VHlwZSgpLmVxdWFscyhXU0RMX1NPQVBfSEVBREVSKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIHJldHVybiBmYWxzZSwgaWYgdGhlIGVsZW1lbnQgaXMgbm90IGZvdW5kCi0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbGxlY3RzIGFsbCBtaW1lOm11bHRpcGFydFJlbGF0ZWQgZWxlbWVudHMuCi0gICAqIEBwYXJhbSBleHRFbGVtcyBhIGxpc3Qgb2YgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyB0aGF0IGNhbiBjb250YWluIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50cy4KLSAgICogQHJldHVybiB0aGUgbGlzdCBvZiBtaW1lOm11bHRpcGFydFJlbGF0ZWQgZWxlbWVudHMgZm91bmQuCi0gICAqLwotICBwcml2YXRlIExpc3QgZ2V0TWltZU11bHRpcGFydEVsZW1lbnRzKExpc3QgZXh0RWxlbXMpCi0gIHsKLSAgICBMaXN0IG1pbWVNdWx0aXBhcnRFbGVtZW50cyA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAgIGlmIChleHRFbGVtcyAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggYWxsIHRoZSBleHRlbnNpYmlsaXR5IGVsZW1lbnRzCi0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4dEVsZW1zLnNpemUoKTsgaSsrKQotICAgICAgewotICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBleHRFbGVtcy5nZXQoaSk7Ci0gICAgICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZAotICAgICAgICBpZiAoZXh0RWxlbS5nZXRFbGVtZW50VHlwZSgpLmVxdWFscyhXU0RMX01JTUVfTVVMVElQQVJUKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIEFkZGluZyB0aGUgZWxlbWVudCB0byB0aGUgbGlzdCBiZWluZyByZXR1cm5lZAotICAgICAgICAgIG1pbWVNdWx0aXBhcnRFbGVtZW50cy5hZGQoZXh0RWxlbSk7Ci0gICAgICAgICAgLy8gR2V0dGluZyB0aGUgbWltZTpwYXJ0IGVsZW1lbnRzIG9mIHRoZSBtaW1lOm11bHRpcGFydFJlbGF0ZWQKLSAgICAgICAgICBMaXN0IG1pbWVQYXJ0cyA9ICgoTUlNRU11bHRpcGFydFJlbGF0ZWQpIGV4dEVsZW0pLmdldE1JTUVQYXJ0cygpOwotICAgICAgICAgIC8vIEdvaW5nIHRocm91Z2ggYWxsIHRoZSBtaW1lOnBhcnQgZWxlbWVudHMKLSAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG1pbWVQYXJ0cy5zaXplKCk7IGorKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBDb2xsZWN0aW5nIGFsbCB0aGUgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzIG9mIHRoaXMgbWltZTpwYXJ0Ci0gICAgICAgICAgICBMaXN0IGVsZW1zID0gZ2V0TWltZU11bHRpcGFydEVsZW1lbnRzKAotICAgICAgICAgICAgICAoKE1JTUVQYXJ0KSBtaW1lUGFydHMuZ2V0KGopKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgICAgICAgICAvLyBBZGRpbmcgdGhlIGVsZW1lbnRzIHRvIHRoZSBsaXN0IGJlaW5nIHJldHVybmVkCi0gICAgICAgICAgICBtaW1lTXVsdGlwYXJ0RWxlbWVudHMuYWRkQWxsKGVsZW1zKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbWltZU11bHRpcGFydEVsZW1lbnRzOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjkwNy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjkwNy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTQ0NDVmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MDcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotCi0vKioKLSAqIEFQMjkwNwotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmJpbmRpbmc8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+RWFjaCBNSU1FIHBhcnQgaW4gYSBkZXNjcmlwdGlvbiBpcyBkZWZpbmVkIHVzaW5nCi0gKiBhbiBlbGVtZW50IHdpdGggYSBsb2NhbCBuYW1lIG9mIHBhcnQgaW4gdGhlIG5hbWVzcGFjZSBvZiB0aGUKLSAqIFdTREwgTUlNRSBCaW5kaW5nIGV4dGVuc2lvbi48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQVAyOTA3IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQVAyOTA3KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjkwOC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjkwOC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODlmNGJhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MDguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0vKioKLSAqIEFQMjkwOAotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmJpbmRpbmc8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIG1pbWU6cGFydCBlbGVtZW50IGluIGEgREVTQ1JJUFRJT04gZG9lcyBub3QgaGF2ZSBhIG5hbWUgYXR0cmlidXRlLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBBUDI5MDggZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIGltcGxlbWVudHMgV1NJVGFnCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBBUDI5MDgoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gR2V0dGluZyBhIHdzZGw6YmluZGluZwotICAgICAgQmluZGluZyB3c2RsQmluZGluZyA9IChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgICAvLyBTaW5jZSBXU0RMNEogMS40IGlnbm9yZXMgYW55IGF0dHJpYnV0ZXMgb2YgbWltZTpwYXJ0LCB1c2UgWGVyY2VzIDIuNi4yIGluc3RlYWQKLSAgICAgIERvY3VtZW50IGRvYyA9IGVudHJ5Q29udGV4dC5nZXRXU0RMRG9jdW1lbnQoKS5nZXREb2N1bWVudCgpOwotICAgICAgaWYgKGRvYyA9PSBudWxsKQotICAgICAgewotICAgICAgICBkb2MgPSB2YWxpZGF0b3IucGFyc2VYTUxEb2N1bWVudFVSTCh2YWxpZGF0b3Iud3NkbERvY3VtZW50LmdldExvY2F0aW9uKCksIG51bGwpOwotICAgICAgfQotCi0gICAgICAvLyBGaW5kaW5nIHRoZSB3c2RsOmJpbmRpbmcgZWxlbWVudCBiZWluZyBwcm9jZXNzZWQKLSAgICAgIEVsZW1lbnQgYmluZGluZyA9IGdldEJpbmRpbmdFbGVtZW50KAotICAgICAgICBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCksIHdzZGxCaW5kaW5nLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkpOwotCi0gICAgICBMaXN0IG9wcyA9IGdldENoaWxkRWxlbWVudHMoYmluZGluZywgV1NETF9PUEVSQVRJT04pOwotCi0gICAgICAvLyBBIHZhcmlhYmxlIHRoYXQgaW5kaWNhdGVzIGEgYmluZGluZyBjb250YWlucyBhdCBsZWFzdCBvbmUKLSAgICAgIC8vIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50Ci0gICAgICBib29sZWFuIG11bHRpcGFydHNGb3VuZCA9IGZhbHNlOwotCi0gICAgICAvLyBHb2luZyB0aHJvdWdoIHRoZSBvcGVyYXRpb24gZWxlbWVudHMKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb3BzLnNpemUoKTsgaSsrKQotICAgICAgewotICAgICAgICBFbGVtZW50IGJpbmRpbmdPcGVyYXRpb24gPSAoRWxlbWVudCkgb3BzLmdldChpKTsKLQotICAgICAgICAvLyBHZXR0aW5nIHdzZGw6aW5wdXQgYW5kIHdzZGw6b3V0cHV0IGVsZW1lbnRzIG9mIGFuIG9wZXJhdGlvbgotICAgICAgICBFbGVtZW50IGJpbmRpbmdJbnB1dCA9IGdldENoaWxkRWxlbWVudChiaW5kaW5nT3BlcmF0aW9uLCBXU0RMX0lOUFVUKTsKLSAgICAgICAgRWxlbWVudCBiaW5kaW5nT3V0cHV0ID0gZ2V0Q2hpbGRFbGVtZW50KGJpbmRpbmdPcGVyYXRpb24sIFdTRExfT1VUUFVUKTsKLQotICAgICAgICAvLyBDb2xsZWN0aW5nIGFsbCB0aGUgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzIGZyb20gd3NkbDppbnB1dCBhbmQgd3NkbDpvdXRwdXQKLSAgICAgICAgTGlzdCBpbnB1dE11bHRpcGFydHMgPSBnZXRNaW1lTXVsdGlwYXJ0RWxlbWVudHMoYmluZGluZ0lucHV0KTsKLSAgICAgICAgTGlzdCBvdXRwdXRNdWx0aXBhcnRzID0gZ2V0TWltZU11bHRpcGFydEVsZW1lbnRzKGJpbmRpbmdPdXRwdXQpOwotCi0gICAgICAgIC8vIElmIHRoZSB3c2RsOmlucHV0IGNvbnRhaW5zIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50cwotICAgICAgICBpZiAoIWlucHV0TXVsdGlwYXJ0cy5pc0VtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBtdWx0aXBhcnRzRm91bmQgPSB0cnVlOwotCi0gICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSBtaW1lOnBhcnQgZWxlbWVudCBjb250YWluaW5nIGEgbmFtZSBhdHRyaWJ1dGUsCi0gICAgICAgICAgLy8gdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICBpZiAoY29udGFpbnNJbnZhbGlkTWltZVBhcnQoaW5wdXRNdWx0aXBhcnRzKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIGludmFsaWQgIgotICAgICAgICAgICAgICAgICsgIm1pbWU6cGFydCBlbGVtZW50IGlzIGluIHRoZSB3c2RsOmlucHV0IG9mIHRoZSBcIiIKLSAgICAgICAgICAgICAgICArIGJpbmRpbmdPcGVyYXRpb24uZ2V0QXR0cmlidXRlKFdTSUNvbnN0YW50cy5BVFRSX05BTUUpCi0gICAgICAgICAgICAgICAgKyAiXCIgYmluZGluZyBvcGVyYXRpb24uIik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgdGhlIHdzZGw6b3V0cHV0IGNvbnRhaW5zIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50cwotICAgICAgICBpZiAoIW91dHB1dE11bHRpcGFydHMuaXNFbXB0eSgpKQotICAgICAgICB7Ci0gICAgICAgICAgbXVsdGlwYXJ0c0ZvdW5kID0gdHJ1ZTsKLQotICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGEgbWltZTpwYXJ0IGVsZW1lbnQgY29udGFpbmluZyBhIG5hbWUgYXR0cmlidXRlLAotICAgICAgICAgIC8vIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgaWYgKGNvbnRhaW5zSW52YWxpZE1pbWVQYXJ0KG91dHB1dE11bHRpcGFydHMpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgaW52YWxpZCAiCi0gICAgICAgICAgICAgICAgKyAibWltZTpwYXJ0IGVsZW1lbnQgaXMgaW4gdGhlIHdzZGw6b3V0cHV0IG9mIHRoZSBcIiIKLSAgICAgICAgICAgICAgICArIGJpbmRpbmdPcGVyYXRpb24uZ2V0QXR0cmlidXRlKFdTSUNvbnN0YW50cy5BVFRSX05BTUUpCi0gICAgICAgICAgICAgICAgKyAiXCIgYmluZGluZyBvcGVyYXRpb24uIik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvLyBJZiB0aGUgYmluZGluZyBjb250YWlucyBubyBvbmUgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnQsCi0gICAgICAvLyB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAoIW11bHRpcGFydHNGb3VuZCkKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gYWZlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBhZmUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGlvZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICAKLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qKgotICAgKiBWYWxpZGF0ZXMgbWltZTpwYXJ0IGVsZW1lbnRzIGZvciBlYWNoIG9mIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50LgotICAgKiBAcGFyYW0gbXVsdGlwYXJ0cyBhIGxpc3Qgb2YgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIHRydWUsIGlmIGFueSBtaW1lOnBhcnQgY29udGFpbnMgYSBuYW1lIGF0dHJpYnV0ZSwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGNvbnRhaW5zSW52YWxpZE1pbWVQYXJ0KExpc3QgbXVsdGlwYXJ0cykgewotICAgIC8vIEdvaW5nIHRocm91Z2ggYSBsaXN0IG9mIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50cwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbXVsdGlwYXJ0cy5zaXplKCk7IGkrKykKLSAgICB7Ci0gICAgICAvLyBHZXR0aW5nIGEgbGlzdCBvZiBtaW1lOnBhcnQgZWxlbWVudHMKLSAgICAgIExpc3QgbWltZVBhcnRzID0KLSAgICAgICAgZ2V0Q2hpbGRFbGVtZW50cygoRWxlbWVudCkgbXVsdGlwYXJ0cy5nZXQoaSksIFdTRExfTUlNRV9QQVJUKTsKLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggYWxsIHRoZSBtaW1lOnBhcnQgZWxlbWVudHMKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbWltZVBhcnRzLnNpemUoKTsgaisrKQotICAgICAgewotICAgICAgICBFbGVtZW50IG1pbWVQYXJ0ID0gKEVsZW1lbnQpIG1pbWVQYXJ0cy5nZXQoaik7Ci0gICAgICAgIC8vIElmIHRoZSBtaW1lOnBhcnQgZWxlbWVudCBjb250YWlucyBhIG5hbWUgYXR0cmlidXRlLAotICAgICAgICAvLyByZXR1cm4gdHJ1ZQotICAgICAgICBpZiAobWltZVBhcnQuZ2V0QXR0cmlidXRlTm9kZShXU0lDb25zdGFudHMuQVRUUl9OQU1FKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gTm8gb25lIGludmFsaWQgbWltZTpwYXJ0IGVsZW1lbnQgaXMgZm91bmQsIHJldHVybiBmYWxzZQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBDb2xsZWN0cyBhbGwgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzLgotICAgKiBAcGFyYW0gcGFyZW50IGFuIGVsZW1lbnQgd2hpY2ggdGhlIGNoaWxkIGVsZW1lbnRzIGFyZSBnYXRoZXJlZCBmcm9tLgotICAgKiBAcmV0dXJuIHRoZSBsaXN0IG9mIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50cyBmb3VuZC4KLSAgICovCi0gIHByaXZhdGUgTGlzdCBnZXRNaW1lTXVsdGlwYXJ0RWxlbWVudHMoRWxlbWVudCBwYXJlbnQpCi0gIHsKLSAgICBMaXN0IG1pbWVNdWx0aXBhcnRFbGVtZW50cyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAvLyBJZiB0aGUgcGFyZW50IGlzIG5vdCBudWxsCi0gICAgaWYgKHBhcmVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIEdldHRpbmcgdGhlIGZpcnN0IHBhcmVudCdzIGNoaWxkCi0gICAgICBFbGVtZW50IGNoaWxkID0gWE1MVXRpbHMuZ2V0Rmlyc3RDaGlsZChwYXJlbnQpOwotICAgICAgd2hpbGUgKGNoaWxkICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIC8vIElmIHRoZSBjaGlsZCBpcyBhIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50Ci0gICAgICAgIGlmIChjaGlsZC5nZXROYW1lc3BhY2VVUkkoKS5lcXVhbHMoV1NETF9NSU1FX01VTFRJUEFSVC5nZXROYW1lc3BhY2VVUkkoKSkKLSAgICAgICAgICAmJiBjaGlsZC5nZXRMb2NhbE5hbWUoKS5lcXVhbHMoV1NETF9NSU1FX01VTFRJUEFSVC5nZXRMb2NhbFBhcnQoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBBZGRpbmcgdGhlIGVsZW1lbnQgdG8gdGhlIGxpc3QgYmVpbmcgcmV0dXJuZWQKLSAgICAgICAgICBtaW1lTXVsdGlwYXJ0RWxlbWVudHMuYWRkKGNoaWxkKTsKLQotICAgICAgICAgIC8vIEdldHRpbmcgbWltZTpwYXJ0UyBmcm9tIHRoZSBlbGVtZW50Ci0gICAgICAgICAgTGlzdCBtaW1lUGFydHMgPSBnZXRDaGlsZEVsZW1lbnRzKGNoaWxkLCBXU0RMX01JTUVfUEFSVCk7Ci0gICAgICAgICAgLy8gR29pbmcgdGhyb3VnaCBhbGwgdGhlIG1pbWU6cGFydCBlbGVtZW50cwotICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWltZVBhcnRzLnNpemUoKTsgaSsrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIENvbGxlY3RpbmcgYWxsIHRoZSBtaW1lOm11bHRpcGFydFJlbGF0ZWQgZWxlbWVudHMgb2YgdGhpcyBtaW1lOnBhcnQKLSAgICAgICAgICAgIExpc3QgZWxlbXMgPSBnZXRNaW1lTXVsdGlwYXJ0RWxlbWVudHMoKEVsZW1lbnQpIG1pbWVQYXJ0cy5nZXQoaSkpOwotICAgICAgICAgICAgLy8gQWRkaW5nIHRoZSBlbGVtZW50cyB0byB0aGUgbGlzdCBiZWluZyByZXR1cm5lZAotICAgICAgICAgICAgbWltZU11bHRpcGFydEVsZW1lbnRzLmFkZEFsbChlbGVtcyk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIEdldHRpbmcgdGhlIG5leHQgY2hpbGQKLSAgICAgICAgY2hpbGQgPSBYTUxVdGlscy5nZXROZXh0U2libGluZyhjaGlsZCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1pbWVNdWx0aXBhcnRFbGVtZW50czsKLSAgfQotCi0gIC8qKgotICAgKiBMb29rcyBmb3IgYW4gZWxlbWVudCdzIGNoaWxkIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBwYXJlbnQgYSBwYXJlbnQgZWxlbWVudC4KLSAgICogQHBhcmFtIGNoaWxkTmFtZSBhIHF1YWxpZmllZCBlbGVtZW50IG5hbWUgYmVpbmcgZm91bmQuCi0gICAqIEByZXR1cm4gYW4gZWxlbWVudCBvciBudWxsIGlmIGl0IGlzIG5vdCBmb3VuZC4KLSAgICovCi0gIHByaXZhdGUgRWxlbWVudCBnZXRDaGlsZEVsZW1lbnQoRWxlbWVudCBwYXJlbnQsIFFOYW1lIGNoaWxkTmFtZSkKLSAgewotICAgIC8vIEdldHRpbmcgdGhlIGZpcnN0IHBhcmVudCdzIGNoaWxkCi0gICAgRWxlbWVudCBjaGlsZCA9IFhNTFV0aWxzLmdldEZpcnN0Q2hpbGQocGFyZW50KTsKLSAgICB3aGlsZSAoY2hpbGQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBJZiB0aGUgY2hpbGQgaGFzIHRoZSByZXF1aXJlZCBxdWFsaWZpZWQgbmFtZQotICAgICAgaWYgKGNoaWxkLmdldE5hbWVzcGFjZVVSSSgpLmVxdWFscyhjaGlsZE5hbWUuZ2V0TmFtZXNwYWNlVVJJKCkpCi0gICAgICAgICYmIGNoaWxkLmdldExvY2FsTmFtZSgpLmVxdWFscyhjaGlsZE5hbWUuZ2V0TG9jYWxQYXJ0KCkpKQotICAgICAgewotICAgICAgICAvLyByZXR1cm4gdGhlIGNoaWxkCi0gICAgICAgIHJldHVybiBjaGlsZDsKLSAgICAgIH0KLSAgICAgIC8vIEdldHRpbmcgdGhlIG5leHQgY2hpbGQKLSAgICAgIGNoaWxkID0gWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcoY2hpbGQpOwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDb2xsZWN0cyBlbGVtZW50J3MgY2hpbGQgZWxlbWVudHMuCi0gICAqIEBwYXJhbSBwYXJlbnQgYSBwYXJlbnQgZWxlbWVudC4KLSAgICogQHBhcmFtIGNoaWxkTmFtZSBhIHF1YWxpZmllZCBlbGVtZW50IG5hbWUgYmVpbmcgZm91bmQuCi0gICAqIEByZXR1cm4gYSBsaXN0IG9mIGVsZW1lbnRzIGZvdW5kLgotICAgKi8KLSAgcHJpdmF0ZSBMaXN0IGdldENoaWxkRWxlbWVudHMoRWxlbWVudCBwYXJlbnQsIFFOYW1lIGNoaWxkTmFtZSkKLSAgewotICAgIExpc3QgY2hpbGRyZW4gPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgaWYgKHBhcmVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIEdldHRpbmcgdGhlIGZpcnN0IHBhcmVudCdzIGNoaWxkCi0gICAgICBFbGVtZW50IGNoaWxkID0gWE1MVXRpbHMuZ2V0Rmlyc3RDaGlsZChwYXJlbnQpOwotICAgICAgd2hpbGUgKGNoaWxkICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIC8vIElmIHRoZSBjaGlsZCBoYXMgdGhlIHJlcXVpcmVkIHF1YWxpZmllZCBuYW1lCi0gICAgICAgIGlmIChjaGlsZC5nZXROYW1lc3BhY2VVUkkoKS5lcXVhbHMoY2hpbGROYW1lLmdldE5hbWVzcGFjZVVSSSgpKQotICAgICAgICAgICYmIGNoaWxkLmdldExvY2FsTmFtZSgpLmVxdWFscyhjaGlsZE5hbWUuZ2V0TG9jYWxQYXJ0KCkpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gQWRkaW5nIHRoZSBjaGlsZCB0byB0aGUgbGlzdAotICAgICAgICAgIGNoaWxkcmVuLmFkZChjaGlsZCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gR2V0dGluZyB0aGUgbmV4dCBiaW5kaW5nJ3MgY2hpbGQKLSAgICAgICAgY2hpbGQgPSBYTUxVdGlscy5nZXROZXh0U2libGluZyhjaGlsZCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBjaGlsZHJlbjsKLSAgfQotCi0gIC8qKgotICAgKiBMb29rcyBmb3Igd3NkbDpiaW5kaW5nIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBkZWZpbml0aW9ucyBhIHdzZGw6ZGVmaW5pdGlvbnMgZWxlbWVudC4KLSAgICogQHBhcmFtIGJpbmRpbmdOYW1lIGEgbmFtZSBvZiB3c2RsOmJpbmRpbmcgZWxlbWVudC4KLSAgICogQHJldHVybiBhIHdzZGw6YmluZGluZyBlbGVtZW50IG9yIG51bGwgaWYgaXQgaXMgbm90IGZvdW5kLgotICAgKi8KLSAgcHJpdmF0ZSBFbGVtZW50IGdldEJpbmRpbmdFbGVtZW50KEVsZW1lbnQgZGVmaW5pdGlvbnMsIFN0cmluZyBiaW5kaW5nTmFtZSkKLSAgewotICAgIC8vIEdldHRpbmcgdGhlIGZpcnN0IGRlZmluaXRpb25zJyBjaGlsZAotICAgIEVsZW1lbnQgY2hpbGQgPSBYTUxVdGlscy5nZXRGaXJzdENoaWxkKGRlZmluaXRpb25zKTsKLSAgICB3aGlsZSAoY2hpbGQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBJZiBkZWZpbml0aW9ucycgY2hpbGQgaXMgd3NkbDpiaW5kaW5nIGVsZW1lbnQKLSAgICAgIC8vIGFuZCBpcyB0aGUgc2FtZSB0aGF0IGlzIGJlaW5nIHByb2Nlc3NlZCBieSBXU0RMVmFsaWRhdG9yCi0gICAgICBpZiAoY2hpbGQuZ2V0TmFtZXNwYWNlVVJJKCkuZXF1YWxzKFdTRExfQklORElORy5nZXROYW1lc3BhY2VVUkkoKSkKLSAgICAgICAgJiYgY2hpbGQuZ2V0TG9jYWxOYW1lKCkuZXF1YWxzKFdTRExfQklORElORy5nZXRMb2NhbFBhcnQoKSkKLSAgICAgICAgJiYgY2hpbGQuZ2V0QXR0cmlidXRlKFdTSUNvbnN0YW50cy5BVFRSX05BTUUpLmVxdWFscyhiaW5kaW5nTmFtZSkpCi0gICAgICB7Ci0gICAgICAgIC8vIHJldHVybiB0aGUgd3NkbDpiaW5kaW5nIGVsZW1lbnQKLSAgICAgICAgcmV0dXJuIGNoaWxkOwotICAgICAgfQotICAgICAgLy8gR2V0dGluZyB0aGUgbmV4dCBkZWZpbml0aW9ucycgY2hpbGQKLSAgICAgIGNoaWxkID0gWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcoY2hpbGQpOwotICAgIH0KLSAgICAvLyByZXR1cm4gbnVsbCwgaXMgdGhlcmUgaXMgbm8gc3VjaCB3c2RsOmJpbmRpbmcKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MDkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MDkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODY2ODFiYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQVAyOTA5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRUNvbnRlbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLS8qKgotICogQVAyOTA5Ci0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZzwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5NdWx0aXBsZSBtaW1lOmNvbnRlbnQgY2hpbGQgZWxlbWVudHMgb2YgYSBtaW1lOnBhcnQgZWxlbWVudAotICogaW4gYSBkZXNjaXB0aW9uIHJlZmVyZW5jZSB0aGUgc2FtZSB3c2RsOnBhcnQuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEFQMjkwOSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLy8gQSB2YXJpYWJsZSB0aGF0IGluZGljYXRlcyBhIGJpbmRpbmcgY29udGFpbnMKLSAgLy8gbXVsdGlwbGUgbWltZTpjb250ZW50IGVsZW1lbnRzCi0gIHByaXZhdGUgYm9vbGVhbiBtdWx0aXBsZUNvbnRlbnRGb3VuZDsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQVAyOTA5KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIFJlc2V0dGluZyB0aGUgdmFyaWFibGUKLSAgICBtdWx0aXBsZUNvbnRlbnRGb3VuZCA9IGZhbHNlOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gR2V0dGluZyBhIHdzZGw6YmluZGluZwotICAgICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0KLSAgICAgIC8vIEdldHRpbmcgaXRzIHdzZGw6b3BlcmF0aW9uIGVsZW1lbnRzCi0gICAgICBMaXN0IG9wcyA9IGJpbmRpbmcuZ2V0QmluZGluZ09wZXJhdGlvbnMoKTsKLQotICAgICAgLy8gR29pbmcgdGhyb3VnaCB0aGUgb3BlcmF0aW9uIGVsZW1lbnRzCi0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IG9wcy5zaXplKCk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gKEJpbmRpbmdPcGVyYXRpb24pIG9wcy5nZXQoaSk7Ci0KLSAgICAgICAgLy8gR2V0dGluZyB3c2RsOmlucHV0IGFuZCB3c2RsOm91dHB1dCBlbGVtZW50cyBvZiBhbiBvcGVyYXRpb24KLSAgICAgICAgQmluZGluZ0lucHV0IGJpbmRpbmdJbnB1dCA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCk7Ci0gICAgICAgIEJpbmRpbmdPdXRwdXQgYmluZGluZ091dHB1dCA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ091dHB1dCgpOwotCi0gICAgICAgIC8vIENvbGxlY3RpbmcgYWxsIHRoZSBtaW1lOnBhcnQgZWxlbWVudHMgZnJvbSB3c2RsOmlucHV0IGFuZCB3c2RsOm91dHB1dAotICAgICAgICBMaXN0IGlucHV0TWltZVBhcnRzID0gZ2V0TWltZVBhcnRzKAotICAgICAgICAgIGJpbmRpbmdJbnB1dCA9PSBudWxsID8gbnVsbCA6IGJpbmRpbmdJbnB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgICAgIExpc3Qgb3V0cHV0TWltZVBhcnRzID0gZ2V0TWltZVBhcnRzKAotICAgICAgICAgIGJpbmRpbmdPdXRwdXQgPT0gbnVsbCA/IG51bGwgOiBiaW5kaW5nT3V0cHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpKTsKLQotICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIG1pbWU6cGFydCBjb250YWluaW5nIG11bHRpcGxlIG1pbWU6Y29udGVudFMKLSAgICAgICAgLy8gd2hpY2ggcmVmZXJlbmNlIGRpZmZlcmVudCB3c2RsOnBhcnRTLCB0aGUgYXNzZXJ0aW9uIGZhaWxlZAotICAgICAgICBpZiAoY29udGFpbnNJbnZhbGlkTWltZVBhcnQoaW5wdXRNaW1lUGFydHMpKQotICAgICAgICB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSBpbnZhbGlkIG1pbWU6cGFydCBlbGVtZW50ICIKLSAgICAgICAgICAgICsgImlzIGluIHRoZSB3c2RsOmlucHV0IG9mIHRoZSBcIiIgKyBiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKQotICAgICAgICAgICAgKyAiXCIgYmluZGluZyBvcGVyYXRpb24uIik7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIG1pbWU6cGFydCBjb250YWluaW5nIG11bHRpcGxlIG1pbWU6Y29udGVudFMKLSAgICAgICAgLy8gd2hpY2ggcmVmZXJlbmNlIGRpZmZlcmVudCB3c2RsOnBhcnRTLCB0aGUgYXNzZXJ0aW9uIGZhaWxlZAotICAgICAgICBpZiAoY29udGFpbnNJbnZhbGlkTWltZVBhcnQob3V0cHV0TWltZVBhcnRzKSkKLSAgICAgICAgewotICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgaW52YWxpZCBtaW1lOnBhcnQgZWxlbWVudCAiCi0gICAgICAgICAgICArICJpcyBpbiB0aGUgd3NkbDpvdXRwdXQgb2YgdGhlIFwiIiArIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpCi0gICAgICAgICAgICArICJcIiBiaW5kaW5nIG9wZXJhdGlvbi4iKTsKLSAgICAgICAgfQotCi0gICAgICB9Ci0gICAgICAvLyBJZiB0aGUgYmluZGluZyBkb2VzIG5vdCBjb250YWluIGEgbWltZTpwYXJ0IHdpdGggbXVsdGlwbGUKLSAgICAgIC8vIG1pbWU6Y29udGVudCBlbGVtZW50cywgdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKCFtdWx0aXBsZUNvbnRlbnRGb3VuZCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gYW5hZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBhZmUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgIGFmZS5nZXRNZXNzYWdlKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlcyBtaW1lOnBhcnQgZWxlbWVudHMuCi0gICAqIEBwYXJhbSBtaW1lUGFydHMgYSBsaXN0IG9mIG1pbWU6cGFydCBlbGVtZW50cy4KLSAgICogQHJldHVybiB0cnVlIGlmIG11bHRpcGxlIG1pbWU6Y29udGVudFMgb2YgYSBtaW1lOnBhcnQKLSAgICogcmVmZXJlbmNlIGRpZmZlcmVudCB3c2RsOnBhcnRTLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gY29udGFpbnNJbnZhbGlkTWltZVBhcnQoTGlzdCBtaW1lUGFydHMpCi0gIHsKLSAgICAvLyBHb2luZyB0aHJvdWdoIGEgbGlzdCBvZiBtaW1lOnBhcnQgZWxlbWVudHMKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1pbWVQYXJ0cy5zaXplKCk7IGkrKykKLSAgICB7Ci0gICAgICAvLyBBIHZhcmlhYmxlIHRoYXQgaW5kaWNhdGVzIHRoZSBtaW1lOnBhcnQgY29udGFpbnMKLSAgICAgIC8vIGF0IGxlYXN0IG9uZSBtaW1lOmNvbnRlbnQgZWxlbWVudAotICAgICAgYm9vbGVhbiBtaW1lQ29udGVudEZvdW5kID0gZmFsc2U7Ci0gICAgICBTdHJpbmcgbWltZUNvbnRlbnRQYXJ0ID0gbnVsbDsKLQotICAgICAgLy8gR29pbmcgdGhyb3VnaCBtaW1lOnBhcnQgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cwotICAgICAgTGlzdCBleHRFbGVtcyA9ICgoTUlNRVBhcnQpIG1pbWVQYXJ0cy5nZXQoaSkpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBleHRFbGVtcy5zaXplKCk7IGorKykKLSAgICAgIHsKLSAgICAgICAgLy8gSWYgYW4gZXh0ZW5zaWJpbGl0eSBlbGVtZW50IGlzIG1pbWU6Y29udGVudAotICAgICAgICBpZiAoKChFeHRlbnNpYmlsaXR5RWxlbWVudClleHRFbGVtcy5nZXQoaikpCi0gICAgICAgICAgLmdldEVsZW1lbnRUeXBlKCkuZXF1YWxzKFdTRExfTUlNRV9DT05URU5UKSkKLSAgICAgICAgewotICAgICAgICAgIE1JTUVDb250ZW50IG1pbWVDb250ZW50ICA9IChNSU1FQ29udGVudCkgZXh0RWxlbXMuZ2V0KGopOwotICAgICAgICAgIC8vIElmIGEgbWltZTpjb250ZW50IGVsZW1lbnQgd2FzIGFscmVhZHkgZm91bmQgaW4gdGhpcyBtaW1lOnBhcnQKLSAgICAgICAgICBpZiAobWltZUNvbnRlbnRGb3VuZCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBtdWx0aXBsZUNvbnRlbnRGb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAvLyBJZiBhIG1pbWU6Y29udGVudCByZWZlcmVuY2VzIG90aGVyIHdzZGw6cGFydCB0aGFuIHRoZQotICAgICAgICAgICAgLy8gcHJldmlvdXMgbWltZTpjb250ZW50IGRvLCByZXR1cm4gdHJ1ZQotICAgICAgICAgICAgaWYgKG1pbWVDb250ZW50LmdldFBhcnQoKSA9PSBudWxsCi0gICAgICAgICAgICAgIHx8ICFtaW1lQ29udGVudC5nZXRQYXJ0KCkuZXF1YWxzKG1pbWVDb250ZW50UGFydCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCBtaW1lOmNvbnRlbnQgZWxlbWVudCBvZiBtaW1lOnBhcnQKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgbWltZUNvbnRlbnRGb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICBtaW1lQ29udGVudFBhcnQgPSBtaW1lQ29udGVudC5nZXRQYXJ0KCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIFRoZXJlIGFyZSBubyBpbnZhbGlkIG1pbWU6cGFydCBlbGVtZW50cywgcmV0dXJuIGZhbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbGxlY3RzIGFsbCBtaW1lOnBhcnQgZWxlbWVudHMuCi0gICAqIEBwYXJhbSBleHRFbGVtcyBhIGxpc3Qgb2YgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyB0aGF0IGNhbiBjb250YWluIG1pbWU6cGFydCBlbGVtZW50cy4KLSAgICogQHJldHVybiB0aGUgbGlzdCBvZiBtaW1lOnBhcnQgZWxlbWVudHMgZm91bmQuCi0gICAqLwotICBwcml2YXRlIExpc3QgZ2V0TWltZVBhcnRzKExpc3QgZXh0RWxlbXMpCi0gIHsKLSAgICBMaXN0IG1pbWVQYXJ0cyA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAgIGlmIChleHRFbGVtcyAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggYWxsIHRoZSBleHRlbnNpYmlsaXR5IGVsZW1lbnRzCi0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4dEVsZW1zLnNpemUoKTsgaSsrKQotICAgICAgewotICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBleHRFbGVtcy5nZXQoaSk7Ci0gICAgICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZAotICAgICAgICBpZiAoZXh0RWxlbS5nZXRFbGVtZW50VHlwZSgpLmVxdWFscyhXU0RMX01JTUVfTVVMVElQQVJUKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIEdldHRpbmcgdGhlIG1pbWU6cGFydCBlbGVtZW50cyBvZiB0aGUgbWltZTptdWx0aXBhcnRSZWxhdGVkCi0gICAgICAgICAgTGlzdCBtUGFydHMgPSAoKE1JTUVNdWx0aXBhcnRSZWxhdGVkKSBleHRFbGVtKS5nZXRNSU1FUGFydHMoKTsKLSAgICAgICAgICBtaW1lUGFydHMuYWRkQWxsKG1QYXJ0cyk7Ci0gICAgICAgICAgLy8gR29pbmcgdGhyb3VnaCBhbGwgdGhlIG1pbWU6cGFydCBlbGVtZW50cwotICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbVBhcnRzLnNpemUoKTsgaisrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIExpc3QgZWxlbXMgPSBnZXRNaW1lUGFydHMoCi0gICAgICAgICAgICAgICAgKChNSU1FUGFydCkgbVBhcnRzLmdldChqKSkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpOwotICAgICAgICAgICAgICAvLyBBZGRpbmcgdGhlIGVsZW1lbnRzIHRvIHRoZSBsaXN0IGJlaW5nIHJldHVybmVkCi0gICAgICAgICAgICAgIG1pbWVQYXJ0cy5hZGRBbGwoZWxlbXMpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbWltZVBhcnRzOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjkxMC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjkxMC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDJkMzM1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MTAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRUNvbnRlbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLS8qKgotICogQVAyOTEwCi0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZzwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5BIG1pbWU6Y29udGVudCBpbiBhIERFU0NSSVBUSU9OIHJlZmVyZW5jZXMKLSAqIGEgd3NkbDpwYXJ0IHRoYXQgaXMgZGVmaW5lZCB1c2luZyBlaXRoZXIgdGhlIHR5cGUgYXR0cmlidXRlCi0gKiBvciB0aGUgZWxlbWVudCBhdHRyaWJ1dGUuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEFQMjkxMCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEFQMjkxMChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBBIHZhcmlhYmxlIHRoYXQgaW5kaWNhdGVzIGEgYmluZGluZyBjb250YWlucyBhdCBsZWFzdCBvbmUKLSAgICAgIC8vIG1pbWU6Y29udGVudCBlbGVtZW50Ci0gICAgICBib29sZWFuIG1pbWVDb250ZW50c0ZvdW5kID0gZmFsc2U7Ci0KLSAgICAgIC8vIEdldHRpbmcgYSB3c2RsOmJpbmRpbmcKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgICAvLyBHZXR0aW5nIGl0cyB3c2RsOm9wZXJhdGlvbiBlbGVtZW50cwotICAgICAgTGlzdCBvcHMgPSBiaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb25zKCk7Ci0KLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggdGhlIG9wZXJhdGlvbiBlbGVtZW50cwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvcHMuc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKSBvcHMuZ2V0KGkpOwotCi0gICAgICAgIC8vIEdldHRpbmcgd3NkbDppbnB1dCBhbmQgd3NkbDpvdXRwdXQgZWxlbWVudHMgb2YgYW4gb3BlcmF0aW9uCi0gICAgICAgIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpOwotICAgICAgICBCaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXRwdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKTsKLQotICAgICAgICAvLyBDb2xsZWN0aW5nIGFsbCB0aGUgbWltZTpjb250ZW50IGVsZW1lbnRzIGZyb20gd3NkbDppbnB1dCBhbmQgd3NkbDpvdXRwdXQKLSAgICAgICAgTGlzdCBpbnB1dE1pbWVDb250ZW50cyA9IGdldE1pbWVDb250ZW50RWxlbWVudHMoCi0gICAgICAgICAgYmluZGluZ0lucHV0ID09IG51bGwgPyBudWxsIDogYmluZGluZ0lucHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpKTsKLSAgICAgICAgTGlzdCBvdXRwdXRNaW1lQ29udGVudHMgPSBnZXRNaW1lQ29udGVudEVsZW1lbnRzKAotICAgICAgICAgIGJpbmRpbmdPdXRwdXQgPT0gbnVsbCA/IG51bGwgOiBiaW5kaW5nT3V0cHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpKTsKLQotICAgICAgICAvLyBJZiB0aGUgd3NkbDppbnB1dCBjb250YWlucyBtaW1lOmNvbnRlbnQgZWxlbWVudHMKLSAgICAgICAgaWYgKCFpbnB1dE1pbWVDb250ZW50cy5pc0VtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBtaW1lQ29udGVudHNGb3VuZCA9IHRydWU7Ci0gICAgICAgICAgSW5wdXQgcG9ydFR5cGVJbnB1dCA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0T3BlcmF0aW9uKCkuZ2V0SW5wdXQoKTsKLSAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyB0aGUgY29ycmVzcG9uZGluZyB3c2RsOmlucHV0IGluIHdzZGw6cG9ydFR5cGUKLSAgICAgICAgICAvLyBvciB0aGUgd3NkbDppbnB1dCBkb2VzIG5vdCBzcGVjaWZ5IGEgbWVzc2FnZSBhdHRyaWJ1dGUsCi0gICAgICAgICAgLy8gdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICBpZiAocG9ydFR5cGVJbnB1dCA9PSBudWxsIHx8IHBvcnRUeXBlSW5wdXQuZ2V0TWVzc2FnZSgpID09IG51bGwpCi0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgIlRoZSBjb3JyZXNwb25naW5nIG9wZXJhdGlvbiBpbiB0aGUgd3NkbDpwb3J0VHlwZSBmb3IgdGhlIFwiIgotICAgICAgICAgICAgICArIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpICsgIlwiIGJpbmRpbmcgb3BlcmF0aW9uIGlzIGludmFsaWQuIik7Ci0gICAgICAgICAgLy8gR2V0dGluZyBhIG1pbWU6Y29udGVudCByZWZlcmVuY2luZyBhbiBpbnZhbGlkIHdzZGw6cGFydCAKLSAgICAgICAgICBTdHJpbmcgcGFydCA9IGdldEludmFsaWRNaW1lQ29udGVudFBhcnQoCi0gICAgICAgICAgICBpbnB1dE1pbWVDb250ZW50cywgcG9ydFR5cGVJbnB1dC5nZXRNZXNzYWdlKCkpOwotICAgICAgICAgIC8vIElmIHN1Y2ggcGFydCBpcyBmb3VuZCwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICBpZiAocGFydCAhPSBudWxsKQotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oInBhcnQ9XCIiICsgcGFydCArCi0gICAgICAgICAgICAgICJcIiwgdGhlIGlucHV0IG9mIHRoZSBiaW5kaW5nIG9wZXJhdGlvbiBcIiIKLSAgICAgICAgICAgICAgKyBiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKSArICJcIiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgdGhlIHdzZGw6b3V0cHV0IGNvbnRhaW5zIG1pbWU6Y29udGVudCBlbGVtZW50cwotICAgICAgICBpZiAoIW91dHB1dE1pbWVDb250ZW50cy5pc0VtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBtaW1lQ29udGVudHNGb3VuZCA9IHRydWU7Ci0gICAgICAgICAgT3V0cHV0IHBvcnRUeXBlT3V0cHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKS5nZXRPdXRwdXQoKTsKLSAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyB0aGUgY29ycmVzcG9uZGluZyB3c2RsOm91dHB1dCBpbiB3c2RsOnBvcnRUeXBlCi0gICAgICAgICAgLy8gb3IgdGhlIHdzZGw6b3V0cHV0IGRvZXMgbm90IHNwZWNpZnkgYSBtZXNzYWdlIGF0dHJpYnV0ZSwKLSAgICAgICAgICAvLyB0aGUgYXNzZXJ0aW9uIGZhaWxlZAotICAgICAgICAgIGlmIChwb3J0VHlwZU91dHB1dCA9PSBudWxsIHx8IHBvcnRUeXBlT3V0cHV0LmdldE1lc3NhZ2UoKSA9PSBudWxsKQotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oCi0gICAgICAgICAgICAgICJUaGUgY29ycmVzcG9uZ2luZyBvcGVyYXRpb24gaW4gdGhlIHdzZGw6cG9ydFR5cGUgZm9yIHRoZSBcIiIKLSAgICAgICAgICAgICAgKyBiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKSArICJcIiBiaW5kaW5nIG9wZXJhdGlvbiBpcyBpbnZhbGlkLiIpOwotICAgICAgICAgIC8vIEdldHRpbmcgYSBtaW1lOmNvbnRlbnQgcmVmZXJlbmNpbmcgYW4gaW52YWxpZCB3c2RsOnBhcnQKLSAgICAgICAgICBTdHJpbmcgcGFydCA9IGdldEludmFsaWRNaW1lQ29udGVudFBhcnQoCi0gICAgICAgICAgICAgIG91dHB1dE1pbWVDb250ZW50cywgcG9ydFR5cGVPdXRwdXQuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgICAvLyBJZiBzdWNoIHBhcnQgaXMgZm91bmQsIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgaWYgKHBhcnQgIT0gbnVsbCkKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJwYXJ0PVwiIiArIHBhcnQgKwotICAgICAgICAgICAgICAgICJcIiwgdGhlIG91dHB1dCBvZiB0aGUgYmluZGluZyBvcGVyYXRpb24gXCIiCi0gICAgICAgICAgICAgICAgKyBiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKSArICJcIiIpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8vIElmIHRoZSBiaW5kaW5nIGRvZXMgbm90IGNvbnRhaW4gbWltZTpjb250ZW50IGVsZW1lbnRzLAotICAgICAgLy8gdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKCFtaW1lQ29udGVudHNGb3VuZCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gYW5hZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBhZmUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgIGFmZS5nZXRNZXNzYWdlKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlcyBldmVyeSBtaW1lOmNvbnRlbnQgZWxlbWVudC4gSWYgaXQgcmVmZXJlbmNlcyBhIHdzZGw6cGFydCB0aGF0Ci0gICAqIGlzIGRlZmluZWQgdXNpbmcgbmVpdGhlciB0aGUgdHlwZSBhdHRyaWJ1dGUgbm9yIHRoZSBlbGVtZW50IGF0dHJpYnV0ZQotICAgKiBvciB1c2luZyB0aGVtIHRvZ2V0aGVyLCBpdCBpcyBpbnZhbGlkLgotICAgKiBAcGFyYW0gbWltZUNvbnRlbnRzIGEgbGlzdCBvZiBtaW1lOmNvbnRlbnQgZWxlbWVudHMuCi0gICAqIEBwYXJhbSBtZXNzYWdlIHRoZSBjb3JyZXNwb25kaW5nIHdzZGw6bWVzc2FnZSBlbGVtZW50IGZvciBtaW1lOmNvbnRlbnRTLgotICAgKiBAcmV0dXJuIGEgdmFsdWUgb2YgdGhlIHBhcnQgYXR0cmlidXRlIG9mIGFuIGludmFsaWQgbWltZTpjb250ZW50Ci0gICAqIG9yIG51bGwgaWYgYWxsIHRoZSBtaW1lOmNvbnRlbnQgZWxlbWVudHMgYXJlIHZhbGlkLgotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0SW52YWxpZE1pbWVDb250ZW50UGFydChMaXN0IG1pbWVDb250ZW50cywgTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgLy8gR29pbmcgdGhyb3VnIGFsbCB0aGUgbWltZTpjb250ZW50IGVsZW1lbnRzCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtaW1lQ29udGVudHMuc2l6ZSgpOyBpKyspCi0gICAgewotICAgICAgLy8gR2V0dGluZyBhIHZhbHVlIG9mIHRoZSBwYXJ0IGF0dHJpYnV0ZSBmcm9tIGEgbWltZTplbGVtZW50Ci0gICAgICBTdHJpbmcgcGFydE5hbWUgPSAoKE1JTUVDb250ZW50KSBtaW1lQ29udGVudHMuZ2V0KGkpKS5nZXRQYXJ0KCk7Ci0gICAgICAvLyBHZXR0aW5nIHRoZSBjb3JyZXNwb25naW5nIHdzZGw6cGFydAotICAgICAgUGFydCBwYXJ0ID0gbWVzc2FnZS5nZXRQYXJ0KHBhcnROYW1lKTsKLSAgICAgIC8vIGlmIGl0IGlzIGRlZmluZWQgYW5kIHVzZSBuZWl0aGVyIHRoZSB0eXBlIGF0dHJpYnV0ZQotICAgICAgLy8gbm9yIHRoZSBlbGVtZW50IGF0dHJpYnV0ZSBvciB1c2UgdGhlbSB0b2dldGhlciwgcmV0dXJuIHBhcnQgdmFsdWUKLSAgICAgIGlmIChwYXJ0ICE9IG51bGwKLSAgICAgICAgJiYgKChwYXJ0LmdldFR5cGVOYW1lKCkgPT0gbnVsbCAmJiBwYXJ0LmdldEVsZW1lbnROYW1lKCkgPT0gbnVsbCkKLSAgICAgICAgfHwgKHBhcnQuZ2V0VHlwZU5hbWUoKSAhPSBudWxsICYmIHBhcnQuZ2V0RWxlbWVudE5hbWUoKSAhPSBudWxsKSkpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBwYXJ0TmFtZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gUmV0dXJuIG51bGwgaWYgbm8gb25lIHBhcnQgaXMgZm91bmQKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDb2xsZWN0cyBhbGwgbWltZTpjb250ZW50IGVsZW1lbnRzLgotICAgKiBAcGFyYW0gZXh0RWxlbXMgYSBsaXN0IG9mIGV4dGVuc2liaWxpdHkgZWxlbWVudHMgdGhhdCBjYW4gY29udGFpbiBtaW1lOmNvbnRlbnRTLgotICAgKiBAcmV0dXJuIHRoZSBsaXN0IG9mIG1pbWU6Y29udGVudCBlbGVtZW50cyBmb3VuZC4KLSAgICovCi0gIHByaXZhdGUgTGlzdCBnZXRNaW1lQ29udGVudEVsZW1lbnRzKExpc3QgZXh0RWxlbXMpCi0gIHsKLSAgICBMaXN0IG1pbWVDb250ZW50RWxlbWVudHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLSAgICBpZiAoZXh0RWxlbXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBHb2luZyB0aHJvdWdoIGFsbCB0aGUgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBleHRFbGVtcy5zaXplKCk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0RWxlbSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCkgZXh0RWxlbXMuZ2V0KGkpOwotICAgICAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyBtaW1lOm11bHRpcGFydFJlbGF0ZWQKLSAgICAgICAgaWYgKGV4dEVsZW0uZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9NSU1FX01VTFRJUEFSVCkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXR0aW5nIHRoZSBtaW1lOnBhcnQgZWxlbWVudHMgb2YgdGhlIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZAotICAgICAgICAgIExpc3QgbWltZVBhcnRzID0gKChNSU1FTXVsdGlwYXJ0UmVsYXRlZCkgZXh0RWxlbSkuZ2V0TUlNRVBhcnRzKCk7Ci0gICAgICAgICAgLy8gR29pbmcgdGhyb3VnaCBhbGwgdGhlIG1pbWU6cGFydCBlbGVtZW50cwotICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbWltZVBhcnRzLnNpemUoKTsgaisrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIENvbGxlY3RpbmcgYWxsIHRoZSBtaW1lOmNvbnRlbnQgZWxlbWVudHMgb2YgdGhpcyBtaW1lOnBhcnQKLSAgICAgICAgICAgIExpc3QgZWxlbXMgPSBnZXRNaW1lQ29udGVudEVsZW1lbnRzKAotICAgICAgICAgICAgICAoKE1JTUVQYXJ0KSBtaW1lUGFydHMuZ2V0KGopKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgICAgICAgICAvLyBBZGRpbmcgdGhlIGVsZW1lbnRzIHRvIHRoZSBsaXN0IGJlaW5nIHJldHVybmVkCi0gICAgICAgICAgICBtaW1lQ29udGVudEVsZW1lbnRzLmFkZEFsbChlbGVtcyk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIEVsc2UgaWYgdGhlIGVsZW1lbnQgaXMgbWltZTpjb250ZW50Ci0gICAgICAgIGVsc2UgaWYgKGV4dEVsZW0uZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9NSU1FX0NPTlRFTlQpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gQWRkaW5nIHRoZSBlbGVtZW50IHRvIHRoZSBsaXN0IGJlaW5nIHJldHVybmVkCi0gICAgICAgICAgbWltZUNvbnRlbnRFbGVtZW50cy5hZGQoZXh0RWxlbSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbWltZUNvbnRlbnRFbGVtZW50czsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MTEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MTEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQzMzgzYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQVAyOTExLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLS8qKgotICogQVAyOTExCi0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZzwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzIGluIHdzZGw6aW5wdXQgYW5kIHdzZGw6b3VwdXQgZWxlbWVudHMKLSAqIG9mIG9wZXJhdGlvbnMgaW4gYSB3c2RsOmJpbmRpbmcsIGNvbnRhaW4gZXhhY3RseSBvbmUgbWltZTpwYXJ0IGNoaWxkIGVsZW1lbnQgdGhhdCBjb250YWlucwotICogYSBzb2FwYmluZDpib2R5IGNoaWxkIGVsZW1lbnQuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEFQMjkxMSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEFQMjkxMShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBBIHZhcmlhYmxlIHRoYXQgaW5kaWNhdGVzIGEgYmluZGluZyBjb250YWlucyBhdCBsZWFzdCBvbmUKLSAgICAgIC8vIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50Ci0gICAgICBib29sZWFuIG11bHRpcGFydHNGb3VuZCA9IGZhbHNlOwotCi0gICAgICAvLyBHZXR0aW5nIGEgd3NkbDpiaW5kaW5nCi0gICAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgICAgLy8gR2V0dGluZyBpdHMgd3NkbDpvcGVyYXRpb24gZWxlbWVudHMKLSAgICAgIExpc3Qgb3BzID0gYmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9ucygpOwotCi0gICAgICAvLyBHb2luZyB0aHJvdWdoIHRoZSBvcGVyYXRpb24gZWxlbWVudHMKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb3BzLnNpemUoKTsgaSsrKQotICAgICAgewotICAgICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbikgb3BzLmdldChpKTsKLQotICAgICAgICAvLyBHZXR0aW5nIHdzZGw6aW5wdXQgYW5kIHdzZGw6b3V0cHV0IGVsZW1lbnRzIG9mIGFuIG9wZXJhdGlvbgotICAgICAgICBCaW5kaW5nSW5wdXQgYmluZGluZ0lucHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nSW5wdXQoKTsKLSAgICAgICAgQmluZGluZ091dHB1dCBiaW5kaW5nT3V0cHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nT3V0cHV0KCk7Ci0KLSAgICAgICAgLy8gQ29sbGVjdGluZyBhbGwgdGhlIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50cyBmcm9tIHdzZGw6aW5wdXQgYW5kIHdzZGw6b3V0cHV0Ci0gICAgICAgIExpc3QgaW5wdXRNdWx0aXBhcnRzID0gZ2V0TWltZU11bHRpcGFydEVsZW1lbnRzKAotICAgICAgICAgIGJpbmRpbmdJbnB1dCA9PSBudWxsID8gbnVsbCA6IGJpbmRpbmdJbnB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgICAgIExpc3Qgb3V0cHV0TXVsdGlwYXJ0cyA9IGdldE1pbWVNdWx0aXBhcnRFbGVtZW50cygKLSAgICAgICAgICBiaW5kaW5nT3V0cHV0ID09IG51bGwgPyBudWxsIDogYmluZGluZ091dHB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0KLSAgICAgICAgLy8gSWYgdGhlIHdzZGw6aW5wdXQgY29udGFpbnMgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzCi0gICAgICAgIGlmICghaW5wdXRNdWx0aXBhcnRzLmlzRW1wdHkoKSkKLSAgICAgICAgewotICAgICAgICAgIG11bHRpcGFydHNGb3VuZCA9IHRydWU7Ci0KLSAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBub3QgZXhhY3RseSBvbmUgbWltZTpwYXJ0IGVsZW1lbnQgY29udGFpbmluZwotICAgICAgICAgIC8vIGEgc29hcGJpbmQ6Ym9keSBjaGlsZCwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICBpZiAoIWNvbnRhaW5zT25lU29hcEJvZHkoaW5wdXRNdWx0aXBhcnRzKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIGludmFsaWQgIgotICAgICAgICAgICAgICAgICsgIm1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50IGlzIGluIHRoZSB3c2RsOmlucHV0IG9mIHRoZSBcIiIKLSAgICAgICAgICAgICAgICArIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpICsgIlwiIGJpbmRpbmcgb3BlcmF0aW9uLiIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIHRoZSB3c2RsOm91dHB1dCBjb250YWlucyBtaW1lOm11bHRpcGFydFJlbGF0ZWQgZWxlbWVudHMKLSAgICAgICAgaWYgKCFvdXRwdXRNdWx0aXBhcnRzLmlzRW1wdHkoKSkKLSAgICAgICAgewotICAgICAgICAgIG11bHRpcGFydHNGb3VuZCA9IHRydWU7Ci0KLSAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBub3QgZXhhY3RseSBvbmUgbWltZTpwYXJ0IGVsZW1lbnQgY29udGFpbmluZwotICAgICAgICAgIC8vIGEgc29hcGJpbmQ6Ym9keSBjaGlsZCwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICBpZiAoIWNvbnRhaW5zT25lU29hcEJvZHkob3V0cHV0TXVsdGlwYXJ0cykpCi0gICAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSBpbnZhbGlkICIKLSAgICAgICAgICAgICAgICArICJtaW1lOm11bHRpcGFydFJlbGF0ZWQgZWxlbWVudCBpcyBpbiB0aGUgd3NkbDpvdXRwdXQgb2YgdGhlIFwiIgotICAgICAgICAgICAgICAgICsgYmluZGluZ09wZXJhdGlvbi5nZXROYW1lKCkgKyAiXCIgYmluZGluZyBvcGVyYXRpb24uIik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgIH0KLSAgICAgIC8vIElmIHRoZSBiaW5kaW5nIGNvbnRhaW5zIG5vIG9uZSBtaW1lOm11bHRpcGFydFJlbGF0ZWQgZWxlbWVudCwKLSAgICAgIC8vIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmICghbXVsdGlwYXJ0c0ZvdW5kKQotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbigpOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbiBhbmFlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGFmZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgYWZlLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotICAvKioKLSAgICogTG9va3MgZm9yIG1pbWU6cGFydCBlbGVtZW50cyBjb250YWluaW5nIGEgc29hcDpib2R5IGNoaWxkCi0gICAqIGZvciBlYWNoIG9mIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50LgotICAgKiBAcGFyYW0gbXVsdGlwYXJ0cyBhIGxpc3Qgb2YgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlcmUgaXMgZXhhY3RseSBvbmUgbWltZTpwYXJ0IGNvbnRhaW5pbmcgYSBzb2FwOmJvZHkKLSAgICogY2hpbGQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBjb250YWluc09uZVNvYXBCb2R5KExpc3QgbXVsdGlwYXJ0cykKLSAgewotICAgIC8vIEEgdmFyaWFibGUgaW5kaWNhdGVzIHRoYXQgYSBzb2FwOmJvZHkgZWxlbWVudCBpcyBmb3VuZAotICAgIGJvb2xlYW4gc29hcEJvZHlGb3VuZCA9IGZhbHNlOwotCi0gICAgLy8gR29pbmcgdGhyb3VnaCBhIGxpc3Qgb2YgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtdWx0aXBhcnRzLnNpemUoKTsgaSsrKQotICAgIHsKLSAgICAgIC8vIEdldHRpbmcgYSBsaXN0IG9mIG1pbWU6cGFydCBlbGVtZW50cwotICAgICAgTGlzdCBtaW1lUGFydHMgPQotICAgICAgICAoKE1JTUVNdWx0aXBhcnRSZWxhdGVkKSBtdWx0aXBhcnRzLmdldChpKSkuZ2V0TUlNRVBhcnRzKCk7Ci0KLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggYWxsIHRoZSBtaW1lOnBhcnQgZWxlbWVudHMKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbWltZVBhcnRzLnNpemUoKTsgaisrKQotICAgICAgewotICAgICAgICAvLyBHZXR0aW5nIGEgbGlzdCBvZiBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIG9mIGEgbWltZTpwYXJ0Ci0gICAgICAgIExpc3QgZXh0RWxlbXMgPQotICAgICAgICAgICgoTUlNRVBhcnQpIG1pbWVQYXJ0cy5nZXQoaikpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgICAvLyBHb2luZyB0aHJvdWdoIHRoZSBleHRlbnNpYmlsaXR5IGVsZW1lbnRzCi0gICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgZXh0RWxlbXMuc2l6ZSgpOyBrKyspCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBJZiBhbiBleHRlbnNpYmlsaXR5IGVsZW1lbnQgaXMgYSBzb2FwOmJvZHkKLSAgICAgICAgICBpZiAoKChFeHRlbnNpYmlsaXR5RWxlbWVudClleHRFbGVtcy5nZXQoaykpCi0gICAgICAgICAgICAuZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9TT0FQX0JPRFkpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIElmIGEgc29hcDpib2R5IGVsZW1lbnQgd2FzIGFscmVhZHkgZm91bmQsCi0gICAgICAgICAgICAvLyByZXR1cm4gdHJ1ZQotICAgICAgICAgICAgaWYgKHNvYXBCb2R5Rm91bmQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIGVsc2Ugc2V0IHRoZSB2YXJpYWJsZSB0byB0aGUgdHJ1ZSB2YWx1ZQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBzb2FwQm9keUZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gc29hcEJvZHlGb3VuZDsKLSAgfQotCi0gIC8qKgotICAgKiBDb2xsZWN0cyBhbGwgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzLgotICAgKiBAcGFyYW0gZXh0RWxlbXMgYSBsaXN0IG9mIGV4dGVuc2liaWxpdHkgZWxlbWVudHMgdGhhdCBjYW4gY29udGFpbiBtaW1lOm11bHRpcGFydFJlbGF0ZWQgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gdGhlIGxpc3Qgb2YgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzIGZvdW5kLgotICAgKi8KLSAgcHJpdmF0ZSBMaXN0IGdldE1pbWVNdWx0aXBhcnRFbGVtZW50cyhMaXN0IGV4dEVsZW1zKQotICB7Ci0gICAgTGlzdCBtaW1lTXVsdGlwYXJ0RWxlbWVudHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLSAgICBpZiAoZXh0RWxlbXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBHb2luZyB0aHJvdWdoIGFsbCB0aGUgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBleHRFbGVtcy5zaXplKCk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0RWxlbSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCkgZXh0RWxlbXMuZ2V0KGkpOwotICAgICAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyBtaW1lOm11bHRpcGFydFJlbGF0ZWQKLSAgICAgICAgaWYgKGV4dEVsZW0uZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9NSU1FX01VTFRJUEFSVCkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBBZGRpbmcgdGhlIGVsZW1lbnQgdG8gdGhlIGxpc3QgYmVpbmcgcmV0dXJuZWQKLSAgICAgICAgICBtaW1lTXVsdGlwYXJ0RWxlbWVudHMuYWRkKGV4dEVsZW0pOwotICAgICAgICAgIC8vIEdldHRpbmcgdGhlIG1pbWU6cGFydCBlbGVtZW50cyBvZiB0aGUgbWltZTptdWx0aXBhcnRSZWxhdGVkCi0gICAgICAgICAgTGlzdCBtaW1lUGFydHMgPSAoKE1JTUVNdWx0aXBhcnRSZWxhdGVkKSBleHRFbGVtKS5nZXRNSU1FUGFydHMoKTsKLSAgICAgICAgICAvLyBHb2luZyB0aHJvdWdoIGFsbCB0aGUgbWltZTpwYXJ0IGVsZW1lbnRzCi0gICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBtaW1lUGFydHMuc2l6ZSgpOyBqKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gQ29sbGVjdGluZyBhbGwgdGhlIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50cyBvZiB0aGlzIG1pbWU6cGFydAotICAgICAgICAgICAgTGlzdCBlbGVtcyA9IGdldE1pbWVNdWx0aXBhcnRFbGVtZW50cygKLSAgICAgICAgICAgICAgKChNSU1FUGFydCkgbWltZVBhcnRzLmdldChqKSkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpOwotICAgICAgICAgICAgLy8gQWRkaW5nIHRoZSBlbGVtZW50cyB0byB0aGUgbGlzdCBiZWluZyByZXR1cm5lZAotICAgICAgICAgICAgbWltZU11bHRpcGFydEVsZW1lbnRzLmFkZEFsbChlbGVtcyk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1pbWVNdWx0aXBhcnRFbGVtZW50czsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MzAuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5MzAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDE3MzRmOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQVAyOTMwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotCi0vKioKLSAqIEFQMjkzMAotICoKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmJpbmRpbmc8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+QSB3c2RsOmZhdWx0IGVsZW1lbnQgaW4gYSBkZXNjcmlwdGlvbiBkb2VzIG5vdCBoYXZlCi0gKiBtaW1lOm11bHRpcGFydFJlbGF0ZWQgZWxlbWVudCBhcyBpdHMgY2hpbGQgZWxlbWVudC48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQVAyOTMwIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcyBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQVAyOTMwKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEEgdmFyaWFibGUgdGhhdCBpbmRpY2F0ZXMgYSBiaW5kaW5nIGNvbnRhaW5zIGF0IGxlYXN0IG9uZQotICAgICAgLy8gd3NkbDpmYXVsdCBlbGVtZW50Ci0gICAgICBib29sZWFuIGZhdWx0c0ZvdW5kID0gZmFsc2U7Ci0KLSAgICAgIC8vIEdldHRpbmcgYSB3c2RsOmJpbmRpbmcKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgICAvLyBHZXR0aW5nIGl0cyB3c2RsOm9wZXJhdGlvbiBlbGVtZW50cwotICAgICAgTGlzdCBvcHMgPSBiaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb25zKCk7Ci0KLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggdGhlIG9wZXJhdGlvbiBlbGVtZW50cwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvcHMuc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKSBvcHMuZ2V0KGkpOwotCi0gICAgICAgIC8vIEdldHRpbmcgd3NkbDpmYXVsdCBlbGVtZW50cwotICAgICAgICBDb2xsZWN0aW9uIGZhdWx0cyA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0ZhdWx0cygpLnZhbHVlcygpOwotICAgICAgICBpZiAoIWZhdWx0cy5pc0VtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBmYXVsdHNGb3VuZCA9IHRydWU7Ci0gICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCBlbGVtZW50LAotICAgICAgICAgIC8vIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgaWYgKGNvbnRhaW5zTWltZU11bHRpcGFydHMoZmF1bHRzKSkKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgYmluZGluZyBvcGVyYXRpb24gaXMgXCIiCi0gICAgICAgICAgICAgICsgYmluZGluZ09wZXJhdGlvbi5nZXROYW1lKCkgKyAiXCIuIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8gSWYgdGhlIGJpbmRpbmcgZG9lcyBub3QgY29udGFpbiB3c2RsOmZhdWx0IGVsZW1lbnRzLAotICAgICAgLy8gdGhlIGFzc2VydGlvbiBpcyBub3QgYXBwbGljYWJsZQotICAgICAgaWYgKCFmYXVsdHNGb3VuZCkKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24gYW5hZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBhZmUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgIGFmZS5nZXRNZXNzYWdlKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQoCi0gICAgICB0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlcyB3c2RsOmZhdWx0IGVsZW1lbnRzLgotICAgKiBAcGFyYW0gZmF1bHRzIGEgY29sbGVjdGlvbiBvZiB3c2RsOmZhdWx0IGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIHRydWUgaWYgYW55IHdzZGw6ZmF1bHQgaGFzIGEgbWltZTptdWx0aXBhcnRSZWxhdGVkIGNoaWxkCi0gICAqIGVsZW1lbnQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBjb250YWluc01pbWVNdWx0aXBhcnRzKENvbGxlY3Rpb24gZmF1bHRzKQotICB7Ci0gICAgLy8gR29pbmcgdGhyb3VnaCBhbGwgdGhlIHdzZGw6ZmF1bHRTCi0gICAgSXRlcmF0b3IgaSA9IGZhdWx0cy5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICAvLyBHZXR0aW5nIHdzZGw6ZmF1bHQncyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzCi0gICAgICBMaXN0IGV4dEVsZW1zID0gKChCaW5kaW5nRmF1bHQpIGkubmV4dCgpKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgZXh0RWxlbXMuc2l6ZSgpOyBqKyspCi0gICAgICB7Ci0gICAgICAgIC8vIElmIHRoZXJlIGlzIGEgbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnQsIHJldHVybiB0cnVlCi0gICAgICAgIGlmICgoKEV4dGVuc2liaWxpdHlFbGVtZW50KWV4dEVsZW1zLmdldChqKSkKLSAgICAgICAgICAuZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9NSU1FX01VTFRJUEFSVCkpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAvLyBUaGVyZSBhcmUgbm8gbWltZTptdWx0aXBhcnRSZWxhdGVkIGVsZW1lbnRzLCByZXR1cm4gZmFsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQVAyOTQwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQVAyOTQwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzOTJhMWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjk0MC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5JbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgamF2YXgud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5QYXJ0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVQYXJ0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXI7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLmltcGwuZHYuWFNTaW1wbGVUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTQXR0cmlidXRlVXNlOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTQ29tcGxleFR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTRWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTTW9kZWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNNb2RlbEdyb3VwOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTT2JqZWN0TGlzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU1BhcnRpY2xlOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhzLlhTVGVybTsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54cy5YU1R5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLS8qKgotICogQVAyOTQwCi0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZzwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5JbiBhIGRlc2NyaXB0aW9uLCBhIHdzZGw6cGFydCBkZWZpbmVkIHdpdGggdGhlCi0gKiByZWY6c3dhUmVmIHNjaGVtYSB0eXBlIGlzIGJvdW5kIHRvIGEgc29hcGJpbmQ6Ym9keSwgb3IgYSBzb2FwYmluZDpoZWFkZXIKLSAqIGluIGEgTUlNRSBiaW5kaW5nLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBBUDI5NDAgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIGltcGxlbWVudHMgV1NJVGFnCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBBUDI5NDAoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gQSB2YXJpYWJsZSB0aGF0IGluZGljYXRlcyB3c2RsOnBvcnRUeXBlIHJlZmVyZW5jZXMgYXQgbGVhc3Qgb25lCi0gICAgICAvLyB3c2RsOnBhcnQgZGVmaW5lZCB3aXRoIHRoZSByZWY6c3dhUmVmIHNjaGVtYSB0eXBlCi0gICAgICBib29sZWFuIHN3YVJlZkZvdW5kID0gZmFsc2U7Ci0KLSAgICAgIC8vIEdldHRpbmcgYSB3c2RsOmJpbmRpbmcKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgICAvLyBHZXR0aW5nIGl0cyB3c2RsOm9wZXJhdGlvbiBlbGVtZW50cwotICAgICAgTGlzdCBvcHMgPSBiaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb25zKCk7Ci0KLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggdGhlIG9wZXJhdGlvbiBlbGVtZW50cwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvcHMuc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKSBvcHMuZ2V0KGkpOwotCi0gICAgICAgIC8vIEdldHRpbmcgd3NkbDppbnB1dCBhbmQgd3NkbDpvdXRwdXQgZWxlbWVudHMgb2YgYW4gb3BlcmF0aW9uCi0gICAgICAgIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpOwotICAgICAgICBCaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXRwdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKTsKLQotICAgICAgICBJbnB1dCBwb3J0VHlwZUlucHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKS5nZXRJbnB1dCgpOwotICAgICAgICBPdXRwdXQgcG9ydFR5cGVPdXRwdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldE9wZXJhdGlvbigpLmdldE91dHB1dCgpOwotICAgICAgICAvLyBJZiB0aGUgY29ycmVzcG9uZGluZyB3c2RsOmlucHV0IGV4aXN0cyBpbiB3c2RsOnBvcnRUeXBlCi0gICAgICAgIC8vIGFuZCBpbmNsdWRlcyB0aGUgbWVzc2FnZSBhdHRyaWJ1dGUKLSAgICAgICAgaWYgKHBvcnRUeXBlSW5wdXQgIT0gbnVsbCAmJiBwb3J0VHlwZUlucHV0LmdldE1lc3NhZ2UoKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gQ29sbGVjdGluZyBhbGwgdGhlIG1lc3NhZ2UncyBwYXJ0cyBkZWZpbmVkIHdpdGggcmVmOnN3YVJlZgotICAgICAgICAgIExpc3Qgc3dhUmVmUGFydHMgPSBnZXRTd2FSZWZQYXJ0cyhwb3J0VHlwZUlucHV0LmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgaWYgKCFzd2FSZWZQYXJ0cy5pc0VtcHR5KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgc3dhUmVmRm91bmQgPSB0cnVlOwotICAgICAgICAgICAgLy8gR2V0dGluZyBhIHdzZGw6cGFydCB0aGF0IGlzIHVuYm91bmQKLSAgICAgICAgICAgIFN0cmluZyB1bmJvdW5kUGFydCA9IGdldFVuYm91bmRQYXJ0KHN3YVJlZlBhcnRzLAotICAgICAgICAgICAgICBwb3J0VHlwZUlucHV0LmdldE1lc3NhZ2UoKS5nZXRRTmFtZSgpLAotICAgICAgICAgICAgICBiaW5kaW5nSW5wdXQgPT0gbnVsbCA/IG51bGwgOiBiaW5kaW5nSW5wdXQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpOwotICAgICAgICAgICAgLy8gSWYgc3VjaCB3c2RsOnBhcnQgZXhpc3RzLCBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgICBpZiAodW5ib3VuZFBhcnQgIT0gbnVsbCkKLSAgICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSBwYXJ0IFwiIiArIHVuYm91bmRQYXJ0Ci0gICAgICAgICAgICAgICAgKyAiXCIgaXMgbm90IGJvdW5kIHByb3Blcmx5IHRvIHRoZSB3c2RsOmlucHV0IG9mIHRoZSBcIiIKLSAgICAgICAgICAgICAgICArIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpICsgIlwiIGJpbmRpbmcgb3BlcmF0aW9uLiIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIHRoZSBjb3JyZXNwb25kaW5nIHdzZGw6b3V0cHV0IGV4aXN0cyBpbiB3c2RsOnBvcnRUeXBlCi0gICAgICAgIC8vIGFuZCBpbmNsdWRlcyB0aGUgbWVzc2FnZSBhdHRyaWJ1dGUKLSAgICAgICAgaWYgKHBvcnRUeXBlT3V0cHV0ICE9IG51bGwgJiYgcG9ydFR5cGVPdXRwdXQuZ2V0TWVzc2FnZSgpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBDb2xsZWN0aW5nIGFsbCB0aGUgbWVzc2FnZSdzIHBhcnRzIGRlZmluZWQgd2l0aCByZWY6c3dhUmVmCi0gICAgICAgICAgTGlzdCBzd2FSZWZQYXJ0cyA9IGdldFN3YVJlZlBhcnRzKHBvcnRUeXBlT3V0cHV0LmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgaWYgKCFzd2FSZWZQYXJ0cy5pc0VtcHR5KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgc3dhUmVmRm91bmQgPSB0cnVlOwotICAgICAgICAgICAgLy8gR2V0dGluZyBhIHdzZGw6cGFydCB0aGF0IGlzIHVuYm91bmQKLSAgICAgICAgICAgIFN0cmluZyB1bmJvdW5kUGFydCA9IGdldFVuYm91bmRQYXJ0KHN3YVJlZlBhcnRzLAotICAgICAgICAgICAgICBwb3J0VHlwZU91dHB1dC5nZXRNZXNzYWdlKCkuZ2V0UU5hbWUoKSwKLSAgICAgICAgICAgICAgYmluZGluZ091dHB1dCA9PSBudWxsID8gbnVsbCA6IGJpbmRpbmdPdXRwdXQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpOwotICAgICAgICAgICAgLy8gSWYgc3VjaCB3c2RsOnBhcnQgZXhpc3RzLCBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgICBpZiAodW5ib3VuZFBhcnQgIT0gbnVsbCkKLSAgICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIlRoZSBwYXJ0IFwiIiArIHVuYm91bmRQYXJ0Ci0gICAgICAgICAgICAgICAgKyAiXCIgaXMgbm90IGJvdW5kIHByb3Blcmx5IHRvIHRoZSB3c2RsOmlucHV0IG9mIHRoZSBcIiIKLSAgICAgICAgICAgICAgICArIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpICsgIlwiIGJpbmRpbmcgb3BlcmF0aW9uLiIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBubyB3c2RsOnBhcnRTIGRlZmluZWQgd2l0aCB0aGUgcmVmOnN3YVJlZgotICAgICAgLy8gc2NoZW1hIHR5cGUsIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmICghc3dhUmVmRm91bmQpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGFuYWUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gYWZlKQotICAgIHsKLSAgICAgIC8vIFRoZSBhc3NlcnRpb24gaXMgInJlY29tbWVuZGVkIiwgdXNpbmcgdGhlICJ3YXJuaW5nIiByZXN1bHQKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfV0FSTklORzsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB2YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgYWZlLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qKgotICAgKiBMb29rcyBmb3IgYSB3c2RsOnBhcnQgdGhhdCBpcyBub3QgYm91bmQgdG8gZWl0aGVyIHNvYXA6Ym9keSBvciBzb2FwOmhlYWRlcgotICAgKiBpbiBhIE1JTUUgYmluZGluZy4KLSAgICogQHBhcmFtIHN3YVJlZlBhcnRzIGEgbGlzdCBvZiB3c2RsOnBhcnQgbmFtZXMgdGhhdCBhcmUgZGVmaW5lZCB3aXRoIHRoZQotICAgKiByZWY6c3dhUmVmIHNjaGVtYSB0eXBlLgotICAgKiBAcGFyYW0gbWVzc2FnZU5hbWUgdGhlIHF1YWxpZmllZCBuYW1lIG9mIHRoZSB3c2RsOm1lc3NhZ2UgYmVpbmcgdmFsaWRhdGVkLgotICAgKiBAcGFyYW0gZXh0RWxlbXMgYSBsaXN0IG9mIGV4dGVuc2liaWxpdHkgZWxlbWVudHMgb2YgZWl0aGVyIHdzZGw6aW5wdXQgb3IKLSAgICogd3NkbDpvdXRwdXQgb2YgdGhlIGNvcnJlc3BvbmRpbmcgYmluZGluZyBvcGVyYXRpb24uCi0gICAqIEByZXR1cm4gYSB3c2RsOnBhcnQgbmFtZSB0aGF0IGlzIG5vdCBib3VuZCBwcm9wZXJseSwgb3IgbnVsbC4KLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGdldFVuYm91bmRQYXJ0KExpc3Qgc3dhUmVmUGFydHMsIFFOYW1lIG1lc3NhZ2VOYW1lLCBMaXN0IGV4dEVsZW1zKSB7Ci0gICAgLy8gR29pbmcgdGhyb3VnaCB3c2RsOnBhcnQgbmFtZXMKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHN3YVJlZlBhcnRzLnNpemUoKTsgaSsrKQotICAgIHsKLSAgICAgIFN0cmluZyBwYXJ0ID0gKFN0cmluZykgc3dhUmVmUGFydHMuZ2V0KGkpOwotICAgICAgYm9vbGVhbiBib3VuZFByb3Blcmx5ID0gZmFsc2U7Ci0gICAgICBpZiAoZXh0RWxlbXMgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLy8gR29pbmcgdGhyb3VnaCBleHRlbnNpYmlsaXR5IGVsZW1lbnRzCi0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgZXh0RWxlbXMuc2l6ZSgpICYmICFib3VuZFByb3Blcmx5OyBqKyspCi0gICAgICAgIHsKLSAgICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBleHRFbGVtcy5nZXQoaik7Ci0gICAgICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgbWltZTptdWx0aXBhcnRSZWxhdGVkCi0gICAgICAgICAgaWYgKGV4dEVsZW0uZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9NSU1FX01VTFRJUEFSVCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gR2V0dGluZyB0aGUgbWltZTpwYXJ0IGVsZW1lbnRzIG9mIHRoZSBtaW1lOm11bHRpcGFydFJlbGF0ZWQKLSAgICAgICAgICAgIExpc3QgbWltZVBhcnRzID0gKChNSU1FTXVsdGlwYXJ0UmVsYXRlZCkgZXh0RWxlbSkuZ2V0TUlNRVBhcnRzKCk7Ci0gICAgICAgICAgICAvLyBHZXR0aW5nIHRoZSBmaXJzdCBtaW1lOnBhcnQgZWxlbWVudCB3aGVyZSBzb2FwOmJvZHkKLSAgICAgICAgICAgIC8vIGFuZCBzb2FwOmhlYWRlciBjb3VsZCBhcHBlYXIKLSAgICAgICAgICAgIGlmIChtaW1lUGFydHMuc2l6ZSgpID4gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgTGlzdCBlbGVtcyA9ICgoTUlNRVBhcnQpIG1pbWVQYXJ0cy5nZXQoMCkpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgICAgICAgICAvLyBHb2luZyB0aHJvdWdoIGFsbCB0aGUgTUlNRSBwYXJ0J3MgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cwotICAgICAgICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IGVsZW1zLnNpemUoKTsgayArKykKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGVsZW0gPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGVsZW1zLmdldChrKTsKLSAgICAgICAgICAgICAgICAvLyBJZiB0aGF0IGlzIGEgc29hcDpib2R5Ci0gICAgICAgICAgICAgICAgaWYgKGVsZW0uZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9TT0FQX0JPRFkpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIExpc3QgcHRzID0gKChTT0FQQm9keSkgZWxlbSkuZ2V0UGFydHMoKTsKLSAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBwYXJ0IGlzIGJvdW5kIGJ5IHRoaXMgZWxlbWVudAotICAgICAgICAgICAgICAgICAgaWYgKHB0cyA9PSBudWxsIHx8IHB0cy5jb250YWlucyhwYXJ0KSkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYm91bmRQcm9wZXJseSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyBlbHNlIGlmIHRoYXQgaXMgYSBzb2FwOmhlYWRlcgotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVsZW0uZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9TT0FQX0hFQURFUikpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgaWYgKGVsZW0gaW5zdGFuY2VvZiBTT0FQSGVhZGVyKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBTT0FQSGVhZGVyIGhlYWRlciA9IChTT0FQSGVhZGVyKSBlbGVtOwotICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcGFydCBpcyBib3VuZCBieSB0aGlzIGVsZW1lbnQKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2VOYW1lLmVxdWFscyhoZWFkZXIuZ2V0TWVzc2FnZSgpKQotICAgICAgICAgICAgICAgICAgICAgICYmIGhlYWRlci5nZXRQYXJ0KCkgIT0gbnVsbAotICAgICAgICAgICAgICAgICAgICAgICYmIGhlYWRlci5nZXRQYXJ0KCkuZXF1YWxzKHBhcnQpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgYm91bmRQcm9wZXJseSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIC8vIFdTREw0SiAxLjQgZG9lcyBub3QgcmVjb2duaXplIHNvYXA6aGVhZGVyIGVsZW1lbnRzIHRoYXQKLSAgICAgICAgICAgICAgICAgIC8vIGFyZSBlbmNsb3NlZCBpbiBtaW1lOm11bHRpcGFydFJlbGF0ZWQsIHNvIHVzaW5nIGEgd29ya2Fyb3VuZAotICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBFbGVtZW50IGhlYWRlciA9Ci0gICAgICAgICAgICAgICAgICAgICAgKChVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGVsZW0pLmdldEVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgYSBoZWFkZXIgcmVmZXJlbmNlcyB0aGUgY29ycmVzcG9uZGluZyBtZXNzYWdlCi0gICAgICAgICAgICAgICAgICAgIC8vIGFuZCB0aGUgcGFydCBpcyBib3VuZCBieSB0aGlzIGVsZW1lbnQKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJlZmVyZW5jZXNNZXNzYWdlKGhlYWRlciwgbWVzc2FnZU5hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgJiYgaGVhZGVyLmdldEF0dHJpYnV0ZSgicGFydCIpLmVxdWFscyhwYXJ0KSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgIGJvdW5kUHJvcGVybHkgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvLyBJZiB0aGlzIHBhcnQgaXMgdW5ib3VuZCBwcm9wZXJseSwgcmV0dXJuIGl0Ci0gICAgICBpZiAoIWJvdW5kUHJvcGVybHkpCi0gICAgICAgIHJldHVybiBwYXJ0OwotICAgIH0KLSAgICAvLyBBbGwgdGhlIHBhcnRzIGFyZSBib3VuZCBwcm9wZXJseSwgcmV0dXJuIG51bGwKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBWYWxpZGF0ZXMgd2hldGhlciBhbiBlbGVtZW50IGNvbnRhaW5zIGEgbWVzc2FnZSBhdHRyaWJ1dGUgdGhhdCByZWZlcmVuY2VzCi0gICAqIGEgbWVzc2FnZSB0aGF0IGhhdmUgdGhlIHF1YWxpZmllZCBuYW1lIHNwZWNpZmllZC4KLSAgICogQHBhcmFtIGVsZW0gYW4gZWxlbWVudCB0byBiZSB2YWxpZGF0ZWQuCi0gICAqIEBwYXJhbSBtZXNzYWdlTmFtZSB0aGUgcXVhbGlmaWVkIG5hbWUgb2YgYSBtZXNzYWdlLgotICAgKiBAcmV0dXJuIHRydWUgaWYgYW4gZWxlbWVudCBpcyB2YWxpZCwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIHJlZmVyZW5jZXNNZXNzYWdlKEVsZW1lbnQgZWxlbSwgUU5hbWUgbWVzc2FnZU5hbWUpCi0gIHsKLSAgICAvLyBHZXR0aW5nIHRoZSBlbGVtZW50J3MgbWVzc2FnZSBhdHRyaWJ1dGUKLSAgICBTdHJpbmcgbWVzc2FnZSA9IGVsZW0uZ2V0QXR0cmlidXRlKCJtZXNzYWdlIik7Ci0gICAgLy8gZmluZGluZyB0aGUgY29sb24gZGVsaW1pdGVyCi0gICAgaW50IGNvbG9uUG9zID0gbWVzc2FnZS5pbmRleE9mKCI6Iik7Ci0gICAgU3RyaW5nIG5zID0gbnVsbDsKLSAgICAvLyBHZXR0aW5nIGEgbG9jYWwgcGFydAotICAgIFN0cmluZyBscCA9IGNvbG9uUG9zID4gLTEgPyBtZXNzYWdlLnN1YnN0cmluZyhjb2xvblBvcyArIDEpIDogbWVzc2FnZTsKLSAgICAvLyBJZiB0aGUgZGVsaW1pdGVyIGlzIGZvdW5kCi0gICAgaWYgKGNvbG9uUG9zID4gLTEpCi0gICAgewotICAgICAgLy8gUmV0cmlldmluZyBhIG5hbWVzcGFjZSBVUkkKLSAgICAgIG5zID0gdmFsaWRhdG9yLndzZGxEb2N1bWVudC5nZXREZWZpbml0aW9ucygpCi0gICAgICAgIC5nZXROYW1lc3BhY2UobWVzc2FnZS5zdWJzdHJpbmcoMCwgY29sb25Qb3MpKTsKLSAgICB9Ci0gICAgLy8gSWYgdGhlIGxvY2FsIHBhcnQgYW5kIHRoZSBuYW1lc3BhY2UgVVJJIGFyZSB0aGUgc2FtZSBhcyBhIG1lc3NhZ2UgaGF2ZQotICAgIGlmIChtZXNzYWdlTmFtZS5nZXRMb2NhbFBhcnQoKS5lcXVhbHMobHApCi0gICAgICAmJiBtZXNzYWdlTmFtZS5nZXROYW1lc3BhY2VVUkkoKS5lcXVhbHMobnMpKQotICAgIHsKLSAgICAgIC8vIGVsZW1lbnQgaXMgdmFsaWQsIHJldHVybiB0cnVlCi0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgLy8gZWxlbWVudCBpcyBub3QgdmFsaWQsIHJldHVybiBmYWxzZQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBDb2xsZWN0cyBhbGwgdGhlIHdzZGw6cGFydCBkZWZpbmVkIHdpdGggdGhlIHJlZjpzd2FSZWYgc2NoZW1hIHR5cGUuCi0gICAqIEBwYXJhbSBtZXNzYWdlIGEgbWVzc2FnZSBjb250YWluaWcgd3NkbDpwYXJ0IGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgbGlzdCBvZiB3c2RsOnBhcnQgbmFtZXMuCi0gICAqLwotICBwcml2YXRlIExpc3QgZ2V0U3dhUmVmUGFydHMoTWVzc2FnZSBtZXNzYWdlKQotICB7Ci0gICAgTGlzdCBzd2FSZWZQYXJ0cyA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAgIC8vIEdvaW5nIHRocm91Z2ggbWVzc2FnZSdzIHBhcnRzCi0gICAgSXRlcmF0b3IgaXQgPSBtZXNzYWdlLmdldFBhcnRzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIFBhcnQgcGFydCA9IChQYXJ0KSBpdC5uZXh0KCk7Ci0gICAgICBRTmFtZSByZWY7Ci0gICAgICBzaG9ydCB0eXBlOwotICAgICAgLy8gR2V0dGluZyBlaXRoZXIgcGFydCdzIGVsZW1lbnQgcmVmZXJlbmNlIG9yIHR5cGUgcmVmZXJlbmNlCi0gICAgICBpZiAoKHJlZiA9IHBhcnQuZ2V0VHlwZU5hbWUoKSkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdHlwZSA9IFhTQ29uc3RhbnRzLlRZUEVfREVGSU5JVElPTjsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKChyZWYgPSBwYXJ0LmdldEVsZW1lbnROYW1lKCkpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHR5cGUgPSBYU0NvbnN0YW50cy5FTEVNRU5UX0RFQ0xBUkFUSU9OOwotICAgICAgfQotICAgICAgLy8gVGhlIHBhcnQgZG9lcyBjb25hdGlucyBuZWl0aGVyIGVsZW1lbnQgbm9yIHR5cGUgYXR0cmlidXRlLAotICAgICAgLy8gcHJvY2VlZGluZyB3aXRoIHRoZSBuZXh0IHBhcnQKLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0gICAgICAvLyBHZXR0aW5nIGEgbGlzdCBvZiBzY2hlbWFzIGRlZmluZWQKLSAgICAgIE1hcCBzY2hlbWFzID0gdmFsaWRhdG9yLndzZGxEb2N1bWVudC5nZXRTY2hlbWFzKCk7Ci0gICAgICAvLyBHb2luZyB0aHJvdWdoIHRoZSBzY2hlbWFzCi0gICAgICBJdGVyYXRvciBpdDIgPSBzY2hlbWFzLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQyLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgWFNNb2RlbCB4c01vZGVsID0gKFhTTW9kZWwpIGl0Mi5uZXh0KCk7Ci0gICAgICAgIFhTVHlwZURlZmluaXRpb24gcGFydFR5cGUgPSBudWxsOwotICAgICAgICAvLyBHZXR0aW5nIHRoZSBjb3JyZXNwb25kaW5nIHBhcnQgdHlwZQotICAgICAgICBpZiAodHlwZSA9PSBYU0NvbnN0YW50cy5FTEVNRU5UX0RFQ0xBUkFUSU9OKQotICAgICAgICB7Ci0gICAgICAgICAgWFNFbGVtZW50RGVjbGFyYXRpb24gZWxlbSA9IHhzTW9kZWwuZ2V0RWxlbWVudERlY2xhcmF0aW9uKAotICAgICAgICAgICAgcmVmLmdldExvY2FsUGFydCgpLCByZWYuZ2V0TmFtZXNwYWNlVVJJKCkpOwotICAgICAgICAgIGlmIChlbGVtICE9IG51bGwpCi0gICAgICAgICAgICBwYXJ0VHlwZSA9IGVsZW0uZ2V0VHlwZURlZmluaXRpb24oKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBwYXJ0VHlwZSA9IHhzTW9kZWwuZ2V0VHlwZURlZmluaXRpb24oCi0gICAgICAgICAgICByZWYuZ2V0TG9jYWxQYXJ0KCksIHJlZi5nZXROYW1lc3BhY2VVUkkoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gSWYgdGhlIHBhcnQgdHlwZSBpcyBkZWZpbmVkIHVzaW5nIHRoZSByZWY6c3dhUmVmIHNjaGVtYSB0eXBlCi0gICAgICAgIGlmIChyZWZlcmVuY2VzU3dhUmVmKHBhcnRUeXBlLCBuZXcgQXJyYXlMaXN0KCkpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gQWRkaW5nIHRoZSBwYXJ0J3MgbmFtZSB0byB0aGUgbGlzdCBiZWluZyByZXR1cm5lZAotICAgICAgICAgIHN3YVJlZlBhcnRzLmFkZChwYXJ0LmdldE5hbWUoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gUmV0dXJuIHRoZSBsaXN0Ci0gICAgcmV0dXJuIHN3YVJlZlBhcnRzOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrIHNjaGVtYSB0eXBlIHdoZXRoZXIgaXQgY29udGFpbnMgcmVmOnN3YVJlZiBzaW1wbGUgc2NoZW1hIHR5cGUKLSAgICogb3IgaGFzIGFuIGF0dHJpYnV0ZSBvZiB0aGlzIHNjaGVtYSB0eXBlLgotICAgKiBAcGFyYW0geHNUeXBlIGEgc2NoZW1hIHR5cGUgZGVmaW5pdGlvbiBlbGVtZW50Ci0gICAqIEByZXR1cm4gdHJ1ZSwgaWYgc2NoZW1hIHR5cGUgY29udGFpbnMgcmVmOnN3YVJlZiwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIHJlZmVyZW5jZXNTd2FSZWYoWFNUeXBlRGVmaW5pdGlvbiB4c1R5cGUsIExpc3QgdHlwZXMpCi0gIHsKLSAgICBpZiAoKHhzVHlwZSAhPSBudWxsKSAmJiAoIXR5cGVzLmNvbnRhaW5zKHhzVHlwZSkpKQotICAgIHsKLSAgICAgIHR5cGVzLmFkZCh4c1R5cGUpOwotICAgICAgLy8gSWYgdGhpcyBpcyBhIGNvbXBsZXggdHlwZQotICAgICAgaWYgKHhzVHlwZS5nZXRUeXBlQ2F0ZWdvcnkoKSA9PSBYU1R5cGVEZWZpbml0aW9uLkNPTVBMRVhfVFlQRSkKLSAgICAgIHsKLSAgICAgICAgWFNDb21wbGV4VHlwZURlZmluaXRpb24geHNDb21wbGV4VHlwZSA9Ci0gICAgICAgICAgKFhTQ29tcGxleFR5cGVEZWZpbml0aW9uKSB4c1R5cGU7Ci0gICAgICAgIC8vIElmIGl0IGNvbnRhaW5zIG1peGVkIGNvbnRleHQKLSAgICAgICAgLy8gY2hlY2sgd2hldGhlciB0aGUgY29udGV4dCBjb250YWlucyByZWY6c3dhUmVmCi0gICAgICAgIGlmICh4c0NvbXBsZXhUeXBlLmdldFBhcnRpY2xlKCkgIT0gbnVsbAotICAgICAgICAgICYmIHJlZmVyZW5jZXNTd2FSZWYoeHNDb21wbGV4VHlwZS5nZXRQYXJ0aWNsZSgpLmdldFRlcm0oKSwgdHlwZXMpKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gR2V0dGluZyB0aGUgdHlwZSdzIGF0dHJpYnV0ZXMKLSAgICAgICAgWFNPYmplY3RMaXN0IGF0dHJMaXN0ID0geHNDb21wbGV4VHlwZS5nZXRBdHRyaWJ1dGVVc2VzKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0ckxpc3QuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICAgICAgewotICAgICAgICAgIFhTQXR0cmlidXRlVXNlIHhzQXR0clVzZSA9IChYU0F0dHJpYnV0ZVVzZSkgYXR0ckxpc3QuaXRlbShpKTsKLSAgICAgICAgICAvLyBJZiBhbiBhdHRyaWJ1dGUgaXMgZGVmaW5lZCB1c2luZyByZWY6c3dhUmVmLCByZXR1cm4gdHJ1ZQotICAgICAgICAgIGlmIChyZWZlcmVuY2VzU3dhUmVmKAotICAgICAgICAgICAgeHNBdHRyVXNlLmdldEF0dHJEZWNsYXJhdGlvbigpLmdldFR5cGVEZWZpbml0aW9uKCksIHR5cGVzKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIC8vIGVsc2UgaWYgdGhpcyBpcyBhIHNpbXBsZSB0eXBlCi0gICAgICBlbHNlIGlmICh4c1R5cGUuZ2V0VHlwZUNhdGVnb3J5KCkgPT0gWFNUeXBlRGVmaW5pdGlvbi5TSU1QTEVfVFlQRSkKLSAgICAgIHsKLSAgICAgICAgWFNTaW1wbGVUeXBlIHhzU2ltcGxlVHlwZSA9IChYU1NpbXBsZVR5cGUpIHhzVHlwZTsKLSAgICAgICAgLy8gSWYgdGhpcyB0eXBlIGlzIHJlZjpzd2FSZWYsIHJldHVybiB0cnVlCi0gICAgICAgIGlmICh4c1NpbXBsZVR5cGUuZ2V0TmFtZXNwYWNlKCkuZXF1YWxzKFdTSUNvbnN0YW50cy5OU19VUklfU1dBX1JFRikKLSAgICAgICAgICAmJiB4c1NpbXBsZVR5cGUuZ2V0TmFtZSgpLmVxdWFscyhXU0lDb25zdGFudHMuU0NIRU1BX1RZUEVfU1dBX1JFRikpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAvLyBUaGUgc2NoZW1hIHR5cGUgZG9lcyBub3QgY29udGFpbiBhbnkgZWxlbWVudCBkZWZpbmVkIHdpdGggdGhlIHJlZjpzd2FSZWYKLSAgICAvLyByZXR1cm4gZmFsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2tzIGEgdGVybSB3aGV0aGVyIGl0IGlzIGRlZmluZWQgd2l0aCByZWY6c3dhUmVmLgotICAgKiBAcGFyYW0gdGVybSBhIHRlcm0gdGhhdCBjYW4gYmUgb25lIG9mIGEgbW9kZWwgZ3JvdXAgb3IgYW4KLSAgICogZWxlbWVudCBkZWNsYXJhdGlvbi4KLSAgICogQHJldHVybiB0cnVlIGlmIGEgdGVybSBpcyBkZWZpbmVkIHdpdGggcmVmOnN3YVJlZiwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIHJlZmVyZW5jZXNTd2FSZWYoWFNUZXJtIHRlcm0sIExpc3QgdHlwZXMpCi0gIHsKLSAgICAvLyBJZiBhIHRlcm0gaXMgYW4gZWxlbWVudCBkZWNsYXJhdGlvbgotICAgIGlmICh0ZXJtLmdldFR5cGUoKSA9PSBYU0NvbnN0YW50cy5FTEVNRU5UX0RFQ0xBUkFUSU9OKQotICAgIHsKLSAgICAgIC8vIElmIGVsZW1lbnQncyB0eXBlIGlzIGRlZmluZWQgd2l0aCB0aGUgcmVmOnN3YVJlZiwgcmV0dXJuIHRydWUKLSAgICAgIGlmIChyZWZlcmVuY2VzU3dhUmVmKAotICAgICAgICAoKFhTRWxlbWVudERlY2xhcmF0aW9uKSB0ZXJtKS5nZXRUeXBlRGVmaW5pdGlvbigpLCB0eXBlcykpCi0gICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIGVsc2UgaWYgYSB0ZXJtIGlzIGEgbW9kZWwgZ3JvdXAKLSAgICBlbHNlIGlmKHRlcm0uZ2V0VHlwZSgpID09IFhTQ29uc3RhbnRzLk1PREVMX0dST1VQKQotICAgIHsKLSAgICAgIC8vIEdldHRpbmcgYSBsaXN0IG9mIFBhcnRpY2xlIHNjaGVtYSBjb21wb25lbnRzCi0gICAgICBYU09iamVjdExpc3QgbGlzdCA9ICgoWFNNb2RlbEdyb3VwKSB0ZXJtKS5nZXRQYXJ0aWNsZXMoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlzdC5nZXRMZW5ndGgoKTsgaSsrKQotICAgICAgewotICAgICAgICAvLyBJZiB0aGUgdGVybSBvZiBhIHBhcnRpY2xlIGlzIGRlZmluZWQgd2l0aCB0aGUgcmVmOnN3YVJlZiwKLSAgICAgICAgLy8gcmV0dXJuIHRydWUKLSAgICAgICAgaWYgKHJlZmVyZW5jZXNTd2FSZWYoKChYU1BhcnRpY2xlKSBsaXN0Lml0ZW0oaSkpLmdldFRlcm0oKSwgdHlwZXMpKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjk0MS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjk0MS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjJmMGRlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5NDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVDb250ZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5taW1lLk1JTUVQYXJ0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJGYXVsdDsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotLyoqCi0gKiBBUDI5NDEKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDpiaW5kaW5nPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPkEgd3NkbDpiaW5kaW5nIGluIGEgZGVzY3JpcHRpb24gYmluZHMgZXZlcnkgd3NkbDpwYXJ0Ci0gKiBvZiBhIHdzZGw6bWVzc2FnZSBpbiB0aGUgd3NkbDpwb3J0VHlwZSB0byB3aGljaCBpdCByZWZlcnMgdG8gb25lIG9mCi0gKiBzb2FwYmluZDpib2R5LCBzb2FwYmluZDpoZWFkZXIsIHNvYXBiaW5kOmZhdWx0ICwgc29hcGJpbmQ6aGVhZGVyZmF1bHQsCi0gKiBvciBtaW1lOmNvbnRlbnQuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEFQMjk0MSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEFQMjk0MShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBHZXR0aW5nIGEgd3NkbDpiaW5kaW5nCi0gICAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgICAgLy8gR2V0dGluZyBpdHMgd3NkbDpvcGVyYXRpb24gZWxlbWVudHMKLSAgICAgIExpc3Qgb3BzID0gYmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9ucygpOwotCi0gICAgICAvLyBHb2luZyB0aHJvdWdoIHRoZSBvcGVyYXRpb24gZWxlbWVudHMKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb3BzLnNpemUoKTsgaSsrKQotICAgICAgewotICAgICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbikgb3BzLmdldChpKTsKLSAgICAgICAgSW5wdXQgcG9ydFR5cGVJbnB1dCA9IGJpbmRpbmdPcGVyYXRpb24uZ2V0T3BlcmF0aW9uKCkuZ2V0SW5wdXQoKTsKLSAgICAgICAgT3V0cHV0IHBvcnRUeXBlT3V0cHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKS5nZXRPdXRwdXQoKTsKLSAgICAgICAgLy8gSWYgdGhlIGNvcnJlc3BvbmRpbmcgd3NkbDppbnB1dCBleGlzdHMgaW4gd3NkbDpwb3J0VHlwZQotICAgICAgICAvLyBhbmQgaW5jbHVkZXMgdGhlIG1lc3NhZ2UgYXR0cmlidXRlCi0gICAgICAgIGlmIChwb3J0VHlwZUlucHV0ICE9IG51bGwgJiYgcG9ydFR5cGVJbnB1dC5nZXRNZXNzYWdlKCkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIC8vIEdldHRpbmcgdGhlIGxpc3Qgb2YgYWxsIHRoZSBwYXJ0cyBib3VuZCBieSB3c2RsOmlucHV0J3MgY2hpbGQgZWxlbWVudHMKLSAgICAgICAgICBMaXN0IGlucHV0UGFydHMgPSBnZXRCaW5kaW5nUGFydHMoCi0gICAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLAotICAgICAgICAgICAgcG9ydFR5cGVJbnB1dC5nZXRNZXNzYWdlKCkpOwotICAgICAgICAgIC8vIElmIG5vdCB0cnVlIHRoYXQgYWxsIHRoZSB3c2RsOnBhcnRTIGFyZSBib3VuZCwKLSAgICAgICAgICAvLyB0aGUgYXNzZXJ0aW9uIGZhaWxlZAotICAgICAgICAgIGlmICghaW5wdXRQYXJ0cwotICAgICAgICAgICAgLmNvbnRhaW5zQWxsKHBvcnRUeXBlSW5wdXQuZ2V0TWVzc2FnZSgpLmdldFBhcnRzKCkua2V5U2V0KCkpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgd3NkbDppbnB1dCBvZiB0aGUgXCIiCi0gICAgICAgICAgICAgICsgYmluZGluZ09wZXJhdGlvbi5nZXROYW1lKCkgKyAiXCIgYmluZGluZyBvcGVyYXRpb24gZG9lcyBub3QgIgotICAgICAgICAgICAgICArICJiaW5kIGFsbCB0aGUgY29ycmVzcG9uZGluZyB3c2RsOnBhcnRTLiIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIHRoZSBjb3JyZXNwb25kaW5nIHdzZGw6b3V0cHV0IGV4aXN0cyBpbiB3c2RsOnBvcnRUeXBlCi0gICAgICAgIC8vIGFuZCBpbmNsdWRlcyB0aGUgbWVzc2FnZSBhdHRyaWJ1dGUKLSAgICAgICAgaWYgKHBvcnRUeXBlT3V0cHV0ICE9IG51bGwgJiYgcG9ydFR5cGVPdXRwdXQuZ2V0TWVzc2FnZSgpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXR0aW5nIHRoZSBsaXN0IG9mIGFsbCB0aGUgcGFydHMgYm91bmQgYnkgd3NkbDpvdXRwdXQncyBjaGlsZCBlbGVtZW50cwotICAgICAgICAgIExpc3Qgb3V0cHV0UGFydHMgPSBnZXRCaW5kaW5nUGFydHMoCi0gICAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSwKLSAgICAgICAgICAgIHBvcnRUeXBlT3V0cHV0LmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgLy8gSWYgbm90IHRydWUgdGhhdCBhbGwgdGhlIHdzZGw6cGFydFMgYXJlIGJvdW5kLAotICAgICAgICAgIC8vIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICAgICAgaWYgKCFvdXRwdXRQYXJ0cwotICAgICAgICAgICAgLmNvbnRhaW5zQWxsKHBvcnRUeXBlT3V0cHV0LmdldE1lc3NhZ2UoKS5nZXRQYXJ0cygpLmtleVNldCgpKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIHdzZGw6b3V0cHV0IG9mIHRoZSBcIiIKLSAgICAgICAgICAgICAgKyBiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKSArICJcIiBiaW5kaW5nIG9wZXJhdGlvbiBkb2VzIG5vdCAiCi0gICAgICAgICAgICAgICsgImJpbmQgYWxsIHRoZSBjb3JyZXNwb25kaW5nIHdzZGw6cGFydFMuIik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSUYgdGhlcmUgYXJlIHdzZGw6ZmF1bHRTIGluIHRoZSB3c2RsOnBvcnRUeXBlIG9wZXJhdGlvbgotICAgICAgICBpZiAoIWJpbmRpbmdPcGVyYXRpb24uZ2V0T3BlcmF0aW9uKCkuZ2V0RmF1bHRzKCkuaXNFbXB0eSgpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gQ29sbGVjdGluZyBhbGwgdGhlIHNvYXA6ZmF1bHQgbmFtZXMKLSAgICAgICAgICBMaXN0IGZhdWx0TmFtZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgICAgQ29sbGVjdGlvbiBmYXVsdHMgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdGYXVsdHMoKS52YWx1ZXMoKTsKLSAgICAgICAgICAvLyBHb2luZyB0aHJvdWdoIGFsbCB0aGUgd3NkbDpmYXVsdFMKLSAgICAgICAgICBJdGVyYXRvciBpdCA9IGZhdWx0cy5pdGVyYXRvcigpOwotICAgICAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gR2V0dGluZyB3c2RsOmZhdWx0J3MgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cwotICAgICAgICAgICAgTGlzdCBleHRFbGVtcyA9ICgoQmluZGluZ0ZhdWx0KSBpdC5uZXh0KCkpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBleHRFbGVtcy5zaXplKCk7IGorKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgaWYgKCgoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZXh0RWxlbXMuZ2V0KGopKQotICAgICAgICAgICAgICAgIC5nZXRFbGVtZW50VHlwZSgpLmVxdWFscyhXU0RMX1NPQVBfRkFVTFQpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZmF1bHROYW1lcy5hZGQoKChTT0FQRmF1bHQpZXh0RWxlbXMuZ2V0KGopKS5nZXROYW1lKCkpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIC8vIEdvaW5nIHRocm91Z2ggYWxsIHRoZSBzb2FwOmhlYWRlcmZhdWx0UwotICAgICAgICAgIGZhdWx0TmFtZXMuYWRkQWxsKGZpbmRBbGxIZWFkZXJGYXVsdHMoYmluZGluZ09wZXJhdGlvbikpOwotICAgICAgICAgIC8vIElmIG5vdCB0cnVlIHRoYXQgYWxsIHRoZSB3c2RsOmZhdWx0UyBhcmUgYm91bmQsCi0gICAgICAgICAgLy8gdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICBpZiAoIWZhdWx0TmFtZXMuY29udGFpbnNBbGwoCi0gICAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLmdldE9wZXJhdGlvbigpLmdldEZhdWx0cygpLmtleVNldCgpKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgYmluZGluZyBvcGVyYXRpb24gXCIiCi0gICAgICAgICAgICAgICAgICArIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpICsgIlwiIGRvZXMgbm90ICIKLSAgICAgICAgICAgICAgICAgICsgImJpbmQgYWxsIHRoZSBjb3JyZXNwb25kaW5nIHdzZGw6ZmF1bHRTLiIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBhZmUpCi0gICAgewotICAgICAgLy8gVGhlIGFzc2VydGlvbiBpcyAicmVjb21tZW5kZWQiLCB1c2luZyB0aGUgIndhcm5pbmciIHJlc3VsdAotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9XQVJOSU5HOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBhZmUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb2xsZWN0cyBhbGwgdGhlIHBhcnRzIGJvdW5kIGJ5IGV4dGVuc2liaWxpdHkgZWxlbWVudHMuCi0gICAqIEBwYXJhbSBleHRFbGVtcyBhIGxpdCBvZiBleHRlbnNpYmlsaXR5IGVsZW1lbnRzLgotICAgKiBAcGFyYW0gbWVzc2FnZSB0aGUgd3NkbDptZXNzYWdlIGVsZW1lbnQgY29ycmVzcG9uZ2luZwotICAgKiB0byB0aGUgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIGxpc3Qgb2Ygd3NkbDpwYXJ0IG5hbWVzIGJvdW5kLgotICAgKi8KLSAgcHJpdmF0ZSBMaXN0IGdldEJpbmRpbmdQYXJ0cyhMaXN0IGV4dEVsZW1zLCBNZXNzYWdlIG1lc3NhZ2UpCi0gIHsKLSAgICBMaXN0IHBhcnRzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGlmIChleHRFbGVtcyAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggdGhlIGV4dGVuc2liaWxpdHkgZWxlbWVudHMKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZXh0RWxlbXMuc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dEVsZW0gPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGV4dEVsZW1zLmdldChpKTsKLSAgICAgICAgLy8gSWYgdGhhdCBpcyBhIHNvYXA6Ym9keQotICAgICAgICBpZiAoZXh0RWxlbS5nZXRFbGVtZW50VHlwZSgpLmVxdWFscyhXU0RMX1NPQVBfQk9EWSkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBBZGRpbmcgYWxsIHRoZSBwYXJ0cyBib3VuZCB0byB0aGUgbGlzdAotICAgICAgICAgIExpc3QgcHRzID0gKChTT0FQQm9keSkgZXh0RWxlbSkuZ2V0UGFydHMoKTsKLSAgICAgICAgICBpZiAocHRzICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgcGFydHMuYWRkQWxsKHB0cyk7Ci0gICAgICAgICAgfQotICAgICAgICAgIC8vIGVsc2UgdGhlIHBhcnRzIGF0dHJpYnV0ZSBpcyBvbWl0dGVkLAotICAgICAgICAgIC8vIGFsbCBwYXJ0cyBkZWZpbmVkIGJ5IHRoZSBtZXNzYWdlIGFyZSBhc3N1bWVkIHRvIGJlIGluY2x1ZGVkCi0gICAgICAgICAgLy8gaW4gdGhlIFNPQVAgQm9keSBwb3J0aW9uLgotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBwYXJ0cy5hZGRBbGwobWVzc2FnZS5nZXRQYXJ0cygpLmtleVNldCgpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLy8gZWxzZSBpZiB0aGF0IGlzIGEgc29hcDpoZWFkZXIKLSAgICAgICAgZWxzZSBpZiAoZXh0RWxlbS5nZXRFbGVtZW50VHlwZSgpLmVxdWFscyhXU0RMX1NPQVBfSEVBREVSKSkKLSAgICAgICAgewotICAgICAgICAgIExpc3QgaGVhZGVyRmF1bHRzID0gbnVsbDsKLSAgICAgICAgICBpZiAoZXh0RWxlbSBpbnN0YW5jZW9mIFNPQVBIZWFkZXIpCi0gICAgICAgICAgewotICAgICAgICAgICAgU09BUEhlYWRlciBoZWFkZXIgPSAoU09BUEhlYWRlcikgZXh0RWxlbTsKLSAgICAgICAgICAgIC8vIElmIGEgaGVhZGVyIHJlZmVyZW5jZXMgdGhlIGNvcnJlc3BvbmRpbmcgbWVzc2FnZSwKLSAgICAgICAgICAgIC8vIGFkZGluZyBwYXJ0IG5hbWUgdG8gdGhlIGxpc3QgCi0gICAgICAgICAgICBpZiAobWVzc2FnZS5nZXRRTmFtZSgpLmVxdWFscyhoZWFkZXIuZ2V0TWVzc2FnZSgpKSkKLSAgICAgICAgICAgICAgcGFydHMuYWRkKGhlYWRlci5nZXRQYXJ0KCkpOwotCi0gICAgICAgICAgICBoZWFkZXJGYXVsdHMgPSBoZWFkZXIuZ2V0U09BUEhlYWRlckZhdWx0cygpOwotICAgICAgICAgIH0KLSAgICAgICAgICAvLyBXU0RMNEogMS40IGRvZXMgbm90IHJlY29nbml6ZSBzb2FwOmhlYWRlciBlbGVtZW50cyB0aGF0IGFyZSBlbmNsb3NlZAotICAgICAgICAgIC8vIGluIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZCwgc28gdXNpbmcgYSB3b3JrYXJvdW5kCi0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIEVsZW1lbnQgaGVhZGVyID0KLSAgICAgICAgICAgICAgKChVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGV4dEVsZW0pLmdldEVsZW1lbnQoKTsKLSAgICAgICAgICAgIC8vIElmIGEgaGVhZGVyIHJlZmVyZW5jZXMgdGhlIGNvcnJlc3BvbmRpbmcgbWVzc2FnZSwKLSAgICAgICAgICAgIC8vIGFkZGluZyBwYXJ0IG5hbWUgdG8gdGhlIGxpc3QKLSAgICAgICAgICAgIGlmIChyZWZlcmVuY2VzTWVzc2FnZShoZWFkZXIsIG1lc3NhZ2UuZ2V0UU5hbWUoKSkpCi0gICAgICAgICAgICAgIHBhcnRzLmFkZChoZWFkZXIuZ2V0QXR0cmlidXRlKCJwYXJ0IikpOwotICAgICAgICAgICAgLy8gQ29sbGVjdGluZyBzb2FwOmhlYWRlcmZhdWx0IGVsZW1lbnRzIGZvciB0aGUgaGVhZGVyCi0gICAgICAgICAgICBoZWFkZXJGYXVsdHMgPSBnZXRIZWFkZXJGYXVsdHMoaGVhZGVyKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgLy8gR29pbmcgdGhyb3VnaCB0aGUgc29hcDpoZWFkZXJmYXVsdFMKLSAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGhlYWRlckZhdWx0cy5zaXplKCk7IGorKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaGVhZGVyRmF1bHRzLmdldChqKSBpbnN0YW5jZW9mIFNPQVBIZWFkZXJGYXVsdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU09BUEhlYWRlckZhdWx0IHNoZiA9IChTT0FQSGVhZGVyRmF1bHQpIGhlYWRlckZhdWx0cy5nZXQoaik7Ci0gICAgICAgICAgICAgIC8vIElmIGEgc29hcDpoZWFkZXJmYXVsdCByZWZlcmVuY2VzIHRoZSBjb3JyZXNwb25kaW5nCi0gICAgICAgICAgICAgIC8vIG1lc3NhZ2UsIGFkZGluZyBwYXJ0IG5hbWUgdG8gdGhlIGxpc3QKLSAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZXF1YWxzKHNoZi5nZXRNZXNzYWdlKCkpKQotICAgICAgICAgICAgICAgIHBhcnRzLmFkZChzaGYuZ2V0UGFydCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIHRoZSBzYW1lIHdvcmthcm91bmQuLi4KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRWxlbWVudCBzaGYgPSAoRWxlbWVudCkgaGVhZGVyRmF1bHRzLmdldChqKTsKLSAgICAgICAgICAgICAgLy8gSWYgYSBzb2FwOmhlYWRlcmZhdWx0IHJlZmVyZW5jZXMgdGhlIGNvcnJlc3BvbmRpbmcKLSAgICAgICAgICAgICAgLy8gbWVzc2FnZSwgYWRkaW5nIHBhcnQgbmFtZSB0byB0aGUgbGlzdAotICAgICAgICAgICAgICBpZiAocmVmZXJlbmNlc01lc3NhZ2Uoc2hmLCBtZXNzYWdlLmdldFFOYW1lKCkpKQotICAgICAgICAgICAgICAgIHBhcnRzLmFkZChzaGYuZ2V0QXR0cmlidXRlKCJwYXJ0IikpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAvLyBlbHNlIGlmIHRoYXQgaXMgYSBtaW1lOmNvbnRlbnQKLSAgICAgICAgZWxzZSBpZiAoZXh0RWxlbS5nZXRFbGVtZW50VHlwZSgpLmVxdWFscyhXU0RMX01JTUVfQ09OVEVOVCkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBhZGRpbmcgcGFydCBuYW1lIHRvIHRoZSBsaXN0Ci0gICAgICAgICAgcGFydHMuYWRkKCgoTUlNRUNvbnRlbnQpIGV4dEVsZW0pLmdldFBhcnQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gZWxzZSBpZiB0aGF0IGlzIGEgbWltZTptdWx0aXBhcnRSZWxhdGVkCi0gICAgICAgIGVsc2UgaWYgKGV4dEVsZW0uZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9NSU1FX01VTFRJUEFSVCkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXR0aW5nIHRoZSBtaW1lOnBhcnQgZWxlbWVudHMgb2YgdGhlIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZAotICAgICAgICAgIExpc3QgbWltZVBhcnRzID0gKChNSU1FTXVsdGlwYXJ0UmVsYXRlZCkgZXh0RWxlbSkuZ2V0TUlNRVBhcnRzKCk7Ci0gICAgICAgICAgLy8gR29pbmcgdGhyb3VnaCBhbGwgdGhlIG1pbWU6cGFydCBlbGVtZW50cwotICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbWltZVBhcnRzLnNpemUoKTsgaisrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIENvbGxlY3RpbmcgYWxsIHRoZSB2YWx1ZXMgb2YgcGFydCBhdHRyaWJ1dGVzCi0gICAgICAgICAgICAvLyBvZiBtaW1lOnBhcnQncyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzCi0gICAgICAgICAgICBwYXJ0cy5hZGRBbGwoZ2V0QmluZGluZ1BhcnRzKAotICAgICAgICAgICAgICAoKE1JTUVQYXJ0KSBtaW1lUGFydHMuZ2V0KGopKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSwKLSAgICAgICAgICAgICAgbWVzc2FnZSkpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcGFydHM7Ci0gIH0KLQotICAvKioKLSAgICogVmFsaWRhdGVzIHdoZXRoZXIgYW4gZWxlbWVudCBjb250YWlucyBhIG1lc3NhZ2UgYXR0cmlidXRlIHRoYXQgcmVmZXJlbmNlcwotICAgKiBhIG1lc3NhZ2UgdGhhdCBoYXZlIHRoZSBxdWFsaWZpZWQgbmFtZSBzcGVjaWZpZWQuCi0gICAqIEBwYXJhbSBlbGVtIGFuIGVsZW1lbnQgdG8gYmUgdmFsaWRhdGVkLgotICAgKiBAcGFyYW0gbWVzc2FnZU5hbWUgdGhlIHF1YWxpZmllZCBuYW1lIG9mIGEgbWVzc2FnZS4KLSAgICogQHJldHVybiB0cnVlIGlmIGFuIGVsZW1lbnQgaXMgdmFsaWQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiByZWZlcmVuY2VzTWVzc2FnZShFbGVtZW50IGVsZW0sIFFOYW1lIG1lc3NhZ2VOYW1lKQotICB7Ci0gICAgLy8gR2V0dGluZyB0aGUgZWxlbWVudCdzIG1lc3NhZ2UgYXR0cmlidXRlCi0gICAgU3RyaW5nIG1lc3NhZ2UgPSBlbGVtLmdldEF0dHJpYnV0ZSgibWVzc2FnZSIpOwotICAgIC8vIGZpbmRpbmcgdGhlIGNvbG9uIGRlbGltaXRlcgotICAgIGludCBjb2xvblBvcyA9IG1lc3NhZ2UuaW5kZXhPZigiOiIpOwotICAgIFN0cmluZyBucyA9IG51bGw7Ci0gICAgLy8gR2V0dGluZyBhIGxvY2FsIHBhcnQKLSAgICBTdHJpbmcgbHAgPSBjb2xvblBvcyA+IC0xID8gbWVzc2FnZS5zdWJzdHJpbmcoY29sb25Qb3MgKyAxKSA6IG1lc3NhZ2U7Ci0gICAgLy8gSWYgdGhlIGRlbGltaXRlciBpcyBmb3VuZAotICAgIGlmIChjb2xvblBvcyA+IC0xKQotICAgIHsKLSAgICAgIC8vIFJldHJpZXZpbmcgYSBuYW1lc3BhY2UgVVJJCi0gICAgICBucyA9IHZhbGlkYXRvci53c2RsRG9jdW1lbnQuZ2V0RGVmaW5pdGlvbnMoKQotICAgICAgICAuZ2V0TmFtZXNwYWNlKG1lc3NhZ2Uuc3Vic3RyaW5nKDAsIGNvbG9uUG9zKSk7Ci0gICAgfQotICAgIC8vIElmIHRoZSBsb2NhbCBwYXJ0IGFuZCB0aGUgbmFtZXNwYWNlIFVSSSBhcmUgdGhlIHNhbWUgYXMgYSBtZXNzYWdlIGhhdmUKLSAgICBpZiAobWVzc2FnZU5hbWUuZ2V0TG9jYWxQYXJ0KCkuZXF1YWxzKGxwKQotICAgICAgJiYgbWVzc2FnZU5hbWUuZ2V0TmFtZXNwYWNlVVJJKCkuZXF1YWxzKG5zKSkKLSAgICB7Ci0gICAgICAvLyBlbGVtZW50IGlzIHZhbGlkLCByZXR1cm4gdHJ1ZQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIC8vIGVsZW1lbnQgaXMgbm90IHZhbGlkLCByZXR1cm4gZmFsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwcml2YXRlIExpc3QgZmluZEFsbEhlYWRlckZhdWx0cyhCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcCkKLSAgewotICAgIExpc3QgaGVhZGVyRmF1bHRzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGlmIChiaW5kaW5nT3AgPT0gbnVsbCkKLSAgICAgIHJldHVybiBoZWFkZXJGYXVsdHM7Ci0gICAgTGlzdCBpb0VsZW1lbnRzID0gYmluZGluZ09wLmdldEJpbmRpbmdJbnB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgIGlvRWxlbWVudHMuYWRkQWxsKGJpbmRpbmdPcC5nZXRCaW5kaW5nT3V0cHV0KCkuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW9FbGVtZW50cy5zaXplKCk7IGkrKykKLSAgICB7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBpb0VsZW1lbnRzLmdldChpKTsKLSAgICAgIGlmIChleHRFbGVtLmdldEVsZW1lbnRUeXBlKCkuZXF1YWxzKFdTRExfU09BUF9IRUFERVIpKSB7Ci0gICAgICAgIExpc3Qgc2hmTGlzdCA9ICgoU09BUEhlYWRlcikgZXh0RWxlbSkuZ2V0U09BUEhlYWRlckZhdWx0cygpOwotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHNoZkxpc3Quc2l6ZSgpOyBqKyspCi0gICAgICAgICAgaGVhZGVyRmF1bHRzLmFkZCgoKFNPQVBIZWFkZXJGYXVsdCkgc2hmTGlzdC5nZXQoaikpLmdldFBhcnQoKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmICghZXh0RWxlbS5nZXRFbGVtZW50VHlwZSgpLmVxdWFscyhXU0RMX1NPQVBfQk9EWSkpIHsKLSAgICAgICAgTGlzdCBlbExpc3QgPSBnZXRIZWFkZXJGYXVsdHMoKAotICAgICAgICAgICAgICAgICAgKFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCkgZXh0RWxlbSkuZ2V0RWxlbWVudCgpKTsKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBlbExpc3Quc2l6ZSgpOyBqKyspCi0gICAgICAgICAgaGVhZGVyRmF1bHRzLmFkZCgoKEVsZW1lbnQpZWxMaXN0LmdldChqKSkuZ2V0QXR0cmlidXRlKCJwYXJ0IikpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gaGVhZGVyRmF1bHRzOwotICB9Ci0gIC8qKgotICAgKiBDb2xsZWN0cyBhbGwgdGhlIGVsZW1lbnQncyBjaGlsZCBlbGVtZW50cyBvZiB0aGUgc29hcDpoZWFkZXJmYXVsdCB0eXBlLgotICAgKiBAcGFyYW0gZWxlbWVudCBhbiBlbGVtZW50IHRoYXQgY2FuIGhhdmUgc29hcDpoZWFkZXJmYXVsdCBlbGVtZW50cy4KLSAgICogQHJldHVybiB0aGUgbGlzdCBvZiBzb2FwOmhlYWRlcmZhdWx0IGVsZW1lbnRzIGZvdW5kLgotICAgKi8KLSAgcHJpdmF0ZSBMaXN0IGdldEhlYWRlckZhdWx0cyhFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgICBMaXN0IGhlYWRlckZhdWx0cyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBpZiAoZWxlbWVudCAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIEdldHRpbmcgdGhlIGZpcnN0IGhlYWRlcidzIGNoaWxkCi0gICAgICBFbGVtZW50IGNoaWxkID0gWE1MVXRpbHMuZ2V0Rmlyc3RDaGlsZChlbGVtZW50KTsKLSAgICAgIHdoaWxlIChjaGlsZCAhPSBudWxsKQotICAgICAgewotICAgICAgICAvLyBJZiB0aGUgY2hpbGQgaXMgc29hcDpoZWFkZXJmYXVsdAotICAgICAgICBpZiAoY2hpbGQuZ2V0TmFtZXNwYWNlVVJJKCkuZXF1YWxzKFdTRExfU09BUF9IRUFERVJGQVVMVC5nZXROYW1lc3BhY2VVUkkoKSkKLSAgICAgICAgICAmJiBjaGlsZC5nZXRMb2NhbE5hbWUoKS5lcXVhbHMoV1NETF9TT0FQX0hFQURFUkZBVUxULmdldExvY2FsUGFydCgpKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIEFkZGluZyB0aGUgY2hpbGQgdG8gdGhlIGxpc3QKLSAgICAgICAgICBoZWFkZXJGYXVsdHMuYWRkKGNoaWxkKTsKLSAgICAgICAgfQotICAgICAgICAvLyBHZXR0aW5nIHRoZSBuZXh0IGhlYWRlcidzIGNoaWxkCi0gICAgICAgIGNoaWxkID0gWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcoY2hpbGQpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gaGVhZGVyRmF1bHRzOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjk0NC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0FQMjk0NC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTkzYTdiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5NDQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRUNvbnRlbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLQotLyoqCi0gKiBBUDI5NDQKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDpiaW5kaW5nPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPkluIGEgREVTQ1JJUFRJT04sIGlmIGEgd3NkbDpwYXJ0IGVsZW1lbnQgcmVmZXJzIHRvIGEKLSAqIGdsb2JhbCBlbGVtZW50IGRlY2xhcmF0aW9uICh2aWEgdGhlIGVsZW1lbnQgYXR0cmlidXRlIG9mIHRoZSB3c2RsOnBhcnQgZWxlbWVudCkKLSAqIHRoZW4gdGhlIHZhbHVlIG9mIHRoZSB0eXBlIGF0dHJpYnV0ZSBvZiBhIG1pbWU6Y29udGVudCBlbGVtZW50IHRoYXQgYmluZHMgdGhhdCBwYXJ0Ci0gKiBpcyBhIGNvbnRlbnQgdHlwZSBzdWl0YWJsZSBmb3IgY2FycnlpbmcgYW4gWE1MIHNlcmlhbGl6YXRpb24uPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEFQMjk0NCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLy8gQSB2YXJpYWJsZSB0aGF0IGluZGljYXRlcyBhIGJpbmRpbmcgY29udGFpbnMgbWltZTpjb250ZW50IGVsZW1lbnRzCi0gIC8vIHRoYXQgYmluZCB3c2RsOnBhcnRTIGRlZmluZWQgd2l0aCB0aGUgZWxlbWVudCBhdHRyaWJ1dGUKLSAgcHJpdmF0ZSBib29sZWFuIG1pbWVDb250ZW50Rm91bmQ7Ci0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBBUDI5NDQoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gUmVzZXR0aW5nIHRoZSB2YXJpYWJsZQotICAgIG1pbWVDb250ZW50Rm91bmQgPSBmYWxzZTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdldHRpbmcgYSB3c2RsOmJpbmRpbmcKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgICAvLyBHZXR0aW5nIGl0cyB3c2RsOm9wZXJhdGlvbiBlbGVtZW50cwotICAgICAgTGlzdCBvcHMgPSBiaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb25zKCk7Ci0KLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggdGhlIG9wZXJhdGlvbiBlbGVtZW50cwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvcHMuc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKSBvcHMuZ2V0KGkpOwotCi0gICAgICAgIC8vIEdldHRpbmcgd3NkbDppbnB1dCBhbmQgd3NkbDpvdXRwdXQgZWxlbWVudHMgb2YgYW4gb3BlcmF0aW9uCi0gICAgICAgIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpOwotICAgICAgICBCaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXRwdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdPdXRwdXQoKTsKLQotICAgICAgICAvLyBDb2xsZWN0aW5nIGFsbCB0aGUgbWltZTpjb250ZW50IGVsZW1lbnRzIGZyb20gd3NkbDppbnB1dCBhbmQgd3NkbDpvdXRwdXQKLSAgICAgICAgTGlzdCBpbnB1dE1pbWVDb250ZW50cyA9IGdldE1pbWVDb250ZW50RWxlbWVudHMoCi0gICAgICAgICAgYmluZGluZ0lucHV0ID09IG51bGwgPyBudWxsIDogYmluZGluZ0lucHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpKTsKLSAgICAgICAgTGlzdCBvdXRwdXRNaW1lQ29udGVudHMgPSBnZXRNaW1lQ29udGVudEVsZW1lbnRzKAotICAgICAgICAgIGJpbmRpbmdPdXRwdXQgPT0gbnVsbCA/IG51bGwgOiBiaW5kaW5nT3V0cHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpKTsKLQotICAgICAgICAvLyBJZiB0aGUgd3NkbDppbnB1dCBjb250YWlucyBtaW1lOmNvbnRlbnQgZWxlbWVudHMKLSAgICAgICAgaWYgKCFpbnB1dE1pbWVDb250ZW50cy5pc0VtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBJbnB1dCBwb3J0VHlwZUlucHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRPcGVyYXRpb24oKS5nZXRJbnB1dCgpOwotICAgICAgICAgIC8vIElmIHRoZSBjb3JyZXNwb25kaW5nIHdzZGw6aW5wdXQgZXhpc3RzIGluIHdzZGw6cG9ydFR5cGUKLSAgICAgICAgICAvLyBhbmQgaW5jbHVkZXMgdGhlIG1lc3NhZ2UgYXR0cmlidXRlCi0gICAgICAgICAgaWYgKHBvcnRUeXBlSW5wdXQgIT0gbnVsbCAmJiBwb3J0VHlwZUlucHV0LmdldE1lc3NhZ2UoKSAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGFuIGludmFsaWQgbWltZTpjb250ZW50IGVsZW1lbnQKLSAgICAgICAgICAgIE1JTUVDb250ZW50IGltYyA9IGdldEludmFsaWRNaW1lQ29udGVudCgKLSAgICAgICAgICAgICAgICBpbnB1dE1pbWVDb250ZW50cywgcG9ydFR5cGVJbnB1dC5nZXRNZXNzYWdlKCkpOwotICAgICAgICAgICAgaWYgKGltYyAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIG1pbWU6Y29udGVudCBlbGVtZW50IGluICIKLSAgICAgICAgICAgICAgICArICJ0aGUgd3NkbDppbnB1dCBvZiB0aGUgXCIiICsgYmluZGluZ09wZXJhdGlvbi5nZXROYW1lKCkKLSAgICAgICAgICAgICAgICArICJcIiB0aGF0IGJpbmRzIHRoZSBcIiIgKyBpbWMuZ2V0UGFydCgpCi0gICAgICAgICAgICAgICAgKyAiXCIgd3NkbDpwYXJ0IHVzZXMgdGhlIGludmFsaWQgY29udGVudCB0eXBlIFwiIgotICAgICAgICAgICAgICAgICsgaW1jLmdldFR5cGUoKSArICJcIi4gIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgdGhlIHdzZGw6b3V0cHV0IGNvbnRhaW5zIG1pbWU6Y29udGVudCBlbGVtZW50cwotICAgICAgICBpZiAoIW91dHB1dE1pbWVDb250ZW50cy5pc0VtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBPdXRwdXQgcG9ydFR5cGVPdXRwdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldE9wZXJhdGlvbigpLmdldE91dHB1dCgpOwotICAgICAgICAgIC8vIElmIHRoZSBjb3JyZXNwb25kaW5nIHdzZGw6b3V0cHV0IGV4aXN0cyBpbiB3c2RsOnBvcnRUeXBlCi0gICAgICAgICAgLy8gYW5kIGluY2x1ZGVzIHRoZSBtZXNzYWdlIGF0dHJpYnV0ZQotICAgICAgICAgIGlmIChwb3J0VHlwZU91dHB1dCAhPSBudWxsICYmIHBvcnRUeXBlT3V0cHV0LmdldE1lc3NhZ2UoKSAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGFuIGludmFsaWQgbWltZTpjb250ZW50IGVsZW1lbnQKLSAgICAgICAgICAgIE1JTUVDb250ZW50IGltYyA9IGdldEludmFsaWRNaW1lQ29udGVudCgKLSAgICAgICAgICAgICAgb3V0cHV0TWltZUNvbnRlbnRzLCBwb3J0VHlwZU91dHB1dC5nZXRNZXNzYWdlKCkpOwotICAgICAgICAgICAgaWYgKGltYyAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIG1pbWU6Y29udGVudCBlbGVtZW50IGluICIKLSAgICAgICAgICAgICAgICArICJ0aGUgd3NkbDpvdXRwdXQgb2YgdGhlIFwiIiArIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpCi0gICAgICAgICAgICAgICAgKyAiXCIgdGhhdCBiaW5kcyB0aGUgXCIiICsgaW1jLmdldFBhcnQoKQotICAgICAgICAgICAgICAgICsgIlwiIHdzZGw6cGFydCB1c2VzIHRoZSBpbnZhbGlkIGNvbnRlbnQgdHlwZSBcIiIKLSAgICAgICAgICAgICAgICArIGltYy5nZXRUeXBlKCkgKyAiXCIuICIpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgLy8gSWYgbWltZTpjb250ZW50IGVsZW1lbnRzIGFyZSBub3QgZm91bmQsCi0gICAgICAvLyB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAoIW1pbWVDb250ZW50Rm91bmQpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGFuYWUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gYWZlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBhZmUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja3Mgd2hldGhlciBhbnkgbWltZTpjb250ZW50IGVsZW1lbnQgYmluZHMgd3NkbDpwYXJ0IHRoYXQgaXMgZGVmaW5lZAotICAgKiB3aXRoIHRoZSBlbGVtZW50IGF0dHJpYnV0ZSBhbmQgdXNlcyB0aGUgY29udGVudCB0eXBlICJ0ZXh0L3htbCIuCi0gICAqIEBwYXJhbSBtaW1lQ29udGVudHMgYSBsaXN0IG9mIG1pbWU6Y29udGVudCBlbGVtZW50cyBvZiBiaW5kaW5nIG9wZXJhdGlvbi4KLSAgICogQHBhcmFtIG1lc3NhZ2UgdGhlIGNvcnJlc3BvbmRpbmcgd3NkbDptZXNzYWdlIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gYSBtaW1lOmNvbnRlbnQgZWxlbWVudCB0aGF0IHVzZXMgYSBjb250ZW50IHR5cGUgb3RoZXIgdGhhbgotICAgKiAidGV4dC94bWwiLCBudWxsIGlmIG5vIG9uZSBzdWNoIGVsZW1lbnQgaXMgZm91bmQuCi0gICAqLwotICBwcml2YXRlIE1JTUVDb250ZW50IGdldEludmFsaWRNaW1lQ29udGVudChMaXN0IG1pbWVDb250ZW50cywgTWVzc2FnZSBtZXNzYWdlKQotICB7Ci0gICAgLy8gR29pbmcgdGhyb3VnaCBhIGxpc3Qgb2YgbWltZTpjb250ZW50IGVsZW1lbnRzCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtaW1lQ29udGVudHMuc2l6ZSgpOyBpKyspCi0gICAgewotICAgICAgTUlNRUNvbnRlbnQgbWltZUNvbnRlbnQgPSAoTUlNRUNvbnRlbnQpIG1pbWVDb250ZW50cy5nZXQoaSk7Ci0gICAgICAvLyBHZXR0aW5nIHRoZSBjb3JyZXNwb25kaW5nIHdzZGw6cGFydAotICAgICAgUGFydCBwYXJ0ID0gbWVzc2FnZS5nZXRQYXJ0KG1pbWVDb250ZW50LmdldFBhcnQoKSk7Ci0gICAgICAvLyBJZiB0aGUgcGFydCBpcyBkZWZpbmVkIHdpdGggdGhlIGVsZW1lbnQgYXR0cmlidXRlCi0gICAgICBpZiAocGFydCAhPSBudWxsICYmIHBhcnQuZ2V0RWxlbWVudE5hbWUoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBtaW1lQ29udGVudEZvdW5kID0gdHJ1ZTsKLSAgICAgICAgLy8gSWYgdGhlIHR5cGUgYXR0cmlidXRlIHZhbHVlIGlzIG90aGVyIHRoYW4gInRleHQveG1sIgotICAgICAgICBpZiAoIVdTSUNvbnN0YW50cy5DT05URU5UX1RZUEVfVEVYVF9YTUwuZXF1YWxzKG1pbWVDb250ZW50LmdldFR5cGUoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyByZXR1cm4gdGhlIGludmFsaWQgZWxlbWVudAotICAgICAgICAgIHJldHVybiBtaW1lQ29udGVudDsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDb2xsZWN0cyBhbGwgbWltZTpjb250ZW50IGVsZW1lbnRzLgotICAgKiBAcGFyYW0gZXh0RWxlbXMgYSBsaXN0IG9mIGV4dGVuc2liaWxpdHkgZWxlbWVudHMgdGhhdCBjYW4gY29udGFpbiBtaW1lOmNvbnRlbnRTLgotICAgKiBAcmV0dXJuIHRoZSBsaXN0IG9mIG1pbWU6Y29udGVudCBlbGVtZW50cyBmb3VuZC4KLSAgICovCi0gIHByaXZhdGUgTGlzdCBnZXRNaW1lQ29udGVudEVsZW1lbnRzKExpc3QgZXh0RWxlbXMpCi0gIHsKLSAgICBMaXN0IG1pbWVDb250ZW50RWxlbWVudHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLSAgICBpZiAoZXh0RWxlbXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBHb2luZyB0aHJvdWdoIGFsbCB0aGUgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBleHRFbGVtcy5zaXplKCk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0RWxlbSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCkgZXh0RWxlbXMuZ2V0KGkpOwotICAgICAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyBtaW1lOm11bHRpcGFydFJlbGF0ZWQKLSAgICAgICAgaWYgKGV4dEVsZW0uZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9NSU1FX01VTFRJUEFSVCkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXR0aW5nIHRoZSBtaW1lOnBhcnQgZWxlbWVudHMgb2YgdGhlIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZAotICAgICAgICAgIExpc3QgbWltZVBhcnRzID0gKChNSU1FTXVsdGlwYXJ0UmVsYXRlZCkgZXh0RWxlbSkuZ2V0TUlNRVBhcnRzKCk7Ci0gICAgICAgICAgLy8gR29pbmcgdGhyb3VnaCBhbGwgdGhlIG1pbWU6cGFydCBlbGVtZW50cwotICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbWltZVBhcnRzLnNpemUoKTsgaisrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIENvbGxlY3RpbmcgYWxsIHRoZSBtaW1lOmNvbnRlbnQgZWxlbWVudHMgb2YgdGhpcyBtaW1lOnBhcnQKLSAgICAgICAgICAgIExpc3QgZWxlbXMgPSBnZXRNaW1lQ29udGVudEVsZW1lbnRzKAotICAgICAgICAgICAgICAoKE1JTUVQYXJ0KSBtaW1lUGFydHMuZ2V0KGopKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgICAgICAgICAvLyBBZGRpbmcgdGhlIGVsZW1lbnRzIHRvIHRoZSBsaXN0IGJlaW5nIHJldHVybmVkCi0gICAgICAgICAgICBtaW1lQ29udGVudEVsZW1lbnRzLmFkZEFsbChlbGVtcyk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIEVsc2UgaWYgdGhlIGVsZW1lbnQgaXMgbWltZTpjb250ZW50Ci0gICAgICAgIGVsc2UgaWYgKGV4dEVsZW0uZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9NSU1FX0NPTlRFTlQpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gQWRkaW5nIHRoZSBlbGVtZW50IHRvIHRoZSBsaXN0IGJlaW5nIHJldHVybmVkCi0gICAgICAgICAgbWltZUNvbnRlbnRFbGVtZW50cy5hZGQoZXh0RWxlbSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbWltZUNvbnRlbnRFbGVtZW50czsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5NDYuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9BUDI5NDYuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDU1NTczOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQVAyOTQ2LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRUNvbnRlbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLm1pbWUuTUlNRVBhcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLS8qKgotICogQVAyOTQ2Ci0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZyAgd2l0aCBhdCBsZWFzdCBvbmUgbWltZTpjb250ZW50IGVsZW1lbnQ8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+SW4gYSBERVNDUklQVElPTiwgYSBtaW1lOmNvbnRlbnQgZWxlbWVudAotICogaW5jbHVkZXMgdGhlIHBhcnQgYXR0cmlidXRlLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBBUDI5NDYgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIGltcGxlbWVudHMgV1NJVGFnCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBBUDI5NDYoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gQSB2YXJpYWJsZSB0aGF0IGluZGljYXRlcyBhIGJpbmRpbmcgY29udGFpbnMgYXQgbGVhc3Qgb25lCi0gICAgICAvLyBtaW1lOmNvbnRlbnQgZWxlbWVudAotICAgICAgYm9vbGVhbiBtaW1lQ29udGVudHNGb3VuZCA9IGZhbHNlOwotCi0gICAgICAvLyBHZXR0aW5nIGEgd3NkbDpiaW5kaW5nCi0gICAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgICAgLy8gR2V0dGluZyBpdHMgd3NkbDpvcGVyYXRpb24gZWxlbWVudHMKLSAgICAgIExpc3Qgb3BzID0gYmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9ucygpOwotCi0gICAgICAvLyBHb2luZyB0aHJvdWdoIHRoZSBvcGVyYXRpb24gZWxlbWVudHMKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb3BzLnNpemUoKTsgaSsrKQotICAgICAgewotICAgICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbikgb3BzLmdldChpKTsKLQotICAgICAgICAvLyBHZXR0aW5nIHdzZGw6aW5wdXQgYW5kIHdzZGw6b3V0cHV0IGVsZW1lbnRzIG9mIGFuIG9wZXJhdGlvbgotICAgICAgICBCaW5kaW5nSW5wdXQgYmluZGluZ0lucHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nSW5wdXQoKTsKLSAgICAgICAgQmluZGluZ091dHB1dCBiaW5kaW5nT3V0cHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nT3V0cHV0KCk7Ci0KLSAgICAgICAgLy8gQ29sbGVjdGluZyBhbGwgdGhlIG1pbWU6Y29udGVudCBlbGVtZW50cyBmcm9tIHdzZGw6aW5wdXQgYW5kIHdzZGw6b3V0cHV0Ci0gICAgICAgIExpc3QgaW5wdXRNaW1lQ29udGVudHMgPSBnZXRNaW1lQ29udGVudEVsZW1lbnRzKAotICAgICAgICAgIGJpbmRpbmdJbnB1dCA9PSBudWxsID8gbnVsbCA6IGJpbmRpbmdJbnB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgICAgIExpc3Qgb3V0cHV0TWltZUNvbnRlbnRzID0gZ2V0TWltZUNvbnRlbnRFbGVtZW50cygKLSAgICAgICAgICBiaW5kaW5nT3V0cHV0ID09IG51bGwgPyBudWxsIDogYmluZGluZ091dHB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0KLSAgICAgICAgLy8gSWYgdGhlIHdzZGw6aW5wdXQgY29udGFpbnMgbWltZTpjb250ZW50IGVsZW1lbnRzCi0gICAgICAgIGlmICghaW5wdXRNaW1lQ29udGVudHMuaXNFbXB0eSgpKQotICAgICAgICB7Ci0gICAgICAgICAgbWltZUNvbnRlbnRzRm91bmQgPSB0cnVlOwotICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGEgbWltZTpjb250ZW50IHRoYXQgZG9lcyBub3QgaW5jbHVkZQotICAgICAgICAgIC8vIHRoZSBwYXJ0IGF0dHJpYnV0ZSwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICBpZiAoaGFzSW52YWxpZE1pbWVDb250ZW50KGlucHV0TWltZUNvbnRlbnRzKSkKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJUaGUgaW52YWxpZCBtaW1lOmNvbnRlbnQgZWxlbWVudCIKLSAgICAgICAgICAgICAgKyAiIGlzIGluIHRoZSB3c2RsOmlucHV0IG9mIHRoZSBcIiIgKyBiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKQotICAgICAgICAgICAgICArICJcIiBiaW5kaW5nIG9wZXJhdGlvbi4iKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIHRoZSB3c2RsOm91dHB1dCBjb250YWlucyBtaW1lOmNvbnRlbnQgZWxlbWVudHMKLSAgICAgICAgaWYgKCFvdXRwdXRNaW1lQ29udGVudHMuaXNFbXB0eSgpKQotICAgICAgICB7Ci0gICAgICAgICAgbWltZUNvbnRlbnRzRm91bmQgPSB0cnVlOwotICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGEgbWltZTpjb250ZW50IHRoYXQgZG9lcyBub3QgaW5jbHVkZQotICAgICAgICAgIC8vIHRoZSBwYXJ0IGF0dHJpYnV0ZSwgdGhlIGFzc2VydGlvbiBmYWlsZWQKLSAgICAgICAgICBpZiAoaGFzSW52YWxpZE1pbWVDb250ZW50KG91dHB1dE1pbWVDb250ZW50cykpCi0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigiVGhlIGludmFsaWQgbWltZTpjb250ZW50IGVsZW1lbnQiCi0gICAgICAgICAgICAgICsgIiBpcyBpbiB0aGUgd3NkbDpvdXRwdXQgb2YgdGhlIFwiIiArIGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpCi0gICAgICAgICAgICAgICsgIlwiIGJpbmRpbmcgb3BlcmF0aW9uLiIpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8vIElmIHRoZSBiaW5kaW5nIGNvbnRhaW5zIG5vIG1pbWU6Y29udGVudCBlbGVtZW50cywKLSAgICAgIC8vIHRoZSBhc3NlcnRpb24gaXMgbm90IGFwcGxpY2FibGUKLSAgICAgIGlmICghbWltZUNvbnRlbnRzRm91bmQpCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uKCk7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGFuYWUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEFzc2VydGlvbkZhaWxFeGNlcHRpb24gYWZlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBhZmUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb2xsZWN0cyBhbGwgbWltZTpjb250ZW50IGVsZW1lbnRzLgotICAgKiBAcGFyYW0gZXh0RWxlbXMgYSBsaXN0IG9mIGV4dGVuc2liaWxpdHkgZWxlbWVudHMgdGhhdCBjYW4gY29udGFpbiBtaW1lOmNvbnRlbnRTLgotICAgKiBAcmV0dXJuIHRoZSBsaXN0IG9mIG1pbWU6Y29udGVudCBlbGVtZW50cyBmb3VuZC4KLSAgICovCi0gIHByaXZhdGUgTGlzdCBnZXRNaW1lQ29udGVudEVsZW1lbnRzKExpc3QgZXh0RWxlbXMpCi0gIHsKLSAgICBMaXN0IG1pbWVDb250ZW50RWxlbWVudHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLSAgICBpZiAoZXh0RWxlbXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBHb2luZyB0aHJvdWdoIGFsbCB0aGUgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBleHRFbGVtcy5zaXplKCk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0RWxlbSA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCkgZXh0RWxlbXMuZ2V0KGkpOwotICAgICAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyBtaW1lOm11bHRpcGFydFJlbGF0ZWQKLSAgICAgICAgaWYgKGV4dEVsZW0uZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9NSU1FX01VTFRJUEFSVCkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXR0aW5nIHRoZSBtaW1lOnBhcnQgZWxlbWVudHMgb2YgdGhlIG1pbWU6bXVsdGlwYXJ0UmVsYXRlZAotICAgICAgICAgIExpc3QgbWltZVBhcnRzID0gKChNSU1FTXVsdGlwYXJ0UmVsYXRlZCkgZXh0RWxlbSkuZ2V0TUlNRVBhcnRzKCk7Ci0gICAgICAgICAgLy8gR29pbmcgdGhyb3VnaCBhbGwgdGhlIG1pbWU6cGFydCBlbGVtZW50cwotICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbWltZVBhcnRzLnNpemUoKTsgaisrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIENvbGxlY3RpbmcgYWxsIHRoZSBtaW1lOmNvbnRlbnQgZWxlbWVudHMgb2YgdGhpcyBtaW1lOnBhcnQKLSAgICAgICAgICAgIExpc3QgZWxlbXMgPSBnZXRNaW1lQ29udGVudEVsZW1lbnRzKAotICAgICAgICAgICAgICAoKE1JTUVQYXJ0KSBtaW1lUGFydHMuZ2V0KGopKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSk7Ci0gICAgICAgICAgICAvLyBBZGRpbmcgdGhlIGVsZW1lbnRzIHRvIHRoZSBsaXN0IGJlaW5nIHJldHVybmVkCi0gICAgICAgICAgICBtaW1lQ29udGVudEVsZW1lbnRzLmFkZEFsbChlbGVtcyk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIEVsc2UgaWYgdGhlIGVsZW1lbnQgaXMgbWltZTpjb250ZW50Ci0gICAgICAgIGVsc2UgaWYgKGV4dEVsZW0uZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NETF9NSU1FX0NPTlRFTlQpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gQWRkaW5nIHRoZSBlbGVtZW50IHRvIHRoZSBsaXN0IGJlaW5nIHJldHVybmVkCi0gICAgICAgICAgbWltZUNvbnRlbnRFbGVtZW50cy5hZGQoZXh0RWxlbSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbWltZUNvbnRlbnRFbGVtZW50czsKLSAgfQotCi0gIC8qKgotICAgKiBWYWxpZGF0ZXMgbWltZTpjb250ZW50IGVsZW1lbnRzLgotICAgKiBAcGFyYW0gbWltZUNvbnRlbnRzIGEgbGlzdCBvZiBtaW1lOmNvbnRlbnQgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiBhbnkgbWltZTpjb250ZW50IGRvZXMgbm90IGluY2x1ZGUgdGhlIHBhcnQgYXR0cmlidXRlLAotICAgKiBmYWxzZSBvdGhlcndpc2UKLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBoYXNJbnZhbGlkTWltZUNvbnRlbnQoTGlzdCBtaW1lQ29udGVudHMpCi0gIHsKLSAgICAvLyBHb2luZyB0aHJvdWdoIGEgbGlzdCBvZiBtaW1lOmNvbnRlbnQgZWxlbWVudHMKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1pbWVDb250ZW50cy5zaXplKCk7IGkrKykKLSAgICB7Ci0gICAgICAvLyBJZiBhIG1pbWU6Y29udGVudCBkb2VzIG5vdCBpbmNsdWRlIHRoZSBwYXJ0IGF0dHJpYnV0ZSwgcmV0dXJuIHRydWUKLSAgICAgIGlmICgoKE1JTUVDb250ZW50KSBtaW1lQ29udGVudHMuZ2V0KGkpKS5nZXRQYXJ0KCkgPT0gbnVsbCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIC8vIFRoZXJlIGFyZSBubyBpbnZhbGlkIG1pbWU6Y29udGVudFMsIHJldHVybiBmYWxzZQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMTAuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMTAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTE1MTkzZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMDEwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuUG9ydFR5cGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5Bc3NlcnRpb25GYWlsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotCi0KLS8qKgotKiBCUDIwMTAuCi0qICJOYW1lIiBhdHRyaWJ1dGVzIG9mIE9wZXJhdGlvbnMgYXJlIHVuaXF1ZSBhY3Jvc3MgdGhlIHdzZGw6cG9ydFR5cGUgZGVmaW5pdGlvbiAKLSoKLSogQHZlcnNpb24gMS4wLjEgMjcuMDYuMjAwMwotKiBAYXV0aG9yIFZpdGFsaSBGZWRvc2Vua28KLSoqLwotcHVibGljIGNsYXNzIEJQMjAxMCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjAxMChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIC8vIEdldCB0aGUgcG9ydFR5cGUgZnJvbSB0aGUgZW50cnkgY29udGV4dAotICAgIFBvcnRUeXBlIHBvcnRUeXBlID0gKFBvcnRUeXBlKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgLy8gQ2hlY2sgdGhlIG9wZXJhdGlvbnMgbmFtZXMgZm9yIHVuaXF1ZW5lc3Mgd2l0aGluIHRoZSBjYW5kaWRhdGUgUG9ydCBUeXBlIGluIHRoZSBXU0RMIAotICAgIEl0ZXJhdG9yIG9wczsKLSAgICBIYXNoU2V0IG5hbWVzU2VlbiA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgSGFzaFNldCBkdXBsaWNhdGVzID0gbmV3IEhhc2hTZXQoKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBMaXN0IG9wc0xpc3QgPSBwb3J0VHlwZS5nZXRPcGVyYXRpb25zKCk7Ci0gICAgICBpZiAob3BzTGlzdCA9PSBudWxsKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgICAvLyBubyBvcGVyYXRpb25zIGZvdW5kIGluIHBvcnRUeXBlCi0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIG9wcyA9IG9wc0xpc3QuaXRlcmF0b3IoKTsgLy8gd2lsbCB1c2UgQ2FuZGlkYXRlLmdldE9wZXJhdGlvbnMoKQotICAgICAgICB3aGlsZSAob3BzLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIE9wZXJhdGlvbiBvcCA9IChPcGVyYXRpb24pIG9wcy5uZXh0KCk7Ci0gICAgICAgICAgU3RyaW5nIG9wTmFtZSA9IG9wLmdldE5hbWUoKTsKLSAgICAgICAgICBpZiAobmFtZXNTZWVuLmNvbnRhaW5zKG9wTmFtZSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgZHVwbGljYXRlcy5hZGQob3BOYW1lKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG5hbWVzU2Vlbi5hZGQob3BOYW1lKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgaWYgKCFkdXBsaWNhdGVzLmlzRW1wdHkoKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nQnVmZmVyIGZhaWxJbmZvID0KLSAgICAgICAgICBuZXcgU3RyaW5nQnVmZmVyKAotICAgICAgICAgICAgIkR1cGxpY2F0ZSBvcGVyYXRpb24gbmFtZXMgaW4gcG9ydFR5cGUgIgotICAgICAgICAgICAgICArIHBvcnRUeXBlLmdldFFOYW1lKCkKLSAgICAgICAgICAgICAgKyAiOiAiKTsKLSAgICAgICAgSXRlcmF0b3IgaSA9IGR1cGxpY2F0ZXMuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKGkuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgZmFpbEluZm8uYXBwZW5kKChTdHJpbmcpIGkubmV4dCgpICsgIjsgIik7Ci0gICAgICAgIH0KLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oZmFpbEluZm8udG9TdHJpbmcoKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBlKQotICAgIHsgLy8gPz8gbm8gb3BlcmF0aW9ucyBmb3VuZCwgYnV0IGRvZXMgbm90IGZhaWwgdGhlIGFzc2VydGlvbi4KLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0LCBwb3J0VHlwZSk7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAxMS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAxMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMzFlMDU0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMTEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLlR5cGVzOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVycm9yTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotCi0vKioKLSAqIEJQMjAxMS4KLSAqIFRoZSBpbXBvcnRlZCBYTUwgc2NoZW1hIGlzIGEgd2VsbC1mb3JtZWQgWE1MIDEuMCBkb2N1bWVudCBhbmQgaWYgaXQgY29udGFpbnMgYW4gCi0gKiBYTUwgZGVjbGFyYXRpb24sIGl0IGlzIHZlcnNpb24gMS4wLiAKLSAqCi0gKiBAdmVyc2lvbiAxLjAuMSAyNy4wNi4yMDAzCi0gKiBAYXV0aG9yIFZpdGFsaSBGZWRvc2Vua28KLSoqLwotcHVibGljIGNsYXNzIEJQMjAxMSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjAxMShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JzID0gbmV3IEVycm9yTGlzdCgpOwotCi0gIHByaXZhdGUgZmluYWwgY2hhcltdIE9NTUlURURfWE1MX0RFQ0xBUkFUSU9OX0RFTElNSVRFUlMgPQotICAgIG5ldyBjaGFyW10geyAweDIwLCAweDksIDB4RCwgMHhBLCAnXCcnLCAnXCInIH07Ci0gIHByaXZhdGUgZmluYWwgY2hhcltdIFhNTF9ERUNMQVJBVElPTl9ERUxJTUlURVJTID0gbmV3IGNoYXJbXSB7ICc9JyB9OwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBWRVJTSU9OX1RPS0VOID0gInZlcnNpb24iOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBWRVJTSU9OID0gIjEuMCI7Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0KLSAgICAvL0RlZmluaXRpb24gZGVmID0gKERlZmluaXRpb24pIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0gICAgVHlwZXMgdHlwZXMgPSAoVHlwZXMpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0KLSAgICBMaXN0IGV4dHMgPSBudWxsOwotICAgIC8vaWYgKGRlZi5nZXRUeXBlcygpIT1udWxsKQotICAgIGlmICh0eXBlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIGV4dHMgPSB0eXBlcy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICB9Ci0gICAgaWYgKGV4dHMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBudWxsOwotICAgICAgaWYgKChkZWZpbml0aW9uID0KLSAgICAgICAgdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dC5nZXRDYW5kaWRhdGVJbmZvKCkuZ2V0RGVmaW5pdGlvbih0eXBlcykpCi0gICAgICAgID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBXU0lFeGNlcHRpb24oIkNvdWxkIG5vdCBmaW5kIHR5cGVzIGRlZmluaXRpb24gaW4gYW55IFdTREwgZG9jdW1lbnQuIik7Ci0gICAgICB9Ci0KLSAgICAgIEl0ZXJhdG9yIGl0ID0gZXh0cy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZWwgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGl0Lm5leHQoKTsKLSAgICAgICAgaWYgKGVsIGluc3RhbmNlb2YgVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KQotICAgICAgICAgIHNlYXJjaEZvclNjaGVtYSgoKFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCkgZWwpLmdldEVsZW1lbnQoKSwKLSAgICAgICAgICAgICAgZGVmaW5pdGlvbi5nZXREb2N1bWVudEJhc2VVUkkoKSwgbmV3IEFycmF5TGlzdCgpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWVycm9ycy5pc0VtcHR5KCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlcnJvcnMudG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9IC8qZWxzZQotICAgICAgICAgCQkJcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ki8KLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotICAvKiBTZWFyY2ggeHNkIHNjaGVtYSBvciB4c2QgaW1wb3J0IGZyb20gbm9kZS4gSWYgbm9kZSBpcyB4c2QgaW1wb3J0IGl0J3MgbG9hZGluZyBzY2hlbWEuCi0gICAqIEBwYXJhbSBuIC0gVW5rbm93bkV4dGVuY2liaWxpdHlFbGVtZW50Ci0gICovCi0gIHByaXZhdGUgdm9pZCBzZWFyY2hGb3JTY2hlbWEoTm9kZSBuLCBTdHJpbmcgY29udGV4dCwgTGlzdCBwcm9jZXNzZWRTY2hlbWFzKQotICB7Ci0gICAgaWYgKChuIT0gbnVsbCkgJiYgKCFwcm9jZXNzZWRTY2hlbWFzLmNvbnRhaW5zKG4pKSkKLSAgICB7Ci0gICAgICB3aGlsZSAobiAhPSBudWxsKQotICAgICAgewotICAgICAgICAvLyBzZWFyY2hlcyBmb3IgeHNkOmltcG9ydCBlbGVtZW50Ci0gICAgICAgIGlmIChOb2RlLkVMRU1FTlRfTk9ERSA9PSBuLmdldE5vZGVUeXBlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBpZiB4c2Q6c2NoZW1hIGVsZW1lbnQgaXMgZm91bmQgLT4gcHJvY2VzcyBzY2hlbWEKLSAgICAgICAgICBpZiAoWE1MVXRpbHMuZXF1YWxzKG4sIEVMRU1fWFNEX1NDSEVNQSkpCi0gICAgICAgICAgICBwcm9jZXNzU2NoZW1hKG4sIGNvbnRleHQsIHByb2Nlc3NlZFNjaGVtYXMpOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIC8vIGlmIHhzZDppbXBvcnQgZWxlbWVudCBpcyBmb3VuZCAtPiBsb2FkIHNjaGVtYSBhbmQgcHJvY2VzcyBzY2hlbWEKLSAgICAgICAgICAgIC8vIEZJWEVEOiBpZiB4c2Q6aW1wb3J0IGlzIGZvdW5kIGFuZCBwYXJlbnQgZWxlbWVudCBpcyB4c2Q6c2NoZW1hCi0gICAgICAgICAgICBpZiAoWE1MVXRpbHMuZXF1YWxzKG4sIEVMRU1fWFNEX0lNUE9SVCkKLSAgICAgICAgICAgICAgJiYgWE1MVXRpbHMuZXF1YWxzKG4uZ2V0UGFyZW50Tm9kZSgpLCBFTEVNX1hTRF9TQ0hFTUEpKQotICAgICAgICAgICAgICBsb2FkU2NoZW1hKG4sIGNvbnRleHQsIHByb2Nlc3NlZFNjaGVtYXMpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAvLyBlbHNlIGl0ZXJhdGUgZWxlbWVudCByZWN1cnNpdmVseQotICAgICAgICAgICAgICBzZWFyY2hGb3JTY2hlbWEobi5nZXRGaXJzdENoaWxkKCksIGNvbnRleHQsIHByb2Nlc3NlZFNjaGVtYXMpOwotICAgICAgICB9Ci0gICAgICAgIG4gPSBuLmdldE5leHRTaWJsaW5nKCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoKLSAgICogSXQgbG9hZHMgeHNkIHNjaGVtYSBhbmQgdGhlbiBjaGVjayB0aGUgdmVyc2lvbiAxLjAgYW5kIGxvb2tpbmcgZm9yIHhzZDpzY2hlbWEgZWxlbWVudCBmb3IgbmV4dCBwcm9jZXNzLgotICAgKiBAcGFyYW0gaW1wb3J0Tm9kZSB4c2Qgc2NoZW1hCi0gICovCi0gIHByaXZhdGUgdm9pZCBsb2FkU2NoZW1hKE5vZGUgaW1wb3J0Tm9kZSwgU3RyaW5nIGNvbnRleHQsIExpc3QgcHJvY2Vzc2VkU2NoZW1hcykKLSAgewotICAgIEVsZW1lbnQgaW0gPSAoRWxlbWVudCkgaW1wb3J0Tm9kZTsKLSAgICBBdHRyIHNjaGVtYUxvY2F0aW9uID0gWE1MVXRpbHMuZ2V0QXR0cmlidXRlKGltLCBBVFRSX1hTRF9TQ0hFTUFMT0NBVElPTik7Ci0gICAgLy8gdHJ5IHRvIHBhcnNlIGltcG9ydGVkIFhTRAotICAgIGlmIChzY2hlbWFMb2NhdGlvbiAhPSBudWxsICYmIHNjaGVtYUxvY2F0aW9uLmdldFZhbHVlKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgLy8gaWYgYW55IGVycm9yIG9yIHJvb3QgZWxlbWVudCBpcyBub3QgWFNEIHNjaGVtYSAtPiBlcnJvcgotICAgICAgICBTdHJpbmcgZGVjbCA9Ci0gICAgICAgICAgcmVhZFhNTERlY2xhcmF0aW9uU3RhdGVtZW50KHNjaGVtYUxvY2F0aW9uLmdldFZhbHVlKCksIGNvbnRleHQpOwotICAgICAgICBpZiAoIXZhbGlkVmVyc2lvbihkZWNsKSkKLSAgICAgICAgewotICAgICAgICAgIEF0dHIgYSA9IFhNTFV0aWxzLmdldEF0dHJpYnV0ZShpbSwgQVRUUl9YU0RfTkFNRVNQQUNFKTsKLSAgICAgICAgICBlcnJvcnMuYWRkKChhICE9IG51bGwpID8gYS5nZXRWYWx1ZSgpIDogIiIpOwotICAgICAgICB9Ci0gICAgICAgIERvY3VtZW50IHNjaGVtYSA9Ci0gICAgICAgICAgdmFsaWRhdG9yLnBhcnNlWE1MRG9jdW1lbnRVUkwoc2NoZW1hTG9jYXRpb24uZ2V0VmFsdWUoKSwgY29udGV4dCk7Ci0gICAgICAgIGlmIChYTUxVdGlscy5lcXVhbHMoc2NoZW1hLmdldERvY3VtZW50RWxlbWVudCgpLCBFTEVNX1hTRF9TQ0hFTUEpKQotICAgICAgICB7Ci0gICAgICAgICAgcHJvY2Vzc1NjaGVtYShzY2hlbWEuZ2V0RG9jdW1lbnRFbGVtZW50KCksCi0gICAgICAgICAgICBYTUxVdGlscy5jcmVhdGVVUkxTdHJpbmcoc2NoZW1hTG9jYXRpb24uZ2V0VmFsdWUoKSwgY29udGV4dCksIHByb2Nlc3NlZFNjaGVtYXMpOwotICAgICAgICB9Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgICAgfQotICAgICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgICAgewotICAgICAgfQotICAgIH0KLSAgICAvLyBlbHNlIGlmIHRoZXJlIGlzIG9ubHkgdGhlIG5hbWVzcGFjZSBhdHRyaWJ1dGUsIHRoZSBpbXBvcnQgcmVsYXRlcyB0byBpbmxpbmUgc2NoZW1hCi0gICAgZWxzZSBpZiAoWE1MVXRpbHMuZ2V0QXR0cmlidXRlKGltLCBBVFRSX1hTRF9OQU1FU1BBQ0UpICE9IG51bGwpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICogUmVhZHMgYW4gWE1MIGRlY2xhcmF0aW9uIHN0YXRlbWVudC4KLSAgKiBAcGFyYW0gbG9jYXRpb24KLSAgKiBAcmV0dXJuIFN0cmluZwotICAqLwotICBwcml2YXRlIFN0cmluZyByZWFkWE1MRGVjbGFyYXRpb25TdGF0ZW1lbnQoU3RyaW5nIGxvY2F0aW9uLCBTdHJpbmcgYmFzZVVSSSkKLSAgewotICAgIFN0cmluZyByZXN1bHQgPSBudWxsOwotICAgIHRyeQotICAgIHsKLSAgICAgIG5ldyBVUkwobG9jYXRpb24pOwotICAgIH0KLSAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgewotICAgICAgLy8gbm90aGluZwotICAgICAgaW50IGkgPSBiYXNlVVJJLmxhc3RJbmRleE9mKCcvJyk7Ci0gICAgICBpbnQgaiA9IGJhc2VVUkkubGFzdEluZGV4T2YoJ1xcJyk7Ci0gICAgICBpZiAoaiA+IGkpCi0gICAgICAgIGkgPSBqOwotICAgICAgbG9jYXRpb24gPSBiYXNlVVJJLnN1YnN0cmluZygwLCBpICsgMSkgKyBsb2NhdGlvbjsKLSAgICB9Ci0KLSAgICBpZiAobG9jYXRpb24gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBVUkwgdXJsID0gbnVsbDsKLSAgICAgIFJlYWRlciByZWFkZXIgPSBudWxsOwotCi0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICB1cmwgPSBuZXcgVVJMKGxvY2F0aW9uKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyB3ZSBzaG91bGQgdHJ5IHRvIGFjY2VzcyBsb2NhdGlvbiBhcyBmaWxlCi0gICAgICAgIH0KLQotICAgICAgICBpZiAodXJsICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICByZWFkZXIgPSBuZXcgSW5wdXRTdHJlYW1SZWFkZXIodXJsLm9wZW5TdHJlYW0oKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgcmVhZGVyID0gbmV3IElucHV0U3RyZWFtUmVhZGVyKG5ldyBGaWxlSW5wdXRTdHJlYW0obG9jYXRpb24pKTsKLSAgICAgICAgfQotCi0gICAgICAgIGludCBjaGFyQ29kZTsKLSAgICAgICAgYm9vbGVhbiBlbmQgPSBmYWxzZTsKLSAgICAgICAgaWYgKHJlYWRlci5yZWFkeSgpKQotICAgICAgICB7Ci0gICAgICAgICAgY2hhckNvZGUgPSByZWFkZXIucmVhZCgpOwotCi0gICAgICAgICAgd2hpbGUgKHJlYWRlci5yZWFkeSgpICYmICEoY2hhckNvZGUgPT0gJzwnKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBjaGFyQ29kZSA9IHJlYWRlci5yZWFkKCk7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgICBpZiAoY2hhckNvZGUgPT0gJzwnKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGJ1Zi5hcHBlbmQoKGNoYXIpIGNoYXJDb2RlKTsKLSAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucmVhZHkoKSAmJiAhZW5kKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjaGFyQ29kZSA9IHJlYWRlci5yZWFkKCk7Ci0gICAgICAgICAgICAgIGJ1Zi5hcHBlbmQoKGNoYXIpIGNoYXJDb2RlKTsKLQotICAgICAgICAgICAgICBlbmQgPSBjaGFyQ29kZSA9PSAnPic7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBOT1RFOiBUaGlzIHJlc3VsdCBkb2VzIG5vdCBnZXQgcHJvcG9nYXRlZCBiYWNrIQotICAgICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgICAgICBmYWlsdXJlRGV0YWlsTWVzc2FnZSA9Ci0gICAgICAgICAgICAgICJDYW5ub3QgcmVhZCB0aGUgWE1MIGRlY2xhcmF0aW9uIHN0YXRlbWVudC4iOwotICAgICAgICAgIH0KLQotICAgICAgICAgIHJlc3VsdCA9IGJ1Zi50b1N0cmluZygpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICB9Ci0gICAgICBmaW5hbGx5Ci0gICAgICB7Ci0gICAgICAgIGlmIChyZWFkZXIgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJlYWRlci5jbG9zZSgpOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCAoVGhyb3dhYmxlIGUpCi0gICAgICAgICAgewotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICAvKgotICAgKiBAcGFyYW0geG1sRGVjbCAtIHhtbCBkZWNsYXJhdGlvbgotICAgKiBAcmV0dXJuIGlmIHhtbCBkZWNsYXJhdGlvbiBjb250YWlucyB2ZXJzaW9uPSIxLjAiIGl0IHJldGlybnMgdHJ1ZS4gCi0gICovCi0gIHByaXZhdGUgYm9vbGVhbiB2YWxpZFZlcnNpb24oU3RyaW5nIHhtbERlY2wpCi0gIHsKLSAgICAvL2Jvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0gICAgYm9vbGVhbiByZXN1bHQgPSB0cnVlOwotICAgIGlmICh4bWxEZWNsICE9IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0KLSAgICAgICAgbmV3IFN0cmluZ1Rva2VuaXplcigKLSAgICAgICAgICBPTU1JVEVEX1hNTF9ERUNMQVJBVElPTl9ERUxJTUlURVJTLAotICAgICAgICAgIFhNTF9ERUNMQVJBVElPTl9ERUxJTUlURVJTKTsKLSAgICAgIEVudW1lcmF0aW9uIHRva2VucyA9IHN0LnBhcnNlKHhtbERlY2wpOwotICAgICAgYm9vbGVhbiBmb3VuZCA9IGZhbHNlOwotICAgICAgd2hpbGUgKHRva2Vucy5oYXNNb3JlRWxlbWVudHMoKSAmJiAhZm91bmQpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyB0b2tlbiA9IChTdHJpbmcpIHRva2Vucy5uZXh0RWxlbWVudCgpOwotCi0gICAgICAgIGlmICh0b2tlbi5lcXVhbHNJZ25vcmVDYXNlKFZFUlNJT05fVE9LRU4pKQotICAgICAgICB7Ci0gICAgICAgICAgZm91bmQgPSB0cnVlOwotCi0gICAgICAgICAgdG9rZW5zLm5leHRFbGVtZW50KCk7Ci0gICAgICAgICAgU3RyaW5nIHZlciA9IChTdHJpbmcpIHRva2Vucy5uZXh0RWxlbWVudCgpOwotCi0gICAgICAgICAgcmVzdWx0ID0gVkVSU0lPTi5lcXVhbHModmVyKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICAvKgotICAgKiBJdCdzIGxva2luZyBmb3IgeHNkIGltcG9ydCBhbmQgbG9hZCBpdCBpZiBmaW5kLgotICAgKiBAcGFyYW0gc2NoZW1hIHhzZCBzY2hlbWEKLSAgKi8KLSAgcHJpdmF0ZSB2b2lkIHByb2Nlc3NTY2hlbWEoTm9kZSBzY2hlbWEsIFN0cmluZyBjb250ZXh0LCBMaXN0IHByb2Nlc3NlZFNjaGVtYXMpCi0gIHsKLQlpZiAoKHNjaGVtYSAhPSBudWxsKSAmJiAoIXByb2Nlc3NlZFNjaGVtYXMuY29udGFpbnMoc2NoZW1hKSkpCi0JewotCSAgcHJvY2Vzc2VkU2NoZW1hcy5hZGQoc2NoZW1hKTsKLSAgICAgIE5vZGUgbiA9IHNjaGVtYS5nZXRGaXJzdENoaWxkKCk7Ci0gICAgICB3aGlsZSAobiAhPSBudWxsKQotICAgICAgewotICAgICAgICBpZiAoTm9kZS5FTEVNRU5UX05PREUgPT0gbi5nZXROb2RlVHlwZSgpCi0gICAgICAgICAgJiYgWE1MVXRpbHMuZXF1YWxzKG4sIEVMRU1fWFNEX0lNUE9SVCkpCi0gICAgICAgICAgbG9hZFNjaGVtYShuLCBjb250ZXh0LCBwcm9jZXNzZWRTY2hlbWFzKTsKLQotICAgICAgICBuID0gbi5nZXROZXh0U2libGluZygpOwotICAgICAgfQotCX0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMTIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMTIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmEzM2MxYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMDEyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsLldTRExWYWxpZGF0b3JJbXBsLkJpbmRpbmdNYXRjaDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLQotCi0vKioKLSAgKiBCUDIwMTIuCi0gICogRXhhbXBsZToKLSAgKiAKLSAgKiA8bWVzc2FnZSBuYW1lPSJnZXRDb25maWd1cmF0aW9uT3B0aW9uc1JlcXVlc3QiPgotICAqIAk8cGFydCBuYW1lPSJyZWZyZXNoIiBlbGVtZW50PSJjZmc6cmVmcmVzaCIgLz4gCi0gICogPC9tZXNzYWdlPgotICAqIDxwb3J0VHlwZSBuYW1lPSJDb25maWd1cmF0b3JQb3J0VHlwZSI+Ci0gICogCTxvcGVyYXRpb24gbmFtZT0iZ2V0Q29uZmlndXJhdGlvbk9wdGlvbnMiPgotICAqIAkJPGlucHV0IG1lc3NhZ2U9InRuczpnZXRDb25maWd1cmF0aW9uT3B0aW9uc1JlcXVlc3QiIC8+IAotICAqIAkJPG91dHB1dCAuLi4uLiAvPiAKLSAgKiAJCTxmYXVsdCAuLi4uLiAvPiAKLSAgKiAJPC9vcGVyYXRpb24+Ci0gICogPC9wb3J0VHlwZT4KLSAgKiA8YmluZGluZyBuYW1lPSJDb25maWd1cmF0b3JCaW5kaW5nIiB0eXBlPSJ0bnM6Q29uZmlndXJhdG9yUG9ydFR5cGUiPgotICAqIAk8c29hcDpiaW5kaW5nIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIiBzdHlsZT0iZG9jdW1lbnQiIC8+IAotICAqIAk8b3BlcmF0aW9uIG5hbWU9ImdldENvbmZpZ3VyYXRpb25PcHRpb25zIj4KLSAgKgkJPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuenp6LmNvbS96enoud3NkbC9nZXRDb25maWd1cmF0aW9uT3B0aW9ucyIgLz4gCi0gICogCQk8aW5wdXQ+Ci0gICogCQkJPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy56enouY29tL3p6ei53c2RsIiAvPiAKLSAgKiAJCTwvaW5wdXQ+Ci0gICogCQk8b3V0cHV0Pi4uLi4uPC9vdXRwdXQ+Ci0gICoJCTxmYXVsdD4uLi4uLi48L2ZhdWx0PgotICAqIAk8L29wZXJhdGlvbj4KLSAgKiA8L2JpbmRpbmc+Ci0gICogCi0gICogQWJvdmUsIHRoZSB0ZXN0IGZvciB0aGlzIGFzc2VydGlvbiBtaWdodCBiZSB0aGF0IHRoZSBlbGVtZW50IGF0dHJpYnV0ZSBpcyBzcGVjaWZpZWQgaW4gdGhlICJyZWZyZXNoIiAKLSAgKiBwYXJ0IG9mIHRoZSBnZXRDb25maWd1cmF0aW9uT3B0aW9uc1JlcXVlc3QgbWVzc2FnZS4gCi0gICogCi0gICogQ29udGV4dCA6IGZvciA8YmluZGluZz4gIkNvbmZpZ3VyYXRvckJpbmRpbmciLCA8c29hcDpiaW5kaW5nPiBzdHlsZT1kb2N1bWVudDsgPHNvYXA6Ym9keT4gdXNlPWxpdGVyYWwKLSAgKiBmb3IgdGhlIDxpbnB1dD4gb2YgYmluZGluZyBvcGVyYXRpb24gImdldENvbmZpZ3VyYXRpb25PcHRpb25zIi4gCi0gICogKDxpbnB1dD4gaXMgYW4gZXhhbXBsZS4gQ291bGQgYmUgPG91dHB1dD4gb3IgPGZhdWx0PiBlcXVhbGx5KS4KLSAgKiBBY3Rpb246IGNoZWNrIHRoZSBwYXJ0KHMpIG9mIHRoZSBtZXNzYWdlIHNwZWNpZmllZCBpbiB0aGUgPGlucHV0PiBlbGVtZW50IChpbiBleGFtcGxlKSBvZiB0aGUgPHBvcnRUeXBlPiwKLSAgKiBuYW1lbHkgdG5zOmdldENvbmZpZ3VyYXRpb25PcHRpb25zUmVxdWVzdCwgdGhhdCB0aGUgZWxlbWVudCBhdHRyaWJ1dGUgaXMgc3BlY2lmaWVkLiBJbiB0aGlzIGNhc2Ugd2UgaGF2ZQotICAqIDxwYXJ0IG5hbWU9InJlZnJlc2giIGVsZW1lbnQ9ImNmZzpyZWZyZXNoIiAvPiwgc28gdGhlIHRlc3QgcGFzc2VzLgotICAqIEFsbCBzdWNoIHBhcnRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgYXNzZXJ0aW9uIGNhbmRpZGF0ZSBiaW5kaW5nKHMpIG11c3QgYmUgc2ltaWxhcmx5IGNoZWNrZWQgZm9yIHRoaXMgYXNzZXJ0aW9uCi0gICogdG8gcGFzcy4KLSAgKi8KLXB1YmxpYyBjbGFzcyBCUDIwMTIgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDIwMTIoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIAotICAgKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEdldCBiaW5kaW5nIGZyb20gZW50cnkgY29udGV4dAotCi0gICAgLy8gT2xlZydzICYgR3JhaGFtJ3MgdmVyc2lvbjoKLSAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgIC8vIHRvIHVzZSBvcmlnaW5hbCB2ZXJzaW9uIHJlcXVpcmUgYSBiaW5kaW5nIGFycmF5Ci0gICAgLy9CaW5kaW5nW10gYmluZGluZyA9IHsoQmluZGluZykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKX07Ci0KLSAgICAvLyBnZXQgbGlzdCBvZiBjYW5kaWRhdGUgbWF0Y2hlcwotICAgIEJpbmRpbmdNYXRjaFtdIGJpbmRpbmdNYXRjaCA9Ci0gICAgICB0aGlzLnZhbGlkYXRvci5nZXRCaW5kaW5nTWF0Y2hlcygKLSAgICAgICAgYmluZGluZywKLSAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQywKLSAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CT0RZX1VTRV9MSVQpOwotICAgIGlmIChiaW5kaW5nTWF0Y2gubGVuZ3RoID09IDApCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGlmICghdGhpcy52YWxpZGF0b3IuY2hlY2tQYXJ0QXR0cmlidXRlcyhiaW5kaW5nTWF0Y2gsICJ1c2VJbnB1dCIsICJ1c2VFbGVtZW50IikKLSAgICAgICAgICB8fCAhdGhpcy52YWxpZGF0b3IuY2hlY2tQYXJ0QXR0cmlidXRlcyhiaW5kaW5nTWF0Y2gsICJ1c2VPdXRwdXQiLCAidXNlRWxlbWVudCIpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuCi0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oImRpYWdub3N0aWM6IGludGVybmFsIHByb2Nlc3NpbmcgZXJyb3IhIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQsIGJpbmRpbmcpOwotICAgICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAxMy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAxMy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTNhMzc4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMTMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbC5XU0RMVmFsaWRhdG9ySW1wbC5CaW5kaW5nTWF0Y2g7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLQotLyoqCi0gKiBCUDIwMTMuCi0gKiBUaGUgYmluZGluZyAoaW4gc29hcGJpbmQ6Ym9keSBlbGVtZW50cykgb25seSByZWZlcnMgdG8gcGFydCBlbGVtZW50cyB0aGF0IGhhdmUgYmVlbiBkZWZpbmVkIHVzaW5nIHRoZSAidHlwZSIgYXR0cmlidXRlLgotICoKLSAqIEB2ZXJzaW9uIDEuMC4xIDI3LjA2LjIwMDMKLSAqIEBhdXRob3IgVml0YWxpIEZlZG9zZW5rbwotICovCi1wdWJsaWMgY2xhc3MgQlAyMDEzIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMDEzKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEdldCBiaW5kaW5nIGZyb20gZW50cnkgY29udGV4dAotCi0gICAgLy8gT2xlZydzICYgR3JhaGFtJ3MgdmVyc2lvbjoKLSAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgIC8vIHRvIHVzZSBvcmlnaW5hbCB2ZXJzaW9uIHJlcXVpcmUgYSBiaW5kaW5nIGFycmF5Ci0gICAgLy9CaW5kaW5nW10gYmluZGluZyA9IHsoQmluZGluZykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKX07Ci0KLSAgICAvLyBnZXQgbGlzdCBvZiBjYW5kaWRhdGUgbWF0Y2hlcwotICAgIEJpbmRpbmdNYXRjaFtdIGJpbmRpbmdNYXRjaCA9Ci0gICAgICB0aGlzLnZhbGlkYXRvci5nZXRCaW5kaW5nTWF0Y2hlcygKLSAgICAgICAgYmluZGluZywKLSAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX1JQQywKLSAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CT0RZX1VTRV9MSVQpOwotICAgIGlmIChiaW5kaW5nTWF0Y2gubGVuZ3RoID09IDApCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGlmICghdGhpcy52YWxpZGF0b3IuY2hlY2tQYXJ0QXR0cmlidXRlcyhiaW5kaW5nTWF0Y2gsICJ1c2VJbnB1dCIsICJ1c2VUeXBlIikKLSAgICAgICAgICB8fCAhdGhpcy52YWxpZGF0b3IuY2hlY2tQYXJ0QXR0cmlidXRlcyhiaW5kaW5nTWF0Y2gsICJ1c2VPdXRwdXQiLCAidXNlVHlwZSIpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuCi0gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oImRpYWdub3N0aWM6IGludGVybmFsIHByb2Nlc3NpbmcgZXJyb3IhIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChBc3NlcnRpb25GYWlsRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGUuZ2V0TWVzc2FnZSgpLCBlbnRyeUNvbnRleHQsIGJpbmRpbmcpOwotICAgICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAxNC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAxNC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzEwODg5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMTQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLk91dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keTsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVycm9yTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQ7Ci0KLQotLyoqCi0gKiBCUDIwMTQuCi0gKiBDb250ZXh0OgotICogRm9yIGEgY2FuZGlkYXRlIHdzZGw6b3BlcmF0aW9uLCBpZiByZWZlcnJlZCB0byBieSBhIGNhbmRpZGF0ZSBycGMtbGl0ZXJhbCB3c2RsOmJpbmRpbmcgZWxlbWVudAotICogSWYgdGhlIHBhcmFtZXRlck9yZGVyIGF0dHJpYnV0ZSBpcyBwcmVzZW50LCBpdCBvbWl0cyBhdCBtb3N0IDEgcGFydCBmcm9tIG91dHB1dCB3c2RsOm1lc3NhZ2UuCi0gKiovCi1wdWJsaWMgY2xhc3MgQlAyMDE0IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjAxNChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JzID0gbmV3IEVycm9yTGlzdCgpOwotCi0gIC8qCi0gICAqIEBwYXJhbSBiaW5kaW5nIC0gYmluZGluZwotICAgKiBAcmV0dXJuIEl0IHJldHVybnMgc3R5bGUgb2Ygc29hcCBiaW5kaW5nIG9mIGJpbmRpbmcuIElmIHN0eWxlIG9taXR0ZWQgcmV0dXJucyAiZG9jdW1lbnQiIHN0eWxlLiAgIAotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0U09BUEJpbmRpbmdTdHlsZShCaW5kaW5nIGJpbmRpbmcpCi0gIHsKLSAgICBTdHJpbmcgc3R5bGUgPSBudWxsOwotICAgIExpc3QgbGlzdCA9IGJpbmRpbmcuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaXN0LnNpemUoKTsgaSsrKQotICAgIHsKLSAgICAgIGlmIChsaXN0LmdldChpKSBpbnN0YW5jZW9mIFNPQVBCaW5kaW5nKQotICAgICAgewotICAgICAgICBzdHlsZSA9ICgoU09BUEJpbmRpbmcpIGxpc3QuZ2V0KGkpKS5nZXRTdHlsZSgpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHN0eWxlID09IG51bGwpCi0gICAgICBzdHlsZSA9IFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9ET0M7Ci0gICAgcmV0dXJuIHN0eWxlOwotICB9Ci0KLSAgLyoKLSAgICogQHBhcmFtIGxpc3QgLSBMaXN0IG9mIGV4dGVuY2liaWxpdHkgZWxlbWVudHMgZnJvbSBiaW5kaW5nIG91dHB1dAotICAgKiBAcmV0dXJuIGZpcnN0IHNvYXAgYm9keSBpbiBsaXN0LgotICAgKi8KLSAgcHJpdmF0ZSBTT0FQQm9keSBnZXRTT0FQQm9keShMaXN0IGxpc3QpCi0gIHsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpc3Quc2l6ZSgpOyBpKyspCi0gICAgICBpZiAobGlzdC5nZXQoaSkgaW5zdGFuY2VvZiBTT0FQQm9keSkKLSAgICAgICAgcmV0dXJuIChTT0FQQm9keSkgbGlzdC5nZXQoaSk7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKgotICAgKiBAcGFyYW0gbGlzdCAtIExpc3Qgb2YgZXh0ZW5jaWJpbGl0eSBlbGVtZW50cyBvZiBiaW5kaW5nIG9wZXJhdGlvbgotICAgKiBAcmV0dXJuIEZpcnN0IHNvYXAgb3BlcmF0aW9uIGluIGxpc3QuCi0gICAqLwotICBwcml2YXRlIFNPQVBPcGVyYXRpb24gZ2V0U09BUE9wZXJhdGlvbihMaXN0IGxpc3QpCi0gIHsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpc3Quc2l6ZSgpOyBpKyspCi0gICAgICBpZiAobGlzdC5nZXQoaSkgaW5zdGFuY2VvZiBTT0FQT3BlcmF0aW9uKQotICAgICAgICByZXR1cm4gKFNPQVBPcGVyYXRpb24pIGxpc3QuZ2V0KGkpOwotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyogICAgICAgICAgCi0gICAqIEBwYXJhbSBvcGVyIC0gb3BlcmF0aW9uCi0gICAqIEBwYXJhbSBiaW5kaW5nIC0gYmluZGluZwotICAgKiBAcmV0dXJuIGlmIHN0eWxlIG9mIHNvYXAgYmluZGluZyBvZiBiaW5kaW5nIGlzIHJwYyBhbmQgdXNlIG9mIHNvYXAgYm9keSBvZiBiaW5kaW5nIG91dHB1dCBvZiBiaW5kaW5nIG9wZXJhdGlvbiBpcyBsaXRlcmFsIHRoZW4gaXQgcmV0dXJucyB0cnVlLiAKLSAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGNoZWNrUnBjTGl0ZXJhbChCaW5kaW5nT3BlcmF0aW9uIG9wZXIsIEJpbmRpbmcgYmluZGluZykKLSAgewotICAgIExpc3QgbGlzdCA9IG9wZXIuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgU09BUE9wZXJhdGlvbiBzb3AgPSBnZXRTT0FQT3BlcmF0aW9uKGxpc3QpOwotICAgIGlmIChzb3AgPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBTdHJpbmcgc3R5bGUgPQotICAgICAgKHNvcC5nZXRTdHlsZSgpID09IG51bGwKLSAgICAgICAgPyBnZXRTT0FQQmluZGluZ1N0eWxlKGJpbmRpbmcpCi0gICAgICAgIDogc29wLmdldFN0eWxlKCkpOwotICAgIGlmICghc3R5bGUuZXF1YWxzKFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9SUEMpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGxpc3QgPSBvcGVyLmdldEJpbmRpbmdPdXRwdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICBTT0FQQm9keSBib2R5ID0gZ2V0U09BUEJvZHkobGlzdCk7Ci0gICAgaWYgKGJvZHkgPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBTdHJpbmcgdXNlID0gYm9keS5nZXRVc2UoKTsKLSAgICBpZiAodXNlID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdXNlLmVxdWFscyhXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JPRFlfVVNFX0xJVCk7Ci0gIH0KLQotICAvKiBJdCBjaGVja3Mgb3BlcmF0aW9uIGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgcGFydCBpbiBwYXJhbWV0ZXIgb3JkZXIgCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLk9wZXJhdGlvbiwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KE9wZXJhdGlvbiBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIEJpbmRpbmdbXSBiaW5kaW5ncyA9IHZhbGlkYXRvci5hbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldEJpbmRpbmdzKCk7Ci0gICAgaWYgKG9iai5nZXRQYXJhbWV0ZXJPcmRlcmluZygpID09IG51bGwpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoYmluZGluZ3MgPT0gbnVsbCB8fCBvYmogPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChvYmouZ2V0T3V0cHV0KCkgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChvYmouZ2V0T3V0cHV0KCkuZ2V0TWVzc2FnZSgpID09IG51bGwpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBGb3IgZWFjaCBiaW5kaW5nCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBiaW5kaW5ncy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBMaXN0IGxpc3QgPSBiaW5kaW5nc1tpXS5nZXRCaW5kaW5nT3BlcmF0aW9ucygpOwotICAgICAgLy8gRm9yIGVhY2ggYmluZGluZyBvcGVyYXRpb24KLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbGlzdC5zaXplKCk7IGorKykKLSAgICAgIHsKLSAgICAgICAgQmluZGluZ09wZXJhdGlvbiBvcGVyID0gKEJpbmRpbmdPcGVyYXRpb24pIGxpc3QuZ2V0KGopOwotCi0gICAgICAgIC8vIElmIHRoZSBpbnB1dCBvcGVyYXRpb24gbmFtZSBhbmQgYmluZGluZyBvcGVyYXRpbm8gbmFtZSBhcmUgbm90IG51bGwKLSAgICAgICAgaWYgKG9iai5nZXROYW1lKCkgIT0gbnVsbCAmJiBvcGVyLmdldE5hbWUoKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gSWYgdGhlIG9wZXJhdGlvbiBuYW1lcyBhcmUgZXF1YWwKLSAgICAgICAgICBpZiAob2JqLmdldE5hbWUoKS5lcXVhbHMob3Blci5nZXROYW1lKCkpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIElmIHRoZSBvcGVyYXRpb24gaXMgUlBDIGxpdGVyYWwKLSAgICAgICAgICAgIGlmIChjaGVja1JwY0xpdGVyYWwob3BlciwgYmluZGluZ3NbaV0pKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvLyBHZXQgdGhlIGxpc3Qgb2YgcGFydHMgaW4gdGhlIHBhcmFtZXRlck9yZGVyIGF0dHJpYnV0ZQkJCQkKLSAgICAgICAgICAgICAgTGlzdCBwYXJ0cyA9IG9iai5nZXRQYXJhbWV0ZXJPcmRlcmluZygpOwotCi0gICAgICAgICAgICAgIE91dHB1dCBvdXRwdXQgPSBudWxsOwotICAgICAgICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSBudWxsOwotICAgICAgICAgICAgICBNYXAgbWVzc2FnZVBhcnRzID0gbnVsbDsKLQotICAgICAgICAgICAgICAvLyBHZXQgdGhlIGxpc3Qgb2YgcGFydHMgZm9yIHRoZSBvdXRwdXQgbWVzc2FnZQotICAgICAgICAgICAgICBpZiAoKG91dHB1dCA9IG9iai5nZXRPdXRwdXQoKSkgIT0gbnVsbCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICgobWVzc2FnZSA9IG91dHB1dC5nZXRNZXNzYWdlKCkpICE9IG51bGwpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgbWVzc2FnZVBhcnRzID0gbWVzc2FnZS5nZXRQYXJ0cygpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIC8vIElmIHRoZXJlIGFyZSBwYXJ0cyBpbiB0aGUgcGFyYW1ldGVyT3JkZXIgYXR0cmlidXRlIAotICAgICAgICAgICAgICAvLyBhbmQgdGhlcmUgYXJlIG91dHB1dCBtZXNzYWdlIHBhcnRzLCB0aGVuIHByb2Nlc3MgYXNzZXJ0aW9uCi0gICAgICAgICAgICAgIGlmIChwYXJ0cyAhPSBudWxsICYmIG1lc3NhZ2VQYXJ0cyAhPSBudWxsKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW50IHBhcnRDb3VudCA9IDA7Ci0KLSAgICAgICAgICAgICAgICBTdHJpbmcgcGFydE5hbWU7Ci0gICAgICAgICAgICAgICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBwYXJ0cy5pdGVyYXRvcigpOwotICAgICAgICAgICAgICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgLy8gR2V0IHBhcnQgbmFtZSBmcm9tIHBhcmFtZXRlck9yZGVyIGxpc3QKLSAgICAgICAgICAgICAgICAgIHBhcnROYW1lID0gKFN0cmluZykgaXRlcmF0b3IubmV4dCgpOwotCi0gICAgICAgICAgICAgICAgICAvLyBDaGVjayBlYWNoIG91dHB1dCBtZXNzYWdlIHBhcnQgdG8gc2VlIGlmIHRoZXJlIGlzIGEgbWF0Y2gKLSAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlUGFydHMuY29udGFpbnNLZXkocGFydE5hbWUpKQotICAgICAgICAgICAgICAgICAgICBwYXJ0Q291bnQrKzsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoKHBhcnRDb3VudCA9PSBtZXNzYWdlUGFydHMuc2l6ZSgpKQotICAgICAgICAgICAgICAgICAgfHwgKHBhcnRDb3VudCA9PSBtZXNzYWdlUGFydHMuc2l6ZSgpIC0gMSkpCi0gICAgICAgICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgZXJyb3JzLmFkZChvYmouZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgICAgICAgIGN0eC5jYW5jZWxPcGVyYXRpb25Qcm9jZXNzaW5nKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChwYXJ0cyA9PSBudWxsKQotICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLQotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLQotICAgIFdTRExUcmF2ZXJzYWwgdHJhdmVyc2FsID0gbmV3IFdTRExUcmF2ZXJzYWwoKTsKLSAgICAvL1Zpc2l0b3JBZGFwdG9yLmFkYXB0KHRoaXMpOwotICAgIHRyYXZlcnNhbC5zZXRWaXNpdG9yKHRoaXMpOwotICAgIHRyYXZlcnNhbC52aXNpdE9wZXJhdGlvbih0cnVlKTsKLSAgICB0cmF2ZXJzYWwuaWdub3JlSW1wb3J0KCk7Ci0gICAgdHJhdmVyc2FsLnRyYXZlcnNlKChPcGVyYXRpb24pIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCkpOwotCi0gICAgaWYgKCFlcnJvcnMuaXNFbXB0eSgpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgZXJyb3JzLnRvU3RyaW5nKCksCi0gICAgICAgICAgZW50cnlDb250ZXh0LAotICAgICAgICAgIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCkpOwotICAgIH0KLSAgICAvL2Vsc2UKLSAgICAvLyAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAxNy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAxNy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGY0NTkwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMTcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUE9wZXJhdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLQotCi0vKioKLSAqIEJQMjAxNy4KLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmJpbmRpbmc8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlICJzdHlsZSIgYXR0cmlidXRlIG9mIGVhY2ggb3BlcmF0aW9uIGluIHRoZSBjb250YWluZWQgc29hcDpiaW5kaW5nIGhhcyB0aGUgc2FtZSB2YWx1ZSBvZiAiZG9jdW1lbnQiIG9yICJycGMiLCBmb3IgYWxsIG9wZXJhdGlvbnMgb2YgdGhlIHdzZGw6YmluZGluZy48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAyMDE3IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMDE3KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vU3RyaW5nIGZpcnN0U3R5bGUgPSBudWxsOyAvLyBHVDogaXMgdGhpcyBuZWVkZWQ/PwotICAgIFZlY3RvciBmYWlsdXJlRGV0YWlsTGlzdCA9IG5ldyBWZWN0b3IoKTsKLQotICAgIC8vIEdldCB0aGUgYmluZGluZyBmcm9tIHRoZSBlbnRyeSBjb250ZXh0Ci0gICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0gICAgaWYgKGJpbmRpbmcgPT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsTGlzdCk7Ci0gICAgfQotICAgIFNPQVBCaW5kaW5nIHNvYXBCID0gV1NETFZhbGlkYXRvckltcGwuZ2V0U29hcEJpbmRpbmcoYmluZGluZyk7Ci0gICAgaWYgKHNvYXBCID09IG51bGwpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbExpc3QpOwotICAgIH0KLSAgICBTdHJpbmcgc3R5bGVCID0KLSAgICAgIChzb2FwQi5nZXRTdHlsZSgpID09IG51bGwKLSAgICAgICAgPyBXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JJTkRfU1RZTEVfRE9DCi0gICAgICAgIDogc29hcEIuZ2V0U3R5bGUoKSk7Ci0KLSAgICAvLyBUcnkgdG8gZ2V0IHRoZSBTT0FQIG9wZXJhdGlvbnMKLSAgICBIYXNoTWFwIHNvYXBPcGVyYXRpb25MaXN0ID0gdmFsaWRhdG9yLmdldFNvYXBPcGVyYXRpb25zKGJpbmRpbmcpOwotCi0gICAgaWYgKHNvYXBPcGVyYXRpb25MaXN0LmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gY2hlY2sgdGhhdCB0aGV5IGFsbCBoYXZlIHRoZSBzYW1lIHN0eWxlIGVsZW1lbnQgdmFsdWUKLSAgICAgIFN0cmluZyBzdHlsZSA9IG51bGw7Ci0gICAgICBTdHJpbmcgY2hlY2tTdHlsZTsKLSAgICAgIFNPQVBPcGVyYXRpb24gc29hcE9wZXJhdGlvbjsKLSAgICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gc29hcE9wZXJhdGlvbkxpc3Qua2V5U2V0KCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIHNvYXBPcGVyYXRpb24gPSAoU09BUE9wZXJhdGlvbikgaXRlcmF0b3IubmV4dCgpOwotICAgICAgICBjaGVja1N0eWxlID0gc29hcE9wZXJhdGlvbi5nZXRTdHlsZSgpOwotICAgICAgICBpZiAoY2hlY2tTdHlsZSA9PSBudWxsKQotICAgICAgICAgIGNoZWNrU3R5bGUgPSBzdHlsZUI7Ci0gICAgICAgIGlmIChjaGVja1N0eWxlICE9IG51bGwKLSAgICAgICAgICAmJiAhY2hlY2tTdHlsZS5lcXVhbHMoV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQykKLSAgICAgICAgICAmJiAhY2hlY2tTdHlsZS5lcXVhbHMoV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX1JQQykpCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgICBmYWlsdXJlRGV0YWlsTGlzdC5hZGQoCi0gICAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgICAiT3BlcmF0aW9uIE5hbWU6ICIKLSAgICAgICAgICAgICAgICArIHNvYXBPcGVyYXRpb25MaXN0LmdldChzb2FwT3BlcmF0aW9uKQotICAgICAgICAgICAgICAgICsgIlxuU09BUCBPcGVyYXRpb246ICIKLSAgICAgICAgICAgICAgICArIHNvYXBPcGVyYXRpb24udG9TdHJpbmcoKSwKLSAgICAgICAgICAgICAgZW50cnlDb250ZXh0LAotICAgICAgICAgICAgICBzb2FwT3BlcmF0aW9uKSk7Ci0gICAgICAgICAgLy8gUkVNT1ZFOiBOZWVkIHRvIHByb2Nlc3MgYWxsIG9wZXJhdGlvbnMKLSAgICAgICAgICAvL2JyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHN0eWxlID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBzdHlsZSA9IGNoZWNrU3R5bGU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoIXN0eWxlLmVxdWFscyhjaGVja1N0eWxlKSB8fCAhc3R5bGUuZXF1YWxzKHN0eWxlQikpCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgICBmYWlsdXJlRGV0YWlsTGlzdC5hZGQoCi0gICAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgICAiT3BlcmF0aW9uIE5hbWU6ICIKLSAgICAgICAgICAgICAgICArIHNvYXBPcGVyYXRpb25MaXN0LmdldChzb2FwT3BlcmF0aW9uKQotICAgICAgICAgICAgICAgICsgIlxuU09BUCBPcGVyYXRpb246ICIKLSAgICAgICAgICAgICAgICArIHNvYXBPcGVyYXRpb24udG9TdHJpbmcoKSwKLSAgICAgICAgICAgICAgZW50cnlDb250ZXh0LAotICAgICAgICAgICAgICBzb2FwT3BlcmF0aW9uKSk7Ci0gICAgICAgICAgLy8gUkVNT1ZFOiBOZWVkIHRvIHByb2Nlc3MgYWxsIG9wZXJhdGlvbnMKLSAgICAgICAgICAvL2JyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmIChzdHlsZSA9PSBudWxsKQotICAgICAgewotICAgICAgICAvLyBubyBzdHlsZSBhdHRyaWJ1dGUgd2FzIGZvdW5kIGluIHRoZSBTT0FQIG9wZXJhdGlvbihzKSBvZiB0aGUgYmluZGluZy4KLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWxMaXN0KTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMTguamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMTguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQ0NjdjZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMDE4LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5VdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiBCUDIwMTguIAotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIFdlYiBzZXJ2aWNlIGRlZmluaXRpb248L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIHdzZGw6dHlwZXMgZWxlbWVudCBvY2N1cnMgZWl0aGVyIGFzIHRoZSBmaXJzdCBjaGlsZCBpbiB0aGUgV1NETCBuYW1lc3BhY2Ugb2YgdGhlIHdzZGw6ZGVmaW5pdGlvbnMgZWxlbWVudCBpZiBubyB3c2RsOmRvY3VtZW50YXRpb24gb3Igd3NkbDppbXBvcnQgZWxlbWVudCBpcyBwcmVzZW50OyBvciBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIHdzZGw6ZG9jdW1lbnRhdGlvbiBlbGVtZW50KHMpIGlmIHRoZXkgYXJlIHByZXNlbnQgYnV0IHdzZGw6aW1wb3J0KHMpIGFyZSBub3QsIG9yIGltbWVkaWF0ZWx5IGZvbGxvd2luZyBib3RoIHRoZSB3c2RsOmRvY3VtZW50YXRpb24gYW5kIHdzZGw6aW1wb3J0IGVsZW1lbihzKSBpZiBwcmVzZW50LjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDIwMTggZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIGltcGxlbWVudHMgV1NJVGFnCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDIwMTgoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qCi0gICAqIEBwYXJhbSBlbCAtIHhtbCBlbGVtZW50Ci0gICAqIEByZXR1cm4gaWYgZWxlbWVudCBpcyBleHRlbnNpYmlsaXR5IGVsZW1lbnQgcmV0dXJucyB0cnVlLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGlzRXh0ZW5zaWJpbGl0eUVsZW1lbnQoRWxlbWVudCBlbCkKLSAgewotICAgIGJvb2xlYW4gaXNFeCA9IHRydWU7Ci0gICAgaXNFeCA9IGlzRXggJiYgIVhNTFV0aWxzLmVxdWFscyhlbCwgV1NETF9CSU5ESU5HKTsKLSAgICBpc0V4ID0gaXNFeCAmJiAhWE1MVXRpbHMuZXF1YWxzKGVsLCBXU0RMX0RFRklOSVRJT05TKTsKLSAgICBpc0V4ID0gaXNFeCAmJiAhWE1MVXRpbHMuZXF1YWxzKGVsLCBXU0RMX0RPQ1VNRU5UQVRJT04pOwotICAgIGlzRXggPSBpc0V4ICYmICFYTUxVdGlscy5lcXVhbHMoZWwsIFdTRExfRkFVTFQpOwotICAgIGlzRXggPSBpc0V4ICYmICFYTUxVdGlscy5lcXVhbHMoZWwsIFdTRExfSU1QT1JUKTsKLSAgICBpc0V4ID0gaXNFeCAmJiAhWE1MVXRpbHMuZXF1YWxzKGVsLCBXU0RMX0lOUFVUKTsKLSAgICBpc0V4ID0gaXNFeCAmJiAhWE1MVXRpbHMuZXF1YWxzKGVsLCBXU0RMX01FU1NBR0UpOwotICAgIGlzRXggPSBpc0V4ICYmICFYTUxVdGlscy5lcXVhbHMoZWwsIFdTRExfT1BFUkFUSU9OKTsKLSAgICBpc0V4ID0gaXNFeCAmJiAhWE1MVXRpbHMuZXF1YWxzKGVsLCBXU0RMX09VVFBVVCk7Ci0gICAgaXNFeCA9IGlzRXggJiYgIVhNTFV0aWxzLmVxdWFscyhlbCwgV1NETF9QQVJUKTsKLSAgICBpc0V4ID0gaXNFeCAmJiAhWE1MVXRpbHMuZXF1YWxzKGVsLCBXU0RMX1BPUlQpOwotICAgIGlzRXggPSBpc0V4ICYmICFYTUxVdGlscy5lcXVhbHMoZWwsIFdTRExfUE9SVFRZUEUpOwotICAgIGlzRXggPSBpc0V4ICYmICFYTUxVdGlscy5lcXVhbHMoZWwsIFdTRExfU0VSVklDRSk7Ci0gICAgaXNFeCA9IGlzRXggJiYgIVhNTFV0aWxzLmVxdWFscyhlbCwgV1NETF9UWVBFUyk7Ci0KLSAgICByZXR1cm4gaXNFeDsKLSAgfQotCi0gIC8qKgotICAgKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICAvLyBHZXQgdGhlIGxvY2F0aW9uIG9mIHRoZSBXU0RMIGRvY3VtZW50Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0KLSAgICAgIChEZWZpbml0aW9uKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIFBhcnNlIHRoZSBXU0RMIGRvY3VtZW50IGFzIGFuIFhNTCBmaWxlCi0gICAgICBEb2N1bWVudCBkb2MgPQotICAgICAgICB2YWxpZGF0b3IucGFyc2VYTUxEb2N1bWVudFVSTChkZWZpbml0aW9uLmdldERvY3VtZW50QmFzZVVSSSgpLCBudWxsKTsKLQotICAgICAgRWxlbWVudCByb290ID0gZG9jLmdldERvY3VtZW50RWxlbWVudCgpOyAvLyBnZXQgZGVmaW5pdGlvbgotCi0gICAgICBFbGVtZW50IHR5cGVzID0gWE1MVXRpbHMuZmluZENoaWxkRWxlbWVudCgoRWxlbWVudCkgcm9vdCwgV1NETF9UWVBFUyk7Ci0KLSAgICAgIGlmICh0eXBlcyAhPSBudWxsKQotICAgICAgewotICAgICAgICBFbGVtZW50IGVsID0gWE1MVXRpbHMuZmluZFByZXZpb3VzU2libGluZyh0eXBlcyk7Ci0gICAgICAgIHdoaWxlIChlbCAhPSBudWxsKQotCQl7Ci0gICAgICAgICAgaWYgKCFpc0V4dGVuc2liaWxpdHlFbGVtZW50KGVsKSAmJgotCQkJICAgKCghWE1MVXRpbHMuZXF1YWxzKGVsLCBXU0RMX0lNUE9SVCkpICYmCi0JCQkgICAgKCFYTUxVdGlscy5lcXVhbHMoZWwsIFdTRExfRE9DVU1FTlRBVElPTikpKSkKLQkJICB7Ci0JCSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLQkJCVN0cmluZyBtZXNzYWdlID0gIlRoZSAiICsgZWwuZ2V0TG9jYWxOYW1lKCkgKyAiIGVsZW1lbnQgbXVzdCBub3QgcHJlY2VkZSB0aGUgdHlwZXMgZWxlbWVudC4iOwotCQkgICAgZmFpbHVyZURldGFpbCA9IHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwobWVzc2FnZSwgZW50cnlDb250ZXh0KTsKLSAgCQkgICAgYnJlYWs7Ci0JCSAgfQotICAgICAgICAgIGVsID0gWE1MVXRpbHMuZmluZFByZXZpb3VzU2libGluZyhlbCk7Ci0JCX0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPQotICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBwcm9jZXNzaW5nIHRoZSBkb2N1bWVudCBhdCAiCi0gICAgICAgICAgICArIGRlZmluaXRpb24uZ2V0RG9jdW1lbnRCYXNlVVJJKCkKLSAgICAgICAgICAgICsgIi5cblxuIgotICAgICAgICAgICAgKyBVdGlscy5nZXRFeGNlcHRpb25EZXRhaWxzKHQpLAotICAgICAgICAgIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMTkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMTkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE2NzBiZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMDE5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZzsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5VdGlsczsKLQotCi0vKioKLSAqIEJQMjAxOS4KLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmJpbmRpbmcgZWxlbWVudCwgaWYgdGhlIGNvbnRhaW5lZCBzb2FwOmJpbmRpbmcgZWxlbWVudCBoYXMgYSAic3R5bGUiIGF0dHJpYnV0ZSBlcXVhbCB0byAiZG9jdW1lbnQiIGFuZCBzb2FwOm9wZXJhdGlvbnMgaGF2ZSAidXNlIiBhdHRyaWJ1dGUgZXF1YWwgdG8gImxpdGVyYWwiOjwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgIm5hbWVzcGFjZSIgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQgaW4gYW55IGNvbnRhaW5lZCBzb2FwYmluZDpib2R5LCBzb2FwYmluZDpoZWFkZXIsIHNvYXBiaW5kOjpoZWFkZXJmYXVsdCwgc29hcGJpbmQ6ZmF1bHQgZWxlbWVudHMgPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqIEB2ZXJzaW9uIDEuMC4xIDI3LjA2LjIwMDMKLSAqIEBhdXRob3IgVml0YWxpIEZlZG9zZW5rbwotICovCi1wdWJsaWMgY2xhc3MgQlAyMDE5IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMDE5KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgYm9vbGVhbiBkb2NMaXRGb3VuZCA9IGZhbHNlOwotICAgIFN0cmluZyBlcnJhbnRFbGVtZW50cyA9IG5ldyBTdHJpbmcoIiIpOwotICAgIC8vIEdldCB0aGUgYmluZGluZyBmcm9tIHRoZSBlbnRyeSBjb250ZXh0Ci0gICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0KLSAgICAvLyBUcnkgdG8gZ2V0IHRoZSBTT0FQIGJpbmRpbmcKLSAgICBTT0FQQmluZGluZyBzb2FwQmluZGluZyA9IFdTRExWYWxpZGF0b3JJbXBsLmdldFNvYXBCaW5kaW5nKGJpbmRpbmcpOwotCi0gICAgaWYgKHNvYXBCaW5kaW5nICE9IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nIHN0eWxlID0KLSAgICAgICAgKHNvYXBCaW5kaW5nLmdldFN0eWxlKCkgPT0gbnVsbCkKLSAgICAgICAgICA/IFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9ET0MKLSAgICAgICAgICA6IHNvYXBCaW5kaW5nLmdldFN0eWxlKCk7Ci0gICAgICBpZiAoc3R5bGUuZXF1YWxzKFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9ET0MpKQotICAgICAgewotICAgICAgICBWZWN0b3Igc29hcEVsZW1lbnRzID0gVXRpbHMuYXJyYXlUb1ZlY3Rvcih0aGlzLnZhbGlkYXRvci5nZXRTb2FwQm9kaWVzKGJpbmRpbmcpKTsKLSAgICAgICAgc29hcEVsZW1lbnRzLmFkZEFsbChVdGlscy5hcnJheVRvVmVjdG9yKHRoaXMudmFsaWRhdG9yLmdldFNvYXBGYXVsdHMoYmluZGluZykpKTsKLSAgICAgICAgc29hcEVsZW1lbnRzLmFkZEFsbChVdGlscy5hcnJheVRvVmVjdG9yKHRoaXMudmFsaWRhdG9yLmdldFNvYXBIZWFkZXJzKGJpbmRpbmcpKSk7Ci0gICAgICAgIHNvYXBFbGVtZW50cy5hZGRBbGwoCi0gICAgICAgICAgVXRpbHMuYXJyYXlUb1ZlY3Rvcih0aGlzLnZhbGlkYXRvci5nZXRTb2FwSGVhZGVyRmF1bHRzKGJpbmRpbmcpKSk7Ci0KLSAgICAgICAgSXRlcmF0b3IgaSA9IHNvYXBFbGVtZW50cy5pdGVyYXRvcigpOwotICAgICAgICB3aGlsZSAoaS5oYXNOZXh0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBzb2FwRWxlbWVudCA9Ci0gICAgICAgICAgICAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIChpLm5leHQoKSk7Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKHRoaXMudmFsaWRhdG9yLmlzTGl0ZXJhbChzb2FwRWxlbWVudCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGRvY0xpdEZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgaWYgKHRoaXMudmFsaWRhdG9yLm5hbWVzcGFjZUZvdW5kSW5Tb2FwTGl0ZXJhbChzb2FwRWxlbWVudCkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBlcnJhbnRFbGVtZW50cyArPSAiXG4tLS0gIiArIChzb2FwRWxlbWVudC50b1N0cmluZygpKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgICAgewotICAgICAgICAgIH0gLy8gY29udGludWUgd2l0aCBjbGVuY2hlZCB0ZWV0aAotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFkb2NMaXRGb3VuZCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gSWYgYSBuYW1lc3BhY2Ugd2FzIG5vdCBmb3VuZCB0aGVuIHRlc3QgYXNzZXJ0aW9uIHBhc3NlZAotICAgICAgaWYgKGVycmFudEVsZW1lbnRzLmxlbmd0aCgpICE9IDApCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgIkZhaWxpbmcgZWxlbWVudHM6IiArIGVycmFudEVsZW1lbnRzLAotICAgICAgICAgICAgZW50cnlDb250ZXh0KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMDIwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMDIwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyOGJmOTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAyMC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHk7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy51dGlsLlVSSTsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy51dGlsLlVSSS5NYWxmb3JtZWRVUklFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotCi0KLS8qKgotKiBCUDIwMjAuCi0qICAgIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmJpbmRpbmcgZWxlbWVudCwgaWYgdGhlIHN0eWxlIGF0dHJpYnV0ZSBvZiB0aGUgY29udGFpbmVkIHNvYXBiaW5kOmJpbmRpbmcgaXMgInJwYyIgCi0qICAgICAgIGFuZCB0aGUgdXNlIGF0dHJpYnV0ZSBpcyAibGl0ZXJhbCIuPC9jb250ZXh0PgotKiAgICA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIG5hbWVzcGFjZSBhdHRyaWJ1dGUgaXMgc3BlY2lmaWVkIG9uIGFsbCBzb2FwYmluZDpib2R5IGVsZW1lbnRzIGFuZCB0aGUgdmFsdWUgb2YgdGhlIAotKiBuYW1lc3BhY2UgYXR0cmlidXRlIGlzIGFuIGFic29sdXRlIFVSSS4gPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSogQHZlcnNpb24gMS4wLjEgMjcuMDYuMjAwMwotKiBAYXV0aG9yIFZpdGFsaSBGZWRvc2Vua28KLSoqLwotcHVibGljIGNsYXNzIEJQMjAyMCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjAyMChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICBib29sZWFuIHJwY0xpdEZvdW5kID0gZmFsc2U7Ci0KLSAgICAvLyBHZXQgdGhlIGJpbmRpbmcgZnJvbSB0aGUgZW50cnkgY29udGV4dAotICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgLy8gVHJ5IHRvIGdldCB0aGUgU09BUCBiaW5kaW5nCi0gICAgU09BUEJpbmRpbmcgc29hcEJpbmRpbmcgPSBXU0RMVmFsaWRhdG9ySW1wbC5nZXRTb2FwQmluZGluZyhiaW5kaW5nKTsKLQotICAgIC8vIFRlc3QgdGhlIGFzc2VydGlvbiAKLSAgICAvLyBDaGVjayBzdHlsZSB0byBtYWtlIHN1cmUgdGhhdCBpdCBpcyBycGMgLSB0aGUgc3ViamVjdCBvZiB0aGUgYXNzZXJ0aW9uCi0gICAgU3RyaW5nIHN0eWxlID0gV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQzsKLSAgICBpZiAoc29hcEJpbmRpbmcgIT0gbnVsbCkKLSAgICAgIHN0eWxlID0KLSAgICAgICAgKHNvYXBCaW5kaW5nLmdldFN0eWxlKCkgPT0gbnVsbAotICAgICAgICAgID8gV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQwotICAgICAgICAgIDogc29hcEJpbmRpbmcuZ2V0U3R5bGUoKSk7Ci0KLSAgICBpZiAoKHNvYXBCaW5kaW5nICE9IG51bGwpCi0gICAgICAmJiAoc3R5bGUuZXF1YWxzKFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9SUEMpKSkKLSAgICB7Ci0gICAgICAvLyBHZXQgdGhlIGxpc3Qgb2YgU09BUCBib2R5IGVsZW1lbnRzCi0gICAgICBTT0FQQm9keVtdIHNvYXBCb2RpZXMgPSB0aGlzLnZhbGlkYXRvci5nZXRTb2FwQm9kaWVzKGJpbmRpbmcpOwotCi0gICAgICAvLyBDaGVjayBmb3IgU29hcCBvcGVyYXRpb24gbmFtZXNwYWNlCi0gICAgICBib29sZWFuIGFzc2VydGlvbkZhaWx1cmUgPSBmYWxzZTsKLSAgICAgIFN0cmluZyBuYW1lc3BhY2VVUkkgPSBudWxsOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzb2FwQm9kaWVzLmxlbmd0aCAmJiAhKGFzc2VydGlvbkZhaWx1cmUpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIFNPQVBCb2R5IHNvYXBCb2R5ID0gc29hcEJvZGllc1tpXTsKLSAgICAgICAgLy8gQWRkZWQgY2hlY2sgZm9yIG51bGwgdXNlIHZhbHVlLCBzaW5jZSB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBsaXRlcmFsCi0gICAgICAgIGlmIChzb2FwQm9keS5nZXRVc2UoKSA9PSBudWxsCi0gICAgICAgICAgfHwgc29hcEJvZHkuZ2V0VXNlKCkuZXF1YWxzKFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQk9EWV9VU0VfTElUKSkKLSAgICAgICAgewotICAgICAgICAgIHJwY0xpdEZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBuYW1lc3BhY2UsIHRoZW4gZmxhZyBhcyBhIGZhaWx1cmUKLSAgICAgICAgICBpZiAoKG5hbWVzcGFjZVVSSSA9IHNvYXBCb2R5LmdldE5hbWVzcGFjZVVSSSgpKSA9PSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGFzc2VydGlvbkZhaWx1cmUgPSB0cnVlOwotICAgICAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgICAgICAgIi0tLSBTT0FQIEJPRFk6XG4iCi0gICAgICAgICAgICAgICAgICArIHNvYXBCb2R5LnRvU3RyaW5nKCkKLSAgICAgICAgICAgICAgICAgICsgIlxuLS0tIEJJTkRJTkcgUU5BTUU6XG4iCi0gICAgICAgICAgICAgICAgICArIGJpbmRpbmcuZ2V0UU5hbWUoKSwKLSAgICAgICAgICAgICAgICBlbnRyeUNvbnRleHQpOwotICAgICAgICAgIH0KLQotICAgICAgICAgIC8vIEVsc2UsIHZlcmlmeSB0aGF0IHRoZSBuYW1lc3BhY2UgaXMgYW4gYWJzb2x1dGUgVVJJCi0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvL1VSTCB1cmwgPSBuZXcgVVJMKG5hbWVzcGFjZVVSSSk7Ci0gICAgICAgICAgICAgIFVSSSB1cmkgPSBuZXcgVVJJKG5hbWVzcGFjZVVSSSk7Ci0gICAgICAgICAgICAgIGlmICh1cmkuZ2V0U2NoZW1lKCkgPT0gbnVsbCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIG5vIHNjaGVtZSBpbXBsaWVzIG5vdCBhbiBhYnNvbHV0ZSBVUkkKLSAgICAgICAgICAgICAgICBhc3NlcnRpb25GYWlsdXJlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgICAgICAgICAgICItLS0gU09BUCBCT0RZOlxuIgotICAgICAgICAgICAgICAgICAgICAgICsgc29hcEJvZHkudG9TdHJpbmcoKQotICAgICAgICAgICAgICAgICAgICAgICsgIlxuLS0tIEJJTkRJTkcgUU5BTUU6XG4iCi0gICAgICAgICAgICAgICAgICAgICAgKyBiaW5kaW5nLmdldFFOYW1lKCksCi0gICAgICAgICAgICAgICAgICAgIGVudHJ5Q29udGV4dCk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChNYWxmb3JtZWRVUklFeGNlcHRpb24gbXVlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBhc3NlcnRpb25GYWlsdXJlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgICAgICAgICAgICItLS0gU09BUCBCT0RZOlxuIgotICAgICAgICAgICAgICAgICAgICArIHNvYXBCb2R5LnRvU3RyaW5nKCkKLSAgICAgICAgICAgICAgICAgICAgKyAiXG4tLS0gQklORElORyBRTkFNRTpcbiIKLSAgICAgICAgICAgICAgICAgICAgKyBiaW5kaW5nLmdldFFOYW1lKCksCi0gICAgICAgICAgICAgICAgICBlbnRyeUNvbnRleHQpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAoIXJwY0xpdEZvdW5kKQotICAgICAgewotICAgICAgICAvLyBzdHlsZSBpcyBycGMgYnV0IG5vIGRvY3VtZW50IHVzZSBlbGVtZW50cwotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgICBmYWlsdXJlRGV0YWlsID0gbnVsbDsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKCFhc3NlcnRpb25GYWlsdXJlKQotICAgICAgeyAvLyBJZiBubyBhc3NlcnRpb24gZmFpbHVyZSwgdGhlbiBzZXQgcmVzdWx0IHRvIHBhc3NlZAotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICAgICAgZmFpbHVyZURldGFpbCA9IG51bGw7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBzdHlsZSBpcyBub3QgcnBjCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgZmFpbHVyZURldGFpbCA9IG51bGw7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAyMS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAyMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDUwODZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMjEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXI7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotCi0KLS8qKgotKiAgQlAyMDIxLgotKiAgICAgPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZyBlbGVtZW50PC9jb250ZXh0PgotKiAgICAgPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSB3c2RsOmlucHV0IGVsZW1lbnQgYW5kIHdzZGw6b3V0cHV0IGVsZW1lbnQgb2YgZWFjaCBvcGVyYXRpb24gdXNlcyB0aGUgYXR0cmlidXRlIG5hbWUgInBhcnQiIHdpdGggYSBTY2hlbWEgdHlwZSBvZiAiTk1UT0tFTiIgYW5kIGRvZXMgbm90IHVzZSAicGFydHMiLCBmb3IgYm90aCBzb2FwYmluZDpoZWFkZXIgZWxlbWVudHMgYW5kIHNvYXBiaW5kOmhlYWRlcmZhdWx0IGVsZW1lbnRzLiA8L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotKgotKiBAdmVyc2lvbiAxLjAuMSAyNy4wNi4yMDAzCi0qIEBhdXRob3IgVml0YWxpIEZlZG9zZW5rbwotKiovCi1wdWJsaWMgY2xhc3MgQlAyMDIxIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMDIxKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vT3BlcmF0aW9uIG9wZXJhdGlvbiA9IG51bGw7Ci0KLSAgICAvLyBHZXQgdGhlIGJpbmRpbmcgZnJvbSB0aGUgZW50cnkgY29udGV4dAotICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgLy8gR2V0IFNPQVAgaGVhZGVycyBmb3IgdGhpcyBiaW5kaW5nCi0gICAgU09BUEhlYWRlcltdIHNvYXBIZWFkZXJzID0gdGhpcy52YWxpZGF0b3IuZ2V0U29hcEhlYWRlcnMoYmluZGluZyk7Ci0KLSAgICBpZiAoc29hcEhlYWRlcnMubGVuZ3RoID09IDApCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIENoZWNrIGVhY2ggaGVhZGVyIHRvIHNlZSBpZiBpdCBoYXMgcGFydCBlbGVtZW50IHdpdGggTk1UT0tFTiB0eXBlCi0gICAgICBmb3IgKGludCBoZWFkZXIgPSAwOwotICAgICAgICBoZWFkZXIgPCBzb2FwSGVhZGVycy5sZW5ndGgKLSAgICAgICAgICAmJiByZXN1bHQuZXF1YWxzKEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEKTsKLSAgICAgICAgaGVhZGVyKyspCi0gICAgICB7Ci0gICAgICAgIGlmICgoc29hcEhlYWRlcnNbaGVhZGVyXS5nZXRQYXJ0KCkgPT0gbnVsbCkKLSAgICAgICAgICB8fCAoIVhNTFV0aWxzLmlzTm10b2tlbihzb2FwSGVhZGVyc1toZWFkZXJdLmdldFBhcnQoKSkpKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKHNvYXBIZWFkZXJzW2hlYWRlcl0udG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICAgICAgfQotICAgICAgICAvLyBFbHNlLCBjaGVjayB0aGUgaGVhZGVyZmF1bHQgaWYgdGhlcmUgaXMgb25lCi0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIExpc3Qgc29hcEhlYWRlckZhdWx0TGlzdCA9Ci0gICAgICAgICAgICBzb2FwSGVhZGVyc1toZWFkZXJdLmdldFNPQVBIZWFkZXJGYXVsdHMoKTsKLSAgICAgICAgICBJdGVyYXRvciBpdGVyYXRvciA9IHNvYXBIZWFkZXJGYXVsdExpc3QuaXRlcmF0b3IoKTsKLQotICAgICAgICAgIC8vIENoZWNrIGVhY2ggaGVhZGVyIGZhdWx0IHRvIHNlZSBpZiBpdCBoYXMgcGFydCBlbGVtZW50IHdpdGggTk1UT0tFTiB0eXBlCi0gICAgICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKQotICAgICAgICAgICAgJiYgcmVzdWx0LmVxdWFscyhBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgU09BUEhlYWRlckZhdWx0IHNvYXBIZWFkZXJGYXVsdCA9Ci0gICAgICAgICAgICAgIChTT0FQSGVhZGVyRmF1bHQpIGl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgICAgIGlmICgoc29hcEhlYWRlckZhdWx0LmdldFBhcnQoKSA9PSBudWxsKQotICAgICAgICAgICAgICB8fCAoIVhNTFV0aWxzLmlzTm10b2tlbihzb2FwSGVhZGVyRmF1bHQuZ2V0UGFydCgpKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICAgICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKHNvYXBIZWFkZXJGYXVsdC50b1N0cmluZygpLCBlbnRyeUNvbnRleHQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMjIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMjIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE0NWQ3Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMDIyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLQotLyoqCi0gICogQlAyMDIyLgotICAqICAgIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmJpbmRpbmcgZWxlbWVudDwvY29udGV4dD4KLSAgKiAgPGFzc2VydGlvbkRlc2NyaXB0aW9uPnRoZSBuYW1lIGF0dHJpYnV0ZSBpcyBzcGVjaWZpZWQgb24gdGhlIHNvYXBiaW5kOmZhdWx0IGVsZW1lbnQuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSoqLwotcHVibGljIGNsYXNzIEJQMjAyMiBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjAyMihXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBHZXQgdGhlIGJpbmRpbmcgZnJvbSB0aGUgZW50cnkgY29udGV4dAotICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgLy8gR2V0IGxpc3Qgb2YgU09BUCBmYXVsdHMgZm9yIHRoZSBiaW5kaW5nCi0gICAgU09BUEZhdWx0W10gc29hcEZhdWx0cyA9IHRoaXMudmFsaWRhdG9yLmdldFNvYXBGYXVsdHMoYmluZGluZyk7Ci0KLSAgICBpZiAoc29hcEZhdWx0cyA9PSBudWxsIHx8IHNvYXBGYXVsdHMubGVuZ3RoID09IDApCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gY2hlY2sgYWxsIHNvYXA6ZmF1bHRzLiAKLSAgICAgIC8vIE1VU1QgaGF2ZSBhIG5hbWUgYXR0cmlidXRlCi0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNvYXBGYXVsdHMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIFNPQVBGYXVsdCBzb2FwRmF1bHQgPSBzb2FwRmF1bHRzW2ldOwotICAgICAgICBpZiAoc29hcEZhdWx0LmdldE5hbWUoKSA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgICAic29hcGJpbmQ6ZmF1bHQgZWxlbWVudCA6ICIgKyBzb2FwRmF1bHQudG9TdHJpbmcoKSwKLSAgICAgICAgICAgICAgZW50cnlDb250ZXh0KTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMjMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMjMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjAzNjBhZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMDIzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLQotCi0vKioKLSAqIEJQMjAyMy4KLSAqICAgPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZyBlbGVtZW50LCB3aXRoIHRoZSAidXNlIiBhdHRyaWJ1dGUgcHJlc2VudCBvbiB0aGUgc29hcGJpbmQ6ZmF1bHQgZWxlbWVudDwvY29udGV4dD4KLSAqICAgPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlIGlzICJsaXRlcmFsIi48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAyMDIzIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMDIzKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEdldCB0aGUgYmluZGluZyBmcm9tIHRoZSBlbnRyeSBjb250ZXh0Ci0gICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0KLSAgICAvLyBHZXQgbGlzdCBvZiBTT0FQIGZhdWx0cyBmb3IgdGhlIGJpbmRpbmcKLSAgICBTT0FQRmF1bHRbXSBzb2FwRmF1bHRzID0gdGhpcy52YWxpZGF0b3IuZ2V0U29hcEZhdWx0cyhiaW5kaW5nKTsKLQotICAgIGlmIChzb2FwRmF1bHRzID09IG51bGwgfHwgc29hcEZhdWx0cy5sZW5ndGggPT0gMCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBjaGVjayBhbGwgc29hcDpmYXVsdHMuIAotICAgICAgLy8gTVVTVCBoYXZlIGEgbmFtZSBhdHRyaWJ1dGUsIGFuZCBpZiBhIHVzZSBhdHRyaWJ1dGUgaXMgc3BlY2lmaWVkLCBpdCBNVVNUIGJlIHZhbHVlICJsaXRlcmFsIgotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzb2FwRmF1bHRzLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICBTT0FQRmF1bHQgc29hcEZhdWx0ID0gc29hcEZhdWx0c1tpXTsKLSAgICAgICAgaWYgKChzb2FwRmF1bHQuZ2V0VXNlKCkgIT0gbnVsbCkKLSAgICAgICAgICAmJiAoIXNvYXBGYXVsdAotICAgICAgICAgICAgLmdldFVzZSgpCi0gICAgICAgICAgICAuZXF1YWxzKFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQk9EWV9VU0VfTElUKSkpCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLQotICAgICAgICAgIGZhaWx1cmVEZXRhaWwgPQotICAgICAgICAgICAgdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChzb2FwRmF1bHQudG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMzIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMzIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZkOTZkYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMDMyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0ZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLQotLyoqCi0gKiBCUDIwMzIuCi0gKiAgIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmJpbmRpbmcgZWxlbWVudDwvY29udGV4dD4KLSAqICAgPGFzc2VydGlvbkRlc2NyaXB0aW9uPnRoZSBuYW1lIGF0dHJpYnV0ZSB0aGF0IGlzIHNwZWNpZmllZCBvbiB0aGUgc29hcGJpbmQ6ZmF1bHQgZWxlbWVudCBtYXRjaGVzIHRoZSB2YWx1ZSBzcGVjaWZpZWQgb24gdGhlIHBhcmVudCBlbGVtZW50IHdzZGw6ZmF1bHQuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEJQMjAzMiBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjAzMihXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBHZXQgdGhlIGJpbmRpbmcgZnJvbSB0aGUgZW50cnkgY29udGV4dAotICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgLy8gR2V0IGxpc3Qgb2YgQmluZGluZyBmYXVsdHMgZm9yIHRoZSBiaW5kaW5nCi0gICAgQmluZGluZ0ZhdWx0W10gYmluZGluZ0ZhdWx0cyA9IHRoaXMudmFsaWRhdG9yLmdldEFsbEJpbmRpbmdGYXVsdHMoYmluZGluZyk7Ci0KLSAgICBpZiAoYmluZGluZ0ZhdWx0cyA9PSBudWxsIHx8IGJpbmRpbmdGYXVsdHMubGVuZ3RoID09IDApCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0gICAgfQotCi0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIGZvciBlYWNoIGJpbmRpbmcgZmF1bHQsIGNvbXBhcmUgdGhlIGNoaWxkIHNvYXA6ZmF1bHQgbmFtZSB3aXRoIHRoZSBiaW5kaW5nIGZhdWx0IG5hbWUgCi0KLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYmluZGluZ0ZhdWx0cy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgQmluZGluZ0ZhdWx0IGJpbmRpbmdGYXVsdCA9IGJpbmRpbmdGYXVsdHNbaV07Ci0gICAgICAgIFNPQVBGYXVsdCBzb2FwRmF1bHQgPSB0aGlzLnZhbGlkYXRvci5nZXRTb2FwRmF1bHQoYmluZGluZ0ZhdWx0KTsKLSAgICAgICAgaWYgKHNvYXBGYXVsdCA9PSBudWxsCi0gICAgICAgICAgfHwgc29hcEZhdWx0LmdldE5hbWUoKSA9PSBudWxsCi0gICAgICAgICAgfHwgYmluZGluZ0ZhdWx0LmdldE5hbWUoKSA9PSBudWxsCi0gICAgICAgICAgfHwgIWJpbmRpbmdGYXVsdC5nZXROYW1lKCkuZXF1YWxzKHNvYXBGYXVsdC5nZXROYW1lKCkpKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0KLSAgICAgICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgICAgIHNvYXBGYXVsdCA9PSBudWxsID8gbnVsbCA6IHNvYXBGYXVsdC50b1N0cmluZygpLCBlbnRyeUNvbnRleHQpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAzNC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjAzNC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOGU2MWU4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwMzQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLlR5cGVzOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLS8qKgotICogQlAyMDM0Ci0gKgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIGRlc2NyaXB0aW9uIHdpdGhpbiBhIFdTREwgZG9jdW1lbnQ8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIGNhbmRpZGF0ZSBkZXNjcmlwdGlvbiBkb2VzIG5vdCBjb250YWluIHRoZSBuYW1lc3BhY2UgZGVjbGFyYXRpb24geG1sbnM6eG1sPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+IAotICovCi1wdWJsaWMgY2xhc3MgQlAyMDM0IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMDM0KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEdldHRpbmcgd3NkbDpkZWZpbml0aW9uIGVsZW1lbnQKLSAgICBEZWZpbml0aW9uIGRlZiA9IChEZWZpbml0aW9uKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotICAgIFR5cGVzIHR5cGVzOwotICAgIC8vIEdldHRpbmcgdGhlIG5hbWVzcGFjZSBkZWNsYXJhdGlvbiB4bWxuczp4bWwKLSAgICBTdHJpbmcgeG1sTnMgPSAoU3RyaW5nKSBkZWYuZ2V0TmFtZXNwYWNlcygpLmdldCgieG1sIik7Ci0gICAgLy8gSWYgaXQgZXhpc3RzIGFuZCBlcXVhbHMgdG8gImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIKLSAgICBpZiAoeG1sTnMgIT0gbnVsbCAmJiB4bWxOcy5lcXVhbHMoV1NJQ29uc3RhbnRzLk5TX1VSSV9YTUwpKQotICAgIHsKLSAgICAgIC8vIHNldHRpbmcgYXNzZXJ0aW9uIHJlc3VsdCB0byB3YXJuaW5nCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1dBUk5JTkc7Ci0gICAgfQotICAgIC8vIHRoZXJlIGlzIG5vIG5hbWVzcGFjZSBkZWNsYXJhdGlvbiB4bWxuczp4bWwgaW4gdGhlIHdzZGw6ZGVmaW5pdGlvbgotICAgIC8vIGVsZW1lbnQsIGNoZWNraW5nIHdoZXRoZXIgdGhlIGRlZmluaXRpb24gaGFzIHdzZGw6dHlwZSBlbGVtZW50Ci0gICAgZWxzZSBpZiAoKHR5cGVzID0gZGVmLmdldFR5cGVzKCkpICE9IG51bGwpCi0gICAgewotICAgICAgLy8gR2V0dGluZyB0aGUgbGlzdCBvZiB3c2RsOnNjaGVtYVMKLSAgICAgIExpc3QgZXh0RWxlbXMgPSB0eXBlcy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZXh0RWxlbXMuc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIC8vIEdldHRpbmcgd3NkbDpzY2hlbWEgZWxlbWVudAotICAgICAgICBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQgc2NoZW1hID0KLSAgICAgICAgICAoVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KSBleHRFbGVtcy5nZXQoaSk7Ci0gICAgICAgIC8vIEdldHRpbmcgYSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlIHhtbG5zOnhtbAotICAgICAgICBTdHJpbmcgYXR0clZhbHVlID0gc2NoZW1hLmdldEVsZW1lbnQoKS5nZXRBdHRyaWJ1dGVOUygKLSAgICAgICAgICBXU0lDb25zdGFudHMuTlNfVVJJX1hNTE5TLCAieG1sIik7Ci0gICAgICAgIC8vIElmIGl0IGVxdWFscyB0byAiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwKLSAgICAgICAgaWYgKFdTSUNvbnN0YW50cy5OU19VUklfWE1MLmVxdWFscyhhdHRyVmFsdWUpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gc2V0dGluZyBhc3NlcnRpb24gcmVzdWx0IHRvIHdhcm5pbmcKLSAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1dBUk5JTkc7Ci0gICAgICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKCJUaGUgbmFtZXNwYWNlICIKLSAgICAgICAgICAgICsgImRlY2xhcmF0aW9uIG5lc3RlZCBpbiB3c2RsOnNjaGVtYSBlbGVtZW50LiIsIGVudHJ5Q29udGV4dCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgdGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwOTguamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIwOTguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRiNjUzZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMDk4LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YXgud3NkbC5JbXBvcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRXJyb3JMaXN0OwotCi0KLS8qKgotICogQlAyMDk4LgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6aW1wb3J0IGVsZW1lbnQ8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlICJsb2NhdGlvbiIgYXR0cmlidXRlIGlzIHNwZWNpZmllZCBmb3IgdGhlIHdzZGw6aW1wb3J0IGVsZW1lbnQsIGFuZCBoYXMgYSBub24tZW1wdHkgdmFsdWUuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEJQMjA5OCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjA5OChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JzID0gbmV3IEVycm9yTGlzdCgpOwotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0KLSAgICBJbXBvcnQgaW0gPSAoSW1wb3J0KSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotICAgIC8vIHN1cHBvc2UgdGhhdCBpZiBsb2NhdGlvbiBpcyBpbnZhbGlkLCB0aGUgZGVmaW5pdGlvbiBlcXVhbHMgdG8gbnVsbAotICAgIGlmIChpbS5nZXRMb2NhdGlvblVSSSgpID09IG51bGwgfHwgaW0uZ2V0TG9jYXRpb25VUkkoKSA9PSAiIikKLSAgICAgIGVycm9ycy5hZGQoaW0uZ2V0TmFtZXNwYWNlVVJJKCksIGltLmdldExvY2F0aW9uVVJJKCkpOwotCi0gICAgaWYgKCFlcnJvcnMuaXNFbXB0eSgpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZXJyb3JzLnRvU3RyaW5nKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMDEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMDEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQ1YTc3ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTAxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkltcG9ydDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRXJyb3JMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dDsKLQotCi0vKioKLSAqIEJQMjEwMS4KLSAgICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6ZGVmaW5pdGlvbiwgaWYgaXQgY29udGFpbnMgd3NkbDppbXBvcnQgc3RhdGVtZW50czwvY29udGV4dD4KLSAgICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPkVhY2ggd3NkbDppbXBvcnQgc3RhdGVtZW50IGlzIG9ubHkgdXNlZCB0byBpbXBvcnQgYW5vdGhlciBXU0RMIGRlc2NyaXB0aW9uLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDIxMDEgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzVmlzaXRvciBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMTAxKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwcml2YXRlIEVycm9yTGlzdCBlcnJvcnMgPSBuZXcgRXJyb3JMaXN0KCk7Ci0KLSAgYm9vbGVhbiBpbXBvcnRGb3VuZCA9IGZhbHNlOwotCi0gIC8qIENyZWF0ZSBmYWx1cmUgcmVwb3J0IGlmIGltcG9ydCBjb250YWlucyByZWZlcmVuY2UgdG8gbm9uIFdTREwgZGVzY3JpcHRpb24uIAotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5JbXBvcnQsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChJbXBvcnQgaW0sIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGltcG9ydEZvdW5kID0gdHJ1ZTsKLSAgICB0cnkKLSAgICB7Ci0gICAgLy8gYnkgdGhlIHdheSA6IFdTREw0SiB0aHJvd3MgRXhjZXB0aW9uIGlmIGltcG9ydGVkIFdTREwgaXMgbm90IHJlc29sdmVkCi0gICAgLy8gYnV0IGRvY3VtZW50YXRpb24gc2F5cyB0aGF0IGltLmdldERlZmluaXRpb24oKSB3aWxsIGJlIGVxdWFsIHRvIG51bGwKLSAgICBpZiAoaW0uZ2V0RGVmaW5pdGlvbigpID09IG51bGwpCi0gICAgICBlcnJvcnMuYWRkKAotICAgICAgICBpbS5nZXROYW1lc3BhY2VVUkkoKQotICAgICAgICAgICsgIjoiCi0gICAgICAgICAgKyBpbS5nZXRMb2NhdGlvblVSSSgpCi0gICAgICAgICAgKyAiXG5JbXBvcnQgZWxlbWVudCBkb2VzIG5vdCByZWZlcmVuY2UgYSBXU0RMIGRlZmluaXRpb24uIik7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBlcnJvcnMuYWRkKAotICAgICAgICBpbS5nZXROYW1lc3BhY2VVUkkoKQotICAgICAgICAgICsgIjoiCi0gICAgICAgICAgKyBpbS5nZXRMb2NhdGlvblVSSSgpCi0gICAgICAgICAgKyAiXG5JbXBvcnQgZWxlbWVudCBkb2VzIG5vdCByZWZlcmVuY2UgYSBXU0RMIGRlZmluaXRpb24uIik7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLQotICAgIFdTRExUcmF2ZXJzYWwgdHJhdmVyc2FsID0gbmV3IFdTRExUcmF2ZXJzYWwoKTsKLSAgICAvL1Zpc2l0b3JBZGFwdG9yLmFkYXB0KHRoaXMpOwotICAgIHRyYXZlcnNhbC5zZXRWaXNpdG9yKHRoaXMpOwotICAgIHRyYXZlcnNhbC52aXNpdEltcG9ydCh0cnVlKTsKLSAgICB0cmF2ZXJzYWwuaWdub3JlUmVmZXJlbmNlcygpOwotICAgIHRyYXZlcnNhbC50cmF2ZXJzZSgoRGVmaW5pdGlvbikgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKSk7Ci0KLSAgICBpZiAoIWVycm9ycy5pc0VtcHR5KCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlcnJvcnMudG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICBlbHNlIGlmICghaW1wb3J0Rm91bmQpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0KLSAgICBlbHNlCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTAyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTAyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5NTliNDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjEwMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjEwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuVHlwZXM7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotCi0vKioKLSAqIEJQMjEwMi4KLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOnR5cGVzIGVsZW1lbnQsIHdpdGggWE1MIHNjaGVtYSBpbXBvcnQgZWxlbWVudHM8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+RWFjaCBYTUwgc2NoZW1hIGltcG9ydCBzdGF0ZW1lbnQgKHhzZDppbXBvcnQpIGlzIG9ubHkgdXNlZCB0byBkaXJlY3RseSByZWZlcmVuY2UgYW4gWE1MIHNjaGVtYSBkZWZpbml0aW9uLCB3aGljaCBoYXMgInNjaGVtYSIgZnJvbSBYTUwgbmFtZXNwYWNlICJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgYXMgcm9vdCBlbGVtZW50LiAgSXQgZG9lcyBub3QgY29udGFpbiBhIHJlZmVyZW5jZSB0byBhbm90aGVyIGRvY3VtZW50IGVtYmVkZGluZyB0aGUgWE1MIHNjaGVtYSBkZWZpbml0aW9uIChlLmcuIFdTREwpLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDIxMDIgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIGltcGxlbWVudHMgV1NJVGFnCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDIxMDIoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBpbXBvcnRGb3VuZCA9IGZhbHNlOwotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgIC8vIHBhcnNlIFdTREwgYXMgWE1MCi0gICAgdHJ5Ci0gICAgewotICAgICAgVHlwZXMgdCA9IChUeXBlcykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLSAgICAgIExpc3QgZXh0cyA9IHQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0KLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG51bGw7Ci0gICAgICBpZiAoKGRlZmluaXRpb24gPSB2YWxpZGF0b3IuYW5hbHl6ZXJDb250ZXh0LmdldENhbmRpZGF0ZUluZm8oKS5nZXREZWZpbml0aW9uKHQpKQotICAgICAgICA9PSBudWxsKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKCJDb3VsZCBub3QgZmluZCB0eXBlcyBkZWZpbml0aW9uIGluIGFueSBXU0RMIGRvY3VtZW50LiIpOwotICAgICAgfQotCi0gICAgICBpZiAoZXh0cyAhPSBudWxsKQotICAgICAgewotICAgICAgICBJdGVyYXRvciBpdCA9IGV4dHMuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGVsID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBpdC5uZXh0KCk7Ci0gICAgICAgICAgaWYgKGVsIGluc3RhbmNlb2YgVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50Ci0gICAgICAgICAgICAmJiBlbC5nZXRFbGVtZW50VHlwZSgpLmVxdWFscyhFTEVNX1hTRF9TQ0hFTUEpKQotICAgICAgICAgICAgdGVzdE5vZGUoKChVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGVsKS5nZXRFbGVtZW50KCksCi0gICAgICAgICAgICAgIGRlZmluaXRpb24uZ2V0RG9jdW1lbnRCYXNlVVJJKCksIG5ldyBBcnJheUxpc3QoKSk7Ci0KLSAgICAgICAgICBpZiAocmVzdWx0LmVxdWFscyhBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZmFpbHVyZURldGFpbE1lc3NhZ2UsIGVudHJ5Q29udGV4dCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmICghaW1wb3J0Rm91bmQpCi0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotCi0gICAgY2F0Y2ggKFRocm93YWJsZSB0dCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgICAgICAgIldTREwgZG9jdW1lbnQgY2FuIG5vdCBiZSBwcm9jZXNzZWQiLAotICAgICAgICAgIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotCi0gIC8qCi0gICAqIENoZWNrIG5vZGUgaXMgeHNkIGltcG9ydCBhbmQgaXQgaXMgCi0gICAqIG9ubHkgdXNlZCB0byBkaXJlY3RseSByZWZlcmVuY2UgYW4gWE1MIHNjaGVtYSBkZWZpbml0aW9uLCB3aGljaCBoYXMgInNjaGVtYSIgCi0gICAqIGZyb20gWE1MIG5hbWVzcGFjZSAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIGFzIHJvb3QgZWxlbWVudC4gIAotICAgKiBBbmQgaXQgZG9lcyBub3QgY29udGFpbiBhIHJlZmVyZW5jZSB0byBhbm90aGVyIGRvY3VtZW50IGVtYmVkZGluZyB0aGUgWE1MIHNjaGVtYSAKLSAgICogZGVmaW5pdGlvbiAoZS5nLiBXU0RMKS4KLSAgKiBAcGFyYW0gbiAtIFVua25vd24gZXh0ZW5zaWJpbGl0eSBlbGVtZW50Ci0gICovCi0gIHByaXZhdGUgdm9pZCB0ZXN0Tm9kZShOb2RlIG4sIFN0cmluZyBjb250ZXh0LCBMaXN0IHByb2Nlc3NlZFNjaGVtYXMpCi0gIHsKLQlpZiAoKG4gIT0gbnVsbCkgJiYgKCFwcm9jZXNzZWRTY2hlbWFzLmNvbnRhaW5zKG4pKSkKLQl7Ci0gICAgICBpZiAoWE1MVXRpbHMuZXF1YWxzKG4uZ2V0UGFyZW50Tm9kZSgpLCBFTEVNX1hTRF9TQ0hFTUEpKQotICAgICAgICAgcHJvY2Vzc2VkU2NoZW1hcy5hZGQobik7ICAgIAkKLQotICAgICAgd2hpbGUgKG4gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLy8gc2VhcmNoZXMgZm9yIHhzZDppbXBvcnQgZWxlbWVudAotICAgICAgICBpZiAoTm9kZS5FTEVNRU5UX05PREUgPT0gbi5nZXROb2RlVHlwZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKFhNTFV0aWxzLmVxdWFscyhuLCBFTEVNX1hTRF9JTVBPUlQpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGltcG9ydEZvdW5kID0gdHJ1ZTsKLQotICAgICAgICAgICAgRWxlbWVudCBpbSA9IChFbGVtZW50KSBuOwotICAgICAgICAgICAgLy8gR2V0dGluZyB0aGUgc2NoZW1hTG9jYXRpb24gYW5kIHRoZSBuYW1lc3BhY2UgYXR0cmlidXRlcwotICAgICAgICAgICAgQXR0ciBzY2hlbWFMb2NhdGlvbiA9Ci0gICAgICAgICAgICAgIFhNTFV0aWxzLmdldEF0dHJpYnV0ZShpbSwgQVRUUl9YU0RfU0NIRU1BTE9DQVRJT04pOwotICAgICAgICAgICAgQXR0ciBuYW1lc3BhY2UgPSBYTUxVdGlscy5nZXRBdHRyaWJ1dGUoaW0sIEFUVFJfWFNEX05BTUVTUEFDRSk7Ci0gICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBvbmx5IHRoZSBuYW1lc3BhY2UgYXR0cmlidXRlIG9mIGltcG9ydCBlbGVtZW50Ci0gICAgICAgICAgICBpZiAoc2NoZW1hTG9jYXRpb24gPT0gbnVsbCAmJiBuYW1lc3BhY2UgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gR2V0dGluZyBhbGwgdGhlIGlubGluZSBzY2hlbWFzIG9mIHRoZSB3c2RsIGRlZmluaXRpb24KLSAgICAgICAgICAgICAgTWFwIHNjaGVtYXNNYXAgPSB2YWxpZGF0b3Iud3NkbERvY3VtZW50LmdldFNjaGVtYXMoKTsKLSAgICAgICAgICAgICAgLy8gSWYgYW4gaW5saW5lIHNjaGVtYSBpbXBvcnRlZCBpcyBkZWZpbmVkCi0gICAgICAgICAgICAgIGlmIChzY2hlbWFzTWFwLmtleVNldCgpLmNvbnRhaW5zKG5hbWVzcGFjZS5nZXRWYWx1ZSgpKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIElmIGFuIGlubGluZSBzY2hlbWEgaW1wb3J0ZWQgaXMgZGVmaW5lZAotICAgICAgICAgICAgICAgIC8vICh0aGF0IG1lYW5zIHRoZSBzY2hlbWEgaXMgdmFsaWQpLAotICAgICAgICAgICAgICAgIC8vIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgZWxlbWVudAotICAgICAgICAgICAgICAgIG4gPSBuLmdldE5leHRTaWJsaW5nKCk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAvLyBubyBzY2hlbWFMb2NhdGlvbiBzbyB0cnkgdGhlIG5hbWVzcGFjZSAKLSAgICAgICAgICAgICAgc2NoZW1hTG9jYXRpb24gPSBuYW1lc3BhY2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIHRyeSB0byBwYXJzZSBpbXBvcnRlZCBYU0QKLSAgICAgICAgICAgIGlmIChzY2hlbWFMb2NhdGlvbiAhPSBudWxsICYmIHNjaGVtYUxvY2F0aW9uLmdldFZhbHVlKCkgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBpZiBhbnkgZXJyb3Igb3Igcm9vdCBlbGVtZW50IGlzIG5vdCBYU0Qgc2NoZW1hIC0+IGVycm9yCi0gICAgICAgICAgICAgICAgLy8gISEgQVRURU5USU9OCi0gICAgICAgICAgICAgICAgLy8gcm9vdCBYU0QgU0NIRU1BIFNDSEVNQSBpcyBub3QgdmFsaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy9Eb2N1bWVudCBzY2hlbWEgPSBYTUxVdGlscy5wYXJzZVhNTERvY3VtZW50VVJMKHNjaGVtYUxvY2F0aW9uLmdldFZhbHVlKCksIFhTRF9TQ0hFTUFMT0NBVElPTiwgY29udGV4dCk7Ci0gICAgICAgICAgICAgICAgRG9jdW1lbnQgc2NoZW1hID0KLSAgICAgICAgICAgICAgICAgIHZhbGlkYXRvci5wYXJzZVhNTERvY3VtZW50VVJMKHNjaGVtYUxvY2F0aW9uLmdldFZhbHVlKCksIGNvbnRleHQpOwotCi0gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGltcG9ydCBpcyB2YWxpZCwgdGhlbiBjaGVjayBpdHMgY29udGVudHMKLSAgICAgICAgICAgICAgICBpZiAoWE1MVXRpbHMKLSAgICAgICAgICAgICAgICAgIC5lcXVhbHMoc2NoZW1hLmdldERvY3VtZW50RWxlbWVudCgpLCBFTEVNX1hTRF9TQ0hFTUEpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGNvbnRlbnQgb2YgaW1wb3J0ZWQgZG9jdW1lbnQKLSAgICAgICAgICAgICAgICAgIHRlc3ROb2RlKHNjaGVtYS5nZXREb2N1bWVudEVsZW1lbnQoKS5nZXRGaXJzdENoaWxkKCksCi0gICAgICAgICAgICAgICAgICAgIFhNTFV0aWxzLmNyZWF0ZVVSTFN0cmluZyhzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpLCBjb250ZXh0KSwgcHJvY2Vzc2VkU2NoZW1hcyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgICAgICAgICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgPSBzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIC8vcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgICAgICAgICAgIGZhaWx1cmVEZXRhaWxNZXNzYWdlID0KLSAgICAgICAgICAgICAgICAic2NoZW1hTG9jYXRpb24gPT0gbnVsbCBhbmQgbmFtZXNwYWNlID09IG51bGwiOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgdGVzdE5vZGUobi5nZXRGaXJzdENoaWxkKCksIGNvbnRleHQsIHByb2Nlc3NlZFNjaGVtYXMpOwotICAgICAgICB9Ci0gICAgICAgIG4gPSBuLmdldE5leHRTaWJsaW5nKCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjEwMy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjEwMy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZmRhOTcwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMDMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVycm9yTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotCi0vKioKLSAqIEJQMjEwMy4KLSAgICogPGNvbnRleHQ+Rm9yIGVhY2ggYSBjYW5kaWRhdGUgd3NkbDpkZWZpbml0aW9uczwvY29udGV4dD4KLSAgICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPkZvciB0aGUgcmVmZXJlbmNlZCBkZWZpbml0aW9ucyBhcyB3ZWxsIGFzIGFsbCBpbXBvcnRlZCAKLSAgICogZGVzY3JpcHRpb25zLCBUaGUgWE1MIHNjaGVtYSBpbXBvcnQgc3RhdGVtZW50IGlzIG9ubHkgdXNlZCB3aXRoaW4gYW4geHNkOnNjaGVtYSAKLSAgICogZWxlbWVudC48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAyMTAzIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjEwMyhXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JzID0gbmV3IEVycm9yTGlzdCgpOwotCi0gIC8qIENoZWNrIGFsbCB1bmtub3duIGV4dGVuc2liaWxpdHkgZWxlbWVudHMgaXQgaXMgbm90IHhzZCBpbXBvcnQuCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBlbCwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGlmIChlbCBpbnN0YW5jZW9mIFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCkKLSAgICAgIHNlYXJjaEZvckltcG9ydCgoKFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCkgZWwpLmdldEVsZW1lbnQoKSk7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0KLSAgICAvL3Byb2Nlc3NXU0RMKGVudHJ5Q29udGV4dC5nZXRXU0RMRG9jdW1lbnQoKS5nZXRGaWxlbmFtZSgpKTsKLSAgICBXU0RMVHJhdmVyc2FsIHRyYXZlcnNhbCA9IG5ldyBXU0RMVHJhdmVyc2FsKCk7Ci0gICAgLy9WaXNpdG9yQWRhcHRvci5hZGFwdCh0aGlzKTsKLSAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcih0aGlzKTsKLSAgICB0cmF2ZXJzYWwuaWdub3JlSW1wb3J0KCk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQodHJ1ZSk7Ci0KLSAgICB0cmF2ZXJzYWwuaWdub3JlUmVmZXJlbmNlcygpOwotICAgIHRyYXZlcnNhbC50cmF2ZXJzZSgoRGVmaW5pdGlvbikgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKSk7Ci0KLSAgICBpZiAoIWVycm9ycy5pc0VtcHR5KCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlcnJvcnMudG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLSAgLyoKLSAgICogQ3JlYXRlIGZhbHVyZSByZXBvcnQgaWYgbm9kZSBpcyB4c2QgaW1wb3J0LiAKLSAgICogQHBhcmFtIG4gLSBub2RlCi0gICAqLwotICBwcml2YXRlIHZvaWQgc2VhcmNoRm9ySW1wb3J0KE5vZGUgbikKLSAgewotICAgIHdoaWxlIChuICE9IG51bGwpCi0gICAgewotICAgICAgLy8gc2VhcmNoZXMgZm9yIHhzZDppbXBvcnQgZWxlbWVudAotICAgICAgaWYgKE5vZGUuRUxFTUVOVF9OT0RFID09IG4uZ2V0Tm9kZVR5cGUoKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKFhNTFV0aWxzLmVxdWFscyhuLCBFTEVNX1hTRF9JTVBPUlQpKQotICAgICAgICB7Ci0gICAgICAgICAgQXR0ciBhID0KLSAgICAgICAgICAgIFhNTFV0aWxzLmdldEF0dHJpYnV0ZSgoRWxlbWVudCkgbiwgQVRUUl9YU0RfU0NIRU1BTE9DQVRJT04pOwotICAgICAgICAgIFN0cmluZyBzY2hlbWFMb2NhdGlvbiA9IChhICE9IG51bGwpID8gYS5nZXRWYWx1ZSgpIDogIiI7Ci0gICAgICAgICAgYSA9IFhNTFV0aWxzLmdldEF0dHJpYnV0ZSgoRWxlbWVudCkgbiwgQVRUUl9YU0RfTkFNRVNQQUNFKTsKLSAgICAgICAgICBTdHJpbmcgbmFtZXNwYWNlID0gKGEgIT0gbnVsbCkgPyBhLmdldFZhbHVlKCkgOiAiIjsKLSAgICAgICAgICBlcnJvcnMuYWRkKG5ldyBRTmFtZShuYW1lc3BhY2UsIHNjaGVtYUxvY2F0aW9uKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBpZiB4c2Q6c2NoZW1hIGVsZW1lbnQgaXMgZm91bmQgLT4gcHJvY2VzcyBzY2hlbWEKLSAgICAgICAgICBpZiAoIVhNTFV0aWxzLmVxdWFscyhuLCBFTEVNX1hTRF9TQ0hFTUEpKQotICAgICAgICAgICAgc2VhcmNoRm9ySW1wb3J0KG4uZ2V0Rmlyc3RDaGlsZCgpKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBuID0gbi5nZXROZXh0U2libGluZygpOwotICAgIH0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMDQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMDQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzkyZjM2NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTA0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkltcG9ydDsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5FcnJvckxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuTnVsbFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0OwotCi0KLS8qKgotICogQlAyMTA0LgotICAgKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDppbXBvcnQ8L2NvbnRleHQ+Ci0gICAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgdGFyZ2V0TmFtZXNwYWNlIGF0dHJpYnV0ZSBvbiB0aGUgd3NkbDpkZWZpbml0aW9ucyBlbGVtZW50IGZvciB0aGUgaW1wb3J0ZWQgV1NETCBkZXNjcmlwdGlvbiBoYXMgdGhlIHNhbWUgdmFsdWUgYXMgdGhlIG5hbWVzcGFjZSBhdHRyaWJ1dGUgb24gdGhlIHdzZGw6aW1wb3J0IGVsZW1lbnQgdGhhdCBpbXBvcnRlZCB0aGUgV1NETCBkZXNjcmlwdGlvbi48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAyMTA0IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjEwNChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JzID0gbmV3IEVycm9yTGlzdCgpOwotCi0gIHByaXZhdGUgYm9vbGVhbiBpbXBvcnRGb3VuZCA9IGZhbHNlOwotCi0gIC8qIENyZWF0ZSBmYWx1cmUgcmVwb3J0IGlmIG5hbWVzcGFjZSBvZiB3c2RsOmltcG9ydCBkb2VzIG5vdCBlcXVhbCB0YXJnZXRuYW1lc3BhY2UgaW4gcmVmZXJlbmNlZCB3c2RsLiAgCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLkltcG9ydCwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KEltcG9ydCBpbSwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgaW1wb3J0Rm91bmQgPSB0cnVlOwotICAgIERlZmluaXRpb24gZGVmID0gaW0uZ2V0RGVmaW5pdGlvbigpOwotICAgIGlmIChkZWYgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoIU51bGxVdGlsLmVxdWFscyhpbS5nZXROYW1lc3BhY2VVUkkoKSwgZGVmLmdldFRhcmdldE5hbWVzcGFjZSgpKSkKLSAgICAgICAgZXJyb3JzLmFkZCgKLSAgICAgICAgICBuZXcgUU5hbWUoaW0uZ2V0TmFtZXNwYWNlVVJJKCksIGltLmdldExvY2F0aW9uVVJJKCkpLAotICAgICAgICAgIG5ldyBRTmFtZShkZWYuZ2V0VGFyZ2V0TmFtZXNwYWNlKCksIGRlZi5nZXREb2N1bWVudEJhc2VVUkkoKSkpOwotICAgIH0KLSAgfQotCi0gIC8qIAotICAgKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0KLSAgICBXU0RMVHJhdmVyc2FsIHRyYXZlcnNhbCA9IG5ldyBXU0RMVHJhdmVyc2FsKCk7Ci0gICAgLy9WaXNpdG9yQWRhcHRvci5hZGFwdCh0aGlzKTsKLSAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcih0aGlzKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRJbXBvcnQodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLmlnbm9yZVJlZmVyZW5jZXMoKTsKLSAgICB0cmF2ZXJzYWwudHJhdmVyc2UoKERlZmluaXRpb24pIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCkpOwotCi0gICAgaWYgKCFlcnJvcnMuaXNFbXB0eSgpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZXJyb3JzLnRvU3RyaW5nKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotCi0gICAgZWxzZSBpZiAoIWltcG9ydEZvdW5kKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMDUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMDUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjEwNGM2ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTA1LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkltcG9ydDsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVycm9yTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotCi0vKioKLSAgKiBCUDIxMDUuCi0gICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6ZGVmaW5pdGlvbnM8L2NvbnRleHQ+Ci0gICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPkZvciB0aGUgcmVmZXJlbmNlZCBkZWZpbml0aW9ucywgYXMgd2VsbCBhcyBhbGwgaW1wb3J0ZWQgZGVzY3JpcHRpb25zLCBpbiB0aGUgV1NETCBuYW1lc3BhY2UgdW5kZXIgdGhlIHdzZGw6ZGVmaW50aXRpb25zIGVsZW1lbnQsIHRoZSB3c2RsOmltcG9ydCBlbGVtZW50IGlzIGVpdGhlciBkaXJlY3RseSBhZnRlciB0aGUgd3NkbDpkb2N1bWVudGF0aW9uIGVsZW1lbnQgb3IgaXMgdGhlIGZpcnN0IGNoaWxkIGVsZW1lbnQgaWYgdGhlIHdzZGw6ZG9jdW1lbnRhdGlvbiBlbGVtZW50IGlzIG5vdCBwcmVzZW50LjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gICovCi1wdWJsaWMgY2xhc3MgQlAyMTA1IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjEwNShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JzID0gbmV3IEVycm9yTGlzdCgpOwotCi0gIHByaXZhdGUgYm9vbGVhbiBpbXBvcnRGb3VuZCA9IGZhbHNlOwotCi0gIC8qIAotICAgKiBDaGVjayB3c2xkIGltcG9ydCBlbGVtZW50IGlzIGVpdGhlciBkaXJlY3RseSBhZnRlciB0aGUgd3NkbDpkb2N1bWVudGF0aW9uIGVsZW1lbnQgCi0gICAqIG9yIGlzIHRoZSBmaXJzdCBjaGlsZCBlbGVtZW50IGlmIHRoZSB3c2RsOmRvY3VtZW50YXRpb24gZWxlbWVudCBpcyBub3QgcHJlc2VudC4KLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuSW1wb3J0LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoSW1wb3J0IGltLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBpbXBvcnRGb3VuZCA9IHRydWU7Ci0gICAgaWYgKGltLmdldERlZmluaXRpb24oKSAhPSBudWxsICYmIGltLmdldExvY2F0aW9uVVJJKCkgIT0gbnVsbCkKLSAgICAgIHByb2Nlc3NXU0RMKGltLmdldERlZmluaXRpb24oKS5nZXREb2N1bWVudEJhc2VVUkkoKSk7Ci0gIH0KLQotICAvKgotICAgKiBDaGVjayBlbGVtZW50IGlzIGV4dGVuc2liaWxpdHkuCi0gICAqIEBwYXJhbSBlbCAtIHhtbCBlbGVtZW50Ci0gICAqIEByZXR1cm4gYm9vbGVhbgotICAqLwotICBwcml2YXRlIGJvb2xlYW4gaXNFeHRlbnNpYmlsaXR5RWxlbWVudChFbGVtZW50IGVsKQotICB7Ci0gICAgYm9vbGVhbiBpc0V4ID0gdHJ1ZTsKLSAgICBpc0V4ID0gaXNFeCAmJiAhWE1MVXRpbHMuZXF1YWxzKGVsLCBXU0RMX0JJTkRJTkcpOwotICAgIGlzRXggPSBpc0V4ICYmICFYTUxVdGlscy5lcXVhbHMoZWwsIFdTRExfREVGSU5JVElPTlMpOwotICAgIGlzRXggPSBpc0V4ICYmICFYTUxVdGlscy5lcXVhbHMoZWwsIFdTRExfRE9DVU1FTlRBVElPTik7Ci0gICAgaXNFeCA9IGlzRXggJiYgIVhNTFV0aWxzLmVxdWFscyhlbCwgV1NETF9GQVVMVCk7Ci0gICAgaXNFeCA9IGlzRXggJiYgIVhNTFV0aWxzLmVxdWFscyhlbCwgV1NETF9JTVBPUlQpOwotICAgIGlzRXggPSBpc0V4ICYmICFYTUxVdGlscy5lcXVhbHMoZWwsIFdTRExfSU5QVVQpOwotICAgIGlzRXggPSBpc0V4ICYmICFYTUxVdGlscy5lcXVhbHMoZWwsIFdTRExfTUVTU0FHRSk7Ci0gICAgaXNFeCA9IGlzRXggJiYgIVhNTFV0aWxzLmVxdWFscyhlbCwgV1NETF9PUEVSQVRJT04pOwotICAgIGlzRXggPSBpc0V4ICYmICFYTUxVdGlscy5lcXVhbHMoZWwsIFdTRExfT1VUUFVUKTsKLSAgICBpc0V4ID0gaXNFeCAmJiAhWE1MVXRpbHMuZXF1YWxzKGVsLCBXU0RMX1BBUlQpOwotICAgIGlzRXggPSBpc0V4ICYmICFYTUxVdGlscy5lcXVhbHMoZWwsIFdTRExfUE9SVCk7Ci0gICAgaXNFeCA9IGlzRXggJiYgIVhNTFV0aWxzLmVxdWFscyhlbCwgV1NETF9QT1JUVFlQRSk7Ci0gICAgaXNFeCA9IGlzRXggJiYgIVhNTFV0aWxzLmVxdWFscyhlbCwgV1NETF9TRVJWSUNFKTsKLSAgICBpc0V4ID0gaXNFeCAmJiAhWE1MVXRpbHMuZXF1YWxzKGVsLCBXU0RMX1RZUEVTKTsKLQotICAgIHJldHVybiBpc0V4OwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotCi0gICAgLy8gR2V0IHRoZSBkZWZpbml0aW9uIGVsZW1lbnQgdGhhdCB3aWxsIGJlIGFuYWx5emVkICAgICAgIAotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9Ci0gICAgICAoRGVmaW5pdGlvbikgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgIC8vIElmIGl0IGRvZXNuJ3QgY29udGFpbiBhbnkgaW1wb3J0cywgdGhlbiB0aGUgcmVzdWx0IGlzIG5vdEFwcGxpY2FibGUKLSAgICBpZiAoKGRlZmluaXRpb24uZ2V0SW1wb3J0cygpID09IG51bGwpCi0gICAgICB8fCAoZGVmaW5pdGlvbi5nZXRJbXBvcnRzKCkuc2l6ZSgpID09IDApKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotCi0gICAgLy8gRWxzZSBhbmFseXplIHRoZSAKLSAgICBlbHNlCi0gICAgewotICAgICAgcHJvY2Vzc1dTREwoZGVmaW5pdGlvbi5nZXREb2N1bWVudEJhc2VVUkkoKSk7Ci0KLSAgICAgIFdTRExUcmF2ZXJzYWwgdHJhdmVyc2FsID0gbmV3IFdTRExUcmF2ZXJzYWwoKTsKLSAgICAgIC8vVmlzaXRvckFkYXB0b3IuYWRhcHQodGhpcyk7Ci0gICAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcih0aGlzKTsKLSAgICAgIHRyYXZlcnNhbC52aXNpdEltcG9ydCh0cnVlKTsKLQotICAgICAgdHJhdmVyc2FsLmlnbm9yZVJlZmVyZW5jZXMoKTsKLSAgICAgIHRyYXZlcnNhbC5pZ25vcmVJbXBvcnQoKTsKLSAgICAgIHRyYXZlcnNhbC50cmF2ZXJzZSgKLSAgICAgICAgKERlZmluaXRpb24pIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCkpOwotCi0gICAgICBpZiAoIWVycm9ycy5pc0VtcHR5KCkpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlcnJvcnMudG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICAgIH0KLQotICAgICAgZWxzZSBpZiAoIWltcG9ydEZvdW5kKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgfQotCi0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotICAvKgotICAgKiB0aGUgbWV0aG9kIGxvYWRzIFdTREwgYW5kIGNoZWNrIHN0cnVjdHVyZQotICAgKiBAcGFyYW0gbG9jYXRpb24KLSAgICovCi0gIHByaXZhdGUgdm9pZCBwcm9jZXNzV1NETChTdHJpbmcgbG9jYXRpb24pCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBwYXJzZXMgV1NETAotICAgICAgRG9jdW1lbnQgZG9jID0gdmFsaWRhdG9yLnBhcnNlWE1MRG9jdW1lbnRVUkwobG9jYXRpb24sIG51bGwpOwotICAgICAgY2hlY2tXU0RMKGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKSk7IC8vIGdldCBkZWZpbml0aW9uCi0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICB7Ci0gICAgICAvLyBBREQ6IGFkZCBleGNlcHRpb24gaGFuZGxpbmcKLSAgICAgIC8vU3lzdGVtLmVyci5wcmludGxuKCIyMTA1IC0gV1NETCBsb2FkIGZhaWxlZCIpOwotICAgICAgZXJyb3JzLmFkZCh0LnRvU3RyaW5nKCkpOwotICAgIH0KLSAgfQotCi0gIC8qCi0gICAqIENyZWF0ZSBmYWx1cmUgcmVwb3J0IGNvbnRhaW5zIGluZm9ybWF0aW9uIG9mIG5vZGUuCi0gICAqIEBwYXJhbSByb290Ci0gICAqLwotICBwcml2YXRlIHZvaWQgY3JlYXRlRmFpbGVkKE5vZGUgcm9vdCkKLSAgewotICAgIEF0dHIgYSA9IFhNTFV0aWxzLmdldEF0dHJpYnV0ZSgoRWxlbWVudCkgcm9vdCwgQVRUUl9XU0RMX0xPQ0FUSU9OKTsKLSAgICBTdHJpbmcgc2NoZW1hTG9jYXRpb24gPSAoYSAhPSBudWxsKSA/IGEuZ2V0VmFsdWUoKSA6ICIiOwotICAgIGEgPSBYTUxVdGlscy5nZXRBdHRyaWJ1dGUoKEVsZW1lbnQpIHJvb3QsIEFUVFJfV1NETF9OQU1FU1BBQ0UpOwotICAgIFN0cmluZyBuYW1lc3BhY2UgPSAoYSAhPSBudWxsKSA/IGEuZ2V0VmFsdWUoKSA6ICIiOwotICAgIGVycm9ycy5hZGQobmV3IFFOYW1lKG5hbWVzcGFjZSwgc2NoZW1hTG9jYXRpb24pKTsKLSAgfQotCi0gIC8qCi0gICAqIENoZWNrIHdzZGwgY29ycmVzcG9ucyBhc3NlcnRpb24gZGVzY3JpcHRpb24uCi0gICogQHBhcmFtIHJvb3QgLSBkZWZpbml0aW9uCi0gICAqLwotICBwcml2YXRlIHZvaWQgY2hlY2tXU0RMKE5vZGUgcm9vdCkKLSAgewotICAgIGlmIChyb290ICE9IG51bGwpCi0gICAgewotICAgICAgLy8gRmluZCB0aGUgZmlyc3QgaW1wb3J0IGVsZW1lbnQKLSAgICAgIEVsZW1lbnQgaW0gPSBYTUxVdGlscy5maW5kQ2hpbGRFbGVtZW50KChFbGVtZW50KSByb290LCBXU0RMX0lNUE9SVCk7Ci0KLSAgICAgIC8vIERldGVybWluZSBpZiBhIGRvY3VtZW50YXRpb24gZWxlbWVudCBpcyBwcmVzZW50IGluIHRoZSBXU0RMIGRvY3VtZW50Ci0gICAgICBib29sZWFuIGRvY3VtZW50SXNQcmVzZW50ID0KLSAgICAgICAgKFhNTFV0aWxzLmZpbmRDaGlsZEVsZW1lbnQoKEVsZW1lbnQpIHJvb3QsIFdTRExfRE9DVU1FTlRBVElPTikKLSAgICAgICAgICAhPSBudWxsKTsKLQotICAgICAgLy8gVmVyaWZ5IHRoYXQgYWxsIGltcG9ydCBlbGVtZW50cyBvY2N1ciBhZnRlciBhIGRvY3VtZW50YXRpb24gZWxlbWVudAotICAgICAgd2hpbGUgKGltICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIC8vIEZpbmQgZWxlbWVudHMgdGhhdCBhcmUgcHJldmlvdXMgdG8gdGhlIGltcG9ydCBlbGVtZW50Ci0gICAgICAgIEVsZW1lbnQgZWwgPSBYTUxVdGlscy5maW5kUHJldmlvdXNTaWJsaW5nKGltKTsKLSAgICAgICAgaWYgKGVsICE9IG51bGwpCi0gICAgICAgICAgd2hpbGUgKGlzRXh0ZW5zaWJpbGl0eUVsZW1lbnQoZWwpICYmIGVsICE9IG51bGwpCi0gICAgICAgICAgICBpZiAoZWwgIT0gbnVsbCkKLSAgICAgICAgICAgICAgZWwgPSBYTUxVdGlscy5maW5kUHJldmlvdXNTaWJsaW5nKGVsKTsKLQotICAgICAgICAvLyBJZiB0aGUgd3NkbDpkb2N1bWVudCBlbGVtbnQgaXMgcHJlc2VudAotICAgICAgICBpZiAoZG9jdW1lbnRJc1ByZXNlbnQgJiYgZWwgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGlmICghWE1MVXRpbHMuZXF1YWxzKGVsLCBXU0RMX0RPQ1VNRU5UQVRJT04pICYmICFYTUxVdGlscy5lcXVhbHMoZWwsIFdTRExfSU1QT1JUKSkKLSAgICAgICAgICAgIGNyZWF0ZUZhaWxlZChyb290KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEVsc2UgY2hlY2sgaWYgaXQgaXMgYW5vdGhlciB3c2RsOiBlbGVtZW50Ci0gICAgICAgIGVsc2UgaWYgKGVsICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBJZiBub3QgdGhlIGRlZmluaXRpb25zIGVsZW1lbnQsIHRoZW4gY2hlY2sgZm9yIG90aGVyIHdzZGw6IGVsZW1lbnQKLSAgICAgICAgICBpZiAoIVhNTFV0aWxzLmVxdWFscyhlbCwgV1NETF9ERUZJTklUSU9OUykgJiYgIVhNTFV0aWxzLmVxdWFscyhlbCwgV1NETF9JTVBPUlQpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChlbC5nZXROYW1lc3BhY2VVUkkoKS5lcXVhbHMoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0RMKSkKLSAgICAgICAgICAgICAgY3JlYXRlRmFpbGVkKHJvb3QpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIEdldCB0aGUgbmV4dCBpbXBvcnQgZWxlbWVudAotICAgICAgICBpbSA9IFhNTFV0aWxzLmZpbmRFbGVtZW50KGltLCBXU0RMX0lNUE9SVCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjEwNy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjEwNy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZmZmYjAyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMDcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5UeXBlczsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5FcnJvckxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotCi0vKioKLSAqIEJQMjEwNy4KLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOnR5cGVzIGVsZW1lbnQgY29udGFpbmluZyBhbiB4c2Q6c2NoZW1hIGVsZW1lbnQ8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIHhzZDpzY2hlbWEgZWxlbWVudCBjb250YWlucyBhIHRhcmdldE5hbWVzcGFjZSBhdHRyaWJ1dGUgd2l0aCBhIHZhbGlkIGFuZCBub24tbnVsbCB2YWx1ZSB1bmxlc3MgdGhlIHhzZDpzY2hlbWEgZWxlbWVudCBoYXMgeHNkOmltcG9ydCBhbmQvb3IgeHNkOmFubm90YXRpb24gYXMgaXRzIG9ubHkgY2hpbGQgZWxlbWVudChzKS48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAyMTA3IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcyBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMTA3KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gc2NoZW1hRm91bmQgPSBmYWxzZTsKLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JzID0gbmV3IEVycm9yTGlzdCgpOwotICAvL3ByaXZhdGUgU3RyaW5nIGNvbnRleHQ7Ci0KLSAgLyogCi0gICAqIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLQotICAgIFR5cGVzIHQgPSAoVHlwZXMpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0gICAgTGlzdCBleHRzID0gdC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICBpZiAoZXh0cyAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vY29udGV4dCA9IGVudHJ5Q29udGV4dC5nZXRXU0RMRG9jdW1lbnQoKS5nZXREZWZpbml0aW9ucygpLmdldERvY3VtZW50QmFzZVVSSSgpOwotICAgICAgSXRlcmF0b3IgaXQgPSBleHRzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBlbCA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCkgaXQubmV4dCgpOwotICAgICAgICBpZiAoZWwgaW5zdGFuY2VvZiBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi0gICAgICAgICAgc2VhcmNoRm9yU2NoZW1hKCgoVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KSBlbCkuZ2V0RWxlbWVudCgpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLwkJCSAgY29udGV4dCA9IGVudHJ5Q29udGV4dC5nZXRXU0RMRG9jdW1lbnQoKS5nZXREZWZpbml0aW9ucygpLmdldERvY3VtZW50QmFzZVVSSSgpOwotICAgIC8vCQkJICBwcm9jZXNzV1NETChlbnRyeUNvbnRleHQuZ2V0V1NETERvY3VtZW50KCkuZ2V0RmlsZW5hbWUoKSk7Ci0KLSAgICBpZiAoIWVycm9ycy5pc0VtcHR5KCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlcnJvcnMudG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICBlbHNlIGlmICghc2NoZW1hRm91bmQpCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotCi0gICAgZWxzZQotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLSAgLyoKLSAgICogQ2hlY2sgbm9kZSBzY2hlbWEgb3IgbG9hZCBzY2hlbWEgZnJvbSBpbm1wb3J0IGlmIGl0IGV4aXN0cyBhbmQgcHJvY2VzcyBpdC4gCi0gICAqIEBwYXJhbSBuIC0gbm9kZQotICAqLwotICBwcml2YXRlIHZvaWQgc2VhcmNoRm9yU2NoZW1hKE5vZGUgbikKLSAgewotICAgIHdoaWxlIChuICE9IG51bGwpCi0gICAgewotICAgICAgLy8gc2VhcmNoZXMgZm9yIHhzZDppbXBvcnQgZWxlbWVudAotICAgICAgaWYgKE5vZGUuRUxFTUVOVF9OT0RFID09IG4uZ2V0Tm9kZVR5cGUoKSkKLSAgICAgIHsKLSAgICAgICAgLy8gaWYgeHNkOnNjaGVtYSBlbGVtZW50IGlzIGZvdW5kIC0+IHByb2Nlc3Mgc2NoZW1hCi0gICAgICAgIGlmIChYTUxVdGlscy5lcXVhbHMobiwgRUxFTV9YU0RfU0NIRU1BKSkKLSAgICAgICAgewotICAgICAgICAgIHNjaGVtYUZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICBwcm9jZXNzU2NoZW1hKG4sIG51bGwpOwotICAgICAgICB9Ci0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgLy8gaWYgeHNkOmltcG9ydCBlbGVtZW50IGlzIGZvdW5kIC0+IGxvYWQgc2NoZW1hIGFuZCBwcm9jZXNzIHNjaGVtYQotICAgICAgICAgIC8vaWYgKFhNTFV0aWxzLmVxdWFscyhuLCBFTEVNX1hTRF9JTVBPUlQpKQotICAgICAgICAgIC8vICBsb2FkU2NoZW1hKG4pOwotICAgICAgICAgIC8vZWxzZQotICAgICAgICAgIC8vIGVsc2UgaXRlcmF0ZSBlbGVtZW50IHJlY3Vyc2l2ZWx5Ci0gICAgICAgICAgc2VhcmNoRm9yU2NoZW1hKG4uZ2V0Rmlyc3RDaGlsZCgpKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBuID0gbi5nZXROZXh0U2libGluZygpOwotICAgIH0KLSAgfQotCi0gIC8qCi0gICAqIExvYWQgc2NoZW1hIGFuZCBwcm9jZXNzIGl0LgotICAgKiBAcGFyYW0gaW1wb3J0Tm9kZSAtIHhzZDppbXBvcnQgZWxlbWVudAotICAqLwotICAvL3ByaXZhdGUgdm9pZCBsb2FkU2NoZW1hKE5vZGUgaW1wb3J0Tm9kZSkKLSAgLy97Ci0gIC8vICBFbGVtZW50IGltID0gKEVsZW1lbnQpIGltcG9ydE5vZGU7Ci0gIC8vICBBdHRyIHNjaGVtYUxvY2F0aW9uID0gWE1MVXRpbHMuZ2V0QXR0cmlidXRlKGltLCBBVFRSX1hTRF9TQ0hFTUFMT0NBVElPTik7Ci0gIC8vICAvLyB0cnkgdG8gcGFyc2UgaW1wb3J0ZWQgWFNECi0gIC8vICBpZiAoc2NoZW1hTG9jYXRpb24gIT0gbnVsbCAmJiBzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpICE9IG51bGwpCi0gIC8vICAgIHRyeQotICAvLyAgICB7Ci0gIC8vICAgICAgLy8gaWYgYW55IGVycm9yIG9yIHJvb3QgZWxlbWVudCBpcyBub3QgWFNEIHNjaGVtYSAtPiBlcnJvcgotICAvLyAgICAgIERvY3VtZW50IHNjaGVtYSA9Ci0gIC8vICAgICAgICB2YWxpZGF0b3IucGFyc2VYTUxEb2N1bWVudFVSTChzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpLCBjb250ZXh0KTsKLSAgLy8gICAgICBpZiAoWE1MVXRpbHMuZXF1YWxzKHNjaGVtYS5nZXREb2N1bWVudEVsZW1lbnQoKSwgRUxFTV9YU0RfU0NIRU1BKSkKLSAgLy8gICAgICB7Ci0gIC8vICAgICAgICBBdHRyIGEgPSBYTUxVdGlscy5nZXRBdHRyaWJ1dGUoaW0sIEFUVFJfWFNEX05BTUVTUEFDRSk7Ci0gIC8vICAgICAgICBTdHJpbmcgbmFtZXNwYWNlID0gKGEgIT0gbnVsbCkgPyBhLmdldFZhbHVlKCkgOiAiIjsKLSAgLy8gICAgICAgIHByb2Nlc3NTY2hlbWEoc2NoZW1hLmdldERvY3VtZW50RWxlbWVudCgpLCBuYW1lc3BhY2UpOwotICAvLyAgICAgIH0KLSAgLy8gICAgfQotICAvLyAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gIC8vICAgIHsKLSAgLy8gICAgICAvLyBub3RoaW5nLiBpdCdzIG5vdCBhIHNjaGVtYQotICAvLyAgICB9Ci0gIC8vfQotCi0gIC8qCi0gICAqIENyZWF0ZSBmYWx1cmUgcmVwb3J0IGlmIGl0J3Mgbm90IGNvcnJlc3BvbnMgYXNzZXJ0aW9uIGRlc2NyaXB0aW9uLgotICAgKiBAcGFyYW0gc2NoZW1hIC0geHNkOnNjaGVtYQotICAgKiBAcGFyYW0gbmFtZXNwYWNlIC0gbmFtZXNwYWNlIG9mIHNjaGVtYQotICAqLwotICBwcml2YXRlIHZvaWQgcHJvY2Vzc1NjaGVtYShOb2RlIHNjaGVtYSwgU3RyaW5nIG5hbWVzcGFjZSkKLSAgewotICAgIEF0dHIgYSA9Ci0gICAgICBYTUxVdGlscy5nZXRBdHRyaWJ1dGUoKEVsZW1lbnQpIHNjaGVtYSwgQVRUUl9YU0RfVEFSR0VUTkFNRVNQQUNFKTsKLSAgICBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlID0gKGEgIT0gbnVsbCkgPyBhLmdldFZhbHVlKCkgOiBudWxsOwotCi0gICAgTm9kZSBuID0gc2NoZW1hLmdldEZpcnN0Q2hpbGQoKTsKLSAgICAvLwkgICAhISB3ZSBzdXBwb3NlIHRoYXQgeHNkOmltcG9ydCBlbGVtZW50IGlzIG9jY3VyZWQgb25seSB3aXRoaW4geHNkOnNjaGVtYSBlbGVtZW50Ci0gICAgYm9vbGVhbiBjb250YWluc09ubHlJbXBvcnRBbmRBbm5vdGF0aW9uID0gdHJ1ZTsKLSAgICB3aGlsZSAobiAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChuLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpCi0gICAgICB7Ci0gICAgICAgIGNvbnRhaW5zT25seUltcG9ydEFuZEFubm90YXRpb24KLSAgICAgICAgICAmPSAoWE1MVXRpbHMuZXF1YWxzKG4sIEVMRU1fWFNEX0lNUE9SVCkKLSAgICAgICAgICAgIHx8IFhNTFV0aWxzLmVxdWFscyhuLCBFTEVNX1hTRF9BTk5PVEFUSU9OKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vaWYgKE5vZGUuRUxFTUVOVF9OT0RFID09IG4uZ2V0Tm9kZVR5cGUoKSAmJiBYTUxVdGlscy5lcXVhbHMobiwgRUxFTV9YU0RfSU1QT1JUKSkKLSAgICAgIC8vCWxvYWRTY2hlbWEobik7Ci0KLSAgICAgIG4gPSBuLmdldE5leHRTaWJsaW5nKCk7Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlIHRhcmdldCBuYW1lc3BhY2UgaXMgbm90IHNldCBhbmQgdGhlcmUgYXJlIGVsZW1lbnRzIGluIGFkZGl0aW9uIHRvIGltcG9ydCBhbmQgYW5ub3RhdGlvbiwgdGhlbiBlcnJvcgotICAgIGlmICgodGFyZ2V0TmFtZXNwYWNlID09IG51bGwgfHwgdGFyZ2V0TmFtZXNwYWNlLmxlbmd0aCgpID09IDApCi0gICAgICAmJiAoIWNvbnRhaW5zT25seUltcG9ydEFuZEFubm90YXRpb24pKQotICAgIHsKLSAgICAgIGVycm9ycy5hZGQodGFyZ2V0TmFtZXNwYWNlLCBYTUxVdGlscy5zZXJpYWxpemUoKEVsZW1lbnQpIHNjaGVtYSkpOwotICAgIH0KLQotICAgIGlmIChuYW1lc3BhY2UgIT0gbnVsbCAmJiAhbmFtZXNwYWNlLmVxdWFscyh0YXJnZXROYW1lc3BhY2UpKQotICAgIHsKLSAgICAgIGVycm9ycy5hZGQobmFtZXNwYWNlLCBYTUxVdGlscy5zZXJpYWxpemUoKEVsZW1lbnQpIHNjaGVtYSkpOwotICAgIH0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMDguamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMDguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmY3MzNmNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTA4LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuVHlwZXM7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5FcnJvckxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVHlwZXNSZWdpc3RyeTsKLQotCi0vKioKLQkgKiBCUDIxMDguCi0gICAgICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6dHlwZXMsIHdpdGggQXJyYXkgZGVjbGFyYXRpb25zIGVpdGhlciBsb2NhbGx5IGRlZmluZWQgb3IgZnJvbSBhbiBpbXBvcnRlZCBkZXNjcmlwdGlvbjwvY29udGV4dD4KLSAgICAgKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIHR5cGUgc29hcGVuYzpBcnJheSBkb2VzIG5vdCBhcHBlYXIgaW4gdGhlc2UgZGVjbGFyYXRpb25zLCBhbmQgdGhlIHdzZGw6YXJyYXlUeXBlIGF0dHJpYnV0ZSBpcyBub3QgdXNlZCBpbiB0aGUgdHlwZSBkZWNsYXJhdGlvbi48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotCSAqLwotcHVibGljIGNsYXNzIEJQMjEwOCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjEwOChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JzID0gbmV3IEVycm9yTGlzdCgpOwotCi0gIC8qIAotICAgKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0KLSAgICBUeXBlcyB0ID0gKFR5cGVzKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgLy8gU2VhcmNoIHRoZSBkZWZpbml0aW9ucyBpbiBDYW5kaWRhdGVJbmZvIHRvIGxvY2F0ZSB0aGUgZGVmaW5pdGlvbiBlbGVtZW50IHRoYXQgY29udGFpbnMgdGhlIHNwZWNpZmllZCB0eXBlcyBlbGVtZW50Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gbnVsbDsKLSAgICBpZiAoKGRlZmluaXRpb24gPSB2YWxpZGF0b3IuYW5hbHl6ZXJDb250ZXh0LmdldENhbmRpZGF0ZUluZm8oKS5nZXREZWZpbml0aW9uKHQpKQotICAgICAgPT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4sIGJ1dCBpZiBpdCBkb2VzIHRoZW4gdGhyb3cgYW4gZXhlY3B0aW9uCi0gICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKCJDb3VsZCBub3QgbG9jYXRlIHR5cGVzIGVsZW1lbnQgZGVmaW5pdGlvbi4iKTsKLSAgICB9Ci0KLSAgICBlbHNlCi0gICAgewotICAgICAgVHlwZXNSZWdpc3RyeSByZWdpc3RyeSA9Ci0gICAgICAgIG5ldyBUeXBlc1JlZ2lzdHJ5KAotICAgICAgICAgIHQsCi0gICAgICAgICAgZGVmaW5pdGlvbi5nZXREb2N1bWVudEJhc2VVUkkoKSwKLSAgICAgICAgICB2YWxpZGF0b3IpOwotCi0gICAgICBJdGVyYXRvciBpdCA9IHJlZ2lzdHJ5LmdldEFycmF5VHlwZXMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgICAgZXJyb3JzLmFkZCgoUU5hbWUpIGl0Lm5leHQoKSk7Ci0KLSAgICAgIGlmICghZXJyb3JzLmlzRW1wdHkoKSkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGVycm9ycy50b1N0cmluZygpLCBlbnRyeUNvbnRleHQpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICB9Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjExMC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjExMC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTliNmYwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMTAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5UeXBlczsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVycm9yTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5UeXBlc1JlZ2lzdHJ5OwotCi0KLS8qKgotICogQlAyMTEwLgotICAgKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDp0eXBlczwvY29udGV4dD4KLSAgICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPkFycmF5IGRlY2xhcmF0aW9uIHdyYXBwZXIgZWxlbWVudHMgZG9lcyBub3QgdXNlIHRoZSBuYW1pbmcgY29udmVudGlvbiBBcnJheU9mWFhYLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDIxMTAgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzIGltcGxlbWVudHMgV1NJVGFnCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDIxMTAoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHByaXZhdGUgRXJyb3JMaXN0IGVycm9ycyA9IG5ldyBFcnJvckxpc3QoKTsKLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9XQVJOSU5HOwotCi0gICAgVHlwZXMgdCA9IChUeXBlcykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgIC8vIFNlYXJjaCB0aGUgZGVmaW5pdGlvbnMgaW4gQ2FuZGlkYXRlSW5mbyB0byBsb2NhdGUgdGhlIGRlZmluaXRpb24gZWxlbWVudCB0aGF0IGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgdHlwZXMgZWxlbWVudAotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG51bGw7Ci0gICAgaWYgKChkZWZpbml0aW9uID0gdmFsaWRhdG9yLmFuYWx5emVyQ29udGV4dC5nZXRDYW5kaWRhdGVJbmZvKCkuZ2V0RGVmaW5pdGlvbih0KSkKLSAgICAgID09IG51bGwpCi0gICAgewotICAgICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLCBidXQgaWYgaXQgZG9lcyB0aGVuIHRocm93IGFuIGV4ZWNwdGlvbgotICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigiQ291bGQgbm90IGxvY2F0ZSB0eXBlcyBlbGVtZW50IGRlZmluaXRpb24uIik7Ci0gICAgfQotCi0gICAgZWxzZQotICAgIHsKLSAgICAgIFR5cGVzUmVnaXN0cnkgcmVnaXN0cnkgPQotICAgICAgICBuZXcgVHlwZXNSZWdpc3RyeSgKLSAgICAgICAgICB0LAotICAgICAgICAgIGRlZmluaXRpb24uZ2V0RG9jdW1lbnRCYXNlVVJJKCksCi0gICAgICAgICAgdmFsaWRhdG9yKTsKLQotICAgICAgSXRlcmF0b3IgaXQgPSByZWdpc3RyeS5nZXRFbGVtZW50TGlzdCgpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBRTmFtZSB0eXBlID0gKFFOYW1lKSBpdC5uZXh0KCk7Ci0gICAgICAgIGlmICh0eXBlLmdldExvY2FsUGFydCgpLnN0YXJ0c1dpdGgoIkFycmF5T2YiKSkKLSAgICAgICAgICBlcnJvcnMuYWRkKHR5cGUpOwotICAgICAgfQotCi0gICAgICBpZiAoIWVycm9ycy5pc0VtcHR5KCkpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfV0FSTklORzsKLSAgICAgICAgZmFpbHVyZURldGFpbCA9IHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZXJyb3JzLnRvU3RyaW5nKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgICB9Ci0KLSAgICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMTEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMTEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjlkOTQyZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTExLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRXJyb3JMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dDsKLQotCi0vKioKLSAqIEJQMjExMS4KLSAgICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZywgd2hpY2ggY29udGFpbnMgYSBkb2N1bWVudC1saXRlcmFsIHNvYXA6YmluZGluZzwvY29udGV4dD4KLSAgICogCi0gICAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5JZiB0aGUgInBhcnRzIiBhdHRyaWJ1dGUgaXMgcHJlc2VudCwgdGhlbiB0aGUgc29hcGJpbmQ6Ym9keSBlbGVtZW50KHMpIGhhdmUgYXQgbW9zdCBvbmUgcGFydCBsaXN0ZWQgaW4gdGhlIHBhcnRzIGF0dHJpYnV0ZS48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAyMTExIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjExMShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGRvY0xpdGVyYWxGb3VuZCA9IGZhbHNlOwotICBwcml2YXRlIEVycm9yTGlzdCBlcnJvcnMgPSBuZXcgRXJyb3JMaXN0KCk7Ci0KLSAgLyogCi0gICAqIFB1dCBpbiBjb250ZXh0IHNvYXAgYmluZGluZydzIHN0eWxlCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZywgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgU09BUEJpbmRpbmcgYmluZGluZywKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIFN0cmluZyBzdHlsZSA9Ci0gICAgICAoYmluZGluZy5nZXRTdHlsZSgpID09IG51bGwpCi0gICAgICAgID8gV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQwotICAgICAgICA6IGJpbmRpbmcuZ2V0U3R5bGUoKTsKLSAgICBjdHguYWRkUGFyYW1ldGVyKCJzdHlsZSIsIHN0eWxlKTsKLSAgfQotCi0gIC8qIAotICAgKiBWZXJpZnkgc3R5bGUgb2Ygc29hcCBvcGVyYXRpb24gaXMgImRvY3VtZW50IiBpZiBub3QgdGhlbiBpdCdzIGNhbmNlbGVkIHByb2Nlc3MuIAotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUE9wZXJhdGlvbiwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgIFNPQVBPcGVyYXRpb24gb3BlcmF0aW9uLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgU3RyaW5nIHN0eWxlID0gb3BlcmF0aW9uLmdldFN0eWxlKCk7Ci0gICAgaWYgKHN0eWxlID09IG51bGwpCi0gICAgICBzdHlsZSA9IChTdHJpbmcpIGN0eC5nZXRQYXJhbWV0ZXIoInN0eWxlIik7Ci0gICAgLy8gYXNzZXJ0IHN0eWxlICE9IG51bGwKLSAgICBpZiAoIVdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9ET0MuZXF1YWxzKHN0eWxlKSkKLSAgICAgIGN0eC5jYW5jZWxCaW5kaW5nT3BlcmF0aW9uUHJvY2Vzc2luZygpOwotICB9Ci0KLSAgLyogCi0gICAqIElmIHVzZSBvZiBzb2FwIGJvZHkgaXMgImxpdGVyYWwiIGFuZCBwYXJ0cyBvZiBzb2FwIGJvZHkgaXMgbW9yZSB0aGFuIG9uZSBpdCBjcmVhdGVzIGZhbHVyZSByZXBvcnQuIAotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHksIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChTT0FQQm9keSBib2R5LCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICAvLyBhc3NlcnQgc3R5bGUgPT0gImRvY3VtZW50IgotICAgIGlmIChXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JPRFlfVVNFX0xJVC5lcXVhbHMoYm9keS5nZXRVc2UoKSkpCi0gICAgewotICAgICAgZG9jTGl0ZXJhbEZvdW5kID0gdHJ1ZTsKLQotICAgICAgTGlzdCBwYXJ0cyA9IGJvZHkuZ2V0UGFydHMoKTsKLSAgICAgIGlmIChwYXJ0cyAhPSBudWxsICYmIHBhcnRzLnNpemUoKSA+IDEpCi0gICAgICAgIC8vaG93IHRvIHBpY2sgb3V0IG9uZSBib2R5IGZyb20gYW5vdGhlciBvbmUgPwkJCQkJCQotICAgICAgICBlcnJvcnMuYWRkKGJvZHkuZ2V0RWxlbWVudFR5cGUoKSwgYm9keS5nZXROYW1lc3BhY2VVUkkoKSk7Ci0gICAgfQotICB9Ci0KLSAgLyogCi0gICAqIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLQotICAgIFdTRExUcmF2ZXJzYWwgdHJhdmVyc2FsID0gbmV3IFdTRExUcmF2ZXJzYWwoKTsKLSAgICAvL1Zpc2l0b3JBZGFwdG9yLmFkYXB0KHRoaXMpOzsKLSAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcih0aGlzKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQQmluZGluZyh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQQm9keSh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQT3BlcmF0aW9uKHRydWUpOwotCi0gICAgdHJhdmVyc2FsLmlnbm9yZVJlZmVyZW5jZXMoKTsKLSAgICB0cmF2ZXJzYWwuaWdub3JlSW1wb3J0KCk7Ci0gICAgdHJhdmVyc2FsLnRyYXZlcnNlKChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpKTsKLQotICAgIGlmICghZXJyb3JzLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGVycm9ycy50b1N0cmluZygpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIGVsc2UgaWYgKCFkb2NMaXRlcmFsRm91bmQpCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotCi0gICAgZWxzZQotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjExMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjExMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjJiYzlmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMTIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keTsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVycm9yTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5XU0RMVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQ7Ci0KLQotLyoqCi0gKiBCUDIxMTIuCi0gICAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmJpbmRpbmcsIHdpdGggYSBzdHlsZSAicnBjIiBhdHRyaWJ1dGUgYW5kIGNvbnRhaW5pbmcgYXQgbGVhc3QgYSBzb2FwYmluZDpib2R5IGVsZW1lbnQ8L2NvbnRleHQ+Ci0gICAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5ObyB3c2RsOnBhcnQgcmVmZXJyZWQgYnkgc3VjaCBhIHNvYXBiaW5kOmJvZHkgZWxlbWVudCBpcyBkZWZpbmVkIHVzaW5nIHRoZSAiZWxlbWVudCIgYXR0cmlidXRlLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDIxMTIgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzVmlzaXRvciBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMTEyKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gcnBjTGl0ZXJhbEZvdW5kID0gZmFsc2U7Ci0gIHByaXZhdGUgRXJyb3JMaXN0IGVycm9ycyA9IG5ldyBFcnJvckxpc3QoKTsKLQotICAvKiAKLSAgICogUHV0IGluIGNvbnRleHQgc29hcCBiaW5kaW5nJ3Mgc3R5bGUKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLQotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBTT0FQQmluZGluZyBiaW5kaW5nLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgU3RyaW5nIHN0eWxlID0KLSAgICAgIChiaW5kaW5nLmdldFN0eWxlKCkgPT0gbnVsbCkKLSAgICAgICAgPyBXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JJTkRfU1RZTEVfRE9DCi0gICAgICAgIDogYmluZGluZy5nZXRTdHlsZSgpOwotICAgIGN0eC5hZGRQYXJhbWV0ZXIoImJpbmRpbmdTdHlsZSIsIHN0eWxlKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbiwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgIEJpbmRpbmdPcGVyYXRpb24gb3AsCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBjdHgucmVtb3ZlUGFyYW1ldGVyKCJvcGVyYXRpb25TdHlsZSIpOwotICB9Ci0KLSAgLyogCi0gICAqIFZlcmlmeSBzdHlsZSBvZiBzb2FwIG9wZXJhdGlvbiBpcyAicnBjIiBpZiBub3QgdGhlbiBpdCdzIGNhbmNlbGVkIHByb2Nlc3MuIAotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUE9wZXJhdGlvbiwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgIFNPQVBPcGVyYXRpb24gb3BlcmF0aW9uLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgY3R4LmFkZFBhcmFtZXRlcigib3BlcmF0aW9uU3R5bGUiLCBvcGVyYXRpb24uZ2V0U3R5bGUoKSk7Ci0gIH0KLQotICAvKiAKLSAgICogSWYgdXNlIG9mIHNvYXAgYm9keSBpcyAibGl0ZXJhbCIgYW5kIGlmIGF0IGxlYXN0IG9uZSBwYXJ0IGlzIGRlZmluZSB1c2luZyAiZWxlbWVudCIgYXR0cmlidXRlIGl0IGNyZWF0ZXMgZmFsdXJlIHJlcG9ydC4gICAgCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keSwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KFNPQVBCb2R5IGJvZHksIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIFN0cmluZyBvcFN0eWxlID0gKFN0cmluZykgY3R4LmdldFBhcmFtZXRlcigib3BlcmF0aW9uU3R5bGUiKTsKLSAgICBTdHJpbmcgYlN0eWxlID0gKFN0cmluZykgY3R4LmdldFBhcmFtZXRlcigiYmluZGluZ1N0eWxlIik7Ci0KLSAgICBpZiAoKG9wU3R5bGUgPT0gbnVsbAotICAgICAgICAmJiAhV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX1JQQy5lcXVhbHMoYlN0eWxlKSkKLSAgICAgIHx8IChvcFN0eWxlICE9IG51bGwgCi0gICAgICAJJiYgIVdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9SUEMuZXF1YWxzKG9wU3R5bGUpKSkKLSAgICB7Ci0gICAgICBjdHguY2FuY2VsQmluZGluZ09wZXJhdGlvblByb2Nlc3NpbmcoKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gYXNzZXJ0IHVzZSA9PSAibGl0ZXJhbCIKLSAgICBpZiAoV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CT0RZX1VTRV9MSVQuZXF1YWxzKGJvZHkuZ2V0VXNlKCkpKQotICAgIHsKLSAgICAgIHJwY0xpdGVyYWxGb3VuZCA9IHRydWU7Ci0KLSAgICAgIC8vIGZpbmQgY29ycmVzcG9uZGluZyBtZXNzYWdlCi0gICAgICBPcGVyYXRpb24gb3AgPSBjdHguZ2V0QmluZGluZ09wZXJhdGlvbigpLmdldE9wZXJhdGlvbigpOwotICAgICAgLy8gaWYgc29tZSBsaW5rcyBhcmUgYnJva2VuLCBjYW5jZWwgcHJvY2Vzc2luZwotICAgICAgaWYgKG9wID09IG51bGwKLSAgICAgICAgfHwgKHBhcmVudCBpbnN0YW5jZW9mIEJpbmRpbmdJbnB1dCAmJiBvcC5nZXRJbnB1dCgpID09IG51bGwpCi0gICAgICAgIHx8IChwYXJlbnQgaW5zdGFuY2VvZiBCaW5kaW5nT3V0cHV0ICYmIG9wLmdldE91dHB1dCgpID09IG51bGwpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAgIE1lc3NhZ2UgbSA9Ci0gICAgICAgIChwYXJlbnQgaW5zdGFuY2VvZiBCaW5kaW5nSW5wdXQpCi0gICAgICAgICAgPyBvcC5nZXRJbnB1dCgpLmdldE1lc3NhZ2UoKQotICAgICAgICAgIDogb3AuZ2V0T3V0cHV0KCkuZ2V0TWVzc2FnZSgpOwotICAgICAgLy8gUkVNT1ZFOiBjdXJyZW50IG1lc3NhZ2Ugc2hvdWxkIGVxdWFscyB0byBtZXNzYWdlIGdpdmVuIGFzIGVudHJ5Ci0gICAgICAvL2lmIChtID09IG51bGwgfHwgbWVzc2FnZSAhPSBtKQotICAgICAgaWYgKG0gPT0gbnVsbCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgICBMaXN0IHBhcnRzID0KLSAgICAgICAgV1NETFV0aWwuZ2V0UGFydHMoCi0gICAgICAgICAgb3AsCi0gICAgICAgICAgbSwKLSAgICAgICAgICBib2R5LAotICAgICAgICAgIFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9SUEMpOwotICAgICAgaWYgKHBhcnRzID09IG51bGwpCi0gICAgICAgIHJldHVybjsKLQotICAgICAgLyogY2hlY2sgd2hldGhlciBwYXJ0cyBsaXN0IGNvbnRhaW5zIGEgcGFydHMgd2hpY2ggdXNlcwotICAgICAgICogZWxlbWVudCBhdHRyaWJ1dGUuIElmIHNvLCBwYXJ0IG5hbWUgd2lsbCBiZSBhZGRlZCBpbnRvCi0gICAgICAgKiBlcnJvcnMgc2V0LgotICAgICAgICovCi0gICAgICBJdGVyYXRvciBpdCA9IHBhcnRzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBQYXJ0IHBhcnQgPSAoUGFydCkgaXQubmV4dCgpOwotICAgICAgICBpZiAocGFydC5nZXRFbGVtZW50TmFtZSgpICE9IG51bGwpCi0gICAgICAgICAgZXJyb3JzLmFkZChwYXJ0LmdldE5hbWUoKSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyogCi0gICAqIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAvLyBzYXZlIG1lc3NhZ2UgCi0gICAgLy9tZXNzYWdlID0gKE1lc3NhZ2UpZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgIFdTRExUcmF2ZXJzYWwgdHJhdmVyc2FsID0gbmV3IFdTRExUcmF2ZXJzYWwoKTsKLSAgICAvL1Zpc2l0b3JBZGFwdG9yLmFkYXB0KHRoaXMpOzsKLSAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcih0aGlzKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQQmluZGluZyh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRCaW5kaW5nT3BlcmF0aW9uKHRydWUpOwotICAgIHRyYXZlcnNhbC52aXNpdFNPQVBPcGVyYXRpb24odHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0U09BUEJvZHkodHJ1ZSk7Ci0KLSAgICB0cmF2ZXJzYWwuaWdub3JlUmVmZXJlbmNlcygpOwotICAgIHRyYXZlcnNhbC5pZ25vcmVJbXBvcnQoKTsKLQotICAgIHRyYXZlcnNhbC50cmF2ZXJzZSgoQmluZGluZykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKSk7Ci0KLSAgICBpZiAoIWVycm9ycy5pc0VtcHR5KCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlcnJvcnMudG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICBlbHNlIGlmICghcnBjTGl0ZXJhbEZvdW5kKQotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLQotICAgIGVsc2UKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMTMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMTMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQzMWNkYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTEzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlcjsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyRmF1bHQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVycm9yTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5XU0RMVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQ7Ci0KLQotLyoqCi0gKiBCUDIxMTMuCi0gICAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmJpbmRpbmcgZWxlbWVudDwvY29udGV4dD4KLSAgICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSBzb2FwYmluZDpoZWFkZXIsIHNvYXBiaW5kOmhlYWRlcmZhdWx0IGFuZCBzb2FwYmluZDpmYXVsdCBlbGVtZW50cyBvbmx5IHJlZmVyIHRvIHdzZGw6cGFydCBlbGVtZW50KHMpIHRoYXQgaGF2ZSBiZWVuIGRlZmluZWQgdXNpbmcgdGhlICJlbGVtZW50IiBhdHRyaWJ1dGUuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEJQMjExMyBleHRlbmRzIEFzc2VydGlvblByb2Nlc3NWaXNpdG9yIGltcGxlbWVudHMgV1NJVGFnCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDIxMTMoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHByaXZhdGUgRXJyb3JMaXN0IGVycm9ycyA9IG5ldyBFcnJvckxpc3QoKTsKLQotICAvKiAKLSAgICogVmVyaWZ5IHNvYXAgaGVhZGVyIHVzZXMgcGFydCBpcyBkZWZpbmUgdXNpbmcgImVsZW1lbnQiIGF0dHJpYnV0ZSAgIAotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlciwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgIFNPQVBIZWFkZXIgaGVhZGVyLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgRGVmaW5pdGlvbiBkID0gKERlZmluaXRpb24pIGN0eC5nZXRQYXJhbWV0ZXIoImRlZmluaXRpb24iKTsKLSAgICBNZXNzYWdlIG0gPSBkLmdldE1lc3NhZ2UoaGVhZGVyLmdldE1lc3NhZ2UoKSk7Ci0gICAgaWYgKG0gIT0gbnVsbCkKLSAgICAgIGNoZWNrUGFydChtLmdldFBhcnQoaGVhZGVyLmdldFBhcnQoKSksIGN0eC5nZXRCaW5kaW5nKCkpOwotICB9Ci0KLSAgLyogCi0gICAqIFZlcmlmeSBzb2FwIGhlYWRlcmZhdWx0IHVzZXMgcGFydCBpcyBkZWZpbmUgdXNpbmcgImVsZW1lbnQiIGF0dHJpYnV0ZQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgU09BUEhlYWRlckZhdWx0IGZhdWx0LAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgRGVmaW5pdGlvbiBkID0gKERlZmluaXRpb24pIGN0eC5nZXRQYXJhbWV0ZXIoImRlZmluaXRpb24iKTsKLSAgICBNZXNzYWdlIG0gPSBkLmdldE1lc3NhZ2UoZmF1bHQuZ2V0TWVzc2FnZSgpKTsKLSAgICAvLyBpZiBtZXNzYWdlIG9yIHBhcnQgaXMgbm90IGZvdW5kIC0gTk9UX0FQUExJQ0FCTEUgPz8/PwotICAgIGlmIChtICE9IG51bGwpCi0gICAgICBjaGVja1BhcnQobS5nZXRQYXJ0KGZhdWx0LmdldFBhcnQoKSksIGN0eC5nZXRCaW5kaW5nKCkpOwotICB9Ci0KLSAgLyogCi0gICAqIFZlcmlmeSBzb2FwIGZhdWx0IHVzZXMgcGFydCBpcyBkZWZpbmUgdXNpbmcgImVsZW1lbnQiIGF0dHJpYnV0ZQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoU09BUEZhdWx0IGZhdWx0LCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBTdHJpbmcgZmF1bHROYW1lID0gZmF1bHQuZ2V0TmFtZSgpOwotICAgIGlmIChmYXVsdE5hbWUgPT0gbnVsbCkKLSAgICAgIGZhdWx0TmFtZSA9IGN0eC5nZXRCaW5kaW5nRmF1bHQoKS5nZXROYW1lKCk7Ci0gICAgT3BlcmF0aW9uIG9wID0gY3R4LmdldEJpbmRpbmdPcGVyYXRpb24oKS5nZXRPcGVyYXRpb24oKTsKLSAgICBpZiAob3AgPT0gbnVsbCAvKiB8fCBmYXVsdE5hbWUgPT0gbnVsbCovCi0gICAgICApIC8vIG1heSBiZSBpdCdzIHBvc3NpYmxlIHRvIGhhdmUgbGVnYWwgZmF1bHQgd2l0aCBudWxsIG5hbWUKLSAgICAgIHJldHVybjsKLSAgICAvLyB3ZSBzdXBwb3NlIHRoYXQgU09BUEZhdWx0LmdldE5hbWUoKSBjb3JyZXNwb25kcyB0byB0aGUgYWJzdHJhY3Qgb3BlcmF0aW9uJ3MgZmF1bHQgbmFtZQkJCQotICAgIEZhdWx0IGYgPSBvcC5nZXRGYXVsdChmYXVsdE5hbWUpOwotICAgIGlmIChmID09IG51bGwpCi0gICAgICByZXR1cm47Ci0gICAgTWVzc2FnZSBtID0gZi5nZXRNZXNzYWdlKCk7Ci0gICAgLy8gbWVzc2FnZSBzaG91bGQgaGF2ZSBvbmx5IG9uZSBwYXJ0Ci0gICAgaWYgKG0gPT0gbnVsbCB8fCBtLmdldFBhcnRzKCkgPT0gbnVsbCB8fCBtLmdldFBhcnRzKCkuc2l6ZSgpICE9IDEpCi0gICAgICByZXR1cm47Ci0gICAgY2hlY2tQYXJ0KChQYXJ0KSBtLmdldE9yZGVyZWRQYXJ0cyhudWxsKS5nZXQoMCksIGN0eC5nZXRCaW5kaW5nKCkpOwotICB9Ci0KLSAgLyoKLSAgICogVmVyaWZ5IHBhcnQgaXMgZGVmaW5lIHVzaW5nICJlbGVtZW50IiBhdHRyaWJ1dGUuCi0gICAqIEBwYXJhbSBwIC0gcGFydAotICAgKiBAcGFyYW0gYiAtIGJpbmRpbmcKLSAgKi8KLSAgLy8gcmVmYWN0b3JpbmcKLSAgcHJpdmF0ZSB2b2lkIGNoZWNrUGFydChQYXJ0IHAsIEJpbmRpbmcgYikKLSAgewotICAgIGlmIChwICE9IG51bGwgJiYgcC5nZXRFbGVtZW50TmFtZSgpID09IG51bGwpCi0gICAgICBlcnJvcnMuYWRkKGIuZ2V0UU5hbWUoKSwgcC5nZXROYW1lKCkpOwotICB9Ci0KLSAgLyogCi0gICAqIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLQotICAgIFdTRExUcmF2ZXJzYWwgdHJhdmVyc2FsID0gbmV3IFdTRExUcmF2ZXJzYWwoKTsKLSAgICAvL1Zpc2l0b3JBZGFwdG9yLmFkYXB0KHRoaXMpOzsKLSAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcih0aGlzKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQSGVhZGVyKHRydWUpOwotICAgIHRyYXZlcnNhbC52aXNpdFNPQVBIZWFkZXJGYXVsdCh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQRmF1bHQodHJ1ZSk7Ci0KLSAgICBNYXAgbSA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgRGVmaW5pdGlvbiBkZWYgPSBlbnRyeUNvbnRleHQuZ2V0V1NETERvY3VtZW50KCkuZ2V0RGVmaW5pdGlvbnMoKTsKLSAgICBXU0RMVXRpbC5leHBhbmREZWZpbml0aW9uKGRlZik7Ci0gICAgbS5wdXQoImRlZmluaXRpb24iLCBkZWYpOwotICAgIHRyYXZlcnNhbC50cmF2ZXJzZSgoQmluZGluZykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKSwgbSk7Ci0KLSAgICBpZiAoIWVycm9ycy5pc0VtcHR5KCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlcnJvcnMudG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjExNC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjExNC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjU0OWQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMTQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5GYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5QYXJ0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRXJyb3JMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLldTRExVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dDsKLQotCi0vKioKLSAqIEJQMjExNC4KLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmJpbmRpbmcgZWxlbWVudDwvY29udGV4dD4KLSAqIAotICogCi0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+RXZlcnkgd3NkbDpwYXJ0IGZyb20gZWFjaCB3c2RsOm1lc3NhZ2UgaW4gdGhlIGFzc29jaWF0ZWQgCi0gKiB3c2RsOnBvcnRUeXBlIGlzIHJlZmVyZW5jZWQgZWl0aGVyIGJ5IHRoZSBzb2FwYmluZDpib2R5LCBzb2FwYmluZDpoZWFkZXIsIAotICogc29hcGJpbmQ6ZmF1bHQsIG9yIHNvYXBiaW5kOmhlYWRlcmZhdWx0LjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDIxMTQgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzVmlzaXRvciBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMTE0KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwcml2YXRlIEVycm9yTGlzdCBlcnJvcnMgPSBuZXcgRXJyb3JMaXN0KCk7Ci0gIC8vIG1hcCBNZXNzYWdlIFFOYW1lIC0+IHNldChQYXJ0IG5hbWUpCi0gIHB1YmxpYyBNYXAgbWVzc2FnZXMgPSBuZXcgSGFzaE1hcCgpOwotCi0gIC8qIAotICAgKiBBZGQgdG8gTWFwIHBhcnRzIHdoaWNoIHVzZWQgYnkgbWVzc2FnZQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5NZXNzYWdlLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoTWVzc2FnZSBtLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBpZiAobSAhPSBudWxsCi0gICAgICAmJiAhbWVzc2FnZXMuY29udGFpbnNLZXkobSkKLSAgICAgICYmIG0uZ2V0T3JkZXJlZFBhcnRzKG51bGwpICE9IG51bGwpCi0gICAgewotICAgICAgU2V0IHMgPSBuZXcgSGFzaFNldCgpOwotICAgICAgSXRlcmF0b3IgaXQgPSBtLmdldE9yZGVyZWRQYXJ0cyhudWxsKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgICAgcy5hZGQoKChQYXJ0KSBpdC5uZXh0KCkpLmdldE5hbWUoKSk7Ci0KLSAgICAgIC8vbWVzc2FnZXMucHV0KG0uZ2V0UU5hbWUoKSwgcyk7Ci0gICAgICBpZiAocy5zaXplKCkgPiAwKQotICAgICAgewotICAgICAgICBtZXNzYWdlcy5wdXQobS5nZXRRTmFtZSgpLCBzKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKiAKLSAgICogUHV0IGluIGNvbnRleHQgc3R5bGUgb2Ygc29hcCBiaW5kaW5nCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZywgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgIFNPQVBCaW5kaW5nIGJpbmRpbmcsCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBTdHJpbmcgc3R5bGUgPQotICAgICAgKGJpbmRpbmcuZ2V0U3R5bGUoKSA9PSBudWxsKQotICAgICAgICA/IFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9ET0MKLSAgICAgICAgOiBiaW5kaW5nLmdldFN0eWxlKCk7Ci0gICAgY3R4LmFkZFBhcmFtZXRlcigic3R5bGUiLCBzdHlsZSk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgU09BUE9wZXJhdGlvbiBvcGVyYXRpb24sCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBTdHJpbmcgc3R5bGUgPSBvcGVyYXRpb24uZ2V0U3R5bGUoKTsKLSAgICBpZiAoc3R5bGUgIT0gbnVsbCkKLSAgICAgIGN0eC5hZGRQYXJhbWV0ZXIoInN0eWxlIiwgc3R5bGUpOwotICB9Ci0KLSAgLyogCi0gICAqIFJlbW92ZSBwYXJ0cyBvZiBzb2FwIGJvZHkgZnJvbSBNYXAuICAKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoU09BUEJvZHkgYm9keSwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgLy8gU3RyaW5nIHN0eWxlID0gKFN0cmluZyljdHguZ2V0UGFyYW1ldGVyKCJzdHlsZSIpOwotCi0gICAgLy8gZmluZCBjb3JyZXNwb25kaW5nIG1lc3NhZ2UKLSAgICBPcGVyYXRpb24gb3AgPSBjdHguZ2V0QmluZGluZ09wZXJhdGlvbigpLmdldE9wZXJhdGlvbigpOwotICAgIC8vIGlmIHNvbWUgbGlua3MgYXJlIGJyb2tlbiwgY2FuY2VsIHByb2Nlc3NpbmcKLSAgICBpZiAob3AgPT0gbnVsbCkKLSAgICAgIHJldHVybjsKLSAgICBNZXNzYWdlIG0gPSBudWxsOwotICAgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBCaW5kaW5nSW5wdXQpCi0gICAgewotICAgICAgaWYgKG9wLmdldElucHV0KCkgPT0gbnVsbCkKLSAgICAgICAgcmV0dXJuOwotICAgICAgbSA9IG9wLmdldElucHV0KCkuZ2V0TWVzc2FnZSgpOwotICAgIH0KLSAgICBlbHNlIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBCaW5kaW5nT3V0cHV0KQotICAgIHsKLSAgICAgIGlmIChvcC5nZXRPdXRwdXQoKSA9PSBudWxsKQotICAgICAgICByZXR1cm47Ci0gICAgICBtID0gb3AuZ2V0T3V0cHV0KCkuZ2V0TWVzc2FnZSgpOwotICAgIH0KLSAgICBpZiAobSA9PSBudWxsKQotICAgICAgcmV0dXJuOwotCi0gICAgLy8gZ2V0IHBhcnRzCi0gICAgTGlzdCBwYXJ0cyA9IFdTRExVdGlsLmdldFBhcnRzKG9wLCBtLCBib2R5LCBudWxsKTsKLSAgICBpZiAocGFydHMgPT0gbnVsbCkKLSAgICAgIHJldHVybjsKLQotICAgIC8vIGl0ZXJhdGUgYWxsIHBhcnRzIGFuZCBjaGVjawotICAgIEl0ZXJhdG9yIGl0ID0gcGFydHMuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgcmVtb3ZlUGFydChtLmdldFFOYW1lKCksICgoUGFydCkgaXQubmV4dCgpKS5nZXROYW1lKCkpOwotICB9Ci0KLSAgLyogCi0gICAqIFJlbW92ZSBwYXJ0cyBvZiBzb2FwIGhlYWRlciBmcm9tIE1hcC4KLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXIsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBTT0FQSGVhZGVyIGhlYWRlciwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIC8vIHdlIHN1cHBvc2UgdGhhdCBpdCBwb3NzaWJsZSB0byBoYXZlIGxlZ2FsIG1lc3NhZ2UgYW5kIHBhcnQgd2l0aCBudWxsIG5hbWVzCi0gICAgLy8gQVRURU5USU9OCi0gICAgLy8gc2hvdWxkIHdlIGFkZCBtZXNzYWdlIHdoaWNoIGlzIHJlZmVyZW5jZWQgYnkgaGVhZGVyIG9yIGhlYWRlcmZhdWx0IHRvIG1lc3NhZ2VzID8KLSAgICByZW1vdmVQYXJ0KGhlYWRlci5nZXRNZXNzYWdlKCksIGhlYWRlci5nZXRQYXJ0KCkpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgU09BUEhlYWRlckZhdWx0IGZhdWx0LAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgLy8gd2Ugc3VwcG9zZSB0aGF0IGl0IHBvc3NpYmxlIHRvIGhhdmUgbGVnYWwgbWVzc2FnZSBhbmQgcGF0ciB3aXRoIG51bGwgbmFtZXMKLSAgICBRTmFtZSBtZXNzYWdlTmFtZSA9IGZhdWx0LmdldE1lc3NhZ2UoKTsKLSAgICBpZiAobWVzc2FnZU5hbWUgPT0gbnVsbCkKLSAgICAgIG1lc3NhZ2VOYW1lID0gY3R4LmdldFNPQVBIZWFkZXIoKS5nZXRNZXNzYWdlKCk7Ci0gICAgcmVtb3ZlUGFydChtZXNzYWdlTmFtZSwgZmF1bHQuZ2V0UGFydCgpKTsKLSAgfQotCi0gIC8qIAotICAgKiBSZW1vdmUgcGFydHMgb2Ygc29hcCBmYXVsdCBmcm9tIE1hcC4KLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdCwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KFNPQVBGYXVsdCBmYXVsdCwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgU3RyaW5nIGZhdWx0TmFtZSA9IGZhdWx0LmdldE5hbWUoKTsKLSAgICBpZiAoZmF1bHROYW1lID09IG51bGwpCi0gICAgICBmYXVsdE5hbWUgPSBjdHguZ2V0QmluZGluZ0ZhdWx0KCkuZ2V0TmFtZSgpOwotICAgIE9wZXJhdGlvbiBvcCA9IGN0eC5nZXRCaW5kaW5nT3BlcmF0aW9uKCkuZ2V0T3BlcmF0aW9uKCk7Ci0gICAgaWYgKG9wID09IG51bGwpCi0gICAgICByZXR1cm47Ci0KLSAgICAvLyB3ZSBzdXBwb3NlIHRoYXQgU09BUEZhdWx0LmdldE5hbWUoKSBjb3JyZXNwb25kcyB0byB0aGUgYWJzdHJhY3Qgb3BlcmF0aW9uJ3MgZmF1bHQgbmFtZSAgICAgICAgICAgCi0gICAgRmF1bHQgZiA9IG9wLmdldEZhdWx0KGZhdWx0TmFtZSk7Ci0KLSAgICAvLyBmYXVsdCBtZXNzYWdlIHNob3VsZCBoYXZlIDEgcGFydAotICAgIGlmIChmID09IG51bGwKLSAgICAgIHx8IGYuZ2V0TWVzc2FnZSgpID09IG51bGwKLSAgICAgIHx8IGYuZ2V0TWVzc2FnZSgpLmdldFBhcnRzKCkuc2l6ZSgpICE9IDEpCi0gICAgICByZXR1cm47Ci0KLSAgICBQYXJ0IHAgPSAoUGFydCkgZi5nZXRNZXNzYWdlKCkuZ2V0T3JkZXJlZFBhcnRzKG51bGwpLmdldCgwKTsKLSAgICByZW1vdmVQYXJ0KGYuZ2V0TWVzc2FnZSgpLmdldFFOYW1lKCksIHAuZ2V0TmFtZSgpKTsKLSAgfQotCi0gIC8qCi0gICAqIFJlbW92ZSBwYXJ0IGZyb20gTWFwLiAKLSAgKiBAcGFyYW0gbWVzc2FnZU5hbWUgLSBtZXNzYWdlCi0gICogQHBhcmFtIHBhcnROYW1lIC0gcGFydAotICAqLwotICAvLyByZWZhdG9yaW5nCi0gIHByaXZhdGUgdm9pZCByZW1vdmVQYXJ0KFFOYW1lIG1lc3NhZ2VOYW1lLCBTdHJpbmcgcGFydE5hbWUpCi0gIHsKLSAgICBTZXQgcGFydHMgPSAoU2V0KSBtZXNzYWdlcy5nZXQobWVzc2FnZU5hbWUpOwotICAgIGlmIChwYXJ0cyAhPSBudWxsKQotICAgIHsKLSAgICAgIHBhcnRzLnJlbW92ZShwYXJ0TmFtZSk7Ci0gICAgICBpZiAocGFydHMuc2l6ZSgpID09IDApCi0gICAgICAgIG1lc3NhZ2VzLnJlbW92ZShtZXNzYWdlTmFtZSk7Ci0gICAgfQotICB9Ci0KLSAgLyogCi0gICAqIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1dBUk5JTkc7Ci0KLSAgICBXU0RMVHJhdmVyc2FsIHRyYXZlcnNhbCA9IG5ldyBXU0RMVHJhdmVyc2FsKCk7Ci0gICAgLy9WaXNpdG9yQWRhcHRvci5hZGFwdCh0aGlzKTsKLSAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcih0aGlzKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRNZXNzYWdlKHRydWUpOwotICAgIHRyYXZlcnNhbC52aXNpdFNPQVBCaW5kaW5nKHRydWUpOwotICAgIHRyYXZlcnNhbC52aXNpdFNPQVBCb2R5KHRydWUpOwotICAgIHRyYXZlcnNhbC52aXNpdFNPQVBIZWFkZXIodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0U09BUEhlYWRlckZhdWx0KHRydWUpOwotICAgIHRyYXZlcnNhbC52aXNpdFNPQVBGYXVsdCh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQT3BlcmF0aW9uKHRydWUpOwotCi0gICAgQmluZGluZyBiID0gKEJpbmRpbmcpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0gICAgdHJhdmVyc2FsLnRyYXZlcnNlKGIpOwotCi0gICAgaWYgKG1lc3NhZ2VzLnNpemUoKSA+IDApCi0gICAgICBlcnJvcnMuYWRkKGIuZ2V0UU5hbWUoKSk7Ci0KLSAgICBpZiAoIWVycm9ycy5pc0VtcHR5KCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9XQVJOSU5HOwotICAgICAgZmFpbHVyZURldGFpbCA9IHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZXJyb3JzLnRvU3RyaW5nKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotCi0gICAgZWxzZQotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjExNS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjExNS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTk4Mjk4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMTUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZheC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgamF2YXgud3NkbC5QYXJ0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5FcnJvckxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVHlwZXNSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQ7Ci0KLQotLyoqCi0gKiBCUDIxMTUuCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDptZXNzYWdlPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPkFuICJlbGVtZW50IiBhdHRyaWJ1dGUgb24gYW55IHdzZGw6cGFydCBlbGVtZW50IHJlZmVycyB0byBhIGdsb2JhbCBlbGVtZW50IGRlY2xhcmF0aW9uLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDIxMTUgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzVmlzaXRvciBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMTE1KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwcml2YXRlIEVycm9yTGlzdCBlcnJvcnMgPSBuZXcgRXJyb3JMaXN0KCk7Ci0gIHByaXZhdGUgVHlwZXNSZWdpc3RyeSByZWdpc3RyeSA9IG51bGw7Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5QYXJ0LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoUGFydCBwYXJ0LCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBpZiAocGFydC5nZXRFbGVtZW50TmFtZSgpICE9IG51bGwKLSAgICAgICYmIHJlZ2lzdHJ5LmdldFR5cGUocGFydC5nZXRFbGVtZW50TmFtZSgpKSA9PSBudWxsKQotICAgIHsKLSAgICAgIGVycm9ycy5hZGQoY3R4LmdldE1lc3NhZ2UoKS5nZXRRTmFtZSgpKTsKLSAgICAgIGN0eC5jYW5jZWxNZXNzYWdlUHJvY2Vzc2luZygpOwotICAgIH0KLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLQotICAgIHJlZ2lzdHJ5ID0KLSAgICAgIG5ldyBUeXBlc1JlZ2lzdHJ5KAotICAgICAgICBlbnRyeUNvbnRleHQuZ2V0V1NETERvY3VtZW50KCkuZ2V0RGVmaW5pdGlvbnMoKSwKLSAgICAgICAgdmFsaWRhdG9yKTsKLQotICAgIFdTRExUcmF2ZXJzYWwgdHJhdmVyc2FsID0gbmV3IFdTRExUcmF2ZXJzYWwoKTsKLSAgICAvL1Zpc2l0b3JBZGFwdG9yLmFkYXB0KHRoaXMpOwotICAgIHRyYXZlcnNhbC5zZXRWaXNpdG9yKHRoaXMpOwotICAgIHRyYXZlcnNhbC52aXNpdFBhcnQodHJ1ZSk7Ci0KLSAgICB0cmF2ZXJzYWwuaWdub3JlUmVmZXJlbmNlcygpOwotICAgIHRyYXZlcnNhbC5pZ25vcmVJbXBvcnQoKTsKLSAgICB0cmF2ZXJzYWwudHJhdmVyc2UoKE1lc3NhZ2UpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCkpOwotCi0gICAgaWYgKCFlcnJvcnMuaXNFbXB0eSgpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZXJyb3JzLnRvU3RyaW5nKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotCi0gICAgZWxzZQotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjExNi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjExNi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTlmZjA5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMTYuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZheC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgamF2YXgud3NkbC5QYXJ0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5FcnJvckxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0OwotCi0KLS8qKgotICogQlAyMTE2LgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6bWVzc2FnZSBlbGVtZW50PC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSB3c2RsOm1lc3NhZ2UgZWxlbWVudCBkb2VzIG5vdCBjb250YWluIHBhcnQgZWxlbWVudHMgdGhhdCB1c2UgYm90aCAidHlwZSIgYW5kICJlbGVtZW50IiBhdHRyaWJ1dGVzLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDIxMTYgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzVmlzaXRvciBpbXBsZW1lbnRzIFdTSVRhZwotewotCi0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDIxMTYoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHByaXZhdGUgRXJyb3JMaXN0IGVycm9ycyA9IG5ldyBFcnJvckxpc3QoKTsKLQotICAvKiAobm9uLUphdmFkb2MpCi0gICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuUGFydCwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoUGFydCBwYXJ0LCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBpZiAocGFydC5nZXRFbGVtZW50TmFtZSgpICE9IG51bGwgJiYgcGFydC5nZXRUeXBlTmFtZSgpICE9IG51bGwpCi0gICAgewotICAgICAgZXJyb3JzLmFkZChjdHguZ2V0TWVzc2FnZSgpLmdldFFOYW1lKCkpOwotICAgICAgY3R4LmNhbmNlbE1lc3NhZ2VQcm9jZXNzaW5nKCk7Ci0gICAgfQotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLQotICAgIFdTRExUcmF2ZXJzYWwgdHJhdmVyc2FsID0gbmV3IFdTRExUcmF2ZXJzYWwoKTsKLSAgICAvL1Zpc2l0b3JBZGFwdG9yLmFkYXB0KHRoaXMpOwotICAgIHRyYXZlcnNhbC5zZXRWaXNpdG9yKHRoaXMpOwotICAgIHRyYXZlcnNhbC52aXNpdFBhcnQodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLmlnbm9yZVJlZmVyZW5jZXMoKTsKLSAgICB0cmF2ZXJzYWwuaWdub3JlSW1wb3J0KCk7Ci0gICAgdHJhdmVyc2FsLnRyYXZlcnNlKChNZXNzYWdlKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpKTsKLQotICAgIGlmICghZXJyb3JzLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGVycm9ycy50b1N0cmluZygpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTE3LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTE3LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3MDlmYTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjExNy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTgzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHk7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXI7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRXJyb3JMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dDsKLQotCi0vKioKLSAqIEJQMjExNy4KLSAgICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZyBlbGVtZW50LCByZWZlcnJlZCB0byBieSBhbiBycGMtbGl0ZXJhbCBzb2FwOmJpbmRpbmc8L2NvbnRleHQ+Ci0gICAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgcnBjLWxpdGVyYWwgYmluZGluZyBkb2VzIG5vdCBoYXZlIGEgbmFtZXNwYWNlIGF0dHJpYnV0ZSBzcGVjaWZpZWQgb24gYSBjb250YWluZWQgc29hcGJpbmQ6aGVhZGVyLCBzb2FwYmluZDpoZWFkZXJmYXVsdCwgYW5kIHNvYXBiaW5kOmZhdWx0IGVsZW1lbnQuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEJQMjExNyBleHRlbmRzIEFzc2VydGlvblByb2Nlc3NWaXNpdG9yIGltcGxlbWVudHMgV1NJVGFnCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDIxMTcoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBycGNMaXRlcmFsRm91bmQgPSBmYWxzZTsKLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JzID0gbmV3IEVycm9yTGlzdCgpOwotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgU09BUEJpbmRpbmcgYmluZGluZywKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIFN0cmluZyBzdHlsZSA9Ci0gICAgICAoYmluZGluZy5nZXRTdHlsZSgpID09IG51bGwpCi0gICAgICAgID8gV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQwotICAgICAgICA6IGJpbmRpbmcuZ2V0U3R5bGUoKTsKLSAgICBjdHguYWRkUGFyYW1ldGVyKCJzdHlsZSIsIHN0eWxlKTsKLSAgfQotCi0gIC8qIAotICAgKiBJZiB1c2Ugb2Ygc29hcCBib2R5IGlzICJsaXRlcmFsIiBhbmQgaWYgYXQgbGVhc3Qgb25lIHBhcnQgaXMgZGVmaW5lIHVzaW5nICJlbGVtZW50IiBhdHRyaWJ1dGUgaXQgY3JlYXRlcyBmYWx1cmUgcmVwb3J0LiAgICAKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoU09BUEJvZHkgYm9keSwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgLy8gYXNzZXJ0IHVzZSA9PSAibGl0ZXJhbCIKLSAgICBpZiAoV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CT0RZX1VTRV9MSVQuZXF1YWxzKGJvZHkuZ2V0VXNlKCkpCi0gICAgICAmJiAoKFN0cmluZykgY3R4LmdldFBhcmFtZXRlcigic3R5bGUiKSkuZXF1YWxzKAotICAgICAgICBXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JJTkRfU1RZTEVfUlBDKSkKLSAgICB7Ci0gICAgICBycGNMaXRlcmFsRm91bmQgPSB0cnVlOwotICAgIH0KLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb24sIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBTT0FQT3BlcmF0aW9uIG9wZXJhdGlvbiwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIFN0cmluZyBzdHlsZSA9IG9wZXJhdGlvbi5nZXRTdHlsZSgpOwotICAgIGlmIChzdHlsZSA9PSBudWxsKQotICAgICAgc3R5bGUgPSAoU3RyaW5nKSBjdHguZ2V0UGFyYW1ldGVyKCJzdHlsZSIpOwotCi0gICAgLy8gYXNzZXJ0IHN0eWxlICE9IG51bGwKLSAgICBpZiAoIVdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9SUEMuZXF1YWxzKHN0eWxlKSkKLSAgICAgIGN0eC5jYW5jZWxCaW5kaW5nT3BlcmF0aW9uUHJvY2Vzc2luZygpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlciwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgIFNPQVBIZWFkZXIgaGVhZGVyLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgY2hlY2soaGVhZGVyLmdldFVzZSgpLCBoZWFkZXIuZ2V0TmFtZXNwYWNlVVJJKCksIGN0eCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyRmF1bHQsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBTT0FQSGVhZGVyRmF1bHQgZmF1bHQsCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBjaGVjayhmYXVsdC5nZXRVc2UoKSwgZmF1bHQuZ2V0TmFtZXNwYWNlVVJJKCksIGN0eCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQRmF1bHQsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChTT0FQRmF1bHQgZmF1bHQsIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGNoZWNrKGZhdWx0LmdldFVzZSgpLCBmYXVsdC5nZXROYW1lc3BhY2VVUkkoKSwgY3R4KTsKLSAgfQotCi0gIC8vIHJlZmFjdG9yaW5nCi0gIC8vIGNoZWNrIExJVEVSQUwgdXNlIGFuZCAhPSBuYW1lc3BhY2UKLSAgLy8gY2FuY2VsaW5nIGZ1cnRoZXIgcHJvY2Vzc2luZwotICBwcml2YXRlIHZvaWQgY2hlY2soU3RyaW5nIHVzZSwgU3RyaW5nIG5hbWVzcGFjZSwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgaWYgKFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQk9EWV9VU0VfTElULmVxdWFscyh1c2UpCi0gICAgICAmJiBuYW1lc3BhY2UgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBlcnJvcnMuYWRkKGN0eC5nZXRCaW5kaW5nKCkuZ2V0UU5hbWUoKSk7Ci0gICAgICAvLyAgICAgICAgICAgICAgc3VwcHJlc3NlcyBzdWJzZXF1ZW50IHByb2Nlc3NpbmcsIGJlY2F1c2UgZXJyb3IgbGlzdCBjb250YWlucyBvbmx5IGZhaWxlZCBiaW5kaW5nCi0gICAgICBjdHguY2FuY2VsUHJvY2Vzc2luZygpOwotICAgIH0KLSAgfQotCi0gIC8qIFZhbGlkYXRlcyB0aGUgdGVzdCBhc3NlcnRpb24uCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLQotICAgIFdTRExUcmF2ZXJzYWwgdHJhdmVyc2FsID0gbmV3IFdTRExUcmF2ZXJzYWwoKTsKLSAgICAvL1Zpc2l0b3JBZGFwdG9yLmFkYXB0KHRoaXMpOwotICAgIHRyYXZlcnNhbC5zZXRWaXNpdG9yKHRoaXMpOwotICAgIHRyYXZlcnNhbC52aXNpdFNPQVBCaW5kaW5nKHRydWUpOwotICAgIHRyYXZlcnNhbC52aXNpdFNPQVBCb2R5KHRydWUpOwotICAgIHRyYXZlcnNhbC52aXNpdFNPQVBIZWFkZXIodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0U09BUEhlYWRlckZhdWx0KHRydWUpOwotICAgIHRyYXZlcnNhbC52aXNpdFNPQVBGYXVsdCh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQT3BlcmF0aW9uKHRydWUpOwotCi0gICAgdHJhdmVyc2FsLmlnbm9yZVJlZmVyZW5jZXMoKTsKLSAgICB0cmF2ZXJzYWwuaWdub3JlSW1wb3J0KCk7Ci0gICAgdHJhdmVyc2FsLnRyYXZlcnNlKChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpKTsKLQotICAgIGlmICghZXJyb3JzLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGVycm9ycy50b1N0cmluZygpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIGVsc2UgaWYgKCFycGNMaXRlcmFsRm91bmQpCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotCi0gICAgZWxzZQotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjExOC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjExOC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTRhNzMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMTguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVycm9yTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQ7Ci0KLQotLyoqCi0gKiBCUDIxMTguCi0gICAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmJpbmRpbmcgZWxlbWVudDwvY29udGV4dD4KLSAgICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSBsaXN0IChvciBzZXQpIG9mIHdzZGw6b3BlcmF0aW9uIGVsZW1lbnRzIGZvciB0aGUgY29udGFpbmVkIHdzZGw6YmluZGluZyBpcyB0aGUgc2FtZSBhcyB0aGUgbGlzdCBvZiB3c2RsOm9wZXJhdGlvbnMgZm9yIHRoZSByZWZlcnJlZCB3c2RsOnBvcnRUeXBlLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDIxMTggZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzVmlzaXRvciBpbXBsZW1lbnRzIFdTSVRhZwotewotCi0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDIxMTgoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHByaXZhdGUgRXJyb3JMaXN0IGVycm9ycyA9IG5ldyBFcnJvckxpc3QoKTsKLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLk9wZXJhdGlvbiwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KE9wZXJhdGlvbiBvcCwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgLy8gYXNzZXJ0IHBhcmVudCBpbnN0YW5jZW9mIEJpbmRpbmdPcGVyYXRpb24KLSAgICBpZiAob3AgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBlcnJvcnMuYWRkKGN0eC5nZXRCaW5kaW5nKCkuZ2V0UU5hbWUoKSk7Ci0gICAgICAvLwkJCQlzdXBwcmVzc2VzIHN1YnNlcXVlbnQgcHJvY2Vzc2luZywgYmVjYXVzZSBlcnJvciBsaXN0IGNvbnRhaW5zIG9ubHkgZmFpbGVkIGJpbmRpbmcKLSAgICAgIGN0eC5jYW5jZWxCaW5kaW5nUHJvY2Vzc2luZygpOwotICAgICAgY3R4LmNhbmNlbEJpbmRpbmdPcGVyYXRpb25Qcm9jZXNzaW5nKCk7Ci0gICAgfQotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotCi0gICAgQmluZGluZyBiID0gKEJpbmRpbmcpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0gICAgLy8gaWYgb3BlcmF0aW9ucyBjb3VudCBpbiBwb3J0IHR5cGUgYW5kIGJpbmRpbmcgaXMgZGlmZmVyIC0+IGVycm9yCi0gICAgaWYgKGIuZ2V0UG9ydFR5cGUoKSA9PSBudWxsCi0gICAgICB8fCBiLmdldFBvcnRUeXBlKCkuZ2V0T3BlcmF0aW9ucygpLnNpemUoKQotICAgICAgICAhPSBiLmdldEJpbmRpbmdPcGVyYXRpb25zKCkuc2l6ZSgpKQotICAgICAgZXJyb3JzLmFkZChiLmdldFFOYW1lKCkpOwotICAgIGVsc2UKLSAgICB7Ci0gICAgICBXU0RMVHJhdmVyc2FsIHRyYXZlcnNhbCA9IG5ldyBXU0RMVHJhdmVyc2FsKCk7Ci0gICAgICAvL1Zpc2l0b3JBZGFwdG9yLmFkYXB0KHRoaXMpOwotICAgICAgdHJhdmVyc2FsLnNldFZpc2l0b3IodGhpcyk7Ci0gICAgICB0cmF2ZXJzYWwudmlzaXRPcGVyYXRpb24odHJ1ZSk7Ci0gICAgICB0cmF2ZXJzYWwudHJhdmVyc2UoYik7Ci0gICAgfQotCi0gICAgaWYgKCFlcnJvcnMuaXNFbXB0eSgpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZXJyb3JzLnRvU3RyaW5nKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMTkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMTkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RlMWE4My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTE5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRXJyb3JMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dDsKLQotCi0vKioKLSAqIEJQMjExOS4KLSAgICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZywgd2hpY2ggaXMgb2YgdHlwZSBkb2N1bWVudC1saXRlcmFsPC9jb250ZXh0PgotICAgKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+SWYgaXQgZG9lcyBub3Qgc3BlY2lmeSB0aGUgcGFydHMgYXR0cmlidXRlIG9uIGEgc29hcGJpbmQ6Ym9keSBlbGVtZW50LCB0aGUgY29ycmVzcG9uZGluZyBhYnN0cmFjdCB3c2RsOm1lc3NhZ2UgZGVmaW5lcyB6ZXJvIG9yIG9uZSB3c2RsOnBhcnQuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEJQMjExOSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3NWaXNpdG9yIGltcGxlbWVudHMgV1NJVGFnCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDIxMTkoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBkb2NMaXRlcmFsRm91bmQgPSBmYWxzZTsKLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JzID0gbmV3IEVycm9yTGlzdCgpOwotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgU09BUEJpbmRpbmcgYmluZGluZywKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIFN0cmluZyBzdHlsZSA9Ci0gICAgICAoYmluZGluZy5nZXRTdHlsZSgpID09IG51bGwpCi0gICAgICAgID8gV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQwotICAgICAgICA6IGJpbmRpbmcuZ2V0U3R5bGUoKTsKLSAgICBjdHguYWRkUGFyYW1ldGVyKCJzdHlsZSIsIHN0eWxlKTsKLSAgfQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgU09BUE9wZXJhdGlvbiBvcGVyYXRpb24sCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBTdHJpbmcgc3R5bGUgPSBvcGVyYXRpb24uZ2V0U3R5bGUoKTsKLSAgICBpZiAoc3R5bGUgPT0gbnVsbCkKLSAgICAgIHN0eWxlID0gKFN0cmluZykgY3R4LmdldFBhcmFtZXRlcigic3R5bGUiKTsKLSAgICAvLyBhc3NlcnQgc3R5bGUgIT0gbnVsbAotICAgIGlmICghV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQy5lcXVhbHMoc3R5bGUpKQotICAgICAgY3R4LmNhbmNlbEJpbmRpbmdPcGVyYXRpb25Qcm9jZXNzaW5nKCk7Ci0gIH0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHksIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChTT0FQQm9keSBib2R5LCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBTdHJpbmcgdXNlID0KLSAgICAgIChib2R5LmdldFVzZSgpID09IG51bGwpCi0gICAgICAgID8gV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CT0RZX1VTRV9MSVQKLSAgICAgICAgOiBib2R5LmdldFVzZSgpOwotCi0gICAgLy8gYXNzZXJ0IHN0eWxlID09ICJkb2N1bWVudCIKLSAgICBpZiAoV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CT0RZX1VTRV9MSVQuZXF1YWxzKHVzZSkpCi0gICAgewotICAgICAgZG9jTGl0ZXJhbEZvdW5kID0gdHJ1ZTsKLSAgICAgIGlmIChib2R5LmdldFBhcnRzKCkgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgT3BlcmF0aW9uIG9wID0gY3R4LmdldEJpbmRpbmdPcGVyYXRpb24oKS5nZXRPcGVyYXRpb24oKTsKLSAgICAgICAgaWYgKG9wID09IG51bGwpCi0gICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIE1hcCBwYXJ0cyA9IG51bGw7Ci0gICAgICAgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBCaW5kaW5nSW5wdXQpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAob3AuZ2V0SW5wdXQoKSA9PSBudWxsIHx8IG9wLmdldElucHV0KCkuZ2V0TWVzc2FnZSgpID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgcGFydHMgPSBvcC5nZXRJbnB1dCgpLmdldE1lc3NhZ2UoKS5nZXRQYXJ0cygpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHBhcmVudCBpbnN0YW5jZW9mIEJpbmRpbmdPdXRwdXQpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAob3AuZ2V0T3V0cHV0KCkgPT0gbnVsbCB8fCBvcC5nZXRPdXRwdXQoKS5nZXRNZXNzYWdlKCkgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICBwYXJ0cyA9IG9wLmdldE91dHB1dCgpLmdldE1lc3NhZ2UoKS5nZXRQYXJ0cygpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHBhcnRzICE9IG51bGwgJiYgcGFydHMuc2l6ZSgpID4gMSkKLSAgICAgICAgewotICAgICAgICAgIGVycm9ycy5hZGQoY3R4LmdldEJpbmRpbmcoKS5nZXRRTmFtZSgpKTsKLSAgICAgICAgICAvLwkJCQkJCXN1cHByZXNzZXMgc3Vic2VxdWVudCBwcm9jZXNzaW5nLCBiZWNhdXNlIGVycm9yIGxpc3QgY29udGFpbnMgb25seSBmYWlsZWQgYmluZGluZwotICAgICAgICAgIGN0eC5jYW5jZWxCaW5kaW5nUHJvY2Vzc2luZygpOwotICAgICAgICAgIGN0eC5jYW5jZWxCaW5kaW5nT3BlcmF0aW9uUHJvY2Vzc2luZygpOwotICAgICAgICAgIGN0eC5jYW5jZWxCaW5kaW5nSW5wdXRQcm9jZXNzaW5nKCk7Ci0gICAgICAgICAgY3R4LmNhbmNlbEJpbmRpbmdPdXRwdXRQcm9jZXNzaW5nKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0KLSAgICBXU0RMVHJhdmVyc2FsIHRyYXZlcnNhbCA9IG5ldyBXU0RMVHJhdmVyc2FsKCk7Ci0gICAgLy9WaXNpdG9yQWRhcHRvci5hZGFwdCh0aGlzKTsKLSAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcih0aGlzKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQQmluZGluZyh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQQm9keSh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQT3BlcmF0aW9uKHRydWUpOwotICAgIHRyYXZlcnNhbC5pZ25vcmVJbXBvcnQoKTsKLSAgICB0cmF2ZXJzYWwudHJhdmVyc2UoKEJpbmRpbmcpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCkpOwotCi0gICAgaWYgKCFlcnJvcnMuaXNFbXB0eSgpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZXJyb3JzLnRvU3RyaW5nKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotCi0gICAgZWxzZSBpZiAoIWRvY0xpdGVyYWxGb3VuZCkKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0KLSAgICBlbHNlCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTIwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTIwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5MjcyODMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjEyMC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQ3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5QYXJ0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRXJyb3JMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLldTRExVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dDsKLQotCi0vKioKLSAqIEJQMjEyMC4KLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmJpbmRpbmc8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+RWFjaCBvcGVyYXRpb24gcmVmZXJlbmNlZCBieSB0aGUgYmluZGluZyByZXN1bHRzIGluIGEgdW5pcXVlIHdpcmUgc2lnbmF0dXJlLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDIxMjAgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzVmlzaXRvciBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMTIwKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwcml2YXRlIEVycm9yTGlzdCBlcnJvcnMgPSBuZXcgRXJyb3JMaXN0KCk7Ci0gIHByaXZhdGUgU2V0IHdhcmVzID0gbmV3IEhhc2hTZXQoKTsKLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZywgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgIFNPQVBCaW5kaW5nIGJpbmRpbmcsCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBTdHJpbmcgc3R5bGUgPQotICAgICAgKGJpbmRpbmcuZ2V0U3R5bGUoKSA9PSBudWxsKQotICAgICAgICA/IFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9ET0MKLSAgICAgICAgOiBiaW5kaW5nLmdldFN0eWxlKCk7Ci0gICAgY3R4LmFkZFBhcmFtZXRlcigic3R5bGUiLCBzdHlsZSk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgU09BUE9wZXJhdGlvbiBvcGVyYXRpb24sCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBTdHJpbmcgc3R5bGUgPSBvcGVyYXRpb24uZ2V0U3R5bGUoKTsKLSAgICBpZiAoc3R5bGUgIT0gbnVsbCkKLSAgICAgIGN0eC5hZGRQYXJhbWV0ZXIoInN0eWxlIiwgc3R5bGUpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHksIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChTT0FQQm9keSBib2R5LCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBMaXN0IHNpZ25hdHVyZSA9IG5ldyBMaW5rZWRMaXN0KCk7Ci0KLSAgICBTdHJpbmcgc3R5bGUgPSAoU3RyaW5nKSBjdHguZ2V0UGFyYW1ldGVyKCJzdHlsZSIpOwotCi0gICAgLy8gZmluZCBjb3JyZXNwb25kaW5nIG1lc3NhZ2UKLSAgICBPcGVyYXRpb24gb3AgPSBjdHguZ2V0QmluZGluZ09wZXJhdGlvbigpLmdldE9wZXJhdGlvbigpOwotCi0gICAgLy8gaWYgc29tZSBsaW5rcyBhcmUgYnJva2VuLCBjYW5jZWwgcHJvY2Vzc2luZwotICAgIGlmIChvcCA9PSBudWxsCi0gICAgICB8fCBvcC5nZXRJbnB1dCgpID09IG51bGwKLSAgICAgIHx8IG9wLmdldElucHV0KCkuZ2V0TWVzc2FnZSgpID09IG51bGwpCi0gICAgICByZXR1cm47Ci0gICAgTWVzc2FnZSBtID0gb3AuZ2V0SW5wdXQoKS5nZXRNZXNzYWdlKCk7Ci0KLSAgICBMaXN0IHBhcnRzID0gV1NETFV0aWwuZ2V0UGFydHMob3AsIG0sIGJvZHksIHN0eWxlKTsKLSAgICBpZiAocGFydHMgPT0gbnVsbCkKLSAgICAgIHJldHVybjsKLSAgICAvLyAhISBBVFRFTlRJT04KLSAgICAvLyBtYXkgYmUgcmVxdWlyZWQgdG8gYWRkIHR5cGVzIGluc3RlYWQgb2YgcGFydCBpbnRvIHNpZ25hdHVyZSA/Ci0KLSAgICAvLyBjcmVhdGUgc2lnbmF0dXJlCi0gICAgc2lnbmF0dXJlLmFkZEFsbChwYXJ0cyk7Ci0KLSAgICAvLyBzdXBwb3NlIHRoYXQgd2lyZSBzaWduYXR1cmUgZm9yCi0gICAgLy8gLSBycGMgc3R5bGUgPSBvcGVyYXRpb24gbmFtZSArIHBhcnRzJyBxbmFtZQotICAgIC8vIC0gZG9jdW1lbnQgc3R5bGUgPSBwYXJ0cycgcW5hbWUKLSAgICBpZiAoV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX1JQQy5lcXVhbHMoc3R5bGUpKQotICAgICAgc2lnbmF0dXJlLmFkZCgwLCBvcC5nZXROYW1lKCkpOwotCi0gICAgaWYgKHNhbWVTaWduYXR1cmUod2FyZXMsIHNpZ25hdHVyZSkpCi0gICAgICBlcnJvcnMuYWRkKG9wLmdldE5hbWUoKSk7Ci0gICAgZWxzZQotICAgICAgd2FyZXMuYWRkKHNpZ25hdHVyZSk7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2sgaWYgdGhlIHNpZ25hdHVyZSBpcyBpbiB0aGUgc2V0IG1hdGNoLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIHNhbWVTaWduYXR1cmUoU2V0IHNpZ25hdHVyZVNldCwgTGlzdCBzaWduYXR1cmUpCi0gIHsKLSAgICBib29sZWFuIHNhbWUgPSBmYWxzZTsKLQotICAgIC8vIEdldCBpdGVyYXRvciBmb3Igc2V0Ci0gICAgSXRlcmF0b3Igc2V0ID0gc2lnbmF0dXJlU2V0Lml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKHNldC5oYXNOZXh0KCkgJiYgIXNhbWUpCi0gICAgewotICAgICAgLy8gR2V0IG5leHQgc2lnbmF0dXJlIGZyb20gdGhlIHNldAotICAgICAgTGlzdCBuZXh0U2lnbmF0dXJlID0gKExpc3QpIHNldC5uZXh0KCk7Ci0KLSAgICAgIC8vIE9ubHkgY29udGludWUgaWYgdGhlIHNpZ25hdHVyZXMgYXJlIHRoZSBzYW1lIHNpemUKLSAgICAgIGlmIChuZXh0U2lnbmF0dXJlLnNpemUoKSA9PSBzaWduYXR1cmUuc2l6ZSgpKQotICAgICAgewotICAgICAgICBJdGVyYXRvciBpdGVyYXRvcjEgPSBuZXh0U2lnbmF0dXJlLml0ZXJhdG9yKCk7Ci0gICAgICAgIEl0ZXJhdG9yIGl0ZXJhdG9yMiA9IHNpZ25hdHVyZS5pdGVyYXRvcigpOwotCi0gICAgICAgIC8vIEFzc3VtZSBzYW1lIHVudGlsIGEgZGlmZmVyZW5jZSBpcyBmb3VuZAotICAgICAgICBzYW1lID0gdHJ1ZTsKLQotICAgICAgICAvLyBQcm9jZXNzIGVhY2ggbGlzdCB1bnRpbCBhIGRpZmZlcmVuY2UgaXMgZm91bmQKLSAgICAgICAgd2hpbGUgKGl0ZXJhdG9yMS5oYXNOZXh0KCkgJiYgaXRlcmF0b3IyLmhhc05leHQoKSAmJiBzYW1lKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gR2V0IHRoZSBuZXh0IGVsZW1lbnRzCi0gICAgICAgICAgT2JqZWN0IGVsZW1lbnQxID0gaXRlcmF0b3IxLm5leHQoKTsKLSAgICAgICAgICBPYmplY3QgZWxlbWVudDIgPSBpdGVyYXRvcjIubmV4dCgpOwotCi0gICAgICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgYSBzdHJpbmcsIHRoZW4gaWYgZXF1YWwgY2hlY2sgcGFydHMKLSAgICAgICAgICBpZiAoKGVsZW1lbnQxIGluc3RhbmNlb2YgU3RyaW5nKQotICAgICAgICAgICAgJiYgKGVsZW1lbnQyIGluc3RhbmNlb2YgU3RyaW5nKQotICAgICAgICAgICAgJiYgKCgoU3RyaW5nKSBlbGVtZW50MSkuZXF1YWxzKChTdHJpbmcpIGVsZW1lbnQyKSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgc2FtZSA9IHRydWU7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgLy8gSWYgdGhlIGVsZW1lbnRzIGFyZSBwYXJ0cywgdGhlbiBjaGVjayBpZiB0aGV5IGFyZSBlcXVhbAotICAgICAgICAgIGVsc2UgaWYgKChlbGVtZW50MSBpbnN0YW5jZW9mIFBhcnQpICYmIChlbGVtZW50MiBpbnN0YW5jZW9mIFBhcnQpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHNhbWUgPSBzYW1lUGFydHMoKFBhcnQpIGVsZW1lbnQxLCAoUGFydCkgZWxlbWVudDIpOwotICAgICAgICAgIH0KLQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBzYW1lID0gZmFsc2U7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHNhbWU7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2sgaWYgdHdvIHBhcnRzIGFyZSB0aGUgc2FtZS4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBzYW1lUGFydHMoUGFydCBwYXJ0MSwgUGFydCBwYXJ0MikKLSAgewotICAgIGJvb2xlYW4gc2FtZSA9IGZhbHNlOwotCi0gICAgLy8gSWYgdGhlIHBhcnQgaGFzIGFuIGVsZW1lbnQgdGhlbiBzZWUgaWYgdGhleSBhcmUgdGhlIHNhbWUKLSAgICBpZiAocGFydDEuZ2V0RWxlbWVudE5hbWUoKSAhPSBudWxsCi0gICAgICAmJiBwYXJ0Mi5nZXRFbGVtZW50TmFtZSgpICE9IG51bGwKLSAgICAgICYmIHBhcnQxLmdldEVsZW1lbnROYW1lKCkuZXF1YWxzKHBhcnQyLmdldEVsZW1lbnROYW1lKCkpKQotICAgIHsKLSAgICAgIHNhbWUgPSB0cnVlOwotICAgIH0KLQotICAgIC8vIElmIHRoZSBwYXJ0IGhhcyBhbiB0eXBlIHRoZW4gc2VlIGlmIHRoZXkgYXJlIHRoZSBzYW1lCi0gICAgZWxzZSBpZiAoCi0gICAgICBwYXJ0MS5nZXRUeXBlTmFtZSgpICE9IG51bGwKLSAgICAgICAgJiYgcGFydDIuZ2V0VHlwZU5hbWUoKSAhPSBudWxsCi0gICAgICAgICYmIHBhcnQxLmdldFR5cGVOYW1lKCkuZXF1YWxzKHBhcnQyLmdldFR5cGVOYW1lKCkpKQotICAgIHsKLSAgICAgIHNhbWUgPSB0cnVlOwotICAgIH0KLQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBzYW1lID0gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHNhbWU7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0KLSAgICBXU0RMVHJhdmVyc2FsIHRyYXZlcnNhbCA9IG5ldyBXU0RMVHJhdmVyc2FsKCk7Ci0gICAgLy9WaXNpdG9yQWRhcHRvci5hZGFwdCh0aGlzKTsKLSAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcih0aGlzKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQQmluZGluZyh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQQm9keSh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQT3BlcmF0aW9uKHRydWUpOwotICAgIHRyYXZlcnNhbC5pZ25vcmVCaW5kaW5nT3V0cHV0KCk7Ci0gICAgdHJhdmVyc2FsLnRyYXZlcnNlKChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpKTsKLQotICAgIC8vICEhIEFUVEVOVElPTgotICAgIC8vIEFuYWx5emUgc29hcGJpbmQ6Ym9keTpuYW1lc3BhY2UgYW5kIHNlcnZpY2UgdGFyZ2V0TmFtZXNwYWNlICAgICAgICAgICAgCi0gICAgaWYgKCFlcnJvcnMuaXNFbXB0eSgpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZXJyb3JzLnRvU3RyaW5nKCksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMjEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMjEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmFkNTk0YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTIxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keTsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVycm9yTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5UeXBlc1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLldTRExVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dDsKLQotCi0vKioKLSAqIEJQMjEyMS4KLSAqIENvbnRleHQ6Ci0gKiBGb3IgIGEgd3NkbDpiaW5kaW5nIGVsZW1lbnQgd2hpY2ggaXMgcmVmZXJlbmNlZCBkaXJlY3RseSBvciBhc3NvY2lhdGVkCi0gKiB3aXRoIGEgc3BlY2lmaWVkIHdzZGw6cG9ydC4KLSAqIAotICogQXNzZXJ0aW9uIERlc2NyaXB0aW9uOgotICogRWFjaCAgb3BlcmF0aW9uIHJlZmVyZW5jZWQgYnkgYSBkb2N1bWVudC1saXRlcmFsIGJpbmRpbmcgbXVzdCBoYXZlIGEKLSAqIG1lc3NhZ2UgZGVmaW5pdGlvbiB3aGVyZSB0aGUgd3NkbDpwYXJ0IHJlZmVyZW5jZXMgYSBnbG9iYWwgZWxlbWVudAotICogZGVmaW5pdGlvbi4KLSAqLwotcHVibGljIGNsYXNzIEJQMjEyMSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3NWaXNpdG9yIGltcGxlbWVudHMgV1NJVGFnCi17Ci0KLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjEyMShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JzID0gbmV3IEVycm9yTGlzdCgpOwotICBwcml2YXRlIFR5cGVzUmVnaXN0cnkgcmVnaXN0cnkgPSBudWxsOwotCi0gIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgIFNPQVBCaW5kaW5nIGJpbmRpbmcsCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBTdHJpbmcgc3R5bGUgPQotICAgICAgKGJpbmRpbmcuZ2V0U3R5bGUoKSA9PSBudWxsKQotICAgICAgICA/IFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9ET0MKLSAgICAgICAgOiBiaW5kaW5nLmdldFN0eWxlKCk7Ci0gICAgY3R4LmFkZFBhcmFtZXRlcigic3R5bGUiLCBzdHlsZSk7Ci0gIH0KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgU09BUE9wZXJhdGlvbiBvcGVyYXRpb24sCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBTdHJpbmcgc3R5bGUgPSBvcGVyYXRpb24uZ2V0U3R5bGUoKTsKLSAgICBpZiAoc3R5bGUgPT0gbnVsbCkKLSAgICAgIHN0eWxlID0gKFN0cmluZykgY3R4LmdldFBhcmFtZXRlcigic3R5bGUiKTsKLSAgICAvLyBhc3NlcnQgc3R5bGUgIT0gbnVsbAotICAgIGlmICghV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQy5lcXVhbHMoc3R5bGUpKQotICAgICAgY3R4LmNhbmNlbEJpbmRpbmdPcGVyYXRpb25Qcm9jZXNzaW5nKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdChTT0FQQm9keSBib2R5LCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICAvLyAhISBBVFRFTlRJT04KLSAgICAvLyB3ZSBzdXBwb3NlIHRoYXQgc29hcGJvZHkgY2hpbGQgZWxlbWVudHMgaXMgaXRzIHBhcnRzLgotICAgIC8vIGFzc2VydCBzdHlsZSA9PSAiZG9jdW1lbnQiCi0gICAgaWYgKFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQk9EWV9VU0VfTElULmVxdWFscyhib2R5LmdldFVzZSgpKSkKLSAgICB7Ci0gICAgICAvLyBmaW5kIGNvcnJlc3BvbmRpbmcgbWVzc2FnZQotICAgICAgT3BlcmF0aW9uIG9wID0gY3R4LmdldEJpbmRpbmdPcGVyYXRpb24oKS5nZXRPcGVyYXRpb24oKTsKLSAgICAgIC8vIGlmIHNvbWUgbGlua3MgYXJlIGJyb2tlbiwgY2FuY2VsIHByb2Nlc3NpbmcKLSAgICAgIGlmIChvcCA9PSBudWxsCi0gICAgICAgIHx8IChwYXJlbnQgaW5zdGFuY2VvZiBCaW5kaW5nSW5wdXQgJiYgb3AuZ2V0SW5wdXQoKSA9PSBudWxsKQotICAgICAgICB8fCAocGFyZW50IGluc3RhbmNlb2YgQmluZGluZ091dHB1dCAmJiBvcC5nZXRPdXRwdXQoKSA9PSBudWxsKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgICBNZXNzYWdlIG0gPQotICAgICAgICAocGFyZW50IGluc3RhbmNlb2YgQmluZGluZ0lucHV0KQotICAgICAgICAgID8gb3AuZ2V0SW5wdXQoKS5nZXRNZXNzYWdlKCkKLSAgICAgICAgICA6IG9wLmdldE91dHB1dCgpLmdldE1lc3NhZ2UoKTsKLSAgICAgIGlmIChtID09IG51bGwpCi0gICAgICAgIHJldHVybjsKLQotICAgICAgLy8gZmluZCBwYXJ0cyB3aGljaCBhcmUgaW52b2x2ZWQgaW4gdGhlIGdpdmVuIGJvZHkKLSAgICAgIExpc3QgcGFydHMgPQotICAgICAgICBXU0RMVXRpbC5nZXRQYXJ0cygKLSAgICAgICAgICBvcCwKLSAgICAgICAgICBtLAotICAgICAgICAgIGJvZHksCi0gICAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQyk7Ci0gICAgICBpZiAocGFydHMgPT0gbnVsbCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgICAvLyBjaGVjayBwYXJ0cwotICAgICAgSXRlcmF0b3IgaXQgPSBwYXJ0cy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgUGFydCBwID0gKFBhcnQpIGl0Lm5leHQoKTsKLSAgICAgICAgLy8gY2hlY2sgd2hldGhlciBwIGRlY2xhcmVkIGFzIGdsb2JhbCBlbGVtZW50Ci0gICAgICAgIGlmIChwLmdldEVsZW1lbnROYW1lKCkgPT0gbnVsbAotICAgICAgICAgIHx8IHJlZ2lzdHJ5LmdldFR5cGUocC5nZXRFbGVtZW50TmFtZSgpKSA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgZXJyb3JzLmFkZChvcC5nZXROYW1lKCkpOwotICAgICAgICAgIC8vCQkJCQkJc3VwcHJlc3NlcyBzdWJzZXF1ZW50IHByb2Nlc3NpbmcsIGJlY2F1c2UgZXJyb3IgbGlzdCBjb250YWlucyBvbmx5IGZhaWxlZCBvcGVyYXRpb24KLSAgICAgICAgICBjdHguY2FuY2VsQmluZGluZ09wZXJhdGlvblByb2Nlc3NpbmcoKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0KLSAgICByZWdpc3RyeSA9Ci0gICAgICBuZXcgVHlwZXNSZWdpc3RyeSgKLSAgICAgICAgZW50cnlDb250ZXh0LmdldFdTRExEb2N1bWVudCgpLmdldERlZmluaXRpb25zKCksCi0gICAgICAgIHZhbGlkYXRvcik7Ci0KLSAgICAvLyBjb2xsZWN0IGFsbCB0eXBlcyBmcm9tIG1lc3NhZ2VzIHRvIGNoZWNrZWRQYXJ0cyBtYXAKLSAgICBXU0RMVHJhdmVyc2FsIHRyYXZlcnNhbCA9IG5ldyBXU0RMVHJhdmVyc2FsKCk7Ci0gICAgLy9WaXNpdG9yQWRhcHRvci5hZGFwdCh0aGlzKTsKLSAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcih0aGlzKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQQmluZGluZyh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQQm9keSh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRTT0FQT3BlcmF0aW9uKHRydWUpOwotICAgIHRyYXZlcnNhbC5pZ25vcmVSZWZlcmVuY2VzKCk7Ci0gICAgdHJhdmVyc2FsLmlnbm9yZUltcG9ydCgpOwotICAgIHRyYXZlcnNhbC50cmF2ZXJzZSgoQmluZGluZykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKSk7Ci0KLSAgICBpZiAoIWVycm9ycy5pc0VtcHR5KCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlcnJvcnMudG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjEyMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjEyMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNmNhZjExLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIxMjIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuVHlwZXM7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRXJyb3JMaXN0OwotCi0KLS8qKgotICogQlAyMTIyLiAKLSAqICAgIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOnR5cGVzIGVsZW1lbnQ8L2NvbnRleHQ+Ci0gKiAgICA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIGRhdGEgdHlwZSBkZWZpbml0aW9uIGlmIGFueSB3aXRoaW4gdGhlIHdzZGw6dHlwZXMgZWxlbWVudCBpcyBhbiBYTUwgc2NoZW1hIGRlZmluaXRpb24gZGVmaW5lZCBpbiB0aGUgWE1MIFNjaGVtYSAxLjAgUmVjb21tZW5kYXRpb24gd2l0aCB0aGUgbmFtZXNwYWNlIFVSSSAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDIxMjIgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDIxMjIoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUoVGVzdEFzc2VydGlvbiwgRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICBFcnJvckxpc3QgZXJyb3JMaXN0ID0gbmV3IEVycm9yTGlzdCgpOwotCi0gICAgLy8gR2V0IHRoZSB0eXBlcyBmcm9tIHRoZSBlbnRyeSBjb250ZXh0Ci0gICAgVHlwZXMgdHlwZXMgPSAoVHlwZXMpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0KLSAgICBpZiAodHlwZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtZW50OwotICAgICAgTGlzdCBleHRFbGVtZW50cyA9IHR5cGVzLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotCi0gICAgICAvLyBQcm9jZXNzIGVhY2ggZXh0LiBlbGVtZW50Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4dEVsZW1lbnRzLnNpemUoKTsgaSsrKQotICAgICAgewotICAgICAgICAvLyBJZiBpdCBpcyBhbiB1bmtub3duIGV4dC4gZWxlbWVudCBhbmQgaXQgaXMgYSBzY2hlbWEsIHRoZW4gY2hlY2sgaXQKLSAgICAgICAgaWYgKChleHRFbGVtZW50ID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBleHRFbGVtZW50cy5nZXQoaSkpCi0gICAgICAgICAgaW5zdGFuY2VvZiBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIWV4dEVsZW1lbnQuZ2V0RWxlbWVudFR5cGUoKS5lcXVhbHMoV1NJVGFnLkVMRU1fWFNEX1NDSEVNQSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gSWYgaXQgaXMgbm90IGEgc2NoZW1hIGRlZmluaXRpb24sIHRoZW4gaXQgaXMgYW4gZXJyb3IKLSAgICAgICAgICAgIGVycm9yTGlzdC5hZGQoCi0gICAgICAgICAgICAgIGV4dEVsZW1lbnQuZ2V0RWxlbWVudFR5cGUoKS50b1N0cmluZygpCi0gICAgICAgICAgICAgICAgKyAiIGNhbiBub3QgYmUgYSBjaGlsZCBvZiB0aGUgd3NkbDp0eXBlcyBlbGVtZW50LiIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIC8vIElmIFhNTFNjaGVtYVZhbGlkYXRvciBjb3VsZCBub3QgZmluZCBhbnkgZXJyb3JzLCBjaGVjayBlcnJvcnMgZnJvbSB0aGUgaW5saW5lIHNjaGVtYSB2YWxpZGF0b3IKLSAgICBpZiAoZXJyb3JMaXN0LmlzRW1wdHkoKSkKLSAgICAgIGVycm9yTGlzdC5hZGQodmFsaWRhdG9yLndzZGxEb2N1bWVudC5nZXRTY2hlbWFzVmFsaWRhdGlvbkVycm9ycygpKTsKLQotICAgIGlmICghZXJyb3JMaXN0LmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGVycm9yTGlzdC50b1N0cmluZygpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTIzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMTIzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmNWY4MzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjEyMy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5GYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLklucHV0OwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLk91dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiBCUDIxMjMuIAotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6ZGVmaW5pdGlvbnMsIGlmIGl0IGNvbnRhaW5zIGEgd3NkbDpwb3J0LCB3c2RsOmJpbmRpbmcsIHdzZGw6cG9ydFR5cGUsIHdzZGw6b3BlcmF0aW9uLCBvciB3c2RsOm1lc3NhZ2U8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+Q29udGFpbmVkIFdTREwgZXh0ZW5zaW9uIGVsZW1lbnRzIGRvIG5vdCB1c2UgdGhlIHdzZGw6cmVxdWlyZWQgYXR0cmlidXRlIHZhbHVlIG9mICJ0cnVlIi48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAyMTIzIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IgaW1wbGVtZW50cyBXU0lUYWcKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjEyMyhXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGNsYWltRm91bmQgPSBmYWxzZTsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUE9SVF9LRVkgPSAicG9ydCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCSU5ESU5HX0tFWSA9ICJiaW5kaW5nIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBPUlRfVFlQRV9LRVkgPSAicG9ydCB0eXBlIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE9QRVJBVElPTl9LRVkgPSAib3BlcmF0aW9uIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE1FU1NBR0VfS0VZID0gIm1lc3NhZ2UiOwotCi0gIC8qIChub24tSmF2YWRvYykKLSAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5Qb3J0LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChQb3J0IHBvcnQsIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGlmIChwb3J0ICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKGNvbnRhaW5zTGVnYWxDbGFpbShwb3J0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpKQotICAgICAgewotICAgICAgICBjbGFpbUZvdW5kID0gdHJ1ZTsKLSAgICAgICAgY3R4LmFkZFBhcmFtZXRlcihQT1JUX0tFWSwgQm9vbGVhbi5UUlVFKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgY3R4LmFkZFBhcmFtZXRlcihQT1JUX0tFWSwgQm9vbGVhbi5GQUxTRSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5CaW5kaW5nLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoQmluZGluZyBiaW5kaW5nLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBpZiAoYmluZGluZyAhPSBudWxsKQotICAgIHsKLSAgICAgIEJvb2xlYW4gcG9ydCA9IChCb29sZWFuKSBjdHguZ2V0UGFyYW1ldGVyKFBPUlRfS0VZKTsKLQotICAgICAgaWYgKHBvcnQuYm9vbGVhblZhbHVlKCkpCi0gICAgICB7Ci0gICAgICAgIGN0eC5hZGRQYXJhbWV0ZXIoQklORElOR19LRVksIEJvb2xlYW4uVFJVRSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGNsYWltRm91bmQgPSBjb250YWluc0NsYWltKGJpbmRpbmcuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgICAgIGN0eC5hZGRQYXJhbWV0ZXIoCi0gICAgICAgICAgQklORElOR19LRVksCi0gICAgICAgICAgbmV3IEJvb2xlYW4oY29udGFpbnNMZWdhbENsYWltKGJpbmRpbmcuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSkpKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLlBvcnRUeXBlLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoUG9ydFR5cGUgdHlwZSwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgaWYgKHR5cGUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBCb29sZWFuIGJpbmRpbmcgPSAoQm9vbGVhbikgY3R4LmdldFBhcmFtZXRlcihCSU5ESU5HX0tFWSk7Ci0KLSAgICAgIGlmIChiaW5kaW5nLmJvb2xlYW5WYWx1ZSgpKQotICAgICAgewotICAgICAgICBjdHguYWRkUGFyYW1ldGVyKFBPUlRfVFlQRV9LRVksIEJvb2xlYW4uVFJVRSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGNsYWltRm91bmQgPSBjb250YWluc0NsYWltKHR5cGUuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgICAgIGN0eC5hZGRQYXJhbWV0ZXIoCi0gICAgICAgICAgUE9SVF9UWVBFX0tFWSwKLSAgICAgICAgICBuZXcgQm9vbGVhbihjb250YWluc0xlZ2FsQ2xhaW0odHlwZS5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKSkpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuT3BlcmF0aW9uLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgT3BlcmF0aW9uIG9wZXJhdGlvbiwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGlmIChvcGVyYXRpb24gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBCb29sZWFuIHR5cGUgPSAoQm9vbGVhbikgY3R4LmdldFBhcmFtZXRlcihQT1JUX1RZUEVfS0VZKTsKLQotICAgICAgaWYgKHR5cGUuYm9vbGVhblZhbHVlKCkpCi0gICAgICB7Ci0gICAgICAgIGN0eC5hZGRQYXJhbWV0ZXIoT1BFUkFUSU9OX0tFWSwgQm9vbGVhbi5UUlVFKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgY2xhaW1Gb3VuZCA9IGNvbnRhaW5zQ2xhaW0ob3BlcmF0aW9uLmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotICAgICAgICBjdHguYWRkUGFyYW1ldGVyKAotICAgICAgICAgIE9QRVJBVElPTl9LRVksCi0gICAgICAgICAgbmV3IEJvb2xlYW4oCi0gICAgICAgICAgICBjb250YWluc0xlZ2FsQ2xhaW0ob3BlcmF0aW9uLmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpKSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5NZXNzYWdlLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoTWVzc2FnZSBtZXNzYWdlLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBpZiAobWVzc2FnZSAhPSBudWxsKQotICAgIHsKLSAgICAgIEJvb2xlYW4gb3BlcmF0aW9uID0gKEJvb2xlYW4pIGN0eC5nZXRQYXJhbWV0ZXIoT1BFUkFUSU9OX0tFWSk7Ci0KLSAgICAgIGlmIChvcGVyYXRpb24uYm9vbGVhblZhbHVlKCkpCi0gICAgICB7Ci0gICAgICAgIGN0eC5hZGRQYXJhbWV0ZXIoTUVTU0FHRV9LRVksIEJvb2xlYW4uVFJVRSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGNsYWltRm91bmQgPSBjb250YWluc0NsYWltKG1lc3NhZ2UuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgICAgIGN0eC5hZGRQYXJhbWV0ZXIoCi0gICAgICAgICAgTUVTU0FHRV9LRVksCi0gICAgICAgICAgbmV3IEJvb2xlYW4oY29udGFpbnNMZWdhbENsYWltKG1lc3NhZ2UuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSkpKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKgotICBwdWJsaWMgdm9pZCB2aXNpdChCaW5kaW5nT3BlcmF0aW9uIG9wZXJhdGlvbiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KSB7Ci0gIAlpZiAob3BlcmF0aW9uICE9IG51bGwpIHsKLSAgCQlpZiAoY29udGFpbnNMZWdhbENsYWltKG9wZXJhdGlvbi5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKSkgewotICAJCQlTeXN0ZW0ub3V0LnByaW50bG4oImJpbmRpbmcgb3BlcmF0aW9uIGZvdW5kIik7Ci0gIAkJfSBlbHNlIHsKLSAgCQkJCi0gIAkJfQotICAJfQotICB9Ci0gICovCi0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLQotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBlbCwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGJvb2xlYW4gcmVxdWlyZWQgPQotICAgICAgZWwgIT0gbnVsbAotICAgICAgICAmJiBlbC5nZXRSZXF1aXJlZCgpICE9IG51bGwKLSAgICAgICAgJiYgZWwuZ2V0UmVxdWlyZWQoKS5ib29sZWFuVmFsdWUoKTsKLQotICAgIGlmIChpc1BhcmVudENvbmZvcm1zKHBhcmVudCwgY3R4KSkKLSAgICB7Ci0gICAgICBpZiAocmVxdWlyZWQpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfV0FSTklORzsKLSAgICAgICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgPSBlbC50b1N0cmluZygpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcGFyZW50IGVsZW1lbnQgY29uZm9ybXMgdG8gdGhlIGJhc2ljIHByb2ZpbGUuCi0gICAqIEBwYXJhbSBwYXJlbnQKLSAgICogQHBhcmFtIGN0eAotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBpc1BhcmVudENvbmZvcm1zKE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0KLSAgICBpZiAocGFyZW50IGluc3RhbmNlb2YgUG9ydCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSAoKEJvb2xlYW4pIGN0eC5nZXRQYXJhbWV0ZXIoUE9SVF9LRVkpKS5ib29sZWFuVmFsdWUoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoCi0gICAgICBwYXJlbnQgaW5zdGFuY2VvZiBCaW5kaW5nCi0gICAgICAgIHx8IHBhcmVudCBpbnN0YW5jZW9mIEJpbmRpbmdPcGVyYXRpb24KLSAgICAgICAgfHwgcGFyZW50IGluc3RhbmNlb2YgQmluZGluZ0lucHV0Ci0gICAgICAgIHx8IHBhcmVudCBpbnN0YW5jZW9mIEJpbmRpbmdPdXRwdXQKLSAgICAgICAgfHwgcGFyZW50IGluc3RhbmNlb2YgQmluZGluZ0ZhdWx0KQotICAgIHsKLSAgICAgIHJlc3VsdCA9ICgoQm9vbGVhbikgY3R4LmdldFBhcmFtZXRlcihCSU5ESU5HX0tFWSkpLmJvb2xlYW5WYWx1ZSgpOwotICAgIH0KLSAgICBlbHNlIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBQb3J0VHlwZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSAoKEJvb2xlYW4pIGN0eC5nZXRQYXJhbWV0ZXIoUE9SVF9UWVBFX0tFWSkpLmJvb2xlYW5WYWx1ZSgpOwotICAgIH0KLSAgICBlbHNlIGlmICgKLSAgICAgIHBhcmVudCBpbnN0YW5jZW9mIE9wZXJhdGlvbgotICAgICAgICB8fCBwYXJlbnQgaW5zdGFuY2VvZiBJbnB1dAotICAgICAgICB8fCBwYXJlbnQgaW5zdGFuY2VvZiBPdXRwdXQKLSAgICAgICAgfHwgcGFyZW50IGluc3RhbmNlb2YgRmF1bHQpCi0gICAgewotICAgICAgcmVzdWx0ID0gKChCb29sZWFuKSBjdHguZ2V0UGFyYW1ldGVyKE9QRVJBVElPTl9LRVkpKS5ib29sZWFuVmFsdWUoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAocGFyZW50IGluc3RhbmNlb2YgTWVzc2FnZSB8fCBwYXJlbnQgaW5zdGFuY2VvZiBQYXJ0KQotICAgIHsKLSAgICAgIHJlc3VsdCA9ICgoQm9vbGVhbikgY3R4LmdldFBhcmFtZXRlcihNRVNTQUdFX0tFWSkpLmJvb2xlYW5WYWx1ZSgpOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKFRlc3RBc3NlcnRpb24sIEVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICAvLyBFeHBlY3Qgd3NkbDpkZWZpbnRpb25zCi0gICAgRGVmaW5pdGlvbiBkZWYgPSAoRGVmaW5pdGlvbikgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLSAgICAvLygoU2VydmljZSlkZWYuZ2V0U2VydmljZXMoKS52YWx1ZXMoKS50b0FycmF5KClbMF0pLmdldFBvcnRzKCkKLSAgICAvLyBUcmF2ZXJzZSBXU0RMCi0gICAgV1NETFRyYXZlcnNhbCB0cmF2ZXJzYWwgPSBuZXcgV1NETFRyYXZlcnNhbCgpOwotICAgIC8vIFZpc2l0b3JBZGFwdG9yLmFkYXB0KHRoaXMpOwotICAgIHRyYXZlcnNhbC5zZXRWaXNpdG9yKHRoaXMpOwotICAgIHRyYXZlcnNhbC52aXNpdE9wZXJhdGlvbih0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRCaW5kaW5nKHRydWUpOwotICAgIHRyYXZlcnNhbC52aXNpdE1lc3NhZ2UodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0UG9ydCh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRQb3J0VHlwZSh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRFeHRlbnNpYmlsaXR5RWxlbWVudCh0cnVlKTsKLQotICAgIHRyYXZlcnNhbC5pZ25vcmVJbXBvcnQoKTsKLSAgICB0cmF2ZXJzYWwuaWdub3JlRGVmaW5pdGlvbjJCaW5kaW5nKCk7Ci0gICAgdHJhdmVyc2FsLmlnbm9yZURlZmluaXRpb24yRWxlbWVudCgpOwotICAgIHRyYXZlcnNhbC5pZ25vcmVEZWZpbml0aW9uMkV4dGVuc2liaWxpdHlFbGVtZW50KCk7Ci0gICAgdHJhdmVyc2FsLmlnbm9yZURlZmluaXRpb24yTWVzc2FnZSgpOwotICAgIHRyYXZlcnNhbC5pZ25vcmVEZWZpbml0aW9uMlBvcnRUeXBlKCk7Ci0gICAgdHJhdmVyc2FsLmlnbm9yZURlZmluaXRpb24yVHlwZXMoKTsKLQotICAgIHRyYXZlcnNhbC50cmF2ZXJzZShkZWYpOwotCi0gICAgaWYgKCFjbGFpbUZvdW5kKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotCi0gICAgZWxzZSBpZiAocmVzdWx0LmVxdWFscyhBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1dBUk5JTkcpKQotICAgIHsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGZhaWx1cmVEZXRhaWxNZXNzYWdlLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2sgdGhlIGRvY3VtZW50YXRpb24gZWxlbWVudCB3aGV0aGVyIGNvbnRhaW5zIGNvbmZvcm1hbmNlIGNsYWltcy4KLSAgICogUmV0dXJucyB0cnVlIGlmIGRvY3VtZW50YXRpb24gZWxlbWVudCBjb250YWlucyBjb25mb3JtYW5jZSBjbGFpbSB3aXRoCi0gICAqIGxlZ2FsIHNjaGVtYSBkZWZpbml0aW9uIFVSSS4gCi0gICAqIGxlZ2FsIGlzICdodHRwOi8vd3MtaS5vcmcvc2NoZW1hcy9jb25mb3JtYW5jZUNsYWltLycKLSAgICogQHBhcmFtIGVsCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGNvbnRhaW5zQ2xhaW0oRWxlbWVudCBlbCkKLSAgewotICAgIGlmIChlbCA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8vIGZpbmQgY2xhaW0KLSAgICBlbCA9IFhNTFV0aWxzLmZpbmRDaGlsZEVsZW1lbnQoZWwsIFdTSV9DTEFJTSk7Ci0gICAgaWYgKGVsICE9IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVjayB0aGUgZG9jdW1lbnRhdGlvbiBlbGVtZW50IHdoZXRoZXIgY29udGFpbnMgY29uZm9ybWFuY2UgY2xhaW1zLgotICAgKiBSZXR1cm5zIHRydWUgaWYgZG9jdW1lbnRhdGlvbiBlbGVtZW50IGNvbnRhaW5zIGNvbmZvcm1hbmNlIGNsYWltIHdpdGgKLSAgICogbGVnYWwgc2NoZW1hIGRlZmluaXRpb24gVVJJLiAKLSAgICogbGVnYWwgaXMgJ2h0dHA6Ly93cy1pLm9yZy9zY2hlbWFzL2NvbmZvcm1hbmNlQ2xhaW0vJwotICAgKiBAcGFyYW0gZWwKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gY29udGFpbnNMZWdhbENsYWltKEVsZW1lbnQgZWwpCi0gIHsKLSAgICBpZiAoZWwgPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyBmaW5kIGNsYWltCi0gICAgZWwgPSBYTUxVdGlscy5maW5kQ2hpbGRFbGVtZW50KGVsLCBXU0lfQ0xBSU0pOwotICAgIHdoaWxlIChlbCAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyB2YWx1ZSA9IGVsLmdldEF0dHJpYnV0ZShBVFRSX0NMQUlNX0NPTkZPUk1TVE8uZ2V0TG9jYWxQYXJ0KCkpOwotICAgICAgaWYgKHZhbHVlICE9IG51bGwKLSAgICAgICAgJiYgdmFsdWUuZXF1YWxzSWdub3JlQ2FzZShXU0lDb25zdGFudHMuQVRUUlZBTF9VRERJX0NMQUlNX0tFWVZBTFVFKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0KLSAgICAgIGVsID0gWE1MVXRpbHMuZmluZEVsZW1lbnQoZWwsIFdTSV9DTEFJTSk7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIyMDEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIyMDEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI0ZGRmYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMjAxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotCi1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci0KLS8qKgotICogQlAyMjAxLiAKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSBXZWIgc2VydmljZSBkZWZpbml0aW9uIHdpdGhpbiBhIFdTREwgZG9jdW1lbnQgd2l0aCBhIFhNTCBkZWNsYXJhdGlvbiBzdGF0ZW1lbnQuIDwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgWE1MIGRlY2xhcmF0aW9uIHN0YXRlbWVudCB1c2VzIFVURi04IG9yIFVURi0xNiBmb3IgdGhlIGVuY29kaW5nLiA8L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAyMjAxIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMjAxKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIGNoYXJbXSBPTU1JVEVEX1hNTF9ERUNMQVJBVElPTl9ERUxJTUlURVJTID0gbmV3IGNoYXJbXXsweDIwLAotICAgICAgMHg5LCAweEQsIDB4QSwgJ1wnJywgJ1wiJ307Ci0gIHByaXZhdGUgZmluYWwgY2hhcltdIFhNTF9ERUNMQVJBVElPTl9ERUxJTUlURVJTID0gbmV3IGNoYXJbXXsnPSd9OwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBVVEZfOF9FTkNPRElORyA9ICJVVEYtOCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFVURl8xNl9FTkNPRElORyA9ICJVVEYtMTYiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBFTkNPRElOR19UT0tFTiA9ICJlbmNvZGluZyI7Ci0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLAotICAgKiAgICAgIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKQotICAgICAgICAuZ2V0RW50cnlEZXRhaWwoKTsKLSAgICBTdHJpbmcgbG9jYXRpb24gPSBkZWZpbml0aW9uLmdldERvY3VtZW50QmFzZVVSSSgpOwotICAgIFN0cmluZyB4bWxEZWNsID0gcmVhZFhNTERlY2xhcmF0aW9uU3RhdGVtZW50KGxvY2F0aW9uKTsKLSAgICBpZiAoeG1sRGVjbCA9PSBudWxsKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfSBlbHNlCi0gICAgewotICAgICAgaWYgKCF2YWxpZEVuY29kaW5nKHhtbERlY2wpKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKHhtbERlY2wsIGVudHJ5Q29udGV4dCk7Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotICAvKioKLSAgICogUmVhZHMgYW4gWE1MIGRlY2xhcmF0aW9uIHN0YXRlbWVudC4KLSAgICogCi0gICAqIEBwYXJhbSBsb2NhdGlvbgotICAgKiBAcmV0dXJuIFN0cmluZwotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgcmVhZFhNTERlY2xhcmF0aW9uU3RhdGVtZW50KFN0cmluZyBsb2NhdGlvbikKLSAgewotICAgIFN0cmluZyByZXN1bHQgPSBudWxsOwotICAgIGlmIChsb2NhdGlvbiAhPSBudWxsKQotICAgIHsKLSAgICAgIFVSTCB1cmwgPSBudWxsOwotICAgICAgUmVhZGVyIHJlYWRlciA9IG51bGw7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICB1cmwgPSBuZXcgVVJMKGxvY2F0aW9uKTsKLSAgICAgICAgfSBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyB3ZSBzaG91bGQgdHJ5IHRvIGFjY2VzcyBsb2NhdGlvbiBhcyBmaWxlCi0gICAgICAgIH0KLSAgICAgICAgaWYgKHVybCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgcmVhZGVyID0gbmV3IElucHV0U3RyZWFtUmVhZGVyKHVybC5vcGVuU3RyZWFtKCkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHJlYWRlciA9IG5ldyBJbnB1dFN0cmVhbVJlYWRlcihuZXcgRmlsZUlucHV0U3RyZWFtKGxvY2F0aW9uKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaW50IGNoYXJDb2RlOwotICAgICAgICBib29sZWFuIGVuZCA9IGZhbHNlOwotICAgICAgICBpZiAocmVhZGVyLnJlYWR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBjaGFyQ29kZSA9IHJlYWRlci5yZWFkKCk7Ci0gICAgICAgICAgd2hpbGUgKHJlYWRlci5yZWFkeSgpICYmICEoY2hhckNvZGUgPT0gJzwnKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBjaGFyQ29kZSA9IHJlYWRlci5yZWFkKCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNoYXJbXSBjID0gbmV3IGNoYXJbNF07Ci0gICAgICAgICAgcmVhZGVyLnJlYWQoYyk7Ci0gICAgICAgICAgU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgICBpZiAobmV3IFN0cmluZyhjKS50b0xvd2VyQ2FzZSgpLmVxdWFscygiP3htbCIpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGJ1Zi5hcHBlbmQoIjw/eG1sIik7Ci0gICAgICAgICAgICB3aGlsZSAocmVhZGVyLnJlYWR5KCkgJiYgIWVuZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2hhckNvZGUgPSByZWFkZXIucmVhZCgpOwotICAgICAgICAgICAgICBidWYuYXBwZW5kKChjaGFyKSBjaGFyQ29kZSk7Ci0gICAgICAgICAgICAgIGVuZCA9IGNoYXJDb2RlID09ICc+JzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBOT1RFOiBUaGlzIHJlc3VsdCBkb2VzIG5vdCBnZXQgcHJvcG9nYXRlZCBiYWNrIQotICAgICAgICAgICAgdGhpcy5yZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgfQotICAgICAgICAgIHJlc3VsdCA9IGJ1Zi50b1N0cmluZygpOwotICAgICAgICB9Ci0gICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgLy9WRVJCT1NFCi0gICAgICAgIGlmICh2YWxpZGF0b3IudmVyYm9zZU9wdGlvbikKLSAgICAgICAgewotICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiICBbV1NJMjIwMV0gRXhjZXB0aW9uOiAiICsgZS5nZXRNZXNzYWdlKCkpOwotICAgICAgICB9Ci0gICAgICB9IGZpbmFsbHkKLSAgICAgIHsKLSAgICAgICAgaWYgKHJlYWRlciAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgcmVhZGVyLmNsb3NlKCk7Ci0gICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIGUpCi0gICAgICAgICAgewotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0gIC8qCi0gICAqIFZlcmlmeSB4bWwgZGVjbGFyYXRpb24gY29udGFpbnMgdXRmLTE2IG9yIHV0Zi04IGVuY29kaW5nLiBAcGFyYW0geG1sRGVjbCAtCi0gICAqIHhtbCBkZWNsYXJhdGlvbiBAcmV0dXJuCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gdmFsaWRFbmNvZGluZyhTdHJpbmcgeG1sRGVjbCkKLSAgewotICAgIC8vYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLSAgICBib29sZWFuIHJlc3VsdCA9IHRydWU7Ci0gICAgaWYgKHhtbERlY2wgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKAotICAgICAgICAgIE9NTUlURURfWE1MX0RFQ0xBUkFUSU9OX0RFTElNSVRFUlMsIFhNTF9ERUNMQVJBVElPTl9ERUxJTUlURVJTKTsKLSAgICAgIEVudW1lcmF0aW9uIHRva2VucyA9IHN0LnBhcnNlKHhtbERlY2wpOwotICAgICAgYm9vbGVhbiBmb3VuZCA9IGZhbHNlOwotICAgICAgd2hpbGUgKHRva2Vucy5oYXNNb3JlRWxlbWVudHMoKSAmJiAhZm91bmQpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyB0b2tlbiA9IChTdHJpbmcpIHRva2Vucy5uZXh0RWxlbWVudCgpOwotICAgICAgICBpZiAodG9rZW4uZXF1YWxzKEVOQ09ESU5HX1RPS0VOKSkKLSAgICAgICAgewotICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICB0b2tlbnMubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgICBTdHJpbmcgZW5jID0gKFN0cmluZykgdG9rZW5zLm5leHRFbGVtZW50KCk7Ci0gICAgICAgICAgcmVzdWx0ID0gVVRGXzhfRU5DT0RJTkcuZXF1YWxzSWdub3JlQ2FzZShlbmMpCi0gICAgICAgICAgICAgIHx8IFVURl8xNl9FTkNPRElORy5lcXVhbHNJZ25vcmVDYXNlKGVuYyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjIwMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjIwMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZWVkMGQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDIyMDIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLlR5cGVzOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVycm9yTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotCi0vKioKLSAqIEJQMjIwMi4KLSAqICA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDp0eXBlcyBlbGVtZW50IHdpdGhpbiBhIFdTREwgZG9jdW1lbnQgd2hpY2ggaW1wb3J0cyBhbiBYTUwgc2NoZW1hIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkuPC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSBpbXBvcnRlZCBzY2hlbWEgdXNlcyBVVEYtOCBvciBVVEYtMTYgZm9yIHRoZSBlbmNvZGluZy48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAyMjAyIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcyBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyMjAyKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwcml2YXRlIEVycm9yTGlzdCBlcnJvcnMgPSBuZXcgRXJyb3JMaXN0KCk7Ci0gIHByaXZhdGUgYm9vbGVhbiBpbXBvcnRGb3VuZCA9IGZhbHNlOwotCi0gIHByaXZhdGUgZmluYWwgY2hhcltdIE9NTUlURURfWE1MX0RFQ0xBUkFUSU9OX0RFTElNSVRFUlMgPQotICAgIG5ldyBjaGFyW10geyAweDIwLCAweDksIDB4RCwgMHhBLCAnXCcnLCAnXCInIH07Ci0gIHByaXZhdGUgZmluYWwgY2hhcltdIFhNTF9ERUNMQVJBVElPTl9ERUxJTUlURVJTID0gbmV3IGNoYXJbXSB7ICc9JyB9OwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBVVEZfOF9FTkNPRElORyA9ICJVVEYtOCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFVURl8xNl9FTkNPRElORyA9ICJVVEYtMTYiOwotCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEVOQ09ESU5HX1RPS0VOID0gImVuY29kaW5nIjsKLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotCi0gICAgLy9EZWZpbml0aW9uIGRlZiA9IChEZWZpbml0aW9uKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotICAgIFR5cGVzIHR5cGVzID0gKFR5cGVzKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotICAgIExpc3QgZXh0cyA9IG51bGw7Ci0gICAgLy9pZiAoZGVmLmdldFR5cGVzKCkgIT0gbnVsbCkKLSAgICBpZiAodHlwZXMgIT0gbnVsbCkKLSAgICAgIC8vZXh0cyA9IGRlZi5nZXRUeXBlcygpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgZXh0cyA9IHR5cGVzLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgIGlmIChleHRzICE9IG51bGwpCi0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gbnVsbDsKLSAgICAgIGlmICgoZGVmaW5pdGlvbiA9Ci0gICAgICAgIHZhbGlkYXRvci5hbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldERlZmluaXRpb24odHlwZXMpKQotICAgICAgICA9PSBudWxsKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKCJDb3VsZCBub3QgZmluZCB0eXBlcyBkZWZpbml0aW9uIGluIGFueSBXU0RMIGRvY3VtZW50LiIpOwotICAgICAgfQotCi0gICAgICBJdGVyYXRvciBpdCA9IGV4dHMuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGVsID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBpdC5uZXh0KCk7Ci0gICAgICAgIGlmIChlbCBpbnN0YW5jZW9mIFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudAotICAgICAgICAgICYmIGVsLmdldEVsZW1lbnRUeXBlKCkuZXF1YWxzKEVMRU1fWFNEX1NDSEVNQSkpCi0gICAgICAgICAgc2VhcmNoRm9yU2NoZW1hKCgoVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KSBlbCkuZ2V0RWxlbWVudCgpLAotICAgICAgICAgICAgICBkZWZpbml0aW9uLmdldERvY3VtZW50QmFzZVVSSSgpLCBuZXcgQXJyYXlMaXN0KCkpOwotICAgICAgfQotICAgIH0KLQotICAgIGlmICghZXJyb3JzLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKGVycm9ycy50b1N0cmluZygpLCBlbnRyeUNvbnRleHQpOwotICAgIH0KLQotICAgIGVsc2UgaWYgKCFpbXBvcnRGb3VuZCkKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0KLSAgICBlbHNlCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotICAvKgotICAgKiBTZWFyY2ggeHNkIHNjaGVtYSBvciB4c2QgaW1wb3J0IGZyb20gbm9kZS4gSWYgbm9kZSBpcyB4c2QgaW1wb3J0IGl0J3MgbG9hZGluZyBzY2hlbWEuCi0gICAqIEBwYXJhbSBuIC0gbm9kZQotICAqLwotICBwcml2YXRlIHZvaWQgc2VhcmNoRm9yU2NoZW1hKE5vZGUgbiwgU3RyaW5nIGNvbnRleHQsIExpc3QgcHJvY2Vzc2VkU2NoZW1hcykKLSAgewotCWlmICgobiE9IG51bGwpICYmICghcHJvY2Vzc2VkU2NoZW1hcy5jb250YWlucyhuKSkpCi0JewotICAgICAgd2hpbGUgKG4gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLy8gc2VhcmNoZXMgZm9yIHhzZDppbXBvcnQgZWxlbWVudAotICAgICAgICBpZiAoTm9kZS5FTEVNRU5UX05PREUgPT0gbi5nZXROb2RlVHlwZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gaWYgeHNkOnNjaGVtYSBlbGVtZW50IGlzIGZvdW5kIC0+IHByb2Nlc3Mgc2NoZW1hCi0gICAgICAgICAgaWYgKFhNTFV0aWxzLmVxdWFscyhuLCBFTEVNX1hTRF9TQ0hFTUEpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHByb2Nlc3NTY2hlbWEobiwgY29udGV4dCwgcHJvY2Vzc2VkU2NoZW1hcyk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBpZiB4c2Q6aW1wb3J0IGVsZW1lbnQgaXMgZm91bmQgLT4gbG9hZCBzY2hlbWEgYW5kIHByb2Nlc3Mgc2NoZW1hCi0gICAgICAgICAgICBpZiAoWE1MVXRpbHMuZXF1YWxzKG4sIEVMRU1fWFNEX0lNUE9SVCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGltcG9ydEZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgbG9hZFNjaGVtYShuLCBjb250ZXh0LCBwcm9jZXNzZWRTY2hlbWFzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgLy8gZWxzZSBpdGVyYXRlIGVsZW1lbnQgcmVjdXJzaXZlbHkKLSAgICAgICAgICAgICAgc2VhcmNoRm9yU2NoZW1hKG4uZ2V0Rmlyc3RDaGlsZCgpLCBjb250ZXh0LCBwcm9jZXNzZWRTY2hlbWFzKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbiA9IG4uZ2V0TmV4dFNpYmxpbmcoKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKgotICAgKiBJdCBsb2FkcyB4c2Qgc2NoZW1hIGFuZCB0aGVuIGNoZWNrIHZhbGlkIGVuY29kaW5nIGFuZCBsb29raW5nIGZvciB4c2Q6c2NoZW1hIGVsZW1lbnQgZm9yIG5leHQgcHJvY2Vzcy4gCi0gICAqIEBwYXJhbSBpbXBvcnROb2RlIC0geHNkIHNjaGVtYQotICAqLwotICBwcml2YXRlIHZvaWQgbG9hZFNjaGVtYShOb2RlIGltcG9ydE5vZGUsIFN0cmluZyBjb250ZXh0LCBMaXN0IHByb2Nlc3NlZFNjaGVtYXMpCi0gIHsKLSAgICBFbGVtZW50IGltID0gKEVsZW1lbnQpIGltcG9ydE5vZGU7Ci0gICAgQXR0ciBzY2hlbWFMb2NhdGlvbiA9IFhNTFV0aWxzLmdldEF0dHJpYnV0ZShpbSwgQVRUUl9YU0RfU0NIRU1BTE9DQVRJT04pOwotICAgIC8vIHRyeSB0byBwYXJzZSBpbXBvcnRlZCBYU0QKLSAgICBpZiAoc2NoZW1hTG9jYXRpb24gIT0gbnVsbCAmJiBzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpICE9IG51bGwpCi0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgLy8gaWYgYW55IGVycm9yIG9yIHJvb3QgZWxlbWVudCBpcyBub3QgWFNEIHNjaGVtYSAtPiBlcnJvcgotICAgICAgICBTdHJpbmcgZGVjbCA9Ci0gICAgICAgICAgcmVhZFhNTERlY2xhcmF0aW9uU3RhdGVtZW50KHNjaGVtYUxvY2F0aW9uLmdldFZhbHVlKCksIGNvbnRleHQpOwotICAgICAgICBpZiAoIXZhbGlkRGVjbGFyYXRpb24oZGVjbCwKLSAgICAgICAgICBFTkNPRElOR19UT0tFTiwKLSAgICAgICAgICBuZXcgU3RyaW5nW10geyBVVEZfOF9FTkNPRElORywgVVRGXzE2X0VOQ09ESU5HIH0pKQotICAgICAgICB7Ci0gICAgICAgICAgQXR0ciBhID0gWE1MVXRpbHMuZ2V0QXR0cmlidXRlKGltLCBBVFRSX1hTRF9OQU1FU1BBQ0UpOwotICAgICAgICAgIGVycm9ycy5hZGQoKGEgIT0gbnVsbCkgPyBhLmdldFZhbHVlKCkgOiAiIik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXZhbGlkRGVjbGFyYXRpb24oZGVjbCwgInZlcnNpb24iLCBuZXcgU3RyaW5nW10geyAiMS4wIiB9KSkKLSAgICAgICAgewotICAgICAgICAgIGVycm9ycy5hZGQoCi0gICAgICAgICAgICAiVmVyc2lvbiBudW1iZXIgaW4gWE1MIGRlY2xhcmF0aW9uIGlzIG5vdCAxLjAuICBYTUwgc2NoZW1hIGZpbGU6ICIKLSAgICAgICAgICAgICAgKyBzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIERFQlVHOgotICAgICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oc2NoZW1hTG9jYXRpb24uZ2V0VmFsdWUoKSArICI6IiArIGNvbnRleHQpOwotCi0gICAgICAgIERvY3VtZW50IHNjaGVtYSA9Ci0gICAgICAgICAgdmFsaWRhdG9yLnBhcnNlWE1MRG9jdW1lbnRVUkwoc2NoZW1hTG9jYXRpb24uZ2V0VmFsdWUoKSwgY29udGV4dCk7Ci0KLSAgICAgICAgaWYgKFhNTFV0aWxzLmVxdWFscyhzY2hlbWEuZ2V0RG9jdW1lbnRFbGVtZW50KCksIEVMRU1fWFNEX1NDSEVNQSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgcHJvY2Vzc1NjaGVtYShzY2hlbWEuZ2V0RG9jdW1lbnRFbGVtZW50KCksCi0gICAgICAgICAgICAgIFhNTFV0aWxzLmNyZWF0ZVVSTFN0cmluZyhzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpLCBjb250ZXh0KSwgcHJvY2Vzc2VkU2NoZW1hcyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgICB7Ci0gICAgICB9Ci0gIH0KLQotICAvKioKLSAgKiBSZWFkcyBhbiBYTUwgZGVjbGFyYXRpb24gc3RhdGVtZW50LgotICAqIEBwYXJhbSBsb2NhdGlvbgotICAqIEByZXR1cm4gU3RyaW5nCi0gICovCi0gIHByaXZhdGUgU3RyaW5nIHJlYWRYTUxEZWNsYXJhdGlvblN0YXRlbWVudChTdHJpbmcgbG9jYXRpb24sIFN0cmluZyBiYXNlVVJJKQotICB7Ci0gICAgU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgbmV3IFVSTChsb2NhdGlvbik7Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICB7Ci0gICAgICAvLyBub3RoaW5nCi0gICAgICBpbnQgaSA9IGJhc2VVUkkubGFzdEluZGV4T2YoJy8nKTsKLSAgICAgIGludCBqID0gYmFzZVVSSS5sYXN0SW5kZXhPZignXFwnKTsKLSAgICAgIGlmIChqID4gaSkKLSAgICAgICAgaSA9IGo7Ci0gICAgICBsb2NhdGlvbiA9IGJhc2VVUkkuc3Vic3RyaW5nKDAsIGkgKyAxKSArIGxvY2F0aW9uOwotICAgIH0KLQotICAgIGlmIChsb2NhdGlvbiAhPSBudWxsKQotICAgIHsKLSAgICAgIFVSTCB1cmwgPSBudWxsOwotICAgICAgUmVhZGVyIHJlYWRlciA9IG51bGw7Ci0KLSAgICAgIHRyeQotICAgICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIHVybCA9IG5ldyBVUkwobG9jYXRpb24pOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgIC8vIHdlIHNob3VsZCB0cnkgdG8gYWNjZXNzIGxvY2F0aW9uIGFzIGZpbGUKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh1cmwgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHJlYWRlciA9IG5ldyBJbnB1dFN0cmVhbVJlYWRlcih1cmwub3BlblN0cmVhbSgpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICByZWFkZXIgPSBuZXcgSW5wdXRTdHJlYW1SZWFkZXIobmV3IEZpbGVJbnB1dFN0cmVhbShsb2NhdGlvbikpOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IGNoYXJDb2RlOwotICAgICAgICBib29sZWFuIGVuZCA9IGZhbHNlOwotICAgICAgICBpZiAocmVhZGVyLnJlYWR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBjaGFyQ29kZSA9IHJlYWRlci5yZWFkKCk7Ci0KLSAgICAgICAgICB3aGlsZSAocmVhZGVyLnJlYWR5KCkgJiYgIShjaGFyQ29kZSA9PSAnPCcpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGNoYXJDb2RlID0gcmVhZGVyLnJlYWQoKTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICAgIGlmIChjaGFyQ29kZSA9PSAnPCcpCi0gICAgICAgICAgewotICAgICAgICAgICAgYnVmLmFwcGVuZCgoY2hhcikgY2hhckNvZGUpOwotICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5yZWFkeSgpICYmICFlbmQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNoYXJDb2RlID0gcmVhZGVyLnJlYWQoKTsKLSAgICAgICAgICAgICAgYnVmLmFwcGVuZCgoY2hhcikgY2hhckNvZGUpOwotCi0gICAgICAgICAgICAgIGVuZCA9IGNoYXJDb2RlID09ICc+JzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIE5PVEU6IFRoaXMgcmVzdWx0IGRvZXMgbm90IGdldCBwcm9wb2dhdGVkIGJhY2shCi0gICAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgICAgIGZhaWx1cmVEZXRhaWxNZXNzYWdlID0KLSAgICAgICAgICAgICAgIkNhbm5vdCByZWFkIHRoZSBYTUwgZGVjbGFyYXRpb24gc3RhdGVtZW50LiI7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgcmVzdWx0ID0gYnVmLnRvU3RyaW5nKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgZXJyb3JzLmFkZChlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICB9Ci0gICAgICBmaW5hbGx5Ci0gICAgICB7Ci0gICAgICAgIGlmIChyZWFkZXIgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJlYWRlci5jbG9zZSgpOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCAoVGhyb3dhYmxlIGUpCi0gICAgICAgICAgewotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICAvKgotICAgKiBAcGFyYW0geG1sRGVjbCAtIHhtbCBkZWNsYXJhdGlvbgotICAgKiBAcmV0dXJuIGlmIHhtbCBkZWNsYXJhdGlvbiBjb250YWlucyBlbmNvZGluZz0idXRmLTE2IiBvciBlbmNvZGluZz0idXRmLTgiIGl0IHJldGlybnMgdHJ1ZS4gCi0gICovCi0KLSAgLy9wcml2YXRlIGJvb2xlYW4gdmFsaWRFbmNvZGluZyhTdHJpbmcgeG1sRGVjbCkKLSAgLy97Ci0gIC8vICAvL2Jvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0gIC8vICBib29sZWFuIHJlc3VsdCA9IHRydWU7Ci0gIC8vICBpZiAoeG1sRGVjbCAhPSBudWxsKQotICAvLyAgewotICAvLyAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPQotICAvLyAgICAgIG5ldyBTdHJpbmdUb2tlbml6ZXIoCi0gIC8vICAgICAgICBPTU1JVEVEX1hNTF9ERUNMQVJBVElPTl9ERUxJTUlURVJTLAotICAvLyAgICAgICAgWE1MX0RFQ0xBUkFUSU9OX0RFTElNSVRFUlMpOwotICAvLyAgICBFbnVtZXJhdGlvbiB0b2tlbnMgPSBzdC5wYXJzZSh4bWxEZWNsKTsKLSAgLy8gICBib29sZWFuIGZvdW5kID0gZmFsc2U7Ci0gIC8vICAgIHdoaWxlICh0b2tlbnMuaGFzTW9yZUVsZW1lbnRzKCkgJiYgIWZvdW5kKQotICAvLyAgICB7Ci0gIC8vICAgICAgU3RyaW5nIHRva2VuID0gKFN0cmluZykgdG9rZW5zLm5leHRFbGVtZW50KCk7Ci0gIC8vCi0gIC8vICAgICAgaWYgKHRva2VuLmVxdWFscyhFTkNPRElOR19UT0tFTikpCi0gIC8vICAgICAgewotICAvLyAgICAgICAgZm91bmQgPSB0cnVlOwotICAvLwotICAvLyAgICAgICAgdG9rZW5zLm5leHRFbGVtZW50KCk7Ci0gIC8vICAgICAgICBTdHJpbmcgZW5jID0gKFN0cmluZykgdG9rZW5zLm5leHRFbGVtZW50KCk7Ci0gIC8vCi0gIC8vICAgICAgICByZXN1bHQgPQotICAvLyAgICAgICAgIFVURl84X0VOQ09ESU5HLmVxdWFsc0lnbm9yZUNhc2UoZW5jKQotICAvLyAgICAgICAgICAgIHx8IFVURl8xNl9FTkNPRElORy5lcXVhbHNJZ25vcmVDYXNlKGVuYyk7Ci0gIC8vICAgICAgfQotICAvLyAgICB9Ci0gIC8vICB9Ci0gIC8vCi0gIC8vICByZXR1cm4gcmVzdWx0OwotICAvL30KLQotICAvKioKLSAgICogQHBhcmFtIHhtbERlY2wgLSB4bWwgZGVjbGFyYXRpb24KLSAgICogQHJldHVybiBpZiB4bWwgZGVjbGFyYXRpb24gY29udGFpbnMgdmFsaWQgdmVyc2lvbiBudW1iZXIgdGhlbiB0cnVlIGlzIHJldHVybmVkLiAKLSAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIHZhbGlkRGVjbGFyYXRpb24oCi0gICAgU3RyaW5nIHhtbERlY2wsCi0gICAgU3RyaW5nIHRva2VuTmFtZSwKLSAgICBTdHJpbmdbXSBjaGVja1ZhbHVlTGlzdCkKLSAgewotICAgIC8vYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLSAgICBib29sZWFuIHJlc3VsdCA9IHRydWU7Ci0gICAgaWYgKHhtbERlY2wgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPQotICAgICAgICBuZXcgU3RyaW5nVG9rZW5pemVyKAotICAgICAgICAgIE9NTUlURURfWE1MX0RFQ0xBUkFUSU9OX0RFTElNSVRFUlMsCi0gICAgICAgICAgWE1MX0RFQ0xBUkFUSU9OX0RFTElNSVRFUlMpOwotICAgICAgRW51bWVyYXRpb24gdG9rZW5zID0gc3QucGFyc2UoeG1sRGVjbCk7Ci0KLSAgICAgIGlmICh0b2tlbnMuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgICB7Ci0gICAgICAgIGJvb2xlYW4gZm91bmQgPSBmYWxzZTsKLSAgICAgICAgd2hpbGUgKHRva2Vucy5oYXNNb3JlRWxlbWVudHMoKSAmJiAhZm91bmQpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgdG9rZW4gPSAoU3RyaW5nKSB0b2tlbnMubmV4dEVsZW1lbnQoKTsKLQotICAgICAgICAgIGlmICh0b2tlbi5lcXVhbHModG9rZW5OYW1lKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKLQotICAgICAgICAgICAgdG9rZW5zLm5leHRFbGVtZW50KCk7Ci0gICAgICAgICAgICBTdHJpbmcgdG9rZW5WYWx1ZSA9IChTdHJpbmcpIHRva2Vucy5uZXh0RWxlbWVudCgpOwotCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoZWNrVmFsdWVMaXN0Lmxlbmd0aCAmJiAhcmVzdWx0OyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlmIChjaGVja1ZhbHVlTGlzdFtpXS5lcXVhbHNJZ25vcmVDYXNlKHRva2VuVmFsdWUpKQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8vIElmIHRoZXJlIGFyZSBubyB0b2tlbnMgdGhlbiBpdCBpcyBub3QgYSB2YWxpZCBkZWNsYXJhY3Rpb24KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qCi0gICAqIEl0J3MgbG9va2luZyBmb3IgeHNkIGltcG9ydCBhbmQgbG9hZCBpdCBpZiBmaW5kLgotICAgKiBAcGFyYW0gc2NoZW1hIC0geHNkIHNjaGVtYQotICAgKiBAcGFyYW0gbmFtZXNwYWNlIC0gbmFtZXNwYWNlIG9mIHNjaGVtYQotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHByb2Nlc3NTY2hlbWEoTm9kZSBzY2hlbWEsIFN0cmluZyBjb250ZXh0LCBMaXN0IHByb2Nlc3NlZFNjaGVtYXMpCi0gIHsKLQlpZiAoKHNjaGVtYSAhPSBudWxsKSAmJiAoIXByb2Nlc3NlZFNjaGVtYXMuY29udGFpbnMoc2NoZW1hKSkpCi0JewotCSAgcHJvY2Vzc2VkU2NoZW1hcy5hZGQoc2NoZW1hKTsKLSAgICAgIE5vZGUgbiA9IHNjaGVtYS5nZXRGaXJzdENoaWxkKCk7Ci0gICAgICB3aGlsZSAobiAhPSBudWxsKQotICAgICAgewotICAgICAgICBpZiAoTm9kZS5FTEVNRU5UX05PREUgPT0gbi5nZXROb2RlVHlwZSgpCi0gICAgICAgICAgJiYgWE1MVXRpbHMuZXF1YWxzKG4sIEVMRU1fWFNEX0lNUE9SVCkpCi0gICAgICAgIHsKLSAgICAgICAgICBpbXBvcnRGb3VuZCA9IHRydWU7Ci0gICAgICAgICAgbG9hZFNjaGVtYShuLCBjb250ZXh0LCBwcm9jZXNzZWRTY2hlbWFzKTsKLSAgICAgICAgfQotCi0gICAgICAgIG4gPSBuLmdldE5leHRTaWJsaW5nKCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMjA4LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyMjA4LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzNTk2MzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjIwOC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uVHlwZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLQotLyoqCi0gKiBCUDIyMDguCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDpvcGVyYXRpb24gaW4gYSB3c2RsOnBvcnRUeXBlIGRlZmluaXRpb248L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIHdzZGw6b3BlcmF0aW9uIGVsZW1lbnQgaXMgZWl0aGVyIGEgV1NETCByZXF1ZXN0L3Jlc3BvbnNlIG9yIGEgb25lLXdheSBvcGVyYXRpb24gKG5vIE5vdGlmaWNhdGlvbiBvciBTb2xsaWNpdC1SZXNwb25zZSkuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEJQMjIwOCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjIwOChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9Ci0gICAgICAoT3BlcmF0aW9uKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotICAgIE9wZXJhdGlvblR5cGUgb3BUeXBlID0gb3BlcmF0aW9uLmdldFN0eWxlKCk7Ci0gICAgaWYgKChvcFR5cGUgPT0gbnVsbCkKLSAgICAgIHx8ICghb3BUeXBlLmVxdWFscyhPcGVyYXRpb25UeXBlLk9ORV9XQVkpCi0gICAgICAgICYmICFvcFR5cGUuZXF1YWxzKE9wZXJhdGlvblR5cGUuUkVRVUVTVF9SRVNQT05TRSkpKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgaWYgKG9wVHlwZSA9PSBudWxsKQotICAgICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgICAgIkNvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIG9wZXJhdGlvbiB0eXBlIGZvciAiCi0gICAgICAgICAgICAgICsgb3BlcmF0aW9uLmdldE5hbWUoKQotICAgICAgICAgICAgICArICIuIiwKLSAgICAgICAgICAgIGVudHJ5Q29udGV4dCk7Ci0gICAgICBlbHNlCi0gICAgICAgIGZhaWx1cmVEZXRhaWwgPSBudWxsOyAvLyBub25lIGRlZmluZWQgaW4gVEFEIGF0IHByZXNlbnQgCi0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjQwMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjQwMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NGYzZGE0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDI0MDIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmc7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotCi0KLS8qKgotICogQlAyNDAyLgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZyBlbGVtZW50PC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSB3c2RsOmJpbmRpbmcgZWxlbWVudCBoYXMgYSBzb2FwYmluZDpiaW5kaW5nIGNoaWxkIGVsZW1lbnQuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEJQMjQwMiBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjQwMihXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotCi0gICAgLy8gR2V0IHRoZSBwb3J0IGZyb20gdGhlIGVudHJ5IGNvbnRleHQKLSAgICAvL1BvcnQgcG9ydCA9IChQb3J0KSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgLy8gVHJ5IHRvIGdldCB0aGUgU09BUCBiaW5kaW5nCi0gICAgU09BUEJpbmRpbmcgc29hcEJpbmRpbmcgPSBXU0RMVmFsaWRhdG9ySW1wbC5nZXRTb2FwQmluZGluZyhiaW5kaW5nKTsKLQotICAgIC8vIFRlc3QgdGhlIGFzc2VydGlvbiAKLSAgICAvLyBDaGVjayB0aGF0IHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBTT0FQIEJpbmRpbmcKLSAgICBpZiAoc29hcEJpbmRpbmcgIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPSBudWxsOwotICAgIH0KLQotICAgIC8vIFJldHVybiBhc3NlcnRpb24gcmVzdWx0Ci0gICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgcmVzdWx0LCBmYWlsdXJlRGV0YWlsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDI0MDQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDI0MDQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjg4ZThkNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyNDA0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotCi0KLS8qKgotICogQlAyNDA0LgotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6YmluZGluZyBlbGVtZW50PC9jb250ZXh0PgotICogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSBjb250YWluZWQgc29hcDpiaW5kaW5nIGVsZW1lbnQgaGFzIGEgInRyYW5zcG9ydCIgYXR0cmlidXRlLCB3aGljaCBoYXMgdmFsdWU6IGh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cC48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAyNDA0IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyNDA0KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgIC8vIEdldCB0aGUgYmluZGluZyBmcm9tIHRoZSBlbnRyeSBjb250ZXh0Ci0gICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0KLSAgICAvLyBUcnkgdG8gZ2V0IHRoZSBTT0FQIGJpbmRpbmcKLSAgICBTT0FQQmluZGluZyBzb2FwQmluZGluZyA9IFdTRExWYWxpZGF0b3JJbXBsLmdldFNvYXBCaW5kaW5nKGJpbmRpbmcpOwotCi0gICAgLy8gVGVzdCB0aGUgYXNzZXJ0aW9uIAotICAgIC8vIENoZWNrIGZvciBTb2FwIGJpbmRpbmcgbmFtZXNwYWNlIAotICAgIGlmICgoc29hcEJpbmRpbmcgPT0gbnVsbCkKLSAgICAgIHx8IChzb2FwQmluZGluZy5nZXRUcmFuc3BvcnRVUkkoKSA9PSBudWxsKQotICAgICAgfHwgIXNvYXBCaW5kaW5nLmdldFRyYW5zcG9ydFVSSSgpLmVxdWFscyhXU0lDb25zdGFudHMuTlNfVVJJX1NPQVBfSFRUUCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBzb2FwQmluZGluZyA9PSBudWxsCi0gICAgICAgICAgPyAiV1NETCBkb2N1bWVudCBkb2VzIG5vdCBjb250YWluIFNPQVAgYmluZGluZyBlbGVtZW50LiIKLSAgICAgICAgICA6IHNvYXBCaW5kaW5nLnRvU3RyaW5nKCksCi0gICAgICAgIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjQwNi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjQwNi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDVkOGVkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDI0MDYuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJGYXVsdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLQotCi0vKioKLSAqIEJQMjQwNi4KLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmJpbmRpbmcgZWxlbWVudCwgaWYgdGhlIHVzZSBhdHRyaWJ1dGUgaXMgc3BlY2lmaWVkIG9uIHRoZSBzb2FwYmluZDpib2R5LCBzb2FwYmluZDpmYXVsdCwgc29hcGJpbmQ6aGVhZGVyLCBvciBzb2FwYmluZDpoZWFkZXJmYXVsdCBlbGVtZW50cy48L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIHVzZSBhdHRyaWJ1dGUgaGFzIGEgdmFsdWUgb2YgImxpdGVyYWwiLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBCUDI0MDYgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDI0MDYoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIC8vIEdldCB0aGUgYmluZGluZyBmcm9tIHRoZSBlbnRyeSBjb250ZXh0Ci0gICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0KLSAgICAvLyBHZXQgU09BUCBib2R5IGVsZW1lbnRzICAgICAgCi0gICAgU09BUEJvZHlbXSBzb2FwQm9kaWVzID0gdGhpcy52YWxpZGF0b3IuZ2V0U29hcEJvZGllcyhiaW5kaW5nKTsKLQotICAgIC8vIEFERDogV2hhdCBoYXBwZW5zIGlmIHRoZXJlIGFyZSBubyBzb2FwIGJvZHkgZWxlbWVudHM/ICBSaWdodCBub3cgdGhlIFRBIHJlc3VsdCBpcyBOQS4gICAgICAKLQotICAgIC8vIFRlc3QgdGhlIGFzc2VydGlvbiAKLSAgICAvLyBDaGVjayBmb3IgY29ycmVjdCB1c2UgdmFsdWUgCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzb2FwQm9kaWVzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIFNPQVBCb2R5IHNvYXBCb2R5ID0gc29hcEJvZGllc1tpXTsKLSAgICAgIGlmIChzb2FwQm9keS5nZXRVc2UoKSAhPSBudWxsCi0gICAgICAgICYmICFzb2FwQm9keS5nZXRVc2UoKS5lcXVhbHMoV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CT0RZX1VTRV9MSVQpKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChzb2FwQm9keS50b1N0cmluZygpLCBlbnRyeUNvbnRleHQpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBHZXQgU09BUCBmYXVsdCBlbGVtZW50cyAgICAgIAotICAgIFNPQVBGYXVsdFtdIHNvYXBGYXVsdHMgPSB0aGlzLnZhbGlkYXRvci5nZXRTb2FwRmF1bHRzKGJpbmRpbmcpOwotCi0gICAgLy8gVGVzdCB0aGUgYXNzZXJ0aW9uIAotICAgIC8vIENoZWNrIGZvciBjb3JyZWN0IHVzZSB2YWx1ZSAKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNvYXBGYXVsdHMubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgU09BUEZhdWx0IHNvYXBGYXVsdCA9IHNvYXBGYXVsdHNbaV07Ci0gICAgICBpZiAoc29hcEZhdWx0LmdldFVzZSgpICE9IG51bGwKLSAgICAgICAgJiYgIXNvYXBGYXVsdC5nZXRVc2UoKS5lcXVhbHMoV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CT0RZX1VTRV9MSVQpKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgZmFpbHVyZURldGFpbE1lc3NhZ2UgPQotICAgICAgICAgIChmYWlsdXJlRGV0YWlsTWVzc2FnZSA9PSBudWxsCi0gICAgICAgICAgICA/IHNvYXBGYXVsdC50b1N0cmluZygpCi0gICAgICAgICAgICA6IGZhaWx1cmVEZXRhaWxNZXNzYWdlICsgIlxuXG4iICsgc29hcEZhdWx0LnRvU3RyaW5nKCkpOwotICAgICAgICBpZiAoZmFpbHVyZURldGFpbCA9PSBudWxsKQotICAgICAgICAgIGZhaWx1cmVEZXRhaWwgPQotICAgICAgICAgICAgdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChmYWlsdXJlRGV0YWlsTWVzc2FnZSwgZW50cnlDb250ZXh0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIGZhaWx1cmVEZXRhaWwuc2V0RmFpbHVyZU1lc3NhZ2UoZmFpbHVyZURldGFpbE1lc3NhZ2UpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBHZXQgU09BUCBoZWFkZXIgZWxlbWVudHMgICAgICAKLSAgICBTT0FQSGVhZGVyW10gc29hcEhlYWRlcnMgPSB0aGlzLnZhbGlkYXRvci5nZXRTb2FwSGVhZGVycyhiaW5kaW5nKTsKLQotICAgIC8vIFRlc3QgdGhlIGFzc2VydGlvbiAKLSAgICAvLyBDaGVjayBmb3IgY29ycmVjdCB1c2UgdmFsdWUgCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzb2FwSGVhZGVycy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBTT0FQSGVhZGVyIHNvYXBIZWFkZXIgPSBzb2FwSGVhZGVyc1tpXTsKLSAgICAgIGlmIChzb2FwSGVhZGVyLmdldFVzZSgpICE9IG51bGwKLSAgICAgICAgJiYgIXNvYXBIZWFkZXIuZ2V0VXNlKCkuZXF1YWxzKFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQk9EWV9VU0VfTElUKSkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgIGZhaWx1cmVEZXRhaWxNZXNzYWdlID0KLSAgICAgICAgICAoZmFpbHVyZURldGFpbE1lc3NhZ2UgPT0gbnVsbAotICAgICAgICAgICAgPyBzb2FwSGVhZGVyLnRvU3RyaW5nKCkKLSAgICAgICAgICAgIDogZmFpbHVyZURldGFpbE1lc3NhZ2UgKyAiXG5cbiIgKyBzb2FwSGVhZGVyLnRvU3RyaW5nKCkpOwotICAgICAgICBpZiAoZmFpbHVyZURldGFpbCA9PSBudWxsKQotICAgICAgICAgIGZhaWx1cmVEZXRhaWwgPQotICAgICAgICAgICAgdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChmYWlsdXJlRGV0YWlsTWVzc2FnZSwgZW50cnlDb250ZXh0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIGZhaWx1cmVEZXRhaWwuc2V0RmFpbHVyZU1lc3NhZ2UoZmFpbHVyZURldGFpbE1lc3NhZ2UpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBHZXQgU09BUCBoZWFkZXIgZmF1bHQgZWxlbWVudHMgICAgICAKLSAgICBTT0FQSGVhZGVyRmF1bHRbXSBzb2FwSGVhZGVyRmF1bHRzID0gdGhpcy52YWxpZGF0b3IuZ2V0U29hcEhlYWRlckZhdWx0cyhiaW5kaW5nKTsKLQotICAgIC8vIFRlc3QgdGhlIGFzc2VydGlvbiAKLSAgICAvLyBDaGVjayBmb3IgY29ycmVjdCB1c2UgdmFsdWUgCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzb2FwSGVhZGVyRmF1bHRzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIFNPQVBIZWFkZXJGYXVsdCBzb2FwSGVhZGVyRmF1bHQgPSBzb2FwSGVhZGVyRmF1bHRzW2ldOwotICAgICAgaWYgKHNvYXBIZWFkZXJGYXVsdC5nZXRVc2UoKSAhPSBudWxsCi0gICAgICAgICYmICFzb2FwSGVhZGVyRmF1bHQuZ2V0VXNlKCkuZXF1YWxzKAotICAgICAgICAgIFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQk9EWV9VU0VfTElUKSkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICAgIGZhaWx1cmVEZXRhaWxNZXNzYWdlID0KLSAgICAgICAgICAoZmFpbHVyZURldGFpbE1lc3NhZ2UgPT0gbnVsbAotICAgICAgICAgICAgPyBzb2FwSGVhZGVyRmF1bHQudG9TdHJpbmcoKQotICAgICAgICAgICAgOiBmYWlsdXJlRGV0YWlsTWVzc2FnZSArICJcblxuIiArIHNvYXBIZWFkZXJGYXVsdC50b1N0cmluZygpKTsKLSAgICAgICAgaWYgKGZhaWx1cmVEZXRhaWwgPT0gbnVsbCkKLSAgICAgICAgICBmYWlsdXJlRGV0YWlsID0KLSAgICAgICAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZmFpbHVyZURldGFpbE1lc3NhZ2UsIGVudHJ5Q29udGV4dCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBmYWlsdXJlRGV0YWlsLnNldEZhaWx1cmVNZXNzYWdlKGZhaWx1cmVEZXRhaWxNZXNzYWdlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlIHJlc3VsdCBpcyBwYXNzZWQsIGJ1dCB0aGVyZSB3YXMgbm90aGluZyB0byBjaGVjayB0aGVuIHNldCB0byBub3RBcHBsaWNhYmxlCi0gICAgaWYgKHJlc3VsdCA9PSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRAotICAgICAgJiYgKHNvYXBCb2RpZXMgPT0gbnVsbCB8fCBzb2FwQm9kaWVzLmxlbmd0aCA9PSAwKQotICAgICAgJiYgKHNvYXBGYXVsdHMgPT0gbnVsbCB8fCBzb2FwRmF1bHRzLmxlbmd0aCA9PSAwKQotICAgICAgJiYgKHNvYXBIZWFkZXJzID09IG51bGwgfHwgc29hcEhlYWRlcnMubGVuZ3RoID09IDApCi0gICAgICAmJiAoc29hcEhlYWRlckZhdWx0cyA9PSBudWxsIHx8IHNvYXBIZWFkZXJGYXVsdHMubGVuZ3RoID09IDApKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjQxNi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjQxNi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTFlYmEzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDI0MTYuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5JbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLk91dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0OwotCi0KLS8qKgotKiBCUDI0MTYuIAotKiAgIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmRlZmluaXRpb25zPC9jb250ZXh0PgotKiAgIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5FdmVyeSBRTmFtZSBpbiB0aGUgV1NETCBkb2N1bWVudCBhbmQgaXRzIGltcG9ydHMsIGlzIHJlZmVyZW5jaW5nIGFuIGVsZW1lbnQgaW4gYSBuYW1lc3BhY2UgdGhhdCBoYXMgZWl0aGVyIGJlZW4gaW1wb3J0ZWQgb3IgZGVmaW5lZCBpbiB0aGUgV1NETCBkb2N1bWVudCB0aGF0IGNvbnRhaW5zIHRoZSByZWZlcmVuY2UuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSovCi1wdWJsaWMgY2xhc3MgQlAyNDE2IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjQxNihXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX0xJU1RfS0VZID0gIm5hbWVzcGFjZXMiOwotCi0gIC8qKgotICAgKiBDaGVja3Mgd2hldGhlciB0aGUgbmFtZXNwYWNlIGlzIGRlZmluZWQgb3IgaW1wb3J0ZWQgaW4gdGhlIGRlZmluaXRpb24uCi0gICAqIEBwYXJhbSBxbmFtZQotICAgKiBAcGFyYW0gY3R4Ci0gICAqLwotICBwcml2YXRlIHZvaWQgY2hlY2tOYW1lc3BhY2UoUU5hbWUgcW5hbWUsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGlmIChxbmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSBxbmFtZS5nZXROYW1lc3BhY2VVUkkoKTsKLQotICAgICAgaWYgKG5hbWVzcGFjZSAhPSBudWxsKQotICAgICAgewotICAgICAgICBMaXN0IG5hbWVzcGFjZXMgPSAoTGlzdCkgY3R4LmdldFBhcmFtZXRlcihOU19MSVNUX0tFWSk7Ci0KLSAgICAgICAgaWYgKCFuYW1lc3BhY2VzLmNvbnRhaW5zKG5hbWVzcGFjZSkpCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgICBmYWlsdXJlRGV0YWlsTWVzc2FnZSA9IG5hbWVzcGFjZTsKLQotICAgICAgICAgIGN0eC5jYW5jZWxQcm9jZXNzaW5nKCk7Ci0gICAgICAgIH0KLSAgICAgIH0gLy8gPz8/IHNob3VsZCB3ZSBkbyBzb21ldGhpbmcgb3RoZXJ3aXNlICAKLSAgICB9Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLlBvcnQsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChQb3J0IHBvcnQsIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGlmIChwb3J0ICE9IG51bGwpCi0gICAgewotICAgICAgQmluZGluZyBiaW5kaW5nID0gcG9ydC5nZXRCaW5kaW5nKCk7Ci0gICAgICBpZiAoYmluZGluZyAhPSBudWxsKQotICAgICAgewotICAgICAgICBjaGVja05hbWVzcGFjZShiaW5kaW5nLmdldFFOYW1lKCksIGN0eCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5CaW5kaW5nLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoQmluZGluZyBiaW5kaW5nLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBpZiAoYmluZGluZyAhPSBudWxsKQotICAgIHsKLSAgICAgIFBvcnRUeXBlIHBUeXBlID0gYmluZGluZy5nZXRQb3J0VHlwZSgpOwotICAgICAgaWYgKHBUeXBlICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGNoZWNrTmFtZXNwYWNlKHBUeXBlLmdldFFOYW1lKCksIGN0eCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5PcGVyYXRpb24sIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBPcGVyYXRpb24gb3BlcmF0aW9uLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgaWYgKG9wZXJhdGlvbiAhPSBudWxsKQotICAgIHsKLSAgICAgIElucHV0IGlucHV0ID0gb3BlcmF0aW9uLmdldElucHV0KCk7Ci0gICAgICBpZiAoaW5wdXQgIT0gbnVsbCAmJiBpbnB1dC5nZXRNZXNzYWdlKCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgY2hlY2tOYW1lc3BhY2UoaW5wdXQuZ2V0TWVzc2FnZSgpLmdldFFOYW1lKCksIGN0eCk7Ci0gICAgICB9Ci0KLSAgICAgIE91dHB1dCBvdXRwdXQgPSBvcGVyYXRpb24uZ2V0T3V0cHV0KCk7Ci0gICAgICBpZiAob3V0cHV0ICE9IG51bGwgJiYgb3V0cHV0LmdldE1lc3NhZ2UoKSAhPSBudWxsKQotICAgICAgewotICAgICAgICBjaGVja05hbWVzcGFjZShvdXRwdXQuZ2V0TWVzc2FnZSgpLmdldFFOYW1lKCksIGN0eCk7Ci0gICAgICB9Ci0KLSAgICAgIE1hcCBmYXVsdHMgPSBvcGVyYXRpb24uZ2V0RmF1bHRzKCk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGl0ZXIgPSBmYXVsdHMudmFsdWVzKCkuaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBGYXVsdCBmYXVsdCA9IChGYXVsdCkgaXRlci5uZXh0KCk7Ci0KLSAgICAgICAgaWYgKGZhdWx0LmdldE1lc3NhZ2UoKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgY2hlY2tOYW1lc3BhY2UoZmF1bHQuZ2V0TWVzc2FnZSgpLmdldFFOYW1lKCksIGN0eCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLk1lc3NhZ2UsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICAvKiBSRU1PVkU6IFRoaXMgaXMgYWxyZWFkeSBkb25lIGluIFdTSTI0MTcKLSAgcHVibGljIHZvaWQgdmlzaXQoTWVzc2FnZSBtZXNzYWdlLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpIHsKLSAgIGlmIChtZXNzYWdlICE9IG51bGwpIHsKLSAgICAgTWFwIHBhcnRzID0gbWVzc2FnZS5nZXRQYXJ0cygpOwotICAgICBmb3IgKEl0ZXJhdG9yIGl0ZXIgPSBwYXJ0cy52YWx1ZXMoKS5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspIHsKLSAgICAgICBQYXJ0IHBhcnQgPSAoUGFydCkgaXRlci5uZXh0KCk7Ci0gICAgICAgCi0gICAgICAgY2hlY2tOYW1lc3BhY2UocGFydC5nZXRFbGVtZW50TmFtZSgpLCBjdHgpOyAgICAgICAgICAgICAgICAKLSAgICAgICBjaGVja05hbWVzcGFjZShwYXJ0LmdldFR5cGVOYW1lKCksIGN0eCk7Ci0gICAgIH0KLSAgIH0KLSAgfQotICAqLwotCi0gIC8qIChub24tSmF2YWRvYykKLSAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCB2YWxpZGF0ZSgKLSAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgIC8vIEdldCB0aGUgZGVmaW5pdGlvbiBmcm9tIHRoZSBlbnRyeSBjb250ZXh0Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0KLSAgICAgIChEZWZpbml0aW9uKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgLy8gZ2V0IGxpc3Qgb2YgbmFtZXNwYWNlcyBpbXBvcnRlZCBhbmQgZGVmaW5lZCBpbiB0aGUgZGVmaW5pdGlvbgotICAgIExpc3QgbmFtZXNwYWNlcyA9IHRoaXMudmFsaWRhdG9yLmdldFdTRExUYXJnZXROYW1lc3BhY2VMaXN0KGRlZmluaXRpb24pOwotCi0gICAgLy8gUkVNT1ZFOgotICAgIC8vTWFwIG5hbWVzcGFjZXMgPSBkZWZpbml0aW9uLmdldE5hbWVzcGFjZXMoKTsKLQotICAgIC8vIHRyYXZlcnNlIGRlZmluaXRpb24gdG8gY2hlY2sgbmFtZXNwYWNlcwotICAgIE1hcCBwYXJhbXMgPSBuZXcgSGFzaE1hcCgpOwotICAgIHBhcmFtcy5wdXQoTlNfTElTVF9LRVksIG5hbWVzcGFjZXMpOwotCi0gICAgV1NETFRyYXZlcnNhbCB0cmF2ZXJzYWwgPSBuZXcgV1NETFRyYXZlcnNhbCgpOwotICAgIC8vIFZpc2l0b3JBZGFwdG9yLmFkYXB0KHRoaXMpOwotICAgIHRyYXZlcnNhbC5zZXRWaXNpdG9yKHRoaXMpOwotICAgIHRyYXZlcnNhbC52aXNpdE9wZXJhdGlvbih0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRCaW5kaW5nKHRydWUpOwotICAgIHRyYXZlcnNhbC52aXNpdE1lc3NhZ2UodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0UG9ydCh0cnVlKTsKLQotICAgIHRyYXZlcnNhbC5pZ25vcmVJbXBvcnQoKTsKLSAgICB0cmF2ZXJzYWwuaWdub3JlUmVmZXJlbmNlcygpOwotICAgIHRyYXZlcnNhbC50cmF2ZXJzZShkZWZpbml0aW9uLCBwYXJhbXMpOwotCi0gICAgaWYgKHJlc3VsdC5lcXVhbHMoQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQpKQotICAgIHsKLSAgICAgIHRoaXMudmFsaWRhdG9yLmNyZWF0ZUZhaWx1cmVEZXRhaWwoZmFpbHVyZURldGFpbE1lc3NhZ2UsIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjQxNy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjQxNy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzQzZDQ5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDI0MTcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgamF2YXgud3NkbC5QYXJ0OwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVycm9yTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQ7Ci0KLQotLyoqCi0gKiBCUDI0MTcuIAotICogICA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDpkZWZpbml0aW9uczwvY29udGV4dD4KLSAqICAgPGFzc2VydGlvbkRlc2NyaXB0aW9uPkV2ZXJ5IFFOYW1lIGluIHRoZSBXU0RMIGRvY3VtZW50IGFuZCBpdHMgaW1wb3J0cyBhbmQgdGhhdCAKLSAqICAgICAgaXMgcmVmZXJyaW5nIHRvIGEgc2NoZW1hIGNvbXBvbmVudCwgdXNlcyB0aGUgbmFtZXNwYWNlIGRlZmluZWQgaW4gdGhlIHRhcmdldE5hbWVzcGFjZSAKLSAqICAgICAgYXR0cmlidXRlIG9uIHRoZSB4czpzY2hlbWEgZWxlbWVudCwgb3IgYSBuYW1lc3BhY2UgZGVmaW5lZCBpbiB0aGUgbmFtZXNwYWNlIGF0dHJpYnV0ZSAKLSAqICAgICAgb24gYW4geHM6aW1wb3J0IGVsZW1lbnQgd2l0aGluIHRoZSB4czpzY2hlbWEgZWxlbWVudC48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAyNDE3IGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjQxNyhXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JMaXN0ID0gbmV3IEVycm9yTGlzdCgpOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfTElTVF9LRVkgPSAibmFtZXNwYWNlcyI7Ci0KLSAgLyoqCi0gICAqIENoZWNrcyB3aGV0aGVyIHRoZSBuYW1lc3BhY2UgaXMgZGVmaW5lZCBvciBpbXBvcnRlZCBpbiB0aGUgZGVmaW5pdGlvbi4KLSAgICogQHBhcmFtIHFuYW1lCi0gICAqIEBwYXJhbSBjdHgKLSAgICovCi0gIHByaXZhdGUgdm9pZCBjaGVja05hbWVzcGFjZShRTmFtZSBxbmFtZSwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgaWYgKHFuYW1lICE9IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IHFuYW1lLmdldE5hbWVzcGFjZVVSSSgpOwotCi0gICAgICBpZiAobmFtZXNwYWNlICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIExpc3QgbmFtZXNwYWNlTGlzdCA9IChMaXN0KSBjdHguZ2V0UGFyYW1ldGVyKE5TX0xJU1RfS0VZKTsKLQotICAgICAgICBpZiAoKG5hbWVzcGFjZUxpc3QgIT0gbnVsbCkgJiYgIW5hbWVzcGFjZUxpc3QuY29udGFpbnMobmFtZXNwYWNlKSkKLSAgICAgICAgewotICAgICAgICAgIGVycm9yTGlzdC5hZGQocW5hbWUpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLk1lc3NhZ2UsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChNZXNzYWdlIG1lc3NhZ2UsIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGlmIChtZXNzYWdlICE9IG51bGwpCi0gICAgewotICAgICAgTWFwIHBhcnRzID0gbWVzc2FnZS5nZXRQYXJ0cygpOwotCi0gICAgICBmb3IgKEl0ZXJhdG9yIGl0ZXIgPSBwYXJ0cy52YWx1ZXMoKS5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIFBhcnQgcGFydCA9IChQYXJ0KSBpdGVyLm5leHQoKTsKLQotICAgICAgICBjaGVja05hbWVzcGFjZShwYXJ0LmdldEVsZW1lbnROYW1lKCksIGN0eCk7Ci0gICAgICAgIGNoZWNrTmFtZXNwYWNlKHBhcnQuZ2V0VHlwZU5hbWUoKSwgY3R4KTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotCi0gICAgLy8gR2V0IHRoZSBkZWZpbml0aW9uIGZyb20gdGhlIGVudHJ5IGNvbnRleHQKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPQotICAgICAgKERlZmluaXRpb24pIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0KLSAgICAvLyBHZXQgYSBsaXN0IG9mIGFsbCBzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlcwotICAgIExpc3QgdG5zTGlzdCA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgaWYgKCh0bnNMaXN0ID0gdGhpcy52YWxpZGF0b3IuZ2V0U2NoZW1hTmFtZXNwYWNlTGlzdChkZWZpbml0aW9uKSkgPT0gbnVsbCkKLSAgICAgICAgdG5zTGlzdCA9IG5ldyBWZWN0b3IoKTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoV1NJRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gVGhpcyBleGNlcHRpb24gd291bGQgaW5kaWNhdGUgdGhhdCB0aGUgc2NoZW1hIGRlZmluaXRpb24gaGFkIGEgcHJvYmxlbQotICAgICAgdG5zTGlzdCA9IG5ldyBWZWN0b3IoKTsKLSAgICB9Ci0KLSAgICAvLyBBbHdheXMgYWRkIFhNTCBzY2hlbWEgbmFtZXNwYWNlIHRvIGNvdmVyIGJ1aWx0LWluIHR5cGVzCi0gICAgdG5zTGlzdC5hZGQoV1NJQ29uc3RhbnRzLk5TX1VSSV9YU0QpOwotCi0gICAgLy8gVHJhdmVyc2UgZGVmaW5pdGlvbiB0byBjaGVjayBzY2hlbWEgbmFtZXNwYWNlcwotICAgIE1hcCBwYXJhbXMgPSBuZXcgSGFzaE1hcCgpOwotICAgIHBhcmFtcy5wdXQoTlNfTElTVF9LRVksIHRuc0xpc3QpOwotCi0gICAgV1NETFRyYXZlcnNhbCB0cmF2ZXJzYWwgPSBuZXcgV1NETFRyYXZlcnNhbCgpOwotICAgIHRyYXZlcnNhbC5zZXRWaXNpdG9yKHRoaXMpOwotICAgIHRyYXZlcnNhbC52aXNpdE1lc3NhZ2UodHJ1ZSk7Ci0KLSAgICB0cmF2ZXJzYWwuaWdub3JlSW1wb3J0KCk7Ci0gICAgdHJhdmVyc2FsLmlnbm9yZVJlZmVyZW5jZXMoKTsKLSAgICB0cmF2ZXJzYWwudHJhdmVyc2UoZGVmaW5pdGlvbiwgcGFyYW1zKTsKLQotICAgIC8vIElmIHRoZXJlIHdlcmUgbm8gZXJyb3JzLCB0aGVuIHRoZSBhc3NlcnRpb24gcGFzc2VkCi0gICAgaWYgKGVycm9yTGlzdC5pc0VtcHR5KCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0gICAgfQotCi0gICAgLy8gT3RoZXJ3aXNlIGl0IGZhaWxlZCAvIGNyZWF0ZSB0aGUgZmFpbHVyZSBkZXRhaWwgdXNpbmcgdGhlIFFOYW1lcyB0aGF0IHdlcmUgaW4gZXJyb3IKLSAgICBlbHNlCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlcnJvckxpc3QudG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyNzAwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyNzAwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwNjRlMTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjcwMC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVXRpbHM7Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uOwotCi0vKioKLSAgKiBCUDI3MDAuCi0gICogICA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDpkZWZpbml0aW9ucyBlbGVtZW50IHdpdGhpbiBhIFdTREwgZG9jdW1lbnQuPC9jb250ZXh0PgotICAqICAgPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSB3c2RsOmRlZmluaXRpb25zIGlzIGEgd2VsbC1mb3JtZWQgWE1MIDEuMCBkb2N1bWVudC48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICAqLwotcHVibGljIGNsYXNzIEJQMjcwMCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjcwMChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAvL1N0cmluZyB3c2RsVVJJID0gZW50cnlDb250ZXh0LmdldFdTRExEb2N1bWVudCgpLmdldERlZmluaXRpb25zKCkuZ2V0RG9jdW1lbnRCYXNlVVJJKCk7ICAKLSAgICAgIC8vIFRFTVA6IE5lZWQgdG8gZGVmaW5lIGEgYmV0dGVyIHdheSB0byBnZXQgdGhlIFdTREwgVVJJCi0gICAgICBTdHJpbmcgd3NkbFVSSSA9IGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldFJlZmVyZW5jZUlEKCk7Ci0gICAgICAvLyBub24tdmFsaWRhdGluZyBwYXJzZQotICAgICAgdmFsaWRhdG9yLnBhcnNlWE1MRG9jdW1lbnRVUkwod3NkbFVSSSwgbnVsbCk7Ci0gICAgfQotCi0gICAgY2F0Y2ggKFdTSUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGlmIChlLmdldFRhcmdldEV4Y2VwdGlvbigpIGluc3RhbmNlb2YgU0FYRXhjZXB0aW9uKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgICAgZmFpbHVyZURldGFpbCA9Ci0gICAgICAgICAgdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCgKLSAgICAgICAgICAgIFV0aWxzLmdldEV4Y2VwdGlvbkRldGFpbHMoZS5nZXRUYXJnZXRFeGNlcHRpb24oKSksCi0gICAgICAgICAgICBlbnRyeUNvbnRleHQpOwotICAgICAgfQotICAgIH0KLQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIGZhaWx1cmVEZXRhaWwgPQotICAgICAgICB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKFV0aWxzLmdldEV4Y2VwdGlvbkRldGFpbHMoZSksIGVudHJ5Q29udGV4dCk7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjcwMS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjcwMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjRjMWY5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDI3MDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci0KLQotLyoqCi0gICogQlAyNzAxLgotICAqICAgPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6ZGVmaW5pdGlvbnMgZWxlbWVudCB3aXRoaW4gYSBXU0RMIGRvY3VtZW50LjwvY29udGV4dD4KLSAgKiAgIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgd3NkbDpkZWZpbml0aW9ucyBuYW1lc3BhY2UgaGFzIHZhbHVlOiBodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLy48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICAqLwotcHVibGljIGNsYXNzIEJQMjcwMSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjcwMShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgRGVmaW5pdGlvbiBkZWYgPSAoRGVmaW5pdGlvbikgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgIC8qCi0gICAgaWYgKGRlZiAhPSBudWxsKSB7Ci0gICAgCVFOYW1lIHFuYW1lID0gZGVmLmdldFFOYW1lKCk7Ci0gICAgCQkJCQotICAgIAlpZiAocW5hbWUgIT0gbnVsbCkgewkKLSAgICAJCS8vaWYgKGRlZi5nZXROYW1lc3BhY2UoIiIpLmVxdWFscyhXU0lDb25zdGFudHMuTlNfVVJJX1dTREwpIHsKLSAgICAJCWlmIChxbmFtZS5nZXROYW1lc3BhY2VVUkkoKS5lcXVhbHMoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0RMKSkgewotICAgIAkJCXJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEOwotICAgIAkJfQotICAgIAl9Ci0gICAgfQotICAgICovCi0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBTdHJpbmcgc2NoZW1hVXNlZCA9IHRoaXMudmFsaWRhdG9yLmdldFNjaGVtYVVzZWQoZGVmKTsKLSAgICAgIGlmIChzY2hlbWFVc2VkLmVxdWFscyhXU0lDb25zdGFudHMuTlNfVVJJX1dTREwpKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICAgIH0KLQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBjYXRjaCAoQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgLy9BREQ6IGZhaWx1cmUgZGVzY3JpcHRpb24/Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjcwMy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjcwMy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTI1NjUxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDI3MDMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotCi0KLS8qKgotICogQlAyNzAzLgotICogICA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgZGVzY3JpcHRpb24gd2l0aGluIGEgV1NETCBkb2N1bWVudCwgaWYgaXQgdXNlcyB0aGUgV1NETCBuYW1lc3BhY2U8L2NvbnRleHQ+Ci0gKiAgIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgZGVmaW5pdGlvbiBjb25mb3JtcyB0byB0aGUgV1NETCBzY2hlbWEgbG9jYXRlZCBhdCBodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLzIwMDMtMDItMTEueHNkPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIEJQMjcwMyBleHRlbmRzIEFzc2VydGlvblByb2Nlc3MKLXsKLSAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQMjcwMyhXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gbm90ZSB0aGF0IHRoaXMgYXNzZXJ0aW9uIGlzIHJlZHVuZGFudCwgc2luY2UgdGhlIGJhc2Ugd3NkbCB2YWxpZGF0b3IgY2hlY2tzIHRoaXMgYWxyZWFkeS4KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyODAzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlAyODAzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyNjAyYTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQMjgwMy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmEubmV0LlVSSTsKLQotaW1wb3J0IGphdmF4LndzZGwuSW1wb3J0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuQXNzZXJ0aW9uTm90QXBwbGljYWJsZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLQotCi0vKioKLSAqIEJQMjgwMwotICogPGNvbnRleHQ+Rm9yIGEgY2FuZGlkYXRlIHdzZGw6aW1wb3J0IGVsZW1lbnQ8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlICJuYW1lc3BhY2UiIGF0dHJpYnV0ZSBpcyBzcGVjaWZpZWQgZm9yIHRoZSB3c2RsOmltcG9ydCBlbGVtZW50LCBhbmQgdGhlIGF0dHJpYnV0ZSdzIHZhbHVlIGlzIG5vdCBhIHJlbGF0aXZlIFVSSS48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgQlAyODAzIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2VzcwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgQlAyODAzKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICAvKiBWYWxpZGF0ZXMgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgLy8gR2V0dGluZyB3c2RsOmltcG9ydAotICAgIEltcG9ydCBpbSA9IChJbXBvcnQpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBJZiB0aGVyZSBpcyBubyB0aGUgIm5hbWVzcGFjZSIgYXR0cmlidXRlIGluIHRoZSBpbXBvcnQsCi0gICAgICAvLyB0aGUgYXNzZXJ0aW9uIGlzIG5vdCBhcHBsaWNhYmxlCi0gICAgICBpZiAoaW0uZ2V0TmFtZXNwYWNlVVJJKCkgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbk5vdEFwcGxpY2FibGVFeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgLy8gSWYgYSBuYW1lc3BhY2UgVVJJIGlzIHJlbGF0aXZlIG9yIGludmFsaWQsIHRoZSBhc3NlcnRpb24gZmFpbGVkCi0gICAgICBVUkkgdXJpID0gbmV3IFVSSShpbS5nZXROYW1lc3BhY2VVUkkoKSk7Ci0gICAgICBpZiAoIXVyaS5pc0Fic29sdXRlKCkpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKAotICAgICAgICAgIGltLmdldE5hbWVzcGFjZVVSSSgpICsgIiBpcyByZWxhdGl2ZSBVUkkuIik7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChBc3NlcnRpb25Ob3RBcHBsaWNhYmxlRXhjZXB0aW9uIGFuYWUpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICBlLmdldE1lc3NhZ2UoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlA0MjAwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlA0MjAwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlYzA2NWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQNDIwMC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5UeXBlczsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRXJyb3JMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci0KLS8qKgotICogQlA0MjAwLiAKLSAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmRlZmluaXRpb25zIHRoYXQgY29udGFpbnMgYSB3c2RsIGV4dGVuc2lvbiBlbGVtZW50IG9yIGF0dHJpYnV0ZSBmcm9tIGEgbmFtZXNwYWNlIG90aGVyIHRoYW4gImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iLjwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5Db250YWluZWQgV1NETCBleHRlbnNpb24gZWxlbWVudHMgdGhhdCBkbyBub3QgYmVsb25nIHRvIHRoZSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgbmFtZXNwYWNlcyBtYXkgcmVxdWlyZSBvdXQgb2YgYmFuZCBuZWdvdGlhdGlvbi48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotKi8KLXB1YmxpYyBjbGFzcyBCUDQyMDAgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzVmlzaXRvciBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JMaXN0ID0gbmV3IEVycm9yTGlzdCgpOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDQyMDAoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KEV4dGVuc2liaWxpdHlFbGVtZW50IG9iaiwgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICAvLyBJZiBhIGNoaWxkIGVsZW1lbnQgb2Ygd3NkbDp0eXBlcyBpcyBmcm9tIGEgbmFtZXNwYWNlIG90aGVyIHRoYW4KLSAgICAvLyAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0gICAgaWYgKHBhcmVudCBpbnN0YW5jZW9mIFR5cGVzKQotICAgIHsKLSAgICAgIC8vaWYgKCFvYmouZ2V0RWxlbWVudFR5cGUoKS5nZXROYW1lc3BhY2VVUkkoKS5lcXVhbHMoCi0gICAgICAvLyAgV1NJQ29uc3RhbnRzLk5TX1VSSV9YU0QpKQotICAgICAgLy97Ci0gICAgICAvLyAgQWRkIGVsZW1lbnQgbmFtZSB0byBlcnJvciBsaXN0Ci0gICAgICAvLyAgZXJyb3JMaXN0LmFkZChvYmouZ2V0RWxlbWVudFR5cGUoKSk7Ci0gICAgICAvL30KLSAgICB9Ci0gICAgLy8gb3IgYW55IG90aGVyIGV4dCBlbGVtZW50IGNvbWluZyBmcm9tIGEgbmFtZXNwYWNlIG90aGVyIHRoYW4KLSAgICAvLyAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIKLSAgICBlbHNlIGlmICghb2JqLmdldEVsZW1lbnRUeXBlKCkuZ2V0TmFtZXNwYWNlVVJJKCkuZXF1YWxzKFdTSUNvbnN0YW50cy5OU19VUklfV1NETF9TT0FQKQotICAgIAkgICYmICFvYmouZ2V0RWxlbWVudFR5cGUoKS5nZXROYW1lc3BhY2VVUkkoKS5lcXVhbHMoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0RMKSkKLSAgICB7Ci0gICAgICAvLyBBZGQgZWxlbWVudCBuYW1lIHRvIGVycm9yIGxpc3QKLSAgICAgIGVycm9yTGlzdC5hZGQob2JqLmdldEVsZW1lbnRUeXBlKCkpOyAKLSAgICB9Ci0gIH0KLQotICAgLyoqCi0gICogIChub24tSmF2YWRvYykKLSAgKiAgQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEdldCB0aGUgZGVmaW5pdGlvbiBmcm9tIHRoZSBlbnRyeSBjb250ZXh0Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0KLSAgICAgIChEZWZpbml0aW9uKSBlbnRyeUNvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeURldGFpbCgpOwotCi0gICAgV1NETFRyYXZlcnNhbCB0cmF2ZXJzYWwgPSBuZXcgV1NETFRyYXZlcnNhbCgpOwotICAgIHRyYXZlcnNhbC5zZXRWaXNpdG9yKHRoaXMpOwotCi0gICAgdHJhdmVyc2FsLnZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0RWxlbWVudCh0cnVlKTsKLQotICAgIHRyYXZlcnNhbC5pZ25vcmVJbXBvcnQoKTsKLSAgICB0cmF2ZXJzYWwuaWdub3JlUmVmZXJlbmNlcygpOwotICAgIHRyYXZlcnNhbC50cmF2ZXJzZShkZWZpbml0aW9uKTsKLQotICAgIHRyeQotCXsKLSAgICAgIC8vIGdldHRpbmcgV1NETCBkb2N1bWVudC4KLSAgICAgIERvY3VtZW50IGRvYyA9IHZhbGlkYXRvci5wYXJzZVhNTERvY3VtZW50VVJMKGRlZmluaXRpb24uZ2V0RG9jdW1lbnRCYXNlVVJJKCksIG51bGwpOwotICAgICAgaWYgKGRvYyAhPSBudWxsKQotICAgICAgeyAgIAotICAgICAgICBjaGVja0VsZW1lbnQoZG9jLmdldERvY3VtZW50RWxlbWVudCgpKTsKLQotICAgICAgICBpZiAoZXJyb3JMaXN0LmlzRW1wdHkoKSkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgZmFpbHVyZURldGFpbCA9IHZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgICAgIHRlc3RBc3NlcnRpb24uZ2V0RGV0YWlsRGVzY3JpcHRpb24oKSArICJcblxuIiArIGVycm9yTGlzdC50b1N0cmluZygpLAotICAgICAgICAgIGVudHJ5Q29udGV4dCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQl9ICAgCi0gICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgIHsKLQl9Ci0gICAgLy8gUmV0dXJuIGFzc2VydGlvbiByZXN1bHQKLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCgKLSAgICAgIHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2tpbmcgb24gd3NkbCBlbGVtZW50cyByZWN1cnNpdmVseSB3aGV0aGVyIHRoZXkgY29udGFpbiBleHRlbnNpb24gYXR0cmlidXRlcy4KLSAgICogQHBhcmFtIGVsZW0gRWxlbWVudC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBjaGVja0VsZW1lbnQoRWxlbWVudCBlbGVtKQotICB7Ci0gICAgd2hpbGUgKGVsZW0gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgZWxlbU5TID0gZWxlbS5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICAgIE5hbWVkTm9kZU1hcCBhdHRycyA9IGVsZW0uZ2V0QXR0cmlidXRlcygpOwotICAgICAgaWYgKGF0dHJzICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0cnMuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICAgICAgewotICAgICAgICAgIEF0dHIgYXR0ciA9IChBdHRyKSBhdHRycy5pdGVtKGkpOwotICAgICAgICAgIFN0cmluZyBhdHRyTlMgPSBhdHRyLmdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgICAgIGlmIChhdHRyTlMgIT0gbnVsbAotICAgICAgICAgICAgJiYgIWF0dHJOUy5lcXVhbHMoV1NJQ29uc3RhbnRzLk5TX1VSSV9YTUxOUykKLSAgICAgICAgICAgICYmICFhdHRyTlMuZXF1YWxzKFdTSUNvbnN0YW50cy5OU19VUklfV1NETCkKLQkJCSYmICFhdHRyTlMuZXF1YWxzKFdTSUNvbnN0YW50cy5OU19VUklfV1NETF9TT0FQKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBlcnJvckxpc3QuYWRkKCJFeHRlbnNpYmlsaXR5IGF0dHJpYnV0ZSAiICsgYXR0ci5nZXROYW1lKCkKLSAgICAgICAgICAgICAgKyAiZm9yIHRoZSAiICsgZWxlbS5nZXROb2RlTmFtZSgpICsgIiBlbGVtZW50IGlzIGZvdW5kLiIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAoIWVsZW1OUy5lcXVhbHMoV1NJQ29uc3RhbnRzLk5TX1VSSV9YU0QpKQotICAgICAgewotICAgICAgICBjaGVja0VsZW1lbnQoWE1MVXRpbHMuZ2V0Rmlyc3RDaGlsZChlbGVtKSk7Ci0gICAgICB9Ci0gICAgICBlbGVtID0gWE1MVXRpbHMuZ2V0TmV4dFNpYmxpbmcoZWxlbSk7Ci0gICAgfQotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQNDIwMS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL0JQNDIwMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMWYxMzFmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDQyMDEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS5uZXQuVVJJU3ludGF4RXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkltcG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEFkZHJlc3M7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5FcnJvckxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0OwotCi0KLS8qKgotKiBCUDQyMDEuIAotKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDppbXBvcnQgZWxlbWVudCwgd2hlcmUgdGhlIGxvY2F0aW9uIGF0dHJpYnV0ZSBvciB0aGUgbmFtZXNwYWNlIGF0dHJpYnV0ZSBoYXMgYSB2YWx1ZSB0aGF0IGlzIGEgcmVsYXRpdmUgVVJJLCBvciBhIGZvciBzb2FwOmFkZHJlc3MgZWxlbWVudCB3aGVyZSB0aGUgbG9jYXRpb24gYXR0cmlidXRlIGlzIGEgcmVsYXRpdmUgVVJJLjwvY29udGV4dD4KLSogPGFzc2VydGlvbkRlc2NyaXB0aW9uPlRoZSB1c2Ugb2YgYSByZWxhdGl2ZSBVUkkgYXMgdGhlIHZhbHVlIGZvciBhIHdzZGw6aW1wb3J0IGxvY2F0aW9uIG9yIG5hbWVzcGFjZSBhdHRyaWJ1dGUsIG9yIGZvciBhIHNvYXA6YWRkcmVzcyBsb2NhdGlvbiBhdHRyaWJ1dGUgbWF5IHJlcXVpcmUgb3V0IG9mIGJhbmQgY29vcmRpbmF0aW9uLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0qLwotcHVibGljIGNsYXNzIEJQNDIwMSBleHRlbmRzIEFzc2VydGlvblByb2Nlc3NWaXNpdG9yCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBCUDQyMDEoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotICBwcml2YXRlIEVycm9yTGlzdCBlcnJvckxpc3QgPSBuZXcgRXJyb3JMaXN0KCk7Ci0KLSAgLyoqIAotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChJbXBvcnQsIE9iamVjdCwgV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChJbXBvcnQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBpZihvYmogIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZihpc1JlbGF0aXZlVVJJKG9iai5nZXROYW1lc3BhY2VVUkkoKSkgfHwgCi0gICAgICAgICAgaXNSZWxhdGl2ZVVSSShvYmouZ2V0TG9jYXRpb25VUkkoKSkpCi0gICAgICB7Ci0gICAgICAgIGVycm9yTGlzdC5hZGQob2JqLmdldE5hbWVzcGFjZVVSSSgpLCBvYmouZ2V0TG9jYXRpb25VUkkoKSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqIAotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChQb3J0LCBPYmplY3QsIFdTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoUG9ydCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGlmKG9iaiAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ID0gb2JqLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICAgT2JqZWN0IGUgPSAoT2JqZWN0KSBpdC5uZXh0KCk7Ci0gICAgICAgICAvLyBmb3IgZWFjaCBTT0FQQWRkcmVzcyBlbGVtZW50cyBjaGVjayBMb2NhdGlvblVSSSAKLSAgICAgICAgIGlmKGUgaW5zdGFuY2VvZiBTT0FQQWRkcmVzcykgewotICAgICAgICAgICBpZihpc1JlbGF0aXZlVVJJKCgoU09BUEFkZHJlc3MpIGUpLmdldExvY2F0aW9uVVJJKCkpKQotICAgICAgICAgICB7Ci0gICAgICAgICAgICAgZXJyb3JMaXN0LmFkZCgoKFNPQVBBZGRyZXNzKSBlKS5nZXRFbGVtZW50VHlwZSgpICsgCi0gICAgICAgICAgICAgICAgICI6IiArICgoU09BUEFkZHJlc3MpIGUpLmdldExvY2F0aW9uVVJJKCkpOwotICAgICAgICAgICB9Ci0gICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqICAobm9uLUphdmFkb2MpCi0gICAqICBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICAvLyBHZXQgdGhlIGRlZmluaXRpb24gZnJvbSB0aGUgZW50cnkgY29udGV4dAotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9Ci0gICAgICAoRGVmaW5pdGlvbikgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKTsKLQotICAgIFdTRExUcmF2ZXJzYWwgdHJhdmVyc2FsID0gbmV3IFdTRExUcmF2ZXJzYWwoKTsKLSAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcih0aGlzKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRJbXBvcnQodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0UG9ydCh0cnVlKTsKLSAgICB0cmF2ZXJzYWwuaWdub3JlUmVmZXJlbmNlcygpOwotICAgIHRyYXZlcnNhbC50cmF2ZXJzZShkZWZpbml0aW9uKTsKLQotICAgIGlmIChlcnJvckxpc3QuaXNFbXB0eSgpKSAKLSAgICB7Ci0gICAgICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgCi0gICAgICAgICAgICAgQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9OT1RfQVBQTElDQUJMRSwgKFN0cmluZykgbnVsbCk7Ci0gICAgfQotICAgIAotICAgIGZhaWx1cmVEZXRhaWwgPSB0aGlzLnZhbGlkYXRvci5jcmVhdGVGYWlsdXJlRGV0YWlsKHRlc3RBc3NlcnRpb24uZ2V0RmFpbHVyZU1lc3NhZ2UoKSArIAotICAgICAgICAiXG5cbiIgKyBlcnJvckxpc3QudG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLSAgLyoqCi0gICAqIFJldHVybnMgdHJ1ZSBpZiBVUkkgaXMgcmVsYXRpdmUgCi0gICAqIEBwYXJhbSBzIC0gVVJJCi0gICAqIEByZXR1cm4gdHJ1ZSAtIGlmIFVSSSBpcyByZWxhdGl2ZSwgZmFsc2UgLSBpbiBvdGhlciBjYXNlICAKLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBpc1JlbGF0aXZlVVJJKFN0cmluZyBzKQotICB7Ci0gICAgaWYocyA9PSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHRyeQotICAgIHsKLSAgICAgIGlmKG5ldyBqYXZhLm5ldC5VUkkocykuaXNBYnNvbHV0ZSgpKQotICAgICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgfSBjYXRjaCAoVVJJU3ludGF4RXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDQyMDIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9CUDQyMDIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjM3OTFlMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvQlA0MjAyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmF4LndzZGwuVHlwZXM7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5Vbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkFzc2VydGlvblByb2Nlc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVycm9yTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5zY2hlbWEuWE1MU2NoZW1hUHJvY2Vzc29yOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotCi0vKioKLSAqIEJQNDIwMi4gCi0gKiA8Y29udGV4dD5Gb3IgYW4gWE1MIHNjaGVtYSBkZWZpbml0aW9uIGRlZmluZWQgaW4gdGhlIHdzZGw6dHlwZXMgZWxlbWVudCwgb3IgaW1wb3J0ZWQgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBieSBhIHNjaGVtYSBkZWZpbml0aW9uIGRlZmluZWQgaW4gdGhlIHdzZGw6dHlwZXMgZWxlbWVudCwgd2hpY2ggY29udGFpbnMgYW55IHNjaGVtYSBhbm5vdGF0aW9uIGVsZW1lbnRzLjwvY29udGV4dD4KLSAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5BbiBYTUwgc2NoZW1hIGRlZmluaXRpb24gZGVmaW5lZCBpbiB0aGUgd3NkbDp0eXBlcyBlbGVtZW50LCBvciBpbXBvcnRlZCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGJ5IGEgc2NoZW1hIGRlZmluaXRpb24gZGVmaW5lZCBpbiB0aGUgd3NkbDp0eXBlcyBlbGVtZW50LCBtYXkgdXNlIHNjaGVtYSBhbm5vdGF0aW9uIGVsZW1lbnRzIGFzIGFuIGV4dGVuc2liaWxpdHkgbWVjaGFuaXNtLjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLSBwdWJsaWMgY2xhc3MgQlA0MjAyIGV4dGVuZHMgQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3IgaW1wbGVtZW50cyBXU0lUYWcgCi0gewotICAgcHJpdmF0ZSBmaW5hbCBXU0RMVmFsaWRhdG9ySW1wbCB2YWxpZGF0b3I7Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIEJQNDIwMihXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFOTk9UQVRJT05fS0VZID0gImFubm90YXRpb24iOwotICAgCi0gICBwcml2YXRlIEVycm9yTGlzdCBlcnJvckxpc3QgPSBuZXcgRXJyb3JMaXN0KCk7Ci0gICBwcml2YXRlIEFubm90YXRpb25Qcm9jZXNzb3IgcHJvY2Vzc29yOwotCi0gICAvKiogCi0gICAgKiAobm9uLUphdmFkb2MpCi0gICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoTWVzc2FnZSwgT2JqZWN0LCBXU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICAqLwotICAgcHVibGljIHZvaWQgdmlzaXQoRXh0ZW5zaWJpbGl0eUVsZW1lbnQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gICB7Ci0gICAgIGlmKChvYmogIT0gbnVsbCkgJiYgKG9iaiBpbnN0YW5jZW9mIFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCkpCi0gICAgIHsKLSAgICAgICBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZWwgPSAoVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KSBvYmo7Ci0gICAgICAgdHJ5IHsKLSAgICAgICAgIHByb2Nlc3Nvci5wcm9jZXNzQWxsU2NoZW1hKGVsLmdldEVsZW1lbnQoKSk7Ci0gICAgICAgfSBjYXRjaCAoV1NJRXhjZXB0aW9uIGUpIHt9Ci0gICAgIH0KLSAgIH0KLQotICAgLyoqCi0gICAgKiAgKG5vbi1KYXZhZG9jKQotICAgICogIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwuQXNzZXJ0aW9uUHJvY2VzcyN2YWxpZGF0ZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uLCBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuRW50cnlDb250ZXh0KQotICAgICovCi0gICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgICBUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24sCi0gICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgIHsKLSAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9QQVNTRUQ7Ci0KLSAgICAgLy8gR2V0IHRoZSB0eXBlcyBmcm9tIHRoZSBlbnRyeSBjb250ZXh0Ci0gICAgIFR5cGVzIHR5cGVzID0KLSAgICAgICAoVHlwZXMpIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCk7Ci0gICAgIAotICAgICBwcm9jZXNzb3IgPSBuZXcgQW5ub3RhdGlvblByb2Nlc3NvcigKLSAgICAgICAgICAgZW50cnlDb250ZXh0LmdldFdTRExEb2N1bWVudCgpLmdldERlZmluaXRpb25zKCkuZ2V0RG9jdW1lbnRCYXNlVVJJKCkpOwotICAgICAKLSAgICAgV1NETFRyYXZlcnNhbCB0cmF2ZXJzYWwgPSBuZXcgV1NETFRyYXZlcnNhbCgpOwotICAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcih0aGlzKTsKLSAgICAgdHJhdmVyc2FsLnZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQodHJ1ZSk7Ci0gICAgIHRyYXZlcnNhbC5pZ25vcmVSZWZlcmVuY2VzKCk7Ci0gICAgIHRyYXZlcnNhbC50cmF2ZXJzZSh0eXBlcyk7Ci0gICAgIAotICAgICBpZiAoZXJyb3JMaXN0LmlzRW1wdHkoKSkgCi0gICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbGlkYXRvci5jcmVhdGVBc3NlcnRpb25SZXN1bHQodGVzdEFzc2VydGlvbiwgCi0gICAgICAgICAgICAgIEFzc2VydGlvblJlc3VsdC5SRVNVTFRfTk9UX0FQUExJQ0FCTEUsIChTdHJpbmcpIG51bGwpOwotICAgICB9Ci0gICAgIAotICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbCh0ZXN0QXNzZXJ0aW9uLmdldEZhaWx1cmVNZXNzYWdlKCkgKyAKLSAgICAgICAgICJcblxuIiArIGVycm9yTGlzdC50b1N0cmluZygpLCBlbnRyeUNvbnRleHQpOwotICAgICAvLyBSZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdAotICAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICAgfQotICAgCi0gICAvKioKLSAgICAqIENsYXNzIGZvciBwYXJzZSBzY2hlbWEgYW5kIHNlYXJjaCBhbm5vdGF0aW9uIGVsZW1lbnRzIAotICAgICovCi0gICBjbGFzcyBBbm5vdGF0aW9uUHJvY2Vzc29yIGV4dGVuZHMgWE1MU2NoZW1hUHJvY2Vzc29yCi0gICB7Ci0gICAgIHB1YmxpYyBBbm5vdGF0aW9uUHJvY2Vzc29yKFN0cmluZyBjb250ZXh0KQotICAgICB7Ci0gICAgICAgc3VwZXIoY29udGV4dCwgZmFsc2UpOwotICAgICB9Ci0KLSAgICAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc1NjaGVtYShFbGVtZW50IGVsZW1lbnQpCi0gICAgIHsKLSAgICAgICBjaGVja0ZvckFubm90YXRpb24oZWxlbWVudCk7Ci0gICAgIH0KLSAgICAgCi0gICAgIHByaXZhdGUgdm9pZCBjaGVja0ZvckFubm90YXRpb24oTm9kZSBub2RlKSAKLSAgICAgewotICAgICAgIGlmKChub2RlLmdldExvY2FsTmFtZSgpICE9IG51bGwpICYmIChub2RlLmdldExvY2FsTmFtZSgpLmVxdWFscyhBTk5PVEFUSU9OX0tFWSkpKSB7Ci0gICAgICAgICBlcnJvckxpc3QuYWRkKG5vZGUudG9TdHJpbmcoKSk7Ci0gICAgICAgfQotICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbm9kZS5nZXRDaGlsZE5vZGVzKCkuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICAgICB7Ci0gICAgICAgICBjaGVja0ZvckFubm90YXRpb24obm9kZS5nZXRDaGlsZE5vZGVzKCkuaXRlbShpKSk7Ci0gICAgICAgfQotICAgICB9Ci0gICB9Ci0gfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9TU0JQMjIwOS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1NTQlAyMjA5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjNGRkMGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1NTQlAyMjA5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0KLS8qKgotICogU1NCUDIyMDkKLSAqCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDpiaW5kaW5nIGVsZW1lbnQ8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+VGhlIHdzZGw6YmluZGluZyBiaW5kcyBldmVyeSB3c2RsOnBhcnQgb2YgYSB3c2RsOm1lc3NhZ2UgaW4gdGhlIHdzZGw6cG9ydFR5cGUgdG8gd2hpY2ggaXQgcmVmZXJzIHRvIG9uZSBvZiBzb2FwYmluZDpib2R5LCBzb2FwYmluZDpoZWFkZXIsIHNvYXBiaW5kOmZhdWx0IG9yIHNvYXBiaW5kOmhlYWRlcmZhdWx0LjwvYXNzZXJ0aW9uRGVzY3JpcHRpb24+Ci0gKi8KLXB1YmxpYyBjbGFzcyBTU0JQMjIwOSBleHRlbmRzIEJQMjExNAotewotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgU1NCUDIyMDkoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1NTQlAyNDAyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvU1NCUDI0MDIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTI5MWYzNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvU1NCUDI0MDIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogU1NCUDI0MDIKLSAqLwotcHVibGljIGNsYXNzIFNTQlAyNDAyIGV4dGVuZHMgQlAyNDAyCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFNTQlAyNDAyKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9TU0JQMjQwMy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1NTQlAyNDAzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0MTMyMGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1NTQlAyNDAzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5FcnJvckxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVHJhdmVyc2FsOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0KLS8qKgotICogU1NCUDI0MDMuCi0gKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDpiaW5kaW5nIGVsZW1lbnQ8L2NvbnRleHQ+Ci0gKiA8YXNzZXJ0aW9uRGVzY3JpcHRpb24+RGVzY2VuZGFudCBlbGVtZW50cyBhbmQgYXR0cmlidXRlcyBpbiB0aGUgd3NkbDpiaW5kaW5nIGFyZSBub3QgZnJvbSB0aGUgbmFtZXNwYWNlcyBmb3IgdGhlIFdTREwgTUlNRSwgSFRUUCBHRVQvUE9TVCBvciBESU1FIGJpbmRpbmcgZXh0ZW5zaW9ucy48L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgU1NCUDI0MDMgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzVmlzaXRvciBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgU1NCUDI0MDMoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICAgIHRoaXMudmFsaWRhdG9yID0gaW1wbDsKLSAgfQotCi0KLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JzID0gbmV3IEVycm9yTGlzdCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHRoZSBuYW1lc3BhY2Ugc3BlY2lmaWVzIGFueSBXU0RMIE1JTUUsCi0gICAqIEhUVFAgR0VUL1BPU1Qgb3IgRElNRSBiaW5kaW5nIGV4dGVuc2lvbnMuCi0gICAqIEBwYXJhbSBuYW1lc3BhY2UgYSBuYW1lc3BhY2UuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdGhlIG5hbWVzcGFjZSBzcGVjaWZpZXMgYW55IFdTREwgTUlNRSwKLSAgICogICAgICAgICBIVFRQIEdFVC9QT1NUIG9yIERJTUUgYmluZGluZyBleHRlbnNpb25zLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGlzTm9uQ29uZm9ybWFudEJpbmRpbmdFeHRlbnNpb24oU3RyaW5nIG5hbWVzcGFjZSkKLSAgewotICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0gICAgaWYgKG5hbWVzcGFjZSAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChuYW1lc3BhY2UuZXF1YWxzKFdTSUNvbnN0YW50cy5OU19OQU1FX1dTRExfTUlNRSkKLSAgICAgICAgfHwgbmFtZXNwYWNlLmVxdWFscyhXU0lDb25zdGFudHMuTlNfTkFNRV9XU0RMX0hUVFApCi0gICAgICAgIHx8IG5hbWVzcGFjZS5lcXVhbHMoV1NJQ29uc3RhbnRzLk5TX05BTUVfV1NETF9ESU1FKSkKLSAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudCwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4ZWwsCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBpZiAoaXNOb25Db25mb3JtYW50QmluZGluZ0V4dGVuc2lvbihleGVsCi0gICAgICAuZ2V0RWxlbWVudFR5cGUoKQotICAgICAgLmdldE5hbWVzcGFjZVVSSSgpKSkKLSAgICAgIGVycm9ycy5hZGQoZXhlbC5nZXRFbGVtZW50VHlwZSgpKTsKLSAgICBlbHNlCi0gICAgewotICAgIAkvLyBleHRlbnNpYmlsaXR5IGVsZW1lbnQgaXMgb2ssIGNoZWNrIHRoZSBkZXNjZW5kYW50cwotICAgICAgaWYgKGV4ZWwgaW5zdGFuY2VvZiBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi0gICAgICB7Ci0gICAgICAgIEVsZW1lbnQgZWwgPSAoKFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCkgZXhlbCkuZ2V0RWxlbWVudCgpOwotCi0gICAgICAgIC8vIHRyYXZlcnNlIGFsbCBvZiB0aGUgZGVzY2VuZGFudHMgYW5kIGNoZWNrIGZvciBub24gY29tcGxpYW50IGJpbmRpbmcgZXh0ZW5zaW9ucwotICAgICAgICBYTUxUcmF2ZXJzYWxDaGVja2luZ0V4dGVuc2lvbnMgdHJhdmVyc2FsID0KLSAgICAgICAgICBuZXcgWE1MVHJhdmVyc2FsQ2hlY2tpbmdFeHRlbnNpb25zKCk7Ci0gICAgICAgIHRyYXZlcnNhbC52aXNpdChlbCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsLkFzc2VydGlvblByb2Nlc3MjdmFsaWRhdGUob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgdmFsaWRhdGUoCi0gICAgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0KLSAgICBXU0RMVHJhdmVyc2FsIHRyYXZlcnNhbCA9IG5ldyBXU0RMVHJhdmVyc2FsKCk7Ci0gICAgdHJhdmVyc2FsLnNldFZpc2l0b3IodGhpcyk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0RWxlbWVudCh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRFeHRlbnNpYmlsaXR5RWxlbWVudCh0cnVlKTsKLQotICAgIHRyYXZlcnNhbC5pZ25vcmVSZWZlcmVuY2VzKCk7Ci0gICAgdHJhdmVyc2FsLmlnbm9yZUltcG9ydCgpOwotICAgIHRyYXZlcnNhbC50cmF2ZXJzZSgoQmluZGluZykgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKSk7Ci0KLSAgICBpZiAoIWVycm9ycy5pc0VtcHR5KCkpCi0gICAgewotICAgICAgcmVzdWx0ID0gQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQ7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlcnJvcnMudG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICB9Ci0KLSAgICBlbHNlCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotCi0gIC8qKgotICAgKiBBIHNwZWNpYWxpemVkIFhNTFRyYXZlcnNhbCBjbGFzcyB0byBjaGVjayBpZiB0aGUgd3NkbDpiaW5kaW5nIGVsZW1lbnQgaGFzIGFueSAKLSAgICogZGVzY2VuZGFudCBlbGVtZW50cy9hdHRyaWJ1dGVzIGZyb20gdGhlIG5hbWVzcGFjZXMgZm9yIHRoZSBXU0RMIE1JTUUsIAotICAgKiBIVFRQIEdFVC9QT1NUIG9yIERJTUUgYmluZGluZyBleHRlbnNpb25zLgotICAgKi8KLSAgcHJpdmF0ZSBjbGFzcyBYTUxUcmF2ZXJzYWxDaGVja2luZ0V4dGVuc2lvbnMgZXh0ZW5kcyBYTUxUcmF2ZXJzYWwKLSAgewotICAgIGJvb2xlYW4gbm9uQ29uZm9ybWFudEV4dGVuc2lvbkZvdW5kID0gZmFsc2U7Ci0KLSAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgICogQHNlZSBvcmcud3NpLnhtbC5YTUxUcmF2ZXJzYWwjYWN0aW9uKG9yZy53M2MuZG9tLk5vZGUpCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gYWN0aW9uKE5vZGUgbikKLSAgICB7Ci0gICAgICByZXR1cm4gIW5vbkNvbmZvcm1hbnRFeHRlbnNpb25Gb3VuZDsKLSAgICB9Ci0KLSAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgICogQHNlZSBvcmcud3NpLnhtbC5YTUxWaXNpdG9yI3Zpc2l0KG9yZy53M2MuZG9tLkF0dHIpCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgdmlzaXQoQXR0ciBub2RlKQotICAgIHsKLSAgICAgIGlmIChhY3Rpb24obm9kZSkpCi0gICAgICB7Ci0gICAgICAgIGlmIChpc05vbkNvbmZvcm1hbnRCaW5kaW5nRXh0ZW5zaW9uKG5vZGUuZ2V0TmFtZXNwYWNlVVJJKCkpKQotICAgICAgICB7Ci0gICAgICAgICAgZXJyb3JzLmFkZChub2RlLmdldE5hbWUoKSk7Ci0gICAgICAgICAgbm9uQ29uZm9ybWFudEV4dGVuc2lvbkZvdW5kID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIC8qIChub24tSmF2YWRvYykKLSAgICAgKiBAc2VlIG9yZy53c2kueG1sLlhNTFZpc2l0b3IjdmlzaXQob3JnLnczYy5kb20uRWxlbWVudCkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCB2aXNpdChFbGVtZW50IG5vZGUpCi0gICAgewotICAgICAgaWYgKGFjdGlvbihub2RlKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKGlzTm9uQ29uZm9ybWFudEJpbmRpbmdFeHRlbnNpb24obm9kZS5nZXROYW1lc3BhY2VVUkkoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICBlcnJvcnMuYWRkKG5vZGUuZ2V0Tm9kZU5hbWUoKSk7Ci0gICAgICAgICAgbm9uQ29uZm9ybWFudEV4dGVuc2lvbkZvdW5kID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBlbGVtZW50IGlzIGNvbXBsaWFudCwgY2hlY2sgYXR0cmlidXRlcyBhbmQgZGVzY2VuZGFudHMKLSAgICAgICAgICB2aXNpdChub2RlLmdldEF0dHJpYnV0ZXMoKSk7Ci0gICAgICAgICAgZm9yIChOb2RlIG4gPSBub2RlLmdldEZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAgIG4gIT0gbnVsbDsKLSAgICAgICAgICAgIG4gPSBuLmdldE5leHRTaWJsaW5nKCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgZG9WaXNpdChuKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NETFZhbGlkYXRvckltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0RMVmFsaWRhdG9ySW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjMwM2NmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0RMVmFsaWRhdG9ySW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjM4NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0ZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5JbXBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBqYXZheC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgamF2YXgud3NkbC5UeXBlczsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keTsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlcjsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUE9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lSdW50aW1lRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5BbmFseXplckNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFzc2VydGlvbkZhaWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkNhbmRpZGF0ZUluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLlNlcnZpY2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5BbmFseXplckNvbmZpZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlByb2ZpbGVBcnRpZmFjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5Qcm9maWxlQXNzZXJ0aW9uczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLldTRExWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5FbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkVudHJ5Q29udGFpbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuRmFpbHVyZURldGFpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydEFydGlmYWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRW50cnlUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLldTRExEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC5XU0RMRWxlbWVudExpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwuV1NETFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuZG9tLkVsZW1lbnRMb2NhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLnNjaGVtYS5UYXJnZXROYW1lc3BhY2VQcm9jZXNzb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5zY2hlbWEuWE1MU2NoZW1hVmFsaWRhdG9yOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLS8qKgotICogVGhlIFdTREwgdmFsaWRhdG9yIHdpbGwgdmVyaWZ5IHRoYXQgdGhlIFdTREwgYW5kIGFzc29jaWF0ZWQgWE1MIHNjaGVtYSBkZWZpbml0aW9ucwotICogYXJlIGluIGNvbmZvcm1hbmNlIHdpdGggdGhlIHByb2ZpbGUuCi0gKgotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICogQGF1dGhvciBHcmFoYW0gVHVycmVsbCAJKGd0dXJyZWxsQHVrLmlibS5jb20pCi0gKi8KLQotcHVibGljIGNsYXNzIFdTRExWYWxpZGF0b3JJbXBsCi0gIGV4dGVuZHMgQmFzZVZhbGlkYXRvckltcGwKLSAgaW1wbGVtZW50cyBXU0RMVmFsaWRhdG9yCi17Ci0gIC8qKgotICAgKiBXU0RMIFVSTC4KLSAgICogQGRlcHJlY2F0ZWQgLS0gYWNjZXNzIHRoZSB3c2RsIHVybCB2aWEgd3NkbERvY3VtZW50IGZpZWxkLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyB3c2RsVVJMOwotCi0gIC8qKgotICAgKiBXU0RMIGRvY3VtZW50LgotICAgKi8KLSAgcHJvdGVjdGVkIFdTRExEb2N1bWVudCB3c2RsRG9jdW1lbnQgPSBudWxsOwotICBwcml2YXRlIGJvb2xlYW4gdGVzdGFibGU7Ci0gIAotICAvKioKLSAgICogRW50cnkgY29udGFpbmVyIG1hcC4KLSAgICovCi0gIHByb3RlY3RlZCBIYXNoTWFwIGNvbnRhaW5lck1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0gIAotICBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzRGVmQXNzZXJ0aW9ucyA9IHRydWU7Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgYXJ0aWZhY3QgdHlwZSB0aGF0IHRoaXMgdmFsaWRhdG9yIGFwcGxpZXMgdG8uCi0gICAqIEByZXR1cm4gdGhlIGFydGlmYWN0IHR5cGUgKGEgU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRBcnRpZmFjdFR5cGUoKSAKLSAgeyAgCi0gICAgICByZXR1cm4gVFlQRV9ERVNDUklQVElPTjsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIGNvbGxlY3Rpb24gb2YgZW50cnkgdHlwZXMgdGhhdCB0aGlzIHZhbGlkYXRvciBhcHBsaWVzIHRvLgotICAgKiBAcmV0dXJuIGFuIGFycmF5IG9mIGVudHJ5IHR5cGVzIChTdHJpbmdzKQotICAgKi8KLSAgcHVibGljIFN0cmluZ1tdIGdldEVudHJ5VHlwZXMoKSAKLSAgewotICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbXSB7Ci0gICAgICAgICAgICAgIFRZUEVfREVTQ1JJUFRJT05fREVGSU5JVElPTlMsCi0gICAgICAgICAgICAgIFRZUEVfREVTQ1JJUFRJT05fSU1QT1JULAotICAgICAgICAgICAgICBUWVBFX0RFU0NSSVBUSU9OX1RZUEVTLAotICAgICAgICAgICAgICBUWVBFX0RFU0NSSVBUSU9OX01FU1NBR0UsCi0gICAgICAgICAgICAgIFRZUEVfREVTQ1JJUFRJT05fT1BFUkFUSU9OLAotICAgICAgICAgICAgICBUWVBFX0RFU0NSSVBUSU9OX1BPUlRUWVBFLAotICAgICAgICAgICAgICBUWVBFX0RFU0NSSVBUSU9OX0JJTkRJTkcsCi0gICAgICAgICAgICAgIFRZUEVfREVTQ1JJUFRJT05fUE9SVAotICAgICAgfTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuV1NETFZhbGlkYXRvciNpbml0KG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5BbmFseXplckNvbnRleHQsIG9yZy53c2kudGVzdC5wcm9maWxlLlByb2ZpbGVBcnRpZmFjdCwgb3JnLndzaS50ZXN0LnJlcG9ydC5SZXBvcnRBcnRpZmFjdCwgamF2YS5sYW5nLlN0cmluZywgb3JnLndzaS53c2RsLldTRExEb2N1bWVudCwgb3JnLndzaS50ZXN0LnJlcG9ydC5SZXBvcnRlcikKLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXQoCi0gICAgQW5hbHl6ZXJDb250ZXh0IGFuYWx5emVyQ29udGV4dCwKLSAgICBQcm9maWxlQXNzZXJ0aW9ucyBhc3NlcnRpb25zLAotICAgIFJlcG9ydEFydGlmYWN0IHJlcG9ydEFydGlmYWN0LAotICAgIEFuYWx5emVyQ29uZmlnIGFuYWx5emVyQ29uZmlnLAotICAgIFJlcG9ydGVyIHJlcG9ydGVyKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIGluaXQoYW5hbHl6ZXJDb250ZXh0LCBhc3NlcnRpb25zLCByZXBvcnRBcnRpZmFjdCwgYW5hbHl6ZXJDb25maWcsIHJlcG9ydGVyLCB0cnVlKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGluaXQoCi0gICAgQW5hbHl6ZXJDb250ZXh0IGFuYWx5emVyQ29udGV4dCwKLSAgICBQcm9maWxlQXNzZXJ0aW9ucyBhc3NlcnRpb25zLAotICAgIFJlcG9ydEFydGlmYWN0IHJlcG9ydEFydGlmYWN0LAotICAgIEFuYWx5emVyQ29uZmlnIGFuYWx5emVyQ29uZmlnLAotICAgIFJlcG9ydGVyIHJlcG9ydGVyLAotICAgIGJvb2xlYW4gcHJvY2Vzc0RlZkFzc2VydGlvbnMpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gQmFzZVZhbGlkYXRvckltcGwKLSAgICBzdXBlci5pbml0KGFuYWx5emVyQ29udGV4dCwgYXNzZXJ0aW9ucy5nZXRBcnRpZmFjdChUWVBFX0RFU0NSSVBUSU9OKSwgcmVwb3J0QXJ0aWZhY3QsIHJlcG9ydGVyKTsKLSAgICB0aGlzLndzZGxEb2N1bWVudCA9IGFuYWx5emVyQ29udGV4dC5nZXRXc2RsRG9jdW1lbnQoKTsKLSAgICB0ZXN0YWJsZSA9IGFuYWx5emVyQ29udGV4dC5nZXRXc2RsRG9jdW1lbnQoKSAhPSBudWxsOwotICAgIGlmICh0aGlzLndzZGxEb2N1bWVudCAhPSBudWxsKQotICAgICAgdGhpcy53c2RsVVJMID0gd3NkbERvY3VtZW50LmdldExvY2F0aW9uKCk7Ci0gICAgdGhpcy5wcm9jZXNzRGVmQXNzZXJ0aW9ucyA9IHByb2Nlc3NEZWZBc3NlcnRpb25zOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5XU0RMVmFsaWRhdG9yI2luaXQob3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLkFuYWx5emVyQ29udGV4dCwgb3JnLndzaS50ZXN0LnByb2ZpbGUuUHJvZmlsZUFydGlmYWN0LCBvcmcud3NpLnRlc3QucmVwb3J0LlJlcG9ydEFydGlmYWN0LCBqYXZhLmxhbmcuU3RyaW5nLCBvcmcud3NpLndzZGwuV1NETERvY3VtZW50LCBvcmcud3NpLnRlc3QucmVwb3J0LlJlcG9ydGVyKQotICAgKi8KLSAgcHVibGljIHZvaWQgaW5pdCgKLSAgICBBbmFseXplckNvbnRleHQgYW5hbHl6ZXJDb250ZXh0LAotICAgIFByb2ZpbGVBcnRpZmFjdCBwcm9maWxlQXJ0aWZhY3QsCi0gICAgUmVwb3J0QXJ0aWZhY3QgcmVwb3J0QXJ0aWZhY3QsCi0gICAgU3RyaW5nIHdzZGxVUkwsCi0gICAgV1NETERvY3VtZW50IHdzZGxEb2N1bWVudCwKLSAgICBSZXBvcnRlciByZXBvcnRlcikKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBpbml0KGFuYWx5emVyQ29udGV4dCwgcHJvZmlsZUFydGlmYWN0LCByZXBvcnRBcnRpZmFjdCwgd3NkbFVSTCwgd3NkbERvY3VtZW50LCByZXBvcnRlciwgdHJ1ZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBpbml0KAotICAgIEFuYWx5emVyQ29udGV4dCBhbmFseXplckNvbnRleHQsCi0gICAgUHJvZmlsZUFydGlmYWN0IHByb2ZpbGVBcnRpZmFjdCwKLSAgICBSZXBvcnRBcnRpZmFjdCByZXBvcnRBcnRpZmFjdCwKLSAgICBTdHJpbmcgd3NkbFVSTCwKLSAgICBXU0RMRG9jdW1lbnQgd3NkbERvY3VtZW50LAotICAgIFJlcG9ydGVyIHJlcG9ydGVyLAotICAgIGJvb2xlYW4gcHJvY2Vzc0RlZkFzc2VydGlvbnMpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gQmFzZVZhbGlkYXRvckltcGwKLSAgICBzdXBlci5pbml0KGFuYWx5emVyQ29udGV4dCwgcHJvZmlsZUFydGlmYWN0LCByZXBvcnRBcnRpZmFjdCwgcmVwb3J0ZXIpOwotICAgIHRoaXMud3NkbERvY3VtZW50ID0gd3NkbERvY3VtZW50OwotICAgIHRlc3RhYmxlID0gKHdzZGxEb2N1bWVudCAhPSBudWxsKTsKLSAgICBpZiAod3NkbERvY3VtZW50ICE9IG51bGwpCi0gICAgICB0aGlzLndzZGxVUkwgPSB3c2RsRG9jdW1lbnQuZ2V0TG9jYXRpb24oKTsKLQotICAgIGlmICh3c2RsVVJMICE9IG51bGwpCi0gICAgICB0aGlzLndzZGxVUkwgPSB3c2RsVVJMOwotICAgIHRoaXMucHJvY2Vzc0RlZkFzc2VydGlvbnMgPSBwcm9jZXNzRGVmQXNzZXJ0aW9uczsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuV1NETFZhbGlkYXRvciN2YWxpZGF0ZSgpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2YWxpZGF0ZUFydGlmYWN0KCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy9XU0RMRG9jdW1lbnQgd3NkbERvY3VtZW50ID0gbnVsbDsKLSAgICBTZXJ2aWNlIHNlcnZpY2UgPSBudWxsOwotICAgIFBvcnQgcG9ydCA9IG51bGw7Ci0gICAgQmluZGluZyBiaW5kaW5nID0gbnVsbDsKLSAgICBQb3J0VHlwZSBwb3J0VHlwZSA9IG51bGw7Ci0gICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IG51bGw7Ci0gICAgTWVzc2FnZSBtZXNzYWdlID0gbnVsbDsKLQotICAgIC8vIGl0IGRlcHJpY2F0ZWQgYWZ0ZXIgcmVmYWN0b3JpbmcgCi0gICAgLy8gbm93IHRoZSBpbm5lciBjbGFzc2VzIG1vdmVkIG91dCBmcm9tIHZhbGlkYXRvcgotICAgIC8vU3RyaW5nIGNsYXNzUHJlZml4ID0gdGhpcy5nZXRDbGFzcygpLmdldE5hbWUoKSArICIkIjsKLSAgICBTdHJpbmcgY2xhc3NQcmVmaXggPSB0aGlzLmdldENsYXNzKCkuZ2V0UGFja2FnZSgpLmdldE5hbWUoKSsiLiI7Ci0KLSAgICAvLyBHZXQgdGhlIGRlZmluaXRpb24gZWxlbWVudAotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IHdzZGxEb2N1bWVudC5nZXREZWZpbml0aW9ucygpOwotCi0gICAgLy8gR2V0IHNlcnZpY2UgcmVmZXJlbmNlIGZyb20gYW5hbHl6ZXIgY29udGV4dAotICAgIFNlcnZpY2VSZWZlcmVuY2Ugc2VydmljZVJlZmVyZW5jZSA9IGFuYWx5emVyQ29udGV4dC5nZXRTZXJ2aWNlUmVmZXJlbmNlKCk7Ci0KLSAgICAvLyBDcmVhdGUgbm9ybWFsaXplZCBkYXRhIGFib3V0IHRoZSBzZXJ2aWNlIHVuZGVyIHRlc3QuCi0gICAgQ2FuZGlkYXRlSW5mbyBjYW5kaWRhdGUgPSBuZXcgQ2FuZGlkYXRlSW5mbyhzZXJ2aWNlUmVmZXJlbmNlLCB3c2RsRG9jdW1lbnQpOwotCi0gICAgYW5hbHl6ZXJDb250ZXh0LnNldENhbmRpZGF0ZUluZm8oY2FuZGlkYXRlKTsKLQotICAgIC8vIFNldCBwcmVyZXEgdHlwZSB0byBlbnRyeSBjb250YWluZXIKLSAgICByZXBvcnRlci5zZXRQcmVyZXFUeXBlKFJlcG9ydGVyLlBSRVJFUV9UWVBFX0VOVFJZX0NPTlRBSU5FUik7Ci0KLSAgICAvLyBhbHdheXMgcHJvY2VzcyBJbXBvcnQsIERlZmluaXRpb25zICYgVHlwZXMgYXNzZXJ0aW9ucyAKLSAgICAvLyBURU1QOgotICAgIGlmIChwcm9jZXNzRGVmQXNzZXJ0aW9ucykKLSAgICB7Ci0gICAgICBwcm9jZXNzRGVmaW5pdGlvbkFzc2VydGlvbnMoY2xhc3NQcmVmaXgsIGNhbmRpZGF0ZSk7Ci0gICAgICBwcm9jZXNzVHlwZXNBc3NlcnRpb25zKGNsYXNzUHJlZml4LCBjYW5kaWRhdGUpOwotICAgICAgcHJvY2Vzc0ltcG9ydEFzc2VydGlvbnMoY2xhc3NQcmVmaXgsIGNhbmRpZGF0ZSk7Ci0gICAgfQotCi0gICAgLy8gUHJvY2VzcyB0aGUgZWxlbWVudCBoaWVyYXJjaHkgaW4gdGhlIFdTREwgZG9jdW1lbnQgc3RhcnRpbmcgd2l0aCB0aGUgb25lIHRoYXQgd2FzIHNwZWNpZmllZCAgCi0gICAgLy8gRklYOiBFbGVtZW50IGZpbmRpbmcgYWxyZWFkeSBjb21wbGV0ZWQgYnkgQ2FuZGlkYXRlSW5mbyBjb25zdHJ1Y3RvciAtIHNvIHVzZSB0aGF0IHJhdGhlciB0aGFuIHJldGVzdCBoZXJlICAKLQotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC8vIHdzZGw6cG9ydAotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIGlmIChzZXJ2aWNlUmVmZXJlbmNlLmdldFdTRExFbGVtZW50KCkuaXNQb3J0KCkpCi0gICAgewotICAgICAgLy8gRmluZCB0aGUgc2VydmljZSBlbGVtZW50Ci0gICAgICBpZiAoKHNlcnZpY2UgPQotICAgICAgICBkZWZpbml0aW9uLmdldFNlcnZpY2UoCi0gICAgICAgICAgc2VydmljZVJlZmVyZW5jZS5nZXRXU0RMRWxlbWVudCgpLmdldFBhcmVudEVsZW1lbnRRTmFtZSgpKSkKLSAgICAgICAgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IFdTSVJ1bnRpbWVFeGNlcHRpb24oCi0gICAgICAgICAgIkNvdWxkIG5vdCBsb2NhdGUgV1NETCBzZXJ2aWNlOiAiCi0gICAgICAgICAgICArIHNlcnZpY2VSZWZlcmVuY2UuZ2V0V1NETEVsZW1lbnQoKS5nZXRQYXJlbnRFbGVtZW50TmFtZSgpKTsKLSAgICAgIH0KLQotICAgICAgLy8gRmluZCB0aGUgcG9ydCBlbGVtZW50Ci0gICAgICBpZiAoKHBvcnQgPSBzZXJ2aWNlLmdldFBvcnQoc2VydmljZVJlZmVyZW5jZS5nZXRXU0RMRWxlbWVudCgpLmdldE5hbWUoKSkpCi0gICAgICAgID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBXU0lSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAgICJDb3VsZCBub3QgbG9jYXRlIFdTREwgcG9ydDogIgotICAgICAgICAgICAgKyBzZXJ2aWNlUmVmZXJlbmNlLmdldFdTRExFbGVtZW50KCkuZ2V0TmFtZSgpKTsKLSAgICAgIH0KLQotICAgICAgLy8gVEVNUDogUmVtb3ZlIHVudGlsIHRoZXJlIGFyZSBwb3J0IHRlc3QgYXNzZXJ0aW9ucyAgICAgIAotICAgICAgLy9wcm9jZXNzUG9ydEFzc2VydGlvbnMocG9ydCwgc2VydmljZVJlZmVyZW5jZSwgY2xhc3NQcmVmaXgsIHdzZGxEb2N1bWVudCk7CSAgICAgCi0KLSAgICAgIC8vIE5leHQsIHByb2Nlc3MgdGhlIGJpbmRpbmcKLSAgICAgIGlmICgoKGJpbmRpbmcgPSBwb3J0LmdldEJpbmRpbmcoKSkgPT0gbnVsbCkgfHwgKGJpbmRpbmcuaXNVbmRlZmluZWQoKSkpCi0gICAgICB7Ci0gICAgICAgIC8vdGhyb3cgbmV3IFdTSVJ1bnRpbWVFeGNlcHRpb24oIkNvdWxkIG5vdCBsb2NhdGUgV1NETCBiaW5kaW5nIGZvciBwb3J0OiAiICsgcG9ydC5nZXROYW1lKCkpOyAgCi0gICAgICAgIC8vIFNldCBtaXNzaW5nSW5wdXQgZm9yIGFsbCBiaW5kaW5nLCBwb3J0VHlwZSwgb3BlcmF0aW9uIGFuZCBtZXNzYWdlIHRlc3QgYXNzZXJ0aW9ucyAKLSAgICAgICAgc2V0TWlzc2luZ0lucHV0KEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9CSU5ESU5HKSk7Ci0gICAgICAgIHNldE1pc3NpbmdJbnB1dChFbnRyeVR5cGUuZ2V0RW50cnlUeXBlKFRZUEVfREVTQ1JJUFRJT05fUE9SVFRZUEUpKTsKLSAgICAgICAgc2V0TWlzc2luZ0lucHV0KEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9PUEVSQVRJT04pKTsKLSAgICAgICAgc2V0TWlzc2luZ0lucHV0KEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9NRVNTQUdFKSk7Ci0gICAgICB9Ci0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcHJvY2Vzc0JpbmRpbmdBc3NlcnRpb25zKAotICAgICAgICAgIGJpbmRpbmcsCi0gICAgICAgICAgc2VydmljZVJlZmVyZW5jZSwKLSAgICAgICAgICBjbGFzc1ByZWZpeCwKLSAgICAgICAgICB3c2RsRG9jdW1lbnQpOwotCi0gICAgICAgIC8vIE5leHQsIHByb2Nlc3MgdGhlIHBvcnRUeXBlCi0gICAgICAgIGlmICgoKHBvcnRUeXBlID0gYmluZGluZy5nZXRQb3J0VHlwZSgpKSA9PSBudWxsKQotICAgICAgICAgIHx8IChwb3J0VHlwZS5pc1VuZGVmaW5lZCgpKSkKLSAgICAgICAgewotICAgICAgICAgIC8vdGhyb3cgbmV3IFdTSVJ1bnRpbWVFeGNlcHRpb24oIkNvdWxkIG5vdCBsb2NhdGUgV1NETCBwb3J0VHlwZSBmb3IgYmluZGluZzogIiArIGJpbmRpbmcuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSk7Ci0gICAgICAgICAgLy8gU2V0IG1pc3NpbmdJbnB1dCBmb3IgYWxsIHBvcnRUeXBlLCBvcGVyYXRpb24gYW5kIG1lc3NhZ2UgdGVzdCBhc3NlcnRpb25zIAotICAgICAgICAgIHNldE1pc3NpbmdJbnB1dChFbnRyeVR5cGUuZ2V0RW50cnlUeXBlKFRZUEVfREVTQ1JJUFRJT05fUE9SVFRZUEUpKTsKLSAgICAgICAgICBzZXRNaXNzaW5nSW5wdXQoRW50cnlUeXBlLmdldEVudHJ5VHlwZShUWVBFX0RFU0NSSVBUSU9OX09QRVJBVElPTikpOwotICAgICAgICAgIHNldE1pc3NpbmdJbnB1dChFbnRyeVR5cGUuZ2V0RW50cnlUeXBlKFRZUEVfREVTQ1JJUFRJT05fTUVTU0FHRSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgcHJvY2Vzc01lc3NhZ2VBc3NlcnRpb25zKAotICAgICAgICAgICAgYmluZGluZywKLSAgICAgICAgICAgIHNlcnZpY2VSZWZlcmVuY2UsCi0gICAgICAgICAgICBjbGFzc1ByZWZpeCwKLSAgICAgICAgICAgIHdzZGxEb2N1bWVudCk7Ci0gICAgICAgICAgcHJvY2Vzc1BvcnRUeXBlQXNzZXJ0aW9ucygKLSAgICAgICAgICAgIHBvcnRUeXBlLAotICAgICAgICAgICAgc2VydmljZVJlZmVyZW5jZSwKLSAgICAgICAgICAgIGNsYXNzUHJlZml4LAotICAgICAgICAgICAgd3NkbERvY3VtZW50KTsKLSAgICAgICAgICBwcm9jZXNzT3BlcmF0aW9uQXNzZXJ0aW9ucygKLSAgICAgICAgICAgIHBvcnRUeXBlLAotICAgICAgICAgICAgc2VydmljZVJlZmVyZW5jZSwKLSAgICAgICAgICAgIGNsYXNzUHJlZml4LAotICAgICAgICAgICAgd3NkbERvY3VtZW50KTsKLSAgICAgICAgICBwcm9jZXNzTWVzc2FnZUFzc2VydGlvbnMoCi0gICAgICAgICAgICBwb3J0VHlwZSwKLSAgICAgICAgICAgIHNlcnZpY2VSZWZlcmVuY2UsCi0gICAgICAgICAgICBjbGFzc1ByZWZpeCwKLSAgICAgICAgICAgIHdzZGxEb2N1bWVudCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgIH0KLQotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC8vIHdzZGw6YmluZGluZwotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIGVsc2UgaWYgKHNlcnZpY2VSZWZlcmVuY2UuZ2V0V1NETEVsZW1lbnQoKS5pc0JpbmRpbmcoKSkKLSAgICB7Ci0gICAgICBXU0RMRWxlbWVudCB3c2RsRWxlbWVudCA9IHNlcnZpY2VSZWZlcmVuY2UuZ2V0V1NETEVsZW1lbnQoKTsKLSAgICAgIC8vIEZpbmQgdGhlIGJpbmRpbmcgZWxlbWVudAotICAgICAgaWYgKHdzZGxFbGVtZW50LmdldFFOYW1lKCkgIT0gbnVsbAotICAgICAgICAmJiB3c2RsRWxlbWVudC5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpICE9IG51bGwKLSAgICAgICAgJiYgd3NkbEVsZW1lbnQuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKS5sZW5ndGgoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIGlmICgoKGJpbmRpbmcgPQotICAgICAgICAgIGRlZmluaXRpb24uZ2V0QmluZGluZyhzZXJ2aWNlUmVmZXJlbmNlLmdldFdTRExFbGVtZW50KCkuZ2V0UU5hbWUoKSkpCi0gICAgICAgICAgPT0gbnVsbCkKLSAgICAgICAgICB8fCAoYmluZGluZy5pc1VuZGVmaW5lZCgpKSkKLSAgICAgICAgewotICAgICAgICAgIHRocm93IG5ldyBXU0lSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAgICAgIkNvdWxkIG5vdCBsb2NhdGUgV1NETCBiaW5kaW5nOiAiCi0gICAgICAgICAgICAgICsgc2VydmljZVJlZmVyZW5jZS5nZXRXU0RMRWxlbWVudCgpLmdldE5hbWUoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcm9jZXNzQmluZGluZ0Fzc2VydGlvbnMoCi0gICAgICAgICAgYmluZGluZywKLSAgICAgICAgICBzZXJ2aWNlUmVmZXJlbmNlLAotICAgICAgICAgIGNsYXNzUHJlZml4LAotICAgICAgICAgIHdzZGxEb2N1bWVudCk7Ci0gICAgICAgIHByb2Nlc3NNZXNzYWdlQXNzZXJ0aW9ucygKLSAgICAgICAgICBiaW5kaW5nLAotICAgICAgICAgIHNlcnZpY2VSZWZlcmVuY2UsCi0gICAgICAgICAgY2xhc3NQcmVmaXgsCi0gICAgICAgICAgd3NkbERvY3VtZW50KTsKLQotICAgICAgICAvLyBOZXh0LCBwcm9jZXNzIHRoZSBwb3J0VHlwZQotICAgICAgICBpZiAoKChwb3J0VHlwZSA9IGJpbmRpbmcuZ2V0UG9ydFR5cGUoKSkgPT0gbnVsbCkKLSAgICAgICAgICB8fCAocG9ydFR5cGUuaXNVbmRlZmluZWQoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICAvL3Rocm93IG5ldyBXU0lSdW50aW1lRXhjZXB0aW9uKCJDb3VsZCBub3QgbG9jYXRlIFdTREwgUG9ydFR5cGUgZm9yIEJpbmRpbmc6ICIgKyBiaW5kaW5nLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCkpOwotCi0gICAgICAgICAgLy8gU2V0IG1pc3NpbmdJbnB1dCBmb3IgYWxsIHBvcnRUeXBlLCBvcGVyYXRpb24gYW5kIG1lc3NhZ2UgdGVzdCBhc3NlcnRpb25zIAotICAgICAgICAgIHNldE1pc3NpbmdJbnB1dChFbnRyeVR5cGUuZ2V0RW50cnlUeXBlKFRZUEVfREVTQ1JJUFRJT05fUE9SVFRZUEUpKTsKLSAgICAgICAgICBzZXRNaXNzaW5nSW5wdXQoRW50cnlUeXBlLmdldEVudHJ5VHlwZShUWVBFX0RFU0NSSVBUSU9OX09QRVJBVElPTikpOwotICAgICAgICAgIHNldE1pc3NpbmdJbnB1dChFbnRyeVR5cGUuZ2V0RW50cnlUeXBlKFRZUEVfREVTQ1JJUFRJT05fTUVTU0FHRSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgcHJvY2Vzc1BvcnRUeXBlQXNzZXJ0aW9ucygKLSAgICAgICAgICAgIHBvcnRUeXBlLAotICAgICAgICAgICAgc2VydmljZVJlZmVyZW5jZSwKLSAgICAgICAgICAgIGNsYXNzUHJlZml4LAotICAgICAgICAgICAgd3NkbERvY3VtZW50KTsKLSAgICAgICAgICBwcm9jZXNzT3BlcmF0aW9uQXNzZXJ0aW9ucygKLSAgICAgICAgICAgIHBvcnRUeXBlLAotICAgICAgICAgICAgc2VydmljZVJlZmVyZW5jZSwKLSAgICAgICAgICAgIGNsYXNzUHJlZml4LAotICAgICAgICAgICAgd3NkbERvY3VtZW50KTsKLQotICAgICAgICAgIC8vIFByb2Nlc3MgZWFjaCBtZXNzYWdlIHdpdGhpbiBlYWNoIG9wZXJhdGlvbiBvZiB0aGUgcG9ydFR5cGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBiaW5kaW5nCi0gICAgICAgICAgcHJvY2Vzc01lc3NhZ2VBc3NlcnRpb25zKAotICAgICAgICAgICAgcG9ydFR5cGUsCi0gICAgICAgICAgICBzZXJ2aWNlUmVmZXJlbmNlLAotICAgICAgICAgICAgY2xhc3NQcmVmaXgsCi0gICAgICAgICAgICB3c2RsRG9jdW1lbnQpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8vIFRoZXJlIHdhcyBhIHByb2JsZW0gd2l0aCB0aGUgYmluZGluZyBlbGVtZW50IHNwZWNpZmljYXRpb24uICBUaGlzIGNhbiAKLSAgICAgIC8vIGhhcHBlbiB3aGVuIGEgVURESSB0TW9kZWwgZGlkIG5vdCBoYXZlIGEgdmFsaWQgYmluZGluZyByZWZlcmVuY2UuCi0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIC8vIFNldCBtaXNzaW5nSW5wdXQgZm9yIGFsbCBiaW5kaW5nLCBwb3J0VHlwZSwgb3BlcmF0aW9uIGFuZCBtZXNzYWdlIHRlc3QgYXNzZXJ0aW9ucyAKLSAgICAgICAgc2V0TWlzc2luZ0lucHV0KEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9CSU5ESU5HKSk7Ci0gICAgICAgIHNldE1pc3NpbmdJbnB1dChFbnRyeVR5cGUuZ2V0RW50cnlUeXBlKFRZUEVfREVTQ1JJUFRJT05fUE9SVFRZUEUpKTsKLSAgICAgICAgc2V0TWlzc2luZ0lucHV0KEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9PUEVSQVRJT04pKTsKLSAgICAgICAgc2V0TWlzc2luZ0lucHV0KEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9NRVNTQUdFKSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gd3NkbDpwb3J0VHlwZQotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIGVsc2UgaWYgKHNlcnZpY2VSZWZlcmVuY2UuZ2V0V1NETEVsZW1lbnQoKS5pc1BvcnRUeXBlKCkpCi0gICAgewotICAgICAgLy8gRmluZCB0aGUgUG9ydFR5cGUgZWxlbWVudAotICAgICAgaWYgKCgocG9ydFR5cGUgPQotICAgICAgICBkZWZpbml0aW9uLmdldFBvcnRUeXBlKHNlcnZpY2VSZWZlcmVuY2UuZ2V0V1NETEVsZW1lbnQoKS5nZXRRTmFtZSgpKSkKLSAgICAgICAgPT0gbnVsbCkKLSAgICAgICAgfHwgKHBvcnRUeXBlLmlzVW5kZWZpbmVkKCkpKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgV1NJUnVudGltZUV4Y2VwdGlvbigKLSAgICAgICAgICAiQ291bGQgbm90IGxvY2F0ZSBXU0RMIFBvcnRUeXBlOiAiCi0gICAgICAgICAgICArIHNlcnZpY2VSZWZlcmVuY2UuZ2V0V1NETEVsZW1lbnQoKS5nZXROYW1lKCkpOwotICAgICAgfQotCi0gICAgICAvLyBTZXQgbWlzc2luZ0lucHV0IGZvciBhbGwgYmluZGluZyB0ZXN0IGFzc2VydGlvbnMgCi0gICAgICBzZXRNaXNzaW5nSW5wdXQoRW50cnlUeXBlLmdldEVudHJ5VHlwZShUWVBFX0RFU0NSSVBUSU9OX0JJTkRJTkcpKTsKLQotICAgICAgcHJvY2Vzc1BvcnRUeXBlQXNzZXJ0aW9ucygKLSAgICAgICAgcG9ydFR5cGUsCi0gICAgICAgIHNlcnZpY2VSZWZlcmVuY2UsCi0gICAgICAgIGNsYXNzUHJlZml4LAotICAgICAgICB3c2RsRG9jdW1lbnQpOwotICAgICAgcHJvY2Vzc09wZXJhdGlvbkFzc2VydGlvbnMoCi0gICAgICAgIHBvcnRUeXBlLAotICAgICAgICBzZXJ2aWNlUmVmZXJlbmNlLAotICAgICAgICBjbGFzc1ByZWZpeCwKLSAgICAgICAgd3NkbERvY3VtZW50KTsKLQotICAgICAgLy8gUHJvY2VzcyBlYWNoIG1lc3NhZ2Ugd2l0aGluIGVhY2ggb3BlcmF0aW9uIG9mIHRoZSBwb3J0VHlwZQotICAgICAgcHJvY2Vzc01lc3NhZ2VBc3NlcnRpb25zKAotICAgICAgICBwb3J0VHlwZSwKLSAgICAgICAgc2VydmljZVJlZmVyZW5jZSwKLSAgICAgICAgY2xhc3NQcmVmaXgsCi0gICAgICAgIHdzZGxEb2N1bWVudCk7Ci0gICAgfQotCi0gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gd3NkbDpvcGVyYXRpb24KLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICBlbHNlIGlmIChzZXJ2aWNlUmVmZXJlbmNlLmdldFdTRExFbGVtZW50KCkuaXNPcGVyYXRpb24oKSkKLSAgICB7Ci0gICAgICAvLyBGaW5kIHRoZSBvcGVyYXRpb24KLSAgICAgIC8vIGdldCBwb3J0VHlwZSBmcm9tIGNvbmZpZyBwYXJlbnQgZWxlbWVudAotICAgICAgaWYgKCgocG9ydFR5cGUgPQotICAgICAgICBkZWZpbml0aW9uLmdldFBvcnRUeXBlKAotICAgICAgICAgIHNlcnZpY2VSZWZlcmVuY2UuZ2V0V1NETEVsZW1lbnQoKS5nZXRQYXJlbnRFbGVtZW50UU5hbWUoKSkpCi0gICAgICAgID09IG51bGwpCi0gICAgICAgIHx8IChwb3J0VHlwZS5pc1VuZGVmaW5lZCgpKSkKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IFdTSVJ1bnRpbWVFeGNlcHRpb24oCi0gICAgICAgICAgIkNvdWxkIG5vdCBsb2NhdGUgV1NETCBwb3J0VHlwZTogIgotICAgICAgICAgICAgKyBzZXJ2aWNlUmVmZXJlbmNlLmdldFdTRExFbGVtZW50KCkuZ2V0UGFyZW50RWxlbWVudFFOYW1lKCkpOwotICAgICAgfQotCi0gICAgICBpZiAoKChvcGVyYXRpb24gPQotICAgICAgICBnZXRPcGVyYXRpb25Gcm9tUG9ydFR5cGUoCi0gICAgICAgICAgcG9ydFR5cGUsCi0gICAgICAgICAgc2VydmljZVJlZmVyZW5jZS5nZXRXU0RMRWxlbWVudCgpLmdldE5hbWUoKSkpCi0gICAgICAgID09IG51bGwpCi0gICAgICAgIHx8IChvcGVyYXRpb24uaXNVbmRlZmluZWQoKSkpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBXU0lSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAgICJDb3VsZCBub3QgbG9jYXRlIFdTREwgT3BlcmF0aW9uOiAiCi0gICAgICAgICAgICArIHNlcnZpY2VSZWZlcmVuY2UuZ2V0V1NETEVsZW1lbnQoKS5nZXROYW1lKCkKLSAgICAgICAgICAgICsgImluIHBvcnRUeXBlOiAiCi0gICAgICAgICAgICArIHBvcnRUeXBlLmdldFFOYW1lKCkpOwotICAgICAgfQotCi0gICAgICAvLyBTZXQgbWlzc2luZ0lucHV0IGZvciBhbGwgYmluZGluZyBhbmQgcG9ydFR5cGUgdGVzdCBhc3NlcnRpb25zIAotICAgICAgc2V0TWlzc2luZ0lucHV0KEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9CSU5ESU5HKSk7Ci0gICAgICBzZXRNaXNzaW5nSW5wdXQoRW50cnlUeXBlLmdldEVudHJ5VHlwZShUWVBFX0RFU0NSSVBUSU9OX1BPUlRUWVBFKSk7Ci0KLSAgICAgIHByb2Nlc3NPcGVyYXRpb25Bc3NlcnRpb25zKAotICAgICAgICBvcGVyYXRpb24sCi0gICAgICAgIHBvcnRUeXBlLAotICAgICAgICBzZXJ2aWNlUmVmZXJlbmNlLAotICAgICAgICBjbGFzc1ByZWZpeCwKLSAgICAgICAgd3NkbERvY3VtZW50KTsKLSAgICAgIHByb2Nlc3NNZXNzYWdlQXNzZXJ0aW9ucygKLSAgICAgICAgb3BlcmF0aW9uLAotICAgICAgICBzZXJ2aWNlUmVmZXJlbmNlLAotICAgICAgICBjbGFzc1ByZWZpeCwKLSAgICAgICAgd3NkbERvY3VtZW50KTsKLSAgICB9Ci0KLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAvLyB3c2RsOm1lc3NhZ2UKLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICBlbHNlIGlmIChzZXJ2aWNlUmVmZXJlbmNlLmdldFdTRExFbGVtZW50KCkuaXNNZXNzYWdlKCkpCi0gICAgewotICAgICAgLy8gRmluZCB0aGUgbWVzc2FnZQotICAgICAgaWYgKCgobWVzc2FnZSA9Ci0gICAgICAgIGRlZmluaXRpb24uZ2V0TWVzc2FnZShzZXJ2aWNlUmVmZXJlbmNlLmdldFdTRExFbGVtZW50KCkuZ2V0UU5hbWUoKSkpCi0gICAgICAgID09IG51bGwpCi0gICAgICAgIHx8IChtZXNzYWdlLmlzVW5kZWZpbmVkKCkpKQotICAgICAgewotICAgICAgICB0aHJvdyBuZXcgV1NJUnVudGltZUV4Y2VwdGlvbigKLSAgICAgICAgICAiQ291bGQgbm90IGxvY2F0ZSBXU0RMIE1lc3NhZ2U6ICIKLSAgICAgICAgICAgICsgc2VydmljZVJlZmVyZW5jZS5nZXRXU0RMRWxlbWVudCgpLmdldE5hbWUoKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIFNldCBtaXNzaW5nSW5wdXQgZm9yIGFsbCBiaW5kaW5nLCBwb3J0VHlwZSwgYW5kIG9wZXJhdGlvbiB0ZXN0IGFzc2VydGlvbnMgCi0gICAgICBzZXRNaXNzaW5nSW5wdXQoRW50cnlUeXBlLmdldEVudHJ5VHlwZShUWVBFX0RFU0NSSVBUSU9OX0JJTkRJTkcpKTsKLSAgICAgIHNldE1pc3NpbmdJbnB1dChFbnRyeVR5cGUuZ2V0RW50cnlUeXBlKFRZUEVfREVTQ1JJUFRJT05fUE9SVFRZUEUpKTsKLSAgICAgIHNldE1pc3NpbmdJbnB1dChFbnRyeVR5cGUuZ2V0RW50cnlUeXBlKFRZUEVfREVTQ1JJUFRJT05fT1BFUkFUSU9OKSk7Ci0KLSAgICAgIHByb2Nlc3NNZXNzYWdlQXNzZXJ0aW9ucygKLSAgICAgICAgbWVzc2FnZSwKLSAgICAgICAgc2VydmljZVJlZmVyZW5jZSwKLSAgICAgICAgY2xhc3NQcmVmaXgsCi0gICAgICAgIHdzZGxEb2N1bWVudCk7Ci0gICAgfQotCi0gICAgZWxzZQotICAgIHsKLSAgICAgIHRocm93IG5ldyBXU0lSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAiVGhlIGZvbGxvd2luZyBXU0RMIHR5cGUgaXMgbm90IHN1cHBvcnRlZDogIgotICAgICAgICAgICsgc2VydmljZVJlZmVyZW5jZS5nZXRXU0RMRWxlbWVudCgpLmdldFR5cGUoKSk7Ci0gICAgfQotCi0gICAgLy8gQ2xlYW51cAotICAgIGNsZWFudXAoKTsKLSAgfQotCi0gLyogKG5vbi1KYXZhZG9jKQotICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLldTRExWYWxpZGF0b3IjdmFsaWRhdGUoKQotICAqLwotICAvKiogQGRlcHJlY2F0ZWQgLS0gdXNlIHZhbGlkYXRlQXJ0aWZhY3QoKS4gKi8KLSAgcHVibGljIFdTRExEb2N1bWVudCB2YWxpZGF0ZSgpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHZhbGlkYXRlQXJ0aWZhY3QoKTsKLSAgICAKLSAgICAvLyBSZXR1cm4gV1NETCBkb2N1bWVudAotICAgIHJldHVybiB0aGlzLndzZGxEb2N1bWVudDsKLSAgfQotICAvKioKLSAgICogR2V0IGVudHJ5IGNvbnRhaW5lciB1c2luZyB0aGUgZmlsZW5hbWUgZm9yIFdTREwgZG9jdW1lbnQuCi0gICAqIEBwYXJhbSBmaWxlbmFtZSBhIGZpbGUgbmFtZS4KLSAgICogQHJldHVybiBlbnRyeSBjb250YWluZXIgdXNpbmcgdGhlIGZpbGVuYW1lIGZvciBXU0RMIGRvY3VtZW50LgotICAgKi8KLSAgcHJvdGVjdGVkIEVudHJ5Q29udGFpbmVyIGdldEVudHJ5Q29udGFpbmVyKFN0cmluZyBmaWxlbmFtZSkKLSAgewotICAgIEVudHJ5Q29udGFpbmVyIGVudHJ5Q29udGFpbmVyID0gbnVsbDsKLQotICAgIC8vIElmIHRoZSBlbnRyeSBjb250YWluZXIgYWxyZWFkeSBleGlzdHMsIHRoZW4gdXNlIGl0Ci0gICAgaWYgKChlbnRyeUNvbnRhaW5lciA9IChFbnRyeUNvbnRhaW5lcikgY29udGFpbmVyTWFwLmdldChmaWxlbmFtZSkpID09IG51bGwpCi0gICAgewotICAgICAgLy8gQ3JlYXRlIG5ldyBlbnRyeSBjb250YWluZXIKLSAgICAgIGVudHJ5Q29udGFpbmVyID0gdGhpcy5yZXBvcnRlci5jcmVhdGVFbnRyeUNvbnRhaW5lcigpOwotCi0gICAgICAvLyBTZXQgY29udGFpbmVyIGlkIHVzaW5nIHRoZSBmaWxlbmFtZSBmb3IgdGhlIFdTREwgZG9jdW1lbnQKLSAgICAgIGVudHJ5Q29udGFpbmVyLnNldElkKGZpbGVuYW1lKTsKLQotICAgICAgLy8gUHV0IHRoZSBuZXcgZW50cnkgY29udGFpbmVyIGludG8gdGhlIGNvbnRhaW5lciBtYXAKLSAgICAgIGNvbnRhaW5lck1hcC5wdXQoZmlsZW5hbWUsIGVudHJ5Q29udGFpbmVyKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZW50cnlDb250YWluZXI7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IG9wZXJhdGlvbiBmcm9tIHBvcnQgdHlwZS4KLSAgICogQHBhcmFtIHBvcnRUeXBlIHBvcnQgdHlwZS4KLSAgICogQHBhcmFtIG9wZXJhdGlvbk5hbWUgb3BlcmF0aW9uIG5hbWUuCi0gICAqIEByZXR1cm4gb3BlcmF0aW9uIGZyb20gcG9ydCB0eXBlLgotICAgKi8KLSAgcHJvdGVjdGVkIE9wZXJhdGlvbiBnZXRPcGVyYXRpb25Gcm9tUG9ydFR5cGUoCi0gICAgUG9ydFR5cGUgcG9ydFR5cGUsCi0gICAgU3RyaW5nIG9wZXJhdGlvbk5hbWUpCi0gIHsKLSAgICAvLyBGSVg6IHdzZGw0aiBhdmFpbGFibGUgbWV0aG9kIGNhbGwgYmVsb3cgaW1wbGllcyB0aGF0IG9ubHkgCi0gICAgLy8gbmFtZStpbnB1dG5hbWUrb3V0cHV0bmFtZSB1bmlxdWVseSBkZWZpbmVzIG9wZXJhdGlvbiAKLSAgICAvLyBVc2UgdGhpcyBpbnN0ZWFkIGZvciBub3c6IC0gZ2V0IHRoZSBmaXJzdCBvcGVyYXRpb24gd2UgZmluZC4uLgotICAgIE9wZXJhdGlvbiBvcCA9IG51bGw7Ci0gICAgaWYgKHBvcnRUeXBlLmdldE9wZXJhdGlvbnMoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIG9wSXQgPSBwb3J0VHlwZS5nZXRPcGVyYXRpb25zKCkuaXRlcmF0b3IoKTsKLQotICAgICAgd2hpbGUgKG9wSXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBvcCA9IChPcGVyYXRpb24pIG9wSXQubmV4dCgpOwotICAgICAgICBpZiAob3BlcmF0aW9uTmFtZS5lcXVhbHMob3AuZ2V0TmFtZSgpKSkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBvcDsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBudWxsOyAvLyBubyBtYXRjaGluZyBvcGVyYXRpb24gZm91bmQKLSAgfQotCi0gIC8qKgotICAgKiBQcm9jZXNzIGRlZmluaXRpb24gYXNzZXJ0aW9ucy4KLSAgICogQHBhcmFtIGNsYXNzUHJlZml4IGNsYXNzIHByZWZpeC4KLSAgICogQHBhcmFtIGNhbmRpZGF0ZSBjYW5kaWRhdGUuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW1zIG9jY3VyIGR1cmluZyBwcm9jZXNzaW5nLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc0RlZmluaXRpb25Bc3NlcnRpb25zKAotICAgIFN0cmluZyBjbGFzc1ByZWZpeCwKLSAgICBDYW5kaWRhdGVJbmZvIGNhbmRpZGF0ZSkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIEVudHJ5IGVudHJ5ID0gbnVsbDsKLQotICAgIERlZmluaXRpb25bXSB3c2RsRGVmaW5pdGlvbnMgPSBjYW5kaWRhdGUuZ2V0RGVmaW5pdGlvbnMoKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgd3NkbERlZmluaXRpb25zLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IHdzZGxEZWZpbml0aW9uc1tpXTsKLSAgICAgIGlmIChkZWZpbml0aW9uID09IG51bGwpCi0gICAgICAgIGNvbnRpbnVlOwotICAgICAgLy8gQ3JlYXRlIGVudHJ5IAotICAgICAgZW50cnkgPSB0aGlzLnJlcG9ydGVyLmdldFJlcG9ydCgpLmNyZWF0ZUVudHJ5KCk7Ci0gICAgICBlbnRyeS5zZXRFbnRyeVR5cGUoRW50cnlUeXBlLmdldEVudHJ5VHlwZShUWVBFX0RFU0NSSVBUSU9OX0RFRklOSVRJT05TKSk7Ci0gICAgICBlbnRyeS5zZXRSZWZlcmVuY2VJRChkZWZpbml0aW9uLmdldERvY3VtZW50QmFzZVVSSSgpKTsKLSAgICAgIGVudHJ5LnNldEVudHJ5RGV0YWlsKGRlZmluaXRpb24pOwotCi0gICAgICAvLyBTZXQgZW50cnkgY29udGFpbmVyCi0gICAgICBlbnRyeS5zZXRFbnRyeUNvbnRhaW5lcigKLSAgICAgICAgZ2V0RW50cnlDb250YWluZXIoZGVmaW5pdGlvbi5nZXREb2N1bWVudEJhc2VVUkkoKSkpOwotCi0gICAgICAvLyBQcm9jZXNzIGFsbCBvZiB0aGUgZGVmaW5pdGlvbiByZWxhdGVkIHRlc3QgYXNzZXJ0aW9ucwotICAgICAgcHJvY2Vzc0Fzc2VydGlvbnMoCi0gICAgICAgIGNsYXNzUHJlZml4LAotICAgICAgICBuZXcgRW50cnlDb250ZXh0KGVudHJ5LCBjYW5kaWRhdGUuZ2V0V3NkbERvY3VtZW50KCkpKTsKLSAgICAgIC8vIEFERDogbmVlZCB0byB1c2UgaGVyZSB0aGUgc3BlY2lmaWMgZG9jdW1lbnQgY29ycmVzcG9uZGluZyB0byB0aGUgZGVmaW5pdGlvbj8/Ci0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUHJvY2VzcyB0eXBlcyBhc3NlcnRpb25zLgotICAgKiBAcGFyYW0gY2xhc3NQcmVmaXggY2xhc3MgcHJlZml4LgotICAgKiBAcGFyYW0gY2FuZGlkYXRlIGNhbmRpZGF0ZS4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbSBvY2N1cnMgZHVyaW5nIHByb2Nlc3NpbmcgCi0gICAqICAgICAgICAgdHlwZSBhc3NlcnRpb25zLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc1R5cGVzQXNzZXJ0aW9ucygKLSAgICBTdHJpbmcgY2xhc3NQcmVmaXgsCi0gICAgQ2FuZGlkYXRlSW5mbyBjYW5kaWRhdGUpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgRW50cnkgZW50cnkgPSBudWxsOwotCi0gICAgVHlwZXNbXSB3c2RsVHlwZXMgPSBjYW5kaWRhdGUuZ2V0VHlwZXMoKTsKLSAgICBEZWZpbml0aW9uW10gd3NkbERlZmluaXRpb25zID0gY2FuZGlkYXRlLmdldERlZmluaXRpb25zKCk7Ci0KLSAgICAvLyBJZiB0aGVyZSBhcmUgbm8gdHlwZXMgZWxlbWVudHMsIHRoZW4gc2V0IGFsbCByZXN1bHRzIHRvIG1pc3NpbmdJbnB1dCAgIAotICAgIGlmICh3c2RsVHlwZXMgPT0gbnVsbCB8fCB3c2RsVHlwZXMubGVuZ3RoID09IDApCi0gICAgewotICAgICAgLy8gU2V0IG1pc3NpbmdJbnB1dCBmb3IgYWxsIHRlc3QgYXNzZXJ0aW9ucyB3aXRoIHRoaXMgZW50cnkgdHlwZQotICAgICAgc2V0TWlzc2luZ0lucHV0KEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9UWVBFUykpOwotICAgIH0KLQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHdzZGxUeXBlcy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgVHlwZXMgdHlwZXMgPSB3c2RsVHlwZXNbaV07Ci0gICAgICAgIGlmICh0eXBlcyA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gbm8gVHlwZXMgZWxlbWVudCBpbiBpLXRoIGRvY3VtZW50Ci0gICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDcmVhdGUgZW50cnkgCi0gICAgICAgIGVudHJ5ID0gdGhpcy5yZXBvcnRlci5nZXRSZXBvcnQoKS5jcmVhdGVFbnRyeSgpOwotICAgICAgICBlbnRyeS5zZXRFbnRyeVR5cGUoRW50cnlUeXBlLmdldEVudHJ5VHlwZShUWVBFX0RFU0NSSVBUSU9OX1RZUEVTKSk7Ci0gICAgICAgIGVudHJ5LnNldFJlZmVyZW5jZUlEKAotICAgICAgICAgIGNhbmRpZGF0ZS5nZXREZWZpbml0aW9uKHR5cGVzKS5nZXREb2N1bWVudEJhc2VVUkkoKSArICItVHlwZXMiKTsKLSAgICAgICAgZW50cnkuc2V0RW50cnlEZXRhaWwodHlwZXMpOwotCi0gICAgICAgIC8vIFNldCBlbnRyeSBjb250YWluZXIKLSAgICAgICAgZW50cnkuc2V0RW50cnlDb250YWluZXIoCi0gICAgICAgICAgZ2V0RW50cnlDb250YWluZXIod3NkbERlZmluaXRpb25zW2ldLmdldERvY3VtZW50QmFzZVVSSSgpKSk7Ci0KLSAgICAgICAgLy8gUHJvY2VzcyBhbGwgb2YgdGhlIFR5cGVzIHJlbGF0ZWQgdGVzdCBhc3NlcnRpb25zCi0gICAgICAgIHByb2Nlc3NBc3NlcnRpb25zKAotICAgICAgICAgIGNsYXNzUHJlZml4LAotICAgICAgICAgIG5ldyBFbnRyeUNvbnRleHQoZW50cnksIGNhbmRpZGF0ZS5nZXRXc2RsRG9jdW1lbnQoKSkpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBQcm9jZXNzIGltcG9ydCBhc3NlcnRpb25zLiAKLSAgICogQHBhcmFtIGNsYXNzUHJlZml4IGNsYXNzIHByZWZpeC4KLSAgICogQHBhcmFtIGNhbmRpZGF0ZSBjYW5kaWRhdGUuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW0gb2NjdXJzIGR1cmluZyBwcm9jZXNzaW5nIAotICAgKiAgICAgICAgIGltcG9ydCBhc3NlcnRpb25zLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc0ltcG9ydEFzc2VydGlvbnMoCi0gICAgU3RyaW5nIGNsYXNzUHJlZml4LAotICAgIENhbmRpZGF0ZUluZm8gY2FuZGlkYXRlKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgRW50cnkgZW50cnkgPSBudWxsOwotCi0gICAgSW1wb3J0W10gd3NkbEltcG9ydHMgPSBjYW5kaWRhdGUuZ2V0SW1wb3J0cygpOwotCi0gICAgLy8gSWYgdGhlcmUgYXJlIG5vIGltcG9ydCBlbGVtZW50cywgdGhlbiBzZXQgYWxsIHJlc3VsdHMgdG8gbWlzc2luZ0lucHV0ICAgCi0gICAgaWYgKHdzZGxJbXBvcnRzID09IG51bGwgfHwgd3NkbEltcG9ydHMubGVuZ3RoID09IDApCi0gICAgewotICAgICAgLy8gU2V0IG1pc3NpbmdJbnB1dCBmb3IgYWxsIHRlc3QgYXNzZXJ0aW9ucyB3aXRoIHRoaXMgZW50cnkgdHlwZQotICAgICAgc2V0TWlzc2luZ0lucHV0KEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9JTVBPUlQpKTsKLSAgICB9Ci0KLSAgICBlbHNlCi0gICAgewotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3c2RsSW1wb3J0cy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgSW1wb3J0IHdzZGxJbXBvcnQgPSB3c2RsSW1wb3J0c1tpXTsKLSAgICAgICAgLy8gQ3JlYXRlIGVudHJ5IAotICAgICAgICBlbnRyeSA9IHRoaXMucmVwb3J0ZXIuZ2V0UmVwb3J0KCkuY3JlYXRlRW50cnkoKTsKLSAgICAgICAgZW50cnkuc2V0RW50cnlUeXBlKEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9JTVBPUlQpKTsKLSAgICAgICAgZW50cnkuc2V0UmVmZXJlbmNlSUQod3NkbEltcG9ydC5nZXROYW1lc3BhY2VVUkkoKSk7Ci0gICAgICAgIGVudHJ5LnNldEVudHJ5RGV0YWlsKHdzZGxJbXBvcnQpOwotCi0gICAgICAgIC8vIFNldCBlbnRyeSBjb250YWluZXIKLSAgICAgICAgZW50cnkuc2V0RW50cnlDb250YWluZXIoZ2V0RW50cnlDb250YWluZXIod3NkbEltcG9ydC5nZXRMb2NhdGlvblVSSSgpKSk7Ci0KLSAgICAgICAgLy8gUHJvY2VzcyBhbGwgb2YgdGhlIGltcG9ydCByZWxhdGVkIHRlc3QgYXNzZXJ0aW9ucwotICAgICAgICBwcm9jZXNzQXNzZXJ0aW9ucygKLSAgICAgICAgICBjbGFzc1ByZWZpeCwKLSAgICAgICAgICBuZXcgRW50cnlDb250ZXh0KGVudHJ5LCBjYW5kaWRhdGUuZ2V0V3NkbERvY3VtZW50KCkpKTsKLSAgICAgICAgLy8gQUREOiBuZWVkIHRvIHVzZSBoZXJlIHRoZSBzcGVjaWZpYyBkb2N1bWVudCBjb3JyZXNwb25kaW5nIHRvIHRoZSBpbXBvcnQhIQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBQcm9jZXNzIHBvcnQgYXNzZXJ0aW9ucy4KLSAgICogQHBhcmFtIHBvcnQgYSBwb3J0LgotICAgKiBAcGFyYW0gc2VydmljZVJlZmVyZW5jZSBzZXJ2aWNlIHJlZmVyZW5jZS4KLSAgICogQHBhcmFtIGNsYXNzUHJlZml4IGNsYXNzIHByZWZpeC4KLSAgICogQHBhcmFtIHdzZGxEb2N1bWVudCBXU0RMIGRvY3VtZW50LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtIG9jY3VycyBkdXJpbmcgcHJvY2Vzc2luZyAKLSAgICogICAgICAgICBwb3J0IGFzc2VydGlvbnMuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzUG9ydEFzc2VydGlvbnMoCi0gICAgUG9ydCBwb3J0LAotICAgIFNlcnZpY2VSZWZlcmVuY2Ugc2VydmljZVJlZmVyZW5jZSwKLSAgICBTdHJpbmcgY2xhc3NQcmVmaXgsCi0gICAgV1NETERvY3VtZW50IHdzZGxEb2N1bWVudCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBFbnRyeSBlbnRyeSA9IG51bGw7Ci0KLSAgICAvLyBDcmVhdGUgZW50cnkgCSAgCi0gICAgZW50cnkgPSB0aGlzLnJlcG9ydGVyLmdldFJlcG9ydCgpLmNyZWF0ZUVudHJ5KCk7Ci0gICAgZW50cnkuc2V0RW50cnlUeXBlKEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9QT1JUKSk7Ci0gICAgZW50cnkuc2V0UmVmZXJlbmNlSUQocG9ydC5nZXROYW1lKCkpOwotICAgIGVudHJ5LnNldFBhcmVudEVsZW1lbnROYW1lKAotICAgICAgc2VydmljZVJlZmVyZW5jZS5nZXRXU0RMRWxlbWVudCgpLmdldFBhcmVudEVsZW1lbnROYW1lKCkpOwotICAgIGVudHJ5LnNldEVudHJ5RGV0YWlsKHBvcnQpOwotCi0gICAgLy8gUHJvY2VzcyBhc3NlcnRpb25zIGZvciB0aGlzIGFydGlmYWN0IGFnYWluc3QgdGhlIHRhcmdldCBjb250ZXh0Ci0gICAgcHJvY2Vzc0Fzc2VydGlvbnMoY2xhc3NQcmVmaXgsIG5ldyBFbnRyeUNvbnRleHQoZW50cnksIHdzZGxEb2N1bWVudCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIFByb2Nlc3MgYmluZGluZyBhc3NlcnRpb25zLgotICAgKiBAcGFyYW0gYmluZGluZyBiaW5kaW5nLgotICAgKiBAcGFyYW0gc2VydmljZVJlZmVyZW5jZSBzZXJ2aWNlIHJlZmVyZW5jZS4KLSAgICogQHBhcmFtIGNsYXNzUHJlZml4IGNsYXNzIHByZWZpeC4KLSAgICogQHBhcmFtIHdzZGxEb2N1bWVudCBXU0RMIGRvY3VtZW50LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtIG9jY3VycyBkdXJpbmcgcHJvY2Vzc2luZyAKLSAgICogICAgICAgICBiaW5kaW5nIGFzc2VydGlvbnMuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzQmluZGluZ0Fzc2VydGlvbnMoCi0gICAgQmluZGluZyBiaW5kaW5nLAotICAgIFNlcnZpY2VSZWZlcmVuY2Ugc2VydmljZVJlZmVyZW5jZSwKLSAgICBTdHJpbmcgY2xhc3NQcmVmaXgsCi0gICAgV1NETERvY3VtZW50IHdzZGxEb2N1bWVudCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBFbnRyeSBlbnRyeSA9IG51bGw7Ci0gICAgUU5hbWUgYmluZGluZ1FOYW1lID0gYmluZGluZy5nZXRRTmFtZSgpOwotCi0gICAgLy8gQ3JlYXRlIGVudHJ5IAotICAgIGVudHJ5ID0gdGhpcy5yZXBvcnRlci5nZXRSZXBvcnQoKS5jcmVhdGVFbnRyeSgpOwotICAgIGVudHJ5LnNldEVudHJ5VHlwZSgKLSAgICAgIEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9CSU5ESU5HKSk7Ci0gICAgZW50cnkuc2V0UmVmZXJlbmNlSUQoYmluZGluZ1FOYW1lLnRvU3RyaW5nKCkpOwotICAgIGVudHJ5LnNldEVudHJ5RGV0YWlsKGJpbmRpbmcpOwotCi0gICAgLy8gU2V0IGVudHJ5IGNvbnRhaW5lcgotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9Ci0gICAgICBhbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldERlZmluaXRpb24oYmluZGluZyk7Ci0gICAgZW50cnkuc2V0RW50cnlDb250YWluZXIoCi0gICAgICBnZXRFbnRyeUNvbnRhaW5lcigKLSAgICAgICAgKGRlZmluaXRpb24gPT0gbnVsbCA/IG51bGwgOiBkZWZpbml0aW9uLmdldERvY3VtZW50QmFzZVVSSSgpKSkpOwotCi0gICAgLy8gUHJvY2VzcyBiaW5kaW5nIHRlc3QgYXNzZXJ0aW9ucwotICAgIHByb2Nlc3NBc3NlcnRpb25zKGNsYXNzUHJlZml4LCBuZXcgRW50cnlDb250ZXh0KGVudHJ5LCB3c2RsRG9jdW1lbnQpKTsKLSAgfQotCi0gIC8qKgotICAgKiBQcm9jZXNzIHBvcnQgdHlwZSBhc3NlcnRpb25zLgotICAgKiBAcGFyYW0gcG9ydFR5cGUgcG9ydCB0eXBlLgotICAgKiBAcGFyYW0gc2VydmljZVJlZmVyZW5jZSBzZXJ2aWNlIHJlZmVyZW5jZS4KLSAgICogQHBhcmFtIGNsYXNzUHJlZml4IGNsYXNzIHByZWZpeC4KLSAgICogQHBhcmFtIHdzZGxEb2N1bWVudCBXU0RMIGRvY3VtZW50LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtIG9jY3VycyBkdXJpbmcgcHJvY2Vzc2luZyAKLSAgICogICAgICAgICBwb3J0IHR5cGUgYXNzZXJ0aW9ucy4KLSAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc1BvcnRUeXBlQXNzZXJ0aW9ucygKLSAgICBQb3J0VHlwZSBwb3J0VHlwZSwKLSAgICBTZXJ2aWNlUmVmZXJlbmNlIHNlcnZpY2VSZWZlcmVuY2UsCi0gICAgU3RyaW5nIGNsYXNzUHJlZml4LAotICAgIFdTRExEb2N1bWVudCB3c2RsRG9jdW1lbnQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICBFbnRyeSBlbnRyeSA9IG51bGw7Ci0gICAgUU5hbWUgcG9ydFR5cGVRTmFtZSA9IHBvcnRUeXBlLmdldFFOYW1lKCk7Ci0KLSAgICAvLyBDcmVhdGUgZW50cnkgCi0gICAgZW50cnkgPSB0aGlzLnJlcG9ydGVyLmdldFJlcG9ydCgpLmNyZWF0ZUVudHJ5KCk7Ci0gICAgZW50cnkuc2V0RW50cnlUeXBlKEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9QT1JUVFlQRSkpOwotICAgIGVudHJ5LnNldFJlZmVyZW5jZUlEKHBvcnRUeXBlUU5hbWUudG9TdHJpbmcoKSk7Ci0gICAgZW50cnkuc2V0RW50cnlEZXRhaWwocG9ydFR5cGUpOwotCi0gICAgLy8gU2V0IGVudHJ5IGNvbnRhaW5lcgotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9Ci0gICAgICBhbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldERlZmluaXRpb24ocG9ydFR5cGUpOwotICAgIGVudHJ5LnNldEVudHJ5Q29udGFpbmVyKAotICAgICAgZ2V0RW50cnlDb250YWluZXIoCi0gICAgICAgIChkZWZpbml0aW9uID09IG51bGwgPyBudWxsIDogZGVmaW5pdGlvbi5nZXREb2N1bWVudEJhc2VVUkkoKSkpKTsKLQotICAgIC8vIFByb2Nlc3MgdGVzdCBhc3NlcnRpb25zCi0gICAgcHJvY2Vzc0Fzc2VydGlvbnMoY2xhc3NQcmVmaXgsIG5ldyBFbnRyeUNvbnRleHQoZW50cnksIHdzZGxEb2N1bWVudCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIFByb2Nlc3Mgb3BlcmF0aW9uIGFzc2VydGlvbnMuCi0gICAqIEBwYXJhbSBvcGVyYXRpb24gYW4gb3BlcmF0aW9uLgotICAgKiBAcGFyYW0gcG9ydFR5cGUgcG9ydCB0eXBlLgotICAgKiBAcGFyYW0gc2VydmljZVJlZmVyZW5jZSBzZXJ2aWNlIHJlZmVyZW5jZS4KLSAgICogQHBhcmFtIGNsYXNzUHJlZml4IGNsYXNzIHByZWZpeC4KLSAgICogQHBhcmFtIHdzZGxEb2N1bWVudCBXU0RMIGRvY3VtZW50LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtIG9jY3VycyBkdXJpbmcgcHJvY2Vzc2luZyAKLSAgICogICAgICAgICBvcGVyYXRpb24gYXNzZXJ0aW9ucy4KLSAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc09wZXJhdGlvbkFzc2VydGlvbnMoCi0gICAgT3BlcmF0aW9uIG9wZXJhdGlvbiwKLSAgICBQb3J0VHlwZSBwb3J0VHlwZSwKLSAgICBTZXJ2aWNlUmVmZXJlbmNlIHNlcnZpY2VSZWZlcmVuY2UsCi0gICAgU3RyaW5nIGNsYXNzUHJlZml4LAotICAgIFdTRExEb2N1bWVudCB3c2RsRG9jdW1lbnQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gcXVhbGlmeSBvcGVyYXRpb24gd2l0aCBzZXJ2aWNlIGxvY2F0aW9uIGZyb20gY29uZmlnLgkKLSAgICBFbnRyeSBlbnRyeSA9IG51bGw7Ci0KLSAgICAvLyBDcmVhdGUgZW50cnkgCi0gICAgZW50cnkgPSB0aGlzLnJlcG9ydGVyLmdldFJlcG9ydCgpLmNyZWF0ZUVudHJ5KCk7Ci0gICAgZW50cnkuc2V0RW50cnlUeXBlKEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9PUEVSQVRJT04pKTsKLSAgICBlbnRyeS5zZXRSZWZlcmVuY2VJRChvcGVyYXRpb24uZ2V0TmFtZSgpKTsKLSAgICBlbnRyeS5zZXRQYXJlbnRFbGVtZW50TmFtZShwb3J0VHlwZS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpKTsKLSAgICBlbnRyeS5zZXRFbnRyeURldGFpbChvcGVyYXRpb24pOwotCi0gICAgLy8gU2V0IGVudHJ5IGNvbnRhaW5lcgotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9Ci0gICAgICBhbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldERlZmluaXRpb24ocG9ydFR5cGUpOwotICAgIGVudHJ5LnNldEVudHJ5Q29udGFpbmVyKAotICAgICAgZ2V0RW50cnlDb250YWluZXIoCi0gICAgICAgIChkZWZpbml0aW9uID09IG51bGwgPyBudWxsIDogZGVmaW5pdGlvbi5nZXREb2N1bWVudEJhc2VVUkkoKSkpKTsKLQotICAgIC8vIFByb2Nlc3MgdGVzdCBhc3NlcnRpb25zCi0gICAgcHJvY2Vzc0Fzc2VydGlvbnMoY2xhc3NQcmVmaXgsIG5ldyBFbnRyeUNvbnRleHQoZW50cnksIHdzZGxEb2N1bWVudCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIFByb2Nlc3Mgb3BlcmF0aW9uIGFzc2VydGlvbnMuCi0gICAqIEBwYXJhbSBwb3J0VHlwZSBwb3J0IHR5cGUuCi0gICAqIEBwYXJhbSBzZXJ2aWNlUmVmZXJlbmNlIHNlcnZpY2UgcmVmZXJlbmNlLgotICAgKiBAcGFyYW0gY2xhc3NQcmVmaXggY2xhc3MgcHJlZml4LgotICAgKiBAcGFyYW0gd3NkbERvY3VtZW50IFdTREwgZG9jdW1lbnQuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW0gb2NjdXJzIGR1cmluZyBwcm9jZXNzaW5nIAotICAgKiAgICAgICAgIG9wZXJhdGlvbiBhc3NlcnRpb25zLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc09wZXJhdGlvbkFzc2VydGlvbnMoCi0gICAgUG9ydFR5cGUgcG9ydFR5cGUsCi0gICAgU2VydmljZVJlZmVyZW5jZSBzZXJ2aWNlUmVmZXJlbmNlLAotICAgIFN0cmluZyBjbGFzc1ByZWZpeCwKLSAgICBXU0RMRG9jdW1lbnQgd3NkbERvY3VtZW50KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEZvciBlYWNoIG9wZXJhdGlvbiwgCi0gICAgaWYgKHBvcnRUeXBlLmdldE9wZXJhdGlvbnMoKSA9PSBudWxsKQotICAgIHsKLSAgICAgIHNldE1pc3NpbmdJbnB1dChFbnRyeVR5cGUuZ2V0RW50cnlUeXBlKFRZUEVfREVTQ1JJUFRJT05fT1BFUkFUSU9OKSk7Ci0gICAgfQotCi0gICAgZWxzZQotICAgIHsKLSAgICAgIE9wZXJhdGlvbiBvcGVyYXRpb247Ci0gICAgICBJdGVyYXRvciBvcEl0ID0gcG9ydFR5cGUuZ2V0T3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAob3BJdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIG9wZXJhdGlvbiA9IChPcGVyYXRpb24pIG9wSXQubmV4dCgpOwotICAgICAgICBpZiAob3BlcmF0aW9uID09IG51bGwgfHwgb3BlcmF0aW9uLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgc2V0TWlzc2luZ0lucHV0KEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9PUEVSQVRJT04pKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHByb2Nlc3NPcGVyYXRpb25Bc3NlcnRpb25zKAotICAgICAgICAgICAgb3BlcmF0aW9uLAotICAgICAgICAgICAgcG9ydFR5cGUsCi0gICAgICAgICAgICBzZXJ2aWNlUmVmZXJlbmNlLAotICAgICAgICAgICAgY2xhc3NQcmVmaXgsCi0gICAgICAgICAgICB3c2RsRG9jdW1lbnQpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBQcm9jZXNzIG1lc3NhZ2UgYXNzZXJ0aW9ucy4KLSAgICogQHBhcmFtIG1lc3NhZ2UgYSBtZXNzYWdlLgotICAgKiBAcGFyYW0gc2VydmljZVJlZmVyZW5jZSBzZXJ2aWNlIHJlZmVyZW5jZS4KLSAgICogQHBhcmFtIGNsYXNzUHJlZml4IGNsYXNzIHByZWZpeC4KLSAgICogQHBhcmFtIHdzZGxEb2N1bWVudCBXU0RMIGRvY3VtZW50LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtIG9jY3VycyBkdXJpbmcgcHJvY2Vzc2luZyAKLSAgICogICAgICAgICBtZXNzYWdlIGFzc2VydGlvbnMuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzTWVzc2FnZUFzc2VydGlvbnMoCi0gICAgTWVzc2FnZSBtZXNzYWdlLAotICAgIFNlcnZpY2VSZWZlcmVuY2Ugc2VydmljZVJlZmVyZW5jZSwKLSAgICBTdHJpbmcgY2xhc3NQcmVmaXgsCi0gICAgV1NETERvY3VtZW50IHdzZGxEb2N1bWVudCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIEVudHJ5IGVudHJ5ID0gbnVsbDsKLSAgICBRTmFtZSBtZXNzYWdlUU5hbWUgPSBtZXNzYWdlLmdldFFOYW1lKCk7Ci0KLSAgICAvLyBDcmVhdGUgZW50cnkgCi0gICAgZW50cnkgPSB0aGlzLnJlcG9ydGVyLmdldFJlcG9ydCgpLmNyZWF0ZUVudHJ5KCk7Ci0gICAgZW50cnkuc2V0RW50cnlUeXBlKEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9NRVNTQUdFKSk7Ci0gICAgZW50cnkuc2V0UmVmZXJlbmNlSUQobWVzc2FnZVFOYW1lLnRvU3RyaW5nKCkpOwotICAgIGVudHJ5LnNldEVudHJ5RGV0YWlsKG1lc3NhZ2UpOwotCi0gICAgLy8gU2V0IGVudHJ5IGNvbnRhaW5lcgotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9Ci0gICAgICBhbmFseXplckNvbnRleHQuZ2V0Q2FuZGlkYXRlSW5mbygpLmdldERlZmluaXRpb24obWVzc2FnZSk7Ci0gICAgZW50cnkuc2V0RW50cnlDb250YWluZXIoCi0gICAgICBnZXRFbnRyeUNvbnRhaW5lcigKLSAgICAgICAgKGRlZmluaXRpb24gPT0gbnVsbCA/IG51bGwgOiBkZWZpbml0aW9uLmdldERvY3VtZW50QmFzZVVSSSgpKSkpOwotCi0gICAgLy8gUHJvY2VzcyBiaW5kaW5nIHRlc3QgYXNzZXJ0aW9ucwotICAgIHByb2Nlc3NBc3NlcnRpb25zKGNsYXNzUHJlZml4LCBuZXcgRW50cnlDb250ZXh0KGVudHJ5LCB3c2RsRG9jdW1lbnQpKTsKLSAgfQotCi0gIC8qKgotICAgKiBQcm9jZXNzIG1lc3NhZ2UgYXNzZXJ0aW9ucy4KLSAgICogQHBhcmFtIGJpbmRpbmcgYSBiaW5kaW5nLgotICAgKiBAcGFyYW0gc2VydmljZVJlZmVyZW5jZSBzZXJ2aWNlIHJlZmVyZW5jZS4KLSAgICogQHBhcmFtIGNsYXNzUHJlZml4IGNsYXNzIHByZWZpeC4KLSAgICogQHBhcmFtIHdzZGxEb2N1bWVudCBXU0RMIGRvY3VtZW50LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtIG9jY3VycyBkdXJpbmcgcHJvY2Vzc2luZyAKLSAgICogICAgICAgICBtZXNzYWdlIGFzc2VydGlvbnMuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzTWVzc2FnZUFzc2VydGlvbnMoCi0gICAgQmluZGluZyBiaW5kaW5nLAotICAgIFNlcnZpY2VSZWZlcmVuY2Ugc2VydmljZVJlZmVyZW5jZSwKLSAgICBTdHJpbmcgY2xhc3NQcmVmaXgsCi0gICAgV1NETERvY3VtZW50IHdzZGxEb2N1bWVudCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBIYXNoU2V0IG1lc3NhZ2VTZXQ7Ci0KLSAgICBpZiAoYmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9ucygpICE9IG51bGwpCi0gICAgeyAvLyBjYW4gZG8gbm90aGluZyBpZiBoYXZlIG5vIG9wZXJhdGlvbnMgZGVmaW5lZAotICAgICAgbWVzc2FnZVNldCA9Ci0gICAgICAgIFdTRExVdGlscy5maW5kTWVzc2FnZXMod3NkbERvY3VtZW50LmdldERlZmluaXRpb25zKCksIGJpbmRpbmcpOwotCi0gICAgICAvLyBQcm9jZXNzIGFueSBtZXNzYWdlcyB0aGF0IHdlcmUgZm91bmQgICAgCi0gICAgICBpZiAobWVzc2FnZVNldC5zaXplKCkgPiAwKQotICAgICAgewotICAgICAgICBJdGVyYXRvciBtZXNzYWdlSXQgPSBtZXNzYWdlU2V0Lml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChtZXNzYWdlSXQuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgTWVzc2FnZSBtZXNzYWdlID0gKE1lc3NhZ2UpIG1lc3NhZ2VJdC5uZXh0KCk7Ci0gICAgICAgICAgaWYgKCFtZXNzYWdlLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICBwcm9jZXNzTWVzc2FnZUFzc2VydGlvbnMoCi0gICAgICAgICAgICAgIG1lc3NhZ2UsCi0gICAgICAgICAgICAgIHNlcnZpY2VSZWZlcmVuY2UsCi0gICAgICAgICAgICAgIGNsYXNzUHJlZml4LAotICAgICAgICAgICAgICB3c2RsRG9jdW1lbnQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFByb2Nlc3MgbWVzc2FnZSBhc3NlcnRpb25zLgotICAgKiBAcGFyYW0gcG9ydFR5cGUgcG9ydCB0eXBlLgotICAgKiBAcGFyYW0gc2VydmljZVJlZmVyZW5jZSBzZXJ2aWNlIHJlZmVyZW5jZS4KLSAgICogQHBhcmFtIGNsYXNzUHJlZml4IGNsYXNzIHByZWZpeC4KLSAgICogQHBhcmFtIHdzZGxEb2N1bWVudCBXU0RMIGRvY3VtZW50LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtIG9jY3VycyBkdXJpbmcgcHJvY2Vzc2luZyAKLSAgICogICAgICAgICBtZXNzYWdlIGFzc2VydGlvbnMuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzTWVzc2FnZUFzc2VydGlvbnMoCi0gICAgUG9ydFR5cGUgcG9ydFR5cGUsCi0gICAgU2VydmljZVJlZmVyZW5jZSBzZXJ2aWNlUmVmZXJlbmNlLAotICAgIFN0cmluZyBjbGFzc1ByZWZpeCwKLSAgICBXU0RMRG9jdW1lbnQgd3NkbERvY3VtZW50KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgSGFzaFNldCBtZXNzYWdlU2V0ID0gbmV3IEhhc2hTZXQoKTsKLQotICAgIGlmIChwb3J0VHlwZS5nZXRPcGVyYXRpb25zKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBjYW4gZG8gbm90aGluZyBpZiBoYXZlIG5vIG9wZXJhdGlvbnMgZGVmaW5lZAotCi0gICAgICBJdGVyYXRvciBvcEl0ID0gcG9ydFR5cGUuZ2V0T3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7Ci0KLSAgICAgIHdoaWxlIChvcEl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgT3BlcmF0aW9uIG9wID0gKE9wZXJhdGlvbikgb3BJdC5uZXh0KCk7Ci0KLSAgICAgICAgLy8gU2luY2UgdGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgd2UgaGF2ZSBib3RoIGFuZCBpbnB1dCBhbmQgb3V0cHV0IG1lc3NhZ2UsIAotICAgICAgICAvLyBjaGVjayBmb3IgaXRzIGV4aXN0ZW5jZSBiZWZvcmUgYWRkaW5nIGl0Ci0gICAgICAgIGlmIChvcC5nZXRJbnB1dCgpICE9IG51bGwgJiYgIW9wLmdldElucHV0KCkuZ2V0TWVzc2FnZSgpLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgbWVzc2FnZVNldC5hZGQob3AuZ2V0SW5wdXQoKS5nZXRNZXNzYWdlKCkpOwotCi0gICAgICAgIGlmIChvcC5nZXRPdXRwdXQoKSAhPSBudWxsCi0gICAgICAgICAgJiYgIW9wLmdldE91dHB1dCgpLmdldE1lc3NhZ2UoKS5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgIG1lc3NhZ2VTZXQuYWRkKG9wLmdldE91dHB1dCgpLmdldE1lc3NhZ2UoKSk7Ci0KLSAgICAgICAgLy8gYWxzbyBtZXNzYWdlcyBmcm9tIGFueSBGYXVsdHMgZGVmaW5lZCB3aXRoaW4gdGhlIG9wZXJhdGlvbgotICAgICAgICBpZiAob3AuZ2V0RmF1bHRzKCkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIEl0ZXJhdG9yIGZhdWx0SXQgPSBvcC5nZXRGYXVsdHMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgICAgICAgIE1lc3NhZ2UgbWVzc2FnZTsKLSAgICAgICAgICB3aGlsZSAoZmF1bHRJdC5oYXNOZXh0KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgbWVzc2FnZSA9ICgoRmF1bHQpIGZhdWx0SXQubmV4dCgpKS5nZXRNZXNzYWdlKCk7Ci0gICAgICAgICAgICBpZiAoIW1lc3NhZ2UuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgICAgbWVzc2FnZVNldC5hZGQobWVzc2FnZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmIChtZXNzYWdlU2V0LnNpemUoKSA9PSAwKQotICAgICAgewotICAgICAgICAvLyBTZXQgYWxsIG1lc3NhZ2UgdGVzdCBhc3NlcnRpb24gcmVzdWx0cyB0byBtaXNzaW5nSW5wdXQKLSAgICAgICAgc2V0TWlzc2luZ0lucHV0KEVudHJ5VHlwZS5nZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9NRVNTQUdFKSk7Ci0gICAgICB9Ci0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLy8gbm93IHN0ZXAgdGhyb3VnaCBlYWNoIGRlcml2ZWQgTWVzc2FnZQotICAgICAgICBJdGVyYXRvciBtZXNzYWdlSXQgPSBtZXNzYWdlU2V0Lml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChtZXNzYWdlSXQuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgcHJvY2Vzc01lc3NhZ2VBc3NlcnRpb25zKAotICAgICAgICAgICAgKE1lc3NhZ2UpIChtZXNzYWdlSXQubmV4dCgpKSwKLSAgICAgICAgICAgIHNlcnZpY2VSZWZlcmVuY2UsCi0gICAgICAgICAgICBjbGFzc1ByZWZpeCwKLSAgICAgICAgICAgIHdzZGxEb2N1bWVudCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUHJvY2VzcyBtZXNzYWdlIGFzc2VydGlvbnMuCi0gICAqIEBwYXJhbSBvcCAtIG9wZXJhdGlvbi4KLSAgICogQHBhcmFtIHNlcnZpY2VSZWZlcmVuY2Ugc2VydmljZSByZWZlcmVuY2UuCi0gICAqIEBwYXJhbSBjbGFzc1ByZWZpeCBjbGFzcyBwcmVmaXguCi0gICAqIEBwYXJhbSB3c2RsRG9jdW1lbnQgV1NETCBkb2N1bWVudC4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbSBvY2N1cnMgZHVyaW5nIHByb2Nlc3NpbmcgCi0gICAqICAgICAgICAgbWVzc2FnZSBhc3NlcnRpb25zLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc01lc3NhZ2VBc3NlcnRpb25zKAotICAgIE9wZXJhdGlvbiBvcCwKLSAgICBTZXJ2aWNlUmVmZXJlbmNlIHNlcnZpY2VSZWZlcmVuY2UsCi0gICAgU3RyaW5nIGNsYXNzUHJlZml4LAotICAgIFdTRExEb2N1bWVudCB3c2RsRG9jdW1lbnQpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICBIYXNoU2V0IG1lc3NhZ2VTZXQgPSBuZXcgSGFzaFNldCgpOwotICAgIGlmIChvcC5nZXRJbnB1dCgpICE9IG51bGwgJiYgIW9wLmdldElucHV0KCkuZ2V0TWVzc2FnZSgpLmlzVW5kZWZpbmVkKCkpCi0gICAgICBtZXNzYWdlU2V0LmFkZChvcC5nZXRJbnB1dCgpLmdldE1lc3NhZ2UoKSk7Ci0KLSAgICBpZiAob3AuZ2V0T3V0cHV0KCkgIT0gbnVsbCAmJiAhb3AuZ2V0T3V0cHV0KCkuZ2V0TWVzc2FnZSgpLmlzVW5kZWZpbmVkKCkpCi0gICAgICBtZXNzYWdlU2V0LmFkZChvcC5nZXRPdXRwdXQoKS5nZXRNZXNzYWdlKCkpOwotCi0gICAgLy8gYWxzbyBtZXNzYWdlcyBmcm9tIGFueSBGYXVsdHMgZGVmaW5lZCB3aXRoaW4gdGhlIG9wZXJhdGlvbgotICAgIEl0ZXJhdG9yIGZhdWx0SXQgPSBvcC5nZXRGYXVsdHMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgIE1lc3NhZ2UgbWVzc2FnZTsKLSAgICB3aGlsZSAoZmF1bHRJdC5oYXNOZXh0KCkpCi0gICAgewotICAgICAgbWVzc2FnZSA9ICgoRmF1bHQpIGZhdWx0SXQubmV4dCgpKS5nZXRNZXNzYWdlKCk7Ci0gICAgICBpZiAoIW1lc3NhZ2UuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgbWVzc2FnZVNldC5hZGQobWVzc2FnZSk7Ci0gICAgfQotCi0gICAgaWYgKG1lc3NhZ2VTZXQuc2l6ZSgpID09IDApCi0gICAgewotICAgICAgLy8gU2V0IGFsbCBtZXNzYWdlIHRlc3QgYXNzZXJ0aW9uIHJlc3VsdHMgdG8gbWlzc2luZ0lucHV0Ci0gICAgICBzZXRNaXNzaW5nSW5wdXQoRW50cnlUeXBlLmdldEVudHJ5VHlwZShUWVBFX0RFU0NSSVBUSU9OX01FU1NBR0UpKTsKLSAgICB9Ci0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gbm93IHN0ZXAgdGhyb3VnaCBlYWNoIGRlcml2ZWQgTWVzc2FnZQotICAgICAgSXRlcmF0b3IgbWVzc2FnZUl0ID0gbWVzc2FnZVNldC5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKG1lc3NhZ2VJdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIHByb2Nlc3NNZXNzYWdlQXNzZXJ0aW9ucygKLSAgICAgICAgICAoTWVzc2FnZSkgKG1lc3NhZ2VJdC5uZXh0KCkpLAotICAgICAgICAgIHNlcnZpY2VSZWZlcmVuY2UsCi0gICAgICAgICAgY2xhc3NQcmVmaXgsCi0gICAgICAgICAgd3NkbERvY3VtZW50KTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQmFzZVZhbGlkYXRvckltcGwjaXNQcmltYXJ5RW50cnlUeXBlTWF0Y2gob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbiwgb3JnLndzaS50ZXN0LnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dCkKLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIGlzUHJpbWFyeUVudHJ5VHlwZU1hdGNoKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgdGFyZ2V0Q29udGV4dCkKLSAgewotICAgIGJvb2xlYW4gbWF0Y2ggPSBmYWxzZTsKLQotICAgIC8vIElmIHRoZSB0ZXN0IGFzc2VydGlvbiBlbnRyeSB0eXBlIG1hdGNoZXMgdGhlIHRhcmdldCBjb250ZXh0IGVudHJ5IHR5cGUsIHRoZW4gY29udGluZQotICAgIGlmICh0ZXN0QXNzZXJ0aW9uCi0gICAgICAuZ2V0RW50cnlUeXBlTmFtZSgpCi0gICAgICAuZXF1YWxzKHRhcmdldENvbnRleHQuZ2V0RW50cnkoKS5nZXRFbnRyeVR5cGUoKS5nZXRUeXBlTmFtZSgpKSkKLSAgICB7Ci0gICAgICBtYXRjaCA9IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1hdGNoOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5pbXBsLkJhc2VWYWxpZGF0b3JJbXBsI2lzTm90QXBwbGljYWJsZShvcmcud3NpLnRlc3QucHJvZmlsZS5UZXN0QXNzZXJ0aW9uKQotICAgKi8KLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNOb3RBcHBsaWNhYmxlKFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbikKLSAgewotICAgIGJvb2xlYW4gbm90QXBwbGljYWJsZSA9IGZhbHNlOwotCi0gICAgLy8gQUREOgotCi0gICAgcmV0dXJuIG5vdEFwcGxpY2FibGU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldFNvYXBGYXVsdHMuCi0gICAqIAotICAgKiBAcGFyYW0gaW5CaW5kaW5nIGluIGJpbmRpbmcuCi0gICAqIEByZXR1cm4gc29hcCBmYXVsdHMuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW1zIG9jY3VyIHdoaWxlIHByb2Nlc3NpbmcgYmluZGluZyBmYXVsdHMuCi0gICAqLwotICBwcm90ZWN0ZWQgU09BUEZhdWx0W10gZ2V0U29hcEZhdWx0cyhCaW5kaW5nIGluQmluZGluZykgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICBWZWN0b3Igc29hcEZhdWx0cyA9IG5ldyBWZWN0b3IoKTsKLQotICAgIC8vIEdvIHRocm91Z2ggZWFjaCBiaW5kaW5nRmF1bHQgb25lIGF0IGEgdGltZQotICAgIEJpbmRpbmdGYXVsdFtdIGJpbmRpbmdGYXVsdHMgPSBnZXRBbGxCaW5kaW5nRmF1bHRzKGluQmluZGluZyk7Ci0gICAgZm9yIChpbnQgZmF1bHQgPSAwOyBmYXVsdCA8IGJpbmRpbmdGYXVsdHMubGVuZ3RoOyBmYXVsdCsrKQotICAgIHsKLSAgICAgIFNPQVBGYXVsdCBzb2FwRmF1bHQgPSBnZXRTb2FwRmF1bHQoYmluZGluZ0ZhdWx0c1tmYXVsdF0pOwotICAgICAgaWYgKHNvYXBGYXVsdCAhPSBudWxsKQotICAgICAgewotICAgICAgICBzb2FwRmF1bHRzLmFkZChzb2FwRmF1bHQpOwotICAgICAgfQotICAgIH0KLQotICAgIFNPQVBGYXVsdFtdIHNvYXBGYXVsdEFycmF5ID0gbmV3IFNPQVBGYXVsdFtzb2FwRmF1bHRzLnNpemUoKV07Ci0gICAgc29hcEZhdWx0cy5jb3B5SW50byhzb2FwRmF1bHRBcnJheSk7Ci0KLSAgICByZXR1cm4gc29hcEZhdWx0QXJyYXk7Ci0gIH0KLQotICAvKioKLSAgKiBNZXRob2QgZ2V0QWxsQmluZGluZ0ZhdWx0cy4KLSAgKiAKLSAgKiBAcGFyYW0gaW5CaW5kaW5nIGJpbmRpbmcuCi0gICogQHJldHVybiBhbGwgYmluZGluZyBmYXVsdHMuCi0gICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbXMgb2NjdXIgZHVyaW5nIHByb2Nlc3NpbmcuCi0gICovCi0gIHByb3RlY3RlZCBCaW5kaW5nRmF1bHRbXSBnZXRBbGxCaW5kaW5nRmF1bHRzKEJpbmRpbmcgaW5CaW5kaW5nKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgVmVjdG9yIGZhdWx0cyA9IG5ldyBWZWN0b3IoKTsKLQotICAgIHRyeQotICAgIHsKLQotICAgICAgSXRlcmF0b3IgYmluZGluZ09wZXJhdGlvbnMgPSBpbkJpbmRpbmcuZ2V0QmluZGluZ09wZXJhdGlvbnMoKS5pdGVyYXRvcigpOwotCi0gICAgICB3aGlsZSAoYmluZGluZ09wZXJhdGlvbnMuaGFzTmV4dCgpKQotICAgICAgewotCi0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgQmluZGluZ09wZXJhdGlvbiBibyA9IChCaW5kaW5nT3BlcmF0aW9uKSBiaW5kaW5nT3BlcmF0aW9ucy5uZXh0KCk7Ci0gICAgICAgICAgSXRlcmF0b3IgYmluZGluZ0ZhdWx0cyA9IGJvLmdldEJpbmRpbmdGYXVsdHMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgICAgICAgIHdoaWxlIChiaW5kaW5nRmF1bHRzLmhhc05leHQoKSkKLSAgICAgICAgICB7Ci0KLSAgICAgICAgICAgIGZhdWx0cy5hZGQoKEJpbmRpbmdGYXVsdCkgYmluZGluZ0ZhdWx0cy5uZXh0KCkpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoTnVsbFBvaW50ZXJFeGNlcHRpb24gZSkKLSAgICAgICAgewotCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gbm8gYmluZGluZyBvcGVyYXRpb25zIGluIHRoaXMgYmluZGluZyAtIGlnbm9yZSAmIGNvbnRpbnVlCi0gICAgfQotCi0gICAgQmluZGluZ0ZhdWx0W10gZmF1bHRBcnJheSA9IG5ldyBCaW5kaW5nRmF1bHRbZmF1bHRzLnNpemUoKV07Ci0gICAgZmF1bHRzLmNvcHlJbnRvKGZhdWx0QXJyYXkpOwotCi0gICAgcmV0dXJuIGZhdWx0QXJyYXk7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldFdTRExGYXVsdHMuCi0gICAqIAotICAgKiBAcGFyYW0gYmluZGluZ0ZhdWx0IGEgYmluZGluZyBmYXVsdC4KLSAgICogQHJldHVybiBXU0RMIGZhdWx0cy4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbXMgb2NjdXIgZHVyaW5nIHByb2Nlc3NpbmcuCi0gICAqLwotICBwcm90ZWN0ZWQgU09BUEZhdWx0IGdldFNvYXBGYXVsdChCaW5kaW5nRmF1bHQgYmluZGluZ0ZhdWx0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgU09BUEZhdWx0IHNvYXBGYXVsdCA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgSXRlcmF0b3IgZmF1bHRFeHRlbnNpYmxlcyA9Ci0gICAgICAgIGJpbmRpbmdGYXVsdC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotCi0gICAgICB3aGlsZSAoZmF1bHRFeHRlbnNpYmxlcy5oYXNOZXh0KCkgJiYgc29hcEZhdWx0ID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgc29hcEZhdWx0ID0gKFNPQVBGYXVsdCkgZmF1bHRFeHRlbnNpYmxlcy5uZXh0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKENsYXNzQ2FzdEV4Y2VwdGlvbiBlKQotICAgICAgICB7IC8vIGlnbm9yZSBldmVyeXRoaW5nIGJ1dCBTT0FQIEZhdWx0IGVsZW1lbnRzLgotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICB9Ci0KLSAgICByZXR1cm4gc29hcEZhdWx0OwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBnZXRTb2FwSGVhZGVyLgotICAgKiAKLSAgICogQHBhcmFtIGluQmluZGluZyBhIGJpbmRpbmcuCi0gICAqIEByZXR1cm4gU09BUCBoZWFkZXJzLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtcyBvY2N1ciBkdXJpbmcgcHJvY2Vzc2luZy4KLSAgICovCi0gIHByb3RlY3RlZCBTT0FQSGVhZGVyW10gZ2V0U29hcEhlYWRlcnMoQmluZGluZyBpbkJpbmRpbmcpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEdldCBhbGwgYmluZGluZ3MKLSAgICBCaW5kaW5nW10gYmluZGluZ0xpc3QgPSBuZXcgQmluZGluZ1sxXTsKLSAgICBiaW5kaW5nTGlzdFswXSA9IGluQmluZGluZzsKLQotICAgIFZlY3RvciBzb2FwSGVhZGVyTGlzdCA9IG5ldyBWZWN0b3IoKTsKLQotICAgIC8vIEdvIHRocm91Z2ggZWFjaCBiaW5kaW5nIG9uZSBhdCBhIHRpbWUKLSAgICBmb3IgKGludCBiaW5kaW5nID0gMDsgYmluZGluZyA8IGJpbmRpbmdMaXN0Lmxlbmd0aDsgYmluZGluZysrKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICAvLyBnZXQgdGhlIGxpc3Qgb2YgYmluZGluZyBPcGVyYXRpb25zCi0gICAgICAgIEJpbmRpbmdPcGVyYXRpb25bXSBiaW5kaW5nT3BlcmF0aW9ucyA9Ci0gICAgICAgICAgKEJpbmRpbmdPcGVyYXRpb25bXSkgYmluZGluZ0xpc3RbYmluZGluZ10KLSAgICAgICAgICAgIC5nZXRCaW5kaW5nT3BlcmF0aW9ucygpCi0gICAgICAgICAgICAudG9BcnJheSgKLSAgICAgICAgICAgIG5ldyBCaW5kaW5nT3BlcmF0aW9uWzBdKTsKLQotICAgICAgICAvLyBnZXQgcmVmZXJlbmNlcyB0byB0aGUgZXh0ZW5zaWJsZSBlbGVtZW50cyB3aXRoaW4gdGhlIDxpbnB1dD4gYW5kIDxvdXRwdXQ+IGVsZW1lbnRzIG9mIHRoaXMgYmluZGluZyA8b3BlcmF0aW9uPi4gCi0gICAgICAgIGZvciAoaW50IGJvID0gMDsgYm8gPCBiaW5kaW5nT3BlcmF0aW9ucy5sZW5ndGg7IGJvKyspCi0gICAgICAgIHsKLQotICAgICAgICAgIC8vIEl0ZXJhdGUgb3ZlciBhbGwgaW5wdXQvb3V0cHV0IGV4dGVuc2libGVzLCBsb29raW5nIGZvciA8U09BUDpCb2R5PiBlbGVtZW50cy4KLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBCaW5kaW5nSW5wdXQgYmluZGluZ0lucHV0ID0gYmluZGluZ09wZXJhdGlvbnNbYm9dLmdldEJpbmRpbmdJbnB1dCgpOwotICAgICAgICAgICAgQmluZGluZ091dHB1dCBiaW5kaW5nT3V0cHV0ID0KLSAgICAgICAgICAgICAgYmluZGluZ09wZXJhdGlvbnNbYm9dLmdldEJpbmRpbmdPdXRwdXQoKTsKLQotICAgICAgICAgICAgSXRlcmF0b3IgZXh0RWxlbWVudHMgPQotICAgICAgICAgICAgICBiaW5kaW5nSW5wdXQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgIHdoaWxlIChleHRFbGVtZW50cy5oYXNOZXh0KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc29hcEhlYWRlckxpc3QuYWRkKChTT0FQSGVhZGVyKSBleHRFbGVtZW50cy5uZXh0KCkpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGNhdGNoIChDbGFzc0Nhc3RFeGNlcHRpb24gZSkKLSAgICAgICAgICAgICAgeyAvLyBpZ25vcmUgZXZlcnl0aGluZyBidXQgU09BUCBIZWFkZXIuCi0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZXh0RWxlbWVudHMgPSBiaW5kaW5nT3V0cHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICB3aGlsZSAoZXh0RWxlbWVudHMuaGFzTmV4dCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICB0cnkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHNvYXBIZWFkZXJMaXN0LmFkZCgoU09BUEhlYWRlcikgZXh0RWxlbWVudHMubmV4dCgpKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBjYXRjaCAoQ2xhc3NDYXN0RXhjZXB0aW9uIGUpCi0gICAgICAgICAgICAgIHsgLy8gaWdub3JlIGV2ZXJ5dGhpbmcgYnV0IFNPQVAgSGVhZGVyLgotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBlKQotICAgICAgICAgIHsgLy8gbm8gZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyBmb3IgPGlucHV0PiBvciA8b3V0cHV0PiAtIGlnbm9yZSA6IG5vdCBjaGVja2luZyB0aGlzIGhlcmUuCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoTnVsbFBvaW50ZXJFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgLy8gbm8gYmluZGluZyBvcGVyYXRpb25zIGluIHRoaXMgYmluZGluZyAtIGlnbm9yZSAmIGNvbnRpbnVlCi0gICAgICB9Ci0gICAgfQotCi0gICAgU09BUEhlYWRlcltdIHNvYXBIZWFkZXJBcnJheSA9IG5ldyBTT0FQSGVhZGVyW3NvYXBIZWFkZXJMaXN0LnNpemUoKV07Ci0gICAgc29hcEhlYWRlckxpc3QuY29weUludG8oc29hcEhlYWRlckFycmF5KTsKLQotICAgIHJldHVybiBzb2FwSGVhZGVyQXJyYXk7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldFNvYXBIZWFkZXJGYXVsdHMuCi0gICAqIAotICAgKiBXU0RMRG9jdW1lbnQgZ2V0dGVyIG1ldGhvZCAtIG1heWJlIGJldHRlciBvZmYgaW4gY2xhc3MgV1NETERvY3VtZW50Li4uCi0gICAqIAotICAgKiBAcGFyYW0gaW5CaW5kaW5nIGEgYmluZGluZy4KLSAgICogQHJldHVybiBTT0FQIGhlYWRlciBmYXVsdHMuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW1zIG9jY3VyIGR1cmluZyBwcm9jZXNzaW5nLgotICAgKi8KLSAgcHJvdGVjdGVkIFNPQVBIZWFkZXJGYXVsdFtdIGdldFNvYXBIZWFkZXJGYXVsdHMoQmluZGluZyBpbkJpbmRpbmcpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgVmVjdG9yIHNvYXBIZWFkZXJGYXVsdExpc3QgPSBuZXcgVmVjdG9yKCk7Ci0KLSAgICAvLyBHZXQgdGhlIGxpc3Qgb2YgU09BUCBoZWFkZXJzCi0gICAgU09BUEhlYWRlcltdIHNvYXBIZWFkZXJBcnJheSA9IGdldFNvYXBIZWFkZXJzKGluQmluZGluZyk7Ci0KLSAgICAvLyBHbyB0aHJvdWdoIHRoZSBsaXN0IGFuZCBnZXQgdGhlIGhlYWRlciBmYXVsdHMKLSAgICBMaXN0IGxpc3QgPSBudWxsOwotICAgIGZvciAoaW50IGhlYWRlciA9IDA7IGhlYWRlciA8IHNvYXBIZWFkZXJBcnJheS5sZW5ndGg7IGhlYWRlcisrKQotICAgIHsKLSAgICAgIC8vIEdldCBsaXN0IGZvciB0aGlzIGhlYWRlcgotICAgICAgaWYgKChsaXN0ID0gc29hcEhlYWRlckFycmF5W2hlYWRlcl0uZ2V0U09BUEhlYWRlckZhdWx0cygpKSAhPSBudWxsKQotICAgICAgewotICAgICAgICAvLyBBZGQgdG8gcHJpbWFyeSBsaXN0ICAgICAgCi0gICAgICAgIHNvYXBIZWFkZXJGYXVsdExpc3QuYWRkQWxsKGxpc3QpOwotICAgICAgfQotICAgIH0KLQotICAgIFNPQVBIZWFkZXJGYXVsdFtdIHNvYXBIZWFkZXJGYXVsdEFycmF5ID0KLSAgICAgIG5ldyBTT0FQSGVhZGVyRmF1bHRbc29hcEhlYWRlckZhdWx0TGlzdC5zaXplKCldOwotICAgIHNvYXBIZWFkZXJGYXVsdExpc3QuY29weUludG8oc29hcEhlYWRlckZhdWx0QXJyYXkpOwotCi0gICAgcmV0dXJuIHNvYXBIZWFkZXJGYXVsdEFycmF5OwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBnZXRTb2FwQm9kaWVzLgotICAgKiAKLSAgICogV1NETERvY3VtZW50IGdldHRlciBtZXRob2QgLSBtYXliZSBiZXR0ZXIgb2ZmIGluIGNsYXNzIFdTRExEb2N1bWVudC4uLgotICAgKiAKLSAgICogQHBhcmFtIGluQmluZGluZyBhIGJpbmRpbmcuCi0gICAqIEByZXR1cm4gU09BUCBib2RpZXMuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIGlmIHByb2JsZW1zIG9jY3VyIGR1cmluZyBwcm9jZXNzaW5nLgotICAgKi8KLSAgcHJvdGVjdGVkIFNPQVBCb2R5W10gZ2V0U29hcEJvZGllcyhCaW5kaW5nIGluQmluZGluZykgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gUkVNT1ZFOiBHZXQgYWxsIGJpbmRpbmdzCi0gICAgLy9CaW5kaW5nW10gYmluZGluZ0xpc3QgPSB3c2RsRG9jdW1lbnQuZ2V0QmluZGluZ3MoKTsKLSAgICBCaW5kaW5nW10gYmluZGluZ0xpc3QgPSBuZXcgQmluZGluZ1sxXTsKLSAgICBiaW5kaW5nTGlzdFswXSA9IGluQmluZGluZzsKLQotICAgIFZlY3RvciBzb2FwQm9kaWVzID0gbmV3IFZlY3RvcigpOwotCi0gICAgLy8gR28gdGhyb3VnaCBlYWNoIGJpbmRpbmcgb25lIGF0IGEgdGltZQotICAgIGZvciAoaW50IGJpbmRpbmcgPSAwOyBiaW5kaW5nIDwgYmluZGluZ0xpc3QubGVuZ3RoOyBiaW5kaW5nKyspCi0gICAgewotICAgICAgLy8gZ2V0IHRoZSBsaXN0IG9mIGJpbmRpbmcgT3BlcmF0aW9ucwotICAgICAgQmluZGluZ09wZXJhdGlvbltdIGJpbmRpbmdPcGVyYXRpb25zID0KLSAgICAgICAgKEJpbmRpbmdPcGVyYXRpb25bXSkgYmluZGluZ0xpc3RbYmluZGluZ10KLSAgICAgICAgICAuZ2V0QmluZGluZ09wZXJhdGlvbnMoKQotICAgICAgICAgIC50b0FycmF5KAotICAgICAgICAgIG5ldyBCaW5kaW5nT3BlcmF0aW9uWzBdKTsKLQotICAgICAgLy8gZ2V0IHJlZmVyZW5jZXMgdG8gdGhlIGV4dGVuc2libGUgZWxlbWVudHMgd2l0aGluIHRoZSA8aW5wdXQ+IGFuZCA8b3V0cHV0PiBlbGVtZW50cyBvZiB0aGlzIGJpbmRpbmcgPG9wZXJhdGlvbj4uIAotICAgICAgZm9yIChpbnQgYm8gPSAwOyBibyA8IGJpbmRpbmdPcGVyYXRpb25zLmxlbmd0aDsgYm8rKykKLSAgICAgIHsKLQotICAgICAgICAvLyBJdGVyYXRlIG92ZXIgYWxsIGlucHV0L291dHB1dCBleHRlbnNpYmxlcywgbG9va2luZyBmb3IgPFNPQVA6Qm9keT4gZWxlbWVudHMuCi0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgSXRlcmF0b3IgaW5wdXRFeHRlbnNpYmxlcyA9Ci0gICAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uc1tib10KLSAgICAgICAgICAgICAgLmdldEJpbmRpbmdJbnB1dCgpCi0gICAgICAgICAgICAgIC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKQotICAgICAgICAgICAgICAuaXRlcmF0b3IoKTsKLSAgICAgICAgICB3aGlsZSAoaW5wdXRFeHRlbnNpYmxlcy5oYXNOZXh0KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHNvYXBCb2RpZXMuYWRkKChTT0FQQm9keSkgaW5wdXRFeHRlbnNpYmxlcy5uZXh0KCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKENsYXNzQ2FzdEV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgeyAvLyBpZ25vcmUgZXZlcnl0aGluZyBidXQgU09BUCBCb2R5IGVsZW1lbnRzLgotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoTnVsbFBvaW50ZXJFeGNlcHRpb24gZSkKLSAgICAgICAgeyAvLyBubyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIGZvciA8aW5wdXQ+IC0gaWdub3JlIDogbm90IGNoZWNraW5nIHRoaXMgaGVyZS4KLSAgICAgICAgfQotCi0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgSXRlcmF0b3Igb3V0cHV0RXh0ZW5zaWJsZXMgPQotICAgICAgICAgICAgYmluZGluZ09wZXJhdGlvbnNbYm9dCi0gICAgICAgICAgICAgIC5nZXRCaW5kaW5nT3V0cHV0KCkKLSAgICAgICAgICAgICAgLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpCi0gICAgICAgICAgICAgIC5pdGVyYXRvcigpOwotICAgICAgICAgIHdoaWxlIChvdXRwdXRFeHRlbnNpYmxlcy5oYXNOZXh0KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHNvYXBCb2RpZXMuYWRkKChTT0FQQm9keSkgb3V0cHV0RXh0ZW5zaWJsZXMubmV4dCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChDbGFzc0Nhc3RFeGNlcHRpb24gZSkKLSAgICAgICAgICAgIHsgLy8gaWdub3JlIGV2ZXJ5dGhpbmcgYnV0IFNPQVAgQm9keSBlbGVtZW50cy4KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9uIGUpCi0gICAgICAgIHsgLy8gbm8gZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyBmb3IgPG91dHB1dD4uCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBTT0FQQm9keVtdIHNvYXBCb2R5QXJyYXkgPSBuZXcgU09BUEJvZHlbc29hcEJvZGllcy5zaXplKCldOwotICAgIHNvYXBCb2RpZXMuY29weUludG8oc29hcEJvZHlBcnJheSk7Ci0KLSAgICByZXR1cm4gc29hcEJvZHlBcnJheTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgZ2V0U29hcEJvZHkuCi0gICAqIAotICAgKiBAcGFyYW0gYmluZGluZ0lucHV0IGEgQmluZGluZ0lucHV0IG9iamVjdC4KLSAgICogQHJldHVybiAgYm9keS4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbXMgb2NjdXIgZHVyaW5nIHByb2Nlc3NpbmcuCi0gICAqLwotICBwcm90ZWN0ZWQgU09BUEJvZHkgZ2V0U29hcEJvZHkoQmluZGluZ0lucHV0IGJpbmRpbmdJbnB1dCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICBTT0FQQm9keSBzb2FwQm9keSA9IG51bGw7Ci0KLSAgICBJdGVyYXRvciBleHRlbnNpYmxlcyA9IGJpbmRpbmdJbnB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChleHRlbnNpYmxlcy5oYXNOZXh0KCkpCi0gICAgewotICAgICAgT2JqZWN0IGV4dGVuc2libGUgPSBleHRlbnNpYmxlcy5uZXh0KCk7Ci0gICAgICBpZiAoZXh0ZW5zaWJsZSBpbnN0YW5jZW9mIFNPQVBCb2R5KQotICAgICAgewotICAgICAgICBzb2FwQm9keSA9IChTT0FQQm9keSkgZXh0ZW5zaWJsZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBzb2FwQm9keTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgZ2V0U29hcEJvZHkuCi0gICAqIAotICAgKiBAcGFyYW0gYmluZGluZ091dHB1dCBhIEJpbmRpbmdPdXRwdXQgb2JqZWN0LgotICAgKiBAcmV0dXJuIFNPQVAgYm9keS4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbXMgb2NjdXIgZHVyaW5nIHByb2Nlc3NpbmcuCi0gICAqLwotICBwcm90ZWN0ZWQgU09BUEJvZHkgZ2V0U29hcEJvZHkoQmluZGluZ091dHB1dCBiaW5kaW5nT3V0cHV0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotCi0gICAgU09BUEJvZHkgc29hcEJvZHkgPSBudWxsOwotCi0gICAgSXRlcmF0b3IgZXh0ZW5zaWJsZXMgPSBiaW5kaW5nT3V0cHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGV4dGVuc2libGVzLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBPYmplY3QgZXh0ZW5zaWJsZSA9IGV4dGVuc2libGVzLm5leHQoKTsKLSAgICAgIGlmIChleHRlbnNpYmxlIGluc3RhbmNlb2YgU09BUEJvZHkpCi0gICAgICB7Ci0gICAgICAgIHNvYXBCb2R5ID0gKFNPQVBCb2R5KSBleHRlbnNpYmxlOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHNvYXBCb2R5OwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBzY2hlbWEgdXNlZC4KLSAgICogQHBhcmFtIGRlZiBkZWZpbml0aW9uLgotICAgKiBAcmV0dXJuIFNjaGVtYSB1c2VkLgotICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxFeGNlcHRpb24gaWYgcHJvYmxlbSBnZXR0aW5nIFdTREwgZGVmaW50aW9ucyAKLSAgICogICAgICAgICBuYW1lc3BhY2UuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGdldFNjaGVtYVVzZWQoRGVmaW5pdGlvbiBkZWYpIHRocm93cyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgc2NoZW1hVXNlZCA9ICIiOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gTmVlZCB0byByZWFkIHRoZSBmaWxlIGRpcmVjdGx5LCBzaW5jZSBXU0RMNEogYWx3YXlzIHB1dHMgaW4gdGhlIGRlZmF1bHQgV1NETCBuYW1lc3BhY2UKLSAgICAgIERvY3VtZW50IGRvY3VtZW50ID0gd3NkbERvY3VtZW50LmdldERvY3VtZW50KCk7Ci0gICAgICBpZiAoZG9jdW1lbnQgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZG9jdW1lbnQgPSBwYXJzZVhNTERvY3VtZW50VVJMKGRlZi5nZXREb2N1bWVudEJhc2VVUkkoKSwgbnVsbCk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChkb2N1bWVudCAhPSBudWxsKQotICAgICAgewotICAgICAgICAvLyBHZXQgdGhlIHJvb3QgZWxlbWVudAotICAgICAgICBFbGVtZW50IGVsZW1lbnQgPSBkb2N1bWVudC5nZXREb2N1bWVudEVsZW1lbnQoKTsKLQotICAgICAgICAvLyBHZXQgdGhlIG5hbWVzcGFjZSBmb3IgdGhpcyBlbGVtZW50Ci0gICAgICAgIGlmIChlbGVtZW50ICE9IG51bGwpCi0gICAgICAgICAgc2NoZW1hVXNlZCA9IGVsZW1lbnQuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgY2F0Y2ggKFdTSUV4Y2VwdGlvbiB3ZSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbigicHJvYmxlbSBnZXR0aW5nIFdTREwgZGVmaW50aW9ucyBuYW1lc3BhY2UiKTsKLSAgICB9Ci0KLSAgICAvKgotICAgIC8vIEdldCB0aGUgZGVmYXVsdCBuYW1lc3BhY2UKLSAgICBTdHJpbmcgc2NoZW1hVXNlZCA9IGRlZi5nZXROYW1lc3BhY2UoIiIpOwotICAgIAotICAgIC8vIElmIHRoZSBkZWZhdWx0IHdhcyBzZXQsIHRoZW4gcHJvY2VzcyBpdCB0byBnZXQgdGhlIG5hbWVzcGFjZQotICAgIGlmIChzY2hlbWFVc2VkID09IG51bGwpIHsKLSAgICAgIC8vIGRvIGl0IHRoZSBoYXJkIHdheSAoc3RpbGwgYmV0dGVyIHRoYW4gYW5vdGhlciBET00gcGFyc2UpLi4uIAkJCQkKLSAgICAgIC8vV1NETFdyaXRlciB3ID0gbmV3IFdTRExXcml0ZXJJbXBsKCk7Ci0gICAgICB0cnkgewotICAgICAgICBXU0RMV3JpdGVyIHcgPSBXU0RMRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld1dTRExXcml0ZXIoKTsKLSAgICAgIAlEb2N1bWVudCBkb2MgPSB3LmdldERvY3VtZW50KGRlZik7Ci0gICAgICAJRWxlbWVudCBlID0gZG9jLmdldERvY3VtZW50RWxlbWVudCgpOwotICAgICAgCXNjaGVtYVVzZWQgPSBlLmdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgfSAKLSAgICAgIGNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBlKSB7Ci0gICAgICAJdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oInByb2JsZW0gZ2V0dGluZyBXU0RMIGRlZmludGlvbnMgbmFtZXNwYWNlIik7Ci0gICAgICB9IAotICAgICAgY2F0Y2ggKFdTRExFeGNlcHRpb24gZSkgewotICAgICAgCXRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKCJwcm9ibGVtIGdldHRpbmcgZG9jdW1lbnQgZGVmaW50aW9uIik7Ci0gICAgICB9ICAgICAgCQotICAgIH0KLSAgICAqLwotCi0gICAgcmV0dXJuIHNjaGVtYVVzZWQ7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldFNvYXBCaW5kaW5nLgotICAgKiAKLSAgICogR2V0IHRoZSBTT0FQIGJpbmRpbmcgZm9yIGEgQmluZGluZy4KLSAgICAqIAotICAgKiBAcGFyYW0gYmluZGluZyBhIGJpbmRpbmcuCi0gICAqIEByZXR1cm4gYSBTT0FQIGJpbmRpbmcuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHByb2JsZW1zIG9jY3VyIGR1cmluZyBwcm9jZXNzaW5nLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTT0FQQmluZGluZyBnZXRTb2FwQmluZGluZyhCaW5kaW5nIGJpbmRpbmcpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIFNPQVBCaW5kaW5nIHNvYXBCaW5kaW5nID0gbnVsbDsKLQotICAgIC8vIEdldCB0aGUgbGlzdCBvZiBleHRlbnNpYmlsaXR5IGVsZW1lbnRzCi0gICAgTGlzdCBleEVsZW1lbnRzID0gYmluZGluZy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICBpZiAoZXhFbGVtZW50cyAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gYmluZGluZy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotCi0gICAgICAvLyAgQ2hlY2sgZm9yIDxzb2FwOmJpbmRpbmc+IGVsZW1lbnQKLSAgICAgIHdoaWxlICgoaXRlcmF0b3IuaGFzTmV4dCgpKSAmJiAoc29hcEJpbmRpbmcgPT0gbnVsbCkpCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgc29hcEJpbmRpbmcgPSAoU09BUEJpbmRpbmcpIGl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoQ2xhc3NDYXN0RXhjZXB0aW9uIGUpCi0gICAgICAgIHsgLy8gaWdub3JlIGV2ZXJ5dGhpbmcgYnV0IFNPQVAgQmluZGluZyBlbGVtZW50Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gc29hcEJpbmRpbmc7Ci0gIH0KLQotICAvKiogCi0gICAqIENyZWF0ZSBYTUwgc2NoZW1hIHZhbGlkYXRvci4gIFRoaXMgaXMgZG9uZSBoZXJlIGJlY2F1c2Ugc29tZSBjb21waWxlcnMgZG8gbm90IGFsbG93Ci0gICAqIHRoZSBkb2N1bWVudExpc3QgZmllbGQgdG8gYmUgYWNjZXNzZWQgZnJvbSB3aXRoaW4gYW4gaW5uZXIgY2xhc3MuCi0gICAqIEBwYXJhbSBkb2N1bWVudEJhc2VVUkkgdGhlIGJhc2UgVVJMLgotICAgKiBAcmV0dXJuIG5ld2x5IGNyZWF0ZWQgWE1MIHNjaGVtYSB2YWxpZGF0b3IuCi0gICAqLwotICBwcm90ZWN0ZWQgWE1MU2NoZW1hVmFsaWRhdG9yIGNyZWF0ZVhNTFNjaGVtYVZhbGlkYXRvcihTdHJpbmcgZG9jdW1lbnRCYXNlVVJJKQotICB7Ci0gICAgLy8gQ3JlYXRlIFhNTCBzY2hlbWEgdmFsaWRhdG9yCi0gICAgcmV0dXJuIG5ldyBYTUxTY2hlbWFWYWxpZGF0b3IoZG9jdW1lbnRCYXNlVVJJKTsKLSAgfQotCi0gIC8qKgotICAgKiBTZWFyY2ggeHNkIHNjaGVtYSBvciB4c2QgaW1wb3J0IGZyb20gbm9kZS4gSWYgbm9kZSBpcyB4c2QgaW1wb3J0IGl0J3MgbG9hZGluZyBzY2hlbWEuCi0gICAqIEBwYXJhbSBkZWZpbml0aW9uIGEgRGVmaW5pdGlvbiBvYmplY3QuCi0gICAqIEByZXR1cm4gYSBsaXN0IG9mIHNjaGVtYSB0YXJnZXQgbmFtZXNwYWNlcy4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbSBkdXJpbmcgcHJvY2Vzc2luZyBtZXRob2QuCi0gICAqLwotICBwcm90ZWN0ZWQgTGlzdCBnZXRTY2hlbWFUYXJnZXROYW1lc3BhY2VMaXN0KERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBMaXN0IGxpc3QgPSBudWxsLCBuZXh0TGlzdCA9IG51bGw7Ci0KLSAgICAvLyBHZXQgbGlzdCBvZiBleHRlbnNpb24gZWxlbWVudHMgd2l0aGluIHRoZSB0eXBlcyBlbGVtZW50Ci0gICAgVHlwZXMgdHlwZXMgPSBudWxsOwotICAgIGlmICgodHlwZXMgPSBkZWZpbml0aW9uLmdldFR5cGVzKCkpICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaXRlcmF0b3IgPSB0eXBlcy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotCi0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtZW50ID0gbnVsbDsKLSAgICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIC8vIEdldCBuZXh0IGV4dC4gZWxlbWVudAotICAgICAgICBleHRFbGVtZW50ID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBpdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgIC8vIElmIHRoaXMgaXMgYW4gdW5rbm93biBleHQuIGVsZW1lbnQsIHRoZW4gc2VlIGlmIGl0IGlzIGEgc2NoZW1hIGVsZW1lbnQKLSAgICAgICAgVGFyZ2V0TmFtZXNwYWNlUHJvY2Vzc29yIHRuc1Byb2Nlc3NvciA9IG51bGw7Ci0gICAgICAgIGlmIChleHRFbGVtZW50IGluc3RhbmNlb2YgVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KQotICAgICAgICB7Ci0gICAgICAgICAgdG5zUHJvY2Vzc29yID0gbmV3IFRhcmdldE5hbWVzcGFjZVByb2Nlc3NvcihkZWZpbml0aW9uLmdldERvY3VtZW50QmFzZVVSSSgpKTsKLQotCi0gICAgICAgICAgaWYgKChuZXh0TGlzdCA9Ci0gICAgICAgICAgICB0bnNQcm9jZXNzb3IucHJvY2Vzc0FsbFNjaGVtYSgKLSAgICAgICAgICAgICAgKChVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGV4dEVsZW1lbnQpLmdldEVsZW1lbnQoKSkpCi0gICAgICAgICAgICAhPSBudWxsKQotICAgICAgICAgICAgaWYgKGxpc3QgPT0gbnVsbCkKLSAgICAgICAgICAgICAgbGlzdCA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgICBsaXN0LmFkZEFsbChuZXh0TGlzdCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbGlzdDsKLSAgfQotIC8qKgotICAgKiBTZWFyY2ggeHNkIHNjaGVtYSBvciB4c2QgaW1wb3J0IGZyb20gbm9kZS4gSWYgbm9kZSBpcyB4c2QgaW1wb3J0IGl0J3MgbG9hZGluZyBzY2hlbWEuCi0gICAqIEBwYXJhbSBkZWZpbml0aW9uIGEgRGVmaW5pdGlvbiBvYmplY3QuCi0gICAqIEByZXR1cm4gYSBsaXN0IG9mIHNjaGVtYSB0YXJnZXQgbmFtZXNwYWNlcy4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbSBkdXJpbmcgcHJvY2Vzc2luZyBtZXRob2QuCi0gICAqLwotICBwcm90ZWN0ZWQgTGlzdCBnZXRTY2hlbWFOYW1lc3BhY2VMaXN0KERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBMaXN0IGxpc3QgPSBuZXcgVmVjdG9yKCk7Ci0gICAgCi0gICAgLy8gQWx3YXlzIGFkZCBjdXJyZW50IGRvY3VtZW50IHRhcmdldE5hbWVzcGFjZQotICAgIExpc3QgdGFyZ2V0TmFtZXNwYWNlTGlzdCA9IGdldFNjaGVtYVRhcmdldE5hbWVzcGFjZUxpc3QoZGVmaW5pdGlvbik7Ci0gICAgCi0gICAgaWYgKCh0YXJnZXROYW1lc3BhY2VMaXN0ICE9IG51bGwpICYmICF0YXJnZXROYW1lc3BhY2VMaXN0LmlzRW1wdHkoKSkKLSAgICAgIGxpc3QuYWRkQWxsKHRhcmdldE5hbWVzcGFjZUxpc3QpOwotICAgIAotICAgIC8vIEdldCBsaXN0IG9mIGltcG9ydGVkIFdTREwgZG9jdW1lbnRzCi0gICAgTWFwIGltcG9ydE1hcCA9IGRlZmluaXRpb24uZ2V0SW1wb3J0cygpOwotCi0gICAgSW1wb3J0IGltcDsKLQotICAgIC8vIEFkZCBlYWNoIGltcG9ydHMgdGFyZ2V0TmFtZXNwYWNlIHRvIHRoZSBsaXN0Ci0gICAgaWYgKGltcG9ydE1hcCAhPSBudWxsICYmICFpbXBvcnRNYXAuaXNFbXB0eSgpKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIHZhbHVlcyA9IGltcG9ydE1hcC52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgICAgTGlzdCBpbXBvcnRMaXN0OwotICAgICAgd2hpbGUgKHZhbHVlcy5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIGltcG9ydExpc3QgPSAoTGlzdCkgdmFsdWVzLm5leHQoKTsKLSAgICAgICAgSXRlcmF0b3IgaW1wb3J0cyA9IGltcG9ydExpc3QuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKGltcG9ydHMuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgaW1wID0gKEltcG9ydCkgaW1wb3J0cy5uZXh0KCk7Ci0gICAgICAgICAgaWYgKGltcCAhPSBudWxsICYmIGltcC5nZXREZWZpbml0aW9uKCkgIT0gbnVsbCkKLSAgICAgICAgICAJbGlzdC5hZGRBbGwoZ2V0U2NoZW1hTmFtZXNwYWNlTGlzdChpbXAuZ2V0RGVmaW5pdGlvbigpKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbGlzdDsKLSAgfQotCi0gIC8qKgotICAgKiBCdWlsZCBsaXN0IG9mIFdTREwgdGFyZ2V0TmFtZXNwYWNlcy4KLSAgICogQHBhcmFtIGRlZmluaXRpb24gYSBEZWZpbml0aW9uIG9iamVjdC4KLSAgICogQHJldHVybiBsaXN0IG9mIFdTREwgdGFyZ2V0TmFtZXNwYWNlcy4KLSAgICovCi0gIHByb3RlY3RlZCBMaXN0IGdldFdTRExUYXJnZXROYW1lc3BhY2VMaXN0KERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgIHJldHVybiBnZXRXU0RMVGFyZ2V0TmFtZXNwYWNlTGlzdChkZWZpbml0aW9uLCBuZXcgQXJyYXlMaXN0KCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIEJ1aWxkIGxpc3Qgb2YgV1NETCB0YXJnZXROYW1lc3BhY2VzLgotICAgKiBAcGFyYW0gZGVmaW5pdGlvbiBhIERlZmluaXRpb24gb2JqZWN0LgotICAgKiBAcmV0dXJuIGxpc3Qgb2YgV1NETCB0YXJnZXROYW1lc3BhY2VzLgotICAgKi8KLSAgcHJvdGVjdGVkIExpc3QgZ2V0V1NETFRhcmdldE5hbWVzcGFjZUxpc3QoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBMaXN0IGFscmVhZHlQcm9jZXNzZWREZWZpbml0aW9ucykKLSAgewotICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBpZiAoKGRlZmluaXRpb24gIT0gbnVsbCkgJiYgKCFhbHJlYWR5UHJvY2Vzc2VkRGVmaW5pdGlvbnMuY29udGFpbnMoZGVmaW5pdGlvbikpKQotICAgIHsKLSAgICAgIGFscmVhZHlQcm9jZXNzZWREZWZpbml0aW9ucy5hZGQoZGVmaW5pdGlvbik7Ci0gICAgICAKLSAgICAgIC8vIEFsd2F5cyBhZGQgY3VycmVudCBkb2N1bWVudCB0YXJnZXROYW1lc3BhY2UKLSAgICAgIGlmIChkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpICE9IG51bGwpCi0gICAgICAgIGxpc3QuYWRkKGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCkpOwotCi0gICAgICAvLyBHZXQgbGlzdCBvZiBpbXBvcnRlZCBXU0RMIGRvY3VtZW50cwotICAgICAgTWFwIGltcG9ydE1hcCA9IGRlZmluaXRpb24uZ2V0SW1wb3J0cygpOwotCi0gICAgICBJbXBvcnQgaW1wOwotCi0gICAgICAvLyBBZGQgZWFjaCBpbXBvcnRzIHRhcmdldE5hbWVzcGFjZSB0byB0aGUgbGlzdAotICAgICAgaWYgKGltcG9ydE1hcCAhPSBudWxsICYmICFpbXBvcnRNYXAuaXNFbXB0eSgpKQotICAgICAgewotICAgICAgICBJdGVyYXRvciB2YWx1ZXMgPSBpbXBvcnRNYXAudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgTGlzdCBpbXBvcnRMaXN0OwotICAgICAgICB3aGlsZSAodmFsdWVzLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIGltcG9ydExpc3QgPSAoTGlzdCkgdmFsdWVzLm5leHQoKTsKLSAgICAgICAgICBJdGVyYXRvciBpbXBvcnRzID0gaW1wb3J0TGlzdC5pdGVyYXRvcigpOwotICAgICAgICAgIHdoaWxlIChpbXBvcnRzLmhhc05leHQoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpbXAgPSAoSW1wb3J0KSBpbXBvcnRzLm5leHQoKTsKLSAgICAgICAgICAgIGlmIChpbXAgIT0gbnVsbCAmJiBpbXAuZ2V0RGVmaW5pdGlvbigpICE9IG51bGwpCi0gICAgICAgICAgICBsaXN0LmFkZEFsbChnZXRXU0RMVGFyZ2V0TmFtZXNwYWNlTGlzdChpbXAuZ2V0RGVmaW5pdGlvbigpLCBhbHJlYWR5UHJvY2Vzc2VkRGVmaW5pdGlvbnMpKTsKLSAgICAgICAgICAgIC8vIGxpc3QuYWRkKGltcC5nZXREZWZpbml0aW9uKCkuZ2V0VGFyZ2V0TmFtZXNwYWNlKCkpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBsaXN0OwotICB9Ci0KLSAgcHJvdGVjdGVkIGNsYXNzIEJpbmRpbmdNYXRjaAotICB7Ci0gICAgcHJpdmF0ZSBCaW5kaW5nIGJpbmRpbmc7Ci0gICAgcHJpdmF0ZSBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb247Ci0gICAgcHJpdmF0ZSBTT0FQQmluZGluZyBzb2FwQmluZGluZzsKLSAgICAvL3ByaXZhdGUgVmVjdG9yIGJpbmRpbmdBcmdzOyAvLyBzZXQgb2YgQmluZGluZ0lucHV0cyBhbmQgQmluZGluZ091dHB1dHMKLSAgICBwcml2YXRlIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQ7Ci0gICAgcHJpdmF0ZSBCaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXRwdXQ7Ci0KLSAgICAvLyBBREQ6IG5lZWQgdG8gaW5jbHVkZSBCaW5kaW5nRmF1bHQgc3VwcG9ydC4uLgotICAgIHB1YmxpYyBCaW5kaW5nTWF0Y2goCi0gICAgICBCaW5kaW5nIGIsCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJvLAotICAgICAgU09BUEJpbmRpbmcgc2IsCi0gICAgICBCaW5kaW5nSW5wdXQgYmluLAotICAgICAgQmluZGluZ091dHB1dCBib3V0KQotICAgIHsKLSAgICAgIGJpbmRpbmcgPSBiOwotICAgICAgYmluZGluZ09wZXJhdGlvbiA9IGJvOwotICAgICAgc29hcEJpbmRpbmcgPSBzYjsKLSAgICAgIC8vYmluZGluZ0FyZ3MgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAvL2lmIChiaW4gICE9IG51bGwpIHsgYmluZGluZ0FyZ3MuYWRkKGJpbik7ICB9Ci0gICAgICAvL2lmIChib3V0ICE9IG51bGwpIHsgYmluZGluZ0FyZ3MuYWRkKGJvdXQpOyB9Ci0gICAgICBiaW5kaW5nSW5wdXQgPSBiaW47Ci0gICAgICBiaW5kaW5nT3V0cHV0ID0gYm91dDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQmluZGluZ01hdGNoKAotICAgICAgQmluZGluZyBiLAotICAgICAgQmluZGluZ09wZXJhdGlvbiBibywKLSAgICAgIFNPQVBCaW5kaW5nIHNiLAotICAgICAgQmluZGluZ0lucHV0IGJpbikKLSAgICB7Ci0gICAgICB0aGlzKGIsIGJvLCBzYiwgYmluLCBudWxsKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQmluZGluZ01hdGNoKAotICAgICAgQmluZGluZyBiLAotICAgICAgQmluZGluZ09wZXJhdGlvbiBibywKLSAgICAgIFNPQVBCaW5kaW5nIHNiLAotICAgICAgQmluZGluZ091dHB1dCBib3V0KQotICAgIHsKLSAgICAgIHRoaXMoYiwgYm8sIHNiLCBudWxsLCBib3V0KTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBzb2FwQmluZGluZy4KLSAgICAgKiBAcmV0dXJuIFNPQVBCaW5kaW5nCi0gICAgICovCi0gICAgcHVibGljIFNPQVBCaW5kaW5nIGdldFNvYXBCaW5kaW5nKCkKLSAgICB7Ci0gICAgICByZXR1cm4gc29hcEJpbmRpbmc7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgYmluZGluZ09wZXJhdGlvbi4KLSAgICAgKiBAcmV0dXJuIEJpbmRpbmdPcGVyYXRpb24KLSAgICAgKi8KLSAgICBwdWJsaWMgQmluZGluZ09wZXJhdGlvbiBnZXRCaW5kaW5nT3BlcmF0aW9uKCkKLSAgICB7Ci0gICAgICByZXR1cm4gYmluZGluZ09wZXJhdGlvbjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBiaW5kaW5nSW5wdXQuCi0gICAgICogQHJldHVybiBCaW5kaW5nSW5wdXQKLSAgICAgKi8KLSAgICBwdWJsaWMgQmluZGluZ0lucHV0IGdldEJpbmRpbmdJbnB1dCgpCi0gICAgewotICAgICAgcmV0dXJuIGJpbmRpbmdJbnB1dDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBiaW5kaW5nT3V0cHV0LgotICAgICAqIEByZXR1cm4gQmluZGluZ091dHB1dAotICAgICAqLwotICAgIHB1YmxpYyBCaW5kaW5nT3V0cHV0IGdldEJpbmRpbmdPdXRwdXQoKQotICAgIHsKLSAgICAgIHJldHVybiBiaW5kaW5nT3V0cHV0OwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGhhc0JpbmRpbmdJbnB1dCgpCi0gICAgewotICAgICAgcmV0dXJuICh0aGlzLmJpbmRpbmdJbnB1dCAhPSBudWxsKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBoYXNCaW5kaW5nT3V0cHV0KCkKLSAgICB7Ci0gICAgICByZXR1cm4gKHRoaXMuYmluZGluZ091dHB1dCAhPSBudWxsKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBiaW5kaW5nLgotICAgICAqIEByZXR1cm4gQmluZGluZwotICAgICAqLwotICAgIHB1YmxpYyBCaW5kaW5nIGdldEJpbmRpbmcoKQotICAgIHsKLSAgICAgIHJldHVybiBiaW5kaW5nOwotICAgIH0KLQotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBiaW5kaW5nIG1hdGNoZXMuCi0gICogQHBhcmFtIGJpbmRpbmcgYSBiaW5kaW5nLgotICAqIEBwYXJhbSBzb2FwQmluZGluZ1N0eWxlIHNvYXAgYmluZGluZyBzdHlsZS4KLSAgKiBAcGFyYW0gc29hcEJvZHlVc2Ugc29hcCBib2R5IHVzZS4KLSAgKiBAcmV0dXJuIGJpbmRpbmcgbWF0Y2hlcy4KLSAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiBwcm9ibGVtcyBvY2N1ciBkdXJpbmcgcHJvY2Vzc2luZy4KLSAgKi8KLSAgcHVibGljIEJpbmRpbmdNYXRjaFtdIGdldEJpbmRpbmdNYXRjaGVzKAotICAgIEJpbmRpbmcgYmluZGluZywKLSAgICBTdHJpbmcgc29hcEJpbmRpbmdTdHlsZSwKLSAgICBTdHJpbmcgc29hcEJvZHlVc2UpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0KLSAgICBWZWN0b3IgYmluZGluZ01hdGNoZXMgPSBuZXcgVmVjdG9yKCk7Ci0KLSAgICAvLyBDaGVjayBiaW5kaW5nCi0gICAgU09BUEJpbmRpbmcgc29hcEJpbmRpbmcgPSBnZXRTb2FwQmluZGluZyhiaW5kaW5nKTsKLQotICAgIC8vIGNoZWNrIHRoYXQgdGhlIHNvYXA6YmluZGluZyBmb3IgdGhpcyBXU0RMIGJpbmRpbmcgaXMgdGhlIHNwZWNpZmllZCBzdHlsZQotICAgIC8vIEFERDogY2hlY2sgZm9yIG51bGwgcG9pbnRlcgotICAgIGlmIChzb2FwQmluZGluZyAhPSBudWxsKQotICAgIHsKLSAgICAgIFN0cmluZyBkZWZhdWx0U3R5bGUgPSBzb2FwQmluZGluZy5nZXRTdHlsZSgpOwotCi0gICAgICBpZiAoZGVmYXVsdFN0eWxlID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGRlZmF1bHRTdHlsZSA9IFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9ET0M7Ci0gICAgICB9Ci0KLSAgICAgIC8vIEdldCB0aGUgc2V0IG9mIG9wZXJhdGlvbnMgZm9yIHRoaXMgV1NETCBiaW5kaW5nCi0gICAgICBMaXN0IGJpbmRpbmdPcHNMaXN0ID0gYmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9ucygpOwotICAgICAgaWYgKGJpbmRpbmdPcHNMaXN0ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIEl0ZXJhdG9yIGJpbmRpbmdPcHMgPSBiaW5kaW5nT3BzTGlzdC5pdGVyYXRvcigpOwotICAgICAgICAvLyBmb3IgZWFjaCBiaW5kaW5nIG9wZXJhdGlvbjoKLSAgICAgICAgd2hpbGUgKGJpbmRpbmdPcHMuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3AgPSAoQmluZGluZ09wZXJhdGlvbikgYmluZGluZ09wcy5uZXh0KCk7Ci0KLSAgICAgICAgICBTT0FQT3BlcmF0aW9uIHNvYXBPcCA9IGdldFNvYXBPcGVyYXRpb24oYmluZGluZ09wKTsKLQotICAgICAgICAgIGlmICgoc29hcE9wID09IG51bGwgJiYgZGVmYXVsdFN0eWxlLmVxdWFscyhzb2FwQmluZGluZ1N0eWxlKSkKLSAgICAgICAgICAgIHx8IChzb2FwT3AgIT0gbnVsbAotICAgICAgICAgICAgICAmJiBzb2FwT3AuZ2V0U3R5bGUoKSA9PSBudWxsCi0gICAgICAgICAgICAgICYmIGRlZmF1bHRTdHlsZS5lcXVhbHMoc29hcEJpbmRpbmdTdHlsZSkpCi0gICAgICAgICAgICB8fCAoc29hcE9wICE9IG51bGwKLSAgICAgICAgICAgICAgJiYgc29hcE9wLmdldFN0eWxlKCkgIT0gbnVsbAotICAgICAgICAgICAgICAmJiBzb2FwT3AuZ2V0U3R5bGUoKS5lcXVhbHMoc29hcEJpbmRpbmdTdHlsZSkpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIGNoZWNrIGJpbmRpbmcgaW5wdXQgJiBvdXRwdXQKLSAgICAgICAgICAgIEJpbmRpbmdJbnB1dCBiSW5wdXQgPSBiaW5kaW5nT3AuZ2V0QmluZGluZ0lucHV0KCk7Ci0gICAgICAgICAgICBpZiAoYklucHV0ICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFNPQVBCb2R5IGlucHV0U29hcEJvZHkgPSBnZXRTb2FwQm9keShiSW5wdXQpOwotICAgICAgICAgICAgICBpZiAoaW5wdXRTb2FwQm9keSA9PSBudWxsCi0gICAgICAgICAgICAgICAgfHwgKGlucHV0U29hcEJvZHkuZ2V0VXNlKCkgIT0gbnVsbAotICAgICAgICAgICAgICAgICAgJiYgIWlucHV0U29hcEJvZHkuZ2V0VXNlKCkuZXF1YWxzKHNvYXBCb2R5VXNlKSkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBiSW5wdXQgPSBudWxsOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEJpbmRpbmdPdXRwdXQgYk91dHB1dCA9IGJpbmRpbmdPcC5nZXRCaW5kaW5nT3V0cHV0KCk7Ci0gICAgICAgICAgICBpZiAoYk91dHB1dCAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTT0FQQm9keSBvdXRwdXRTb2FwQm9keSA9IGdldFNvYXBCb2R5KGJPdXRwdXQpOwotCi0gICAgICAgICAgICAgIGlmIChvdXRwdXRTb2FwQm9keSA9PSBudWxsCi0gICAgICAgICAgICAgICAgfHwgKG91dHB1dFNvYXBCb2R5LmdldFVzZSgpICE9IG51bGwKLSAgICAgICAgICAgICAgICAgICYmICFvdXRwdXRTb2FwQm9keS5nZXRVc2UoKS5lcXVhbHMoc29hcEJvZHlVc2UpKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJPdXRwdXQgPSBudWxsOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICgoYk91dHB1dCAhPSBudWxsKSB8fCAoYklucHV0ICE9IG51bGwpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvLyB3ZSBoYXZlIGEgbWF0Y2gsIGFkZCB0byB0aGUgdmVjdG9yCi0gICAgICAgICAgICAgIGJpbmRpbmdNYXRjaGVzLmFkZCgKLSAgICAgICAgICAgICAgICBuZXcgQmluZGluZ01hdGNoKAotICAgICAgICAgICAgICAgICAgYmluZGluZywKLSAgICAgICAgICAgICAgICAgIGJpbmRpbmdPcCwKLSAgICAgICAgICAgICAgICAgIHNvYXBCaW5kaW5nLAotICAgICAgICAgICAgICAgICAgYklucHV0LAotICAgICAgICAgICAgICAgICAgYk91dHB1dCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIEJpbmRpbmdNYXRjaFtdIEJpbmRpbmdNYXRjaEFycmF5ID0gbmV3IEJpbmRpbmdNYXRjaFtiaW5kaW5nTWF0Y2hlcy5zaXplKCldOwotICAgIGJpbmRpbmdNYXRjaGVzLmNvcHlJbnRvKEJpbmRpbmdNYXRjaEFycmF5KTsKLSAgICByZXR1cm4gQmluZGluZ01hdGNoQXJyYXk7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldFNvYXBPcGVyYXRpb24uCi0gICAqCi0gICAqIEBwYXJhbSBiaW5kaW5nT3BlcmF0aW9uIGEgYmluZGluZyBvcGVyYXRpb24uCi0gICAqIEByZXR1cm4gYSBzb2FwIG9wZXJhdGlvbi4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgcHJvYmxlbXMgd2hpbGUgcHJvY2Vzc2luZy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU09BUE9wZXJhdGlvbiBnZXRTb2FwT3BlcmF0aW9uKEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbikKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQotICAgIGlmIChiaW5kaW5nT3BlcmF0aW9uLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpID09IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgSXRlcmF0b3IgZXh0ZW5zaWJsZXMgPQotICAgICAgYmluZGluZ09wZXJhdGlvbi5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChleHRlbnNpYmxlcy5oYXNOZXh0KCkpCi0gICAgewotICAgICAgT2JqZWN0IGV4dGVuc2libGUgPSBleHRlbnNpYmxlcy5uZXh0KCk7Ci0gICAgICBpZiAoZXh0ZW5zaWJsZSBpbnN0YW5jZW9mIFNPQVBPcGVyYXRpb24pCi0gICAgICB7Ci0gICAgICAgIHJldHVybiAoU09BUE9wZXJhdGlvbikgZXh0ZW5zaWJsZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKiAKLSAgICogUmV0dXJucyBhbiBhcnJheSBvZiBTT0FQT3BlcmF0aW9ucyBjb3JyZXNwb25kaW5nIHRvIHRoZSB3c2RsOmJpbmRpbmcgc3VwcGxpZWQuCi0gICAqLwotICBwcm90ZWN0ZWQgSGFzaE1hcCBnZXRTb2FwT3BlcmF0aW9ucyhCaW5kaW5nIGJpbmRpbmcpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIEhhc2hNYXAgc29hcE9wZXJhdGlvbkxpc3QgPSBuZXcgSGFzaE1hcCgpOwotCi0gICAgaWYgKGJpbmRpbmcuZ2V0QmluZGluZ09wZXJhdGlvbnMoKSA9PSBudWxsKQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIC8vVmVjdG9yIHNvYXBPcFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLQotICAgIC8vIEdldCB0aGUgbGlzdCBvZiBiaW5kaW5nIG9wZXJhdGlvbnMKLSAgICBJdGVyYXRvciBvcGVyYXRpb25zID0gYmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7Ci0KLSAgICAvLyBDaGVjayBlYWNoIGJpbmRpbmcgb3BlcmF0aW9uIHRvIHNlZSBpZiBpdCBoYXMgYSBzb2FwIG9wZXJhdGlvbiBlbGVtZW50Ci0gICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gbnVsbDsKLSAgICB3aGlsZSAob3BlcmF0aW9ucy5oYXNOZXh0KCkpCi0gICAgewotICAgICAgYmluZGluZ09wZXJhdGlvbiA9IChCaW5kaW5nT3BlcmF0aW9uKSBvcGVyYXRpb25zLm5leHQoKTsKLSAgICAgIEl0ZXJhdG9yIGV4dGVuc2libGVzID0KLSAgICAgICAgYmluZGluZ09wZXJhdGlvbi5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGV4dGVuc2libGVzLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgT2JqZWN0IGV4dGVuc2libGUgPSBleHRlbnNpYmxlcy5uZXh0KCk7Ci0gICAgICAgIGlmIChleHRlbnNpYmxlIGluc3RhbmNlb2YgU09BUE9wZXJhdGlvbikKLSAgICAgICAgewotICAgICAgICAgIHNvYXBPcGVyYXRpb25MaXN0LnB1dChleHRlbnNpYmxlLCBiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvL3JldHVybiAoU09BUE9wZXJhdGlvbltdKXNvYXBPcFZlY3Rvci50b0FycmF5KG5ldyBTT0FQT3BlcmF0aW9uW10ge30pOwotICAgIHJldHVybiBzb2FwT3BlcmF0aW9uTGlzdDsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVjayBwYXJ0IGF0dHJpYnV0ZXMuCi0gICAqIEBwYXJhbSBiaW5kaW5nTWF0Y2ggYW4gYXJyYXkgb2YgQmluZGluZ01hdGNoIG9iamVjdHMuCi0gICAqIEBwYXJhbSBpbk9yT3V0IGEgU3RyaW5nIG9iamVjdC4KLSAgICogQHBhcmFtIGF0dHJpYiBhdHRyaWJ1dGUuCi0gICAqIEByZXR1cm4gYSBib29sZWFuLgotICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxFeGNlcHRpb24gaWYgdGhlIHBhcnQgaXMgbm90IGNvbXBsaWFudC4KLSAgICovCi0gIC8vIEdUIC0gcmV3b3JrIHRoaXMgbWV0aG9kIHdpdGggYSBiZXR0ZXIgd2F5IG9mIHBhcmFtZXRlcml6aW5nIHRoZSBnZXR0ZXJzIHJlcXVpcmVkIGZvciB0aGUgaW52b2NhdGlvbi4KLSAgcHJvdGVjdGVkIGJvb2xlYW4gY2hlY2tQYXJ0QXR0cmlidXRlcygKLSAgICBCaW5kaW5nTWF0Y2hbXSBiaW5kaW5nTWF0Y2gsCi0gICAgU3RyaW5nIGluT3JPdXQsCi0gICAgU3RyaW5nIGF0dHJpYikKLSAgICB0aHJvd3MgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbgotICB7Ci0KLSAgICBpZiAoIShpbk9yT3V0LmVxdWFscygidXNlSW5wdXQiKSB8fCBpbk9yT3V0LmVxdWFscygidXNlT3V0cHV0IikpCi0gICAgICB8fCAhKGF0dHJpYi5lcXVhbHMoInVzZVR5cGUiKSB8fCBhdHRyaWIuZXF1YWxzKCJ1c2VFbGVtZW50IikpKQotICAgIHsKLSAgICAgIC8vIGludmFsaWQgYXJndW1lbnQgdmFsdWUgc3VwcGxpZWQgYnkgY2FsbGluZyBtZXRob2QgLSAiaW50ZXJuYWwgZXJyb3IiCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBiaW5kaW5nTWF0Y2gubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgQmluZGluZ01hdGNoIG5leHRNYXRjaCA9IGJpbmRpbmdNYXRjaFtpXTsKLQotICAgICAgLy8gY2hlY2sgdGhlIGFzc29jaWF0ZWQgcGFydHMKLSAgICAgIE1lc3NhZ2UgbXNnOwotICAgICAgTWFwIHBhcnRzOwotICAgICAgSXRlcmF0b3IgcGFydEl0ZXJhdGlvbjsKLQotICAgICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3AgPSBuZXh0TWF0Y2guZ2V0QmluZGluZ09wZXJhdGlvbigpOwotICAgICAgaWYgKGJpbmRpbmdPcCA9PSBudWxsKQotICAgICAgewotICAgICAgICBjb250aW51ZTsgLy8gbm8gQmluZGluZyBPcGVyYXRpb24gZm9yIHNvbWUgcmVhc29uCi0gICAgICB9Ci0KLSAgICAgIE9wZXJhdGlvbiBvcCA9IGJpbmRpbmdPcC5nZXRPcGVyYXRpb24oKTsKLQotICAgICAgLyoJQUREOiBoYW5kbGUgc29hcDpmYXVsdHMgaW4gc2ltaWxhciB3YXkJICAgCQkKLSAgICAgIHRyeSB7Ci0gICAgICAvLyBjaGVjayBmYXVsdHMgLSByZW1hcmthYmx5IHNpbWlsYXIuLi4uIChuZWVkIHRvIHJldGFpbiBvcGVyYXRpb24gaWQgZm9yIGZhaWx1cmVkZXRhaWwgbXNnKQotICAgICAgCWlmIChuZXh0TWF0Y2guaGFzQmluZGluZ0ZhdWx0KCkpIHsKLSAgICAgIAkJCQkKLSAgICAgIAkJbXNnID0gb3AuZ2V0RmF1bHQoKS5nZXRNZXNzYWdlKCk7Ci0gICAgICAJCXBhcnRzID0gbXNnLmdldFBhcnRzKCk7Ci0gICAgICAJCQkJICAgIAkJCQkJICAgICAJCQkKLSAgICAgIAkJLy9jaGVjayB0aGF0IGVhY2ggcGFydCBoYXMgYW4gZWxlbWVudCBhdHRyaWJ1dGUgICAgCQkJCi0gICAgICAJCXBhcnRJdGVyYXRpb24gPSBwYXJ0cy52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgICAgCQl3aGlsZSAocGFydEl0ZXJhdGlvbi5oYXNOZXh0KCkpIHsKLSAgICAgIAkJCVBhcnQgcGFydCA9IChQYXJ0KXBhcnRJdGVyYXRpb24ubmV4dCgpOwotICAgICAgCQkJaWYgKHBhcnQuZ2V0RWxlbWVudE5hbWUoKSA9PSBudWxsKSB7Ci0gICAgICAJCQkJdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24oIk9QRVJBVElPTjogIiArIG9wICsgIk1FU1NBR0U6ICIgKyBtc2cpOwotICAgICAgCQkJfQotICAgICAgCQl9CSAJCQkKLSAgICAgIAl9Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoTnVsbFBvaW50ZXJFeGNlcHRpb24gbikgewotICAgICAgCS8vIG5vIHBhcnRzIGZvdW5kIC0gdGhpcyBxdWFsaWZpZXMgYW4gYXNzZXJ0aW9uIGZhaWx1cmUKLSAgICAgIAl0aHJvdyBuZXcgQXNzZXJ0aW9uRmFpbEV4Y2VwdGlvbihuLmdldE1lc3NhZ2UoKSk7Ci0gICAgICB9Ci0gICAgICAqLwotCi0gICAgICB0cnkKLSAgICAgIHsKLQotICAgICAgICBRTmFtZSBhdHRyaWJ1dGVOYW1lOwotCi0gICAgICAgIC8vR1Q6IERvIHdlIG5lZWQgdG8gY2hlY2sgQmluZGluZ0lucHV0IC8gT3V0cHV0IGhlcmUgPz8KLQotICAgICAgICBpZiAoaW5Pck91dC5lcXVhbHMoInVzZUlucHV0IikpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAob3AuZ2V0SW5wdXQoKSA9PSBudWxsIHx8ICFuZXh0TWF0Y2guaGFzQmluZGluZ0lucHV0KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gTm8gSW5wdXQgc28gbm90aGluZyB0byBjaGVjawotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgbXNnID0gb3AuZ2V0SW5wdXQoKS5nZXRNZXNzYWdlKCk7Ci0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsgLy8gTG9va2luZyBmb3IgT3V0cHV0Ci0gICAgICAgICAgaWYgKG9wLmdldE91dHB1dCgpID09IG51bGwgfHwgIW5leHRNYXRjaC5oYXNCaW5kaW5nT3V0cHV0KCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gTm8gT3V0cHV0IHNvIG5vdGhpbmcgdG8gY2hlY2sKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgIH0KLQotICAgICAgICAgIG1zZyA9IG9wLmdldE91dHB1dCgpLmdldE1lc3NhZ2UoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtc2cgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIGNvbnRpbnVlOyAvLyBub3RoaW5nIHRvIGNoZWNrIGZyb20gdGhpcyBCaW5kaW5nIE1hdGNoICg/KQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gR2V0IHRoZSBsaXN0IG9mIHBhcnRzIAotICAgICAgICBwYXJ0cyA9IG1zZy5nZXRQYXJ0cygpOwotCi0gICAgICAgIC8vIElmIHRoZXJlIGlzIGEgcGFydHMgYXR0cmlidXRlLCB0aGVuIG9ubHkgcHJvY2VzcyB0aG9zZSBwYXJ0cwotICAgICAgICBMaXN0IHBhcnRzTmFtZUxpc3QgPSBudWxsOwotICAgICAgICBpZiAoKHBhcnRzTmFtZUxpc3QgPSBnZXRQYXJ0c0xpc3QobmV4dE1hdGNoLCBpbk9yT3V0KSkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIFZlY3RvciBwYXJ0c0xpc3QgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgICAgSXRlcmF0b3IgcGFydHNOYW1lSXRlcmF0b3IgPSBwYXJ0c05hbWVMaXN0Lml0ZXJhdG9yKCk7Ci0gICAgICAgICAgd2hpbGUgKHBhcnRzTmFtZUl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBwYXJ0c0xpc3QuYWRkKHBhcnRzLmdldCgoU3RyaW5nKSBwYXJ0c05hbWVJdGVyYXRvci5uZXh0KCkpKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcGFydEl0ZXJhdGlvbiA9IHBhcnRzTGlzdC5pdGVyYXRvcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gT3RoZXJ3aXNlIHVzZSB0aGUgY29tcGxldGUgbGlzdCBvZiBwYXJ0cwotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBwYXJ0SXRlcmF0aW9uID0gcGFydHMudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vY2hlY2sgdGhhdCBlYWNoIHBhcnQgaGFzIGFuIGVsZW1lbnQgb3IgdHlwZSBhdHRyaWJ1dGUgICAgCQkJCi0gICAgICAgIHdoaWxlIChwYXJ0SXRlcmF0aW9uLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIFBhcnQgcGFydCA9IChQYXJ0KSBwYXJ0SXRlcmF0aW9uLm5leHQoKTsKLSAgICAgICAgICBpZiAoYXR0cmliLmVxdWFscygidXNlRWxlbWVudCIpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGF0dHJpYnV0ZU5hbWUgPSBwYXJ0LmdldEVsZW1lbnROYW1lKCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7IC8vICJ1c2VUeXBlIgotICAgICAgICAgICAgYXR0cmlidXRlTmFtZSA9IHBhcnQuZ2V0VHlwZU5hbWUoKTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBpZiAoYXR0cmlidXRlTmFtZSA9PSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25GYWlsRXhjZXB0aW9uKAotICAgICAgICAgICAgICAiTmFtZSBvZiBvcGVyYXRpb24gdGhhdCBmYWlsZWQ6ICIKLSAgICAgICAgICAgICAgICArIG9wLmdldE5hbWUoKQotICAgICAgICAgICAgICAgICsgIlxuIgotICAgICAgICAgICAgICAgICsgb3AudG9TdHJpbmcoKQotICAgICAgICAgICAgICAgICsgIlxuIgotICAgICAgICAgICAgICAgICsgIlxuTmFtZSBvZiBtZXNzYWdlIHRoYXQgZmFpbGVkOiAiCi0gICAgICAgICAgICAgICAgKyBtc2cuZ2V0UU5hbWUoKQotICAgICAgICAgICAgICAgICsgIlxuIgotICAgICAgICAgICAgICAgICsgbXNnLnRvU3RyaW5nKCkpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9uIG4pCi0gICAgICB7Ci0gICAgICAgIC8vIG5vIHBhcnRzIGZvdW5kIC0gdGhpcyBxdWFsaWZpZXMgYW4gYXNzZXJ0aW9uIGZhaWx1cmUKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkZhaWxFeGNlcHRpb24obi50b1N0cmluZygpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7IC8vIHRlc3RzIHN1Y2Nlc3NmdWwKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgcGFydHMgbGlzdCBmcm9tIGEgc29hcGJpbmQ6Ym9keSBlbGVtZW50LgotICAgKi8KLSAgcHJpdmF0ZSBMaXN0IGdldFBhcnRzTGlzdChCaW5kaW5nTWF0Y2ggYmluZGluZ01hdGNoLCBTdHJpbmcgdHlwZSkKLSAgewotICAgIExpc3QgcGFydHNMaXN0ID0gbnVsbDsKLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IG51bGw7Ci0KLSAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcDsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdldCB0aGUgYmluZGluZyBvcGVyYXRpb24KLSAgICAgIGJpbmRpbmdPcCA9IGJpbmRpbmdNYXRjaC5nZXRCaW5kaW5nT3BlcmF0aW9uKCk7Ci0KLSAgICAgIC8vIERldGVybWluZSBpZiB0aGUgYmluZGluZyBvcGVyYXRpb24gY29udGFpbnMgYSBzb2FwYmluZDpib2R5IHdpdGggYSBwYXJ0cyBhdHRyaWJ1dGUKLSAgICAgIGlmICh0eXBlLmVxdWFscygidXNlSW5wdXQiKSkKLSAgICAgIHsKLSAgICAgICAgaXRlcmF0b3IgPQotICAgICAgICAgIGJpbmRpbmdPcC5nZXRCaW5kaW5nSW5wdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBpdGVyYXRvciA9Ci0gICAgICAgICAgYmluZGluZ09wLmdldEJpbmRpbmdPdXRwdXQoKS5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoTnVsbFBvaW50ZXJFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICAgIC8vIGVpdGhlciBubyBiaW5kaW5nIG9wZXJhdGlvbiwgYmluZGluZyBpbnB1dC9vdXRwdXQsIG9yIFNPQVAgZWxlbWVudAotICAgIH0KLQotICAgIC8vIERldGVybWluZSBpZiB0aGUgYmluZGluZyBvcGVyYXRpb24gY29udGFpbnMgYSBzb2FwYmluZDpib2R5IHdpdGggYSBwYXJ0cyBhdHRyaWJ1dGUKLSAgICB3aGlsZSAoKGl0ZXJhdG9yLmhhc05leHQoKSkgJiYgKHBhcnRzTGlzdCA9PSBudWxsKSkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgU09BUEJvZHkgc29hcEJvZHkgPSAoU09BUEJvZHkpIGl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgcGFydHNMaXN0ID0gc29hcEJvZHkuZ2V0UGFydHMoKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChDbGFzc0Nhc3RFeGNlcHRpb24gY2NlKQotICAgICAgeyAvLyBub3QgYSBTT0FQQm9keSBleHRlbnNpYmlsaXR5IGVsZW1lbnQgc28gaWdub3JlCi0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHBhcnRzTGlzdDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgZWxlbWVudCBsb2NhdGlvbi4KLSAgICogQHBhcmFtIHdzZGxEb2N1bWVudCBXU0RMIGRvY3VtZW50LgotICAgKiBAcGFyYW0gd3NkbEVsZW1lbnQgV1NETCBlbGVtZW50LgotICAgKiBAcmV0dXJuIGVsZW1lbnQgbG9jYXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgRWxlbWVudExvY2F0aW9uIGdldEVsZW1lbnRMb2NhdGlvbigKLSAgICBXU0RMRG9jdW1lbnQgd3NkbERvY3VtZW50LAotICAgIE9iamVjdCB3c2RsRWxlbWVudCkKLSAgewotICAgIEVsZW1lbnRMb2NhdGlvbiBlbGVtZW50TG9jYXRpb24gPSBudWxsOwotICAgIFdTRExFbGVtZW50TGlzdCB3c2RsRWxlbWVudExpc3Q7Ci0KLSAgICBpZiAoKHdzZGxFbGVtZW50TGlzdCA9IHdzZGxEb2N1bWVudC5nZXRFbGVtZW50TGlzdCgpKSAhPSBudWxsKQotICAgIHsKLSAgICAgIGVsZW1lbnRMb2NhdGlvbiA9IHdzZGxFbGVtZW50TGlzdC5nZXRFbGVtZW50TG9jYXRpb24od3NkbEVsZW1lbnQpOwotICAgIH0KLQotICAgIHJldHVybiBlbGVtZW50TG9jYXRpb247Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIGZhaWx1cmUgZGV0YWlsLgotICAgKiBAcGFyYW0gbWVzc2FnZSBhIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBlbnRyeUNvbnRleHQgZW50cnkgY29udGV4dC4KLSAgICogQHJldHVybiBmYWlsdXJlIGRldGFpbC4KLSAgICovCi0gIHByb3RlY3RlZCBGYWlsdXJlRGV0YWlsIGNyZWF0ZUZhaWx1cmVEZXRhaWwoCi0gICAgU3RyaW5nIG1lc3NhZ2UsCi0gICAgRW50cnlDb250ZXh0IGVudHJ5Q29udGV4dCkKLSAgewotICAgIHJldHVybiBjcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgICAgbWVzc2FnZSwKLSAgICAgIGVudHJ5Q29udGV4dCwKLSAgICAgIGVudHJ5Q29udGV4dC5nZXRFbnRyeSgpLmdldEVudHJ5RGV0YWlsKCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBmYWlsdXJlIGRldGFpbC4KLSAgICogQHBhcmFtIG1lc3NhZ2UgYSBtZXNzYWdlLgotICAgKiBAcGFyYW0gZW50cnlDb250ZXh0IGVudHJ5IGNvbnRleHQuCi0gICAqIEBwYXJhbSB3c2RsRWxlbWVudCBXU0RMIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gZmFpbHVyZSBkZXRhaWwuCi0gICAqLwotICBwcm90ZWN0ZWQgRmFpbHVyZURldGFpbCBjcmVhdGVGYWlsdXJlRGV0YWlsKAotICAgIFN0cmluZyBtZXNzYWdlLAotICAgIEVudHJ5Q29udGV4dCBlbnRyeUNvbnRleHQsCi0gICAgT2JqZWN0IHdzZGxFbGVtZW50KQotICB7Ci0gICAgRmFpbHVyZURldGFpbCBmYWlsdXJlRGV0YWlsID0gcmVwb3J0ZXIuY3JlYXRlRmFpbHVyZURldGFpbCgpOwotICAgIGZhaWx1cmVEZXRhaWwuc2V0RmFpbHVyZU1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgZmFpbHVyZURldGFpbC5zZXRFbGVtZW50TG9jYXRpb24oCi0gICAgICBnZXRFbGVtZW50TG9jYXRpb24oZW50cnlDb250ZXh0LmdldFdTRExEb2N1bWVudCgpLCB3c2RsRWxlbWVudCkpOwotICAgIHJldHVybiBmYWlsdXJlRGV0YWlsOwotICB9Ci0KLSAgLyoqIAotICAgKiBTT0FQQm9keSwgU09BUEZhdWx0LCBTT0FQSGVhZGVyIGFuZCBTT0FQSGVhZGVyRmF1bHQgY2xhc3MgCi0gICAqIGludGVyZmFjZXMgaGF2ZSBjb21wYXRpYmxlIGdldFVzZSgpIGFuZCBnZXROYW1lc3BhY2VVUkkoKSAKLSAgICogbWV0aG9kcywgYnV0IHdzZGw0aiBkb2VzIG5vdCBkZWNsYXJlIHRoZW0gYXQgdGhlIHBhcmVudCBpbnRlcmZhY2UuIAotICAgKiBUaGVyZWZvcmUgdXNlIHJlZmxlY3Rpb24gdG8gYWNjZXNzIHRoZXNlIGNvbW1vbiBtZXRob2RzLgotICAgKiAKLSAgICogQHBhcmFtIGV4dEVsZW1lbnQgZXh0ZW5zaWJpbGl0eSBlbGVtZW50LgotICAgKiBAcmV0dXJuIHRydWUgaWYgbmFtZXNwYWNlIGlzIGZvdW5kIGluIFNPQVAgbGl0ZXJhbC4KLSAgICogQHRocm93cyBOb1N1Y2hNZXRob2RFeGNlcHRpb24gaWYgdGhpcyBtZXRob2QgY2Fubm90IGJlIGZvdW5kLgotICAgKiBAdGhyb3dzIEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaWYgcHJvYmxlbXMgb2NjdXIgaW4gYW4gaW52b2tlZCBtZXRob2Qgb3IgY29uc3RydWN0b3IKLSAgICogQHRocm93cyBJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGlmIHRoZXJlIGlzIGFtIGF0dGVtcHQgdG8gbG9hZCBhCi0gICAqICAgICAgICAgY2xhc3MgdGhhdCBpdCBkb2VzIG5vdCBoYXZlIGFjY2VzcyB0by4KLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIG5hbWVzcGFjZUZvdW5kSW5Tb2FwTGl0ZXJhbChFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtZW50KQotICAgIHRocm93cyBOb1N1Y2hNZXRob2RFeGNlcHRpb24sIEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24sIElsbGVnYWxBY2Nlc3NFeGNlcHRpb24KLSAgewotICAgIENsYXNzIGMgPSBleHRFbGVtZW50LmdldENsYXNzKCk7Ci0gICAgTWV0aG9kIGdldFVzZU1ldGhvZCA9IGMuZ2V0TWV0aG9kKCJnZXRVc2UiLCBuZXcgQ2xhc3NbMF0pOwotICAgIE1ldGhvZCBnZXROYW1lc3BhY2VVUklNZXRob2QgPSBjLmdldE1ldGhvZCgiZ2V0TmFtZXNwYWNlVVJJIiwgbmV3IENsYXNzWzBdKTsKLQotICAgIC8vICh1c2UgYXR0cmlidXRlIGlzIG1hbmRhdG9yeSBidXQgdGhlIG51bGwgY2FzZSBpcyBjaGVja2VkIGZvciBzaW5jZSBhIG1pc3NpbmcgdXNlIGlzIG5vdAotICAgIC8vIGNoZWNrZWQgd2l0aCB0aGlzIFRBLiBJZiBpdHMgbWlzc2luZyBpdHMgaW52YWxpZCBidXQgd2UgZG9uJ3Qga25vdyB3aGV0aGVyIHdlIGhhdmUgZG9jLWxpdCkuICAgICAJCQotICAgIGlmIChnZXRVc2VNZXRob2QuaW52b2tlKGV4dEVsZW1lbnQsIG51bGwpID09IG51bGwKLSAgICAgIHx8ICFnZXRVc2VNZXRob2QuaW52b2tlKGV4dEVsZW1lbnQsIG51bGwpLmVxdWFscygKLSAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CT0RZX1VTRV9MSVQpKQotICAgIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyByZXR1cm4gdHJ1ZSBpZiBuYW1lc3BhY2UgZm91bmQKLSAgICBib29sZWFuIG5hbWVzcGFjZUZvdW5kID0KLSAgICAgIChnZXROYW1lc3BhY2VVUklNZXRob2QuaW52b2tlKGV4dEVsZW1lbnQsIG51bGwpICE9IG51bGwpOwotCi0gICAgLy8gcmV0dXJuIHRydWUgaWYgbmFtZXNwYWNlIGZvdW5kCi0gICAgcmV0dXJuIG5hbWVzcGFjZUZvdW5kOwotCi0gIH0KLQotICAvKioKLSAgICogVmVyaWZ5IGV4dGVuc2liaWxpdHkgZWxlbWVudCB1c2VzIGxpdGVyYWwuCi0gICAqIEBwYXJhbSBleHRlbnNpYmxlIC0gZXh0ZW5zaWJpbGl0eSBlbGVtZW50Ci0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKiBAdGhyb3dzIE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBpZiB0aGlzIG1ldGhvZCBjYW5ub3QgYmUgZm91bmQuCi0gICAqIEB0aHJvd3MgSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBpZiBwcm9ibGVtcyBvY2N1ciBpbiBhbiBpbnZva2VkIG1ldGhvZCBvciBjb25zdHJ1Y3RvcgotICAgKiBAdGhyb3dzIElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gaWYgdGhlcmUgaXMgYW0gYXR0ZW1wdCB0byBsb2FkIGEKLSAgICogICAgICAgICBjbGFzcyB0aGF0IGl0IGRvZXMgbm90IGhhdmUgYWNjZXNzIHRvLgotICAgKi8KLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNMaXRlcmFsKEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuc2libGUpCi0gICAgdGhyb3dzIE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiwgSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiwgSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbgotICB7Ci0KLSAgICBDbGFzcyBjID0gZXh0ZW5zaWJsZS5nZXRDbGFzcygpOwotICAgIE1ldGhvZCBnZXRVc2VNZXRob2QgPSBjLmdldE1ldGhvZCgiZ2V0VXNlIiwgbmV3IENsYXNzWzBdKTsKLQotICAgIC8vICh1c2UgYXR0cmlidXRlIGlzIG1hbmRhdG9yeSBidXQgdGhlIG51bGwgY2FzZSBpcyBjaGVja2VkIGZvciBzaW5jZSBhIG1pc3NpbmcgdXNlIGlzIG5vdAotICAgIC8vIGNoZWNrZWQgd2l0aCB0aGlzIFRBLiBJZiBpdHMgbWlzc2luZyBpdHMgaW52YWxpZCBidXQgd2UgZG9uJ3Qga25vdyB3aGV0aGVyIHdlIGhhdmUgZG9jLWxpdCkuICAgICAJCQotICAgIGlmIChnZXRVc2VNZXRob2QuaW52b2tlKGV4dGVuc2libGUsIG51bGwpID09IG51bGwKLSAgICAgIHx8ICFnZXRVc2VNZXRob2QuaW52b2tlKGV4dGVuc2libGUsIG51bGwpLmVxdWFscygKLSAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CT0RZX1VTRV9MSVQpKQotICAgIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyByZXR1cm4gdHJ1ZSBpZiBzaG93biB0byBoYXZlIHVzZT0ibGl0ZXJhbCIKLSAgICByZXR1cm4gdHJ1ZTsKLQotICB9Ci0gIAotICAvKioKLSAgICogUmV0dXJucyB0cnVlIGlmIHRoZXNlIHRlc3RzIHNob3VsZCBiZSBydW4gKGRlcGVuZGluZyBvbiB0aGUgYW5hbHl6ZXIKLSAgICogY29uZmlnKQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gcnVuVGVzdHMoKSB7IHJldHVybiB0ZXN0YWJsZTsgfSAKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDEwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjAxMC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjM5YjVkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDEwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTIwMTAKLSAqLwotcHVibGljIGNsYXNzIFdTSTIwMTAgZXh0ZW5kcyBCUDIwMTAKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjAxMChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjAxMS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIwMTEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFkNWRhNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjAxMS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyMDExCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyMDExIGV4dGVuZHMgQlAyMDExCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTIwMTEoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIwMTIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDEyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxZDllZjIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIwMTIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjAxMgotICovCi1wdWJsaWMgY2xhc3MgV1NJMjAxMiBleHRlbmRzIEJQMjAxMgotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyMDEyKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDEzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjAxMy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNGYwMWNmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDEzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTIwMTMKLSAqLwotcHVibGljIGNsYXNzIFdTSTIwMTMgZXh0ZW5kcyBCUDIwMTMKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjAxMyhXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjAxNC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIwMTQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmJiNmE2YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjAxNC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyMDE0Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyMDE0IGV4dGVuZHMgQlAyMDE0Ci17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTIwMTQoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIwMTcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDE3LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzZTk4MjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIwMTcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjAxNwotICovCi1wdWJsaWMgY2xhc3MgV1NJMjAxNyBleHRlbmRzIEJQMjAxNwotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyMDE3KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDE4LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjAxOC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODQ1ZTMxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDE4LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTIwMTgKLSAqLwotcHVibGljIGNsYXNzIFdTSTIwMTggZXh0ZW5kcyBCUDIwMTgKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjAxOChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjAxOS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIwMTkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmIxOTdmMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjAxOS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyMDE5Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyMDE5IGV4dGVuZHMgQlAyMDE5Ci17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTIwMTkoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIwMjAuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDIwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1ZjAyMDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIwMjAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjAyMAotICovCi1wdWJsaWMgY2xhc3MgV1NJMjAyMCBleHRlbmRzIEJQMjAyMAotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyMDIwKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDIxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjAyMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzdmMWJjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDIxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTIwMjEKLSAqLwotcHVibGljIGNsYXNzIFdTSTIwMjEgZXh0ZW5kcyBCUDIwMjEKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjAyMShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjAyMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIwMjIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODI2OTk2NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjAyMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyMDIyCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyMDIyIGV4dGVuZHMgQlAyMDIyCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTIwMjIoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIwMzIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDMyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjMDdhYzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIwMzIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjAzMgotICovCi1wdWJsaWMgY2xhc3MgV1NJMjAzMiBleHRlbmRzIEJQMjAzMgotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyMDMyKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDk4LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjA5OC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmE5MDVjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMDk4LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTIwOTgKLSAqLwotcHVibGljIGNsYXNzIFdTSTIwOTggZXh0ZW5kcyBCUDIwOTgKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjA5OChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjA5OS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIwOTkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTE0YjUyYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjA5OS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuSW1wb3J0OwotaW1wb3J0IGphdmF4LndzZGwuSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5QYXJ0OwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBqYXZheC53c2RsLlR5cGVzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLkVudHJ5Q29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5Bc3NlcnRpb25Qcm9jZXNzVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5FcnJvckxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIFdTSTIwOTkuCi0gICAqIDxjb250ZXh0PkZvciBhIGNhbmRpZGF0ZSB3c2RsOmRlZmluaXRpb25zLCA8L2NvbnRleHQ+Ci0gICAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5BIFdTLUkgY29uZm9ybWFuY2UgYW5ub3RhdGlvbiBkb2VzIG5vdCBhcHBlYXIgb3V0c2lkZSBhIHdzZGw6cG9ydCwgd3NkbDpiaW5kaW5nLCB3c2RsOnBvcnRUeXBlLCB3c2RsOm9wZXJhdGlvbiwgb3Igd3NkbDptZXNzYWdlIGVsZW1lbnQuPC9hc3NlcnRpb25EZXNjcmlwdGlvbj4KLSAqLwotcHVibGljIGNsYXNzIFdTSTIwOTkgZXh0ZW5kcyBBc3NlcnRpb25Qcm9jZXNzVmlzaXRvciBpbXBsZW1lbnRzIFdTSVRhZwotewotICBwcml2YXRlIGZpbmFsIFdTRExWYWxpZGF0b3JJbXBsIHZhbGlkYXRvcjsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjA5OShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gICAgdGhpcy52YWxpZGF0b3IgPSBpbXBsOwotICB9Ci0KLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JzID0gbmV3IEVycm9yTGlzdCgpOwotICBwcml2YXRlIGJvb2xlYW4gY29udGFpbnNDbGFpbXMgPSBmYWxzZTsKLQotICAvKioKLSAgICogIENoZWNrIGEgV1MtSSBjb25mb3JtYW5jZSBhbm5vdGF0aW9uIGRvZXMgbm90IGFwcGVhciBvdXRzaWRlIGEgd3NkbDpwb3J0LCB3c2RsOmJpbmRpbmcsIHdzZGw6cG9ydFR5cGUsIHdzZGw6b3BlcmF0aW9uLCBvciB3c2RsOm1lc3NhZ2UgZWxlbWVudCBpZiBub3QgaXQgY3JlYXRlcyBmYWlsdXJlIHJlcG9ydC4KLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQob3JnLnczYy5kb20uRWxlbWVudCwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KEVsZW1lbnQgZWwsIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIC8vIGNvbmZvcm1hbmNlIGNsYWltIHNob3VsZCBiZSB3aXRoaW4gOiBwb3J0LCBiaW5kaW5nLCBwb3J0dHlwZSwgb3BlcmF0aW9uLCBtZXNzYWdlCi0gICAgaWYgKGNvbnRhaW5zQ29uZm9ybWFuY2VDbGFpbShlbCkpCi0gICAgewotICAgICAgY29udGFpbnNDbGFpbXMgPSB0cnVlOwotCi0gICAgICBpZiAocGFyZW50IGluc3RhbmNlb2YgQmluZGluZ0ZhdWx0KQotICAgICAgICBlcnJvcnMuYWRkKFdTRExfRkFVTFQsICgoQmluZGluZ0ZhdWx0KSBwYXJlbnQpLmdldE5hbWUoKSk7Ci0gICAgICBlbHNlIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBCaW5kaW5nSW5wdXQpCi0gICAgICAgIGVycm9ycy5hZGQoV1NETF9JTlBVVCwgKChCaW5kaW5nSW5wdXQpIHBhcmVudCkuZ2V0TmFtZSgpKTsKLSAgICAgIGVsc2UgaWYgKHBhcmVudCBpbnN0YW5jZW9mIEJpbmRpbmdPcGVyYXRpb24pCi0gICAgICAgIGVycm9ycy5hZGQoV1NETF9PUEVSQVRJT04sICgoQmluZGluZ09wZXJhdGlvbikgcGFyZW50KS5nZXROYW1lKCkpOwotICAgICAgZWxzZSBpZiAocGFyZW50IGluc3RhbmNlb2YgQmluZGluZ091dHB1dCkKLSAgICAgICAgZXJyb3JzLmFkZChXU0RMX09VVFBVVCwgKChCaW5kaW5nT3V0cHV0KSBwYXJlbnQpLmdldE5hbWUoKSk7Ci0gICAgICBlbHNlIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBEZWZpbml0aW9uKQotICAgICAgICBlcnJvcnMuYWRkKFdTRExfREVGSU5JVElPTlMsICgoRGVmaW5pdGlvbikgcGFyZW50KS5nZXRRTmFtZSgpKTsKLSAgICAgIGVsc2UgaWYgKHBhcmVudCBpbnN0YW5jZW9mIFNlcnZpY2UpCi0gICAgICAgIGVycm9ycy5hZGQoV1NETF9TRVJWSUNFLCAoKFNlcnZpY2UpIHBhcmVudCkuZ2V0UU5hbWUoKSk7Ci0gICAgICBlbHNlIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBGYXVsdCkKLSAgICAgICAgZXJyb3JzLmFkZChXU0RMX0ZBVUxULCAoKEZhdWx0KSBwYXJlbnQpLmdldE5hbWUoKSk7Ci0gICAgICBlbHNlIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBPdXRwdXQpCi0gICAgICAgIGVycm9ycy5hZGQoV1NETF9JTlBVVCwgKChPdXRwdXQpIHBhcmVudCkuZ2V0TmFtZSgpKTsKLSAgICAgIGVsc2UgaWYgKHBhcmVudCBpbnN0YW5jZW9mIEltcG9ydCkKLSAgICAgICAgZXJyb3JzLmFkZChXU0RMX0lNUE9SVCwgKChJbXBvcnQpIHBhcmVudCkuZ2V0TmFtZXNwYWNlVVJJKCkpOwotICAgICAgZWxzZSBpZiAocGFyZW50IGluc3RhbmNlb2YgSW5wdXQpCi0gICAgICAgIGVycm9ycy5hZGQoV1NETF9JTlBVVCwgKChJbnB1dCkgcGFyZW50KS5nZXROYW1lKCkpOwotICAgICAgZWxzZSBpZiAocGFyZW50IGluc3RhbmNlb2YgUGFydCkKLSAgICAgICAgZXJyb3JzLmFkZChXU0RMX1BBUlQsICgoUGFydCkgcGFyZW50KS5nZXROYW1lKCkpOwotICAgICAgZWxzZSBpZiAocGFyZW50IGluc3RhbmNlb2YgVHlwZXMpCi0gICAgICAgIGVycm9ycy5hZGQoV1NETF9UWVBFUyk7Ci0gICAgfQotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotCi0gICAgV1NETFRyYXZlcnNhbCB0cmF2ZXJzYWwgPSBuZXcgV1NETFRyYXZlcnNhbCgpOwotICAgIC8vVmlzaXRvckFkYXB0b3IuYWRhcHQodGhpcyk7Ci0gICAgdHJhdmVyc2FsLnNldFZpc2l0b3IodGhpcyk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0RWxlbWVudCh0cnVlKTsKLSAgICAvKgotICAgIHRyYXZlcnNhbC4KLSAgICAJaWdub3JlUG9ydDJFbGVtZW50KCkuCi0gICAgCWlnbm9yZU1lc3NhZ2UyRWxlbWVudCgpLgotICAgIAlpZ25vcmVCaW5kaW5nMkVsZW1lbnQoKS4KLSAgICAJaWdub3JlUG9ydFR5cGUyRWxlbWVudCgpLgotICAgIAlpZ25vcmVPcGVyYXRpb24yRWxlbWVudCgpOwkJCi0gICAgICAqLwotICAgIHRyYXZlcnNhbC5pZ25vcmVSZWZlcmVuY2VzKCk7Ci0gICAgdHJhdmVyc2FsLmlnbm9yZUltcG9ydCgpOwotICAgIHRyYXZlcnNhbC50cmF2ZXJzZSgoRGVmaW5pdGlvbikgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKSk7Ci0KLSAgICAvLyBjcmVhdGUgZGV0YWlsIG1lc3NhZ2Ugd2l0aCB0aGUgbGlzdCBvZiBlcnJvciBlbGVtZW50cwotICAgIGlmICghZXJyb3JzLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlcnJvcnMudG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgIH0KLQotICAgIGVsc2UgaWYgKCFjb250YWluc0NsYWltcykKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLSAgICB9Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLmNyZWF0ZUFzc2VydGlvblJlc3VsdCh0ZXN0QXNzZXJ0aW9uLCByZXN1bHQsIGZhaWx1cmVEZXRhaWwpOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrIHRoZSBkb2N1bWVudGF0aW9uIGVsZW1lbnQgd2hldGhlciBjb250YWlucyBjb25mb3JtYW5jZSBjbGFpbXMuIAotICAgKiBSZXR1cm5zIHRydWUgaWYgZG9jdW1lbnRhdGlvbiBlbGVtZW50IGNvbnRhaW5zIGNvbmZvcm1hbmNlIGNsYWltLiAKLSAgICogQHBhcmFtIGVsCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGNvbnRhaW5zQ29uZm9ybWFuY2VDbGFpbShFbGVtZW50IGVsKQotICB7Ci0gICAgaWYgKGVsID09IG51bGwpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZWwgPSBYTUxVdGlscy5maW5kQ2hpbGRFbGVtZW50KGVsLCBXU0lfQ0xBSU0pOwotICAgIHJldHVybiAoZWwgIT0gbnVsbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjEwMC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMDAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGExNTU4NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjEwMC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0VHlwZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSVRhZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5UZXN0QXNzZXJ0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuQXNzZXJ0aW9uUHJvY2Vzc1Zpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRXJyb3JMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiBXU0kyMTAwLgotICAgKiA8Y29udGV4dD5Gb3IgYSBjYW5kaWRhdGUgd3NkbDpkZWZpbml0aW9ucywgaWYgaXQgY29udGFpbnMgYSB3c2RsOnBvcnQsIHdzZGw6YmluZGluZywgd3NkbDpwb3J0VHlwZSwgd3NkbDpvcGVyYXRpb24sIG9yIHdzZGw6bWVzc2FnZSwgd2hpY2ggaW4gdHVybiBjb250YWlucyBhIGNvbmZvcm1hbmNlIGFubm90YXRpb248L2NvbnRleHQ+Ci0gICAqIDxhc3NlcnRpb25EZXNjcmlwdGlvbj5UaGUgY29uZm9ybWFuY2UgYW5ub3RhdGlvbiBvZiB0aGUgd3NkbDpwb3J0LCB3c2RsOmJpbmRpbmcsIHdzZGw6cG9ydFR5cGUsIHdzZGw6b3BlcmF0aW9uLCBvciB3c2RsOm1lc3NhZ2UsIHZhbGlkYXRlcyB0byB0aGUgc2NoZW1hIGRlZmluZWQgaW4gdGhlIEJhc2ljIFByb2ZpbGUsIGFuZCBpcyBkaXJlY3QgY2hpbGQgb2YgdGhlIGRvY3VtZW50YXRpb24gZWxlbWVudCBmb3IgdGhlIFdTREwgZWxlbWVudC4gVGhlIHNjaGVtYSBkZWZpbml0aW9uIHVzZXMgImh0dHA6Ly93cy1pLm9yZy9zY2hlbWFzL2NvbmZvcm1hbmNlQ2xhaW0vIiBhcyB0aGUgdGFyZ2V0TmFtZXNwYWNlLiA8L2Fzc2VydGlvbkRlc2NyaXB0aW9uPgotICovCi1wdWJsaWMgY2xhc3MgV1NJMjEwMCBleHRlbmRzIEFzc2VydGlvblByb2Nlc3NWaXNpdG9yIGltcGxlbWVudHMgV1NJVGFnCi17Ci0gIHByaXZhdGUgZmluYWwgV1NETFZhbGlkYXRvckltcGwgdmFsaWRhdG9yOwotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyMTAwKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgICB0aGlzLnZhbGlkYXRvciA9IGltcGw7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gY29udGFpbnNDbGFpbXMgPSBmYWxzZTsKLSAgcHJpdmF0ZSBFcnJvckxpc3QgZXJyb3JzID0gbmV3IEVycm9yTGlzdCgpOwotCi0gIC8qIENyZWF0ZSBmYWx1cmUgcmVwb3J0IGlmIHBvcnQgY29udGFpbnMgaWxsZWdhbCBjbGFpbS4KLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuUG9ydCwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KFBvcnQgcG9ydCwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgaWYgKHBvcnQgIT0gbnVsbCAmJiAhY29udGFpbnNMZWdhbENsYWltKHBvcnQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSkpCi0gICAgICBlcnJvcnMuYWRkKFdTRExfUE9SVCwgcG9ydC5nZXROYW1lKCkpOwotICB9Ci0KLSAgLyogQ3JlYXRlIGZhbHVyZSByZXBvcnQgaWYgYmluZGluZyBjb250YWlucyBpbGxlZ2FsIGNsYWltLgotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5CaW5kaW5nLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoQmluZGluZyBiaW5kaW5nLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBpZiAoYmluZGluZyAhPSBudWxsCi0gICAgICAmJiAhY29udGFpbnNMZWdhbENsYWltKGJpbmRpbmcuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSkpCi0gICAgICBlcnJvcnMuYWRkKFdTRExfQklORElORywgYmluZGluZy5nZXRRTmFtZSgpKTsKLSAgfQotCi0gIC8qIENyZWF0ZSBmYWx1cmUgcmVwb3J0IGlmIHBvcnQgdHlwZSBjb250YWlucyBpbGxlZ2FsIGNsYWltLgotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoamF2YXgud3NkbC5Qb3J0VHlwZSwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KFBvcnRUeXBlIHR5cGUsIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGlmICh0eXBlICE9IG51bGwgJiYgIWNvbnRhaW5zTGVnYWxDbGFpbSh0eXBlLmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpKQotICAgICAgZXJyb3JzLmFkZChXU0RMX1BPUlRUWVBFLCB0eXBlLmdldFFOYW1lKCkpOwotICB9Ci0KLSAgLyogQ3JlYXRlIGZhbHVyZSByZXBvcnQgaWYgb3BlcmF0aW9uIGNvbnRhaW5zIGlsbGVnYWwgY2xhaW0uCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLk9wZXJhdGlvbiwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgIE9wZXJhdGlvbiBvcGVyYXRpb24sCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBpZiAob3BlcmF0aW9uICE9IG51bGwKLSAgICAgICYmICFjb250YWluc0xlZ2FsQ2xhaW0ob3BlcmF0aW9uLmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpKQotICAgICAgZXJyb3JzLmFkZChXU0RMX09QRVJBVElPTiwgb3BlcmF0aW9uLmdldE5hbWUoKSk7Ci0gIH0KLQotICAvKiBDcmVhdGUgZmFsdXJlIHJlcG9ydCBpZiBtZXNzYWdlIGNvbnRhaW5zIGlsbGVnYWwgY2xhaW0uCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLk1lc3NhZ2UsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChNZXNzYWdlIG1lc3NhZ2UsIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGlmIChtZXNzYWdlICE9IG51bGwKLSAgICAgICYmICFjb250YWluc0xlZ2FsQ2xhaW0obWVzc2FnZS5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKSkKLSAgICAgIGVycm9ycy5hZGQoV1NETF9NRVNTQUdFLCBtZXNzYWdlLmdldFFOYW1lKCkpOwotICB9Ci0KLSAgLyogVmFsaWRhdGVzIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHNlZSBvcmcud3NpLnRlc3QucHJvZmlsZS52YWxpZGF0b3IuaW1wbC5CYXNlVmFsaWRhdG9ySW1wbC5Bc3NlcnRpb25Qcm9jZXNzI3ZhbGlkYXRlKG9yZy53c2kudGVzdC5wcm9maWxlLlRlc3RBc3NlcnRpb24sIG9yZy53c2kudGVzdC5wcm9maWxlLnZhbGlkYXRvci5FbnRyeUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IHZhbGlkYXRlKAotICAgIFRlc3RBc3NlcnRpb24gdGVzdEFzc2VydGlvbiwKLSAgICBFbnRyeUNvbnRleHQgZW50cnlDb250ZXh0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotCi0gICAgV1NETFRyYXZlcnNhbCB0cmF2ZXJzYWwgPSBuZXcgV1NETFRyYXZlcnNhbCgpOwotICAgIC8vVmlzaXRvckFkYXB0b3IuYWRhcHQodGhpcyk7Ci0gICAgdHJhdmVyc2FsLnNldFZpc2l0b3IodGhpcyk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0T3BlcmF0aW9uKHRydWUpOwotICAgIHRyYXZlcnNhbC52aXNpdEJpbmRpbmcodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0TWVzc2FnZSh0cnVlKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRQb3J0KHRydWUpOwotICAgIHRyYXZlcnNhbC52aXNpdFBvcnRUeXBlKHRydWUpOwotICAgIHRyYXZlcnNhbC5pZ25vcmVSZWZlcmVuY2VzKCk7Ci0gICAgdHJhdmVyc2FsLmlnbm9yZUltcG9ydCgpOwotICAgIHRyYXZlcnNhbC50cmF2ZXJzZSgoRGVmaW5pdGlvbikgZW50cnlDb250ZXh0LmdldEVudHJ5KCkuZ2V0RW50cnlEZXRhaWwoKSk7Ci0KLSAgICAvLyBjcmVhdGUgZGV0YWlsIG1lc3NhZ2Ugd2l0aCB0aGUgbGlzdCBvZiBlcnJvciBlbGVtZW50cwotICAgIGlmICghZXJyb3JzLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICBmYWlsdXJlRGV0YWlsID0gdGhpcy52YWxpZGF0b3IuY3JlYXRlRmFpbHVyZURldGFpbChlcnJvcnMudG9TdHJpbmcoKSwgZW50cnlDb250ZXh0KTsKLSAgICAgIHJlc3VsdCA9IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEOwotICAgIH0KLQotICAgIGVsc2UgaWYgKCFjb250YWluc0NsYWltcykKLSAgICB7Ci0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX05PVF9BUFBMSUNBQkxFOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXN1bHQgPSBBc3NlcnRpb25SZXN1bHQuUkVTVUxUX1BBU1NFRDsKLQotICAgIHJldHVybiB2YWxpZGF0b3IuY3JlYXRlQXNzZXJ0aW9uUmVzdWx0KHRlc3RBc3NlcnRpb24sIHJlc3VsdCwgZmFpbHVyZURldGFpbCk7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2sgdGhlIGRvY3VtZW50YXRpb24gZWxlbWVudCB3aGV0aGVyIGNvbnRhaW5zIGNvbmZvcm1hbmNlIGNsYWltcy4KLSAgICogUmV0dXJucyB0cnVlIGlmIGRvY3VtZW50YXRpb24gZWxlbWVudCBjb250YWlucyBjb25mb3JtYW5jZSBjbGFpbSB3aXRoCi0gICAqIGlsbGVnYWwgc2NoZW1hIGRlZmluaXRpb24gVVJJLiAKLSAgICogbGVnYWwgaXMgJ2h0dHA6Ly93cy1pLm9yZy9zY2hlbWFzL2NvbmZvcm1hbmNlQ2xhaW0vJwotICAgKiBAcGFyYW0gZWwKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gY29udGFpbnNMZWdhbENsYWltKEVsZW1lbnQgZWwpCi0gIHsKLSAgICBpZiAoZWwgPT0gbnVsbCkKLSAgICAgIHJldHVybiB0cnVlOwotICAgIC8vIGZpbmQgY2xhaW0KLSAgICBlbCA9IFhNTFV0aWxzLmZpbmRDaGlsZEVsZW1lbnQoZWwsIFdTSV9DTEFJTSk7Ci0KLSAgICBpZiAoZWwgIT0gbnVsbCkKLSAgICAgIGNvbnRhaW5zQ2xhaW1zID0gdHJ1ZTsKLQotICAgIHdoaWxlIChlbCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChYTUxVdGlscy5nZXRBdHRyaWJ1dGUoZWwsIEFUVFJfQ0xBSU1fQ09ORk9STVNUTykgPT0gbnVsbAotICAgICAgICB8fCBYTUxVdGlscy5nZXRBdHRyaWJ1dGUoZWwsIEFUVFJfU09BUF9NVVNUVU5ERVJTVEFORCkgIT0gbnVsbCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgZWwgPSBYTUxVdGlscy5maW5kRWxlbWVudChlbCwgV1NJX0NMQUlNKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjEwMS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMDEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjhmMDlkYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjEwMS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyMTAxCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyMTAxIGV4dGVuZHMgQlAyMTAxCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTIxMDEoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMDIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTAyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzNjI3ZDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMDIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjEwMgotICovCi1wdWJsaWMgY2xhc3MgV1NJMjEwMiBleHRlbmRzIEJQMjEwMgotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyMTAyKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTAzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjEwMy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjc1ZjE5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTAzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTIxMDMKLSAqLwotcHVibGljIGNsYXNzIFdTSTIxMDMgZXh0ZW5kcyBCUDIxMDMKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjEwMyhXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjEwNC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMDQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjc0Mjc3OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjEwNC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyMTA0Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyMTA0IGV4dGVuZHMgQlAyMTA0Ci17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTIxMDQoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMDUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTA1LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiYmRkZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMDUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjEwNQotICovCi1wdWJsaWMgY2xhc3MgV1NJMjEwNSBleHRlbmRzIEJQMjEwNQotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyMTA1KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTA3LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjEwNy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzU3NDJmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTA3LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTIxMDcKLSAqLwotcHVibGljIGNsYXNzIFdTSTIxMDcgZXh0ZW5kcyBCUDIxMDcKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjEwNyhXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjEwOC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMDguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQ2YmVhYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjEwOC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyMTA4Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyMTA4IGV4dGVuZHMgQlAyMTA4Ci17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTIxMDgoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMTAuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTEwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3MGNjNGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMTAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjExMAotICovCi1wdWJsaWMgY2xhc3MgV1NJMjExMCBleHRlbmRzIEJQMjExMAotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyMTEwKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTExLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjExMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjkyODZmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTExLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTIxMTEKLSAqLwotcHVibGljIGNsYXNzIFdTSTIxMTEgZXh0ZW5kcyBCUDIxMTEKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjExMShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjExMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMTIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ0MGFiZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjExMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyMTEyCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyMTEyIGV4dGVuZHMgQlAyMTEyCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTIxMTIoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMTMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTEzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjMTE4OTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMTMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjExMwotICovCi1wdWJsaWMgY2xhc3MgV1NJMjExMyBleHRlbmRzIEJQMjExMwotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyMTEzKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTE0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjExNC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjU1YTI0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTE0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTIxMTQKLSAqLwotcHVibGljIGNsYXNzIFdTSTIxMTQgZXh0ZW5kcyBCUDIxMTQKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjExNChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjExNS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMTUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTE2ZWY3YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjExNS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyMTE1Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyMTE1IGV4dGVuZHMgQlAyMTE1Ci17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTIxMTUoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMTYuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTE2LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzMzU4ZTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMTYuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjExNgotICovCi1wdWJsaWMgY2xhc3MgV1NJMjExNiBleHRlbmRzIEJQMjExNgotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyMTE2KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTE3LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjExNy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4N2IzNzdjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTE3LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTIxMTcKLSAqLwotcHVibGljIGNsYXNzIFdTSTIxMTcgZXh0ZW5kcyBCUDIxMTcKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjExNyhXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjExOC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMTguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDZkMzMwNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjExOC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyMTE4Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyMTE4IGV4dGVuZHMgQlAyMTE4Ci17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTIxMTgoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMTkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTE5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0MTZjZTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMTkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjExOQotICovCi1wdWJsaWMgY2xhc3MgV1NJMjExOSBleHRlbmRzIEJQMjExOQotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyMTE5KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTIwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjEyMC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjJlMjA1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTIwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTIxMjAKLSAqLwotcHVibGljIGNsYXNzIFdTSTIxMjAgZXh0ZW5kcyBCUDIxMjAKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjEyMChXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjEyMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMjIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjI5OTRlYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjEyMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyMTIyCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyMTIyIGV4dGVuZHMgQlAyMTIyCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTIxMjIoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMjMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMTIzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0ZjA1YTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIxMjMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjEyMwotICovCi1wdWJsaWMgY2xhc3MgV1NJMjEyMyBleHRlbmRzIEJQMjEyMwotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyMTIzKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMjAxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjIwMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTY0NTdjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMjAxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTIyMDEKLSAqLwotcHVibGljIGNsYXNzIFdTSTIyMDEgZXh0ZW5kcyBCUDIyMDEKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjIwMShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjIwMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIyMDIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWJiNTlmMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjIwMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyMjAyCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyMjAyIGV4dGVuZHMgQlAyMjAyCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTIyMDIoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIyMDguamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyMjA4LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlZDcxMzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTIyMDguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjIwOAotICovCi1wdWJsaWMgY2xhc3MgV1NJMjIwOCBleHRlbmRzIEJQMjIwOAotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyMjA4KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyNDAyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjQwMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMGM1Nzg1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyNDAyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTI0MDIKLSAqLwotcHVibGljIGNsYXNzIFdTSTI0MDIgZXh0ZW5kcyBCUDI0MDIKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjQwMihXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjQwMy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTI0MDMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZhY2Q0Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjQwMy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyNDAzCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyNDAzIGV4dGVuZHMgU1NCUDI0MDMKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjQwMyhXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjQwNC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTI0MDQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWRmYThlOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjQwNC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyNDA0Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyNDA0IGV4dGVuZHMgQlAyNDA0Ci17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTI0MDQoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTI0MDYuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyNDA2LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2ZDQyMGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTI0MDYuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjQwNgotICovCi1wdWJsaWMgY2xhc3MgV1NJMjQwNiBleHRlbmRzIEJQMjQwNgotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyNDA2KFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyNDE2LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjQxNi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzBiZjNmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyNDE2LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTI0MTYKLSAqLwotcHVibGljIGNsYXNzIFdTSTI0MTYgZXh0ZW5kcyBCUDI0MTYKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjQxNihXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjQxNy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTI0MTcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2MyMzgzNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjQxNy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyNDE3Ci0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyNDE3IGV4dGVuZHMgQlAyNDE3Ci17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTI0MTcoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTI3MDAuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyNzAwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5YmJiMzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTI3MDAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJMjcwMAotICovCi1wdWJsaWMgY2xhc3MgV1NJMjcwMCBleHRlbmRzIEJQMjcwMAotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0kyNzAwKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyNzAxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjcwMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzM3ZjUzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0kyNzAxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTI3MDEKLSAqLwotcHVibGljIGNsYXNzIFdTSTI3MDEgZXh0ZW5kcyBCUDI3MDEKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJMjcwMShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjcwMy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTI3MDMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQ2MzcwOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJMjcwMy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0kyNzAzCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0kyNzAzIGV4dGVuZHMgQlAyNzAzCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTI3MDMoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTQyMDAuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0k0MjAwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNDNhN2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTQyMDAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLndzZGw7Ci0KLS8qKgotICogV1NJNDIwMAotICovCi1wdWJsaWMgY2xhc3MgV1NJNDIwMCBleHRlbmRzIEJQNDIwMAotewotCi0gIC8qKgotICAgKiBAcGFyYW0gV1NETFZhbGlkYXRvckltcGwKLSAgICovCi0gIHB1YmxpYyBXU0k0MjAwKFdTRExWYWxpZGF0b3JJbXBsIGltcGwpCi0gIHsKLSAgICBzdXBlcihpbXBsKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0k0MjAxLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJNDIwMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzIzM2Q5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3Byb2ZpbGUvdmFsaWRhdG9yL2ltcGwvd3NkbC9XU0k0MjAxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuaW1wbC53c2RsOwotCi0vKioKLSAqIFdTSTQyMDEKLSAqLwotcHVibGljIGNsYXNzIFdTSTQyMDEgZXh0ZW5kcyBCUDQyMDEKLXsKLQotICAvKioKLSAgICogQHBhcmFtIFdTRExWYWxpZGF0b3JJbXBsCi0gICAqLwotICBwdWJsaWMgV1NJNDIwMShXU0RMVmFsaWRhdG9ySW1wbCBpbXBsKQotICB7Ci0gICAgc3VwZXIoaW1wbCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJNDIwMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcHJvZmlsZS92YWxpZGF0b3IvaW1wbC93c2RsL1dTSTQyMDIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJkOWJhZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9wcm9maWxlL3ZhbGlkYXRvci9pbXBsL3dzZGwvV1NJNDIwMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwud3NkbDsKLQotLyoqCi0gKiBXU0k0MjAyCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0k0MjAyIGV4dGVuZHMgQlA0MjAyCi17Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBXU0RMVmFsaWRhdG9ySW1wbAotICAgKi8KLSAgcHVibGljIFdTSTQyMDIoV1NETFZhbGlkYXRvckltcGwgaW1wbCkKLSAgewotICAgIHN1cGVyKGltcGwpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L0FydGlmYWN0UmVmZXJlbmNlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvQXJ0aWZhY3RSZWZlcmVuY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODk4OTlkZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvQXJ0aWZhY3RSZWZlcmVuY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQ7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50OwotCi0vKioKLSAqIEFuIGFydGlmYWN0IHJlZmVyZW5jZS4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBBcnRpZmFjdFJlZmVyZW5jZSBleHRlbmRzIERvY3VtZW50RWxlbWVudAotewotICAvKioKLSAgICogRWxlbWVudCBuYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9OQU1FID0gV1NJQ29uc3RhbnRzLkVMRU1fQVJUSUZBQ1RfUkVGRVJFTkNFOwotCi0gIC8qKgotICAgKiBRTmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgUU5BTUUgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9SRVBPUlQsIEVMRU1fTkFNRSk7Ci0KLSAgLyoqCi0gICAqIEdldCB0aW1lc3RhbXAuCi0gICAqIEByZXR1cm4gdGltZXN0YW1wLgotICAgKiBAc2VlICNzZXRUaW1lc3RhbXAKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VGltZXN0YW1wKCk7Ci0KLSAgLyoqCi0gICAqIFNldCB0aW1lc3RhbXAuCi0gICAqIEBwYXJhbSB0aW1lc3RhbXAgYSB0aW1lc3RhbXAuCi0gICAqIEBzZWUgI2dldFRpbWVzdGFtcAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VGltZXN0YW1wKFN0cmluZyB0aW1lc3RhbXApOwotCi0gIC8qKgotICAgKiBHZXQgZG9jdW1lbnQgZWxlbWVudC4KLSAgICogQHJldHVybiBkb2N1bWVudCBlbGVtZW50LgotICAgKiBAc2VlICNzZXREb2N1bWVudEVsZW1lbnQKLSAgICovCi0gIHB1YmxpYyBEb2N1bWVudEVsZW1lbnQgZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0KLSAgLyoqCi0gICAqIFNldCBkb2N1bWVudCBlbGVtZW50LgotICAgKiBAcGFyYW0gZG9jdW1lbnRFbGVtZW50IGRvY3VtZW50IGVsZW1lbnQuCi0gICAqIEBwYXJhbSBuYW1lc3BhY2VOYW1lICAgbmFtZXNwYWNlIHByZWZpeC4KLSAgICogQHNlZSAjZ2V0RG9jdW1lbnRFbGVtZW50Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXREb2N1bWVudEVsZW1lbnQoCi0gICAgRG9jdW1lbnRFbGVtZW50IGRvY3VtZW50RWxlbWVudCwKLSAgICBTdHJpbmcgbmFtZXNwYWNlTmFtZSk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvQXNzZXJ0aW9uUmVzdWx0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvQXNzZXJ0aW9uUmVzdWx0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1MTEzZTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L0Fzc2VydGlvblJlc3VsdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5Bc3NlcnRpb25SZXN1bHRzT3B0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUuVGVzdEFzc2VydGlvbjsKLQotLyoqCi0gKiBUZXN0IGFzc2VydGlvbiByZXN1bHQuCi0gKgotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIEFzc2VydGlvblJlc3VsdCBleHRlbmRzIERvY3VtZW50RWxlbWVudAotewotICAvKioKLSAgICogRWxlbWVudCBuYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9OQU1FID0gV1NJQ29uc3RhbnRzLkVMRU1fQVNTRVJUSU9OX1JFU1VMVDsKLQotICAvKioKLSAgICogUU5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIFFOQU1FID0KLSAgICBuZXcgUU5hbWUoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0lfUkVQT1JULCBFTEVNX05BTUUpOwotCi0gIC8qKgotICAgKiBSZXN1bHQgdmFsdWVzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVTVUxUX1BBU1NFRCA9ICJwYXNzZWQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRVNVTFRfRkFJTEVEID0gImZhaWxlZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFU1VMVF9QUkVSRVFfRkFJTEVEID0gInByZXJlcUZhaWxlZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFU1VMVF9NSVNTSU5HX0lOUFVUID0gIm1pc3NpbmdJbnB1dCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFU1VMVF9XQVJOSU5HID0gIndhcm5pbmciOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRVNVTFRfTk9UX0FQUExJQ0FCTEUgPSAibm90QXBwbGljYWJsZSI7Ci0KLSAgLyoqCi0gICAqIEdldCByZXN1bHQuCi0gICAqIEByZXR1cm4gcmVzdWx0LgotICAgKiBAc2VlICNzZXRSZXN1bHQKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVzdWx0KCk7Ci0KLSAgLyoqCi0gICAqIFNldCByZXN1bHQuCi0gICAqIEBwYXJhbSByZXN1bHQgdGhlIHJlc3VsdCB2YWx1ZS4KLSAgICogQHNlZSAjZ2V0UmVzdWx0Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZXN1bHQoU3RyaW5nIHJlc3VsdCk7Ci0KLSAgLyoqCi0gICAqIEdldCBhc3NlcnRpb24uCi0gICAqIEByZXR1cm4gcHJvZmlsZSB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHNlZSAjc2V0QXNzZXJ0aW9uCi0gICAqLwotICBwdWJsaWMgVGVzdEFzc2VydGlvbiBnZXRBc3NlcnRpb24oKTsKLQotICAvKioKLSAgICogU2V0IGFzc2VydGlvbi4KLSAgICogQHBhcmFtIHByb2ZpbGVBc3NlcnRpb24gcHJvZmlsZSB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHNlZSAjZ2V0QXNzZXJ0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRBc3NlcnRpb24oVGVzdEFzc2VydGlvbiBwcm9maWxlQXNzZXJ0aW9uKTsKLQotICAvKioKLSAgICogR2V0IGVudHJ5LgotICAgKiBAcmV0dXJuIGVudHJ5LgotICAgKiBAc2VlICNzZXRFbnRyeQotICAgKi8KLSAgcHVibGljIEVudHJ5IGdldEVudHJ5KCk7Ci0KLSAgLyoqCi0gICAqIFNldCBlbnRyeS4KLSAgICogQHBhcmFtIGVudHJ5IGFuIGVudHJ5LgotICAgKiBAc2VlICNnZXRFbnRyeQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RW50cnkoRW50cnkgZW50cnkpOwotCi0gIC8qKgotICAgKiBHZXQgZmFpbHVyZSBkZXRhaWwgbWVzc2FnZXMuCi0gICAqIEByZXR1cm4gZmFpbHVyZSBkZXRhaWwgbWVzc2FnZXMuCi0gICAqIEBzZWUgI3NldEZhaWx1cmVEZXRhaWxMaXN0Ci0gICAqLwotICBwdWJsaWMgVmVjdG9yIGdldEZhaWx1cmVEZXRhaWxMaXN0KCk7Ci0KLSAgLyoqCi0gICAqIFNldCBmYWlsdXJlIGRldGFpbCBtZXNzYWdlcy4KLSAgICogQHBhcmFtIGZhaWx1cmVEZXRhaWxMaXN0IGZhaWx1cmUgZGV0YWlsIG1lc3NhZ2VzLgotICAgKiBAc2VlICNnZXRGYWlsdXJlRGV0YWlsTGlzdAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RmFpbHVyZURldGFpbExpc3QoVmVjdG9yIGZhaWx1cmVEZXRhaWxMaXN0KTsKLQotICAvKioKLSAgICogR2V0IHdhcm5pbmcgbWVzc2FnZXMuCi0gICAqIEByZXR1cm4gd2FybmluZyBtZXNzYWdlcy4KLSAgICogQHNlZSAjc2V0V2FybmluZ01lc3NhZ2VzCi0gICAqLwotICAvL3B1YmxpYyBWZWN0b3IgZ2V0V2FybmluZ01lc3NhZ2VzKCk7Ci0KLSAgLyoqCi0gICAqIFNldCB3YXJuaW5nIG1lc3NhZ2VzLgotICAgKiBAcGFyYW0gd2FybmluZ01lc3NhZ2VzIHdhcm5pbmcgbWVzc2FnZXMuCi0gICAqIEBzZWUgI2dldFdhcm5pbmdNZXNzYWdlcwotICAgKi8KLSAgLy9wdWJsaWMgdm9pZCBzZXRXYXJuaW5nTWVzc2FnZXMoVmVjdG9yIHdhcm5pbmdNZXNzYWdlcyk7Ci0KLSAgLyoqCi0gICAqIEdldCBhc3NlcnRpb24gcmVzdWx0cyBvcHRpb24uCi0gICAqIEByZXR1cm4gc3NlcnRpb24gcmVzdWx0cyBvcHRpb24uCi0gICAqIEBzZWUgI3NldEFzc2VydGlvblJlc3VsdHNPcHRpb24KLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHRzT3B0aW9uIGdldEFzc2VydGlvblJlc3VsdHNPcHRpb24oKTsKLQotICAvKioKLSAgICogU2V0IGFzc2VydGlvbiByZXN1bHRzIG9wdGlvbi4KLSAgICogQHBhcmFtIGFzc2VydGlvblJlc3VsdHNPcHRpb24gYXNzZXJ0aW9uIHJlc3VsdHMgb3B0aW9uLgotICAgKiBAc2VlICNnZXRBc3NlcnRpb25SZXN1bHRzT3B0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRBc3NlcnRpb25SZXN1bHRzT3B0aW9uKEFzc2VydGlvblJlc3VsdHNPcHRpb24gYXNzZXJ0aW9uUmVzdWx0c09wdGlvbik7Ci0KLSAgLyoqCi0gICAqIEdldCBwcmVyZXEgZmFpbGVkIGxpc3QuCi0gICAqIEByZXR1cm4gcHJlcmVxIGZhaWxlZCBsaXN0LgotICAgKiBAc2VlICNzZXRQcmVyZXFGYWlsZWRMaXN0Ci0gICAqLwotICBwdWJsaWMgUHJlcmVxRmFpbGVkTGlzdCBnZXRQcmVyZXFGYWlsZWRMaXN0KCk7Ci0KLSAgLyoqCi0gICAqIFNldCBwcmVyZXEgZmFpbGVkIGxpc3QuCi0gICAqIEBwYXJhbSBwcmVyZXFGYWlsZWRMaXN0IHByZXJlcSBmYWlsZWQgbGlzdC4KLSAgICogQHNlZSAjZ2V0UHJlcmVxRmFpbGVkTGlzdAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UHJlcmVxRmFpbGVkTGlzdChQcmVyZXFGYWlsZWRMaXN0IHByZXJlcUZhaWxlZExpc3QpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L0J1aWxkUmVwb3J0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvQnVpbGRSZXBvcnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDlkYmMyZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvQnVpbGRSZXBvcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLQotLyoqCi0gKiBUaGlzIGludGVyZmFjZSBpcyB1c2VkIHRvIGJ1aWxkIHRoZSBQcm9maWxlIHJlcG9ydC4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIEJ1aWxkUmVwb3J0Ci17Ci0gIC8qKgotICAgKiBQcmVyZXEgdHlwZSAtIGVudHJ5LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJFUkVRX1RZUEVfRU5UUlkgPSAiZW50cnkiOwotCi0gIC8qKgotICAgKiBQcmVyZXEgdHlwZSAtIGVudHJ5IGNvbnRhaW5lci4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBSRVJFUV9UWVBFX0VOVFJZX0NPTlRBSU5FUiA9ICJlbnRyeUNvbnRhaW5lciI7Ci0KLSAgLyoqCi0gICAqIFN0YXJ0IGN1cnJlbnQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSByZXBvcnRBcnRpZmFjdCBjdXJyZW50IHJlcG9ydCBhcnRpZmFjdC4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gdGhlIGJhc2UgV1MtSSBleGNlcHRpb24uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDdXJyZW50QXJ0aWZhY3QoUmVwb3J0QXJ0aWZhY3QgcmVwb3J0QXJ0aWZhY3QpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLQotICAvKioKLSAgICogQWRkIGFydGlmYWN0IHJlZmVyZXJlbmNlLgotICAgKiBAcGFyYW0gYXJ0aWZhY3RSZWZlcmVuY2UgYXJ0aWZhY3QgcmVmZXJlbmNlLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiB0aGUgYmFzZSBXUy1JIGV4Y2VwdGlvbi4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEFydGlmYWN0UmVmZXJlbmNlKEFydGlmYWN0UmVmZXJlbmNlIGFydGlmYWN0UmVmZXJlbmNlKQotICAgIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIEVuZCBjdXJyZW50IGFydGlmYWN0LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiB0aGUgYmFzZSBXUy1JIGV4Y2VwdGlvbi4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGVuZEN1cnJlbnRBcnRpZmFjdCgpIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIFN0YXJ0IGN1cnJlbnQgZW50cnkuCi0gICAqIEBwYXJhbSBlbnRyeSB0aGUgY3VycmVudCBlbnRyeS4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gdGhlIGJhc2UgV1MtSSBleGNlcHRpb24uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDdXJyZW50RW50cnkoRW50cnkgZW50cnkpIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIFN0YXJ0IGN1cnJlbnQgZW50cnkuCi0gICAqIEBwYXJhbSBlbnRyeSB0aGUgY3VycmVudCBlbnRyeS4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gdGhlIGJhc2UgV1MtSSBleGNlcHRpb24uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDdXJyZW50RW52ZWxvcGVFbnRyeShFbnRyeSBlbnRyeSkgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLSAgLyoqCi0gICAqIEVuZCBjdXJyZW50IGVudHJ5LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiB0aGUgYmFzZSBXUy1JIGV4Y2VwdGlvbi4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGVuZEN1cnJlbnRFbnRyeSgpIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIEFkZCB0ZXN0IGFzc2VydGlvbiByZXN1bHQuCi0gICAqIEBwYXJhbSBhc3NlcnRpb25SZXN1bHQgdGVzdCBhc3NlcnRpb24gcmVzdWx0LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiB0aGUgYmFzZSBXUy1JIGV4Y2VwdGlvbi4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEFzc2VydGlvblJlc3VsdChBc3NlcnRpb25SZXN1bHQgYXNzZXJ0aW9uUmVzdWx0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgYXNzZXJ0aW9uIHJlc3VsdCBmb3IgYSBzcGVjaWZpYyB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHBhcmFtIGFzc2VydGlvbklkIHRoZSB0ZXN0IGFzc2VydGlvbiBJRC4KLSAgICogQHJldHVybiAgdGhlIGFzc2VydGlvbiByZXN1bHQgZm9yIHRoZSBzcGVjaWZpZWQgdGVzdCBhc3NlcnRpb24gSUQuCi0gICAqICAgICAgICAgIElmIGFuIGFzc2VydGlvbiByZXN1bHQgd2FzIG5vdCBmb3VuZCwgdGhlbiBudWxsIGlzIHJldHVybmVkLgotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCBnZXRBc3NlcnRpb25SZXN1bHQoU3RyaW5nIGFzc2VydGlvbklkKTsKLQotICAvKioKLSAgICogQ3JlYXRlIGFzc2VydGlvbiByZXN1bHQuCi0gICAqIEByZXR1cm4gbmV3bHkgY3JlYXRlZCBhc3NlcnRpb24gcmVzdWx0LgotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCBjcmVhdGVBc3NlcnRpb25SZXN1bHQoKTsKLQotICAvKioKLSAgICogQ3JlYXRlIGVudHJ5LgotICAgKiBAcmV0dXJuIG5ld2x5IGNyZWF0ZWQgZW50cnkuCi0gICAqLwotICBwdWJsaWMgRW50cnkgY3JlYXRlRW50cnkoKTsKLQotICAvKioKLSAgICogQ3JlYXRlIGVudHJ5IGNvbnRhaW5lci4KLSAgICogQHJldHVybiBuZXdseSBjcmVhdGVkIGVudHJ5IGNvbnRhaW5lci4KLSAgICovCi0gIHB1YmxpYyBFbnRyeUNvbnRhaW5lciBjcmVhdGVFbnRyeUNvbnRhaW5lcigpOwotCi0gIC8qKgotICAgKiBDcmVhdGUgYXJ0aWZhY3QuCi0gICAqIEByZXR1cm4gbmV3bHkgY3JlYXRlZCBhcnRpZmFjdC4KLSAgICovCi0gIHB1YmxpYyBSZXBvcnRBcnRpZmFjdCBjcmVhdGVBcnRpZmFjdCgpOwotCi0gIC8qKgotICAgKiBDcmVhdGUgZmFpbHVyZSBkZXRhaWwuCi0gICAqIEByZXR1cm4gbmV3bHkgY3JlYXRlZCBmYWlsdXJlIGRldGFpbC4KLSAgICovCi0gIHB1YmxpYyBGYWlsdXJlRGV0YWlsIGNyZWF0ZUZhaWx1cmVEZXRhaWwoKTsKLQotICAvKioKLSAgICogU2V0IHR5cGUgb2YgcHJlcmVxIHByb2Nlc3NpbmcgLSBlaXRoZXIgZW50cnkgb3IgZG9jdW1lbnQuCi0gICAqIEBwYXJhbSBwcmVyZXFUeXBlIHR5cGUgb2YgcHJlcmVxIHByb2Nlc3NpbmcgLSBlaXRoZXIgZW50cnkgb3IgZG9jdW1lbnQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRQcmVyZXFUeXBlKFN0cmluZyBwcmVyZXFUeXBlKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9FbnRyeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L0VudHJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5Y2Q4OWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L0VudHJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydDsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuRW50cnlUeXBlOwotCi0vKioKLSAqIFRlc3QgYXNzZXJ0aW9uIHRhcmdldC4KLSAqCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgRW50cnkgZXh0ZW5kcyBFbnRyeVJlc3VsdCwgRG9jdW1lbnRFbGVtZW50Ci17Ci0gIC8qKgotICAgKiBFbGVtZW50IG5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX05BTUUgPSBXU0lDb25zdGFudHMuRUxFTV9FTlRSWTsKLQotICAvKioKLSAgICogUU5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIFFOQU1FID0KLSAgICBuZXcgUU5hbWUoV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0lfUkVQT1JULCBFTEVNX05BTUUpOwotCi0gIC8qKgotICAgKiBHZXQgYXNzZXJ0aW9uIHJlc3VsdHMgb3B0aW9uLgotICAgKi8KLSAgLy9wdWJsaWMgQXNzZXJ0aW9uUmVzdWx0c09wdGlvbiBnZXRBc3NlcnRpb25SZXN1bHRzT3B0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBhc3NlcnRpb24gcmVzdWx0cyBvcHRpb24uCi0gICAqLwotICAvL3B1YmxpYyB2b2lkIHNldEFzc2VydGlvblJlc3VsdHNPcHRpb24oQXNzZXJ0aW9uUmVzdWx0c09wdGlvbiBhc3NlcnRpb25SZXN1bHRzT3B0aW9uKTsKLQotICAvKioKLSAgICogR2V0IGVudHJ5IHR5cGUuCi0gICAqIEByZXR1cm4gZW50cnkgdHlwZS4KLSAgICogQHNlZSAjc2V0RW50cnlUeXBlCi0gICAqLwotICBwdWJsaWMgRW50cnlUeXBlIGdldEVudHJ5VHlwZSgpOwotCi0gIC8qKgotICAgKiBTZXQgZW50cnkgdHlwZS4KLSAgICogQHBhcmFtIGVudHJ5VHlwZSBlbnRyeSB0eXBlLgotICAgKiBAc2VlICNnZXRFbnRyeVR5cGUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEVudHJ5VHlwZShFbnRyeVR5cGUgZW50cnlUeXBlKTsKLQotICAvKioKLSAgICogR2V0IGFydGlmYWN0IG5hbWUuCi0gICAqIEByZXR1cm4gYXJ0aWZhY3QgbmFtZS4KLSAgICogQHNlZSAjc2V0QXJ0aWZhY3ROYW1lCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEFydGlmYWN0TmFtZSgpOwotCi0gIC8qKgotICAgKiBTZXQgYXJ0aWZhY3QgbmFtZS4KLSAgICogQHBhcmFtIGFydGlmYWN0TmFtZSBhcnRpZmFjdCBuYW1lLgotICAgKiBAc2VlICNnZXRBcnRpZmFjdE5hbWUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEFydGlmYWN0TmFtZShTdHJpbmcgYXJ0aWZhY3ROYW1lKTsKLQotICAvKioKLSAgICogR2V0IHJlZmVyZW5jZSBJRC4KLSAgICogQHJldHVybiByZWZlcmVuY2UgSUQuCi0gICAqIEBzZWUgI3NldFJlZmVyZW5jZUlECi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFJlZmVyZW5jZUlEKCk7Ci0KLSAgLyoqCi0gICAqIFNldCByZWZlcmVuY2UgSUQuCi0gICAqIEBwYXJhbSByZWZlcmVuY2VJRCByZWZlcmVuY2VJRC4KLSAgICogQHNlZSAjZ2V0UmVmZXJlbmNlSUQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFJlZmVyZW5jZUlEKFN0cmluZyByZWZlcmVuY2VJRCk7Ci0KLSAgLyoqCi0gICAqIEdldCBwYXJlbnQgZWxlbWVudCBuYW1lLgotICAgKiBAcmV0dXJuIHBhcmVudCBlbGVtZW50IG5hbWUuCi0gICAqIEBzZWUgI3NldFBhcmVudEVsZW1lbnROYW1lCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFBhcmVudEVsZW1lbnROYW1lKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBwYXJlbnQgZWxlbWVudCBuYW1lLgotICAgKiBAcGFyYW0gcGFyZW50RWxlbWVudE5hbWUgcGFyZW50IGVsZW1lbnQgbmFtZS4KLSAgICogQHNlZSAjZ2V0UGFyZW50RWxlbWVudE5hbWUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFBhcmVudEVsZW1lbnROYW1lKFN0cmluZyBwYXJlbnRFbGVtZW50TmFtZSk7Ci0KLSAgLyoqCi0gICAqIEdldCBlbnRyeSBkZXRhaWwuCi0gICAqIEByZXR1cm4gZW50cnkgZGV0YWlsLgotICAgKiBAc2VlICNzZXRFbnRyeURldGFpbAotICAgKi8KLSAgcHVibGljIE9iamVjdCBnZXRFbnRyeURldGFpbCgpOwotCi0gIC8qKgotICAgKiBTZXQgZW50cnkgZGV0YWlsLgotICAgKiBAcGFyYW0gZGV0YWlsIGVudHJ5IGRldGFpbC4KLSAgICogQHNlZSAjZ2V0RW50cnlEZXRhaWwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEVudHJ5RGV0YWlsKE9iamVjdCBkZXRhaWwpOwotCi0gIC8qKgotICAgKiBHZXQgZW50cnkgY29udGFpbmVyLgotICAgKiBAcmV0dXJuIGVudHJ5IGNvbnRhaW5lci4KLSAgICogQHNlZSAjc2V0RW50cnlDb250YWluZXIKLSAgICovCi0gIHB1YmxpYyBFbnRyeUNvbnRhaW5lciBnZXRFbnRyeUNvbnRhaW5lcigpOwotCi0gIC8qKgotICAgKiBTZXQgZW50cnkgY29udGFpbmVyLgotICAgKiBAcGFyYW0gZW50cnlDb250YWluZXIgZW50cnkgY29udGFpbmVyLgotICAgKiBAc2VlICNnZXRFbnRyeUNvbnRhaW5lcgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RW50cnlDb250YWluZXIoRW50cnlDb250YWluZXIgZW50cnlDb250YWluZXIpOwotCi0gIC8qKgotICAgKiBHZXQgc3RhcnQgZWxlbWVudCBzdHJpbmcuCi0gICAqIEBwYXJhbSBuYW1lc3BhY2VOYW1lIG5hbWVzcGFjZSBwcmVmaXguCi0gICAqIEBwYXJhbSBzaG93TG9nRW50cnkgc2hvdyBsb2cgZW50cnkgb3B0aW9uLgotICAgKiBAcmV0dXJuIHN0YXJ0IFhNTCBlbGVtZW50IHN0cmluZy4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U3RhcnRYTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUsIGJvb2xlYW4gc2hvd0xvZ0VudHJ5KTsKLQotICAvKioKLSAgICogR2V0IHN0YXJ0IGVsZW1lbnQgc3RyaW5nLgotICAgKiBAcGFyYW0gbmFtZXNwYWNlTmFtZSBuYW1lc3BhY2UgcHJlZml4LgotICAgKiBAcGFyYW0gc2hvd0xvZ0VudHJ5IHNob3cgbG9nIGVudHJ5IG9wdGlvbi4KLSAgICogQHJldHVybiBzdGFydCBYTUwgZWxlbWVudCBzdHJpbmcuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFN0YXJ0WE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lLCBib29sZWFuIHNob3dMb2dFbnRyeSwgYm9vbGVhbiBlbnZlbG9wZUFydGlmYWN0VHlwZSk7Ci0gIC8qKgotICAgKiBHZXQgZW5kIGVsZW1lbnQgc3RyaW5nLgotICAgKiBAcGFyYW0gbmFtZXNwYWNlTmFtZSBuYW1lc3BhY2UgcHJlZml4LgotICAgKiBAcmV0dXJuIGVuZCBYTUwgZWxlbWVudCBzdHJpbmcuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEVuZFhNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvRW50cnlDb250YWluZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9FbnRyeUNvbnRhaW5lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OTkxZTE1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9FbnRyeUNvbnRhaW5lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydDsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBjb250YWluZXIgd2hpY2ggaGFzIG9uZSBvciBtb3JlIGVudHJpZXMuCi0gKiBGb3IgZXhhbXBsZSwgYSBXU0RMIGRvY3VtZW50IGNvbnRhaW5zIG9uZSBvciBtb3JlIGVsZW1lbnRzLgotICogCi0gKiBAYXV0aG9yIFBldGVyICBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKiBAdmVyc2lvbiAxLjAuMQotICovCi1wdWJsaWMgaW50ZXJmYWNlIEVudHJ5Q29udGFpbmVyIGV4dGVuZHMgRW50cnlSZXN1bHQKLXsKLSAgLyoqCi0gICAqIEdldCBjb250YWluZXIgaWQuCi0gICAqIEByZXR1cm4gY29udGFpbmVyIGlkLgotICAgKiBAc2VlICNzZXRJZAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRJZCgpOwotCi0gIC8qKgotICAgKiBTZXQgY29udGFpbmVyIGlkLgotICAgKiBAcGFyYW0gaWQgY29udGFpbmVyIGlkLgotICAgKiBAc2VlICNnZXRJZAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0SWQoU3RyaW5nIGlkKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9FbnRyeVJlc3VsdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L0VudHJ5UmVzdWx0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3YTRmNTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L0VudHJ5UmVzdWx0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0OwotCi1pbXBvcnQgamF2YS51dGlsLlRyZWVNYXA7Ci0KLS8qKgotICogUmVzdWx0IGZvciBhIHNwZWNpZmljIHRlc3QgYXNzZXJ0aW9uLgotICogCi0gKiBAYXV0aG9yIFBldGVyICBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKiBAdmVyc2lvbiAxLjAuMQotICovCi1wdWJsaWMgaW50ZXJmYWNlIEVudHJ5UmVzdWx0Ci17Ci0gIC8qKgotICAgKiBBZGQgYXNzZXJ0aW9uIHJlc3VsdC4KLSAgICogQHBhcmFtIGFzc2VydGlvblJlc3VsdCBhc3NlcnRpb24gcmVzdWx0LgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkQXNzZXJ0aW9uUmVzdWx0KEFzc2VydGlvblJlc3VsdCBhc3NlcnRpb25SZXN1bHQpOwotCi0gIC8qKgotICAgKiBHZXQgYXNzZXJ0aW9uIHJlc3VsdHMuCi0gICAqIEByZXR1cm4gYXNzZXJ0aW9uIHJlc3VsdHMuCi0gICAqLwotICBwdWJsaWMgVHJlZU1hcCBnZXRBc3NlcnRpb25SZXN1bHRMaXN0KCk7Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgYXNzZXJ0aW9uIHJlc3VsdCBmb3IgYSBzcGVjaWZpYyB0ZXN0IGFzc2VydGlvbi4KLSAgICogQHBhcmFtIGFzc2VydGlvbklkIHRlc3QgYXNzZXJ0aW9uIGlkLgotICAgKiBAcmV0dXJuIHRoZSBhc3NlcnRpb24gcmVzdWx0IGZvciB0aGUgc3BlY2lmaWVkIHRlc3QgYXNzZXJ0aW9uIElELgotICAgKiAgICAgICAgIElmIGFuIGFzc2VydGlvbiByZXN1bHQgd2FzIG5vdCBmb3VuZCwgdGhlbiBudWxsIGlzIHJldHVybmVkLgotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCBnZXRBc3NlcnRpb25SZXN1bHQoU3RyaW5nIGFzc2VydGlvbklkKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9GYWlsdXJlRGV0YWlsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvRmFpbHVyZURldGFpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzhhY2IzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9GYWlsdXJlRGV0YWlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0OwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLmRvbS5FbGVtZW50TG9jYXRpb247Ci0KLS8qKgotICogRmFpbHVyZSBkZXRhaWwuCi0gKiAKLSAqIEBhdXRob3IgUGV0ZXIgIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgRmFpbHVyZURldGFpbCBleHRlbmRzIERvY3VtZW50RWxlbWVudAotewotICAvKioKLSAgICogRWxlbWVudCBuYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9OQU1FID0gV1NJQ29uc3RhbnRzLkVMRU1fRkFJTFVSRV9ERVRBSUw7Ci0KLSAgLyoqCi0gICAqIFFOYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBRTkFNRSA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NJX1JFUE9SVCwgRUxFTV9OQU1FKTsKLQotICAvKioKLSAgICogR2V0IGZhaWx1cmUgZGV0YWlsIG1lc3NhZ2UuCi0gICAqIEByZXR1cm4gZmFpbHVyZSBkZXRhaWwgbWVzc2FnZS4KLSAgICogQHNlZSAjc2V0RmFpbHVyZU1lc3NhZ2UKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RmFpbHVyZU1lc3NhZ2UoKTsKLQotICAvKioKLSAgICogU2V0IGZhaWx1cmUgZGV0YWlsIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBmYWlsdXJlTWVzc2FnZSBmYWlsdXJlIGRldGFpbCBtZXNzYWdlLgotICAgKiBAc2VlICNnZXRGYWlsdXJlTWVzc2FnZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RmFpbHVyZU1lc3NhZ2UoU3RyaW5nIGZhaWx1cmVNZXNzYWdlKTsKLQotICAvKioKLSAgICogR2V0IHJlZmVyZW5jZSB0eXBlLgotICAgKiBAcmV0dXJuIHJlZmVyZW5jZSB0eXBlLgotICAgKiBAc2VlICNzZXRSZWZlcmVuY2VUeXBlCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFJlZmVyZW5jZVR5cGUoKTsKLQotICAvKioKLSAgICogU2V0IHJlZmVyZW5jZSB0eXBlLgotICAgKiBAcGFyYW0gcmVmZXJlbmNlVHlwZSByZWZlcmVuY2UgdHlwZS4KLSAgICogQHNlZSAjZ2V0UmVmZXJlbmNlVHlwZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UmVmZXJlbmNlVHlwZShTdHJpbmcgcmVmZXJlbmNlVHlwZSk7Ci0KLSAgLyoqCi0gICAqIEdldCByZWZlcmVuY2UgSUQuCi0gICAqIEByZXR1cm4gcmVmZXJlbmNlIElELgotICAgKiBAc2VlICNzZXRSZWZlcmVuY2VJRG4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVmZXJlbmNlSUQoKTsKLQotICAvKioKLSAgICogU2V0IHJlZmVyZW5jZSBJRC4KLSAgICogQHBhcmFtIHJlZmVyZW5jZUlEIHJlZmVyZW5jZSBJRC4KLSAgICogQHNlZSAjZ2V0UmVmZXJlbmNlSUQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFJlZmVyZW5jZUlEbihTdHJpbmcgcmVmZXJlbmNlSUQpOwotCi0gIC8qKgotICAgKiBHZXQgZWxlbWVudCBsb2NhdGlvbi4KLSAgICogQHJldHVybiBlbGVtZW50IGxvY2F0aW9uLgotICAgKiBAc2VlICNzZXRFbGVtZW50TG9jYXRpb24KLSAgICovCi0gIHB1YmxpYyBFbGVtZW50TG9jYXRpb24gZ2V0RWxlbWVudExvY2F0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBlbGVtZW50IGxvY2F0aW9uLgotICAgKiBAcGFyYW0gZWxlbWVudExvY2F0aW9uIGVsZW1lbnQgbG9jYXRpb24uCi0gICAqIEBzZWUgI2dldEVsZW1lbnRMb2NhdGlvbgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RWxlbWVudExvY2F0aW9uKEVsZW1lbnRMb2NhdGlvbiBlbGVtZW50TG9jYXRpb24pOwotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvUHJlcmVxRmFpbGVkTGlzdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L1ByZXJlcUZhaWxlZExpc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODEwNTlkMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvUHJlcmVxRmFpbGVkTGlzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydDsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQ7Ci0KLS8qKgotICogVGhpcyBpbnRlcmZhY2UgaXMgdXNlZCB0byBtYWludGFpbiBhbmQgYWNjZXNzIHRoZSBQcmVyZXF1aXNpdGUgRmFpbGVkIExpc3QuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgUHJlcmVxRmFpbGVkTGlzdCBleHRlbmRzIERvY3VtZW50RWxlbWVudAotewotICAvKioKLSAgICAqIEVsZW1lbnQgbmFtZS4KLSAgICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX05BTUUgPSBXU0lDb25zdGFudHMuRUxFTV9QUkVSRVFfRkFJTEVEX0xJU1Q7Ci0KLSAgLyoqCi0gICAqIFFOYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBRTkFNRSA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NJX1JFUE9SVCwgRUxFTV9OQU1FKTsKLQotICAvKioKLSAgICogQWRkIHRlc3QgYXNzZXJ0aW9uIElELgotICAgKiBAcGFyYW0gYXNzZXJ0aW9uSUQgdGVzdCBhc3NlcnRpb24gSUQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRUZXN0QXNzZXJ0aW9uSUQoU3RyaW5nIGFzc2VydGlvbklEKTsKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L1JlcG9ydC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L1JlcG9ydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjBhZDUxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9SZXBvcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0OwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuV1NJRG9jdW1lbnQ7Ci0KLS8qKgotICogQ29uZm9ybWFuY2UgdGVzdCByZXBvcnQuCi0gKgotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIFJlcG9ydCBleHRlbmRzIFdTSURvY3VtZW50LCBCdWlsZFJlcG9ydAotewotICAvKioKLSAgICogRWxlbWVudCBuYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9OQU1FID0gV1NJQ29uc3RhbnRzLkVMRU1fUkVQT1JUOwotCi0gIC8qKgotICAgKiBRTmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgUU5BTUUgPQotICAgIG5ldyBRTmFtZShXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9SRVBPUlQsIEVMRU1fTkFNRSk7Ci0KLSAgLyoqCi0gICAqIEdldCByZXBvcnQgY29udGV4dC4KLSAgICogQHJldHVybiByZXBvcnQgY29udGV4dC4KLSAgICogQHNlZSAjc2V0UmVwb3J0Q29udGV4dAotICAgKi8KLSAgcHVibGljIFJlcG9ydENvbnRleHQgZ2V0UmVwb3J0Q29udGV4dCgpOwotCi0gIC8qKgotICAgKiBTZXQgcmVwb3J0IGNvbnRleHQuCi0gICAqIEBwYXJhbSByZXBvcnRDb250ZXh0IHJlcG9ydCBjb250ZXh0LgotICAgKiBAc2VlICNnZXRSZXBvcnRDb250ZXh0Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZXBvcnRDb250ZXh0KFJlcG9ydENvbnRleHQgcmVwb3J0Q29udGV4dCk7Ci0KLSAgLyoqCi0gICAqIEdldCBjdXJyZW50IGFydGlmYWN0LgotICAgKiBAcmV0dXJuIGN1cnJlbnQgYXJ0aWZhY3QuCi0gICAqLwotICBwdWJsaWMgUmVwb3J0QXJ0aWZhY3QgZ2V0Q3VycmVudEFydGlmYWN0KCk7Ci0KLSAgLyoqCi0gICAqIEdldCBjdXJyZW50IGVudHJ5LgotICAgKiBAcmV0dXJuIGN1cnJlbnQgZW50cnkuCi0gICAqLwotICBwdWJsaWMgRW50cnkgZ2V0Q3VycmVudEVudHJ5KCk7Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBnZXRFbnRyaWVzLgotICAgKiBAcmV0dXJuIGVudHJ5IGxpc3QuCi0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRFbnRyaWVzKCk7Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBnZXRBcnRpZmFjdHMuCi0gICAqIEByZXR1cm4gYXJ0aWZhY3RzLgotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0QXJ0aWZhY3RzKCk7Ci0KLSAgLyoqCi0gICAqIEdldCBzdGFydCBlbGVtZW50IHN0cmluZy4KLSAgICogQHBhcmFtIG5hbWVzcGFjZU5hbWUgbmFtZXNwYWNlIHByZWZpeAotICAgKiBAcmV0dXJuIHN0YXJ0IGVsZW1lbnQgc3RyaW5nLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTdGFydFhNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSk7Ci0KLSAgLyoqCi0gICAqIEdldCBlbmQgZWxlbWVudCBzdHJpbmcuCi0gICAqIEBwYXJhbSBuYW1lc3BhY2VOYW1lIG5hbWVzcGFjZSBwcmVmaXgKLSAgICogQHJldHVybiBlbmQgZWxlbWVudCBzdHJpbmcuIAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRFbmRYTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpOwotCi0gIC8qKgotICAgKiBHZXQgZXJyb3IgWE1MIHN0cmluZy4KLSAgICogQHBhcmFtIG5hbWVzcGFjZU5hbWUgbmFtZXNwYWNlIHByZWZpeC4KLSAgICogQHBhcmFtIGVycm9yRGV0YWlsIGFuIGVycm9yIGRldGFpbC4KLSAgICogQHJldHVybiBlcnJvciBYTUwgc3RyaW5nLiAKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RXJyb3JYTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUsIFN0cmluZyBlcnJvckRldGFpbCk7Ci0KLSAgLyoqCi0gICAqIEdldCBzdW1tYXJ5IHJlc3VsdC4gCi0gICAqIEByZXR1cm4gc3VtbWFyeSByZXN1bHQuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFN1bW1hcnlSZXN1bHQoKTsKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L1JlcG9ydEFydGlmYWN0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvUmVwb3J0QXJ0aWZhY3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGExZmI5Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvUmVwb3J0QXJ0aWZhY3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVHJlZU1hcDsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuQXJ0aWZhY3RUeXBlOwotCi0vKioKLSAqIFJlcG9ydCBhcnRpZmFjdC4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBSZXBvcnRBcnRpZmFjdCBleHRlbmRzIERvY3VtZW50RWxlbWVudAotewotICAvKioKLSAgICogRWxlbWVudCBuYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9OQU1FID0gV1NJQ29uc3RhbnRzLkVMRU1fQVJUSUZBQ1Q7Ci0KLSAgLyoqCi0gICAqIFFOYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBRTkFNRSA9Ci0gICAgbmV3IFFOYW1lKFdTSUNvbnN0YW50cy5OU19VUklfV1NJX1JFUE9SVCwgRUxFTV9OQU1FKTsKLQotICAvKioKLSAgICogR2V0IGFydGlmYWN0IHR5cGUuCi0gICAqIEByZXR1cm4gYXJ0aWZhY3QgdHlwZS4KLSAgICogQHNlZSAjc2V0VHlwZQotICAgKi8KLSAgcHVibGljIEFydGlmYWN0VHlwZSBnZXRUeXBlKCk7Ci0KLSAgLyoqCi0gICAqIFNldCBhcnRpZmFjdCB0eXBlLgotICAgKiBAcGFyYW0gYXJ0aWZhY3RUeXBlIGFydGlmYWN0IHR5cGUuCi0gICAqIEBzZWUgI2dldFR5cGUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFR5cGUoQXJ0aWZhY3RUeXBlIGFydGlmYWN0VHlwZSk7Ci0KLSAgLyoqCi0gICAqIEFkZCBlbnRyeS4KLSAgICogQHBhcmFtIGVudHJ5IGFuIGVudHJ5LgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkRW50cnkoRW50cnkgZW50cnkpOwotCi0gIC8qKgotICAgKiBHZXQgZW50cnkgbGlzdC4KLSAgICogQHJldHVybiBlbnRyeSBsaXN0LgotICAgKi8KLSAgcHVibGljIFRyZWVNYXAgZ2V0RW50cnlMaXN0KCk7Ci0KLSAgLyoqCi0gICAqIEdldCBzdGFydCBlbGVtZW50IHN0cmluZy4KLSAgICogQHBhcmFtIG5hbWVzcGFjZU5hbWUgbmFtZXNwYWNlIHByZWZpeC4KLSAgICogQHJldHVybiBzdGFydCBlbGVtZW50IHN0cmluZy4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U3RhcnRYTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpOwotCi0gIC8qKgotICAgKiBHZXQgZW5kIGVsZW1lbnQgc3RyaW5nLiAKLSAgICogQHBhcmFtIG5hbWVzcGFjZU5hbWUgbmFtZXNwYWNlIHByZWZpeC4KLSAgICogQHJldHVybiBlbmQgZWxlbWVudCBzdHJpbmcuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEVuZFhNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvUmVwb3J0Q29udGV4dC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L1JlcG9ydENvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDY1MDdiMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvUmVwb3J0Q29udGV4dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5BbmFseXplcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS5Qcm9maWxlQXNzZXJ0aW9uczsKLQotLyoqCi0gKiBSZXBvcnQgY29udGV4dC4KLSAqCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBSZXBvcnRDb250ZXh0Ci17Ci0gIC8qKgotICAgKiBSZXBvcnQgdGl0bGUuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIHJlcG9ydFRpdGxlID0gV1NJQ29uc3RhbnRzLkRFRkFVTFRfUkVQT1JUX1RJVExFOwotCi0gIC8qKgotICAgKiBQcm9maWxlIGRlZmluaXRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgUHJvZmlsZUFzc2VydGlvbnMgcHJvZmlsZUFzc2VydGlvbnM7Ci0KLSAgLyoqCi0gICAqIEFuYWx5emVyLgotICAgKi8KLSAgcHJvdGVjdGVkIEFuYWx5emVyIGFuYWx5emVyOwotCi0gIC8qKgotICAgKiBDcmVhdGUgcmVwb3J0IGNvbnRleHQuCi0gICAqIEBwYXJhbSByZXBvcnRUaXRsZSByZXBvcnQgdGl0bGUuCi0gICAqIEBwYXJhbSBwcm9maWxlQXNzZXJ0aW9ucyBwcm9maWxlIHRlc3QgYXNzZXJ0aW9ucy4KLSAgICogQHBhcmFtIGFuYWx5emVyIGFuIEFuYWx5emVyIG9iamVjdC4KLSAgKi8KLSAgcHVibGljIFJlcG9ydENvbnRleHQoCi0gICAgU3RyaW5nIHJlcG9ydFRpdGxlLAotICAgIFByb2ZpbGVBc3NlcnRpb25zIHByb2ZpbGVBc3NlcnRpb25zLAotICAgIEFuYWx5emVyIGFuYWx5emVyKQotICB7Ci0gICAgdGhpcy5yZXBvcnRUaXRsZSA9IHJlcG9ydFRpdGxlOwotICAgIHRoaXMucHJvZmlsZUFzc2VydGlvbnMgPSBwcm9maWxlQXNzZXJ0aW9uczsKLSAgICB0aGlzLmFuYWx5emVyID0gYW5hbHl6ZXI7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHJlcG9ydCB0aXRsZS4KLSAgICogQHJldHVybiByZXBvcnQgdGl0bGUuCi0gICAqIEBzZWUgI3NldFJlcG9ydFRpdGxlCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFJlcG9ydFRpdGxlKCkKLSAgewotICAgIHJldHVybiB0aGlzLnJlcG9ydFRpdGxlOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldCByZXBvcnQgdGl0bGUuCi0gICAqIEBwYXJhbSByZXBvcnRUaXRsZSByZXBvcnQgdGl0bGUuCi0gICAqIEBzZWUgI2dldFJlcG9ydFRpdGxlCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZXBvcnRUaXRsZShTdHJpbmcgcmVwb3J0VGl0bGUpCi0gIHsKLSAgICB0aGlzLnJlcG9ydFRpdGxlID0gcmVwb3J0VGl0bGU7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHByb2ZpbGUgZGVmaW5pdGlvbi4KLSAgICogQHJldHVybiBwcm9maWxlIGRlZmluaXRpb24uCi0gICAqIEBzZWUgI3NldFByb2ZpbGVBc3NlcnRpb25zCi0gICAqLwotICBwdWJsaWMgUHJvZmlsZUFzc2VydGlvbnMgZ2V0UHJvZmlsZUFzc2VydGlvbnMoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMucHJvZmlsZUFzc2VydGlvbnM7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IHByb2ZpbGUgZGVmaW5pdGlvbi4KLSAgICogQHBhcmFtIHByb2ZpbGVBc3NlcnRpb25zIHByb2ZpbGUgZGVmaW5pdGlvbi4KLSAgICogQHNlZSAjZ2V0UHJvZmlsZUFzc2VydGlvbnMKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFByb2ZpbGVBc3NlcnRpb25zKFByb2ZpbGVBc3NlcnRpb25zIHByb2ZpbGVBc3NlcnRpb25zKQotICB7Ci0gICAgdGhpcy5wcm9maWxlQXNzZXJ0aW9ucyA9IHByb2ZpbGVBc3NlcnRpb25zOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBhbmFseXplci4KLSAgICogQHJldHVybiBhbmFseXplci4KLSAgICogQHNlZSAjc2V0QW5hbHl6ZXIKLSAgICovCi0gIHB1YmxpYyBBbmFseXplciBnZXRBbmFseXplcigpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5hbmFseXplcjsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQgYW5hbHl6ZXIuCi0gICAqIEBwYXJhbSBhbmFseXplciBhbiBBbmFseXplciBvYmplY3QuCi0gICAqIEBzZWUgI2dldEFuYWx5emVyCi0gICAqIAotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0QW5hbHl6ZXIoQW5hbHl6ZXIgYW5hbHl6ZXIpCi0gIHsKLSAgICB0aGlzLmFuYWx5emVyID0gYW5hbHl6ZXI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9SZXBvcnRXcml0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9SZXBvcnRXcml0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWU3ZmM2Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvUmVwb3J0V3JpdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0OwotCi1pbXBvcnQgamF2YS5pby5Xcml0ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuRG9jdW1lbnRXcml0ZXI7Ci0KLS8qKgotICogRGVmaW5lcyB0aGUgaW50ZXJmYWNlIHVzZWQgdG8gd3JpdGUgdGhlIHJlcG9ydCBkb2N1bWVudHMuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBSZXBvcnRXcml0ZXIgZXh0ZW5kcyBEb2N1bWVudFdyaXRlcgotewotICAvKioKLSAgICogV3JpdGUgdGhlIGVudGlyZSBjb250ZW50cyBvZiB0aGUgZG9jdW1lbnQgdXNpbmcgdGhlIGxvY2F0aW9uCi0gICAqIHRoYXQgd2FzIHByZXZpb3VzbHkgc2V0IHVzaW5nIHRoZSBzZXRMb2NhdGlvbiBtZXRob2QuCi0gICAqIEBwYXJhbSByZXBvcnQgYSByZXBvcnQuCi0gICAqIEB0aHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlmIHRoaXMgb3BlcmF0aW9uIGhhcyBiZWVuIGludm9rZWQgCi0gICAqICAgICAgICAgYXQgYW4gaWxsZWdhbCBvciBpbmFwcHJvcHJpYXRlIHRpbWUKLSAgICovCi0gIHB1YmxpYyB2b2lkIHdyaXRlKFJlcG9ydCByZXBvcnQpIHRocm93cyBJbGxlZ2FsU3RhdGVFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIFdyaXRlIHRoZSBlbnRpcmUgY29udGVudHMgb2YgdGhlIGRvY3VtZW50LgotICAgKiBAcGFyYW0gcmVwb3J0IGEgcmVwb3J0LgotICAgKiBAcGFyYW0gd3JpdGVyIGEgV3JpdGVyIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHdyaXRlKFJlcG9ydCByZXBvcnQsIFdyaXRlciB3cml0ZXIpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L1JlcG9ydGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvUmVwb3J0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWVhNzg0My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvUmVwb3J0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQ7Ci0KLS8qKgotICogQ29uZm9ybWFuY2UgdGVzdCByZXBvcnRlciBpbnRlcmZhY2UuCi0gKgotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIFJlcG9ydGVyIGV4dGVuZHMgQnVpbGRSZXBvcnQsIFdyaXRlUmVwb3J0Ci17Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvV3JpdGVSZXBvcnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9Xcml0ZVJlcG9ydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzcwZDlhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9Xcml0ZVJlcG9ydC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci0KLS8qKgotICogVGhpcyBjbGFzcyAuLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgV3JpdGVSZXBvcnQKLXsKLSAgLyoqCi0gICAqIFN0YXJ0IGNvbmZvcm1hbmNlIHJlcG9ydC4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gdGhlIGJhc2UgV1MtSSBleGNlcHRpb24uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzdGFydFJlcG9ydCgpIHRocm93cyBXU0lFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIEZpbmlzaCB0aGUgY29uZm9ybWFuY2UgcmVwb3J0IGJ5IGFkZGluZyB0aGUgc3VtbWFyeSBhbmQgdGVzdCBjb3ZlcmFnZSBpbmZvcm1hdGlvbi4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gdGhlIGJhc2UgV1MtSSBleGNlcHRpb24uCi0gICAqLwotICBwdWJsaWMgdm9pZCBmaW5pc2hSZXBvcnQoKSB0aHJvd3MgV1NJRXhjZXB0aW9uOwotCi0gIC8qKgotICAgKiBGaW5pc2ggdGhlIGNvbmZvcm1hbmNlIHJlcG9ydCBiZWNhdXNlIG9mIGFuIGFuYWx5emVyIGVycm9yLgotICAgKiBAcGFyYW0gZXJyb3JEZXRhaWwgYW5hbHl6ZXIgZXJyb3IuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIHRoZSBiYXNlIFdTLUkgZXhjZXB0aW9uLgotICAgKi8KLSAgcHVibGljIHZvaWQgZmluaXNoUmVwb3J0V2l0aEVycm9yKFN0cmluZyBlcnJvckRldGFpbCkgdGhyb3dzIFdTSUV4Y2VwdGlvbjsKLQotICAvKioKLSAgICogR2V0IHJlcG9ydC4KLSAgICogQHJldHVybiByZXBvcnQuCi0gICAqLwotICBwdWJsaWMgUmVwb3J0IGdldFJlcG9ydCgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvQXJ0aWZhY3RSZWZlcmVuY2VJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvaW1wbC9BcnRpZmFjdFJlZmVyZW5jZUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDRiNDZiYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvaW1wbC9BcnRpZmFjdFJlZmVyZW5jZUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LmltcGw7Ci0KLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXJ0aWZhY3RSZWZlcmVuY2U7Ci0KLS8qKgotICogQW4gYXJ0aWZhY3QgcmVmZXJlbmNlLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgQXJ0aWZhY3RSZWZlcmVuY2VJbXBsIGltcGxlbWVudHMgQXJ0aWZhY3RSZWZlcmVuY2UKLXsKLSAgLyoqCi0gICAqIFRpbWVzdGFtcC4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgdGltZXN0YW1wID0gbnVsbDsKLQotICAvKioKLSAgICogT3B0aW9uYWwgZG9jdW1lbnQgZWxlbWVudC4KLSAgICovCi0gIHByb3RlY3RlZCBEb2N1bWVudEVsZW1lbnQgZG9jdW1lbnRFbGVtZW50ID0gbnVsbDsKLQotICAvKioKLSAgICogT3B0aW9uYWwgZG9jdW1lbnQgZWxlbWVudCBuYW1lc3BhY2UgbmFtZS4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgZWxlbWVudE5hbWVzcGFjZU5hbWUgPSBudWxsOwotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkFydGlmYWN0UmVmZXJlbmNlI2dldFRpbWVzdGFtcCgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFRpbWVzdGFtcCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy50aW1lc3RhbXA7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5BcnRpZmFjdFJlZmVyZW5jZSNzZXRUaW1lc3RhbXAoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VGltZXN0YW1wKFN0cmluZyB0aW1lc3RhbXApCi0gIHsKLSAgICB0aGlzLnRpbWVzdGFtcCA9IHRpbWVzdGFtcDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkFydGlmYWN0UmVmZXJlbmNlI2dldERvY3VtZW50RWxlbWVudCgpCi0gICAqLwotICBwdWJsaWMgRG9jdW1lbnRFbGVtZW50IGdldERvY3VtZW50RWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5kb2N1bWVudEVsZW1lbnQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5BcnRpZmFjdFJlZmVyZW5jZSNzZXREb2N1bWVudEVsZW1lbnQoRG9jdW1lbnRFbGVtZW50LCBTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXREb2N1bWVudEVsZW1lbnQoCi0gICAgRG9jdW1lbnRFbGVtZW50IGRvY3VtZW50RWxlbWVudCwKLSAgICBTdHJpbmcgbmFtZXNwYWNlTmFtZSkKLSAgewotICAgIHRoaXMuZG9jdW1lbnRFbGVtZW50ID0gZG9jdW1lbnRFbGVtZW50OwotICAgIHRoaXMuZWxlbWVudE5hbWVzcGFjZU5hbWUgPSBuYW1lc3BhY2VOYW1lOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgcHcucHJpbnRsbigiICBBcnRpZmFjdCBSZWZlcmVuY2U6ICIpOwotICAgIHB3LnByaW50bG4oIiAgICB0aW1lc3RhbXAgLi4uLi4uLi4uLi4gIiArIHRoaXMudGltZXN0YW1wKTsKLQotICAgIGlmICh0aGlzLmRvY3VtZW50RWxlbWVudCAhPSBudWxsKQotICAgICAgcHcucHJpbnRsbigKLSAgICAgICAgIiAgICBkb2N1bWVudEVsZW1lbnQgLi4uLi4gIgotICAgICAgICAgICsgdGhpcy5kb2N1bWVudEVsZW1lbnQudG9YTUxTdHJpbmcodGhpcy5lbGVtZW50TmFtZXNwYWNlTmFtZSkpOwotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LkRvY3VtZW50RWxlbWVudCN0b1hNTFN0cmluZyhTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvWE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIFN0cmluZyBuc05hbWUgPSBuYW1lc3BhY2VOYW1lOwotICAgIGlmICgoIW5zTmFtZS5lcXVhbHMoIiIpICYmICghbnNOYW1lLmVuZHNXaXRoKCI6IikpKSkKLSAgICAgIG5zTmFtZSArPSAiOiI7Ci0KLSAgICAvLyBDcmVhdGUgZWxlbWVudCAKLSAgICBwdy5wcmludCgiICAgIDwiICsgbnNOYW1lICsgRUxFTV9OQU1FICsgIiAiKTsKLSAgICBwdy5wcmludGxuKFdTSUNvbnN0YW50cy5BVFRSX1RJTUVTVEFNUCArICI9XCIiICsgZ2V0VGltZXN0YW1wKCkgKyAiXCI+Iik7Ci0KLSAgICAvLyBJZiB0aGVyZSBpcyBhIGRvY3VtZW50IGVsZW1lbnQsIHRoZW4gYWRkIGl0Ci0gICAgaWYgKHRoaXMuZG9jdW1lbnRFbGVtZW50ICE9IG51bGwpCi0gICAgewotICAgICAgcHcucHJpbnQoZG9jdW1lbnRFbGVtZW50LnRvWE1MU3RyaW5nKHRoaXMuZWxlbWVudE5hbWVzcGFjZU5hbWUpKTsKLSAgICB9Ci0KLSAgICAvLyBFbmQgZWxlbWVudAotICAgIHB3LnByaW50bG4oIiAgICA8LyIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiPiIpOwotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvQXNzZXJ0aW9uUmVzdWx0SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvQXNzZXJ0aW9uUmVzdWx0SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjJkOGNlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9pbXBsL0Fzc2VydGlvblJlc3VsdEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LmltcGw7Ci0KLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuYW5hbHl6ZXIuY29uZmlnLkFzc2VydGlvblJlc3VsdHNPcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5pbXBsLkFzc2VydGlvblJlc3VsdHNPcHRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5FbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkZhaWx1cmVEZXRhaWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5QcmVyZXFGYWlsZWRMaXN0OwotCi1pbXBvcnQgY29tLmlibS53c2RsLnV0aWwueG1sLkRPTVV0aWxzOwotCi0vKioKLSAqIFRlc3QgYXNzZXJ0aW9uIHJlc3VsdC4KLSAqCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBBc3NlcnRpb25SZXN1bHRJbXBsIGltcGxlbWVudHMgQXNzZXJ0aW9uUmVzdWx0Ci17Ci0gIC8qKgotICAgKiBBc3NlcnRpb24gcmVzdWx0LgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyByZXN1bHQgPSBudWxsOwotCi0gIC8qKgotICAgKiBFbnRyeS4KLSAgICovCi0gIHByb3RlY3RlZCBFbnRyeSBlbnRyeSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFByb2ZpbGUgdGVzdCBhc3NlcnRpb24uCi0gICAqLwotICBwcm90ZWN0ZWQgVGVzdEFzc2VydGlvbiB0ZXN0QXNzZXJ0aW9uID0gbnVsbDsKLQotICAvKioKLSAgICogRmFpbHVyZSBkZXRhaWwgbWVzc2FnZXMuCi0gICAqLwotICBwcm90ZWN0ZWQgVmVjdG9yIGZhaWx1cmVEZXRhaWxMaXN0ID0gbnVsbDsKLQotICAvKioKLSAgICogQXNzZXJ0aW9uIHJlc3VsdHMgb3B0aW9uLgotICAgKi8KLSAgcHJvdGVjdGVkIEFzc2VydGlvblJlc3VsdHNPcHRpb24gYXNzZXJ0aW9uUmVzdWx0c09wdGlvbiA9Ci0gICAgbmV3IEFzc2VydGlvblJlc3VsdHNPcHRpb25JbXBsKCk7Ci0KLSAgLyoqCi0gICAqIFByZXJlcSBmYWlsZWQgbGlzdC4KLSAgICovCi0gIHByb3RlY3RlZCBQcmVyZXFGYWlsZWRMaXN0IHByZXJlcUZhaWxlZExpc3QgPSBudWxsOwotCi0gIC8qKgotICAgKiBDcmVhdGUgYSBuZXcgYXNzZXJ0aW9uIHJlc3VsdC4KLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHRJbXBsKCkKLSAgewotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0I2dldFJlc3VsdCgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFJlc3VsdCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5yZXN1bHQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQjc2V0UmVzdWx0KGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZXN1bHQoU3RyaW5nIHJlc3VsdCkKLSAgewotICAgIHRoaXMucmVzdWx0ID0gcmVzdWx0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0I2dldEFzc2VydGlvbigpCi0gICAqLwotICBwdWJsaWMgVGVzdEFzc2VydGlvbiBnZXRBc3NlcnRpb24oKQotICB7Ci0gICAgcmV0dXJuIHRoaXMudGVzdEFzc2VydGlvbjsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkFzc2VydGlvblJlc3VsdCNzZXRBc3NlcnRpb24ob3JnLndzaS50ZXN0LnByb2ZpbGUuVGVzdEFzc2VydGlvbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEFzc2VydGlvbihUZXN0QXNzZXJ0aW9uIHRlc3RBc3NlcnRpb24pCi0gIHsKLSAgICB0aGlzLnRlc3RBc3NlcnRpb24gPSB0ZXN0QXNzZXJ0aW9uOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0I2dldEVudHJ5KCkKLSAgICovCi0gIHB1YmxpYyBFbnRyeSBnZXRFbnRyeSgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5lbnRyeTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkFzc2VydGlvblJlc3VsdCNzZXRFbnRyeShvcmcud3NpLnRlc3QucmVwb3J0LkVudHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RW50cnkoRW50cnkgZW50cnkpCi0gIHsKLSAgICB0aGlzLmVudHJ5ID0gZW50cnk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQjZ2V0RmFpbHVyZURldGFpbExpc3QoKQotICAgKi8KLSAgcHVibGljIFZlY3RvciBnZXRGYWlsdXJlRGV0YWlsTGlzdCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5mYWlsdXJlRGV0YWlsTGlzdDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkFzc2VydGlvblJlc3VsdCNzZXRGYWlsdXJlRGV0YWlsTGlzdChqYXZhLnV0aWwuVmVjdG9yKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RmFpbHVyZURldGFpbExpc3QoVmVjdG9yIGZhaWx1cmVEZXRhaWxMaXN0KQotICB7Ci0gICAgdGhpcy5mYWlsdXJlRGV0YWlsTGlzdCA9IGZhaWx1cmVEZXRhaWxMaXN0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0I2dldEFzc2VydGlvblJlc3VsdHNPcHRpb24oKQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdHNPcHRpb24gZ2V0QXNzZXJ0aW9uUmVzdWx0c09wdGlvbigpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5hc3NlcnRpb25SZXN1bHRzT3B0aW9uOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0I3NldEFzc2VydGlvblJlc3VsdHNPcHRpb24ob3JnLndzaS50ZXN0LmFuYWx5emVyLmNvbmZpZy5Bc3NlcnRpb25SZXN1bHRzT3B0aW9uKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0QXNzZXJ0aW9uUmVzdWx0c09wdGlvbihBc3NlcnRpb25SZXN1bHRzT3B0aW9uIGFzc2VydGlvblJlc3VsdHNPcHRpb24pCi0gIHsKLSAgICB0aGlzLmFzc2VydGlvblJlc3VsdHNPcHRpb24gPSBhc3NlcnRpb25SZXN1bHRzT3B0aW9uOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0I2dldFByZXJlcUZhaWxlZExpc3QoKQotICAgKi8KLSAgcHVibGljIFByZXJlcUZhaWxlZExpc3QgZ2V0UHJlcmVxRmFpbGVkTGlzdCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5wcmVyZXFGYWlsZWRMaXN0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0I3NldFByZXJlcUZhaWxlZExpc3Qob3JnLndzaS50ZXN0LnJlcG9ydC5QcmVyZXFGYWlsZWRMaXN0KQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UHJlcmVxRmFpbGVkTGlzdChQcmVyZXFGYWlsZWRMaXN0IHByZXJlcUZhaWxlZExpc3QpCi0gIHsKLSAgICB0aGlzLnByZXJlcUZhaWxlZExpc3QgPSBwcmVyZXFGYWlsZWRMaXN0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQjdG9YTUxTdHJpbmcoamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9YTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgU3RyaW5nIG5zTmFtZSA9IG5hbWVzcGFjZU5hbWU7Ci0gICAgaWYgKCghbnNOYW1lLmVxdWFscygiIikgJiYgKCFuc05hbWUuZW5kc1dpdGgoIjoiKSkpKQotICAgICAgbnNOYW1lICs9ICI6IjsKLQotICAgIC8vIENyZWF0ZSBlbGVtZW50IAotICAgIHB3LnByaW50KCIgICAgICA8IiArIG5zTmFtZSArIEVMRU1fTkFNRSArICIgIik7Ci0gICAgcHcucHJpbnQoV1NJQ29uc3RhbnRzLkFUVFJfSUQgKyAiPVwiIiArIHRoaXMudGVzdEFzc2VydGlvbi5nZXRJZCgpICsgIlwiICIpOwotICAgIHB3LnByaW50bG4oV1NJQ29uc3RhbnRzLkFUVFJfUkVTVUxUICsgIj1cIiIgKyB0aGlzLnJlc3VsdCArICJcIj4iKTsKLQotICAgIC8vIEFERDogQWRkIHN1cHBvcnQgZm9yIGFkZGl0aW9uYWwgdGFyZ2V0cwotCi0gICAgLy8gQWRkIHByZXJlcSBmYWlsZWQgbGlzdAotICAgIGlmICh0aGlzLnByZXJlcUZhaWxlZExpc3QgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwdy5wcmludChwcmVyZXFGYWlsZWRMaXN0LnRvWE1MU3RyaW5nKG5zTmFtZSkpOwotICAgIH0KLQotICAgIC8vIEFERDogQWRkIHN1cHBvcnQgZm9yIG11bHRpcGxlIGxhbmd1YWdlcwotICAgIC8vIElmIHJlc3VsdCBpcyBmYWlsZWQgb3Igd2FybmluZywgdGhlbiBhZGQgZmFpbHVyZSBtZXNzYWdlCi0gICAgaWYgKChyZXN1bHQuZXF1YWxzKFJFU1VMVF9GQUlMRUQpIHx8IHJlc3VsdC5lcXVhbHMoUkVTVUxUX1dBUk5JTkcpKQotICAgICAgJiYgKGFzc2VydGlvblJlc3VsdHNPcHRpb24uZ2V0U2hvd0ZhaWx1cmVNZXNzYWdlKCkpKQotICAgIHsKLSAgICAgIHB3LnByaW50KAotICAgICAgICAiICAgICAgICA8IgotICAgICAgICAgICsgbnNOYW1lCi0gICAgICAgICAgKyBXU0lDb25zdGFudHMuRUxFTV9GQUlMVVJFX01FU1NBR0UKLSAgICAgICAgICArICIgeG1sOmxhbmc9XCJlblwiPiIpOwotICAgICAgcHcucHJpbnQoRE9NVXRpbHMuY2xlYW5TdHJpbmcodGhpcy50ZXN0QXNzZXJ0aW9uLmdldEZhaWx1cmVNZXNzYWdlKCkpKTsKLSAgICAgIHB3LnByaW50bG4oIjwvIiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX0ZBSUxVUkVfTUVTU0FHRSArICI+Iik7Ci0gICAgfQotCi0gICAgLy8gQUREOiBBZGQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgbGFuZ3VhZ2VzCi0gICAgLy8gSWYgYW55IGZhaWx1cmUgZGV0YWlsIG1lc3NhZ2VzIHdlcmUgc3BlY2lmaWVkLCB0aGVuIGFkZCB0aGVtCi0gICAgaWYgKChmYWlsdXJlRGV0YWlsTGlzdCAhPSBudWxsKQotICAgICAgJiYgKGFzc2VydGlvblJlc3VsdHNPcHRpb24uZ2V0U2hvd0ZhaWx1cmVEZXRhaWwoKSkpCi0gICAgewotICAgICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBmYWlsdXJlRGV0YWlsTGlzdC5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgcHcucHJpbnQoKChGYWlsdXJlRGV0YWlsKSBpdGVyYXRvci5uZXh0KCkpLnRvWE1MU3RyaW5nKG5zTmFtZSkpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIEVuZCB0aGUgZWxlbWVudAotICAgIHB3LnByaW50bG4oIiAgICAgIDwvIiArIG5zTmFtZSArIEVMRU1fTkFNRSArICI+Iik7Ci0KLSAgICAvLyBSZXR1cm4gc3RyaW5nCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCN0b1N0cmluZygpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9pbXBsL0RlZmF1bHRSZXBvcnRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvRGVmYXVsdFJlcG9ydGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwYWMyZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvRGVmYXVsdFJlcG9ydGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyODAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDAzIElCTSBDb3Jwb3JhdGlvbiwgUGFyYXNvZnQgYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAgICAgIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgIFBhcmFzb2Z0IC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5pbXBsOwotCi1pbXBvcnQgamF2YS5pby5TdHJpbmdSZWFkZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuQW5hbHl6ZXJDb25maWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmFuYWx5emVyLmNvbmZpZy5Bc3NlcnRpb25SZXN1bHRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlRlc3RBc3NlcnRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5BcnRpZmFjdFJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuRW50cnlDb250YWluZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5GYWlsdXJlRGV0YWlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0QXJ0aWZhY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnRXcml0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnRlcjsKLQotLyoqCi0gKiBCYXNlIGNsYXNzIGZvciByZXBvcnRpbmcgZXJyb3JzIGZyb20gdGhlIGFuYWx5emVyLgotICogRXh0ZW5kIHRoaXMgY2xhc3MgZm9yIHNwZWNpZmljIHR5cGVzIG9mIHJlcG9ydGluZywgc3VjaCBhcyByZXBvcnRpbmcKLSAqIGluIGRpZmZlcmVudCBmb3JtYXRzLCByZXBvcnRpbmcgdG8gZmlsZXMsIHJlcG9ydGluZyB0byBhIEdVSS4KLSAqCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBKaW0gQ2x1bmUKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbQotICovCi1wdWJsaWMgY2xhc3MgRGVmYXVsdFJlcG9ydGVyIGltcGxlbWVudHMgUmVwb3J0ZXIKLXsKLSAgLyoqCi0gICAqIENvbmZvcm1hbmNlIHJlcG9ydC4KLSAgICovCi0gIHByb3RlY3RlZCBSZXBvcnQgcmVwb3J0OwotCi0gIC8qKgotICAgKiBEb2N1bWVudCB3cml0ZXIuCi0gICAqLwotICBwcm90ZWN0ZWQgUmVwb3J0V3JpdGVyIHJlcG9ydFdyaXRlcjsKLQotICAvKioKLSAgICogQW5hbHl6ZXIgY29uZmlnLgotICAgKi8KLSAgcHJvdGVjdGVkIEFuYWx5emVyQ29uZmlnIGFuYWx5emVyQ29uZmlnOwotCi0gIC8qKgotICAgKiBBc3NlcnRvaW4gcmVzdWx0IHR5cGUuCi0gICAqLwotICBwcm90ZWN0ZWQgQXNzZXJ0aW9uUmVzdWx0VHlwZSBhc3NlcnRpb25SZXN1bHRUeXBlOwotCi0gIC8qKgotICAgKiBDcmVhdGUgcmVzdWx0IHJlcG9ydGVyLgotICAgKiBAcGFyYW0gcmVwb3J0IGEgUmVwb3J0IG9iamVjdC4KLSAgICogQHBhcmFtIHJlcG9ydFdyaXRlciBhIFJlcG9ydFdyaXRlck9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBEZWZhdWx0UmVwb3J0ZXIoUmVwb3J0IHJlcG9ydCwgUmVwb3J0V3JpdGVyIHJlcG9ydFdyaXRlcikKLSAgewotICAgIHRoaXMucmVwb3J0ID0gcmVwb3J0OwotICAgIHRoaXMucmVwb3J0V3JpdGVyID0gcmVwb3J0V3JpdGVyOwotCi0gICAgLy8gQUREOiBWZXJpZnkgdGhhdCB3cml0ZXIgc2V0IGluIHJlcG9ydFdyaXRlcgotCi0gICAgLy8gR2V0IHJlcG9ydCBjb250ZXh0Ci0gICAgdGhpcy5hbmFseXplckNvbmZpZyA9Ci0gICAgICByZXBvcnQuZ2V0UmVwb3J0Q29udGV4dCgpLmdldEFuYWx5emVyKCkuZ2V0QW5hbHl6ZXJDb25maWcoKTsKLSAgICB0aGlzLmFzc2VydGlvblJlc3VsdFR5cGUgPQotICAgICAgdGhpcy5hbmFseXplckNvbmZpZy5nZXRBc3NlcnRpb25SZXN1bHRzT3B0aW9uKCkuZ2V0QXNzZXJ0aW9uUmVzdWx0VHlwZSgpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQnVpbGRSZXBvcnQjc2V0Q3VycmVudEFydGlmYWN0KG9yZy53c2kudGVzdC5yZXBvcnQuUmVwb3J0QXJ0aWZhY3QpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRDdXJyZW50QXJ0aWZhY3QoUmVwb3J0QXJ0aWZhY3QgcmVwb3J0QXJ0aWZhY3QpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVwb3J0LnNldEN1cnJlbnRBcnRpZmFjdChyZXBvcnRBcnRpZmFjdCk7Ci0gICAgcmVwb3J0V3JpdGVyLndyaXRlKG5ldyBTdHJpbmdSZWFkZXIocmVwb3J0QXJ0aWZhY3QuZ2V0U3RhcnRYTUxTdHJpbmcoIiIpKSk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNlbmRDdXJyZW50QXJ0aWZhY3QoKQotICAgKi8KLSAgcHVibGljIHZvaWQgZW5kQ3VycmVudEFydGlmYWN0KCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVwb3J0V3JpdGVyLndyaXRlKAotICAgICAgbmV3IFN0cmluZ1JlYWRlcihyZXBvcnQuZ2V0Q3VycmVudEFydGlmYWN0KCkuZ2V0RW5kWE1MU3RyaW5nKCIiKSkpOwotICAgIHJlcG9ydC5lbmRDdXJyZW50QXJ0aWZhY3QoKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkJ1aWxkUmVwb3J0I2FkZEFydGlmYWN0UmVmZXJlbmNlKG9yZy53c2kudGVzdC5yZXBvcnQuQXJ0aWZhY3RSZWZlcmVuY2UpCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRBcnRpZmFjdFJlZmVyZW5jZShBcnRpZmFjdFJlZmVyZW5jZSBhcnRpZmFjdFJlZmVyZW5jZSkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXBvcnRXcml0ZXIud3JpdGUobmV3IFN0cmluZ1JlYWRlcihhcnRpZmFjdFJlZmVyZW5jZS50b1hNTFN0cmluZygiIikpKTsKLQotICAgIC8vIEFkZCBhcnRpZmFjdCByZWZlcmVuY2UgdG8gcmVwb3J0Ci0gICAgcmVwb3J0LmFkZEFydGlmYWN0UmVmZXJlbmNlKGFydGlmYWN0UmVmZXJlbmNlKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkJ1aWxkUmVwb3J0I3NldEN1cnJlbnRFbnRyeShvcmcud3NpLnRlc3QucmVwb3J0LkVudHJ5KQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q3VycmVudEVudHJ5KEVudHJ5IGVudHJ5KSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXBvcnQuc2V0Q3VycmVudEVudHJ5KGVudHJ5KTsKLSAgICByZXBvcnRXcml0ZXIud3JpdGUoCi0gICAgICBuZXcgU3RyaW5nUmVhZGVyKAotICAgICAgICBlbnRyeS5nZXRTdGFydFhNTFN0cmluZygKLSAgICAgICAgICAiIiwKLSAgICAgICAgICB0aGlzCi0gICAgICAgICAgICAucmVwb3J0Ci0gICAgICAgICAgICAuZ2V0UmVwb3J0Q29udGV4dCgpCi0gICAgICAgICAgICAuZ2V0QW5hbHl6ZXIoKQotICAgICAgICAgICAgLmdldEFuYWx5emVyQ29uZmlnKCkKLSAgICAgICAgICAgIC5nZXRBc3NlcnRpb25SZXN1bHRzT3B0aW9uKCkKLSAgICAgICAgICAgIC5nZXRTaG93TWVzc2FnZUVudHJ5KCkpKSk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNzZXRDdXJyZW50RW50cnkob3JnLndzaS50ZXN0LnJlcG9ydC5FbnRyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEN1cnJlbnRFbnZlbG9wZUVudHJ5KEVudHJ5IGVudHJ5KSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICByZXBvcnQuc2V0Q3VycmVudEVudHJ5KGVudHJ5KTsKLSAgICByZXBvcnRXcml0ZXIud3JpdGUoCi0gICAgICBuZXcgU3RyaW5nUmVhZGVyKAotICAgICAgICBlbnRyeS5nZXRTdGFydFhNTFN0cmluZygKLSAgICAgICAgICAiIiwKLSAgICAgICAgICB0aGlzCi0gICAgICAgICAgICAucmVwb3J0Ci0gICAgICAgICAgICAuZ2V0UmVwb3J0Q29udGV4dCgpCi0gICAgICAgICAgICAuZ2V0QW5hbHl6ZXIoKQotICAgICAgICAgICAgLmdldEFuYWx5emVyQ29uZmlnKCkKLSAgICAgICAgICAgIC5nZXRBc3NlcnRpb25SZXN1bHRzT3B0aW9uKCkKLSAgICAgICAgICAgIC5nZXRTaG93TWVzc2FnZUVudHJ5KCksCi0JCSAgdHJ1ZSkpKTsKLSAgfQotLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQnVpbGRSZXBvcnQjZW5kQ3VycmVudEVudHJ5KCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVuZEN1cnJlbnRFbnRyeSgpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlcG9ydFdyaXRlci53cml0ZSgKLSAgICAgIG5ldyBTdHJpbmdSZWFkZXIocmVwb3J0LmdldEN1cnJlbnRFbnRyeSgpLmdldEVuZFhNTFN0cmluZygiIikpKTsKLSAgICByZXBvcnQuZW5kQ3VycmVudEVudHJ5KCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNhZGRBc3NlcnRpb25SZXN1bHQob3JnLndzaS50ZXN0LnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRBc3NlcnRpb25SZXN1bHQoQXNzZXJ0aW9uUmVzdWx0IGFzc2VydGlvblJlc3VsdCkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBCYXNlZCBvbiB0aGUgY29uZmlnIG9wdGlvbnMsIHdyaXRlIG91dCBhc3NlcnRpb24gcmVzdWx0Ci0gICAgaWYgKChhc3NlcnRpb25SZXN1bHRUeXBlLmlzQWxsKCkpCi0gICAgICB8fCAoKGFzc2VydGlvblJlc3VsdFR5cGUuaXNGYWlsZWRPbmx5KCkpCi0gICAgICAgICYmIChhc3NlcnRpb25SZXN1bHQuZ2V0UmVzdWx0KCkuZXF1YWxzKEFzc2VydGlvblJlc3VsdC5SRVNVTFRfRkFJTEVEKSkpCi0gICAgICB8fCAoKGFzc2VydGlvblJlc3VsdFR5cGUuaXNOb3RQYXNzZWQoKSkKLSAgICAgICAgJiYgKCFhc3NlcnRpb25SZXN1bHQuZ2V0UmVzdWx0KCkuZXF1YWxzKEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VEKSkpCi0JICAgICAgfHwgKChhc3NlcnRpb25SZXN1bHRUeXBlLmlzTm90SW5mbygpKQotCSAgICAgICAgICAgICYmICghYXNzZXJ0aW9uUmVzdWx0LmdldEFzc2VydGlvbigpLmdldFR5cGUoKS5lcXVhbHMoVGVzdEFzc2VydGlvbi5UWVBFX0lORk9STUFUSU9OQUwpKSkpCi0gICAgewotICAgICAgcmVwb3J0V3JpdGVyLndyaXRlKG5ldyBTdHJpbmdSZWFkZXIoYXNzZXJ0aW9uUmVzdWx0LnRvWE1MU3RyaW5nKCIiKSkpOwotICAgIH0KLQotICAgIC8vIEFkZCBhc3NlcnRpb24gdG8gcmVwb3J0Ci0gICAgcmVwb3J0LmFkZEFzc2VydGlvblJlc3VsdChhc3NlcnRpb25SZXN1bHQpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQnVpbGRSZXBvcnQjZ2V0QXNzZXJ0aW9uUmVzdWx0KGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IGdldEFzc2VydGlvblJlc3VsdChTdHJpbmcgYXNzZXJ0aW9uSWQpCi0gIHsKLSAgICAvLyBHZXQgdGhlIGFzc2VydGlvbiByZXN1bHQgZnJvbSB0aGUgY3VycmVudCBhc3NlcnRpb24gdGFyZ2V0Ci0gICAgcmV0dXJuIHJlcG9ydC5nZXRBc3NlcnRpb25SZXN1bHQoYXNzZXJ0aW9uSWQpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuV3JpdGVSZXBvcnQjc3RhcnRSZXBvcnQoKQotICAgKi8KLSAgcHVibGljIHZvaWQgc3RhcnRSZXBvcnQoKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBXcml0ZSBvdXQgc3RhcnQgb2YgcmVwb3J0Ci0gICAgcmVwb3J0V3JpdGVyLndyaXRlKG5ldyBTdHJpbmdSZWFkZXIocmVwb3J0LmdldFN0YXJ0WE1MU3RyaW5nKCIiKSkpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuV3JpdGVSZXBvcnQjZmluaXNoUmVwb3J0KCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGZpbmlzaFJlcG9ydCgpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIC8vIEVuZCB0aGUgcmVwb3J0IGZpbGUKLSAgICByZXBvcnRXcml0ZXIud3JpdGUobmV3IFN0cmluZ1JlYWRlcihyZXBvcnQuZ2V0RW5kWE1MU3RyaW5nKCIiKSkpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuV3JpdGVSZXBvcnQjZmluaXNoUmVwb3J0V2l0aEVycm9yKGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBmaW5pc2hSZXBvcnRXaXRoRXJyb3IoU3RyaW5nIGVycm9yRGV0YWlsKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBDaGVjayBpZiBlbnRyeSBvciBhcnRpZmFjdCBuZWVkIHRvIGJlIGNsb3NlZAotICAgIGlmICh0aGlzLnJlcG9ydC5nZXRDdXJyZW50RW50cnkoKSAhPSBudWxsKQotICAgICAgZW5kQ3VycmVudEVudHJ5KCk7Ci0gICAgaWYgKHRoaXMucmVwb3J0LmdldEN1cnJlbnRBcnRpZmFjdCgpICE9IG51bGwpCi0gICAgICBlbmRDdXJyZW50QXJ0aWZhY3QoKTsKLQotICAgIC8vIEVuZCB0aGUgcmVwb3J0IGZpbGUKLSAgICByZXBvcnRXcml0ZXIud3JpdGUoCi0gICAgICBuZXcgU3RyaW5nUmVhZGVyKHJlcG9ydC5nZXRFcnJvclhNTFN0cmluZygiIiwgZXJyb3JEZXRhaWwpKSk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNjcmVhdGVBc3NlcnRpb25SZXN1bHQoKQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCBjcmVhdGVBc3NlcnRpb25SZXN1bHQoKQotICB7Ci0gICAgcmV0dXJuIHJlcG9ydC5jcmVhdGVBc3NlcnRpb25SZXN1bHQoKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkJ1aWxkUmVwb3J0I2NyZWF0ZUFydGlmYWN0KCkKLSAgICovCi0gIHB1YmxpYyBSZXBvcnRBcnRpZmFjdCBjcmVhdGVBcnRpZmFjdCgpCi0gIHsKLSAgICByZXR1cm4gcmVwb3J0LmNyZWF0ZUFydGlmYWN0KCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNjcmVhdGVFbnRyeSgpCi0gICAqLwotICBwdWJsaWMgRW50cnkgY3JlYXRlRW50cnkoKQotICB7Ci0gICAgcmV0dXJuIHJlcG9ydC5jcmVhdGVFbnRyeSgpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQnVpbGRSZXBvcnQjY3JlYXRlRW50cnlDb250YWluZXIoKQotICAgKi8KLSAgcHVibGljIEVudHJ5Q29udGFpbmVyIGNyZWF0ZUVudHJ5Q29udGFpbmVyKCkKLSAgewotICAgIHJldHVybiByZXBvcnQuY3JlYXRlRW50cnlDb250YWluZXIoKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkJ1aWxkUmVwb3J0I2NyZWF0ZUZhaWx1cmVEZXRhaWwoKQotICAgKi8KLSAgcHVibGljIEZhaWx1cmVEZXRhaWwgY3JlYXRlRmFpbHVyZURldGFpbCgpCi0gIHsKLSAgICByZXR1cm4gcmVwb3J0LmNyZWF0ZUZhaWx1cmVEZXRhaWwoKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LldyaXRlUmVwb3J0I2dldFJlcG9ydCgpCi0gICAqLwotICBwdWJsaWMgUmVwb3J0IGdldFJlcG9ydCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5yZXBvcnQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNzZXRQcmVyZXFUeXBlKGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRQcmVyZXFUeXBlKFN0cmluZyBwcmVyZXFUeXBlKQotICB7Ci0gICAgdGhpcy5yZXBvcnQuc2V0UHJlcmVxVHlwZShwcmVyZXFUeXBlKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvRW50cnlDb250YWluZXJJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvaW1wbC9FbnRyeUNvbnRhaW5lckltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTU2ZDA4Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvaW1wbC9FbnRyeUNvbnRhaW5lckltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwMyBJQk0gQ29ycG9yYXRpb24sIFBhcmFzb2Z0IGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gICAgICAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICBQYXJhc29mdCAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuaW1wbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuRW50cnlDb250YWluZXI7Ci0KLS8qKgotICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgY29udGFpbmVyIGZvciBvbmUgb3IgbW9yZSBlbnRyaWVzLiAgCi0gKiBBbiBleGFtcGxlIHdvdWxkIGJlIGEgV1NETCBkb2N1bWVudC4KLSAqIAotICogQGF1dGhvciBQZXRlciAgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICogQHZlcnNpb24gMS4wLjEKLSAqLwotcHVibGljIGNsYXNzIEVudHJ5Q29udGFpbmVySW1wbAotICBleHRlbmRzIEVudHJ5UmVzdWx0SW1wbAotICBpbXBsZW1lbnRzIEVudHJ5Q29udGFpbmVyCi17Ci0gIC8qKgotICAgKiBDb250YWluZXIgSUQuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGlkOwotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkVudHJ5Q29udGFpbmVyI2dldElkKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SWQoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuaWQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5FbnRyeUNvbnRhaW5lciNzZXRJZChTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRJZChTdHJpbmcgaWQpCi0gIHsKLSAgICB0aGlzLmlkID0gaWQ7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJuIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgcmV0dXJuICJbIiArIHRoaXMuaWQgKyAiXSAiICsgdGhpcy5hc3NlcnRpb25SZXN1bHRMaXN0OwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9pbXBsL0VudHJ5SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvRW50cnlJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2MDc3NTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvRW50cnlJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5pbXBsOwotCi1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LkRvY3VtZW50RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuRW52ZWxvcGVWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLk1lc3NhZ2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5FbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkVudHJ5Q29udGFpbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkVudHJ5VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhbiBlbnRyeSBpbiBhIHJlcG9ydC4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIEVudHJ5SW1wbCBleHRlbmRzIEVudHJ5UmVzdWx0SW1wbCBpbXBsZW1lbnRzIEVudHJ5Ci17Ci0gIC8qKgotICAgKiBFbnRyeSB0eXBlLgotICAgKi8KLSAgcHJvdGVjdGVkIEVudHJ5VHlwZSBlbnRyeVR5cGUgPSBudWxsOwotCi0gIC8qKgotICAgKiBBcnRpZmFjdCBuYW1lIChvcHRpb25hbCkuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGFydGlmYWN0TmFtZSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFJlZmVyZW5jZSBJRC4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgcmVmZXJlbmNlSUQgPSBudWxsOwotCi0gIC8qKgotICAgKiBQYXJlbnQgZWxlbWVudCBuYW1lIChvbmx5IHVzZWQgd2hlbiBlbnRyeSB0eXBlIGlzICJwb3J0IiBvciAib3BlcmF0aW9uIikuCi0gICAqLwotICBwcm90ZWN0ZWQgU3RyaW5nIHBhcmVudEVsZW1lbnROYW1lID0gbnVsbDsKLQotICAvKioKLSAgICogRW50cnkgZGV0YWlsIG9iamVjdC4KLSAgICovCi0gIHByb3RlY3RlZCBPYmplY3QgZW50cnlEZXRhaWwgPSBudWxsOwotCi0gIC8qKgotICAgKiBFbnRyeSBjb250YWluZXIuCi0gICAqLwotICBwcm90ZWN0ZWQgRW50cnlDb250YWluZXIgZW50cnlDb250YWluZXIgPSBudWxsOwotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkVudHJ5I2dldEVudHJ5VHlwZSgpCi0gICAqLwotICBwdWJsaWMgRW50cnlUeXBlIGdldEVudHJ5VHlwZSgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5lbnRyeVR5cGU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5FbnRyeSNzZXRFbnRyeVR5cGUoRW50cnlUeXBlKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RW50cnlUeXBlKEVudHJ5VHlwZSBlbnRyeVR5cGUpCi0gIHsKLSAgICB0aGlzLmVudHJ5VHlwZSA9IGVudHJ5VHlwZTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkVudHJ5I2dldEFydGlmYWN0TmFtZSgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEFydGlmYWN0TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5hcnRpZmFjdE5hbWU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5FbnRyeSNzZXRBcnRpZmFjdE5hbWUoamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEFydGlmYWN0TmFtZShTdHJpbmcgYXJ0aWZhY3ROYW1lKQotICB7Ci0gICAgdGhpcy5hcnRpZmFjdE5hbWUgPSBhcnRpZmFjdE5hbWU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5FbnRyeSNnZXRSZWZlcmVuY2VJRCgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFJlZmVyZW5jZUlEKCkKLSAgewotICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZUlEOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuRW50cnkjc2V0UmVmZXJlbmNlSUQoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UmVmZXJlbmNlSUQoU3RyaW5nIHJlZmVyZW5jZUlEKQotICB7Ci0gICAgdGhpcy5yZWZlcmVuY2VJRCA9IHJlZmVyZW5jZUlEOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuRW50cnkjZ2V0UGFyZW50RWxlbWVudE5hbWUoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRQYXJlbnRFbGVtZW50TmFtZSgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5wYXJlbnRFbGVtZW50TmFtZTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkVudHJ5I3NldFBhcmVudEVsZW1lbnROYW1lKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFBhcmVudEVsZW1lbnROYW1lKFN0cmluZyBwYXJlbnRFbGVtZW50TmFtZSkKLSAgewotICAgIHRoaXMucGFyZW50RWxlbWVudE5hbWUgPSBwYXJlbnRFbGVtZW50TmFtZTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkVudHJ5I2dldEVudHJ5RGV0YWlsKCkKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZ2V0RW50cnlEZXRhaWwoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuZW50cnlEZXRhaWw7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5FbnRyeSNzZXRFbnRyeURldGFpbChPYmplY3QpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFbnRyeURldGFpbChPYmplY3QgZW50cnlEZXRhaWwpCi0gIHsKLSAgICB0aGlzLmVudHJ5RGV0YWlsID0gZW50cnlEZXRhaWw7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5FbnRyeSNnZXRFbnRyeUNvbnRhaW5lcigpCi0gICAqLwotICBwdWJsaWMgRW50cnlDb250YWluZXIgZ2V0RW50cnlDb250YWluZXIoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuZW50cnlDb250YWluZXI7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5FbnRyeSNzZXRFbnRyeUNvbnRhaW5lcihvcmcud3NpLnRlc3QucmVwb3J0LkVudHJ5Q29udGFpbmVyKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RW50cnlDb250YWluZXIoRW50cnlDb250YWluZXIgZW50cnlDb250YWluZXIpCi0gIHsKLSAgICB0aGlzLmVudHJ5Q29udGFpbmVyID0gZW50cnlDb250YWluZXI7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5FbnRyeVJlc3VsdCNhZGRBc3NlcnRpb25SZXN1bHQoQXNzZXJ0aW9uUmVzdWx0KQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkQXNzZXJ0aW9uUmVzdWx0KEFzc2VydGlvblJlc3VsdCBhc3NlcnRpb25SZXN1bHQpCi0gIHsKLSAgICBzdXBlci5hZGRBc3NlcnRpb25SZXN1bHQoYXNzZXJ0aW9uUmVzdWx0KTsKLQotICAgIGlmICh0aGlzLmVudHJ5Q29udGFpbmVyICE9IG51bGwpCi0gICAgICB0aGlzLmVudHJ5Q29udGFpbmVyLmFkZEFzc2VydGlvblJlc3VsdChhc3NlcnRpb25SZXN1bHQpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuRW50cnkjZ2V0U3RhcnRYTUxTdHJpbmcoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTdGFydFhNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSwgYm9vbGVhbiBzaG93TG9nRW50cnksIGJvb2xlYW4gZW52ZWxvcGVBcnRpZmFjdFR5cGUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgU3RyaW5nIG5zTmFtZSA9IG5hbWVzcGFjZU5hbWU7Ci0gICAgaWYgKCghbnNOYW1lLmVxdWFscygiIikgJiYgKCFuc05hbWUuZW5kc1dpdGgoIjoiKSkpKQotICAgICAgbnNOYW1lICs9ICI6IjsKLQotICAgIC8vIENyZWF0ZSBlbGVtZW50IAotICAgIHB3LnByaW50KCIgICAgPCIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiICIpOwotCi0gICAgaWYgKHRoaXMuZW50cnlUeXBlICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKGVudmVsb3BlQXJ0aWZhY3RUeXBlKQotCSAgewotICAgICAgCS8vIHdlIHVzZSB0aGUgc2FtZSBhY3R1YWwgZW50cnkgZm9yIGJvdGggbWVzc2FnZSBhbmQgZW52ZWxvcGUgYXJ0aWZhY3RzCi0gICAgICAJLy8gd2Ugbm93IG5lZWQgdG8gb3V0cHV0IGVudHJ5IHR5cGUgbmFtZXMgdGhhdCBhY3R1YWxseSBwZXJ0YWluIHRvIHRoZSBhcnRpZmFjdCB0eXBlCi0gICAgICAJcHcucHJpbnQoCi0gICAgICAgICAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJfVFlQRSArICI9XCIiICsgZ2V0Q29ycmVzcG9uZGluZ0VudmVsb3BlRW50cnlUeXBlTmFtZSh0aGlzLmVudHJ5VHlwZS5nZXRUeXBlTmFtZSgpKSArICJcIiAiKTsKLQkgIH0KLQkgIGVsc2UKLQkgIHsKLSAgICAgICAgcHcucHJpbnQoCi0gICAgICAgICAgV1NJQ29uc3RhbnRzLkFUVFJfVFlQRSArICI9XCIiICsgdGhpcy5lbnRyeVR5cGUuZ2V0VHlwZU5hbWUoKSArICJcIiAiKTsKLQkgIH0KLSAgICB9Ci0KLSAgICBlbHNlIGlmICh0aGlzLmFydGlmYWN0TmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIHB3LnByaW50KFdTSUNvbnN0YW50cy5BVFRSX1RZUEUgKyAiPVwiWyIgKyB0aGlzLmFydGlmYWN0TmFtZSArICJdXCIgIik7Ci0gICAgfQotCi0gICAgaWYgKHRoaXMucmVmZXJlbmNlSUQgIT0gbnVsbCkKLSAgICAgIHB3LnByaW50KFdTSUNvbnN0YW50cy5BVFRSX1JFRkVSRU5DRV9JRCArICI9XCIiICsgWE1MVXRpbHMueG1sRXNjYXBlZFN0cmluZyh0aGlzLnJlZmVyZW5jZUlEKSArICJcIiAiKTsKLQotCi0gICAgLy8gSWYgc2VydmljZSBuYW1lIHdhcyBzZXQgdGhlbiBhZGQgaXQKLSAgICAvL2lmIChwYXJlbnRFbGVtZW50TmFtZSAhPSBudWxsKSB7Ci0gICAgLy8gIHB3LnByaW50KCIgIiArIFdTSUNvbnN0YW50cy5BVFRSX1BBUkVOVF9FTEVNRU5UX05BTUUgKyAiPVwiIiArIHRoaXMucGFyZW50RWxlbWVudE5hbWUgKyAiXCIiKTsKLSAgICAvL30KLQotICAgIC8vIEFERDogTmVlZCB0byBjaGVjayBmb3IgY29uZmlnIG9wdGlvbiB0aGF0IHNwZWNpZmllcyAKLSAgICAvLyAgICAgIHRoYXQgbG9nIGVudHJpZXMgc2hvdWxkIGJlIGFkZGVkCi0KLSAgICAvLyBJZiB0YXJnZXQgaXMgYSBsb2cgZW50cnksIHRoZW4gYWRkIHJlZmVyZW5jZSB0byBpdAotICAgIGlmICgoZW50cnlUeXBlICE9IG51bGwpICYmIChlbnRyeVR5cGUuZ2V0QXJ0aWZhY3RUeXBlKCkuaXNMb2dnYWJsZSgpKSAmJiAoc2hvd0xvZ0VudHJ5KSkgCi0gICAgewotICAgICAgRG9jdW1lbnRFbGVtZW50IGxvZ0VudHJ5ID0gKERvY3VtZW50RWxlbWVudCkgZW50cnlEZXRhaWw7Ci0gICAgICBwdy5wcmludGxuKCJ2YWx1ZT1cIiIgKyBsb2dFbnRyeS50b1hNTFN0cmluZyhXU0lDb25zdGFudHMuTlNfTkFNRV9XU0lfTE9HKSArICJcIiAiKTsKLSAgICB9Ci0gICAKLSAgICAvLyBFbmQgZWxlbWVudAotICAgIHB3LnByaW50bG4oIj4iKTsKLQotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuRW50cnkjZ2V0U3RhcnRYTUxTdHJpbmcoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTdGFydFhNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSwgYm9vbGVhbiBzaG93TG9nRW50cnkpCi0gIHsKLSAgCXJldHVybiBnZXRTdGFydFhNTFN0cmluZyhuYW1lc3BhY2VOYW1lLCBzaG93TG9nRW50cnksIGZhbHNlKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkVudHJ5I2dldEVuZFhNTFN0cmluZyhTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEVuZFhNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSkKLSAgewotICAgIFN0cmluZyBuc05hbWUgPSBuYW1lc3BhY2VOYW1lOwotICAgIGlmICgoIW5zTmFtZS5lcXVhbHMoIiIpICYmICghbnNOYW1lLmVuZHNXaXRoKCI6IikpKSkKLSAgICAgIG5zTmFtZSArPSAiOiI7Ci0KLSAgICByZXR1cm4gIiAgICA8LyIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiPiI7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LkRvY3VtZW50RWxlbWVudCN0b1hNTFN0cmluZyhTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvWE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKQotICB7Ci0gICAgLy8gUmV0dXJuIHN0cmluZwotICAgIHJldHVybiBnZXRTdGFydFhNTFN0cmluZygiIiwgZmFsc2UpICsgZ2V0RW5kWE1MU3RyaW5nKCIiKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q29ycmVzcG9uZGluZ0VudmVsb3BlRW50cnlUeXBlTmFtZShTdHJpbmcgbWVzc2FnZUVudHJ5VHlwZU5hbWUpCi0gIHsKLSAgCVN0cmluZyBlbnZlbG9wZUVudHJ5VHlwZU5hbWUgPSBtZXNzYWdlRW50cnlUeXBlTmFtZTsKLSAgCWlmIChtZXNzYWdlRW50cnlUeXBlTmFtZSAhPSBudWxsKQotICAJewotICAJaWYgKG1lc3NhZ2VFbnRyeVR5cGVOYW1lLmVxdWFscyhNZXNzYWdlVmFsaWRhdG9yLlRZUEVfTUVTU0FHRV9BTlkpKQotICAJCWVudmVsb3BlRW50cnlUeXBlTmFtZSA9IEVudmVsb3BlVmFsaWRhdG9yLlRZUEVfRU5WRUxPUEVfQU5ZOwotICAJZWxzZSBpZiAobWVzc2FnZUVudHJ5VHlwZU5hbWUuZXF1YWxzKE1lc3NhZ2VWYWxpZGF0b3IuVFlQRV9NRVNTQUdFX1JFUVVFU1QpKQotICAJCWVudmVsb3BlRW50cnlUeXBlTmFtZSA9IEVudmVsb3BlVmFsaWRhdG9yLlRZUEVfRU5WRUxPUEVfUkVRVUVTVDsKLSAgCWVsc2UgaWYgKG1lc3NhZ2VFbnRyeVR5cGVOYW1lLmVxdWFscyhNZXNzYWdlVmFsaWRhdG9yLlRZUEVfTUVTU0FHRV9SRVNQT05TRSkpCi0gIAkJZW52ZWxvcGVFbnRyeVR5cGVOYW1lID0gRW52ZWxvcGVWYWxpZGF0b3IuVFlQRV9FTlZFTE9QRV9SRVNQT05TRTsKLSAgCX0KLQotICAJcmV0dXJuIGVudmVsb3BlRW50cnlUeXBlTmFtZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvRW50cnlSZXN1bHRJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvaW1wbC9FbnRyeVJlc3VsdEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFmZmI3Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvaW1wbC9FbnRyeVJlc3VsdEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuaW1wbDsKLQotaW1wb3J0IGphdmEudXRpbC5UcmVlTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5FbnRyeVJlc3VsdDsKLQotLyoqCi0gKiBSZXN1bHQgZm9yIGEgc3BlY2lmaWMgdGVzdCBhc3NlcnRpb24uCi0gKiAKLSAqIEBhdXRob3IgUGV0ZXIgIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBFbnRyeVJlc3VsdEltcGwgaW1wbGVtZW50cyBFbnRyeVJlc3VsdAotewotICAvKioKLSAgICogQXNzZXJ0aW9uIHJlc3VsdCBsaXN0LgotICAgKi8KLSAgcHJvdGVjdGVkIFRyZWVNYXAgYXNzZXJ0aW9uUmVzdWx0TGlzdCA9IG5ldyBUcmVlTWFwKCk7Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuRW50cnlSZXN1bHQjYWRkQXNzZXJ0aW9uUmVzdWx0KG9yZy53c2kudGVzdC5yZXBvcnQuQXNzZXJ0aW9uUmVzdWx0KQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkQXNzZXJ0aW9uUmVzdWx0KEFzc2VydGlvblJlc3VsdCBhc3NlcnRpb25SZXN1bHQpCi0gIHsKLSAgICB0aGlzLmFzc2VydGlvblJlc3VsdExpc3QucHV0KAotICAgICAgYXNzZXJ0aW9uUmVzdWx0LmdldEFzc2VydGlvbigpLmdldElkKCksCi0gICAgICBhc3NlcnRpb25SZXN1bHQpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuRW50cnlSZXN1bHQjZ2V0QXNzZXJ0aW9uUmVzdWx0TGlzdCgpCi0gICAqLwotICBwdWJsaWMgVHJlZU1hcCBnZXRBc3NlcnRpb25SZXN1bHRMaXN0KCkKLSAgewotICAgIHJldHVybiBhc3NlcnRpb25SZXN1bHRMaXN0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuRW50cnlSZXN1bHQjZ2V0QXNzZXJ0aW9uUmVzdWx0KFN0cmluZykKLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25SZXN1bHQgZ2V0QXNzZXJ0aW9uUmVzdWx0KFN0cmluZyBhc3NlcnRpb25JZCkKLSAgewotICAgIHJldHVybiAoQXNzZXJ0aW9uUmVzdWx0KSBhc3NlcnRpb25SZXN1bHRMaXN0LmdldChhc3NlcnRpb25JZCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9pbXBsL0ZhaWx1cmVEZXRhaWxJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS9yZXBvcnQvaW1wbC9GYWlsdXJlRGV0YWlsSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzdkYzUxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9pbXBsL0ZhaWx1cmVEZXRhaWxJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5pbXBsOwotCi1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5GYWlsdXJlRGV0YWlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuZG9tLkVsZW1lbnRMb2NhdGlvbjsKLQotaW1wb3J0IGNvbS5pYm0ud3NkbC51dGlsLnhtbC5ET01VdGlsczsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIHdpbGwgLi4uCi0gKiAKLSAqIEBhdXRob3IgUGV0ZXIgIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKi8KLXB1YmxpYyBjbGFzcyBGYWlsdXJlRGV0YWlsSW1wbCBpbXBsZW1lbnRzIEZhaWx1cmVEZXRhaWwKLXsKLSAgcHJvdGVjdGVkIFN0cmluZyBmYWlsdXJlTWVzc2FnZSA9IG51bGw7Ci0gIHByb3RlY3RlZCBTdHJpbmcgcmVmZXJlbmNlVHlwZSA9IG51bGw7Ci0gIHByb3RlY3RlZCBTdHJpbmcgcmVmZXJlbmNlSUQgPSBudWxsOwotICBwcm90ZWN0ZWQgRWxlbWVudExvY2F0aW9uIGVsZW1lbnRMb2NhdGlvbiA9IG51bGw7Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuRmFpbHVyZURldGFpbCNnZXRGYWlsdXJlTWVzc2FnZSgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEZhaWx1cmVNZXNzYWdlKCkKLSAgewotICAgIHJldHVybiB0aGlzLmZhaWx1cmVNZXNzYWdlOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuRmFpbHVyZURldGFpbCNzZXRGYWlsdXJlTWVzc2FnZShTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRGYWlsdXJlTWVzc2FnZShTdHJpbmcgZmFpbHVyZU1lc3NhZ2UpCi0gIHsKLSAgICB0aGlzLmZhaWx1cmVNZXNzYWdlID0gZmFpbHVyZU1lc3NhZ2U7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5GYWlsdXJlRGV0YWlsI2dldFJlZmVyZW5jZVR5cGUoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRSZWZlcmVuY2VUeXBlKCkKLSAgewotICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZVR5cGU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5GYWlsdXJlRGV0YWlsI3NldFJlZmVyZW5jZVR5cGUoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UmVmZXJlbmNlVHlwZShTdHJpbmcgcmVmZXJlbmNlVHlwZSkKLSAgewotICAgIHRoaXMucmVmZXJlbmNlVHlwZSA9IHJlZmVyZW5jZVR5cGU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5GYWlsdXJlRGV0YWlsI2dldFJlZmVyZW5jZUlEKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UmVmZXJlbmNlSUQoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMucmVmZXJlbmNlSUQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5GYWlsdXJlRGV0YWlsI3NldFJlZmVyZW5jZUlEbihTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRSZWZlcmVuY2VJRG4oU3RyaW5nIHJlZmVyZW5jZUlEKQotICB7Ci0gICAgdGhpcy5yZWZlcmVuY2VJRCA9IHJlZmVyZW5jZUlEOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuRmFpbHVyZURldGFpbCNnZXRFbGVtZW50TG9jYXRpb24oKQotICAgKi8KLSAgcHVibGljIEVsZW1lbnRMb2NhdGlvbiBnZXRFbGVtZW50TG9jYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIHRoaXMuZWxlbWVudExvY2F0aW9uOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuRmFpbHVyZURldGFpbCNzZXRFbGVtZW50TG9jYXRpb24oRWxlbWVudExvY2F0aW9uKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RWxlbWVudExvY2F0aW9uKEVsZW1lbnRMb2NhdGlvbiBlbGVtZW50TG9jYXRpb24pCi0gIHsKLSAgICB0aGlzLmVsZW1lbnRMb2NhdGlvbiA9IGVsZW1lbnRMb2NhdGlvbjsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50I3RvWE1MU3RyaW5nKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9YTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgU3RyaW5nIG5zTmFtZSA9IG5hbWVzcGFjZU5hbWU7Ci0gICAgaWYgKCghbnNOYW1lLmVxdWFscygiIikgJiYgKCFuc05hbWUuZW5kc1dpdGgoIjoiKSkpKQotICAgICAgbnNOYW1lICs9ICI6IjsKLQotICAgIC8vIENyZWF0ZSBlbGVtZW50IAotICAgIHB3LnByaW50KCIgICAgICA8IiArIG5zTmFtZSArIEVMRU1fTkFNRSArICIgeG1sOmxhbmc9XCJlblwiICIpOwotCi0gICAgaWYgKHRoaXMucmVmZXJlbmNlVHlwZSAhPSBudWxsKQotICAgICAgcHcucHJpbnQoCi0gICAgICAgIFdTSUNvbnN0YW50cy5BVFRSX1JFRkVSRU5DRV9UWVBFICsgIj1cIiIgKyB0aGlzLnJlZmVyZW5jZVR5cGUgKyAiXCIgIik7Ci0KLSAgICBpZiAodGhpcy5yZWZlcmVuY2VJRCAhPSBudWxsKQotICAgICAgcHcucHJpbnQoCi0gICAgICAgIFdTSUNvbnN0YW50cy5BVFRSX1JFRkVSRU5DRV9JRCArICI9XCIiICsgdGhpcy5yZWZlcmVuY2VJRCArICJcIiAiKTsKLQotICAgIC8vIEFERDogTmVlZCB0byB1c2UgYSBkaWZmZXJlbnQgbmFtZXNwYWNlCi0gICAgLyoKLSAgICBpZiAodGhpcy5lbGVtZW50TG9jYXRpb24gIT0gbnVsbCkgewotICAgICAgU3RyaW5nIG5zTmFtZUV4dCA9ICJyZXBvcnRleHQiOwotICAgICAgcHcucHJpbnQoInhtbG5zOiIgKyBuc05hbWVFeHQgKyAiPVwiIiArIFdTSUNvbnN0YW50cy5OU19VUklfV1NJX1JFUE9SVCArICIvZXh0L1wiIik7Ci0gICAgICBwdy5wcmludChuc05hbWVFeHQgKyAiOiIgKyBXU0lDb25zdGFudHMuQVRUUl9MSU5FX05VTUJFUiArICI9XCIiICsgdGhpcy5lbGVtZW50TG9jYXRpb24uZ2V0TGluZU51bWJlcigpICsgIlwiICIpOwotICAgICAgcHcucHJpbnQobnNOYW1lRXh0ICsgIjoiICsgV1NJQ29uc3RhbnRzLkFUVFJfQ09MVU1OX05VTUJFUiArICI9XCIiICsgdGhpcy5lbGVtZW50TG9jYXRpb24uZ2V0Q29sdW1uTnVtYmVyKCkgKyAiXCIgIik7Ci0gICAgfQotICAgICovCi0KLSAgICAvLyBDbG9zZSBzdGFydCBlbGVtZW50Ci0gICAgcHcucHJpbnQoIj4iKTsKLQotICAgIGlmICh0aGlzLmZhaWx1cmVNZXNzYWdlICE9IG51bGwpCi0gICAgICBwdy5wcmludGxuKERPTVV0aWxzLmNsZWFuU3RyaW5nKHRoaXMuZmFpbHVyZU1lc3NhZ2UpKTsKLQotICAgIGlmICh0aGlzLmVsZW1lbnRMb2NhdGlvbiAhPSBudWxsKQotICAgIHsKLSAgICAgIHB3LnByaW50bG4oIiAiKTsKLSAgICAgIHB3LnByaW50KHRoaXMuZWxlbWVudExvY2F0aW9uLnRvU3RyaW5nKCkpOwotICAgIH0KLQotICAgIC8vIEVuZCB0aGUgZWxlbWVudAotICAgIHB3LnByaW50bG4oIiAgICAgIDwvIiArIG5zTmFtZSArIEVMRU1fTkFNRSArICI+Iik7Ci0KLSAgICAvLyBSZXR1cm4gc3RyaW5nCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvUHJlcmVxRmFpbGVkTGlzdEltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9pbXBsL1ByZXJlcUZhaWxlZExpc3RJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViMWRlMjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvUHJlcmVxRmFpbGVkTGlzdEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuaW1wbDsKLQotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUHJlcmVxRmFpbGVkTGlzdDsKLQotLyoqCi0gKiBUaGlzIGludGVyZmFjZSBpcyB1c2VkIHRvIG1haW50YWluIGFuZCBhY2Nlc3MgdGhlIFByZXJlcXVpc2l0ZSBGYWlsZWQgTGlzdC4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIFByZXJlcUZhaWxlZExpc3RJbXBsIGltcGxlbWVudHMgUHJlcmVxRmFpbGVkTGlzdAotewotICAvKioKLSAgICogTGlzdCBvZiB0ZXN0IGFzc2VydGlvbiBJRHMuCi0gICAqLwotICBwcm90ZWN0ZWQgVmVjdG9yIGlkTGlzdCA9IG5ldyBWZWN0b3IoKTsKLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5QcmVyZXFGYWlsZWRMaXN0I2FkZFRlc3RBc3NlcnRpb25JRChqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkVGVzdEFzc2VydGlvbklEKFN0cmluZyBhc3NlcnRpb25JRCkKLSAgewotICAgIGlkTGlzdC5hZGQoYXNzZXJ0aW9uSUQpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQjdG9YTUxTdHJpbmcoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1hNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSkKLSAgewotICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICBQcmludFdyaXRlciBwdyA9IG5ldyBQcmludFdyaXRlcihzdyk7Ci0KLSAgICBTdHJpbmcgbnNOYW1lID0gbmFtZXNwYWNlTmFtZTsKLSAgICBpZiAoKCFuc05hbWUuZXF1YWxzKCIiKSAmJiAoIW5zTmFtZS5lbmRzV2l0aCgiOiIpKSkpCi0gICAgICBuc05hbWUgKz0gIjoiOwotCi0gICAgaWYgKHRoaXMuaWRMaXN0LnNpemUoKSA+IDApCi0gICAgewotICAgICAgLy8gQ3JlYXRlIGVsZW1lbnQgCi0gICAgICBwdy5wcmludGxuKCIgICAgICAgIDwiICsgbnNOYW1lICsgRUxFTV9OQU1FICsgIj4iKTsKLQotICAgICAgLy8gSW5jbHVkZSBlYWNoIHRlc3QgYXNzZXJ0aW9uIElECi0gICAgICBJdGVyYXRvciBpdGVyYXRvciA9IGlkTGlzdC5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgcHcucHJpbnQoCi0gICAgICAgICAgIiAgICAgICAgICA8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX1RFU1RfQVNTRVJUSU9OX0lEICsgIj4iKTsKLSAgICAgICAgcHcucHJpbnQoKFN0cmluZykgaXRlcmF0b3IubmV4dCgpKTsKLSAgICAgICAgcHcucHJpbnRsbigiPC8iICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fVEVTVF9BU1NFUlRJT05fSUQgKyAiPiIpOwotICAgICAgfQotCi0gICAgICAvLyBFbmQgZWxlbWVudAotICAgICAgcHcucHJpbnRsbigiICAgICAgICA8LyIgKyBuc05hbWUgKyBFTEVNX05BTUUgKyAiPiIpOwotICAgIH0KLQotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9pbXBsL1JlcG9ydEFydGlmYWN0SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvUmVwb3J0QXJ0aWZhY3RJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0Mjk5YjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvUmVwb3J0QXJ0aWZhY3RJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5pbXBsOwotCi1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLWltcG9ydCBqYXZhLnV0aWwuVHJlZU1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5FbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydEFydGlmYWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLkFydGlmYWN0VHlwZTsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIGNvbnRhaW5zIGEgcmVwb3J0IGFydGlmYWN0LgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgUmVwb3J0QXJ0aWZhY3RJbXBsIGltcGxlbWVudHMgUmVwb3J0QXJ0aWZhY3QKLXsKLSAgLyoqCi0gICAqIEFydGlmYWN0IHR5cGUuCi0gICAqLwotICBwcm90ZWN0ZWQgQXJ0aWZhY3RUeXBlIGFydGlmYWN0VHlwZSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIEVudHJpZXMuCi0gICAqLwotICBwcm90ZWN0ZWQgVHJlZU1hcCBlbnRyeUxpc3QgPSBuZXcgVHJlZU1hcCgpOwotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LlJlcG9ydEFydGlmYWN0I2dldFR5cGUoKQotICAgKi8KLSAgcHVibGljIEFydGlmYWN0VHlwZSBnZXRUeXBlKCkKLSAgewotICAgIHJldHVybiB0aGlzLmFydGlmYWN0VHlwZTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LlJlcG9ydEFydGlmYWN0I3NldFR5cGUoQXJ0aWZhY3RUeXBlKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VHlwZShBcnRpZmFjdFR5cGUgYXJ0aWZhY3RUeXBlKQotICB7Ci0gICAgdGhpcy5hcnRpZmFjdFR5cGUgPSBhcnRpZmFjdFR5cGU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5SZXBvcnRBcnRpZmFjdCNhZGRFbnRyeShFbnRyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEVudHJ5KEVudHJ5IGVudHJ5KQotICB7Ci0gICAgLy8gQWRkIGVudHJ5Ci0gICAgaWYgKGVudHJ5LmdldEVudHJ5VHlwZSgpICE9IG51bGwpCi0gICAgICB0aGlzLmVudHJ5TGlzdC5wdXQoZW50cnkuZ2V0RW50cnlUeXBlKCkuZ2V0VHlwZU5hbWUoKSwgZW50cnkpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuUmVwb3J0QXJ0aWZhY3QjZ2V0RW50cnlMaXN0KCkKLSAgICovCi0gIHB1YmxpYyBUcmVlTWFwIGdldEVudHJ5TGlzdCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5lbnRyeUxpc3Q7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5SZXBvcnRBcnRpZmFjdCNnZXRTdGFydFhNTFN0cmluZyhTdHJpbmcpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFN0YXJ0WE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIFN0cmluZyBuc05hbWUgPSBuYW1lc3BhY2VOYW1lOwotICAgIGlmICgoIW5zTmFtZS5lcXVhbHMoIiIpICYmICghbnNOYW1lLmVuZHNXaXRoKCI6IikpKSkKLSAgICAgIG5zTmFtZSArPSAiOiI7Ci0KLSAgICAvLyBDcmVhdGUgZWxlbWVudCAKLSAgICBwdy5wcmludCgiICA8IiArIG5zTmFtZSArIEVMRU1fTkFNRSArICIgIik7Ci0gICAgcHcucHJpbnQoCi0gICAgICBXU0lDb25zdGFudHMuQVRUUl9UWVBFICsgIj1cIiIgKyB0aGlzLmFydGlmYWN0VHlwZS5nZXRUeXBlTmFtZSgpICsgIlwiPiIpOwotCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5SZXBvcnRBcnRpZmFjdCNnZXRFbmRYTUxTdHJpbmcoU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRFbmRYTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmcgbnNOYW1lID0gbmFtZXNwYWNlTmFtZTsKLSAgICBpZiAoKCFuc05hbWUuZXF1YWxzKCIiKSAmJiAoIW5zTmFtZS5lbmRzV2l0aCgiOiIpKSkpCi0gICAgICBuc05hbWUgKz0gIjoiOwotCi0gICAgcmV0dXJuICIgIDwvIiArIG5zTmFtZSArIEVMRU1fTkFNRSArICI+IjsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRFbGVtZW50I3RvWE1MU3RyaW5nKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9YTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICAvLyBSZXR1cm4gc3RyaW5nCi0gICAgcmV0dXJuIGdldFN0YXJ0WE1MU3RyaW5nKCIiKSArIGdldEVuZFhNTFN0cmluZygiIik7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvUmVwb3J0SW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvUmVwb3J0SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZGIxMmYwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9pbXBsL1JlcG9ydEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LmltcGw7Ci0KLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5Mb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5BcnRpZmFjdFJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkFzc2VydGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LkVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuRW50cnlDb250YWluZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5GYWlsdXJlRGV0YWlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0QXJ0aWZhY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnRDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlRlc3RVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC5VdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotCi0vKioKLSAqIFdTLUkgY29uZm9ybWFuY2UgdGVzdCByZXBvcnQuCi0gKgotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgUmVwb3J0SW1wbCBpbXBsZW1lbnRzIFJlcG9ydAotewotICAvKioKLSAgICogUmVwb3J0IGZpbGVuYW1lLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBmaWxlbmFtZSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFJlcG9ydCBjb250ZXh0LgotICAgKi8KLSAgcHJvdGVjdGVkIFJlcG9ydENvbnRleHQgcmVwb3J0Q29udGV4dCA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIExvZyBmaWxlLgotICAgKi8KLSAgcHJvdGVjdGVkIExvZyBsb2cgPSBudWxsOwotCi0gIC8qKgotICAgKiBTdW1tYXJ5IGFsbCBwYXNzZWQgZmxhZy4KLSAgICovCi0gIHByb3RlY3RlZCBib29sZWFuIGFsbFBhc3NlZCA9IHRydWU7Ci0KLSAgLyoqCi0gICAqIFRlc3QgY292ZXJhZ2UuCi0gICAqLwotICAvL3Byb3RlY3RlZCBUZXN0Q292ZXJhZ2UgdGVzdENvdmVyYWdlOwotCi0gIC8qKgotICAgKiBBcnRpZmFjdCBsaXN0LgotICAgKi8KLSAgcHJvdGVjdGVkIFZlY3RvciBhcnRpZmFjdExpc3QgPSBuZXcgVmVjdG9yKCk7Ci0KLSAgLyoqCi0gICAqIEVudHJ5IGxpc3QuCi0gICAqLwotICBwcm90ZWN0ZWQgVmVjdG9yIGVudHJ5TGlzdCA9IG5ldyBWZWN0b3IoKTsKLQotICAvKioKLSAgICogQ3VycmVudCBhcnRpZmFjdC4KLSAgICovCi0gIHByb3RlY3RlZCBSZXBvcnRBcnRpZmFjdCBjdXJyZW50QXJ0aWZhY3QgPSBudWxsOwotCi0gIC8qKgotICAgKiBDdXJyZW50IGVudHJ5LgotICAgKi8KLSAgcHJvdGVjdGVkIEVudHJ5IGN1cnJlbnRFbnRyeSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFByZXJlcSB0eXBlLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBwcmVyZXFUeXBlOwotCi0gIC8qKgotICAgKiBDcmVhdGUgYSBuZXcgY29uZm9ybWFuY2UgcmVwb3J0LgotICAgKi8KLSAgcHVibGljIFJlcG9ydEltcGwoKQotICB7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LldTSURvY3VtZW50I2dldExvY2F0aW9uKCkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9jYXRpb24oKQotICB7Ci0gICAgLy8gR2V0IHJlcG9ydCBVUkkKLSAgICAvL3JldHVybiByZXBvcnRVUkk7Ci0gICAgcmV0dXJuIHRoaXMuZmlsZW5hbWU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LldTSURvY3VtZW50I3NldExvY2F0aW9uKGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRMb2NhdGlvbihTdHJpbmcgcmVwb3J0VVJJKQotICB7Ci0gICAgdGhpcy5maWxlbmFtZSA9IHJlcG9ydFVSSTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LlJlcG9ydCNnZXRSZXBvcnRDb250ZXh0KCkKLSAgICovCi0gIHB1YmxpYyBSZXBvcnRDb250ZXh0IGdldFJlcG9ydENvbnRleHQoKQotICB7Ci0gICAgcmV0dXJuIHRoaXMucmVwb3J0Q29udGV4dDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LlJlcG9ydCNzZXRSZXBvcnRDb250ZXh0KG9yZy53c2kudGVzdC5yZXBvcnQuUmVwb3J0Q29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFJlcG9ydENvbnRleHQoUmVwb3J0Q29udGV4dCByZXBvcnRDb250ZXh0KQotICB7Ci0gICAgLy8gU2F2ZSBpbnB1dCByZWZlcmVuY2VzCi0gICAgdGhpcy5yZXBvcnRDb250ZXh0ID0gcmVwb3J0Q29udGV4dDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LlJlcG9ydCNnZXRDdXJyZW50QXJ0aWZhY3QoKQotICAgKi8KLSAgcHVibGljIFJlcG9ydEFydGlmYWN0IGdldEN1cnJlbnRBcnRpZmFjdCgpCi0gIHsKLSAgICAvLyBSZXR1cm4gYXJ0aWZhY3QKLSAgICByZXR1cm4gdGhpcy5jdXJyZW50QXJ0aWZhY3Q7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNzZXRDdXJyZW50QXJ0aWZhY3Qob3JnLndzaS50ZXN0LnJlcG9ydC5SZXBvcnRBcnRpZmFjdCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEN1cnJlbnRBcnRpZmFjdChSZXBvcnRBcnRpZmFjdCBhcnRpZmFjdCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gU2F2ZSByZWZlcmVuY2UgdG8gYXJ0aWZhY3QKLSAgICBhcnRpZmFjdExpc3QuYWRkKGFydGlmYWN0KTsKLQotICAgIC8vIFNldCBhcyBjdXJyZW50IGFydGlmYWN0Ci0gICAgdGhpcy5jdXJyZW50QXJ0aWZhY3QgPSBhcnRpZmFjdDsKLQotICAgIC8vIFNldCBkZWZhdWx0IHByZXJlcSBwcm9jZXNzaW5nCi0gICAgdGhpcy5wcmVyZXFUeXBlID0gUFJFUkVRX1RZUEVfRU5UUlk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNlbmRDdXJyZW50QXJ0aWZhY3QoKQotICAgKi8KLSAgcHVibGljIHZvaWQgZW5kQ3VycmVudEFydGlmYWN0KCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gUmVtb3ZlIGN1cnJlbnQgYXJ0aWZhY3QKLSAgICB0aGlzLmN1cnJlbnRBcnRpZmFjdCA9IG51bGw7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNhZGRBcnRpZmFjdFJlZmVyZW5jZShvcmcud3NpLnRlc3QucmVwb3J0LkFydGlmYWN0UmVmZXJlbmNlKQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkQXJ0aWZhY3RSZWZlcmVuY2UoQXJ0aWZhY3RSZWZlcmVuY2UgYXJ0aWZhY3RSZWZlcmVuY2UpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gQUREOiBIb3cgc2hvdWxkIHRoaXMgYmUgc2F2ZWQ/ICBTaG91bGQgaXQgYmUgYWRkZWQgdG8gdGhlIGN1cnJlbnQgYXJ0aWZhY3Q/Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5SZXBvcnQjZ2V0Q3VycmVudEVudHJ5KCkKLSAgICovCi0gIHB1YmxpYyBFbnRyeSBnZXRDdXJyZW50RW50cnkoKQotICB7Ci0gICAgLy8gUmV0dXJuIGVudHJ5Ci0gICAgcmV0dXJuIHRoaXMuY3VycmVudEVudHJ5OwotICB9Ci0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LlJlcG9ydCNnZXRDdXJyZW50RW50cnkoKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q3VycmVudEVudmVsb3BlRW50cnkoRW50cnkgZW50cnkpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIAotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNzZXRDdXJyZW50RW50cnkob3JnLndzaS50ZXN0LnJlcG9ydC5FbnRyeSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEN1cnJlbnRFbnRyeShFbnRyeSBlbnRyeSkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gU2F2ZSByZWZlcmVuY2UgdG8gZW50cnkKLSAgICBlbnRyeUxpc3QuYWRkKGVudHJ5KTsKLQotICAgIC8vIFNldCBhcyBjdXJyZW50IGVudHJ5Ci0gICAgdGhpcy5jdXJyZW50RW50cnkgPSBlbnRyeTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgZ2V0RW50cmllcy4KLSAgICogQHJldHVybiBlbnRyeSBsaXN0LgotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0RW50cmllcygpCi0gIHsKLSAgICByZXR1cm4gZW50cnlMaXN0OwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBnZXRBcnRpZmFjdHMuCi0gICAqIEByZXR1cm4gYXJ0aWZhY3RzLgotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0QXJ0aWZhY3RzKCkKLSAgewotICAgIHJldHVybiBhcnRpZmFjdExpc3Q7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNlbmRDdXJyZW50RW50cnkoKQotICAgKi8KLSAgcHVibGljIHZvaWQgZW5kQ3VycmVudEVudHJ5KCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gUmVtb3ZlIGN1cnJlbnQgZW50cnkKLSAgICB0aGlzLmN1cnJlbnRFbnRyeSA9IG51bGw7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNhZGRBc3NlcnRpb25SZXN1bHQob3JnLndzaS50ZXN0LnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRBc3NlcnRpb25SZXN1bHQoQXNzZXJ0aW9uUmVzdWx0IGFzc2VydGlvblJlc3VsdCkKLSAgewotICAgIC8vIEFERDogTmVlZCB0byBrZWVwIGp1c3QgYSBzdW1tYXJ5IAotCi0gICAgLy8gQWRkIHJlc3VsdCB0byBjdXJyZW50IGVudHJ5Ci0gICAgaWYgKGN1cnJlbnRFbnRyeSAhPSBudWxsKQotICAgIHsKLSAgICAgIGN1cnJlbnRFbnRyeS5hZGRBc3NlcnRpb25SZXN1bHQoYXNzZXJ0aW9uUmVzdWx0KTsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGUgcmVzdWx0IHdhcyBub3QgcGFzc2VkLCB0aGVuIHNldCBzdW1tYXJ5IGZsYWcKLSAgICBpZiAoYXNzZXJ0aW9uUmVzdWx0LmdldFJlc3VsdCgpLmVxdWFscyhBc3NlcnRpb25SZXN1bHQuUkVTVUxUX0ZBSUxFRCkpCi0gICAgewotICAgICAgYWxsUGFzc2VkID0gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQnVpbGRSZXBvcnQjZ2V0QXNzZXJ0aW9uUmVzdWx0KGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uUmVzdWx0IGdldEFzc2VydGlvblJlc3VsdChTdHJpbmcgYXNzZXJ0aW9uSWQpCi0gIHsKLSAgICBBc3NlcnRpb25SZXN1bHQgcmVzdWx0ID0gbnVsbDsKLQotICAgIC8vIERldGVybWluZSB3aGVyZSB0byBnZXQgdGhlIGFzc2VydGlvbiByZXN1bHQgZnJvbSAKLSAgICBpZiAodGhpcy5wcmVyZXFUeXBlLmVxdWFscyhQUkVSRVFfVFlQRV9FTlRSWSkpCi0gICAgICByZXN1bHQgPSBjdXJyZW50RW50cnkuZ2V0QXNzZXJ0aW9uUmVzdWx0KGFzc2VydGlvbklkKTsKLSAgICBlbHNlCi0gICAgICByZXN1bHQgPSBjdXJyZW50RW50cnkuZ2V0RW50cnlDb250YWluZXIoKS5nZXRBc3NlcnRpb25SZXN1bHQoYXNzZXJ0aW9uSWQpOwotCi0gICAgLy8gdGhlIGFzc2VydGlvbiByZXN1bHQgaXMgbm90IGZvdW5kIGF0IHRoZSBjdXJyZW50IGVudHJ5LCBnb2luZyB0aHJvdWdoIGFsbCB0aGUgZW50cmllcwotICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGVudHJ5TGlzdC5zaXplKCk7IGkgKyspCi0gICAgICB7Ci0gICAgICAgIEVudHJ5IGVudHJ5ID0gKEVudHJ5KSBlbnRyeUxpc3QuZ2V0KGkpOwotICAgICAgICBpZiAoKHJlc3VsdCA9IGVudHJ5LmdldEFzc2VydGlvblJlc3VsdChhc3NlcnRpb25JZCkpICE9IG51bGwpCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNjcmVhdGVBc3NlcnRpb25SZXN1bHQoKQotICAgKi8KLSAgcHVibGljIEFzc2VydGlvblJlc3VsdCBjcmVhdGVBc3NlcnRpb25SZXN1bHQoKQotICB7Ci0gICAgQXNzZXJ0aW9uUmVzdWx0IGFzc2VydGlvblJlc3VsdCA9IG5ldyBBc3NlcnRpb25SZXN1bHRJbXBsKCk7Ci0gICAgYXNzZXJ0aW9uUmVzdWx0LnNldEFzc2VydGlvblJlc3VsdHNPcHRpb24oCi0gICAgICByZXBvcnRDb250ZXh0Ci0gICAgICAgIC5nZXRBbmFseXplcigpCi0gICAgICAgIC5nZXRBbmFseXplckNvbmZpZygpCi0gICAgICAgIC5nZXRBc3NlcnRpb25SZXN1bHRzT3B0aW9uKCkpOwotICAgIHJldHVybiBhc3NlcnRpb25SZXN1bHQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNjcmVhdGVFbnRyeSgpCi0gICAqLwotICBwdWJsaWMgRW50cnkgY3JlYXRlRW50cnkoKQotICB7Ci0gICAgRW50cnkgZW50cnkgPSBuZXcgRW50cnlJbXBsKCk7Ci0gICAgLy9lbnRyeS5zZXRBc3NlcnRpb25SZXN1bHRzT3B0aW9uKHJlcG9ydENvbnRleHQuZ2V0QW5hbHl6ZXIoKS5nZXRBbmFseXplckNvbmZpZygpLmdldEFzc2VydGlvblJlc3VsdHNPcHRpb24oKSk7Ci0gICAgcmV0dXJuIGVudHJ5OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQnVpbGRSZXBvcnQjY3JlYXRlRW50cnlDb250YWluZXIoKQotICAgKi8KLSAgcHVibGljIEVudHJ5Q29udGFpbmVyIGNyZWF0ZUVudHJ5Q29udGFpbmVyKCkKLSAgewotICAgIEVudHJ5Q29udGFpbmVyIGVudHJ5Q29udGFpbmVyID0gbmV3IEVudHJ5Q29udGFpbmVySW1wbCgpOwotICAgIHJldHVybiBlbnRyeUNvbnRhaW5lcjsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkJ1aWxkUmVwb3J0I2NyZWF0ZUFydGlmYWN0KCkKLSAgICovCi0gIHB1YmxpYyBSZXBvcnRBcnRpZmFjdCBjcmVhdGVBcnRpZmFjdCgpCi0gIHsKLSAgICBSZXBvcnRBcnRpZmFjdCByZXBvcnRBcnRpZmFjdCA9IG5ldyBSZXBvcnRBcnRpZmFjdEltcGwoKTsKLSAgICByZXR1cm4gcmVwb3J0QXJ0aWZhY3Q7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNjcmVhdGVGYWlsdXJlRGV0YWlsKCkKLSAgICovCi0gIHB1YmxpYyBGYWlsdXJlRGV0YWlsIGNyZWF0ZUZhaWx1cmVEZXRhaWwoKQotICB7Ci0gICAgRmFpbHVyZURldGFpbCBmYWlsdXJlRGV0YWlsID0gbmV3IEZhaWx1cmVEZXRhaWxJbXBsKCk7Ci0gICAgcmV0dXJuIGZhaWx1cmVEZXRhaWw7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5SZXBvcnQjZ2V0U3VtbWFyeVJlc3VsdCgpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFN1bW1hcnlSZXN1bHQoKQotICB7Ci0gICAgcmV0dXJuICgKLSAgICAgIGFsbFBhc3NlZAotICAgICAgICA/IEFzc2VydGlvblJlc3VsdC5SRVNVTFRfUEFTU0VECi0gICAgICAgIDogQXNzZXJ0aW9uUmVzdWx0LlJFU1VMVF9GQUlMRUQpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuQnVpbGRSZXBvcnQjc2V0UHJlcmVxVHlwZShqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0UHJlcmVxVHlwZShTdHJpbmcgcHJlcmVxVHlwZSkKLSAgewotICAgIHRoaXMucHJlcmVxVHlwZSA9IHByZXJlcVR5cGU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCN0b1N0cmluZygpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIC8vIEFERDogCi0gICAgcmV0dXJuICJSZXBvcnQ6ICAiOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuUmVwb3J0I2dldFN0YXJ0WE1MU3RyaW5nKGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFN0YXJ0WE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIFN0cmluZyBuc05hbWUgPSBuYW1lc3BhY2VOYW1lOwotICAgIGlmICgoIW5zTmFtZS5lcXVhbHMoIiIpICYmICghbnNOYW1lLmVuZHNXaXRoKCI6IikpKSkKLSAgICAgIG5zTmFtZSArPSAiOiI7Ci0KLSAgICAvLyBDcmVhdGUgcmVwb3J0IGVsZW1lbnQgCi0gICAgcHcucHJpbnRsbihXU0lDb25zdGFudHMuWE1MX0RFQ0wpOwotICAgIHB3LnByaW50bG4oCi0gICAgICByZXBvcnRDb250ZXh0Ci0gICAgICAgIC5nZXRBbmFseXplcigpCi0gICAgICAgIC5nZXRBbmFseXplckNvbmZpZygpCi0gICAgICAgIC5nZXRBZGRTdHlsZVNoZWV0KCkKLSAgICAgICAgLmdldFN0eWxlU2hlZXRTdHJpbmcoKSk7Ci0KLSAgICAvLyBBZGQgWE1MIGNvbW1lbnQKLSAgICBTdHJpbmcgY29tbWVudDsKLSAgICBpZiAoKGNvbW1lbnQgPSBUZXN0VXRpbHMuZ2V0WE1MQ29tbWVudCgpKSAhPSBudWxsKQotICAgICAgcHcucHJpbnQoY29tbWVudCk7Ci0KLSAgICAvLyByZXBvcnQKLSAgICBwdy5wcmludCgKLSAgICAgICI8IgotICAgICAgICArIG5zTmFtZQotICAgICAgICArIEVMRU1fTkFNRQotICAgICAgICArICIgIgotICAgICAgICArIFdTSUNvbnN0YW50cy5BVFRSX05BTUUKLSAgICAgICAgKyAiPVwiIgotICAgICAgICArIHJlcG9ydENvbnRleHQuZ2V0UmVwb3J0VGl0bGUoKQotICAgICAgICArICJcIiIpOwotICAgIHB3LnByaW50bG4oCi0gICAgICAiICAgICIKLSAgICAgICAgKyBXU0lDb25zdGFudHMuQVRUUl9USU1FU1RBTVAKLSAgICAgICAgKyAiPVwiIgotICAgICAgICArIFV0aWxzLmdldFRpbWVzdGFtcCgpCi0gICAgICAgICsgIlwiIik7Ci0gICAgcHcucHJpbnRsbigiICAgIHhtbG5zPVwiIiArIFdTSUNvbnN0YW50cy5OU19VUklfV1NJX1JFUE9SVCArICJcIiIpOwotICAgIHB3LnByaW50bG4oCi0gICAgICAiICAgIHhtbG5zOiIKLSAgICAgICAgKyBXU0lDb25zdGFudHMuTlNfTkFNRV9XU0lfUkVQT1JUCi0gICAgICAgICsgIj1cIiIKLSAgICAgICAgKyBXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9SRVBPUlQKLSAgICAgICAgKyAiXCIiKTsKLSAgICBwdy5wcmludGxuKAotICAgICAgIiAgICB4bWxuczoiCi0gICAgICAgICsgV1NJQ29uc3RhbnRzLk5TX05BTUVfV1NJX0xPRwotICAgICAgICArICI9XCIiCi0gICAgICAgICsgV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0lfTE9HCi0gICAgICAgICsgIlwiIik7Ci0gICAgLy9wdy5wcmludGxuKCIgICAgeG1sbnM6IiArIFdTSUNvbnN0YW50cy5OU19OQU1FX1dTSV9DT01NT04gKyAiPVwiIiArIFdTSUNvbnN0YW50cy5OU19VUklfV1NJX0NPTU1PTiArICJcIiIpOwotICAgIHB3LnByaW50bG4oCi0gICAgICAiICAgIHhtbG5zOiIKLSAgICAgICAgKyBXU0lDb25zdGFudHMuTlNfTkFNRV9XU0lfQU5BTFlaRVJfQ09ORklHCi0gICAgICAgICsgIj1cIiIKLSAgICAgICAgKyBXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9BTkFMWVpFUl9DT05GSUcKLSAgICAgICAgKyAiXCIiKTsKLSAgICBwdy5wcmludGxuKAotICAgICAgIiAgICB4bWxuczoiCi0gICAgICAgICsgV1NJQ29uc3RhbnRzLk5TX05BTUVfV1NJX01PTklUT1JfQ09ORklHCi0gICAgICAgICsgIj1cIiIKLSAgICAgICAgKyBXU0lDb25zdGFudHMuTlNfVVJJX1dTSV9NT05JVE9SX0NPTkZJRwotICAgICAgICArICJcIiIpOwotICAgIHB3LnByaW50bG4oCi0gICAgICAiICAgIHhtbG5zOiIKLSAgICAgICAgKyBXU0lDb25zdGFudHMuTlNfTkFNRV9XU0lfQVNTRVJUSU9OUwotICAgICAgICArICI9XCIiCi0gICAgICAgICsgV1NJQ29uc3RhbnRzLk5TX1VSSV9XU0lfQVNTRVJUSU9OUwotICAgICAgICArICJcIiIpOwotICAgIHB3LnByaW50bG4oCi0gICAgICAiICAgIHhtbG5zOiIKLSAgICAgICAgKyBXU0lDb25zdGFudHMuTlNfTkFNRV9YU0kKLSAgICAgICAgKyAiPVwiIgotICAgICAgICArIFdTSUNvbnN0YW50cy5OU19VUklfWFNJCi0gICAgICAgICsgIlwiPiIpOwotCi0gICAgLy8gQWRkICBhbmFseXplciB0b29sIGluZm8KLSAgICBwdy5wcmludChyZXBvcnRDb250ZXh0LmdldEFuYWx5emVyKCkudG9YTUxTdHJpbmcobnNOYW1lKSk7Ci0KLSAgICAvLyBSZXR1cm4gWE1MIHN0cmluZwotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuUmVwb3J0I2dldEVuZFhNTFN0cmluZyhqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRFbmRYTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgU3RyaW5nIG5zTmFtZSA9IG5hbWVzcGFjZU5hbWU7Ci0gICAgaWYgKCghbnNOYW1lLmVxdWFscygiIikgJiYgKCFuc05hbWUuZW5kc1dpdGgoIjoiKSkpKQotICAgICAgbnNOYW1lICs9ICI6IjsKLQotICAgIC8vIEJ1aWxkIHN1bW1hcnkKLSAgICBwdy5wcmludCgiICA8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX1NVTU1BUlkgKyAiICIpOwotICAgIHB3LnByaW50bG4oV1NJQ29uc3RhbnRzLkFUVFJfUkVTVUxUICsgIj1cIiIgKyBnZXRTdW1tYXJ5UmVzdWx0KCkgKyAiXCI+Iik7Ci0KLSAgICAvLyBBREQ6ICBEZXRhaWwgc3VtbWFyeQotICAgIC8qCi0gICAgcHcucHJpbnQoIiAgICA8IiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX0FSVElGQUNUX1NVTU1BUlkgKyAiICIpOwotICAgIHB3LnByaW50bG4oV1NJQ29uc3RhbnRzLkFUVFJfUkVTVUxUICsgIj1cInh4eHhcIj4iKTsKLSAgICAKLSAgICBwdy5wcmludGxuKCIgICAgPC8iICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fQVJUSUZBQ1RfU1VNTUFSWSArICI+Iik7Ci0gICAgKi8KLQotICAgIC8vIEVuZCBlbGVtZW50IAotICAgIHB3LnByaW50bG4oIiAgPC8iICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fU1VNTUFSWSArICI+Iik7Ci0KLSAgICAvLyBFbmQgcmVwb3J0IGVsZW1lbnQgCi0gICAgcHcucHJpbnRsbigiPC8iICsgbnNOYW1lICsgRUxFTV9OQU1FICsgIj4iKTsKLQotICAgIC8vIFJldHVybiBYTUwgc3RyaW5nCi0gICAgcmV0dXJuIHN3LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5SZXBvcnQjZ2V0RXJyb3JYTUxTdHJpbmcoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RXJyb3JYTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUsIFN0cmluZyBlcnJvckRldGFpbCkKLSAgewotICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICBQcmludFdyaXRlciBwdyA9IG5ldyBQcmludFdyaXRlcihzdyk7Ci0KLSAgICBTdHJpbmcgbnNOYW1lID0gbmFtZXNwYWNlTmFtZTsKLSAgICBpZiAoKCFuc05hbWUuZXF1YWxzKCIiKSAmJiAoIW5zTmFtZS5lbmRzV2l0aCgiOiIpKSkpCi0gICAgICBuc05hbWUgKz0gIjoiOwotCi0gICAgLy8gQnVpbGQgYW5hbHl6ZXIgZmFpbHVyZQotICAgIHB3LnByaW50bG4oIiAgPCIgKyBuc05hbWUgKyBXU0lDb25zdGFudHMuRUxFTV9BTkFMWVpFUl9GQUlMVVJFICsgIj4iKTsKLQotICAgIC8vIEFkZCBlcnJvciBkZXRhaWwKLSAgICBwdy5wcmludCgiICAgIDwiICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fRkFJTFVSRV9ERVRBSUwgKyAiPiIpOwotICAgIHB3LnByaW50KFhNTFV0aWxzLnhtbEVzY2FwZWRTdHJpbmcoZXJyb3JEZXRhaWwpKTsKLSAgICBwdy5wcmludGxuKCIgICAgPC8iICsgbnNOYW1lICsgV1NJQ29uc3RhbnRzLkVMRU1fRkFJTFVSRV9ERVRBSUwgKyAiPiIpOwotCi0gICAgLy8gRW5kIHJlcG9ydCBlbGVtZW50IAotICAgIHB3LnByaW50bG4oIjwvIiArIG5zTmFtZSArIFdTSUNvbnN0YW50cy5FTEVNX0FOQUxZWkVSX0ZBSUxVUkUgKyAiPiIpOwotCi0gICAgLy8gRW5kIHJlcG9ydCBlbGVtZW50IAotICAgIHB3LnByaW50bG4oIjwvIiArIG5zTmFtZSArIEVMRU1fTkFNRSArICI+Iik7Ci0KLSAgICAvLyBSZXR1cm4gWE1MIHN0cmluZwotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5kb2N1bWVudC5Eb2N1bWVudEVsZW1lbnQjdG9YTUxTdHJpbmcoamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gcHVibGljIFN0cmluZyB0b1hNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSkKLSAgewotICAgIHJldHVybiBnZXRTdGFydFhNTFN0cmluZyhuYW1lc3BhY2VOYW1lKSArIGdldEVuZFhNTFN0cmluZyhuYW1lc3BhY2VOYW1lKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvUmVwb3J0V3JpdGVySW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvcmVwb3J0L2ltcGwvUmVwb3J0V3JpdGVySW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2VlYjM1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3JlcG9ydC9pbXBsL1JlcG9ydFdyaXRlckltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuaW1wbDsKLQotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5Xcml0ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuaW1wbC5Eb2N1bWVudFdyaXRlckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnRXcml0ZXI7Ci0KLS8qKgotICogRGVmaW5lcyB0aGUgaW50ZXJmYWNlIHVzZWQgdG8gd3JpdGUgdGhlIENvbmZvcm1hbmNlIFhNTCBkb2N1bWVudHMuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIFJlcG9ydFdyaXRlckltcGwKLSAgZXh0ZW5kcyBEb2N1bWVudFdyaXRlckltcGwKLSAgaW1wbGVtZW50cyBSZXBvcnRXcml0ZXIKLXsKLSAgLyoqCi0gICAqIFJlcG9ydCB3cml0ZXIuCi0gICAqLwotICBwdWJsaWMgUmVwb3J0V3JpdGVySW1wbCgpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBXcml0ZSB0aGUgZW50aXJlIGNvbnRlbnRzIG9mIHRoZSBkb2N1bWVudCB1c2luZyB0aGUgd3JpdGVyCi0gICAqIHRoYXQgd2FzIHByZXZpb3VzbHkgc2V0IHVzaW5nIHRoZSBzZXRXcml0ZXIgbWV0aG9kLgotICAgKi8KLSAgcHVibGljIHZvaWQgd3JpdGUoUmVwb3J0IHJlcG9ydCkgdGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gSWYgd3JpdGVyIHdhcyBub3Qgc2V0IHByZXZpb3VzbHksIHRoZW4gdGhyb3cgZXhjZXB0aW9uCi0gICAgaWYgKHdyaXRlciA9PSBudWxsKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIlJlcG9ydCB3cml0ZXIgbXVzdCBiZSBzZXQgYmVmb3JlIHdyaXRpbmcgcmVwb3J0LiIpOwotICAgIH0KLQotICAgIC8vIFdyaXRlIHJlcG9ydAotICAgIHdyaXRlKHJlcG9ydCwgdGhpcy53cml0ZXIpOwotICB9Ci0KLSAgLyoqCi0gICAqIFdyaXRlIHRoZSBlbnRpcmUgY29udGVudHMgb2YgdGhlIGRvY3VtZW50LgotICAgKi8KLSAgcHVibGljIHZvaWQgd3JpdGUoUmVwb3J0IHJlcG9ydCwgV3JpdGVyIHdyaXRlcikKLSAgewotICAgIC8vIENyZWF0ZSBwcmludCB3cml0ZXIKLSAgICBuZXcgUHJpbnRXcml0ZXIod3JpdGVyKTsKLQotICAgIC8vIEFERDogV3JpdGUgb3V0IGNvbXBsZXRlIHJlcG9ydAotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS90b29saW5mby5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdG9vbGluZm8ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTEzMDRjNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS90b29saW5mby5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotIyAvKioKLSMgICogPGNvcHlyaWdodD4KLSMgICoKLSMgICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDMgIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jICAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jICAqIAotIyAgKiBDb250cmlidXRvcnM6IAotIyAgKiAgIElCTSAgICAgIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jICAqIDwvY29weXJpZ2h0PgotIyAgKi8KLQotd3NpLnRvb2wudmVyc2lvbj0xLjAuMAotd3NpLnRvb2wucmVsZWFzZS5kYXRlPTIwMDUtMDQtMTUKLXdzaS50b29sLmltcGxlbWVudGVyPUVjbGlwc2Uub3JnIE9yZ2FuaXphdGlvbgotd3NpLnRvb2wubG9jYXRpb249aHR0cDovL3d3dy5lY2xpcHNlLm9yZy93c3QKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvQXJ0aWZhY3RUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL0FydGlmYWN0VHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOTY2N2IzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvQXJ0aWZhY3RUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLldTSVRlc3RUb29sc1BsdWdpbjsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIC4uLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgQXJ0aWZhY3RUeXBlCi17Ci0gIC8qKgotICAgKiBUaGlzIHR5cGUuCi0gICAqLwotICBwcml2YXRlIFN0cmluZyB0eXBlOwotCi0gIHByaXZhdGUgc3RhdGljIE1hcCB0eXBlTWFwOwotICBwcml2YXRlIHN0YXRpYyBMaXN0IGxvZ2dhYmxlQXJ0aWZhY3RUeXBlczsgCi0KLSAgLyoqCi0gICAqIFJlcG9ydEFydGlmYWN0IHR5cGVzLgotICAgKi8KLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBFbnZlbG9wZVZhbGlkYXRvci5UWVBFX0VOVkVMT1BFICoqLyAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9FTlZFTE9QRSA9ICJlbnZlbG9wZSI7Ci0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgTWVzc2FnZVZhbGlkYXRvci5UWVBFX01FU1NBR0UgKiovIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX01FU1NBR0UgPSAibWVzc2FnZSI7Ci0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgV1NETFZhbGlkYXRvci5UWVBFX0RFU0NSSVBUSU9OICoqLyAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9ERVNDUklQVElPTiA9ICJkZXNjcmlwdGlvbiI7Ci0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgVURESVZhbGlkYXRvci5UWVBFX0RJU0NPVkVSWSAqKi8gCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfRElTQ09WRVJZID0gImRpc2NvdmVyeSI7Ci0KLSAgLyoqCi0gICAqIFJlcG9ydEFydGlmYWN0IHR5cGVzLgotICAgKi8KLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBnZXRBcnRpZmFjdFR5cGUoU3RyaW5nIHR5cGVOYW1lKSB0byBhY2Nlc3MgQXJ0aWZhY3RUeXBlICoqLyAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBBcnRpZmFjdFR5cGUgQVJUSUZBQ1RfVFlQRV9FTlZFTE9QRSA9Ci0gICAgbmV3IEFydGlmYWN0VHlwZShUWVBFX0VOVkVMT1BFKTsKLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBnZXRBcnRpZmFjdFR5cGUoU3RyaW5nIHR5cGVOYW1lKSB0byBhY2Nlc3MgQXJ0aWZhY3RUeXBlICoqLyAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBBcnRpZmFjdFR5cGUgQVJUSUZBQ1RfVFlQRV9NRVNTQUdFID0KLSAgICBuZXcgQXJ0aWZhY3RUeXBlKFRZUEVfTUVTU0FHRSk7Ci0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgZ2V0QXJ0aWZhY3RUeXBlKFN0cmluZyB0eXBlTmFtZSkgdG8gYWNjZXNzIEFydGlmYWN0VHlwZSAqKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBBcnRpZmFjdFR5cGUgQVJUSUZBQ1RfVFlQRV9ERVNDUklQVElPTiA9Ci0gICAgbmV3IEFydGlmYWN0VHlwZShUWVBFX0RFU0NSSVBUSU9OKTsKLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBnZXRBcnRpZmFjdFR5cGUoU3RyaW5nIHR5cGVOYW1lKSB0byBhY2Nlc3MgQXJ0aWZhY3RUeXBlICoqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIEFydGlmYWN0VHlwZSBBUlRJRkFDVF9UWVBFX0RJU0NPVkVSWSA9Ci0gICAgbmV3IEFydGlmYWN0VHlwZShUWVBFX0RJU0NPVkVSWSk7Ci0gIAotICAvKioKLSAgICogQ3JlYXRlIGFydGlmYWN0IHR5cGUuCi0gICAqLwotICBwcml2YXRlIEFydGlmYWN0VHlwZShTdHJpbmcgdHlwZSkKLSAgewotICAgIHRoaXMudHlwZSA9IHR5cGU7Ci0gIH0KLQotICAvKiogUmV0dXJucyB0cnVlIGlmIHRoaXMgYXJ0aWZhY3QgY2FuIGJlIG91dHB1dCB0byB0aGUgcmVwb3J0LiAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0xvZ2dhYmxlKCkgCi0gIHsKLSAgICBpZiAobG9nZ2FibGVBcnRpZmFjdFR5cGVzID09IG51bGwpIAotICAgIHsKLSAgICAgIFN0cmluZyBhcnRpZmFjdEFycmF5W10gPSBXU0lUZXN0VG9vbHNQbHVnaW4uZ2V0UGx1Z2luKCkuZ2V0QWxsUmVwb3J0QXJ0aWZhY3RUeXBlcygpOwotICAgICAgbG9nZ2FibGVBcnRpZmFjdFR5cGVzID0gbmV3IEFycmF5TGlzdChhcnRpZmFjdEFycmF5Lmxlbmd0aCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFydGlmYWN0QXJyYXkubGVuZ3RoOyBpKyspCi0gICAgICAgICBsb2dnYWJsZUFydGlmYWN0VHlwZXMuYWRkKGFydGlmYWN0QXJyYXlbaV0pOwotICAgIH0KLSAgICByZXR1cm4gbG9nZ2FibGVBcnRpZmFjdFR5cGVzLmNvbnRhaW5zKHR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIElzIGFydGlmYWN0IHR5cGUgZW52ZWxvcGUuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiBhcnRpZmFjdCB0eXBlIGVudmVsb3BlLgotICAgKiBAZGVwcmVjYXRlZCAtLSBhbiBhcnRpZmFjdFR5cGUgaXMgbm8gbG9uZ2VyIHJlc3RyaWN0ZWQgdG8gZW52ZWxvcGUsIAotICAgKiAgICAgICAgICAgICAgICBtZXNzYWdlLCBkZXNjcmlwdGlvbiBvciBkaXNjb3ZlcnkuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0VudmVsb3BlKCkKLSAgewotICAgIHJldHVybiB0eXBlLmVxdWFscyhUWVBFX0VOVkVMT1BFKTsKLSAgfQotCi0gIC8qKgotICAgKiBJcyBhcnRpZmFjdCB0eXBlIG1lc3NhZ2VzLgotICAgKiBAcmV0dXJuIHRydWUgaWYgYXJ0aWZhY3QgdHlwZSBtZXNzYWdlcy4KLSAgICogQGRlcHJlY2F0ZWQgLS0gYW4gYXJ0aWZhY3RUeXBlIGlzIG5vIGxvbmdlciByZXN0cmljdGVkIHRvIGVudmVsb3BlLCAKLSAgICogICAgICAgICAgICAgICAgbWVzc2FnZSwgZGVzY3JpcHRpb24gb3IgZGlzY292ZXJ5LgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNNZXNzYWdlcygpCi0gIHsKLSAgICByZXR1cm4gdHlwZS5lcXVhbHMoVFlQRV9NRVNTQUdFKTsKLSAgfQotCi0gIC8qKgotICAgKiBJcyBhcnRpZmFjdCB0eXBlIGRlc2NyaXB0aW9uLgotICAgKiBAcmV0dXJuIHRydWUgaWYgYXJ0aWZhY3QgdHlwZSBkZXNjcmlwdGlvbi4KLSAgICogQGRlcHJlY2F0ZWQgLS0gYW4gYXJ0aWZhY3RUeXBlIGlzIG5vIGxvbmdlciByZXN0cmljdGVkIHRvIGVudmVsb3BlLCAKLSAgICogICAgICAgICAgICAgICAgbWVzc2FnZSwgZGVzY3JpcHRpb24gb3IgZGlzY292ZXJ5LgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNEZXNjcmlwdGlvbigpCi0gIHsKLSAgICByZXR1cm4gdHlwZS5lcXVhbHMoVFlQRV9ERVNDUklQVElPTik7Ci0gIH0KLQotICAvKioKLSAgICogSXMgYXJ0aWZhY3QgdHlwZSBkaXNjb3ZlcnkuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiBhcnRpZmFjdCB0eXBlIGRpc2NvdmVyeS4KLSAgICogQGRlcHJlY2F0ZWQgLS0gYW4gYXJ0aWZhY3RUeXBlIGlzIG5vIGxvbmdlciByZXN0cmljdGVkIHRvIGVudmVsb3BlLCAKLSAgICogICAgICAgICAgICAgICAgbWVzc2FnZSwgZGVzY3JpcHRpb24gb3IgZGlzY292ZXJ5LgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNEaXNjb3ZlcnkoKQotICB7Ci0gICAgcmV0dXJuIHR5cGUuZXF1YWxzKFRZUEVfRElTQ09WRVJZKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgYXJ0aWZhY3QgdHlwZS4KLSAgICogQHJldHVybiBhcnRpZmFjdCB0eXBlLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRUeXBlTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gdHlwZTsKLSAgfQotCi0gIC8qKgotICAgKiBJbnN0YW50aWF0ZXMgYSBuZXcgYXJ0aWZhY3QgdHlwZSBhbmQgYWRkcyBpdCB0byB0aGUgcmVnaXN0cnkgbWFwCi0gICAqIEBwYXJhbSBuYW1lIC0gdGhlIGFydGlmYWN0IG5hbWUgKG1hdGNoZXMgYXJ0aWZhY3QgdHlwZSBhdHRyaWJ1dGUgZnJvbSBUQUQpCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgcmVnaXN0ZXJBcnRpZmFjdFR5cGUoU3RyaW5nIG5hbWUpIHsKLSAgICAgIGlmICh0eXBlTWFwID09IG51bGwpCi0gICAgICAgICAgdHlwZU1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgICB0eXBlTWFwLnB1dChuYW1lLCBuZXcgQXJ0aWZhY3RUeXBlKG5hbWUpKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIENyZWF0ZSBhcnRpZmFjdCB0eXBlLgotICAgKiBAcGFyYW0gdHlwZU5hbWUgYXJ0aWZhY3QgdHlwZSBuYW1lLgotICAgKiBAcmV0dXJuIG5ld2x5IGNyZWF0ZWQgYXJ0aWZhY3QgdHlwZS4KLSAgICogQHRocm93cyBSdW50aW1lRXhjZXB0aW9uIGlmIGFydGlmYWN0IHR5cGUgbmFtZSBpcyBpbnZhbGlkIG9yIGluYXBwcm9wcmlhdGUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIEFydGlmYWN0VHlwZSBnZXRBcnRpZmFjdFR5cGUoU3RyaW5nIHR5cGVOYW1lKQotICAgIHRocm93cyBSdW50aW1lRXhjZXB0aW9uCi0gIHsKLSAgICAgIGlmICh0eXBlTWFwID09IG51bGwpIHsKLSAgICAgICAgICBTdHJpbmcgdHlwZXNbXSA9IFdTSVRlc3RUb29sc1BsdWdpbi5nZXRQbHVnaW4oKS5nZXRBcnRpZmFjdFR5cGVzKCk7Ci0gICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgcmVnaXN0ZXJBcnRpZmFjdFR5cGUodHlwZXNbaV0pOwotICAgICAgfQotICAgICAgCi0gICAgaWYgKHR5cGVNYXAuY29udGFpbnNLZXkodHlwZU5hbWUpKQotICAgICAgICByZXR1cm4gKEFydGlmYWN0VHlwZSkgdHlwZU1hcC5nZXQodHlwZU5hbWUpOwotICAgICBlbHNlIHsKLSAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICAiQ291bGQgbm90IGNyZWF0ZSBuZXcgYXJ0aWZhY3QgdHlwZSB1c2luZyBpbnZhbGlkIHR5cGUgbmFtZTogIgotICAgICAgICAgICAgICAgICArIHR5cGVOYW1lICsgIi4iKTsKLSAgICAgfQotICB9Ci0gIAotICAgIC8qKgotICAgKiBDcmVhdGUgYXJ0aWZhY3QgdHlwZS4KLSAgICogQHBhcmFtIHR5cGVOYW1lIGFydGlmYWN0IHR5cGUgbmFtZS4KLSAgICogQHJldHVybiBuZXdseSBjcmVhdGVkIGFydGlmYWN0IHR5cGUuCi0gICAqIEB0aHJvd3MgUnVudGltZUV4Y2VwdGlvbiBpZiBhcnRpZmFjdCB0eXBlIG5hbWUgaXMgaW52YWxpZCBvciBpbmFwcHJvcHJpYXRlLgotICAgKiBAZGVwcmVjYXRlZCAtLSB1c2UgZ2V0QXJ0aWZhY3RUeXBlKFN0cmluZyB0eXBlTmFtZSkKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgQXJ0aWZhY3RUeXBlIG5ld0FydGlmYWN0VHlwZShTdHJpbmcgdHlwZU5hbWUpCi0gICAgdGhyb3dzIFJ1bnRpbWVFeGNlcHRpb24KLSAgewotICAgIEFydGlmYWN0VHlwZSBhcnRpZmFjdFR5cGUgPSBudWxsOwotCi0gICAgaWYgKHR5cGVOYW1lLmVxdWFscyhUWVBFX0RFU0NSSVBUSU9OKSkKLSAgICB7Ci0gICAgICBhcnRpZmFjdFR5cGUgPSBBUlRJRkFDVF9UWVBFX0RFU0NSSVBUSU9OOwotICAgIH0KLQotICAgIGVsc2UgaWYgKHR5cGVOYW1lLmVxdWFscyhUWVBFX01FU1NBR0UpKQotICAgIHsKLSAgICAgIGFydGlmYWN0VHlwZSA9IEFSVElGQUNUX1RZUEVfTUVTU0FHRTsKLSAgICB9Ci0KLSAgICBlbHNlIGlmICh0eXBlTmFtZS5lcXVhbHMoVFlQRV9FTlZFTE9QRSkpCi0gICAgewotICAgICAgYXJ0aWZhY3RUeXBlID0gQVJUSUZBQ1RfVFlQRV9FTlZFTE9QRTsKLSAgICB9Ci0KLSAgICBlbHNlIGlmICh0eXBlTmFtZS5lcXVhbHMoVFlQRV9ESVNDT1ZFUlkpKQotICAgIHsKLSAgICAgIGFydGlmYWN0VHlwZSA9IEFSVElGQUNUX1RZUEVfRElTQ09WRVJZOwotICAgIH0KLQotICAgIGVsc2UKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigKLSAgICAgICAgIkNvdWxkIG5vdCBjcmVhdGUgbmV3IGFydGlmYWN0IHR5cGUgdXNpbmcgaW52YWxpZCB0eXBlIG5hbWU6ICIKLSAgICAgICAgICArIHR5cGVOYW1lCi0gICAgICAgICAgKyAiLiIpOwotICAgIH0KLQotICAgIHJldHVybiBhcnRpZmFjdFR5cGU7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL0Jhc2ljUnVsZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvQmFzaWNSdWxlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjMyYjBlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvQmFzaWNSdWxlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDc3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgdmFsaWRhdGVzIGJhc2ljIGNvbnN0cnVjdHMgb2YgUkZDIDI2MTYuCi0gKiAKLSAqIEBhdXRob3IgVm9sb2RpbgotICovCi1wdWJsaWMgY2xhc3MgQmFzaWNSdWxlcwotewotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgY2hhciBDUiA9IDEzOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGNoYXIgTEYgPSAxMDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBjaGFyIFNQID0gMzI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgY2hhciBIVCA9IDk7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgY2hhciBEUSA9IDM0OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDUkxGID0gIiIgKyBDUiArIExGOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgY2hhcltdIFNFUEFSQVRPUlMgPQotICAgIHsKLSAgICAgICcoJywKLSAgICAgICcpJywKLSAgICAgICc8JywKLSAgICAgICc+JywKLSAgICAgICdAJywKLSAgICAgICcsJywKLSAgICAgICc7JywKLSAgICAgICc6JywKLSAgICAgICdcXCcsCi0gICAgICAnXCInLAotICAgICAgJy8nLAotICAgICAgJ1snLAotICAgICAgJ10nLAotICAgICAgJz8nLAotICAgICAgJz0nLAotICAgICAgJ3snLAotICAgICAgJ30nLAotICAgICAgU1AsCi0gICAgICBIVCB9OwotCi0gIC8qKgotICAgKiBDaGVja2luZyBydWxlLgotICAgKiAJCU9DVEVUID0gJmx0O2FueSA4LWJpdCBzZXF1ZW5jZSBvZiBkYXRhJmd0OwotICAgKiBAcGFyYW0gY2ggY2hhcmFjdGVyLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiBjaCBpcyBjb25mb3JtIHRvIHJ1bGUsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc09DVEVUKGNoYXIgY2gpCi0gIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja2luZyBydWxlOgotICAgKiAJCUNIQVIgPSAmbHQ7YW55IFVTLUFTQ0lJIGNoYXJhY3RlciAob2N0ZXRzIDAgLSAxMjcpJmd0Oy4KLSAgICogQHBhcmFtIGNoIGNoYXJhY3Rlci4KLSAgICogQHJldHVybiBib29sZWFuIHRydWUgaWYgY2ggaXMgY29uZm9ybSB0byBydWxlLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNDSEFSKGNoYXIgY2gpCi0gIHsKLSAgICByZXR1cm4gKGNoID49IDAgJiYgY2ggPD0gMTI3KSA/IHRydWUgOiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja2luZyBydWxlOgotICAgKiAJCVVQQUxQSEEgPSAmbHQ7YW55IFVTLUFTQ0lJIHVwcGVyY2FzZSBsZXR0ZXIgIkEiLi4iWiImZ3Q7LgotICAgKiBAcGFyYW0gY2ggY2hhcmFjdGVyLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiBjaCBpcyBjb25mb3JtIHRvIHJ1bGUsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1VQQUxQSEEoY2hhciBjaCkKLSAgewotICAgIHJldHVybiAoY2ggPj0gJ0EnICYmIGNoIDw9ICdaJykgPyB0cnVlIDogZmFsc2U7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2tpbmcgcnVsZToKLSAgICogCQlMT0FMUEhBID0gJmx0O2FueSBVUy1BU0NJSSBsb3dlcmNhc2UgbGV0dGVyICJhIi4uInoiJmd0Oy4KLSAgICogQHBhcmFtIGNoIGNoYXJhY3Rlci4KLSAgICogQHJldHVybiBib29sZWFuIHRydWUgaWYgY2ggaXMgY29uZm9ybSB0byBydWxlLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNMT0FMUEhBKGNoYXIgY2gpCi0gIHsKLSAgICByZXR1cm4gKGNoID49ICdhJyAmJiBjaCA8PSAneicpID8gdHJ1ZSA6IGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNraW5nIHJ1bGU6Ci0gICAqIAkJQUxQSEEgPSBVUEFMUEhBIHwgTE9BTFBIQS4KLSAgICogQHBhcmFtIGNoIGNoYXJhY3Rlci4KLSAgICogQHJldHVybiBib29sZWFuIHRydWUgaWYgY2ggaXMgY29uZm9ybSB0byBydWxlLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNBTFBIQShjaGFyIGNoKQotICB7Ci0gICAgcmV0dXJuIChpc0xPQUxQSEEoY2gpIHx8IGlzVVBBTFBIQShjaCkpID8gdHJ1ZSA6IGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNraW5nIHJ1bGU6Ci0gICAqIAkJRElHSVQgPSAmbHQ7YW55IFVTLUFTQ0lJIGRpZ2l0ICIwIi4uIjkiJmd0Oy4KLSAgICogQHBhcmFtIGNoIGNoYXJhY3Rlci4KLSAgICogQHJldHVybiBib29sZWFuIHRydWUgaWYgY2ggaXMgY29uZm9ybSB0byBydWxlLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNESUdJVChjaGFyIGNoKQotICB7Ci0gICAgcmV0dXJuIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSA/IHRydWUgOiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja2luZyBydWxlOgotICAgKiAJCUNUTCA9ICZsdDthbnkgVVMtQVNDSUkgY29udHJvbCBjaGFyYWN0ZXIgKG9jdGV0cyAwIC0gMzEpIGFuZCBERUwgKDEyNykmZ3Q7LgotICAgKiBAcGFyYW0gY2ggY2hhcmFjdGVyLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiBjaCBpcyBjb25mb3JtIHRvIHJ1bGUsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0NUTChjaGFyIGNoKQotICB7Ci0gICAgcmV0dXJuICgoY2ggPj0gMCAmJiBjaCA8PSAzMSkgfHwgY2ggPT0gMTI3KSA/IHRydWUgOiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja2luZyBydWxlOgotICAgKiAJCUNSID0gJmx0O1VTLUFTQ0lJIENSLCBjYXJyaWFnZSByZXR1cm4gKDEzKSZndDsuCi0gICAqIEBwYXJhbSBjaCBjaGFyYWN0ZXIuCi0gICAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIGNoIGlzIGNvbmZvcm0gdG8gcnVsZSwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzQ1IoY2hhciBjaCkKLSAgewotICAgIHJldHVybiAoY2ggPT0gQ1IpID8gdHJ1ZSA6IGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNraW5nIHJ1bGU6Ci0gICAqIAkJTEYgPSAmbHQ7VVMtQVNDSUkgTEYsIGxpbmVmZWVkICgxMCkmZ3Q7LgotICAgKiBAcGFyYW0gY2ggY2hhcmFjdGVyCi0gICAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIGNoIGlzIGNvbmZvcm0gdG8gcnVsZSwgZmFsc2Ugb3RoZXJ3aXNlCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNMRihjaGFyIGNoKQotICB7Ci0gICAgcmV0dXJuIChjaCA9PSBMRikgPyB0cnVlIDogZmFsc2U7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2tpbmcgcnVsZToKLSAgICogCQlTUCA9ICZsdDtVUy1BU0NJSSBTUCwgc3BhY2UgKDMyKSZndDsuCi0gICAqIEBwYXJhbSBjaCBjaGFyYWN0ZXIuCi0gICAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIGNoIGlzIGNvbmZvcm0gdG8gcnVsZSwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzU1AoY2hhciBjaCkKLSAgewotICAgIHJldHVybiAoY2ggPT0gU1ApID8gdHJ1ZSA6IGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNraW5nIHJ1bGU6Ci0gICAqIAkJSFQgPSAmbHQ7VVMtQVNDSUkgSFQsIGhvcml6b250YWwtdGFiICg5KSZndDsuCi0gICAqIEBwYXJhbSBjaCBjaGFyYWN0ZXIKLSAgICogQHJldHVybiBib29sZWFuIHRydWUgaWYgY2ggaXMgY29uZm9ybSB0byBydWxlLCBmYWxzZSBvdGhlcndpc2UKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0hUKGNoYXIgY2gpCi0gIHsKLSAgICByZXR1cm4gKGNoID09IEhUKSA/IHRydWUgOiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja2luZyBydWxlOgotICAgKiAJCSZsdDsiJmd0OyA9ICZsdDtVUy1BU0NJSSBkb3VibGUtcXVvdGUgbWFyayAoMzQpJmd0Oy4KLSAgICogQHBhcmFtIGNoIGNoYXJhY3Rlci4KLSAgICogQHJldHVybiBib29sZWFuIHRydWUgaWYgY2ggaXMgY29uZm9ybSB0byBydWxlLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNEb3VibGVRdW90ZShjaGFyIGNoKQotICB7Ci0gICAgcmV0dXJuIChjaCA9PSBEUSkgPyB0cnVlIDogZmFsc2U7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2tpbmcgcnVsZToKLSAgICogCQlDUkxGID0gQ1IgTEYuCi0gICAqIEBwYXJhbSBzdHIgc3RyaW5nLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiBjaCBpcyBjb25mb3JtIHRvIHJ1bGUsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0NSTEYoU3RyaW5nIHN0cikKLSAgewotICAgIHJldHVybiBDUkxGLmVxdWFscyhzdHIpOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNraW5nIHJ1bGU6Ci0gICAqIAkJTFdTID0gW0NSTEZdIDEqKCBTUCB8IEhUICkuCi0gICAqIEBwYXJhbSBzdHIgc3RyaW5nLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiBzdHIgaXMgY29uZm9ybSB0byBydWxlLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNMV1MoU3RyaW5nIHN0cikKLSAgewotCi0gICAgaW50IGluZGV4ID0gZ2V0TGFzdEluZGV4TFdTKHN0ciwgMCk7Ci0gICAgaWYgKGluZGV4ID09IC0xIHx8IGluZGV4ICE9IHN0ci5sZW5ndGgoKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldHMgbGFzdCBpbmRleCBvZiB0aGUgTFdTIHN0cmluZy4KLSAgICogQHBhcmFtIHN0ciBzdHJpbmcuCi0gICAqIEBwYXJhbSBzdGFydEluZGV4IHN0YXJ0IGluZGV4LgotICAgKiBAcmV0dXJuIGludCBhbiBpbmRleCBvZiB0aGUgZmlyc3Qgc3ltYm9sIHdoaWNoIGlzbid0IExXUy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgaW50IGdldExhc3RJbmRleExXUyhTdHJpbmcgc3RyLCBpbnQgc3RhcnRJbmRleCkKLSAgewotICAgIGludCBpbmRleCA9IHN0ci5pbmRleE9mKENSTEYsIHN0YXJ0SW5kZXgpOwotICAgIGlmIChpbmRleCA9PSAtMSkKLSAgICAgIGluZGV4ID0gc3RhcnRJbmRleDsKLSAgICBlbHNlIGlmIChpbmRleCA9PSBzdGFydEluZGV4KQotICAgICAgaW5kZXggKz0gQ1JMRi5sZW5ndGgoKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gLTE7Ci0KLSAgICBpZiAoIWlzU1Aoc3RyLmNoYXJBdChpbmRleCkpICYmIGlzSFQoc3RyLmNoYXJBdChpbmRleCkpKQotICAgICAgcmV0dXJuIC0xOwotCi0gICAgaW5kZXgrKzsKLSAgICBmb3IgKDsgaW5kZXggPCBzdHIubGVuZ3RoKCk7IGluZGV4KyspCi0gICAgICBpZiAoIWlzU1Aoc3RyLmNoYXJBdChpbmRleCkpICYmIGlzSFQoc3RyLmNoYXJBdChpbmRleCkpKQotICAgICAgICByZXR1cm4gaW5kZXg7Ci0gICAgcmV0dXJuIGluZGV4OwotICB9Ci0KLSAgLyoqCi0gICAqIEdldHMgbGFzdCBpbmRleCBvZiB0aGUgVEVYVCBzdHJpbmcuCi0gICAqIFRFWFQgPSAmbHQ7YW55IE9DVEVUIGV4Y2VwdCBDVExzLCBidXQgaW5jbHVkaW5nIExXUyZndDsKLSAgICogQHBhcmFtIHN0ciBzdHJpbmcuCi0gICAqIEBwYXJhbSBzdGFydEluZGV4IHN0YXJ0IGluZGV4LgotICAgKiBAcmV0dXJuIGludCBhbiBpbmRleCBvZiB0aGUgZmlyc3Qgc3ltYm9sIHdoaWNoIGlzbid0IFRFWFQuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGludCBnZXRMYXN0VEVYVChTdHJpbmcgc3RyLCBpbnQgc3RhcnRJbmRleCkKLSAgewotICAgIGludCBpbmRleDsKLSAgICBmb3IgKGluZGV4ID0gc3RhcnRJbmRleDsgaW5kZXggPCBzdHIubGVuZ3RoKCk7IGluZGV4KyspCi0gICAgewotICAgICAgaWYgKCFpc09DVEVUKHN0ci5jaGFyQXQoaW5kZXgpKSkKLSAgICAgICAgcmV0dXJuIGluZGV4OwotICAgICAgaWYgKGlzQ1RMKHN0ci5jaGFyQXQoaW5kZXgpKSkKLSAgICAgIHsKLSAgICAgICAgaW50IGxhc3RMV1MgPSBnZXRMYXN0SW5kZXhMV1Moc3RyLCBpbmRleCk7Ci0gICAgICAgIGlmIChsYXN0TFdTID09IC0xKQotICAgICAgICAgIHJldHVybiBpbmRleDsKLSAgICAgICAgaW5kZXggPSBsYXN0TFdTIC0gMTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGluZGV4OwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNraW5nIHJ1bGU6Ci0gICAqIAkJSEVYID0gIkEiIHwgIkIiIHwgIkMiIHwgIkQiIHwgIkUiIHwgIkYiIHwgImEiIHwgImIiIHwgImMiIHwgImQiIHwgImUiIHwgImYiIHwgRElHSVQuCi0gICAqIEBwYXJhbSBjaCBjaGFyYWN0ZXIuCi0gICAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIGNoIGlzIGNvbmZvcm0gdG8gcnVsZSwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzSEVYKGNoYXIgY2gpCi0gIHsKLSAgICByZXR1cm4gKAotICAgICAgKGNoID49ICdBJyAmJiBjaCA8PSAnRicpIHx8IChjaCA+PSAnYScgJiYgY2ggPD0gJ2YnKSB8fCBpc0RJR0lUKGNoKSkKLSAgICAgID8gdHJ1ZQotICAgICAgOiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja2luZyBydWxlOgotICAgKiAJCXRva2VuID0gMSombHQ7YW55IENIQVIgZXhjZXB0IENUTHMgb3Igc2VwYXJhdG9ycyZndDsuCi0gICAqIEBwYXJhbSBzdHIgc3RyaW5nLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiBzdHIgaXMgY29uZm9ybSB0byBydWxlLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNUb2tlbihTdHJpbmcgc3RyKQotICB7Ci0gICAgaWYgKHN0ci5sZW5ndGgoKSA9PSAwKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IHN0ci5sZW5ndGgoKTsgaW5kZXgrKykKLSAgICB7Ci0gICAgICBjaGFyIGNoID0gc3RyLmNoYXJBdChpbmRleCk7Ci0gICAgICBpZiAoIWlzQ0hBUihjaCkgfHwgaXNTRVBBUkFUT1IoY2gpIHx8IGlzQ1RMKGNoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogR2V0cyBsYXN0IGluZGV4IG9mIHRoZSAidG9rZW4iIHN0cmluZy4KLSAgICogQHBhcmFtIHN0ciBzdHJpbmcuCi0gICAqIEBwYXJhbSBzdGFydEluZGV4IHN0YXJ0IGluZGV4LgotICAgKiBAcmV0dXJuIGludCBhbiBpbmRleCBvZiB0aGUgZmlyc3Qgc3ltYm9sIHdoaWNoIGlzbid0ICJ0b2tlbiIuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGludCBnZXRMYXN0VG9rZW4oU3RyaW5nIHN0ciwgaW50IHN0YXJ0SW5kZXgpCi0gIHsKLSAgICBpbnQgaW5kZXggPSBzdGFydEluZGV4OwotICAgIGZvciAoOyBpbmRleCA8IHN0ci5sZW5ndGgoKTsgaW5kZXgrKykKLSAgICB7Ci0gICAgICBjaGFyIGNoID0gc3RyLmNoYXJBdChpbmRleCk7Ci0gICAgICBpZiAoIWlzQ0hBUihjaCkgfHwgaXNTRVBBUkFUT1IoY2gpIHx8IGlzQ1RMKGNoKSkKLSAgICAgICAgcmV0dXJuIGluZGV4OwotCi0gICAgfQotICAgIHJldHVybiBpbmRleDsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja2luZyBydWxlOgotICAgKiAJCXNlcGFyYXRvcnMgPSAiKCIgfCAiKSIgfCAiPCIgfCAiPiIgfCAiQCIKLSAgICAgKiAgICAgICAgICAgICAgICAgfCAiLCIgfCAiOyIgfCAiOiIgfCAiXCIgfCA8Ij4KLSAgICAgKiAgICAgICAgICAgICAgICAgfCAiLyIgfCAiWyIgfCAiXSIgfCAiPyIgfCAiPSIKLSAgICAgKiAgICAgICAgICAgICAgICAgfCAieyIgfCAifSIgfCBTUCB8IEhULgotICAgKiBAcGFyYW0gY2ggY2hhcmFjdGVyLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiBjaCBpcyBjb25mb3JtIHRvIHJ1bGUsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1NFUEFSQVRPUihjaGFyIGNoKQotICB7Ci0gICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IFNFUEFSQVRPUlMubGVuZ3RoOyBpbmRleCsrKQotICAgIHsKLSAgICAgIGlmIChjaCA9PSBTRVBBUkFUT1JTW2luZGV4XSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIGxhc3QgaW5kZXggb2YgdGhlICJjb21tZW50IiBzdHJpbmcuCi0gICAqIAkJY29tbWVudCA9ICIoIiAqKCBjdGV4dCB8IHF1b3RlZC1wYWlyIHwgY29tbWVudCApICIpIi4KLSAgICogQHBhcmFtIHN0ciBzdHJpbmcuCi0gICAqIEBwYXJhbSBzdGFydEluZGV4IHN0YXJ0IGluZGV4LgotICAgKiBAcmV0dXJuIGludCBhbiBpbmRleCBvZiB0aGUgZmlyc3Qgc3ltYm9sIHdoaWNoIGlzbid0ICJjb21tZW50Ii4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgaW50IGdldExhc3RDb21tZW50KFN0cmluZyBzdHIsIGludCBzdGFydEluZGV4KQotICB7Ci0KLSAgICBpbnQgaW5kZXggPSBzdGFydEluZGV4OwotICAgIGlmIChzdHIubGVuZ3RoKCkgPD0gc3RhcnRJbmRleCkKLSAgICAgIHJldHVybiBzdGFydEluZGV4OwotICAgIGlmIChzdHIuY2hhckF0KGluZGV4KSAhPSAnKCcpCi0gICAgICByZXR1cm4gc3RhcnRJbmRleDsKLQotICAgIGJvb2xlYW4gYkV4aXQgPSBmYWxzZTsKLSAgICBib29sZWFuIGJRdW90ZWRQYWlyID0gZmFsc2U7Ci0gICAgaW50IGlkeCA9IHN0YXJ0SW5kZXggKyAxOwotICAgIHdoaWxlIChiRXhpdCA9PSBmYWxzZSkKLSAgICB7Ci0gICAgICB3aGlsZSAoYlF1b3RlZFBhaXIgPT0gZmFsc2UpCi0gICAgICB7Ci0gICAgICAgIGlkeCA9IGdldExhc3RDdGV4dChzdHIsIGlkeCk7Ci0gICAgICAgIGlmIChpZHggPT0gc3RyLmxlbmd0aCgpKQotICAgICAgICAgIHJldHVybiBpZHg7Ci0gICAgICAgIGlmICghaXNRdW90ZWRQYWlyKHN0ciwgaWR4IC0gMSkpCi0gICAgICAgICAgYlF1b3RlZFBhaXIgPSB0cnVlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgaWR4Kys7Ci0gICAgICB9Ci0gICAgICBpZiAoc3RyLmNoYXJBdChpZHgpID09ICcoJykKLSAgICAgIHsKLSAgICAgICAgZ2V0TGFzdENvbW1lbnQoc3RyLCBpZHgpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoc3RyLmNoYXJBdChpZHgpID09ICcpJykKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGlkeCArIDE7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGlkeDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIGxhc3QgaW5kZXggb2YgdGhlICJjdGV4dCIgc3RyaW5nLgotICAgKiAJCWN0ZXh0ID0gJmx0O2FueSBURVhUIGV4Y2x1ZGluZyAiKCIgYW5kICIpIiZndDsKLSAgICogQHBhcmFtIHN0ciBzdHJpbmcuCi0gICAqIEBwYXJhbSBzdGFydEluZGV4IHN0YXJ0IGluZGV4LgotICAgKiBAcmV0dXJuIGludCBhbiBpbmRleCBvZiB0aGUgZmlyc3Qgc3ltYm9sIHdoaWNoIGlzbid0ICJjdGV4dCIuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBpbnQgZ2V0TGFzdEN0ZXh0KFN0cmluZyBzdHIsIGludCBzdGFydEluZGV4KQotICB7Ci0gICAgaW50IGlkeCA9IGdldExhc3RURVhUKHN0ciwgc3RhcnRJbmRleCk7Ci0gICAgaW50IGlCcmFja2V0ID0gc3RhcnRJbmRleDsKLSAgICBmb3IgKDsgaUJyYWNrZXQgPCBpZHg7IGlCcmFja2V0KyspCi0gICAgewotICAgICAgaWYgKHN0ci5jaGFyQXQoaUJyYWNrZXQpID09ICcoJyB8fCBzdHIuY2hhckF0KGlCcmFja2V0KSA9PSAnKScpCi0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAoaUJyYWNrZXQgPCBpZHgpCi0gICAgICBpZHggPSBpQnJhY2tldDsKLSAgICByZXR1cm4gaWR4OwotICB9Ci0KLSAgLyoqCi0gICAqIEdldHMgbGFzdCBpbmRleCBvZiB0aGUgInFkdGV4dCIgc3RyaW5nLgotICAgKiAJCXFkdGV4dCA9ICZsdDthbnkgVEVYVCBleGNlcHQgJmx0OyImZ3Q7Jmd0OwotICAgKiBAcGFyYW0gc3RyIHN0cmluZy4KLSAgICogQHBhcmFtIHN0YXJ0SW5kZXggc3RhcnQgaW5kZXguCi0gICAqIEByZXR1cm4gaW50IGFuIGluZGV4IG9mIHRoZSBmaXJzdCBzeW1ib2wgd2hpY2ggaXNuJ3QgInFkdGV4dCIuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBpbnQgZ2V0TGFzdFFkdGV4dChTdHJpbmcgc3RyLCBpbnQgc3RhcnRJbmRleCkKLSAgewotICAgIGludCBpZHggPSBnZXRMYXN0VEVYVChzdHIsIHN0YXJ0SW5kZXgpOwotICAgIGludCBpQnJhY2tldCA9IHN0YXJ0SW5kZXg7Ci0gICAgZm9yICg7IGlCcmFja2V0IDwgaWR4OyBpQnJhY2tldCsrKQotICAgIHsKLSAgICAgIGlmIChzdHIuY2hhckF0KGlCcmFja2V0KSA9PSAnXCInKQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgaWYgKGlCcmFja2V0IDwgaWR4KQotICAgICAgaWR4ID0gaUJyYWNrZXQ7Ci0gICAgcmV0dXJuIGlkeDsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja2luZyBydWxlOgotICAgKiAJCXF1b3RlZC1wYWlyID0gIlwiIENIQVIuCi0gICAqIEBwYXJhbSBzdHIgc3RyaW5nLgotICAgKiBAcGFyYW0gc3RhcnRJbmRleCBzdGFydCBpbmRleC4KLSAgICogQHJldHVybiBib29sZWFuIHRydWUgaWYgc3RyIGlzIGNvbmZvcm0gdG8gcnVsZSwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzUXVvdGVkUGFpcihTdHJpbmcgc3RyLCBpbnQgc3RhcnRJbmRleCkKLSAgewotICAgIGlmIChzdHIubGVuZ3RoKCkgPj0gc3RhcnRJbmRleCArIDIKLSAgICAgICYmIHN0ci5jaGFyQXQoc3RhcnRJbmRleCkgPT0gJ1xcJwotICAgICAgJiYgaXNDSEFSKHN0ci5jaGFyQXQoc3RhcnRJbmRleCArIDEpKSkKLSAgICAgIHJldHVybiB0cnVlOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIGxhc3QgaW5kZXggb2YgdGhlICJxdW90ZWQtc3RyaW5nIiBzdHJpbmcuCi0gICAqIAkJcXVvdGVkLXN0cmluZyAgPSAoICZsdDsiJmd0OyAqKHFkdGV4dCB8IHF1b3RlZC1wYWlyICkgJmx0OyImZ3Q7ICkKLSAgICogQHBhcmFtIHN0ciBzdHJpbmcuCi0gICAqIEBwYXJhbSBzdGFydEluZGV4IHN0YXJ0IGluZGV4LgotICAgKiBAcmV0dXJuIGludCBhbiBpbmRleCBvZiB0aGUgZmlyc3Qgc3ltYm9sIHdoaWNoIGlzbid0ICJxdW90ZWQtc3RyaW5nIi4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgaW50IGdldExhc3RRdW90ZWRTdHJpbmcoU3RyaW5nIHN0ciwgaW50IHN0YXJ0SW5kZXgpCi0gIHsKLSAgICBpbnQgaW5kZXggPSBzdGFydEluZGV4OwotCi0gICAgLy8gaWYgZW5kIGlmIHRoZSBzdHJpbmcKLSAgICBpZiAoc3RhcnRJbmRleCA9PSBzdHIubGVuZ3RoKCkpCi0gICAgICByZXR1cm4gc3RhcnRJbmRleDsKLSAgICAvLyBpZiB0aGUgYmVnaW4gaXMgbm90ICciJwotICAgIGlmIChzdHIuY2hhckF0KGluZGV4KSAhPSBEUSkKLSAgICAgIHJldHVybiBzdGFydEluZGV4OwotCi0gICAgaW5kZXgrKzsKLSAgICB3aGlsZSAodHJ1ZSkKLSAgICB7Ci0gICAgICBpbmRleCA9IGdldExhc3RRZHRleHQoc3RyLCBpbmRleCk7Ci0gICAgICBpZiAoaW5kZXggPT0gc3RyLmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gc3RhcnRJbmRleDsKLSAgICAgIGlmIChpc1F1b3RlZFBhaXIoc3RyLCBpbmRleCAtIDEpKQotICAgICAgewotICAgICAgICBpbmRleCsrOwotICAgICAgICBpZiAoaW5kZXggPT0gc3RyLmxlbmd0aCgpKQotICAgICAgICAgIHJldHVybiBzdGFydEluZGV4OwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgLy8gaWYgdGhlIGVuZCBpcyBub3QgJyInCi0gICAgaWYgKHN0ci5jaGFyQXQoaW5kZXgpICE9IERRKQotICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICBpbmRleCsrOwotICAgIHJldHVybiBpbmRleDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9FbnRyeVR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvRW50cnlUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyMWEzNmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9FbnRyeVR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbDsKLQotaW1wb3J0IGphdmEudXRpbC5UcmVlTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLldTSVRlc3RUb29sc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucHJvZmlsZS52YWxpZGF0b3IuQmFzZVZhbGlkYXRvcjsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIC4uLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgRW50cnlUeXBlCi17Ci0gIC8qKgotICAgKiBSZXBvcnRBcnRpZmFjdCB0eXBlLgotICAgKi8KLSAgcHJpdmF0ZSBBcnRpZmFjdFR5cGUgYXJ0aWZhY3RUeXBlOwotCi0gIC8qKgotICAgKiBUaGlzIHR5cGUuCi0gICAqLwotICBwcml2YXRlIFN0cmluZyB0eXBlTmFtZTsKLQotICAvKioKLSAgICogRW50cnkgdHlwZXMgYWNjZXNzaWJsZSBieSB0eXBlIG5hbWUuCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIFRyZWVNYXAgZW50cnlUeXBlTWFwOwotCi0gIC8qKgotICAgKiBFbnRyeSB0eXBlIG5hbWVzIGFjY2Vzc2libGUgYnkgYXJ0aWZhY3QuCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFRyZWVNYXAgZW50cnlUeXBlTmFtZU1hcCA9IG5ldyBUcmVlTWFwKCk7Ci0KLSAgLyoqCi0gICAqIEVudmVsb3BlIGVudHJ5IHR5cGVzLgotICAgKi8KLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBFbnZlbG9wZVZhbGlkYXRvci5UWVBFX0VOVkVMT1BFX1JFUVVFU1QgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9FTlZFTE9QRV9SRVFVRVNUID0gInJlcXVlc3RFbnZlbG9wZSI7Ci0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgRW52ZWxvcGVWYWxpZGF0b3IuVFlQRV9FTlZFTE9QRV9SRVNQT05TRSAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0VOVkVMT1BFX1JFU1BPTlNFID0gInJlc3BvbnNlRW52ZWxvcGUiOwotICAvKiogQGRlcHJlY2F0ZWQgLS0gdXNlIEVudmVsb3BlVmFsaWRhdG9yLlRZUEVfRU5WRUxPUEVfQU5ZVCAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0VOVkVMT1BFX0FOWSA9ICJhbnlFbnZlbG9wZSI7Ci0KLSAgLyoqCi0gICAqIE1lc3NhZ2UgZW50cnkgdHlwZXMuCi0gICAqLwotICAvKiogQGRlcHJlY2F0ZWQgLS0gdXNlIE1lc3NhZ2VWYWxpZGF0b3IuVFlQRV9NRVNTQUdFX1JFUVVFU1QgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9NRVNTQUdFX1JFUVVFU1QgPSAicmVxdWVzdE1lc3NhZ2UiOwotICAvKiogQGRlcHJlY2F0ZWQgLS0gdXNlIE1lc3NhZ2VWYWxpZGF0b3IuVFlQRV9NRVNTQUdFX1JFU1BPTlNFICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfTUVTU0FHRV9SRVNQT05TRSA9ICJyZXNwb25zZU1lc3NhZ2UiOwotICAvKiogQGRlcHJlY2F0ZWQgLS0gdXNlIE1lc3NhZ2VWYWxpZGF0b3IuVFlQRV9NRVNTQUdFX0FOWSAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX01FU1NBR0VfQU5ZID0gImFueU1lc3NhZ2UiOwotCi0gIC8qKgotICAgKiBNSU1FIGVudHJ5IHR5cGVzLgotICAgKi8KLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBNZXNzYWdlVmFsaWRhdG9yLlRZUEVfTUlNRV9QQVJUICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfTUlNRV9QQVJUID0gInBhcnQiOwotICAvKiogQGRlcHJlY2F0ZWQgLS0gdXNlIE1lc3NhZ2VWYWxpZGF0b3IuVFlQRV9NSU1FX1JPT1RfUEFSVCAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX01JTUVfUk9PVF9QQVJUID0gInJvb3QtcGFydCI7Ci0KLSAgLyoqCi0gICAqIERlc2NyaXB0aW9uIGVudHJ5IHR5cGVzLgotICAgKi8KLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBXU0RMVmFsaWRhdG9yLlRZUEVfREVTQ1JJUFRJT05fREVGSU5JVElPTlMgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9ERVNDUklQVElPTl9ERUZJTklUSU9OUyA9ICJkZWZpbml0aW9ucyI7Ci0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgV1NETFZhbGlkYXRvci5UWVBFX0RFU0NSSVBUSU9OX0lNUE9SVCAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0RFU0NSSVBUSU9OX0lNUE9SVCA9ICJpbXBvcnQiOwotICAvKiogQGRlcHJlY2F0ZWQgLS0gdXNlIFdTRExWYWxpZGF0b3IuVFlQRV9ERVNDUklQVElPTl9UWVBFUyAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0RFU0NSSVBUSU9OX1RZUEVTID0gInR5cGVzIjsKLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBXU0RMVmFsaWRhdG9yLlRZUEVfREVTQ1JJUFRJT05fTUVTU0FHRSAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0RFU0NSSVBUSU9OX01FU1NBR0UgPSAibWVzc2FnZSI7Ci0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgV1NETFZhbGlkYXRvci5UWVBFX0RFU0NSSVBUSU9OX09QRVJBVElPTiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0RFU0NSSVBUSU9OX09QRVJBVElPTiA9ICJvcGVyYXRpb24iOwotICAvKiogQGRlcHJlY2F0ZWQgLS0gdXNlIFdTRExWYWxpZGF0b3IuVFlQRV9ERVNDUklQVElPTl9QT1JUVFlQRSAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0RFU0NSSVBUSU9OX1BPUlRUWVBFID0gInBvcnRUeXBlIjsKLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBXU0RMVmFsaWRhdG9yLlRZUEVfREVTQ1JJUFRJT05fQklORElORyAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0RFU0NSSVBUSU9OX0JJTkRJTkcgPSAiYmluZGluZyI7Ci0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgV1NETFZhbGlkYXRvci5UWVBFX0RFU0NSSVBUSU9OX1BPUlQgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9ERVNDUklQVElPTl9QT1JUID0gInBvcnQiOwotCi0gIC8qKgotICAgKiBEaXNjb3ZlcnkgZW50cnkgdHlwZXMuCi0gICAqLwotICAvKiogQGRlcHJlY2F0ZWQgLS0gdXNlIFVERElWYWxpZGF0b3IuVFlQRV9ESVNDT1ZFUllfQklORElOR1RFTVBMQVRFICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfRElTQ09WRVJZX0JJTkRJTkdURU1QTEFURSA9ICJiaW5kaW5nVGVtcGxhdGUiOwotICAvKiogQGRlcHJlY2F0ZWQgLS0gdXNlIFVERElWYWxpZGF0b3IuVFlQRV9ESVNDT1ZFUllfVE1PREVMICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfRElTQ09WRVJZX1RNT0RFTCA9ICJ0TW9kZWwiOwotCi0gIC8qKgotICAgKiBFbnZlbG9wZSBlbnRyeSB0eXBlcy4KLSAgICovCi0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgZ2V0RW50cnlUeXBlKFN0cmluZyB0eXBlTmFtZSkgdG8gYWNjZXNzIEVudHJ5VHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBFbnRyeVR5cGUgRU5UUllfVFlQRV9SRVFVRVNURU5WID0gZ2V0RW50cnlUeXBlKFRZUEVfRU5WRUxPUEVfUkVRVUVTVCk7Ci0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgZ2V0RW50cnlUeXBlKFN0cmluZyB0eXBlTmFtZSkgdG8gYWNjZXNzIEVudHJ5VHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBFbnRyeVR5cGUgRU5UUllfVFlQRV9SRVNQT05TRUVOViA9IGdldEVudHJ5VHlwZShUWVBFX0VOVkVMT1BFX1JFU1BPTlNFKTsKLQotICAvKioKLSAgICogTWVzc2FnZSBlbnRyeSB0eXBlcy4KLSAgICovCi0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgZ2V0RW50cnlUeXBlKFN0cmluZyB0eXBlTmFtZSkgdG8gYWNjZXNzIEVudHJ5VHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBFbnRyeVR5cGUgRU5UUllfVFlQRV9SRVFVRVNUID0gZ2V0RW50cnlUeXBlKFRZUEVfTUVTU0FHRV9SRVFVRVNUKTsKLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBnZXRFbnRyeVR5cGUoU3RyaW5nIHR5cGVOYW1lKSB0byBhY2Nlc3MgRW50cnlUeXBlLiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIEVudHJ5VHlwZSBFTlRSWV9UWVBFX1JFU1BPTlNFID0gZ2V0RW50cnlUeXBlKFRZUEVfTUVTU0FHRV9SRVNQT05TRSk7Ci0gIC8vICBwdWJsaWMgc3RhdGljIGZpbmFsIEVudHJ5VHlwZSBFTlRSWV9UWVBFX0FOWUVOVFJZID0gCi0gIC8vICAgICAgICBuZXcgRW50cnlUeXBlKEFydGlmYWN0VHlwZS5BUlRJRkFDVF9UWVBFX01FU1NBR0VTLCBUWVBFX01FU1NBR0VfQU5ZRU5UUlkpOwotCi0gIC8qKgotICAgKiBEZXNjcmlwdGlvbiBlbnRyeSB0eXBlcy4KLSAgICovCi0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgZ2V0RW50cnlUeXBlKFN0cmluZyB0eXBlTmFtZSkgdG8gYWNjZXNzIEVudHJ5VHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBFbnRyeVR5cGUgRU5UUllfVFlQRV9ERUZJTklUSU9OUyA9IGdldEVudHJ5VHlwZShUWVBFX0RFU0NSSVBUSU9OX0RFRklOSVRJT05TKTsKLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBnZXRFbnRyeVR5cGUoU3RyaW5nIHR5cGVOYW1lKSB0byBhY2Nlc3MgRW50cnlUeXBlLiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIEVudHJ5VHlwZSBFTlRSWV9UWVBFX0lNUE9SVCA9IGdldEVudHJ5VHlwZShUWVBFX0RFU0NSSVBUSU9OX0lNUE9SVCk7Ci0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgZ2V0RW50cnlUeXBlKFN0cmluZyB0eXBlTmFtZSkgdG8gYWNjZXNzIEVudHJ5VHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBFbnRyeVR5cGUgRU5UUllfVFlQRV9UWVBFUyA9IGdldEVudHJ5VHlwZShUWVBFX0RFU0NSSVBUSU9OX1RZUEVTKTsKLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBnZXRFbnRyeVR5cGUoU3RyaW5nIHR5cGVOYW1lKSB0byBhY2Nlc3MgRW50cnlUeXBlLiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIEVudHJ5VHlwZSBFTlRSWV9UWVBFX01FU1NBR0UgPSBnZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9NRVNTQUdFKTsKLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBnZXRFbnRyeVR5cGUoU3RyaW5nIHR5cGVOYW1lKSB0byBhY2Nlc3MgRW50cnlUeXBlLiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIEVudHJ5VHlwZSBFTlRSWV9UWVBFX09QRVJBVElPTiA9IGdldEVudHJ5VHlwZShUWVBFX0RFU0NSSVBUSU9OX09QRVJBVElPTik7Ci0gIC8qKiBAZGVwcmVjYXRlZCAtLSB1c2UgZ2V0RW50cnlUeXBlKFN0cmluZyB0eXBlTmFtZSkgdG8gYWNjZXNzIEVudHJ5VHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBFbnRyeVR5cGUgRU5UUllfVFlQRV9QT1JUVFlQRSA9IGdldEVudHJ5VHlwZShUWVBFX0RFU0NSSVBUSU9OX1BPUlRUWVBFKTsKLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBnZXRFbnRyeVR5cGUoU3RyaW5nIHR5cGVOYW1lKSB0byBhY2Nlc3MgRW50cnlUeXBlLiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIEVudHJ5VHlwZSBFTlRSWV9UWVBFX0JJTkRJTkcgPSBnZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9CSU5ESU5HKTsKLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBnZXRFbnRyeVR5cGUoU3RyaW5nIHR5cGVOYW1lKSB0byBhY2Nlc3MgRW50cnlUeXBlLiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIEVudHJ5VHlwZSBFTlRSWV9UWVBFX1BPUlQgPSBnZXRFbnRyeVR5cGUoVFlQRV9ERVNDUklQVElPTl9QT1JUKTsKLQotICAvKioKLSAgICogRGlzY292ZXJ5IGVudHJ5IHR5cGVzLgotICAgKi8KLSAgLyoqIEBkZXByZWNhdGVkIC0tIHVzZSBnZXRFbnRyeVR5cGUoU3RyaW5nIHR5cGVOYW1lKSB0byBhY2Nlc3MgRW50cnlUeXBlLiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIEVudHJ5VHlwZSBFTlRSWV9UWVBFX0JJTkRJTkdURU1QTEFURSA9IGdldEVudHJ5VHlwZShUWVBFX0RJU0NPVkVSWV9CSU5ESU5HVEVNUExBVEUpOwotICAvKiogQGRlcHJlY2F0ZWQgLS0gdXNlIGdldEVudHJ5VHlwZShTdHJpbmcgdHlwZU5hbWUpIHRvIGFjY2VzcyBFbnRyeVR5cGUuICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgRW50cnlUeXBlIEVOVFJZX1RZUEVfVE1PREVMID0gZ2V0RW50cnlUeXBlKFRZUEVfRElTQ09WRVJZX1RNT0RFTCk7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBlbnRyeSB0eXBlLgotICAgKi8KLSAgcHJpdmF0ZSBFbnRyeVR5cGUoQXJ0aWZhY3RUeXBlIGFydGlmYWN0VHlwZSwgU3RyaW5nIHR5cGVOYW1lKQotICB7Ci0gICAgdGhpcy5hcnRpZmFjdFR5cGUgPSBhcnRpZmFjdFR5cGU7Ci0gICAgdGhpcy50eXBlTmFtZSA9IHR5cGVOYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIElzIGVudHJ5IHR5cGUgZXF1YWwgdG8gc3BlY2lmaWVkIHR5cGUuCi0gICAqIEBwYXJhbSB0eXBlTmFtZSBlbnRyeSB0eXBlIG5hbWUuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiBlbnRyeSB0eXBlIGVxdWFsIHRvIHNwZWNpZmllZCB0eXBlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNUeXBlKFN0cmluZyB0eXBlTmFtZSkKLSAgewotICAgIHJldHVybiB0aGlzLnR5cGVOYW1lLmVxdWFscyh0eXBlTmFtZSk7Ci0gIH0KLQotICAvKioKLSAgICogSXMgZW50cnkgdHlwZSBlcXVhbCB0byBzcGVjaWZpZWQgdHlwZS4KLSAgICogQHBhcmFtIGVudHJ5VHlwZSBlbnRyeSB0eXBlLgotICAgKiBAcmV0dXJuIHRydWUgaWYgZW50cnkgdHlwZSBlcXVhbCB0byBzcGVjaWZpZWQgdHlwZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzVHlwZShFbnRyeVR5cGUgZW50cnlUeXBlKQotICB7Ci0gICAgcmV0dXJuIHR5cGVOYW1lLmVxdWFscyhlbnRyeVR5cGUuZ2V0VHlwZU5hbWUoKSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGFydGlmYWN0IHR5cGUuCi0gICAqIEByZXR1cm4gYXJ0aWZhY3QgdHlwZS4KLSAgICovCi0gIHB1YmxpYyBBcnRpZmFjdFR5cGUgZ2V0QXJ0aWZhY3RUeXBlKCkKLSAgewotICAgIHJldHVybiBhcnRpZmFjdFR5cGU7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGVudHJ5IHR5cGUgbmFtZS4KLSAgICogQHJldHVybiBlbnRyeSB0eXBlIG5hbWUuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFR5cGVOYW1lKCkKLSAgewotICAgIHJldHVybiB0eXBlTmFtZTsKLSAgfQotCi0gIC8qKgotICAgKiBJcyB2YWxpZCBlbnRyeSB0eXBlLgotICAgKiBAcGFyYW0gdHlwZU5hbWUgZW50cnkgdHlwZSBuYW1lLgotICAgKiBAcmV0dXJuIHRydWUgaWYgZW50cnkgdHlwZSBuYW1lIGlzIHZhbGlkLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIGlzVmFsaWRFbnRyeVR5cGUoU3RyaW5nIHR5cGVOYW1lKQotICB7Ci0gICAgcmV0dXJuIChlbnRyeVR5cGVNYXAuZ2V0KHR5cGVOYW1lKSA9PSBudWxsID8gZmFsc2UgOiB0cnVlKTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgZW50cnkgdHlwZS4KLSAgICogQHBhcmFtIHR5cGVOYW1lIGVudHJ5IHR5cGUgbmFtZS4KLSAgICogQHJldHVybiBlbnRyeSB0eXBlLgotICAgKiBAdGhyb3dzIFJ1bnRpbWVFeGNlcHRpb24gaWYgZW50cnkgdHlwZSBuYW1lIGlzIGludmFsaWQgb3IgaW5hcHByb3ByaWF0ZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgRW50cnlUeXBlIGdldEVudHJ5VHlwZShTdHJpbmcgdHlwZU5hbWUpCi0gICAgdGhyb3dzIFJ1bnRpbWVFeGNlcHRpb24KLSAgewotICAgIGlmIChlbnRyeVR5cGVNYXAgPT0gbnVsbCkgewotICAgICAgICBCYXNlVmFsaWRhdG9yIHZhbGlkYXRvcnNbXSA9IFdTSVRlc3RUb29sc1BsdWdpbi5nZXRQbHVnaW4oKQotICAgICAgICAgICAgICAgIC5nZXRCYXNlVmFsaWRhdG9ycygpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhbGlkYXRvcnMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIFN0cmluZyBlbnRyeVR5cGVzW10gPSB2YWxpZGF0b3JzW2ldLmdldEVudHJ5VHlwZXMoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgZW50cnlUeXBlcy5sZW5ndGg7IGorKykKLSAgICAgICAgICAgICAgICByZWdpc3RlckVudHJ5VHlwZShBcnRpZmFjdFR5cGUuZ2V0QXJ0aWZhY3RUeXBlKAotICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yc1tpXS5nZXRBcnRpZmFjdFR5cGUoKSksIGVudHJ5VHlwZXNbal0pOwotICAgICAgICB9Ci0gICAgfQotICAgIC8vIEdldCB0aGUgZW50cnkgdHlwZSBieSB0eXBlIG5hbWUKLSAgICBFbnRyeVR5cGUgZW50cnlUeXBlID0gKEVudHJ5VHlwZSkgZW50cnlUeXBlTWFwLmdldCh0eXBlTmFtZSk7Ci0KLSAgICBpZiAoZW50cnlUeXBlID09IG51bGwpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oCi0gICAgICAgICJDb3VsZCBub3QgZ2V0IGVudHJ5IHR5cGUgYmVjYXVzZSB0eXBlIG5hbWUgaXMgaW52YWxpZDogIgotICAgICAgICAgICsgdHlwZU5hbWUKLSAgICAgICAgICArICIuIik7Ci0gICAgfQotCi0gICAgcmV0dXJuIGVudHJ5VHlwZTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgbGlzdCBvZiBlbnRyeSB0eXBlIG5hbWVzIGZvciBhIHNwZWNpZmllZCBhcnRpZmFjdCB0eXBlIG5hbWUuCi0gICAqIEBwYXJhbSBhcnRpZmFjdFR5cGVOYW1lIGFydGlmYWN0IHR5cGUgbmFtZS4KLSAgICogQHJldHVybiBsaXN0IG9mIGVudHJ5IHR5cGUgbmFtZXMgZm9yIGEgc3BlY2lmaWVkIGFydGlmYWN0IHR5cGUgbmFtZS4KLSAgICogQHRocm93cyBSdW50aW1lRXhjZXB0aW9uIGlmIGVudHJ5IHR5cGUgbmFtZSBpcyBpbnZhbGlkIG9yIGluYXBwcm9wcmlhdGUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFZlY3RvciBnZXRFbnRyeVR5cGVOYW1lTGlzdChTdHJpbmcgYXJ0aWZhY3RUeXBlTmFtZSkKLSAgICB0aHJvd3MgUnVudGltZUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gR2V0IGxpc3QKLSAgICBWZWN0b3IgZW50cnlUeXBlTmFtZUxpc3QgPSAoVmVjdG9yKSBlbnRyeVR5cGVOYW1lTWFwLmdldChhcnRpZmFjdFR5cGVOYW1lKTsKLQotICAgIC8vIElmIHRoZSBsaXN0IHdhcyBub3QgZm91bmQsIHRoZW4gdGhyb3cgYW4gZXhjZXB0aW9uCi0gICAgaWYgKGVudHJ5VHlwZU5hbWVMaXN0ID09IG51bGwpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oCi0gICAgICAgICJDb3VsZCBub3QgZ2V0IGVudHJ5IHR5cGUgbmFtZSBsaXN0IGJlY2F1c2UgYXJ0aWZhY3QgdHlwZSBuYW1lIGlzIGludmFsaWQ6ICIKLSAgICAgICAgICArIGFydGlmYWN0VHlwZU5hbWUKLSAgICAgICAgICArICIuIik7Ci0gICAgfQotCi0gICAgcmV0dXJuIGVudHJ5VHlwZU5hbWVMaXN0OwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBsaXN0IG9mIHR5cGUgbmFtZXMgZm9yIGEgc3BlY2lmaWVkIGFydGlmYWN0IHR5cGUgbmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgRW50cnlUeXBlIHJlZ2lzdGVyRW50cnlUeXBlKAotICAgIEFydGlmYWN0VHlwZSBhcnRpZmFjdFR5cGUsCi0gICAgU3RyaW5nIHR5cGVOYW1lKQotICB7Ci0gICAgRW50cnlUeXBlIGVudHJ5VHlwZSA9IG51bGw7Ci0KLSAgICAvLyBDcmVhdGUgZW50cnkgdHlwZQotICAgIGVudHJ5VHlwZSA9IG5ldyBFbnRyeVR5cGUoYXJ0aWZhY3RUeXBlLCB0eXBlTmFtZSk7Ci0KLSAgICBpZiAoZW50cnlUeXBlTWFwID09IG51bGwpIHsKLSAgICAgICAgZW50cnlUeXBlTWFwID0gbmV3IFRyZWVNYXAoKTsKLSAgICB9Ci0gICAgLy8gQWRkIHRvIGVudHJ5IHR5cGUgbWFwCi0gICAgZW50cnlUeXBlTWFwLnB1dCh0eXBlTmFtZSwgZW50cnlUeXBlKTsKLQotICAgIC8vIEdldCB0aGUgZW50cnkgdHlwZSBuYW1lIHZlY3RvciBmb3IgdGhlIGFydGlmYWN0IHR5cGUKLSAgICBWZWN0b3IgZW50cnlUeXBlTmFtZUxpc3QgPQotICAgICAgKFZlY3RvcikgZW50cnlUeXBlTmFtZU1hcC5nZXQoYXJ0aWZhY3RUeXBlLmdldFR5cGVOYW1lKCkpOwotICAgIAotICAgIC8vIExhenkgaW5pdGlhbGl6ZQotICAgIGlmIChlbnRyeVR5cGVOYW1lTGlzdCA9PSBudWxsKSB7Ci0gICAgICAgIGVudHJ5VHlwZU5hbWVMaXN0ID0gbmV3IFZlY3RvcigpOwotICAgICAgICBlbnRyeVR5cGVOYW1lTWFwLnB1dChhcnRpZmFjdFR5cGUuZ2V0VHlwZU5hbWUoKSwgZW50cnlUeXBlTmFtZUxpc3QpOwotICAgIH0KLQotICAgIC8vIEFkZCB0aGUgdHlwZSBuYW1lIHRvIHRoZSBsaXN0Ci0gICAgZW50cnlUeXBlTmFtZUxpc3QuYWRkKHR5cGVOYW1lKTsKLQotICAgIHJldHVybiBlbnRyeVR5cGU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvRXJyb3JMaXN0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL0Vycm9yTGlzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTU5N2Y0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvRXJyb3JMaXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnRleHQuRmllbGRQb3NpdGlvbjsKLWltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLS8qKgotICogVGhlIGNsYXNzIGFjY3VtdWxhdGVzIGFsbCBlcnJvciBzdHJpbmdzIGludG8gc3RyaW5nIGJ1ZmZlci4KLSAqIAotICogQGF1dGhvciBLdWxpawotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgRXJyb3JMaXN0Ci17Ci0gIHByaXZhdGUgU2V0IGVycm9ycyA9IG5ldyBIYXNoU2V0KCk7Ci0gIHByaXZhdGUgTWVzc2FnZUZvcm1hdCBmb3JtYXQgPSBuZXcgTWVzc2FnZUZvcm1hdCgiezB9OnsxfSIpOwotICBwcml2YXRlIEZpZWxkUG9zaXRpb24gcG9zID0gbmV3IEZpZWxkUG9zaXRpb24oMCk7Ci0KLSAgLyoqCi0gICAqIERlZmF1bHQgY29uc3RydWN0b3IuCi0gICAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCNPYmplY3QoKQotICAgKi8KLSAgcHVibGljIEVycm9yTGlzdCgpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3QgZXJyb3IgbGlzdCB1c2luZyBjb250ZW50cyBvZiBhIGxpc3QuCi0gICAqIEBwYXJhbSBsaXN0IGEgTGlzdCBvYmplY3QuCi0gICAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCNPYmplY3QoKQotICAgKi8KLSAgcHVibGljIEVycm9yTGlzdChMaXN0IGxpc3QpCi0gIHsKLSAgICBhZGQobGlzdCk7Ci0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0b3Igd2l0aCB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UgZm9ybWF0LgotICAgKiBAcGFyYW0gZiBhIG1lc3NhZ2UgZm9ybWF0LgotICAgKi8KLSAgcHVibGljIEVycm9yTGlzdChNZXNzYWdlRm9ybWF0IGYpCi0gIHsKLSAgICBpZiAoZiAhPSBudWxsKQotICAgICAgZm9ybWF0ID0gZjsKLSAgfQotCi0gIC8qKgotICAgKiBBZGQgbGlzdC4gCi0gICAqIEBwYXJhbSBsaXN0IGxpc3Qgb2YgZXJyb3JzLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkKExpc3QgbGlzdCkKLSAgewotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gbGlzdC5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgYWRkKChTdHJpbmcpIGl0ZXJhdG9yLm5leHQoKSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEFkZHMgZXJyb3IgZGVzY3JpcHRpb24gaW50byB0aGUgbGlzdC4gCi0gICAqIEBwYXJhbSBzMSBhIHN0cmluZy4KLSAgICogQHBhcmFtIHMyIGEgc3RyaW5nLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkKFN0cmluZyBzMSwgU3RyaW5nIHMyKQotICB7Ci0gICAgZXJyb3JzLmFkZChuZXcgUGFpcihzMSwgczIpKTsKLSAgfQotCi0gIC8qKgotICAgKiBBZGRzIGVycm9yIGRlc2NyaXB0aW9uIGludG8gdGhlIGxpc3QuCi0gICAqIEBwYXJhbSBxIGEgUU5hbWUgb2JqZWN0LgotICAgKiBAcGFyYW0gcyBhIHN0cmluZy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZChRTmFtZSBxLCBTdHJpbmcgcykKLSAgewotICAgIGVycm9ycy5hZGQobmV3IFBhaXIoTnVsbFV0aWwudG9TdHJpbmcocSksIHMpKTsKLSAgfQotCi0gIC8qKgotICAgKiBBZGRzIGVycm9yIGRlc2NyaXB0aW9uIGludG8gdGhlIGxpc3QuCi0gICAqIEBwYXJhbSBxMSBhIFFOYW1lIG9iamVjdC4KLSAgICogQHBhcmFtIHEyIGEgc3RyaW5nLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkKFFOYW1lIHExLCBRTmFtZSBxMikKLSAgewotICAgIGVycm9ycy5hZGQobmV3IFBhaXIoTnVsbFV0aWwudG9TdHJpbmcocTEpLCBOdWxsVXRpbC50b1N0cmluZyhxMikpKTsKLSAgfQotCi0gIC8qKgotICAgKiBBZGRzIGVycm9yIGRlc2NyaXB0aW9uIGludG8gdGhlIGxpc3QuLi4KLSAgICogQHBhcmFtIHEgYSBRTmFtZSBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGQoUU5hbWUgcSkKLSAgewotICAgIGVycm9ycy5hZGQobmV3IFBhaXIoTnVsbFV0aWwudG9TdHJpbmcocSksIG51bGwpKTsKLSAgfQotCi0gIC8qKgotICAgKiBBZGRzIGVycm9yIGRlc2NyaXB0aW9uIGludG8gdGhlIGxpc3QuCi0gICAqIEBwYXJhbSBzIGEgc3RyaW5nLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkKFN0cmluZyBzKQotICB7Ci0gICAgZXJyb3JzLmFkZChuZXcgUGFpcihzLCBudWxsKSk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgZXJyb3IgbGlzdCBzdHJpbmcgcmVwcmVzZW50YXRpb24uIAotICAgKiBAcmV0dXJuIHRoZSBlcnJvciBsaXN0IHN0cmluZyByZXByZXNlbnRhdGlvbi4gCi0gICAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCN0b1N0cmluZygpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIFN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0KLSAgICBJdGVyYXRvciBpdCA9IGVycm9ycy5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgewotICAgICAgUGFpciBwID0gKFBhaXIpIGl0Lm5leHQoKTsKLSAgICAgIGlmIChwLmdldEZpcnN0KCkgIT0gbnVsbCAmJiBwLmdldFNlY29uZCgpICE9IG51bGwpCi0gICAgICAgIGZvcm1hdC5mb3JtYXQobmV3IE9iamVjdFtdIHsgcC5nZXRGaXJzdCgpLCBwLmdldFNlY29uZCgpfSwgYnVmLCBwb3MpOwotICAgICAgZWxzZSBpZiAocC5nZXRGaXJzdCgpICE9IG51bGwpCi0gICAgICAgIGJ1Zi5hcHBlbmQocC5nZXRGaXJzdCgpKTsKLSAgICAgIGVsc2UKLSAgICAgICAgYnVmLmFwcGVuZChwLmdldFNlY29uZCgpKTsKLSAgICAgIGlmIChpdC5oYXNOZXh0KCkpCi0gICAgICAgIGJ1Zi5hcHBlbmQoIixcbiIpOwotICAgIH0KLQotICAgIHJldHVybiBidWYudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qKgotICAgKiBJbmRpY2F0ZXMgd2hldGhlciBlcnJvciBsaXN0IGlzIGVtcHR5IG9yIG5vdC4KLSAgICogQHJldHVybiB0cnVlIGlmIGVycm9yIGxpc3QgaXMgZW1wdHkuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0VtcHR5KCkKLSAgewotICAgIHJldHVybiBlcnJvcnMuc2l6ZSgpID09IDA7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvSFRUUENvbnN0YW50cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9IVFRQQ29uc3RhbnRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0YjA1MzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9IVFRQQ29uc3RhbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi0vKioKLSAqIEEgc2V0IG9mIEhUVFAgdmFsdWVzIHRoYXQgYXJlIGRlZmluZWQgYnkgTmV0d29yayBXb3JraW5nIEdyb3VwLgotICogaHR0cDovL3d3dy5pZXRmLm9yZy8KLSAqCi0gKiBAdmVyc2lvbiAxLjAKLSAqIEBhdXRob3IgSWx5YSBLYW5vbmlyb3YgKGtpb0Bpc2cuYXhtb3IuY29tKQotICovCi1wdWJsaWMgY2xhc3MgSFRUUENvbnN0YW50cyB7Ci0gIC8vIFRoZSBzdGFuZGFyZGl6ZWQgSFRUUCBIZWFkZXIgZmllbGQtbmFtZXMKLSAgLy8gaHR0cDovL3d3dy5tbm90Lm5ldC9kcmFmdHMvZHJhZnQtbm90dGluZ2hhbS1odHRwLWhlYWRlci1yZWctMDAudHh0Ci0KLSAgLy8gSHlwZXJ0ZXh0IFRyYW5zZmVyIFByb3RvY29sIC0tIEhUVFAvMS4xIChvYnNvbGV0ZXMgUkZDMjA2OCkKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0FDQ0VQVCA9ICJBY2NlcHQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQUNDRVBUX0NIQVJTRVQgPSAiQWNjZXB0LUNoYXJzZXQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQUNDRVBUX0VOQ09ESU5HID0gIkFjY2VwdC1FbmNvZGluZyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9BQ0NFUFRfTEFOR1VBR0UgPSAiQWNjZXB0LUxhbmd1YWdlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0FDQ0VQVF9SQU5HRVMgPSAiQWNjZXB0LVJhbmdlcyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9BR0UgPSAiQWdlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0FMTE9XID0gIkFsbG93IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0FVVEhPUklaQVRJT04gPSAiQXV0aG9yaXphdGlvbiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DQUNIRV9DT05UUk9MID0gIkNhY2hlLUNvbnRyb2wiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ09OTkVDVCA9ICJDb25uZWN0IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0NPTlRFTlRfRU5DT0RJTkcgPSAiQ29udGVudC1FbmNvZGluZyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DT05URU5UX0xBTkdVQUdFID0gIkNvbnRlbnQtTGFuZ3VhZ2UiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ09OVEVOVF9MRU5HVEggPSAiQ29udGVudC1MZW5ndGgiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ09OVEVOVF9MT0NBVElPTiA9ICJDb250ZW50LUxvY2F0aW9uIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0NPTlRFTlRfTUQ1ID0gIkNvbnRlbnQtTUQ1IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0NPTlRFTlRfUkFOR0UgPSAiQ29udGVudC1SYW5nZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DT05URU5UX1RZUEUgPSAiQ29udGVudC1UeXBlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0RBVEUgPSAiRGF0ZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9FVEFHID0gIkVUYWciOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfRVhQRUNUID0gIkV4cGVjdCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9FWFBJUkVTID0gIkV4cGlyZXMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfRlJPTSA9ICJGcm9tIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0hPU1QgPSAiSG9zdCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9JRl9NQVRDSCA9ICJJZi1NYXRjaCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9JRl9NT0RJRklFRF9TSU5DRSA9ICJJZi1Nb2RpZmllZC1TaW5jZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9JRl9OT05FX01BVENIID0gIklmLU5vbmUtTWF0Y2giOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfSUZfUkFOR0UgPSAiSWYtUmFuZ2UiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfSUZfVU5NT0RJRklFRF9TSU5DRSA9ICJJZi1Vbm1vZGlmaWVkLVNpbmNlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0xBU1RfTU9ESUZJRUQgPSAiTGFzdC1Nb2RpZmllZCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9MT0NBVElPTiA9ICJMb2NhdGlvbiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9NQVhfRk9SV0FSRFMgPSAiTWF4LUZvcndhcmRzIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1BSQUdNQSA9ICJQcmFnbWEiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfUFJPWFlfQVVUSEVOVElDQVRFID0gIlByb3h5LUF1dGhlbnRpY2F0ZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9QUk9YWV9BVVRIT1JJWkFUSU9OID0gIlByb3h5LUF1dGhvcml6YXRpb24iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfUkFOR0UgPSAiUmFuZ2UiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfUkVGRVJFUiA9ICJSZWZlcmVyIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1JFVFJZX0FGVEVSID0gIlJldHJ5LUFmdGVyIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1NFUlZFUiA9ICJTZXJ2ZXIiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfVEUgPSAiVEUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfVFJBSUxFUiA9ICJUcmFpbGVyIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1RSQU5TRkVSX0VOQ09ESU5HID0gIlRyYW5zZmVyLUVuY29kaW5nIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1VQR1JBREUgPSAiVXBncmFkZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9VU0VSX0FHRU5UID0gIlVzZXItQWdlbnQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfVkFSWSA9ICJWYXJ5IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1ZJQSA9ICJWaWEiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfV0FSTklORyA9ICJXYXJuaW5nIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1dXV19BVVRIRU5USUNBVEUgPSAiV1dXLUF1dGhlbnRpY2F0ZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9NSU1FX1ZFUlNJT04gPSAiTUlNRS1WZXJzaW9uIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0NPTlRFTlRfRElTUE9TSVRJT04gPSAiQ29udGVudC1EaXNwb3NpdGlvbiI7ICAKLQotICAvLyBIVFRQIEF1dGhlbnRpY2F0aW9uOiBCYXNpYyBhbmQgRGlnZXN0IEFjY2VzcyBBdXRoZW50aWNhdGlvbgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQVVUSEVOVElDQVRJT05fSU5GTyA9ICJBdXRoZW50aWNhdGlvbi1JbmZvIjsKLQotICAvLyBIVFRQIFN0YXRlIE1hbmFnZW1lbnQgTWVjaGFuaXNtCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9TRVRfQ09PS0lFID0gIlNldC1Db29raWUiOwotCi0gIC8vIEhUVFAgU3RhdGUgTWFuYWdlbWVudCBNZWNoYW5pc20gKG9ic29sZXRlcyBSRkMyMTA5KQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ09PS0lFID0gIkNvb2tpZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DT09LSUUyID0gIkNvb2tpZTIiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfU0VUX0NPT0tJRTIgPSAiU2V0LUNvb2tpZTIiOwotCi0gIC8vIFdlYiBEaXN0cmlidXRlZCBBdXRob3JpbmcgYW5kIFZlcnNpb25pbmcKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0RBViA9ICJEQVYiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfREVQVEggPSAiRGVwdGgiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfREVTVElOQVRJT04gPSAiRGVzdGluYXRpb24iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfSUYgPSAiSWYiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfTE9DS19UT0tFTiA9ICJMb2NrLVRva2VuIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX09WRVJXUklURSA9ICJPdmVyd3JpdGUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfU1RBVFVTX1VSSSA9ICJTdGF0dXMtVVJJIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1RJTUVPVVQgPSAiVGltZW91dCI7Ci0KLSAgLy8gSHlwZXJ0ZXh0IFRyYW5zZmVyIFByb3RvY29sIC0tIEhUVFAvMS4xIChQcm9wb3NlZCBTdGFuZGFyZCAtIHRoZXNlIGZpZWxkLW5hbWVzIGFyZSBub3cgY29uc2lkZXJlZCBvYnNvbGV0ZSkKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0NPTlRFTlRfQkFTRSA9ICJDb250ZW50LUJhc2UiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfUFVCTElDID0gIlB1YmxpYyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DT05URU5UX1ZFUlNJT04gPSAiQ29udGVudC1WZXJzaW9uIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0RFUklWRURfRlJPTSA9ICJEZXJpdmVkLUZyb20iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfTElOSyA9ICJMaW5rIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1VSSSA9ICJVUkkiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfS0VFUF9BTElWRSA9ICJLZWVwLUFsaXZlIjsKLQotICAvLyBEZWx0YSBFbmNvZGluZyBpbiBIVFRQCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9BX0lNID0gIkEtSU0iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfREVMVEFfQkFTRSA9ICJEZWx0YS1CYXNlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0lNID0gIklNIjsKLQotICAvLyBJbnN0YW5jZSBEaWdlc3RzIGluIEhUVFAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0RJR0VTVCA9ICJEaWdlc3QiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfV0FOVF9ESUdFU1QgPSAiV2FudC1EaWdlc3QiOwotCi0gIC8vIFNpbXBsZSBIaXQtTWV0ZXJpbmcgYW5kIFVzYWdlLUxpbWl0aW5nIGZvciBIVFRQCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9NRVRFUiA9ICJNZXRlciI7Ci0KLSAgLy8gVGhlIEtub3duIE5vbi1TdGFuZGFyZGl6ZWQgSFRUUCBIZWFkZXIgZmllbGQtbmFtZXMKLQotICAvLyBUcmFuc3BhcmVudCBDb250ZW50IE5lZ290aWF0aW9uIGluIEhUVFAKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0FDQ0VQVF9GRUFUVVJFUyA9ICJBY2NlcHQtRmVhdHVyZXMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQUxURVJOQVRFUyA9ICJBbHRlcm5hdGVzIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX05FR09USUFURSA9ICJOZWdvdGlhdGUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfVENOID0gIlRDTiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9WQVJJQU5UX1ZBUlkgPSAiVmFyaWFudC1WYXJ5IjsKLQotICAvLyBUaGUgU2FmZSBSZXNwb25zZSBIZWFkZXIgRmllbGQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1NBRkUgPSAiU2FmZSI7Ci0KLSAgLy8gSHlwZXIgVGV4dCBDb2ZmZWUgUG90IENvbnRyb2wgUHJvdG9jb2wgKEhUQ1BDUC8xLjApCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9BQ0NFUFRfQURESVRJT05TID0gIkFjY2VwdC1BZGRpdGlvbnMiOwotCi0gIC8vIFRoZSBTZWN1cmUgSHlwZXJUZXh0IFRyYW5zZmVyIFByb3RvY29sCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DT05URU5UX1BSSVZBQ1lfRE9NQUlOID0gIkNvbnRlbnQtUHJpdmFjeS1Eb21haW4iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfTUFDX0lORk8gPSAiTUFDLUluZm8iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfUFJFQVJSQU5HRURfS0VZX0lORk8gPSAiUHJlYXJyYW5nZWQtS2V5LUluZm8iOwotCi0gIC8vIEFuIEhUVFAgRXh0ZW5zaW9uIEZyYW1ld29yawotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ19FWFQgPSAiQy1FeHQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ19NQU4gPSAiQy1NYW4iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ19PUFQgPSAiQy1PcHQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfRVhUID0gIkV4dCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9NQU4gPSAiTWFuIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX09QVCA9ICJPcHQiOwotCi0gIC8vIFBJQ1MgTGFiZWwgRGlzdHJpYnV0aW9uIExhYmVsIFN5bnRheCBhbmQgQ29tbXVuaWNhdGlvbiBQcm90b2NvbHMKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1BJQ1NfTEFCRUwgPSAiUElDUy1MYWJlbCI7Ci0KLSAgLy8gUGxhdGZvcm0gRm9yIFByaXZhY3kgUHJlZmVyZW5jZXMgMS4wCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9QM1AgPSAiUDNQIjsKLQotICAvLyBQRVAgLSBhbiBFeHRlbnNpb24gTWVjaGFuaXNtIGZvciBIVFRQCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DX1BFUCA9ICJDLVBFUCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DX1BFUF9JTkZPID0gIkMtUEVQLUluZm8iOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfUEVQID0gIlBFUCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9QRVBfSU5GTyA9ICJQZXAtSW5mbyI7Ci0KLSAgLy8gVGhlIEhUVFAgRGlzdHJpYnV0aW9uIGFuZCBSZXBsaWNhdGlvbiBQcm90b2NvbAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ09OVEVOVF9JRCA9ICJDb250ZW50LUlEIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0RJRkZFUkVOVElBTF9JRCA9ICJEaWZmZXJlbnRpYWwtSUQiOwotCi0gIC8vIEVTSSBBcmNoaXRlY3R1cmUKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1NVUlJPR0FURV9DQVBBQklMSVRZID0gIlN1cnJvZ2F0ZS1DYXBhYmlsaXR5IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1NVUlJPR0FURV9DT05UUk9MID0gIlN1cnJvZ2F0ZS1Db250cm9sIjsKLQotICAvLyBTZWxlY3RpbmcgUGF5bWVudCBNZWNoYW5pc21zIE92ZXIgSFRUUAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfUFJPVE9DT0wgPSAiUHJvdG9jb2wiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfUFJPVE9DT0xfSU5GTyA9ICJQcm90b2NvbC1JbmZvIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1BST1RPQ09MX1FVRVJZID0gIlByb3RvY29sLVF1ZXJ5IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1BST1RPQ09MX1JFUVVFU1QgPSAiUHJvdG9jb2wtUmVxdWVzdCI7Ci0KLSAgLy8gSW1wbGVtZW50YXRpb24gb2YgT1BTIE92ZXIgSFRUUAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfR0VUUFJPRklMRSA9ICJHZXRQcm9maWxlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1BST0ZJTEVPQkpFQ1QgPSAiUHJvZmlsZU9iamVjdCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9TRVRQUk9GSUxFID0gIlNldFByb2ZpbGUiOwotCi0gIC8vIE5vdGlmaWNhdGlvbiBmb3IgUHJveHkgQ2FjaGVzCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9QUk9YWV9GRUFUVVJFUyA9ICJQcm94eS1GZWF0dXJlcyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9QUk9YWV9JTlNUUlVDVElPTiA9ICJQcm94eS1JbnN0cnVjdGlvbiI7Ci0KLSAgLy8gT2JqZWN0IEhlYWRlciBsaW5lcyBpbiBIVFRQCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DT05URU5UX1RSQU5TRkVSX0VOQ09ESU5HID0gIkNvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmciOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ09TVCA9ICJDb3N0IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX01FU1NBR0VfSUQgPSAiTWVzc2FnZS1JRCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9USVRMRSA9ICJUaXRsZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9WRVJTSU9OID0gIlZlcnNpb24iOwotCi0gIC8vIEEgUHJvcG9zZWQgRXh0ZW5zaW9uIE1lY2hhbmlzbSBmb3IgSFRUUAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfRVhURU5TSU9OID0gIkV4dGVuc2lvbiI7Ci0KLSAgLy8gV0lSRSAtIFczIElkZW50aWZpZXIgUmVzb2x1dGlvbiBFeHRlbnNpb25zCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9PUFRJT05BTCA9ICJPcHRpb25hbCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9SRVNPTFVUSU9OX0hJTlQgPSAiUmVzb2x1dGlvbi1IaW50IjsKLQotICAvLyBEdXBsaWNhdGUgU3VwcHJlc3Npb24gaW4gSFRUUAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfU1VCT0sgPSAiU3ViT0siOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfU1VCU1QgPSAiU3Vic3QiOwotCi0gIC8vIFNwZWNpZmljYXRpb24gb2YgSFRUUC8xLjEgT1BUSU9OUyBtZXNzYWdlcwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ09NUExJQU5DRSA9ICJDb21wbGlhbmNlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX05PTl9DT01QTElBTkNFID0gIk5vbi1Db21wbGlhbmNlIjsKLQotICAvLyBXaWRlbHktdXNlZCB1bmRvY3VtZW50ZWQgaGVhZGVycwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfUkVRVUVTVF9SQU5HRSA9ICJSZXF1ZXN0LVJhbmdlIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1VBX0NPTE9SID0gIlVBLUNvbG9yIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1VBX0NQVSA9ICJVQS1DUFUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfVUFfT1MgPSAiVUEtT1MiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfVUFfUElYRUxTID0gIlVBLVBpeGVscyI7Ci0KLSAgLy8gSW1wbGVtZW50YXRpb24gZXJyb3JzCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9SRUZFUlJFUiA9ICJSZWZlcnJlciI7Ci0KLSAgLy8gUHJpdmF0ZSBmZWF0dXJlcwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ09QWVJJR0hUID0gIkNvcHlyaWdodCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DT05URU5UID0gIkNvbnRlbnQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQVVUSE9SID0gIkF1dGhvciI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DT05UQUNUID0gIkNvbnRhY3QiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfS0VZV09SRFMgPSAiS2V5d29yZHMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfR0VORVJBVE9SID0gIkdlbmVyYXRvciI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9ERVNDUklQVElPTiA9ICJEZXNjcmlwdGlvbiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DT01NQU5EID0gIkNvbW1hbmQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfU0VTU0lPTiA9ICJTZXNzaW9uIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1RZUEUgPSAiVHlwZSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9NRVNTQUdFID0gIk1lc3NhZ2UiOwotCi0gIC8vIEFiYW5kb25lZCBwcm9wb3NhbHMKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1VOTEVTU19NT0RJRklFRF9TSU5DRSA9ICJVbmxlc3MtTW9kaWZpZWQtU2luY2UiOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIGFsbCB0aGUgc3RhbmRhcmRpemVkIEhUVFAgaGVhZGVyIG5hbWVzIHByZXNlbnRlZCBhcyBMaXN0Ci0gICAqIEByZXR1cm4gVGhlIGxpc3Qgb2Ygc3RhbmRhcmRpemVkIEhUVFAgaGVhZGVyIG5hbWVzCi0gICAqLwotICBwdWJsaWMgc3RhdGljIExpc3QgZ2V0U3RhbmRhcmRpemVkSGVhZGVyTmFtZXMoKSB7Ci0gICAgcmV0dXJuIEFycmF5cy5hc0xpc3QobmV3IE9iamVjdFtdIHsKLSAgICAgIEhFQURFUl9BQ0NFUFQudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9BQ0NFUFRfQ0hBUlNFVC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0FDQ0VQVF9FTkNPRElORy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0FDQ0VQVF9MQU5HVUFHRS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0FDQ0VQVF9SQU5HRVMudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9BR0UudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9BTExPVy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0FVVEhPUklaQVRJT04udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DQUNIRV9DT05UUk9MLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ09OTkVDVC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0NPTlRFTlRfRU5DT0RJTkcudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DT05URU5UX0xBTkdVQUdFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ09OVEVOVF9MRU5HVEgudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DT05URU5UX0xPQ0FUSU9OLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ09OVEVOVF9NRDUudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DT05URU5UX1JBTkdFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ09OVEVOVF9UWVBFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfREFURS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0VUQUcudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9FWFBFQ1QudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9FWFBJUkVTLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfRlJPTS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0hPU1QudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9JRl9NQVRDSC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0lGX01PRElGSUVEX1NJTkNFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfSUZfTk9ORV9NQVRDSC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0lGX1JBTkdFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfSUZfVU5NT0RJRklFRF9TSU5DRS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0xBU1RfTU9ESUZJRUQudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9MT0NBVElPTi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX01BWF9GT1JXQVJEUy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1BSQUdNQS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1BST1hZX0FVVEhFTlRJQ0FURS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1BST1hZX0FVVEhPUklaQVRJT04udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9SQU5HRS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1JFRkVSRVIudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9SRVRSWV9BRlRFUi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1NFUlZFUi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1RFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVFJBSUxFUi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1RSQU5TRkVSX0VOQ09ESU5HLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVVBHUkFERS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1VTRVJfQUdFTlQudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9WQVJZLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVklBLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfV0FSTklORy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1dXV19BVVRIRU5USUNBVEUudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9NSU1FX1ZFUlNJT04udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DT05URU5UX0RJU1BPU0lUSU9OLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9BVVRIRU5USUNBVElPTl9JTkZPLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9TRVRfQ09PS0lFLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9DT09LSUUudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DT09LSUUyLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfU0VUX0NPT0tJRTIudG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX0RBVi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0RFUFRILnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfREVTVElOQVRJT04udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9JRi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0xPQ0tfVE9LRU4udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9PVkVSV1JJVEUudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9TVEFUVVNfVVJJLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVElNRU9VVC50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfQ09OVEVOVF9CQVNFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfUFVCTElDLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ09OVEVOVF9WRVJTSU9OLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfREVSSVZFRF9GUk9NLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfTElOSy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1VSSS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0tFRVBfQUxJVkUudG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX0FfSU0udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9ERUxUQV9CQVNFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfSU0udG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX0RJR0VTVC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1dBTlRfRElHRVNULnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9NRVRFUi50b1VwcGVyQ2FzZSgpCi0gICAgfSk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyBhbGwgdGhlIG5vbi1zdGFuZGFyZGl6ZWQgSFRUUCBoZWFkZXIgbmFtZXMgcHJlc2VudGVkIGFzIExpc3QKLSAgICogQHJldHVybiBUaGUgbGlzdCBvZiBub24tc3RhbmRhcmRpemVkIEhUVFAgaGVhZGVyIG5hbWVzCi0gICAqLwotICBwdWJsaWMgc3RhdGljIExpc3QgZ2V0Tm9uU3RhbmRhcmRpemVkSGVhZGVyTmFtZXMoKSB7Ci0gICAgcmV0dXJuIEFycmF5cy5hc0xpc3QobmV3IE9iamVjdFtdIHsKLSAgICAgIEhFQURFUl9BQ0NFUFRfRkVBVFVSRVMudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9BTFRFUk5BVEVTLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfTkVHT1RJQVRFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVENOLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVkFSSUFOVF9WQVJZLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9TQUZFLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9BQ0NFUFRfQURESVRJT05TLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9DT05URU5UX1BSSVZBQ1lfRE9NQUlOLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfTUFDX0lORk8udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9QUkVBUlJBTkdFRF9LRVlfSU5GTy50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfQ19FWFQudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DX01BTi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0NfT1BULnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfRVhULnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfTUFOLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfT1BULnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9QSUNTX0xBQkVMLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfUFJPVE9DT0wudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9QUk9UT0NPTF9SRVFVRVNULnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9QM1AudG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX0NfUEVQLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ19QRVBfSU5GTy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1BFUC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1BFUF9JTkZPLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9DT05URU5UX0lELnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfRElGRkVSRU5USUFMX0lELnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9TVVJST0dBVEVfQ0FQQUJJTElUWS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1NVUlJPR0FURV9DT05UUk9MLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9QUk9UT0NPTC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1BST1RPQ09MX0lORk8udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9QUk9UT0NPTF9RVUVSWS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1BST1RPQ09MX1JFUVVFU1QudG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX0dFVFBST0ZJTEUudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9QUk9GSUxFT0JKRUNULnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfU0VUUFJPRklMRS50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfUFJPWFlfRkVBVFVSRVMudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9QUk9YWV9JTlNUUlVDVElPTi50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfQ09OVEVOVF9UUkFOU0ZFUl9FTkNPRElORy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0NPU1QudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9NRVNTQUdFX0lELnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVElUTEUudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9WRVJTSU9OLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9FWFRFTlNJT04udG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX09QVElPTkFMLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfUkVTT0xVVElPTl9ISU5ULnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9TVUJPSy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1NVQlNULnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9DT01QTElBTkNFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfTk9OX0NPTVBMSUFOQ0UudG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX1JFUVVFU1RfUkFOR0UudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9VQV9DT0xPUi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1VBX0NQVS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1VBX09TLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVUFfUElYRUxTLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9SRUZFUlJFUi50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfQ09QWVJJR0hULnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ09OVEVOVC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0FVVEhPUi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0NPTlRBQ1QudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9LRVlXT1JEUy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0dFTkVSQVRPUi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0RFU0NSSVBUSU9OLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ09NTUFORC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1NFU1NJT04udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9UWVBFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfTUVTU0FHRS50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfVU5MRVNTX01PRElGSUVEX1NJTkNFLnRvVXBwZXJDYXNlKCkKLSAgICB9KTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIGFsbCBrbm93biBIVFRQIGhlYWRlciBuYW1lcyBwcmVzZW50ZWQgYXMgTGlzdAotICAgKiBAcmV0dXJuIFRoZSBsaXN0IG9mIGFsbCBrbm93biBIVFRQIGhlYWRlciBuYW1lcwotICAgKi8KLSAgcHVibGljIHN0YXRpYyBMaXN0IGdldEFsbEtub3duSGVhZGVyTmFtZXMoKSB7Ci0gICAgcmV0dXJuIEFycmF5cy5hc0xpc3QobmV3IE9iamVjdFtdIHsKLSAgICAgIEhFQURFUl9BQ0NFUFQudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9BQ0NFUFRfQ0hBUlNFVC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0FDQ0VQVF9FTkNPRElORy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0FDQ0VQVF9MQU5HVUFHRS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0FDQ0VQVF9SQU5HRVMudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9BR0UudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9BTExPVy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0FVVEhPUklaQVRJT04udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DQUNIRV9DT05UUk9MLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ09OTkVDVC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0NPTlRFTlRfRU5DT0RJTkcudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DT05URU5UX0xBTkdVQUdFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ09OVEVOVF9MRU5HVEgudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DT05URU5UX0xPQ0FUSU9OLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ09OVEVOVF9NRDUudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DT05URU5UX1JBTkdFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ09OVEVOVF9UWVBFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfREFURS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0VUQUcudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9FWFBFQ1QudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9FWFBJUkVTLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfRlJPTS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0hPU1QudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9JRl9NQVRDSC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0lGX01PRElGSUVEX1NJTkNFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfSUZfTk9ORV9NQVRDSC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0lGX1JBTkdFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfSUZfVU5NT0RJRklFRF9TSU5DRS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0xBU1RfTU9ESUZJRUQudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9MT0NBVElPTi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX01BWF9GT1JXQVJEUy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1BSQUdNQS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1BST1hZX0FVVEhFTlRJQ0FURS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1BST1hZX0FVVEhPUklaQVRJT04udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9SQU5HRS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1JFRkVSRVIudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9SRVRSWV9BRlRFUi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1NFUlZFUi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1RFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVFJBSUxFUi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1RSQU5TRkVSX0VOQ09ESU5HLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVVBHUkFERS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1VTRVJfQUdFTlQudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9WQVJZLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVklBLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfV0FSTklORy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1dXV19BVVRIRU5USUNBVEUudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9NSU1FX1ZFUlNJT04udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DT05URU5UX0RJU1BPU0lUSU9OLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9BVVRIRU5USUNBVElPTl9JTkZPLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9TRVRfQ09PS0lFLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9DT09LSUUudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DT09LSUUyLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfU0VUX0NPT0tJRTIudG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX0RBVi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0RFUFRILnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfREVTVElOQVRJT04udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9JRi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0xPQ0tfVE9LRU4udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9PVkVSV1JJVEUudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9TVEFUVVNfVVJJLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVElNRU9VVC50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfQ09OVEVOVF9CQVNFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfUFVCTElDLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ09OVEVOVF9WRVJTSU9OLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfREVSSVZFRF9GUk9NLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfTElOSy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1VSSS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0tFRVBfQUxJVkUudG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX0FfSU0udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9ERUxUQV9CQVNFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfSU0udG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX0RJR0VTVC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1dBTlRfRElHRVNULnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9NRVRFUi50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfQUNDRVBUX0ZFQVRVUkVTLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQUxURVJOQVRFUy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX05FR09USUFURS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1RDTi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1ZBUklBTlRfVkFSWS50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfU0FGRS50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfQUNDRVBUX0FERElUSU9OUy50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfQ09OVEVOVF9QUklWQUNZX0RPTUFJTi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX01BQ19JTkZPLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfUFJFQVJSQU5HRURfS0VZX0lORk8udG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX0NfRVhULnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfQ19NQU4udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DX09QVC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0VYVC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX01BTi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX09QVC50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfUElDU19MQUJFTC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1BST1RPQ09MLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfUFJPVE9DT0xfUkVRVUVTVC50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfUDNQLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9DX1BFUC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0NfUEVQX0lORk8udG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9QRVAudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9QRVBfSU5GTy50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfQ09OVEVOVF9JRC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0RJRkZFUkVOVElBTF9JRC50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfU1VSUk9HQVRFX0NBUEFCSUxJVFkudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9TVVJST0dBVEVfQ09OVFJPTC50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfUFJPVE9DT0wudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9QUk9UT0NPTF9JTkZPLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfUFJPVE9DT0xfUVVFUlkudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9QUk9UT0NPTF9SRVFVRVNULnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9HRVRQUk9GSUxFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfUFJPRklMRU9CSkVDVC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1NFVFBST0ZJTEUudG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX1BST1hZX0ZFQVRVUkVTLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfUFJPWFlfSU5TVFJVQ1RJT04udG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX0NPTlRFTlRfVFJBTlNGRVJfRU5DT0RJTkcudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DT1NULnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfTUVTU0FHRV9JRC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1RJVExFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVkVSU0lPTi50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfRVhURU5TSU9OLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9PUFRJT05BTC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1JFU09MVVRJT05fSElOVC50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfU1VCT0sudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9TVUJTVC50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfQ09NUExJQU5DRS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX05PTl9DT01QTElBTkNFLnRvVXBwZXJDYXNlKCksCi0KLSAgICAgIEhFQURFUl9SRVFVRVNUX1JBTkdFLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVUFfQ09MT1IudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9VQV9DUFUudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9VQV9PUy50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX1VBX1BJWEVMUy50b1VwcGVyQ2FzZSgpLAotCi0gICAgICBIRUFERVJfUkVGRVJSRVIudG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX0NPUFlSSUdIVC50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0NPTlRFTlQudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9BVVRIT1IudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9DT05UQUNULnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfS0VZV09SRFMudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9HRU5FUkFUT1IudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9ERVNDUklQVElPTi50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX0NPTU1BTkQudG9VcHBlckNhc2UoKSwKLSAgICAgIEhFQURFUl9TRVNTSU9OLnRvVXBwZXJDYXNlKCksCi0gICAgICBIRUFERVJfVFlQRS50b1VwcGVyQ2FzZSgpLAotICAgICAgSEVBREVSX01FU1NBR0UudG9VcHBlckNhc2UoKSwKLQotICAgICAgSEVBREVSX1VOTEVTU19NT0RJRklFRF9TSU5DRS50b1VwcGVyQ2FzZSgpCi0gICAgfSk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL0hUVFBVdGlscy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9IVFRQVXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWU2ZTQ0My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL0hUVFBVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBjb20uaWJtLmljdS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci0KLS8qKgotICogU2V0IG9mIEhUVFBMIHJlbGF0ZWQgdXRpbGl0aWVzLgotICoKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0KLSAqLwotCi1wdWJsaWMgZmluYWwgY2xhc3MgSFRUUFV0aWxzCi17Ci0KLSAgLyoqCi0gICAqIEZpbmQgdGhlIFVSTCBzdHJpbmcgaW4gYSBIVFRQIFBPU1QgaGVhZGVyLgotICAgKiBAcGFyYW0gaHR0cFBvc3RIZWFkZXIgIGEgSFRUUCBQT1NUIGhlYWRlci4gCi0gICAqIEByZXR1cm4gdGhlIFVSTCBzdHJpbmcgaW4gYSBIVFRQIFBPU1QgaGVhZGVyLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0VVJMU3RyaW5nKFN0cmluZyBodHRwUG9zdEhlYWRlcikKLSAgewotICAgIFN0cmluZyB1cmxTdHJpbmcgPSBudWxsOwotICAgIGludCBzdGFydCwgZW5kOwotCi0gICAgLy8gSWYgUE9TVCwgdGhlbiBjb250aW51ZQotICAgIGlmIChodHRwUG9zdEhlYWRlci5zdGFydHNXaXRoKCJQT1NUIikgfHwgaHR0cFBvc3RIZWFkZXIuc3RhcnRzV2l0aCgiR0VUIikpCi0gICAgewotICAgICAgLy8gU3RhcnQgYWZ0ZXIgZmlyc3Qgc3BhY2UKLSAgICAgIHN0YXJ0ID0gaHR0cFBvc3RIZWFkZXIuaW5kZXhPZignICcpICsgMTsKLQotICAgICAgLy8gTG9vayBmb3IgbmV4dCBub24tc3BhY2UgY2hhcmFjdGVyCi0gICAgICB3aGlsZSAoaHR0cFBvc3RIZWFkZXIuY2hhckF0KHN0YXJ0KSA9PSAnICcpCi0gICAgICAgIHN0YXJ0Kys7Ci0KLSAgICAgIC8vIEZpbmQgbmV4dCBzcGFjZSBjaGFyYWN0ZXIKLSAgICAgIGVuZCA9IGh0dHBQb3N0SGVhZGVyLmluZGV4T2YoJyAnLCBzdGFydCk7Ci0KLSAgICAgIC8vIEdldCBVUkwgc3RyaW5nIHdoaWNoIGlzIGxvY2F0ZWQgaW4gYmV0d2VlbiBzdGFydCBhbmQgZW5kCi0gICAgICB1cmxTdHJpbmcgPSBodHRwUG9zdEhlYWRlci5zdWJzdHJpbmcoc3RhcnQsIGVuZCk7Ci0gICAgfQotCi0gICAgLy8gRWxzZSB0aHJvdyBleGNlcHRpb24KLSAgICBlbHNlCi0gICAgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgIkhUVFAgaGVhZGVyIGRvZXMgbm90IGNvbnRhaW4gUE9TVCBkYXRhICh3YXM6ICIgKyBodHRwUG9zdEhlYWRlciArICIpIik7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIFVSTCBzdHJpbmcKLSAgICByZXR1cm4gdXJsU3RyaW5nOwotICB9Ci0gIC8qKgotICAgKiBVdGlsaXR5IHRvIHByZXNlbnQgSFRUUCBoZWFkZXIgaW5mb3JtYXRpb24gYXMgYXR0cmlidXRlLXZhbHVlIHBhaXJzLCAKLSAgICogYmFzZWQgb24gJzonIGFzIGF0dHJpYnV0ZS12YWx1ZSBzZXBhcmF0b3IuCi0gICAqIEBwYXJhbSBodHRwSGVhZGVyU3RyaW5nIGFuIEhUVFAgaGVhZGVyIHN0cmluZy4KLSAgICogQHBhcmFtIHNlcGFyYXRvcnMgYXR0cmlidXRlLXZhbHVlIHNlcGFyYXRvciBsaXN0LgotICAgKiBAcmV0dXJuIEhUVFAgaGVhZGVyIGluZm9ybWF0aW9uIGFzIGF0dHJpYnV0ZS12YWx1ZSBwYWlycy4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdW5hYmxlIHRvIGNyZWF0ZSBIVFRQIGhlYWRlciBpbmZvcm1hdGlvbiAKLSAgICogICAgICAgICBhcyBhdHRyaWJ1dGUtdmFsdWUgcGFpcnMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIE1hcCBnZXRIdHRwSGVhZGVyVG9rZW5zKFN0cmluZyBodHRwSGVhZGVyU3RyaW5nLCBTdHJpbmcgc2VwYXJhdG9ycykKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmdUb2tlbml6ZXIgdG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcihodHRwSGVhZGVyU3RyaW5nLCAiXG5cclxmIik7Ci0gICAgTWFwIG1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgU3RyaW5nIG5hbWUgPSBudWxsOwotICAgIHdoaWxlICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKQotICAgIHsKLSAgICAgIFN0cmluZyBsaW5lID0gdG9rZW5pemVyLm5leHRUb2tlbigpOwotICAgICAgaW50IGluZGV4ID0gbGluZS5pbmRleE9mKHNlcGFyYXRvcnMpOwotICAgICAgaWYgKGluZGV4ID4gMCAmJiBpbmRleCA8IGxpbmUubGVuZ3RoKCkgLSAxKQotICAgICAgewotICAgICAgCW5hbWUgPSBsaW5lLnN1YnN0cmluZygwLCBpbmRleCkudG9VcHBlckNhc2UoKTsKLSAgICAgICAgbWFwLnB1dChuYW1lLCBsaW5lLnN1YnN0cmluZyhpbmRleCArIDEpLnRyaW0oKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGlmICgobmFtZSAhPSBudWxsKSAmJiAobGluZS5sZW5ndGgoKT4wKSAmJiBDaGFyYWN0ZXIuaXNXaGl0ZXNwYWNlKGxpbmUuY2hhckF0KDApKSkKLSAgICAgICAgICAgbWFwLnB1dChuYW1lLCBtYXAuZ2V0KG5hbWUpICsgIiAiICsgbGluZS50cmltKCkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbWFwOwotICB9Ci0gIAotICAvKioKLSAgICogVXRpbGl0eSB0byB0YWtlIHN1YiBhdHRyaWJ1dGUgdmFsdWUgZnJvbSBIVFRQIGhlYWRlcgotICAgKiBAcGFyYW0gaHR0cEhlYWRlclN0cmluZyBhbiBIVFRQIGhlYWRlciBzdHJpbmcuCi0gICAqIEBwYXJhbSBhdHRyaWJ1dGVOYW1lIGF0dHJpYnV0ZSBuYW1lLgotICAgKiBAcGFyYW0gc3ViQXR0cmlidXRlTmFtZSBzdWIgYXR0cmlidXRlIG5hbWUuCi0gICAqIEByZXR1cm4gc3ViIGF0dHJpYnV0ZSB2YWx1ZSBmcm9tIEhUVFAgaGVhZGVyLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB1bmFibGUgdG8gZ2V0IHN1YiBhdHRyaWJ1dGUgdmFsdWUgZnJvbSBIVFRQIGhlYWRlci4gCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRIdHRwSGVhZGVyU3ViQXR0cmlidXRlKFN0cmluZyBodHRwSGVhZGVyU3RyaW5nLCAKLSAgICAgIFN0cmluZyBhdHRyaWJ1dGVOYW1lLCBTdHJpbmcgc3ViQXR0cmlidXRlTmFtZSkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBnZXQgYXR0cmlidXRlIHZhbHVlCi0gICAgU3RyaW5nIHZhbHVlID0gCi0gICAgICAoU3RyaW5nKSBnZXRIdHRwSGVhZGVyVG9rZW5zKGh0dHBIZWFkZXJTdHJpbmcsIjoiKS5nZXQoYXR0cmlidXRlTmFtZS50b1VwcGVyQ2FzZSgpKTsKLSAgICBpZih2YWx1ZSAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIHNlYXJjaCBzdWIgYXR0cmlidXRlIHRva2VuCi0gICAgICBpbnQgaWR4USA9IHZhbHVlLnRvVXBwZXJDYXNlKCkuaW5kZXhPZihzdWJBdHRyaWJ1dGVOYW1lLnRvVXBwZXJDYXNlKCkrIj1cIiIpOwotICAgICAgaW50IGlkeCA9IHZhbHVlLnRvVXBwZXJDYXNlKCkuaW5kZXhPZihzdWJBdHRyaWJ1dGVOYW1lLnRvVXBwZXJDYXNlKCkrIj0iKTsKLSAgICAgIC8vIGlmIGF0dHJpYnV0ZSBpcyBxdW90ZWQKLSAgICAgIGlmIChpZHhRICE9IC0xKSAKLSAgICAgIHsKLSAgICAgICAgaWR4USArPSAoc3ViQXR0cmlidXRlTmFtZSsiPVwiIikubGVuZ3RoKCk7Ci0gICAgICAgIGludCBlSWR4USA9IHZhbHVlLmluZGV4T2YoIlwiIiwgaWR4USk7Ci0gICAgICAgIGlmIChlSWR4USAhPSAtMSkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiB2YWx1ZS5zdWJzdHJpbmcoaWR4USwgZUlkeFEpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgLy8gaWYgYXR0cmlidXRlIGRvIG5vdCBxdW90ZWQKLSAgICAgIGVsc2UgaWYgKGlkeCAhPSAtMSkKLSAgICAgIHsKLSAgICAgICAgaWR4ICs9IChzdWJBdHRyaWJ1dGVOYW1lKyI9IikubGVuZ3RoKCk7Ci0gICAgICAgIGludCBlSWR4ID0gLTE7Ci0gICAgICAgIC8vIGZpbmQgZW5kIHNwYWNlIHNlcGFyYXRvcgotICAgICAgICBpZiAoKGVJZHggPSB2YWx1ZS5pbmRleE9mKCIgIiwgaWR4KSkgIT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gdmFsdWUuc3Vic3RyaW5nKGlkeCwgZUlkeCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gZmluZCBjb21hIHNlcGFyYXRvcgotICAgICAgICBlbHNlIGlmICgoZUlkeCA9IHZhbHVlLmluZGV4T2YoIjsiLCBpZHgpKSAhPSAtMSkKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiB2YWx1ZS5zdWJzdHJpbmcoaWR4LCBlSWR4KTsKLSAgICAgICAgfQotICAgICAgICAvLyB0aGlzIGlzIGxhc3QgYXR0cmlidXRlCi0gICAgICAgIGVsc2UgCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gdmFsdWUuc3Vic3RyaW5nKGlkeCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIC8vIGlmIGF0dHJpYnV0ZSBkbyBub3QgZm91bmQKLSAgICAgIGVsc2UgCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdmFsdWU7Ci0gIH0KLQotICAvKioKLSAgICogVXRpbGl0eSB0byB0YWtlIGF0dHJpYnV0ZSB2YWx1ZSBmcm9tIEhUVFAgaGVhZGVyCi0gICAqIEBwYXJhbSBodHRwSGVhZGVyU3RyaW5nIGFuIEhUVFAgaGVhZGVyIHN0cmluZy4KLSAgICogQHBhcmFtIGF0dHJpYnV0ZU5hbWUgYXR0cmlidXRlIG5hbWUuCi0gICAqIEByZXR1cm4gYXR0cmlidXRlIHZhbHVlIGZyb20gSFRUUCBoZWFkZXIuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHVuYWJsZSB0byBnZXQgYXR0cmlidXRlIHZhbHVlIGZyb20gSFRUUCBoZWFkZXIuIAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0SHR0cEhlYWRlckF0dHJpYnV0ZShTdHJpbmcgaHR0cEhlYWRlclN0cmluZywgCi0gICAgICBTdHJpbmcgYXR0cmlidXRlTmFtZSkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgYXR0cmlidXRlVmFsdWUgPSAKLSAgICAgICAgKFN0cmluZykgZ2V0SHR0cEhlYWRlclRva2VucyhodHRwSGVhZGVyU3RyaW5nLCI6IikuZ2V0KGF0dHJpYnV0ZU5hbWUudG9VcHBlckNhc2UoKSk7Ci0gICAgLy8gZ2V0IGZpcnN0IHRva2VuCi0gICAgaWYoKGF0dHJpYnV0ZVZhbHVlICE9IG51bGwpICYmIChhdHRyaWJ1dGVWYWx1ZS5pbmRleE9mKCI7IikgIT0gLTEpKSB7Ci0gICAgICBhdHRyaWJ1dGVWYWx1ZSA9IGF0dHJpYnV0ZVZhbHVlLnN1YnN0cmluZygwLCBhdHRyaWJ1dGVWYWx1ZS5pbmRleE9mKCI7IikpOwotICAgIH0KLSAgICByZXR1cm4gYXR0cmlidXRlVmFsdWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvSHR0cEhlYWRlcnNWYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvSHR0cEhlYWRlcnNWYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc2YTQ5OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL0h0dHBIZWFkZXJzVmFsaWRhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzIxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS50ZXh0LlBhcnNlRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7Ci1pbXBvcnQgY29tLmlibS5pY3UudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci0KLWltcG9ydCBzdW4ubmV0Lnd3dy5NZXNzYWdlSGVhZGVyOwotCi1pbXBvcnQgY29tLmlibS5pY3UudGV4dC5TaW1wbGVEYXRlRm9ybWF0OwotCi0vKioKLSAqIFRoaXMgY2xhc3MgY2hlY2tzIEhUVFAgcmVxdWVzdCBoZWFkZXJzIGFib3V0IFJGQyAyNjE2LgotICoKLSAqIEBhdXRob3IgVm9sb2RpbiAKLSAqLwotcHVibGljIGNsYXNzIEh0dHBIZWFkZXJzVmFsaWRhdG9yCi17Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9BTExPVyA9ICJBbGxvdyI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ09OVEVOVF9UWVBFID0gIkNvbnRlbnQtVHlwZSI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ09OVEVOVF9FTkNPRElORyA9ICJDb250ZW50LUVuY29kaW5nIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DT05URU5UX0xBTkdVQUdFID0gIkNvbnRlbnQtTGFuZ3VhZ2UiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0NPTlRFTlRfTEVOR0hUID0gIkNvbnRlbnQtTGVuZ3RoIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DT05URU5UX0xPQ0FUSU9OID0gIkNvbnRlbnQtTG9jYXRpb24iOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0NPTlRFTlRfUkFOR0UgPSAiQ29udGVudC1SYW5nZSI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfRVhQSVJFUyA9ICJFeHBpcmVzIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9MQVNUX01PRElGSUVEID0gIkxhc3QtTW9kaWZpZWQiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0NBQ0hFX0NPTlRST0wgPSAiQ2FjaGUtQ29udHJvbCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ09OTkVDVElPTiA9ICJDb25uZWN0aW9uIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9EQVRFID0gIkRhdGUiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1BSQUdNQSA9ICJQcmFnbWEiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1RSQUlMRVIgPSAiVHJhaWxlciI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfVFJBTlNGRVJfRU5DT0RJTkcgPSAiVHJhbnNmZXItRW5jb2RpbmciOwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfVVBHUkFERSA9ICJVcGdyYWRlIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9WSUEgPSAiVmlhIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9XQVJOSU5HID0gIldhcm5pbmciOwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQUNDRVBUID0gIkFjY2VwdCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQUNDRVBUX0NIQVJTRVQgPSAiQWNjZXB0LUNoYXJzZXQiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0FDQ0VQVF9FTkNPRElORyA9ICJBY2NlcHQtRW5jb2RpbmciOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0FDQ0VQVF9MQU5HVUFHRSA9ICJBY2NlcHQtTGFuZ3VhZ2UiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0FVVEhPUklaQVRJT04gPSAiQXV0aG9yaXphdGlvbiI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfRVhQRUNUID0gIkV4cGVjdCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfRlJPTSA9ICJGcm9tIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9IT1NUID0gIkhvc3QiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0lGX01BVENIID0gIklmLU1hdGNoIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9JRl9NT0RJRklFRF9TSU5DRSA9ICJJZi1Nb2RpZmllZC1TaW5jZSI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfSUZfTk9ORV9NQVRDSCA9ICJJZi1Ob25lLU1hdGNoIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9JRl9SQU5HRSA9ICJJZi1SYW5nZSI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfSUZfVU5NT0RJRklFRF9TSU5DRSA9Ci0gICAgIklmLVVubW9kaWZpZWQtU2luY2UiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX01BWF9GT1JXQVJEUyA9ICJNYXgtRm9yd2FyZHMiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX1BST1hZX0FVVEhPUklaQVRJT04gPQotICAgICJQcm94eS1BdXRob3JpemF0aW9uIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9SQU5HRSA9ICJSYW5nZSI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfUkVGRVJFUiA9ICJSZWZlcmVyIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9URSA9ICJURSI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfVVNFUl9BR0VOVCA9ICJVc2VyLUFnZW50IjsKLQotICAvKioKLSAgICogVGhpcyBjbGFzcyBjaGVja3MgZS1tYWlsIHN0cmluZyBhYm91dCBSRkMgODIyLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBjbGFzcyBNYWlsYm94VmFsaWRhdG9yCi0gIHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyW10gU1BFQ0lBTCA9Ci0gICAgICB7ICcoJywgJyknLCAnPCcsICc+JywgJ0AnLCAnLCcsICc7JywgJzonLCAnXFwnLCAnXCInLCAnLicsICdbJywgJ10nIH07Ci0KLSAgICAvKioKLSAgICAJKiBWYWxpZGF0ZXMgZS1tYWlsIHN0cmluZy4KLSAgICAqIEBwYXJhbSBtYWlsYm94IGUtbWFpbCBzdHJpbmcKLSAgICAqIEByZXR1cm4gYm9vbGVhbiAgdHJ1ZSBpZiBlLW1haWwgc3RyaW5nIGlzIGNvbmZvcm0gdG8gUkZDIDgyMiwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgICovCi0KLSAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gdmFsaWRhdGVNYWlsYm94KFN0cmluZyBtYWlsYm94KQotICAgIHsKLQotICAgICAgaWYgKCFpc0Z1bGxBZGRyKG1haWxib3gpICYmICFpc1Nob3J0QWRkcihtYWlsYm94KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBNZXRob2QgaXNTaW1wbGVBZGRyLgotICAgICAqIEBwYXJhbSBtYWlsYm94Ci0gICAgICogQHJldHVybiBib29sZWFuCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1Nob3J0QWRkcihTdHJpbmcgbWFpbGJveCkKLSAgICB7Ci0gICAgICBpbnQgaW5kZXhBdCA9IG1haWxib3guaW5kZXhPZignQCcpOwotICAgICAgaWYgKGluZGV4QXQgPT0gLTEpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgaWYgKCFpc0xvY2FsUGFydChtYWlsYm94LnN1YnN0cmluZygwLCBpbmRleEF0KSkKLSAgICAgICAgfHwgIWlzRG9tYWluKG1haWxib3guc3Vic3RyaW5nKGluZGV4QXQgKyAxKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogTWV0aG9kIGlzRG9tYWltLgotICAgICAqIEBwYXJhbSBzdHJpbmcKLSAgICAgKiByZXR1cm4gYm9vbGVhbgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNEb21haW4oU3RyaW5nIHN0cmluZykKLSAgICB7Ci0gICAgICBpZiAoc3RyaW5nLnRyaW0oKS5sZW5ndGgoKSA9PSAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHN0cmluZywgIi4iKTsKLSAgICAgIHdoaWxlIChzdC5oYXNNb3JlVG9rZW5zKCkpCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBzdWJEb21haW4gPSBzdC5uZXh0VG9rZW4oKTsKLSAgICAgICAgaWYgKCFpc0F0b20oc3ViRG9tYWluKSAmJiAhaXNEb21haW5MaXRlcmFsKHN1YkRvbWFpbikpCi0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICB9Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBNZXRob2QgaXNEb21haW5MaXRlcmFsLgotICAgICAqIEBwYXJhbSBzdWJEb21haW4KLSAgICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzRG9tYWluTGl0ZXJhbChTdHJpbmcgc3ViRG9tYWluKQotICAgIHsKLSAgICAgIGlmIChnZXRMYXN0RG9tYWluTGl0ZXJhbChzdWJEb21haW4sIDApID09IHN1YkRvbWFpbi5sZW5ndGgoKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBpbnQgZ2V0TGFzdERvbWFpbkxpdGVyYWwoU3RyaW5nIHN0ciwgaW50IHN0YXJ0SW5kZXgpCi0gICAgewotCi0gICAgICBpbnQgaW5kZXggPSBzdGFydEluZGV4OwotICAgICAgLy9pbnQgbmV3SW5kZXggPSAwOwotCi0gICAgICAvLyBpZiBlbmQgaWYgdGhlIHN0cmluZwotICAgICAgaWYgKHN0YXJ0SW5kZXggPT0gc3RyLmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gc3RhcnRJbmRleDsKLSAgICAgIC8vIGlmIHRoZSBiZWdpbiBpcyBub3QgJ1snCi0gICAgICBpZiAoc3RyLmNoYXJBdChpbmRleCkgIT0gJ1snKQotICAgICAgICByZXR1cm4gc3RhcnRJbmRleDsKLQotICAgICAgaW5kZXgrKzsKLSAgICAgIHdoaWxlICh0cnVlKQotICAgICAgewotICAgICAgICBpbmRleCA9IGdldExhc3REdGV4dChzdHIsIGluZGV4KTsKLSAgICAgICAgaWYgKGluZGV4ID09IHN0ci5sZW5ndGgoKSkKLSAgICAgICAgICByZXR1cm4gc3RhcnRJbmRleDsKLSAgICAgICAgaWYgKEJhc2ljUnVsZXMuaXNRdW90ZWRQYWlyKHN0ciwgaW5kZXggLSAxKSkKLSAgICAgICAgewotICAgICAgICAgIGluZGV4Kys7Ci0gICAgICAgICAgaWYgKGluZGV4ID09IHN0ci5sZW5ndGgoKSkKLSAgICAgICAgICAgIHJldHVybiBzdGFydEluZGV4OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIC8vIGlmIHRoZSBlbmQgaXMgbm90ICddJwotICAgICAgaWYgKHN0ci5jaGFyQXQoaW5kZXgpICE9ICddJykKLSAgICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICAgIGluZGV4Kys7Ci0gICAgICByZXR1cm4gaW5kZXg7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgaW50IGdldExhc3REdGV4dChTdHJpbmcgc3RyLCBpbnQgc3RhcnRJbmRleCkKLSAgICB7Ci0gICAgICBpZiAoc3RyLmxlbmd0aCgpID09IHN0YXJ0SW5kZXgpCi0gICAgICAgIHJldHVybiBzdGFydEluZGV4OwotICAgICAgaW50IGkgPSAwOwotICAgICAgZm9yICg7IGkgPCBzdHIubGVuZ3RoKCk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgY2hhciBjaCA9IHN0ci5jaGFyQXQoaSk7Ci0gICAgICAgIGkgPSBCYXNpY1J1bGVzLmdldExhc3RJbmRleExXUyhzdHIsIGkpOwotICAgICAgICBpZiAoIUJhc2ljUnVsZXMuaXNDSEFSKGNoKQotICAgICAgICAgIHx8IHN0ci5jaGFyQXQoaSkgPT0gJ1snCi0gICAgICAgICAgfHwgc3RyLmNoYXJBdChpKSA9PSAnXScKLSAgICAgICAgICB8fCBzdHIuY2hhckF0KGkpID09ICdcXCcKLSAgICAgICAgICB8fCBzdHIuY2hhckF0KGkpID09IEJhc2ljUnVsZXMuQ1IpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gaSArIDE7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiBpICsgMTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBNZXRob2QgaXNMb2NhbFBhcnQuCi0gICAgICogQHBhcmFtIHN0cmluZwotICAgICAqIEByZXR1cm4gYm9vbGVhbgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNMb2NhbFBhcnQoU3RyaW5nIHN0cmluZykKLSAgICB7Ci0gICAgICBpZiAoc3RyaW5nLnRyaW0oKS5sZW5ndGgoKSA9PSAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHN0cmluZywgIi4iKTsKLSAgICAgIHdoaWxlIChzdC5oYXNNb3JlVG9rZW5zKCkpCi0gICAgICB7Ci0gICAgICAgIGlmICghaXNXb3JkKHN0Lm5leHRUb2tlbigpKSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBNZXRob2QgaXNXb3JkLgotICAgICAqIEBwYXJhbSBzdHJpbmcKLSAgICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzV29yZChTdHJpbmcgc3RyaW5nKQotICAgIHsKLSAgICAgIGlmICghaXNBdG9tKHN0cmluZykgJiYgIWlzUXVvdGVkU3RyaW5nKHN0cmluZykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIE1ldGhvZCBpc0F0b20uCi0gICAgICogQHBhcmFtIHN0cmluZwotICAgICAqIEByZXR1cm4gYm9vbGVhbgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNBdG9tKFN0cmluZyBzdHJpbmcpCi0gICAgewotICAgICAgaWYgKHN0cmluZy5sZW5ndGgoKSA9PSAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGgoKTsgaSsrKQotICAgICAgewotICAgICAgICBpZiAoIUJhc2ljUnVsZXMuaXNDSEFSKHN0cmluZy5jaGFyQXQoaSkpCi0gICAgICAgICAgfHwgaXNTcGVjaWFsKHN0cmluZy5jaGFyQXQoaSkpCi0gICAgICAgICAgfHwgc3RyaW5nLmNoYXJBdChpKSA9PSAnICcKLSAgICAgICAgICB8fCBCYXNpY1J1bGVzLmlzQ1RMKHN0cmluZy5jaGFyQXQoaSkpKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBNZXRob2QgaXNTcGVjaWFsLgotICAgICAqIEBwYXJhbSBjCi0gICAgICogQHJldHVybiBib29sZWFuCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1NwZWNpYWwoY2hhciBjaCkKLSAgICB7Ci0gICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgU1BFQ0lBTC5sZW5ndGg7IGluZGV4KyspCi0gICAgICB7Ci0gICAgICAgIGlmIChjaCA9PSBTUEVDSUFMW2luZGV4XSkKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBNZXRob2QgaXNGdWxsQWRkci4KLSAgICAgKiBAcGFyYW0gbWFpbGJveAotICAgICAqIEByZXR1cm4gYm9vbGVhbgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNGdWxsQWRkcihTdHJpbmcgbWFpbGJveCkKLSAgICB7Ci0gICAgICBpZiAobWFpbGJveC5sZW5ndGgoKSA9PSAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICBpbnQgaWR4TFQgPSBtYWlsYm94LmluZGV4T2YoJzwnKTsKLSAgICAgIGlmIChpZHhMVCA9PSAtMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAvL2lzIHBocmFzZQotICAgICAgU3RyaW5nIHBocmFzZSA9IG1haWxib3guc3Vic3RyaW5nKDAsIGlkeExUKTsKLSAgICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIocGhyYXNlLCAiICIpOwotICAgICAgaWYgKHN0LmNvdW50VG9rZW5zKCkgPT0gMCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkKLSAgICAgIHsKLSAgICAgICAgaWYgKCFpc1dvcmQoc3QubmV4dFRva2VuKCkpKQotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGlmIChwaHJhc2UuY2hhckF0KHBocmFzZS5sZW5ndGgoKSAtIDEpICE9IEJhc2ljUnVsZXMuU1ApCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLQotICAgICAgLy9pcyByb3V0ZS1hZGRyCi0gICAgICBTdHJpbmcgcm91dGVBZGRyID0gbWFpbGJveC5zdWJzdHJpbmcoaWR4TFQgKyAxKTsKLSAgICAgIC8vIGlzIHJvdXRlCi0gICAgICBpbnQgaWR4VHdvU3BvdCA9IHJvdXRlQWRkci5pbmRleE9mKCc6Jyk7Ci0gICAgICBpZiAoaWR4VHdvU3BvdCAhPSAtMSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0Um91dGVBZGRyID0KLSAgICAgICAgICBuZXcgU3RyaW5nVG9rZW5pemVyKHJvdXRlQWRkci5zdWJzdHJpbmcoMCwgaWR4VHdvU3BvdCksICIsIik7Ci0gICAgICAgIGlmICghc3RSb3V0ZUFkZHIuaGFzTW9yZVRva2VucygpKQotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgd2hpbGUgKHN0Um91dGVBZGRyLmhhc01vcmVUb2tlbnMoKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNEb21haW4oc3RSb3V0ZUFkZHIubmV4dFRva2VuKCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8vaXMgYWRkciBzcGVjCi0gICAgICBpbnQgaWR4R1QgPSByb3V0ZUFkZHIuaW5kZXhPZignPicpOwotICAgICAgaWYgKGlkeEdUID09IC0xIHx8IGlkeEdUICE9IChyb3V0ZUFkZHIubGVuZ3RoKCkgLSAxKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICBpZiAoIWlzU2hvcnRBZGRyKHJvdXRlQWRkci5zdWJzdHJpbmcoaWR4VHdvU3BvdCArIDEsIGlkeEdUKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gIH0KLQotICAvKioKLSAgICogVmFsaWRhdGVzIEhUVFAgcmVxdWVzdCBoZWFkZXJzLgotICAgKiBAcGFyYW0gaGVhZGVycyBIVFRQIHJlcXVlc3QgaGVhZGVycwotICAgKiBAcmV0dXJuIGJvb2xlYW4gIHRydWUgaWYgYWxsIEhUVFAgaGVhZGVycyBzdHJpbmcgaXMgY29uZm9ybSB0byBSRkMgMjYxNiwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLQotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gdmFsaWRhdGVIdHRwUmVxdWVzdEhlYWRlcnMoU3RyaW5nIGhlYWRlcnMpCi0gIHsKLQotICAgIE1lc3NhZ2VIZWFkZXIgbWggPSBuZXcgTWVzc2FnZUhlYWRlcigpOwotICAgIHRyeQotICAgIHsKLSAgICAgIG1oLnBhcnNlSGVhZGVyKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShoZWFkZXJzLmdldEJ5dGVzKCkpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFN0cmluZyBoZWFkZXIgPSBudWxsOwotICAgIFN0cmluZyB2YWx1ZSA9IG51bGw7Ci0KLSAgICBoZWFkZXIgPSBtaC5nZXRLZXkoMCk7Ci0gICAgaWYgKGhlYWRlciAhPSBudWxsKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdmFsdWUgPSBtaC5nZXRWYWx1ZSgwKTsKLSAgICBpZiAodmFsdWUgPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vbWV0aG9kCi0gICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcih2YWx1ZSwgIiAiKTsKLSAgICBpZiAoIXN0Lmhhc01vcmVFbGVtZW50cygpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFN0cmluZyBzdHIgPSBzdC5uZXh0VG9rZW4oKTsKLSAgICBpZiAoIWlzVG9rZW4oc3RyKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghc3QuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgc3RyID0gc3QubmV4dFRva2VuKCk7Ci0gICAgaWYgKCFpc1VSSShzdHIpICYmICFzdHIuZXF1YWxzKCIqIikpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIXN0Lmhhc01vcmVFbGVtZW50cygpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHN0ciA9IHN0Lm5leHRUb2tlbigpOwotICAgIGlmICghaXNIVFRQVmVyc2lvbihzdHIpKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaW50IGkgPSAxOwotICAgIHRyeQotICAgIHsKLSAgICAgIHdoaWxlICgoaGVhZGVyID0gbWguZ2V0S2V5KGkpKSAhPSBudWxsKQotICAgICAgewotICAgICAgICB2YWx1ZSA9IG1oLmdldFZhbHVlKGkpOwotICAgICAgICBpKys7Ci0KLSAgICAgICAgLy8gaXMgbWVzc2FnZS1oZWFkZXIgdG9rZW4KLSAgICAgICAgaWYgKCFpc1Rva2VuKGhlYWRlcikpCi0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIC8vLS0tLSBlbnRpdHktaGVhZGVycwotCi0gICAgICAgIGlmIChoZWFkZXIuZXF1YWxzKEhFQURFUl9BTExPVykpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIWlzVmFsaWRBbGxvdyh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaGVhZGVyLmVxdWFscyhIRUFERVJfQ09OVEVOVF9UWVBFKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNNZWRpYVR5cGUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChoZWFkZXIuZXF1YWxzKEhFQURFUl9DT05URU5UX0VOQ09ESU5HKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNUb2tlbih2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGhlYWRlci5lcXVhbHMoSEVBREVSX0NPTlRFTlRfTEFOR1VBR0UpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFpc0xhbmd1YWdlVGFnKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoaGVhZGVyLmVxdWFscyhIRUFERVJfQ09OVEVOVF9MRU5HSFQpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFpc0RpZGdpdCh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGhlYWRlci5lcXVhbHMoSEVBREVSX0NPTlRFTlRfTE9DQVRJT04pKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFpc1VSSSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaGVhZGVyLmVxdWFscyhIRUFERVJfQ09OVEVOVF9SQU5HRSkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIWlzVmFsaWRDb250ZW50UmFuZ2UodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGhlYWRlci5lcXVhbHMoSEVBREVSX0VYUElSRVMpCi0gICAgICAgICAgfHwgaGVhZGVyLmVxdWFscyhIRUFERVJfTEFTVF9NT0RJRklFRCkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIWlzSFRUUERhdGUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8tLS0tIGdlbmVyYWwtaGVhZGVycwotICAgICAgICBpZiAoaGVhZGVyLmVxdWFscyhIRUFERVJfQ0FDSEVfQ09OVFJPTCkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIWlzVmFsaWRDYWNoZUNvbnRyb2wodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgLy9yZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChoZWFkZXIuZXF1YWxzKEhFQURFUl9DT05ORUNUSU9OKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNUb2tlbih2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaGVhZGVyLmVxdWFscyhIRUFERVJfREFURSkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIWlzSFRUUERhdGUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGhlYWRlci5lcXVhbHMoSEVBREVSX1BSQUdNQSkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIWlzUHJhZ21hRGVyZWN0aXZlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChoZWFkZXIuZXF1YWxzKEhFQURFUl9UUkFJTEVSKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNUb2tlbih2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaGVhZGVyLmVxdWFscyhIRUFERVJfVFJBTlNGRVJfRU5DT0RJTkcpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFpc1RyYW5zZmVyQ29kaW5nKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChoZWFkZXIuZXF1YWxzKEhFQURFUl9VUEdSQURFKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNWYWxpZFVwZ3JhZGUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGhlYWRlci5lcXVhbHMoSEVBREVSX1ZJQSkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIWlzVmFsaWRWaWEodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGhlYWRlci5lcXVhbHMoSEVBREVSX1dBUk5JTkcpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFpc1ZhbGlkV2FybmluZyh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaGVhZGVyLmVxdWFscyhIRUFERVJfQUNDRVBUKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNWYWxpZEFjY2VwdCh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaGVhZGVyLmVxdWFscyhIRUFERVJfQUNDRVBUX0NIQVJTRVQpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFpc1ZhbGlkQWNjZXB0Q2hhclNldCh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaGVhZGVyLmVxdWFscyhIRUFERVJfQUNDRVBUX0VOQ09ESU5HKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNWYWxpZEFjY2VwdEVuY29kaW5nKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChoZWFkZXIuZXF1YWxzKEhFQURFUl9BQ0NFUFRfTEFOR1VBR0UpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFpc1ZhbGlkQWNjZXB0TGFuZ3VhZ2UodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGhlYWRlci5lcXVhbHMoSEVBREVSX0FVVEhPUklaQVRJT04pCi0gICAgICAgICAgfHwgaGVhZGVyLmVxdWFscyhIRUFERVJfUFJPWFlfQVVUSE9SSVpBVElPTikpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIWlzQ3JlZGVudGlhbHModmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChoZWFkZXIuZXF1YWxzKEhFQURFUl9FWFBFQ1QpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFpc0V4cGVjdGF0aW9uKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChoZWFkZXIuZXF1YWxzKEhFQURFUl9GUk9NKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghTWFpbGJveFZhbGlkYXRvci52YWxpZGF0ZU1haWxib3godmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGhlYWRlci5lcXVhbHMoSEVBREVSX0lGX01BVENIKQotICAgICAgICAgIHx8IGhlYWRlci5lcXVhbHMoSEVBREVSX0lGX05PTkVfTUFUQ0gpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFpc1ZhbGlkSWZNYXRjaCh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGhlYWRlci5lcXVhbHMoSEVBREVSX0lGX1JBTkdFKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNFbnRpdHlUYWcodmFsdWUpICYmICFpc0hUVFBEYXRlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLS0tCQkJCi0gICAgICAgIGlmIChoZWFkZXIuZXF1YWxzKEhFQURFUl9JRl9NT0RJRklFRF9TSU5DRSkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIWlzSFRUUERhdGUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChoZWFkZXIuZXF1YWxzKEhFQURFUl9JRl9VTk1PRElGSUVEX1NJTkNFKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNIVFRQRGF0ZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGhlYWRlci5lcXVhbHMoSEVBREVSX01BWF9GT1JXQVJEUykpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIWlzRGlkZ2l0KHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChoZWFkZXIuZXF1YWxzKEhFQURFUl9VU0VSX0FHRU5UKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNWYWxpZFVzZXJBZ2VudCh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaGVhZGVyLmVxdWFscyhIRUFERVJfVEUpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFpc1ZhbGlkVEUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGhlYWRlci5lcXVhbHMoSEVBREVSX1JBTkdFKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNSYW5nZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGhlYWRlci5lcXVhbHMoSEVBREVSX0hPU1QpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFpc0hvc3QodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChoZWFkZXIuZXF1YWxzKEhFQURFUl9SRUZFUkVSKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNVUkkodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGlzVmFsaWRJZk1hdGNoLgotICAgKiBAcGFyYW0gdmFsdWUKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzVmFsaWRJZk1hdGNoKFN0cmluZyB2YWx1ZSkKLSAgewotICAgIGlmICh2YWx1ZS50cmltKCkubGVuZ3RoKCkgPT0gMCkKLSAgICAgIHJldHVybiB0cnVlOwotICAgIGlmICgiKiIuZXF1YWxzKHZhbHVlLnRyaW0oKSkpCi0gICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodmFsdWUsICIsIik7Ci0gICAgd2hpbGUgKHN0Lmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIFN0cmluZyBzdHIgPSBzdC5uZXh0VG9rZW4oKS50cmltKCk7Ci0gICAgICBpZiAoIWlzRW50aXR5VGFnKHN0cikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBpc1ZhbGlkVXBncmFkZS4KLSAgICogQHBhcmFtIHZhbHVlCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1ZhbGlkVXBncmFkZShTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBpZiAodmFsdWUudHJpbSgpLmxlbmd0aCgpID09IDApCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcih2YWx1ZSwgIiwiKTsKLSAgICB3aGlsZSAoc3QuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgewotICAgICAgU3RyaW5nIHN0ciA9IHN0Lm5leHRUb2tlbigpLnRyaW0oKTsKLSAgICAgIGlmICghaXNQcm9kdWN0KHN0cikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNWYWxpZENhY2hlQ29udHJvbC4KLSAgICogQHBhcmFtIHZhbHVlCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1ZhbGlkQ2FjaGVDb250cm9sKFN0cmluZyB2YWx1ZSkKLSAgewotCi0gICAgaWYgKHZhbHVlLnRyaW0oKS5sZW5ndGgoKSA9PSAwKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcih2YWx1ZSwgIiwiKTsKLSAgICB3aGlsZSAoc3QuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgewotICAgICAgU3RyaW5nIHN0ciA9IHN0Lm5leHRUb2tlbigpLnRyaW0oKTsKLSAgICAgIGludCBpbmRleCA9IHN0ci5pbmRleE9mKCc9Jyk7Ci0gICAgICBpZiAoaW5kZXggPT0gLTEpCi0gICAgICB7Ci0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgaWYgKCFpc1Rva2VuKHN0ci5zdWJzdHJpbmcoMCwgaW5kZXgpKSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIFN0cmluZyBzdHJBZnRlckVxID0gc3RyLnN1YnN0cmluZyhpbmRleCArIDEpOwotICAgICAgICBpZiAoIWlzVG9rZW4oc3RyQWZ0ZXJFcSkgJiYgIWlzUXVvdGVkU3RyaW5nKHN0ckFmdGVyRXEpKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGlzSFRUUFZlcnNpb24uCi0gICAqIEBwYXJhbSBzdHIKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzSFRUUFZlcnNpb24oU3RyaW5nIHN0cikKLSAgewotICAgIGlmICghc3RyLnN0YXJ0c1dpdGgoIkhUVFAvIikpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaW50IGlkeCA9ICJIVFRQLyIubGVuZ3RoKCk7Ci0KLSAgICBpbnQgaWR4MiA9IHN0ci5pbmRleE9mKCIuIik7Ci0KLSAgICAvLyAxKkRJR0lUCi0gICAgU3RyaW5nIHMgPSBzdHIuc3Vic3RyaW5nKGlkeCwgaWR4Mik7Ci0gICAgaWYgKCFpc0RpZGdpdChzKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHMgPSBzdHIuc3Vic3RyaW5nKGlkeDIgKyAxKTsKLSAgICBpZiAoIWlzRGlkZ2l0KHMpKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGlzVmFsaWRXYXJuaW5nLgotICAgKiBAcGFyYW0gdmFsdWUKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzVmFsaWRXYXJuaW5nKFN0cmluZyB2YWx1ZSkKLSAgewotICAgIGlmICh2YWx1ZS5sZW5ndGgoKSA9PSAwKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHZhbHVlID0gdmFsdWUudHJpbSgpOwotICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodmFsdWUsICIgIik7Ci0gICAgU3RyaW5nIHN0ciA9IHN0Lm5leHRUb2tlbigpOwotCi0gICAgaWYgKHN0ci5sZW5ndGgoKSA+IDMgfHwgIWlzRGlkZ2l0KHN0cikpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIXN0Lmhhc01vcmVUb2tlbnMoKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBzdHIgPSBzdC5uZXh0VG9rZW4oKTsKLSAgICBpZiAoIWlzSG9zdChzdHIpICYmICFpc1Rva2VuKHN0cikpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvL2lmKCFzdC5oYXNNb3JlVG9rZW5zKCkpIHJldHVybiBmYWxzZTsKLSAgICBzdHIgPSBzdC5uZXh0VG9rZW4oIiIpLnRyaW0oKTsKLSAgICAvLz8/PwotCi0gICAgaW50IGxhc3RRdW90ZWRTdHJpbmcgPSBCYXNpY1J1bGVzLmdldExhc3RRdW90ZWRTdHJpbmcoc3RyLCAwKTsKLSAgICBpZiAobGFzdFF1b3RlZFN0cmluZyA9PSBzdHIubGVuZ3RoKCkpCi0gICAgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBTdHJpbmcgZGF0YSA9IHN0ci5zdWJzdHJpbmcobGFzdFF1b3RlZFN0cmluZyk7Ci0gICAgICBpZiAoZGF0YS5jaGFyQXQoZGF0YS5sZW5ndGgoKSkgIT0gJ1wiJykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKHN0ci5jaGFyQXQoMCkgIT0gJ1wiJykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKCFpc0hUVFBEYXRlKHN0ci5zdWJzdHJpbmcoMSwgZGF0YS5sZW5ndGgoKSAtIDEpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBpc1ZhbGlkVmlhLgotICAgKiBAcGFyYW0gdmFsdWUKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzVmFsaWRWaWEoU3RyaW5nIHZhbHVlKQotICB7Ci0gICAgaWYgKHZhbHVlLnRyaW0oKS5sZW5ndGgoKSA9PSAwKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcih2YWx1ZSwgIiwiKTsKLSAgICB3aGlsZSAoc3QuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgewotCi0gICAgICBTdHJpbmcgc3RyID0gc3QubmV4dFRva2VuKCkudHJpbSgpOwotCi0gICAgICBTdHJpbmdUb2tlbml6ZXIgc3QyID0gbmV3IFN0cmluZ1Rva2VuaXplcihzdHIsICIgIik7Ci0KLSAgICAgIC8vIHByb3RvY29sL3ZlcnNpb24KLSAgICAgIHN0ciA9IHN0Mi5uZXh0VG9rZW4oKTsKLSAgICAgIGludCBpZHggPSBzdHIuaW5kZXhPZigiLyIpOwotICAgICAgaWYgKGlkeCA9PSAtMSkKLSAgICAgIHsKLSAgICAgICAgaWYgKCFpc1Rva2VuKHN0cikpCi0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBpZiAoIWlzVG9rZW4oc3RyLnN1YnN0cmluZygwLCBpZHgpKQotICAgICAgICAgIHx8ICFpc1Rva2VuKHN0ci5zdWJzdHJpbmcoaWR4ICsgMSkpKQotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLQotICAgICAgLy9ob3N0Ci0gICAgICBzdHIgPSBzdDIubmV4dFRva2VuKCk7Ci0gICAgICBpZiAoIWlzSG9zdChzdHIpICYmICFpc1Rva2VuKHN0cikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgLy9jb21tZW50Ci0gICAgICBpZiAoc3QyLmhhc01vcmVUb2tlbnMoKSkKLSAgICAgIHsKLSAgICAgICAgc3RyID0gc3QyLm5leHRUb2tlbigiIik7Ci0gICAgICAgIGlmICghaXNDb21tZW50KHN0ci50cmltKCkpKQotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGlzSG9zdC4KLSAgICogQHBhcmFtIHZhbHVlCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0hvc3QoU3RyaW5nIHZhbHVlKQotICB7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBuZXcgVVJMKCJodHRwOi8vIiArIHZhbHVlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGlzVmFsaWRBbGxvdy4KLSAgICogQHBhcmFtIHZhbHVlCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1ZhbGlkQWxsb3coU3RyaW5nIHZhbHVlKQotICB7Ci0gICAgaWYgKHZhbHVlLnRyaW0oKS5sZW5ndGgoKSA9PSAwKQotICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHZhbHVlLCAiLCIpOwotICAgIHdoaWxlIChzdC5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICB7Ci0gICAgICBTdHJpbmcgc3RyID0gc3QubmV4dFRva2VuKCkudHJpbSgpOwotICAgICAgaWYgKCFpc1Rva2VuKHN0cikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGlzVmFsaWRDb250ZW50UmFuZ2UuCi0gICAqIEBwYXJhbSB2YWx1ZQotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNWYWxpZENvbnRlbnRSYW5nZShTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBpZiAodmFsdWUubGVuZ3RoKCkgPT0gMCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIXZhbHVlLnN0YXJ0c1dpdGgoImJ5dGVzIikpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgU3RyaW5nIHN0ciA9IHZhbHVlLnN1YnN0cmluZygiYnl0ZXMiLmxlbmd0aCgpKS50cmltKCk7Ci0KLSAgICBpbnQgaWR4ID0gc3RyLmluZGV4T2YoIi8iKTsKLSAgICBpZiAoaWR4ID09IC0xKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgU3RyaW5nIGJ5dGVSYW5nZSA9IHN0ci5zdWJzdHJpbmcoMCwgaWR4KTsKLSAgICBpbnQgaWR4MiA9IGJ5dGVSYW5nZS5pbmRleE9mKCItIik7Ci0gICAgaWYgKGlkeDIgPT0gLTEpCi0gICAgewotICAgICAgaWYgKCFieXRlUmFuZ2UuZXF1YWxzKCIqIikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGlmICghaXNEaWRnaXQoYnl0ZVJhbmdlLnN1YnN0cmluZygwLCBpZHgyKSkKLSAgICAgICAgfHwgIWlzRGlkZ2l0KGJ5dGVSYW5nZS5zdWJzdHJpbmcoaWR4MiArIDEpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghaXNEaWRnaXQoc3RyLnN1YnN0cmluZyhpZHggKyAxKSkKLSAgICAgICYmICFzdHIuc3Vic3RyaW5nKGlkeCArIDEpLmVxdWFscygiKiIpKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGlzUmFuZ2UuCi0gICAqIEBwYXJhbSB2YWx1ZQotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNSYW5nZShTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBpZiAodmFsdWUubGVuZ3RoKCkgPT0gMCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIXZhbHVlLnN0YXJ0c1dpdGgoImJ5dGVzPSIpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFN0cmluZyBzdHJCeXRlUmFuZ2UgPSB2YWx1ZS5zdWJzdHJpbmcoImJ5dGVzPSIubGVuZ3RoKCkpOwotCi0gICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihzdHJCeXRlUmFuZ2UsICIsIik7Ci0gICAgd2hpbGUgKHN0Lmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIFN0cmluZyBzdHIgPSBzdC5uZXh0VG9rZW4oKTsKLSAgICAgIGludCBpZHggPSBzdHIuaW5kZXhPZigiLSIpOwotICAgICAgaWYgKGlkeCA9PSAtMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKGlkeCA9PSAwKQotICAgICAgewotICAgICAgICBpZiAoIWlzRGlkZ2l0KHN0ci5zdWJzdHJpbmcoMSkpKQotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgaWYgKGlkeCA9PSAoc3RyLmxlbmd0aCgpIC0gMSkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIWlzRGlkZ2l0KHN0ci5zdWJzdHJpbmcoMCwgc3RyLmxlbmd0aCgpIC0gMSkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIGlmICghaXNEaWRnaXQoc3RyLnN1YnN0cmluZygwLCBpZHgpKQotICAgICAgICAgICAgfHwgIWlzRGlkZ2l0KHN0ci5zdWJzdHJpbmcoaWR4ICsgMSkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgIH0KLQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNWYWxpZFRFLgotICAgKiBAcGFyYW0gdmFsdWUKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzVmFsaWRURShTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBpZiAodmFsdWUudHJpbSgpLmxlbmd0aCgpID09IDApCi0gICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodmFsdWUsICIsIik7Ci0gICAgd2hpbGUgKHN0Lmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIFN0cmluZyBzdHIgPSBzdC5uZXh0VG9rZW4oKS50cmltKCk7Ci0gICAgICBpZiAoc3QuZXF1YWxzKCJ0cmFpbGVycyIpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgaW50IGlkeCA9IHN0ci5pbmRleE9mKCI7Iik7Ci0gICAgICBpZiAoaWR4ID09IC0xKQotICAgICAgewotICAgICAgICBpZiAoIWlzTGFuZ3VhZ2VSYW5nZShzdHIpKQotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIF8xID0gc3RyLnN1YnN0cmluZygwLCBpZHgpLnRyaW0oKTsKLSAgICAgICAgU3RyaW5nIF8yID0gc3RyLnN1YnN0cmluZyhpZHggKyAxKS50cmltKCk7Ci0gICAgICAgIGlmICghaXNMYW5ndWFnZVJhbmdlKF8xKSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghaXNRQW5kUVZhbHVlKF8yKSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNWYWxpZFVzZXJBZ2VudC4KLSAgICogQHBhcmFtIHZhbHVlCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1ZhbGlkVXNlckFnZW50KFN0cmluZyB2YWx1ZSkKLSAgewotICAgIGlmICh2YWx1ZS5sZW5ndGgoKSA9PSAwKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodmFsdWUsICIgIik7Ci0gICAgd2hpbGUgKHN0Lmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIFN0cmluZyBzdHIgPSBzdC5uZXh0VG9rZW4oKTsKLSAgICAgIGlmICghaXNQcm9kdWN0KHN0cikgJiYgIWlzQ29tbWVudChzdHIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNDb21tZW50LgotICAgKiBAcGFyYW0gc3RyCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0NvbW1lbnQoU3RyaW5nIHN0cikKLSAgewotICAgIGlmIChCYXNpY1J1bGVzLmdldExhc3RDb21tZW50KHN0ciwgMCkgIT0gc3RyLmxlbmd0aCgpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBpc1ZhbGlkQWNjZXB0TGFuZ3VhZ2UuCi0gICAqIEBwYXJhbSB2YWx1ZQotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNWYWxpZEFjY2VwdExhbmd1YWdlKFN0cmluZyB2YWx1ZSkKLSAgewotICAgIGlmICh2YWx1ZS50cmltKCkubGVuZ3RoKCkgPT0gMCkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodmFsdWUsICIsIik7Ci0gICAgd2hpbGUgKHN0Lmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIFN0cmluZyBzdHIgPSBzdC5uZXh0VG9rZW4oKS50cmltKCk7Ci0gICAgICBpbnQgaWR4ID0gc3RyLmluZGV4T2YoIjsiKTsKLSAgICAgIGlmIChpZHggPT0gLTEpCi0gICAgICB7Ci0gICAgICAgIGlmICghaXNUb2tlbihzdHIpKQotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIF8xID0gc3RyLnN1YnN0cmluZygwLCBpZHgpLnRyaW0oKTsKLSAgICAgICAgU3RyaW5nIF8yID0gc3RyLnN1YnN0cmluZyhpZHggKyAxKS50cmltKCk7Ci0gICAgICAgIGlmICghaXNUb2tlbihfMSkpCi0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIWlzQWNjZXB0UGFyYW1zKF8yKSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNMYW5ndWFnZVJhbmdlLgotICAgKiBAcGFyYW0gc3RyCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0xhbmd1YWdlUmFuZ2UoU3RyaW5nIHN0cikKLSAgewotICAgIGlmIChzdHIudHJpbSgpLmVxdWFscygiKiIpKQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihzdHIsICItIik7Ci0gICAgd2hpbGUgKHN0Lmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIGlmICghaXM4QUxQSEEoc3QubmV4dFRva2VuKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBpc1ZhbGlkQWNjZXB0RW5jb2RpbmcuCi0gICAqIEBwYXJhbSB2YWx1ZQotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNWYWxpZEFjY2VwdEVuY29kaW5nKFN0cmluZyB2YWx1ZSkKLSAgewotICAgIGlmICh2YWx1ZS50cmltKCkubGVuZ3RoKCkgPT0gMCkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodmFsdWUsICIsIik7Ci0gICAgd2hpbGUgKHN0Lmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIFN0cmluZyBzdHIgPSBzdC5uZXh0VG9rZW4oKS50cmltKCk7Ci0gICAgICBpbnQgaWR4ID0gc3RyLmluZGV4T2YoIjsiKTsKLSAgICAgIGlmIChpZHggPT0gLTEpCi0gICAgICB7Ci0gICAgICAgIGlmICghaXNUb2tlbihzdHIpICYmICFzdHIuZXF1YWxzKCIqIikpCi0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBTdHJpbmcgXzEgPSBzdHIuc3Vic3RyaW5nKDAsIGlkeCkudHJpbSgpOwotICAgICAgICBTdHJpbmcgXzIgPSBzdHIuc3Vic3RyaW5nKGlkeCArIDEpLnRyaW0oKTsKLQotICAgICAgICBpZiAoKCFpc1Rva2VuKF8xKSAmJiAhXzEuZXF1YWxzKCIqIikpKQotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFpc1FBbmRRVmFsdWUoXzIpKQotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBpc1ZhbGlkQWNjZXB0Q2hhclNldC4KLSAgICogQHBhcmFtIHZhbHVlCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1ZhbGlkQWNjZXB0Q2hhclNldChTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBpZiAodmFsdWUudHJpbSgpLmxlbmd0aCgpID09IDApCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHZhbHVlLCAiLCIpOwotICAgIHdoaWxlIChzdC5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICB7Ci0gICAgICBTdHJpbmcgc3RyID0gc3QubmV4dFRva2VuKCkudHJpbSgpOwotICAgICAgaW50IGlkeCA9IHN0ci5pbmRleE9mKCI7Iik7Ci0gICAgICBpZiAoaWR4ID09IC0xKQotICAgICAgewotICAgICAgICBpZiAoIWlzVG9rZW4oc3RyKSAmJiAhc3RyLmVxdWFscygiKiIpKQotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIF8xID0gc3RyLnN1YnN0cmluZygwLCBpZHgpLnRyaW0oKTsKLSAgICAgICAgU3RyaW5nIF8yID0gc3RyLnN1YnN0cmluZyhpZHggKyAxKS50cmltKCk7Ci0KLSAgICAgICAgaWYgKCghaXNUb2tlbihfMSkgJiYgIV8xLmVxdWFscygiKiIpKSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghaXNRQW5kUVZhbHVlKF8yKSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNWYWxpZEFjY2VwdC4KLSAgICogQHBhcmFtIHZhbHVlCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1ZhbGlkQWNjZXB0KFN0cmluZyB2YWx1ZSkKLSAgewotICAgIGlmICh2YWx1ZS50cmltKCkubGVuZ3RoKCkgPT0gMCkKLSAgICAgIHJldHVybiB0cnVlOwotCi0gICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcih2YWx1ZSwgIiwiKTsKLSAgICB3aGlsZSAoc3QuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgewotICAgICAgU3RyaW5nIHN0ciA9IHN0Lm5leHRUb2tlbigpLnRyaW0oKTsKLSAgICAgIGludCBpZHggPSBzdHIuaW5kZXhPZigiOyIpOwotICAgICAgaWYgKGlkeCA9PSAtMSkKLSAgICAgIHsKLSAgICAgICAgaWYgKCFpc01lZGlhUmFuZ2Uoc3RyKSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGlmICghaXNNZWRpYVJhbmdlKHN0ci5zdWJzdHJpbmcoMCwgaWR4KS50cmltKCkpCi0gICAgICAgICAgfHwgIWlzQWNjZXB0UGFyYW1zKHN0ci5zdWJzdHJpbmcoaWR4ICsgMSkudHJpbSgpKSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgIH0KLQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNBY2NlcHRQYXJhbXMuCi0gICAqIEBwYXJhbSBzdHJpbmcKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzQWNjZXB0UGFyYW1zKFN0cmluZyBzdHJpbmcpCi0gIHsKLSAgICBpZiAoc3RyaW5nLnRyaW0oKS5sZW5ndGgoKSA9PSAwKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihzdHJpbmcsICI7Iik7Ci0gICAgU3RyaW5nIHN0ciA9IHN0Lm5leHRUb2tlbigpOwotCi0gICAgaW50IGlkeCA9IHN0ci5pbmRleE9mKCI9Iik7Ci0gICAgaWYgKGlkeCA9PSAtMSkKLSAgICB7Ci0gICAgICBpZiAoc3RyLmVxdWFscygicSIpIHx8ICFpc1Rva2VuKHN0cikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGlmIChzdHIuc3Vic3RyaW5nKDAsIGlkeCkuZXF1YWxzKCJxIikpCi0gICAgICB7Ci0gICAgICAgIGlmICghaXNRVmFsdWUoc3RyLnN1YnN0cmluZyhpZHggKyAxKSkpCi0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBpZiAoIWlzUGFyYW1ldGVyV2l0aG91dFZhbHVlKHN0cikpCi0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgIH0KLQotICAgIHdoaWxlIChzdC5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICB7Ci0gICAgICBzdHIgPSBzdC5uZXh0VG9rZW4oKTsKLSAgICAgIGlmICghaXNQYXJhbWV0ZXJXaXRob3V0VmFsdWUoc3RyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNRQW5kUVZhbHVlLgotICAgKiBAcGFyYW0gc3RyCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1FBbmRRVmFsdWUoU3RyaW5nIHN0cikKLSAgewotICAgIHN0ciA9IHN0ci50cmltKCk7Ci0gICAgaWYgKCFzdHIudHJpbSgpLnN0YXJ0c1dpdGgoInE9IikpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFpc1FWYWx1ZShzdHIuc3Vic3RyaW5nKCJxPSIubGVuZ3RoKCkpKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNRVmFsdWUuCi0gICAqIEBwYXJhbSBzdHJpbmcKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzUVZhbHVlKFN0cmluZyBzdHJpbmcpCi0gIHsKLSAgICBpZiAoc3RyaW5nLnRyaW0oKS5sZW5ndGgoKSA9PSAwKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaW50IGlkeCA9IHN0cmluZy5pbmRleE9mKCIuIik7Ci0gICAgaWYgKGlkeCA9PSAtMSkKLSAgICB7Ci0gICAgICBpZiAoISIwIi5lcXVhbHMoc3RyaW5nKSAmJiAhIjEiLmVxdWFscyhzdHJpbmcpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBTdHJpbmcgc3RyRGlnID0gc3RyaW5nLnN1YnN0cmluZyhpZHggKyAxKTsKLSAgICAgIGlmIChzdHJEaWcubGVuZ3RoKCkgPiAzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgIGlmIChzdHJpbmcuc3Vic3RyaW5nKDAsIGlkeCkuZXF1YWxzKCIwIikpCi0gICAgICB7Ci0gICAgICAgIGlmICghaXNEaWRnaXQoc3RyRGlnKSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgaWYgKCFzdHJpbmcuc3Vic3RyaW5nKDAsIGlkeCkuZXF1YWxzKCIxIikpCi0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RyRGlnLmxlbmd0aCgpOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoc3RyRGlnLmNoYXJBdChpKSAhPSAnMCcpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNNZWRpYVJhbmdlLgotICAgKiBAcGFyYW0gc3RyCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc01lZGlhUmFuZ2UoU3RyaW5nIHN0cikKLSAgewotICAgIGlmIChzdHIudHJpbSgpLmxlbmd0aCgpID09IDApCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpbnQgaWR4ID0gc3RyLmluZGV4T2YoIi8iKTsKLSAgICBpZiAoaWR4ID09IC0xKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFpc1Rva2VuKHN0ci5zdWJzdHJpbmcoMCwgaWR4KSkgJiYgIXN0ci5zdWJzdHJpbmcoMCwgaWR4KS5lcXVhbHMoIioiKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWlzVG9rZW4oc3RyLnN1YnN0cmluZyhpZHggKyAxKSkKLSAgICAgICYmICFzdHIuc3Vic3RyaW5nKGlkeCArIDEpLmVxdWFscygiKiIpKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGlzRW50aXR5VGFnLgotICAgKiBAcGFyYW0gdmFsdWUKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzRW50aXR5VGFnKFN0cmluZyB2YWx1ZSkKLSAgewotCi0gICAgaW50IGlkeCA9IDA7Ci0gICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoIlcvIikpCi0gICAgICBpZHggPSAyOwotICAgIGlmICghaXNRdW90ZWRTdHJpbmcodmFsdWUuc3Vic3RyaW5nKGlkeCkpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBpc0V4cGVjdGF0aW9uLgotICAgKiBAcGFyYW0gdmFsdWUKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzRXhwZWN0YXRpb24oU3RyaW5nIHZhbHVlKQotICB7Ci0gICAgaWYgKHZhbHVlLmVxdWFscygiMTAwLWNvbnRpbnVlIikpCi0gICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodmFsdWUsICI7Iik7Ci0gICAgd2hpbGUgKHN0Lmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIGlmICghaXNQYXJhbWV0ZXJXaXRob3V0VmFsdWUoc3QubmV4dFRva2VuKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGlzQ3JlZGVudGlhbHMuCi0gICAqIEBwYXJhbSB2YWx1ZQotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNDcmVkZW50aWFscyhTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHZhbHVlLCAiICIpOwotICAgIGlmICghaXNUb2tlbihzdC5uZXh0VG9rZW4oKSkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB3aGlsZSAoc3QuaGFzTW9yZUVsZW1lbnRzKCkpCi0gICAgewotICAgICAgU3RyaW5nIHBhcmFtID0gc3QubmV4dFRva2VuKCIsIik7Ci0gICAgICBpZiAoIWlzUGFyYW1ldGVyKHBhcmFtKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNQcm9kdWN0LgotICAgKiBAcGFyYW0gdmFsdWUKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzUHJvZHVjdChTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBpbnQgaWR4ID0gdmFsdWUuaW5kZXhPZigiLyIpOwotICAgIGlmIChpZHggPT0gLTEpCi0gICAgewotICAgICAgaWYgKCFpc1Rva2VuKHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgaWYgKCFpc1Rva2VuKHZhbHVlLnN1YnN0cmluZygwLCBpZHgpKQotICAgICAgICB8fCAhaXNUb2tlbih2YWx1ZS5zdWJzdHJpbmcoaWR4ICsgMSkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBpc1RyYW5zZmVyQ29kaW5nLgotICAgKiBAcGFyYW0gdmFsdWUKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzVHJhbnNmZXJDb2RpbmcoU3RyaW5nIHZhbHVlKQotICB7Ci0gICAgaWYgKHZhbHVlLmVxdWFscygiY2h1bmtlZCIpKQotICAgIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcih2YWx1ZSwgIjsiKTsKLSAgICAgIGlmICghaXNUb2tlbihzdC5uZXh0VG9rZW4oKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgd2hpbGUgKHN0Lmhhc01vcmVFbGVtZW50cygpKQotICAgICAgewotICAgICAgICBpZiAoIWlzUGFyYW1ldGVyKHN0Lm5leHRUb2tlbigpKSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNQYXJhbWV0ZXIuCi0gICAqIEBwYXJhbSBzdHJpbmcKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzUGFyYW1ldGVyKFN0cmluZyBzdHJpbmcpCi0gIHsKLQotICAgIC8vIGNoZWNrIHBhcmFtZXRlcgkKLSAgICBpbnQgaWR4ID0gc3RyaW5nLmluZGV4T2YoIj0iKTsKLSAgICBpZiAoIWlzVG9rZW4oc3RyaW5nLnN1YnN0cmluZygwLCBpZHgpKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFN0cmluZyBwYXJWYWx1ZSA9IHN0cmluZy5zdWJzdHJpbmcoaWR4ICsgMSk7Ci0gICAgaWYgKCFpc1Rva2VuKHBhclZhbHVlKSAmJiAhaXNRdW90ZWRTdHJpbmcocGFyVmFsdWUpKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGlzUGFyYW1ldGVyV2l0aG91dFZhbHVlLgotICAgKiBAcGFyYW0gc3RyaW5nCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1BhcmFtZXRlcldpdGhvdXRWYWx1ZShTdHJpbmcgc3RyaW5nKQotICB7Ci0KLSAgICAvLyBjaGVjayBwYXJhbWV0ZXIJCi0gICAgaW50IGlkeCA9IHN0cmluZy5pbmRleE9mKCI9Iik7Ci0gICAgaWYgKGlkeCAhPSAtMSkKLSAgICB7Ci0gICAgICBpZiAoIWlzVG9rZW4oc3RyaW5nLnN1YnN0cmluZygwLCBpZHgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgU3RyaW5nIHBhclZhbHVlID0gc3RyaW5nLnN1YnN0cmluZyhpZHggKyAxKTsKLSAgICAgIGlmICghaXNUb2tlbihwYXJWYWx1ZSkgJiYgIWlzUXVvdGVkU3RyaW5nKHBhclZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBpZiAoIWlzVG9rZW4oc3RyaW5nKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBpc1ByYWdtYURlcmVjdGl2ZS4KLSAgICogQHBhcmFtIHZhbHVlCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1ByYWdtYURlcmVjdGl2ZShTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBpZiAodmFsdWUuZXF1YWxzKCJuby1jYWNoZSIpKQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGludCBpZHggPSB2YWx1ZS5pbmRleE9mKCI9Iik7Ci0gICAgICBpZiAoaWR4ID09IC0xKQotICAgICAgewotICAgICAgICBpZiAoaXNUb2tlbih2YWx1ZSkpCi0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBzdHIgPSB2YWx1ZS5zdWJzdHJpbmcoaWR4ICsgMSk7Ci0gICAgICAgIGlmIChpc1Rva2VuKHZhbHVlLnN1YnN0cmluZygwLCBpZHgpKQotICAgICAgICAgICYmIChpc1Rva2VuKHN0cikgfHwgaXNRdW90ZWRTdHJpbmcoc3RyKSkpCi0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBpc0hUVFBEYXRlLgotICAgKiBAcGFyYW0gdmFsdWUKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzSFRUUERhdGUoU3RyaW5nIHZhbHVlKQotICB7Ci0KLSAgICBTdHJpbmcgcmZjMTEyM19kYXRlID0gIkVFRSwgZGQgTU1NIHl5eXkgaGg6bW06c3MgJ0dNVCciOwotICAgIFN0cmluZyByZmM4NTBfZGF0ZSA9ICJFRUVFLCBkZC1NTU0teXkgaGg6bW06c3MgJ0dNVCciOwotICAgIFN0cmluZyBhc2N0aW1lX2RhdGUgPSAiRUVFIE1NTSBkIGhoOm1tOnNzIHl5eXkiOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgU2ltcGxlRGF0ZUZvcm1hdCBzZGYgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdChyZmMxMTIzX2RhdGUsIExvY2FsZS5VUyk7Ci0gICAgICBpZiAoc2RmLnBhcnNlKHZhbHVlKSAhPSBudWxsKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY2F0Y2ggKFBhcnNlRXhjZXB0aW9uIGUpCi0gICAgewotICAgIH0KLQotICAgIHRyeQotICAgIHsKLSAgICAgIFNpbXBsZURhdGVGb3JtYXQgc2RmID0gbmV3IFNpbXBsZURhdGVGb3JtYXQocmZjODUwX2RhdGUsIExvY2FsZS5VUyk7Ci0gICAgICBpZiAoc2RmLnBhcnNlKHZhbHVlKSAhPSBudWxsKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY2F0Y2ggKFBhcnNlRXhjZXB0aW9uIGUpCi0gICAgewotICAgIH0KLQotICAgIHRyeQotICAgIHsKLSAgICAgIFNpbXBsZURhdGVGb3JtYXQgc2RmID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoYXNjdGltZV9kYXRlLCBMb2NhbGUuVVMpOwotICAgICAgaWYgKHNkZi5wYXJzZSh2YWx1ZSkgIT0gbnVsbCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGNhdGNoIChQYXJzZUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci0KLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNVUkkuCi0gICAqIEBwYXJhbSB2YWx1ZQotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNVUkkoU3RyaW5nIHZhbHVlKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgbmV3IFVSTCh2YWx1ZSk7Ci0gICAgfQotICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgbmV3IFVSTCgiaHR0cDovL2xvY2FsaG9zdCIgKyB2YWx1ZSk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUyKQotICAgICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGlzTGFuZ3VhZ2VUYWcuCi0gICAqIEBwYXJhbSB2YWx1ZQotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNMYW5ndWFnZVRhZyhTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBpbnQgaWR4ID0gdmFsdWUuaW5kZXhPZigiLSIpOwotICAgIGlmIChpZHggPT0gLTEpCi0gICAgewotICAgICAgcmV0dXJuIGlzOEFMUEhBKHZhbHVlKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGlmICghaXM4QUxQSEEodmFsdWUuc3Vic3RyaW5nKDAsIGlkeCkpCi0gICAgICAgIHx8ICFpczhBTFBIQSh2YWx1ZS5zdWJzdHJpbmcoaWR4ICsgMSkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICBlbHNlCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBpczhBTFBIQS4KLSAgICogQHBhcmFtIHN0cmluZwotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXM4QUxQSEEoU3RyaW5nIHN0cmluZykKLSAgewotICAgIGlmIChzdHJpbmcubGVuZ3RoKCkgPiA4IHx8ICFpc0FMUEhBKHN0cmluZykpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGlzQUxQSEEuCi0gICAqIEBwYXJhbSBzdHJpbmcKLSAgICogQHJldHVybiBib29sZWFuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzQUxQSEEoU3RyaW5nIHN0cmluZykKLSAgewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aCgpOyBpKyspCi0gICAgewotICAgICAgaWYgKCFCYXNpY1J1bGVzLmlzQ0hBUihzdHJpbmcuY2hhckF0KGkpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBpc0RpZGdpdC4KLSAgICogQHBhcmFtIHZhbHVlCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0RpZGdpdChTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBpZiAodmFsdWUubGVuZ3RoKCkgPT0gMCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjaGFyW10gY2hzID0gdmFsdWUudG9DaGFyQXJyYXkoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNocy5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpZiAoY2hzW2ldIDwgJzAnIHx8IGNoc1tpXSA+ICc5JykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBpc01lZGlhVHlwZS4KLSAgICogQHBhcmFtIHZhbHVlCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc01lZGlhVHlwZShTdHJpbmcgdmFsdWUpCi0gIHsKLSAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHZhbHVlLCAiOyIpOwotICAgIFN0cmluZyBtZWRpYVR5cGUgPSBzdC5uZXh0VG9rZW4oKTsKLQotICAgIGludCBpZHggPSBtZWRpYVR5cGUuaW5kZXhPZigiLyIpOwotICAgIGlmICghaXNUb2tlbihtZWRpYVR5cGUuc3Vic3RyaW5nKDAsIGlkeCkpCi0gICAgICB8fCAhaXNUb2tlbihtZWRpYVR5cGUuc3Vic3RyaW5nKGlkeCArIDEpKSkKLSAgICB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgd2hpbGUgKHN0Lmhhc01vcmVFbGVtZW50cygpKQotICAgIHsKLSAgICAgIGlmICghaXNQYXJhbWV0ZXIoc3QubmV4dFRva2VuKCI7IikudHJpbSgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNRdW90ZWRTdHJpbmcuCi0gICAqIEBwYXJhbSBwYXJWYWx1ZQotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNRdW90ZWRTdHJpbmcoU3RyaW5nIHBhclZhbHVlKQotICB7Ci0gICAgaWYgKEJhc2ljUnVsZXMuZ2V0TGFzdFF1b3RlZFN0cmluZyhwYXJWYWx1ZSwgMCkgIT0gcGFyVmFsdWUubGVuZ3RoKCkpCi0gICAgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgaXNUb2tlbi4KLSAgICogQHBhcmFtIHZhbHVlCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1Rva2VuKFN0cmluZyB2YWx1ZSkKLSAgewotICAgIHJldHVybiBCYXNpY1J1bGVzLmlzVG9rZW4odmFsdWUpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL0phdmFFbmNvZGluZy5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9KYXZhRW5jb2RpbmcucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI5MzUzNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL0phdmFFbmNvZGluZy5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotIyAvKioKLSMgICogPGNvcHlyaWdodD4KLSMgICoKLSMgICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDMgIElCTSBDb3Jwb3JhdGlvbiwgQmVhY29uIEluZm9ybWF0aW9uIFRlY2hub2xvZ3kgSW5jLiBhbmQgb3RoZXJzLgotIyAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jICAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jICAqIAotIyAgKiBDb250cmlidXRvcnM6IAotIyAgKiAgIElCTSAgICAgIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jICAqICAgQmVhY29uSVQgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgICogPC9jb3B5cmlnaHQ+Ci0jICAqLwotIyMgSTE4TjogMjAwMy4wMi4yNiBtb2RpZmllZCBieSBLLk5ha2Fnb21lQEJlYWNvbklUIAotIyMgUHJvcGVydHkgZmlsZSB1c2VkIHRvIGdldCBKYXZhVk0gc3VwcG9ydGVkIGNoYXJhY3RlciBlbmNvZGluZy4KLQotSVNPODg1OV8xPUlTTzg4NTlfMSAKLUlTTzg4NTktMT1JU084ODU5XzEgCi11dGY4PVVURjggCi11dGYtOD1VVEY4IAotVVRGLTg9VVRGOCAKLXV0ZjE2PVVURi0xNiAKLXV0Zi0xNj1VVEYtMTYgCi1VVEYxNj1VVEYtMTYgCi0KLSMjIAotU2hpZnRfSklTPVdpbmRvd3MtMzFKCi0KLU1TOTMyPVdpbmRvd3MtMzFKCi0jU0pJUz1TaGlmdF9KSVMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL01JTUVDb25zdGFudHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvTUlNRUNvbnN0YW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTRiNGI0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvTUlNRUNvbnN0YW50cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWw7Ci0KLS8qKgotICogQSBzZXQgb2YgSFRUUCB2YWx1ZXMgdGhhdCBhcmUgZGVmaW5lZCBieSBOZXR3b3JrIFdvcmtpbmcgR3JvdXAuCi0gKiBodHRwOi8vd3d3LmlldGYub3JnLwotICoKLSAqIEB2ZXJzaW9uIDEuMAotICogQGF1dGhvciBJbHlhIEthbm9uaXJvdiAoa2lvQGlzZy5heG1vci5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBNSU1FQ29uc3RhbnRzIHsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0NPTlRFTlRfSUQgPSAiQ29udGVudC1JRCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9DT05URU5UX1RSQU5TRkVSX0VOQ09ESU5HID0gIkNvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmciOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfQ09OVEVOVF9UWVBFID0gIkNvbnRlbnQtVHlwZSI7Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9NSU1FVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvTUlNRVV0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5Y2QzMzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9NSU1FVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgY29tLmlibS5pY3UudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotCi0vKioKLSAqIFNldCBvZiBIVFRQTCByZWxhdGVkIHV0aWxpdGllcy4KLSAqCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtCi0gKi8KLQotcHVibGljIGZpbmFsIGNsYXNzIE1JTUVVdGlscwotewotCi0gIC8qKgotICAgKiBVdGlsaXR5IHRvIHByZXNlbnQgTUlNRSBoZWFkZXIgaW5mb3JtYXRpb24gYXMgYXR0cmlidXRlLXZhbHVlIHBhaXJzLCAKLSAgICogYmFzZWQgb24gJzonIGFzIGF0dHJpYnV0ZS12YWx1ZSBzZXBhcmF0b3IuCi0gICAqIEBwYXJhbSBtaW1lSGVhZGVyU3RyaW5nIGFuIE1JTUUgaGVhZGVyIHN0cmluZy4KLSAgICogQHBhcmFtIHNlcGFyYXRvcnMgYXR0cmlidXRlLXZhbHVlIHNlcGFyYXRvciBsaXN0LgotICAgKiBAcmV0dXJuIE1JTUUgaGVhZGVyIGluZm9ybWF0aW9uIGFzIGF0dHJpYnV0ZS12YWx1ZSBwYWlycy4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdW5hYmxlIHRvIGNyZWF0ZSBNSU1FIGhlYWRlciBpbmZvcm1hdGlvbiAKLSAgICogICAgICAgICBhcyBhdHRyaWJ1dGUtdmFsdWUgcGFpcnMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIE1hcCBnZXRNaW1lSGVhZGVyVG9rZW5zKFN0cmluZyBtaW1lSGVhZGVyU3RyaW5nLCBTdHJpbmcgc2VwYXJhdG9ycykKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmdUb2tlbml6ZXIgdG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcihtaW1lSGVhZGVyU3RyaW5nLCAiXG5cclxmIik7Ci0gICAgTWFwIG1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgd2hpbGUgKHRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpCi0gICAgewotICAgICAgU3RyaW5nIGxpbmUgPSB0b2tlbml6ZXIubmV4dFRva2VuKCk7Ci0gICAgICBpbnQgaW5kZXggPSBsaW5lLmluZGV4T2Yoc2VwYXJhdG9ycyk7Ci0gICAgICBpZiAoaW5kZXggPiAwICYmIGluZGV4IDwgbGluZS5sZW5ndGgoKSAtIDEpCi0gICAgICB7Ci0gICAgICAgIG1hcC5wdXQobGluZS5zdWJzdHJpbmcoMCwgaW5kZXgpLnRvVXBwZXJDYXNlKCksIGxpbmUuc3Vic3RyaW5nKGluZGV4ICsgMSkudHJpbSgpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG1hcDsKLSAgfQotICAKLSAgLyoqCi0gICAqIFV0aWxpdHkgdG8gdGFrZSBzdWIgYXR0cmlidXRlIHZhbHVlIGZyb20gTUlNRSBoZWFkZXIKLSAgICogQHBhcmFtIG1pbWVIZWFkZXJTdHJpbmcgYW4gTUlNRSBoZWFkZXIgc3RyaW5nLgotICAgKiBAcGFyYW0gYXR0cmlidXRlTmFtZSBhdHRyaWJ1dGUgbmFtZS4KLSAgICogQHBhcmFtIHN1YkF0dHJpYnV0ZU5hbWUgc3ViIGF0dHJpYnV0ZSBuYW1lLgotICAgKiBAcmV0dXJuIHN1YiBhdHRyaWJ1dGUgdmFsdWUgZnJvbSBNSU1FIGhlYWRlci4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdW5hYmxlIHRvIGdldCBzdWIgYXR0cmlidXRlIHZhbHVlIGZyb20gTUlNRSBoZWFkZXIuIAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0TWltZUhlYWRlclN1YkF0dHJpYnV0ZShTdHJpbmcgbWltZUhlYWRlclN0cmluZywgCi0gICAgICBTdHJpbmcgYXR0cmlidXRlTmFtZSwgU3RyaW5nIHN1YkF0dHJpYnV0ZU5hbWUpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgLy8gZ2V0IGF0dHJpYnV0ZSB2YWx1ZQotICAgIFN0cmluZyB2YWx1ZSA9IAotICAgICAgKFN0cmluZykgZ2V0TWltZUhlYWRlclRva2VucyhtaW1lSGVhZGVyU3RyaW5nLCI6IikuZ2V0KGF0dHJpYnV0ZU5hbWUudG9VcHBlckNhc2UoKSk7Ci0gICAgaWYodmFsdWUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBzZWFyY2ggc3ViIGF0dHJpYnV0ZSB0b2tlbgotICAgICAgaW50IGlkeFEgPSB2YWx1ZS50b1VwcGVyQ2FzZSgpLmluZGV4T2Yoc3ViQXR0cmlidXRlTmFtZS50b1VwcGVyQ2FzZSgpKyI9XCIiKTsKLSAgICAgIGludCBpZHggPSB2YWx1ZS50b1VwcGVyQ2FzZSgpLmluZGV4T2Yoc3ViQXR0cmlidXRlTmFtZS50b1VwcGVyQ2FzZSgpKyI9Iik7Ci0gICAgICAvLyBpZiBhdHRyaWJ1dGUgaXMgcXVvdGVkCi0gICAgICBpZiAoaWR4USAhPSAtMSkgCi0gICAgICB7Ci0gICAgICAgIGlkeFEgKz0gKHN1YkF0dHJpYnV0ZU5hbWUrIj1cIiIpLmxlbmd0aCgpOwotICAgICAgICBpbnQgZUlkeFEgPSB2YWx1ZS5pbmRleE9mKCJcIiIsIGlkeFEpOwotICAgICAgICBpZiAoZUlkeFEgIT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gdmFsdWUuc3Vic3RyaW5nKGlkeFEsIGVJZHhRKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIAotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIC8vIGlmIGF0dHJpYnV0ZSBpcyBub3QgcXVvdGVkCi0gICAgICBlbHNlIGlmIChpZHggIT0gLTEpCi0gICAgICB7Ci0gICAgICAgIGlkeCArPSAoc3ViQXR0cmlidXRlTmFtZSsiPSIpLmxlbmd0aCgpOwotICAgICAgICBpbnQgZUlkeCA9IC0xOwotICAgICAgICAvLyBmaW5kIGVuZCBzcGFjZSBzZXBhcmF0b3IKLSAgICAgICAgaWYgKChlSWR4ID0gdmFsdWUuaW5kZXhPZigiICIsIGlkeCkpICE9IC0xKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHZhbHVlLnN1YnN0cmluZyhpZHgsIGVJZHgpOwotICAgICAgICB9Ci0gICAgICAgIC8vIGZpbmQgY29tYSBzZXBhcmF0b3IKLSAgICAgICAgZWxzZSBpZiAoKGVJZHggPSB2YWx1ZS5pbmRleE9mKCI7IiwgaWR4KSkgIT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gdmFsdWUuc3Vic3RyaW5nKGlkeCwgZUlkeCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gdGhpcyBpcyBsYXN0IGF0dHJpYnV0ZQotICAgICAgICBlbHNlIAotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHZhbHVlLnN1YnN0cmluZyhpZHgpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvLyBpZiBhdHRyaWJ1dGUgZG8gbm90IGZvdW5kCi0gICAgICBlbHNlIAotICAgICAgewotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHZhbHVlOwotICB9Ci0KLSAgLyoqCi0gICAqIFV0aWxpdHkgdG8gdGFrZSBhdHRyaWJ1dGUgdmFsdWUgZnJvbSBNSU1FIGhlYWRlcgotICAgKiBAcGFyYW0gbWltZUhlYWRlclN0cmluZyBhbiBNSU1FIGhlYWRlciBzdHJpbmcuCi0gICAqIEBwYXJhbSBhdHRyaWJ1dGVOYW1lIGF0dHJpYnV0ZSBuYW1lLgotICAgKiBAcmV0dXJuIGF0dHJpYnV0ZSB2YWx1ZSBmcm9tIE1JTUUgaGVhZGVyLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB1bmFibGUgdG8gZ2V0IGF0dHJpYnV0ZSB2YWx1ZSBmcm9tIE1JTUUgaGVhZGVyLiAKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldE1pbWVIZWFkZXJBdHRyaWJ1dGUoU3RyaW5nIG1pbWVIZWFkZXJTdHJpbmcsIAotICAgICAgU3RyaW5nIGF0dHJpYnV0ZU5hbWUpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIGF0dHJpYnV0ZVZhbHVlID0gCi0gICAgICAgIChTdHJpbmcpIGdldE1pbWVIZWFkZXJUb2tlbnMobWltZUhlYWRlclN0cmluZywiOiIpLmdldChhdHRyaWJ1dGVOYW1lLnRvVXBwZXJDYXNlKCkpOwotICAgIC8vIGdldCBmaXJzdCB0b2tlbgotICAgIGlmKChhdHRyaWJ1dGVWYWx1ZSAhPSBudWxsKSAmJiAoYXR0cmlidXRlVmFsdWUuaW5kZXhPZigiOyIpICE9IC0xKSkgewotICAgICAgYXR0cmlidXRlVmFsdWUgPSBhdHRyaWJ1dGVWYWx1ZS5zdWJzdHJpbmcoMCwgYXR0cmlidXRlVmFsdWUuaW5kZXhPZigiOyIpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGF0dHJpYnV0ZVZhbHVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL01lc3NhZ2VMaXN0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL01lc3NhZ2VMaXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwMjhjYzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9NZXNzYWdlTGlzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgY3JlYXRlcyBhbmQgbWFpbnRhaW5zIGEgbWVzc2FnZSBsaXN0LgotICogCi0gKiBAYXV0aG9yIFBldGVyICBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKiBAdmVyc2lvbiAxLjAuMQotICovCi1wdWJsaWMgY2xhc3MgTWVzc2FnZUxpc3QKLXsKLSAgLyoqCi0gICAqIE1lc3NhZ2UgcmVzb3VyY2UgYnVuZGxlLgotICAgKi8KLSAgcHJpdmF0ZSBSZXNvdXJjZUJ1bmRsZSBtZXNzYWdlUmVzb3VyY2VCdW5kbGUgPSBudWxsOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgTWVzc2FnZUxpc3QuCi0gICAqIEBwYXJhbSByZXNvdXJjZUJ1bmRsZU5hbWUgIGEgcmVzb3VyY2UgYnVuZGxlIG5hbWUuCi0gICAqLwotICBwdWJsaWMgTWVzc2FnZUxpc3QoU3RyaW5nIHJlc291cmNlQnVuZGxlTmFtZSkKLSAgewotICAgIHRoaXMubWVzc2FnZVJlc291cmNlQnVuZGxlID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKHJlc291cmNlQnVuZGxlTmFtZSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGEgbWVzc2FnZSBmcm9tIHRoZSByZXNvdXJjZSBidW5kbGUuCi0gICAqIEBwYXJhbSBrZXkgICAgICAgICAgICAgICAgIGEga2V5LgotICAgKiBAcGFyYW0gZGVmYXVsdE1lc3NhZ2UgICAgICBhIGRlZmF1bHQgbWVzc2FnZS4KLSAgICogQHJldHVybiBtZXNzYWdlIGZyb20gdGhlIHJlc291cmNlIGJ1bmRsZS4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TWVzc2FnZShTdHJpbmcga2V5LCBTdHJpbmcgZGVmYXVsdE1lc3NhZ2UpCi0gIHsKLSAgICByZXR1cm4gZ2V0TWVzc2FnZShrZXksIG51bGwsIGRlZmF1bHRNZXNzYWdlKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgYSBtZXNzYWdlIGZyb20gdGhlIHJlc291cmNlIGJ1bmRsZS4KLSAgICogQHBhcmFtIGtleSAgICAgICAgICAgICAgICAgYSBrZXkuCi0gICAqIEBwYXJhbSBtZXNzYWdlRGF0YSAgICAgICAgIG1lc3NhZ2UgZGF0YS4KLSAgICogQHBhcmFtIGRlZmF1bHRNZXNzYWdlICAgICAgYSBkZWZhdWx0IG1lc3NhZ2UuCi0gICAqIEByZXR1cm4gbWVzc2FnZSBmcm9tIHRoZSByZXNvdXJjZSBidW5kbGUuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UoCi0gICAgU3RyaW5nIGtleSwKLSAgICBTdHJpbmcgbWVzc2FnZURhdGEsCi0gICAgU3RyaW5nIGRlZmF1bHRNZXNzYWdlKQotICB7Ci0gICAgU3RyaW5nIG1lc3NhZ2UgPSBkZWZhdWx0TWVzc2FnZTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdldCBtZXNzYWdlCi0gICAgICBtZXNzYWdlID0gbWVzc2FnZVJlc291cmNlQnVuZGxlLmdldFN0cmluZyhrZXkpOwotICAgIH0KLQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBJZ25vcmUgYW5kIGp1c3QgdXNlIGRlZmF1bHQgbWVzc2FnZQotICAgIH0KLQotICAgIGlmIChtZXNzYWdlRGF0YSAhPSBudWxsKQotICAgICAgbWVzc2FnZSArPSAiICIgKyBtZXNzYWdlRGF0YTsKLQotICAgIC8vIFJldHVybiBtZXNzYWdlCi0gICAgcmV0dXJuIG1lc3NhZ2U7Ci0gIH0KLQotICAvKioKLSAgICogUHJpbnQgYSBtZXNzYWdlIGZyb20gdGhlIHJlc291cmNlIGJ1bmRsZS4KLSAgICogQHBhcmFtIGtleSAgICAgICAgICAgICAgICAgYSBrZXkuCi0gICAqIEBwYXJhbSBkZWZhdWx0TWVzc2FnZSAgICAgIGEgZGVmYXVsdCBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIHZvaWQgcHJpbnRNZXNzYWdlKFN0cmluZyBrZXksIFN0cmluZyBkZWZhdWx0TWVzc2FnZSkKLSAgewotICAgIHByaW50TWVzc2FnZShrZXksIG51bGwsIGRlZmF1bHRNZXNzYWdlKTsKLSAgfQotCi0gIC8qKgotICAgKiBQcmludCBhIG1lc3NhZ2UgZnJvbSB0aGUgcmVzb3VyY2UgYnVuZGxlLgotICAgKiBAcGFyYW0ga2V5ICAgICAgICAgICAgICAgICBhIGtleS4KLSAgICogQHBhcmFtIG1lc3NhZ2VEYXRhICAgICAgICAgbWVzc2FnZSBkYXRhLgotICAgKiBAcGFyYW0gZGVmYXVsdE1lc3NhZ2UgICAgICBhIGRlZmF1bHQgbWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHByaW50TWVzc2FnZSgKLSAgICBTdHJpbmcga2V5LAotICAgIFN0cmluZyBtZXNzYWdlRGF0YSwKLSAgICBTdHJpbmcgZGVmYXVsdE1lc3NhZ2UpCi0gIHsKLSAgICAvLyBQcmludCBtZXNzYWdlCi0gICAgU3lzdGVtLm91dC5wcmludGxuKGdldE1lc3NhZ2Uoa2V5LCBtZXNzYWdlRGF0YSwgZGVmYXVsdE1lc3NhZ2UpKTsKLSAgfQotCi0gIC8qKgotICAgKiBTdGF0aWMgZ2V0IG1lc3NhZ2UuCi0gICAqIEBwYXJhbSByZXNvdXJjZUJ1bmRsZU5hbWUgIHJlc291cmNlIGJ1bmRsZSBuYW1lLgotICAgKiBAcGFyYW0ga2V5ICAgICAgICAgICAgICAgICBhIGtleS4KLSAgICogQHBhcmFtIG1lc3NhZ2VEYXRhICAgICAgICAgbWVzc2FnZSBkYXRhLgotICAgKiBAcGFyYW0gZGVmYXVsdE1lc3NhZ2UgICAgICBhIGRlZmF1bHQgbWVzc2FnZS4KLSAgICogQHJldHVybiBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0TWVzc2FnZSgKLSAgICBTdHJpbmcgcmVzb3VyY2VCdW5kbGVOYW1lLAotICAgIFN0cmluZyBrZXksCi0gICAgU3RyaW5nIG1lc3NhZ2VEYXRhLAotICAgIFN0cmluZyBkZWZhdWx0TWVzc2FnZSkKLSAgewotICAgIFN0cmluZyBtZXNzYWdlID0gZGVmYXVsdE1lc3NhZ2U7Ci0gICAgUmVzb3VyY2VCdW5kbGUgbWVzc2FnZVJlc291cmNlQnVuZGxlID0gbnVsbDsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdldCByZXNvdXJjZSBidW5kbGUKLSAgICAgIG1lc3NhZ2VSZXNvdXJjZUJ1bmRsZSA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZShyZXNvdXJjZUJ1bmRsZU5hbWUpOwotCi0gICAgICAvLyBHZXQgbWVzc2FnZQotICAgICAgbWVzc2FnZSA9IG1lc3NhZ2VSZXNvdXJjZUJ1bmRsZS5nZXRTdHJpbmcoa2V5KTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gSWdub3JlIGFuZCBqdXN0IHVzZSBkZWZhdWx0IG1lc3NhZ2UKLSAgICB9Ci0KLSAgICBpZiAobWVzc2FnZURhdGEgIT0gbnVsbCkKLSAgICAgIG1lc3NhZ2UgKz0gIiAiICsgbWVzc2FnZURhdGE7Ci0KLSAgICBpZiAoIW1lc3NhZ2UuZW5kc1dpdGgoIi4iKSkKLSAgICAgIG1lc3NhZ2UgKz0gIi4iOwotCi0gICAgLy8gUmV0dXJuIG1lc3NhZ2UKLSAgICByZXR1cm4gbWVzc2FnZTsKLSAgfQotCi0gIC8qKgotICAgKiBQcmludCBtZXNzYWdlLgotICAgKiBAcGFyYW0gcmVzb3VyY2VCdW5kbGVOYW1lICByZXNvdXJjZSBidW5kbGUgbmFtZS4KLSAgICogQHBhcmFtIGtleSAgICAgICAgICAgICAgICAgYSBrZXkuCi0gICAqIEBwYXJhbSBtZXNzYWdlRGF0YSAgICAgICAgIG1lc3NhZ2UgZGF0YS4KLSAgICogQHBhcmFtIGRlZmF1bHRNZXNzYWdlICAgICAgYSBkZWZhdWx0IG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgcHJpbnRNZXNzYWdlKAotICAgIFN0cmluZyByZXNvdXJjZUJ1bmRsZU5hbWUsCi0gICAgU3RyaW5nIGtleSwKLSAgICBTdHJpbmcgbWVzc2FnZURhdGEsCi0gICAgU3RyaW5nIGRlZmF1bHRNZXNzYWdlKQotICB7Ci0gICAgLy8gUHJpbnQgbWVzc2FnZQotICAgIFN5c3RlbS5vdXQucHJpbnRsbigKLSAgICAgIGdldE1lc3NhZ2UocmVzb3VyY2VCdW5kbGVOYW1lLCBrZXksIG1lc3NhZ2VEYXRhLCBkZWZhdWx0TWVzc2FnZSkpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvTnVsbFV0aWwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvTnVsbFV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg3Y2NhMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL051bGxVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbDsKLQotLyoqCi0gKiBUaGUgdXRpbGl0eSBjbGFzcyB0byBhdXRvbWF0ZSBudWxsIGNoZWNraW5nLgotICogCi0gKiBAYXV0aG9yIEt1bGlrCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBOdWxsVXRpbAotewotICAvKioKLSAgICogVGhlIG1ldGhvZCBjaGVja3Mgb2JqZWN0cyBvbiBleGlzdGVuY2UgYW5kIGNvbXBhcmUgd2l0aCA8Y29kZT5lcXVhbHM8L2NvZGU+IG1ldGhvZC4KLSAgICogQHBhcmFtIG8xIGZpcnN0IG9iamVjdC4KLSAgICogQHBhcmFtIG8yIHNlY29uZCBvYmplY3QuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiBmaXJzdCBvYmplY3QgaXMgZXF1YWwgdG8gdGhlIHNlY29uZCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvMSwgT2JqZWN0IG8yKQotICB7Ci0gICAgcmV0dXJuICgobzEgPT0gbnVsbCAmJiBvMiA9PSBudWxsKSB8fCAobzEgIT0gbnVsbCAmJiBvMS5lcXVhbHMobzIpKSk7Ci0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCBjaGVja3Mgb2JqZWN0IG9uIGV4aXN0ZW5jZSBhbmQgcmV0dXJucyBpdHMgc3RyaW5nIHJlcHJlc2VudGF0aW9uIHdpdGggPGNvZGU+dG9TdHJpbmcoKTwvY29kZT4gbWV0aG9kLgotICAgKiBAcGFyYW0gbyBzb3VyY2Ugb2JqZWN0LgotICAgKiBAcmV0dXJuIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyB0b1N0cmluZyhPYmplY3QgbykKLSAgewotICAgIHJldHVybiAobyA9PSBudWxsKSA/IG51bGwgOiBvLnRvU3RyaW5nKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvT3BlcmF0aW9uU2lnbmF0dXJlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL09wZXJhdGlvblNpZ25hdHVyZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzlhM2YyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvT3BlcmF0aW9uU2lnbmF0dXJlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3ODggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5GYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLkltcG9ydDsKLWltcG9ydCBqYXZheC53c2RsLklucHV0OwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLk91dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgamF2YXgud3NkbC5TZXJ2aWNlOwotaW1wb3J0IGphdmF4LndzZGwuVHlwZXM7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lUYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotLyoqCi0gKiBUaGUgY2xhc3MgaW1wbGVtZW50cyBtZWNoYW5pc20gZm9yIGNyZWF0aW5nIHVuaXF1ZSBzaWduYXR1cmUgb2Ygb3BlcmF0aW9uLgotICogCi0gKiBAYXV0aG9yIEt1bGlrCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBPcGVyYXRpb25TaWduYXR1cmUKLXsKLSAgLy8gdGhlIGZsYWcgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIG1lc3NhZ2VzIGlzIHJlcHJlc2VudGVkIGFzIGRvY3VtZW50IHN0eWxlCi0gIC8vIHZpY2UgdmVyc2EgaXMgbm90IGdlbmVyYWxseSB0cnVlCi0gIHByaXZhdGUgYm9vbGVhbiBpc0RvY3VtZW50U3R5bGUgPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIGlzQ3JlYXRlZCA9IGZhbHNlOwotICBwcml2YXRlIGJvb2xlYW4gaXNGYXVsdCA9IGZhbHNlOwotCi0gIHByb3RlY3RlZCBMaXN0IHNpZ25hdHVyZSA9IG5ldyBMaW5rZWRMaXN0KCk7Ci0gIHByaXZhdGUgRWxlbWVudCBmaXJzdEJvZHkgPSBudWxsOwotCi0gIC8qKgotICAgKiBDbGFzcyBvcGVyYXRlcyBhcyBjb250YWluZXIgZm9yIG1hdGNoZWQgb3BlcmF0aW9uLgotICAqIEBhdXRob3IgS3VsaWsKLSAgICovCi0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgY2xhc3MgT3BlcmF0aW9uTWF0Y2gKLSAgewotICAgIGZpbmFsIHByaXZhdGUgU3RyaW5nIHN0eWxlOwotICAgIGZpbmFsIHByaXZhdGUgQmluZGluZ09wZXJhdGlvbiBvcGVyYXRpb247Ci0gICAgZmluYWwgcHJpdmF0ZSBMaXN0IHNpZ25hdHVyZTsKLQotICAgIC8qKgotICAgICAqIENvbnN0cnVjdG9yLgotICAgICAqIEBwYXJhbSBzdHlsZSBvcGVyYXRpb24gc3R5bGUuCi0gICAgICogQHBhcmFtIHNpZ25hdHVyZSBhIHNpZ25hdHVyZS4KLSAgICAgKiBAcGFyYW0gb3BlcmF0aW9uIGEgYmluZGluZyBvcGVyYXRpb24uCi0gICAgICovCi0gICAgcHJvdGVjdGVkIE9wZXJhdGlvbk1hdGNoKAotICAgICAgU3RyaW5nIHN0eWxlLAotICAgICAgTGlzdCBzaWduYXR1cmUsCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIG9wZXJhdGlvbikKLSAgICB7Ci0gICAgICB0aGlzLnN0eWxlID0gc3R5bGU7Ci0gICAgICB0aGlzLnNpZ25hdHVyZSA9IHNpZ25hdHVyZTsKLSAgICAgIHRoaXMub3BlcmF0aW9uID0gb3BlcmF0aW9uOwotICAgIH0KLSAgICAvKioKLSAgICAgKiBHZXRzIG9wZXJhdGlvbiBzdHlsZS4KLSAgICAgKiBAcmV0dXJuIG9wZXJhdGlvbiBzdHlsZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGdldE9wZXJhdGlvblN0eWxlKCkKLSAgICB7Ci0gICAgICByZXR1cm4gc3R5bGU7Ci0gICAgfQotICAgIC8qKgotICAgICAqIEdldHMgV1NETCBiaW5kaW5nIG9wZXJhdGlvbiBvYmplY3QuCi0gICAgICogQHJldHVybiBXU0RMIGJpbmRpbmcgb3BlcmF0aW9uIG9iamVjdC4KLSAgICAgKi8KLSAgICBwdWJsaWMgQmluZGluZ09wZXJhdGlvbiBnZXRPcGVyYXRpb24oKQotICAgIHsKLSAgICAgIHJldHVybiBvcGVyYXRpb247Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0cyBvcGVyYXRpb24gc2lnbmF0dXJlIGFzIGxpc3QuCi0gICAgICogQHJldHVybiBvcGVyYXRpb24gc2lnbmF0dXJlIGFzIGxpc3QuCi0gICAgICovCi0gICAgcHVibGljIExpc3QgZ2V0U2lnbmF0dXJlKCkKLSAgICB7Ci0gICAgICByZXR1cm4gc2lnbmF0dXJlOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBUaGUgY2xhc3Mgc2VhcmNoZXMgQmluZGluZ09wZXJhdGlvbiBieSB0aGUgZ2l2ZW4gT3BlcmF0aW9uU2lnYm5hdHVyZS4gCi0gICogQGF1dGhvciBLdWxpawotICAgKi8KLSAgcHVibGljIGZpbmFsIGNsYXNzIFZpc2l0b3IgaW1wbGVtZW50cyBXU0RMVmlzaXRvcgotICB7Ci0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLlBhcnQsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgdmlzaXQoUGFydCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgICB7Ci0gICAgfQotCi0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLlNlcnZpY2UsIGphdmEubGFuZy5PYmplY3QsIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgdmlzaXQoU2VydmljZSBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgICB7Ci0gICAgfQotCi0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLlR5cGVzLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHZpc2l0KFR5cGVzIG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICAgIHsKLSAgICB9Ci0KLSAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuT3BlcmF0aW9uLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHZpc2l0KE9wZXJhdGlvbiBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgICB7Ci0gICAgfQotCi0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLklucHV0LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHZpc2l0KElucHV0IG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICAgIHsKLSAgICB9Ci0KLSAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuT3V0cHV0LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHZpc2l0KE91dHB1dCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgICB7Ci0gICAgfQotCi0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLkZhdWx0LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHZpc2l0KEZhdWx0IG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICAgIHsKLSAgICB9Ci0KLSAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuQmluZGluZywgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCB2aXNpdChCaW5kaW5nIG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICAgIHsKLSAgICB9Ci0KLSAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbiwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICAgIEJpbmRpbmdPcGVyYXRpb24gb2JqLAotICAgICAgT2JqZWN0IHBhcmVudCwKLSAgICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgICB7Ci0gICAgfQotCi0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChqYXZheC53c2RsLkJpbmRpbmdJbnB1dCwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICAgIEJpbmRpbmdJbnB1dCBvYmosCi0gICAgICBPYmplY3QgcGFyZW50LAotICAgICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICAgIHsKLSAgICB9Ci0KLSAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuQmluZGluZ091dHB1dCwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICAgIEJpbmRpbmdPdXRwdXQgb2JqLAotICAgICAgT2JqZWN0IHBhcmVudCwKLSAgICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgICB7Ci0gICAgfQotCi0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChCaW5kaW5nRmF1bHQsIE9iamVjdCwgV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgICBCaW5kaW5nRmF1bHQgb2JqLAotICAgICAgT2JqZWN0IHBhcmVudCwKLSAgICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgICB7Ci0gICAgfQotCi0gICAgLyogKG5vbi1KYXZhZG9jKSAKLSAgICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoSW1wb3J0LCBPYmplY3QsIFdTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHZpc2l0KEltcG9ydCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgICB7Ci0gICAgfQotCi0gICAgLyogKG5vbi1KYXZhZG9jKSAKLSAgICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoRWxlbWVudCwgT2JqZWN0LCBXU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCB2aXNpdChFbGVtZW50IG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICAgIHsKLSAgICB9Ci0KLSAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KE1lc3NhZ2UsIE9iamVjdCwgV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgdmlzaXQoTWVzc2FnZSBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgICB7Ci0gICAgfQotCi0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChQb3J0LCBPYmplY3QsIFdTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHZpc2l0KFBvcnQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gICAgewotICAgIH0KLQotICAgIC8qIChub24tSmF2YWRvYykKLSAgICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoUG9ydFR5cGUsIE9iamVjdCwgV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgdmlzaXQoUG9ydFR5cGUgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gICAgewotICAgIH0KLQotICAgIC8qIChub24tSmF2YWRvYykKLSAgICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoRGVmaW5pdGlvbiwgT2JqZWN0LCBXU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCB2aXNpdChEZWZpbml0aW9uIG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICAgIHsKLSAgICB9Ci0KLSAgICAvKiAobm9uLUphdmFkb2MpIAotICAgICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChFeHRlbnNpYmlsaXR5RWxlbWVudCwgT2JqZWN0LCBXU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IG9iaiwKLSAgICAgIE9iamVjdCBwYXJlbnQsCi0gICAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gICAgewotICAgIH0KLQotICAgIC8qIChub24tSmF2YWRvYykgCi0gICAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KFNPQVBIZWFkZXIsIE9iamVjdCwgV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgdmlzaXQoU09BUEhlYWRlciBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgICB7Ci0gICAgfQotCi0gICAgLyogKG5vbi1KYXZhZG9jKSAKLSAgICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoU09BUEhlYWRlckZhdWx0LCBPYmplY3QsIFdTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgICAgU09BUEhlYWRlckZhdWx0IG9iaiwKLSAgICAgIE9iamVjdCBwYXJlbnQsCi0gICAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gICAgewotICAgIH0KLQotICAgIC8qIChub24tSmF2YWRvYykgCi0gICAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KFNPQVBGYXVsdCwgT2JqZWN0LCBXU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCB2aXNpdChTT0FQRmF1bHQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gICAgewotICAgIH0KLQotICAgIHByaXZhdGUgU3RyaW5nIHJlcXVpcmVkU3R5bGUgPSBudWxsOwotICAgIHByaXZhdGUgU3RyaW5nIHNvYXBBY3Rpb24gPSBudWxsOwotICAgIHByaXZhdGUgQmluZGluZ09wZXJhdGlvbiBvcGVyYXRpb24gPSBudWxsOwotICAgIHByaXZhdGUgVHlwZXNSZWdpc3RyeSByZWdpc3RyeSA9IG51bGw7Ci0gICAgcHJpdmF0ZSBib29sZWFuIGlzU09BUEFjdGlvblJlcXVpcmVkID0gZmFsc2U7Ci0KLSAgICAvKioKLSAgICAqIENvbnN0cnVjdG9yLgotICAgICovCi0gICAgcHVibGljIFZpc2l0b3IoKQotICAgIHsKLSAgICAgIHN1cGVyKCk7Ci0gICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNvbnN0cnVjdG9yIHN0dWIKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3Rvci4KLSAgICAgKiBAcGFyYW0gcmVxdWlyZWRTdHlsZSByZXF1aXJlZCBzdHlsZS4KLSAgICAgKiBAcGFyYW0gcmVnaXN0cnkgdHlwZXMgcmVnaXN0cnkuCi0gICAgICovCi0gICAgcHVibGljIFZpc2l0b3IoU3RyaW5nIHJlcXVpcmVkU3R5bGUsIFR5cGVzUmVnaXN0cnkgcmVnaXN0cnkpCi0gICAgewotICAgICAgdGhpcy5yZXF1aXJlZFN0eWxlID0gcmVxdWlyZWRTdHlsZTsKLSAgICAgIHRoaXMucmVnaXN0cnkgPSByZWdpc3RyeTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWV0aG9kIHJldHVybnMgbWF0Y2hlZCBiaW5kaW5nIG9wZXJhdGlvbi4KLSAgICAgKiBAcmV0dXJuIEJpbmRpbmdPcGVyYXRpb24KLSAgICAgKi8KLSAgICBwdWJsaWMgQmluZGluZ09wZXJhdGlvbiBnZXRNYXRjaGVkT3BlcmF0aW9uKCkKLSAgICB7Ci0gICAgICByZXR1cm4gb3BlcmF0aW9uOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRoZSBtZXRob2Qgc2V0cyB1cCByZXF1aXJlZCBvcGVyYXRpb24gdG8gYmUgZm91bmQuCi0gICAgICogVGhlIHBvc3NpYmxlIHZhbHVlcyBpcyBycGMgYW5kIGRvY3VtZW50LgotICAgICAqIEBwYXJhbSByZXF1aXJlZFN0eWxlIG9wZXJhdGlvbiBzdHlsZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRSZXF1aXJlZFN0eWxlKFN0cmluZyByZXF1aXJlZFN0eWxlKQotICAgIHsKLSAgICAgIHRoaXMucmVxdWlyZWRTdHlsZSA9IHJlcXVpcmVkU3R5bGU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGhlIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBTT0FQIEFjdGlvbiBiZSBpbmNsdWRlZCBpbnRvIG9wZXJhdGlvbi4KLSAgICAgKiBzaWduYXR1cmUuCi0gICAgICogQHJldHVybiB0cnVlIGlmIFNPQVAgQWN0aW9uIGlzZCByZXF1aXJlZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBpc1NPQVBBY3Rpb25SZXF1aXJlZCgpCi0gICAgewotICAgICAgcmV0dXJuIGlzU09BUEFjdGlvblJlcXVpcmVkOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNldHMgU09BUCBhY3Rpb24gdG8gYmUgaW5jbHVkZWQgaW50byBzaWduYXR1cmUuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0U09BUEFjdGlvblJlcXVpcmVkKCkKLSAgICB7Ci0gICAgICBpc1NPQVBBY3Rpb25SZXF1aXJlZCA9IHRydWU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogaW50ZXJuYWwgbWV0aG9kLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgICAgU09BUEJpbmRpbmcgYmluZGluZywKLSAgICAgIE9iamVjdCBwYXJlbnQsCi0gICAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gICAgewotICAgICAgU3RyaW5nIHN0eWxlID0KLSAgICAgICAgKGJpbmRpbmcuZ2V0U3R5bGUoKSA9PSBudWxsKQotICAgICAgICAgID8gV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CSU5EX1NUWUxFX0RPQwotICAgICAgICAgIDogYmluZGluZy5nZXRTdHlsZSgpOwotICAgICAgY3R4LmFkZFBhcmFtZXRlcigic3R5bGUiLCBzdHlsZSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogaW50ZXJuYWwgbWV0aG9kLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgICAgU09BUE9wZXJhdGlvbiBvcGVyYXRpb24sCi0gICAgICBPYmplY3QgcGFyZW50LAotICAgICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICAgIHsKLSAgICAgIHNvYXBBY3Rpb24gPSBudWxsOwotICAgICAgU3RyaW5nIHN0eWxlID0gb3BlcmF0aW9uLmdldFN0eWxlKCk7Ci0gICAgICBpZiAoc3R5bGUgPT0gbnVsbCkKLSAgICAgICAgc3R5bGUgPSAoU3RyaW5nKSBjdHguZ2V0UGFyYW1ldGVyKCJzdHlsZSIpOwotICAgICAgaWYgKCFyZXF1aXJlZFN0eWxlLmVxdWFscyhzdHlsZSkpCi0gICAgICAgIGN0eC5jYW5jZWxCaW5kaW5nT3BlcmF0aW9uUHJvY2Vzc2luZygpOwotICAgICAgZWxzZQotICAgICAgICAvL2lmIChpc1NPQVBBY3Rpb25SZXF1aXJlZCkKLSAgICAgICAgc29hcEFjdGlvbiA9IG9wZXJhdGlvbi5nZXRTb2FwQWN0aW9uVVJJKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogaW50ZXJuYWwgbWV0aG9kLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHZpc2l0KFNPQVBCb2R5IGJvZHksIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgICB7Ci0gICAgICAvLyBhc3NlcnQgcGFyZW50IGluc3RhbmNlb2YgQmluZGluZ0lucHV0Ci0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJvcCA9IGN0eC5nZXRCaW5kaW5nT3BlcmF0aW9uKCk7Ci0gICAgICBpZiAoYm9wLmdldE9wZXJhdGlvbigpID09IG51bGwKLSAgICAgICAgfHwgYm9wLmdldE9wZXJhdGlvbigpLmdldElucHV0KCkgPT0gbnVsbAotICAgICAgICB8fCBib3AuZ2V0T3BlcmF0aW9uKCkuZ2V0SW5wdXQoKS5nZXRNZXNzYWdlKCkgPT0gbnVsbCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgICBNZXNzYWdlIG1zZyA9IGJvcC5nZXRPcGVyYXRpb24oKS5nZXRJbnB1dCgpLmdldE1lc3NhZ2UoKTsKLSAgICAgIExpc3QgcGFydHMgPQotICAgICAgICBXU0RMVXRpbC5nZXRQYXJ0cyhib3AuZ2V0T3BlcmF0aW9uKCksIG1zZywgYm9keSwgcmVxdWlyZWRTdHlsZSk7Ci0KLSAgICAgIFFOYW1lIGFkZGl0aW9uYWxOYW1lID0gbnVsbDsKLSAgICAgIC8vIGlmIG9wZXJhdGlvbiBpcyBycGMsIGFkZCB0byBwYXJ0cyBxbmFtZSBxaXRoIGZ1bmN0aW9uIG5hbWUKLSAgICAgIGlmIChXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JJTkRfU1RZTEVfUlBDLmVxdWFscyhyZXF1aXJlZFN0eWxlKSkKLSAgICAgIHsKLSAgICAgICAgLy8gZm91bmQgb3V0IHRhcmdldCBuYW1lc3BhY2UKLSAgICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IGJvZHkuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICAgIGlmIChuYW1lc3BhY2UgPT0gbnVsbCB8fCBuYW1lc3BhY2UubGVuZ3RoKCkgPT0gMCkKLSAgICAgICAgICAvLyAhISBBVFRFTlRJT04KLSAgICAgICAgICAvLyBuYW1lc3BhY2Ugc2hvdWxkIGJlIHJldHJpZXZlZCBmcm9tIHNlcnZpY2UgdGFyZ2V0IG5hbWVhcGNlICAgICAgICAgICAgCi0gICAgICAgICAgbmFtZXNwYWNlID0gY3R4LmdldEJpbmRpbmcoKS5nZXRRTmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpOwotCi0gICAgICAgIC8vIGluc2VydCBvcGVyYXRpb24gbmFtZSBhcyBmaXJzdCBzaWduYXR1cmUgcGFydAotICAgICAgICBhZGRpdGlvbmFsTmFtZSA9Ci0gICAgICAgICAgbmV3IFFOYW1lKG5hbWVzcGFjZSwgY3R4LmdldEJpbmRpbmdPcGVyYXRpb24oKS5nZXROYW1lKCkpOwotICAgICAgfQotCi0gICAgICBPcGVyYXRpb25TaWduYXR1cmUgb3AgPQotICAgICAgICBuZXcgT3BlcmF0aW9uU2lnbmF0dXJlKHBhcnRzLCBudWxsLCByZWdpc3RyeSwgZmFsc2UpOwotCi0gICAgICBpZiAoYWRkaXRpb25hbE5hbWUgIT0gbnVsbCkKLSAgICAgICAgb3AuZ2V0U2lnbmF0dXJlKCkuYWRkKDAsIGFkZGl0aW9uYWxOYW1lKTsKLSAgICAgIC8vaWYgKGlzU09BUEFjdGlvblJlcXVpcmVkKQotICAgICAgLy9pZiAoc29hcEFjdGlvbiAhPSBudWxsKQotICAgICAgaWYgKGlzU09BUEFjdGlvblJlcXVpcmVkICYmIHNvYXBBY3Rpb24gIT0gbnVsbCkKLSAgICAgICAgb3AuZ2V0U2lnbmF0dXJlKCkuYWRkKDAsIHNvYXBBY3Rpb24pOwotICAgICAgaWYgKG9wLmdldFNpZ25hdHVyZSgpLmVxdWFscyhzaWduYXR1cmUpKQotICAgICAgewotICAgICAgICAvLyByZXF1aXJlZCBvcGVyYXRpb24gaXMgZm91bmQKLSAgICAgICAgb3BlcmF0aW9uID0gY3R4LmdldEJpbmRpbmdPcGVyYXRpb24oKTsKLSAgICAgICAgY3R4LmNhbmNlbEJpbmRpbmdPcGVyYXRpb25Qcm9jZXNzaW5nKCk7Ci0gICAgICAgIGN0eC5jYW5jZWxCaW5kaW5nUHJvY2Vzc2luZygpOwotICAgICAgfQotCi0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIG9wID0gbmV3IE9wZXJhdGlvblNpZ25hdHVyZShwYXJ0cywgbnVsbCwgcmVnaXN0cnksIHRydWUpOwotICAgICAgICBpZiAoYWRkaXRpb25hbE5hbWUgIT0gbnVsbCkKLSAgICAgICAgICBvcC5nZXRTaWduYXR1cmUoKS5hZGQoMCwgYWRkaXRpb25hbE5hbWUpOwotCi0gICAgICAgIC8vaWYgKGlzU09BUEFjdGlvblJlcXVpcmVkKQotICAgICAgICAvL2lmIChzb2FwQWN0aW9uICE9IG51bGwpCi0gICAgICAgIGlmIChpc1NPQVBBY3Rpb25SZXF1aXJlZCAmJiBzb2FwQWN0aW9uICE9IG51bGwpCi0gICAgICAgICAgb3AuZ2V0U2lnbmF0dXJlKCkuYWRkKDAsIHNvYXBBY3Rpb24pOwotCi0gICAgICAgIGlmIChvcC5nZXRTaWduYXR1cmUoKS5lcXVhbHMoc2lnbmF0dXJlKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIHJlcXVpcmVkIG9wZXJhdGlvbiBpcyBmb3VuZAotICAgICAgICAgIG9wZXJhdGlvbiA9IGN0eC5nZXRCaW5kaW5nT3BlcmF0aW9uKCk7Ci0gICAgICAgICAgY3R4LmNhbmNlbEJpbmRpbmdPcGVyYXRpb25Qcm9jZXNzaW5nKCk7Ci0gICAgICAgICAgY3R4LmNhbmNlbEJpbmRpbmdQcm9jZXNzaW5nKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogVGhlIGNvbnN0cnVjdG9yIGNyZWF0ZXMgT3BlcmF0aW9uU2lnbmF0dXJlIGZvciBTT0FQIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBkb2MgYSBEb2N1bWVudCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgT3BlcmF0aW9uU2lnbmF0dXJlKERvY3VtZW50IGRvYykKLSAgewotICAgIEVsZW1lbnQgYm9keSA9Ci0gICAgICBYTUxVdGlscy5maW5kQ2hpbGRFbGVtZW50KAotICAgICAgICBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCksCi0gICAgICAgIFdTSVRhZy5FTEVNX1NPQVBfQk9EWSk7Ci0gICAgcHJvY2Vzc1BhcnRzKGJvZHksIGZhbHNlKTsKLSAgICBpc0RvY3VtZW50U3R5bGUgfD0gKHNpZ25hdHVyZS5zaXplKCkgPiAxKTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgY29uc3RydWN0b3IgY3JlYXRlcyBPcGVyYXRpb25TSWduYXR1cmUgZm9yIAotICAgKiBsaXN0IG9mIDxjb2RlPlBhcnQ8L2NvZGU+IG9iamVjdHMgYW5kIGdpdmVuIFdTREwgZG9jdW1lbnQgd2l0aGluIHRoZXNlCi0gICAqIHBhcnRzIGFyZSBkZWZpbmVkLgotICAgKiAKLSAgICogQHBhcmFtIHBhcnRzIGEgbGlzdCBvZiBQYXJ0IG9iamVjdHMuCi0gICAqIEBwYXJhbSB3c2RsRG9jdW1lbnQgYSBXU0RMIGRvY3VtZW50LgotICAgKiBAcGFyYW0gcmVnaXN0cnkgYSB0eXBlcyByZWdpc3RyeS4KLSAgICogQHBhcmFtIHBhcnRpYWwgYSBwYXJ0aWFsIHN0YXR1cy4KLSAgICovCi0gIHB1YmxpYyBPcGVyYXRpb25TaWduYXR1cmUoCi0gICAgTGlzdCBwYXJ0cywKLSAgICBEb2N1bWVudCB3c2RsRG9jdW1lbnQsCi0gICAgVHlwZXNSZWdpc3RyeSByZWdpc3RyeSwKLSAgICBib29sZWFuIHBhcnRpYWwpCi0gIHsKLSAgICBpZiAocGFydHMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpdCA9IHBhcnRzLml0ZXJhdG9yKCk7Ci0KLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIFBhcnQgcGFydCA9IChQYXJ0KSBpdC5uZXh0KCk7Ci0gICAgICAgIFN0cmluZyBsb2NhbE5hbWUgPSAocGFydGlhbCkgPyBwYXJ0LmdldE5hbWUoKSA6IG51bGw7Ci0gICAgICAgIFFOYW1lIHR5cGVOYW1lID0gcGFydC5nZXRUeXBlTmFtZSgpOwotICAgICAgICBRTmFtZSBlbGVtZW50TmFtZSA9IHBhcnQuZ2V0RWxlbWVudE5hbWUoKTsKLQotICAgICAgICBTdHJpbmcgbmFtZXNwYWNlID0gIiI7Ci0KLSAgICAgICAgLy8gSWYgdHlwZSBuYW1lIGlzIG5vdCBudWxsLCB0aGVuIGEgdHlwZSBlbGVtZW50IHdhcyB1c2VkIHNvIGl0IHNob3VsZCBiZSBhbiBSUEMgc3R5bGUgc2lnbmF0dXJlIAotICAgICAgICBpZiAodHlwZU5hbWUgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIC8vIFBhcnQgd3JhcHBlcnMgZG8gbm90IGhhdmUgbmFtZXNwYWNlcyAKLSAgICAgICAgICBuYW1lc3BhY2UgPSAiIjsKLQotICAgICAgICAgIGlmIChsb2NhbE5hbWUgPT0gbnVsbCkKLSAgICAgICAgICAgIGxvY2FsTmFtZSA9IHR5cGVOYW1lLmdldExvY2FsUGFydCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgZWxlbWVudCBuYW1lIGlzIG5vdCBudWxsLCB0aGVuIGl0IHNob3VsZCBiZSBhIGRvY3VtZW50IHN0eWxlIHNpZ25hdHVyZQotICAgICAgICBlbHNlIGlmIChlbGVtZW50TmFtZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgbmFtZXNwYWNlID0gZWxlbWVudE5hbWUuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0KLSAgICAgICAgICBpZiAobG9jYWxOYW1lID09IG51bGwpCi0gICAgICAgICAgICBsb2NhbE5hbWUgPSBlbGVtZW50TmFtZS5nZXRMb2NhbFBhcnQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHNpZ25hdHVyZS5hZGQobmV3IFFOYW1lKG5hbWVzcGFjZSwgbG9jYWxOYW1lKSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaXNDcmVhdGVkID0gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHJlY3JlYXRlcyBPcGVyYXRpb25TaWduYXR1cmUgd2l0aCBhc3N1bXB0aW9uIHRoYXQgb3BlcmF0aW9uIGlzCi0gICAqIFJQQy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGNyZWF0ZVJQQ1NpZ25hdHVyZSgpCi0gIHsKLSAgICBpc0NyZWF0ZWQgPSBmYWxzZTsKLSAgICBpZiAoZmlyc3RCb2R5ID09IG51bGwpCi0gICAgICByZXR1cm47Ci0gICAgcHJvY2Vzc1BhcnRzKGZpcnN0Qm9keSwgdHJ1ZSk7Ci0gICAgaXNEb2N1bWVudFN0eWxlID0gZmFsc2U7Ci0gIH0KLQotICAvKioKLSAgICogSW50ZXJuYWwgbWV0aG9kIHByb2Nlc3NlcyBXU0RMIHBhcnRzIGFuZCBjcmVhdGVzIG9wZXJhdGlvbiBzaWduYXR1cmUuCi0gICAqIEBwYXJhbSBwYXJlbnQKLSAgICovCi0gIHByaXZhdGUgdm9pZCBwcm9jZXNzUGFydHMoTm9kZSBwYXJlbnQsIGJvb2xlYW4gcHJvY2Vzc1dyYXBwZXIpCi0gIHsKLSAgICBpZiAocGFyZW50ICE9IG51bGwpCi0gICAgewotICAgICAgTm9kZSBuID0gcGFyZW50LmdldEZpcnN0Q2hpbGQoKTsKLQotICAgICAgLy8gdmFyaWFibGUgaW5kaWNhdGVzIHRoYXQgZmlyc3QgdGFnIGlzIHByb2Nlc3NlZAotICAgICAgYm9vbGVhbiBpc0ZpcnN0ID0gdHJ1ZTsKLSAgICAgIC8vIGl0ZXJhdGUgYWxsIGJvZGllcwotICAgICAgd2hpbGUgKG4gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgaWYgKE5vZGUuRUxFTUVOVF9OT0RFID09IG4uZ2V0Tm9kZVR5cGUoKSkKLSAgICAgICAgewotICAgICAgICAgIGlmIChpc0ZpcnN0ICYmIGZpcnN0Qm9keSA9PSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlzRmlyc3QgPSBmYWxzZTsKLSAgICAgICAgICAgIGZpcnN0Qm9keSA9IChFbGVtZW50KSBuOwotICAgICAgICAgICAgLy8gY2hlY2sgc29hcGVudjpmYXVsdAotICAgICAgICAgICAgaWYgKFhNTFV0aWxzLmVxdWFscyhuLCBXU0lUYWcuRUxFTV9TT0FQX0ZBVUxUKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgaXNGYXVsdCA9IHRydWU7Ci0gICAgICAgICAgICAgIGlzQ3JlYXRlZCA9IGZhbHNlOwotICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IG4uZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICAgICAgU3RyaW5nIGxvY2FsTmFtZSA9IG4uZ2V0TG9jYWxOYW1lKCk7Ci0KLSAgICAgICAgICAvKkkgaGF2ZSBubyBpZGVhIHdoeSB0aGlzIGNvZGUgaXMgaW4gaGVyZSBzaW5jZSBpdCBtYWtlcyBubyBzZW5zZSBhdCBhbGwsIHNvIEkgYW0gY29tbWVudGluZyBpdCBvdXQKLSAgICAgICAgICAvLyB0cnkgdG8gZ2V0IHhzaTp0YWcKLSAgICAgICAgICBpZiAoWE1MVXRpbHMuZ2V0QXR0cmlidXRlKChFbGVtZW50KSBuLCBXU0lUYWcuQVRUUl9YU0lfVFlQRSkgIT0gbnVsbCkgewotICAgICAgICAgICAgICAvLyB3ZSBzdXBwb3NlIHRoYXQgUlBDIHN0eWxlIGRvZXMgbm90IHVzZSB4c2k6dHlwZSBhdHRyaWJ1dGUKLSAgICAgICAgICAgICAgaXNEb2N1bWVudFN0eWxlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgQXR0ciB4c2lUeXBlID0gWE1MVXRpbHMuZ2V0QXR0cmlidXRlKChFbGVtZW50KSBuLCBXU0lUYWcuQVRUUl9YU0lfVFlQRSk7Ci0gICAgICAgICAgICAgIAotICAgICAgICAgICAgICBTdHJpbmcgeHNpVmFsdWUgPSB4c2lUeXBlLmdldE5vZGVWYWx1ZSgpOwotICAgICAgICAgICAgICBpbnQgaSA9IHhzaVZhbHVlLmluZGV4T2YoJzonKTsKLSAgICAgICAgICAgICAgaWYgKGkgIT0gLTEpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIG5hbWVzcGFjZSA9IFhNTFV0aWxzLmZpbmROYW1lc3BhY2VVUkkobiwgeHNpVmFsdWUuc3Vic3RyaW5nKDAsIGkpKTsKLSAgICAgICAgICAgICAgICAgIGxvY2FsTmFtZSA9IHhzaVZhbHVlLnN1YnN0cmluZyhpKzEpOwotICAgICAgICAgICAgICB9IAotICAgICAgICAgIH0KLSAgICAgICAgICAqLwotCi0gICAgICAgICAgLy8gSWYgdGhpcyBpcyBycGMtbGl0ZXJhbCBhbmQgcHJvY2Vzc2luZyBhIHBhcnQgKG5vdCB0aGUgd3JhcHBlciksIHRoZW4gdGhlIHBhcnQgc2hvdWxkIG5vdCBoYXZlIGEgbmFtZXNwYWNlCi0gICAgICAgICAgLy8gQW5kIGlmIGl0IGRvZXMsIHRoZW4gb25lIG9mIHRoZSB0ZXN0IGFzc2VydGlvbnMgd2lsbCBkZXRlY3QgaXQKLSAgICAgICAgICBpZiAoIWlzRG9jdW1lbnRTdHlsZSAmJiBwcm9jZXNzV3JhcHBlcikKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBuYW1lc3BhY2UgPSAiIjsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBpZiAobmFtZXNwYWNlID09IG51bGwgfHwgbmFtZXNwYWNlLmxlbmd0aCgpID09IDApCi0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKGlzRG9jdW1lbnRTdHlsZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy9FbGVtZW50IGZpcnN0Q2hpbGQgID0gbnVsbDsKLSAgICAgICAgICAgICAgTm9kZSBpdCA9IG4uZ2V0Rmlyc3RDaGlsZCgpOwotICAgICAgICAgICAgICB3aGlsZSAoaXQgIT0gbnVsbCAmJiAhKGl0IGluc3RhbmNlb2YgRWxlbWVudCkpCi0gICAgICAgICAgICAgICAgaXQgPSBpdC5nZXROZXh0U2libGluZygpOwotICAgICAgICAgICAgICBpZiAoaXQgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICBuYW1lc3BhY2UgPSBpdC5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0KLSAgICAgICAgICAvLyBub3JtYWxpemUgbmFtZXNwYWNlcy4gQWxsIGVtcHR5IG5hbWVzcGFjZXMgLT4gbnVsbCAKLSAgICAgICAgICBpZiAobmFtZXNwYWNlICE9IG51bGwgJiYgbmFtZXNwYWNlLmxlbmd0aCgpID09IDApCi0gICAgICAgICAgICBuYW1lc3BhY2UgPSBudWxsOwotCi0gICAgICAgICAgLy8gcHV0IHBhcnQgaW50byBzaWduYXR1cmUKLSAgICAgICAgICBzaWduYXR1cmUuYWRkKG5ldyBRTmFtZShuYW1lc3BhY2UsIGxvY2FsTmFtZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgbiA9IG4uZ2V0TmV4dFNpYmxpbmcoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGlzQ3JlYXRlZCA9IGZhbHNlOyAvLyBub3QgZm91bmQgPwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlzQ3JlYXRlZCA9IHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogSW5kaWNhdGVzIHdoZXRoZXIgb3BlcmF0aW9uIGhhcyBkb2N1bWVudCBzdHlsZSBvciBSUEMuIAotICAgKiBAcmV0dXJuIHRydWUgaWYgb3BlcmF0aW9uIGhhcyBkb2N1bWVudCBzdHlsZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzRG9jdW1lbnRTdHlsZSgpCi0gIHsKLSAgICByZXR1cm4gaXNEb2N1bWVudFN0eWxlOwotICB9Ci0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIFdTREwgZmF1bHQgcGFydHMgc2hvdWxkIGJlIGluY2x1ZGVkIGludG8gc2lnbmF0dXJlIG9yCi0gICAqIG5vdC4KLSAgICogQHJldHVybiB0cnVlIGlmIFdTREwgZmF1bHQgcGFydHMgc2hvdWxkIGJlIGluY2x1ZGVkIGludG8gc2lnbmF0dXJlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNGYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gaXNGYXVsdDsKLSAgfQotCi0gIC8qKgotICAgKiBJbmRpY2F0ZXMgdGhhdCBvcGVyYXRpb24gc2lnbmF0dXJlIHdhcyBjcmVhdGVkLgotICAgKiBAcmV0dXJuIHRydWUgaWYgb3BlcmF0aW9uIHNpZ25hdHVyZSB3YXMgY3JlYXRlZC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzQ3JlYXRlZCgpCi0gIHsKLSAgICByZXR1cm4gaXNDcmVhdGVkOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldHMgb3BlcmF0aW9uIHNpZ25hdHVyZSBjcmVhdGVkIGZvciBTT0FQIG1lc3NhZ2UuCi0gICAqIEByZXR1cm4gb3BlcmF0aW9uIHNpZ25hdHVyZSBjcmVhdGVkIGZvciBTT0FQIG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRTaWduYXR1cmUoKQotICB7Ci0gICAgcmV0dXJuIHNpZ25hdHVyZTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIGphdmEubGFuZy5PYmplY3QjaGFzaENvZGUoKQotICAgKi8KLSAgcHVibGljIGludCBoYXNoQ29kZSgpCi0gIHsKLSAgICByZXR1cm4gc2lnbmF0dXJlLmhhc2hDb2RlKCk7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBqYXZhLmxhbmcuT2JqZWN0I2VxdWFscyhPYmplY3QpCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG8pCi0gIHsKLSAgICBpZiAobyBpbnN0YW5jZW9mIE9wZXJhdGlvblNpZ25hdHVyZSkKLSAgICAgIHJldHVybiBzaWduYXR1cmUuZXF1YWxzKCgoT3BlcmF0aW9uU2lnbmF0dXJlKSBvKS5nZXRTaWduYXR1cmUoKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgbWF0Y2hlcyBvcGVyYXRpb24gYmFzZWQgb24gdGhlIGdpdmVuIFNPQVAgbWVzc2FnZSByZXF1ZXN0LAotICAgKiBXU0RMIGJpbmRpbmcsIGFuZCBzb2FwQWN0aW9uLgotICAgKiAKLSAgICogQHBhcmFtIGlucHV0TWVzc2FnZSBhbiBTT0FQIG1lc3NhZ2UgcmVxdWVzdC4KLSAgICogQHBhcmFtIHNvYXBBY3Rpb24gYSBzb2FwIGFjdGlvbi4KLSAgICogQHBhcmFtIGJpbmRpbmcgYSBXU0RMIGJpbmRpbmcuCi0gICAqIEBwYXJhbSByZWdpc3RyeSBhIHR5cGVzIHJlZ2lzdHJ5LgotICAgKiBAcmV0dXJuIE9wZXJhdGlvbk1hdGNoIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgT3BlcmF0aW9uTWF0Y2ggbWF0Y2hPcGVyYXRpb24oCi0gICAgRG9jdW1lbnQgaW5wdXRNZXNzYWdlLAotICAgIFN0cmluZyBzb2FwQWN0aW9uLAotICAgIEJpbmRpbmcgYmluZGluZywKLSAgICBUeXBlc1JlZ2lzdHJ5IHJlZ2lzdHJ5KQotICB7Ci0gICAgcmV0dXJuIG1hdGNoT3BlcmF0aW9uKGlucHV0TWVzc2FnZSwgc29hcEFjdGlvbiwgYmluZGluZywgcmVnaXN0cnksIHRydWUpOwotICB9Ci0KLSAgLyoqCi0gICAgICogVGhlIG1ldGhvZCBtYXRjaGVzIG9wZXJhdGlvbiBiYXNlZCBvbiB0aGUgZ2l2ZW4gU09BUCBtZXNzYWdlIHJlcXVlc3QsCi0gICAgICogV1NETCBiaW5kaW5nLCBhbmQgc29hcEFjdGlvbi4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gaW5wdXRNZXNzYWdlIFNPQVAgbWVzc2FnZSByZXF1ZXN0LgotICAgICAqIEBwYXJhbSBzb2FwQWN0aW9uIGEgc29hcCBhY3Rpb24uCi0gICAgICogQHBhcmFtIGJpbmRpbmcgYSBXU0RMIGJpbmRpbmcuCi0gICAgICogQHBhcmFtIHJlZ2lzdHJ5IGEgdHlwZXMgcmVnaXN0cnkuCi0gICAgICogQHBhcmFtIHNvYXBBY3Rpb25SZXF1aXJlZCBtdXN0IHByb2Nlc3MgdGhlIHNvYXBBY3Rpb24gdmFsdWUgZXZlbiBpZiBpdCBpcyBudWxsIAotICAgICAqIEByZXR1cm4gT3BlcmF0aW9uTWF0Y2ggb2JqZWN0LgotICAgICAqLwotICBwdWJsaWMgc3RhdGljIE9wZXJhdGlvbk1hdGNoIG1hdGNoT3BlcmF0aW9uKAotICAgIERvY3VtZW50IGlucHV0TWVzc2FnZSwKLSAgICBTdHJpbmcgc29hcEFjdGlvbiwKLSAgICBCaW5kaW5nIGJpbmRpbmcsCi0gICAgVHlwZXNSZWdpc3RyeSByZWdpc3RyeSwKLSAgICBib29sZWFuIHNvYXBBY3Rpb25SZXF1aXJlZCkKLSAgewotICAgIC8vIFBhcnNlIHJlcXVlc3QgbWVzc2FnZQotICAgIE9wZXJhdGlvblNpZ25hdHVyZSBzaWduYXR1cmUgPSBuZXcgT3BlcmF0aW9uU2lnbmF0dXJlKGlucHV0TWVzc2FnZSk7Ci0gICAgaWYgKCFzaWduYXR1cmUuaXNDcmVhdGVkKCkpCi0gICAgICByZXR1cm4gbnVsbDsKLQotICAgIC8vIGZpcnN0IG9mIGFsbCBsb29raW5nIGZvciBkb2N1bWVudCBzdHlsZQotICAgIC8vIGJlY2F1c2UgcnBjIHN0eWxlIGlzIHN1YnNldCBvZiBkb2N1bWVudCBzdHlsZSAgCi0gICAgT3BlcmF0aW9uU2lnbmF0dXJlLlZpc2l0b3IgcmVzb2x2ZXIgPQotICAgICAgc2lnbmF0dXJlLm5ldyBWaXNpdG9yKFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9ET0MsIHJlZ2lzdHJ5KTsKLQotICAgIC8vIG5vcm1hbGl6ZSBTT0FQQWN0aW9uCi0gICAgaWYgKHNvYXBBY3Rpb24gIT0gbnVsbAotICAgICAgJiYgc29hcEFjdGlvbi5sZW5ndGgoKSA+IDEKLSAgICAgICYmIHNvYXBBY3Rpb24uY2hhckF0KDApID09ICciJwotICAgICAgJiYgc29hcEFjdGlvbi5jaGFyQXQoc29hcEFjdGlvbi5sZW5ndGgoKSAtIDEpID09ICciJykKLSAgICAgIHNvYXBBY3Rpb24gPSBzb2FwQWN0aW9uLnN1YnN0cmluZygxLCBzb2FwQWN0aW9uLmxlbmd0aCgpIC0gMSk7Ci0KLSAgICAvLyAgICAgIGlmIHNvYXAgYWN0aW9uIFVSSSBwcm9jZXNzaW5nIHJlcXVpcmVkCi0gICAgLy8gaWYgc29hcCBhY3Rpb24gVVJJIHByb2Nlc3NpbmcgcmVxdWlyZWQgCi0gICAgLy8gYW5hbHl6ZSBTT0FQQWN0aW9uIGFmdGVyIHBhcnRzIGJlaW5nIHByb2Nlc3NlZAotICAgIC8vIHB1dCBTT0FQQWN0aW9uIGludG8gc2lnbmF0dXJlCi0gICAgLy9pZiAoc29hcEFjdGlvbiAhPSBudWxsICYmIHNvYXBBY3Rpb24ubGVuZ3RoKCkgPiAwKSB7Ci0gICAgaWYgKHNvYXBBY3Rpb24gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBzaWduYXR1cmUuZ2V0U2lnbmF0dXJlKCkuYWRkKDAsIHNvYXBBY3Rpb24pOwotICAgIH0KLQotICAgIGlmIChzb2FwQWN0aW9uUmVxdWlyZWQpCi0gICAgICByZXNvbHZlci5zZXRTT0FQQWN0aW9uUmVxdWlyZWQoKTsKLQotICAgIFdTRExUcmF2ZXJzYWwgdHJhdmVyc2FsID0gbmV3IFdTRExUcmF2ZXJzYWwoKTsKLSAgICAvL1Zpc2l0b3JBZGFwdG9yLmFkYXB0KHJlc29sdmVyKTsKLSAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcihyZXNvbHZlcik7Ci0gICAgdHJhdmVyc2FsLnZpc2l0U09BUEJpbmRpbmcodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0U09BUEJvZHkodHJ1ZSk7Ci0gICAgdHJhdmVyc2FsLnZpc2l0U09BUE9wZXJhdGlvbih0cnVlKTsKLQotICAgIHRyYXZlcnNhbC5pZ25vcmVSZWZlcmVuY2VzKCk7Ci0gICAgdHJhdmVyc2FsLmlnbm9yZUJpbmRpbmdPdXRwdXQoKTsKLSAgICB0cmF2ZXJzYWwudHJhdmVyc2UoYmluZGluZyk7Ci0KLSAgICBCaW5kaW5nT3BlcmF0aW9uIG9wZXJhdGlvbiA9IHJlc29sdmVyLmdldE1hdGNoZWRPcGVyYXRpb24oKTsKLSAgICBpZiAob3BlcmF0aW9uID09IG51bGwgJiYgIXNpZ25hdHVyZS5pc0RvY3VtZW50U3R5bGUoKSkKLSAgICB7Ci0gICAgICByZXNvbHZlci5zZXRSZXF1aXJlZFN0eWxlKFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9SUEMpOwotICAgICAgc2lnbmF0dXJlLmNyZWF0ZVJQQ1NpZ25hdHVyZSgpOwotICAgICAgdHJhdmVyc2FsLnRyYXZlcnNlKGJpbmRpbmcpOwotICAgICAgb3BlcmF0aW9uID0gcmVzb2x2ZXIuZ2V0TWF0Y2hlZE9wZXJhdGlvbigpOwotICAgICAgaWYgKG9wZXJhdGlvbiA9PSBudWxsKQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICByZXR1cm4gbmV3IE9wZXJhdGlvbk1hdGNoKAotICAgICAgcmVzb2x2ZXIucmVxdWlyZWRTdHlsZSwKLSAgICAgIHNpZ25hdHVyZS5nZXRTaWduYXR1cmUoKSwKLSAgICAgIHJlc29sdmVyLmdldE1hdGNoZWRPcGVyYXRpb24oKSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvUGFpci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9QYWlyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3MWExOTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9QYWlyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbDsKLQotLyoqCi0gKiBUaGUgY2xhc3MgcmVwcmVzZW50cyBwYWlyIG9mIHZhbHVlcy4KLSAqIAotICogQGF1dGhvciBLdWxpawotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgUGFpcgotewotICBmaW5hbCBwcml2YXRlIE9iamVjdCBmaXJzdDsKLSAgZmluYWwgcHJpdmF0ZSBPYmplY3Qgc2Vjb25kOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICogQHBhcmFtIGZpcnN0IG9iamVjdAotICAgKiBAcGFyYW0gc2Vjb25kIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBQYWlyKE9iamVjdCBmaXJzdCwgT2JqZWN0IHNlY29uZCkKLSAgewotICAgIHRoaXMuZmlyc3QgPSBmaXJzdDsKLSAgICB0aGlzLnNlY29uZCA9IHNlY29uZDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIGZpcnN0IG9iamVjdC4KLSAgICogQHJldHVybiBPYmplY3QKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZ2V0Rmlyc3QoKQotICB7Ci0gICAgcmV0dXJuIGZpcnN0OwotICB9Ci0KLSAgLyoqCi0gICAqIEdldHMgc2Vjb25kIG9iamVjdC4KLSAgICogQHJldHVybiBPYmplY3QKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZ2V0U2Vjb25kKCkKLSAgewotICAgIHJldHVybiBzZWNvbmQ7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBqYXZhLmxhbmcuT2JqZWN0I2VxdWFscyhPYmplY3QpCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG8pCi0gIHsKLSAgICBpZiAobyA9PSBudWxsIHx8ICEobyBpbnN0YW5jZW9mIFBhaXIpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFBhaXIgcCA9IChQYWlyKSBvOwotICAgIHJldHVybiAoCi0gICAgICBOdWxsVXRpbC5lcXVhbHMocC5nZXRGaXJzdCgpLCBmaXJzdCkKLSAgICAgICAgJiYgTnVsbFV0aWwuZXF1YWxzKHAuZ2V0U2Vjb25kKCksIHNlY29uZCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCNoYXNoQ29kZSgpCi0gICAqLwotICBwdWJsaWMgaW50IGhhc2hDb2RlKCkKLSAgewotICAgIGludCBjb2RlID0gMDsKLSAgICBpZiAoZmlyc3QgIT0gbnVsbCkKLSAgICAgIGNvZGUgKz0gZmlyc3QuaGFzaENvZGUoKTsKLSAgICBpZiAoc2Vjb25kICE9IG51bGwpCi0gICAgICBjb2RlICs9IHNlY29uZC5oYXNoQ29kZSgpOwotICAgIHJldHVybiBjb2RlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL1NldENvb2tpZTJWYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvU2V0Q29va2llMlZhbGlkYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTgyZTNhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvU2V0Q29va2llMlZhbGlkYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsOwotCi1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgY2hlY2tzIHRoZSBjb29raWVzIGNvbmZvcm0gdG8gUkZDMjk2NS4KLSAqIAotICogQGF1dGhvciBCYWx0YWsKLSAqLwotcHVibGljIGNsYXNzIFNldENvb2tpZTJWYWxpZGF0b3IKLXsKLQotICBwcml2YXRlIFZlY3RvciBjb21tZW50VmVjdCA9IG5ldyBWZWN0b3IoKTsKLSAgcHJpdmF0ZSBWZWN0b3IgY29tbWVudFVSTFZlY3QgPSBuZXcgVmVjdG9yKCk7Ci0gIHByaXZhdGUgVmVjdG9yIGRvbWFpblZlY3QgPSBuZXcgVmVjdG9yKCk7Ci0gIHByaXZhdGUgVmVjdG9yIG1heF9BZ2VWZWN0ID0gbmV3IFZlY3RvcigpOwotICBwcml2YXRlIFZlY3RvciBwYXRoVmVjdCA9IG5ldyBWZWN0b3IoKTsKLSAgcHJpdmF0ZSBWZWN0b3IgcG9ydFZlY3QgPSBuZXcgVmVjdG9yKCk7Ci0gIHByaXZhdGUgVmVjdG9yIHZlcnNpb25WZWN0ID0gbmV3IFZlY3RvcigpOwotCi0gIHByaXZhdGUgYm9vbGVhbiBwYXRoID0gZmFsc2U7Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCByZXNldEZsYWdzLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHJlc2V0UGF0aCgpCi0gIHsKLSAgICBwYXRoID0gZmFsc2U7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2sgaWYgdGhlIHN0cmluZyBzYXRpc2Z5IHRoZSAiU2V0LUNvb2tpZTIiIGhlYWRlciB2YWx1ZS4KLSAgICogQHBhcmFtIHN0ciBTdHJpbmcgCi0gICAqIEByZXR1cm4gYm9vbGVhbgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNTZXRDb29raWUyKFN0cmluZyBzdHIpCi0gIHsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIGludCBpbmRleCA9IDA7Ci0gICAgICBpbnQgbmV3SW5kZXggPSAwOwotICAgICAgd2hpbGUgKHRydWUpCi0gICAgICB7Ci0gICAgICAgIG5ld0luZGV4ID0gZ2V0TGFzdENvb2tpZShzdHIsIGluZGV4KTsKLSAgICAgICAgaWYgKGluZGV4ID09IG5ld0luZGV4KQotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgLy8gc2tpcCBzcGFjZXMKLSAgICAgICAgaW5kZXggPSBuZXdJbmRleDsKLSAgICAgICAgaW5kZXggPSBza2lwU3BhY2VzKHN0ciwgaW5kZXgpOwotICAgICAgICBpZiAoaW5kZXggPT0gc3RyLmxlbmd0aCgpKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKHN0ci5jaGFyQXQoaW5kZXgpICE9ICcsJykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICBpbmRleCsrOwotICAgICAgICAgIC8vIHNraXAgc3BhY2VzCi0gICAgICAgICAgaW5kZXggPSBza2lwU3BhY2VzKHN0ciwgaW5kZXgpOwotICAgICAgICB9Ci0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKFRocm93YWJsZSB0aCkKLSAgICB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldExhc3RDb29raWUuCi0gICAqIEBwYXJhbSBzdHIKLSAgICogQHBhcmFtIHN0YXJ0SW5kZXgKLSAgICogQHJldHVybiBpbnQKLSAgICovCi0gIHByaXZhdGUgaW50IGdldExhc3RDb29raWUoU3RyaW5nIHN0ciwgaW50IHN0YXJ0SW5kZXgpCi0gIHsKLQotICAgIHJlc2V0UGF0aCgpOwotCi0gICAgaW50IGluZGV4ID0gc3RhcnRJbmRleDsKLSAgICAvLyBmaW5kIHRva2VuCi0gICAgaW50IG5ld0luZGV4ID0gQmFzaWNSdWxlcy5nZXRMYXN0VG9rZW4oc3RyLCBpbmRleCk7Ci0gICAgaWYgKGluZGV4ID09IG5ld0luZGV4KQotICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICBpbmRleCA9IG5ld0luZGV4OwotICAgIGlmIChpbmRleCA9PSBzdHIubGVuZ3RoKCkpCi0gICAgICByZXR1cm4gc3RhcnRJbmRleDsKLQotICAgIC8vIGlmIG5vdCAnPScgLSBlcnJvcgotICAgIGlmIChzdHIuY2hhckF0KGluZGV4KSAhPSAnPScpCi0gICAgICByZXR1cm4gc3RhcnRJbmRleDsKLQotICAgIGluZGV4Kys7Ci0gICAgaWYgKGluZGV4ID09IHN0ci5sZW5ndGgoKSkKLSAgICAgIHJldHVybiBzdGFydEluZGV4OwotCi0gICAgLy8gZ2V0IHZhbHVlCi0gICAgbmV3SW5kZXggPSBnZXRMYXN0VmFsdWUoc3RyLCBpbmRleCk7Ci0gICAgaWYgKGluZGV4ID09IG5ld0luZGV4KQotICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICB3aGlsZSAodHJ1ZSkKLSAgICB7Ci0gICAgICBpbmRleCA9IG5ld0luZGV4OwotICAgICAgaWYgKGluZGV4ID09IHN0ci5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIGluZGV4OwotCi0gICAgICBpZiAoc3RyLmNoYXJBdChpbmRleCkgIT0gJzsnKQotICAgICAgICByZXR1cm4gaW5kZXg7Ci0gICAgICBpbmRleCsrOwotICAgICAgLy8gc2tpcCBzcGFjZXMKLSAgICAgIGluZGV4ID0gc2tpcFNwYWNlcyhzdHIsIGluZGV4KTsKLQotICAgICAgaWYgKGluZGV4ID09IHN0ci5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0gICAgICBuZXdJbmRleCA9IGdldExhc3RTZXRDb29raWVBdihzdHIsIGluZGV4KTsKLSAgICAgIGlmIChpbmRleCA9PSBuZXdJbmRleCkKLSAgICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBnZXRMYXN0VmFsdWUuCi0gICAqIEBwYXJhbSBzdHIKLSAgICogQHBhcmFtIHN0YXJ0SW5kZXgKLSAgICogQHJldHVybiBpbnQKLSAgICovCi0gIHByaXZhdGUgaW50IGdldExhc3RWYWx1ZShTdHJpbmcgc3RyLCBpbnQgc3RhcnRJbmRleCkKLSAgewotCi0gICAgaW50IGluZGV4ID0gQmFzaWNSdWxlcy5nZXRMYXN0VG9rZW4oc3RyLCBzdGFydEluZGV4KTsKLSAgICBpZiAoaW5kZXggIT0gc3RhcnRJbmRleCkKLSAgICAgIHJldHVybiBpbmRleDsKLSAgICBpbmRleCA9IEJhc2ljUnVsZXMuZ2V0TGFzdFF1b3RlZFN0cmluZyhzdHIsIHN0YXJ0SW5kZXgpOwotICAgIGlmIChpbmRleCAhPSBzdGFydEluZGV4KQotICAgICAgcmV0dXJuIGluZGV4OwotCi0gICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldExhc3RTZXRDb29raWVBdi4KLSAgICogQHBhcmFtIHN0cgotICAgKiBAcGFyYW0gc3RhcnRJbmRleAotICAgKiBAcmV0dXJuIGludAotICAgKi8KLSAgcHJpdmF0ZSBpbnQgZ2V0TGFzdFNldENvb2tpZUF2KFN0cmluZyBzdHIsIGludCBzdGFydEluZGV4KQotICB7Ci0KLSAgICBpbnQgaW5kZXggPSBzdGFydEluZGV4OwotICAgIGludCBuZXdJbmRleCA9IDA7Ci0KLSAgICBpZiAoc3RyLnN0YXJ0c1dpdGgoIkNvbW1lbnQ9IiwgaW5kZXgpKQotICAgIHsKLSAgICAgIGluZGV4ICs9ICJDb21tZW50PSIubGVuZ3RoKCk7Ci0gICAgICBuZXdJbmRleCA9IGdldExhc3RWYWx1ZShzdHIsIGluZGV4KTsKLSAgICAgIGlmIChpbmRleCA9PSBuZXdJbmRleCkKLSAgICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0gICAgICAvLyBkZWJ1ZyAtPgotICAgICAgU3RyaW5nIHFxcSA9IGdldFZhbHVlKHN0ciwgaW5kZXgsIG5ld0luZGV4KTsKLSAgICAgIGNvbW1lbnRWZWN0LmFkZChxcXEpOwotICAgICAgLy8gZGVidWcgPC0KLSAgICAgIHJldHVybiBuZXdJbmRleDsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc3RyLnN0YXJ0c1dpdGgoIkNvbW1lbnRVUkw9IiwgaW5kZXgpKQotICAgIHsKLSAgICAgIGluZGV4ICs9ICJDb21tZW50VVJMPSIubGVuZ3RoKCk7Ci0KLSAgICAgIGlmIChzdHIuY2hhckF0KGluZGV4KSAhPSAnXCInKQotICAgICAgICByZXR1cm4gc3RhcnRJbmRleDsKLQotICAgICAgbmV3SW5kZXggPSBzdHIuaW5kZXhPZignXCInLCBpbmRleCArIDEpOwotICAgICAgaWYgKG5ld0luZGV4ID09IC0xKQotICAgICAgICByZXR1cm4gc3RhcnRJbmRleDsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBuZXcgVVJMKHN0ci5zdWJzdHJpbmcoaW5kZXggKyAxLCBuZXdJbmRleCkpOwotICAgICAgfQotICAgICAgY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBtdWUpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBzdGFydEluZGV4OwotICAgICAgfQotICAgICAgLy8gZGVidWcgLT4KLSAgICAgIFN0cmluZyBxcXEgPSBnZXRWYWx1ZShzdHIsIGluZGV4ICsgMSwgbmV3SW5kZXgpOwotICAgICAgY29tbWVudFVSTFZlY3QuYWRkKHFxcSk7Ci0gICAgICAvLyBkZWJ1ZyA8LQotICAgICAgbmV3SW5kZXgrKzsKLSAgICAgIHJldHVybiBuZXdJbmRleDsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc3RyLnN0YXJ0c1dpdGgoIkRpc2NhcmQiLCBpbmRleCkpCi0gICAgewotICAgICAgcmV0dXJuIHN0YXJ0SW5kZXggKyAiRGlzY2FyZCIubGVuZ3RoKCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHN0ci5zdGFydHNXaXRoKCJEb21haW49IiwgaW5kZXgpKQotICAgIHsKLSAgICAgIGluZGV4ICs9ICJEb21haW49Ii5sZW5ndGgoKTsKLQotICAgICAgbmV3SW5kZXggPSBnZXRMYXN0VmFsdWUoc3RyLCBpbmRleCk7Ci0gICAgICBpZiAoaW5kZXggPT0gbmV3SW5kZXgpCi0gICAgICAgIHJldHVybiBzdGFydEluZGV4OwotCi0gICAgICAvLyBkZWJ1ZyAtPgotICAgICAgU3RyaW5nIHFxcSA9IGdldFZhbHVlKHN0ciwgaW5kZXgsIG5ld0luZGV4KTsKLSAgICAgIGRvbWFpblZlY3QuYWRkKHFxcSk7Ci0gICAgICAvLyBkZWJ1ZyA8LQotICAgICAgcmV0dXJuIG5ld0luZGV4OwotICAgIH0KLSAgICBlbHNlIGlmIChzdHIuc3RhcnRzV2l0aCgiTWF4LUFnZT0iLCBpbmRleCkpCi0gICAgewotICAgICAgaW5kZXggKz0gIk1heC1BZ2U9Ii5sZW5ndGgoKTsKLQotICAgICAgbmV3SW5kZXggPSBnZXRMYXN0VmFsdWUoc3RyLCBpbmRleCk7Ci0gICAgICBpZiAoaW5kZXggPT0gbmV3SW5kZXgpCi0gICAgICAgIHJldHVybiBzdGFydEluZGV4OwotCi0gICAgICBTdHJpbmcgcXFxID0gZ2V0VmFsdWUoc3RyLCBpbmRleCwgbmV3SW5kZXgpOwotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIEludGVnZXIucGFyc2VJbnQocXFxKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKQotICAgICAgewotICAgICAgICByZXR1cm4gc3RhcnRJbmRleDsKLSAgICAgIH0KLSAgICAgIC8vIGRlYnVnIC0+Ci0gICAgICBtYXhfQWdlVmVjdC5hZGQocXFxKTsKLSAgICAgIC8vIGRlYnVnIDwtCi0gICAgICByZXR1cm4gbmV3SW5kZXg7Ci0gICAgfQotICAgIGVsc2UgaWYgKHN0ci5zdGFydHNXaXRoKCJQYXRoPSIsIGluZGV4KSkKLSAgICB7Ci0gICAgICBpbmRleCArPSAiUGF0aD0iLmxlbmd0aCgpOwotCi0gICAgICBuZXdJbmRleCA9IGdldExhc3RWYWx1ZShzdHIsIGluZGV4KTsKLSAgICAgIGlmIChpbmRleCA9PSBuZXdJbmRleCkKLSAgICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICAgIFN0cmluZyBxcXEgPSBnZXRWYWx1ZShzdHIsIGluZGV4LCBuZXdJbmRleCk7Ci0gICAgICBpZiAocGF0aCA9PSBmYWxzZSkKLSAgICAgICAgcGF0aFZlY3QuYWRkKHFxcSk7Ci0gICAgICBwYXRoID0gdHJ1ZTsKLSAgICAgIHJldHVybiBuZXdJbmRleDsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc3RyLnN0YXJ0c1dpdGgoIlBvcnQiLCBpbmRleCkpCi0gICAgewotICAgICAgaW5kZXggKz0gIlBvcnQiLmxlbmd0aCgpOwotICAgICAgaWYgKHN0ci5jaGFyQXQoaW5kZXgpICE9ICc9JykKLSAgICAgICAgcmV0dXJuIGluZGV4OwotCi0gICAgICBpbmRleCsrOwotICAgICAgaWYgKHN0ci5jaGFyQXQoaW5kZXgpICE9ICdcIicpCi0gICAgICAgIHJldHVybiBzdGFydEluZGV4OwotCi0gICAgICBpbmRleCsrOwotICAgICAgbmV3SW5kZXggPSBnZXRMYXN0UG9ydExpc3Qoc3RyLCBpbmRleCk7Ci0gICAgICBpZiAoaW5kZXggPT0gbmV3SW5kZXgpCi0gICAgICAgIHJldHVybiBzdGFydEluZGV4OwotCi0gICAgICAvLyBkZWJ1ZyAtPgotICAgICAgU3RyaW5nIHFxcSA9IGdldFZhbHVlKHN0ciwgaW5kZXgsIG5ld0luZGV4KTsKLSAgICAgIHBvcnRWZWN0LmFkZChxcXEpOwotICAgICAgLy8gZGVidWcgPC0KLQotICAgICAgaW5kZXggPSBuZXdJbmRleDsKLSAgICAgIGlmIChzdHIuY2hhckF0KGluZGV4KSAhPSAnXCInKQotICAgICAgICByZXR1cm4gc3RhcnRJbmRleDsKLSAgICAgIGluZGV4Kys7Ci0gICAgICByZXR1cm4gaW5kZXg7Ci0KLSAgICB9Ci0gICAgZWxzZSBpZiAoc3RyLnN0YXJ0c1dpdGgoIlNlY3VyZSIsIGluZGV4KSkKLSAgICB7Ci0gICAgICByZXR1cm4gc3RhcnRJbmRleCArICJTZWN1cmUiLmxlbmd0aCgpOwotICAgIH0KLSAgICBlbHNlIGlmIChzdHIuc3RhcnRzV2l0aCgiVmVyc2lvbj0iLCBpbmRleCkpCi0gICAgewotICAgICAgaW5kZXggKz0gIlZlcnNpb249Ii5sZW5ndGgoKTsKLQotICAgICAgbmV3SW5kZXggPSBnZXRMYXN0RElHSVQoc3RyLCBpbmRleCk7Ci0gICAgICBpZiAoaW5kZXggPT0gbmV3SW5kZXgpCi0gICAgICAgIHJldHVybiBzdGFydEluZGV4OwotCi0gICAgICAvLyBkZWJ1ZyAtPgotICAgICAgU3RyaW5nIHFxcSA9IGdldFZhbHVlKHN0ciwgaW5kZXgsIG5ld0luZGV4KTsKLSAgICAgIHZlcnNpb25WZWN0LmFkZChxcXEpOwotICAgICAgLy8gZGVidWcgPC0KLSAgICAgIHJldHVybiBuZXdJbmRleDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJldHVybiBzdGFydEluZGV4OwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgZ2V0TGFzdFBvcnRMaXN0LgotICAgKiBAcGFyYW0gc3RyCi0gICAqIEBwYXJhbSBzdGFydEluZGV4Ci0gICAqIEByZXR1cm4gaW50Ci0gICAqLwotICBwcml2YXRlIGludCBnZXRMYXN0UG9ydExpc3QoU3RyaW5nIHN0ciwgaW50IHN0YXJ0SW5kZXgpCi0gIHsKLSAgICBpbnQgaW5kZXggPSBzdGFydEluZGV4OwotICAgIGludCBuZXdJbmRleCA9IDA7Ci0KLSAgICB3aGlsZSAodHJ1ZSkKLSAgICB7Ci0gICAgICBuZXdJbmRleCA9IGdldExhc3RESUdJVChzdHIsIGluZGV4KTsKLSAgICAgIGlmIChpbmRleCA9PSBuZXdJbmRleCkKLSAgICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICAgIGluZGV4ID0gbmV3SW5kZXg7Ci0gICAgICBpZiAoc3RyLmNoYXJBdChpbmRleCkgIT0gJywnKQotICAgICAgICByZXR1cm4gaW5kZXg7Ci0gICAgICBpbmRleCsrOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgZ2V0TGFzdERJR0lULgotICAgKiBAcGFyYW0gc3RyCi0gICAqIEBwYXJhbSBzdGFydEluZGV4Ci0gICAqIEByZXR1cm4gaW50Ci0gICAqLwotICBwcml2YXRlIGludCBnZXRMYXN0RElHSVQoU3RyaW5nIHN0ciwgaW50IHN0YXJ0SW5kZXgpCi0gIHsKLSAgICBpbnQgaW5kZXggPSBzdGFydEluZGV4OwotICAgIGZvciAoOyBpbmRleCA8IHN0ci5sZW5ndGgoKTsgaW5kZXgrKykKLSAgICB7Ci0gICAgICBpZiAoIUJhc2ljUnVsZXMuaXNESUdJVChzdHIuY2hhckF0KGluZGV4KSkpCi0gICAgICAgIHJldHVybiBpbmRleDsKLSAgICB9Ci0gICAgcmV0dXJuIGluZGV4OwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrIGlmIHRoZSBzdHJpbmcgc2F0aXNmeSB0aGUgIkNvb2tpZSIgaGVhZGVyIHZhbHVlLgotICAgKiBAcGFyYW0gc3RyIFN0cmluZwotICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzQ29va2llKFN0cmluZyBzdHIpCi0gIHsKLSAgICBpbnQgaW5kZXggPSAwOwotICAgIGludCBuZXdJbmRleCA9IDA7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBuZXdJbmRleCA9IGdldExhc3RWZXJzaW9uKHN0ciwgaW5kZXgpOwotICAgICAgaWYgKGluZGV4ID09IG5ld0luZGV4KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgIGluZGV4ID0gbmV3SW5kZXg7Ci0gICAgICBpbmRleCA9IHNraXBTcGFjZXMoc3RyLCBpbmRleCk7Ci0gICAgICBpZiAoc3RyLmNoYXJBdChpbmRleCkgIT0gJzsnICYmIHN0ci5jaGFyQXQoaW5kZXgpICE9ICcsJykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICBpbmRleCsrOwotICAgICAgaW5kZXggPSBza2lwU3BhY2VzKHN0ciwgaW5kZXgpOwotCi0gICAgICB3aGlsZSAodHJ1ZSkKLSAgICAgIHsKLSAgICAgICAgbmV3SW5kZXggPSBnZXRMYXN0Q29va2llc1ZhbHVlKHN0ciwgaW5kZXgpOwotICAgICAgICBpZiAoaW5kZXggPT0gbmV3SW5kZXgpCi0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGluZGV4ID0gbmV3SW5kZXg7Ci0gICAgICAgIGlmIChpbmRleCA9PSBzdHIubGVuZ3RoKCkpCi0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgaWYgKHN0ci5jaGFyQXQoaW5kZXgpICE9ICc7JyAmJiBzdHIuY2hhckF0KGluZGV4KSAhPSAnLCcpCi0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpbmRleCsrOwotICAgICAgICBpbmRleCA9IHNraXBTcGFjZXMoc3RyLCBpbmRleCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdGgpCi0gICAgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgZ2V0TGFzdFZlcnNpb24uCi0gICAqIEBwYXJhbSBzdHIKLSAgICogQHBhcmFtIHN0YXJ0SW5kZXgKLSAgICogQHJldHVybiBpbnQKLSAgICovCi0gIHByaXZhdGUgaW50IGdldExhc3RWZXJzaW9uKFN0cmluZyBzdHIsIGludCBzdGFydEluZGV4KQotICB7Ci0gICAgaW50IGluZGV4ID0gc3RhcnRJbmRleDsKLSAgICBpbnQgbmV3SW5kZXggPSAwOwotICAgIGlmICghc3RyLnN0YXJ0c1dpdGgoIiRWZXJzaW9uPSIpKQotICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0gICAgaW5kZXggKz0gIiRWZXJzaW9uPSIubGVuZ3RoKCk7Ci0gICAgbmV3SW5kZXggPSBnZXRMYXN0VmFsdWUoc3RyLCBpbmRleCk7Ci0gICAgaWYgKGluZGV4ID09IG5ld0luZGV4KQotICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICByZXR1cm4gbmV3SW5kZXg7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldExhc3RDb29raWVzVmFsdWUuCi0gICAqIEBwYXJhbSBzdHIKLSAgICogQHBhcmFtIHN0YXJ0SW5kZXgKLSAgICogQHJldHVybiBpbnQKLSAgICovCi0gIHByaXZhdGUgaW50IGdldExhc3RDb29raWVzVmFsdWUoU3RyaW5nIHN0ciwgaW50IHN0YXJ0SW5kZXgpCi0gIHsKLSAgICBpbnQgaW5kZXggPSBzdGFydEluZGV4OwotICAgIGludCBuZXdJbmRleCA9IDA7Ci0gICAgaW50IG9sZEluZGV4ID0gMDsKLQotICAgIC8vIGZpbmQgdG9rZW4KLSAgICBuZXdJbmRleCA9IEJhc2ljUnVsZXMuZ2V0TGFzdFRva2VuKHN0ciwgaW5kZXgpOwotICAgIGlmIChpbmRleCA9PSBuZXdJbmRleCkKLSAgICAgIHJldHVybiBzdGFydEluZGV4OwotCi0gICAgaW5kZXggPSBuZXdJbmRleDsKLSAgICBpZiAoaW5kZXggPT0gc3RyLmxlbmd0aCgpKQotICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICAvLyBpZiBub3QgJz0nIC0gZXJyb3IKLSAgICBpZiAoc3RyLmNoYXJBdChpbmRleCkgIT0gJz0nKQotICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICBpbmRleCsrOwotICAgIGlmIChpbmRleCA9PSBzdHIubGVuZ3RoKCkpCi0gICAgICByZXR1cm4gc3RhcnRJbmRleDsKLQotICAgIC8vIGdldCB2YWx1ZQotICAgIG5ld0luZGV4ID0gZ2V0TGFzdFZhbHVlKHN0ciwgaW5kZXgpOwotICAgIGlmIChpbmRleCA9PSBuZXdJbmRleCkKLSAgICAgIHJldHVybiBzdGFydEluZGV4OwotCi0gICAgaW5kZXggPSBuZXdJbmRleDsKLSAgICBpZiAoaW5kZXggPT0gc3RyLmxlbmd0aCgpKQotICAgICAgcmV0dXJuIGluZGV4OwotCi0gICAgaWYgKHN0ci5jaGFyQXQoaW5kZXgpICE9ICc7JykKLSAgICAgIHJldHVybiBpbmRleDsKLQotICAgIC8vIHByb2Nlc3MgWyI7IiBwYXRoXSBbIjsiIGRvbWFpbl0gWyI7IiBwb3J0XSAKLSAgICBvbGRJbmRleCA9IGluZGV4OwotICAgIGluZGV4Kys7Ci0gICAgaWYgKGluZGV4ID09IHN0ci5sZW5ndGgoKSkKLSAgICAgIHJldHVybiBzdGFydEluZGV4OwotCi0gICAgaW5kZXggPSBza2lwU3BhY2VzKHN0ciwgaW5kZXgpOwotICAgIGlmIChpbmRleCA9PSBzdHIubGVuZ3RoKCkpCi0gICAgICByZXR1cm4gc3RhcnRJbmRleDsKLQotICAgIC8vIHByb2Nlc3MgcGF0aAotICAgIG5ld0luZGV4ID0gZ2V0TGFzdFBhdGgoc3RyLCBpbmRleCk7Ci0gICAgaWYgKGluZGV4ICE9IG5ld0luZGV4KQotICAgIHsKLSAgICAgIGluZGV4ID0gbmV3SW5kZXg7Ci0gICAgICBpZiAoaW5kZXggPT0gc3RyLmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gaW5kZXg7Ci0KLSAgICAgIGlmIChzdHIuY2hhckF0KGluZGV4KSAhPSAnOycpCi0gICAgICAgIHJldHVybiBpbmRleDsKLQotICAgICAgb2xkSW5kZXggPSBpbmRleDsKLSAgICAgIGluZGV4Kys7Ci0gICAgICBpZiAoaW5kZXggPT0gc3RyLmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gc3RhcnRJbmRleDsKLQotICAgICAgaW5kZXggPSBza2lwU3BhY2VzKHN0ciwgaW5kZXgpOwotICAgICAgaWYgKGluZGV4ID09IHN0ci5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICB9Ci0KLSAgICAvLyBwcm9jZXNzIGRvbWFpbgotICAgIG5ld0luZGV4ID0gZ2V0TGFzdERvbWFpbihzdHIsIGluZGV4KTsKLSAgICBpZiAoaW5kZXggIT0gbmV3SW5kZXgpCi0gICAgewotICAgICAgaW5kZXggPSBuZXdJbmRleDsKLSAgICAgIGlmIChpbmRleCA9PSBzdHIubGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBpbmRleDsKLQotICAgICAgaWYgKHN0ci5jaGFyQXQoaW5kZXgpICE9ICc7JykKLSAgICAgICAgcmV0dXJuIGluZGV4OwotCi0gICAgICBvbGRJbmRleCA9IGluZGV4OwotICAgICAgaW5kZXgrKzsKLSAgICAgIGlmIChpbmRleCA9PSBzdHIubGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBzdGFydEluZGV4OwotCi0gICAgICBpbmRleCA9IHNraXBTcGFjZXMoc3RyLCBpbmRleCk7Ci0gICAgICBpZiAoaW5kZXggPT0gc3RyLmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gc3RhcnRJbmRleDsKLQotICAgIH0KLQotICAgIC8vIHByb2Nlc3MgcG9ydAotICAgIG5ld0luZGV4ID0gZ2V0TGFzdFBvcnQoc3RyLCBpbmRleCk7Ci0gICAgaWYgKGluZGV4ICE9IG5ld0luZGV4KQotICAgICAgcmV0dXJuIG5ld0luZGV4OwotICAgIGVsc2UKLSAgICAgIHJldHVybiBvbGRJbmRleDsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgZ2V0TGFzdFBhdGguCi0gICAqIEBwYXJhbSBzdHIKLSAgICogQHBhcmFtIHN0YXJ0SW5kZXgKLSAgICogQHJldHVybiBpbnQKLSAgICovCi0gIHByaXZhdGUgaW50IGdldExhc3RQYXRoKFN0cmluZyBzdHIsIGludCBzdGFydEluZGV4KQotICB7Ci0gICAgaW50IGluZGV4ID0gc3RhcnRJbmRleDsKLSAgICBpbnQgbmV3SW5kZXggPSAwOwotCi0gICAgaWYgKCFzdHIuc3RhcnRzV2l0aCgiJFBhdGg9IiwgaW5kZXgpKQotICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0gICAgaW5kZXggKz0gIiRQYXRoPSIubGVuZ3RoKCk7Ci0gICAgbmV3SW5kZXggPSBnZXRMYXN0VmFsdWUoc3RyLCBpbmRleCk7Ci0gICAgaWYgKGluZGV4ID09IG5ld0luZGV4KQotICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICByZXR1cm4gbmV3SW5kZXg7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldExhc3REb21haW4uCi0gICAqIEBwYXJhbSBzdHIKLSAgICogQHBhcmFtIHN0YXJ0SW5kZXgKLSAgICogQHJldHVybiBpbnQKLSAgICovCi0gIHByaXZhdGUgaW50IGdldExhc3REb21haW4oU3RyaW5nIHN0ciwgaW50IHN0YXJ0SW5kZXgpCi0gIHsKLSAgICBpbnQgaW5kZXggPSBzdGFydEluZGV4OwotICAgIGludCBuZXdJbmRleCA9IDA7Ci0KLSAgICBpZiAoIXN0ci5zdGFydHNXaXRoKCIkRG9tYWluPSIsIGluZGV4KSkKLSAgICAgIHJldHVybiBzdGFydEluZGV4OwotICAgIGluZGV4ICs9ICIkRG9tYWluPSIubGVuZ3RoKCk7Ci0gICAgbmV3SW5kZXggPSBnZXRMYXN0VmFsdWUoc3RyLCBpbmRleCk7Ci0gICAgaWYgKGluZGV4ID09IG5ld0luZGV4KQotICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICByZXR1cm4gbmV3SW5kZXg7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldExhc3RQb3J0LgotICAgKiBAcGFyYW0gc3RyCi0gICAqIEBwYXJhbSBzdGFydEluZGV4Ci0gICAqIEByZXR1cm4gaW50Ci0gICAqLwotICBwcml2YXRlIGludCBnZXRMYXN0UG9ydChTdHJpbmcgc3RyLCBpbnQgc3RhcnRJbmRleCkKLSAgewotICAgIGludCBpbmRleCA9IHN0YXJ0SW5kZXg7Ci0gICAgaW50IG5ld0luZGV4ID0gMDsKLQotICAgIGlmICghc3RyLnN0YXJ0c1dpdGgoIiRQb3J0IiwgaW5kZXgpKQotICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICBpbmRleCArPSAiJFBvcnQiLmxlbmd0aCgpOwotICAgIGlmIChzdHIuY2hhckF0KGluZGV4KSAhPSAnPScpCi0gICAgICByZXR1cm4gaW5kZXg7Ci0KLSAgICBpbmRleCsrOwotICAgIGlmIChzdHIuY2hhckF0KGluZGV4KSAhPSAnXCInKQotICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7Ci0KLSAgICBpbmRleCsrOwotICAgIG5ld0luZGV4ID0gZ2V0TGFzdFBvcnRMaXN0KHN0ciwgaW5kZXgpOwotICAgIGlmIChpbmRleCA9PSBuZXdJbmRleCkKLSAgICAgIHJldHVybiBzdGFydEluZGV4OwotCi0gICAgaW5kZXggPSBuZXdJbmRleDsKLSAgICBpZiAoc3RyLmNoYXJBdChpbmRleCkgIT0gJ1wiJykKLSAgICAgIHJldHVybiBzdGFydEluZGV4OwotICAgIGluZGV4Kys7Ci0gICAgcmV0dXJuIGluZGV4OwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBza2lwU3BhY2VzLgotICAgKiBAcGFyYW0gc3RyCi0gICAqIEBwYXJhbSBpbmRleAotICAgKiBAcmV0dXJuIGludAotICAgKi8KLSAgcHJpdmF0ZSBpbnQgc2tpcFNwYWNlcyhTdHJpbmcgc3RyLCBpbnQgaW5kZXgpCi0gIHsKLSAgICBmb3IgKDsgaW5kZXggPCBzdHIubGVuZ3RoKCk7IGluZGV4KyspCi0gICAgICBpZiAoIUJhc2ljUnVsZXMuaXNTUChzdHIuY2hhckF0KGluZGV4KSkpCi0gICAgICAgIGJyZWFrOwotICAgIHJldHVybiBpbmRleDsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgZ2V0VmFsdWUuCi0gICAqIEBwYXJhbSBzdHIKLSAgICogQHBhcmFtIGJlZwotICAgKiBAcGFyYW0gZW5kCi0gICAqIEByZXR1cm4gU3RyaW5nCi0gICAqLwotICBwcml2YXRlIFN0cmluZyBnZXRWYWx1ZShTdHJpbmcgc3RyLCBpbnQgYmVnLCBpbnQgZW5kKQotICB7Ci0gICAgU3RyaW5nIHFxcSA9IG51bGw7Ci0gICAgaWYgKHN0ci5jaGFyQXQoYmVnKSA9PSAnXCInKQotICAgICAgcXFxID0gc3RyLnN1YnN0cmluZyhiZWcgKyAxLCBlbmQgLSAxKTsKLSAgICBlbHNlCi0gICAgICBxcXEgPSBzdHIuc3Vic3RyaW5nKGJlZywgZW5kKTsKLSAgICByZXR1cm4gcXFxOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvU3RyaW5nVG9rZW5pemVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL1N0cmluZ1Rva2VuaXplci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Yzk1Mzk4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvU3RyaW5nVG9rZW5pemVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsOwotCi0vKioKLSAqIFN0cmluZyB0b2tlbml6ZXIuCi0gKiAKLSAqIEBhdXRob3I6IEt1bGlrCi0gKi8KLWZpbmFsIHB1YmxpYyBjbGFzcyBTdHJpbmdUb2tlbml6ZXIKLXsKLSAgcHJpdmF0ZSBjaGFyW10gc3BhY2VEZWw7Ci0gIHByaXZhdGUgY2hhcltdIGRlbDsKLSAgcHJpdmF0ZSBjaGFyW10gYWxsRGVsOwotCi0gIC8qKgotICAgKiBFbnVtZXJhdGlvbiBvZiBzdHJpbmdzLgotICAqIEBhdXRob3IgS3VsaWsKLSAgICovCi0gIHByaXZhdGUgY2xhc3MgU3RyaW5nVG9rZW5pemVyRW51bWVyYXRpb24gaW1wbGVtZW50cyBqYXZhLnV0aWwuRW51bWVyYXRpb24KLSAgewotICAgIHByaXZhdGUgZmluYWwgY2hhcltdIHN0cjsKLSAgICBwcml2YXRlIGZpbmFsIGludCBzaXplOwotICAgIHByaXZhdGUgaW50IGluZGV4OwotCi0gICAgLyoqCi0gICAgICogQ29uc3RydWN0b3IuCi0gICAgICogQHBhcmFtIHMKLSAgICAgKi8KLSAgICBTdHJpbmdUb2tlbml6ZXJFbnVtZXJhdGlvbihjaGFyW10gcykKLSAgICB7Ci0gICAgICBzdHIgPSBzOwotICAgICAgc2l6ZSA9IHN0ci5sZW5ndGg7Ci0gICAgICBpbmRleCA9IDA7Ci0KLSAgICAgIC8vIHNraXAgc3BhY2UgZGVsaW1pdGVycwotICAgICAgd2hpbGUgKGluZGV4IDwgc2l6ZSAmJiBjb250YWluKHN0cltpbmRleF0sIHNwYWNlRGVsKSkKLSAgICAgICAgaW5kZXgrKzsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAc2VlIGphdmEudXRpbC5FbnVtZXJhdGlvbiNoYXNNb3JlRWxlbWVudHMoKQotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIGhhc01vcmVFbGVtZW50cygpCi0gICAgewotICAgICAgcmV0dXJuIChpbmRleCA8IHNpemUpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEBzZWUgamF2YS51dGlsLkVudW1lcmF0aW9uI25leHRFbGVtZW50KCkKLSAgICAgKi8KLSAgICBwdWJsaWMgT2JqZWN0IG5leHRFbGVtZW50KCkKLSAgICB7Ci0gICAgICBpZiAoaW5kZXggPj0gc2l6ZSkKLSAgICAgICAgdGhyb3cgbmV3IGphdmEudXRpbC5Ob1N1Y2hFbGVtZW50RXhjZXB0aW9uKAotICAgICAgICAgICJTdHJpbmdUb2tlbml6ZXIgZW51bWVyYXRpb24iKTsKLQotICAgICAgLy8gc2tpcCBkZWxpbWl0ZXJzCi0gICAgICBpbnQgYmVnU3RyID0gaW5kZXg7Ci0gICAgICBpZiAoaW5kZXggPCBzaXplICYmIGNvbnRhaW4oc3RyW2luZGV4XSwgZGVsKSkKLSAgICAgICAgaW5kZXgrKzsKLQotICAgICAgLy8gc2tpcCB3b3JkCi0gICAgICBpZiAoYmVnU3RyID09IGluZGV4KQotICAgICAgICB3aGlsZSAoaW5kZXggPCBzaXplICYmICFjb250YWluKHN0cltpbmRleF0sIGFsbERlbCkpCi0gICAgICAgICAgaW5kZXgrKzsKLQotICAgICAgaW50IGVuZFN0ciA9IGluZGV4OwotCi0gICAgICAvLyBza2lwIHNwYWNlIGRlbGltaXRlcnMKLSAgICAgIHdoaWxlIChpbmRleCA8IHNpemUgJiYgY29udGFpbihzdHJbaW5kZXhdLCBzcGFjZURlbCkpCi0gICAgICAgIGluZGV4Kys7Ci0KLSAgICAgIHJldHVybiBTdHJpbmcuY29weVZhbHVlT2Yoc3RyLCBiZWdTdHIsIGVuZFN0ciAtIGJlZ1N0cik7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQHNlZSBqYXZhLmxhbmcuT2JqZWN0I3RvU3RyaW5nKCkKLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgICB7Ci0gICAgICBpbnQgaSA9IGluZGV4OwotICAgICAgU3RyaW5nIHMgPSAoU3RyaW5nKSBuZXh0RWxlbWVudCgpOwotICAgICAgaW5kZXggPSBpOwotICAgICAgcmV0dXJuIHM7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFN0cmluZ1Rva2VuaXplciBjb25zdHJ1Y3Rvci4KLSAgICAgKiBAcGFyYW0gc3BhY2VEZWxpbWl0ZXJzIHRoZSBzZXQgb2YgZGVsaW1pdGVycyB0byBiZSBpZ25vcmVkCi0gICAgICogQHBhcmFtIGRlbGltaXRlcnMgdGhlIHNldCBvZiBkZWxpbWl0ZXJzIHRvIGJlIHJlbWFpbmVkLgotICAgKi8KLSAgcHVibGljIFN0cmluZ1Rva2VuaXplcihjaGFyW10gc3BhY2VEZWxpbWl0ZXJzLCBjaGFyW10gZGVsaW1pdGVycykKLSAgewotICAgIHN1cGVyKCk7Ci0KLSAgICBpZiAoc3BhY2VEZWxpbWl0ZXJzICE9IG51bGwpCi0gICAgewotICAgICAgc3BhY2VEZWwgPSBuZXcgY2hhcltzcGFjZURlbGltaXRlcnMubGVuZ3RoXTsKLSAgICAgIFN5c3RlbS5hcnJheWNvcHkoc3BhY2VEZWxpbWl0ZXJzLCAwLCBzcGFjZURlbCwgMCwgc3BhY2VEZWxpbWl0ZXJzLmxlbmd0aCk7Ci0gICAgICBzb3J0KHNwYWNlRGVsKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgc3BhY2VEZWwgPSBudWxsOwotCi0gICAgaWYgKGRlbGltaXRlcnMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBkZWwgPSBuZXcgY2hhcltkZWxpbWl0ZXJzLmxlbmd0aF07Ci0gICAgICBTeXN0ZW0uYXJyYXljb3B5KGRlbGltaXRlcnMsIDAsIGRlbCwgMCwgZGVsaW1pdGVycy5sZW5ndGgpOwotICAgICAgc29ydChkZWwpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICBkZWwgPSBudWxsOwotCi0gICAgaWYgKGRlbCAhPSBudWxsICYmIHNwYWNlRGVsICE9IG51bGwpCi0gICAgewotICAgICAgYWxsRGVsID0gbmV3IGNoYXJbZGVsLmxlbmd0aCArIHNwYWNlRGVsLmxlbmd0aF07Ci0gICAgICBTeXN0ZW0uYXJyYXljb3B5KGRlbCwgMCwgYWxsRGVsLCAwLCBkZWwubGVuZ3RoKTsKLSAgICAgIFN5c3RlbS5hcnJheWNvcHkoc3BhY2VEZWwsIDAsIGFsbERlbCwgZGVsLmxlbmd0aCwgc3BhY2VEZWwubGVuZ3RoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZGVsICE9IG51bGwpCi0gICAgICBhbGxEZWwgPSBkZWw7Ci0gICAgZWxzZQotICAgICAgYWxsRGVsID0gc3BhY2VEZWw7Ci0KLSAgICBzb3J0KGFsbERlbCk7Ci0gIH0KLSAgLyoqCi0gICAqIFBhcnNlcyBzdHJpbmcuCi0gICAqIEByZXR1cm4gamF2YS51dGlsLkVudW1lcmF0aW9uCi0gICAqIEBwYXJhbSBzIGphdmEubGFuZy5TdHJpbmcKLSAgICovCi0gIHB1YmxpYyBqYXZhLnV0aWwuRW51bWVyYXRpb24gcGFyc2UoU3RyaW5nIHMpCi0gIHsKLSAgICBpZiAocyA9PSBudWxsKQotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiU3RyaW5nVG9rZW5pemVyIDogU3RyaW5nIGNhbm5vdCBiZSBOVUxMIik7Ci0KLSAgICByZXR1cm4gbmV3IFN0cmluZ1Rva2VuaXplckVudW1lcmF0aW9uKHMudG9DaGFyQXJyYXkoKSk7Ci0gIH0KLQotICAvKioKLSAgICogQmluYXJ5IHNlYXJjaC4KLSAgICogQHJldHVybiBib29sZWFuCi0gICAqIEBwYXJhbSBjIGNoYXIKLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gY29udGFpbihjaGFyIGMsIGNoYXJbXSBhKQotICB7Ci0gICAgaWYgKGEgPT0gbnVsbCkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGludCBsID0gMCwgciA9IGEubGVuZ3RoIC0gMSwgY2VudGVyOwotICAgIHdoaWxlIChsIDwgcikKLSAgICB7Ci0gICAgICBjZW50ZXIgPSAobCArIHIpIC8gMjsKLSAgICAgIGlmIChjID4gYVtjZW50ZXJdKQotICAgICAgICBsID0gY2VudGVyICsgMTsKLSAgICAgIGVsc2UKLSAgICAgICAgciA9IGNlbnRlcjsKLSAgICB9Ci0KLSAgICByZXR1cm4gYVtsXSA9PSBjOwotICB9Ci0gIC8qKgotICAgKiBIZWFwIHNvcnQKLSAgICogQHBhcmFtIGMgY2hhcltdCi0gICAqLwotICBzdGF0aWMgcHJpdmF0ZSB2b2lkIHNvcnQoY2hhcltdIGMpCi0gIHsKLSAgICBpZiAoYyAhPSBudWxsKQotICAgIHsKLSAgICAgIGludCBqLCBrOwotICAgICAgY2hhciBjaTsKLQotICAgICAgLy8gcHVzaCBoZWFwCi0gICAgICBmb3IgKGludCBpID0gMTsgaSA8IGMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIGogPSAoKGsgPSBpKSAtIDEpIC8gMjsKLSAgICAgICAgY2kgPSBjW2ldOwotICAgICAgICB3aGlsZSAoayA+IDAgJiYgY1tqXSA8IGNpKQotICAgICAgICB7Ci0gICAgICAgICAgY1trXSA9IGNbal07Ci0gICAgICAgICAgaiA9ICgoayA9IGopIC0gMSkgLyAyOwotICAgICAgICB9Ci0gICAgICAgIGNba10gPSBjaTsKLSAgICAgIH0KLQotICAgICAgLy8gcG9wIGhlYXAKLSAgICAgIGZvciAoaW50IGkgPSBjLmxlbmd0aCAtIDE7IGkgPiAwOyBpLS0pCi0gICAgICB7Ci0gICAgICAgIGogPSAyOwotICAgICAgICBrID0gMDsKLSAgICAgICAgY2kgPSBjWzBdOwotICAgICAgICB3aGlsZSAoaiA8PSBpKQotICAgICAgICB7Ci0gICAgICAgICAgY1trXSA9IChjW2ogLSAxXSA+IGNbal0pID8gY1stLWpdIDogY1tqXTsKLSAgICAgICAgICBqID0gKChrID0gaikgKyAxKSAqIDI7Ci0gICAgICAgIH0KLSAgICAgICAgY1trXSA9IGNbaV07Ci0gICAgICAgIGNbaV0gPSBjaTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvVGVzdFV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL1Rlc3RVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDdjMWQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvVGVzdFV0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWw7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuVG9vbEluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuY29tbW9uLkFkZFN0eWxlU2hlZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0vKioKLSAqIFRlc3QgVXRpbGl0eSBjbGFzcy4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIFRlc3RVdGlscwotewotICAvKioKLSAgICogRm9ybWF0IGEgc3R5bGUgc2hlZXQgZGVjbGFyYXRpb24gZnJvbSB0aGUgYWRkU3R5bGVTaGVldCBlbGVtZW50LgotICAgKiBAcGFyYW0gZWxlbWVudCBhbiBFbGVtZW50IG9iamVjdC4KLSAgICogQHBhcmFtIGFkZFN0eWxlU2hlZXQgYW4gYWRkU3R5bGVTaGVldCBlbGVtZW50LgotICAgKiBAcGFyYW0gZGVmYXVsdEhyZWYgZGVmYXVsdCBocmVmLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCB2b2lkIHBhcnNlQWRkU3R5bGVTaGVldCgKLSAgICBFbGVtZW50IGVsZW1lbnQsCi0gICAgQWRkU3R5bGVTaGVldCBhZGRTdHlsZVNoZWV0LAotICAgIFN0cmluZyBkZWZhdWx0SHJlZikKLSAgewotICAgIGFkZFN0eWxlU2hlZXQuc2V0SHJlZigKLSAgICAgIFhNTFV0aWxzLmdldEF0dHJpYnV0ZVZhbHVlKGVsZW1lbnQsIFdTSUNvbnN0YW50cy5BVFRSX0hSRUYsIGRlZmF1bHRIcmVmKSk7Ci0gICAgYWRkU3R5bGVTaGVldC5zZXRUeXBlKAotICAgICAgWE1MVXRpbHMuZ2V0QXR0cmlidXRlVmFsdWUoCi0gICAgICAgIGVsZW1lbnQsCi0gICAgICAgIFdTSUNvbnN0YW50cy5BVFRSX1RZUEUsCi0gICAgICAgIFdTSUNvbnN0YW50cy5ERUZBVUxUX1hTTF9UWVBFKSk7Ci0gICAgYWRkU3R5bGVTaGVldC5zZXRUaXRsZSgKLSAgICAgIFhNTFV0aWxzLmdldEF0dHJpYnV0ZVZhbHVlKGVsZW1lbnQsIFdTSUNvbnN0YW50cy5BVFRSX1RJVExFKSk7Ci0gICAgYWRkU3R5bGVTaGVldC5zZXRNZWRpYSgKLSAgICAgIFhNTFV0aWxzLmdldEF0dHJpYnV0ZVZhbHVlKGVsZW1lbnQsIFdTSUNvbnN0YW50cy5BVFRSX01FRElBKSk7Ci0gICAgYWRkU3R5bGVTaGVldC5zZXRDaGFyc2V0KAotICAgICAgWE1MVXRpbHMuZ2V0QXR0cmlidXRlVmFsdWUoZWxlbWVudCwgV1NJQ29uc3RhbnRzLkFUVFJfQ0hBUlNFVCkpOwotICAgIGFkZFN0eWxlU2hlZXQuc2V0QWx0ZXJuYXRlKAotICAgICAgWE1MVXRpbHMuZ2V0QXR0cmlidXRlVmFsdWUoZWxlbWVudCwgV1NJQ29uc3RhbnRzLkFUVFJfQUxURVJOQVRFKSk7Ci0gIH0KLQotICAvKioKLSAgICogRGlzcGxheSB0b29sIG5hbWUgYW5kIGNvcHlyaWdodCBub3RpY2UuCi0gICAqIEBwYXJhbSB0b29sSW5mbyBhIFRvb2xJbmZvIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBwcmludFRvb2xJbmZvKFRvb2xJbmZvIHRvb2xJbmZvKQotICB7Ci0gICAgU3lzdGVtLm91dC5wcmludGxuKAotICAgICAgIkNvbmZvcm1hbmNlICIKLSAgICAgICAgKyB0b29sSW5mby5nZXROYW1lKCkKLSAgICAgICAgKyAiIFRvb2wiCi0gICAgICAgICsgIiwgVmVyc2lvbjogIgotICAgICAgICArIHRvb2xJbmZvLmdldFZlcnNpb24oKQotICAgICAgICArICIsIFJlbGVhc2UgRGF0ZTogIgotICAgICAgICArIHRvb2xJbmZvLmdldFJlbGVhc2VEYXRlKCkpOwotICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbihXU0lDb25zdGFudHMuQ09QWVJJR0hUKTsKLSAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oIiAiKTsKLSAgfQotCi0gIC8qKiAKLSAgICogR2V0IFhNTCBjb21tZW50IHVzZWQgaW4gbG9nIGFuZCByZXBvcnQgZmlsZS4KLSAgICogQHJldHVybiBYTUwgY29tbWVudCB1c2VkIGluIGxvZyBhbmQgcmVwb3J0IGZpbGUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRYTUxDb21tZW50KCkKLSAgewotICAgIFN0cmluZyBjb21tZW50ID0gbnVsbDsKLSAgICBTdHJpbmcgcmVhZExpbmUgPSBudWxsOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gQWRkIHJlcXVpcmVkIGNvbW1lbnRzIChjb3B5cmlnaHQsIGV0Yy4pCi0gICAgICBCdWZmZXJlZFJlYWRlciBidWZmZXJlZFJlYWRlciA9Ci0gICAgICAgIG5ldyBCdWZmZXJlZFJlYWRlcigKLSAgICAgICAgICBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoCi0gICAgICAgICAgICBVdGlscy5nZXRJbnB1dFN0cmVhbShXU0lDb25zdGFudHMuQ09NTUVOVFNfRklMRSkpKTsKLQotICAgICAgLy8gSW5pdGlhbGl6ZSBzdHJpbmcgdG8gZW1wdHkgc3RyaW5nCi0gICAgICBjb21tZW50ID0gIiI7Ci0KLSAgICAgIHdoaWxlIChidWZmZXJlZFJlYWRlci5yZWFkeSgpKQotICAgICAgewotICAgICAgICBpZiAoKHJlYWRMaW5lID0gYnVmZmVyZWRSZWFkZXIucmVhZExpbmUoKSkgIT0gbnVsbCkKLSAgICAgICAgICBjb21tZW50ICs9IHJlYWRMaW5lICsgV1NJQ29uc3RhbnRzLkxJTkVfU0VQQVJBVE9SOwotICAgICAgfQotICAgIH0KLQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBJZ25vcmUgZXhjZXB0aW9uIGFuZCBqdXN0IHJldHVybiBudWxsCi0gICAgfQotCi0gICAgcmV0dXJuIGNvbW1lbnQ7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHNjaGVtYSBsb2NhdGlvbiBmb3IgWE1MIHNjaGVtYS4KLSAgICogQHJldHVybiBzY2hlbWEgbG9jYXRpb24gZm9yIFhNTCBzY2hlbWEuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRYTUxTY2hlbWFMb2NhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gZ2V0U2NoZW1hTG9jYXRpb24oCi0gICAgICBXU0lQcm9wZXJ0aWVzLlBST1BfWE1MX1NDSEVNQSwKLSAgICAgIFdTSVByb3BlcnRpZXMuREVGX1hNTF9TQ0hFTUEpOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBTT0FQIHNjaGVtYSBsb2NhdGlvbi4KLSAgICogQHJldHVybiBTT0FQIHNjaGVtYSBsb2NhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFNPQVBTY2hlbWFMb2NhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gZ2V0U2NoZW1hTG9jYXRpb24oCi0gICAgICBXU0lQcm9wZXJ0aWVzLlBST1BfU09BUF9TQ0hFTUEsCi0gICAgICBXU0lQcm9wZXJ0aWVzLkRFRl9TT0FQX1NDSEVNQSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IFdTREwgc2NoZW1hIGxvY2F0aW9uLgotICAgKiBAcmV0dXJuIFdTREwgc2NoZW1hIGxvY2F0aW9uLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0V1NETFNjaGVtYUxvY2F0aW9uKCkKLSAgewotICAgIHJldHVybiBnZXRTY2hlbWFMb2NhdGlvbigKLSAgICAgIFdTSVByb3BlcnRpZXMuUFJPUF9XU0RMX1NDSEVNQSwKLSAgICAgIFdTSVByb3BlcnRpZXMuREVGX1dTRExfU0NIRU1BKTsKLSAgfQotCi0gIC8qKgotICAqIEdldCBXU0RMIFNPQVAgc2NoZW1hIGxvY2F0aW9uLgotICAqIEByZXR1cm4gV1NETCBTT0FQIHNjaGVtYSBsb2NhdGlvbi4KLSAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0V1NETFNPQVBTY2hlbWFMb2NhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gZ2V0U2NoZW1hTG9jYXRpb24oCi0gICAgICBXU0lQcm9wZXJ0aWVzLlBST1BfV1NETF9TT0FQX1NDSEVNQSwKLSAgICAgIFdTSVByb3BlcnRpZXMuREVGX1dTRExfU09BUF9TQ0hFTUEpOwotICB9Ci0gIC8qKgotICAgKiBHZXQgV1NETCBzY2hlbWEgbG9jYXRpb24uCi0gICAqIEByZXR1cm4gV1NETCBzY2hlbWEgbG9jYXRpb24uCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U2NoZW1hTG9jYXRpb24oCi0gICAgU3RyaW5nIHByb3BlcnR5TmFtZSwKLSAgICBTdHJpbmcgZGVmYXVsdFZhbHVlKQotICB7Ci0gICAgLy9TdHJpbmcgc2NoZW1hTG9jYXRpb24gPSBudWxsOwotCi0gICAgLy8gR2V0IHRoZSB3c2kuaG9tZSBzeXN0ZW0gcHJvcGVydHkKLSAgICAvL1N0cmluZyB3c2lIb21lID0gU3lzdGVtLmdldFByb3BlcnR5KFdTSVByb3BlcnRpZXMuUFJPUF9XU0lfSE9NRSk7Ci0gICAgLy9TdHJpbmcgZmlsZUxvY2F0aW9uID0gV1NJUHJvcGVydGllcy5nZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIGRlZmF1bHRWYWx1ZSk7Ci0gICAgLy8KLSAgICAvLyBJZiB0aGUgZmlsZSBsb2NhdGlvbiBpcyBzcGVjaWZpZWQgaW4gdGhlIHdzaS5wcm9wZXJ0aWVzIGZpbGUgdGhlbiBidWlsZCBsb2NhdGlvbgotICAgIC8vaWYgKGZpbGVMb2NhdGlvbiAhPSBudWxsKQotICAgIC8vewotICAgIC8vIElmIHdzaS5ob21lIGlzIHNldCwgdGhlbiB1c2UgaXQKLSAgICAvLyAgaWYgKHdzaUhvbWUgIT0gbnVsbCkKLSAgICAvLyAgewotICAgIC8vICAgICBzY2hlbWFMb2NhdGlvbiA9IHdzaUhvbWU7Ci0gICAgLy8gICB9Ci0gICAgLy8gICBpZiAoc2NoZW1hTG9jYXRpb24gPT0gbnVsbCkKLSAgICAvLyAgIHsKLSAgICAvLyAgICBzY2hlbWFMb2NhdGlvbiA9IGZpbGVMb2NhdGlvbjsKLSAgICAvLyAgfQotICAgIC8vICBlbHNlCi0gICAgLy8gIHsKLSAgICAvLyAgIGlmICghc2NoZW1hTG9jYXRpb24uZW5kc1dpdGgoIi8iKSkKLSAgICAvLyAgICB7Ci0gICAgLy8gICAgIHNjaGVtYUxvY2F0aW9uICs9ICIvIjsKLSAgICAvLyAgIH0KLSAgICAvLwotICAgIC8vICAgIHNjaGVtYUxvY2F0aW9uICs9IGZpbGVMb2NhdGlvbjsKLSAgICAvLyAgfQotICAgIC8vIH0KLSAgICByZXR1cm4gZGVmYXVsdFZhbHVlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL1R5cGVzUmVnaXN0cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvVHlwZXNSZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YWZkYWI5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvVHlwZXNSZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTgxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0ZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5JbXBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5JbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5QYXJ0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBqYXZheC53c2RsLlR5cGVzOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5CYXNlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotCi0vKioKLSAqIFRoZSBjbGFzcyBleHRyYWN0cyBYU0Qgc2NoZW1hIGluZm9ybWF0aW9uIGZyb20gdGhlIGdpdmVuIFdTREwuCi0gKiAKLSAqIEBhdXRob3IgS3VsaWsKLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIFR5cGVzUmVnaXN0cnkgaW1wbGVtZW50cyBXU0lUYWcsIFdTRExWaXNpdG9yCi17Ci0gIExpc3Qgc2NoZW1hUHJvY2Vzc2VkTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuUGFydCwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KFBhcnQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuU2VydmljZSwgamF2YS5sYW5nLk9iamVjdCwgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KFNlcnZpY2Ugb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoVHlwZXMsIE9iamVjdCwKLSAgICogV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChUeXBlcyBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChPcGVyYXRpb24sIE9iamVjdCwKLSAgICogV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChPcGVyYXRpb24gb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoSW5wdXQsIE9iamVjdCwKLSAgICogV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChJbnB1dCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChPdXRwdXQsIE9iamVjdCwKLSAgICogV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChPdXRwdXQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoRmF1bHQsIE9iamVjdCwKLSAgICogV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChGYXVsdCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChCaW5kaW5nLCBPYmplY3QsCi0gICAqIFdTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoQmluZGluZyBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChCaW5kaW5nT3BlcmF0aW9uLCBPYmplY3QsCi0gICAqIFdTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgQmluZGluZ09wZXJhdGlvbiBvYmosCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoQmluZGluZ0lucHV0LCBPYmplY3QsCi0gICAqIFdTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoQmluZGluZ0lucHV0IG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KEJpbmRpbmdPdXRwdXQsIE9iamVjdCwKLSAgICogV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChCaW5kaW5nT3V0cHV0IG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KEJpbmRpbmdGYXVsdCwgT2JqZWN0LAotICAgKiBXU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KEJpbmRpbmdGYXVsdCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChFbGVtZW50LCBPYmplY3QsCi0gICAqIFdTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoRWxlbWVudCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChNZXNzYWdlLCBPYmplY3QsCi0gICAqIFdTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoTWVzc2FnZSBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChQb3J0LCBPYmplY3QsCi0gICAqIFdTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoUG9ydCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChQb3J0VHlwZSwgT2JqZWN0LAotICAgKiBXU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KFBvcnRUeXBlIG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KERlZmluaXRpb24sIE9iamVjdCwKLSAgICogV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChEZWZpbml0aW9uIG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KEV4dGVuc2liaWxpdHlFbGVtZW50LAotICAgKiBPYmplY3QsIFdTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgb2JqLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KFNPQVBCaW5kaW5nLCBPYmplY3QsCi0gICAqIFdTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoU09BUEJpbmRpbmcgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kud3NkbC50cmF2ZXJzYWwuV1NETFZpc2l0b3IjdmlzaXQoU09BUEJvZHksIE9iamVjdCwKLSAgICogV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChTT0FQQm9keSBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChTT0FQSGVhZGVyLCBPYmplY3QsCi0gICAqIFdTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoU09BUEhlYWRlciBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChTT0FQSGVhZGVyRmF1bHQsIE9iamVjdCwKLSAgICogV1NETFRyYXZlcnNhbENvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdCgKLSAgICBTT0FQSGVhZGVyRmF1bHQgb2JqLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KFNPQVBGYXVsdCwgT2JqZWN0LAotICAgKiBXU0RMVHJhdmVyc2FsQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KFNPQVBGYXVsdCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS53c2RsLnRyYXZlcnNhbC5XU0RMVmlzaXRvciN2aXNpdChTT0FQT3BlcmF0aW9uLCBPYmplY3QsCi0gICAqIFdTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoU09BUE9wZXJhdGlvbiBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICB9Ci0KLSAgcHJpdmF0ZSBNYXAgZWxlbWVudDJUeXBlID0gbmV3IEhhc2hNYXAoKTsKLSAgcHJpdmF0ZSBTZXQgZXh0ZW5kc0FycmF5ID0gbmV3IEhhc2hTZXQoKTsKLSAgcHJpdmF0ZSBTZXQgdXNlc1dzZGxBcnJheVR5cGUgPSBuZXcgSGFzaFNldCgpOwotCi0gIHByb3RlY3RlZCBCYXNlVmFsaWRhdG9yIGJhc2VWYWxpZGF0b3IgPSBudWxsOwotIAotICAvKioKLSAgICogQ29uc3RydWN0b3IgY3JlYXRlcyB0aGUgdHlwZXMgcmVnaXN0cnkuIGJ5IHRoZSBnaXZlbiBXU0RMIGRlZmluaXRpb24KLSAgICogb2JqZWN0LgotICAgKiAKLSAgICogQHBhcmFtIGRlZiBhIFdTREwgZGVmaW5pdGlvbi4KLSAgICogQHBhcmFtIGJhc2VWYWxpZGF0b3IgYSBiYXNlIHZhbGlkYXRvci4KLSAgICovCi0gIHB1YmxpYyBUeXBlc1JlZ2lzdHJ5KERlZmluaXRpb24gZGVmLCBCYXNlVmFsaWRhdG9yIGJhc2VWYWxpZGF0b3IpCi0gIHsKLSAgICB0aGlzLmJhc2VWYWxpZGF0b3IgPSBiYXNlVmFsaWRhdG9yOwotICAgIGlmIChkZWYgPT0gbnVsbCkKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkRlZmluaXRpb24gY2FuIG5vdCBiZSBudWxsIik7Ci0KLSAgICBXU0RMVHJhdmVyc2FsIHRyYXZlcnNhbCA9IG5ldyBXU0RMVHJhdmVyc2FsKCk7Ci0gICAgLy9WaXNpdG9yQWRhcHRvci5hZGFwdCh0aGlzKTsKLSAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcih0aGlzKTsKLSAgICB0cmF2ZXJzYWwudmlzaXRJbXBvcnQodHJ1ZSk7Ci0gICAgCi0gICAgcHJvY2Vzc1R5cGVzKGRlZi5nZXRUeXBlcygpLCBkZWYuZ2V0RG9jdW1lbnRCYXNlVVJJKCkpOwotICAgIHRyYXZlcnNhbC50cmF2ZXJzZShkZWYpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGNyZWF0ZXMgdGhlIHR5cGVzIHJlZ2lzdHJ5IGJ5IGdpdmVuIFdTREwgdHlwZXMgb2JqZWN0IGFuZAotICAgKiBsb2NhdGlvbiBjb250ZXh0IFVSSS4KLSAgICogQHBhcmFtIHR5cGVzIFdTREwgdHlwZXMgb2JqZWN0LgotICAgKiBAcGFyYW0gY29udGV4dCBsb2NhdGlvbiBjb250ZXh0IFVSSS4KLSAgICogQHBhcmFtIGJhc2VWYWxpZGF0b3IgYSBiYXNlIHZhbGlkYXRvci4KLSAgICovCi0gIHB1YmxpYyBUeXBlc1JlZ2lzdHJ5KAotICAgIFR5cGVzIHR5cGVzLAotICAgIFN0cmluZyBjb250ZXh0LAotICAgIEJhc2VWYWxpZGF0b3IgYmFzZVZhbGlkYXRvcikKLSAgewotICAgIHRoaXMuYmFzZVZhbGlkYXRvciA9IGJhc2VWYWxpZGF0b3I7Ci0gICAgcHJvY2Vzc1R5cGVzKHR5cGVzLCBjb250ZXh0KTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHJldHVybnMgdHlwZSdzIHFuYW1lIGJ5IGdpdmVuIGVsZW1lbnQncyBxbmFtZS4KLSAgICogQHBhcmFtIGVsZW1lbnROYW1lIGEgcXVhbGlmaWVkIGVsZW1lbnQgbmFtZS4KLSAgICogQHJldHVybiB0eXBlJ3MgcW5hbWUgYnkgZ2l2ZW4gZWxlbWVudCdzIHFuYW1lLgotICAgKi8KLSAgcHVibGljIFFOYW1lIGdldFR5cGUoUU5hbWUgZWxlbWVudE5hbWUpCi0gIHsKLSAgICByZXR1cm4gKFFOYW1lKSBlbGVtZW50MlR5cGUuZ2V0KGVsZW1lbnROYW1lKTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHJldHVybnMgc2V0IG9mIHR5cGVzIHdoaWNoIGlzIGFycmF5IGF0dHJpYnV0ZS4KLSAgICogQHJldHVybiBzZXQgb2YgdHlwZXMgd2hpY2ggaXMgYXJyYXkgYXR0cmlidXRlLgotICAgKi8KLSAgcHVibGljIFNldCBnZXRBcnJheVR5cGVzKCkKLSAgewotICAgIFNldCBzID0gbmV3IEhhc2hTZXQoKTsKLSAgICBzLmFkZEFsbCgoQ29sbGVjdGlvbikgdXNlc1dzZGxBcnJheVR5cGUpOwotICAgIHMuYWRkQWxsKChDb2xsZWN0aW9uKSBleHRlbmRzQXJyYXkpOwotICAgIHJldHVybiBzOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgcmV0dXJucyBzZXQgb2YgZWxlbWVudHMgZGVmaW5lZCBpbiB0eXBlcyBlbGVtZW50LgotICAgKiBAcmV0dXJuIHNldCBvZiBlbGVtZW50cyBkZWZpbmVkIGluIHR5cGVzIGVsZW1lbnQuCi0gICAqLwotICBwdWJsaWMgU2V0IGdldEVsZW1lbnRMaXN0KCkKLSAgewotICAgIHJldHVybiB0aGlzLmVsZW1lbnQyVHlwZS5rZXlTZXQoKTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gdHlwZSBkZWNsYXJlcyB3c2RsOmFycmF5VHlwZQotICAgKiBhdHRyaWJ1dGUgd2l0aGluIGRlY2xhcmF0aW9uLgotICAgKiBAcGFyYW0gdHlwZSBhIHR5cGUuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgZ2l2ZW4gdHlwZSBkZWNsYXJlcyB3c2RsOmFycmF5VHlwZQotICAgKiBhdHRyaWJ1dGUgd2l0aGluIGRlY2xhcmF0aW9uLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNVc2VzV1NETEFycmF5VHlwZShRTmFtZSB0eXBlKQotICB7Ci0gICAgcmV0dXJuIHVzZXNXc2RsQXJyYXlUeXBlLmNvbnRhaW5zKHR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgcmV0dXJucyB0cnVlIGlmIGdpdmVuIHR5cGUgZXh0ZW5kcyBzb2FwZW5jOkFycmF5IHR5cGUuCi0gICAqIEBwYXJhbSB0eXBlIGEgdHlwZS4KLSAgICogQHJldHVybiB0cnVlIGlmIGdpdmVuIHR5cGUgZXh0ZW5kcyBzb2FwZW5jOkFycmF5IHR5cGUuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0V4dGVuZHNBcnJheShRTmFtZSB0eXBlKQotICB7Ci0gICAgcmV0dXJuIGV4dGVuZHNBcnJheS5jb250YWlucyh0eXBlKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExWaXNpdG9yI3Zpc2l0KGphdmF4LndzZGwuSW1wb3J0LCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcud3NpLndzZGwudHJhdmVyc2FsLldTRExUcmF2ZXJzYWxDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoSW1wb3J0IGltLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBpZiAoaW0uZ2V0RGVmaW5pdGlvbigpICE9IG51bGwpCi0gICAgICBwcm9jZXNzV1NETChpbS5nZXREZWZpbml0aW9uKCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIEludGVybmFsIG1ldGhvZCBwcm9jZXNzZXMgV1NETCBkZWZpbml0aW9uLgotICAgKiBAcGFyYW0gZGVmIGEgV1NETCBkZWZpbml0aW9uLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHByb2Nlc3NXU0RMKERlZmluaXRpb24gZGVmKQotICB7Ci0gICAgaWYgKGRlZi5nZXRUeXBlcygpICE9IG51bGwpCi0gICAgICBwcm9jZXNzVHlwZXMoZGVmLmdldFR5cGVzKCksIGRlZi5nZXREb2N1bWVudEJhc2VVUkkoKSk7Ci0gIH0KLQotICAvKioKLSAgICogSW50ZXJuYWwgbWV0aG9kIHByb2Nlc3NlcyBXU0RMIHR5cGVzLgotICAgKiBAcGFyYW0gdHlwZXMgV1NETCB0eXBlcy4KLSAgICogQHBhcmFtIGNvbnRleHQgYSBjb250ZXh0LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHByb2Nlc3NUeXBlcyhUeXBlcyB0eXBlcywgU3RyaW5nIGNvbnRleHQpCi0gIHsKLSAgICBpZiAodHlwZXMgPT0gbnVsbCkKLSAgICAgIHJldHVybjsKLSAgICBMaXN0IGV4dHMgPSB0eXBlcy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICBpZiAoZXh0cyAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ID0gZXh0cy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZWwgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGl0Lm5leHQoKTsKLSAgICAgICAgaWYgKGVsIGluc3RhbmNlb2YgVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KQotICAgICAgICAgIHNlYXJjaEZvclNjaGVtYSgKLSAgICAgICAgICAgICgoVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KSBlbCkuZ2V0RWxlbWVudCgpLAotICAgICAgICAgICAgY29udGV4dCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEludGVybmFsIG1ldGhvZCBzZWFyY2hlcyBYU0Qgc2NoZW1hIGRlY2xhcmF0aW9uIGFuZCBYU0QgaW1wb3J0Ci0gICAqIHN0YXRlbWVudHMuCi0gICAqIEBwYXJhbSBuCi0gICAqIEBwYXJhbSBjb250ZXh0Ci0gICAqLwotICBwcml2YXRlIHZvaWQgc2VhcmNoRm9yU2NoZW1hKE5vZGUgbiwgU3RyaW5nIGNvbnRleHQpCi0gIHsKLSAgICB3aGlsZSAobiAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIHNlYXJjaGVzIGZvciB4c2Q6aW1wb3J0IGVsZW1lbnQKLSAgICAgIGlmIChOb2RlLkVMRU1FTlRfTk9ERSA9PSBuLmdldE5vZGVUeXBlKCkpCi0gICAgICB7Ci0gICAgICAgIC8vIGlmIHhzZDpzY2hlbWEgZWxlbWVudCBpcyBmb3VuZCAtPiBwcm9jZXNzIHNjaGVtYQotICAgICAgICBpZiAoWE1MVXRpbHMuZXF1YWxzKG4sIEVMRU1fWFNEX1NDSEVNQSkpCi0gICAgICAgICAgcHJvY2Vzc1NjaGVtYShuLCBjb250ZXh0LCBuZXcgQXJyYXlMaXN0KCkpOwotICAgICAgfQotICAgICAgbiA9IG4uZ2V0TmV4dFNpYmxpbmcoKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogSW50ZXJuYWwgbWV0aG9kIGxvYWRzIFhTRCBzY2hlbWEgYnkgdXNpbmcgc2NoZW1hIGxvY2F0aW9uIGFuZAotICAgKiBsb2NhdGlvbiBjb250ZXh0LgotICAgKiBAcGFyYW0gaW1wb3J0Tm9kZQotICAgKiBAcGFyYW0gY29udGV4dAotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGxvYWRTY2hlbWEoTm9kZSBpbXBvcnROb2RlLCBTdHJpbmcgY29udGV4dCwgTGlzdCBwcm9jZXNzZWRTY2hlbWFzKQotICB7Ci0gICAgRWxlbWVudCBpbSA9IChFbGVtZW50KSBpbXBvcnROb2RlOwotICAgIEF0dHIgc2NoZW1hTG9jYXRpb24gPSBYTUxVdGlscy5nZXRBdHRyaWJ1dGUoaW0sIEFUVFJfWFNEX1NDSEVNQUxPQ0FUSU9OKTsKLQkKLSAgICAvLyB0cnkgdG8gcGFyc2UgaW1wb3J0ZWQgWFNECi0gICAgaWYgKHNjaGVtYUxvY2F0aW9uICE9IG51bGwgJiYgc2NoZW1hTG9jYXRpb24uZ2V0VmFsdWUoKSAhPSBudWxsKQotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgCVN0cmluZyB1cmxTdHJpbmcgPSBYTUxVdGlscy5jcmVhdGVVUkxTdHJpbmcoc2NoZW1hTG9jYXRpb24uZ2V0VmFsdWUoKSwgY29udGV4dCk7Ci0gICAgCWlmICghc2NoZW1hUHJvY2Vzc2VkTGlzdC5jb250YWlucyh1cmxTdHJpbmcpKQotICAgIAl7Ci0gICAgICAgICAgLy8gaWYgYW55IGVycm9yIG9yIHJvb3QgZWxlbWVudCBpcyBub3QgWFNEIHNjaGVtYSAtPiBlcnJvcgotICAgICAgICAgIERvY3VtZW50IHNjaGVtYSA9Ci0gICAgICAgICAgICBiYXNlVmFsaWRhdG9yLnBhcnNlWE1MRG9jdW1lbnRVUkwoCi0gICAgICAgICAgICAgIHNjaGVtYUxvY2F0aW9uLmdldFZhbHVlKCksCi0gICAgICAgICAgICAgIGNvbnRleHQsCi0gICAgICAgICAgICAgIG51bGwpOwotICAgICAgICAgIHNjaGVtYVByb2Nlc3NlZExpc3QuYWRkKHVybFN0cmluZyk7Ci0gICAgICAgICAgaWYgKFhNTFV0aWxzLmVxdWFscyhzY2hlbWEuZ2V0RG9jdW1lbnRFbGVtZW50KCksIEVMRU1fWFNEX1NDSEVNQSkpCi0gICAgICAgICAgICBwcm9jZXNzU2NoZW1hKAotICAgICAgICAgICAgICBzY2hlbWEuZ2V0RG9jdW1lbnRFbGVtZW50KCksCi0gICAgICAgICAgICAgIHVybFN0cmluZywgcHJvY2Vzc2VkU2NoZW1hcyk7Ci0gICAgCX0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICAgIHsKLSAgICAgICAgLy90LnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAvLyBub3RoaW5nLiBpdCdzIG5vdCBhIHNjaGVtYQotICAgICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEludGVybmFsIG1ldGhvZCBwcm9jZXNzZXMgWFNEIHNjaGVtYSBhbmQgcmV0cmlldmVzIHR5cGVzIGRlY2xhcmF0aW9uIGZyb20KLSAgICogaXQuCi0gICAqIEBwYXJhbSBzY2hlbWEKLSAgICogQHBhcmFtIGNvbnRleHQKLSAgICovCi0gIHByaXZhdGUgdm9pZCBwcm9jZXNzU2NoZW1hKE5vZGUgc2NoZW1hLCBTdHJpbmcgY29udGV4dCwgTGlzdCBwcm9jZXNzZWRTY2hlbWFzKQotICB7Ci0JaWYgKChzY2hlbWEgIT0gbnVsbCkgJiYgKCFwcm9jZXNzZWRTY2hlbWFzLmNvbnRhaW5zKHNjaGVtYSkpKQotCXsKLQkgIHByb2Nlc3NlZFNjaGVtYXMuYWRkKHNjaGVtYSk7Ci0gICAgICBBdHRyIGEgPSBYTUxVdGlscy5nZXRBdHRyaWJ1dGUoKEVsZW1lbnQpIHNjaGVtYSwgQVRUUl9YU0RfVEFSR0VUTkFNRVNQQUNFKTsKLSAgICAgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSAoYSAhPSBudWxsKSA/IGEuZ2V0VmFsdWUoKSA6ICIiOwotICAgICAgLy8gaXRlcmF0ZSBzY2hlbWEKLSAgICAgIE5vZGUgbiA9IHNjaGVtYS5nZXRGaXJzdENoaWxkKCk7Ci0gICAgICAvLyAhISB3ZSBzdXBwb3NlIHRoYXQgeHNkOmltcG9ydCBlbGVtZW50IGlzIG9jY3VyZWQgb25seSB3aXRoaW4geHNkOnNjaGVtYSBlbGVtZW50ICAgICAgICAKLSAgICAgIHdoaWxlIChuICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGlmIChOb2RlLkVMRU1FTlRfTk9ERSA9PSBuLmdldE5vZGVUeXBlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoWE1MVXRpbHMuZXF1YWxzKG4sIEVMRU1fWFNEX0VMRU1FTlQpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIEVsZW1lbnQgZWwgPSAoRWxlbWVudCkgbjsKLSAgICAgICAgICAgIGEgPSBYTUxVdGlscy5nZXRBdHRyaWJ1dGUoZWwsIEFUVFJfWFNEX05BTUUpOwotICAgICAgICAgICAgUU5hbWUgZWxlbWVudCA9Ci0gICAgICAgICAgICAgIG5ldyBRTmFtZSh0YXJnZXROYW1lc3BhY2UsIChhICE9IG51bGwpID8gYS5nZXRWYWx1ZSgpIDogIiIpOwotCi0gICAgICAgICAgICBhID0gWE1MVXRpbHMuZ2V0QXR0cmlidXRlKGVsLCBBVFRSX1hTRF9UWVBFKTsKLSAgICAgICAgICAgIFFOYW1lIHR5cGUgPSBudWxsOwotICAgICAgICAgICAgaWYgKGEgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIHQgPSBhLmdldFZhbHVlKCk7Ci0gICAgICAgICAgICAgIC8vIGlmIHR5cGUgY29udGFpbnMgJzonLCBpdCBtZWFucyB0aGF0IGl0IGNvbnRhaW5zIHFuYW1lCi0gICAgICAgICAgICAgIGludCBpID0gdC5pbmRleE9mKCc6Jyk7Ci0gICAgICAgICAgICAgIGlmIChpICE9IC0xKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHByZWZpeCA9IHQuc3Vic3RyaW5nKDAsIGkpOwotICAgICAgICAgICAgICAgIFN0cmluZyBuc1VSSSA9IFhNTFV0aWxzLmZpbmROYW1lc3BhY2VVUkkobiwgcHJlZml4KTsKLSAgICAgICAgICAgICAgICB0eXBlID0gbmV3IFFOYW1lKG5zVVJJLCB0LnN1YnN0cmluZyhpICsgMSkpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB0eXBlID0gbmV3IFFOYW1lKHRhcmdldE5hbWVzcGFjZSwgdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIC8vIHN1cHBvc2UgdGhhdCBlbGVtZW50IGRpcmVjdGx5IGNvbnRhaW5zIHR5cGUgZGVjbGFyYXRpb24KLSAgICAgICAgICAgICAgdHlwZSA9IGVsZW1lbnQ7Ci0gICAgICAgICAgICAgIGNoZWNrVHlwZShuLCB0eXBlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZWxlbWVudDJUeXBlLnB1dChlbGVtZW50LCB0eXBlKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZiAoWE1MVXRpbHMuZXF1YWxzKG4sIEVMRU1fWFNEX0lNUE9SVCkpCi0gICAgICAgICAgICBsb2FkU2NoZW1hKG4sIGNvbnRleHQsIHByb2Nlc3NlZFNjaGVtYXMpOwotICAgICAgICAgIGVsc2UgaWYgKFhNTFV0aWxzLmVxdWFscyhuLCBFTEVNX1hTRF9JTkNMVURFKSkKLSAgICAgICAgICAgIGxvYWRTY2hlbWEobiwgY29udGV4dCwgcHJvY2Vzc2VkU2NoZW1hcyk7Ci0gICAgICAgICAgZWxzZSBpZiAoWE1MVXRpbHMuZXF1YWxzKG4sIEVMRU1fWFNEX0NPTVBMRVhUWVBFKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBFbGVtZW50IGVsID0gKEVsZW1lbnQpIG47Ci0gICAgICAgICAgICBhID0gWE1MVXRpbHMuZ2V0QXR0cmlidXRlKGVsLCBBVFRSX1hTRF9OQU1FKTsKLSAgICAgICAgICAgIFFOYW1lIHR5cGUgPQotICAgICAgICAgICAgICBuZXcgUU5hbWUodGFyZ2V0TmFtZXNwYWNlLCAoYSAhPSBudWxsKSA/IGEuZ2V0VmFsdWUoKSA6ICIiKTsKLSAgICAgICAgICAgIGNoZWNrVHlwZShuLCB0eXBlKTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgfQotCi0gICAgICAgIG4gPSBuLmdldE5leHRTaWJsaW5nKCk7Ci0gICAgICB9Ci0JfQotICB9Ci0KLSAgLyoqCi0gICAqIEludGVybmFsIG1ldGhvZCBjaGVja3Mgd2hldGhlciBzcGVjaWZpZWQgdHlwZSBoYXMgV1NETCBhcnJheSB0eXBlCi0gICAqIGF0dHJpYnV0ZSBpbiB0aGUgWFNEIGRlY2xhcmF0aW9uLgotICAgKiBAcGFyYW0gbgotICAgKiBAcGFyYW0gbmFtZQotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGNoZWNrVHlwZShOb2RlIG4sIFFOYW1lIG5hbWUpCi0gIHsKLSAgICB3aGlsZSAobiAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChOb2RlLkVMRU1FTlRfTk9ERSA9PSBuLmdldE5vZGVUeXBlKCkpCi0gICAgICB7Ci0gICAgICAgIC8vIGNoZWNrIHN1Y2ggc2VudGVuY2UKLSAgICAgICAgLy8gICAgICAgICAgICAgIHhzZDphdHRyaWJ1dGUgcmVmPSJzb2FwZW5jOmFycmF5VHlwZSIgd3NkbDphcnJheVR5cGU9InRuczpNeUFycmF5MlR5cGVbXSIvPgotICAgICAgICBpZiAoWE1MVXRpbHMuZXF1YWxzKG4sIEVMRU1fWFNEX0FUVFJJQlVURSkpCi0gICAgICAgIHsKLSAgICAgICAgICBBdHRyIGEgPSBYTUxVdGlscy5nZXRBdHRyaWJ1dGUoKEVsZW1lbnQpIG4sIEFUVFJfV1NETF9BUlJBWVRZUEUpOwotICAgICAgICAgIGlmIChhICE9IG51bGwpCi0gICAgICAgICAgICB1c2VzV3NkbEFycmF5VHlwZS5hZGQobmFtZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyByZXRyaWV2ZSBiYXNlIGF0dHJpYnV0ZSBtYXkgYmUgZnJvbSByZXN0cmljdGlvbiBvciBleHRlbnNpb24KLSAgICAgICAgQXR0ciBhID0gWE1MVXRpbHMuZ2V0QXR0cmlidXRlKChFbGVtZW50KSBuLCBBVFRSX1hTRF9CQVNFKTsKLSAgICAgICAgaWYgKGEgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBiYXNlID0gYS5nZXRWYWx1ZSgpOwotICAgICAgICAgIGludCBpID0gYmFzZS5pbmRleE9mKCI6Iik7Ci0gICAgICAgICAgaWYgKGkgIT0gLTEpCi0gICAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIHByZWZpeCA9IGJhc2Uuc3Vic3RyaW5nKDAsIGkpOwotICAgICAgICAgICAgU3RyaW5nIGxvY2FsID0gYmFzZS5zdWJzdHJpbmcoaSArIDEpOwotICAgICAgICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IFhNTFV0aWxzLmZpbmROYW1lc3BhY2VVUkkobiwgcHJlZml4KTsKLSAgICAgICAgICAgIGlmIChTT0FQRU5DX0FSUkFZLmVxdWFscyhuZXcgUU5hbWUobmFtZXNwYWNlLCBsb2NhbCkpKQotICAgICAgICAgICAgICBleHRlbmRzQXJyYXkuYWRkKG5hbWUpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBjaGVja1R5cGUobi5nZXRGaXJzdENoaWxkKCksIG5hbWUpOwotICAgICAgfQotICAgICAgbiA9IG4uZ2V0TmV4dFNpYmxpbmcoKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvVURESVV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL1VERElVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTJlMDY1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvVURESVV0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC5XU0RMRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnVkZGk0ai5VRERJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy51ZGRpNGouY2xpZW50LlVERElQcm94eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLmJpbmRpbmcuQmluZGluZ1RlbXBsYXRlOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUuYmluZGluZy5UTW9kZWxJbnN0YW5jZUluZm87Ci1pbXBvcnQgb3JnLnVkZGk0ai5kYXRhdHlwZS5idXNpbmVzcy5CdXNpbmVzc0VudGl0eTsKLWltcG9ydCBvcmcudWRkaTRqLmRhdGF0eXBlLnNlcnZpY2UuQnVzaW5lc3NTZXJ2aWNlOwotaW1wb3J0IG9yZy51ZGRpNGouZGF0YXR5cGUudG1vZGVsLlRNb2RlbDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLkJ1c2luZXNzRGV0YWlsOwotaW1wb3J0IG9yZy51ZGRpNGoucmVzcG9uc2UuU2VydmljZURldGFpbDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlRNb2RlbERldGFpbDsKLWltcG9ydCBvcmcudWRkaTRqLnJlc3BvbnNlLlRNb2RlbEluZm87Ci1pbXBvcnQgb3JnLnVkZGk0ai5yZXNwb25zZS5UTW9kZWxMaXN0OwotaW1wb3J0IG9yZy51ZGRpNGoudHJhbnNwb3J0LlRyYW5zcG9ydEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudWRkaTRqLnV0aWwuQ2F0ZWdvcnlCYWc7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkZpbmRRdWFsaWZpZXI7Ci1pbXBvcnQgb3JnLnVkZGk0ai51dGlsLkZpbmRRdWFsaWZpZXJzOwotaW1wb3J0IG9yZy51ZGRpNGoudXRpbC5LZXllZFJlZmVyZW5jZTsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIHByb3ZpZGUgc29tZSBzZXJ2aWNlIGZ1bmN0aW9ucyB1c2VkIGJ5IFVERElWYWxpZGF0b3IuCi0gKgotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbQotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgVURESVV0aWxzCi17Ci0gIHN0YXRpYyBwdWJsaWMgZmluYWwgRmluZFF1YWxpZmllcnMgRVhBQ1RfTkFNRV9NQVRDSF9RVUFMSUZJRVI7Ci0gIHN0YXRpYyB7Ci0gICAgVmVjdG9yIHZlY3RvciA9IG5ldyBWZWN0b3IoKTsKLSAgICBFWEFDVF9OQU1FX01BVENIX1FVQUxJRklFUiA9IG5ldyBGaW5kUXVhbGlmaWVycygpOwotICAgIHZlY3Rvci5hZGQobmV3IEZpbmRRdWFsaWZpZXIoRmluZFF1YWxpZmllci5leGFjdE5hbWVNYXRjaCkpOwotICAgIHZlY3Rvci5hZGQobmV3IEZpbmRRdWFsaWZpZXIoRmluZFF1YWxpZmllci5zb3J0QnlOYW1lQXNjKSk7Ci0gICAgRVhBQ1RfTkFNRV9NQVRDSF9RVUFMSUZJRVIuc2V0RmluZFF1YWxpZmllclZlY3Rvcih2ZWN0b3IpOwotICB9Ci0KLSAgc3RhdGljIGZpbmFsIFN0cmluZyBXU19JX0NPTkZPUk1BTkNFX1RNT0RFTF9OQU1FID0KLSAgICAid3MtaS1vcmc6Y29uZm9ybXNUbzoyMDAyXzEyIjsKLQotICBzdGF0aWMgcHJpdmF0ZSBIYXNodGFibGUgd3NpQ29uZm9ybWFuY2VUYWJsZSA9IG5ldyBIYXNodGFibGUoKTsKLQotICAvKioKLSAgICogR2V0cyBhIGJ1c2luZXNzIHNlcnZpY2UgYnkga2V5LgotICAgKiBAcGFyYW0gcHJveHkgIGEgVURESSBwcm94eS4KLSAgICogQHBhcmFtIGtleSAgICBhIGtleSB0byBhIGJ1c2luZXNzIHNlcnZpY2UuCi0gICAqIEByZXR1cm4gYSBidXNpbmVzcyBzZXJ2aWNlIHNwZWNpZmllZCBieSB0aGUgZ2l2ZW4ga2V5LgotICAgKiBAdGhyb3dzIFRyYW5zcG9ydEV4Y2VwdGlvbiBpZiBlcnJvciBvcmlnaW5hdGluZyB3aXRoaW4gdGhlIFNPQVAgdHJhbnNwb3J0LgotICAgKiBAdGhyb3dzIFVERElFeGNlcHRpb24gaWYgdGhlIHJldHVybiB2YWx1ZSBvZiBhIFVEREkgQVBJIGNhbm5vdCBpbmRpY2F0ZSBhbiBlcnJvciBjb25kaXRpb24uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIEJ1c2luZXNzU2VydmljZSBnZXRCdXNpbmVzc1NlcnZpY2VCeUtleSgKLSAgICBVRERJUHJveHkgcHJveHksCi0gICAgU3RyaW5nIGtleSkKLSAgICB0aHJvd3MgVHJhbnNwb3J0RXhjZXB0aW9uLCBVRERJRXhjZXB0aW9uCi0gIHsKLSAgICBCdXNpbmVzc1NlcnZpY2UgcmVzdWx0ID0gbnVsbDsKLQotICAgIFNlcnZpY2VEZXRhaWwgc2QgPSBwcm94eS5nZXRfc2VydmljZURldGFpbChrZXkpOwotCi0gICAgaWYgKHNkICE9IG51bGwpCi0gICAgewotICAgICAgVmVjdG9yIHYgPSBzZC5nZXRCdXNpbmVzc1NlcnZpY2VWZWN0b3IoKTsKLQotICAgICAgaWYgKHYgIT0gbnVsbCAmJiB2LnNpemUoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IChCdXNpbmVzc1NlcnZpY2UpIHYuZmlyc3RFbGVtZW50KCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIGJ1c2luZXNzIGVudGl0eSBieSBrZXkuCi0gICAqIEBwYXJhbSBwcm94eSAgYSBVRERJIHByb3h5LgotICAgKiBAcGFyYW0ga2V5ICAgIGEga2V5IHRvIGEgYnVzaW5lc3MgZW50aXkuCi0gICAqIEByZXR1cm4gYSBidXNpbmVzcyBlbnRpdHkgc3BlY2lmaWVkIGJ5IHRoZSBnaXZlbiBrZXkuCi0gICAqIEB0aHJvd3MgVHJhbnNwb3J0RXhjZXB0aW9uIGlmIGVycm9yIG9yaWdpbmF0aW5nIHdpdGhpbiB0aGUgU09BUCB0cmFuc3BvcnQuCi0gICAqIEB0aHJvd3MgVURESUV4Y2VwdGlvbiBpZiB0aGUgcmV0dXJuIHZhbHVlIG9mIGEgVURESSBBUEkgY2Fubm90IGluZGljYXRlIAotICAgKiAgICAgICAgIGFuIGVycm9yIGNvbmRpdGlvbi4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgQnVzaW5lc3NFbnRpdHkgZ2V0QnVzaW5lc3NCeUtleShVRERJUHJveHkgcHJveHksIFN0cmluZyBrZXkpCi0gICAgdGhyb3dzIFRyYW5zcG9ydEV4Y2VwdGlvbiwgVURESUV4Y2VwdGlvbgotICB7Ci0gICAgQnVzaW5lc3NFbnRpdHkgcmVzdWx0ID0gbnVsbDsKLQotICAgIEJ1c2luZXNzRGV0YWlsIGJkID0gcHJveHkuZ2V0X2J1c2luZXNzRGV0YWlsKGtleSk7Ci0KLSAgICBpZiAoYmQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBWZWN0b3IgdiA9IGJkLmdldEJ1c2luZXNzRW50aXR5VmVjdG9yKCk7Ci0KLSAgICAgIGlmICh2ICE9IG51bGwgJiYgdi5zaXplKCkgPiAwKQotICAgICAgewotICAgICAgICByZXN1bHQgPSAoQnVzaW5lc3NFbnRpdHkpIHYuZmlyc3RFbGVtZW50KCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIGEgdE1vZGVsIGJ5IGtleS4KLSAgICogQHBhcmFtIHByb3h5ICBhIFVEREkgcHJveHkuCi0gICAqIEBwYXJhbSBrZXkgICAgYSBrZXkgdG8gYSB0TW9kZWwuCi0gICAqIEByZXR1cm4gYSB0TW9kZWwgc3BlY2lmaWVkIGJ5IHRoZSBnaXZlbiBrZXkuCi0gICAqIEB0aHJvd3MgVHJhbnNwb3J0RXhjZXB0aW9uIGlmIGVycm9yIG9yaWdpbmF0aW5nIHdpdGhpbiB0aGUgU09BUCB0cmFuc3BvcnQuCi0gICAqIEB0aHJvd3MgVURESUV4Y2VwdGlvbiBpZiB0aGUgcmV0dXJuIHZhbHVlIG9mIGEgVURESSBBUEkgY2Fubm90IGluZGljYXRlIAotICAgKiAgICAgICAgIGFuIGVycm9yIGNvbmRpdGlvbi4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVE1vZGVsIGdldFRNb2RlbEJ5S2V5KFVERElQcm94eSBwcm94eSwgU3RyaW5nIGtleSkKLSAgewotICAgIFRNb2RlbCByZXN1bHQgPSBudWxsOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgVE1vZGVsRGV0YWlsIGJkID0gcHJveHkuZ2V0X3RNb2RlbERldGFpbChrZXkpOwotCi0gICAgICBpZiAoYmQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgVmVjdG9yIHYgPSBiZC5nZXRUTW9kZWxWZWN0b3IoKTsKLQotICAgICAgICBpZiAodiAhPSBudWxsICYmIHYuc2l6ZSgpID4gMCkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IChUTW9kZWwpIHYuZmlyc3RFbGVtZW50KCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKFRocm93YWJsZSBlKQotICAgIHsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgLyoqCi0gICAqIEdldHMga2V5IG9mIHRoZSBXU0kgQ29uZm9ybWFuY2UgdE1vZGVsLgotICAgKiBAcGFyYW0gcHJveHkgIGEgVURESSBwcm94eS4KLSAgICogQHJldHVybiB0aGUga2V5IG9mIHRoZSBXU0kgQ29uZm9ybWFuY2UgdE1vZGVsLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0V1NJQ29uZm9ybWFuY2VUTW9kZWxLZXkoVURESVByb3h5IHByb3h5KQotICB7Ci0gICAgaWYgKHByb3h5ID09IG51bGwpCi0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJVRERJIHByb3h5IGNhbm5vdCBiZSBudWxsLiIpOwotCi0gICAgU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0KLSAgICBpZiAod3NpQ29uZm9ybWFuY2VUYWJsZS5jb250YWluc0tleShwcm94eSkpCi0gICAgewotICAgICAgcmVzdWx0ID0gd3NpQ29uZm9ybWFuY2VUYWJsZS5nZXQocHJveHkpLnRvU3RyaW5nKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXN1bHQgPSBnZXRUTW9kZWxLZXlCeU5hbWUocHJveHksIFdTX0lfQ09ORk9STUFOQ0VfVE1PREVMX05BTUUpOwotCi0gICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIldTLUkgY29uZm9ybWFuY2UgdGF4b25vbXkgdE1vZGVsIHdhcyBub3QgZm91bmQiKTsKLSAgICAgIH0KLQotICAgICAgd3NpQ29uZm9ybWFuY2VUYWJsZS5wdXQocHJveHksIHJlc3VsdCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIGEgdE1vZGVsIGtleSBieSB0TW9kZWwgbmFtZS4KLSAgICogQHBhcmFtIHByb3h5ICBhIFVEREkgcHJveHkuCi0gICAqIEBwYXJhbSBuYW1lICAgYSB0TW9kZWwgbmFtZS4KLSAgICogQHJldHVybiBhIHRNb2RlbCBrZXkgc3BlY2lmaWVkIGJ5IHRoZSBnaXZlbiB0TW9kZWwgbmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFRNb2RlbEtleUJ5TmFtZShVRERJUHJveHkgcHJveHksIFN0cmluZyBuYW1lKQotICB7Ci0gICAgU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgVE1vZGVsTGlzdCBsaXN0ID0KLSAgICAgICAgcHJveHkuZmluZF90TW9kZWwobmFtZSwgbnVsbCwgbnVsbCwgRVhBQ1RfTkFNRV9NQVRDSF9RVUFMSUZJRVIsIDEpOwotICAgICAgVE1vZGVsSW5mbyBpbmZvID0KLSAgICAgICAgKFRNb2RlbEluZm8pIGxpc3QuZ2V0VE1vZGVsSW5mb3MoKS5nZXRUTW9kZWxJbmZvVmVjdG9yKCkuZmlyc3RFbGVtZW50KCk7Ci0gICAgICByZXN1bHQgPSBpbmZvLmdldFRNb2RlbEtleSgpOwotICAgIH0KLSAgICBjYXRjaCAoVGhyb3dhYmxlIGUpCi0gICAgewotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBiaW5kaW5nVGVtcGxhdGUuCi0gICAqIEBwYXJhbSBiaW5kaW5nVGVtcGxhdGUgIGEgQmluZGluZ1RlbXBsYXRlIG9iamVjdC4KLSAgICogQHJldHVybiBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBiaW5kaW5nVGVtcGxhdGUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBiaW5kaW5nVGVtcGxhdGVUb1N0cmluZyhCaW5kaW5nVGVtcGxhdGUgYmluZGluZ1RlbXBsYXRlKQotICB7Ci0gICAgU3RyaW5nIHJldHVyblN0cmluZyA9ICIiOwotCi0gICAgaWYgKGJpbmRpbmdUZW1wbGF0ZSA9PSBudWxsKQotICAgICAgcmV0dXJuU3RyaW5nID0gIm51bGwiOwotCi0gICAgZWxzZQotICAgIHsKLSAgICAgIHJldHVyblN0cmluZyA9Ci0gICAgICAgICJhY2Nlc3NQb2ludDogIgotICAgICAgICAgICsgKGJpbmRpbmdUZW1wbGF0ZS5nZXRBY2Nlc3NQb2ludCgpID09IG51bGwKLSAgICAgICAgICAgID8gIm51bGwiCi0gICAgICAgICAgICA6IGJpbmRpbmdUZW1wbGF0ZS5nZXRBY2Nlc3NQb2ludCgpLmdldFRleHQoKSk7Ci0KLSAgICAgIGlmIChiaW5kaW5nVGVtcGxhdGUuZ2V0VE1vZGVsSW5zdGFuY2VEZXRhaWxzKCkgPT0gbnVsbAotICAgICAgICB8fCBiaW5kaW5nVGVtcGxhdGUKLSAgICAgICAgICAuZ2V0VE1vZGVsSW5zdGFuY2VEZXRhaWxzKCkKLSAgICAgICAgICAuZ2V0VE1vZGVsSW5zdGFuY2VJbmZvVmVjdG9yKCkKLSAgICAgICAgICA9PSBudWxsKQotICAgICAgewotICAgICAgICByZXR1cm5TdHJpbmcgKz0gIiwgW25vIHRNb2RlbCByZWZlcmVuY2VdIjsKLSAgICAgIH0KLQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBJdGVyYXRvciBpdGVyYXRvciA9Ci0gICAgICAgICAgYmluZGluZ1RlbXBsYXRlCi0gICAgICAgICAgICAuZ2V0VE1vZGVsSW5zdGFuY2VEZXRhaWxzKCkKLSAgICAgICAgICAgIC5nZXRUTW9kZWxJbnN0YW5jZUluZm9WZWN0b3IoKQotICAgICAgICAgICAgLml0ZXJhdG9yKCk7Ci0KLSAgICAgICAgaW50IGluZm9Db3VudCA9IDE7Ci0gICAgICAgIFRNb2RlbEluc3RhbmNlSW5mbyBpbmZvOwotICAgICAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgaW5mbyA9IChUTW9kZWxJbnN0YW5jZUluZm8pIGl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgICByZXR1cm5TdHJpbmcgKz0gIiwgWyIKLSAgICAgICAgICAgICsgaW5mb0NvdW50KysKLSAgICAgICAgICAgICsgIl0gdE1vZGVsS2V5OiAiCi0gICAgICAgICAgICArIGluZm8uZ2V0VE1vZGVsS2V5KCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcmV0dXJuU3RyaW5nOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdE1vZGVsLgotICAgKiBAcGFyYW0gdE1vZGVsICBhIFRNb2RlbCBvYmplY3QuCi0gICAqIEByZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdE1vZGVsLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgdE1vZGVsVG9TdHJpbmcoVE1vZGVsIHRNb2RlbCkKLSAgewotICAgIFN0cmluZyByZXR1cm5TdHJpbmcgPSAiIjsKLQotICAgIGlmICh0TW9kZWwgPT0gbnVsbCkKLSAgICAgIHJldHVyblN0cmluZyA9ICJudWxsIjsKLQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXR1cm5TdHJpbmcgPQotICAgICAgICAibmFtZTogIgotICAgICAgICAgICsgdE1vZGVsLmdldE5hbWVTdHJpbmcoKQotICAgICAgICAgICsgIiwgY2F0ZWdvcnlCYWc6ICIKLSAgICAgICAgICArICh0TW9kZWwuZ2V0Q2F0ZWdvcnlCYWcoKSA9PSBudWxsCi0gICAgICAgICAgICA/ICJudWxsIgotICAgICAgICAgICAgOiBjYXRlZ29yeUJhZ1RvU3RyaW5nKHRNb2RlbC5nZXRDYXRlZ29yeUJhZygpKSkKLSAgICAgICAgICArICIsIG92ZXJ2aWV3VVJMOiAiCi0gICAgICAgICAgKyAodE1vZGVsLmdldE92ZXJ2aWV3RG9jKCkgPT0gbnVsbAotICAgICAgICAgICAgPyAibnVsbCIKLSAgICAgICAgICAgIDogdE1vZGVsLmdldE92ZXJ2aWV3RG9jKCkuZ2V0T3ZlcnZpZXdVUkxTdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJldHVyblN0cmluZzsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGNhdGVnb3J5QmFnLgotICAgKiBAcGFyYW0gY2F0ZWdvcnlCYWcgIGEgQ2F0ZWdvcnlCYWcgb2JqZWN0LgotICAgKiBAcmV0dXJuIGEgdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgY2F0ZWdvcnlCYWcuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBjYXRlZ29yeUJhZ1RvU3RyaW5nKENhdGVnb3J5QmFnIGNhdGVnb3J5QmFnKQotICB7Ci0gICAgU3RyaW5nIHJldHVyblN0cmluZyA9ICIiOwotCi0gICAgaWYgKGNhdGVnb3J5QmFnID09IG51bGwpCi0gICAgewotICAgICAgcmV0dXJuU3RyaW5nICs9ICJudWxsIjsKLSAgICB9Ci0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmV0dXJuU3RyaW5nICs9ICJLZXllZFJlZmVyZW5jZUxpc3Q6ICI7Ci0KLSAgICAgIFZlY3RvciBrckxpc3QgPSBudWxsOwotICAgICAgaWYgKChrckxpc3QgPSBjYXRlZ29yeUJhZy5nZXRLZXllZFJlZmVyZW5jZVZlY3RvcigpKSA9PSBudWxsKQotICAgICAgewotICAgICAgICByZXR1cm5TdHJpbmcgKz0gIm51bGwiOwotICAgICAgfQotCi0gICAgICBlbHNlIGlmIChrckxpc3Quc2l6ZSgpID09IDApCi0gICAgICB7Ci0gICAgICAgIHJldHVyblN0cmluZyArPSAiZW1wdHkiOwotICAgICAgfQotCi0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIEtleWVkUmVmZXJlbmNlIGtyID0gbnVsbDsKLSAgICAgICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBrckxpc3QuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIGtyID0gKEtleWVkUmVmZXJlbmNlKSBpdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgICAgcmV0dXJuU3RyaW5nICs9ICJ0TW9kZWxLZXk6ICIKLSAgICAgICAgICAgICsga3IuZ2V0VE1vZGVsS2V5KCkKLSAgICAgICAgICAgICsgIiwga2V5TmFtZTogIgotICAgICAgICAgICAgKyBrci5nZXRLZXlOYW1lKCkKLSAgICAgICAgICAgICsgIiwga2V5VmFsdWU6ICIKLSAgICAgICAgICAgICsga3IuZ2V0S2V5VmFsdWUoKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByZXR1cm5TdHJpbmc7Ci0gIH0KLQotICAvKioKLSAgICogRmluZCB0aGUgd3NkbFNwZWMgdE1vZGVsIGFzc29jaWF0ZWQgd2l0aCBhIGJpbmRpbmcuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRNb2RlbCBmaW5kVE1vZGVsKAotICAgIFVERElQcm94eSB1ZGRpUHJveHksCi0gICAgQmluZGluZ1RlbXBsYXRlIGJpbmRpbmdUZW1wbGF0ZSwKLSAgICBib29sZWFuIHZlcmJvc2VPcHRpb24pCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgVE1vZGVsIHRNb2RlbCA9IG51bGw7Ci0KLSAgICAvLyBHZXQgdGhlIGxpc3Qgb2YgdE1vZGVsIHJlZmVyZW5jZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgYmluZGluZ1RlbXBsYXRlCi0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPQotICAgICAgYmluZGluZ1RlbXBsYXRlCi0gICAgICAgIC5nZXRUTW9kZWxJbnN0YW5jZURldGFpbHMoKQotICAgICAgICAuZ2V0VE1vZGVsSW5zdGFuY2VJbmZvVmVjdG9yKCkKLSAgICAgICAgLml0ZXJhdG9yKCk7Ci0KLSAgICAvLyBQcm9jZXNzIGVhY2ggdE1vZGVsIHJlZmVyZW5jZQotICAgIFZlY3RvciB0TW9kZWxLZXlMaXN0ID0gbmV3IFZlY3RvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgLy8gR2V0IHRNb2RlbEluc3RhbmNlSW5mbwotICAgICAgVE1vZGVsSW5zdGFuY2VJbmZvIHRNb2RlbEluc3RhbmNlSW5mbyA9Ci0gICAgICAgIChUTW9kZWxJbnN0YW5jZUluZm8pIGl0ZXJhdG9yLm5leHQoKTsKLQotICAgICAgLy8gQWRkIGtleSB0byBsaXN0Ci0gICAgICB0TW9kZWxLZXlMaXN0LmFkZCh0TW9kZWxJbnN0YW5jZUluZm8uZ2V0VE1vZGVsS2V5KCkpOwotICAgIH0KLQotICAgIC8vIEdldCB0aGUgdE1vZGVscyBhc3NvY2lhdGVkIHdpdGggdGhlIGJpbmRpbmdUZW1wbGF0ZQotICAgIGlmICh0TW9kZWxLZXlMaXN0LnNpemUoKSA+IDApCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIC8vIEdldCB0aGUgdE1vZGVsIGRldGFpbHMKLSAgICAgICAgVE1vZGVsRGV0YWlsIHRNb2RlbERldGFpbCA9IHVkZGlQcm94eS5nZXRfdE1vZGVsRGV0YWlsKHRNb2RlbEtleUxpc3QpOwotCi0gICAgICAgIC8vIEdldCB0aGUgbGlzdCBvZiB0TW9kZWxzCi0gICAgICAgIEl0ZXJhdG9yIHRNb2RlbEl0ZXJhdG9yID0gdE1vZGVsRGV0YWlsLmdldFRNb2RlbFZlY3RvcigpLml0ZXJhdG9yKCk7Ci0KLSAgICAgICAgLy9ib29sZWFuIHRNb2RlbEZvdW5kID0gZmFsc2U7Ci0gICAgICAgIFRNb2RlbCBuZXh0VE1vZGVsID0gbnVsbDsKLQotICAgICAgICAvLyBHbyB0aHJvdWdoIHRoZSBsaXN0IG9mIHRNb2RlbHMKLSAgICAgICAgd2hpbGUgKCh0TW9kZWxJdGVyYXRvci5oYXNOZXh0KCkpICYmICh0TW9kZWwgPT0gbnVsbCkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXQgbmV4dCB0TW9kZWwgaW4gbGlzdAotICAgICAgICAgIG5leHRUTW9kZWwgPSAoVE1vZGVsKSB0TW9kZWxJdGVyYXRvci5uZXh0KCk7Ci0KLSAgICAgICAgICBpZiAodmVyYm9zZU9wdGlvbikKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oCi0gICAgICAgICAgICAgICIgICAgICBUTW9kZWwgcmVmZXJlbmNlZCBmcm9tIGJpbmRpbmdUZW1wbGF0ZSAtICIKLSAgICAgICAgICAgICAgICArIFVERElVdGlscy50TW9kZWxUb1N0cmluZyhuZXh0VE1vZGVsKSk7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIHdzZGxTcGVjIHRNb2RlbCwgdGhlbiB0aGlzIGlzIHRoZSB0TW9kZWwgd2Ugd2FudAotICAgICAgICAgIGlmIChpc1dzZGxTcGVjKG5leHRUTW9kZWwpKQotICAgICAgICAgICAgdE1vZGVsID0gbmV4dFRNb2RlbDsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIC8vIFRocm93IFdTSUV4Y2VwdGlvbgotICAgICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKCJDb3VsZCBub3QgZ2V0IHRNb2RlbCBkZXRhaWxzLiIsIGUpOwotICAgICAgfQotICAgIH0KLQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBUaHJvdyBleGNlcHRpb24KLSAgICAgIC8vdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigiVURESSBiaW5kaW5nVGVtcGxhdGUgZGlkIG5vdCBjb250YWluIGFueSB0TW9kZWwgcmVmZXJlbmNlcy4iKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdE1vZGVsOwotICB9Ci0gIAotICAvKioKLSAgICogRGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSB3c2RsU3BlYyB0TW9kZWwuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNXc2RsU3BlYyhUTW9kZWwgdE1vZGVsKQotICB7Ci0gICAgYm9vbGVhbiB0TW9kZWxGb3VuZCA9IGZhbHNlOwotICAgIENhdGVnb3J5QmFnIGNhdGVnb3J5QmFnID0gbnVsbDsKLSAgICBJdGVyYXRvciBjYXRlZ29yeUJhZ0l0ZXJhdG9yID0gbnVsbDsKLQotICAgIC8vIERldGVybWluZSBpZiB0aGUgY2F0ZXRnb3J5QmFnIGNvbnRhaW5zIHdzZGxTcGVjCi0gICAgaWYgKChjYXRlZ29yeUJhZyA9IHRNb2RlbC5nZXRDYXRlZ29yeUJhZygpKSAhPSBudWxsKQotICAgIHsKLSAgICAgIC8vIEdldCB0aGUgbGlzdCBvZiBrZXllZCByZWZlcmVuY2VzCi0gICAgICBjYXRlZ29yeUJhZ0l0ZXJhdG9yID0gY2F0ZWdvcnlCYWcuZ2V0S2V5ZWRSZWZlcmVuY2VWZWN0b3IoKS5pdGVyYXRvcigpOwotCi0gICAgICBLZXllZFJlZmVyZW5jZSBrZXllZFJlZmVyZW5jZSA9IG51bGw7Ci0KLSAgICAgIC8vIEdvIHRocm91Z2ggdGhlIGxpc3Qgb2Yga2V5ZWQgcmVmZXJlbmNlcwotICAgICAgd2hpbGUgKGNhdGVnb3J5QmFnSXRlcmF0b3IuaGFzTmV4dCgpICYmICEodE1vZGVsRm91bmQpKQotICAgICAgewotICAgICAgICAvLyBHZXQgbmV4dCBrZXllZCByZWZlcmVuY2UKLSAgICAgICAga2V5ZWRSZWZlcmVuY2UgPSAoS2V5ZWRSZWZlcmVuY2UpIGNhdGVnb3J5QmFnSXRlcmF0b3IubmV4dCgpOwotCi0gICAgICAgIC8vIElmIHRoaXMgaXMgYSB0eXBlcyB0YXhvbm9teSB0TW9kZWwgYW5kIHRoZSB2YWx1ZSBpcyB3c2RsU3BlYywgdGhlbiB0aGlzIGlzIHRoZSB0TW9kZWwgd2Ugd2FudAotICAgICAgICAvLyBSRU1PVkU6IEl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gY2hlY2sgdGhlIGtleSBuYW1lCi0gICAgICAgIC8vaWYgKGtleWVkUmVmZXJlbmNlLmdldFRNb2RlbEtleSgpLmVxdWFsc0lnbm9yZUNhc2UoVE1vZGVsLlRZUEVTX1RNT0RFTF9LRVkpICYmCi0gICAgICAgIC8vICAgIndzZGxTcGVjIi5lcXVhbHMoa2V5ZWRSZWZlcmVuY2UuZ2V0S2V5VmFsdWUoKSkgJiYKLSAgICAgICAgLy8gICAoInR5cGVzIi5lcXVhbHMoa2V5ZWRSZWZlcmVuY2UuZ2V0S2V5TmFtZSgpKSB8fAotICAgICAgICAvLyAgICAidWRkaS1vcmc6dHlwZXMiLmVxdWFscyhrZXllZFJlZmVyZW5jZS5nZXRLZXlOYW1lKCkpKSkgewotICAgICAgICAvLyAgdE1vZGVsRm91bmQgPSB0cnVlOwotICAgICAgICAvL30KLSAgICAgICAgaWYgKGtleWVkUmVmZXJlbmNlCi0gICAgICAgICAgLmdldFRNb2RlbEtleSgpCi0gICAgICAgICAgLmVxdWFsc0lnbm9yZUNhc2UoVE1vZGVsLlRZUEVTX1RNT0RFTF9LRVkpCi0gICAgICAgICAgJiYgIndzZGxTcGVjIi5lcXVhbHMoa2V5ZWRSZWZlcmVuY2UuZ2V0S2V5VmFsdWUoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICB0TW9kZWxGb3VuZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdE1vZGVsRm91bmQ7Ci0gIH0KLSAgLyoqCi0gICAqIEdldCBhbiBPdmVydmlld1VSTCBmcm9tIHRNb2RlbC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldE92ZXJ2aWV3VVJMKFRNb2RlbCB0TW9kZWwpCi0gIHsKLSAgICBpZiAodE1vZGVsICE9IG51bGwKLSAgICAgICYmIHRNb2RlbC5nZXRPdmVydmlld0RvYygpICE9IG51bGwKLSAgICAgICYmIHRNb2RlbC5nZXRPdmVydmlld0RvYygpLmdldE92ZXJ2aWV3VVJMKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICByZXR1cm4gdE1vZGVsLmdldE92ZXJ2aWV3RG9jKCkuZ2V0T3ZlcnZpZXdVUkwoKS5nZXRUZXh0KCk7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9Ci0gIAotCi0gIC8qKgotICAgKiBHZXQgV1NETCBkb2N1bWVudC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFdTRExMb2NhdGlvbihTdHJpbmcgd3NkbExvY2F0aW9uKQotICB7Ci0gICAgaW50IGluZGV4OwotCi0gICAgLy8gQ2hlY2sgaWYgdGhlIG92ZXJ2aWV3VVJMIGNvbnRhaW5zIGEgZnJhZ21lbnQgaWRlbnRpZmllcgotICAgIGlmICgoaW5kZXggPSB3c2RsTG9jYXRpb24uaW5kZXhPZigiIyIpKSA+IC0xKQotICAgIHsKLSAgICAgIHdzZGxMb2NhdGlvbiA9IHdzZGxMb2NhdGlvbi5zdWJzdHJpbmcoMCwgaW5kZXgpOwotICAgIH0KLSAgICByZXR1cm4gd3NkbExvY2F0aW9uOwotICB9Ci0gIC8qKgotICAgKiBHZXQgV1NETCBiaW5kaW5nIGZyb20gdGhlIG92ZXJ2aWV3VVJMIGluIHRoZSB0TW9kZWwuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIEJpbmRpbmcgZ2V0QmluZGluZyhTdHJpbmcgb3ZlcnZpZXdVUkwsIFdTRExEb2N1bWVudCB3c2RsRG9jdW1lbnQpCi0gIHsKLSAgICBpbnQgaW5kZXg7Ci0gICAgaW50IG5hbWVJbmRleDsKLQotICAgIEJpbmRpbmdbXSBiaW5kaW5ncyA9IHdzZGxEb2N1bWVudC5nZXRCaW5kaW5ncygpOwotICAgIGlmIChiaW5kaW5ncyA9PSBudWxsIHx8IGJpbmRpbmdzLmxlbmd0aCA9PSAwKQotICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICBpZiAob3ZlcnZpZXdVUkwgIT0gbnVsbCkKLSAgICB7Ci0gICAgICAvLyBDaGVjayBpZiB0aGUgb3ZlcnZpZXdVUkwgY29udGFpbnMgYSBmcmFnbWVudCBpZGVudGlmaWVyCi0gICAgICBpZiAoKGluZGV4ID0gb3ZlcnZpZXdVUkwuaW5kZXhPZigiIyIpKSA+IC0xKQotICAgICAgewotICAgICAgICAvLyBURU1QOiBOZWVkIHRvIHVzZSBhIHJlYWwgWFBhdGggZXZhbHVhdG9yIGxpa2UgWGFsYW4KLSAgICAgICAgU3RyaW5nIG5hbWVBdHRyaWJ1dGUgPSAiQG5hbWU9IjsKLQotICAgICAgICAvLyBMb2NhdGUgbmFtZSByZWZlcmVuY2UKLSAgICAgICAgaWYgKChuYW1lSW5kZXggPQotICAgICAgICAgIG92ZXJ2aWV3VVJMLnN1YnN0cmluZyhpbmRleCArIDEpLmluZGV4T2YobmFtZUF0dHJpYnV0ZSkpCi0gICAgICAgICAgPiAtMSkKLSAgICAgICAgewotICAgICAgICAgIC8vIEdldCB0aGUgbmV4dCBjaGFyYWN0ZXIgd2hpY2ggc2hvdWxkIGJlIGEgcXVvdGUKLSAgICAgICAgICBpbnQgZmlyc3RRdW90ZUluZGV4ID0gaW5kZXggKyAxICsgbmFtZUluZGV4ICsgbmFtZUF0dHJpYnV0ZS5sZW5ndGgoKTsKLSAgICAgICAgICBTdHJpbmcgcXVvdGUgPQotICAgICAgICAgICAgb3ZlcnZpZXdVUkwuc3Vic3RyaW5nKGZpcnN0UXVvdGVJbmRleCwgZmlyc3RRdW90ZUluZGV4ICsgMSk7Ci0KLSAgICAgICAgICAvLyBHZXQgdGhlIHBhcnQgb2YgdGhlIFVSTCB3aGljaCBzaG91bGQgY29udGFpbiB0aGUgYmluZGluZyBuYW1lCi0gICAgICAgICAgU3RyaW5nIHVybFBhcnQgPSBvdmVydmlld1VSTC5zdWJzdHJpbmcoZmlyc3RRdW90ZUluZGV4ICsgMSk7Ci0KLSAgICAgICAgICAvLyBGaW5kIHRoZSBuZXh0IHF1b3RlCi0gICAgICAgICAgaW50IG5leHRRdW90ZUluZGV4OwotICAgICAgICAgIGlmICgobmV4dFF1b3RlSW5kZXggPSB1cmxQYXJ0LmluZGV4T2YocXVvdGUpKSA+IC0xKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBiaW5kaW5nTmFtZSA9IHVybFBhcnQuc3Vic3RyaW5nKDAsIG5leHRRdW90ZUluZGV4KTsKLSAgICAgICAgICAgIC8vbG9vayBmb3IgYmluZGluZyB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBiaW5kaW5ncy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgaWYgKGJpbmRpbmdOYW1lLmVxdWFscyhiaW5kaW5nc1tpXS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gYmluZGluZ3NbaV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGJpbmRpbmdzWzBdOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL1V0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL1V0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkMzc5ZDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9VdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDAzIElCTSBDb3Jwb3JhdGlvbiwgQmVhY29uIEluZm9ybWF0aW9uIFRlY2hub2xvZ3kgSW5jLiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNICAgICAgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgQmVhY29uSVQgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbDsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LkNvbm5lY3RFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuSW5ldEFkZHJlc3M7Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5EYXRlOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLWltcG9ydCBjb20uaWJtLmljdS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5XU0lUZXN0VG9vbHNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5hbmFseXplci5jb25maWcuQW5hbHl6ZXJDb25maWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmxvZy5NaW1lUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLk1pbWVQYXJ0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUubG9nLmltcGwuTWltZVBhcnRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5sb2cuaW1wbC5NaW1lUGFydHNJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLlByb2ZpbGVBc3NlcnRpb25zOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLQotaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuU2ltcGxlRGF0ZUZvcm1hdDsKLWltcG9ydCBjb20uaWJtLmljdS51dGlsLlRpbWVab25lOwotCi0vKioKLSAqIEdlbmVyYWwgc2V0IG9mIHV0aWxpdGllcy4KLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIFV0aWxzCi17Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgYnl0ZSBDUiA9IChieXRlKSAnXHInOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgTEYgPSAoYnl0ZSkgJ1xuJzsKLQotICAKLSAgcHJpdmF0ZSBzdGF0aWMgTWFwIHZhbGlkUHJvZmlsZVRBRFZlcnNpb25zOwotCi0gIC8qKgotICAgKiBDb21tb24gdGltZXN0YW1wIGZvcm1hdC4KLSAgICovCi0gIC8vCXB1YmxpYyBzdGF0aWMgZmluYWwgU2ltcGxlRGF0ZUZvcm1hdCB0aW1lc3RhbXBGb3JtYXQgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCAoInl5eXktTU0tZGQnVCdISDptbTpzcy5TU1MnWiciKTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTaW1wbGVEYXRlRm9ybWF0IHRpbWVzdGFtcEZvcm1hdCA9Ci0gICAgbmV3IFNpbXBsZURhdGVGb3JtYXQoInl5eXktTU0tZGQnVCdISDptbTpzcy5TU1MiKTsKLQotICAvKioKLSAgICogQmFzaWMgZGF0ZSBmb3JtYXQuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFNpbXBsZURhdGVGb3JtYXQgZGF0ZUZvcm1hdCA9Ci0gICAgbmV3IFNpbXBsZURhdGVGb3JtYXQoInl5eXktTU0tZGQiKTsKLQotICAvKioKLSAgICogV3JhcHBlciBtZXRob2QgZm9yIGVycm9yIGxvZ2dpbmc7Ci0gICAqIGZvciBub3cgaXQganVzdCBnb2VzIHRvIHN0ZGVyci4KLSAgICogQHBhcmFtIGluRXJyb3IgIGFuIGVycm9yIG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgZmluYWwgc3RhdGljIHZvaWQgbG9nRXJyb3IoU3RyaW5nIGluRXJyb3IpCi0gIHsKLSAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkVycm9yOiAiICsgaW5FcnJvcik7Ci0gIH0KLQotICAvKiogCi0gICAqIEdldCBleGNlcHRpb24gaW5mb3JtYXRpb24gYXMgYSBzdHJpbmcuCi0gICAqIEBwYXJhbSB0aHJvd2FibGUgIGEgVGhyb3dhYmxlIG9iamVjdC4KLSAgICogQHJldHVybiBleGNlcHRpb24gaW5mb3JtYXRpb24gYXMgYSBzdHJpbmcuCi0gICAqLwotICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBnZXRFeGNlcHRpb25EZXRhaWxzKFRocm93YWJsZSB0aHJvd2FibGUpCi0gIHsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHcgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwotCi0gICAgcHcucHJpbnRsbigiRXhjZXB0aW9uOiAiKTsKLSAgICB0aHJvd2FibGUucHJpbnRTdGFja1RyYWNlKHB3KTsKLQotICAgIHJldHVybiBzdy50b1N0cmluZygpOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBjdXJyZW50IGRhdGUgYW5kIHRpbWUgYXMgYSB0aW1lc3RhbXAuCi0gICAqIEByZXR1cm4gdXJyZW50IGRhdGUgYW5kIHRpbWUgYXMgYSB0aW1lc3RhbXAuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRUaW1lc3RhbXAoKQotICB7Ci0gICAgLy8gVXNlIEdNVCB0aW1lem9uZQotICAgIC8vdGltZXN0YW1wRm9ybWF0LnNldFRpbWVab25lKFRpbWVab25lLmdldFRpbWVab25lKCJHTVQiKSk7Ci0gICAgdGltZXN0YW1wRm9ybWF0LnNldFRpbWVab25lKFRpbWVab25lLmdldERlZmF1bHQoKSk7Ci0KLSAgICAvLyBSZXR1cm4gdGltZXN0YW1wCi0gICAgcmV0dXJuIHRpbWVzdGFtcEZvcm1hdC5mb3JtYXQobmV3IERhdGUoKSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGN1cnJlbnQgZGF0ZSBmb3IgZGVmYXVsdCB0aW1lIHpvbmUuCi0gICAqIEByZXR1cm4gY3VycmVudCBkYXRlIGZvciBkZWZhdWx0IHRpbWUgem9uZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldERhdGUoKQotICB7Ci0gICAgLy8gVXNlIEdNVCB0aW1lem9uZQotICAgIGRhdGVGb3JtYXQuc2V0VGltZVpvbmUoVGltZVpvbmUuZ2V0RGVmYXVsdCgpKTsKLQotICAgIC8vIFJldHVybiBkYXRlCi0gICAgcmV0dXJuIGRhdGVGb3JtYXQuZm9ybWF0KG5ldyBEYXRlKCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBIVFRQIHN0YXR1cyBjb2RlLgotICAgKiBAcGFyYW0gaHR0cEhlYWRlcnMgIEhUVFAgaGVhZGVycy4KLSAgICogQHJldHVybiBIVFRQIHN0YXR1cyBjb2RlLgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGUgc3RhdHVzIGNvZGUgaW4gaHR0cCBoZWFkZXJzIHdhcyBub3QgZm91bmQuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRIVFRQU3RhdHVzQ29kZShTdHJpbmcgaHR0cEhlYWRlcnMpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIHN0YXR1c0NvZGUgPSBudWxsOwotCi0gICAgaWYgKGh0dHBIZWFkZXJzLnN0YXJ0c1dpdGgoIkhUVFAiKSkKLSAgICB7Ci0gICAgICAvLyBHZXQgbG9jYXRpb24gb2Ygc3RhdHVzIGNvZGUKLSAgICAgIGludCBpbmRleCA9IGh0dHBIZWFkZXJzLmluZGV4T2YoIiAiKTsKLSAgICAgIGludCBpbmRleDIgPSBodHRwSGVhZGVycy5pbmRleE9mKCIgIiwgaW5kZXggKyAxKTsKLQotICAgICAgaWYgKChpbmRleCA9PSAtMSkgfHwgKGluZGV4MiA9PSAtMSkpCi0gICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBXU0lFeGNlcHRpb24oCi0gICAgICAgICAgIkNvdWxkIG5vdCBmaW5kIHN0YXR1cyBjb2RlIGluIGh0dHAgaGVhZGVyczogWyIgKyBodHRwSGVhZGVycyArICJdLiIpOwotICAgICAgfQotCi0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHN0YXR1c0NvZGUgPSBodHRwSGVhZGVycy5zdWJzdHJpbmcoaW5kZXggKyAxLCBpbmRleDIpOwotICAgICAgfQotICAgIH0KLQotICAgIGVsc2UKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKAotICAgICAgICAiQ291bGQgbm90IGZpbmQgc3RhdHVzIGNvZGUgaW4gaHR0cCBoZWFkZXJzOiBbIiArIGh0dHBIZWFkZXJzICsgIl0uIik7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIHN0YXR1cyBjb2RlCi0gICAgcmV0dXJuIHN0YXR1c0NvZGU7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IEhUVFAgaGVhZGVycyBmcm9tIGEgZnVsbCBtZXNzYWdlLgotICAgKiBAcGFyYW0gZnVsbE1lc3NhZ2UgIGEgbWVzc2FnZS4KLSAgICogQHJldHVybiBIVFRQIGhlYWRlcnMgZnJvbSBhIGZ1bGwgbWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEhUVFBIZWFkZXJzKFN0cmluZyBmdWxsTWVzc2FnZSkKLSAgewotICAgIC8vU3RyaW5nIGh0dHBIZWFkZXJzID0gbnVsbDsKLQotICAgIC8vIFRyeSBsb29raW5nIGZvciB0aGUgZG91YmxlIG5ld2xpbmUKLSAgICBpbnQgaW5kZXggPSBmdWxsTWVzc2FnZS5pbmRleE9mKCJcclxuXHJcbiIpOwotICAgIGlmIChpbmRleCAhPSAtMSkKLSAgICB7Ci0gICAgICBpbmRleCArPSA0OwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLy8gY2hlY2sgZm9yIGNhc2UgIlxyXHIuLi5cclxuXHJcci4uLlxuIgotICAgICAgLy8gTm90ZSB0aGUgaW5kZXggdGhhdCBpcyByZXR1cm5lZCBwb2ludHMgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciAKLSAgICAgIC8vIGltbWVkaWF0ZWRseSBmb2xsb3dpbmcgdGhlIGZpcnN0IG9jY3VyZW5jZSBvZiB0aGUgQ1JMRkNSTEYuIAotICAgICAgaW5kZXggPSBnZXRGaXJzdENSTEZDUkxGKGZ1bGxNZXNzYWdlKTsKLSAgICAgIGlmIChpbmRleCA9PSAtMSkKLSAgICAgIHsKLSAgICAgICAgbG9nRXJyb3IoCi0gICAgICAgICAgIlVuYWJsZSB0byBwYXJzZSBIVFRQIG1lc3NhZ2UgdG8gZmluZCBoZWFkZXJzLiAgRnVsbCBtZXNzYWdlOiAiCi0gICAgICAgICAgKyBmdWxsTWVzc2FnZSk7Ci0gICAgICAgIHJldHVybiAieC1XU0ktVGVzdC1Ub29sLUVycm9yOiBDb3VsZG4ndCBmaW5kIGhlYWRlcnMuICBGdWxsIG1lc3NhZ2U6IFsiCi0gICAgICAgICAgKyBmdWxsTWVzc2FnZQotICAgICAgICAgICsgIl0uIjsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gSFRUUCBoZWFkZXJzCi0gICAgcmV0dXJuIGZ1bGxNZXNzYWdlLnN1YnN0cmluZygwLCBpbmRleCk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IFNPQVAgbWVzc2FnZSBmcm9tIGEgZnVsbCBtZXNzYWdlLgotICAgKiBAcGFyYW0gZnVsbE1lc3NhZ2UgIGEgbWVzc2FnZS4KLSAgICogQHJldHVybiBTT0FQIG1lc3NhZ2UgZnJvbSBhIGZ1bGwgbWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldENvbnRlbnQoU3RyaW5nIGZ1bGxNZXNzYWdlKQotICB7Ci0gICAgU3RyaW5nIG1lc3NhZ2UgPSAiIjsKLQotICAgIC8vIEZpbmQgc3RhcnQgb2YgbWVzc2FnZQotICAgIGludCBpbmRleCA9IGZ1bGxNZXNzYWdlLmluZGV4T2YoIlxyXG5cclxuIik7Ci0gICAgaWYgKGluZGV4ICE9IC0xKQotICAgIHsKLSAgICAgIGluZGV4ICs9IDQ7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvLyBjaGVjayBmb3IgY2FzZSAiXHJcci4uLlxyXG5cclxyLi4uXG4iCi0gICAgICAvLyBOb3RlIHRoZSBpbmRleCB0aGF0IGlzIHJldHVybmVkIHBvaW50cyB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIAotICAgICAgLy8gaW1tZWRpYXRlZGx5IGZvbGxvd2luZyB0aGUgZmlyc3Qgb2NjdXJlbmNlIG9mIHRoZSBDUkxGQ1JMRi4gCi0gICAgICBpbmRleCA9IGdldEZpcnN0Q1JMRkNSTEYoZnVsbE1lc3NhZ2UpOwotICAgIH0gICAgCQotCi0gICAgaWYgKGluZGV4IDwgMCkKLSAgICB7Ci0gICAgCS8vIElmIHdlIGNvdWxkbid0IGZpbmQgdGhlIGVuZCBvZiB0aGUgSFRUUCBoZWFkZXJzIG9yIHRoZSBzdGFydCBvZiB0aGUgbWVzc2FnZSwgdGhlbiBzaG93IGVycm9yCi0gICAgICBsb2dFcnJvcigKLSAgICAgICAgIlVuYWJsZSB0byBwYXJzZSBtZXNzYWdlIHRvIGdldCBjb250ZW50LiAgRnVsbCBtZXNzYWdlOiAiCi0gICAgICAgICAgKyBmdWxsTWVzc2FnZSk7Ci0gICAgICBtZXNzYWdlID0KLSAgICAgICAgIngtV1NJLVRlc3QtVG9vbC1FcnJvcjogQ291bGRuJ3QgZmluZCBtZXNzYWdlIGNvbnRlbnQuICBGdWxsIG1lc3NhZ2U6IFsiCi0gICAgICAgICAgKyBmdWxsTWVzc2FnZQotICAgICAgICAgICsgIl0uIjsKLSAgICB9Ci0gICAgLy8gSWYgdGhlIGluZGV4IGlzIGdyZWF0ZXIgdGhhbiB0aGUgbGVuZ3RoLCB0aGVuIHRoZXJlIGlzIG5vIG1lc3NhZ2UgY29udGVudAotICAgIGVsc2UgaWYgKGluZGV4ID49IGZ1bGxNZXNzYWdlLmxlbmd0aCgpKQotICAgIHsKLSAgICAgIG1lc3NhZ2UgPSAiIjsKLSAgICB9Ci0KLSAgICAvLyBFbHNlIGdldCB0aGUgbWVzc2FnZSBjb250ZW50Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIG1lc3NhZ2UgPSBmdWxsTWVzc2FnZS5zdWJzdHJpbmcoaW5kZXgpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBTT0FQIG1lc3NhZ2UKLSAgICByZXR1cm4gbWVzc2FnZTsKLSAgfQotIAotICAvKioKLSAgICogR2V0IEhUVFAgaGVhZGVycyBmcm9tIGEgZnVsbCBtZXNzYWdlLgotICAgKiBAcGFyYW0gZnVsbE1lc3NhZ2UgIGEgbWVzc2FnZS4KLSAgICogQHJldHVybiBIVFRQIGhlYWRlcnMgZnJvbSBhIGZ1bGwgbWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYnl0ZVtdIGdldEhUVFBIZWFkZXJzKGJ5dGVbXSBmdWxsTWVzc2FnZSkKLSAgewotICAgIC8vU3RyaW5nIGh0dHBIZWFkZXJzID0gbnVsbDsKLSAgICBpbnQgaW5kZXggPSBnZXRGaXJzdENSTEZDUkxGKGZ1bGxNZXNzYWdlLCAwKTsKLSAgICBpZiAoaW5kZXggPT0gLTEpCi0gICAgewotICAgICAgbG9nRXJyb3IoCi0gICAgICAgICJVbmFibGUgdG8gcGFyc2UgSFRUUCBtZXNzYWdlIHRvIGZpbmQgaGVhZGVycy4gIEZ1bGwgbWVzc2FnZTogIgotICAgICAgICAgICsgZnVsbE1lc3NhZ2UpOwotICAgICAgcmV0dXJuICgieC1XU0ktVGVzdC1Ub29sLUVycm9yOiBDb3VsZG4ndCBmaW5kIGhlYWRlcnMuICBGdWxsIG1lc3NhZ2U6IFsiCi0gICAgICAgICsgZnVsbE1lc3NhZ2UgKyAiXS4iKS5nZXRCeXRlcygpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBIVFRQIGhlYWRlcnMKLQlieXRlW10gYiA9IG5ldyBieXRlW2luZGV4XTsKLQlTeXN0ZW0uYXJyYXljb3B5KGZ1bGxNZXNzYWdlLCAwLCBiLCAwLCBpbmRleCk7Ci0KLSAgICByZXR1cm4gYjsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgSFRUUCBoZWFkZXJzIGZyb20gYSBmdWxsIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBmdWxsTWVzc2FnZSAgYSBtZXNzYWdlLgotICAgKiBAcmV0dXJuIEhUVFAgaGVhZGVycyBmcm9tIGEgZnVsbCBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0SFRUUEhlYWRlcnNBc1N0cmluZyhieXRlW10gZnVsbE1lc3NhZ2UsIFN0cmluZyBlbmNvZGluZykKLSAgewotICAgIC8vU3RyaW5nIGh0dHBIZWFkZXJzID0gbnVsbDsKLSAgICBpbnQgaW5kZXggPSBnZXRGaXJzdENSTEZDUkxGKGZ1bGxNZXNzYWdlLCAwKTsKLSAgICBpZiAoaW5kZXggPT0gLTEpCi0gICAgewotICAgICAgbG9nRXJyb3IoCi0gICAgICAgICJVbmFibGUgdG8gcGFyc2UgSFRUUCBtZXNzYWdlIHRvIGZpbmQgaGVhZGVycy4gIEZ1bGwgbWVzc2FnZTogIgotICAgICAgICAgICsgZnVsbE1lc3NhZ2UpOwotICAgICAgcmV0dXJuICJ4LVdTSS1UZXN0LVRvb2wtRXJyb3I6IENvdWxkbid0IGZpbmQgaGVhZGVycy4gIEZ1bGwgbWVzc2FnZTogWyIKLSAgICAgICAgKyBmdWxsTWVzc2FnZSArICJdLiI7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIEhUVFAgaGVhZGVycwotICAgIHRyeQotICAgIHsKLSAgICAgIHJldHVybiBuZXcgU3RyaW5nKGZ1bGxNZXNzYWdlLCAwLCBpbmRleCwgZW5jb2RpbmcpOwotICAgIH0KLSAgICBjYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgICAgbG9nRXJyb3IoCi0gICAgICAgICAgICAgICAgIlVuc3VwcG9ydGVkIEVuY29kaW5nOiAiICsgZW5jb2RpbmcgKyAiLiAgRnVsbCBtZXNzYWdlOiAiCi0gICAgICAgICAgICAgICAgICArIGZ1bGxNZXNzYWdlKTsKLSAgICAgICAgICAgICAgcmV0dXJuICJ4LVdTSS1UZXN0LVRvb2wtRXJyb3I6IFVuc3VwcG9ydGVkIEVuY29kaW5nIFwiIiArIGVuY29kaW5nICsgIlwiLiAgRnVsbCBtZXNzYWdlOiBbIgotICAgICAgICAgICAgICAgICsgZnVsbE1lc3NhZ2UgKyAiXS4iOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBHZXQgU09BUCBtZXNzYWdlIGZyb20gYSBmdWxsIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBmdWxsTWVzc2FnZSAgYSBtZXNzYWdlLgotICAgKiBAcmV0dXJuIFNPQVAgbWVzc2FnZSBmcm9tIGEgZnVsbCBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0Q29udGVudEFzU3RyaW5nKGJ5dGVbXSBtZXNzYWdlKQotICB7Ci0gIAlTdHJpbmcgY29udGVudCA9ICIiOwotICAgIC8vU3RyaW5nIGh0dHBIZWFkZXJzID0gbnVsbDsKLSAgICBpbnQgaW5kZXggPSBnZXRGaXJzdENSTEZDUkxGKG1lc3NhZ2UsIDApOwotCi0gICAgLy8gSWYgd2UgY291bGRuJ3QgZmluZCB0aGUgZW5kIG9mIHRoZSBIVFRQIGhlYWRlcnMgb3IgdGhlIHN0YXJ0IG9mIHRoZSBtZXNzYWdlLCB0aGVuIHNob3cgZXJyb3IKLSAgICBpZiAoaW5kZXggPCAwKQotICAgIHsKLSAgICAgIGxvZ0Vycm9yKAotICAgICAgICAiVW5hYmxlIHRvIHBhcnNlIG1lc3NhZ2UgdG8gZ2V0IGNvbnRlbnQuICBGdWxsIG1lc3NhZ2U6ICIKLSAgICAgICAgICArIG1lc3NhZ2UpOwotICAgICAgY29udGVudCA9Ci0gICAgICAgICJ4LVdTSS1UZXN0LVRvb2wtRXJyb3I6IENvdWxkbid0IGZpbmQgbWVzc2FnZSBjb250ZW50LiAgRnVsbCBtZXNzYWdlOiBbIgotICAgICAgICAgICsgbWVzc2FnZS50b1N0cmluZygpCi0gICAgICAgICAgKyAiXS4iOwotICAgIH0KLQotICAgIC8vIEVsc2UgZ2V0IHRoZSBtZXNzYWdlIGNvbnRlbnQKLSAgICBlbHNlIGlmIChpbmRleCA8IG1lc3NhZ2UubGVuZ3RoKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBjb250ZW50ID0gbmV3IFN0cmluZyhtZXNzYWdlLCBpbmRleCwgbWVzc2FnZS5sZW5ndGggLSBpbmRleCk7Ci0gICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgCWxvZ0Vycm9yKAotICAgICAgCSAgICAgICAgIlVuYWJsZSB0byBwYXJzZSBtZXNzYWdlIHRvIGdldCBjb250ZW50LiAgRnVsbCBtZXNzYWdlOiAiCi0gICAgICAJICAgICAgICAgICsgbWVzc2FnZSk7Ci0gICAgICAJY29udGVudCA9Ci0gICAgICAJICAgICAgICAieC1XU0ktVGVzdC1Ub29sLUVycm9yOiBDb3VsZG4ndCBmaW5kIG1lc3NhZ2UgY29udGVudC4gIEZ1bGwgbWVzc2FnZTogWyIKLSAgICAgIAkgICAgICAgICAgKyBtZXNzYWdlLnRvU3RyaW5nKCkKLSAgICAgIAkgICAgICAgICAgKyAiXS4iOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiBTT0FQIG1lc3NhZ2UKLSAgICByZXR1cm4gY29udGVudDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgU09BUCBtZXNzYWdlIGZyb20gYSBmdWxsIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBmdWxsTWVzc2FnZSAgYSBtZXNzYWdlLgotICAgKiBAcmV0dXJuIFNPQVAgbWVzc2FnZSBmcm9tIGEgZnVsbCBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBieXRlW10gZ2V0Q29udGVudChieXRlW10gbWVzc2FnZSkKLSAgewotICAgIGJ5dGVbXSBjb250ZW50ID0gbmV3IGJ5dGUgWzBdOwotCi0gICAgLy9TdHJpbmcgaHR0cEhlYWRlcnMgPSBudWxsOwotICAgIGludCBpbmRleCA9IGdldEZpcnN0Q1JMRkNSTEYobWVzc2FnZSwgMCk7Ci0gCi0gICAgLy8gSWYgd2UgY291bGRuJ3QgZmluZCB0aGUgZW5kIG9mIHRoZSBIVFRQIGhlYWRlcnMgb3IgdGhlIHN0YXJ0IG9mIHRoZSBtZXNzYWdlLCB0aGVuIHNob3cgZXJyb3IKLSAgICBpZiAoaW5kZXggPCAwKQotICAgIHsKLSAgICAgIGxvZ0Vycm9yKAotICAgICAgICAiVW5hYmxlIHRvIHBhcnNlIG1lc3NhZ2UgdG8gZ2V0IGNvbnRlbnQuICBGdWxsIG1lc3NhZ2U6ICIKLSAgICAgICAgICArIG1lc3NhZ2UpOwotICAgICAgbWVzc2FnZSA9Ci0gICAgICAgICgieC1XU0ktVGVzdC1Ub29sLUVycm9yOiBDb3VsZG4ndCBmaW5kIG1lc3NhZ2UgY29udGVudC4gIEZ1bGwgbWVzc2FnZTogWyIKLSAgICAgICAgICArIG1lc3NhZ2UudG9TdHJpbmcoKQotICAgICAgICAgICsgIl0uIikuZ2V0Qnl0ZXMoKTsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGUgaW5kZXggaXMgZ3JlYXRlciB0aGFuIHRoZSBsZW5ndGgsIHRoZW4gdGhlcmUgaXMgbm8gbWVzc2FnZSBjb250ZW50Ci0gICAgLy9lbHNlIGlmIChpbmRleCA+PSBmdWxsTWVzc2FnZS5sZW5ndGgoKSkKLSAgICAvL3sKLSAgICAvLyAgbWVzc2FnZSA9ICIiOwotICAgIC8vfQotCi0gICAgLy8gRWxzZSBnZXQgdGhlIG1lc3NhZ2UgY29udGVudAotICAgIGVsc2UgaWYgKGluZGV4IDwgbWVzc2FnZS5sZW5ndGgpCi0gICAgewotICAgIAlieXRlW10gYiA9IG5ldyBieXRlW21lc3NhZ2UubGVuZ3RoIC0gaW5kZXhdOwotICAgIAlTeXN0ZW0uYXJyYXljb3B5KG1lc3NhZ2UsIGluZGV4LCBiLCAwLCBtZXNzYWdlLmxlbmd0aCAtIGluZGV4KTsKLQotICAgICAgICBjb250ZW50ID0gYjsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gU09BUCBtZXNzYWdlCi0gICAgcmV0dXJuIGNvbnRlbnQ7Ci0gIH0KLQotICAKLSAgLyoqCi0JICogUmV0dXJucyB0aGUgZmlyc3QgbG9jYXRpb24gb2YgYSBDUkxGLgotCSAqCi0JICogQHJldHVybiBpbnQKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGludCBnZXRGaXJzdENSTEYoYnl0ZVtdIGJ1ZmZlciwgaW50IGluZGV4KSAKLQl7Ci0JCWludCBzaXplID0gYnVmZmVyLmxlbmd0aDsKLQkJaW50IGkgPSBpbmRleDsKLQkJd2hpbGUgKGkgPCBzaXplIC0gMSkgewotCQkJaWYgKGJ1ZmZlcltpXSA9PSBDUiAmJiBidWZmZXJbaSsxXSA9PSBMRikKLQkJCQlyZXR1cm4gaTsKLQkJCWkrKzsKLQkJfQotCQlyZXR1cm4gLTE7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZmlyc3QgbG9jYXRpb24gb2YgYSBDUkxGIGZvbGxvd2VkIGltZWRpYXRlbHkgYnkgYW5vdGhlciBDUkxGLgotCSAqCi0JICogQHJldHVybiBpbnQKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGludCBnZXRGaXJzdENSTEZDUkxGKGJ5dGVbXSBidWZmZXIsIGludCBpbmRleCkgCi0JewotCQlpbnQgc2l6ZSA9IGJ1ZmZlci5sZW5ndGg7Ci0JCWludCBpID0gaW5kZXg7Ci0JCXdoaWxlIChpIDwgc2l6ZSAtIDMpIAotCQl7Ci0JCSAgaWYgKGJ1ZmZlcltpXSA9PSBDUiAmJiBidWZmZXJbaSsxXSA9PSBMRiAmJiBidWZmZXJbaSsyXSA9PSBDUikKLQkJICB7Ci0JCQlpZiAoYnVmZmVyW2krM10gPT0gTEYpCi0JCQl7Ci0JCQkgIHJldHVybiBpKzQ7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkgIGludCBqID0gaSArIDM7Ci0JCQkgIHdoaWxlIChqIDwgYnVmZmVyLmxlbmd0aCAmJiBidWZmZXJbal0gPT0gQ1IpCi0JCQkgIHsKLQkJCQlqKys7Ci0JCQkgIH0KLQkJCSAgaWYgKGogPCBidWZmZXIubGVuZ3RoICYmIGJ1ZmZlcltqXSA9PSBMRikKLQkJCSAgewotCQkJICAJcmV0dXJuIGogKyAxOwotCQkJICB9Ci0JCQl9Ci0JCSAgfQotCQkgIGkrKzsKLQkJfQotCQlyZXR1cm4gLTE7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZmlyc3QgbG9jYXRpb24gb2YgYSBDUkxGIGZvbGxvd2VkIGltZWRpYXRlbHkgYnkgYW5vdGhlciBDUkxGLgotCSAqCi0JICogQHJldHVybiBpbnQKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGludCBnZXRGaXJzdENSTEZDUkxGKFN0cmluZyBidWZmZXIpIAotCXsKLQkJaW50IGluZGV4ID0gYnVmZmVyLmluZGV4T2YoIlxyXG5cciIpOwotCQlpZiAoaW5kZXggIT0gLTEpCi0JCXsKLQkJICBpbnQgaSA9IGluZGV4ICszOwotCQkgIHdoaWxlIChpIDwgYnVmZmVyLmxlbmd0aCgpICYmIGJ1ZmZlci5zdGFydHNXaXRoKCJcciIsIGkpKQotCQkgICAgIGkrKzsKLQkJCi0JCSAgaWYgKGkgPCBidWZmZXIubGVuZ3RoKCkgJiYgYnVmZmVyLnN0YXJ0c1dpdGgoIlxuIiwgaSkpCi0JCQlyZXR1cm4gaSsxOwotCQkgIGVsc2UKLQkJCXJldHVybiBnZXRGaXJzdENSTEZDUkxGKGJ1ZmZlci5zdWJzdHJpbmcoaW5kZXggKyAzKSk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCSAgcmV0dXJuIC0xOwotCQl9Ci0JfQotCi0JLyoqCi0gICAgICogUmV0dXJucyB0aGUgbGlzdCBvZiBpbmRpY2VzIHdoaWNoIG1hcmtzIHRoZSBzZXBhcmF0aW9uIG9mIHBhcnRzLgotICAgICAqLwotCXB1YmxpYyBzdGF0aWMgaW50W10gZ2V0Qm91bmRhcnlJbmRpY2VzKGJ5dGVbXSBtZXNzYWdlLCBTdHJpbmcgYm91bmRhcnlTdHIpCi0JewotCSAgaW50W10gaW5kaWNlcyA9IG5ldyBpbnRbMjU2XTsKLQkgIGludCBpbmRpY2VzSW5kZXggPSAwOwotCSAgdHJ5Ci0JICB7Ci0JICAgIGJ5dGVbXSBib3VuZGFyeSA9ICgiXHJcbi0tIiArIGJvdW5kYXJ5U3RyKS5nZXRCeXRlcygiVVMtQVNDSUkiKTsKLQotCSAgICBpbnQgaW5kZXggPSAwOwotCSAgICBpbnQgc3RhcnQgPSAwOwotCSAgICB3aGlsZSAoaW5kZXggIT0gLTEpCi0JICAgIHsKLQkgICAgICBpbmRleCA9IGluZGV4T2YobWVzc2FnZSwgYm91bmRhcnksIHN0YXJ0KTsKLQkgICAgICAKLQkgICAgICBpZiAoaW5kZXggIT0gLTEpIAotCSAgICAgIHsKLQkJICAgIHN0YXJ0ID0gaW5kZXggKyBib3VuZGFyeS5sZW5ndGg7Ci0JICAgIAlpbmRpY2VzW2luZGljZXNJbmRleF0gPSBpbmRleDsKLQkgICAgCWluZGljZXNJbmRleCsrOwotCSAgICAgIH0KLQkgICAgfQotICAgICAgCWludFtdIGIgPSBuZXcgaW50W2luZGljZXNJbmRleF07Ci0gICAgCVN5c3RlbS5hcnJheWNvcHkoaW5kaWNlcywgMCwgYiwgMCwgaW5kaWNlc0luZGV4KTsKLSAgICAJaW5kaWNlcyA9IGI7Ci0JICB9Ci0JICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0JICB7fQotCSAgcmV0dXJuIGluZGljZXM7Ci0JfQotIAotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGtleSBpbiB0aGUgYnVmZmVyLgotICAgICAqLwotCXB1YmxpYyBzdGF0aWMgaW50IGluZGV4T2YoYnl0ZVtdIGJ1ZmZlciwgYnl0ZVtdIGtleSwgaW50IHN0YXJ0KQotCXsKLQkJaW50IGJ1ZmZlckxlbiA9IGJ1ZmZlci5sZW5ndGg7Ci0JCWludCBrZXlMZW4gPSBrZXkubGVuZ3RoOwotCQlpbnQgaSxqLGsgPSAwOwotCQkKLQkJaWYgKGtleUxlbiA+IGJ1ZmZlckxlbiAtIHN0YXJ0KQotCQl7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQkKLQkJZm9yIChrID0gc3RhcnQgKyBrZXlMZW4gLSAxOyBrIDwgYnVmZmVyTGVuOyBrKyspCi0JCXsKLSAgICAgICAgICAgZm9yIChqID0ga2V5TGVuIC0gMSwgaSA9IGs7IChqID49IDApICYmIChidWZmZXJbaV0gPT0ga2V5W2pdKTsgai0tKSAKLSAgICAgICAgICAgewotICAgICAgICAgICAgICAgaS0tOwotICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgaWYgKGogPT0gKC0xKSkgewotICAgICAgICAgICAgICAgcmV0dXJuIGkgKyAxOwotICAgICAgICAgICB9Ci0JCX0KLQotCQlyZXR1cm4gLTE7Ci0JfQotCS8qKgotICAgKiBHZXQgY29udGVudHMgb2YgYSByZXNvdXJjZSBhbmQgcmV0dXJuIGFzIGEgaW5wdXQgc3RyZWFtLgotICAgKgotICAgKiBAcGFyYW0gcmVzb3VyY2VOYW1lIHRoZSBuYW1lIG9mIHRoZSByZXNvdXJjZSB0byBnZXQgYW5kIHJldHVybiBhcwotICAgKiAgICAgICAgICAgICAgICAgICAgICBhbiBpbnB1dCBzdHJlYW0uCi0gICAqIEByZXR1cm4gY29udGVudHMgb2YgYSByZXNvdXJjZSBhcyBhbiBpbnB1dCBzdHJlYW0uCi0gICAqIEB0aHJvd3MgSU9FeGNlcHRpb24gaWYgdGhlIHJlc291cmNlIGNvdWxkIG5vdCBiZSBsb2NhdGVkLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBJbnB1dFN0cmVhbSBnZXRJbnB1dFN0cmVhbShTdHJpbmcgcmVzb3VyY2VOYW1lKQotICAgIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgSW5wdXRTdHJlYW0gaXMgPSBudWxsOwotCi0gICAgLy8gSWYgcmVzb3VyY2UgcmVmZXJlbmNlIGlzIGEgVVJMLCB0aGVuIGlucHV0IHN0cmVhbSBmcm9tIFVSTAotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIFRyeSB0byBjcmVhdGUgVVJMCi0gICAgICBVUkwgdXJsUmVzb3VyY2UgPSBuZXcgVVJMKHJlc291cmNlTmFtZSk7Ci0KLSAgICAgIC8vIElmIHN1Y2Nlc3NmdWwsIHRoZW4gZ2V0IFVSTCBpbnB1dCBzdHJlYW0KLSAgICAgIGlzID0gZ2V0SW5wdXRTdHJlYW0odXJsUmVzb3VyY2UpOwotICAgIH0KLQotICAgIC8vIEVsc2UgdHJ5IHRvIHJlYWQgcmVzb3VyY2UgZGlyZWN0bHkKLSAgICBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIG11ZSkKLSAgICB7Ci0gICAgICBib29sZWFuIGJUcnlDbGFzc0xvYWRlciA9IGZhbHNlOwotCi0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgLy8gT3BlbiBmaWxlIGlucHV0IHN0cmVhbQotICAgICAgICBpcyA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKG5ldyBGaWxlSW5wdXRTdHJlYW0ocmVzb3VyY2VOYW1lKSk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGZuZmUpCi0gICAgICB7Ci0gICAgICAgIC8vIFNldCB0cnkgY2xhc3MgbG9hZGVyIGZsYWcKLSAgICAgICAgYlRyeUNsYXNzTG9hZGVyID0gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChTZWN1cml0eUV4Y2VwdGlvbiBzZSkKLSAgICAgIHsKLSAgICAgICAgLy8gU2V0IHRyeSBjbGFzcyBsb2FkZXIgZmxhZwotICAgICAgICBiVHJ5Q2xhc3NMb2FkZXIgPSB0cnVlOwotICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICAvLyBERUJVRzoKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGNlcHRpb24gaW4gZ2V0SW5wdXRTdHJlYW0gOiIgKyBlLnRvU3RyaW5nKCkpOwotICAgICAgfQotCi0gICAgICAvLyBJZiB0cnkgY2xhc3MgbG9hZGVyLCB0aGVuIHVzZSBpdCB0byBnZXQgaW5wdXQgc3RyZWFtCi0gICAgICBpZiAoYlRyeUNsYXNzTG9hZGVyKQotICAgICAgewotICAgICAgICAvLyBVc2UgY2xhc3MgbG9hZGVyIHRvIGxvYWQgcmVzb3VyY2UKLSAgICAgICAgaXMgPSBDbGFzc0xvYWRlci5nZXRTeXN0ZW1SZXNvdXJjZUFzU3RyZWFtKHJlc291cmNlTmFtZSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlIGlucHV0IHN0cmVhbSBpcyBudWxsLCB0aGVuIHRocm93IEZpbGVOb3RGb3VuZEV4Y2VwdGlvbgotICAgIGlmIChpcyA9PSBudWxsKQotICAgIHsKLSAgICAgIC8vdHJ5IHRoaXMKLSAgICAgIGlzID0KLSAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKAotICAgICAgICAgIHJlc291cmNlTmFtZSk7Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlIGlucHV0IHN0cmVhbSBpcyBudWxsLCB0aGVuIHRocm93IEZpbGVOb3RGb3VuZEV4Y2VwdGlvbgotICAgIGlmIChpcyA9PSBudWxsKQotICAgIHsKLSAgICAgIC8vdHJ5IHRoaXMKLSAgICAgIFVSTCBhVVJMID0KLSAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKS5nZXRSZXNvdXJjZSgKLSAgICAgICAgICByZXNvdXJjZU5hbWUpOwotICAgICAgaWYgKGFVUkwgIT0gbnVsbCkKLSAgICAgICAgaXMgPSBnZXRJbnB1dFN0cmVhbShhVVJMKTsKLSAgICB9Ci0KLSAgICBpZiAoaXMgPT0gbnVsbCkKLSAgICAgIC8vIFRocm93IGV4ZWNwdGlvbgotICAgICAgdGhyb3cgbmV3IEZpbGVOb3RGb3VuZEV4Y2VwdGlvbigKLSAgICAgICAgIkNvdWxkIG5vdCBsb2NhdGUgcmVzb3VyY2UgZmlsZTogIiArIHJlc291cmNlTmFtZSk7Ci0KLSAgICAvLyBSZXR1cm4gaW5wdXQgc3RyZWFtCi0gICAgcmV0dXJuIGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgaW5wdXQgc3RyZWFtIGZyb20gYSBVUkwuCi0gICAqIEBwYXJhbSB1cmxGaWxlIHRoZSBVUkwgdG8gZ2V0IHRoZSBpbnB1dCBzdHJlYW0gZnJvbS4KLSAgICogQHJldHVybiB0aGUgaW5wdXQgc3RyZWFtIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIFVSTC4KLSAgICogQHRocm93cyBJT0V4Y2VwdGlvbiBpZiBhdHRlbXB0IHRvIG9wZW4gdGhlIGZpbGUgZGVub3RlZCBieSBVUkwgaGFzIGZhaWxlZC4KLSAgICogQHRocm93cyBDb25uZWN0RXhjZXB0aW9uIGlmIHRyb3VibGUgY29ubmVjdGluZyB0byBVUkwuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIElucHV0U3RyZWFtIGdldElucHV0U3RyZWFtKFVSTCB1cmxGaWxlKQotICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29ubmVjdEV4Y2VwdGlvbgotICB7Ci0gICAgSW5wdXRTdHJlYW0gaXMgPSBudWxsOwotCi0gICAgLy8gQUREOiBob3cgYXJlIFVSTHMgdGhhdCBhcmUgcGFzc3dvcmQgcHJvdGVjdGVkIGhhbmRsZWQ/Pz8/Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBPcGVuIGZpbGUgaW5wdXQgc3RyZWFtCi0gICAgICBpcyA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKHVybEZpbGUub3BlblN0cmVhbSgpKTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoQ29ubmVjdEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vIFJlLXRocm93IHRoaXMgZXhjcGV0aW9uIHdpdGggYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICAgICAgdGhyb3cgbmV3IGphdmEubmV0LkNvbm5lY3RFeGNlcHRpb24oCi0gICAgICAgICJDb3VsZCBub3QgY29ubmVjdCB0byBVUkw6ICIgKyB1cmxGaWxlLnRvRXh0ZXJuYWxGb3JtKCkgKyAiLiIpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBpbnB1dCBzdHJlYW0KLSAgICByZXR1cm4gaXM7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGNvbnRlbnRzIG9mIGEgcmVzb3VyY2UgYW5kIHJldHVybiBhcyBhIGlucHV0IHN0cmVhbS4KLSAgICogQHBhcmFtIGZpbGVMb2NhdGlvbiB0aGUgbG9jYXRpb24gb2YgdGhlIGZpbGUuCi0gICAqIEByZXR1cm4gY29udGVudHMgb2YgYSByZXNvdXJjZSBhcyBhIGlucHV0IHN0cmVhbS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBmaWxlRXhpc3RzKFN0cmluZyBmaWxlTG9jYXRpb24pCi0gIHsKLSAgICBib29sZWFuIGZpbGVFeGlzdHMgPSBmYWxzZTsKLQotICAgIC8vIElmIHJlc291cmNlIHJlZmVyZW5jZSBpcyBhIFVSTCwgdGhlbiBpbnB1dCBzdHJlYW0gZnJvbSBVUkwKLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBUcnkgdG8gY3JlYXRlIFVSTAotICAgICAgVVJMIHVybCA9IG5ldyBVUkwoZmlsZUxvY2F0aW9uKTsKLQotICAgICAgLy8gSWYgc3VjY2Vzc2Z1bCwgdGhlbiB0cnkgdG8gb3BlbiBjb25uZWN0aW9uCi0gICAgICB1cmwub3BlblN0cmVhbSgpOwotICAgICAgZmlsZUV4aXN0cyA9IHRydWU7Ci0gICAgfQotCi0gICAgLy8gRWxzZSB0cnkgdG8gcmVhZCByZXNvdXJjZSBkaXJlY3RseQotICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gbXVlKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBGaWxlIGZpbGUgPSBuZXcgRmlsZShmaWxlTG9jYXRpb24pOwotCi0gICAgICAgIGZpbGVFeGlzdHMgPSBmaWxlLmV4aXN0cygpOwotICAgICAgfQotCi0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGUyKQotICAgICAgewotICAgICAgICBmaWxlRXhpc3RzID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBmbmZlKQotICAgIHsKLSAgICAgIGZpbGVFeGlzdHMgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZmlsZUV4aXN0cyA9IGZhbHNlOwotICAgIH0KLQotICAgIC8vIFJldHVybiBmaWxlIGV4aXN0cyBpbmRpY2F0b3IKLSAgICByZXR1cm4gZmlsZUV4aXN0czsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgbG9jYWwgaG9zdCBuYW1lLgotICAgKiBAcmV0dXJuIHRoZSBsb2NhbCBob3N0IG5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRMb2NhbEhvc3ROYW1lKCkKLSAgewotICAgIFN0cmluZyBzTG9jYWxIb3N0TmFtZTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIEdldCBsb2NhbCBob3N0IG5hbWUKLSAgICAgIHNMb2NhbEhvc3ROYW1lID0gSW5ldEFkZHJlc3MuZ2V0TG9jYWxIb3N0KCkuZ2V0SG9zdE5hbWUoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vIFNldCBkZWZhdWx0IGxvY2FsIGhvc3QgbmFtZQotICAgICAgc0xvY2FsSG9zdE5hbWUgPSAiMTI3LjAuMC4xIjsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gbG9jYWwgaG9zdCBuYW1lCi0gICAgcmV0dXJuIHNMb2NhbEhvc3ROYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIEJ1aWxkIGEgVVJMIHN0cmluZyBmcm9tIGhvc3RuYW1lLCBwb3J0IGFuZCBVUk4uCi0gICAqCi0gICAqIEBwYXJhbSBob3N0bmFtZSB0aGUgaG9zdG5hbWUuCi0gICAqIEBwYXJhbSBwb3J0IHRoZSBwb3J0LgotICAgKiBAcGFyYW0gdXJuIHRoZSBVUk4uCi0gICAqIEByZXR1cm4gZm9ybWF0dGVkIFVSTCBzdHJpbmcuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBmb3JtYXRVUkwoU3RyaW5nIGhvc3RuYW1lLCBTdHJpbmcgcG9ydCwgU3RyaW5nIHVybikKLSAgewotICAgIC8vIEJ1aWxkIFVSTgotICAgIFN0cmluZyBmb3JtYXRVUk4gPSB1cm47Ci0KLSAgICAvLyBJZiBVUk4gZG9lc24ndCBzdGFydCB3aXRoICIvIiwgdGhlbiBhZGQgaXQKLSAgICBpZiAoIShmb3JtYXRVUk4uc3RhcnRzV2l0aCgiLyIpKSkKLSAgICB7Ci0gICAgICAvLyBBZGQgIi8iIHRvIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nCi0gICAgICBmb3JtYXRVUk4gPSAiLyIgKyB1cm47Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIFVSTCBzdHJpbmcKLSAgICByZXR1cm4gImh0dHA6Ly8iICsgaG9zdG5hbWUgKyAiOiIgKyBwb3J0ICsgZm9ybWF0VVJOOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoaXMgbWV0aG9kIHdpbGwgcmVwbGFjZSBhbGwgb2YgdGhlIG9jY3VyYW5jZXMgb2YgYSBzdHJpbmcKLSAgICogd2l0aCBhIHN1YnN0aXR1dGlvbiBzdHJpbmcuCi0gICAqCi0gICAqIEBwYXJhbSBzVGV4dCBTdHJpbmcgdG8gdWRwYXRlLgotICAgKiBAcGFyYW0gc0ZpbmQgU3RyaW5nIHRvIGZpbmQuCi0gICAqIEBwYXJhbSBzUmVwbGFjZSBTdHJpbmcgdG8gdXNlIGZvciBzdWJzdGl0dXRpb24uCi0gICAqIEByZXR1cm4gdXBkYXRlZCBzdHJpbmcuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyByZXBsYWNlU3RyaW5nKAotICAgIFN0cmluZyBzVGV4dCwKLSAgICBTdHJpbmcgc0ZpbmQsCi0gICAgU3RyaW5nIHNSZXBsYWNlKQotICB7Ci0gICAgaW50IGlQcmV2SW5kZXggPSAwOwotCi0gICAgaW50IGlGaW5kTGVuID0gc0ZpbmQubGVuZ3RoKCk7Ci0gICAgaW50IGlSZXBsYWNlTGVuID0gc1JlcGxhY2UubGVuZ3RoKCk7Ci0KLSAgICBTdHJpbmcgc1VwZGF0ZWRUZXh0ID0gc1RleHQ7Ci0KLSAgICAvLyBSZXBsYWNlIGFsbCBvY2N1cmFuY2VzIG9mIHRoZSBmaW5kIHN0cmluZwotICAgIGZvciAoaW50IGlJbmRleCA9IHNVcGRhdGVkVGV4dC5pbmRleE9mKHNGaW5kKTsKLSAgICAgIGlJbmRleCA8IChzVXBkYXRlZFRleHQubGVuZ3RoKCkgLSAxKSAmJiBpSW5kZXggIT0gLTE7Ci0gICAgICBpSW5kZXggPSBzVXBkYXRlZFRleHQuaW5kZXhPZihzRmluZCwgaVByZXZJbmRleCArIGlSZXBsYWNlTGVuKSkKLSAgICB7Ci0gICAgICAvLyBTZXQgdXBkYXRlZCB0ZXh0IGZyb20gdGhlIGZyb250IHBvcnRpb24gKyByZXBsYWNlbWVudCB0ZXh0ICsgYmFjayBwb3J0aW9uCi0gICAgICBzVXBkYXRlZFRleHQgPQotICAgICAgICBzVXBkYXRlZFRleHQuc3Vic3RyaW5nKDAsIGlJbmRleCkKLSAgICAgICAgICArIHNSZXBsYWNlCi0gICAgICAgICAgKyBzVXBkYXRlZFRleHQuc3Vic3RyaW5nKGlJbmRleCArIGlGaW5kTGVuKTsKLQotICAgICAgLy8gU2V0IHRoZSBwcmV2aW91cyBpbmRleCBmaWVsZAotICAgICAgaVByZXZJbmRleCA9IGlJbmRleDsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gdXBkYXRlZCB0ZXh0IHN0cmluZwotICAgIHJldHVybiBzVXBkYXRlZFRleHQ7Ci0gIH0KLQotICAvKioKLSAgICogQ29udmVydCBzdHJpbmcgdG8gaGV4IHN0cmluZy4KLSAgICogQHBhcmFtIGRhdGEgIGEgU3RyaW5nIG9iamVjdC4KLSAgICogQHJldHVybiBoZXggc3RyaW5nLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgdG9IZXhTdHJpbmcoU3RyaW5nIGRhdGEpCi0gIHsKLSAgICBjaGFyW10gSEVYX0NIQVJTID0KLSAgICAgIHsKLSAgICAgICAgJzAnLAotICAgICAgICAnMScsCi0gICAgICAgICcyJywKLSAgICAgICAgJzMnLAotICAgICAgICAnNCcsCi0gICAgICAgICc1JywKLSAgICAgICAgJzYnLAotICAgICAgICAnNycsCi0gICAgICAgICc4JywKLSAgICAgICAgJzknLAotICAgICAgICAnQScsCi0gICAgICAgICdCJywKLSAgICAgICAgJ0MnLAotICAgICAgICAnRCcsCi0gICAgICAgICdFJywKLSAgICAgICAgJ0YnIH07Ci0KLSAgICAvLyBHZXQgc3RyaW5nIGFzIGJ5dGUgYXJyYXkKLSAgICBieXRlW10gYnl0ZURhdGEgPSBkYXRhLmdldEJ5dGVzKCk7Ci0KLSAgICAvLyBHZXQgbGVuZ3RoCi0gICAgaW50IGxlbmd0aCA9IGJ5dGVEYXRhLmxlbmd0aDsKLQotICAgIC8vIENyZWF0ZSBDaGFyIGJ1ZmZlcgotICAgIGNoYXJbXSBjaGFyQnVmZmVyID0gbmV3IGNoYXJbbGVuZ3RoICogMl07Ci0KLSAgICBpbnQgbmV4dDsKLSAgICBmb3IgKGludCBieXRlQ250ID0gMCwgY2hhckNudCA9IDA7IGJ5dGVDbnQgPCBsZW5ndGg7KQotICAgIHsKLSAgICAgIG5leHQgPSBieXRlRGF0YVtieXRlQ250KytdOwotICAgICAgY2hhckJ1ZmZlcltjaGFyQ250KytdID0gSEVYX0NIQVJTWyhuZXh0ID4+PiA0KSAmIDB4MEZdOwotICAgICAgY2hhckJ1ZmZlcltjaGFyQ250KytdID0gSEVYX0NIQVJTW25leHQgJiAweDBGXTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbmV3IFN0cmluZyhjaGFyQnVmZmVyKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb252ZXJ0IGJ5dGUgYnVmZmVyIHRvIGhleCBzdHJpbmcuCi0gICAqIEBwYXJhbSBkYXRhICBhIGJ5dGUgYXJyYXkuCi0gICAqIEByZXR1cm4gaGV4IHN0cmluZy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHRvSGV4U3RyaW5nKGJ5dGVbXSBieXRlRGF0YSkKLSAgewotICAgIGNoYXJbXSBIRVhfQ0hBUlMgPQotICAgICAgewotICAgICAgICAnMCcsCi0gICAgICAgICcxJywKLSAgICAgICAgJzInLAotICAgICAgICAnMycsCi0gICAgICAgICc0JywKLSAgICAgICAgJzUnLAotICAgICAgICAnNicsCi0gICAgICAgICc3JywKLSAgICAgICAgJzgnLAotICAgICAgICAnOScsCi0gICAgICAgICdBJywKLSAgICAgICAgJ0InLAotICAgICAgICAnQycsCi0gICAgICAgICdEJywKLSAgICAgICAgJ0UnLAotICAgICAgICAnRicgfTsKLQotCi0gICAgLy8gR2V0IGxlbmd0aAotICAgIGludCBsZW5ndGggPSBieXRlRGF0YS5sZW5ndGg7Ci0KLSAgICAvLyBDcmVhdGUgQ2hhciBidWZmZXIKLSAgICBjaGFyW10gY2hhckJ1ZmZlciA9IG5ldyBjaGFyW2xlbmd0aCAqIDJdOwotCi0gICAgaW50IG5leHQ7Ci0gICAgZm9yIChpbnQgYnl0ZUNudCA9IDAsIGNoYXJDbnQgPSAwOyBieXRlQ250IDwgbGVuZ3RoOykKLSAgICB7Ci0gICAgICBuZXh0ID0gYnl0ZURhdGFbYnl0ZUNudCsrXTsKLSAgICAgIGNoYXJCdWZmZXJbY2hhckNudCsrXSA9IEhFWF9DSEFSU1sobmV4dCA+Pj4gNCkgJiAweDBGXTsKLSAgICAgIGNoYXJCdWZmZXJbY2hhckNudCsrXSA9IEhFWF9DSEFSU1tuZXh0ICYgMHgwRl07Ci0gICAgfQotCi0gICAgcmV0dXJuIG5ldyBTdHJpbmcoY2hhckJ1ZmZlcik7Ci0gIH0KLQotICAvLyBJMThOOiAyMDAzLjAyLjI2IG1vZGlmaWVkIGJ5IEsuTmFrYWdvbWVAQmVhY29uSVQKLSAgLyoqCi0gICAqIEdldCBNSU1FIGNoYXJzZXQgZnJvbSBhIEhUVFAgaGVhZGVycy4KLSAgICogQHBhcmFtIGh0dHBIZWFkZXJzIFN0cmluZyBvZiBIVFRQIGhlYWRlci4KLSAgICogQHJldHVybiB0aGUgTUlNRSBjaGFyc2V0IHN0cmluZy4KLSAgICogQGF1dGhvciBLLk5ha2Fnb21lQEJlYWNvbklUIEphcGFuIFNJRyAKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEhUVFBDaGFyc2V0KFN0cmluZyBodHRwSGVhZGVycykKLSAgewotICAgIFN0cmluZyBtaW1lQ2hhcnNldCA9IG51bGw7Ci0KLSAgICBtaW1lQ2hhcnNldCA9IGh0dHBIZWFkZXJzLnRvVXBwZXJDYXNlKCk7Ci0gICAgaW50W10gaW5kZXggPSB7IC0xLCAtMSwgLTEgfTsKLSAgICBpbnQgaW5kZXhTID0gbWltZUNoYXJzZXQuaW5kZXhPZigiQ0hBUlNFVCIpOwotICAgIGludCBpbmRleEUgPSBJbnRlZ2VyLk1BWF9WQUxVRTsKLSAgICBpZiAoaW5kZXhTIDwgMTcpCi0gICAgewotICAgICAgcmV0dXJuICIiOwotICAgIH0KLSAgICBpbmRleFMgPSBtaW1lQ2hhcnNldC5pbmRleE9mKCI9IiwgaW5kZXhTICsgNyk7Ci0gICAgaWYgKGluZGV4UyA9PSAtMSkKLSAgICB7Ci0gICAgICByZXR1cm4gIiI7Ci0gICAgfQotICAgIGluZGV4UysrOwotICAgIGluZGV4WzBdID0gbWltZUNoYXJzZXQuaW5kZXhPZigiJyIsIGluZGV4Uyk7Ci0gICAgaW5kZXhbMV0gPSBtaW1lQ2hhcnNldC5pbmRleE9mKCJcclxuIiwgaW5kZXhTKTsKLSAgICBpbmRleFsyXSA9IG1pbWVDaGFyc2V0LmluZGV4T2YoIlwiIiwgaW5kZXhTKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7IGkrKykKLSAgICB7Ci0gICAgICBpZiAoaW5kZXhbaV0gIT0gLTEgJiBpbmRleEUgPiBpbmRleFtpXSkKLSAgICAgIHsKLSAgICAgICAgaW5kZXhFID0gaW5kZXhbaV07Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGluZGV4RSAhPSBJbnRlZ2VyLk1BWF9WQUxVRSkKLSAgICB7Ci0gICAgICBtaW1lQ2hhcnNldCA9IGh0dHBIZWFkZXJzLnN1YnN0cmluZyhpbmRleFMsIGluZGV4RSk7Ci0gICAgICBtaW1lQ2hhcnNldC50cmltKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBtaW1lQ2hhcnNldCA9ICIiOwotICAgIH0KLSAgICByZXR1cm4gbWltZUNoYXJzZXQ7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2tzIHRvIHNlZSBpZiB0aGUgbWVzc2FnZSBpcyBhIHNpbXBsZSBTT0FQIG1lc3NhZ2Ugb3Igd2hldGhlciBpdCBpcyBhIFNPQVAgbWVzc2Fnd2Ugd2l0aCBhdHRhY2htZW50cy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc011bHRpcGFydFJlbGF0ZWRNZXNzYWdlKFN0cmluZyBodHRwSGVhZGVycykKLSAgewotICAJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLSAgICB0cnkgCi0gICAgewotICAgICAgLy8gY2hlY2sgaGVhZGVyIGZvciBtaW1lIHZlcnNpb24gYW5kIGJvdW5kYXJ5Ci0gICAgICBTdHJpbmcgY29udGVudFR5cGUgPSBIVFRQVXRpbHMuZ2V0SHR0cEhlYWRlckF0dHJpYnV0ZShodHRwSGVhZGVycywgSFRUUENvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9UWVBFKTsKLSAgICAgIGlmIChjb250ZW50VHlwZSA9PSBudWxsKQotICAgICAgewotICAgICAgICAvLyB0aGVyZSBpcyBubyBjb250ZW50VHlwZSwgY2hlY2sgaWYgdGhlcmUgaXMgYSBib3VuZGFyeSBhdHRyaWJ1dGUKLSAgICAgICAgU3RyaW5nIGJvdW5kYXJ5ID0gVXRpbHMuZ2V0SHR0cEhlYWRlclN1YkF0dHJpYnV0ZShodHRwSGVhZGVycywgSFRUUENvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9UWVBFLCAiYm91bmRhcnkiKTsKLSAgICAgICAgaWYgKChib3VuZGFyeSAhPSBudWxsKSAmJiAoIWJvdW5kYXJ5LmVxdWFscygiIikpKQotICAgICAgICAgICByZXN1bHQgPSB0cnVlOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICByZXN1bHQgPSBjb250ZW50VHlwZS5lcXVhbHNJZ25vcmVDYXNlKCJtdWx0aXBhcnQvcmVsYXRlZCIpOwotICAgICAgfQotICAgIH0gCi0gICAgY2F0Y2ggKFdTSUV4Y2VwdGlvbiBlKQotCXsgCi0gICAgCXJlc3VsdCA9IGZhbHNlOyAKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEh0dHBIZWFkZXJBdHRyaWJ1dGUoU3RyaW5nIGh0dHBIZWFkZXJzLCBTdHJpbmcgYXR0cmlidXRlTmFtZSkKLSAgeyBTdHJpbmcgcmVzdWx0ID0gbnVsbDsKLSAgCXRyeQotICAJewotICAgICByZXN1bHQgPSBIVFRQVXRpbHMuZ2V0SHR0cEhlYWRlckF0dHJpYnV0ZShodHRwSGVhZGVycywgYXR0cmlidXRlTmFtZSk7Ci0gIAl9Ci0gICAgY2F0Y2ggKFdTSUV4Y2VwdGlvbiBlKQotCXsgCi0gICAgCXJlc3VsdCA9IG51bGw7IAotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRIdHRwSGVhZGVyU3ViQXR0cmlidXRlKFN0cmluZyBodHRwSGVhZGVycywgU3RyaW5nIGF0dHJpYnV0ZU5hbWUsIFN0cmluZyBzdWJBdHRyaWJ1dGVOYW1lKQotICB7IFN0cmluZyByZXN1bHQgPSBudWxsOwotICAJdHJ5Ci0gIAl7Ci0gICAgIHJlc3VsdCA9IEhUVFBVdGlscy5nZXRIdHRwSGVhZGVyU3ViQXR0cmlidXRlKGh0dHBIZWFkZXJzLCBhdHRyaWJ1dGVOYW1lLCBzdWJBdHRyaWJ1dGVOYW1lKTsKLSAgCX0KLSAgICBjYXRjaCAoV1NJRXhjZXB0aW9uIGUpCi0JeyAKLSAgICAJcmVzdWx0ID0gbnVsbDsgCi0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldE1pbWVIZWFkZXJBdHRyaWJ1dGUoU3RyaW5nIG1pbWVIZWFkZXJzLCBTdHJpbmcgYXR0cmlidXRlTmFtZSkKLSAgeyBTdHJpbmcgcmVzdWx0ID0gbnVsbDsKLSAgCXRyeQotICAJewotICAgICByZXN1bHQgPSBNSU1FVXRpbHMuZ2V0TWltZUhlYWRlckF0dHJpYnV0ZShtaW1lSGVhZGVycywgYXR0cmlidXRlTmFtZSk7Ci0gIAl9Ci0gICAgY2F0Y2ggKFdTSUV4Y2VwdGlvbiBlKQotCXsgCi0gICAgCXJlc3VsdCA9IG51bGw7IAotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRNaW1lSGVhZGVyU3ViQXR0cmlidXRlKFN0cmluZyBtaW1lSGVhZGVycywgU3RyaW5nIGF0dHJpYnV0ZU5hbWUsIFN0cmluZyBzdWJBdHRyaWJ1dGVOYW1lKQotICB7IFN0cmluZyByZXN1bHQgPSBudWxsOwotICAJdHJ5Ci0gIAl7Ci0gICAgIHJlc3VsdCA9IE1JTUVVdGlscy5nZXRNaW1lSGVhZGVyU3ViQXR0cmlidXRlKG1pbWVIZWFkZXJzLCBhdHRyaWJ1dGVOYW1lLCBzdWJBdHRyaWJ1dGVOYW1lKTsKLSAgCX0KLSAgICBjYXRjaCAoV1NJRXhjZXB0aW9uIGUpCi0JeyAKLSAgICAJcmVzdWx0ID0gbnVsbDsgCi0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gfQotICAvLyBJMThOOiAyMDAzLjAyLjI2IG1vZGlmaWVkIGJ5IEsuTmFrYWdvbWVAQmVhY29uSVQKLSAgLyoqCi0gICAqIEdldCBYTUwgZW5jb2RpbmcgZnJvbSBhIFNPQVAgTWVzc2FnZXMuCi0gICAqIEBwYXJhbSBtZXNzYWdlICBTT0FQIE1lc3NhZ2UgU3RyaW5nLiAKLSAgICogQHJldHVybiBjaGFyYWN0ZXIgZW5jb2Rpbmcgb2YgWE1MLgotICAgKiBAYXV0aG9yIEsuTmFrYWdvbWVAQmVhY29uSVQgSmFwYW4gU0lHIAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0WE1MRW5jb2RpbmcoU3RyaW5nIG1lc3NhZ2UpCi0gIHsKLSAgICBTdHJpbmcgeG1sRGVmID0gbnVsbDsKLQotICAgIGludCBpbmRleFMgPSBtZXNzYWdlLmluZGV4T2YoIjw/eG1sIik7Ci0gICAgaW50IGluZGV4RSA9IC0xOwotICAgIGlmIChpbmRleFMgIT0gLTEpCi0gICAgewotICAgICAgaW5kZXhFID0gbWVzc2FnZS5pbmRleE9mKCI/PiIsIGluZGV4Uyk7Ci0gICAgICBpZiAoaW5kZXhFID4gaW5kZXhTKQotICAgICAgewotICAgICAgICB4bWxEZWYgPSBtZXNzYWdlLnN1YnN0cmluZyhpbmRleFMsIGluZGV4RSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHhtbERlZiAhPSBudWxsKQotICAgIHsKLSAgICAgIGluZGV4UyA9IHhtbERlZi5pbmRleE9mKCJlbmNvZGluZyIpOwotICAgICAgaWYgKGluZGV4UyA9PSAtMSkKLSAgICAgIHsKLSAgICAgICAgeG1sRGVmID0gIiI7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHhtbERlZiA9IHhtbERlZi5zdWJzdHJpbmcoaW5kZXhTICsgOCk7Ci0gICAgICAgIHhtbERlZiA9IHhtbERlZi50cmltKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXR1cm4gIiI7Ci0gICAgfQotCi0gICAgaWYgKHhtbERlZi5sZW5ndGgoKSA+IDMpCi0gICAgewotICAgICAgaW5kZXhTID0geG1sRGVmLmluZGV4T2YoIj0iKTsKLSAgICAgIGlmIChpbmRleFMgPT0gMCkKLSAgICAgIHsKLSAgICAgICAgeG1sRGVmID0geG1sRGVmLnN1YnN0cmluZygxKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuICIiOwotICAgICAgfQotICAgIH0KLQotICAgIGlmICh4bWxEZWYubGVuZ3RoKCkgPiAzKQotICAgIHsKLSAgICAgIFN0cmluZyBlbmQgPSAiXCIiOwotICAgICAgaW5kZXhTID0geG1sRGVmLmluZGV4T2YoZW5kKTsKLSAgICAgIGlmIChpbmRleFMgIT0gMCkKLSAgICAgIHsKLSAgICAgICAgaW5kZXhTID0geG1sRGVmLmluZGV4T2YoKGVuZCA9ICInIikpOwotICAgICAgfQotICAgICAgaWYgKGluZGV4UyA9PSAwKQotICAgICAgewotICAgICAgICBpbmRleEUgPSB4bWxEZWYuaW5kZXhPZihlbmQsIDMpOwotICAgICAgICBpZiAoaW5kZXhFICE9IC0xKQotICAgICAgICB7Ci0gICAgICAgICAgeG1sRGVmID0geG1sRGVmLnN1YnN0cmluZygxLCBpbmRleEUpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHhtbERlZiA9ICIiOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHhtbERlZiA9ICIiOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4geG1sRGVmOwotICB9Ci0KLSAgLy8gSTE4TjogMjAwMy4wMi4yNiBtb2RpZmllZCBieSBLLk5ha2Fnb21lQEJlYWNvbklUCi0gIHByaXZhdGUgc3RhdGljIFJlc291cmNlQnVuZGxlIGphdmFFbmNvZGluZ1Jlc291cmNlID0gbnVsbDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEpBVkFfRU5DT0RJTkdfUkVTT1VSQ0UgPQotICAgICJvcmcud3NpLnRlc3QudXRpbC5KYXZhRW5jb2RpbmciOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSkFWQV9FTkNPRElOR19ERUZBVUxUID0gIlVURi04IjsKLQotICAvLyBJMThOOiAyMDAzLjAyLjI2IG1vZGlmaWVkIGJ5IEsuTmFrYWdvbWVAQmVhY29uSVQKLSAgLyoqCi0gICAqIEdldCBKYXZhIFZNIHN1cHBvcnRlZCBjaGFyYWN0ZXIgZW5jb2RpbmcuCi0gICAqIAotICAgKiBAcGFyYW0gbWltZUVuY29kaW5nICBzdHJpbmcgb2YgTUlNRShJQU5BKSBjaGFyYWN0ZXIgZW5jb2RpbmcuIAotICAgKiBAcmV0dXJuIHN0cmluZyBvZiBjaGFyYWN0ZXIgZW5jb2Rpbmcgc3VwcG9ydGVkIGJ5IEphdmEgVk0uCi0gICAqIEBhdXRob3IgSy5OYWthZ29tZUBCZWFjb25JVCBKYXBhbiBTSUcgCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRKYXZhRW5jb2RpbmcoU3RyaW5nIG1pbWVFbmNvZGluZykKLSAgewotICAgIGlmIChtaW1lRW5jb2RpbmcgPT0gbnVsbCB8fCBtaW1lRW5jb2RpbmcubGVuZ3RoKCkgPT0gMCkKLSAgICB7Ci0gICAgICByZXR1cm4gSkFWQV9FTkNPRElOR19ERUZBVUxUOwotICAgIH0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBpZiAoamF2YUVuY29kaW5nUmVzb3VyY2UgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgamF2YUVuY29kaW5nUmVzb3VyY2UgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoSkFWQV9FTkNPRElOR19SRVNPVVJDRSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gamF2YUVuY29kaW5nUmVzb3VyY2UuZ2V0U3RyaW5nKG1pbWVFbmNvZGluZyk7Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICB7Ci0gICAgICByZXR1cm4gbWltZUVuY29kaW5nOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBDb252ZXJ0IGFuIGFycmF5IHRvIGEgVmVjdG9yLgotICAgKiAKLSAgICogQHBhcmFtIGFycmF5ICB0aGUgYXJyYXkgdG8gYmUgY29udmVydGVkIC4KLSAgICogQHJldHVybiBjb252ZXJ0ZWQgVmVjdG9yIChudWxsIGlmIGFycmF5IGlzIG51bGwsIGVtcHR5IGlmIGVtcHR5KS4KLSAgICogQGF1dGhvciBHcmFoYW0gVHVycmVsbCBJQk0KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVmVjdG9yIGFycmF5VG9WZWN0b3IoT2JqZWN0W10gYXJyYXkpCi0gIHsKLSAgICBpZiAoYXJyYXkgPT0gbnVsbCkKLSAgICAgIHJldHVybiBudWxsOwotICAgIFZlY3RvciB2ID0gbmV3IFZlY3RvcihhcnJheS5sZW5ndGgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspCi0gICAgICB2LmFkZChhcnJheVtpXSk7Ci0gICAgcmV0dXJuIHY7Ci0gIH0KLQotICAvKioKLSAgICogRGVzaWduYXRlcyBsZWdhbCB2ZXJzaW9ucyBmb3IgdGhlIHByb2ZpbGUgdGVzdCBhc3NlcnRpb24gZG9jdW1lbnQKLSAgICogQHBhcmFtIG5hbWUgLSB0aGUgVEFEIG5hbWUKLSAgICogQHBhcmFtIHZlcnNpb24gLSB0aGUgbGVnYWwgdmVyc2lvbgotICAgKi8KLSAgcHVibGljIHN0YXRpYyB2b2lkIHJlZ2lzdGVyVmFsaWRQcm9maWxlVEFEVmVyc2lvbihTdHJpbmcgbmFtZSwgU3RyaW5nIHZlcnNpb24pCi0gIHsKLSAgICAgIGlmICh2YWxpZFByb2ZpbGVUQURWZXJzaW9ucyA9PSBudWxsKQotICAgICAgICAgIHZhbGlkUHJvZmlsZVRBRFZlcnNpb25zID0gbmV3IEhhc2hNYXAoKTsKLSAgICAgIHZhbGlkUHJvZmlsZVRBRFZlcnNpb25zLnB1dChuYW1lLCB2ZXJzaW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIENoZWNrcyB0byBlbnN1cmUgdGhhdCB2ZXJzaW9uIG9mIHRoZSBwcm9maWxlIHRlc3QgYXNzZXJ0aW9uIAotICAgKiBkb2N1bWVudCBpcyBzdXBwb3J0ZWQgaW4gdGhpcyB2ZXJzaW9uIG9mIHRoZSB0ZXN0IHRvb2xzLgotICAgKiBAcGFyYW0gcHJvZmlsZUFzc2VydGlvbnMgLSBhIHByb2ZpbGUgVEFELgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHZlcnNpb24gb2YgdGhlIHByb2ZpbGUgdGVzdCBhc3NlcnRpb24KLSAgICogICAgICAgICBkb2N1ZW1lbnQgaXMgc3VwcG9ydGVkIGluIHRoaXMgdmVyc2lvbiBvZiB0aGUgdGVzdCB0b29scy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1ZhbGlkUHJvZmlsZVRBRFZlcnNpb24oUHJvZmlsZUFzc2VydGlvbnMgcHJvZmlsZUFzc2VydGlvbnMpCi0gIHsKLQotICAgIFN0cmluZyBuYW1lID0gcHJvZmlsZUFzc2VydGlvbnMuZ2V0VEFETmFtZSgpOwotICAgIFN0cmluZyB2ZXJzaW9uID0gcHJvZmlsZUFzc2VydGlvbnMuZ2V0VEFEVmVyc2lvbigpOwotICAgIAotICAgIGlmICh2YWxpZFByb2ZpbGVUQURWZXJzaW9ucyA9PSBudWxsKSB7Ci0gICAgICAgU3RyaW5nIHZlcnNpb25zW11bXSA9IFdTSVRlc3RUb29sc1BsdWdpbi5nZXRQbHVnaW4oKS5nZXRBbGxUQURWZXJzaW9ucygpOwotICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmVyc2lvbnMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgIHJlZ2lzdGVyVmFsaWRQcm9maWxlVEFEVmVyc2lvbih2ZXJzaW9uc1tpXVswXSwgdmVyc2lvbnNbaV1bMV0pOwotICAgIH0KLQotICAgIGlmICh2YWxpZFByb2ZpbGVUQURWZXJzaW9ucy5jb250YWluc0tleShuYW1lKSkKLSAgICAgICAgcmV0dXJuIGNoZWNrVmVyc2lvbk51bWJlcigoU3RyaW5nKSB2YWxpZFByb2ZpbGVUQURWZXJzaW9ucy5nZXQobmFtZSksCi0gICAgICAgICAgICAgICAgdmVyc2lvbik7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2tzIHRvIGVuc3VyZSB0aGF0IHZlcnNpb24gbnVtYmVyIG9mIHRoZSBhY3R1YWwgcHJvZmlsZSB0ZXN0IGFzc2VydGlvbiAKLSAgICogZG9jdW1lbnQgaXMgc3VwcG9ydGVkIGluIHRoaXMgdmVyc2lvbiBvZiB0aGUgdGVzdCB0b29scy4KLSAgICogQHBhcmFtIHN1cHBvcnRlZFZlcnNpb24gLSBzdXBwb3J0ZWQgdmVyc2lvbiBudW1iZXIgb2YgcHJvZmlsZSBUQUQuCi0gICAqIEBwYXJhbSBhY3R1YWxWZXJzaW9uICAgIC0gYWN0dWFsIHZlcnNpb24gbnVtYmVyIG9mIHByb2ZpbGUgVEFELiAKLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgYWN0dWFsIHByb2ZpbGUgdGVzdCBhc3NlcnRpb24KLSAgICogICAgICAgICBkb2N1bWVudCBpcyBzdXBwb3J0ZWQgaW4gdGhpcyB2ZXJzaW9uIG9mIHRoZSB0ZXN0IHRvb2xzLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBjaGVja1ZlcnNpb25OdW1iZXIoCi0gICAgU3RyaW5nIHN1cHBvcnRlZFZlcnNpb24sCi0gICAgU3RyaW5nIGFjdHVhbFZlcnNpb24pCi0gIHsKLSAgICBib29sZWFuIHZhbGlkVmVyc2lvbiA9IHRydWU7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBTdHJpbmdUb2tlbml6ZXIgc3VwcG9ydGVkVmVyc2lvblRva2VuaXplciA9Ci0gICAgICAgIG5ldyBTdHJpbmdUb2tlbml6ZXIoc3VwcG9ydGVkVmVyc2lvbiwgIi4iKTsKLSAgICAgIFN0cmluZ1Rva2VuaXplciBhY3R1YWxWZXJzaW9uVG9rZW5pemVyID0KLSAgICAgICAgbmV3IFN0cmluZ1Rva2VuaXplcihhY3R1YWxWZXJzaW9uLCAiLiIpOwotCi0gICAgICB3aGlsZSAoc3VwcG9ydGVkVmVyc2lvblRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkgJiYgdmFsaWRWZXJzaW9uKQotICAgICAgewotICAgICAgICBpbnQgc3VwcG9ydGVkVmVyc2lvblRva2VuID0KLSAgICAgICAgICBJbnRlZ2VyLnBhcnNlSW50KHN1cHBvcnRlZFZlcnNpb25Ub2tlbml6ZXIubmV4dFRva2VuKCkpOwotICAgICAgICBpZiAoYWN0dWFsVmVyc2lvblRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpCi0gICAgICAgIHsKLSAgICAgICAgICBpbnQgYWN0dWFsVmVyc2lvblRva2VuID0KLSAgICAgICAgICAgIEludGVnZXIucGFyc2VJbnQoYWN0dWFsVmVyc2lvblRva2VuaXplci5uZXh0VG9rZW4oKSk7Ci0gICAgICAgICAgaWYgKHN1cHBvcnRlZFZlcnNpb25Ub2tlbiA+IGFjdHVhbFZlcnNpb25Ub2tlbikgYnJlYWs7Ci0gICAgICAgICAgZWxzZSB2YWxpZFZlcnNpb24gPSAoc3VwcG9ydGVkVmVyc2lvblRva2VuID49IGFjdHVhbFZlcnNpb25Ub2tlbik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHZhbGlkVmVyc2lvbiA9IGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdmFsaWRWZXJzaW9uOwotICB9Ci0gIAotICAvKioKLSAgICogSWRlbnRpZmllcyB0aGUgcm9vdCBwYXJ0IGluIHRoZSBsaXN0IHVzaW5nIHRoZSAic3RhcnQiIGF0dHJpYnV0ZS4KLSAgICogSWYgdGhlICJzdGFydCIgYXR0cmlidXRlIGRvZXMgbm90IGV4aXN0IHRoZW4gdGhlIGZpcnN0IHBhcnQgaXMgZGVzaWduYXRlZCB0aGUgcm9vdC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgTWltZVBhcnQgZmluZFJvb3RQYXJ0KFN0cmluZyBodHRwSGVhZGVycywgQ29sbGVjdGlvbiBwYXJ0cykKLSAgewotICAJTWltZVBhcnQgcm9vdCA9IG51bGw7Ci0gICAgU3RyaW5nIHN0YXJ0ID0gVXRpbHMuZ2V0SHR0cEhlYWRlclN1YkF0dHJpYnV0ZShodHRwSGVhZGVycywgSFRUUENvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9UWVBFLCAic3RhcnQiKTsKLSAgICBpZiAoIXBhcnRzLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICAvLyBkZWZhdWx0IHRvIHRoZSBmaXJzdCBwYXJ0IGluIHRoZSBjb2xsZWN0aW9uCi0gICAgICByb290ID0gKE1pbWVQYXJ0KXBhcnRzLml0ZXJhdG9yKCkubmV4dCgpOwotICAgIAkKLSAgICAgIGlmICgoc3RhcnQgIT0gbnVsbCkgJiYgKCFzdGFydC5lcXVhbHMoIiIpKSkKLSAgICAgIHsKLSAgICAJSXRlcmF0b3IgaSA9IHBhcnRzLml0ZXJhdG9yKCk7Ci0gICAgCWJvb2xlYW4gcm9vdE5vdEZvdW5kID0gdHJ1ZTsKLSAgICAJd2hpbGUgKGkuaGFzTmV4dCgpICYmIHJvb3ROb3RGb3VuZCkKLSAgICAJewotICAgIAkgIE1pbWVQYXJ0IHBhcnQgPSAoTWltZVBhcnQpaS5uZXh0KCk7Ci0gICAgCSAgU3RyaW5nIGhlYWRlcnMgPSBwYXJ0LmdldEhlYWRlcnMoKTsKLSAgICAJICBpZiAoaGVhZGVycyAhPSBudWxsKQotICAgIAkgIHsKLSAgICAgICAgICAgIFN0cmluZyBjb250ZW50SWQgPSBVdGlscy5nZXRNaW1lSGVhZGVyQXR0cmlidXRlKGhlYWRlcnMsIE1JTUVDb25zdGFudHMuSEVBREVSX0NPTlRFTlRfSUQpOwotICAgICAgICAgICAgaWYgKHN0YXJ0LmVxdWFscyhjb250ZW50SWQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICByb290ID0gcGFydDsKLQkJCSAgcm9vdE5vdEZvdW5kID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgCSAgfQotICAgIAl9Ci0gICAgICB9Ci0gICAgfQotICAJcmV0dXJuIHJvb3Q7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBEZWNvZGVzIHRoZSBnaXZlbiBlbmNvZGVkIHN0cmluZy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYnl0ZVtdIGRlY29kZUJhc2U2NChTdHJpbmcgc3RyKQotICB7Ci0gIAl0cnkKLSAgCXsKLSAgICAJc3VuLm1pc2MuQkFTRTY0RGVjb2RlciBkZWNvZGVyID0gIG5ldyBzdW4ubWlzYy5CQVNFNjREZWNvZGVyKCk7Ci0gIAkgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlQnVmZmVyKHN0cik7Ci0gIAl9Ci0gIAljYXRjaCAoRXhjZXB0aW9uIGUpCi0gIAl7Ci0gIAkJcmV0dXJuIG5ldyBieXRlWzBdOwotICAJfQotICB9Ci0KLSAgLyoqCi0gICAqIEVuY29kZXMgdGhlIGdpdmVuIGJ5dGUgYXJyYXkuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBlbmNvZGVCYXNlNjQoYnl0ZVtdIGJ1ZmZlcikKLSAgeyAgICAKLSAgCXN1bi5taXNjLkJBU0U2NEVuY29kZXIgZW5jb2RlciA9ICBuZXcgc3VuLm1pc2MuQkFTRTY0RW5jb2RlcigpOwotICAJcmV0dXJuIGVuY29kZXIuZW5jb2RlQnVmZmVyKGJ1ZmZlcik7ICAKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgTWltZVBhcnRzIHBhcnNlTXVsdGlwYXJ0UmVsYXRlZE1lc3NhZ2UoU3RyaW5nIG1lc3NhZ2UsIFN0cmluZyBodHRwSGVhZGVycywgU3RyaW5nIGVuY29kaW5nKQotICB7Ci0gIAlieXRlW10gYnVmZmVyID0gbnVsbDsKLSAgCXRyeQotCXsgCi0gIAkgIGJ1ZmZlciA9IG1lc3NhZ2UuZ2V0Qnl0ZXMoZW5jb2RpbmcpOwotCX0KLSAgCWNhdGNoIChFeGNlcHRpb24gZSkKLQl7Ci0gIAkJcmV0dXJuIG51bGw7Ci0JfQotICAJcmV0dXJuIHBhcnNlTXVsdGlwYXJ0UmVsYXRlZE1lc3NhZ2UoYnVmZmVyLCBodHRwSGVhZGVycywgZW5jb2RpbmcpOwotICB9Ci0gIHB1YmxpYyBzdGF0aWMgTWltZVBhcnRzIHBhcnNlTXVsdGlwYXJ0UmVsYXRlZE1lc3NhZ2UoYnl0ZVtdIG1lc3NhZ2UsIFN0cmluZyBodHRwSGVhZGVycywgU3RyaW5nIGVuY29kaW5nKQotICB7Ci0gICAgTWltZVBhcnRzIG1pbWVQYXJ0cyA9IG5ldyBNaW1lUGFydHNJbXBsKCk7Ci0gICAgU3RyaW5nIGJvdW5kYXJ5ID0gVXRpbHMuZ2V0SHR0cEhlYWRlclN1YkF0dHJpYnV0ZShodHRwSGVhZGVycywgSFRUUENvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9UWVBFLCAiYm91bmRhcnkiKTsKLSAgICBBcnJheUxpc3QgcGFydHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgCi0gICAgaWYgKGJvdW5kYXJ5ID09IG51bGwpCi0gICAgewotICAgIAkvLyBhc3N1bWUgaXQgaXMgYSBzaW1wbGUgU09BUCBtZXNzYWdlCi0gICAgCXJldHVybiBudWxsOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgU3RyaW5nIHN0YXJ0ID0gVXRpbHMuZ2V0SHR0cEhlYWRlclN1YkF0dHJpYnV0ZShodHRwSGVhZGVycywgSFRUUENvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9UWVBFLCAic3RhcnQiKTsKLSAgICAgIGludFtdIGluZGljZXMgPSBVdGlscy5nZXRCb3VuZGFyeUluZGljZXMobWVzc2FnZSwgYm91bmRhcnkpOwotICAgICAgYm9vbGVhbiByb290Tm90Rm91bmQgPSB0cnVlOwotICAgICAgCi0gICAgICBmb3IgKGludCBpPSBpbmRpY2VzLmxlbmd0aCAtIDI7IGk+PTA7IGktLSkKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgCXsKLSAgICAgICAgICBNaW1lUGFydCBwYXJ0ID0gbmV3IE1pbWVQYXJ0SW1wbCgpOwotICAgICAgICAgIGludCBpbmRleCA9IFV0aWxzLmdldEZpcnN0Q1JMRkNSTEYobWVzc2FnZSwgaW5kaWNlc1tpXSk7Ci0gICAgICAgICAgaWYgKChpbmRleCA+IGluZGljZXNbaV0pICYmIChpbmRleCA8IGluZGljZXNbaSsxXSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gdGhlIGJvdW5kYXJ5IHN0cmluZyAmIG1pbWUgaGVhZGVycyAoaW5jbHVkZSB0aGUgdHJhaWxpbmcgQ1JMRiBDUkxGKQotICAgICAgICAJU3RyaW5nIHN0ciA9IG5ldyBTdHJpbmcobWVzc2FnZSwgaW5kaWNlc1tpXSwgKGluZGV4IC0gaW5kaWNlc1tpXSksICJVUy1BU0NJSSIpOwotICAgICAgICAJU3RyaW5nIGRlbGltaXRlciA9IHN0ci5zdWJzdHJpbmcoMCwgc3RyLmluZGV4T2YoIlxyXG4iLCAyKSArIDIpOwotCi0gICAgICAgIAlpZiAoaSA9PSBpbmRpY2VzLmxlbmd0aCAtMikKLSAgICAgICAgCXsKLSAgICAgICAgCSAgU3RyaW5nIGVuZERlbGltaXRlciA9IG5ldyBTdHJpbmcobWVzc2FnZSwgaW5kaWNlc1tpICsgMV0sIG1lc3NhZ2UubGVuZ3RoIC0gaW5kaWNlc1tpICsgMV0sICJVUy1BU0NJSSIpOwotICAgICAgICAJICBpbnQgaiA9IHN0ci5pbmRleE9mKCJcclxuIiwgMik7Ci0gICAgICAgIAkgIGlmIChqICE9IC0xKQotICAgICAgICAJICAgIGVuZERlbGltaXRlciA9IHN0ci5zdWJzdHJpbmcoMCwgc3RyLmluZGV4T2YoIlxyXG4iLCAyKSArIDIpOwotICAgICAgICAgICAgICBwYXJ0LnNldEJvdW5kYXJ5U3RyaW5ncyhuZXcgU3RyaW5nW117ZGVsaW1pdGVyLCBlbmREZWxpbWl0ZXJ9KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgCWVsc2UKLSAgICAgICAgCSAgcGFydC5zZXRCb3VuZGFyeVN0cmluZ3MobmV3IFN0cmluZ1tde2RlbGltaXRlcn0pOwotICAgICAgIAotICAgICAgICAJLy8gdGhlIGhlYWRlcnMKLSAgICAgICAgCVN0cmluZyBoZWFkZXJzID0gc3RyLnN1YnN0cmluZyhkZWxpbWl0ZXIubGVuZ3RoKCkpOwotICAgICAgICAgICAgaWYgKGhlYWRlcnMuc3RhcnRzV2l0aCgiXHJcbiIpKQotICAgICAgICAgICAgewotICAgICAgICAgIAkgIC8vIG5vIGhlYWRlcnMgcHJlc2VudAotICAgICAgICAgIAkgIHBhcnQuc2V0SGVhZGVycygiIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgCSAgcGFydC5zZXRIZWFkZXJzKGhlYWRlcnMpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyB0aGUgY29udGVudAotICAgICAgICAgICAgU3RyaW5nIGNvbnRlbnRJZCA9IFV0aWxzLmdldE1pbWVIZWFkZXJBdHRyaWJ1dGUoaGVhZGVycywgTUlNRUNvbnN0YW50cy5IRUFERVJfQ09OVEVOVF9JRCk7Ci0gICAgICAgICAgICBpbnQgc2l6ZSA9IGluZGljZXNbaSsxXSAtIChpbmRleCk7Ci0gICAgICAgICAJYnl0ZVtdIGNvbnRlbnQgPSBuZXcgYnl0ZVtzaXplXTsKLSAgICAgIAkgICAgU3lzdGVtLmFycmF5Y29weShtZXNzYWdlLCBpbmRleCwgY29udGVudCwgMCwgc2l6ZSk7Ci0gICAgICAJICAKLSAgICAgICAgICAgIGlmICgocm9vdE5vdEZvdW5kICYmIChpID09IDApKSB8fAotICAgICAgICAgICAgCSgoc3RhcnQgIT0gbnVsbCkgJiYgKCFzdGFydC5lcXVhbHMoIiIpKSAmJiAoc3RhcnQuZXF1YWxzKGNvbnRlbnRJZCkpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy8gcm9vdCBwYXJ0IC0tIGRvIG5vdCBlbmNvZGUKLSAgICAgICAgICAgICAgcGFydC5zZXRDb250ZW50KG5ldyBTdHJpbmcoY29udGVudCwgZW5jb2RpbmcpKTsKLSAgICAgICAgICAgICAgbWltZVBhcnRzLnNldFJvb3RQYXJ0KHBhcnQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgdHJhbnNmZXJFbmNvZGluZyA9ICBVdGlscy5nZXRNaW1lSGVhZGVyQXR0cmlidXRlKGhlYWRlcnMsIE1JTUVDb25zdGFudHMuSEVBREVSX0NPTlRFTlRfVFJBTlNGRVJfRU5DT0RJTkcpOwotICAgCi0gICAgICAgICAgICAgIGlmICgodHJhbnNmZXJFbmNvZGluZyAhPSBudWxsKSAmJiB0cmFuc2ZlckVuY29kaW5nLmVxdWFsc0lnbm9yZUNhc2UoImJhc2U2NCIpKQotICAgICAgICAgICAgICAJcGFydC5zZXRDb250ZW50KG5ldyBTdHJpbmcoY29udGVudCwgZW5jb2RpbmcpKTsKLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHBhcnQuc2V0Q29udGVudChVdGlscy5lbmNvZGVCYXNlNjQoY29udGVudCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICBwYXJ0cy5hZGQocGFydCk7Ci0gICAgICAgICB9Ci0gICAgCX0KLSAgICAJY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIAl7Ci0gICAgCSAgcmV0dXJuIG51bGw7Ci0gICAgCX0KLSAgICAgIH0KLSAgICAgIGludCBzaXplID0gcGFydHMuc2l6ZSgpOwotICAgICAgZm9yIChpbnQgaSA9IHNpemUtMTsgaT49MDsgaS0tKQotICAgICAgICAgbWltZVBhcnRzLmFkZFBhcnQoKE1pbWVQYXJ0KXBhcnRzLmdldChpKSk7Ci0gICAgfQotICAgIHJldHVybiBtaW1lUGFydHM7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyB0b1hNTFN0cmluZyhNaW1lUGFydHMgbWltZVBhcnRzKQotICB7Ci0gICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLQotICAgIC8vIEFkZCBtZXNzYWdlIGNvbnRlbnQgd2l0aCBhdHRhY2htZW50cyBlbGVtZW50Ci0gICAgcHcucHJpbnQoIjwiICsgV1NJQ29uc3RhbnRzLkVMRU1fTUVTU0FHRV9DT05URU5UX1dJVEhfQVRUQUNITUVOVFMpOwotICAgIHB3LnByaW50KCI+Iik7Ci0KLSAgICBDb2xsZWN0aW9uIHBhcnRMaXN0ID0gbWltZVBhcnRzLmdldFBhcnRzKCk7Ci0gICAgaWYgKCFwYXJ0TGlzdC5pc0VtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgIAlJdGVyYXRvciBpTWltZVBhcnRzID0gcGFydExpc3QuaXRlcmF0b3IoKTsKLSAgICAgICAgCXdoaWxlIChpTWltZVBhcnRzLmhhc05leHQoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgCSAgTWltZVBhcnQgbWltZVBhcnQgPSAoTWltZVBhcnQpaU1pbWVQYXJ0cy5uZXh0KCk7Ci0gICAgICAgICAJICBwdy5wcmludChtaW1lUGFydC50b1hNTFN0cmluZygiIikpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQWRkIGVuZCBtZXNzYWdlIGVsZW1lbnQKLSAgICAgICAgcHcucHJpbnRsbigiPC8iICsgV1NJQ29uc3RhbnRzLkVMRU1fTUVTU0FHRV9DT05URU5UX1dJVEhfQVRUQUNITUVOVFMgKyAiPiIpOwotICAgIC8vIFJldHVybiBzdHJpbmcKLSAgICByZXR1cm4gc3cudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKQotICB7Ci0gIAl0cnkKLQl7Ci0gIAkgIEZpbGVJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oImQ6XFxiLnhtbCIpOwotICAJICBpbnQgaSA9IGlucHV0U3RyZWFtLmF2YWlsYWJsZSgpOwotICAJICBieXRlW10gYnVmZmVyID0gbmV3IGJ5dGVbaV07Ci0gIAkgIGlucHV0U3RyZWFtLnJlYWQoYnVmZmVyKTsKLSAgCSAgU3RyaW5nIG1lc3NhZ2UgPSBuZXcgU3RyaW5nKGJ1ZmZlcik7Ci0gIAkgIG1lc3NhZ2UgPSBYTUxVdGlscy54bWxSZW1vdmVFc2NhcGVkU3RyaW5nKG1lc3NhZ2UpOwotICAJICBTdHJpbmcgaGVhZGVycyA9IFV0aWxzLmdldEhUVFBIZWFkZXJzKG1lc3NhZ2UpOwotICAJICBNaW1lUGFydHMgcGFydHMgPSBVdGlscy5wYXJzZU11bHRpcGFydFJlbGF0ZWRNZXNzYWdlKG1lc3NhZ2UsIGhlYWRlcnMsIFV0aWxzLkpBVkFfRU5DT0RJTkdfREVGQVVMVCk7Ci0gIAkgIFN5c3RlbS5vdXQucHJpbnRsbihVdGlscy50b1hNTFN0cmluZyhwYXJ0cykpOwotCX0KLSAgCWNhdGNoIChFeGNlcHRpb24gZSl7fQotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBBbmFseXplckNvbmZpZyBnZXRBbmFseXplckNvbmZpZyhSZXBvcnRlciByZXBvcnRlcikgCi0gIHsKLQlBbmFseXplckNvbmZpZyByZXN1bHQgPSBudWxsOwotCWlmIChyZXBvcnRlciAhPSBudWxsKQotCXsKLQkgIHRyeQotCSAgewotCQlyZXN1bHQgPSByZXBvcnRlci5nZXRSZXBvcnQoKS5nZXRSZXBvcnRDb250ZXh0KCkuZ2V0QW5hbHl6ZXIoKS5nZXRBbmFseXplckNvbmZpZygpOwotCSAgfQotCSAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotCSAgewotCQlyZXN1bHQgPSBudWxsOwotCSAgfQotCX0KLQlyZXR1cm4gcmVzdWx0OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL1dTRExVdGlsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL1dTRExVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwZGU2YzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9XU0RMVXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuSW1wb3J0OwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBqYXZheC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotCi0vKioKLSAqIFRoZSB1dGlsaXR5IGNsYXNzIHRvIGF1dG9tYXRlIFdTREwgcHJvY2Vzc2luZy4KLSAqIAotICogQGF1dGhvciBLdWxpawotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgV1NETFV0aWwKLXsKLQotICAvKioKLSAgICogVGhlIG1ldGhvZCBleHRyYWN0cyBsaXN0IG9mIHBhcnRzIGZvciB0aGUgZ2l2ZW4gc29hcGJpbmQ6Ym9keSwKLSAgICogYmluZGluZyBvcGVyYXRpb24sIG1lc3NhZ2UsIGFuZCBzdHlsZS4KLSAgICogCi0gICAqIEBwYXJhbSBvcCBhbiBvcGVyYXRpb24uCi0gICAqIEBwYXJhbSBtICBhIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBib2R5IGEgU09BUCBib2R5LgotICAgKiBAcGFyYW0gc3R5bGUgYW4gb3BlcmF0aW9uIHN0eWxlLgotICAgKiBAcmV0dXJuIGxpc3Qgb2YgcGFydHMgZm9yIHRoZSBnaXZlbiBzb2FwYmluZDpib2R5LAotICAgKiAgICAgICAgIGJpbmRpbmcgb3BlcmF0aW9uLCBtZXNzYWdlLCBhbmQgc3R5bGUuCi0gICAqLwotICBzdGF0aWMgcHVibGljIExpc3QgZ2V0UGFydHMoCi0gICAgT3BlcmF0aW9uIG9wLAotICAgIE1lc3NhZ2UgbSwKLSAgICBTT0FQQm9keSBib2R5LAotICAgIFN0cmluZyBzdHlsZSkKLSAgewotICAgIC8vCQlpZiBudWxsLCBnZXQgcGFydHMgZnJvbSBtZXNzYWdlIAotICAgIGlmIChib2R5LmdldFBhcnRzKCkgPT0gbnVsbCkKLSAgICAgIC8vIGlmIHJwYyBzdHlsZSBpcyB1c2VkLCB0cnkgdG8gdXNlIHBhcnRPcmRlciBhdHRyaWJ1dGUgZnJvbSBvcGVyYXRpb24KLSAgICAgIGlmIChXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JJTkRfU1RZTEVfUlBDLmVxdWFscyhzdHlsZSkpCi0gICAgICAgIHJldHVybiBtLmdldE9yZGVyZWRQYXJ0cyhvcC5nZXRQYXJhbWV0ZXJPcmRlcmluZygpKTsKLSAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIG0uZ2V0T3JkZXJlZFBhcnRzKG51bGwpOwotICAgIGVsc2UKLSAgICAgIC8vIGNvbnZlcnNlIHBhcnRzIG5hbWUgdG8gcGFydHMgb2JqZWN0cwotICAgICAgcmV0dXJuIG0uZ2V0T3JkZXJlZFBhcnRzKGJvZHkuZ2V0UGFydHMoKSk7Ci0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCBpdGVyYXRlcyBhbGwgaW1wb3J0cyBmcm9tIHRoZSBnaXZlbiBkZWZpbml0aW9uIGFuZCBleHBhbmRzIGFsbAotICAgKiBpbXBvcnRlZCBtZXNzYWdlcywgc2VydmljZSwgcG9ydFR5cGVzLCBhbmQgYmluZGluZ3MgdG8gdGhlIGRlZmluaXRpb24uCi0gICAqIAotICAgKiBAcGFyYW0gZGVmIGEgV1NETCBkZWZpbml0aW9uLgotICAgKi8KLSAgc3RhdGljIHB1YmxpYyB2b2lkIGV4cGFuZERlZmluaXRpb24oRGVmaW5pdGlvbiBkZWYpCi0gIHsKLSAgICBpZiAoZGVmICE9IG51bGwgJiYgZGVmLmdldEltcG9ydHMoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ID0gZGVmLmdldEltcG9ydHMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgTGlzdCB2ID0gKExpc3QpIGl0Lm5leHQoKTsKLSAgICAgICAgaWYgKHYgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIEl0ZXJhdG9yIGl0MiA9IHYuaXRlcmF0b3IoKTsKLSAgICAgICAgICB3aGlsZSAoaXQyLmhhc05leHQoKSkKLSAgICAgICAgICAgIGV4cGFuZERlZmluaXRpb24oZGVmLCAoSW1wb3J0KSBpdDIubmV4dCgpLCBuZXcgQXJyYXlMaXN0KCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBpbnRlcm5hbCBtZXRob2QgdG8gZXhwYW5kIGRlZmluaXRpb24uCi0gICAqIEBwYXJhbSB0YXJnZXQgV1NETCBkZWZpbml0aW9uLgotICAgKiBAcGFyYW0gaW0gaW50ZXJuYWwgbWV0aG9kLgotICAgKi8KLSAgc3RhdGljIHByaXZhdGUgdm9pZCBleHBhbmREZWZpbml0aW9uKERlZmluaXRpb24gdGFyZ2V0LCBJbXBvcnQgaW0sIExpc3QgcHJvY2Vzc2VkRGVmaW5pdGlvbnMpCi0gIHsKLSAgICBpZiAoaW0gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uIGQgPSBpbS5nZXREZWZpbml0aW9uKCk7Ci0gICAgICBpZiAoKGQgIT0gbnVsbCkgJiYgKCFwcm9jZXNzZWREZWZpbml0aW9ucy5jb250YWlucyhkKSkpCi0gICAgICB7Ci0gICAgCXByb2Nlc3NlZERlZmluaXRpb25zLmFkZChkKTsKLQotICAgICAgICBpZiAoZC5nZXRNZXNzYWdlcygpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBJdGVyYXRvciBpdCA9IGQuZ2V0TWVzc2FnZXMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgICAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICAgICAgICB0YXJnZXQuYWRkTWVzc2FnZSgoTWVzc2FnZSkgaXQubmV4dCgpKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZC5nZXRQb3J0VHlwZXMoKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgSXRlcmF0b3IgaXQgPSBkLmdldFBvcnRUeXBlcygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgICAgICAgIHRhcmdldC5hZGRQb3J0VHlwZSgoUG9ydFR5cGUpIGl0Lm5leHQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGQuZ2V0QmluZGluZ3MoKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgSXRlcmF0b3IgaXQgPSBkLmdldEJpbmRpbmdzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgICAgICAgdGFyZ2V0LmFkZEJpbmRpbmcoKEJpbmRpbmcpIGl0Lm5leHQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGQuZ2V0U2VydmljZXMoKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgSXRlcmF0b3IgaXQgPSBkLmdldFNlcnZpY2VzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgICAgICAgdGFyZ2V0LmFkZFNlcnZpY2UoKFNlcnZpY2UpIGl0Lm5leHQoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBJdGVyYXRvciBpdCA9IGQuZ2V0SW1wb3J0cygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBMaXN0IHYgPSAoTGlzdCkgaXQubmV4dCgpOwotICAgICAgICAgIGlmICh2ICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgSXRlcmF0b3IgaXQyID0gdi5pdGVyYXRvcigpOwotICAgICAgICAgICAgd2hpbGUgKGl0Mi5oYXNOZXh0KCkpCi0gICAgICAgICAgICAgIGV4cGFuZERlZmluaXRpb24odGFyZ2V0LCAoSW1wb3J0KSBpdDIubmV4dCgpLCBwcm9jZXNzZWREZWZpbml0aW9ucyk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgZXh0cmFjdHMgcGFydCBmcm9tIHRoZSBtZXNzYWdlLgotICAgKiAKLSAgICogQHBhcmFtIG1lc3NhZ2UgYSBTT0FQIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBwYXJ0IGEgcGFydCBuYW1lLgotICAgKiBAcmV0dXJuIHBhcnQgZnJvbSB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UuCi0gICAqLwotICBzdGF0aWMgcHVibGljIFBhcnQgZ2V0UGFydChNZXNzYWdlIG1lc3NhZ2UsIFN0cmluZyBwYXJ0KQotICB7Ci0gICAgUGFydCBtZXNQYXJ0ID0gbnVsbDsKLSAgICBpZiAocGFydCA9PSBudWxsKQotICAgICAgbWVzUGFydCA9IChQYXJ0KSBtZXNzYWdlLmdldE9yZGVyZWRQYXJ0cyhudWxsKS5nZXQoMCk7Ci0gICAgZWxzZQotICAgICAgbWVzUGFydCA9IG1lc3NhZ2UuZ2V0UGFydChwYXJ0KTsKLSAgICByZXR1cm4gbWVzUGFydDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9XU0lQcm9wZXJ0aWVzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL1dTSVByb3BlcnRpZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmExNDAzMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS91dGlsL1dTSVByb3BlcnRpZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbDsKLQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy51ZGRpNGoudHJhbnNwb3J0LlRyYW5zcG9ydEZhY3Rvcnk7Ci0KLS8qKgotICogVGhlIFdTSSBwcm9wZXJ0aWVzIGNhbiBiZSBkZWZpbmVkIGluIG9uZSBvZiB0aHJlZSBsb2NhdGlvbnMuICAKLSAqCi0gKiAgIDEuIFRoZSB3c2kucHJvcGVydGllcyBmaWxlIHdoaWNoIGNhbiBiZSBsb2NhdGVkIGFueXdoZXJlIGluIHRoZSBjbGFzc3BhdGguCi0gKiAgIDIuIFRoZSBzeXN0ZW0gcHJvcGVydHkgc2V0dGluZ3MuCi0gKiAgIDMuIFRoZSB0aHJlYWQgbG9jYWwgcHJvcGVydHkgc2V0dGluZ3MuCi0gKiAKLSAqIFRoZSBwcm9wZXJ0aWVzIGFyZSBzZXQgYmFzZWQgb24gdGhpcyBvcmRlcmluZy4gIEZvciBleGFtcGxlLCB0aGUgcHJvcGVydGllcyAKLSAqIGZyb20gdGhlIHdzaS5wcm9wZXJ0aWVzIGZpbGUgd2lsbCBiZSByZXBsYWNlZCBieSBwcm9wZXJ0aWVzIGZyb20gdGhlIHN5c3RlbSAKLSAqIHByb3BlcnR5IHNldHRpbmdzLCB3aGljaCB3aWxsIGJlIHJlcGxhY2VkIGJ5IHRoZSB0aHJlYWQgbG9jYWwgcHJvcGVydHkgc2V0dGluZ3MuCi0gKgotICogVGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgdXNlZCB0byBkZWZpbmUgdGhlIGltcGxlbWVudGF0aW9uIGNsYXNzZXMgY2FuIGJlCi0gKiBzcGVjaWZpZWQgYXMgc3lzdGVtIHByb3BlcnRpZXMgb3IgYXMgcHJvcGVydGllcyB0aGF0IGFyZSBzZXQgaW4gYSB0aHJlYWQgCi0gKiBsb2NhbCB2YXJpYWJsZS4gIFN5c3RlbSBwcm9wZXJ0aWVzIHNob3VsZCBiZSB1c2VkIGlmIG9ubHkgb25lIGltcGxlbWVudGF0aW9uCi0gKiBpcyBuZWVkZWQgcGVyIEpWTS4gIElmIHR3byBvciBtb3JlIGltcGxlbWVudGF0aW9ucyBhcmUgbmVlZGVkIHBlciBKVk0sIHRoZW4KLSAqIHRoZSBwcm9wZXJ0aWVzIHNob3VsZCBiZSBzZXQgdXNpbmcgdGhlIHRocmVhZCBsb2NhbCB2YXJpYWJsZS4KLSAqCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvcjogUGV0ZXIgQnJpdHRlbmhhbQotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgV1NJUHJvcGVydGllcwotewotICAvKioKLSAgICogUHJvcGVydGllcyBvYmplY3QuCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIFByb3BlcnRpZXMgd3NpUHJvcGVydGllcyA9IG5ldyBQcm9wZXJ0aWVzKCk7Ci0KLSAgLyoqCi0gICAqIERlZmF1bHQgUHJvZmlsZVZhbGlkYXRvckZhY3RvcnkgY2xhc3MgbmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERFRl9WQUxJREFUT1JfRkFDVE9SWSA9Ci0gICAgIm9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5wcm9maWxlLnZhbGlkYXRvci5pbXBsLlByb2ZpbGVWYWxpZGF0b3JGYWN0b3J5SW1wbCI7Ci0KLSAgLyoqCi0gICAqIFByb3BlcnR5IHRoYXQgY29udGFpbnMgUHJvZmlsZVZhbGlkYXRvckZhY3RvcnkgY2xhc3MgbmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBST1BfVkFMSURBVE9SX0ZBQ1RPUlkgPQotICAgICJ3c2kucHJvZmlsZS52YWxpZGF0b3IuZmFjdG9yeSI7Ci0KLSAgLyoqCi0gICAqIERlZmF1bHQgZG9jdW1lbnQgZmFjdG9yeSBjbGFzcyBuYW1lLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGX0RPQ1VNRU5UX0ZBQ1RPUlkgPQotICAgICJvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuZG9jdW1lbnQuaW1wbC5Eb2N1bWVudEZhY3RvcnlJbXBsIjsKLQotICAvKioKLSAgICogUHJvcGVydHkgdGhhdCBjb250YWlucyBkb2N1bWVudCBmYWN0b3J5IGNsYXNzIG5hbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9QX0RPQ1VNRU5UX0ZBQ1RPUlkgPSAid3NpLmRvY3VtZW50LmZhY3RvcnkiOwotCi0gIC8qKgotICAgKiBEZWZhdWx0IEpBWFAgWE1MIHBhcnNlciBkb2N1bWVudCBmYWN0b3J5IGJ1aWxkZXIuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZfSkFYUF9ET0NVTUVOVF9GQUNUT1JZID0KLSAgICAib3JnLmFwYWNoZS54ZXJjZXMuamF4cC5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5SW1wbCI7Ci0KLSAgLyoqCi0gICAqIFByb3BlcnR5IHRoYXQgY29udGFpbnMgSkFYUCBYTUwgcGFyc2VyIGRvY3VtZW50IGZhY3RvcnkgYnVpbGRlci4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBST1BfSkFYUF9ET0NVTUVOVF9GQUNUT1JZID0KLSAgICAiamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSI7Ci0KLSAgLyoqCi0gICAqIERlZmF1bHQgV1NETCBzY2hlbWEgbG9jYXRpb24uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZfV1NETF9TQ0hFTUEgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iOwotCi0gIC8qKgotICAgKiBQcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIFdTREwgc2NoZW1hIGxvY2F0aW9uLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPUF9XU0RMX1NDSEVNQSA9ICJ3c2kuYW5hbHl6ZXIud3NkbC5zY2hlbWEiOwotCi0gIC8qKgotICAgKiBEZWZhdWx0IFdTREwgU09BUCBzY2hlbWEgbG9jYXRpb24uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZfV1NETF9TT0FQX1NDSEVNQSA9Ci0gICAgImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iOwotCi0gIC8qKgotICAgKiBQcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIFdTREwgU09BUCBzY2hlbWEgbG9jYXRpb24uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9QX1dTRExfU09BUF9TQ0hFTUEgPQotICAgICJ3c2kuYW5hbHl6ZXIud3NkbHNvYXAuc2NoZW1hIjsKLQotICAvKioKLSAgICogRGVmYXVsdCBXU0RMIE1JTUUgc2NoZW1hIGxvY2F0aW9uLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGX1dTRExfTUlNRV9TQ0hFTUEgPQotICAgICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL21pbWUvIjsKLQotICAvKioKLSAgICogUHJvcGVydHkgdGhhdCBjb250YWlucyBXU0RMIFNPQVAgc2NoZW1hIGxvY2F0aW9uLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPUF9XU0RMX01JTUVfU0NIRU1BID0KLSAgICAid3NpLmFuYWx5emVyLndzZGxtaW1lLnNjaGVtYSI7Ci0KLSAgLyoqCi0gICAqIERlZmF1bHQgU09BUCBzY2hlbWEgbG9jYXRpb24uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZfU09BUF9TQ0hFTUEgPQotICAgICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyI7Ci0KLSAgLyoqCi0gICAqIFByb3BlcnR5IHRoYXQgY29udGFpbnMgU09BUCBzY2hlbWEgbG9jYXRpb24uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9QX1NPQVBfU0NIRU1BID0gIndzaS5hbmFseXplci5zb2FwLnNjaGVtYSI7Ci0KLSAgLyoqCi0gICAqIERlZmF1bHQgU09BUCBzY2hlbWEgbG9jYXRpb24uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZfWE1MX1NDSEVNQSA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS54c2QiOwotCi0gIC8qKgotICAgKiBQcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIFNPQVAgc2NoZW1hIGxvY2F0aW9uLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPUF9YTUxfU0NIRU1BID0gIndzaS5hbmFseXplci54bWxzY2hlbWEuc2NoZW1hIjsKLQotICAvKioKLSAgICogUHJvcGVydHkgd2hpY2ggY29udGFpbnMgV1NJX0hPTUUgdmFsdWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9QX1dTSV9IT01FID0gIndzaS5ob21lIjsKLQotICAvKioKLSAgICogUHJvcGVydHkgZmlsZSBuYW1lLgotICAgKi8KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPUF9GSUxFTkFNRSA9ICJvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbC53c2kiOwotCi0gIC8qKgotICAqIFRocmVhZCBsb2NhbCB2YXJpYWJsZS4KLSAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgVGhyZWFkTG9jYWwgdGhyZWFkTG9jYWwgPSBuZXcgVGhyZWFkTG9jYWwoKTsKLQotICAvLyBMb2FkIHByb2ZpbGVzIGZpbGUKLSAgc3RhdGljIHsKLSAgICBsb2FkUHJvcGVydGllc0ZpbGUoKTsKLSAgfQotCi0gIC8qKgotICAgKiBMb2FkIHByb3BlcnRpZXMgZnJvbSB3c2kucHJvcGVydGllcyBmaWxlLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBsb2FkUHJvcGVydGllc0ZpbGUoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gVHJ5IHRvIGxvYWQgcHJvcGVydGllcyBmcm9tIHdzaS5wcm9wZXJ0aWVzCi0gICAgICAvL0lucHV0U3RyZWFtIGlzID0gVXRpbHMuZ2V0SW5wdXRTdHJlYW0oUFJPUF9GSUxFTkFNRSk7Ci0KLSAgICAgIC8vIExvYWQgcHJvcGVydGllcyBmcm9tIGZpbGUKLSAgICAgIC8vd3NpUHJvcGVydGllc0ZpbGUubG9hZChpcyk7Ci0KLSAgICAgIFJlc291cmNlQnVuZGxlIHJlc291cmNlQnVuZGxlID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKFBST1BfRklMRU5BTUUpOwotCi0gICAgICBTdHJpbmcgbmV4dEtleTsKLSAgICAgIEVudW1lcmF0aW9uIGVudW1lcmF0aW9uID0gcmVzb3VyY2VCdW5kbGUuZ2V0S2V5cygpOwotICAgICAgd2hpbGUgKGVudW1lcmF0aW9uLmhhc01vcmVFbGVtZW50cygpKQotICAgICAgewotICAgICAgICBuZXh0S2V5ID0gKFN0cmluZykgZW51bWVyYXRpb24ubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgd3NpUHJvcGVydGllcy5wdXQobmV4dEtleSwgcmVzb3VyY2VCdW5kbGUuZ2V0U3RyaW5nKG5leHRLZXkpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIG1yZSkKLSAgICB7Ci0gICAgICAvLyBERUJVRzoKLSAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigKLSAgICAgICAgIldBUk5JTkc6ICBDb3VsZCBub3QgcmVhZCAiCi0gICAgICAgICAgKyBQUk9QX0ZJTEVOQU1FCi0gICAgICAgICAgKyAiLiAgIgotICAgICAgICAgICsgIlZlcmlmeSB0aGF0IGl0IGlzIGluIHRoZSBDTEFTU1BBVEguIik7Ci0KLSAgICAgIC8vIFNldCB1cCBkZWZhdWx0IHZhbHVlcwotICAgICAgd3NpUHJvcGVydGllcy5wdXQoUFJPUF9WQUxJREFUT1JfRkFDVE9SWSwgREVGX1ZBTElEQVRPUl9GQUNUT1JZKTsKLSAgICAgIHdzaVByb3BlcnRpZXMucHV0KFBST1BfRE9DVU1FTlRfRkFDVE9SWSwgREVGX0RPQ1VNRU5UX0ZBQ1RPUlkpOwotICAgICAgd3NpUHJvcGVydGllcy5wdXQoUFJPUF9KQVhQX0RPQ1VNRU5UX0ZBQ1RPUlksIERFRl9KQVhQX0RPQ1VNRU5UX0ZBQ1RPUlkpOwotICAgICAgd3NpUHJvcGVydGllcy5wdXQoCi0gICAgICAgIFRyYW5zcG9ydEZhY3RvcnkuUFJPUEVSVFlfTkFNRSwKLSAgICAgICAgIm9yZy51ZGRpNGoudHJhbnNwb3J0LkFwYWNoZUF4aXNUcmFuc3BvcnQiKTsKLSAgICB9Ci0gIH0KLQotICAvKiogCi0gICAqIERvIG5vdCBhbGxvdyB0aGlzIG9iamVjdCB0byBiZSBpbnN0YW50aWF0ZWQuCi0gICAqLwotICBwcml2YXRlIFdTSVByb3BlcnRpZXMoKQotICB7Ci0gIH0KLQotICAvKiogCi0gICAgKiBHZXQgcHJvcGVydGllcyB0aGF0IHdlcmUgc2V0IGZvciB0aGlzIHRocmVhZCBvbmx5LgotICAgICogQHJldHVybiB0aGUgcHJvcGVydGllcyB0aGF0IHdlcmUgc2V0IGZvciB0aGlzIHRocmVhZCBvbmx5LgotICAgICoKLSAgICAqIEBzZWUgI3NldFRocmVhZExvY2FsUHJvcGVydGllcwotICAgICovCi0gIHB1YmxpYyBzdGF0aWMgUHJvcGVydGllcyBnZXRUaHJlYWRMb2NhbFByb3BlcnRpZXMoKQotICB7Ci0gICAgLy8gUmV0dXJuIHByb3BlcnRpZXMKLSAgICByZXR1cm4gKFByb3BlcnRpZXMpIHRocmVhZExvY2FsLmdldCgpOwotICB9Ci0KLSAgLyoqIAotICAgKiBTZXQgcHJvcGVydGllcyBmb3IgdGhpcyB0aHJlYWQgb25seS4KLSAgICogQHBhcmFtIHByb3BzICBhIFByb3BlcnRpZXMgb2JqZWN0LgotICAgKgotICAgKiBAc2VlICNnZXRUaHJlYWRMb2NhbFByb3BlcnRpZXMKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRUaHJlYWRMb2NhbFByb3BlcnRpZXMoUHJvcGVydGllcyBwcm9wcykKLSAgewotICAgIC8vIFNhdmUgdGhlIHByb3BlcnRpZXMgYXMgdGhyZWFkIGxvY2FsIHZhcmlhYmxlcwotICAgIHRocmVhZExvY2FsLnNldChwcm9wcyk7Ci0gIH0KLQotICAvKiogCi0gICAqIEdldCB0aGUgcHJvcGVydHkgdmFsdWUgZ2l2ZW4gdGhlIHByb3BlcnR5IG5hbWUuCi0gICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgIGEgcHJvcGVydHkgbmFtZS4KLSAgICogQHJldHVybiB0aGUgY29ycmVzcG9uZGluZyBwcm9wZXJ0eSB2YWx1ZS4gSWYgbm90IGZvdW5kIHJldHVybiBudWxsLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UHJvcGVydHkoU3RyaW5nIHByb3BlcnR5TmFtZSkKLSAgewotICAgIFN0cmluZyBwcm9wZXJ0eVZhbHVlID0gbnVsbDsKLSAgICBQcm9wZXJ0aWVzIHRocmVhZExvY2FsUHJvcHMgPSBudWxsOwotCi0gICAgLy8gMS4gTG9vayBpbiB0aHJlYWQgbG9jYWwgcHJvcGVydGllcyBmaXJzdAotICAgIGlmICgodGhyZWFkTG9jYWxQcm9wcyA9IGdldFRocmVhZExvY2FsUHJvcGVydGllcygpKSAhPSBudWxsKQotICAgIHsKLSAgICAgIHByb3BlcnR5VmFsdWUgPSB0aHJlYWRMb2NhbFByb3BzLmdldFByb3BlcnR5KHByb3BlcnR5TmFtZSk7Ci0gICAgfQotCi0gICAgLy8gMi4gTmV4dCBsb29rIGluIHN5c3RlbSBwcm9wZXJ0aWVzIAotICAgIGlmIChwcm9wZXJ0eVZhbHVlID09IG51bGwpCi0gICAgewotICAgICAgcHJvcGVydHlWYWx1ZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpOwotICAgIH0KLQotICAgIC8vIDMuIExhc3QgbG9vayBpbiB0aGUgcHJvcGVydGllcyBmaWxlCi0gICAgaWYgKHByb3BlcnR5VmFsdWUgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBwcm9wZXJ0eVZhbHVlID0gd3NpUHJvcGVydGllcy5nZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBwcm9wZXJ0eSB2YWx1ZQotICAgIHJldHVybiBwcm9wZXJ0eVZhbHVlOwotICB9Ci0KLSAgLyoqIAotICAgKiBHZXQgdGhlIHByb3BlcnR5IHZhbHVlIGdpdmVuIHRoZSBwcm9wZXJ0eSBuYW1lLgotICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lICBhIHByb3BlcnR5IG5hbWUuCi0gICAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgIGEgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIHByb3BlcnR5LgotICAgKiBAcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIHByb3BlcnR5IHZhbHVlLiBJZiBub3QgZm91bmQgcmV0dXJuIHRoZSBkZWZhdWx0IHZhbHVlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UHJvcGVydHkoU3RyaW5nIHByb3BlcnR5TmFtZSwgU3RyaW5nIGRlZmF1bHRWYWx1ZSkKLSAgewotICAgIFN0cmluZyBwcm9wZXJ0eVZhbHVlID0gbnVsbDsKLQotICAgIC8vIElmIHRoZSBwcm9wZXJ0eVZhbHVlIHdhcyBub3QgZm91bmQsIHRoZW4gcmV0dXJuIGRlZmF1bHQgdmFsdWUKLSAgICBpZiAoKHByb3BlcnR5VmFsdWUgPSBnZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpKSA9PSBudWxsKQotICAgIHsKLSAgICAgIHByb3BlcnR5VmFsdWUgPSBkZWZhdWx0VmFsdWU7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIHByb3BlcnR5IHZhbHVlCi0gICAgcmV0dXJuIHByb3BlcnR5VmFsdWU7Ci0gIH0KLQotICAvKioKLSAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byB1bml0IHRlc3QgdGhpcyBjbGFzcy4KLSAgICogQHBhcmFtIGFyZ3MgIHRoZSBhcmd1bWVudHMgZm9yIG1haW4uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gU2V0IHByb3BlcnR5IGZvciB0aGlzIHRocmVhZAotICAgICAgUHJvcGVydGllcyBwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7Ci0gICAgICBwcm9wcy5zZXRQcm9wZXJ0eShQUk9QX1ZBTElEQVRPUl9GQUNUT1JZLCAibWFpbiIpOwotICAgICAgV1NJUHJvcGVydGllcy5zZXRUaHJlYWRMb2NhbFByb3BlcnRpZXMocHJvcHMpOwotCi0gICAgICAvLyBTdGFydCBmb3VyIHRocmVhZHMgdG8gdmVyaWZ5IHRoYXQgdGhlIG11bHRpdGhyZWFkZWQgdXNlIG9mIHRyZWFkIGxvY2FsIHZhcnMgd29ya3MKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNTsgaSsrKQotICAgICAgewotICAgICAgICAvLyBDcmVhdGUgbmV3IHRocmVhZAotICAgICAgICAgKG5ldyBUaHJlYWQobmV3IFRocmVhZFRlc3QoInRlc3QiICsgaSkpKS5zdGFydCgpOwotCi0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgLy8gU2xlZXAKLSAgICAgICAgICBUaHJlYWQuc2xlZXAoMjAwKTsKLQotICAgICAgICAgIC8vIERpc3BsYXkgcHJvcGVydGllcywgd2hpY2ggc2hvdWxkIGJlIG1haW4KLSAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oCi0gICAgICAgICAgICAiUFJPUF9WQUxJREFUT1JfRkFDVE9SWTogICIKLSAgICAgICAgICAgICAgKyBXU0lQcm9wZXJ0aWVzLmdldFByb3BlcnR5KFBST1BfVkFMSURBVE9SX0ZBQ1RPUlkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIElubmVyIGNsYXNzIHVzZWQgZm9yIHVuaXQgdGVzdC4KLSAgICovCi0gIHN0YXRpYyBwcml2YXRlIGNsYXNzIFRocmVhZFRlc3QgZXh0ZW5kcyBUaHJlYWQKLSAgewotICAgIFN0cmluZyBuYW1lOwotCi0gICAgVGhyZWFkVGVzdChTdHJpbmcgbmFtZSkKLSAgICB7Ci0gICAgICB0aGlzLm5hbWUgPSBuYW1lOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHJ1bigpCi0gICAgewotICAgICAgUHJvcGVydGllcyBwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7Ci0gICAgICBwcm9wcy5zZXRQcm9wZXJ0eShQUk9QX1ZBTElEQVRPUl9GQUNUT1JZLCBuYW1lKTsKLSAgICAgIFdTSVByb3BlcnRpZXMuc2V0VGhyZWFkTG9jYWxQcm9wZXJ0aWVzKHByb3BzKTsKLSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigKLSAgICAgICAgIlBST1BfVkFMSURBVE9SX0ZBQ1RPUlk6ICAiCi0gICAgICAgICAgKyBXU0lQcm9wZXJ0aWVzLmdldFByb3BlcnR5KFBST1BfVkFMSURBVE9SX0ZBQ1RPUlkpKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvWE1MSW5mby5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9YTUxJbmZvLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5MjExOTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC9YTUxJbmZvLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUudXRpbDsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIC4uLgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIFhNTEluZm8KLXsKLSAgLyoqCi0gICAqIEdldCBhZGR0aW9uYWwgdG9vbCBlbnZpcm9ubWVudCBpbmZvcm1hdGlvbiBhcyBhbiBYTUwgc3RyaW5nLgotICAgKiBAcGFyYW0gbmFtZXNwYWNlTmFtZSBhIG5hbWVzcGFjZSBwcmVmaXguCi0gICAqIEByZXR1cm4gYWRkdGlvbmFsIHRvb2wgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24gYXMgYW4gWE1MIHN0cmluZy4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9YTUxTdHJpbmcoU3RyaW5nIG5hbWVzcGFjZU5hbWUpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC93c2kucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3V0aWwvd3NpLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmZTQ4ZGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvdXRpbC93c2kucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLSMgLyoqCi0jICAqIDxjb3B5cmlnaHQ+Ci0jICAqCi0jICAqIENvcHlyaWdodCAoYykgMjAwMi0yMDAzICBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyAgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAgKiAKLSMgICogQ29udHJpYnV0b3JzOiAKLSMgICogICBJQk0gICAgICAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyAgKiA8L2NvcHlyaWdodD4KLSMgICovCi0jCi0jIFByb3BlcnR5IGZpbGUgdXNlZCB0byBzZXQgcGFyYW1ldGVycyBmb3IgQ29uZm9ybWFuY2UgVG9vbHMKLQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBEb2N1bWVudCBmYWN0b3J5LgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotd3NpLmRvY3VtZW50LmZhY3Rvcnk9b3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LmltcGwuRG9jdW1lbnRGYWN0b3J5SW1wbAotCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFByb2ZpbGUgdmFsaWRhdGlvbiBmYWN0b3J5LgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotd3NpLnByb2ZpbGUudmFsaWRhdG9yLmZhY3Rvcnk9b3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnByb2ZpbGUudmFsaWRhdG9yLmltcGwuUHJvZmlsZVZhbGlkYXRvckZhY3RvcnlJbXBsCi0KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUmVmZXJlbmNlIHRvIEpBWFAgZG9jdW1lbnQgYnVpbGRlcgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeT1vcmcuYXBhY2hlLnhlcmNlcy5qYXhwLkRvY3VtZW50QnVpbGRlckZhY3RvcnlJbXBsCi0jamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeT1vcmcuZWNsaXBlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuamF4cC5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5SW1wbAotCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFRyYW5zcG9ydCBjbGFzcyB1c2VkIGJ5IFVEREk0SgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotb3JnLnVkZGk0ai5UcmFuc3BvcnRDbGFzc05hbWU9b3JnLnVkZGk0ai50cmFuc3BvcnQuQXBhY2hlQXhpc1RyYW5zcG9ydAotCi0KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgTG9jYXRpb24gb2YgWE1MIHNjaGVtYSBkb2N1bWVudHMgcmVsYXRpdmUgdG8gdGhlIHBsdWdpbiBkaXJlY3RvcnkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXdzaS5hbmFseXplci54bWxzY2hlbWEuc2NoZW1hPWh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLnhzZAotd3NpLmFuYWx5emVyLnNvYXAuc2NoZW1hPWh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvCi13c2kuYW5hbHl6ZXIud3NkbC5zY2hlbWE9aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8KLXdzaS5hbmFseXplci53c2Rsc29hcC5zY2hlbWE9d3NpLmFuYWx5emVyLndzZGxzb2FwLnNjaGVtYQotd3NpLmFuYWx5emVyLndzZGxtaW1lLnNjaGVtYT1odHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL21pbWUvCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL1dTRExEb2N1bWVudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC9XU0RMRG9jdW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDUwMjkyYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL1dTRExEb2N1bWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBqYXZheC53c2RsLldTRExFeGNlcHRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwueG1sLldTRExSZWFkZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnhzZC5JbmxpbmVTY2hlbWFWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxUYWdzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBwcm92aWRlcyBhIGludGVyZmFjZSB0byBhIHNpbmdsZSBXU0RMIGRvY3VtZW50LgotICogCi0gKiBAdmVyc2lvbiAxLjAuMQotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtICAocGV0ZXJickB1cy5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgV1NETERvY3VtZW50Ci17Ci0gIC8qKgotICAgKiBXU0RMIGRvY3VtZW50IGxvY2F0aW9uLgotICAgKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBmaWxlTmFtZSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIERlZmluaXRpb24gZWxlbWVudC4KLSAgICovCi0gIHByb3RlY3RlZCBEZWZpbml0aW9uIGRlZmluaXRpb25zID0gbnVsbDsKLQotICAvKioKLSAgICogRG9jdW1lbnQgZWxlbWVudAotICAgKi8KLSAgcHJvdGVjdGVkIERvY3VtZW50IGRvY3VtZW50ID0gbnVsbDsKLQotICAvKioKLSAgICogV1NETCBlbGVtZW50IGxpc3Qgd2l0aCBsaW5lIGFuZCBjb2x1bW4gbnVtYmVycy4KLSAgICovCi0gIHByb3RlY3RlZCBXU0RMRWxlbWVudExpc3Qgd3NkbEVsZW1lbnRMaXN0ID0gbnVsbDsKLQotICAvKioKLSAgICogTWFwIG9mIHRhcmdldE5hbWVzcGFjZXMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNNb2RlbCBvZiBzY2hlbWEgZWxlbWVudHMuCi0gICAqLwotICBwcml2YXRlIE1hcCBzY2hlbWFzID0gbmV3IEhhc2hNYXAoKTsKLQotICAvKioKLSAgICogTGlzdCBvZiBzY2hlbWFzIHZhbGlkYXRpb24gZXJyb3JzLgotICAgKi8KLSAgcHJpdmF0ZSBMaXN0IHNjaGVtYXNWYWxpZGF0aW9uRXJyb3JzID0gbmV3IEFycmF5TGlzdCgpOwotCi0gIC8qKgotICAgKiBSZWFkIFdTREwgZG9jdW1lbnQgZnJvbSB0aGUgc3BlY2lmaWVkIGZpbGUuCi0gICAqIEBwYXJhbSBmaWxlTmFtZSBXU0RMIGRvY3VtZW50IGxvY2F0aW9uLgotICAgKiBAdGhyb3dzIFdTRExFeGNlcHRpb24gaWYgcHJvYmxlbSByZWFkaW5nIFdTREwgZG9jdW1lbnQuCi0gICAqLwotICBwdWJsaWMgV1NETERvY3VtZW50KFN0cmluZyBmaWxlTmFtZSkgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIHRoaXMuZmlsZU5hbWUgPSBmaWxlTmFtZTsKLSAgICBDbGFzc0xvYWRlciBjdXJyZW50TG9hZGVyID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKTsgICAKLQotICAgIHRyeQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihXU0RMRG9jdW1lbnQuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKSk7ICAgIAotCi0gICAgICAvLyBHZXQgdGhlIFdTRExSZWFkZXIKLSAgICAgIFdTRExSZWFkZXIgd3NkbFJlYWRlciA9IG5ldyBXU0RMUmVhZGVySW1wbCgpOwotCi0gICAgICAvLyBTZXQgZmVhdHVyZXMKLSAgICAgIHdzZGxSZWFkZXIuc2V0RmVhdHVyZShjb20uaWJtLndzZGwuQ29uc3RhbnRzLkZFQVRVUkVfVkVSQk9TRSwgZmFsc2UpOwotICAgICAgLy8gREVCVUc6Ci0gICAgICAvL3dzZGxSZWFkZXIuc2V0RmVhdHVyZShjb20uaWJtLndzZGwuQ29uc3RhbnRzLkZFQVRVUkVfVkVSQk9TRSwgdHJ1ZSk7Ci0gICAgICB3c2RsUmVhZGVyLnNldEZlYXR1cmUoCi0gICAgICAgIGNvbS5pYm0ud3NkbC5Db25zdGFudHMuRkVBVFVSRV9JTVBPUlRfRE9DVU1FTlRTLAotICAgICAgICB0cnVlKTsKLSAgICAgIC8vIERFQlVHOgotICAgICAgLy93c2RsUmVhZGVyLnNldEZlYXR1cmUoY29tLmlibS53c2RsLkNvbnN0YW50cy5GRUFUVVJFX0lNUE9SVF9ET0NVTUVOVFMsdHJ1ZSk7Ci0KLSAgICAgIC8vIFBhcnNlIHRoZSBXU0RMIGRvY3VtZW50Ci0gICAgICBkb2N1bWVudCA9IFhNTFV0aWxzLnBhcnNlWE1MRG9jdW1lbnQoZmlsZU5hbWUpOwotICAgICAgdGhpcy5kZWZpbml0aW9ucyA9IHdzZGxSZWFkZXIucmVhZFdTREwoZmlsZU5hbWUsIGRvY3VtZW50KTsKLQotICAgICAgLy8gU2luY2UgaW5saW5lIHNjaGVtYSB2YWxpZGF0b3IgaXMgdXNlZCBieSBzZXZlcmFsIGFzc2VydGlvbnMsIHZhbGlkYXRlIGFsbAotICAgICAgLy8gc2NoZW1hcyByaWdodCBhZnRlciBXU0RMIHZhbGlkYXRpb24KLSAgICAgIHZhbGlkYXRlU2NoZW1hcygpOwotCi0gICAgICAvLyBHZXQgdGhlIGxpbmUgYW5kIGNvbHVtbiBudW1iZXIgcmVmZXJlbmNlcwotICAgICAgdGhpcy53c2RsRWxlbWVudExpc3QgPSAoKFdTRExSZWFkZXJJbXBsKSB3c2RsUmVhZGVyKS5nZXRFbGVtZW50TGlzdCgpOwotCi0gICAgICAvLyBERUJVRzoKLSAgICAgIC8vU3lzdGVtLmVyci5wcmludGxuKHdzZGxFbGVtZW50TGlzdC50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBjY2UpCi0gICAgewotICAgICAgLy8gU2V0IGVsZW1lbnQgbGlzdCB0byBudWxsCi0gICAgICB0aGlzLndzZGxFbGVtZW50TGlzdCA9IG51bGw7Ci0gICAgfQotICAgIGZpbmFsbHkKLSAgICB7IAotICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zZXRDb250ZXh0Q2xhc3NMb2FkZXIoY3VycmVudExvYWRlcik7Ci0gICAgfSAgICAKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgV1NETCBkb2N1bWVudCBmcm9tIGV4aXN0aW5nIERlZmluaXRpb24gb2JqZWN0LgotICAgKiAKLSAgICogQHBhcmFtIGZpbGVOYW1lIFdTREwgZG9jdW1lbnQgbG9jYXRpb24uCi0gICAqIEBwYXJhbSBkZWZpbml0aW9ucyBEZWZpbml0aW9uIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMRG9jdW1lbnQoU3RyaW5nIGZpbGVOYW1lLCBEZWZpbml0aW9uIGRlZmluaXRpb25zKQotICB7Ci0gICAgdGhpcy5maWxlTmFtZSA9IGZpbGVOYW1lOwotICAgIHRoaXMuZGVmaW5pdGlvbnMgPSBkZWZpbml0aW9uczsKLSAgICB0aGlzLmRvY3VtZW50ID0gbnVsbDsKLSAgICBzY2hlbWFzLmNsZWFyKCk7Ci0gICAgc2NoZW1hc1ZhbGlkYXRpb25FcnJvcnMuY2xlYXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIFdTREwgZG9jdW1lbnQgbG9jYXRpb24uCi0gICAqIEByZXR1cm4gaGUgV1NETCBkb2N1bWVudCBsb2NhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9jYXRpb24oKQotICB7Ci0gICAgLy8gUmV0dXJuIHRoZSBkb2N1bWVudCBsb2NhdGlvbgotICAgIHJldHVybiB0aGlzLmZpbGVOYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgZG9jdW1lbnQgZWxlbWVudCBvZiB0aGUgV1NETCBkb2N1bWVudC4KLSAgICogQHJldHVybiB0aGUgZG9jdW1lbnQgZWxlbWVudAotICAgKi8KLSAgcHVibGljIERvY3VtZW50IGdldERvY3VtZW50KCkKLSAgewotICAgIGlmIChkb2N1bWVudCA9PSBudWxsICYmIGRlZmluaXRpb25zICE9IG51bGwpCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGRvY3VtZW50ID0gWE1MVXRpbHMucGFyc2VYTUxEb2N1bWVudChkZWZpbml0aW9ucy5nZXREb2N1bWVudEJhc2VVUkkoKSk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKQotICAgICAgewotICAgICAgfQotICAgICAgY2F0Y2ggKFdTSUV4Y2VwdGlvbiB3c2llKQotICAgICAgewotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZG9jdW1lbnQ7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBkZWZpbml0aW9uIGVsZW1lbnQgb2YgdGhlIFdTREwgZG9jdW1lbnQuCi0gICAqIEByZXR1cm4gdGhlIGRlZmluaXRpb24gZWxlbWVudAotICAgKi8KLSAgcHVibGljIERlZmluaXRpb24gZ2V0RGVmaW5pdGlvbnMoKQotICB7Ci0gICAgLy8gUmV0dXJuIHRoZSBkZWZpbml0aW9uIGVsZW1lbnQKLSAgICByZXR1cm4gZGVmaW5pdGlvbnM7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGFsbCB0aGUgcG9ydFR5cGUgZWxlbWVudHMgZnJvbSB0aGUgV1NETCBkb2N1bWVudC4KLSAgICogQHJldHVybiB0aGUgbGlzdCBvZiBwb3J0VHlwZSBlbGVtZW50cy4KLSAgICovCi0gIHB1YmxpYyBQb3J0VHlwZVtdIGdldFBvcnRUeXBlcygpCi0gIHsKLSAgICAvLyBHZW5lcmF0ZSBhbiBhcnJheSBvZiBQb3J0VHlwZXMgZnJvbSB0aGUgUG9ydFR5cGUgbWFwIGZvciB0aGlzIERlZmluaXRpb24KLSAgICByZXR1cm4gKFBvcnRUeXBlW10pIGRlZmluaXRpb25zLmdldFBvcnRUeXBlcygpLnZhbHVlcygpLnRvQXJyYXkoCi0gICAgICBuZXcgUG9ydFR5cGVbMF0pOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBhbGwgdGhlIGJpbmRpbmcgZWxlbWVudHMgZnJvbSB0aGUgV1NETCBkb2N1bWVudC4KLSAgICogQHJldHVybiB0aGUgbGlzdCBvZiBiaW5kaW5nIGVsZW1lbnRzLgotICAgKi8KLSAgcHVibGljIEJpbmRpbmdbXSBnZXRCaW5kaW5ncygpCi0gIHsKLSAgICAvLyBHZW5lcmF0ZSBhbiBhcnJheSBvZiBCaW5kaW5ncyBmcm9tIHRoZSBCaW5kaW5nIG1hcCBmb3IgdGhpcyBEZWZpbml0aW9uCi0gICAgcmV0dXJuIChCaW5kaW5nW10pIGRlZmluaXRpb25zLmdldEJpbmRpbmdzKCkudmFsdWVzKCkudG9BcnJheSgKLSAgICAgIG5ldyBCaW5kaW5nWzBdKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgYWxsIHRoZSBzZXJ2aWNlIGVsZW1lbnRzIGZyb20gdGhlIFdTREwgZG9jdW1lbnQuCi0gICAqIEByZXR1cm4gdGhlIGxpc3Qgb2Ygc2VydmljZSBlbGVtZW50cy4KLSAgICovCi0gIHB1YmxpYyBTZXJ2aWNlW10gZ2V0U2VydmljZXMoKQotICB7Ci0gICAgLy8gR2VuZXJhdGUgYW4gYXJyYXkgb2YgU2VydmljZXMgZnJvbSB0aGUgU2VydmljZSBtYXAgZm9yIHRoaXMgRGVmaW5pdGlvbgotICAgIHJldHVybiAoU2VydmljZVtdKSBkZWZpbml0aW9ucy5nZXRTZXJ2aWNlcygpLnZhbHVlcygpLnRvQXJyYXkoCi0gICAgICBuZXcgU2VydmljZVswXSk7Ci0gIH0KLQotICAvKiBSZXR1cm4gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgb2JqZWN0LgotICAgKiBAc2VlIGphdmEubGFuZy5PYmplY3QjdG9TdHJpbmcoKQotICAgKi8KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gIHsKLSAgICAvLyBSZXR1cm4gc3RyaW5nCi0gICAgcmV0dXJuIChkZWZpbml0aW9ucyA9PSBudWxsKQotICAgICAgPyAiV1NETCBkZWZpbml0aW9uIGVsZW1lbnQgbm90IGZvdW5kLiIKLSAgICAgIDogZGVmaW5pdGlvbnMudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIGVsZW1lbnQgbGlzdC4KLSAgICogQHJldHVybiB0aGUgZWxlbWVudCBsaXN0LgotICAgKi8KLSAgcHVibGljIFdTRExFbGVtZW50TGlzdCBnZXRFbGVtZW50TGlzdCgpCi0gIHsKLSAgICByZXR1cm4gdGhpcy53c2RsRWxlbWVudExpc3Q7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyBhIHNjaGVtYXMgbWFwLgotICAgKiBAcmV0dXJuIGEgbWFwIG9mIHRhcmdldE5hbWVzcGFjZSBhdHRyaWJ1dGUgdmFsdWVzIG9mIHRoZSBzY2hlbWEgZWxlbWVudHMKLSAgICogdG8gdGhlIGNvcnJlc3BvbmRpbmcgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNNb2RlbCBvYmplY3Qgb2YgdGhhdCBzY2hlbWEuCi0gICAqLwotICBwdWJsaWMgTWFwIGdldFNjaGVtYXMoKQotICB7Ci0gICAgcmV0dXJuIHNjaGVtYXM7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyBhIGxpc3Qgb2Ygc2NoZW1hcyB2YWxpZGF0aW9uIGVycm9ycyBjYXVzZWQgYnkgdGhlIHZhbGlkYXRlU2NoZW1hcygpIHByb2NlZHVyZS4KLSAgICogQHJldHVybiBhIGxpc3Qgb2Ygc2NoZW1hcyB2YWxpZGF0aW9uIGVycm9ycy4KLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldFNjaGVtYXNWYWxpZGF0aW9uRXJyb3JzKCkKLSAgewotICAgIHJldHVybiBzY2hlbWFzVmFsaWRhdGlvbkVycm9yczsgCi0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCBpbnZva2VzIHRoZSBpbmxpbmUgc2NoZW1hIHZhbGlkYXRvciB3aGljaCB2YWxpZGF0ZXMgZXZlcnkgc2NoZW1hIGVsZW1lbnQgb2YgdGhlIFdTREwuCi0gICAqLwotICBwcml2YXRlIHZvaWQgdmFsaWRhdGVTY2hlbWFzKCkKLSAgewotICAgIHNjaGVtYXMuY2xlYXIoKTsKLSAgICBzY2hlbWFzVmFsaWRhdGlvbkVycm9ycy5jbGVhcigpOwotCi0gICAgLyogSU5MSU5FIFNDSEVNQSBWQUxJREFUT1IgKi8KLSAgICBpZiAoZGVmaW5pdGlvbnMgIT0gbnVsbAotICAgICAgJiYgZGVmaW5pdGlvbnMuZ2V0VHlwZXMoKSAhPSBudWxsCi0gICAgICAmJiBkZWZpbml0aW9ucy5nZXRUeXBlcygpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpICE9IG51bGwpCi0gICAgewotICAgICAgSW5saW5lU2NoZW1hVmFsaWRhdG9yIHNjaGVtYVZhbGlkYXRvciA9IG5ldyBJbmxpbmVTY2hlbWFWYWxpZGF0b3IoKTsKLQotICAgICAgLy8gQ29sbGVjdGluZyBzY2hlbWEncyBwYXJlbnQgZWxlbWVudHMKLSAgICAgIExpc3QgcGFyZW50cyA9IG5ldyBBcnJheUxpc3QoMik7Ci0gICAgICBwYXJlbnRzLmFkZChkZWZpbml0aW9ucy5nZXRUeXBlcygpKTsKLSAgICAgIHBhcmVudHMuYWRkKGRlZmluaXRpb25zKTsKLSAgICAgIC8vIEdvaW5nIHRocm91Z2ggYWxsIHRoZSBFeHRlbnNpYmlsaXR5RWxlbWVudFMgb2Ygd3NkbDp0eXBlcwotICAgICAgLy8gc2luY2UgdGhleSBhcmUgcG90ZW50aWFsIHNjaGVtYXMKLSAgICAgIC8vIFNlZSBKYXZhIEFQSXMgZm9yIFdTREwgVjEuMCAoSlNSMTEwKSwgc2VjdGlvbiA0Ci0gICAgICBJdGVyYXRvciBpID0gdGhpcy5kZWZpbml0aW9ucy5nZXRUeXBlcygpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaS5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dEVsID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KSBpLm5leHQoKTsKLSAgICAgICAgaWYgKGV4dEVsLmdldEVsZW1lbnRUeXBlKCkuZXF1YWxzKFhNTFRhZ3MuRUxFTV9YU0RfU0NIRU1BKSkKLSAgICAgICAgewotICAgICAgICAgIE1hcCBtYXAgPSBudWxsOwotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFZhbGlkYXRpbmcgc2NoZW1hIGVsZW1lbnQKLSAgICAgICAgICAgIG1hcCA9IHNjaGVtYVZhbGlkYXRvci52YWxpZGF0ZShleHRFbCwgcGFyZW50cywgZmlsZU5hbWUpOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gQWRkaW5nIGFuIGV4Y2VwdGlvbiB0byB0aGUgZXJyb3JzIGxpc3QKLSAgICAgICAgICAgIHNjaGVtYXNWYWxpZGF0aW9uRXJyb3JzLmFkZChlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgaWYgKG1hcCAhPSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIEFkZGluZyByZXR1cm5lZCBYU01vZGVsIHRvIHNjaGVtYXMgbWFwCi0gICAgICAgICAgICBzY2hlbWFzLnB1dEFsbChtYXApOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0gICAgCi0gIH0KLQotICAvKioKLSAgICogQ29tbWFuZCBsaW5lIGludGVyZmFjZS4KLSAgICogQHBhcmFtIGFyZ3MgZnJvbSBjb21tYW5kIGxpbmUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgV1NETERvY3VtZW50IHdzZGxEb2N1bWVudCA9IG5ldyBXU0RMRG9jdW1lbnQoYXJnc1swXSk7Ci0gICAgICBTeXN0ZW0ub3V0LnByaW50bG4od3NkbERvY3VtZW50LnRvU3RyaW5nKCkpOwotICAgIH0KLQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBlLnRvU3RyaW5nKCk7Ci0gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLQotICAgIFN5c3RlbS5leGl0KDApOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL1dTRExFbGVtZW50TGlzdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC9XU0RMRWxlbWVudExpc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzVhNzdkOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL1dTRExFbGVtZW50TGlzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLmRvbS5FbGVtZW50TG9jYXRpb247Ci0KLS8qKgotICogVGhpcyBjbGFzcyBtYWludGFpbnMgYSBXU0RMIGVsZW1lbnQgbGlzdC4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIFdTRExFbGVtZW50TGlzdAotewotICAvKioKLSAgICogTGlzdCBvZiBXU0RMIGVsZW1lbnRzIHdpdGggdGhlaXIgbG9jYXRpb24uCi0gICAqLwotICBIYXNoTWFwIHdzZGxFbGVtZW50TGlzdCA9IG5ldyBIYXNoTWFwKCk7Ci0KLSAgLyoqCi0gICAqIFdTREwgZWxlbWVudCBsb2NhdG9yLgotICAgKi8KLSAgcHVibGljIFdTRExFbGVtZW50TGlzdCgpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBBZGQgZWxlbWVudCB3aXRoIGxvY2F0aW9uIGluZm9ybWF0aW9uLgotICAgKiBAcGFyYW0gd3NkbEVsZW1lbnQgICAgICBhIFdTREwgZWxlbWVudCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIGVsZW1lbnRMb2NhdGlvbiAgdGhlIGxvY2F0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgZWxlbWVudC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEVsZW1lbnQoT2JqZWN0IHdzZGxFbGVtZW50LCBFbGVtZW50TG9jYXRpb24gZWxlbWVudExvY2F0aW9uKQotICB7Ci0gICAgdGhpcy53c2RsRWxlbWVudExpc3QucHV0KHdzZGxFbGVtZW50LCBlbGVtZW50TG9jYXRpb24pOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBlbGVtZW50IGxvY2F0aW9uLgotICAgKiBAcGFyYW0gd3NkbEVsZW1lbnQgIGEgV1NETCBlbGVtZW50IGFydGlmYWN0LgotICAgKiBAcmV0dXJuIHRoZSBsb2NhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGVsZW1lbnQuCi0gICAqLwotICBwdWJsaWMgRWxlbWVudExvY2F0aW9uIGdldEVsZW1lbnRMb2NhdGlvbihPYmplY3Qgd3NkbEVsZW1lbnQpCi0gIHsKLSAgICByZXR1cm4gKEVsZW1lbnRMb2NhdGlvbikgdGhpcy53c2RsRWxlbWVudExpc3QuZ2V0KHdzZGxFbGVtZW50KTsKLSAgfQotCi0gIC8qIFJldHVybiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuCi0gICAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCN0b1N0cmluZygpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgewotICAgIFN0cmluZyBzdHJpbmcgPSAiV1NETEVsZW1lbnRMaXN0OiBcbiI7Ci0KLSAgICAvLyBHZXQgbGlzdCBlbnRyaWVzICh2YWx1ZXM/KQotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gdGhpcy53c2RsRWxlbWVudExpc3Qua2V5U2V0KCkuaXRlcmF0b3IoKTsKLQotICAgIC8vIEFkZCBlYWNoIGVudHJ5IGluIHRoZSBsaXN0IHRvIHRoZSBzdHJpbmcKLSAgICBFbGVtZW50TG9jYXRpb24gd3NkbEVsZW1lbnRMb2NhdGlvbjsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIE9iamVjdCB3c2RsRWxlbWVudCA9IGl0ZXJhdG9yLm5leHQoKTsKLQotICAgICAgaWYgKHdzZGxFbGVtZW50ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHN0cmluZyArPSAiICAiICsgd3NkbEVsZW1lbnQuZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKyAiOiAiOwotICAgICAgICBpZiAoKHdzZGxFbGVtZW50TG9jYXRpb24gPQotICAgICAgICAgIChFbGVtZW50TG9jYXRpb24pIHdzZGxFbGVtZW50TGlzdC5nZXQod3NkbEVsZW1lbnQpKQotICAgICAgICAgID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBzdHJpbmcgKz0gIm51bGxcbiI7Ci0gICAgICAgIH0KLQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBzdHJpbmcgKz0gIiAgIgotICAgICAgICAgICAgKyB3c2RsRWxlbWVudC5nZXRDbGFzcygpLmdldE5hbWUoKQotICAgICAgICAgICAgKyAiOiAiCi0gICAgICAgICAgICArIHdzZGxFbGVtZW50TG9jYXRpb24uZ2V0TGluZU51bWJlcigpCi0gICAgICAgICAgICArICIsICIKLSAgICAgICAgICAgICsgd3NkbEVsZW1lbnRMb2NhdGlvbi5nZXRDb2x1bW5OdW1iZXIoKQotICAgICAgICAgICAgKyAiXG4iOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHN0cmluZzsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC9XU0RMUmVhZGVySW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC9XU0RMUmVhZGVySW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOWY2NWVmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwvV1NETFJlYWRlckltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgwMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5GYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLkltcG9ydDsKLWltcG9ydCBqYXZheC53c2RsLklucHV0OwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLk91dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgamF2YXgud3NkbC5TZXJ2aWNlOwotaW1wb3J0IGphdmF4LndzZGwuVHlwZXM7Ci1pbXBvcnQgamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmZhY3RvcnkuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXI7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLmRvbS5FbGVtZW50SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLmRvbS5FbGVtZW50TG9jYXRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcueG1sLnNheC5JbnB1dFNvdXJjZTsKLQotaW1wb3J0IGNvbS5pYm0ud3NkbC5Db25zdGFudHM7Ci1pbXBvcnQgY29tLmlibS53c2RsLnV0aWwuU3RyaW5nVXRpbHM7Ci1pbXBvcnQgY29tLmlibS53c2RsLnV0aWwueG1sLkRPTVV0aWxzOwotaW1wb3J0IGNvbS5pYm0ud3NkbC51dGlsLnhtbC5RTmFtZVV0aWxzOwotaW1wb3J0IGNvbS5pYm0ud3NkbC51dGlsLnhtbC5YUGF0aFV0aWxzOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgaXMgYSBzcGVjaWFsaXphdGlvbiBvZiBjb20uaWJtLndzZGwueG1sLldTRExSZWFkZXJJbXBsIGluIFdTREw0Si4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIFdTRExSZWFkZXJJbXBsIGV4dGVuZHMgY29tLmlibS53c2RsLnhtbC5XU0RMUmVhZGVySW1wbAotewotICAvLyBXU0RMIGVsZW1lbnQgbGlzdC4KLSAgcHJvdGVjdGVkIFdTRExFbGVtZW50TGlzdCB3c2RsRWxlbWVudExpc3QgPSBuZXcgV1NETEVsZW1lbnRMaXN0KCk7Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGNvbS5pYm0ud3NkbC54bWwuV1NETFJlYWRlckltcGwjcGFyc2VEZWZpbml0aW9ucyhqYXZhLmxhbmcuU3RyaW5nLCBvcmcudzNjLmRvbS5FbGVtZW50LCBqYXZhLnV0aWwuTWFwKQotICAgKi8KLSAgcHJvdGVjdGVkIERlZmluaXRpb24gcGFyc2VEZWZpbml0aW9ucygKLSAgICBTdHJpbmcgZG9jdW1lbnRCYXNlVVJJLAotICAgIEVsZW1lbnQgZGVmRWwsCi0gICAgTWFwIGltcG9ydGVkRGVmcykKLSAgICB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0JICBEZWZpbml0aW9uIGRlZiA9IG51bGw7Ci0JQ2xhc3NMb2FkZXIgY3VycmVudExvYWRlciA9IFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0Q29udGV4dENsYXNzTG9hZGVyKCk7ICAgCi0JdHJ5Ci0JewotICAgCSAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zZXRDb250ZXh0Q2xhc3NMb2FkZXIoV1NETFJlYWRlckltcGwuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKSk7ICAgCi0JCi0gICAgICBkZWYgPQotICAgICAgc3VwZXIucGFyc2VEZWZpbml0aW9ucyhkb2N1bWVudEJhc2VVUkksIGRlZkVsLCBpbXBvcnRlZERlZnMpOwotCi0gICAgLy8gVHJ5IHRvIGFkZCBlbGVtZW50IHRvIGxpc3QKLSAgICBhZGRFbGVtZW50VG9MaXN0KGRlZkVsLCBkZWYpOwotCi0KLQl9Ci1jYXRjaCAoRXhjZXB0aW9uIGUpCi0JewotCX0KLSAgICBmaW5hbGx5Ci0gICAgeyAKLSAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2V0Q29udGV4dENsYXNzTG9hZGVyKGN1cnJlbnRMb2FkZXIpOwotICAgIH0gIAotICAgIHJldHVybiBkZWY7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgY29tLmlibS53c2RsLnhtbC5XU0RMUmVhZGVySW1wbCNwYXJzZUltcG9ydChvcmcudzNjLmRvbS5FbGVtZW50LCBqYXZheC53c2RsLkRlZmluaXRpb24sIGphdmEudXRpbC5NYXApCi0gICAqLwotICBwcm90ZWN0ZWQgSW1wb3J0IHBhcnNlSW1wb3J0KEVsZW1lbnQgZWxlbWVudCwgRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBNYXAgbWFwKQotICAgIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICAvKmJvb2xlYW4gd2FzRXggPSBmYWxzZTsKLSAgICBpZiAoZGVmLmdldERvY3VtZW50QmFzZVVSSSgpIT1udWxsKXsKLSAgICAJRmlsZSBmID0gbmV3IEZpbGUoZGVmLmdldERvY3VtZW50QmFzZVVSSSgpKTsKLSAgICAJaWYgKGYuZ2V0UGFyZW50KCkhPW51bGwgJiYgaW1wb3J0RWwuZ2V0QXR0cmlidXRlKCJsb2NhdGlvbiIpIT1udWxsKXsJCQotICAgIAkgICBmID0gbmV3IEZpbGUoZi5nZXRQYXJlbnQoKSsiLyIraW1wb3J0RWwuZ2V0QXR0cmlidXRlKCJsb2NhdGlvbiIpKTsKLSAgICAJICAgCi0gICAgCX0KLSAgICB9IGVsc2Ugd2FzRXggPSBmYWxzZTsKLSAgICAgIAotICAgIEltcG9ydCBpbXBvcnREZWYgPSBzdXBlci5wYXJzZUltcG9ydChpbXBvcnRFbCwgZGVmLCBpbXBvcnRlZERlZnMpOwotICAgIAotICAgIC8vIFRyeSB0byBhZGQgZWxlbWVudCB0byBsaXN0Ci0gICAgYWRkRWxlbWVudFRvTGlzdChpbXBvcnRFbCwgaW1wb3J0RGVmKTsKLSAgICAKLSAgICByZXR1cm4gaW1wb3J0RGVmOyovCi0KLSAgICAvKkltcG9ydCBpbXBvcnQxID0gZGVmaW5pdGlvbi5jcmVhdGVJbXBvcnQoKTsKLSAgICBTdHJpbmcgcyA9IERPTVV0aWxzLmdldEF0dHJpYnV0ZShlbGVtZW50LCAibmFtZXNwYWNlIik7Ci0gICAgU3RyaW5nIHMxID0gRE9NVXRpbHMuZ2V0QXR0cmlidXRlKGVsZW1lbnQsICJsb2NhdGlvbiIpOwotICAgIGlmIChzICE9IG51bGwpCi0gICAgCWltcG9ydDEuc2V0TmFtZXNwYWNlVVJJKHMpOwotICAgIGlmIChzMSAhPSBudWxsKSB7Ci0gICAgCWlmIChpbXBvcnREb2N1bWVudHMpIHsKLSAgICAJCVN0cmluZyBzMiA9IGRlZmluaXRpb24uZ2V0RG9jdW1lbnRCYXNlVVJJKCk7Ci0gICAgCQl0cnkgewotICAgIAotICAgIAkJCVVSTCB1cmwxID0gczIgPT0gbnVsbCA/IG51bGwgOiBTdHJpbmdVdGlscy5nZXRVUkwobnVsbCwgczIpOwotICAgIAkJCVVSTCB1cmwgPSBTdHJpbmdVdGlscy5nZXRVUkwodXJsMSwgczEpOwotICAgIAkJCUlucHV0U3RyZWFtIGlucHV0c3RyZWFtID0KLSAgICAJCQkJU3RyaW5nVXRpbHMuZ2V0Q29udGVudEFzSW5wdXRTdHJlYW0odXJsKTsKLSAgICAJCQlpbnB1dHN0cmVhbS5jbG9zZSgpOwotICAgIAkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZXgpIHsKLSAgICAJCQkvL2ltcG9ydDEuc2V0TG9jYXRpb25VUkkobnVsbCk7Ci0gICAgCQkJYWRkRWxlbWVudFRvTGlzdChlbGVtZW50LCBpbXBvcnQxKTsKLSAgICAJCQlyZXR1cm4gaW1wb3J0MTsKLSAgICAJCX0gY2F0Y2ggKFRocm93YWJsZSBleCkgewotICAgIAkJCXRocm93IG5ldyBXU0RMRXhjZXB0aW9uKAotICAgIAkJCQkiT1RIRVJfRVJST1IiLAotICAgIAkJCQkiVW5hYmxlIHRvIHJlc29sdmUgaW1wb3J0ZWQgZG9jdW1lbnQgYXQgJyIgKyBzMSArICInLiIsCi0gICAgCQkJCWV4KTsKLSAgICAJCX0KLSAgICAKLSAgICAJfQotICAgIH0KLSAgICBJbXBvcnQgaW1wb3J0RGVmID0gc3VwZXIucGFyc2VJbXBvcnQoZWxlbWVudCwgZGVmaW5pdGlvbiwgbWFwKTsKLSAgICBhZGRFbGVtZW50VG9MaXN0KGVsZW1lbnQsIGltcG9ydERlZik7Ki8KLSAgICBJbXBvcnQgaW1wb3J0MSA9IGRlZmluaXRpb24uY3JlYXRlSW1wb3J0KCk7Ci0gICAgU3RyaW5nIHMgPSBET01VdGlscy5nZXRBdHRyaWJ1dGUoZWxlbWVudCwgIm5hbWVzcGFjZSIpOwotICAgIFN0cmluZyBzMSA9IERPTVV0aWxzLmdldEF0dHJpYnV0ZShlbGVtZW50LCAibG9jYXRpb24iKTsKLSAgICBpZiAocyAhPSBudWxsKQotICAgICAgaW1wb3J0MS5zZXROYW1lc3BhY2VVUkkocyk7Ci0gICAgLy8gQUREOiBjaGVjayAibG9jYXRpb24iIGF0dHJpYnV0ZSBmb3IgZW1wdHkgCi0gICAgLy8gc3RyaW5nIHRvIHByZXZlbnQgc2VsZi1kZWZlbml0aW9uIGFzc2lnbmluZwotICAgIGlmICgoczEgIT0gbnVsbCkgJiYgKHMxLmxlbmd0aCgpID4gMCkpCi0gICAgewotICAgICAgaW1wb3J0MS5zZXRMb2NhdGlvblVSSShzMSk7Ci0gICAgICBpZiAoaW1wb3J0RG9jdW1lbnRzKQotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBzMiA9IGRlZmluaXRpb24uZ2V0RG9jdW1lbnRCYXNlVVJJKCk7Ci0gICAgICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uMSA9IG51bGw7Ci0gICAgICAgICAgSW5wdXRTdHJlYW0gaW5wdXRzdHJlYW0gPSBudWxsOwotICAgICAgICAgIElucHV0U291cmNlIGlucHV0c291cmNlID0gbnVsbDsKLSAgICAgICAgICBVUkwgdXJsID0gbnVsbDsKLSAgICAgICAgICBpZiAobG9jICE9IG51bGwpCi0gICAgICAgICAgewotICAgICAgICAgICAgaW5wdXRzb3VyY2UgPSBsb2MuZ2V0SW1wb3J0SW5wdXRTb3VyY2UoczIsIHMxKTsKLSAgICAgICAgICAgIFN0cmluZyBzMyA9IGxvYy5nZXRMYXRlc3RJbXBvcnRVUkkoKTsKLSAgICAgICAgICAgIGRlZmluaXRpb24xID0gKERlZmluaXRpb24pIG1hcC5nZXQoczMpOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgVVJMIHVybDEgPSBzMiA9PSBudWxsID8gbnVsbCA6IFN0cmluZ1V0aWxzLmdldFVSTChudWxsLCBzMik7Ci0gICAgICAgICAgICB1cmwgPSBTdHJpbmdVdGlscy5nZXRVUkwodXJsMSwgczEpOwotICAgICAgICAgICAgZGVmaW5pdGlvbjEgPSAoRGVmaW5pdGlvbikgbWFwLmdldCh1cmwudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICBpZiAoZGVmaW5pdGlvbjEgPT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgIHsKLQotICAgICAgICAgICAgICAgIGlucHV0c3RyZWFtID0gdXJsLm9wZW5TdHJlYW0oKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBjYXRjaCAoSU9FeGNlcHRpb24gZXgpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvL2ltcG9ydDEuc2V0TG9jYXRpb25VUkkobnVsbCk7Ci0gICAgICAgICAgICAgICAgYWRkRWxlbWVudFRvTGlzdChlbGVtZW50LCBpbXBvcnQxKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gaW1wb3J0MTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBpZiAoaW5wdXRzdHJlYW0gIT0gbnVsbCkKLSAgICAgICAgICAgICAgICBpbnB1dHNvdXJjZSA9IG5ldyBJbnB1dFNvdXJjZShpbnB1dHN0cmVhbSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChkZWZpbml0aW9uMSA9PSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpbnB1dHNvdXJjZSA9PSBudWxsKQotICAgICAgICAgICAgICB0aHJvdyBuZXcgV1NETEV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAiT1RIRVJfRVJST1IiLAotICAgICAgICAgICAgICAgICJVbmFibGUgdG8gbG9jYXRlIGltcG9ydGVkIGRvY3VtZW50IGF0ICciCi0gICAgICAgICAgICAgICAgICArIHMxCi0gICAgICAgICAgICAgICAgICArICInIgotICAgICAgICAgICAgICAgICAgKyAoczIgIT0gbnVsbCA/ICIsIHJlbGF0aXZlIHRvICciICsgczIgKyAiJy4iIDogIi4iKSk7Ci0gICAgICAgICAgICBEb2N1bWVudCBkb2N1bWVudCA9IG51bGw7Ci0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgZG9jdW1lbnQgPSBnZXREb2N1bWVudChpbnB1dHNvdXJjZSwgczEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKFdTRExFeGNlcHRpb24gZXgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGFkZEVsZW1lbnRUb0xpc3QoZWxlbWVudCwgaW1wb3J0MSk7Ci0gICAgICAgICAgICAgIHJldHVybiBpbXBvcnQxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGlucHV0c3RyZWFtICE9IG51bGwpCi0gICAgICAgICAgICAgIGlucHV0c3RyZWFtLmNsb3NlKCk7Ci0gICAgICAgICAgICBFbGVtZW50IGVsZW1lbnQyID0gZG9jdW1lbnQuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICAgICAgICBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fREVGSU5JVElPTlMsIGVsZW1lbnQyKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLy9pZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgLy8gIFN5c3RlbS5vdXQucHJpbnRsbigKLSAgICAgICAgICAgICAgLy8gICAgIlJldHJpZXZpbmcgZG9jdW1lbnQgYXQgJyIKLSAgICAgICAgICAgICAgLy8gICAgICArIHMxCi0gICAgICAgICAgICAgIC8vICAgICAgKyAiJyIKLSAgICAgICAgICAgICAgLy8gICAgICArIChzMiAhPSBudWxsID8gIiwgcmVsYXRpdmUgdG8gJyIgKyBzMiArICInLiIgOiAiLiIpKTsKLSAgICAgICAgICAgICAgU3RyaW5nIHM0ID0KLSAgICAgICAgICAgICAgICBsb2MgPT0gbnVsbAotICAgICAgICAgICAgICAgICAgPyB1cmwgPT0gbnVsbAotICAgICAgICAgICAgICAgICAgPyBzMQotICAgICAgICAgICAgICAgICAgOiB1cmwudG9TdHJpbmcoKSA6IGxvYy5nZXRMYXRlc3RJbXBvcnRVUkkoKTsKLSAgICAgICAgICAgICAgZGVmaW5pdGlvbjEgPSByZWFkV1NETChzNCwgZWxlbWVudDIsIG1hcCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFFOYW1lIHFuYW1lID0gUU5hbWVVdGlscy5uZXdRTmFtZShlbGVtZW50Mik7Ci0gICAgICAgICAgICAgIGlmIChDb25zdGFudHMuWFNEX1FOQU1FX0xJU1QuY29udGFpbnMocW5hbWUpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgV1NETEZhY3Rvcnkgd3NkbGZhY3RvcnkgPQotICAgICAgICAgICAgICAgICAgZmFjdG9yeUltcGxOYW1lID09IG51bGwKLSAgICAgICAgICAgICAgICAgICAgPyBXU0RMRmFjdG9yeS5uZXdJbnN0YW5jZSgpCi0gICAgICAgICAgICAgICAgICAgIDogV1NETEZhY3RvcnkubmV3SW5zdGFuY2UoZmFjdG9yeUltcGxOYW1lKTsKLSAgICAgICAgICAgICAgICBkZWZpbml0aW9uMSA9IHdzZGxmYWN0b3J5Lm5ld0RlZmluaXRpb24oKTsKLSAgICAgICAgICAgICAgICBpZiAoZXh0UmVnICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICBkZWZpbml0aW9uMS5zZXRFeHRlbnNpb25SZWdpc3RyeShleHRSZWcpOwotICAgICAgICAgICAgICAgIFN0cmluZyBzNSA9Ci0gICAgICAgICAgICAgICAgICBsb2MgPT0gbnVsbAotICAgICAgICAgICAgICAgICAgICA/IHVybCA9PSBudWxsCi0gICAgICAgICAgICAgICAgICAgID8gczEKLSAgICAgICAgICAgICAgICAgICAgOiB1cmwudG9TdHJpbmcoKSA6IGxvYy5nZXRMYXRlc3RJbXBvcnRVUkkoKTsKLSAgICAgICAgICAgICAgICBkZWZpbml0aW9uMS5zZXREb2N1bWVudEJhc2VVUkkoczUpOwotICAgICAgICAgICAgICAgIC8qIERvbid0IGFkZCB0eXBlcyBlbGVtZW50IHNpbmNlIGl0IGRvZXNuJ3QgZXhpc3QuICBBZGRpbmcgaXQgY2F1c2VzIHByb2JsZW1zCi0gICAgICAgICAgICAgICAgICogc2luY2UgaXQgd2lsbCBhZGQgYSB0eXBlcyBlbGVtZW50IGZvciBwcm9jZXNzaW5nIHRoYXQgZG9lcyBub3QgZXhpc3QuCi0gICAgICAgICAgICAgICAgVHlwZXMgdHlwZXMgPSBkZWZpbml0aW9uMS5jcmVhdGVUeXBlcygpOwotICAgICAgICAgICAgICAgIFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCB1bmtub3duZXh0ZW5zaWJpbGl0eWVsZW1lbnQgPQotICAgICAgICAgICAgICAgIAluZXcgVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgdW5rbm93bmV4dGVuc2liaWxpdHllbGVtZW50LnNldEVsZW1lbnQoZWxlbWVudDIpOwotICAgICAgICAgICAgICAgIHR5cGVzLmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KAotICAgICAgICAgICAgICAgIAl1bmtub3duZXh0ZW5zaWJpbGl0eWVsZW1lbnQpOwotICAgICAgICAgICAgICAgIGRlZmluaXRpb24xLnNldFR5cGVzKHR5cGVzKTsKLSAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChkZWZpbml0aW9uMSAhPSBudWxsKQotICAgICAgICAgICAgaW1wb3J0MS5zZXREZWZpbml0aW9uKGRlZmluaXRpb24xKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoV1NETEV4Y2VwdGlvbiB3c2RsZXhjZXB0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgd3NkbGV4Y2VwdGlvbi5zZXRMb2NhdGlvbihYUGF0aFV0aWxzLmdldFhQYXRoRXhwckZyb21Ob2RlKGVsZW1lbnQpKTsKLSAgICAgICAgICB0aHJvdyB3c2RsZXhjZXB0aW9uOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChUaHJvd2FibGUgdGhyb3dhYmxlKQotICAgICAgICB7Ci0gICAgICAgICAgdGhyb3cgbmV3IFdTRExFeGNlcHRpb24oCi0gICAgICAgICAgICAiT1RIRVJfRVJST1IiLAotICAgICAgICAgICAgIlVuYWJsZSB0byByZXNvbHZlIGltcG9ydGVkIGRvY3VtZW50IGF0ICciICsgczEgKyAiJy4iLAotICAgICAgICAgICAgdGhyb3dhYmxlKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBmb3IgKEVsZW1lbnQgZWxlbWVudDEgPSBET01VdGlscy5nZXRGaXJzdENoaWxkRWxlbWVudChlbGVtZW50KTsKLSAgICAgIGVsZW1lbnQxICE9IG51bGw7Ci0gICAgICBlbGVtZW50MSA9IERPTVV0aWxzLmdldE5leHRTaWJsaW5nRWxlbWVudChlbGVtZW50MSkpCi0gICAgICBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fRE9DVU1FTlRBVElPTiwgZWxlbWVudDEpKQotICAgICAgICBpbXBvcnQxLnNldERvY3VtZW50YXRpb25FbGVtZW50KGVsZW1lbnQxKTsKLSAgICAgIGVsc2UKLSAgICAgICAgRE9NVXRpbHMudGhyb3dXU0RMRXhjZXB0aW9uKGVsZW1lbnQxKTsKLQotICAgIHJldHVybiBpbXBvcnQxOwotCi0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgY29tLmlibS53c2RsLnhtbC5XU0RMUmVhZGVySW1wbCNwYXJzZVR5cGVzKG9yZy53M2MuZG9tLkVsZW1lbnQsIGphdmF4LndzZGwuRGVmaW5pdGlvbikKLSAgICovCi0gIHByb3RlY3RlZCBUeXBlcyBwYXJzZVR5cGVzKEVsZW1lbnQgdHlwZXNFbCwgRGVmaW5pdGlvbiBkZWYpCi0gICAgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIFR5cGVzIHR5cGVzID0gc3VwZXIucGFyc2VUeXBlcyh0eXBlc0VsLCBkZWYpOwotCi0gICAgLy8gVHJ5IHRvIGFkZCBlbGVtZW50IHRvIGxpc3QKLSAgICBhZGRFbGVtZW50VG9MaXN0KHR5cGVzRWwsIHR5cGVzKTsKLQotICAgIHJldHVybiB0eXBlczsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBjb20uaWJtLndzZGwueG1sLldTRExSZWFkZXJJbXBsI3BhcnNlQmluZGluZyhvcmcudzNjLmRvbS5FbGVtZW50LCBqYXZheC53c2RsLkRlZmluaXRpb24pCi0gICAqLwotICBwcm90ZWN0ZWQgQmluZGluZyBwYXJzZUJpbmRpbmcoRWxlbWVudCBiaW5kaW5nRWwsIERlZmluaXRpb24gZGVmKQotICAgIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBCaW5kaW5nIGJpbmRpbmcgPSBzdXBlci5wYXJzZUJpbmRpbmcoYmluZGluZ0VsLCBkZWYpOwotCi0gICAgLy8gVHJ5IHRvIGFkZCBlbGVtZW50IHRvIGxpc3QKLSAgICBhZGRFbGVtZW50VG9MaXN0KGJpbmRpbmdFbCwgYmluZGluZyk7Ci0KLSAgICByZXR1cm4gYmluZGluZzsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBjb20uaWJtLndzZGwueG1sLldTRExSZWFkZXJJbXBsI3BhcnNlQmluZGluZ09wZXJhdGlvbihvcmcudzNjLmRvbS5FbGVtZW50LCBqYXZheC53c2RsLlBvcnRUeXBlLCBqYXZheC53c2RsLkRlZmluaXRpb24pCi0gICAqLwotICBwcm90ZWN0ZWQgQmluZGluZ09wZXJhdGlvbiBwYXJzZUJpbmRpbmdPcGVyYXRpb24oCi0gICAgRWxlbWVudCBiaW5kaW5nT3BlcmF0aW9uRWwsCi0gICAgUG9ydFR5cGUgcG9ydFR5cGUsCi0gICAgRGVmaW5pdGlvbiBkZWYpCi0gICAgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IG51bGw7Ci0KLSAgICAvLyBUaGUgZm9sbG93IHRyeS1jYXRjaCB3YXMgYWRkZWQgdG8gZGV0ZWN0IHdoZW4gYSBkdXBsaWNhdGUgb3BlcmF0aW9uIG5hbWUgd2FzIGRldGVjdGVkCi0gICAgdHJ5Ci0gICAgewotICAgICAgYmluZGluZ09wZXJhdGlvbiA9Ci0gICAgICAgIHN1cGVyLnBhcnNlQmluZGluZ09wZXJhdGlvbihiaW5kaW5nT3BlcmF0aW9uRWwsIHBvcnRUeXBlLCBkZWYpOwotICAgIH0KLQotICAgIGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWFlKQotICAgIHsKLSAgICAgIGlmIChpYWUuZ2V0TWVzc2FnZSgpLnN0YXJ0c1dpdGgoIkR1cGxpY2F0ZSIpKQotICAgICAgewotICAgICAgICBiaW5kaW5nT3BlcmF0aW9uID0KLSAgICAgICAgICBwYXJzZUJpbmRpbmdPcGVyYXRpb25XaXRoRHVwbGljYXRlTmFtZXMoCi0gICAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uRWwsCi0gICAgICAgICAgICBwb3J0VHlwZSwKLSAgICAgICAgICAgIGRlZik7Ci0gICAgICB9Ci0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgdGhyb3cgaWFlOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIFRyeSB0byBhZGQgZWxlbWVudCB0byBsaXN0Ci0gICAgaWYgKGJpbmRpbmdPcGVyYXRpb24gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBhZGRFbGVtZW50VG9MaXN0KGJpbmRpbmdPcGVyYXRpb25FbCwgYmluZGluZ09wZXJhdGlvbik7Ci0gICAgfQotCi0gICAgcmV0dXJuIGJpbmRpbmdPcGVyYXRpb247Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgY29tLmlibS53c2RsLnhtbC5XU0RMUmVhZGVySW1wbCNwYXJzZUJpbmRpbmdJbnB1dChvcmcudzNjLmRvbS5FbGVtZW50LCBqYXZheC53c2RsLkRlZmluaXRpb24pCi0gICAqLwotICBwcm90ZWN0ZWQgQmluZGluZ0lucHV0IHBhcnNlQmluZGluZ0lucHV0KAotICAgIEVsZW1lbnQgYmluZGluZ0lucHV0RWwsCi0gICAgRGVmaW5pdGlvbiBkZWYpCi0gICAgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQgPSBzdXBlci5wYXJzZUJpbmRpbmdJbnB1dChiaW5kaW5nSW5wdXRFbCwgZGVmKTsKLQotICAgIC8vIFRyeSB0byBhZGQgZWxlbWVudCB0byBsaXN0Ci0gICAgYWRkRWxlbWVudFRvTGlzdChiaW5kaW5nSW5wdXRFbCwgYmluZGluZ0lucHV0KTsKLQotICAgIHJldHVybiBiaW5kaW5nSW5wdXQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgY29tLmlibS53c2RsLnhtbC5XU0RMUmVhZGVySW1wbCNwYXJzZUJpbmRpbmdPdXRwdXQob3JnLnczYy5kb20uRWxlbWVudCwgamF2YXgud3NkbC5EZWZpbml0aW9uKQotICAgKi8KLSAgcHJvdGVjdGVkIEJpbmRpbmdPdXRwdXQgcGFyc2VCaW5kaW5nT3V0cHV0KAotICAgIEVsZW1lbnQgYmluZGluZ091dHB1dEVsLAotICAgIERlZmluaXRpb24gZGVmKQotICAgIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBCaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXRwdXQgPQotICAgICAgc3VwZXIucGFyc2VCaW5kaW5nT3V0cHV0KGJpbmRpbmdPdXRwdXRFbCwgZGVmKTsKLQotICAgIC8vIFRyeSB0byBhZGQgZWxlbWVudCB0byBsaXN0Ci0gICAgYWRkRWxlbWVudFRvTGlzdChiaW5kaW5nT3V0cHV0RWwsIGJpbmRpbmdPdXRwdXQpOwotCi0gICAgcmV0dXJuIGJpbmRpbmdPdXRwdXQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgY29tLmlibS53c2RsLnhtbC5XU0RMUmVhZGVySW1wbCNwYXJzZUJpbmRpbmdGYXVsdChvcmcudzNjLmRvbS5FbGVtZW50LCBqYXZheC53c2RsLkRlZmluaXRpb24pCi0gICAqLwotICBwcm90ZWN0ZWQgQmluZGluZ0ZhdWx0IHBhcnNlQmluZGluZ0ZhdWx0KAotICAgIEVsZW1lbnQgYmluZGluZ0ZhdWx0RWwsCi0gICAgRGVmaW5pdGlvbiBkZWYpCi0gICAgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIEJpbmRpbmdGYXVsdCBiaW5kaW5nRmF1bHQgPSBzdXBlci5wYXJzZUJpbmRpbmdGYXVsdChiaW5kaW5nRmF1bHRFbCwgZGVmKTsKLQotICAgIC8vIFRyeSB0byBhZGQgZWxlbWVudCB0byBsaXN0Ci0gICAgYWRkRWxlbWVudFRvTGlzdChiaW5kaW5nRmF1bHRFbCwgYmluZGluZ0ZhdWx0KTsKLQotICAgIHJldHVybiBiaW5kaW5nRmF1bHQ7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgY29tLmlibS53c2RsLnhtbC5XU0RMUmVhZGVySW1wbCNwYXJzZU1lc3NhZ2Uob3JnLnczYy5kb20uRWxlbWVudCwgamF2YXgud3NkbC5EZWZpbml0aW9uKQotICAgKi8KLSAgcHJvdGVjdGVkIE1lc3NhZ2UgcGFyc2VNZXNzYWdlKEVsZW1lbnQgbXNnRWwsIERlZmluaXRpb24gZGVmKQotICAgIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBNZXNzYWdlIG1zZyA9IHN1cGVyLnBhcnNlTWVzc2FnZShtc2dFbCwgZGVmKTsKLQotICAgIC8vIFRyeSB0byBhZGQgZWxlbWVudCB0byBsaXN0Ci0gICAgYWRkRWxlbWVudFRvTGlzdChtc2dFbCwgbXNnKTsKLQotICAgIHJldHVybiBtc2c7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgY29tLmlibS53c2RsLnhtbC5XU0RMUmVhZGVySW1wbCNwYXJzZVBhcnQob3JnLnczYy5kb20uRWxlbWVudCwgamF2YXgud3NkbC5EZWZpbml0aW9uKQotICAgKi8KLSAgcHJvdGVjdGVkIFBhcnQgcGFyc2VQYXJ0KEVsZW1lbnQgcGFydEVsLCBEZWZpbml0aW9uIGRlZikgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIC8vUGFydCBwYXJ0ID0gc3VwZXIucGFyc2VQYXJ0KHBhcnRFbCwgZGVmKTsKLQotICAgIFBhcnQgcGFydCA9IGRlZi5jcmVhdGVQYXJ0KCk7Ci0gICAgU3RyaW5nIG5hbWUgPSBET01VdGlscy5nZXRBdHRyaWJ1dGUocGFydEVsLCBDb25zdGFudHMuQVRUUl9OQU1FKTsKLQotICAgIC8vIFdTLUk6IFRoZSB0cnktY2F0Y2ggd2FzIGFkZGVkIGZvciBXU0kyNDE2Ci0gICAgUU5hbWUgZWxlbWVudE5hbWU7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBlbGVtZW50TmFtZSA9Ci0gICAgICAgIERPTVV0aWxzLmdldFF1YWxpZmllZEF0dHJpYnV0ZVZhbHVlKAotICAgICAgICAgIHBhcnRFbCwKLSAgICAgICAgICBDb25zdGFudHMuQVRUUl9FTEVNRU5ULAotICAgICAgICAgIENvbnN0YW50cy5FTEVNX01FU1NBR0UsCi0gICAgICAgICAgZmFsc2UpOwotICAgIH0KLQotICAgIGNhdGNoIChXU0RMRXhjZXB0aW9uIHdlKQotICAgIHsKLSAgICAgIFN0cmluZyBwcmVmaXhlZFZhbHVlID0KLSAgICAgICAgRE9NVXRpbHMuZ2V0QXR0cmlidXRlKHBhcnRFbCwgQ29uc3RhbnRzLkFUVFJfRUxFTUVOVCk7Ci0gICAgICBpbnQgaW5kZXggPSBwcmVmaXhlZFZhbHVlLmluZGV4T2YoJzonKTsKLSAgICAgIFN0cmluZyBsb2NhbFBhcnQgPSBwcmVmaXhlZFZhbHVlLnN1YnN0cmluZyhpbmRleCArIDEpOwotCi0gICAgICBlbGVtZW50TmFtZSA9IG5ldyBRTmFtZShsb2NhbFBhcnQpOwotICAgIH0KLQotICAgIFFOYW1lIHR5cGVOYW1lID0KLSAgICAgIERPTVV0aWxzLmdldFF1YWxpZmllZEF0dHJpYnV0ZVZhbHVlKAotICAgICAgICBwYXJ0RWwsCi0gICAgICAgIENvbnN0YW50cy5BVFRSX1RZUEUsCi0gICAgICAgIENvbnN0YW50cy5FTEVNX01FU1NBR0UsCi0gICAgICAgIGZhbHNlKTsKLQotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgewotICAgICAgcGFydC5zZXROYW1lKG5hbWUpOwotICAgIH0KLQotICAgIGlmIChlbGVtZW50TmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIHBhcnQuc2V0RWxlbWVudE5hbWUoZWxlbWVudE5hbWUpOwotICAgIH0KLQotICAgIGlmICh0eXBlTmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIHBhcnQuc2V0VHlwZU5hbWUodHlwZU5hbWUpOwotICAgIH0KLQotICAgIEVsZW1lbnQgdGVtcEVsID0gRE9NVXRpbHMuZ2V0Rmlyc3RDaGlsZEVsZW1lbnQocGFydEVsKTsKLQotICAgIHdoaWxlICh0ZW1wRWwgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fRE9DVU1FTlRBVElPTiwgdGVtcEVsKSkKLSAgICAgIHsKLSAgICAgICAgcGFydC5zZXREb2N1bWVudGF0aW9uRWxlbWVudCh0ZW1wRWwpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBET01VdGlscy50aHJvd1dTRExFeGNlcHRpb24odGVtcEVsKTsKLSAgICAgIH0KLQotICAgICAgdGVtcEVsID0gRE9NVXRpbHMuZ2V0TmV4dFNpYmxpbmdFbGVtZW50KHRlbXBFbCk7Ci0gICAgfQotCi0gICAgTWFwIGV4dGVuc2lvbkF0dHJpYnV0ZXMgPSBwYXJ0LmdldEV4dGVuc2lvbkF0dHJpYnV0ZXMoKTsKLQotICAgIGV4dGVuc2lvbkF0dHJpYnV0ZXMucHV0QWxsKGdldFBhcnRBdHRyaWJ1dGVzKHBhcnRFbCwgZGVmKSk7Ci0KLSAgICAvLyBOZWVkIHRvIGRvIHNvbWV0aGluZyBoZXJlIHRvIGxvY2F0ZSBwYXJ0IGRlZmluaXRpb24uCi0KLSAgICAvLyBUcnkgdG8gYWRkIGVsZW1lbnQgdG8gbGlzdAotICAgIGFkZEVsZW1lbnRUb0xpc3QocGFydEVsLCBwYXJ0KTsKLQotICAgIHJldHVybiBwYXJ0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGNvbS5pYm0ud3NkbC54bWwuV1NETFJlYWRlckltcGwjcGFyc2VQb3J0VHlwZShvcmcudzNjLmRvbS5FbGVtZW50LCBqYXZheC53c2RsLkRlZmluaXRpb24pCi0gICAqLwotICBwcm90ZWN0ZWQgUG9ydFR5cGUgcGFyc2VQb3J0VHlwZShFbGVtZW50IHBvcnRUeXBlRWwsIERlZmluaXRpb24gZGVmKQotICAgIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBQb3J0VHlwZSBwb3J0VHlwZSA9IHN1cGVyLnBhcnNlUG9ydFR5cGUocG9ydFR5cGVFbCwgZGVmKTsKLQotICAgIC8vIFRyeSB0byBhZGQgZWxlbWVudCB0byBsaXN0Ci0gICAgYWRkRWxlbWVudFRvTGlzdChwb3J0VHlwZUVsLCBwb3J0VHlwZSk7Ci0KLSAgICByZXR1cm4gcG9ydFR5cGU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgY29tLmlibS53c2RsLnhtbC5XU0RMUmVhZGVySW1wbCNwYXJzZU9wZXJhdGlvbihvcmcudzNjLmRvbS5FbGVtZW50LCBqYXZheC53c2RsLlBvcnRUeXBlLCBqYXZheC53c2RsLkRlZmluaXRpb24pCi0gICAqLwotICBwcm90ZWN0ZWQgT3BlcmF0aW9uIHBhcnNlT3BlcmF0aW9uKAotICAgIEVsZW1lbnQgb3BFbCwKLSAgICBQb3J0VHlwZSBwb3J0VHlwZSwKLSAgICBEZWZpbml0aW9uIGRlZikKLSAgICB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgT3BlcmF0aW9uIG9wID0gc3VwZXIucGFyc2VPcGVyYXRpb24ob3BFbCwgcG9ydFR5cGUsIGRlZik7Ci0KLSAgICAvLyBUcnkgdG8gYWRkIGVsZW1lbnQgdG8gbGlzdAotICAgIGFkZEVsZW1lbnRUb0xpc3Qob3BFbCwgb3ApOwotCi0gICAgcmV0dXJuIG9wOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGNvbS5pYm0ud3NkbC54bWwuV1NETFJlYWRlckltcGwjcGFyc2VTZXJ2aWNlKG9yZy53M2MuZG9tLkVsZW1lbnQsIGphdmF4LndzZGwuRGVmaW5pdGlvbikKLSAgICovCi0gIHByb3RlY3RlZCBTZXJ2aWNlIHBhcnNlU2VydmljZShFbGVtZW50IHNlcnZpY2VFbCwgRGVmaW5pdGlvbiBkZWYpCi0gICAgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIFNlcnZpY2Ugc2VydmljZSA9IHN1cGVyLnBhcnNlU2VydmljZShzZXJ2aWNlRWwsIGRlZik7Ci0KLSAgICAvLyBUcnkgdG8gYWRkIGVsZW1lbnQgdG8gbGlzdAotICAgIGFkZEVsZW1lbnRUb0xpc3Qoc2VydmljZUVsLCBzZXJ2aWNlKTsKLQotICAgIHJldHVybiBzZXJ2aWNlOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGNvbS5pYm0ud3NkbC54bWwuV1NETFJlYWRlckltcGwjcGFyc2VQb3J0KG9yZy53M2MuZG9tLkVsZW1lbnQsIGphdmF4LndzZGwuRGVmaW5pdGlvbikKLSAgICovCi0gIHByb3RlY3RlZCBQb3J0IHBhcnNlUG9ydChFbGVtZW50IHBvcnRFbCwgRGVmaW5pdGlvbiBkZWYpIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBQb3J0IHBvcnQgPSBzdXBlci5wYXJzZVBvcnQocG9ydEVsLCBkZWYpOwotCi0gICAgLy8gVHJ5IHRvIGFkZCBlbGVtZW50IHRvIGxpc3QKLSAgICBhZGRFbGVtZW50VG9MaXN0KHBvcnRFbCwgcG9ydCk7Ci0KLSAgICByZXR1cm4gcG9ydDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBjb20uaWJtLndzZGwueG1sLldTRExSZWFkZXJJbXBsI3BhcnNlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoamF2YS5sYW5nLkNsYXNzLCBvcmcudzNjLmRvbS5FbGVtZW50LCBqYXZheC53c2RsLkRlZmluaXRpb24pCi0gICAqLwotICBwcm90ZWN0ZWQgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgcGFyc2VFeHRlbnNpYmlsaXR5RWxlbWVudCgKLSAgICBDbGFzcyBwYXJlbnRUeXBlLAotICAgIEVsZW1lbnQgZWwsCi0gICAgRGVmaW5pdGlvbiBkZWYpCi0gICAgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dEVsZW1lbnQgPQotICAgICAgc3VwZXIucGFyc2VFeHRlbnNpYmlsaXR5RWxlbWVudChwYXJlbnRUeXBlLCBlbCwgZGVmKTsKLQotICAgIC8vIFRyeSB0byBhZGQgZWxlbWVudCB0byBsaXN0Ci0gICAgYWRkRWxlbWVudFRvTGlzdChlbCwgZXh0RWxlbWVudCk7Ci0KLSAgICByZXR1cm4gZXh0RWxlbWVudDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBjb20uaWJtLndzZGwueG1sLldTRExSZWFkZXJJbXBsI3BhcnNlSW5wdXQob3JnLnczYy5kb20uRWxlbWVudCwgamF2YXgud3NkbC5EZWZpbml0aW9uKQotICAgKi8KLSAgcHJvdGVjdGVkIElucHV0IHBhcnNlSW5wdXQoRWxlbWVudCBpbnB1dEVsLCBEZWZpbml0aW9uIGRlZikKLSAgICB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgSW5wdXQgaW5wdXQgPSBzdXBlci5wYXJzZUlucHV0KGlucHV0RWwsIGRlZik7Ci0KLSAgICAvLyBUcnkgdG8gYWRkIGVsZW1lbnQgdG8gbGlzdAotICAgIGFkZEVsZW1lbnRUb0xpc3QoaW5wdXRFbCwgaW5wdXQpOwotCi0gICAgcmV0dXJuIGlucHV0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGNvbS5pYm0ud3NkbC54bWwuV1NETFJlYWRlckltcGwjcGFyc2VPdXRwdXQob3JnLnczYy5kb20uRWxlbWVudCwgamF2YXgud3NkbC5EZWZpbml0aW9uKQotICAgKi8KLSAgcHJvdGVjdGVkIE91dHB1dCBwYXJzZU91dHB1dChFbGVtZW50IG91dHB1dEVsLCBEZWZpbml0aW9uIGRlZikKLSAgICB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgT3V0cHV0IG91dHB1dCA9IHN1cGVyLnBhcnNlT3V0cHV0KG91dHB1dEVsLCBkZWYpOwotCi0gICAgLy8gVHJ5IHRvIGFkZCBlbGVtZW50IHRvIGxpc3QKLSAgICBhZGRFbGVtZW50VG9MaXN0KG91dHB1dEVsLCBvdXRwdXQpOwotCi0gICAgcmV0dXJuIG91dHB1dDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBjb20uaWJtLndzZGwueG1sLldTRExSZWFkZXJJbXBsI3BhcnNlRmF1bHQob3JnLnczYy5kb20uRWxlbWVudCwgamF2YXgud3NkbC5EZWZpbml0aW9uKQotICAgKi8KLSAgcHJvdGVjdGVkIEZhdWx0IHBhcnNlRmF1bHQoRWxlbWVudCBmYXVsdEVsLCBEZWZpbml0aW9uIGRlZikKLSAgICB0aHJvd3MgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgRmF1bHQgZmF1bHQgPSBzdXBlci5wYXJzZUZhdWx0KGZhdWx0RWwsIGRlZik7Ci0KLSAgICAvLyBUcnkgdG8gYWRkIGVsZW1lbnQgdG8gbGlzdAotICAgIGFkZEVsZW1lbnRUb0xpc3QoZmF1bHRFbCwgZmF1bHQpOwotCi0gICAgcmV0dXJuIGZhdWx0OwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGNvbS5pYm0ud3NkbC54bWwuV1NETFJlYWRlckltcGwjZ2V0RG9jdW1lbnQob3JnLnhtbC5zYXguSW5wdXRTb3VyY2UsIGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwcm90ZWN0ZWQgRG9jdW1lbnQgZ2V0RG9jdW1lbnQoSW5wdXRTb3VyY2UgaW5wdXRTb3VyY2UsIFN0cmluZyBkZXNjKQotICAgIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICBDbGFzc0xvYWRlciBjdXJyZW50TG9hZGVyID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKTsKLSAgICB0cnkKLQl7Ci0gICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihXU0RMUmVhZGVySW1wbC5jbGFzcy5nZXRDbGFzc0xvYWRlcigpKTsgICAJCi0JCi0gIAkgIC8vRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBmYWN0b3J5ID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotICAgICAgRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBmYWN0b3J5ID0KLSAgICAgICAgbmV3IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuamF4cC5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5SW1wbCgpOwotCi0gICAgICBmYWN0b3J5LnNldE5hbWVzcGFjZUF3YXJlKHRydWUpOwotICAgICAgZmFjdG9yeS5zZXRWYWxpZGF0aW5nKGZhbHNlKTsKLQotICAgICAgRG9jdW1lbnRCdWlsZGVyIGJ1aWxkZXIgPSBmYWN0b3J5Lm5ld0RvY3VtZW50QnVpbGRlcigpOwotICAgICAgRG9jdW1lbnQgZG9jID0gYnVpbGRlci5wYXJzZShpbnB1dFNvdXJjZSk7Ci0KLSAgICAgIHJldHVybiBkb2M7Ci0gICAgfQotICAgIGNhdGNoIChUaHJvd2FibGUgdCkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgV1NETEV4Y2VwdGlvbigKLSAgICAgICAgV1NETEV4Y2VwdGlvbi5QQVJTRVJfRVJST1IsCi0gICAgICAgICJQcm9ibGVtIHBhcnNpbmcgJyIgKyBkZXNjICsgIicuIiwKLSAgICAgICAgdCk7Ci0gICAgfQotICAgIGZpbmFsbHkKLSAgICB7IAotICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zZXRDb250ZXh0Q2xhc3NMb2FkZXIoY3VycmVudExvYWRlcik7Ci0gICAgfSAgICAKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgZWxlbWVudCBsaXN0LgotICAgKiBAcmV0dXJuIHRoZSBlbGVtZW50IGxpc3QuCi0gICAqLwotICBwdWJsaWMgV1NETEVsZW1lbnRMaXN0IGdldEVsZW1lbnRMaXN0KCkKLSAgewotICAgIHJldHVybiB0aGlzLndzZGxFbGVtZW50TGlzdDsKLSAgfQotCi0gIC8qKiAKLSAgICogQWRkIFdTREwgZWxlbWVudCB0byBlbGVtZW50IGxpc3QuCi0gICAqLwotICBwcml2YXRlIHZvaWQgYWRkRWxlbWVudFRvTGlzdChFbGVtZW50IGVsZW1lbnQsIE9iamVjdCB3c2RsRWxlbWVudCkKLSAgewotICAgIEVsZW1lbnRMb2NhdGlvbiBlbGVtZW50TG9jYXRpb24gPSBudWxsOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gU2VlIGlmIHRoZSBlbGVtZW50IG9iamVjdCBpcyBhbiBpbnN0YW5jZW9mIG9yZy5hcGFjaGUueGVyY2VzLmRvbS5FbGVtZW50SW1wbAotICAgICAgRWxlbWVudEltcGwgZWxlbWVudEltcGwgPSAoRWxlbWVudEltcGwpIGVsZW1lbnQ7Ci0KLSAgICAgIC8vIElmIGl0IGlzLCB0aGVuIGdldCB0aGUgZWxlbWVudCBsb2NhdGlvbiBpbmZvcm1hdGlvbgotICAgICAgZWxlbWVudExvY2F0aW9uID0KLSAgICAgICAgKEVsZW1lbnRMb2NhdGlvbikgZWxlbWVudEltcGwuZ2V0VXNlckRhdGEoKTsKLQotICAgICAgLy8gQWRkIGl0IHRvIHRoZSBsaXN0Ci0gICAgICB0aGlzLndzZGxFbGVtZW50TGlzdC5hZGRFbGVtZW50KHdzZGxFbGVtZW50LCBlbGVtZW50TG9jYXRpb24pOwotICAgIH0KLQotICAgIGNhdGNoIChDbGFzc0Nhc3RFeGNlcHRpb24gY2NlKQotICAgIHsKLSAgICAgIC8vIEFERDogU2hvdWxkIHdlIGFkZCB0aGUgZWxlbWVudCB3aXRoIGEgbnVsbCBvciB6ZXJvIGxvY2F0aW9uPwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHdoZW4gYSBXU0RMIGRvY3VtZW50IGNvbnRhaW5zIGR1cGxpY2F0ZSBvcGVyYXRpb24gbmFtZXMuCi0gICAqIEl0IGlzIHRoZSBzYW1lIGFzIHRoZSBvcmlnaW5hbCBwYXJzZUJpbmRpbmdPcGVyYXRpb24gbWV0aG9kLCBleGNlcHQgdGhhdCBpdCB3aWxsCi0gICAqIGp1c3QgZmluZCB0aGUgZmlyc3Qgb3BlcmF0aW9uIHRoYXQgbWF0Y2hlcyBpbnN0ZWFkIG9mIHRocm93aW5nIGFuIGV4Y2VwdGlvbi4KLSAgICovCi0gIHByaXZhdGUgQmluZGluZ09wZXJhdGlvbiBwYXJzZUJpbmRpbmdPcGVyYXRpb25XaXRoRHVwbGljYXRlTmFtZXMoCi0gICAgRWxlbWVudCBiaW5kaW5nT3BlcmF0aW9uRWwsCi0gICAgUG9ydFR5cGUgcG9ydFR5cGUsCi0gICAgRGVmaW5pdGlvbiBkZWYpCi0gICAgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbiA9IGRlZi5jcmVhdGVCaW5kaW5nT3BlcmF0aW9uKCk7Ci0gICAgU3RyaW5nIG5hbWUgPQotICAgICAgRE9NVXRpbHMuZ2V0QXR0cmlidXRlKGJpbmRpbmdPcGVyYXRpb25FbCwgQ29uc3RhbnRzLkFUVFJfTkFNRSk7Ci0KLSAgICBpZiAobmFtZSAhPSBudWxsKQotICAgIHsKLSAgICAgIGJpbmRpbmdPcGVyYXRpb24uc2V0TmFtZShuYW1lKTsKLSAgICB9Ci0KLSAgICBFbGVtZW50IHRlbXBFbCA9IERPTVV0aWxzLmdldEZpcnN0Q2hpbGRFbGVtZW50KGJpbmRpbmdPcGVyYXRpb25FbCk7Ci0KLSAgICB3aGlsZSAodGVtcEVsICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX0RPQ1VNRU5UQVRJT04sIHRlbXBFbCkpCi0gICAgICB7Ci0gICAgICAgIGJpbmRpbmdPcGVyYXRpb24uc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQodGVtcEVsKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKFFOYW1lVXRpbHMubWF0Y2hlcyhDb25zdGFudHMuUV9FTEVNX0lOUFVULCB0ZW1wRWwpKQotICAgICAgewotICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLnNldEJpbmRpbmdJbnB1dChwYXJzZUJpbmRpbmdJbnB1dCh0ZW1wRWwsIGRlZikpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoUU5hbWVVdGlscy5tYXRjaGVzKENvbnN0YW50cy5RX0VMRU1fT1VUUFVULCB0ZW1wRWwpKQotICAgICAgewotICAgICAgICBiaW5kaW5nT3BlcmF0aW9uLnNldEJpbmRpbmdPdXRwdXQocGFyc2VCaW5kaW5nT3V0cHV0KHRlbXBFbCwgZGVmKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChRTmFtZVV0aWxzLm1hdGNoZXMoQ29uc3RhbnRzLlFfRUxFTV9GQVVMVCwgdGVtcEVsKSkKLSAgICAgIHsKLSAgICAgICAgYmluZGluZ09wZXJhdGlvbi5hZGRCaW5kaW5nRmF1bHQocGFyc2VCaW5kaW5nRmF1bHQodGVtcEVsLCBkZWYpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgYmluZGluZ09wZXJhdGlvbi5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudCgKLSAgICAgICAgICBwYXJzZUV4dGVuc2liaWxpdHlFbGVtZW50KEJpbmRpbmdPcGVyYXRpb24uY2xhc3MsIHRlbXBFbCwgZGVmKSk7Ci0gICAgICB9Ci0KLSAgICAgIHRlbXBFbCA9IERPTVV0aWxzLmdldE5leHRTaWJsaW5nRWxlbWVudCh0ZW1wRWwpOwotICAgIH0KLQotICAgIGlmIChwb3J0VHlwZSAhPSBudWxsKQotICAgIHsKLSAgICAgIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpOwotICAgICAgQmluZGluZ091dHB1dCBiaW5kaW5nT3V0cHV0ID0gYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nT3V0cHV0KCk7Ci0gICAgICBTdHJpbmcgaW5wdXROYW1lID0gKGJpbmRpbmdJbnB1dCAhPSBudWxsID8gYmluZGluZ0lucHV0LmdldE5hbWUoKSA6IG51bGwpOwotICAgICAgU3RyaW5nIG91dHB1dE5hbWUgPQotICAgICAgICAoYmluZGluZ091dHB1dCAhPSBudWxsID8gYmluZGluZ091dHB1dC5nZXROYW1lKCkgOiBudWxsKTsKLQotICAgICAgLy9PcGVyYXRpb24gb3AgPSBwb3J0VHlwZS5nZXRPcGVyYXRpb24obmFtZSwgaW5wdXROYW1lLCBvdXRwdXROYW1lKTsKLSAgICAgIC8vIEdldCBhbGwgb3BlcmF0aW9ucywgYW5kIHRoZW4gZmluZCB0aGUgZmlyc3Qgb25lIHRoYXQgbWF0Y2hlcwotICAgICAgT3BlcmF0aW9uIG9wID0gbnVsbCwgY2hlY2tPcGVyYXRpb247Ci0gICAgICBJdGVyYXRvciBpdGVyYXRvciA9IHBvcnRUeXBlLmdldE9wZXJhdGlvbnMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSAmJiBvcCA9PSBudWxsKQotICAgICAgewotICAgICAgICAvLyBHZXQgdGhlIG5leHQgb3BlcmF0aW9uCi0gICAgICAgIGNoZWNrT3BlcmF0aW9uID0gKE9wZXJhdGlvbikgaXRlcmF0b3IubmV4dCgpOwotCi0gICAgICAgIC8vIEdldCB0aGUgb3BlcmF0aW9uIG5hbWUsIGlucHV0IG5hbWUsIGFuZCBvdXRwdXQgbmFtZQotICAgICAgICBTdHJpbmcgY2hlY2tOYW1lID0gY2hlY2tPcGVyYXRpb24uZ2V0TmFtZSgpOwotICAgICAgICBTdHJpbmcgY2hlY2tJbnB1dE5hbWUgPQotICAgICAgICAgIChjaGVja09wZXJhdGlvbi5nZXRJbnB1dCgpID09IG51bGwKLSAgICAgICAgICAgID8gbnVsbAotICAgICAgICAgICAgOiBjaGVja09wZXJhdGlvbi5nZXRJbnB1dCgpLmdldE5hbWUoKSk7Ci0gICAgICAgIFN0cmluZyBjaGVja091dHB1dE5hbWUgPQotICAgICAgICAgIChjaGVja09wZXJhdGlvbi5nZXRPdXRwdXQoKSA9PSBudWxsCi0gICAgICAgICAgICA/IG51bGwKLSAgICAgICAgICAgIDogY2hlY2tPcGVyYXRpb24uZ2V0T3V0cHV0KCkuZ2V0TmFtZSgpKTsKLQotICAgICAgICAvLyBJZiB0aGUgbmFtZXMgbWF0Y2gsIHRoZW4gdGhhdCBvcGVyYXRpb24KLSAgICAgICAgaWYgKChjaGVja05hbWUgIT0gbnVsbCAmJiBjaGVja05hbWUuZXF1YWxzKG5hbWUpKQotICAgICAgICAgICYmICgoY2hlY2tJbnB1dE5hbWUgIT0gbnVsbCAmJiBjaGVja0lucHV0TmFtZS5lcXVhbHMoaW5wdXROYW1lKSkKLSAgICAgICAgICAgIHx8IChjaGVja0lucHV0TmFtZSA9PSBudWxsICYmIGlucHV0TmFtZSA9PSBudWxsKSkKLSAgICAgICAgICAmJiAoKGNoZWNrT3V0cHV0TmFtZSAhPSBudWxsICYmIGNoZWNrT3V0cHV0TmFtZS5lcXVhbHMob3V0cHV0TmFtZSkpCi0gICAgICAgICAgICB8fCAoY2hlY2tPdXRwdXROYW1lID09IG51bGwgJiYgb3V0cHV0TmFtZSA9PSBudWxsKSkpCi0gICAgICAgIHsKLSAgICAgICAgICBvcCA9IGNoZWNrT3BlcmF0aW9uOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmIChvcCA9PSBudWxsKQotICAgICAgewotICAgICAgICBvcCA9IGRlZi5jcmVhdGVPcGVyYXRpb24oKTsKLSAgICAgICAgb3Auc2V0TmFtZShuYW1lKTsKLSAgICAgICAgcG9ydFR5cGUuYWRkT3BlcmF0aW9uKG9wKTsKLSAgICAgIH0KLQotICAgICAgYmluZGluZ09wZXJhdGlvbi5zZXRPcGVyYXRpb24ob3ApOwotICAgIH0KLQotICAgIHJldHVybiBiaW5kaW5nT3BlcmF0aW9uOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwvV1NETFV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL1dTRExVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTdiNjFiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwvV1NETFV0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXI7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci0KLS8qKgotICogU2V0IG9mIFhNTCByZWxhdGVkIHV0aWxpdGllcy4KLSAqIAotICogQGF1dGhvciBQZXRlciAgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICogQHZlcnNpb24gMS4wLjEKLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIFdTRExVdGlscwotewotCi0gIC8qKgotICAgKiBNZXRob2QgaXNScGNMaXRlcmFsLgotICAgKiBAcGFyYW0gYmluZGluZ1N0eWxlIGEgYmluZGluZyBzdHlsZS4KLSAgICogQHBhcmFtIG9wZXJhdGlvbiBhIFdTREwgYmluZGluZyBvcGVyYXRpb24gYXJ0aWZhY3QuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiBiaW5kaW5nIGlzIHJwYyBsaXRlcmFsLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzUnBjTGl0ZXJhbCgKLSAgICBTdHJpbmcgYmluZGluZ1N0eWxlLAotICAgIEJpbmRpbmdPcGVyYXRpb24gb3BlcmF0aW9uKQotICB7Ci0gICAgcmV0dXJuIGNoZWNrU3R5bGVBbmRVc2UoCi0gICAgICBXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JJTkRfU1RZTEVfUlBDLAotICAgICAgV1NJQ29uc3RhbnRzLkFUVFJWQUxfU09BUF9CT0RZX1VTRV9MSVQsCi0gICAgICBiaW5kaW5nU3R5bGUsCi0gICAgICBvcGVyYXRpb24pOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBpc0RvY0xpdGVyYWwuCi0gICAqIEBwYXJhbSBiaW5kaW5nU3R5bGUgIHRoZSBiaW5kaW5nIHN0eWxlLgotICAgKiBAcGFyYW0gb3BlcmF0aW9uIGEgV1NETCBiaW5kaW5nIG9wZXJhdGlvbi4KLSAgICogQHJldHVybiB0cnVlIGlmIGJpbmRpbmcgaXMgZG9jdW1lbnQgbGl0ZXJhbC4gCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNEb2NMaXRlcmFsKAotICAgIFN0cmluZyBiaW5kaW5nU3R5bGUsCi0gICAgQmluZGluZ09wZXJhdGlvbiBvcGVyYXRpb24pCi0gIHsKLSAgICByZXR1cm4gY2hlY2tTdHlsZUFuZFVzZSgKLSAgICAgIFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQklORF9TVFlMRV9ET0MsCi0gICAgICBXU0lDb25zdGFudHMuQVRUUlZBTF9TT0FQX0JPRFlfVVNFX0xJVCwKLSAgICAgIGJpbmRpbmdTdHlsZSwKLSAgICAgIG9wZXJhdGlvbik7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGNoZWNrU3R5bGVBbmRVc2UuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGNoZWNrU3R5bGVBbmRVc2UoCi0gICAgU3RyaW5nIGNoZWNrU3R5bGUsCi0gICAgU3RyaW5nIGNoZWNrVXNlLAotICAgIFN0cmluZyBiaW5kaW5nU3R5bGUsCi0gICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uKQotICB7Ci0gICAgYm9vbGVhbiBzdHlsZUZvdW5kID0gZmFsc2U7Ci0gICAgYm9vbGVhbiBzdHlsZUFuZFVzZUZvdW5kID0gZmFsc2U7Ci0KLSAgICAvLyBGaW5kIHRoZSBzb2FwYmluZDpvcGVyYXRpb24gZWxlbWVudAotICAgIFNPQVBPcGVyYXRpb24gc29hcE9wZXJhdGlvbiA9IGdldFNvYXBPcGVyYXRpb24oYmluZGluZ09wZXJhdGlvbik7Ci0KLSAgICAvLyBJZiB0aGVyZSBhcmUgbm8gZXh0IGVsZW1lbnRzLCB0aGVuIGNoZWNrIGFnYWluc3QgYmluZGluZyBzdHlsZQotICAgIGlmICgoc29hcE9wZXJhdGlvbiA9PSBudWxsKSB8fCAoc29hcE9wZXJhdGlvbi5nZXRTdHlsZSgpID09IG51bGwpKQotICAgIHsKLSAgICAgIGlmIChjaGVja1N0eWxlLmVxdWFscyhiaW5kaW5nU3R5bGUpKQotICAgICAgICBzdHlsZUZvdW5kID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBlbHNlCi0gICAgewotICAgICAgaWYgKGNoZWNrU3R5bGUuZXF1YWxzKHNvYXBPcGVyYXRpb24uZ2V0U3R5bGUoKSkpCi0gICAgICAgIHN0eWxlRm91bmQgPSB0cnVlOwotICAgIH0KLQotICAgIC8vIElmIHN0eWxlIGZvdW5kIHRoZW4gY2hlY2sgdXNlCi0gICAgaWYgKHN0eWxlRm91bmQpCi0gICAgewotICAgICAgLy8gRmluZCB0aGUgc29hcGJpbmQ6Ym9keSBlbGVtZW50Ci0gICAgICBTT0FQQm9keSBzb2FwQm9keSA9IGdldElucHV0U29hcEJvZHkoYmluZGluZ09wZXJhdGlvbik7Ci0KLSAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBzb2FwYmluZDpib2R5LCB0aGVuIGNoZWNrIGFnYWluc3QgZGVmYXVsdCB1c2UgdmFsdWUKLSAgICAgIGlmICgoc29hcEJvZHkgPT0gbnVsbCkgfHwgKHNvYXBCb2R5LmdldFVzZSgpID09IG51bGwpKQotICAgICAgewotICAgICAgICBpZiAoY2hlY2tVc2UuZXF1YWxzKFdTSUNvbnN0YW50cy5BVFRSVkFMX1NPQVBfQk9EWV9VU0VfTElUKSkKLSAgICAgICAgICBzdHlsZUFuZFVzZUZvdW5kID0gdHJ1ZTsKLSAgICAgIH0KLQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBpZiAoY2hlY2tVc2UuZXF1YWxzKHNvYXBCb2R5LmdldFVzZSgpKSkKLSAgICAgICAgICBzdHlsZUFuZFVzZUZvdW5kID0gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gc3R5bGVBbmRVc2VGb3VuZDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgc29hcGJpbmQ6YmluZGluZy4KLSAgICogQHBhcmFtIGJpbmRpbmcgIGEgQmluZGluZyBvYmplY3QuCi0gICAqIEByZXR1cm4gc29hcGJpbmQ6YmluZGluZy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU09BUEJpbmRpbmcgZ2V0U29hcEJpbmRpbmcoQmluZGluZyBiaW5kaW5nKQotICB7Ci0gICAgU09BUEJpbmRpbmcgc29hcEJpbmRpbmcgPSBudWxsOwotCi0gICAgTGlzdCBleHRFbGVtZW50cyA9IG51bGw7Ci0KLSAgICAvLyBGaW5kIHRoZSBzb2FwYmluZDpvcGVyYXRpb24gZWxlbWVudAotICAgIGlmICgoZXh0RWxlbWVudHMgPSBiaW5kaW5nLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpKSAhPSBudWxsKQotICAgIHsKLSAgICAgIGZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSBleHRFbGVtZW50cy5pdGVyYXRvcigpOwotICAgICAgICBpdGVyYXRvci5oYXNOZXh0KCkgJiYgKHNvYXBCaW5kaW5nID09IG51bGwpOwotICAgICAgICApCi0gICAgICB7Ci0gICAgICAgIE9iamVjdCBvYmogPSBpdGVyYXRvci5uZXh0KCk7Ci0KLSAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIFNPQVBCaW5kaW5nKQotICAgICAgICB7Ci0gICAgICAgICAgc29hcEJpbmRpbmcgPSAoU09BUEJpbmRpbmcpIG9iajsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBzb2FwQmluZGluZzsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgc29hcGJpbmQ6b3BlcmF0aW9uLgotICAgKiBAcGFyYW0gYmluZGluZ09wZXJhdGlvbiAgYSBCaW5kaW5nT3BlcmF0aW9uIG9iamVjdC4KLSAgICogQHJldHVybiBzb2FwYmluZDpvcGVyYXRpb24uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFNPQVBPcGVyYXRpb24gZ2V0U29hcE9wZXJhdGlvbihCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24pCi0gIHsKLSAgICBTT0FQT3BlcmF0aW9uIHNvYXBPcGVyYXRpb24gPSBudWxsOwotCi0gICAgTGlzdCBleHRFbGVtZW50cyA9IG51bGw7Ci0KLSAgICAvLyBGaW5kIHRoZSBzb2FwYmluZDpvcGVyYXRpb24gZWxlbWVudAotICAgIGlmICgoZXh0RWxlbWVudHMgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpKSAhPSBudWxsKQotICAgIHsKLSAgICAgIGZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSBleHRFbGVtZW50cy5pdGVyYXRvcigpOwotICAgICAgICBpdGVyYXRvci5oYXNOZXh0KCkgJiYgKHNvYXBPcGVyYXRpb24gPT0gbnVsbCk7Ci0gICAgICAgICkKLSAgICAgIHsKLSAgICAgICAgT2JqZWN0IG9iaiA9IGl0ZXJhdG9yLm5leHQoKTsKLQotICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgU09BUE9wZXJhdGlvbikKLSAgICAgICAgewotICAgICAgICAgIHNvYXBPcGVyYXRpb24gPSAoU09BUE9wZXJhdGlvbikgb2JqOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHNvYXBPcGVyYXRpb247Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHNvYXBiaW5kOmJvZHkgZnJvbSBpbnB1dCBlbGVtZW50LgotICAgKiBAcGFyYW0gYmluZGluZ09wZXJhdGlvbiAgdGhlIEJpbmRpbmdPcGVyYXRpb24gb2JqZWN0LgotICAgKiBAcmV0dXJuIHNvYXBiaW5kOmJvZHkgZnJvbSBpbnB1dCBlbGVtZW50LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTT0FQQm9keSBnZXRJbnB1dFNvYXBCb2R5KEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbikKLSAgewotICAgIFNPQVBCb2R5IHNvYXBCb2R5ID0gbnVsbDsKLQotICAgIExpc3QgZXh0RWxlbWVudHMgPSBudWxsOwotCi0gICAgLy8gRmluZCB0aGUgc29hcGJpbmQ6Ym9keSBlbGVtZW50Ci0gICAgaWYgKChleHRFbGVtZW50cyA9Ci0gICAgICBiaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdJbnB1dCgpLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpKQotICAgICAgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGl0ZXJhdG9yID0gZXh0RWxlbWVudHMuaXRlcmF0b3IoKTsKLSAgICAgICAgaXRlcmF0b3IuaGFzTmV4dCgpICYmIChzb2FwQm9keSA9PSBudWxsKTsKLSAgICAgICAgKQotICAgICAgewotICAgICAgICBPYmplY3Qgb2JqID0gaXRlcmF0b3IubmV4dCgpOwotCi0gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBTT0FQQm9keSkKLSAgICAgICAgewotICAgICAgICAgIHNvYXBCb2R5ID0gKFNPQVBCb2R5KSBvYmo7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gc29hcEJvZHk7Ci0gIH0KLQotICAvKioKLSAgICogRmluZCBtZXNzYWdlcyByZWZlcmVuY2VkIGJ5IGEgaGVhZGVyIG9yIGhlYWRlcmZhdWx0LgotICAgKiBAcGFyYW0gZGVmaW5pdGlvbiAgYSBEZWZpbml0aW9uIG9iamVjdC4KLSAgICogQHBhcmFtIGJpbmRpbmcgIGEgQmluZGluZyBvYmplY3QuCi0gICAqIEByZXR1cm4gbWVzc2FnZXMgcmVmZXJlbmNlZCBieSBhIGhlYWRlciBvciBoZWFkZXJmYXVsdC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgSGFzaFNldCBmaW5kTWVzc2FnZXMoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBCaW5kaW5nIGJpbmRpbmcpCi0gIHsKLSAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb247Ci0KLSAgICBIYXNoU2V0IHRlbXBNZXNzYWdlcywgYmluZGluZ01lc3NhZ2VzID0gbmV3IEhhc2hTZXQoKTsKLQotICAgIEhhc2hTZXQgcG9ydFR5cGVNZXNzYWdlcyA9IGZpbmRNZXNzYWdlcyhiaW5kaW5nLmdldFBvcnRUeXBlKCkpOwotCi0gICAgLy8gUHJvY2VzcyBlYWNoIG9wZXJhdGlvbgotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gYmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBiaW5kaW5nT3BlcmF0aW9uID0gKEJpbmRpbmdPcGVyYXRpb24pIGl0ZXJhdG9yLm5leHQoKTsKLQotICAgICAgLy8gUHJvY2VzcyB0aGUgaW5wdXQgYW5kIHRoZW4gdGhlIG91dHB1dAotICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCkgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgdGVtcE1lc3NhZ2VzID0KLSAgICAgICAgICBmaW5kTWVzc2FnZXMoCi0gICAgICAgICAgICBiaW5kaW5nT3BlcmF0aW9uCi0gICAgICAgICAgICAgIC5nZXRCaW5kaW5nSW5wdXQoKQotICAgICAgICAgICAgICAuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkKLSAgICAgICAgICAgICAgLml0ZXJhdG9yKCksCi0gICAgICAgICAgICBwb3J0VHlwZU1lc3NhZ2VzLAotICAgICAgICAgICAgZGVmaW5pdGlvbik7Ci0KLSAgICAgICAgLy8gQWRkIG1lc3NhZ2VzIHRvIGJpbmRpbmcgbWVzc2FnZSBzZXQKLSAgICAgICAgYmluZGluZ01lc3NhZ2VzLmFkZEFsbCh0ZW1wTWVzc2FnZXMpOwotICAgICAgfQotCi0gICAgICAvLyBQcm9jZXNzIG91dHB1dAotICAgICAgaWYgKGJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ091dHB1dCgpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRlbXBNZXNzYWdlcyA9Ci0gICAgICAgICAgZmluZE1lc3NhZ2VzKAotICAgICAgICAgICAgYmluZGluZ09wZXJhdGlvbgotICAgICAgICAgICAgICAuZ2V0QmluZGluZ091dHB1dCgpCi0gICAgICAgICAgICAgIC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKQotICAgICAgICAgICAgICAuaXRlcmF0b3IoKSwKLSAgICAgICAgICAgIHBvcnRUeXBlTWVzc2FnZXMsCi0gICAgICAgICAgICBkZWZpbml0aW9uKTsKLQotICAgICAgICAvLyBBZGQgbWVzc2FnZXMgdG8gYmluZGluZyBtZXNzYWdlIHNldAotICAgICAgICBiaW5kaW5nTWVzc2FnZXMuYWRkQWxsKHRlbXBNZXNzYWdlcyk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGJpbmRpbmdNZXNzYWdlczsKLSAgfQotCi0gIC8qKgotICAgKiBGaW5kIHRoZSBtZXNzYWdlcyB0aGF0IGFyZSByZWZlcmVuY2VkIGJ5IGEgaGVhZGVyIG9yIGhlYWRlcmZhdWx0LgotICAgKiBAcGFyYW0gcG9ydFR5cGUgYSBQb3J0VHlwZSBvYmplY3QuCi0gICAqIEByZXR1cm4gaGUgbWVzc2FnZXMgdGhhdCBhcmUgcmVmZXJlbmNlZCBieSBhIGhlYWRlciBvciBoZWFkZXJmYXVsdC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgSGFzaFNldCBmaW5kTWVzc2FnZXMoUG9ydFR5cGUgcG9ydFR5cGUpCi0gIHsKLSAgICBIYXNoU2V0IG1lc3NhZ2VTZXQgPSBuZXcgSGFzaFNldCgpOwotICAgIE9wZXJhdGlvbiBvcGVyYXRpb247Ci0KLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IHBvcnRUeXBlLmdldE9wZXJhdGlvbnMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgLy8gR2V0IG5leHQgb3BlcmF0aW9uIHRvIHByb2Nlc3MKLSAgICAgIG9wZXJhdGlvbiA9IChPcGVyYXRpb24pIGl0ZXJhdG9yLm5leHQoKTsKLQotICAgICAgLy8gR2V0IGlucHV0IGFuZCBvdXRwdXQgbWVzc2FnZQotICAgICAgaWYgKG9wZXJhdGlvbi5nZXRJbnB1dCgpICE9IG51bGwpCi0gICAgICAgIG1lc3NhZ2VTZXQuYWRkKG9wZXJhdGlvbi5nZXRJbnB1dCgpLmdldE1lc3NhZ2UoKSk7Ci0gICAgICBpZiAob3BlcmF0aW9uLmdldE91dHB1dCgpICE9IG51bGwpCi0gICAgICAgIG1lc3NhZ2VTZXQuYWRkKG9wZXJhdGlvbi5nZXRPdXRwdXQoKS5nZXRNZXNzYWdlKCkpOwotCi0gICAgICAvLyBQcm9jZXNzIGFueSBmYXVsdHMKLSAgICAgIEl0ZXJhdG9yIGZhdWx0cyA9IG9wZXJhdGlvbi5nZXRGYXVsdHMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGZhdWx0cy5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIG1lc3NhZ2VTZXQuYWRkKCgoRmF1bHQpIGZhdWx0cy5uZXh0KCkpLmdldE1lc3NhZ2UoKSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1lc3NhZ2VTZXQ7Ci0gIH0KLQotICAvKioKLSAgICogRmluZCB0aGUgbWVzc2FnZXMgdGhhdCBhcmUgcmVmZXJlbmNlZCBieSBhIGhlYWRlciBvciBoZWFkZXJmYXVsdC4KLSAgICogQHBhcmFtIGV4dEVsZW1lbnRMaXN0IGEgbGlzdCBvZiBleHRlcm5hbCBlbGVtZW50cy4KLSAgICogQHBhcmFtIG1lc3NhZ2VTZXQgYSBzZXQgb2YgbWVzc2FnZXMuCi0gICAqIEBwYXJhbSBkZWZpbml0aW9uIGEgRGVmaW5pdGlvbiBvYmplY3QuCi0gICAqIEByZXR1cm4gdGhlIG1lc3NhZ2VzIHRoYXQgYXJlIHJlZmVyZW5jZWQgYnkgYSBoZWFkZXIgb3IgaGVhZGVyZmF1bHQuCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIEhhc2hTZXQgZmluZE1lc3NhZ2VzKAotICAgIEl0ZXJhdG9yIGV4dEVsZW1lbnRMaXN0LAotICAgIEhhc2hTZXQgbWVzc2FnZVNldCwKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICBIYXNoU2V0IHJldHVyblNldCA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0RWxlbWVudDsKLSAgICBNZXNzYWdlIHNhdmVNZXNzYWdlID0gbnVsbDsKLQotICAgIHdoaWxlIChleHRFbGVtZW50TGlzdC5oYXNOZXh0KCkpCi0gICAgewotICAgICAgLy8gR2V0IGV4dC4gZWxlbWVudAotICAgICAgZXh0RWxlbWVudCA9IChFeHRlbnNpYmlsaXR5RWxlbWVudCkgZXh0RWxlbWVudExpc3QubmV4dCgpOwotCi0gICAgICBRTmFtZSBtZXNzYWdlUU5hbWU7Ci0gICAgICBNZXNzYWdlIG1lc3NhZ2U7Ci0KLSAgICAgIC8vIElmIHRoaXMgaXMgYSBzb2FwOmhlYWRlciBlbGVtZW50LCB0aGVuIGNoZWNrIGZvciBtZXNzYWdlIHJlZmVyZW5jZQotICAgICAgaWYgKGV4dEVsZW1lbnQgaW5zdGFuY2VvZiBTT0FQSGVhZGVyKQotICAgICAgewotICAgICAgICBTT0FQSGVhZGVyIHNvYXBIZWFkZXIgPSAoU09BUEhlYWRlcikgZXh0RWxlbWVudDsKLSAgICAgICAgaWYgKChtZXNzYWdlUU5hbWUgPSBzb2FwSGVhZGVyLmdldE1lc3NhZ2UoKSkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIC8vIElmIG1lc3NhZ2Ugbm90IGZvdW5kLCB0aGVuIGNyZWF0ZSBhIGR1bW15IG1lc3NhZ2UgZWxlbWVudAotICAgICAgICAgIGlmICgobWVzc2FnZSA9IGRlZmluaXRpb24uZ2V0TWVzc2FnZShtZXNzYWdlUU5hbWUpKSA9PSBudWxsKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG1lc3NhZ2UgPSBkZWZpbml0aW9uLmNyZWF0ZU1lc3NhZ2UoKTsKLSAgICAgICAgICAgIG1lc3NhZ2Uuc2V0UU5hbWUobWVzc2FnZVFOYW1lKTsKLSAgICAgICAgICAgIG1lc3NhZ2Uuc2V0VW5kZWZpbmVkKHRydWUpOwotICAgICAgICAgIH0KLQotICAgICAgICAgIGlmICghbWVzc2FnZVNldC5jb250YWlucyhtZXNzYWdlKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm5TZXQuYWRkKG1lc3NhZ2UpOwotICAgICAgICAgICAgc2F2ZU1lc3NhZ2UgPSBtZXNzYWdlOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIFByb2Nlc3MgYW55IGhlYWRlciBmYXVsdHMgd2l0aGluIHRoaXMgaGVhZGVyCi0gICAgICAgIEl0ZXJhdG9yIGhlYWRlckZhdWx0TGlzdCA9IHNvYXBIZWFkZXIuZ2V0U09BUEhlYWRlckZhdWx0cygpLml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChoZWFkZXJGYXVsdExpc3QuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gR2V0IHNvYXAgaGVhZGVyIGZhdWx0Ci0gICAgICAgICAgU09BUEhlYWRlckZhdWx0IHNvYXBIZWFkZXJGYXVsdCA9Ci0gICAgICAgICAgICAoU09BUEhlYWRlckZhdWx0KSBoZWFkZXJGYXVsdExpc3QubmV4dCgpOwotICAgICAgICAgIGlmICgobWVzc2FnZVFOYW1lID0gc29hcEhlYWRlckZhdWx0LmdldE1lc3NhZ2UoKSkgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBJZiBtZXNzYWdlIG5vdCBmb3VuZCwgdGhlbiBjcmVhdGUgYSBkdW1teSBtZXNzYWdlIGVsZW1lbnQKLSAgICAgICAgICAgIGlmICgobWVzc2FnZSA9IGRlZmluaXRpb24uZ2V0TWVzc2FnZShtZXNzYWdlUU5hbWUpKSA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBtZXNzYWdlID0gZGVmaW5pdGlvbi5jcmVhdGVNZXNzYWdlKCk7Ci0gICAgICAgICAgICAgIG1lc3NhZ2Uuc2V0UU5hbWUobWVzc2FnZVFOYW1lKTsKLSAgICAgICAgICAgICAgbWVzc2FnZS5zZXRVbmRlZmluZWQodHJ1ZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIElmIG1lc3NhZ2Ugbm90IGluIG1lc3NhZ2Ugc2V0IGFuZCByZXR1cm4gc2V0LCB0aGVuIGFkZCBpdCAgCi0gICAgICAgICAgICBpZiAoIW1lc3NhZ2VTZXQuY29udGFpbnMobWVzc2FnZSkKLSAgICAgICAgICAgICAgJiYgKChzYXZlTWVzc2FnZSA9PSBudWxsKQotICAgICAgICAgICAgICAgIHx8IChzYXZlTWVzc2FnZSAhPSBudWxsCi0gICAgICAgICAgICAgICAgICAmJiAhc2F2ZU1lc3NhZ2UuZ2V0UU5hbWUoKS5lcXVhbHMobWVzc2FnZS5nZXRRTmFtZSgpKSkpKQotICAgICAgICAgICAgICByZXR1cm5TZXQuYWRkKG1lc3NhZ2UpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByZXR1cm5TZXQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1NPQVAxMldTREwoV1NETERvY3VtZW50IHdzZGxEb2N1bWVudCkKLSAgewotCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0JaWYgKHdzZGxEb2N1bWVudCAhPSBudWxsKQotCXsKLQkgIEJpbmRpbmdbXSBiaW5kaW5ncyA9IHdzZGxEb2N1bWVudC5nZXRCaW5kaW5ncygpOwotCSAgTGlzdCBleHRlbnNpYmlsaXR5RWxlbWVudExpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JICBpZiAoYmluZGluZ3MgIT0gbnVsbCkKLQkgIHsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBiaW5kaW5ncy5sZW5ndGg7IGkrKykKLQkJCWV4dGVuc2liaWxpdHlFbGVtZW50TGlzdC5hZGRBbGwoYmluZGluZ3NbaV0uZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkpOwotCQlJdGVyYXRvciBpdGVyYXRvciA9IGV4dGVuc2liaWxpdHlFbGVtZW50TGlzdC5pdGVyYXRvcigpOwotCQl3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKSAKLQkJewotCQkgIEV4dGVuc2liaWxpdHlFbGVtZW50IGUgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGl0ZXJhdG9yLm5leHQoKTsKLQkJCWlmIChXU0lDb25zdGFudHMuTlNfVVJJX1dTRExfU09BUDEyLmVxdWFscyhlLmdldEVsZW1lbnRUeXBlKCkuZ2V0TmFtZXNwYWNlVVJJKCkpKQotCQkJewotCQkJICByZXN1bHQgPSB0cnVlOwotCQkJICBicmVhazsKLQkJCX0KLQkJfQotCSAgfQotCX0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3RyYXZlcnNhbC9WaXNpdG9yQWRhcHRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC90cmF2ZXJzYWwvVmlzaXRvckFkYXB0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGI5MDkzOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3RyYXZlcnNhbC9WaXNpdG9yQWRhcHRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbDsKLQotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25IYW5kbGVyOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5Qcm94eTsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0ZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5JbXBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5JbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5QYXJ0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBqYXZheC53c2RsLlR5cGVzOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keTsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlcjsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUE9wZXJhdGlvbjsKLQotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLS8qKgotICogVGhlIGNsYXNzIGFkYXB0cyB0aGUgZ2l2ZW4gb2JqZWN0IHdpdGggdGhlIGltcGxlbWVudGVkCi0gKiA8Y29kZT5XU0RMVmlzaXRvcjwvY29kZT4gbWV0aG9kcy4KLSAqIAotICogQGF1dGhvciBLdWxpawotICovCi1wdWJsaWMgY2xhc3MgVmlzaXRvckFkYXB0b3IgaW1wbGVtZW50cyBJbnZvY2F0aW9uSGFuZGxlcgotewotCi0gIC8vIG9wdGltaXphdGlvbiBoaW50Ci0gIHN0YXRpYyBmaW5hbCBwcml2YXRlIENsYXNzW10gdmlzaXRvckNsYXNzID0gbmV3IENsYXNzW10geyBXU0RMVmlzaXRvci5jbGFzcyB9OwotCi0gIC8qKgotICAgKiBUaGUgYXJyYXkgaXMgdXNlZCBmb3IgZGV0ZXJtaW5hdGlvbiBvZiBhY3R1YWwgamF2YXgud3NkbCBjbGFzcwotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgQ2xhc3NbXSB3c2RsID0KLSAgICBuZXcgQ2xhc3NbXSB7Ci0gICAgICBQYXJ0LmNsYXNzLAotICAgICAgU2VydmljZS5jbGFzcywKLSAgICAgIFR5cGVzLmNsYXNzLAotICAgICAgT3BlcmF0aW9uLmNsYXNzLAotICAgICAgSW5wdXQuY2xhc3MsCi0gICAgICBPdXRwdXQuY2xhc3MsCi0gICAgICBGYXVsdC5jbGFzcywKLSAgICAgIEJpbmRpbmcuY2xhc3MsCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uLmNsYXNzLAotICAgICAgQmluZGluZ0lucHV0LmNsYXNzLAotICAgICAgQmluZGluZ091dHB1dC5jbGFzcywKLSAgICAgIEJpbmRpbmdGYXVsdC5jbGFzcywKLSAgICAgIEltcG9ydC5jbGFzcywKLSAgICAgIEVsZW1lbnQuY2xhc3MsCi0gICAgICBNZXNzYWdlLmNsYXNzLAotICAgICAgUG9ydC5jbGFzcywKLSAgICAgIFBvcnRUeXBlLmNsYXNzLAotICAgICAgRGVmaW5pdGlvbi5jbGFzcywKLSAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50LmNsYXNzLAotICAgICAgU09BUEJpbmRpbmcuY2xhc3MsCi0gICAgICBTT0FQQm9keS5jbGFzcywKLSAgICAgIFNPQVBIZWFkZXIuY2xhc3MsCi0gICAgICBTT0FQSGVhZGVyRmF1bHQuY2xhc3MsCi0gICAgICBTT0FQRmF1bHQuY2xhc3MsCi0gICAgICBTT0FQT3BlcmF0aW9uLmNsYXNzIH07Ci0KLSAgZmluYWwgcHJpdmF0ZSBPYmplY3QgdmlzaXRvcjsKLQotICBwcml2YXRlIE1hcCBtZXRob2RzID0gbmV3IEhhc2hNYXAoKTsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqIEBwYXJhbSBvICBhIHZpc2l0b3Igb2JqZWN0LgotICAgKi8KLSAgcHJpdmF0ZSBWaXNpdG9yQWRhcHRvcihPYmplY3QgbykKLSAgewotICAgIHRoaXMudmlzaXRvciA9IG87Ci0gIH0KLQotICAvKioKLSAgICogQWRkcyBtZXRob2QgdG8gbWV0aG9kIGJpbmRpbmcuCi0gICAqIEBwYXJhbSB3c2RsTWV0aG9kICAgIGEgV1NETCBtZXRob2QuCi0gICAqIEBwYXJhbSB0YXJnZXRNZXRob2QgIGEgIHRhcmdldCBtZXRob2QuCi0gICAqLwotICBwcml2YXRlIHZvaWQgYWRkTWV0aG9kQmluZGluZyhNZXRob2Qgd3NkbE1ldGhvZCwgTWV0aG9kIHRhcmdldE1ldGhvZCkKLSAgewotICAgIG1ldGhvZHMucHV0KHdzZGxNZXRob2QsIHRhcmdldE1ldGhvZCk7Ci0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCBwcm94aWVzIGFsbCAidmlzaXQoWFhYKSIgbWV0aG9kcyB0byB0aGUgY29ycmVzcG9uZGluZwotICAgKiAidmlzaXQoWFhYKSIgbWV0aG9kcyBvZiB0aGUgdGFyZ2V0IHZpc2l0b3Igb2JqZWN0LiAKLSAgICogQHNlZSBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uSGFuZGxlciNpbnZva2UoT2JqZWN0LCBNZXRob2QsIE9iamVjdFtdKQotICAgKi8KLSAgcHVibGljIE9iamVjdCBpbnZva2UoT2JqZWN0IHByb3h5LCBNZXRob2QgbSwgT2JqZWN0W10gcGFyYW1zKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgTWV0aG9kIHRhcmdldCA9IChNZXRob2QpIG1ldGhvZHMuZ2V0KG0pOwotICAgICAgLy8gYXNzZXJ0IHRhcmdldCAhPSBudWxsCi0gICAgICByZXR1cm4gdGFyZ2V0Lmludm9rZSh2aXNpdG9yLCBwYXJhbXMpOwotICAgIH0KLSAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgewotICAgICAgdC5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCBleHRyYWN0IHRoZSBzaG9ydCBjbGFzcyBuYW1lLiAKLSAgICogQHBhcmFtIGMgIGEgY2xhc3MuCi0gICAqIEByZXR1cm4gdGhlIHNob3J0IGNsYXNzIG5hbWUuCi0gICAqLwotICBzdGF0aWMgcHJpdmF0ZSBTdHJpbmcgZ2V0TmFtZShDbGFzcyBjKQotICB7Ci0gICAgaWYgKGMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgbmFtZSA9IGMuZ2V0TmFtZSgpOwotICAgICAgcmV0dXJuIG5hbWUuc3Vic3RyaW5nKG5hbWUubGFzdEluZGV4T2YoIi4iKSArIDEpOwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIGdlbmVyYXRlcyBwcm94eSBmb3IgdGhlIGdpdmVuIHZpc2l0b3IuCi0gICAqIFByb3h5IHJlZGlyZWN0cyBhbGwgdmlzaXQoWFhYKSBjYWxsYmFjayB0byB0aGUgaW1wbGVtZW50ZWQgaW4gdmlzaXRvcgotICAgKiBvYmplY3QuCi0gICAqIEBwYXJhbSB2aXNpdG9yICBhIHZpc3RvciBvYmplY3QuCi0gICAqIEByZXR1cm4gYSBwcm94eSBmb3IgdGhlIGdpdmVuIHZpc2l0b3IuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFdTRExUcmF2ZXJzYWwgYWRhcHQoT2JqZWN0IHZpc2l0b3IpCi0gIHsKLSAgICBXU0RMVHJhdmVyc2FsIHRyYXZlcnNhbCA9IG5ldyBXU0RMVHJhdmVyc2FsKCk7Ci0KLSAgICBpZiAodmlzaXRvciA9PSBudWxsKQotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVmlzaXRvciBvYmplY3QgY2FuIG5vdCBiZSBOVUxMIik7Ci0KLSAgICBWaXNpdG9yQWRhcHRvciBhZGFwdG9yID0gbmV3IFZpc2l0b3JBZGFwdG9yKHZpc2l0b3IpOwotCi0gICAgLy8gY2hlY2sgd2hldGhlciBtZXRob2RzIGFyZSBpbXBsZW1lbnRlZAotICAgIC8vIGdldCByZWFsIGNsYXNzIG9mIHRoZSBvYmplY3QKLSAgICBDbGFzcyBjID0gdmlzaXRvci5nZXRDbGFzcygpOwotICAgIC8vIGl0ZXJhdGVzIHRocm91Z2ggd3NkbCBhcnRpZmFjdHMgYW5kIGxvb2tpbmcgZm9yCi0gICAgLy8gdm9pZCB2aXNpdChYWFgpIGltcGxlbWVudGVkIG1ldGhvZHMuICAKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHdzZGwubGVuZ3RoOyBpKyspCi0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgLy8gaWYgbWV0aG9kIGlzIG5vdCBmb3VuZCB0aGUgZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duCi0gICAgICAgIE1ldGhvZCBtID0KLSAgICAgICAgICBjLmdldE1ldGhvZCgKLSAgICAgICAgICAgICJ2aXNpdCIsCi0gICAgICAgICAgICBuZXcgQ2xhc3NbXSB7IHdzZGxbaV0sIE9iamVjdC5jbGFzcywgV1NETFRyYXZlcnNhbENvbnRleHQuY2xhc3MgfSk7Ci0gICAgICAgIC8vIHJlZ2lzdGVyIGJpbmRpbmcgV1NETFZpc2l0b3IgbWV0aG9kIC0+IHRhcmdldCB2aXNpdG9yIG1ldGhvZAotICAgICAgICBhZGFwdG9yLmFkZE1ldGhvZEJpbmRpbmcoCi0gICAgICAgICAgV1NETFZpc2l0b3IuY2xhc3MuZ2V0TWV0aG9kKAotICAgICAgICAgICAgInZpc2l0IiwKLSAgICAgICAgICAgIG5ldyBDbGFzc1tdIHsgd3NkbFtpXSwgT2JqZWN0LmNsYXNzLCBXU0RMVHJhdmVyc2FsQ29udGV4dC5jbGFzcyB9KSwKLSAgICAgICAgICBtKTsKLSAgICAgICAgLy8gcmVnaXN0ZXIgdmlzaXRYWFggaW4gV1NETFRyYXZlcnNhbEJ1aWxkZXIKLSAgICAgICAgbSA9Ci0gICAgICAgICAgV1NETFRyYXZlcnNhbC5jbGFzcy5nZXRNZXRob2QoCi0gICAgICAgICAgICAidmlzaXQiICsgZ2V0TmFtZSh3c2RsW2ldKSwKLSAgICAgICAgICAgIG5ldyBDbGFzc1tdIHsgYm9vbGVhbi5jbGFzcyB9KTsKLSAgICAgICAgbS5pbnZva2UodHJhdmVyc2FsLCBuZXcgT2JqZWN0W10geyBCb29sZWFuLlRSVUUgfSk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICB9Ci0KLSAgICAvLyBjb25zdHJ1Y3QgdGhlIFdTRExWaXNpdG9yIGJ5IHVzaW5nIGphdmEubGFuZy5yZWZsZWN0LlByb3h5Ci0gICAgQ2xhc3NMb2FkZXIgbG9hZGVyID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKTsKLSAgICBXU0RMVmlzaXRvciB3c2RsVmlzaXRvciA9Ci0gICAgICAoV1NETFZpc2l0b3IpIFByb3h5Lm5ld1Byb3h5SW5zdGFuY2UobG9hZGVyLCB2aXNpdG9yQ2xhc3MsIGFkYXB0b3IpOwotICAgIC8vIHRyYXZlcnNlIFdTREwgZG9jdW1lbnQKLSAgICB0cmF2ZXJzYWwuc2V0VmlzaXRvcih3c2RsVmlzaXRvcik7Ci0gICAgcmV0dXJuIHRyYXZlcnNhbDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC90cmF2ZXJzYWwvV1NETFRyYXZlcnNhbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC90cmF2ZXJzYWwvV1NETFRyYXZlcnNhbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYWJjMmI1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwvdHJhdmVyc2FsL1dTRExUcmF2ZXJzYWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyOTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwudHJhdmVyc2FsOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuSW1wb3J0OwotaW1wb3J0IGphdmF4LndzZGwuSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBqYXZheC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgamF2YXgud3NkbC5UeXBlczsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHk7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXI7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb247Ci0KLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0vKioKLSAqIFRoZSBjbGFzcyBpbXBsZW1lbnRzIHBsYWluIHRyYXZlcnNlIG92ZXIgV1NETCBhcnRpZmFjdHMuCi0gKiBXU0RMVHJhdmVyc2FsIGlzIGNvbnRleHQtZHJpdmVuIHRyYXZlcnNhbC4gCi0gKiAKLSAqIEBhdXRob3IgQW5kcmV5IEt1bGlrCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMVHJhdmVyc2FsCi17Ci0KLSAgLyoqCi0gICAqIEN1cnJlbnQgV1NETCB2aXNpdG9yIChjYWxsYmFjaykuCi0gICAqLwotICBwcml2YXRlIFdTRExWaXNpdG9yIHZpc2l0b3I7Ci0KLSAgLyoqCi0gICAqIEZsYWdzIHdoaWNoIHNwZWNpZnkgd2hldGhlciB0cmF2ZXJzYWwgd2lsbCB0cmF2ZXJzIGZyb20gb25lIFdTREwgYXJ0aWZhY3QKLSAgICogdG8gYW5vdGhlci4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZUJpbmRpbmcyQmluZGluZ09wZXJhdGlvbiA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZUJpbmRpbmcyRWxlbWVudCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZUJpbmRpbmcyRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VCaW5kaW5nMlBvcnRUeXBlID0gdHJ1ZTsgLy8gcmVmZXJlbmNlCi0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZUJpbmRpbmdGYXVsdDJFbGVtZW50ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlQmluZGluZ0ZhdWx0MkV4dGVuc2liaWxpdHlFbGVtZW50ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlQmluZGluZ0lucHV0MkVsZW1lbnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VCaW5kaW5nSW5wdXQyRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VCaW5kaW5nT3BlcmF0aW9uMkJpbmRpbmdGYXVsdCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZUJpbmRpbmdPcGVyYXRpb24yQmluZGluZ0lucHV0ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlQmluZGluZ09wZXJhdGlvbjJCaW5kaW5nT3V0cHV0ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlQmluZGluZ09wZXJhdGlvbjJFbGVtZW50ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlQmluZGluZ09wZXJhdGlvbjJFeHRlbnNpYmlsaXR5RWxlbWVudCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZUJpbmRpbmdPcGVyYXRpb24yT3BlcmF0aW9uID0gdHJ1ZTsgLy8gcmVmZXJlbmNlICAKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlQmluZGluZ091dHB1dDJFbGVtZW50ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlQmluZGluZ091dHB1dDJFeHRlbnNpYmlsaXR5RWxlbWVudCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZURlZmluaXRpb24yQmluZGluZyA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZURlZmluaXRpb24yRWxlbWVudCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZURlZmluaXRpb24yRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VEZWZpbml0aW9uMkltcG9ydCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZURlZmluaXRpb24yTWVzc2FnZSA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZURlZmluaXRpb24yUG9ydFR5cGUgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VEZWZpbml0aW9uMlNlcnZpY2UgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VEZWZpbml0aW9uMlR5cGVzID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlRmF1bHQyRWxlbWVudCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZUZhdWx0Mk1lc3NhZ2UgPSB0cnVlOyAvLyByZWZlcmVuY2UgCi0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZUltcG9ydDJEZWZpbml0aW9uID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlSW1wb3J0MkVsZW1lbnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VJbnB1dDJFbGVtZW50ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlSW5wdXQyTWVzc2FnZSA9IHRydWU7IC8vIHJlZmVyZW5jZSAKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlTWVzc2FnZTJFbGVtZW50ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlTWVzc2FnZTJQYXJ0ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlT3BlcmF0aW9uMkVsZW1lbnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VPcGVyYXRpb24yRmF1bHQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VPcGVyYXRpb24ySW5wdXQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VPcGVyYXRpb24yT3V0cHV0ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlT3V0cHV0MkVsZW1lbnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VPdXRwdXQyTWVzc2FnZSA9IHRydWU7IC8vIHJlZmVyZW5jZSAKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlUGFydDJFbGVtZW50ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlUG9ydDJCaW5kaW5nID0gdHJ1ZTsgLy8gcmVmZXJlbmNlIAotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VQb3J0MkVsZW1lbnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VQb3J0MkV4dGVuc2liaWxpdHlFbGVtZW50ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlUG9ydFR5cGUyRWxlbWVudCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZVBvcnRUeXBlMk9wZXJhdGlvbiA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZVNlcnZpY2UyRWxlbWVudCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZVNlcnZpY2UyRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VTZXJ2aWNlMlBvcnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VUeXBlczJFbGVtZW50ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHRyYXZlcnNlVHlwZXMyRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSB0cnVlOwotICAvL3ByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZVNPQVBCb2R5MlBhcnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VTT0FQSGVhZGVyMlNPQVBIZWFkZXJGYXVsdCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZUJpbmRpbmcyU09BUEJpbmRpbmcgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VCaW5kaW5nT3BlcmF0aW9uMlNPQVBPcGVyYXRpb24gPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VCaW5kaW5nSW5wdXQyU09BUEhlYWRlciA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZUJpbmRpbmdJbnB1dDJTT0FQQm9keSA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZUJpbmRpbmdPdXRwdXQyU09BUEhlYWRlciA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiB0cmF2ZXJzZUJpbmRpbmdPdXRwdXQyU09BUEJvZHkgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gdHJhdmVyc2VCaW5kaW5nRmF1bHQyU09BUEZhdWx0ID0gdHJ1ZTsKLQotICAvKioKLSAgICogRmxhZ3Mgd2hpY2ggc3BlY2lmeSB3aGV0aGVyIHRyYXZlcnNhbCB3aWxsIHZpc2l0IGNvcnJlc3BvbmRpbmcgV1NETAotICAgKiBhcnRpZmFjdC4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiB2aXNpdEJpbmRpbmcgPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIHZpc2l0QmluZGluZ0ZhdWx0ID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiB2aXNpdEJpbmRpbmdJbnB1dCA9IGZhbHNlOwotICBwcml2YXRlIGJvb2xlYW4gdmlzaXRCaW5kaW5nT3BlcmF0aW9uID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiB2aXNpdEJpbmRpbmdPdXRwdXQgPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIHZpc2l0RGVmaW5pdGlvbiA9IGZhbHNlOwotICBwcml2YXRlIGJvb2xlYW4gdmlzaXRFbGVtZW50ID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiB2aXNpdEV4dGVuc2liaWxpdHlFbGVtZW50ID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiB2aXNpdEZhdWx0ID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiB2aXNpdEltcG9ydCA9IGZhbHNlOwotICBwcml2YXRlIGJvb2xlYW4gdmlzaXRJbnB1dCA9IGZhbHNlOwotICBwcml2YXRlIGJvb2xlYW4gdmlzaXRNZXNzYWdlID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiB2aXNpdE9wZXJhdGlvbiA9IGZhbHNlOwotICBwcml2YXRlIGJvb2xlYW4gdmlzaXRPdXRwdXQgPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIHZpc2l0UGFydCA9IGZhbHNlOwotICBwcml2YXRlIGJvb2xlYW4gdmlzaXRQb3J0ID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiB2aXNpdFBvcnRUeXBlID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiB2aXNpdFNlcnZpY2UgPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIHZpc2l0VHlwZXMgPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIHZpc2l0U09BUEJpbmRpbmcgPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIHZpc2l0U09BUEJvZHkgPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIHZpc2l0U09BUEZhdWx0ID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiB2aXNpdFNPQVBIZWFkZXIgPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIHZpc2l0U09BUEhlYWRlckZhdWx0ID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiB2aXNpdFNPQVBPcGVyYXRpb24gPSBmYWxzZTsKLQotICBMaXN0IGFscmVhZHlUcmF2ZXJzZWREZWZpbml0aW9uczsKLSAgLyoqCi0gICAqIERlZmF1bHQgY29uc3RydWN0b3IuCi0gICAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCNPYmplY3QoKQotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwoKQotICB7Ci0JYWxyZWFkeVRyYXZlcnNlZERlZmluaXRpb25zID0gbmV3IEFycmF5TGlzdCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2Qgc3BlY2lmaWVzIHRoYXQgdHJhdmVyc2FsIHdpbGwgaWdub3JlIGluZGlyZWN0IHJlZmVyZW5jZXMgYmV0d2VlbgotICAgKiBXU0RMIGFydGlmYWN0cy4gRm9yIGV4YW1wbGU6Ci0gICAqIDxvbD4KLSAgICogICA8bGk+YmluZGluZyB0byBwb3J0IHR5cGU8L2xpPgotICAgKiAgIDxsaT5iaW5kaW5nIG9wZXJhdGlvbiB0byBvcGVyYXRpb248L2xpPgotICAgKiAgIDxsaT5mYXVsdCB0byBtZXNzYWdlPC9saT4KLSAgICogICA8bGk+aW5wdXQgdG8gbWVzc2FnZTwvbGk+Ci0gICAqICAgPGxpPm91dHB1dCB0byBtZXNzYWdlPC9saT4KLSAgICogICA8bGk+cG9ydCB0byBiaW5kaW5nPC9saT4KLSAgICogPC9vbD4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGlnbm9yZVJlZmVyZW5jZXMoKQotICB7Ci0gICAgaWdub3JlQmluZGluZzJQb3J0VHlwZSgpOwotICAgIGlnbm9yZUJpbmRpbmdPcGVyYXRpb24yT3BlcmF0aW9uKCk7Ci0gICAgaWdub3JlRmF1bHQyTWVzc2FnZSgpOwotICAgIGlnbm9yZUlucHV0Mk1lc3NhZ2UoKTsKLSAgICBpZ25vcmVPdXRwdXQyTWVzc2FnZSgpOwotICAgIGlnbm9yZVBvcnQyQmluZGluZygpOwotICAgIC8vaWdub3JlU09BUEJvZHkyUGFydCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2Qgc2V0cyB2aXNpdG9yLgotICAgKiBAcGFyYW0gdmlzaXRvciAgYSBXU0RMIHZpc2l0b3IuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRWaXNpdG9yKFdTRExWaXNpdG9yIHZpc2l0b3IpCi0gIHsKLSAgICB0aGlzLnZpc2l0b3IgPSB2aXNpdG9yOwotICB9Ci0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gdGhlIHRyYXZlcnNhbC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUJpbmRpbmcyU09BUEJpbmRpbmcoKQotICB7Ci0gICAgdHJhdmVyc2VCaW5kaW5nMlNPQVBCaW5kaW5nID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUJpbmRpbmdPcGVyYXRpb24yU09BUE9wZXJhdGlvbigpCi0gIHsKLSAgICB0cmF2ZXJzZUJpbmRpbmdPcGVyYXRpb24yU09BUE9wZXJhdGlvbiA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVCaW5kaW5nSW5wdXQyU09BUEhlYWRlcigpCi0gIHsKLSAgICB0cmF2ZXJzZUJpbmRpbmdJbnB1dDJTT0FQSGVhZGVyID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUJpbmRpbmdJbnB1dDJTT0FQQm9keSgpCi0gIHsKLSAgICB0cmF2ZXJzZUJpbmRpbmdJbnB1dDJTT0FQQm9keSA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVCaW5kaW5nT3V0cHV0MlNPQVBIZWFkZXIoKQotICB7Ci0gICAgdHJhdmVyc2VCaW5kaW5nT3V0cHV0MlNPQVBIZWFkZXIgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlQmluZGluZ091dHB1dDJTT0FQQm9keSgpCi0gIHsKLSAgICB0cmF2ZXJzZUJpbmRpbmdPdXRwdXQyU09BUEJvZHkgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlQmluZGluZ0ZhdWx0MlNPQVBGYXVsdCgpCi0gIHsKLSAgICB0cmF2ZXJzZUJpbmRpbmdGYXVsdDJTT0FQRmF1bHQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlU09BUEhlYWRlcjJTT0FQSGVhZGVyRmF1bHQoKQotICB7Ci0gICAgdHJhdmVyc2VTT0FQSGVhZGVyMlNPQVBIZWFkZXJGYXVsdCA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVCaW5kaW5nMkJpbmRpbmdPcGVyYXRpb24oKQotICB7Ci0gICAgdHJhdmVyc2VCaW5kaW5nMkJpbmRpbmdPcGVyYXRpb24gPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlQmluZGluZzJFbGVtZW50KCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZzJFbGVtZW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUJpbmRpbmcyRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKQotICB7Ci0gICAgdHJhdmVyc2VCaW5kaW5nMkV4dGVuc2liaWxpdHlFbGVtZW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUJpbmRpbmcyUG9ydFR5cGUoKQotICB7Ci0gICAgdHJhdmVyc2VCaW5kaW5nMlBvcnRUeXBlID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUJpbmRpbmdGYXVsdDJFbGVtZW50KCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZ0ZhdWx0MkVsZW1lbnQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlQmluZGluZ0ZhdWx0MkV4dGVuc2liaWxpdHlFbGVtZW50KCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZ0ZhdWx0MkV4dGVuc2liaWxpdHlFbGVtZW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUJpbmRpbmdJbnB1dDJFbGVtZW50KCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZ0lucHV0MkVsZW1lbnQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlQmluZGluZ0lucHV0MkV4dGVuc2liaWxpdHlFbGVtZW50KCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZ0lucHV0MkV4dGVuc2liaWxpdHlFbGVtZW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUJpbmRpbmdPcGVyYXRpb24yQmluZGluZ0ZhdWx0KCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZ09wZXJhdGlvbjJCaW5kaW5nRmF1bHQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlQmluZGluZ09wZXJhdGlvbjJCaW5kaW5nSW5wdXQoKQotICB7Ci0gICAgdHJhdmVyc2VCaW5kaW5nT3BlcmF0aW9uMkJpbmRpbmdJbnB1dCA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVCaW5kaW5nT3BlcmF0aW9uMkJpbmRpbmdPdXRwdXQoKQotICB7Ci0gICAgdHJhdmVyc2VCaW5kaW5nT3BlcmF0aW9uMkJpbmRpbmdPdXRwdXQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlQmluZGluZ09wZXJhdGlvbjJFbGVtZW50KCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZ09wZXJhdGlvbjJFbGVtZW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUJpbmRpbmdPcGVyYXRpb24yRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKQotICB7Ci0gICAgdHJhdmVyc2VCaW5kaW5nT3BlcmF0aW9uMkV4dGVuc2liaWxpdHlFbGVtZW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUJpbmRpbmdPcGVyYXRpb24yT3BlcmF0aW9uKCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZ09wZXJhdGlvbjJPcGVyYXRpb24gPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlQmluZGluZ091dHB1dDJFbGVtZW50KCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZ091dHB1dDJFbGVtZW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUJpbmRpbmdPdXRwdXQyRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKQotICB7Ci0gICAgdHJhdmVyc2VCaW5kaW5nT3V0cHV0MkV4dGVuc2liaWxpdHlFbGVtZW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZURlZmluaXRpb24yQmluZGluZygpCi0gIHsKLSAgICB0cmF2ZXJzZURlZmluaXRpb24yQmluZGluZyA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVEZWZpbml0aW9uMkVsZW1lbnQoKQotICB7Ci0gICAgdHJhdmVyc2VEZWZpbml0aW9uMkVsZW1lbnQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlRGVmaW5pdGlvbjJFeHRlbnNpYmlsaXR5RWxlbWVudCgpCi0gIHsKLSAgICB0cmF2ZXJzZURlZmluaXRpb24yRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlRGVmaW5pdGlvbjJJbXBvcnQoKQotICB7Ci0gICAgdHJhdmVyc2VEZWZpbml0aW9uMkltcG9ydCA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVEZWZpbml0aW9uMk1lc3NhZ2UoKQotICB7Ci0gICAgdHJhdmVyc2VEZWZpbml0aW9uMk1lc3NhZ2UgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlRGVmaW5pdGlvbjJQb3J0VHlwZSgpCi0gIHsKLSAgICB0cmF2ZXJzZURlZmluaXRpb24yUG9ydFR5cGUgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlRGVmaW5pdGlvbjJTZXJ2aWNlKCkKLSAgewotICAgIHRyYXZlcnNlRGVmaW5pdGlvbjJTZXJ2aWNlID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZURlZmluaXRpb24yVHlwZXMoKQotICB7Ci0gICAgdHJhdmVyc2VEZWZpbml0aW9uMlR5cGVzID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUZhdWx0MkVsZW1lbnQoKQotICB7Ci0gICAgdHJhdmVyc2VGYXVsdDJFbGVtZW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUZhdWx0Mk1lc3NhZ2UoKQotICB7Ci0gICAgdHJhdmVyc2VGYXVsdDJNZXNzYWdlID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUltcG9ydDJEZWZpbml0aW9uKCkKLSAgewotICAgIHRyYXZlcnNlSW1wb3J0MkRlZmluaXRpb24gPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlSW1wb3J0MkVsZW1lbnQoKQotICB7Ci0gICAgdHJhdmVyc2VJbXBvcnQyRWxlbWVudCA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVJbnB1dDJFbGVtZW50KCkKLSAgewotICAgIHRyYXZlcnNlSW5wdXQyRWxlbWVudCA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVJbnB1dDJNZXNzYWdlKCkKLSAgewotICAgIHRyYXZlcnNlSW5wdXQyTWVzc2FnZSA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVNZXNzYWdlMkVsZW1lbnQoKQotICB7Ci0gICAgdHJhdmVyc2VNZXNzYWdlMkVsZW1lbnQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlTWVzc2FnZTJQYXJ0KCkKLSAgewotICAgIHRyYXZlcnNlTWVzc2FnZTJQYXJ0ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZU9wZXJhdGlvbjJFbGVtZW50KCkKLSAgewotICAgIHRyYXZlcnNlT3BlcmF0aW9uMkVsZW1lbnQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlT3BlcmF0aW9uMkZhdWx0KCkKLSAgewotICAgIHRyYXZlcnNlT3BlcmF0aW9uMkZhdWx0ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZU9wZXJhdGlvbjJJbnB1dCgpCi0gIHsKLSAgICB0cmF2ZXJzZU9wZXJhdGlvbjJJbnB1dCA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVPcGVyYXRpb24yT3V0cHV0KCkKLSAgewotICAgIHRyYXZlcnNlT3BlcmF0aW9uMk91dHB1dCA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVPdXRwdXQyRWxlbWVudCgpCi0gIHsKLSAgICB0cmF2ZXJzZU91dHB1dDJFbGVtZW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZU91dHB1dDJNZXNzYWdlKCkKLSAgewotICAgIHRyYXZlcnNlT3V0cHV0Mk1lc3NhZ2UgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlUGFydDJFbGVtZW50KCkKLSAgewotICAgIHRyYXZlcnNlUGFydDJFbGVtZW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZVBvcnQyQmluZGluZygpCi0gIHsKLSAgICB0cmF2ZXJzZVBvcnQyQmluZGluZyA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVQb3J0MkVsZW1lbnQoKQotICB7Ci0gICAgdHJhdmVyc2VQb3J0MkVsZW1lbnQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlUG9ydDJFeHRlbnNpYmlsaXR5RWxlbWVudCgpCi0gIHsKLSAgICB0cmF2ZXJzZVBvcnQyRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlUG9ydFR5cGUyRWxlbWVudCgpCi0gIHsKLSAgICB0cmF2ZXJzZVBvcnRUeXBlMkVsZW1lbnQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlUG9ydFR5cGUyT3BlcmF0aW9uKCkKLSAgewotICAgIHRyYXZlcnNlUG9ydFR5cGUyT3BlcmF0aW9uID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIHJlZmVyZW5jZSBiZXR3ZWVuIFdTREwgZWxlbWVudHMuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZVNlcnZpY2UyRWxlbWVudCgpCi0gIHsKLSAgICB0cmF2ZXJzZVNlcnZpY2UyRWxlbWVudCA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVTZXJ2aWNlMkV4dGVuc2liaWxpdHlFbGVtZW50KCkKLSAgewotICAgIHRyYXZlcnNlU2VydmljZTJFeHRlbnNpYmlsaXR5RWxlbWVudCA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSByZWZlcmVuY2UgYmV0d2VlbiBXU0RMIGVsZW1lbnRzLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVTZXJ2aWNlMlBvcnQoKQotICB7Ci0gICAgdHJhdmVyc2VTZXJ2aWNlMlBvcnQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlVHlwZXMyRWxlbWVudCgpCi0gIHsKLSAgICB0cmF2ZXJzZVR5cGVzMkVsZW1lbnQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgcmVmZXJlbmNlIGJldHdlZW4gV1NETCBlbGVtZW50cy4uLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVUeXBlczJFeHRlbnNpYmlsaXR5RWxlbWVudCgpCi0gIHsKLSAgICB0cmF2ZXJzZVR5cGVzMkV4dGVuc2liaWxpdHlFbGVtZW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byB2aXNpdCBvciBub3QgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gdmFsdWUgdHJ1ZSBpZiB0aGUgV1NETCBlbGVtZW50IHNob3VsZCBiZSB2aXNpdGVkLCBvdGhlcndpc2UgLSBmYWxzZS4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgdmlzaXRTT0FQQmluZGluZyhib29sZWFuIHZhbHVlKQotICB7Ci0gICAgdmlzaXRTT0FQQmluZGluZyA9IHZhbHVlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIHZpc2l0IG9yIG5vdCB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWx1ZSB0cnVlIGlmIHRoZSBXU0RMIGVsZW1lbnQgc2hvdWxkIGJlIHZpc2l0ZWQsIG90aGVyd2lzZSAtIGZhbHNlLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCB2aXNpdFNPQVBCb2R5KGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICB2aXNpdFNPQVBCb2R5ID0gdmFsdWU7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gdmlzaXQgb3Igbm90IHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIHZhbHVlIHRydWUgaWYgdGhlIFdTREwgZWxlbWVudCBzaG91bGQgYmUgdmlzaXRlZCwgb3RoZXJ3aXNlIC0gZmFsc2UuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIHZpc2l0U09BUEZhdWx0KGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICB2aXNpdFNPQVBGYXVsdCA9IHZhbHVlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIHZpc2l0IG9yIG5vdCB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWx1ZSB0cnVlIGlmIHRoZSBXU0RMIGVsZW1lbnQgc2hvdWxkIGJlIHZpc2l0ZWQsIG90aGVyd2lzZSAtIGZhbHNlLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCB2aXNpdFNPQVBIZWFkZXIoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHZpc2l0U09BUEhlYWRlciA9IHZhbHVlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIHZpc2l0IG9yIG5vdCB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWx1ZSB0cnVlIGlmIHRoZSBXU0RMIGVsZW1lbnQgc2hvdWxkIGJlIHZpc2l0ZWQsIG90aGVyd2lzZSAtIGZhbHNlLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCB2aXNpdFNPQVBIZWFkZXJGYXVsdChib29sZWFuIHZhbHVlKQotICB7Ci0gICAgdmlzaXRTT0FQSGVhZGVyRmF1bHQgPSB2YWx1ZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byB2aXNpdCBvciBub3QgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gdmFsdWUgdHJ1ZSBpZiB0aGUgV1NETCBlbGVtZW50IHNob3VsZCBiZSB2aXNpdGVkLCBvdGhlcndpc2UgLSBmYWxzZS4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgdmlzaXRTT0FQT3BlcmF0aW9uKGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICB2aXNpdFNPQVBPcGVyYXRpb24gPSB2YWx1ZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byB2aXNpdCBvciBub3QgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gdmFsdWUgdHJ1ZSBpZiB0aGUgV1NETCBlbGVtZW50IHNob3VsZCBiZSB2aXNpdGVkLCBvdGhlcndpc2UgLSBmYWxzZS4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgdmlzaXRCaW5kaW5nKGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICB2aXNpdEJpbmRpbmcgPSB2YWx1ZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byB2aXNpdCBvciBub3QgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gdmFsdWUgdHJ1ZSBpZiB0aGUgV1NETCBlbGVtZW50IHNob3VsZCBiZSB2aXNpdGVkLCBvdGhlcndpc2UgLSBmYWxzZS4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgdmlzaXRCaW5kaW5nRmF1bHQoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHZpc2l0QmluZGluZ0ZhdWx0ID0gdmFsdWU7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gdmlzaXQgb3Igbm90IHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIHZhbHVlIHRydWUgaWYgdGhlIFdTREwgZWxlbWVudCBzaG91bGQgYmUgdmlzaXRlZCwgb3RoZXJ3aXNlIC0gZmFsc2UuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIHZpc2l0QmluZGluZ0lucHV0KGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICB2aXNpdEJpbmRpbmdJbnB1dCA9IHZhbHVlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIHZpc2l0IG9yIG5vdCB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWx1ZSB0cnVlIGlmIHRoZSBXU0RMIGVsZW1lbnQgc2hvdWxkIGJlIHZpc2l0ZWQsIG90aGVyd2lzZSAtIGZhbHNlLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCB2aXNpdEJpbmRpbmdPcGVyYXRpb24oYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHZpc2l0QmluZGluZ09wZXJhdGlvbiA9IHZhbHVlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIHZpc2l0IG9yIG5vdCB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWx1ZSB0cnVlIGlmIHRoZSBXU0RMIGVsZW1lbnQgc2hvdWxkIGJlIHZpc2l0ZWQsIG90aGVyd2lzZSAtIGZhbHNlLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCB2aXNpdEJpbmRpbmdPdXRwdXQoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHZpc2l0QmluZGluZ091dHB1dCA9IHZhbHVlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIHZpc2l0IG9yIG5vdCB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWx1ZSB0cnVlIGlmIHRoZSBXU0RMIGVsZW1lbnQgc2hvdWxkIGJlIHZpc2l0ZWQsIG90aGVyd2lzZSAtIGZhbHNlLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCB2aXNpdERlZmluaXRpb24oYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHZpc2l0RGVmaW5pdGlvbiA9IHZhbHVlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIHZpc2l0IG9yIG5vdCB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWx1ZSB0cnVlIGlmIHRoZSBXU0RMIGVsZW1lbnQgc2hvdWxkIGJlIHZpc2l0ZWQsIG90aGVyd2lzZSAtIGZhbHNlLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCB2aXNpdEVsZW1lbnQoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHZpc2l0RWxlbWVudCA9IHZhbHVlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIHZpc2l0IG9yIG5vdCB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWx1ZSB0cnVlIGlmIHRoZSBXU0RMIGVsZW1lbnQgc2hvdWxkIGJlIHZpc2l0ZWQsIG90aGVyd2lzZSAtIGZhbHNlLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCB2aXNpdEV4dGVuc2liaWxpdHlFbGVtZW50KGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICB2aXNpdEV4dGVuc2liaWxpdHlFbGVtZW50ID0gdmFsdWU7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gdmlzaXQgb3Igbm90IHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIHZhbHVlIHRydWUgaWYgdGhlIFdTREwgZWxlbWVudCBzaG91bGQgYmUgdmlzaXRlZCwgb3RoZXJ3aXNlIC0gZmFsc2UuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIHZpc2l0RmF1bHQoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHZpc2l0RmF1bHQgPSB2YWx1ZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byB2aXNpdCBvciBub3QgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gdmFsdWUgdHJ1ZSBpZiB0aGUgV1NETCBlbGVtZW50IHNob3VsZCBiZSB2aXNpdGVkLCBvdGhlcndpc2UgLSBmYWxzZS4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgdmlzaXRJbXBvcnQoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHZpc2l0SW1wb3J0ID0gdmFsdWU7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gdmlzaXQgb3Igbm90IHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIHZhbHVlIHRydWUgaWYgdGhlIFdTREwgZWxlbWVudCBzaG91bGQgYmUgdmlzaXRlZCwgb3RoZXJ3aXNlIC0gZmFsc2UuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIHZpc2l0SW5wdXQoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHZpc2l0SW5wdXQgPSB2YWx1ZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byB2aXNpdCBvciBub3QgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gdmFsdWUgdHJ1ZSBpZiB0aGUgV1NETCBlbGVtZW50IHNob3VsZCBiZSB2aXNpdGVkLCBvdGhlcndpc2UgLSBmYWxzZS4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgdmlzaXRNZXNzYWdlKGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICB2aXNpdE1lc3NhZ2UgPSB2YWx1ZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byB2aXNpdCBvciBub3QgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gdmFsdWUgdHJ1ZSBpZiB0aGUgV1NETCBlbGVtZW50IHNob3VsZCBiZSB2aXNpdGVkLCBvdGhlcndpc2UgLSBmYWxzZS4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgdmlzaXRPcGVyYXRpb24oYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHZpc2l0T3BlcmF0aW9uID0gdmFsdWU7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gdmlzaXQgb3Igbm90IHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIHZhbHVlIHRydWUgaWYgdGhlIFdTREwgZWxlbWVudCBzaG91bGQgYmUgdmlzaXRlZCwgb3RoZXJ3aXNlIC0gZmFsc2UuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIHZpc2l0T3V0cHV0KGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICB2aXNpdE91dHB1dCA9IHZhbHVlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIHZpc2l0IG9yIG5vdCB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWx1ZSB0cnVlIGlmIHRoZSBXU0RMIGVsZW1lbnQgc2hvdWxkIGJlIHZpc2l0ZWQsIG90aGVyd2lzZSAtIGZhbHNlLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCB2aXNpdFBhcnQoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHZpc2l0UGFydCA9IHZhbHVlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIHZpc2l0IG9yIG5vdCB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWx1ZSB0cnVlIGlmIHRoZSBXU0RMIGVsZW1lbnQgc2hvdWxkIGJlIHZpc2l0ZWQsIG90aGVyd2lzZSAtIGZhbHNlLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCB2aXNpdFBvcnQoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHZpc2l0UG9ydCA9IHZhbHVlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIHZpc2l0IG9yIG5vdCB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSB2YWx1ZSB0cnVlIGlmIHRoZSBXU0RMIGVsZW1lbnQgc2hvdWxkIGJlIHZpc2l0ZWQsIG90aGVyd2lzZSAtIGZhbHNlLgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCB2aXNpdFBvcnRUeXBlKGJvb2xlYW4gdmFsdWUpCi0gIHsKLSAgICB2aXNpdFBvcnRUeXBlID0gdmFsdWU7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gdmlzaXQgb3Igbm90IHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIHZhbHVlIHRydWUgaWYgdGhlIFdTREwgZWxlbWVudCBzaG91bGQgYmUgdmlzaXRlZCwgb3RoZXJ3aXNlIC0gZmFsc2UuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIHZpc2l0U2VydmljZShib29sZWFuIHZhbHVlKQotICB7Ci0gICAgdmlzaXRTZXJ2aWNlID0gdmFsdWU7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gdmlzaXQgb3Igbm90IHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIHZhbHVlIHRydWUgaWYgdGhlIFdTREwgZWxlbWVudCBzaG91bGQgYmUgdmlzaXRlZCwgb3RoZXJ3aXNlIC0gZmFsc2UuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIHZpc2l0VHlwZXMoYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHZpc2l0VHlwZXMgPSB2YWx1ZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSBhbGwgcmVmZXJlbmNlcyB0byB0aGUgY29ycmVzcG9uZGluZyBXU0RMCi0gICAqIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUJpbmRpbmcoKQotICB7Ci0gICAgdHJhdmVyc2VEZWZpbml0aW9uMkJpbmRpbmcgPSBmYWxzZTsKLSAgICB0cmF2ZXJzZVBvcnQyQmluZGluZyA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSBhbGwgcmVmZXJlbmNlcyB0byB0aGUgY29ycmVzcG9uZGluZyBXU0RMCi0gICAqIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUJpbmRpbmdGYXVsdCgpCi0gIHsKLSAgICB0cmF2ZXJzZUJpbmRpbmdPcGVyYXRpb24yQmluZGluZ0ZhdWx0ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBjb3JyZXNwb25kaW5nIFdTREwKLSAgICogZWxlbWVudC4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlQmluZGluZ0lucHV0KCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZ09wZXJhdGlvbjJCaW5kaW5nSW5wdXQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgV1NETAotICAgKiBlbGVtZW50LgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVCaW5kaW5nT3BlcmF0aW9uKCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZzJCaW5kaW5nT3BlcmF0aW9uID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBjb3JyZXNwb25kaW5nIFdTREwKLSAgICogZWxlbWVudC4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlQmluZGluZ091dHB1dCgpCi0gIHsKLSAgICB0cmF2ZXJzZUJpbmRpbmdPcGVyYXRpb24yQmluZGluZ091dHB1dCA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSBhbGwgcmVmZXJlbmNlcyB0byB0aGUgY29ycmVzcG9uZGluZyBXU0RMCi0gICAqIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZURlZmluaXRpb24oKQotICB7Ci0gICAgdHJhdmVyc2VJbXBvcnQyRGVmaW5pdGlvbiA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSBhbGwgcmVmZXJlbmNlcyB0byB0aGUgY29ycmVzcG9uZGluZyBXU0RMCi0gICAqIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUVsZW1lbnQoKQotICB7Ci0gICAgdHJhdmVyc2VCaW5kaW5nMkVsZW1lbnQgPSBmYWxzZTsKLSAgICB0cmF2ZXJzZUJpbmRpbmdGYXVsdDJFbGVtZW50ID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VCaW5kaW5nSW5wdXQyRWxlbWVudCA9IGZhbHNlOwotICAgIHRyYXZlcnNlQmluZGluZ09wZXJhdGlvbjJFbGVtZW50ID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VCaW5kaW5nT3V0cHV0MkVsZW1lbnQgPSBmYWxzZTsKLSAgICB0cmF2ZXJzZURlZmluaXRpb24yRWxlbWVudCA9IGZhbHNlOwotICAgIHRyYXZlcnNlUG9ydDJFbGVtZW50ID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VTZXJ2aWNlMkVsZW1lbnQgPSBmYWxzZTsKLSAgICB0cmF2ZXJzZUZhdWx0MkVsZW1lbnQgPSBmYWxzZTsKLSAgICB0cmF2ZXJzZU91dHB1dDJFbGVtZW50ID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VJbXBvcnQyRWxlbWVudCA9IGZhbHNlOwotICAgIHRyYXZlcnNlSW5wdXQyRWxlbWVudCA9IGZhbHNlOwotICAgIHRyYXZlcnNlT3BlcmF0aW9uMkVsZW1lbnQgPSBmYWxzZTsKLSAgICB0cmF2ZXJzZU1lc3NhZ2UyRWxlbWVudCA9IGZhbHNlOwotICAgIHRyYXZlcnNlUGFydDJFbGVtZW50ID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VQb3J0VHlwZTJFbGVtZW50ID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VUeXBlczJFbGVtZW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBjb3JyZXNwb25kaW5nIFdTREwKLSAgICogZWxlbWVudC4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKQotICB7Ci0gICAgdHJhdmVyc2VTZXJ2aWNlMkV4dGVuc2liaWxpdHlFbGVtZW50ID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VQb3J0MkV4dGVuc2liaWxpdHlFbGVtZW50ID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VEZWZpbml0aW9uMkV4dGVuc2liaWxpdHlFbGVtZW50ID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VCaW5kaW5nT3V0cHV0MkV4dGVuc2liaWxpdHlFbGVtZW50ID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VCaW5kaW5nMkV4dGVuc2liaWxpdHlFbGVtZW50ID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VCaW5kaW5nRmF1bHQyRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSBmYWxzZTsKLSAgICB0cmF2ZXJzZUJpbmRpbmdJbnB1dDJFeHRlbnNpYmlsaXR5RWxlbWVudCA9IGZhbHNlOwotICAgIHRyYXZlcnNlQmluZGluZ09wZXJhdGlvbjJFeHRlbnNpYmlsaXR5RWxlbWVudCA9IGZhbHNlOwotICAgIHRyYXZlcnNlVHlwZXMyRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgV1NETAotICAgKiBlbGVtZW50LgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVTT0FQQmluZGluZygpCi0gIHsKLSAgICB0cmF2ZXJzZUJpbmRpbmcyU09BUEJpbmRpbmcgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgV1NETAotICAgKiBlbGVtZW50LgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVTT0FQT3BlcmF0aW9uKCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZ09wZXJhdGlvbjJTT0FQT3BlcmF0aW9uID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBjb3JyZXNwb25kaW5nIFdTREwKLSAgICogZWxlbWVudC4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlU09BUEJvZHkoKQotICB7Ci0gICAgdHJhdmVyc2VCaW5kaW5nSW5wdXQyU09BUEJvZHkgPSBmYWxzZTsKLSAgICB0cmF2ZXJzZUJpbmRpbmdPdXRwdXQyU09BUEJvZHkgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgV1NETAotICAgKiBlbGVtZW50LgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVTT0FQSGVhZGVyKCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZ0lucHV0MlNPQVBIZWFkZXIgPSBmYWxzZTsKLSAgICB0cmF2ZXJzZUJpbmRpbmdPdXRwdXQyU09BUEhlYWRlciA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSBhbGwgcmVmZXJlbmNlcyB0byB0aGUgY29ycmVzcG9uZGluZyBXU0RMCi0gICAqIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZVNPQVBIZWFkZXJGYXVsdCgpCi0gIHsKLSAgICB0cmF2ZXJzZVNPQVBIZWFkZXIyU09BUEhlYWRlckZhdWx0ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBjb3JyZXNwb25kaW5nIFdTREwKLSAgICogZWxlbWVudC4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlU09BUEZhdWx0KCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZ0ZhdWx0MlNPQVBGYXVsdCA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSBhbGwgcmVmZXJlbmNlcyB0byB0aGUgY29ycmVzcG9uZGluZyBXU0RMCi0gICAqIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZUZhdWx0KCkKLSAgewotICAgIHRyYXZlcnNlT3BlcmF0aW9uMkZhdWx0ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBjb3JyZXNwb25kaW5nIFdTREwKLSAgICogZWxlbWVudC4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlSW1wb3J0KCkKLSAgewotICAgIHRyYXZlcnNlSW1wb3J0MkRlZmluaXRpb24gPSBmYWxzZTsgLy8gZml4Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBjb3JyZXNwb25kaW5nIFdTREwKLSAgICogZWxlbWVudC4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlSW5wdXQoKQotICB7Ci0gICAgdHJhdmVyc2VPcGVyYXRpb24ySW5wdXQgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgV1NETAotICAgKiBlbGVtZW50LgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVNZXNzYWdlKCkKLSAgewotICAgIHRyYXZlcnNlRmF1bHQyTWVzc2FnZSA9IGZhbHNlOwotICAgIHRyYXZlcnNlRGVmaW5pdGlvbjJNZXNzYWdlID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VJbnB1dDJNZXNzYWdlID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VPdXRwdXQyTWVzc2FnZSA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSBhbGwgcmVmZXJlbmNlcyB0byB0aGUgY29ycmVzcG9uZGluZyBXU0RMCi0gICAqIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZU9wZXJhdGlvbigpCi0gIHsKLSAgICB0cmF2ZXJzZUJpbmRpbmdPcGVyYXRpb24yT3BlcmF0aW9uID0gZmFsc2U7Ci0gICAgdHJhdmVyc2VQb3J0VHlwZTJPcGVyYXRpb24gPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgV1NETAotICAgKiBlbGVtZW50LgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVPdXRwdXQoKQotICB7Ci0gICAgdHJhdmVyc2VPcGVyYXRpb24yT3V0cHV0ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBjb3JyZXNwb25kaW5nIFdTREwKLSAgICogZWxlbWVudC4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlUGFydCgpCi0gIHsKLSAgICB0cmF2ZXJzZU1lc3NhZ2UyUGFydCA9IGZhbHNlOwotICAgIC8vdHJhdmVyc2VTT0FQQm9keTJQYXJ0ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgLyoqCi0gICAqIEluc3RydWN0cyB0cmF2ZXJzYWwgdG8gaWdub3JlIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBjb3JyZXNwb25kaW5nIFdTREwKLSAgICogZWxlbWVudC4KLSAgICogQHJldHVybiBhIFdTRExUcmF2ZXJzYWwgb2JqZWN0LgotICAgKi8KLSAgcHVibGljIFdTRExUcmF2ZXJzYWwgaWdub3JlUG9ydCgpCi0gIHsKLSAgICB0cmF2ZXJzZVNlcnZpY2UyUG9ydCA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSBhbGwgcmVmZXJlbmNlcyB0byB0aGUgY29ycmVzcG9uZGluZyBXU0RMCi0gICAqIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZVBvcnRUeXBlKCkKLSAgewotICAgIHRyYXZlcnNlQmluZGluZzJQb3J0VHlwZSA9IGZhbHNlOwotICAgIHRyYXZlcnNlRGVmaW5pdGlvbjJQb3J0VHlwZSA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIC8qKgotICAgKiBJbnN0cnVjdHMgdHJhdmVyc2FsIHRvIGlnbm9yZSBhbGwgcmVmZXJlbmNlcyB0byB0aGUgY29ycmVzcG9uZGluZyBXU0RMCi0gICAqIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gYSBXU0RMVHJhdmVyc2FsIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBXU0RMVHJhdmVyc2FsIGlnbm9yZVNlcnZpY2UoKQotICB7Ci0gICAgdHJhdmVyc2VEZWZpbml0aW9uMlNlcnZpY2UgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogSW5zdHJ1Y3RzIHRyYXZlcnNhbCB0byBpZ25vcmUgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgV1NETAotICAgKiBlbGVtZW50LgotICAgKiBAcmV0dXJuIGEgV1NETFRyYXZlcnNhbCBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBpZ25vcmVUeXBlcygpCi0gIHsKLSAgICB0cmF2ZXJzZURlZmluaXRpb24yVHlwZXMgPSBmYWxzZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIGFkanVzdHMgdHJhdmVzZVhYWCB2YXJpYWJsZXMgYWNjb3JkaW5nIHRvIHRoZSB2aXNpdFhYWCB2YXJpYWJsZXMKLSAgICovCi0gIHByaXZhdGUgdm9pZCBhZGp1c3QoKQotICB7Ci0gICAgYWRqdXN0UGFydCgpOwotICAgIGFkanVzdFNlcnZpY2UoKTsKLSAgICBhZGp1c3RUeXBlcygpOwotICAgIGFkanVzdE9wZXJhdGlvbigpOwotICAgIGFkanVzdElucHV0KCk7Ci0gICAgYWRqdXN0T3V0cHV0KCk7Ci0gICAgYWRqdXN0RmF1bHQoKTsKLSAgICBhZGp1c3RCaW5kaW5nKCk7Ci0gICAgYWRqdXN0QmluZGluZ09wZXJhdGlvbigpOwotICAgIGFkanVzdEJpbmRpbmdJbnB1dCgpOwotICAgIGFkanVzdEJpbmRpbmdPdXRwdXQoKTsKLSAgICBhZGp1c3RCaW5kaW5nRmF1bHQoKTsKLSAgICBhZGp1c3RJbXBvcnQoKTsKLSAgICBhZGp1c3RFbGVtZW50KCk7Ci0gICAgYWRqdXN0TWVzc2FnZSgpOwotICAgIGFkanVzdFBvcnQoKTsKLSAgICBhZGp1c3RQb3J0VHlwZSgpOwotICAgIGFkanVzdERlZmluaXRpb24oKTsKLSAgICBhZGp1c3RFeHRlbnNpYmlsaXR5RWxlbWVudCgpOwotICAgIGFkanVzdFNPQVBCaW5kaW5nKCk7Ci0gICAgYWRqdXN0U09BUEJvZHkoKTsKLSAgICBhZGp1c3RTT0FQSGVhZGVyKCk7Ci0gICAgYWRqdXN0U09BUEhlYWRlckZhdWx0KCk7Ci0gICAgYWRqdXN0U09BUEZhdWx0KCk7Ci0gICAgYWRqdXN0U09BUE9wZXJhdGlvbigpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgYWRqdXN0cyB0cmF2ZXJzYWwgaWdub3JlIGZsYWdzIGFjY29yZGluZyB0byB0aGUKLSAgICogY29ycmVzcG9uZGluZyB2aXNpdCBmbGFncy4KLSAgICogQHJldHVybiBib29sZWFuIAotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGFkanVzdEV4dGVuc2liaWxpdHlFbGVtZW50KCkKLSAgewotICAgIGJvb2xlYW4gdmFsdWUgPSB2aXNpdEV4dGVuc2liaWxpdHlFbGVtZW50OwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVFeHRlbnNpYmlsaXR5RWxlbWVudCgpOwotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCBhZGp1c3RzIHRyYXZlcnNhbCBpZ25vcmUgZmxhZ3MgYWNjb3JkaW5nIHRvIHRoZQotICAgKiBjb3JyZXNwb25kaW5nIHZpc2l0IGZsYWdzLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYWRqdXN0UGFydCgpCi0gIHsKLSAgICBib29sZWFuIHZhbHVlID0gdmlzaXRQYXJ0IHx8ICh0cmF2ZXJzZVBhcnQyRWxlbWVudCAmJiBhZGp1c3RFbGVtZW50KCkpOwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVQYXJ0KCk7Ci0gICAgcmV0dXJuIHZhbHVlOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIGFkanVzdHMgdHJhdmVyc2FsIGlnbm9yZSBmbGFncyBhY2NvcmRpbmcgdG8gdGhlCi0gICAqIGNvcnJlc3BvbmRpbmcgdmlzaXQgZmxhZ3MuCi0gICAqIEByZXR1cm4gYm9vbGVhbiAKLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBhZGp1c3RTT0FQSGVhZGVyKCkKLSAgewotICAgIGJvb2xlYW4gdmFsdWUgPQotICAgICAgdmlzaXRTT0FQSGVhZGVyCi0gICAgICAgIHx8ICh0cmF2ZXJzZVNPQVBIZWFkZXIyU09BUEhlYWRlckZhdWx0ICYmIGFkanVzdFNPQVBIZWFkZXJGYXVsdCgpKTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgaWdub3JlU09BUEhlYWRlcigpOwotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCBhZGp1c3RzIHRyYXZlcnNhbCBpZ25vcmUgZmxhZ3MgYWNjb3JkaW5nIHRvIHRoZQotICAgKiBjb3JyZXNwb25kaW5nIHZpc2l0IGZsYWdzLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYWRqdXN0QmluZGluZ091dHB1dCgpCi0gIHsKLSAgICBib29sZWFuIHZhbHVlID0KLSAgICAgIHZpc2l0QmluZGluZ091dHB1dAotICAgICAgICB8fCAodHJhdmVyc2VCaW5kaW5nT3V0cHV0MkVsZW1lbnQgJiYgYWRqdXN0RWxlbWVudCgpKQotICAgICAgICB8fCAodHJhdmVyc2VCaW5kaW5nT3V0cHV0MkV4dGVuc2liaWxpdHlFbGVtZW50Ci0gICAgICAgICAgJiYgYWRqdXN0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSkKLSAgICAgICAgfHwgKHRyYXZlcnNlQmluZGluZ091dHB1dDJTT0FQQm9keQotICAgICAgICAgICYmIGFkanVzdFNPQVBCb2R5KCkKLSAgICAgICAgICB8fCAodHJhdmVyc2VCaW5kaW5nT3V0cHV0MlNPQVBIZWFkZXIgJiYgYWRqdXN0U09BUEhlYWRlcigpKSk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgIGlnbm9yZUJpbmRpbmdPdXRwdXQoKTsKLSAgICByZXR1cm4gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgYWRqdXN0cyB0cmF2ZXJzYWwgaWdub3JlIGZsYWdzIGFjY29yZGluZyB0byB0aGUKLSAgICogY29ycmVzcG9uZGluZyB2aXNpdCBmbGFncy4KLSAgICogQHJldHVybiBib29sZWFuIAotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGFkanVzdEVsZW1lbnQoKQotICB7Ci0gICAgYm9vbGVhbiB2YWx1ZSA9IHZpc2l0RWxlbWVudDsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgaWdub3JlRWxlbWVudCgpOwotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCBhZGp1c3RzIHRyYXZlcnNhbCBpZ25vcmUgZmxhZ3MgYWNjb3JkaW5nIHRvIHRoZQotICAgKiBjb3JyZXNwb25kaW5nIHZpc2l0IGZsYWdzLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYWRqdXN0VHlwZXMoKQotICB7Ci0gICAgYm9vbGVhbiB2YWx1ZSA9Ci0gICAgICB2aXNpdFR5cGVzCi0gICAgICAgIHx8ICh0cmF2ZXJzZVR5cGVzMkVsZW1lbnQgJiYgYWRqdXN0RWxlbWVudCgpKQotICAgICAgICB8fCAodHJhdmVyc2VUeXBlczJFeHRlbnNpYmlsaXR5RWxlbWVudCAmJiBhZGp1c3RFeHRlbnNpYmlsaXR5RWxlbWVudCgpKTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgaWdub3JlVHlwZXMoKTsKLSAgICByZXR1cm4gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgYWRqdXN0cyB0cmF2ZXJzYWwgaWdub3JlIGZsYWdzIGFjY29yZGluZyB0byB0aGUKLSAgICogY29ycmVzcG9uZGluZyB2aXNpdCBmbGFncy4KLSAgICogQHJldHVybiBib29sZWFuIAotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGFkanVzdFNPQVBCaW5kaW5nKCkKLSAgewotICAgIGJvb2xlYW4gdmFsdWUgPSB2aXNpdFNPQVBCaW5kaW5nOwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVTT0FQQmluZGluZygpOwotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCBhZGp1c3RzIHRyYXZlcnNhbCBpZ25vcmUgZmxhZ3MgYWNjb3JkaW5nIHRvIHRoZQotICAgKiBjb3JyZXNwb25kaW5nIHZpc2l0IGZsYWdzLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYWRqdXN0UG9ydCgpCi0gIHsKLSAgICBib29sZWFuIHZhbHVlID0KLSAgICAgIHZpc2l0UG9ydAotICAgICAgICB8fCAodHJhdmVyc2VQb3J0MkVsZW1lbnQgJiYgYWRqdXN0RWxlbWVudCgpKQotICAgICAgICB8fCAodHJhdmVyc2VQb3J0MkV4dGVuc2liaWxpdHlFbGVtZW50ICYmIGFkanVzdEV4dGVuc2liaWxpdHlFbGVtZW50KCkpCi0gICAgICAgIHx8ICh0cmF2ZXJzZVBvcnQyQmluZGluZyAmJiBhZGp1c3RCaW5kaW5nKCkpOwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVQb3J0KCk7Ci0gICAgcmV0dXJuIHZhbHVlOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIGFkanVzdHMgdHJhdmVyc2FsIGlnbm9yZSBmbGFncyBhY2NvcmRpbmcgdG8gdGhlCi0gICAqIGNvcnJlc3BvbmRpbmcgdmlzaXQgZmxhZ3MuCi0gICAqIEByZXR1cm4gYm9vbGVhbiAKLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBhZGp1c3RPcGVyYXRpb24oKQotICB7Ci0gICAgYm9vbGVhbiB2YWx1ZSA9Ci0gICAgICB2aXNpdE9wZXJhdGlvbgotICAgICAgICB8fCAodHJhdmVyc2VPcGVyYXRpb24yRWxlbWVudCAmJiBhZGp1c3RFbGVtZW50KCkpCi0gICAgICAgIHx8ICh0cmF2ZXJzZU9wZXJhdGlvbjJJbnB1dCAmJiBhZGp1c3RJbnB1dCgpKQotICAgICAgICB8fCAodHJhdmVyc2VPcGVyYXRpb24yT3V0cHV0ICYmIGFkanVzdE91dHB1dCgpKQotICAgICAgICB8fCAodHJhdmVyc2VPcGVyYXRpb24yRmF1bHQgJiYgYWRqdXN0RmF1bHQoKSk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgIGlnbm9yZU9wZXJhdGlvbigpOwotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCBhZGp1c3RzIHRyYXZlcnNhbCBpZ25vcmUgZmxhZ3MgYWNjb3JkaW5nIHRvIHRoZQotICAgKiBjb3JyZXNwb25kaW5nIHZpc2l0IGZsYWdzLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYWRqdXN0QmluZGluZ09wZXJhdGlvbigpCi0gIHsKLSAgICBib29sZWFuIHZhbHVlID0KLSAgICAgIHZpc2l0QmluZGluZ09wZXJhdGlvbgotICAgICAgICB8fCAodHJhdmVyc2VCaW5kaW5nT3BlcmF0aW9uMkVsZW1lbnQgJiYgYWRqdXN0RWxlbWVudCgpKQotICAgICAgICB8fCAodHJhdmVyc2VCaW5kaW5nT3BlcmF0aW9uMkJpbmRpbmdGYXVsdCAmJiBhZGp1c3RCaW5kaW5nRmF1bHQoKSkKLSAgICAgICAgfHwgKHRyYXZlcnNlQmluZGluZ09wZXJhdGlvbjJCaW5kaW5nT3V0cHV0ICYmIGFkanVzdEJpbmRpbmdPdXRwdXQoKSkKLSAgICAgICAgfHwgKHRyYXZlcnNlQmluZGluZ09wZXJhdGlvbjJPcGVyYXRpb24gJiYgYWRqdXN0T3BlcmF0aW9uKCkpCi0gICAgICAgIHx8ICh0cmF2ZXJzZUJpbmRpbmdPcGVyYXRpb24yQmluZGluZ0lucHV0ICYmIGFkanVzdEJpbmRpbmdJbnB1dCgpKQotICAgICAgICB8fCAodHJhdmVyc2VCaW5kaW5nT3BlcmF0aW9uMkV4dGVuc2liaWxpdHlFbGVtZW50Ci0gICAgICAgICAgJiYgYWRqdXN0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSkKLSAgICAgICAgfHwgKHRyYXZlcnNlQmluZGluZ09wZXJhdGlvbjJTT0FQT3BlcmF0aW9uICYmIGFkanVzdFNPQVBPcGVyYXRpb24oKSk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgIGlnbm9yZUJpbmRpbmdPcGVyYXRpb24oKTsKLSAgICByZXR1cm4gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgYWRqdXN0cyB0cmF2ZXJzYWwgaWdub3JlIGZsYWdzIGFjY29yZGluZyB0byB0aGUKLSAgICogY29ycmVzcG9uZGluZyB2aXNpdCBmbGFncy4KLSAgICogQHJldHVybiBib29sZWFuIAotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGFkanVzdElucHV0KCkKLSAgewotICAgIGJvb2xlYW4gdmFsdWUgPQotICAgICAgdmlzaXRJbnB1dAotICAgICAgICB8fCAodHJhdmVyc2VJbnB1dDJFbGVtZW50ICYmIGFkanVzdEVsZW1lbnQoKSkKLSAgICAgICAgfHwgKHRyYXZlcnNlSW5wdXQyTWVzc2FnZSAmJiBhZGp1c3RNZXNzYWdlKCkpOwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVJbnB1dCgpOwotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCBhZGp1c3RzIHRyYXZlcnNhbCBpZ25vcmUgZmxhZ3MgYWNjb3JkaW5nIHRvIHRoZQotICAgKiBjb3JyZXNwb25kaW5nIHZpc2l0IGZsYWdzLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYWRqdXN0QmluZGluZygpCi0gIHsKLSAgICBib29sZWFuIHZhbHVlID0KLSAgICAgIHZpc2l0QmluZGluZwotICAgICAgICB8fCAodHJhdmVyc2VCaW5kaW5nMkVsZW1lbnQgJiYgYWRqdXN0RWxlbWVudCgpKQotICAgICAgICB8fCAodHJhdmVyc2VCaW5kaW5nMkJpbmRpbmdPcGVyYXRpb24gJiYgYWRqdXN0QmluZGluZ09wZXJhdGlvbigpKQotICAgICAgICB8fCAodHJhdmVyc2VCaW5kaW5nMkV4dGVuc2liaWxpdHlFbGVtZW50ICYmIGFkanVzdEV4dGVuc2liaWxpdHlFbGVtZW50KCkpCi0gICAgICAgIHx8ICh0cmF2ZXJzZUJpbmRpbmcyUG9ydFR5cGUgJiYgYWRqdXN0UG9ydFR5cGUoKSkKLSAgICAgICAgfHwgKHRyYXZlcnNlQmluZGluZzJTT0FQQmluZGluZyAmJiBhZGp1c3RTT0FQQmluZGluZygpKTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgaWdub3JlQmluZGluZygpOwotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCBhZGp1c3RzIHRyYXZlcnNhbCBpZ25vcmUgZmxhZ3MgYWNjb3JkaW5nIHRvIHRoZQotICAgKiBjb3JyZXNwb25kaW5nIHZpc2l0IGZsYWdzLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYWRqdXN0U09BUEJvZHkoKQotICB7Ci0gICAgYm9vbGVhbiB2YWx1ZSA9IHZpc2l0U09BUEJvZHk7Ci0gICAgLyogfHwgCi0gICAgCQkodHJhdmVyc2VTT0FQQm9keTJQYXJ0ICYmIGFkanVzdFBhcnQoKSk7Ki8KLSAgICBpZiAoIXZhbHVlKQotICAgICAgaWdub3JlU09BUEJvZHkoKTsKLSAgICByZXR1cm4gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgYWRqdXN0cyB0cmF2ZXJzYWwgaWdub3JlIGZsYWdzIGFjY29yZGluZyB0byB0aGUKLSAgICogY29ycmVzcG9uZGluZyB2aXNpdCBmbGFncy4KLSAgICogQHJldHVybiBib29sZWFuIAotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGFkanVzdFNPQVBIZWFkZXJGYXVsdCgpCi0gIHsKLSAgICBib29sZWFuIHZhbHVlID0gdmlzaXRTT0FQSGVhZGVyRmF1bHQ7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgIGlnbm9yZVNPQVBIZWFkZXJGYXVsdCgpOwotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCBhZGp1c3RzIHRyYXZlcnNhbCBpZ25vcmUgZmxhZ3MgYWNjb3JkaW5nIHRvIHRoZQotICAgKiBjb3JyZXNwb25kaW5nIHZpc2l0IGZsYWdzLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYWRqdXN0QmluZGluZ0lucHV0KCkKLSAgewotICAgIGJvb2xlYW4gdmFsdWUgPQotICAgICAgdmlzaXRCaW5kaW5nSW5wdXQKLSAgICAgICAgfHwgKHRyYXZlcnNlQmluZGluZ0lucHV0MkVsZW1lbnQgJiYgYWRqdXN0RWxlbWVudCgpKQotICAgICAgICB8fCAodHJhdmVyc2VCaW5kaW5nSW5wdXQyRXh0ZW5zaWJpbGl0eUVsZW1lbnQKLSAgICAgICAgICAmJiBhZGp1c3RFeHRlbnNpYmlsaXR5RWxlbWVudCgpKQotICAgICAgICB8fCAodHJhdmVyc2VCaW5kaW5nSW5wdXQyU09BUEJvZHkKLSAgICAgICAgICAmJiBhZGp1c3RTT0FQQm9keSgpCi0gICAgICAgICAgfHwgKHRyYXZlcnNlQmluZGluZ0lucHV0MlNPQVBIZWFkZXIgJiYgYWRqdXN0U09BUEhlYWRlcigpKSk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgIGlnbm9yZUJpbmRpbmdJbnB1dCgpOwotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCBhZGp1c3RzIHRyYXZlcnNhbCBpZ25vcmUgZmxhZ3MgYWNjb3JkaW5nIHRvIHRoZQotICAgKiBjb3JyZXNwb25kaW5nIHZpc2l0IGZsYWdzLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYWRqdXN0T3V0cHV0KCkKLSAgewotICAgIGJvb2xlYW4gdmFsdWUgPQotICAgICAgdmlzaXRPdXRwdXQKLSAgICAgICAgfHwgKHRyYXZlcnNlT3V0cHV0MkVsZW1lbnQgJiYgYWRqdXN0RWxlbWVudCgpKQotICAgICAgICB8fCAodHJhdmVyc2VPdXRwdXQyTWVzc2FnZSAmJiBhZGp1c3RNZXNzYWdlKCkpOwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVPdXRwdXQoKTsKLSAgICByZXR1cm4gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgYWRqdXN0cyB0cmF2ZXJzYWwgaWdub3JlIGZsYWdzIGFjY29yZGluZyB0byB0aGUKLSAgICogY29ycmVzcG9uZGluZyB2aXNpdCBmbGFncy4KLSAgICogQHJldHVybiBib29sZWFuIAotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGFkanVzdEJpbmRpbmdGYXVsdCgpCi0gIHsKLSAgICBib29sZWFuIHZhbHVlID0KLSAgICAgIHZpc2l0QmluZGluZ0ZhdWx0Ci0gICAgICAgIHx8ICh0cmF2ZXJzZUJpbmRpbmdGYXVsdDJFbGVtZW50ICYmIGFkanVzdEVsZW1lbnQoKSkKLSAgICAgICAgfHwgKHRyYXZlcnNlQmluZGluZ0ZhdWx0MkV4dGVuc2liaWxpdHlFbGVtZW50Ci0gICAgICAgICAgJiYgYWRqdXN0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKSkKLSAgICAgICAgfHwgKHRyYXZlcnNlQmluZGluZ0ZhdWx0MlNPQVBGYXVsdCAmJiBhZGp1c3RTT0FQRmF1bHQoKSk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgIGlnbm9yZUJpbmRpbmdGYXVsdCgpOwotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCBhZGp1c3RzIHRyYXZlcnNhbCBpZ25vcmUgZmxhZ3MgYWNjb3JkaW5nIHRvIHRoZQotICAgKiBjb3JyZXNwb25kaW5nIHZpc2l0IGZsYWdzLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYWRqdXN0U09BUE9wZXJhdGlvbigpCi0gIHsKLSAgICBib29sZWFuIHZhbHVlID0gdmlzaXRTT0FQT3BlcmF0aW9uOwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVTT0FQT3BlcmF0aW9uKCk7Ci0gICAgcmV0dXJuIHZhbHVlOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIGFkanVzdHMgdHJhdmVyc2FsIGlnbm9yZSBmbGFncyBhY2NvcmRpbmcgdG8gdGhlCi0gICAqIGNvcnJlc3BvbmRpbmcgdmlzaXQgZmxhZ3MuCi0gICAqIEByZXR1cm4gYm9vbGVhbiAKLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBhZGp1c3REZWZpbml0aW9uKCkKLSAgewotICAgIGJvb2xlYW4gdmFsdWUgPQotICAgICAgdmlzaXREZWZpbml0aW9uCi0gICAgICAgIHx8ICh0cmF2ZXJzZURlZmluaXRpb24yRWxlbWVudCAmJiBhZGp1c3RFbGVtZW50KCkpCi0gICAgICAgIHx8ICh0cmF2ZXJzZURlZmluaXRpb24ySW1wb3J0ICYmIGFkanVzdEltcG9ydCgpKQotICAgICAgICB8fCAodHJhdmVyc2VEZWZpbml0aW9uMlR5cGVzICYmIGFkanVzdFR5cGVzKCkpCi0gICAgICAgIHx8ICh0cmF2ZXJzZURlZmluaXRpb24yTWVzc2FnZSAmJiBhZGp1c3RNZXNzYWdlKCkpCi0gICAgICAgIHx8ICh0cmF2ZXJzZURlZmluaXRpb24yRXh0ZW5zaWJpbGl0eUVsZW1lbnQKLSAgICAgICAgICAmJiBhZGp1c3RFeHRlbnNpYmlsaXR5RWxlbWVudCgpKQotICAgICAgICB8fCAodHJhdmVyc2VEZWZpbml0aW9uMlBvcnRUeXBlICYmIGFkanVzdFBvcnRUeXBlKCkpCi0gICAgICAgIHx8ICh0cmF2ZXJzZURlZmluaXRpb24yQmluZGluZyAmJiBhZGp1c3RCaW5kaW5nKCkpCi0gICAgICAgIHx8ICh0cmF2ZXJzZURlZmluaXRpb24yU2VydmljZSAmJiBhZGp1c3RTZXJ2aWNlKCkpOwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVEZWZpbml0aW9uKCk7Ci0gICAgcmV0dXJuIHZhbHVlOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIGFkanVzdHMgdHJhdmVyc2FsIGlnbm9yZSBmbGFncyBhY2NvcmRpbmcgdG8gdGhlCi0gICAqIGNvcnJlc3BvbmRpbmcgdmlzaXQgZmxhZ3MuCi0gICAqIEByZXR1cm4gYm9vbGVhbiAKLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBhZGp1c3RTT0FQRmF1bHQoKQotICB7Ci0gICAgYm9vbGVhbiB2YWx1ZSA9IHZpc2l0U09BUEZhdWx0OwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVTT0FQRmF1bHQoKTsKLSAgICByZXR1cm4gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgYWRqdXN0cyB0cmF2ZXJzYWwgaWdub3JlIGZsYWdzIGFjY29yZGluZyB0byB0aGUKLSAgICogY29ycmVzcG9uZGluZyB2aXNpdCBmbGFncy4KLSAgICogQHJldHVybiBib29sZWFuIAotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGFkanVzdEltcG9ydCgpCi0gIHsKLSAgICBib29sZWFuIHZhbHVlID0gdmlzaXRJbXBvcnQgfHwgKHRyYXZlcnNlSW1wb3J0MkRlZmluaXRpb24KLSAgICAvKiAmJiBhZGp1c3REZWZpbml0aW9uKCkqLwotICAgICAgKQotICAgIHx8IC8vIGF2b2lkIGN5Y2xpbmcgcHJvYmxlbS4gVGh1cywgeW91IHNob3VsZCBjYWxsIGlnbm9yZUltcG9ydCBtYW51YWxseSAgCi0gICAodHJhdmVyc2VJbXBvcnQyRWxlbWVudCAmJiBhZGp1c3RFbGVtZW50KCkpOwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVJbXBvcnQoKTsKLSAgICByZXR1cm4gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgYWRqdXN0cyB0cmF2ZXJzYWwgaWdub3JlIGZsYWdzIGFjY29yZGluZyB0byB0aGUKLSAgICogY29ycmVzcG9uZGluZyB2aXNpdCBmbGFncy4KLSAgICogQHJldHVybiBib29sZWFuIAotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGFkanVzdEZhdWx0KCkKLSAgewotICAgIGJvb2xlYW4gdmFsdWUgPQotICAgICAgdmlzaXRGYXVsdAotICAgICAgICB8fCAodHJhdmVyc2VGYXVsdDJFbGVtZW50ICYmIGFkanVzdEVsZW1lbnQoKSkKLSAgICAgICAgfHwgKHRyYXZlcnNlRmF1bHQyTWVzc2FnZSAmJiBhZGp1c3RNZXNzYWdlKCkpOwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVGYXVsdCgpOwotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCBhZGp1c3RzIHRyYXZlcnNhbCBpZ25vcmUgZmxhZ3MgYWNjb3JkaW5nIHRvIHRoZQotICAgKiBjb3JyZXNwb25kaW5nIHZpc2l0IGZsYWdzLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYWRqdXN0UG9ydFR5cGUoKQotICB7Ci0gICAgYm9vbGVhbiB2YWx1ZSA9Ci0gICAgICB2aXNpdFBvcnRUeXBlCi0gICAgICAgIHx8ICh0cmF2ZXJzZVBvcnRUeXBlMkVsZW1lbnQgJiYgYWRqdXN0RWxlbWVudCgpKQotICAgICAgICB8fCAodHJhdmVyc2VQb3J0VHlwZTJPcGVyYXRpb24gJiYgYWRqdXN0T3BlcmF0aW9uKCkpOwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVQb3J0VHlwZSgpOwotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCBhZGp1c3RzIHRyYXZlcnNhbCBpZ25vcmUgZmxhZ3MgYWNjb3JkaW5nIHRvIHRoZQotICAgKiBjb3JyZXNwb25kaW5nIHZpc2l0IGZsYWdzLgotICAgKiBAcmV0dXJuIGJvb2xlYW4gCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gYWRqdXN0U2VydmljZSgpCi0gIHsKLSAgICBib29sZWFuIHZhbHVlID0KLSAgICAgIHZpc2l0U2VydmljZQotICAgICAgICB8fCAodHJhdmVyc2VTZXJ2aWNlMkVsZW1lbnQgJiYgYWRqdXN0RWxlbWVudCgpKQotICAgICAgICB8fCAodHJhdmVyc2VTZXJ2aWNlMkV4dGVuc2liaWxpdHlFbGVtZW50ICYmIGFkanVzdEV4dGVuc2liaWxpdHlFbGVtZW50KCkpCi0gICAgICAgIHx8ICh0cmF2ZXJzZVNlcnZpY2UyUG9ydCAmJiBhZGp1c3RQb3J0KCkpOwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVTZXJ2aWNlKCk7Ci0gICAgcmV0dXJuIHZhbHVlOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIGFkanVzdHMgdHJhdmVyc2FsIGlnbm9yZSBmbGFncyBhY2NvcmRpbmcgdG8gdGhlCi0gICAqIGNvcnJlc3BvbmRpbmcgdmlzaXQgZmxhZ3MuCi0gICAqIEByZXR1cm4gYm9vbGVhbiAKLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBhZGp1c3RNZXNzYWdlKCkKLSAgewotICAgIGJvb2xlYW4gdmFsdWUgPQotICAgICAgdmlzaXRNZXNzYWdlCi0gICAgICAgIHx8ICh0cmF2ZXJzZU1lc3NhZ2UyRWxlbWVudCAmJiBhZGp1c3RFbGVtZW50KCkpCi0gICAgICAgIHx8ICh0cmF2ZXJzZU1lc3NhZ2UyUGFydCAmJiBhZGp1c3RQYXJ0KCkpOwotICAgIGlmICghdmFsdWUpCi0gICAgICBpZ25vcmVNZXNzYWdlKCk7Ci0gICAgcmV0dXJuIHZhbHVlOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgZXh0ZW5zaWJpbGl0eSBlbGVtZW50IGFjY29yZGluZyB0byB0aGUgCi0gICAqIHNldHRpbmdzIGluIHRoZSB0cmF2ZXJzYWwgY29udGV4dC4KLSAgICogCi0gICAqIEBwYXJhbSBvYmpFeHRlbnNpYmlsaXR5RWxlbWVudCAgYSBXU0RMIGV4dGVuc2liaWxpdHkgZWxlbWVudCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmVudCAgICAgICAgICAgICAgICAgICBwYXJlbnQgb2YgdGhlIFdTREwgZXh0ZW5zaWJpbGl0eSBlbGVtZW50IGFydGlmYWN0LgotICAgKiBAcGFyYW0gY3R4ICAgICAgICAgICAgICAgICAgICAgIHRoZSB0cmF2ZXJzYWwgY29udGV4LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlKAotICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IG9iakV4dGVuc2liaWxpdHlFbGVtZW50LAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgY3R4LnJlc3VtZUV4dGVuc2liaWxpdHlFbGVtZW50UHJvY2Vzc2luZygpOwotICAgIGN0eC5zZXRFeHRlbnNpYmlsaXR5RWxlbWVudChvYmpFeHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gICAgaWYgKHZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi0gICAgICB2aXNpdG9yLnZpc2l0KG9iakV4dGVuc2liaWxpdHlFbGVtZW50LCBwYXJlbnQsIGN0eCk7Ci0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBwYXJ0IGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MgaW4KLSAgICogdGhlIHRyYXZlcnNhbCBjb250ZXh0LgotICAgKiAKLSAgICogQHBhcmFtIG9ialBhcnQgIHRoZSBXU0RMIHBhcnQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJlbnQgICBwYXJlbnQgb2YgdGhlIFdTREwgcGFydCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIGN0eCAgICAgIHRoZSB0cmF2ZXJzYWwgY29udGV4LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlKFBhcnQgb2JqUGFydCwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgY3R4LnJlc3VtZVBhcnRQcm9jZXNzaW5nKCk7Ci0gICAgY3R4LnNldFBhcnQob2JqUGFydCk7Ci0gICAgaWYgKHZpc2l0UGFydCkKLSAgICB7Ci0gICAgICB2aXNpdG9yLnZpc2l0KG9ialBhcnQsIHBhcmVudCwgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NQYXJ0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKG9ialBhcnQgPT0gbnVsbCkKLSAgICAgIHJldHVybjsKLSAgICBpZiAodHJhdmVyc2VQYXJ0MkVsZW1lbnQpCi0gICAgICB0cmF2ZXJzZShvYmpQYXJ0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCksIG9ialBhcnQsIGN0eCk7Ci0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBTT0FQIGhlYWRlciBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIAotICAgKiBzZXR0aW5ncyBpbiB0aGUgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqIAotICAgKiBAcGFyYW0gb2JqU09BUEhlYWRlciAgYSBXU0RMIFNPQVAgaGVhZGVyIGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyZW50ICAgICAgICAgcGFyZW50IG9mIHRoZSBXU0RMIFNPQVAgaGVhZGVyIGFydGlmYWN0LgotICAgKiBAcGFyYW0gY3R4ICAgICAgICAgICAgdGhlIHRyYXZlcnNhbCBjb250ZXguCi0gICAqLwotICBwcml2YXRlIHZvaWQgdHJhdmVyc2UoCi0gICAgU09BUEhlYWRlciBvYmpTT0FQSGVhZGVyLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgY3R4LnJlc3VtZVNPQVBIZWFkZXJQcm9jZXNzaW5nKCk7Ci0gICAgY3R4LnNldFNPQVBIZWFkZXIob2JqU09BUEhlYWRlcik7Ci0gICAgaWYgKHZpc2l0U09BUEhlYWRlcikKLSAgICB7Ci0gICAgICB2aXNpdG9yLnZpc2l0KG9ialNPQVBIZWFkZXIsIHBhcmVudCwgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NTT0FQSGVhZGVyKCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKG9ialNPQVBIZWFkZXIgPT0gbnVsbCkKLSAgICAgIHJldHVybjsKLSAgICBpZiAodHJhdmVyc2VTT0FQSGVhZGVyMlNPQVBIZWFkZXJGYXVsdAotICAgICAgJiYgb2JqU09BUEhlYWRlci5nZXRTT0FQSGVhZGVyRmF1bHRzKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpdCA9IG9ialNPQVBIZWFkZXIuZ2V0U09BUEhlYWRlckZhdWx0cygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICB0cmF2ZXJzZSgoU09BUEhlYWRlckZhdWx0KSBpdC5uZXh0KCksIG9ialNPQVBIZWFkZXIsIGN0eCk7Ci0gICAgICAgIGlmICghY3R4LnByb2Nlc3NTT0FQSGVhZGVyKCkpCi0gICAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIGVsZW1lbnQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncyBpbgotICAgKiB0aGUgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqIAotICAgKiBAcGFyYW0gb2JqRWxlbWVudCAgYSBXU0RMIGVsZW1lbnQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJlbnQgICBwYXJlbnQgb2YgdGhlIFdTREwgZWxlbWVudCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIGN0eCAgICAgIHRoZSB0cmF2ZXJzYWwgY29udGV4LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlKAotICAgIEVsZW1lbnQgb2JqRWxlbWVudCwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGN0eC5zZXRFbGVtZW50KG9iakVsZW1lbnQpOwotICAgIGlmICh2aXNpdEVsZW1lbnQpCi0gICAgICB2aXNpdG9yLnZpc2l0KG9iakVsZW1lbnQsIHBhcmVudCwgY3R4KTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIHR5cGVzIGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MgaW4KLSAgICogdGhlIHRyYXZlcnNhbCBjb250ZXh0LgotICAgKiAKLSAgICogQHBhcmFtIG9ialR5cGVzICBhIFdTREwgdHlwZXMgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJlbnQgICAgcGFyZW50IG9mIHRoZSBXU0RMIHR5cGVzIGFydGlmYWN0LgotICAgKiBAcGFyYW0gY3R4ICAgICAgIHRoZSB0cmF2ZXJzYWwgY29udGV4LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlKAotICAgIFR5cGVzIG9ialR5cGVzLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgY3R4LnJlc3VtZVR5cGVzUHJvY2Vzc2luZygpOwotICAgIGN0eC5zZXRUeXBlcyhvYmpUeXBlcyk7Ci0gICAgaWYgKHZpc2l0VHlwZXMpCi0gICAgewotICAgICAgdmlzaXRvci52aXNpdChvYmpUeXBlcywgcGFyZW50LCBjdHgpOwotICAgICAgaWYgKCFjdHgucHJvY2Vzc1R5cGVzKCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKG9ialR5cGVzID09IG51bGwpCi0gICAgICByZXR1cm47Ci0gICAgaWYgKHRyYXZlcnNlVHlwZXMyRWxlbWVudCkKLSAgICB7Ci0gICAgICB0cmF2ZXJzZShvYmpUeXBlcy5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpLCBvYmpUeXBlcywgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NUeXBlcygpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICh0cmF2ZXJzZVR5cGVzMkV4dGVuc2liaWxpdHlFbGVtZW50Ci0gICAgICAmJiBvYmpUeXBlcy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ID0gb2JqVHlwZXMuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIHRyYXZlcnNlKChFeHRlbnNpYmlsaXR5RWxlbWVudCkgaXQubmV4dCgpLCBvYmpUeXBlcywgY3R4KTsKLSAgICAgICAgaWYgKCFjdHgucHJvY2Vzc1R5cGVzKCkpCi0gICAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIFNPQVAgYmluZGluZyBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIAotICAgKiBzZXR0aW5ncyBpbiB0aGUgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqIAotICAgKiBAcGFyYW0gb2JqU09BUEJpbmRpbmcgIGEgV1NETCBTT0FQIGJpbmRpbmcgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJlbnQgICAgICAgICAgcGFyZW50IG9mIHRoZSBXU0RMIFNPQVAgYmluZGluZyBhcnRpZmFjdC4KLSAgICogQHBhcmFtIGN0eCAgICAgICAgICAgICB0aGUgdHJhdmVyc2FsIGNvbnRleC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCB0cmF2ZXJzZSgKLSAgICBTT0FQQmluZGluZyBvYmpTT0FQQmluZGluZywKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGN0eC5zZXRTT0FQQmluZGluZyhvYmpTT0FQQmluZGluZyk7Ci0gICAgaWYgKHZpc2l0U09BUEJpbmRpbmcpCi0gICAgICB2aXNpdG9yLnZpc2l0KG9ialNPQVBCaW5kaW5nLCBwYXJlbnQsIGN0eCk7Ci0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBkZWZpbml0aW9uIGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgCi0gICAqIHNldHRpbmdzIGluIHRoZSB0cmF2ZXJzYWwgY29udGV4dC4KLSAgICogCi0gICAqIEBwYXJhbSBvYmpEZWZpbml0aW9uICBhIFdTREwgZGVmaW5pdGlvbiBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmVudCAgICAgICAgIHBhcmVudCBvZiB0aGUgV1NETCBkZWZpbml0aW9uIGFydGlmYWN0LgotICAgKiBAcGFyYW0gY3R4ICAgICAgICAgICAgdGhlIHRyYXZlcnNhbCBjb250ZXguCi0gICAqLwotICBwcml2YXRlIHZvaWQgdHJhdmVyc2UoCi0gICAgRGVmaW5pdGlvbiBvYmpEZWZpbml0aW9uLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0JaWYgKChvYmpEZWZpbml0aW9uID09IG51bGwpIHx8ICh0aGlzLmFscmVhZHlUcmF2ZXJzZWREZWZpbml0aW9ucy5jb250YWlucyhvYmpEZWZpbml0aW9uKSkpCi0JewotCSAgcmV0dXJuOwkKLQl9Ci0JdGhpcy5hbHJlYWR5VHJhdmVyc2VkRGVmaW5pdGlvbnMuYWRkKG9iakRlZmluaXRpb24pOwotICAgIGN0eC5yZXN1bWVEZWZpbml0aW9uUHJvY2Vzc2luZygpOwotICAgIGN0eC5zZXREZWZpbml0aW9uKG9iakRlZmluaXRpb24pOwotCi0gICAgaWYgKHZpc2l0RGVmaW5pdGlvbikKLSAgICB7Ci0gICAgICB2aXNpdG9yLnZpc2l0KG9iakRlZmluaXRpb24sIHBhcmVudCwgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NEZWZpbml0aW9uKCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHRyYXZlcnNlRGVmaW5pdGlvbjJJbXBvcnQgJiYgb2JqRGVmaW5pdGlvbi5nZXRJbXBvcnRzKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpdCA9IG9iakRlZmluaXRpb24uZ2V0SW1wb3J0cygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBWZWN0b3IgdiA9IChWZWN0b3IpIGl0Lm5leHQoKTsKLSAgICAgICAgaWYgKHYgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIEl0ZXJhdG9yIGl0MiA9IHYuaXRlcmF0b3IoKTsKLSAgICAgICAgICB3aGlsZSAoaXQyLmhhc05leHQoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0cmF2ZXJzZSgoSW1wb3J0KSBpdDIubmV4dCgpLCBvYmpEZWZpbml0aW9uLCBjdHgpOwotICAgICAgICAgICAgaWYgKCFjdHgucHJvY2Vzc0RlZmluaXRpb24oKSkKLSAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBpZiAodHJhdmVyc2VEZWZpbml0aW9uMkVsZW1lbnQpCi0gICAgewotICAgICAgdHJhdmVyc2Uob2JqRGVmaW5pdGlvbi5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpLCBvYmpEZWZpbml0aW9uLCBjdHgpOwotICAgICAgaWYgKCFjdHgucHJvY2Vzc0RlZmluaXRpb24oKSkKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAodHJhdmVyc2VEZWZpbml0aW9uMlR5cGVzKQotICAgIHsKLSAgICAgIHRyYXZlcnNlKG9iakRlZmluaXRpb24uZ2V0VHlwZXMoKSwgb2JqRGVmaW5pdGlvbiwgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NEZWZpbml0aW9uKCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHRyYXZlcnNlRGVmaW5pdGlvbjJNZXNzYWdlICYmIG9iakRlZmluaXRpb24uZ2V0TWVzc2FnZXMoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ID0gb2JqRGVmaW5pdGlvbi5nZXRNZXNzYWdlcygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICB0cmF2ZXJzZSgoTWVzc2FnZSkgaXQubmV4dCgpLCBvYmpEZWZpbml0aW9uLCBjdHgpOwotICAgICAgICBpZiAoIWN0eC5wcm9jZXNzRGVmaW5pdGlvbigpKQotICAgICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHRyYXZlcnNlRGVmaW5pdGlvbjJQb3J0VHlwZSAmJiBvYmpEZWZpbml0aW9uLmdldFBvcnRUeXBlcygpICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaXQgPSBvYmpEZWZpbml0aW9uLmdldFBvcnRUeXBlcygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICB0cmF2ZXJzZSgoUG9ydFR5cGUpIGl0Lm5leHQoKSwgb2JqRGVmaW5pdGlvbiwgY3R4KTsKLSAgICAgICAgaWYgKCFjdHgucHJvY2Vzc0RlZmluaXRpb24oKSkKLSAgICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotICAgIGlmICh0cmF2ZXJzZURlZmluaXRpb24yQmluZGluZyAmJiBvYmpEZWZpbml0aW9uLmdldEJpbmRpbmdzKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpdCA9IG9iakRlZmluaXRpb24uZ2V0QmluZGluZ3MoKS52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgdHJhdmVyc2UoKEJpbmRpbmcpIGl0Lm5leHQoKSwgb2JqRGVmaW5pdGlvbiwgY3R4KTsKLSAgICAgICAgaWYgKCFjdHgucHJvY2Vzc0RlZmluaXRpb24oKSkKLSAgICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotICAgIGlmICh0cmF2ZXJzZURlZmluaXRpb24yU2VydmljZSAmJiBvYmpEZWZpbml0aW9uLmdldFNlcnZpY2VzKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpdCA9IG9iakRlZmluaXRpb24uZ2V0U2VydmljZXMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgdHJhdmVyc2UoKFNlcnZpY2UpIGl0Lm5leHQoKSwgb2JqRGVmaW5pdGlvbiwgY3R4KTsKLSAgICAgICAgaWYgKCFjdHgucHJvY2Vzc0RlZmluaXRpb24oKSkKLSAgICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotICAgIGlmICh0cmF2ZXJzZURlZmluaXRpb24yRXh0ZW5zaWJpbGl0eUVsZW1lbnQKLSAgICAgICYmIG9iakRlZmluaXRpb24uZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpdCA9IG9iakRlZmluaXRpb24uZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIHRyYXZlcnNlKChFeHRlbnNpYmlsaXR5RWxlbWVudCkgaXQubmV4dCgpLCBvYmpEZWZpbml0aW9uLCBjdHgpOwotICAgICAgICBpZiAoIWN0eC5wcm9jZXNzRGVmaW5pdGlvbigpKQotICAgICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBwb3J0IGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MgaW4KLSAgICogdGhlIHRyYXZlcnNhbCBjb250ZXh0LgotICAgKiAKLSAgICogQHBhcmFtIG9ialBvcnQgIGEgV1NETCBwb3J0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyZW50ICAgcGFyZW50IG9mIHRoZSBXU0RMIHBvcnQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBjdHggICAgICB0aGUgdHJhdmVyc2FsIGNvbnRleC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCB0cmF2ZXJzZShQb3J0IG9ialBvcnQsIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGN0eC5yZXN1bWVQb3J0UHJvY2Vzc2luZygpOwotICAgIGN0eC5zZXRQb3J0KG9ialBvcnQpOwotICAgIGlmICh2aXNpdFBvcnQpCi0gICAgewotICAgICAgdmlzaXRvci52aXNpdChvYmpQb3J0LCBwYXJlbnQsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzUG9ydCgpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChvYmpQb3J0ID09IG51bGwpCi0gICAgICByZXR1cm47Ci0gICAgaWYgKHRyYXZlcnNlUG9ydDJFbGVtZW50KQotICAgIHsKLSAgICAgIHRyYXZlcnNlKG9ialBvcnQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSwgb2JqUG9ydCwgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NQb3J0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHRyYXZlcnNlUG9ydDJCaW5kaW5nKQotICAgIHsKLSAgICAgIHRyYXZlcnNlKG9ialBvcnQuZ2V0QmluZGluZygpLCBvYmpQb3J0LCBjdHgpOwotICAgICAgaWYgKCFjdHgucHJvY2Vzc1BvcnQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAodHJhdmVyc2VQb3J0MkV4dGVuc2liaWxpdHlFbGVtZW50Ci0gICAgICAmJiBvYmpQb3J0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaXQgPSBvYmpQb3J0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICB0cmF2ZXJzZSgoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGl0Lm5leHQoKSwgb2JqUG9ydCwgY3R4KTsKLSAgICAgICAgaWYgKCFjdHgucHJvY2Vzc1BvcnQoKSkKLSAgICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgb3BlcmF0aW9uIGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MgaW4KLSAgICogdGhlIHRyYXZlcnNhbCBjb250ZXh0LgotICAgKiAKLSAgICogQHBhcmFtIG9iak9wZXJhdGlvbiAgYSBXU0RMIG9wZXJhdGlvbiBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmVudCAgICAgICAgcGFyZW50IG9mIHRoZSBXU0RMIG9wZXJhdGlvbiBhcnRpZmFjdHQuCi0gICAqIEBwYXJhbSBjdHggICAgICAgICAgIHRoZSB0cmF2ZXJzYWwgY29udGV4LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlKAotICAgIE9wZXJhdGlvbiBvYmpPcGVyYXRpb24sCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBjdHgucmVzdW1lT3BlcmF0aW9uUHJvY2Vzc2luZygpOwotICAgIGN0eC5zZXRPcGVyYXRpb24ob2JqT3BlcmF0aW9uKTsKLSAgICBpZiAodmlzaXRPcGVyYXRpb24pCi0gICAgewotICAgICAgdmlzaXRvci52aXNpdChvYmpPcGVyYXRpb24sIHBhcmVudCwgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NPcGVyYXRpb24oKSkKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAob2JqT3BlcmF0aW9uID09IG51bGwpCi0gICAgICByZXR1cm47Ci0gICAgaWYgKHRyYXZlcnNlT3BlcmF0aW9uMkVsZW1lbnQpCi0gICAgewotICAgICAgdHJhdmVyc2Uob2JqT3BlcmF0aW9uLmdldERvY3VtZW50YXRpb25FbGVtZW50KCksIG9iak9wZXJhdGlvbiwgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NPcGVyYXRpb24oKSkKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAodHJhdmVyc2VPcGVyYXRpb24ySW5wdXQpCi0gICAgewotICAgICAgdHJhdmVyc2Uob2JqT3BlcmF0aW9uLmdldElucHV0KCksIG9iak9wZXJhdGlvbiwgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NPcGVyYXRpb24oKSkKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAodHJhdmVyc2VPcGVyYXRpb24yT3V0cHV0KQotICAgIHsKLSAgICAgIHRyYXZlcnNlKG9iak9wZXJhdGlvbi5nZXRPdXRwdXQoKSwgb2JqT3BlcmF0aW9uLCBjdHgpOwotICAgICAgaWYgKCFjdHgucHJvY2Vzc09wZXJhdGlvbigpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICh0cmF2ZXJzZU9wZXJhdGlvbjJGYXVsdCAmJiBvYmpPcGVyYXRpb24uZ2V0RmF1bHRzKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpdCA9IG9iak9wZXJhdGlvbi5nZXRGYXVsdHMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgdHJhdmVyc2UoKEZhdWx0KSBpdC5uZXh0KCksIG9iak9wZXJhdGlvbiwgY3R4KTsKLSAgICAgICAgaWYgKCFjdHgucHJvY2Vzc09wZXJhdGlvbigpKQotICAgICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBpbnB1dCBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzIGluCi0gICAqIHRoZSB0cmF2ZXJzYWwgY29udGV4dC4KLSAgICogCi0gICAqIEBwYXJhbSBvYmpJbnB1dCAgYSBXU0RMIGlucHV0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyZW50ICAgIHBhcmVudCBvZiB0aGUgV1NETCBpbnB1dCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIGN0eCAgICAgICB0aGUgdHJhdmVyc2FsIGNvbnRleC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCB0cmF2ZXJzZSgKLSAgICBJbnB1dCBvYmpJbnB1dCwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGN0eC5yZXN1bWVJbnB1dFByb2Nlc3NpbmcoKTsKLSAgICBjdHguc2V0SW5wdXQob2JqSW5wdXQpOwotICAgIGlmICh2aXNpdElucHV0KQotICAgIHsKLSAgICAgIHZpc2l0b3IudmlzaXQob2JqSW5wdXQsIHBhcmVudCwgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NJbnB1dCgpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChvYmpJbnB1dCA9PSBudWxsKQotICAgICAgcmV0dXJuOwotICAgIGlmICh0cmF2ZXJzZUlucHV0MkVsZW1lbnQpCi0gICAgewotICAgICAgdHJhdmVyc2Uob2JqSW5wdXQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSwgb2JqSW5wdXQsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzSW5wdXQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAodHJhdmVyc2VJbnB1dDJNZXNzYWdlKQotICAgICAgdHJhdmVyc2Uob2JqSW5wdXQuZ2V0TWVzc2FnZSgpLCBvYmpJbnB1dCwgY3R4KTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIFNPQVAgYm9keSBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIAotICAgKiBzZXR0aW5ncyBpbiB0aGUgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqIAotICAgKiBAcGFyYW0gb2JqU09BUEJvZHkgIGEgV1NETCBTT0FQIGJvZHkgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJlbnQgICAgICAgcGFyZW50IG9mIHRoZSBXU0RMIFNPQVAgYm9keSBhcnRpZmFjdC4KLSAgICogQHBhcmFtIGN0eCAgICAgICAgICB0aGUgdHJhdmVyc2FsIGNvbnRleC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCB0cmF2ZXJzZSgKLSAgICBTT0FQQm9keSBvYmpTT0FQQm9keSwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIC8vICAJY3R4LnJlc3VtZVNPQVBCb2R5UHJvY2Vzc2luZygpOwotICAgIGN0eC5zZXRTT0FQQm9keShvYmpTT0FQQm9keSk7Ci0gICAgaWYgKHZpc2l0U09BUEJvZHkpCi0gICAgICAvLwl7Ci0gICAgICB2aXNpdG9yLnZpc2l0KG9ialNPQVBCb2R5LCBwYXJlbnQsIGN0eCk7Ci0gICAgLyoJICBpZiAoIWN0eC5wcm9jZXNzU09BUEJvZHkoKSkKLSAgICAJCXJldHVybjsKLSAgICAJfQotICAgIAlpZiAob2JqU09BUEJvZHkgPT0gbnVsbCkKLSAgICAJCXJldHVybjsKLSAgICAJaWYgKHRyYXZlcnNlU09BUEJvZHkyUGFydCAmJiBvYmpTT0FQQm9keS5nZXRQYXJ0cygpICE9IG51bGwpIHsKLSAgICAJICBpZiAoY3R4KQotICAgIAkgIEl0ZXJhdG9yIGl0ID0gb2JqU09BUEJvZHkuZ2V0UGFydHMoKS5pdGVyYXRvcigpOwotICAgIAkgIHdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLSAgICAJICAJCi0gICAgCQl0cmF2ZXJzZSgoUGFydClpdC5uZXh0KCksIG9ialNPQVBCb2R5LCBjdHgpOwotICAgIAkJaWYgKCFjdHgucHJvY2Vzc1NPQVBCb2R5KCkpCi0gICAgCQkgIHJldHVybjsKLSAgICAJICB9Ci0gICAgCX0KLSAgICAqLwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgU09BUCBoZWFkZXIgZmF1bHQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIAotICAgKiB0aGUgc2V0dGluZ3MgaW4gdGhlIHRyYXZlcnNhbCBjb250ZXh0LgotICAgKiAKLSAgICogQHBhcmFtIG9ialNPQVBIZWFkZXJGYXVsdCAgYSBXU0RMIFNPQVAgaGVhZGVyIGZhdWx0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyZW50ICAgICAgICAgICAgICBwYXJlbnQgb2YgdGhlIFdTREwgU09BUCBoZWFkZXIgZmF1bHQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBjdHggICAgICAgICAgICAgICAgIHRoZSB0cmF2ZXJzYWwgY29udGV4LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlKAotICAgIFNPQVBIZWFkZXJGYXVsdCBvYmpTT0FQSGVhZGVyRmF1bHQsCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBjdHguc2V0U09BUEhlYWRlckZhdWx0KG9ialNPQVBIZWFkZXJGYXVsdCk7Ci0gICAgaWYgKHZpc2l0U09BUEhlYWRlckZhdWx0KQotICAgICAgdmlzaXRvci52aXNpdChvYmpTT0FQSGVhZGVyRmF1bHQsIHBhcmVudCwgY3R4KTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIG91dHB1dCBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzIGluCi0gICAqIHRoZSB0cmF2ZXJzYWwgY29udGV4dC4KLSAgICogCi0gICAqIEBwYXJhbSBvYmpPdXRwdXQgIGEgV1NETCBvdXRwdXQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJlbnQgICBwYXJlbnQgb2YgdGhlIFdTREwgb3V0cHV0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gY3R4ICAgICAgdGhlIHRyYXZlcnNhbCBjb250ZXguCi0gICAqIEBwYXJhbSBwYXJlbnQKLSAgICogQHBhcmFtIGN0eAotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlKAotICAgIE91dHB1dCBvYmpPdXRwdXQsCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBjdHgucmVzdW1lT3V0cHV0UHJvY2Vzc2luZygpOwotICAgIGN0eC5zZXRPdXRwdXQob2JqT3V0cHV0KTsKLSAgICBpZiAodmlzaXRPdXRwdXQpCi0gICAgewotICAgICAgdmlzaXRvci52aXNpdChvYmpPdXRwdXQsIHBhcmVudCwgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NPdXRwdXQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAob2JqT3V0cHV0ID09IG51bGwpCi0gICAgICByZXR1cm47Ci0gICAgaWYgKHRyYXZlcnNlT3V0cHV0MkVsZW1lbnQpCi0gICAgewotICAgICAgdHJhdmVyc2Uob2JqT3V0cHV0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCksIG9iak91dHB1dCwgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NPdXRwdXQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAodHJhdmVyc2VPdXRwdXQyTWVzc2FnZSkKLSAgICAgIHRyYXZlcnNlKG9iak91dHB1dC5nZXRNZXNzYWdlKCksIG9iak91dHB1dCwgY3R4KTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIGJpbmRpbmcgZmF1bHQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSAKLSAgICogc2V0dGluZ3MgaW4gdGhlIHRyYXZlcnNhbCBjb250ZXh0LgotICAgKiAKLSAgICogQHBhcmFtIG9iakJpbmRpbmdGYXVsdCAgYSBXU0RMIGJpbmRpbmcgZmF1bHQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJlbnQgICAgICAgICAgIHBhcmVudCBvZiB0aGUgV1NETCBiaW5kaW5nIGZhdWx0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gY3R4ICAgICAgICAgICAgICB0aGUgdHJhdmVyc2FsIGNvbnRleC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCB0cmF2ZXJzZSgKLSAgICBCaW5kaW5nRmF1bHQgb2JqQmluZGluZ0ZhdWx0LAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgY3R4LnJlc3VtZUJpbmRpbmdGYXVsdFByb2Nlc3NpbmcoKTsKLSAgICBjdHguc2V0QmluZGluZ0ZhdWx0KG9iakJpbmRpbmdGYXVsdCk7Ci0gICAgaWYgKHZpc2l0QmluZGluZ0ZhdWx0KQotICAgIHsKLSAgICAgIHZpc2l0b3IudmlzaXQob2JqQmluZGluZ0ZhdWx0LCBwYXJlbnQsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZ0ZhdWx0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKG9iakJpbmRpbmdGYXVsdCA9PSBudWxsKQotICAgICAgcmV0dXJuOwotICAgIGlmICh0cmF2ZXJzZUJpbmRpbmdGYXVsdDJFbGVtZW50KQotICAgIHsKLSAgICAgIHRyYXZlcnNlKG9iakJpbmRpbmdGYXVsdC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpLCBvYmpCaW5kaW5nRmF1bHQsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZ0ZhdWx0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHRyYXZlcnNlQmluZGluZ0ZhdWx0MlNPQVBGYXVsdAotICAgICAgJiYgb2JqQmluZGluZ0ZhdWx0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaXQgPSBvYmpCaW5kaW5nRmF1bHQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIE9iamVjdCBvID0gaXQubmV4dCgpOwotICAgICAgICBpZiAobyBpbnN0YW5jZW9mIFNPQVBGYXVsdCkKLSAgICAgICAgICB0cmF2ZXJzZSgoU09BUEZhdWx0KSBvLCBvYmpCaW5kaW5nRmF1bHQsIGN0eCk7Ci0gICAgICAgIGlmICghY3R4LnByb2Nlc3NCaW5kaW5nRmF1bHQoKSkKLSAgICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotICAgIGlmICh0cmF2ZXJzZUJpbmRpbmdGYXVsdDJFeHRlbnNpYmlsaXR5RWxlbWVudAotICAgICAgJiYgb2JqQmluZGluZ0ZhdWx0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaXQgPSBvYmpCaW5kaW5nRmF1bHQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIHRyYXZlcnNlKChFeHRlbnNpYmlsaXR5RWxlbWVudCkgaXQubmV4dCgpLCBvYmpCaW5kaW5nRmF1bHQsIGN0eCk7Ci0gICAgICAgIGlmICghY3R4LnByb2Nlc3NCaW5kaW5nRmF1bHQoKSkKLSAgICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgU09BUCBvcGVyYXRpb24gYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIAotICAgKiB0aGUgc2V0dGluZ3MgaW4gdGhlIHRyYXZlcnNhbCBjb250ZXh0LgotICAgKiAKLSAgICogQHBhcmFtIG9ialNPQVBPcGVyYXRpb24gIGEgV1NETCBTT0FQIG9wZXJhdGlvbiBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmVudCAgICAgICAgICAgIHBhcmVudCBvZiB0aGUgV1NETCBTT0FQIG9wZXJhdGlvbiBhcnRpZmFjdC4KLSAgICogQHBhcmFtIGN0eCAgICAgICAgICAgICAgIHRoZSB0cmF2ZXJzYWwgY29udGV4LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlKAotICAgIFNPQVBPcGVyYXRpb24gb2JqU09BUE9wZXJhdGlvbiwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGN0eC5zZXRTT0FQT3BlcmF0aW9uKG9ialNPQVBPcGVyYXRpb24pOwotICAgIGlmICh2aXNpdFNPQVBPcGVyYXRpb24pCi0gICAgICB2aXNpdG9yLnZpc2l0KG9ialNPQVBPcGVyYXRpb24sIHBhcmVudCwgY3R4KTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIGJpbmRpbmcgaW5wdXQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIAotICAgKiB0aGUgc2V0dGluZ3MgaW4gdGhlIHRyYXZlcnNhbCBjb250ZXh0LgotICAgKiAKLSAgICogQHBhcmFtIG9iakJpbmRpbmdJbnB1dCAgYSBXU0RMIGJpbmRpbmcgaW5wdXQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJlbnQgICAgICAgICAgIHBhcmVudCBvZiB0aGUgV1NETCBiaW5kaW5nIGlucHV0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gY3R4ICAgICAgICAgICAgICB0aGUgdHJhdmVyc2FsIGNvbnRleC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCB0cmF2ZXJzZSgKLSAgICBCaW5kaW5nSW5wdXQgb2JqQmluZGluZ0lucHV0LAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgY3R4LnJlc3VtZUJpbmRpbmdJbnB1dFByb2Nlc3NpbmcoKTsKLSAgICBjdHguc2V0QmluZGluZ0lucHV0KG9iakJpbmRpbmdJbnB1dCk7Ci0gICAgaWYgKHZpc2l0QmluZGluZ0lucHV0KQotICAgIHsKLSAgICAgIHZpc2l0b3IudmlzaXQob2JqQmluZGluZ0lucHV0LCBwYXJlbnQsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZ0lucHV0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKG9iakJpbmRpbmdJbnB1dCA9PSBudWxsKQotICAgICAgcmV0dXJuOwotICAgIGlmICh0cmF2ZXJzZUJpbmRpbmdJbnB1dDJFbGVtZW50KQotICAgIHsKLSAgICAgIHRyYXZlcnNlKG9iakJpbmRpbmdJbnB1dC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpLCBvYmpCaW5kaW5nSW5wdXQsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZ0lucHV0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCh0cmF2ZXJzZUJpbmRpbmdJbnB1dDJTT0FQQm9keSB8fCB0cmF2ZXJzZUJpbmRpbmdJbnB1dDJTT0FQSGVhZGVyKQotICAgICAgJiYgb2JqQmluZGluZ0lucHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaXQgPSBvYmpCaW5kaW5nSW5wdXQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIE9iamVjdCBvID0gaXQubmV4dCgpOwotICAgICAgICBpZiAodHJhdmVyc2VCaW5kaW5nSW5wdXQyU09BUEJvZHkgJiYgKG8gaW5zdGFuY2VvZiBTT0FQQm9keSkpCi0gICAgICAgICAgdHJhdmVyc2UoKFNPQVBCb2R5KSBvLCBvYmpCaW5kaW5nSW5wdXQsIGN0eCk7Ci0gICAgICAgIGVsc2UgaWYgKHRyYXZlcnNlQmluZGluZ0lucHV0MlNPQVBIZWFkZXIgJiYgKG8gaW5zdGFuY2VvZiBTT0FQSGVhZGVyKSkKLSAgICAgICAgICB0cmF2ZXJzZSgoU09BUEhlYWRlcikgbywgb2JqQmluZGluZ0lucHV0LCBjdHgpOwotICAgICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZ0lucHV0KCkpCi0gICAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgIH0KLSAgICBpZiAodHJhdmVyc2VCaW5kaW5nSW5wdXQyRXh0ZW5zaWJpbGl0eUVsZW1lbnQKLSAgICAgICYmIG9iakJpbmRpbmdJbnB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ID0gb2JqQmluZGluZ0lucHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICB0cmF2ZXJzZSgoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGl0Lm5leHQoKSwgb2JqQmluZGluZ0lucHV0LCBjdHgpOwotICAgICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZ0lucHV0KCkpCi0gICAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIGJpbmRpbmcgb3BlcmF0aW9uIGFydGlmYWN0IGFjY29yZGluZyB0byAKLSAgICogdGhlIHNldHRpbmdzIGluIHRoZSB0cmF2ZXJzYWwgY29udGV4dC4KLSAgICogCi0gICAqIEBwYXJhbSBvYmpCaW5kaW5nT3BlcmF0aW9uICBhIFdTREwgYmluZGluZyBvcGVyYXRpb24gYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJlbnQgICAgICAgICAgICAgICBwYXJlbnQgb2YgdGhlIFdTREwgYmluZGluZyBvcGVyYXRpb24gYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBjdHggICAgICAgICAgICAgICAgICB0aGUgdHJhdmVyc2FsIGNvbnRleC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCB0cmF2ZXJzZSgKLSAgICBCaW5kaW5nT3BlcmF0aW9uIG9iakJpbmRpbmdPcGVyYXRpb24sCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBjdHgucmVzdW1lQmluZGluZ09wZXJhdGlvblByb2Nlc3NpbmcoKTsKLSAgICBjdHguc2V0QmluZGluZ09wZXJhdGlvbihvYmpCaW5kaW5nT3BlcmF0aW9uKTsKLSAgICBpZiAodmlzaXRCaW5kaW5nT3BlcmF0aW9uKQotICAgIHsKLSAgICAgIHZpc2l0b3IudmlzaXQob2JqQmluZGluZ09wZXJhdGlvbiwgcGFyZW50LCBjdHgpOwotICAgICAgaWYgKCFjdHgucHJvY2Vzc0JpbmRpbmdPcGVyYXRpb24oKSkKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAob2JqQmluZGluZ09wZXJhdGlvbiA9PSBudWxsKQotICAgICAgcmV0dXJuOwotICAgIGlmICh0cmF2ZXJzZUJpbmRpbmdPcGVyYXRpb24yRWxlbWVudCkKLSAgICB7Ci0gICAgICB0cmF2ZXJzZSgKLSAgICAgICAgb2JqQmluZGluZ09wZXJhdGlvbi5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpLAotICAgICAgICBvYmpCaW5kaW5nT3BlcmF0aW9uLAotICAgICAgICBjdHgpOwotICAgICAgaWYgKCFjdHgucHJvY2Vzc0JpbmRpbmdPcGVyYXRpb24oKSkKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAodHJhdmVyc2VCaW5kaW5nT3BlcmF0aW9uMlNPQVBPcGVyYXRpb24KLSAgICAgICYmIG9iakJpbmRpbmdPcGVyYXRpb24uZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpdCA9IG9iakJpbmRpbmdPcGVyYXRpb24uZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIE9iamVjdCBvID0gaXQubmV4dCgpOwotICAgICAgICBpZiAobyBpbnN0YW5jZW9mIFNPQVBPcGVyYXRpb24pCi0gICAgICAgICAgdHJhdmVyc2UoKFNPQVBPcGVyYXRpb24pIG8sIG9iakJpbmRpbmdPcGVyYXRpb24sIGN0eCk7Ci0gICAgICAgIGlmICghY3R4LnByb2Nlc3NCaW5kaW5nT3BlcmF0aW9uKCkpCi0gICAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgIH0KLSAgICBpZiAodHJhdmVyc2VCaW5kaW5nT3BlcmF0aW9uMkV4dGVuc2liaWxpdHlFbGVtZW50Ci0gICAgICAmJiBvYmpCaW5kaW5nT3BlcmF0aW9uLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaXQgPSBvYmpCaW5kaW5nT3BlcmF0aW9uLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICB0cmF2ZXJzZSgoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGl0Lm5leHQoKSwgb2JqQmluZGluZ09wZXJhdGlvbiwgY3R4KTsKLSAgICAgICAgaWYgKCFjdHgucHJvY2Vzc0JpbmRpbmdPcGVyYXRpb24oKSkKLSAgICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotICAgIGlmICh0cmF2ZXJzZUJpbmRpbmdPcGVyYXRpb24yT3BlcmF0aW9uKQotICAgIHsKLSAgICAgIHRyYXZlcnNlKG9iakJpbmRpbmdPcGVyYXRpb24uZ2V0T3BlcmF0aW9uKCksIG9iakJpbmRpbmdPcGVyYXRpb24sIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZ09wZXJhdGlvbigpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICh0cmF2ZXJzZUJpbmRpbmdPcGVyYXRpb24yQmluZGluZ0lucHV0KQotICAgIHsKLSAgICAgIHRyYXZlcnNlKG9iakJpbmRpbmdPcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCksIG9iakJpbmRpbmdPcGVyYXRpb24sIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZ09wZXJhdGlvbigpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICh0cmF2ZXJzZUJpbmRpbmdPcGVyYXRpb24yQmluZGluZ091dHB1dCkKLSAgICB7Ci0gICAgICB0cmF2ZXJzZSgKLSAgICAgICAgb2JqQmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nT3V0cHV0KCksCi0gICAgICAgIG9iakJpbmRpbmdPcGVyYXRpb24sCi0gICAgICAgIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZ09wZXJhdGlvbigpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICh0cmF2ZXJzZUJpbmRpbmdPcGVyYXRpb24yQmluZGluZ0ZhdWx0Ci0gICAgICAmJiBvYmpCaW5kaW5nT3BlcmF0aW9uLmdldEJpbmRpbmdGYXVsdHMoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ID0gb2JqQmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nRmF1bHRzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIHRyYXZlcnNlKChCaW5kaW5nRmF1bHQpIGl0Lm5leHQoKSwgb2JqQmluZGluZ09wZXJhdGlvbiwgY3R4KTsKLSAgICAgICAgaWYgKCFjdHgucHJvY2Vzc0JpbmRpbmdPcGVyYXRpb24oKSkKLSAgICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgU09BUCBmYXVsdCBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIAotICAgKiBzZXR0aW5ncyBpbiB0aGUgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqIAotICAgKiBAcGFyYW0gb2JqU09BUEZhdWx0ICBhIFdTREwgU09BUCBmYXVsdCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmVudCAgICAgICAgcGFyZW50IG9mIHRoZSBXU0RMIFNPQVAgZmF1bHQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBjdHggICAgICAgICAgIHRoZSB0cmF2ZXJzYWwgY29udGV4LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlKAotICAgIFNPQVBGYXVsdCBvYmpTT0FQRmF1bHQsCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBjdHguc2V0U09BUEZhdWx0KG9ialNPQVBGYXVsdCk7Ci0gICAgaWYgKHZpc2l0U09BUEZhdWx0KQotICAgICAgdmlzaXRvci52aXNpdChvYmpTT0FQRmF1bHQsIHBhcmVudCwgY3R4KTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIGJpbmRpbmcgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncyBpbgotICAgKiB0aGUgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqIAotICAgKiBAcGFyYW0gb2JqQmluZGluZyAgYSBXU0RMIGJpbmRpbmcgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJlbnQgICAgICBwYXJlbnQgb2YgdGhlIFdTREwgYmluZGluZyBhcnRpZmFjdC4KLSAgICogQHBhcmFtIGN0eCAgICAgICAgIHRoZSB0cmF2ZXJzYWwgY29udGV4LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlKAotICAgIEJpbmRpbmcgb2JqQmluZGluZywKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGN0eC5yZXN1bWVCaW5kaW5nUHJvY2Vzc2luZygpOwotICAgIGN0eC5zZXRCaW5kaW5nKG9iakJpbmRpbmcpOwotICAgIGlmICh2aXNpdEJpbmRpbmcpCi0gICAgewotICAgICAgdmlzaXRvci52aXNpdChvYmpCaW5kaW5nLCBwYXJlbnQsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChvYmpCaW5kaW5nID09IG51bGwpCi0gICAgICByZXR1cm47Ci0gICAgaWYgKHRyYXZlcnNlQmluZGluZzJFbGVtZW50KQotICAgIHsKLSAgICAgIHRyYXZlcnNlKG9iakJpbmRpbmcuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSwgb2JqQmluZGluZywgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NCaW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHRyYXZlcnNlQmluZGluZzJTT0FQQmluZGluZwotICAgICAgJiYgb2JqQmluZGluZy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ID0gb2JqQmluZGluZy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgT2JqZWN0IG8gPSBpdC5uZXh0KCk7Ci0gICAgICAgIGlmIChvIGluc3RhbmNlb2YgU09BUEJpbmRpbmcpCi0gICAgICAgICAgdHJhdmVyc2UoKFNPQVBCaW5kaW5nKSBvLCBvYmpCaW5kaW5nLCBjdHgpOwotICAgICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZygpKQotICAgICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHRyYXZlcnNlQmluZGluZzJQb3J0VHlwZSkKLSAgICB7Ci0gICAgICB0cmF2ZXJzZShvYmpCaW5kaW5nLmdldFBvcnRUeXBlKCksIG9iakJpbmRpbmcsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICh0cmF2ZXJzZUJpbmRpbmcyQmluZGluZ09wZXJhdGlvbgotICAgICAgJiYgb2JqQmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9ucygpICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaXQgPSBvYmpCaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb25zKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIHRyYXZlcnNlKChCaW5kaW5nT3BlcmF0aW9uKSBpdC5uZXh0KCksIG9iakJpbmRpbmcsIGN0eCk7Ci0gICAgICAgIGlmICghY3R4LnByb2Nlc3NCaW5kaW5nKCkpCi0gICAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgIH0KLSAgICBpZiAodHJhdmVyc2VCaW5kaW5nMkV4dGVuc2liaWxpdHlFbGVtZW50Ci0gICAgICAmJiBvYmpCaW5kaW5nLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpICE9IG51bGwpCi0gICAgewotICAgICAgSXRlcmF0b3IgaXQgPSBvYmpCaW5kaW5nLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICB0cmF2ZXJzZSgoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGl0Lm5leHQoKSwgb2JqQmluZGluZywgY3R4KTsKLSAgICAgICAgaWYgKCFjdHgucHJvY2Vzc0JpbmRpbmcoKSkKLSAgICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgZmF1bHQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncyBpbgotICAgKiB0aGUgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqIAotICAgKiBAcGFyYW0gb2JqRmF1bHQgIGEgV1NETCBmYXVsdCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmVudCAgICBwYXJlbnQgb2YgdGhlIFdTREwgZmF1bHQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBjdHggICAgICAgdGhlIHRyYXZlcnNhbCBjb250ZXguCi0gICAqLwotICBwcml2YXRlIHZvaWQgdHJhdmVyc2UoCi0gICAgRmF1bHQgb2JqRmF1bHQsCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBjdHgucmVzdW1lRmF1bHRQcm9jZXNzaW5nKCk7Ci0gICAgY3R4LnNldEZhdWx0KG9iakZhdWx0KTsKLSAgICBpZiAodmlzaXRGYXVsdCkKLSAgICB7Ci0gICAgICB2aXNpdG9yLnZpc2l0KG9iakZhdWx0LCBwYXJlbnQsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzRmF1bHQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAob2JqRmF1bHQgPT0gbnVsbCkKLSAgICAgIHJldHVybjsKLSAgICBpZiAodHJhdmVyc2VGYXVsdDJFbGVtZW50KQotICAgIHsKLSAgICAgIHRyYXZlcnNlKG9iakZhdWx0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCksIG9iakZhdWx0LCBjdHgpOwotICAgICAgaWYgKCFjdHgucHJvY2Vzc0ZhdWx0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHRyYXZlcnNlRmF1bHQyTWVzc2FnZSkKLSAgICAgIHRyYXZlcnNlKG9iakZhdWx0LmdldE1lc3NhZ2UoKSwgb2JqRmF1bHQsIGN0eCk7Ci0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBzZXJ2aWNlIGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MgaW4KLSAgICogdGhlIHRyYXZlcnNhbCBjb250ZXh0LgotICAgKiAKLSAgICogQHBhcmFtIG9ialNlcnZpY2UgIGEgV1NETCBzZXJ2aWNlIGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyZW50ICAgICAgcGFyZW50IG9mIHRoZSBXU0RMIHNlcnZpY2UgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBjdHggICAgICAgICB0aGUgdHJhdmVyc2FsIGNvbnRleC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCB0cmF2ZXJzZSgKLSAgICBTZXJ2aWNlIG9ialNlcnZpY2UsCi0gICAgT2JqZWN0IHBhcmVudCwKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpCi0gIHsKLSAgICBjdHgucmVzdW1lU2VydmljZVByb2Nlc3NpbmcoKTsKLSAgICBjdHguc2V0U2VydmljZShvYmpTZXJ2aWNlKTsKLSAgICBpZiAodmlzaXRTZXJ2aWNlKQotICAgIHsKLSAgICAgIHZpc2l0b3IudmlzaXQob2JqU2VydmljZSwgcGFyZW50LCBjdHgpOwotICAgICAgaWYgKCFjdHgucHJvY2Vzc1NlcnZpY2UoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAob2JqU2VydmljZSA9PSBudWxsKQotICAgICAgcmV0dXJuOwotICAgIGlmICh0cmF2ZXJzZVNlcnZpY2UyRWxlbWVudCkKLSAgICB7Ci0gICAgICB0cmF2ZXJzZShvYmpTZXJ2aWNlLmdldERvY3VtZW50YXRpb25FbGVtZW50KCksIG9ialNlcnZpY2UsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzU2VydmljZSgpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICh0cmF2ZXJzZVNlcnZpY2UyRXh0ZW5zaWJpbGl0eUVsZW1lbnQKLSAgICAgICYmIG9ialNlcnZpY2UuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpdCA9IG9ialNlcnZpY2UuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIHRyYXZlcnNlKChFeHRlbnNpYmlsaXR5RWxlbWVudCkgaXQubmV4dCgpLCBvYmpTZXJ2aWNlLCBjdHgpOwotICAgICAgICBpZiAoIWN0eC5wcm9jZXNzU2VydmljZSgpKQotICAgICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHRyYXZlcnNlU2VydmljZTJQb3J0ICYmIG9ialNlcnZpY2UuZ2V0UG9ydHMoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ID0gb2JqU2VydmljZS5nZXRQb3J0cygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICB0cmF2ZXJzZSgoUG9ydCkgaXQubmV4dCgpLCBvYmpTZXJ2aWNlLCBjdHgpOwotICAgICAgICBpZiAoIWN0eC5wcm9jZXNzU2VydmljZSgpKQotICAgICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBpbXBvcnQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncyBpbgotICAgKiB0aGUgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqIAotICAgKiBAcGFyYW0gb2JqSW1wb3J0ICBhIFdTREwgaW1wb3J0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyZW50ICAgICBwYXJlbnQgb2YgdGhlIFdTREwgaW1wb3J0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gY3R4ICAgICAgICB0aGUgdHJhdmVyc2FsIGNvbnRleC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCB0cmF2ZXJzZSgKLSAgICBJbXBvcnQgb2JqSW1wb3J0LAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgY3R4LnJlc3VtZUltcG9ydFByb2Nlc3NpbmcoKTsKLSAgICBjdHguc2V0SW1wb3J0KG9iakltcG9ydCk7Ci0gICAgaWYgKHZpc2l0SW1wb3J0KQotICAgIHsKLSAgICAgIHZpc2l0b3IudmlzaXQob2JqSW1wb3J0LCBwYXJlbnQsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzSW1wb3J0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKG9iakltcG9ydCA9PSBudWxsKQotICAgICAgcmV0dXJuOwotICAgIGlmICh0cmF2ZXJzZUltcG9ydDJFbGVtZW50KQotICAgIHsKLSAgICAgIHRyYXZlcnNlKG9iakltcG9ydC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpLCBvYmpJbXBvcnQsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzSW1wb3J0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHRyYXZlcnNlSW1wb3J0MkRlZmluaXRpb24pCi0gICAgewotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG9iakltcG9ydC5nZXREZWZpbml0aW9uKCk7Ci0gICAgICAgIGlmICgoZGVmaW5pdGlvbiAhPSBudWxsKSAmJiAoIWFscmVhZHlUcmF2ZXJzZWREZWZpbml0aW9ucy5jb250YWlucyhkZWZpbml0aW9uKSkpCi0gICAgICAgIHsKLSAgICAgICAgICBhbHJlYWR5VHJhdmVyc2VkRGVmaW5pdGlvbnMuYWRkKGRlZmluaXRpb24pOwotICAgICAgICAgIHRyYXZlcnNlKG9iakltcG9ydC5nZXREZWZpbml0aW9uKCksIG9iakltcG9ydCwgY3R4KTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKXt9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgYmluZGluZyBvdXRwdXQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSAKLSAgICogc2V0dGluZ3MgaW4gdGhlIHRyYXZlcnNhbCBjb250ZXh0LgotICAgKiAKLSAgICogQHBhcmFtIG9iakJpbmRpbmdPdXRwdXQgIGEgV1NETCBiaW5kaW5nIG91dHB1dCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmVudCAgICAgICAgICAgIHBhcmVudCBvZiB0aGUgV1NETCBiaW5kaW5nIG91dHB1dCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIGN0eCAgICAgICAgICAgICAgIHRoZSB0cmF2ZXJzYWwgY29udGV4LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlKAotICAgIEJpbmRpbmdPdXRwdXQgb2JqQmluZGluZ091dHB1dCwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGN0eC5yZXN1bWVCaW5kaW5nT3V0cHV0UHJvY2Vzc2luZygpOwotICAgIGN0eC5zZXRCaW5kaW5nT3V0cHV0KG9iakJpbmRpbmdPdXRwdXQpOwotICAgIGlmICh2aXNpdEJpbmRpbmdPdXRwdXQpCi0gICAgewotICAgICAgdmlzaXRvci52aXNpdChvYmpCaW5kaW5nT3V0cHV0LCBwYXJlbnQsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZ091dHB1dCgpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChvYmpCaW5kaW5nT3V0cHV0ID09IG51bGwpCi0gICAgICByZXR1cm47Ci0gICAgaWYgKHRyYXZlcnNlQmluZGluZ091dHB1dDJFbGVtZW50KQotICAgIHsKLSAgICAgIHRyYXZlcnNlKAotICAgICAgICBvYmpCaW5kaW5nT3V0cHV0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCksCi0gICAgICAgIG9iakJpbmRpbmdPdXRwdXQsCi0gICAgICAgIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZ091dHB1dCgpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICgodHJhdmVyc2VCaW5kaW5nT3V0cHV0MlNPQVBCb2R5IHx8IHRyYXZlcnNlQmluZGluZ091dHB1dDJTT0FQSGVhZGVyKQotICAgICAgJiYgb2JqQmluZGluZ091dHB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ID0gb2JqQmluZGluZ091dHB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgT2JqZWN0IG8gPSBpdC5uZXh0KCk7Ci0gICAgICAgIGlmICh0cmF2ZXJzZUJpbmRpbmdPdXRwdXQyU09BUEJvZHkgJiYgKG8gaW5zdGFuY2VvZiBTT0FQQm9keSkpCi0gICAgICAgICAgdHJhdmVyc2UoKFNPQVBCb2R5KSBvLCBvYmpCaW5kaW5nT3V0cHV0LCBjdHgpOwotICAgICAgICBlbHNlIGlmICh0cmF2ZXJzZUJpbmRpbmdPdXRwdXQyU09BUEhlYWRlciAmJiAobyBpbnN0YW5jZW9mIFNPQVBIZWFkZXIpKQotICAgICAgICAgIHRyYXZlcnNlKChTT0FQSGVhZGVyKSBvLCBvYmpCaW5kaW5nT3V0cHV0LCBjdHgpOwotICAgICAgICBpZiAoIWN0eC5wcm9jZXNzQmluZGluZ091dHB1dCgpKQotICAgICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHRyYXZlcnNlQmluZGluZ091dHB1dDJFeHRlbnNpYmlsaXR5RWxlbWVudAotICAgICAgJiYgb2JqQmluZGluZ091dHB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ID0gb2JqQmluZGluZ091dHB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgdHJhdmVyc2UoKEV4dGVuc2liaWxpdHlFbGVtZW50KSBpdC5uZXh0KCksIG9iakJpbmRpbmdPdXRwdXQsIGN0eCk7Ci0gICAgICAgIGlmICghY3R4LnByb2Nlc3NCaW5kaW5nT3V0cHV0KCkpCi0gICAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIHBvcnQgdHlwZSBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzIGluCi0gICAqIHRoZSB0cmF2ZXJzYWwgY29udGV4dC4KLSAgICogCi0gICAqIEBwYXJhbSBvYmpQb3J0VHlwZSAgYSBXU0RMIHBvcnQgdHlwZSBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmVudCAgICAgICBwYXJlbnQgb2YgdGhlIFdTREwgcG9ydCB0eXBlLgotICAgKiBAcGFyYW0gY3R4ICAgICAgICAgIHRoZSB0cmF2ZXJzYWwgY29udGV4LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlKAotICAgIFBvcnRUeXBlIG9ialBvcnRUeXBlLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KQotICB7Ci0gICAgY3R4LnJlc3VtZVBvcnRUeXBlUHJvY2Vzc2luZygpOwotICAgIGN0eC5zZXRQb3J0VHlwZShvYmpQb3J0VHlwZSk7Ci0gICAgaWYgKHZpc2l0UG9ydFR5cGUpCi0gICAgewotICAgICAgdmlzaXRvci52aXNpdChvYmpQb3J0VHlwZSwgcGFyZW50LCBjdHgpOwotICAgICAgaWYgKCFjdHgucHJvY2Vzc1BvcnRUeXBlKCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKG9ialBvcnRUeXBlID09IG51bGwpCi0gICAgICByZXR1cm47Ci0gICAgaWYgKHRyYXZlcnNlUG9ydFR5cGUyRWxlbWVudCkKLSAgICB7Ci0gICAgICB0cmF2ZXJzZShvYmpQb3J0VHlwZS5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpLCBvYmpQb3J0VHlwZSwgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NQb3J0VHlwZSgpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICh0cmF2ZXJzZVBvcnRUeXBlMk9wZXJhdGlvbiAmJiBvYmpQb3J0VHlwZS5nZXRPcGVyYXRpb25zKCkgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpdCA9IG9ialBvcnRUeXBlLmdldE9wZXJhdGlvbnMoKS5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgdHJhdmVyc2UoKE9wZXJhdGlvbikgaXQubmV4dCgpLCBvYmpQb3J0VHlwZSwgY3R4KTsKLSAgICAgICAgaWYgKCFjdHgucHJvY2Vzc1BvcnRUeXBlKCkpCi0gICAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIG1lc3NhZ2UgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncyBpbgotICAgKiB0aGUgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqIAotICAgKiBAcGFyYW0gb2JqTWVzc2FnZSAgYSBXU0RMIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBwYXJlbnQgICAgICBwYXJlbnQgb2YgdGhlIFdTREwgbWVzc2FnZS4KLSAgICogQHBhcmFtIGN0eCAgICAgICAgIHRoZSB0cmF2ZXJzYWwgY29udGV4LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlKAotICAgIE1lc3NhZ2Ugb2JqTWVzc2FnZSwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCkKLSAgewotICAgIGN0eC5yZXN1bWVNZXNzYWdlUHJvY2Vzc2luZygpOwotICAgIGN0eC5zZXRNZXNzYWdlKG9iak1lc3NhZ2UpOwotICAgIGlmICh2aXNpdE1lc3NhZ2UpCi0gICAgewotICAgICAgdmlzaXRvci52aXNpdChvYmpNZXNzYWdlLCBwYXJlbnQsIGN0eCk7Ci0gICAgICBpZiAoIWN0eC5wcm9jZXNzTWVzc2FnZSgpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChvYmpNZXNzYWdlID09IG51bGwpCi0gICAgICByZXR1cm47Ci0gICAgaWYgKHRyYXZlcnNlTWVzc2FnZTJFbGVtZW50KQotICAgIHsKLSAgICAgIHRyYXZlcnNlKG9iak1lc3NhZ2UuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSwgb2JqTWVzc2FnZSwgY3R4KTsKLSAgICAgIGlmICghY3R4LnByb2Nlc3NNZXNzYWdlKCkpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHRyYXZlcnNlTWVzc2FnZTJQYXJ0ICYmIG9iak1lc3NhZ2UuZ2V0UGFydHMoKSAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ID0gb2JqTWVzc2FnZS5nZXRQYXJ0cygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICB0cmF2ZXJzZSgoUGFydCkgaXQubmV4dCgpLCBvYmpNZXNzYWdlLCBjdHgpOwotICAgICAgICBpZiAoIWN0eC5wcm9jZXNzTWVzc2FnZSgpKQotICAgICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBwYXJ0IGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICBhIFdTREwgcGFydCBhcnRpZmFjdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKFBhcnQgYSkKLSAgewotICAgIGFkanVzdCgpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKSk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgc2VydmljZSBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgYSBXU0RMIHNlcnZpY2UgYXJ0aWZhY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShTZXJ2aWNlIGEpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcykpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIHR5cGVzIGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhIFdTREwgdHlwZXMgYXJ0aWZhY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShUeXBlcyBhKQotICB7Ci0gICAgYWRqdXN0KCk7Ci0gICAgdHJhdmVyc2UoYSwgbnVsbCwgbmV3IFdTRExUcmF2ZXJzYWxDb250ZXh0KHRoaXMpKTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBvcGVyYXRpb24gYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgIGEgV1NETCBvcGVyYXRpb24gYXJ0aWZhY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShPcGVyYXRpb24gYSkKLSAgewotICAgIGFkanVzdCgpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKSk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgaW5wdXQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgIGEgV1NETCBpbnB1dCBhcnRpZmFjdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKElucHV0IGEpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcykpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIG91dHB1dCBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgYSBXU0RMIG91dHB1dCBhcnRpZmFjdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKE91dHB1dCBhKQotICB7Ci0gICAgYWRqdXN0KCk7Ci0gICAgdHJhdmVyc2UoYSwgbnVsbCwgbmV3IFdTRExUcmF2ZXJzYWxDb250ZXh0KHRoaXMpKTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBmYXVsdCBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgYSBXU0RMIGZhdWx0IGFydGlmYWN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoRmF1bHQgYSkKLSAgewotICAgIGFkanVzdCgpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKSk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgYmluZGluZyBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgYSBXU0RMIGJpbmRpbmcgYXJ0aWZhY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShCaW5kaW5nIGEpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcykpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIGJpbmRpbmcgb3BlcmF0aW9uIGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgCi0gICAqIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgYSBXU0RMIGJpbmRpbmcgb3BlcmF0aW9uIGFydGlmYWN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoQmluZGluZ09wZXJhdGlvbiBhKQotICB7Ci0gICAgYWRqdXN0KCk7Ci0gICAgdHJhdmVyc2UoYSwgbnVsbCwgbmV3IFdTRExUcmF2ZXJzYWxDb250ZXh0KHRoaXMpKTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBiaW5kaW5nIGlucHV0IGFydGlmYWN0IGFjY29yZGluZyB0byAKLSAgICogdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgYSBXU0RMIGJpbmRpbmcgaW5wdXQgYXJ0aWZhY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShCaW5kaW5nSW5wdXQgYSkKLSAgewotICAgIGFkanVzdCgpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKSk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgYmluZGluZyBvdXRwdXQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIAotICAgKiB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICBhIFdTREwgYmluZGluZyBvdXRwdXQgYXJ0aWZhY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShCaW5kaW5nT3V0cHV0IGEpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcykpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIGJpbmRpbmcgZmF1bHQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIAotICAgKiB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICAgYSBXU0RMIGJpbmRpbmcgZmF1bHQgYXJ0aWZhY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShCaW5kaW5nRmF1bHQgYSkKLSAgewotICAgIGFkanVzdCgpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKSk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgaW1wb3J0IGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICBhIFdTREwgaW1wb3J0IGFydGlmYWN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoSW1wb3J0IGEpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcykpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIGVsZW1lbnQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgIGEgV1NETCBlbGVtZW50IGFydGlmYWN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoRWxlbWVudCBhKQotICB7Ci0gICAgYWRqdXN0KCk7Ci0gICAgdHJhdmVyc2UoYSwgbnVsbCwgbmV3IFdTRExUcmF2ZXJzYWxDb250ZXh0KHRoaXMpKTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBtZXNzYWdlIGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICBhIFdTREwgbWVzc2FnZSBhcnRpZmFjdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKE1lc3NhZ2UgYSkKLSAgewotICAgIGFkanVzdCgpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKSk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgcG9ydCBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgYSBXU0RMIHBvcnQgYXJ0aWZhY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShQb3J0IGEpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcykpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIHBvcnQgdHlwZSBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgYSBXU0RMIHBvcnQgdHlwZSBhcnRpZmFjdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKFBvcnRUeXBlIGEpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcykpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIGRlZmluaXRpb24gYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgIGEgV1NETCBkZWZpbml0aW9uIGFydGlmYWN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoRGVmaW5pdGlvbiBhKQotICB7Ci0gICAgYWRqdXN0KCk7Ci0gICAgdHJhdmVyc2UoYSwgbnVsbCwgbmV3IFdTRExUcmF2ZXJzYWxDb250ZXh0KHRoaXMpKTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBleHRlbnNpYmlsaXR5IGVsbWVudCBhcnRpZmFjdCBhY2NvcmRpbmcgCi0gICAqIHRvIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgIGEgV1NETCBleHRlbnNpYmlsaXR5IGVsZW1lbnQgYXJ0aWZhY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShFeHRlbnNpYmlsaXR5RWxlbWVudCBhKQotICB7Ci0gICAgYWRqdXN0KCk7Ci0gICAgdHJhdmVyc2UoYSwgbnVsbCwgbmV3IFdTRExUcmF2ZXJzYWxDb250ZXh0KHRoaXMpKTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBTT0FQIGJpbmRpbmcgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIAotICAgKiB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICBhIFdTREwgU09BUCBiaW5kaW5nIGFydGlmYWN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoU09BUEJpbmRpbmcgYSkKLSAgewotICAgIGFkanVzdCgpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKSk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgU09BUCBib2R5IGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICBhIFdTREwgU09BUCBib2R5IGFydGlmYWN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoU09BUEJvZHkgYSkKLSAgewotICAgIGFkanVzdCgpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKSk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgU09BUCBoZWFkZXIgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgIGEgV1NETCBTT0FQIGhlYWRlciBhcnRpZmFjdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKFNPQVBIZWFkZXIgYSkKLSAgewotICAgIGFkanVzdCgpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKSk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgU09BUCBoZWFkZXIgZmF1bHQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIAotICAgKiB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICBhIFdTREwgU09BUCBoZWFkZXIgZmF1bHQgYXJ0aWZhY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShTT0FQSGVhZGVyRmF1bHQgYSkKLSAgewotICAgIGFkanVzdCgpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKSk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgU09BUCBmYXVsdCBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgYSBXU0RMIFNPQVAgZmF1bHQgYXJ0aWZhY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShTT0FQRmF1bHQgYSkKLSAgewotICAgIGFkanVzdCgpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKSk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgU09BUCBvcGVyYXRpb24gYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIAotICAgKiB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICBhIFdTREwgU09BUCBvcGVyYXRpb24gYXJ0aWZhY3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShTT0FQT3BlcmF0aW9uIGEpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcykpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgcGFydCBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgICAgICBhIFdTREwgcGFydCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmFtcyAgYSBNYXAgb2JqZWN0IHJlcHJlc2VudGluZyBzZXR0aW5ncy4gIAotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoUGFydCBhLCBNYXAgcGFyYW1zKQotICB7Ci0gICAgYWRqdXN0KCk7Ci0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4ID0gbmV3IFdTRExUcmF2ZXJzYWxDb250ZXh0KHRoaXMpOwotICAgIGlmIChwYXJhbXMgIT0gbnVsbCkKLSAgICAgIGN0eC5wYXJhbXMucHV0QWxsKHBhcmFtcyk7Ci0gICAgdHJhdmVyc2UoYSwgbnVsbCwgY3R4KTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBzZXJ2aWNlIGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICAgICAgIGEgV1NETCBzZXJ2aWNlIGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyYW1zICBhIE1hcCBvYmplY3QgcmVwcmVzZW50aW5nIHNldHRpbmdzLiAgCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShTZXJ2aWNlIGEsIE1hcCBwYXJhbXMpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHggPSBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcyk7Ci0gICAgaWYgKHBhcmFtcyAhPSBudWxsKQotICAgICAgY3R4LnBhcmFtcy5wdXRBbGwocGFyYW1zKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBjdHgpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIHR5cGVzIGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICAgICAgIGEgV1NETCB0eXBlcyBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmFtcyAgYSBNYXAgb2JqZWN0IHJlcHJlc2VudGluZyBzZXR0aW5ncy4gIAotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoVHlwZXMgYSwgTWFwIHBhcmFtcykKLSAgewotICAgIGFkanVzdCgpOwotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCA9IG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKTsKLSAgICBpZiAocGFyYW1zICE9IG51bGwpCi0gICAgICBjdHgucGFyYW1zLnB1dEFsbChwYXJhbXMpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIGN0eCk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgb3BlcmF0aW9uIGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICAgICAgIGEgV1NETCBvcGVyYXRpb24gYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJhbXMgIGEgTWFwIG9iamVjdCByZXByZXNlbnRpbmcgc2V0dGluZ3MuICAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKE9wZXJhdGlvbiBhLCBNYXAgcGFyYW1zKQotICB7Ci0gICAgYWRqdXN0KCk7Ci0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4ID0gbmV3IFdTRExUcmF2ZXJzYWxDb250ZXh0KHRoaXMpOwotICAgIGlmIChwYXJhbXMgIT0gbnVsbCkKLSAgICAgIGN0eC5wYXJhbXMucHV0QWxsKHBhcmFtcyk7Ci0gICAgdHJhdmVyc2UoYSwgbnVsbCwgY3R4KTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBpbnB1dCBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgICAgICBhIFdTREwgaW5wdXQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJhbXMgIGEgTWFwIG9iamVjdCByZXByZXNlbnRpbmcgc2V0dGluZ3MuICAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKElucHV0IGEsIE1hcCBwYXJhbXMpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHggPSBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcyk7Ci0gICAgaWYgKHBhcmFtcyAhPSBudWxsKQotICAgICAgY3R4LnBhcmFtcy5wdXRBbGwocGFyYW1zKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBjdHgpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIG91dHB1dCBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgICAgICBhIFdTREwgb3V0cHV0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyYW1zICBhIE1hcCBvYmplY3QgcmVwcmVzZW50aW5nIHNldHRpbmdzLiAgCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShPdXRwdXQgYSwgTWFwIHBhcmFtcykKLSAgewotICAgIGFkanVzdCgpOwotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCA9IG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKTsKLSAgICBpZiAocGFyYW1zICE9IG51bGwpCi0gICAgICBjdHgucGFyYW1zLnB1dEFsbChwYXJhbXMpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIGN0eCk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgZmF1bHQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgICAgICAgYSBXU0RMIGZhdWx0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyYW1zICBhIE1hcCBvYmplY3QgcmVwcmVzZW50aW5nIHNldHRpbmdzLiAgCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShGYXVsdCBhLCBNYXAgcGFyYW1zKQotICB7Ci0gICAgYWRqdXN0KCk7Ci0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4ID0gbmV3IFdTRExUcmF2ZXJzYWxDb250ZXh0KHRoaXMpOwotICAgIGlmIChwYXJhbXMgIT0gbnVsbCkKLSAgICAgIGN0eC5wYXJhbXMucHV0QWxsKHBhcmFtcyk7Ci0gICAgdHJhdmVyc2UoYSwgbnVsbCwgY3R4KTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBiaW5kaW5nIGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICAgICAgIGEgV1NETCBiaW5kaW5nIGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyYW1zICBhIE1hcCBvYmplY3QgcmVwcmVzZW50aW5nIHNldHRpbmdzLiAgCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShCaW5kaW5nIGEsIE1hcCBwYXJhbXMpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHggPSBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcyk7Ci0gICAgaWYgKHBhcmFtcyAhPSBudWxsKQotICAgICAgY3R4LnBhcmFtcy5wdXRBbGwocGFyYW1zKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBjdHgpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIGJpbmRpbmcgb3BlcmF0aW9uIGFydGlmYWN0IGFjY29yZGluZyAKLSAgICogdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgICAgICBhIFdTREwgYmluZGluZyBvcGVyYXRpb24gYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJhbXMgIGEgTWFwIG9iamVjdCByZXByZXNlbnRpbmcgc2V0dGluZ3MuICAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKEJpbmRpbmdPcGVyYXRpb24gYSwgTWFwIHBhcmFtcykKLSAgewotICAgIGFkanVzdCgpOwotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCA9IG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKTsKLSAgICBpZiAocGFyYW1zICE9IG51bGwpCi0gICAgICBjdHgucGFyYW1zLnB1dEFsbChwYXJhbXMpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIGN0eCk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgYmluZGluZyBpbnB1dCBhcnRpZmFjdCBhY2NvcmRpbmcgCi0gICAqIHRvIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgICAgICAgYSBXU0RMIGJpbmRpbmcgaW5wdXQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJhbXMgIGEgTWFwIG9iamVjdCByZXByZXNlbnRpbmcgc2V0dGluZ3MuICAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKEJpbmRpbmdJbnB1dCBhLCBNYXAgcGFyYW1zKQotICB7Ci0gICAgYWRqdXN0KCk7Ci0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4ID0gbmV3IFdTRExUcmF2ZXJzYWxDb250ZXh0KHRoaXMpOwotICAgIGlmIChwYXJhbXMgIT0gbnVsbCkKLSAgICAgIGN0eC5wYXJhbXMucHV0QWxsKHBhcmFtcyk7Ci0gICAgdHJhdmVyc2UoYSwgbnVsbCwgY3R4KTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBiaW5kaW5nIG91dHB1dCBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gCi0gICAqIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgICAgICAgYSBXU0RMIGJpbmRpbmcgb3V0cHV0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyYW1zICBhIE1hcCBvYmplY3QgcmVwcmVzZW50aW5nIHNldHRpbmdzLiAgCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShCaW5kaW5nT3V0cHV0IGEsIE1hcCBwYXJhbXMpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHggPSBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcyk7Ci0gICAgaWYgKHBhcmFtcyAhPSBudWxsKQotICAgICAgY3R4LnBhcmFtcy5wdXRBbGwocGFyYW1zKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBjdHgpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIGJpbmRpbmcgZmF1bHQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIAotICAgKiB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICAgICAgIGEgV1NETCBiaW5kaW5nIGZhdWx0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyYW1zICBhIE1hcCBvYmplY3QgcmVwcmVzZW50aW5nIHNldHRpbmdzLiAgIAotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoQmluZGluZ0ZhdWx0IGEsIE1hcCBwYXJhbXMpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHggPSBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcyk7Ci0gICAgaWYgKHBhcmFtcyAhPSBudWxsKQotICAgICAgY3R4LnBhcmFtcy5wdXRBbGwocGFyYW1zKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBjdHgpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIGltcG9ydCBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgICAgICBhIFdTREwgaW1wb3J0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyYW1zICBhIE1hcCBvYmplY3QgcmVwcmVzZW50aW5nIHNldHRpbmdzLiAgIAotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoSW1wb3J0IGEsIE1hcCBwYXJhbXMpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHggPSBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcyk7Ci0gICAgaWYgKHBhcmFtcyAhPSBudWxsKQotICAgICAgY3R4LnBhcmFtcy5wdXRBbGwocGFyYW1zKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBjdHgpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIGVsZW1lbnQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgICAgICAgYSBXU0RMIGVsZW1lbnQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJhbXMgIGEgTWFwIG9iamVjdCByZXByZXNlbnRpbmcgc2V0dGluZ3MuICAgCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShFbGVtZW50IGEsIE1hcCBwYXJhbXMpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHggPSBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcyk7Ci0gICAgaWYgKHBhcmFtcyAhPSBudWxsKQotICAgICAgY3R4LnBhcmFtcy5wdXRBbGwocGFyYW1zKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBjdHgpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIG1lc3NhZ2UgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgICAgICAgYSBXU0RMIG1lc3NhZ2UuCi0gICAqIEBwYXJhbSBwYXJhbXMgIGEgTWFwIG9iamVjdCByZXByZXNlbnRpbmcgc2V0dGluZ3MuICAgCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShNZXNzYWdlIGEsIE1hcCBwYXJhbXMpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHggPSBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcyk7Ci0gICAgaWYgKHBhcmFtcyAhPSBudWxsKQotICAgICAgY3R4LnBhcmFtcy5wdXRBbGwocGFyYW1zKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBjdHgpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIHBvcnQgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgICAgICAgYSBXU0RMIHBvcnQuCi0gICAqIEBwYXJhbSBwYXJhbXMgIGEgTWFwIG9iamVjdCByZXByZXNlbnRpbmcgc2V0dGluZ3MuICAgCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShQb3J0IGEsIE1hcCBwYXJhbXMpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHggPSBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcyk7Ci0gICAgaWYgKHBhcmFtcyAhPSBudWxsKQotICAgICAgY3R4LnBhcmFtcy5wdXRBbGwocGFyYW1zKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBjdHgpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIHBvcnQgdHlwZSBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgICAgICBhIFdTREwgcG9ydCB0eXBlIGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyYW1zICBhIE1hcCBvYmplY3QgcmVwcmVzZW50aW5nIHNldHRpbmdzLiAgIAotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoUG9ydFR5cGUgYSwgTWFwIHBhcmFtcykKLSAgewotICAgIGFkanVzdCgpOwotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCA9IG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKTsKLSAgICBpZiAocGFyYW1zICE9IG51bGwpCi0gICAgICBjdHgucGFyYW1zLnB1dEFsbChwYXJhbXMpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIGN0eCk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgZGVmaW5pdGlvbiBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgICAgICBhIFdTREwgZGVmaW5pdGlvbiBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmFtcyAgYSBNYXAgb2JqZWN0IHJlcHJlc2VudGluZyBzZXR0aW5ncy4gICAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKERlZmluaXRpb24gYSwgTWFwIHBhcmFtcykKLSAgewotICAgIGFkanVzdCgpOwotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCA9IG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKTsKLSAgICBpZiAocGFyYW1zICE9IG51bGwpCi0gICAgICBjdHgucGFyYW1zLnB1dEFsbChwYXJhbXMpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIGN0eCk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgZXh0ZW5zaWJpbGl0eSBlbGVtZW50IGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICAgICAgIGEgV1NETCBleHRlbnNpYmlsaXR5IGVsZW1lbnQgYXJ0aWZhY3QuCi0gICAqIEBwYXJhbSBwYXJhbXMgIGEgTWFwIG9iamVjdCByZXByZXNlbnRpbmcgc2V0dGluZ3MuICAgCi0gICAqLwotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZShFeHRlbnNpYmlsaXR5RWxlbWVudCBhLCBNYXAgcGFyYW1zKQotICB7Ci0gICAgYWRqdXN0KCk7Ci0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4ID0gbmV3IFdTRExUcmF2ZXJzYWxDb250ZXh0KHRoaXMpOwotICAgIGlmIChwYXJhbXMgIT0gbnVsbCkKLSAgICAgIGN0eC5wYXJhbXMucHV0QWxsKHBhcmFtcyk7Ci0gICAgdHJhdmVyc2UoYSwgbnVsbCwgY3R4KTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBTT0FQIGJpbmRpbmcgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgICAgICAgYSBXU0RMIFNPQVAgYmluZGluZyBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmFtcyAgYSBNYXAgb2JqZWN0IHJlcHJlc2VudGluZyBzZXR0aW5ncy4gICAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKFNPQVBCaW5kaW5nIGEsIE1hcCBwYXJhbXMpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHggPSBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcyk7Ci0gICAgaWYgKHBhcmFtcyAhPSBudWxsKQotICAgICAgY3R4LnBhcmFtcy5wdXRBbGwocGFyYW1zKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBjdHgpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIFNPQVAgYm9keSBhcnRpZmFjdCBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzLgotICAgKiBAcGFyYW0gYSAgICAgICBhIFdTREwgU09BUCBib2R5IGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyYW1zICBhIE1hcCBvYmplY3QgcmVwcmVzZW50aW5nIHNldHRpbmdzLiAgIAotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoU09BUEJvZHkgYSwgTWFwIHBhcmFtcykKLSAgewotICAgIGFkanVzdCgpOwotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCA9IG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKTsKLSAgICBpZiAocGFyYW1zICE9IG51bGwpCi0gICAgICBjdHgucGFyYW1zLnB1dEFsbChwYXJhbXMpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIGN0eCk7Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2QgdHJhdmVyc2VzIGdpdmVuIFdTREwgU09BUCBoZWFkZXIgYXJ0aWZhY3QgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncy4KLSAgICogQHBhcmFtIGEgICAgICAgYSBXU0RMIFNPQVAgaGVhZGVyIGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyYW1zICBhIE1hcCBvYmplY3QgcmVwcmVzZW50aW5nIHNldHRpbmdzLiAgIAotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoU09BUEhlYWRlciBhLCBNYXAgcGFyYW1zKQotICB7Ci0gICAgYWRqdXN0KCk7Ci0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4ID0gbmV3IFdTRExUcmF2ZXJzYWxDb250ZXh0KHRoaXMpOwotICAgIGlmIChwYXJhbXMgIT0gbnVsbCkKLSAgICAgIGN0eC5wYXJhbXMucHV0QWxsKHBhcmFtcyk7Ci0gICAgdHJhdmVyc2UoYSwgbnVsbCwgY3R4KTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBoZWFyZGVyIGZhdWx0IGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICAgICAgIGEgV1NETCBTT0FQIGhlYWRlciBmYXVsdCBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmFtcyAgYSBNYXAgb2JqZWN0IHJlcHJlc2VudGluZyBzZXR0aW5ncy4gICAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKFNPQVBIZWFkZXJGYXVsdCBhLCBNYXAgcGFyYW1zKQotICB7Ci0gICAgYWRqdXN0KCk7Ci0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4ID0gbmV3IFdTRExUcmF2ZXJzYWxDb250ZXh0KHRoaXMpOwotICAgIGlmIChwYXJhbXMgIT0gbnVsbCkKLSAgICAgIGN0eC5wYXJhbXMucHV0QWxsKHBhcmFtcyk7Ci0gICAgdHJhdmVyc2UoYSwgbnVsbCwgY3R4KTsKLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhvZCB0cmF2ZXJzZXMgZ2l2ZW4gV1NETCBTT0FQIGZhdWx0IGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICAgICAgIGEgV1NETCBTT0FQIGZhdWx0IGFydGlmYWN0LgotICAgKiBAcGFyYW0gcGFyYW1zICBhIE1hcCBvYmplY3QgcmVwcmVzZW50aW5nIHNldHRpbmdzLiAgIAotICAgKi8KLSAgcHVibGljIHZvaWQgdHJhdmVyc2UoU09BUEZhdWx0IGEsIE1hcCBwYXJhbXMpCi0gIHsKLSAgICBhZGp1c3QoKTsKLSAgICBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHggPSBuZXcgV1NETFRyYXZlcnNhbENvbnRleHQodGhpcyk7Ci0gICAgaWYgKHBhcmFtcyAhPSBudWxsKQotICAgICAgY3R4LnBhcmFtcy5wdXRBbGwocGFyYW1zKTsKLSAgICB0cmF2ZXJzZShhLCBudWxsLCBjdHgpOwotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBXU0RMIFNPQVAgb3BlcmF0aW9uIGFydGlmYWN0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MuCi0gICAqIEBwYXJhbSBhICAgICAgIGEgV1NETCBTT0FQIG9wZXJhdGlvbiBhcnRpZmFjdC4KLSAgICogQHBhcmFtIHBhcmFtcyAgYSBNYXAgb2JqZWN0IHJlcHJlc2VudGluZyBzZXR0aW5ncy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRyYXZlcnNlKFNPQVBPcGVyYXRpb24gYSwgTWFwIHBhcmFtcykKLSAgewotICAgIGFkanVzdCgpOwotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCA9IG5ldyBXU0RMVHJhdmVyc2FsQ29udGV4dCh0aGlzKTsKLSAgICBpZiAocGFyYW1zICE9IG51bGwpCi0gICAgICBjdHgucGFyYW1zLnB1dEFsbChwYXJhbXMpOwotICAgIHRyYXZlcnNlKGEsIG51bGwsIGN0eCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwvdHJhdmVyc2FsL1dTRExUcmF2ZXJzYWxDb250ZXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3RyYXZlcnNhbC9XU0RMVHJhdmVyc2FsQ29udGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDRkYmU3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwvdHJhdmVyc2FsL1dTRExUcmF2ZXJzYWxDb250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbDsKLQotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlRyZWVNYXA7Ci0KLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5GYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLkltcG9ydDsKLWltcG9ydCBqYXZheC53c2RsLklucHV0OwotaW1wb3J0IGphdmF4LndzZGwuTWVzc2FnZTsKLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLk91dHB1dDsKLWltcG9ydCBqYXZheC53c2RsLlBhcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgamF2YXgud3NkbC5TZXJ2aWNlOwotaW1wb3J0IGphdmF4LndzZGwuVHlwZXM7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQSGVhZGVyOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXJGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uOwotCi1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotLyoqCi0gKiBUaGUgY2xhc3MgcmVwcmVzZW50cyBydW50aW1lIGNvbnRleHQgZm9yIHRoZSB0cmF2ZXJzYWwgcHJvY2Vzcy4KLSAqIENvbnRleHQgc3RvcmVzIGFydGlmYWN0cyBiZWluZyBwcm9jZXNzZWQuCi0gKiAKLSAqIEBhdXRob3IgQW5kcmV5IEt1bGlrCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMVHJhdmVyc2FsQ29udGV4dAotewotICAvKioKLSAgICogRmxhZ3Mgd2hpY2ggaW5kaWNhdGUgd2hldGhlciBjb3JyZXNwb25kaW5nIFdTREwgZWxlbWVudCBzaG91bGQgYmUgcHJvY2Vzc2VkCi0gICAqIG9yIG5vdC4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBwcm9jZXNzUGFydCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiBwcm9jZXNzU2VydmljZSA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiBwcm9jZXNzVHlwZXMgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc09wZXJhdGlvbiA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiBwcm9jZXNzSW5wdXQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc091dHB1dCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiBwcm9jZXNzRmF1bHQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc0JpbmRpbmcgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc0JpbmRpbmdPcGVyYXRpb24gPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc0JpbmRpbmdJbnB1dCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiBwcm9jZXNzQmluZGluZ091dHB1dCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiBwcm9jZXNzQmluZGluZ0ZhdWx0ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHByb2Nlc3NJbXBvcnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc0VsZW1lbnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc1BvcnQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc1BvcnRUeXBlID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHByb2Nlc3NEZWZpbml0aW9uID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHByb2Nlc3NFeHRlbnNpYmlsaXR5RWxlbWVudCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiBwcm9jZXNzU09BUEJpbmRpbmcgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc1NPQVBIZWFkZXIgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc1NPQVBIZWFkZXJGYXVsdCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiBwcm9jZXNzU09BUEZhdWx0ID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHByb2Nlc3NTT0FQT3BlcmF0aW9uID0gdHJ1ZTsKLQotICAvKioKLSAgICogTGFzdCBwcm9jZXNzZWQgV1NETCBlbGVtZW50cy4gCi0gICAqLwotICBwcml2YXRlIFBhcnQgYWN0aXZlUGFydCA9IG51bGw7Ci0gIHByaXZhdGUgU2VydmljZSBhY3RpdmVTZXJ2aWNlID0gbnVsbDsKLSAgcHJpdmF0ZSBUeXBlcyBhY3RpdmVUeXBlcyA9IG51bGw7Ci0gIHByaXZhdGUgT3BlcmF0aW9uIGFjdGl2ZU9wZXJhdGlvbiA9IG51bGw7Ci0gIHByaXZhdGUgSW5wdXQgYWN0aXZlSW5wdXQgPSBudWxsOwotICBwcml2YXRlIE91dHB1dCBhY3RpdmVPdXRwdXQgPSBudWxsOwotICBwcml2YXRlIEZhdWx0IGFjdGl2ZUZhdWx0ID0gbnVsbDsKLSAgcHJpdmF0ZSBCaW5kaW5nIGFjdGl2ZUJpbmRpbmcgPSBudWxsOwotICBwcml2YXRlIEJpbmRpbmdPcGVyYXRpb24gYWN0aXZlQmluZGluZ09wZXJhdGlvbiA9IG51bGw7Ci0gIHByaXZhdGUgQmluZGluZ0lucHV0IGFjdGl2ZUJpbmRpbmdJbnB1dCA9IG51bGw7Ci0gIHByaXZhdGUgQmluZGluZ091dHB1dCBhY3RpdmVCaW5kaW5nT3V0cHV0ID0gbnVsbDsKLSAgcHJpdmF0ZSBCaW5kaW5nRmF1bHQgYWN0aXZlQmluZGluZ0ZhdWx0ID0gbnVsbDsKLSAgcHJpdmF0ZSBJbXBvcnQgYWN0aXZlSW1wb3J0ID0gbnVsbDsKLSAgcHJpdmF0ZSBFbGVtZW50IGFjdGl2ZUVsZW1lbnQgPSBudWxsOwotICBwcml2YXRlIE1lc3NhZ2UgYWN0aXZlTWVzc2FnZSA9IG51bGw7Ci0gIHByaXZhdGUgUG9ydCBhY3RpdmVQb3J0ID0gbnVsbDsKLSAgcHJpdmF0ZSBQb3J0VHlwZSBhY3RpdmVQb3J0VHlwZSA9IG51bGw7Ci0gIHByaXZhdGUgRGVmaW5pdGlvbiBhY3RpdmVEZWZpbml0aW9uID0gbnVsbDsKLSAgcHJpdmF0ZSBFeHRlbnNpYmlsaXR5RWxlbWVudCBhY3RpdmVFeHRlbnNpYmlsaXR5RWxlbWVudCA9IG51bGw7Ci0gIHByaXZhdGUgU09BUEJpbmRpbmcgYWN0aXZlU09BUEJpbmRpbmcgPSBudWxsOwotICBwcml2YXRlIFNPQVBCb2R5IGFjdGl2ZVNPQVBCb2R5ID0gbnVsbDsKLSAgcHJpdmF0ZSBTT0FQSGVhZGVyIGFjdGl2ZVNPQVBIZWFkZXIgPSBudWxsOwotICBwcml2YXRlIFNPQVBIZWFkZXJGYXVsdCBhY3RpdmVTT0FQSGVhZGVyRmF1bHQgPSBudWxsOwotICBwcml2YXRlIFNPQVBGYXVsdCBhY3RpdmVTT0FQRmF1bHQgPSBudWxsOwotICBwcml2YXRlIFNPQVBPcGVyYXRpb24gYWN0aXZlU09BUE9wZXJhdGlvbiA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFBhcmFtZXRlcnMgbWFwCi0gICAqLwotICBNYXAgcGFyYW1zID0gbmV3IFRyZWVNYXAoKTsKLQotICAvKioKLSAgICogQWN0aXZlIHRyYXZlcnNhbC4KLSAgICovCi0gIGZpbmFsIHByaXZhdGUgV1NETFRyYXZlcnNhbCB0cmF2ZXJzYWw7Ci0KLSAgLyoqCi0gICAqIFRoZSBkZWZhdWx0IGNvbnN0cnVjdG9yLgotICAgKiBAcGFyYW0gdHJhdmVyc2FsCi0gICAqLwotICBXU0RMVHJhdmVyc2FsQ29udGV4dChXU0RMVHJhdmVyc2FsIHRyYXZlcnNhbCkKLSAgewotICAgIHRoaXMudHJhdmVyc2FsID0gdHJhdmVyc2FsOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldHMgdGhlIGFjdGl2ZSB0cmF2ZXJzYWwuCi0gICAqIEByZXR1cm4gdGhhIGFjdGl2ZSB0cmF2ZXJzYWwuCi0gICAqLwotICBwdWJsaWMgV1NETFRyYXZlcnNhbCBnZXRUcmF2ZXJzYWwoKQotICB7Ci0gICAgcmV0dXJuIHRyYXZlcnNhbDsKLSAgfQotCi0gIC8qKgotICAgKiBHZXRzIHBhcmFtZXRlciBmcm9tIGNvbnRleHQgYnkgdGhlIGdpdmVuIGtleS4gCi0gICAqIEBwYXJhbSBrZXkgIGEga2V5IHZhbHVlLgotICAgKiBAcmV0dXJuIGEgcGFyYW1ldGVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGtleS4KLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZ2V0UGFyYW1ldGVyKE9iamVjdCBrZXkpCi0gIHsKLSAgICByZXR1cm4gcGFyYW1zLmdldChrZXkpOwotICB9Ci0KLSAgLyoqCi0gICAqIEFkZHMgcGFyYW1ldGVyIGludG8gY29udGV4dCB3aXRoIHRoZSBnaXZlbiBrZXkuCi0gICAqIEBwYXJhbSBrZXkgICAgdGhlIGtleS4KLSAgICogQHBhcmFtIHZhbHVlICB0aGUgdmFsdWUuCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRQYXJhbWV0ZXIoT2JqZWN0IGtleSwgT2JqZWN0IHZhbHVlKQotICB7Ci0gICAgcGFyYW1zLnB1dChrZXksIHZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZW1vdmVzIHRoZSBwYXJhbWV0ZXIgZnJvbSBjb250ZXh0IGJ5IHRoZSBnaXZlbiBrZXkuCi0gICAqIEBwYXJhbSBrZXkgIGEga2V5IHZhbHVlLgotICAgKi8KLSAgcHVibGljIHZvaWQgcmVtb3ZlUGFyYW1ldGVyKE9iamVjdCBrZXkpCi0gIHsKLSAgICBwYXJhbXMucmVtb3ZlKGtleSk7Ci0gIH0KLQotICAvKioKLSAgICogQ2FuY2VscyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgcGFydC4gCi0gICAqLwotICBwdWJsaWMgdm9pZCBjYW5jZWxQYXJ0UHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzUGFydCA9IGZhbHNlOwotICB9Ci0gIC8qKgotICAgKiBDYW5jZWxzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBzZXJ2aWNlLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIGNhbmNlbFNlcnZpY2VQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NTZXJ2aWNlID0gZmFsc2U7Ci0gIH0KLSAgLyoqCi0gICAqIENhbmNlbHMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIHR5cGVzLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIGNhbmNlbFR5cGVzUHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzVHlwZXMgPSBmYWxzZTsKLSAgfQotICAvKioKLSAgICogQ2FuY2VscyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgb3BlcmF0aW9uLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIGNhbmNlbE9wZXJhdGlvblByb2Nlc3NpbmcoKQotICB7Ci0gICAgcHJvY2Vzc09wZXJhdGlvbiA9IGZhbHNlOwotICB9Ci0gIC8qKgotICAgKiBDYW5jZWxzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBpbnB1dC4gCi0gICAqLwotICBwdWJsaWMgdm9pZCBjYW5jZWxJbnB1dFByb2Nlc3NpbmcoKQotICB7Ci0gICAgcHJvY2Vzc0lucHV0ID0gZmFsc2U7Ci0gIH0KLSAgLyoqCi0gICAqIENhbmNlbHMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIG91dHB1dC4gCi0gICAqLwotICBwdWJsaWMgdm9pZCBjYW5jZWxPdXRwdXRQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NPdXRwdXQgPSBmYWxzZTsKLSAgfQotICAvKioKLSAgICogQ2FuY2VscyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZmF1bHQuIAotICAgKi8KLSAgcHVibGljIHZvaWQgY2FuY2VsRmF1bHRQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NGYXVsdCA9IGZhbHNlOwotICB9Ci0gIC8qKgotICAgKiBDYW5jZWxzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBiaW5kaW5nLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIGNhbmNlbEJpbmRpbmdQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NCaW5kaW5nID0gZmFsc2U7Ci0gIH0KLSAgLyoqCi0gICAqIENhbmNlbHMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGJpbmRpbmcgb3BlcmF0aW9uLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIGNhbmNlbEJpbmRpbmdPcGVyYXRpb25Qcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NCaW5kaW5nT3BlcmF0aW9uID0gZmFsc2U7Ci0gIH0KLSAgLyoqCi0gICAqIENhbmNlbHMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGJpbmRpbmcgaW5wdXQuIAotICAgKi8KLSAgcHVibGljIHZvaWQgY2FuY2VsQmluZGluZ0lucHV0UHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzQmluZGluZ0lucHV0ID0gZmFsc2U7Ci0gIH0KLSAgLyoqCi0gICAqIENhbmNlbHMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGJpbmRpbmcgb3V0cHV0LiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIGNhbmNlbEJpbmRpbmdPdXRwdXRQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NCaW5kaW5nT3V0cHV0ID0gZmFsc2U7Ci0gIH0KLSAgLyoqCi0gICAqIENhbmNlbHMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGJpbmRpbmcgZmF1bHQuIAotICAgKi8KLSAgcHVibGljIHZvaWQgY2FuY2VsQmluZGluZ0ZhdWx0UHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzQmluZGluZ0ZhdWx0ID0gZmFsc2U7Ci0gIH0KLSAgLyoqCi0gICAqIENhbmNlbHMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGltcG9ydC4gCi0gICAqLwotICBwdWJsaWMgdm9pZCBjYW5jZWxJbXBvcnRQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NJbXBvcnQgPSBmYWxzZTsKLSAgfQotICAvKioKLSAgICogQ2FuY2VscyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZWxlbWVudC4gCi0gICAqLwotICBwdWJsaWMgdm9pZCBjYW5jZWxFbGVtZW50UHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzRWxlbWVudCA9IGZhbHNlOwotICB9Ci0gIC8qKgotICAgKiBDYW5jZWxzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBtZXNzYWdlLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIGNhbmNlbE1lc3NhZ2VQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NNZXNzYWdlID0gZmFsc2U7Ci0gIH0KLSAgLyoqCi0gICAqIENhbmNlbHMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIHBvcnQuIAotICAgKi8KLSAgcHVibGljIHZvaWQgY2FuY2VsUG9ydFByb2Nlc3NpbmcoKQotICB7Ci0gICAgcHJvY2Vzc1BvcnQgPSBmYWxzZTsKLSAgfQotICAvKioKLSAgICogQ2FuY2VscyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgcG9ydCB0eXBlLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIGNhbmNlbFBvcnRUeXBlUHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzUG9ydFR5cGUgPSBmYWxzZTsKLSAgfQotICAvKioKLSAgICogQ2FuY2VscyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZGVmaW5pdGlvbi4gCi0gICAqLwotICBwdWJsaWMgdm9pZCBjYW5jZWxEZWZpbml0aW9uUHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzRGVmaW5pdGlvbiA9IGZhbHNlOwotICB9Ci0gIC8qKgotICAgKiBDYW5jZWxzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBleHRlbnNpYmlsaXR5IGVsZW1lbnQuIAotICAgKi8KLSAgcHVibGljIHZvaWQgY2FuY2VsRXh0ZW5zaWJpbGl0eUVsZW1lbnRQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NFeHRlbnNpYmlsaXR5RWxlbWVudCA9IGZhbHNlOwotICB9Ci0gIC8qKgotICAgKiBDYW5jZWxzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBTT0FQIGJpbmRpbmcuIAotICAgKi8KLSAgcHVibGljIHZvaWQgY2FuY2VsU09BUEJpbmRpbmdQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NTT0FQQmluZGluZyA9IGZhbHNlOwotICB9Ci0gIC8qKgotICAgKiBDYW5jZWxzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBTT0FQIGhlYWRlci4gCi0gICAqLwotICBwdWJsaWMgdm9pZCBjYW5jZWxTT0FQSGVhZGVyUHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzU09BUEhlYWRlciA9IGZhbHNlOwotICB9Ci0gIC8qKgotICAgKiBDYW5jZWxzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBTT0FQIGhlYWRlciBmYXVsdC4gCi0gICAqLwotICBwdWJsaWMgdm9pZCBjYW5jZWxTT0FQSGVhZGVyRmF1bHRQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NTT0FQSGVhZGVyRmF1bHQgPSBmYWxzZTsKLSAgfQotICAvKioKLSAgICogQ2FuY2VscyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgU09BUCBmYXVsdC4gCi0gICAqLwotICBwdWJsaWMgdm9pZCBjYW5jZWxTT0FQRmF1bHRQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NTT0FQRmF1bHQgPSBmYWxzZTsKLSAgfQotICAvKioKLSAgICogQ2FuY2VscyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgb3BlcmF0aW9uLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIGNhbmNlbFNPQVBPcGVyYXRpb25Qcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NTT0FQT3BlcmF0aW9uID0gZmFsc2U7Ci0gIH0KLQotICAvKioKLSAgICogQ2FuY2VscyBXU0RMIGVsZW1lbnRzIHByb2Nlc3NpbmcuIAotICAgKi8KLSAgcHVibGljIHZvaWQgY2FuY2VsUHJvY2Vzc2luZygpCi0gIHsKLSAgICBjYW5jZWxQYXJ0UHJvY2Vzc2luZygpOwotICAgIGNhbmNlbFNlcnZpY2VQcm9jZXNzaW5nKCk7Ci0gICAgY2FuY2VsVHlwZXNQcm9jZXNzaW5nKCk7Ci0gICAgY2FuY2VsT3BlcmF0aW9uUHJvY2Vzc2luZygpOwotICAgIGNhbmNlbElucHV0UHJvY2Vzc2luZygpOwotICAgIGNhbmNlbE91dHB1dFByb2Nlc3NpbmcoKTsKLSAgICBjYW5jZWxGYXVsdFByb2Nlc3NpbmcoKTsKLSAgICBjYW5jZWxCaW5kaW5nUHJvY2Vzc2luZygpOwotICAgIGNhbmNlbEJpbmRpbmdPcGVyYXRpb25Qcm9jZXNzaW5nKCk7Ci0gICAgY2FuY2VsQmluZGluZ0lucHV0UHJvY2Vzc2luZygpOwotICAgIGNhbmNlbEJpbmRpbmdPdXRwdXRQcm9jZXNzaW5nKCk7Ci0gICAgY2FuY2VsQmluZGluZ0ZhdWx0UHJvY2Vzc2luZygpOwotICAgIGNhbmNlbEltcG9ydFByb2Nlc3NpbmcoKTsKLSAgICBjYW5jZWxFbGVtZW50UHJvY2Vzc2luZygpOwotICAgIGNhbmNlbE1lc3NhZ2VQcm9jZXNzaW5nKCk7Ci0gICAgY2FuY2VsUG9ydFByb2Nlc3NpbmcoKTsKLSAgICBjYW5jZWxQb3J0VHlwZVByb2Nlc3NpbmcoKTsKLSAgICBjYW5jZWxEZWZpbml0aW9uUHJvY2Vzc2luZygpOwotICAgIGNhbmNlbEV4dGVuc2liaWxpdHlFbGVtZW50UHJvY2Vzc2luZygpOwotICAgIGNhbmNlbFNPQVBCaW5kaW5nUHJvY2Vzc2luZygpOwotICAgIGNhbmNlbFNPQVBIZWFkZXJQcm9jZXNzaW5nKCk7Ci0gICAgY2FuY2VsU09BUEhlYWRlckZhdWx0UHJvY2Vzc2luZygpOwotICAgIGNhbmNlbFNPQVBGYXVsdFByb2Nlc3NpbmcoKTsKLSAgICBjYW5jZWxTT0FQT3BlcmF0aW9uUHJvY2Vzc2luZygpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlc3VtZXMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIHBhcnQuIAotICAgKi8KLSAgcHVibGljIHZvaWQgcmVzdW1lUGFydFByb2Nlc3NpbmcoKQotICB7Ci0gICAgcHJvY2Vzc1BhcnQgPSB0cnVlOwotICB9Ci0gIC8qKgotICAgKiBSZXN1bWVzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBzZXJ2aWNlLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc3VtZVNlcnZpY2VQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NTZXJ2aWNlID0gdHJ1ZTsKLSAgfQotICAvKioKLSAgICogUmVzdW1lcyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgdHlwZXMuIAotICAgKi8KLSAgcHVibGljIHZvaWQgcmVzdW1lVHlwZXNQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NUeXBlcyA9IHRydWU7Ci0gIH0KLSAgLyoqCi0gICAqIFJlc3VtZXMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIG9wZXJhdGlvbi4gCi0gICAqLwotICBwdWJsaWMgdm9pZCByZXN1bWVPcGVyYXRpb25Qcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NPcGVyYXRpb24gPSB0cnVlOwotICB9Ci0gIC8qKgotICAgKiBSZXN1bWVzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBpbnB1dC4gCi0gICAqLwotICBwdWJsaWMgdm9pZCByZXN1bWVJbnB1dFByb2Nlc3NpbmcoKQotICB7Ci0gICAgcHJvY2Vzc0lucHV0ID0gdHJ1ZTsKLSAgfQotICAvKioKLSAgICogUmVzdW1lcyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgb3V0cHV0LiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc3VtZU91dHB1dFByb2Nlc3NpbmcoKQotICB7Ci0gICAgcHJvY2Vzc091dHB1dCA9IHRydWU7Ci0gIH0KLSAgLyoqCi0gICAqIFJlc3VtZXMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGZhdWx0LiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc3VtZUZhdWx0UHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzRmF1bHQgPSB0cnVlOwotICB9Ci0gIC8qKgotICAgKiBSZXN1bWVzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBiaW5kaW5nLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc3VtZUJpbmRpbmdQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NCaW5kaW5nID0gdHJ1ZTsKLSAgfQotICAvKioKLSAgICogUmVzdW1lcyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgYmluZGluZyBvcGVyYXRpb24uIAotICAgKi8KLSAgcHVibGljIHZvaWQgcmVzdW1lQmluZGluZ09wZXJhdGlvblByb2Nlc3NpbmcoKQotICB7Ci0gICAgcHJvY2Vzc0JpbmRpbmdPcGVyYXRpb24gPSB0cnVlOwotICB9Ci0gIC8qKgotICAgKiBSZXN1bWVzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBiaW5kaW5nIGlucHV0LiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc3VtZUJpbmRpbmdJbnB1dFByb2Nlc3NpbmcoKQotICB7Ci0gICAgcHJvY2Vzc0JpbmRpbmdJbnB1dCA9IHRydWU7Ci0gIH0KLSAgLyoqCi0gICAqIFJlc3VtZXMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGJpbmRpbmcgb3V0cHV0LiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc3VtZUJpbmRpbmdPdXRwdXRQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NCaW5kaW5nT3V0cHV0ID0gdHJ1ZTsKLSAgfQotICAvKioKLSAgICogUmVzdW1lcyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgYmluZGluZyBmYXVsdC4gCi0gICAqLwotICBwdWJsaWMgdm9pZCByZXN1bWVCaW5kaW5nRmF1bHRQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NCaW5kaW5nRmF1bHQgPSB0cnVlOwotICB9Ci0gIC8qKgotICAgKiBSZXN1bWVzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBpbXBvcnQuIAotICAgKi8KLSAgcHVibGljIHZvaWQgcmVzdW1lSW1wb3J0UHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzSW1wb3J0ID0gdHJ1ZTsKLSAgfQotICAvKioKLSAgICogUmVzdW1lcyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZWxlbWVudC4gCi0gICAqLwotICBwdWJsaWMgdm9pZCByZXN1bWVFbGVtZW50UHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzRWxlbWVudCA9IHRydWU7Ci0gIH0KLSAgLyoqCi0gICAqIFJlc3VtZXMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIG1lc3NhZ2UuIAotICAgKi8KLSAgcHVibGljIHZvaWQgcmVzdW1lTWVzc2FnZVByb2Nlc3NpbmcoKQotICB7Ci0gICAgcHJvY2Vzc01lc3NhZ2UgPSB0cnVlOwotICB9Ci0gIC8qKgotICAgKiBSZXN1bWVzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBwb3J0LiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc3VtZVBvcnRQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NQb3J0ID0gdHJ1ZTsKLSAgfQotICAvKioKLSAgICogUmVzdW1lcyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgcG9ydCB0eXBlLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc3VtZVBvcnRUeXBlUHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzUG9ydFR5cGUgPSB0cnVlOwotICB9Ci0gIC8qKgotICAgKiBSZXN1bWVzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBkZWZpbml0aW9uLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc3VtZURlZmluaXRpb25Qcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NEZWZpbml0aW9uID0gdHJ1ZTsKLSAgfQotICAvKioKLSAgICogUmVzdW1lcyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZXh0ZW5zaWJpbGl0eSBlbGVtZW50LiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc3VtZUV4dGVuc2liaWxpdHlFbGVtZW50UHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzRXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSB0cnVlOwotICB9Ci0gIC8qKgotICAgKiBSZXN1bWVzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBTT0FQIGJpbmRpbmcuIAotICAgKi8KLSAgcHVibGljIHZvaWQgcmVzdW1lU09BUEJpbmRpbmdQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NTT0FQQmluZGluZyA9IHRydWU7Ci0gIH0KLSAgLyoqCi0gICAqIFJlc3VtZXMgcHJvY2Vzc2luZyBvZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIFNPQVAgaGVhZGVyLiAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc3VtZVNPQVBIZWFkZXJQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NTT0FQSGVhZGVyID0gdHJ1ZTsKLSAgfQotICAvKioKLSAgICogUmVzdW1lcyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgU09BUCBoZWFkZXIgZmF1bHQuIAotICAgKi8KLSAgcHVibGljIHZvaWQgcmVzdW1lU09BUEhlYWRlckZhdWx0UHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzU09BUEhlYWRlckZhdWx0ID0gdHJ1ZTsKLSAgfQotICAvKioKLSAgICogUmVzdW1lcyBwcm9jZXNzaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgU09BUCBmYXVsdC4gCi0gICAqLwotICBwdWJsaWMgdm9pZCByZXN1bWVTT0FQRmF1bHRQcm9jZXNzaW5nKCkKLSAgewotICAgIHByb2Nlc3NTT0FQRmF1bHQgPSB0cnVlOwotICB9Ci0gIC8qKgotICAgKiBSZXN1bWVzIHByb2Nlc3Npbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBTT0FQIG9wZXJhdGlvbi4gCi0gICAqLwotICBwdWJsaWMgdm9pZCByZXN1bWVTT0FQT3BlcmF0aW9uUHJvY2Vzc2luZygpCi0gIHsKLSAgICBwcm9jZXNzU09BUE9wZXJhdGlvbiA9IHRydWU7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgcGFydCBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBwYXJ0IHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzUGFydCgpCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc1BhcnQ7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgc2VydmljZSBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBzZXJ2aWNlIHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzU2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc1NlcnZpY2U7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgdHlwZXMgc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgdHlwZXMgc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIHByb2Nlc3NUeXBlcygpCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc1R5cGVzOwotICB9Ci0gIC8qKgotICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgY29ycmVzcG9uZGluZyBXU0RMIG9wZXJhdGlvbiBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBvcGVyYXRpb24gc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIHByb2Nlc3NPcGVyYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIHByb2Nlc3NPcGVyYXRpb247Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgaW5wdXQgc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgaW5wdXQgc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIHByb2Nlc3NJbnB1dCgpCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc0lucHV0OwotICB9Ci0gIC8qKgotICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgY29ycmVzcG9uZGluZyBXU0RMIG91dHB1dCBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBvdXRwdXQgc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIHByb2Nlc3NPdXRwdXQoKQotICB7Ci0gICAgcmV0dXJuIHByb2Nlc3NPdXRwdXQ7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZmF1bHQgc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZmF1bHQgc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIHByb2Nlc3NGYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc0ZhdWx0OwotICB9Ci0gIC8qKgotICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGJpbmRpbmcgc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgYmluZGluZyBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc0JpbmRpbmcoKQotICB7Ci0gICAgcmV0dXJuIHByb2Nlc3NCaW5kaW5nOwotICB9Ci0gIC8qKgotICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGJpbmRpbmcgb3BlcmF0aW9uIHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGJpbmRpbmcgb3BlcmF0aW9uIHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzQmluZGluZ09wZXJhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc0JpbmRpbmdPcGVyYXRpb247Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgYmluZGluZyBpbnB1dCBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBiaW5kaW5nIGlucHV0IHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzQmluZGluZ0lucHV0KCkKLSAgewotICAgIHJldHVybiBwcm9jZXNzQmluZGluZ0lucHV0OwotICB9Ci0gIC8qKgotICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGJpbmRpbmcgb3V0cHV0IHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGJpbmRpbmcgb3V0cHV0IHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzQmluZGluZ091dHB1dCgpCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc0JpbmRpbmdPdXRwdXQ7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgYmluZGluZyBmYXVsdCBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBiaW5kaW5nIGZhdWx0IHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzQmluZGluZ0ZhdWx0KCkKLSAgewotICAgIHJldHVybiBwcm9jZXNzQmluZGluZ0ZhdWx0OwotICB9Ci0gIC8qKgotICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGltcG9ydCBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBpbXBvcnQgc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIHByb2Nlc3NJbXBvcnQoKQotICB7Ci0gICAgcmV0dXJuIHByb2Nlc3NJbXBvcnQ7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZWxlbWVudCBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBlbGVtZW50IHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzRWxlbWVudCgpCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc0VsZW1lbnQ7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgbWVzc2FnZSBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBtZXNzYWdlIHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZSgpCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc01lc3NhZ2U7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgcG9ydCBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBwb3J0IHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzUG9ydCgpCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc1BvcnQ7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgcG9ydCB0eXBlIHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIHBvcnQgdHlwZSBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc1BvcnRUeXBlKCkKLSAgewotICAgIHJldHVybiBwcm9jZXNzUG9ydFR5cGU7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZGVmaW5pdGlvbiBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBkZWZpbml0aW9uIHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzRGVmaW5pdGlvbigpCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc0RlZmluaXRpb247Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgZXh0ZW5zaWJpbGl0eSBlbGVtZW50IHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIGV4dGVuc2liaWxpdHkgZWxlbWVudCBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc0V4dGVuc2liaWxpdHlFbGVtZW50KCkKLSAgewotICAgIHJldHVybiBwcm9jZXNzRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgU09BUCBiaW5kaW5nIHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIFNPQVAgYmluZGluZyBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc1NPQVBCaW5kaW5nKCkKLSAgewotICAgIHJldHVybiBwcm9jZXNzU09BUEJpbmRpbmc7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgU09BUCBoZWFkZXIgc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgU09BUCBoZWFkZXIgc2hvdWxkIGJlIHByb2Nlc3NlZC5uCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzU09BUEhlYWRlcigpCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc1NPQVBIZWFkZXI7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgU09BUCBoZWFkZXIgZmF1bHQgc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgU09BIGhlYWRlciBmYXVsdCBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc1NPQVBIZWFkZXJGYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gcHJvY2Vzc1NPQVBIZWFkZXJGYXVsdDsKLSAgfQotICAvKioKLSAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNvcnJlc3BvbmRpbmcgV1NETCBTT0FQIGZhdWx0IHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIFNPQVAgZmF1bHQgc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIHByb2Nlc3NTT0FQRmF1bHQoKQotICB7Ci0gICAgcmV0dXJuIHByb2Nlc3NTT0FQRmF1bHQ7Ci0gIH0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFdTREwgb3BlcmF0aW9uIHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgY29ycmVzcG9uZGluZyBXU0RMIG9wZXJhdGlvbiBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc1NPQVBPcGVyYXRpb24oKQotICB7Ci0gICAgcmV0dXJuIHByb2Nlc3NTT0FQT3BlcmF0aW9uOwotICB9Ci0gIC8qKgotICAgKiBTZXRzIFdTREwgcGFydCB0byBiZSBwcm9jZXNzZWQuCi0gICAqIEBwYXJhbSB2YWx1ZSAgdGhlIFdTREwgcGFydCB0byBiZSBwcm9jZXNzZWQuCi0gICAqLwotICB2b2lkIHNldFBhcnQoUGFydCB2YWx1ZSkKLSAgewotICAgIGFjdGl2ZVBhcnQgPSB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogR2V0cyBsYXN0IHByb2Nlc3NlZCBXU0RMIHBhcnQuCi0gICAqIEByZXR1cm4gdGhlIGxhc3QgcHJvY2Vzc2VkIFdTREwgcGFydC4KLSAgICovCi0gIHB1YmxpYyBQYXJ0IGdldFBhcnQoKQotICB7Ci0gICAgcmV0dXJuIGFjdGl2ZVBhcnQ7Ci0gIH0KLSAgLyoqCi0gICAqIFNldHMgV1NETCBzZXJ2aWNlIHRvIGJlIHByb2Nlc3NlZC4KLSAgICogQHBhcmFtIHZhbHVlICB0aGUgV1NETCBzZXJ2aWNlIHRvIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHZvaWQgc2V0U2VydmljZShTZXJ2aWNlIHZhbHVlKQotICB7Ci0gICAgYWN0aXZlU2VydmljZSA9IHZhbHVlOwotICB9Ci0gIC8qKgotICAgKiBHZXRzIGxhc3QgcHJvY2Vzc2VkIFdTREwgc2VydmljZS4KLSAgICogQHJldHVybiB0aGUgbGFzdCBwcm9jZXNzZWQgV1NETCBzZXJ2aWNlLgotICAgKi8KLSAgcHVibGljIFNlcnZpY2UgZ2V0U2VydmljZSgpCi0gIHsKLSAgICByZXR1cm4gYWN0aXZlU2VydmljZTsKLSAgfQotICAvKioKLSAgICogU2V0cyBXU0RMIHR5cGVzIHRvIGJlIHByb2Nlc3NlZC4KLSAgICogQHBhcmFtIHZhbHVlICB0aGUgV1NETCB0eXBlcyB0byBiZSBwcm9jZXNzZWQuCi0gICAqLwotICB2b2lkIHNldFR5cGVzKFR5cGVzIHZhbHVlKQotICB7Ci0gICAgYWN0aXZlVHlwZXMgPSB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogR2V0cyBsYXN0IHByb2Nlc3NlZCBXU0RMIHR5cGVzLgotICAgKiBAcmV0dXJuIHRoZSBsYXN0IHByb2Nlc3NlZCBXU0RMIHR5cGVzLgotICAgKi8KLSAgcHVibGljIFR5cGVzIGdldFR5cGVzKCkKLSAgewotICAgIHJldHVybiBhY3RpdmVUeXBlczsKLSAgfQotICAvKioKLSAgICogU2V0cyBXU0RMIG9wZXJhdGlvbiB0byBiZSBwcm9jZXNzZWQuCi0gICAqIEBwYXJhbSB2YWx1ZSAgdGhlIFdTREwgb3BlcmF0aW9uIHRvIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHZvaWQgc2V0T3BlcmF0aW9uKE9wZXJhdGlvbiB2YWx1ZSkKLSAgewotICAgIGFjdGl2ZU9wZXJhdGlvbiA9IHZhbHVlOwotICB9Ci0gIC8qKgotICAgKiBHZXRzIGxhc3QgcHJvY2Vzc2VkIFdTREwgb3BlcmF0aW9uLgotICAgKiBAcmV0dXJuIHRoZSBsYXN0IHByb2Nlc3NlZCBXU0RMIG9wZXJhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBPcGVyYXRpb24gZ2V0T3BlcmF0aW9uKCkKLSAgewotICAgIHJldHVybiBhY3RpdmVPcGVyYXRpb247Ci0gIH0KLSAgLyoqCi0gICAqIFNldHMgV1NETCBpbnB1dCB0byBiZSBwcm9jZXNzZWQKLSAgICogQHBhcmFtIHRoZSBXU0RMIGlucHV0IHRvIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHZvaWQgc2V0SW5wdXQoSW5wdXQgdmFsdWUpCi0gIHsKLSAgICBhY3RpdmVJbnB1dCA9IHZhbHVlOwotICB9Ci0gIC8qKgotICAgKiBHZXRzIGxhc3QgcHJvY2Vzc2VkIFdTREwgaW5wdXQuCi0gICAqIEByZXR1cm4gbGFzdCBwcm9jZXNzZWQgV1NETCBpbnB1dC4KLSAgICovCi0gIHB1YmxpYyBJbnB1dCBnZXRJbnB1dCgpCi0gIHsKLSAgICByZXR1cm4gYWN0aXZlSW5wdXQ7Ci0gIH0KLSAgLyoqCi0gICAqIFNldHMgV1NETCBvdXRwdXQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKiBAcGFyYW0gdmFsdWUgIHRoZSBXU0RMIG91dHB1dCB0byBiZSBwcm9jZXNzZWQuCi0gICAqLwotICB2b2lkIHNldE91dHB1dChPdXRwdXQgdmFsdWUpCi0gIHsKLSAgICBhY3RpdmVPdXRwdXQgPSB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogR2V0cyBsYXN0IHByb2Nlc3NlZCBXU0RMIG91dHB1dC4KLSAgICogQHJldHVybiB0aGUgbGFzdCBwcm9jZXNzZWQgV1NETCBvdXRwdXQuCi0gICAqLwotICBwdWJsaWMgT3V0cHV0IGdldE91dHB1dCgpCi0gIHsKLSAgICByZXR1cm4gYWN0aXZlT3V0cHV0OwotICB9Ci0gIC8qKgotICAgKiBTZXRzIFdTREwgZmF1bHQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKiBAcGFyYW0gdmFsdWUgIHRoZSBXU0RMIGZhdWx0IHRvIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHZvaWQgc2V0RmF1bHQoRmF1bHQgdmFsdWUpCi0gIHsKLSAgICBhY3RpdmVGYXVsdCA9IHZhbHVlOwotICB9Ci0gIC8qKgotICAgKiBHZXRzIGxhc3QgcHJvY2Vzc2VkIFdTREwgZmF1bHQuCi0gICAqIEByZXR1cm4gdGhlIGxhc3QgcHJvY2Vzc2VkIFdTREwgZmF1bHQuCi0gICAqLwotICBwdWJsaWMgRmF1bHQgZ2V0RmF1bHQoKQotICB7Ci0gICAgcmV0dXJuIGFjdGl2ZUZhdWx0OwotICB9Ci0gIC8qKgotICAgKiBTZXRzIFdTREwgYmluZGluZyB0byBiZSBwcm9jZXNzZWQuCi0gICAqIEBwYXJhbSB2YWx1ZSAgdGhlIFdTREwgYmluZGluZyB0byBiZSBwcm9jZXNzZWQuCi0gICAqLwotICB2b2lkIHNldEJpbmRpbmcoQmluZGluZyB2YWx1ZSkKLSAgewotICAgIGFjdGl2ZUJpbmRpbmcgPSB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogR2V0cyBsYXN0IHByb2Nlc3NlZCBXU0RMIGJpbmRpbmcuCi0gICAqIEByZXR1cm4gdGhlIGxhc3QgcHJvY2Vzc2VkIFdTREwgYmluZGluZy4KLSAgICovCi0gIHB1YmxpYyBCaW5kaW5nIGdldEJpbmRpbmcoKQotICB7Ci0gICAgcmV0dXJuIGFjdGl2ZUJpbmRpbmc7Ci0gIH0KLSAgLyoqCi0gICAqIFNldHMgV1NETCBiaW5kaW5nIG9wZXJhdGlvbiB0byBiZSBwcm9jZXNzZWQuCi0gICAqIEBwYXJhbSB2YWx1ZSAgdGhlIFNETCBiaW5kaW5nIG9wZXJhdGlvbiB0byBiZSBwcm9jZXNzZWQuCi0gICAqLwotICB2b2lkIHNldEJpbmRpbmdPcGVyYXRpb24oQmluZGluZ09wZXJhdGlvbiB2YWx1ZSkKLSAgewotICAgIGFjdGl2ZUJpbmRpbmdPcGVyYXRpb24gPSB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogR2V0cyBsYXN0IHByb2Nlc3NlZCBXU0RMIGJpbmRpbmcgb3BlcmF0aW9uLgotICAgKiBAcmV0dXJuIHRoZSBsYXN0IHByb2Nlc3NlZCBXU0RMIGJpbmRpbmcgb3BlcmF0aW9uLgotICAgKi8KLSAgcHVibGljIEJpbmRpbmdPcGVyYXRpb24gZ2V0QmluZGluZ09wZXJhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gYWN0aXZlQmluZGluZ09wZXJhdGlvbjsKLSAgfQotICAvKioKLSAgICogU2V0cyBXU0RMIGJpbmRpbmcgaW5wdXQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKiBAcGFyYW0gdmFsdWUgIHRoZSBXU0RMIGJpbmRpbmcgaW5wdXQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKi8KLSAgdm9pZCBzZXRCaW5kaW5nSW5wdXQoQmluZGluZ0lucHV0IHZhbHVlKQotICB7Ci0gICAgYWN0aXZlQmluZGluZ0lucHV0ID0gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIEdldHMgbGFzdCBwcm9jZXNzZWQgV1NETCBiaW5kaW5nIGlucHV0LgotICAgKiBAcmV0dXJuIHRoZSBsYXN0IHByb2Nlc3NlZCBXU0RMIGJpbmRpbmcgaW5wdXQuCi0gICAqLwotICBwdWJsaWMgQmluZGluZ0lucHV0IGdldEJpbmRpbmdJbnB1dCgpCi0gIHsKLSAgICByZXR1cm4gYWN0aXZlQmluZGluZ0lucHV0OwotICB9Ci0gIC8qKgotICAgKiBTZXRzIFdTREwgYmluZGluZyBvdXRwdXQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKiBAcGFyYW0gdmFsdWUgIHRoZSBXU0RMIGJpbmRpbmcgb3V0cHV0IHRvIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHZvaWQgc2V0QmluZGluZ091dHB1dChCaW5kaW5nT3V0cHV0IHZhbHVlKQotICB7Ci0gICAgYWN0aXZlQmluZGluZ091dHB1dCA9IHZhbHVlOwotICB9Ci0gIC8qKgotICAgKiBHZXRzIGxhc3QgcHJvY2Vzc2VkIFdTREwgYmluZGluZyBvdXRwdXQuCi0gICAqIEByZXR1cm4gdGhlIGxhc3QgcHJvY2Vzc2VkIFdTREwgYmluZGluZyBvdXRwdXQuCi0gICAqLwotICBwdWJsaWMgQmluZGluZ091dHB1dCBnZXRCaW5kaW5nT3V0cHV0KCkKLSAgewotICAgIHJldHVybiBhY3RpdmVCaW5kaW5nT3V0cHV0OwotICB9Ci0gIC8qKgotICAgKiBTZXRzIFdTREwgYmluZGluZyBmYXVsdCB0byBiZSBwcm9jZXNzZWQuCi0gICAqIEBwYXJhbSB2YWx1ZSAgdGhlIFdTREwgYmluZGluZyBmYXVsdCB0byBiZSBwcm9jZXNzZWQuCi0gICAqLwotICB2b2lkIHNldEJpbmRpbmdGYXVsdChCaW5kaW5nRmF1bHQgdmFsdWUpCi0gIHsKLSAgICBhY3RpdmVCaW5kaW5nRmF1bHQgPSB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogR2V0cyBsYXN0IHByb2Nlc3NlZCBXU0RMIGJpbmRpbmcgZmF1bHQuCi0gICAqIEByZXR1cm4gdGhlIGxhc3QgcHJvY2Vzc2VkIFdTREwgYmluZGluZyBmYXVsdC4KLSAgICovCi0gIHB1YmxpYyBCaW5kaW5nRmF1bHQgZ2V0QmluZGluZ0ZhdWx0KCkKLSAgewotICAgIHJldHVybiBhY3RpdmVCaW5kaW5nRmF1bHQ7Ci0gIH0KLSAgLyoqCi0gICAqIFNldHMgV1NETCBpbXBvcnQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKiBAcGFyYW0gdmFsdWUgIHRoZSBXU0RMIGltcG9ydCB0byBiZSBwcm9jZXNzZWQuCi0gICAqLwotICB2b2lkIHNldEltcG9ydChJbXBvcnQgdmFsdWUpCi0gIHsKLSAgICBhY3RpdmVJbXBvcnQgPSB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogR2V0cyBsYXN0IHByb2Nlc3NlZCBXU0RMIGltcG9ydC4KLSAgICogQHJldHVybiB0aGUgbGFzdCBwcm9jZXNzZWQgV1NETCBpbXBvcnQuCi0gICAqLwotICBwdWJsaWMgSW1wb3J0IGdldEltcG9ydCgpCi0gIHsKLSAgICByZXR1cm4gYWN0aXZlSW1wb3J0OwotICB9Ci0gIC8qKgotICAgKiBTZXRzIFdTREwgZWxlbWVudCB0byBiZSBwcm9jZXNzZWQuCi0gICAqIEBwYXJhbSB2YWx1ZSAgdGhlIFdTREwgZWxlbWVudCB0byBiZSBwcm9jZXNzZWQuCi0gICAqLwotICB2b2lkIHNldEVsZW1lbnQoRWxlbWVudCB2YWx1ZSkKLSAgewotICAgIGFjdGl2ZUVsZW1lbnQgPSB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogR2V0cyBsYXN0IHByb2Nlc3NlZCBXU0RMIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gdGhlIGxhc3QgcHJvY2Vzc2VkIFdTREwgZWxlbWVudC4KLSAgICovCi0gIHB1YmxpYyBFbGVtZW50IGdldEVsZW1lbnQoKQotICB7Ci0gICAgcmV0dXJuIGFjdGl2ZUVsZW1lbnQ7Ci0gIH0KLSAgLyoqCi0gICAqIFNldHMgV1NETCBtZXNzYWdlIHRvIGJlIHByb2Nlc3NlZC4KLSAgICogQHBhcmFtIHZhbHVlICB0aGUgV1NETCBtZXNzYWdlIHRvIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHZvaWQgc2V0TWVzc2FnZShNZXNzYWdlIHZhbHVlKQotICB7Ci0gICAgYWN0aXZlTWVzc2FnZSA9IHZhbHVlOwotICB9Ci0gIC8qKgotICAgKiBHZXRzIGxhc3QgcHJvY2Vzc2VkIFdTREwgbWVzc2FnZS4KLSAgICogQHJldHVybiB0aGUgbGFzdCBwcm9jZXNzZWQgV1NETCBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIE1lc3NhZ2UgZ2V0TWVzc2FnZSgpCi0gIHsKLSAgICByZXR1cm4gYWN0aXZlTWVzc2FnZTsKLSAgfQotICAvKioKLSAgICogU2V0cyBXU0RMIHBvcnQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKiBAcGFyYW0gdmFsdWUgIHRoZSBXU0RMIHBvcnQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKi8KLSAgdm9pZCBzZXRQb3J0KFBvcnQgdmFsdWUpCi0gIHsKLSAgICBhY3RpdmVQb3J0ID0gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIEdldHMgbGFzdCBwcm9jZXNzZWQgV1NETCBwb3J0LgotICAgKiBAcmV0dXJuIHRoZSBsYXN0IHByb2Nlc3NlZCBXU0RMIHBvcnQuCi0gICAqLwotICBwdWJsaWMgUG9ydCBnZXRQb3J0KCkKLSAgewotICAgIHJldHVybiBhY3RpdmVQb3J0OwotICB9Ci0gIC8qKgotICAgKiBTZXRzIFdTREwgcG9ydCB0eXBlIHRvIGJlIHByb2Nlc3NlZC4KLSAgICogQHBhcmFtIHZhbHVlICB0aGUgV1NETCBwb3J0IHR5cGUgdG8gYmUgcHJvY2Vzc2VkLgotICAgKi8KLSAgdm9pZCBzZXRQb3J0VHlwZShQb3J0VHlwZSB2YWx1ZSkKLSAgewotICAgIGFjdGl2ZVBvcnRUeXBlID0gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIEdldHMgbGFzdCBwcm9jZXNzZWQgV1NETCBwb3J0IHR5cGUuCi0gICAqIEByZXR1cm4gdGhlIGxhc3QgcHJvY2Vzc2VkIFdTREwgcG9ydCB0eXBlLgotICAgKi8KLSAgcHVibGljIFBvcnRUeXBlIGdldFBvcnRUeXBlKCkKLSAgewotICAgIHJldHVybiBhY3RpdmVQb3J0VHlwZTsKLSAgfQotICAvKioKLSAgICogU2V0cyBXU0RMIGRlZmluaXRpb24gdG8gYmUgcHJvY2Vzc2VkLgotICAgKiBAcGFyYW0gdmFsdWUgIHRoZSBXU0RMIGRlZmluaXRpb24gdG8gYmUgcHJvY2Vzc2VkLgotICAgKi8KLSAgdm9pZCBzZXREZWZpbml0aW9uKERlZmluaXRpb24gdmFsdWUpCi0gIHsKLSAgICBhY3RpdmVEZWZpbml0aW9uID0gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIEdldHMgbGFzdCBwcm9jZXNzZWQgV1NETCBkZWZpbml0aW9uLgotICAgKiBAcmV0dXJuIHRoZSBsYXN0IHByb2Nlc3NlZCBXU0RMIGRlZmluaXRpb24uCi0gICAqLwotICBwdWJsaWMgRGVmaW5pdGlvbiBnZXREZWZpbml0aW9uKCkKLSAgewotICAgIHJldHVybiBhY3RpdmVEZWZpbml0aW9uOwotICB9Ci0gIC8qKgotICAgKiBTZXRzIFdTREwgZXh0ZW5zaWJpbGl0eSBlbGVtZW50IHRvIGJlIHByb2Nlc3NlZC4KLSAgICogQHBhcmFtIHZhbHVlICB0aGUgV1NETCBleHRlbnNpYmlsaXR5IGVsZW1lbnQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKi8KLSAgdm9pZCBzZXRFeHRlbnNpYmlsaXR5RWxlbWVudChFeHRlbnNpYmlsaXR5RWxlbWVudCB2YWx1ZSkKLSAgewotICAgIGFjdGl2ZUV4dGVuc2liaWxpdHlFbGVtZW50ID0gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIEdldHMgbGFzdCBwcm9jZXNzZWQgV1NETCBleHRlbnNpYmlsaXR5IGVsZW1lbnQuCi0gICAqIEByZXR1cm4gdGhlIGxhc3QgcHJvY2Vzc2VkIFdTREwgZXh0ZW5zaWJpbGl0eSBlbGVtZW50LgotICAgKi8KLSAgcHVibGljIEV4dGVuc2liaWxpdHlFbGVtZW50IGdldEV4dGVuc2liaWxpdHlFbGVtZW50KCkKLSAgewotICAgIHJldHVybiBhY3RpdmVFeHRlbnNpYmlsaXR5RWxlbWVudDsKLSAgfQotICAvKioKLSAgICogU2V0cyBXU0RMIGVsZW1lbnQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKiBAcGFyYW0gdmFsdWUgIHRoZSBXU0RMIGVsZW1lbnQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKi8KLSAgdm9pZCBzZXRTT0FQQmluZGluZyhTT0FQQmluZGluZyB2YWx1ZSkKLSAgewotICAgIGFjdGl2ZVNPQVBCaW5kaW5nID0gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIEdldHMgbGFzdCBwcm9jZXNzZWQgV1NETCBTT0FQIGJpbmRpbmcuCi0gICAqIEByZXR1cm4gdGhlIGxhc3QgcHJvY2Vzc2VkIFdTREwgU09BUCBiaW5kaW5nLgotICAgKi8KLSAgcHVibGljIFNPQVBCaW5kaW5nIGdldFNPQVBCaW5kaW5nKCkKLSAgewotICAgIHJldHVybiBhY3RpdmVTT0FQQmluZGluZzsKLSAgfQotICAvKioKLSAgICogU2V0cyBXU0RMIGVsZW1lbnQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKiBAcGFyYW0gdmFsdWUgIFdTREwgZWxlbWVudCB0byBiZSBwcm9jZXNzZWQuCi0gICAqLwotICB2b2lkIHNldFNPQVBCb2R5KFNPQVBCb2R5IHZhbHVlKQotICB7Ci0gICAgYWN0aXZlU09BUEJvZHkgPSB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogR2V0cyBsYXN0IHByb2Nlc3NlZCBXU0RMIFNPQVAgYm9keS4KLSAgICogQHJldHVybiB0aGUgbGFzdCBwcm9jZXNzZWQgV1NETCBTT0FQIGJvZHkuCi0gICAqLwotICBwdWJsaWMgU09BUEJvZHkgZ2V0U09BUEJvZHkoKQotICB7Ci0gICAgcmV0dXJuIGFjdGl2ZVNPQVBCb2R5OwotICB9Ci0gIC8qKgotICAgKiBTZXRzIFdTREwgZWxlbWVudCB0byBiZSBwcm9jZXNzZWQuCi0gICAqIEBwYXJhbSB2YWx1ZSAgdGhlIFdTREwgZWxlbWVudCB0byBiZSBwcm9jZXNzZWQuCi0gICAqLwotICB2b2lkIHNldFNPQVBIZWFkZXIoU09BUEhlYWRlciB2YWx1ZSkKLSAgewotICAgIGFjdGl2ZVNPQVBIZWFkZXIgPSB2YWx1ZTsKLSAgfQotICAvKioKLSAgICogR2V0cyBsYXN0IHByb2Nlc3NlZCBXU0RMIFNPQVAgaGVhZGVyLgotICAgKiBAcmV0dXJuIHRoZSBsYXN0IHByb2Nlc3NlZCBXU0RMIFNPQVAgaGVhZGVyLgotICAgKi8KLSAgcHVibGljIFNPQVBIZWFkZXIgZ2V0U09BUEhlYWRlcigpCi0gIHsKLSAgICByZXR1cm4gYWN0aXZlU09BUEhlYWRlcjsKLSAgfQotICAvKioKLSAgICogU2V0cyBXU0RMIGVsZW1lbnQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKiBAcGFyYW0gdmFsdWUgIHRoZSBXU0RMIGVsZW1lbnQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKi8KLSAgdm9pZCBzZXRTT0FQSGVhZGVyRmF1bHQoU09BUEhlYWRlckZhdWx0IHZhbHVlKQotICB7Ci0gICAgYWN0aXZlU09BUEhlYWRlckZhdWx0ID0gdmFsdWU7Ci0gIH0KLSAgLyoqCi0gICAqIEdldHMgbGFzdCBwcm9jZXNzZWQgV1NETCBTT0FQIGhlYWRlciBmYXVsdC4KLSAgICogQHJldHVybiB0aGUgbGFzdCBwcm9jZXNzZWQgV1NETCBTT0FQIGhlYWRlciBmYXVsdC4KLSAgICovCi0gIHB1YmxpYyBTT0FQSGVhZGVyRmF1bHQgZ2V0U09BUEhlYWRlckZhdWx0KCkKLSAgewotICAgIHJldHVybiBhY3RpdmVTT0FQSGVhZGVyRmF1bHQ7Ci0gIH0KLSAgLyoqCi0gICAqIFNldHMgV1NETCBlbGVtZW50IHRvIGJlIHByb2Nlc3NlZC4KLSAgICogQHBhcmFtIHZhbHVlICB0aGUgV1NETCBlbGVtZW50IHRvIGJlIHByb2Nlc3NlZC4KLSAgICovCi0gIHZvaWQgc2V0U09BUEZhdWx0KFNPQVBGYXVsdCB2YWx1ZSkKLSAgewotICAgIGFjdGl2ZVNPQVBGYXVsdCA9IHZhbHVlOwotICB9Ci0gIC8qKgotICAgKiBHZXRzIGxhc3QgcHJvY2Vzc2VkIFdTREwgU09BUCBmYXVsdC4KLSAgICogQHJldHVybiB0aGUgbGFzdCBwcm9jZXNzZWQgV1NETCBTT0FQIGZhdWx0LgotICAgKi8KLSAgcHVibGljIFNPQVBGYXVsdCBnZXRTT0FQRmF1bHQoKQotICB7Ci0gICAgcmV0dXJuIGFjdGl2ZVNPQVBGYXVsdDsKLSAgfQotICAvKioKLSAgICogU2V0cyBXU0RMIGVsZW1lbnQgdG8gYmUgcHJvY2Vzc2VkLgotICAgKiBAcGFyYW0gdmFsdWUgIHRoZVdTREwgZWxlbWVudCB0byBiZSBwcm9jZXNzZWQKLSAgICovCi0gIHZvaWQgc2V0U09BUE9wZXJhdGlvbihTT0FQT3BlcmF0aW9uIHZhbHVlKQotICB7Ci0gICAgYWN0aXZlU09BUE9wZXJhdGlvbiA9IHZhbHVlOwotICB9Ci0gIC8qKgotICAgKiBHZXRzIGxhc3QgcHJvY2Vzc2VkIFdTREwgU09BUCBvcGVyYXRpb24uCi0gICAqIEByZXR1cm4gdGhlIGxhc3QgcHJvY2Vzc2VkIFdTREwgU09BUCBvcGVyYXRpb24uCi0gICAqLwotICBwdWJsaWMgU09BUE9wZXJhdGlvbiBnZXRTT0FQT3BlcmF0aW9uKCkKLSAgewotICAgIHJldHVybiBhY3RpdmVTT0FQT3BlcmF0aW9uOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3RyYXZlcnNhbC9XU0RMVmlzaXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC90cmF2ZXJzYWwvV1NETFZpc2l0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWI5NWQ3YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3RyYXZlcnNhbC9XU0RMVmlzaXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnRyYXZlcnNhbDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuSW1wb3J0OwotaW1wb3J0IGphdmF4LndzZGwuSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBqYXZheC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgamF2YXgud3NkbC5UeXBlczsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJpbmRpbmc7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEJvZHk7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBIZWFkZXI7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEhlYWRlckZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBPcGVyYXRpb247Ci0KLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0vKioKLSAqIFRoZSBpbnRlcmZhY2UgZGVmaW5lcyBjYWxsYmFjayBtZXRob2RzIGR1cmluZyB0cmF2ZXJzZSBXU0RMLgotICogV1NETFZpc2l0b3IgY291bGQgY2FuY2VsIGFydGlmYWN0IHByb2Nlc3NpbmcgYnkgdXNpbmcgdHJhdmVyc2FsIGNvbnRleHQKLSAqIDxjb2RlPmNhbmNlbFhYWFByb2Nlc3Npbmc8L2NvZGU+IG1ldGhvZHMuCi0gKiAKLSAqIEBhdXRob3IgS3VsaWsKLSAqLwotcHVibGljIGludGVyZmFjZSBXU0RMVmlzaXRvcgotewotICAvKioKLSAgICogTWV0aG9kIHZpc2l0cyBXU0RMIHBhcnQgb2JqZWN0LgotICAgKiBAcGFyYW0gb2JqIFdTREwgZWxlbWVudCB0byBiZSB2aXNpdGVkLgotICAgKiBAcGFyYW0gcGFyZW50IFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIGN0eCBjdXJyZW50IHRyYXZlcnNhbCBjb250ZXh0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoUGFydCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCk7Ci0gIC8qKgotICAgKiBNZXRob2QgdmlzaXRzIFdTREwgc2VydmljZSBvYmplY3QuCi0gICAqIEBwYXJhbSBvYmogV1NETCBlbGVtZW50IHRvIGJlIHZpc2l0ZWQuCi0gICAqIEBwYXJhbSBwYXJlbnQgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gY3R4IGN1cnJlbnQgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChTZXJ2aWNlIG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KTsKLSAgLyoqCi0gICAqIE1ldGhvZCB2aXNpdHMgV1NETCB0eXBlcyBvYmplY3QuCi0gICAqIEBwYXJhbSBvYmogV1NETCBlbGVtZW50IHRvIGJlIHZpc2l0ZWQuCi0gICAqIEBwYXJhbSBwYXJlbnQgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gY3R4IGN1cnJlbnQgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChUeXBlcyBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCk7Ci0gIC8qKgotICAgKiBNZXRob2QgdmlzaXRzIFdTREwgb3BlcmF0aW9uIG9iamVjdC4KLSAgICogQHBhcmFtIG9iaiBXU0RMIGVsZW1lbnQgdG8gYmUgdmlzaXRlZC4KLSAgICogQHBhcmFtIHBhcmVudCBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBjdHggY3VycmVudCB0cmF2ZXJzYWwgY29udGV4dC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KE9wZXJhdGlvbiBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCk7Ci0gIC8qKgotICAgKiBNZXRob2QgdmlzaXRzIFdTREwgaW5wdXQgb2JqZWN0LgotICAgKiBAcGFyYW0gb2JqIFdTREwgZWxlbWVudCB0byBiZSB2aXNpdGVkLgotICAgKiBAcGFyYW0gcGFyZW50IFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIGN0eCBjdXJyZW50IHRyYXZlcnNhbCBjb250ZXh0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoSW5wdXQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpOwotICAvKioKLSAgICogTWV0aG9kIHZpc2l0cyBXU0RMIG91dHB1dCBvYmplY3QuCi0gICAqIEBwYXJhbSBvYmogV1NETCBlbGVtZW50IHRvIGJlIHZpc2l0ZWQuCi0gICAqIEBwYXJhbSBwYXJlbnQgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gY3R4IGN1cnJlbnQgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChPdXRwdXQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpOwotICAvKioKLSAgICogTWV0aG9kIHZpc2l0cyBXU0RMIGZhdWx0IG9iamVjdC4KLSAgICogQHBhcmFtIG9iaiBXU0RMIGVsZW1lbnQgdG8gYmUgdmlzaXRlZC4KLSAgICogQHBhcmFtIHBhcmVudCBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBjdHggY3VycmVudCB0cmF2ZXJzYWwgY29udGV4dC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KEZhdWx0IG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KTsKLSAgLyoqCi0gICAqIE1ldGhvZCB2aXNpdHMgV1NETCBiaW5kaW5nIG9iamVjdC4KLSAgICAgKiBAcGFyYW0gb2JqIFdTREwgZWxlbWVudCB0byBiZSB2aXNpdGVkLgotICAgICAqIEBwYXJhbSBwYXJlbnQgV1NETCBlbGVtZW50LgotICAgICAqIEBwYXJhbSBjdHggY3VycmVudCB0cmF2ZXJzYWwgY29udGV4dC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KEJpbmRpbmcgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpOwotICAvKioKLSAgICogTWV0aG9kIHZpc2l0cyBXU0RMIGJpbmRpbmcgb3BlcmF0aW9uIG9iamVjdC4KLSAgICogQHBhcmFtIG9iaiBXU0RMIGVsZW1lbnQgdG8gYmUgdmlzaXRlZC4KLSAgICogQHBhcmFtIHBhcmVudCBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBjdHggY3VycmVudCB0cmF2ZXJzYWwgY29udGV4dC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KAotICAgIEJpbmRpbmdPcGVyYXRpb24gb2JqLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KTsKLSAgLyoqCi0gICAqIE1ldGhvZCB2aXNpdHMgV1NETCBiaW5kaW5nIGlucHV0IG9iamVjdC4KLSAgICogQHBhcmFtIG9iaiBXU0RMIGVsZW1lbnQgdG8gYmUgdmlzaXRlZC4KLSAgICogQHBhcmFtIHBhcmVudCBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBjdHggY3VycmVudCB0cmF2ZXJzYWwgY29udGV4dC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KEJpbmRpbmdJbnB1dCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCk7Ci0gIC8qKgotICAgKiBNZXRob2QgdmlzaXRzIFdTREwgYmluZGluZyBvdXRwdXQgb2JqZWN0LgotICAgKiBAcGFyYW0gb2JqIFdTREwgZWxlbWVudCB0byBiZSB2aXNpdGVkLgotICAgKiBAcGFyYW0gcGFyZW50IFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIGN0eCBjdXJyZW50IHRyYXZlcnNhbCBjb250ZXh0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoQmluZGluZ091dHB1dCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCk7Ci0gIC8qKgotICAgKiBNZXRob2QgdmlzaXRzIFdTREwgYmluZGluZyBmYXVsdCBvYmplY3QuCi0gICAqIEBwYXJhbSBvYmogV1NETCBlbGVtZW50IHRvIGJlIHZpc2l0ZWQuCi0gICAqIEBwYXJhbSBwYXJlbnQgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gY3R4IGN1cnJlbnQgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChCaW5kaW5nRmF1bHQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpOwotICAvKioKLSAgICogTWV0aG9kIHZpc2l0cyBXU0RMIGltcG9ydCBvYmplY3QuCi0gICAqIEBwYXJhbSBvYmogV1NETCBlbGVtZW50IHRvIGJlIHZpc2l0ZWQuCi0gICAqIEBwYXJhbSBwYXJlbnQgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gY3R4IGN1cnJlbnQgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChJbXBvcnQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpOwotICAvKioKLSAgICogTWV0aG9kIHZpc2l0cyBXU0RMIGVsZW1lbnQgb2JqZWN0LgotICAgKiBAcGFyYW0gb2JqIFdTREwgZWxlbWVudCB0byBiZSB2aXNpdGVkLgotICAgKiBAcGFyYW0gcGFyZW50IFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIGN0eCBjdXJyZW50IHRyYXZlcnNhbCBjb250ZXh0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoRWxlbWVudCBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCk7Ci0gIC8qKgotICAgKiBNZXRob2QgdmlzaXRzIFdTREwgbWVzc2FnZSBvYmplY3QuCi0gICAqIEBwYXJhbSBvYmogV1NETCBlbGVtZW50IHRvIGJlIHZpc2l0ZWQuCi0gICAqIEBwYXJhbSBwYXJlbnQgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gY3R4IGN1cnJlbnQgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChNZXNzYWdlIG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KTsKLSAgLyoqCi0gICAqIE1ldGhvZCB2aXNpdHMgV1NETCBwb3J0IG9iamVjdC4KLSAgICogQHBhcmFtIG9iaiBXU0RMIGVsZW1lbnQgdG8gYmUgdmlzaXRlZC4KLSAgICogQHBhcmFtIHBhcmVudCBXU0RMIGVsZW1lbnQuCi0gICAqIEBwYXJhbSBjdHggY3VycmVudCB0cmF2ZXJzYWwgY29udGV4dC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KFBvcnQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpOwotICAvKioKLSAgICogTWV0aG9kIHZpc2l0cyBXU0RMIHBvcnQgdHlwZSBvYmplY3QuCi0gICAqIEBwYXJhbSBvYmogV1NETCBlbGVtZW50IHRvIGJlIHZpc2l0ZWQuCi0gICAqIEBwYXJhbSBwYXJlbnQgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gY3R4IGN1cnJlbnQgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChQb3J0VHlwZSBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCk7Ci0gIC8qKgotICAgKiBNZXRob2QgdmlzaXRzIFdTREwgZGVmaW5pdGlvbiBvYmplY3QuCi0gICAqIEBwYXJhbSBvYmogV1NETCBlbGVtZW50IHRvIGJlIHZpc2l0ZWQuCi0gICAqIEBwYXJhbSBwYXJlbnQgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gY3R4IGN1cnJlbnQgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChEZWZpbml0aW9uIG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KTsKLSAgLyoqCi0gICAqIE1ldGhvZCB2aXNpdHMgV1NETCBleHRlbnNpYmlsaXR5IGVsZW1lbnQgb2JqZWN0LgotICAgKiBAcGFyYW0gb2JqIFdTREwgZWxlbWVudCB0byBiZSB2aXNpdGVkLgotICAgKiBAcGFyYW0gcGFyZW50IFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIGN0eCBjdXJyZW50IHRyYXZlcnNhbCBjb250ZXh0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgb2JqLAotICAgIE9iamVjdCBwYXJlbnQsCi0gICAgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KTsKLSAgLyoqCi0gICAqIE1ldGhvZCB2aXNpdHMgV1NETCBTT0FQIGJpbmRpbmcgb2JqZWN0LgotICAgKiBAcGFyYW0gb2JqIFdTREwgZWxlbWVudCB0byBiZSB2aXNpdGVkLgotICAgKiBAcGFyYW0gcGFyZW50IFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIGN0eCBjdXJyZW50IHRyYXZlcnNhbCBjb250ZXh0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoU09BUEJpbmRpbmcgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpOwotICAvKioKLSAgICogTWV0aG9kIHZpc2l0cyBXU0RMIFNPQVAgYm9keSBvYmplY3QuCi0gICAqIEBwYXJhbSBvYmogV1NETCBlbGVtZW50IHRvIGJlIHZpc2l0ZWQuCi0gICAqIEBwYXJhbSBwYXJlbnQgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gY3R4IGN1cnJlbnQgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChTT0FQQm9keSBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCk7Ci0gIC8qKgotICAgKiBNZXRob2QgdmlzaXRzIFdTREwgU09BUCBoZWFkZXIgb2JqZWN0LgotICAgKiBAcGFyYW0gb2JqIFdTREwgZWxlbWVudCB0byBiZSB2aXNpdGVkLgotICAgKiBAcGFyYW0gcGFyZW50IFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIGN0eCBjdXJyZW50IHRyYXZlcnNhbCBjb250ZXh0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoU09BUEhlYWRlciBvYmosIE9iamVjdCBwYXJlbnQsIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCk7Ci0gIC8qKgotICAgKiBNZXRob2QgdmlzaXRzIFdTREwgU09BUCBoZWFkZXIgZmF1bHQgb2JqZWN0LgotICAgKiBAcGFyYW0gb2JqIFdTREwgZWxlbWVudCB0byBiZSB2aXNpdGVkLgotICAgKiBAcGFyYW0gcGFyZW50IFdTREwgZWxlbWVudC4KLSAgICogQHBhcmFtIGN0eCBjdXJyZW50IHRyYXZlcnNhbCBjb250ZXh0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoCi0gICAgU09BUEhlYWRlckZhdWx0IG9iaiwKLSAgICBPYmplY3QgcGFyZW50LAotICAgIFdTRExUcmF2ZXJzYWxDb250ZXh0IGN0eCk7Ci0gIC8qKgotICAgKiBNZXRob2QgdmlzaXRzIFdTREwgU09BUCBmYXVsdCBvYmplY3QuCi0gICAqIEBwYXJhbSBvYmogV1NETCBlbGVtZW50IHRvIGJlIHZpc2l0ZWQuCi0gICAqIEBwYXJhbSBwYXJlbnQgV1NETCBlbGVtZW50LgotICAgKiBAcGFyYW0gY3R4IGN1cnJlbnQgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChTT0FQRmF1bHQgb2JqLCBPYmplY3QgcGFyZW50LCBXU0RMVHJhdmVyc2FsQ29udGV4dCBjdHgpOwotICAvKioKLSAgICogTWV0aG9kIHZpc2l0cyBXU0RMIFNPQVAgb3BlcmF0aW9uIG9iamVjdC4KLSAgICogQHBhcmFtIG9iaiBXU0RMIGVsZW1lbnQgdG8gYmUgdmlzaXRlZC4KLSAgICogQHBhcmFtIHBhcmVudCBXU0RMIGVsZW1lbnQuLgotICAgKiBAcGFyYW0gY3R4IGN1cnJlbnQgdHJhdmVyc2FsIGNvbnRleHQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChTT0FQT3BlcmF0aW9uIG9iaiwgT2JqZWN0IHBhcmVudCwgV1NETFRyYXZlcnNhbENvbnRleHQgY3R4KTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL0ZpbGVFbnRpdHlSZXNvbHZlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC94c2QvRmlsZUVudGl0eVJlc29sdmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkYWZiZDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC94c2QvRmlsZUVudGl0eVJlc29sdmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC54c2Q7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhNTFJlc291cmNlSWRlbnRpZmllcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE5JRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MRW50aXR5UmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxJbnB1dFNvdXJjZTsKLQotLyoqCi0gKiBFbnRpdHkgcmVzb2x2ZSB0byByZXNvbHZlIGZpbGUgZW50aXRpZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBGaWxlRW50aXR5UmVzb2x2ZXIgaW1wbGVtZW50cyBYTUxFbnRpdHlSZXNvbHZlcgotewotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MRW50aXR5UmVzb2x2ZXIjcmVzb2x2ZUVudGl0eShvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE1MUmVzb3VyY2VJZGVudGlmaWVyKQotICAgKi8KLSAgcHVibGljIFhNTElucHV0U291cmNlIHJlc29sdmVFbnRpdHkoWE1MUmVzb3VyY2VJZGVudGlmaWVyIHJlc291cmNlKSB0aHJvd3MgWE5JRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIHB1YmxpY0lkID0gcmVzb3VyY2UuZ2V0UHVibGljSWQoKTsKLSAgICBTdHJpbmcgc3lzdGVtSWQgPSByZXNvdXJjZS5nZXRFeHBhbmRlZFN5c3RlbUlkKCk7Ci0gICAgU3RyaW5nIHVybCA9IHN5c3RlbUlkOwotICAgIGlmKHVybCA9PSBudWxsKQotICAgIHsKLSAgICAgIHVybCA9IHB1YmxpY0lkOwotICAgIH0KLSAgICBpZih1cmwgPT0gbnVsbCkKLSAgICB7Ci0gICAgICB1cmwgPSByZXNvdXJjZS5nZXROYW1lc3BhY2UoKTsKLSAgICB9Ci0gICAgaWYodXJsICE9IG51bGwpCi0gICAgewotICAgICAgSW5wdXRTdHJlYW0gaXMgPSBuZXcgTGF6eVVSTElucHV0U3RyZWFtKHVybCk7Ci0gICAgICByZXR1cm4gbmV3IFhNTElucHV0U291cmNlKHB1YmxpY0lkLCBzeXN0ZW1JZCwgc3lzdGVtSWQsIGlzLCBudWxsKTsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC94c2QvSW5saW5lU2NoZW1hR2VuZXJhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3hzZC9JbmxpbmVTY2hlbWFHZW5lcmF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJlMmQ0Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3hzZC9JbmxpbmVTY2hlbWFHZW5lcmF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU5MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC54c2Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLWltcG9ydCBjb20uaWJtLndzZGwuQ29uc3RhbnRzOwotCi0vKioKLSAqIEdlbmVyYXRlIGEgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgc2NoZW1hIGZvciBhbiBpbmxpbmUgc2NoZW1hLiBXaWxsIGFkZCBpbXBvcnRzIGZvciB1bnJlc29sdmVkCi0gKiBuYW1lc3BhY2VzLgotICogCi0gKiBAYXV0aG9yIExhd3JlbmNlIE1hbmRlbCwgSUJNCi0gKi8KLXB1YmxpYyBjbGFzcyBJbmxpbmVTY2hlbWFHZW5lcmF0b3IKLXsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBTT0FQX0VOQ09ESU5HX1VSSSA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyI7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgWE1MTlMgPSAieG1sbnMiOwotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIFRBUkdFVE5BTUVTUEFDRSA9ICJ0YXJnZXROYW1lc3BhY2UiOwotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIE5BTUVTUEFDRSA9ICJuYW1lc3BhY2UiOwotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIElNUE9SVCA9ICJpbXBvcnQiOwotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIElOQ0xVREUgPSAiaW5jbHVkZSI7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgU0NIRU1BID0gInNjaGVtYSI7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgU0NIRU1BTE9DQVRJT04gPSAic2NoZW1hTG9jYXRpb24iOwotICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIFRZUEUgPSAidHlwZSI7Ci0gIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgTkFNRSA9ICJuYW1lIjsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZ1tdIGlnbm9yZU5hbWVzcGFjZXMgPQotICAgIHsgQ29uc3RhbnRzLk5TX1VSSV9YU0RfMTk5OSwgQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMCwgQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMSB9OwotCi0gIHByb3RlY3RlZCBzdGF0aWMgSW5saW5lU2NoZW1hR2VuZXJhdG9yIGluc3RhbmNlID0gbnVsbDsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqLwotICBwcm90ZWN0ZWQgSW5saW5lU2NoZW1hR2VuZXJhdG9yKCkKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgaW5zdGFuY2Ugb2YgdGhlIElubGluZVNjaGVtYUdlbmVyYXRvci4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIGluc3RhbmNlIG9mIHRoZSBpbmxpbmUgc2NoZW1hIGdlbmVyYXRvci4KLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgSW5saW5lU2NoZW1hR2VuZXJhdG9yIGdldEluc3RhbmNlKCkKLSAgewotICAgIGlmIChpbnN0YW5jZSA9PSBudWxsKQotICAgIHsKLSAgICAgIGluc3RhbmNlID0gbmV3IElubGluZVNjaGVtYUdlbmVyYXRvcigpOwotICAgIH0KLSAgICByZXR1cm4gaW5zdGFuY2U7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBDcmVhdGUgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBzY2hlbWEgZnJvbSB0aGUgZWxlbWVudCBwcm92aWRlZC4KLSAgICogCi0gICAqIEBwYXJhbSBlbGVtZW50IFRoZSByb290IGVsZW1lbnQgb2YgdGhlIHNjaGVtYS4KLSAgICogQHBhcmFtIGVsZW1lbnRzIEEgbGlzdCBvZiB0aGUgZWxlbWVudHMgaW4gdGhlIHNjaGVtYSBpbiBvcmRlci4KLSAgICogQHBhcmFtIGZpbGVsb2NhdGlvbiBUaGUgVVJJIG9mIHRoZSBmaWxlIHRoYXQgY29udGFpbnMgdGhlIHNjaGVtYS4KLSAgICogQHJldHVybiBBIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIHNjaGVtYS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGNyZWF0ZVhTRFN0cmluZyhFbGVtZW50IGVsZW1lbnQsIExpc3QgZWxlbWVudHMsIFN0cmluZyBmaWxlbG9jYXRpb24pCi0gIHsKLSAgICByZXR1cm4gSW5saW5lU2NoZW1hR2VuZXJhdG9yLmNyZWF0ZVhTRFN0cmluZyhlbGVtZW50LCBlbGVtZW50cywgZmlsZWxvY2F0aW9uLCBuZXcgSGFzaHRhYmxlKCkpOwotICB9Ci0gIAotICAvKioKLSAgCSogQ3JlYXRlcyBhIFN0cmluZyByZXByZXNlbnRpbmcgdGhlIHNjaGVtYSBtb2RlbCB3aXRoIHRoZSByb290IGVsZW1lbnQgb2YKLSAgCSogZXh0RWxlbS4gQ2FsbHMgY3JlYXRlWFNEU3RyaW5nUmVjdXJzaXZlbHkgdG8gdGFrZSBjYXJlIG9mIGJ1aWxkaW5nIHRoZSBTdHJpbmcKLSAgCSogYWZ0ZXIgaXQgb2J0YWlucyB0aGUgRWxlbWVudCBmcm9tIHRoZSBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQuCi0gIAkqIAotICAJKiBAcGFyYW0gZWxlbWVudCBUaGUgcm9vdCBlbGVtZW50IG9mIHRoZSBzY2hlbWEuCi0gIAkqIEBwYXJhbSBlbGVtZW50cyBBIGxpc3QgdG8gY29udGFpbiB0aGUgZWxlbWVudHMgaW4gdGhlIHNjaGVtYSBpbiBvcmRlci4KLSAgCSogQHBhcmFtIGZpbGVsb2NhdGlvbiBUaGUgbG9jYXRpb24gb2YgdGhlIGZpbGUgdGhlIHNjaGVtYSBpcyBsb2NhdGVkIGluLgotICAJKiBAcGFyYW0gcGFyZW50TlNzIEEgaGFzaHRhYmxlIG9mIHBhcmVudCBuYW1lc3BhY2VzIHRvIHVzZWQgdG8gcmVzb2x2ZSBwcmVmaXhlcy4KLSAgCSogQHJldHVybiBBIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc2NoZW1hIHdpdGggdGhlIHJvb3QgZWxlbWVudCAnZWxlbWVudCcuCi0gIAkqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBjcmVhdGVYU0RTdHJpbmcoRWxlbWVudCBlbGVtZW50LCBMaXN0IGVsZW1lbnRzLCBTdHJpbmcgZmlsZWxvY2F0aW9uLCBIYXNodGFibGUgcGFyZW50TlNzKQotICB7Ci0gICAgSW5saW5lU2NoZW1hR2VuZXJhdG9yIHNjaGVtYUdlbmVyYXRvciA9IElubGluZVNjaGVtYUdlbmVyYXRvci5nZXRJbnN0YW5jZSgpOwotICAgIEhhc2h0YWJsZSBuc1Jlc29sdmVyID0gc2NoZW1hR2VuZXJhdG9yLmdldE5TUmVzb2x2ZXIoZWxlbWVudCk7Ci0gICAgTGlzdCByZXFucyA9IHNjaGVtYUdlbmVyYXRvci5nZXRSZXF1aXJlZE5hbWVzcGFjZXMoZWxlbWVudCk7Ci0gICAgSGFzaHRhYmxlIHJlcU5TRGVjbCA9IHNjaGVtYUdlbmVyYXRvci5yZXNvbHZlTmFtZXNwYWNlcyhyZXFucywgbnNSZXNvbHZlciwgcGFyZW50TlNzKTsKLSAgICAvL0hhc2h0YWJsZSByZXFOU0RlY2wgPSBzY2hlbWFHZW5lcmF0b3IuZ2V0UmVxdWlyZWROU0RlY2xhcmF0aW9ucyhyZXFucywgbnNSZXNvbHZlciwgcGFyZW50TlNzKTsKLSAgICBMaXN0IGltcG9ydE5TID0gc2NoZW1hR2VuZXJhdG9yLmdldEltcG9ydE5hbWVzcGFjZXMoZWxlbWVudCk7Ci0gICAgcmVxbnMgPSBzY2hlbWFHZW5lcmF0b3IucmVtb3ZlSW1wb3J0cyhyZXFucywgaW1wb3J0TlMpOwotICAgIHJlcW5zID0gc2NoZW1hR2VuZXJhdG9yLnJlbW92ZUxvY2FsTmFtZXNwYWNlcyhyZXFucywgZWxlbWVudCk7Ci0gICAgcmV0dXJuIHNjaGVtYUdlbmVyYXRvci5jcmVhdGVYU0RTdHJpbmdSZWN1cnNpdmVseShlbGVtZW50LCBlbGVtZW50cywgcmVxbnMsIHJlcU5TRGVjbCwgZmlsZWxvY2F0aW9uKTsKLSAgfQotICAvKioKLSAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBTT0FQIGVuY29kaW5nIG5hbWVzcGFjZSBpcyByZXF1aXJlZCBidXQgbm90IGltcG9ydGVkLgotICAgKiAKLSAgICogQHBhcmFtIGVsZW1lbnQgVGhlIHJvb3QgZWxlbWVudCBvZiB0aGUgc2NoZW1hLgotICAgKiBAcGFyYW0gZmlsZWxvY2F0aW9uIFRoZSBsb2NhdGlvbiBvZiB0aGUgZmlsZSBjb250YWluaW5nIHRoZSBzY2hlbWEuCi0gICAqIEBwYXJhbSBwYXJlbnROU3MgQSBoYXNodGFibGUgb2YgdGhlIHBhcmVudCBuYW1lc3BhY2VzLgotICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHNvYXAgZW5jb2RpbmcgbmFtZXNwYWNlIGlzIHJlcXVpcmVkIGJ1dCBub3QgaW1wb3J0ZWQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBzb2FwRW5jb2RpbmdSZXF1aXJlZE5vdEltcG9ydGVkKEVsZW1lbnQgZWxlbWVudCwgU3RyaW5nIGZpbGVsb2NhdGlvbiwgSGFzaHRhYmxlIHBhcmVudE5TcykKLSAgewotICAgIElubGluZVNjaGVtYUdlbmVyYXRvciBzY2hlbWFHZW5lcmF0b3IgPSBJbmxpbmVTY2hlbWFHZW5lcmF0b3IuZ2V0SW5zdGFuY2UoKTsKLSAgICBIYXNodGFibGUgbnNSZXNvbHZlciA9IHNjaGVtYUdlbmVyYXRvci5nZXROU1Jlc29sdmVyKGVsZW1lbnQpOwotICAgIExpc3QgcmVxbnMgPSBudWxsOwotCi0gICAgcmVxbnMgPSBzY2hlbWFHZW5lcmF0b3IuZ2V0UmVxdWlyZWROYW1lc3BhY2VzKGVsZW1lbnQpOwotICAgIHNjaGVtYUdlbmVyYXRvci5yZXNvbHZlTmFtZXNwYWNlcyhyZXFucywgbnNSZXNvbHZlciwgcGFyZW50TlNzKTsKLSAgICAvL3NjaGVtYUdlbmVyYXRvci5yZXNvbHZlVW5kZWNsYXJlZE5hbWVzcGFjZXMocmVxbnMsIHBhcmVudE5Tcyk7Ci0gICAgTGlzdCBpbXBvcnROUyA9IHNjaGVtYUdlbmVyYXRvci5nZXRJbXBvcnROYW1lc3BhY2VzKGVsZW1lbnQpOwotICAgIHJlcW5zID0gc2NoZW1hR2VuZXJhdG9yLnJlbW92ZUltcG9ydHMocmVxbnMsIGltcG9ydE5TKTsKLSAgICByZXFucyA9IHNjaGVtYUdlbmVyYXRvci5yZW1vdmVMb2NhbE5hbWVzcGFjZXMocmVxbnMsIGVsZW1lbnQpOwotCi0gICAgcmV0dXJuIHNjaGVtYUdlbmVyYXRvci5jaGVja1NPQVBFbmNvZGluZ1JlcXVpcmVkKHJlcW5zKTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGlzIHJlY3Vyc2l2ZSBtZXRob2QgY3JlYXRlcyB0aGUgc2NoZW1hIFN0cmluZyBmcm9tIHRoZSByb290IEVsZW1lbnQuCi0gICAqIAotICAgKiBAcGFyYW0gZWxlbSBUaGUgcm9vdCBlbGVtZW50IG9mIHRoZSBzY2hlbWEuCi0gICAqIEBwYXJhbSBlbGVtZW50cyBBIGxpc3QgdG8gYmUgY3JlYXRlZCBvZiB0aGUgZWxlbWVudHMgaW4gdGhlIHNjaGVtYSBpbiBvcmRlci4KLSAgICogQHBhcmFtIHJlcXVpcmVkTmFtZXNwYWNlcyBBIGxpc3Qgb2YgcmVxdWlyZWQgbmFtZXNwYWNlcy4KLSAgICogQHBhcmFtIHJlcU5TRGVjbCBBIGhhc2h0YWJsZSBvZiByZXF1aXJlZCBuYW1lc3BhY2UgZGVjbGFyYXRpb25zLgotICAgKiBAcGFyYW0gZmlsZWxvY2F0aW9uIFRoZSB1cmkgb2YgdGhlIGZpbGUgdGhhdCBjb250YWlucyB0aGlzIHNjaGVtYS4KLSAgICogQHJldHVybiBBIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHNjaGVtYS4KLSAgICovCi0gIHByb3RlY3RlZCBTdHJpbmcgY3JlYXRlWFNEU3RyaW5nUmVjdXJzaXZlbHkoCi0gICAgRWxlbWVudCBlbGVtLAotICAgIExpc3QgZWxlbWVudHMsCi0gICAgTGlzdCByZXF1aXJlZE5hbWVzcGFjZXMsCi0gICAgSGFzaHRhYmxlIHJlcU5TRGVjbCwKLSAgICBTdHJpbmcgZmlsZWxvY2F0aW9uKQotICB7Ci0gICAgaWYgKGVsZW0gPT0gbnVsbCkKLSAgICAgIHJldHVybiAiIjsgLy8ganVzdCBpbiBjYXNlCi0KLSAgICBlbGVtZW50cy5hZGQoZWxlbSk7Ci0KLSAgICBTdHJpbmdCdWZmZXIgeHNkU3RyaW5nID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIFN0cmluZyBlbGVtZW50TmFtZSA9IGVsZW0uZ2V0VGFnTmFtZSgpOwotICAgIHhzZFN0cmluZy5hcHBlbmQoIjwiKS5hcHBlbmQoZWxlbWVudE5hbWUpOwotCi0gICAgYm9vbGVhbiBmb3VuZFNjaGVtYUxvY2F0aW9uID0gZmFsc2U7IC8vIGZsYWcgaWYgc2NoZW1hbG9jYXRpb24gaXMgZGVmaW5lZAotICAgIFN0cmluZyBuYW1lc3BhY2UgPSAiIjsgLy8gdGhlIG5hbWVzcGFjZSBpZiB3ZSdyZSBjaGVja2luZyBhbiBpbXBvcnQgb3IgaW5jbHVkZQotICAgIFN0cmluZyBuYW1lUHJlZml4ID0gIiI7IC8vIHRoZSB4bWxucyBwcmVmaXggdXNlZCBmb3IgdGhlIGVsZW1lbnRzCi0gICAgLy8gR2V0IGFsbCBvZiB0aGUgYXR0cmlidXRlcyBmb3IgdGhpcyBlbGVtZW50IGFuZCBhcHBlbmQgdGhlbSB0byB0aGUgeHNkU3RyaW5nCi0gICAgTmFtZWROb2RlTWFwIGF0dHMgPSBlbGVtLmdldEF0dHJpYnV0ZXMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGF0dHMuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICB7Ci0gICAgICBOb2RlIG4gPSBhdHRzLml0ZW0oaSk7Ci0gICAgICB4c2RTdHJpbmcuYXBwZW5kKCIgIikuYXBwZW5kKG4uZ2V0Tm9kZU5hbWUoKSkuYXBwZW5kKCI9XCIiKTsKLSAgICAgIFN0cmluZyBub2RlTmFtZSA9IG4uZ2V0Tm9kZU5hbWUoKTsKLSAgICAgIGlmIChub2RlTmFtZS5lcXVhbHNJZ25vcmVDYXNlKFNDSEVNQUxPQ0FUSU9OKSAmJiBmaWxlbG9jYXRpb24gIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgZm91bmRTY2hlbWFMb2NhdGlvbiA9IHRydWU7Ci0gICAgICAgIFN0cmluZyByZWxhdGl2ZVBhdGggPSBuLmdldE5vZGVWYWx1ZSgpOwotICAgICAgICB4c2RTdHJpbmcuYXBwZW5kKHJlbGF0aXZlUGF0aCkuYXBwZW5kKCJcIiIpOyAgIAotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBTdHJpbmcgbm9kZVZhbHVlID0gbi5nZXROb2RlVmFsdWUoKTsKLSAgICAgICAgaWYgKG5vZGVOYW1lLmVxdWFsc0lnbm9yZUNhc2UoTkFNRVNQQUNFKSkKLSAgICAgICAgewotICAgICAgICAgIG5hbWVzcGFjZSA9IG5vZGVWYWx1ZTsKLSAgICAgICAgfQotICAgICAgICAvLyBnZXQgdGhlIG5hbWUgcHJlZml4IGZvciB0aGlzIHNjaGVtYSB0byB1c2UgaW4gZ2VuZXJhdGluZyBpbXBvcnQgc3RhdGVtZW50cwotICAgICAgICBlbHNlIGlmIChub2RlTmFtZS5pbmRleE9mKFhNTE5TKSAhPSAtMSkKLSAgICAgICAgewotCi0gICAgICAgICAgaWYgKG5vZGVWYWx1ZS5lcXVhbHNJZ25vcmVDYXNlKGVsZW0uZ2V0TmFtZXNwYWNlVVJJKCkpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG5hbWVQcmVmaXggPSBub2RlTmFtZTsKLSAgICAgICAgICAgIGlmIChuYW1lUHJlZml4LmVxdWFsc0lnbm9yZUNhc2UoWE1MTlMpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBuYW1lUHJlZml4ID0gIiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIG5hbWVQcmVmaXggPSBuYW1lUHJlZml4LnN1YnN0cmluZyg2KSArICI6IjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLy8gUmVwbGFjZSBvbGQgc2NoZW1hIG5hbWVzcGFjZXMgd2l0aCB0aGUgbmV3IHNjaGVtYSBuYW1lc3BhY2UuCi0gICAgICAgIGlmKG5vZGVWYWx1ZS5lcXVhbHMoQ29uc3RhbnRzLk5TX1VSSV9YU0RfMTk5OSkgfHwgbm9kZVZhbHVlLmVxdWFscyhDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAwKSkKLSAgICAgICAgIHsKLSAgICAgICAgICBub2RlVmFsdWUgPSBDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxOwotICAgICAgICB9Ci0gICAgICAgIHhzZFN0cmluZy5hcHBlbmQobm9kZVZhbHVlKS5hcHBlbmQoIlwiIik7Ci0gICAgICB9Ci0gICAgfQotICAgIGlmIChlbGVtZW50TmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJpbXBvcnQiKSAmJiAhZm91bmRTY2hlbWFMb2NhdGlvbikKLSAgICB7Ci0gICAgICB4c2RTdHJpbmcuYXBwZW5kKCIgIikuYXBwZW5kKFNDSEVNQUxPQ0FUSU9OKS5hcHBlbmQoIj1cIiIpLmFwcGVuZChuYW1lc3BhY2UpLmFwcGVuZCgiXCIiKTsKLSAgICB9Ci0gICAgLy8gYWRkIGluIGFueSByZXF1aXJlZCBOUyBkZWNsYXJhdGlvbnMgZnJvbSBwYXJlbnQgZWxlbWVudHMKLSAgICBpZiAocmVxTlNEZWNsICE9IG51bGwpCi0gICAgewotICAgICAgRW51bWVyYXRpb24ga2V5cyA9IHJlcU5TRGVjbC5rZXlzKCk7Ci0gICAgICB3aGlsZSAoa2V5cy5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIGtleSA9IChTdHJpbmcpa2V5cy5uZXh0RWxlbWVudCgpOwotICAgICAgICBTdHJpbmcgZGVjbE5TID0gKFN0cmluZylyZXFOU0RlY2wuZ2V0KGtleSk7Ci0gICAgICAgIGlmKGRlY2xOUy5lcXVhbHMoQ29uc3RhbnRzLk5TX1VSSV9YU0RfMTk5OSkgfHwgZGVjbE5TLmVxdWFscyhDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAwKSkKLSAgICAgICAgIHsKLSAgICAgICAgICBkZWNsTlMgPSBDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxOwotICAgICAgICB9Ci0gICAgICAgIHhzZFN0cmluZy5hcHBlbmQoIiAiKS5hcHBlbmQoa2V5KS5hcHBlbmQoIj1cIiIpLmFwcGVuZChkZWNsTlMpLmFwcGVuZCgiXCIiKTsKLSAgICAgIH0KLQotICAgIH0KLSAgICB4c2RTdHJpbmcuYXBwZW5kKCI+Iik7Ci0gICAgaWYgKHJlcXVpcmVkTmFtZXNwYWNlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGlSZXF1aXJlZE5hbWVzcGFjZXMgPSByZXF1aXJlZE5hbWVzcGFjZXMuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpUmVxdWlyZWROYW1lc3BhY2VzLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIG5zID0gKFN0cmluZylpUmVxdWlyZWROYW1lc3BhY2VzLm5leHQoKTsKLQotICAgICAgICB4c2RTdHJpbmcKLSAgICAgICAgICAuYXBwZW5kKCI8IikKLSAgICAgICAgICAuYXBwZW5kKG5hbWVQcmVmaXgpCi0gICAgICAgICAgLmFwcGVuZChJTVBPUlQpCi0gICAgICAgICAgLmFwcGVuZCgiICIpCi0gICAgICAgICAgLmFwcGVuZChOQU1FU1BBQ0UpCi0gICAgICAgICAgLmFwcGVuZCgiPVwiIikKLSAgICAgICAgICAuYXBwZW5kKG5zKQotICAgICAgICAgIC5hcHBlbmQoIlwiICIpCi0gICAgICAgICAgLmFwcGVuZChTQ0hFTUFMT0NBVElPTikKLSAgICAgICAgICAuYXBwZW5kKCI9XCIiKQotICAgICAgICAgIC5hcHBlbmQobnMpCi0gICAgICAgICAgLmFwcGVuZCgiXCIvPiIpOwotICAgICAgfQotCi0gICAgfQotICAgIHhzZFN0cmluZy5hcHBlbmQoIlxuIik7Ci0KLSAgICAvLyBjYWxsIHRoZSBtZXRob2QgcmVjdXJzaXZlbHkgZm9yIGVhY2ggY2hpbGQgZWxlbWVudAotICAgIE5vZGVMaXN0IGNoaWxkTm9kZXMgPSBlbGVtLmdldENoaWxkTm9kZXMoKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGROb2Rlcy5nZXRMZW5ndGgoKSB8fCBpIDwgNTsgaSsrKQotICAgIHsKLSAgICAgIE5vZGUgbiA9IGNoaWxkTm9kZXMuaXRlbShpKTsKLSAgICAgIC8vIHdlIG9ubHkgd2FudCBub2RlcyB0aGF0IGFyZSBFbGVtZW50cwotICAgICAgaWYgKG4gaW5zdGFuY2VvZiBFbGVtZW50KQotICAgICAgewotICAgICAgICBFbGVtZW50IGNoaWxkID0gKEVsZW1lbnQpbjsKLSAgICAgICAgeHNkU3RyaW5nLmFwcGVuZChjcmVhdGVYU0RTdHJpbmdSZWN1cnNpdmVseShjaGlsZCwgZWxlbWVudHMsIG51bGwsIG51bGwsIGZpbGVsb2NhdGlvbikpOwotICAgICAgfQotICAgIH0KLQotICAgIHhzZFN0cmluZy5hcHBlbmQoIjwvIikuYXBwZW5kKGVsZW0uZ2V0VGFnTmFtZSgpKS5hcHBlbmQoIj4iKTsKLQotICAgIHJldHVybiB4c2RTdHJpbmcudG9TdHJpbmcoKTsKLQotICB9Ci0gIC8qKgotICAgKiBHZXQgYSBsaXN0IG9mIGFsbCB0aGUgbmFtZXNwYWNlcyB0aGF0IGFyZSB1c2VkIGZvciBlbGVtZW50cyBvciB0eXBlcyBpbiB0aGUgc2NoZW1hLgotICAgKiBUaGVzZSBhcmUgdGhlIHJlcXVpcmVkIG5hbWVzcGFjZXMgaW4gb3JkZXIgdG8gZW5zdXJlIHRoYXQgYWxsIHRoZSBlbG1lbnRzIGFyZSB2YWxpZC4KLSAgICogCi0gICAqIEBwYXJhbSBlbGVtIFRoZSBlbGVtZW50IHRvIGNoZWNrIGZvciByZXF1aXJlZCBuYW1lc3BhY2VzLgotICAgKiBAcmV0dXJuIEEgbGlzdCBvZiByZXF1aXJlZCBuYW1lc3BhY2VzIGZvciB0aGUgZWxlbWVudCBhbmQgYWxsIGl0cyBjaGlsZHJlbi4KLSAgICovCi0gIHByb3RlY3RlZCBMaXN0IGdldFJlcXVpcmVkTmFtZXNwYWNlcyhFbGVtZW50IGVsZW0pCi0gIHsKLSAgICBMaXN0IG5hbWVzcGFjZSA9IG5ldyBWZWN0b3IoKTsKLQotICAgIC8vIGNhbGwgdGhlIG1ldGhvZCByZWN1cnNpdmVseSBmb3IgZWFjaCBjaGlsZCBlbGVtZW50Ci0gICAgLy8gcmVnaXN0ZXIgYWxsIHRoZSBjaGlsZCB0eXBlcyBmaXJzdAotICAgIE5vZGVMaXN0IGNoaWxkTm9kZXMgPSBlbGVtLmdldENoaWxkTm9kZXMoKTsKLSAgICBpbnQgbnVtQ2hpbGRyZW4gPSBjaGlsZE5vZGVzLmdldExlbmd0aCgpOwotICAgIC8vIFRPRE86IHdoeSBpcyB0aGVyZSBhIDwgNSBjb25kaXRpb24/Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1DaGlsZHJlbiAvKnx8IGkgPCA1Ki87IGkrKykKLSAgICB7Ci0gICAgICBOb2RlIG4gPSBjaGlsZE5vZGVzLml0ZW0oaSk7Ci0gICAgICAvLyB3ZSBvbmx5IHdhbnQgbm9kZXMgdGhhdCBhcmUgRWxlbWVudHMKLSAgICAgIGlmIChuIGluc3RhbmNlb2YgRWxlbWVudCkKLSAgICAgIHsKLSAgICAgICAgRWxlbWVudCBjaGlsZCA9IChFbGVtZW50KW47Ci0gICAgICAgIExpc3QgY2hpbGRucyA9IGdldFJlcXVpcmVkTmFtZXNwYWNlcyhjaGlsZCk7Ci0gICAgICAgIGZvciAoaW50IGogPSBjaGlsZG5zLnNpemUoKSAtIDE7IGogPj0gMDsgai0tKQotICAgICAgICB7Ci0gICAgICAgICAgU3RyaW5nIG5zID0gKFN0cmluZyljaGlsZG5zLmdldChqKTsKLSAgICAgICAgICAKLSAgICAgICAgICBpZiAoIW5hbWVzcGFjZS5jb250YWlucyhucykpCi0gICAgICAgICAgewotICAgICAgICAgICAgbmFtZXNwYWNlLmFkZChucyk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIEFkZCB0aGUgbmFtZXNwYWNlIG9mIHRoZSBjdXJyZW50IGVsZW1lbnQKLSAgICBTdHJpbmcgZWxlbU5TID0gZWxlbS5nZXRQcmVmaXgoKTsKLSAgICAvLyBpZiB0aGVyZSBpcyBubyBuYW1lc3BhY2UgcHJlZml4IHNldCBpdCB0byB0aGUgZW1wdHkgcHJlZml4LgotICAgIGlmKGVsZW1OUyA9PSBudWxsKQotICAgIHsKLSAgICAgIGVsZW1OUyA9ICIiOwotICAgIH0KLSAgICBpZiAoIW5hbWVzcGFjZS5jb250YWlucyhlbGVtTlMuaW50ZXJuKCkpKQotICAgICB7Ci0gICAgICBuYW1lc3BhY2UuYWRkKGVsZW1OUy5pbnRlcm4oKSk7Ci0gICAgfQotICAgIC8vIG5vdyBhZGQgYWxsIG9mIHRoZSBjdXJyZW50IGVsZW1lbnQncyBuYW1lc3BhY2VzCi0gICAgLy8gZG9uJ3QgaW5jbHVkZSBpbXBvcnQgYW5kIHNjaGVtYSBlbGVtZW50cwotICAgIFN0cmluZyBsb2NhbG5hbWUgPSBlbGVtLmdldExvY2FsTmFtZSgpOwotICAgIGlmICghbG9jYWxuYW1lLmVxdWFscyhJTVBPUlQpICYmICFsb2NhbG5hbWUuZXF1YWxzKElOQ0xVREUpICYmICFsb2NhbG5hbWUuZXF1YWxzKFNDSEVNQSkpCi0gICAgewotICAgICAgTmFtZWROb2RlTWFwIGF0dHMgPSBlbGVtLmdldEF0dHJpYnV0ZXMoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0cy5nZXRMZW5ndGgoKTsgaSsrKQotICAgICAgewotICAgICAgICBOb2RlIG4gPSBhdHRzLml0ZW0oaSk7Ci0KLSAgICAgICAgU3RyaW5nIG5vZGVOYW1lID0gbi5nZXROb2RlTmFtZSgpOwotICAgICAgICAvLyByZW1vdmVkIHJlc3RyaWN0aW9uIHRoYXQgd2UncmUgb25seSBsb29raW5nIGF0IHR5cGVzCi0gICAgICAgIC8vCQlpZiAobm9kZU5hbWUuZXF1YWxzSWdub3JlQ2FzZShUWVBFKSkKLSAgICAgICAgLy8JCXsKLSAgICAgICAgLy8gZG9uJ3QgdGFrZSBuYW1lc3BhY2UgaW5mbyBmcm9tIGF0dHJpYnV0ZXMgZGVmaW5pbmcgbmFtZXNwYWNlcy4KLSAgICAgICAgLy8gdGhhdCBpbmNsdWRlcyB4bWxucywgdGFyZ2V0TmFtZXNwYWNlCi0gICAgICAgIC8vIGRvbid0IHRha2UgbmFtZXNwYWNlIGluZm8gZnJvbSBuYW1lIGF0dHJpYnV0ZXMKLSAgICAgICAgaWYgKG5vZGVOYW1lLmluZGV4T2YoWE1MTlMpICE9IC0xIHx8IG5vZGVOYW1lLmVxdWFscyhUQVJHRVROQU1FU1BBQ0UpIHx8IG5vZGVOYW1lLmVxdWFscyhOQU1FKSkKLSAgICAgICAgewotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIFN0cmluZyBub2RlVmFsdWUgPSBuLmdldE5vZGVWYWx1ZSgpOwotICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIGludCBjb2xvbkluZGV4ID0gbm9kZVZhbHVlLmluZGV4T2YoIjoiKTsKLSAgICAgICAgLy8gRG9uJ3QgdGFrZSBuYW1lc3BhY2UgaW5mbyBmcm9tIGF0dHJpYnV0ZXMgd2l0aCB0aGUgZGVmYXVsdCBuYW1lc3BhY2UsIHRoYXQgaXMgYXR0cmlidXRlcwotICAgICAgICAvLyB0aGF0IGFyZSBub3QgcHJlZml4ZWQuIChjb2xvbkluZGV4ID09IC0xKQotICAgICAgICAvLyBJZiB0aGUgY29sb25JbmRleCBpcyBmb2xsb3dlZCBieSBhIC8gdGhlbiBpdCBpcyBhIFVSSSBhbmQgbm90Ci0gICAgICAgIC8vIG5hbWVzcGFjZSBxdWFsaWZpZWQuCi0gICAgICAgIGlmIChjb2xvbkluZGV4ID09IC0xIHx8IG5vZGVWYWx1ZS5jaGFyQXQoY29sb25JbmRleCArIDEpID09ICcvJykKLSAgICAgICAgewotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIC8vIGhlcmUgd2UgaGF2ZSBmb3VuZCBhIGNvbG9uIGRlbGltaXRlciBzbyB3ZSBuZWVkIHRoZSBuYW1lc3BhY2UgZGVmaW5lZCBoZXJlCi0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIG5vZGVWYWx1ZSA9IG5vZGVWYWx1ZS5zdWJzdHJpbmcoMCwgY29sb25JbmRleCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFuYW1lc3BhY2UuY29udGFpbnMobm9kZVZhbHVlLmludGVybigpKSkKLSAgICAgICAgewotCi0gICAgICAgICAgbmFtZXNwYWNlLmFkZChub2RlVmFsdWUuaW50ZXJuKCkpOwotICAgICAgICB9Ci0gICAgICAgIC8vCQl9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG5hbWVzcGFjZTsKLQotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBhIGxpc3Qgb2YgYWxsIHRoZSBuYW1lc3BhY2VzIHRoYXQgaGF2ZSBhbiBpbXBvcnQgc3RhdGVtZW50LgotICAgKiAKLSAgICogQHBhcmFtIGVsZW0gVGhlIHJvb3QgZWxlbWVudCBvZiB0aGUgc2NoZW1hLgotICAgKiBAcmV0dXJuIEEgbGlzdCBvZiBhbGwgdGhlIG5hbWVzcGFjZXMgdGhhdCBhcmUgaW1wb3J0ZWQuCi0gICAqLwotICBwcm90ZWN0ZWQgTGlzdCBnZXRJbXBvcnROYW1lc3BhY2VzKEVsZW1lbnQgZWxlbSkKLSAgewotICAgIExpc3QgbmFtZXNwYWNlID0gbmV3IFZlY3RvcigpOwotCi0gICAgLy8gY2FsbCB0aGUgbWV0aG9kIHJlY3Vyc2l2ZWx5IGZvciBlYWNoIGNoaWxkIGVsZW1lbnQKLSAgICAvLyByZWdpc3RlciBhbGwgdGhlIGNoaWxkIHR5cGVzIGZpcnN0Ci0gICAgTm9kZUxpc3QgY2hpbGROb2RlcyA9IGVsZW0uZ2V0Q2hpbGROb2RlcygpOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZE5vZGVzLmdldExlbmd0aCgpIHx8IGkgPCA1OyBpKyspCi0gICAgewotICAgICAgTm9kZSBuID0gY2hpbGROb2Rlcy5pdGVtKGkpOwotICAgICAgLy8gd2Ugb25seSB3YW50IG5vZGVzIHRoYXQgYXJlIEVsZW1lbnRzCi0gICAgICBpZiAobiBpbnN0YW5jZW9mIEVsZW1lbnQpCi0gICAgICB7Ci0gICAgICAgIEVsZW1lbnQgY2hpbGQgPSAoRWxlbWVudCluOwotICAgICAgICBMaXN0IGNoaWxkbnMgPSBnZXRJbXBvcnROYW1lc3BhY2VzKGNoaWxkKTsKLSAgICAgICAgZm9yIChpbnQgaiA9IGNoaWxkbnMuc2l6ZSgpIC0gMTsgaiA+PSAwOyBqLS0pCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgbnMgPSAoU3RyaW5nKWNoaWxkbnMuZ2V0KGopOwotICAgICAgICAgIGlmICghbmFtZXNwYWNlLmNvbnRhaW5zKG5zKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBuYW1lc3BhY2UuYWRkKG5zKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gaWYgdGhpcyBpcyBhbiBpbXBvcnQgZWxlbWVudCBnZXQgdGhlIG5hbWVzcGFjZSBhbmQgYWRkIGl0IHRvIHRoZSBsaXN0Ci0gICAgaWYgKGVsZW0uZ2V0TG9jYWxOYW1lKCkuZXF1YWxzSWdub3JlQ2FzZShJTVBPUlQpKQotICAgIHsKLSAgICAgIE5hbWVkTm9kZU1hcCBhdHRzID0gZWxlbS5nZXRBdHRyaWJ1dGVzKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGF0dHMuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICAgIHsKLSAgICAgICAgTm9kZSBuID0gYXR0cy5pdGVtKGkpOwotCi0gICAgICAgIFN0cmluZyBub2RlTmFtZSA9IG4uZ2V0Tm9kZU5hbWUoKTsKLSAgICAgICAgaWYgKG5vZGVOYW1lLmVxdWFsc0lnbm9yZUNhc2UoTkFNRVNQQUNFKSkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZyBub2RlVmFsdWUgPSBuLmdldE5vZGVWYWx1ZSgpOwotICAgICAgICAgIGlmICghbmFtZXNwYWNlLmNvbnRhaW5zKG5vZGVWYWx1ZS5pbnRlcm4oKSkpCi0gICAgICAgICAgewotCi0gICAgICAgICAgICBuYW1lc3BhY2UuYWRkKG5vZGVWYWx1ZS5pbnRlcm4oKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG5hbWVzcGFjZTsKLQotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybiBhIEhhc2h0YWJsZSB3aXRoIG5hbWVzcGFjZSBwcmVmaXhlcyBhcyBrZXlzIGZyb20gdGhlIGdpdmVuIGVsZW1lbnQuCi0gICAqIAotICAgKiBAcGFyYW0gZWxlbSBUaGUgcm9vdCBlbGVtZW50IG9mIHRoZSBzY2hlbWEuCi0gICAqIEByZXR1cm4gQSBoYXNodGFibGUgd2l0aCBuYW1lc3BhY2UgcHJlZml4ZXMgbWFwcGVkIHRvIG5hbWVzcGFjZXMuCi0gICAqLwotICBwcm90ZWN0ZWQgSGFzaHRhYmxlIGdldE5TUmVzb2x2ZXIoRWxlbWVudCBlbGVtKQotICB7Ci0gICAgSGFzaHRhYmxlIG5zUmVzb2x2ZXIgPSBuZXcgSGFzaHRhYmxlKCk7Ci0KLSAgICBOYW1lZE5vZGVNYXAgYXR0cyA9IGVsZW0uZ2V0QXR0cmlidXRlcygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0cy5nZXRMZW5ndGgoKTsgaSsrKQotICAgIHsKLSAgICAgIE5vZGUgbiA9IGF0dHMuaXRlbShpKTsKLQotICAgICAgU3RyaW5nIG5vZGVOYW1lID0gbi5nZXROb2RlTmFtZSgpOwotICAgICAgaWYgKG5vZGVOYW1lLmluZGV4T2YoWE1MTlMpICE9IC0xKQotICAgICAgewotICAgICAgICBTdHJpbmcgbm9kZVZhbHVlID0gbi5nZXROb2RlVmFsdWUoKTsKLSAgICAgICAgU3RyaW5nIG5hbWVQcmVmaXggPSBub2RlTmFtZTsKLQotICAgICAgICBpZiAobmFtZVByZWZpeC5lcXVhbHNJZ25vcmVDYXNlKFhNTE5TKSkKLSAgICAgICAgewotICAgICAgICAgIG5hbWVQcmVmaXggPSAiIjsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBuYW1lUHJlZml4ID0gbmFtZVByZWZpeC5zdWJzdHJpbmcoNik7Ci0gICAgICAgIH0KLSAgICAgICAgbnNSZXNvbHZlci5wdXQobmFtZVByZWZpeCwgbm9kZVZhbHVlKTsKLQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnNSZXNvbHZlcjsKLQotICB9Ci0KLSAgLyoqCi0gICAqIFJlc29sdmUgdGhlIG5hbWVzcGFjZXMgaW4gdGhlIGdpdmVuIG5hbWVzcGFjZXMgbGlzdCB3aXRoIHRoZSB0d28gbmFtZXNwYWNlCi0gICAqIHJlc29sdmVyIGhhc2h0YWJsZXMgcHJvdmlkZWQuIFJldHVybiBhIGxpc3Qgb2YgYWxsIHRoZSBuYW1lc3BhY2UgdGhhdCBuZWVkCi0gICAqIHRvIGJlIGRlY2xhcmVkLgotICAgKiBGaXJzdCByZXNvbHZlIGFnYWluc3QgdGhlIGxvY2FsIG5hbWVzcGFjZXMgd2l0aCBuc1Jlc29sdmVyLgotICAgKiBOZXh0IHJlc29sdmUgYWdhaW5zdCB0aGUgcGFyZW50IG5hbWVzcGFjZSB3aXRoIHBhcmVudE5TUmVzb2x2ZXIuCi0gICAqIEEgc2lkZSBhZmZlY3Qgb2YgdGhpcyBtZXRob2QgaXMgdGhlIG5hbWVzcGFjZXMgbGlzdCBpcyBsZWZ0IHdpdGggb25seSB0aG9zZSAKLSAgICogbmFtZXNwYWNlcyB0aGF0IGFyZSByZXNvbHZlZCBhbmQgdGhlIHJlc29sdmVkIGVudGl0aWVzIGFyZSBwbGFjZWQgaW4gdGhlIAotICAgKiBsaXN0IGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIGVudHJpZXMuCi0gICAqIEZvciBleC4gSWYgeW91IHByb3ZpZGUgYSBsaXN0IHN1Y2ggYXMge3hzZCwgaW50Zn0gYW5kIG9ubHkgeHNkIGNhbiBiZSByZXNvbHZlZAotICAgKiB5b3Ugd2lsbCBlbmQgdXAgd2l0aCB0aGUgbGlzdCB7aHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWF9Ci0gICAqIAotICAgKiBAcGFyYW0gbmFtZXNwYWNlcyBUaGUgbGlzdCBvZiBuYW1lc3BhY2VzIHRvIHJlc29sdmUuCi0gICAqIEBwYXJhbSBuc1Jlc29sdmVyIFRoZSBoYXNodGFibGUgdG8gYmUgdXNlZCBhcyB0aGUgbG9jYWwgcmVzb2x2ZXIuCi0gICAqIEBwYXJhbSBwYXJlbnROU1Jlc29sdmVyIFRoZSBoYXNodGFibGUgdG8gYmUgdXNlZCBhcyB0aGUgcGFyZW50IG5hbWVzcGFjZSByZXNvbHZlci4KLSAgICogQHJldHVybiBBIEhhc2h0YWJsZSBvZiBuYW1lc3BhY2VzIHRoYXQgbXVzdCBiZSBkZWNsYXJlZC4KLSAgICovCi0gIHByb3RlY3RlZCBIYXNodGFibGUgcmVzb2x2ZU5hbWVzcGFjZXMoTGlzdCBuYW1lc3BhY2VzLCBIYXNodGFibGUgbnNSZXNvbHZlciwgSGFzaHRhYmxlIHBhcmVudE5TUmVzb2x2ZXIpCi0gIHsKLSAgCUhhc2h0YWJsZSByZXFOU0RlY2wgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgaWYgKG5hbWVzcGFjZXMgIT0gbnVsbCAmJiAhbmFtZXNwYWNlcy5pc0VtcHR5KCkgJiYgbnNSZXNvbHZlciAhPSBudWxsKQotICAgIHsKLSAgICAgIGZvciAoaW50IGkgPSBuYW1lc3BhY2VzLnNpemUoKSAtIDE7IGkgPj0gMDsgaS0tKQotICAgICAgewotICAgICAgICBTdHJpbmcgbnMgPSAoU3RyaW5nKW5hbWVzcGFjZXMuZ2V0KGkpOwotICAgICAgICAvLyBSZW1vdmUgdGhlIG5hbWVzcGFjZSBmcm9tIHRoZSBsaXN0LgotICAgICAgICBuYW1lc3BhY2VzLnJlbW92ZShpKTsKLSAgICAgICAgLy8gRmlyc3QgdHJ5IHRvIHJlc29sdmUgYWdhaW5zdCB0aGUgbG9jYWwgbmFtZXNwYWNlIHJlc29sdmVyLgotICAgICAgICBpZiAobnNSZXNvbHZlci5jb250YWluc0tleShucykpCi0gICAgICAgIHsKLSAgICAgICAgICBPYmplY3QgcmVzb2x2ZWROUyA9IG5zUmVzb2x2ZXIuZ2V0KG5zKTsKLSAgICAgICAgICAvLyBPbmx5IGFkZCB0aGUgbmFtZXNwYWNlIGlmIGl0J3Mgbm90IGFscmVhZHkgaW4gdGhlIGxpc3QuCi0gICAgICAgICAgaWYoIW5hbWVzcGFjZXMuY29udGFpbnMocmVzb2x2ZWROUykpCi0gICAgICAgICAgewotICAgICAgICAgICAgbmFtZXNwYWNlcy5hZGQoaSwgbnNSZXNvbHZlci5nZXQobnMpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLy8gTmV4dCB0cnkgdG8gcmVzb2x2ZSBhZ2FpbnN0IHRoZSBwYXJlbnQgbmFtZXNwYWNlIHJlc29sdmVyLgotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgCWlmIChucy5lcXVhbHMoIiIpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBucyA9IFhNTE5TOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBucyA9IFhNTE5TICsgIjoiICsgbnM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocGFyZW50TlNSZXNvbHZlci5jb250YWluc0tleShucykpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIE9iamVjdCByZXNvbHZlZE5TID0gcGFyZW50TlNSZXNvbHZlci5nZXQobnMpOwotICAgICAgICAgICAgICAvLyBPbmx5IGFkZCB0aGUgbmFtZXNwYWNlIGlmIGl0J3Mgbm90IGFscmVhZHkgaW4gdGhlIGxpc3QuCi0gICAgICAgICAgICAgIGlmKCFuYW1lc3BhY2VzLmNvbnRhaW5zKHJlc29sdmVkTlMpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbmFtZXNwYWNlcy5hZGQoaSwgcmVzb2x2ZWROUyk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgLy8gU3RpbGwgbmVlZCB0byBkZWNsYXJlIHRoZSBuYW1lc3BhY2UgdGhvdWdoLgotICAgICAgICAgICAgICByZXFOU0RlY2wucHV0KG5zLCByZXNvbHZlZE5TKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXFOU0RlY2w7Ci0gIH0KLQotICAvKioKLSAgICogUmVtb3ZlIGFueSBuYW1lc3BhY2UgZnJvbSB0aGUgbmFtZXNwYWNlcyBsaXN0IGlmIGl0IGlzIGluIHRoZSBpbXBvcnQgbGlzdC4KLSAgICogCi0gICAqIEBwYXJhbSBuYW1lc3BhY2VzIFRoZSBuYW1lc3BhY2VzIGxpc3QuCi0gICAqIEBwYXJhbSBpbXBvcnRlZE5hbWVzcGFjZXMgQSBsaXN0IG9mIGltcG9ydGVkIG5hbWVzcGFjZXMuCi0gICAqIEByZXR1cm4gVGhlIGxpc3Qgb2YgbmFtZXNwYWNlcyB3aXRob3V0IHRoZSBpbXBvcnRlZCBuYW1lc3BhY2VzLgotICAgKi8KLSAgcHJvdGVjdGVkIExpc3QgcmVtb3ZlSW1wb3J0cyhMaXN0IG5hbWVzcGFjZXMsIExpc3QgaW1wb3J0ZWROYW1lc3BhY2VzKQotICB7Ci0gICAgaWYgKG5hbWVzcGFjZXMgIT0gbnVsbCAmJiBpbXBvcnRlZE5hbWVzcGFjZXMgIT0gbnVsbCAmJiAhaW1wb3J0ZWROYW1lc3BhY2VzLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpSW1wb3J0ZWROUyA9IGltcG9ydGVkTmFtZXNwYWNlcy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGlJbXBvcnRlZE5TLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIGlOUyA9IChTdHJpbmcpaUltcG9ydGVkTlMubmV4dCgpOwotCi0gICAgICAgIG5hbWVzcGFjZXMucmVtb3ZlKGlOUyk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBuYW1lc3BhY2VzOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlbW92ZSB0aGUgbG9jYWwgbmFtZXNwYWNlIGZvciB0aGUgc2NoZW1hIGFuZCB0aGUgbmFtZXNwYWNlcyBsaXN0ZWQgaW4gdGhlIGlnbm9yZU5hbWVzcGFjZXMKLSAgICogbGlzdCBmcm9tIHRoZSBuYW1lc3BhY2VzIGxpc3QgcHJvdmlkZWQuCi0gICAqIAotICAgKiBAcGFyYW0gbmFtZXNwYWNlcyBUaGUgbGlzdCBvZiBsb2NhbCBuYW1lc3BhY2VzLgotICAgKiBAcGFyYW0gZWxlbSBUaGUgcm9vdCBlbGVtZW50IG9mIHRoZSBzY2hlbWEuCi0gICAqIEByZXR1cm4gVGhlIGxpc3Qgb2YgbmFtZXNwYWNlcyB3aXRoIHRoZSBsb2NhbCBuYW1lc3BhY2VzIHJlbW92ZWQuCi0gICAqLwotICBwcm90ZWN0ZWQgTGlzdCByZW1vdmVMb2NhbE5hbWVzcGFjZXMoTGlzdCBuYW1lc3BhY2VzLCBFbGVtZW50IGVsZW0pCi0gIHsKLSAgICBpZiAobmFtZXNwYWNlcyAhPSBudWxsICYmIGVsZW0gIT0gbnVsbCkKLSAgICB7Ci0gICAgICBTdHJpbmcgbnMgPSBlbGVtLmdldEF0dHJpYnV0ZShUQVJHRVROQU1FU1BBQ0UpOwotICAgICAgbmFtZXNwYWNlcy5yZW1vdmUobnMpOwotCi0gICAgICBmb3IgKGludCBpID0gaWdub3JlTmFtZXNwYWNlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkKLSAgICAgIHsKLSAgICAgICAgLy8ga2VlcCByZW1vdmluZyB0aGUgbmFtZXNwYWNlIHVudGlsIGl0IGlzIG5vdCBpbiB0aGUgbGlzdAotICAgICAgICBpZiAobmFtZXNwYWNlcy5yZW1vdmUoaWdub3JlTmFtZXNwYWNlc1tpXSkpCi0gICAgICAgIHsKLSAgICAgICAgICBpKys7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG5hbWVzcGFjZXM7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIFNPQVAgZW5jb2RpbmcgbmFtZXNwYWNlIGlzIGluIHRoZSBsaXN0IG9mIHJlcXVpcmVkIG5hbWVzcGFjZXMsCi0gICAqIGZhbHNlIG90aGVyd2lzZS4KLSAgICogCi0gICAqIEBwYXJhbSByZXFucyBUaGUgbGlzdCBvZiBuYW1lc3BhY2VzIHRvIGNoZWNrIGZvciB0aGUgU09BUCBlbmNvZGluZyBuYW1lc3BhY2UuCi0gICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgU09BUCBlbmNvZGluZyBuYW1lc3BhY2VzIGlzIGluIHRoZSBsaXN0LCBmYWxzZSBvdGhlcndpc2UuCi0gICAqLwotICBwcm90ZWN0ZWQgYm9vbGVhbiBjaGVja1NPQVBFbmNvZGluZ1JlcXVpcmVkKExpc3QgcmVxbnMpCi0gIHsKLSAgICBpZiAocmVxbnMuY29udGFpbnMoU09BUF9FTkNPRElOR19VUkkpKQotICAgIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL0lubGluZVNjaGVtYVZhbGlkYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC94c2QvSW5saW5lU2NoZW1hVmFsaWRhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlYzA1YmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC94c2QvSW5saW5lU2NoZW1hVmFsaWRhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwueHNkOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuVHlwZXM7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLlVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudDsKLQotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLWltcG9ydCBjb20uaWJtLndzZGwuQ29uc3RhbnRzOwotCi0vKioKLSAqIFBsdWdpbiB2YWxpZGF0b3IgZm9yIHRoZSBXU0RMIFZhbGlkYXRpb24gZnJhbWV3b3JrLiBWYWxpZGF0ZXMgaW5saW5lIHNjaGVtYSBmb3VuZCBpbiBhIFdTREwgZG9jdW1lbnQuCi0gKiAKLSAqIEBhdXRob3IgTGF3cmVuY2UgTWFuZGVsIChsbWFuZGVsQGNhLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBJbmxpbmVTY2hlbWFWYWxpZGF0b3IKLXsKLSAgTGlzdCBlbGVtZW50cyA9IG51bGw7Ci0KLQotICBwdWJsaWMgTWFwIHZhbGlkYXRlKE9iamVjdCBlbGVtZW50LCBMaXN0IHBhcmVudHMsIFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gIAllbGVtZW50cyA9IG5ldyBWZWN0b3IoKTsKLSAgICBVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZWxlbSA9IChVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpIGVsZW1lbnQ7Ci0gICAgRGVmaW5pdGlvbiB3c2RsRGVmaW5pdGlvbiA9IChEZWZpbml0aW9uKSBwYXJlbnRzLmdldChwYXJlbnRzLnNpemUoKSAtIDEpOwotICAgIC8vIEFkZCBpbiB0aGUgbmFtZXNwYWNlcyBkZWZpbmVkIGluIHRoZSBkb2MgYWxyZWFkeSB0aGF0IGFyZW4ndCBkZWZpbmVkIGxvY2FsbHkgaW4gdGhpcyBzY2hlbWEuCi0gICAgLy8gVGhlcmUgaXMgbm8gbmVlZCB0byBjaGVjayBmb3IgbmFtZXNwYWNlcyBvdGhlciB0aGVuIGluIHRoZSBkZWZpbnRpb25zIGFuZCB0eXBlcyBlbGVtZW50cyBhcwotICAgIC8vIGlubGluZSBzY2hlbWEgY2FuIG5vdCBoYXZlIGFueSBvdGhlciBwYXJlbnRzIGFuZCBtdXN0IGhhdmUgdGhlcmUgdHdvIHBhcmVudHMuCi0gICAgLy8gRmlyc3QgdGFrZSBjYXJlIG9mIHRoZSBkZWZpbml0aW9ucyBlbGVtZW50Ci0KLSAgICAvLyBjcmVhdGUgdGhlIGlubGluZSBzY2hlbWEgc3RyaW5nCi0JRWxlbWVudCB3M2NlbGVtZW50ID0gZWxlbS5nZXRFbGVtZW50KCk7Ci0JSGFzaHRhYmxlIHBhcmVudG5hbWVzcGFjZXMgPSBnZXROYW1lc3BhY2VEZWNsYXJhdGlvbnNGcm9tUGFyZW50cyh3c2RsRGVmaW5pdGlvbix3M2NlbGVtZW50KTsKLQlTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlID0gdzNjZWxlbWVudC5nZXRBdHRyaWJ1dGUoQ29uc3RhbnRzLkFUVFJfVEFSR0VUX05BTUVTUEFDRSk7Ci0JLy8gaWYgdGhlIHRhcmdldE5hbWVzcGFjZSBoYXNuJ3QgYmVlbiBkZWZpbmVkIGZvciB0aGUgc2NoZW1hIHVzZSB0aGUgCi0JLy8gdGFyZ2V0TmFtZXNwYWNlIG9mIHRoZSBkZWZpbml0aW9ucyBlbGVtZW50Ci0JLyppZih0YXJnZXROYW1lc3BhY2UgPT0gbnVsbCB8fCB0YXJnZXROYW1lc3BhY2UuZXF1YWxzKCIiKSkKLQkgewotCSAgdGFyZ2V0TmFtZXNwYWNlID0gd3NkbERlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0JICB3M2NlbGVtZW50LnNldEF0dHJpYnV0ZShDb25zdGFudHMuQVRUUl9UQVJHRVRfTkFNRVNQQUNFLHRhcmdldE5hbWVzcGFjZSk7Ci0JfSovCi0KLQlTdHJpbmcgeHNkID0gSW5saW5lU2NoZW1hR2VuZXJhdG9yLmNyZWF0ZVhTRFN0cmluZyh3M2NlbGVtZW50LCBlbGVtZW50cywgZmlsZW5hbWUsIHBhcmVudG5hbWVzcGFjZXMpOwotCi0gICAgLy8gSWYgdGhlIG5hbWVzcGFjZSBnaXZlbiBpcyBvbmUgb2YgdGhlIG9sZCBzY2hlbWEgbmFtZXNwYWNlcyBwcm9kdWNlIGEgd2FybmluZy4KLSAgICBTdHJpbmcgbmFtZXNwYWNlID0gdzNjZWxlbWVudC5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICBpZihuYW1lc3BhY2UuZXF1YWxzKENvbnN0YW50cy5OU19VUklfWFNEXzE5OTkpIHx8IG5hbWVzcGFjZS5lcXVhbHMoQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMCkpCi0gICAgewotICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiQW4gb2xkIHZlcnNpb24gb2YgdGhlIHNjaGVtYSBuYW1lc3BhY2UgaXMgc3BlY2lmaWVkLiIpOwotICAgIH0KLQotICAgIC8vIG5vdyBjcmVhdGUgYW5kIGNhbGwgdGhlIHZhbGlkYXRvciBmb3IgdGhlIGlubGluZSBzY2hlbWEKLSAgICBYU0RWYWxpZGF0b3Igc2NoZW1hdiA9IG5ldyBYU0RWYWxpZGF0b3IoKTsKLQotICAgIC8vU3RyaW5nIGZpbGVMb2NhdGlvbiA9IG5ldyBVUkwodmFsaWRhdG9ybWFuYWdlci5nZXRGaWxlbmFtZSgpKS5nZXRQYXRoKCk7Ci0gICAgSW5saW5lWFNEUmVzb2x2ZXIgaW5saW5lRW50aXR5UmVzb2x2ZXIgPQotICAgICAgZ2V0RW50aXR5UmVzb2x2ZXIod3NkbERlZmluaXRpb24sIChUeXBlcykgcGFyZW50cy5nZXQoMCksIGZpbGVuYW1lLCB0YXJnZXROYW1lc3BhY2UpOwotICAgIC8vCWFkZCBpbiB0aGUgZXh0ZXJuYWwgWFNEIENhdGFsb2cgdG8gcmVzb2x2ZSBzY2hlbWFzIG9mZmxpbmUKLSAgICBYTUxFbnRpdHlSZXNvbHZlckNoYWluIGVudGl0eVJlc29sdmVyQ2hhaW4gPSBuZXcgWE1MRW50aXR5UmVzb2x2ZXJDaGFpbigpOwotICAgIGVudGl0eVJlc29sdmVyQ2hhaW4uYWRkRW50aXR5UmVzb2x2ZXIoaW5saW5lRW50aXR5UmVzb2x2ZXIpOwotICAgIGVudGl0eVJlc29sdmVyQ2hhaW4uYWRkRW50aXR5UmVzb2x2ZXIobmV3IEZpbGVFbnRpdHlSZXNvbHZlcigpKTsKLSAgICBlbnRpdHlSZXNvbHZlckNoYWluLmFkZEVudGl0eVJlc29sdmVyKFhNTENhdGFsb2dSZXNvbHZlci5nZXRJbnN0YW5jZSgpKTsKLSAgICBzY2hlbWF2LnZhbGlkYXRlSW5saW5lU2NoZW1hKHhzZCwgdGFyZ2V0TmFtZXNwYWNlLCBmaWxlbmFtZSwgZW50aXR5UmVzb2x2ZXJDaGFpbiwgaW5saW5lRW50aXR5UmVzb2x2ZXIpOwotCi0gICAgLy8gY2hlY2sgaWYgdGhlIFNPQVAgRW5jb2RpbmcgbmFtZXNwYWNlIGlzIHJlcXVpcmVkIGJ1dCBub3QgaW1wb3J0ZWQKLSAgICBpZiAoSW5saW5lU2NoZW1hR2VuZXJhdG9yLnNvYXBFbmNvZGluZ1JlcXVpcmVkTm90SW1wb3J0ZWQoZWxlbS5nZXRFbGVtZW50KCksIGZpbGVuYW1lLHBhcmVudG5hbWVzcGFjZXMpKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlRoZSBpbmxpbmUgc2NoZW1hIHVzZXMgYW4gZWxlbWVudCBvciB0eXBlIGZyb20gIgotICAgICAgICArICJ0aGUgU09BUCBlbmNvZGluZyBuYW1lc3BhY2UgYnV0IHRoZSBuYW1lc3BhY2UgaGFzIG5vdCBiZWVuIGltcG9ydGVkLiAiCi0gICAgICAgICsgIlRoZSBTT0FQIGVuY29kaW5nIG5hbWVzcGFjZSBzaG91bGQgYmUgaW1wb3J0ZWQgd2l0aCBhbiBpbXBvcnQgIgotICAgICAgICArICJzdGF0ZW1lbnQgYmVmb3JlIGl0IGlzIHVzZWQuIik7Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlIHNjaGVtYSBpc24ndCB2YWxpZAotICAgIGlmICghc2NoZW1hdi5pc1ZhbGlkKCkpCi0gICAgewotICAgICAgLy8gR2F0aGVyaW5nIGFsbCB0aGUgZXJyb3JzCi0gICAgICBTdHJpbmdCdWZmZXIgZXhjZXB0aW9uID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgSXRlcmF0b3IgaSA9IHNjaGVtYXYuZ2V0RXJyb3JzKCkuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgZXhjZXB0aW9uLmFwcGVuZChpLm5leHQoKSkuYXBwZW5kKCdcbicpOwotICAgICAgfQotICAgICAgLy8gdGhyb3cgYW4gZXhjZXB0aW9uCi0gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKGV4Y2VwdGlvbi50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgLy8gaWYgdGhlIHNjaGVtYSBpcyB2YWxpZAotICAgIGVsc2UKLSAgICB7Ci0gICAgICBNYXAgbWFwID0gbmV3IEhhc2hNYXAoMSk7Ci0gICAgICBtYXAucHV0KHRhcmdldE5hbWVzcGFjZSwgc2NoZW1hdi5nZXRYU01vZGVsKCkpOwotICAgICAgcmV0dXJuIG1hcDsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGFuIGVudGl0eSByZXNvbHZlciB0aGF0IHdpbGwgcmVzb2x2ZSBpbmxpbmUgc2NoZW1hcy4gIEV2ZXJ5IGlubGluZSBzY2hlbWEgaXMgcHJlcmVnaXN0ZXJlZCB3aXRoCi0gICAqIHRoZSByZXNvbHZlci4KLSAgICogCi0gICAqIEBwYXJhbSB3c2RsRGVmaW5pdGlvbiBUaGUgV1NETCBkZWZpbml0aW9ucyBlbGVtZW50LgotICAgKiBAcGFyYW0gdHlwZXMgVGhlIHR5cGVzIGVsZW1lbnQuCi0gICAqIEBwYXJhbSByZWZlcmVuY2VMb2NhdGlvbiBUaGUgbG9jYXRpb24gb2YgdGhlIGZpbGUgdGhhdCBjb250YWlucyB0aGlzIHNjaGVtYS4KLSAgICogQHBhcmFtIHRhcmdldE5hbWVzcGFjZSBUaGUgdGFyZ2V0TmFtZXNwYWNlIG9mIHRoZSBzY2hlbWEuCi0gICAqIEByZXR1cm4gQW4gZW50aXR5IHJlc29sdmVyIHRoYXQgY2FuIHJlc29sdmUgaW5saW5lIHNjaGVtYXMuCi0gICAqLwotICBwcm90ZWN0ZWQgSW5saW5lWFNEUmVzb2x2ZXIgZ2V0RW50aXR5UmVzb2x2ZXIoRGVmaW5pdGlvbiB3c2RsRGVmaW5pdGlvbiwgVHlwZXMgdHlwZXMsIFN0cmluZyByZWZlcmVuY2VMb2NhdGlvbiwgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSkKLSAgewotICAgIElubGluZVhTRFJlc29sdmVyIGVudGl0eVJlc29sdmVyID0gbmV3IElubGluZVhTRFJlc29sdmVyKCk7Ci0vLyAgICBlbnRpdHlSZXNvbHZlci5zZXRSZWZlcmVuY2VMb2NhdGlvbihyZWZlcmVuY2VMb2NhdGlvbik7Ci0gICAgTGlzdCBzY2hlbWFzID0gdHlwZXMuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgaWYgKHNjaGVtYXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBJdGVyYXRvciBpU2NoZW1hcyA9IHNjaGVtYXMuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpU2NoZW1hcy5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCBleHRFbGVtID0gKFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCkgaVNjaGVtYXMubmV4dCgpOwotICAgICAgICBTdHJpbmcgdGhpc05hbWVzcGFjZSA9IGV4dEVsZW0uZ2V0RWxlbWVudCgpLmdldEF0dHJpYnV0ZShDb25zdGFudHMuQVRUUl9UQVJHRVRfTkFNRVNQQUNFKTsKLSAgICAgICAgaWYgKHRoaXNOYW1lc3BhY2UgIT0gbnVsbCAmJiAhdGhpc05hbWVzcGFjZS5lcXVhbHNJZ25vcmVDYXNlKHRhcmdldE5hbWVzcGFjZSkpCi0gICAgICAgIHsKLQotICAgICAgICAJRWxlbWVudCBlbGVtZW50ID0gZXh0RWxlbS5nZXRFbGVtZW50KCk7Ci0JCQkKLS8vCQkJY3JlYXRlIHRoZSBpbmxpbmUgc2NoZW1hIHN0cmluZwotCQkJIC8vRWxlbWVudCB3M2NlbGVtZW50ID0gZWxlbS5nZXRFbGVtZW50KCk7Ci0JCQkgSGFzaHRhYmxlIHBhcmVudG5hbWVzcGFjZXMgPSBnZXROYW1lc3BhY2VEZWNsYXJhdGlvbnNGcm9tUGFyZW50cyh3c2RsRGVmaW5pdGlvbixlbGVtZW50KTsKLQkJCSBTdHJpbmcgeHNkID0gSW5saW5lU2NoZW1hR2VuZXJhdG9yLmNyZWF0ZVhTRFN0cmluZyhlbGVtZW50LCBlbGVtZW50cywgcmVmZXJlbmNlTG9jYXRpb24sIHBhcmVudG5hbWVzcGFjZXMpOwotICAgICAgICAJLy9hZGROYW1lc3BhY2VEZWNsYXJhdGlvbnNGcm9tUGFyZW50cyh3c2RsRGVmaW5pdGlvbixlbGVtZW50KTsKLSAgICAgICAgICBlbnRpdHlSZXNvbHZlci5hZGQodGhpc05hbWVzcGFjZSwgeHNkKTsKLSAgICAgICAgfQotCi0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBlbnRpdHlSZXNvbHZlcjsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgbmFtZXNwYWNlIGRlY2xhcmF0aW9ucyBhcyBpbiB0aGUgZm9ybSAKLSAgICogeG1sbnM9InNvbWVuYW1lc3BhY2UiCi0gICAqIGZyb20gdGhlIGRlZmluaXRpb25zIGFuZCB0eXBlcyBlbGVtZW50cyBhbmQgYWRkIHRoZW0gdG8gdGhlIHNjaGVtYSBlbGVtZW50IHNvIHRoZSBzY2hlbWEgCi0gICAqIHZhbGlkYXRvciB3aWxsIGhhdmUgYWNjZXNzIHRvIHRoZW0uCi0gICAqIAotICAgKiBAcGFyYW0gd3NkbERlZmluaXRpb24gVGhlIFdTREwgZGVmaW5pdGlvbnMgZWxlbWVudC4KLSAgICogQHBhcmFtIGVsZW1lbnQgVGhlIHR5cGVzIGVsZW1lbnQuCi0gICAqIEByZXR1cm4gQSBoYXNodGFibGUgd2l0aCB0aGUgbmFtZXNwYWNlIGVsZW1lbnRzIGZyb20gdGhlIGVsZW1lbnRzIHByb3ZpZGVkLgotICAgKi8KLSAgcHJvdGVjdGVkIEhhc2h0YWJsZSBnZXROYW1lc3BhY2VEZWNsYXJhdGlvbnNGcm9tUGFyZW50cyhEZWZpbml0aW9uIHdzZGxEZWZpbml0aW9uLCBFbGVtZW50IGVsZW1lbnQpCi0gIHsKLSAgCUhhc2h0YWJsZSBuc3MgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgSXRlcmF0b3IgbmFtZVNwYWNlcyA9IHdzZGxEZWZpbml0aW9uLmdldE5hbWVzcGFjZXMoKS5rZXlTZXQoKS5pdGVyYXRvcigpOwotCi0gICAgU3RyaW5nIFhNTE5TID0gQ29uc3RhbnRzLkFUVFJfWE1MTlM7Ci0gICAgCi0gICAgd2hpbGUgKG5hbWVTcGFjZXMuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIFN0cmluZyBuc3ByZWZpeCA9IFhNTE5TOwotICAgICAgU3RyaW5nIG5zID0gKFN0cmluZykgbmFtZVNwYWNlcy5uZXh0KCk7Ci0gICAgICBpZiAoIW5zLmVxdWFsc0lnbm9yZUNhc2UoIiIpKQotICAgICAgewotICAgICAgICBuc3ByZWZpeCArPSAiOiI7Ci0gICAgICB9Ci0gICAgICBpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlKG5zcHJlZml4ICsgbnMpKQotICAgICAgewotICAgICAgCW5zcy5wdXQobnNwcmVmaXggKyBucywgd3NkbERlZmluaXRpb24uZ2V0TmFtZXNwYWNlKG5zKSk7Ci0vLyAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUobnNwcmVmaXggKyBucywgd3NkbERlZmluaXRpb24uZ2V0TmFtZXNwYWNlKG5zKSk7Ci0gICAgICB9Ci0KLSAgICB9Ci0gICAgLy8gTmV4dCBoYW5kbGUgdGhlIHBhcmVudCB0eXBlcyBlbGVtZW50Ci0gICAgTmFtZWROb2RlTWFwIGF0dHMgPSBlbGVtZW50LmdldFBhcmVudE5vZGUoKS5nZXRBdHRyaWJ1dGVzKCk7Ci0gICAgaW50IGF0dHNsZW5ndGggPSBhdHRzLmdldExlbmd0aCgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0c2xlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIE5vZGUgdGVtcG5vZGUgPSBhdHRzLml0ZW0oaSk7Ci0gICAgICBTdHJpbmcgbm9kZW5hbWUgPSB0ZW1wbm9kZS5nZXROb2RlTmFtZSgpOwotICAgICAgLy8gaWYgdGhpcyBpcyBhIG5hbWVzcGFjZSBhdHRyaWJ1dGUKLSAgICAgIGlmIChub2RlbmFtZS5pbmRleE9mKFhNTE5TKSAhPSAtMSkKLSAgICAgIHsKLQkJbnNzLnB1dChub2RlbmFtZSwgIHRlbXBub2RlLmdldE5vZGVWYWx1ZSgpKTsKLSAgICAgICAgLy9lbGVtZW50LnNldEF0dHJpYnV0ZShub2RlbmFtZSwgdGVtcG5vZGUuZ2V0Tm9kZVZhbHVlKCkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnNzOwotICB9Ci0gIAotICAvKioKLSAgICogR2l2ZW4gYSBsaW5lIG51bWJlciBmb3IgdGhlIHNjaGVtYSByZXR1cm5zIHRoZSBlbGVtZW50IGZvdW5kIG9uIHRoYXQgbGluZS4gCi0gICAqIFVzZWZ1bCBmb3Igb2J0YWluaW5nIGVsZW1lbnRzIGZyb20gc2NoZW1hIFN0cmluZ3MuCi0gICAqIAotICAgKiBAcGFyYW0gbGluZSBUaGUgbGluZSBudW1iZXIgZm9yIHRoZSBzY2hlbWEuCi0gICAqIEByZXR1cm4gVGhlIG9iamVjdCBsb2NhdGVkIGF0IHRoZSBsaW5lIG9yIGF0IGxpbmUgMCBpZiB0aGUgbGluZSBpcyBpbnZhbGlkLgotICAgKi8KLSAgIHB1YmxpYyBPYmplY3QgZ2V0T2JqZWN0QXRMaW5lKGludCBsaW5lKQotICAgewotICAgCWlmKGxpbmUgPCAwIHx8IGxpbmUgPj0gZWxlbWVudHMuc2l6ZSgpKQotICAgCXsKLSAgIAkgIGxpbmUgPSAwOwotICAgCX0KLQlyZXR1cm4gZWxlbWVudHMuZ2V0KGxpbmUpOwotICAgfQotICAgCi0gIC8qKgotICAgKiBSZXBsYWNlIGFueSBpbnN0YW5jZSBvZiB0aGUgMjAwMSBzY2hlbWEgbmFtZXNwYWNlIGluIHRoZSBnaXZlbiBtZXNzYWdlIHdpdGgKLSAgICogdGhlIGdpdmVuIG5hbWVzcGFjZS4KLSAgICogCi0gICAqIEBwYXJhbSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIHJlcGxhY2UgdGhlIG5hbWVzcGFjZSBpbi4KLSAgICogQHBhcmFtIG5hbWVzcGFjZSBUaGUgbmFtZXNwYWNlIHVzZWQgZm9yIHJlcGxhY2VtZW50LgotICAgKiBAcmV0dXJuIFRoZSBtZXNzYWdlIHdpdGggdGhlIDIwMDEgc2NoZW1hIG5hbWVzcGFjZSByZXBsYWNlZCBieSB0aGUgZ2l2ZW4gbmFtZXNwYWNlLgotICAgKi8KLSAvLyBwcml2YXRlIFN0cmluZyByZXBsYWNlTmFtZXNwYWNlKFN0cmluZyBtZXNzYWdlLCBTdHJpbmcgbmFtZXNwYWNlKQotIC8vICB7Ci0gLy8gICAgU3RyaW5nIHhzZDIwMDEgPSBDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxOwotIC8vICAgIGludCBzdGFydCA9IG1lc3NhZ2UuaW5kZXhPZih4c2QyMDAxKTsKLSAvLyAgICBpbnQgZW5kID0gc3RhcnQgKyB4c2QyMDAxLmxlbmd0aCgpOwotIC8vICAgIGlmKHN0YXJ0IDwgMCkKLSAvLyAgICB7Ci0gLy8gICAgICByZXR1cm4gbWVzc2FnZTsKLSAvLyAgICB9Ci0gLy8gICAgU3RyaW5nIHN0YXJ0U3RyaW5nID0gbWVzc2FnZS5zdWJzdHJpbmcoMCxzdGFydCk7Ci0gLy8gICAgU3RyaW5nIGVuZFN0cmluZyA9IG1lc3NhZ2Uuc3Vic3RyaW5nKGVuZCxtZXNzYWdlLmxlbmd0aCgpKTsKLSAvLyAgICByZXR1cm4gc3RhcnRTdHJpbmcgKyBuYW1lc3BhY2UgKyBlbmRTdHJpbmc7Ci0gLy8gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL0lubGluZVhTRFJlc29sdmVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3hzZC9JbmxpbmVYU0RSZXNvbHZlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOWQ1YTc5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL0lubGluZVhTRFJlc29sdmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwueHNkOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1JlYWRlcjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhNTFJlc291cmNlSWRlbnRpZmllcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE5JRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MRW50aXR5UmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxJbnB1dFNvdXJjZTsKLQotLyoqCi0gKiBBbiBYTUxFbnRpdHlSZXNvbHZlciB0aGF0IGFsbG93cyBpbmxpbmUgc2NoZW1hcyB0byByZXNvbHZlIGVhY2ggb3RoZXIgdGhyb3VnaCBpbXBvcnRzLgotICogCi0gKiBAYXV0aG9yIExhd3JlbmNlIE1hbmRlbCAobG1hbmRlbEBjYS5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgSW5saW5lWFNEUmVzb2x2ZXIgaW1wbGVtZW50cyBYTUxFbnRpdHlSZXNvbHZlcgotewotICBwcm90ZWN0ZWQgSGFzaHRhYmxlIGVudGl0aWVzID0gbmV3IEhhc2h0YWJsZSgpOwotICBwcm90ZWN0ZWQgWE1MSW5wdXRTb3VyY2UgcmVmZXJyaW5nU2NoZW1hSW5wdXRTb3VyY2UgPSBudWxsOwotICBwcm90ZWN0ZWQgU3RyaW5nIHJlZmVycmluZ1NjaGVtYU5hbWVzcGFjZSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIENvbnN0dWN0b3IuCi0gICAqLwotICBwdWJsaWMgSW5saW5lWFNEUmVzb2x2ZXIoKQotICB7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxFbnRpdHlSZXNvbHZlciNyZXNvbHZlRW50aXR5KG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTUxSZXNvdXJjZUlkZW50aWZpZXIpCi0gICAqLwotICBwdWJsaWMgWE1MSW5wdXRTb3VyY2UgcmVzb2x2ZUVudGl0eShYTUxSZXNvdXJjZUlkZW50aWZpZXIgcmVzb3VyY2VJZGVudGlmaWVyKQotCQkgdGhyb3dzIFhOSUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCVN0cmluZyBzeXN0ZW1JZCA9IHJlc291cmNlSWRlbnRpZmllci5nZXRFeHBhbmRlZFN5c3RlbUlkKCk7Ci0JU3RyaW5nIHB1YmxpY0lkID0gcmVzb3VyY2VJZGVudGlmaWVyLmdldFB1YmxpY0lkKCk7Ci0JU3RyaW5nIG5hbWVzcGFjZSA9IHJlc291cmNlSWRlbnRpZmllci5nZXROYW1lc3BhY2UoKTsKLQlYTUxJbnB1dFNvdXJjZSBpcyA9IG51bGw7Ci0JU3RyaW5nIHNjaGVtYSA9IG51bGw7Ci0JaWYgKHN5c3RlbUlkID09IG51bGwpCi0JewotCSAgaWYocHVibGljSWQgPT0gbnVsbCkKLQkgIHsKLQkgIAlpZihuYW1lc3BhY2UgPT0gbnVsbCkKLQkgIAl7CQotCSAgICAgIHJldHVybiBudWxsOwotCSAgCX0KLQkgIAllbHNlCi0JICAJewotCSAgCQlzeXN0ZW1JZCA9IG5hbWVzcGFjZTsKLQkgIAl9Ci0JICB9Ci0JICBlbHNlCi0JICB7CQotCSAgICBzeXN0ZW1JZCA9IHB1YmxpY0lkOwotCSAgfQotCX0KLQkgIAotCWlmKHJlZmVycmluZ1NjaGVtYU5hbWVzcGFjZSAhPSBudWxsICYmIHJlZmVycmluZ1NjaGVtYU5hbWVzcGFjZS5lcXVhbHMoc3lzdGVtSWQpKQotCXsKLQkJaWYocmVmZXJyaW5nU2NoZW1hSW5wdXRTb3VyY2UhPW51bGwpCi0JCXsKLQkJCXJldHVybiByZWZlcnJpbmdTY2hlbWFJbnB1dFNvdXJjZTsKLQkJfQotCX0KLQllbHNlIGlmICgoc2NoZW1hID0gKFN0cmluZykgZW50aXRpZXMuZ2V0KHN5c3RlbUlkKSkgIT0gbnVsbCAmJiAhc2NoZW1hLmVxdWFscygiIikpCi0JewotCQlpcyA9IG5ldyBYTUxJbnB1dFNvdXJjZShwdWJsaWNJZCwgc3lzdGVtSWQsIHN5c3RlbUlkLG5ldyBTdHJpbmdSZWFkZXIoc2NoZW1hKSxudWxsKTsKLQl9Ci0JCi0gICAgLy9pZihpcyA9PSBudWxsKQotICAgIC8vewotICAgIC8vCXRocm93IG5ldyBJT0V4Y2VwdGlvbigpOwotICAgIC8vfQotCXJldHVybiBpczsKLSAgfQotCi0gIC8qKgotICAgKiBBZGQgYW4gaW5saW5lIHNjaGVtYS4KLSAgICogCi0gICAqIEBwYXJhbSB0YXJnZXROYW1lc3BhY2UgLSB0aGUgdGFyZ2V0IG5hbWVzcGFjZSBvZiB0aGUgc2NoZW1hCi0gICAqIEBwYXJhbSBzY2hlbWEgLSBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc2NoZW1hCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGQoU3RyaW5nIHRhcmdldE5hbWVzcGFjZSwgU3RyaW5nIHNjaGVtYSkKLSAgewotICAgIGVudGl0aWVzLnB1dCh0YXJnZXROYW1lc3BhY2UsIHNjaGVtYSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBBZGQgdGhlIHJlZmVycmluZyBpbmxpbmUgc2NoZW1hLiAKLSAgICogCi0gICAqIEBwYXJhbSBpbnB1dFNvdXJjZSAtIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIGlubGluZSBzY2hlbWEKLSAgICogQHBhcmFtIG5hbWVzcGFjZSAtIHRoZSBuYW1lc3BhY2Ugb2YgdGhlIGlubGluZSBzY2hlbWEKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZFJlZmVycmluZ1NjaGVtYShYTUxJbnB1dFNvdXJjZSBpbnB1dFNvdXJjZSwgU3RyaW5nIG5hbWVzcGFjZSkKLSAgewotICAgIHJlZmVycmluZ1NjaGVtYUlucHV0U291cmNlID0gaW5wdXRTb3VyY2U7Ci0gICAgcmVmZXJyaW5nU2NoZW1hTmFtZXNwYWNlID0gbmFtZXNwYWNlOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3hzZC9MYXp5VVJMSW5wdXRTdHJlYW0uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL0xhenlVUkxJbnB1dFN0cmVhbS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NmUyYTkxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL0xhenlVUkxJbnB1dFN0cmVhbS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwueHNkOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLQotLyoqCi0gKiBUaGlzIGNsYXNzIGFsbG93cyBJbnB1dFN0cmVhbXMgdG8gYmUgY3JlYXRlZCBhbmQgcmV0dXJuZWQgdG8geGVyY2VzIHdpdGhvdXQKLSAqIGFjdHVhbGx5IG9wZW5pbmcgZmlsZSBoYW5kbGVzIG9yIG5ldHdvcmsgY29ubmVjdGlvbnMgdW50aWwgaXQgaXMgYWJzb2x1dGVseQotICogbmVjY2Vzc2FyeS4KLSAqLwotcHVibGljIGNsYXNzIExhenlVUkxJbnB1dFN0cmVhbSBleHRlbmRzIElucHV0U3RyZWFtCi17ICAKLSAgcHJpdmF0ZSBzdGF0aWMgaW50IGRlYnVnVG90YWxPcGVuU3RyZWFtQ291bnQgPSAwOyAKLSAgcHJvdGVjdGVkIElucHV0U3RyZWFtIGlubmVyOwotICBwcm90ZWN0ZWQgU3RyaW5nIHVybDsKLSAgcHJvdGVjdGVkIGJvb2xlYW4gZXJyb3I7Ci0gIGJvb2xlYW4gaGFzTWFya3M7Ci0gIGJvb2xlYW4gcHJldGVuZEZpbGVJc1N0aWxsT3BlbjsKLQotICBwdWJsaWMgTGF6eVVSTElucHV0U3RyZWFtKFN0cmluZyB1cmwpCi0gIHsKLSAgICB0aGlzLnVybCA9IHVybDsKLQlpbm5lciA9IG51bGw7Ci0JcHJldGVuZEZpbGVJc1N0aWxsT3BlbiA9IGZhbHNlOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNyZWF0ZUlubmVyU3RyZWFtSWZSZXF1aXJlZCgpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgaWYgKGlubmVyID09IG51bGwgJiYgIWVycm9yKQotICAgIHsKLSAgICAgIGRlYnVnVG90YWxPcGVuU3RyZWFtQ291bnQrKzsKLSAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGluZyBzdHJlYW0gKCIgKyBkZWJ1Z1RvdGFsT3BlblN0cmVhbUNvdW50ICsgIiktLSAiICsgdXJsKTsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBpbm5lciA9IG5ldyBVUkwodXJsKS5vcGVuU3RyZWFtKCk7Ci0JCXByZXRlbmRGaWxlSXNTdGlsbE9wZW4gPSBmYWxzZTsKLQkJaGFzTWFya3MgPSBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGZpbmFsbHkgCi0gICAgICB7Ci0gICAgICAgIGlmIChpbm5lciA9PSBudWxsKQotICAgICAgICB7ICAKLSAgICAgICAgICBlcnJvciA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotCXByb3RlY3RlZCB2b2lkIGNsb3NlU3RyZWFtKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJaWYgKGlubmVyICE9IG51bGwgJiYgIXByZXRlbmRGaWxlSXNTdGlsbE9wZW4pIHsKLQkJCWlubmVyLmNsb3NlKCk7Ci0JCQlwcmV0ZW5kRmlsZUlzU3RpbGxPcGVuID0gdHJ1ZTsKLQkJfQotICAJfQotCi0gIHB1YmxpYyBpbnQgYXZhaWxhYmxlKCkgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLQlpZiAocHJldGVuZEZpbGVJc1N0aWxsT3BlbikgcmV0dXJuIDA7Ci0JY3JlYXRlSW5uZXJTdHJlYW1JZlJlcXVpcmVkKCk7Ci0JaWYgKGlubmVyID09IG51bGwpIHRocm93IG5ldyBJT0V4Y2VwdGlvbigiU3RyZWFtIG5vdCBhdmFpbGFibGUiKTsKLQlyZXR1cm4gaW5uZXIuYXZhaWxhYmxlKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBjbG9zZSgpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0JaWYgKHByZXRlbmRGaWxlSXNTdGlsbE9wZW4pIHsKLQkJLy8gU3RvcCBiZWhhdmluZyBhcyBpZiB0aGUgc3RyZWFtIHdlcmUgc3RpbGwgb3Blbi4KLQkJcHJldGVuZEZpbGVJc1N0aWxsT3BlbiA9IGZhbHNlOwotCX0gZWxzZSB7Ci0JCWlmIChpbm5lciAhPSBudWxsKSB7Ci0JCQlkZWJ1Z1RvdGFsT3BlblN0cmVhbUNvdW50LS07Ci0JCSAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJDbG9zaW5nIHN0cmVhbSAoIiArIGRlYnVnVG90YWxPcGVuU3RyZWFtQ291bnQgKyAiKSAtLSAiICsgdXJsKTsKLQkJCWlubmVyLmNsb3NlKCk7Ci0JCX0KLQl9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBtYXJrKGludCByZWFkbGltaXQpCi0gIHsKLQlpZiAocHJldGVuZEZpbGVJc1N0aWxsT3BlbikgcmV0dXJuOwotCWhhc01hcmtzID0gdHJ1ZTsKLQl0cnkgewotCQljcmVhdGVJbm5lclN0cmVhbUlmUmVxdWlyZWQoKTsKLQkJaW5uZXIubWFyayhyZWFkbGltaXQpOwotCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jawotCQllLnByaW50U3RhY2tUcmFjZSgpOwotCX0KLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIG1hcmtTdXBwb3J0ZWQoKQotICB7Ci0JaWYgKHByZXRlbmRGaWxlSXNTdGlsbE9wZW4pIHJldHVybiBmYWxzZTsKLQl0cnkgewotCQljcmVhdGVJbm5lclN0cmVhbUlmUmVxdWlyZWQoKTsKLQkJaWYgKGlubmVyID09IG51bGwpIHJldHVybiBmYWxzZTsKLQkJcmV0dXJuIGlubmVyLm1hcmtTdXBwb3J0ZWQoKTsKLQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKLQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9Ci0JcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHVibGljIGludCByZWFkKCkgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLQlpZiAocHJldGVuZEZpbGVJc1N0aWxsT3BlbikgcmV0dXJuIC0xOwotCWNyZWF0ZUlubmVyU3RyZWFtSWZSZXF1aXJlZCgpOwotCWlmIChpbm5lciA9PSBudWxsKSB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIlN0cmVhbSBub3QgYXZhaWxhYmxlIik7Ci0JaW50IGJ5dGVzUmVhZCA9IGlubmVyLnJlYWQoKTsKLQlpZiAoYnl0ZXNSZWFkID09IC0xICYmICFoYXNNYXJrcykgY2xvc2VTdHJlYW0oKTsKLQlyZXR1cm4gYnl0ZXNSZWFkOwotICB9Ci0KLQotCXB1YmxpYyBpbnQgcmVhZChieXRlW10gYikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJaWYgKHByZXRlbmRGaWxlSXNTdGlsbE9wZW4pIHJldHVybiAtMTsKLQkJY3JlYXRlSW5uZXJTdHJlYW1JZlJlcXVpcmVkKCk7Ci0JCWlmIChpbm5lciA9PSBudWxsKSB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIlN0cmVhbSBub3QgYXZhaWxhYmxlIik7Ci0JCWludCBieXRlc1JlYWQgPSBpbm5lci5yZWFkKGIpOwotCQlpZiAoYnl0ZXNSZWFkID09IC0xICYmICFoYXNNYXJrcykgY2xvc2VTdHJlYW0oKTsKLQkJcmV0dXJuIGJ5dGVzUmVhZDsKLQl9Ci0KLSAgcHVibGljIGludCByZWFkKGJ5dGVbXSBiLCBpbnQgb2ZmLCBpbnQgbGVuKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgeyAgICAKLQlpZiAocHJldGVuZEZpbGVJc1N0aWxsT3BlbikgcmV0dXJuIC0xOwotCWNyZWF0ZUlubmVyU3RyZWFtSWZSZXF1aXJlZCgpOwotCWlmIChpbm5lciA9PSBudWxsKSB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIlN0cmVhbSBub3QgYXZhaWxhYmxlIik7Ci0JaW50IGJ5dGVzUmVhZCA9IGlubmVyLnJlYWQoYiwgb2ZmLCBsZW4pOwotCWlmIChieXRlc1JlYWQgPT0gLTEgJiYgIWhhc01hcmtzKSBjbG9zZVN0cmVhbSgpOwotCXJldHVybiBieXRlc1JlYWQ7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZXNldCgpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0JaWYgKHByZXRlbmRGaWxlSXNTdGlsbE9wZW4pIHJldHVybjsKLQljcmVhdGVJbm5lclN0cmVhbUlmUmVxdWlyZWQoKTsKLQlpZiAoaW5uZXIgPT0gbnVsbCkgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJTdHJlYW0gbm90IGF2YWlsYWJsZSIpOwotCWlubmVyLnJlc2V0KCk7Ci0gIH0KLQotICBwdWJsaWMgbG9uZyBza2lwKGxvbmcgbikgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsgICAKLQlpZiAocHJldGVuZEZpbGVJc1N0aWxsT3BlbikgcmV0dXJuIDA7Ci0JY3JlYXRlSW5uZXJTdHJlYW1JZlJlcXVpcmVkKCk7Ci0JaWYgKGlubmVyID09IG51bGwpIHRocm93IG5ldyBJT0V4Y2VwdGlvbigiU3RyZWFtIG5vdCBhdmFpbGFibGUiKTsKLQlyZXR1cm4gaW5uZXIuc2tpcChuKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC94c2QvU2NoZW1hQXR0cmlidXRlVGFibGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL1NjaGVtYUF0dHJpYnV0ZVRhYmxlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0OTc2MmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC94c2QvU2NoZW1hQXR0cmlidXRlVGFibGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC54c2Q7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5pbXBsLnhzLlNjaGVtYVN5bWJvbHM7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMudXRpbC5TeW1ib2xUYWJsZTsKLS8qKgotICogVGhpcyBjbGFzcyB3aWxsIGFsbG93IHRoZSBjYWxsaW5nIGNvZGUgdG8gc2VlIGlmIHRoZSBhdHRyaWJ1dGUgaXMgZGVmaW5lZCBpbiBzY2hlbWEuCi0gKiBUaGlzIHNlcnZlcyBhcyBzY2hlbWEgZm9yIHNjaGVtYS4KLSAqIAotICogQGF1dGhvciBMYXdyZW5jZSBNYW5kZWwgKGxtYW5kZWxAY2EuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIFNjaGVtYUF0dHJpYnV0ZVRhYmxlIGV4dGVuZHMgU3ltYm9sVGFibGUKLXsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqLwotICBwdWJsaWMgU2NoZW1hQXR0cmlidXRlVGFibGUoKQotICB7Ci0gICAgLy8gYWRkIGFsbCBvZiB0aGUgc3lib2xzIHRvIHRoZSB0YWJsZS4gU2NoZW1hU3ltYm9scyBwcm9iYWJseSBzaG91bGQgaGF2ZQotICAgIC8vIGEgU3ltYm9sVGFibGUgZm9yIHRoZXNlIGJ1dCBpdCBkb2Vzbid0Ci0KLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfVFdPUE9VTkRBTlkpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9UV09QT1VORExPQ0FMKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfVFdPUE9VTkRPVEhFUik7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1RXT1BPVU5EVEFSR0VUTlMpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9QT1VOREFMTCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0ZBTFNFXzApOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9UUlVFXzEpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9BTllTSU1QTEVUWVBFKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfQU5ZVFlQRSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0FOWVVSSSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0JBU0U2NEJJTkFSWSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0JPT0xFQU4pOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9CWVRFKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfQ09MTEFQU0UpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9EQVRFKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfREFURVRJTUUpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9EQVkpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9ERUNJTUFMKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfRE9VQkxFKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfRFVSQVRJT04pOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9FTlRJVFkpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9FTlRJVElFUyk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0VYVEVOU0lPTik7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0ZBTFNFKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfRkxPQVQpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9IRVhCSU5BUlkpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9JRCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0lEUkVGKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfSURSRUZTKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfSU5UKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfSU5URUdFUik7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0xBTkdVQUdFKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfTEFYKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfTElTVCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX0xPTkcpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9OQU1FKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfTkVHQVRJVkVJTlRFR0VSKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfTU9OVEgpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9NT05USERBWSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX05DTkFNRSk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX05NVE9LRU4pOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9OTVRPS0VOUyk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX05PTk5FR0FUSVZFSU5URUdFUik7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX05PTlBPU0lUSVZFSU5URUdFUik7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX05PUk1BTElaRURTVFJJTkcpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9OT1RBVElPTik7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX09QVElPTkFMKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfUE9TSVRJVkVJTlRFR0VSKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfUFJFU0VSVkUpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9QUk9ISUJJVEVEKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfUU5BTUUpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9RVUFMSUZJRUQpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9SRVBMQUNFKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfUkVRVUlSRUQpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9SRVNUUklDVElPTik7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1NIT1JUKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfU0tJUCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1NUUklDVCk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1NUUklORyk7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1NVQlNUSVRVVElPTik7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1RJTUUpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9UT0tFTik7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1RSVUUpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9VTkJPVU5ERUQpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9VTklPTik7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1VOUVVBTElGSUVEKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfVU5TSUdORURCWVRFKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfVU5TSUdORURJTlQpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9VTlNJR05FRExPTkcpOwotICAgIHN1cGVyLmFkZFN5bWJvbChTY2hlbWFTeW1ib2xzLkFUVFZBTF9VTlNJR05FRFNIT1JUKTsKLSAgICBzdXBlci5hZGRTeW1ib2woU2NoZW1hU3ltYm9scy5BVFRWQUxfWUVBUik7Ci0gICAgc3VwZXIuYWRkU3ltYm9sKFNjaGVtYVN5bWJvbHMuQVRUVkFMX1lFQVJNT05USCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL1ZhbGlkYXRlRXJyb3JIYW5kbGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3hzZC9WYWxpZGF0ZUVycm9ySGFuZGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzM2E3M2ZhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL1ZhbGlkYXRlRXJyb3JIYW5kbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC54c2Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhOSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTEVycm9ySGFuZGxlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTFBhcnNlRXhjZXB0aW9uOwotCi0vKioKLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIFhNTEVycm9ySGFuZGxlciB0aGF0IGNhcHR1cmVzIGVycm9yIGZyb20gWGVyY2VzLgotICogCi0gKiBAYXV0aG9yIExhd3JlbmNlIE1hbmRlbCAobG1hbmRlbEBjYS5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGVFcnJvckhhbmRsZXIgaW1wbGVtZW50cyBYTUxFcnJvckhhbmRsZXIKLXsKLSAgQXJyYXlMaXN0IGVycm9yTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAvKioKLSAgICogR2V0IHRoZSBlcnJvciBtZXNzYWdlcyBjcmVhdGVkIGJ5IFhlcmNlcy4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIGVycm9ycyBsaXN0LgotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0RXJyb3JNZXNzYWdlcygpCi0gIHsKLSAgICByZXR1cm4gZXJyb3JMaXN0OwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxFcnJvckhhbmRsZXIjZXJyb3IoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxQYXJzZUV4Y2VwdGlvbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIGVycm9yKFN0cmluZyBhcmcwLCBTdHJpbmcgYXJnMSwgWE1MUGFyc2VFeGNlcHRpb24gZXhjZXB0aW9uKSB0aHJvd3MgWE5JRXhjZXB0aW9uCi0gIHsKLSAgICBlcnJvckxpc3QuYWRkKCJFcnJvcjogIiArIGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxFcnJvckhhbmRsZXIjZmF0YWxFcnJvcihqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTFBhcnNlRXhjZXB0aW9uKQotICAgKi8KLSAgcHVibGljIHZvaWQgZmF0YWxFcnJvcihTdHJpbmcgYXJnMCwgU3RyaW5nIGFyZzEsIFhNTFBhcnNlRXhjZXB0aW9uIGV4Y2VwdGlvbikgdGhyb3dzIFhOSUV4Y2VwdGlvbgotICB7Ci0gICAgZXJyb3JMaXN0LmFkZCgiRmF0YWwgZXJyb3I6ICIgKyBleGNlcHRpb24uZ2V0TWVzc2FnZSgpKTsKLSAgfQotCi0gIC8qKgotICAgKiBAc2VlIG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MRXJyb3JIYW5kbGVyI3dhcm5pbmcoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxQYXJzZUV4Y2VwdGlvbikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHdhcm5pbmcoU3RyaW5nIGFyZzAsIFN0cmluZyBhcmcxLCBYTUxQYXJzZUV4Y2VwdGlvbiBleGNlcHRpb24pIHRocm93cyBYTklFeGNlcHRpb24KLSAgewotICAgIGVycm9yTGlzdC5hZGQoIldhcm5pbmc6ICIgKyBleGNlcHRpb24uZ2V0TWVzc2FnZSgpKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL1hNTENhdGFsb2cuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL1hNTENhdGFsb2cuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTRhZmI1NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3hzZC9YTUxDYXRhbG9nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUud3NkbC54c2Q7Ci0KLS8qKgotICogWE1MQ2F0YWxvZwotICogVGhpcyBjbGFzcyBjYW4gYmUgdXNlZCB0byByZWdpc3Rlciwgb2J0YWluIGFuZCBkZWxldGUgYW4gaW5zdGFuY2Ugb2YgYW4gCi0gKiBYTUwgY2F0YWxvZy4gTWV0aG9kIGRlZmluaXRpb25zIGFyZSBwcm92aWRlZCBmb3IgdGhlIGNhdGFsb2cgdG8gc2V0Ci0gKiBhIGxvY2F0aW9uIGluIHRoZSBjYXRhbG9nIGFuZCByZXNvbHZlIGFuIGVudGl0eSBmcm9tIHRoZSBjYXRhbG9nLgotICogCi0gKiBAYXV0aG9yIExhd3JlbmNlIE1hbmRlbCAobG1hbmRlbEBjYS5pYm0uY29tKQotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgWE1MQ2F0YWxvZwotewotICBwcml2YXRlIHN0YXRpYyBYTUxDYXRhbG9nIGluc3RhbmNlID0gbnVsbDsKLSAgcHJpdmF0ZSBzdGF0aWMgQ2xhc3MgeG1sY2F0YWxvZ2NsYXNzID0gbnVsbDsKLQotICAvKioKLSAgICogUmV0dXJuIGFuIGluc3RhbmNlIG9mIHRoZSBYTUwgY2F0YWxvZy4gSWYgbm8gaW5zdGFuY2UgaXMgcmVnaXN0ZXJlZCwKLSAgICogcmV0dXJucyBhIGRlZmF1bHQgaW5zdGFuY2UuCi0gICAqIAotICAgKiBAcmV0dXJuIHRoZSBpbnN0YW5jZSBvZiB0aGUgWE1MIGNhdGFsb2cKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgWE1MQ2F0YWxvZyBnZXRJbnN0YW5jZSgpCi0gIHsKLSAgICBpZiAoaW5zdGFuY2UgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoeG1sY2F0YWxvZ2NsYXNzICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgaW5zdGFuY2UgPSAoWE1MQ2F0YWxvZyl4bWxjYXRhbG9nY2xhc3MubmV3SW5zdGFuY2UoKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICBpbnN0YW5jZSA9IG5ldyBYTUxDYXRhbG9nSW1wbCgpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGluc3RhbmNlID0gbmV3IFhNTENhdGFsb2dJbXBsKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBpbnN0YW5jZTsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQgdGhlIGNsYXNzIG9mIHRoZSBYTUwgY2F0YWxvZyB0byBiZSB1c2VkLgotICAgKiAKLSAgICogQHBhcmFtIHhtbGNhdGFsb2cgLSB0aGUgY2xhc3Mgb2YgdGhlIFhNTCBjYXRhbG9nIHRvIGJlIHVzZWQKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRYTUxDYXRhbG9nKENsYXNzIHhtbGNhdGFsb2cpCi0gIHsKLSAgICB4bWxjYXRhbG9nY2xhc3MgPSB4bWxjYXRhbG9nOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlc2V0cyB0aGUgaW5zdGFuY2Ugb2YgdGhlIFhNTCBjYXRhbG9nIHRvIG51bGwuIEFsbG93cyBzd2l0Y2hpbmcgWE1MIGNhdGFsb2dzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyB2b2lkIHJlc2V0KCkKLSAgewotICAgIGluc3RhbmNlID0gbnVsbDsKLSAgICB4bWxjYXRhbG9nY2xhc3MgPSBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIEFkZCBhIHB1YmxpYyBpZCBhbmQgYSBsb2NhdGlvbiB0byB0aGUgY2F0YWxvZy4KLSAgICogCi0gICAqIEBwYXJhbSBwdWJsaWNJZCAtIHRoZSBwdWJsaWMgaWQgb2YgdGhlIGVudHJ5Ci0gICAqIEBwYXJhbSBzeXN0ZW1JZCAtIHRoZSBzeXN0ZW0gaWQgb2YgdGhlIGVudHJ5Ci0gICAqLwotICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBhZGRFbnRyeVRvQ2F0YWxvZyhTdHJpbmcgcHVibGljSWQsIFN0cmluZyBzeXN0ZW1JZCk7Ci0KLSAgLyoqCi0gICAqIFJlc29sdmUgdGhlIGxvY2F0aW9uIG9mIGFuIGVudGl0eSBnaXZlbiBwdWJsaWMgYW5kIHN5c3RlbSBpZHMuCi0gICAqIAotICAgKiBAcGFyYW0gcHVibGljSWQgLSB0aGUgcHVibGljIGlkIG9mIHRoZSBlbnRpdHkgdG8gYmUgcmVzb2x2ZWQKLSAgICogQHBhcmFtIHN5c3RlbUlkIC0gdGhlIHN5c3RlbSBpZCBvZiB0aGUgZW50aXR5IHRvIGJlIHJlc29sdmVkCi0gICAqIEByZXR1cm4gdGhlIGxvY2F0aW9uIG9mIHRoZSBlbnRpdHkKLSAgICovCi0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgcmVzb2x2ZUVudGl0eUxvY2F0aW9uKFN0cmluZyBwdWJsaWNJZCwgU3RyaW5nIHN5c3RlbUlkKTsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3hzZC9YTUxDYXRhbG9nSW1wbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC94c2QvWE1MQ2F0YWxvZ0ltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjdjNDBlNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3hzZC9YTUxDYXRhbG9nSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwueHNkOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi0vKioKLSAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBYTUwgQ2F0YWxvZy4KLSAqIAotICogQGF1dGhvciBMYXdyZW5jZSBNYW5kZWwgKGxtYW5kZWxAY2EuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIFhNTENhdGFsb2dJbXBsIGV4dGVuZHMgWE1MQ2F0YWxvZwotewotICBwcm90ZWN0ZWQgTWFwIGNhdGFsb2cgPSBuZXcgSGFzaHRhYmxlKCk7Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzZGwudmFsaWRhdGUueG1sY29uZm9ybWFuY2UuWE1MQ2F0YWxvZyNhZGRFbnRyeVRvQ2F0YWxvZyhqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkRW50cnlUb0NhdGFsb2coU3RyaW5nIHB1YmxpY0lkLCBTdHJpbmcgc3lzdGVtSWQpCi0gIHsKLSAgICBjYXRhbG9nLnB1dChwdWJsaWNJZCwgc3lzdGVtSWQpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzZGwudmFsaWRhdGUueG1sY29uZm9ybWFuY2UuWE1MQ2F0YWxvZyNyZXNvbHZlRW50aXR5TG9jYXRpb24oamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgcmVzb2x2ZUVudGl0eUxvY2F0aW9uKFN0cmluZyBwdWJsaWNJZCwgU3RyaW5nIHN5c3RlbUlkKQotICB7Ci0gIAkvLyBpZiB0aGVyZSdzIG5vIHN5c3RlbSBpZCB1c2UgdGhlIHB1YmxpYyBpZAotICAgIGlmIChzeXN0ZW1JZCA9PSBudWxsIHx8IHN5c3RlbUlkLmVxdWFscygiIikpCi0gICAgewotICAgICAgc3lzdGVtSWQgPSBwdWJsaWNJZDsKLSAgICB9Ci0gICAgcmV0dXJuIChTdHJpbmcpY2F0YWxvZy5nZXQoc3lzdGVtSWQpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3hzZC9YTUxDYXRhbG9nUmVzb2x2ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL1hNTENhdGFsb2dSZXNvbHZlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzM2VmZGMyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL1hNTENhdGFsb2dSZXNvbHZlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwueHNkOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1JlYWRlcjsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTUxSZXNvdXJjZUlkZW50aWZpZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhOSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTEVudGl0eVJlc29sdmVyOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MSW5wdXRTb3VyY2U7Ci0KLS8qKgotICogQSByZXNvbHZlciB0byByZXNvbHZlIGVudGl0aWVzIGZyb20gdGhlIFhNTCBjYXRhbG9nLgotICogCi0gKiBAYXV0aG9yIExhd3JlbmNlIE1hbmRlbCAobG1hbmRlbEBjYS5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgWE1MQ2F0YWxvZ1Jlc29sdmVyIGltcGxlbWVudHMgWE1MRW50aXR5UmVzb2x2ZXIKLXsKLSAgcHJvdGVjdGVkIHN0YXRpYyBYTUxDYXRhbG9nUmVzb2x2ZXIgeG1sQ2F0YWxvZzsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqLwotICBwcm90ZWN0ZWQgWE1MQ2F0YWxvZ1Jlc29sdmVyKCkKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgaW5zdGFuY2Ugb2YgdGhpcyByZXNvbHZlci4KLSAgICogCi0gICAqIEByZXR1cm4gdGhlIGluc3RhbmNlIG9mIHRoaXMgcmVzb2x2ZXIKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgWE1MQ2F0YWxvZ1Jlc29sdmVyIGdldEluc3RhbmNlKCkKLSAgewotICAgIGlmICh4bWxDYXRhbG9nID09IG51bGwpCi0gICAgewotICAgICAgeG1sQ2F0YWxvZyA9IG5ldyBYTUxDYXRhbG9nUmVzb2x2ZXIoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHhtbENhdGFsb2c7Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcueG1sLnNheC5FbnRpdHlSZXNvbHZlciNyZXNvbHZlRW50aXR5KGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgWE1MSW5wdXRTb3VyY2UgcmVzb2x2ZUVudGl0eShYTUxSZXNvdXJjZUlkZW50aWZpZXIgcmVzb3VyY2VJZGVudGlmaWVyKSB0aHJvd3MgWE5JRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIHB1YmxpY0lkID0gcmVzb3VyY2VJZGVudGlmaWVyLmdldFB1YmxpY0lkKCk7Ci0gICAgU3RyaW5nIHN5c3RlbUlkID0gcmVzb3VyY2VJZGVudGlmaWVyLmdldEV4cGFuZGVkU3lzdGVtSWQoKTsKLSAgICBTdHJpbmcgbG9jYXRpb24gPSBYTUxDYXRhbG9nLmdldEluc3RhbmNlKCkucmVzb2x2ZUVudGl0eUxvY2F0aW9uKHB1YmxpY0lkLCBzeXN0ZW1JZCk7Ci0gICAgaWYgKGxvY2F0aW9uID09IG51bGwpCi0gICAgewotICAgICAgWE1MSW5wdXRTb3VyY2UgaW5wdXRTb3VyY2UgPSBuZXcgWE1MSW5wdXRTb3VyY2UocHVibGljSWQsIHN5c3RlbUlkLCBzeXN0ZW1JZCwgbmV3IFN0cmluZ1JlYWRlcihsb2NhdGlvbiksIG51bGwpOwotICAgICAgcmV0dXJuIGlucHV0U291cmNlOwotICAgIH0KLSAgICAvLyBvdGhlcndpc2UgcmV0dXJuIG51bGwgdG8gdGVsbCB0aGUgcGFyc2VyIHRvIGxvY2F0ZSB0aGUgc3lzdGVtSWQgYXMgYSBVUkkKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC94c2QvWE1MRW50aXR5UmVzb2x2ZXJDaGFpbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUvd3NkbC94c2QvWE1MRW50aXR5UmVzb2x2ZXJDaGFpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzFmODAzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL1hNTEVudGl0eVJlc29sdmVyQ2hhaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnhzZDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE1MUmVzb3VyY2VJZGVudGlmaWVyOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTklFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLnBhcnNlci5YTUxFbnRpdHlSZXNvbHZlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTElucHV0U291cmNlOwotCi0vKioKLSAqIEhhbmRsZSBhIGNoYWluIG9mIGVudGl0eSByZXNvbHZlcnMuCi0gKiAKLSAqIEBhdXRob3IgTGF3cmVuY2UgTWFuZGVsIChsbWFuZGVsQGNhLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBYTUxFbnRpdHlSZXNvbHZlckNoYWluIGltcGxlbWVudHMgWE1MRW50aXR5UmVzb2x2ZXIKLXsKLSAgcHJpdmF0ZSBMaXN0IGVudGl0eVJlc29sdmVycyA9IG5ldyBWZWN0b3IoKTsKLSAgCi0gIC8qKgotICAgKiBAc2VlIG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MRW50aXR5UmVzb2x2ZXIjcmVzb2x2ZUVudGl0eShvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE1MUmVzb3VyY2VJZGVudGlmaWVyKQotICAgKi8KLSAgcHVibGljIFhNTElucHV0U291cmNlIHJlc29sdmVFbnRpdHkoWE1MUmVzb3VyY2VJZGVudGlmaWVyIHhtbFJlc291cmNlSWRlbnRpZmllcikgdGhyb3dzIFhOSUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24KLSAgewotICAgIFhNTElucHV0U291cmNlIGlzID0gbnVsbDsKLSAgICBJdGVyYXRvciBlbnRpdHlSZXNvbHZlckl0ZXIgPSBlbnRpdHlSZXNvbHZlcnMuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoZW50aXR5UmVzb2x2ZXJJdGVyLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBYTUxFbnRpdHlSZXNvbHZlciBlbnRpdHlSZXNvbHZlciA9IChYTUxFbnRpdHlSZXNvbHZlcillbnRpdHlSZXNvbHZlckl0ZXIubmV4dCgpOwotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIGlzID0gZW50aXR5UmVzb2x2ZXIucmVzb2x2ZUVudGl0eSh4bWxSZXNvdXJjZUlkZW50aWZpZXIpOwotICAgICAgfQotICAgICAgY2F0Y2ggKFhOSUV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgfQotICAgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICB9Ci0gICAgICBpZiAoaXMgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIFRocm93IGFuZCBJT0V4Y2VwdGlvbiBpZiB0aGUgZmlsZSBpc24ndCBmb3VuZAotICAgIGlmIChpcyA9PSBudWxsKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbigiVW5hYmxlIHRvIGxvY2F0ZSBmaWxlIik7Ci0gICAgfQotICAgIHJldHVybiBpczsKLSAgfQotCi0gIC8qKgotICAgKiBBZGQgYW4gZW50aXR5IHJlc29sdmVyIHRvIHRoaXMgY2hhaW4uCi0gICAqIAotICAgKiBAcGFyYW0gZW50aXR5UmVzb2x2ZXIgVGhlIHJlc29sdmVyIHRvIGFkZCB0byB0aGUgY2hhaW4uCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRFbnRpdHlSZXNvbHZlcihYTUxFbnRpdHlSZXNvbHZlciBlbnRpdHlSZXNvbHZlcikKLSAgewotICAgIGVudGl0eVJlc29sdmVycy5hZGQoZW50aXR5UmVzb2x2ZXIpOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS93c2RsL3hzZC9YU0RWYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL1hTRFZhbGlkYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYWQzYzcxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3dzZGwveHNkL1hTRFZhbGlkYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS53c2RsLnhzZDsKLQotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nUmVhZGVyOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5wYXJzZXJzLlhNTEdyYW1tYXJQcmVwYXJzZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMudXRpbC5YTUxHcmFtbWFyUG9vbEltcGw7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLmdyYW1tYXJzLlhNTEdyYW1tYXJEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuZ3JhbW1hcnMuWE1MR3JhbW1hclBvb2w7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLmdyYW1tYXJzLlhTR3JhbW1hcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkucGFyc2VyLlhNTEVudGl0eVJlc29sdmVyOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5wYXJzZXIuWE1MSW5wdXRTb3VyY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueHMuWFNNb2RlbDsKLQotCi0vKioKLSAqIFZhbGlkYXRlIHNjaGVtYXMgZnJvbSBmaWxlcyBvciBTdHJpbmcuCi0gKiAKLSAqIEBhdXRob3IgTGF3cmVuY2UgTWFuZGVsIChsbWFuZGVsQGNhLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0RWYWxpZGF0b3IKLXsKLSAgcHJpdmF0ZSBYU01vZGVsIHhzTW9kZWw7Ci0gIHByaXZhdGUgYm9vbGVhbiBpc1ZhbGlkWFNEOwotICBwcml2YXRlIExpc3QgZXJyb3JzOwotICBwcml2YXRlIFN0cmluZyBmaWxlbG9jYXRpb247Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKi8KLSAgcHVibGljIFhTRFZhbGlkYXRvcigpCi0gIHsKLSAgICB4c01vZGVsID0gbnVsbDsKLSAgICBpc1ZhbGlkWFNEID0gZmFsc2U7Ci0gICAgZXJyb3JzID0gbmV3IEFycmF5TGlzdCgpOwotICB9Ci0gIC8qKgotICAgKiBWYWxpZGF0ZSBhbiBpbmxpbmUgc2NoZW1hLgotICAgKiAKLSAgICogQHBhcmFtIHNjaGVtYSBBIHNjaGVtYSByZXByZXNlbnRlZCBhcyBhIHN0cmluZy4KLSAgICogQHBhcmFtIHRhcmdldE5hbWVzcGFjZSBUaGUgdGFyZ2V0IG5hbWVzcGFjZSBvZiB0aGUgc2NoZW1hLgotICAgKiBAcGFyYW0gZmlsZWxvYyBUaGUgdXJpIG9mIHRoZSBmaWxlIHRoYXQgY29udGFpbnMgdGhlIHNjaGVtYS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHZhbGlkYXRlSW5saW5lU2NoZW1hKFN0cmluZyBzY2hlbWEsIFN0cmluZyB0YXJnZXROYW1lc3BhY2UsIFN0cmluZyBmaWxlbG9jKQotICB7Ci0gICAgdmFsaWRhdGVJbmxpbmVTY2hlbWEoc2NoZW1hLCB0YXJnZXROYW1lc3BhY2UsIGZpbGVsb2MsIG51bGwsIG51bGwpOwotICB9Ci0KLSAgLyoqCi0gICAqIFZhbGlkYXRlIGFuIGlubGluZSBzY2hlbWEgYW5kIHNwZWNpZnkgYW4gZW50aXR5IHJlc29sdmVyLgotICAgKiAKLSAgICogQHBhcmFtIHNjaGVtYSBUaGlzIHNjaGVtYSByZXByZXNlbnRlZCBhcyBhIHN0cmluZy4KLSAgICogQHBhcmFtIHRhcmdldE5hbWVzcGFjZSBUaGUgdGFyZ2V0IG5hbWVzcGFjZSBvZiB0aGUgc2NoZW1hLgotICAgKiBAcGFyYW0gZmlsZWxvYyBUaGUgdXJpIG9mIHRoZSBmaWxlIHRoYXQgY29udGFpbnMgdGhpcyBzY2hlbWEuCi0gICAqIEBwYXJhbSBlbnRpdHlSZXNvbHZlckNoYWluIFRoZSBlbnRpdHkgcmVzb2x2ZXIgY2hhaW4uCi0gICAqIEBwYXJhbSBpbmxpbmVTY2hlbWFFbnRpdHlSZXNvbHZlciBBbiBpbmxpbmUgc2NoZW1hIHJlc29sdmVyIGZvciB0aGlzIHNjaGVtYS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHZhbGlkYXRlSW5saW5lU2NoZW1hKAotICAgIFN0cmluZyBzY2hlbWEsCi0gICAgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSwKLSAgICBTdHJpbmcgZmlsZWxvYywKLSAgICBYTUxFbnRpdHlSZXNvbHZlciBlbnRpdHlSZXNvbHZlckNoYWluLAotICAgIFhNTEVudGl0eVJlc29sdmVyIGlubGluZVNjaGVtYUVudGl0eVJlc29sdmVyKQotICB7Ci0gICAgZmlsZWxvY2F0aW9uID0gZmlsZWxvYzsKLQotICAgIHZhbGlkYXRlWFNEKHNjaGVtYSwgdHJ1ZSwgZW50aXR5UmVzb2x2ZXJDaGFpbix0YXJnZXROYW1lc3BhY2UsIGlubGluZVNjaGVtYUVudGl0eVJlc29sdmVyKTsKLSAgfQotCi0gIC8qKgotICAgKiBWYWxpZGF0ZSB0aGUgZmlsZSBsb2NhdGVkIGF0IHRoZSB1cmkgc3BlY2lmaWVkIHdpdGggdGhlIGdpdmVuIGVudGl0eSByZXNvbHZlci4KLSAgICogCi0gICAqIEBwYXJhbSB1cmkgQW4gYWJzb2x1dGUgdXJpIGZvciB0aGUgc2NoZW1hIGxvY2F0aW9uLgotICAgKiBAcGFyYW0gZW50aXR5UmVzb2x2ZXIgQW4gZW50aXR5IHJlc29sdmVyIHRvIGJlIHVzZWQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB2YWxpZGF0ZShTdHJpbmcgdXJpLCBYTUxFbnRpdHlSZXNvbHZlciBlbnRpdHlSZXNvbHZlcikKLSAgewotICAgIHZhbGlkYXRlWFNEKHVyaSwgZmFsc2UsIGVudGl0eVJlc29sdmVyLCBudWxsLCBudWxsKTsKLSAgfQotCi0gIC8qKgotICAgKiBWYWxpZGF0ZSB0aGUgc2NoZW1hLgotICAgKiAKLSAgICogQHBhcmFtIHNjaGVtYSBUaGUgc2NoZW1hIG9yIGl0J3MgbG9jYXRpb24uCi0gICAqIEBwYXJhbSBpbmxpbmVYU0QgVHJ1ZSBpZiBhbiBpbmxpbmUgc2NoZW1hLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqIEBwYXJhbSBlbnRpdHlSZXNvbHZlciBBbiBlbnRpdHkgcmVzb2x2ZXIgdG8gdXNlLgotICAgKiBAcGFyYW0gdGFyZ2V0TmFtZXNwYWNlIFRoZSB0YXJnZXQgbmFtZXNwYWNlIG9mIHRoZSBzY2hlbWEgYmVpbmcgdmFsaWRhdGVkLgotICAgKiBAcGFyYW0gaW5saW5lU2NoZW1hRW50aXR5UmVzb2x2ZXIgQW4gaW5saW5lIHNjaGVtYSBlbnRpdHkgcmVzb2x2ZXIuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2YWxpZGF0ZVhTRChTdHJpbmcgc2NoZW1hLCBib29sZWFuIGlubGluZVhTRCwgWE1MRW50aXR5UmVzb2x2ZXIgZW50aXR5UmVzb2x2ZXIsIFN0cmluZyB0YXJnZXROYW1lc3BhY2UsIFhNTEVudGl0eVJlc29sdmVyIGlubGluZVNjaGVtYUVudGl0eVJlc29sdmVyKQotICB7Ci0gICAgVmFsaWRhdGVFcnJvckhhbmRsZXIgZXJyb3JIYW5kbGVyID0gbmV3IFZhbGlkYXRlRXJyb3JIYW5kbGVyKCk7Ci0gICAgZXJyb3JIYW5kbGVyLmdldEVycm9yTWVzc2FnZXMoKS5jbGVhcigpOwotICAgIHRyeQotICAgIHsKLQkJWE1MR3JhbW1hclByZXBhcnNlciBncmFtbWFyUHJlcGFyc2VyID0gbmV3IFhNTEdyYW1tYXJQcmVwYXJzZXIoKTsKLQkJWE1MR3JhbW1hclBvb2wgZ3JhbW1hclBvb2wgPSBuZXcgWE1MR3JhbW1hclBvb2xJbXBsKCk7Ci0JCWdyYW1tYXJQcmVwYXJzZXIuc2V0R3JhbW1hclBvb2woZ3JhbW1hclBvb2wpOwotCSAKLSAgICAgIGdyYW1tYXJQcmVwYXJzZXIuc2V0RXJyb3JIYW5kbGVyKGVycm9ySGFuZGxlcik7Ci0gICAgICBpZiAoZW50aXR5UmVzb2x2ZXIgIT0gbnVsbCkKLSAgICAgIHsKLQkJZ3JhbW1hclByZXBhcnNlci5zZXRFbnRpdHlSZXNvbHZlcihlbnRpdHlSZXNvbHZlcik7Ci0gICAgICB9Ci0KLSAgICAgIHRyeQotICAgICAgewotCQlYTUxJbnB1dFNvdXJjZSBpcyA9IG51bGw7Ci0gICAgICAgIC8vIHRoaXMgYWxsb3dzIHN1cHBvcnQgZm9yIHRoZSBpbmxpbmUgc2NoZW1hIGluIFdTREwgZG9jdW1lbnRzCi0gICAgICAgIGlmIChpbmxpbmVYU0QpCi0gICAgICAgIHsKLSAgICAgICAgCQotICAgICAgICAJUmVhZGVyIHJlYWRlciA9IG5ldyBTdHJpbmdSZWFkZXIoc2NoZW1hKTsKLQkJCWlzID0gbmV3IFhNTElucHV0U291cmNlKG51bGwsZmlsZWxvY2F0aW9uLGZpbGVsb2NhdGlvbixyZWFkZXIsbnVsbCk7Ci0JCQkKLQkJCSgoSW5saW5lWFNEUmVzb2x2ZXIpaW5saW5lU2NoZW1hRW50aXR5UmVzb2x2ZXIpLmFkZFJlZmVycmluZ1NjaGVtYShpcyx0YXJnZXROYW1lc3BhY2UpOwotCi0gICAgICAgIH0KLSAgICAgICAgLy8gZ2V0IHRoZSBpbnB1dCBzb3VyY2UgZm9yIGFuIGV4dGVybmFsIHNjaGVtYSBmaWxlCi0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIGlzID0gbmV3IFhNTElucHV0U291cmNlKG51bGwsc2NoZW1hLHNjaGVtYSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGdyYW1tYXJQcmVwYXJzZXIucmVnaXN0ZXJQcmVwYXJzZXIoWE1MR3JhbW1hckRlc2NyaXB0aW9uLlhNTF9TQ0hFTUEsbnVsbC8qc2NoZW1hTG9hZGVyKi8pOwotICAgICAgICBncmFtbWFyUHJlcGFyc2VyLmdldExvYWRlcihYTUxHcmFtbWFyRGVzY3JpcHRpb24uWE1MX1NDSEVNQSk7Ci0KLQkJWFNHcmFtbWFyIGdyYW1tYXIgPSAoWFNHcmFtbWFyKWdyYW1tYXJQcmVwYXJzZXIucHJlcGFyc2VHcmFtbWFyKFhNTEdyYW1tYXJEZXNjcmlwdGlvbi5YTUxfU0NIRU1BLGlzKTsKLQkJeHNNb2RlbCA9IGdyYW1tYXIudG9YU01vZGVsKCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIC8vcGFyc2VyIHdpbGwgcmV0dXJuIG51bGwgcG9pbnRlciBleGNlcHRpb24gaWYgdGhlIGRvY3VtZW50IGlzIHN0cnVjdHVyYWxseSBpbnZhbGlkCi0gICAgICAgIGVycm9ycy5hZGQoIlNjaGVtYSBpcyBzdHJ1Y3R1cmFsbHkgaW52YWxpZC4iKTsKLSAgICAgIH0KLQotICAgICAgZXJyb3JzLmFkZEFsbChlcnJvckhhbmRsZXIuZ2V0RXJyb3JNZXNzYWdlcygpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAJU3lzdGVtLm91dC5wcmludGxuKGUpOwotICAgIH0KLSAgICBpZiAoZXJyb3JzLmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICBpc1ZhbGlkWFNEID0gdHJ1ZTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgWFNNb2RlbCBjcmVhdGVkLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgWFNNb2RlbCBjcmVhdGVkLgotICAgKi8KLQotICBwdWJsaWMgWFNNb2RlbCBnZXRYU01vZGVsKCkKLSAgewotICAJcmV0dXJuIHhzTW9kZWw7Ci0gIH0KLSAgLyoqCi0gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2NoZW1hIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuCi0gICAqIAotICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHNjaGVtYSBpcyB2YWxpZCwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNWYWxpZCgpCi0gIHsKLSAgICByZXR1cm4gaXNWYWxpZFhTRDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm4gdGhlIGVycm9yIGxpc3QuCi0gICAqIAotICAgKiBAcmV0dXJuIEEgbGlzdCBvZiBlcnJvciBmcm9tIHRoZSBzY2hlbWEuCi0gICAqLwotICBwdWJsaWMgTGlzdCBnZXRFcnJvcnMoKQotICB7Ci0gICAgcmV0dXJuIGVycm9yczsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL1hNTENvbnZlcnRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL1hNTENvbnZlcnRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmIxMzRjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3htbC9YTUxDb252ZXJ0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sOwotCi1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwotCi1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lcjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRmFjdG9yeTsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLnN0cmVhbS5TdHJlYW1SZXN1bHQ7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5zdHJlYW0uU3RyZWFtU291cmNlOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgY29udmVydHMgYSBYTUwgZG9jdW1lbnQgdXNpbmcgYW4gWFNMIGZpbGUuCi0gKiAKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBYTUxDb252ZXJ0b3IKLXsKLQotICAvKioKLSAgICogVHJhbnNmb3JtcyBhbiBYTUwgZG9jdW1lbnQgdXNpbmcgYW4gWFNMIGZpbGUuCi0gICAqIEBwYXJhbSBhcmdzICBhcmd1bWVudHMgZm9yIG1haW4uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgMykKLSAgICAgIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKAotICAgICAgICAgICJVc2FnZTogWE1MQ29udmVydG9yIDx4c2xGaWxlPiA8aW5YTUxGaWxlPiA8b3V0RmlsZT4iKTsKLSAgICAgIH0KLQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvLyBHZXQgdHJhbnNmb3JtZXIgCi0gICAgICAgIFRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyID0KLSAgICAgICAgICBUcmFuc2Zvcm1lckZhY3RvcnkubmV3SW5zdGFuY2UoKS5uZXdUcmFuc2Zvcm1lcigKLSAgICAgICAgICAgIG5ldyBTdHJlYW1Tb3VyY2UoYXJnc1swXSkpOwotCi0gICAgICAgIC8vIFRyYW5zZm9ybSB0aGUgWE1MIGRvY3VtZW50IHVzaW5nIHRoZSBzcGVjaWZpY2VkIFhTTCBmaWxlCi0gICAgICAgIHRyYW5zZm9ybWVyLnRyYW5zZm9ybSgKLSAgICAgICAgICBuZXcgU3RyZWFtU291cmNlKGFyZ3NbMV0pLAotICAgICAgICAgIG5ldyBTdHJlYW1SZXN1bHQobmV3IEZpbGVPdXRwdXRTdHJlYW0oYXJnc1syXSkpKTsKLQotICAgICAgICAvLyBEaXNwbGF5IHJlc3VsdHMKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKAotICAgICAgICAgICJDcmVhdGVkICIgKyBhcmdzWzJdICsgIiBmcm9tICIgKyBhcmdzWzBdICsgIiBhbmQgIiArIGFyZ3NbMV0gKyAiLiIpOwotICAgICAgfQotICAgIH0KLQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0KLQotICAgIFN5c3RlbS5leGl0KDApOwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvWE1MRG9jdW1lbnRDYWNoZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL1hNTERvY3VtZW50Q2FjaGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDEwODc1Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvWE1MRG9jdW1lbnRDYWNoZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBjcmVhdGVzIGEgSGFzaE1hcCB0byBjYWNoZSBYTUwgZG9jdW1lbnRzLgotICogQGF1dGhvciBQZXRlciAgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICogQHZlcnNpb24gMS4wLjEKLSAqLwotcHVibGljIGNsYXNzIFhNTERvY3VtZW50Q2FjaGUgZXh0ZW5kcyBIYXNoTWFwCi17Ci0Jc3RhdGljIFhNTERvY3VtZW50Q2FjaGUgaW5zdGFuY2U7Ci0KLSAgLyoqCi0JICogQ29tbWVudCBmb3IgPGNvZGU+c2VyaWFsVmVyc2lvblVJRDwvY29kZT4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAzODM0MDI4MDQzNzA5NjU3NDAxTDsKLQotCS8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgWE1MRG9jdW1lbnRDYWNoZS4KLSAgICogQHBhcmFtIGluaXRpYWxDYXBhY2l0eSAgdGhlIGluaXRpYWwgY2FwYWNpdHkuCi0gICAqIEBwYXJhbSBsb2FkRmFjdG9yICAgICAgIHRoZSBsb2FkIGZhY3Rvci4gCi0gICAqLwotICBwdWJsaWMgWE1MRG9jdW1lbnRDYWNoZShpbnQgaW5pdGlhbENhcGFjaXR5LCBmbG9hdCBsb2FkRmFjdG9yKQotICB7Ci0gICAgc3VwZXIoaW5pdGlhbENhcGFjaXR5LCBsb2FkRmFjdG9yKTsKLSAgICBpbnN0YW5jZSA9IHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIFhNTERvY3VtZW50Q2FjaGUuCi0gICAqIEBwYXJhbSBpbml0aWFsQ2FwYWNpdHkgIHRoZSBpbml0aWFsIGNhcGFjaXR5LgotICAgKi8KLSAgcHVibGljIFhNTERvY3VtZW50Q2FjaGUoaW50IGluaXRpYWxDYXBhY2l0eSkKLSAgewotICAgIHN1cGVyKGluaXRpYWxDYXBhY2l0eSk7Ci0gICAgaW5zdGFuY2UgPSB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBYTUxEb2N1bWVudENhY2hlLgotICAgKi8KLSAgcHVibGljIFhNTERvY3VtZW50Q2FjaGUoKQotICB7Ci0gICAgc3VwZXIoKTsKLSAgICBpbnN0YW5jZSA9IHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIFhNTERvY3VtZW50Q2FjaGUuCi0gICAqIEBwYXJhbSB0ICB0aGUgbWFwIHdob3NlIG1hcHBpbmdzIGFyZSB0byBiZSBwbGFjZWQgaW4gdGhpcyBtYXAuCi0gICAqLwotICBwdWJsaWMgWE1MRG9jdW1lbnRDYWNoZShNYXAgdCkKLSAgewotICAgIHN1cGVyKHQpOwotICAgIGluc3RhbmNlID0gdGhpczsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgWE1MRG9jdW1lbnRDYWNoZSBpbnN0YW5jZSgpCi0gIHsKLQkgIGlmIChpbnN0YW5jZSA9PSBudWxsKSAKLQkJICBpbnN0YW5jZSA9IG5ldyBYTUxEb2N1bWVudENhY2hlKCk7Ci0JICAKLQkgIHJldHVybiBpbnN0YW5jZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL1hNTERvY3VtZW50Q2FjaGVVc2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvWE1MRG9jdW1lbnRDYWNoZVVzZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTUwZjA3ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvWE1MRG9jdW1lbnRDYWNoZVVzZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sOwotCi1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLQotLyoqCi0gKiBUaGlzIGlzIGFuIGFic3RyYWN0IGNsYXNzIHRoYXQgdGFrZXMgYWR2YW50YWdlIG9mIGNhY2hlZCBYTUwgZG9jdW1lbnRzLgotICogQGF1dGhvciBQZXRlciAgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICogQHZlcnNpb24gMS4wLjEKLSAqLwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgWE1MRG9jdW1lbnRDYWNoZVVzZXIKLXsKLSAgLyoqCi0gICAqIEdldCBkb2N1bWVudCBmcm9tIGNhY2hlLgotICAgKiBAc2VlICNzZXREb2N1bWVudAotICAgKgotICAgKiBAcGFyYW0ga2V5ICBhIFN0cmluZy4gCi0gICAqIEByZXR1cm4gYSBEb2N1bWVudCBvYmplY3QgY29ycmVzcG9uZGluZyB0byB0aGUga2V5LgotICAgKi8KLSAgcHJvdGVjdGVkIERvY3VtZW50IGdldERvY3VtZW50KFN0cmluZyBrZXkpCi0gIHsKLSAgICByZXR1cm4gKERvY3VtZW50KSBYTUxEb2N1bWVudENhY2hlLmluc3RhbmNlKCkuZ2V0KGtleSk7Ci0gIH0KLQotICAvKioKLSAgICogUHV0IGRvY3VtZW50IHdpdGggY29ycmVzcG9uZGluZyBrZXkgaW4gY2FjaGUuCi0gICAqIEBzZWUgI2dldERvY3VtZW50Ci0gICAqCi0gICAqIEBwYXJhbSBrZXkgICAgICAgYSBTdHJpbmcgdXNlZCBhcyBhIGtleSB0byBpZGVudGlmeSBzcGVjaWZpZWQgZG9jdW1lbnQuCi0gICAqIEBwYXJhbSBkb2N1bWVudCAgYSBkb2N1bWVudC4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldERvY3VtZW50KFN0cmluZyBrZXksIE9iamVjdCBkb2N1bWVudCkKLSAgewotCSAgWE1MRG9jdW1lbnRDYWNoZS5pbnN0YW5jZSgpLnB1dChrZXksIGRvY3VtZW50KTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgZG9jdW1lbnQgbGlzdC4KLSAgICogQHJldHVybiBhIFhNTERvY3VtZW50Q2FjaGUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgZG9jdW1lbnQgbGlzdCB2YWx1ZS4KLSAgICovCi0gIHB1YmxpYyBYTUxEb2N1bWVudENhY2hlIGdldERvY3VtZW50TGlzdCgpCi0gIHsKLSAgICByZXR1cm4gWE1MRG9jdW1lbnRDYWNoZS5pbnN0YW5jZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFBhcnNlIFhNTCBkb2N1bWVudC4KLSAgICogQHBhcmFtIHVybFN0cmluZyAgYSBTdHJpbmcgbG9jYXRpbmcgdGhlIFhNTCBkb2N1bWVudC4KLSAgICogQHBhcmFtIGJhc2VVUkkgICAgYSBiYXNlIHVybCB0byBhc3Npc3QgaW4gbG9jYXRpbmcgdGhlIFhNTCBkb2N1bWVudC4KLSAgICogQHJldHVybiBhIERvY3VtZW50IG9iamVjdC4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgZG9jdW1lbnQgY2Fubm90IGJlIHBhcnNlZC4KLSAgICovCi0gIHB1YmxpYyBEb2N1bWVudCBwYXJzZVhNTERvY3VtZW50VVJMKFN0cmluZyB1cmxTdHJpbmcsIFN0cmluZyBiYXNlVVJJKQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJldHVybiBwYXJzZVhNTERvY3VtZW50VVJMKHVybFN0cmluZywgYmFzZVVSSSwgbnVsbCk7Ci0gIH0KLQotICAvKioKLSAgICogUGFyc2UgWE1MIGRvY3VtZW50IGFuZCB2YWxpZGF0ZSB3aXRoIGEgc2NoZW1hIGRvY3VtZW50LgotICAgKiBAcGFyYW0gdXJsU3RyaW5nICBhIFN0cmluZyBsb2NhdGluZyB0aGUgWE1MIGRvY3VtZW50LgotICAgKiBAcGFyYW0gYmFzZVVSSSAgICBhIGJhc2UgdXJsIHRvIGFzc2lzdCBpbiBsb2NhdGluZyB0aGUgWE1MIGRvY3VtZW50LgotICAgKiBAcGFyYW0gc2NoZW1hICAgICBhIFN0cmluZyBpZGVudGlmeWluZyByZWxhdGVkIHNjaGVtYSBkb2N1bWVudC4KLSAgICogQHJldHVybiBhIERvY3VtZW50IG9iamVjdC4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgZG9jdW1lbnQgY2Fubm90IGJlIHBhcnNlZC4KLSAgICovCi0gIHB1YmxpYyBEb2N1bWVudCBwYXJzZVhNTERvY3VtZW50VVJMKAotICAgIFN0cmluZyB1cmxTdHJpbmcsCi0gICAgU3RyaW5nIGJhc2VVUkksCi0gICAgU3RyaW5nIHNjaGVtYSkKLSAgICB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgICBEb2N1bWVudCBkb2N1bWVudCA9IG51bGw7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBDcmVhdGUgVVJMIHJlZmVyZW5jZSB0byBkb2N1bWVudAotICAgICAgVVJMIHVybCA9IFhNTFV0aWxzLmNyZWF0ZVVSTCh1cmxTdHJpbmcsIGJhc2VVUkkpOwotICAgICAgICAgICAgICAgCi0gICAgICAvLyBUT0RPOiBBZGQgc2NoZW1hIHRvIHRoZSB4bWwgZG9jdW1lbnQgY2FjaGUsIHNvIHRoYXQgeW91IGNhbiBkZXRlY3Qgd2hlbiBpdCBoYXMgYWxyZWFkeSAKLSAgICAgIC8vICBiZWVuIHBhcnNlZCB1c2luZyBhIHNwZWNpZmljIHNjaGVtYSBkZWZpbml0aW9uIAotCi0gICAgICAvLyBJZiB0aGUgZG9jdW1lbnQgaXMgbm90IGluIHRoZSBjYWNoZSwgdGhlbiByZWFkIGFuZCBwYXJzZSBpdAotICAgCSAgaWYgKChkb2N1bWVudCA9IGdldERvY3VtZW50KHVybFN0cmluZykpID09IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGRvY3VtZW50ID0gWE1MVXRpbHMucGFyc2VYTUxEb2N1bWVudFVSTCh1cmwsIHNjaGVtYSk7Ci0gICAgICAgIC8vIEFkZCBkb2N1bWVudCB0byBjYWNoZQotICAgICAgICBzZXREb2N1bWVudCh1cmxTdHJpbmcsIGRvY3VtZW50KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBjYXRjaCAoV1NJRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgdGhyb3cgZTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSwgZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGRvY3VtZW50OwotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvWE1MVGFncy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL1hNTFRhZ3MuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTEyZDA0Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvWE1MVGFncy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbDsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBjb250YWlucyBpbmZvcm1hdGlvbiBvbiBYTUwgdGFncy4KLSAqIAotICogQGF1dGhvciBQZXRlciAgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICogQHZlcnNpb24gMS4wLjEKLSAqLwotcHVibGljIGludGVyZmFjZSBYTUxUYWdzCi17Ci0gIC8qKgotICAgKiBOYW1lc3BhY2VzLgotICAgKi8KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTlNfVVJJX1hTSSA9Ci0gICAgImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTlNfVVJJX1hNTE5TID0gImh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIjsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTlNfVVJJX1hTRCA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFhTRF9TQ0hFTUFMT0NBVElPTiA9Ci0gICAgImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLnhzZCI7Ci0KLSAgLyoqCi0gICAqIFF1YWxpZmllZCBuYW1lcyBvZiBYU0QgZWxlbWVudHMgYW5kIGF0dHJpYnV0ZXMuCi0gICAqLwotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIEVMRU1fWFNEX0FOTk9UQVRJT04gPQotICAgIG5ldyBRTmFtZShOU19VUklfWFNELCAiYW5ub3RhdGlvbiIpOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIEVMRU1fWFNEX0lNUE9SVCA9IG5ldyBRTmFtZShOU19VUklfWFNELCAiaW1wb3J0Iik7ICAKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBFTEVNX1hTRF9JTkNMVURFID0gbmV3IFFOYW1lKE5TX1VSSV9YU0QsICJpbmNsdWRlIik7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgUU5hbWUgRUxFTV9YU0RfU0NIRU1BID0gbmV3IFFOYW1lKE5TX1VSSV9YU0QsICJzY2hlbWEiKTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBFTEVNX1hTRF9FTEVNRU5UID0gbmV3IFFOYW1lKE5TX1VSSV9YU0QsICJlbGVtZW50Iik7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgUU5hbWUgRUxFTV9YU0RfQVRUUklCVVRFID0KLSAgICBuZXcgUU5hbWUoTlNfVVJJX1hTRCwgImF0dHJpYnV0ZSIpOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIEVMRU1fWFNEX0NPTVBMRVhUWVBFID0KLSAgICBuZXcgUU5hbWUoTlNfVVJJX1hTRCwgImNvbXBsZXhUeXBlIik7Ci0KLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBBVFRSX1hTSV9UWVBFID0gbmV3IFFOYW1lKE5TX1VSSV9YU0ksICJ0eXBlIik7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgUU5hbWUgQVRUUl9YU0lfTklMID0gbmV3IFFOYW1lKE5TX1VSSV9YU0ksICJuaWwiKTsKLQotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIEFUVFJfWFNEX05BTUUgPSBuZXcgUU5hbWUoTlNfVVJJX1hTRCwgIm5hbWUiKTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBBVFRSX1hTRF9UWVBFID0gbmV3IFFOYW1lKE5TX1VSSV9YU0QsICJ0eXBlIik7Ci0gIHB1YmxpYyBmaW5hbCBzdGF0aWMgUU5hbWUgQVRUUl9YU0RfQkFTRSA9IG5ldyBRTmFtZShOU19VUklfWFNELCAiYmFzZSIpOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIEFUVFJfWFNEX05BTUVTUEFDRSA9Ci0gICAgbmV3IFFOYW1lKE5TX1VSSV9YU0QsICJuYW1lc3BhY2UiKTsKLSAgcHVibGljIGZpbmFsIHN0YXRpYyBRTmFtZSBBVFRSX1hTRF9TQ0hFTUFMT0NBVElPTiA9Ci0gICAgbmV3IFFOYW1lKE5TX1VSSV9YU0QsICJzY2hlbWFMb2NhdGlvbiIpOwotICBwdWJsaWMgZmluYWwgc3RhdGljIFFOYW1lIEFUVFJfWFNEX1RBUkdFVE5BTUVTUEFDRSA9Ci0gICAgbmV3IFFOYW1lKE5TX1VSSV9YU0QsICJ0YXJnZXROYW1lc3BhY2UiKTsKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL1hNTFRyYXZlcnNhbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL1hNTFRyYXZlcnNhbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjIzM2YwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3htbC9YTUxUcmF2ZXJzYWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sOwotCi1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5DREFUQVNlY3Rpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uQ29tbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudFR5cGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbnRpdHk7Ci1pbXBvcnQgb3JnLnczYy5kb20uRW50aXR5UmVmZXJlbmNlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vdGF0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLlByb2Nlc3NpbmdJbnN0cnVjdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi0vKioKLSAqIFdlIGRvbid0IGhhdmUgYWNjZXNzIHRvIHRoZSBub2RlIHNvdXJjZSBjb2RlLCBzbyB0aGlzIGRvZXMKLSAqIG91ciBkb3VibGUtZGlzcGF0Y2ggdGhlIGhhcmQgd2F5LgotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgWE1MVHJhdmVyc2FsIGV4dGVuZHMgWE1MVmlzaXRvcgotewotICAvKioKLSAgICAgKiBSZXR1cm5pbmcgZmFsc2UgZnJvbSBhY3Rpb24gd291bGQgdGVybWluYXRlcyB0cmF2ZXJzYWwuCi0gICAgICogSG93ZXZlciwgdGhpcyBhbHdheXMgcmV0dXJucyB0cnVlLiAtLSBhIG5vLW9wLgotICAgICAqIEBwYXJhbSBuIC0gYW4gWE1MIG5vZGUuCi0gICAgICogQHJldHVybiBhbHdheXMgdHJ1ZS4KLSAgICAgKi8KLSAgcHVibGljIGJvb2xlYW4gYWN0aW9uKE5vZGUgbikKLSAgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXQoQ0RBVEFTZWN0aW9uIHMpCi0gIHsKLSAgICBhY3Rpb24ocyk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdChEb2N1bWVudCBlKQotICB7Ci0gICAgaWYgKGFjdGlvbihlKSkKLSAgICB7Ci0gICAgICAvLyBUaGlzIGRvZXMgdmlzaXQgRG9jdW1lbnRUeXBlLCB3aGljaCBpcyBjb25zaWRlcmVkIGEgY2hpbGQgTm9kZS4KLSAgICAgIGZvciAoTm9kZSBuID0gZS5nZXRGaXJzdENoaWxkKCk7IG4gIT0gbnVsbDsgbiA9IG4uZ2V0TmV4dFNpYmxpbmcoKSkKLSAgICAgIHsKLSAgICAgICAgZG9WaXNpdChuKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdChEb2N1bWVudFR5cGUgdHlwZSkKLSAgewotICAgIGlmIChhY3Rpb24odHlwZSkpCi0gICAgewotICAgICAgdmlzaXQodHlwZS5nZXRFbnRpdGllcygpKTsKLSAgICAgIHZpc2l0KHR5cGUuZ2V0Tm90YXRpb25zKCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHZpc2l0KEF0dHIgZSkKLSAgewotICAgIGFjdGlvbihlKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHZpc2l0KEVsZW1lbnQgbm9kZSkKLSAgewotICAgIGlmIChhY3Rpb24obm9kZSkpCi0gICAgewotICAgICAgdmlzaXQobm9kZS5nZXRBdHRyaWJ1dGVzKCkpOwotICAgICAgZm9yIChOb2RlIG4gPSBub2RlLmdldEZpcnN0Q2hpbGQoKTsgbiAhPSBudWxsOyBuID0gbi5nZXROZXh0U2libGluZygpKQotICAgICAgewotICAgICAgICBkb1Zpc2l0KG4pOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHZpc2l0KENvbW1lbnQgZSkKLSAgewotICAgIGFjdGlvbihlKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHZpc2l0KFRleHQgZSkKLSAgewotICAgIGFjdGlvbihlKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHZpc2l0KEVudGl0eVJlZmVyZW5jZSBlKQotICB7Ci0gICAgYWN0aW9uKGUpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXQoRW50aXR5IGUpCi0gIHsKLSAgICBhY3Rpb24oZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdChOb3RhdGlvbiBuKQotICB7Ci0gICAgYWN0aW9uKG4pOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXQoUHJvY2Vzc2luZ0luc3RydWN0aW9uIGkpCi0gIHsKLSAgICBhY3Rpb24oaSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdChOYW1lZE5vZGVNYXAgbWFwKQotICB7Ci0gICAgaWYgKG1hcCAhPSBudWxsKQotICAgIHsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWFwLmdldExlbmd0aCgpOyArK2kpCi0gICAgICB7Ci0gICAgICAgIGRvVmlzaXQobWFwLml0ZW0oaSkpOwotICAgICAgfQotICAgIH0KLSAgfQotfQotCi0vLyBFTkQgT0YgRklMRQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL1hNTFV0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvWE1MVXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODYyMjcyNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvWE1MVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotaW1wb3J0IGphdmEuaW8uV3JpdGVyOwotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkk7Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXI7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sLnNlcmlhbGl6ZS5PdXRwdXRGb3JtYXQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWwuc2VyaWFsaXplLlhNTFNlcmlhbGl6ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLldTSUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJVGFnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLk51bGxVdGlsOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uQ2hhcmFjdGVyRGF0YTsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotaW1wb3J0IG9yZy54bWwuc2F4LkVycm9ySGFuZGxlcjsKLWltcG9ydCBvcmcueG1sLnNheC5JbnB1dFNvdXJjZTsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYUGFyc2VFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnhtbC5zYXguWE1MUmVhZGVyOwotCi1pbXBvcnQgY29tLmlibS53c2RsLnV0aWwuU3RyaW5nVXRpbHM7Ci0KLS8qKgotICogU2V0IG9mIFhNTCByZWxhdGVkIHV0aWxpdGllcy4KLSAqIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbQotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgWE1MVXRpbHMKLXsKLQkvKioKLQkgKiBTb21lIHNheCBmZWF0dXJlcyB0aGF0IG5lZWQgdG8gYmUgc2V0LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZFQVRVUkVfTkFNRVNQQUNFX1BSRUZJWEVTID0gImh0dHA6Ly94bWwub3JnL3NheC9mZWF0dXJlcy9uYW1lc3BhY2UtcHJlZml4ZXMiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZFQVRVUkVfTkFNRVNQQUNFUyA9ICJodHRwOi8veG1sLm9yZy9zYXgvZmVhdHVyZXMvbmFtZXNwYWNlcyI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRkVBVFVSRV9WQUxJREFUSU9OX1NDSEVNQSA9ICJodHRwOi8vYXBhY2hlLm9yZy94bWwvZmVhdHVyZXMvdmFsaWRhdGlvbi9zY2hlbWEiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEpBWFBfU0NIRU1BX0xBTkdVQUdFID0gImh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL2pheHAvcHJvcGVydGllcy9zY2hlbWFMYW5ndWFnZSI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVzNDX1hNTF9TQ0hFTUEgPSAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFczQ19TT0FQXzEyX1NDSEVNQSA9ICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSkFYUF9TQ0hFTUFfU09VUkNFID0gImh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL2pheHAvcHJvcGVydGllcy9zY2hlbWFTb3VyY2UiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBST1BFUlRZX0VYVEVSTkFMX1NDSEVNQV9MT0NBVElPTiA9ICJodHRwOi8vYXBhY2hlLm9yZy94bWwvcHJvcGVydGllcy9zY2hlbWEvZXh0ZXJuYWwtc2NoZW1hTG9jYXRpb24iOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU09BUF9FTEVNX0VOVkVMT1BFID0gIkVudmVsb3BlIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTT0FQX0VMRU1fSEVBREVSID0gIkhlYWRlciI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU09BUF9FTEVNX0JPRFkgPSAiQm9keSI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU09BUF9FTEVNX0ZBVUxUID0gIkZhdWx0IjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTT0FQX0VMRU1fRkFVTFRfQ09ERSA9ICJmYXVsdGNvZGUiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNPQVBfRUxFTV9GQVVMVF9TVFJJTkcgPSAiZmF1bHRzdHJpbmciOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNPQVBfRUxFTV9GQVVMVF9ERVRBSUwgPSAiZGV0YWlsIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTT0FQX0VMRU1fRkFVTFRfQUNUT1IgPSAiZmF1bHRhY3RvciI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU09BUF9BVFRSX01VU1RfVU5ERVJTVEFORCA9ICJtdXN0VW5kZXJzdGFuZCI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU09BUF9BVFRSX0FDVE9SID0gImFjdG9yIjsKLQotCS8qKgotCSAqIEdldCBYTUxSZWFkZXIuCi0JICogCi0JICogQHJldHVybiB0aGUgWE1MUmVhZGVyIHZhbHVlCi0JICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdGhlcmUgYXJlIHByb2JsZW1zIGdldHRpbmcgdGhlIFhNTFJlYWRlcgotCSAqICAgICAgICAgICBpbXBsZW1lbnRhdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFhNTFJlYWRlciBnZXRYTUxSZWFkZXIoKSB0aHJvd3MgV1NJRXhjZXB0aW9uIHsKLQkJWE1MUmVhZGVyIHhtbFJlYWRlciA9IG51bGw7Ci0KLQkJdHJ5Ci0JCXsKLQkJCXhtbFJlYWRlciA9IChuZXcgb3JnLmFwYWNoZS54ZXJjZXMuamF4cC5TQVhQYXJzZXJGYWN0b3J5SW1wbCgpKQotCQkJCQkubmV3U0FYUGFyc2VyKCkuZ2V0WE1MUmVhZGVyKCk7Ci0KLQkJCS8vIFNldCBuYW1lc3BhY2UgYXdhcmUKLQkJCXhtbFJlYWRlci5zZXRGZWF0dXJlKEZFQVRVUkVfTkFNRVNQQUNFX1BSRUZJWEVTLCB0cnVlKTsKLQkJCXhtbFJlYWRlci5zZXRGZWF0dXJlKEZFQVRVUkVfTkFNRVNQQUNFUywgdHJ1ZSk7Ci0JCX0KLQotCQljYXRjaCAoRXhjZXB0aW9uIGUpCi0JCXsKLQkJCXRocm93IG5ldyBXU0lFeGNlcHRpb24oIkNvdWxkIG5vdCBnZXQgWE1MUmVhZGVyIGltcGxlbWVudGF0aW9uLiIsIGUpOwotCQl9Ci0KLQkJcmV0dXJuIHhtbFJlYWRlcjsKLQl9Ci0KLQkvKioKLQkgKiBQYXJzZSB0ZXh0IHN0cmluZyBhcyBhbiBYTUwgZG9jdW1lbnQgYW5kIHJldHVybiB0aGUgZG9jdW1lbnQgZWxlbWVudC4KLQkgKiAKLQkgKiBAcGFyYW0gdGV4dCBYTUwgZG9jdW1lbnQgdGV4dC4KLQkgKiBAcGFyYW0gdmFsaWRhdGUgdHJ1ZSBpZiB0aGUgZG9jdW1lbnQgd2lsbCBiZSB2YWxpZGF0ZSwgZmFsc2Ugb3RoZXJ3aXNlCi0JICogQHJldHVybiBhIERvY3VtZW50IG9iamVjdC4KLQkgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBhIHByb2JsZW0gcGFyc2luZyB0aGUgWE1MIGRvY3VtZW50LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRG9jdW1lbnQgcGFyc2VYTUwoU3RyaW5nIHRleHQsIGJvb2xlYW4gdmFsaWRhdGUpCi0JCQl0aHJvd3MgV1NJRXhjZXB0aW9uIHsKLQkJcmV0dXJuIHBhcnNlWE1MKG5ldyBTdHJpbmdSZWFkZXIodGV4dCksIHZhbGlkYXRlKTsKLQl9Ci0KLQkvKioKLQkgKiBQYXJzZSB0ZXh0IHN0cmluZyBhcyBhbiBYTUwgZG9jdW1lbnQgYW5kIHJldHVybiB0aGUgZG9jdW1lbnQgZWxlbWVudC4KLQkgKiAKLQkgKiBAcGFyYW0gdGV4dCBYTUwgZG9jdW1lbnQgdGV4dC4KLQkgKiBAcmV0dXJuIGEgRG9jdW1lbnQgb2JqZWN0LgotCSAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSBwYXJzaW5nIHRoZSBYTUwgZG9jdW1lbnQuCi0JICovCi0JcHVibGljIHN0YXRpYyBEb2N1bWVudCBwYXJzZVhNTChTdHJpbmcgdGV4dCkgdGhyb3dzIFdTSUV4Y2VwdGlvbiB7Ci0JCXJldHVybiBwYXJzZVhNTChuZXcgU3RyaW5nUmVhZGVyKHRleHQpKTsKLQl9Ci0KLQkvKioKLQkgKiBQYXJzZSB0aGUgWE1MIGRvY3VtZW50IGFuZCByZXR1cm4gdGhlIGRvY3VtZW50IGVsZW1lbnQuCi0JICogCi0JICogQHBhcmFtIHVyaSB0aGUgbG9jYXRpb24gb2YgdGhlIFhNTCBkb2N1bWVudC4KLQkgKiBAcmV0dXJuIGEgRG9jdW1lbnQgb2JqZWN0LgotCSAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSBwYXJzaW5nIHRoZSBYTUwgZG9jdW1lbnQuCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbiBpZiBhbiBJL08gZXhjZXB0aW9uIG9mIHNvbWUgc29ydCBoYXMgb2NjdXJyZWQuCi0JICovCi0JcHVibGljIHN0YXRpYyBEb2N1bWVudCBwYXJzZVhNTERvY3VtZW50KFN0cmluZyB1cmkpIAotCXRocm93cyBXU0lFeGNlcHRpb24sIElPRXhjZXB0aW9uIAotCXsKLQkJcmV0dXJuIHBhcnNlWE1MRG9jdW1lbnQodXJpLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBQYXJzZSB0aGUgWE1MIGRvY3VtZW50IGFuZCByZXR1cm4gdGhlIGRvY3VtZW50IGVsZW1lbnQuCi0JICogCi0JICogQHBhcmFtIHVyaSB0aGUgbG9jYXRpb24gb2YgdGhlIFhNTCBkb2N1bWVudC4KLQkgKiBAcGFyYW0gc2NoZW1hIGEgU3RyaW5nIGlkZW50aWZ5aW5nIHJlbGF0ZWQgc2NoZW1hIGRvY3VtZW50LgotCSAqIEByZXR1cm4gYSBEb2N1bWVudCBvYmplY3QuCi0JICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdGhlcmUgaXMgYSBwcm9ibGVtIHBhcnNpbmcgdGhlIFhNTCBkb2N1bWVudC4KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uIGlmIGFuIEkvTyBleGNlcHRpb24gb2Ygc29tZSBzb3J0IGhhcyBvY2N1cnJlZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIERvY3VtZW50IHBhcnNlWE1MRG9jdW1lbnQoU3RyaW5nIHVyaSwgU3RyaW5nIHNjaGVtYSkKLQl0aHJvd3MgV1NJRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAKLQl7Ci0JICAgICAgVVJMIHVybCA9IFN0cmluZ1V0aWxzLmdldFVSTChudWxsLCB1cmkpOwotCSAgICAgIElucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gKElucHV0U3RyZWFtKXVybC5nZXRDb250ZW50KCk7Ci0JICAgICAgSW5wdXRTb3VyY2UgaW5wdXRTb3VyY2UgPSBuZXcgSW5wdXRTb3VyY2UoaW5wdXRTdHJlYW0pOwotCSAgICAgIGlucHV0U291cmNlLnNldFN5c3RlbUlkKHVybC50b1N0cmluZygpKTsKLQkgICAgICAKLQkgICAgICBpZiAoc2NoZW1hID09IG51bGwpCi0JICAgICAgCXJldHVybiBwYXJzZVhNTChpbnB1dFNvdXJjZSwgZmFsc2UpOwotCSAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBwYXJzZVhNTChpbnB1dFNvdXJjZSwgc2NoZW1hKTsKLQl9Ci0KLQkvKioKLQkgKiBQYXJzZXMgYW4gWE1MIGRvY3VtZW50IGZyb20gYSByZWFkZXIgYW5kIHJldHVybnMgdGhlIGRvY3VtZW50IG9iamVjdC4KLQkgKiAKLQkgKiBAcGFyYW0gdXJsIGEgU3RyaW5nIGxvY2F0aW5nIHRoZSBYTUwgZG9jdW1lbnQuCi0JICogQHBhcmFtIHNjaGVtYSBhIFN0cmluZyBpZGVudGlmeWluZyByZWxhdGVkIHNjaGVtYSBkb2N1bWVudC4KLQkgKiBAcGFyYW0gYmFzZVVSSSBhIGJhc2UgdXJsIHRvIGFzc2lzdCBpbiBsb2NhdGluZyB0aGUgWE1MIGRvY3VtZW50LgotCSAqIEByZXR1cm4gRG9jdW1lbnQuCi0JICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdGhlcmUgaXMgYSBwcm9ibGVtIHBhcnNpbmcgdGhlIFhNTCBkb2N1bWVudC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIERvY3VtZW50IHBhcnNlWE1MRG9jdW1lbnRVUkwoU3RyaW5nIHVybCwgU3RyaW5nIHNjaGVtYSwKLQkJCVN0cmluZyBiYXNlVVJJKSB0aHJvd3MgV1NJRXhjZXB0aW9uIHsKLQkJdHJ5Ci0JCXsKLQkJICBwYXJzZVhNTERvY3VtZW50VVJMKGNyZWF0ZVVSTCh1cmwsIGJhc2VVUkkpLCBzY2hlbWEpOwotCQl9Ci0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKQotCQl7Ci0JCQl0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpLCBlKTsKLQkJfQotCi0JCXJldHVybiBwYXJzZVhNTERvY3VtZW50VVJMKHVybCwgc2NoZW1hKTsKLQl9Ci0KLQkvKioKLQkgKiBQYXJzZXMgYW4gWE1MIGRvY3VtZW50IGZyb20gYSByZWFkZXIgYW5kIHJldHVybnMgdGhlIGRvY3VtZW50IG9iamVjdC4KLQkgKiAKLQkgKiBAcGFyYW0gdXJsIGEgVVJMIG9iamVjdCBpZGVudGlmeWluZyB0aGUgWE1MIGRvY3VtZW50LgotCSAqIEBwYXJhbSBzY2hlbWEgYSBTdHJpbmcgaWRlbnRpZnlpbmcgcmVsYXRlZCBzY2hlbWEgZG9jdW1lbnQuCi0JICogQHJldHVybiBEb2N1bWVudC4KLQkgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBhIHByb2JsZW0gcGFyc2luZyB0aGUgWE1MIGRvY3VtZW50LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRG9jdW1lbnQgcGFyc2VYTUxEb2N1bWVudFVSTChVUkwgdXJsLCBTdHJpbmcgc2NoZW1hKQotCQkJdGhyb3dzIFdTSUV4Y2VwdGlvbiB7Ci0JCXRyeQotCQl7Ci0JICAgICAgSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0gPSAoSW5wdXRTdHJlYW0pdXJsLmdldENvbnRlbnQoKTsKLQkgICAgICBJbnB1dFNvdXJjZSBpbnB1dFNvdXJjZSA9IG5ldyBJbnB1dFNvdXJjZShpbnB1dFN0cmVhbSk7Ci0JICAgICAgaW5wdXRTb3VyY2Uuc2V0U3lzdGVtSWQodXJsLnRvU3RyaW5nKCkpOwotCi0JCQlEb2N1bWVudCBkb2MgPSBudWxsOwotCi0JCQlpZiAoc2NoZW1hID09IG51bGwpCi0JCQkJZG9jID0gcGFyc2VYTUwoaW5wdXRTb3VyY2UpOwotCQkJZWxzZQotCQkJCWRvYyA9IHBhcnNlWE1MKGlucHV0U291cmNlLCBzY2hlbWEpOwotCi0JCQlpbnB1dFN0cmVhbS5jbG9zZSgpOwotCQkJcmV0dXJuIGRvYzsKLQkJfQotCi0JCWNhdGNoIChXU0lFeGNlcHRpb24gZSkKLQkJewotCQkJdGhyb3cgZTsKLQkJfQotCi0JCWNhdGNoIChUaHJvd2FibGUgdCkKLQkJewotCQkJdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbih0LmdldE1lc3NhZ2UoKSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBQYXJzZXMgYW4gWE1MIGRvY3VtZW50IGZyb20gYSByZWFkZXIgYW5kIHJldHVybnMgdGhlIGRvY3VtZW50IG9iamVjdC4KLQkgKiAKLQkgKiBAcGFyYW0gdXJsU3RyaW5nIGEgU3RyaW5nIGxvY2F0aW5nIHRoZSBYTUwgZG9jdW1lbnQuCi0JICogQHBhcmFtIGJhc2VVUkkgYSBiYXNlIHVybCB0byBhc3Npc3QgaW4gbG9jYXRpbmcgdGhlIFhNTCBkb2N1bWVudC4KLQkgKiBAcmV0dXJuIERvY3VtZW50IG9iamVjdC4KLQkgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBhIHByb2JsZW0gcGFyc2luZyB0aGUgWE1MIGRvY3VtZW50LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRG9jdW1lbnQgcGFyc2VYTUxEb2N1bWVudFVSTChTdHJpbmcgdXJsU3RyaW5nLCBTdHJpbmcgYmFzZVVSSSkKLQkJCXRocm93cyBXU0lFeGNlcHRpb24gewotCQlEb2N1bWVudCBkb2N1bWVudCA9IG51bGw7Ci0KLQkJdHJ5Ci0JCXsKLQkJCVVSTCB1cmwgPSBjcmVhdGVVUkwodXJsU3RyaW5nLCBiYXNlVVJJKTsKLQotCQkJZG9jdW1lbnQgPSBwYXJzZVhNTERvY3VtZW50VVJMKHVybCk7Ci0JCX0KLQotCQljYXRjaCAoV1NJRXhjZXB0aW9uIHdlKQotCQl7Ci0JCQl0aHJvdyB3ZTsKLQkJfQotCi0JCWNhdGNoIChFeGNlcHRpb24gZSkKLQkJewotCQkJdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSwgZSk7Ci0JCX0KLQotCQlyZXR1cm4gZG9jdW1lbnQ7Ci0JfQotCi0JLyoqCi0JICogUGFyc2VzIGFuIFhNTCBkb2N1bWVudCBmcm9tIGEgcmVhZGVyIGFuZCByZXR1cm5zIHRoZSBkb2N1bWVudCBvYmplY3QuCi0JICogCi0JICogQHBhcmFtIHVybCBhIFVSTCBvYmplY3QgaWRlbnRpZnlpbmcgdGhlIFhNTCBkb2N1bWVudC4KLQkgKiBAcmV0dXJuIERvY3VtZW50LgotCSAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSBwYXJzaW5nIHRoZSBYTUwgZG9jdW1lbnQuCi0JICovCi0JcHVibGljIHN0YXRpYyBEb2N1bWVudCBwYXJzZVhNTERvY3VtZW50VVJMKFVSTCB1cmwpIHRocm93cyBXU0lFeGNlcHRpb24gewotCQlEb2N1bWVudCBkb2N1bWVudCA9IG51bGw7Ci0KLQkJdHJ5Ci0JCXsKLQkJCVJlYWRlciByZWFkZXIgPSBuZXcgSW5wdXRTdHJlYW1SZWFkZXIodXJsLm9wZW5TdHJlYW0oKSk7Ci0JCQlJbnB1dFNvdXJjZSBzb3VyY2UgPSBuZXcgSW5wdXRTb3VyY2UocmVhZGVyKTsKLQkJCXNvdXJjZS5zZXRTeXN0ZW1JZCh1cmwudG9TdHJpbmcoKSk7Ci0JCQlkb2N1bWVudCA9IHBhcnNlWE1MKHNvdXJjZSk7Ci0KLQkJCXJlYWRlci5jbG9zZSgpOwotCQl9Ci0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKQotCQl7Ci0JCQl0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpLCBlKTsKLQkJfQotCi0JCXJldHVybiBkb2N1bWVudDsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBEb2N1bWVudEJ1aWxkZXIgYnVpbGRlciA9IG51bGw7Ci0KLQkvKioKLQkgKiBQYXJzZSBhbiBYTUwgZG9jdW1lbnQgZnJvbSBhIHJlYWRlciBhbmQgcmV0dXJuIHRoZSBkb2N1bWVudCBvYmplY3QuCi0JICogCi0JICogQHBhcmFtIHJlYWRlciBhIFJlYWRlciBvYmplY3QuCi0JICogQHBhcmFtIHZhbGlkYXRlIHRydWUgaWYgdGhlIGRvY3VtZW50IHdpbGwgYmUgdmFsaWRhdGUsIGZhbHNlIG90aGVyd2lzZQotCSAqIEByZXR1cm4gYSBEb2N1bWVudCBvYmplY3QuCi0JICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdGhlcmUgaXMgYSBwcm9ibGVtIHBhcnNpbmcgdGhlIFhNTCBkb2N1bWVudC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIERvY3VtZW50IHBhcnNlWE1MKElucHV0U291cmNlIHNvdXJjZSwgYm9vbGVhbiB2YWxpZGF0ZSkKLQkJCXRocm93cyBXU0lFeGNlcHRpb24gewotCQlEb2N1bWVudCBkb2MgPSBudWxsOwotCQlDbGFzc0xvYWRlciBjdXJyZW50TG9hZGVyID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKTsgICAKLQkJdHJ5Ci0JCXsKLSAgICAJICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihYTUxVdGlscy5jbGFzcy5nZXRDbGFzc0xvYWRlcigpKTsgICAKLQotICAgIAkgIGlmIChidWlsZGVyID09IG51bGwpCi0gICAgCSAgewotICAJCSAgICAvLyBHZXQgdGhlIGRvY3VtZW50IGZhY3RvcnkKLQkJICAgIERvY3VtZW50QnVpbGRlckZhY3RvcnkgZmFjdG9yeSA9IG5ldyBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLmpheHAuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeUltcGwoKTsKLQotCQkgICAgLy8gU2V0IG5hbWVzcGFjZSBhd2FyZSwgYnV0IGZvciBub3cgZG8gbm90IHZhbGlkYXRlCi0JCSAgICBmYWN0b3J5LnNldE5hbWVzcGFjZUF3YXJlKHRydWUpOwotCQkgICAgZmFjdG9yeS5zZXRJZ25vcmluZ0VsZW1lbnRDb250ZW50V2hpdGVzcGFjZSh0cnVlKTsKLQotCQkgICAgLy8gQUREOiBUaGlzIHNob3VsZCBiZSBzZXQgdG8gdHJ1ZSB3aGVuIHdlIGhhdmUgYWNjZXNzIHRvIHRoZSBzY2hlbWEKLQkJICAgIC8vIGRvY3VtZW50Ci0JCSAgICBmYWN0b3J5LnNldFZhbGlkYXRpbmcoZmFsc2UpOwotCi0JCSAgICBidWlsZGVyID0gZmFjdG9yeS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKLSAgICAJICB9Ci0JCSAgLy8gUGFyc2UgdGhlIGRvY3VtZW50Ci0JCSAgZG9jID0gYnVpbGRlci5wYXJzZShzb3VyY2UpOwotCQkgIC8vIHdvcmthcm91bmQgZm9yIGNvbXBhdGliaWxpdHkgWGVyY2VzIDIuMi4xIHdpdGggWGVyY2VzIDIuNi4yLAotCQkgIC8vIFhlcmNlcyAyLjYuMiBzdXBwb3J0ZWQgWE1MIDEuMSBidXQgV1NJLXRvb2wgYW5kIFhlcmNlcyAyLjIuMQotCQkgIC8vIHN1cHBvcnRlZCBvbmx5IFhNTCAxLjAKLQkJICBpZiAoZG9jIGluc3RhbmNlb2Ygb3JnLmFwYWNoZS54ZXJjZXMuZG9tLkRvY3VtZW50SW1wbCkKLQkJICB7Ci0JCQlpZiAoKChvcmcuYXBhY2hlLnhlcmNlcy5kb20uRG9jdW1lbnRJbXBsKSBkb2MpLmdldFhtbFZlcnNpb24oKS5lcXVhbHMoCi0JCQkJCQkiMS4xIikpCi0JCQl7Ci0JCQkJdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigiRmF0YWwgRXJyb3I6IFhNTCB2ZXJzaW9uICZxdW90OzEuMSZxdW90OyAiCi0JCQkJCQkrICJpcyBub3Qgc3VwcG9ydGVkLCBvbmx5IFhNTCAxLjAgaXMgc3VwcG9ydGVkLiIpOwotCQkJfQotCQkgIH0KLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpCi0JCXsKLQkJCXRocm93IG5ldyBXU0lFeGNlcHRpb24oIkNvdWxkIG5vdCBwYXJzZSBYTUwgZG9jdW1lbnQuIiwgZSk7Ci0JCX0KLQkgICAgZmluYWxseQotCSAgICB7IAotCSAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2V0Q29udGV4dENsYXNzTG9hZGVyKGN1cnJlbnRMb2FkZXIpOwotCSAgICB9ICAgIAotCi0JCS8vIFJldHVybiBkb2N1bWVudAotCQlyZXR1cm4gZG9jOwotCX0KLQotCS8qKgotCSAqIFBhcnNlIGFuIFhNTCBkb2N1bWVudCBmcm9tIGEgcmVhZGVyIGFuZCByZXR1cm4gdGhlIGRvY3VtZW50IG9iamVjdC4KLQkgKiAKLQkgKiBAcGFyYW0gcmVhZGVyIGEgUmVhZGVyIG9iamVjdC4KLQkgKiBAcGFyYW0gdmFsaWRhdGUgdHJ1ZSBpZiB0aGUgZG9jdW1lbnQgd2lsbCBiZSB2YWxpZGF0ZSwgZmFsc2Ugb3RoZXJ3aXNlCi0JICogQHJldHVybiBhIERvY3VtZW50IG9iamVjdC4KLQkgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBhIHByb2JsZW0gcGFyc2luZyB0aGUgWE1MIGRvY3VtZW50LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRG9jdW1lbnQgcGFyc2VYTUwoUmVhZGVyIHJlYWRlciwgYm9vbGVhbiB2YWxpZGF0ZSkKLQkJCXRocm93cyBXU0lFeGNlcHRpb24gewotCQlEb2N1bWVudCBkb2MgPSBudWxsOwotCQlDbGFzc0xvYWRlciBjdXJyZW50TG9hZGVyID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKTsgICAKLQkJdHJ5Ci0JCXsKLQkJICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihYTUxVdGlscy5jbGFzcy5nZXRDbGFzc0xvYWRlcigpKTsgICAKLQkJCi0JCSAgLy8gQ3JlYXRlIGlucHV0IHNvdXJjZQotCQkgIElucHV0U291cmNlIGlucHV0U291cmNlID0gbmV3IElucHV0U291cmNlKHJlYWRlcik7Ci0KLQkJICBpZiAoYnVpbGRlciA9PSBudWxsKQotCQkgIHsKLQkJICAgIC8vIEdldCB0aGUgZG9jdW1lbnQgZmFjdG9yeQotCQkgICAgRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBmYWN0b3J5ID0gbmV3IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuamF4cC5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5SW1wbCgpOwotCi0JCSAgICAvLyBTZXQgbmFtZXNwYWNlIGF3YXJlLCBidXQgZm9yIG5vdyBkbyBub3QgdmFsaWRhdGUKLQkJICAgIGZhY3Rvcnkuc2V0TmFtZXNwYWNlQXdhcmUodHJ1ZSk7Ci0JCSAgICBmYWN0b3J5LnNldElnbm9yaW5nRWxlbWVudENvbnRlbnRXaGl0ZXNwYWNlKHRydWUpOwotCi0JCSAgICAvLyBBREQ6IFRoaXMgc2hvdWxkIGJlIHNldCB0byB0cnVlIHdoZW4gd2UgaGF2ZSBhY2Nlc3MgdG8gdGhlIHNjaGVtYQotCQkgICAgLy8gZG9jdW1lbnQKLQkJICAgIGZhY3Rvcnkuc2V0VmFsaWRhdGluZyhmYWxzZSk7Ci0KLQkJICAgIGJ1aWxkZXIgPSBmYWN0b3J5Lm5ld0RvY3VtZW50QnVpbGRlcigpOwotCQkgIH0KLQkJICAvLyBQYXJzZSB0aGUgZG9jdW1lbnQKLQkJICBkb2MgPSBidWlsZGVyLnBhcnNlKGlucHV0U291cmNlKTsKLQkgICAJICAvLyB3b3JrYXJvdW5kIGZvciBjb21wYXRpYmlsaXR5IFhlcmNlcyAyLjIuMSB3aXRoIFhlcmNlcyAyLjYuMiwKLQkJICAvLyBYZXJjZXMgMi42LjIgc3VwcG9ydGVkIFhNTCAxLjEgYnV0IFdTSS10b29sIGFuZCBYZXJjZXMgMi4yLjEKLQkJICAvLyBzdXBwb3J0ZWQgb25seSBYTUwgMS4wCi0JCSAgaWYgKGRvYyBpbnN0YW5jZW9mIG9yZy5hcGFjaGUueGVyY2VzLmRvbS5Eb2N1bWVudEltcGwpCi0JCSAgewotCQkJaWYgKCgob3JnLmFwYWNoZS54ZXJjZXMuZG9tLkRvY3VtZW50SW1wbCkgZG9jKS5nZXRYbWxWZXJzaW9uKCkuZXF1YWxzKAotCQkJCQkJIjEuMSIpKQotCQkJewotCQkJICB0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKCJGYXRhbCBFcnJvcjogWE1MIHZlcnNpb24gJnF1b3Q7MS4xJnF1b3Q7ICIKLQkJCQkJCQkrICJpcyBub3Qgc3VwcG9ydGVkLCBvbmx5IFhNTCAxLjAgaXMgc3VwcG9ydGVkLiIpOwotCQkJfQotCSAgICAgIH0KLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpCi0JCXsKLQkJCXRocm93IG5ldyBXU0lFeGNlcHRpb24oIkNvdWxkIG5vdCBwYXJzZSBYTUwgZG9jdW1lbnQuIiwgZSk7Ci0JCX0KLQkgICAgZmluYWxseQotCSAgICB7IAotCSAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2V0Q29udGV4dENsYXNzTG9hZGVyKGN1cnJlbnRMb2FkZXIpOwotCSAgICB9ICAgIAotCi0JCS8vIFJldHVybiBkb2N1bWVudAotCQlyZXR1cm4gZG9jOwotCX0KLQotCS8qKgotCSAqIFBhcnNlIGFuIFhNTCBkb2N1bWVudCBmcm9tIGEgaW5wdXQgc291cmNlIGFuZCByZXR1cm4gdGhlIGRvY3VtZW50IG9iamVjdC4KLQkgKiAKLQkgKiBAcGFyYW0gc291cmNlIGEgSW5wdXRTb3VyY2Ugb2JqZWN0LgotCSAqIEByZXR1cm4gYSBEb2N1bWVudCBvYmplY3QuCi0JICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdGhlcmUgaXMgYSBwcm9ibGVtIHBhcnNpbmcgdGhlIFhNTCBkb2N1bWVudC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIERvY3VtZW50IHBhcnNlWE1MKFJlYWRlciByZWFkZXIpIHRocm93cyBXU0lFeGNlcHRpb24gewotCQlyZXR1cm4gcGFyc2VYTUwocmVhZGVyLCBmYWxzZSk7Ci0JfQotCi0JLyoqCi0JICogUGFyc2UgYW4gWE1MIGRvY3VtZW50IGZyb20gYSBpbnB1dCBzb3VyY2UgYW5kIHJldHVybiB0aGUgZG9jdW1lbnQgb2JqZWN0LgotCSAqIAotCSAqIEBwYXJhbSBzb3VyY2UgYSBJbnB1dFNvdXJjZSBvYmplY3QuCi0JICogQHJldHVybiBhIERvY3VtZW50IG9iamVjdC4KLQkgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBhIHByb2JsZW0gcGFyc2luZyB0aGUgWE1MIGRvY3VtZW50LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRG9jdW1lbnQgcGFyc2VYTUwoSW5wdXRTb3VyY2Ugc291cmNlKSB0aHJvd3MgV1NJRXhjZXB0aW9uIHsKLQkJcmV0dXJuIHBhcnNlWE1MKHNvdXJjZSwgZmFsc2UpOwotCX0KLQotCS8qKgotCSAqIFBhcnNlIHRleHQgc3RyaW5nIGFzIGFuIFhNTCBkb2N1bWVudCBhbmQgcmV0dXJuIHRoZSBkb2N1bWVudCBlbGVtZW50LgotCSAqIAotCSAqIEBwYXJhbSB0ZXh0IFhNTCBkb2N1bWVudCB0ZXh0LgotCSAqIEBwYXJhbSBzY2hlbWEgYSBTdHJpbmcgaWRlbnRpZnlpbmcgcmVsYXRlZCBzY2hlbWEgZG9jdW1lbnQuCi0JICogQHJldHVybiBhIERvY3VtZW50IG9iamVjdC4KLQkgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBhIHByb2JsZW0gcGFyc2luZyB0aGUgWE1MIGRvY3VtZW50LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRG9jdW1lbnQgcGFyc2VYTUwoU3RyaW5nIHRleHQsIFN0cmluZyBzY2hlbWEpCi0JCQl0aHJvd3MgV1NJRXhjZXB0aW9uIHsKLQkJcmV0dXJuIHBhcnNlWE1MKG5ldyBTdHJpbmdSZWFkZXIodGV4dCksIHNjaGVtYSk7Ci0JfQotCi0JLyoqCi0JICogUGFyc2UgdGV4dCBzdHJpbmcgYXMgYW4gWE1MIGRvY3VtZW50IGFuZCByZXR1cm4gdGhlIGRvY3VtZW50IGVsZW1lbnQuCi0JICogCi0JICogQHBhcmFtIHRleHQgWE1MIGRvY3VtZW50IHRleHQuCi0JICogQHBhcmFtIHNjaGVtYXMgYSBjb2xsZWN0aW9uIG9mIHJlbGF0ZWQgc2NoZW1hIGRvY3VtZW50cy4KLQkgKiBAcmV0dXJuIGEgRG9jdW1lbnQgb2JqZWN0LgotCSAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSBwYXJzaW5nIHRoZSBYTUwgZG9jdW1lbnQuCi0JICovCi0JcHVibGljIHN0YXRpYyBEb2N1bWVudCBwYXJzZVhNTChTdHJpbmcgdGV4dCwgQ29sbGVjdGlvbiBzY2hlbWFzKQotCQkJdGhyb3dzIFdTSUV4Y2VwdGlvbiB7Ci0JCXJldHVybiBwYXJzZVhNTChuZXcgU3RyaW5nUmVhZGVyKHRleHQpLCBzY2hlbWFzKTsKLQl9Ci0KLQotCS8qKgotCSAqIFBhcnNlIHRoZSBYTUwgZG9jdW1lbnQgYW5kIHJldHVybiB0aGUgZG9jdW1lbnQgZWxlbWVudC4KLQkgKiAKLQkgKiBAcGFyYW0gdGV4dCBYTUwgZG9jdW1lbnQgdGV4dC4KLQkgKiBAcGFyYW0gc2NoZW1hU3RyaW5nIGEgU3RyaW5nUmVhZGVyIG9iamVjdC4KLQkgKiBAcmV0dXJuIGEgRG9jdW1lbnQgb2JqZWN0LgotCSAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSBwYXJzaW5nIHRoZSBYTUwgZG9jdW1lbnQuCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbiBpZiBhbiBJL08gZXhjZXB0aW9uIG9mIHNvbWUgc29ydCBoYXMgb2NjdXJyZWQuCi0JICovCi0JcHVibGljIHN0YXRpYyBEb2N1bWVudCBwYXJzZVhNTChTdHJpbmcgdGV4dCwgU3RyaW5nUmVhZGVyIHNjaGVtYVN0cmluZykKLQkJCXRocm93cyBXU0lFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJcmV0dXJuIHBhcnNlWE1MKG5ldyBTdHJpbmdSZWFkZXIodGV4dCksIHNjaGVtYVN0cmluZyk7Ci0JfQotCi0JLyoqCi0JICogUGFyc2UgdGhlIFhNTCBkb2N1bWVudCBhbmQgcmV0dXJuIHRoZSBkb2N1bWVudCBlbGVtZW50LgotCSAqIAotCSAqIEBwYXJhbSByZWFkZXIgYSBSZWFkZXIgb2JqZWN0LgotCSAqIEBwYXJhbSBzY2hlbWEgYSBTdHJpbmcgaWRlbnRpZnlpbmcgcmVsYXRlZCBzY2hlbWEgZG9jdW1lbnQuCi0JICogQHJldHVybiBhIERvY3VtZW50IG9iamVjdC4KLQkgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBhIHByb2JsZW0gcGFyc2luZyB0aGUgWE1MIGRvY3VtZW50LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRG9jdW1lbnQgcGFyc2VYTUwoUmVhZGVyIHJlYWRlciwgU3RyaW5nIHNjaGVtYSkKLQkJCXRocm93cyBXU0lFeGNlcHRpb24gewotCQlEb2N1bWVudCBkb2MgPSBudWxsOwotCQlDbGFzc0xvYWRlciBjdXJyZW50TG9hZGVyID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKTsgICAKLQkJdHJ5Ci0JCXsKLSAgICAJICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihYTUxVdGlscy5jbGFzcy5nZXRDbGFzc0xvYWRlcigpKTsgICAKLQkJICAvLyBDcmVhdGUgaW5wdXQgc291cmNlCi0JCSAgSW5wdXRTb3VyY2UgaW5wdXRTb3VyY2UgPSBuZXcgSW5wdXRTb3VyY2UocmVhZGVyKTsKLQotCQkgIC8vIEdldCB0aGUgZG9jdW1lbnQgZmFjdG9yeQotCQkgIERvY3VtZW50QnVpbGRlckZhY3RvcnkgZmFjdG9yeSA9IG5ldyBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLmpheHAuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeUltcGwoKTsKLQotCQkgIC8vIFNldCBuYW1lc3BhY2UgYXdhcmUsIGJ1dCBmb3Igbm93IGRvIG5vdCB2YWxpZGF0ZQotCQkgIGZhY3Rvcnkuc2V0TmFtZXNwYWNlQXdhcmUodHJ1ZSk7Ci0JCSAgZmFjdG9yeS5zZXRJZ25vcmluZ0VsZW1lbnRDb250ZW50V2hpdGVzcGFjZSh0cnVlKTsKLQotCQkgIHRyeQotCQkgIHsKLQkJICAgIGZhY3Rvcnkuc2V0VmFsaWRhdGluZyhmYWxzZSk7Ci0JCQlmYWN0b3J5LnNldEF0dHJpYnV0ZShKQVhQX1NDSEVNQV9MQU5HVUFHRSwgVzNDX1hNTF9TQ0hFTUEpOwotIAkJICB9Ci0gICAJCSAgY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKQotCQkgIHsKLQkJCVN0cmluZyBlcnJNZXNzYWdlID0gIkVycm9yOiBKQVhQIERvY3VtZW50QnVpbGRlckZhY3RvcnkgYXR0cmlidXRlIG5vdCByZWNvZ25pemVkOiAiCi0JCQkJCSsgSkFYUF9TQ0hFTUFfTEFOR1VBR0UKLQkJCQkJKyAiXG4iCi0JCQkJCSsgIkNoZWNrIHRvIHNlZSBpZiBwYXJzZXIgY29uZm9ybXMgdG8gSkFYUCAxLjIgc3BlYy4iOwotCQkJdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbihlcnJNZXNzYWdlLCBlKTsKLQkJICB9Ci0JCSAgZmFjdG9yeS5zZXRBdHRyaWJ1dGUoSkFYUF9TQ0hFTUFfU09VUkNFLCBuZXcgSW5wdXRTb3VyY2Uoc2NoZW1hKSk7Ci0KLQkJICAvLyBQYXJzZSB0aGUgZG9jdW1lbnQKLQkJICBEb2N1bWVudEJ1aWxkZXIgYnVpbGRlciA9IGZhY3RvcnkubmV3RG9jdW1lbnRCdWlsZGVyKCk7Ci0JCSAgYnVpbGRlci5zZXRFcnJvckhhbmRsZXIobmV3IEVyckhhbmRsZXIoKSk7Ci0JCSAgZG9jID0gYnVpbGRlci5wYXJzZShpbnB1dFNvdXJjZSk7Ci0KLQkJICAvLyB3b3JrYXJvdW5kIGZvciBjb21wYXRpYmlsaXR5IFhlcmNlcyAyLjIuMSB3aXRoIFhlcmNlcyAyLjYuMiwKLQkJICAvLyBYZXJjZXMgMi42LjIgc3VwcG9ydGVkIFhNTCAxLjEgYnV0IFdTSS10b29sIGFuZCBYZXJjZXMgMi4yLjEKLQkJICAvLyBzdXBwb3J0ZWQgb25seSBYTUwgMS4wCi0JCSAgaWYgKGRvYyBpbnN0YW5jZW9mIG9yZy5hcGFjaGUueGVyY2VzLmRvbS5Eb2N1bWVudEltcGwpCi0JCSAgewotCQkJaWYgKCgob3JnLmFwYWNoZS54ZXJjZXMuZG9tLkRvY3VtZW50SW1wbCkgZG9jKS5nZXRYbWxWZXJzaW9uKCkuZXF1YWxzKCIxLjEiKSkKLQkJCXsKLQkJIAkgIHRocm93IG5ldyBXU0lFeGNlcHRpb24oIkZhdGFsIEVycm9yOiBYTUwgdmVyc2lvbiAmcXVvdDsxLjEmcXVvdDsgIgotCQkJCQkJCSsgImlzIG5vdCBzdXBwb3J0ZWQsIG9ubHkgWE1MIDEuMCBpcyBzdXBwb3J0ZWQuIik7Ci0JCQl9Ci0JCSAgfQotCSAgICB9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkKLQkJewotCQkJdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigiQ291bGQgbm90IHBhcnNlIFhNTCBkb2N1bWVudC4iLCBlKTsKLQkJfQotCSAgICBmaW5hbGx5Ci0JICAgIHsgCi0JICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zZXRDb250ZXh0Q2xhc3NMb2FkZXIoY3VycmVudExvYWRlcik7Ci0JICAgIH0gICAgCi0JCS8vIFJldHVybiBkb2N1bWVudAotICAgIAlyZXR1cm4gZG9jOwotCX0KLQotCS8qKgotCSAqIFBhcnNlIHRoZSBYTUwgZG9jdW1lbnQgYW5kIHJldHVybiB0aGUgZG9jdW1lbnQgZWxlbWVudC4KLQkgKiAKLQkgKiBAcGFyYW0gcmVhZGVyIGEgUmVhZGVyIG9iamVjdC4KLQkgKiBAcGFyYW0gc2NoZW1hIGEgU3RyaW5nIGlkZW50aWZ5aW5nIHJlbGF0ZWQgc2NoZW1hIGRvY3VtZW50LgotCSAqIEByZXR1cm4gYSBEb2N1bWVudCBvYmplY3QuCi0JICogQHRocm93cyBXU0lFeGNlcHRpb24gaWYgdGhlcmUgaXMgYSBwcm9ibGVtIHBhcnNpbmcgdGhlIFhNTCBkb2N1bWVudC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIERvY3VtZW50IHBhcnNlWE1MKElucHV0U291cmNlIHNvdXJjZSwgU3RyaW5nIHNjaGVtYSkKLQkJCXRocm93cyBXU0lFeGNlcHRpb24gewotCQlEb2N1bWVudCBkb2MgPSBudWxsOwotCQlDbGFzc0xvYWRlciBjdXJyZW50TG9hZGVyID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKTsgICAKLQkJdHJ5Ci0JCXsKLSAgICAJICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihYTUxVdGlscy5jbGFzcy5nZXRDbGFzc0xvYWRlcigpKTsgICAKLSAJCSAgLy8gR2V0IHRoZSBkb2N1bWVudCBmYWN0b3J5Ci0JCSAgRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBmYWN0b3J5ID0gbmV3IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuamF4cC5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5SW1wbCgpOwotCi0JCSAgLy8gU2V0IG5hbWVzcGFjZSBhd2FyZSwgYnV0IGZvciBub3cgZG8gbm90IHZhbGlkYXRlCi0JCSAgZmFjdG9yeS5zZXROYW1lc3BhY2VBd2FyZSh0cnVlKTsKLQkJICBmYWN0b3J5LnNldElnbm9yaW5nRWxlbWVudENvbnRlbnRXaGl0ZXNwYWNlKHRydWUpOwotCi0JCSAgZmFjdG9yeS5zZXRWYWxpZGF0aW5nKGZhbHNlKTsKLQkJICB0cnkKLQkJICB7Ci0JCQlmYWN0b3J5LnNldEF0dHJpYnV0ZShKQVhQX1NDSEVNQV9MQU5HVUFHRSwgVzNDX1hNTF9TQ0hFTUEpOwotCQkgIH0KLQotCQkgIGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkKLQkJICB7Ci0JCQlTdHJpbmcgZXJyTWVzc2FnZSA9ICJFcnJvcjogSkFYUCBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5IGF0dHJpYnV0ZSBub3QgcmVjb2duaXplZDogIgotCQkJCQkrIEpBWFBfU0NIRU1BX0xBTkdVQUdFCi0JCQkJCSsgIlxuIgotCQkJCQkrICJDaGVjayB0byBzZWUgaWYgcGFyc2VyIGNvbmZvcm1zIHRvIEpBWFAgMS4yIHNwZWMuIjsKLQkJCXRocm93IG5ldyBXU0lFeGNlcHRpb24oZXJyTWVzc2FnZSwgZSk7Ci0JCSAgfQotCQkgIGZhY3Rvcnkuc2V0QXR0cmlidXRlKEpBWFBfU0NIRU1BX1NPVVJDRSwgbmV3IElucHV0U291cmNlKHNjaGVtYSkpOwotCi0gICAgICAgICAgLy8gUGFyc2UgdGhlIGRvY3VtZW50Ci0JCSAgRG9jdW1lbnRCdWlsZGVyIGJ1aWxkZXIgPSBmYWN0b3J5Lm5ld0RvY3VtZW50QnVpbGRlcigpOwotCQkgIGJ1aWxkZXIuc2V0RXJyb3JIYW5kbGVyKG5ldyBFcnJIYW5kbGVyKCkpOwotCQkgIGRvYyA9IGJ1aWxkZXIucGFyc2Uoc291cmNlKTsKLQotCQkgIC8vIHdvcmthcm91bmQgZm9yIGNvbXBhdGliaWxpdHkgWGVyY2VzIDIuMi4xIHdpdGggWGVyY2VzIDIuNi4yLAotCQkgIC8vIFhlcmNlcyAyLjYuMiBzdXBwb3J0ZWQgWE1MIDEuMSBidXQgV1NJLXRvb2wgYW5kIFhlcmNlcyAyLjIuMQotCQkgIC8vIHN1cHBvcnRlZCBvbmx5IFhNTCAxLjAKLQkJICBpZiAoZG9jIGluc3RhbmNlb2Ygb3JnLmFwYWNoZS54ZXJjZXMuZG9tLkRvY3VtZW50SW1wbCkKLQkJICB7Ci0JCQlpZiAoKChvcmcuYXBhY2hlLnhlcmNlcy5kb20uRG9jdW1lbnRJbXBsKSBkb2MpLmdldFhtbFZlcnNpb24oKS5lcXVhbHMoCi0JCQkJCQkiMS4xIikpCi0JCQl7Ci0JCQkJdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbigiRmF0YWwgRXJyb3I6IFhNTCB2ZXJzaW9uICZxdW90OzEuMSZxdW90OyAiCi0JCQkJCQkrICJpcyBub3Qgc3VwcG9ydGVkLCBvbmx5IFhNTCAxLjAgaXMgc3VwcG9ydGVkLiIpOwotCQkJfQotCQkgIH0KLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpCi0JCXsKLQkJCXRocm93IG5ldyBXU0lFeGNlcHRpb24oIkNvdWxkIG5vdCBwYXJzZSBYTUwgZG9jdW1lbnQuIiwgZSk7Ci0JCX0KLQkgICAgZmluYWxseQotCSAgICB7IAotCSAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2V0Q29udGV4dENsYXNzTG9hZGVyKGN1cnJlbnRMb2FkZXIpOwotCSAgICB9ICAgIAotCi0JCS8vIFJldHVybiBkb2N1bWVudAotCQlyZXR1cm4gZG9jOwotCi0JfQotCi0JLyoqCi0JICogUGFyc2UgdGhlIFhNTCBkb2N1bWVudCBhbmQgcmV0dXJuIHRoZSBkb2N1bWVudCBlbGVtZW50LgotCSAqIAotCSAqIEBwYXJhbSBmaWxlbmFtZSBhIFJlYWRlciBvYmplY3QuCi0JICogQHBhcmFtIHNjaGVtYVN0cmluZyBhIFN0cmluZ1JlYWRlciBvYmplY3QuCi0JICogQHJldHVybiBhIERvY3VtZW50IG9iamVjdC4KLQkgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBhIHByb2JsZW0gcGFyc2luZyB0aGUgWE1MIGRvY3VtZW50LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRG9jdW1lbnQgcGFyc2VYTUwoUmVhZGVyIGZpbGVuYW1lLCBTdHJpbmdSZWFkZXIgc2NoZW1hU3RyaW5nKQotCQkJdGhyb3dzIFdTSUV4Y2VwdGlvbiB7Ci0KLQkJRG9jdW1lbnQgZG9jID0gbnVsbDsKLQkJQ2xhc3NMb2FkZXIgY3VycmVudExvYWRlciA9IFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0Q29udGV4dENsYXNzTG9hZGVyKCk7ICAgCi0JCXRyeQotCQl7Ci0gICAgCSAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zZXRDb250ZXh0Q2xhc3NMb2FkZXIoWE1MVXRpbHMuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKSk7ICAgCi0KLQkJICAvLyBDcmVhdGUgaW5wdXQgc291cmNlCi0JCSAgSW5wdXRTb3VyY2UgaW5wdXRTb3VyY2UgPSBuZXcgSW5wdXRTb3VyY2UoZmlsZW5hbWUpOwotCi0JCSAgLy8gR2V0IHRoZSBkb2N1bWVudCBmYWN0b3J5Ci0JCSAgRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBmYWN0b3J5ID0gbmV3IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuamF4cC5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5SW1wbCgpOwotCi0JCSAgLy8gU2V0IG5hbWVzcGFjZSBhd2FyZSwgYnV0IGZvciBub3cgZG8gbm90IHZhbGlkYXRlCi0JCSAgZmFjdG9yeS5zZXROYW1lc3BhY2VBd2FyZSh0cnVlKTsKLQkJICBmYWN0b3J5LnNldElnbm9yaW5nRWxlbWVudENvbnRlbnRXaGl0ZXNwYWNlKHRydWUpOwotCi0JCSAgZmFjdG9yeS5zZXRWYWxpZGF0aW5nKGZhbHNlKTsKLQkJICB0cnkKLQkJICB7Ci0JCQlmYWN0b3J5LnNldEF0dHJpYnV0ZShKQVhQX1NDSEVNQV9MQU5HVUFHRSwgVzNDX1hNTF9TQ0hFTUEpOwotCQkgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKQotCQkgIHsKLQkJCVN0cmluZyBlcnJNZXNzYWdlID0gIkVycm9yOiBKQVhQIERvY3VtZW50QnVpbGRlckZhY3RvcnkgYXR0cmlidXRlIG5vdCByZWNvZ25pemVkOiAiCi0JCQkJCSsgSkFYUF9TQ0hFTUFfTEFOR1VBR0UKLQkJCQkJKyAiXG4iCi0JCQkJCSsgIkNoZWNrIHRvIHNlZSBpZiBwYXJzZXIgY29uZm9ybXMgdG8gSkFYUCAxLjIgc3BlYy4iOwotCQkJdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbihlcnJNZXNzYWdlLCBlKTsKLQkJICB9Ci0JCSAgZmFjdG9yeS5zZXRBdHRyaWJ1dGUoSkFYUF9TQ0hFTUFfU09VUkNFLCBuZXcgSW5wdXRTb3VyY2Uoc2NoZW1hU3RyaW5nKSk7Ci0KLQkJICAvLyBQYXJzZSB0aGUgZG9jdW1lbnQKLQkJICBEb2N1bWVudEJ1aWxkZXIgYnVpbGRlciA9IGZhY3RvcnkubmV3RG9jdW1lbnRCdWlsZGVyKCk7Ci0JCSAgYnVpbGRlci5zZXRFcnJvckhhbmRsZXIobmV3IEVyckhhbmRsZXIoKSk7Ci0JCSAgZG9jID0gYnVpbGRlci5wYXJzZShpbnB1dFNvdXJjZSk7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKQotCQl7Ci0JCQl0aHJvdyBuZXcgV1NJRXhjZXB0aW9uKCJDb3VsZCBub3QgcGFyc2UgWE1MIGRvY3VtZW50LiIsIGUpOwotCQl9Ci0JICAgIGZpbmFsbHkKLQkgICAgeyAKLQkgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihjdXJyZW50TG9hZGVyKTsKLQkgICAgfSAgICAKLQotCQkvLyBSZXR1cm4gZG9jdW1lbnQKLQkJcmV0dXJuIGRvYzsKLQotCX0KLQotCS8qKgotCSAqIFBhcnNlIHRoZSBYTUwgZG9jdW1lbnQgYW5kIHJldHVybiB0aGUgZG9jdW1lbnQgZWxlbWVudC4KLQkgKiAKLQkgKiBAcGFyYW0gZmlsZW5hbWUgYSBSZWFkZXIgb2JqZWN0Ci0JICogQHBhcmFtIHNjaGVtYVN0cmluZ3MgYSBjb2xsZWN0aW9uIG9mIHJlbGF0ZWQgc2NoZW1hIGRvY3VtZW50cy4KLQkgKiBAcmV0dXJuIGEgRG9jdW1lbnQgb2JqZWN0LgotCSAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSBwYXJzaW5nIHRoZSBYTUwgZG9jdW1lbnQuCi0JICovCi0JcHVibGljIHN0YXRpYyBEb2N1bWVudCBwYXJzZVhNTChSZWFkZXIgZmlsZW5hbWUsIENvbGxlY3Rpb24gc2NoZW1hU3RyaW5ncykKLQkJCXRocm93cyBXU0lFeGNlcHRpb24gewotCi0JCURvY3VtZW50IGRvYyA9IG51bGw7Ci0JCUNsYXNzTG9hZGVyIGN1cnJlbnRMb2FkZXIgPSBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldENvbnRleHRDbGFzc0xvYWRlcigpOyAgIAotCQl0cnkKLQkJewotICAgIAkgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2V0Q29udGV4dENsYXNzTG9hZGVyKFhNTFV0aWxzLmNsYXNzLmdldENsYXNzTG9hZGVyKCkpOyAgIAotCi0JCSAgLy8gQ3JlYXRlIGlucHV0IHNvdXJjZQotCQkgIElucHV0U291cmNlIGlucHV0U291cmNlID0gbmV3IElucHV0U291cmNlKGZpbGVuYW1lKTsKLQotCQkgIC8vIEdldCB0aGUgZG9jdW1lbnQgZmFjdG9yeQotCQkgIERvY3VtZW50QnVpbGRlckZhY3RvcnkgZmFjdG9yeSA9IG5ldyBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLmpheHAuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeUltcGwoKTsKLQotCQkgIC8vIFNldCBuYW1lc3BhY2UgYXdhcmUsIGJ1dCBmb3Igbm93IGRvIG5vdCB2YWxpZGF0ZQotCQkgIGZhY3Rvcnkuc2V0TmFtZXNwYWNlQXdhcmUodHJ1ZSk7Ci0JCSAgZmFjdG9yeS5zZXRJZ25vcmluZ0VsZW1lbnRDb250ZW50V2hpdGVzcGFjZSh0cnVlKTsKLQotCQkgIGZhY3Rvcnkuc2V0VmFsaWRhdGluZyhmYWxzZSk7Ci0JCSAgdHJ5Ci0JCSAgewotCQkJZmFjdG9yeS5zZXRBdHRyaWJ1dGUoSkFYUF9TQ0hFTUFfTEFOR1VBR0UsIFczQ19YTUxfU0NIRU1BKTsKLQkJICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkKLQkJICB7Ci0JCSAgICBTdHJpbmcgZXJyTWVzc2FnZSA9ICJFcnJvcjogSkFYUCBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5IGF0dHJpYnV0ZSBub3QgcmVjb2duaXplZDogIgotCQkJCQkrIEpBWFBfU0NIRU1BX0xBTkdVQUdFCi0JCQkJCSsgIlxuIgotCQkJCQkrICJDaGVjayB0byBzZWUgaWYgcGFyc2VyIGNvbmZvcm1zIHRvIEpBWFAgMS4yIHNwZWMuIjsKLQkJCXRocm93IG5ldyBXU0lFeGNlcHRpb24oZXJyTWVzc2FnZSwgZSk7Ci0JCSAgfQotCQkgIC8vIGNvbnZlcnQgc2NoZW1hIHN0cmluZ3MgdG8gYXJyYXkgb2YgSW5wdXRTb3VyY2VzCi0JCSAgSXRlcmF0b3IgaSA9IHNjaGVtYVN0cmluZ3MuaXRlcmF0b3IoKTsKLQkJICBWZWN0b3IgcmVhZGVycyA9IG5ldyBWZWN0b3IoKTsKLQkJICB3aGlsZSAoaS5oYXNOZXh0KCkpCi0JCSAgewotCQkJU3RyaW5nIG5leHRTY2hlbWEgPSAoU3RyaW5nKSBpLm5leHQoKTsKLQkJCXJlYWRlcnMuYWRkKG5ldyBJbnB1dFNvdXJjZShuZXcgU3RyaW5nUmVhZGVyKG5leHRTY2hlbWEpKSk7Ci0JCSAgfQotCQkgIElucHV0U291cmNlW10gaW5wdXRTb3VyY2VzID0gKElucHV0U291cmNlW10pIHJlYWRlcnMKLQkJCQkudG9BcnJheShuZXcgSW5wdXRTb3VyY2VbXXt9KTsKLQkJICAvLyBwYXNzIGFuIGFycmF5IG9mIHNjaGVtYSBzdHJpbmdzIChlYWNoIG9mIHdoaWNoIGNvbnRhaW5zIGEgc2NoZW1hKQotCQkgIGZhY3Rvcnkuc2V0QXR0cmlidXRlKEpBWFBfU0NIRU1BX1NPVVJDRSwgaW5wdXRTb3VyY2VzKTsKLQotCQkgIC8vIFBhcnNlIHRoZSBkb2N1bWVudAotCQkgIERvY3VtZW50QnVpbGRlciBidWlsZGVyID0gZmFjdG9yeS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKLQkJICBidWlsZGVyLnNldEVycm9ySGFuZGxlcihuZXcgRXJySGFuZGxlcigpKTsKLQkJICBkb2MgPSBidWlsZGVyLnBhcnNlKGlucHV0U291cmNlKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpCi0JCXsKLQkJCXRocm93IG5ldyBXU0lFeGNlcHRpb24oIkNvdWxkIG5vdCBwYXJzZSBYTUwgZG9jdW1lbnQuIiwgZSk7Ci0JCX0KLQkgICAgZmluYWxseQotCSAgICB7IAotCSAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2V0Q29udGV4dENsYXNzTG9hZGVyKGN1cnJlbnRMb2FkZXIpOwotCSAgICB9ICAgIAotCi0JCS8vIFJldHVybiBkb2N1bWVudAotCQlyZXR1cm4gZG9jOwotCi0JfQotCi0JLyoqCi0JICogR2V0IGF0dHJpYnV0ZSB2YWx1ZSB3aXRoIHRoZSBnaXZlbiBuYW1lIGRlZmluZWQgZm9yIHRoZSBzcGVjaWZpZWQgZWxlbWVudC4KLQkgKiAKLQkgKiBAcGFyYW0gZWxlbWVudCBhbiBFbGVtZW50IG9iamVjdC4KLQkgKiBAcGFyYW0gYXR0ck5hbWUgYSBuYW1lIG9mIGFuIGF0dHJpYnV0ZQotCSAqIEByZXR1cm4gdGhlIGF0dHJpYnV0ZSB2YWx1ZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBdHRyaWJ1dGVWYWx1ZShFbGVtZW50IGVsZW1lbnQsIFN0cmluZyBhdHRyTmFtZSkgewotCQlTdHJpbmcgYXR0clZhbHVlID0gbnVsbDsKLQkJQXR0ciBhdHRyID0gbnVsbDsKLQotCQkvLyBHZXQgdGhlIGF0dHJpYnV0ZSB1c2luZyBpdHMgbmFtZQotCQlpZiAoKGF0dHIgPSBlbGVtZW50LmdldEF0dHJpYnV0ZU5vZGUoYXR0ck5hbWUpKSAhPSBudWxsKQotCQl7Ci0JCQlhdHRyVmFsdWUgPSBhdHRyLmdldFZhbHVlKCkudHJpbSgpOwotCQl9Ci0KLQkJLy8gUmV0dXJuIGF0dHJpYnV0ZSB2YWx1ZQotCQlyZXR1cm4gYXR0clZhbHVlOwotCX0KLQotCS8qKgotCSAqIEdldCBhdHRyaWJ1dGUgdmFsdWUuCi0JICogCi0JICogQHBhcmFtIGVsZW1lbnQgYW4gRWxlbWVudCBvYmplY3QuCi0JICogQHBhcmFtIGF0dHJOYW1lIGEgbmFtZSBvZiBhbiBhdHRyaWJ1dGUKLQkgKiBAcGFyYW0gZGVmYXVsdFZhbHVlIGEgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIHNwZWNpZmllZCBhdHRyaWJ1dGUuCi0JICogQHJldHVybiB0aGUgYXR0cmlidXRlIHZhbHVlIGlmIGZvdW5kLiBPdGhlcndpc2UgdGhlIHNwZWNpZmllZCBkZWZhdWx0Ci0JICogICAgICAgICB2YWx1ZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBdHRyaWJ1dGVWYWx1ZShFbGVtZW50IGVsZW1lbnQsIFN0cmluZyBhdHRyTmFtZSwKLQkJCVN0cmluZyBkZWZhdWx0VmFsdWUpIHsKLQkJU3RyaW5nIHJldHVyblZhbHVlID0gZGVmYXVsdFZhbHVlOwotCQlTdHJpbmcgYXR0clZhbHVlID0gbnVsbDsKLQotCQlpZiAoKGF0dHJWYWx1ZSA9IGdldEF0dHJpYnV0ZVZhbHVlKGVsZW1lbnQsIGF0dHJOYW1lKSkgIT0gbnVsbCkKLQkJCXJldHVyblZhbHVlID0gYXR0clZhbHVlOwotCi0JCXJldHVybiByZXR1cm5WYWx1ZTsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgYXR0cmlidXRlIHZhbHVlLgotCSAqIAotCSAqIEBwYXJhbSBlbGVtZW50IGFuIEVsZW1lbnQgb2JqZWN0LgotCSAqIEBwYXJhbSBuYW1lc3BhY2UgYSBuYW1lc3BhY2UuCi0JICogQHBhcmFtIGF0dHJOYW1lIGEgbmFtZSBvZiBhbiBhdHRyaWJ1dGUKLQkgKiBAcmV0dXJuIHRoZSBhdHRyaWJ1dGUgdmFsdWUuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QXR0cmlidXRlVmFsdWVOUyhFbGVtZW50IGVsZW1lbnQsIFN0cmluZyBuYW1lc3BhY2UsCi0JCQlTdHJpbmcgYXR0ck5hbWUpIHsKLQkJU3RyaW5nIGF0dHJWYWx1ZSA9IG51bGw7Ci0JCUF0dHIgYXR0ciA9IG51bGw7Ci0KLQkJLy8gR2V0IHRoZSBhdHRyaWJ1dGUgdXNpbmcgaXRzIG5hbWUKLQkJaWYgKChhdHRyID0gZWxlbWVudC5nZXRBdHRyaWJ1dGVOb2RlTlMobmFtZXNwYWNlLCBhdHRyTmFtZSkpICE9IG51bGwpCi0JCXsKLQkJCWF0dHJWYWx1ZSA9IGF0dHIuZ2V0VmFsdWUoKS50cmltKCk7Ci0JCX0KLQotCQkvLyBSZXR1cm4gYXR0cmlidXRlIHZhbHVlCi0JCXJldHVybiBhdHRyVmFsdWU7Ci0JfQotCi0JLyoqCi0JICogR2V0IHRoZSBmaXJzdCBjaGlsZCBlbGVtZW50IGZyb20gdGhlIGlucHV0IGVsbWVudC4KLQkgKiAKLQkgKiBAcGFyYW0gZWxlbWVudCBhbiBFbGVtZW50IG9iamVjdC4KLQkgKiBAcmV0dXJuIHRoZSBmaXJzdGNoaWxkIGVsZW1lbnQuCi0JICovCi0JcHVibGljIHN0YXRpYyBFbGVtZW50IGdldEZpcnN0Q2hpbGQoRWxlbWVudCBlbGVtZW50KSB7Ci0JCS8vIFJldHVybiB0aGUgZmlyc3QgY2hpbGQgZWxlbWVudAotCQlyZXR1cm4gZmluZE5leHRTaWJsaW5nKGVsZW1lbnQuZ2V0Rmlyc3RDaGlsZCgpKTsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgdGhlIG5leHQgc2libGluZyBlbGVtZW50LgotCSAqIAotCSAqIEBwYXJhbSBlbGVtZW50IC0gYW4gRWxlbWVudCBvYmplY3QuCi0JICogQHJldHVybiB0aGUgbmV4dCBzaWJsaW5nIGVsZW1lbnQuCi0JICovCi0JcHVibGljIHN0YXRpYyBFbGVtZW50IGdldE5leHRTaWJsaW5nKEVsZW1lbnQgZWxlbWVudCkgewotCQkvLyBSZXR1cm4gbmV4dCBzaWJsaW5nIGVsZW1lbnQKLQkJcmV0dXJuIGZpbmROZXh0U2libGluZyhlbGVtZW50LmdldE5leHRTaWJsaW5nKCkpOwotCX0KLQotCS8qKgotCSAqIEZpbmQgdGhlIG5leHQgc2libGluZyBlbGVtZW50LgotCSAqIAotCSAqIEBwYXJhbSBzdGFydE5vZGUgWE1MIHN0YXJ0IG5vZGUuCi0JICogQHJldHVybiB0aGUgbmV4dCBzaWJsaW5nIGVsZW1lbnQuCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBFbGVtZW50IGZpbmROZXh0U2libGluZyhOb2RlIHN0YXJ0Tm9kZSkgewotCQlOb2RlIG5vZGUgPSBudWxsOwotCQlFbGVtZW50IHJldHVybkVsZW1lbnQgPSBudWxsOwotCi0JCS8vIEZpbmQgdGhlIG5leHQgc2libGluZyBlbGVtZW50Ci0JCWZvciAobm9kZSA9IHN0YXJ0Tm9kZTsgbm9kZSAhPSBudWxsICYmIHJldHVybkVsZW1lbnQgPT0gbnVsbDsgbm9kZSA9IG5vZGUKLQkJCQkuZ2V0TmV4dFNpYmxpbmcoKSkKLQkJewotCQkJLy8gSWYgdGhpcyBub2RlIGlzIGFuIGVsZW1lbnQgbm9kZSwgdGhlbiByZXR1cm4gaXQKLQkJCWlmIChub2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpCi0JCQl7Ci0JCQkJcmV0dXJuRWxlbWVudCA9IChFbGVtZW50KSBub2RlOwotCQkJfQotCQl9Ci0KLQkJLy8gUmV0dXJuIG5leHQgc2libGluZyBlbGVtZW50Ci0JCXJldHVybiAoRWxlbWVudCkgcmV0dXJuRWxlbWVudDsKLQl9Ci0KLQkvKioKLQkgKiBGaW5kIHRoZSBwcmV2aW91cyBzaWJsaW5nIGVsZW1lbnQuCi0JICogCi0JICogQHBhcmFtIHN0YXJ0Tm9kZSBYTUwgc3RhcnQgbm9kZS4KLQkgKiBAcmV0dXJuIHRoZSBwcmV2aW91cyBzaWJsaW5nIGVsZW1lbnQuCi0JICovCi0JcHVibGljIHN0YXRpYyBFbGVtZW50IGZpbmRQcmV2aW91c1NpYmxpbmcoTm9kZSBzdGFydE5vZGUpIHsKLQkJaWYgKHN0YXJ0Tm9kZSA9PSBudWxsKQotCQkJcmV0dXJuIG51bGw7Ci0KLQkJd2hpbGUgKHN0YXJ0Tm9kZSAhPSBudWxsKQotCQl7Ci0JCQlzdGFydE5vZGUgPSBzdGFydE5vZGUuZ2V0UHJldmlvdXNTaWJsaW5nKCk7Ci0JCQlpZiAoc3RhcnROb2RlID09IG51bGwpCi0JCQkJcmV0dXJuIG51bGw7Ci0JCQlpZiAoc3RhcnROb2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpCi0JCQkJcmV0dXJuIChFbGVtZW50KSBzdGFydE5vZGU7Ci0JCX0KLQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgdGhlIHRleHQgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBlbGVtZW50LgotCSAqIAotCSAqIEBwYXJhbSBlbGVtZW50IGFuIEVsZW1lbnQgb2JqZWN0LgotCSAqIEByZXR1cm4gdGhlIHRleHQgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBlbGVtZW50LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFRleHQoRWxlbWVudCBlbGVtZW50KSB7Ci0JCVN0cmluZyB0ZXh0ID0gbnVsbDsKLQotCQkvLyBHZXQgZmlyc3QgY2hpbGQgZWxlbWVudAotCQlOb2RlIG5vZGUgPSBlbGVtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQotCQkvLyBOb2RlTGlzdCBub2RlTGlzdCA9IGVsZW1lbnQuZ2V0Q2hpbGROb2RlcygpOwotCi0JCS8vIGludCBsZW5ndGggPSBub2RlTGlzdC5nZXRMZW5ndGgoKTsKLQotCQkvLyBQcm9jZXNzIHdoaWxlIHRoZXJlIGFyZSBub2RlcyBhbmQgdGhlIHRleHQgaGFzbid0IGJlZW4gZm91bmQKLQkJd2hpbGUgKChub2RlICE9IG51bGwpICYmICh0ZXh0ID09IG51bGwpKQotCQl7Ci0JCQkvLyBJZiBhIHRleHQgbm9kZSBvciBjZGF0YSBzZWN0aW9uIGlzIGZvdW5kLCB0aGVuIGdldCB0ZXh0Ci0JCQlpZiAoKG5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLlRFWFRfTk9ERSkKLQkJCQkJfHwgKG5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkNEQVRBX1NFQ1RJT05fTk9ERSkpCi0JCQl7Ci0JCQkJdGV4dCA9ICgoQ2hhcmFjdGVyRGF0YSkgbm9kZSkuZ2V0RGF0YSgpOwotCQkJfQotCi0JCQkvLyBHZXQgbmV4dCBzaWJsaW5nCi0JCQlub2RlID0gbm9kZS5nZXROZXh0U2libGluZygpOwotCQl9Ci0KLQkJaWYgKHRleHQgIT0gbnVsbCkKLQkJCXRleHQgPSB0ZXh0LnRyaW0oKTsKLQotCQlyZXR1cm4gdGV4dDsKLQl9Ci0KLQkvKioKLQkgKiBEZXRlcm1pbmUgaWYgYW4gZWxlbWVudCBpcyByZXByZXNlbnRlZCBieSB0aGUgUU5hbWUuCi0JICogCi0JICogQHBhcmFtIHFuYW1lIGEgUU5hbWUgb2JqZWN0LgotCSAqIEBwYXJhbSBlbGVtZW50IGFuIEVsZW1lbnQgb2JqZWN0LgotCSAqIEByZXR1cm4gdHJ1ZSBpZiBhbiBlbGVtZW50IGlzIHJlcHJlc2VudGVkIGJ5IHRoZSBRTmFtZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gZXF1YWxzKFFOYW1lIHFuYW1lLCBFbGVtZW50IGVsZW1lbnQpIHsKLQkJYm9vbGVhbiBlcXVhbHMgPSBmYWxzZTsKLQotCQkvLyBJZiBib3RoIHRoZSBuYW1lc3BhY2UgVVJJIGFuZCBsb2NhbCBuYW1lIGFyZSB0aGUgc2FtZSwgdGhlbiB0aGV5IGFyZQotCQkvLyBlcXVhbAotCQlpZiAoKHFuYW1lLmdldE5hbWVzcGFjZVVSSSgpLmVxdWFscyhlbGVtZW50LmdldE5hbWVzcGFjZVVSSSgpKSkKLQkJCQkmJiAocW5hbWUuZ2V0TG9jYWxQYXJ0KCkuZXF1YWxzKGVsZW1lbnQuZ2V0TG9jYWxOYW1lKCkpKSkKLQkJewotCQkJZXF1YWxzID0gdHJ1ZTsKLQkJfQotCi0JCXJldHVybiBlcXVhbHM7Ci0JfQotCi0JLyoqCi0JICogWE1MIGVuY29kZSBhIHRleHQgc3RyaW5nLgotCSAqIAotCSAqIEBwYXJhbSB0ZXh0IC0gYSBTdHJpbmcuCi0JICogQHJldHVybiBhbiBYTUwgZW5jb2RlZCB0ZXh0IHN0cmluZy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyB4bWxFc2NhcGVkU3RyaW5nKFN0cmluZyB0ZXh0KSAKLQl7Ci0JICBpZiAodGV4dCA9PSBudWxsKSByZXR1cm4gdGV4dDsKLQkgIGVsc2UKLQkgIHsKLQkgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcih0ZXh0Lmxlbmd0aCgpKjIpOwotCSAgICBpbnQgc2l6ZSA9IHRleHQubGVuZ3RoKCk7Ci0JICAgIGZvciAoaW50IGk9MDsgaTxzaXplOyBpKyspCi0JICAgIHsKLQkgICAgICBjaGFyIGMgPSB0ZXh0LmNoYXJBdChpKTsKLQkgICAgICBzd2l0Y2ggKGMpCi0JCSAgewotICAgICAgICAgICAgIGNhc2UgJzwnOiAKLSAgICAgICAgICAgICAgIHNiLmFwcGVuZCgiJmx0OyIpOwotICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgY2FzZSAnPic6IAotICAgICAgICAgICAgIAlzYi5hcHBlbmQoIiZndDsiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICBjYXNlICcmJzogCi0gICAgICAgICAgICAgCXNiLmFwcGVuZCgiJmFtcDsiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICBjYXNlICciJzogCi0gICAgICAgICAgICAgCXNiLmFwcGVuZCgiJnF1b3Q7Iik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgY2FzZSAnXCcnOiAKLSAgICAgICAgICAgICAJc2IuYXBwZW5kKCImYXBvczsiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICBjYXNlICdccic6IAotICAgICAgICAgICAgIAlzYi5hcHBlbmQoIiYjeGQ7Iik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAJc2IuYXBwZW5kKGMpOwotCQkgIH0KLQkJfQotCSAgICByZXR1cm4gIHNiLnRvU3RyaW5nKCk7Ci0JICB9Ci0JfQotCi0JLyoqCi0JICogWE1MIGVuY29kZSBhIHRleHQgc3RyaW5nLgotCSAqIAotCSAqIEBwYXJhbSB0ZXh0IC0gYSBTdHJpbmcuCi0JICogQHJldHVybiBhbiBYTUwgZW5jb2RlZCB0ZXh0IHN0cmluZy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyB4bWxSZW1vdmVFc2NhcGVkU3RyaW5nKFN0cmluZyB0ZXh0KSAKLQl7Ci0JICBpZiAodGV4dCA9PSBudWxsKSByZXR1cm4gdGV4dDsKLQkgIGVsc2UKLQkgIHsKLSAgICAgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcih0ZXh0KTsKLSAgICAgIAotCSAgICBpbnQgaSA9IHNiLmluZGV4T2YoIiYjeGQ7Iik7Ci0JICAgIHdoaWxlKGkgIT0gLTEpCi0JICAgIHsKLQkgICAgICBzYi5yZXBsYWNlKGksIGkrNSwgIlxyIik7Ci0JICAgICAgaSA9IHNiLmluZGV4T2YoIiYjeGQ7Iik7Ci0JICAgIH0KLQkgICAgCi0JICAgIGkgPSBzYi5pbmRleE9mKCImbHQ7Iik7Ci0JICAgIHdoaWxlKGkgIT0gLTEpCi0JICAgIHsKLQkgICAgICBzYi5yZXBsYWNlKGksIGkrNCwgIjwiKTsKLQkgICAgICBpID0gc2IuaW5kZXhPZigiJmx0OyIpOwotCSAgICB9Ci0KLQkgICAgaSA9IHNiLmluZGV4T2YoIiZndDsiKTsKLQkgICAgd2hpbGUoaSAhPSAtMSkKLQkgICAgewotCSAgICAgIHNiLnJlcGxhY2UoaSwgaSs0LCAiPiIpOwotCSAgICAgIGkgPSBzYi5pbmRleE9mKCImZ3Q7Iik7Ci0JICAgIH0KLQotCSAgICBpID0gc2IuaW5kZXhPZigiJnF1b3Q7Iik7Ci0JICAgIHdoaWxlKGkgIT0gLTEpCi0JICAgIHsKLQkgICAgICBzYi5yZXBsYWNlKGksIGkrNiwgIlwiIik7Ci0JICAgICAgaSA9IHNiLmluZGV4T2YoIiZxdW90OyIpOwotCSAgICB9Ci0KLQkgICAgaSA9IHNiLmluZGV4T2YoIiZhcG9zOyIpOwotCSAgICB3aGlsZShpICE9IC0xKQotCSAgICB7Ci0JICAgICAgc2IucmVwbGFjZShpLCBpKzYsICJcJyIpOwotCSAgICAgIGkgPSBzYi5pbmRleE9mKCImYXBvczsiKTsKLQkgICAgfQotCi0JICAgIGkgPSBzYi5pbmRleE9mKCImYW1wOyIpOwotCSAgICB3aGlsZShpICE9IC0xKQotCSAgICB7Ci0JICAgICAgc2IucmVwbGFjZShpLCBpKzUsICImIik7Ci0JICAgICAgaSA9IHNiLmluZGV4T2YoIiZhbXA7Iik7Ci0JICAgIH0KLSAJICAgIHJldHVybiAgc2IudG9TdHJpbmcoKTsKLQkgIH0KLQl9Ci0JLyoqCi0JICogR2V0IHRoZSBzcGVjaWZpZWQgZWxlbWVudCBmcm9tIGEgcGFyZW50IGVsZW1lbnQuCi0JICogCi0JICogQHBhcmFtIGVsZW1lbnROYW1lIHRoZSBlbGVtZW50IHRhZyB0byBzZXJhY2ggZm9yLgotCSAqIEBwYXJhbSBwYXJlbnRFbGVtZW50IHRoZSBwYXJlbnQgZWxlbWVudC4KLQkgKiBAcmV0dXJuIGFuIGVsZW1lbnQgZ2l2ZW4gdGhlIG5hbWUgYW5kIHRoZSBwYXJlbnQgZWxlbWVudC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIEVsZW1lbnQgZ2V0RWxlbWVudChTdHJpbmcgZWxlbWVudE5hbWUsIEVsZW1lbnQgcGFyZW50RWxlbWVudCkgewotCQlFbGVtZW50IHJldHVybkVsZW1lbnQgPSBudWxsOwotCQlOb2RlTGlzdCBubDsKLQotCQkvLyBHZXQgdGhlIGxpc3Qgb2YgZWxlbWVudHMKLQkJaWYgKChubCA9IHBhcmVudEVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZWxlbWVudE5hbWUpKSAhPSBudWxsKQotCQl7Ci0JCQkvLyBSZXR1cm4gZmlyc3QgZWxlbWVudCBmb3VuZAotCQkJcmV0dXJuRWxlbWVudCA9IChFbGVtZW50KSBubC5pdGVtKDApOwotCQl9Ci0KLQkJLy8gUmV0dXJuIGVsZW1lbnQKLQkJcmV0dXJuIHJldHVybkVsZW1lbnQ7Ci0JfQotCi0JLyoqCi0JICogRGV0ZXJtaW5lIGlmIHRoaXMgZWxlbWVudCBtYXRjaGVzIHNwZWNpZmllZCBsb2NhbCBuYW1lIGluIHRoZSBzcGVjaWZpZWQKLQkgKiBuYW1lc3BhY2UuCi0JICogCi0JICogQHBhcmFtIGVsZW1lbnQgYW4gRWxlbWVudCBvYmplY3QuCi0JICogQHBhcmFtIG5hbWVzcGFjZVVSSSBhIG5hbWVzcGFjZS4KLQkgKiBAcGFyYW0gbG9jYWxOYW1lIGEgbG9jYWwgbmFtZS4KLQkgKiBAcmV0dXJuIHRydWUgaWYgdGhpcyBlbGVtZW50IG1hdGNoZXMgc3BlY2lmaWVkIGxvY2FsIG5hbWUgaW4gdGhlIHNwZWNpZmllZAotCSAqICAgICAgICAgbmFtZXNwYWNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0VsZW1lbnQoRWxlbWVudCBlbGVtZW50LCBTdHJpbmcgbmFtZXNwYWNlVVJJLAotCQkJU3RyaW5nIGxvY2FsTmFtZSkgewotCQlib29sZWFuIGlzRWxlbWVudCA9IGZhbHNlOwotCi0JCWlmIChlbGVtZW50ICE9IG51bGwpCi0JCXsKLQkJCS8vIENoZWNrIGlzCi0JCQlpZiAoZWxlbWVudC5nZXROYW1lc3BhY2VVUkkoKS5lcXVhbHMobmFtZXNwYWNlVVJJKQotCQkJCQkmJiBlbGVtZW50LmdldExvY2FsTmFtZSgpLmVxdWFscyhsb2NhbE5hbWUpKQotCQkJewotCQkJCWlzRWxlbWVudCA9IHRydWU7Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gaXNFbGVtZW50OwotCX0KLQotCS8qKgotCSAqIERldGVybWluZSBpZiB0aGlzIGVsZW1lbnQgbWF0Y2hlcyBzcGVjaWZpZWQgbG9jYWwgbmFtZSBpbiB0aGUgc3BlY2lmaWVkCi0JICogbmFtZXNwYWNlLgotCSAqIAotCSAqIEBwYXJhbSBlbGVtZW50IGFuIEVsZW1lbnQgb2JqZWN0LgotCSAqIEBwYXJhbSBuYW1lc3BhY2VVUklzIGEgbGlzdCBvZiB2YWxpZCBuYW1lc3BhY2VzLgotCSAqIEBwYXJhbSBsb2NhbE5hbWUgYSBsb2NhbCBuYW1lLgotCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGlzIGVsZW1lbnQgbWF0Y2hlcyBzcGVjaWZpZWQgbG9jYWwgbmFtZSBpbiB0aGUgc3BlY2lmaWVkCi0JICogICAgICAgICBuYW1lc3BhY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzRWxlbWVudChFbGVtZW50IGVsZW1lbnQsIExpc3QgbmFtZXNwYWNlVVJJcywKLQkJCVN0cmluZyBsb2NhbE5hbWUpIHsKLQkJYm9vbGVhbiBpc0VsZW1lbnQgPSBmYWxzZTsKLQotCQlpZiAoZWxlbWVudCAhPSBudWxsKQotCQl7Ci0JCQkvLyBDaGVjayBpcwotCQkJaWYgKG5hbWVzcGFjZVVSSXMuY29udGFpbnMoZWxlbWVudC5nZXROYW1lc3BhY2VVUkkoKSkKLQkJCQkJJiYgZWxlbWVudC5nZXRMb2NhbE5hbWUoKS5lcXVhbHMobG9jYWxOYW1lKSkKLQkJCXsKLQkJCQlpc0VsZW1lbnQgPSB0cnVlOwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIGlzRWxlbWVudDsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgZWxlbWVudCB0ZXh0IGFzIGEgYm9vbGVhbi4KLQkgKiAKLQkgKiBAcGFyYW0gZWxlbWVudCBhbiBFbGVtZW50IG9iamVjdC4KLQkgKiBAcGFyYW0gZGVmYXVsdFZhbHVlIGEgYm9vbGVhbiB0byBiZSB1c2VkIGFzIGEgZGVmYXVsdCB2YWx1ZS4KLQkgKiBAcmV0dXJuIGVsZW1lbnQgdGV4dCBhcyBhIGJvb2xlYW4gdmFsdWUuCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGdldEJvb2xlYW5WYWx1ZShFbGVtZW50IGVsZW1lbnQsIGJvb2xlYW4gZGVmYXVsdFZhbHVlKSB7Ci0JCWJvb2xlYW4gcmV0dXJuVmFsdWUgPSBkZWZhdWx0VmFsdWU7Ci0JCVN0cmluZyBib29sZWFuVmFsdWUgPSBudWxsOwotCi0JCS8vIEdldCB2YWx1ZSBhcyBhIHN0cmluZwotCQlpZiAoKGJvb2xlYW5WYWx1ZSA9IFhNTFV0aWxzLmdldFRleHQoZWxlbWVudCkpICE9IG51bGwpCi0JCXsKLQkJCXJldHVyblZhbHVlID0gQm9vbGVhbi52YWx1ZU9mKGJvb2xlYW5WYWx1ZSkuYm9vbGVhblZhbHVlKCk7Ci0JCX0KLQotCQkvLyBSZXR1cm4gYm9vbGVhbgotCQlyZXR1cm4gcmV0dXJuVmFsdWU7Ci0JfQotCi0JLyoqCi0JICogR2V0IGF0dHJpYnV0ZSB2YWx1ZSBhcyBhIGJvb2xlYW4uCi0JICogCi0JICogQHBhcmFtIGVsZW1lbnQgYW4gRWxlbWVudCBvYmplY3QuCi0JICogQHBhcmFtIGF0dHJOYW1lIGEgbmFtZSBvZiBhbiBhdHRyaWJ1dGUuCi0JICogQHBhcmFtIGRlZmF1bHRWYWx1ZSBhIGJvb2xlYW4gdG8gYmUgdXNlZCBhcyBhIGRlZmF1bHQgdmFsdWUuCi0JICogQHJldHVybiBhdHRyaWJ1dGUgdmFsdWUgYXMgYSBib29sZWFuLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBnZXRCb29sZWFuVmFsdWUoRWxlbWVudCBlbGVtZW50LCBTdHJpbmcgYXR0ck5hbWUsCi0JCQlib29sZWFuIGRlZmF1bHRWYWx1ZSkgewotCQlib29sZWFuIHJldHVyblZhbHVlID0gZGVmYXVsdFZhbHVlOwotCQlTdHJpbmcgYm9vbGVhblZhbHVlID0gbnVsbDsKLQotCQkvLyBHZXQgdmFsdWUgYXMgYSBzdHJpbmcKLQkJaWYgKChib29sZWFuVmFsdWUgPSBYTUxVdGlscy5nZXRBdHRyaWJ1dGVWYWx1ZShlbGVtZW50LCBhdHRyTmFtZSkpICE9IG51bGwpCi0JCXsKLQkJCXJldHVyblZhbHVlID0gQm9vbGVhbi52YWx1ZU9mKGJvb2xlYW5WYWx1ZSkuYm9vbGVhblZhbHVlKCk7Ci0JCX0KLQotCQkvLyBSZXR1cm4gYm9vbGVhbgotCQlyZXR1cm4gcmV0dXJuVmFsdWU7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlIFFOYW1lLgotCSAqIAotCSAqIEBwYXJhbSBxbmFtZVN0cmluZyBhIHF1YWxpZmllZCBuYW1lLgotCSAqIEByZXR1cm4gYSBRTmFtZSBvYmplY3QuCi0JICovCi0JcHVibGljIHN0YXRpYyBRTmFtZSBjcmVhdGVRTmFtZShTdHJpbmcgcW5hbWVTdHJpbmcpIHsKLQkJUU5hbWUgcW5hbWUgPSBudWxsOwotCi0JCS8vIExvY2F0ZSBsb2NhbCBwYXJ0Ci0JCWludCBpbmRleCA9IHFuYW1lU3RyaW5nLmxhc3RJbmRleE9mKCI6Iik7Ci0KLQkJLy8gQ3JlYXRlIG5ldyBRTmFtZQotCQlpZiAoaW5kZXggIT0gLTEpCi0JCXsKLQkJCXFuYW1lID0gbmV3IFFOYW1lKHFuYW1lU3RyaW5nLnN1YnN0cmluZygwLCBpbmRleCksIHFuYW1lU3RyaW5nCi0JCQkJCS5zdWJzdHJpbmcoaW5kZXggKyAxKSk7Ci0JCX0KLQotCQllbHNlCi0JCXsKLQkJCXFuYW1lID0gbmV3IFFOYW1lKHFuYW1lU3RyaW5nKTsKLQkJfQotCi0JCXJldHVybiBxbmFtZTsKLQl9Ci0KLQkvKioKLQkgKiBFcnJvciBIYW5kbGVyCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgY2xhc3MgRXJySGFuZGxlciBpbXBsZW1lbnRzIEVycm9ySGFuZGxlcgotCXsKLQkJLyoqCi0JCSAqIFdhcm5pbmcKLQkJICovCi0JCXB1YmxpYyB2b2lkIHdhcm5pbmcoU0FYUGFyc2VFeGNlcHRpb24gc3BlKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsKLQkJCVN0cmluZyBtZXNzYWdlID0gIldhcm5pbmc6ICIgKyBzcGUuZ2V0TWVzc2FnZSgpOwotCQkJdGhyb3cgbmV3IFNBWEV4Y2VwdGlvbihtZXNzYWdlKTsKLQkJfQotCi0JCS8qKgotCQkgKiBFcnJvcgotCQkgKi8KLQkJcHVibGljIHZvaWQgZXJyb3IoU0FYUGFyc2VFeGNlcHRpb24gc3BlKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsKLQkJCVN0cmluZyBtZXNzYWdlID0gIkVycm9yOiAiICsgc3BlLmdldE1lc3NhZ2UoKTsKLQkJCXRocm93IG5ldyBTQVhFeGNlcHRpb24obWVzc2FnZSk7Ci0JCX0KLQotCQkvKioKLQkJICogRmF0YWwgRXJyb3IKLQkJICovCi0JCXB1YmxpYyB2b2lkIGZhdGFsRXJyb3IoU0FYUGFyc2VFeGNlcHRpb24gc3BlKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsKLQkJCVN0cmluZyBtZXNzYWdlID0gIkZhdGFsIEVycm9yOiAiICsgc3BlLmdldE1lc3NhZ2UoKTsKLQkJCXRocm93IG5ldyBTQVhFeGNlcHRpb24obWVzc2FnZSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBEZXRlcm1pbmUgaWYgdGhlIHN0cmluZyBpcyBhIE5NVE9LRU4gZGF0YSB0eXBlLgotCSAqIAotCSAqIEBwYXJhbSB0ZXh0IGEgc3RyaW5nIHZhbHVlLgotCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIGEgTk1UT0tFTiBkYXRhIHR5cGUuCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzTm10b2tlbihTdHJpbmcgdGV4dCkgewotCQlib29sZWFuIG5tdG9rZW4gPSB0cnVlOwotCi0JCS8vIEFERDogTmVlZCB0byBmaW5kIGEgdXRpbGl0eSBmdW5jdGlvbiB0aGF0IGRvZXMgdGhpcyBvciB3cml0ZSBpdCBmcm9tCi0JCS8vIHNjcmF0Y2gKLQotCQlyZXR1cm4gbm10b2tlbjsKLQl9Ci0KLQkvKioKLQkgKiBUaGUgbWV0aG9kIHNlYXJjaGVzIHRoZSBmaXJzdCBkaXJlY3QgZGVzY2VuZGFudCBlbGVtZW50IHdpdGggdGhlIGdpdmVuCi0JICogcW5hbWUuCi0JICogCi0JICogQHBhcmFtIHBhcmVudCBwYXJlbnQgRE9NIGVsZW1lbnQuCi0JICogQHBhcmFtIGVsZW1lbnROYW1lIFFOYW1lIG9mIHRoZSBlbGVtZW50IHRvIGJlIHNlYXJjaGVkLgotCSAqIEByZXR1cm4gRE9NIGVsZW1lbnQgaWYgdGhlIHJlcXVpcmVkIGVsZW1lbnQgZm91bmQsIGFuZCBudWxsIG90aGVyd2lzZS4KLQkgKi8KLQlzdGF0aWMgcHVibGljIEVsZW1lbnQgZmluZENoaWxkRWxlbWVudChFbGVtZW50IHBhcmVudCwgUU5hbWUgZWxlbWVudE5hbWUpIHsKLQkJaWYgKHBhcmVudCA9PSBudWxsKQotCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiUGFyZW50IGVsZW1lbnQgY2FuIG5vdCBiZSBOVUxMIik7Ci0JCWlmIChlbGVtZW50TmFtZSA9PSBudWxsKQotCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiRWxlbWVudCBuYW1lIGNhbiBub3QgYmUgTlVMTCIpOwotCQlpZiAoZWxlbWVudE5hbWUuZ2V0TG9jYWxQYXJ0KCkgPT0gbnVsbCkKLQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0JCQkJCSJMb2NhbCBwYXJ0IG9mIHRoZSBlbGVtZW50IG5hbWUgY2FuIG5vdCBiZSBOVUxMIik7Ci0KLQkJTm9kZSBuID0gcGFyZW50LmdldEZpcnN0Q2hpbGQoKTsKLQkJU3RyaW5nIGxvY2FsID0gZWxlbWVudE5hbWUuZ2V0TG9jYWxQYXJ0KCk7Ci0JCVN0cmluZyBucyA9IGVsZW1lbnROYW1lLmdldE5hbWVzcGFjZVVSSSgpOwotCQl3aGlsZSAobiAhPSBudWxsKQotCQl7Ci0JCQlpZiAoTm9kZS5FTEVNRU5UX05PREUgPT0gbi5nZXROb2RlVHlwZSgpCi0JCQkJCSYmIGxvY2FsLmVxdWFscyhuLmdldExvY2FsTmFtZSgpKQotCQkJCQkmJiBOdWxsVXRpbC5lcXVhbHMobnMsIG4uZ2V0TmFtZXNwYWNlVVJJKCkpKQotCQkJCXJldHVybiAoRWxlbWVudCkgbjsKLQkJCW4gPSBuLmdldE5leHRTaWJsaW5nKCk7Ci0JCX0KLQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBUaGUgbWV0aG9kIHNlYXJjaGVzIHRoZSBmaXJzdCBzaWJsaW5nIGVsZW1lbnQgd2l0aCB0aGUgZ2l2ZW4gcW5hbWUuCi0JICogCi0JICogQHBhcmFtIGFjdGl2ZSBET00gZWxlbWVudC4KLQkgKiBAcGFyYW0gZWxlbWVudE5hbWUgUU5hbWUgb2YgdGhlIGVsZW1lbnQgdG8gYmUgc2VhcmNoZWQuCi0JICogQHJldHVybiBET00gZWxlbWVudCBpZiB0aGUgcmVxdWlyZWQgZWxlbWVudCBmb3VuZCwgYW5kIG51bGwgb3RoZXJ3aXNlLgotCSAqLwotCXN0YXRpYyBwdWJsaWMgRWxlbWVudCBmaW5kRWxlbWVudChFbGVtZW50IGFjdGl2ZSwgUU5hbWUgZWxlbWVudE5hbWUpIHsKLQkJaWYgKGFjdGl2ZSA9PSBudWxsKQotCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQWN0aXZlIGVsZW1lbnQgY2FuIG5vdCBiZSBOVUxMIik7Ci0JCWlmIChlbGVtZW50TmFtZSA9PSBudWxsKQotCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiRWxlbWVudCBuYW1lIGNhbiBub3QgYmUgTlVMTCIpOwotCQlpZiAoZWxlbWVudE5hbWUuZ2V0TG9jYWxQYXJ0KCkgPT0gbnVsbCkKLQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0JCQkJCSJMb2NhbCBwYXJ0IG9mIHRoZSBlbGVtZW50IG5hbWUgY2FuIG5vdCBiZSBOVUxMIik7Ci0KLQkJTm9kZSBuID0gYWN0aXZlLmdldE5leHRTaWJsaW5nKCk7Ci0JCVN0cmluZyBsb2NhbCA9IGVsZW1lbnROYW1lLmdldExvY2FsUGFydCgpOwotCQlTdHJpbmcgbnMgPSBlbGVtZW50TmFtZS5nZXROYW1lc3BhY2VVUkkoKTsKLQkJd2hpbGUgKG4gIT0gbnVsbCkKLQkJewotCQkJaWYgKE5vZGUuRUxFTUVOVF9OT0RFID09IG4uZ2V0Tm9kZVR5cGUoKQotCQkJCQkmJiBsb2NhbC5lcXVhbHMobi5nZXRMb2NhbE5hbWUoKSkKLQkJCQkJJiYgTnVsbFV0aWwuZXF1YWxzKG5zLCBuLmdldE5hbWVzcGFjZVVSSSgpKSkKLQkJCQlyZXR1cm4gKEVsZW1lbnQpIG47Ci0JCQluID0gbi5nZXROZXh0U2libGluZygpOwotCQl9Ci0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogVGhlIG1ldGhvZCByZXR1cm5zIGF0dHJpYnV0ZSBub2RlIGJ5IHRoZSBnaXZlbiBxbmFtZS4KLQkgKiAKLQkgKiBAcGFyYW0gZWwgb3duZXIgZWxlbWVudC4KLQkgKiBAcGFyYW0gYXR0cmlidXRlTmFtZSBRTmFtZSBvZiB0aGUgYXR0cmlidXRlIG5vZGUgdG8gYmUgc2VhcmNoZWQuCi0JICogQHJldHVybiBhdHRyaWJ1dGUgbm9kZSBieSB0aGUgZ2l2ZW4gcW5hbWUuCi0JICovCi0Jc3RhdGljIHB1YmxpYyBBdHRyIGdldEF0dHJpYnV0ZShFbGVtZW50IGVsLCBRTmFtZSBhdHRyaWJ1dGVOYW1lKSB7Ci0JCWlmIChlbCA9PSBudWxsKQotCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiRWxlbWVudCBjYW4gbm90IGJlIE5VTEwiKTsKLQkJaWYgKGF0dHJpYnV0ZU5hbWUgPT0gbnVsbCkKLQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkF0dHJpYnV0ZSBuYW1lIGNhbiBub3QgYmUgTlVMTCIpOwotCQlTdHJpbmcgbnNVUkkgPSBhdHRyaWJ1dGVOYW1lLmdldE5hbWVzcGFjZVVSSSgpOwotCQlTdHJpbmcgbG9jYWxQYXJ0ID0gYXR0cmlidXRlTmFtZS5nZXRMb2NhbFBhcnQoKTsKLQkJaWYgKGxvY2FsUGFydCA9PSBudWxsKQotCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLQkJCQkJIkxvY2FsIHBhcnQgb2YgdGhlIGF0dHJpYnV0ZSBuYW1lIGNhbiBub3QgYmUgTlVMTCIpOwotCi0JCUF0dHIgYSA9IGVsLmdldEF0dHJpYnV0ZU5vZGVOUyhuc1VSSSwKLQkJCQlsb2NhbFBhcnQpOwotCQlpZiAoYSA9PSBudWxsKQotCQkJLy8gdHJ5IHRvIGdldCB3aXRoIG51bGwgbmFtZXNwYWNlCi0JCQlhID0gZWwuZ2V0QXR0cmlidXRlTm9kZU5TKG51bGwsIGxvY2FsUGFydCk7Ci0JCXJldHVybiBhOwotCX0KLQotCS8qKgotCSAqIFRoZSBtZXRob2QgY29tcGFyZXMgbm9kZSdzIG5hbWUgdG8gdGhlIGdpdmVuIHFuYW1lLgotCSAqIAotCSAqIEBwYXJhbSBuIGEgbm9kZS4KLQkgKiBAcGFyYW0gbmFtZSBhIFFOYW1lIG9iamVjdC4KLQkgKiBAcmV0dXJuIHRydWUgaWYgdGhlIG5vZGUncyBuYW1lIGlzIHRoZSBzYW1lIGFzIHRoZSBnaXZlbiBxbmFtZS4KLQkgKi8KLQlzdGF0aWMgcHVibGljIGJvb2xlYW4gZXF1YWxzKE5vZGUgbiwgUU5hbWUgbmFtZSkgewotCQlpZiAobiA9PSBudWxsIHx8IG5hbWUgPT0gbnVsbCkKLQkJCXJldHVybiBmYWxzZTsKLQkJcmV0dXJuIChOdWxsVXRpbC5lcXVhbHMobmFtZS5nZXRMb2NhbFBhcnQoKSwgbi5nZXRMb2NhbE5hbWUoKSkgJiYgTnVsbFV0aWwKLQkJCQkuZXF1YWxzKG5hbWUuZ2V0TmFtZXNwYWNlVVJJKCksIG4uZ2V0TmFtZXNwYWNlVVJJKCkpKTsKLQl9Ci0KLQkvKioKLQkgKiBUaGUgbWV0aG9kIHNlYXJjaGVzIG5hbWVzcGFjZSBVUkkgZm9yIHRoZSBnaXZlbiBwcmVmaXguIFRoZSBzZWFyY2hpbmcKLQkgKiBtZWNoYW5pc20gaXMgaW1wbGVtZW50ZWQgYWNjb3JkaW5nIHRvIHRoZSAiWE1MIE5hbWVzcGFjZXMgcmVzb2x1dGlvbiIKLQkgKiBhbGdvcml0aG0gKCdodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLQotCSAqIENvcmUtMjAwMzAyMjYvbmFtZXNwYWNlcy1hbGdvcml0aG1zLmh0bWwnKS4KLQkgKiAKLQkgKiBAcGFyYW0gbiBhIG5vZGUuCi0JICogQHBhcmFtIHByZWZpeCBhIHByZWZpeC4KLQkgKiBAcmV0dXJuIHRoZSBuYW1lc3BhY2UgVVJJIGZvciB0aGUgZ2l2ZW4gcHJlZml4LgotCSAqLwotCXN0YXRpYyBwdWJsaWMgU3RyaW5nIGZpbmROYW1lc3BhY2VVUkkoTm9kZSBuLCBTdHJpbmcgcHJlZml4KSB7Ci0JCWlmIChwcmVmaXggPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCi0JCXdoaWxlIChuICE9IG51bGwpCi0JCXsKLQkJCWlmIChwcmVmaXguZXF1YWxzKG4uZ2V0UHJlZml4KCkpKQotCQkJCXJldHVybiBuLmdldE5hbWVzcGFjZVVSSSgpOwotCi0JCQlpZiAoTm9kZS5FTEVNRU5UX05PREUgPT0gbi5nZXROb2RlVHlwZSgpKQotCQkJewotCQkJCU5hbWVkTm9kZU1hcCBtID0gbi5nZXRBdHRyaWJ1dGVzKCk7Ci0JCQkJaWYgKG0gIT0gbnVsbCkKLQkJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBtLmdldExlbmd0aCgpOyBpKyspCi0JCQkJCXsKLQkJCQkJCU5vZGUgYSA9IG0uaXRlbShpKTsKLQkJCQkJCWlmIChXU0lUYWcuTlNfVVJJX1hNTE5TLmVxdWFscyhhLmdldE5hbWVzcGFjZVVSSSgpKQotCQkJCQkJCQkmJiBwcmVmaXguZXF1YWxzKGEuZ2V0TG9jYWxOYW1lKCkpKQotCQkJCQkJCXJldHVybiBhLmdldE5vZGVWYWx1ZSgpOwotCQkJCQl9Ci0JCQl9Ci0KLQkJCW4gPSBuLmdldFBhcmVudE5vZGUoKTsKLQkJfQotCi0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFNlcmlhbGl6ZXMgZWxlbWVudC4KLQkgKiAKLQkgKiBAcGFyYW0gbiBhIERPTSBlbGVtZW50LgotCSAqIEByZXR1cm4gdGhlIHNlcmlhbGl6ZWQgZWxlbWVudC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBzZXJpYWxpemUoRWxlbWVudCBuKSB7Ci0JCVN0cmluZyB2YWx1ZSA9IG51bGw7Ci0JCXRyeQotCQl7Ci0JCQlTdHJpbmdXcml0ZXIgd3JpdGVyID0gbmV3IFN0cmluZ1dyaXRlcigpOwotCQkJWE1MU2VyaWFsaXplciBzID0gbmV3IFhNTFNlcmlhbGl6ZXIod3JpdGVyLCBuZXcgT3V0cHV0Rm9ybWF0KCJ4bWwiLAotCQkJCQkiVVRGLTgiLCB0cnVlKSk7Ci0JCQlzLnNlcmlhbGl6ZShuKTsKLQkJCXZhbHVlID0gd3JpdGVyLnRvU3RyaW5nKCk7Ci0JCQl3cml0ZXIuY2xvc2UoKTsKLQkJfSBjYXRjaCAoVGhyb3dhYmxlIHQpCi0JCXsKLQkJCS8vIG5vdGhpbmcKLQkJCXZhbHVlID0gIkVYQ0VQVElPTiA6ICIgKyB0LmdldE1lc3NhZ2UoKTsKLQkJfQotCi0JCXJldHVybiB2YWx1ZTsKLQl9Ci0KLQkvKioKLQkgKiBUaGUgbWV0aG9kIHJldHVybiBsaXN0IG9mIGNoaWxkIGVsZW1lbnRzLgotCSAqIAotCSAqIEBwYXJhbSBwYXJlbnQgYW4gb3JnLnczYy5kb20uRWxlbWVudCBvYmplY3QuCi0JICogQHJldHVybiBsaXN0IG9mIGNoaWxkIGVsZW1lbnRzLgotCSAqLwotCXN0YXRpYyBwdWJsaWMgVmVjdG9yIGdldENoaWxkRWxlbWVudHMoRWxlbWVudCBwYXJlbnQpIHsKLQkJaWYgKHBhcmVudCA9PSBudWxsKQotCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiRWxlbWVudCBjYW4gbm90IGJlIE5VTEwiKTsKLQotCQlWZWN0b3IgdmVjdCA9IG5ldyBWZWN0b3IoKTsKLQkJRWxlbWVudCBlbGVtID0gZ2V0Rmlyc3RDaGlsZChwYXJlbnQpOwotCQl3aGlsZSAoZWxlbSAhPSBudWxsKQotCQl7Ci0JCQl2ZWN0LmFkZChlbGVtKTsKLQkJCWVsZW0gPSBnZXROZXh0U2libGluZyhlbGVtKTsKLQkJfQotCQlyZXR1cm4gdmVjdDsKLQl9Ci0KLQkvKioKLQkgKiBTZXJpYWxpemVzIGRvY3VtZW50LgotCSAqIAotCSAqIEBwYXJhbSBkb2MgYW4gb3JnLnczYy5kb20uRG9jdW1lbnQgb2JqZWN0LgotCSAqIEBwYXJhbSB3cml0ZXIgYSBqYXZhLmlvLldyaXRlciBvYmplY3QuCi0JICogQHRocm93cyBFeGNlcHRpb24gaWYgdW5hYmxlIHRvIHNlcmlhbGl6ZSB0aGUgZG9jdW1lbnQuCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIHNlcmlhbGl6ZURvYyhEb2N1bWVudCBkb2MsIFdyaXRlciB3cml0ZXIpCi0JCQl0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbiB7Ci0JCVhNTFNlcmlhbGl6ZXIgcyA9IG5ldyBYTUxTZXJpYWxpemVyKHdyaXRlciwgbmV3IE91dHB1dEZvcm1hdCgieG1sIiwKLQkJCQkiVVRGLTgiLCB0cnVlKSk7Ci0JCXMuc2VyaWFsaXplKGRvYyk7Ci0JfQotCi0JLyoqCi0JICogU2VyZWFsaXplcyBlbGVtZW50LgotCSAqIAotCSAqIEBwYXJhbSBlbGVtIGFuIG9yZy53M2MuZG9tLkVsZW1lbnQgb2JqZWN0LgotCSAqIEBwYXJhbSB3cml0ZXIgYSBqYXZhLmlvLldyaXRlciBvYmplY3QuCi0JICogQHRocm93cyBFeGNlcHRpb24gaWYgdW5hYmxlIHRvIHNlcmlhbGl6ZSB0aGUgRE9NIGVsZW1lbnQuCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIHNlcmlhbGl6ZUVsZW1lbnQoRWxlbWVudCBlbGVtLCBXcml0ZXIgd3JpdGVyKQotCQkJdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24gewotCQlYTUxTZXJpYWxpemVyIHMgPSBuZXcgWE1MU2VyaWFsaXplcih3cml0ZXIsIG5ldyBPdXRwdXRGb3JtYXQoInhtbCIsCi0JCQkJIlVURi04IiwgdHJ1ZSkpOwotCQlzLnNlcmlhbGl6ZShlbGVtKTsKLQl9Ci0KLQkvKioKLQkgKiBSZW1vdmUgYWxsIGVsZW1lbnRzIGZyb20gbGlzdCB3aXRob3V0IG5hbWVzcGFjZS4KLQkgKiAKLQkgKiBAcGFyYW0gdmVjdCBhIGxpc3Qgb2YgZWxlbWVudHMuCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIHJlbW92ZUFsbEVsZW1lbnRzV2l0aG91dE5TKFZlY3RvciB2ZWN0KSB7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgdmVjdC5zaXplKCk7KQotCQl7Ci0JCQlpZiAoKChFbGVtZW50KSB2ZWN0LmdldChpKSkuZ2V0TmFtZXNwYWNlVVJJKCkgPT0gbnVsbAotCQkJCQl8fCAoKEVsZW1lbnQpIHZlY3QuZ2V0KGkpKS5nZXROYW1lc3BhY2VVUkkoKS5lcXVhbHMoIiIpKQotCQkJCXZlY3QucmVtb3ZlKGkpOwotCQkJZWxzZQotCQkJCWkrKzsKLQkJfQotCX0KLQotCS8qKgotCSAqIENyZWF0ZSBVUkwgdXNpbmcgYmFzZSBVUkkuCi0JICogCi0JICogQHBhcmFtIHVybCBhIFVSTCBzdHJpbmcuCi0JICogQHBhcmFtIGJhc2VVUkkgYSBiYXNlIHVybCBzdHJpbmcgdG8gYXNzaXN0IGluIGNyZWF0aW5nIGEgVVJMLgotCSAqIEByZXR1cm4gbmV3bHkgY3JlYXRlZCBVUkwuCi0JICogQHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24gaWYgYSBtYWxmb3JtZWQgVVJMIGhhcyBvY2N1cnJlZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFVSTCBjcmVhdGVVUkwoU3RyaW5nIHVybCwgU3RyaW5nIGJhc2VVUkkpCi0JCQl0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uIHsKLQkJVVJMIHJldHVyblVSTCA9IG51bGw7Ci0JCVVSSSB1cmkgPSBudWxsOwotCQl0cnkKLQkJewotICAgICAgICAgICAgcmV0dXJuVVJMID0gbmV3IFVSTCh1cmwpOwotCQkJdXJpID0gbmV3IFVSSSh1cmwpOwotCQkJdXJpID0gdXJpLm5vcm1hbGl6ZSgpOwotCQkJcmV0dXJuVVJMID0gIG5ldyBVUkwodXJpLnRvU3RyaW5nKCkpOwotCQl9Ci0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBtdWUpCi0JCXsKLQkJCWludCBpID0gYmFzZVVSSS5sYXN0SW5kZXhPZignLycpOwotCQkJaW50IGogPSBiYXNlVVJJLmxhc3RJbmRleE9mKCdcXCcpOwotCQkJaWYgKGogPiBpKQotCQkJCWkgPSBqOwotCQkJdHJ5Ci0JCQl7Ci0JCQkgIHVyaSA9IG5ldyBVUkkoYmFzZVVSSS5zdWJzdHJpbmcoMCwgaSArIDEpICsgdXJsKTsKLQkJCSAgdXJpID0gdXJpLm5vcm1hbGl6ZSgpOwotCQkJICByZXR1cm5VUkwgPSB1cmkudG9VUkwoKTsKLQkJCX0KLQkJCWNhdGNoIChFeGNlcHRpb24gZSkKLQkJCXsKLQkJCSAgcmV0dXJuIG5ldyBVUkwoYmFzZVVSSS5zdWJzdHJpbmcoMCwgaSArIDEpICsgdXJsKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gcmV0dXJuVVJMOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZSBVUkwgdXNpbmcgYmFzZSBVUkkuCi0JICogCi0JICogQHBhcmFtIHVybCBhIFVSTCBzdHJpbmcuCi0JICogQHBhcmFtIGJhc2VVUkkgYSBiYXNlIHVybCBzdHJpbmcgdG8gYXNzaXN0IGluIGNyZWF0aW5nIGEgVVJMLgotCSAqIEByZXR1cm4gbmV3bHkgY3JlYXRlZCBVUkwgc3RyaW5nLgotCSAqIEB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGlmIGEgbWFsZm9ybWVkIFVSTCBoYXMgb2NjdXJyZWQuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgY3JlYXRlVVJMU3RyaW5nKFN0cmluZyB1cmwsIFN0cmluZyBiYXNlVVJJKQotCQkJdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiB7Ci0JCXJldHVybiBjcmVhdGVVUkwodXJsLCBiYXNlVVJJKS50b0V4dGVybmFsRm9ybSgpOwotCX0KLQotCS8qKgotCSAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgb25seSBmb3IgdW5pdCB0ZXN0aW5nLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzIGFyZ3VtZW50cyBmb3IgbWFpbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JCXRyeQotCQl7Ci0JCSAgU3lzdGVtLm91dC5wcmludGxuKCJGaWxlbmFtZTogIiArIGFyZ3NbMF0gKyAiLCBzY2hlbWE6ICIgKyBhcmdzWzFdKTsKLQkJICBwYXJzZVhNTERvY3VtZW50KGFyZ3NbMF0sIGFyZ3NbMV0pOwotCQkgIFN5c3RlbS5vdXQucHJpbnRsbigiRG9uZS4iKTsKLQkJfQotCi0JCWNhdGNoIChFeGNlcHRpb24gZSkKLQkJewotCQkJU3lzdGVtLmVyci5wcmludGxuKGUudG9TdHJpbmcoKSk7Ci0JCX0KLQotCQlTeXN0ZW0uZXhpdCgwKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvWE1MVmlzaXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL1hNTFZpc2l0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmM5ZWEzNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvWE1MVmlzaXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWw7Ci0KLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkNEQVRBU2VjdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5Db21tZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50VHlwZTsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVudGl0eTsKLWltcG9ydCBvcmcudzNjLmRvbS5FbnRpdHlSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vdGF0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLlByb2Nlc3NpbmdJbnN0cnVjdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi0vKioKLSAqIFdlIGRvbid0IGhhdmUgYWNjZXNzIHRvIHRoZSBub2RlIHNvdXJjZSBjb2RlLCBzbyB0aGlzIGRvZXMKLSAqIG91ciBkb3VibGUtZGlzcGF0Y2ggdGhlIGhhcmQgd2F5LgotICovCi1wdWJsaWMgY2xhc3MgWE1MVmlzaXRvcgotewotICAvKioKLSAgKiBWaXNpdCBYTUwgQ0RBVEFTZWN0aW9uIG5vZGUuCi0gICogQHBhcmFtIHMgIGFuIFhNTCBDREFUQVNlY3Rpb24gbm9kZS4KLSAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoQ0RBVEFTZWN0aW9uIHMpCi0gIHsKLSAgfQotCi0gIC8qKgotICAqIFZpc2l0IFhNTCBEb2N1bWVudCBub2RlLgotICAqIEBwYXJhbSBlICBhbiBYTUwgRG9jdW1lbnQgbm9kZS4KLSAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoRG9jdW1lbnQgZSkKLSAgewotICB9Ci0KLSAgLyoqCi0gICogVmlzaXQgWE1MIERvY3VtZW50VHlwZSBub2RlLgotICAqIEBwYXJhbSBlICBhbiBNTCBEb2N1bWVudFR5cGUgbm9kZS4KLSAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoRG9jdW1lbnRUeXBlIGUpCi0gIHsKLSAgfQotCi0gIC8qKgotICAqIFZpc2l0IFhNTCBBdHRyaWJ1dGUgbm9kZS4KLSAgKiBAcGFyYW0gZSAgYW4gWE1MIEF0cnJpYnV0ZSBub2RlLgotICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChBdHRyIGUpCi0gIHsKLSAgfQotCi0gIC8qKgotICAqIFZpc2l0IFhNTCBFbGVtZW50IG5vZGUuCi0gICogQHBhcmFtIGUgIGFuIFhNTCBFbGVtZW50IG5vZGUuCi0gICovCi0gIHB1YmxpYyB2b2lkIHZpc2l0KEVsZW1lbnQgZSkKLSAgewotICB9Ci0KLSAgLyoqCi0gICogVmlzaXQgWE1MIENvbW1lbnQgbm9kZS4KLSAgKiBAcGFyYW0gZSAgYW4gWE1MIENvbW1lbnQgbm9kZS4KLSAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoQ29tbWVudCBlKQotICB7Ci0gIH0KLQotICAvKioKLSAgICogVmlzaXQgWE1MIFRleHQgbm9kZS4KLSAgKiBAcGFyYW0gZSAgYW4gWE1MIFRleHQgbm9kZS4KLSAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoVGV4dCBlKQotICB7Ci0gIH0KLQotICAvKioKLSAgICogVmlzaXQgWE1MIEVudGl0eVJlZmVyZW5jZSBub2RlLiAKLSAgKiBAcGFyYW0gZSAgYW4gWE1MIEVudGl0eVJlZmVyZW5jZSBub2RlLgotICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChFbnRpdHlSZWZlcmVuY2UgZSkKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIFZpc2l0IFhNTCBFbnRpdHkgbm9kZS4gCi0gICogQHBhcmFtIGUgIGFuIFhNTCBFbnRpdHkgbm9kZS4KLSAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoRW50aXR5IGUpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBWaXNpdCBYTUwgTm90YXRpb24gbm9kZS4gCi0gICogQHBhcmFtIG4gIGFuIFhNTCBOb3RhdGlvbiBub2RlLgotICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChOb3RhdGlvbiBuKQotICB7Ci0gIH0KLQotICAvKioKLSAgICogVmlzaXQgWE1MIFByb2Nlc3NpbmdJbnN0cnVjdGlvbiBub2RlLiAKLSAgKiBAcGFyYW0gaSAgYW4gWE1MIFByb2Nlc3NpbmdJbnN0cnVjdGlvbiBub2RlLgotICAqLwotICBwdWJsaWMgdm9pZCB2aXNpdChQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gaSkKLSAgewotICB9Ci0KLSAgLyoqCi0gICAqIFZpc2l0IFhNTCBOYW1lZE5vZGVNYXAgbm9kZS4gCi0gICogQHBhcmFtIGkgIGFuIFhNTCBOYW1lZE5vZGVNYXAgbm9kZS4KLSAgKi8KLSAgcHVibGljIHZvaWQgdmlzaXQoTmFtZWROb2RlTWFwIGkpCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBWaXNpdCBYTUwgbm9kZS4gCi0gICogQHBhcmFtIG5vZGUgIGFuIFhNTCBub2RlLgotICAqLwotICBwdWJsaWMgdm9pZCBkb1Zpc2l0KE9iamVjdCBub2RlKQotICB7Ci0gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50KQotICAgIHsKLSAgICAgIHZpc2l0KChFbGVtZW50KSBub2RlKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIENvbW1lbnQpCi0gICAgewotICAgICAgdmlzaXQoKENvbW1lbnQpIG5vZGUpOwotICAgIH0KLSAgICBlbHNlIGlmIChub2RlIGluc3RhbmNlb2YgQ0RBVEFTZWN0aW9uKQotICAgIHsKLSAgICAgIC8vIENEQVRBU2VjdGlvbiBleHRlbmRzIFRleHQsIHNvIGl0IG11c3QgY29tZSBmaXJzdAotICAgICAgdmlzaXQoKENEQVRBU2VjdGlvbikgbm9kZSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBUZXh0KQotICAgIHsKLSAgICAgIHZpc2l0KChUZXh0KSBub2RlKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIEF0dHIpCi0gICAgewotICAgICAgdmlzaXQoKEF0dHIpIG5vZGUpOwotICAgIH0KLSAgICBlbHNlIGlmIChub2RlIGluc3RhbmNlb2YgRG9jdW1lbnQpCi0gICAgewotICAgICAgdmlzaXQoKERvY3VtZW50KSBub2RlKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIEVudGl0eVJlZmVyZW5jZSkKLSAgICB7Ci0gICAgICB2aXNpdCgoRW50aXR5UmVmZXJlbmNlKSBub2RlKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIEVudGl0eSkKLSAgICB7Ci0gICAgICB2aXNpdCgoRW50aXR5KSBub2RlKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIERvY3VtZW50VHlwZSkKLSAgICB7Ci0gICAgICB2aXNpdCgoRG9jdW1lbnRUeXBlKSBub2RlKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIE5vdGF0aW9uKQotICAgIHsKLSAgICAgIHZpc2l0KChOb3RhdGlvbikgbm9kZSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24pCi0gICAgewotICAgICAgdmlzaXQoKFByb2Nlc3NpbmdJbnN0cnVjdGlvbikgbm9kZSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBOYW1lZE5vZGVNYXApCi0gICAgewotICAgICAgdmlzaXQoKE5hbWVkTm9kZU1hcCkgbm9kZSk7Ci0gICAgfQotICB9Ci19Ci0KLS8vIEVORCBPRiBGSUxFCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvZG9tL0RPTVBhcnNlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL2RvbS9ET01QYXJzZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmVlMDM2MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvZG9tL0RPTVBhcnNlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5kb207Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5kb20uRWxlbWVudEltcGw7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLkF1Z21lbnRhdGlvbnM7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLk5hbWVzcGFjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlFOYW1lOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTUxBdHRyaWJ1dGVzOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTUxMb2NhdG9yOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTklFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhOb3RSZWNvZ25pemVkRXhjZXB0aW9uOwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWE5vdFN1cHBvcnRlZEV4Y2VwdGlvbjsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIHNwZWNpYWxpemVzIG9yZy5hcGFjaGUueGVyY2VzLnBhcnNlcnMuRE9NUGFyc2VyLgotICogCi0gKiBAYXV0aG9yIFBldGVyICBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKiBAdmVyc2lvbiAxLjAuMQotICovCi1wdWJsaWMgY2xhc3MgRE9NUGFyc2VyIGV4dGVuZHMgb3JnLmFwYWNoZS54ZXJjZXMucGFyc2Vycy5ET01QYXJzZXIKLXsKLSAgLyoqCi0gICAqIExvY2F0b3IuCi0gICAqLwotICBYTUxMb2NhdG9yIGxvY2F0b3IgPSBudWxsOwotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE1MRG9jdW1lbnRIYW5kbGVyI3N0YXJ0RG9jdW1lbnQob3JnLmFwYWNoZS54ZXJjZXMueG5pLlhNTExvY2F0b3IsIGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueGVyY2VzLnhuaS5OYW1lc3BhY2VDb250ZXh0LCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuQXVnbWVudGF0aW9ucykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHN0YXJ0RG9jdW1lbnQoCi0gICAgWE1MTG9jYXRvciBsb2NhdG9yLAotICAgIFN0cmluZyBlbmNvZGluZywKLSAgICBOYW1lc3BhY2VDb250ZXh0IGNvbnRleHQsCi0gICAgQXVnbWVudGF0aW9ucyBhdWdzKQotICAgIHRocm93cyBYTklFeGNlcHRpb24KLSAgewotICAgIHRoaXMubG9jYXRvciA9IGxvY2F0b3I7Ci0gICAgc3VwZXIuc3RhcnREb2N1bWVudChsb2NhdG9yLCBlbmNvZGluZywgY29udGV4dCwgYXVncyk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhNTERvY3VtZW50SGFuZGxlciNzdGFydEVsZW1lbnQob3JnLmFwYWNoZS54ZXJjZXMueG5pLlFOYW1lLCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE1MQXR0cmlidXRlcywgb3JnLmFwYWNoZS54ZXJjZXMueG5pLkF1Z21lbnRhdGlvbnMpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzdGFydEVsZW1lbnQoCi0gICAgUU5hbWUgcW5hbWUsCi0gICAgWE1MQXR0cmlidXRlcyBhdHRyaWJ1dGVzLAotICAgIEF1Z21lbnRhdGlvbnMgYXVncykKLSAgICB0aHJvd3MgWE5JRXhjZXB0aW9uCi0gIHsKLSAgICBFbGVtZW50IGVsZW1lbnQ7Ci0gICAgRWxlbWVudEltcGwgZWxlbWVudEltcGw7Ci0KLSAgICAvLyBERUJVRzoKLSAgICAvL1N5c3RlbS5lcnIucHJpbnRsbigiMS1saW5lOiAiICsgbG9jYXRvci5nZXRMaW5lTnVtYmVyKCkgKyAiLCBjb2x1bW46ICIgKyBsb2NhdG9yLmdldENvbHVtbk51bWJlcigpKTsKLQotICAgIHN1cGVyLnN0YXJ0RWxlbWVudChxbmFtZSwgYXR0cmlidXRlcywgYXVncyk7Ci0KLSAgICAvLyBERUJVRzoKLSAgICAvL1N5c3RlbS5lcnIucHJpbnRsbigiMi1saW5lOiAiICsgbG9jYXRvci5nZXRMaW5lTnVtYmVyKCkgKyAiLCBjb2x1bW46ICIgKyBsb2NhdG9yLmdldENvbHVtbk51bWJlcigpKTsgICAgCi0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBlbGVtZW50ID0gKEVsZW1lbnQpIGdldFByb3BlcnR5KENVUlJFTlRfRUxFTUVOVF9OT0RFKTsKLQotICAgICAgZWxlbWVudEltcGwgPSAoRWxlbWVudEltcGwpIGVsZW1lbnQ7Ci0gICAgICAvLyBTZXR0aW5nIHRoZSB1c2VyIGRhdGEgd2l0aCBhbiBpZGVudGlmaWVyIHN1Y2ggYXMgRWxlbWVudExvY2F0aW9uLktFWV9OQU1FCi0gICAgICAvLyBtYXkgYmUgYSBsb25nIHRlcm0gZ29vZCBpZGVhLiBUaGUgc2V0VXNlckRhdGEgbWV0aG9kIHdpdGggbm8gaWQgaXMgdXNlZCAKLSAgICAgIC8vIHRvIHN1cHBvcnQgSlZNcyB3aXRoIGFsdGVybmF0ZSB2ZXJzaW9ucyBvZiBYZXJjZXMuCi0gICAgICBlbGVtZW50SW1wbC5zZXRVc2VyRGF0YShuZXcgRWxlbWVudExvY2F0aW9uKGxvY2F0b3IuZ2V0TGluZU51bWJlcigpLCBsb2NhdG9yLmdldENvbHVtbk51bWJlcigpKSk7Ci0gICAgfQotICAgIGNhdGNoIChDbGFzc0Nhc3RFeGNlcHRpb24gY2NlKQotICAgIHsKLSAgICB9Ci0gICAgY2F0Y2ggKFNBWE5vdFN1cHBvcnRlZEV4Y2VwdGlvbiBzbnNlKQotICAgIHsKLSAgICAgIC8vIERFQlVHOgotICAgICAgLy9TeXN0ZW0uZXJyLnByaW50bG4oc25zZS50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgY2F0Y2ggKFNBWE5vdFJlY29nbml6ZWRFeGNlcHRpb24gc25yZSkKLSAgICB7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvZG9tL0VsZW1lbnRMb2NhdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL2RvbS9FbGVtZW50TG9jYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmE5MDUzMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvZG9tL0VsZW1lbnRMb2NhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5kb207Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy54bWwuc2F4LkxvY2F0b3I7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBwcm92aWRlcyBsaW5lIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIGEgbm9kZSB3aXRoaW4gYW4gWE1MIGRvY3VtZW50LgotICogIAotICogQHZlcnNpb24gMS4wLjEKLSAqIEBhdXRob3IgUGV0ZXIgQnJpdHRlbmhhbSAgKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIEVsZW1lbnRMb2NhdGlvbgotewotICAvKioKLSAgICogTGluZSBudW1iZXIuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfTkFNRSA9IEVsZW1lbnRMb2NhdGlvbi5jbGFzcy5nZXROYW1lKCk7Ci0KLSAgLyoqCi0gICAqIExpbmUgbnVtYmVyLgotICAgKi8KLSAgcHJvdGVjdGVkIGludCBsaW5lTnVtYmVyID0gMDsKLQotICAvKioKLSAgICogQ29sdW1uIG51bWJlci4KLSAgICovCi0gIHByb3RlY3RlZCBpbnQgY29sdW1uTnVtYmVyID0gMDsKLQotICAvKioKLSAgICogRWxlbWVudCBsb2NhdGlvbi4KLSAgICogQHBhcmFtIGxpbmVOdW1iZXIgICAgYSBsaW5lIG51bWJlci4KLSAgICogQHBhcmFtIGNvbHVtbk51bWJlciAgYSBjb2x1bW4gbnVtYmVyLgotICAgKi8KLSAgcHVibGljIEVsZW1lbnRMb2NhdGlvbihpbnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlcikKLSAgewotICAgIHRoaXMubGluZU51bWJlciA9IGxpbmVOdW1iZXI7Ci0gICAgdGhpcy5jb2x1bW5OdW1iZXIgPSBjb2x1bW5OdW1iZXI7Ci0gIH0KLQotICAvKioKLSAgICogRWxlbWVudCBsb2NhdGlvbi4KLSAgICogQHBhcmFtIGxvY2F0b3IgIGEgTG9jYXRvciBvYmplY3QuCi0gICAqLwotICBwdWJsaWMgRWxlbWVudExvY2F0aW9uKExvY2F0b3IgbG9jYXRvcikKLSAgewotICAgIHRoaXMubGluZU51bWJlciA9IGxvY2F0b3IuZ2V0TGluZU51bWJlcigpOwotICAgIHRoaXMuY29sdW1uTnVtYmVyID0gbG9jYXRvci5nZXRDb2x1bW5OdW1iZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIGxpbmUgbnVtYmVyLgotICAgKiBAcmV0dXJuIGFuIGludCByZXByZXNlbnRpbmcgdGhlIGxpbmUgbnVtYmVyIHZhbHVlLgotICAgKi8KLSAgcHVibGljIGludCBnZXRMaW5lTnVtYmVyKCkKLSAgewotICAgIHJldHVybiB0aGlzLmxpbmVOdW1iZXI7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBjb2x1bW4gbnVtYmVyLgotICAgKiBAcmV0dXJuIGFuIGludCByZXByZXNlbnRpbmcgdGhlIGNvbHVtbiBudW1iZXIgdmFsdWUuCi0gICAqLwotICBwdWJsaWMgaW50IGdldENvbHVtbk51bWJlcigpCi0gIHsKLSAgICByZXR1cm4gdGhpcy5jb2x1bW5OdW1iZXI7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICB7Ci0gICAgcmV0dXJuICJFbGVtZW50IExvY2F0aW9uOlxuIgotICAgICAgKyAiICAiCi0gICAgICArIFdTSUNvbnN0YW50cy5BVFRSX0xJTkVfTlVNQkVSCi0gICAgICArICI9IgotICAgICAgKyB0aGlzLmxpbmVOdW1iZXIKLSAgICAgICsgIlxuIjsKLSAgICAvLysgIiAgIiArIFdTSUNvbnN0YW50cy5BVFRSX0NPTFVNTl9OVU1CRVIgKyAiPSIgKyB0aGlzLmNvbHVtbk51bWJlciArICJcbiI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3htbC9qYXhwL0RvY3VtZW50QnVpbGRlckZhY3RvcnlJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvamF4cC9Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YmVjNWNkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3htbC9qYXhwL0RvY3VtZW50QnVpbGRlckZhY3RvcnlJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5qYXhwOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLQotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlcjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci0KLS8qKgotICogVGhpcyBjbGFzcyBkZWZpbmVzIGEgZmFjdG9yeSBBUEkgdGhhdCBlbmFibGVzIHVzIHRvIG9idGFpbiBhIHBhcnNlciB0aGF0Ci0gKiBwcm9kdWNlcyBET00gb2JqZWN0IHRyZWVzIGZyb20gWE1MIGRvY3VtZW50cy4gTm90ZSB0aGlzIGNsYXNzIHNwZWNpYWxpemVzIAotICogamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS4KLSAqIAotICogQGF1dGhvciBQZXRlciBCcml0dGVuaGFtIChwZXRlcmJyQHVzLmlibS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5SW1wbCBleHRlbmRzIERvY3VtZW50QnVpbGRlckZhY3RvcnkKLXsKLQotICBwcm90ZWN0ZWQgSGFzaHRhYmxlIGF0dHJpYnV0ZXMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgYSBEb2N1bWVudEJ1aWxkZXIgdXNpbmcgdGhlIGN1cnJlbnRseSAKLSAgICogY29uZmlndXJlZCBwYXJhbWV0ZXJzLgotICAgKiAKLSAgICogQHJldHVybiBhIG5ldyBpbnN0YW5jZSBvZiBhIERvY3VtZW50QnVpbGRlci4gCi0gICAqIEB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBpZiBhIERvY3VtZW50QnVpbGRlciBjYW5ub3QKLSAgICogICAgICAgICBiZSBjcmVhdGVkIHdoaWNoIHNhdGlzZmllcyB0aGUgY29uZmlndXJhdGlvbiByZXF1ZXN0ZWQuCi0gICAqLwotICBwdWJsaWMgRG9jdW1lbnRCdWlsZGVyIG5ld0RvY3VtZW50QnVpbGRlcigpCi0gICAgdGhyb3dzIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24KLSAgewotICAgIERvY3VtZW50QnVpbGRlciBkb2N1bWVudEJ1aWxkZXIgPSBudWxsOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgZG9jdW1lbnRCdWlsZGVyID0gbmV3IERvY3VtZW50QnVpbGRlckltcGwodGhpcywgYXR0cmlidXRlcyk7Ci0gICAgfQotCi0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZG9jdW1lbnRCdWlsZGVyOwotICB9Ci0KLSAgLyoqCi0gICAqIEFsbG93cyB0aGUgdXNlciB0byByZXRyaWV2ZSBzcGVjaWZpYyBhdHRyaWJ1dGVzIG9uIHRoZSB1bmRlcmx5aW5nIAotICAgKiBpbXBsZW1lbnRhdGlvbi4KLSAgICogCi0gICAqIEBwYXJhbSBuYW1lICB0aGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlLgotICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlLiAKLSAgICogQHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24gCi0gICAqICAgICAgICAgZG9lc24ndCByZWNvZ25pemUgdGhlIGF0dHJpYnV0ZS4KLSAgICovCi0gIHB1YmxpYyBPYmplY3QgZ2V0QXR0cmlidXRlKFN0cmluZyBuYW1lKSB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4gYXR0cmlidXRlcy5nZXQobmFtZSk7Ci0gIH0KLQotICAvKioKLSAgICogQWxsb3dzIHRoZSB1c2VyIHRvIHNldCBzcGVjaWZpYyBhdHRyaWJ1dGVzIG9uIHRoZSB1bmRlcmx5aW5nIAotICAgKiBpbXBsZW1lbnRhdGlvbi4gCi0gICAqIAotICAgKiBAcGFyYW0gbmFtZSAgIHRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUuCi0gICAqIEBwYXJhbSB2YWx1ZSAgdGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUuCi0gICAqIEB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlmIHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uIAotICAgKiAgICAgICAgIGRvZXNuJ3QgcmVjb2duaXplIHRoZSBhdHRyaWJ1dGUuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRBdHRyaWJ1dGUoU3RyaW5nIG5hbWUsIE9iamVjdCB2YWx1ZSkKLSAgICB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uCi0gIHsKLSAgICBhdHRyaWJ1dGVzLnB1dChuYW1lLCB2YWx1ZSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEZlYXR1cmUoU3RyaW5nIGFyZzAsIGJvb2xlYW4gYXJnMSkgCi0gICAgdGhyb3dzIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24KLSAgewotICAgIC8vIGN1cnJlbnRseSB3ZSBkbyBub3Qgc3VwcG9ydCBzZXR0aW5nIGFueSBmZWF0dXJlCi0JLy8gYXMgcGVyIHNwZWMsIHdlIHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24KLQl0aHJvdyBuZXcgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbihhcmcwICsgIiBOb3Qgc3VwcG9ydGVkIik7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBnZXRGZWF0dXJlKFN0cmluZyBhcmcwKSAKLSAgICB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbgotICB7Ci0JLy8gYXMgcGVyIHNwZWMsIHdlIHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24KLQl0aHJvdyBuZXcgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbihhcmcwICsgIiBpcyBub3Qgc3VwcG9ydGVkIik7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3htbC9qYXhwL0RvY3VtZW50QnVpbGRlckltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3htbC9qYXhwL0RvY3VtZW50QnVpbGRlckltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg1OGRkNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvamF4cC9Eb2N1bWVudEJ1aWxkZXJJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5qYXhwOwotCi0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotCi1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlckZhY3Rvcnk7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5kb20uRE9NSW1wbGVtZW50YXRpb25JbXBsOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLmRvbS5Eb2N1bWVudEltcGw7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMuaW1wbC5Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLmRvbS5ET01QYXJzZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRE9NSW1wbGVtZW50YXRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnhtbC5zYXguRW50aXR5UmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLnhtbC5zYXguRXJyb3JIYW5kbGVyOwotaW1wb3J0IG9yZy54bWwuc2F4LklucHV0U291cmNlOwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcueG1sLnNheC5oZWxwZXJzLkRlZmF1bHRIYW5kbGVyOwotCi0vKioKLSAqIFVzaW5nIHRoaXMgY2xhc3MsIHdlIGNhbiBvYnRhaW4gYSBEb2N1bWVudCBmcm9tIFhNTC4gVGhpcyBjbGFzcyBpcyBhIAotICogc3BlY2lhbGl6YXRpb24gb2YgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyLgotICogCi0gKiBBbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIGNhbiBiZSBvYnRhaW5lZCBmcm9tIHRoZSAKLSAqIERvY3VtZW50QnVpbGRlckZhY3RvcnkubmV3RG9jdW1lbnRCdWlsZGVyIG1ldGhvZC4gT25jZSBhbiBpbnN0YW5jZSAKLSAqIG9mIHRoaXMgY2xhc3MgaXMgb2J0YWluZWQsIFhNTCBjYW4gYmUgcGFyc2VkIGZyb20gYSB2YXJpZXR5IG9mIGlucHV0IAotICogc291cmNlcy4gVGhlc2UgaW5wdXQgc291cmNlcyBhcmUgSW5wdXRTdHJlYW1zLCBGaWxlcywgVVJMcywgYW5kIFNBWCAKLSAqIElucHV0U291cmNlcy4KLQotVGhpcyBjbGFzcyB3aWxsIGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlckZhY3RvcnkuLi4KLSAqIAotICogQGF1dGhvciBQZXRlciAgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICogQHZlcnNpb24gMS4wLjEKLSAqLwotcHVibGljIGNsYXNzIERvY3VtZW50QnVpbGRlckltcGwgZXh0ZW5kcyBEb2N1bWVudEJ1aWxkZXIKLXsKLSAgcHJvdGVjdGVkIERPTVBhcnNlciBkb21QYXJzZXIgPSBudWxsOwotCi0gIHByb3RlY3RlZCBFbnRpdHlSZXNvbHZlciBlbnRpdHlSZXNvbHZlciA9IG51bGw7Ci0gIHByb3RlY3RlZCBFcnJvckhhbmRsZXIgZXJyb3JIYW5kbGVyID0gbmV3IERlZmF1bHRIYW5kbGVyKCk7Ci0KLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRVNQQUNFU19GRUFUVVJFID0KLSAgICBDb25zdGFudHMuU0FYX0ZFQVRVUkVfUFJFRklYICsgQ29uc3RhbnRzLk5BTUVTUEFDRVNfRkVBVFVSRTsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgVkFMSURBVElPTl9GRUFUVVJFID0KLSAgICBDb25zdGFudHMuU0FYX0ZFQVRVUkVfUFJFRklYICsgQ29uc3RhbnRzLlZBTElEQVRJT05fRkVBVFVSRTsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIERvY3VtZW50QnVpbGRlckltcGwyLgotICAgKgotICAgKiBAcGFyYW0gZGJGYWN0b3J5ICBhIERvY3VtZW50QnVpbGRlckZhY3Rvcnkgb2JqZWN0LgotICAgKiBAdGhyb3dzIFNBWEV4Y2VwdGlvbiBpZiBhbnkgcGFyc2UgZXJyb3JzIG9jY3VyLiAKLSAgICovCi0gIHB1YmxpYyBEb2N1bWVudEJ1aWxkZXJJbXBsKERvY3VtZW50QnVpbGRlckZhY3RvcnkgZGJGYWN0b3J5LCBIYXNodGFibGUgYXR0cmlidXRlcykKLSAgICB0aHJvd3MgU0FYRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBDcmVhdGUgcGFyc2VyCi0gICAgZG9tUGFyc2VyID0gbmV3IERPTVBhcnNlcigpOwotCi0gICAgLy8gU2V0IG5hbWVzcGFjZSBhd2FyZQotICAgIGRvbVBhcnNlci5zZXRGZWF0dXJlKE5BTUVTUEFDRVNfRkVBVFVSRSwgZGJGYWN0b3J5LmlzTmFtZXNwYWNlQXdhcmUoKSk7Ci0KLSAgICAvLyBTZXQgdmFsaWRhdGluZwotICAgIGRvbVBhcnNlci5zZXRGZWF0dXJlKFZBTElEQVRJT05fRkVBVFVSRSwgZGJGYWN0b3J5LmlzVmFsaWRhdGluZygpKTsKLSAgICBpZiAoZGJGYWN0b3J5LmlzVmFsaWRhdGluZygpKSBkb21QYXJzZXIuc2V0RmVhdHVyZShYTUxVdGlscy5GRUFUVVJFX1ZBTElEQVRJT05fU0NIRU1BLCB0cnVlKTsKLQotICAgIC8vIERvIG5vdCBkZWZlciBub2RlIGV4cGFuc2lvbgotICAgIGRvbVBhcnNlci5zZXRGZWF0dXJlKAotICAgICAgQ29uc3RhbnRzLlhFUkNFU19GRUFUVVJFX1BSRUZJWCArIENvbnN0YW50cy5ERUZFUl9OT0RFX0VYUEFOU0lPTl9GRUFUVVJFLAotICAgICAgZmFsc2UpOwotCi0gICAgLy8gU2V0IG90aGVyIGZlYXR1cmVzIGZyb20gdGhlIGRvY3VtZW50IGZhY3RvcnkgYnVpbGRlcgotICAgIGRvbVBhcnNlci5zZXRGZWF0dXJlKAotICAgICAgQ29uc3RhbnRzLlhFUkNFU19GRUFUVVJFX1BSRUZJWCArIENvbnN0YW50cy5JTkNMVURFX0lHTk9SQUJMRV9XSElURVNQQUNFLAotICAgICAgIWRiRmFjdG9yeS5pc0lnbm9yaW5nRWxlbWVudENvbnRlbnRXaGl0ZXNwYWNlKCkpOwotICAgIGRvbVBhcnNlci5zZXRGZWF0dXJlKAotICAgICAgQ29uc3RhbnRzLlhFUkNFU19GRUFUVVJFX1BSRUZJWAotICAgICAgICArIENvbnN0YW50cy5DUkVBVEVfRU5USVRZX1JFRl9OT0RFU19GRUFUVVJFLAotICAgICAgIWRiRmFjdG9yeS5pc0V4cGFuZEVudGl0eVJlZmVyZW5jZXMoKSk7Ci0gICAgZG9tUGFyc2VyLnNldEZlYXR1cmUoCi0gICAgICBDb25zdGFudHMuWEVSQ0VTX0ZFQVRVUkVfUFJFRklYICsgQ29uc3RhbnRzLklOQ0xVREVfQ09NTUVOVFNfRkVBVFVSRSwKLSAgICAgICFkYkZhY3RvcnkuaXNJZ25vcmluZ0NvbW1lbnRzKCkpOwotICAgIGRvbVBhcnNlci5zZXRGZWF0dXJlKAotICAgICAgQ29uc3RhbnRzLlhFUkNFU19GRUFUVVJFX1BSRUZJWCArIENvbnN0YW50cy5DUkVBVEVfQ0RBVEFfTk9ERVNfRkVBVFVSRSwKLSAgICAgICFkYkZhY3RvcnkuaXNDb2FsZXNjaW5nKCkpOwotICAgCi0gICAgLy8gc2V0IGZlYXR1cmVzIGFuZCBwcm9wZXJ0aWVzIHNwZWNpZmllZCBhdCBmYWN0b3J5IGxldmVsCi0gICAgaWYgKGF0dHJpYnV0ZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBmb3IgKEVudW1lcmF0aW9uIGk9YXR0cmlidXRlcy5rZXlzKCk7IGkuaGFzTW9yZUVsZW1lbnRzKCk7KQotICAgICAgewotICAgICAgICBTdHJpbmcgYXR0cmlidXRlID0gKFN0cmluZylpLm5leHRFbGVtZW50KCk7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGUuZXF1YWxzKFhNTFV0aWxzLkpBWFBfU0NIRU1BX1NPVVJDRSkpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBmb3IgbXVsdGlwbGUgc2NoZW1hIHZhbGlkYXRpb24gbWF5IGJlIGFycmF5IG9mIElucHV0U291cmNlIAotICAgICAgICAgIGlmKGF0dHJpYnV0ZXMuZ2V0KGF0dHJpYnV0ZSkgaW5zdGFuY2VvZiBJbnB1dFNvdXJjZVtdKQotICAgICAgICAgICAgZG9tUGFyc2VyLnNldFByb3BlcnR5KGF0dHJpYnV0ZSwgKElucHV0U291cmNlW10pYXR0cmlidXRlcy5nZXQoYXR0cmlidXRlKSk7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgZG9tUGFyc2VyLnNldFByb3BlcnR5KGF0dHJpYnV0ZSwgKElucHV0U291cmNlKWF0dHJpYnV0ZXMuZ2V0KGF0dHJpYnV0ZSkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIGRvbVBhcnNlci5zZXRQcm9wZXJ0eShhdHRyaWJ1dGUsIGF0dHJpYnV0ZXMuZ2V0KGF0dHJpYnV0ZSkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFBhcnNlIHRoZSBjb250ZW50IG9mIHRoZSBnaXZlbiBpbnB1dCBzb3VyY2UgYXMgYW4gWE1MIGRvY3VtZW50IGFuZCByZXR1cm4gYSBuZXcgRE9NLgotICAgKiBAcGFyYW0gaXMgIElucHV0U3RyZWFtIGNvbnRhaW5pbmcgdGhlIGNvbnRlbnQgdG8gYmUgcGFyc2VkLiAKLSAgICogQHRocm93cyBTQVhFeGNlcHRpb24gaWYgYW55IHBhcnNlIGVycm9ycyBvY2N1ci4gCi0gICAqIEB0aHJvd3MgSU9FeGNlcHRpb24gaWYgYW55IElPIGVycm9ycyBvY2N1ci4gCi0gICAqLwotICBwdWJsaWMgRG9jdW1lbnQgcGFyc2UoSW5wdXRTb3VyY2UgaXMpIHRocm93cyBTQVhFeGNlcHRpb24sIElPRXhjZXB0aW9uCi0gIHsKLQlDbGFzc0xvYWRlciBjdXJyZW50TG9hZGVyID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKTsgICAKLQl0cnkKLQl7Ci0JICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihYTUxVdGlscy5jbGFzcy5nZXRDbGFzc0xvYWRlcigpKTsgICAKLSAJCi0gICAgICAvLyBTZXQgZW50aXR5IHJlc29sdmVyCi0gICAgICBpZiAodGhpcy5lbnRpdHlSZXNvbHZlciAhPSBudWxsKQotICAgICAgICBkb21QYXJzZXIuc2V0RW50aXR5UmVzb2x2ZXIodGhpcy5lbnRpdHlSZXNvbHZlcik7Ci0KLSAgICAgIC8vIFNldCBlcnJvciBoYW5kbGVyICAgIAotICAgICAgaWYgKHRoaXMuZXJyb3JIYW5kbGVyICE9IG51bGwpCi0gICAgICAgIGRvbVBhcnNlci5zZXRFcnJvckhhbmRsZXIodGhpcy5lcnJvckhhbmRsZXIpOwotCi0gICAgICAvLyBQYXJzZSBpbnB1dCBzb3VyY2UKLSAgICAgIGRvbVBhcnNlci5wYXJzZShpcyk7Ci0KLSAgICAgIC8vIFJldHVybiB0aGUgZG9jdW1lbnQgdGhhdCB3YXMgY3JlYXRlZAotICAgICAgcmV0dXJuIGRvbVBhcnNlci5nZXREb2N1bWVudCgpOwotCX0KLSAgICBmaW5hbGx5Ci0gICAgeyAKLSAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2V0Q29udGV4dENsYXNzTG9hZGVyKGN1cnJlbnRMb2FkZXIpOwotICAgIH0gICAgCi0gIH0KLQotICAvKioKLSAgICogSW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoaXMgcGFyc2VyIGlzIGNvbmZpZ3VyZWQgdG8gdW5kZXJzdGFuZCBuYW1lc3BhY2VzLgotICAgKiBAcmV0dXJuIHRydWUgaWYgdGhpcyBwYXJzZXIgaXMgY29uZmlndXJlZCB0byB1bmRlcnN0YW5kIG5hbWVzcGFjZXM7IGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzTmFtZXNwYWNlQXdhcmUoKQotICB7Ci0gICAgYm9vbGVhbiBuYW1lc3BhY2VBd2FyZSA9IGZhbHNlOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgbmFtZXNwYWNlQXdhcmUgPSBkb21QYXJzZXIuZ2V0RmVhdHVyZShOQU1FU1BBQ0VTX0ZFQVRVUkUpOwotICAgIH0KLQotICAgIGNhdGNoIChTQVhFeGNlcHRpb24gc2UpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oc2UudG9TdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG5hbWVzcGFjZUF3YXJlOwotICB9Ci0KLSAgLyoqCi0gICAqIEluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGlzIHBhcnNlciBpcyBjb25maWd1cmVkIHRvIHZhbGlkYXRlIFhNTCBkb2N1bWVudHMuCi0gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGlzIHBhcnNlciBpcyBjb25maWd1cmVkIHRvIHZhbGlkYXRlIFhNTCBkb2N1bWVudHM7IGZhbHNlIG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzVmFsaWRhdGluZygpCi0gIHsKLSAgICBib29sZWFuIHZhbGlkYXRpbmcgPSBmYWxzZTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIHZhbGlkYXRpbmcgPSBkb21QYXJzZXIuZ2V0RmVhdHVyZShWQUxJREFUSU9OX0ZFQVRVUkUpOwotICAgIH0KLQotICAgIGNhdGNoIChTQVhFeGNlcHRpb24gc2UpCi0gICAgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oc2UudG9TdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbGlkYXRpbmc7Ci0gIH0KLQotICAvKioKLSAgICogU3BlY2lmeSB0aGUgRW50aXR5UmVzb2x2ZXIgdG8gYmUgdXNlZCB0byByZXNvbHZlIGVudGl0aWVzIHByZXNlbnQgCi0gICAqIGluIHRoZSBYTUwgZG9jdW1lbnQgdG8gYmUgcGFyc2VkLiBTZXR0aW5nIHRoaXMgdG8gbnVsbCB3aWxsIHJlc3VsdCAKLSAgICogaW4gdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24gdXNpbmcgaXQncyBvd24gZGVmYXVsdCAKLSAgICogaW1wbGVtZW50YXRpb24gYW5kIGJlaGF2aW9yLgotICAgKiAKLSAgICogQHBhcmFtIGVyICB0aGUgRW50aXR5UmVzb2x2ZXIgdG8gYmUgdXNlZCB0byByZXNvbHZlIGVudGl0aWVzIAotICAgKiAgICAgICAgICAgIHByZXNlbnQgaW4gdGhlIFhNTCBkb2N1bWVudCB0byBiZSBwYXJzZWQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFbnRpdHlSZXNvbHZlcihFbnRpdHlSZXNvbHZlciBlbnRpdHlSZXNvbHZlcikKLSAgewotICAgIHRoaXMuZW50aXR5UmVzb2x2ZXIgPSBlbnRpdHlSZXNvbHZlcjsKLSAgfQotCi0gIC8qKgotICAgKiBTcGVjaWZ5IHRoZSBFcnJvckhhbmRsZXIgdG8gYmUgdXNlZCB0byByZXBvcnQgZXJyb3JzIHByZXNlbnQgaW4gCi0gICAqIHRoZSBYTUwgZG9jdW1lbnQgdG8gYmUgcGFyc2VkLiBTZXR0aW5nIHRoaXMgdG8gbnVsbCB3aWxsIHJlc3VsdCAKLSAgICogaW4gdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24gdXNpbmcgaXQncyBvd24gZGVmYXVsdCAKLSAgICogaW1wbGVtZW50YXRpb24gYW5kIGJlaGF2aW9yLiAKLSAgICogCi0gICAqIHBhcmFtIGVoICB0aGUgRXJyb3JIYW5kbGVyIHRvIGJlIHVzZWQgdG8gcmVwb3J0IGVycm9ycyBwcmVzZW50IGluIAotICAgKiAgICAgICAgICAgdGhlIFhNTCBkb2N1bWVudCB0byBiZSBwYXJzZWQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRFcnJvckhhbmRsZXIoRXJyb3JIYW5kbGVyIGVycm9ySGFuZGxlcikKLSAgewotICAgIHRoaXMuZXJyb3JIYW5kbGVyID0gZXJyb3JIYW5kbGVyOwotICB9Ci0KLSAgLyoqCi0gICAqIE9idGFpbiBhIG5ldyBpbnN0YW5jZSBvZiBhIERPTSBEb2N1bWVudCBvYmplY3QgdG8gYnVpbGQgYSBET00gCi0gICAqIHRyZWUgd2l0aC4gQW4gYWx0ZXJuYXRpdmUgd2F5IHRvIGNyZWF0ZSBhIERPTSBEb2N1bWVudCBvYmplY3QgCi0gICAqIGlzIHRvIHVzZSB0aGUgZ2V0RE9NSW1wbGVtZW50YXRpb24gbWV0aG9kIHRvIGdldCBhIERPTSBMZXZlbCAyIAotICAgKiBET01JbXBsZW1lbnRhdGlvbiBvYmplY3QgYW5kIHRoZW4gdXNlIERPTSBMZXZlbCAyIG1ldGhvZHMgb24gCi0gICAqIHRoYXQgb2JqZWN0IHRvIGNyZWF0ZSBhIERPTSBEb2N1bWVudCBvYmplY3QuCi0gICAqIAotICAgKiBAcmV0dXJuIGEgbmV3IGluc3RhbmNlIG9mIGEgRE9NIERvY3VtZW50IG9iamVjdC4KLSAgICovCi0gIHB1YmxpYyBEb2N1bWVudCBuZXdEb2N1bWVudCgpCi0gIHsKLSAgICByZXR1cm4gbmV3IERvY3VtZW50SW1wbCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIE9idGFpbiBhbiBpbnN0YW5jZSBvZiBhIERPTUltcGxlbWVudGF0aW9uIG9iamVjdC4gCi0gICAqIEByZXR1cm4gYSBuZXcgaW5zdGFuY2Ugb2YgYSBET01JbXBsZW1lbnRhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBET01JbXBsZW1lbnRhdGlvbiBnZXRET01JbXBsZW1lbnRhdGlvbigpCi0gIHsKLSAgICByZXR1cm4gbmV3IERPTUltcGxlbWVudGF0aW9uSW1wbCgpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3htbC9zY2hlbWEvVGFyZ2V0TmFtZXNwYWNlUHJvY2Vzc29yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvc2NoZW1hL1RhcmdldE5hbWVzcGFjZVByb2Nlc3Nvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZGMyNDM1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9jb3JlL3htbC9zY2hlbWEvVGFyZ2V0TmFtZXNwYWNlUHJvY2Vzc29yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5zY2hlbWE7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVGVzdFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBwcm9jZXNzZXMgdGFyZ2V0IG5hbWVzcGFjZXMuIE5vdGUgdGhpcyBjbGFzcyBpcyBhIHNwZWNpYWxpemF0aW9uCi0gKiBvZiBvcmcud3NpLnhtbC5zY2hlbWEuWE1MU2NoZW1hUHJvY2Vzc29yLgotICogCi0gKiBAYXV0aG9yIFBldGVyIEJyaXR0ZW5oYW0gKHBldGVyYnJAdXMuaWJtLmNvbSkKLSAqIEB2ZXJzaW9uIDEuMC4xCi0gKi8KLXB1YmxpYyBjbGFzcyBUYXJnZXROYW1lc3BhY2VQcm9jZXNzb3IgZXh0ZW5kcyBYTUxTY2hlbWFQcm9jZXNzb3IKLXsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIFRhcmdldE5hbWVzcGFjZVByb2Nlc3MuCi0gICAqIAotICAgKiBAcGFyYW0gY29udGV4dAotICAgKiAgICAgICAgICAgIGRvY3VtZW50IGNvbnRleHQKLSAgICogQHBhcmFtIGRvY3VtZW50TGlzdAotICAgKiAgICAgICAgICAgIGNhY2hlIG9mIHByZXZpb3VzbHkgcGFyc2VkIGRvY3VtZW50cwotICAgKi8KLSAgcHVibGljIFRhcmdldE5hbWVzcGFjZVByb2Nlc3NvcihTdHJpbmcgY29udGV4dCkKLSAgewotICAgIHN1cGVyKGNvbnRleHQsIGZhbHNlKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHByb2Nlc3NTY2hlbWEoRWxlbWVudCBlbGVtZW50KQotICB7Ci0gICAgU3RyaW5nIHRucyA9IG51bGw7Ci0gICAgQXR0ciBhdHRyID0gWE1MVXRpbHMuZ2V0QXR0cmlidXRlKGVsZW1lbnQsIEFUVFJfWFNEX1RBUkdFVE5BTUVTUEFDRSk7Ci0KLSAgICAvLyBJZiB0aGUgYXR0cmlidXRlIHdhcyBmb3VuZCBhbmQgdmFsdWUgaXMgbm90IG51bGwsIHRoZW4gYWRkIGl0IHRvIHRoZSBsaXN0Ci0gICAgaWYgKChhdHRyICE9IG51bGwpICYmICgodG5zID0gYXR0ci5nZXRWYWx1ZSgpKSAhPSBudWxsKSkKLSAgICB7Ci0gICAgICAvLyBBZGQgdGhlIHRhcmdldE5hbWVzcGFjZSB0byB0aGUgcmV0dXJuIGxpc3QKLSAgICAgIHJldHVybkxpc3QuYWRkKHRucyk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFNlYXJjaCBmb3IgYWxsIHNjaGVtYSBlbGVtZW50cywgbG9hZCB0aGUgeHNkIGRvY3VtZW50cywgYW5kIHRoZW4gcHJvY2VzcwotICAgKiB0aGVtLgotICAgKiAKLSAgICogQHBhcmFtIG5vZGUKLSAgICogICAgICAgICAgICBub2RlLgotICAgKiBAcmV0dXJuIGEgbGlzdC4KLSAgICogQHRocm93cyBXU0lFeGNlcHRpb24KLSAgICogICAgICAgICAgICAgaWYgdGhlIFhNTCBzY2hlbWEgZmlsZSBpcyBub3QgZm91bmQgb3IgaWYgaXQgaXMgbm90IGZvcm1hdHRlZAotICAgKiAgICAgICAgICAgICBjb3JyZWN0bHkuCi0gICAqLwotICBwdWJsaWMgTGlzdCBwcm9jZXNzQWxsU2NoZW1hKE5vZGUgbm9kZSkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmV0dXJuIHByb2Nlc3NBbGxTY2hlbWEobm9kZSwgY29udGV4dCk7Ci0gIH0KLQotICAvKioKLSAgICogU2VhcmNoIGZvciBhbGwgc2NoZW1hIGVsZW1lbnRzLCBsb2FkIHRoZSB4c2QgZG9jdW1lbnRzLCBhbmQgdGhlbiBwcm9jZXNzCi0gICAqIHRoZW0uCi0gICAqIAotICAgKiBAcGFyYW0gbm9kZQotICAgKiAgICAgICAgICAgIG5vZGUuCi0gICAqIEByZXR1cm4gYSBsaXN0LgotICAgKiBAdGhyb3dzIFdTSUV4Y2VwdGlvbgotICAgKiAgICAgICAgICAgICBpZiB0aGUgWE1MIHNjaGVtYSBmaWxlIGlzIG5vdCBmb3VuZCBvciBpZiBpdCBpcyBub3QgZm9ybWF0dGVkCi0gICAqICAgICAgICAgICAgIGNvcnJlY3RseS4KLSAgICovCi0gIHByaXZhdGUgTGlzdCBwcm9jZXNzQWxsU2NoZW1hKE5vZGUgbm9kZSwgU3RyaW5nIGN0eCkgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0JQ2xhc3NMb2FkZXIgY3VycmVudExvYWRlciA9IFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0Q29udGV4dENsYXNzTG9hZGVyKCk7ICAgCi0JdHJ5Ci0JewotICAgCSAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zZXRDb250ZXh0Q2xhc3NMb2FkZXIoWE1MVXRpbHMuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKSk7ICAgCi0JCi0gICAgICAvLyBpZiB4c2Q6c2NoZW1hIGVsZW1lbnQgaXMgZm91bmQgLT4gcHJvY2VzcyBzY2hlbWEKLSAgICAgIGlmIChYTUxVdGlscy5lcXVhbHMobm9kZSwgRUxFTV9YU0RfU0NIRU1BKSkKLSAgICAgIHsKLSAgICAgICAgcHJvY2Vzc1NjaGVtYSgoRWxlbWVudCkgbm9kZSk7Ci0KLSAgICAgICAgTm9kZSBuID0gbm9kZS5nZXRGaXJzdENoaWxkKCk7Ci0gICAgICAgIHdoaWxlIChuICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoTm9kZS5FTEVNRU5UX05PREUgPT0gbi5nZXROb2RlVHlwZSgpJiYgWE1MVXRpbHMuZXF1YWxzKG4sIEVMRU1fWFNEX0lNUE9SVCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgQXR0ciBzY2hlbWFMb2NhdGlvbiA9IFhNTFV0aWxzLmdldEF0dHJpYnV0ZSgoRWxlbWVudCkgbiwgQVRUUl9YU0RfU0NIRU1BTE9DQVRJT04pOwotCi0gICAgICAgICAgICAvLyBUcnkgdG8gcGFyc2UgaW1wb3J0ZWQgWFNECi0gICAgICAgICAgICBpZiAoc2NoZW1hTG9jYXRpb24gIT0gbnVsbCAmJiBzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAJICBpZiAoIXNjaGVtYUxvY2F0aW9ucy5jb250YWlucyhzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpKSkKLSAgICAgICAgICAJICB7Ci0gICAgICAgICAgICAgICAgc2NoZW1hTG9jYXRpb25zLmFkZChzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpKTsKLSAgICAgICAgICAgICAgICB0cnkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAvLyBSZWFkIGFuZCBwUGFyc2UgdGhlIFhNTCBzY2hlbWEgZG9jdW1lbnQKLSAgICAgICAgICAgICAgICAgIERvY3VtZW50IGRvY3VtZW50ID0gcGFyc2VYTUxEb2N1bWVudFVSTChzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpLCBjdHgsIFRlc3RVdGlscy5nZXRYTUxTY2hlbWFMb2NhdGlvbigpKTsKLSAgICAgICAgICAgICAgICAgIHByb2Nlc3NBbGxTY2hlbWEoZG9jdW1lbnQuZ2V0RG9jdW1lbnRFbGVtZW50KCksIFhNTFV0aWxzLmNyZWF0ZVVSTFN0cmluZyhzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpLCBjdHgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2F0Y2ggKFdTSUV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGlmICh0aHJvd0V4Y2VwdGlvbikgdGhyb3cgZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAvLyBOT1RFOiBBbiBleGNlcHRpb24gd2lsbCBvY2N1ciBpZiB0aGUgWE1MIHNjaGVtYSBmaWxlIGlzIG5vdAotICAJCQkgICAgIC8vIGZvdW5kIG9yIGlmIGl0IGlzIG5vdCBmb3JtYXR0ZWQgY29ycmVjdGx5Ci0gICAgICAgICAgICAgICAgIGlmICh0aHJvd0V4Y2VwdGlvbikgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbih0LmdldE1lc3NhZ2UoKSwgdCk7Ci0gICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICB9Ci0gICAgICAgICB9Ci0gICAgICAgICBuID0gbi5nZXROZXh0U2libGluZygpOwotICAgICAgIH0KLSAgICAgfQotCi0gICAgIC8vIFJldHVybiBsaXN0IGNyZWF0ZWQgYnkgdGhlIGNsYXNzIHRoYXQgZXh0ZW5kcyB0aGlzIGNsYXNzCi0gICAgIHJldHVybiByZXR1cm5MaXN0OwotICAgIH0KLSAgICBmaW5hbGx5Ci0gICAgeyAKLSAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2V0Q29udGV4dENsYXNzTG9hZGVyKGN1cnJlbnRMb2FkZXIpOwotICAgIH0gICAgCi19Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvc2NoZW1hL1hNTFNjaGVtYVByb2Nlc3Nvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL3NjaGVtYS9YTUxTY2hlbWFQcm9jZXNzb3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTZlNTJlMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvc2NoZW1hL1hNTFNjaGVtYVByb2Nlc3Nvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuc2NoZW1hOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnV0aWwuVGVzdFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MRG9jdW1lbnRDYWNoZVVzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxUYWdzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuWE1MVXRpbHM7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLS8qKgotICogVGhpcyBhYnN0cmFjdCBjbGFzcyBpcyB1c2VkIHRvIHByb2Nlc3MgYW4gWE1MIFNjaGVtYS4KLSAqIAotICogQGF1dGhvciBQZXRlciAgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICogQHZlcnNpb24gMS4wLjEKLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIFhNTFNjaGVtYVByb2Nlc3NvcgotICBleHRlbmRzIFhNTERvY3VtZW50Q2FjaGVVc2VyCi0gIGltcGxlbWVudHMgWE1MVGFncwotewotICBwcm90ZWN0ZWQgTGlzdCByZXR1cm5MaXN0ID0gbmV3IFZlY3RvcigpOwotICBwcm90ZWN0ZWQgU3RyaW5nIGNvbnRleHQ7Ci0gIHByb3RlY3RlZCBib29sZWFuIHRocm93RXhjZXB0aW9uID0gdHJ1ZTsKLSAgcHJvdGVjdGVkIExpc3Qgc2NoZW1hTG9jYXRpb25zID0gbmV3IFZlY3RvcigpOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgWE1MU2NoZW1hUHJvY2Vzc29yLgotICAgKiBAcGFyYW0gY29udGV4dCAgICAgICBkb2N1bWVudCBjb250ZXh0LiAKLSAgICogQHBhcmFtIGRvY3VtZW50TGlzdCAgY2FjaGUgb2YgcHJldmlvdXNseSBwYXJzZWQgZG9jdW1lbnRzLgotICAgKi8KLSAgcHVibGljIFhNTFNjaGVtYVByb2Nlc3NvcihTdHJpbmcgY29udGV4dCkKLSAgewotICAgIHRoaXMoY29udGV4dCwgdHJ1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0b3IgZm9yIFhNTFNjaGVtYVByb2Nlc3Nvci4KLSAgICogQHBhcmFtIGNvbnRleHQgICAgICAgIGRvY3VtZW50IGNvbnRleHQuIAotICAgKiBAcGFyYW0gZG9jdW1lbnRMaXN0ICAgY2FjaGUgb2YgcHJldmlvdXNseSBwYXJzZWQgZG9jdW1lbnRzLgotICAgKiBAcGFyYW0gdGhyb3dFeGNlcHRpb24gaW5kaWNhdGVzIGlmIGFuIGV4Y2VwdGlvbiBzaG91bGQgYmUgdGhyb3duIGlmIHRoZXJlIGlzIGEgcGFyc2luZyBwcm9ibGVtLgotICAgKi8KLSAgcHVibGljIFhNTFNjaGVtYVByb2Nlc3NvcigKLSAgICBTdHJpbmcgY29udGV4dCwKLSAgICBib29sZWFuIHRocm93RXhjZXB0aW9uKQotICB7Ci0gICAgc3VwZXIoKTsKLQotICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7Ci0gICAgdGhpcy50aHJvd0V4Y2VwdGlvbiA9IHRocm93RXhjZXB0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIFNlYXJjaCBmb3IgYWxsIHNjaGVtYSBlbGVtZW50cywgbG9hZCB0aGUgeHNkIGRvY3VtZW50cywgYW5kIHRoZW4gcHJvY2VzcyB0aGVtLgotICAgKiBAcGFyYW0gbm9kZSAgbm9kZS4KLSAgICogQHJldHVybiBhIGxpc3QuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHRoZSBYTUwgc2NoZW1hIGZpbGUgaXMgbm90IGZvdW5kIG9yIGlmIGl0IGlzIG5vdCBmb3JtYXR0ZWQgY29ycmVjdGx5LgotICAgKi8KLSAgcHVibGljIExpc3QgcHJvY2Vzc0FsbFNjaGVtYShOb2RlIG5vZGUpIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJldHVybiBwcm9jZXNzQWxsU2NoZW1hKG5vZGUsIGNvbnRleHQpOwotICB9Ci0KLSAgLyoqCi0gICAqIFNlYXJjaCBmb3IgYWxsIHNjaGVtYSBlbGVtZW50cywgbG9hZCB0aGUgeHNkIGRvY3VtZW50cywgYW5kIHRoZW4gcHJvY2VzcyB0aGVtLgotICAgKiBAcGFyYW0gbm9kZSAgbm9kZS4KLSAgICogQHJldHVybiBhIGxpc3QuCi0gICAqIEB0aHJvd3MgV1NJRXhjZXB0aW9uIGlmIHRoZSBYTUwgc2NoZW1hIGZpbGUgaXMgbm90IGZvdW5kIG9yIGlmIGl0IGlzIG5vdCBmb3JtYXR0ZWQgY29ycmVjdGx5LgotICAgKi8KLSAgcHJpdmF0ZSBMaXN0IHByb2Nlc3NBbGxTY2hlbWEoTm9kZSBub2RlLCBTdHJpbmcgY3R4KSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLQlDbGFzc0xvYWRlciBjdXJyZW50TG9hZGVyID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKTsgICAKLQl0cnkKLQl7Ci0gICAJICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihYTUxTY2hlbWFQcm9jZXNzb3IuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKSk7ICAgCi0gICAgICAvLyBQcm9jZXNzIGFsbCBub2RlcwotICAgICAgd2hpbGUgKG5vZGUgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgLy8gSWYgdGhpcyBpcyBhbiBlbGVtZW50IG5vZGUsIHRoZW4gY29udGludWUKLSAgICAgICAgaWYgKE5vZGUuRUxFTUVOVF9OT0RFID09IG5vZGUuZ2V0Tm9kZVR5cGUoKSkKLSAgICAgICAgewotICAgICAgICAgIC8vIGlmIHhzZDpzY2hlbWEgZWxlbWVudCBpcyBmb3VuZCAtPiBwcm9jZXNzIHNjaGVtYQotICAgICAgICAgIGlmIChYTUxVdGlscy5lcXVhbHMobm9kZSwgRUxFTV9YU0RfU0NIRU1BKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBwcm9jZXNzU2NoZW1hKChFbGVtZW50KSBub2RlKTsKLQotICAgICAgICAgICAgLy8gUHJvY2VzcyBhbGwgY2hpbGRyZW4gb2YgdGhlIHNjaGVtYSBlbGVtZW50Ci0gICAgICAgICAgICBwcm9jZXNzQWxsU2NoZW1hKG5vZGUuZ2V0Rmlyc3RDaGlsZCgpLCBjdHgpOwotICAgICAgICAgIH0KLQotICAgICAgICAgIC8vIGlmIHhzZDppbXBvcnQgZWxlbWVudCBpcyBmb3VuZCAtPiBsb2FkIHNjaGVtYSBhbmQgcHJvY2VzcyBzY2hlbWEKLSAgICAgICAgICBlbHNlIGlmIChYTUxVdGlscy5lcXVhbHMobm9kZSwgRUxFTV9YU0RfSU1QT1JUKSkKLSAgICAgICAgICB7Ci0KLSAgICAgICAgICAgIEF0dHIgc2NoZW1hTG9jYXRpb24gPQotICAgICAgICAgICAgICBYTUxVdGlscy5nZXRBdHRyaWJ1dGUoKEVsZW1lbnQpIG5vZGUsIEFUVFJfWFNEX1NDSEVNQUxPQ0FUSU9OKTsKLQotICAgICAgICAgICAgLy8gVHJ5IHRvIHBhcnNlIGltcG9ydGVkIFhTRAotICAgICAgICAgICAgaWYgKHNjaGVtYUxvY2F0aW9uICE9IG51bGwgJiYgc2NoZW1hTG9jYXRpb24uZ2V0VmFsdWUoKSAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgIAkgIGlmICghc2NoZW1hTG9jYXRpb25zLmNvbnRhaW5zKHNjaGVtYUxvY2F0aW9uLmdldFZhbHVlKCkpKQotICAgICAgICAgIAkgIHsKLSAgICAgICAgICAJCXNjaGVtYUxvY2F0aW9ucy5hZGQoc2NoZW1hTG9jYXRpb24uZ2V0VmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgLy8gUmVhZCBhbmQgcFBhcnNlIHRoZSBYTUwgc2NoZW1hIGRvY3VtZW50Ci0gICAgICAgICAgICAgICAgICBEb2N1bWVudCBkb2N1bWVudCA9Ci0gICAgICAgICAgICAgICAgICAgIHBhcnNlWE1MRG9jdW1lbnRVUkwoCi0gICAgICAgICAgICAgICAgICAgICAgc2NoZW1hTG9jYXRpb24uZ2V0VmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICBjdHgsCi0gICAgICAgICAgICAgICAgICAgICAgVGVzdFV0aWxzLmdldFhNTFNjaGVtYUxvY2F0aW9uKCkpOwotCi0gICAgICAgICAgICAgICAgICBwcm9jZXNzQWxsU2NoZW1hKGRvY3VtZW50LmdldERvY3VtZW50RWxlbWVudCgpLAotICAgICAgICAgICAgICAgICAgICAgIFhNTFV0aWxzLmNyZWF0ZVVSTFN0cmluZyhzY2hlbWFMb2NhdGlvbi5nZXRWYWx1ZSgpLCBjdHgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2F0Y2ggKFdTSUV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGlmICh0aHJvd0V4Y2VwdGlvbikKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBjYXRjaCAoVGhyb3dhYmxlIHQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgLy8gTk9URTogQW4gZXhjZXB0aW9uIHdpbGwgb2NjdXIgaWYgdGhlIFhNTCBzY2hlbWEgZmlsZSBpcyBub3QgZm91bmQgb3IgaWYgaXQgaXMgbm90IGZvcm1hdHRlZCBjb3JyZWN0bHkKLSAgICAgICAgICAgICAgICAgIGlmICh0aHJvd0V4Y2VwdGlvbikKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdTSUV4Y2VwdGlvbih0LmdldE1lc3NhZ2UoKSwgdCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIGVsc2UgaXRlcmF0ZSBlbGVtZW50IHJlY3Vyc2l2ZWx5Ci0gICAgICAgICAgICBwcm9jZXNzQWxsU2NoZW1hKG5vZGUuZ2V0Rmlyc3RDaGlsZCgpLCBjdHgpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIEdldCBuZXh0IHNpYmlsaW5nCi0gICAgICAgIG5vZGUgPSBub2RlLmdldE5leHRTaWJsaW5nKCk7Ci0gICAgICB9Ci0KLSAgICB9Ci0gICAgZmluYWxseQotICAgIHsgCi0gICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihjdXJyZW50TG9hZGVyKTsKLSAgICB9ICAgIAotCi0KLSAgICAvLyBSZXR1cm4gbGlzdCBjcmVhdGVkIGJ5IHRoZSBjbGFzcyB0aGF0IGV4dGVuZHMgdGhpcyBjbGFzcwotICAgIHJldHVybiByZXR1cm5MaXN0OwotICB9Ci0KLSAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgcHJvY2Vzc1NjaGVtYShFbGVtZW50IGVsZW1lbnQpOwotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvc2NoZW1hL1hNTFNjaGVtYVZhbGlkYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL2NvcmUveG1sL3NjaGVtYS9YTUxTY2hlbWFWYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzZjYTEzMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvY29yZS94bWwvc2NoZW1hL1hNTFNjaGVtYVZhbGlkYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS54bWwuc2NoZW1hOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS51dGlsLlRlc3RVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUueG1sLlhNTFV0aWxzOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLWltcG9ydCBjb20uaWJtLndzZGwudXRpbC54bWwuRE9NMldyaXRlcjsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gdmFsaWRhdGUgYW4gWE1MIFNjaGVtYS4KLSAqIAotICogQGF1dGhvciBQZXRlciAgQnJpdHRlbmhhbSAocGV0ZXJickB1cy5pYm0uY29tKQotICogQHZlcnNpb24gMS4wLjEKLSAqLwotcHVibGljIGNsYXNzIFhNTFNjaGVtYVZhbGlkYXRvciBleHRlbmRzIFhNTFNjaGVtYVByb2Nlc3NvcgotewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWE1MTlNfUFJFRklYID0gInhtbG5zOiI7Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBYTUxTY2hlbWFWYWxpZGF0b3IuCi0gICAqIEBwYXJhbSBjb250ZXh0ICAgICAgIGRvY3VtZW50IGNvbnRleHQuIAotICAgKiBAcGFyYW0gZG9jdW1lbnRMaXN0ICBjYWNoZSBvZiBwcmV2aW91c2x5IHBhcnNlZCBkb2N1bWVudHMuCi0gICAqLwotICBwdWJsaWMgWE1MU2NoZW1hVmFsaWRhdG9yKFN0cmluZyBjb250ZXh0KQotICB7Ci0gICAgc3VwZXIoY29udGV4dCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzU2NoZW1hKEVsZW1lbnQgZWxlbWVudCkKLSAgewotICAgIE5hbWVkTm9kZU1hcCBhdHRyTGlzdDsKLQotICAgIEhhc2hNYXAgZWxlbWVudE1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgSGFzaE1hcCBuc01hcCA9IG5ldyBIYXNoTWFwKCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAvLyBHZXQgc2NoZW1hIGNvbnRlbnQgYXMgYSBzdHJpbmcKLSAgICAgIFN0cmluZyBzY2hlbWEgPSBET00yV3JpdGVyLm5vZGVUb1N0cmluZyhlbGVtZW50KTsKLQotICAgICAgLy8gR2V0IGxpc3Qgb2YgZWxlbWVudCBuYW1lc3BhY2VzCi0gICAgICBpZiAoKGF0dHJMaXN0ID0gZWxlbWVudC5nZXRBdHRyaWJ1dGVzKCkpICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIGFkZE5hbWVzcGFjZXMoYXR0ckxpc3QsIGVsZW1lbnRNYXAsIG51bGwpOwotICAgICAgfQotCi0gICAgICAvLyBJZiBlbGVtZW50TWFwIGRvZXMgbm90IGNvbnRhaW4gZW50cnkgZm9yIGl0J3Mgb3duIG5hbWVzcGFjZSwgdGhlbiBhZGQgaXQKLSAgICAgIGlmIChlbGVtZW50TWFwLmdldChYTUxOU19QUkVGSVggKyBlbGVtZW50LmdldFByZWZpeCgpKSA9PSBudWxsKQotICAgICAgewotICAgICAgICBlbGVtZW50TWFwLnB1dCgKLSAgICAgICAgICBYTUxOU19QUkVGSVggKyBlbGVtZW50LmdldFByZWZpeCgpLAotICAgICAgICAgIGVsZW1lbnQuZ2V0TmFtZXNwYWNlVVJJKCkpOwotICAgICAgfQotCi0gICAgICAvLyBHZXQgZmlyc3QgcGFyZW50IG5vZGUgYW5kIHRoZW4gcHJvY2VzcyBhbGwgb2YgdGhlbSB1bnRpbCB5b3UgaGl0IHRoZSB0b3Agb2YgdGhlIGRvY3VtZW50Ci0gICAgICBOb2RlIHBhcmVudE5vZGUgPSBlbGVtZW50LmdldFBhcmVudE5vZGUoKTsKLSAgICAgIHdoaWxlIChwYXJlbnROb2RlICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIC8vIE9ubHkgcHJvY2VzcyBFbGVtZW50IG5vZGVzCi0gICAgICAgIGlmIChwYXJlbnROb2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBHZXQgdGhlIGxpc3Qgb2YgYXR0cmlidXRlcyBmb3IgdGhlIHBhcmVudCBub2RlCi0gICAgICAgICAgYXR0ckxpc3QgPSBwYXJlbnROb2RlLmdldEF0dHJpYnV0ZXMoKTsKLQotICAgICAgICAgIC8vIElmIHRoZXJlIGFyZSBhdHRyaWJ1dGVzLCBsb29rIGZvciB0aGUgeG1sbnM6IGF0dHJpYnV0ZXMKLSAgICAgICAgICBpZiAoYXR0ckxpc3QgIT0gbnVsbCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBhZGROYW1lc3BhY2VzKGF0dHJMaXN0LCBuc01hcCwgZWxlbWVudE1hcCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcGFyZW50Tm9kZSA9IHBhcmVudE5vZGUuZ2V0UGFyZW50Tm9kZSgpOwotICAgICAgfQotCi0gICAgICAvLyBCdWlsZCBuYW1lc3BhY2UgbGlzdAotICAgICAgaWYgKG5zTWFwLnNpemUoKSA+IDApCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyBhdHRyOwotICAgICAgICBTdHJpbmcgbmFtZXNwYWNlTGlzdCA9ICIiOwotICAgICAgICBJdGVyYXRvciBpdGVyYXRvciA9IG5zTWFwLmtleVNldCgpLml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBhdHRyID0gKFN0cmluZykgaXRlcmF0b3IubmV4dCgpOwotICAgICAgICAgIG5hbWVzcGFjZUxpc3QgKz0gIiAiICsgYXR0ciArICI9XCIiICsgbnNNYXAuZ2V0KGF0dHIpICsgIlwiIjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEFkZCBuYW1lc3BhY2Ugc2V0dGluZ3MsIHNpbmNlIHRoZSBET00yV3JpdGVyIHdpbGwgbWlzcyBhbnkgdGhhdCBhcmUgdXNlZCBhcyBhdHRyaWJ1dGUgdmFsdWVzCi0gICAgICAgIGludCBpbmRleCA9IHNjaGVtYS5pbmRleE9mKCI+Iik7Ci0gICAgICAgIGlmIChpbmRleCA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmcgc3RhcnQgPSBzY2hlbWEuc3Vic3RyaW5nKDAsIGluZGV4KTsKLSAgICAgICAgICBTdHJpbmcgZW5kID0gc2NoZW1hLnN1YnN0cmluZyhpbmRleCk7Ci0KLSAgICAgICAgICBzY2hlbWEgPSBzdGFydCArIG5hbWVzcGFjZUxpc3QgKyBlbmQ7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8gU2NoZW1hIHZhbGlkYXRlIHRoZSBYTUwgc2NoZW1hIGRvY3VtZW50Ci0gICAgICBYTUxVdGlscy5wYXJzZVhNTChzY2hlbWEsIFRlc3RVdGlscy5nZXRYTUxTY2hlbWFMb2NhdGlvbigpKTsKLSAgICB9Ci0KLSAgICBjYXRjaCAoV1NJRXhjZXB0aW9uIHdlKQotICAgIHsKLSAgICAgIFRocm93YWJsZSB0ID0gd2UuZ2V0VGFyZ2V0RXhjZXB0aW9uKCk7Ci0gICAgICBpZiAodCAhPSBudWxsKQotICAgICAgewotICAgICAgICByZXR1cm5MaXN0LmFkZCh0LmdldE1lc3NhZ2UoKSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGFkZE5hbWVzcGFjZXMoTmFtZWROb2RlTWFwIGF0dHJMaXN0LCBNYXAgbnNNYXAsIE1hcCBlbGVtZW50TWFwKQotICB7Ci0gICAgTm9kZSBhdHRyOwotICAgIFN0cmluZyBub2RlTmFtZTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0ckxpc3QuZ2V0TGVuZ3RoKCk7IGkrKykKLSAgICB7Ci0gICAgICBhdHRyID0gYXR0ckxpc3QuaXRlbShpKTsKLQotICAgICAgLy8gR2V0IHRoZSBhdHRyaWJ1dGUgbm9kZSBuYW1lCi0gICAgICBub2RlTmFtZSA9IGF0dHIuZ2V0Tm9kZU5hbWUoKTsKLQotICAgICAgLy8gSWYgaXQgc3RhcnRzIHdpdGggeG1sbnM6LCB0aGVuIGRldGVybWluZSBpZiBpdCBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgbmFtZXNwYWNlcyAKLSAgICAgIGlmIChub2RlTmFtZS5zdGFydHNXaXRoKFhNTE5TX1BSRUZJWCkKLSAgICAgICAgJiYgKChlbGVtZW50TWFwID09IG51bGwKLSAgICAgICAgICB8fCAoZWxlbWVudE1hcCAhPSBudWxsICYmIGVsZW1lbnRNYXAuZ2V0KG5vZGVOYW1lKSA9PSBudWxsKSkpKQotICAgICAgewotICAgICAgICBpZiAobnNNYXAuZ2V0KG5vZGVOYW1lKSA9PSBudWxsKQotICAgICAgICAgIG5zTWFwLnB1dChub2RlTmFtZSwgYXR0ci5nZXROb2RlVmFsdWUoKSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9kb2N1bWVudC9Eb2N1bWVudEZhY3RvcnlJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvZG9jdW1lbnQvRG9jdW1lbnRGYWN0b3J5SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMGM0YmMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9kb2N1bWVudC9Eb2N1bWVudEZhY3RvcnlJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmRvY3VtZW50OwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydFdyaXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUucmVwb3J0LlJlcG9ydGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwucmVwb3J0Lk51bGxSZXBvcnRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwucmVwb3J0LlJlcG9ydE5vV3JpdGVySW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLnJlcG9ydC5TaW1wbGVSZXBvcnRlcjsKLQotLyoqCi0gKiBEb2N1bWVudEZhY3RvcnlJbXBsCi0gKiAKLSAqIEV4dGVuZHMgdGhlIFdTLUkgVGVzdCBUb29scyBkb2N1bWVudCBmYWN0b3J5IHRvIHNwZWNpZnkgc3BlY2lmaWMgUmVwb3J0Ci0gKiBhbmQgUmVwb3J0V3JpdGVyIGNsYXNzZXMgbmVlZGVkIGZvciBpbmNsdXNpb24gb2YgdGhlIHRvb2xzIGluIFdTQUQuCi0gKi8KLXB1YmxpYyBjbGFzcyBEb2N1bWVudEZhY3RvcnlJbXBsIGV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLmRvY3VtZW50LmltcGwuRG9jdW1lbnRGYWN0b3J5SW1wbAotewotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgRG9jdW1lbnRGYWN0b3J5SW1wbC4KLSAgICovCi0gIHB1YmxpYyBEb2N1bWVudEZhY3RvcnlJbXBsKCkKLSAgewotICAgIHN1cGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIGEgRG9jdW1lbnRXcml0ZXIuCi0gICAqLwotICBwdWJsaWMgUmVwb3J0V3JpdGVyIG5ld1JlcG9ydFdyaXRlcigpCi0gIHsKLSAgICAvLyBSZXR1cm4gaW1wbGVtZW50YXRpb24KLSAgICByZXR1cm4gbmV3IFJlcG9ydE5vV3JpdGVySW1wbCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSByZXBvcnQuCi0gICAqIEByZXR1cm4gbmV3bHkgY3JlYXRlZCByZXBvcnQuCi0gICAqLwotICBwdWJsaWMgUmVwb3J0IG5ld1JlcG9ydCgpCi0gIHsKLSAgICByZXR1cm4gbmV3IE51bGxSZXBvcnRJbXBsKCk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIGEgcmVwb3J0ZXIuCi0gICAqIEByZXR1cm4gbmV3bHkgY3JlYXRlZCByZXBvcnRlci4KLSAgICovCi0gIHB1YmxpYyBSZXBvcnRlciBuZXdSZXBvcnRlcihSZXBvcnQgcmVwb3J0LCBSZXBvcnRXcml0ZXIgcmVwb3J0V3JpdGVyKQotICB7Ci0gICAgcmV0dXJuIG5ldyBTaW1wbGVSZXBvcnRlcihyZXBvcnQsIHJlcG9ydFdyaXRlcik7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9yZXBvcnQvQXNzZXJ0aW9uRXJyb3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9yZXBvcnQvQXNzZXJ0aW9uRXJyb3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2UwZWM4Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvcmVwb3J0L0Fzc2VydGlvbkVycm9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSBwYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwucmVwb3J0OwotCi0vKioKLSAqIEFzc2VydGlvbkVycm9yCi0gKiAKLSAqIE9iamVjdCB0byBob2xkIGFuIGFzc2VydGlvbiBlcnJvciBnZW5lcmF0ZWQgYnkgdGhlIFdTLUkgVGVzdCBUb29scy4KLSAqIFByb3ZpZGVzIGFjY2VzcyB0byBhbGwgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBlcnJvciBpbmNsdWRpbmcgdGhlCi0gKiBpZCwgbWVzc2FnZSBhbmQgbG9jYXRpb24gaW4gdGhlIGZpbGUuCi0gKi8KLXB1YmxpYyBjbGFzcyBBc3NlcnRpb25FcnJvcgotewotCi0gIHByb3RlY3RlZCBTdHJpbmcgbWVzc2FnZTsKLSAgcHJvdGVjdGVkIFN0cmluZyBhc3NlcnRpb25pZDsKLSAgcHJvdGVjdGVkIGludCBjb2x1bW47Ci0gIHByb3RlY3RlZCBpbnQgbGluZTsKLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIGZvciBBc3NlcnRpb25FcnJvci4KLSAgICovCi0gIHB1YmxpYyBBc3NlcnRpb25FcnJvcigpCi0gIHsKLSAgICBtZXNzYWdlID0gYXNzZXJ0aW9uaWQgPSAiIjsKLSAgICBsaW5lID0gY29sdW1uID0gMDsKLSAgfQotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvciBmb3IgQXNzZXJ0aW9uRXJyb3IuCi0gICAqIEBwYXJhbSBpZCBhc3NlcnRpb24gaWQuCi0gICAqIEBwYXJhbSBtZXNzYWdlIGEgZXJyb3IgbWVzc2FnZS4KLSAgICogQHBhcmFtIGxpbmUgYSBsaW5lIG51bWJlci4KLSAgICogQHBhcmFtIGNvbHVtbiBhIGNvbHVtbiBudW1iZXIuCi0gICAqLwotICBwdWJsaWMgQXNzZXJ0aW9uRXJyb3IoU3RyaW5nIGlkLCBTdHJpbmcgbWVzc2FnZSwgaW50IGxpbmUsIGludCBjb2x1bW4pCi0gIHsKLSAgICB0aGlzLmFzc2VydGlvbmlkID0gaWQ7Ci0gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsKLSAgICB0aGlzLmxpbmUgPSBsaW5lOwotICAgIHRoaXMuY29sdW1uID0gY29sdW1uOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBzZXRBc3NlcnRpb25JRC4KLSAgICogQHBhcmFtIGlkIGFzc2VydGlvbiBpZC4KLSAgICogQHNlZSAjZ2V0QXNzZXJ0aW9uSUQKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEFzc2VydGlvbklEKFN0cmluZyBpZCkKLSAgewotICAgIGFzc2VydGlvbmlkID0gaWQ7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldEFzc2VydGlvbklELgotICAgKiBAcmV0dXJuIGFzc2VyaW9uIGlkLgotICAgKiBAc2VlICNzZXRBc3NlcnRpb25JRAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRBc3NlcnRpb25JRCgpCi0gIHsKLSAgICByZXR1cm4gYXNzZXJ0aW9uaWQ7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIHNldEVycm9yTWVzc2FnZS4KLSAgICogQHBhcmFtIG1lc3NhZ2UgYSBlcnJvciBtZXNzYWdlLgotICAgKiBAc2VlICNnZXRFcnJvck1lc3NhZ2UKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEVycm9yTWVzc2FnZShTdHJpbmcgbWVzc2FnZSkKLSAgewotICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldEVycm9yTWVzc2FnZS4KLSAgICogQHJldHVybiBlcnJvciBtZXNzYWdlLgotICAgKiBAc2VlICNzZXRFcnJvck1lc3NhZ2UKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RXJyb3JNZXNzYWdlKCkKLSAgewotICAgIHJldHVybiBtZXNzYWdlOwotICB9Ci0KLSAgLyoqCi0gICAqIE1ldGhvZCBzZXRMaW5lLgotICAgKiBAcGFyYW0gbGluZSBsaW5lIG51bWJlci4KLSAgICogQHNlZSAjZ2V0TGluZQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TGluZShpbnQgbGluZSkKLSAgewotICAgIHRoaXMubGluZSA9IGxpbmU7Ci0gIH0KLQotICAvKioKLSAgICogTWV0aG9kIGdldExpbmUuCi0gICAqIEByZXR1cm4gbGluZSBudW1iZXIuCi0gICAqIEBzZWUgI3NldExpbmUKLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0TGluZSgpCi0gIHsKLSAgICByZXR1cm4gbGluZTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2Qgc2V0Q29sdW1uLgotICAgKiBAcGFyYW0gY29sdW1uIGNvbHVtbiBudW1iZXIuCi0gICAqIEBzZWUgI2dldENvbHVtbgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0Q29sdW1uKGludCBjb2x1bW4pCi0gIHsKLSAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjsKLSAgfQotCi0gIC8qKgotICAgKiBNZXRob2QgZ2V0Q29sdW1uLgotICAgKiBAcmV0dXJuIGNvbHVtbiBudW1iZXIuCi0gICAqIEBzZWUgI3NldENvbHVtbgotICAgKi8KLSAgcHVibGljIGludCBnZXRDb2x1bW4oKQotICB7Ci0gICAgcmV0dXJuIGNvbHVtbjsKLSAgfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvcmVwb3J0L051bGxSZXBvcnRJbXBsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvcmVwb3J0L051bGxSZXBvcnRJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5YWU5OGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL3JlcG9ydC9OdWxsUmVwb3J0SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwucmVwb3J0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5pbXBsLlJlcG9ydEltcGw7Ci0KLS8qKgotICogTnVsbCByZXBvcnQuCi0gKgotICogQGF1dGhvciBKZWZmcmV5IExpdSAoamVmZmxpdUBjYS5pYm0uY29tKQotICovCi1wdWJsaWMgY2xhc3MgTnVsbFJlcG9ydEltcGwgZXh0ZW5kcyBSZXBvcnRJbXBsIGltcGxlbWVudHMgUmVwb3J0Ci17Ci0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LlJlcG9ydCNnZXRTdGFydFhNTFN0cmluZyhqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTdGFydFhNTFN0cmluZyhTdHJpbmcgbmFtZXNwYWNlTmFtZSkKLSAgewotICAgIHJldHVybiAiIjsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LlJlcG9ydCNnZXRFbmRYTUxTdHJpbmcoamF2YS5sYW5nLlN0cmluZykKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RW5kWE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKQotICB7Ci0gICAgcmV0dXJuICIiOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy53c2kudGVzdC5yZXBvcnQuUmVwb3J0I2dldEVycm9yWE1MU3RyaW5nKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEVycm9yWE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lLCBTdHJpbmcgZXJyb3JEZXRhaWwpCi0gIHsKLSAgICByZXR1cm4gIiI7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LmRvY3VtZW50LkRvY3VtZW50RWxlbWVudCN0b1hNTFN0cmluZyhqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSBwdWJsaWMgU3RyaW5nIHRvWE1MU3RyaW5nKFN0cmluZyBuYW1lc3BhY2VOYW1lKQotICB7Ci0gICAgcmV0dXJuICIiOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL3JlcG9ydC9SZXBvcnROb1dyaXRlckltcGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC9yZXBvcnQvUmVwb3J0Tm9Xcml0ZXJJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmMzcyNWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL3JlcG9ydC9SZXBvcnROb1dyaXRlckltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwucmVwb3J0OwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLldyaXRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci0KLS8qKgotICogV1MtSSBjb25mb3JtYW5jZSB0ZXN0IFJlcG9ydFdyaXRlciBmb3Igd3NpIHBsdWdpbi4KLSAqIFRoaXMgUmVwb3J0V3JpdGVyIHdyaXRlcyBub3RoaW5nIHNvIG5vIHJlcG9ydCBmaWxlIHdpbGwgYmUgY3JlYXRlZC4KLSAqLwotcHVibGljIGNsYXNzIFJlcG9ydE5vV3JpdGVySW1wbCBpbXBsZW1lbnRzIG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuUmVwb3J0V3JpdGVyCi17Ci0KLSAgLyoqCi0gICAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCNPYmplY3QoKQotICAgKi8KLSAgcHVibGljIFJlcG9ydE5vV3JpdGVySW1wbCgpCi0gIHsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRXcml0ZXIjZ2V0RG9jdW1lbnQoKQotICAgKi8KLSAgcHVibGljIERvY3VtZW50IGdldERvY3VtZW50KCkgdGhyb3dzIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uCi0gIHsKLSAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRXcml0ZXIjc2V0V3JpdGVyKFN0cmluZykKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFdyaXRlcihTdHJpbmcgZG9jdW1lbnRMb2NhdGlvbikgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRXcml0ZXIjd3JpdGUoUmVhZGVyKQotICAgKi8KLSAgcHVibGljIHZvaWQgd3JpdGUoUmVhZGVyIHJlYWRlcikgdGhyb3dzIFdTSUV4Y2VwdGlvbiwgSWxsZWdhbFN0YXRlRXhjZXB0aW9uCi0gIHsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRXcml0ZXIjd3JpdGUoUmVhZGVyLCBXcml0ZXIpCi0gICAqLwotICBwdWJsaWMgdm9pZCB3cml0ZShSZWFkZXIgcmVhZGVyLCBXcml0ZXIgd3JpdGVyKSB0aHJvd3MgV1NJRXhjZXB0aW9uCi0gIHsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LlJlcG9ydFdyaXRlciN3cml0ZShSZXBvcnQpCi0gICAqLwotICBwdWJsaWMgdm9pZCB3cml0ZShSZXBvcnQgcmVwb3J0KSB0aHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uCi0gIHsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LlJlcG9ydFdyaXRlciN3cml0ZShSZXBvcnQsIFdyaXRlcikKLSAgICovCi0gIHB1YmxpYyB2b2lkIHdyaXRlKFJlcG9ydCByZXBvcnQsIFdyaXRlciB3cml0ZXIpCi0gIHsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QuZG9jdW1lbnQuRG9jdW1lbnRXcml0ZXIjY2xvc2UoKQotICAgKi8KLSAgcHVibGljIHZvaWQgY2xvc2UoKSB0aHJvd3MgV1NJRXhjZXB0aW9uLCBJbGxlZ2FsU3RhdGVFeGNlcHRpb24KLSAgewotICB9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvcmVwb3J0L1NpbXBsZVJlcG9ydGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvcmVwb3J0L1NpbXBsZVJlcG9ydGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzNjVlNDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL2ludGVybmFsL3JlcG9ydC9TaW1wbGVSZXBvcnRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5yZXBvcnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmNvcmUuV1NJRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5yZXBvcnQuQXJ0aWZhY3RSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5Bc3NlcnRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5SZXBvcnRXcml0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnJlcG9ydC5pbXBsLkRlZmF1bHRSZXBvcnRlcjsKLQotLyoqCi0gKiBUaGlzIHJlcG9ydGVyIGRvZXMgbm90IHdyaXRlIGFydGlmYWN0cyBhbmQgYXNzZXJ0aW9ucwotICovCi1wdWJsaWMgY2xhc3MgU2ltcGxlUmVwb3J0ZXIgZXh0ZW5kcyBEZWZhdWx0UmVwb3J0ZXIKLXsKLSAgcHVibGljIFNpbXBsZVJlcG9ydGVyKFJlcG9ydCByZXBvcnQsIFJlcG9ydFdyaXRlciByZXBvcnRXcml0ZXIpCi0gIHsKLSAgICBzdXBlcihyZXBvcnQsIHJlcG9ydFdyaXRlcik7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLndzaS50ZXN0LnJlcG9ydC5CdWlsZFJlcG9ydCNhZGRBcnRpZmFjdFJlZmVyZW5jZShvcmcud3NpLnRlc3QucmVwb3J0LkFydGlmYWN0UmVmZXJlbmNlKQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkQXJ0aWZhY3RSZWZlcmVuY2UoQXJ0aWZhY3RSZWZlcmVuY2UgYXJ0aWZhY3RSZWZlcmVuY2UpCi0gICAgdGhyb3dzIFdTSUV4Y2VwdGlvbgotICB7Ci0gICAgcmVwb3J0LmFkZEFydGlmYWN0UmVmZXJlbmNlKGFydGlmYWN0UmVmZXJlbmNlKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcud3NpLnRlc3QucmVwb3J0LkJ1aWxkUmVwb3J0I2FkZEFzc2VydGlvblJlc3VsdChvcmcud3NpLnRlc3QucmVwb3J0LkFzc2VydGlvblJlc3VsdCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEFzc2VydGlvblJlc3VsdChBc3NlcnRpb25SZXN1bHQgYXNzZXJ0aW9uUmVzdWx0KQotICAgIHRocm93cyBXU0lFeGNlcHRpb24KLSAgewotICAgIHJlcG9ydC5hZGRBc3NlcnRpb25SZXN1bHQoYXNzZXJ0aW9uUmVzdWx0KTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC92YWxpZGF0ZS93c2RsL1dTRExWYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LndzaS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS9pbnRlcm5hbC92YWxpZGF0ZS93c2RsL1dTRExWYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTNhN2NiOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvaW50ZXJuYWwvdmFsaWRhdGUvd3NkbC9XU0RMVmFsaWRhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzODkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC52YWxpZGF0ZS53c2RsOwotaW1wb3J0IGphdmEudGV4dC5NZXNzYWdlRm9ybWF0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuUG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBqYXZheC53c2RsLldTRExFeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLklWYWxpZGF0aW9uSW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLklXU0RMVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuVmFsaWRhdGlvbkluZm9JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuZXhjZXB0aW9uLlZhbGlkYXRlV1NETEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnJlc29sdmVyLlVSSVJlc29sdmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudXRpbC5NZXNzYWdlR2VuZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLldTREwxMVZhbGlkYXRpb25JbmZvSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS5XU0RMRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuV1NETFJlYWRlckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5XU0lQcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLldTSVRlc3RUb29sc0VjbGlwc2VQcm9wZXJ0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuV1NJVGVzdFRvb2xzUHJvcGVydGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmFuYWx5emVyLldTRExBbmFseXplcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmFuYWx5emVyLldTSUFuYWx5emVyRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuY29yZS5XU0lDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5yZXBvcnQuQXNzZXJ0aW9uRXJyb3I7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci0KLS8qKgotICogVGhlIFdTSSB2YWxpZGF0b3IgcGx1Z3MgaW50byB0aGUgV1NETCB2YWxpZGF0b3IgdG8gcHJvdmlkZQotICogdmFsaWRhdGlvbiBmb3IgYSBXU0RMIGRvY3VtZW50IHdpdGggcmVzcGVjdCB0byB0aGUgV1MtSSBCYXNpYyBQcm9maWxlIChjdXJyZW50bHkgMS4wKS4KLSAqIFRoaXMgY2xhc3MgYWN0cyBhcyBhbiBicmlkZ2UgYmV0d2VlbiB0aGUgV1MtSSB0b29scyBhbmQgdGhlIFdTREwgVmFsaWRhdG9yLgotICogCi0gKiBAYXV0aG9yIExhd3JlbmNlIE1hbmRlbCAobG1hbmRlbEBjYS5pYm0uY29tKQotICogQGF1dGhvciBXYWppaGEgUmVobWFuCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMVmFsaWRhdG9yIGltcGxlbWVudHMgSVdTRExWYWxpZGF0b3IKLXsKLSAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBfRVhDX1VOQUJMRV9UT19WQUxJREFURV9XU0kgPSAiX0VYQ19VTkFCTEVfVE9fVkFMSURBVEVfV1NJIjsKLQotICAvLyBpbmRpY2F0aW9ucyBmb3IgdHlwZXMgb2YgZXJyb3JzCi0gIHByb3RlY3RlZCBmaW5hbCBpbnQgRVJST1IgPSAyOwotICBwcm90ZWN0ZWQgZmluYWwgaW50IFdBUk5JTkcgPSAxOwotICAKLSAgcHJvdGVjdGVkIFJlc291cmNlQnVuZGxlIHJlc291cmNlYnVuZGxlID0gbnVsbDsKLSAgcHJvdGVjdGVkIGJvb2xlYW4gd3NpVmFsaWQgPSBmYWxzZTsKLQotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqLwotICBwdWJsaWMgV1NETFZhbGlkYXRvcigpCi0gIHsKLQlyZXNvdXJjZWJ1bmRsZSA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZSgid3NpdmFsaWRhdGUiLCBMb2NhbGUuZ2V0RGVmYXVsdCgpKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c2RsLnZhbGlkYXRlLklXU0RMVmFsaWRhdG9yI3ZhbGlkYXRlKG9yZy53M2MuZG9tLkRvY3VtZW50LCBvcmcuZWNsaXBzZS53c2RsLnZhbGlkYXRlLlZhbGlkYXRpb25JbmZvKQotICAgKi8KLSAgcHVibGljIHZvaWQgdmFsaWRhdGUoRG9jdW1lbnQgZG9tTW9kZWwsIElWYWxpZGF0aW9uSW5mbyB2YWxJbmZvKSB0aHJvd3MgVmFsaWRhdGVXU0RMRXhjZXB0aW9uCi0gIHsKLQlib29sZWFuIHdpdGhBdHRhY2htZW50cyA9IGZhbHNlOwotCWJvb2xlYW4gd2l0aEJhc2ljID0gZmFsc2U7Ci0JT2JqZWN0IGF0dFZhbHVlID0gdmFsSW5mby5nZXRBdHRyaWJ1dGUoImh0dHA6Ly93cy1pLm9yZy9wcm9maWxlcy9CYXNpY1dpdGhBdHRhY2htZW50cy9Db21wbGlhbmNlTGV2ZWwiKTsKLQlpZihhdHRWYWx1ZSA9PSBudWxsKQotCXsKLQkgIGF0dFZhbHVlID0gdmFsSW5mby5nZXRBdHRyaWJ1dGUoImh0dHA6Ly93cy1pLm9yZy9wcm9maWxlcy9CYXNpYy9Db21wbGlhbmNlTGV2ZWwiKTsKLSAgIAkgIGlmKGF0dFZhbHVlICE9IG51bGwpCi0JICB7Ci0JICAgIHdpdGhCYXNpYyA9IHRydWU7Ci0JICB9Ci0JfQotCWVsc2UKLQl7Ci0JICB3aXRoQXR0YWNobWVudHMgPSB0cnVlOwotCX0KLQlTdHJpbmcgd3NpTGV2ZWwgPSBXU0lUZXN0VG9vbHNQcm9wZXJ0aWVzLldBUk5fTk9OX1dTSTsKLQlXU0lQcmVmZXJlbmNlcyB3c2lQcmVmZXJlbmNlID0gbnVsbDsKLQlTdHJpbmcgdXJpID0gdmFsSW5mby5nZXRGaWxlVVJJKCk7Ci0JaWYoYXR0VmFsdWUgIT0gbnVsbCkKLQl7Ci0JICBTdHJpbmcgdmFsdWUgPSAoU3RyaW5nKWF0dFZhbHVlOwotCSAgaWYodmFsdWUuZXF1YWxzKCJJR05PUkUiKSkKLQkgIHsKLQkgIAl3c2lMZXZlbCA9IFdTSVRlc3RUb29sc1Byb3BlcnRpZXMuSUdOT1JFX05PTl9XU0k7Ci0JICB9Ci0JICBlbHNlIGlmKHZhbHVlLmVxdWFscygiUkVRVUlSRSIpKQotCSAgewotCSAgIAl3c2lMZXZlbCA9IFdTSVRlc3RUb29sc1Byb3BlcnRpZXMuU1RPUF9OT05fV1NJOwotCSAgfQotCX0KLQllbHNlIAotCXsKLQkgIGlmKFdTSVRlc3RUb29sc1Byb3BlcnRpZXMuZ2V0RWNsaXBzZUNvbnRleHQoKSkKLQkgIHsKLQkJd3NpUHJlZmVyZW5jZSA9IFdTSVRlc3RUb29sc0VjbGlwc2VQcm9wZXJ0aWVzLmNoZWNrV1NJUHJlZmVyZW5jZXModXJpKTsKLQkJd3NpTGV2ZWwgPSB3c2lQcmVmZXJlbmNlLmdldENvbXBsaWFuY2VMZXZlbCgpOwotCSAgfQotCSAgZWxzZQotCSAgewotCQl3c2lQcmVmZXJlbmNlID0gV1NJVGVzdFRvb2xzUHJvcGVydGllcy5jaGVja1dTSVByZWZlcmVuY2VzKHVyaSk7Ci0JCXdzaUxldmVsID0gd3NpUHJlZmVyZW5jZS5nZXRDb21wbGlhbmNlTGV2ZWwoKTsKLQkgIH0KLQl9Ci0JLy8gSWYgd2UgYXJlIGlnbm9yaW5nIFdTLUkgdGhlbiBkb24ndCBydW4gdGhlIHRlc3RzLgotCWlmKHdzaUxldmVsLmVxdWFscyhXU0lUZXN0VG9vbHNQcm9wZXJ0aWVzLklHTk9SRV9OT05fV1NJKSkKLQl7Ci0JICByZXR1cm47Ci0JfQotCSAgICAKLSAgCXdzaVZhbGlkID0gdHJ1ZTsKLSAgCURlZmluaXRpb24gZGVmaW5pdGlvbiA9IG51bGw7Ci0JYm9vbGVhbiBoYXNBbmFseXplckNvbmZpZyA9IGZhbHNlOwotICAJdHJ5Ci0gIAl7Ci0gICAgICAvL1dTRExGYWN0b3J5IGZhY3RvcnkgPSBXU0RMRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotIAkgIFZhbGlkYXRpb25JbmZvSW1wbCB2YWxpID0gbmV3IFZhbGlkYXRpb25JbmZvSW1wbCh2YWxJbmZvLmdldEZpbGVVUkkoKSwgbmV3IE1lc3NhZ2VHZW5lcmF0b3IocmVzb3VyY2VidW5kbGUpKTsKLSAgCSAgdmFsaS5zZXRVUklSZXNvbHZlcigoVVJJUmVzb2x2ZXIpdmFsSW5mby5nZXRVUklSZXNvbHZlcigpKTsKLSAgICAgIFdTRExSZWFkZXJJbXBsIHJlYWRlciA9IG5ldyBXU0RMUmVhZGVySW1wbChuZXcgV1NETDExVmFsaWRhdGlvbkluZm9JbXBsKHZhbGkpKTsKLSAgICAgIFdTRExEb2N1bWVudFtdIGRvY3MgPSByZWFkZXIucmVhZFdTREwodXJpLCBkb21Nb2RlbCk7Ci0gICAgICBpbnQgbnVtZG9jcyA9IGRvY3MubGVuZ3RoOwotICAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bWRvY3M7IGkrKykKLSAgICAgIHsKLSAgICAgICAgV1NETERvY3VtZW50IHRlbXBEb2MgPSBkb2NzW2ldOwotCQlpZih0ZW1wRG9jLmdldERlZmluaXRpb24oKS5nZXREb2N1bWVudEJhc2VVUkkoKS5lcXVhbHModmFsSW5mby5nZXRGaWxlVVJJKCkpKQotICAgICAgICB7Ci0gICAgICAgICAgZGVmaW5pdGlvbiA9IHRlbXBEb2MuZ2V0RGVmaW5pdGlvbigpOyAgCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgCX0KLSAgCWNhdGNoKFdTRExFeGNlcHRpb24gZSkKLSAgCXsKLSAgCSAgdGhyb3cgbmV3IFZhbGlkYXRlV1NETEV4Y2VwdGlvbihNZXNzYWdlRm9ybWF0LmZvcm1hdChyZXNvdXJjZWJ1bmRsZS5nZXRTdHJpbmcoX0VYQ19VTkFCTEVfVE9fVkFMSURBVEVfV1NJKSwgbmV3IE9iamVjdFtdIHsgdXJpIH0pKTsKLSAgCX0KLQkgICAgCi0gICAgaWYgKGRlZmluaXRpb24gIT0gbnVsbCAmJiB2YWxJbmZvICE9IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0KLSAgICAgIC8vIGdldCBhbGwgdGhlIGNvbGxlY3Rpb25zIHdlIG1heSBuZWVkIHRvIHZhbGlkYXRlCi0gICAgICBDb2xsZWN0aW9uIHNlcnZpY2VzID0gZGVmaW5pdGlvbi5nZXRTZXJ2aWNlcygpLnZhbHVlcygpOwotICAgICAgQ29sbGVjdGlvbiBiaW5kaW5ncyA9IGRlZmluaXRpb24uZ2V0QmluZGluZ3MoKS52YWx1ZXMoKTsKLSAgICAgIENvbGxlY3Rpb24gcG9ydFR5cGVzID0gZGVmaW5pdGlvbi5nZXRQb3J0VHlwZXMoKS52YWx1ZXMoKTsKLSAgICAgIENvbGxlY3Rpb24gbWVzc2FnZXMgPSBkZWZpbml0aW9uLmdldE1lc3NhZ2VzKCkudmFsdWVzKCk7Ci0KLSAgICAgIFdTRExBbmFseXplciB3c2RsQW5hbHl6ZXI7Ci0JICBpZih3aXRoQXR0YWNobWVudHMpCi0JICB7Ci0JICAJV1NJUHJlZmVyZW5jZXMgcHJlZmVyZW5jZXMgPSBuZXcgV1NJUHJlZmVyZW5jZXMoKTsKLSAgIAkgICAgcHJlZmVyZW5jZXMuc2V0Q29tcGxpYW5jZUxldmVsKHdzaUxldmVsKTsKLQkgICAgcHJlZmVyZW5jZXMuc2V0VEFERmlsZShXU0lUZXN0VG9vbHNQcm9wZXJ0aWVzLkFQX0FTU0VSVElPTl9GSUxFKTsKLQkgICAgd3NkbEFuYWx5emVyID0gbmV3IFdTRExBbmFseXplcih1cmksIHByZWZlcmVuY2VzKTsKLQkgIH0KLQkgIGVsc2UgaWYod2l0aEJhc2ljKQotCSAgewotCSAgCVdTSVByZWZlcmVuY2VzIHByZWZlcmVuY2VzID0gbmV3IFdTSVByZWZlcmVuY2VzKCk7Ci0JCXByZWZlcmVuY2VzLnNldENvbXBsaWFuY2VMZXZlbCh3c2lMZXZlbCk7CQotCSAgICBwcmVmZXJlbmNlcy5zZXRUQURGaWxlKFdTSVRlc3RUb29sc1Byb3BlcnRpZXMuU1NCUF9BU1NFUlRJT05fRklMRSk7Ci0JICAgIHdzZGxBbmFseXplciA9IG5ldyBXU0RMQW5hbHl6ZXIodXJpLCBwcmVmZXJlbmNlcyk7Ci0JICB9Ci0JICBlbHNlIGlmKHdzaVByZWZlcmVuY2UgIT0gbnVsbCkKLQkgIHsKLQkJd3NkbEFuYWx5emVyID0gbmV3IFdTRExBbmFseXplcih1cmksIHdzaVByZWZlcmVuY2UpOwotCSAgfQotCSAgZWxzZSB7Ci0JCS8vIGRlZmF1bHQgcHJlZmVyZW5jZSBzZXR0aW5nCi0JICAJd3NkbEFuYWx5emVyID0gbmV3IFdTRExBbmFseXplcih1cmkpOwotCSAgfQotCi0JICAvLyBUaGUgV1MtSSBjb25mb3JtYW5jZSB0b29scyByZXF1aXJlIHRoYXQgZWFjaCBzZXJ2aWNlIGJlIGFuYWx5emVkIHNlcGFyYXRlbHkuCi0JICAvLyBHZXQgYWxsIHRoZSBzZXJ2aWNlcyBhbmQgYW5hbHl6ZSB0aGVtLgotCSAgaWYgKHNlcnZpY2VzICE9IG51bGwgJiYgIXNlcnZpY2VzLmlzRW1wdHkoKSkKLQkgIHsKLQkgICAgSXRlcmF0b3Igc2VydmljZUl0ZXJhdG9yID0gc2VydmljZXMuaXRlcmF0b3IoKTsKLQotCSAgICB3aGlsZSAoc2VydmljZUl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIFNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKSBzZXJ2aWNlSXRlcmF0b3IubmV4dCgpOwotCi0gICAgICAgICAgU3RyaW5nIHNlcnZpY2VuYW1lID0gc2VydmljZS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotCi0gICAgICAgICAgQ29sbGVjdGlvbiBwb3J0cyA9IHNlcnZpY2UuZ2V0UG9ydHMoKS52YWx1ZXMoKTsKLSAgICAgICAgICBpZiAocG9ydHMgIT0gbnVsbCAmJiAhcG9ydHMuaXNFbXB0eSgpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFRoZSBXUy1JIHRvb2xzIG11c3QgYmUgY2FsbGVkIG9uY2UgZm9yIGVhY2ggcG9ydCB3aXRoaW4gZWFjaCBzZXJ2aWNlLgotICAgICAgICAgICAgSXRlcmF0b3IgcG9ydEl0ZXJhdG9yID0gcG9ydHMuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgIHdoaWxlIChwb3J0SXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBQb3J0IHBvcnQgPSAoUG9ydCkgcG9ydEl0ZXJhdG9yLm5leHQoKTsKLQotICAgICAgICAgICAgICB0cnkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHdzZGxBbmFseXplci5hZGRDb25maWd1cmF0aW9uVG9UZXN0KHNlcnZpY2VuYW1lLCBuYW1lc3BhY2UsIHBvcnQuZ2V0TmFtZSgpLCBXU0RMQW5hbHl6ZXIuUE9SVCk7Ci0JCQkJaGFzQW5hbHl6ZXJDb25maWcgPSB0cnVlOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGNhdGNoIChXU0lBbmFseXplckV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gVE9ETzogQWRkIGNvZGUgdG8gbG9nIGVycm9yIAotICAgICAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJleGNlcHRpb24gIiArIGUpOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIC8vIHZhbGlkYXRlIGF0IHRoZSBiaW5kaW5nIGxldmVsIC0gY2hlY2sgZm9yIGV2ZXJ5IGJpbmRpbmcKLSAgICAgIGVsc2UgaWYgKGJpbmRpbmdzICE9IG51bGwgJiYgIWJpbmRpbmdzLmlzRW1wdHkoKSkKLSAgICAgIHsKLSAgICAgICAgSXRlcmF0b3IgYmluZGluZ0l0ZXJhdG9yID0gYmluZGluZ3MuaXRlcmF0b3IoKTsKLQotICAgICAgICB3aGlsZSAoYmluZGluZ0l0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKSBiaW5kaW5nSXRlcmF0b3IubmV4dCgpOwotCi0gICAgICAgICAgU3RyaW5nIGJpbmRpbmduYW1lID0gYmluZGluZy5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOwotICAgICAgICAgIHRyeQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHdzZGxBbmFseXplci5hZGRDb25maWd1cmF0aW9uVG9UZXN0KG51bGwsIG5hbWVzcGFjZSwgYmluZGluZ25hbWUsIFdTRExBbmFseXplci5CSU5ESU5HKTsKLQkJCWhhc0FuYWx5emVyQ29uZmlnID0gdHJ1ZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKFdTSUFuYWx5emVyRXhjZXB0aW9uIGUpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gVE9ETzogQWRkIGNvZGUgdG8gbG9nIGVycm9yIAotICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oImV4Y2VwdGlvbiAiICsgZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvLyB2YWxpZGF0ZSBhdCB0aGUgcG9ydFR5cGUgbGV2ZWwgLSBjaGVjayBmb3IgZXZlcnkgcG9ydFR5cGUKLSAgICAgIGVsc2UgaWYgKHBvcnRUeXBlcyAhPSBudWxsICYmICFwb3J0VHlwZXMuaXNFbXB0eSgpKQotICAgICAgewotICAgICAgICBJdGVyYXRvciBwb3J0VHlwZUl0ZXJhdG9yID0gcG9ydFR5cGVzLml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChwb3J0VHlwZUl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgICAgewotICAgICAgICAgIFBvcnRUeXBlIHBvcnRUeXBlID0gKFBvcnRUeXBlKSBwb3J0VHlwZUl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgICBTdHJpbmcgcG9ydFR5cGVuYW1lID0gcG9ydFR5cGUuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLSAgICAgICAgICB0cnkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB3c2RsQW5hbHl6ZXIuYWRkQ29uZmlndXJhdGlvblRvVGVzdChudWxsLCBuYW1lc3BhY2UsIHBvcnRUeXBlbmFtZSwgV1NETEFuYWx5emVyLlBPUlRUWVBFKTsKLQkJCWhhc0FuYWx5emVyQ29uZmlnID0gdHJ1ZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2F0Y2ggKFdTSUFuYWx5emVyRXhjZXB0aW9uIGUpCi0gICAgICAgICAgewotICAgICAgICAgICAgLy8gVE9ETzogQWRkIGNvZGUgdG8gbG9nIGVycm9yIAotICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oImV4Y2VwdGlvbiAiICsgZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvLyB2YWxpZGF0ZSBhdCB0aGUgbWVzc2FnZSBsZXZlbCAtIGNoZWNrIGZvciBldmVyeSBtZXNzYWdlCi0gICAgICBlbHNlIGlmIChtZXNzYWdlcyAhPSBudWxsICYmICFtZXNzYWdlcy5pc0VtcHR5KCkpCi0gICAgICB7Ci0gICAgICAgIEl0ZXJhdG9yIG1lc3NhZ2VJdGVyYXRvciA9IG1lc3NhZ2VzLml0ZXJhdG9yKCk7Ci0KLSAgICAgICAgd2hpbGUgKG1lc3NhZ2VJdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSAoTWVzc2FnZSkgbWVzc2FnZUl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgICBTdHJpbmcgbWVzc2FnZW5hbWUgPSBtZXNzYWdlLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgICAgICAgdHJ5Ci0gICAgICAgICAgewotICAgICAgICAgICAgd3NkbEFuYWx5emVyLmFkZENvbmZpZ3VyYXRpb25Ub1Rlc3QobnVsbCwgbmFtZXNwYWNlLCBtZXNzYWdlbmFtZSwgV1NETEFuYWx5emVyLk1FU1NBR0UpOwotCQkJaGFzQW5hbHl6ZXJDb25maWcgPSB0cnVlOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXRjaCAoV1NJQW5hbHl6ZXJFeGNlcHRpb24gZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvLyBUT0RPOiBBZGQgY29kZSB0byBsb2cgZXJyb3IgCi0gICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiZXhjZXB0aW9uICIgKyBlKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHRyeQotICAgICAgewotICAgICAgICAvLyBvbmx5IHJ1biB0aGUgYW5hbHl6ZXIgaWYgdGhlcmUgaXMgc29tZXRoaW5nIHRvIGNoZWNrCi0JCWlmKGhhc0FuYWx5emVyQ29uZmlnKQotCQl7Ci0JCSAgLy8gcnVuIHRoZSBjb25mb3JtYW5jZSBjaGVjayBhbmQgYWRkIGVycm9ycyBhbmQgd2FybmluZ3MgYXMgbmVlZGVkCi0JCSAgd3NkbEFuYWx5emVyLnZhbGlkYXRlQ29uZm9ybWFuY2UoKTsKLQkJCSAgCi0JCSAgLy8gSWYgdGhlIGxldmVsIGlzIHN1Z2dlc3QgYWxsIGVycm9ycyBzaG91bGQgYmUgcmVwb3J0ZWQgYXMgd2FybmluZ3MuCi0JCSAgaWYod3NkbEFuYWx5emVyLmdldFdTSVByZWZlcmVuY2VzKCkuZ2V0Q29tcGxpYW5jZUxldmVsKCkuZXF1YWxzKFdTSVRlc3RUb29sc1Byb3BlcnRpZXMuV0FSTl9OT05fV1NJKSkKLQkJICB7Ci0JCSAgICBhZGRXYXJuaW5ncyh3c2RsQW5hbHl6ZXIuZ2V0QXNzZXJ0aW9uRXJyb3JzKCksIHZhbEluZm8pOwotCQkgIH0KLQkJICBlbHNlCi0JCSAgewotCQkgICAgYWRkRXJyb3JzKHdzZGxBbmFseXplci5nZXRBc3NlcnRpb25FcnJvcnMoKSwgdmFsSW5mbyk7Ci0JCSAgfQotCQkgIGFkZFdhcm5pbmdzKHdzZGxBbmFseXplci5nZXRBc3NlcnRpb25XYXJuaW5ncygpLCB2YWxJbmZvKTsKLQkJfQotICAgICAgfQotCSAgY2F0Y2ggKFdTSUFuYWx5emVyRXhjZXB0aW9uIGUpCi0JICB7Ci0JCS8vIFRPRE86IEFkZCBjb2RlIHRvIGxvZyBlcnJvciAKLQkgICAgdmFsSW5mby5hZGRXYXJuaW5nKFdTSUNvbnN0YW50cy5XU0lfUFJFRklYICsgIkEgcHJvYmxlbSBvY2N1cmVkIHdoaWxlIHJ1bm5pbmcgdGhlIFdTLUkgV1NETCBjb25mb3JtYW5jZSBjaGVjazogIiArIGUsIDEsIDAsIHZhbEluZm8uZ2V0RmlsZVVSSSgpKTsKLQkgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQWRkIGVycm9yIG1lc3NhZ2VzIHRvIHRoZSB2YWxpZGF0aW9uY29udHJvbGxlci4KLSAgICogCi0gICAqIEBwYXJhbSBlcnJvcnMgVGhlIGxpc3Qgb2YgZXJyb3JzIHRvIGFkZC4KLSAgICogQHBhcmFtIHZhbEluZm8gVGhlIG9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSB2YWxpZGF0aW9uIGluZm9ybWF0aW9uLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgYWRkRXJyb3JzKExpc3QgZXJyb3JzLCBJVmFsaWRhdGlvbkluZm8gdmFsSW5mbykKLSAgewotICAgIHJlcG9ydFByb2JsZW1zKGVycm9ycywgdmFsSW5mbywgRVJST1IpOwotICB9Ci0KLSAgLyoqCi0gICAqIEFkZCB3YXJuaW5nIG1lc3NhZ2VzIHRvIHRoZSB2YWxpZGF0aW9uY29udHJvbGxlci4KLSAgICogCi0gICAqIEBwYXJhbSB3YXJuaW5ncyBUaGUgbGlzdCBvZiB3YXJuaW5ncyB0byBhZGQuCi0gICAqIEBwYXJhbSB2YWxJbmZvIFRoZSBvYmplY3QgdGhhdCBjb250YWlucyB0aGUgdmFsaWRhdGlvbiBpbmZvcm1hdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGFkZFdhcm5pbmdzKExpc3Qgd2FybmluZ3MsIElWYWxpZGF0aW9uSW5mbyB2YWxJbmZvKQotICB7Ci0gICAgcmVwb3J0UHJvYmxlbXMod2FybmluZ3MsIHZhbEluZm8sIFdBUk5JTkcpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlcG9ydCB0aGUgcHJvYmxlbXMgc3BlY2lmaWVkIGZvciB0aGUgZ2l2ZW4gdHlwZSB0byB0aGUgdmFsaWRhdGlvbmNvbnRyb2xsZXIuCi0gICAqIAotICAgKiBAcGFyYW0gcHJvYmxlbXMgVGhlIHByb2JsZW1zIHRvIHJlcG9ydC4KLSAgICogQHBhcmFtIHZhbEluZm8gVGhlIG9iamVjdCB0byByZXBvcnQgdGhlIHByb2JsZW1zIHRvLgotICAgKiBAcGFyYW0gdHlwZSBUaGUgdHlwZSBvZiBtZXNzYWdlcyB0byBhZGQuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCByZXBvcnRQcm9ibGVtcyhMaXN0IHByb2JsZW1zLCBJVmFsaWRhdGlvbkluZm8gdmFsSW5mbywgaW50IHR5cGUpCi0gIHsKLSAgICAvLyBpZiB0aGVyZSB3ZXJlIG5vIHByb2JsZW1zIGp1c3QgcmV0dXJuCi0gICAgaWYgKHByb2JsZW1zID09IG51bGwpCi0gICAgICByZXR1cm47Ci0KLSAgICAKLSAgICBJdGVyYXRvciBwcm9ibGVtc0l0ZXJhdG9yID0gcHJvYmxlbXMuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAocHJvYmxlbXNJdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgQXNzZXJ0aW9uRXJyb3IgYXNzZXJ0aW9uZXJyb3IgPSAoQXNzZXJ0aW9uRXJyb3IpIHByb2JsZW1zSXRlcmF0b3IubmV4dCgpOwotICAgICAgaWYgKHR5cGUgPT0gRVJST1IpCi0gICAgICB7Ci0JCXdzaVZhbGlkID0gZmFsc2U7Ci0gICAgICAgIHZhbEluZm8uYWRkRXJyb3IoCi0gICAgICAgIAkJV1NJQ29uc3RhbnRzLldTSV9QUkVGSVggKyAiKCIgKyBhc3NlcnRpb25lcnJvci5nZXRBc3NlcnRpb25JRCgpKyAiKSAiICsgYXNzZXJ0aW9uZXJyb3IuZ2V0RXJyb3JNZXNzYWdlKCksCi0gICAgICAgICAgYXNzZXJ0aW9uZXJyb3IuZ2V0TGluZSgpLAotICAgICAgICAgIGFzc2VydGlvbmVycm9yLmdldENvbHVtbigpLAotICAgICAgICAgIHZhbEluZm8uZ2V0RmlsZVVSSSgpKTsKLQotICAgICAgfQotICAgICAgZWxzZSBpZiAodHlwZSA9PSBXQVJOSU5HKQotICAgICAgewotICAgICAgICB2YWxJbmZvLmFkZFdhcm5pbmcoCi0gICAgICAgIAkJV1NJQ29uc3RhbnRzLldTSV9QUkVGSVggKyAiKCIgKyBhc3NlcnRpb25lcnJvci5nZXRBc3NlcnRpb25JRCgpKyAiKSAiICsgYXNzZXJ0aW9uZXJyb3IuZ2V0RXJyb3JNZXNzYWdlKCksCi0gICAgICAgICAgYXNzZXJ0aW9uZXJyb3IuZ2V0TGluZSgpLAotICAgICAgICAgIGFzc2VydGlvbmVycm9yLmdldENvbHVtbigpLAotICAgICAgICAgIHZhbEluZm8uZ2V0RmlsZVVSSSgpKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c2RsLnZhbGlkYXRlLmNvbnRyb2xsZXIuSVdTRExWYWxpZGF0b3IjaXNWYWxpZCgpCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1ZhbGlkKCkKLSAgewotICAgIHJldHVybiB3c2lWYWxpZDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFJlc291cmNlQnVuZGxlKFJlc291cmNlQnVuZGxlIHJiKSB7Ci0JLy8gTm90IHVzZWQuCi0JCi0gIH0KLSAgCi0gIAotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL3dzaXZhbGlkYXRlLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC53c2kvc3JjL3dzaXZhbGlkYXRlLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhOTA2YjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3Qud3NpL3NyYy93c2l2YWxpZGF0ZS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotIyAvKioKLSMgICogPGNvcHlyaWdodD4KLSMgICoKLSMgICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDMgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDb21tb24gUHVibGljIExpY2Vuc2UgdjEuMAotIyAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyAgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbAotIyAgKiAKLSMgICogQ29udHJpYnV0b3JzOiAKLSMgICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgICoKLSMgICogPC9jb3B5cmlnaHQ+Ci0jICAqLwotCi1fRVhDX1VOQUJMRV9UT19WQUxJREFURV9XU0kgPSBVbmFibGUgdG8gdmFsaWRhdGUgV1MtSSBjb25mb3JtYW5jZS4gIEFuIGVycm9yIG9jY3VyZWQgcmVhZGluZyB0aGUgV1NETCBkb2N1bWVudCB7MH0uClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5pbmZvcG9wLy5jdnNpZ25vcmUgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmluZm9wb3AvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE0NDg3Yy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmluZm9wb3AvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWJ1aWxkLnhtbApkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5pbmZvcG9wLy5wcm9qZWN0IGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5pbmZvcG9wLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzQ1NzlhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuaW5mb3BvcC8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmluZm9wb3A8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmluZm9wb3AvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmluZm9wb3AvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjZWJmM2QuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5pbmZvcG9wL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuaW5mb3BvcDsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjIwMy5xdWFsaWZpZXIKLUJ1bmRsZS1WZW5kb3I6ICVwbHVnaW5Qcm92aWRlcgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5pbmZvcG9wL2Fib3V0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmluZm9wb3AvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkYjM2ZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmluZm9wb3AvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5pbmZvcG9wL2F4aXNjb25zdW1wdGlvbnVpLWYxQ29udGV4dHMueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5pbmZvcG9wL2F4aXNjb25zdW1wdGlvbnVpLWYxQ29udGV4dHMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZGVjMjFkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuaW5mb3BvcC9heGlzY29uc3VtcHRpb251aS1mMUNvbnRleHRzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLmNvbnRleHRzIj8+Ci08IS0tIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gLS0+Ci08Y29udGV4dHM+Ci0KLTwhLS1XZWJTZXJ2aWNlQXhpc1Byb3h5UGFnZS5qYXZhLS0+Ci0KLTxjb250ZXh0IGlkPSJQV0pCMDAwMyI+Ci08IS0tRm9sZGVyIGZpZWxkIG9mIHRoZSBXU0RMIHRvIEphdmEgQmluZGluZ3MgUGFnZS0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGUgcHJvamVjdCBpbiB3aGljaCB0aGUgV2ViIHNlcnZpY2Ugd2lsbCBiZSBjcmVhdGVkLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV0pCMDAwOSI+Ci08IS0tSW5kaWNhdGVzIHdoZXRoZXIgdG8gZ2VuZXJhdGUgYSBwcm94eSBvciBub3QtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhpcyBjaGVjayBib3ggSmF2YSBiZWFuIGNsaWVudCBwcm94eSB0byB0aGUgV2ViIHNlcnZpY2UuIFRoZSBKYXZhIGJlYW4gY2xpZW50IHByb3h5IHRoYXQgaXMgZ2VuZXJhdGVkIHByb3ZpZGVzIGEgcmVtb3RlIHByb2NlZHVyZSBjYWxsIGludGVyZmFjZSB0byB0aGUgV2ViIHNlcnZpY2UuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXSkIwMDE2Ij4KLTwhLS1TaG93IE1hcHBpbmdzIGNoZWNrYm94IG9mIHRoZSBCZWFuIE1ldGhvZHMgUGFnZS0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGlzIGNoZWNrIGJveCB0byBjdXN0b21pemUgdGhlIG1hcHBpbmdzIGJldHdlZW4gcGFja2FnZXMgYW5kIG5hbWVzcGFjZXMuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPCEtLVdlYlNlcnZpY2VBeGlzTWFwcGluZ3NQYWdlLmphdmEtLT4KLQotPGNvbnRleHQgaWQ9IlBXSk0wMDAxIj4KLTwhLS1XU0RMIHRvIEphdmEgTWFwcGluZ3MgUGFnZS0tPgotPGRlc2NyaXB0aW9uPlVzZSB0aGlzIHBhbmVsIHRvIGFkZCBjdXN0b21pemVkIHBhY2thZ2UgdG8gbmFtZXNwYWNlIG1hcHBpbmdzLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTwhLS1XZWJTZXJ2aWNlQXhpc1ByZWZlcmVuY2VQYWdlLmphdmEtLT4KLQotPGNvbnRleHQgaWQ9IlBQQUUwMDAxIj4KLTwhLS1BeGlzIEVtaXR0ZXIgUHJlZmVyZW5jZSBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+VXNlIHRoaXMgcGFuZWwgdG8gYWRkIGN1c3RvbWl6ZWQgcGFja2FnZSB0byBuYW1lc3BhY2UgbWFwcGluZ3MuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBQQUUwMDAyIj4KLTwhLS1HZW5lcmF0ZSBjb2RlIGZvciBhbGwgZWxlbWVudHMtLT4KLTxkZXNjcmlwdGlvbj5CeSBkZWZhdWx0LCBXU0RMMkphdmEgb25seSBnZW5lcmF0ZXMgY29kZSBmb3IgdGhvc2UgZWxlbWVudHMgaW4gdGhlIFdTREwgZmlsZQotdGhhdCBhcmUgcmVmZXJlbmNlZC48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFBBRTAwMDMiPgotPCEtLUVtaXRzIHNlcGFyYXRlIEhlbHBlciBjbGFzc2VzIGZvciBtZXRhZGF0YS0tPgotPGRlc2NyaXB0aW9uPklmIHlvdSBzZWxlY3QgdGhpcyBvcHRpb24gV1NETDJKYXZhIHdpbGwgY3JlYXRlIGEgc2VwYXJhdGUgaGVscGVyIGNsYXNzIHRoYXQKLWNvbnRhaW5zIHRoZSBtZXRhZGF0YSByYXRoZXIgdGhhbiBpbmNsdWRpbmcgaXQgaW4gdGhlIHNrZWxldG9uLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQUEFFMDAwNCI+Ci08IS0tUHJlZmVycyBidWlsZGluZyBiZWFucyB0byBzdHJhaWdodCBhcnJheXMgZm9yIHdyYXBwZWQgWE1MIGFycmF5IHR5cGVzLS0+Ci08ZGVzY3JpcHRpb24+SWYgeW91IHdvdWxkIHJhdGhlciBhIHNwZWNpZmljIEphdmFCZWFuIGNsYXNzIChBcnJheU9mU3RyaW5nKSBiZSBnZW5lcmF0ZWQKLWZvciB0aGVzZSB0eXBlcyBvZiBzY2hlbWFzLCBzZWxlY3QgdGhpcyBvcHRpb24uPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBQQUUwMDA1Ij4KLTwhLS1BZGQgc2NvcGUgdG8gZGVwbG95LndzZGQtLT4KLTxkZXNjcmlwdGlvbj5UaGlzIGluZGljYXRlcyBob3cgdG8gZGVwbG95IHRoZSBzZXJ2ZXIgaW1wbGVtZW50YXRpb24uIEFwcGxpY2F0aW9uIHVzZXMgb25lCi1pbnN0YW5jZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGFsbCByZXF1ZXN0cy4gUmVxdWVzdCBjcmVhdGVzIGEgbmV3Ci1pbnN0YW5jZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGVhY2ggcmVxdWVzdC4gU2Vzc2lvbiBjcmVhdGVzIGEgbmV3Ci1pbnN0YW5jZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGVhY2ggc2Vzc2lvbi48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFBBRTAwMDYiPgotPCEtLVRpbWVvdXQtLT4KLTxkZXNjcmlwdGlvbj5UaGUgZGVmYXVsdCBpcyA0NS4gVXNlIC0xIHRvIGRpc2FibGUgdGhlIHRpbWVvdXQuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBQQUUwMDA3Ij4KLTwhLS1Mb29rIGZvciBhbGxvd2VkIG1ldGhvZHMgaW4gaW5oZXJpdGVkIGNsYXNzLS0+Ci08ZGVzY3JpcHRpb24+SWYgdGhpcyBvcHRpb24gaXMgc3BlY2lmaWVkLCB0aGUgSmF2YTJXU0RMIHBhcnNlciB3aWxsIGxvb2sgaW50byBleHRlbmRlZAotY2xhc3NlcyB0byBkZXRlcm1pbmUgdGhlIGxpc3Qgb2YgbWV0aG9kcyB0byBleHBvcnQgaW50byB0aGUgV1NETCBmaWxlLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQUEFFMDAxMCI+Ci08IS0tdmFsaWRhdGUgYWdhaW5zdCBKQVhSUEMtLT4KLTxkZXNjcmlwdGlvbj5JZiBzZWxlY3RlZCwgdGhlIHRvb2xzIHdpbGwgZXhhbWluZSB0aGUgSmF2YSBzZXJ2aWNlIGNsYXNzIGFuZCBpdHMKLXZhbHVlIHR5cGVzIHRvIGRldGVybWluZSBpZiBpdCBzYXRpc2ZpZXMgaW1wb3J0YW50IHJlcXVpcmVtZW50cyBvZiB0aGUgSkFYLVJQQwotc3BlY2lmaWNhdGlvbi48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08L2NvbnRleHRzPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5pbmZvcG9wL2F4aXNjcmVhdGlvbnVpLWYxQ29udGV4dHMueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5pbmZvcG9wL2F4aXNjcmVhdGlvbnVpLWYxQ29udGV4dHMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTZkZGY2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuaW5mb3BvcC9heGlzY3JlYXRpb251aS1mMUNvbnRleHRzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9OTFMgVFlQRT0ib3JnLmVjbGlwc2UuaGVscC5jb250ZXh0cyI/PgotPCEtLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIC0tPgotPGNvbnRleHRzPgotPCEtLVdlYlNlcnZpY2VBeGlzQmVhbkNsYXNzUGFnZS5qYXZhLS0+Ci0KLTxjb250ZXh0IGlkPSJQQkNMMDAwMSI+Ci08IS0tQmVhbiBTZWxlY3Rpb24gUGFnZS0tPgotPGRlc2NyaXB0aW9uPlVzZSB0aGlzIHBhZ2UgdG8gc2VsZWN0IHRoZSBKYXZhIGJlYW4gZnJvbSB3aGljaCB5b3Ugd2lsbCBjcmVhdGUgeW91ciBXZWIgc2VydmljZS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUEJDTDAwMDIiPgotPCEtLUJlYW4gU2VsZWN0aW9uIGZpZWxkIG9mIHRoZSBCZWFuIFNlbGVjdGlvbiBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+RW50ZXIgdGhlIG5hbWUgb2YgdGhlIEphdmEgYmVhbiB0byBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgV2ViIHNlcnZpY2UuIERlZmF1bHRzIHRoZSBzZWxlY3RlZCBKYXZhIGJlYW4uIENsaWNrIDxiPkJyb3dzZSBjbGFzc2VzIDwvYj50byB2aWV3IHRoZSBiZWFuIGNsYXNzIG9mIHRoZSBzZWxlY3RlZCBKYXZhIGJlYW4uIFRoZSBiZWFuIGNsYXNzIGlzIGEgbW9kZWwgb3IgdGVtcGxhdGUgKGFuIGFic3RyYWN0IGRhdGEgdHlwZSkgdGhhdCBjYW4gYmUgaW5zdGFudGlhdGVkIHRvIGNyZWF0ZSBvYmplY3RzIHdpdGggYSBjb21tb24gZGVmaW5pdGlvbiBhbmQgdGhlcmVmb3JlLCBjb21tb24gcHJvcGVydGllcywgb3BlcmF0aW9ucywgYW5kIGJlaGF2aW9yLiBDbGljayA8Yj5Ccm93c2UgZmlsZXMgPC9iPnRvIHNlbGVjdCBhIEphdmEgYmVhbiBmcm9tIHRoZSBwcm9qZWN0LjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQQkNMMDAwMyI+Ci08IS0tQmVhbiBDbGFzcyBCcm93c2UgYnV0dG9uIG9mIHRoZSBCZWFuIFNlbGVjdGlvbiBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+Q2xpY2sgdG8gdmlldyB0aGUgYmVhbiBjbGFzcyBvZiB0aGUgc2VsZWN0ZWQgSmF2YSBiZWFuLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQQkNMMDAwNCI+Ci08IS0tQmVhbiBSZXNvdXJjZSBCcm93c2UgYnV0dG9uIG9mIHRoZSBCZWFuIFNlbGVjdGlvbiBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+Q2xpY2sgdGhpcyBidXR0b24gdG8gYnJvd3NlIHRvIGEgSmF2YSBiZWFuIG9uIHlvdXIgc3lzdGVtIHRvIGJlIHVzZWQgdG8gY3JlYXRlIGEgV2ViIHNlcnZpY2UuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPCEtLVdlYlNlcnZpY2VBeGlzQmVhbkNvbmZpZ1BhZ2UuamF2YS0tPgotPGNvbnRleHQgaWQ9IlBCQ0YwMDAxIj4KLTwhLS1CZWFuIElkZW50aXR5IFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5PbiB0aGlzIHBhZ2UgeW91IGNhbiBzZWxlY3QgdGhlIG5hbWUgb2YgdGhlIFdTREwgZmlsZSB0aGF0IHdpbGwgYmUgZ2VuZXJhdGVkLCBhbmQgdGhlIG1ldGhvZHMgdGhhdCB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBXZWIgc2VydmljZS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotPGNvbnRleHQgaWQ9IlBCQ0YwMDAyIj4KLTwhLS1VUkkgZmllbGQgb2YgdGhlIEJlYW4gQ29uZmlnIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5UaGlzIGZpZWxkIGNvbnRhaW5zIHRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgV2ViIHNlcnZpY2UuIEl0IGlzIHJlYWQtb25seS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotPGNvbnRleHQgaWQ9IlBCQ0YwMDA3Ij4KLTwhLS1XU0RMIEZpbGUgZmllbGQgb2YgdGhlIEJlYW4gQ29uZmlnIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5UaGlzIGZpZWxkIGNvbnRhaW5zIHRoZSBuYW1lIG9mIHRoZSBXU0RMIGZpbGUgdGhhdCB3aWxsIGJlIGdlbmVyYXRlZC4gQWNjZXB0IHRoZSBkZWZhdWx0IG9yIGVudGVyIGEgbmV3IG5hbWUuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBCTUUwMDAyIj4KLTwhLS1NZXRob2RzIHRyZWUgb2YgdGhlIEJlYW4gTWV0aG9kcyBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IGZyb20gdGhlIGF2YWlsYWJsZSBKYXZhIGJlYW4gbWV0aG9kcyB3aGljaCBvbmVzIHRvIGluY2x1ZGUgaW4geW91ciBXZWIgc2VydmljZS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotPGNvbnRleHQgaWQ9IlBCTUUwMDEwIj4KLTwhLS1TZWxlY3QgQWxsIGJ1dHRvbiBvZiB0aGUgQmVhbiBNZXRob2RzIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5DbGljayB0aGlzIGJ1dHRvbiB0byBpbmNsdWRlIGFsbCBsaXN0ZWQgbWV0aG9kcyBpbiB5b3VyIFdlYiBzZXJ2aWNlLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci08Y29udGV4dCBpZD0iUEJNRTAwMTEiPgotPCEtLURlc2VsZWN0IEFsbCBidXR0b24gb2YgdGhlIEJlYW4gTWV0aG9kcyBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+Q2xpY2sgdGhpcyBidXR0b24gdG8gcmVtb3ZlIGFsbCBsaXN0ZWQgbWV0aG9kcyBmcm9tIHlvdXIgV2ViIHNlcnZpY2UuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBCQ0YwMDE2Ij4KLTwhLS1TaG93IE1hcHBpbmdzIGNoZWNrYm94IG9mIHRoZSBCZWFuIE1ldGhvZHMgUGFnZS0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGlzIGNoZWNrIGJveCB0byBjdXN0b21pemUgdGhlIG1hcHBpbmdzIGJldHdlZW4gcGFja2FnZXMgYW5kIG5hbWVzcGFjZXMuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotCi08IS0tV2ViU2VydmljZVNrZWxldG9uQXhpc0NvbmZpZ1BhZ2UuamF2YS0tPgotCi08Y29udGV4dCBpZD0iUEJTQzAwMDEiPgotPCEtLVNrZWxldG9uIENvbmZpZyBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+VXNlIHRoaXMgcGFnZSB0byBzcGVjaWZ5IGluZm9ybWF0aW9uIGFib3V0IHRoZSBKYXZhIGJlYW4gc2tlbGV0b24gYmVpbmcgY3JlYXRlZC48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotPGNvbnRleHQgaWQ9IlBCQ0YwMDAyIj4KLTwhLS1VUkkgZmllbGQgb2YgdGhlIEJlYW4gQ29uZmlnIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5UaGlzIGZpZWxkIGxpc3RzIHRoZSBTT0FQIGJvZHkgbmFtZXNwYWNlIGFuZCB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgV2ViIHNlcnZpY2UgYmVpbmcgY3JlYXRlZC48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotPGNvbnRleHQgaWQ9IlBCQ0YwMDA2Ij4KLTwhLS1XU0RMIEZvbGRlciBmaWVsZCBpbiB0aGUgQmVhbiBDb25maWcgUGFnZS0tPgotPGRlc2NyaXB0aW9uPlRoaXMgZmllbGQgbGlzdHMgdGhlIGxvY2F0aW9uIG9mIHRoZSBXU0RMIGZpbGUgYmVpbmcgZ2VuZXJhdGVkLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci08Y29udGV4dCBpZD0iUEJDRjAwMDciPgotPCEtLVdTREwgRmlsZSBmaWVsZCBvZiB0aGUgQmVhbiBDb25maWcgUGFnZS0tPgotPGRlc2NyaXB0aW9uPkVudGVyIHRoZSBuYW1lIG9mIHRoZSBXU0RMIGZpbGUgYmVpbmcgY3JlYXRlZCwgb3IgYWNjZXB0IHRoZSBkZWZhdWx0LjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci08Y29udGV4dCBpZD0iUEJTQzAwMDQiPgotPCEtLVNrZWxldG9uIEZvbGRlciBmaWVsZCBvZiB0aGUgU2tlbGV0b24gQ29uZmlnIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5FbnRlciB0aGUgbG9jYXRpb24gd2hlcmUgdGhlIEphdmEgYmVhbiBza2VsZXRvbiB3aWxsIGJlIGNyZWF0ZWQsIG9yIGFjY2VwdCB0aGUgZGVmYXVsdC48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotPGNvbnRleHQgaWQ9IlBCU0MwMDA1Ij4KLTwhLS1Ta2VsZXRvbiBGb2xkZXIgQnJvd3NlIGJ1dHRvbiBvZiB0aGUgU2tlbGV0b24gQ29uZmlnIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5Vc2UgdGhpcyBidXR0b24gdG8gYnJvd3NlIHRvIHRoZSBsb2NhdGlvbiB3aGVyZSB5b3Ugd2FudCB0aGUgSmF2YSBiZWFuIHNrZWxldG9uIHRvIGJlIGNyZWF0ZWQuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLTxjb250ZXh0IGlkPSJQQkNGMDAxNiI+Ci08IS0tU2hvdyBNYXBwaW5ncyBjaGVja2JveCBvZiB0aGUgQmVhbiBNZXRob2RzIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhpcyBjaGVjayBib3ggdG8gY3VzdG9taXplIHRoZSBtYXBwaW5ncyBiZXR3ZWVuIHBhY2thZ2VzIGFuZCBuYW1lc3BhY2VzLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTwvY29udGV4dHM+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmluZm9wb3AvYnVpbGQucHJvcGVydGllcyBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuaW5mb3BvcC9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDJiNDVhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuaW5mb3BvcC9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1iaW4uaW5jbHVkZXMgPSBheGlzY29uc3VtcHRpb251aS1mMUNvbnRleHRzLnhtbCxcCi0gICAgICAgICAgICAgICBheGlzY3JlYXRpb251aS1mMUNvbnRleHRzLnhtbCxcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvCi1zcmMuaW5jbHVkZXMgPSBidWlsZC5wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmluZm9wb3AvcGx1Z2luLnByb3BlcnRpZXMgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmluZm9wb3AvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5NTBiYWUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5pbmZvcG9wL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jIHByb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuaW5mb3BvcAotcGx1Z2luTmFtZSAgICAgPSBXZWIgc2VydmljZXMgQXhpcyBjb250ZXh0IHNlbnNpdGl2ZSBoZWxwCi1wbHVnaW5Qcm92aWRlciA9IEVjbGlwc2Uub3JnClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5pbmZvcG9wL3BsdWdpbi54bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmluZm9wb3AvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2MwZGMxMS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmluZm9wb3AvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI/PiAKLTwhLS0gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAtLT4KLTxwbHVnaW4+Ci0KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLmNvbnRleHRzIj4KLQkJPGNvbnRleHRzIGZpbGU9ImF4aXNjb25zdW1wdGlvbnVpLWYxQ29udGV4dHMueG1sIiBwbHVnaW49Im9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLnVpIi8+Ci0JCTxjb250ZXh0cyBmaWxlPSJheGlzY3JlYXRpb251aS1mMUNvbnRleHRzLnhtbCIgcGx1Z2luPSJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi51aSIvPgotCTwvZXh0ZW5zaW9uPgotPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci8uY3ZzaWdub3JlIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTExOTNmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXJfMS4wLjAuamFyCi1iYWsKLXRlbXAKLWJ1aWxkLnhtbApkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci8ucHJvamVjdCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3NWFhOTkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9Eb2NCdWlsZC54bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL0RvY0J1aWxkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRmNDc3Zi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL0RvY0J1aWxkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgotPCEtLSAKLQotCVRoaXMgc2NyaXB0IGJ1aWxkIHRoZSBIZWxwIHBsdWctaW4gYnkgdHJhbnNmb3JtaW5nIHRoZSBESVRBIHNvdXJjZSBmaWxlcyBpbnRvIEhUTUwuCi0JCi0JVG8gdXNlIHRoaXMgc2NyaXB0LCB5b3UgbXVzdCBpbnN0YWxsIERJVEEtT1Qgb24geW91ciBtYWNoaW5lIGluIHRoZSBkaXJlY3RvcnkKLQlkZWZpbmVkIGJ5IHRoZSBkaXRhLm90LmRpciBwcm9wZXJ0eS4KLQkKLQlSdW4gdGhlIGRlZmF1bHQgdGFyZ2V0IGFmdGVyIHlvdSBlZGl0IHRoZSBESVRBIHNvdXJjZSBmaWxlcyB0byByZWdlbmVyYXRlIHRoZSBIVE1MLgotCQotCVRvIGN1c3RvbWl6ZSB0aGlzIHNjcmlwdCBmb3Igb3RoZXIgSGVscCBwbHVnLWlucywgbW9kaWZ5IHRoZSB2YWx1ZSBvZiB0aGUgYXJncy5pbnB1dCBwcm9wZXJ0eQotCXRvIGJlIHRoZSBESVRBIG1hcCBmaWxlIGZvciB0aGUgcGx1Zy1pbi4KLQkKLQlOT1RFOiBUaGlzIHNjcmlwdCBhc3N1bWVzIHRoYXQgbGlua3MgdG8gc2libGluZyBIZWxwIHBsdWctaW5zIGhhdmUgc2NvcGU9InBlZXIiLCBvdGhlcndpc2UgdGhlCi0Jb3V0cHV0IGRpcmVjdG9yeSBzdHJ1Y3R1cmUgd2lsbCBiZSBzaGlmdGVkIGluY29ycmVjdGx5LgotCQotCU5PVEU6IFRoaXMgc2NyaXB0IGFzc3VtZXMgdGhhdCB5b3UgaGFuZCBjb2RlIHlvdXIgcGx1Z2luLnhtbCBmaWxlIGluIG15cGx1Z2luLnhtbC4gVGhpcyBmaWxlCi0Jd2lsbCBiZSBjb3BpZWQgb3ZlciB0aGUgZ2VuZXJhdGVkIHBsdWdpbi54bWwgd2hpY2ggaXMgY3VycmVudGx5IG5vdCBiZWluZyBnZW5lcmF0ZWQgY29ycmVjdGx5Ci0JYnkgRElUQS1PVC4KLQkKLQlDaGFuZ2VMb2c6Ci0JMjAwNi0wNC0wNSBBcnRodXIgUnltYW4gPHJ5bWFuQGNhLmlibS5jb20+Ci0JLSBDcmVhdGVkLgotCi0tLT4KLTxwcm9qZWN0IG5hbWU9ImVjbGlwc2VoZWxwIiBkZWZhdWx0PSJhbGwiPgotCi0JPHByb3BlcnR5IG5hbWU9ImRpdGEub3QuZGlyIiBsb2NhdGlvbj0iQzovRElUQS1PVDEuMi4yIiAvPgotCi0JPHBhdGggaWQ9ImRvc3QuY2xhc3MucGF0aCI+Ci0JCTxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtkaXRhLm90LmRpcn0ke2ZpbGUuc2VwYXJhdG9yfWxpYiR7ZmlsZS5zZXBhcmF0b3J9ZG9zdC5qYXIiIC8+Ci0JPC9wYXRoPgotCi0JPHRhc2tkZWYgbmFtZT0iaW50ZWdyYXRlIiBjbGFzc25hbWU9Im9yZy5kaXRhLmRvc3QucGxhdGZvcm0uSW50ZWdyYXRvclRhc2siPgotCQk8Y2xhc3NwYXRoIHJlZmlkPSJkb3N0LmNsYXNzLnBhdGgiIC8+Ci0JPC90YXNrZGVmPgotCTx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJpbnRlZ3JhdGUsIGVjbGlwc2VoZWxwIj4KLQk8L3RhcmdldD4KLQk8dGFyZ2V0IG5hbWU9ImludGVncmF0ZSI+Ci0JCTxpbnRlZ3JhdGUgZGl0YWRpcj0iJHtkaXRhLm90LmRpcn0iIC8+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tIHJldmlzZSBiZWxvdyBoZXJlIC0tPgotCTx0YXJnZXQgbmFtZT0iZWNsaXBzZWhlbHAiPgotCQk8YW50IGFudGZpbGU9IiR7ZGl0YS5vdC5kaXJ9JHtmaWxlLnNlcGFyYXRvcn1jb25kdWN0b3IueG1sIiB0YXJnZXQ9ImluaXQiIGRpcj0iJHtkaXRhLm90LmRpcn0iPgotCQkJPHByb3BlcnR5IG5hbWU9ImFyZ3MuY29weWNzcyIgdmFsdWU9Im5vIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9ImFyZ3MuY3NzcGF0aCIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5kb2MudXNlciIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJhcmdzLmVjbGlwc2UucHJvdmlkZXIiIHZhbHVlPSJFY2xpcHNlLm9yZyIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJhcmdzLmVjbGlwc2UudmVyc2lvbiIgdmFsdWU9IjEuNS4wIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9ImFyZ3MuaW5wdXQiIGxvY2F0aW9uPSJ3c2F4aXNidWlsZF90b2MuZGl0YW1hcCIgLz4gICAKLQkJCTxwcm9wZXJ0eSBuYW1lPSJjbGVhbi50ZW1wIiB2YWx1ZT0idHJ1ZSIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJkaXRhLmV4dG5hbWUiIHZhbHVlPSIuZGl0YSIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJkaXRhLnRlbXAuZGlyIiBsb2NhdGlvbj0idGVtcCIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJvdXRwdXQuZGlyIiBsb2NhdGlvbj0iLi4iIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0idHJhbnN0eXBlIiB2YWx1ZT0iZWNsaXBzZWhlbHAiIC8+Ci0JCTwvYW50PgotCQk8Y29weSBmaWxlPSJteXBsdWdpbi54bWwiIHRvZmlsZT0icGx1Z2luLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiIC8+Ci0JPC90YXJnZXQ+Ci08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL01FVEEtSU5GL01BTklGRVNULk1GIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTZkYmE2NC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXI7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4zMDAucXVhbGlmaWVyCi1CdW5kbGUtVmVuZG9yOiAlcGx1Z2luUHJvdmlkZXIKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9hYm91dC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2RiMzZlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9idWlsZC5wcm9wZXJ0aWVzIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTk5MmNlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgd3NheGlzYnVpbGRfdG9jLnhtbCxcCi0gICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlcmluZGV4LnhtbCxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIGNvbmNlcHRzLyouaHRtKixcCi0gICAgICAgICAgICAgICB0YXNrcy8qLmh0bSosXAotICAgICAgICAgICAgICAgaW5kZXgvLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLwotc3JjLmluY2x1ZGVzID0gYnVpbGQucHJvcGVydGllcyxcCi0JCSAgICAgICAqLm1hcGxpc3QsXAotICAgICAgICAgICAgICAgKi5kaXRhbWFwLFwKLQkJICAgCSAgIGNvbmNlcHRzLyouZGl0YSxcCi0gICAgICAgICAgICAgICB0YXNrcy8qLmRpdGEKLWJpbi5leGNsdWRlcyA9IERvY0J1aWxkLnhtbCxcCi0gICAgICAgICAgICAgICBteVBsdWdpbioueG1sCi0gICAgICAgICAgICAgICAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL2NvbmNlcHRzL2NheGlzdG92ZXIuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvY29uY2VwdHMvY2F4aXN0b3Zlci5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzNiOGY2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvY29uY2VwdHMvY2F4aXN0b3Zlci5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+Ci08IURPQ1RZUEUgY29uY2VwdCBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBDb25jZXB0Ly9FTiIKLSAiY29uY2VwdC5kdGQiPgotPGNvbmNlcHQgaWQ9ImF4aXNvdmVydmlldyIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5DcmVhdGluZyBXZWIgc2VydmljZXMgd2l0aCB0aGUgQXBhY2hlIEF4aXMgcnVuLXRpbWUgZW52aXJvbm1lbnQ8L3RpdGxlPgotPHNob3J0ZGVzYz5UaGlzIHJ1bi10aW1lIGVudmlyb25tZW50IGlzIGZvciB1c2VycyB3aG8gcHJlZmVyIHRvIGRldmVsb3AgZm9yCi10aGUgb3BlbiBBcGFjaGUgQXhpcyBwbGF0Zm9ybS4gSXQgaXMgZm9yIG5vbi1wcm9kdWN0aW9uIHVzZSBvbmx5LiBBeGlzIGlzCi10aGUgdGhpcmQgZ2VuZXJhdGlvbiBvZiB0aGUgQXBhY2hlIFNPQVAgaW1wbGVtZW50YXRpb24uIEl0IGV2b2x2ZWQgZnJvbSBBcGFjaGUKLVNPQVAgdG8gbWFrZSB0aGUgU09BUCBlbmdpbmUgbW9yZSBmbGV4aWJsZSwgY29uZmlndXJhYmxlLCBhbmQgYWJsZSB0byBoYW5kbGUKLWJvdGggU09BUCBhbmQgdGhlIHVwY29taW5nIFhNTCBQcm90b2NvbCBzcGVjaWZpY2F0aW9uIGZyb20gdGhlIFczQyBvcGVuLXNvdXJjZQotZWZmb3J0Ljwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5BeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQ8aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+b3ZlcnZpZXc8L2luZGV4dGVybT48L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5BeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQ8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPGNvbmJvZHk+Ci08c2VjdGlvbj48dGl0bGU+T3ZlcnZpZXc8L3RpdGxlPjxwPkF4aXMgaXMgYmFzZWQgb24gSlNSIDEwMSA8dG0gdG1jbGFzcz0ic3BlY2lhbCIKLXRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iIHRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IEFQSXMKLWZvciBYTUwgYmFzZWQgUlBDIChhbHNvIGtub3duIGFzIEpBWC1SUEMpLiZuYnNwOyBKU1IgMTAxIHByb3ZpZGVzIGEgc2luZ2xlCi1pbnRlcmZhY2UgdG8gYW55IFhNTC1iYXNlZCBSUEMgbWVjaGFuaXNtLCBpbmNsdWRpbmcgU09BUC48L3A+PHA+V2ViIHNlcnZpY2VzCi1hcHBsaWNhdGlvbiBzZXJ2ZXIgdXNlcyBBeGlzIHdpdGhpbiBhIHNlcnZsZXQgdG8gcHJvY2VzcyB0aGUgaW5jb21pbmcgbWVzc2FnZSwKLWV4dHJhY3QgaW5mb3JtYXRpb24gZnJvbSB0aGUgbWVzc2FnZSBoZWFkZXJzLCBhbmQgcGF5bG9hZHMsIGFzIHdlbGwgYXMgY29uZm9ybWluZwotdG8gdGhlIHBhcnRpY3VsYXIgUlBDIHNlbWFudGljcy4gPC9wPjxwPlRoZSBsZXZlbCBvZiBBeGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQKLWlzIDEuMC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gQXhpcywgcmVmZXIgdG8gIDx4cmVmIGZvcm1hdD0iaHRtbCIgaHJlZj0iaHR0cDovL3htbC5hcGFjaGUub3JnL2F4aXMiCi1zY29wZT0iZXh0ZXJuYWwiPmh0dHA6Ly94bWwuYXBhY2hlLm9yZy9heGlzPC94cmVmPi4gVGhlIFVzZXIncyBHdWlkZSBhdmFpbGFibGUKLW9uIHRoaXMgc2l0ZSBwcm92aWRlcyBtb3JlIGluLWRlcHRoIGluZm9ybWF0aW9uIGFib3V0IHVzaW5nIFdlYiBzZXJ2aWNlcyB3aXRoCi1BcGFjaGUgQXhpcy4gVGhlIFJlYWRpbmcgR3VpZGUgbGlzdHMgc2V2ZXJhbCBkb2N1bWVudHMgdG8gZnVydGhlciB5b3VyIHVuZGVyc3RhbmRpbmcKLW9mIEF4aXMuPC9wPjxub3RlPlRoZSBzdXBwb3J0IGZvciBBeGlzIGlzIGxpbWl0ZWQgdG8gdmFsaWRhdGlvbiB0aGF0IHRoZSBhcHBsaWNhdGlvbgotaXMgaW52b2tpbmcgdGhlIEF4aXMgZW1pdHRlcnMgY29ycmVjdGx5LiBTdXBwb3J0IGZvciBvdGhlciBBeGlzIGlzc3VlcyBzaG91bGQKLWJlIGRpcmVjdGVkIHRvIDx4cmVmIGZvcm1hdD0iaHRtbCIgaHJlZj0iaHR0cDovL3dzLmFwYWNoZS5vcmcvYXhpcyIgc2NvcGU9ImV4dGVybmFsIj5odHRwOi8vd3MuYXBhY2hlLm9yZy9heGlzPC94cmVmPjwvbm90ZT48L3NlY3Rpb24+Ci08L2NvbmJvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBDb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD5XZWIgc2VydmljZXM8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+VG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2NqYXhycGMuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PkpBWC1SUEM8L2xpbmt0ZXh0PjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgVGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3Rhc2tzL3RvdmVyd3MuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PiBEZXZlbG9waW5nIFdlYiBzZXJ2aWNlczwvbGlua3RleHQ+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvY29uY2VwdD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvY29uY2VwdHMvY2F4aXN0b3Zlci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9jb25jZXB0cy9jYXhpc3RvdmVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1MjdiNjAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9jb25jZXB0cy9jYXhpc3RvdmVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwNyIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0iY29uY2VwdCIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJDcmVhdGluZyBXZWIgc2VydmljZXMgd2l0aCB0aGUgQXBhY2hlIEF4aXMgcnVuLXRpbWUgZW52aXJvbm1lbnQiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iVGhpcyBydW4tdGltZSBlbnZpcm9ubWVudCBpcyBmb3IgdXNlcnMgd2hvIHByZWZlciB0byBkZXZlbG9wIGZvciB0aGUgb3BlbiBBcGFjaGUgQXhpcyBwbGF0Zm9ybS4gSXQgaXMgZm9yIG5vbi1wcm9kdWN0aW9uIHVzZSBvbmx5LiBBeGlzIGlzIHRoZSB0aGlyZCBnZW5lcmF0aW9uIG9mIHRoZSBBcGFjaGUgU09BUCBpbXBsZW1lbnRhdGlvbi4gSXQgZXZvbHZlZCBmcm9tIEFwYWNoZSBTT0FQIHRvIG1ha2UgdGhlIFNPQVAgZW5naW5lIG1vcmUgZmxleGlibGUsIGNvbmZpZ3VyYWJsZSwgYW5kIGFibGUgdG8gaGFuZGxlIGJvdGggU09BUCBhbmQgdGhlIHVwY29taW5nIFhNTCBQcm90b2NvbCBzcGVjaWZpY2F0aW9uIGZyb20gdGhlIFczQyBvcGVuLXNvdXJjZSBlZmZvcnQuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoaXMgcnVuLXRpbWUgZW52aXJvbm1lbnQgaXMgZm9yIHVzZXJzIHdobyBwcmVmZXIgdG8gZGV2ZWxvcCBmb3IgdGhlIG9wZW4gQXBhY2hlIEF4aXMgcGxhdGZvcm0uIEl0IGlzIGZvciBub24tcHJvZHVjdGlvbiB1c2Ugb25seS4gQXhpcyBpcyB0aGUgdGhpcmQgZ2VuZXJhdGlvbiBvZiB0aGUgQXBhY2hlIFNPQVAgaW1wbGVtZW50YXRpb24uIEl0IGV2b2x2ZWQgZnJvbSBBcGFjaGUgU09BUCB0byBtYWtlIHRoZSBTT0FQIGVuZ2luZSBtb3JlIGZsZXhpYmxlLCBjb25maWd1cmFibGUsIGFuZCBhYmxlIHRvIGhhbmRsZSBib3RoIFNPQVAgYW5kIHRoZSB1cGNvbWluZyBYTUwgUHJvdG9jb2wgc3BlY2lmaWNhdGlvbiBmcm9tIHRoZSBXM0Mgb3Blbi1zb3VyY2UgZWZmb3J0LiIgLz4KLTxtZXRhIGNvbnRlbnQ9IkF4aXMgcnVudGltZSBlbnZpcm9ubWVudCwgV2ViIHNlcnZpY2VzLCBvdmVydmlldyIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IkF4aXMgcnVudGltZSBlbnZpcm9ubWVudCwgV2ViIHNlcnZpY2VzLCBvdmVydmlldyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3Rhc2tzL3R3c2JlYW5hLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3Rhc2tzL3Rza2x3c2RsYS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90YXNrcy90c2FtcGFwcGEuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2NqYXhycGMuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3Rhc2tzL3RvdmVyd3MuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJheGlzb3ZlcnZpZXciIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5DcmVhdGluZyBXZWIgc2VydmljZXMgd2l0aCB0aGUgQXBhY2hlIEF4aXMgcnVuLXRpbWUgZW52aXJvbm1lbnQ8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9ImF4aXNvdmVydmlldyI+PGEgbmFtZT0iYXhpc292ZXJ2aWV3Ij48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5DcmVhdGluZyBXZWIgc2VydmljZXMgd2l0aCB0aGUgQXBhY2hlIEF4aXMgcnVuLXRpbWUgZW52aXJvbm1lbnQ8L2gxPgotCi0KLQotPGRpdj48cD5UaGlzIHJ1bi10aW1lIGVudmlyb25tZW50IGlzIGZvciB1c2VycyB3aG8gcHJlZmVyIHRvIGRldmVsb3AgZm9yCi10aGUgb3BlbiBBcGFjaGUgQXhpcyBwbGF0Zm9ybS4gSXQgaXMgZm9yIG5vbi1wcm9kdWN0aW9uIHVzZSBvbmx5LiBBeGlzIGlzCi10aGUgdGhpcmQgZ2VuZXJhdGlvbiBvZiB0aGUgQXBhY2hlIFNPQVAgaW1wbGVtZW50YXRpb24uIEl0IGV2b2x2ZWQgZnJvbSBBcGFjaGUKLVNPQVAgdG8gbWFrZSB0aGUgU09BUCBlbmdpbmUgbW9yZSBmbGV4aWJsZSwgY29uZmlndXJhYmxlLCBhbmQgYWJsZSB0byBoYW5kbGUKLWJvdGggU09BUCBhbmQgdGhlIHVwY29taW5nIFhNTCBQcm90b2NvbCBzcGVjaWZpY2F0aW9uIGZyb20gdGhlIFczQyBvcGVuLXNvdXJjZQotZWZmb3J0LjwvcD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PGg0IGNsYXNzPSJzZWN0aW9udGl0bGUiPk92ZXJ2aWV3PC9oND48cD5BeGlzIGlzIGJhc2VkIG9uIEpTUiAxMDEgSmF2YeKEoiBBUElzCi1mb3IgWE1MIGJhc2VkIFJQQyAoYWxzbyBrbm93biBhcyBKQVgtUlBDKS7CoCBKU1IgMTAxIHByb3ZpZGVzIGEgc2luZ2xlCi1pbnRlcmZhY2UgdG8gYW55IFhNTC1iYXNlZCBSUEMgbWVjaGFuaXNtLCBpbmNsdWRpbmcgU09BUC48L3A+Ci08cD5XZWIgc2VydmljZXMKLWFwcGxpY2F0aW9uIHNlcnZlciB1c2VzIEF4aXMgd2l0aGluIGEgc2VydmxldCB0byBwcm9jZXNzIHRoZSBpbmNvbWluZyBtZXNzYWdlLAotZXh0cmFjdCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBtZXNzYWdlIGhlYWRlcnMsIGFuZCBwYXlsb2FkcywgYXMgd2VsbCBhcyBjb25mb3JtaW5nCi10byB0aGUgcGFydGljdWxhciBSUEMgc2VtYW50aWNzLiA8L3A+Ci08cD5UaGUgbGV2ZWwgb2YgQXhpcyBjdXJyZW50bHkgc3VwcG9ydGVkCi1pcyAxLjAuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEF4aXMsIHJlZmVyIHRvICA8YSBocmVmPSJodHRwOi8veG1sLmFwYWNoZS5vcmcvYXhpcyIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly94bWwuYXBhY2hlLm9yZy9heGlzPC9hPi4gVGhlIFVzZXIncyBHdWlkZSBhdmFpbGFibGUKLW9uIHRoaXMgc2l0ZSBwcm92aWRlcyBtb3JlIGluLWRlcHRoIGluZm9ybWF0aW9uIGFib3V0IHVzaW5nIFdlYiBzZXJ2aWNlcyB3aXRoCi1BcGFjaGUgQXhpcy4gVGhlIFJlYWRpbmcgR3VpZGUgbGlzdHMgc2V2ZXJhbCBkb2N1bWVudHMgdG8gZnVydGhlciB5b3VyIHVuZGVyc3RhbmRpbmcKLW9mIEF4aXMuPC9wPgotPGRpdiBjbGFzcz0ibm90ZSI+PHNwYW4gY2xhc3M9Im5vdGV0aXRsZSI+Tm90ZTo8L3NwYW4+IFRoZSBzdXBwb3J0IGZvciBBeGlzIGlzIGxpbWl0ZWQgdG8gdmFsaWRhdGlvbiB0aGF0IHRoZSBhcHBsaWNhdGlvbgotaXMgaW52b2tpbmcgdGhlIEF4aXMgZW1pdHRlcnMgY29ycmVjdGx5LiBTdXBwb3J0IGZvciBvdGhlciBBeGlzIGlzc3VlcyBzaG91bGQKLWJlIGRpcmVjdGVkIHRvIDxhIGhyZWY9Imh0dHA6Ly93cy5hcGFjaGUub3JnL2F4aXMiIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vd3MuYXBhY2hlLm9yZy9heGlzPC9hPjwvZGl2PgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPHVsIGNsYXNzPSJ1bGxpbmtzIj4KLTxsaSBjbGFzcz0idWxjaGlsZGxpbmsiPjxzdHJvbmc+PGEgaHJlZj0iLi4vdGFza3MvdHdzYmVhbmEuaHRtbCI+Q3JlYXRpbmcgYSBXZWIgc2VydmljZSBmcm9tIGEgSmF2YSBiZWFuIHVzaW5nIHRoZSBBcGFjaGUgQXhpcyBydW4tdGltZSBlbnZpcm9ubWVudDwvYT48L3N0cm9uZz48YnIgLz4KLVRoZSBXZWIgU2VydmljZSB3aXphcmQgYXNzaXN0cyB5b3UgaW4gY3JlYXRpbmcgYSBuZXcgV2ViIHNlcnZpY2UsIGNvbmZpZ3VyaW5nIGl0IGZvciBkZXBsb3ltZW50LCBhbmQgZGVwbG95aW5nIHRoZSBXZWIgc2VydmljZSB0byBhIHNlcnZlci4gT25jZSB5b3VyIFdlYiBzZXJ2aWNlIGlzIGRlcGxveWVkLCB0aGUgd2l6YXJkIGFzc2lzdHMgeW91IGluIGdlbmVyYXRpbmcgdGhlIGNsaWVudCBwcm94eSBhbmQgc2FtcGxlIGFwcGxpY2F0aW9uIHRvIHRlc3QgdGhlIFdlYiBzZXJ2aWNlLiBXaGVuIHlvdSBoYXZlIGNvbXBsZXRlZCB0ZXN0aW5nLCB5b3UgY2FuIHB1Ymxpc2ggeW91ciBXZWIgc2VydmljZSB0byBhIFVEREkgQnVzaW5lc3MgUmVnaXN0cnkgdXNpbmcgdGhlIEV4cG9ydCB3aXphcmQuPC9saT4KLTxsaSBjbGFzcz0idWxjaGlsZGxpbmsiPjxzdHJvbmc+PGEgaHJlZj0iLi4vdGFza3MvdHNrbHdzZGxhLmh0bWwiPkNyZWF0aW5nIGEgSmF2YSBiZWFuIHNrZWxldG9uIGZyb20gYSBXU0RMIGRvY3VtZW50IHVzaW5nIHRoZSBBcGFjaGUgQXhpcyBydW4tdGltZSBlbnZpcm9ubWVudDwvYT48L3N0cm9uZz48YnIgLz4KLVRoZSBXZWIgc2VydmljZSB3aXphcmQgYXNzaXN0cyB5b3UgaW4gY3JlYXRpbmcgYSBza2VsZXRvbiBiZWFuIGZyb20gYW4gZXhpc3RpbmcgV1NETCBkb2N1bWVudC4gVGhlIHNrZWxldG9uIGJlYW4gY29udGFpbnMgYSBzZXQgb2YgbWV0aG9kcyB0aGF0IGNvcnJlc3BvbmQgdG8gdGhlIG9wZXJhdGlvbnMgZGVzY3JpYmVkIGluIHRoZSBXU0RMIGRvY3VtZW50LiBXaGVuIHRoZSBiZWFuIGlzIGNyZWF0ZWQsIGVhY2ggbWV0aG9kIGhhcyBhIHRyaXZpYWwgaW1wbGVtZW50YXRpb24gdGhhdCB5b3UgcmVwbGFjZSBieSBlZGl0aW5nIHRoZSBiZWFuLjwvbGk+Ci08bGkgY2xhc3M9InVsY2hpbGRsaW5rIj48c3Ryb25nPjxhIGhyZWY9Ii4uL3Rhc2tzL3RzYW1wYXBwYS5odG1sIj5HZW5lcmF0aW5nIGEgSmF2YSBjbGllbnQgcHJveHkgYW5kIGEgc2FtcGxlIGFwcGxpY2F0aW9uIGZyb20gYSBXU0RMIGRvY3VtZW50IHVzaW5nIHRoZSBBeGlzIHJ1bi10aW1lIGVudmlyb25tZW50PC9hPjwvc3Ryb25nPjxiciAvPgotVGhlIFdlYiBTZXJ2aWNlIENsaWVudCB3aXphcmQgYXNzaXN0cyB5b3UgaW4gZ2VuZXJhdGluZyBhIEphdmEgYmVhbiBwcm94eSBhbmQgYSBzYW1wbGUgYXBwbGljYXRpb24uIFRoZSBzYW1wbGUgV2ViIGFwcGxpY2F0aW9uIGRlbW9uc3RyYXRlcyBob3cgdG8gY29kZSBhIHByb3h5IGZpbGUuPC9saT4KLTwvdWw+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgQ29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWwiPldlYiBzZXJ2aWNlczwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmh0bWwiPlRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jamF4cnBjLmh0bWwiPkpBWC1SUEM8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgVGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdG92ZXJ3cy5odG1sIj4gRGV2ZWxvcGluZyBXZWIgc2VydmljZXM8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvaW5kZXgvXzIuY2ZzIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9pbmRleC9fMi5jZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwZTg0MDMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9pbmRleC9fMi5jZnMKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL2luZGV4L2RlbGV0YWJsZSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvaW5kZXgvZGVsZXRhYmxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDIzMjQyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvaW5kZXgvZGVsZXRhYmxlCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9pbmRleC9pbmRleGVkX2NvbnRyaWJ1dGlvbnMgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfY29udHJpYnV0aW9ucwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTYwZTMxZi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfY29udHJpYnV0aW9ucworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1RoaXMgaXMgYSBnZW5lcmF0ZWQgZmlsZTsgZG8gbm90IGVkaXQuDQotI1dlZCBNYXkgMDkgMTQ6MTI6NDkgRURUIDIwMDcNCi1vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlcj1vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlclxuMS4wLjMwMC5xdWFsaWZpZXINCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfZGVwZW5kZW5jaWVzIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9pbmRleC9pbmRleGVkX2RlcGVuZGVuY2llcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTc4N2U2NC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfZGVwZW5kZW5jaWVzCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0jVGhpcyBpcyBhIGdlbmVyYXRlZCBmaWxlOyBkbyBub3QgZWRpdC4NCi0jV2VkIE1heSAwOSAxNDoxMjo0OSBFRFQgMjAwNw0KLWx1Y2VuZT0xLjQuMTAzLnYyMDA2MDYwMQ0KLWFuYWx5emVyPW9yZy5lY2xpcHNlLmhlbHAuYmFzZVwjMy4yLjAudjIwMDYwNjAxP2xvY2FsZVw9ZW4NCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfZG9jcyBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kb2NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwN2I5ODg0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kb2NzCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0jVGhpcyBpcyBhIGdlbmVyYXRlZCBmaWxlOyBkbyBub3QgZWRpdC4NCi0jV2VkIE1heSAwOSAxNDoxMjo0OSBFRFQgMjAwNw0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9jb25jZXB0cy9jYXhpc3RvdmVyLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci90YXNrcy90dG9tY2F0c2Vydi5odG1sPTANCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL2luZGV4L3NlZ21lbnRzIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9pbmRleC9zZWdtZW50cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTliNWQwYy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL2luZGV4L3NlZ21lbnRzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9teXBsdWdpbi54bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL215cGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGU1MTQwYi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL215cGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI/PiAKLTwhLS0gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAtLT4KLTxwbHVnaW4+Ci0gIAotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj4KLQkJPHRvYyBmaWxlPSJ3c2F4aXNidWlsZF90b2MueG1sIiAvPgotICAgICAgIDxpbmRleCBwYXRoPSJpbmRleC8iLz4KLQk8L2V4dGVuc2lvbj4KLQkKLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLmluZGV4Ij4KLSAgICAgIDxpbmRleCBmaWxlPSJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlcmluZGV4LnhtbCIvPgotPC9leHRlbnNpb24+Ci08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyLm1hcGxpc3QgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyLm1hcGxpc3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhNDM4MjIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci5tYXBsaXN0CisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08bWFwbGlzdCB2ZXJzaW9uPSIzLjYuMiI+Ci0gIDxuYXY+Ci0gICAgPG1hcCBmaWxlPSJ3c2F4aXNidWlsZF90b2MuZGl0YW1hcCIvPgotICA8L25hdj4KLSAgPGxpbms+Ci0gICAgPG1hcCBmaWxlPSJ3c2F4aXNidWlsZF90b2MuZGl0YW1hcCIvPgotICA8L2xpbms+Ci08L21hcGxpc3Q+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyaW5kZXguaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXJpbmRleC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Zjg4YzIwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXJpbmRleC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBodG1sCi0gIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iKEMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwNyIgLz4KLTxtZXRhIG5hbWU9InNlY3VyaXR5IiBjb250ZW50PSJwdWJsaWMiIC8+Ci08bWV0YSBuYW1lPSJSb2JvdHMiIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgbmFtZT0iREMuRm9ybWF0IiBjb250ZW50PSJYSFRNTCIgLz4KLTwhLS0gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTGljZW5zZWQgTWF0ZXJpYWxzIFByb3BlcnR5IG9mIElCTSAtLT4KLTwhLS0gVVMgR292ZXJubWVudCBVc2VycyBSZXN0cmljdGVkIFJpZ2h0cyAtLT4KLTwhLS0gVXNlLCBkdXBsaWNhdGlvbiBvciBkaXNjbG9zdXJlIHJlc3RyaWN0ZWQgYnkgLS0+Ci08IS0tIEdTQSBBRFAgU2NoZWR1bGUgQ29udHJhY3Qgd2l0aCBJQk0gQ29ycC4gLS0+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJpYm1kaXRhLmNzcyIgLz4KLTx0aXRsZT5JbmRleDwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTxoMT5JbmRleDwvaDE+Ci08c3Ryb25nPkE8L3N0cm9uZz4KLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT5BeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQKLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT48YSBocmVmPSJ0YXNrcy90dG9tY2F0c2Vydi5odG1sI2NyZWF0aW5nYW5hcGFjaGV0b21jYXRzZXJ2ZXIiPmNyZWF0aW5nIGFuIEFwYWNoZSBUb21jYXQgc2VydmVyPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90c2tsd3NkbGEuaHRtbCN0c2tsd3NkbGEiPnNrZWxldG9uIFdlYiBzZXJ2aWNlczwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdHNhbXBhcHBhLmh0bWwjdHNhbXBhcHBhIj5XZWIgc2VydmljZSBjbGllbnRzPC9hPgotPC9saT4KLTxsaT5XZWIgc2VydmljZXMKLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT48YSBocmVmPSJ0YXNrcy90d3NiZWFuYS5odG1sI3R3c2JlYW5hIj5KYXZhIGJlYW5zPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJjb25jZXB0cy9jYXhpc3RvdmVyLmh0bWwjYXhpc292ZXJ2aWV3Ij5vdmVydmlldzwvYT4KLTwvbGk+Ci08L3VsPgotPC9saT4KLTwvdWw+Ci08L2xpPgotPC91bD4KLTxzdHJvbmc+VDwvc3Ryb25nPgotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPlRvbWNhdCBzZXJ2ZXIKLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT48YSBocmVmPSJ0YXNrcy90dG9tY2F0c2Vydi5odG1sI2NyZWF0aW5nYW5hcGFjaGV0b21jYXRzZXJ2ZXIiPmNyZWF0aW5nIHNlcnZlcnMgZm9yIFdlYiBzZXJ2aWNlczwvYT4KLTwvbGk+Ci08L3VsPgotPC9saT4KLTwvdWw+Ci08c3Ryb25nPlc8L3N0cm9uZz4KLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT5XZWIgc2VydmljZXMKLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT48YSBocmVmPSJjb25jZXB0cy9jYXhpc3RvdmVyLmh0bWwjYXhpc292ZXJ2aWV3Ij5BeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQ8L2E+Ci08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+PGEgaHJlZj0idGFza3MvdHdzYmVhbmEuaHRtbCN0d3NiZWFuYSI+Y3JlYXRpbmcgYSBXZWIgc2VydmljZTwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdHNrbHdzZGxhLmh0bWwjdHNrbHdzZGxhIj5za2VsZXRvbiBXZWIgc2VydmljZXM8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3RzYW1wYXBwYS5odG1sI3RzYW1wYXBwYSI+V2ViIHNlcnZpY2UgY2xpZW50czwvYT4KLTwvbGk+Ci08L3VsPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90dG9tY2F0c2Vydi5odG1sI2NyZWF0aW5nYW5hcGFjaGV0b21jYXRzZXJ2ZXIiPmNyZWF0aW5nIGFuIEFwYWNoZSBUb21jYXQgc2VydmVyPC9hPgotPC9saT4KLTwvdWw+Ci08L2xpPgotPC91bD4KLTwvYm9keT48L2h0bWw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyaW5kZXgueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlcmluZGV4LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQ1NmUxNC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyaW5kZXgueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxpbmRleD4KLSAgPGVudHJ5IGtleXdvcmQ9IkF4aXMgcnVudGltZSBlbnZpcm9ubWVudCI+Ci0gICAgPGVudHJ5IGtleXdvcmQ9IldlYiBzZXJ2aWNlcyI+Ci0gICAgICA8ZW50cnkga2V5d29yZD0ib3ZlcnZpZXciPgotICAgICAgICA8dG9waWMgaHJlZj0iY29uY2VwdHMvY2F4aXN0b3Zlci5odG1sI2F4aXNvdmVydmlldyIgdGl0bGU9IkNyZWF0aW5nIFdlYiBzZXJ2aWNlcyB3aXRoIHRoZSBBcGFjaGUgQXhpcyBydW4tdGltZSBlbnZpcm9ubWVudCIvPgotICAgICAgPC9lbnRyeT4KLSAgICAgIDxlbnRyeSBrZXl3b3JkPSJKYXZhIGJlYW5zIj4KLSAgICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3R3c2JlYW5hLmh0bWwjdHdzYmVhbmEiIHRpdGxlPSJDcmVhdGluZyBhIFdlYiBzZXJ2aWNlIGZyb20gYSBKYXZhIGJlYW4gdXNpbmcgdGhlIEFwYWNoZSBBeGlzIHJ1bi10aW1lIGVudmlyb25tZW50Ii8+Ci0gICAgICA8L2VudHJ5PgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InNrZWxldG9uIFdlYiBzZXJ2aWNlcyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdHNrbHdzZGxhLmh0bWwjdHNrbHdzZGxhIiB0aXRsZT0iQ3JlYXRpbmcgYSBKYXZhIGJlYW4gc2tlbGV0b24gZnJvbSBhIFdTREwgZG9jdW1lbnQgdXNpbmcgdGhlIEFwYWNoZSBBeGlzIHJ1bi10aW1lIGVudmlyb25tZW50Ii8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iV2ViIHNlcnZpY2UgY2xpZW50cyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdHNhbXBhcHBhLmh0bWwjdHNhbXBhcHBhIiB0aXRsZT0iR2VuZXJhdGluZyBhIEphdmEgY2xpZW50IHByb3h5IGFuZCBhIHNhbXBsZSBhcHBsaWNhdGlvbiBmcm9tIGEgV1NETCBkb2N1bWVudCB1c2luZyB0aGUgQXhpcyBydW4tdGltZSBlbnZpcm9ubWVudCIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImNyZWF0aW5nIGFuIEFwYWNoZSBUb21jYXQgc2VydmVyIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90dG9tY2F0c2Vydi5odG1sI2NyZWF0aW5nYW5hcGFjaGV0b21jYXRzZXJ2ZXIiIHRpdGxlPSJDcmVhdGluZyBhbiBBcGFjaGUgVG9tY2F0IHNlcnZlciBhbmQgV2ViIHByb2plY3QiLz4KLSAgICA8L2VudHJ5PgotICA8L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0iV2ViIHNlcnZpY2VzIj4KLSAgICA8ZW50cnkga2V5d29yZD0iQXhpcyBydW50aW1lIGVudmlyb25tZW50Ij4KLSAgICAgIDx0b3BpYyBocmVmPSJjb25jZXB0cy9jYXhpc3RvdmVyLmh0bWwjYXhpc292ZXJ2aWV3IiB0aXRsZT0iQ3JlYXRpbmcgV2ViIHNlcnZpY2VzIHdpdGggdGhlIEFwYWNoZSBBeGlzIHJ1bi10aW1lIGVudmlyb25tZW50Ii8+Ci0gICAgICA8ZW50cnkga2V5d29yZD0iY3JlYXRpbmcgYSBXZWIgc2VydmljZSI+Ci0gICAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90d3NiZWFuYS5odG1sI3R3c2JlYW5hIiB0aXRsZT0iQ3JlYXRpbmcgYSBXZWIgc2VydmljZSBmcm9tIGEgSmF2YSBiZWFuIHVzaW5nIHRoZSBBcGFjaGUgQXhpcyBydW4tdGltZSBlbnZpcm9ubWVudCIvPgotICAgICAgPC9lbnRyeT4KLSAgICAgIDxlbnRyeSBrZXl3b3JkPSJza2VsZXRvbiBXZWIgc2VydmljZXMiPgotICAgICAgICA8dG9waWMgaHJlZj0idGFza3MvdHNrbHdzZGxhLmh0bWwjdHNrbHdzZGxhIiB0aXRsZT0iQ3JlYXRpbmcgYSBKYXZhIGJlYW4gc2tlbGV0b24gZnJvbSBhIFdTREwgZG9jdW1lbnQgdXNpbmcgdGhlIEFwYWNoZSBBeGlzIHJ1bi10aW1lIGVudmlyb25tZW50Ii8+Ci0gICAgICA8L2VudHJ5PgotICAgICAgPGVudHJ5IGtleXdvcmQ9IldlYiBzZXJ2aWNlIGNsaWVudHMiPgotICAgICAgICA8dG9waWMgaHJlZj0idGFza3MvdHNhbXBhcHBhLmh0bWwjdHNhbXBhcHBhIiB0aXRsZT0iR2VuZXJhdGluZyBhIEphdmEgY2xpZW50IHByb3h5IGFuZCBhIHNhbXBsZSBhcHBsaWNhdGlvbiBmcm9tIGEgV1NETCBkb2N1bWVudCB1c2luZyB0aGUgQXhpcyBydW4tdGltZSBlbnZpcm9ubWVudCIvPgotICAgICAgPC9lbnRyeT4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJjcmVhdGluZyBhbiBBcGFjaGUgVG9tY2F0IHNlcnZlciI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdHRvbWNhdHNlcnYuaHRtbCNjcmVhdGluZ2FuYXBhY2hldG9tY2F0c2VydmVyIiB0aXRsZT0iQ3JlYXRpbmcgYW4gQXBhY2hlIFRvbWNhdCBzZXJ2ZXIgYW5kIFdlYiBwcm9qZWN0Ii8+Ci0gICAgPC9lbnRyeT4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9IlRvbWNhdCBzZXJ2ZXIiPgotICAgIDxlbnRyeSBrZXl3b3JkPSJjcmVhdGluZyBzZXJ2ZXJzIGZvciBXZWIgc2VydmljZXMiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3R0b21jYXRzZXJ2Lmh0bWwjY3JlYXRpbmdhbmFwYWNoZXRvbWNhdHNlcnZlciIgdGl0bGU9IkNyZWF0aW5nIGFuIEFwYWNoZSBUb21jYXQgc2VydmVyIGFuZCBXZWIgcHJvamVjdCIvPgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci08L2luZGV4PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvcGx1Z2luLnByb3BlcnRpZXMgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODZmYjg3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBOTFNfTUVTU0FHRUZPUk1BVF9WQVIgCi0jIE5MU19FTkNPRElORz1VVEYtOCAKLQotcGx1Z2luTmFtZSA9IEF4aXMgV2ViIHNlcnZpY2VzIGRvY3VtZW50YXRpb24KLXBsdWdpblByb3ZpZGVyID0gRWNsaXBzZS5vcmcKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvcGx1Z2luLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGU1MTQwYi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9OTFMgVFlQRT0ib3JnLmVjbGlwc2UuaGVscC50b2MiPz4gCi08IS0tIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gLS0+Ci08cGx1Z2luPgotICAKLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI+Ci0JCTx0b2MgZmlsZT0id3NheGlzYnVpbGRfdG9jLnhtbCIgLz4KLSAgICAgICA8aW5kZXggcGF0aD0iaW5kZXgvIi8+Ci0JPC9leHRlbnNpb24+Ci0JCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC5pbmRleCI+Ci0gICAgICA8aW5kZXggZmlsZT0ib3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXJpbmRleC54bWwiLz4KLTwvZXh0ZW5zaW9uPgotPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci90YXNrcy90c2FtcGFwcGEuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdGFza3MvdHNhbXBhcHBhLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyMTg0NzcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci90YXNrcy90c2FtcGFwcGEuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICJ0YXNrLmR0ZCI+Ci08dGFzayBpZD0idHNhbXBhcHBhIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkdlbmVyYXRpbmcgYSA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIKLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IGNsaWVudCBwcm94eSBhbmQgYSBzYW1wbGUgYXBwbGljYXRpb24KLWZyb20gYSBXU0RMIGRvY3VtZW50IHVzaW5nIHRoZSBBeGlzIHJ1bi10aW1lIGVudmlyb25tZW50PC90aXRsZT4KLTx0aXRsZWFsdHM+Ci08c2VhcmNodGl0bGU+R2VuZXJhdGluZyBhIEphdmEgY2xpZW50IHByb3h5IGFuZCBhIHNhbXBsZSBhcHBsaWNhdGlvbiBmcm9tCi1hIFdTREwgZG9jdW1lbnQgdXNpbmcgdGhlIEF4aXMgcnVuLXRpbWUgZW52aXJvbm1lbnQ8L3NlYXJjaHRpdGxlPgotPC90aXRsZWFsdHM+Ci08c2hvcnRkZXNjPlRoZSBXZWIgU2VydmljZSBDbGllbnQgd2l6YXJkIGFzc2lzdHMgeW91IGluIGdlbmVyYXRpbmcgYSA8dG0gdG1jbGFzcz0ic3BlY2lhbCIKLXRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iIHRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IGJlYW4KLXByb3h5IGFuZCBhIHNhbXBsZSBhcHBsaWNhdGlvbi4gVGhlIHNhbXBsZSBXZWIgYXBwbGljYXRpb24gZGVtb25zdHJhdGVzIGhvdwotdG8gY29kZSBhIHByb3h5IGZpbGUuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPkF4aXMgcnVudGltZSBlbnZpcm9ubWVudDxpbmRleHRlcm0+V2ViIHNlcnZpY2UgY2xpZW50czwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPkF4aXMgcnVudGltZSBlbnZpcm9ubWVudDxpbmRleHRlcm0+V2ViIHNlcnZpY2UgY2xpZW50czwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08cHJlcmVxPjxwPlByZXJlcXVpc2l0ZXM6PC9wPjxvbD4KLTxsaSBjb25yZWY9InR3c2JlYW5hLmRpdGEjdHdzYmVhbmEvY3JlYXRldG9tY2F0bGluayI+PC9saT4KLTxsaT5EaXNjb3ZlciBhbmQgaW1wb3J0IGEgV1NETCBkb2N1bWVudCBpbnRvIHRoZSBXZWIgcHJvamVjdC4gWW91IGNhbiBvbmx5Ci11c2UgYSBXU0RMIGZpbGUgdGhhdCBjb250YWlucyBhIHNlcnZpY2UgZWxlbWVudC48L2xpPgotPC9vbD48L3ByZXJlcT4KLTxjb250ZXh0PlRvIGdlbmVyYXRlIGEgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBjbGllbnQgcHJveHkgYW5kIGEgc2FtcGxlIGFwcGxpY2F0aW9uCi1mcm9tIGEgZGlzY292ZXJlZCBXU0RMIGRvY3VtZW50OjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+U3dpdGNoIHRvIHRoZSBKMkVFIHBlcnNwZWN0aXZlICg8dWljb250cm9sPldpbmRvdyA+IE9wZW4gUGVyc3BlY3RpdmUKLT4gSjJFRTwvdWljb250cm9sPikuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgTmF2aWdhdG9yIHZpZXcsIHNlbGVjdCB0aGUgV2ViIHByb2plY3QgaW4gd2hpY2ggeW91IHdhbnQKLXRvIGdlbmVyYXRlIGEgc2FtcGxlIGFwcGxpY2F0aW9uLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+Q2xpY2sgIDx1aWNvbnRyb2w+RmlsZSA+IE5ldyA+IE90aGVyPC91aWNvbnRyb2w+LiBTZWxlY3QgIDx1aWNvbnRyb2w+V2ViCi1TZXJ2aWNlczwvdWljb250cm9sPiBpbiBvcmRlciB0byBkaXNwbGF5IHRoZSB2YXJpb3VzIFdlYiBzZXJ2aWNlIHdpemFyZHMuCi1TZWxlY3QgdGhlICA8dWljb250cm9sPldlYiBTZXJ2aWNlIENsaWVudDwvdWljb250cm9sPiB3aXphcmQuIENsaWNrICA8dWljb250cm9sPk5leHQ8L3VpY29udHJvbD4uPC9jbWQ+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPldlYiBTZXJ2aWNlcyBwYWdlOiA8L2NtZD4KLTxzdWJzdGVwcz4KLTxzdWJzdGVwPjxjbWQ+RW50ZXIgdGhlIFVSSSB0byB0aGUgV1NETCwgV1NJTCwgb3IgSFRNTCBmaWxlIHRoYXQgd2lsbCBiZSB1c2VkCi10byBnZW5lcmF0ZSB0aGUgY2xpZW50LjwvY21kPjwvc3Vic3RlcD4KLTxzdWJzdGVwPjxjbWQ+U2VsZWN0IHRoZSB0eXBlIG9mIHByb3h5IHRvIGJlIGdlbmVyYXRlZDwvY21kPjwvc3Vic3RlcD4KLTxzdWJzdGVwPjxjbWQ+U2VsZWN0IHRoZSBzdGFnZXMgb2YgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50IHRoYXQgeW91IHdhbnQKLXRvIGNvbXBsZXRlIHVzaW5nIHRoZSBzbGlkZXI6PC9jbWQ+PGluZm8+PHVsPgotPGxpPkRldmVsb3A6IHRoaXMgd2lsbCBkZXZlbG9wIHRoZSBXU0RMIGRlZmluaXRpb24gYW5kIGltcGxlbWVudGF0aW9uIG9mIHRoZQotV2ViIHNlcnZpY2UuIFRoaXMgaW5jbHVkZXMgc3VjaCB0YXNrcyBhcyBjcmVhdGluZyB0aGUgbW9kdWxlcyB3aGljaCB3aWxsIGNvbnRhaW4KLXRoZSBnZW5lcmF0ZWQgY29kZSBhbmQgSmF2YSBmaWxlcywgYXMgd2VsbCBhcyBjb3B5aW5nIHRoZSBBeGlzIEpBUnMuLjwvbGk+Ci08bGk+QXNzZW1ibGU6IHRoaXMgZW5zdXJlcyB0aGUgcHJvamVjdCB0aGF0IHdpbGwgaG9zdCB0aGUgV2ViIHNlcnZpY2Ugb3IgY2xpZW50Ci1nZXRzIGFzc29jaWF0ZWQgdG8gYW4gRUFSIHdoZW4gcmVxdWlyZWQgYnkgdGhlIHRhcmdldCBhcHBsaWNhdGlvbiBzZXJ2ZXIuPC9saT4KLTxsaT5EZXBsb3k6IHRoaXMgd2lsbCBjcmVhdGUgdGhlIGRlcGxveW1lbnQgY29kZSBmb3IgdGhlIHNlcnZpY2UuPC9saT4KLTxsaT5JbnN0YWxsOiB0aGlzIHdpbGwgaW5zdGFsbCBhbmQgY29uZmlndXJlIHRoZSBXZWIgbW9kdWxlIGFuZCBFQVJzIG9uIHRoZQotdGFyZ2V0IHNlcnZlci48L2xpPgotPGxpPlN0YXJ0OiB0aGlzIHdpbGwgc3RhcnQgdGhlIHNlcnZlciBvbmNlIHRoZSBzZXJ2aWNlIGhhcyBiZWVuIGluc3RhbGxlZAotb24gaXQuIFRoZSBzZXJ2ZXItY29uZmlnLndzZGQgZmlsZSB3aWxsIGJlIGdlbmVyYXRlZC48L2xpPgotPGxpPlRlc3Q6IHRoaXMgd2lsbCBwcm92aWRlIHZhcmlvdXMgb3B0aW9ucyBmb3IgdGVzdGluZyB0aGUgc2VydmljZSwgc3VjaAotYXMgdXNpbmcgdGhlIFdlYiBTZXJ2aWNlIEV4cGxvcmVyIG9yIHNhbXBsZSBKU1BzLjwvbGk+Ci08L3VsPjwvaW5mbz48L3N1YnN0ZXA+Ci08c3Vic3RlcD48Y21kPlNlbGVjdCB5b3VyIHNlcnZlcjogdGhlIGRlZmF1bHQgc2VydmVyIGlzIGRpc3BsYXllZC4gSWYgeW91Ci13YW50IHRvIGRlcGxveSB5b3VyIGNsaWVudCB0byBhIGRpZmZlcmVudCBzZXJ2ZXIgY2xpY2sgdGhlIGxpbmsgdG8gc3BlY2lmeQotYSBkaWZmZXJlbnQgc2VydmVyLjwvY21kPjwvc3Vic3RlcD4KLTxzdWJzdGVwPjxjbWQ+U2VsZWN0IHlvdXIgcnVudGltZTogdGhlIGRlZmF1bHQgcnVudGltZSBpcyBkaXNwbGF5ZWQuIElmIHlvdQotd2FudCB0byBkZXBsb3kgeW91ciBjbGllbnQgdG8gYSBkaWZmZXJlbnQgcnVudGltZSBjbGljayB0aGUgbGluayB0byBzcGVjaWZ5Ci1hIGRpZmZlcmVudCBydW50aW1lLjwvY21kPjwvc3Vic3RlcD4KLTxzdWJzdGVwPjxjbWQ+U2VsZWN0IHRoZSBjbGllbnQgcHJvamVjdDogdGhlIHByb2plY3QgY29udGFpbmluZyB0aGUgcHJvamVjdAotc2VsZWN0ZWQgaW4geW91ciB3b3Jrc3BhY2UgaXMgZGlzcGxheWVkLiBUbyBzZWxlY3QgYSBkaWZmZXJlbnQgcHJvamVjdCBhbmQKLUVBUiBjbGljayBvbiB0aGUgcHJvamVjdCBsaW5rLjwvY21kPjxpbmZvPkVuc3VyZSB0aGF0IHRoZSBwcm9qZWN0IHNlbGVjdGVkCi1hcyB0aGUgQ2xpZW50IFdlYiBQcm9qZWN0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBTZXJ2aWNlIFdlYiBQcm9qZWN0LCBvciB0aGUKLXNlcnZpY2Ugd2lsbCBiZSBvdmVyd3JpdHRlbiBieSB0aGUgY2xpZW50J3MgZ2VuZXJhdGVkIGFydGlmYWN0cy48L2luZm8+PC9zdWJzdGVwPgotPHN1YnN0ZXA+PGNtZD5Nb25pdG9yIHRoZSBXZWIgc2VydmljZTogdGhpcyB3aWxsIHNlbmQgdGhlIFdlYiBzZXJ2aWNlIHRyYWZmaWMKLXRocm91Z2ggdGhlIFRDUC9JUCBNb25pdG9yLCB3aGljaCBhbGxvd3MgeW91IHRvIHdhdGNoIHRoZSBTT0FQIHRyYWZmaWMgZ2VuZXJhdGVkCi1ieSB0aGUgV2ViIHNlcnZpY2UgYW5kIHRvIHRlc3QgdGhpcyB0cmFmZmljIGZvciBXUy1JIGNvbXBsaWFuY2UuIEFsdGVybmF0ZWx5Ci15b3UgY2FuIG1hbnVhbGx5IHNldCB1cCBhIFRDUC9JUCBtb25pdG9yIGFzIGRlc2NyaWJlZCBpbiA8eHJlZiBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3Rtb25pdG9yLmRpdGEiCi1zY29wZT0icGVlciI+VXNpbmcgdGhlIFRDUC9JUCBNb25pdG9yIHRvIHRlc3QgV2ViIHNlcnZpY2VzPC94cmVmPjwvY21kPjwvc3Vic3RlcD4KLTwvc3Vic3RlcHM+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPldlYiBTZXJ2aWNlIFByb3h5IHBhZ2U6IFRoaXMgcGFuZWwgc2hvd3MgdGhlIG9wdGlvbnMgZm9yIHRoZSBwcm94eS4KLUl0IGxpc3RzIHRoZSBmb2xkZXIgd2hlcmUgdGhlIHByb3h5IHdpbGwgYmUgZ2VuZXJhdGVkLCBhbmQgeW91IGNhbiBvcHRpb25hbGx5Ci1jcmVhdGUgY3VzdG9tIG1hcHBpbmdzIGJldHdlZW4gbmFtZXNwYWNlcyBhbmQgcGFja2FnZXMuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5XZWIgU2VydmljZSBOYW1lc3BhY2UgdG8gUGFja2FnZSBNYXBwaW5ncyBwYWdlOiBpZiB5b3Ugc2VsZWN0ZWQKLSA8dWljb250cm9sPkRlZmluZSBjdXN0b20gbWFwcGluZyBmb3IgbmFtZXNwYWNlIHRvIHBhY2thZ2U8L3VpY29udHJvbD4gb24KLXRoZSBwcmV2aW91cyBwYWdlLCB5b3UgY2FuIGVudGVyIHlvdXIgY3VzdG9tIG1hcHBpbmcgcGFpcnMgb24gdGhpcyBwYWdlIGJ5Ci1jbGlja2luZyAgPHVpY29udHJvbD5BZGQ8L3VpY29udHJvbD4uIEFsdGVybmF0ZWx5LCB5b3UgY2FuIGNsaWNrICA8Yj5JbXBvcnQ8L2I+IHRvCi1pbXBvcnQgY3VzdG9tIG1hcHBpbmcgcGFpcnMgZnJvbSBhICA8c3lzdGVtb3V0cHV0Pi5wcm9wZXJ0aWVzPC9zeXN0ZW1vdXRwdXQ+IGZpbGUuCi1UaGUgY29udGVudCBvZiB0aGUgcHJvcGVydGllcyBmaWxlIG11c3QgYmUgb2YgdGhlIGZvcm1hdCAgPGNvZGVwaD48dmFybmFtZT5uYW1lc3BhY2U9cGFja2FnZTwvdmFybmFtZT48L2NvZGVwaD4uPC9jbWQ+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPldlYiBTZXJ2aWNlIENsaWVudCBUZXN0IHBhZ2U6IFRoaXMgcGFnZSBkaXNwbGF5cyBpZiB5b3Ugc2VsZWN0ZWQKLXRvIHRlc3QgeW91ciBjbGllbnQuIFNlbGVjdCB0aGUgdGVzdCBmYWNpbGl0eSB0aGF0IHlvdSB3aWxsIHVzZSB0byB0ZXN0IHRoZQotcHJveHksIGFuZCB0aGUgbWV0aG9kcyB0aGF0IHlvdSB3YW50IGluY2x1ZGVkIGluIHRoZSBwcm94eS4gTm90ZSB0aGF0IHRoZQotVW5pdmVyc2FsIFRlc3QgQ2xpZW50IChVVEMpIGlzIG9ubHkgY29tcGF0aWJsZSB3aXRoIFdlYiBzZXJ2aWNlIGNsaWVudHMgZGVwbG95ZWQKLW9uIDx0bSB0bWNsYXNzPSJpYm0iIHRtb3duZXI9IklCTSBDb3Jwb3JhdGlvbiIgdG10eXBlPSJyZWciIHRyYWRlbWFyaz0iV2ViU3BoZXJlIj5XZWJTcGhlcmU8L3RtPiBzZXJ2ZXJzLjwvY21kPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5DbGljayAgPHVpY29udHJvbD5GaW5pc2g8L3VpY29udHJvbD4uIElmIHlvdSBoYXZlIHNlbGVjdGVkIHRvIHRlc3QKLXRoZSBwcm94eSwgdGhlIHRlc3QgY2xpZW50IHdpbGwgb3BlbiBpbiBhIGJyb3dzZXIgd2luZG93LjwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08cmVzdWx0PjxwPlRoZSBnZW5lcmF0ZWQgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBiZWFuIHByb3h5IHByb3ZpZGVzIGEgcmVtb3RlIHByb2NlZHVyZQotY2FsbCBpbnRlcmZhY2UgdG8gdGhlIFdlYiBzZXJ2aWNlLiBUaGUgc2FtcGxlIFdlYiBhcHBsaWNhdGlvbiBkZW1vbnN0cmF0ZXMKLWhvdyB0byBjb2RlIHRoZSBwcm94eSBmaWxlLjwvcD48cD5PbmNlIHlvdSBoYXZlIGdlbmVyYXRlZCB5b3VyIDx0bSB0bWNsYXNzPSJzcGVjaWFsIgotdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIgdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gY2xpZW50Ci1wcm94eSwgeW91IG1heSB0ZXN0IHRoZSBtZXRob2RzIG9mIHRoZSBXZWIgc2VydmljZSB0aHJvdWdoIHRoZSBwcm94eSB1c2luZwotV2ViIFNlcnZpY2VzIHNhbXBsZSBKU1BzIG9yIHRoZSBVbml2ZXJzYWwgdGVzdCBjbGllbnQuPC9wPjx1bCBvdXRwdXRjbGFzcz0id3NjbGllbnR0ZXN0b3B0aW9ucyI+Ci08bGk+SWYgeW91IGhhdmUgc2VsZWN0ZWQgdG8gdGVzdCB0aGUgZ2VuZXJhdGVkIHByb3h5IHVzaW5nIFdlYiBzZXJ2aWNlIEpTUHMsCi10aGUgcHJveHkgaXMgbGF1bmNoZWQgaW4gYSBXZWIgYnJvd3NlciBhdCB0aGUgZm9sbG93aW5nIFVSTDogPGNvZGVwaD5odHRwOi8vbG9jYWxob3N0OiA8dmFybmFtZT5wb3J0PC92YXJuYW1lPi8gPHZhcm5hbWU+V2ViUHJvamVjdDwvdmFybmFtZT5DbGllbnQvc2FtcGxlPGkKLT5CZWFuTmFtZTwvaT4vIDx2YXJuYW1lPldlYlNlcnZpY2VOYW1lPC92YXJuYW1lPi9UZXN0Q2xpZW50LmpzcDwvY29kZXBoPiBZb3UKLWNhbiB1c2UgdGhpcyBzYW1wbGUgYXBwbGljYXRpb24gdG8gdGVzdCB0aGUgV2ViIHNlcnZpY2UgYnkgc2VsZWN0aW5nIGEgbWV0aG9kLAotZW50ZXJpbmcgYSB2YWx1ZSBmb3IgdGhlIG1ldGhvZCwgYW5kIGNsaWNraW5nICA8dWljb250cm9sPkludm9rZTwvdWljb250cm9sPi4KLVRoZSByZXN1bHQgb2YgdGhlIG1ldGhvZCB3aWxsIGRpc3BsYXkgaW4gdGhlIHJlc3VsdHMgcGFuZS48L2xpPgotPGxpPklmIHlvdSBoYXZlIHNlbGVjdGVkIHRvIHRlc3QgdGhlIFdlYiBzZXJ2aWNlIHVzaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIsCi10aGUgRXhwbG9yZXIgd2lsbCBvcGVuLiBTZWxlY3QgdGhlIG9wZXJhdGlvbiB5b3Ugd2FudCB0byB0ZXN0LCBlbnRlciB0aGUgcmVxdWlyZWQKLWluZm9ybWF0aW9uLCBhbmQgY2xpY2sgIDxiPkdvPC9iPi4gVGhlIHJlc3VsdCB3aWxsIGRpc3BsYXkgaW4gdGhlIFN0YXR1cyBwYW5lLjwvbGk+Ci08L3VsPjxwPkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGNyZWF0aW5nIGEgV2ViIHByb2plY3QsIHJlZmVyIHRvIHRoZSBXZWIgYXBwbGljYXRpb24KLWRldmVsb3BtZW50IGRvY3VtZW50YXRpb24uPC9wPjwvcmVzdWx0PgotPC90YXNrYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+IFRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHVkZGlleHAuZGl0YSIKLXNjb3BlPSJwZWVyIj48bGlua3RleHQ+IFVzaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2xpbmt0ZXh0PjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgUmVmZXJlbmNlPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9yZWYvcndzZGwuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PldTREwgZG9jdW1lbnRzPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci90YXNrcy90c2FtcGFwcGEuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdGFza3MvdHNhbXBhcHBhLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyYTBlZGIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci90YXNrcy90c2FtcGFwcGEuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE4OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwNyIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJHZW5lcmF0aW5nIGEgSmF2YSBjbGllbnQgcHJveHkgYW5kIGEgc2FtcGxlIGFwcGxpY2F0aW9uIGZyb20gYSBXU0RMIGRvY3VtZW50IHVzaW5nIHRoZSBBeGlzIHJ1bi10aW1lIGVudmlyb25tZW50IiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IlRoZSBXZWIgU2VydmljZSBDbGllbnQgd2l6YXJkIGFzc2lzdHMgeW91IGluIGdlbmVyYXRpbmcgYSBKYXZhIGJlYW4gcHJveHkgYW5kIGEgc2FtcGxlIGFwcGxpY2F0aW9uLiBUaGUgc2FtcGxlIFdlYiBhcHBsaWNhdGlvbiBkZW1vbnN0cmF0ZXMgaG93IHRvIGNvZGUgYSBwcm94eSBmaWxlLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgV2ViIFNlcnZpY2UgQ2xpZW50IHdpemFyZCBhc3Npc3RzIHlvdSBpbiBnZW5lcmF0aW5nIGEgSmF2YSBiZWFuIHByb3h5IGFuZCBhIHNhbXBsZSBhcHBsaWNhdGlvbi4gVGhlIHNhbXBsZSBXZWIgYXBwbGljYXRpb24gZGVtb25zdHJhdGVzIGhvdyB0byBjb2RlIGEgcHJveHkgZmlsZS4iIC8+Ci08bWV0YSBjb250ZW50PSJBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQsIFdlYiBzZXJ2aWNlIGNsaWVudHMsIFdlYiBzZXJ2aWNlcyIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IkF4aXMgcnVudGltZSBlbnZpcm9ubWVudCwgV2ViIHNlcnZpY2UgY2xpZW50cywgV2ViIHNlcnZpY2VzIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY2F4aXN0b3Zlci5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHVkZGlleHAuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yd3NkbC5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRzYW1wYXBwYSIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkdlbmVyYXRpbmcgYSBKYXZhIGNsaWVudCBwcm94eSBhbmQgYSBzYW1wbGUgYXBwbGljYXRpb24gZnJvbQotYSBXU0RMIGRvY3VtZW50IHVzaW5nIHRoZSBBeGlzIHJ1bi10aW1lIGVudmlyb25tZW50PC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0c2FtcGFwcGEiPjxhIG5hbWU9InRzYW1wYXBwYSI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+R2VuZXJhdGluZyBhIEphdmEgY2xpZW50IHByb3h5IGFuZCBhIHNhbXBsZSBhcHBsaWNhdGlvbgotZnJvbSBhIFdTREwgZG9jdW1lbnQgdXNpbmcgdGhlIEF4aXMgcnVuLXRpbWUgZW52aXJvbm1lbnQ8L2gxPgotCi0KLQotCi08ZGl2PjxwPlRoZSBXZWIgU2VydmljZSBDbGllbnQgd2l6YXJkIGFzc2lzdHMgeW91IGluIGdlbmVyYXRpbmcgYSBKYXZh4oSiIGJlYW4KLXByb3h5IGFuZCBhIHNhbXBsZSBhcHBsaWNhdGlvbi4gVGhlIHNhbXBsZSBXZWIgYXBwbGljYXRpb24gZGVtb25zdHJhdGVzIGhvdwotdG8gY29kZSBhIHByb3h5IGZpbGUuPC9wPgotCi08ZGl2IGNsYXNzPSJwIj48cD5QcmVyZXF1aXNpdGVzOjwvcD4KLTxvbD4KLTxsaT5JZiB5b3UgYXJlIHVzaW5nIHRoZSBBcGFjaGUgSmFrYXJ0YSBUb21jYXQgc2VydmxldAotY29udGFpbmVyIGFzIHlvdXIgc2VydmVyLCB5b3UgbXVzdCBpbnN0YWxsIGl0LCBjb25maWd1cmUgYW4gaW5zdGFuY2Ugb2YgaXQsCi1hbmQgY3JlYXRlIGEgV2ViIHByb2plY3QgdGFyZ2V0ZWQgdG8gaXQgYXMgZGVzY3JpYmVkIGluIDxhIGhyZWY9InR0b21jYXRzZXJ2Lmh0bWwiPkNyZWF0aW5nIGFuIEFwYWNoZSBUb21jYXQgc2VydmVyIGFuZCBXZWIgcHJvamVjdDwvYT48L2xpPgotCi08bGk+RGlzY292ZXIgYW5kIGltcG9ydCBhIFdTREwgZG9jdW1lbnQgaW50byB0aGUgV2ViIHByb2plY3QuIFlvdSBjYW4gb25seQotdXNlIGEgV1NETCBmaWxlIHRoYXQgY29udGFpbnMgYSBzZXJ2aWNlIGVsZW1lbnQuPC9saT4KLQotPC9vbD4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj5UbyBnZW5lcmF0ZSBhIEphdmEgY2xpZW50IHByb3h5IGFuZCBhIHNhbXBsZSBhcHBsaWNhdGlvbgotZnJvbSBhIGRpc2NvdmVyZWQgV1NETCBkb2N1bWVudDo8L2Rpdj4KLQotPG9sPgotPGxpPjxzcGFuPlN3aXRjaCB0byB0aGUgSjJFRSBwZXJzcGVjdGl2ZSAoPHNwYW4gY2xhc3M9InVpY29udHJvbCI+V2luZG93ICZndDsgT3BlbiBQZXJzcGVjdGl2ZQotJmd0OyBKMkVFPC9zcGFuPikuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5JbiB0aGUgTmF2aWdhdG9yIHZpZXcsIHNlbGVjdCB0aGUgV2ViIHByb2plY3QgaW4gd2hpY2ggeW91IHdhbnQKLXRvIGdlbmVyYXRlIGEgc2FtcGxlIGFwcGxpY2F0aW9uLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+Q2xpY2sgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkZpbGUgJmd0OyBOZXcgJmd0OyBPdGhlcjwvc3Bhbj4uIFNlbGVjdCAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+V2ViCi1TZXJ2aWNlczwvc3Bhbj4gaW4gb3JkZXIgdG8gZGlzcGxheSB0aGUgdmFyaW91cyBXZWIgc2VydmljZSB3aXphcmRzLgotU2VsZWN0IHRoZSAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+V2ViIFNlcnZpY2UgQ2xpZW50PC9zcGFuPiB3aXphcmQuIENsaWNrICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5OZXh0PC9zcGFuPi48L3NwYW4+Ci08L2xpPgotCi08bGk+PHNwYW4+V2ViIFNlcnZpY2VzIHBhZ2U6IDwvc3Bhbj4KLTxvbCB0eXBlPSJhIj4KLTxsaSBjbGFzcz0ic3Vic3RlcGV4cGFuZCI+PHNwYW4+RW50ZXIgdGhlIFVSSSB0byB0aGUgV1NETCwgV1NJTCwgb3IgSFRNTCBmaWxlIHRoYXQgd2lsbCBiZSB1c2VkCi10byBnZW5lcmF0ZSB0aGUgY2xpZW50Ljwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN1YnN0ZXBleHBhbmQiPjxzcGFuPlNlbGVjdCB0aGUgdHlwZSBvZiBwcm94eSB0byBiZSBnZW5lcmF0ZWQ8L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdWJzdGVwZXhwYW5kIj48c3Bhbj5TZWxlY3QgdGhlIHN0YWdlcyBvZiBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQgdGhhdCB5b3Ugd2FudAotdG8gY29tcGxldGUgdXNpbmcgdGhlIHNsaWRlcjo8L3NwYW4+IDx1bD4KLTxsaT5EZXZlbG9wOiB0aGlzIHdpbGwgZGV2ZWxvcCB0aGUgV1NETCBkZWZpbml0aW9uIGFuZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUKLVdlYiBzZXJ2aWNlLiBUaGlzIGluY2x1ZGVzIHN1Y2ggdGFza3MgYXMgY3JlYXRpbmcgdGhlIG1vZHVsZXMgd2hpY2ggd2lsbCBjb250YWluCi10aGUgZ2VuZXJhdGVkIGNvZGUgYW5kIEphdmEgZmlsZXMsIGFzIHdlbGwgYXMgY29weWluZyB0aGUgQXhpcyBKQVJzLi48L2xpPgotCi08bGk+QXNzZW1ibGU6IHRoaXMgZW5zdXJlcyB0aGUgcHJvamVjdCB0aGF0IHdpbGwgaG9zdCB0aGUgV2ViIHNlcnZpY2Ugb3IgY2xpZW50Ci1nZXRzIGFzc29jaWF0ZWQgdG8gYW4gRUFSIHdoZW4gcmVxdWlyZWQgYnkgdGhlIHRhcmdldCBhcHBsaWNhdGlvbiBzZXJ2ZXIuPC9saT4KLQotPGxpPkRlcGxveTogdGhpcyB3aWxsIGNyZWF0ZSB0aGUgZGVwbG95bWVudCBjb2RlIGZvciB0aGUgc2VydmljZS48L2xpPgotCi08bGk+SW5zdGFsbDogdGhpcyB3aWxsIGluc3RhbGwgYW5kIGNvbmZpZ3VyZSB0aGUgV2ViIG1vZHVsZSBhbmQgRUFScyBvbiB0aGUKLXRhcmdldCBzZXJ2ZXIuPC9saT4KLQotPGxpPlN0YXJ0OiB0aGlzIHdpbGwgc3RhcnQgdGhlIHNlcnZlciBvbmNlIHRoZSBzZXJ2aWNlIGhhcyBiZWVuIGluc3RhbGxlZAotb24gaXQuIFRoZSBzZXJ2ZXItY29uZmlnLndzZGQgZmlsZSB3aWxsIGJlIGdlbmVyYXRlZC48L2xpPgotCi08bGk+VGVzdDogdGhpcyB3aWxsIHByb3ZpZGUgdmFyaW91cyBvcHRpb25zIGZvciB0ZXN0aW5nIHRoZSBzZXJ2aWNlLCBzdWNoCi1hcyB1c2luZyB0aGUgV2ViIFNlcnZpY2UgRXhwbG9yZXIgb3Igc2FtcGxlIEpTUHMuPC9saT4KLQotPC91bD4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3Vic3RlcGV4cGFuZCI+PHNwYW4+U2VsZWN0IHlvdXIgc2VydmVyOiB0aGUgZGVmYXVsdCBzZXJ2ZXIgaXMgZGlzcGxheWVkLiBJZiB5b3UKLXdhbnQgdG8gZGVwbG95IHlvdXIgY2xpZW50IHRvIGEgZGlmZmVyZW50IHNlcnZlciBjbGljayB0aGUgbGluayB0byBzcGVjaWZ5Ci1hIGRpZmZlcmVudCBzZXJ2ZXIuPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3Vic3RlcGV4cGFuZCI+PHNwYW4+U2VsZWN0IHlvdXIgcnVudGltZTogdGhlIGRlZmF1bHQgcnVudGltZSBpcyBkaXNwbGF5ZWQuIElmIHlvdQotd2FudCB0byBkZXBsb3kgeW91ciBjbGllbnQgdG8gYSBkaWZmZXJlbnQgcnVudGltZSBjbGljayB0aGUgbGluayB0byBzcGVjaWZ5Ci1hIGRpZmZlcmVudCBydW50aW1lLjwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN1YnN0ZXBleHBhbmQiPjxzcGFuPlNlbGVjdCB0aGUgY2xpZW50IHByb2plY3Q6IHRoZSBwcm9qZWN0IGNvbnRhaW5pbmcgdGhlIHByb2plY3QKLXNlbGVjdGVkIGluIHlvdXIgd29ya3NwYWNlIGlzIGRpc3BsYXllZC4gVG8gc2VsZWN0IGEgZGlmZmVyZW50IHByb2plY3QgYW5kCi1FQVIgY2xpY2sgb24gdGhlIHByb2plY3QgbGluay48L3NwYW4+IEVuc3VyZSB0aGF0IHRoZSBwcm9qZWN0IHNlbGVjdGVkCi1hcyB0aGUgQ2xpZW50IFdlYiBQcm9qZWN0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBTZXJ2aWNlIFdlYiBQcm9qZWN0LCBvciB0aGUKLXNlcnZpY2Ugd2lsbCBiZSBvdmVyd3JpdHRlbiBieSB0aGUgY2xpZW50J3MgZ2VuZXJhdGVkIGFydGlmYWN0cy48L2xpPgotCi08bGkgY2xhc3M9InN1YnN0ZXBleHBhbmQiPjxzcGFuPk1vbml0b3IgdGhlIFdlYiBzZXJ2aWNlOiB0aGlzIHdpbGwgc2VuZCB0aGUgV2ViIHNlcnZpY2UgdHJhZmZpYwotdGhyb3VnaCB0aGUgVENQL0lQIE1vbml0b3IsIHdoaWNoIGFsbG93cyB5b3UgdG8gd2F0Y2ggdGhlIFNPQVAgdHJhZmZpYyBnZW5lcmF0ZWQKLWJ5IHRoZSBXZWIgc2VydmljZSBhbmQgdG8gdGVzdCB0aGlzIHRyYWZmaWMgZm9yIFdTLUkgY29tcGxpYW5jZS4gQWx0ZXJuYXRlbHkKLXlvdSBjYW4gbWFudWFsbHkgc2V0IHVwIGEgVENQL0lQIG1vbml0b3IgYXMgZGVzY3JpYmVkIGluIDxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvdGFza3MvdG1vbml0b3IuaHRtbCI+VXNpbmcgdGhlIFRDUC9JUCBNb25pdG9yIHRvIHRlc3QgV2ViIHNlcnZpY2VzPC9hPjwvc3Bhbj48L2xpPgotCi08L29sPgotCi08L2xpPgotCi08bGk+PHNwYW4+V2ViIFNlcnZpY2UgUHJveHkgcGFnZTogVGhpcyBwYW5lbCBzaG93cyB0aGUgb3B0aW9ucyBmb3IgdGhlIHByb3h5LgotSXQgbGlzdHMgdGhlIGZvbGRlciB3aGVyZSB0aGUgcHJveHkgd2lsbCBiZSBnZW5lcmF0ZWQsIGFuZCB5b3UgY2FuIG9wdGlvbmFsbHkKLWNyZWF0ZSBjdXN0b20gbWFwcGluZ3MgYmV0d2VlbiBuYW1lc3BhY2VzIGFuZCBwYWNrYWdlcy48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPldlYiBTZXJ2aWNlIE5hbWVzcGFjZSB0byBQYWNrYWdlIE1hcHBpbmdzIHBhZ2U6IGlmIHlvdSBzZWxlY3RlZAotIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkRlZmluZSBjdXN0b20gbWFwcGluZyBmb3IgbmFtZXNwYWNlIHRvIHBhY2thZ2U8L3NwYW4+IG9uCi10aGUgcHJldmlvdXMgcGFnZSwgeW91IGNhbiBlbnRlciB5b3VyIGN1c3RvbSBtYXBwaW5nIHBhaXJzIG9uIHRoaXMgcGFnZSBieQotY2xpY2tpbmcgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkFkZDwvc3Bhbj4uIEFsdGVybmF0ZWx5LCB5b3UgY2FuIGNsaWNrICA8c3Ryb25nPkltcG9ydDwvc3Ryb25nPiB0bwotaW1wb3J0IGN1c3RvbSBtYXBwaW5nIHBhaXJzIGZyb20gYSAgPHR0IGNsYXNzPSJzeXNvdXQiPi5wcm9wZXJ0aWVzPC90dD4gZmlsZS4KLVRoZSBjb250ZW50IG9mIHRoZSBwcm9wZXJ0aWVzIGZpbGUgbXVzdCBiZSBvZiB0aGUgZm9ybWF0ICA8c2FtcCBjbGFzcz0iY29kZXBoIj48dmFyIGNsYXNzPSJ2YXJuYW1lIj5uYW1lc3BhY2U9cGFja2FnZTwvdmFyPjwvc2FtcD4uPC9zcGFuPgotPC9saT4KLQotPGxpPjxzcGFuPldlYiBTZXJ2aWNlIENsaWVudCBUZXN0IHBhZ2U6IFRoaXMgcGFnZSBkaXNwbGF5cyBpZiB5b3Ugc2VsZWN0ZWQKLXRvIHRlc3QgeW91ciBjbGllbnQuIFNlbGVjdCB0aGUgdGVzdCBmYWNpbGl0eSB0aGF0IHlvdSB3aWxsIHVzZSB0byB0ZXN0IHRoZQotcHJveHksIGFuZCB0aGUgbWV0aG9kcyB0aGF0IHlvdSB3YW50IGluY2x1ZGVkIGluIHRoZSBwcm94eS4gTm90ZSB0aGF0IHRoZQotVW5pdmVyc2FsIFRlc3QgQ2xpZW50IChVVEMpIGlzIG9ubHkgY29tcGF0aWJsZSB3aXRoIFdlYiBzZXJ2aWNlIGNsaWVudHMgZGVwbG95ZWQKLW9uIFdlYlNwaGVyZTxzdXA+wq48L3N1cD4gc2VydmVycy48L3NwYW4+Ci08L2xpPgotCi08bGk+PHNwYW4+Q2xpY2sgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkZpbmlzaDwvc3Bhbj4uIElmIHlvdSBoYXZlIHNlbGVjdGVkIHRvIHRlc3QKLXRoZSBwcm94eSwgdGhlIHRlc3QgY2xpZW50IHdpbGwgb3BlbiBpbiBhIGJyb3dzZXIgd2luZG93Ljwvc3Bhbj48L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UaGUgZ2VuZXJhdGVkIEphdmEgYmVhbiBwcm94eSBwcm92aWRlcyBhIHJlbW90ZSBwcm9jZWR1cmUKLWNhbGwgaW50ZXJmYWNlIHRvIHRoZSBXZWIgc2VydmljZS4gVGhlIHNhbXBsZSBXZWIgYXBwbGljYXRpb24gZGVtb25zdHJhdGVzCi1ob3cgdG8gY29kZSB0aGUgcHJveHkgZmlsZS48L3A+Ci08cD5PbmNlIHlvdSBoYXZlIGdlbmVyYXRlZCB5b3VyIEphdmEgY2xpZW50Ci1wcm94eSwgeW91IG1heSB0ZXN0IHRoZSBtZXRob2RzIG9mIHRoZSBXZWIgc2VydmljZSB0aHJvdWdoIHRoZSBwcm94eSB1c2luZwotV2ViIFNlcnZpY2VzIHNhbXBsZSBKU1BzIG9yIHRoZSBVbml2ZXJzYWwgdGVzdCBjbGllbnQuPC9wPgotPHVsIGNsYXNzPSJ3c2NsaWVudHRlc3RvcHRpb25zIj4KLTxsaT5JZiB5b3UgaGF2ZSBzZWxlY3RlZCB0byB0ZXN0IHRoZSBnZW5lcmF0ZWQgcHJveHkgdXNpbmcgV2ViIHNlcnZpY2UgSlNQcywKLXRoZSBwcm94eSBpcyBsYXVuY2hlZCBpbiBhIFdlYiBicm93c2VyIGF0IHRoZSBmb2xsb3dpbmcgVVJMOiA8c2FtcCBjbGFzcz0iY29kZXBoIj5odHRwOi8vbG9jYWxob3N0OiA8dmFyIGNsYXNzPSJ2YXJuYW1lIj5wb3J0PC92YXI+LyA8dmFyIGNsYXNzPSJ2YXJuYW1lIj5XZWJQcm9qZWN0PC92YXI+Q2xpZW50L3NhbXBsZTxlbT5CZWFuTmFtZTwvZW0+LyA8dmFyIGNsYXNzPSJ2YXJuYW1lIj5XZWJTZXJ2aWNlTmFtZTwvdmFyPi9UZXN0Q2xpZW50LmpzcDwvc2FtcD4gWW91Ci1jYW4gdXNlIHRoaXMgc2FtcGxlIGFwcGxpY2F0aW9uIHRvIHRlc3QgdGhlIFdlYiBzZXJ2aWNlIGJ5IHNlbGVjdGluZyBhIG1ldGhvZCwKLWVudGVyaW5nIGEgdmFsdWUgZm9yIHRoZSBtZXRob2QsIGFuZCBjbGlja2luZyAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+SW52b2tlPC9zcGFuPi4KLVRoZSByZXN1bHQgb2YgdGhlIG1ldGhvZCB3aWxsIGRpc3BsYXkgaW4gdGhlIHJlc3VsdHMgcGFuZS48L2xpPgotCi08bGk+SWYgeW91IGhhdmUgc2VsZWN0ZWQgdG8gdGVzdCB0aGUgV2ViIHNlcnZpY2UgdXNpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciwKLXRoZSBFeHBsb3JlciB3aWxsIG9wZW4uIFNlbGVjdCB0aGUgb3BlcmF0aW9uIHlvdSB3YW50IHRvIHRlc3QsIGVudGVyIHRoZSByZXF1aXJlZAotaW5mb3JtYXRpb24sIGFuZCBjbGljayAgPHN0cm9uZz5Hbzwvc3Ryb25nPi4gVGhlIHJlc3VsdCB3aWxsIGRpc3BsYXkgaW4gdGhlIFN0YXR1cyBwYW5lLjwvbGk+Ci0KLTwvdWw+Ci08cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBjcmVhdGluZyBhIFdlYiBwcm9qZWN0LCByZWZlciB0byB0aGUgV2ViIGFwcGxpY2F0aW9uCi1kZXZlbG9wbWVudCBkb2N1bWVudGF0aW9uLjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImZhbWlseWxpbmtzIj4KLTxkaXYgY2xhc3M9InBhcmVudGxpbmsiPjxzdHJvbmc+UGFyZW50IHRvcGljOjwvc3Ryb25nPiA8YSBocmVmPSIuLi9jb25jZXB0cy9jYXhpc3RvdmVyLmh0bWwiIHRpdGxlPSJUaGlzIHJ1bi10aW1lIGVudmlyb25tZW50IGlzIGZvciB1c2VycyB3aG8gcHJlZmVyIHRvIGRldmVsb3AgZm9yIHRoZSBvcGVuIEFwYWNoZSBBeGlzIHBsYXRmb3JtLiBJdCBpcyBmb3Igbm9uLXByb2R1Y3Rpb24gdXNlIG9ubHkuIEF4aXMgaXMgdGhlIHRoaXJkIGdlbmVyYXRpb24gb2YgdGhlIEFwYWNoZSBTT0FQIGltcGxlbWVudGF0aW9uLiBJdCBldm9sdmVkIGZyb20gQXBhY2hlIFNPQVAgdG8gbWFrZSB0aGUgU09BUCBlbmdpbmUgbW9yZSBmbGV4aWJsZSwgY29uZmlndXJhYmxlLCBhbmQgYWJsZSB0byBoYW5kbGUgYm90aCBTT0FQIGFuZCB0aGUgdXBjb21pbmcgWE1MIFByb3RvY29sIHNwZWNpZmljYXRpb24gZnJvbSB0aGUgVzNDIG9wZW4tc291cmNlIGVmZm9ydC4iPkNyZWF0aW5nIFdlYiBzZXJ2aWNlcyB3aXRoIHRoZSBBcGFjaGUgQXhpcyBydW4tdGltZSBlbnZpcm9ubWVudDwvYT48L2Rpdj4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIENvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmh0bWwiPiBUb29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWwiPldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dWRkaWV4cC5odG1sIj4gVXNpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBSZWZlcmVuY2U8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvcmVmL3J3c2RsLmh0bWwiPldTREwgZG9jdW1lbnRzPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3Rhc2tzL3Rza2x3c2RsYS5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci90YXNrcy90c2tsd3NkbGEuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWVlYzk0MS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3Rhc2tzL3Rza2x3c2RsYS5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsMTI0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iCi0gIi4uLy4uL2R0ZC90YXNrLmR0ZCI+Ci08dGFzayBpZD0idHNrbHdzZGxhIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkNyZWF0aW5nIGEgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iIHRtdHlwZT0idG0iCi10cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBiZWFuIHNrZWxldG9uIGZyb20gYSBXU0RMIGRvY3VtZW50IHVzaW5nIHRoZSBBcGFjaGUKLUF4aXMgcnVuLXRpbWUgZW52aXJvbm1lbnQ8L3RpdGxlPgotPHRpdGxlYWx0cz4KLTxzZWFyY2h0aXRsZT5DcmVhdGluZyBhIEphdmEgYmVhbiBza2VsZXRvbiBmcm9tIGEgV1NETCBkb2N1bWVudCB1c2luZyB0aGUKLUFwYWNoZSBBeGlzIHJ1bi10aW1lIGVudmlyb25tZW50PC9zZWFyY2h0aXRsZT4KLTwvdGl0bGVhbHRzPgotPHNob3J0ZGVzYz5UaGUgV2ViIHNlcnZpY2Ugd2l6YXJkIGFzc2lzdHMgeW91IGluIGNyZWF0aW5nIGEgc2tlbGV0b24gYmVhbgotZnJvbSBhbiBleGlzdGluZyBXU0RMIGRvY3VtZW50LiBUaGUgc2tlbGV0b24gYmVhbiBjb250YWlucyBhIHNldCBvZiBtZXRob2RzCi10aGF0IGNvcnJlc3BvbmQgdG8gdGhlIG9wZXJhdGlvbnMgZGVzY3JpYmVkIGluIHRoZSBXU0RMIGRvY3VtZW50LiBXaGVuIHRoZQotYmVhbiBpcyBjcmVhdGVkLCBlYWNoIG1ldGhvZCBoYXMgYSB0cml2aWFsIGltcGxlbWVudGF0aW9uIHRoYXQgeW91IHJlcGxhY2UKLWJ5IGVkaXRpbmcgdGhlIGJlYW4uPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPkF4aXMgcnVudGltZSBlbnZpcm9ubWVudDxpbmRleHRlcm0+c2tlbGV0b24gV2ViIHNlcnZpY2VzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+QXhpcyBydW50aW1lIGVudmlyb25tZW50PGluZGV4dGVybT5za2VsZXRvbiBXZWIgc2VydmljZXM8L2luZGV4dGVybT48L2luZGV4dGVybT48L2luZGV4dGVybT4KLTwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPHRhc2tib2R5PgotPHByZXJlcT48cD5QcmVyZXF1aXNpdGVzOjwvcD48b2w+Ci08bGkgY29ucmVmPSJ0d3NiZWFuYS5kaXRhI3R3c2JlYW5hL2NyZWF0ZXRvbWNhdGxpbmsiPjwvbGk+Ci08bGk+Q3JlYXRlIG9yIGltcG9ydCBhIFdTREwgZmlsZSBpbnRvIHRoZSBXZWIgQ29udGVudCBmb2xkZXIgb2YgdGhlIFdlYiBwcm9qZWN0LgotWW91IGNhbiBvbmx5IHVzZSBhIFdTREwgZmlsZSB0aGF0IGNvbnRhaW5zIGEgc2VydmljZSBlbGVtZW50LjwvbGk+Ci08L29sPjwvcHJlcmVxPgotPGNvbnRleHQ+VG8gY3JlYXRlIGEgV2ViIHNlcnZpY2UgZnJvbSBhIFdTREwgZmlsZSB1c2luZyB0aGUgQXBhY2hlIEF4aXMgcnVuLXRpbWUKLWVudmlyb25tZW50OjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+U3dpdGNoIHRvIHRoZSBKMkVFIHBlcnNwZWN0aXZlICg8dWljb250cm9sPldpbmRvdyA+IE9wZW4gUGVyc3BlY3RpdmUKLT4gSjJFRTwvdWljb250cm9sPikuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgUHJvamVjdCBFeHBsb3JlciB2aWV3LCBzZWxlY3QgdGhlIFdTREwgZmlsZSB0aGF0IHlvdSBjcmVhdGVkCi1vciBpbXBvcnRlZCBpbnRvIHRoZSBXZWIgQ29udGVudCBmb2xkZXIgb2YgeW91ciBXZWIgcHJvamVjdC48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkNsaWNrICA8dWljb250cm9sPkZpbGUgPiBOZXcgPiBPdGhlcjwvdWljb250cm9sPi4gU2VsZWN0ICA8dWljb250cm9sPldlYgotU2VydmljZXM8L3VpY29udHJvbD4gaW4gb3JkZXIgdG8gZGlzcGxheSB0aGUgdmFyaW91cyBXZWIgc2VydmljZSB3aXphcmRzLgotU2VsZWN0IHRoZSAgPHVpY29udHJvbD5XZWIgU2VydmljZTwvdWljb250cm9sPiB3aXphcmQuIENsaWNrICA8dWljb250cm9sPk5leHQ8L3VpY29udHJvbD4uPC9jbWQ+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPldlYiBTZXJ2aWNlcyBwYWdlOiBzZWxlY3QgIDx1aWNvbnRyb2w+VG9wIGRvd24gSmF2YSBiZWFuIFdlYiBzZXJ2aWNlPC91aWNvbnRyb2w+IGFzCi15b3VyIFdlYiBzZXJ2aWNlIHR5cGUsIGFuZCBzZWxlY3QgdGhlIGFydGlmYWN0IGZyb20gd2hpY2ggdGhlIHNlcnZpY2Ugd2lsbAotYmUgY3JlYXRlZC48L2NtZD4KLTxzdWJzdGVwcyBjb25yZWY9InR3c2JlYW5hLmRpdGEjdHdzYmVhbmEvY3JlYXRlc3RlcDR1bCI+Ci08c3Vic3RlcD48Y21kPjwvY21kPjwvc3Vic3RlcD4KLTwvc3Vic3RlcHM+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPldlYiBTZXJ2aWNlcyBTa2VsZXRvbiA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIKLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IEJlYW4gQ29uZmlndXJhdGlvbiBwYWdlOiBTZWxlY3QgdGhlCi1mb2xkZXIgd2hlcmUgdGhlIGdlbmVyYXRlZCA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIKLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IHdpbGwgYmUgc3RvcmVkLiBJZiB5b3Ugd2FudCB0byByZXZpZXcKLW9yIGVkaXQgdGhlIG1hcHBpbmdzIGJldHdlZW4gcGFja2FnZXMgYW5kIG5hbWVzcGFjZXMsIHNlbGVjdCB0aGUgIDx1aWNvbnRyb2w+RGVmaW5lCi1jdXN0b20gbWFwcGluZyBmb3IgbmFtZXNwYWNlIHRvIHBhY2thZ2U8L3VpY29udHJvbD4gY2hlY2sgYm94LiBDbGljayAgPHVpY29udHJvbD5OZXh0PC91aWNvbnRyb2w+LjwvY21kPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5XZWIgU2VydmljZSBOYW1lc3BhY2UgdG8gUGFja2FnZSBNYXBwaW5ncyBwYWdlOiBpZiB5b3Ugc2VsZWN0ZWQKLSA8dWljb250cm9sPkRlZmluZSBjdXN0b20gbWFwcGluZyBmb3IgcGFja2FnZSB0byBuYW1lc3BhY2U8L3VpY29udHJvbD4gb24KLXRoZSBwcmV2aW91cyBwYW5lbCwgeW91IGNhbiBlbnRlciB5b3VyIGN1c3RvbSBtYXBwaW5nIHBhaXJzIG9uIHRoaXMgcGFuZWwKLWJ5IGNsaWNraW5nICA8dWljb250cm9sPkFkZDwvdWljb250cm9sPi4gQWx0ZXJuYXRlbHksIHlvdSBjYW4gY2xpY2sgIDxiPkltcG9ydDwvYj4gdG8KLWltcG9ydCBjdXN0b20gbWFwcGluZyBwYWlycyBmcm9tIGEgIDxzeXN0ZW1vdXRwdXQ+LnByb3BlcnRpZXM8L3N5c3RlbW91dHB1dD4gZmlsZS4KLVRoZSBjb250ZW50IG9mIHRoZSBwcm9wZXJ0aWVzIGZpbGUgbXVzdCBiZSBvZiB0aGUgZm9ybWF0ICA8Y29kZXBoPjx2YXJuYW1lPm5hbWVzcGFjZT1wYWNrYWdlPC92YXJuYW1lPjwvY29kZXBoPi4KLUNsaWNrICA8dWljb250cm9sPk5leHQ8L3VpY29udHJvbD4uPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5XZWIgU2VydmljZSBUZXN0IHBhZ2U6IElmIHlvdSBzZWxlY3RlZCB0byB0ZXN0IHRoZSBXZWIgc2VydmljZSwKLXNlbGVjdCB0aGUgdGVzdCBmYWNpbGl0eSBmb3IgdGhlIGdlbmVyYXRlZCBXZWIgc2VydmljZS4gVGhpcyB3aWxsIG9wZW4gdGhlCi1XZWIgc2VydmljZSBpbiB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLiBTZWxlY3QgdGhlIG9wZXJhdGlvbiB5b3Ugd2FudCB0bwotdGVzdCwgZW50ZXIgdGhlIHJlcXVpcmVkIGluZm9ybWF0aW9uLCBhbmQgY2xpY2sgIDx1aWNvbnRyb2w+R288L3VpY29udHJvbD4uCi1UaGUgcmVzdWx0IHdpbGwgZGlzcGxheSBpbiB0aGUgU3RhdHVzIHBhbmUuIENsaWNrICA8dWljb250cm9sPk5leHQ8L3VpY29udHJvbD4uPC9jbWQ+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPldlYiBTZXJ2aWNlIFByb3h5IHBhZ2U6IElmIHlvdSBoYXZlIHNlbGVjdGVkIHRvIGdlbmVyYXRlIGEgcHJveHksCi10aGlzIHBhZ2Ugc2hvd3MgdGhlIG9wdGlvbnMgZm9yIHRoZSBwcm94eS4gSXQgbGlzdHMgdGhlIGZvbGRlciB3aGVyZSB0aGUgcHJveHkKLXdpbGwgYmUgZ2VuZXJhdGVkLCBhbmQgeW91IGNhbiBvcHRpb25hbGx5IGNyZWF0ZSBjdXN0b20gbWFwcGluZ3MgYmV0d2VlbiBuYW1lc3BhY2VzCi1hbmQgcGFja2FnZXMuIENsaWNrICA8dWljb250cm9sPk5leHQ8L3VpY29udHJvbD4uPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5XZWIgU2VydmljZSBDbGllbnQgVGVzdCBwYWdlOiBVc2UgdGhpcyBwYWdlIHRvIHNlbGVjdCB0aGUgZm9sbG93aW5nCi1vcHRpb25zOiA8L2NtZD4KLTxzdWJzdGVwcz4KLTxzdWJzdGVwPjxjbWQ+U2VsZWN0IHlvdXIgdGVzdCBmYWNpbGl0eS4gWW91IGNhbiB0ZXN0IHRoZSBnZW5lcmF0ZWQgcHJveHkKLWluIHRoZSBXZWIgU2VydmljZSBFeHBsb3Jlciwgb3IgeW91IGNhbiBnZW5lcmF0ZSBhIHNhbXBsZSBXZWIgc2VydmljZSBKU1AuPC9jbWQ+Ci08L3N1YnN0ZXA+Ci08c3Vic3RlcD48Y21kPklmIHlvdSBzZWxlY3RlZCB0byB0ZXN0IHRoZSBwcm94eSB0aHJvdWdoIGEgSlNQLCB5b3UgY2FuIHNlbGVjdAotdGhlIGZvbGRlciB3aGVyZSB0aGUgSlNQIHdpbGwgYmUgbG9jYXRlZCwgYW5kIHlvdSBjYW4gc2VsZWN0IHRoZSBtZXRob2RzIHRoYXQKLXdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIEpTUC48L2NtZD48L3N1YnN0ZXA+Ci08c3Vic3RlcD48Y21kPlNlbGVjdCAgPHVpY29udHJvbD5SdW4gdGVzdCBvbiBzZXJ2ZXI8L3VpY29udHJvbD4gdG8gc3RhcnQgdGhlCi1zZXJ2ZXIgZm9yIHlvdSBhdXRvbWF0aWNhbGx5LjwvY21kPjwvc3Vic3RlcD4KLTwvc3Vic3RlcHM+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPldlYiBTZXJ2aWNlIFB1YmxpY2F0aW9uIHBhZ2U6IElmIHlvdSBoYXZlIHNlbGVjdGVkIHRvIHB1Ymxpc2ggeW91cgotV2ViIHNlcnZpY2UgdG8gYSBVRERJIHJlZ2lzdHJ5LCB1c2UgdGhpcyBwYWdlIHRvIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyCi1hbmQgc2VsZWN0IHRoZSBVRERJIHJlZ2lzdHJ5IHRvIHdoaWNoIHRoZSBXZWIgc2VydmljZSB3aWxsIGJlIHB1Ymxpc2hlZC4gQ2xpY2sKLSA8dWljb250cm9sPkZpbmlzaDwvdWljb250cm9sPi48L2NtZD48L3N0ZXA+Ci08L3N0ZXBzPgotPHJlc3VsdCBjb25yZWY9InR3c2JlYW5hLmRpdGEjdHdzYmVhbmEvYXhpc3dzY3JlYXRlcmVzdWx0Ij5BZnRlciB0aGUgV2ViIHNlcnZpY2UKLWhhcyBiZWVuIGNyZWF0ZWQsIHRoZSBmb2xsb3dpbmcgbWF5IG9jY3VyIGRlcGVuZGluZyBvbiB0aGUgb3B0aW9ucyB5b3Ugc2VsZWN0ZWQ6IDx1bD4KLTxsaT5JZiB5b3UgaGF2ZSBzZWxlY3RlZCB0byB0ZXN0IHRoZSBnZW5lcmF0ZWQgcHJveHkgdXNpbmcgV2ViIHNlcnZpY2UgSlNQcywKLXRoZSBwcm94eSBpcyBsYXVuY2hlZCBpbiBhIFdlYiBicm93c2VyIGF0IHRoZSBmb2xsb3dpbmcgVVJMOiA8Y29kZXBoPmh0dHA6Ly9sb2NhbGhvc3Q6IDx2YXJuYW1lPnBvcnQ8L3Zhcm5hbWU+LyA8dmFybmFtZT5XZWJQcm9qZWN0PC92YXJuYW1lPkNsaWVudC9zYW1wbGU8aQotPkJlYW5OYW1lPC9pPi88dmFybmFtZT5XZWJTZXJ2aWNlTmFtZTwvdmFybmFtZT4vVGVzdENsaWVudC5qc3A8L2NvZGVwaD4gWW91Ci1jYW4gdXNlIHRoaXMgc2FtcGxlIGFwcGxpY2F0aW9uIHRvIHRlc3QgdGhlIFdlYiBzZXJ2aWNlIGJ5IHNlbGVjdGluZyBhIG1ldGhvZCwKLWVudGVyaW5nIGEgdmFsdWUgZm9yIHRoZSBtZXRob2QsIGFuZCBjbGlja2luZyAgPHVpY29udHJvbD5JbnZva2U8L3VpY29udHJvbD4uCi1UaGUgcmVzdWx0IG9mIHRoZSBtZXRob2Qgd2lsbCBkaXNwbGF5IGluIHRoZSByZXN1bHRzIHBhbmUuPC9saT4KLTxsaT5JZiB5b3UgaGF2ZSBzZWxlY3RlZCB0byB0ZXN0IHRoZSBXZWIgc2VydmljZSB1c2luZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLAotdGhlIEV4cGxvcmVyIHdpbGwgb3Blbi4gU2VsZWN0IHRoZSBvcGVyYXRpb24geW91IHdhbnQgdG8gdGVzdCwgZW50ZXIgdGhlIHJlcXVpcmVkCi1pbmZvcm1hdGlvbiwgYW5kIGNsaWNrICA8Yj5HbzwvYj4uIFRoZSByZXN1bHQgd2lsbCBkaXNwbGF5IGluIHRoZSBTdGF0dXMgcGFuZS48L2xpPgotPGxpPklmIHlvdSBoYXZlIHNlbGVjdGVkIHRvIHB1Ymxpc2ggdGhlIFdlYiBzZXJ2aWNlLCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyCi1pcyBsYXVuY2hlZCBkaXNwbGF5aW5nIHRoZSBwYWdlIHJlcXVpcmVkIHRvIHB1Ymxpc2ggeW91ciBXZWIgc2VydmljZS4gRm9sbG93Ci10aGUgaW5zdHJ1Y3Rpb25zIGluIDx2YXJuYW1lPlB1Ymxpc2hpbmcgdGhlIFdlYiBzZXJ2aWNlPC92YXJuYW1lPiB0byBjb21wbGV0ZQotdGhpcyB0YXNrLjwvbGk+Ci08L3VsPjwvcmVzdWx0PgotPC90YXNrYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+IFRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdG92ZXJ3cy5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+IERldmVsb3BpbmcgV2ViIHNlcnZpY2VzPC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHVkZGlleHAuZGl0YSIKLXNjb3BlPSJwZWVyIj48bGlua3RleHQ+IFVzaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2xpbmt0ZXh0PjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgUmVmZXJlbmNlPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9yZWYvcndzZGwuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PldTREwgZG9jdW1lbnRzPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci90YXNrcy90c2tsd3NkbGEuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdGFza3MvdHNrbHdzZGxhLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzYTk3M2UuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci90YXNrcy90c2tsd3NkbGEuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIyMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwNyIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJDcmVhdGluZyBhIEphdmEgYmVhbiBza2VsZXRvbiBmcm9tIGEgV1NETCBkb2N1bWVudCB1c2luZyB0aGUgQXBhY2hlIEF4aXMgcnVuLXRpbWUgZW52aXJvbm1lbnQiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iVGhlIFdlYiBzZXJ2aWNlIHdpemFyZCBhc3Npc3RzIHlvdSBpbiBjcmVhdGluZyBhIHNrZWxldG9uIGJlYW4gZnJvbSBhbiBleGlzdGluZyBXU0RMIGRvY3VtZW50LiBUaGUgc2tlbGV0b24gYmVhbiBjb250YWlucyBhIHNldCBvZiBtZXRob2RzIHRoYXQgY29ycmVzcG9uZCB0byB0aGUgb3BlcmF0aW9ucyBkZXNjcmliZWQgaW4gdGhlIFdTREwgZG9jdW1lbnQuIFdoZW4gdGhlIGJlYW4gaXMgY3JlYXRlZCwgZWFjaCBtZXRob2QgaGFzIGEgdHJpdmlhbCBpbXBsZW1lbnRhdGlvbiB0aGF0IHlvdSByZXBsYWNlIGJ5IGVkaXRpbmcgdGhlIGJlYW4uIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBXZWIgc2VydmljZSB3aXphcmQgYXNzaXN0cyB5b3UgaW4gY3JlYXRpbmcgYSBza2VsZXRvbiBiZWFuIGZyb20gYW4gZXhpc3RpbmcgV1NETCBkb2N1bWVudC4gVGhlIHNrZWxldG9uIGJlYW4gY29udGFpbnMgYSBzZXQgb2YgbWV0aG9kcyB0aGF0IGNvcnJlc3BvbmQgdG8gdGhlIG9wZXJhdGlvbnMgZGVzY3JpYmVkIGluIHRoZSBXU0RMIGRvY3VtZW50LiBXaGVuIHRoZSBiZWFuIGlzIGNyZWF0ZWQsIGVhY2ggbWV0aG9kIGhhcyBhIHRyaXZpYWwgaW1wbGVtZW50YXRpb24gdGhhdCB5b3UgcmVwbGFjZSBieSBlZGl0aW5nIHRoZSBiZWFuLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IkF4aXMgcnVudGltZSBlbnZpcm9ubWVudCwgc2tlbGV0b24gV2ViIHNlcnZpY2VzLCBXZWIgc2VydmljZXMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQsIHNrZWxldG9uIFdlYiBzZXJ2aWNlcywgV2ViIHNlcnZpY2VzIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY2F4aXN0b3Zlci5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdG92ZXJ3cy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHVkZGlleHAuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yd3NkbC5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRza2x3c2RsYSIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkNyZWF0aW5nIGEgSmF2YSBiZWFuIHNrZWxldG9uIGZyb20gYSBXU0RMIGRvY3VtZW50IHVzaW5nIHRoZQotQXBhY2hlIEF4aXMgcnVuLXRpbWUgZW52aXJvbm1lbnQ8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InRza2x3c2RsYSI+PGEgbmFtZT0idHNrbHdzZGxhIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5DcmVhdGluZyBhIEphdmEgYmVhbiBza2VsZXRvbiBmcm9tIGEgV1NETCBkb2N1bWVudCB1c2luZyB0aGUgQXBhY2hlCi1BeGlzIHJ1bi10aW1lIGVudmlyb25tZW50PC9oMT4KLQotCi0KLQotPGRpdj48cD5UaGUgV2ViIHNlcnZpY2Ugd2l6YXJkIGFzc2lzdHMgeW91IGluIGNyZWF0aW5nIGEgc2tlbGV0b24gYmVhbgotZnJvbSBhbiBleGlzdGluZyBXU0RMIGRvY3VtZW50LiBUaGUgc2tlbGV0b24gYmVhbiBjb250YWlucyBhIHNldCBvZiBtZXRob2RzCi10aGF0IGNvcnJlc3BvbmQgdG8gdGhlIG9wZXJhdGlvbnMgZGVzY3JpYmVkIGluIHRoZSBXU0RMIGRvY3VtZW50LiBXaGVuIHRoZQotYmVhbiBpcyBjcmVhdGVkLCBlYWNoIG1ldGhvZCBoYXMgYSB0cml2aWFsIGltcGxlbWVudGF0aW9uIHRoYXQgeW91IHJlcGxhY2UKLWJ5IGVkaXRpbmcgdGhlIGJlYW4uPC9wPgotCi08ZGl2IGNsYXNzPSJwIj48cD5QcmVyZXF1aXNpdGVzOjwvcD4KLTxvbD4KLTxsaT5JZiB5b3UgYXJlIHVzaW5nIHRoZSBBcGFjaGUgSmFrYXJ0YSBUb21jYXQgc2VydmxldAotY29udGFpbmVyIGFzIHlvdXIgc2VydmVyLCB5b3UgbXVzdCBpbnN0YWxsIGl0LCBjb25maWd1cmUgYW4gaW5zdGFuY2Ugb2YgaXQsCi1hbmQgY3JlYXRlIGEgV2ViIHByb2plY3QgdGFyZ2V0ZWQgdG8gaXQgYXMgZGVzY3JpYmVkIGluIDxhIGhyZWY9InR0b21jYXRzZXJ2Lmh0bWwiPkNyZWF0aW5nIGFuIEFwYWNoZSBUb21jYXQgc2VydmVyIGFuZCBXZWIgcHJvamVjdDwvYT48L2xpPgotCi08bGk+Q3JlYXRlIG9yIGltcG9ydCBhIFdTREwgZmlsZSBpbnRvIHRoZSBXZWIgQ29udGVudCBmb2xkZXIgb2YgdGhlIFdlYiBwcm9qZWN0LgotWW91IGNhbiBvbmx5IHVzZSBhIFdTREwgZmlsZSB0aGF0IGNvbnRhaW5zIGEgc2VydmljZSBlbGVtZW50LjwvbGk+Ci0KLTwvb2w+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+VG8gY3JlYXRlIGEgV2ViIHNlcnZpY2UgZnJvbSBhIFdTREwgZmlsZSB1c2luZyB0aGUgQXBhY2hlIEF4aXMgcnVuLXRpbWUKLWVudmlyb25tZW50OjwvZGl2PgotCi08b2w+Ci08bGk+PHNwYW4+U3dpdGNoIHRvIHRoZSBKMkVFIHBlcnNwZWN0aXZlICg8c3BhbiBjbGFzcz0idWljb250cm9sIj5XaW5kb3cgJmd0OyBPcGVuIFBlcnNwZWN0aXZlCi0mZ3Q7IEoyRUU8L3NwYW4+KS48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkluIHRoZSBQcm9qZWN0IEV4cGxvcmVyIHZpZXcsIHNlbGVjdCB0aGUgV1NETCBmaWxlIHRoYXQgeW91IGNyZWF0ZWQKLW9yIGltcG9ydGVkIGludG8gdGhlIFdlYiBDb250ZW50IGZvbGRlciBvZiB5b3VyIFdlYiBwcm9qZWN0Ljwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+Q2xpY2sgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkZpbGUgJmd0OyBOZXcgJmd0OyBPdGhlcjwvc3Bhbj4uIFNlbGVjdCAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+V2ViCi1TZXJ2aWNlczwvc3Bhbj4gaW4gb3JkZXIgdG8gZGlzcGxheSB0aGUgdmFyaW91cyBXZWIgc2VydmljZSB3aXphcmRzLgotU2VsZWN0IHRoZSAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+V2ViIFNlcnZpY2U8L3NwYW4+IHdpemFyZC4gQ2xpY2sgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk5leHQ8L3NwYW4+Ljwvc3Bhbj4KLTwvbGk+Ci0KLTxsaT48c3Bhbj5XZWIgU2VydmljZXMgcGFnZTogc2VsZWN0ICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Ub3AgZG93biBKYXZhIGJlYW4gV2ViIHNlcnZpY2U8L3NwYW4+IGFzCi15b3VyIFdlYiBzZXJ2aWNlIHR5cGUsIGFuZCBzZWxlY3QgdGhlIGFydGlmYWN0IGZyb20gd2hpY2ggdGhlIHNlcnZpY2Ugd2lsbAotYmUgY3JlYXRlZC48L3NwYW4+Ci08b2wgdHlwZT0iYSI+Ci08bGkgY2xhc3M9InN1YnN0ZXBleHBhbmQiPjxzcGFuPlNlbGVjdCB0aGUgc3RhZ2VzIG9mIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCB0aGF0IHlvdSB3YW50Ci10byBjb21wbGV0ZSB1c2luZyB0aGUgc2xpZGVyOjwvc3Bhbj4gPHVsPgotPGxpPkRldmVsb3A6IHRoaXMgd2lsbCBkZXZlbG9wIHRoZSBXU0RMIGRlZmluaXRpb24gYW5kIGltcGxlbWVudGF0aW9uIG9mIHRoZQotV2ViIHNlcnZpY2UuIFRoaXMgaW5jbHVkZXMgc3VjaCB0YXNrcyBhcyBjcmVhdGluZyB0aGUgbW9kdWxlcyB3aGljaCB3aWxsIGNvbnRhaW4KLXRoZSBnZW5lcmF0ZWQgY29kZSwgV1NETCBmaWxlcywgZGVwbG95bWVudCBkZXNjcmlwdG9ycywgYW5kIEphdmEgZmlsZXMgd2hlbgotYXBwcm9wcmlhdGUuPC9saT4KLQotPGxpPkFzc2VtYmxlOiB0aGlzIGVuc3VyZXMgdGhlIHByb2plY3QgdGhhdCB3aWxsIGhvc3QgdGhlIFdlYiBzZXJ2aWNlIG9yIGNsaWVudAotZ2V0cyBhc3NvY2lhdGVkIHRvIGFuIEVBUiB3aGVuIHJlcXVpcmVkIGJ5IHRoZSB0YXJnZXQgYXBwbGljYXRpb24gc2VydmVyLjwvbGk+Ci0KLTxsaT5EZXBsb3k6IHRoaXMgd2lsbCBjcmVhdGUgdGhlIGRlcGxveW1lbnQgY29kZSBmb3IgdGhlIHNlcnZpY2UuPC9saT4KLQotPGxpPkluc3RhbGw6IHRoaXMgd2lsbCBpbnN0YWxsIGFuZCBjb25maWd1cmUgdGhlIFdlYiBtb2R1bGUgYW5kIEVBUnMgb24gdGhlCi10YXJnZXQgc2VydmVyLjwvbGk+Ci0KLTxsaT5TdGFydDogdGhpcyB3aWxsIHN0YXJ0IHRoZSBzZXJ2ZXIgb25jZSB0aGUgc2VydmljZSBoYXMgYmVlbiBpbnN0YWxsZWQKLW9uIGl0LiBUaGUgc2VydmVyLWNvbmZpZy53c2RkIGZpbGUgd2lsbCBiZSBnZW5lcmF0ZWQuPC9saT4KLQotPGxpPlRlc3Q6IHRoaXMgd2lsbCBwcm92aWRlIHZhcmlvdXMgb3B0aW9ucyBmb3IgdGVzdGluZyB0aGUgc2VydmljZSwgc3VjaAotYXMgdXNpbmcgdGhlIFdlYiBTZXJ2aWNlIEV4cGxvcmVyIG9yIHNhbXBsZSBKU1BzLjwvbGk+Ci0KLTwvdWw+Ci08L2xpPgotCi08bGkgY2xhc3M9InN1YnN0ZXBleHBhbmQiPjxzcGFuPlNlbGVjdCB5b3VyIHNlcnZlcjogdGhlIGRlZmF1bHQgc2VydmVyIGlzIGRpc3BsYXllZC4gSWYgeW91Ci13YW50IHRvIGRlcGxveSB5b3VyIHNlcnZpY2UgdG8gYSBkaWZmZXJlbnQgc2VydmVyIGNsaWNrIHRoZSBsaW5rIHRvIHNwZWNpZnkKLWEgZGlmZmVyZW50IHNlcnZlci48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdWJzdGVwZXhwYW5kIj48c3Bhbj5TZWxlY3QgeW91ciBydW50aW1lOiB0aGUgZGVmYXVsdCBydW50aW1lIGlzIGRpc3BsYXllZC4gSWYgeW91Ci13YW50IHRvIGRlcGxveSB5b3VyIHNlcnZpY2UgdG8gYSBkaWZmZXJlbnQgcnVudGltZSBjbGljayB0aGUgbGluayB0byBzcGVjaWZ5Ci1hIGRpZmZlcmVudCBydW50aW1lLjwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN1YnN0ZXBleHBhbmQiPjxzcGFuPlNlbGVjdCB0aGUgc2VydmljZSBwcm9qZWN0OiB0aGUgcHJvamVjdCBjb250YWluaW5nIHRoZSBwcm9qZWN0Ci1zZWxlY3RlZCBpbiB5b3VyIHdvcmtzcGFjZSBpcyBkaXNwbGF5ZWQuIFRvIHNlbGVjdCBhIGRpZmZlcmVudCBwcm9qZWN0IGFuZAotRUFSIGNsaWNrIG9uIHRoZSBwcm9qZWN0IGxpbmsuPC9zcGFuPiBFbnN1cmUgdGhhdCB0aGUgcHJvamVjdCBzZWxlY3RlZAotYXMgdGhlIENsaWVudCBXZWIgUHJvamVjdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgU2VydmljZSBXZWIgUHJvamVjdCwgb3IgdGhlCi1zZXJ2aWNlIHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIGNsaWVudCdzIGdlbmVyYXRlZCBhcnRpZmFjdHMuPC9saT4KLQotPGxpIGNsYXNzPSJzdWJzdGVwZXhwYW5kIj48c3Bhbj5JZiB5b3Ugd2FudCB0byBjcmVhdGUgYSBjbGllbnQsIHNlbGVjdCB0aGUgdHlwZSBvZiBwcm94eSB0bwotYmUgZ2VuZXJhdGVkIGFuZCByZXBlYXQgdGhlIGFib3ZlIHN0ZXBzIGZvciB0aGUgY2xpZW50Ljwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN1YnN0ZXBleHBhbmQiPjxzcGFuPlB1Ymxpc2ggdGhlIFdlYiBzZXJ2aWNlOiB0aGlzIHdpbGwgbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIKLXRvIHB1Ymxpc2ggeW91ciBXZWIgc2VydmljZSB0byBhIFVEREkgcmVnaXN0cnkuPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3Vic3RlcGV4cGFuZCI+PHNwYW4+TW9uaXRvciB0aGUgV2ViIHNlcnZpY2U6IHRoaXMgd2lsbCBzZW5kIHRoZSBXZWIgc2VydmljZSB0cmFmZmljCi10aHJvdWdoIHRoZSBUQ1AvSVAgTW9uaXRvciwgd2hpY2ggYWxsb3dzIHlvdSB0byB3YXRjaCB0aGUgU09BUCB0cmFmZmljIGdlbmVyYXRlZAotYnkgdGhlIFdlYiBzZXJ2aWNlIGFuZCB0byB0ZXN0IHRoaXMgdHJhZmZpYyBmb3IgV1MtSSBjb21wbGlhbmNlLiBBbHRlcm5hdGVseQoteW91IGNhbiBtYW51YWxseSBzZXQgdXAgYSBUQ1AvSVAgbW9uaXRvciBhcyBkZXNjcmliZWQgaW4gPGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci90YXNrcy90bW9uaXRvci5odG1sIj5Vc2luZyB0aGUgVENQL0lQIE1vbml0b3IgdG8gdGVzdCBXZWIgc2VydmljZXM8L2E+PC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTwvbGk+Ci0KLTxsaT48c3Bhbj5XZWIgU2VydmljZXMgU2tlbGV0b24gSmF2YeKEoiBCZWFuIENvbmZpZ3VyYXRpb24gcGFnZTogU2VsZWN0IHRoZQotZm9sZGVyIHdoZXJlIHRoZSBnZW5lcmF0ZWQgSmF2YSB3aWxsIGJlIHN0b3JlZC4gSWYgeW91IHdhbnQgdG8gcmV2aWV3Ci1vciBlZGl0IHRoZSBtYXBwaW5ncyBiZXR3ZWVuIHBhY2thZ2VzIGFuZCBuYW1lc3BhY2VzLCBzZWxlY3QgdGhlICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5EZWZpbmUKLWN1c3RvbSBtYXBwaW5nIGZvciBuYW1lc3BhY2UgdG8gcGFja2FnZTwvc3Bhbj4gY2hlY2sgYm94LiBDbGljayAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+TmV4dDwvc3Bhbj4uPC9zcGFuPgotPC9saT4KLQotPGxpPjxzcGFuPldlYiBTZXJ2aWNlIE5hbWVzcGFjZSB0byBQYWNrYWdlIE1hcHBpbmdzIHBhZ2U6IGlmIHlvdSBzZWxlY3RlZAotIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkRlZmluZSBjdXN0b20gbWFwcGluZyBmb3IgcGFja2FnZSB0byBuYW1lc3BhY2U8L3NwYW4+IG9uCi10aGUgcHJldmlvdXMgcGFuZWwsIHlvdSBjYW4gZW50ZXIgeW91ciBjdXN0b20gbWFwcGluZyBwYWlycyBvbiB0aGlzIHBhbmVsCi1ieSBjbGlja2luZyAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QWRkPC9zcGFuPi4gQWx0ZXJuYXRlbHksIHlvdSBjYW4gY2xpY2sgIDxzdHJvbmc+SW1wb3J0PC9zdHJvbmc+IHRvCi1pbXBvcnQgY3VzdG9tIG1hcHBpbmcgcGFpcnMgZnJvbSBhICA8dHQgY2xhc3M9InN5c291dCI+LnByb3BlcnRpZXM8L3R0PiBmaWxlLgotVGhlIGNvbnRlbnQgb2YgdGhlIHByb3BlcnRpZXMgZmlsZSBtdXN0IGJlIG9mIHRoZSBmb3JtYXQgIDxzYW1wIGNsYXNzPSJjb2RlcGgiPjx2YXIgY2xhc3M9InZhcm5hbWUiPm5hbWVzcGFjZT1wYWNrYWdlPC92YXI+PC9zYW1wPi4KLUNsaWNrICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5OZXh0PC9zcGFuPi48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPldlYiBTZXJ2aWNlIFRlc3QgcGFnZTogSWYgeW91IHNlbGVjdGVkIHRvIHRlc3QgdGhlIFdlYiBzZXJ2aWNlLAotc2VsZWN0IHRoZSB0ZXN0IGZhY2lsaXR5IGZvciB0aGUgZ2VuZXJhdGVkIFdlYiBzZXJ2aWNlLiBUaGlzIHdpbGwgb3BlbiB0aGUKLVdlYiBzZXJ2aWNlIGluIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIuIFNlbGVjdCB0aGUgb3BlcmF0aW9uIHlvdSB3YW50IHRvCi10ZXN0LCBlbnRlciB0aGUgcmVxdWlyZWQgaW5mb3JtYXRpb24sIGFuZCBjbGljayAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+R288L3NwYW4+LgotVGhlIHJlc3VsdCB3aWxsIGRpc3BsYXkgaW4gdGhlIFN0YXR1cyBwYW5lLiBDbGljayAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+TmV4dDwvc3Bhbj4uPC9zcGFuPgotPC9saT4KLQotPGxpPjxzcGFuPldlYiBTZXJ2aWNlIFByb3h5IHBhZ2U6IElmIHlvdSBoYXZlIHNlbGVjdGVkIHRvIGdlbmVyYXRlIGEgcHJveHksCi10aGlzIHBhZ2Ugc2hvd3MgdGhlIG9wdGlvbnMgZm9yIHRoZSBwcm94eS4gSXQgbGlzdHMgdGhlIGZvbGRlciB3aGVyZSB0aGUgcHJveHkKLXdpbGwgYmUgZ2VuZXJhdGVkLCBhbmQgeW91IGNhbiBvcHRpb25hbGx5IGNyZWF0ZSBjdXN0b20gbWFwcGluZ3MgYmV0d2VlbiBuYW1lc3BhY2VzCi1hbmQgcGFja2FnZXMuIENsaWNrICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5OZXh0PC9zcGFuPi48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPldlYiBTZXJ2aWNlIENsaWVudCBUZXN0IHBhZ2U6IFVzZSB0aGlzIHBhZ2UgdG8gc2VsZWN0IHRoZSBmb2xsb3dpbmcKLW9wdGlvbnM6IDwvc3Bhbj4KLTxvbCB0eXBlPSJhIj4KLTxsaT48c3Bhbj5TZWxlY3QgeW91ciB0ZXN0IGZhY2lsaXR5LiBZb3UgY2FuIHRlc3QgdGhlIGdlbmVyYXRlZCBwcm94eQotaW4gdGhlIFdlYiBTZXJ2aWNlIEV4cGxvcmVyLCBvciB5b3UgY2FuIGdlbmVyYXRlIGEgc2FtcGxlIFdlYiBzZXJ2aWNlIEpTUC48L3NwYW4+Ci08L2xpPgotCi08bGk+PHNwYW4+SWYgeW91IHNlbGVjdGVkIHRvIHRlc3QgdGhlIHByb3h5IHRocm91Z2ggYSBKU1AsIHlvdSBjYW4gc2VsZWN0Ci10aGUgZm9sZGVyIHdoZXJlIHRoZSBKU1Agd2lsbCBiZSBsb2NhdGVkLCBhbmQgeW91IGNhbiBzZWxlY3QgdGhlIG1ldGhvZHMgdGhhdAotd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgSlNQLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+U2VsZWN0ICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5SdW4gdGVzdCBvbiBzZXJ2ZXI8L3NwYW4+IHRvIHN0YXJ0IHRoZQotc2VydmVyIGZvciB5b3UgYXV0b21hdGljYWxseS48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPC9saT4KLQotPGxpPjxzcGFuPldlYiBTZXJ2aWNlIFB1YmxpY2F0aW9uIHBhZ2U6IElmIHlvdSBoYXZlIHNlbGVjdGVkIHRvIHB1Ymxpc2ggeW91cgotV2ViIHNlcnZpY2UgdG8gYSBVRERJIHJlZ2lzdHJ5LCB1c2UgdGhpcyBwYWdlIHRvIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyCi1hbmQgc2VsZWN0IHRoZSBVRERJIHJlZ2lzdHJ5IHRvIHdoaWNoIHRoZSBXZWIgc2VydmljZSB3aWxsIGJlIHB1Ymxpc2hlZC4gQ2xpY2sKLSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5GaW5pc2g8L3NwYW4+Ljwvc3Bhbj48L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48ZGl2IGNsYXNzPSJwIj5BZnRlciB0aGUgV2ViIHNlcnZpY2UgaGFzIGJlZW4gY3JlYXRlZCwKLXRoZSBmb2xsb3dpbmcgbWF5IG9jY3VyIGRlcGVuZGluZyBvbiB0aGUgb3B0aW9ucyB5b3Ugc2VsZWN0ZWQ6IDx1bD4KLTxsaT5JZiB5b3UgaGF2ZSBzZWxlY3RlZCB0byB0ZXN0IHRoZSBnZW5lcmF0ZWQgcHJveHkgdXNpbmcgV2ViIHNlcnZpY2UgSlNQcywKLXRoZSBwcm94eSBpcyBsYXVuY2hlZCBpbiBhIFdlYiBicm93c2VyIGF0IHRoZSBmb2xsb3dpbmcgVVJMOiBodHRwOi8vbG9jYWxob3N0OiA8dmFyIGNsYXNzPSJ2YXJuYW1lIj5wb3J0PC92YXI+LyA8dmFyIGNsYXNzPSJ2YXJuYW1lIj5XZWJQcm9qZWN0PC92YXI+Q2xpZW50L3NhbXBsZTxlbT5CZWFuTmFtZTwvZW0+LyA8dmFyIGNsYXNzPSJ2YXJuYW1lIj5XZWJTZXJ2aWNlTmFtZTwvdmFyPi9UZXN0Q2xpZW50LmpzcCBZb3UgY2FuIHVzZQotdGhpcyBzYW1wbGUgYXBwbGljYXRpb24gdG8gdGVzdCB0aGUgV2ViIHNlcnZpY2UgYnkgc2VsZWN0aW5nIGEgbWV0aG9kLCBlbnRlcmluZwotYSB2YWx1ZSBmb3IgdGhlIG1ldGhvZCwgYW5kIGNsaWNraW5nICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5JbnZva2U8L3NwYW4+LiBUaGUgcmVzdWx0Ci1vZiB0aGUgbWV0aG9kIHdpbGwgZGlzcGxheSBpbiB0aGUgcmVzdWx0cyBwYW5lLjwvbGk+Ci0KLTxsaT5JZiB5b3UgaGF2ZSBzZWxlY3RlZCB0byB0ZXN0IHRoZSBXZWIgc2VydmljZSB1c2luZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLAotdGhlIEV4cGxvcmVyIHdpbGwgb3Blbi4gU2VsZWN0IHRoZSBvcGVyYXRpb24geW91IHdhbnQgdG8gdGVzdCwgZW50ZXIgdGhlIHJlcXVpcmVkCi1pbmZvcm1hdGlvbiwgYW5kIGNsaWNrICA8c3Ryb25nPkdvPC9zdHJvbmc+LiBUaGUgcmVzdWx0IHdpbGwgZGlzcGxheSBpbiB0aGUgU3RhdHVzIHBhbmUuPC9saT4KLQotPGxpPklmIHlvdSBoYXZlIHNlbGVjdGVkIHRvIHB1Ymxpc2ggdGhlIFdlYiBzZXJ2aWNlLCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyCi1pcyBsYXVuY2hlZCBkaXNwbGF5aW5nIHRoZSBwYWdlIHJlcXVpcmVkIHRvIHB1Ymxpc2ggeW91ciBXZWIgc2VydmljZS4gRm9sbG93Ci10aGUgaW5zdHJ1Y3Rpb25zIGluICA8dmFyIGNsYXNzPSJ2YXJuYW1lIj5QdWJsaXNoaW5nIHRoZSBXZWIgc2VydmljZTwvdmFyPiB0byBjb21wbGV0ZQotdGhpcyB0YXNrLjwvbGk+Ci0KLTwvdWw+Ci08L2Rpdj4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImZhbWlseWxpbmtzIj4KLTxkaXYgY2xhc3M9InBhcmVudGxpbmsiPjxzdHJvbmc+UGFyZW50IHRvcGljOjwvc3Ryb25nPiA8YSBocmVmPSIuLi9jb25jZXB0cy9jYXhpc3RvdmVyLmh0bWwiIHRpdGxlPSJUaGlzIHJ1bi10aW1lIGVudmlyb25tZW50IGlzIGZvciB1c2VycyB3aG8gcHJlZmVyIHRvIGRldmVsb3AgZm9yIHRoZSBvcGVuIEFwYWNoZSBBeGlzIHBsYXRmb3JtLiBJdCBpcyBmb3Igbm9uLXByb2R1Y3Rpb24gdXNlIG9ubHkuIEF4aXMgaXMgdGhlIHRoaXJkIGdlbmVyYXRpb24gb2YgdGhlIEFwYWNoZSBTT0FQIGltcGxlbWVudGF0aW9uLiBJdCBldm9sdmVkIGZyb20gQXBhY2hlIFNPQVAgdG8gbWFrZSB0aGUgU09BUCBlbmdpbmUgbW9yZSBmbGV4aWJsZSwgY29uZmlndXJhYmxlLCBhbmQgYWJsZSB0byBoYW5kbGUgYm90aCBTT0FQIGFuZCB0aGUgdXBjb21pbmcgWE1MIFByb3RvY29sIHNwZWNpZmljYXRpb24gZnJvbSB0aGUgVzNDIG9wZW4tc291cmNlIGVmZm9ydC4iPkNyZWF0aW5nIFdlYiBzZXJ2aWNlcyB3aXRoIHRoZSBBcGFjaGUgQXhpcyBydW4tdGltZSBlbnZpcm9ubWVudDwvYT48L2Rpdj4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIENvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmh0bWwiPiBUb29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWwiPldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90b3ZlcndzLmh0bWwiPiBEZXZlbG9waW5nIFdlYiBzZXJ2aWNlczwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R1ZGRpZXhwLmh0bWwiPiBVc2luZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFJlZmVyZW5jZTwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9yZWYvcndzZGwuaHRtbCI+V1NETCBkb2N1bWVudHM8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdGFza3MvdHRvbWNhdHNlcnYuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdGFza3MvdHRvbWNhdHNlcnYuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTE2ODc1NS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3Rhc2tzL3R0b21jYXRzZXJ2LmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICIuLi8uLi9kdGQvdGFzay5kdGQiPgotPHRhc2sgaWQ9ImNyZWF0aW5nYW5hcGFjaGV0b21jYXRzZXJ2ZXIiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+Q3JlYXRpbmcgYW4gQXBhY2hlIFRvbWNhdCBzZXJ2ZXIgYW5kIFdlYiBwcm9qZWN0PC90aXRsZT4KLTxzaG9ydGRlc2M+SWYgeW91IHBsYW4gdG8gY3JlYXRlIGEgV2ViIHNlcnZpY2UgdGhhdCB1c2VzIEFwYWNoZSBKYWthcnRhIFRvbWNhdAotYXMgaXRzIHNlcnZlciwgVG9tY2F0IG11c3QgYmUgaW5zdGFsbGVkIGFuZCBhIHNlcnZlciBjcmVhdGVkIGJlZm9yZSB5b3UgYmVnaW4KLWNyZWF0aW5nIHlvdXIgV2ViIHNlcnZpY2UuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPkF4aXMgcnVudGltZSBlbnZpcm9ubWVudDxpbmRleHRlcm0+Y3JlYXRpbmcgYW4gQXBhY2hlIFRvbWNhdCBzZXJ2ZXI8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+VG9tY2F0IHNlcnZlcjxpbmRleHRlcm0+Y3JlYXRpbmcgc2VydmVycyBmb3IgV2ViIHNlcnZpY2VzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+Y3JlYXRpbmcgYW4gQXBhY2hlIFRvbWNhdCBzZXJ2ZXI8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPHRhc2tib2R5PgotPHByZXJlcT5JbnN0YWxsIEFwYWNoZSBKYWthcnRhIFRvbWNhdCBmcm9tIHRoaXMgVVJMOiA8eHJlZiBocmVmPSJodHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnL3RvbWNhdCIKLXNjb3BlPSJleHRlcm5hbCI+aHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy90b21jYXQ8L3hyZWY+PC9wcmVyZXE+Ci08Y29udGV4dD5PbmNlIHlvdSBoYXZlIGluc3RhbGxlZCB0aGUgc2VydmVyLCBjcmVhdGUgYSBUb21jYXQgc2VydmVyIGluIHRoZQotd29ya2JlbmNoIGJ5IGRvaW5nIHRoZSBmb2xsb3dpbmc6IDwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+RnJvbSB0aGUgRmlsZSBtZW51LCBzZWxlY3QgPHVpY29udHJvbD5OZXcgPiBPdGhlciA+IFNlcnZlciA+IFNlcnZlcgotPiBOZXh0PC91aWNvbnRyb2w+LjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+U2VsZWN0IFRvbWNhdCB2IDMueCwgNC54IG9yIHY1LnggYXMgdGhlIHNlcnZlciB0eXBlLCBlbGVjdGluZyB0aGUKLWNvcnJlY3QgdmVyc2lvbiBvZiBUb21jYXQgZm9yIHlvdXIgaW5zdGFsbCwgYW5kIGNsaWNrIDx1aWNvbnRyb2w+TmV4dDwvdWljb250cm9sPi48L2NtZD4KLTwvc3RlcD4KLTxzdGVwPjxjbWQ+T24gdGhlIFRvbWNhdCBzZXJ2ZXIgcGFnZTo8L2NtZD4KLTxzdWJzdGVwcz4KLTxzdWJzdGVwPjxjbWQ+RW50ZXIgYSBzZXJ2ZXIgbmFtZS48L2NtZD48L3N1YnN0ZXA+Ci08c3Vic3RlcD48Y21kPlNwZWNpZnkgd2hlcmUgVG9tY2F0IGlzIGluc3RhbGxlZC48L2NtZD48L3N1YnN0ZXA+Ci08c3Vic3RlcD48Y21kPkNsaWNrIDx1aWNvbnRyb2w+SW5zdGFsbGVkIEpSRXM8L3VpY29udHJvbD4sIGNsaWNrIDx1aWNvbnRyb2w+QWRkPC91aWNvbnRyb2w+LAotYW5kIGVudGVyIHRoZSBhcHByb3ByaWF0ZSBpbmZvcm1hdGlvbiBmb3IgdGhlIEpESyB5b3UgcGxhbiB0byB1c2UgZm9yIFRvbWNhdC4KLUZvciBleGFtcGxlLCBmb3IgVG9tY2F0IHY1LjAgdGhlIEpSRSBuYW1lIHdvdWxkIGJlIGpkazE0MSBhbmQgdGhlIEpSRSBob21lCi13b3VsZCBiZSB0aGUgaG9tZSBkaXJlY3RvcnkgZm9yIEpESyAxLjQuMS4gQ2xpY2sgPHVpY29udHJvbD5PSzwvdWljb250cm9sPiB0d2ljZQotb25jZSB5b3UgaGF2ZSBlbnRlcmVkIHRoaXMgaW5mb3JtYXRpb24uIEVuc3VyZSB0aGF0IHRoZSBuZXdseSBhZGRlZCBKREsgaXMKLW5vdyBzZWxlY3RlZCBpbiB0aGUgSlJFIGZpZWxkIG9mIHRoZSBUb21jYXQgc2VydmVyIHBhZ2UuIE5vdGUgdGhhdCBpZiB5b3UKLXBvaW50IHRoZSBzZXJ2ZXIgYXQgYSBKUkUgcmF0aGVyIHRoYW4gYSBKREsgdGhlIEpTUHMgd2lsbCBub3QgcHJvcGVybHkgY29tcGlsZQotYW5kIHdpbGwgbm90IGJlIGFibGUgdG8gcnVuIG9uIHRoZSBUb21jYXQgc2VydmVyLjwvY21kPjwvc3Vic3RlcD4KLTwvc3Vic3RlcHM+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPkNsaWNrIDx1aWNvbnRyb2w+RmluaXNoPC91aWNvbnRyb2w+LjwvY21kPjxzdGVwcmVzdWx0PiBUbyBzZWUgdGhlCi1zZXJ2ZXIgeW91IGhhdmUgY3JlYXRlZCBpbiB0aGUgd29ya3NwYWNlLCBmcm9tIHRoZSBXaW5kb3cgbWVudSBzZWxlY3QgPHVpY29udHJvbD5TaG93Ci12aWV3ID4gT3RoZXIgPiBTZXJ2ZXIgPiBTZXJ2ZXJzID4gT2suPC91aWNvbnRyb2w+IDwvc3RlcHJlc3VsdD48L3N0ZXA+Ci08L3N0ZXBzPgotPGV4YW1wbGU+PHA+VG8gYnVpbGQgYSBkeW5hbWljIFdlYiBwcm9qZWN0IHRoYXQgcG9pbnRzIHRvIHRoZSBUb21jYXQgc2VydmVyCi10aGF0IHlvdSBoYXZlIGNyZWF0ZWQ6PC9wPjxvbD4KLTxsaT5DcmVhdGUgdGhlIHNlcnZpY2UgV2ViIHByb2plY3QgYnkgc2VsZWN0aW5nIDx1aWNvbnRyb2w+TmV3ID4gV2ViID4gRHluYW1pYwotV2ViIHByb2plY3Q8L3VpY29udHJvbD4uIEVudGVyIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246IDx1bD4KLTxsaT5Qcm9qZWN0IE5hbWU6IGVudGVyIGEgcHJvamVjdCBuYW1lPC9saT4KLTxsaT5UYXJnZXQgcnVudGltZTogVG9tY2F0IHNlcnZlciB2My54LCA0Lnggb3IgNS54IGRlcGVuZGluZyBvbiB0aGUgdmVyc2lvbgoteW91IGluc3RhbGxlZC4gSWYgaXQgaXMgbm90IGxpc3RlZCwgY2xpY2sgTmV3IGFuZCBicm93c2UgdG8gdGhlIGxvY2F0aW9uIHdoZXJlCi1pdCBpcyBpbnN0YWxsZWQuPC9saT4KLTxsaT5FbnN1cmUgdGhhdCA8dWljb250cm9sPkFkZCBwcm9qZWN0IHRvIGFuIEVBUjwvdWljb250cm9sPiBpcyA8aT5ub3Q8L2k+IHNlbGVjdGVkLjwvbGk+Ci08L3VsPjwvbGk+Ci08bGk+Q2xpY2sgPHVpY29udHJvbD5GaW5pc2g8L3VpY29udHJvbD4uPC9saT4KLTxsaT5UbyBhc3NvY2lhdGUgdGhlIHByb2plY3Qgd2l0aCB0aGUgc2VydmVyLCByaWdodC1jbGljayB0aGUgVG9tY2F0IHNlcnZlcgoteW91IGNyZWF0ZWQgaW4gdGhlIFNlcnZlciB2aWV3IGFuZCBzZWxlY3QgPHVpY29udHJvbD5BZGQgYW5kIHJlbW92ZSBwcm9qZWN0czwvdWljb250cm9sPi4KLVNlbGVjdCB0aGUgc2VydmljZSBhbmQgY2xpZW50IHByb2plY3RzIGZyb20gdGhlIEF2YWlsYWJsZSBwcm9qZWN0cyBsaXN0IGFuZAotY2xpY2sgPHVpY29udHJvbD5BZGQ8L3VpY29udHJvbD4uIDwvbGk+Ci08L29sPjwvZXhhbXBsZT4KLTwvdGFza2JvZHk+Ci08L3Rhc2s+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3Rhc2tzL3R0b21jYXRzZXJ2Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3Rhc2tzL3R0b21jYXRzZXJ2Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjMWYyM2IuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci90YXNrcy90dG9tY2F0c2Vydi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA3IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IkNyZWF0aW5nIGFuIEFwYWNoZSBUb21jYXQgc2VydmVyIGFuZCBXZWIgcHJvamVjdCIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJJZiB5b3UgcGxhbiB0byBjcmVhdGUgYSBXZWIgc2VydmljZSB0aGF0IHVzZXMgQXBhY2hlIEpha2FydGEgVG9tY2F0IGFzIGl0cyBzZXJ2ZXIsIFRvbWNhdCBtdXN0IGJlIGluc3RhbGxlZCBhbmQgYSBzZXJ2ZXIgY3JlYXRlZCBiZWZvcmUgeW91IGJlZ2luIGNyZWF0aW5nIHlvdXIgV2ViIHNlcnZpY2UuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IklmIHlvdSBwbGFuIHRvIGNyZWF0ZSBhIFdlYiBzZXJ2aWNlIHRoYXQgdXNlcyBBcGFjaGUgSmFrYXJ0YSBUb21jYXQgYXMgaXRzIHNlcnZlciwgVG9tY2F0IG11c3QgYmUgaW5zdGFsbGVkIGFuZCBhIHNlcnZlciBjcmVhdGVkIGJlZm9yZSB5b3UgYmVnaW4gY3JlYXRpbmcgeW91ciBXZWIgc2VydmljZS4iIC8+Ci08bWV0YSBjb250ZW50PSJBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQsIGNyZWF0aW5nIGFuIEFwYWNoZSBUb21jYXQgc2VydmVyLCBUb21jYXQgc2VydmVyLCBjcmVhdGluZyBzZXJ2ZXJzIGZvciBXZWIgc2VydmljZXMsIFdlYiBzZXJ2aWNlcyIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IkF4aXMgcnVudGltZSBlbnZpcm9ubWVudCwgY3JlYXRpbmcgYW4gQXBhY2hlIFRvbWNhdCBzZXJ2ZXIsIFRvbWNhdCBzZXJ2ZXIsIGNyZWF0aW5nIHNlcnZlcnMgZm9yIFdlYiBzZXJ2aWNlcywgV2ViIHNlcnZpY2VzIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJjcmVhdGluZ2FuYXBhY2hldG9tY2F0c2VydmVyIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+Q3JlYXRpbmcgYW4gQXBhY2hlIFRvbWNhdCBzZXJ2ZXIgYW5kIFdlYiBwcm9qZWN0PC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJjcmVhdGluZ2FuYXBhY2hldG9tY2F0c2VydmVyIj48YSBuYW1lPSJjcmVhdGluZ2FuYXBhY2hldG9tY2F0c2VydmVyIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5DcmVhdGluZyBhbiBBcGFjaGUgVG9tY2F0IHNlcnZlciBhbmQgV2ViIHByb2plY3Q8L2gxPgotCi0KLQotPGRpdj48cD5JZiB5b3UgcGxhbiB0byBjcmVhdGUgYSBXZWIgc2VydmljZSB0aGF0IHVzZXMgQXBhY2hlIEpha2FydGEgVG9tY2F0Ci1hcyBpdHMgc2VydmVyLCBUb21jYXQgbXVzdCBiZSBpbnN0YWxsZWQgYW5kIGEgc2VydmVyIGNyZWF0ZWQgYmVmb3JlIHlvdSBiZWdpbgotY3JlYXRpbmcgeW91ciBXZWIgc2VydmljZS48L3A+Ci0KLTxkaXYgY2xhc3M9InAiPkluc3RhbGwgQXBhY2hlIEpha2FydGEgVG9tY2F0IGZyb20gdGhpcyBVUkw6IDxhIGhyZWY9Imh0dHA6Ly9qYWthcnRhLmFwYWNoZS5vcmcvdG9tY2F0IiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy90b21jYXQ8L2E+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPk9uY2UgeW91IGhhdmUgaW5zdGFsbGVkIHRoZSBzZXJ2ZXIsIGNyZWF0ZSBhIFRvbWNhdCBzZXJ2ZXIgaW4gdGhlCi13b3JrYmVuY2ggYnkgZG9pbmcgdGhlIGZvbGxvd2luZzogPC9kaXY+Ci0KLTxvbD4KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+RnJvbSB0aGUgRmlsZSBtZW51LCBzZWxlY3QgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+TmV3ICZndDsgT3RoZXIgJmd0OyBTZXJ2ZXIgJmd0OyBTZXJ2ZXIKLSZndDsgTmV4dDwvc3Bhbj4uPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+U2VsZWN0IFRvbWNhdCB2IDMueCwgNC54IG9yIHY1LnggYXMgdGhlIHNlcnZlciB0eXBlLCBlbGVjdGluZyB0aGUKLWNvcnJlY3QgdmVyc2lvbiBvZiBUb21jYXQgZm9yIHlvdXIgaW5zdGFsbCwgYW5kIGNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk5leHQ8L3NwYW4+Ljwvc3Bhbj4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+T24gdGhlIFRvbWNhdCBzZXJ2ZXIgcGFnZTo8L3NwYW4+Ci08b2wgdHlwZT0iYSI+Ci08bGk+PHNwYW4+RW50ZXIgYSBzZXJ2ZXIgbmFtZS48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPlNwZWNpZnkgd2hlcmUgVG9tY2F0IGlzIGluc3RhbGxlZC48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkluc3RhbGxlZCBKUkVzPC9zcGFuPiwgY2xpY2sgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QWRkPC9zcGFuPiwKLWFuZCBlbnRlciB0aGUgYXBwcm9wcmlhdGUgaW5mb3JtYXRpb24gZm9yIHRoZSBKREsgeW91IHBsYW4gdG8gdXNlIGZvciBUb21jYXQuCi1Gb3IgZXhhbXBsZSwgZm9yIFRvbWNhdCB2NS4wIHRoZSBKUkUgbmFtZSB3b3VsZCBiZSBqZGsxNDEgYW5kIHRoZSBKUkUgaG9tZQotd291bGQgYmUgdGhlIGhvbWUgZGlyZWN0b3J5IGZvciBKREsgMS40LjEuIENsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk9LPC9zcGFuPiB0d2ljZQotb25jZSB5b3UgaGF2ZSBlbnRlcmVkIHRoaXMgaW5mb3JtYXRpb24uIEVuc3VyZSB0aGF0IHRoZSBuZXdseSBhZGRlZCBKREsgaXMKLW5vdyBzZWxlY3RlZCBpbiB0aGUgSlJFIGZpZWxkIG9mIHRoZSBUb21jYXQgc2VydmVyIHBhZ2UuIE5vdGUgdGhhdCBpZiB5b3UKLXBvaW50IHRoZSBzZXJ2ZXIgYXQgYSBKUkUgcmF0aGVyIHRoYW4gYSBKREsgdGhlIEpTUHMgd2lsbCBub3QgcHJvcGVybHkgY29tcGlsZQotYW5kIHdpbGwgbm90IGJlIGFibGUgdG8gcnVuIG9uIHRoZSBUb21jYXQgc2VydmVyLjwvc3Bhbj48L2xpPgotCi08L29sPgotCi08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkZpbmlzaDwvc3Bhbj4uPC9zcGFuPiAgVG8gc2VlIHRoZQotc2VydmVyIHlvdSBoYXZlIGNyZWF0ZWQgaW4gdGhlIHdvcmtzcGFjZSwgZnJvbSB0aGUgV2luZG93IG1lbnUgc2VsZWN0IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlNob3cKLXZpZXcgJmd0OyBPdGhlciAmZ3Q7IFNlcnZlciAmZ3Q7IFNlcnZlcnMgJmd0OyBPay48L3NwYW4+IDwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9ImV4YW1wbGUiPjxwPlRvIGJ1aWxkIGEgZHluYW1pYyBXZWIgcHJvamVjdCB0aGF0IHBvaW50cyB0byB0aGUgVG9tY2F0IHNlcnZlcgotdGhhdCB5b3UgaGF2ZSBjcmVhdGVkOjwvcD4KLTxvbD4KLTxsaT5DcmVhdGUgdGhlIHNlcnZpY2UgV2ViIHByb2plY3QgYnkgc2VsZWN0aW5nIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk5ldyAmZ3Q7IFdlYiAmZ3Q7IER5bmFtaWMKLVdlYiBwcm9qZWN0PC9zcGFuPi4gRW50ZXIgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjogPHVsPgotPGxpPlByb2plY3QgTmFtZTogZW50ZXIgYSBwcm9qZWN0IG5hbWU8L2xpPgotCi08bGk+VGFyZ2V0IHJ1bnRpbWU6IFRvbWNhdCBzZXJ2ZXIgdjMueCwgNC54IG9yIDUueCBkZXBlbmRpbmcgb24gdGhlIHZlcnNpb24KLXlvdSBpbnN0YWxsZWQuIElmIGl0IGlzIG5vdCBsaXN0ZWQsIGNsaWNrIE5ldyBhbmQgYnJvd3NlIHRvIHRoZSBsb2NhdGlvbiB3aGVyZQotaXQgaXMgaW5zdGFsbGVkLjwvbGk+Ci0KLTxsaT5FbnN1cmUgdGhhdCA8c3BhbiBjbGFzcz0idWljb250cm9sIj5BZGQgcHJvamVjdCB0byBhbiBFQVI8L3NwYW4+IGlzIDxlbT5ub3Q8L2VtPiBzZWxlY3RlZC48L2xpPgotCi08L3VsPgotPC9saT4KLQotPGxpPkNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkZpbmlzaDwvc3Bhbj4uPC9saT4KLQotPGxpPlRvIGFzc29jaWF0ZSB0aGUgcHJvamVjdCB3aXRoIHRoZSBzZXJ2ZXIsIHJpZ2h0LWNsaWNrIHRoZSBUb21jYXQgc2VydmVyCi15b3UgY3JlYXRlZCBpbiB0aGUgU2VydmVyIHZpZXcgYW5kIHNlbGVjdCA8c3BhbiBjbGFzcz0idWljb250cm9sIj5BZGQgYW5kIHJlbW92ZSBwcm9qZWN0czwvc3Bhbj4uCi1TZWxlY3QgdGhlIHNlcnZpY2UgYW5kIGNsaWVudCBwcm9qZWN0cyBmcm9tIHRoZSBBdmFpbGFibGUgcHJvamVjdHMgbGlzdCBhbmQKLWNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkFkZDwvc3Bhbj4uIDwvbGk+Ci0KLTwvb2w+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdGFza3MvdHdzYmVhbmEuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdGFza3MvdHdzYmVhbmEuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGY4OTY5Yy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2JlYW5hLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+Ci08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiIKLSAiLi4vLi4vZHRkL3Rhc2suZHRkIj4KLTx0YXNrIGlkPSJ0d3NiZWFuYSIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5DcmVhdGluZyBhIFdlYiBzZXJ2aWNlIGZyb20gYSA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIKLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IGJlYW4gdXNpbmcgdGhlIEFwYWNoZSBBeGlzIHJ1bi10aW1lCi1lbnZpcm9ubWVudDwvdGl0bGU+Ci08dGl0bGVhbHRzPgotPHNlYXJjaHRpdGxlPkNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgZnJvbSBhIEphdmEgYmVhbiB1c2luZyB0aGUgQXBhY2hlIEF4aXMKLXJ1bi10aW1lIGVudmlyb25tZW50PC9zZWFyY2h0aXRsZT4KLTwvdGl0bGVhbHRzPgotPHNob3J0ZGVzYz5UaGUgV2ViIFNlcnZpY2Ugd2l6YXJkIGFzc2lzdHMgeW91IGluIGNyZWF0aW5nIGEgbmV3IFdlYiBzZXJ2aWNlLAotY29uZmlndXJpbmcgaXQgZm9yIGRlcGxveW1lbnQsIGFuZCBkZXBsb3lpbmcgdGhlIFdlYiBzZXJ2aWNlIHRvIGEgc2VydmVyLgotT25jZSB5b3VyIFdlYiBzZXJ2aWNlIGlzIGRlcGxveWVkLCB0aGUgd2l6YXJkIGFzc2lzdHMgeW91IGluIGdlbmVyYXRpbmcgdGhlCi1jbGllbnQgcHJveHkgYW5kIHNhbXBsZSBhcHBsaWNhdGlvbiB0byB0ZXN0IHRoZSBXZWIgc2VydmljZS4gV2hlbiB5b3UgaGF2ZQotY29tcGxldGVkIHRlc3RpbmcsIHlvdSBjYW4gcHVibGlzaCB5b3VyIFdlYiBzZXJ2aWNlIHRvIGEgVURESSBCdXNpbmVzcyBSZWdpc3RyeQotdXNpbmcgdGhlIEV4cG9ydCB3aXphcmQuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPkF4aXMgcnVudGltZSBlbnZpcm9ubWVudDxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5KYXZhIGJlYW5zPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+QXhpcyBydW50aW1lIGVudmlyb25tZW50PGluZGV4dGVybT5jcmVhdGluZyBhIFdlYiBzZXJ2aWNlPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxwcmVyZXE+PHA+UHJlcmVxdWlzaXRlczo8b2w+Ci08bGkgaWQ9ImNyZWF0ZXRvbWNhdGxpbmsiPklmIHlvdSBhcmUgdXNpbmcgdGhlIEFwYWNoZSBKYWthcnRhIFRvbWNhdCBzZXJ2bGV0Ci1jb250YWluZXIgYXMgeW91ciBzZXJ2ZXIsIHlvdSBtdXN0IGluc3RhbGwgaXQsIGNvbmZpZ3VyZSBhbiBpbnN0YW5jZSBvZiBpdCwKLWFuZCBjcmVhdGUgYSBXZWIgcHJvamVjdCB0YXJnZXRlZCB0byBpdCBhcyBkZXNjcmliZWQgaW4gPHhyZWYgaHJlZj0idHRvbWNhdHNlcnYuZGl0YSIKLXNjb3BlPSJsb2NhbCI+Q3JlYXRpbmcgYW4gQXBhY2hlIFRvbWNhdCBzZXJ2ZXIgYW5kIFdlYiBwcm9qZWN0PC94cmVmPjwvbGk+Ci08bGk+Q3JlYXRlIG9yIGltcG9ydCBhIGJlYW4gaW50byB0aGUgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBzb3VyY2UgZm9sZGVyIG9mIHRoZSBXZWIgcHJvamVjdC4gVG8KLWltcG9ydCwgc2VsZWN0IHRoZSA8Yj5KYXZhIFJlc291cmNlczogc3JjPC9iPiBmb2xkZXIsIGFuZCBmcm9tIHRoZSBmaWxlIG1lbnUKLXNlbGVjdCA8bWVudWNhc2NhZGU+PHVpY29udHJvbD5JbXBvcnQ8L3VpY29udHJvbD48dWljb250cm9sPkdlbmVyYWw8L3VpY29udHJvbD4KLTx1aWNvbnRyb2w+RmlsZSBTeXN0ZW08L3VpY29udHJvbD48L21lbnVjYXNjYWRlPiBhbmQgYnJvd3NlIHRvIHdoZXJlIHlvdXIKLXBhY2thZ2UgaXMuPC9saT4KLTwvb2w+PC9wPjwvcHJlcmVxPgotPGNvbnRleHQ+VG8gY3JlYXRlIGEgV2ViIHNlcnZpY2UgZnJvbSBhIGJlYW4gdXNpbmcgdGhlIEFwYWNoZSBBeGlzIHJ1bi10aW1lCi1lbnZpcm9ubWVudDo8L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPlN3aXRjaCB0byB0aGUgSjJFRSBwZXJzcGVjdGl2ZSAoIDx1aWNvbnRyb2w+V2luZG93ID4gT3BlbiBQZXJzcGVjdGl2ZQotPiBKMkVFPC91aWNvbnRyb2w+KS48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkluIHRoZSBQcm9qZWN0IEV4cGxvcmVyIHZpZXcsIHNlbGVjdCB0aGUgYmVhbiB0aGF0IHlvdSBjcmVhdGVkCi1vciBpbXBvcnRlZCBpbnRvIHRoZSBzb3VyY2UgZm9sZGVyIG9mIHlvdXIgV2ViIHByb2plY3QuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5DbGljayAgPHVpY29udHJvbD5GaWxlID4gTmV3ID4gT3RoZXI8L3VpY29udHJvbD4uPC9jbWQ+PGluZm8+U2VsZWN0PHVpY29udHJvbD5XZWIKLVNlcnZpY2VzPC91aWNvbnRyb2w+IGluIG9yZGVyIHRvIGRpc3BsYXkgdGhlIHZhcmlvdXMgV2ViIHNlcnZpY2Ugd2l6YXJkcy4KLVNlbGVjdCB0aGUgIDx1aWNvbnRyb2w+V2ViIFNlcnZpY2U8L3VpY29udHJvbD4gd2l6YXJkLiBDbGljayAgPHVpY29udHJvbD5OZXh0PC91aWNvbnRyb2w+LjwvaW5mbz4KLTwvc3RlcD4KLTxzdGVwPjxjbWQ+V2ViIFNlcnZpY2VzIHBhZ2U6IHNlbGVjdCAgPHVpY29udHJvbD5Cb3R0b20gdXAgSmF2YSBiZWFuIFdlYiBzZXJ2aWNlPC91aWNvbnRyb2w+IGFzCi15b3VyIFdlYiBzZXJ2aWNlIHR5cGUsIGFuZCBlbnRlciB0aGUgVVJJIHRvIHRoZSBXU0RMLCBXU0lMLCBvciBIVE1MIGZpbGUgdGhhdAotd2lsbCBiZSB1c2VkIHRvIGdlbmVyYXRlIHRoZSBzZXJ2aWNlLjwvY21kPgotPHN1YnN0ZXBzIGlkPSJjcmVhdGVzdGVwNHVsIj4KLTxzdWJzdGVwPjxjbWQ+U2VsZWN0IHRoZSBzdGFnZXMgb2YgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50IHRoYXQgeW91IHdhbnQKLXRvIGNvbXBsZXRlIHVzaW5nIHRoZSBzbGlkZXI6PC9jbWQ+PGluZm8+PHVsPgotPGxpPkRldmVsb3A6IHRoaXMgd2lsbCBkZXZlbG9wIHRoZSBXU0RMIGRlZmluaXRpb24gYW5kIGltcGxlbWVudGF0aW9uIG9mIHRoZQotV2ViIHNlcnZpY2UuIFRoaXMgaW5jbHVkZXMgc3VjaCB0YXNrcyBhcyBjcmVhdGluZyB0aGUgbW9kdWxlcyB3aGljaCB3aWxsIGNvbnRhaW4KLXRoZSBnZW5lcmF0ZWQgY29kZSwgV1NETCBmaWxlcywgZGVwbG95bWVudCBkZXNjcmlwdG9ycywgYW5kIEphdmEgZmlsZXMgd2hlbgotYXBwcm9wcmlhdGUuPC9saT4KLTxsaT5Bc3NlbWJsZTogdGhpcyBlbnN1cmVzIHRoZSBwcm9qZWN0IHRoYXQgd2lsbCBob3N0IHRoZSBXZWIgc2VydmljZSBvciBjbGllbnQKLWdldHMgYXNzb2NpYXRlZCB0byBhbiBFQVIgd2hlbiByZXF1aXJlZCBieSB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9uIHNlcnZlci48L2xpPgotPGxpPkRlcGxveTogdGhpcyB3aWxsIGNyZWF0ZSB0aGUgZGVwbG95bWVudCBjb2RlIGZvciB0aGUgc2VydmljZS48L2xpPgotPGxpPkluc3RhbGw6IHRoaXMgd2lsbCBpbnN0YWxsIGFuZCBjb25maWd1cmUgdGhlIFdlYiBtb2R1bGUgYW5kIEVBUnMgb24gdGhlCi10YXJnZXQgc2VydmVyLjwvbGk+Ci08bGk+U3RhcnQ6IHRoaXMgd2lsbCBzdGFydCB0aGUgc2VydmVyIG9uY2UgdGhlIHNlcnZpY2UgaGFzIGJlZW4gaW5zdGFsbGVkCi1vbiBpdC4gVGhlIHNlcnZlci1jb25maWcud3NkZCBmaWxlIHdpbGwgYmUgZ2VuZXJhdGVkLjwvbGk+Ci08bGk+VGVzdDogdGhpcyB3aWxsIHByb3ZpZGUgdmFyaW91cyBvcHRpb25zIGZvciB0ZXN0aW5nIHRoZSBzZXJ2aWNlLCBzdWNoCi1hcyB1c2luZyB0aGUgV2ViIFNlcnZpY2UgRXhwbG9yZXIgb3Igc2FtcGxlIEpTUHMuPC9saT4KLTwvdWw+PC9pbmZvPjwvc3Vic3RlcD4KLTxzdWJzdGVwPjxjbWQ+U2VsZWN0IHlvdXIgc2VydmVyOiB0aGUgZGVmYXVsdCBzZXJ2ZXIgaXMgZGlzcGxheWVkLiBJZiB5b3UKLXdhbnQgdG8gZGVwbG95IHlvdXIgc2VydmljZSB0byBhIGRpZmZlcmVudCBzZXJ2ZXIgY2xpY2sgdGhlIGxpbmsgdG8gc3BlY2lmeQotYSBkaWZmZXJlbnQgc2VydmVyLjwvY21kPjwvc3Vic3RlcD4KLTxzdWJzdGVwPjxjbWQ+U2VsZWN0IHlvdXIgcnVudGltZTogdGhlIGRlZmF1bHQgcnVudGltZSBpcyBkaXNwbGF5ZWQuIElmIHlvdQotd2FudCB0byBkZXBsb3kgeW91ciBzZXJ2aWNlIHRvIGEgZGlmZmVyZW50IHJ1bnRpbWUgY2xpY2sgdGhlIGxpbmsgdG8gc3BlY2lmeQotYSBkaWZmZXJlbnQgcnVudGltZS48L2NtZD48L3N1YnN0ZXA+Ci08c3Vic3RlcD48Y21kPlNlbGVjdCB0aGUgc2VydmljZSBwcm9qZWN0OiB0aGUgcHJvamVjdCBjb250YWluaW5nIHRoZSBwcm9qZWN0Ci1zZWxlY3RlZCBpbiB5b3VyIHdvcmtzcGFjZSBpcyBkaXNwbGF5ZWQuIFRvIHNlbGVjdCBhIGRpZmZlcmVudCBwcm9qZWN0IGFuZAotRUFSIGNsaWNrIG9uIHRoZSBwcm9qZWN0IGxpbmsuPC9jbWQ+PGluZm8+RW5zdXJlIHRoYXQgdGhlIHByb2plY3Qgc2VsZWN0ZWQKLWFzIHRoZSBDbGllbnQgV2ViIFByb2plY3QgaXMgZGlmZmVyZW50IGZyb20gdGhlIFNlcnZpY2UgV2ViIFByb2plY3QsIG9yIHRoZQotc2VydmljZSB3aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBjbGllbnQncyBnZW5lcmF0ZWQgYXJ0aWZhY3RzLjwvaW5mbz48L3N1YnN0ZXA+Ci08c3Vic3RlcD48Y21kPklmIHlvdSB3YW50IHRvIGNyZWF0ZSBhIGNsaWVudCwgc2VsZWN0IHRoZSB0eXBlIG9mIHByb3h5IHRvCi1iZSBnZW5lcmF0ZWQgYW5kIHJlcGVhdCB0aGUgYWJvdmUgc3RlcHMgZm9yIHRoZSBjbGllbnQuPC9jbWQ+PC9zdWJzdGVwPgotPHN1YnN0ZXA+PGNtZD5QdWJsaXNoIHRoZSBXZWIgc2VydmljZTogdGhpcyB3aWxsIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyCi10byBwdWJsaXNoIHlvdXIgV2ViIHNlcnZpY2UgdG8gYSBVRERJIHJlZ2lzdHJ5LjwvY21kPjwvc3Vic3RlcD4KLTxzdWJzdGVwPjxjbWQ+TW9uaXRvciB0aGUgV2ViIHNlcnZpY2U6IHRoaXMgd2lsbCBzZW5kIHRoZSBXZWIgc2VydmljZSB0cmFmZmljCi10aHJvdWdoIHRoZSBUQ1AvSVAgTW9uaXRvciwgd2hpY2ggYWxsb3dzIHlvdSB0byB3YXRjaCB0aGUgU09BUCB0cmFmZmljIGdlbmVyYXRlZAotYnkgdGhlIFdlYiBzZXJ2aWNlIGFuZCB0byB0ZXN0IHRoaXMgdHJhZmZpYyBmb3IgV1MtSSBjb21wbGlhbmNlLiBBbHRlcm5hdGVseQoteW91IGNhbiBtYW51YWxseSBzZXQgdXAgYSBUQ1AvSVAgbW9uaXRvciBhcyBkZXNjcmliZWQgaW4gPHhyZWYgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci90YXNrcy90bW9uaXRvci5kaXRhIgotc2NvcGU9InBlZXIiPlVzaW5nIHRoZSBUQ1AvSVAgTW9uaXRvciB0byB0ZXN0IFdlYiBzZXJ2aWNlczwveHJlZj48L2NtZD48L3N1YnN0ZXA+Ci08L3N1YnN0ZXBzPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5XZWIgU2VydmljZSA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIKLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IEJlYW4gSWRlbnRpdHkgcGFnZTogdGhlIFdlYiBzZXJ2aWNlCi1XU0RMIG5hbWUgd2lsbCBiZSBsaXN0ZWQuPC9jbWQ+PGluZm8+WW91IGhhdmUgdGhlIGZvbGxvd2luZyBvcHRpb25zOjx1bD4KLTxsaT5TZWxlY3QgdGhlIG1ldGhvZHMgdG8gZXhwb3NlLjwvbGk+Ci08bGk+U2VsZWN0IHRoZSBlbmNvZGluZyBzdHlsZS4gUlBDL0VuY29kZWQgaXMgdGhlIHJlY29tbWVuZGVkIGVuY29kaW5nIHN0eWxlCi1mb3IgdGhlIEF4aXMgcnVuLXRpbWUgZW52aXJvbm1lbnQuIFRoaXMgZW5jb2RpbmcgbWV0aG9kIGlzIG5vdCBXUy1JIGNvbXBsaWFudC48L2xpPgotPGxpPlNlbGVjdCBpZiB5b3Ugd2FudCB0byBjdXN0b21pemUgdGhlIHBhY2thZ2UgdG8gbmFtZXNwYWNlIG1hcHBpbmdzLjwvbGk+Ci08L3VsPkNsaWNrICA8dWljb250cm9sPk5leHQ8L3VpY29udHJvbD48L2luZm8+PC9zdGVwPgotPHN0ZXA+PGNtZD5XZWIgU2VydmljZSBQYWNrYWdlIHRvIE5hbWVzcGFjZSBNYXBwaW5ncyBwYWdlOiBpZiB5b3Ugc2VsZWN0ZWQKLSA8dWljb250cm9sPkRlZmluZSBjdXN0b20gbWFwcGluZyBmb3IgcGFja2FnZSB0byBuYW1lc3BhY2U8L3VpY29udHJvbD4gb24KLXRoZSBwcmV2aW91cyBwYW5lbCwgeW91IGNhbiBlbnRlciB5b3VyIGN1c3RvbSBtYXBwaW5nIHBhaXJzIG9uIHRoaXMgcGFuZWwKLWJ5IGNsaWNraW5nICA8dWljb250cm9sPkFkZDwvdWljb250cm9sPi4gQWx0ZXJuYXRlbHksIHlvdSBjYW4gY2xpY2sgIDxiPkltcG9ydDwvYj4gdG8KLWltcG9ydCBjdXN0b20gbWFwcGluZyBwYWlycyBmcm9tIGEgIDxzeXN0ZW1vdXRwdXQ+LnByb3BlcnRpZXM8L3N5c3RlbW91dHB1dD4gZmlsZS4KLVRoZSBjb250ZW50IG9mIHRoZSBwcm9wZXJ0aWVzIGZpbGUgbXVzdCBiZSBvZiB0aGUgZm9ybWF0ICA8Y29kZXBoPjx2YXJuYW1lPnBhY2thZ2U9bmFtZXNwYWNlPC92YXJuYW1lPjwvY29kZXBoPi48L2NtZD4KLTwvc3RlcD4KLTxzdGVwPjxjbWQ+V2ViIFNlcnZpY2UgVGVzdCBwYWdlOiBJZiB5b3Ugc2VsZWN0ZWQgdG8gdGVzdCB0aGUgV2ViIHNlcnZpY2UsCi1zZWxlY3QgdGhlIHRlc3QgZmFjaWxpdHkgZm9yIHRoZSBnZW5lcmF0ZWQgV2ViIHNlcnZpY2UuPC9jbWQ+PGluZm8+VGhpcyB3aWxsCi1vcGVuIHRoZSBXZWIgc2VydmljZSBpbiB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLiBTZWxlY3QgdGhlIG9wZXJhdGlvbiB5b3UKLXdhbnQgdG8gdGVzdCwgZW50ZXIgdGhlIHJlcXVpcmVkIGluZm9ybWF0aW9uLCBhbmQgY2xpY2s8dWljb250cm9sPkdvPC91aWNvbnRyb2w+LgotVGhlIHJlc3VsdCB3aWxsIGRpc3BsYXkgaW4gdGhlIFN0YXR1cyBwYW5lLiBDbGljayAgPHVpY29udHJvbD5OZXh0PC91aWNvbnRyb2w+LjwvaW5mbz4KLTwvc3RlcD4KLTxzdGVwPjxjbWQ+V2ViIFNlcnZpY2UgUHJveHkgcGFnZTogaWYgeW91IGhhdmUgc2VsZWN0ZWQgdG8gZ2VuZXJhdGUgYSBwcm94eSwKLXNlbGVjdCBpZiB5b3Ugd2FudCB0byBjdXN0b21pemUgdGhlIHBhY2thZ2UgdG8gbmFtZXNwYWNlIG1hcHBpbmdzLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+V2ViIFNlcnZpY2UgQ2xpZW50IFRlc3QgcGFnZTogVXNlIHRoaXMgcGFnZSB0byBzZWxlY3QgdGhlIGZvbGxvd2luZwotb3B0aW9uczogPC9jbWQ+Ci08c3Vic3RlcHM+Ci08c3Vic3RlcD48Y21kPlNlbGVjdCB5b3VyIHRlc3QgZmFjaWxpdHkuIFlvdSBjYW4gdGVzdCB0aGUgZ2VuZXJhdGVkIHByb3h5Ci1pbiB0aGUgV2ViIFNlcnZpY2UgRXhwbG9yZXIsIG9yIHlvdSBjYW4gZ2VuZXJhdGUgYSBzYW1wbGUgV2ViIHNlcnZpY2UgSlNQLjwvY21kPgotPC9zdWJzdGVwPgotPHN1YnN0ZXA+PGNtZD5JZiB5b3Ugc2VsZWN0ZWQgdG8gdGVzdCB0aGUgcHJveHkgdGhyb3VnaCBhIEpTUCwgeW91IGNhbiBzZWxlY3QKLXRoZSBmb2xkZXIgd2hlcmUgdGhlIEpTUCB3aWxsIGJlIGxvY2F0ZWQsIGFuZCB5b3UgY2FuIHNlbGVjdCB0aGUgbWV0aG9kcyB0aGF0Ci13aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBKU1AuPC9jbWQ+PC9zdWJzdGVwPgotPHN1YnN0ZXA+PGNtZD5TZWxlY3QgIDx1aWNvbnRyb2w+UnVuIHRlc3Qgb24gc2VydmVyPC91aWNvbnRyb2w+IHRvIHN0YXJ0IHRoZQotc2VydmVyIGZvciB5b3UgYXV0b21hdGljYWxseS48L2NtZD48L3N1YnN0ZXA+Ci08L3N1YnN0ZXBzPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5XZWIgU2VydmljZSBQdWJsaWNhdGlvbiBwYWdlOiBTZWxlY3Qgd2hldGhlciBvciBub3QgeW91IHdhbnQgdG8KLXB1Ymxpc2ggdGhpcyBXZWIgc2VydmljZSB0byBhIFVEREkgcmVnaXN0cnkuIENsaWNrIDx1aWNvbnRyb2w+RmluaXNoPC91aWNvbnRyb2w+LiZuYnNwOzwvY21kPgotPGluZm8+Tm90ZTogeW91IG1heSBzZWUgYSB3YXJuaW5nIHN0YXRpbmcgPGNvZGVwaD5FcnJvciBpbiBnZW5lcmF0aW5nIFdTREwKLWZyb20gSmF2YS4gQ2xhc3NOb3RGb3VuZDogJmx0O2JlYW4gbmFtZT48L2NvZGVwaD4uIFRoaXMgZXJyb3IgY2FuIGJlIHNhZmVseQotaWdub3JlZC48L2luZm8+PC9zdGVwPgotPC9zdGVwcz4KLTxyZXN1bHQgaWQ9ImF4aXN3c2NyZWF0ZXJlc3VsdCI+PHA+QWZ0ZXIgdGhlIFdlYiBzZXJ2aWNlIGhhcyBiZWVuIGNyZWF0ZWQsCi10aGUgZm9sbG93aW5nIG1heSBvY2N1ciBkZXBlbmRpbmcgb24gdGhlIG9wdGlvbnMgeW91IHNlbGVjdGVkOiA8dWw+Ci08bGk+SWYgeW91IGhhdmUgc2VsZWN0ZWQgdG8gdGVzdCB0aGUgZ2VuZXJhdGVkIHByb3h5IHVzaW5nIFdlYiBzZXJ2aWNlIEpTUHMsCi10aGUgcHJveHkgaXMgbGF1bmNoZWQgaW4gYSBXZWIgYnJvd3NlciBhdCB0aGUgZm9sbG93aW5nIFVSTDogaHR0cDovL2xvY2FsaG9zdDogPHZhcm5hbWU+cG9ydDwvdmFybmFtZT4vIDx2YXJuYW1lPldlYlByb2plY3Q8L3Zhcm5hbWU+Q2xpZW50L3NhbXBsZTxpCi0+QmVhbk5hbWU8L2k+LyA8dmFybmFtZT5XZWJTZXJ2aWNlTmFtZTwvdmFybmFtZT4vVGVzdENsaWVudC5qc3AgWW91IGNhbiB1c2UKLXRoaXMgc2FtcGxlIGFwcGxpY2F0aW9uIHRvIHRlc3QgdGhlIFdlYiBzZXJ2aWNlIGJ5IHNlbGVjdGluZyBhIG1ldGhvZCwgZW50ZXJpbmcKLWEgdmFsdWUgZm9yIHRoZSBtZXRob2QsIGFuZCBjbGlja2luZyAgPHVpY29udHJvbD5JbnZva2U8L3VpY29udHJvbD4uIFRoZSByZXN1bHQKLW9mIHRoZSBtZXRob2Qgd2lsbCBkaXNwbGF5IGluIHRoZSByZXN1bHRzIHBhbmUuPC9saT4KLTxsaT5JZiB5b3UgaGF2ZSBzZWxlY3RlZCB0byB0ZXN0IHRoZSBXZWIgc2VydmljZSB1c2luZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLAotdGhlIEV4cGxvcmVyIHdpbGwgb3Blbi4gU2VsZWN0IHRoZSBvcGVyYXRpb24geW91IHdhbnQgdG8gdGVzdCwgZW50ZXIgdGhlIHJlcXVpcmVkCi1pbmZvcm1hdGlvbiwgYW5kIGNsaWNrICA8Yj5HbzwvYj4uIFRoZSByZXN1bHQgd2lsbCBkaXNwbGF5IGluIHRoZSBTdGF0dXMgcGFuZS48L2xpPgotPGxpPklmIHlvdSBoYXZlIHNlbGVjdGVkIHRvIHB1Ymxpc2ggdGhlIFdlYiBzZXJ2aWNlLCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyCi1pcyBsYXVuY2hlZCBkaXNwbGF5aW5nIHRoZSBwYWdlIHJlcXVpcmVkIHRvIHB1Ymxpc2ggeW91ciBXZWIgc2VydmljZS4gRm9sbG93Ci10aGUgaW5zdHJ1Y3Rpb25zIGluICA8dmFybmFtZT5QdWJsaXNoaW5nIHRoZSBXZWIgc2VydmljZTwvdmFybmFtZT4gdG8gY29tcGxldGUKLXRoaXMgdGFzay48L2xpPgotPC91bD48L3A+PC9yZXN1bHQ+Ci08cG9zdHJlcT48cD4gPHVpY29udHJvbD5JbXBvcnRhbnQ6PC91aWNvbnRyb2w+IElmIHlvdXIgbWV0aG9kcyBjb250YWluIHR5cGVzLAotbm90IHN1cHBvcnRlZCBieSB0aGUgc2FtcGxlLCBzdWNoIGFzIGFycmF5cywgaW5kZXhlZCBwcm9wZXJ0aWVzLCBhbmQgY29sbGVjdGlvbnMsCi10aGUgbWV0aG9kcyB3aWxsIGJlIG9taXR0ZWQgZnJvbSB0aGUgc2FtcGxlIGFuZCB5b3Ugd2lsbCByZWNlaXZlIGEgd2FybmluZwotbWVzc2FnZS48L3A+PC9wb3N0cmVxPgotPC90YXNrYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+IFRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdG92ZXJ3cy5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+IERldmVsb3BpbmcgV2ViIHNlcnZpY2VzPC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHVkZGlleHAuZGl0YSIKLXNjb3BlPSJwZWVyIj48bGlua3RleHQ+IFVzaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2xpbmt0ZXh0PjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgUmVmZXJlbmNlPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9yZWYvcndzZGwuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PldTREwgZG9jdW1lbnRzPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci90YXNrcy90d3NiZWFuYS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci90YXNrcy90d3NiZWFuYS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTkxNDgwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdGFza3MvdHdzYmVhbmEuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwNyIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJDcmVhdGluZyBhIFdlYiBzZXJ2aWNlIGZyb20gYSBKYXZhIGJlYW4gdXNpbmcgdGhlIEFwYWNoZSBBeGlzIHJ1bi10aW1lIGVudmlyb25tZW50IiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IlRoZSBXZWIgU2VydmljZSB3aXphcmQgYXNzaXN0cyB5b3UgaW4gY3JlYXRpbmcgYSBuZXcgV2ViIHNlcnZpY2UsIGNvbmZpZ3VyaW5nIGl0IGZvciBkZXBsb3ltZW50LCBhbmQgZGVwbG95aW5nIHRoZSBXZWIgc2VydmljZSB0byBhIHNlcnZlci4gT25jZSB5b3VyIFdlYiBzZXJ2aWNlIGlzIGRlcGxveWVkLCB0aGUgd2l6YXJkIGFzc2lzdHMgeW91IGluIGdlbmVyYXRpbmcgdGhlIGNsaWVudCBwcm94eSBhbmQgc2FtcGxlIGFwcGxpY2F0aW9uIHRvIHRlc3QgdGhlIFdlYiBzZXJ2aWNlLiBXaGVuIHlvdSBoYXZlIGNvbXBsZXRlZCB0ZXN0aW5nLCB5b3UgY2FuIHB1Ymxpc2ggeW91ciBXZWIgc2VydmljZSB0byBhIFVEREkgQnVzaW5lc3MgUmVnaXN0cnkgdXNpbmcgdGhlIEV4cG9ydCB3aXphcmQuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBXZWIgU2VydmljZSB3aXphcmQgYXNzaXN0cyB5b3UgaW4gY3JlYXRpbmcgYSBuZXcgV2ViIHNlcnZpY2UsIGNvbmZpZ3VyaW5nIGl0IGZvciBkZXBsb3ltZW50LCBhbmQgZGVwbG95aW5nIHRoZSBXZWIgc2VydmljZSB0byBhIHNlcnZlci4gT25jZSB5b3VyIFdlYiBzZXJ2aWNlIGlzIGRlcGxveWVkLCB0aGUgd2l6YXJkIGFzc2lzdHMgeW91IGluIGdlbmVyYXRpbmcgdGhlIGNsaWVudCBwcm94eSBhbmQgc2FtcGxlIGFwcGxpY2F0aW9uIHRvIHRlc3QgdGhlIFdlYiBzZXJ2aWNlLiBXaGVuIHlvdSBoYXZlIGNvbXBsZXRlZCB0ZXN0aW5nLCB5b3UgY2FuIHB1Ymxpc2ggeW91ciBXZWIgc2VydmljZSB0byBhIFVEREkgQnVzaW5lc3MgUmVnaXN0cnkgdXNpbmcgdGhlIEV4cG9ydCB3aXphcmQuIiAvPgotPG1ldGEgY29udGVudD0iQXhpcyBydW50aW1lIGVudmlyb25tZW50LCBXZWIgc2VydmljZXMsIEphdmEgYmVhbnMsIGNyZWF0aW5nIGEgV2ViIHNlcnZpY2UiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQsIFdlYiBzZXJ2aWNlcywgSmF2YSBiZWFucywgY3JlYXRpbmcgYSBXZWIgc2VydmljZSIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2NheGlzdG92ZXIuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3Rhc2tzL3RvdmVyd3MuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R1ZGRpZXhwLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9yZWYvcndzZGwuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0d3NiZWFuYSIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgZnJvbSBhIEphdmEgYmVhbiB1c2luZyB0aGUgQXBhY2hlIEF4aXMKLXJ1bi10aW1lIGVudmlyb25tZW50PC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0d3NiZWFuYSI+PGEgbmFtZT0idHdzYmVhbmEiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgZnJvbSBhIEphdmEgYmVhbiB1c2luZyB0aGUgQXBhY2hlIEF4aXMgcnVuLXRpbWUKLWVudmlyb25tZW50PC9oMT4KLQotCi0KLQotPGRpdj48cD5UaGUgV2ViIFNlcnZpY2Ugd2l6YXJkIGFzc2lzdHMgeW91IGluIGNyZWF0aW5nIGEgbmV3IFdlYiBzZXJ2aWNlLAotY29uZmlndXJpbmcgaXQgZm9yIGRlcGxveW1lbnQsIGFuZCBkZXBsb3lpbmcgdGhlIFdlYiBzZXJ2aWNlIHRvIGEgc2VydmVyLgotT25jZSB5b3VyIFdlYiBzZXJ2aWNlIGlzIGRlcGxveWVkLCB0aGUgd2l6YXJkIGFzc2lzdHMgeW91IGluIGdlbmVyYXRpbmcgdGhlCi1jbGllbnQgcHJveHkgYW5kIHNhbXBsZSBhcHBsaWNhdGlvbiB0byB0ZXN0IHRoZSBXZWIgc2VydmljZS4gV2hlbiB5b3UgaGF2ZQotY29tcGxldGVkIHRlc3RpbmcsIHlvdSBjYW4gcHVibGlzaCB5b3VyIFdlYiBzZXJ2aWNlIHRvIGEgVURESSBCdXNpbmVzcyBSZWdpc3RyeQotdXNpbmcgdGhlIEV4cG9ydCB3aXphcmQuPC9wPgotCi08ZGl2IGNsYXNzPSJwIj48ZGl2IGNsYXNzPSJwIj5QcmVyZXF1aXNpdGVzOjxvbD4KLTxsaSBpZD0idHdzYmVhbmFfX2NyZWF0ZXRvbWNhdGxpbmsiPjxhIG5hbWU9InR3c2JlYW5hX19jcmVhdGV0b21jYXRsaW5rIj48IS0tIC0tPjwvYT5JZiB5b3UgYXJlIHVzaW5nIHRoZSBBcGFjaGUgSmFrYXJ0YSBUb21jYXQgc2VydmxldAotY29udGFpbmVyIGFzIHlvdXIgc2VydmVyLCB5b3UgbXVzdCBpbnN0YWxsIGl0LCBjb25maWd1cmUgYW4gaW5zdGFuY2Ugb2YgaXQsCi1hbmQgY3JlYXRlIGEgV2ViIHByb2plY3QgdGFyZ2V0ZWQgdG8gaXQgYXMgZGVzY3JpYmVkIGluIDxhIGhyZWY9InR0b21jYXRzZXJ2Lmh0bWwiPkNyZWF0aW5nIGFuIEFwYWNoZSBUb21jYXQgc2VydmVyIGFuZCBXZWIgcHJvamVjdDwvYT48L2xpPgotCi08bGk+Q3JlYXRlIG9yIGltcG9ydCBhIGJlYW4gaW50byB0aGUgSmF2YeKEoiBzb3VyY2UgZm9sZGVyIG9mIHRoZSBXZWIgcHJvamVjdC4gVG8KLWltcG9ydCwgc2VsZWN0IHRoZSA8c3Ryb25nPkphdmEgUmVzb3VyY2VzOiBzcmM8L3N0cm9uZz4gZm9sZGVyLCBhbmQgZnJvbSB0aGUgZmlsZSBtZW51Ci1zZWxlY3QgPHNwYW4gY2xhc3M9Im1lbnVjYXNjYWRlIj48c3BhbiBjbGFzcz0idWljb250cm9sIj5JbXBvcnQ8L3NwYW4+ICZndDsgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+R2VuZXJhbDwvc3Bhbj4KLSAmZ3Q7IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkZpbGUgU3lzdGVtPC9zcGFuPjwvc3Bhbj4gYW5kIGJyb3dzZSB0byB3aGVyZSB5b3VyCi1wYWNrYWdlIGlzLjwvbGk+Ci0KLTwvb2w+Ci08L2Rpdj4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj5UbyBjcmVhdGUgYSBXZWIgc2VydmljZSBmcm9tIGEgYmVhbiB1c2luZyB0aGUgQXBhY2hlIEF4aXMgcnVuLXRpbWUKLWVudmlyb25tZW50OjwvZGl2PgotCi08b2w+Ci08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPlN3aXRjaCB0byB0aGUgSjJFRSBwZXJzcGVjdGl2ZSAoIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPldpbmRvdyAmZ3Q7IE9wZW4gUGVyc3BlY3RpdmUKLSZndDsgSjJFRTwvc3Bhbj4pLjwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSBQcm9qZWN0IEV4cGxvcmVyIHZpZXcsIHNlbGVjdCB0aGUgYmVhbiB0aGF0IHlvdSBjcmVhdGVkCi1vciBpbXBvcnRlZCBpbnRvIHRoZSBzb3VyY2UgZm9sZGVyIG9mIHlvdXIgV2ViIHByb2plY3QuPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+Q2xpY2sgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkZpbGUgJmd0OyBOZXcgJmd0OyBPdGhlcjwvc3Bhbj4uPC9zcGFuPiBTZWxlY3Q8c3BhbiBjbGFzcz0idWljb250cm9sIj5XZWIKLVNlcnZpY2VzPC9zcGFuPiBpbiBvcmRlciB0byBkaXNwbGF5IHRoZSB2YXJpb3VzIFdlYiBzZXJ2aWNlIHdpemFyZHMuCi1TZWxlY3QgdGhlICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5XZWIgU2VydmljZTwvc3Bhbj4gd2l6YXJkLiBDbGljayAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+TmV4dDwvc3Bhbj4uCi08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPldlYiBTZXJ2aWNlcyBwYWdlOiBzZWxlY3QgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkJvdHRvbSB1cCBKYXZhIGJlYW4gV2ViIHNlcnZpY2U8L3NwYW4+IGFzCi15b3VyIFdlYiBzZXJ2aWNlIHR5cGUsIGFuZCBlbnRlciB0aGUgVVJJIHRvIHRoZSBXU0RMLCBXU0lMLCBvciBIVE1MIGZpbGUgdGhhdAotd2lsbCBiZSB1c2VkIHRvIGdlbmVyYXRlIHRoZSBzZXJ2aWNlLjwvc3Bhbj4KLTxhIG5hbWU9InR3c2JlYW5hX19jcmVhdGVzdGVwNHVsIj48IS0tIC0tPjwvYT48b2wgdHlwZT0iYSIgaWQ9InR3c2JlYW5hX19jcmVhdGVzdGVwNHVsIj4KLTxsaSBjbGFzcz0ic3Vic3RlcGV4cGFuZCI+PHNwYW4+U2VsZWN0IHRoZSBzdGFnZXMgb2YgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50IHRoYXQgeW91IHdhbnQKLXRvIGNvbXBsZXRlIHVzaW5nIHRoZSBzbGlkZXI6PC9zcGFuPiA8dWw+Ci08bGk+RGV2ZWxvcDogdGhpcyB3aWxsIGRldmVsb3AgdGhlIFdTREwgZGVmaW5pdGlvbiBhbmQgaW1wbGVtZW50YXRpb24gb2YgdGhlCi1XZWIgc2VydmljZS4gVGhpcyBpbmNsdWRlcyBzdWNoIHRhc2tzIGFzIGNyZWF0aW5nIHRoZSBtb2R1bGVzIHdoaWNoIHdpbGwgY29udGFpbgotdGhlIGdlbmVyYXRlZCBjb2RlLCBXU0RMIGZpbGVzLCBkZXBsb3ltZW50IGRlc2NyaXB0b3JzLCBhbmQgSmF2YSBmaWxlcyB3aGVuCi1hcHByb3ByaWF0ZS48L2xpPgotCi08bGk+QXNzZW1ibGU6IHRoaXMgZW5zdXJlcyB0aGUgcHJvamVjdCB0aGF0IHdpbGwgaG9zdCB0aGUgV2ViIHNlcnZpY2Ugb3IgY2xpZW50Ci1nZXRzIGFzc29jaWF0ZWQgdG8gYW4gRUFSIHdoZW4gcmVxdWlyZWQgYnkgdGhlIHRhcmdldCBhcHBsaWNhdGlvbiBzZXJ2ZXIuPC9saT4KLQotPGxpPkRlcGxveTogdGhpcyB3aWxsIGNyZWF0ZSB0aGUgZGVwbG95bWVudCBjb2RlIGZvciB0aGUgc2VydmljZS48L2xpPgotCi08bGk+SW5zdGFsbDogdGhpcyB3aWxsIGluc3RhbGwgYW5kIGNvbmZpZ3VyZSB0aGUgV2ViIG1vZHVsZSBhbmQgRUFScyBvbiB0aGUKLXRhcmdldCBzZXJ2ZXIuPC9saT4KLQotPGxpPlN0YXJ0OiB0aGlzIHdpbGwgc3RhcnQgdGhlIHNlcnZlciBvbmNlIHRoZSBzZXJ2aWNlIGhhcyBiZWVuIGluc3RhbGxlZAotb24gaXQuIFRoZSBzZXJ2ZXItY29uZmlnLndzZGQgZmlsZSB3aWxsIGJlIGdlbmVyYXRlZC48L2xpPgotCi08bGk+VGVzdDogdGhpcyB3aWxsIHByb3ZpZGUgdmFyaW91cyBvcHRpb25zIGZvciB0ZXN0aW5nIHRoZSBzZXJ2aWNlLCBzdWNoCi1hcyB1c2luZyB0aGUgV2ViIFNlcnZpY2UgRXhwbG9yZXIgb3Igc2FtcGxlIEpTUHMuPC9saT4KLQotPC91bD4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3Vic3RlcGV4cGFuZCI+PHNwYW4+U2VsZWN0IHlvdXIgc2VydmVyOiB0aGUgZGVmYXVsdCBzZXJ2ZXIgaXMgZGlzcGxheWVkLiBJZiB5b3UKLXdhbnQgdG8gZGVwbG95IHlvdXIgc2VydmljZSB0byBhIGRpZmZlcmVudCBzZXJ2ZXIgY2xpY2sgdGhlIGxpbmsgdG8gc3BlY2lmeQotYSBkaWZmZXJlbnQgc2VydmVyLjwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN1YnN0ZXBleHBhbmQiPjxzcGFuPlNlbGVjdCB5b3VyIHJ1bnRpbWU6IHRoZSBkZWZhdWx0IHJ1bnRpbWUgaXMgZGlzcGxheWVkLiBJZiB5b3UKLXdhbnQgdG8gZGVwbG95IHlvdXIgc2VydmljZSB0byBhIGRpZmZlcmVudCBydW50aW1lIGNsaWNrIHRoZSBsaW5rIHRvIHNwZWNpZnkKLWEgZGlmZmVyZW50IHJ1bnRpbWUuPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3Vic3RlcGV4cGFuZCI+PHNwYW4+U2VsZWN0IHRoZSBzZXJ2aWNlIHByb2plY3Q6IHRoZSBwcm9qZWN0IGNvbnRhaW5pbmcgdGhlIHByb2plY3QKLXNlbGVjdGVkIGluIHlvdXIgd29ya3NwYWNlIGlzIGRpc3BsYXllZC4gVG8gc2VsZWN0IGEgZGlmZmVyZW50IHByb2plY3QgYW5kCi1FQVIgY2xpY2sgb24gdGhlIHByb2plY3QgbGluay48L3NwYW4+IEVuc3VyZSB0aGF0IHRoZSBwcm9qZWN0IHNlbGVjdGVkCi1hcyB0aGUgQ2xpZW50IFdlYiBQcm9qZWN0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBTZXJ2aWNlIFdlYiBQcm9qZWN0LCBvciB0aGUKLXNlcnZpY2Ugd2lsbCBiZSBvdmVyd3JpdHRlbiBieSB0aGUgY2xpZW50J3MgZ2VuZXJhdGVkIGFydGlmYWN0cy48L2xpPgotCi08bGkgY2xhc3M9InN1YnN0ZXBleHBhbmQiPjxzcGFuPklmIHlvdSB3YW50IHRvIGNyZWF0ZSBhIGNsaWVudCwgc2VsZWN0IHRoZSB0eXBlIG9mIHByb3h5IHRvCi1iZSBnZW5lcmF0ZWQgYW5kIHJlcGVhdCB0aGUgYWJvdmUgc3RlcHMgZm9yIHRoZSBjbGllbnQuPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3Vic3RlcGV4cGFuZCI+PHNwYW4+UHVibGlzaCB0aGUgV2ViIHNlcnZpY2U6IHRoaXMgd2lsbCBsYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcgotdG8gcHVibGlzaCB5b3VyIFdlYiBzZXJ2aWNlIHRvIGEgVURESSByZWdpc3RyeS48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdWJzdGVwZXhwYW5kIj48c3Bhbj5Nb25pdG9yIHRoZSBXZWIgc2VydmljZTogdGhpcyB3aWxsIHNlbmQgdGhlIFdlYiBzZXJ2aWNlIHRyYWZmaWMKLXRocm91Z2ggdGhlIFRDUC9JUCBNb25pdG9yLCB3aGljaCBhbGxvd3MgeW91IHRvIHdhdGNoIHRoZSBTT0FQIHRyYWZmaWMgZ2VuZXJhdGVkCi1ieSB0aGUgV2ViIHNlcnZpY2UgYW5kIHRvIHRlc3QgdGhpcyB0cmFmZmljIGZvciBXUy1JIGNvbXBsaWFuY2UuIEFsdGVybmF0ZWx5Ci15b3UgY2FuIG1hbnVhbGx5IHNldCB1cCBhIFRDUC9JUCBtb25pdG9yIGFzIGRlc2NyaWJlZCBpbiA8YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3Rtb25pdG9yLmh0bWwiPlVzaW5nIHRoZSBUQ1AvSVAgTW9uaXRvciB0byB0ZXN0IFdlYiBzZXJ2aWNlczwvYT48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5XZWIgU2VydmljZSBKYXZhIEJlYW4gSWRlbnRpdHkgcGFnZTogdGhlIFdlYiBzZXJ2aWNlCi1XU0RMIG5hbWUgd2lsbCBiZSBsaXN0ZWQuPC9zcGFuPiBZb3UgaGF2ZSB0aGUgZm9sbG93aW5nIG9wdGlvbnM6PHVsPgotPGxpPlNlbGVjdCB0aGUgbWV0aG9kcyB0byBleHBvc2UuPC9saT4KLQotPGxpPlNlbGVjdCB0aGUgZW5jb2Rpbmcgc3R5bGUuIFJQQy9FbmNvZGVkIGlzIHRoZSByZWNvbW1lbmRlZCBlbmNvZGluZyBzdHlsZQotZm9yIHRoZSBBeGlzIHJ1bi10aW1lIGVudmlyb25tZW50LiBUaGlzIGVuY29kaW5nIG1ldGhvZCBpcyBub3QgV1MtSSBjb21wbGlhbnQuPC9saT4KLQotPGxpPlNlbGVjdCBpZiB5b3Ugd2FudCB0byBjdXN0b21pemUgdGhlIHBhY2thZ2UgdG8gbmFtZXNwYWNlIG1hcHBpbmdzLjwvbGk+Ci0KLTwvdWw+Ci1DbGljayAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+TmV4dDwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPldlYiBTZXJ2aWNlIFBhY2thZ2UgdG8gTmFtZXNwYWNlIE1hcHBpbmdzIHBhZ2U6IGlmIHlvdSBzZWxlY3RlZAotIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkRlZmluZSBjdXN0b20gbWFwcGluZyBmb3IgcGFja2FnZSB0byBuYW1lc3BhY2U8L3NwYW4+IG9uCi10aGUgcHJldmlvdXMgcGFuZWwsIHlvdSBjYW4gZW50ZXIgeW91ciBjdXN0b20gbWFwcGluZyBwYWlycyBvbiB0aGlzIHBhbmVsCi1ieSBjbGlja2luZyAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QWRkPC9zcGFuPi4gQWx0ZXJuYXRlbHksIHlvdSBjYW4gY2xpY2sgIDxzdHJvbmc+SW1wb3J0PC9zdHJvbmc+IHRvCi1pbXBvcnQgY3VzdG9tIG1hcHBpbmcgcGFpcnMgZnJvbSBhICA8dHQgY2xhc3M9InN5c291dCI+LnByb3BlcnRpZXM8L3R0PiBmaWxlLgotVGhlIGNvbnRlbnQgb2YgdGhlIHByb3BlcnRpZXMgZmlsZSBtdXN0IGJlIG9mIHRoZSBmb3JtYXQgIDxzYW1wIGNsYXNzPSJjb2RlcGgiPjx2YXIgY2xhc3M9InZhcm5hbWUiPnBhY2thZ2U9bmFtZXNwYWNlPC92YXI+PC9zYW1wPi48L3NwYW4+Ci08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPldlYiBTZXJ2aWNlIFRlc3QgcGFnZTogSWYgeW91IHNlbGVjdGVkIHRvIHRlc3QgdGhlIFdlYiBzZXJ2aWNlLAotc2VsZWN0IHRoZSB0ZXN0IGZhY2lsaXR5IGZvciB0aGUgZ2VuZXJhdGVkIFdlYiBzZXJ2aWNlLjwvc3Bhbj4gVGhpcyB3aWxsCi1vcGVuIHRoZSBXZWIgc2VydmljZSBpbiB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLiBTZWxlY3QgdGhlIG9wZXJhdGlvbiB5b3UKLXdhbnQgdG8gdGVzdCwgZW50ZXIgdGhlIHJlcXVpcmVkIGluZm9ybWF0aW9uLCBhbmQgY2xpY2s8c3BhbiBjbGFzcz0idWljb250cm9sIj5Hbzwvc3Bhbj4uCi1UaGUgcmVzdWx0IHdpbGwgZGlzcGxheSBpbiB0aGUgU3RhdHVzIHBhbmUuIENsaWNrICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5OZXh0PC9zcGFuPi4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+V2ViIFNlcnZpY2UgUHJveHkgcGFnZTogaWYgeW91IGhhdmUgc2VsZWN0ZWQgdG8gZ2VuZXJhdGUgYSBwcm94eSwKLXNlbGVjdCBpZiB5b3Ugd2FudCB0byBjdXN0b21pemUgdGhlIHBhY2thZ2UgdG8gbmFtZXNwYWNlIG1hcHBpbmdzLjwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPldlYiBTZXJ2aWNlIENsaWVudCBUZXN0IHBhZ2U6IFVzZSB0aGlzIHBhZ2UgdG8gc2VsZWN0IHRoZSBmb2xsb3dpbmcKLW9wdGlvbnM6IDwvc3Bhbj4KLTxvbCB0eXBlPSJhIj4KLTxsaT48c3Bhbj5TZWxlY3QgeW91ciB0ZXN0IGZhY2lsaXR5LiBZb3UgY2FuIHRlc3QgdGhlIGdlbmVyYXRlZCBwcm94eQotaW4gdGhlIFdlYiBTZXJ2aWNlIEV4cGxvcmVyLCBvciB5b3UgY2FuIGdlbmVyYXRlIGEgc2FtcGxlIFdlYiBzZXJ2aWNlIEpTUC48L3NwYW4+Ci08L2xpPgotCi08bGk+PHNwYW4+SWYgeW91IHNlbGVjdGVkIHRvIHRlc3QgdGhlIHByb3h5IHRocm91Z2ggYSBKU1AsIHlvdSBjYW4gc2VsZWN0Ci10aGUgZm9sZGVyIHdoZXJlIHRoZSBKU1Agd2lsbCBiZSBsb2NhdGVkLCBhbmQgeW91IGNhbiBzZWxlY3QgdGhlIG1ldGhvZHMgdGhhdAotd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgSlNQLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+U2VsZWN0ICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5SdW4gdGVzdCBvbiBzZXJ2ZXI8L3NwYW4+IHRvIHN0YXJ0IHRoZQotc2VydmVyIGZvciB5b3UgYXV0b21hdGljYWxseS48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5XZWIgU2VydmljZSBQdWJsaWNhdGlvbiBwYWdlOiBTZWxlY3Qgd2hldGhlciBvciBub3QgeW91IHdhbnQgdG8KLXB1Ymxpc2ggdGhpcyBXZWIgc2VydmljZSB0byBhIFVEREkgcmVnaXN0cnkuIENsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkZpbmlzaDwvc3Bhbj4uwqA8L3NwYW4+Ci0gTm90ZTogeW91IG1heSBzZWUgYSB3YXJuaW5nIHN0YXRpbmcgPHNhbXAgY2xhc3M9ImNvZGVwaCI+RXJyb3IgaW4gZ2VuZXJhdGluZyBXU0RMCi1mcm9tIEphdmEuIENsYXNzTm90Rm91bmQ6ICZsdDtiZWFuIG5hbWUmZ3Q7PC9zYW1wPi4gVGhpcyBlcnJvciBjYW4gYmUgc2FmZWx5Ci1pZ25vcmVkLjwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iIGlkPSJ0d3NiZWFuYV9fYXhpc3dzY3JlYXRlcmVzdWx0Ij48YSBuYW1lPSJ0d3NiZWFuYV9fYXhpc3dzY3JlYXRlcmVzdWx0Ij48IS0tIC0tPjwvYT48ZGl2IGNsYXNzPSJwIj5BZnRlciB0aGUgV2ViIHNlcnZpY2UgaGFzIGJlZW4gY3JlYXRlZCwKLXRoZSBmb2xsb3dpbmcgbWF5IG9jY3VyIGRlcGVuZGluZyBvbiB0aGUgb3B0aW9ucyB5b3Ugc2VsZWN0ZWQ6IDx1bD4KLTxsaT5JZiB5b3UgaGF2ZSBzZWxlY3RlZCB0byB0ZXN0IHRoZSBnZW5lcmF0ZWQgcHJveHkgdXNpbmcgV2ViIHNlcnZpY2UgSlNQcywKLXRoZSBwcm94eSBpcyBsYXVuY2hlZCBpbiBhIFdlYiBicm93c2VyIGF0IHRoZSBmb2xsb3dpbmcgVVJMOiBodHRwOi8vbG9jYWxob3N0OiA8dmFyIGNsYXNzPSJ2YXJuYW1lIj5wb3J0PC92YXI+LyA8dmFyIGNsYXNzPSJ2YXJuYW1lIj5XZWJQcm9qZWN0PC92YXI+Q2xpZW50L3NhbXBsZTxlbT5CZWFuTmFtZTwvZW0+LyA8dmFyIGNsYXNzPSJ2YXJuYW1lIj5XZWJTZXJ2aWNlTmFtZTwvdmFyPi9UZXN0Q2xpZW50LmpzcCBZb3UgY2FuIHVzZQotdGhpcyBzYW1wbGUgYXBwbGljYXRpb24gdG8gdGVzdCB0aGUgV2ViIHNlcnZpY2UgYnkgc2VsZWN0aW5nIGEgbWV0aG9kLCBlbnRlcmluZwotYSB2YWx1ZSBmb3IgdGhlIG1ldGhvZCwgYW5kIGNsaWNraW5nICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5JbnZva2U8L3NwYW4+LiBUaGUgcmVzdWx0Ci1vZiB0aGUgbWV0aG9kIHdpbGwgZGlzcGxheSBpbiB0aGUgcmVzdWx0cyBwYW5lLjwvbGk+Ci0KLTxsaT5JZiB5b3UgaGF2ZSBzZWxlY3RlZCB0byB0ZXN0IHRoZSBXZWIgc2VydmljZSB1c2luZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLAotdGhlIEV4cGxvcmVyIHdpbGwgb3Blbi4gU2VsZWN0IHRoZSBvcGVyYXRpb24geW91IHdhbnQgdG8gdGVzdCwgZW50ZXIgdGhlIHJlcXVpcmVkCi1pbmZvcm1hdGlvbiwgYW5kIGNsaWNrICA8c3Ryb25nPkdvPC9zdHJvbmc+LiBUaGUgcmVzdWx0IHdpbGwgZGlzcGxheSBpbiB0aGUgU3RhdHVzIHBhbmUuPC9saT4KLQotPGxpPklmIHlvdSBoYXZlIHNlbGVjdGVkIHRvIHB1Ymxpc2ggdGhlIFdlYiBzZXJ2aWNlLCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyCi1pcyBsYXVuY2hlZCBkaXNwbGF5aW5nIHRoZSBwYWdlIHJlcXVpcmVkIHRvIHB1Ymxpc2ggeW91ciBXZWIgc2VydmljZS4gRm9sbG93Ci10aGUgaW5zdHJ1Y3Rpb25zIGluICA8dmFyIGNsYXNzPSJ2YXJuYW1lIj5QdWJsaXNoaW5nIHRoZSBXZWIgc2VydmljZTwvdmFyPiB0byBjb21wbGV0ZQotdGhpcyB0YXNrLjwvbGk+Ci0KLTwvdWw+Ci08L2Rpdj4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+SW1wb3J0YW50Ojwvc3Bhbj4gSWYgeW91ciBtZXRob2RzIGNvbnRhaW4gdHlwZXMsCi1ub3Qgc3VwcG9ydGVkIGJ5IHRoZSBzYW1wbGUsIHN1Y2ggYXMgYXJyYXlzLCBpbmRleGVkIHByb3BlcnRpZXMsIGFuZCBjb2xsZWN0aW9ucywKLXRoZSBtZXRob2RzIHdpbGwgYmUgb21pdHRlZCBmcm9tIHRoZSBzYW1wbGUgYW5kIHlvdSB3aWxsIHJlY2VpdmUgYSB3YXJuaW5nCi1tZXNzYWdlLjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImZhbWlseWxpbmtzIj4KLTxkaXYgY2xhc3M9InBhcmVudGxpbmsiPjxzdHJvbmc+UGFyZW50IHRvcGljOjwvc3Ryb25nPiA8YSBocmVmPSIuLi9jb25jZXB0cy9jYXhpc3RvdmVyLmh0bWwiIHRpdGxlPSJUaGlzIHJ1bi10aW1lIGVudmlyb25tZW50IGlzIGZvciB1c2VycyB3aG8gcHJlZmVyIHRvIGRldmVsb3AgZm9yIHRoZSBvcGVuIEFwYWNoZSBBeGlzIHBsYXRmb3JtLiBJdCBpcyBmb3Igbm9uLXByb2R1Y3Rpb24gdXNlIG9ubHkuIEF4aXMgaXMgdGhlIHRoaXJkIGdlbmVyYXRpb24gb2YgdGhlIEFwYWNoZSBTT0FQIGltcGxlbWVudGF0aW9uLiBJdCBldm9sdmVkIGZyb20gQXBhY2hlIFNPQVAgdG8gbWFrZSB0aGUgU09BUCBlbmdpbmUgbW9yZSBmbGV4aWJsZSwgY29uZmlndXJhYmxlLCBhbmQgYWJsZSB0byBoYW5kbGUgYm90aCBTT0FQIGFuZCB0aGUgdXBjb21pbmcgWE1MIFByb3RvY29sIHNwZWNpZmljYXRpb24gZnJvbSB0aGUgVzNDIG9wZW4tc291cmNlIGVmZm9ydC4iPkNyZWF0aW5nIFdlYiBzZXJ2aWNlcyB3aXRoIHRoZSBBcGFjaGUgQXhpcyBydW4tdGltZSBlbnZpcm9ubWVudDwvYT48L2Rpdj4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIENvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmh0bWwiPiBUb29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWwiPldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90b3ZlcndzLmh0bWwiPiBEZXZlbG9waW5nIFdlYiBzZXJ2aWNlczwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R1ZGRpZXhwLmh0bWwiPiBVc2luZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFJlZmVyZW5jZTwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9yZWYvcndzZGwuaHRtbCI+V1NETCBkb2N1bWVudHM8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvd3NheGlzYnVpbGRfdG9jLmRpdGFtYXAgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3dzYXhpc2J1aWxkX3RvYy5kaXRhbWFwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNmFmNmI1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvd3NheGlzYnVpbGRfdG9jLmRpdGFtYXAKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSBtYXAgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgTWFwLy9FTiIKLSAibWFwLmR0ZCI+Ci08bWFwIGFuY2hvcnJlZj0iLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3dzY3JlYXRpb250MV90b2MuZGl0YW1hcCN3c2F4aXMiCi1pZD0id3NheGlzIiB0aXRsZT0id3NheGlzIj4KLTx0b3BpY21ldGE+Ci08Y29weXJpZ2h0PgotPGNvcHlyeWVhciB5ZWFyPSIyMDAwIi8+Ci08Y29weXJ5ZWFyIHllYXI9IjIwMDYiLz4KLTxjb3B5cmhvbGRlcj4gQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzCi1yZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAgYXJlIG1hZGUgYXZhaWxhYmxlCi11bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcwotZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0ICBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotQ29udHJpYnV0b3JzOiAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uPC9jb3B5cmhvbGRlcj4KLTwvY29weXJpZ2h0PgotPC90b3BpY21ldGE+Ci08dG9waWNyZWYgaHJlZj0iY29uY2VwdHMvY2F4aXN0b3Zlci5kaXRhIiBuYXZ0aXRsZT0iQXhpcyBydW50aW1lIiB0b2M9Im5vIj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90d3NiZWFuYS5kaXRhIiBuYXZ0aXRsZT0iQ3JlYXRpbmcgYSBXZWIgc2VydmljZSBmcm9tIGEgSmF2YSBiZWFuIj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdHNrbHdzZGxhLmRpdGEiIG5hdnRpdGxlPSJDcmVhdGluZyBhIEphdmEgU2tlbGV0b24gZnJvbSBXU0RMIj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdHNhbXBhcHBhLmRpdGEiIG5hdnRpdGxlPSJHZW5lcmF0aW5nIGEgSmF2YSBjbGllbnQgcHJveHkgZnJvbSBhIFdTREwgZG9jdW1lbnQiPgotPC90b3BpY3JlZj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdHRvbWNhdHNlcnYuZGl0YSIgbmF2dGl0bGU9Ikluc3RhbGxpbmcgYW5kIGNvbmZpZ3VyaW5nIEFwYWNoZSBUb21jYXQiPgotPC90b3BpY3JlZj4KLTwvbWFwPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci93c2F4aXNidWlsZF90b2MueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci93c2F4aXNidWlsZF90b2MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxM2RmZDc4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvd3NheGlzYnVpbGRfdG9jLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotPD9OTFMgVFlQRT0ib3JnLmVjbGlwc2UuaGVscC50b2MiPz4KLQotPHRvYyBsaW5rX3RvPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvd3NjcmVhdGlvbnQxX3RvYy54bWwjd3NheGlzIiBsYWJlbD0id3NheGlzIiB0b3BpYz0iY29uY2VwdHMvY2F4aXN0b3Zlci5odG1sIj4KLTx0b3BpYyBsYWJlbD0iQ3JlYXRpbmcgYW4gQXBhY2hlIFRvbWNhdCBzZXJ2ZXIgYW5kIFdlYiBwcm9qZWN0IiBocmVmPSJ0YXNrcy90dG9tY2F0c2Vydi5odG1sIi8+Ci08L3RvYz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLmluZm9wb3AvLmN2c2lnbm9yZSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLmluZm9wb3AvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE0NDg3Yy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi5pbmZvcG9wLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1idWlsZC54bWwKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLmluZm9wb3AvLnByb2plY3QgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi5pbmZvcG9wLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDBiZGEzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLmluZm9wb3AvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24uaW5mb3BvcDwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLmluZm9wb3AvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi5pbmZvcG9wL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMmNiM2QwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLmluZm9wb3AvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24uaW5mb3BvcDsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjIwMy5xdWFsaWZpZXIKLUJ1bmRsZS1WZW5kb3I6ICVwbHVnaW5Qcm92aWRlcgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi5pbmZvcG9wL2Fib3V0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi5pbmZvcG9wL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGIzNmUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24uaW5mb3BvcC9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi5pbmZvcG9wL2J1aWxkLnByb3BlcnRpZXMgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi5pbmZvcG9wL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxOTYxMmYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24uaW5mb3BvcC9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1iaW4uaW5jbHVkZXMgPSBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIHdzY29uc3VtcHRpb251aS1mMUNvbnRleHRzLnhtbCxcCi0gICAgICAgICAgICAgICB3c2NyZWF0aW9udWktZjFDb250ZXh0cy54bWwsXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKLXNyYy5pbmNsdWRlcyA9IGJ1aWxkLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLmluZm9wb3AvcGx1Z2luLnByb3BlcnRpZXMgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi5pbmZvcG9wL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzk3N2IyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLmluZm9wb3AvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSEgUGx1Zy1pbiBwcm9wZXJ0aWVzCi1wbHVnaW5OYW1lICAgICA9IFdlYiBzZXJ2aWNlcyBVSQotcGx1Z2luUHJvdmlkZXIgPSBFY2xpcHNlLm9yZwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLmluZm9wb3AvcGx1Z2luLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLmluZm9wb3AvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M5ZDFmOC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi5pbmZvcG9wL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotPD9OTFMgVFlQRT0ib3JnLmVjbGlwc2UuaGVscC50b2MiPz4gCi08IS0tIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gLS0+Ci08cGx1Z2luPgotICAKLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLmNvbnRleHRzIj4KLQkJPGNvbnRleHRzIGZpbGU9IndzY29uc3VtcHRpb251aS1mMUNvbnRleHRzLnhtbCIgcGx1Z2luPSJvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkiLz4KLQkJPGNvbnRleHRzIGZpbGU9IndzY3JlYXRpb251aS1mMUNvbnRleHRzLnhtbCIgcGx1Z2luPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkiLz4KLQk8L2V4dGVuc2lvbj4KLTwvcGx1Z2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLmluZm9wb3Avd3Njb25zdW1wdGlvbnVpLWYxQ29udGV4dHMueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24uaW5mb3BvcC93c2NvbnN1bXB0aW9udWktZjFDb250ZXh0cy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjY2NlM2YuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24uaW5mb3BvcC93c2NvbnN1bXB0aW9udWktZjFDb250ZXh0cy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0NjAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAuY29udGV4dHMiPz4KLTwhLS0gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAtLT4KLTxjb250ZXh0cz4KLTwhLS0gbmV3IHY2IHByZWZlcmVuY2UgcGFnZS0tPgotPGNvbnRleHQgaWQ9IlNSUEYwMDAxIj4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhlIGRlZmF1bHQgV2ViIHNlcnZlciB0byBiZSB1c2VkIGZvciBXZWIgc2VydmljZSBjcmVhdGlvbi48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotPGNvbnRleHQgaWQ9IlNSUEYwMDAyIj4KLTwhLS1ydW50aW1lIHByZWZlcmVuY2Ugb24gdGhlIHNlcnZlciBydW50aW1lIHByZWZlcmVuY2UgcGFnZS0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGUgZGVmYXVsdCBzZXJ2ZXIgcnVuLXRpbWUgZW52aXJvbm1lbnQgdG8gYmUgdXNlZCBmb3IgV2ViIHNlcnZpY2UgY3JlYXRpb24uPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLTxjb250ZXh0IGlkPSJTUlBGMDAwMyI+Ci08IS0tSjJFRSB2ZXJzaW9uIHByZWZlcmVuY2Ugb24gdGhlIHNlcnZlciBydW50aW1lIHByZWZlcmVuY2UgcGFnZS0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGUgZGVmYXVsdCBKMkVFIHZlcnNpb24gdG8gYmUgdXNlZCBmb3IgV2ViIHNlcnZpY2UgY3JlYXRpb24uPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPCEtLSBuZXcgdjYgaGFuZGxlciB3aXphcmQtLT4KLTxjb250ZXh0IGlkPSJBSERMMDAwMSI+Ci08IS0tSGFuZGxlciBjb25maWcgcGFnZS0tPgotPGRlc2NyaXB0aW9uPlVzZSB0aGlzIHdpemFyZCB0byBhZGQgYW5kIHJlbW92ZSBoYW5kbGVycyBmb3IgYSBXZWIgc2VydmljZS4gVGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgYXJlIGxpc3RlZCByZXByZXNlbnRzIHRoZSBvcmRlciBpbiB3aGljaCB0aGUgaGFuZGxlcnMgd2lsbCBiZSBhY3RlZCB1cG9uLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTwhLS1XZWJTZXJ2aWNlV2l6TmV3Rmlyc3RQYWdlLS0+Ci08Y29udGV4dCBpZD0iV1NXU0NFTjAwMDEiPgotPCEtLSBGaXJzdCBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+T24gdGhpcyBwYWdlIHNlbGVjdCB0aGUgYXJ0aWZhY3QgZnJvbSB3aGljaCB5b3VyIFdlYiBjbGllbnQgd2lsbCBiZSBjcmVhdGVkLCBhbmQgdGhlIHN0YWdlcyBvZiBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQgdGhhdCB5b3Ugd2FudAotdG8gY29tcGxldGU6Ci0tIERldmVsb3A6IHRoaXMgd2lsbCBjcmVhdGUgdGhlIGNsaWVudCBjb2RlCi0tIEFzc2VtYmxlOiB0aGlzIGVuc3VyZXMgdGhhdCB0aGUgcHJvamVjdCB0aGF0IHdpbGwgaG9zdCB0aGUgY2xpZW50IGdldHMgYXNzb2NpYXRlZCB0byBhbiBFQVIgd2hlbiByZXF1aXJlZCBieSB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9uIHNlcnZlcgotLSBEZXBsb3k6IHRoaXMgd2lsbCBjcmVhdGUgdGhlIGRlcGxveW1lbnQgY29kZSBmb3IgdGhlIGNsaWVudAotLSBJbnN0YWxsOiB0aGlzIHdpbGwgaW5zdGFsbCB0aGUgY2xpZW50IG9uIHRoZSBjaG9zZW4gc2VydmVyCi0tIFN0YXJ0OiB0aGlzIHdpbGwgc3RhcnQgdGhlIHNlcnZlciBvbmNlIHRoZSBjbGllbnQgaGFzIGJlZW4gaW5zdGFsbGVkIG9uIGl0Ci0tIFRlc3Q6IHRoaXMgd2lsbCBwcm92aWRlIHZhcmlvdXMgb3B0aW9ucyBmb3IgdGVzdGluZyB0aGUgY2xpZW50Ci1TZWxlY3QgdGhlIHNlcnZlciBhbmQgcnVudGltZSBmb3IgeW91ciBXZWIgY2xpZW50LCBhbmQgd2hldGhlciBvciBub3QgeW91IHdhbnQgdG8gcHVibGlzaCBvciBtb25pdG9yIHRoZSBzZXJ2aWNlLgotPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IldTV1NDRU4wMDE0Ij4KLTwhLS1Nb25pdG9yIGNoZWNrYm94IG9mIHRoZSBGaXJzdCBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+TW9uaXRvciB0aGUgV2ViIHNlcnZpY2U6IHRoaXMgd2lsbCBzZW5kIHRoZSBXZWIgc2VydmljZSB0cmFmZmljCi10aHJvdWdoIHRoZSBUQ1AvSVAgTW9uaXRvciwgd2hpY2ggYWxsb3dzIHlvdSB0byB3YXRjaCB0aGUgU09BUCB0cmFmZmljIGdlbmVyYXRlZAotYnkgdGhlIFdlYiBzZXJ2aWNlIGFuZCB0byB0ZXN0IHRoaXMgdHJhZmZpYyBmb3IgV1MtSSBjb21wbGlhbmNlLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJXU1dTQ0VOMDAyMCI+Ci08IS0tU2VydmljZSBpbXBsZW1lbnRhdGlvbiBmaWVsZCBvZiB0aGUgRmlyc3QgUGFnZS0tPgotPGRlc2NyaXB0aW9uPkVudGVyIHRoZSBVUkkgdG8gdGhlIFdTREwsIFdTSUwsIG9yIEhUTUwgZmlsZSB0aGF0Ci13aWxsIGJlIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iV1NXU0NFTjAwMjIiPgotPCEtLVNlcnZlciBsaW5rIG9mIHRoZSBGaXJzdCBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHlvdXIgc2VydmVyOiB0aGUgZGVmYXVsdCBzZXJ2ZXIgaXMgZGlzcGxheWVkLiBJZiB5b3UKLXdhbnQgdG8gZGVwbG95IHlvdXIgc2VydmljZSB0byBhIGRpZmZlcmVudCBzZXJ2ZXIgY2xpY2sgdGhlIGxpbmsgdG8gc3BlY2lmeQotYSBkaWZmZXJlbnQgc2VydmVyLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJXU1dTQ0VOMDAyMyI+Ci08IS0tcnVudGltZSBsaW5rIG9mIHRoZSBGaXJzdCBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHlvdXIgcnVudGltZTogdGhlIGRlZmF1bHQgcnVudGltZSBpcyBkaXNwbGF5ZWQuIElmIHlvdQotd2FudCB0byBkZXBsb3kgeW91ciBzZXJ2aWNlIHRvIGEgZGlmZmVyZW50IHJ1bnRpbWUgY2xpY2sgdGhlIGxpbmsgdG8gc3BlY2lmeQotYSBkaWZmZXJlbnQgcnVudGltZS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iV1NXU0NFTjAwMjQiPgotPCEtLXByb2plY3RzIGxpbmsgb2YgdGhlIEZpcnN0IFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhlIHNlcnZpY2UgcHJvamVjdDogdGhlIHByb2plY3QgY29udGFpbmluZyB0aGUgcHJvamVjdAotc2VsZWN0ZWQgaW4geW91ciB3b3Jrc3BhY2UgaXMgZGlzcGxheWVkLiBUbyBzZWxlY3QgYSBkaWZmZXJlbnQgcHJvamVjdCBhbmQKLUVBUiBjbGljayBvbiB0aGUgcHJvamVjdCBsaW5rLiBFbnN1cmUgdGhhdCB0aGUgcHJvamVjdCBzZWxlY3RlZAotYXMgdGhlIENsaWVudCBXZWIgUHJvamVjdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgU2VydmljZSBXZWIgUHJvamVjdCwgb3IgdGhlCi1zZXJ2aWNlIHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIGNsaWVudCdzIGdlbmVyYXRlZCBhcnRpZmFjdHMuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IldTV1NDRU4wMDI1Ij4KLTwhLS1jbGllbnQgdHlwZSBjb21ibyBvZiB0aGUgRmlyc3QgUGFnZS0tPgotPGRlc2NyaXB0aW9uPlRoZSBKYXZhIGJlYW4gY2xpZW50IHByb3h5IHRoYXQgaXMgZ2VuZXJhdGVkIHByb3ZpZGVzIGEgcmVtb3RlIHByb2NlZHVyZSBjYWxsIGludGVyZmFjZSB0byB0aGUgV2ViIHNlcnZpY2UuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IldTV1NDRU4wMDI2Ij4KLTwhLS1DbGllbnQgc2xpZGVyIG9mIHRoZSBGaXJzdCBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHRoZSBzdGFnZXMgb2YgV2ViIHNlcnZpY2VzIGNsaWVudCBkZXZlbG9wbWVudCB0aGF0IHlvdSB3YW50Ci10byBjb21wbGV0ZSB1c2luZyB0aGUgc2xpZGVyOgotLSBEZXZlbG9wOiB0aGlzIHdpbGwgY3JlYXRlIHRoZSBjbGllbnQgY29kZQotLSBBc3NlbWJsZTogdGhpcyBlbnN1cmVzIHRoYXQgdGhlIHByb2plY3QgdGhhdCB3aWxsIGhvc3QgdGhlIGNsaWVudCBnZXRzIGFzc29jaWF0ZWQgdG8gYW4gRUFSIHdoZW4gcmVxdWlyZWQgYnkgdGhlIHRhcmdldCBhcHBsaWNhdGlvbiBzZXJ2ZXIKLS0gRGVwbG95OiB0aGlzIHdpbGwgY3JlYXRlIHRoZSBkZXBsb3ltZW50IGNvZGUgZm9yIHRoZSBjbGllbnQKLS0gSW5zdGFsbDogdGhpcyB3aWxsIGluc3RhbGwgdGhlIGNsaWVudCBvbiB0aGUgY2hvc2VuIHNlcnZlcgotLSBTdGFydDogdGhpcyB3aWxsIHN0YXJ0IHRoZSBzZXJ2ZXIgb25jZSB0aGUgY2xpZW50IGhhcyBiZWVuIGluc3RhbGxlZCBvbiBpdAotLSBUZXN0OiB0aGlzIHdpbGwgcHJvdmlkZSB2YXJpb3VzIG9wdGlvbnMgZm9yIHRlc3RpbmcgdGhlIGNsaWVudAotPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IldTV1NDRU4wMDMwIj4KLTwhLS1maWxlIG92ZXJ3cml0ZSBjaGVja2JveCBvZiB0aGUgRmlyc3QgUGFnZS0tPgotPGRlc2NyaXB0aW9uPlRoaXMgYWxsb3dzIHlvdSB0byBvdmVyd3JpdGUgZmlsZXMgd2l0aG91dCByZWNlaXZpbmcgYSB3YXJuaW5nIG1lc3NhZ2UgYXNraW5nIGZvciBjb25maXJtYXRpb24gd2hlbiBvdmVyd3JpdGluZyBmaWxlcy48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi0KLQotPGNvbnRleHQgaWQ9IldTSUwwMDAxIj4KLTwhLS0gIFdTSUwgSW1wb3J0IFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5FbnRlciB0aGUgcmVxdWlyZWQgaW5mb3JtYXRpb24gdG8gZ2VuZXJhdGUgYSBzdGFuZGFyZGl6ZWQgV1NETCByZWZlcmVuY2UgKFdTSUwpIGRvY3VtZW50IGluIHlvdXIgcHJvamVjdC48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iV1NJTDAwMDIiPgotPCEtLSAgV1NJTCBUZXh0IGZpZWxkLS0+Ci08ZGVzY3JpcHRpb24+RW50ZXIgdGhlIG5hbWUgb2YgdGhlIFdTSUwgZG9jdW1lbnQgYmVpbmcgZ2VuZXJhdGVkLCBvciBhY2NlcHQgdGhlIGRlZmF1bHQuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IldTSUwwMDAzIj4KLTwhLS0gIFdTSUwgYnJvd3NlIGJ1dHRvbi0tPgotPGRlc2NyaXB0aW9uPkJyb3dzZSB0byB0aGUgbG9jYXRpb24gb2YgYSBXU0RMIG9yIFdTSUwgZmlsZSBmcm9tIHdoaWNoIHRoZSBuZXcgV1NJTCBkb2N1bWVudCB3aWxsIGJlIGdlbmVyYXRlZC48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iV1NJTDAwMDQiPgotPCEtLSAgV1NJTCB0YWJsZS0tPgotPGRlc2NyaXB0aW9uPlRoaXMgbGlzdHMgYWxsIHRoZSBXU0RMIFVSSXMgdGhhdCB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBXU0lMIGRvY3VtZW50LjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1BSMDAwMSI+Ci08IS0tIFByb2plY3QgUGFnZSAtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhlIHR5cGUgb2YgV2ViIHNlcnZpY2UgeW91IHdhbnQgdG8gZ2VuZXJhdGUgYW5kIGFueSBmaWxlIGFuZCBmb2xkZXIgb3B0aW9ucyBmb3IgeW91ciBXZWIgc2VydmljZS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdQUjAwMDMiPgotPCEtLU92ZXJ3cml0ZSBmaWxlcyB3aXRob3V0IHdhcm5pbmcgKGNoZWNrYm94KS0tPgotPGRlc2NyaXB0aW9uPkFsbG93cyB5b3UgdG8gb3ZlcndyaXRlIGZpbGVzIHdpdGhvdXQgcmVjZWl2aW5nIGEgd2FybmluZyBtZXNzYWdlIGFza2luZyBmb3IgY29uZmlybWF0aW9uIHdoZW4gb3ZlcndyaXRpbmcgZmlsZXMuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXUFIwMDA0Ij4KLTwhLS1DcmVhdGUgZm9sZGVycyB3aGVuIG5lY2Vzc2FyeSAoY2hlY2tib3gpLS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHRvIGNyZWF0ZSBmb2xkZXJzIGFuZCBmb2xkZXIgc3RydWN0dXJlcyB3aXRob3V0IHJlY2VpdmluZyBhIHdhcm5pbmcgbWVzc2FnZSBhc2tpbmcgZm9yIGNvbmZpcm1hdGlvbi48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdQUjAwMDUiPgotPCEtLSAgR2VuZXJhdGUgUHJveHkgY2hlY2sgYm94IG9mIHRoZSBQcm9qZWN0IFBhZ2UgLS0+Ci08ZGVzY3JpcHRpb24+VGhlIGdlbmVyYXRlZCBKYXZhIGJlYW4gcHJveHkgcHJvdmlkZXMgYSByZW1vdGUgcHJvY2VkdXJlIGNhbGwgaW50ZXJmYWNlIHRvIHRoZSBXZWIgc2VydmljZS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdQUjAwMDYiPgotPCEtLSAgVGVzdCBQcm94eSBjaGVjayBib3ggb2YgdGhlIFByb2plY3QgUGFnZSAtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhpcyBjaGVjayBib3ggdG8gdGVzdCB0aGUgZ2VuZXJhdGVkIHByb3h5LjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1BSMDAwOSI+Ci08IS0tICBTdGFydCBXZWIgUHJvamVjdCBjaGVjayBib3ggY2hlY2sgYm94IG9mIHRoZSBQcm9qZWN0IFBhZ2UgLS0+Ci08ZGVzY3JpcHRpb24+Q2xpY2sgdG8gc3RhcnQgdGhlIHNlcnZlci4gSWYgeW91IGxlYXZlIHRoZSBib3ggdW5jaGVja2VkIHlvdSB3aWxsIGhhdmUgdG8gbWFudWFsbHkgc3RhcnQgdGhlIHNlcnZlci48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdQUjAwMTAiPgotPCEtLSBXZWIgU2VydmljZSBUeXBlIGNvbWJvIGJveCBvZiB0aGUgUHJvamVjdCBQYWdlIC0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGUgdHlwZSBvZiBXZWIgc2VydmljZSB5b3Ugd2FudCB0byBidWlsZC4gWW91ciBzZWxlY3Rpb24gd2lsbCBhZmZlY3QgdGhlIGZpbGVzIGF2YWlsYWJsZSBmb3Igc2VsZWN0aW9uLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1BSMDAxMSI+Ci08IS0tICBXaXphcmQgU2NlbmFyaW8gU2VydmljZSBncm91cCBvZiB0aGUgUHJvamVjdCBQYWdlIC0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGUgdHlwZSBvZiBXZWIgc2VydmljZSB5b3Ugd2FudCB0byBidWlsZC4gWW91ciBzZWxlY3Rpb24gd2lsbCBhZmZlY3QgdGhlIGZpbGVzIGF2YWlsYWJsZSBmb3Igc2VsZWN0aW9uLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1BSMDAxMSI+Ci08IS0tICBUZXN0IHNlcnZpY2UgY2hlY2tib3ggb2YgdGhlIHByb2plY3QgcGFnZSAtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhpcyBjaGVjayBib3ggdG8gbGF1bmNoIHRoZSBXZWIgc2VydmljZSBpbiB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGluIG9yZGVyIHRvIGV4YW1pbmUgaXQuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXUFIwMDEyIj4KLTwhLS0gIExhdW5jaCBVRERJIGNoZWNrIGJveCBvZiB0aGUgUHJvamVjdCBQYWdlIC0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGlzIGNoZWNrYm94IHRvIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGluIG9yZGVyIHRvIHB1Ymxpc2ggdGhlIFdlYiBzZXJ2aWNlIHRvIGEgVURESSByZWdpc3RyeS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdQUjAwMTMiPgotPCEtLSAgV2l6YXJkIFNjZW5hcmlvIENsaWVudCBncm91cCBvZiB0aGUgUHJvamVjdCBQYWdlIC0tPgotPGRlc2NyaXB0aW9uPlRoZSBnZW5lcmF0ZWQgSmF2YSBiZWFuIHByb3h5IHByb3ZpZGVzIGEgcmVtb3RlIHByb2NlZHVyZSBjYWxsIGludGVyZmFjZSB0byB0aGUgV2ViIHNlcnZpY2UuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXUFIwMDE0Ij4KLTwhLS0gIFdlYiBTZXJ2aWNlIENsaWVudCBUeXBlIGNvbWJvIGJveCBvZiB0aGUgUHJvamVjdCBQYWdlIC0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGUgY2xpZW50IHByb3h5IHR5cGUuIFRoZSBnZW5lcmF0ZWQgSmF2YSBiZWFuIHByb3h5IHByb3ZpZGVzIGEgcmVtb3RlIHByb2NlZHVyZSBjYWxsIGludGVyZmFjZSB0byB0aGUgV2ViIHNlcnZpY2UuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXUFIwMDE1Ij4KLTwhLS0gIENoZWNrIE91dCBGaWxlcyBjaGVjayBib3ggb2YgdGhlIFByb2plY3QgUGFnZSAtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdG8gY2hlY2sgb3V0IGZpbGVzIHdpdGhvdXQgcmVjZWl2aW5nIGEgd2FybmluZyBtZXNzYWdlIGFza2luZyBmb3IgY29uZmlybWF0aW9uLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLQotPCEtLVdlYlNlcnZpY2VUUEJlYW5DbGFzc1BhZ2UuamF2YS0tPgotPGNvbnRleHQgaWQ9IlBCQ0wwMDAxIj4KLTwhLS1QQkNMMDAwMSBmb3IgdGhlIEJlYW4gU2VsZWN0aW9uIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5Vc2UgdGhpcyBwYWdlIHRvIHNlbGVjdCB0aGUgSmF2YSBiZWFuIG9yIGNsYXNzIHVzZWQgdG8gY3JlYXRlIHRoZSBXZWIgc2VydmljZS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotPGNvbnRleHQgaWQ9IlBCQ0wwMDAyIj4KLTwhLS1QQkNMMDAwMiBmb3IgdGhlIEJlYW4gU2VsZWN0aW9uIGZpZWxkIG9mIHRoZSBCZWFuIFNlbGVjdGlvbiBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+RW50ZXIgdGhlIG5hbWUgb2YgdGhlIEphdmEgYmVhbiB0byBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgV2ViIHNlcnZpY2UuIERlZmF1bHRzIHRoZSBzZWxlY3RlZCBKYXZhIGJlYW4uIENsaWNrIDxiPkJyb3dzZSBjbGFzc2VzIDwvYj50byB2aWV3IHRoZSBiZWFuIGNsYXNzIG9mIHRoZSBzZWxlY3RlZCBKYXZhIGJlYW4uIFRoZSBiZWFuIGNsYXNzIGlzIGEgbW9kZWwgb3IgdGVtcGxhdGUgKGFuIGFic3RyYWN0IGRhdGEgdHlwZSkgdGhhdCBjYW4gYmUgaW5zdGFudGlhdGVkIHRvIGNyZWF0ZSBvYmplY3RzIHdpdGggYSBjb21tb24gZGVmaW5pdGlvbiBhbmQgdGhlcmVmb3JlLCBjb21tb24gcHJvcGVydGllcywgb3BlcmF0aW9ucywgYW5kIGJlaGF2aW9yLiBDbGljayA8Yj5Ccm93c2UgZmlsZXMgPC9iPnRvIHNlbGVjdCBhIEphdmEgYmVhbiBmcm9tIHRoZSBwcm9qZWN0LjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci08Y29udGV4dCBpZD0iUEJDTDAwMDMiPgotPCEtLVBCQ0wwMDAzIGZvciB0aGUgQmVhbiBDbGFzcyBCcm93c2UgYnV0dG9uIG9mIHRoZSBCZWFuIFNlbGVjdGlvbiBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+Q2xpY2sgdG8gdmlldyB0aGUgYmVhbiBjbGFzcyBvZiB0aGUgc2VsZWN0ZWQgSmF2YSBiZWFuLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci08Y29udGV4dCBpZD0iUEJDTDAwMDQiPgotPCEtLVBCQ0wwMDA0IGZvciB0aGUgQmVhbiBSZXNvdXJjZSBCcm93c2UgYnV0dG9uIG9mIHRoZSBCZWFuIFNlbGVjdGlvbiBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+QnJvd3NlIHRvIHRoZSBjb3JyZWN0IEphdmEgYmVhbiB0byBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgV2ViIHNlcnZpY2UuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXUEIwMDAxIj4KLTwhLS0gIFVEREkgUHVibGlzaCBQYWdlIC0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0byBsYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciB0byBhbGxvdyB5b3UgdG8gcHVibGlzaCB0aGUgV2ViIHNlcnZpY2UuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXUEIwMDAyIj4KLTwhLS0gIFVEREkgTGF1bmNoIGNoZWNrIGJveCBvZiB0aGUgVURESSBQdWJsaXNoIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5JZiBzZWxlY3RlZCB3aWxsIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHRvIGFsbG93IHlvdSB0byBwdWJsaXNoIHRoZSBXZWIgc2VydmljZS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi0KLTxjb250ZXh0IGlkPSJQRUJEMDAwMSI+Ci08IS0tIEVBUiBQcm9qZWN0cyBkcm9wLWRvd24gYm94IC0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCBmcm9tIHRoZSBsaXN0ZWQgRUFSIHByb2plY3RzLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQRUJEMDAwMiI+Ci08IS0tIFRhYmxlIGNvbnRhaW5pbmcgYWxsIG9mIHRoZSBiZWFuIG5hbWVzIC0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCBmcm9tIHRoZSBsaXN0ZWQgSmF2YSBiZWFucy48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08IS0tV2ViU2VydmljZVRQQmVhbkNsYXNzUGFnZS5qYXZhLS0+Ci08Y29udGV4dCBpZD0iUEJDTDAwMDEiPgotPCEtLVBCQ0wwMDAxIGZvciB0aGUgQmVhbiBTZWxlY3Rpb24gUGFnZS0tPgotPGRlc2NyaXB0aW9uPlVzZSB0aGlzIHBhZ2UgdG8gc2VsZWN0IHRoZSBKYXZhIGJlYW4gb3IgY2xhc3MgdXNlZCB0byBjcmVhdGUgdGhlIFdlYiBzZXJ2aWNlLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQQkNMMDAwMiI+Ci08IS0tUEJDTDAwMDIgZm9yIHRoZSBCZWFuIFNlbGVjdGlvbiBmaWVsZCBvZiB0aGUgQmVhbiBTZWxlY3Rpb24gUGFnZS0tPgotPGRlc2NyaXB0aW9uPkVudGVyIHRoZSBuYW1lIG9mIHRoZSBKYXZhIGJlYW4gdG8gYmUgdXNlZCB0byBjcmVhdGUgdGhlIFdlYiBzZXJ2aWNlLiBEZWZhdWx0cyB0aGUgc2VsZWN0ZWQgSmF2YSBiZWFuLiBDbGljayA8Yj5Ccm93c2UgY2xhc3NlcyA8L2I+dG8gdmlldyB0aGUgYmVhbiBjbGFzcyBvZiB0aGUgc2VsZWN0ZWQgSmF2YSBiZWFuLiBUaGUgYmVhbiBjbGFzcyBpcyBhIG1vZGVsIG9yIHRlbXBsYXRlIChhbiBhYnN0cmFjdCBkYXRhIHR5cGUpIHRoYXQgY2FuIGJlIGluc3RhbnRpYXRlZCB0byBjcmVhdGUgb2JqZWN0cyB3aXRoIGEgY29tbW9uIGRlZmluaXRpb24gYW5kIHRoZXJlZm9yZSwgY29tbW9uIHByb3BlcnRpZXMsIG9wZXJhdGlvbnMsIGFuZCBiZWhhdmlvci4gQ2xpY2sgPGI+QnJvd3NlIGZpbGVzIDwvYj50byBzZWxlY3QgYSBKYXZhIGJlYW4gZnJvbSB0aGUgcHJvamVjdC48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUEJDTDAwMDMiPgotPCEtLVBCQ0wwMDAzIGZvciB0aGUgQmVhbiBDbGFzcyBCcm93c2UgYnV0dG9uIG9mIHRoZSBCZWFuIFNlbGVjdGlvbiBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+Q2xpY2sgdG8gdmlldyB0aGUgYmVhbiBjbGFzcyBvZiB0aGUgc2VsZWN0ZWQgSmF2YSBiZWFuLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQQkNMMDAwNCI+Ci08IS0tUEJDTDAwMDQgZm9yIHRoZSBCZWFuIFJlc291cmNlIEJyb3dzZSBidXR0b24gb2YgdGhlIEJlYW4gU2VsZWN0aW9uIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5Ccm93c2UgdG8gdGhlIGNvcnJlY3QgSmF2YSBiZWFuIHRvIGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBXZWIgc2VydmljZS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi0KLTxjb250ZXh0IGlkPSJQQ09OMDAwMSI+Ci08IS0tIFdTREwgU2VsZWN0aW9uIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5Vc2UgdGhpcyBwYWdlIHRvIHNlbGVjdCB0aGUgV1NETCwgV1NJTCwgb3IgSFRNTCBkb2N1bWVudCB0aGF0IHdpbGwgYmUgdXNlZCB0byBjcmVhdGUgdGhlIFdlYiBzZXJ2aWNlLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQQ09OMDAwMiI+Ci08IS0tIFdTREwgRG9jdW1lbnQgdGV4dCBmaWVsZCBvZiB0aGUgV1NETCBTZWxlY3Rpb24gUGFnZS0tPgotPGRlc2NyaXB0aW9uPkVudGVyIHRoZSBwYXRoIHRvIGEgV1NETCwgV1NJTCwgb3IgSFRNTCBkb2N1bWVudC48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUENPTjAwMDMiPgotPCEtLSBXU0RMIFJlc291cmNlIEJyb3dzZSBidXR0b24gb2YgdGhlIFdTREwgU2VsZWN0aW9uIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5Ccm93c2UgdG8gdGhlIGxvY2F0aW9uIG9mIGEgV1NETCwgV1NJTCwgb3IgSFRNTCBkb2N1bWVudC48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUENPTjAwMDQiPgotPCEtLSAgR2VuZXJhdGUgV1NJTCBidXR0b24gb2YgdGhlIFdTREwgU2VsZWN0aW9uIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhpcyBjaGVjayBib3ggdG8gZ2VuZXJhdGUgYSBzdGFuZGFyZGl6ZWQgV1NETCByZWZlcmVuY2UgKFdTSUwpIGRvY3VtZW50IGluIHlvdXIgcHJvamVjdC48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUENPTjAwMDUiPgotPCEtLSAgV1NJTCBEb2N1bWVudCB0ZXh0IGZpZWxkIG9mIHRoZSBXU0RMIFNlbGVjdGlvbiBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+RW50ZXIgdGhlIHBhdGggdG8gYW4gZXhpc3RpbmcgV1NJTCBkb2N1bWVudCwgb3Igc2VsZWN0IHRoZSBsb2NhdGlvbiB3aGVyZSB0aGUgV1NJTCBkb2N1bWVudCB3aWxsIGJlIGNyZWF0ZWQuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBDT04wMDA2Ij4KLTwhLS0gIFdTSUwgUmVzb3VyY2UgQnJvd3NlIGJ1dHRvbiBvZiB0aGUgV1NETCBTZWxlY3Rpb24gUGFnZS0tPgotPGRlc2NyaXB0aW9uPkJyb3dzZSB0byB0aGUgbG9jYXRpb24gb2YgYW4gZXhpc3RpbmcgV1NJTCBkb2N1bWVudDwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1JTMDAwMSI+Ci08IS0tICBSdW4tdGltZS9zZXJ2ZXJzIGluIHRoZSBXZWIgU2VydmljZSB0eXBlLS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHRoZSBzY2VuYXJpbyBjb25maWd1cmF0aW9uIGZvciBydW4tdGltZSBlbnZpcm9ubWVudHMsIHNlcnZlcnMsIGFuZCBwcm9qZWN0cy48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdSUzAwMDIiPgotPCEtLSAgUnVuLXRpbWUvc2VydmVycyBpbiB0aGUgV2ViIFNlcnZpY2UgdHlwZS0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGUgc2NlbmFyaW8gY29uZmlndXJhdGlvbiBmb3IgcnVuLXRpbWUgZW52aXJvbm1lbnRzLCBzZXJ2ZXJzLCBhbmQgcHJvamVjdHMuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXUlMwMDA0Ij4KLTwhLS0gIHNlcnZpY2Utc2lkZSBydW4tdGltZSBlbnZpcm9ubWVudCBzZWxlY3Rpb24gb2YgdGhlIHJ1bi10aW1lIGVudmlyb25tZW50IHNlbGVjdGlvbiBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+VGhpcyBpcyB0aGUgc2VydmVyLXNpZGUgcnVuLXRpbWUgZW52aXJvbm1lbnQgd2hpY2ggdGhlIFdlYiBzZXJ2aWNlIHdpbGwgdXNlLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1JTMDAwNSI+Ci08IS0tIHNlcnZpY2Utc2lkZSBzZXJ2ZXIgc2VsZWN0aW9uIG9mIHRoZSBydW4tdGltZSBlbnZpcm9ubWVudCBzZWxlY3Rpb24gUGFnZS0tPgotPGRlc2NyaXB0aW9uPlRoaXMgaXMgdGhlIHNlcnZlci1zaWRlIHNlcnZlciBvbiB3aGljaCB0aGUgV2ViIHNlcnZpY2Ugd2lsbCBydW4uPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXUlMwMDA2Ij4KLTwhLS0gIHNlcnZpY2Utc2lkZSBXZWIgcHJvamVjdCBjb21ibyBib3ggb2YgdGhlIHJ1bi10aW1lIGVudmlyb25tZW50IHNlbGVjdGlvbiBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHRoZSBXZWIgcHJvamVjdCBvciBFSkIgcHJvamVjdCBpbiB3aGljaCB0aGUgV2ViIHNlcnZpY2Ugd2lsbCBiZSBjcmVhdGVkLiBUaGUgd2l6YXJkIHdpbGwgY3JlYXRlIHRoZSBXZWIgcHJvamVjdCBmb3IgeW91IGlmIGl0IGRvZXMgbm90IGFscmVhZHkgZXhpc3QuIElmIHlvdSBhcmUgdXNpbmcgYW4gRUpCIHByb2plY3QsIGl0IG11c3QgYWxyZWFkeSBleGlzdC48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdSUzAwMDciPgotPCEtLXNlcnZpY2Utc2lkZSBFSkIgcHJvamVjdCBjb21ibyBib3ggb2YgdGhlIHJ1bi10aW1lIGVudmlyb25tZW50IHNlbGVjdGlvbiBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHRoZSBFSkIgcHJvamVjdCBpbiB3aGljaCB0aGUgV2ViIHNlcnZpY2Ugd2lsbCBiZSBjcmVhdGVkLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1JTMDAwMyI+Ci08IS0tICBjbGllbnQtc2lkZSBydW4tdGltZSBlbnZpcm9ubWVudCBzZWxlY3Rpb24gb2YgdGhlIHJ1bi10aW1lIGVudmlyb25tZW50IHNlbGVjdGlvbiBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+VGhpcyBpcyB0aGUgY2xpZW50LXNpZGUgcnVuLXRpbWUgZW52aXJvbm1lbnQgd2hpY2ggdGhlIFdlYiBzZXJ2aWNlIHdpbGwgdXNlLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1JTMDAwOSI+Ci08IS0tIGNsaWVudC1zaWRlIHNlcnZlciBzZWxlY3Rpb24gb2YgdGhlIHJ1bi10aW1lIGVudmlyb25tZW50IHNlbGVjdGlvbiBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+VGhpcyBpcyB0aGUgY2xpZW50LXNpZGUgc2VydmVyIG9uIHdoaWNoIHRoZSBXZWIgc2VydmljZSB3aWxsIHJ1bi48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdSUzAwMTAiPgotPCEtLSAgc2VydmljZS1zaWRlIFdlYiBwcm9qZWN0IGNvbWJvIGJveCBvZiB0aGUgcnVuLXRpbWUgZW52aXJvbm1lbnQgc2VsZWN0aW9uIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhlIHByb2plY3QgaW4gd2hpY2ggdGhlIFdlYiBzZXJ2aWNlIGNsaWVudCB3aWxsIGJlIGNyZWF0ZWQuIFRoZSB3aXphcmQgd2lsbCBnZW5lcmF0ZSB0aGlzIHByb2plY3QgaWYgaXQgZG9lcyBub3QgYWxyZWFkeSBleGlzdC48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdSUzAwMTEiPgotPCEtLSBjbGllbnQgdHlwZSBjb21ibyBib3ggb2YgdGhlIHNlcnZlciBydW4tdGltZSBlbnZpcm9ubWVudCBzZWxlY3Rpb24gUGFnZSAtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgZnJvbSB0aGUgbGlzdGVkIHByb2plY3QgdHlwZXMgdGhlIHR5cGUgb2YgcHJvamVjdCB0aGF0IHlvdSB3YW50IGNyZWF0ZWQgdG8gY29udGFpbiB5b3VyIFdlYiBzZXJ2aWNlIGNsaWVudC48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdSUzAwMTIiPgotPCEtLSBFQVIgY29tYm8gYm94IG9mIHRoZSBzZXJ2ZXIgcnVuLXRpbWUgZW52aXJvbm1lbnQgc2VsZWN0aW9uIFBhZ2UgLS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IGZyb20gdGhlIGxpc3RlZCBFQVIgcHJvamVjdHMuIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IHNlbGVjdCBkaWZmZXJlbnQgRUFScyBmb3IgdGhlIGNsaWVudCBhbmQgdGhlIHNlcnZpY2UgdG8gYXZvaWQgcnVudGltZSBlcnJvcnMuIFRoZSB3aXphcmQgd2lsbCBjcmVhdGUgdGhlIEVBUiBmb3IgeW91IGlmIGl0IGRvZXMgbm90IGFscmVhZHkgZXhpc3QuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotCi08Y29udGV4dCBpZD0iUFdTTTAwMDEiPgotPCEtLSBTYW1wbGUgUGFnZSAtLT4KLTxkZXNjcmlwdGlvbj5UaGUgc2FtcGxlIFdlYiBhcHBsaWNhdGlvbiBkZW1vbnN0cmF0ZXMgaG93IHRvIGNvZGUgdGhlIHByb3h5IGZpbGUuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXU00wMDAyIj4KLTwhLS0gVGVzdCBjaGVjayBib3ggb2YgdGhlIFNhbXBsZSBQYWdlIC0tPgotPGRlc2NyaXB0aW9uPklmIHNlbGVjdGVkIHdpbGwgbGF1bmNoIHRoZSBzYW1wbGUgV2ViIGFwcGxpY2F0aW9uIGluIHRoZSBXZWIgYnJvd3Nlci48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdTTTAwMDMiPgotPCEtLSBUZXN0IFR5cGUgQ29tYm8gYm94IG9mIHRoZSBTYW1wbGUgUGFnZSAtLT4KLTxkZXNjcmlwdGlvbj5UaGUgc2FtcGxlIFdlYiBhcHBsaWNhdGlvbiBkZW1vbnN0cmF0ZXMgaG93IHRvIGNvZGUgdGhlIHByb3h5IGZpbGUuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXU00wMDA1Ij4KLTwhLS0gTWV0aG9kcyB0cmVlIG9mIHRoZSBTYW1wbGUgUGFnZSAtLT4KLTxkZXNjcmlwdGlvbj5UaGUgbWV0aG9kcyB0aGF0IGNhbiBiZSBpbnZva2VkIG9uIHRoZSBzZXJ2aWNlIG9iamVjdCBhbmQgZW5jb2Rpbmcgc3R5bGVzIGZvciB0aGUgbWV0aG9kIGlucHV0cyBhbmQgb3V0cHV0cy4gT25seSBzZWxlY3RlZCBtZXRob2RzIHdpbGwgYmUgYXZhaWxhYmxlIGZvciBpbnZvY2F0aW9uIGFuZCBkb2N1bWVudGVkIGluIHRoZSBXU0RMLiBTZWxlY3QgZW5jb2Rpbmcgc3R5bGVzIGZvciBpbnB1dCBwYXJhbWV0ZXJzIGFuZCBvdXRwdXQgcmV0dXJuLiBUaGUgbWV0aG9kcyBsaXN0IHdpbGwgZGlzcGxheSBzdXBwb3J0ZWQgbWV0aG9kcyBmb3IgYSBzZWxlY3RlZCBzZXJ2aWNlIG9iamVjdC48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdTTTAwMDYiPgotPCEtLSBTZWxlY3QgQWxsIGJ1dHRvbiBvZiB0aGUgU2FtcGxlIFBhZ2UgLS0+Ci08ZGVzY3JpcHRpb24+Q2xpY2sgdGhpcyBidXR0b24gdG8gYWRkIGFsbCB0aGUgYXZhaWxhYmxlIG1ldGhvZHMgdG8gdGhlIFdlYiBzZXJ2aWNlIHNhbXBsZSBwcm94eS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdTTTAwMDciPgotPCEtLSBEZXNlbGVjdCBBbGwgYnV0dG9uIG9mIHRoZSBTYW1wbGUgUGFnZSAtLT4KLTxkZXNjcmlwdGlvbj5DbGljayB0aGlzIGJ1dHRvbiB0byByZW1vdmUgYWxsIHRoZSBhdmFpbGFibGUgbWV0aG9kcyB0byB0aGUgV2ViIHNlcnZpY2Ugc2FtcGxlIHByb3h5LjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1NNMDAwOCI+Ci08IS0tIEpTUCBGb2xkZXIgZmllbGQgb2YgdGhlIFNhbXBsZSBQYWdlIC0tPgotPGRlc2NyaXB0aW9uPkZvbGRlciBpbnRvIHdoaWNoIHlvdXIgV2ViIHNlcnZpY2UgSlNQcyBhcmUgZGVwb3NpdGVkLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1NNMDAwOSI+Ci08IS0tIEpTUCBGb2xkZXIgQnJvd3NlIGJ1dHRvbiBvZiB0aGUgU2FtcGxlIFBhZ2UgLS0+Ci08ZGVzY3JpcHRpb24+Q2xpY2sgdG8gZmluZCB0aGUgZm9sZGVyIGludG8gd2hpY2ggeW91ciBXZWIgc2VydmljZSBKU1BzIGFyZSBkZXBvc2l0ZWQuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXU00wMDEwIj4KLTwhLS0gUHJvamVjdCBjb21ibyBib3ggb2YgdGhlIFNhbXBsZSBQYWdlIC0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCBhbiBleGlzdGluZyBwcm9qZWN0IGludG8gd2hpY2ggeW91ciBzYW1wbGUgd2lsbCBiZSBnZW5lcmF0ZWQuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXU00wMDE0Ij4KLTwhLS0gRm9sZGVyIGZpZWxkIG9mIHRoZSBTYW1wbGUgUGFnZSAtLT4KLTxkZXNjcmlwdGlvbj5Gb2xkZXIgaW50byB3aGljaCB0aGUgZnVsbHkgcXVhbGlmaWVkIHByb3h5IGlzIGdlbmVyYXRlZC4gRGVmYXVsdHMgdG8gdGhlIHNvdXJjZSBmb2xkZXIgaW5zaWRlIG9mIHlvdXIgV2ViIHByb2plY3QuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXU00wMDE1Ij4KLTwhLS0gUnVuIHRlc3QgY2hlY2sgYm94IG9mIHRoZSBTYW1wbGUgUGFnZSAtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhpcyBjaGVjayBib3ggdG8gcnVuIHRoZSBzYW1wbGUgYXBwbGljYXRpb24gb24gdGhlIHNlcnZlci48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdTTTAwMTYiPgotPCEtLSBFQVIgY29tYm8gYm94IG9mIHRoZSBTYW1wbGUgUGFnZSAtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhlIEVBUiBpbiB3aGljaCB5b3Ugd2FudCB5b3VyIFdlYiBzZXJ2aWNlIHNhbXBsZSBhcHBsaWNhdGlvbiBjcmVhdGVkLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLQotPGNvbnRleHQgaWQ9IlBXV1MwMDAxIj4KLTwhLS0gIFdTREwgU2VsZWN0aW9uIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5Vc2UgdGhpcyBwYWdlIHRvIHNlbGVjdCB0aGUgV1NETCwgV1NJTCwgb3IgSFRNTCBkb2N1bWVudCB0aGF0IHdpbGwgYmUgdXNlZCB0byBjcmVhdGUgdGhlIFdlYiBzZXJ2aWNlLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1dTMDAwMiI+Ci08IS0tICBXU0RMIERvY3VtZW50IHRleHQgZmllbGQgb2YgdGhlIFdTREwgU2VsZWN0aW9uIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5FbnRlciB0aGUgcGF0aCB0byBhIFdTREwsIFdTSUwsIG9yIEhUTUwgZG9jdW1lbnQuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXV1MwMDAzIj4KLTwhLS0gIFdTREwgUmVzb3VyY2UgQnJvd3NlIGJ1dHRvbiBvZiB0aGUgV1NETCBTZWxlY3Rpb24gUGFnZS0tPgotPGRlc2NyaXB0aW9uPkJyb3dzZSB0byB0aGUgbG9jYXRpb24gb2YgYSBXU0RMLCBXU0lMLCBvciBIVE1MIGRvY3VtZW50LjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLQotPGNvbnRleHQgaWQ9IkRCQVMwMDAxIj4KLTwhLS0gSFRUUCBiYXNpYyBhdXRoZW50aWNhdGlvbiB1c2VyIG5hbWUgLS0+Ci08ZGVzY3JpcHRpb24+RW50ZXIgdGhlIHVzZXIgbmFtZSB1c2VkIGZvciBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJEQkFTMDAwMiI+Ci08IS0tIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb24gcGFzc3dvcmQgLS0+Ci08ZGVzY3JpcHRpb24+RW50ZXIgdGhlIHBhc3N3b3JkIHVzZWQgZm9yIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb24uPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPCEtLVRvcG9sb2d5UHJlZmVyZW5jZVBhZ2UuamF2YS0tPgotCi08Y29udGV4dCBpZD0iUFRQUDAwMDEiPgotPCEtLVBUUFAwMDAxIGZvciB0aGUgVG9wb2xvZ3kgUHJlZmVyZW5jZSBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+VGhlc2UgdGFibGVzIHJlc3ByZXNlbnRzIHRoZSB0aGUgdHlwZXMgb2YgcHJvamVjdHMgYXZhaWxhYmxlIGludG8gd2hpY2ggeW91IGNhbiBnZW5lcmF0ZSAKLWEgV2ViIHNlcnZpY2Ugb3IgY2xpZW50LiBZb3UgY2Fubm90IGFkZCBvciByZW1vdmUgcHJvamVjdCB0eXBlcywgaG93ZXZlciB5b3UgY2FuIGNoYW5nZSB0aGUgb3JkZXIgaW4gd2hpY2ggCi10aGV5IGFwcGVhciBpbiB0aGUgV2ViIHNlcnZpY2VzIHdpemFyZC4gVGhpcyBpcyB1c2VmdWwgaWYgeW91IGFyZSBjcmVhdGluZyBzZXZlcmFsIFdlYiBzZXJ2aWNlcyB0aGF0IHVzZSAKLXRoZSBzYW1lIHR5cGUgb2Ygc2VydmljZSBvciBjbGllbnQgcHJvamVjdCBiZWNhdXNlIHlvdSBjYW4gc2V0IHRoYXQgc2VydmljZSBvciBjbGllbnQgcHJvamVjdCB0eXBlIGFzIHRoZSBkZWZhdWx0LiBUbyBjaGFuZ2UgCi10aGUgb3JkZXIsIHNlbGVjdCBhIHByb2plY3QgdHlwZSBhbmQgdXNlIHRoZSB1cCBhbmQgZG93biBhcnJvd3MgdG8gbW92ZSBpdCB3aXRoaW4gdGhlIGxpc3QuIENoYW5naW5nIHRoZSAKLW9yZGVyIG9mIHRoZSBsaXN0IGRvZXMgbm90IHJlc3RyaWN0IHlvdXIgYWJpbGl0eSB0byBzZWxlY3QgYW55IG9mIHRoZSBvcHRpb25zLgotSWYgeW91IHNlbGVjdCB0aGUgY2hlY2sgYm94LCBieSBkZWZhdWx0IHRoZSBXZWIgc2VydmljZXMgd2l6YXJkIHdpbGwgZ2VuZXJhdGUgdGhlIFdlYiBzZXJ2aWNlcyAKLXNlcnZlciBhbmQgY2xpZW50IGNvZGUgaW50byBkaWZmZXJlbnQgRUFScy4gSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgZW5hYmxlIHRoaXMgZmVhdHVyZS4KLTwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQVFBQMDAwMiI+Ci08IS0tUFRQUDAwMDIgZm9yIHRoZSBUb3BvbG9neSBQcmVmZXJlbmNlIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5UaGlzIHRhYmxlIHJlc3ByZXNlbnRzIHRoZSB0aGUgdHlwZXMgb2YgcHJvamVjdHMgYXZhaWxhYmxlIGludG8gd2hpY2ggeW91IGNhbiBnZW5lcmF0ZSBhIAotV2ViIHNlcnZpY2VzIGNsaWVudC4gWW91IGNhbm5vdCBhZGQgb3IgcmVtb3ZlIHByb2plY3QgdHlwZXMsIGhvd2V2ZXIgeW91IGNhbiBjaGFuZ2UgdGhlIG9yZGVyIAotaW4gd2hpY2ggdGhleSBhcHBlYXIgaW4gdGhlIFdlYiBzZXJ2aWNlcyB3aXphcmQuIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSBhcmUgY3JlYXRpbmcgc2V2ZXJhbCBXZWIgCi1zZXJ2aWNlcyB0aGF0IHVzZSB0aGUgc2FtZSB0eXBlIG9mIGNsaWVudCBwcm9qZWN0IGJlY2F1c2UgeW91IGNhbiBzZXQgdGhhdCBjbGllbnQgcHJvamVjdCB0eXBlIGFzIAotdGhlIGRlZmF1bHQuIFRvIGNoYW5nZSB0aGUgb3JkZXIsIHNlbGVjdCBhIHByb2plY3QgdHlwZSBhbmQgdXNlIHRoZSB1cCBhbmQgZG93biBhcnJvd3MgdG8gbW92ZSBpdCAKLXdpdGhpbiB0aGUgbGlzdC4gQ2hhbmdpbmcgdGhlIG9yZGVyIG9mIHRoZSBsaXN0IGRvZXMgbm90IHJlc3RyaWN0IHlvdXIgYWJpbGl0eSB0byBzZWxlY3QgYW55IG9mIHRoZSBvcHRpb25zLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQVFBQMDAwNSI+Ci08IS0tUFRQUDAwMDIgZm9yIHRoZSBUb3BvbG9neSBQcmVmZXJlbmNlIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5JZiB5b3Ugc2VsZWN0IHRoaXMgY2hlY2sgYm94LCBieSBkZWZhdWx0IHRoZSBXZWIgc2VydmljZXMgd2l6YXJkIHdpbGwgZ2VuZXJhdGUgdGhlIFdlYiBzZXJ2aWNlcyBzZXJ2ZXIgYW5kIGNsaWVudCBjb2RlIGludG8gZGlmZmVyZW50IEVBUnMuIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IGVuYWJsZSB0aGlzIGZlYXR1cmUuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotCi08L2NvbnRleHRzPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24uaW5mb3BvcC93c2NyZWF0aW9udWktZjFDb250ZXh0cy54bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi5pbmZvcG9wL3dzY3JlYXRpb251aS1mMUNvbnRleHRzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDJjY2ZlOC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi5pbmZvcG9wL3dzY3JlYXRpb251aS1mMUNvbnRleHRzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9OTFMgVFlQRT0ib3JnLmVjbGlwc2UuaGVscC5jb250ZXh0cyI/PgotPCEtLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIC0tPgotPGNvbnRleHRzPgotCi08Y29udGV4dCBpZD0iUFdSUzAwMDIiPgotPCEtLSAgUnVuLXRpbWUvc2VydmVycyBpbiB0aGUgV2ViIFNlcnZpY2UgdHlwZS0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGUgc2NlbmFyaW8gY29uZmlndXJhdGlvbiBmb3IgcnVuLXRpbWUgZW52aXJvbm1lbnRzLCBzZXJ2ZXJzLCBhbmQgcHJvamVjdHMuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXUFIwMDAxIj4KLTwhLS0gUHJvamVjdCBQYWdlIC0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGUgdHlwZSBvZiBXZWIgc2VydmljZSB5b3Ugd2FudCB0byBnZW5lcmF0ZSBhbmQgYW55IGZpbGUgYW5kIGZvbGRlciBvcHRpb25zIGZvciB5b3VyIFdlYiBzZXJ2aWNlLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1BSMDAwNSI+Ci08IS0tICBHZW5lcmF0ZSBQcm94eSBjaGVjayBib3ggb2YgdGhlIFByb2plY3QgUGFnZSAtLT4KLTxkZXNjcmlwdGlvbj5UaGUgZ2VuZXJhdGVkIEphdmEgYmVhbiBwcm94eSBwcm92aWRlcyBhIHJlbW90ZSBwcm9jZWR1cmUgY2FsbCBpbnRlcmZhY2UgdG8gdGhlIFdlYiBzZXJ2aWNlLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1BSMDAwOSI+Ci08IS0tICBTdGFydCBXZWIgUHJvamVjdCBjaGVjayBib3ggY2hlY2sgYm94IG9mIHRoZSBQcm9qZWN0IFBhZ2UgLS0+Ci08ZGVzY3JpcHRpb24+Q2xpY2sgdG8gc3RhcnQgdGhlIHNlcnZlci4gSWYgeW91IGxlYXZlIHRoZSBib3ggdW5jaGVja2VkIHlvdSB3aWxsIGhhdmUgdG8gbWFudWFsbHkgc3RhcnQgdGhlIHNlcnZlci48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdQUjAwMTAiPgotPCEtLSBXZWIgU2VydmljZSBUeXBlIGNvbWJvIGJveCBvZiB0aGUgUHJvamVjdCBQYWdlIC0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGUgdHlwZSBvZiBXZWIgc2VydmljZSB5b3Ugd2FudCB0byBidWlsZC4gWW91ciBzZWxlY3Rpb24gd2lsbCBhZmZlY3QgdGhlIGZpbGVzIGF2YWlsYWJsZSBmb3Igc2VsZWN0aW9uLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1BSMDAxMSI+Ci08IS0tICBXaXphcmQgU2NlbmFyaW8gU2VydmljZSBncm91cCBvZiB0aGUgUHJvamVjdCBQYWdlIC0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGUgdHlwZSBvZiBXZWIgc2VydmljZSB5b3Ugd2FudCB0byBidWlsZC4gWW91ciBzZWxlY3Rpb24gd2lsbCBhZmZlY3QgdGhlIGZpbGVzIGF2YWlsYWJsZSBmb3Igc2VsZWN0aW9uLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1BSMDAxMyI+Ci08IS0tICBUZXN0IHNlcnZpY2UgY2hlY2tib3ggb2YgdGhlIHByb2plY3QgcGFnZSAtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhpcyBjaGVjayBib3ggdG8gbGF1bmNoIHRoZSBXZWIgc2VydmljZSBpbiB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGluIG9yZGVyIHRvIGV4YW1pbmUgaXQuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXUFIwMDEyIj4KLTwhLS0gIExhdW5jaCBVRERJIGNoZWNrIGJveCBvZiB0aGUgUHJvamVjdCBQYWdlIC0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGlzIGNoZWNrYm94IHRvIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGluIG9yZGVyIHRvIHB1Ymxpc2ggdGhlIFdlYiBzZXJ2aWNlIHRvIGEgVURESSByZWdpc3RyeS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdQUjAwMTQiPgotPCEtLSAgV2ViIFNlcnZpY2UgQ2xpZW50IFR5cGUgY29tYm8gYm94IG9mIHRoZSBQcm9qZWN0IFBhZ2UgLS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHRoZSBjbGllbnQgcHJveHkgdHlwZS4gVGhlIGdlbmVyYXRlZCBKYXZhIGJlYW4gcHJveHkgcHJvdmlkZXMgYSByZW1vdGUgcHJvY2VkdXJlIGNhbGwgaW50ZXJmYWNlIHRvIHRoZSBXZWIgc2VydmljZS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi0KLQotPGNvbnRleHQgaWQ9IlBTVFAwMDAxIj4KLTwhLS0gIFRlc3QgVHlwZSBDb21ibyBib3ggb2YgdGhlIFNlcnZpY2UgVGVzdCBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHRoZSB0ZXN0IGZhY2lsaXR5IGluIHdoaWNoIHlvdSB3b3VsZCBsaWtlIHRvIHRlc3QgdGhlIFdlYiBzZXJ2aWNlIGJlaW5nIGNyZWF0ZWQuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBTVFAwMDAyIj4KLTwhLS0gIExhdW5jaCBidXR0b24gb2YgdGhlIFNlcnZpY2UgVGVzdCBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+Q2xpY2sgdGhpcyB0byBsYXVuY2ggdGhlIFdlYiBzZXJ2aWNlIGluIGEgYnJvd3NlciB3aW5kb3cgdG8gdGVzdCBpdC48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08IS0tV2ViU2VydmljZVdpek5ld0ZpcnN0UGFnZS0tPgotCi08Y29udGV4dCBpZD0iV1NXU0NFTjAwMDEiPgotPCEtLSBGaXJzdCBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+T24gdGhpcyBwYWdlIHNlbGVjdCB0aGUgYXJ0aWZhY3QgZnJvbSB3aGljaCB5b3VyIFdlYiBzZXJ2aWNlIG9yIGNsaWVudCB3aWxsIGJlIGNyZWF0ZWQsIGFuZCB0aGUgc3RhZ2VzIG9mIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCB0aGF0IHlvdSB3YW50Ci10byBjb21wbGV0ZToKLS0gRGV2ZWxvcDogdGhpcyB3aWxsIGNyZWF0ZSB0aGUgc2VydmljZSBjb2RlCi0tIEFzc2VtYmxlOiB0aGlzIGVuc3VyZXMgdGhhdCB0aGUgcHJvamVjdCB0aGF0IHdpbGwgaG9zdCB0aGUgV2ViIHNlcnZpY2Ugb3IgY2xpZW50IGdldHMgYXNzb2NpYXRlZCB0byBhbiBFQVIgd2hlbiByZXF1aXJlZCBieSB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9uIHNlcnZlcgotLSBEZXBsb3k6IHRoaXMgd2lsbCBjcmVhdGUgdGhlIGRlcGxveW1lbnQgY29kZSBmb3IgdGhlIHNlcnZpY2UKLS0gSW5zdGFsbDogdGhpcyB3aWxsIGluc3RhbGwgdGhlIHNlcnZpY2Ugb24gdGhlIGNob3NlbiBzZXJ2ZXIKLS0gU3RhcnQ6IHRoaXMgd2lsbCBzdGFydCB0aGUgc2VydmVyIG9uY2UgdGhlIHNlcnZpY2UgaGFzIGJlZW4gaW5zdGFsbGVkIG9uIGl0Ci0tIFRlc3Q6IHRoaXMgd2lsbCBwcm92aWRlIHZhcmlvdXMgb3B0aW9ucyBmb3IgdGVzdGluZyB0aGUgc2VydmljZQotU2VsZWN0IHRoZSBzZXJ2ZXIgYW5kIHJ1bnRpbWUgZm9yIHlvdXIgV2ViIHNlcnZpY2Ugb3IgY2xpZW50LCBhbmQgd2hldGhlciBvciBub3QgeW91IHdhbnQgdG8gcHVibGlzaCBvciBtb25pdG9yIHRoZSBzZXJ2aWNlLgotPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IldTV1NDRU4wMDEwIj4KLTwhLS1XZWIgc2VydmljZSB0eXBlIGNvbWJvIGJveCBvZiB0aGUgRmlyc3QgUGFnZS0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGUgdHlwZSBvZiBXZWIgc2VydmljZSB5b3Ugd2FudCB0byBjcmVhdGUuIEEgYm90dG9tLXVwIHNlcnZpY2UgY3JlYXRlcyBhIHNlcnZpY2UgZnJvbSBhIEphdmEgYmVhbiBvciBFSkIsIHdoaWxlIGEgdG9wLWRvd24gc2VydmljZSB3aWxsIGNyZWF0ZSAKLWEgc2VydmljZSBmcm9tIGEgV1NETCBmaWxlIGFuZCB0aGVuIGNyZWF0ZSBhIHNrZWxldG9uIEphdmEgYmVhbiBvciBFSkIgZm9yIHlvdSB0byBpbXBsZW1lbnQgbGF0ZXIuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IldTV1NDRU4wMDE0Ij4KLTwhLS1Nb25pdG9yIGNoZWNrYm94IG9mIHRoZSBGaXJzdCBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+TW9uaXRvciB0aGUgV2ViIHNlcnZpY2U6IHRoaXMgd2lsbCBzZW5kIHRoZSBXZWIgc2VydmljZSB0cmFmZmljCi10aHJvdWdoIHRoZSBUQ1AvSVAgTW9uaXRvciwgd2hpY2ggYWxsb3dzIHlvdSB0byB3YXRjaCB0aGUgU09BUCB0cmFmZmljIGdlbmVyYXRlZAotYnkgdGhlIFdlYiBzZXJ2aWNlIGFuZCB0byB0ZXN0IHRoaXMgdHJhZmZpYyBmb3IgV1MtSSBjb21wbGlhbmNlLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJXU1dTQ0VOMDAxMiI+Ci08IS0tTGF1bmNoIFVEREkgY2hlY2sgYm94IG9mIHRoZSBGaXJzdCBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+UHVibGlzaCB0aGUgV2ViIHNlcnZpY2U6IHRoaXMgd2lsbCBsYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcgotdG8gcHVibGlzaCB5b3VyIFdlYiBzZXJ2aWNlIHRvIGEgVURESSByZWdpc3RyeS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iV1NXU0NFTjAwMjAiPgotPCEtLVNlcnZpY2UgaW1wbGVtZW50YXRpb24gZmllbGQgb2YgdGhlIEZpcnN0IFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5FbnRlciB0aGUgVVJJIHRvIHRoZSBXU0RMLCBXU0lMLCBvciBIVE1MIGZpbGUgdGhhdAotd2lsbCBiZSB1c2VkIHRvIGdlbmVyYXRlIHRoZSBzZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IldTV1NDRU4wMDIxIj4KLTwhLS1TZXJ2aWNlIHNsaWRlciBvZiB0aGUgRmlyc3QgUGFnZS0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGUgc3RhZ2VzIG9mIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCB0aGF0IHlvdSB3YW50Ci10byBjb21wbGV0ZSB1c2luZyB0aGUgc2xpZGVyOgotLSBEZXZlbG9wOiB0aGlzIHdpbGwgY3JlYXRlIHRoZSBzZXJ2aWNlIGNvZGUKLS0gQXNzZW1ibGU6IHRoaXMgZW5zdXJlcyB0aGF0IHRoZSBwcm9qZWN0IHRoYXQgd2lsbCBob3N0IHRoZSBXZWIgc2VydmljZSBvciBjbGllbnQgZ2V0cyBhc3NvY2lhdGVkIHRvIGFuIEVBUiB3aGVuIHJlcXVpcmVkIGJ5IHRoZSB0YXJnZXQgYXBwbGljYXRpb24gc2VydmVyCi0tIERlcGxveTogdGhpcyB3aWxsIGNyZWF0ZSB0aGUgZGVwbG95bWVudCBjb2RlIGZvciB0aGUgc2VydmljZQotLSBJbnN0YWxsOiB0aGlzIHdpbGwgaW5zdGFsbCB0aGUgc2VydmljZSBvbiB0aGUgY2hvc2VuIHNlcnZlcgotLSBTdGFydDogdGhpcyB3aWxsIHN0YXJ0IHRoZSBzZXJ2ZXIgb25jZSB0aGUgc2VydmljZSBoYXMgYmVlbiBpbnN0YWxsZWQgb24gaXQKLS0gVGVzdDogdGhpcyB3aWxsIHByb3ZpZGUgdmFyaW91cyBvcHRpb25zIGZvciB0ZXN0aW5nIHRoZSBzZXJ2aWNlCi08L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iV1NXU0NFTjAwMjIiPgotPCEtLVNlcnZlciBsaW5rIG9mIHRoZSBGaXJzdCBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHlvdXIgc2VydmVyOiB0aGUgZGVmYXVsdCBzZXJ2ZXIgaXMgZGlzcGxheWVkLiBJZiB5b3UKLXdhbnQgdG8gZGVwbG95IHlvdXIgc2VydmljZSB0byBhIGRpZmZlcmVudCBzZXJ2ZXIgY2xpY2sgdGhlIGxpbmsgdG8gc3BlY2lmeQotYSBkaWZmZXJlbnQgc2VydmVyLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJXU1dTQ0VOMDAyMyI+Ci08IS0tcnVudGltZSBsaW5rIG9mIHRoZSBGaXJzdCBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHlvdXIgcnVudGltZTogdGhlIGRlZmF1bHQgcnVudGltZSBpcyBkaXNwbGF5ZWQuIElmIHlvdQotd2FudCB0byBkZXBsb3kgeW91ciBzZXJ2aWNlIHRvIGEgZGlmZmVyZW50IHJ1bnRpbWUgY2xpY2sgdGhlIGxpbmsgdG8gc3BlY2lmeQotYSBkaWZmZXJlbnQgcnVudGltZS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iV1NXU0NFTjAwMjQiPgotPCEtLXByb2plY3RzIGxpbmsgb2YgdGhlIEZpcnN0IFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhlIHNlcnZpY2UgcHJvamVjdDogdGhlIHByb2plY3QgY29udGFpbmluZyB0aGUgcHJvamVjdAotc2VsZWN0ZWQgaW4geW91ciB3b3Jrc3BhY2UgaXMgZGlzcGxheWVkLiBUbyBzZWxlY3QgYSBkaWZmZXJlbnQgcHJvamVjdCBhbmQKLUVBUiBjbGljayBvbiB0aGUgcHJvamVjdCBsaW5rLiBFbnN1cmUgdGhhdCB0aGUgcHJvamVjdCBzZWxlY3RlZAotYXMgdGhlIENsaWVudCBXZWIgUHJvamVjdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgU2VydmljZSBXZWIgUHJvamVjdCwgb3IgdGhlCi1zZXJ2aWNlIHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIGNsaWVudCdzIGdlbmVyYXRlZCBhcnRpZmFjdHMuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IldTV1NDRU4wMDI1Ij4KLTwhLS1jbGllbnQgdHlwZSBjb21ibyBvZiB0aGUgRmlyc3QgUGFnZS0tPgotPGRlc2NyaXB0aW9uPlRoZSBKYXZhIGJlYW4gY2xpZW50IHByb3h5IHRoYXQgaXMgZ2VuZXJhdGVkIHByb3ZpZGVzIGEgcmVtb3RlIHByb2NlZHVyZSBjYWxsIGludGVyZmFjZSB0byB0aGUgV2ViIHNlcnZpY2UuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IldTV1NDRU4wMDI2Ij4KLTwhLS1DbGllbnQgc2xpZGVyIG9mIHRoZSBGaXJzdCBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHRoZSBzdGFnZXMgb2YgV2ViIHNlcnZpY2VzIGNsaWVudCBkZXZlbG9wbWVudCB0aGF0IHlvdSB3YW50Ci10byBjb21wbGV0ZSB1c2luZyB0aGUgc2xpZGVyOgotLSBEZXZlbG9wOiB0aGlzIHdpbGwgY3JlYXRlIHRoZSBjbGllbnQgY29kZQotLSBBc3NlbWJsZTogdGhpcyBlbnN1cmVzIHRoYXQgdGhlIHByb2plY3QgdGhhdCB3aWxsIGhvc3QgdGhlIFdlYiBzZXJ2aWNlIG9yIGNsaWVudCBnZXRzIGFzc29jaWF0ZWQgdG8gYW4gRUFSIHdoZW4gcmVxdWlyZWQgYnkgdGhlIHRhcmdldCBhcHBsaWNhdGlvbiBzZXJ2ZXIKLS0gRGVwbG95OiB0aGlzIHdpbGwgY3JlYXRlIHRoZSBkZXBsb3ltZW50IGNvZGUgZm9yIHRoZSBjbGllbnQKLS0gSW5zdGFsbDogdGhpcyB3aWxsIGluc3RhbGwgdGhlIGNsaWVudCBvbiB0aGUgY2hvc2VuIHNlcnZlcgotLSBTdGFydDogdGhpcyB3aWxsIHN0YXJ0IHRoZSBzZXJ2ZXIgb25jZSB0aGUgY2xpZW50IGhhcyBiZWVuIGluc3RhbGxlZCBvbiBpdAotLSBUZXN0OiB0aGlzIHdpbGwgcHJvdmlkZSB2YXJpb3VzIG9wdGlvbnMgZm9yIHRlc3RpbmcgdGhlIGNsaWVudAotPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IldTV1NDRU4wMDMwIj4KLTwhLS1maWxlIG92ZXJ3cml0ZSBjaGVja2JveCBvZiB0aGUgRmlyc3QgUGFnZS0tPgotPGRlc2NyaXB0aW9uPlRoaXMgYWxsb3dzIHlvdSB0byBvdmVyd3JpdGUgZmlsZXMgd2l0aG91dCByZWNlaXZpbmcgYSB3YXJuaW5nIG1lc3NhZ2UgYXNraW5nIGZvciBjb25maXJtYXRpb24gd2hlbiBvdmVyd3JpdGluZyBmaWxlcy48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08L2NvbnRleHRzPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvLmN2c2lnbm9yZSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1NDBmYjIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyXzEuMC4wLmphcgotYmFrCi10ZW1wCi1EaXRhTGluay5jYXQKLWJ1aWxkLnhtbApkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvLnByb2plY3QgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGIzZGNiMS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlcjwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL0RvY0J1aWxkLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL0RvY0J1aWxkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjNhNTEzZi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9Eb2NCdWlsZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KLTwhLS0gCi0KLQlUaGlzIHNjcmlwdCBidWlsZCB0aGUgSGVscCBwbHVnLWluIGJ5IHRyYW5zZm9ybWluZyB0aGUgRElUQSBzb3VyY2UgZmlsZXMgaW50byBIVE1MLgotCQotCVRvIHVzZSB0aGlzIHNjcmlwdCwgeW91IG11c3QgaW5zdGFsbCBESVRBLU9UIG9uIHlvdXIgbWFjaGluZSBpbiB0aGUgZGlyZWN0b3J5Ci0JZGVmaW5lZCBieSB0aGUgZGl0YS5vdC5kaXIgcHJvcGVydHkuCi0JCi0JUnVuIHRoZSBkZWZhdWx0IHRhcmdldCBhZnRlciB5b3UgZWRpdCB0aGUgRElUQSBzb3VyY2UgZmlsZXMgdG8gcmVnZW5lcmF0ZSB0aGUgSFRNTC4KLQkKLQlUbyBjdXN0b21pemUgdGhpcyBzY3JpcHQgZm9yIG90aGVyIEhlbHAgcGx1Zy1pbnMsIG1vZGlmeSB0aGUgdmFsdWUgb2YgdGhlIGFyZ3MuaW5wdXQgcHJvcGVydHkKLQl0byBiZSB0aGUgRElUQSBtYXAgZmlsZSBmb3IgdGhlIHBsdWctaW4uCi0JCi0JTk9URTogVGhpcyBzY3JpcHQgYXNzdW1lcyB0aGF0IGxpbmtzIHRvIHNpYmxpbmcgSGVscCBwbHVnLWlucyBoYXZlIHNjb3BlPSJwZWVyIiwgb3RoZXJ3aXNlIHRoZQotCW91dHB1dCBkaXJlY3Rvcnkgc3RydWN0dXJlIHdpbGwgYmUgc2hpZnRlZCBpbmNvcnJlY3RseS4KLQkKLQlOT1RFOiBUaGlzIHNjcmlwdCBhc3N1bWVzIHRoYXQgeW91IGhhbmQgY29kZSB5b3VyIHBsdWdpbi54bWwgZmlsZSBpbiBteXBsdWdpbi54bWwuIFRoaXMgZmlsZQotCXdpbGwgYmUgY29waWVkIG92ZXIgdGhlIGdlbmVyYXRlZCBwbHVnaW4ueG1sIHdoaWNoIGlzIGN1cnJlbnRseSBub3QgYmVpbmcgZ2VuZXJhdGVkIGNvcnJlY3RseQotCWJ5IERJVEEtT1QuCi0JCi0JQ2hhbmdlTG9nOgotCTIwMDYtMDQtMDUgQXJ0aHVyIFJ5bWFuIDxyeW1hbkBjYS5pYm0uY29tPgotCS0gQ3JlYXRlZC4KLQotLS0+Ci08cHJvamVjdCBuYW1lPSJlY2xpcHNlaGVscCIgZGVmYXVsdD0iYWxsIj4KLQotCTxwcm9wZXJ0eSBuYW1lPSJkaXRhLm90LmRpciIgbG9jYXRpb249IkM6L0RJVEEtT1QxLjIuMiIgLz4KLQotCTxwYXRoIGlkPSJkb3N0LmNsYXNzLnBhdGgiPgotCQk8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZGl0YS5vdC5kaXJ9JHtmaWxlLnNlcGFyYXRvcn1saWIke2ZpbGUuc2VwYXJhdG9yfWRvc3QuamFyIiAvPgotCTwvcGF0aD4KLQotCTx0YXNrZGVmIG5hbWU9ImludGVncmF0ZSIgY2xhc3NuYW1lPSJvcmcuZGl0YS5kb3N0LnBsYXRmb3JtLkludGVncmF0b3JUYXNrIj4KLQkJPGNsYXNzcGF0aCByZWZpZD0iZG9zdC5jbGFzcy5wYXRoIiAvPgotCTwvdGFza2RlZj4KLQk8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iaW50ZWdyYXRlLCBlY2xpcHNlaGVscCI+Ci0JPC90YXJnZXQ+Ci0JPHRhcmdldCBuYW1lPSJpbnRlZ3JhdGUiPgotCQk8aW50ZWdyYXRlIGRpdGFkaXI9IiR7ZGl0YS5vdC5kaXJ9IiAvPgotCTwvdGFyZ2V0PgotCi0JPCEtLSByZXZpc2UgYmVsb3cgaGVyZSAtLT4KLQk8dGFyZ2V0IG5hbWU9ImVjbGlwc2VoZWxwIj4KLQkJPGFudCBhbnRmaWxlPSIke2RpdGEub3QuZGlyfSR7ZmlsZS5zZXBhcmF0b3J9Y29uZHVjdG9yLnhtbCIgdGFyZ2V0PSJpbml0IiBkaXI9IiR7ZGl0YS5vdC5kaXJ9Ij4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJhcmdzLmNvcHljc3MiIHZhbHVlPSJubyIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJhcmdzLmNzc3BhdGgiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYXJncy5lY2xpcHNlLnByb3ZpZGVyIiB2YWx1ZT0iRWNsaXBzZS5vcmciIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYXJncy5lY2xpcHNlLnZlcnNpb24iIHZhbHVlPSIxLjUuMCIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJhcmdzLmlucHV0IiBsb2NhdGlvbj0id3Njb25zdW1wdGlvbnRfdG9jLmRpdGFtYXAiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iY2xlYW4udGVtcCIgdmFsdWU9InRydWUiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iZGl0YS5leHRuYW1lIiB2YWx1ZT0iLmRpdGEiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iZGl0YS50ZW1wLmRpciIgbG9jYXRpb249InRlbXAiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0ib3V0cHV0LmRpciIgbG9jYXRpb249Ii4uIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9InRyYW5zdHlwZSIgdmFsdWU9ImVjbGlwc2VoZWxwIiAvPgotCQk8L2FudD4KLQkJPGNvcHkgZmlsZT0ibXlwbHVnaW4ueG1sIiB0b2ZpbGU9InBsdWdpbi54bWwiIG92ZXJ3cml0ZT0ieWVzIiAvPgotCTwvdGFyZ2V0PgotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDFhNGE2OS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlcjsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjMwMC5xdWFsaWZpZXIKLUJ1bmRsZS1WZW5kb3I6ICVwbHVnaW5Qcm92aWRlcgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvYWJvdXQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGIzNmUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvYnVpbGQucHJvcGVydGllcyBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlYmQ0MDIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgd3Njb25zdW1wdGlvbmJ1aWxkX3RvYy54bWwsXAotICAgICAgICAgICAgICAgd3Njb25zdW1wdGlvbnRfdG9jLnhtbCxcCi0gICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXJpbmRleC54bWwsXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBpbWFnZXMvLFwKLSAgICAgICAgICAgICAgIGNvbmNlcHRzLyouaHRtKixcCi0gICAgICAgICAgICAgICB0YXNrcy8qLmh0bSosXAotICAgICAgICAgICAgICAgcmVmLyouaHRtKixcCi0gICAgICAgICAgICAgICBpbmRleC8sXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvCi1zcmMuaW5jbHVkZXMgPSBidWlsZC5wcm9wZXJ0aWVzLFwKLQkJICAgICAgICoubWFwbGlzdCxcCi0gICAgICAgICAgICAgICAqLmRpdGFtYXAsXAotCQkgICAgICAgY29uY2VwdHMvKi5kaXRhLFwKLSAgICAgICAgICAgICAgIHRhc2tzLyouZGl0YSxcCi0gICAgICAgICAgICAgICByZWYvKi5kaXRhCi1iaW4uZXhjbHVkZXMgPSBEb2NCdWlsZC54bWwsXAotICAgICAgICAgICAgICAgbXlQbHVnaW4qLnhtbApkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvY29uY2VwdHMvY3VkZGkuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2NvbmNlcHRzL2N1ZGRpLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhYWJiMzguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvY29uY2VwdHMvY3VkZGkuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIGNvbmNlcHQgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgQ29uY2VwdC8vRU4iCi0gImNvbmNlcHQuZHRkIj4KLTxjb25jZXB0IGlkPSJjdWRkaSIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5Vbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKTwvdGl0bGU+Ci08dGl0bGVhbHRzPgotPHNlYXJjaHRpdGxlPlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpPC9zZWFyY2h0aXRsZT4KLTwvdGl0bGVhbHRzPgotPHNob3J0ZGVzYz5Vbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSBzcGVjaWZpY2F0aW9uCi1kZWZpbmVzIGEgd2F5IHRvIHB1Ymxpc2ggYW5kIGRpc2NvdmVyIGluZm9ybWF0aW9uIGFib3V0IFdlYiBzZXJ2aWNlcy48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0+VURESTwvaW5kZXh0ZXJtPjxpbmRleHRlcm0+VW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksCi1hbmQgSW50ZWdyYXRpb24gPC9pbmRleHRlcm0+PGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPlVEREk8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPGNvbmJvZHk+Ci08cD5VRERJIGhhcyB0d28gZnVuY3Rpb25zOiA8dWw+Ci08bGk+SXQgaXMgYSBTT0FQLWJhc2VkIHByb3RvY29sIHRoYXQgZGVmaW5lcyBob3cgY2xpZW50cyBjb21tdW5pY2F0ZSB3aXRoCi1VRERJIHJlZ2lzdHJpZXMuPC9saT4KLTxsaT5JdCBpcyBhIHBhcnRpY3VsYXIgc2V0IG9mIGdsb2JhbCByZXBsaWNhdGVkIHJlZ2lzdHJpZXMuPC9saT4KLTwvdWw+PC9wPgotPHA+VURESSBpbmNsdWRlcyBhbiBYTUwgc2NoZW1hIGZvciBTT0FQIG1lc3NhZ2VzIHRoYXQgZGVmaW5lcyBhIHNldCBvZiBkb2N1bWVudHMKLXRvIGRlc2NyaWJlIGJ1c2luZXNzIGFuZCBzZXJ2aWNlcyBpbmZvcm1hdGlvbiwgYSBjb21tb24gc2V0IG9mIEFQSXMgZm9yIHF1ZXJ5aW5nCi1hbmQgcHVibGlzaGluZyBpbmZvcm1hdGlvbiB0byB0aGUgZGlyZWN0b3JpZXMsIGFuZCBhbiBBUEkgZm9yIHJlcGxpY2F0aW5nCi1kaXJlY3RvcnkgZW50cmllcyBiZXR3ZWVuIHBlZXIgVURESSBub2Rlcy48L3A+Ci08cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBVRERJIHJlZmVyIHRvICA8eHJlZiBmb3JtYXQ9Imh0bWwiIGhyZWY9Imh0dHA6Ly93d3cudWRkaS5vcmciCi1zY29wZT0iZXh0ZXJuYWwiPnd3dy51ZGRpLm9yZzwveHJlZj48L3A+Ci08c2VjdGlvbj48dGl0bGU+VURESSByZWdpc3RyaWVzPC90aXRsZT48cD5VRERJIG1hbmFnZXMgdGhlIGRpc2NvdmVyeSBvZiBXZWIKLXNlcnZpY2VzIGJ5IHJlbHlpbmcgb24gYSBkaXN0cmlidXRlZCByZWdpc3RyeSBvZiBidXNpbmVzc2VzIGFuZCB0aGVpciBzZXJ2aWNlCi1kZXNjcmlwdGlvbnMgaW1wbGVtZW50ZWQgaW4gYSBjb21tb24gWE1MIGZvcm1hdC4gQmVmb3JlIHlvdSBjYW4gcHVibGlzaCB5b3VyCi1idXNpbmVzcyBlbnRpdHkgYW5kIFdlYiBzZXJ2aWNlIHRvIGEgcHVibGljIHJlZ2lzdHJ5LCB5b3UgbXVzdCBmaXJzdCByZWdpc3RlcgoteW91ciBidXNpbmVzcyBlbnRpdHkgd2l0aCBhIFVEREkgcmVnaXN0cnkuPC9wPjxwPlVEREkgcmVnaXN0cmllcyBjb21lIGluIHR3bwotZm9ybXM6IHB1YmxpYyBhbmQgcHJpdmF0ZS4mbmJzcDsgQm90aCB0eXBlcyBjb21wbHkgdG8gdGhlIHNhbWUgc3BlY2lmaWNhdGlvbnMuJm5ic3A7Ci1BIHByaXZhdGUgcmVnaXN0cnkgZW5hYmxlcyB5b3UgdG8gcHVibGlzaCBhbmQgdGVzdCB5b3VyIGludGVybmFsIGUtYnVzaW5lc3MKLWFwcGxpY2F0aW9ucyBpbiZuYnNwO2Egc2VjdXJlLCBwcml2YXRlIGVudmlyb25tZW50LjwvcD48cD5BIHB1YmxpYyByZWdpc3RyeQotaXMgYSBjb2xsZWN0aW9uIG9mIHBlZXIgZGlyZWN0b3JpZXMgdGhhdCBjb250YWluIGluZm9ybWF0aW9uIGFib3V0IGJ1c2luZXNzZXMKLWFuZCBzZXJ2aWNlcy4gSXQgbG9jYXRlcyBzZXJ2aWNlcyB0aGF0IGFyZSByZWdpc3RlcmVkIGF0IG9uZSBvZiBpdHMgcGVlciBub2RlcwotYW5kIGZhY2lsaXRhdGVzIHRoZSBkaXNjb3Zlcnkgb2YgcHVibGlzaGVkIFdlYiBzZXJ2aWNlcy4gRGF0YSBpcyByZXBsaWNhdGVkCi1hdCBlYWNoIG9mIHRoZSByZWdpc3RyaWVzIG9uIGEgcmVndWxhciBiYXNpcy4gVGhpcyBlbnN1cmVzIGNvbnNpc3RlbmN5IGluCi1zZXJ2aWNlIGRlc2NyaXB0aW9uIGZvcm1hdHMgYW5kIG1ha2VzIGl0IGVhc3kgdG8gdHJhY2sgY2hhbmdlcyBhcyB0aGV5IG9jY3VyLiA8dG0KLXRtY2xhc3M9ImlibSIgdG1vd25lcj0iSUJNIENvcnBvcmF0aW9uIiB0bXR5cGU9InJlZyIgdHJhZGVtYXJrPSJJQk0iPklCTTwvdG0+IG1haW50YWlucwotdHdvIHB1YmxpYyByZWdpc3RyaWVzIGNhbGxlZCB0aGUgPHRtIHRtY2xhc3M9ImlibSIgdG1vd25lcj0iSUJNIENvcnBvcmF0aW9uIgotdG10eXBlPSJyZWciIHRyYWRlbWFyaz0iSUJNIj5JQk08L3RtPiBVRERJIEJ1c2luZXNzIFJlZ2lzdHJ5IGFuZCB0aGUgPHRtIHRtY2xhc3M9ImlibSIKLXRtb3duZXI9IklCTSBDb3Jwb3JhdGlvbiIgdG10eXBlPSJyZWciIHRyYWRlbWFyaz0iSUJNIj5JQk08L3RtPiBVRERJIFRlc3QKLVJlZ2lzdHJ5LiBUaGUgPHRtIHRtY2xhc3M9ImlibSIgdG1vd25lcj0iSUJNIENvcnBvcmF0aW9uIiB0bXR5cGU9InJlZyIgdHJhZGVtYXJrPSJJQk0iPklCTTwvdG0+IFVEREkKLVRlc3QgUmVnaXN0cnkgYWxsb3dzIHlvdSB0byBkZXZlbG9wIHlvdXIgV2ViIHNlcnZpY2UgYW5kIGV4cGVyaWVuY2UgdGhlIFVEREkKLXJlZ2lzdHJhdGlvbiBwcm9jZXNzIHdpdGhvdXQgcGxhY2luZyB5b3VyIFdlYiBzZXJ2aWNlIGluIGFuIG9mZmljaWFsIHJlZ2lzdHJ5LiZuYnNwOwotVXNlIHRoZSA8dG0gdG1jbGFzcz0iaWJtIiB0bW93bmVyPSJJQk0gQ29ycG9yYXRpb24iIHRtdHlwZT0icmVnIiB0cmFkZW1hcms9IklCTSI+SUJNPC90bT4gVURESQotVGVzdCBSZWdpc3RyeSB0byBleHBlcmltZW50IHdpdGggVURESSwgYW5kIHRvIHRlc3QgYW5kIHZhbGlkYXRlIHlvdXIgV2ViIHNlcnZpY2UuJm5ic3A7Ci1Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgSUJNJ3MgcHVibGljIHJlZ2lzdHJpZXMsIHJlZmVyIHRvICA8eHJlZiBmb3JtYXQ9Imh0bWwiCi1ocmVmPSJodHRwOi8vdWRkaS5pYm0uY29tIiBzY29wZT0iZXh0ZXJuYWwiPmh0dHA6Ly91ZGRpLmlibS5jb208L3hyZWY+IEZvcgotYSBsaXN0IG9mIHB1YmxpYyByZWdpc3RyaWVzLCByZWZlciB0byAgPHhyZWYgaHJlZj0iaHR0cDovL3d3dy51ZGRpLm9yZy9yZWdpc3Rlci5odG1sIgotc2NvcGU9ImV4dGVybmFsIj5odHRwOi8vd3d3LnVkZGkub3JnL3JlZ2lzdGVyLmh0bWw8L3hyZWY+PC9wPjxwPkEgcHJpdmF0ZQotcmVnaXN0cnkgYWxsb3dzIHlvdSB0byBwdWJsaXNoIGFuZCB0ZXN0IHlvdXIgaW50ZXJuYWwgYXBwbGljYXRpb25zIGluIGEgc2VjdXJlLAotcHJpdmF0ZSBlbnZpcm9ubWVudC48L3A+PHA+VGhlIFVEREkgQnVzaW5lc3MgUmVnaXN0cnkgYWN0cyBhcyBhIEIyQiBkaXJlY3RvcnkKLWxpbmtpbmcgbWFya2V0cGxhY2VzLCBidXllcnMsIGFuZCBzZWxsZXJzLiBUaGUgaW5mb3JtYXRpb24gcHJvdmlkZWQgaW4gdGhlCi1yZWdpc3RyeSBjb25zaXN0cyBvZiB0aHJlZSBjb21wb25lbnRzOiB3aGl0ZSBwYWdlcywgeWVsbG93IHBhZ2VzLCBhbmQgZ3JlZW4KLXBhZ2VzLiBXaGl0ZSBwYWdlcyBpbmNsdWRlIHRoZSBidXNpbmVzcyBuYW1lLCBjb250YWN0IGluZm9ybWF0aW9uLCBhbmQgYSB0ZXh0Ci1kZXNjcmlwdGlvbiBvZiB0aGUgYnVzaW5lc3MncyBzZXJ2aWNlcy4gWWVsbG93IHBhZ2VzIGluY2x1ZGUgaW5kdXN0cmlhbCBjYXRlZ29yaXphdGlvbnMKLWJhc2VkIG9uIHN0YW5kYXJkIHRheG9ub21pZXMgc3VjaCBhcyBOQUlDUywgSVNPIDMxNjYsIGFuZCBVTlNQU0MuIEdyZWVuIHBhZ2VzCi1pbmNsdWRlIHJlZmVyZW5jZXMgdG8gc3BlY2lmaWNhdGlvbnMgZm9yIFdlYiBzZXJ2aWNlcyBhbmQgcG9pbnRlcnMgdG8gdmFyaW91cwotZmlsZSBhbmQgVVJMLWJhc2VkIGRpc2NvdmVyeSBtZWNoYW5pc21zLiBUaGlzIG1ha2VzIGl0IGVhc3kgZm9yIGJ1c2luZXNzZXMKLXRvIGludGVncmF0ZSBhY3Jvc3MgbWFya2V0cGxhY2VzLiBCZWNhdXNlIGl0IGlzIHJlZ2lzdGVyZWQsIGluZm9ybWF0aW9uIGlzCi1tYWRlIGF2YWlsYWJsZSBhY3Jvc3MgYWxsIGFwcGxpY2F0aW9ucy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gTkFJQ1MgcmVmZXIKLXRvICA8eHJlZiBmb3JtYXQ9Imh0bWwiIGhyZWY9Imh0dHA6Ly93d3cubmFpY3MuY29tIiBzY29wZT0iZXh0ZXJuYWwiPnd3dy5uYWljcy5jb208L3hyZWY+IEZvcgotbW9yZSBpbmZvcm1hdGlvbiBvbiBVTlNQU0MgcmVmZXIgdG8gIDx4cmVmIGZvcm1hdD0iaHRtbCIgaHJlZj0iaHR0cDovL3d3dy51bnNwc2Mub3JnIgotc2NvcGU9ImV4dGVybmFsIj53d3cudW5zcHNjLm9yZzwveHJlZj4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gSVNPIDMxNjYgcmVmZXIKLXRvICA8eHJlZiBmb3JtYXQ9Imh0bWwiIGhyZWY9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vZW4vcHJvZHMtc2VydmljZXMvaXNvMzE2Nm1hL2luZGV4Lmh0bWwiCi1zY29wZT0iZXh0ZXJuYWwiPmh0dHA6Ly93d3cuaXNvLm9yZy9pc28vZW4vcHJvZHMtc2VydmljZXMvaXNvMzE2Nm1hL2luZGV4Lmh0bWw8L3hyZWY+PC9wPjxwPkJ1c2luZXNzZXMKLXBvcHVsYXRlIHRoZSByZWdpc3RyeSB3aXRoIGRlc2NyaXB0aW9ucyBvZiB0aGUgc2VydmljZXMgdGhhdCB0aGV5IHN1cHBvcnQuCi1VRERJIGFzc2lnbnMgYSB1bmlxdWUgaWRlbnRpZmllciB0byBlYWNoIHNlcnZpY2UgZGVzY3JpcHRpb24gYW5kIGJ1c2luZXNzCi1yZWdpc3RyYXRpb24uIFRoZXNlIGJlY29tZSB0aGUgc2VydmljZSBhbmQgYnVzaW5lc3Mga2V5cyByZXNwZWN0aXZlbHkuIFNlYXJjaAotZW5naW5lcywgYW5kIGFwcGxpY2F0aW9ucyBxdWVyeSB0aGUgcmVnaXN0cnkgdG8gZGlzY292ZXIgc2VydmljZXMuIFVEREkgc2VydmVycwotYXJlIGEgZGlyZWN0b3J5IG9mIGF2YWlsYWJsZSBzZXJ2aWNlcyBhbmQgc2VydmljZSBwcm92aWRlcnMuPC9wPjwvc2VjdGlvbj4KLTwvY29uYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iY3dzZGx1ZC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaWx1ZC5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+UmVsYXRpb25zaGlwIGJldHdlZW4gVURESSBhbmQgV1NJTDwvbGlua3RleHQ+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+Ci08bGluayBocmVmPSIuLi90YXNrcy90dWRkaWV4cC5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFJlZmVyZW5jZTwvdGl0bGU+Ci08bGluayBocmVmPSIuLi9yZWYvcnVkZGkuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvY29uY2VwdD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2NvbmNlcHRzL2N1ZGRpLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9jb25jZXB0cy9jdWRkaS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjEyZTQwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2NvbmNlcHRzL2N1ZGRpLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMjAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDciIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9ImNvbmNlcHQiIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iVW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iVW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIGEgd2F5IHRvIHB1Ymxpc2ggYW5kIGRpc2NvdmVyIGluZm9ybWF0aW9uIGFib3V0IFdlYiBzZXJ2aWNlcy4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIGEgd2F5IHRvIHB1Ymxpc2ggYW5kIGRpc2NvdmVyIGluZm9ybWF0aW9uIGFib3V0IFdlYiBzZXJ2aWNlcy4iIC8+Ci08bWV0YSBjb250ZW50PSJVRERJLCBVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uLCBXZWIgc2VydmljZXMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJVRERJLCBVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uLCBXZWIgc2VydmljZXMiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9ImN3c2RsdWQuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lsdWQuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdGFza3MvdHVkZGlleHAuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vcmVmL3J1ZGRpLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0iY3VkZGkiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5Vbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0iY3VkZGkiPjxhIG5hbWU9ImN1ZGRpIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5Vbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKTwvaDE+Ci0KLQotCi0KLTxkaXY+PHA+VW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkgc3BlY2lmaWNhdGlvbgotZGVmaW5lcyBhIHdheSB0byBwdWJsaXNoIGFuZCBkaXNjb3ZlciBpbmZvcm1hdGlvbiBhYm91dCBXZWIgc2VydmljZXMuPC9wPgotCi08ZGl2IGNsYXNzPSJwIj5VRERJIGhhcyB0d28gZnVuY3Rpb25zOiA8dWw+Ci08bGk+SXQgaXMgYSBTT0FQLWJhc2VkIHByb3RvY29sIHRoYXQgZGVmaW5lcyBob3cgY2xpZW50cyBjb21tdW5pY2F0ZSB3aXRoCi1VRERJIHJlZ2lzdHJpZXMuPC9saT4KLQotPGxpPkl0IGlzIGEgcGFydGljdWxhciBzZXQgb2YgZ2xvYmFsIHJlcGxpY2F0ZWQgcmVnaXN0cmllcy48L2xpPgotCi08L3VsPgotPC9kaXY+Ci0KLTxwPlVEREkgaW5jbHVkZXMgYW4gWE1MIHNjaGVtYSBmb3IgU09BUCBtZXNzYWdlcyB0aGF0IGRlZmluZXMgYSBzZXQgb2YgZG9jdW1lbnRzCi10byBkZXNjcmliZSBidXNpbmVzcyBhbmQgc2VydmljZXMgaW5mb3JtYXRpb24sIGEgY29tbW9uIHNldCBvZiBBUElzIGZvciBxdWVyeWluZwotYW5kIHB1Ymxpc2hpbmcgaW5mb3JtYXRpb24gdG8gdGhlIGRpcmVjdG9yaWVzLCBhbmQgYW4gQVBJIGZvciByZXBsaWNhdGluZwotZGlyZWN0b3J5IGVudHJpZXMgYmV0d2VlbiBwZWVyIFVEREkgbm9kZXMuPC9wPgotCi08cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBVRERJIHJlZmVyIHRvICA8YSBocmVmPSJodHRwOi8vd3d3LnVkZGkub3JnIiB0YXJnZXQ9Il9ibGFuayI+d3d3LnVkZGkub3JnPC9hPjwvcD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PGg0IGNsYXNzPSJzZWN0aW9udGl0bGUiPlVEREkgcmVnaXN0cmllczwvaDQ+PHA+VURESSBtYW5hZ2VzIHRoZSBkaXNjb3Zlcnkgb2YgV2ViCi1zZXJ2aWNlcyBieSByZWx5aW5nIG9uIGEgZGlzdHJpYnV0ZWQgcmVnaXN0cnkgb2YgYnVzaW5lc3NlcyBhbmQgdGhlaXIgc2VydmljZQotZGVzY3JpcHRpb25zIGltcGxlbWVudGVkIGluIGEgY29tbW9uIFhNTCBmb3JtYXQuIEJlZm9yZSB5b3UgY2FuIHB1Ymxpc2ggeW91cgotYnVzaW5lc3MgZW50aXR5IGFuZCBXZWIgc2VydmljZSB0byBhIHB1YmxpYyByZWdpc3RyeSwgeW91IG11c3QgZmlyc3QgcmVnaXN0ZXIKLXlvdXIgYnVzaW5lc3MgZW50aXR5IHdpdGggYSBVRERJIHJlZ2lzdHJ5LjwvcD4KLTxwPlVEREkgcmVnaXN0cmllcyBjb21lIGluIHR3bwotZm9ybXM6IHB1YmxpYyBhbmQgcHJpdmF0ZS7CoCBCb3RoIHR5cGVzIGNvbXBseSB0byB0aGUgc2FtZSBzcGVjaWZpY2F0aW9ucy7CoAotQSBwcml2YXRlIHJlZ2lzdHJ5IGVuYWJsZXMgeW91IHRvIHB1Ymxpc2ggYW5kIHRlc3QgeW91ciBpbnRlcm5hbCBlLWJ1c2luZXNzCi1hcHBsaWNhdGlvbnMgaW7CoGEgc2VjdXJlLCBwcml2YXRlIGVudmlyb25tZW50LjwvcD4KLTxwPkEgcHVibGljIHJlZ2lzdHJ5Ci1pcyBhIGNvbGxlY3Rpb24gb2YgcGVlciBkaXJlY3RvcmllcyB0aGF0IGNvbnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgYnVzaW5lc3NlcwotYW5kIHNlcnZpY2VzLiBJdCBsb2NhdGVzIHNlcnZpY2VzIHRoYXQgYXJlIHJlZ2lzdGVyZWQgYXQgb25lIG9mIGl0cyBwZWVyIG5vZGVzCi1hbmQgZmFjaWxpdGF0ZXMgdGhlIGRpc2NvdmVyeSBvZiBwdWJsaXNoZWQgV2ViIHNlcnZpY2VzLiBEYXRhIGlzIHJlcGxpY2F0ZWQKLWF0IGVhY2ggb2YgdGhlIHJlZ2lzdHJpZXMgb24gYSByZWd1bGFyIGJhc2lzLiBUaGlzIGVuc3VyZXMgY29uc2lzdGVuY3kgaW4KLXNlcnZpY2UgZGVzY3JpcHRpb24gZm9ybWF0cyBhbmQgbWFrZXMgaXQgZWFzeSB0byB0cmFjayBjaGFuZ2VzIGFzIHRoZXkgb2NjdXIuIElCTTxzdXA+wq48L3N1cD4gbWFpbnRhaW5zCi10d28gcHVibGljIHJlZ2lzdHJpZXMgY2FsbGVkIHRoZSBJQk0gVURESSBCdXNpbmVzcyBSZWdpc3RyeSBhbmQgdGhlIElCTSBVRERJIFRlc3QKLVJlZ2lzdHJ5LiBUaGUgSUJNIFVEREkKLVRlc3QgUmVnaXN0cnkgYWxsb3dzIHlvdSB0byBkZXZlbG9wIHlvdXIgV2ViIHNlcnZpY2UgYW5kIGV4cGVyaWVuY2UgdGhlIFVEREkKLXJlZ2lzdHJhdGlvbiBwcm9jZXNzIHdpdGhvdXQgcGxhY2luZyB5b3VyIFdlYiBzZXJ2aWNlIGluIGFuIG9mZmljaWFsIHJlZ2lzdHJ5LsKgCi1Vc2UgdGhlIElCTSBVRERJCi1UZXN0IFJlZ2lzdHJ5IHRvIGV4cGVyaW1lbnQgd2l0aCBVRERJLCBhbmQgdG8gdGVzdCBhbmQgdmFsaWRhdGUgeW91ciBXZWIgc2VydmljZS7CoAotRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIElCTSdzIHB1YmxpYyByZWdpc3RyaWVzLCByZWZlciB0byAgPGEgaHJlZj0iaHR0cDovL3VkZGkuaWJtLmNvbSIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly91ZGRpLmlibS5jb208L2E+IEZvcgotYSBsaXN0IG9mIHB1YmxpYyByZWdpc3RyaWVzLCByZWZlciB0byAgPGEgaHJlZj0iaHR0cDovL3d3dy51ZGRpLm9yZy9yZWdpc3Rlci5odG1sIiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL3d3dy51ZGRpLm9yZy9yZWdpc3Rlci5odG1sPC9hPjwvcD4KLTxwPkEgcHJpdmF0ZQotcmVnaXN0cnkgYWxsb3dzIHlvdSB0byBwdWJsaXNoIGFuZCB0ZXN0IHlvdXIgaW50ZXJuYWwgYXBwbGljYXRpb25zIGluIGEgc2VjdXJlLAotcHJpdmF0ZSBlbnZpcm9ubWVudC48L3A+Ci08cD5UaGUgVURESSBCdXNpbmVzcyBSZWdpc3RyeSBhY3RzIGFzIGEgQjJCIGRpcmVjdG9yeQotbGlua2luZyBtYXJrZXRwbGFjZXMsIGJ1eWVycywgYW5kIHNlbGxlcnMuIFRoZSBpbmZvcm1hdGlvbiBwcm92aWRlZCBpbiB0aGUKLXJlZ2lzdHJ5IGNvbnNpc3RzIG9mIHRocmVlIGNvbXBvbmVudHM6IHdoaXRlIHBhZ2VzLCB5ZWxsb3cgcGFnZXMsIGFuZCBncmVlbgotcGFnZXMuIFdoaXRlIHBhZ2VzIGluY2x1ZGUgdGhlIGJ1c2luZXNzIG5hbWUsIGNvbnRhY3QgaW5mb3JtYXRpb24sIGFuZCBhIHRleHQKLWRlc2NyaXB0aW9uIG9mIHRoZSBidXNpbmVzcydzIHNlcnZpY2VzLiBZZWxsb3cgcGFnZXMgaW5jbHVkZSBpbmR1c3RyaWFsIGNhdGVnb3JpemF0aW9ucwotYmFzZWQgb24gc3RhbmRhcmQgdGF4b25vbWllcyBzdWNoIGFzIE5BSUNTLCBJU08gMzE2NiwgYW5kIFVOU1BTQy4gR3JlZW4gcGFnZXMKLWluY2x1ZGUgcmVmZXJlbmNlcyB0byBzcGVjaWZpY2F0aW9ucyBmb3IgV2ViIHNlcnZpY2VzIGFuZCBwb2ludGVycyB0byB2YXJpb3VzCi1maWxlIGFuZCBVUkwtYmFzZWQgZGlzY292ZXJ5IG1lY2hhbmlzbXMuIFRoaXMgbWFrZXMgaXQgZWFzeSBmb3IgYnVzaW5lc3NlcwotdG8gaW50ZWdyYXRlIGFjcm9zcyBtYXJrZXRwbGFjZXMuIEJlY2F1c2UgaXQgaXMgcmVnaXN0ZXJlZCwgaW5mb3JtYXRpb24gaXMKLW1hZGUgYXZhaWxhYmxlIGFjcm9zcyBhbGwgYXBwbGljYXRpb25zLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBOQUlDUyByZWZlcgotdG8gIDxhIGhyZWY9Imh0dHA6Ly93d3cubmFpY3MuY29tIiB0YXJnZXQ9Il9ibGFuayI+d3d3Lm5haWNzLmNvbTwvYT4gRm9yCi1tb3JlIGluZm9ybWF0aW9uIG9uIFVOU1BTQyByZWZlciB0byAgPGEgaHJlZj0iaHR0cDovL3d3dy51bnNwc2Mub3JnIiB0YXJnZXQ9Il9ibGFuayI+d3d3LnVuc3BzYy5vcmc8L2E+IEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIElTTyAzMTY2IHJlZmVyCi10byAgPGEgaHJlZj0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9lbi9wcm9kcy1zZXJ2aWNlcy9pc28zMTY2bWEvaW5kZXguaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly93d3cuaXNvLm9yZy9pc28vZW4vcHJvZHMtc2VydmljZXMvaXNvMzE2Nm1hL2luZGV4Lmh0bWw8L2E+PC9wPgotPHA+QnVzaW5lc3NlcwotcG9wdWxhdGUgdGhlIHJlZ2lzdHJ5IHdpdGggZGVzY3JpcHRpb25zIG9mIHRoZSBzZXJ2aWNlcyB0aGF0IHRoZXkgc3VwcG9ydC4KLVVEREkgYXNzaWducyBhIHVuaXF1ZSBpZGVudGlmaWVyIHRvIGVhY2ggc2VydmljZSBkZXNjcmlwdGlvbiBhbmQgYnVzaW5lc3MKLXJlZ2lzdHJhdGlvbi4gVGhlc2UgYmVjb21lIHRoZSBzZXJ2aWNlIGFuZCBidXNpbmVzcyBrZXlzIHJlc3BlY3RpdmVseS4gU2VhcmNoCi1lbmdpbmVzLCBhbmQgYXBwbGljYXRpb25zIHF1ZXJ5IHRoZSByZWdpc3RyeSB0byBkaXNjb3ZlciBzZXJ2aWNlcy4gVURESSBzZXJ2ZXJzCi1hcmUgYSBkaXJlY3Rvcnkgb2YgYXZhaWxhYmxlIHNlcnZpY2VzIGFuZCBzZXJ2aWNlIHByb3ZpZGVycy48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIENvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIj5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9ImN3c2RsdWQuaHRtbCIgdGl0bGU9IlRoZSBVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSBzcGVjaWZpY2F0aW9uIGRlZmluZXMgYSB3YXkgdG8gcHVibGlzaCBhbmQgZGlzY292ZXIgaW5mb3JtYXRpb24gYWJvdXQgV2ViIHNlcnZpY2VzLiBVRERJIGhhcyB0d28gZnVuY3Rpb25zOiAoMSkgaXQgaXMgYSBTT0FQLWJhc2VkIHByb3RvY29sIHRoYXQgZGVmaW5lcyBob3cgVURESSBjbGllbnRzIGNvbW11bmljYXRlIHdpdGggcmVnaXN0cmllcywgYW5kICgyKSBpdCBpcyBhIHBhcnRpY3VsYXIgc2V0IG9mIGdsb2JhbGx5IHJlcGxpY2F0ZWQgcmVnaXN0cmllcy4iPlJlbGF0aW9uc2hpcCBiZXR3ZWVuIFVEREkgYW5kIFdTREw8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbHVkLmh0bWwiPlJlbGF0aW9uc2hpcCBiZXR3ZWVuIFVEREkgYW5kIFdTSUw8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgVGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi90YXNrcy90dWRkaWV4cC5odG1sIiB0aXRsZT0iVGhyb3VnaCBVRERJIGFuZCBXU0lMLCBvdGhlciBhcHBsaWNhdGlvbnMgY2FuIGRpc2NvdmVyIFdTREwgZG9jdW1lbnRzIGFuZCBiaW5kIHdpdGggdGhlbSB0byBleGVjdXRlIHRyYW5zYWN0aW9ucyBvciBwZXJmb3JtIG90aGVyIGJ1c2luZXNzIHByb2Nlc3Nlcy4iPlB1Ymxpc2hpbmcgV2ViIHNlcnZpY2VzIGFuZCBidXNpbmVzcyBlbnRpdGllczwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBSZWZlcmVuY2U8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi9yZWYvcnVkZGkuaHRtbCIgdGl0bGU9Ik9uY2UgeW91IGhhdmUgcmVnaXN0ZXJlZCBhbmQgbG9nZ2VkIGluIHRvIHRoZSBVRERJIHJlZ2lzdHJ5IHRoYXQgeW91IHdhbnQgdG8gdXNlLCB5b3UgY2FuIHJlZ2lzdGVyIHlvdXIgV2ViIHNlcnZpY2UuIFJlZ2lzdHJhdGlvbiBvZiBhIHNlcnZpY2UgaW52b2x2ZXMgZm91ciBjb3JlIGRhdGEgc3RydWN0dXJlIHR5cGVzOiBidXNpbmVzcyBpbmZvcm1hdGlvbiwgc2VydmljZSBpbmZvcm1hdGlvbiwgYmluZGluZyBpbmZvcm1hdGlvbiwgYW5kIGluZm9ybWF0aW9uIGRlc2NyaWJpbmcgdGhlIHNwZWNpZmljYXRpb25zIGZvciBzZXJ2aWNlcy4gVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGRhdGEgdHlwZXMgaXMgZGVzY3JpYmVkIGluIEZpZ3VyZSAxLiI+RGF0YSBzdHJ1Y3R1cmUgdHlwZXMgKFVEREkgcmVnaXN0cnkpPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9jb25jZXB0cy9jd3NkbHVkLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9jb25jZXB0cy9jd3NkbHVkLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlY2JmNDUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGx1ZC5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIGNvbmNlcHQgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgQ29uY2VwdC8vRU4iCi0gImNvbmNlcHQuZHRkIj4KLTxjb25jZXB0IGlkPSJjd3NkbHVkIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPlJlbGF0aW9uc2hpcCBiZXR3ZWVuIFVEREkgYW5kIFdTREw8L3RpdGxlPgotPHNob3J0ZGVzYz5UaGUgVW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkgc3BlY2lmaWNhdGlvbgotZGVmaW5lcyBhIHdheSB0byBwdWJsaXNoIGFuZCBkaXNjb3ZlciBpbmZvcm1hdGlvbiBhYm91dCBXZWIgc2VydmljZXMuIFVEREkKLWhhcyB0d28gZnVuY3Rpb25zOiAoMSkgaXQgaXMgYSBTT0FQLWJhc2VkIHByb3RvY29sIHRoYXQgZGVmaW5lcyBob3cgVURESSBjbGllbnRzCi1jb21tdW5pY2F0ZSB3aXRoIHJlZ2lzdHJpZXMsIGFuZCAoMikgaXQgaXMgYSBwYXJ0aWN1bGFyIHNldCBvZiBnbG9iYWxseSByZXBsaWNhdGVkCi1yZWdpc3RyaWVzLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5VRERJPGluZGV4dGVybT5yZWxhdGlvbnNoaXAgd2l0aCBXU0RMPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPldTREw8aW5kZXh0ZXJtPnJlbGF0aW9uc2hpcCB3aXRoIFVEREk8L2luZGV4dGVybT48L2luZGV4dGVybT48L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTxjb25ib2R5PgotPHA+UmVnaXN0ZXJpbmcgYSBzZXJ2aWNlIGludm9sdmVzIGZvdXIgY29yZSBkYXRhIHN0cnVjdHVyZSB0eXBlczo8L3A+Ci08dWw+Ci08bGk+VGhlICA8c3lzdGVtb3V0cHV0PmJ1c2luZXNzRW50aXR5PC9zeXN0ZW1vdXRwdXQ+IGRhdGEgdHlwZSBjb250YWlucyBpbmZvcm1hdGlvbgotYWJvdXQgdGhlIGJ1c2luZXNzIHRoYXQgaGFzIGEgcHVibGlzaGVkIHNlcnZpY2UuPC9saT4KLTxsaT5UaGUgIDxzeXN0ZW1vdXRwdXQ+YnVzaW5lc3NTZXJ2aWNlPC9zeXN0ZW1vdXRwdXQ+IGRhdGEgdHlwZSBpcyBhIGRlc2NyaXB0aW9uCi1vZiBhIFdlYiBzZXJ2aWNlLjwvbGk+Ci08bGk+VGhlICA8c3lzdGVtb3V0cHV0PmJpbmRpbmdUZW1wbGF0ZTwvc3lzdGVtb3V0cHV0PiBkYXRhIHR5cGUgY29udGFpbnMgdGVjaG5pY2FsCi1pbmZvcm1hdGlvbiBmb3IgZGV0ZXJtaW5pbmcgdGhlIGVudHJ5IHBvaW50IGFuZCBjb25zdHJ1Y3Rpb24gc3BlY2lmaWNhdGlvbnMKLWZvciBpbnZva2luZyBhIFdlYiBzZXJ2aWNlLjwvbGk+Ci08bGk+VGhlICA8c3lzdGVtb3V0cHV0PnRNb2RlbDwvc3lzdGVtb3V0cHV0PiBkYXRhIHR5cGUgcHJvdmlkZXMgYSByZWZlcmVuY2UKLXN5c3RlbSB0byBhc3Npc3QgaW4gdGhlIGRpc2NvdmVyeSBvZiBXZWIgc2VydmljZXMgYW5kIGFjdHMgYXMgYSB0ZWNobmljYWwKLXNwZWNpZmljYXRpb24gZm9yIGEgV2ViIHNlcnZpY2UuPC9saT4KLTwvdWw+Ci08cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgVURESSBkYXRhIHR5cGVzLCByZWZlciB0byB0aGUgcmVsYXRlZCByZWZlcmVuY2UKLXRvcGljcyBhdCB0aGUgZW5kIG9mIHRoaXMgdG9waWMuPC9wPgotPHA+V2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKSBpcyBhbiBYTUwtYmFzZWQgc3RhbmRhcmQgc3BlY2lmaWNhdGlvbgotZm9yIGRlc2NyaWJpbmcgV2ViIHNlcnZpY2VzLiBXU0RMIGRlZmluZXMgYW4gWE1MIGZvcm1hdCBmb3IgZGVzY3JpYmluZyBuZXR3b3JrCi1zZXJ2aWNlcyBhcyBhIHNldCBvZiBlbmRwb2ludHMgdGhhdCBvcGVyYXRlIG9uIG1lc3NhZ2VzIHRoYXQgY29udGFpbiBlaXRoZXIKLWRvY3VtZW50LW9yaWVudGVkIG9yIHByb2NlZHVyZS1vcmllbnRlZCBpbmZvcm1hdGlvbi48L3A+Ci08cD5UaGUgV1NETCBzZXJ2aWNlIGRlc2NyaXB0aW9uIGNhbiBiZSBzdHJ1Y3R1cmVkIGluIG1hbnkgd2F5cy4gSG93ZXZlciwgdG8KLWFzc2lzdCB3aXRoIHB1Ymxpc2hpbmcgYW5kIGZpbmRpbmcgV1NETCBzZXJ2aWNlIGRlc2NyaXB0aW9ucyBpbiBhIFVEREkgcmVnaXN0cnksCi1XU0RMIGRvY3VtZW50cyBjb25zaXN0IG9mIHR3byBtYWluIHBhcnRzOiZuYnNwOzwvcD4KLTx1bD4KLTxsaT5UaGUgc2VydmljZSBpbnRlcmZhY2UgZGVmaW5pdGlvbiBkZXNjcmliZXMgdGhlIGFic3RyYWN0IHR5cGUgaW50ZXJmYWNlCi1hbmQgaXRzIHByb3RvY29sIGJpbmRpbmcsIGtub3duIGFzIHRoZSBXU0RMIGJpbmRpbmcgZG9jdW1lbnQ8L2xpPgotPGxpPlRoZSBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIGRlZmluaXRpb24gZGVzY3JpYmVzIHRoZSBzZXJ2aWNlIGFjY2VzcyBsb2NhdGlvbgotaW5mb3JtYXRpb24sIGtub3duIGFzIHRoZSBXU0RMIHNlcnZpY2UgZG9jdW1lbnQ8L2xpPgotPC91bD4KLTxwPldoZW4gY3JlYXRpbmcgV2ViIHNlcnZpY2VzIHdpdGggdGhlIEFwYWNoZSBBeGlzIHJ1bi10aW1lIGVudmlyb25tZW50LCB0aGUKLVdlYiBzZXJ2aWNlcyB0b29scyBjcmVhdGUgYSBzaW5nbGUgV1NETCBkb2N1bWVudCB3aGVuIGdlbmVyYXRpbmcgV2ViIHNlcnZpY2VzCi1mcm9tIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIiB0bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBiZWFucwotb3IgRUpCcy4gVGhpcyBXU0RMIGRvY3VtZW50IGNvbnRhaW5zIGJvdGggdGhlIHNlcnZpY2UgaW50ZXJmYWNlIGFuZCBpbXBsZW1lbnRhdGlvbgotZG9jdW1lbnRzLjwvcD4KLTxwPkEgc2VydmljZSBpbnRlcmZhY2UgaXMgZGVzY3JpYmVkIGJ5IGEgV1NETCBkb2N1bWVudCB0aGF0IGNvbnRhaW5zIHRoZSB0eXBlcywKLWltcG9ydCwgbWVzc2FnZSwgcG9ydFR5cGUsIGFuZCBiaW5kaW5nIGVsZW1lbnRzLiBBIHNlcnZpY2UgaW50ZXJmYWNlIGNvbnRhaW5zCi10aGUgV1NETCBzZXJ2aWNlIGRlZmluaXRpb24gdGhhdCB3aWxsIGJlIHVzZWQgdG8gaW1wbGVtZW50IG9uZSBvciBtb3JlIHNlcnZpY2VzLgotSXQgaXMgYW4gYWJzdHJhY3QgZGVmaW5pdGlvbiBvZiBhIFdlYiBzZXJ2aWNlLCBhbmQgaXMgdXNlZCB0byBkZXNjcmliZSBhIHNwZWNpZmljCi10eXBlIG9mIHNlcnZpY2UuIFRoaXMgZG9jdW1lbnQgY2FuIHJlZmVyZW5jZSBhbm90aGVyIHNlcnZpY2UgaW50ZXJmYWNlIGRvY3VtZW50Ci11c2luZyBhbiBpbXBvcnQgZWxlbWVudC4gVGhlIFdlYiBzZXJ2aWNlcyB0b29scyBpbiB0aGlzIHByb2R1Y3QgZ2VuZXJhdGUgYQotc2VydmljZSBpbnRlcmZhY2UgZG9jdW1lbnQgdGhhdCBjb250YWlucyBvbmx5IHRoZSBtZXNzYWdlIGFuZCBwb3J0VHlwZSBlbGVtZW50cwotdGhhdCBhcmUgcmVmZXJlbmNlZCBieSB0aGUgYmluZGluZyBkb2N1bWVudCB0aGF0IGNvbnRhaW5zIG9ubHkgYmluZGluZ3MgZm9yCi10aGUgcG9ydFR5cGUuPC9wPgotPHA+VGhlIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gZG9jdW1lbnQgY29udGFpbnMgdGhlIHNlcnZpY2UgZWxlbWVudHMuIEEgc2VydmljZQotaW1wbGVtZW50YXRpb24gZG9jdW1lbnQgY29udGFpbnMgYSBkZXNjcmlwdGlvbiBvZiBhIHNlcnZpY2UgdGhhdCBpbXBsZW1lbnRzCi1hIHNlcnZpY2UgaW50ZXJmYWNlLiBBdCBsZWFzdCBvbmUgb2YgdGhlIGltcG9ydCBlbGVtZW50cyB3aWxsIGNvbnRhaW4gYSByZWZlcmVuY2UKLXRvIHRoZSBXU0RMIHNlcnZpY2UgaW50ZXJmYWNlIGRvY3VtZW50OyBob3dldmVyIG1vbm9saXRoaWMgV1NETCBzdWNoIGFzIHRoYXQKLWNyZWF0ZWQgdXNpbmcgdGhlIEF4aXMgcnVuLXRpbWUgZW52aXJvbm1lbnQgZG9lcyBub3QgaGF2ZSBpbXBvcnRzLiBBIHNlcnZpY2UKLWltcGxlbWVudGF0aW9uIGRvY3VtZW50IGNhbiBjb250YWluIHJlZmVyZW5jZXMgdG8gbW9yZSB0aGFuIG9uZSBzZXJ2aWNlIGludGVyZmFjZQotZG9jdW1lbnQuPC9wPgotPHA+QSBzZXJ2aWNlIHByb3ZpZGVyIGhvc3RzIGEgV2ViIHNlcnZpY2UgYW5kIG1ha2VzIGl0IGFjY2Vzc2libGUgdXNpbmcgcHJvdG9jb2xzCi1zdWNoIGFzIFNPQVAvSFRUUCBhbmQgU09BUC9KTVMuIFRoZSBXZWIgc2VydmljZSBpcyBkZXNjcmliZWQgYnkgdGhlIFdTREwgZG9jdW1lbnRzCi10aGF0IGFyZSBzdG9yZWQgb24gdGhlIHByb3ZpZGVyJ3Mgc2VydmVyIG9yIGluIGEgc3BlY2lhbCByZXBvc2l0b3J5LiBUaGUgV1NETAotZG9jdW1lbnRzIGFyZSByZWZlcmVuY2VkIGJ5IFVEREkgYnVzaW5lc3Mgc2VydmljZXMgKHNlcnZpY2UgZG9jdW1lbnRzKSBhbmQKLXRNb2RlbHMgKGJpbmRpbmcgZG9jdW1lbnRzKS4gVGhlc2UgcG9pbnRlcnMgZW5hYmxlIGRpc2NvdmVyeSBvZiBhIFdlYiBzZXJ2aWNlCi1ieSBhIHNlcnZpY2UgcmVxdWVzdG9yLjwvcD4KLTxwPkZpZ3VyZSAxLiBSZWxhdGlvbnNoaXAgYmV0d2VlbiBVRERJIGFuZCBXU0RMLjwvcD4KLTxwPiA8aW1hZ2UgYWx0PSJJbGx1c3RyYXRpb24gb2YgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIFVEREkgYW5kIFdTREwuIiBocmVmPSIuLi9pbWFnZXMvd3NkbHVkZGkuZ2lmIj4KLTwvaW1hZ2U+IDwvcD4KLTxwPkZpZ3VyZSAxIGlsbHVzdHJhdGVzIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBVRERJIGFuZCBXU0RMLiBUaGUgV1NETCBzZXJ2aWNlCi1lbGVtZW50IHJlZmVyZW5jZXMgdGhlIFdTREwgYmluZGluZyBlbGVtZW50LiBUaGUgVVJMIG9mIHRoZSBkb2N1bWVudCBjb250YWluaW5nCi10aGUgV1NETCBiaW5kaW5nIGVsZW1lbnQgaXMgcHVibGlzaGVkIHRvIHRoZSBVRERJIGJ1c2luZXNzIHJlZ2lzdHJ5IGFzIGEgdE1vZGVsLgotVGhlIFVSTCBvZiB0aGUgZG9jdW1lbnQgY29udGFpbmluZyB0aGUgV1NETCBzZXJ2aWNlIGVsZW1lbnQgaXMgcHVibGlzaGVkIHRvCi10aGUgVURESSBidXNpbmVzcyByZWdpc3RyeSBhcyBhIGJ1c2luZXNzU2VydmljZSBhbmQgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQKLXRoZSBiaW5kaW5nVGVtcGxhdGUuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFVEREkgcmVnaXN0cnkgZGF0YSBzdHJ1Y3R1cmUKLXR5cGVzLCByZWZlciB0byB0aGUgcmVsYXRlZCByZWZlcmVuY2Ugc2VjdGlvbiBhdCB0aGUgZW5kIG9mIHRoaXMgZG9jdW1lbnQuCi1Ob3RlIHRoYXQgdGhlIGltcG9ydCBwb3J0aW9uIG9mIHRoZSBkaWFncmFtIGlzIG9wdGlvbmFsIGRlcGVuZGluZyBvbiB0aGUgcnVuLXRpbWUKLWVudmlyb25tZW50OyBtb25vbGl0aGljIFdTREwgc3VjaCBhcyB0aGF0IGNyZWF0ZWQgdXNpbmcgdGhlIEF4aXMgcnVuLXRpbWUKLWVudmlyb25tZW50IGRvZXMgbm90IGhhdmUgaW1wb3J0cy48L3A+Ci08cD5UaGUgc2VydmljZSBpbXBsZW1lbnRhdGlvbiBkZXNjcmliZXMgYW4gaW5zdGFuY2Ugb2YgYSBzZXJ2aWNlLiBUaGUgaW5zdGFuY2UKLWlzIGRlZmluZWQgdXNpbmcgYSBXU0RMIHNlcnZpY2UgZWxlbWVudC4gVGhlIHNlcnZpY2UgZWxlbWVudCBpbiBhIHNlcnZpY2UKLWltcGxlbWVudGF0aW9uIGRvY3VtZW50IGlzIHVzZWQgdG8gcHVibGlzaCBhIFVEREkgYnVzaW5lc3NTZXJ2aWNlLiBXaGVuIHB1Ymxpc2hpbmcKLWEgV1NETCBzZXJ2aWNlIGRlc2NyaXB0aW9uLCBhIHNlcnZpY2UgaW50ZXJmYWNlIG11c3QgYmUgcHVibGlzaGVkIGFzIGEgdE1vZGVsCi1iZWZvcmUgYSBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIGlzIHB1Ymxpc2hlZCBhcyBhIGJ1c2luZXNzU2VydmljZS48L3A+Ci08cD5BIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gaXMgcHVibGlzaGVkIGluIGEgVURESSByZWdpc3RyeSBhcyBwYXJ0IG9mIGEgYnVzaW5lc3NTZXJ2aWNlCi13aXRoIG9uZSBvciBtb3JlIGJpbmRpbmdUZW1wbGF0ZSBlbGVtZW50cy4gVGhlIGJ1c2luZXNzU2VydmljZSBpcyBwdWJsaXNoZWQKLWJ5IHRoZSBzZXJ2aWNlIHByb3ZpZGVyLiBBIG5ldyBidXNpbmVzc1NlcnZpY2UgaXMgY3JlYXRlZCBmb3IgYSBzZXJ2aWNlIGVsZW1lbnQKLXRoYXQgaXMgZGVmaW5lZCBpbiB0aGUgc2VydmljZSBpbXBsZW1lbnRhdGlvbiBkb2N1bWVudC4gQSBuZXcgYmluZGluZ1RlbXBsYXRlCi1lbGVtZW50IGlzIGNyZWF0ZWQgd2l0aGluIGEgYnVzaW5lc3NTZXJ2aWNlIGZvciBlYWNoIHBvcnQgZWxlbWVudCB0aGF0IGlzCi1kZWZpbmVkIHdpdGhpbiBhIHNlcnZpY2UgZWxlbWVudC48L3A+Ci08cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gV1NETCBhbmQgVURESSByZWZlciB0bwotIDx4cmVmIGhyZWY9Imh0dHA6Ly91ZGRpLm9yZy9iZXN0cHJhY3RpY2VzLmh0bWwiIHNjb3BlPSJleHRlcm5hbCI+dWRkaS5vcmcvYmVzdHByYWN0aWNlcy5odG1sPC94cmVmPi48L3A+Ci08L2NvbmJvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBDb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSJjdWRkaS5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGwuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PldlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBMYW5ndWFnZSAoV1NETCk8L2xpbmt0ZXh0PjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgUmVmZXJlbmNlPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL3JlZi9ydWRkaS5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvcmVmL3J3c2RsLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD5XZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC9jb25jZXB0PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGx1ZC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGx1ZC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZGJmNTdjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsdWQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwNyIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0iY29uY2VwdCIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJSZWxhdGlvbnNoaXAgYmV0d2VlbiBVRERJIGFuZCBXU0RMIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IlRoZSBVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSBzcGVjaWZpY2F0aW9uIGRlZmluZXMgYSB3YXkgdG8gcHVibGlzaCBhbmQgZGlzY292ZXIgaW5mb3JtYXRpb24gYWJvdXQgV2ViIHNlcnZpY2VzLiBVRERJIGhhcyB0d28gZnVuY3Rpb25zOiAoMSkgaXQgaXMgYSBTT0FQLWJhc2VkIHByb3RvY29sIHRoYXQgZGVmaW5lcyBob3cgVURESSBjbGllbnRzIGNvbW11bmljYXRlIHdpdGggcmVnaXN0cmllcywgYW5kICgyKSBpdCBpcyBhIHBhcnRpY3VsYXIgc2V0IG9mIGdsb2JhbGx5IHJlcGxpY2F0ZWQgcmVnaXN0cmllcy4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIFVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpIHNwZWNpZmljYXRpb24gZGVmaW5lcyBhIHdheSB0byBwdWJsaXNoIGFuZCBkaXNjb3ZlciBpbmZvcm1hdGlvbiBhYm91dCBXZWIgc2VydmljZXMuIFVEREkgaGFzIHR3byBmdW5jdGlvbnM6ICgxKSBpdCBpcyBhIFNPQVAtYmFzZWQgcHJvdG9jb2wgdGhhdCBkZWZpbmVzIGhvdyBVRERJIGNsaWVudHMgY29tbXVuaWNhdGUgd2l0aCByZWdpc3RyaWVzLCBhbmQgKDIpIGl0IGlzIGEgcGFydGljdWxhciBzZXQgb2YgZ2xvYmFsbHkgcmVwbGljYXRlZCByZWdpc3RyaWVzLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IlVEREksIHJlbGF0aW9uc2hpcCB3aXRoIFdTREwsIFdTREwsIHJlbGF0aW9uc2hpcCB3aXRoIFVEREkiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJVRERJLCByZWxhdGlvbnNoaXAgd2l0aCBXU0RMLCBXU0RMLCByZWxhdGlvbnNoaXAgd2l0aCBVRERJIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iY3VkZGkuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3JlZi9ydWRkaS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvcmVmL3J3c2RsLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0iY3dzZGx1ZCIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPlJlbGF0aW9uc2hpcCBiZXR3ZWVuIFVEREkgYW5kIFdTREw8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9ImN3c2RsdWQiPjxhIG5hbWU9ImN3c2RsdWQiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPlJlbGF0aW9uc2hpcCBiZXR3ZWVuIFVEREkgYW5kIFdTREw8L2gxPgotCi0KLQotPGRpdj48cD5UaGUgVW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkgc3BlY2lmaWNhdGlvbgotZGVmaW5lcyBhIHdheSB0byBwdWJsaXNoIGFuZCBkaXNjb3ZlciBpbmZvcm1hdGlvbiBhYm91dCBXZWIgc2VydmljZXMuIFVEREkKLWhhcyB0d28gZnVuY3Rpb25zOiAoMSkgaXQgaXMgYSBTT0FQLWJhc2VkIHByb3RvY29sIHRoYXQgZGVmaW5lcyBob3cgVURESSBjbGllbnRzCi1jb21tdW5pY2F0ZSB3aXRoIHJlZ2lzdHJpZXMsIGFuZCAoMikgaXQgaXMgYSBwYXJ0aWN1bGFyIHNldCBvZiBnbG9iYWxseSByZXBsaWNhdGVkCi1yZWdpc3RyaWVzLjwvcD4KLQotPHA+UmVnaXN0ZXJpbmcgYSBzZXJ2aWNlIGludm9sdmVzIGZvdXIgY29yZSBkYXRhIHN0cnVjdHVyZSB0eXBlczo8L3A+Ci0KLTx1bD4KLTxsaT5UaGUgIDx0dCBjbGFzcz0ic3lzb3V0Ij5idXNpbmVzc0VudGl0eTwvdHQ+IGRhdGEgdHlwZSBjb250YWlucyBpbmZvcm1hdGlvbgotYWJvdXQgdGhlIGJ1c2luZXNzIHRoYXQgaGFzIGEgcHVibGlzaGVkIHNlcnZpY2UuPC9saT4KLQotPGxpPlRoZSAgPHR0IGNsYXNzPSJzeXNvdXQiPmJ1c2luZXNzU2VydmljZTwvdHQ+IGRhdGEgdHlwZSBpcyBhIGRlc2NyaXB0aW9uCi1vZiBhIFdlYiBzZXJ2aWNlLjwvbGk+Ci0KLTxsaT5UaGUgIDx0dCBjbGFzcz0ic3lzb3V0Ij5iaW5kaW5nVGVtcGxhdGU8L3R0PiBkYXRhIHR5cGUgY29udGFpbnMgdGVjaG5pY2FsCi1pbmZvcm1hdGlvbiBmb3IgZGV0ZXJtaW5pbmcgdGhlIGVudHJ5IHBvaW50IGFuZCBjb25zdHJ1Y3Rpb24gc3BlY2lmaWNhdGlvbnMKLWZvciBpbnZva2luZyBhIFdlYiBzZXJ2aWNlLjwvbGk+Ci0KLTxsaT5UaGUgIDx0dCBjbGFzcz0ic3lzb3V0Ij50TW9kZWw8L3R0PiBkYXRhIHR5cGUgcHJvdmlkZXMgYSByZWZlcmVuY2UKLXN5c3RlbSB0byBhc3Npc3QgaW4gdGhlIGRpc2NvdmVyeSBvZiBXZWIgc2VydmljZXMgYW5kIGFjdHMgYXMgYSB0ZWNobmljYWwKLXNwZWNpZmljYXRpb24gZm9yIGEgV2ViIHNlcnZpY2UuPC9saT4KLQotPC91bD4KLQotPHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIFVEREkgZGF0YSB0eXBlcywgcmVmZXIgdG8gdGhlIHJlbGF0ZWQgcmVmZXJlbmNlCi10b3BpY3MgYXQgdGhlIGVuZCBvZiB0aGlzIHRvcGljLjwvcD4KLQotPHA+V2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKSBpcyBhbiBYTUwtYmFzZWQgc3RhbmRhcmQgc3BlY2lmaWNhdGlvbgotZm9yIGRlc2NyaWJpbmcgV2ViIHNlcnZpY2VzLiBXU0RMIGRlZmluZXMgYW4gWE1MIGZvcm1hdCBmb3IgZGVzY3JpYmluZyBuZXR3b3JrCi1zZXJ2aWNlcyBhcyBhIHNldCBvZiBlbmRwb2ludHMgdGhhdCBvcGVyYXRlIG9uIG1lc3NhZ2VzIHRoYXQgY29udGFpbiBlaXRoZXIKLWRvY3VtZW50LW9yaWVudGVkIG9yIHByb2NlZHVyZS1vcmllbnRlZCBpbmZvcm1hdGlvbi48L3A+Ci0KLTxwPlRoZSBXU0RMIHNlcnZpY2UgZGVzY3JpcHRpb24gY2FuIGJlIHN0cnVjdHVyZWQgaW4gbWFueSB3YXlzLiBIb3dldmVyLCB0bwotYXNzaXN0IHdpdGggcHVibGlzaGluZyBhbmQgZmluZGluZyBXU0RMIHNlcnZpY2UgZGVzY3JpcHRpb25zIGluIGEgVURESSByZWdpc3RyeSwKLVdTREwgZG9jdW1lbnRzIGNvbnNpc3Qgb2YgdHdvIG1haW4gcGFydHM6wqA8L3A+Ci0KLTx1bD4KLTxsaT5UaGUgc2VydmljZSBpbnRlcmZhY2UgZGVmaW5pdGlvbiBkZXNjcmliZXMgdGhlIGFic3RyYWN0IHR5cGUgaW50ZXJmYWNlCi1hbmQgaXRzIHByb3RvY29sIGJpbmRpbmcsIGtub3duIGFzIHRoZSBXU0RMIGJpbmRpbmcgZG9jdW1lbnQ8L2xpPgotCi08bGk+VGhlIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gZGVmaW5pdGlvbiBkZXNjcmliZXMgdGhlIHNlcnZpY2UgYWNjZXNzIGxvY2F0aW9uCi1pbmZvcm1hdGlvbiwga25vd24gYXMgdGhlIFdTREwgc2VydmljZSBkb2N1bWVudDwvbGk+Ci0KLTwvdWw+Ci0KLTxwPldoZW4gY3JlYXRpbmcgV2ViIHNlcnZpY2VzIHdpdGggdGhlIEFwYWNoZSBBeGlzIHJ1bi10aW1lIGVudmlyb25tZW50LCB0aGUKLVdlYiBzZXJ2aWNlcyB0b29scyBjcmVhdGUgYSBzaW5nbGUgV1NETCBkb2N1bWVudCB3aGVuIGdlbmVyYXRpbmcgV2ViIHNlcnZpY2VzCi1mcm9tIEphdmHihKIgYmVhbnMKLW9yIEVKQnMuIFRoaXMgV1NETCBkb2N1bWVudCBjb250YWlucyBib3RoIHRoZSBzZXJ2aWNlIGludGVyZmFjZSBhbmQgaW1wbGVtZW50YXRpb24KLWRvY3VtZW50cy48L3A+Ci0KLTxwPkEgc2VydmljZSBpbnRlcmZhY2UgaXMgZGVzY3JpYmVkIGJ5IGEgV1NETCBkb2N1bWVudCB0aGF0IGNvbnRhaW5zIHRoZSB0eXBlcywKLWltcG9ydCwgbWVzc2FnZSwgcG9ydFR5cGUsIGFuZCBiaW5kaW5nIGVsZW1lbnRzLiBBIHNlcnZpY2UgaW50ZXJmYWNlIGNvbnRhaW5zCi10aGUgV1NETCBzZXJ2aWNlIGRlZmluaXRpb24gdGhhdCB3aWxsIGJlIHVzZWQgdG8gaW1wbGVtZW50IG9uZSBvciBtb3JlIHNlcnZpY2VzLgotSXQgaXMgYW4gYWJzdHJhY3QgZGVmaW5pdGlvbiBvZiBhIFdlYiBzZXJ2aWNlLCBhbmQgaXMgdXNlZCB0byBkZXNjcmliZSBhIHNwZWNpZmljCi10eXBlIG9mIHNlcnZpY2UuIFRoaXMgZG9jdW1lbnQgY2FuIHJlZmVyZW5jZSBhbm90aGVyIHNlcnZpY2UgaW50ZXJmYWNlIGRvY3VtZW50Ci11c2luZyBhbiBpbXBvcnQgZWxlbWVudC4gVGhlIFdlYiBzZXJ2aWNlcyB0b29scyBpbiB0aGlzIHByb2R1Y3QgZ2VuZXJhdGUgYQotc2VydmljZSBpbnRlcmZhY2UgZG9jdW1lbnQgdGhhdCBjb250YWlucyBvbmx5IHRoZSBtZXNzYWdlIGFuZCBwb3J0VHlwZSBlbGVtZW50cwotdGhhdCBhcmUgcmVmZXJlbmNlZCBieSB0aGUgYmluZGluZyBkb2N1bWVudCB0aGF0IGNvbnRhaW5zIG9ubHkgYmluZGluZ3MgZm9yCi10aGUgcG9ydFR5cGUuPC9wPgotCi08cD5UaGUgc2VydmljZSBpbXBsZW1lbnRhdGlvbiBkb2N1bWVudCBjb250YWlucyB0aGUgc2VydmljZSBlbGVtZW50cy4gQSBzZXJ2aWNlCi1pbXBsZW1lbnRhdGlvbiBkb2N1bWVudCBjb250YWlucyBhIGRlc2NyaXB0aW9uIG9mIGEgc2VydmljZSB0aGF0IGltcGxlbWVudHMKLWEgc2VydmljZSBpbnRlcmZhY2UuIEF0IGxlYXN0IG9uZSBvZiB0aGUgaW1wb3J0IGVsZW1lbnRzIHdpbGwgY29udGFpbiBhIHJlZmVyZW5jZQotdG8gdGhlIFdTREwgc2VydmljZSBpbnRlcmZhY2UgZG9jdW1lbnQ7IGhvd2V2ZXIgbW9ub2xpdGhpYyBXU0RMIHN1Y2ggYXMgdGhhdAotY3JlYXRlZCB1c2luZyB0aGUgQXhpcyBydW4tdGltZSBlbnZpcm9ubWVudCBkb2VzIG5vdCBoYXZlIGltcG9ydHMuIEEgc2VydmljZQotaW1wbGVtZW50YXRpb24gZG9jdW1lbnQgY2FuIGNvbnRhaW4gcmVmZXJlbmNlcyB0byBtb3JlIHRoYW4gb25lIHNlcnZpY2UgaW50ZXJmYWNlCi1kb2N1bWVudC48L3A+Ci0KLTxwPkEgc2VydmljZSBwcm92aWRlciBob3N0cyBhIFdlYiBzZXJ2aWNlIGFuZCBtYWtlcyBpdCBhY2Nlc3NpYmxlIHVzaW5nIHByb3RvY29scwotc3VjaCBhcyBTT0FQL0hUVFAgYW5kIFNPQVAvSk1TLiBUaGUgV2ViIHNlcnZpY2UgaXMgZGVzY3JpYmVkIGJ5IHRoZSBXU0RMIGRvY3VtZW50cwotdGhhdCBhcmUgc3RvcmVkIG9uIHRoZSBwcm92aWRlcidzIHNlcnZlciBvciBpbiBhIHNwZWNpYWwgcmVwb3NpdG9yeS4gVGhlIFdTREwKLWRvY3VtZW50cyBhcmUgcmVmZXJlbmNlZCBieSBVRERJIGJ1c2luZXNzIHNlcnZpY2VzIChzZXJ2aWNlIGRvY3VtZW50cykgYW5kCi10TW9kZWxzIChiaW5kaW5nIGRvY3VtZW50cykuIFRoZXNlIHBvaW50ZXJzIGVuYWJsZSBkaXNjb3Zlcnkgb2YgYSBXZWIgc2VydmljZQotYnkgYSBzZXJ2aWNlIHJlcXVlc3Rvci48L3A+Ci0KLTxwPkZpZ3VyZSAxLiBSZWxhdGlvbnNoaXAgYmV0d2VlbiBVRERJIGFuZCBXU0RMLjwvcD4KLQotPHA+IDxpbWcgc3JjPSIuLi9pbWFnZXMvd3NkbHVkZGkuZ2lmIiBhbHQ9IklsbHVzdHJhdGlvbiBvZiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gVURESSBhbmQgV1NETC4iIC8+IDwvcD4KLQotPHA+RmlndXJlIDEgaWxsdXN0cmF0ZXMgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIFVEREkgYW5kIFdTREwuIFRoZSBXU0RMIHNlcnZpY2UKLWVsZW1lbnQgcmVmZXJlbmNlcyB0aGUgV1NETCBiaW5kaW5nIGVsZW1lbnQuIFRoZSBVUkwgb2YgdGhlIGRvY3VtZW50IGNvbnRhaW5pbmcKLXRoZSBXU0RMIGJpbmRpbmcgZWxlbWVudCBpcyBwdWJsaXNoZWQgdG8gdGhlIFVEREkgYnVzaW5lc3MgcmVnaXN0cnkgYXMgYSB0TW9kZWwuCi1UaGUgVVJMIG9mIHRoZSBkb2N1bWVudCBjb250YWluaW5nIHRoZSBXU0RMIHNlcnZpY2UgZWxlbWVudCBpcyBwdWJsaXNoZWQgdG8KLXRoZSBVRERJIGJ1c2luZXNzIHJlZ2lzdHJ5IGFzIGEgYnVzaW5lc3NTZXJ2aWNlIGFuZCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dAotdGhlIGJpbmRpbmdUZW1wbGF0ZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gVURESSByZWdpc3RyeSBkYXRhIHN0cnVjdHVyZQotdHlwZXMsIHJlZmVyIHRvIHRoZSByZWxhdGVkIHJlZmVyZW5jZSBzZWN0aW9uIGF0IHRoZSBlbmQgb2YgdGhpcyBkb2N1bWVudC4KLU5vdGUgdGhhdCB0aGUgaW1wb3J0IHBvcnRpb24gb2YgdGhlIGRpYWdyYW0gaXMgb3B0aW9uYWwgZGVwZW5kaW5nIG9uIHRoZSBydW4tdGltZQotZW52aXJvbm1lbnQ7IG1vbm9saXRoaWMgV1NETCBzdWNoIGFzIHRoYXQgY3JlYXRlZCB1c2luZyB0aGUgQXhpcyBydW4tdGltZQotZW52aXJvbm1lbnQgZG9lcyBub3QgaGF2ZSBpbXBvcnRzLjwvcD4KLQotPHA+VGhlIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gZGVzY3JpYmVzIGFuIGluc3RhbmNlIG9mIGEgc2VydmljZS4gVGhlIGluc3RhbmNlCi1pcyBkZWZpbmVkIHVzaW5nIGEgV1NETCBzZXJ2aWNlIGVsZW1lbnQuIFRoZSBzZXJ2aWNlIGVsZW1lbnQgaW4gYSBzZXJ2aWNlCi1pbXBsZW1lbnRhdGlvbiBkb2N1bWVudCBpcyB1c2VkIHRvIHB1Ymxpc2ggYSBVRERJIGJ1c2luZXNzU2VydmljZS4gV2hlbiBwdWJsaXNoaW5nCi1hIFdTREwgc2VydmljZSBkZXNjcmlwdGlvbiwgYSBzZXJ2aWNlIGludGVyZmFjZSBtdXN0IGJlIHB1Ymxpc2hlZCBhcyBhIHRNb2RlbAotYmVmb3JlIGEgc2VydmljZSBpbXBsZW1lbnRhdGlvbiBpcyBwdWJsaXNoZWQgYXMgYSBidXNpbmVzc1NlcnZpY2UuPC9wPgotCi08cD5BIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gaXMgcHVibGlzaGVkIGluIGEgVURESSByZWdpc3RyeSBhcyBwYXJ0IG9mIGEgYnVzaW5lc3NTZXJ2aWNlCi13aXRoIG9uZSBvciBtb3JlIGJpbmRpbmdUZW1wbGF0ZSBlbGVtZW50cy4gVGhlIGJ1c2luZXNzU2VydmljZSBpcyBwdWJsaXNoZWQKLWJ5IHRoZSBzZXJ2aWNlIHByb3ZpZGVyLiBBIG5ldyBidXNpbmVzc1NlcnZpY2UgaXMgY3JlYXRlZCBmb3IgYSBzZXJ2aWNlIGVsZW1lbnQKLXRoYXQgaXMgZGVmaW5lZCBpbiB0aGUgc2VydmljZSBpbXBsZW1lbnRhdGlvbiBkb2N1bWVudC4gQSBuZXcgYmluZGluZ1RlbXBsYXRlCi1lbGVtZW50IGlzIGNyZWF0ZWQgd2l0aGluIGEgYnVzaW5lc3NTZXJ2aWNlIGZvciBlYWNoIHBvcnQgZWxlbWVudCB0aGF0IGlzCi1kZWZpbmVkIHdpdGhpbiBhIHNlcnZpY2UgZWxlbWVudC48L3A+Ci0KLTxwPkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBXU0RMIGFuZCBVRERJIHJlZmVyIHRvCi0gPGEgaHJlZj0iaHR0cDovL3VkZGkub3JnL2Jlc3RwcmFjdGljZXMuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPnVkZGkub3JnL2Jlc3RwcmFjdGljZXMuaHRtbDwvYT4uPC9wPgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgQ29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJjdWRkaS5odG1sIiB0aXRsZT0iVW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIGEgd2F5IHRvIHB1Ymxpc2ggYW5kIGRpc2NvdmVyIGluZm9ybWF0aW9uIGFib3V0IFdlYiBzZXJ2aWNlcy4iPlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGwuaHRtbCI+V2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKTwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBSZWZlcmVuY2U8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi9yZWYvcnVkZGkuaHRtbCIgdGl0bGU9Ik9uY2UgeW91IGhhdmUgcmVnaXN0ZXJlZCBhbmQgbG9nZ2VkIGluIHRvIHRoZSBVRERJIHJlZ2lzdHJ5IHRoYXQgeW91IHdhbnQgdG8gdXNlLCB5b3UgY2FuIHJlZ2lzdGVyIHlvdXIgV2ViIHNlcnZpY2UuIFJlZ2lzdHJhdGlvbiBvZiBhIHNlcnZpY2UgaW52b2x2ZXMgZm91ciBjb3JlIGRhdGEgc3RydWN0dXJlIHR5cGVzOiBidXNpbmVzcyBpbmZvcm1hdGlvbiwgc2VydmljZSBpbmZvcm1hdGlvbiwgYmluZGluZyBpbmZvcm1hdGlvbiwgYW5kIGluZm9ybWF0aW9uIGRlc2NyaWJpbmcgdGhlIHNwZWNpZmljYXRpb25zIGZvciBzZXJ2aWNlcy4gVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGRhdGEgdHlwZXMgaXMgZGVzY3JpYmVkIGluIEZpZ3VyZSAxLiI+RGF0YSBzdHJ1Y3R1cmUgdHlwZXMgKFVEREkgcmVnaXN0cnkpPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvcmVmL3J3c2RsLmh0bWwiPldlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBMYW5ndWFnZSAoV1NETCk8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9hZGRmYXYuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL2FkZGZhdi5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4ODk1ZjQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL2FkZGZhdi5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvYWRkdWRkaS5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvYWRkdWRkaS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzOTliYjAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL2FkZHVkZGkuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL2JlYW5pbmZvanNwLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9iZWFuaW5mb2pzcC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjYmU0MGMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL2JlYW5pbmZvanNwLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9iaW5kbm9kZS5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvYmluZG5vZGUuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YmY1ZDAzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9iaW5kbm9kZS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvYnJvd3NlYnV0dG9uLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9icm93c2VidXR0b24uZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODRhNWJiLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9icm93c2VidXR0b24uZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL2J1c2Fzc3QuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL2J1c2Fzc3QuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZmRjYmIwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9idXNhc3N0LmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9mYXYuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL2Zhdi5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlYmZhYmQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL2Zhdi5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvZmluZC5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvZmluZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkYzNlYmUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL2ZpbmQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL2Zzd3NkbGljb24uZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL2Zzd3NkbGljb24uZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDYwZTU1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9mc3dzZGxpY29uLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9sb2dpbi5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvbG9naW4uZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzdiZGQyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9sb2dpbi5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvbG9naW5pY29uLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9sb2dpbmljb24uZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDUxMGNhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9sb2dpbmljb24uZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL2xvZ291dGljb24uZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL2xvZ291dGljb24uZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzcwOWNmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9sb2dvdXRpY29uLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9tcHR3c2RsaWNvbi5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvbXB0d3NkbGljb24uZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDVlNjU1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9tcHR3c2RsaWNvbi5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvbmV3anNwLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9uZXdqc3AuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjRiNTA5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9uZXdqc3AuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL29wbm9kZS5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvb3Bub2RlLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYThlYjM0OS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvb3Bub2RlLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9wcm94eW9uanNwLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9wcm94eW9uanNwLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjUyZTRlYS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvcHJveHlvbmpzcC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvcHVibGlzaDIuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3B1Ymxpc2gyLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRhMTFhNS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvcHVibGlzaDIuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3B1YnNlcnYuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3B1YnNlcnYuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMWQzNmI3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9wdWJzZXJ2LmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9yZWZzZXJ2LmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9yZWZzZXJ2LmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjVjMDE1Yi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvcmVmc2Vydi5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvcnVuanNmLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9ydW5qc2YuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTg4NGQyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9ydW5qc2YuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3NjZW5hcmlvNy5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvc2NlbmFyaW83LmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTM2NTMxZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvc2NlbmFyaW83LmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9zZXJ2bm9kZS5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvc2Vydm5vZGUuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTEyMzNkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy9zZXJ2bm9kZS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvc29hcHVkd3MuY2RyIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3NvYXB1ZHdzLmNkcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDVlZGFlYi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvc29hcHVkd3MuY2RyCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3VkZGkuY2RyIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3VkZGkuY2RyCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzUyZjAxLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy91ZGRpLmNkcgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy91ZGRpLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy91ZGRpLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2EwMmMwOS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvdWRkaS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvdWRkaXJlZi5jZHIgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvdWRkaXJlZi5jZHIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4ZGEzMmEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3VkZGlyZWYuY2RyCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3VkZGlyZWYuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3VkZGlyZWYuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzE0OGE3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy91ZGRpcmVmLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy91ZGRpdmlldy5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvdWRkaXZpZXcuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjAxYmM4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy91ZGRpdmlldy5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbGJuZGRldGwuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxibmRkZXRsLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAyMjYyZi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbGJuZGRldGwuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxkZXRhaWwuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxkZXRhaWwuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjU0NTY4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2RsZGV0YWlsLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2RsZHRsaWNvbi5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbGR0bGljb24uZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOGVlNjdjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2RsZHRsaWNvbi5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbGV4cC5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbGV4cC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyZWYxMGEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxleHAuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxmYXZpY29uLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2RsZmF2aWNvbi5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5YWNjM2QuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxmYXZpY29uLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2RsaWNvbi5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbGljb24uZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YWVjMzI2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2RsaWNvbi5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbG5vZGUuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxub2RlLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2I3NTIxYS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbG5vZGUuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxvcC5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbG9wLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg3ZGQ0YS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbG9wLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2Rsb3ByZXQuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxvcHJldC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjODNlMzUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxvcHJldC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbG9wcmV0eC5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbG9wcmV0eC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmNWQ1NzcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxvcHJldHguZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxwYWdlLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2RscGFnZS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzN2MxYzAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxwYWdlLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2Rsc2VydmRldC5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbHNlcnZkZXQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ODdjYjg1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2Rsc2VydmRldC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbHN0YXR4LmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2Rsc3RhdHguZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MWJhNzg3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2Rsc3RhdHguZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGx0ZW1wLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2RsdGVtcC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5YmQyMDcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGx0ZW1wLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2RsdWRkaS5jZHIgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbHVkZGkuY2RyCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTQ5MDk4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2RsdWRkaS5jZHIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbHVkZGkuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGx1ZGRpLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmViYjdkNS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NkbHVkZGkuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzaWxwYWdlLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2lscGFnZS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1ZTZlMDMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzaWxwYWdlLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2lsdmlldy5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NpbHZpZXcuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODlkNjg5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2ltYWdlcy93c2lsdmlldy5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NpbmpzcC5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3NpbmpzcC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlNWQ1ZjAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzaW5qc3AuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW1hZ2VzL3dzd2l6aWNvbi5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3N3aXppY29uLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2IxN2FhNy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbWFnZXMvd3N3aXppY29uLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2luZGV4L19rLmNmcyBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2luZGV4L19rLmNmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2U1NjUyYy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbmRleC9fay5jZnMKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbmRleC9kZWxldGFibGUgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbmRleC9kZWxldGFibGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0MjMyNDIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW5kZXgvZGVsZXRhYmxlCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9jb250cmlidXRpb25zIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9jb250cmlidXRpb25zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMWMyNjBiLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfY29udHJpYnV0aW9ucworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1RoaXMgaXMgYSBnZW5lcmF0ZWQgZmlsZTsgZG8gbm90IGVkaXQuDQotI1dlZCBNYXkgMDkgMTQ6MTM6MTYgRURUIDIwMDcNCi1vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXI9b3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyXG4xLjAuMzAwLnF1YWxpZmllcg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfZGVwZW5kZW5jaWVzIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kZXBlbmRlbmNpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0ZWY3YmEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kZXBlbmRlbmNpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLSNUaGlzIGlzIGEgZ2VuZXJhdGVkIGZpbGU7IGRvIG5vdCBlZGl0Lg0KLSNXZWQgTWF5IDA5IDE0OjEzOjE2IEVEVCAyMDA3DQotbHVjZW5lPTEuNC4xMDMudjIwMDYwNjAxDQotYW5hbHl6ZXI9b3JnLmVjbGlwc2UuaGVscC5iYXNlXCMzLjIuMC52MjAwNjA2MDE/bG9jYWxlXD1lbg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfZG9jcyBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfZG9jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTAxYWFlMy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbmRleC9pbmRleGVkX2RvY3MKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0jVGhpcyBpcyBhIGdlbmVyYXRlZCBmaWxlOyBkbyBub3QgZWRpdC4NCi0jV2VkIE1heSAwOSAxNDoxMzoxNiBFRFQgMjAwNw0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGxvZ2V4cC5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRyZWcuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90ZGlzY292Lmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHJlZy5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RnZW53c2lsLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGx1ZC5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3Rhc3NlcnQuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9jb25jZXB0cy9jdWRkaS5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3JlZi9ydWRkaS5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R1cGRhdGUuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dWRkaWV4cC5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2RsZXhwLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHVucHViLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHN0cnRleHAuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90YmttcmsuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90cHVibGlzaC5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RidXNwcm9qLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHB1YmVudC5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R0ZXN0d3NkbC5odG1sPTANCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9pbmRleC9zZWdtZW50cyBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2luZGV4L3NlZ21lbnRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWI1ZDBjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2luZGV4L3NlZ21lbnRzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvbXlwbHVnaW4ueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvbXlwbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzFmYjE0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL215cGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci08P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI/PiAKLTwhLS0gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAtLT4KLTxwbHVnaW4+Ci0gIAotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj4KLQkJPHRvYyBmaWxlPSJ3c2NvbnN1bXB0aW9uYnVpbGRfdG9jLnhtbCIvPgotCQk8dG9jIGZpbGU9IndzY29uc3VtcHRpb250X3RvYy54bWwiIC8+Ci0gICAgICAgPGluZGV4IHBhdGg9ImluZGV4LyIvPgotCTwvZXh0ZW5zaW9uPgotICAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAuaW5kZXgiPgotICAgICAgPGluZGV4IGZpbGU9Im9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlcmluZGV4LnhtbCIvPgotPC9leHRlbnNpb24+Ci08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIubWFwbGlzdCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci5tYXBsaXN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZWMwNGIwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci5tYXBsaXN0CisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotPG1hcGxpc3QgdmVyc2lvbj0iMy42LjIiPgotICA8bmF2PgotICAgIDxtYXAgZmlsZT0id3Njb25zdW1wdGlvbmJ1aWxkX3RvYy5kaXRhbWFwIi8+Ci0gICAgPG1hcCBmaWxlPSJ3c2NvbnN1bXB0aW9udF90b2MuZGl0YW1hcCIvPgotICA8L25hdj4KLSAgPGxpbms+Ci0gICAgPG1hcCBmaWxlPSJ3c2NvbnN1bXB0aW9udF90b2MuZGl0YW1hcCIvPgotICAgIDxtYXAgZmlsZT0id3Njb25zdW1wdGlvbmJ1aWxkX3RvYy5kaXRhbWFwIi8+Ci0gIDwvbGluaz4KLTwvbWFwbGlzdD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlcmluZGV4Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXJpbmRleC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjUyN2E2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlcmluZGV4Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBodG1sCi0gIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJzZWN1cml0eSIgY29udGVudD0icHVibGljIiAvPgotPG1ldGEgbmFtZT0iUm9ib3RzIiBjb250ZW50PSJpbmRleCxmb2xsb3ciIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIG5hbWU9IkRDLkZvcm1hdCIgY29udGVudD0iWEhUTUwiIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvaWJtZGl0YS5jc3MiIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgLz4KLTx0aXRsZT5JbmRleDwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTxoMT5JbmRleDwvaDE+Ci08YSBuYW1lPSJJRFgwXzQyIiBocmVmPSIjSURYMV80MiI+QjwvYT4KLTxhIG5hbWU9IklEWDBfNDQiIGhyZWY9IiNJRFgxXzQ0Ij5EPC9hPgotPGEgbmFtZT0iSURYMF81MiIgaHJlZj0iI0lEWDFfNTIiPlI8L2E+Ci08YSBuYW1lPSJJRFgwXzUzIiBocmVmPSIjSURYMV81MyI+UzwvYT4KLTxhIG5hbWU9IklEWDBfNTUiIGhyZWY9IiNJRFgxXzU1Ij5VPC9hPgotPGEgbmFtZT0iSURYMF81NyIgaHJlZj0iI0lEWDFfNTciPlc8L2E+Ci08aHI+PC9ocj4KLTxzdHJvbmc+PGEgbmFtZT0iSURYMV80MiIgaHJlZj0iI0lEWDBfNDIiPkI8L2E+PC9zdHJvbmc+Ci08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+YnVzaW5lc3MgZW50aXRpZXMKLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT48YSBocmVmPSJ0YXNrcy90dWRkaWV4cC5odG1sI3R1ZGRpZXhwIj5wdWJsaXNoaW5nPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90cHViZW50Lmh0bWwjdHB1YmVudCI+cHVibGlzaGluZyB0byBVRERJPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90dW5wdWIuaHRtbCN0dW5wdWIiPnJlbW92aW5nIGZyb20gYSBVRERJIHJlZ2lzdHJ5PC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90dXBkYXRlLmh0bWwjdHVwZGF0ZSI+dXBkYXRpbmcgaW4gYSBVRERJIHJlZ2lzdHJ5PC9hPgotPC9saT4KLTwvdWw+Ci08L2xpPgotPC91bD4KLTxzdHJvbmc+PGEgbmFtZT0iSURYMV80NCIgaHJlZj0iI0lEWDBfNDQiPkQ8L2E+PC9zdHJvbmc+Ci08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+ZGF0YSBzdHJ1Y3R1cmUgdHlwZXMKLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT48YSBocmVmPSJyZWYvcnVkZGkuaHRtbCNydWRkaSI+VURESSByZWdpc3RyeTwvYT4KLTwvbGk+Ci08L3VsPgotPC9saT4KLTwvdWw+Ci08c3Ryb25nPjxhIG5hbWU9IklEWDFfNTIiIGhyZWY9IiNJRFgwXzUyIj5SPC9hPjwvc3Ryb25nPgotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPnJlZ2lzdHJpZXMKLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT48YSBocmVmPSJ0YXNrcy90YWRkcmVnLmh0bWwjdGFkZHJlZyI+YWRkaW5nIHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+Ci08L2xpPgotPC91bD4KLTwvbGk+Ci08L3VsPgotPHN0cm9uZz48YSBuYW1lPSJJRFgxXzUzIiBocmVmPSIjSURYMF81MyI+UzwvYT48L3N0cm9uZz4KLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT5zZXJ2aWNlIGludGVyZmFjZXMKLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT48YSBocmVmPSJ0YXNrcy90dW5wdWIuaHRtbCN0dW5wdWIiPnJlbW92aW5nIGZyb20gYSBVRERJIHJlZ2lzdHJ5PC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90dXBkYXRlLmh0bWwjdHVwZGF0ZSI+dXBkYXRpbmcgVURESSByZWdpc3RyaWVzPC9hPgotPC9saT4KLTwvdWw+Ci08L2xpPgotPC91bD4KLTxzdHJvbmc+PGEgbmFtZT0iSURYMV81NSIgaHJlZj0iI0lEWDBfNTUiPlU8L2E+PC9zdHJvbmc+Ci08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+PGEgaHJlZj0iY29uY2VwdHMvY3VkZGkuaHRtbCNjdWRkaSI+VURESTwvYT4KLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT48YSBocmVmPSJyZWYvcnVkZGkuaHRtbCNydWRkaSI+ZGF0YSBzdHJ1Y3R1cmUgdHlwZXM8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3RkaXNjb3YuaHRtbCN0ZGlzY292Ij5kaXNjb3ZlcmluZyBXZWIgc2VydmljZXM8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3Rsb2dleHAuaHRtbCN0bG9nZXhwIj5sb2dnaW5nIGludG8gYSByZWdpc3RyeTwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdGFzc2VydC5odG1sI3Rhc3NlcnQiPm1hbmFnaW5nIHB1Ymxpc2hlciBhc3NlcnRpb25zPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90YnVzcHJvai5odG1sI3RidXNwcm9qIj5tYW5hZ2luZyBzZXJ2aWNlczwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdHB1YmVudC5odG1sI3RwdWJlbnQiPnB1Ymxpc2hpbmcgYSBidXNpbmVzcyBlbnRpdHk8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3RwdWJsaXNoLmh0bWwjdHB1Ymxpc2giPnB1Ymxpc2hpbmcgYSBXZWIgc2VydmljZTwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdHJlZy5odG1sI3RyZWciPnJlZ2lzdGVyaW5nIHdpdGggYSByZWdpc3RyeTwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0iY29uY2VwdHMvY3dzZGx1ZC5odG1sI2N3c2RsdWQiPnJlbGF0aW9uc2hpcCB3aXRoIFdTREw8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3R1bnB1Yi5odG1sI3R1bnB1YiI+cmVtb3Zpbmcgc2VydmljZXMgZnJvbSBhIHJlZ2lzdHJ5PC9hPgotPC9saT4KLTwvdWw+Ci08L2xpPgotPGxpPjxhIGhyZWY9ImNvbmNlcHRzL2N1ZGRpLmh0bWwjY3VkZGkiPlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb248L2E+Ci08L2xpPgotPC91bD4KLTxzdHJvbmc+PGEgbmFtZT0iSURYMV81NyIgaHJlZj0iI0lEWDBfNTciPlc8L2E+PC9zdHJvbmc+Ci08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+V2ViIFNlcnZpY2UgRXhwbG9yZXIKLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT48YSBocmVmPSJ0YXNrcy90YmttcmsuaHRtbCN0YmttcmsiPmFkZGluZyBGYXZvcml0ZXM8L2E+Ci08L2xpPgotPC91bD4KLTwvbGk+Ci08bGk+V2ViIHNlcnZpY2VzCi08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+PGEgaHJlZj0idGFza3MvdGFkZHJlZy5odG1sI3RhZGRyZWciPmFkZGluZyBhIHJlZ2lzdHJ5IHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3RkaXNjb3YuaHRtbCN0ZGlzY292Ij5kaXNjb3ZlcmluZzwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdHdzZGxleHAuaHRtbCN0d3NkbGV4cCI+ZXhwbG9yaW5nIFdTREw8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3RnZW53c2lsLmh0bWwjdGdlbndzaWwiPmdlbmVyYXRpbmcgV1NJTDwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdGJ1c3Byb2ouaHRtbCN0YnVzcHJvaiI+bWFuYWdpbmcgc2VydmljZXM8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3RwdWJlbnQuaHRtbCN0cHViZW50Ij5wdWJsaXNoaW5nIGEgYnVzaW5lc3MgZW50aXR5PC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90cHVibGlzaC5odG1sI3RwdWJsaXNoIj5wdWJsaXNoaW5nIHRvIGEgVURESSByZWdpc3RyeTwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdHJlZy5odG1sI3RyZWciPnJlZ2lzdGVyaW5nIHdpdGggYSBVRERJIHJlZ2lzdHJ5PC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90dW5wdWIuaHRtbCN0dW5wdWIiPnJlbW92aW5nIGZyb20gYSBVRERJIHJlZ2lzdHJ5PC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90dGVzdHdzZGwuaHRtbCN0dGVzdHdzZGwiPnRlc3Rpbmcgd2l0aCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJjb25jZXB0cy9jdWRkaS5odG1sI2N1ZGRpIj5VRERJPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90dXBkYXRlLmh0bWwjdHVwZGF0ZSI+dXBkYXRpbmcgVURESSByZWdpc3RyaWVzPC9hPgotPC9saT4KLTwvdWw+Ci08L2xpPgotPGxpPldlYiBTZXJ2aWNlcwotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPnB1Ymxpc2hpbmcKLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT48YSBocmVmPSJ0YXNrcy90dWRkaWV4cC5odG1sI3R1ZGRpZXhwIj5vdmVydmlldzwvYT4KLTwvbGk+Ci08L3VsPgotPC9saT4KLTwvdWw+Ci08L2xpPgotPGxpPldlYiBTZXJ2aWNlcyBFeHBsb3JlcgotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPjxhIGhyZWY9InRhc2tzL3RhZGRyZWcuaHRtbCN0YWRkcmVnIj5hZGRpbmcgYSByZWdpc3RyeTwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdHN0cnRleHAuaHRtbCN0c3RydGV4cCI+bGF1bmNoaW5nPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90bG9nZXhwLmh0bWwjdGxvZ2V4cCI+bG9nZ2luZyBpbnRvIGEgVURESSByZWdpc3RyeTwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdHVkZGlleHAuaHRtbCN0dWRkaWV4cCI+cHVibGlzaGluZyBXZWIgc2VydmljZXM8L2E+Ci08L2xpPgotPC91bD4KLTwvbGk+Ci08bGk+V1NETAotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPjxhIGhyZWY9InRhc2tzL3Ria21yay5odG1sI3Ria21yayI+YWRkaW5nIHRvIEZhdm9yaXRlczwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdHdzZGxleHAuaHRtbCN0d3NkbGV4cCI+ZXhwbG9yaW5nPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJjb25jZXB0cy9jd3NkbHVkLmh0bWwjY3dzZGx1ZCI+cmVsYXRpb25zaGlwIHdpdGggVURESTwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdHRlc3R3c2RsLmh0bWwjdHRlc3R3c2RsIj50ZXN0aW5nIHdpdGggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYT4KLTwvbGk+Ci08L3VsPgotPC9saT4KLTxsaT5XU0lMCi08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+PGEgaHJlZj0idGFza3MvdGJrbXJrLmh0bWwjdGJrbXJrIj5hZGRpbmcgdG8gRmF2b3JpdGVzPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90ZGlzY292Lmh0bWwjdGRpc2NvdiI+ZGlzY292ZXJpbmcgV2ViIHNlcnZpY2VzPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90Z2Vud3NpbC5odG1sI3RnZW53c2lsIj5nZW5lcmF0aW5nPC9hPgotPC9saT4KLTwvdWw+Ci08L2xpPgotPC91bD4KLTwvYm9keT48L2h0bWw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXJpbmRleC54bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXJpbmRleC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNzRlN2QuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyaW5kZXgueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTYwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08aW5kZXg+Ci0gIDxlbnRyeSBrZXl3b3JkPSJVRERJIj4KLSAgICA8dG9waWMgaHJlZj0iY29uY2VwdHMvY3VkZGkuaHRtbCNjdWRkaSIgdGl0bGU9IlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpIi8+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InJlbGF0aW9uc2hpcCB3aXRoIFdTREwiPgotICAgICAgPHRvcGljIGhyZWY9ImNvbmNlcHRzL2N3c2RsdWQuaHRtbCNjd3NkbHVkIiB0aXRsZT0iUmVsYXRpb25zaGlwIGJldHdlZW4gVURESSBhbmQgV1NETCIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImRpc2NvdmVyaW5nIFdlYiBzZXJ2aWNlcyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGRpc2Nvdi5odG1sI3RkaXNjb3YiIHRpdGxlPSJEaXNjb3ZlcmluZyBXZWIgU2VydmljZXMiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJyZWdpc3RlcmluZyB3aXRoIGEgcmVnaXN0cnkiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RyZWcuaHRtbCN0cmVnIiB0aXRsZT0iUmVnaXN0ZXJpbmcgd2l0aCBhIFVEREkgcmVnaXN0cnkiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJsb2dnaW5nIGludG8gYSByZWdpc3RyeSI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGxvZ2V4cC5odG1sI3Rsb2dleHAiIHRpdGxlPSJMb2dnaW5nIGluIHRvIGEgVURESSByZWdpc3RyeSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InB1Ymxpc2hpbmcgYSBidXNpbmVzcyBlbnRpdHkiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RwdWJlbnQuaHRtbCN0cHViZW50IiB0aXRsZT0iUHVibGlzaGluZyBhIGJ1c2luZXNzIGVudGl0eSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InB1Ymxpc2hpbmcgYSBXZWIgc2VydmljZSI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdHB1Ymxpc2guaHRtbCN0cHVibGlzaCIgdGl0bGU9IlB1Ymxpc2hpbmcgYSBXZWIgc2VydmljZSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImRhdGEgc3RydWN0dXJlIHR5cGVzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJyZWYvcnVkZGkuaHRtbCNydWRkaSIgdGl0bGU9IkRhdGEgc3RydWN0dXJlIHR5cGVzIChVRERJIHJlZ2lzdHJ5KSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InJlbW92aW5nIHNlcnZpY2VzIGZyb20gYSByZWdpc3RyeSI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdHVucHViLmh0bWwjdHVucHViIiB0aXRsZT0iUmVtb3ZpbmcgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSBmcm9tIGEgcmVnaXN0cnkiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJtYW5hZ2luZyBzZXJ2aWNlcyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGJ1c3Byb2ouaHRtbCN0YnVzcHJvaiIgdGl0bGU9Ik1hbmFnaW5nIHJlZmVyZW5jZWQgc2VydmljZXMiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJtYW5hZ2luZyBwdWJsaXNoZXIgYXNzZXJ0aW9ucyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGFzc2VydC5odG1sI3Rhc3NlcnQiIHRpdGxlPSJNYW5hZ2luZyBwdWJsaXNoZXIgYXNzZXJ0aW9ucyIvPgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIj4KLSAgICA8dG9waWMgaHJlZj0iY29uY2VwdHMvY3VkZGkuaHRtbCNjdWRkaSIgdGl0bGU9IlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpIi8+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJXZWIgc2VydmljZXMiPgotICAgIDxlbnRyeSBrZXl3b3JkPSJVRERJIj4KLSAgICAgIDx0b3BpYyBocmVmPSJjb25jZXB0cy9jdWRkaS5odG1sI2N1ZGRpIiB0aXRsZT0iVW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJkaXNjb3ZlcmluZyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGRpc2Nvdi5odG1sI3RkaXNjb3YiIHRpdGxlPSJEaXNjb3ZlcmluZyBXZWIgU2VydmljZXMiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJleHBsb3JpbmcgV1NETCI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdHdzZGxleHAuaHRtbCN0d3NkbGV4cCIgdGl0bGU9IkV4cGxvcmluZyBXU0RMIHVzaW5nIHRoZSBXU0RMIEV4cGxvcmVyIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0idGVzdGluZyB3aXRoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3R0ZXN0d3NkbC5odG1sI3R0ZXN0d3NkbCIgdGl0bGU9IlRlc3RpbmcgV1NETCBkb2N1bWVudHMgYW5kIFdlYiBzZXJ2aWNlcyB1c2luZyB0aGUgV1NETCBFeHBsb3JlciIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InJlZ2lzdGVyaW5nIHdpdGggYSBVRERJIHJlZ2lzdHJ5Ij4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90cmVnLmh0bWwjdHJlZyIgdGl0bGU9IlJlZ2lzdGVyaW5nIHdpdGggYSBVRERJIHJlZ2lzdHJ5Ii8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iYWRkaW5nIGEgcmVnaXN0cnkgdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGFkZHJlZy5odG1sI3RhZGRyZWciIHRpdGxlPSJBZGRpbmcgYSBSZWdpc3RyeSB0byB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0icHVibGlzaGluZyBhIGJ1c2luZXNzIGVudGl0eSI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdHB1YmVudC5odG1sI3RwdWJlbnQiIHRpdGxlPSJQdWJsaXNoaW5nIGEgYnVzaW5lc3MgZW50aXR5Ii8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0icHVibGlzaGluZyB0byBhIFVEREkgcmVnaXN0cnkiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RwdWJsaXNoLmh0bWwjdHB1Ymxpc2giIHRpdGxlPSJQdWJsaXNoaW5nIGEgV2ViIHNlcnZpY2UiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJ1cGRhdGluZyBVRERJIHJlZ2lzdHJpZXMiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3R1cGRhdGUuaHRtbCN0dXBkYXRlIiB0aXRsZT0iVXBkYXRpbmcgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InJlbW92aW5nIGZyb20gYSBVRERJIHJlZ2lzdHJ5Ij4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90dW5wdWIuaHRtbCN0dW5wdWIiIHRpdGxlPSJSZW1vdmluZyBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlIGZyb20gYSByZWdpc3RyeSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9Im1hbmFnaW5nIHNlcnZpY2VzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90YnVzcHJvai5odG1sI3RidXNwcm9qIiB0aXRsZT0iTWFuYWdpbmcgcmVmZXJlbmNlZCBzZXJ2aWNlcyIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImdlbmVyYXRpbmcgV1NJTCI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGdlbndzaWwuaHRtbCN0Z2Vud3NpbCIgdGl0bGU9IkdlbmVyYXRpbmcgYSBXU0lMIGZpbGUiLz4KLSAgICA8L2VudHJ5PgotICA8L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0iV1NETCI+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InJlbGF0aW9uc2hpcCB3aXRoIFVEREkiPgotICAgICAgPHRvcGljIGhyZWY9ImNvbmNlcHRzL2N3c2RsdWQuaHRtbCNjd3NkbHVkIiB0aXRsZT0iUmVsYXRpb25zaGlwIGJldHdlZW4gVURESSBhbmQgV1NETCIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImV4cGxvcmluZyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdHdzZGxleHAuaHRtbCN0d3NkbGV4cCIgdGl0bGU9IkV4cGxvcmluZyBXU0RMIHVzaW5nIHRoZSBXU0RMIEV4cGxvcmVyIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0idGVzdGluZyB3aXRoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3R0ZXN0d3NkbC5odG1sI3R0ZXN0d3NkbCIgdGl0bGU9IlRlc3RpbmcgV1NETCBkb2N1bWVudHMgYW5kIFdlYiBzZXJ2aWNlcyB1c2luZyB0aGUgV1NETCBFeHBsb3JlciIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImFkZGluZyB0byBGYXZvcml0ZXMiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3Ria21yay5odG1sI3Ria21yayIgdGl0bGU9IkFkZGluZyBhIHJlZ2lzdHJ5LCBidXNpbmVzcyBlbnRpdHksIGJ1c2luZXNzIHNlcnZpY2UsIHNlcnZpY2UgaW50ZXJmYWNlLCBXU0lMLCBvciBXU0RMIHNlcnZpY2UgdG8gRmF2b3JpdGVzIi8+Ci0gICAgPC9lbnRyeT4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9IldTSUwiPgotICAgIDxlbnRyeSBrZXl3b3JkPSJkaXNjb3ZlcmluZyBXZWIgc2VydmljZXMiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RkaXNjb3YuaHRtbCN0ZGlzY292IiB0aXRsZT0iRGlzY292ZXJpbmcgV2ViIFNlcnZpY2VzIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iYWRkaW5nIHRvIEZhdm9yaXRlcyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGJrbXJrLmh0bWwjdGJrbXJrIiB0aXRsZT0iQWRkaW5nIGEgcmVnaXN0cnksIGJ1c2luZXNzIGVudGl0eSwgYnVzaW5lc3Mgc2VydmljZSwgc2VydmljZSBpbnRlcmZhY2UsIFdTSUwsIG9yIFdTREwgc2VydmljZSB0byBGYXZvcml0ZXMiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJnZW5lcmF0aW5nIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90Z2Vud3NpbC5odG1sI3RnZW53c2lsIiB0aXRsZT0iR2VuZXJhdGluZyBhIFdTSUwgZmlsZSIvPgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJXZWIgU2VydmljZXMiPgotICAgIDxlbnRyeSBrZXl3b3JkPSJwdWJsaXNoaW5nIj4KLSAgICAgIDxlbnRyeSBrZXl3b3JkPSJvdmVydmlldyI+Ci0gICAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90dWRkaWV4cC5odG1sI3R1ZGRpZXhwIiB0aXRsZT0iUHVibGlzaGluZyBXZWIgc2VydmljZXMgYW5kIGJ1c2luZXNzIGVudGl0aWVzIi8+Ci0gICAgICA8L2VudHJ5PgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJidXNpbmVzcyBlbnRpdGllcyI+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InB1Ymxpc2hpbmciPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3R1ZGRpZXhwLmh0bWwjdHVkZGlleHAiIHRpdGxlPSJQdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXMiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJwdWJsaXNoaW5nIHRvIFVEREkiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RwdWJlbnQuaHRtbCN0cHViZW50IiB0aXRsZT0iUHVibGlzaGluZyBhIGJ1c2luZXNzIGVudGl0eSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InVwZGF0aW5nIGluIGEgVURESSByZWdpc3RyeSI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdHVwZGF0ZS5odG1sI3R1cGRhdGUiIHRpdGxlPSJVcGRhdGluZyBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0icmVtb3ZpbmcgZnJvbSBhIFVEREkgcmVnaXN0cnkiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3R1bnB1Yi5odG1sI3R1bnB1YiIgdGl0bGU9IlJlbW92aW5nIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UgZnJvbSBhIHJlZ2lzdHJ5Ii8+Ci0gICAgPC9lbnRyeT4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9IldlYiBTZXJ2aWNlcyBFeHBsb3JlciI+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InB1Ymxpc2hpbmcgV2ViIHNlcnZpY2VzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90dWRkaWV4cC5odG1sI3R1ZGRpZXhwIiB0aXRsZT0iUHVibGlzaGluZyBXZWIgc2VydmljZXMgYW5kIGJ1c2luZXNzIGVudGl0aWVzIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0ibGF1bmNoaW5nIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90c3RydGV4cC5odG1sI3RzdHJ0ZXhwIiB0aXRsZT0iTGF1bmNoaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJsb2dnaW5nIGludG8gYSBVRERJIHJlZ2lzdHJ5Ij4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90bG9nZXhwLmh0bWwjdGxvZ2V4cCIgdGl0bGU9IkxvZ2dpbmcgaW4gdG8gYSBVRERJIHJlZ2lzdHJ5Ii8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iYWRkaW5nIGEgcmVnaXN0cnkiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RhZGRyZWcuaHRtbCN0YWRkcmVnIiB0aXRsZT0iQWRkaW5nIGEgUmVnaXN0cnkgdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciIvPgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJyZWdpc3RyaWVzIj4KLSAgICA8ZW50cnkga2V5d29yZD0iYWRkaW5nIHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RhZGRyZWcuaHRtbCN0YWRkcmVnIiB0aXRsZT0iQWRkaW5nIGEgUmVnaXN0cnkgdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciIvPgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJkYXRhIHN0cnVjdHVyZSB0eXBlcyI+Ci0gICAgPGVudHJ5IGtleXdvcmQ9IlVEREkgcmVnaXN0cnkiPgotICAgICAgPHRvcGljIGhyZWY9InJlZi9ydWRkaS5odG1sI3J1ZGRpIiB0aXRsZT0iRGF0YSBzdHJ1Y3R1cmUgdHlwZXMgKFVEREkgcmVnaXN0cnkpIi8+Ci0gICAgPC9lbnRyeT4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9InNlcnZpY2UgaW50ZXJmYWNlcyI+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InVwZGF0aW5nIFVEREkgcmVnaXN0cmllcyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdHVwZGF0ZS5odG1sI3R1cGRhdGUiIHRpdGxlPSJVcGRhdGluZyBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0icmVtb3ZpbmcgZnJvbSBhIFVEREkgcmVnaXN0cnkiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3R1bnB1Yi5odG1sI3R1bnB1YiIgdGl0bGU9IlJlbW92aW5nIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UgZnJvbSBhIHJlZ2lzdHJ5Ii8+Ci0gICAgPC9lbnRyeT4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9IldlYiBTZXJ2aWNlIEV4cGxvcmVyIj4KLSAgICA8ZW50cnkga2V5d29yZD0iYWRkaW5nIEZhdm9yaXRlcyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGJrbXJrLmh0bWwjdGJrbXJrIiB0aXRsZT0iQWRkaW5nIGEgcmVnaXN0cnksIGJ1c2luZXNzIGVudGl0eSwgYnVzaW5lc3Mgc2VydmljZSwgc2VydmljZSBpbnRlcmZhY2UsIFdTSUwsIG9yIFdTREwgc2VydmljZSB0byBGYXZvcml0ZXMiLz4KLSAgICA8L2VudHJ5PgotICA8L2VudHJ5PgotPC9pbmRleD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9wbHVnaW4ucHJvcGVydGllcyBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGY0Njc0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgTkxTX01FU1NBR0VGT1JNQVRfVkFSIAotIyBOTFNfRU5DT0RJTkc9VVRGLTggCi0KLXBsdWdpbk5hbWUgPSBXZWIgc2VydmljZSBjb25zdW1wdGlvbiBkb2N1bWVudGF0aW9uCi1wbHVnaW5Qcm92aWRlciA9IEVjbGlwc2Uub3JnCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9wbHVnaW4ueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDMxZmIxNC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLTw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj8+IAotPCEtLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIC0tPgotPHBsdWdpbj4KLSAgCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC50b2MiPgotCQk8dG9jIGZpbGU9IndzY29uc3VtcHRpb25idWlsZF90b2MueG1sIi8+Ci0JCTx0b2MgZmlsZT0id3Njb25zdW1wdGlvbnRfdG9jLnhtbCIgLz4KLSAgICAgICA8aW5kZXggcGF0aD0iaW5kZXgvIi8+Ci0JPC9leHRlbnNpb24+Ci0gICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC5pbmRleCI+Ci0gICAgICA8aW5kZXggZmlsZT0ib3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyaW5kZXgueG1sIi8+Ci08L2V4dGVuc2lvbj4KLTwvcGx1Z2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3JlZi9ydWRkaS5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvcmVmL3J1ZGRpLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5NzZmZWYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvcmVmL3J1ZGRpLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSByZWZlcmVuY2UgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgUmVmZXJlbmNlLy9FTiIKLSAicmVmZXJlbmNlLmR0ZCI+Ci08cmVmZXJlbmNlIGlkPSJydWRkaSIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5EYXRhIHN0cnVjdHVyZSB0eXBlcyAoVURESSByZWdpc3RyeSk8L3RpdGxlPgotPHNob3J0ZGVzYz5PbmNlIHlvdSBoYXZlIHJlZ2lzdGVyZWQgYW5kIGxvZ2dlZCBpbiB0byB0aGUgVURESSByZWdpc3RyeSB0aGF0Ci15b3Ugd2FudCB0byB1c2UsIHlvdSBjYW4gcmVnaXN0ZXIgeW91ciBXZWIgc2VydmljZS4gUmVnaXN0cmF0aW9uIG9mIGEgc2VydmljZQotaW52b2x2ZXMgZm91ciBjb3JlIGRhdGEgc3RydWN0dXJlIHR5cGVzOiBidXNpbmVzcyBpbmZvcm1hdGlvbiwgc2VydmljZSBpbmZvcm1hdGlvbiwKLWJpbmRpbmcgaW5mb3JtYXRpb24sIGFuZCBpbmZvcm1hdGlvbiBkZXNjcmliaW5nIHRoZSBzcGVjaWZpY2F0aW9ucyBmb3Igc2VydmljZXMuCi1UaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZGF0YSB0eXBlcyBpcyBkZXNjcmliZWQgaW4gRmlndXJlIDEuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPlVEREk8aW5kZXh0ZXJtPmRhdGEgc3RydWN0dXJlIHR5cGVzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPmRhdGEgc3RydWN0dXJlIHR5cGVzPGluZGV4dGVybT5VRERJIHJlZ2lzdHJ5PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTxyZWZib2R5PgotPHNlY3Rpb24+PGxxPiA8cD4gPHVpY29udHJvbD5CdXNpbmVzcyBpbmZvcm1hdGlvbi48L3VpY29udHJvbD4gSW5mb3JtYXRpb24KLXRoYXQgaXMgY29udGFpbmVkIGluIGEgIDxzeXN0ZW1vdXRwdXQ+YnVzaW5lc3NFbnRpdHk8L3N5c3RlbW91dHB1dD4gc3RydWN0dXJlLgotVGhlICA8c3lzdGVtb3V0cHV0PmJ1c2luZXNzRW50aXR5PC9zeXN0ZW1vdXRwdXQ+IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0Ci10aGUgYnVzaW5lc3MgdGhhdCBoYXMgcHVibGlzaGVkIHRoZSBzZXJ2aWNlLCBzdWNoIGFzIGJ1c2luZXNzIG5hbWUsIGRlc2NyaXB0aW9uLAotY29udGFjdHMgYW5kIGlkZW50aWZpZXJzLjwvcD4gPHA+IDx1aWNvbnRyb2w+U2VydmljZSBpbmZvcm1hdGlvbi48L3VpY29udHJvbD4gSW5mb3JtYXRpb24KLXRoYXQgZGVzY3JpYmVzIGEgZ3JvdXAgb2YgV2ViIHNlcnZpY2VzLiBJdCBpcyBjb250YWluZWQgaW4gYSAgPHN5c3RlbW91dHB1dD5idXNpbmVzc1NlcnZpY2U8L3N5c3RlbW91dHB1dD4gc3RydWN0dXJlLgotVGhlICA8c3lzdGVtb3V0cHV0PmJ1c2luZXNzU2VydmljZTwvc3lzdGVtb3V0cHV0PiBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dAotZmFtaWxpZXMgb2YgdGVjaG5pY2FsIHNlcnZpY2VzLiZuYnNwOyBJdCBncm91cHMgYSBzZXQgb2YgV2ViIHNlcnZpY2VzIHJlbGF0ZWQKLXRvIGVpdGhlciBhIGJ1c2luZXNzIHByb2Nlc3Mgb3IgZ3JvdXAgb2Ygc2VydmljZXMuPC9wPiA8cD4gPHVpY29udHJvbD5CaW5kaW5nCi1pbmZvcm1hdGlvbi48L3VpY29udHJvbD4gSW5mb3JtYXRpb24gcmVwcmVzZW50ZWQgYnkgdGhlICA8c3lzdGVtb3V0cHV0PmJpbmRpbmdUZW1wbGF0ZTwvc3lzdGVtb3V0cHV0PiBzdHJ1Y3R1cmUuCi1UaGUgIDxzeXN0ZW1vdXRwdXQ+YmluZGluZ1RlbXBsYXRlPC9zeXN0ZW1vdXRwdXQ+IGhvbGRzIHRlY2huaWNhbCBpbmZvcm1hdGlvbgotZm9yIGRldGVybWluaW5nIHRoZSBlbnRyeSBwb2ludCBhbmQgY29uc3RydWN0aW9uIHNwZWNpZmljYXRpb25zIGZvciBpbnZva2luZwotYSBXZWIgc2VydmljZS4mbmJzcDsgVGhlICA8c3lzdGVtb3V0cHV0PmJpbmRpbmdUZW1wbGF0ZTwvc3lzdGVtb3V0cHV0PiBwcm92aWRlcwotdGhlIFdlYiBzZXJ2aWNlIGRlc2NyaXB0aW9ucyByZWxldmFudCBmb3IgYXBwbGljYXRpb24gZGV2ZWxvcGVycyB0aGF0IHdhbnQKLXRvIGZpbmQgYW5kIGludm9rZSBhIFdlYiBzZXJ2aWNlLiZuYnNwOyBUaGUgIDxzeXN0ZW1vdXRwdXQ+YmluZGluZ1RlbXBsYXRlPC9zeXN0ZW1vdXRwdXQ+IHBvaW50cwotdG8gYSBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIGRlc2NyaXB0aW9ucywgZm9yIGV4YW1wbGUgdmlhIGEgVVJMLjwvcD4gPHA+IDx1aWNvbnRyb2w+SW5mb3JtYXRpb24KLWRlc2NyaWJpbmcgdGhlIHNwZWNpZmljYXRpb25zIGZvciBzZXJ2aWNlcy48L3VpY29udHJvbD4gTWV0YWRhdGEgYWJvdXQgdGhlCi12YXJpb3VzIHNwZWNpZmljYXRpb25zIGltcGxlbWVudGVkIGJ5IGEgZ2l2ZW4gV2ViIHNlcnZpY2UgcmVwcmVzZW50ZWQgYnkgdGhlCi0gPHN5c3RlbW91dHB1dD50TW9kZWw8L3N5c3RlbW91dHB1dD4uIFRoZSAgPHN5c3RlbW91dHB1dD50TW9kZWw8L3N5c3RlbW91dHB1dD4gcHJvdmlkZXMKLWEgcmVmZXJlbmNlIHN5c3RlbSB0byBhc3Npc3QgaW4gdGhlIGRpc2NvdmVyeSBvZiBXZWIgc2VydmljZXMuPC9wPiA8L2xxPjxwPkZpZ3VyZQotMS4gUmVsYXRpb25zaGlwIGJldHdlZW4gZGF0YSB0eXBlcy48L3A+PHA+IDxpbWFnZSBhbHQ9IkZpZ3VyZSAxIGlsbHVzdHJhdGVzIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgYnVzaW5lc3MgZW50aXR5LCBidXNpbmVzcyBzZXJ2aWNlLCBiaW5kaW5nIHRlbXBsYXRlLCBhbmQgdG1vZGVsLiIKLWhyZWY9Ii4uL2ltYWdlcy91ZGRpLmdpZiI+PC9pbWFnZT4gPC9wPjxwPkVhY2ggY2hpbGQgc3RydWN0dXJlIGhhcyBhIHVuaXF1ZQotcGFyZW50IHN0cnVjdHVyZS4gVGhpcyBtZWFucyB0aGF0IGVhY2ggIDxzeXN0ZW1vdXRwdXQ+YnVzaW5lc3NTZXJ2aWNlPC9zeXN0ZW1vdXRwdXQ+IHN0cnVjdHVyZQotaXMgb3duZWQgYnkgYSBzcGVjaWZpYyAgPHN5c3RlbW91dHB1dD5idXNpbmVzc0VudGl0eTwvc3lzdGVtb3V0cHV0Pi4gSW4gdHVybiwKLWVhY2ggIDxzeXN0ZW1vdXRwdXQ+YmluZGluZ1RlbXBsYXRlPC9zeXN0ZW1vdXRwdXQ+IGlzIG93bmVkIGJ5IGEgc3BlY2lmaWMKLSA8c3lzdGVtb3V0cHV0PmJ1c2luZXNzU2VydmljZTwvc3lzdGVtb3V0cHV0Pi4gRWFjaCAgPHN5c3RlbW91dHB1dD5iaW5kaW5nVGVtcGxhdGU8L3N5c3RlbW91dHB1dD4gc3RydWN0dXJlCi1yZWZlcmVuY2VzIHRvIHVuaXF1ZSBpbnN0YW5jZXMgb2YgIDxzeXN0ZW1vdXRwdXQ+dE1vZGVsPC9zeXN0ZW1vdXRwdXQ+IHN0cnVjdHVyZXM7Ci1ob3dldmVyLCBzaW5jZSByZWZlcmVuY2VzIGNhbiBiZSByZXBlYXRlZCB3aXRoaW4gc2V2ZXJhbCBwYXJlbnQgc3RydWN0dXJlcywKLXRoZXJlIGNhbiBiZSBtYW55IHJlZmVyZW5jZXMgdG8gIDxzeXN0ZW1vdXRwdXQ+dE1vZGVsczwvc3lzdGVtb3V0cHV0PiBmcm9tCi1kaWZmZXJlbnQgRW50aXR5LVNlcnZpY2UtVGVtcGxhdGUgcGFyZW50cywgYXMgc2VlbiBpbiBGaWd1cmUgMi48L3A+PHA+RmlndXJlCi0yLiBSZWZlcmVuY2VzIHRvIHRNb2RlbC48L3A+PHA+IDxpbWFnZSBhbHQ9IkZpZ3VyZSAyIGlsbHVzdHJhdGVzIHRoZSBtdWx0aXBsZSByZWZlcmVuY2VzIHRvIGEgdE1vZGVsLiIKLWhyZWY9Ii4uL2ltYWdlcy91ZGRpcmVmLmdpZiI+PC9pbWFnZT4gPC9wPjwvc2VjdGlvbj4KLTxzZWN0aW9uPjx0aXRsZT5QdWJsaXNoZXIgYXNzZXJ0aW9uczwvdGl0bGU+PHA+QSBwdWJsaXNoZXIgYXNzZXJ0aW9uIGlzIGEKLXdheSBpbiBVRERJIHRvIGFzc29jaWF0ZSBidXNpbmVzc0VudGl0eSBzdHJ1Y3R1cmVzLiBUaGUgcHVibGlzaGVyIGFzc2VydGlvbgotZGVmaW5lcyBhIGdyb3VwIG9mIGJ1c2luZXNzRW50aXR5IHN0cnVjdHVyZXMuIE1hbnkgYnVzaW5lc3NlcyBhcmUgbm90IGVmZmVjdGl2ZWx5Ci1yZXByZXNlbnRlZCBieSBhIHNpbmdsZSBidXNpbmVzc0VudGl0eS4gQSBwdWJsaXNoZXIgYXNzZXJ0aW9uIGFsbG93cyBmb3IgdGhlCi1hc3NvY2lhdGlvbiBiZXR3ZWVuIGJ1c2luZXNzRW50aXR5IHN0cnVjdHVyZXMuIEZvciBleGFtcGxlLCBhIGxhcmdlIGNvbXBhbnkKLW1heSBoYXZlIHNldmVyYWwgc3Vic2lkaWFyaWVzIHRoYXQgaGF2ZSBkaWZmZXJlbnQgZGVzY3JpcHRpb25zIGJ1dCBhcmUgc3RpbGwKLWNsb3NlbHkgY291cGxlZCBhbmQgd2FudCB0byBtYWtlIHRoZWlyIHJlbGF0aW9uc2hpcHMgdmlzaWJsZSBpbiBVRERJIHJlZ2lzdHJpZXMuPC9wPjwvc2VjdGlvbj4KLTxzZWN0aW9uPjx0aXRsZT5TZXJ2aWNlIHByb2plY3Rpb25zPC90aXRsZT48cD5BIHNlcnZpY2UgcHJvamVjdGlvbiBlbmFibGVzCi1hIGJ1c2luZXNzIGVudGl0eSB0byByZWZlcmVuY2UgYSBzZXJ2aWNlIHRoYXQgd2FzIHB1Ymxpc2hlZCBieSBhbm90aGVyIGJ1c2luZXNzCi1lbnRpdHkuIEJ5IHVzaW5nIHRoZSBidXNpbmVzc1NlcnZpY2Ugc3RydWN0dXJlIGFzIGEgcHJvamVjdGlvbiB0byBhbiBhbHJlYWR5Ci1wdWJsaXNoZWQgYnVzaW5lc3NTZXJ2aWNlLCBidXNpbmVzc2VzIGNhbiBzaGFyZSBvciByZXVzZSBzZXJ2aWNlcy4gU2VydmljZQotcHJvamVjdGlvbnMgYXJlIG1hbmFnZWQgY2VudHJhbGx5IGFzIHBhcnQgb2YgdGhlIHJlZmVyZW5jaW5nIGJ1c2luZXNzRW50aXR5LgotVGhpcyBtZWFucyB0aGF0IGFueSBjaGFuZ2VzIG1hZGUgdG8gdGhlIGJ1c2luZXNzU2VydmljZSBieSBhbnkgb2YgdGhlIHJlZmVyZW5jaW5nCi1idXNpbmVzc0VudGl0eSBzdHJ1Y3R1cmVzIGFyZSB2YWxpZCBmb3IgYWxsIG9mIHRoZSByZWZlcmVuY2luZyBidXNpbmVzc0VudGl0eQotc3RydWN0dXJlcy48L3A+PC9zZWN0aW9uPgotPC9yZWZib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgQ29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+V2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL3Rhc2tzL3R1ZGRpZXhwLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L3JlZmVyZW5jZT4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3JlZi9ydWRkaS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvcmVmL3J1ZGRpLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzMWM2ODMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvcmVmL3J1ZGRpLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDciIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InJlZmVyZW5jZSIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJEYXRhIHN0cnVjdHVyZSB0eXBlcyAoVURESSByZWdpc3RyeSkiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iT25jZSB5b3UgaGF2ZSByZWdpc3RlcmVkIGFuZCBsb2dnZWQgaW4gdG8gdGhlIFVEREkgcmVnaXN0cnkgdGhhdCB5b3Ugd2FudCB0byB1c2UsIHlvdSBjYW4gcmVnaXN0ZXIgeW91ciBXZWIgc2VydmljZS4gUmVnaXN0cmF0aW9uIG9mIGEgc2VydmljZSBpbnZvbHZlcyBmb3VyIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgdHlwZXM6IGJ1c2luZXNzIGluZm9ybWF0aW9uLCBzZXJ2aWNlIGluZm9ybWF0aW9uLCBiaW5kaW5nIGluZm9ybWF0aW9uLCBhbmQgaW5mb3JtYXRpb24gZGVzY3JpYmluZyB0aGUgc3BlY2lmaWNhdGlvbnMgZm9yIHNlcnZpY2VzLiBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZGF0YSB0eXBlcyBpcyBkZXNjcmliZWQgaW4gRmlndXJlIDEuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9Ik9uY2UgeW91IGhhdmUgcmVnaXN0ZXJlZCBhbmQgbG9nZ2VkIGluIHRvIHRoZSBVRERJIHJlZ2lzdHJ5IHRoYXQgeW91IHdhbnQgdG8gdXNlLCB5b3UgY2FuIHJlZ2lzdGVyIHlvdXIgV2ViIHNlcnZpY2UuIFJlZ2lzdHJhdGlvbiBvZiBhIHNlcnZpY2UgaW52b2x2ZXMgZm91ciBjb3JlIGRhdGEgc3RydWN0dXJlIHR5cGVzOiBidXNpbmVzcyBpbmZvcm1hdGlvbiwgc2VydmljZSBpbmZvcm1hdGlvbiwgYmluZGluZyBpbmZvcm1hdGlvbiwgYW5kIGluZm9ybWF0aW9uIGRlc2NyaWJpbmcgdGhlIHNwZWNpZmljYXRpb25zIGZvciBzZXJ2aWNlcy4gVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGRhdGEgdHlwZXMgaXMgZGVzY3JpYmVkIGluIEZpZ3VyZSAxLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IlVEREksIGRhdGEgc3RydWN0dXJlIHR5cGVzLCBVRERJIHJlZ2lzdHJ5IiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iVURESSwgZGF0YSBzdHJ1Y3R1cmUgdHlwZXMsIFVEREkgcmVnaXN0cnkiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90YXNrcy90dWRkaWV4cC5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InJ1ZGRpIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+RGF0YSBzdHJ1Y3R1cmUgdHlwZXMgKFVEREkgcmVnaXN0cnkpPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJydWRkaSI+PGEgbmFtZT0icnVkZGkiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkRhdGEgc3RydWN0dXJlIHR5cGVzIChVRERJIHJlZ2lzdHJ5KTwvaDE+Ci0KLQotCi08ZGl2PjxwPk9uY2UgeW91IGhhdmUgcmVnaXN0ZXJlZCBhbmQgbG9nZ2VkIGluIHRvIHRoZSBVRERJIHJlZ2lzdHJ5IHRoYXQKLXlvdSB3YW50IHRvIHVzZSwgeW91IGNhbiByZWdpc3RlciB5b3VyIFdlYiBzZXJ2aWNlLiBSZWdpc3RyYXRpb24gb2YgYSBzZXJ2aWNlCi1pbnZvbHZlcyBmb3VyIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgdHlwZXM6IGJ1c2luZXNzIGluZm9ybWF0aW9uLCBzZXJ2aWNlIGluZm9ybWF0aW9uLAotYmluZGluZyBpbmZvcm1hdGlvbiwgYW5kIGluZm9ybWF0aW9uIGRlc2NyaWJpbmcgdGhlIHNwZWNpZmljYXRpb25zIGZvciBzZXJ2aWNlcy4KLVRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBkYXRhIHR5cGVzIGlzIGRlc2NyaWJlZCBpbiBGaWd1cmUgMS48L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxibG9ja3F1b3RlPiA8cD4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QnVzaW5lc3MgaW5mb3JtYXRpb24uPC9zcGFuPiBJbmZvcm1hdGlvbgotdGhhdCBpcyBjb250YWluZWQgaW4gYSAgPHR0IGNsYXNzPSJzeXNvdXQiPmJ1c2luZXNzRW50aXR5PC90dD4gc3RydWN0dXJlLgotVGhlICA8dHQgY2xhc3M9InN5c291dCI+YnVzaW5lc3NFbnRpdHk8L3R0PiBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dAotdGhlIGJ1c2luZXNzIHRoYXQgaGFzIHB1Ymxpc2hlZCB0aGUgc2VydmljZSwgc3VjaCBhcyBidXNpbmVzcyBuYW1lLCBkZXNjcmlwdGlvbiwKLWNvbnRhY3RzIGFuZCBpZGVudGlmaWVycy48L3A+Ci0gPHA+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlNlcnZpY2UgaW5mb3JtYXRpb24uPC9zcGFuPiBJbmZvcm1hdGlvbgotdGhhdCBkZXNjcmliZXMgYSBncm91cCBvZiBXZWIgc2VydmljZXMuIEl0IGlzIGNvbnRhaW5lZCBpbiBhICA8dHQgY2xhc3M9InN5c291dCI+YnVzaW5lc3NTZXJ2aWNlPC90dD4gc3RydWN0dXJlLgotVGhlICA8dHQgY2xhc3M9InN5c291dCI+YnVzaW5lc3NTZXJ2aWNlPC90dD4gY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQKLWZhbWlsaWVzIG9mIHRlY2huaWNhbCBzZXJ2aWNlcy7CoCBJdCBncm91cHMgYSBzZXQgb2YgV2ViIHNlcnZpY2VzIHJlbGF0ZWQKLXRvIGVpdGhlciBhIGJ1c2luZXNzIHByb2Nlc3Mgb3IgZ3JvdXAgb2Ygc2VydmljZXMuPC9wPgotIDxwPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5CaW5kaW5nCi1pbmZvcm1hdGlvbi48L3NwYW4+IEluZm9ybWF0aW9uIHJlcHJlc2VudGVkIGJ5IHRoZSAgPHR0IGNsYXNzPSJzeXNvdXQiPmJpbmRpbmdUZW1wbGF0ZTwvdHQ+IHN0cnVjdHVyZS4KLVRoZSAgPHR0IGNsYXNzPSJzeXNvdXQiPmJpbmRpbmdUZW1wbGF0ZTwvdHQ+IGhvbGRzIHRlY2huaWNhbCBpbmZvcm1hdGlvbgotZm9yIGRldGVybWluaW5nIHRoZSBlbnRyeSBwb2ludCBhbmQgY29uc3RydWN0aW9uIHNwZWNpZmljYXRpb25zIGZvciBpbnZva2luZwotYSBXZWIgc2VydmljZS7CoCBUaGUgIDx0dCBjbGFzcz0ic3lzb3V0Ij5iaW5kaW5nVGVtcGxhdGU8L3R0PiBwcm92aWRlcwotdGhlIFdlYiBzZXJ2aWNlIGRlc2NyaXB0aW9ucyByZWxldmFudCBmb3IgYXBwbGljYXRpb24gZGV2ZWxvcGVycyB0aGF0IHdhbnQKLXRvIGZpbmQgYW5kIGludm9rZSBhIFdlYiBzZXJ2aWNlLsKgIFRoZSAgPHR0IGNsYXNzPSJzeXNvdXQiPmJpbmRpbmdUZW1wbGF0ZTwvdHQ+IHBvaW50cwotdG8gYSBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIGRlc2NyaXB0aW9ucywgZm9yIGV4YW1wbGUgdmlhIGEgVVJMLjwvcD4KLSA8cD4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+SW5mb3JtYXRpb24KLWRlc2NyaWJpbmcgdGhlIHNwZWNpZmljYXRpb25zIGZvciBzZXJ2aWNlcy48L3NwYW4+IE1ldGFkYXRhIGFib3V0IHRoZQotdmFyaW91cyBzcGVjaWZpY2F0aW9ucyBpbXBsZW1lbnRlZCBieSBhIGdpdmVuIFdlYiBzZXJ2aWNlIHJlcHJlc2VudGVkIGJ5IHRoZQotIDx0dCBjbGFzcz0ic3lzb3V0Ij50TW9kZWw8L3R0Pi4gVGhlICA8dHQgY2xhc3M9InN5c291dCI+dE1vZGVsPC90dD4gcHJvdmlkZXMKLWEgcmVmZXJlbmNlIHN5c3RlbSB0byBhc3Npc3QgaW4gdGhlIGRpc2NvdmVyeSBvZiBXZWIgc2VydmljZXMuPC9wPgotIDwvYmxvY2txdW90ZT4KLTxwPkZpZ3VyZQotMS4gUmVsYXRpb25zaGlwIGJldHdlZW4gZGF0YSB0eXBlcy48L3A+Ci08cD4gPGltZyBzcmM9Ii4uL2ltYWdlcy91ZGRpLmdpZiIgYWx0PSJGaWd1cmUgMSBpbGx1c3RyYXRlcyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGJ1c2luZXNzIGVudGl0eSwgYnVzaW5lc3Mgc2VydmljZSwgYmluZGluZyB0ZW1wbGF0ZSwgYW5kIHRtb2RlbC4iIC8+IDwvcD4KLTxwPkVhY2ggY2hpbGQgc3RydWN0dXJlIGhhcyBhIHVuaXF1ZQotcGFyZW50IHN0cnVjdHVyZS4gVGhpcyBtZWFucyB0aGF0IGVhY2ggIDx0dCBjbGFzcz0ic3lzb3V0Ij5idXNpbmVzc1NlcnZpY2U8L3R0PiBzdHJ1Y3R1cmUKLWlzIG93bmVkIGJ5IGEgc3BlY2lmaWMgIDx0dCBjbGFzcz0ic3lzb3V0Ij5idXNpbmVzc0VudGl0eTwvdHQ+LiBJbiB0dXJuLAotZWFjaCAgPHR0IGNsYXNzPSJzeXNvdXQiPmJpbmRpbmdUZW1wbGF0ZTwvdHQ+IGlzIG93bmVkIGJ5IGEgc3BlY2lmaWMKLSA8dHQgY2xhc3M9InN5c291dCI+YnVzaW5lc3NTZXJ2aWNlPC90dD4uIEVhY2ggIDx0dCBjbGFzcz0ic3lzb3V0Ij5iaW5kaW5nVGVtcGxhdGU8L3R0PiBzdHJ1Y3R1cmUKLXJlZmVyZW5jZXMgdG8gdW5pcXVlIGluc3RhbmNlcyBvZiAgPHR0IGNsYXNzPSJzeXNvdXQiPnRNb2RlbDwvdHQ+IHN0cnVjdHVyZXM7Ci1ob3dldmVyLCBzaW5jZSByZWZlcmVuY2VzIGNhbiBiZSByZXBlYXRlZCB3aXRoaW4gc2V2ZXJhbCBwYXJlbnQgc3RydWN0dXJlcywKLXRoZXJlIGNhbiBiZSBtYW55IHJlZmVyZW5jZXMgdG8gIDx0dCBjbGFzcz0ic3lzb3V0Ij50TW9kZWxzPC90dD4gZnJvbQotZGlmZmVyZW50IEVudGl0eS1TZXJ2aWNlLVRlbXBsYXRlIHBhcmVudHMsIGFzIHNlZW4gaW4gRmlndXJlIDIuPC9wPgotPHA+RmlndXJlCi0yLiBSZWZlcmVuY2VzIHRvIHRNb2RlbC48L3A+Ci08cD4gPGltZyBzcmM9Ii4uL2ltYWdlcy91ZGRpcmVmLmdpZiIgYWx0PSJGaWd1cmUgMiBpbGx1c3RyYXRlcyB0aGUgbXVsdGlwbGUgcmVmZXJlbmNlcyB0byBhIHRNb2RlbC4iIC8+IDwvcD4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48aDQgY2xhc3M9InNlY3Rpb250aXRsZSI+UHVibGlzaGVyIGFzc2VydGlvbnM8L2g0PjxwPkEgcHVibGlzaGVyIGFzc2VydGlvbiBpcyBhCi13YXkgaW4gVURESSB0byBhc3NvY2lhdGUgYnVzaW5lc3NFbnRpdHkgc3RydWN0dXJlcy4gVGhlIHB1Ymxpc2hlciBhc3NlcnRpb24KLWRlZmluZXMgYSBncm91cCBvZiBidXNpbmVzc0VudGl0eSBzdHJ1Y3R1cmVzLiBNYW55IGJ1c2luZXNzZXMgYXJlIG5vdCBlZmZlY3RpdmVseQotcmVwcmVzZW50ZWQgYnkgYSBzaW5nbGUgYnVzaW5lc3NFbnRpdHkuIEEgcHVibGlzaGVyIGFzc2VydGlvbiBhbGxvd3MgZm9yIHRoZQotYXNzb2NpYXRpb24gYmV0d2VlbiBidXNpbmVzc0VudGl0eSBzdHJ1Y3R1cmVzLiBGb3IgZXhhbXBsZSwgYSBsYXJnZSBjb21wYW55Ci1tYXkgaGF2ZSBzZXZlcmFsIHN1YnNpZGlhcmllcyB0aGF0IGhhdmUgZGlmZmVyZW50IGRlc2NyaXB0aW9ucyBidXQgYXJlIHN0aWxsCi1jbG9zZWx5IGNvdXBsZWQgYW5kIHdhbnQgdG8gbWFrZSB0aGVpciByZWxhdGlvbnNoaXBzIHZpc2libGUgaW4gVURESSByZWdpc3RyaWVzLjwvcD4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48aDQgY2xhc3M9InNlY3Rpb250aXRsZSI+U2VydmljZSBwcm9qZWN0aW9uczwvaDQ+PHA+QSBzZXJ2aWNlIHByb2plY3Rpb24gZW5hYmxlcwotYSBidXNpbmVzcyBlbnRpdHkgdG8gcmVmZXJlbmNlIGEgc2VydmljZSB0aGF0IHdhcyBwdWJsaXNoZWQgYnkgYW5vdGhlciBidXNpbmVzcwotZW50aXR5LiBCeSB1c2luZyB0aGUgYnVzaW5lc3NTZXJ2aWNlIHN0cnVjdHVyZSBhcyBhIHByb2plY3Rpb24gdG8gYW4gYWxyZWFkeQotcHVibGlzaGVkIGJ1c2luZXNzU2VydmljZSwgYnVzaW5lc3NlcyBjYW4gc2hhcmUgb3IgcmV1c2Ugc2VydmljZXMuIFNlcnZpY2UKLXByb2plY3Rpb25zIGFyZSBtYW5hZ2VkIGNlbnRyYWxseSBhcyBwYXJ0IG9mIHRoZSByZWZlcmVuY2luZyBidXNpbmVzc0VudGl0eS4KLVRoaXMgbWVhbnMgdGhhdCBhbnkgY2hhbmdlcyBtYWRlIHRvIHRoZSBidXNpbmVzc1NlcnZpY2UgYnkgYW55IG9mIHRoZSByZWZlcmVuY2luZwotYnVzaW5lc3NFbnRpdHkgc3RydWN0dXJlcyBhcmUgdmFsaWQgZm9yIGFsbCBvZiB0aGUgcmVmZXJlbmNpbmcgYnVzaW5lc3NFbnRpdHkKLXN0cnVjdHVyZXMuPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sIj4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIj5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgVGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi90YXNrcy90dWRkaWV4cC5odG1sIiB0aXRsZT0iVGhyb3VnaCBVRERJIGFuZCBXU0lMLCBvdGhlciBhcHBsaWNhdGlvbnMgY2FuIGRpc2NvdmVyIFdTREwgZG9jdW1lbnRzIGFuZCBiaW5kIHdpdGggdGhlbSB0byBleGVjdXRlIHRyYW5zYWN0aW9ucyBvciBwZXJmb3JtIG90aGVyIGJ1c2luZXNzIHByb2Nlc3Nlcy4iPlB1Ymxpc2hpbmcgV2ViIHNlcnZpY2VzIGFuZCBidXNpbmVzcyBlbnRpdGllczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGFkZHJlZy5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGFkZHJlZy5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDE1ZWNjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRyZWcuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iCi0gInRhc2suZHRkIj4KLTx0YXNrIGlkPSJ0YWRkcmVnIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkFkZGluZyBhIFJlZ2lzdHJ5IHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L3RpdGxlPgotPHRpdGxlYWx0cz4KLTxzZWFyY2h0aXRsZT5BZGRpbmcgYSBSZWdpc3RyeSB0byB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9zZWFyY2h0aXRsZT4KLTwvdGl0bGVhbHRzPgotPHNob3J0ZGVzYz5BbHRob3VnaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGNvbWVzIHBvcHVsYXRlZCB3aXRoIHNldmVyYWwKLXJlZ2lzdHJpZXMsIHlvdSBjYW4gYWxzbyBhZGQgYWRkaXRpb25hbCByZWdpc3RyaWVzIHRvIHlvdXIgbGlzdCBvZiBmYXZvcml0ZXMuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+YWRkaW5nIGEgcmVnaXN0cnkgdG8gdGhlIFdlYiBTZXJ2aWNlcwotRXhwbG9yZXI8L2luZGV4dGVybT48L2luZGV4dGVybT48aW5kZXh0ZXJtPldlYiBTZXJ2aWNlcyBFeHBsb3JlcjxpbmRleHRlcm0+YWRkaW5nCi1hIHJlZ2lzdHJ5PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PGluZGV4dGVybT5yZWdpc3RyaWVzPGluZGV4dGVybT5hZGRpbmcgdG8KLXRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2luZGV4dGVybT48L2luZGV4dGVybT48L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxwcmVyZXE+PHA+UHJlcmVxdWlzaXRlczo8b2w+Ci08bGk+PHhyZWYgaHJlZj0idHJlZy5kaXRhIj5SZWdpc3RlciB3aXRoIGEgcmVnaXN0cnk8L3hyZWY+PC9saT4KLTxsaT48eHJlZiBocmVmPSJ0c3RydGV4cC5kaXRhIj5MYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwveHJlZj48L2xpPgotPC9vbD48L3A+PC9wcmVyZXE+Ci08Y29udGV4dD48cD5XaGVuIHlvdSBhcmUgcmVhZHkgdG8gcHVibGlzaCB5b3VyIGJ1c2luZXNzIGVudGl0eSBhbmQgV2ViIHNlcnZpY2UsCi1hZGQgYSBwcm9kdWN0aW9uIHJlZ2lzdHJ5IHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIuIEluIG9yZGVyIHRvIHB1Ymxpc2gKLXlvdXIgYnVzaW5lc3MgZW50aXR5IGFuZCBXZWIgc2VydmljZSB0byBhIHByb2R1Y3Rpb24gcmVnaXN0cnksIHlvdSBtdXN0IGZpcnN0Ci1yZWdpc3RlciB3aXRoIHRoZSByZWdpc3RyeS4gVGhlIHJlZ2lzdHJ5IHdpbGwgcHJvdmlkZSBpbnN0cnVjdGlvbnMgZm9yIHJlZ2lzdGVyaW5nLgotRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gcmVnaXN0cmllcywgcmVmZXIgdG8gIDx4cmVmIGhyZWY9InRyZWcuZGl0YSI+UmVnaXN0ZXJpbmcKLXdpdGggYSByZWdpc3RyeTwveHJlZj4uPC9wPjxwPlRoZSBVRERJIEJ1c2luZXNzIFJlZ2lzdHJ5IGlzIGEgc2V0IG9mIGdsb2JhbAotcmVwbGljYXRlZCByZWdpc3RyaWVzLiBGb3IgYSBsaXN0IG9mIHB1YmxpYyByZWdpc3RyaWVzIHJlZmVyIHRvICA8eHJlZiBocmVmPSJodHRwOi8vd3d3LlVEREkub3JnL3JlZ2lzdGVyLmh0bWwiCi1zY29wZT0iZXh0ZXJuYWwiPnd3dy51ZGRpLm9yZy9yZWdpc3Rlci5odG1sPC94cmVmPjwvcD48cD5UaGUgPHRtIHRtY2xhc3M9ImlibSIKLXRtb3duZXI9IklCTSBDb3Jwb3JhdGlvbiIgdG10eXBlPSJyZWciIHRyYWRlbWFyaz0iSUJNIj5JQk08L3RtPiBVRERJIEJ1c2luZXNzCi1SZWdpc3RyeSBpcyBhIHB1YmxpYyBwcm9kdWN0aW9uIHJlZ2lzdHJ5IG1haW50YWluZWQgYnkgPHRtIHRtY2xhc3M9ImlibSIgdG1vd25lcj0iSUJNIENvcnBvcmF0aW9uIgotdG10eXBlPSJyZWciIHRyYWRlbWFyaz0iSUJNIj5JQk08L3RtPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIDx0bSB0bWNsYXNzPSJpYm0iCi10bW93bmVyPSJJQk0gQ29ycG9yYXRpb24iIHRtdHlwZT0icmVnIiB0cmFkZW1hcms9IklCTSI+SUJNPC90bT4gVURESSBCdXNpbmVzcwotUmVnaXN0cnkgcmVmZXIgdG8gIDx4cmVmIGZvcm1hdD0iaHRtbCIgaHJlZj0iaHR0cDovL3VkZGkuaWJtLmNvbSIgc2NvcGU9ImV4dGVybmFsIj5odHRwOi8vdWRkaS5pYm0uY29tPC94cmVmPjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPlRvIGFkZCBhIFJlZ2lzdHJ5IHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgZnJvbSBGYXZvcml0ZXMsCi1kbyB0aGUgZm9sbG93aW5nOjwvY21kPgotPHN1YnN0ZXBzPgotPHN1YnN0ZXA+PGNtZD5DbGljayB0aGUgIDx1aWNvbnRyb2w+RmF2b3JpdGVzPC91aWNvbnRyb2w+IGljb24gIDxpbWFnZSBhbHQ9IlBpY3R1cmUgb2YgdGhlIEZhdm9yaXRlcyBpY29uLiIKLWhyZWY9Ii4uL2ltYWdlcy9mYXYuZ2lmIj48L2ltYWdlPiBpbiB0aGUgbWFpbiB0b29sYmFyLjwvY21kPjwvc3Vic3RlcD4KLTxzdWJzdGVwPjxjbWQ+RXhwYW5kICA8dWljb250cm9sPkZhdm9yaXRlIFVEREkgUmVnaXN0cmllczwvdWljb250cm9sPi48L2NtZD4KLTwvc3Vic3RlcD4KLTxzdWJzdGVwPjxjbWQ+U2VsZWN0IGEgcmVnaXN0cnkgdGhlbiBjbGljayB0aGUgIDx1aWNvbnRyb2w+QWRkIHRvIFVEREkgUGFnZTwvdWljb250cm9sPiBpY29uCi0gPGltYWdlIGFsdD0iUGljdHVyZSBvZiB0aGUgQWRkIHRvIFVEREkgUGFnZSBpY29uLiIgaHJlZj0iLi4vaW1hZ2VzL2FkZHVkZGkuZ2lmIj4KLTwvaW1hZ2U+IGluIHRoZSBBY3Rpb25zIHBhbmUuPC9jbWQ+PC9zdWJzdGVwPgotPC9zdWJzdGVwcz4KLTwvc3RlcD4KLTxzdGVwPjxjbWQ+VG8gYWRkIGEgUmVnaXN0cnkgdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBtYW51YWxseSwgZG8gdGhlCi1mb2xsb3dpbmc6PC9jbWQ+Ci08c3Vic3RlcHM+Ci08c3Vic3RlcD48Y21kPkluIHRoZSBVRERJIE5hdmlnYXRvciBwYW5lLCBjbGljayB0aGUgIDx1aWNvbnRyb2w+VURESSBNYWluPC91aWNvbnRyb2w+IG5vZGUuPC9jbWQ+Ci08L3N1YnN0ZXA+Ci08c3Vic3RlcD48Y21kPkluIHRoZSBBY3Rpb25zIHBhbmUsIGVudGVyIHRoZSBSZWdpc3RyeSBuYW1lIGFuZCBJbnF1aXJ5IFVSTAotb2YgdGhlIHJlZ2lzdHJ5IHlvdSB3YW50IHRvIGFkZC48L2NtZD48L3N1YnN0ZXA+Ci08c3Vic3RlcD48Y21kPkNsaWNrICA8dWljb250cm9sPkdvPC91aWNvbnRyb2w+LjwvY21kPjwvc3Vic3RlcD4KLTwvc3Vic3RlcHM+Ci08L3N0ZXA+Ci08L3N0ZXBzPgotPC90YXNrYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+IFRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vY29uY2VwdHMvY3VkZGkuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+Ci08bGluayBocmVmPSJ0dWRkaWV4cC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0c3RydGV4cC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0cmVnLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgUmVmZXJlbmNlPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL3JlZi9ydWRkaS5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGFkZHJlZy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGFkZHJlZy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NWIyMmQ0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRyZWcuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwNyIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJBZGRpbmcgYSBSZWdpc3RyeSB0byB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IkFsdGhvdWdoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgY29tZXMgcG9wdWxhdGVkIHdpdGggc2V2ZXJhbCByZWdpc3RyaWVzLCB5b3UgY2FuIGFsc28gYWRkIGFkZGl0aW9uYWwgcmVnaXN0cmllcyB0byB5b3VyIGxpc3Qgb2YgZmF2b3JpdGVzLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJBbHRob3VnaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGNvbWVzIHBvcHVsYXRlZCB3aXRoIHNldmVyYWwgcmVnaXN0cmllcywgeW91IGNhbiBhbHNvIGFkZCBhZGRpdGlvbmFsIHJlZ2lzdHJpZXMgdG8geW91ciBsaXN0IG9mIGZhdm9yaXRlcy4iIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIGFkZGluZyBhIHJlZ2lzdHJ5IHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIsIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciwgYWRkaW5nIGEgcmVnaXN0cnksIHJlZ2lzdHJpZXMsIGFkZGluZyB0byB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzLCBhZGRpbmcgYSByZWdpc3RyeSB0byB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLCBXZWIgU2VydmljZXMgRXhwbG9yZXIsIGFkZGluZyBhIHJlZ2lzdHJ5LCByZWdpc3RyaWVzLCBhZGRpbmcgdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N1ZGRpLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InR1ZGRpZXhwLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InRzdHJ0ZXhwLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InRyZWcuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vcmVmL3J1ZGRpLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idGFkZHJlZyIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkFkZGluZyBhIFJlZ2lzdHJ5IHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InRhZGRyZWciPjxhIG5hbWU9InRhZGRyZWciPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkFkZGluZyBhIFJlZ2lzdHJ5IHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2gxPgotCi0KLQotCi08ZGl2PjxwPkFsdGhvdWdoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgY29tZXMgcG9wdWxhdGVkIHdpdGggc2V2ZXJhbAotcmVnaXN0cmllcywgeW91IGNhbiBhbHNvIGFkZCBhZGRpdGlvbmFsIHJlZ2lzdHJpZXMgdG8geW91ciBsaXN0IG9mIGZhdm9yaXRlcy48L3A+Ci0KLTxkaXYgY2xhc3M9InAiPjxkaXYgY2xhc3M9InAiPlByZXJlcXVpc2l0ZXM6PG9sPgotPGxpPjxhIGhyZWY9InRyZWcuaHRtbCI+UmVnaXN0ZXIgd2l0aCBhIHJlZ2lzdHJ5PC9hPjwvbGk+Ci0KLTxsaT48YSBocmVmPSJ0c3RydGV4cC5odG1sIj5MYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYT48L2xpPgotCi08L29sPgotPC9kaXY+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+V2hlbiB5b3UgYXJlIHJlYWR5IHRvIHB1Ymxpc2ggeW91ciBidXNpbmVzcyBlbnRpdHkgYW5kIFdlYiBzZXJ2aWNlLAotYWRkIGEgcHJvZHVjdGlvbiByZWdpc3RyeSB0byB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLiBJbiBvcmRlciB0byBwdWJsaXNoCi15b3VyIGJ1c2luZXNzIGVudGl0eSBhbmQgV2ViIHNlcnZpY2UgdG8gYSBwcm9kdWN0aW9uIHJlZ2lzdHJ5LCB5b3UgbXVzdCBmaXJzdAotcmVnaXN0ZXIgd2l0aCB0aGUgcmVnaXN0cnkuIFRoZSByZWdpc3RyeSB3aWxsIHByb3ZpZGUgaW5zdHJ1Y3Rpb25zIGZvciByZWdpc3RlcmluZy4KLUZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHJlZ2lzdHJpZXMsIHJlZmVyIHRvICA8YSBocmVmPSJ0cmVnLmh0bWwiPlJlZ2lzdGVyaW5nIHdpdGggYSByZWdpc3RyeTwvYT4uPC9wPgotPHA+VGhlIFVEREkgQnVzaW5lc3MgUmVnaXN0cnkgaXMgYSBzZXQgb2YgZ2xvYmFsCi1yZXBsaWNhdGVkIHJlZ2lzdHJpZXMuIEZvciBhIGxpc3Qgb2YgcHVibGljIHJlZ2lzdHJpZXMgcmVmZXIgdG8gIDxhIGhyZWY9Imh0dHA6Ly93d3cuVURESS5vcmcvcmVnaXN0ZXIuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPnd3dy51ZGRpLm9yZy9yZWdpc3Rlci5odG1sPC9hPjwvcD4KLTxwPlRoZSBJQk08c3VwPsKuPC9zdXA+IFVEREkgQnVzaW5lc3MKLVJlZ2lzdHJ5IGlzIGEgcHVibGljIHByb2R1Y3Rpb24gcmVnaXN0cnkgbWFpbnRhaW5lZCBieSBJQk0uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBJQk0gVURESSBCdXNpbmVzcwotUmVnaXN0cnkgcmVmZXIgdG8gIDxhIGhyZWY9Imh0dHA6Ly91ZGRpLmlibS5jb20iIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vdWRkaS5pYm0uY29tPC9hPjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGk+PHNwYW4+VG8gYWRkIGEgUmVnaXN0cnkgdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBmcm9tIEZhdm9yaXRlcywKLWRvIHRoZSBmb2xsb3dpbmc6PC9zcGFuPgotPG9sIHR5cGU9ImEiPgotPGxpPjxzcGFuPkNsaWNrIHRoZSAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RmF2b3JpdGVzPC9zcGFuPiBpY29uICA8aW1nIHNyYz0iLi4vaW1hZ2VzL2Zhdi5naWYiIGFsdD0iUGljdHVyZSBvZiB0aGUgRmF2b3JpdGVzIGljb24uIiAvPiBpbiB0aGUgbWFpbiB0b29sYmFyLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+RXhwYW5kICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5GYXZvcml0ZSBVRERJIFJlZ2lzdHJpZXM8L3NwYW4+Ljwvc3Bhbj4KLTwvbGk+Ci0KLTxsaT48c3Bhbj5TZWxlY3QgYSByZWdpc3RyeSB0aGVuIGNsaWNrIHRoZSAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QWRkIHRvIFVEREkgUGFnZTwvc3Bhbj4gaWNvbgotIDxpbWcgc3JjPSIuLi9pbWFnZXMvYWRkdWRkaS5naWYiIGFsdD0iUGljdHVyZSBvZiB0aGUgQWRkIHRvIFVEREkgUGFnZSBpY29uLiIgLz4gaW4gdGhlIEFjdGlvbnMgcGFuZS48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPC9saT4KLQotPGxpPjxzcGFuPlRvIGFkZCBhIFJlZ2lzdHJ5IHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgbWFudWFsbHksIGRvIHRoZQotZm9sbG93aW5nOjwvc3Bhbj4KLTxvbCB0eXBlPSJhIj4KLTxsaT48c3Bhbj5JbiB0aGUgVURESSBOYXZpZ2F0b3IgcGFuZSwgY2xpY2sgdGhlICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5VRERJIE1haW48L3NwYW4+IG5vZGUuPC9zcGFuPgotPC9saT4KLQotPGxpPjxzcGFuPkluIHRoZSBBY3Rpb25zIHBhbmUsIGVudGVyIHRoZSBSZWdpc3RyeSBuYW1lIGFuZCBJbnF1aXJ5IFVSTAotb2YgdGhlIHJlZ2lzdHJ5IHlvdSB3YW50IHRvIGFkZC48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkNsaWNrICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Hbzwvc3Bhbj4uPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTwvbGk+Ci0KLTwvb2w+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sIj4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIj5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N1ZGRpLmh0bWwiIHRpdGxlPSJVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSBzcGVjaWZpY2F0aW9uIGRlZmluZXMgYSB3YXkgdG8gcHVibGlzaCBhbmQgZGlzY292ZXIgaW5mb3JtYXRpb24gYWJvdXQgV2ViIHNlcnZpY2VzLiI+VW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSk8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgVGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJ0dWRkaWV4cC5odG1sIiB0aXRsZT0iVGhyb3VnaCBVRERJIGFuZCBXU0lMLCBvdGhlciBhcHBsaWNhdGlvbnMgY2FuIGRpc2NvdmVyIFdTREwgZG9jdW1lbnRzIGFuZCBiaW5kIHdpdGggdGhlbSB0byBleGVjdXRlIHRyYW5zYWN0aW9ucyBvciBwZXJmb3JtIG90aGVyIGJ1c2luZXNzIHByb2Nlc3Nlcy4iPlB1Ymxpc2hpbmcgV2ViIHNlcnZpY2VzIGFuZCBidXNpbmVzcyBlbnRpdGllczwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idHN0cnRleHAuaHRtbCIgdGl0bGU9IlRoZSBXZWIgc2VydmljZXMgdG9vbHMgYWxsb3dzIHlvdSB0byBsYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBpbiBzZXZlcmFsIHdheXMuIj5MYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idHJlZy5odG1sIiB0aXRsZT0iSW4gb3JkZXIgdG8gcHVibGlzaCB5b3VyIGJ1c2luZXNzIGVudGl0eSBhbmQgV2ViIHNlcnZpY2UgdG8gYSBVRERJIHJlZ2lzdHJ5LCB5b3UgbXVzdCBmaXJzdCByZWdpc3RlciB3aXRoIHRoZSByZWdpc3RyeSB0aGF0IHlvdSB3YW50IHRvIHVzZS4iPlJlZ2lzdGVyaW5nIHdpdGggYSBVRERJIHJlZ2lzdHJ5PC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFJlZmVyZW5jZTwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL3JlZi9ydWRkaS5odG1sIiB0aXRsZT0iT25jZSB5b3UgaGF2ZSByZWdpc3RlcmVkIGFuZCBsb2dnZWQgaW4gdG8gdGhlIFVEREkgcmVnaXN0cnkgdGhhdCB5b3Ugd2FudCB0byB1c2UsIHlvdSBjYW4gcmVnaXN0ZXIgeW91ciBXZWIgc2VydmljZS4gUmVnaXN0cmF0aW9uIG9mIGEgc2VydmljZSBpbnZvbHZlcyBmb3VyIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgdHlwZXM6IGJ1c2luZXNzIGluZm9ybWF0aW9uLCBzZXJ2aWNlIGluZm9ybWF0aW9uLCBiaW5kaW5nIGluZm9ybWF0aW9uLCBhbmQgaW5mb3JtYXRpb24gZGVzY3JpYmluZyB0aGUgc3BlY2lmaWNhdGlvbnMgZm9yIHNlcnZpY2VzLiBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZGF0YSB0eXBlcyBpcyBkZXNjcmliZWQgaW4gRmlndXJlIDEuIj5EYXRhIHN0cnVjdHVyZSB0eXBlcyAoVURESSByZWdpc3RyeSk8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3Rhc3NlcnQuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3Rhc3NlcnQuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQ5OGRhNy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90YXNzZXJ0LmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICJ0YXNrLmR0ZCI+Ci08dGFzayBpZD0idGFzc2VydCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5NYW5hZ2luZyBwdWJsaXNoZXIgYXNzZXJ0aW9uczwvdGl0bGU+Ci08c2hvcnRkZXNjPkEgcHVibGlzaGVyIGFzc2VydGlvbiBpcyBhIHdheSBpbiBVRERJIHRvIGFzc29jaWF0ZSBidXNpbmVzc0VudGl0eQotc3RydWN0dXJlcy4mbmJzcDsgVGhlIHB1Ymxpc2hlciBhc3NlcnRpb24gZGVmaW5lcyBhIGdyb3VwIG9mIGJ1c2luZXNzRW50aXR5Ci1zdHJ1Y3R1cmVzLiBNYW55IGJ1c2luZXNzZXMgYXJlIG5vdCBlZmZlY3RpdmVseSByZXByZXNlbnRlZCBieSBhIHNpbmdsZSBidXNpbmVzc0VudGl0eS4KLUEgcHVibGlzaGVyIGFzc2VydGlvbiBhbGxvd3MgZm9yIGFzc29jaWF0aW9ucyB0byBiZSBmb3JtZWQgYmV0d2VlbiBzZXZlcmFsCi1idXNpbmVzc0VudGl0eSBzdHJ1Y3R1cmVzLiBGb3IgZXhhbXBsZSwgYSBsYXJnZSBjb21wYW55IG1heSBoYXZlIHNldmVyYWwgc3Vic2lkaWFyaWVzCi10aGF0IGhhdmUgZGlmZmVyZW50IGRlc2NyaXB0aW9ucyBidXQgYXJlIHN0aWxsIGNsb3NlbHkgY291cGxlZCBhbmQgd2FudCB0bwotbWFrZSB0aGVpciByZWxhdGlvbnNoaXBzIHZpc2libGUgaW4gVURESSByZWdpc3RyaWVzLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5VRERJPGluZGV4dGVybT5tYW5hZ2luZyBwdWJsaXNoZXIgYXNzZXJ0aW9uczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08cHJlcmVxPlByZXJlcXVpc2l0ZXM6PG9sPgotPGxpPjx4cmVmIGhyZWY9InRyZWcuZGl0YSI+UmVnaXN0ZXIgd2l0aCBhIHJlZ2lzdHJ5PC94cmVmPjwvbGk+Ci08bGk+PHhyZWYgaHJlZj0idHN0cnRleHAuZGl0YSI+TGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L3hyZWY+PC9saT4KLTxsaT48eHJlZiBocmVmPSJ0YWRkcmVnLmRpdGEiPkFkZCB0aGUgcmVnaXN0cnkgdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwveHJlZj48L2xpPgotPC9vbD48L3ByZXJlcT4KLTxjb250ZXh0PjxwPkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHB1Ymxpc2hlciBhc3NlcnRpb25zLCByZWZlciB0byB0aGUgIDx4cmVmCi1ocmVmPSJodHRwOi8vd3d3LnVkZGkub3JnL3NwZWNpZmljYXRpb24uaHRtbCIgc2NvcGU9ImV4dGVybmFsIj5VRERJIFZlcnNpb24KLTIuMCBQcm9ncmFtbWVyJ3MgQVBJIFNwZWNpZmljYXRpb248L3hyZWY+IGFuZCB0aGUgIDx4cmVmIGhyZWY9Imh0dHA6Ly93d3cudWRkaS5vcmcvc3BlY2lmaWNhdGlvbi5odG1sIgotc2NvcGU9ImV4dGVybmFsIj5VRERJIFZlcnNpb24gMi4wIERhdGEgU3RydWN0dXJlIFNwZWNpZmljYXRpb248L3hyZWY+LjwvcD48cD5UbwotbWFuYWdlIHB1Ymxpc2hlciBhc3NlcnRpb25zLCBkbyB0aGUgZm9sbG93aW5nOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPkluIHRoZSBOYXZpZ2F0b3IgcGFuZSwgc2VsZWN0IHRoZSBidXNpbmVzcyBlbnRpdHkgZm9yIHdoaWNoIHlvdQotd2FudCB0byBtYW5hZ2UgcmVmZXJlbmNlZCBidXNpbmVzc2VzLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SW4gdGhlIEFjdGlvbnMgcGFuZSB0b29sYmFyLCBjbGljayB0aGUgIDx1aWNvbnRyb2w+TWFuYWdlIFB1Ymxpc2hlcgotQXNzZXJ0aW9uczwvdWljb250cm9sPiBpY29uICA8aW1hZ2UgYWx0PSJQaWN0dXJlIG9mIHRoZSBNYW5hZ2UgUHVibGlzaGVyIEFzc2VydGlvbnMgaWNvbi4iCi1ocmVmPSIuLi9pbWFnZXMvYnVzYXNzdC5naWYiPjwvaW1hZ2U+LjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+T24gdGhlIE1hbmFnZSBQdWJsaXNoZXIgQXNzZXJ0aW9ucyBwYWdlIHlvdSBjYW4gYWRkLCByZW1vdmUsIGFuZAotbWFpbnRhaW4gcmVsYXRpb25zaGlwcyB3aXRoIG90aGVyIGJ1c2luZXNzIGVudGl0aWVzLjwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08cmVzdWx0PjxwPiA8dWljb250cm9sPkltcG9ydGFudDo8L3VpY29udHJvbD4gQSBidXNpbmVzcyBlbnRpdHkgdGhhdCBpcyByZWZlcmVuY2VkCi1ieSBhbm90aGVyIGJ1c2luZXNzIGVudGl0eSBtdXN0IGluIHR1cm4gcmVmZXJlbmNlIHRoYXQgYnVzaW5lc3MgZW50aXR5IGluCi1vcmRlciB0byBtYWtlIHRoZSBwdWJsaXNoZXIgYXNzZXJ0aW9uIHB1YmxpYy4gQSBvbmUtd2F5IHJlZmVyZW5jZSBpcyBjb25zaWRlcmVkCi1hbiBpbmNvbXBsZXRlIHB1Ymxpc2hlciBhc3NlcnRpb24gYW5kIGlzIHZpc2libGUgb25seSB0byB0aGUgb3duZXIgb2YgdGhlCi1idXNpbmVzcyBlbnRpdHkuPC9wPjwvcmVzdWx0PgotPC90YXNrYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+IFRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vY29uY2VwdHMvY3VkZGkuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+Ci08bGluayBocmVmPSJ0dWRkaWV4cC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0c3RydGV4cC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0cmVnLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgUmVmZXJlbmNlPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL3JlZi9ydWRkaS5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGFzc2VydC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGFzc2VydC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDFiMTc2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3Rhc3NlcnQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA3IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9Ik1hbmFnaW5nIHB1Ymxpc2hlciBhc3NlcnRpb25zIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IkEgcHVibGlzaGVyIGFzc2VydGlvbiBpcyBhIHdheSBpbiBVRERJIHRvIGFzc29jaWF0ZSBidXNpbmVzc0VudGl0eSBzdHJ1Y3R1cmVzLsKgIFRoZSBwdWJsaXNoZXIgYXNzZXJ0aW9uIGRlZmluZXMgYSBncm91cCBvZiBidXNpbmVzc0VudGl0eSBzdHJ1Y3R1cmVzLiBNYW55IGJ1c2luZXNzZXMgYXJlIG5vdCBlZmZlY3RpdmVseSByZXByZXNlbnRlZCBieSBhIHNpbmdsZSBidXNpbmVzc0VudGl0eS4gQSBwdWJsaXNoZXIgYXNzZXJ0aW9uIGFsbG93cyBmb3IgYXNzb2NpYXRpb25zIHRvIGJlIGZvcm1lZCBiZXR3ZWVuIHNldmVyYWwgYnVzaW5lc3NFbnRpdHkgc3RydWN0dXJlcy4gRm9yIGV4YW1wbGUsIGEgbGFyZ2UgY29tcGFueSBtYXkgaGF2ZSBzZXZlcmFsIHN1YnNpZGlhcmllcyB0aGF0IGhhdmUgZGlmZmVyZW50IGRlc2NyaXB0aW9ucyBidXQgYXJlIHN0aWxsIGNsb3NlbHkgY291cGxlZCBhbmQgd2FudCB0byBtYWtlIHRoZWlyIHJlbGF0aW9uc2hpcHMgdmlzaWJsZSBpbiBVRERJIHJlZ2lzdHJpZXMuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkEgcHVibGlzaGVyIGFzc2VydGlvbiBpcyBhIHdheSBpbiBVRERJIHRvIGFzc29jaWF0ZSBidXNpbmVzc0VudGl0eSBzdHJ1Y3R1cmVzLsKgIFRoZSBwdWJsaXNoZXIgYXNzZXJ0aW9uIGRlZmluZXMgYSBncm91cCBvZiBidXNpbmVzc0VudGl0eSBzdHJ1Y3R1cmVzLiBNYW55IGJ1c2luZXNzZXMgYXJlIG5vdCBlZmZlY3RpdmVseSByZXByZXNlbnRlZCBieSBhIHNpbmdsZSBidXNpbmVzc0VudGl0eS4gQSBwdWJsaXNoZXIgYXNzZXJ0aW9uIGFsbG93cyBmb3IgYXNzb2NpYXRpb25zIHRvIGJlIGZvcm1lZCBiZXR3ZWVuIHNldmVyYWwgYnVzaW5lc3NFbnRpdHkgc3RydWN0dXJlcy4gRm9yIGV4YW1wbGUsIGEgbGFyZ2UgY29tcGFueSBtYXkgaGF2ZSBzZXZlcmFsIHN1YnNpZGlhcmllcyB0aGF0IGhhdmUgZGlmZmVyZW50IGRlc2NyaXB0aW9ucyBidXQgYXJlIHN0aWxsIGNsb3NlbHkgY291cGxlZCBhbmQgd2FudCB0byBtYWtlIHRoZWlyIHJlbGF0aW9uc2hpcHMgdmlzaWJsZSBpbiBVRERJIHJlZ2lzdHJpZXMuIiAvPgotPG1ldGEgY29udGVudD0iVURESSwgbWFuYWdpbmcgcHVibGlzaGVyIGFzc2VydGlvbnMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJVRERJLCBtYW5hZ2luZyBwdWJsaXNoZXIgYXNzZXJ0aW9ucyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N1ZGRpLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InR1ZGRpZXhwLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InRzdHJ0ZXhwLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InRyZWcuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vcmVmL3J1ZGRpLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idGFzc2VydCIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPk1hbmFnaW5nIHB1Ymxpc2hlciBhc3NlcnRpb25zPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0YXNzZXJ0Ij48YSBuYW1lPSJ0YXNzZXJ0Ij48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5NYW5hZ2luZyBwdWJsaXNoZXIgYXNzZXJ0aW9uczwvaDE+Ci0KLQotCi08ZGl2PjxwPkEgcHVibGlzaGVyIGFzc2VydGlvbiBpcyBhIHdheSBpbiBVRERJIHRvIGFzc29jaWF0ZSBidXNpbmVzc0VudGl0eQotc3RydWN0dXJlcy7CoCBUaGUgcHVibGlzaGVyIGFzc2VydGlvbiBkZWZpbmVzIGEgZ3JvdXAgb2YgYnVzaW5lc3NFbnRpdHkKLXN0cnVjdHVyZXMuIE1hbnkgYnVzaW5lc3NlcyBhcmUgbm90IGVmZmVjdGl2ZWx5IHJlcHJlc2VudGVkIGJ5IGEgc2luZ2xlIGJ1c2luZXNzRW50aXR5LgotQSBwdWJsaXNoZXIgYXNzZXJ0aW9uIGFsbG93cyBmb3IgYXNzb2NpYXRpb25zIHRvIGJlIGZvcm1lZCBiZXR3ZWVuIHNldmVyYWwKLWJ1c2luZXNzRW50aXR5IHN0cnVjdHVyZXMuIEZvciBleGFtcGxlLCBhIGxhcmdlIGNvbXBhbnkgbWF5IGhhdmUgc2V2ZXJhbCBzdWJzaWRpYXJpZXMKLXRoYXQgaGF2ZSBkaWZmZXJlbnQgZGVzY3JpcHRpb25zIGJ1dCBhcmUgc3RpbGwgY2xvc2VseSBjb3VwbGVkIGFuZCB3YW50IHRvCi1tYWtlIHRoZWlyIHJlbGF0aW9uc2hpcHMgdmlzaWJsZSBpbiBVRERJIHJlZ2lzdHJpZXMuPC9wPgotCi08ZGl2IGNsYXNzPSJwIj5QcmVyZXF1aXNpdGVzOjxvbD4KLTxsaT48YSBocmVmPSJ0cmVnLmh0bWwiPlJlZ2lzdGVyIHdpdGggYSByZWdpc3RyeTwvYT48L2xpPgotCi08bGk+PGEgaHJlZj0idHN0cnRleHAuaHRtbCI+TGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+PC9saT4KLQotPGxpPjxhIGhyZWY9InRhZGRyZWcuaHRtbCI+QWRkIHRoZSByZWdpc3RyeSB0byB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPjwvbGk+Ci0KLTwvb2w+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gb24gcHVibGlzaGVyIGFzc2VydGlvbnMsIHJlZmVyIHRvIHRoZSAgPGEgaHJlZj0iaHR0cDovL3d3dy51ZGRpLm9yZy9zcGVjaWZpY2F0aW9uLmh0bWwiIHRhcmdldD0iX2JsYW5rIj5VRERJIFZlcnNpb24gMi4wIFByb2dyYW1tZXIncyBBUEkgU3BlY2lmaWNhdGlvbjwvYT4gYW5kIHRoZSAgPGEgaHJlZj0iaHR0cDovL3d3dy51ZGRpLm9yZy9zcGVjaWZpY2F0aW9uLmh0bWwiIHRhcmdldD0iX2JsYW5rIj5VRERJIFZlcnNpb24gMi4wIERhdGEgU3RydWN0dXJlIFNwZWNpZmljYXRpb248L2E+LjwvcD4KLTxwPlRvCi1tYW5hZ2UgcHVibGlzaGVyIGFzc2VydGlvbnMsIGRvIHRoZSBmb2xsb3dpbmc6PC9wPgotPC9kaXY+Ci0KLTxvbD4KLTxsaT48c3Bhbj5JbiB0aGUgTmF2aWdhdG9yIHBhbmUsIHNlbGVjdCB0aGUgYnVzaW5lc3MgZW50aXR5IGZvciB3aGljaCB5b3UKLXdhbnQgdG8gbWFuYWdlIHJlZmVyZW5jZWQgYnVzaW5lc3Nlcy48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkluIHRoZSBBY3Rpb25zIHBhbmUgdG9vbGJhciwgY2xpY2sgdGhlICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5NYW5hZ2UgUHVibGlzaGVyCi1Bc3NlcnRpb25zPC9zcGFuPiBpY29uICA8aW1nIHNyYz0iLi4vaW1hZ2VzL2J1c2Fzc3QuZ2lmIiBhbHQ9IlBpY3R1cmUgb2YgdGhlIE1hbmFnZSBQdWJsaXNoZXIgQXNzZXJ0aW9ucyBpY29uLiIgLz4uPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5PbiB0aGUgTWFuYWdlIFB1Ymxpc2hlciBBc3NlcnRpb25zIHBhZ2UgeW91IGNhbiBhZGQsIHJlbW92ZSwgYW5kCi1tYWludGFpbiByZWxhdGlvbnNoaXBzIHdpdGggb3RoZXIgYnVzaW5lc3MgZW50aXRpZXMuPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5JbXBvcnRhbnQ6PC9zcGFuPiBBIGJ1c2luZXNzIGVudGl0eSB0aGF0IGlzIHJlZmVyZW5jZWQKLWJ5IGFub3RoZXIgYnVzaW5lc3MgZW50aXR5IG11c3QgaW4gdHVybiByZWZlcmVuY2UgdGhhdCBidXNpbmVzcyBlbnRpdHkgaW4KLW9yZGVyIHRvIG1ha2UgdGhlIHB1Ymxpc2hlciBhc3NlcnRpb24gcHVibGljLiBBIG9uZS13YXkgcmVmZXJlbmNlIGlzIGNvbnNpZGVyZWQKLWFuIGluY29tcGxldGUgcHVibGlzaGVyIGFzc2VydGlvbiBhbmQgaXMgdmlzaWJsZSBvbmx5IHRvIHRoZSBvd25lciBvZiB0aGUKLWJ1c2luZXNzIGVudGl0eS48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIENvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmh0bWwiPiBUb29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWwiPldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3VkZGkuaHRtbCIgdGl0bGU9IlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpIHNwZWNpZmljYXRpb24gZGVmaW5lcyBhIHdheSB0byBwdWJsaXNoIGFuZCBkaXNjb3ZlciBpbmZvcm1hdGlvbiBhYm91dCBXZWIgc2VydmljZXMuIj5Vbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKTwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9InR1ZGRpZXhwLmh0bWwiIHRpdGxlPSJUaHJvdWdoIFVEREkgYW5kIFdTSUwsIG90aGVyIGFwcGxpY2F0aW9ucyBjYW4gZGlzY292ZXIgV1NETCBkb2N1bWVudHMgYW5kIGJpbmQgd2l0aCB0aGVtIHRvIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIG9yIHBlcmZvcm0gb3RoZXIgYnVzaW5lc3MgcHJvY2Vzc2VzLiI+UHVibGlzaGluZyBXZWIgc2VydmljZXMgYW5kIGJ1c2luZXNzIGVudGl0aWVzPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0c3RydGV4cC5odG1sIiB0aXRsZT0iVGhlIFdlYiBzZXJ2aWNlcyB0b29scyBhbGxvd3MgeW91IHRvIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGluIHNldmVyYWwgd2F5cy4iPkxhdW5jaGluZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0cmVnLmh0bWwiIHRpdGxlPSJJbiBvcmRlciB0byBwdWJsaXNoIHlvdXIgYnVzaW5lc3MgZW50aXR5IGFuZCBXZWIgc2VydmljZSB0byBhIFVEREkgcmVnaXN0cnksIHlvdSBtdXN0IGZpcnN0IHJlZ2lzdGVyIHdpdGggdGhlIHJlZ2lzdHJ5IHRoYXQgeW91IHdhbnQgdG8gdXNlLiI+UmVnaXN0ZXJpbmcgd2l0aCBhIFVEREkgcmVnaXN0cnk8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgUmVmZXJlbmNlPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vcmVmL3J1ZGRpLmh0bWwiIHRpdGxlPSJPbmNlIHlvdSBoYXZlIHJlZ2lzdGVyZWQgYW5kIGxvZ2dlZCBpbiB0byB0aGUgVURESSByZWdpc3RyeSB0aGF0IHlvdSB3YW50IHRvIHVzZSwgeW91IGNhbiByZWdpc3RlciB5b3VyIFdlYiBzZXJ2aWNlLiBSZWdpc3RyYXRpb24gb2YgYSBzZXJ2aWNlIGludm9sdmVzIGZvdXIgY29yZSBkYXRhIHN0cnVjdHVyZSB0eXBlczogYnVzaW5lc3MgaW5mb3JtYXRpb24sIHNlcnZpY2UgaW5mb3JtYXRpb24sIGJpbmRpbmcgaW5mb3JtYXRpb24sIGFuZCBpbmZvcm1hdGlvbiBkZXNjcmliaW5nIHRoZSBzcGVjaWZpY2F0aW9ucyBmb3Igc2VydmljZXMuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBkYXRhIHR5cGVzIGlzIGRlc2NyaWJlZCBpbiBGaWd1cmUgMS4iPkRhdGEgc3RydWN0dXJlIHR5cGVzIChVRERJIHJlZ2lzdHJ5KTwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGJrbXJrLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90YmttcmsuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTlkYzY5MC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90YmttcmsuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iCi0gInRhc2suZHRkIj4KLTx0YXNrIGlkPSJ0YmttcmsiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+QWRkaW5nIGEgcmVnaXN0cnksIGJ1c2luZXNzIGVudGl0eSwgYnVzaW5lc3Mgc2VydmljZSwgc2VydmljZSBpbnRlcmZhY2UsCi1XU0lMLCBvciBXU0RMIHNlcnZpY2UgdG8gRmF2b3JpdGVzPC90aXRsZT4KLTx0aXRsZWFsdHM+Ci08c2VhcmNodGl0bGU+QWRkaW5nIGEgcmVnaXN0cnksIGJ1c2luZXNzIGVudGl0eSwgYnVzaW5lc3Mgc2VydmljZSwgc2VydmljZQotaW50ZXJmYWNlLCBXU0lMLCBvciBXU0RMIHNlcnZpY2UgdG8gRmF2b3JpdGVzPC9zZWFyY2h0aXRsZT4KLTwvdGl0bGVhbHRzPgotPHNob3J0ZGVzYz5Zb3UgY2FuIGFkZCBhIHJlZ2lzdHJ5LCBidXNpbmVzcyBlbnRpdHksIGJ1c2luZXNzIHNlcnZpY2UsIHNlcnZpY2UKLWludGVyZmFjZSwgV1NJTCwgb3IgV1NETCBzZXJ2aWNlIHRvIHRoZSBXZWIgU2VydmljZSBFeHBsb3JlciBGYXZvcml0ZXMgaWYKLXlvdSBwbGFuIHRvIGFjY2VzcyB0aGVtIGluIHRoZSBmdXR1cmUuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPldlYiBTZXJ2aWNlIEV4cGxvcmVyPGluZGV4dGVybT5hZGRpbmcgRmF2b3JpdGVzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPldTSUw8aW5kZXh0ZXJtPmFkZGluZyB0byBGYXZvcml0ZXM8L2luZGV4dGVybT48L2luZGV4dGVybT48aW5kZXh0ZXJtPldTREw8aW5kZXh0ZXJtPmFkZGluZwotdG8gRmF2b3JpdGVzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08cHJlcmVxPlByZXJlcXVpc2l0ZTogIDx1bD4KLTxsaT48eHJlZiBocmVmPSJ0c3RydGV4cC5kaXRhIj5MYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwveHJlZj48L2xpPgotPC91bD48L3ByZXJlcT4KLTxjb250ZXh0PjxwPlRvIGFkZCBhIHJlZ2lzdHJ5LCBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBzZXJ2aWNlIGludGVyZmFjZSwKLVdTSUwsIG9yIFdTREwgdG8gRmF2b3JpdGVzIHVzaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI6PC9wPjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+TmF2aWdhdGUgdGhyb3VnaCB0aGUgcmVnaXN0cnkgaGllcmFyY2h5IHRvIGZpbmQgdGhlIHJlZ2lzdHJ5LCBidXNpbmVzcwotZW50aXR5LCBXZWIgc2VydmljZSwgc2VydmljZSBpbnRlcmZhY2Ugb3IgdGhlIFdTSUwgcGFnZSB0byBmaW5kIHRoZSBXU0lMIG9yCi1XU0RMIHNlcnZpY2UgeW91IHdhbnQgdG8gYWRkIHRvIEZhdm9yaXRlcy48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPlNlbGVjdCB0aGUgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgc2VydmljZSBpbnRlcmZhY2UsIFdTSUwsCi1vciBXU0RMIHNlcnZpY2UuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgQWN0aW9ucyBpY29uIGJhciwgY2xpY2sgdGhlICA8dWljb250cm9sPkFkZCB0byBmYXZvcml0ZXM8L3VpY29udHJvbD4gaWNvbgotIDxpbWFnZSBhbHQ9IlBpY3R1cmUgb2YgdGhlIEFkZCB0byBmYXZvcml0ZXMgaWNvbi4iIGhyZWY9Ii4uL2ltYWdlcy9hZGRmYXYuZ2lmIj4KLTwvaW1hZ2U+LjwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08cmVzdWx0PjxwPkFueSBmYXZvcml0ZXMgdGhhdCB5b3UgYWRkIGFyZSBzYXZlZCBieSB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyCi10byZuYnNwOzwvcD48cD4gPHZhcm5hbWU+WDwvdmFybmFtZT46XHdvcmtzcGFjZVwubWV0YWRhdGFcLnBsdWdpbnNcY29tLmlibS5ldG9vbHMud2Vic2VydmljZS5leHBsb3JlclxmYXZvcml0ZXMud3NpbDwvcD48cD5XaGVyZQotIDx2YXJuYW1lPlg8L3Zhcm5hbWU+IGlzIHRoZSBkaXJlY3Rvcnkgd2hlcmUgeW91ciB3b3Jrc3BhY2UgZm9sZGVyIGlzIGxvY2F0ZWQuCi1JZiB5b3UgYXJlIG1pZ3JhdGluZyBmcm9tIGFuIGVhcmxpZXIgdmVyc2lvbiBvZiB0aGUgcHJvZHVjdCwgeW91ciBmYXZvcml0ZXMKLXdpbGwgYmUgYXV0b21hdGljYWxseSBtaWdyYXRlZCB0byB0aGlzIGxvY2F0aW9uLjwvcD48L3Jlc3VsdD4KLTwvdGFza2JvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBDb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PiBUb29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uL2NvbmNlcHRzL2N1ZGRpLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgVGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0idHVkZGlleHAuZGl0YSI+PC9saW5rPgotPGxpbmsgaHJlZj0idHN0cnRleHAuZGl0YSI+PC9saW5rPgotPGxpbmsgaHJlZj0idHJlZy5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFJlZmVyZW5jZTwvdGl0bGU+Ci08bGluayBocmVmPSIuLi9yZWYvcnVkZGkuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvdGFzaz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3Ria21yay5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGJrbXJrLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3NDZjZjIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGJrbXJrLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwNyIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJBZGRpbmcgYSByZWdpc3RyeSwgYnVzaW5lc3MgZW50aXR5LCBidXNpbmVzcyBzZXJ2aWNlLCBzZXJ2aWNlIGludGVyZmFjZSwgV1NJTCwgb3IgV1NETCBzZXJ2aWNlIHRvIEZhdm9yaXRlcyIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJZb3UgY2FuIGFkZCBhIHJlZ2lzdHJ5LCBidXNpbmVzcyBlbnRpdHksIGJ1c2luZXNzIHNlcnZpY2UsIHNlcnZpY2UgaW50ZXJmYWNlLCBXU0lMLCBvciBXU0RMIHNlcnZpY2UgdG8gdGhlIFdlYiBTZXJ2aWNlIEV4cGxvcmVyIEZhdm9yaXRlcyBpZiB5b3UgcGxhbiB0byBhY2Nlc3MgdGhlbSBpbiB0aGUgZnV0dXJlLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJZb3UgY2FuIGFkZCBhIHJlZ2lzdHJ5LCBidXNpbmVzcyBlbnRpdHksIGJ1c2luZXNzIHNlcnZpY2UsIHNlcnZpY2UgaW50ZXJmYWNlLCBXU0lMLCBvciBXU0RMIHNlcnZpY2UgdG8gdGhlIFdlYiBTZXJ2aWNlIEV4cGxvcmVyIEZhdm9yaXRlcyBpZiB5b3UgcGxhbiB0byBhY2Nlc3MgdGhlbSBpbiB0aGUgZnV0dXJlLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IldlYiBTZXJ2aWNlIEV4cGxvcmVyLCBhZGRpbmcgRmF2b3JpdGVzLCBXU0lMLCBhZGRpbmcgdG8gRmF2b3JpdGVzLCBXU0RMLCBhZGRpbmcgdG8gRmF2b3JpdGVzIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV2ViIFNlcnZpY2UgRXhwbG9yZXIsIGFkZGluZyBGYXZvcml0ZXMsIFdTSUwsIGFkZGluZyB0byBGYXZvcml0ZXMsIFdTREwsIGFkZGluZyB0byBGYXZvcml0ZXMiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9jb25jZXB0cy9jdWRkaS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0dWRkaWV4cC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0c3RydGV4cC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0cmVnLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3JlZi9ydWRkaS5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRia21yayIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkFkZGluZyBhIHJlZ2lzdHJ5LCBidXNpbmVzcyBlbnRpdHksIGJ1c2luZXNzIHNlcnZpY2UsIHNlcnZpY2UKLWludGVyZmFjZSwgV1NJTCwgb3IgV1NETCBzZXJ2aWNlIHRvIEZhdm9yaXRlczwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idGJrbXJrIj48YSBuYW1lPSJ0YmttcmsiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkFkZGluZyBhIHJlZ2lzdHJ5LCBidXNpbmVzcyBlbnRpdHksIGJ1c2luZXNzIHNlcnZpY2UsIHNlcnZpY2UgaW50ZXJmYWNlLAotV1NJTCwgb3IgV1NETCBzZXJ2aWNlIHRvIEZhdm9yaXRlczwvaDE+Ci0KLQotCi0KLTxkaXY+PHA+WW91IGNhbiBhZGQgYSByZWdpc3RyeSwgYnVzaW5lc3MgZW50aXR5LCBidXNpbmVzcyBzZXJ2aWNlLCBzZXJ2aWNlCi1pbnRlcmZhY2UsIFdTSUwsIG9yIFdTREwgc2VydmljZSB0byB0aGUgV2ViIFNlcnZpY2UgRXhwbG9yZXIgRmF2b3JpdGVzIGlmCi15b3UgcGxhbiB0byBhY2Nlc3MgdGhlbSBpbiB0aGUgZnV0dXJlLjwvcD4KLQotPGRpdiBjbGFzcz0icCI+UHJlcmVxdWlzaXRlOiAgPHVsPgotPGxpPjxhIGhyZWY9InRzdHJ0ZXhwLmh0bWwiPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPjwvbGk+Ci0KLTwvdWw+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VG8gYWRkIGEgcmVnaXN0cnksIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIHNlcnZpY2UgaW50ZXJmYWNlLAotV1NJTCwgb3IgV1NETCB0byBGYXZvcml0ZXMgdXNpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlcjo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpPjxzcGFuPk5hdmlnYXRlIHRocm91Z2ggdGhlIHJlZ2lzdHJ5IGhpZXJhcmNoeSB0byBmaW5kIHRoZSByZWdpc3RyeSwgYnVzaW5lc3MKLWVudGl0eSwgV2ViIHNlcnZpY2UsIHNlcnZpY2UgaW50ZXJmYWNlIG9yIHRoZSBXU0lMIHBhZ2UgdG8gZmluZCB0aGUgV1NJTCBvcgotV1NETCBzZXJ2aWNlIHlvdSB3YW50IHRvIGFkZCB0byBGYXZvcml0ZXMuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5TZWxlY3QgdGhlIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIHNlcnZpY2UgaW50ZXJmYWNlLCBXU0lMLAotb3IgV1NETCBzZXJ2aWNlLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+SW4gdGhlIEFjdGlvbnMgaWNvbiBiYXIsIGNsaWNrIHRoZSAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QWRkIHRvIGZhdm9yaXRlczwvc3Bhbj4gaWNvbgotIDxpbWcgc3JjPSIuLi9pbWFnZXMvYWRkZmF2LmdpZiIgYWx0PSJQaWN0dXJlIG9mIHRoZSBBZGQgdG8gZmF2b3JpdGVzIGljb24uIiAvPi48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+QW55IGZhdm9yaXRlcyB0aGF0IHlvdSBhZGQgYXJlIHNhdmVkIGJ5IHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIKLXRvwqA8L3A+Ci08cD4gPHZhciBjbGFzcz0idmFybmFtZSI+WDwvdmFyPjpcd29ya3NwYWNlXC5tZXRhZGF0YVwucGx1Z2luc1xjb20uaWJtLmV0b29scy53ZWJzZXJ2aWNlLmV4cGxvcmVyXGZhdm9yaXRlcy53c2lsPC9wPgotPHA+V2hlcmUKLSA8dmFyIGNsYXNzPSJ2YXJuYW1lIj5YPC92YXI+IGlzIHRoZSBkaXJlY3Rvcnkgd2hlcmUgeW91ciB3b3Jrc3BhY2UgZm9sZGVyIGlzIGxvY2F0ZWQuCi1JZiB5b3UgYXJlIG1pZ3JhdGluZyBmcm9tIGFuIGVhcmxpZXIgdmVyc2lvbiBvZiB0aGUgcHJvZHVjdCwgeW91ciBmYXZvcml0ZXMKLXdpbGwgYmUgYXV0b21hdGljYWxseSBtaWdyYXRlZCB0byB0aGlzIGxvY2F0aW9uLjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgQ29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuaHRtbCI+IFRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuaHRtbCI+V2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jdWRkaS5odG1sIiB0aXRsZT0iVW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIGEgd2F5IHRvIHB1Ymxpc2ggYW5kIGRpc2NvdmVyIGluZm9ybWF0aW9uIGFib3V0IFdlYiBzZXJ2aWNlcy4iPlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0idHVkZGlleHAuaHRtbCIgdGl0bGU9IlRocm91Z2ggVURESSBhbmQgV1NJTCwgb3RoZXIgYXBwbGljYXRpb25zIGNhbiBkaXNjb3ZlciBXU0RMIGRvY3VtZW50cyBhbmQgYmluZCB3aXRoIHRoZW0gdG8gZXhlY3V0ZSB0cmFuc2FjdGlvbnMgb3IgcGVyZm9ybSBvdGhlciBidXNpbmVzcyBwcm9jZXNzZXMuIj5QdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXM8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRzdHJ0ZXhwLmh0bWwiIHRpdGxlPSJUaGUgV2ViIHNlcnZpY2VzIHRvb2xzIGFsbG93cyB5b3UgdG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgaW4gc2V2ZXJhbCB3YXlzLiI+TGF1bmNoaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRyZWcuaHRtbCIgdGl0bGU9IkluIG9yZGVyIHRvIHB1Ymxpc2ggeW91ciBidXNpbmVzcyBlbnRpdHkgYW5kIFdlYiBzZXJ2aWNlIHRvIGEgVURESSByZWdpc3RyeSwgeW91IG11c3QgZmlyc3QgcmVnaXN0ZXIgd2l0aCB0aGUgcmVnaXN0cnkgdGhhdCB5b3Ugd2FudCB0byB1c2UuIj5SZWdpc3RlcmluZyB3aXRoIGEgVURESSByZWdpc3RyeTwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBSZWZlcmVuY2U8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi9yZWYvcnVkZGkuaHRtbCIgdGl0bGU9Ik9uY2UgeW91IGhhdmUgcmVnaXN0ZXJlZCBhbmQgbG9nZ2VkIGluIHRvIHRoZSBVRERJIHJlZ2lzdHJ5IHRoYXQgeW91IHdhbnQgdG8gdXNlLCB5b3UgY2FuIHJlZ2lzdGVyIHlvdXIgV2ViIHNlcnZpY2UuIFJlZ2lzdHJhdGlvbiBvZiBhIHNlcnZpY2UgaW52b2x2ZXMgZm91ciBjb3JlIGRhdGEgc3RydWN0dXJlIHR5cGVzOiBidXNpbmVzcyBpbmZvcm1hdGlvbiwgc2VydmljZSBpbmZvcm1hdGlvbiwgYmluZGluZyBpbmZvcm1hdGlvbiwgYW5kIGluZm9ybWF0aW9uIGRlc2NyaWJpbmcgdGhlIHNwZWNpZmljYXRpb25zIGZvciBzZXJ2aWNlcy4gVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGRhdGEgdHlwZXMgaXMgZGVzY3JpYmVkIGluIEZpZ3VyZSAxLiI+RGF0YSBzdHJ1Y3R1cmUgdHlwZXMgKFVEREkgcmVnaXN0cnkpPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90YnVzcHJvai5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGJ1c3Byb2ouZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTRjNWQ1NS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90YnVzcHJvai5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+Ci08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiIKLSAidGFzay5kdGQiPgotPHRhc2sgaWQ9InRidXNwcm9qIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPk1hbmFnaW5nIHJlZmVyZW5jZWQgc2VydmljZXM8L3RpdGxlPgotPHNob3J0ZGVzYz5BIHNlcnZpY2UgcHJvamVjdGlvbiBlbmFibGVzIGEgYnVzaW5lc3MgZW50aXR5IHRvIHJlZmVyZW5jZSBhIHNlcnZpY2UKLXRoYXQgd2FzIHB1Ymxpc2hlZCBieSBhbm90aGVyIGJ1c2luZXNzIGVudGl0eS4gQnkgdXNpbmcgdGhlIGJ1c2luZXNzU2VydmljZQotc3RydWN0dXJlIGFzIGEgcHJvamVjdGlvbiB0byBhbiBhbHJlYWR5IHB1Ymxpc2hlZCBidXNpbmVzc1NlcnZpY2UsIGJ1c2luZXNzZXMKLWNhbiBzaGFyZSBvciByZXVzZSBzZXJ2aWNlcy4mbmJzcDsgU2VydmljZSBwcm9qZWN0aW9ucyBhcmUgbWFuYWdlZCBjZW50cmFsbHkKLWFzIHBhcnQgb2YgdGhlIHJlZmVyZW5jaW5nIGJ1c2luZXNzRW50aXR5Ljwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPm1hbmFnaW5nIHNlcnZpY2VzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPlVEREk8aW5kZXh0ZXJtPm1hbmFnaW5nIHNlcnZpY2VzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08cHJlcmVxPlByZXJlcXVpc2l0ZXM6PG9sPgotPGxpPjx4cmVmIGhyZWY9InRyZWcuZGl0YSI+UmVnaXN0ZXIgd2l0aCBhIHJlZ2lzdHJ5PC94cmVmPjwvbGk+Ci08bGk+PHhyZWYgaHJlZj0idHN0cnRleHAuZGl0YSI+TGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L3hyZWY+PC9saT4KLTxsaT48eHJlZiBocmVmPSJ0YWRkcmVnLmRpdGEiPkFkZCB0aGUgcmVnaXN0cnkgdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwveHJlZj48L2xpPgotPC9vbD48L3ByZXJlcT4KLTxjb250ZXh0PjxwPkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHJlZmVyZW5jZWQgc2VydmljZXMsIHJlZmVyIHRvIHRoZSAgPHhyZWYKLWhyZWY9Imh0dHA6Ly93d3cudWRkaS5vcmcvc3BlY2lmaWNhdGlvbi5odG1sIiBzY29wZT0iZXh0ZXJuYWwiPlVEREkgVmVyc2lvbgotMi4wIFByb2dyYW1tZXIncyBBUEkgU3BlY2lmaWNhdGlvbjwveHJlZj4gYW5kIHRoZSAgPHhyZWYgaHJlZj0iaHR0cDovL3d3dy51ZGRpLm9yZy9zcGVjaWZpY2F0aW9uLmh0bWwiCi1zY29wZT0iZXh0ZXJuYWwiPlVEREkgVmVyc2lvbiAyLjAgRGF0YSBTdHJ1Y3R1cmUgU3BlY2lmaWNhdGlvbjwveHJlZj4uPC9wPjxwPlRvCi1tYW5hZ2UgcmVmZXJlbmNlZCBzZXJ2aWNlcywgZG8gdGhlIGZvbGxvd2luZzo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5JbiB0aGUgTmF2aWdhdG9yIHBhbmUsIHNlbGVjdCB0aGUgYnVzaW5lc3MgZW50aXR5IGZvciB3aGljaCB5b3UKLXdhbnQgdG8gbWFuYWdlIHJlZmVyZW5jZWQgc2VydmljZXMuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgQWN0aW9ucyBwYW5lIHRvb2xiYXIsIGNsaWNrIHRoZSAgPHVpY29udHJvbD5NYW5hZ2UgUmVmZXJlbmNlZAotU2VydmljZXM8L3VpY29udHJvbD4gaWNvbiAgPGltYWdlIGFsdD0iUGljdHVyZSBvZiB0aGUgTWFuYWdlIFJlZmVyZW5jZWQgU2VydmljZXMgaWNvbi4iCi1ocmVmPSIuLi9pbWFnZXMvcmVmc2Vydi5naWYiPjwvaW1hZ2U+LjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+T24gdGhlIE1hbmFnZSBSZWZlcmVuY2VkIFNlcnZpY2VzIHBhZ2UgeW91IGNhbiBhZGQsIHJlbW92ZSwgYW5kCi1tYWludGFpbiBzZXJ2aWNlcyB0aGF0IGFyZSByZWZlcmVuY2VkIGJ5IHRoZSBidXNpbmVzcyBlbnRpdHkuPC9jbWQ+PC9zdGVwPgotPC9zdGVwcz4KLTwvdGFza2JvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBDb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PiBUb29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uL2NvbmNlcHRzL2N1ZGRpLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgVGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0idHVkZGlleHAuZGl0YSI+PC9saW5rPgotPGxpbmsgaHJlZj0idHN0cnRleHAuZGl0YSI+PC9saW5rPgotPGxpbmsgaHJlZj0idHJlZy5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFJlZmVyZW5jZTwvdGl0bGU+Ci08bGluayBocmVmPSIuLi9yZWYvcnVkZGkuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvdGFzaz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RidXNwcm9qLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90YnVzcHJvai5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjI0MGUzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RidXNwcm9qLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwNyIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJNYW5hZ2luZyByZWZlcmVuY2VkIHNlcnZpY2VzIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IkEgc2VydmljZSBwcm9qZWN0aW9uIGVuYWJsZXMgYSBidXNpbmVzcyBlbnRpdHkgdG8gcmVmZXJlbmNlIGEgc2VydmljZSB0aGF0IHdhcyBwdWJsaXNoZWQgYnkgYW5vdGhlciBidXNpbmVzcyBlbnRpdHkuIEJ5IHVzaW5nIHRoZSBidXNpbmVzc1NlcnZpY2Ugc3RydWN0dXJlIGFzIGEgcHJvamVjdGlvbiB0byBhbiBhbHJlYWR5IHB1Ymxpc2hlZCBidXNpbmVzc1NlcnZpY2UsIGJ1c2luZXNzZXMgY2FuIHNoYXJlIG9yIHJldXNlIHNlcnZpY2VzLsKgIFNlcnZpY2UgcHJvamVjdGlvbnMgYXJlIG1hbmFnZWQgY2VudHJhbGx5IGFzIHBhcnQgb2YgdGhlIHJlZmVyZW5jaW5nIGJ1c2luZXNzRW50aXR5LiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJBIHNlcnZpY2UgcHJvamVjdGlvbiBlbmFibGVzIGEgYnVzaW5lc3MgZW50aXR5IHRvIHJlZmVyZW5jZSBhIHNlcnZpY2UgdGhhdCB3YXMgcHVibGlzaGVkIGJ5IGFub3RoZXIgYnVzaW5lc3MgZW50aXR5LiBCeSB1c2luZyB0aGUgYnVzaW5lc3NTZXJ2aWNlIHN0cnVjdHVyZSBhcyBhIHByb2plY3Rpb24gdG8gYW4gYWxyZWFkeSBwdWJsaXNoZWQgYnVzaW5lc3NTZXJ2aWNlLCBidXNpbmVzc2VzIGNhbiBzaGFyZSBvciByZXVzZSBzZXJ2aWNlcy7CoCBTZXJ2aWNlIHByb2plY3Rpb25zIGFyZSBtYW5hZ2VkIGNlbnRyYWxseSBhcyBwYXJ0IG9mIHRoZSByZWZlcmVuY2luZyBidXNpbmVzc0VudGl0eS4iIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIG1hbmFnaW5nIHNlcnZpY2VzLCBVRERJIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzLCBtYW5hZ2luZyBzZXJ2aWNlcywgVURESSIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N1ZGRpLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InR1ZGRpZXhwLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InRzdHJ0ZXhwLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InRyZWcuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vcmVmL3J1ZGRpLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idGJ1c3Byb2oiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5NYW5hZ2luZyByZWZlcmVuY2VkIHNlcnZpY2VzPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0YnVzcHJvaiI+PGEgbmFtZT0idGJ1c3Byb2oiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPk1hbmFnaW5nIHJlZmVyZW5jZWQgc2VydmljZXM8L2gxPgotCi0KLQotPGRpdj48cD5BIHNlcnZpY2UgcHJvamVjdGlvbiBlbmFibGVzIGEgYnVzaW5lc3MgZW50aXR5IHRvIHJlZmVyZW5jZSBhIHNlcnZpY2UKLXRoYXQgd2FzIHB1Ymxpc2hlZCBieSBhbm90aGVyIGJ1c2luZXNzIGVudGl0eS4gQnkgdXNpbmcgdGhlIGJ1c2luZXNzU2VydmljZQotc3RydWN0dXJlIGFzIGEgcHJvamVjdGlvbiB0byBhbiBhbHJlYWR5IHB1Ymxpc2hlZCBidXNpbmVzc1NlcnZpY2UsIGJ1c2luZXNzZXMKLWNhbiBzaGFyZSBvciByZXVzZSBzZXJ2aWNlcy7CoCBTZXJ2aWNlIHByb2plY3Rpb25zIGFyZSBtYW5hZ2VkIGNlbnRyYWxseQotYXMgcGFydCBvZiB0aGUgcmVmZXJlbmNpbmcgYnVzaW5lc3NFbnRpdHkuPC9wPgotCi08ZGl2IGNsYXNzPSJwIj5QcmVyZXF1aXNpdGVzOjxvbD4KLTxsaT48YSBocmVmPSJ0cmVnLmh0bWwiPlJlZ2lzdGVyIHdpdGggYSByZWdpc3RyeTwvYT48L2xpPgotCi08bGk+PGEgaHJlZj0idHN0cnRleHAuaHRtbCI+TGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+PC9saT4KLQotPGxpPjxhIGhyZWY9InRhZGRyZWcuaHRtbCI+QWRkIHRoZSByZWdpc3RyeSB0byB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPjwvbGk+Ci0KLTwvb2w+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gb24gcmVmZXJlbmNlZCBzZXJ2aWNlcywgcmVmZXIgdG8gdGhlICA8YSBocmVmPSJodHRwOi8vd3d3LnVkZGkub3JnL3NwZWNpZmljYXRpb24uaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPlVEREkgVmVyc2lvbiAyLjAgUHJvZ3JhbW1lcidzIEFQSSBTcGVjaWZpY2F0aW9uPC9hPiBhbmQgdGhlICA8YSBocmVmPSJodHRwOi8vd3d3LnVkZGkub3JnL3NwZWNpZmljYXRpb24uaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPlVEREkgVmVyc2lvbiAyLjAgRGF0YSBTdHJ1Y3R1cmUgU3BlY2lmaWNhdGlvbjwvYT4uPC9wPgotPHA+VG8KLW1hbmFnZSByZWZlcmVuY2VkIHNlcnZpY2VzLCBkbyB0aGUgZm9sbG93aW5nOjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGk+PHNwYW4+SW4gdGhlIE5hdmlnYXRvciBwYW5lLCBzZWxlY3QgdGhlIGJ1c2luZXNzIGVudGl0eSBmb3Igd2hpY2ggeW91Ci13YW50IHRvIG1hbmFnZSByZWZlcmVuY2VkIHNlcnZpY2VzLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+SW4gdGhlIEFjdGlvbnMgcGFuZSB0b29sYmFyLCBjbGljayB0aGUgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk1hbmFnZSBSZWZlcmVuY2VkCi1TZXJ2aWNlczwvc3Bhbj4gaWNvbiAgPGltZyBzcmM9Ii4uL2ltYWdlcy9yZWZzZXJ2LmdpZiIgYWx0PSJQaWN0dXJlIG9mIHRoZSBNYW5hZ2UgUmVmZXJlbmNlZCBTZXJ2aWNlcyBpY29uLiIgLz4uPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5PbiB0aGUgTWFuYWdlIFJlZmVyZW5jZWQgU2VydmljZXMgcGFnZSB5b3UgY2FuIGFkZCwgcmVtb3ZlLCBhbmQKLW1haW50YWluIHNlcnZpY2VzIHRoYXQgYXJlIHJlZmVyZW5jZWQgYnkgdGhlIGJ1c2luZXNzIGVudGl0eS48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIENvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmh0bWwiPiBUb29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWwiPldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3VkZGkuaHRtbCIgdGl0bGU9IlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpIHNwZWNpZmljYXRpb24gZGVmaW5lcyBhIHdheSB0byBwdWJsaXNoIGFuZCBkaXNjb3ZlciBpbmZvcm1hdGlvbiBhYm91dCBXZWIgc2VydmljZXMuIj5Vbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKTwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9InR1ZGRpZXhwLmh0bWwiIHRpdGxlPSJUaHJvdWdoIFVEREkgYW5kIFdTSUwsIG90aGVyIGFwcGxpY2F0aW9ucyBjYW4gZGlzY292ZXIgV1NETCBkb2N1bWVudHMgYW5kIGJpbmQgd2l0aCB0aGVtIHRvIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIG9yIHBlcmZvcm0gb3RoZXIgYnVzaW5lc3MgcHJvY2Vzc2VzLiI+UHVibGlzaGluZyBXZWIgc2VydmljZXMgYW5kIGJ1c2luZXNzIGVudGl0aWVzPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0c3RydGV4cC5odG1sIiB0aXRsZT0iVGhlIFdlYiBzZXJ2aWNlcyB0b29scyBhbGxvd3MgeW91IHRvIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGluIHNldmVyYWwgd2F5cy4iPkxhdW5jaGluZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0cmVnLmh0bWwiIHRpdGxlPSJJbiBvcmRlciB0byBwdWJsaXNoIHlvdXIgYnVzaW5lc3MgZW50aXR5IGFuZCBXZWIgc2VydmljZSB0byBhIFVEREkgcmVnaXN0cnksIHlvdSBtdXN0IGZpcnN0IHJlZ2lzdGVyIHdpdGggdGhlIHJlZ2lzdHJ5IHRoYXQgeW91IHdhbnQgdG8gdXNlLiI+UmVnaXN0ZXJpbmcgd2l0aCBhIFVEREkgcmVnaXN0cnk8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgUmVmZXJlbmNlPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vcmVmL3J1ZGRpLmh0bWwiIHRpdGxlPSJPbmNlIHlvdSBoYXZlIHJlZ2lzdGVyZWQgYW5kIGxvZ2dlZCBpbiB0byB0aGUgVURESSByZWdpc3RyeSB0aGF0IHlvdSB3YW50IHRvIHVzZSwgeW91IGNhbiByZWdpc3RlciB5b3VyIFdlYiBzZXJ2aWNlLiBSZWdpc3RyYXRpb24gb2YgYSBzZXJ2aWNlIGludm9sdmVzIGZvdXIgY29yZSBkYXRhIHN0cnVjdHVyZSB0eXBlczogYnVzaW5lc3MgaW5mb3JtYXRpb24sIHNlcnZpY2UgaW5mb3JtYXRpb24sIGJpbmRpbmcgaW5mb3JtYXRpb24sIGFuZCBpbmZvcm1hdGlvbiBkZXNjcmliaW5nIHRoZSBzcGVjaWZpY2F0aW9ucyBmb3Igc2VydmljZXMuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBkYXRhIHR5cGVzIGlzIGRlc2NyaWJlZCBpbiBGaWd1cmUgMS4iPkRhdGEgc3RydWN0dXJlIHR5cGVzIChVRERJIHJlZ2lzdHJ5KTwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGRpc2Nvdi5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGRpc2Nvdi5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTU5ZjdmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RkaXNjb3YuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDE3NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICJ0YXNrLmR0ZCI+Ci08dGFzayBpZD0idGRpc2NvdiIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5EaXNjb3ZlcmluZyBXZWIgU2VydmljZXM8L3RpdGxlPgotPHRpdGxlYWx0cz4KLTxzZWFyY2h0aXRsZT5EaXNjb3ZlcmluZyBhbmQgaW1wb3J0aW5nIFdlYiBzZXJ2aWNlczwvc2VhcmNodGl0bGU+Ci08L3RpdGxlYWx0cz4KLTxzaG9ydGRlc2M+V2ViIHNlcnZpY2VzIGNhbiBiZSBsb2NhdGVkIHRocm91Z2ggYSBwdWJsaWMgYnVzaW5lc3MgcmVnaXN0cnksCi1hIHByaXZhdGUgYnVzaW5lc3MgcmVnaXN0cnksIG9yIGEgV1NJTCBkb2N1bWVudC4gVURESSBtYW5hZ2VzIHRoZSBkaXNjb3ZlcnkKLW9mIFdlYiBzZXJ2aWNlcyBieSByZWx5aW5nIG9uIGEgZGlzdHJpYnV0ZWQgcmVnaXN0cnkgb2YgYnVzaW5lc3NlcyBhbmQgdGhlaXIKLXNlcnZpY2UgZGVzY3JpcHRpb25zIGltcGxlbWVudGVkIGluIGEgY29tbW9uIFhNTCBmb3JtYXQuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+ZGlzY292ZXJpbmc8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+VURESTxpbmRleHRlcm0+ZGlzY292ZXJpbmcgV2ViIHNlcnZpY2VzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPldTSUw8aW5kZXh0ZXJtPmRpc2NvdmVyaW5nIFdlYiBzZXJ2aWNlczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08cHJlcmVxPjxwPlByZXJlcXVpc2l0ZXM6PG9sPgotPGxpPjx4cmVmIGhyZWY9InRyZWcuZGl0YSI+UmVnaXN0ZXIgd2l0aCBhIHJlZ2lzdHJ5PC94cmVmPjwvbGk+Ci08bGk+PHhyZWYgaHJlZj0idHN0cnRleHAuZGl0YSI+TGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L3hyZWY+PC9saT4KLTxsaT48eHJlZiBocmVmPSJ0YWRkcmVnLmRpdGEiPkFkZCB0aGUgcmVnaXN0cnkgdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwveHJlZj48L2xpPgotPC9vbD48L3A+PC9wcmVyZXE+Ci08Y29udGV4dD48cD5XZWIgU2VydmljZXMgSW5zcGVjdGlvbiBMYW5ndWFnZSAoV1NJTCkgaXMgYSBzZXJ2aWNlIGRpc2NvdmVyeQotbWVjaGFuaXNtIHRoYXQgaXMgYW4gYWx0ZXJuYXRpdmUgdG8gVURESSBhcyB3ZWxsIGFzIGNvbXBsZW1lbnRhcnkgdG8gVURESS4KLVdTSUwgYWxsb3dzIHlvdSB0byBnbyBkaXJlY3RseSB0byB0aGUgc2VydmljZSBwcm92aWRlciBhbmQgYXNrIGZvciB0aGUgc2VydmljZXMKLWl0IHByb3ZpZGVzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgV2ViIFNlcnZpY2VzIEluc3BlY3Rpb24gTGFuZ3VhZ2UKLXNwZWNpZmljYXRpb24sIHJlZmVyIHRvICA8eHJlZiBocmVmPSJodHRwOi8vd3d3LTEwNi5pYm0uY29tL2RldmVsb3BlcndvcmtzL3dlYnNlcnZpY2VzL2xpYnJhcnkvd3Mtd3NpbHNwZWMuaHRtbCIKLXNjb3BlPSJleHRlcm5hbCI+IHd3dy5pYm0uY29tL2RldmVsb3BlcndvcmtzL3dlYnNlcnZpY2VzL2xpYnJhcnkvd3Mtd3NpbHNwZWMuaHRtbDwveHJlZj4uCi0gLjwvcD48cD5Zb3UgY2FuIGRpc2NvdmVyIGEgV2ViIHNlcnZpY2UgaW4gdHdvIHdheXMgdXNpbmcgdGhlIFdlYiBTZXJ2aWNlcwotRXhwbG9yZXI6PC9wPjwvY29udGV4dD4KLTxyZXN1bHQ+PHVsPgotPGxpPiA8eHJlZiBocmVmPSIjdGRpc2Nvdi9kaXNjb3Zlcl9mcm9tX3VkZGkiPkRpc2NvdmVyaW5nIGEgV2ViIHNlcnZpY2UgZnJvbQotYSBVRERJIHJlZ2lzdHJ5PC94cmVmPiA8L2xpPgotPGxpPiA8eHJlZiBocmVmPSIjdGRpc2Nvdi9kaXNjb3Zlcl9mcm9tX3dzaWwiPkRpc2NvdmVyaW5nIGEgV2ViIHNlcnZpY2UgZnJvbQotYSBXU0lMIGRvY3VtZW50PC94cmVmPiA8L2xpPgotPC91bD48L3Jlc3VsdD4KLTwvdGFza2JvZHk+Ci08dGFzayBpZD0iZGlzY292ZXJfZnJvbV91ZGRpIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPiBEaXNjb3ZlcmluZyBhIFdlYiBTZXJ2aWNlIGZyb20gYSBVRERJIFJlZ2lzdHJ5PC90aXRsZT4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlRoZSByZWdpc3RyeSBjb250YWlucyBVUkwgcmVmZXJlbmNlcyB0byBXZWIgc2VydmljZSBXU0RMIGRvY3VtZW50cy4KLUluIG9yZGVyIHRvIGRpc2NvdmVyIGEgV2ViIHNlcnZpY2UgdGhlIFVSTCB0byB0aGUgV2ViIHNlcnZpY2UgV1NETCBkb2N1bWVudAotbXVzdCBiZSByZXNvbHZhYmxlLiBUbyBsb2NhdGUgV2ViIHNlcnZpY2UgZGVzY3JpcHRpb25zOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5DbGljayA8dWljb250cm9sPlVEREkgTWFpbjwvdWljb250cm9sPi48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkluIHRoZSBBY3Rpb25zIHBhbmUgc2VsZWN0IGEgcmVnaXN0cnkgZnJvbSB0aGUgZHJvcC1kb3duIGxpc3QgYW5kCi1jbGljayA8dWljb250cm9sPkdvPC91aWNvbnRyb2w+LjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SW4gdGhlIEFjdGlvbnMgcGFuZSB0b29sYmFyIGNsaWNrIHRoZSAgPGI+RmluZDwvYj4gaWNvbiAgPGltYWdlCi1hbHQ9IkEgcGljdHVyZSBvZiB0aGUgRmluZCBpY29uLiIgaHJlZj0iLi4vaW1hZ2VzL2ZpbmQuZ2lmIj48L2ltYWdlPi48L2NtZD4KLTwvc3RlcD4KLTxzdGVwPjxjbWQ+SW4gdGhlIEFjdGlvbnMgcGFuZSwgZW50ZXIgdGhlIG5hbWUgb2YgdGhlIHF1ZXJ5LCB3aGF0IHlvdSBhcmUKLXNlYXJjaGluZyBmb3IsIHRoZSB0eXBlIG9mIHNlYXJjaCB0aGF0IHlvdSB3YW50IHRvIHBlcmZvcm0sIGFuZCBhbnkgcXVlcnkKLWluZm9ybWF0aW9uOiA8L2NtZD4KLTxzdWJzdGVwcz4KLTxzdWJzdGVwPjxjbWQ+IDxiPlNlYXJjaCBmb3I8L2I+Jm5ic3A7IFRoaXMgbGlzdCBhbGxvd3MgeW91IHRvIHNlYXJjaCBmb3IKLWJ1c2luZXNzZXMsIHNlcnZpY2VzLCBvciBzZXJ2aWNlIGludGVyZmFjZXMuIDwvY21kPjxpbmZvPjx1bD4KLTxsaT4gPGI+QnVzaW5lc3NlczwvYj4gT25jZSB5b3UgbG9jYXRlIGEgYnVzaW5lc3MgaW4gdGhlIHJlZ2lzdHJ5LCB1c2UgdGhlCi1pY29ucyBpbiB0aGUgQWN0aW9uIHBhbmUgdG9vbGJhciB0byBkbyB0aGUgZm9sbG93aW5nOjx1bD4KLTxsaT5WaWV3IGFuZCBlZGl0IGJ1c2luZXNzIGRldGFpbHM8L2xpPgotPGxpPkdldCB0aGUgc2VydmljZXMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgYnVzaW5lc3M8L2xpPgotPGxpPlB1Ymxpc2ggYSBzZXJ2aWNlPC9saT4KLTxsaT5NYW5hZ2UgcmVmZXJlbmNlZCBzZXJ2aWNlczwvbGk+Ci08bGk+TWFuYWdlIHB1Ymxpc2hlciBhc3NlcnRpb25zPC9saT4KLTxsaT5BZGQgdGhlIGJ1c2luZXNzIHRvIEZhdm9yaXRlczwvbGk+Ci08bGk+VW5wdWJsaXNoIHRoZSBidXNpbmVzczwvbGk+Ci08L3VsPjwvbGk+Ci08bGk+IDxiPlNlcnZpY2VzPC9iPiBPbmNlIHlvdSBsb2NhdGUgYSBzZXJ2aWNlIGluIHRoZSByZWdpc3RyeSwgdXNlIHRoZSBpY29ucwotaW4gdGhlIEFjdGlvbiBwYW5lIHRvb2xiYXIgdG8gZG8gdGhlIGZvbGxvd2luZzogPHVsPgotPGxpPlZpZXcgYW5kIGVkaXQgc2VydmljZSBkZXRhaWxzPC9saT4KLTxsaT5HZXQgdGhlIGJ1c2luZXNzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IHNlcnZpY2U8L2xpPgotPGxpPkdldCB0aGUgc2VydmljZSBpbnRlcmZhY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IHNlcnZpY2U8L2xpPgotPGxpPkltcG9ydCB0aGUgc2VydmljZSBXU0RMIGZpbGUgdG8gdGhlIEVjbGlwc2Ugd29ya2JlbmNoPC9saT4KLTxsaT5JbXBvcnQgdGhlIHNlcnZpY2UgV1NETCBmaWxlIHRvIHRoZSBmaWxlIHN5c3RlbTwvbGk+Ci08bGk+TGF1bmNoIHRoZSBXZWIgU2VydmljZSB3aXphcmRzPC9saT4KLTxsaT5BZGQgdGhlIHNlcnZpY2UgdG8gRmF2b3JpdGVzPC9saT4KLTxsaT5VbnB1Ymxpc2ggdGhlIHNlcnZpY2U8L2xpPgotPC91bD48L2xpPgotPGxpPiA8Yj5TZXJ2aWNlIGludGVyZmFjZXM8L2I+IE9uY2UgeW91IGxvY2F0ZSBhIHNlcnZpY2UgaW50ZXJmYWNlIGluIHRoZQotcmVnaXN0cnksIHVzZSB0aGUgaWNvbnMgaW4gdGhlIEFjdGlvbiBwYW5lIHRvb2xiYXIgdG8gZG8gdGhlIGZvbGxvd2luZzogPHVsPgotPGxpPlZpZXcgYW5kIGVkaXQgaW50ZXJmYWNlIGRldGFpbHM8L2xpPgotPGxpPkdldCB0aGUgc2VydmljZXMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgc2VydmljZSBpbnRlcmZhY2U8L2xpPgotPGxpPkdldCB0aGUgYnVzaW5lc3NlcyBhc3NvY2lhdGVkIHdpdGggdGhhdCBzZXJ2aWNlIGludGVyZmFjZTwvbGk+Ci08bGk+SW1wb3J0IHRoZSBzZXJ2aWNlIGludGVyZmFjZSBXU0RMIGZpbGUgdG8gdGhlIEVjbGlwc2Ugd29ya2JlbmNoPC9saT4KLTxsaT5JbXBvcnQgdGhlIHNlcnZpY2UgaW50ZXJmYWNlIFdTREwgZmlsZSB0byB0aGUgZmlsZSBzeXN0ZW08L2xpPgotPGxpPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2Ugd2l6YXJkczwvbGk+Ci08bGk+QWRkIHRoZSBzZXJ2aWNlIGludGVyZmFjZSB0byBGYXZvcml0ZXM8L2xpPgotPGxpPlVucHVibGlzaCB0aGUgc2VydmljZSBpbnRlcmZhY2U8L2xpPgotPC91bD48L2xpPgotPC91bD48L2luZm8+PC9zdWJzdGVwPgotPHN1YnN0ZXA+PGNtZD4gPGI+VHlwZSBvZiBzZWFyY2g8L2I+Jm5ic3A7IFRoZXNlIHJhZGlvIGJ1dHRvbnMgYWxsb3cgeW91IHRvCi1zcGVjaWZ5IGEgc2ltcGxlIG9yIGFkdmFuY2VkIHNlYXJjaCwgb3IgYSBzZWFyY2ggYnkgYSBVbml2ZXJzYWwgVW5pcXVlIElkZW50aWZpZXIKLShVVUlEKS4gPC9jbWQ+PGluZm8+PGRsPjxkbGVudHJ5PgotPGR0PlNpbXBsZTwvZHQ+Ci08ZGQ+VHlwZSB0aGUgbmFtZSBvZiB0aGUgYnVzaW5lc3Nlcywgc2VydmljZXMsIG9yIHNlcnZpY2UgaW50ZXJmYWNlcyBmb3Igd2hpY2gKLXlvdSBhcmUgc2VhcmNoaW5nLiAgPGI+Tm90ZTo8L2I+IFRoZSBzZWFyY2ggc2V0IHNpemUgaXMgc2V0IHRvIDEwMCBhbmQgdGhlCi1tYXhpbXVtIG51bWJlciBvZiByZXR1cm5lZCByZXN1bHRzIGlzIHNldCB0byAxMCBieSBkZWZhdWx0LiZuYnNwOyBJZiB5b3Ugd291bGQKLWxpa2UgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHRzLCB1c2UgdGhlIEFkdmFuY2VkIHNlYXJjaC48L2RkPgotPC9kbGVudHJ5PjxkbGVudHJ5PgotPGR0PkFkdmFuY2VkIDwvZHQ+Ci08ZGQ+QWxsb3dzIHlvdSB0byBlbnRlciBtb3JlIHNlYXJjaCBvcHRpb25zIHRvIGZvY3VzIHRoZSBzY29wZSBvZiB5b3VyIHNlYXJjaC4KLVNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd291bGQgbGlrZSB0byBzZWFyY2ggZm9yIG11bHRpcGxlIGJ1c2luZXNzZXMgb3IKLXNlcnZpY2VzLjwvZGQ+Ci08L2RsZW50cnk+PGRsZW50cnk+Ci08ZHQ+VVVJRCA8L2R0PgotPGRkPkFsbG93IHlvdSB0byBlbnRlciB0aGUgVVVJRCBrZXkuIFRoZSBVVUlEIGtleSBpcyB0aGUgaWRlbnRpZmllciB0aGF0IGlzCi1hc3NvY2lhdGVkIHdpdGggdGhlIHB1Ymxpc2hlZCBvYmplY3QuPC9kZD4KLTwvZGxlbnRyeT48L2RsPjwvaW5mbz48L3N1YnN0ZXA+Ci08L3N1YnN0ZXBzPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5PbmNlIHlvdSBoYXZlIHNlYXJjaGVkIGFuZCBkaXNjb3ZlcmVkIHRoZSBidXNpbmVzcyBzZXJ2aWNlIGRlc2NyaXB0aW9uCi15b3UgZGVzaXJlZCwgc2VsZWN0IHRoZSBzZXJ2aWNlIG9yIHRoZSBzZXJ2aWNlIGludGVyZmFjZSBhbmQgY2xpY2sgdGhlICA8Yj5JbXBvcnQ8L2I+IGljb24KLXRvOiA8L2NtZD4KLTxjaG9pY2VzPgotPGNob2ljZT5pbXBvcnQgdGhlIFdTREwgZG9jdW1lbnQgaW50byB5b3VyIFdlYiBwcm9qZWN0PC9jaG9pY2U+Ci08Y2hvaWNlPmltcG9ydCB0aGUgV1NETCBkb2N1bWVudCBpbnRvIHRoZSBXU0RMIEV4cGxvcmVyIGZvciB0ZXN0aW5nPC9jaG9pY2U+Ci08Y2hvaWNlPmxhdW5jaCB0aGUgV2ViIFNlcnZpY2UgU2tlbGV0b24gQ3JlYXRpb24gd2l6YXJkIG9yIFdlYiBTZXJ2aWNlIENsaWVudAotd2l6YXJkIGRpcmVjdGx5IGZyb20gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlci48L2Nob2ljZT4KLTwvY2hvaWNlcz4KLTwvc3RlcD4KLTwvc3RlcHM+Ci08L3Rhc2tib2R5PgotPC90YXNrPgotPHRhc2sgaWQ9ImRpc2NvdmVyX2Zyb21fd3NpbCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT4gRGlzY292ZXJpbmcgYSBXZWIgU2VydmljZSBmcm9tIGEgV1NJTCBEb2N1bWVudDwvdGl0bGU+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5UbyBsb2NhdGUgV2ViIHNlcnZpY2UgZGVzY3JpcHRpb25zOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPkZyb20gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciB0b29sYmFyLCBjbGljayB0aGUgIDxiPldTSUwgUGFnZTwvYj4gaWNvbgotIDxpbWFnZSBhbHQ9IlBpY3R1cmUgb2YgdGhlIFdTSUwgUGFnZSBpY29uLiIgaHJlZj0iLi4vaW1hZ2VzL3dzaWx2aWV3LmdpZiI+Ci08L2ltYWdlPi48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkluIHRoZSBOYXZpZ2F0b3IgcGFuZSwgY2xpY2sgIDxiPldTSUwgTWFpbjwvYj4uPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgIDxiPlVSTCB0byBkb2N1bWVudDwvYj4gZmllbGQgb2YgdGhlIEFjdGlvbnMgcGFuZSBlbnRlcgotdGhlIFVSTCB0byB0aGUgV1NJTCBkb2N1bWVudCBvciBIVFRQIGRvY3VtZW50IHRoYXQgY29udGFpbnMgbGlua3MgdG8gYSBXU0lMCi1kb2N1bWVudC4gRGV0YWlscyBvbiBob3cgYW4gSFRUUCBmaWxlIGNhbiBjb250YWluIGxpbmtzIHRvIFdTSUwgY2FuIGJlIGZvdW5kCi1oZXJlOiBodHRwOi8vd3d3LmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvd2Vic2VydmljZXMvbGlicmFyeS93cy13c2lsc3BlYy5odG1sPC9jbWQ+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPk9uY2UgeW91IGhhdmUgbG9jYXRlZCB0aGUgV1NJTCBkb2N1bWVudCwgdXNlIHRoZSBpY29ucyBpbiB0aGUgQWN0aW9uCi1wYW5lIHRvb2xiYXIgdG8gZG8gdGhlIGZvbGxvd2luZzo8L2NtZD4KLTxjaG9pY2VzPgotPGNob2ljZT5WaWV3IFdTSUwgZG9jdW1lbnQgZGV0YWlsczwvY2hvaWNlPgotPGNob2ljZT5MaXN0IGFsbCBvZiB0aGUgV1NETCBzZXJ2aWNlcyBhc3NvY2lhdGVkIHdpdGggdGhhdCBXU0lMIGRvY3VtZW50PC9jaG9pY2U+Ci08Y2hvaWNlPkxpc3QgYWxsIG9mIHRoZSBVRERJIHNlcnZpY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IFdTSUwgZG9jdW1lbnQ8L2Nob2ljZT4KLTxjaG9pY2U+TGlzdCBhbGwgb2YgdGhlIFVEREkgYnVzaW5lc3NlcyBhc3NvY2lhdGVkIHdpdGggdGhhdCBXU0lMIGRvY3VtZW50PC9jaG9pY2U+Ci08Y2hvaWNlPkxpc3QgYWxsIG9mIHRoZSBXU0lMIGxpbmtzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IFdTSUwgZG9jdW1lbnQ8L2Nob2ljZT4KLTxjaG9pY2U+SW1wb3J0IHRoZSBXU0lMIGRvY3VtZW50IHRvIHRoZSBmaWxlIHN5c3RlbTwvY2hvaWNlPgotPGNob2ljZT5BZGQgdGhlIFdTSUwgZG9jdW1lbnQgdG8gRmF2b3JpdGVzPC9jaG9pY2U+Ci08L2Nob2ljZXM+Ci08aW5mbz48Yj5JbXBvcnRhbnQ6PC9iPiBJZiB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGRvZXMgbm90IGRpc3BsYXkgdGhlCi1wcm9qZWN0IHRoYXQgeW91IHdvdWxkIGxpa2UgdG8gaW1wb3J0IHlvdXIgV1NETCBmaWxlIHRvLCBlbnN1cmUgdGhhdCB5b3UgaGF2ZQotY3JlYXRlZCB0aGUgcHJvamVjdCBhbmQvb3IgY2xpY2sgdGhlICA8Yj5SZWZyZXNoPC9iPiBpY29uLjwvaW5mbz48L3N0ZXA+Ci08L3N0ZXBzPgotPC90YXNrYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+IFRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vY29uY2VwdHMvY3VkZGkuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+Ci08bGluayBocmVmPSJ0dWRkaWV4cC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0c3RydGV4cC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0cmVnLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90b3ZlcndzLmRpdGEiIHByb2R1Y3Q9IiIKLXNjb3BlPSJwZWVyIj48bGlua3RleHQ+IERldmVsb3BpbmcgV2ViIHNlcnZpY2VzPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFJlZmVyZW5jZTwvdGl0bGU+Ci08bGluayBocmVmPSIuLi9yZWYvcnVkZGkuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvdGFzaz4KLTwvdGFzaz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RkaXNjb3YuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RkaXNjb3YuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQ2MWViYi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90ZGlzY292Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNzUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDciIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iRGlzY292ZXJpbmcgV2ViIFNlcnZpY2VzIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcyBjYW4gYmUgbG9jYXRlZCB0aHJvdWdoIGEgcHVibGljIGJ1c2luZXNzIHJlZ2lzdHJ5LCBhIHByaXZhdGUgYnVzaW5lc3MgcmVnaXN0cnksIG9yIGEgV1NJTCBkb2N1bWVudC4gVURESSBtYW5hZ2VzIHRoZSBkaXNjb3Zlcnkgb2YgV2ViIHNlcnZpY2VzIGJ5IHJlbHlpbmcgb24gYSBkaXN0cmlidXRlZCByZWdpc3RyeSBvZiBidXNpbmVzc2VzIGFuZCB0aGVpciBzZXJ2aWNlIGRlc2NyaXB0aW9ucyBpbXBsZW1lbnRlZCBpbiBhIGNvbW1vbiBYTUwgZm9ybWF0LiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJXZWIgc2VydmljZXMgY2FuIGJlIGxvY2F0ZWQgdGhyb3VnaCBhIHB1YmxpYyBidXNpbmVzcyByZWdpc3RyeSwgYSBwcml2YXRlIGJ1c2luZXNzIHJlZ2lzdHJ5LCBvciBhIFdTSUwgZG9jdW1lbnQuIFVEREkgbWFuYWdlcyB0aGUgZGlzY292ZXJ5IG9mIFdlYiBzZXJ2aWNlcyBieSByZWx5aW5nIG9uIGEgZGlzdHJpYnV0ZWQgcmVnaXN0cnkgb2YgYnVzaW5lc3NlcyBhbmQgdGhlaXIgc2VydmljZSBkZXNjcmlwdGlvbnMgaW1wbGVtZW50ZWQgaW4gYSBjb21tb24gWE1MIGZvcm1hdC4iIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIGRpc2NvdmVyaW5nLCBVRERJLCBkaXNjb3ZlcmluZyBXZWIgc2VydmljZXMsIFdTSUwiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIGRpc2NvdmVyaW5nLCBVRERJLCBkaXNjb3ZlcmluZyBXZWIgc2VydmljZXMsIFdTSUwiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRkaXNjb3YiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5EaXNjb3ZlcmluZyBhbmQgaW1wb3J0aW5nIFdlYiBzZXJ2aWNlczwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idGRpc2NvdiI+PGEgbmFtZT0idGRpc2NvdiI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+RGlzY292ZXJpbmcgV2ViIFNlcnZpY2VzPC9oMT4KLQotCi0KLQotPGRpdj48cD5XZWIgc2VydmljZXMgY2FuIGJlIGxvY2F0ZWQgdGhyb3VnaCBhIHB1YmxpYyBidXNpbmVzcyByZWdpc3RyeSwKLWEgcHJpdmF0ZSBidXNpbmVzcyByZWdpc3RyeSwgb3IgYSBXU0lMIGRvY3VtZW50LiBVRERJIG1hbmFnZXMgdGhlIGRpc2NvdmVyeQotb2YgV2ViIHNlcnZpY2VzIGJ5IHJlbHlpbmcgb24gYSBkaXN0cmlidXRlZCByZWdpc3RyeSBvZiBidXNpbmVzc2VzIGFuZCB0aGVpcgotc2VydmljZSBkZXNjcmlwdGlvbnMgaW1wbGVtZW50ZWQgaW4gYSBjb21tb24gWE1MIGZvcm1hdC48L3A+Ci0KLTxkaXYgY2xhc3M9InAiPjxkaXYgY2xhc3M9InAiPlByZXJlcXVpc2l0ZXM6PG9sPgotPGxpPjxhIGhyZWY9InRyZWcuaHRtbCI+UmVnaXN0ZXIgd2l0aCBhIHJlZ2lzdHJ5PC9hPjwvbGk+Ci0KLTxsaT48YSBocmVmPSJ0c3RydGV4cC5odG1sIj5MYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYT48L2xpPgotCi08bGk+PGEgaHJlZj0idGFkZHJlZy5odG1sIj5BZGQgdGhlIHJlZ2lzdHJ5IHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+PC9saT4KLQotPC9vbD4KLTwvZGl2PgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPldlYiBTZXJ2aWNlcyBJbnNwZWN0aW9uIExhbmd1YWdlIChXU0lMKSBpcyBhIHNlcnZpY2UgZGlzY292ZXJ5Ci1tZWNoYW5pc20gdGhhdCBpcyBhbiBhbHRlcm5hdGl2ZSB0byBVRERJIGFzIHdlbGwgYXMgY29tcGxlbWVudGFyeSB0byBVRERJLgotV1NJTCBhbGxvd3MgeW91IHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzZXJ2aWNlIHByb3ZpZGVyIGFuZCBhc2sgZm9yIHRoZSBzZXJ2aWNlcwotaXQgcHJvdmlkZXMuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBXZWIgU2VydmljZXMgSW5zcGVjdGlvbiBMYW5ndWFnZQotc3BlY2lmaWNhdGlvbiwgcmVmZXIgdG8gIDxhIGhyZWY9Imh0dHA6Ly93d3ctMTA2LmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvd2Vic2VydmljZXMvbGlicmFyeS93cy13c2lsc3BlYy5odG1sIiB0YXJnZXQ9Il9ibGFuayI+d3d3LmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvd2Vic2VydmljZXMvbGlicmFyeS93cy13c2lsc3BlYy5odG1sPC9hPi4KLSAuPC9wPgotPHA+WW91IGNhbiBkaXNjb3ZlciBhIFdlYiBzZXJ2aWNlIGluIHR3byB3YXlzIHVzaW5nIHRoZSBXZWIgU2VydmljZXMKLUV4cGxvcmVyOjwvcD4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48dWw+Ci08bGk+IDxhIGhyZWY9IiN0ZGlzY292X19kaXNjb3Zlcl9mcm9tX3VkZGkiPkRpc2NvdmVyaW5nIGEgV2ViIHNlcnZpY2UgZnJvbSBhIFVEREkgcmVnaXN0cnk8L2E+IDwvbGk+Ci0KLTxsaT4gPGEgaHJlZj0iI3RkaXNjb3ZfX2Rpc2NvdmVyX2Zyb21fd3NpbCI+RGlzY292ZXJpbmcgYSBXZWIgc2VydmljZSBmcm9tIGEgV1NJTCBkb2N1bWVudDwvYT4gPC9saT4KLQotPC91bD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibmVzdGVkMSIgeG1sOmxhbmc9ImVuLXVzIiBpZD0iZGlzY292ZXJfZnJvbV91ZGRpIj48YSBuYW1lPSJkaXNjb3Zlcl9mcm9tX3VkZGkiPjwhLS0gLS0+PC9hPgotPGgyIGNsYXNzPSJ0b3BpY3RpdGxlMiI+IERpc2NvdmVyaW5nIGEgV2ViIFNlcnZpY2UgZnJvbSBhIFVEREkgUmVnaXN0cnk8L2gyPgotCi08ZGl2PgotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VGhlIHJlZ2lzdHJ5IGNvbnRhaW5zIFVSTCByZWZlcmVuY2VzIHRvIFdlYiBzZXJ2aWNlIFdTREwgZG9jdW1lbnRzLgotSW4gb3JkZXIgdG8gZGlzY292ZXIgYSBXZWIgc2VydmljZSB0aGUgVVJMIHRvIHRoZSBXZWIgc2VydmljZSBXU0RMIGRvY3VtZW50Ci1tdXN0IGJlIHJlc29sdmFibGUuIFRvIGxvY2F0ZSBXZWIgc2VydmljZSBkZXNjcmlwdGlvbnM6PC9wPgotPC9kaXY+Ci0KLTxvbD4KLTxsaT48c3Bhbj5MYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlcjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+Q2xpY2sgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+VURESSBNYWluPC9zcGFuPi48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkluIHRoZSBBY3Rpb25zIHBhbmUgc2VsZWN0IGEgcmVnaXN0cnkgZnJvbSB0aGUgZHJvcC1kb3duIGxpc3QgYW5kCi1jbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Hbzwvc3Bhbj4uPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5JbiB0aGUgQWN0aW9ucyBwYW5lIHRvb2xiYXIgY2xpY2sgdGhlICA8c3Ryb25nPkZpbmQ8L3N0cm9uZz4gaWNvbiAgPGltZyBzcmM9Ii4uL2ltYWdlcy9maW5kLmdpZiIgYWx0PSJBIHBpY3R1cmUgb2YgdGhlIEZpbmQgaWNvbi4iIC8+Ljwvc3Bhbj4KLTwvbGk+Ci0KLTxsaT48c3Bhbj5JbiB0aGUgQWN0aW9ucyBwYW5lLCBlbnRlciB0aGUgbmFtZSBvZiB0aGUgcXVlcnksIHdoYXQgeW91IGFyZQotc2VhcmNoaW5nIGZvciwgdGhlIHR5cGUgb2Ygc2VhcmNoIHRoYXQgeW91IHdhbnQgdG8gcGVyZm9ybSwgYW5kIGFueSBxdWVyeQotaW5mb3JtYXRpb246IDwvc3Bhbj4KLTxvbCB0eXBlPSJhIj4KLTxsaSBjbGFzcz0ic3Vic3RlcGV4cGFuZCI+PHNwYW4+IDxzdHJvbmc+U2VhcmNoIGZvcjwvc3Ryb25nPsKgIFRoaXMgbGlzdCBhbGxvd3MgeW91IHRvIHNlYXJjaCBmb3IKLWJ1c2luZXNzZXMsIHNlcnZpY2VzLCBvciBzZXJ2aWNlIGludGVyZmFjZXMuIDwvc3Bhbj4gPHVsPgotPGxpPiA8c3Ryb25nPkJ1c2luZXNzZXM8L3N0cm9uZz4gT25jZSB5b3UgbG9jYXRlIGEgYnVzaW5lc3MgaW4gdGhlIHJlZ2lzdHJ5LCB1c2UgdGhlCi1pY29ucyBpbiB0aGUgQWN0aW9uIHBhbmUgdG9vbGJhciB0byBkbyB0aGUgZm9sbG93aW5nOjx1bD4KLTxsaT5WaWV3IGFuZCBlZGl0IGJ1c2luZXNzIGRldGFpbHM8L2xpPgotCi08bGk+R2V0IHRoZSBzZXJ2aWNlcyBhc3NvY2lhdGVkIHdpdGggdGhhdCBidXNpbmVzczwvbGk+Ci0KLTxsaT5QdWJsaXNoIGEgc2VydmljZTwvbGk+Ci0KLTxsaT5NYW5hZ2UgcmVmZXJlbmNlZCBzZXJ2aWNlczwvbGk+Ci0KLTxsaT5NYW5hZ2UgcHVibGlzaGVyIGFzc2VydGlvbnM8L2xpPgotCi08bGk+QWRkIHRoZSBidXNpbmVzcyB0byBGYXZvcml0ZXM8L2xpPgotCi08bGk+VW5wdWJsaXNoIHRoZSBidXNpbmVzczwvbGk+Ci0KLTwvdWw+Ci08L2xpPgotCi08bGk+IDxzdHJvbmc+U2VydmljZXM8L3N0cm9uZz4gT25jZSB5b3UgbG9jYXRlIGEgc2VydmljZSBpbiB0aGUgcmVnaXN0cnksIHVzZSB0aGUgaWNvbnMKLWluIHRoZSBBY3Rpb24gcGFuZSB0b29sYmFyIHRvIGRvIHRoZSBmb2xsb3dpbmc6IDx1bD4KLTxsaT5WaWV3IGFuZCBlZGl0IHNlcnZpY2UgZGV0YWlsczwvbGk+Ci0KLTxsaT5HZXQgdGhlIGJ1c2luZXNzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IHNlcnZpY2U8L2xpPgotCi08bGk+R2V0IHRoZSBzZXJ2aWNlIGludGVyZmFjZXMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgc2VydmljZTwvbGk+Ci0KLTxsaT5JbXBvcnQgdGhlIHNlcnZpY2UgV1NETCBmaWxlIHRvIHRoZSBFY2xpcHNlIHdvcmtiZW5jaDwvbGk+Ci0KLTxsaT5JbXBvcnQgdGhlIHNlcnZpY2UgV1NETCBmaWxlIHRvIHRoZSBmaWxlIHN5c3RlbTwvbGk+Ci0KLTxsaT5MYXVuY2ggdGhlIFdlYiBTZXJ2aWNlIHdpemFyZHM8L2xpPgotCi08bGk+QWRkIHRoZSBzZXJ2aWNlIHRvIEZhdm9yaXRlczwvbGk+Ci0KLTxsaT5VbnB1Ymxpc2ggdGhlIHNlcnZpY2U8L2xpPgotCi08L3VsPgotPC9saT4KLQotPGxpPiA8c3Ryb25nPlNlcnZpY2UgaW50ZXJmYWNlczwvc3Ryb25nPiBPbmNlIHlvdSBsb2NhdGUgYSBzZXJ2aWNlIGludGVyZmFjZSBpbiB0aGUKLXJlZ2lzdHJ5LCB1c2UgdGhlIGljb25zIGluIHRoZSBBY3Rpb24gcGFuZSB0b29sYmFyIHRvIGRvIHRoZSBmb2xsb3dpbmc6IDx1bD4KLTxsaT5WaWV3IGFuZCBlZGl0IGludGVyZmFjZSBkZXRhaWxzPC9saT4KLQotPGxpPkdldCB0aGUgc2VydmljZXMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgc2VydmljZSBpbnRlcmZhY2U8L2xpPgotCi08bGk+R2V0IHRoZSBidXNpbmVzc2VzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IHNlcnZpY2UgaW50ZXJmYWNlPC9saT4KLQotPGxpPkltcG9ydCB0aGUgc2VydmljZSBpbnRlcmZhY2UgV1NETCBmaWxlIHRvIHRoZSBFY2xpcHNlIHdvcmtiZW5jaDwvbGk+Ci0KLTxsaT5JbXBvcnQgdGhlIHNlcnZpY2UgaW50ZXJmYWNlIFdTREwgZmlsZSB0byB0aGUgZmlsZSBzeXN0ZW08L2xpPgotCi08bGk+TGF1bmNoIHRoZSBXZWIgU2VydmljZSB3aXphcmRzPC9saT4KLQotPGxpPkFkZCB0aGUgc2VydmljZSBpbnRlcmZhY2UgdG8gRmF2b3JpdGVzPC9saT4KLQotPGxpPlVucHVibGlzaCB0aGUgc2VydmljZSBpbnRlcmZhY2U8L2xpPgotCi08L3VsPgotPC9saT4KLQotPC91bD4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3Vic3RlcGV4cGFuZCI+PHNwYW4+IDxzdHJvbmc+VHlwZSBvZiBzZWFyY2g8L3N0cm9uZz7CoCBUaGVzZSByYWRpbyBidXR0b25zIGFsbG93IHlvdSB0bwotc3BlY2lmeSBhIHNpbXBsZSBvciBhZHZhbmNlZCBzZWFyY2gsIG9yIGEgc2VhcmNoIGJ5IGEgVW5pdmVyc2FsIFVuaXF1ZSBJZGVudGlmaWVyCi0oVVVJRCkuIDwvc3Bhbj4gPGRsPgotPGR0IGNsYXNzPSJkbHRlcm0iPlNpbXBsZTwvZHQ+Ci0KLTxkZD5UeXBlIHRoZSBuYW1lIG9mIHRoZSBidXNpbmVzc2VzLCBzZXJ2aWNlcywgb3Igc2VydmljZSBpbnRlcmZhY2VzIGZvciB3aGljaAoteW91IGFyZSBzZWFyY2hpbmcuICA8c3Ryb25nPk5vdGU6PC9zdHJvbmc+IFRoZSBzZWFyY2ggc2V0IHNpemUgaXMgc2V0IHRvIDEwMCBhbmQgdGhlCi1tYXhpbXVtIG51bWJlciBvZiByZXR1cm5lZCByZXN1bHRzIGlzIHNldCB0byAxMCBieSBkZWZhdWx0LsKgIElmIHlvdSB3b3VsZAotbGlrZSB0byBvdmVycmlkZSB0aGUgZGVmYXVsdHMsIHVzZSB0aGUgQWR2YW5jZWQgc2VhcmNoLjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPkFkdmFuY2VkIDwvZHQ+Ci0KLTxkZD5BbGxvd3MgeW91IHRvIGVudGVyIG1vcmUgc2VhcmNoIG9wdGlvbnMgdG8gZm9jdXMgdGhlIHNjb3BlIG9mIHlvdXIgc2VhcmNoLgotU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3b3VsZCBsaWtlIHRvIHNlYXJjaCBmb3IgbXVsdGlwbGUgYnVzaW5lc3NlcyBvcgotc2VydmljZXMuPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+VVVJRCA8L2R0PgotCi08ZGQ+QWxsb3cgeW91IHRvIGVudGVyIHRoZSBVVUlEIGtleS4gVGhlIFVVSUQga2V5IGlzIHRoZSBpZGVudGlmaWVyIHRoYXQgaXMKLWFzc29jaWF0ZWQgd2l0aCB0aGUgcHVibGlzaGVkIG9iamVjdC48L2RkPgotCi08L2RsPgotPC9saT4KLQotPC9vbD4KLQotPC9saT4KLQotPGxpPjxzcGFuPk9uY2UgeW91IGhhdmUgc2VhcmNoZWQgYW5kIGRpc2NvdmVyZWQgdGhlIGJ1c2luZXNzIHNlcnZpY2UgZGVzY3JpcHRpb24KLXlvdSBkZXNpcmVkLCBzZWxlY3QgdGhlIHNlcnZpY2Ugb3IgdGhlIHNlcnZpY2UgaW50ZXJmYWNlIGFuZCBjbGljayB0aGUgIDxzdHJvbmc+SW1wb3J0PC9zdHJvbmc+IGljb24KLXRvOiA8L3NwYW4+Ci08dWw+Ci08bGk+aW1wb3J0IHRoZSBXU0RMIGRvY3VtZW50IGludG8geW91ciBXZWIgcHJvamVjdDwvbGk+Ci0KLTxsaT5pbXBvcnQgdGhlIFdTREwgZG9jdW1lbnQgaW50byB0aGUgV1NETCBFeHBsb3JlciBmb3IgdGVzdGluZzwvbGk+Ci0KLTxsaT5sYXVuY2ggdGhlIFdlYiBTZXJ2aWNlIFNrZWxldG9uIENyZWF0aW9uIHdpemFyZCBvciBXZWIgU2VydmljZSBDbGllbnQKLXdpemFyZCBkaXJlY3RseSBmcm9tIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIuPC9saT4KLQotPC91bD4KLQotPC9saT4KLQotPC9vbD4KLQotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJuZXN0ZWQxIiB4bWw6bGFuZz0iZW4tdXMiIGlkPSJkaXNjb3Zlcl9mcm9tX3dzaWwiPjxhIG5hbWU9ImRpc2NvdmVyX2Zyb21fd3NpbCI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj4gRGlzY292ZXJpbmcgYSBXZWIgU2VydmljZSBmcm9tIGEgV1NJTCBEb2N1bWVudDwvaDI+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UbyBsb2NhdGUgV2ViIHNlcnZpY2UgZGVzY3JpcHRpb25zOjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkZyb20gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciB0b29sYmFyLCBjbGljayB0aGUgIDxzdHJvbmc+V1NJTCBQYWdlPC9zdHJvbmc+IGljb24KLSA8aW1nIHNyYz0iLi4vaW1hZ2VzL3dzaWx2aWV3LmdpZiIgYWx0PSJQaWN0dXJlIG9mIHRoZSBXU0lMIFBhZ2UgaWNvbi4iIC8+Ljwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSBOYXZpZ2F0b3IgcGFuZSwgY2xpY2sgIDxzdHJvbmc+V1NJTCBNYWluPC9zdHJvbmc+Ljwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSAgPHN0cm9uZz5VUkwgdG8gZG9jdW1lbnQ8L3N0cm9uZz4gZmllbGQgb2YgdGhlIEFjdGlvbnMgcGFuZSBlbnRlcgotdGhlIFVSTCB0byB0aGUgV1NJTCBkb2N1bWVudCBvciBIVFRQIGRvY3VtZW50IHRoYXQgY29udGFpbnMgbGlua3MgdG8gYSBXU0lMCi1kb2N1bWVudC4gRGV0YWlscyBvbiBob3cgYW4gSFRUUCBmaWxlIGNhbiBjb250YWluIGxpbmtzIHRvIFdTSUwgY2FuIGJlIGZvdW5kCi1oZXJlOiBodHRwOi8vd3d3LmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvd2Vic2VydmljZXMvbGlicmFyeS93cy13c2lsc3BlYy5odG1sPC9zcGFuPgotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5PbmNlIHlvdSBoYXZlIGxvY2F0ZWQgdGhlIFdTSUwgZG9jdW1lbnQsIHVzZSB0aGUgaWNvbnMgaW4gdGhlIEFjdGlvbgotcGFuZSB0b29sYmFyIHRvIGRvIHRoZSBmb2xsb3dpbmc6PC9zcGFuPgotPHVsPgotPGxpPlZpZXcgV1NJTCBkb2N1bWVudCBkZXRhaWxzPC9saT4KLQotPGxpPkxpc3QgYWxsIG9mIHRoZSBXU0RMIHNlcnZpY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IFdTSUwgZG9jdW1lbnQ8L2xpPgotCi08bGk+TGlzdCBhbGwgb2YgdGhlIFVEREkgc2VydmljZXMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgV1NJTCBkb2N1bWVudDwvbGk+Ci0KLTxsaT5MaXN0IGFsbCBvZiB0aGUgVURESSBidXNpbmVzc2VzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IFdTSUwgZG9jdW1lbnQ8L2xpPgotCi08bGk+TGlzdCBhbGwgb2YgdGhlIFdTSUwgbGlua3MgYXNzb2NpYXRlZCB3aXRoIHRoYXQgV1NJTCBkb2N1bWVudDwvbGk+Ci0KLTxsaT5JbXBvcnQgdGhlIFdTSUwgZG9jdW1lbnQgdG8gdGhlIGZpbGUgc3lzdGVtPC9saT4KLQotPGxpPkFkZCB0aGUgV1NJTCBkb2N1bWVudCB0byBGYXZvcml0ZXM8L2xpPgotCi08L3VsPgotCi0gPHN0cm9uZz5JbXBvcnRhbnQ6PC9zdHJvbmc+IElmIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgZG9lcyBub3QgZGlzcGxheSB0aGUKLXByb2plY3QgdGhhdCB5b3Ugd291bGQgbGlrZSB0byBpbXBvcnQgeW91ciBXU0RMIGZpbGUgdG8sIGVuc3VyZSB0aGF0IHlvdSBoYXZlCi1jcmVhdGVkIHRoZSBwcm9qZWN0IGFuZC9vciBjbGljayB0aGUgIDxzdHJvbmc+UmVmcmVzaDwvc3Ryb25nPiBpY29uLjwvbGk+Ci0KLTwvb2w+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sIj4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIj5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N1ZGRpLmh0bWwiIHRpdGxlPSJVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSBzcGVjaWZpY2F0aW9uIGRlZmluZXMgYSB3YXkgdG8gcHVibGlzaCBhbmQgZGlzY292ZXIgaW5mb3JtYXRpb24gYWJvdXQgV2ViIHNlcnZpY2VzLiI+VW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSk8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgVGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJ0dWRkaWV4cC5odG1sIiB0aXRsZT0iVGhyb3VnaCBVRERJIGFuZCBXU0lMLCBvdGhlciBhcHBsaWNhdGlvbnMgY2FuIGRpc2NvdmVyIFdTREwgZG9jdW1lbnRzIGFuZCBiaW5kIHdpdGggdGhlbSB0byBleGVjdXRlIHRyYW5zYWN0aW9ucyBvciBwZXJmb3JtIG90aGVyIGJ1c2luZXNzIHByb2Nlc3Nlcy4iPlB1Ymxpc2hpbmcgV2ViIHNlcnZpY2VzIGFuZCBidXNpbmVzcyBlbnRpdGllczwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idHN0cnRleHAuaHRtbCIgdGl0bGU9IlRoZSBXZWIgc2VydmljZXMgdG9vbHMgYWxsb3dzIHlvdSB0byBsYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBpbiBzZXZlcmFsIHdheXMuIj5MYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idHJlZy5odG1sIiB0aXRsZT0iSW4gb3JkZXIgdG8gcHVibGlzaCB5b3VyIGJ1c2luZXNzIGVudGl0eSBhbmQgV2ViIHNlcnZpY2UgdG8gYSBVRERJIHJlZ2lzdHJ5LCB5b3UgbXVzdCBmaXJzdCByZWdpc3RlciB3aXRoIHRoZSByZWdpc3RyeSB0aGF0IHlvdSB3YW50IHRvIHVzZS4iPlJlZ2lzdGVyaW5nIHdpdGggYSBVRERJIHJlZ2lzdHJ5PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdG92ZXJ3cy5odG1sIj4gRGV2ZWxvcGluZyBXZWIgc2VydmljZXM8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgUmVmZXJlbmNlPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vcmVmL3J1ZGRpLmh0bWwiIHRpdGxlPSJPbmNlIHlvdSBoYXZlIHJlZ2lzdGVyZWQgYW5kIGxvZ2dlZCBpbiB0byB0aGUgVURESSByZWdpc3RyeSB0aGF0IHlvdSB3YW50IHRvIHVzZSwgeW91IGNhbiByZWdpc3RlciB5b3VyIFdlYiBzZXJ2aWNlLiBSZWdpc3RyYXRpb24gb2YgYSBzZXJ2aWNlIGludm9sdmVzIGZvdXIgY29yZSBkYXRhIHN0cnVjdHVyZSB0eXBlczogYnVzaW5lc3MgaW5mb3JtYXRpb24sIHNlcnZpY2UgaW5mb3JtYXRpb24sIGJpbmRpbmcgaW5mb3JtYXRpb24sIGFuZCBpbmZvcm1hdGlvbiBkZXNjcmliaW5nIHRoZSBzcGVjaWZpY2F0aW9ucyBmb3Igc2VydmljZXMuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBkYXRhIHR5cGVzIGlzIGRlc2NyaWJlZCBpbiBGaWd1cmUgMS4iPkRhdGEgc3RydWN0dXJlIHR5cGVzIChVRERJIHJlZ2lzdHJ5KTwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci0KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RnZW53c2lsLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90Z2Vud3NpbC5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOWQzMmY5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RnZW53c2lsLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICJ0YXNrLmR0ZCI+Ci08dGFzayBpZD0idGdlbndzaWwiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+R2VuZXJhdGluZyBhIFdTSUwgZmlsZTwvdGl0bGU+Ci08dGl0bGVhbHRzPgotPHNlYXJjaHRpdGxlPkdlbmVyYXRpbmcgYSBXU0lMIGZpbGU8L3NlYXJjaHRpdGxlPgotPC90aXRsZWFsdHM+Ci08c2hvcnRkZXNjPldlYiBTZXJ2aWNlcyBJbnNwZWN0aW9uIExhbmd1YWdlIChXU0lMKSBpcyBhIHNlcnZpY2UgZGlzY292ZXJ5Ci1tZWNoYW5pc20gdGhhdCBpcyBhbiBhbHRlcm5hdGl2ZSB0byBVRERJIGFzIHdlbGwgYXMgY29tcGxlbWVudGFyeSB0byBVRERJLgotV1NJTCBjYW4gYmUgZ2VuZXJhdGVkIGF0IGFueSBwb2ludCBpbiB0aGUgV2ViIHNlcnZpY2UgZGV2ZWxvcG1lbnQgY3ljbGUgb25jZQotdGhlIFdTREwgZmlsZSBmb3IgdGhlIFdlYiBzZXJ2aWNlIGhhcyBiZWVuIGNyZWF0ZWQuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+Z2VuZXJhdGluZyBXU0lMPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPldTSUw8aW5kZXh0ZXJtPmdlbmVyYXRpbmc8L2luZGV4dGVybT48L2luZGV4dGVybT48L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxwcmVyZXE+PGI+UHJlcmVxdWlzaXRlczo8L2I+IEluIG9yZGVyIHRvIGdlbmVyYXRlIGEgV1NJTCBmaWxlLCB5b3UgbmVlZCB0bwota25vdyB0aGUgVVJMIHRvIGEgV1NETCBmaWxlLjwvcHJlcmVxPgotPGNvbnRleHQ+PHA+V1NJTCBoZWxwcyBzeW5jaHJvbml6ZSB0aGlzIHByb2Nlc3MgYnkgbWFpbnRhaW5pbmcgcmVmZXJlbmNlcwotdG8gV1NETCBVUkxzLiBXZWIgc2VydmljZXMgdG9vbHMgdGhhdCBwcm9jZXNzIFdTREwgZG9jdW1lbnRzIC0gc3VjaCBhcyB0aGUKLVdlYiBTZXJ2aWNlIENsaWVudCBhbmQgQ3JlYXRpb24gd2l6YXJkcyAtIHdpbGwgYWNjZXB0IGEgV1NJTCBkb2N1bWVudCBhcyBhCi1zdWJzdGl0dXRlIGZvciBXU0RMLiBUaGlzIGFsbG93cyB5b3UgdG8gY3JlYXRlIGEgc3RhbmRhcmRpemVkIFdTREwgcmVmZXJlbmNlCi0oV1NJTCkgZG9jdW1lbnQgaW4geW91ciBwcm9qZWN0IGR1cmluZyBXZWIgc2VydmljZSBjbGllbnQgZ2VuZXJhdGlvbiwgdGhlbgotYXQgYSBsYXRlciB0aW1lIGVhc2lseSByZWdlbmVyYXRlIHRoZSBjbGllbnQgZnJvbSB0aGF0IHJlZmVyZW5jZSBkb2N1bWVudC4KLU5vIGNvcGllcyBvZiB0aGUgV1NETCBvciBXU0RMIFVSTHMgYXJlIHJlcXVpcmVkLjwvcD48cD5Zb3UgY2FuIGdlbmVyYXRlIGEKLVdTSUwgZmlsZSBmcm9tIGEgcHJlLWV4aXN0aW5nIFdTREwgZmlsZSBvciBkdXJpbmcgV2ViIHNlcnZpY2UgY3JlYXRpb24gb3IKLWNvbnN1bXB0aW9uLjwvcD48L2NvbnRleHQ+Ci08L3Rhc2tib2R5PgotPHRhc2sgaWQ9ImQwZTI3IiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkdlbmVyYXRpbmcgYSBXU0lMIGZpbGUgdGhvdWdoIHRoZSBpbXBvcnQgdXRpbGl0eTwvdGl0bGU+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5UbyBnZW5lcmF0ZSBhIFdTSUwgZmlsZSB0aHJvdWdoIHRoZSBpbXBvcnQgdXRpbGl0eTo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5PcHRpb25hbDogU2VsZWN0IHRoZSBXU0RMIGRvY3VtZW50IGZvciB3aGljaCB5b3Ugd2FudCB0byBjcmVhdGUKLWEgV1NJTCBmaWxlLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+RnJvbSB0aGUgIDxiPkZpbGU8L2I+IG1lbnUsIHNlbGVjdCAgPGI+SW1wb3J0PC9iPiA+ICA8Yj5XU0lMID4KLU5leHQ8L2I+LiBUaGUgV1NJTCBJbXBvcnQgd2luZG93IG9wZW5zLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SWYgeW91IGhhdmUgc2VsZWN0ZWQgdG8gcGVyZm9ybSBzdGVwIDEsIHRoZSBXU0lMIFVSSSBmaWVsZCBzaG91bGQKLWJlIHByZWZpbGxlZCB3aXRoIHRoZSBuYW1lIG9mIHlvdXIgV1NETCBmaWxlLCB3aGVyZSB0aGUgZXh0ZW5zaW9uIGhhcyBiZWVuCi1jaGFuZ2VkIGZyb20gIDxzeXN0ZW1vdXRwdXQ+LndzZGw8L3N5c3RlbW91dHB1dD4gdG8gIDxzeXN0ZW1vdXRwdXQ+LndzaWw8L3N5c3RlbW91dHB1dD4uCi1UaGUgV1NETCBzZWN0aW9uIHNob3VsZCBjb250YWluIHRoZSBVUkxzIHRvIHRoZSBzZWxlY3RlZCBXU0RMIGZpbGVzLiBZb3UgY2FuCi1hbHNvIGVudGVyIGFkZGl0aW9uYWwgV1NETCBVUkxzLiBBbHRlcm5hdGVseSwgeW91IGNhbiBicm93c2UgdG8gdGhlIGxvY2F0aW9uCi1vZiBhIFdTSUwgZmlsZSwgb3IgbWFudWFsbHkgZW50ZXIgdGhlIGxvY2F0aW9uIG9mIHRoZSBXU0lMIGFuZCBXU0RMIGZpbGVzCi1pbiB0aGUgYXBwcm9wcmlhdGUgbG9jYXRpb25zLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+Q2xpY2sgRmluaXNoLiBBIFdTSUwgZmlsZSB3aWxsIGJlIGdlbmVyYXRlZCBpbiB0aGUgc3BlY2lmaWVkIGxvY2F0aW9uLjwvY21kPgotPC9zdGVwPgotPC9zdGVwcz4KLTwvdGFza2JvZHk+Ci08L3Rhc2s+Ci08dGFzayBpZD0iZDBlNjIiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+R2VuZXJhdGluZyBhIFdTSUwgZmlsZSB0aHJvdWdoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L3RpdGxlPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+VG8gZ2VuZXJhdGUgYSBXU0lMIGZpbGUgdGhyb3VnaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPk9wZW4gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlci48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPk9wZW4gdGhlIFdTREwgRXhwbG9yZXIgYnkgY2xpY2tpbmcgdGhpcyBpY29uOiAgPGltYWdlIGFsdD0iaWNvbiB1c2VkIHRvIGxhdW5jaCB0aGUgd2ViIHNlcnZpY2VzIGV4cGxvcmVyIgotaHJlZj0iLi4vaW1hZ2VzL3dzZGxpY29uLmdpZiI+PC9pbWFnZT48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPk9wZW4gYSBXU0RMIGZpbGUuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5TZWxlY3QgdGhlIFdTREwgZmlsZSB0aGF0IHlvdSBoYXZlIG9wZW5lZCBpbiB0aGUgTmF2aWdhdG9yIHBhbmUsCi1hbmQgZnJvbSB0aGUgYXZhaWxhYmxlIGFjdGlvbnMsIGNob29zZSB0byBpbXBvcnQgYSBXU0RMIGZpbGUgdG8gdGhlIHdvcmtiZW5jaAotYnkgY2xpY2tpbmcgdGhpcyBpY29uOiAgPGltYWdlIGFsdD0iaWNvbiB1c2VkIHRvIGltcG9ydCBhIGZpbGUiIGhyZWY9Ii4uL2ltYWdlcy9tcHR3c2RsaWNvbi5naWYiPgotPC9pbWFnZT48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPlNlbGVjdCAgPGI+SW1wb3J0IGFzIGEgc2VydmljZSByZWZlcmVuY2UgdG8gYSBXU0lMIGRvY3VtZW50PC9iPi48L2NtZD4KLTwvc3RlcD4KLTxzdGVwPjxjbWQ+RW50ZXIgYSBuYW1lIGZvciB0aGUgV1NJTCBmaWxlIHRoYXQgeW91IHdhbnQgdG8gZ2VuZXJhdGUsIGFuZCBjbGljawotIDxiPkdvPC9iPi48L2NtZD48L3N0ZXA+Ci08L3N0ZXBzPgotPC90YXNrYm9keT4KLTwvdGFzaz4KLTwvdGFzaz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RnZW53c2lsLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90Z2Vud3NpbC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjExNGE0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RnZW53c2lsLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDYiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iR2VuZXJhdGluZyBhIFdTSUwgZmlsZSIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJXZWIgU2VydmljZXMgSW5zcGVjdGlvbiBMYW5ndWFnZSAoV1NJTCkgaXMgYSBzZXJ2aWNlIGRpc2NvdmVyeSBtZWNoYW5pc20gdGhhdCBpcyBhbiBhbHRlcm5hdGl2ZSB0byBVRERJIGFzIHdlbGwgYXMgY29tcGxlbWVudGFyeSB0byBVRERJLiBXU0lMIGNhbiBiZSBnZW5lcmF0ZWQgYXQgYW55IHBvaW50IGluIHRoZSBXZWIgc2VydmljZSBkZXZlbG9wbWVudCBjeWNsZSBvbmNlIHRoZSBXU0RMIGZpbGUgZm9yIHRoZSBXZWIgc2VydmljZSBoYXMgYmVlbiBjcmVhdGVkLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJXZWIgU2VydmljZXMgSW5zcGVjdGlvbiBMYW5ndWFnZSAoV1NJTCkgaXMgYSBzZXJ2aWNlIGRpc2NvdmVyeSBtZWNoYW5pc20gdGhhdCBpcyBhbiBhbHRlcm5hdGl2ZSB0byBVRERJIGFzIHdlbGwgYXMgY29tcGxlbWVudGFyeSB0byBVRERJLiBXU0lMIGNhbiBiZSBnZW5lcmF0ZWQgYXQgYW55IHBvaW50IGluIHRoZSBXZWIgc2VydmljZSBkZXZlbG9wbWVudCBjeWNsZSBvbmNlIHRoZSBXU0RMIGZpbGUgZm9yIHRoZSBXZWIgc2VydmljZSBoYXMgYmVlbiBjcmVhdGVkLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcywgZ2VuZXJhdGluZyBXU0lMLCBXU0lMLCBnZW5lcmF0aW5nIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzLCBnZW5lcmF0aW5nIFdTSUwsIFdTSUwsIGdlbmVyYXRpbmciIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRnZW53c2lsIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+R2VuZXJhdGluZyBhIFdTSUwgZmlsZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idGdlbndzaWwiPjxhIG5hbWU9InRnZW53c2lsIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5HZW5lcmF0aW5nIGEgV1NJTCBmaWxlPC9oMT4KLQotCi0KLQotPGRpdj48cD5XZWIgU2VydmljZXMgSW5zcGVjdGlvbiBMYW5ndWFnZSAoV1NJTCkgaXMgYSBzZXJ2aWNlIGRpc2NvdmVyeQotbWVjaGFuaXNtIHRoYXQgaXMgYW4gYWx0ZXJuYXRpdmUgdG8gVURESSBhcyB3ZWxsIGFzIGNvbXBsZW1lbnRhcnkgdG8gVURESS4KLVdTSUwgY2FuIGJlIGdlbmVyYXRlZCBhdCBhbnkgcG9pbnQgaW4gdGhlIFdlYiBzZXJ2aWNlIGRldmVsb3BtZW50IGN5Y2xlIG9uY2UKLXRoZSBXU0RMIGZpbGUgZm9yIHRoZSBXZWIgc2VydmljZSBoYXMgYmVlbiBjcmVhdGVkLjwvcD4KLQotPGRpdiBjbGFzcz0icCI+PHN0cm9uZz5QcmVyZXF1aXNpdGVzOjwvc3Ryb25nPiBJbiBvcmRlciB0byBnZW5lcmF0ZSBhIFdTSUwgZmlsZSwgeW91IG5lZWQgdG8KLWtub3cgdGhlIFVSTCB0byBhIFdTREwgZmlsZS48L2Rpdj4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+V1NJTCBoZWxwcyBzeW5jaHJvbml6ZSB0aGlzIHByb2Nlc3MgYnkgbWFpbnRhaW5pbmcgcmVmZXJlbmNlcwotdG8gV1NETCBVUkxzLiBXZWIgc2VydmljZXMgdG9vbHMgdGhhdCBwcm9jZXNzIFdTREwgZG9jdW1lbnRzIC0gc3VjaCBhcyB0aGUKLVdlYiBTZXJ2aWNlIENsaWVudCBhbmQgQ3JlYXRpb24gd2l6YXJkcyAtIHdpbGwgYWNjZXB0IGEgV1NJTCBkb2N1bWVudCBhcyBhCi1zdWJzdGl0dXRlIGZvciBXU0RMLiBUaGlzIGFsbG93cyB5b3UgdG8gY3JlYXRlIGEgc3RhbmRhcmRpemVkIFdTREwgcmVmZXJlbmNlCi0oV1NJTCkgZG9jdW1lbnQgaW4geW91ciBwcm9qZWN0IGR1cmluZyBXZWIgc2VydmljZSBjbGllbnQgZ2VuZXJhdGlvbiwgdGhlbgotYXQgYSBsYXRlciB0aW1lIGVhc2lseSByZWdlbmVyYXRlIHRoZSBjbGllbnQgZnJvbSB0aGF0IHJlZmVyZW5jZSBkb2N1bWVudC4KLU5vIGNvcGllcyBvZiB0aGUgV1NETCBvciBXU0RMIFVSTHMgYXJlIHJlcXVpcmVkLjwvcD4KLTxwPllvdSBjYW4gZ2VuZXJhdGUgYQotV1NJTCBmaWxlIGZyb20gYSBwcmUtZXhpc3RpbmcgV1NETCBmaWxlIG9yIGR1cmluZyBXZWIgc2VydmljZSBjcmVhdGlvbiBvcgotY29uc3VtcHRpb24uPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJuZXN0ZWQxIiB4bWw6bGFuZz0iZW4tdXMiIGlkPSJkMGUyNyI+PGEgbmFtZT0iZDBlMjciPjwhLS0gLS0+PC9hPgotPGgyIGNsYXNzPSJ0b3BpY3RpdGxlMiI+R2VuZXJhdGluZyBhIFdTSUwgZmlsZSB0aG91Z2ggdGhlIGltcG9ydCB1dGlsaXR5PC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRvIGdlbmVyYXRlIGEgV1NJTCBmaWxlIHRocm91Z2ggdGhlIGltcG9ydCB1dGlsaXR5OjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGk+PHNwYW4+T3B0aW9uYWw6IFNlbGVjdCB0aGUgV1NETCBkb2N1bWVudCBmb3Igd2hpY2ggeW91IHdhbnQgdG8gY3JlYXRlCi1hIFdTSUwgZmlsZS48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkZyb20gdGhlICA8c3Ryb25nPkZpbGU8L3N0cm9uZz4gbWVudSwgc2VsZWN0ICA8c3Ryb25nPkltcG9ydDwvc3Ryb25nPiAmZ3Q7ICA8c3Ryb25nPldTSUwgJmd0OwotTmV4dDwvc3Ryb25nPi4gVGhlIFdTSUwgSW1wb3J0IHdpbmRvdyBvcGVucy48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPklmIHlvdSBoYXZlIHNlbGVjdGVkIHRvIHBlcmZvcm0gc3RlcCAxLCB0aGUgV1NJTCBVUkkgZmllbGQgc2hvdWxkCi1iZSBwcmVmaWxsZWQgd2l0aCB0aGUgbmFtZSBvZiB5b3VyIFdTREwgZmlsZSwgd2hlcmUgdGhlIGV4dGVuc2lvbiBoYXMgYmVlbgotY2hhbmdlZCBmcm9tICA8dHQgY2xhc3M9InN5c291dCI+LndzZGw8L3R0PiB0byAgPHR0IGNsYXNzPSJzeXNvdXQiPi53c2lsPC90dD4uCi1UaGUgV1NETCBzZWN0aW9uIHNob3VsZCBjb250YWluIHRoZSBVUkxzIHRvIHRoZSBzZWxlY3RlZCBXU0RMIGZpbGVzLiBZb3UgY2FuCi1hbHNvIGVudGVyIGFkZGl0aW9uYWwgV1NETCBVUkxzLiBBbHRlcm5hdGVseSwgeW91IGNhbiBicm93c2UgdG8gdGhlIGxvY2F0aW9uCi1vZiBhIFdTSUwgZmlsZSwgb3IgbWFudWFsbHkgZW50ZXIgdGhlIGxvY2F0aW9uIG9mIHRoZSBXU0lMIGFuZCBXU0RMIGZpbGVzCi1pbiB0aGUgYXBwcm9wcmlhdGUgbG9jYXRpb25zLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+Q2xpY2sgRmluaXNoLiBBIFdTSUwgZmlsZSB3aWxsIGJlIGdlbmVyYXRlZCBpbiB0aGUgc3BlY2lmaWVkIGxvY2F0aW9uLjwvc3Bhbj4KLTwvbGk+Ci0KLTwvb2w+Ci0KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibmVzdGVkMSIgeG1sOmxhbmc9ImVuLXVzIiBpZD0iZDBlNjIiPjxhIG5hbWU9ImQwZTYyIj48IS0tIC0tPjwvYT4KLTxoMiBjbGFzcz0idG9waWN0aXRsZTIiPkdlbmVyYXRpbmcgYSBXU0lMIGZpbGUgdGhyb3VnaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRvIGdlbmVyYXRlIGEgV1NJTCBmaWxlIHRocm91Z2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlcjo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpPjxzcGFuPk9wZW4gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlci48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPk9wZW4gdGhlIFdTREwgRXhwbG9yZXIgYnkgY2xpY2tpbmcgdGhpcyBpY29uOiAgPGltZyBzcmM9Ii4uL2ltYWdlcy93c2RsaWNvbi5naWYiIGFsdD0iaWNvbiB1c2VkIHRvIGxhdW5jaCB0aGUgd2ViIHNlcnZpY2VzIGV4cGxvcmVyIiAvPjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+T3BlbiBhIFdTREwgZmlsZS48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPlNlbGVjdCB0aGUgV1NETCBmaWxlIHRoYXQgeW91IGhhdmUgb3BlbmVkIGluIHRoZSBOYXZpZ2F0b3IgcGFuZSwKLWFuZCBmcm9tIHRoZSBhdmFpbGFibGUgYWN0aW9ucywgY2hvb3NlIHRvIGltcG9ydCBhIFdTREwgZmlsZSB0byB0aGUgd29ya2JlbmNoCi1ieSBjbGlja2luZyB0aGlzIGljb246ICA8aW1nIHNyYz0iLi4vaW1hZ2VzL21wdHdzZGxpY29uLmdpZiIgYWx0PSJpY29uIHVzZWQgdG8gaW1wb3J0IGEgZmlsZSIgLz48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPlNlbGVjdCAgPHN0cm9uZz5JbXBvcnQgYXMgYSBzZXJ2aWNlIHJlZmVyZW5jZSB0byBhIFdTSUwgZG9jdW1lbnQ8L3N0cm9uZz4uPC9zcGFuPgotPC9saT4KLQotPGxpPjxzcGFuPkVudGVyIGEgbmFtZSBmb3IgdGhlIFdTSUwgZmlsZSB0aGF0IHlvdSB3YW50IHRvIGdlbmVyYXRlLCBhbmQgY2xpY2sKLSA8c3Ryb25nPkdvPC9zdHJvbmc+Ljwvc3Bhbj48L2xpPgotCi08L29sPgotCi08L2Rpdj4KLQotPC9kaXY+Ci0KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3Rsb2dleHAuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3Rsb2dleHAuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQwZjBlNy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90bG9nZXhwLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICJ0YXNrLmR0ZCI+Ci08dGFzayBpZD0idGxvZ2V4cCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5Mb2dnaW5nIGluIHRvIGEgVURESSByZWdpc3RyeTwvdGl0bGU+Ci08c2hvcnRkZXNjPklmIHlvdSBoYXZlIHB1Ymxpc2hlZCB5b3VyIFdlYiBzZXJ2aWNlIHRvIGEgVURESSByZWdpc3RyeSB5b3UgY2FuCi1sb2cgaW50byB0aGUgcmVnaXN0cnkgYW5kIG1hbmFnZSB0aGUgc2VydmljZSB0aHJvdWdoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPlVEREk8aW5kZXh0ZXJtPmxvZ2dpbmcgaW50byBhIHJlZ2lzdHJ5PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPldlYiBTZXJ2aWNlcyBFeHBsb3JlcjxpbmRleHRlcm0+bG9nZ2luZyBpbnRvIGEgVURESSByZWdpc3RyeTwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08cHJlcmVxPlByZXJlcXVpc2l0ZXM6PG9sPgotPGxpPjx4cmVmIGhyZWY9InRyZWcuZGl0YSI+UmVnaXN0ZXIgd2l0aCBhIHJlZ2lzdHJ5PC94cmVmPjwvbGk+Ci08bGk+PHhyZWYgaHJlZj0idHN0cnRleHAuZGl0YSI+TGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L3hyZWY+PC9saT4KLTwvb2w+PC9wcmVyZXE+Ci08Y29udGV4dD48cD5UbyBMb2cgaW4gdG8gdGhlIHJlZ2lzdHJ5OjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPk9uY2UgeW91IGhhdmUgc2VsZWN0ZWQgYSByZWdpc3RyeSwgeW91IGNhbiBzY3JvbGwgdG8gdGhlIDx1aWNvbnRyb2w+T3RoZXIKLUFjdGlvbnM8L3VpY29udHJvbD4gc2VjdGlvbiBvZiB0aGUgcGFnZSBhbmQgc2VsZWN0IDx1aWNvbnRyb2w+TG9naW48L3VpY29udHJvbD4sCi1vciB1c2UgdGhlIGxvZ2luIGJ1dHRvbiBhdCB0aGUgdG9wIG9mIHRoZSBFeHBsb3JlcjogPGltYWdlIGhyZWY9Ii4uL2ltYWdlcy9sb2dpbmljb24uZ2lmIj4KLTxhbHQ+c2NyZWVuIGNhcHR1cmUgb2YgdGhlIGxvZ2luIGljb248L2FsdD48L2ltYWdlPi48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkVudGVyIHRoZSBVUkwgKGlmIGl0IGhhcyBub3QgYmVlbiBwcmVmaWxsZWQgZm9yIHlvdSksIHRoZSB1c2VyCi1JRCwgYW5kIHRoZSBwYXNzd29yZCBmb3IgdGhlIHJlZ2lzdHJ5IGFuZCBjbGljayA8dWljb250cm9sPkdvPC91aWNvbnRyb2w+LjwvY21kPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5UaGUgU3VtbWFyeSBvZiBCdXNpbmVzcyBwYWdlIGRpc3BsYXlzLiBJdCBsaXN0cyBhbGwgdGhlIGJ1c2luZXNzZXMKLWFzc29jaWF0ZWQgd2l0aCB0aGUgcmVnaXN0cnkuPC9jbWQ+PC9zdGVwPgotPC9zdGVwcz4KLTxyZXN1bHQ+PHA+V2hlbiB5b3UgaGF2ZSBzdWNjZXNzZnVsbHkgbG9nZ2VkIGluLCB0aGUgU3RhdHVzIHBhbmUgZGlzcGxheXMKLWEgbWVzc2FnZSBpbmRpY2F0aW5nIHlvdSB3ZXJlIHN1Y2Nlc3NmdWwuPC9wPjwvcmVzdWx0PgotPHBvc3RyZXE+VG8gbG9nIG91dCBvZiB0aGUgcmVnaXN0cnkgY2xpY2sgdGhlIExvZ291dCBidXR0b246IDxpbWFnZSBocmVmPSIuLi9pbWFnZXMvbG9nb3V0aWNvbi5naWYiPgotPGFsdD5zY3JlZW4gY2FwdHVyZSBvZiB0aGUgbG9nb3V0IGljb248L2FsdD48L2ltYWdlPi48L3Bvc3RyZXE+Ci08L3Rhc2tib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgQ29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+V2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jdWRkaS5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9InR1ZGRpZXhwLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRzdHJ0ZXhwLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRyZWcuZGl0YSI+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3Rhc2tzL3RvdmVyd3MuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PiBEZXZlbG9waW5nIFdlYiBzZXJ2aWNlczwvbGlua3RleHQ+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBSZWZlcmVuY2U8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vcmVmL3J1ZGRpLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L3Rhc2s+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90bG9nZXhwLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90bG9nZXhwLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwNmVkM2YuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGxvZ2V4cC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDciIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iTG9nZ2luZyBpbiB0byBhIFVEREkgcmVnaXN0cnkiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iSWYgeW91IGhhdmUgcHVibGlzaGVkIHlvdXIgV2ViIHNlcnZpY2UgdG8gYSBVRERJIHJlZ2lzdHJ5IHlvdSBjYW4gbG9nIGludG8gdGhlIHJlZ2lzdHJ5IGFuZCBtYW5hZ2UgdGhlIHNlcnZpY2UgdGhyb3VnaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJJZiB5b3UgaGF2ZSBwdWJsaXNoZWQgeW91ciBXZWIgc2VydmljZSB0byBhIFVEREkgcmVnaXN0cnkgeW91IGNhbiBsb2cgaW50byB0aGUgcmVnaXN0cnkgYW5kIG1hbmFnZSB0aGUgc2VydmljZSB0aHJvdWdoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIuIiAvPgotPG1ldGEgY29udGVudD0iVURESSwgbG9nZ2luZyBpbnRvIGEgcmVnaXN0cnksIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciwgbG9nZ2luZyBpbnRvIGEgVURESSByZWdpc3RyeSIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlVEREksIGxvZ2dpbmcgaW50byBhIHJlZ2lzdHJ5LCBXZWIgU2VydmljZXMgRXhwbG9yZXIsIGxvZ2dpbmcgaW50byBhIFVEREkgcmVnaXN0cnkiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9jb25jZXB0cy9jdWRkaS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0dWRkaWV4cC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0c3RydGV4cC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0cmVnLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90b3ZlcndzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3JlZi9ydWRkaS5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRsb2dleHAiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5Mb2dnaW5nIGluIHRvIGEgVURESSByZWdpc3RyeTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idGxvZ2V4cCI+PGEgbmFtZT0idGxvZ2V4cCI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+TG9nZ2luZyBpbiB0byBhIFVEREkgcmVnaXN0cnk8L2gxPgotCi0KLQotPGRpdj48cD5JZiB5b3UgaGF2ZSBwdWJsaXNoZWQgeW91ciBXZWIgc2VydmljZSB0byBhIFVEREkgcmVnaXN0cnkgeW91IGNhbgotbG9nIGludG8gdGhlIHJlZ2lzdHJ5IGFuZCBtYW5hZ2UgdGhlIHNlcnZpY2UgdGhyb3VnaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLjwvcD4KLQotPGRpdiBjbGFzcz0icCI+UHJlcmVxdWlzaXRlczo8b2w+Ci08bGk+PGEgaHJlZj0idHJlZy5odG1sIj5SZWdpc3RlciB3aXRoIGEgcmVnaXN0cnk8L2E+PC9saT4KLQotPGxpPjxhIGhyZWY9InRzdHJ0ZXhwLmh0bWwiPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPjwvbGk+Ci0KLTwvb2w+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VG8gTG9nIGluIHRvIHRoZSByZWdpc3RyeTo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpPjxzcGFuPk9uY2UgeW91IGhhdmUgc2VsZWN0ZWQgYSByZWdpc3RyeSwgeW91IGNhbiBzY3JvbGwgdG8gdGhlIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk90aGVyCi1BY3Rpb25zPC9zcGFuPiBzZWN0aW9uIG9mIHRoZSBwYWdlIGFuZCBzZWxlY3QgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+TG9naW48L3NwYW4+LAotb3IgdXNlIHRoZSBsb2dpbiBidXR0b24gYXQgdGhlIHRvcCBvZiB0aGUgRXhwbG9yZXI6IDxpbWcgc3JjPSIuLi9pbWFnZXMvbG9naW5pY29uLmdpZiIgYWx0PSJzY3JlZW4gY2FwdHVyZSBvZiB0aGUgbG9naW4gaWNvbiIgLz4uPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5FbnRlciB0aGUgVVJMIChpZiBpdCBoYXMgbm90IGJlZW4gcHJlZmlsbGVkIGZvciB5b3UpLCB0aGUgdXNlcgotSUQsIGFuZCB0aGUgcGFzc3dvcmQgZm9yIHRoZSByZWdpc3RyeSBhbmQgY2xpY2sgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+R288L3NwYW4+Ljwvc3Bhbj4KLTwvbGk+Ci0KLTxsaT48c3Bhbj5UaGUgU3VtbWFyeSBvZiBCdXNpbmVzcyBwYWdlIGRpc3BsYXlzLiBJdCBsaXN0cyBhbGwgdGhlIGJ1c2luZXNzZXMKLWFzc29jaWF0ZWQgd2l0aCB0aGUgcmVnaXN0cnkuPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPldoZW4geW91IGhhdmUgc3VjY2Vzc2Z1bGx5IGxvZ2dlZCBpbiwgdGhlIFN0YXR1cyBwYW5lIGRpc3BsYXlzCi1hIG1lc3NhZ2UgaW5kaWNhdGluZyB5b3Ugd2VyZSBzdWNjZXNzZnVsLjwvcD4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj5UbyBsb2cgb3V0IG9mIHRoZSByZWdpc3RyeSBjbGljayB0aGUgTG9nb3V0IGJ1dHRvbjogPGltZyBzcmM9Ii4uL2ltYWdlcy9sb2dvdXRpY29uLmdpZiIgYWx0PSJzY3JlZW4gY2FwdHVyZSBvZiB0aGUgbG9nb3V0IGljb24iIC8+LjwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgQ29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuaHRtbCI+IFRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuaHRtbCI+V2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jdWRkaS5odG1sIiB0aXRsZT0iVW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIGEgd2F5IHRvIHB1Ymxpc2ggYW5kIGRpc2NvdmVyIGluZm9ybWF0aW9uIGFib3V0IFdlYiBzZXJ2aWNlcy4iPlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0idHVkZGlleHAuaHRtbCIgdGl0bGU9IlRocm91Z2ggVURESSBhbmQgV1NJTCwgb3RoZXIgYXBwbGljYXRpb25zIGNhbiBkaXNjb3ZlciBXU0RMIGRvY3VtZW50cyBhbmQgYmluZCB3aXRoIHRoZW0gdG8gZXhlY3V0ZSB0cmFuc2FjdGlvbnMgb3IgcGVyZm9ybSBvdGhlciBidXNpbmVzcyBwcm9jZXNzZXMuIj5QdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXM8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRzdHJ0ZXhwLmh0bWwiIHRpdGxlPSJUaGUgV2ViIHNlcnZpY2VzIHRvb2xzIGFsbG93cyB5b3UgdG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgaW4gc2V2ZXJhbCB3YXlzLiI+TGF1bmNoaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRyZWcuaHRtbCIgdGl0bGU9IkluIG9yZGVyIHRvIHB1Ymxpc2ggeW91ciBidXNpbmVzcyBlbnRpdHkgYW5kIFdlYiBzZXJ2aWNlIHRvIGEgVURESSByZWdpc3RyeSwgeW91IG11c3QgZmlyc3QgcmVnaXN0ZXIgd2l0aCB0aGUgcmVnaXN0cnkgdGhhdCB5b3Ugd2FudCB0byB1c2UuIj5SZWdpc3RlcmluZyB3aXRoIGEgVURESSByZWdpc3RyeTwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3Rhc2tzL3RvdmVyd3MuaHRtbCI+IERldmVsb3BpbmcgV2ViIHNlcnZpY2VzPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFJlZmVyZW5jZTwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL3JlZi9ydWRkaS5odG1sIiB0aXRsZT0iT25jZSB5b3UgaGF2ZSByZWdpc3RlcmVkIGFuZCBsb2dnZWQgaW4gdG8gdGhlIFVEREkgcmVnaXN0cnkgdGhhdCB5b3Ugd2FudCB0byB1c2UsIHlvdSBjYW4gcmVnaXN0ZXIgeW91ciBXZWIgc2VydmljZS4gUmVnaXN0cmF0aW9uIG9mIGEgc2VydmljZSBpbnZvbHZlcyBmb3VyIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgdHlwZXM6IGJ1c2luZXNzIGluZm9ybWF0aW9uLCBzZXJ2aWNlIGluZm9ybWF0aW9uLCBiaW5kaW5nIGluZm9ybWF0aW9uLCBhbmQgaW5mb3JtYXRpb24gZGVzY3JpYmluZyB0aGUgc3BlY2lmaWNhdGlvbnMgZm9yIHNlcnZpY2VzLiBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZGF0YSB0eXBlcyBpcyBkZXNjcmliZWQgaW4gRmlndXJlIDEuIj5EYXRhIHN0cnVjdHVyZSB0eXBlcyAoVURESSByZWdpc3RyeSk8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RwdWJlbnQuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RwdWJlbnQuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBhZmRjMS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90cHViZW50LmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+Ci08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiIKLSAidGFzay5kdGQiPgotPHRhc2sgaWQ9InRwdWJlbnQiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+UHVibGlzaGluZyBhIGJ1c2luZXNzIGVudGl0eTwvdGl0bGU+Ci08c2hvcnRkZXNjPkEgYnVzaW5lc3MgZW50aXR5IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBidXNpbmVzcyB0aGF0Ci1oYXMgcHVibGlzaGVkIGEgc2VydmljZS4mbmJzcDsgQmVmb3JlIHlvdSBjYW4gcHVibGlzaCBhIGJ1c2luZXNzIHNlcnZpY2UsCi15b3UgbXVzdCBwdWJsaXNoIGEgYnVzaW5lc3MgZW50aXR5Ljwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5VRERJPGluZGV4dGVybT5wdWJsaXNoaW5nIGEgYnVzaW5lc3MgZW50aXR5PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+cHVibGlzaGluZyBhIGJ1c2luZXNzIGVudGl0eTwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPGluZGV4dGVybT5idXNpbmVzcyBlbnRpdGllczxpbmRleHRlcm0+cHVibGlzaGluZyB0byBVRERJPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxwcmVyZXE+UHJlcmVxdWlzaXRlczo8b2w+Ci08bGk+PHhyZWYgaHJlZj0idHJlZy5kaXRhIj5SZWdpc3RlciB3aXRoIGEgcmVnaXN0cnk8L3hyZWY+PC9saT4KLTxsaT48eHJlZiBocmVmPSJ0c3RydGV4cC5kaXRhIj5MYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwveHJlZj48L2xpPgotPGxpPjx4cmVmIGhyZWY9InRhZGRyZWcuZGl0YSI+QWRkIHRoZSByZWdpc3RyeSB0byB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC94cmVmPjwvbGk+Ci08L29sPjwvcHJlcmVxPgotPGNvbnRleHQ+PHA+WW91IGNhbiBwdWJsaXNoIGEgYnVzaW5lc3MgZW50aXR5IHVzaW5nIHR3byBkaWZmZXJlbnQgcHVibGljYXRpb24KLWZvcm1hdHM6IHNpbXBsZSBhbmQgYWR2YW5jZWQuPC9wPjxscT4gPHA+IDx1aWNvbnRyb2w+U2ltcGxlPC91aWNvbnRyb2w+IEFsbG93cwoteW91IHRvIGVudGVyIHRoZSBtaW5pbWFsIGFtb3VudCBvZiBpbmZvcm1hdGlvbiByZXF1aXJlZCB0byBwdWJsaXNoIHlvdXIgYnVzaW5lc3MKLWVudGl0eS4mbmJzcDsgQSBzaW1wbGUgcHVibGlzaCBvbmx5IGFsbG93cyB5b3UgdG8gc3BlY2lmeSBvbmx5IG9uZSBuYW1lIGFuZAotb25lIGJ1c2luZXNzIGRlc2NyaXB0aW9uLjwvcD48cD4gPHVpY29udHJvbD5BZHZhbmNlZCA8L3VpY29udHJvbD4gQWxsb3dzIHlvdQotdG8gZW50ZXIgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB5b3VyIGJ1c2luZXNzIGVudGl0eS4gQW4gYWR2YW5jZWQgcHVibGlzaAotYWxsb3dzIHlvdSB0byBzcGVjaWZ5IG11bHRpcGxlIG5hbWVzIGFuZCBkZXNjcmlwdGlvbnMgZm9yIG11bHRpLWxpbmd1YWwgc3VwcG9ydC48L3A+IDwvbHE+PC9jb250ZXh0PgotPC90YXNrYm9keT4KLTx0YXNrIGlkPSJkMGU3NCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5QdWJsaXNoIGEgYnVzaW5lc3MgZW50aXR5IHVzaW5nIHRoZSBzaW1wbGUgb3B0aW9uPC90aXRsZT4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlRvIHB1Ymxpc2ggYSBidXNpbmVzcyBlbnRpdHkgdXNpbmcgdGhlIHNpbXBsZSBvcHRpb246PC9wPjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+SW4gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlciwgc2VsZWN0IFVEREkgTWFpbiBhbmQgc2VsZWN0IHRoZSByZWdpc3RyeQotdG8gd2hpY2ggeW91IHdhbnQgdG8gcHVibGlzaCB0aGUgYnVzaW5lc3MgZW50aXR5LjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SW4gdGhlJm5ic3A7TmF2aWdhdG9yIHBhbmUsIHNlbGVjdCB0aGUgYnVzaW5lc3MgZW50aXR5IGZvciB3aGljaAoteW91IHdhbnQgdG8gcHVibGlzaCB0aGUgYnVzaW5lc3Mgc2VydmljZS48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkluIHRoZSBBY3Rpb25zIHBhbmUgdG9vbGJhciwgY2xpY2sgdGhlICA8Yj5QdWJsaXNoPC9iPiBpY29uICA8aW1hZ2UKLWFsdD0iUGljdHVyZSBvZiB0aGUgUHVibGlzaCAgaWNvbi4iIGhyZWY9Ii4uL2ltYWdlcy9wdWJsaXNoMi5naWYiPjwvaW1hZ2U+LjwvY21kPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5TZWxlY3QgdGhlICA8Yj5TaW1wbGU8L2I+IHJhZGlvIGJ1dHRvbi48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkVudGVyIHRoZSBwdWJsaXNoIFVSTCwgeW91ciB1c2VyIElELCBwYXNzd29yZCwgV1NETCBVUkwsIGJ1c2luZXNzCi1uYW1lLCBhbmQgYnVzaW5lc3MgZGVzY3JpcHRpb24gaW4gdGhlIHJlc3BlY3RpdmUgZmllbGRzLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+Q2xpY2sgIDxiPkdvPC9iPiB0byBwdWJsaXNoIHlvdXIgYnVzaW5lc3MgZW50aXR5LjwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08cmVzdWx0PjxwPlRoZSA8dG0gdG1jbGFzcz0iaWJtIiB0bW93bmVyPSJJQk0gQ29ycG9yYXRpb24iIHRtdHlwZT0icmVnIiB0cmFkZW1hcms9IklCTSI+SUJNPC90bT4gV2ViCi1TZXJ2aWNlcyBFeHBsb3JlciBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgd2l0aCB5b3VyIHB1Ymxpc2hlZCBXZWIgc2VydmljZS4KLVRoZSByZWdpc3RyeSBjb250YWlucyBwb2ludGVycyB0byB0aGUgVVJMIG9mIHRoZSBXU0RMIHNlcnZpY2UgZG9jdW1lbnQgb2YKLXRoZSBXZWIgc2VydmljZS4gQnVzaW5lc3NlcyBjYW4gbm93IGRpc2NvdmVyIGFuZCBpbnRlZ3JhdGUgd2l0aCB5b3VyIFdlYiBzZXJ2aWNlLjwvcD48L3Jlc3VsdD4KLTwvdGFza2JvZHk+Ci08L3Rhc2s+Ci08dGFzayBpZD0iZDBlMTEzIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPlB1Ymxpc2ggYSBidXNpbmVzcyBlbnRpdHkgdXNpbmcgdGhlIGFkdmFuY2VkIG9wdGlvbjwvdGl0bGU+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5UbyBwdWJsaXNoIGEgYnVzaW5lc3MgZW50aXR5IHVzaW5nIHRoZSBhZHZhbmNlZCBvcHRpb246PC9wPjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+SW4gdGhlJm5ic3A7IFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBOYXZpZ2F0b3IgcGFuZSwgc2VsZWN0IHRoZSBidXNpbmVzcwotZW50aXR5IGZvciB3aGljaCB5b3Ugd2FudCB0byBwdWJsaXNoIHRoZSBidXNpbmVzcyBzZXJ2aWNlLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SW4gdGhlIEFjdGlvbnMgcGFuZSB0b29sYmFyLCBjbGljayB0aGUgIDxiPlB1Ymxpc2ggU2VydmljZTwvYj4gaWNvbgotIDxpbWFnZSBhbHQ9IlBpY3R1cmUgb2YgdGhlIFB1Ymxpc2ggU2VydmljZSBpY29uLiIgaHJlZj0iLi4vaW1hZ2VzL3B1YnNlcnYuZ2lmIj4KLTwvaW1hZ2U+LjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+U2VsZWN0IHRoZSAgPGI+QWR2YW5jZWQ8L2I+IHJhZGlvIGJ1dHRvbi48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkVudGVyIHRoZSBwdWJsaXNoIFVSTCwgeW91ciB1c2VyIElELCBwYXNzd29yZCwgYW5kIFdTREwgVVJMIGluCi10aGUgcmVzcGVjdGl2ZSBmaWVsZHMuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5DbGljayAgPGI+QWRkPC9iPiB0byBjcmVhdGUgYnVzaW5lc3MgbmFtZXMuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5DbGljayAgPGI+QWRkPC9iPiB0byBjcmVhdGUgYnVzaW5lc3MgZGVzY3JpcHRpb25zLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+Q2xpY2sgPHVpY29udHJvbD5BZGQ8L3VpY29udHJvbD4gdG8gY3JlYXRlIGFuIGlkZW50aWZpZXIuIEZvciBleGFtcGxlLAotYW4gaWRlbnRpZmllciBmb3IgeW91ciBidXNpbmVzcyBlbnRpdHkgbWF5IGJlIHlvdXIgYnVzaW5lc3MgcGhvbmUgbnVtYmVyLgotVGhlIGtleSBuYW1lIHdvdWxkIGJlICJQaG9uZSBOdW1iZXIiIGFuZCB0aGUga2V5IHZhbHVlIHdvdWxkIGJlIHlvdXIgYnVzaW5lc3MKLXRlbGVwaG9uZSBudW1iZXIuIDwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+Q2xpY2sgIDxiPkFkZDwvYj4gdG8gY3JlYXRlIGNhdGVnb3JpZXMuIEVudGVyIHlvdXIgYnVzaW5lc3MgY2F0ZWdvcmllcy4KLVNlbGVjdCBhIGNhdGVnb3J5IHR5cGUgZnJvbSB0aGUgZHJvcCBkb3duIGxpc3QuIENsaWNrICA8Yj5Ccm93c2U8L2I+IHRvIG9wZW4KLXRoZSBDYXRlZ29yaWVzIHBhbmUuIE5hdmlnYXRlIHRocm91Z2ggdGhlIGhpZXJhcmNoaWNhbCB0YXhvbm9teSBhbmQgc2VsZWN0Ci10aGUgYXBwcm9wcmlhdGUgY2xhc3NpZmljYXRpb24gZm9yIHlvdXIgYnVzaW5lc3Mgc2VydmljZSwgdGhlbiBleGl0IHRoZSBDYXRlZ29yaWVzCi1wYW5lLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+Q2xpY2sgIDxiPkdvPC9iPiB0byBwdWJsaXNoIHlvdXIgYnVzaW5lc3MgZW50aXR5LjwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08cmVzdWx0PjxwPlRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgaXMgYXV0b21hdGljYWxseSB1cGRhdGVkIHdpdGggeW91ciBwdWJsaXNoZWQKLVdlYiBzZXJ2aWNlLiBUaGUgcmVnaXN0cnkgY29udGFpbnMgcG9pbnRlcnMgdG8gdGhlIFVSTCBvZiB0aGUgV1NETCBzZXJ2aWNlCi1kb2N1bWVudCBvZiB0aGUgV2ViIHNlcnZpY2UuIEJ1c2luZXNzZXMgY2FuIG5vdyBkaXNjb3ZlciBhbmQgaW50ZWdyYXRlIHdpdGgKLXlvdXIgV2ViIHNlcnZpY2UuPC9wPjwvcmVzdWx0PgotPC90YXNrYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+IFRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vY29uY2VwdHMvY3VkZGkuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+Ci08bGluayBocmVmPSJ0dWRkaWV4cC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0c3RydGV4cC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0cmVnLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgUmVmZXJlbmNlPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL3JlZi9ydWRkaS5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgotPC90YXNrPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHB1YmVudC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHB1YmVudC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2M2E1YmExLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RwdWJlbnQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE2MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwNyIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJQdWJsaXNoaW5nIGEgYnVzaW5lc3MgZW50aXR5IiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IkEgYnVzaW5lc3MgZW50aXR5IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBidXNpbmVzcyB0aGF0IGhhcyBwdWJsaXNoZWQgYSBzZXJ2aWNlLsKgIEJlZm9yZSB5b3UgY2FuIHB1Ymxpc2ggYSBidXNpbmVzcyBzZXJ2aWNlLCB5b3UgbXVzdCBwdWJsaXNoIGEgYnVzaW5lc3MgZW50aXR5LiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJBIGJ1c2luZXNzIGVudGl0eSBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYnVzaW5lc3MgdGhhdCBoYXMgcHVibGlzaGVkIGEgc2VydmljZS7CoCBCZWZvcmUgeW91IGNhbiBwdWJsaXNoIGEgYnVzaW5lc3Mgc2VydmljZSwgeW91IG11c3QgcHVibGlzaCBhIGJ1c2luZXNzIGVudGl0eS4iIC8+Ci08bWV0YSBjb250ZW50PSJVRERJLCBwdWJsaXNoaW5nIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZXMsIGJ1c2luZXNzIGVudGl0aWVzLCBwdWJsaXNoaW5nIHRvIFVEREkiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJVRERJLCBwdWJsaXNoaW5nIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZXMsIGJ1c2luZXNzIGVudGl0aWVzLCBwdWJsaXNoaW5nIHRvIFVEREkiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRwdWJlbnQiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5QdWJsaXNoaW5nIGEgYnVzaW5lc3MgZW50aXR5PC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0cHViZW50Ij48YSBuYW1lPSJ0cHViZW50Ij48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5QdWJsaXNoaW5nIGEgYnVzaW5lc3MgZW50aXR5PC9oMT4KLQotCi0KLTxkaXY+PHA+QSBidXNpbmVzcyBlbnRpdHkgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGJ1c2luZXNzIHRoYXQKLWhhcyBwdWJsaXNoZWQgYSBzZXJ2aWNlLsKgIEJlZm9yZSB5b3UgY2FuIHB1Ymxpc2ggYSBidXNpbmVzcyBzZXJ2aWNlLAoteW91IG11c3QgcHVibGlzaCBhIGJ1c2luZXNzIGVudGl0eS48L3A+Ci0KLTxkaXYgY2xhc3M9InAiPlByZXJlcXVpc2l0ZXM6PG9sPgotPGxpPjxhIGhyZWY9InRyZWcuaHRtbCI+UmVnaXN0ZXIgd2l0aCBhIHJlZ2lzdHJ5PC9hPjwvbGk+Ci0KLTxsaT48YSBocmVmPSJ0c3RydGV4cC5odG1sIj5MYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYT48L2xpPgotCi08bGk+PGEgaHJlZj0idGFkZHJlZy5odG1sIj5BZGQgdGhlIHJlZ2lzdHJ5IHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+PC9saT4KLQotPC9vbD4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5Zb3UgY2FuIHB1Ymxpc2ggYSBidXNpbmVzcyBlbnRpdHkgdXNpbmcgdHdvIGRpZmZlcmVudCBwdWJsaWNhdGlvbgotZm9ybWF0czogc2ltcGxlIGFuZCBhZHZhbmNlZC48L3A+Ci08YmxvY2txdW90ZT4gPHA+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlNpbXBsZTwvc3Bhbj4gQWxsb3dzCi15b3UgdG8gZW50ZXIgdGhlIG1pbmltYWwgYW1vdW50IG9mIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIHB1Ymxpc2ggeW91ciBidXNpbmVzcwotZW50aXR5LsKgIEEgc2ltcGxlIHB1Ymxpc2ggb25seSBhbGxvd3MgeW91IHRvIHNwZWNpZnkgb25seSBvbmUgbmFtZSBhbmQKLW9uZSBidXNpbmVzcyBkZXNjcmlwdGlvbi48L3A+Ci08cD4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QWR2YW5jZWQgPC9zcGFuPiBBbGxvd3MgeW91Ci10byBlbnRlciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHlvdXIgYnVzaW5lc3MgZW50aXR5LiBBbiBhZHZhbmNlZCBwdWJsaXNoCi1hbGxvd3MgeW91IHRvIHNwZWNpZnkgbXVsdGlwbGUgbmFtZXMgYW5kIGRlc2NyaXB0aW9ucyBmb3IgbXVsdGktbGluZ3VhbCBzdXBwb3J0LjwvcD4KLSA8L2Jsb2NrcXVvdGU+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9Im5lc3RlZDEiIHhtbDpsYW5nPSJlbi11cyIgaWQ9ImQwZTc0Ij48YSBuYW1lPSJkMGU3NCI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj5QdWJsaXNoIGEgYnVzaW5lc3MgZW50aXR5IHVzaW5nIHRoZSBzaW1wbGUgb3B0aW9uPC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRvIHB1Ymxpc2ggYSBidXNpbmVzcyBlbnRpdHkgdXNpbmcgdGhlIHNpbXBsZSBvcHRpb246PC9wPgotPC9kaXY+Ci0KLTxvbD4KLTxsaT48c3Bhbj5JbiB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLCBzZWxlY3QgVURESSBNYWluIGFuZCBzZWxlY3QgdGhlIHJlZ2lzdHJ5Ci10byB3aGljaCB5b3Ugd2FudCB0byBwdWJsaXNoIHRoZSBidXNpbmVzcyBlbnRpdHkuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5JbiB0aGXCoE5hdmlnYXRvciBwYW5lLCBzZWxlY3QgdGhlIGJ1c2luZXNzIGVudGl0eSBmb3Igd2hpY2gKLXlvdSB3YW50IHRvIHB1Ymxpc2ggdGhlIGJ1c2luZXNzIHNlcnZpY2UuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5JbiB0aGUgQWN0aW9ucyBwYW5lIHRvb2xiYXIsIGNsaWNrIHRoZSAgPHN0cm9uZz5QdWJsaXNoPC9zdHJvbmc+IGljb24gIDxpbWcgc3JjPSIuLi9pbWFnZXMvcHVibGlzaDIuZ2lmIiBhbHQ9IlBpY3R1cmUgb2YgdGhlIFB1Ymxpc2ggIGljb24uIiAvPi48L3NwYW4+Ci08L2xpPgotCi08bGk+PHNwYW4+U2VsZWN0IHRoZSAgPHN0cm9uZz5TaW1wbGU8L3N0cm9uZz4gcmFkaW8gYnV0dG9uLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+RW50ZXIgdGhlIHB1Ymxpc2ggVVJMLCB5b3VyIHVzZXIgSUQsIHBhc3N3b3JkLCBXU0RMIFVSTCwgYnVzaW5lc3MKLW5hbWUsIGFuZCBidXNpbmVzcyBkZXNjcmlwdGlvbiBpbiB0aGUgcmVzcGVjdGl2ZSBmaWVsZHMuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5DbGljayAgPHN0cm9uZz5Hbzwvc3Ryb25nPiB0byBwdWJsaXNoIHlvdXIgYnVzaW5lc3MgZW50aXR5Ljwvc3Bhbj48L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UaGUgSUJNPHN1cD7Crjwvc3VwPiBXZWIKLVNlcnZpY2VzIEV4cGxvcmVyIGlzIGF1dG9tYXRpY2FsbHkgdXBkYXRlZCB3aXRoIHlvdXIgcHVibGlzaGVkIFdlYiBzZXJ2aWNlLgotVGhlIHJlZ2lzdHJ5IGNvbnRhaW5zIHBvaW50ZXJzIHRvIHRoZSBVUkwgb2YgdGhlIFdTREwgc2VydmljZSBkb2N1bWVudCBvZgotdGhlIFdlYiBzZXJ2aWNlLiBCdXNpbmVzc2VzIGNhbiBub3cgZGlzY292ZXIgYW5kIGludGVncmF0ZSB3aXRoIHlvdXIgV2ViIHNlcnZpY2UuPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibmVzdGVkMSIgeG1sOmxhbmc9ImVuLXVzIiBpZD0iZDBlMTEzIj48YSBuYW1lPSJkMGUxMTMiPjwhLS0gLS0+PC9hPgotPGgyIGNsYXNzPSJ0b3BpY3RpdGxlMiI+UHVibGlzaCBhIGJ1c2luZXNzIGVudGl0eSB1c2luZyB0aGUgYWR2YW5jZWQgb3B0aW9uPC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRvIHB1Ymxpc2ggYSBidXNpbmVzcyBlbnRpdHkgdXNpbmcgdGhlIGFkdmFuY2VkIG9wdGlvbjo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpPjxzcGFuPkluIHRoZcKgIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBOYXZpZ2F0b3IgcGFuZSwgc2VsZWN0IHRoZSBidXNpbmVzcwotZW50aXR5IGZvciB3aGljaCB5b3Ugd2FudCB0byBwdWJsaXNoIHRoZSBidXNpbmVzcyBzZXJ2aWNlLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+SW4gdGhlIEFjdGlvbnMgcGFuZSB0b29sYmFyLCBjbGljayB0aGUgIDxzdHJvbmc+UHVibGlzaCBTZXJ2aWNlPC9zdHJvbmc+IGljb24KLSA8aW1nIHNyYz0iLi4vaW1hZ2VzL3B1YnNlcnYuZ2lmIiBhbHQ9IlBpY3R1cmUgb2YgdGhlIFB1Ymxpc2ggU2VydmljZSBpY29uLiIgLz4uPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5TZWxlY3QgdGhlICA8c3Ryb25nPkFkdmFuY2VkPC9zdHJvbmc+IHJhZGlvIGJ1dHRvbi48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkVudGVyIHRoZSBwdWJsaXNoIFVSTCwgeW91ciB1c2VyIElELCBwYXNzd29yZCwgYW5kIFdTREwgVVJMIGluCi10aGUgcmVzcGVjdGl2ZSBmaWVsZHMuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5DbGljayAgPHN0cm9uZz5BZGQ8L3N0cm9uZz4gdG8gY3JlYXRlIGJ1c2luZXNzIG5hbWVzLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+Q2xpY2sgIDxzdHJvbmc+QWRkPC9zdHJvbmc+IHRvIGNyZWF0ZSBidXNpbmVzcyBkZXNjcmlwdGlvbnMuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5DbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5BZGQ8L3NwYW4+IHRvIGNyZWF0ZSBhbiBpZGVudGlmaWVyLiBGb3IgZXhhbXBsZSwKLWFuIGlkZW50aWZpZXIgZm9yIHlvdXIgYnVzaW5lc3MgZW50aXR5IG1heSBiZSB5b3VyIGJ1c2luZXNzIHBob25lIG51bWJlci4KLVRoZSBrZXkgbmFtZSB3b3VsZCBiZSAiUGhvbmUgTnVtYmVyIiBhbmQgdGhlIGtleSB2YWx1ZSB3b3VsZCBiZSB5b3VyIGJ1c2luZXNzCi10ZWxlcGhvbmUgbnVtYmVyLiA8L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkNsaWNrICA8c3Ryb25nPkFkZDwvc3Ryb25nPiB0byBjcmVhdGUgY2F0ZWdvcmllcy4gRW50ZXIgeW91ciBidXNpbmVzcyBjYXRlZ29yaWVzLgotU2VsZWN0IGEgY2F0ZWdvcnkgdHlwZSBmcm9tIHRoZSBkcm9wIGRvd24gbGlzdC4gQ2xpY2sgIDxzdHJvbmc+QnJvd3NlPC9zdHJvbmc+IHRvIG9wZW4KLXRoZSBDYXRlZ29yaWVzIHBhbmUuIE5hdmlnYXRlIHRocm91Z2ggdGhlIGhpZXJhcmNoaWNhbCB0YXhvbm9teSBhbmQgc2VsZWN0Ci10aGUgYXBwcm9wcmlhdGUgY2xhc3NpZmljYXRpb24gZm9yIHlvdXIgYnVzaW5lc3Mgc2VydmljZSwgdGhlbiBleGl0IHRoZSBDYXRlZ29yaWVzCi1wYW5lLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+Q2xpY2sgIDxzdHJvbmc+R288L3N0cm9uZz4gdG8gcHVibGlzaCB5b3VyIGJ1c2luZXNzIGVudGl0eS48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgd2l0aCB5b3VyIHB1Ymxpc2hlZAotV2ViIHNlcnZpY2UuIFRoZSByZWdpc3RyeSBjb250YWlucyBwb2ludGVycyB0byB0aGUgVVJMIG9mIHRoZSBXU0RMIHNlcnZpY2UKLWRvY3VtZW50IG9mIHRoZSBXZWIgc2VydmljZS4gQnVzaW5lc3NlcyBjYW4gbm93IGRpc2NvdmVyIGFuZCBpbnRlZ3JhdGUgd2l0aAoteW91ciBXZWIgc2VydmljZS48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIENvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmh0bWwiPiBUb29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWwiPldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3VkZGkuaHRtbCIgdGl0bGU9IlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpIHNwZWNpZmljYXRpb24gZGVmaW5lcyBhIHdheSB0byBwdWJsaXNoIGFuZCBkaXNjb3ZlciBpbmZvcm1hdGlvbiBhYm91dCBXZWIgc2VydmljZXMuIj5Vbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKTwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9InR1ZGRpZXhwLmh0bWwiIHRpdGxlPSJUaHJvdWdoIFVEREkgYW5kIFdTSUwsIG90aGVyIGFwcGxpY2F0aW9ucyBjYW4gZGlzY292ZXIgV1NETCBkb2N1bWVudHMgYW5kIGJpbmQgd2l0aCB0aGVtIHRvIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIG9yIHBlcmZvcm0gb3RoZXIgYnVzaW5lc3MgcHJvY2Vzc2VzLiI+UHVibGlzaGluZyBXZWIgc2VydmljZXMgYW5kIGJ1c2luZXNzIGVudGl0aWVzPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0c3RydGV4cC5odG1sIiB0aXRsZT0iVGhlIFdlYiBzZXJ2aWNlcyB0b29scyBhbGxvd3MgeW91IHRvIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGluIHNldmVyYWwgd2F5cy4iPkxhdW5jaGluZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0cmVnLmh0bWwiIHRpdGxlPSJJbiBvcmRlciB0byBwdWJsaXNoIHlvdXIgYnVzaW5lc3MgZW50aXR5IGFuZCBXZWIgc2VydmljZSB0byBhIFVEREkgcmVnaXN0cnksIHlvdSBtdXN0IGZpcnN0IHJlZ2lzdGVyIHdpdGggdGhlIHJlZ2lzdHJ5IHRoYXQgeW91IHdhbnQgdG8gdXNlLiI+UmVnaXN0ZXJpbmcgd2l0aCBhIFVEREkgcmVnaXN0cnk8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgUmVmZXJlbmNlPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vcmVmL3J1ZGRpLmh0bWwiIHRpdGxlPSJPbmNlIHlvdSBoYXZlIHJlZ2lzdGVyZWQgYW5kIGxvZ2dlZCBpbiB0byB0aGUgVURESSByZWdpc3RyeSB0aGF0IHlvdSB3YW50IHRvIHVzZSwgeW91IGNhbiByZWdpc3RlciB5b3VyIFdlYiBzZXJ2aWNlLiBSZWdpc3RyYXRpb24gb2YgYSBzZXJ2aWNlIGludm9sdmVzIGZvdXIgY29yZSBkYXRhIHN0cnVjdHVyZSB0eXBlczogYnVzaW5lc3MgaW5mb3JtYXRpb24sIHNlcnZpY2UgaW5mb3JtYXRpb24sIGJpbmRpbmcgaW5mb3JtYXRpb24sIGFuZCBpbmZvcm1hdGlvbiBkZXNjcmliaW5nIHRoZSBzcGVjaWZpY2F0aW9ucyBmb3Igc2VydmljZXMuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBkYXRhIHR5cGVzIGlzIGRlc2NyaWJlZCBpbiBGaWd1cmUgMS4iPkRhdGEgc3RydWN0dXJlIHR5cGVzIChVRERJIHJlZ2lzdHJ5KTwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci0KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RwdWJsaXNoLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90cHVibGlzaC5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWIwNDE5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RwdWJsaXNoLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+Ci08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiIKLSAidGFzay5kdGQiPgotPHRhc2sgaWQ9InRwdWJsaXNoIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPlB1Ymxpc2hpbmcgYSBXZWIgc2VydmljZTwvdGl0bGU+Ci08dGl0bGVhbHRzPgotPHNlYXJjaHRpdGxlPlB1Ymxpc2hpbmcgYSBXZWIgc2VydmljZTwvc2VhcmNodGl0bGU+Ci08L3RpdGxlYWx0cz4KLTxzaG9ydGRlc2M+VGhlIFdlYiBzZXJ2aWNlLCBhbHNvIGtub3duIGFzIHRoZSBidXNpbmVzcyBzZXJ2aWNlLCBkZXNjcmliZXMKLWEgV2ViIHNlcnZpY2UncyBlbmRwb2ludCBhbmQgd2hlcmUgaXRzIFdTREwgZmlsZSByZXNpZGVzLiBUaGUgV1NETCBmaWxlIGxpc3RzCi10aGUgb3BlcmF0aW9ucyB0aGF0IHNlcnZpY2UgcHJvdmlkZXMuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPlVEREk8aW5kZXh0ZXJtPnB1Ymxpc2hpbmcgYSBXZWIgc2VydmljZTwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPnB1Ymxpc2hpbmcgdG8gYSBVRERJIHJlZ2lzdHJ5PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxwcmVyZXE+UHJlcmVxdWlzaXRlczo8b2w+Ci08bGk+IDx4cmVmIGhyZWY9InRyZWcuZGl0YSI+UmVnaXN0ZXIgd2l0aCBhIHJlZ2lzdHJ5PC94cmVmPi48L2xpPgotPGxpPiA8eHJlZiBocmVmPSJ0c3RydGV4cC5kaXRhIj5MYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwveHJlZj4uPC9saT4KLTxsaT4gPHhyZWYgaHJlZj0idGFkZHJlZy5kaXRhIj5BZGQgdGhlIHJlZ2lzdHJ5IHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L3hyZWY+LjwvbGk+Ci08bGk+Q3JlYXRlIGEgV2ViIHNlcnZpY2UuPC9saT4KLTxsaT5EZXBsb3kgdGhlIFdlYiBzZXJ2aWNlLjwvbGk+Ci08bGk+IDx4cmVmIGhyZWY9InRwdWJlbnQuZGl0YSI+UHVibGlzaCBhIEJ1c2luZXNzIEVudGl0eTwveHJlZj4uPC9saT4KLTwvb2w+PC9wcmVyZXE+Ci08cmVzdWx0PjxwPllvdSBjYW4gcHVibGlzaCBhIGJ1c2luZXNzIHNlcnZpY2UgdXNpbmcgdHdvIGRpZmZlcmVudCBwdWJsaWNhdGlvbgotZm9ybWF0czogc2ltcGxlIGFuZCBhZHZhbmNlZC48L3A+PC9yZXN1bHQ+Ci08L3Rhc2tib2R5PgotPHRhc2sgaWQ9ImQwZTc0IiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPlB1Ymxpc2ggYSBidXNpbmVzcyBzZXJ2aWNlIHVzaW5nIHRoZSBzaW1wbGUgb3B0aW9uPC90aXRsZT4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlRvIHB1Ymxpc2ggYSBXZWIgc2VydmljZSB1c2luZyB0aGUgc2ltcGxlIG9wdGlvbjo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5JbiB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIE5hdmlnYXRvciBwYW5lLCBzZWxlY3QgdGhlIGJ1c2luZXNzCi1lbnRpdHkgZm9yIHdoaWNoIHlvdSB3YW50IHRvIHB1Ymxpc2ggdGhlIGJ1c2luZXNzIHNlcnZpY2UuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgQWN0aW9ucyBwYW5lIHRvb2xiYXIsIGNsaWNrIHRoZSAgPGI+UHVibGlzaCBTZXJ2aWNlPC9iPiBpY29uCi0gPGltYWdlIGFsdD0iUGljdHVyZSBvZiB0aGUgUHVibGlzaCBTZXJ2aWNlIGljb24uIiBocmVmPSIuLi9pbWFnZXMvcHVic2Vydi5naWYiPgotPC9pbWFnZT4uPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5TZWxlY3QgdGhlICA8Yj5TaW1wbGU8L2I+IHJhZGlvIGJ1dHRvbi48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkVudGVyIHRoZSBwdWJsaXNoIFVSTCwgeW91ciB1c2VyIElELCBwYXNzd29yZCwgV1NETCBVUkwsIGJ1c2luZXNzCi1uYW1lLCBhbmQgYnVzaW5lc3MgZGVzY3JpcHRpb24gaW4gdGhlIHJlc3BlY3RpdmUgZmllbGRzLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+Q2xpY2sgIDxiPkdvPC9iPiB0byBwdWJsaXNoIHlvdXIgYnVzaW5lc3MgZW50aXR5LjwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08cmVzdWx0PjxwPiA8Yj5JbXBvcnRhbnQ6PC9iPiBFbnN1cmUgdGhhdCB5b3Ugc2VsZWN0IHRoZSBzZXJ2aWNlIGRvY3VtZW50LAotc2luY2UgdGhlIHNlcnZpY2UgZWxlbWVudCBpcyB0aGUgYmFzaXMgZm9yIHRoZSBCdXNpbmVzcyBTZXJ2aWNlIHRoYXQgeW91IHdpbGwKLXB1Ymxpc2guIFlvdSBjYW5ub3QgcHVibGlzaCBhIEJ1c2luZXNzIFNlcnZpY2UgdXNpbmcgYSBXU0RMIGRvY3VtZW50IHRoYXQKLWRvZXMgbm90IGhhdmUgc2VydmljZSBlbGVtZW50cy48L3A+PHA+VGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBpcyBhdXRvbWF0aWNhbGx5Ci11cGRhdGVkIHdpdGggeW91ciBwdWJsaXNoZWQgV2ViIHNlcnZpY2UuIFRoZSByZWdpc3RyeSBjb250YWlucyBwb2ludGVycyB0bwotdGhlIFVSTCBvZiB0aGUgV1NETCBzZXJ2aWNlIGRvY3VtZW50IG9mIHRoZSBXZWIgc2VydmljZS4gQnVzaW5lc3NlcyBjYW4gbm93Ci1kaXNjb3ZlciBhbmQgaW50ZWdyYXRlIHdpdGggeW91ciBXZWIgc2VydmljZS48L3A+PC9yZXN1bHQ+Ci08L3Rhc2tib2R5PgotPC90YXNrPgotPHRhc2sgaWQ9ImQwZTExMyIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5QdWJsaXNoIGEgYnVzaW5lc3Mgc2VydmljZSB1c2luZyB0aGUgYWR2YW5jZWQgb3B0aW9uPC90aXRsZT4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlRvIHB1Ymxpc2ggYSBXZWIgc2VydmljZSB1c2luZyB0aGUgYWR2YW5jZWQgb3B0aW9uOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPkluIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgTmF2aWdhdG9yIHBhbmUsIHNlbGVjdCB0aGUgYnVzaW5lc3MKLWVudGl0eSBmb3Igd2hpY2ggeW91IHdhbnQgdG8gcHVibGlzaCB0aGUgYnVzaW5lc3Mgc2VydmljZS48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkluIHRoZSBBY3Rpb25zIHBhbmUgdG9vbGJhciwgY2xpY2sgdGhlICA8Yj5QdWJsaXNoIFNlcnZpY2U8L2I+IGljb24KLSA8aW1hZ2UgYWx0PSJQaWN0dXJlIG9mIHRoZSBQdWJsaXNoIFNlcnZpY2UgaWNvbi4iIGhyZWY9Ii4uL2ltYWdlcy9wdWJzZXJ2LmdpZiI+Ci08L2ltYWdlPi48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPlNlbGVjdCB0aGUgIDxiPkFkdmFuY2VkPC9iPiByYWRpbyBidXR0b24uPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5FbnRlciB0aGUgcHVibGlzaCBVUkwsIHlvdXIgdXNlciBJRCwgcGFzc3dvcmQsIGFuZCBXU0RMIFVSTCBpbgotdGhlIHJlc3BlY3RpdmUgZmllbGRzLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+Q2xpY2sgIDxiPkdldDwvYj4gb3IgPHVpY29udHJvbD5GaW5kPC91aWNvbnRyb2w+IHRvIGFzc29jaWF0ZSB0aGUKLXNlcnZpY2Ugd2l0aCBhIGJ1c2luZXNzIGVudGl0eS48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkNsaWNrICA8Yj5HZXQ8L2I+IG9yIDx1aWNvbnRyb2w+RmluZDwvdWljb250cm9sPiB0byBhc3NvY2lhdGUgYQotc3BlY2lmaWMgc2VydmljZSBpbnRlcmZhY2Ugd2l0aCB0aGUgc2VydmljZS48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkNsaWNrICA8Yj5BZGQ8L2I+IHRvIGNyZWF0ZSBidXNpbmVzcyBzZXJ2aWNlIG5hbWVzLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+Q2xpY2sgIDxiPkFkZDwvYj4gdG8gY3JlYXRlIGJ1c2luZXNzIHNlcnZpY2UgZGVzY3JpcHRpb25zLjwvY21kPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5DbGljayAgPGI+QWRkPC9iPiB0byBjcmVhdGUgY2F0ZWdvcmllcy4gRW50ZXIgeW91ciBidXNpbmVzcyBzZXJ2aWNlCi1jYXRlZ29yaWVzLiBTZWxlY3QgYSBjYXRlZ29yeSB0eXBlIGZyb20gdGhlIGRyb3AgZG93biBsaXN0LiBDbGljayAgPGI+QnJvd3NlPC9iPiB0bwotb3BlbiB0aGUgQ2F0ZWdvcmllcyBwYW5lLiZuYnNwOyBOYXZpZ2F0ZSB0aHJvdWdoIHRoZSBoaWVyYXJjaGljYWwgdGF4b25vbXkKLWFuZCBzZWxlY3QgdGhlIGFwcHJvcHJpYXRlIGNsYXNzaWZpY2F0aW9uIGZvciB5b3VyIGJ1c2luZXNzIHNlcnZpY2UsIHRoZW4KLWV4aXQgdGhlIENhdGVnb3JpZXMgcGFuZS48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkNsaWNrICA8Yj5HbzwvYj4gdG8gcHVibGlzaCB5b3VyIGJ1c2luZXNzIGVudGl0eS48L2NtZD48L3N0ZXA+Ci08L3N0ZXBzPgotPHJlc3VsdD48cD4gPGI+SW1wb3J0YW50OjwvYj4gRW5zdXJlIHRoYXQgeW91IHNlbGVjdCB0aGUgc2VydmljZSBkb2N1bWVudCwKLXNpbmNlIHRoZSBzZXJ2aWNlIGVsZW1lbnQgaXMgdGhlIGJhc2lzIGZvciB0aGUgQnVzaW5lc3MgU2VydmljZSB0aGF0IHlvdSB3aWxsCi1wdWJsaXNoLiZuYnNwOyBZb3UgY2Fubm90IHB1Ymxpc2ggYSBCdXNpbmVzcyBTZXJ2aWNlIHVzaW5nIGEgV1NETCBkb2N1bWVudAotdGhhdCBkb2VzIG5vdCBoYXZlIHNlcnZpY2UgZWxlbWVudHMuPC9wPjxwPlRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgaXMgYXV0b21hdGljYWxseQotdXBkYXRlZCB3aXRoIHlvdXIgcHVibGlzaGVkIFdlYiBzZXJ2aWNlLiBUaGUgcmVnaXN0cnkgY29udGFpbnMgcG9pbnRlcnMgdG8KLXRoZSBVUkwgb2YgdGhlIFdTREwgc2VydmljZSBkb2N1bWVudCBvZiB0aGUgV2ViIHNlcnZpY2UuIEJ1c2luZXNzZXMgY2FuIG5vdwotZGlzY292ZXIgYW5kIGludGVncmF0ZSB3aXRoIHlvdXIgV2ViIHNlcnZpY2UuPC9wPjwvcmVzdWx0PgotPC90YXNrYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+IFRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vY29uY2VwdHMvY3VkZGkuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+Ci08bGluayBocmVmPSJ0dWRkaWV4cC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0c3RydGV4cC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0cmVnLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgUmVmZXJlbmNlPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL3JlZi9ydWRkaS5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgotPC90YXNrPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHB1Ymxpc2guaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RwdWJsaXNoLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4NmNmYjUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHB1Ymxpc2guaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE2NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwNyIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJQdWJsaXNoaW5nIGEgV2ViIHNlcnZpY2UiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iVGhlIFdlYiBzZXJ2aWNlLCBhbHNvIGtub3duIGFzIHRoZSBidXNpbmVzcyBzZXJ2aWNlLCBkZXNjcmliZXMgYSBXZWIgc2VydmljZSdzIGVuZHBvaW50IGFuZCB3aGVyZSBpdHMgV1NETCBmaWxlIHJlc2lkZXMuIFRoZSBXU0RMIGZpbGUgbGlzdHMgdGhlIG9wZXJhdGlvbnMgdGhhdCBzZXJ2aWNlIHByb3ZpZGVzLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgV2ViIHNlcnZpY2UsIGFsc28ga25vd24gYXMgdGhlIGJ1c2luZXNzIHNlcnZpY2UsIGRlc2NyaWJlcyBhIFdlYiBzZXJ2aWNlJ3MgZW5kcG9pbnQgYW5kIHdoZXJlIGl0cyBXU0RMIGZpbGUgcmVzaWRlcy4gVGhlIFdTREwgZmlsZSBsaXN0cyB0aGUgb3BlcmF0aW9ucyB0aGF0IHNlcnZpY2UgcHJvdmlkZXMuIiAvPgotPG1ldGEgY29udGVudD0iVURESSwgcHVibGlzaGluZyBhIFdlYiBzZXJ2aWNlLCBXZWIgc2VydmljZXMsIHB1Ymxpc2hpbmcgdG8gYSBVRERJIHJlZ2lzdHJ5IiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iVURESSwgcHVibGlzaGluZyBhIFdlYiBzZXJ2aWNlLCBXZWIgc2VydmljZXMsIHB1Ymxpc2hpbmcgdG8gYSBVRERJIHJlZ2lzdHJ5IiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0cHVibGlzaCIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPlB1Ymxpc2hpbmcgYSBXZWIgc2VydmljZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idHB1Ymxpc2giPjxhIG5hbWU9InRwdWJsaXNoIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5QdWJsaXNoaW5nIGEgV2ViIHNlcnZpY2U8L2gxPgotCi0KLQotCi08ZGl2PjxwPlRoZSBXZWIgc2VydmljZSwgYWxzbyBrbm93biBhcyB0aGUgYnVzaW5lc3Mgc2VydmljZSwgZGVzY3JpYmVzCi1hIFdlYiBzZXJ2aWNlJ3MgZW5kcG9pbnQgYW5kIHdoZXJlIGl0cyBXU0RMIGZpbGUgcmVzaWRlcy4gVGhlIFdTREwgZmlsZSBsaXN0cwotdGhlIG9wZXJhdGlvbnMgdGhhdCBzZXJ2aWNlIHByb3ZpZGVzLjwvcD4KLQotPGRpdiBjbGFzcz0icCI+UHJlcmVxdWlzaXRlczo8b2w+Ci08bGk+IDxhIGhyZWY9InRyZWcuaHRtbCI+UmVnaXN0ZXIgd2l0aCBhIHJlZ2lzdHJ5PC9hPi48L2xpPgotCi08bGk+IDxhIGhyZWY9InRzdHJ0ZXhwLmh0bWwiPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPi48L2xpPgotCi08bGk+IDxhIGhyZWY9InRhZGRyZWcuaHRtbCI+QWRkIHRoZSByZWdpc3RyeSB0byB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPi48L2xpPgotCi08bGk+Q3JlYXRlIGEgV2ViIHNlcnZpY2UuPC9saT4KLQotPGxpPkRlcGxveSB0aGUgV2ViIHNlcnZpY2UuPC9saT4KLQotPGxpPiA8YSBocmVmPSJ0cHViZW50Lmh0bWwiPlB1Ymxpc2ggYSBCdXNpbmVzcyBFbnRpdHk8L2E+LjwvbGk+Ci0KLTwvb2w+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+WW91IGNhbiBwdWJsaXNoIGEgYnVzaW5lc3Mgc2VydmljZSB1c2luZyB0d28gZGlmZmVyZW50IHB1YmxpY2F0aW9uCi1mb3JtYXRzOiBzaW1wbGUgYW5kIGFkdmFuY2VkLjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibmVzdGVkMSIgeG1sOmxhbmc9ImVuLXVzIiBpZD0iZDBlNzQiPjxhIG5hbWU9ImQwZTc0Ij48IS0tIC0tPjwvYT4KLTxoMiBjbGFzcz0idG9waWN0aXRsZTIiPlB1Ymxpc2ggYSBidXNpbmVzcyBzZXJ2aWNlIHVzaW5nIHRoZSBzaW1wbGUgb3B0aW9uPC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRvIHB1Ymxpc2ggYSBXZWIgc2VydmljZSB1c2luZyB0aGUgc2ltcGxlIG9wdGlvbjo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpPjxzcGFuPkluIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgTmF2aWdhdG9yIHBhbmUsIHNlbGVjdCB0aGUgYnVzaW5lc3MKLWVudGl0eSBmb3Igd2hpY2ggeW91IHdhbnQgdG8gcHVibGlzaCB0aGUgYnVzaW5lc3Mgc2VydmljZS48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkluIHRoZSBBY3Rpb25zIHBhbmUgdG9vbGJhciwgY2xpY2sgdGhlICA8c3Ryb25nPlB1Ymxpc2ggU2VydmljZTwvc3Ryb25nPiBpY29uCi0gPGltZyBzcmM9Ii4uL2ltYWdlcy9wdWJzZXJ2LmdpZiIgYWx0PSJQaWN0dXJlIG9mIHRoZSBQdWJsaXNoIFNlcnZpY2UgaWNvbi4iIC8+Ljwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+U2VsZWN0IHRoZSAgPHN0cm9uZz5TaW1wbGU8L3N0cm9uZz4gcmFkaW8gYnV0dG9uLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+RW50ZXIgdGhlIHB1Ymxpc2ggVVJMLCB5b3VyIHVzZXIgSUQsIHBhc3N3b3JkLCBXU0RMIFVSTCwgYnVzaW5lc3MKLW5hbWUsIGFuZCBidXNpbmVzcyBkZXNjcmlwdGlvbiBpbiB0aGUgcmVzcGVjdGl2ZSBmaWVsZHMuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5DbGljayAgPHN0cm9uZz5Hbzwvc3Ryb25nPiB0byBwdWJsaXNoIHlvdXIgYnVzaW5lc3MgZW50aXR5Ljwvc3Bhbj48L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD4gPHN0cm9uZz5JbXBvcnRhbnQ6PC9zdHJvbmc+IEVuc3VyZSB0aGF0IHlvdSBzZWxlY3QgdGhlIHNlcnZpY2UgZG9jdW1lbnQsCi1zaW5jZSB0aGUgc2VydmljZSBlbGVtZW50IGlzIHRoZSBiYXNpcyBmb3IgdGhlIEJ1c2luZXNzIFNlcnZpY2UgdGhhdCB5b3Ugd2lsbAotcHVibGlzaC4gWW91IGNhbm5vdCBwdWJsaXNoIGEgQnVzaW5lc3MgU2VydmljZSB1c2luZyBhIFdTREwgZG9jdW1lbnQgdGhhdAotZG9lcyBub3QgaGF2ZSBzZXJ2aWNlIGVsZW1lbnRzLjwvcD4KLTxwPlRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgaXMgYXV0b21hdGljYWxseQotdXBkYXRlZCB3aXRoIHlvdXIgcHVibGlzaGVkIFdlYiBzZXJ2aWNlLiBUaGUgcmVnaXN0cnkgY29udGFpbnMgcG9pbnRlcnMgdG8KLXRoZSBVUkwgb2YgdGhlIFdTREwgc2VydmljZSBkb2N1bWVudCBvZiB0aGUgV2ViIHNlcnZpY2UuIEJ1c2luZXNzZXMgY2FuIG5vdwotZGlzY292ZXIgYW5kIGludGVncmF0ZSB3aXRoIHlvdXIgV2ViIHNlcnZpY2UuPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibmVzdGVkMSIgeG1sOmxhbmc9ImVuLXVzIiBpZD0iZDBlMTEzIj48YSBuYW1lPSJkMGUxMTMiPjwhLS0gLS0+PC9hPgotPGgyIGNsYXNzPSJ0b3BpY3RpdGxlMiI+UHVibGlzaCBhIGJ1c2luZXNzIHNlcnZpY2UgdXNpbmcgdGhlIGFkdmFuY2VkIG9wdGlvbjwvaDI+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UbyBwdWJsaXNoIGEgV2ViIHNlcnZpY2UgdXNpbmcgdGhlIGFkdmFuY2VkIG9wdGlvbjo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpPjxzcGFuPkluIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgTmF2aWdhdG9yIHBhbmUsIHNlbGVjdCB0aGUgYnVzaW5lc3MKLWVudGl0eSBmb3Igd2hpY2ggeW91IHdhbnQgdG8gcHVibGlzaCB0aGUgYnVzaW5lc3Mgc2VydmljZS48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkluIHRoZSBBY3Rpb25zIHBhbmUgdG9vbGJhciwgY2xpY2sgdGhlICA8c3Ryb25nPlB1Ymxpc2ggU2VydmljZTwvc3Ryb25nPiBpY29uCi0gPGltZyBzcmM9Ii4uL2ltYWdlcy9wdWJzZXJ2LmdpZiIgYWx0PSJQaWN0dXJlIG9mIHRoZSBQdWJsaXNoIFNlcnZpY2UgaWNvbi4iIC8+Ljwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+U2VsZWN0IHRoZSAgPHN0cm9uZz5BZHZhbmNlZDwvc3Ryb25nPiByYWRpbyBidXR0b24uPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5FbnRlciB0aGUgcHVibGlzaCBVUkwsIHlvdXIgdXNlciBJRCwgcGFzc3dvcmQsIGFuZCBXU0RMIFVSTCBpbgotdGhlIHJlc3BlY3RpdmUgZmllbGRzLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+Q2xpY2sgIDxzdHJvbmc+R2V0PC9zdHJvbmc+IG9yIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkZpbmQ8L3NwYW4+IHRvIGFzc29jaWF0ZSB0aGUKLXNlcnZpY2Ugd2l0aCBhIGJ1c2luZXNzIGVudGl0eS48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkNsaWNrICA8c3Ryb25nPkdldDwvc3Ryb25nPiBvciA8c3BhbiBjbGFzcz0idWljb250cm9sIj5GaW5kPC9zcGFuPiB0byBhc3NvY2lhdGUgYQotc3BlY2lmaWMgc2VydmljZSBpbnRlcmZhY2Ugd2l0aCB0aGUgc2VydmljZS48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkNsaWNrICA8c3Ryb25nPkFkZDwvc3Ryb25nPiB0byBjcmVhdGUgYnVzaW5lc3Mgc2VydmljZSBuYW1lcy48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkNsaWNrICA8c3Ryb25nPkFkZDwvc3Ryb25nPiB0byBjcmVhdGUgYnVzaW5lc3Mgc2VydmljZSBkZXNjcmlwdGlvbnMuPC9zcGFuPgotPC9saT4KLQotPGxpPjxzcGFuPkNsaWNrICA8c3Ryb25nPkFkZDwvc3Ryb25nPiB0byBjcmVhdGUgY2F0ZWdvcmllcy4gRW50ZXIgeW91ciBidXNpbmVzcyBzZXJ2aWNlCi1jYXRlZ29yaWVzLiBTZWxlY3QgYSBjYXRlZ29yeSB0eXBlIGZyb20gdGhlIGRyb3AgZG93biBsaXN0LiBDbGljayAgPHN0cm9uZz5Ccm93c2U8L3N0cm9uZz4gdG8KLW9wZW4gdGhlIENhdGVnb3JpZXMgcGFuZS7CoCBOYXZpZ2F0ZSB0aHJvdWdoIHRoZSBoaWVyYXJjaGljYWwgdGF4b25vbXkKLWFuZCBzZWxlY3QgdGhlIGFwcHJvcHJpYXRlIGNsYXNzaWZpY2F0aW9uIGZvciB5b3VyIGJ1c2luZXNzIHNlcnZpY2UsIHRoZW4KLWV4aXQgdGhlIENhdGVnb3JpZXMgcGFuZS48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkNsaWNrICA8c3Ryb25nPkdvPC9zdHJvbmc+IHRvIHB1Ymxpc2ggeW91ciBidXNpbmVzcyBlbnRpdHkuPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPiA8c3Ryb25nPkltcG9ydGFudDo8L3N0cm9uZz4gRW5zdXJlIHRoYXQgeW91IHNlbGVjdCB0aGUgc2VydmljZSBkb2N1bWVudCwKLXNpbmNlIHRoZSBzZXJ2aWNlIGVsZW1lbnQgaXMgdGhlIGJhc2lzIGZvciB0aGUgQnVzaW5lc3MgU2VydmljZSB0aGF0IHlvdSB3aWxsCi1wdWJsaXNoLsKgIFlvdSBjYW5ub3QgcHVibGlzaCBhIEJ1c2luZXNzIFNlcnZpY2UgdXNpbmcgYSBXU0RMIGRvY3VtZW50Ci10aGF0IGRvZXMgbm90IGhhdmUgc2VydmljZSBlbGVtZW50cy48L3A+Ci08cD5UaGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGlzIGF1dG9tYXRpY2FsbHkKLXVwZGF0ZWQgd2l0aCB5b3VyIHB1Ymxpc2hlZCBXZWIgc2VydmljZS4gVGhlIHJlZ2lzdHJ5IGNvbnRhaW5zIHBvaW50ZXJzIHRvCi10aGUgVVJMIG9mIHRoZSBXU0RMIHNlcnZpY2UgZG9jdW1lbnQgb2YgdGhlIFdlYiBzZXJ2aWNlLiBCdXNpbmVzc2VzIGNhbiBub3cKLWRpc2NvdmVyIGFuZCBpbnRlZ3JhdGUgd2l0aCB5b3VyIFdlYiBzZXJ2aWNlLjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgQ29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuaHRtbCI+IFRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuaHRtbCI+V2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jdWRkaS5odG1sIiB0aXRsZT0iVW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIGEgd2F5IHRvIHB1Ymxpc2ggYW5kIGRpc2NvdmVyIGluZm9ybWF0aW9uIGFib3V0IFdlYiBzZXJ2aWNlcy4iPlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0idHVkZGlleHAuaHRtbCIgdGl0bGU9IlRocm91Z2ggVURESSBhbmQgV1NJTCwgb3RoZXIgYXBwbGljYXRpb25zIGNhbiBkaXNjb3ZlciBXU0RMIGRvY3VtZW50cyBhbmQgYmluZCB3aXRoIHRoZW0gdG8gZXhlY3V0ZSB0cmFuc2FjdGlvbnMgb3IgcGVyZm9ybSBvdGhlciBidXNpbmVzcyBwcm9jZXNzZXMuIj5QdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXM8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRzdHJ0ZXhwLmh0bWwiIHRpdGxlPSJUaGUgV2ViIHNlcnZpY2VzIHRvb2xzIGFsbG93cyB5b3UgdG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgaW4gc2V2ZXJhbCB3YXlzLiI+TGF1bmNoaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRyZWcuaHRtbCIgdGl0bGU9IkluIG9yZGVyIHRvIHB1Ymxpc2ggeW91ciBidXNpbmVzcyBlbnRpdHkgYW5kIFdlYiBzZXJ2aWNlIHRvIGEgVURESSByZWdpc3RyeSwgeW91IG11c3QgZmlyc3QgcmVnaXN0ZXIgd2l0aCB0aGUgcmVnaXN0cnkgdGhhdCB5b3Ugd2FudCB0byB1c2UuIj5SZWdpc3RlcmluZyB3aXRoIGEgVURESSByZWdpc3RyeTwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBSZWZlcmVuY2U8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi9yZWYvcnVkZGkuaHRtbCIgdGl0bGU9Ik9uY2UgeW91IGhhdmUgcmVnaXN0ZXJlZCBhbmQgbG9nZ2VkIGluIHRvIHRoZSBVRERJIHJlZ2lzdHJ5IHRoYXQgeW91IHdhbnQgdG8gdXNlLCB5b3UgY2FuIHJlZ2lzdGVyIHlvdXIgV2ViIHNlcnZpY2UuIFJlZ2lzdHJhdGlvbiBvZiBhIHNlcnZpY2UgaW52b2x2ZXMgZm91ciBjb3JlIGRhdGEgc3RydWN0dXJlIHR5cGVzOiBidXNpbmVzcyBpbmZvcm1hdGlvbiwgc2VydmljZSBpbmZvcm1hdGlvbiwgYmluZGluZyBpbmZvcm1hdGlvbiwgYW5kIGluZm9ybWF0aW9uIGRlc2NyaWJpbmcgdGhlIHNwZWNpZmljYXRpb25zIGZvciBzZXJ2aWNlcy4gVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGRhdGEgdHlwZXMgaXMgZGVzY3JpYmVkIGluIEZpZ3VyZSAxLiI+RGF0YSBzdHJ1Y3R1cmUgdHlwZXMgKFVEREkgcmVnaXN0cnkpPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLQotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHJlZy5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHJlZy5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmI2YWJkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RyZWcuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iCi0gInRhc2suZHRkIj4KLTx0YXNrIGlkPSJ0cmVnIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPlJlZ2lzdGVyaW5nIHdpdGggYSBVRERJIHJlZ2lzdHJ5PC90aXRsZT4KLTx0aXRsZWFsdHM+Ci08c2VhcmNodGl0bGU+UmVnaXN0ZXJpbmcgd2l0aCBhIFVEREkgUmVnaXN0cnk8L3NlYXJjaHRpdGxlPgotPC90aXRsZWFsdHM+Ci08c2hvcnRkZXNjPkluIG9yZGVyIHRvIHB1Ymxpc2ggeW91ciBidXNpbmVzcyBlbnRpdHkgYW5kIFdlYiBzZXJ2aWNlIHRvIGEgVURESQotcmVnaXN0cnksIHlvdSBtdXN0IGZpcnN0IHJlZ2lzdGVyIHdpdGggdGhlIHJlZ2lzdHJ5IHRoYXQgeW91IHdhbnQgdG8gdXNlLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5VRERJPGluZGV4dGVybT5yZWdpc3RlcmluZyB3aXRoIGEgcmVnaXN0cnk8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5yZWdpc3RlcmluZyB3aXRoIGEgVURESSByZWdpc3RyeTwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5UaGVyZSBhcmUgbWFueSBkaWZmZXJlbnQgcHJpdmF0ZSByZWdpc3RyaWVzIHdpdGggd2hpY2ggeW91IGNhbgotcmVnaXN0ZXIuIFNpbmNlIGVhY2ggcmVnaXN0cnkgaXMgZGlmZmVyZW50LCB0aGUgcmVnaXN0cnkgcHJvdmlkZXIgd2lsbCBnaXZlCi15b3UgaW5zdHJ1Y3Rpb25zIGZvciByZWdpc3RlcmluZy48L3A+PHA+VGhlIGZvbGxvd2luZyByZWdpc3RyaWVzIGFyZSBhdXRvbWF0aWNhbGx5Ci1hZGRlZCB0byBGYXZvcml0ZXM6PC9wPjx1bD4KLTxsaT5TQVAgVURESSBSZWdpc3RyeTwvbGk+Ci08bGk+U0FQIFVEREkgVGVzdCBSZWdpc3RyeTwvbGk+Ci08bGk+WE1ldGhvZHMgUmVnaXN0cnk8L2xpPgotPGxpPk5UVCBDb21tdW5pY2F0aW9ucyBSZWdpc3RyeTwvbGk+Ci08L3VsPjxwPllvdSBjYW4gdXNlIGFueSBvZiB0aGVzZSByZWdpc3RyaWVzIGJ5IHNlbGVjdGluZyB0aGUgRmF2b3JpdGVzIGljb24KLWluIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgdG9vbGJhci4gQWxsIG9mIHRoZXNlIHJlZ2lzdHJpZXMgYXJlIGJhc2VkIG9uCi10aGUgVURESSBCdXNpbmVzcyBSZWdpc3RyeSBWZXJzaW9uIDIuIFRoZSBkZXRhaWxzIHBhZ2Ugb2YgZWFjaCByZWdpc3RyeSB3aWxsCi1oYXZlIHJlZ2lzdHJhdGlvbiBpbnN0cnVjdGlvbnMuPC9wPjxwPlRoZSBwdWJsaWMgcHJvZHVjdGlvbiByZWdpc3RyaWVzIGFyZQotbGlzdGVkIHVuZGVyIEZhdm9yaXRlcy4gVGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBkb2VzIG5vdCBwcmVsb2FkIGFueSByZWdpc3RyaWVzCi1ieSBkZWZhdWx0LiZuYnNwOyBZb3UgY2FuIHByZWxvYWQgcmVnaXN0cmllcyBmcm9tIHRoZSBmYXZvcml0ZXMgc2VjdGlvbiBvZgotdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBvciBieSB1c2luZyB0aGUgVW5pdCBUZXN0IFVEREkgd2l6YXJkLiBZb3UgY2FuIGFsc28KLXByZWxvYWQgYW5kIGNvbmZpZ3VyZSBwcml2YXRlIHJlZ2lzdHJpZXMgdXNpbmcgdGhlIFVuaXQgVGVzdCBVRERJIHdpemFyZC4KLU9uIHRoZSBPcGVuIFJlZ2lzdHJ5IHBhZ2Ugb2YgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciwgeW91IGNhbiBzZWxlY3QgZnJvbQotcHVibGljIHJlZ2lzdHJpZXMgYW5kIHJlZ2lzdHJpZXMgbGlzdGVkIGluIHlvdXIgZmF2b3JpdGVzIHRvIGF1dG9tYXRpY2FsbHkKLWZpbGwgaW4gdGhlIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIG9wZW4gYSBwYXJ0aWN1bGFyIHJlZ2lzdHJ5LjwvcD48L2NvbnRleHQ+Ci08L3Rhc2tib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgQ29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+V2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jdWRkaS5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9InR1ZGRpZXhwLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRzdHJ0ZXhwLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgUmVmZXJlbmNlPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL3JlZi9ydWRkaS5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHJlZy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHJlZy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjdhMGQ1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RyZWcuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA3IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IlJlZ2lzdGVyaW5nIHdpdGggYSBVRERJIHJlZ2lzdHJ5IiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IkluIG9yZGVyIHRvIHB1Ymxpc2ggeW91ciBidXNpbmVzcyBlbnRpdHkgYW5kIFdlYiBzZXJ2aWNlIHRvIGEgVURESSByZWdpc3RyeSwgeW91IG11c3QgZmlyc3QgcmVnaXN0ZXIgd2l0aCB0aGUgcmVnaXN0cnkgdGhhdCB5b3Ugd2FudCB0byB1c2UuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkluIG9yZGVyIHRvIHB1Ymxpc2ggeW91ciBidXNpbmVzcyBlbnRpdHkgYW5kIFdlYiBzZXJ2aWNlIHRvIGEgVURESSByZWdpc3RyeSwgeW91IG11c3QgZmlyc3QgcmVnaXN0ZXIgd2l0aCB0aGUgcmVnaXN0cnkgdGhhdCB5b3Ugd2FudCB0byB1c2UuIiAvPgotPG1ldGEgY29udGVudD0iVURESSwgcmVnaXN0ZXJpbmcgd2l0aCBhIHJlZ2lzdHJ5LCBXZWIgc2VydmljZXMsIHJlZ2lzdGVyaW5nIHdpdGggYSBVRERJIHJlZ2lzdHJ5IiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iVURESSwgcmVnaXN0ZXJpbmcgd2l0aCBhIHJlZ2lzdHJ5LCBXZWIgc2VydmljZXMsIHJlZ2lzdGVyaW5nIHdpdGggYSBVRERJIHJlZ2lzdHJ5IiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3VkZGkuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idHVkZGlleHAuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idHN0cnRleHAuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vcmVmL3J1ZGRpLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idHJlZyIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPlJlZ2lzdGVyaW5nIHdpdGggYSBVRERJIFJlZ2lzdHJ5PC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0cmVnIj48YSBuYW1lPSJ0cmVnIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5SZWdpc3RlcmluZyB3aXRoIGEgVURESSByZWdpc3RyeTwvaDE+Ci0KLQotCi0KLTxkaXY+PHA+SW4gb3JkZXIgdG8gcHVibGlzaCB5b3VyIGJ1c2luZXNzIGVudGl0eSBhbmQgV2ViIHNlcnZpY2UgdG8gYSBVRERJCi1yZWdpc3RyeSwgeW91IG11c3QgZmlyc3QgcmVnaXN0ZXIgd2l0aCB0aGUgcmVnaXN0cnkgdGhhdCB5b3Ugd2FudCB0byB1c2UuPC9wPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UaGVyZSBhcmUgbWFueSBkaWZmZXJlbnQgcHJpdmF0ZSByZWdpc3RyaWVzIHdpdGggd2hpY2ggeW91IGNhbgotcmVnaXN0ZXIuIFNpbmNlIGVhY2ggcmVnaXN0cnkgaXMgZGlmZmVyZW50LCB0aGUgcmVnaXN0cnkgcHJvdmlkZXIgd2lsbCBnaXZlCi15b3UgaW5zdHJ1Y3Rpb25zIGZvciByZWdpc3RlcmluZy48L3A+Ci08cD5UaGUgZm9sbG93aW5nIHJlZ2lzdHJpZXMgYXJlIGF1dG9tYXRpY2FsbHkKLWFkZGVkIHRvIEZhdm9yaXRlczo8L3A+Ci08dWw+Ci08bGk+U0FQIFVEREkgUmVnaXN0cnk8L2xpPgotCi08bGk+U0FQIFVEREkgVGVzdCBSZWdpc3RyeTwvbGk+Ci0KLTxsaT5YTWV0aG9kcyBSZWdpc3RyeTwvbGk+Ci0KLTxsaT5OVFQgQ29tbXVuaWNhdGlvbnMgUmVnaXN0cnk8L2xpPgotCi08L3VsPgotPHA+WW91IGNhbiB1c2UgYW55IG9mIHRoZXNlIHJlZ2lzdHJpZXMgYnkgc2VsZWN0aW5nIHRoZSBGYXZvcml0ZXMgaWNvbgotaW4gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciB0b29sYmFyLiBBbGwgb2YgdGhlc2UgcmVnaXN0cmllcyBhcmUgYmFzZWQgb24KLXRoZSBVRERJIEJ1c2luZXNzIFJlZ2lzdHJ5IFZlcnNpb24gMi4gVGhlIGRldGFpbHMgcGFnZSBvZiBlYWNoIHJlZ2lzdHJ5IHdpbGwKLWhhdmUgcmVnaXN0cmF0aW9uIGluc3RydWN0aW9ucy48L3A+Ci08cD5UaGUgcHVibGljIHByb2R1Y3Rpb24gcmVnaXN0cmllcyBhcmUKLWxpc3RlZCB1bmRlciBGYXZvcml0ZXMuIFRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgZG9lcyBub3QgcHJlbG9hZCBhbnkgcmVnaXN0cmllcwotYnkgZGVmYXVsdC7CoCBZb3UgY2FuIHByZWxvYWQgcmVnaXN0cmllcyBmcm9tIHRoZSBmYXZvcml0ZXMgc2VjdGlvbiBvZgotdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBvciBieSB1c2luZyB0aGUgVW5pdCBUZXN0IFVEREkgd2l6YXJkLiBZb3UgY2FuIGFsc28KLXByZWxvYWQgYW5kIGNvbmZpZ3VyZSBwcml2YXRlIHJlZ2lzdHJpZXMgdXNpbmcgdGhlIFVuaXQgVGVzdCBVRERJIHdpemFyZC4KLU9uIHRoZSBPcGVuIFJlZ2lzdHJ5IHBhZ2Ugb2YgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciwgeW91IGNhbiBzZWxlY3QgZnJvbQotcHVibGljIHJlZ2lzdHJpZXMgYW5kIHJlZ2lzdHJpZXMgbGlzdGVkIGluIHlvdXIgZmF2b3JpdGVzIHRvIGF1dG9tYXRpY2FsbHkKLWZpbGwgaW4gdGhlIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIG9wZW4gYSBwYXJ0aWN1bGFyIHJlZ2lzdHJ5LjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgQ29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuaHRtbCI+IFRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuaHRtbCI+V2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jdWRkaS5odG1sIiB0aXRsZT0iVW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIGEgd2F5IHRvIHB1Ymxpc2ggYW5kIGRpc2NvdmVyIGluZm9ybWF0aW9uIGFib3V0IFdlYiBzZXJ2aWNlcy4iPlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0idHVkZGlleHAuaHRtbCIgdGl0bGU9IlRocm91Z2ggVURESSBhbmQgV1NJTCwgb3RoZXIgYXBwbGljYXRpb25zIGNhbiBkaXNjb3ZlciBXU0RMIGRvY3VtZW50cyBhbmQgYmluZCB3aXRoIHRoZW0gdG8gZXhlY3V0ZSB0cmFuc2FjdGlvbnMgb3IgcGVyZm9ybSBvdGhlciBidXNpbmVzcyBwcm9jZXNzZXMuIj5QdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXM8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRzdHJ0ZXhwLmh0bWwiIHRpdGxlPSJUaGUgV2ViIHNlcnZpY2VzIHRvb2xzIGFsbG93cyB5b3UgdG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgaW4gc2V2ZXJhbCB3YXlzLiI+TGF1bmNoaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgUmVmZXJlbmNlPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vcmVmL3J1ZGRpLmh0bWwiIHRpdGxlPSJPbmNlIHlvdSBoYXZlIHJlZ2lzdGVyZWQgYW5kIGxvZ2dlZCBpbiB0byB0aGUgVURESSByZWdpc3RyeSB0aGF0IHlvdSB3YW50IHRvIHVzZSwgeW91IGNhbiByZWdpc3RlciB5b3VyIFdlYiBzZXJ2aWNlLiBSZWdpc3RyYXRpb24gb2YgYSBzZXJ2aWNlIGludm9sdmVzIGZvdXIgY29yZSBkYXRhIHN0cnVjdHVyZSB0eXBlczogYnVzaW5lc3MgaW5mb3JtYXRpb24sIHNlcnZpY2UgaW5mb3JtYXRpb24sIGJpbmRpbmcgaW5mb3JtYXRpb24sIGFuZCBpbmZvcm1hdGlvbiBkZXNjcmliaW5nIHRoZSBzcGVjaWZpY2F0aW9ucyBmb3Igc2VydmljZXMuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBkYXRhIHR5cGVzIGlzIGRlc2NyaWJlZCBpbiBGaWd1cmUgMS4iPkRhdGEgc3RydWN0dXJlIHR5cGVzIChVRERJIHJlZ2lzdHJ5KTwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHN0cnRleHAuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RzdHJ0ZXhwLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlZGMxMDQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHN0cnRleHAuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICJ0YXNrLmR0ZCI+Ci08dGFzayBpZD0idHN0cnRleHAiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+TGF1bmNoaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L3RpdGxlPgotPHRpdGxlYWx0cz4KLTxzZWFyY2h0aXRsZT5MYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlcjwvc2VhcmNodGl0bGU+Ci08L3RpdGxlYWx0cz4KLTxzaG9ydGRlc2M+VGhlIFdlYiBzZXJ2aWNlcyB0b29scyBhbGxvd3MgeW91IHRvIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyCi1pbiBzZXZlcmFsIHdheXMuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPldlYiBTZXJ2aWNlcyBFeHBsb3JlcjxpbmRleHRlcm0+bGF1bmNoaW5nPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxjb250ZXh0Pjx1bD4KLTxsaT5Gcm9tIHRoZSBtYWluIHRvb2xiYXIgaW4gdGhlIEoyRUUgcGVyc3BlY3RpdmUuPC9saT4KLTxsaT5CeSB1c2luZyB0aGUgV2ViIHNlcnZpY2Ugd2l6YXJkcy48L2xpPgotPGxpPkJ5IHVzaW5nIHRoZSBJbXBvcnQgd2l6YXJkLjwvbGk+Ci08bGk+QnkgdXNpbmcgdGhlIEV4cG9ydCB3aXphcmQuPC9saT4KLTxsaT5Gcm9tIHRoZSBSdW4gbWVudSBpbiB0aGUgSjJFRSBwZXJzcGVjdGl2ZS48L2xpPgotPGxpPkZyb20gYSBXU0RMIGZpbGUuPC9saT4KLTwvdWw+PC9jb250ZXh0PgotPC90YXNrYm9keT4KLTx0YXNrIGlkPSJkMGUzOCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5MYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBmcm9tIHRoZSBtYWluIHRvb2xiYXI8L3RpdGxlPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+VG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgZnJvbSB0aGUgbWFpbiB0b29sYmFyLCBlbnN1cmUKLXRoYXQgeW91IGFyZSBpbiB0aGUgSjJFRSBwZXJzcGVjdGl2ZSBhbmQgY2xpY2sgdGhlICA8Yj5MYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcwotRXhwbG9yZXI8L2I+IGljb24gIDxpbWFnZSBhbHQ9IlBpY3R1cmUgb2YgdGhlIExhdW5jaCBXZWIgU2VydmljZXMgRXhwbG9yZXIgaWNvbi4iCi1ocmVmPSIuLi9pbWFnZXMvdWRkaXZpZXcuZ2lmIj48L2ltYWdlPi4gVGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBvcGVucyB3aXRob3V0Ci1hbnkgcmVnaXN0cmllcyBkaXNwbGF5ZWQgaW4gdGhlIE5hdmlnYXRvciBwYW5lLiBZb3UgY2FuIG5vdyAgPHhyZWYgaHJlZj0idGFkZHJlZy5kaXRhIj5hZGQKLWEgcmVnaXN0cnk8L3hyZWY+IHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIuPC9wPjwvY29udGV4dD4KLTwvdGFza2JvZHk+Ci08L3Rhc2s+Ci08dGFzayBpZD0iZDBlNTAiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+TGF1bmNoaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgdXNpbmcgdGhlIFdlYiBTZXJ2aWNlcyBXaXphcmQ8L3RpdGxlPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+VG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgZnJvbSB0aGUgV2ViIFNlcnZpY2VzIFdpemFyZCwKLXNlbGVjdCB0aGUgIDxiPlRlc3QgdGhlIFdlYiBTZXJ2aWNlPC9iPiBjaGVjayBib3ggaW4gdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlCi1XZWIgU2VydmljZXMgV2l6YXJkLiBQcm9jZWVkIHdpdGggdGhlIHdpemFyZCBhbmQgdGhlbiBpbiB0aGUgV2ViIFNlcnZpY2UgVGVzdAotUGFnZSwgY2hvb3NlICA8Yj5XZWIgU2VydmljZXMgRXhwbG9yZXI8L2I+IGFzIHRoZSB0ZXN0IGZhY2lsaXR5IGFuZCBjbGljawotb24gdGhlICA8Yj5MYXVuY2g8L2I+IGJ1dHRvbi4gSWYgeW91IGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHVzaW5nCi10aGlzIG1ldGhvZCwgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IHByZWxvYWQgdGhlIFdTREwgKGFuZCBpdHMgY2hpbGQgbm9kZXMpCi1pbiB0aGUgV1NETCBwYWdlLjwvcD48L2NvbnRleHQ+Ci08L3Rhc2tib2R5PgotPC90YXNrPgotPHRhc2sgaWQ9ImQwZTYzIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkxhdW5jaGluZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHVzaW5nIHRoZSBJbXBvcnQgd2l6YXJkPC90aXRsZT4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlRvIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHVzaW5nIHRoZSBJbXBvcnQgd2l6YXJkLCBkbwotdGhlIGZvbGxvd2luZzo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5Gcm9tIHRoZSBtYWluIG1lbnUsIGNsaWNrICA8Yj5GaWxlID4gSW1wb3J0PC9iPi4gVGhlIEltcG9ydCB3aXphcmQKLW9wZW5zLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+U2VsZWN0ICA8Yj5XZWIgU2VydmljZTwvYj4gYW5kIGNsaWNrICA8Yj5OZXh0PC9iPi4gVGhlIFdlYiBzZXJ2aWNlCi1pbXBvcnQgd2l6YXJkIG9wZW5zLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+Q2xpY2sgIDxiPkZpbmlzaDwvYj4uPC9jbWQ+PC9zdGVwPgotPC9zdGVwcz4KLTxyZXN1bHQ+PHA+VGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBvcGVucy4gSWYgeW91IHNlbGVjdGVkIGEgcmVnaXN0cnkgb24KLXRoZSBXZWIgU2VydmljZSBQdWJsaWNhdGlvbiBwYWdlIG9mIHRoZSBXZWIgc2VydmljZSBJbXBvcnQgd2l6YXJkLCB5b3Ugd2lsbAotc2VlIHRoZSByZWdpc3RyeSBkaXNwbGF5ZWQgaW4gdGhlIE5hdmlnYXRvciBwYW5lLjwvcD48L3Jlc3VsdD4KLTwvdGFza2JvZHk+Ci08L3Rhc2s+Ci08dGFzayBpZD0iZDBlOTUiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+TGF1bmNoaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgdXNpbmcgdGhlIEV4cG9ydCB3aXphcmQ8L3RpdGxlPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+VG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgdXNpbmcgdGhlIEV4cG9ydCB3aXphcmQsIGRvCi10aGUgZm9sbG93aW5nOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPkZyb20gdGhlIG1haW4gbWVudSwgY2xpY2sgIDxiPkZpbGUgPiBFeHBvcnQ8L2I+LiBUaGUgRXhwb3J0IHdpemFyZAotb3BlbnMuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5TZWxlY3QgIDxiPldlYiBTZXJ2aWNlPC9iPiBhbmQgY2xpY2sgIDxiPk5leHQ8L2I+LiBUaGUgV2ViIFNlcnZpY2UKLUV4cG9ydCB3aXphcmQgb3BlbnMuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5DbGljayAgPGI+RmluaXNoPC9iPi4gVGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBvcGVucy48L2NtZD48L3N0ZXA+Ci08L3N0ZXBzPgotPHJlc3VsdD48cD5UaGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIG9wZW5zLiZuYnNwOyBJZiB5b3Ugc2VsZWN0ZWQgYSByZWdpc3RyeQotb24gdGhlIFdlYiBTZXJ2aWNlIFB1YmxpY2F0aW9uIHBhZ2Ugb2YgdGhlIFdlYiBTZXJ2aWNlIEV4cG9ydCB3aXphcmQsIHlvdQotd2lsbCBzZWUgdGhlIHJlZ2lzdHJ5IGRpc3BsYXllZCBpbiB0aGUgTmF2aWdhdG9yIHBhbmUuPC9wPjwvcmVzdWx0PgotPC90YXNrYm9keT4KLTwvdGFzaz4KLTx0YXNrIGlkPSJkMGUxMjciIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+TGF1bmNoaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgZnJvbSB0aGUgUnVuIG1lbnU8L3RpdGxlPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+VG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgZnJvbSB0aGUgbWFpbiBtZW51LCBlbnN1cmUKLXRoYXQgeW91IGFyZSBpbiB0aGUgSjJFRSBwZXJzcGVjdGl2ZSBhbmQgY2xpY2sgIDxiPlJ1biA+IExhdW5jaCB0aGUgV2ViIFNlcnZpY2VzCi1FeHBsb3JlcjwvYj4uIFRoZSBJbXBvcnQgd2l6YXJkIG9wZW5zLiBUaGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIG9wZW5zLiZuYnNwOwotVGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBvcGVucyB3aXRob3V0IGFueSByZWdpc3RyaWVzIGRpc3BsYXllZCBpbiB0aGUgTmF2aWdhdG9yCi1wYW5lLjwvcD48L2NvbnRleHQ+Ci08L3Rhc2tib2R5PgotPC90YXNrPgotPHRhc2sgaWQ9ImQwZTEzNCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5MYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBmcm9tIGEgV1NETCBmaWxlPC90aXRsZT4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlRvIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGZyb20gYSBXU0RMIGZpbGUsIHNlbGVjdCB0aGUKLVdTREwgZmlsZSBhbmQgcmlnaHQtY2xpY2sgYW5kIGNob29zZSAgPGI+V2ViIFNlcnZpY2VzID4gVGVzdCB3aXRoIFdlYiBTZXJ2aWNlcwotRXhwbG9yZXI8L2I+IG9yICA8Yj5QdWJsaXNoIFdTREwgZmlsZTwvYj4uJm5ic3A7IFRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIKLW9wZW5zLiBUaGUgIDxiPlRlc3Qgd2l0aCBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2I+IGFjdGlvbiB3aWxsIHByZWxvYWQgdGhlCi1XU0RMIGluIHRoZSBXU0RMIHBhZ2UuPC9wPjwvY29udGV4dD4KLTwvdGFza2JvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBDb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PiBUb29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uL2NvbmNlcHRzL2N1ZGRpLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgVGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0idHVkZGlleHAuZGl0YSI+PC9saW5rPgotPGxpbmsgaHJlZj0idHJlZy5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFJlZmVyZW5jZTwvdGl0bGU+Ci08bGluayBocmVmPSIuLi9yZWYvcnVkZGkuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvdGFzaz4KLTwvdGFzaz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RzdHJ0ZXhwLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90c3RydGV4cC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMWIwMjM5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RzdHJ0ZXhwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxODYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDciIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iTGF1bmNoaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iVGhlIFdlYiBzZXJ2aWNlcyB0b29scyBhbGxvd3MgeW91IHRvIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGluIHNldmVyYWwgd2F5cy4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIFdlYiBzZXJ2aWNlcyB0b29scyBhbGxvd3MgeW91IHRvIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGluIHNldmVyYWwgd2F5cy4iIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgU2VydmljZXMgRXhwbG9yZXIsIGxhdW5jaGluZyIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IldlYiBTZXJ2aWNlcyBFeHBsb3JlciwgbGF1bmNoaW5nIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0c3RydGV4cCIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkxhdW5jaGluZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0c3RydGV4cCI+PGEgbmFtZT0idHN0cnRleHAiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkxhdW5jaGluZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9oMT4KLQotCi0KLQotPGRpdj48cD5UaGUgV2ViIHNlcnZpY2VzIHRvb2xzIGFsbG93cyB5b3UgdG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIKLWluIHNldmVyYWwgd2F5cy48L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjx1bD4KLTxsaT5Gcm9tIHRoZSBtYWluIHRvb2xiYXIgaW4gdGhlIEoyRUUgcGVyc3BlY3RpdmUuPC9saT4KLQotPGxpPkJ5IHVzaW5nIHRoZSBXZWIgc2VydmljZSB3aXphcmRzLjwvbGk+Ci0KLTxsaT5CeSB1c2luZyB0aGUgSW1wb3J0IHdpemFyZC48L2xpPgotCi08bGk+QnkgdXNpbmcgdGhlIEV4cG9ydCB3aXphcmQuPC9saT4KLQotPGxpPkZyb20gdGhlIFJ1biBtZW51IGluIHRoZSBKMkVFIHBlcnNwZWN0aXZlLjwvbGk+Ci0KLTxsaT5Gcm9tIGEgV1NETCBmaWxlLjwvbGk+Ci0KLTwvdWw+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9Im5lc3RlZDEiIHhtbDpsYW5nPSJlbi11cyIgaWQ9ImQwZTM4Ij48YSBuYW1lPSJkMGUzOCI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj5MYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBmcm9tIHRoZSBtYWluIHRvb2xiYXI8L2gyPgotCi08ZGl2PgotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgZnJvbSB0aGUgbWFpbiB0b29sYmFyLCBlbnN1cmUKLXRoYXQgeW91IGFyZSBpbiB0aGUgSjJFRSBwZXJzcGVjdGl2ZSBhbmQgY2xpY2sgdGhlICA8c3Ryb25nPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzCi1FeHBsb3Jlcjwvc3Ryb25nPiBpY29uICA8aW1nIHNyYz0iLi4vaW1hZ2VzL3VkZGl2aWV3LmdpZiIgYWx0PSJQaWN0dXJlIG9mIHRoZSBMYXVuY2ggV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGljb24uIiAvPi4gVGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBvcGVucyB3aXRob3V0Ci1hbnkgcmVnaXN0cmllcyBkaXNwbGF5ZWQgaW4gdGhlIE5hdmlnYXRvciBwYW5lLiBZb3UgY2FuIG5vdyAgPGEgaHJlZj0idGFkZHJlZy5odG1sIj5hZGQgYSByZWdpc3RyeTwvYT4gdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlci48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJuZXN0ZWQxIiB4bWw6bGFuZz0iZW4tdXMiIGlkPSJkMGU1MCI+PGEgbmFtZT0iZDBlNTAiPjwhLS0gLS0+PC9hPgotPGgyIGNsYXNzPSJ0b3BpY3RpdGxlMiI+TGF1bmNoaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgdXNpbmcgdGhlIFdlYiBTZXJ2aWNlcyBXaXphcmQ8L2gyPgotCi08ZGl2PgotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgZnJvbSB0aGUgV2ViIFNlcnZpY2VzIFdpemFyZCwKLXNlbGVjdCB0aGUgIDxzdHJvbmc+VGVzdCB0aGUgV2ViIFNlcnZpY2U8L3N0cm9uZz4gY2hlY2sgYm94IGluIHRoZSBmaXJzdCBwYWdlIG9mIHRoZQotV2ViIFNlcnZpY2VzIFdpemFyZC4gUHJvY2VlZCB3aXRoIHRoZSB3aXphcmQgYW5kIHRoZW4gaW4gdGhlIFdlYiBTZXJ2aWNlIFRlc3QKLVBhZ2UsIGNob29zZSAgPHN0cm9uZz5XZWIgU2VydmljZXMgRXhwbG9yZXI8L3N0cm9uZz4gYXMgdGhlIHRlc3QgZmFjaWxpdHkgYW5kIGNsaWNrCi1vbiB0aGUgIDxzdHJvbmc+TGF1bmNoPC9zdHJvbmc+IGJ1dHRvbi4gSWYgeW91IGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHVzaW5nCi10aGlzIG1ldGhvZCwgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IHByZWxvYWQgdGhlIFdTREwgKGFuZCBpdHMgY2hpbGQgbm9kZXMpCi1pbiB0aGUgV1NETCBwYWdlLjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9Im5lc3RlZDEiIHhtbDpsYW5nPSJlbi11cyIgaWQ9ImQwZTYzIj48YSBuYW1lPSJkMGU2MyI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj5MYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciB1c2luZyB0aGUgSW1wb3J0IHdpemFyZDwvaDI+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UbyBsYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciB1c2luZyB0aGUgSW1wb3J0IHdpemFyZCwgZG8KLXRoZSBmb2xsb3dpbmc6PC9wPgotPC9kaXY+Ci0KLTxvbD4KLTxsaT48c3Bhbj5Gcm9tIHRoZSBtYWluIG1lbnUsIGNsaWNrICA8c3Ryb25nPkZpbGUgJmd0OyBJbXBvcnQ8L3N0cm9uZz4uIFRoZSBJbXBvcnQgd2l6YXJkCi1vcGVucy48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPlNlbGVjdCAgPHN0cm9uZz5XZWIgU2VydmljZTwvc3Ryb25nPiBhbmQgY2xpY2sgIDxzdHJvbmc+TmV4dDwvc3Ryb25nPi4gVGhlIFdlYiBzZXJ2aWNlCi1pbXBvcnQgd2l6YXJkIG9wZW5zLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+Q2xpY2sgIDxzdHJvbmc+RmluaXNoPC9zdHJvbmc+Ljwvc3Bhbj48L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UaGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIG9wZW5zLiBJZiB5b3Ugc2VsZWN0ZWQgYSByZWdpc3RyeSBvbgotdGhlIFdlYiBTZXJ2aWNlIFB1YmxpY2F0aW9uIHBhZ2Ugb2YgdGhlIFdlYiBzZXJ2aWNlIEltcG9ydCB3aXphcmQsIHlvdSB3aWxsCi1zZWUgdGhlIHJlZ2lzdHJ5IGRpc3BsYXllZCBpbiB0aGUgTmF2aWdhdG9yIHBhbmUuPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibmVzdGVkMSIgeG1sOmxhbmc9ImVuLXVzIiBpZD0iZDBlOTUiPjxhIG5hbWU9ImQwZTk1Ij48IS0tIC0tPjwvYT4KLTxoMiBjbGFzcz0idG9waWN0aXRsZTIiPkxhdW5jaGluZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHVzaW5nIHRoZSBFeHBvcnQgd2l6YXJkPC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRvIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHVzaW5nIHRoZSBFeHBvcnQgd2l6YXJkLCBkbwotdGhlIGZvbGxvd2luZzo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpPjxzcGFuPkZyb20gdGhlIG1haW4gbWVudSwgY2xpY2sgIDxzdHJvbmc+RmlsZSAmZ3Q7IEV4cG9ydDwvc3Ryb25nPi4gVGhlIEV4cG9ydCB3aXphcmQKLW9wZW5zLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+U2VsZWN0ICA8c3Ryb25nPldlYiBTZXJ2aWNlPC9zdHJvbmc+IGFuZCBjbGljayAgPHN0cm9uZz5OZXh0PC9zdHJvbmc+LiBUaGUgV2ViIFNlcnZpY2UKLUV4cG9ydCB3aXphcmQgb3BlbnMuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5DbGljayAgPHN0cm9uZz5GaW5pc2g8L3N0cm9uZz4uIFRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgb3BlbnMuPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgb3BlbnMuwqAgSWYgeW91IHNlbGVjdGVkIGEgcmVnaXN0cnkKLW9uIHRoZSBXZWIgU2VydmljZSBQdWJsaWNhdGlvbiBwYWdlIG9mIHRoZSBXZWIgU2VydmljZSBFeHBvcnQgd2l6YXJkLCB5b3UKLXdpbGwgc2VlIHRoZSByZWdpc3RyeSBkaXNwbGF5ZWQgaW4gdGhlIE5hdmlnYXRvciBwYW5lLjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9Im5lc3RlZDEiIHhtbDpsYW5nPSJlbi11cyIgaWQ9ImQwZTEyNyI+PGEgbmFtZT0iZDBlMTI3Ij48IS0tIC0tPjwvYT4KLTxoMiBjbGFzcz0idG9waWN0aXRsZTIiPkxhdW5jaGluZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGZyb20gdGhlIFJ1biBtZW51PC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRvIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGZyb20gdGhlIG1haW4gbWVudSwgZW5zdXJlCi10aGF0IHlvdSBhcmUgaW4gdGhlIEoyRUUgcGVyc3BlY3RpdmUgYW5kIGNsaWNrICA8c3Ryb25nPlJ1biAmZ3Q7IExhdW5jaCB0aGUgV2ViIFNlcnZpY2VzCi1FeHBsb3Jlcjwvc3Ryb25nPi4gVGhlIEltcG9ydCB3aXphcmQgb3BlbnMuIFRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgb3BlbnMuwqAKLVRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgb3BlbnMgd2l0aG91dCBhbnkgcmVnaXN0cmllcyBkaXNwbGF5ZWQgaW4gdGhlIE5hdmlnYXRvcgotcGFuZS48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJuZXN0ZWQxIiB4bWw6bGFuZz0iZW4tdXMiIGlkPSJkMGUxMzQiPjxhIG5hbWU9ImQwZTEzNCI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj5MYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBmcm9tIGEgV1NETCBmaWxlPC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRvIGxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGZyb20gYSBXU0RMIGZpbGUsIHNlbGVjdCB0aGUKLVdTREwgZmlsZSBhbmQgcmlnaHQtY2xpY2sgYW5kIGNob29zZSAgPHN0cm9uZz5XZWIgU2VydmljZXMgJmd0OyBUZXN0IHdpdGggV2ViIFNlcnZpY2VzCi1FeHBsb3Jlcjwvc3Ryb25nPiBvciAgPHN0cm9uZz5QdWJsaXNoIFdTREwgZmlsZTwvc3Ryb25nPi7CoCBUaGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyCi1vcGVucy4gVGhlICA8c3Ryb25nPlRlc3Qgd2l0aCBXZWIgU2VydmljZXMgRXhwbG9yZXI8L3N0cm9uZz4gYWN0aW9uIHdpbGwgcHJlbG9hZCB0aGUKLVdTREwgaW4gdGhlIFdTREwgcGFnZS48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIENvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmh0bWwiPiBUb29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWwiPldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3VkZGkuaHRtbCIgdGl0bGU9IlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpIHNwZWNpZmljYXRpb24gZGVmaW5lcyBhIHdheSB0byBwdWJsaXNoIGFuZCBkaXNjb3ZlciBpbmZvcm1hdGlvbiBhYm91dCBXZWIgc2VydmljZXMuIj5Vbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKTwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9InR1ZGRpZXhwLmh0bWwiIHRpdGxlPSJUaHJvdWdoIFVEREkgYW5kIFdTSUwsIG90aGVyIGFwcGxpY2F0aW9ucyBjYW4gZGlzY292ZXIgV1NETCBkb2N1bWVudHMgYW5kIGJpbmQgd2l0aCB0aGVtIHRvIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIG9yIHBlcmZvcm0gb3RoZXIgYnVzaW5lc3MgcHJvY2Vzc2VzLiI+UHVibGlzaGluZyBXZWIgc2VydmljZXMgYW5kIGJ1c2luZXNzIGVudGl0aWVzPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0cmVnLmh0bWwiIHRpdGxlPSJJbiBvcmRlciB0byBwdWJsaXNoIHlvdXIgYnVzaW5lc3MgZW50aXR5IGFuZCBXZWIgc2VydmljZSB0byBhIFVEREkgcmVnaXN0cnksIHlvdSBtdXN0IGZpcnN0IHJlZ2lzdGVyIHdpdGggdGhlIHJlZ2lzdHJ5IHRoYXQgeW91IHdhbnQgdG8gdXNlLiI+UmVnaXN0ZXJpbmcgd2l0aCBhIFVEREkgcmVnaXN0cnk8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgUmVmZXJlbmNlPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vcmVmL3J1ZGRpLmh0bWwiIHRpdGxlPSJPbmNlIHlvdSBoYXZlIHJlZ2lzdGVyZWQgYW5kIGxvZ2dlZCBpbiB0byB0aGUgVURESSByZWdpc3RyeSB0aGF0IHlvdSB3YW50IHRvIHVzZSwgeW91IGNhbiByZWdpc3RlciB5b3VyIFdlYiBzZXJ2aWNlLiBSZWdpc3RyYXRpb24gb2YgYSBzZXJ2aWNlIGludm9sdmVzIGZvdXIgY29yZSBkYXRhIHN0cnVjdHVyZSB0eXBlczogYnVzaW5lc3MgaW5mb3JtYXRpb24sIHNlcnZpY2UgaW5mb3JtYXRpb24sIGJpbmRpbmcgaW5mb3JtYXRpb24sIGFuZCBpbmZvcm1hdGlvbiBkZXNjcmliaW5nIHRoZSBzcGVjaWZpY2F0aW9ucyBmb3Igc2VydmljZXMuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBkYXRhIHR5cGVzIGlzIGRlc2NyaWJlZCBpbiBGaWd1cmUgMS4iPkRhdGEgc3RydWN0dXJlIHR5cGVzIChVRERJIHJlZ2lzdHJ5KTwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci0KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R0ZXN0d3NkbC5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHRlc3R3c2RsLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyNTAzMWMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHRlc3R3c2RsLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+Ci08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiIKLSAidGFzay5kdGQiPgotPHRhc2sgaWQ9InR0ZXN0d3NkbCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5UZXN0aW5nIFdTREwgZG9jdW1lbnRzIGFuZCBXZWIgc2VydmljZXMgdXNpbmcgdGhlIFdTREwgRXhwbG9yZXI8L3RpdGxlPgotPHRpdGxlYWx0cz4KLTxzZWFyY2h0aXRsZT5Vc2luZyB0aGUgV1NETCBFeHBsb3Jlcjwvc2VhcmNodGl0bGU+Ci08L3RpdGxlYWx0cz4KLTxzaG9ydGRlc2M+V1NETCBkb2N1bWVudHMgYWxsb3cgZGV2ZWxvcGVycyB0byBleHBvc2UgdGhlaXIgYXBwbGljYXRpb25zIGFzCi1uZXR3b3JrLWFjY2Vzc2libGUgc2VydmljZXMgb24gdGhlIEludGVybmV0LiBUaHJvdWdoIFVEREkgYW5kIFdTSUwsIG90aGVyCi1hcHBsaWNhdGlvbnMgY2FuIGRpc2NvdmVyIFdTREwgZG9jdW1lbnRzIGFuZCBiaW5kIHdpdGggdGhlbSB0byBleGVjdXRlIHRyYW5zYWN0aW9ucwotb3IgcGVyZm9ybSBvdGhlciBidXNpbmVzcyBwcm9jZXNzZXMuIFRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgYWxsb3dzIHlvdQotdG8gZXhwbG9yZSwgaW1wb3J0LCBhbmQgdGVzdCBXU0RMIGRvY3VtZW50cy48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0+V1NETDxpbmRleHRlcm0+dGVzdGluZyB3aXRoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT50ZXN0aW5nIHdpdGggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08cHJlcmVxPlByZXJlcXVpc2l0ZXM6IFRvIHVzZSB0aGUgV1NETCBFeHBsb3Jlcjo8dWw+Ci08bGk+WW91IG11c3QgaGF2ZSBhIHZhbGlkIFVSTCBmb3IgYSBXU0RMIGRvY3VtZW50LjwvbGk+Ci08bGk+WW91IG11c3QgbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI6IDx4cmVmIGhyZWY9InRzdHJ0ZXhwLmRpdGEiPkxhdW5jaAotdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwveHJlZj48L2xpPgotPC91bD48L3ByZXJlcT4KLTxjb250ZXh0PjxwPlRoZSBXU0RMIEV4cGxvcmVyIGFsbG93cyB5b3UgdG8gZXhwbG9yZSwgYW5kIHRlc3QgV1NETCBkb2N1bWVudHMuCi1Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBleHBsb3JpbmcgV1NETCBkb2N1bWVudHMgdXNpbmcgdGhlIFdTREwgRXhwbG9yZXIsCi1yZWZlciB0byA8eHJlZiBocmVmPSJ0d3NkbGV4cC5kaXRhIj5Vc2luZyB0aGUgV1NETCBFeHBsb3JlcjwveHJlZj4gLjwvcD48cD5UbwotdGVzdCBhIFdlYiBzZXJ2aWNlIHVzaW5nIHRoZSBXU0RMIEV4cGxvcmVyOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPlRvIGxhdW5jaCB0aGUgV1NETCBFeHBsb3JlciwgY29tcGxldGUgdGhlIGZvbGxvd2luZyBzdGVwczo8L2NtZD4KLTxzdWJzdGVwcz4KLTxzdWJzdGVwPjxjbWQ+SW4gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlciwgc3dpdGNoIHRvIHRoZSBXU0RMIEV4cGxvcmVyIGJ5Ci1jbGlja2luZyB0aGUgaWNvbiBpbiB0aGUgdXBwZXIgcmlnaHQtaGFuZCBjb3JuZXIgIDxpbWFnZSBhbHQ9Ikljb24gdG8gbGF1bmNoIHRoZSBXU0RMIEV4cGxvcmVyIgotaHJlZj0iLi4vaW1hZ2VzL3dzZGxpY29uLmdpZiI+PC9pbWFnZT4uIDwvY21kPjwvc3Vic3RlcD4KLTwvc3Vic3RlcHM+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPlNlbGVjdCBXU0RMIE1haW4gaW4gdGhlIE5hdmlnYXRvciBwYW5lLCBlbnRlciBvciBicm93c2UgdG8gYW4gZXhpc3RpbmcKLVdTREwgVVJMIGluIHRoZSByaWdodC1oYW5kIHBhbmUsIGFuZCBjbGljayAgPGI+R288L2I+LiBGb3IgdGhpcyBleGFtcGxlIHRoZQotV1NETCBiZWluZyB1c2VkIGlzIGEgV2ViIFNlcnZpY2Ugd2hpY2ggY29udmVydHMgdGVtcGVyYXR1cmUgZnJvbSBDZWxzaXVzIHRvCi1GYWhyZW5oZWl0IG9yIEZhaHJlbmhlaXQgdG8gQ2Vsc2l1cy4gICA8aW1hZ2UgYWx0PSJTY3JlZW4gY2FwdHVyZSBvZiB0aGUgV1NETCBNYWluIHBhbmUgb2YgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciIKLWhyZWY9Ii4uL2ltYWdlcy93c2RsdGVtcC5naWYiIHBsYWNlbWVudD0iYnJlYWsiPjwvaW1hZ2U+ICBUaGUgZm9sbG93aW5nIG5vZGVzCi13aWxsIGJlIGFkZGVkIHRvIHRoZSBXU0RMIHRyZWU6IDwvY21kPjxpbmZvPjx1bD4KLTxsaT5UaGUgV1NETCBub2RlOiAgPGltYWdlIGFsdD0iV1NETCBub2RlIGljb24iIGhyZWY9Ii4uL2ltYWdlcy93c2Rsbm9kZS5naWYiPgotPC9pbWFnZT48L2xpPgotPGxpPlRoZSBzZXJ2aWNlIG5vZGUgKHdoaWNoIHJlcHJlc2VudHMgYSBzZXJ2aWNlIGVsZW1lbnQgd2l0aGluIHRoZSBXU0RMIGZpbGUpOgotIDxpbWFnZSBhbHQ9IlNlcnZpY2Ugbm9kZSBpY29uIiBocmVmPSIuLi9pbWFnZXMvc2Vydm5vZGUuZ2lmIj48L2ltYWdlPjwvbGk+Ci08bGk+VGhlIGJpbmRpbmcgbm9kZTogIDxpbWFnZSBhbHQ9IkJpbmRpbmcgbm9kZSBpY29uIiBocmVmPSIuLi9pbWFnZXMvYmluZG5vZGUuZ2lmIj4KLTwvaW1hZ2U+PC9saT4KLTxsaT5UaGUgb3BlcmF0aW9uIG5vZGU6ICA8aW1hZ2UgYWx0PSJPcGVyYXRpb24gbm9kZSBpY29uIiBocmVmPSIuLi9pbWFnZXMvb3Bub2RlLmdpZiI+Ci08L2ltYWdlPjwvbGk+Ci08L3VsPjwvaW5mbz48L3N0ZXA+Ci08c3RlcD48Y21kPkluIHRoZSBXU0RMIEJpbmRpbmcgRGV0YWlscyBwYW5lLCBjbGljayB0aGUgb3BlcmF0aW9uIChpbiB0aGlzCi1leGFtcGxlIHRoZSAgPHN5c3RlbW91dHB1dD5DdG9GPC9zeXN0ZW1vdXRwdXQ+IG9wZXJhdGlvbikgdG8gZGlzcGxheTogPC9jbWQ+Ci08aW5mbz48dWw+Ci08bGk+QSBkcm9wLWRvd24gbGlzdCB3aXRoIHRoZSBlbmRwb2ludHMgYXZhaWxhYmxlIGZvciB0aGlzIG9wZXJhdGlvbjwvbGk+Ci08bGk+RmllbGRzIGZvciBlYWNoIG9mIHRoZSBwYXJhbWV0ZXJzIG9mIHRoaXMgb3BlcmF0aW9uIChpbiB0aGlzIGV4YW1wbGUgdGhlCi0gPHN5c3RlbW91dHB1dD50ZW1wPC9zeXN0ZW1vdXRwdXQ+IHBhcmFtZXRlcikgYW5kIHRoZSB0eXBlIG9mIGluZm9ybWF0aW9uCi10aGUgcGFyYW1ldGVyIGlzIGxvb2tpbmcgZm9yIChpbiB0aGlzIGV4YW1wbGUgIDxzeXN0ZW1vdXRwdXQ+dGVtcDwvc3lzdGVtb3V0cHV0PiBpcwotcmVxdWVzdGluZyBhbiBpbnRlZ2VyKS48aW1hZ2UgYWx0PSJJbnZva2UgYSBXU0RMIE9wZXJhdGlvbiBwYW5lIG9mIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIiCi1ocmVmPSIuLi9pbWFnZXMvd3NkbG9wLmdpZiIgcGxhY2VtZW50PSJicmVhayI+PC9pbWFnZT4gIFRoZSBGb3JtIHZpZXcgYWxsb3dzCi15b3UgdG8gZW50ZXIgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBXZWIgc2VydmljZSBvcGVyYXRpb24gY2FsbC4gUGFyYW1ldGVycwotbmFtZXMgYXJlIGRpc3BsYXllZCBhcyBsaW5rcyB3aG9zZSBhY3Rpb24gaXMgdG8gZGlzcGxheSBhIGRpYWxvZyBkZXNjcmliaW5nCi1lbWJlZGRlZCBYTUwgU2NoZW1hIERlZmluaXRpb24gTGFuZ3VhZ2UgKFhTRCkgaW5mb3JtYXRpb24uIE1vcmUgaW5mb3JtYXRpb24KLWFib3V0IFhTRCBjYW4gYmUgZm91bmQgaGVyZTogIDx4cmVmIGZvcm1hdD0iaHRtbCIgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy94c2QvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL3hzZC88L3hyZWY+IAotIDxpbWFnZSBhbHQ9IlNjcmVlbiBjYXB0dXJlIG9mIHRoZSBYU0QgSW5mb3JtYXRpb24gRGlhbG9nIiBocmVmPSIuLi9pbWFnZXMvc2NlbmFyaW83LmdpZiIKLXBsYWNlbWVudD0iYnJlYWsiPjwvaW1hZ2U+ICZuYnNwOzwvbGk+Ci08L3VsPjwvaW5mbz48L3N0ZXA+Ci08c3RlcD48Y21kPkVudGVyIHlvdXIgaW50ZWdlciBhbmQgY2xpY2sgIDxiPkdvPC9iPi4gVGhlIHJlc3VsdCBpcyByZXR1cm5lZAotaW4gdGhlIFN0YXR1cyBwYW5lLiAgIDxpbWFnZSBhbHQ9IlNjcmVlbiBjYXB0dXJlIG9mIGFuIGludm9rZWQgV1NETCBvcGVyYXRpb24gc2hvd2luZyB0aGUgcmVzdWx0IGluIHRoZSBTdGF0dXMgcGFuZSIKLWhyZWY9Ii4uL2ltYWdlcy93c2Rsb3ByZXQuZ2lmIiBwbGFjZW1lbnQ9ImJyZWFrIj48L2ltYWdlPiAmbmJzcDs8L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPklmIHlvdSBhcmUgdXNpbmcgU09BUCBhcyB5b3VyIGJpbmRpbmcgbWV0aG9kLCBjbGlja2luZyBTb3VyY2Ugb3IKLUZvcm0gaW4gdGhlIHVwcGVyIHJpZ2h0LWhhbmQgY29ybmVyIHdpbGwgdG9nZ2xlIHRoZSBkaXNwbGF5IGJldHdlZW4gdGhlIEZvcm0KLXZpZXcgKHNob3duIGFib3ZlKSBhbmQgdGhlIFNvdXJjZSB2aWV3LCB3aGljaCBkaXNwbGF5cyB0aGUgU09BUCBtZXNzYWdlIGluCi10aGUgWE1MIGZvcm1hdC4gWW91IGNhbiBhbHNvIGVudGVyIHRoZSBzYW1lIGluZm9ybWF0aW9uIGFzIGluIHRoZSBmb3JtLCBvbmx5Ci1pbiBYTUwgZm9ybWF0ICh0aGlzIGlzIHN1Z2dlc3RlZCBmb3IgYWR2YW5jZWQgdXNlcnMgb25seSkuIFRoZSBFeHBsb3JlciBkb2VzCi12YWxpZGF0ZSB0aGUgWE1MIGlmIHlvdSBtb2RpZnkgaXQsIGJ1dCBub3QgdGhlIHBhcmFtZXRlciB2YWx1ZXMgeW91IGVudGVyLgotIDxpbWFnZSBhbHQ9IlNvdXJjZSB2aWV3IG9mIHRoZSBJbnZva2UgYSBXU0RMIE9wZXJhdGlvbiBwYW5lLiIgaHJlZj0iLi4vaW1hZ2VzL3dzZGxvcHJldHguZ2lmIgotcGxhY2VtZW50PSJicmVhayI+PC9pbWFnZT48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPklmIHlvdSBhcmUgdXNpbmcgU09BUCBhcyB5b3VyIGJpbmRpbmcgdHlwZSwgeW91IHdpbGwgYWxzbyBoYXZlCi10aGUgb3B0aW9uIG9mIHRvZ2dsaW5nIHRoZSBTdGF0dXMgcGFuZSBiZXR3ZWVuIHRoZSBTb3VyY2UgYW5kIEZvcm0gdmlld3MuCi1UaGUgU291cmNlIHZpZXcgc2hvd3MgdGhlIFNPQVAgcmVxdWVzdCBhbmQgcmVzcG9uc2UgZW52ZWxvcGVzLCBpbmNsdWRpbmcgdGhlCi1wYXJhbWV0ZXJzIHlvdSBoYXZlIGVudGVyZWQgdG8gdGVzdCB0aGUgc2VydmljZSBhbmQgdGhlIHJldHVybmVkIHZhbHVlLiAgIDxpbWFnZQotYWx0PSJTY3JlZW4gY2FwdHVyZSBvZiB0aGUgc291cmNlIHZpZXcgb2YgdGhlIFNPQVAgcmVxdWVzdCBhbmQgcmVzcG9uc2UgZW52ZWxvcGVzIgotaHJlZj0iLi4vaW1hZ2VzL3dzZGxzdGF0eC5naWYiIHBsYWNlbWVudD0iYnJlYWsiPjwvaW1hZ2U+IDwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08L3Rhc2tib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgQ29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+V2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jdWRkaS5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9InR1ZGRpZXhwLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRzdHJ0ZXhwLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90b3ZlcndzLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD4gRGV2ZWxvcGluZyBXZWIgc2VydmljZXM8L2xpbmt0ZXh0PjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L3Rhc2s+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dGVzdHdzZGwuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R0ZXN0d3NkbC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OTIxYjhiLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R0ZXN0d3NkbC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTM3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA2IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IlRlc3RpbmcgV1NETCBkb2N1bWVudHMgYW5kIFdlYiBzZXJ2aWNlcyB1c2luZyB0aGUgV1NETCBFeHBsb3JlciIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJXU0RMIGRvY3VtZW50cyBhbGxvdyBkZXZlbG9wZXJzIHRvIGV4cG9zZSB0aGVpciBhcHBsaWNhdGlvbnMgYXMgbmV0d29yay1hY2Nlc3NpYmxlIHNlcnZpY2VzIG9uIHRoZSBJbnRlcm5ldC4gVGhyb3VnaCBVRERJIGFuZCBXU0lMLCBvdGhlciBhcHBsaWNhdGlvbnMgY2FuIGRpc2NvdmVyIFdTREwgZG9jdW1lbnRzIGFuZCBiaW5kIHdpdGggdGhlbSB0byBleGVjdXRlIHRyYW5zYWN0aW9ucyBvciBwZXJmb3JtIG90aGVyIGJ1c2luZXNzIHByb2Nlc3Nlcy4gVGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBhbGxvd3MgeW91IHRvIGV4cGxvcmUsIGltcG9ydCwgYW5kIHRlc3QgV1NETCBkb2N1bWVudHMuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IldTREwgZG9jdW1lbnRzIGFsbG93IGRldmVsb3BlcnMgdG8gZXhwb3NlIHRoZWlyIGFwcGxpY2F0aW9ucyBhcyBuZXR3b3JrLWFjY2Vzc2libGUgc2VydmljZXMgb24gdGhlIEludGVybmV0LiBUaHJvdWdoIFVEREkgYW5kIFdTSUwsIG90aGVyIGFwcGxpY2F0aW9ucyBjYW4gZGlzY292ZXIgV1NETCBkb2N1bWVudHMgYW5kIGJpbmQgd2l0aCB0aGVtIHRvIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIG9yIHBlcmZvcm0gb3RoZXIgYnVzaW5lc3MgcHJvY2Vzc2VzLiBUaGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGFsbG93cyB5b3UgdG8gZXhwbG9yZSwgaW1wb3J0LCBhbmQgdGVzdCBXU0RMIGRvY3VtZW50cy4iIC8+Ci08bWV0YSBjb250ZW50PSJXU0RMLCB0ZXN0aW5nIHdpdGggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciwgV2ViIHNlcnZpY2VzIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV1NETCwgdGVzdGluZyB3aXRoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIsIFdlYiBzZXJ2aWNlcyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N1ZGRpLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InR1ZGRpZXhwLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InRzdHJ0ZXhwLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90b3ZlcndzLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idHRlc3R3c2RsIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+VXNpbmcgdGhlIFdTREwgRXhwbG9yZXI8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InR0ZXN0d3NkbCI+PGEgbmFtZT0idHRlc3R3c2RsIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5UZXN0aW5nIFdTREwgZG9jdW1lbnRzIGFuZCBXZWIgc2VydmljZXMgdXNpbmcgdGhlIFdTREwgRXhwbG9yZXI8L2gxPgotCi0KLQotCi08ZGl2PjxwPldTREwgZG9jdW1lbnRzIGFsbG93IGRldmVsb3BlcnMgdG8gZXhwb3NlIHRoZWlyIGFwcGxpY2F0aW9ucyBhcwotbmV0d29yay1hY2Nlc3NpYmxlIHNlcnZpY2VzIG9uIHRoZSBJbnRlcm5ldC4gVGhyb3VnaCBVRERJIGFuZCBXU0lMLCBvdGhlcgotYXBwbGljYXRpb25zIGNhbiBkaXNjb3ZlciBXU0RMIGRvY3VtZW50cyBhbmQgYmluZCB3aXRoIHRoZW0gdG8gZXhlY3V0ZSB0cmFuc2FjdGlvbnMKLW9yIHBlcmZvcm0gb3RoZXIgYnVzaW5lc3MgcHJvY2Vzc2VzLiBUaGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGFsbG93cyB5b3UKLXRvIGV4cGxvcmUsIGltcG9ydCwgYW5kIHRlc3QgV1NETCBkb2N1bWVudHMuPC9wPgotCi08ZGl2IGNsYXNzPSJwIj5QcmVyZXF1aXNpdGVzOiBUbyB1c2UgdGhlIFdTREwgRXhwbG9yZXI6PHVsPgotPGxpPllvdSBtdXN0IGhhdmUgYSB2YWxpZCBVUkwgZm9yIGEgV1NETCBkb2N1bWVudC48L2xpPgotCi08bGk+WW91IG11c3QgbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI6IDxhIGhyZWY9InRzdHJ0ZXhwLmh0bWwiPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPjwvbGk+Ci0KLTwvdWw+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VGhlIFdTREwgRXhwbG9yZXIgYWxsb3dzIHlvdSB0byBleHBsb3JlLCBhbmQgdGVzdCBXU0RMIGRvY3VtZW50cy4KLUZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGV4cGxvcmluZyBXU0RMIGRvY3VtZW50cyB1c2luZyB0aGUgV1NETCBFeHBsb3JlciwKLXJlZmVyIHRvIDxhIGhyZWY9InR3c2RsZXhwLmh0bWwiPlVzaW5nIHRoZSBXU0RMIEV4cGxvcmVyPC9hPiAuPC9wPgotPHA+VG8KLXRlc3QgYSBXZWIgc2VydmljZSB1c2luZyB0aGUgV1NETCBFeHBsb3Jlcjo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5UbyBsYXVuY2ggdGhlIFdTREwgRXhwbG9yZXIsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcgc3RlcHM6PC9zcGFuPgotPG9sIHR5cGU9ImEiPgotPGxpPjxzcGFuPkluIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIsIHN3aXRjaCB0byB0aGUgV1NETCBFeHBsb3JlciBieQotY2xpY2tpbmcgdGhlIGljb24gaW4gdGhlIHVwcGVyIHJpZ2h0LWhhbmQgY29ybmVyICA8aW1nIHNyYz0iLi4vaW1hZ2VzL3dzZGxpY29uLmdpZiIgYWx0PSJJY29uIHRvIGxhdW5jaCB0aGUgV1NETCBFeHBsb3JlciIgLz4uIDwvc3Bhbj48L2xpPgotCi08L29sPgotCi08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPlNlbGVjdCBXU0RMIE1haW4gaW4gdGhlIE5hdmlnYXRvciBwYW5lLCBlbnRlciBvciBicm93c2UgdG8gYW4gZXhpc3RpbmcKLVdTREwgVVJMIGluIHRoZSByaWdodC1oYW5kIHBhbmUsIGFuZCBjbGljayAgPHN0cm9uZz5Hbzwvc3Ryb25nPi4gRm9yIHRoaXMgZXhhbXBsZSB0aGUKLVdTREwgYmVpbmcgdXNlZCBpcyBhIFdlYiBTZXJ2aWNlIHdoaWNoIGNvbnZlcnRzIHRlbXBlcmF0dXJlIGZyb20gQ2Vsc2l1cyB0bwotRmFocmVuaGVpdCBvciBGYWhyZW5oZWl0IHRvIENlbHNpdXMuICAgPGJyIC8+PGltZyBzcmM9Ii4uL2ltYWdlcy93c2RsdGVtcC5naWYiIGFsdD0iU2NyZWVuIGNhcHR1cmUgb2YgdGhlIFdTREwgTWFpbiBwYW5lIG9mIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIiIC8+PGJyIC8+ICBUaGUgZm9sbG93aW5nIG5vZGVzCi13aWxsIGJlIGFkZGVkIHRvIHRoZSBXU0RMIHRyZWU6IDwvc3Bhbj4gPHVsPgotPGxpPlRoZSBXU0RMIG5vZGU6ICA8aW1nIHNyYz0iLi4vaW1hZ2VzL3dzZGxub2RlLmdpZiIgYWx0PSJXU0RMIG5vZGUgaWNvbiIgLz48L2xpPgotCi08bGk+VGhlIHNlcnZpY2Ugbm9kZSAod2hpY2ggcmVwcmVzZW50cyBhIHNlcnZpY2UgZWxlbWVudCB3aXRoaW4gdGhlIFdTREwgZmlsZSk6Ci0gPGltZyBzcmM9Ii4uL2ltYWdlcy9zZXJ2bm9kZS5naWYiIGFsdD0iU2VydmljZSBub2RlIGljb24iIC8+PC9saT4KLQotPGxpPlRoZSBiaW5kaW5nIG5vZGU6ICA8aW1nIHNyYz0iLi4vaW1hZ2VzL2JpbmRub2RlLmdpZiIgYWx0PSJCaW5kaW5nIG5vZGUgaWNvbiIgLz48L2xpPgotCi08bGk+VGhlIG9wZXJhdGlvbiBub2RlOiAgPGltZyBzcmM9Ii4uL2ltYWdlcy9vcG5vZGUuZ2lmIiBhbHQ9Ik9wZXJhdGlvbiBub2RlIGljb24iIC8+PC9saT4KLQotPC91bD4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIFdTREwgQmluZGluZyBEZXRhaWxzIHBhbmUsIGNsaWNrIHRoZSBvcGVyYXRpb24gKGluIHRoaXMKLWV4YW1wbGUgdGhlICA8dHQgY2xhc3M9InN5c291dCI+Q3RvRjwvdHQ+IG9wZXJhdGlvbikgdG8gZGlzcGxheTogPC9zcGFuPgotIDx1bD4KLTxsaT5BIGRyb3AtZG93biBsaXN0IHdpdGggdGhlIGVuZHBvaW50cyBhdmFpbGFibGUgZm9yIHRoaXMgb3BlcmF0aW9uPC9saT4KLQotPGxpPkZpZWxkcyBmb3IgZWFjaCBvZiB0aGUgcGFyYW1ldGVycyBvZiB0aGlzIG9wZXJhdGlvbiAoaW4gdGhpcyBleGFtcGxlIHRoZQotIDx0dCBjbGFzcz0ic3lzb3V0Ij50ZW1wPC90dD4gcGFyYW1ldGVyKSBhbmQgdGhlIHR5cGUgb2YgaW5mb3JtYXRpb24KLXRoZSBwYXJhbWV0ZXIgaXMgbG9va2luZyBmb3IgKGluIHRoaXMgZXhhbXBsZSAgPHR0IGNsYXNzPSJzeXNvdXQiPnRlbXA8L3R0PiBpcwotcmVxdWVzdGluZyBhbiBpbnRlZ2VyKS48YnIgLz48aW1nIHNyYz0iLi4vaW1hZ2VzL3dzZGxvcC5naWYiIGFsdD0iSW52b2tlIGEgV1NETCBPcGVyYXRpb24gcGFuZSBvZiB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIiAvPjxiciAvPiAgVGhlIEZvcm0gdmlldyBhbGxvd3MKLXlvdSB0byBlbnRlciB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIFdlYiBzZXJ2aWNlIG9wZXJhdGlvbiBjYWxsLiBQYXJhbWV0ZXJzCi1uYW1lcyBhcmUgZGlzcGxheWVkIGFzIGxpbmtzIHdob3NlIGFjdGlvbiBpcyB0byBkaXNwbGF5IGEgZGlhbG9nIGRlc2NyaWJpbmcKLWVtYmVkZGVkIFhNTCBTY2hlbWEgRGVmaW5pdGlvbiBMYW5ndWFnZSAoWFNEKSBpbmZvcm1hdGlvbi4gTW9yZSBpbmZvcm1hdGlvbgotYWJvdXQgWFNEIGNhbiBiZSBmb3VuZCBoZXJlOiAgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy94c2QvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL3hzZC88L2E+IAotIDxiciAvPjxpbWcgc3JjPSIuLi9pbWFnZXMvc2NlbmFyaW83LmdpZiIgYWx0PSJTY3JlZW4gY2FwdHVyZSBvZiB0aGUgWFNEIEluZm9ybWF0aW9uIERpYWxvZyIgLz48YnIgLz4gwqA8L2xpPgotCi08L3VsPgotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5FbnRlciB5b3VyIGludGVnZXIgYW5kIGNsaWNrICA8c3Ryb25nPkdvPC9zdHJvbmc+LiBUaGUgcmVzdWx0IGlzIHJldHVybmVkCi1pbiB0aGUgU3RhdHVzIHBhbmUuICAgPGJyIC8+PGltZyBzcmM9Ii4uL2ltYWdlcy93c2Rsb3ByZXQuZ2lmIiBhbHQ9IlNjcmVlbiBjYXB0dXJlIG9mIGFuIGludm9rZWQgV1NETCBvcGVyYXRpb24gc2hvd2luZyB0aGUgcmVzdWx0IGluIHRoZSBTdGF0dXMgcGFuZSIgLz48YnIgLz4gwqA8L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JZiB5b3UgYXJlIHVzaW5nIFNPQVAgYXMgeW91ciBiaW5kaW5nIG1ldGhvZCwgY2xpY2tpbmcgU291cmNlIG9yCi1Gb3JtIGluIHRoZSB1cHBlciByaWdodC1oYW5kIGNvcm5lciB3aWxsIHRvZ2dsZSB0aGUgZGlzcGxheSBiZXR3ZWVuIHRoZSBGb3JtCi12aWV3IChzaG93biBhYm92ZSkgYW5kIHRoZSBTb3VyY2Ugdmlldywgd2hpY2ggZGlzcGxheXMgdGhlIFNPQVAgbWVzc2FnZSBpbgotdGhlIFhNTCBmb3JtYXQuIFlvdSBjYW4gYWxzbyBlbnRlciB0aGUgc2FtZSBpbmZvcm1hdGlvbiBhcyBpbiB0aGUgZm9ybSwgb25seQotaW4gWE1MIGZvcm1hdCAodGhpcyBpcyBzdWdnZXN0ZWQgZm9yIGFkdmFuY2VkIHVzZXJzIG9ubHkpLiBUaGUgRXhwbG9yZXIgZG9lcwotdmFsaWRhdGUgdGhlIFhNTCBpZiB5b3UgbW9kaWZ5IGl0LCBidXQgbm90IHRoZSBwYXJhbWV0ZXIgdmFsdWVzIHlvdSBlbnRlci4KLSA8YnIgLz48aW1nIHNyYz0iLi4vaW1hZ2VzL3dzZGxvcHJldHguZ2lmIiBhbHQ9IlNvdXJjZSB2aWV3IG9mIHRoZSBJbnZva2UgYSBXU0RMIE9wZXJhdGlvbiBwYW5lLiIgLz48YnIgLz48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JZiB5b3UgYXJlIHVzaW5nIFNPQVAgYXMgeW91ciBiaW5kaW5nIHR5cGUsIHlvdSB3aWxsIGFsc28gaGF2ZQotdGhlIG9wdGlvbiBvZiB0b2dnbGluZyB0aGUgU3RhdHVzIHBhbmUgYmV0d2VlbiB0aGUgU291cmNlIGFuZCBGb3JtIHZpZXdzLgotVGhlIFNvdXJjZSB2aWV3IHNob3dzIHRoZSBTT0FQIHJlcXVlc3QgYW5kIHJlc3BvbnNlIGVudmVsb3BlcywgaW5jbHVkaW5nIHRoZQotcGFyYW1ldGVycyB5b3UgaGF2ZSBlbnRlcmVkIHRvIHRlc3QgdGhlIHNlcnZpY2UgYW5kIHRoZSByZXR1cm5lZCB2YWx1ZS4gICA8YnIgLz48aW1nIHNyYz0iLi4vaW1hZ2VzL3dzZGxzdGF0eC5naWYiIGFsdD0iU2NyZWVuIGNhcHR1cmUgb2YgdGhlIHNvdXJjZSB2aWV3IG9mIHRoZSBTT0FQIHJlcXVlc3QgYW5kIHJlc3BvbnNlIGVudmVsb3BlcyIgLz48YnIgLz4gPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sIj4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIj5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N1ZGRpLmh0bWwiIHRpdGxlPSJVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSBzcGVjaWZpY2F0aW9uIGRlZmluZXMgYSB3YXkgdG8gcHVibGlzaCBhbmQgZGlzY292ZXIgaW5mb3JtYXRpb24gYWJvdXQgV2ViIHNlcnZpY2VzLiI+VW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSk8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgVGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJ0dWRkaWV4cC5odG1sIiB0aXRsZT0iVGhyb3VnaCBVRERJIGFuZCBXU0lMLCBvdGhlciBhcHBsaWNhdGlvbnMgY2FuIGRpc2NvdmVyIFdTREwgZG9jdW1lbnRzIGFuZCBiaW5kIHdpdGggdGhlbSB0byBleGVjdXRlIHRyYW5zYWN0aW9ucyBvciBwZXJmb3JtIG90aGVyIGJ1c2luZXNzIHByb2Nlc3Nlcy4iPlB1Ymxpc2hpbmcgV2ViIHNlcnZpY2VzIGFuZCBidXNpbmVzcyBlbnRpdGllczwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idHN0cnRleHAuaHRtbCIgdGl0bGU9IlRoZSBXZWIgc2VydmljZXMgdG9vbHMgYWxsb3dzIHlvdSB0byBsYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBpbiBzZXZlcmFsIHdheXMuIj5MYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3Rhc2tzL3RvdmVyd3MuaHRtbCI+IERldmVsb3BpbmcgV2ViIHNlcnZpY2VzPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dWRkaWV4cC5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHVkZGlleHAuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQ4YmQzOC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dWRkaWV4cC5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsMTMwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iCi0gInRhc2suZHRkIj4KLTx0YXNrIGlkPSJ0dWRkaWV4cCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5QdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXM8L3RpdGxlPgotPHRpdGxlYWx0cz4KLTxzZWFyY2h0aXRsZT5QdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXMgd2l0aCB0aGUgV2ViIFNlcnZpY2VzCi1FeHBsb3Jlcjwvc2VhcmNodGl0bGU+Ci08L3RpdGxlYWx0cz4KLTxzaG9ydGRlc2M+VGhyb3VnaCBVRERJIGFuZCBXU0lMLCBvdGhlciBhcHBsaWNhdGlvbnMgY2FuIGRpc2NvdmVyIFdTREwgZG9jdW1lbnRzCi1hbmQgYmluZCB3aXRoIHRoZW0gdG8gZXhlY3V0ZSB0cmFuc2FjdGlvbnMgb3IgcGVyZm9ybSBvdGhlciBidXNpbmVzcyBwcm9jZXNzZXMuIDwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5XZWIgU2VydmljZXM8aW5kZXh0ZXJtPnB1Ymxpc2hpbmc8aW5kZXh0ZXJtPm92ZXJ2aWV3PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPmJ1c2luZXNzIGVudGl0aWVzPGluZGV4dGVybT5wdWJsaXNoaW5nPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPldlYiBTZXJ2aWNlcyBFeHBsb3JlcjxpbmRleHRlcm0+cHVibGlzaGluZyBXZWIgc2VydmljZXM8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+VURESSBlbmFibGVzIHRoZSBkaXNjb3Zlcnkgb2YgV2ViIHNlcnZpY2VzIGJ5IHByb3ZpZGluZyBhIGRpc3RyaWJ1dGVkCi1yZWdpc3RyeSBvZiBidXNpbmVzc2VzIGFuZCB0aGVpciBzZXJ2aWNlIGRlc2NyaXB0aW9ucywgaW1wbGVtZW50ZWQgaW4gYSBjb21tb24KLVhNTCBmb3JtYXQuJm5ic3A7IEluIG9yZGVyIGZvciBhIHNlcnZpY2UgcmVxdWVzdG9yIHRvIGRpc2NvdmVyIGEgc2VydmljZSwKLWEgc2VydmljZSBwcm92aWRlciBtdXN0IGZpcnN0IHB1Ymxpc2ggYSBidXNpbmVzcyBlbnRpdHkgYW5kIGF0IGxlYXN0IG9uZSBidXNpbmVzcwotc2VydmljZSwgYW5kIHNlcnZpY2UgaW50ZXJmYWNlIGluIGEgVURESSByZWdpc3RyeS4mbmJzcDsgVGhlIFdlYiBTZXJ2aWNlcwotRXhwbG9yZXIgaXMgYSBXZWIgYXBwbGljYXRpb24gdGhhdCBzdXBwb3J0cyB0aGUgcHVibGljYXRpb24sIGRpc2NvdmVyeSwgYW5kCi1tYWludGVuYW5jZSBvZiBidXNpbmVzcyBlbnRpdGllcywgYnVzaW5lc3Mgc2VydmljZXMsIGFuZCBzZXJ2aWNlIGludGVyZmFjZXMuPC9wPjxwPldTSUwKLWVuYWJsZXMgdGhlIGRpc2NvdmVyeSBvZiBXZWIgc2VydmljZXMgYnkgZGVmaW5pbmcgYSBkaXN0cmlidXRlZCBzZXJ2aWNlIGRpc2NvdmVyeQotbWV0aG9kIHRoYXQgc3VwcGxpZXMgcmVmZXJlbmNlcyB0byBzZXJ2aWNlIGRlc2NyaXB0aW9ucyBhdCB0aGUgc2VydmljZSBwcm92aWRlcidzCi1wb2ludC1vZi1vZmZlcmluZywgYnkgc3BlY2lmeWluZyBob3cgdG8gaW5zcGVjdCBhIFdlYiBzaXRlIGZvciBhdmFpbGFibGUgV2ViCi1zZXJ2aWNlcy4mbmJzcDsgVGhlIFdTSUwgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIHRoZSBsb2NhdGlvbnMgb24gYSBXZWIgc2l0ZQotd2hlcmUgeW91IGNhbiBsb29rIGZvciBXZWIgc2VydmljZSBkZXNjcmlwdGlvbnMuJm5ic3A7U2luY2UgV1NJTCBmb2N1c2VzIG9uCi1kaXN0cmlidXRlZCBzZXJ2aWNlIGRpc2NvdmVyeSwgdGhlIFdTSUwgc3BlY2lmaWNhdGlvbiBjb21wbGVtZW50cyBVRERJIGJ5Ci1mYWNpbGl0YXRpbmcgdGhlIGRpc2NvdmVyeSBvZiBzZXJ2aWNlcyB0aGF0IGFyZSBhdmFpbGFibGUgb24gV2ViIHNpdGVzIHRoYXQKLW1heSBub3QgYmUgbGlzdGVkIHlldCBpbiBhIFVEREkgcmVnaXN0cnkuIFRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgYWxsb3dzCi15b3UgdG8gZ2VuZXJhdGUgYW5kIGV4cGxvcmUgV1NJTCBkb2N1bWVudHMuPC9wPjxwPlRoZSBmYXZvcml0ZXMgcGFnZSBvZiB0aGUKLVdlYiBTZXJ2aWNlcyBFeHBsb3JlciBhbGxvd3MgeW91IHRvIHN0b3JlIHRoZSBsb2NhdGlvbiBvZiBVRERJIHJlZ2lzdHJpZXMsCi1idXNpbmVzcyBlbnRpdGllcywgV2ViIHNlcnZpY2VzLCBzZXJ2aWNlIGludGVyZmFjZXMsIGFzIHdlbGwgYXMgV1NJTCBhbmQgV1NETAotZG9jdW1lbnRzLjwvcD48cD5Vc2UgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciB0byBkbyBhbnkgb2YgdGhlIGZvbGxvd2luZwotdGFza3M6PC9wPjx1bD4KLTxsaT4gPHhyZWYgaHJlZj0idGFkZHJlZy5kaXRhIj5BZGQgYSByZWdpc3RyeSB0byB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC94cmVmPiA8L2xpPgotPGxpPiA8eHJlZiBocmVmPSJ0YmttcmsuZGl0YSI+QWRkaW5nIGEgcmVnaXN0cnksIGJ1c2luZXNzIGVudGl0eSwgYnVzaW5lc3MKLXNlcnZpY2UsIHNlcnZpY2UgaW50ZXJmYWNlLCBXU0lMLCBvciBXU0RMIHNlcnZpY2UgdG8gRmF2b3JpdGVzPC94cmVmPiA8L2xpPgotPGxpPjx4cmVmIGhyZWY9InRsb2dleHAuZGl0YSI+PC94cmVmPjwvbGk+Ci08bGk+IDx4cmVmIGhyZWY9InRkaXNjb3YuZGl0YSI+RGlzY292ZXIgYSBXZWIgc2VydmljZTwveHJlZj4gPC9saT4KLTxsaT4gPHhyZWYgaHJlZj0idHB1YmVudC5kaXRhIj5QdWJsaXNoIGEgYnVzaW5lc3MgZW50aXR5IHRvIGEgcmVnaXN0cnk8L3hyZWY+IDwvbGk+Ci08bGk+IDx4cmVmIGhyZWY9InRwdWJsaXNoLmRpdGEiPlB1Ymxpc2ggYSBidXNpbmVzcyBzZXJ2aWNlIHRvIGEgcmVnaXN0cnk8L3hyZWY+IDwvbGk+Ci08bGk+IDx4cmVmIGhyZWY9InR1bnB1Yi5kaXRhIj5SZW1vdmUgYSBidXNpbmVzcyBlbnRpdHksIGJ1c2luZXNzIHNlcnZpY2UsCi1vciBzZXJ2aWNlIGludGVyZmFjZSBmcm9tIGEgcmVnaXN0cnk8L3hyZWY+IDwvbGk+Ci08bGk+IDx4cmVmIGhyZWY9InR1cGRhdGUuZGl0YSI+VXBkYXRlIGEgYnVzaW5lc3MgZW50aXR5LCBidXNpbmVzcyBzZXJ2aWNlLAotb3Igc2VydmljZSBpbnRlcmZhY2U8L3hyZWY+IDwvbGk+Ci08bGk+IDx4cmVmIGhyZWY9InRidXNwcm9qLmRpdGEiPk1hbmFnZSByZWZlcmVuY2VkIHNlcnZpY2VzPC94cmVmPiA8L2xpPgotPGxpPiA8eHJlZiBocmVmPSJ0YXNzZXJ0LmRpdGEiPk1hbmFnZSBwdWJsaXNoZXIgYXNzZXJ0aW9uczwveHJlZj4gPC9saT4KLTwvdWw+PHA+UHJlcmVxdWlzaXRlczo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5CZWZvcmUgeW91IGNhbiB1c2UgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciB0byBwZXJmb3JtIGFueSBvZgotdGhlc2UgZnVuY3Rpb25zLCB5b3UgbXVzdCAgPHhyZWYgaHJlZj0idHJlZy5kaXRhIj5yZWdpc3RlciB3aXRoIGEgcHVibGljIHJlZ2lzdHJ5PC94cmVmPi4mbmJzcDsKLVRoZXJlIGFyZSBtYW55IGRpZmZlcmVudCByZWdpc3RyaWVzIHdpdGggd2hpY2ggeW91IGNhbiByZWdpc3Rlci48L2NtZD48aW5mbz48L2luZm8+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPkVuc3VyZSB0aGF0IHlvdSBhcmUgdXNpbmcgYSBzdXBwb3J0ZWQgV2ViIGJyb3dzZXIuPC9jbWQ+PGluZm8+VGhlCi1mb2xsb3dpbmcgV2ViIGJyb3dzZXJzIGFuZCB2ZXJzaW9ucyBhcmUgc3VwcG9ydGVkOjx1bD4KLTxsaT5JbnRlcm5ldCBFeHBsb3JlcjogNi4wIGFuZCB1cDwvbGk+Ci08bGk+TW96aWxsYTogMS4yLjEgYW5kIHVwPC9saT4KLTwvdWw+PC9pbmZvPjwvc3RlcD4KLTxzdGVwPjxjbWQ+IDx4cmVmIGhyZWY9InRzdHJ0ZXhwLmRpdGEiPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC94cmVmPi48L2NtZD4KLTwvc3RlcD4KLTwvc3RlcHM+Ci08cmVzdWx0PjxwPjxiPktub3duIGxpbWl0YXRpb25zIG9mIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI6PC9iPjx1bD4KLTxsaT5UaGUgdGF4b25vbXkgY2F0ZWdvcmllcyBpbiB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGFyZSBub3QgdHJhbnNsYXRlZAotc2luY2UgdGhleSBtdXN0IG1hdGNoIHRob3NlIGluIHRoZSBzdGFuZGFyZHMgYWRoZXJlZCB0byBieSBVRERJIChJU08sIFVOU1BTQwotNy4zLCBOQUlDUykuPC9saT4KLTxsaT5UaGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHdpbGwgbGF1bmNoIHdpdGhvdXQgdGhlIGJyb3dzZXIgdG9vbGJhciB3aGljaAotc2hvd3MsIGFtb25nc3Qgb3RoZXIgdGhpbmdzLCB0aGUgVVJMIHRvIHRoZSBXZWIgYXBwbGljYXRpb24uIFRoaXMgVVJMIHNob3VsZAotb25seSBiZSB1c2VkIGJ5IHVzZXJzIHdpdGggYWNjZXNzaWJpbGl0eSBuZWVkcy4gVGhlIFVSTCB0byB0aGUgV2ViIFNlcnZpY2VzCi1FeHBsb3JlciBXZWIgYXBwbGljYXRpb24gY2FuIGJlIG9idGFpbmVkIHRocm91Z2ggdGhlIGZvbGxvd2luZyBzdGVwczo8b2w+Ci08bGk+RnJvbSB0aGUgV2luZG93IG1lbnUsIHNlbGVjdCBQcmVmZXJlbmNlcy48L2xpPgotPGxpPkluIHRoZSBQcmVmZXJlbmNlcyBkaWFsb2csIHNlbGVjdCA8dWljb250cm9sPldlYiBCcm93c2VyPC91aWNvbnRyb2w+IGluCi10aGUgbGVmdCBwYW5lLjwvbGk+Ci08bGk+T24gdGhlIHJpZ2h0LCBzZWxlY3QgPHVpY29udHJvbD5Vc2UgZXh0ZXJuYWwgV2ViIEJyb3dzZXI8L3VpY29udHJvbD4uPC9saT4KLTxsaT5JbiB0aGUgPHVpY29udHJvbD5Mb2NhdGlvbjogdGV4dDwvdWljb250cm9sPiBmaWVsZCwgYnJvd3NlIG9yIHR5cGUgaW4KLXRoZSBmdWxsIHBhdGggb2YgdGhlIEludGVybmV0IEV4cGxvcmVyIGV4ZWN1dGFibGUuIChmb3IgZXhhbXBsZSwgQzpcUHJvZ3JhbQotRmlsZXNcSW50ZXJuZXQgRXhwbG9yZXJcaWV4cGxvcmUuZXhlKS48L2xpPgotPGxpPkNsaWNrIDx1aWNvbnRyb2w+QXBwbHk8L3VpY29udHJvbD4gZm9sbG93ZWQgYnkgPHVpY29udHJvbD5PSzwvdWljb250cm9sPi48L2xpPgotPC9vbD4gTm90ZSB0aGF0IHRoaXMgcHJlZmVyZW5jZSB3aWxsIG5vdyBhcHBseSB0byBhbnkgYnJvd3NlciB3aW5kb3dzIHRoYXQKLWFyZSBsYXVuY2hlZCBieSB0aGUgdXNlciBvciBieSB0aGUgdG9vbHMgdGhlbXNlbHZlcyAoc3VjaCBhcyB0aGUgVW5pdmVyc2FsCi1UZXN0IENsaWVudCkuICBUaGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHdpbGwgbm93IGxhdW5jaCBpbiBhbiBleHRlcm5hbCBicm93c2VyCi1hbmQgaXRzIFVSTCBzaG91bGQgYmUgaW4gdGhlIEFkZHJlc3MgZmllbGQuIFRoaXMgY2FuIHRoZW4gYmUgcGFzdGVkIG9yIG9wZW5lZAotdXNpbmcgYW0gYWNjZXNzaWJpbGl0eSBhc3Npc3RpbmcgYnJvd3Nlci48L2xpPgotPGxpPldoZW4gcGVyZm9ybWluZyBhbiBhZHZhbmNlZCBmaW5kIG9yIHB1Ymxpc2ggaW4gdGhlIFVEREkgcGFnZSBvZiB0aGUgV2ViCi1TZXJ2aWNlcyBFeHBsb3JlciwgdGhlIGl0ZW1zIGluIHRoZSBkcm9wIGRvd24gbGlzdCBmb3IgcGlja2luZyBhIGxhbmd1YWdlCi1pbiBjb25qdW5jdGlvbiB3aXRoIGEgbmFtZSBvciBkZXNjcmlwdGlvbiBpcyBzb3J0ZWQgIGFjY29yZGluZyB0byB0aGUgb3BlcmF0aW5nCi1zeXN0ZW0ncyBsb2NhbGUgc2V0dGluZ3MuIE9uIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJNaWNyb3NvZnQgQ29ycG9yYXRpb24iCi10bXR5cGU9InJlZyIgdHJhZGVtYXJrPSJXaW5kb3dzIj5XaW5kb3dzPC90bT4sIHRoaXMgb3JkZXIgbWF5IGJlIG1hbmFnZWQgdGhyb3VnaAotdGhlIENvbnRyb2wgUGFuZWwuIFRvIGRvIHRoaXM6PG9sPgotPGxpPk9wZW4gdGhlIENvbnRyb2wgUGFuZWwuPC9saT4KLTxsaT5MYXVuY2ggdGhlIFJlZ2lvbmFsIE9wdGlvbnMgY29udHJvbCBwYW5lbCBhcHBsZXQuPC9saT4KLTxsaT5JbiB0aGUgR2VuZXJhbCB0YWIgb2YgdGhlIHJlc3VsdGluZyBkaWFsb2csIHRoZXJlIG1heSBiZSBhICJTb3J0aW5nIG9yZGVyIgotZHJvcC1kb3duIGxpc3QuIElmIHNvLCBwaWNrIGEgc29ydGluZyBvcmRlciBhbmQgdGhlbiBjbGljayA8dWljb250cm9sPkFwcGx5PC91aWNvbnRyb2w+IGZvbGxvd2VkCi1ieSA8dWljb250cm9sPk9LPC91aWNvbnRyb2w+LjwvbGk+Ci08bGk+SW4gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciwgdGhlIG5ldyBzb3J0aW5nIG9yZGVyIGNvbWVzIGludG8gZWZmZWN0Ci1vbmNlIHRoZSBwYWdlIHJlbG9hZHMuIFRoaXMgY2FuIGJlIGFjY29tcGxpc2hlZCBieSBwcmVzc2luZyB0aGUgYmFjayBhcnJvdwotZm9sbG93ZWQgYnkgdGhlIGZvcndhcmQgYXJyb3cgaW4gdGhlIG1haW4gdG9vbGJhci48L2xpPgotPC9vbD5Ob3RlOiBUaGUgaW5zdHJ1Y3Rpb25zIGFib3ZlIGFwcGx5IHRvIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJNaWNyb3NvZnQgQ29ycG9yYXRpb24iCi10bXR5cGU9InJlZyIgdHJhZGVtYXJrPSJXaW5kb3dzIj5XaW5kb3dzPC90bT4gMjAwMC4gT24gPHRtIHRtY2xhc3M9InNwZWNpYWwiCi10bW93bmVyPSJNaWNyb3NvZnQgQ29ycG9yYXRpb24iIHRtdHlwZT0icmVnIiB0cmFkZW1hcms9IldpbmRvd3MiPldpbmRvd3M8L3RtPiBYUCwKLXRoZSB0YWIgbWVudGlvbmVkIGluIHN0ZXAgMyBpcyBjYWxsZWQgIlJlZ2lvbmFsIE9wdGlvbnMiLiBCZXNpZGUgdGhlIGxhbmd1YWdlCi1kcm9wLWRvd24sIHRoZXJlIGlzIGEgPHVpY29udHJvbD5DdXN0b21pemU8L3VpY29udHJvbD4gYnV0dG9uLiBXaGVuIHRoaXMgaXMKLWNsaWNrZWQsIGEgbmV3IGRpYWxvZyBhcHBlYXJzLiBBIHNvcnRpbmcgdGFiIHdpbGwgYWxsb3cgdXNlcnMgdG8gcGljayB0aGUKLXNvcnRpbmcgbWV0aG9kIGlmIGFwcGxpY2FibGUuPC9saT4KLTwvdWw+PC9wPjwvcmVzdWx0PgotPC90YXNrYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+IFRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vY29uY2VwdHMvY3VkZGkuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+Ci08bGluayBocmVmPSJ0dWRkaWV4cC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0c3RydGV4cC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0d3NkbGV4cC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdG92ZXJ3cy5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+IERldmVsb3BpbmcgV2ViIHNlcnZpY2VzPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFJlZmVyZW5jZTwvdGl0bGU+Ci08bGluayBocmVmPSIuLi9yZWYvcnVkZGkuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvdGFzaz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R1ZGRpZXhwLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dWRkaWV4cC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYmExYTIwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R1ZGRpZXhwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxODkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDciIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iUHVibGlzaGluZyBXZWIgc2VydmljZXMgYW5kIGJ1c2luZXNzIGVudGl0aWVzIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IlRocm91Z2ggVURESSBhbmQgV1NJTCwgb3RoZXIgYXBwbGljYXRpb25zIGNhbiBkaXNjb3ZlciBXU0RMIGRvY3VtZW50cyBhbmQgYmluZCB3aXRoIHRoZW0gdG8gZXhlY3V0ZSB0cmFuc2FjdGlvbnMgb3IgcGVyZm9ybSBvdGhlciBidXNpbmVzcyBwcm9jZXNzZXMuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRocm91Z2ggVURESSBhbmQgV1NJTCwgb3RoZXIgYXBwbGljYXRpb25zIGNhbiBkaXNjb3ZlciBXU0RMIGRvY3VtZW50cyBhbmQgYmluZCB3aXRoIHRoZW0gdG8gZXhlY3V0ZSB0cmFuc2FjdGlvbnMgb3IgcGVyZm9ybSBvdGhlciBidXNpbmVzcyBwcm9jZXNzZXMuIiAvPgotPG1ldGEgY29udGVudD0iV2ViIFNlcnZpY2VzLCBwdWJsaXNoaW5nLCBvdmVydmlldywgYnVzaW5lc3MgZW50aXRpZXMsIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciwgcHVibGlzaGluZyBXZWIgc2VydmljZXMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgU2VydmljZXMsIHB1Ymxpc2hpbmcsIG92ZXJ2aWV3LCBidXNpbmVzcyBlbnRpdGllcywgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLCBwdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N1ZGRpLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InR1ZGRpZXhwLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InRzdHJ0ZXhwLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InR3c2RsZXhwLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90b3ZlcndzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3JlZi9ydWRkaS5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InR1ZGRpZXhwIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+UHVibGlzaGluZyBXZWIgc2VydmljZXMgYW5kIGJ1c2luZXNzIGVudGl0aWVzIHdpdGggdGhlIFdlYiBTZXJ2aWNlcwotRXhwbG9yZXI8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InR1ZGRpZXhwIj48YSBuYW1lPSJ0dWRkaWV4cCI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+UHVibGlzaGluZyBXZWIgc2VydmljZXMgYW5kIGJ1c2luZXNzIGVudGl0aWVzPC9oMT4KLQotCi0KLQotPGRpdj48cD5UaHJvdWdoIFVEREkgYW5kIFdTSUwsIG90aGVyIGFwcGxpY2F0aW9ucyBjYW4gZGlzY292ZXIgV1NETCBkb2N1bWVudHMKLWFuZCBiaW5kIHdpdGggdGhlbSB0byBleGVjdXRlIHRyYW5zYWN0aW9ucyBvciBwZXJmb3JtIG90aGVyIGJ1c2luZXNzIHByb2Nlc3Nlcy4gPC9wPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5VRERJIGVuYWJsZXMgdGhlIGRpc2NvdmVyeSBvZiBXZWIgc2VydmljZXMgYnkgcHJvdmlkaW5nIGEgZGlzdHJpYnV0ZWQKLXJlZ2lzdHJ5IG9mIGJ1c2luZXNzZXMgYW5kIHRoZWlyIHNlcnZpY2UgZGVzY3JpcHRpb25zLCBpbXBsZW1lbnRlZCBpbiBhIGNvbW1vbgotWE1MIGZvcm1hdC7CoCBJbiBvcmRlciBmb3IgYSBzZXJ2aWNlIHJlcXVlc3RvciB0byBkaXNjb3ZlciBhIHNlcnZpY2UsCi1hIHNlcnZpY2UgcHJvdmlkZXIgbXVzdCBmaXJzdCBwdWJsaXNoIGEgYnVzaW5lc3MgZW50aXR5IGFuZCBhdCBsZWFzdCBvbmUgYnVzaW5lc3MKLXNlcnZpY2UsIGFuZCBzZXJ2aWNlIGludGVyZmFjZSBpbiBhIFVEREkgcmVnaXN0cnkuwqAgVGhlIFdlYiBTZXJ2aWNlcwotRXhwbG9yZXIgaXMgYSBXZWIgYXBwbGljYXRpb24gdGhhdCBzdXBwb3J0cyB0aGUgcHVibGljYXRpb24sIGRpc2NvdmVyeSwgYW5kCi1tYWludGVuYW5jZSBvZiBidXNpbmVzcyBlbnRpdGllcywgYnVzaW5lc3Mgc2VydmljZXMsIGFuZCBzZXJ2aWNlIGludGVyZmFjZXMuPC9wPgotPHA+V1NJTAotZW5hYmxlcyB0aGUgZGlzY292ZXJ5IG9mIFdlYiBzZXJ2aWNlcyBieSBkZWZpbmluZyBhIGRpc3RyaWJ1dGVkIHNlcnZpY2UgZGlzY292ZXJ5Ci1tZXRob2QgdGhhdCBzdXBwbGllcyByZWZlcmVuY2VzIHRvIHNlcnZpY2UgZGVzY3JpcHRpb25zIGF0IHRoZSBzZXJ2aWNlIHByb3ZpZGVyJ3MKLXBvaW50LW9mLW9mZmVyaW5nLCBieSBzcGVjaWZ5aW5nIGhvdyB0byBpbnNwZWN0IGEgV2ViIHNpdGUgZm9yIGF2YWlsYWJsZSBXZWIKLXNlcnZpY2VzLsKgIFRoZSBXU0lMIHNwZWNpZmljYXRpb24gZGVmaW5lcyB0aGUgbG9jYXRpb25zIG9uIGEgV2ViIHNpdGUKLXdoZXJlIHlvdSBjYW4gbG9vayBmb3IgV2ViIHNlcnZpY2UgZGVzY3JpcHRpb25zLsKgU2luY2UgV1NJTCBmb2N1c2VzIG9uCi1kaXN0cmlidXRlZCBzZXJ2aWNlIGRpc2NvdmVyeSwgdGhlIFdTSUwgc3BlY2lmaWNhdGlvbiBjb21wbGVtZW50cyBVRERJIGJ5Ci1mYWNpbGl0YXRpbmcgdGhlIGRpc2NvdmVyeSBvZiBzZXJ2aWNlcyB0aGF0IGFyZSBhdmFpbGFibGUgb24gV2ViIHNpdGVzIHRoYXQKLW1heSBub3QgYmUgbGlzdGVkIHlldCBpbiBhIFVEREkgcmVnaXN0cnkuIFRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgYWxsb3dzCi15b3UgdG8gZ2VuZXJhdGUgYW5kIGV4cGxvcmUgV1NJTCBkb2N1bWVudHMuPC9wPgotPHA+VGhlIGZhdm9yaXRlcyBwYWdlIG9mIHRoZQotV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGFsbG93cyB5b3UgdG8gc3RvcmUgdGhlIGxvY2F0aW9uIG9mIFVEREkgcmVnaXN0cmllcywKLWJ1c2luZXNzIGVudGl0aWVzLCBXZWIgc2VydmljZXMsIHNlcnZpY2UgaW50ZXJmYWNlcywgYXMgd2VsbCBhcyBXU0lMIGFuZCBXU0RMCi1kb2N1bWVudHMuPC9wPgotPHA+VXNlIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgdG8gZG8gYW55IG9mIHRoZSBmb2xsb3dpbmcKLXRhc2tzOjwvcD4KLTx1bD4KLTxsaT4gPGEgaHJlZj0idGFkZHJlZy5odG1sIj5BZGQgYSByZWdpc3RyeSB0byB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPiA8L2xpPgotCi08bGk+IDxhIGhyZWY9InRia21yay5odG1sIj5BZGRpbmcgYSByZWdpc3RyeSwgYnVzaW5lc3MgZW50aXR5LCBidXNpbmVzcyBzZXJ2aWNlLCBzZXJ2aWNlIGludGVyZmFjZSwgV1NJTCwgb3IgV1NETCBzZXJ2aWNlIHRvIEZhdm9yaXRlczwvYT4gPC9saT4KLQotPGxpPjxhIGhyZWY9InRsb2dleHAuaHRtbCIgdGl0bGU9IklmIHlvdSBoYXZlIHB1Ymxpc2hlZCB5b3VyIFdlYiBzZXJ2aWNlIHRvIGEgVURESSByZWdpc3RyeSB5b3UgY2FuJiMxMDtsb2cgaW50byB0aGUgcmVnaXN0cnkgYW5kIG1hbmFnZSB0aGUgc2VydmljZSB0aHJvdWdoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIuIj5Mb2dnaW5nIGluIHRvIGEgVURESSByZWdpc3RyeTwvYT48L2xpPgotCi08bGk+IDxhIGhyZWY9InRkaXNjb3YuaHRtbCI+RGlzY292ZXIgYSBXZWIgc2VydmljZTwvYT4gPC9saT4KLQotPGxpPiA8YSBocmVmPSJ0cHViZW50Lmh0bWwiPlB1Ymxpc2ggYSBidXNpbmVzcyBlbnRpdHkgdG8gYSByZWdpc3RyeTwvYT4gPC9saT4KLQotPGxpPiA8YSBocmVmPSJ0cHVibGlzaC5odG1sIj5QdWJsaXNoIGEgYnVzaW5lc3Mgc2VydmljZSB0byBhIHJlZ2lzdHJ5PC9hPiA8L2xpPgotCi08bGk+IDxhIGhyZWY9InR1bnB1Yi5odG1sIj5SZW1vdmUgYSBidXNpbmVzcyBlbnRpdHksIGJ1c2luZXNzIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlIGZyb20gYSByZWdpc3RyeTwvYT4gPC9saT4KLQotPGxpPiA8YSBocmVmPSJ0dXBkYXRlLmh0bWwiPlVwZGF0ZSBhIGJ1c2luZXNzIGVudGl0eSwgYnVzaW5lc3Mgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2U8L2E+IDwvbGk+Ci0KLTxsaT4gPGEgaHJlZj0idGJ1c3Byb2ouaHRtbCI+TWFuYWdlIHJlZmVyZW5jZWQgc2VydmljZXM8L2E+IDwvbGk+Ci0KLTxsaT4gPGEgaHJlZj0idGFzc2VydC5odG1sIj5NYW5hZ2UgcHVibGlzaGVyIGFzc2VydGlvbnM8L2E+IDwvbGk+Ci0KLTwvdWw+Ci08cD5QcmVyZXF1aXNpdGVzOjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkJlZm9yZSB5b3UgY2FuIHVzZSB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHRvIHBlcmZvcm0gYW55IG9mCi10aGVzZSBmdW5jdGlvbnMsIHlvdSBtdXN0ICA8YSBocmVmPSJ0cmVnLmh0bWwiPnJlZ2lzdGVyIHdpdGggYSBwdWJsaWMgcmVnaXN0cnk8L2E+LsKgCi1UaGVyZSBhcmUgbWFueSBkaWZmZXJlbnQgcmVnaXN0cmllcyB3aXRoIHdoaWNoIHlvdSBjYW4gcmVnaXN0ZXIuPC9zcGFuPiAKLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+RW5zdXJlIHRoYXQgeW91IGFyZSB1c2luZyBhIHN1cHBvcnRlZCBXZWIgYnJvd3Nlci48L3NwYW4+IFRoZQotZm9sbG93aW5nIFdlYiBicm93c2VycyBhbmQgdmVyc2lvbnMgYXJlIHN1cHBvcnRlZDo8dWw+Ci08bGk+SW50ZXJuZXQgRXhwbG9yZXI6IDYuMCBhbmQgdXA8L2xpPgotCi08bGk+TW96aWxsYTogMS4yLjEgYW5kIHVwPC9saT4KLQotPC91bD4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+IDxhIGhyZWY9InRzdHJ0ZXhwLmh0bWwiPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPi48L3NwYW4+Ci08L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48ZGl2IGNsYXNzPSJwIj48c3Ryb25nPktub3duIGxpbWl0YXRpb25zIG9mIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI6PC9zdHJvbmc+PHVsPgotPGxpPlRoZSB0YXhvbm9teSBjYXRlZ29yaWVzIGluIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgYXJlIG5vdCB0cmFuc2xhdGVkCi1zaW5jZSB0aGV5IG11c3QgbWF0Y2ggdGhvc2UgaW4gdGhlIHN0YW5kYXJkcyBhZGhlcmVkIHRvIGJ5IFVEREkgKElTTywgVU5TUFNDCi03LjMsIE5BSUNTKS48L2xpPgotCi08bGk+VGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciB3aWxsIGxhdW5jaCB3aXRob3V0IHRoZSBicm93c2VyIHRvb2xiYXIgd2hpY2gKLXNob3dzLCBhbW9uZ3N0IG90aGVyIHRoaW5ncywgdGhlIFVSTCB0byB0aGUgV2ViIGFwcGxpY2F0aW9uLiBUaGlzIFVSTCBzaG91bGQKLW9ubHkgYmUgdXNlZCBieSB1c2VycyB3aXRoIGFjY2Vzc2liaWxpdHkgbmVlZHMuIFRoZSBVUkwgdG8gdGhlIFdlYiBTZXJ2aWNlcwotRXhwbG9yZXIgV2ViIGFwcGxpY2F0aW9uIGNhbiBiZSBvYnRhaW5lZCB0aHJvdWdoIHRoZSBmb2xsb3dpbmcgc3RlcHM6PG9sPgotPGxpPkZyb20gdGhlIFdpbmRvdyBtZW51LCBzZWxlY3QgUHJlZmVyZW5jZXMuPC9saT4KLQotPGxpPkluIHRoZSBQcmVmZXJlbmNlcyBkaWFsb2csIHNlbGVjdCA8c3BhbiBjbGFzcz0idWljb250cm9sIj5XZWIgQnJvd3Nlcjwvc3Bhbj4gaW4KLXRoZSBsZWZ0IHBhbmUuPC9saT4KLQotPGxpPk9uIHRoZSByaWdodCwgc2VsZWN0IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlVzZSBleHRlcm5hbCBXZWIgQnJvd3Nlcjwvc3Bhbj4uPC9saT4KLQotPGxpPkluIHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Mb2NhdGlvbjogdGV4dDwvc3Bhbj4gZmllbGQsIGJyb3dzZSBvciB0eXBlIGluCi10aGUgZnVsbCBwYXRoIG9mIHRoZSBJbnRlcm5ldCBFeHBsb3JlciBleGVjdXRhYmxlLiAoZm9yIGV4YW1wbGUsIEM6XFByb2dyYW0KLUZpbGVzXEludGVybmV0IEV4cGxvcmVyXGlleHBsb3JlLmV4ZSkuPC9saT4KLQotPGxpPkNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkFwcGx5PC9zcGFuPiBmb2xsb3dlZCBieSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5PSzwvc3Bhbj4uPC9saT4KLQotPC9vbD4KLSBOb3RlIHRoYXQgdGhpcyBwcmVmZXJlbmNlIHdpbGwgbm93IGFwcGx5IHRvIGFueSBicm93c2VyIHdpbmRvd3MgdGhhdAotYXJlIGxhdW5jaGVkIGJ5IHRoZSB1c2VyIG9yIGJ5IHRoZSB0b29scyB0aGVtc2VsdmVzIChzdWNoIGFzIHRoZSBVbml2ZXJzYWwKLVRlc3QgQ2xpZW50KS4gIFRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgd2lsbCBub3cgbGF1bmNoIGluIGFuIGV4dGVybmFsIGJyb3dzZXIKLWFuZCBpdHMgVVJMIHNob3VsZCBiZSBpbiB0aGUgQWRkcmVzcyBmaWVsZC4gVGhpcyBjYW4gdGhlbiBiZSBwYXN0ZWQgb3Igb3BlbmVkCi11c2luZyBhbSBhY2Nlc3NpYmlsaXR5IGFzc2lzdGluZyBicm93c2VyLjwvbGk+Ci0KLTxsaT5XaGVuIHBlcmZvcm1pbmcgYW4gYWR2YW5jZWQgZmluZCBvciBwdWJsaXNoIGluIHRoZSBVRERJIHBhZ2Ugb2YgdGhlIFdlYgotU2VydmljZXMgRXhwbG9yZXIsIHRoZSBpdGVtcyBpbiB0aGUgZHJvcCBkb3duIGxpc3QgZm9yIHBpY2tpbmcgYSBsYW5ndWFnZQotaW4gY29uanVuY3Rpb24gd2l0aCBhIG5hbWUgb3IgZGVzY3JpcHRpb24gaXMgc29ydGVkICBhY2NvcmRpbmcgdG8gdGhlIG9wZXJhdGluZwotc3lzdGVtJ3MgbG9jYWxlIHNldHRpbmdzLiBPbiBXaW5kb3dzPHN1cD7Crjwvc3VwPiwgdGhpcyBvcmRlciBtYXkgYmUgbWFuYWdlZCB0aHJvdWdoCi10aGUgQ29udHJvbCBQYW5lbC4gVG8gZG8gdGhpczo8b2w+Ci08bGk+T3BlbiB0aGUgQ29udHJvbCBQYW5lbC48L2xpPgotCi08bGk+TGF1bmNoIHRoZSBSZWdpb25hbCBPcHRpb25zIGNvbnRyb2wgcGFuZWwgYXBwbGV0LjwvbGk+Ci0KLTxsaT5JbiB0aGUgR2VuZXJhbCB0YWIgb2YgdGhlIHJlc3VsdGluZyBkaWFsb2csIHRoZXJlIG1heSBiZSBhICJTb3J0aW5nIG9yZGVyIgotZHJvcC1kb3duIGxpc3QuIElmIHNvLCBwaWNrIGEgc29ydGluZyBvcmRlciBhbmQgdGhlbiBjbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5BcHBseTwvc3Bhbj4gZm9sbG93ZWQKLWJ5IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk9LPC9zcGFuPi48L2xpPgotCi08bGk+SW4gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciwgdGhlIG5ldyBzb3J0aW5nIG9yZGVyIGNvbWVzIGludG8gZWZmZWN0Ci1vbmNlIHRoZSBwYWdlIHJlbG9hZHMuIFRoaXMgY2FuIGJlIGFjY29tcGxpc2hlZCBieSBwcmVzc2luZyB0aGUgYmFjayBhcnJvdwotZm9sbG93ZWQgYnkgdGhlIGZvcndhcmQgYXJyb3cgaW4gdGhlIG1haW4gdG9vbGJhci48L2xpPgotCi08L29sPgotTm90ZTogVGhlIGluc3RydWN0aW9ucyBhYm92ZSBhcHBseSB0byBXaW5kb3dzIDIwMDAuIE9uIFdpbmRvd3MgWFAsCi10aGUgdGFiIG1lbnRpb25lZCBpbiBzdGVwIDMgaXMgY2FsbGVkICJSZWdpb25hbCBPcHRpb25zIi4gQmVzaWRlIHRoZSBsYW5ndWFnZQotZHJvcC1kb3duLCB0aGVyZSBpcyBhIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkN1c3RvbWl6ZTwvc3Bhbj4gYnV0dG9uLiBXaGVuIHRoaXMgaXMKLWNsaWNrZWQsIGEgbmV3IGRpYWxvZyBhcHBlYXJzLiBBIHNvcnRpbmcgdGFiIHdpbGwgYWxsb3cgdXNlcnMgdG8gcGljayB0aGUKLXNvcnRpbmcgbWV0aG9kIGlmIGFwcGxpY2FibGUuPC9saT4KLQotPC91bD4KLTwvZGl2PgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sIj4gVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sIj5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N1ZGRpLmh0bWwiIHRpdGxlPSJVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSBzcGVjaWZpY2F0aW9uIGRlZmluZXMgYSB3YXkgdG8gcHVibGlzaCBhbmQgZGlzY292ZXIgaW5mb3JtYXRpb24gYWJvdXQgV2ViIHNlcnZpY2VzLiI+VW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSk8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgVGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJ0dWRkaWV4cC5odG1sIiB0aXRsZT0iVGhyb3VnaCBVRERJIGFuZCBXU0lMLCBvdGhlciBhcHBsaWNhdGlvbnMgY2FuIGRpc2NvdmVyIFdTREwgZG9jdW1lbnRzIGFuZCBiaW5kIHdpdGggdGhlbSB0byBleGVjdXRlIHRyYW5zYWN0aW9ucyBvciBwZXJmb3JtIG90aGVyIGJ1c2luZXNzIHByb2Nlc3Nlcy4iPlB1Ymxpc2hpbmcgV2ViIHNlcnZpY2VzIGFuZCBidXNpbmVzcyBlbnRpdGllczwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idHN0cnRleHAuaHRtbCIgdGl0bGU9IlRoZSBXZWIgc2VydmljZXMgdG9vbHMgYWxsb3dzIHlvdSB0byBsYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBpbiBzZXZlcmFsIHdheXMuIj5MYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idHdzZGxleHAuaHRtbCIgdGl0bGU9IiI+RXhwbG9yaW5nIFdTREwgdXNpbmcgdGhlIFdTREwgRXhwbG9yZXI8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90b3ZlcndzLmh0bWwiPiBEZXZlbG9waW5nIFdlYiBzZXJ2aWNlczwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBSZWZlcmVuY2U8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi9yZWYvcnVkZGkuaHRtbCIgdGl0bGU9Ik9uY2UgeW91IGhhdmUgcmVnaXN0ZXJlZCBhbmQgbG9nZ2VkIGluIHRvIHRoZSBVRERJIHJlZ2lzdHJ5IHRoYXQgeW91IHdhbnQgdG8gdXNlLCB5b3UgY2FuIHJlZ2lzdGVyIHlvdXIgV2ViIHNlcnZpY2UuIFJlZ2lzdHJhdGlvbiBvZiBhIHNlcnZpY2UgaW52b2x2ZXMgZm91ciBjb3JlIGRhdGEgc3RydWN0dXJlIHR5cGVzOiBidXNpbmVzcyBpbmZvcm1hdGlvbiwgc2VydmljZSBpbmZvcm1hdGlvbiwgYmluZGluZyBpbmZvcm1hdGlvbiwgYW5kIGluZm9ybWF0aW9uIGRlc2NyaWJpbmcgdGhlIHNwZWNpZmljYXRpb25zIGZvciBzZXJ2aWNlcy4gVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGRhdGEgdHlwZXMgaXMgZGVzY3JpYmVkIGluIEZpZ3VyZSAxLiI+RGF0YSBzdHJ1Y3R1cmUgdHlwZXMgKFVEREkgcmVnaXN0cnkpPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dW5wdWIuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R1bnB1Yi5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzFkNmI2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R1bnB1Yi5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+Ci08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiIKLSAidGFzay5kdGQiPgotPHRhc2sgaWQ9InR1bnB1YiIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5SZW1vdmluZyBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlIGZyb20KLWEgcmVnaXN0cnk8L3RpdGxlPgotPHRpdGxlYWx0cz4KLTxzZWFyY2h0aXRsZT5SZW1vdmluZyBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlCi1mcm9tIGEgcmVnaXN0cnk8L3NlYXJjaHRpdGxlPgotPC90aXRsZWFsdHM+Ci08c2hvcnRkZXNjPkFmdGVyIHlvdSBoYXZlIHB1Ymxpc2hlZCBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UKLWludGVyZmFjZSwgeW91IGNhbiByZW1vdmUgb3IgdW5wdWJsaXNoIGl0IHRocm91Z2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlci48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5yZW1vdmluZyBmcm9tIGEgVURESSByZWdpc3RyeTwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPGluZGV4dGVybT5zZXJ2aWNlIGludGVyZmFjZXM8aW5kZXh0ZXJtPnJlbW92aW5nIGZyb20gYSBVRERJIHJlZ2lzdHJ5PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPmJ1c2luZXNzIGVudGl0aWVzPGluZGV4dGVybT5yZW1vdmluZyBmcm9tIGEgVURESSByZWdpc3RyeTwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPGluZGV4dGVybT5VRERJPGluZGV4dGVybT5yZW1vdmluZyBzZXJ2aWNlcyBmcm9tIGEgcmVnaXN0cnk8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPHRhc2tib2R5PgotPHByZXJlcT5QcmVyZXF1aXNpdGVzOjxvbD4KLTxsaT4gPHhyZWYgaHJlZj0idHB1YmVudC5kaXRhIj5QdWJsaXNoIGEgYnVzaW5lc3MgZW50aXR5PC94cmVmPi48L2xpPgotPGxpPiA8eHJlZiBocmVmPSJ0cHVibGlzaC5kaXRhIj5QdWJsaXNoIGEgV2ViIHNlcnZpY2U8L3hyZWY+LjwvbGk+Ci08bGk+IDx4cmVmIGhyZWY9InRwdWJsaXNoLmRpdGEiPlB1Ymxpc2ggYSBzZXJ2aWNlIGludGVyZmFjZTwveHJlZj4uPC9saT4KLTxsaT4gPHhyZWYgaHJlZj0idHN0cnRleHAuZGl0YSI+TGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L3hyZWY+LjwvbGk+Ci08L29sPjwvcHJlcmVxPgotPGNvbnRleHQ+VG8gdW5wdWJsaXNoIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UKLXVzaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI6PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5OYXZpZ2F0ZSB0aHJvdWdoIHRoZSByZWdpc3RyeSBoaWVyYXJjaHkgdG8gZmluZCB0aGUgYnVzaW5lc3MgZW50aXR5LAotV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlIHlvdSB3YW50IHRvIHVucHVibGlzaC4gU2VsZWN0IHRoZSBidXNpbmVzcwotZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgQWN0aW9ucyBpY29uIGJhciwgY2xpY2sgdGhlICA8dWljb250cm9sPlVucHVibGlzaDwvdWljb250cm9sPiBpY29uLjwvY21kPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5FbnRlciB0aGUgcHVibGlzaCBVUkwsIHlvdXIgdXNlciBJRCwgYW5kIHBhc3N3b3JkLCBpZiBuZWNlc3NhcnksCi10aGVuIGNsaWNrICA8dWljb250cm9sPkdvPC91aWNvbnRyb2w+LjwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08cmVzdWx0PjxwPlRoZSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSBpcyByZW1vdmVkCi1mcm9tIHRoZSByZWdpc3RyeSBhbmQgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgd2l0aAoteW91ciBjaGFuZ2UuPC9wPjwvcmVzdWx0PgotPC90YXNrYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+IFRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vY29uY2VwdHMvY3VkZGkuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+Ci08bGluayBocmVmPSJ0dWRkaWV4cC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0c3RydGV4cC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0cHViZW50LmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRwdWJsaXNoLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9InR1bnB1Yi5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0dXBkYXRlLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgUmVmZXJlbmNlPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL3JlZi9ydWRkaS5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHVucHViLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dW5wdWIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZkODVkNi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dW5wdWIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwNyIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJSZW1vdmluZyBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlIGZyb20gYSByZWdpc3RyeSIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJBZnRlciB5b3UgaGF2ZSBwdWJsaXNoZWQgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSwgeW91IGNhbiByZW1vdmUgb3IgdW5wdWJsaXNoIGl0IHRocm91Z2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlci4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iQWZ0ZXIgeW91IGhhdmUgcHVibGlzaGVkIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UsIHlvdSBjYW4gcmVtb3ZlIG9yIHVucHVibGlzaCBpdCB0aHJvdWdoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIuIiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzLCByZW1vdmluZyBmcm9tIGEgVURESSByZWdpc3RyeSwgc2VydmljZSBpbnRlcmZhY2VzLCBidXNpbmVzcyBlbnRpdGllcywgVURESSwgcmVtb3Zpbmcgc2VydmljZXMgZnJvbSBhIHJlZ2lzdHJ5IiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzLCByZW1vdmluZyBmcm9tIGEgVURESSByZWdpc3RyeSwgc2VydmljZSBpbnRlcmZhY2VzLCBidXNpbmVzcyBlbnRpdGllcywgVURESSwgcmVtb3Zpbmcgc2VydmljZXMgZnJvbSBhIHJlZ2lzdHJ5IiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3VkZGkuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idHVkZGlleHAuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idHN0cnRleHAuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idHB1YmVudC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0cHVibGlzaC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0dW5wdWIuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idHVwZGF0ZS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9yZWYvcnVkZGkuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0dW5wdWIiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5SZW1vdmluZyBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlCi1mcm9tIGEgcmVnaXN0cnk8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InR1bnB1YiI+PGEgbmFtZT0idHVucHViIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5SZW1vdmluZyBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlIGZyb20KLWEgcmVnaXN0cnk8L2gxPgotCi0KLQotCi08ZGl2PjxwPkFmdGVyIHlvdSBoYXZlIHB1Ymxpc2hlZCBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UKLWludGVyZmFjZSwgeW91IGNhbiByZW1vdmUgb3IgdW5wdWJsaXNoIGl0IHRocm91Z2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlci48L3A+Ci0KLTxkaXYgY2xhc3M9InAiPlByZXJlcXVpc2l0ZXM6PG9sPgotPGxpPiA8YSBocmVmPSJ0cHViZW50Lmh0bWwiPlB1Ymxpc2ggYSBidXNpbmVzcyBlbnRpdHk8L2E+LjwvbGk+Ci0KLTxsaT4gPGEgaHJlZj0idHB1Ymxpc2guaHRtbCI+UHVibGlzaCBhIFdlYiBzZXJ2aWNlPC9hPi48L2xpPgotCi08bGk+IDxhIGhyZWY9InRwdWJsaXNoLmh0bWwiPlB1Ymxpc2ggYSBzZXJ2aWNlIGludGVyZmFjZTwvYT4uPC9saT4KLQotPGxpPiA8YSBocmVmPSJ0c3RydGV4cC5odG1sIj5MYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYT4uPC9saT4KLQotPC9vbD4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj5UbyB1bnB1Ymxpc2ggYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZQotdXNpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlcjo8L2Rpdj4KLQotPG9sPgotPGxpPjxzcGFuPk5hdmlnYXRlIHRocm91Z2ggdGhlIHJlZ2lzdHJ5IGhpZXJhcmNoeSB0byBmaW5kIHRoZSBidXNpbmVzcyBlbnRpdHksCi1XZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UgeW91IHdhbnQgdG8gdW5wdWJsaXNoLiBTZWxlY3QgdGhlIGJ1c2luZXNzCi1lbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZS48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkluIHRoZSBBY3Rpb25zIGljb24gYmFyLCBjbGljayB0aGUgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlVucHVibGlzaDwvc3Bhbj4gaWNvbi48L3NwYW4+Ci08L2xpPgotCi08bGk+PHNwYW4+RW50ZXIgdGhlIHB1Ymxpc2ggVVJMLCB5b3VyIHVzZXIgSUQsIGFuZCBwYXNzd29yZCwgaWYgbmVjZXNzYXJ5LAotdGhlbiBjbGljayAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+R288L3NwYW4+Ljwvc3Bhbj48L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UaGUgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UgaXMgcmVtb3ZlZAotZnJvbSB0aGUgcmVnaXN0cnkgYW5kIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgaXMgYXV0b21hdGljYWxseSB1cGRhdGVkIHdpdGgKLXlvdXIgY2hhbmdlLjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgQ29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuaHRtbCI+IFRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuaHRtbCI+V2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jdWRkaS5odG1sIiB0aXRsZT0iVW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIGEgd2F5IHRvIHB1Ymxpc2ggYW5kIGRpc2NvdmVyIGluZm9ybWF0aW9uIGFib3V0IFdlYiBzZXJ2aWNlcy4iPlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0idHVkZGlleHAuaHRtbCIgdGl0bGU9IlRocm91Z2ggVURESSBhbmQgV1NJTCwgb3RoZXIgYXBwbGljYXRpb25zIGNhbiBkaXNjb3ZlciBXU0RMIGRvY3VtZW50cyBhbmQgYmluZCB3aXRoIHRoZW0gdG8gZXhlY3V0ZSB0cmFuc2FjdGlvbnMgb3IgcGVyZm9ybSBvdGhlciBidXNpbmVzcyBwcm9jZXNzZXMuIj5QdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXM8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRzdHJ0ZXhwLmh0bWwiIHRpdGxlPSJUaGUgV2ViIHNlcnZpY2VzIHRvb2xzIGFsbG93cyB5b3UgdG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgaW4gc2V2ZXJhbCB3YXlzLiI+TGF1bmNoaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRwdWJlbnQuaHRtbCIgdGl0bGU9IkEgYnVzaW5lc3MgZW50aXR5IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBidXNpbmVzcyB0aGF0IGhhcyBwdWJsaXNoZWQgYSBzZXJ2aWNlLsKgIEJlZm9yZSB5b3UgY2FuIHB1Ymxpc2ggYSBidXNpbmVzcyBzZXJ2aWNlLCB5b3UgbXVzdCBwdWJsaXNoIGEgYnVzaW5lc3MgZW50aXR5LiI+UHVibGlzaGluZyBhIGJ1c2luZXNzIGVudGl0eTwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idHB1Ymxpc2guaHRtbCIgdGl0bGU9IlRoZSBXZWIgc2VydmljZSwgYWxzbyBrbm93biBhcyB0aGUgYnVzaW5lc3Mgc2VydmljZSwgZGVzY3JpYmVzIGEgV2ViIHNlcnZpY2UncyBlbmRwb2ludCBhbmQgd2hlcmUgaXRzIFdTREwgZmlsZSByZXNpZGVzLiBUaGUgV1NETCBmaWxlIGxpc3RzIHRoZSBvcGVyYXRpb25zIHRoYXQgc2VydmljZSBwcm92aWRlcy4iPlB1Ymxpc2hpbmcgYSBXZWIgc2VydmljZTwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idHVucHViLmh0bWwiIHRpdGxlPSJBZnRlciB5b3UgaGF2ZSBwdWJsaXNoZWQgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSwgeW91IGNhbiByZW1vdmUgb3IgdW5wdWJsaXNoIGl0IHRocm91Z2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlci4iPlJlbW92aW5nIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UgZnJvbSBhIHJlZ2lzdHJ5PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0dXBkYXRlLmh0bWwiIHRpdGxlPSJBZnRlciB5b3UgaGF2ZSBwdWJsaXNoZWQgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSwgeW91IGNhbiB1cGRhdGUgaXQgdGhyb3VnaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLiI+VXBkYXRpbmcgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZTwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBSZWZlcmVuY2U8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi9yZWYvcnVkZGkuaHRtbCIgdGl0bGU9Ik9uY2UgeW91IGhhdmUgcmVnaXN0ZXJlZCBhbmQgbG9nZ2VkIGluIHRvIHRoZSBVRERJIHJlZ2lzdHJ5IHRoYXQgeW91IHdhbnQgdG8gdXNlLCB5b3UgY2FuIHJlZ2lzdGVyIHlvdXIgV2ViIHNlcnZpY2UuIFJlZ2lzdHJhdGlvbiBvZiBhIHNlcnZpY2UgaW52b2x2ZXMgZm91ciBjb3JlIGRhdGEgc3RydWN0dXJlIHR5cGVzOiBidXNpbmVzcyBpbmZvcm1hdGlvbiwgc2VydmljZSBpbmZvcm1hdGlvbiwgYmluZGluZyBpbmZvcm1hdGlvbiwgYW5kIGluZm9ybWF0aW9uIGRlc2NyaWJpbmcgdGhlIHNwZWNpZmljYXRpb25zIGZvciBzZXJ2aWNlcy4gVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGRhdGEgdHlwZXMgaXMgZGVzY3JpYmVkIGluIEZpZ3VyZSAxLiI+RGF0YSBzdHJ1Y3R1cmUgdHlwZXMgKFVEREkgcmVnaXN0cnkpPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dXBkYXRlLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dXBkYXRlLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0ZmRkMjUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHVwZGF0ZS5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+Ci08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiIKLSAidGFzay5kdGQiPgotPHRhc2sgaWQ9InR1cGRhdGUiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+VXBkYXRpbmcgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZTwvdGl0bGU+Ci08c2hvcnRkZXNjPkFmdGVyIHlvdSBoYXZlIHB1Ymxpc2hlZCBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UKLWludGVyZmFjZSwgeW91IGNhbiB1cGRhdGUgaXQgdGhyb3VnaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5idXNpbmVzcyBlbnRpdGllczxpbmRleHRlcm0+dXBkYXRpbmcgaW4gYSBVRERJIHJlZ2lzdHJ5PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+dXBkYXRpbmcgVURESSByZWdpc3RyaWVzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPnNlcnZpY2UgaW50ZXJmYWNlczxpbmRleHRlcm0+dXBkYXRpbmcgVURESSByZWdpc3RyaWVzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxwcmVyZXE+UHJlcmVxdWlzaXRlczo8b2w+Ci08bGk+IDx4cmVmIGhyZWY9InRwdWJlbnQuZGl0YSI+UHVibGlzaCBhIGJ1c2luZXNzIGVudGl0eTwveHJlZj4uPC9saT4KLTxsaT4gPHhyZWYgaHJlZj0idHB1Ymxpc2guZGl0YSI+UHVibGlzaCBhIFdlYiBzZXJ2aWNlPC94cmVmPi48L2xpPgotPGxpPiA8eHJlZiBocmVmPSJ0cHVibGlzaC5kaXRhIj5QdWJsaXNoIGEgc2VydmljZSBpbnRlcmZhY2U8L3hyZWY+LjwvbGk+Ci08bGk+IDx4cmVmIGhyZWY9InRzdHJ0ZXhwLmRpdGEiPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC94cmVmPi48L2xpPgotPC9vbD48L3ByZXJlcT4KLTxjb250ZXh0PlRvIHVwZGF0ZSBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlIHVzaW5nCi10aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyOjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+TmF2aWdhdGUgdGhyb3VnaCB0aGUgcmVnaXN0cnkgaGllcmFyY2h5IHRvIGZpbmQgdGhlIGJ1c2luZXNzIGVudGl0eSwKLVdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSB5b3Ugd2FudCB0byB1cGRhdGUuIFNlbGVjdCB0aGUgYnVzaW5lc3MKLWVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SW4gdGhlIEFjdGlvbnMgaWNvbiBiYXIsIGNsaWNrIHRoZSAgPHVpY29udHJvbD5EZXRhaWxzPC91aWNvbnRyb2w+IGljb24uPC9jbWQ+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPk1ha2UgYW55IG5lY2Vzc2FyeSBjaGFuZ2VzIGFuZCBlbnRlciB5b3VyIHB1Ymxpc2ggVVJMLCB5b3VyIHVzZXIKLUlELCBhbmQgcGFzc3dvcmQsIGlmIG5lY2Vzc2FyeSwgdGhlbiBjbGljayAgPHVpY29udHJvbD5HbzwvdWljb250cm9sPi48L2NtZD4KLTwvc3RlcD4KLTwvc3RlcHM+Ci08cmVzdWx0PjxwPlRoZSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSBpcyB1cGRhdGVkCi1pbiB0aGUgcmVnaXN0cnkgYW5kIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgaXMgYXV0b21hdGljYWxseSB1cGRhdGVkIHdpdGgKLXlvdXIgY2hhbmdlLjwvcD48L3Jlc3VsdD4KLTwvdGFza2JvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBDb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PiBUb29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD5XZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uL2NvbmNlcHRzL2N1ZGRpLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgVGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0idHVkZGlleHAuZGl0YSI+PC9saW5rPgotPGxpbmsgaHJlZj0idHN0cnRleHAuZGl0YSI+PC9saW5rPgotPGxpbmsgaHJlZj0idHB1YmVudC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0cHVibGlzaC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0dW5wdWIuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBSZWZlcmVuY2U8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vcmVmL3J1ZGRpLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L3Rhc2s+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dXBkYXRlLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dXBkYXRlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzMTc5NTkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHVwZGF0ZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDciIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iVXBkYXRpbmcgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJBZnRlciB5b3UgaGF2ZSBwdWJsaXNoZWQgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSwgeW91IGNhbiB1cGRhdGUgaXQgdGhyb3VnaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJBZnRlciB5b3UgaGF2ZSBwdWJsaXNoZWQgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSwgeW91IGNhbiB1cGRhdGUgaXQgdGhyb3VnaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyLiIgLz4KLTxtZXRhIGNvbnRlbnQ9ImJ1c2luZXNzIGVudGl0aWVzLCB1cGRhdGluZyBpbiBhIFVEREkgcmVnaXN0cnksIFdlYiBzZXJ2aWNlcywgdXBkYXRpbmcgVURESSByZWdpc3RyaWVzLCBzZXJ2aWNlIGludGVyZmFjZXMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJidXNpbmVzcyBlbnRpdGllcywgdXBkYXRpbmcgaW4gYSBVRERJIHJlZ2lzdHJ5LCBXZWIgc2VydmljZXMsIHVwZGF0aW5nIFVEREkgcmVnaXN0cmllcywgc2VydmljZSBpbnRlcmZhY2VzIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3VkZGkuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idHVkZGlleHAuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idHN0cnRleHAuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idHB1YmVudC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0cHVibGlzaC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0dW5wdWIuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vcmVmL3J1ZGRpLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idHVwZGF0ZSIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPlVwZGF0aW5nIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2U8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InR1cGRhdGUiPjxhIG5hbWU9InR1cGRhdGUiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPlVwZGF0aW5nIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2U8L2gxPgotCi0KLQotPGRpdj48cD5BZnRlciB5b3UgaGF2ZSBwdWJsaXNoZWQgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlCi1pbnRlcmZhY2UsIHlvdSBjYW4gdXBkYXRlIGl0IHRocm91Z2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlci48L3A+Ci0KLTxkaXYgY2xhc3M9InAiPlByZXJlcXVpc2l0ZXM6PG9sPgotPGxpPiA8YSBocmVmPSJ0cHViZW50Lmh0bWwiPlB1Ymxpc2ggYSBidXNpbmVzcyBlbnRpdHk8L2E+LjwvbGk+Ci0KLTxsaT4gPGEgaHJlZj0idHB1Ymxpc2guaHRtbCI+UHVibGlzaCBhIFdlYiBzZXJ2aWNlPC9hPi48L2xpPgotCi08bGk+IDxhIGhyZWY9InRwdWJsaXNoLmh0bWwiPlB1Ymxpc2ggYSBzZXJ2aWNlIGludGVyZmFjZTwvYT4uPC9saT4KLQotPGxpPiA8YSBocmVmPSJ0c3RydGV4cC5odG1sIj5MYXVuY2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvYT4uPC9saT4KLQotPC9vbD4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj5UbyB1cGRhdGUgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSB1c2luZwotdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlcjo8L2Rpdj4KLQotPG9sPgotPGxpPjxzcGFuPk5hdmlnYXRlIHRocm91Z2ggdGhlIHJlZ2lzdHJ5IGhpZXJhcmNoeSB0byBmaW5kIHRoZSBidXNpbmVzcyBlbnRpdHksCi1XZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UgeW91IHdhbnQgdG8gdXBkYXRlLiBTZWxlY3QgdGhlIGJ1c2luZXNzCi1lbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZS48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkluIHRoZSBBY3Rpb25zIGljb24gYmFyLCBjbGljayB0aGUgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkRldGFpbHM8L3NwYW4+IGljb24uPC9zcGFuPgotPC9saT4KLQotPGxpPjxzcGFuPk1ha2UgYW55IG5lY2Vzc2FyeSBjaGFuZ2VzIGFuZCBlbnRlciB5b3VyIHB1Ymxpc2ggVVJMLCB5b3VyIHVzZXIKLUlELCBhbmQgcGFzc3dvcmQsIGlmIG5lY2Vzc2FyeSwgdGhlbiBjbGljayAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+R288L3NwYW4+Ljwvc3Bhbj4KLTwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRoZSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSBpcyB1cGRhdGVkCi1pbiB0aGUgcmVnaXN0cnkgYW5kIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgaXMgYXV0b21hdGljYWxseSB1cGRhdGVkIHdpdGgKLXlvdXIgY2hhbmdlLjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgQ29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuaHRtbCI+IFRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuaHRtbCI+V2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jdWRkaS5odG1sIiB0aXRsZT0iVW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIGEgd2F5IHRvIHB1Ymxpc2ggYW5kIGRpc2NvdmVyIGluZm9ybWF0aW9uIGFib3V0IFdlYiBzZXJ2aWNlcy4iPlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0idHVkZGlleHAuaHRtbCIgdGl0bGU9IlRocm91Z2ggVURESSBhbmQgV1NJTCwgb3RoZXIgYXBwbGljYXRpb25zIGNhbiBkaXNjb3ZlciBXU0RMIGRvY3VtZW50cyBhbmQgYmluZCB3aXRoIHRoZW0gdG8gZXhlY3V0ZSB0cmFuc2FjdGlvbnMgb3IgcGVyZm9ybSBvdGhlciBidXNpbmVzcyBwcm9jZXNzZXMuIj5QdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXM8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRzdHJ0ZXhwLmh0bWwiIHRpdGxlPSJUaGUgV2ViIHNlcnZpY2VzIHRvb2xzIGFsbG93cyB5b3UgdG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgaW4gc2V2ZXJhbCB3YXlzLiI+TGF1bmNoaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRwdWJlbnQuaHRtbCIgdGl0bGU9IkEgYnVzaW5lc3MgZW50aXR5IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBidXNpbmVzcyB0aGF0IGhhcyBwdWJsaXNoZWQgYSBzZXJ2aWNlLsKgIEJlZm9yZSB5b3UgY2FuIHB1Ymxpc2ggYSBidXNpbmVzcyBzZXJ2aWNlLCB5b3UgbXVzdCBwdWJsaXNoIGEgYnVzaW5lc3MgZW50aXR5LiI+UHVibGlzaGluZyBhIGJ1c2luZXNzIGVudGl0eTwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idHB1Ymxpc2guaHRtbCIgdGl0bGU9IlRoZSBXZWIgc2VydmljZSwgYWxzbyBrbm93biBhcyB0aGUgYnVzaW5lc3Mgc2VydmljZSwgZGVzY3JpYmVzIGEgV2ViIHNlcnZpY2UncyBlbmRwb2ludCBhbmQgd2hlcmUgaXRzIFdTREwgZmlsZSByZXNpZGVzLiBUaGUgV1NETCBmaWxlIGxpc3RzIHRoZSBvcGVyYXRpb25zIHRoYXQgc2VydmljZSBwcm92aWRlcy4iPlB1Ymxpc2hpbmcgYSBXZWIgc2VydmljZTwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idHVucHViLmh0bWwiIHRpdGxlPSJBZnRlciB5b3UgaGF2ZSBwdWJsaXNoZWQgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSwgeW91IGNhbiByZW1vdmUgb3IgdW5wdWJsaXNoIGl0IHRocm91Z2ggdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3Jlci4iPlJlbW92aW5nIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UgZnJvbSBhIHJlZ2lzdHJ5PC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFJlZmVyZW5jZTwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL3JlZi9ydWRkaS5odG1sIiB0aXRsZT0iT25jZSB5b3UgaGF2ZSByZWdpc3RlcmVkIGFuZCBsb2dnZWQgaW4gdG8gdGhlIFVEREkgcmVnaXN0cnkgdGhhdCB5b3Ugd2FudCB0byB1c2UsIHlvdSBjYW4gcmVnaXN0ZXIgeW91ciBXZWIgc2VydmljZS4gUmVnaXN0cmF0aW9uIG9mIGEgc2VydmljZSBpbnZvbHZlcyBmb3VyIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgdHlwZXM6IGJ1c2luZXNzIGluZm9ybWF0aW9uLCBzZXJ2aWNlIGluZm9ybWF0aW9uLCBiaW5kaW5nIGluZm9ybWF0aW9uLCBhbmQgaW5mb3JtYXRpb24gZGVzY3JpYmluZyB0aGUgc3BlY2lmaWNhdGlvbnMgZm9yIHNlcnZpY2VzLiBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZGF0YSB0eXBlcyBpcyBkZXNjcmliZWQgaW4gRmlndXJlIDEuIj5EYXRhIHN0cnVjdHVyZSB0eXBlcyAoVURESSByZWdpc3RyeSk8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2RsZXhwLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90d3NkbGV4cC5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDk0Yzg5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2RsZXhwLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+Ci08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiIKLSAidGFzay5kdGQiPgotPHRhc2sgaWQ9InR3c2RsZXhwIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkV4cGxvcmluZyBXU0RMIHVzaW5nIHRoZSBXU0RMIEV4cGxvcmVyPC90aXRsZT4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0+V1NETDxpbmRleHRlcm0+ZXhwbG9yaW5nPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PGluZGV4dGVybT5XZWIKLXNlcnZpY2VzPGluZGV4dGVybT5leHBsb3JpbmcgV1NETDwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPHRhc2tib2R5PgotPHByZXJlcT5QcmVyZXF1aXNpdGVzOiBUbyB1c2UgdGhlIFdTREwgRXhwbG9yZXIsIHlvdSBtdXN0IGhhdmUgYSB2YWxpZCBVUkwKLWZvciBhIFdTREwgZG9jdW1lbnQuPC9wcmVyZXE+Ci08Y29udGV4dD5UaGUgV1NETCBFeHBsb3JlciBhbGxvd3MgeW91IHRvIGV4cGxvcmUsIGFuZCB0ZXN0IFdTREwgZG9jdW1lbnRzLgotVGhlIGZvbGxvd2luZyBhY3Rpb25zIGFyZSBhdmFpbGFibGUgaW4gdGhlIFdTREwgRXhwbG9yZXI6PHVsPgotPGxpPlNob3cgV1NETCBkZXRhaWxzOiAgPGltYWdlIGFsdD0iV1NETCBEZXRhaWxzIGljb24iIGhyZWY9Ii4uL2ltYWdlcy93c2RsZHRsaWNvbi5naWYiPgotPC9pbWFnZT48L2xpPgotPGxpPkltcG9ydCBXU0RMIHRvIHRoZSBXb3JrYmVuY2g6ICA8aW1hZ2UgYWx0PSJJbXBvcnQgV1NETCB0byB0aGUgV29ya2JlbmNoIGljb24iCi1ocmVmPSIuLi9pbWFnZXMvbXB0d3NkbGljb24uZ2lmIj48L2ltYWdlPjwvbGk+Ci08bGk+SW1wb3J0IFdTREwgdG8geW91ciBmaWxlIHN5c3RlbTogIDxpbWFnZSBhbHQ9IkltcG9ydCBXU0RMIHRvIHlvdXIgZmlsZSBzeXN0ZW0gaWNvbiIKLWhyZWY9Ii4uL2ltYWdlcy9mc3dzZGxpY29uLmdpZiI+PC9pbWFnZT48L2xpPgotPGxpPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2UgV2l6YXJkOiAgPGltYWdlIGFsdD0iTGF1bmNoIHRoZSBXZWIgU2VydmljZSBXaXphcmQgaWNvbiIKLWhyZWY9Ii4uL2ltYWdlcy93c3dpemljb24uZ2lmIj48L2ltYWdlPjwvbGk+Ci08bGk+QWRkIFdTREwgdG8gRmF2b3JpdGVzOiAgPGltYWdlIGFsdD0iQWRkIFdTREwgdG8gRmF2b3JpdGVzIGljb24iIGhyZWY9Ii4uL2ltYWdlcy93c2RsZmF2aWNvbi5naWYiPgotPC9pbWFnZT48L2xpPgotPC91bD48L2NvbnRleHQ+Ci08L3Rhc2tib2R5PgotPHRhc2sgaWQ9ImQwZTQ3IiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkxhdW5jaGluZyB0aGUgV1NETCBFeHBsb3JlcjwvdGl0bGU+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5UbyBsYXVuY2ggdGhlIFdTREwgRXhwbG9yZXIsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcgc3RlcHM6PC9wPjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+IDx4cmVmIGhyZWY9InRzdHJ0ZXhwLmRpdGEiPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC94cmVmPi48L2NtZD4KLTwvc3RlcD4KLTxzdGVwPjxjbWQ+U3dpdGNoIHRvIHRoZSBXU0RMIEV4cGxvcmVyIGJ5IGNsaWNraW5nIHRoZSBpY29uIGluIHRoZSB1cHBlciByaWdodC1oYW5kCi1jb3JuZXIgIDxpbWFnZSBhbHQ9Ikljb24gdG8gbGF1bmNoIHRoZSBXU0RMIEV4cGxvcmVyIiBocmVmPSIuLi9pbWFnZXMvd3NkbGljb24uZ2lmIj4KLTwvaW1hZ2U+LjwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08L3Rhc2tib2R5PgotPC90YXNrPgotPHRhc2sgaWQ9ImQwZTY0IiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkltcG9ydGluZyBhIFdTREwgZmlsZSB0byB5b3VyIHdvcmtzcGFjZTwvdGl0bGU+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5UbyBpbXBvcnQgdGhlIFdTREwgZmlsZSB0byB0aGUgV29ya2JlbmNoOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPkNsaWNrIHRoaXMgaWNvbjogIDxpbWFnZSBhbHQ9IkltcG9ydCBXU0RMIHRvIHRoZSBXb3JrYmVuY2ggaWNvbiIKLWhyZWY9Ii4uL2ltYWdlcy9tcHR3c2RsaWNvbi5naWYiPjwvaW1hZ2U+LjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+U2VsZWN0IHRoZSBwcm9qZWN0IGludG8gd2hpY2ggeW91IHdhbnQgdG8gaW1wb3J0IHRoZSBXU0RMLjwvY21kPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5JZiB5b3Ugd2FudCB0byBnZW5lcmF0ZSBhIFdTSUwgZmlsZSBmcm9tIHRoZSBXU0RMLCBzZWxlY3QgIDxiPkltcG9ydAotYXMgYSBzZXJ2aWNlIHJlZmVyZW5jZSB0byBhIFdTSUwgZG9jdW1lbnQ8L2I+LjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+Q2xpY2sgIDxiPkdvPC9iPi48L2NtZD48L3N0ZXA+Ci08L3N0ZXBzPgotPC90YXNrYm9keT4KLTwvdGFzaz4KLTx0YXNrIGlkPSJkMGU5MCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5JbXBvcnRpbmcgYSBXU0RMIGZpbGUgdG8geW91ciBmaWxlIHN5c3RlbTwvdGl0bGU+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5UbyBpbXBvcnQgdGhlIFdTREwgZmlsZSB0byB5b3VyIGZpbGUgc3lzdGVtLCBjbGljayB0aGlzIGljb246Ci0gPGltYWdlIGFsdD0iSW1wb3J0IFdTREwgdG8geW91ciBmaWxlIHN5c3RlbSBpY29uIiBocmVmPSIuLi9pbWFnZXMvZnN3c2RsaWNvbi5naWYiPgotPC9pbWFnZT4uIFNwZWNpZnkgd2hlcmUgeW91IHdhbnQgdGhlIFdTREwgZmlsZSBzYXZlZCBvbiB5b3VyIHN5c3RlbS48L3A+PC9jb250ZXh0PgotPC90YXNrYm9keT4KLTwvdGFzaz4KLTx0YXNrIGlkPSJkMGU5NiIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5MYXVuY2hpbmcgdGhlIFdlYiBzZXJ2aWNlcyB3aXphcmQ8L3RpdGxlPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+VG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZSBXaXphcmQsIGNsaWNrIHRoaXMgaWNvbjogIDxpbWFnZSBhbHQ9IkxhdW5jaCB0aGUgV2ViIFNlcnZpY2UgV2l6YXJkIGljb24iCi1ocmVmPSIuLi9pbWFnZXMvd3N3aXppY29uLmdpZiI+PC9pbWFnZT4uIFlvdSBjYW4gc2VsZWN0IGlmIHlvdSB3YW50IHRvIGNyZWF0ZQotYSBXZWIgc2VydmljZSBjbGllbnQgb3IgYSBTa2VsZXRvbiBXZWIgc2VydmljZSBmcm9tIHRoZSBXU0RMIGZpbGUuIENsaWNrICA8Yj5HbzwvYj4gdG8KLWxhdW5jaCB0aGUgd2l6YXJkLjwvcD48L2NvbnRleHQ+Ci08L3Rhc2tib2R5PgotPC90YXNrPgotPHRhc2sgaWQ9ImQwZTEwNSIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5BZGRpbmcgYSBXU0RMIGZpbGUgdG8geW91ciBmYXZvcml0ZXM8L3RpdGxlPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+VG8gYWRkIHRoZSBXU0RMIGZpbGUgdG8gRmF2b3JpdGVzLCBjbGljayB0aGlzIGljb246ICA8aW1hZ2UgYWx0PSJBZGQgV1NETCB0byBGYXZvcml0ZXMgaWNvbiIKLWhyZWY9Ii4uL2ltYWdlcy93c2RsZmF2aWNvbi5naWYiPjwvaW1hZ2U+PC9wPjxwPi4gVGhlIFN0YXR1cyBwYW5lIGRpc3BsYXlzCi10aGF0IHRoZSBXU0RMIHdhcyBzdWNjZXNzZnVsbHkgYWRkZWQgdG8geW91ciBsaXN0IG9mIGZhdm9yaXRlcy4gPC9wPjwvY29udGV4dD4KLTwvdGFza2JvZHk+Ci08L3Rhc2s+Ci08dGFzayBpZD0iZDBlMTEwIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkV4cGxvcmluZyBXU0RMIGRvY3VtZW50cyB1c2luZyB0aGUgV1NETCBFeHBsb3Jlcjo8L3RpdGxlPgotPHRhc2tib2R5PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5TZWxlY3QgV1NETCBNYWluIGluIHRoZSBOYXZpZ2F0b3IgcGFuZSwgZW50ZXIgb3IgYnJvd3NlIHRvIGFuIGV4aXN0aW5nCi1XU0RMIFVSTCBpbiB0aGUgcmlnaHQtaGFuZCBwYW5lLCBhbmQgY2xpY2sgIDxiPkdvPC9iPi4gTm90ZSB0aGF0IHRoZSBFeHBsb3Jlcgotd2lsbCBvbmx5IGFsbG93IHlvdSB0byBicm93c2UgZm9yIFdTREwgZmlsZXMgdGhhdCByZXNpZGUgaW4gdGhlIDxjb2RlcGg+V2ViQ29udGVudC9XU0RMPC9jb2RlcGg+IGZvbGRlcgotb2YgYSBwcm9qZWN0LiBUbyBleHBsb3JlIFdTREwgZmlsZXMgc3RvcmVkIGluIG90aGVyIGxvY2F0aW9ucyB3aXRoaW4geW91cgotd29ya3NwYWNlLCB0eXBlIHRoZSBuYW1lIG9mIHRoZSBXU0RMIGZpbGUgb3Igc2VsZWN0IHRoZSBmaWxlIGluIHRoZSB3b3Jrc3BhY2UsCi1yaWdodC1jbGljayBhbmQgc2VsZWN0IDxtZW51Y2FzY2FkZT48dWljb250cm9sPldlYiBTZXJ2aWNlcyA8L3VpY29udHJvbD48dWljb250cm9sPiBMYXVuY2gKLVdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvdWljb250cm9sPjwvbWVudWNhc2NhZGU+LiBGb3IgdGhpcyBleGFtcGxlIHRoZSBXU0RMCi1iZWluZyB1c2VkIGlzIGEgV2ViIFNlcnZpY2Ugd2hpY2ggcmV0dXJucyBhIHRlbXBlcmF0dXJlIGZvciBhbnkgZW50ZXJlZCB6aXAKLWNvZGUuICAgPGltYWdlIGFsdD0iIiBocmVmPSIuLi9pbWFnZXMvd3NkbGV4cC5naWYiIHBsYWNlbWVudD0iYnJlYWsiPjwvaW1hZ2U+IAotVGhlIGZvbGxvd2luZyBub2RlcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBXU0RMIHRyZWU6IDwvY21kPjxpbmZvPjx1bD4KLTxsaT5UaGUgV1NETCBub2RlOiAgPGltYWdlIGFsdD0iV1NETCBub2RlIGljb24iIGhyZWY9Ii4uL2ltYWdlcy93c2Rsbm9kZS5naWYiPgotPC9pbWFnZT48L2xpPgotPGxpPlRoZSBzZXJ2aWNlIG5vZGUgKHdoaWNoIHJlcHJlc2VudHMgYSBzZXJ2aWNlIGVsZW1lbnQgd2l0aGluIHRoZSBXU0RMIGZpbGUpOgotIDxpbWFnZSBhbHQ9IlNlcnZpY2Ugbm9kZSBpY29uIiBocmVmPSIuLi9pbWFnZXMvc2Vydm5vZGUuZ2lmIj48L2ltYWdlPjwvbGk+Ci08bGk+VGhlIGJpbmRpbmcgbm9kZTogIDxpbWFnZSBhbHQ9IkJpbmRpbmcgbm9kZSBpY29uIiBocmVmPSIuLi9pbWFnZXMvYmluZG5vZGUuZ2lmIj4KLTwvaW1hZ2U+PC9saT4KLTxsaT5UaGUgb3BlcmF0aW9uIG5vZGU6ICA8aW1hZ2UgYWx0PSJPcGVyYXRpb24gbm9kZSBpY29uIiBocmVmPSIuLi9pbWFnZXMvb3Bub2RlLmdpZiI+Ci08L2ltYWdlPjwvbGk+Ci08L3VsPjwvaW5mbz48L3N0ZXA+Ci08c3RlcD48Y21kPkNsaWNraW5nIHRoZSBTZXJ2aWNlIG5vZGUgaW4gdGhlIE5hdmlnYXRvciBwYW5lIChpbiB0aGlzIGV4YW1wbGUKLXRoaXMgd291bGQgYmUgdGhlICA8c3lzdGVtb3V0cHV0PlRlbXBlcmF0dXJlU2VydmljZTwvc3lzdGVtb3V0cHV0PiBub2RlKSBkaXNwbGF5cwotYWxsIHRoZSBiaW5kaW5ncyBmb3IgdGhpcyBzZXJ2aWNlLCBhcyB3ZWxsIGFzIHRoZWlyIHR5cGUgYW5kIGEgYnJpZWYgZGVzY3JpcHRpb24KLW9mIHRoZSBiaW5kaW5nIGlmIHRoZSBXU0RMIHByb3ZpZGVyIGhhcyBpbmNsdWRlZCBvbmUgaW4gdGhlIEFjdGlvbnMgcGFuZS4KLVRocmVlIHR5cGVzIG9mIGJpbmRpbmdzIGFyZSBzdXBwb3J0ZWQ6IFNPQVAsIEhUVFAgR2V0LCBhbmQgSFRUUCBQb3N0LiAgIDxpbWFnZQotYWx0PSIiIGhyZWY9Ii4uL2ltYWdlcy93c2Rsc2VydmRldC5naWYiIHBsYWNlbWVudD0iYnJlYWsiPjwvaW1hZ2U+ICBUaGUgV1NETAotdXNlZCBpbiB0aGlzIGV4YW1wbGUgb25seSBoYXMgb25lIGJpbmRpbmcsICA8c3lzdGVtb3V0cHV0PlRlbXBlcmF0dXJlQmluZGluZzwvc3lzdGVtb3V0cHV0PiwKLXdoaWNoIGlzIHJlcHJlc2VudGVkIGFzIHRoZSAgPHN5c3RlbW91dHB1dD5UZW1wZXJhdHVyZVBvcnRUeXBlPC9zeXN0ZW1vdXRwdXQ+IG5vZGUKLWluIHRoZSBXU0RMIHRyZWUgaW4gdGhlIE5hdmlnYXRvciBwYW5lLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+Q2xpY2tpbmcgYSBkaXNwbGF5ZWQgYmluZGluZyBvciBpdHMgbm9kZSBkaXNwbGF5cyB0aGUgV1NETCBiaW5kaW5nCi1kZXRhaWxzIGluIHRoZSBBY3Rpb25zIHBhbmUuIFRoaXMgaW5jbHVkZXMgdGhlIG9wZXJhdGlvbnMgYW5kIGVuZHBvaW50cyBhdmFpbGFibGUKLWZvciB0aGlzIHNlcnZpY2UuICAgPGltYWdlIGFsdD0iIiBocmVmPSIuLi9pbWFnZXMvd3NkbGJuZGRldGwuZ2lmIiBwbGFjZW1lbnQ9ImJyZWFrIj4KLTwvaW1hZ2U+ICBJbiB0aGlzIHZpZXcgeW91IGNhbiBhZGQgb3IgcmVtb3ZlIGVuZHBvaW50cyBmb3IgdGhlIHNlcnZpY2UuIFRvCi1hZGQgYW4gZW5kcG9pbnQsIGNsaWNrICA8Yj5BZGQ8L2I+LCBlbnRlciB0aGUgVVJMIGZvciB0aGUgZW5kcG9pbnQsIGFuZCBjbGljawotIDxiPkdvPC9iPi4gVGhlIFN0YXR1cyBwYW5lIHNob3VsZCBzYXkgdGhhdCB0aGUgZW5kcG9pbnRzIHdlcmUgc3VjY2Vzc2Z1bGx5Ci11cGRhdGVkLiBUbyByZW1vdmUgYW4gZW5kcG9pbnQsIHNlbGVjdCBpdHMgY2hlY2tib3gsIGFuZCBjbGljayAgPGI+UmVtb3ZlPC9iPi48L2NtZD4KLTwvc3RlcD4KLTwvc3RlcHM+Ci08cG9zdHJlcT48bm90ZT48ZHJhZnQtY29tbWVudD4yODI0MTMgKHJlZiAyNzkyMDkpPC9kcmFmdC1jb21tZW50PldoZW4gdGhlCi1XZWIgU2VydmljZXMgRXhwbG9yZXIgbG9hZHMgV1NETCBmaWxlcyB0aGF0IHVzZSBtdWx0aXBsZSBpbmxpbmUgc2NoZW1hcywgd2FybmluZwotbWVzc2FnZXMgd2lsbCBiZSBnZW5lcmF0ZWQgZm9yIHR5cGVzIHRoYXQgYXJlIHJlZmVyZW5jZWQgYWNyb3NzIHRoZXNlIHNjaGVtYXMuCi1UaGUgd2FybmluZyBtZXNzYWdlIHdpbGwgYmUgc2ltaWxhciB0bzogPGNvZGVwaD5SZWZlcmVuY2Ugb2YgdHlwZSAmbHQ7PGk+cXVhbGlmaWVkX3R5cGVfbmFtZTwvaT4+Ci1pc24ndCByZXNvbHZlZC48L2NvZGVwaD48L25vdGU+PC9wb3N0cmVxPgotPC90YXNrYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PldlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vY29uY2VwdHMvY3VkZGkuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+Ci08bGluayBocmVmPSJ0dWRkaWV4cC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJ0c3RydGV4cC5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdG92ZXJ3cy5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+IERldmVsb3BpbmcgV2ViIHNlcnZpY2VzPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgotPC90YXNrPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHdzZGxleHAuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2RsZXhwLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4ZDM5ZTEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHdzZGxleHAuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIwMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwNyIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJFeHBsb3JpbmcgV1NETCB1c2luZyB0aGUgV1NETCBFeHBsb3JlciIgLz4KLTxtZXRhIGNvbnRlbnQ9IldTREwsIGV4cGxvcmluZywgV2ViIHNlcnZpY2VzLCBleHBsb3JpbmcgV1NETCIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IldTREwsIGV4cGxvcmluZywgV2ViIHNlcnZpY2VzLCBleHBsb3JpbmcgV1NETCIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idHdzZGxleHAiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5FeHBsb3JpbmcgV1NETCB1c2luZyB0aGUgV1NETCBFeHBsb3JlcjwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idHdzZGxleHAiPjxhIG5hbWU9InR3c2RsZXhwIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5FeHBsb3JpbmcgV1NETCB1c2luZyB0aGUgV1NETCBFeHBsb3JlcjwvaDE+Ci0KLQotPGRpdj4KLTxkaXYgY2xhc3M9InAiPlByZXJlcXVpc2l0ZXM6IFRvIHVzZSB0aGUgV1NETCBFeHBsb3JlciwgeW91IG11c3QgaGF2ZSBhIHZhbGlkIFVSTAotZm9yIGEgV1NETCBkb2N1bWVudC48L2Rpdj4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+VGhlIFdTREwgRXhwbG9yZXIgYWxsb3dzIHlvdSB0byBleHBsb3JlLCBhbmQgdGVzdCBXU0RMIGRvY3VtZW50cy4KLVRoZSBmb2xsb3dpbmcgYWN0aW9ucyBhcmUgYXZhaWxhYmxlIGluIHRoZSBXU0RMIEV4cGxvcmVyOjx1bD4KLTxsaT5TaG93IFdTREwgZGV0YWlsczogIDxpbWcgc3JjPSIuLi9pbWFnZXMvd3NkbGR0bGljb24uZ2lmIiBhbHQ9IldTREwgRGV0YWlscyBpY29uIiAvPjwvbGk+Ci0KLTxsaT5JbXBvcnQgV1NETCB0byB0aGUgV29ya2JlbmNoOiAgPGltZyBzcmM9Ii4uL2ltYWdlcy9tcHR3c2RsaWNvbi5naWYiIGFsdD0iSW1wb3J0IFdTREwgdG8gdGhlIFdvcmtiZW5jaCBpY29uIiAvPjwvbGk+Ci0KLTxsaT5JbXBvcnQgV1NETCB0byB5b3VyIGZpbGUgc3lzdGVtOiAgPGltZyBzcmM9Ii4uL2ltYWdlcy9mc3dzZGxpY29uLmdpZiIgYWx0PSJJbXBvcnQgV1NETCB0byB5b3VyIGZpbGUgc3lzdGVtIGljb24iIC8+PC9saT4KLQotPGxpPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2UgV2l6YXJkOiAgPGltZyBzcmM9Ii4uL2ltYWdlcy93c3dpemljb24uZ2lmIiBhbHQ9IkxhdW5jaCB0aGUgV2ViIFNlcnZpY2UgV2l6YXJkIGljb24iIC8+PC9saT4KLQotPGxpPkFkZCBXU0RMIHRvIEZhdm9yaXRlczogIDxpbWcgc3JjPSIuLi9pbWFnZXMvd3NkbGZhdmljb24uZ2lmIiBhbHQ9IkFkZCBXU0RMIHRvIEZhdm9yaXRlcyBpY29uIiAvPjwvbGk+Ci0KLTwvdWw+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9Im5lc3RlZDEiIHhtbDpsYW5nPSJlbi11cyIgaWQ9ImQwZTQ3Ij48YSBuYW1lPSJkMGU0NyI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj5MYXVuY2hpbmcgdGhlIFdTREwgRXhwbG9yZXI8L2gyPgotCi08ZGl2PgotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VG8gbGF1bmNoIHRoZSBXU0RMIEV4cGxvcmVyLCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGk+PHNwYW4+IDxhIGhyZWY9InRzdHJ0ZXhwLmh0bWwiPkxhdW5jaCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9hPi48L3NwYW4+Ci08L2xpPgotCi08bGk+PHNwYW4+U3dpdGNoIHRvIHRoZSBXU0RMIEV4cGxvcmVyIGJ5IGNsaWNraW5nIHRoZSBpY29uIGluIHRoZSB1cHBlciByaWdodC1oYW5kCi1jb3JuZXIgIDxpbWcgc3JjPSIuLi9pbWFnZXMvd3NkbGljb24uZ2lmIiBhbHQ9Ikljb24gdG8gbGF1bmNoIHRoZSBXU0RMIEV4cGxvcmVyIiAvPi48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJuZXN0ZWQxIiB4bWw6bGFuZz0iZW4tdXMiIGlkPSJkMGU2NCI+PGEgbmFtZT0iZDBlNjQiPjwhLS0gLS0+PC9hPgotPGgyIGNsYXNzPSJ0b3BpY3RpdGxlMiI+SW1wb3J0aW5nIGEgV1NETCBmaWxlIHRvIHlvdXIgd29ya3NwYWNlPC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRvIGltcG9ydCB0aGUgV1NETCBmaWxlIHRvIHRoZSBXb3JrYmVuY2g6PC9wPgotPC9kaXY+Ci0KLTxvbD4KLTxsaT48c3Bhbj5DbGljayB0aGlzIGljb246ICA8aW1nIHNyYz0iLi4vaW1hZ2VzL21wdHdzZGxpY29uLmdpZiIgYWx0PSJJbXBvcnQgV1NETCB0byB0aGUgV29ya2JlbmNoIGljb24iIC8+Ljwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+U2VsZWN0IHRoZSBwcm9qZWN0IGludG8gd2hpY2ggeW91IHdhbnQgdG8gaW1wb3J0IHRoZSBXU0RMLjwvc3Bhbj4KLTwvbGk+Ci0KLTxsaT48c3Bhbj5JZiB5b3Ugd2FudCB0byBnZW5lcmF0ZSBhIFdTSUwgZmlsZSBmcm9tIHRoZSBXU0RMLCBzZWxlY3QgIDxzdHJvbmc+SW1wb3J0Ci1hcyBhIHNlcnZpY2UgcmVmZXJlbmNlIHRvIGEgV1NJTCBkb2N1bWVudDwvc3Ryb25nPi48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkNsaWNrICA8c3Ryb25nPkdvPC9zdHJvbmc+Ljwvc3Bhbj48L2xpPgotCi08L29sPgotCi08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9Im5lc3RlZDEiIHhtbDpsYW5nPSJlbi11cyIgaWQ9ImQwZTkwIj48YSBuYW1lPSJkMGU5MCI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj5JbXBvcnRpbmcgYSBXU0RMIGZpbGUgdG8geW91ciBmaWxlIHN5c3RlbTwvaDI+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UbyBpbXBvcnQgdGhlIFdTREwgZmlsZSB0byB5b3VyIGZpbGUgc3lzdGVtLCBjbGljayB0aGlzIGljb246Ci0gPGltZyBzcmM9Ii4uL2ltYWdlcy9mc3dzZGxpY29uLmdpZiIgYWx0PSJJbXBvcnQgV1NETCB0byB5b3VyIGZpbGUgc3lzdGVtIGljb24iIC8+LiBTcGVjaWZ5IHdoZXJlIHlvdSB3YW50IHRoZSBXU0RMIGZpbGUgc2F2ZWQgb24geW91ciBzeXN0ZW0uPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibmVzdGVkMSIgeG1sOmxhbmc9ImVuLXVzIiBpZD0iZDBlOTYiPjxhIG5hbWU9ImQwZTk2Ij48IS0tIC0tPjwvYT4KLTxoMiBjbGFzcz0idG9waWN0aXRsZTIiPkxhdW5jaGluZyB0aGUgV2ViIHNlcnZpY2VzIHdpemFyZDwvaDI+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UbyBsYXVuY2ggdGhlIFdlYiBTZXJ2aWNlIFdpemFyZCwgY2xpY2sgdGhpcyBpY29uOiAgPGltZyBzcmM9Ii4uL2ltYWdlcy93c3dpemljb24uZ2lmIiBhbHQ9IkxhdW5jaCB0aGUgV2ViIFNlcnZpY2UgV2l6YXJkIGljb24iIC8+LiBZb3UgY2FuIHNlbGVjdCBpZiB5b3Ugd2FudCB0byBjcmVhdGUKLWEgV2ViIHNlcnZpY2UgY2xpZW50IG9yIGEgU2tlbGV0b24gV2ViIHNlcnZpY2UgZnJvbSB0aGUgV1NETCBmaWxlLiBDbGljayAgPHN0cm9uZz5Hbzwvc3Ryb25nPiB0bwotbGF1bmNoIHRoZSB3aXphcmQuPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibmVzdGVkMSIgeG1sOmxhbmc9ImVuLXVzIiBpZD0iZDBlMTA1Ij48YSBuYW1lPSJkMGUxMDUiPjwhLS0gLS0+PC9hPgotPGgyIGNsYXNzPSJ0b3BpY3RpdGxlMiI+QWRkaW5nIGEgV1NETCBmaWxlIHRvIHlvdXIgZmF2b3JpdGVzPC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRvIGFkZCB0aGUgV1NETCBmaWxlIHRvIEZhdm9yaXRlcywgY2xpY2sgdGhpcyBpY29uOiAgPGltZyBzcmM9Ii4uL2ltYWdlcy93c2RsZmF2aWNvbi5naWYiIGFsdD0iQWRkIFdTREwgdG8gRmF2b3JpdGVzIGljb24iIC8+PC9wPgotPHA+LiBUaGUgU3RhdHVzIHBhbmUgZGlzcGxheXMKLXRoYXQgdGhlIFdTREwgd2FzIHN1Y2Nlc3NmdWxseSBhZGRlZCB0byB5b3VyIGxpc3Qgb2YgZmF2b3JpdGVzLiA8L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJuZXN0ZWQxIiB4bWw6bGFuZz0iZW4tdXMiIGlkPSJkMGUxMTAiPjxhIG5hbWU9ImQwZTExMCI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj5FeHBsb3JpbmcgV1NETCBkb2N1bWVudHMgdXNpbmcgdGhlIFdTREwgRXhwbG9yZXI6PC9oMj4KLQotPGRpdj4KLTxvbD4KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+U2VsZWN0IFdTREwgTWFpbiBpbiB0aGUgTmF2aWdhdG9yIHBhbmUsIGVudGVyIG9yIGJyb3dzZSB0byBhbiBleGlzdGluZwotV1NETCBVUkwgaW4gdGhlIHJpZ2h0LWhhbmQgcGFuZSwgYW5kIGNsaWNrICA8c3Ryb25nPkdvPC9zdHJvbmc+LiBOb3RlIHRoYXQgdGhlIEV4cGxvcmVyCi13aWxsIG9ubHkgYWxsb3cgeW91IHRvIGJyb3dzZSBmb3IgV1NETCBmaWxlcyB0aGF0IHJlc2lkZSBpbiB0aGUgPHNhbXAgY2xhc3M9ImNvZGVwaCI+V2ViQ29udGVudC9XU0RMPC9zYW1wPiBmb2xkZXIKLW9mIGEgcHJvamVjdC4gVG8gZXhwbG9yZSBXU0RMIGZpbGVzIHN0b3JlZCBpbiBvdGhlciBsb2NhdGlvbnMgd2l0aGluIHlvdXIKLXdvcmtzcGFjZSwgdHlwZSB0aGUgbmFtZSBvZiB0aGUgV1NETCBmaWxlIG9yIHNlbGVjdCB0aGUgZmlsZSBpbiB0aGUgd29ya3NwYWNlLAotcmlnaHQtY2xpY2sgYW5kIHNlbGVjdCA8c3BhbiBjbGFzcz0ibWVudWNhc2NhZGUiPjxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPldlYiBTZXJ2aWNlcyA8L3NwYW4+ICZndDsgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+IExhdW5jaAotV2ViIFNlcnZpY2VzIEV4cGxvcmVyPC9zcGFuPjwvc3Bhbj4uIEZvciB0aGlzIGV4YW1wbGUgdGhlIFdTREwKLWJlaW5nIHVzZWQgaXMgYSBXZWIgU2VydmljZSB3aGljaCByZXR1cm5zIGEgdGVtcGVyYXR1cmUgZm9yIGFueSBlbnRlcmVkIHppcAotY29kZS4gICA8YnIgLz48aW1nIHNyYz0iLi4vaW1hZ2VzL3dzZGxleHAuZ2lmIiBhbHQ9IiIgLz48YnIgLz4gCi1UaGUgZm9sbG93aW5nIG5vZGVzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIFdTREwgdHJlZTogPC9zcGFuPiA8dWw+Ci08bGk+VGhlIFdTREwgbm9kZTogIDxpbWcgc3JjPSIuLi9pbWFnZXMvd3NkbG5vZGUuZ2lmIiBhbHQ9IldTREwgbm9kZSBpY29uIiAvPjwvbGk+Ci0KLTxsaT5UaGUgc2VydmljZSBub2RlICh3aGljaCByZXByZXNlbnRzIGEgc2VydmljZSBlbGVtZW50IHdpdGhpbiB0aGUgV1NETCBmaWxlKToKLSA8aW1nIHNyYz0iLi4vaW1hZ2VzL3NlcnZub2RlLmdpZiIgYWx0PSJTZXJ2aWNlIG5vZGUgaWNvbiIgLz48L2xpPgotCi08bGk+VGhlIGJpbmRpbmcgbm9kZTogIDxpbWcgc3JjPSIuLi9pbWFnZXMvYmluZG5vZGUuZ2lmIiBhbHQ9IkJpbmRpbmcgbm9kZSBpY29uIiAvPjwvbGk+Ci0KLTxsaT5UaGUgb3BlcmF0aW9uIG5vZGU6ICA8aW1nIHNyYz0iLi4vaW1hZ2VzL29wbm9kZS5naWYiIGFsdD0iT3BlcmF0aW9uIG5vZGUgaWNvbiIgLz48L2xpPgotCi08L3VsPgotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5DbGlja2luZyB0aGUgU2VydmljZSBub2RlIGluIHRoZSBOYXZpZ2F0b3IgcGFuZSAoaW4gdGhpcyBleGFtcGxlCi10aGlzIHdvdWxkIGJlIHRoZSAgPHR0IGNsYXNzPSJzeXNvdXQiPlRlbXBlcmF0dXJlU2VydmljZTwvdHQ+IG5vZGUpIGRpc3BsYXlzCi1hbGwgdGhlIGJpbmRpbmdzIGZvciB0aGlzIHNlcnZpY2UsIGFzIHdlbGwgYXMgdGhlaXIgdHlwZSBhbmQgYSBicmllZiBkZXNjcmlwdGlvbgotb2YgdGhlIGJpbmRpbmcgaWYgdGhlIFdTREwgcHJvdmlkZXIgaGFzIGluY2x1ZGVkIG9uZSBpbiB0aGUgQWN0aW9ucyBwYW5lLgotVGhyZWUgdHlwZXMgb2YgYmluZGluZ3MgYXJlIHN1cHBvcnRlZDogU09BUCwgSFRUUCBHZXQsIGFuZCBIVFRQIFBvc3QuICAgPGJyIC8+PGltZyBzcmM9Ii4uL2ltYWdlcy93c2Rsc2VydmRldC5naWYiIGFsdD0iIiAvPjxiciAvPiAgVGhlIFdTREwKLXVzZWQgaW4gdGhpcyBleGFtcGxlIG9ubHkgaGFzIG9uZSBiaW5kaW5nLCAgPHR0IGNsYXNzPSJzeXNvdXQiPlRlbXBlcmF0dXJlQmluZGluZzwvdHQ+LAotd2hpY2ggaXMgcmVwcmVzZW50ZWQgYXMgdGhlICA8dHQgY2xhc3M9InN5c291dCI+VGVtcGVyYXR1cmVQb3J0VHlwZTwvdHQ+IG5vZGUKLWluIHRoZSBXU0RMIHRyZWUgaW4gdGhlIE5hdmlnYXRvciBwYW5lLjwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkNsaWNraW5nIGEgZGlzcGxheWVkIGJpbmRpbmcgb3IgaXRzIG5vZGUgZGlzcGxheXMgdGhlIFdTREwgYmluZGluZwotZGV0YWlscyBpbiB0aGUgQWN0aW9ucyBwYW5lLiBUaGlzIGluY2x1ZGVzIHRoZSBvcGVyYXRpb25zIGFuZCBlbmRwb2ludHMgYXZhaWxhYmxlCi1mb3IgdGhpcyBzZXJ2aWNlLiAgIDxiciAvPjxpbWcgc3JjPSIuLi9pbWFnZXMvd3NkbGJuZGRldGwuZ2lmIiBhbHQ9IiIgLz48YnIgLz4gIEluIHRoaXMgdmlldyB5b3UgY2FuIGFkZCBvciByZW1vdmUgZW5kcG9pbnRzIGZvciB0aGUgc2VydmljZS4gVG8KLWFkZCBhbiBlbmRwb2ludCwgY2xpY2sgIDxzdHJvbmc+QWRkPC9zdHJvbmc+LCBlbnRlciB0aGUgVVJMIGZvciB0aGUgZW5kcG9pbnQsIGFuZCBjbGljawotIDxzdHJvbmc+R288L3N0cm9uZz4uIFRoZSBTdGF0dXMgcGFuZSBzaG91bGQgc2F5IHRoYXQgdGhlIGVuZHBvaW50cyB3ZXJlIHN1Y2Nlc3NmdWxseQotdXBkYXRlZC4gVG8gcmVtb3ZlIGFuIGVuZHBvaW50LCBzZWxlY3QgaXRzIGNoZWNrYm94LCBhbmQgY2xpY2sgIDxzdHJvbmc+UmVtb3ZlPC9zdHJvbmc+Ljwvc3Bhbj4KLTwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxkaXYgY2xhc3M9Im5vdGUiPjxzcGFuIGNsYXNzPSJub3RldGl0bGUiPk5vdGU6PC9zcGFuPiBXaGVuIHRoZQotV2ViIFNlcnZpY2VzIEV4cGxvcmVyIGxvYWRzIFdTREwgZmlsZXMgdGhhdCB1c2UgbXVsdGlwbGUgaW5saW5lIHNjaGVtYXMsIHdhcm5pbmcKLW1lc3NhZ2VzIHdpbGwgYmUgZ2VuZXJhdGVkIGZvciB0eXBlcyB0aGF0IGFyZSByZWZlcmVuY2VkIGFjcm9zcyB0aGVzZSBzY2hlbWFzLgotVGhlIHdhcm5pbmcgbWVzc2FnZSB3aWxsIGJlIHNpbWlsYXIgdG86IDxzYW1wIGNsYXNzPSJjb2RlcGgiPlJlZmVyZW5jZSBvZiB0eXBlICZsdDs8ZW0+cXVhbGlmaWVkX3R5cGVfbmFtZTwvZW0+Jmd0OwotaXNuJ3QgcmVzb2x2ZWQuPC9zYW1wPjwvZGl2PgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuaHRtbCI+V2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jdWRkaS5odG1sIiB0aXRsZT0iVW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIGEgd2F5IHRvIHB1Ymxpc2ggYW5kIGRpc2NvdmVyIGluZm9ybWF0aW9uIGFib3V0IFdlYiBzZXJ2aWNlcy4iPlVuaXZlcnNhbCBEZXNjcmlwdGlvbiwgRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0idHVkZGlleHAuaHRtbCIgdGl0bGU9IlRocm91Z2ggVURESSBhbmQgV1NJTCwgb3RoZXIgYXBwbGljYXRpb25zIGNhbiBkaXNjb3ZlciBXU0RMIGRvY3VtZW50cyBhbmQgYmluZCB3aXRoIHRoZW0gdG8gZXhlY3V0ZSB0cmFuc2FjdGlvbnMgb3IgcGVyZm9ybSBvdGhlciBidXNpbmVzcyBwcm9jZXNzZXMuIj5QdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXM8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRzdHJ0ZXhwLmh0bWwiIHRpdGxlPSJUaGUgV2ViIHNlcnZpY2VzIHRvb2xzIGFsbG93cyB5b3UgdG8gbGF1bmNoIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgaW4gc2V2ZXJhbCB3YXlzLiI+TGF1bmNoaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90b3ZlcndzLmh0bWwiPiBEZXZlbG9waW5nIFdlYiBzZXJ2aWNlczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci0KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3dzY29uc3VtcHRpb25idWlsZF90b2MuZGl0YW1hcCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3dzY29uc3VtcHRpb25idWlsZF90b2MuZGl0YW1hcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA5MmMyYy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci93c2NvbnN1bXB0aW9uYnVpbGRfdG9jLmRpdGFtYXAKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSBtYXAgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgTWFwLy9FTiIKLSAibWFwLmR0ZCI+Ci08bWFwIGFuY2hvcnJlZj0iLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3dlYnNlcnZpY2VfdG9jLmRpdGFtYXAjd3Njb25zdW1wdGlvbnQiCi10aXRsZT0id3Njb25zdW1wdGlvbnQiPgotPHRvcGljcmVmIGhyZWY9ImNvbmNlcHRzL2N1ZGRpLmRpdGEiIG5hdnRpdGxlPSJVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSI+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9ImNvbmNlcHRzL2N3c2RsdWQuZGl0YSIgbmF2dGl0bGU9IlJlbGF0aW9uc2hpcCBiZXR3ZWVuIFVEREkgYW5kIFdTREwiPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90ZGlzY292LmRpdGEiIG5hdnRpdGxlPSJEaXNjb3ZlcmluZyBhbmQgaW1wb3J0aW5nIGEgV2ViIHNlcnZpY2UiPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90d3NkbGV4cC5kaXRhIiBuYXZ0aXRsZT0iRXhwbG9yaW5nIGFuZCB0ZXN0aW5nIFdTREwgdXNpbmcgdGhlIFdTREwgRXhwbG9yZXIiPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90dGVzdHdzZGwuZGl0YSIgbmF2dGl0bGU9IlRlc3RpbmcgV1NETCBkb2N1bWVudHMgYW5kIFdlYiBzZXJ2aWNlcyB3aXRoIHRoZSBXU0RMIEV4cGxvcmVyIj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdHVkZGlleHAuZGl0YSIgbmF2dGl0bGU9IlB1Ymxpc2hpbmcgV2ViIHNlcnZpY2VzIGFuZCBidXNpbmVzcyBlbnRpdGllcyI+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdHN0cnRleHAuZGl0YSIgbmF2dGl0bGU9IkxhdW5jaGluZyB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdHJlZy5kaXRhIiBuYXZ0aXRsZT0iUmVnaXN0ZXJpbmcgd2l0aCBhIHJlZ2lzdHJ5Ij48L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3Rsb2dleHAuZGl0YSIgbmF2dGl0bGU9IkxvZ2dpbmcgaW50byBhIHJlZ2lzdHJ5Ij48L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3RhZGRyZWcuZGl0YSIgbmF2dGl0bGU9IkFkZGluZyBhIFJlZ2lzdHJ5IHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIiPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90cHViZW50LmRpdGEiIG5hdnRpdGxlPSJQdWJsaXNoaW5nIGEgYnVzaW5lc3MgZW50aXR5Ij4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdHB1Ymxpc2guZGl0YSIgbmF2dGl0bGU9IlB1Ymxpc2hpbmcgYSBXZWIgc2VydmljZSI+Ci08dG9waWNyZWYgaHJlZj0icmVmL3J1ZGRpLmRpdGEiIG5hdnRpdGxlPSJEYXRhIHN0cnVjdHVyZSB0eXBlcyAoVURESSByZWdpc3RyeSkiPgotPC90b3BpY3JlZj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdHVwZGF0ZS5kaXRhIiBuYXZ0aXRsZT0iVXBkYXRpbmcgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSI+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3R1bnB1Yi5kaXRhIiBuYXZ0aXRsZT0iUmVtb3ZpbmcgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSBmcm9tIGEgcmVnaXN0cnkiPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90YnVzcHJvai5kaXRhIiBuYXZ0aXRsZT0iTWFuYWdpbmcgcmVmZXJlbmNlZCBzZXJ2aWNlcyI+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3Rhc3NlcnQuZGl0YSIgbmF2dGl0bGU9Ik1hbmFnaW5nIHB1Ymxpc2hlciBhc3NlcnRpb25zIj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdGJrbXJrLmRpdGEiIG5hdnRpdGxlPSJBZGRpbmcgdG8gRmF2b3JpdGVzIj48L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3RnZW53c2lsLmRpdGEiIG5hdnRpdGxlPSJHZW5lcmF0aW5nIFdTSUwiPjwvdG9waWNyZWY+Ci08L3RvcGljcmVmPgotPC9tYXA+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci93c2NvbnN1bXB0aW9uYnVpbGRfdG9jLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3dzY29uc3VtcHRpb25idWlsZF90b2MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDU3NDBlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3dzY29uc3VtcHRpb25idWlsZF90b2MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotPD9OTFMgVFlQRT0ib3JnLmVjbGlwc2UuaGVscC50b2MiPz4KLQotPHRvYyBsaW5rX3RvPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvd2Vic2VydmljZV90b2MueG1sI3dzY29uc3VtcHRpb250IiBsYWJlbD0id3Njb25zdW1wdGlvbnQiIHRvcGljPSJjb25jZXB0cy9jdWRkaS5odG1sIj4KLTx0b3BpYyBsYWJlbD0iVW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkiIGhyZWY9ImNvbmNlcHRzL2N1ZGRpLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iUmVsYXRpb25zaGlwIGJldHdlZW4gVURESSBhbmQgV1NETCIgaHJlZj0iY29uY2VwdHMvY3dzZGx1ZC5odG1sIi8+Ci08dG9waWMgbGFiZWw9IkRpc2NvdmVyaW5nIFdlYiBTZXJ2aWNlcyIgaHJlZj0idGFza3MvdGRpc2Nvdi5odG1sIi8+Ci08dG9waWMgbGFiZWw9IkV4cGxvcmluZyBXU0RMIHVzaW5nIHRoZSBXU0RMIEV4cGxvcmVyIiBocmVmPSJ0YXNrcy90d3NkbGV4cC5odG1sIi8+Ci08dG9waWMgbGFiZWw9IlRlc3RpbmcgV1NETCBkb2N1bWVudHMgYW5kIFdlYiBzZXJ2aWNlcyB1c2luZyB0aGUgV1NETCBFeHBsb3JlciIgaHJlZj0idGFza3MvdHRlc3R3c2RsLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iUHVibGlzaGluZyBXZWIgc2VydmljZXMgYW5kIGJ1c2luZXNzIGVudGl0aWVzIiBocmVmPSJ0YXNrcy90dWRkaWV4cC5odG1sIj4KLTx0b3BpYyBsYWJlbD0iTGF1bmNoaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIiIGhyZWY9InRhc2tzL3RzdHJ0ZXhwLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iUmVnaXN0ZXJpbmcgd2l0aCBhIFVEREkgcmVnaXN0cnkiIGhyZWY9InRhc2tzL3RyZWcuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJMb2dnaW5nIGluIHRvIGEgVURESSByZWdpc3RyeSIgaHJlZj0idGFza3MvdGxvZ2V4cC5odG1sIi8+Ci08dG9waWMgbGFiZWw9IkFkZGluZyBhIFJlZ2lzdHJ5IHRvIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIiIGhyZWY9InRhc2tzL3RhZGRyZWcuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJQdWJsaXNoaW5nIGEgYnVzaW5lc3MgZW50aXR5IiBocmVmPSJ0YXNrcy90cHViZW50Lmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iUHVibGlzaGluZyBhIFdlYiBzZXJ2aWNlIiBocmVmPSJ0YXNrcy90cHVibGlzaC5odG1sIj4KLTx0b3BpYyBsYWJlbD0iRGF0YSBzdHJ1Y3R1cmUgdHlwZXMgKFVEREkgcmVnaXN0cnkpIiBocmVmPSJyZWYvcnVkZGkuaHRtbCIvPgotPC90b3BpYz4KLTx0b3BpYyBsYWJlbD0iVXBkYXRpbmcgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSIgaHJlZj0idGFza3MvdHVwZGF0ZS5odG1sIi8+Ci08dG9waWMgbGFiZWw9IlJlbW92aW5nIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UgZnJvbSBhIHJlZ2lzdHJ5IiBocmVmPSJ0YXNrcy90dW5wdWIuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJNYW5hZ2luZyByZWZlcmVuY2VkIHNlcnZpY2VzIiBocmVmPSJ0YXNrcy90YnVzcHJvai5odG1sIi8+Ci08dG9waWMgbGFiZWw9Ik1hbmFnaW5nIHB1Ymxpc2hlciBhc3NlcnRpb25zIiBocmVmPSJ0YXNrcy90YXNzZXJ0Lmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iQWRkaW5nIGEgcmVnaXN0cnksIGJ1c2luZXNzIGVudGl0eSwgYnVzaW5lc3Mgc2VydmljZSwgc2VydmljZSBpbnRlcmZhY2UsIFdTSUwsIG9yIFdTREwgc2VydmljZSB0byBGYXZvcml0ZXMiIGhyZWY9InRhc2tzL3Ria21yay5odG1sIi8+Ci08dG9waWMgbGFiZWw9IkdlbmVyYXRpbmcgYSBXU0lMIGZpbGUiIGhyZWY9InRhc2tzL3RnZW53c2lsLmh0bWwiLz4KLTwvdG9waWM+Ci08L3RvYz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3dzY29uc3VtcHRpb250X3RvYy5kaXRhbWFwIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvd3Njb25zdW1wdGlvbnRfdG9jLmRpdGFtYXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjMmM4NWIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvd3Njb25zdW1wdGlvbnRfdG9jLmRpdGFtYXAKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSBtYXAgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgTWFwLy9FTiIKLSAibWFwLmR0ZCI+Ci08bWFwIGFuY2hvcnJlZj0iLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3dlYnNlcnZpY2VfdG9jLmRpdGFtYXAjd3Njb25zdW1wdGlvbnQiCi10aXRsZT0id3Njb25zdW1wdGlvbnQiPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3R1ZGRpZXhwLmRpdGEiIG5hdnRpdGxlPSJQdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXMiPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3RzdHJ0ZXhwLmRpdGEiIG5hdnRpdGxlPSJMYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciI+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3RyZWcuZGl0YSIgbmF2dGl0bGU9IlJlZ2lzdGVyaW5nIHdpdGggYSByZWdpc3RyeSI+PC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90bG9nZXhwLmRpdGEiIG5hdnRpdGxlPSJMb2dnaW5nIGludG8gYSByZWdpc3RyeSI+PC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90YWRkcmVnLmRpdGEiIG5hdnRpdGxlPSJBZGRpbmcgYSBSZWdpc3RyeSB0byB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdHB1YmVudC5kaXRhIiBuYXZ0aXRsZT0iUHVibGlzaGluZyBhIGJ1c2luZXNzIGVudGl0eSI+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3RwdWJsaXNoLmRpdGEiIG5hdnRpdGxlPSJQdWJsaXNoaW5nIGEgV2ViIHNlcnZpY2UiPgotPHRvcGljcmVmIGhyZWY9InJlZi9ydWRkaS5kaXRhIiBuYXZ0aXRsZT0iRGF0YSBzdHJ1Y3R1cmUgdHlwZXMgKFVEREkgcmVnaXN0cnkpIj4KLTwvdG9waWNyZWY+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3R1cGRhdGUuZGl0YSIgbmF2dGl0bGU9IlVwZGF0aW5nIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UiPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90dW5wdWIuZGl0YSIgbmF2dGl0bGU9IlJlbW92aW5nIGEgYnVzaW5lc3MgZW50aXR5LCBXZWIgc2VydmljZSwgb3Igc2VydmljZSBpbnRlcmZhY2UgZnJvbSBhIHJlZ2lzdHJ5Ij4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdGJ1c3Byb2ouZGl0YSIgbmF2dGl0bGU9Ik1hbmFnaW5nIHJlZmVyZW5jZWQgc2VydmljZXMiPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90YXNzZXJ0LmRpdGEiIG5hdnRpdGxlPSJNYW5hZ2luZyBwdWJsaXNoZXIgYXNzZXJ0aW9ucyI+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3Ria21yay5kaXRhIiBuYXZ0aXRsZT0iQWRkaW5nIHRvIEZhdm9yaXRlcyI+PC90b3BpY3JlZj4KLTwvdG9waWNyZWY+Ci08L21hcD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3dzY29uc3VtcHRpb250X3RvYy54bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci93c2NvbnN1bXB0aW9udF90b2MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMmU2MGI0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3dzY29uc3VtcHRpb250X3RvYy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCi08P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI/PgotCi08dG9jIGxpbmtfdG89Ii4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci93ZWJzZXJ2aWNlX3RvYy54bWwjd3Njb25zdW1wdGlvbnQiIGxhYmVsPSJ3c2NvbnN1bXB0aW9udCIgdG9waWM9InRhc2tzL3R1ZGRpZXhwLmh0bWwiPgotPHRvcGljIGxhYmVsPSJQdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyBhbmQgYnVzaW5lc3MgZW50aXRpZXMiIGhyZWY9InRhc2tzL3R1ZGRpZXhwLmh0bWwiPgotPHRvcGljIGxhYmVsPSJMYXVuY2hpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciIgaHJlZj0idGFza3MvdHN0cnRleHAuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJSZWdpc3RlcmluZyB3aXRoIGEgVURESSByZWdpc3RyeSIgaHJlZj0idGFza3MvdHJlZy5odG1sIi8+Ci08dG9waWMgbGFiZWw9IkxvZ2dpbmcgaW4gdG8gYSBVRERJIHJlZ2lzdHJ5IiBocmVmPSJ0YXNrcy90bG9nZXhwLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iQWRkaW5nIGEgUmVnaXN0cnkgdG8gdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciIgaHJlZj0idGFza3MvdGFkZHJlZy5odG1sIi8+Ci08dG9waWMgbGFiZWw9IlB1Ymxpc2hpbmcgYSBidXNpbmVzcyBlbnRpdHkiIGhyZWY9InRhc2tzL3RwdWJlbnQuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJQdWJsaXNoaW5nIGEgV2ViIHNlcnZpY2UiIGhyZWY9InRhc2tzL3RwdWJsaXNoLmh0bWwiPgotPHRvcGljIGxhYmVsPSJEYXRhIHN0cnVjdHVyZSB0eXBlcyAoVURESSByZWdpc3RyeSkiIGhyZWY9InJlZi9ydWRkaS5odG1sIi8+Ci08L3RvcGljPgotPHRvcGljIGxhYmVsPSJVcGRhdGluZyBhIGJ1c2luZXNzIGVudGl0eSwgV2ViIHNlcnZpY2UsIG9yIHNlcnZpY2UgaW50ZXJmYWNlIiBocmVmPSJ0YXNrcy90dXBkYXRlLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iUmVtb3ZpbmcgYSBidXNpbmVzcyBlbnRpdHksIFdlYiBzZXJ2aWNlLCBvciBzZXJ2aWNlIGludGVyZmFjZSBmcm9tIGEgcmVnaXN0cnkiIGhyZWY9InRhc2tzL3R1bnB1Yi5odG1sIi8+Ci08dG9waWMgbGFiZWw9Ik1hbmFnaW5nIHJlZmVyZW5jZWQgc2VydmljZXMiIGhyZWY9InRhc2tzL3RidXNwcm9qLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iTWFuYWdpbmcgcHVibGlzaGVyIGFzc2VydGlvbnMiIGhyZWY9InRhc2tzL3Rhc3NlcnQuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJBZGRpbmcgYSByZWdpc3RyeSwgYnVzaW5lc3MgZW50aXR5LCBidXNpbmVzcyBzZXJ2aWNlLCBzZXJ2aWNlIGludGVyZmFjZSwgV1NJTCwgb3IgV1NETCBzZXJ2aWNlIHRvIEZhdm9yaXRlcyIgaHJlZj0idGFza3MvdGJrbXJrLmh0bWwiLz4KLTwvdG9waWM+Ci08L3RvYz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyLy5jdnNpZ25vcmUgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmE3YjIzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW9yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlcl8xLjAuMC5qYXIKLWJhawotdGVtcAotYnVpbGQueG1sCi1vdXQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci8ucHJvamVjdCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMGNmZWY3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvRG9jQnVpbGQueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvRG9jQnVpbGQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjM5NTdjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL0RvY0J1aWxkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgotPCEtLSAKLQotCVRoaXMgc2NyaXB0IGJ1aWxkIHRoZSBIZWxwIHBsdWctaW4gYnkgdHJhbnNmb3JtaW5nIHRoZSBESVRBIHNvdXJjZSBmaWxlcyBpbnRvIEhUTUwuCi0JCi0JVG8gdXNlIHRoaXMgc2NyaXB0LCB5b3UgbXVzdCBpbnN0YWxsIERJVEEtT1Qgb24geW91ciBtYWNoaW5lIGluIHRoZSBkaXJlY3RvcnkKLQlkZWZpbmVkIGJ5IHRoZSBkaXRhLm90LmRpciBwcm9wZXJ0eS4KLQkKLQlSdW4gdGhlIGRlZmF1bHQgdGFyZ2V0IGFmdGVyIHlvdSBlZGl0IHRoZSBESVRBIHNvdXJjZSBmaWxlcyB0byByZWdlbmVyYXRlIHRoZSBIVE1MLgotCQotCVRvIGN1c3RvbWl6ZSB0aGlzIHNjcmlwdCBmb3Igb3RoZXIgSGVscCBwbHVnLWlucywgbW9kaWZ5IHRoZSB2YWx1ZSBvZiB0aGUgYXJncy5pbnB1dCBwcm9wZXJ0eQotCXRvIGJlIHRoZSBESVRBIG1hcCBmaWxlIGZvciB0aGUgcGx1Zy1pbi4KLQkKLQlOT1RFOiBUaGlzIHNjcmlwdCBhc3N1bWVzIHRoYXQgbGlua3MgdG8gc2libGluZyBIZWxwIHBsdWctaW5zIGhhdmUgc2NvcGU9InBlZXIiLCBvdGhlcndpc2UgdGhlCi0Jb3V0cHV0IGRpcmVjdG9yeSBzdHJ1Y3R1cmUgd2lsbCBiZSBzaGlmdGVkIGluY29ycmVjdGx5LgotCQotCU5PVEU6IFRoaXMgc2NyaXB0IGFzc3VtZXMgdGhhdCB5b3UgaGFuZCBjb2RlIHlvdXIgcGx1Z2luLnhtbCBmaWxlIGluIG15cGx1Z2luLnhtbC4gVGhpcyBmaWxlCi0Jd2lsbCBiZSBjb3BpZWQgb3ZlciB0aGUgZ2VuZXJhdGVkIHBsdWdpbi54bWwgd2hpY2ggaXMgY3VycmVudGx5IG5vdCBiZWluZyBnZW5lcmF0ZWQgY29ycmVjdGx5Ci0JYnkgRElUQS1PVC4KLQkKLQlDaGFuZ2VMb2c6Ci0JMjAwNi0wNC0wNSBBcnRodXIgUnltYW4gPHJ5bWFuQGNhLmlibS5jb20+Ci0JLSBDcmVhdGVkLgotCi0tLT4KLTxwcm9qZWN0IG5hbWU9ImVjbGlwc2VoZWxwIiBkZWZhdWx0PSJhbGwiPgotCi0JPHByb3BlcnR5IG5hbWU9ImRpdGEub3QuZGlyIiBsb2NhdGlvbj0iQzovRElUQS1PVDEuMi4yIiAvPgotCi0JPHBhdGggaWQ9ImRvc3QuY2xhc3MucGF0aCI+Ci0JCTxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtkaXRhLm90LmRpcn0ke2ZpbGUuc2VwYXJhdG9yfWxpYiR7ZmlsZS5zZXBhcmF0b3J9ZG9zdC5qYXIiIC8+Ci0JPC9wYXRoPgotCi0JPHRhc2tkZWYgbmFtZT0iaW50ZWdyYXRlIiBjbGFzc25hbWU9Im9yZy5kaXRhLmRvc3QucGxhdGZvcm0uSW50ZWdyYXRvclRhc2siPgotCQk8Y2xhc3NwYXRoIHJlZmlkPSJkb3N0LmNsYXNzLnBhdGgiIC8+Ci0JPC90YXNrZGVmPgotCTx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJpbnRlZ3JhdGUsIGVjbGlwc2VoZWxwIj4KLQk8L3RhcmdldD4KLQk8dGFyZ2V0IG5hbWU9ImludGVncmF0ZSI+Ci0JCTxpbnRlZ3JhdGUgZGl0YWRpcj0iJHtkaXRhLm90LmRpcn0iIC8+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tIHJldmlzZSBiZWxvdyBoZXJlIC0tPgotCTx0YXJnZXQgbmFtZT0iZWNsaXBzZWhlbHAiPgotCQk8YW50IGFudGZpbGU9IiR7ZGl0YS5vdC5kaXJ9JHtmaWxlLnNlcGFyYXRvcn1jb25kdWN0b3IueG1sIiB0YXJnZXQ9ImluaXQiIGRpcj0iJHtkaXRhLm90LmRpcn0iPgotCQkJPHByb3BlcnR5IG5hbWU9ImFyZ3MuY29weWNzcyIgdmFsdWU9Im5vIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9ImFyZ3MuY3NzcGF0aCIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5kb2MudXNlciIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJhcmdzLmVjbGlwc2UucHJvdmlkZXIiIHZhbHVlPSJFY2xpcHNlLm9yZyIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJhcmdzLmVjbGlwc2UudmVyc2lvbiIgdmFsdWU9IjEuNS4wIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9ImFyZ3MuaW5wdXQiIGxvY2F0aW9uPSJ3ZWJzZXJ2aWNlX3RvYy5kaXRhbWFwIiAvPiAKLQkJCTxwcm9wZXJ0eSBuYW1lPSJjbGVhbi50ZW1wIiB2YWx1ZT0idHJ1ZSIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJkaXRhLmV4dG5hbWUiIHZhbHVlPSIuZGl0YSIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJkaXRhLnRlbXAuZGlyIiBsb2NhdGlvbj0idGVtcCIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJvdXRwdXQuZGlyIiBsb2NhdGlvbj0iLi4iIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0idHJhbnN0eXBlIiB2YWx1ZT0iZWNsaXBzZWhlbHAiIC8+Ci0JCTwvYW50PgotCQk8Y29weSBmaWxlPSJteXBsdWdpbi54bWwiIHRvZmlsZT0icGx1Z2luLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiIC8+Ci0JPC90YXJnZXQ+Ci08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDE1ZTM4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMzAwLnF1YWxpZmllcgotQnVuZGxlLVZlbmRvcjogJXBsdWdpblByb3ZpZGVyCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2Fib3V0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2RiMzZlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lIDA2LCAyMDA3PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2J1aWxkLnByb3BlcnRpZXMgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzk1ZTU3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi1iaW4uaW5jbHVkZXMgPSBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIHdlYnNlcnZpY2VfdG9jLnhtbCxcCi0gICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXJpbmRleC54bWwsXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBpbWFnZXMvLFwKLSAgICAgICAgICAgICAgIGNvbmNlcHRzLyouaHRtKixcCi0gICAgICAgICAgICAgICB0YXNrcy8qLmh0bSosXAotICAgICAgICAgICAgICAgcmVmLyouaHRtKixcCi0gICAgICAgICAgICAgICBpbmRleC8sXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvCi1zcmMuaW5jbHVkZXMgPSBidWlsZC5wcm9wZXJ0aWVzLFwKLQkJICAgICAgICoubWFwbGlzdCxcCi0gICAgICAgICAgICAgICAqLmRpdGFtYXAsXAotCQkgICAgICAgY29uY2VwdHMvKi5kaXRhLFwKLSAgICAgICAgICAgICAgIHRhc2tzLyouZGl0YSxcCi0gICAgICAgICAgICAgICByZWYvKi5kaXRhCi1iaW4uZXhjbHVkZXMgPSBEb2NCdWlsZC54bWwsXAotICAgICAgICAgICAgICAgbXlQbHVnaW4qLnhtbApkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY2pheHJwYy5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY2pheHJwYy5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkM2I1YjI3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2NqYXhycGMuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIGNvbmNlcHQgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgQ29uY2VwdC8vRU4iCi0gImNvbmNlcHQuZHRkIj4KLTxjb25jZXB0IGlkPSJjamF4cnBjIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkpBWC1SUEM8L3RpdGxlPgotPHNob3J0ZGVzYz5KQVgtUlBDIHN0YW5kcyBmb3IgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBBUEkgZm9yIFhNTC1iYXNlZCBSUEMsIGFsc28ga25vd24gYXMKLUpTUiAxMDEuIEl0IGlzIGEgc3BlY2lmaWNhdGlvbiB0aGF0IGRlc2NyaWJlcyA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIKLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IEFwcGxpY2F0aW9uIFByb2dyYW1taW5nIEludGVyZmFjZXMKLShBUElzKSBhbmQgY29udmVudGlvbnMgZm9yIGJ1aWxkaW5nIFdlYiBzZXJ2aWNlcyBhbmQgV2ViIHNlcnZpY2UgY2xpZW50cyB0aGF0Ci11c2UgcmVtb3RlIHByb2NlZHVyZSBjYWxscyAoUlBDKSBhbmQgWE1MLiBJdCBzdGFuZGFyZGl6ZXMgdGhlIDx0bSB0bWNsYXNzPSJzcGVjaWFsIgotdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIgdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gdG8KLVdTREwgYW5kIFdTREwgdG8gPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iIHRtdHlwZT0idG0iCi10cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBtYXBwaW5ncywgYW5kIHByb3ZpZGVzIHRoZSBjb3JlIEFQSXMgZm9yIGRldmVsb3BpbmcKLVdlYiBzZXJ2aWNlcyBhbmQgV2ViIHNlcnZpY2UgY2xpZW50cyBvbiB0aGUgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBwbGF0Zm9ybS4gT2Z0ZW4gdXNlZCBpbiBhIGRpc3RyaWJ1dGVkCi1jbGllbnQvc2VydmVyIG1vZGVsLCBhbiBSUEMgbWVjaGFuaXNtIGVuYWJsZXMgY2xpZW50cyB0byBleGVjdXRlIHByb2NlZHVyZXMKLW9uIG90aGVyIHN5c3RlbXMuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPkpBWC1SUEM8aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPkpBWC1SUEM8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPGNvbmJvZHk+Ci08cD5UaGUgY3VycmVudCByZWxlYXNlIG9mIEpBWC1SUEMgcmVxdWlyZXMgdGhlIHN1cHBvcnQgb2YgU09BUCBvdmVyIEhUVFAgZm9yCi1pbnRlcm9wZXJhYmlsaXR5IHB1cnBvc2VzLiBUaGUgU09BUCBzcGVjaWZpY2F0aW9uIGRlZmluZXMgbWVzc2FnZSBzdHJ1Y3R1cmUsCi1lbmNvZGluZyBydWxlcywgYW5kIGNvbnZlbnRpb25zIGZvciBleGNoYW5naW5nIGluZm9ybWF0aW9uIGluIHRoZSBSUEMgcHJvZ3JhbW1pbmcKLW1vZGVsLiBUaGVzZSBjYWxscyBhbmQgcmVzcG9uc2VzIGFyZSB0cmFuc21pdHRlZCBhcyBTT0FQIG1lc3NhZ2VzIG92ZXIgSFRUUC4KLUluIHRoaXMgcmVsZWFzZSwgSkFYLVJQQyBzdXBwb3J0cyBTT0FQIDEuMSBhbmQgSFRUUCAxLjEuIEZvciBtb3JlIGluZm9ybWF0aW9uCi1vbiBTT0FQLCByZWZlciB0byA8eHJlZiBocmVmPSJjc29hcC5kaXRhIiBzY29wZT0ibG9jYWwiPjwveHJlZj4uPC9wPgotPHA+QWx0aG91Z2ggdGhlIHVuZGVybHlpbmcgcnVuLXRpbWUgbWVjaGFuaXNtcyAoZm9yIGV4YW1wbGUsIDx0bSB0bWNsYXNzPSJzcGVjaWFsIgotdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIgdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gdG8KLVdTREwgc2VyaWFsaXphdGlvbiwgV1NETCB0byA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIKLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IGRlc2VyaWFsaXphdGlvbiwgcHJvdG9jb2wgYW5kIHRyYW5zcG9ydCkKLWFyZSB2ZXJ5IGNvbXBsZXgsIHRoZSBBUEkgaGlkZXMgdGhpcyBjb21wbGV4aXR5IGZyb20gdGhlIGFwcGxpY2F0aW9uIGRldmVsb3Blci4KLU9uIHRoZSBzZXJ2ZXIgc2lkZSwgdGhlIGRldmVsb3BlciBjYW4gcHJvdmlkZSBhIFNlcnZpY2UgRW5kcG9pbnQgSW50ZXJmYWNlCi0oU0VJKTsgYWx0ZXJuYXRlbHkgYW4gU0VJIGNhbiBiZSBjcmVhdGVkIHVzaW5nIHRoZSBXZWIgc2VydmljZXMgd2l6cmRzLiBBbgotU0VJIGlzIGFuIGludGVyZmFjZSB3cml0dGVuIGluIHRoZSA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIKLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IHByb2dyYW1taW5nIGxhbmd1YWdlIHRoYXQgc3BlY2lmaWVzCi10aGUgcmVtb3RlIHByb2NlZHVyZXMgb2YgYSBXZWIgc2VydmljZS4gVGhlIGRldmVsb3BlciBhbHNvIHByb3ZpZGVzIHRoZSBpbXBsZW1lbnRhdGlvbgotb2YgYSBXZWIgc2VydmljZSwgaW4gdGhlIGZvcm0gb2Ygb25lIG9yIG1vcmUgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBjbGFzc2VzIHRoYXQgaW1wbGVtZW50IG1ldGhvZHMgb2YgdGhlCi1zYW1lIHNpZ25hdHVyZSBhcyB0aG9zZSBvbiB0aGUgU0VJLiBDbGllbnQgcHJvZ3JhbXMgYXJlIGFsc28gZWFzeSB0byBjb2RlLgotQSBjbGllbnQgY3JlYXRlcyBhIHByb3h5LCBhIGxvY2FsIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHNlcnZpY2UgaW1wbGVtZW50YXRpb24KLWFuZCB0aGUgU0VJLCBhbmQgdGhlbiBzaW1wbHkgaW52b2tlcyBtZXRob2RzIG9uIHRoZSBwcm94eS48L3A+Ci08cD5KQVgtUlBDIGlzIGhpZ2hseSBpbnRlcm9wZXJhYmxlOiBhIEpBWC1SUEMgY2xpZW50IGNhbiBhY2Nlc3MgYSBXZWIgc2VydmljZQotdGhhdCBpcyBub3QgcnVubmluZyBvbiB0aGUgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBwbGF0Zm9ybSBhbmQgdmljZSB2ZXJzYS4gVGhpcyBmbGV4aWJpbGl0eQotaXMgcG9zc2libGUgYmVjYXVzZSBKQVgtUlBDIHVzZXMgU09BUCBvdmVyIEhUVFAsIGFuZCB0aGUgV2ViIFNlcnZpY2UgRGVzY3JpcHRpb24KLUxhbmd1YWdlIChXU0RMKS4gSkFYLVJQQyB3YXMgZGVzaWduZWQgdG8gc3VwcG9ydCBXUy1JLjwvcD4KLTxwPkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEpBWC1SUEMsIHJlZmVyIHRvIHRoZSAgPHhyZWYgZm9ybWF0PSJodG1sIiBocmVmPSJodHRwOi8vd3d3LmpjcC5vcmcvZW4vanNyL2RldGFpbD9pZD0xMDEiCi1zY29wZT0iZXh0ZXJuYWwiPm9mZmljaWFsIEpTUiAxMDEgc3BlY2lmaWNhdGlvbnM8L3hyZWY+LjwvcD4KLTwvY29uYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9ImN3cy5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJjd3NpbndzYS5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJjanNyMTA5LmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgVGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vdGFza3MvdG92ZXJ3cy5kaXRhIiBzY29wZT0icGVlciI+PGxpbmt0ZXh0PiBEZXZlbG9waW5nIFdlYgotc2VydmljZXM8L2xpbmt0ZXh0PjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L2NvbmNlcHQ+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jamF4cnBjLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jamF4cnBjLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxMjAyZDQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY2pheHJwYy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDciIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9ImNvbmNlcHQiIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iSkFYLVJQQyIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJKQVgtUlBDIHN0YW5kcyBmb3IgSmF2YSBBUEkgZm9yIFhNTC1iYXNlZCBSUEMsIGFsc28ga25vd24gYXMgSlNSIDEwMS4gSXQgaXMgYSBzcGVjaWZpY2F0aW9uIHRoYXQgZGVzY3JpYmVzIEphdmEgQXBwbGljYXRpb24gUHJvZ3JhbW1pbmcgSW50ZXJmYWNlcyAoQVBJcykgYW5kIGNvbnZlbnRpb25zIGZvciBidWlsZGluZyBXZWIgc2VydmljZXMgYW5kIFdlYiBzZXJ2aWNlIGNsaWVudHMgdGhhdCB1c2UgcmVtb3RlIHByb2NlZHVyZSBjYWxscyAoUlBDKSBhbmQgWE1MLiBJdCBzdGFuZGFyZGl6ZXMgdGhlIEphdmEgdG8gV1NETCBhbmQgV1NETCB0byBKYXZhIG1hcHBpbmdzLCBhbmQgcHJvdmlkZXMgdGhlIGNvcmUgQVBJcyBmb3IgZGV2ZWxvcGluZyBXZWIgc2VydmljZXMgYW5kIFdlYiBzZXJ2aWNlIGNsaWVudHMgb24gdGhlIEphdmEgcGxhdGZvcm0uIE9mdGVuIHVzZWQgaW4gYSBkaXN0cmlidXRlZCBjbGllbnQvc2VydmVyIG1vZGVsLCBhbiBSUEMgbWVjaGFuaXNtIGVuYWJsZXMgY2xpZW50cyB0byBleGVjdXRlIHByb2NlZHVyZXMgb24gb3RoZXIgc3lzdGVtcy4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iSkFYLVJQQyBzdGFuZHMgZm9yIEphdmEgQVBJIGZvciBYTUwtYmFzZWQgUlBDLCBhbHNvIGtub3duIGFzIEpTUiAxMDEuIEl0IGlzIGEgc3BlY2lmaWNhdGlvbiB0aGF0IGRlc2NyaWJlcyBKYXZhIEFwcGxpY2F0aW9uIFByb2dyYW1taW5nIEludGVyZmFjZXMgKEFQSXMpIGFuZCBjb252ZW50aW9ucyBmb3IgYnVpbGRpbmcgV2ViIHNlcnZpY2VzIGFuZCBXZWIgc2VydmljZSBjbGllbnRzIHRoYXQgdXNlIHJlbW90ZSBwcm9jZWR1cmUgY2FsbHMgKFJQQykgYW5kIFhNTC4gSXQgc3RhbmRhcmRpemVzIHRoZSBKYXZhIHRvIFdTREwgYW5kIFdTREwgdG8gSmF2YSBtYXBwaW5ncywgYW5kIHByb3ZpZGVzIHRoZSBjb3JlIEFQSXMgZm9yIGRldmVsb3BpbmcgV2ViIHNlcnZpY2VzIGFuZCBXZWIgc2VydmljZSBjbGllbnRzIG9uIHRoZSBKYXZhIHBsYXRmb3JtLiBPZnRlbiB1c2VkIGluIGEgZGlzdHJpYnV0ZWQgY2xpZW50L3NlcnZlciBtb2RlbCwgYW4gUlBDIG1lY2hhbmlzbSBlbmFibGVzIGNsaWVudHMgdG8gZXhlY3V0ZSBwcm9jZWR1cmVzIG9uIG90aGVyIHN5c3RlbXMuIiAvPgotPG1ldGEgY29udGVudD0iSkFYLVJQQywgV2ViIHNlcnZpY2VzIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iSkFYLVJQQywgV2ViIHNlcnZpY2VzIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iY3dzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9ImN3c2lud3NhLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9ImNqc3IxMDkuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdGFza3MvdG92ZXJ3cy5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9ImNqYXhycGMiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5KQVgtUlBDPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJjamF4cnBjIj48YSBuYW1lPSJjamF4cnBjIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5KQVgtUlBDPC9oMT4KLQotCi0KLTxkaXY+PHA+SkFYLVJQQyBzdGFuZHMgZm9yIEphdmHihKIgQVBJIGZvciBYTUwtYmFzZWQgUlBDLCBhbHNvIGtub3duIGFzCi1KU1IgMTAxLiBJdCBpcyBhIHNwZWNpZmljYXRpb24gdGhhdCBkZXNjcmliZXMgSmF2YSBBcHBsaWNhdGlvbiBQcm9ncmFtbWluZyBJbnRlcmZhY2VzCi0oQVBJcykgYW5kIGNvbnZlbnRpb25zIGZvciBidWlsZGluZyBXZWIgc2VydmljZXMgYW5kIFdlYiBzZXJ2aWNlIGNsaWVudHMgdGhhdAotdXNlIHJlbW90ZSBwcm9jZWR1cmUgY2FsbHMgKFJQQykgYW5kIFhNTC4gSXQgc3RhbmRhcmRpemVzIHRoZSBKYXZhIHRvCi1XU0RMIGFuZCBXU0RMIHRvIEphdmEgbWFwcGluZ3MsIGFuZCBwcm92aWRlcyB0aGUgY29yZSBBUElzIGZvciBkZXZlbG9waW5nCi1XZWIgc2VydmljZXMgYW5kIFdlYiBzZXJ2aWNlIGNsaWVudHMgb24gdGhlIEphdmEgcGxhdGZvcm0uIE9mdGVuIHVzZWQgaW4gYSBkaXN0cmlidXRlZAotY2xpZW50L3NlcnZlciBtb2RlbCwgYW4gUlBDIG1lY2hhbmlzbSBlbmFibGVzIGNsaWVudHMgdG8gZXhlY3V0ZSBwcm9jZWR1cmVzCi1vbiBvdGhlciBzeXN0ZW1zLjwvcD4KLQotPHA+VGhlIGN1cnJlbnQgcmVsZWFzZSBvZiBKQVgtUlBDIHJlcXVpcmVzIHRoZSBzdXBwb3J0IG9mIFNPQVAgb3ZlciBIVFRQIGZvcgotaW50ZXJvcGVyYWJpbGl0eSBwdXJwb3Nlcy4gVGhlIFNPQVAgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIG1lc3NhZ2Ugc3RydWN0dXJlLAotZW5jb2RpbmcgcnVsZXMsIGFuZCBjb252ZW50aW9ucyBmb3IgZXhjaGFuZ2luZyBpbmZvcm1hdGlvbiBpbiB0aGUgUlBDIHByb2dyYW1taW5nCi1tb2RlbC4gVGhlc2UgY2FsbHMgYW5kIHJlc3BvbnNlcyBhcmUgdHJhbnNtaXR0ZWQgYXMgU09BUCBtZXNzYWdlcyBvdmVyIEhUVFAuCi1JbiB0aGlzIHJlbGVhc2UsIEpBWC1SUEMgc3VwcG9ydHMgU09BUCAxLjEgYW5kIEhUVFAgMS4xLiBGb3IgbW9yZSBpbmZvcm1hdGlvbgotb24gU09BUCwgcmVmZXIgdG8gPGEgaHJlZj0iY3NvYXAuaHRtbCIgdGl0bGU9IlNPQVAgKGZvcm1lcmx5IGtub3duIGFzIFNpbXBsZSBPYmplY3QgQWNjZXNzIFByb3RvY29sKSBpcyBhIGxpZ2h0d2VpZ2h0JiMxMDtwcm90b2NvbCBmb3IgdGhlIGV4Y2hhbmdlIG9mIGluZm9ybWF0aW9uIGluIGEgZGVjZW50cmFsaXplZCwgZGlzdHJpYnV0ZWQgZW52aXJvbm1lbnQuJiMxMDtBIFNPQVAgbWVzc2FnZSBpcyBhIHRyYW5zbWlzc2lvbiBvZiBpbmZvcm1hdGlvbiBmcm9tIGEgc2VuZGVyIHRvIGEgcmVjZWl2ZXIuJiMxMDtTT0FQIG1lc3NhZ2VzIGNhbiBiZSBjb21iaW5lZCB0byBwZXJmb3JtIHJlcXVlc3QvcmVzcG9uc2UgcGF0dGVybnMuICI+U09BUDwvYT4uPC9wPgotCi08cD5BbHRob3VnaCB0aGUgdW5kZXJseWluZyBydW4tdGltZSBtZWNoYW5pc21zIChmb3IgZXhhbXBsZSwgSmF2YSB0bwotV1NETCBzZXJpYWxpemF0aW9uLCBXU0RMIHRvIEphdmEgZGVzZXJpYWxpemF0aW9uLCBwcm90b2NvbCBhbmQgdHJhbnNwb3J0KQotYXJlIHZlcnkgY29tcGxleCwgdGhlIEFQSSBoaWRlcyB0aGlzIGNvbXBsZXhpdHkgZnJvbSB0aGUgYXBwbGljYXRpb24gZGV2ZWxvcGVyLgotT24gdGhlIHNlcnZlciBzaWRlLCB0aGUgZGV2ZWxvcGVyIGNhbiBwcm92aWRlIGEgU2VydmljZSBFbmRwb2ludCBJbnRlcmZhY2UKLShTRUkpOyBhbHRlcm5hdGVseSBhbiBTRUkgY2FuIGJlIGNyZWF0ZWQgdXNpbmcgdGhlIFdlYiBzZXJ2aWNlcyB3aXpyZHMuIEFuCi1TRUkgaXMgYW4gaW50ZXJmYWNlIHdyaXR0ZW4gaW4gdGhlIEphdmEgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgdGhhdCBzcGVjaWZpZXMKLXRoZSByZW1vdGUgcHJvY2VkdXJlcyBvZiBhIFdlYiBzZXJ2aWNlLiBUaGUgZGV2ZWxvcGVyIGFsc28gcHJvdmlkZXMgdGhlIGltcGxlbWVudGF0aW9uCi1vZiBhIFdlYiBzZXJ2aWNlLCBpbiB0aGUgZm9ybSBvZiBvbmUgb3IgbW9yZSBKYXZhIGNsYXNzZXMgdGhhdCBpbXBsZW1lbnQgbWV0aG9kcyBvZiB0aGUKLXNhbWUgc2lnbmF0dXJlIGFzIHRob3NlIG9uIHRoZSBTRUkuIENsaWVudCBwcm9ncmFtcyBhcmUgYWxzbyBlYXN5IHRvIGNvZGUuCi1BIGNsaWVudCBjcmVhdGVzIGEgcHJveHksIGEgbG9jYWwgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgc2VydmljZSBpbXBsZW1lbnRhdGlvbgotYW5kIHRoZSBTRUksIGFuZCB0aGVuIHNpbXBseSBpbnZva2VzIG1ldGhvZHMgb24gdGhlIHByb3h5LjwvcD4KLQotPHA+SkFYLVJQQyBpcyBoaWdobHkgaW50ZXJvcGVyYWJsZTogYSBKQVgtUlBDIGNsaWVudCBjYW4gYWNjZXNzIGEgV2ViIHNlcnZpY2UKLXRoYXQgaXMgbm90IHJ1bm5pbmcgb24gdGhlIEphdmEgcGxhdGZvcm0gYW5kIHZpY2UgdmVyc2EuIFRoaXMgZmxleGliaWxpdHkKLWlzIHBvc3NpYmxlIGJlY2F1c2UgSkFYLVJQQyB1c2VzIFNPQVAgb3ZlciBIVFRQLCBhbmQgdGhlIFdlYiBTZXJ2aWNlIERlc2NyaXB0aW9uCi1MYW5ndWFnZSAoV1NETCkuIEpBWC1SUEMgd2FzIGRlc2lnbmVkIHRvIHN1cHBvcnQgV1MtSS48L3A+Ci0KLTxwPkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEpBWC1SUEMsIHJlZmVyIHRvIHRoZSAgPGEgaHJlZj0iaHR0cDovL3d3dy5qY3Aub3JnL2VuL2pzci9kZXRhaWw/aWQ9MTAxIiB0YXJnZXQ9Il9ibGFuayI+b2ZmaWNpYWwgSlNSIDEwMSBzcGVjaWZpY2F0aW9uczwvYT4uPC9wPgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgQ29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJjd3MuaHRtbCIgdGl0bGU9IkEgV2ViIHNlcnZpY2UgaXMgYSBzZXQgb2YgcmVsYXRlZCBhcHBsaWNhdGlvbiBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgcHJvZ3JhbW1hdGljYWxseSBpbnZva2VkIG92ZXIgdGhlIEludGVybmV0LiBCdXNpbmVzc2VzIGNhbiBkeW5hbWljYWxseSBtaXggYW5kIG1hdGNoIFdlYiBzZXJ2aWNlcyB0byBwZXJmb3JtIGNvbXBsZXggdHJhbnNhY3Rpb25zIHdpdGggbWluaW1hbCBwcm9ncmFtbWluZy4gV2ViIHNlcnZpY2VzIGFsbG93IGJ1eWVycyBhbmQgc2VsbGVycyBhbGwgb3ZlciB0aGUgd29ybGQgdG8gZGlzY292ZXIgZWFjaCBvdGhlciwgY29ubmVjdCBkeW5hbWljYWxseSwgYW5kIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIGluIHJlYWwgdGltZSB3aXRoIG1pbmltYWwgaHVtYW4gaW50ZXJhY3Rpb24uIj5XZWIgc2VydmljZXMgb3ZlcnZpZXc8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9ImN3c2lud3NhLmh0bWwiIHRpdGxlPSIiPlRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9ImNqc3IxMDkuaHRtbCIgdGl0bGU9IkpTUiAxMDkgYW5kIEpTUiA5MjEgKEltcGxlbWVudGluZyBFbnRlcnByaXNlIFdlYiBTZXJ2aWNlcykgZGVmaW5lIHRoZSBwcm9ncmFtbWluZyBtb2RlbCBhbmQgcnVuLXRpbWUgYXJjaGl0ZWN0dXJlIHRvIGRlcGxveSBhbmQgbG9vayB1cCBXZWIgc2VydmljZXMgaW4gdGhlIEoyRUUgZW52aXJvbm1lbnQ7IG1vcmUgc3BlY2lmaWNhbGx5LCBpbiB0aGUgV2ViLCBFSkIsIGFuZCBDbGllbnQgQXBwbGljYXRpb24gY29udGFpbmVycy4gT25lIG9mIGl0cyBtYWluIGdvYWxzIGlzIHRvIGVuc3VyZSB2ZW5kb3JzJyBpbXBsZW1lbnRhdGlvbnMgaW50ZXJvcGVyYXRlLiI+SlNSIDEwOSBhbmQgSlNSIDkyMS0gSW1wbGVtZW50aW5nIEVudGVycHJpc2UgV2ViIHNlcnZpY2VzPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vdGFza3MvdG92ZXJ3cy5odG1sIj4gRGV2ZWxvcGluZyBXZWIKLXNlcnZpY2VzPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9janNyMTA5LmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9janNyMTA5LmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4OWEzMDcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY2pzcjEwOS5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+Ci08IURPQ1RZUEUgY29uY2VwdCBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBDb25jZXB0Ly9FTiIKLSAiY29uY2VwdC5kdGQiPgotPGNvbmNlcHQgaWQ9ImNqc3IxMDkiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+SlNSIDEwOSBhbmQgSlNSIDkyMS0gSW1wbGVtZW50aW5nIEVudGVycHJpc2UgV2ViIHNlcnZpY2VzPC90aXRsZT4KLTxzaG9ydGRlc2M+SlNSIDEwOSBhbmQgSlNSIDkyMSAoSW1wbGVtZW50aW5nIEVudGVycHJpc2UgV2ViIFNlcnZpY2VzKSBkZWZpbmUKLXRoZSBwcm9ncmFtbWluZyBtb2RlbCBhbmQgcnVuLXRpbWUgYXJjaGl0ZWN0dXJlIHRvIGRlcGxveSBhbmQgbG9vayB1cCBXZWIKLXNlcnZpY2VzIGluIHRoZSBKMkVFIGVudmlyb25tZW50OyBtb3JlIHNwZWNpZmljYWxseSwgaW4gdGhlIFdlYiwgRUpCLCBhbmQKLUNsaWVudCBBcHBsaWNhdGlvbiBjb250YWluZXJzLiBPbmUgb2YgaXRzIG1haW4gZ29hbHMgaXMgdG8gZW5zdXJlIHZlbmRvcnMnCi1pbXBsZW1lbnRhdGlvbnMgaW50ZXJvcGVyYXRlLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5KU1IgMTA5IEphdmEgc3BlY2lmaWNhdGlvbjwvaW5kZXh0ZXJtPgotPGluZGV4dGVybT5KU1IgOTIxIEphdmEgc3BlY2lmaWNhdGlvbjwvaW5kZXh0ZXJtPgotPGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPkphdmEgc3BlY2lmaWNhdGlvbiByZXF1ZXN0czwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08Y29uYm9keT4KLTxwPkpTUiAxMDkgYW5kIEpTUiA5MjEgYnVpbGQgb24gdG9wIG9mIEpBWC1SUEMgdG8gY292ZXIgdGhlIHVzZSBvZiBKQVgtUlBDCi1pbiBhIEoyRUUgZW52aXJvbm1lbnQsIGFzIHdlbGwgYXMgdGhlIGltcGxlbWVudGF0aW9uIGFuZCBkZXBsb3ltZW50IG9mIFdlYgotc2VydmljZXMgdG8gYSBKMkVFIGFwcGxpY2F0aW9uIHNlcnZlci4gSlNSIDEwOSBhbmQgSlNSIDkyMSBkZWZpbmUgYSBzZXQgb2YKLVhNTC1iYXNlZCBkZXBsb3ltZW50IGRlc2NyaXB0b3JzIHRvIHN0YW5kYXJkaXplIFdlYiBzZXJ2aWNlcyBhbmQgV2ViIHNlcnZpY2UKLWNsaWVudCBkZXBsb3ltZW50cyBpbiB0aGUgSjJFRSBlbnZpcm9ubWVudC4gVGhlc2UgdG9vbHMgc3VwcG9ydCBKU1IgMTA5IGZvcgotSjJFRSAxLjMgYW5kIEpTUiA5MjEgZm9yIEoyRUUgMS40LjwvcD4KLTxwPkZvciBtb3JlIGluZm9ybWF0aW9uLCByZWZlciB0bzogIDx4cmVmIGZvcm1hdD0iaHRtbCIgaHJlZj0iaHR0cDovL3d3dy5qY3Aub3JnL2VuL2pzci9kZXRhaWw/aWQ9MTA5Igotc2NvcGU9ImV4dGVybmFsIj5KU1IgMTA5LCAiSW1wbGVtZW50aW5nIEVudGVycHJpc2UgV2ViIFNlcnZpY2VzPC94cmVmPiBhbmQgPHhyZWYKLWhyZWY9Imh0dHA6Ly93d3cuamNwLm9yZy9lbi9qc3IvZGV0YWlsP2lkPTkyMSIgc2NvcGU9ImV4dGVybmFsIj5KU1IgOTIxOiBJbXBsZW1lbnRpbmcKLUVudGVycHJpc2UgV2ViIFNlcnZpY2VzIDEuMTwveHJlZj4uPC9wPgotPC9jb25ib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgQ29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iY3dzLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9ImN3c2lud3NhLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9ImNqYXhycGMuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+Ci08bGluayBocmVmPSIuLi90YXNrcy90b3ZlcndzLmRpdGEiIHNjb3BlPSJwZWVyIj48bGlua3RleHQ+IERldmVsb3BpbmcgV2ViCi1zZXJ2aWNlczwvbGlua3RleHQ+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvY29uY2VwdD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2Nqc3IxMDkuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2Nqc3IxMDkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGE0ZGQyZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9janNyMTA5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwNyIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0iY29uY2VwdCIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJKU1IgMTA5IGFuZCBKU1IgOTIxLSBJbXBsZW1lbnRpbmcgRW50ZXJwcmlzZSBXZWIgc2VydmljZXMiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iSlNSIDEwOSBhbmQgSlNSIDkyMSAoSW1wbGVtZW50aW5nIEVudGVycHJpc2UgV2ViIFNlcnZpY2VzKSBkZWZpbmUgdGhlIHByb2dyYW1taW5nIG1vZGVsIGFuZCBydW4tdGltZSBhcmNoaXRlY3R1cmUgdG8gZGVwbG95IGFuZCBsb29rIHVwIFdlYiBzZXJ2aWNlcyBpbiB0aGUgSjJFRSBlbnZpcm9ubWVudDsgbW9yZSBzcGVjaWZpY2FsbHksIGluIHRoZSBXZWIsIEVKQiwgYW5kIENsaWVudCBBcHBsaWNhdGlvbiBjb250YWluZXJzLiBPbmUgb2YgaXRzIG1haW4gZ29hbHMgaXMgdG8gZW5zdXJlIHZlbmRvcnMnIGltcGxlbWVudGF0aW9ucyBpbnRlcm9wZXJhdGUuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkpTUiAxMDkgYW5kIEpTUiA5MjEgKEltcGxlbWVudGluZyBFbnRlcnByaXNlIFdlYiBTZXJ2aWNlcykgZGVmaW5lIHRoZSBwcm9ncmFtbWluZyBtb2RlbCBhbmQgcnVuLXRpbWUgYXJjaGl0ZWN0dXJlIHRvIGRlcGxveSBhbmQgbG9vayB1cCBXZWIgc2VydmljZXMgaW4gdGhlIEoyRUUgZW52aXJvbm1lbnQ7IG1vcmUgc3BlY2lmaWNhbGx5LCBpbiB0aGUgV2ViLCBFSkIsIGFuZCBDbGllbnQgQXBwbGljYXRpb24gY29udGFpbmVycy4gT25lIG9mIGl0cyBtYWluIGdvYWxzIGlzIHRvIGVuc3VyZSB2ZW5kb3JzJyBpbXBsZW1lbnRhdGlvbnMgaW50ZXJvcGVyYXRlLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IkpTUiAxMDkgSmF2YSBzcGVjaWZpY2F0aW9uLCBKU1IgOTIxIEphdmEgc3BlY2lmaWNhdGlvbiwgV2ViIHNlcnZpY2VzLCBKYXZhIHNwZWNpZmljYXRpb24gcmVxdWVzdHMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJKU1IgMTA5IEphdmEgc3BlY2lmaWNhdGlvbiwgSlNSIDkyMSBKYXZhIHNwZWNpZmljYXRpb24sIFdlYiBzZXJ2aWNlcywgSmF2YSBzcGVjaWZpY2F0aW9uIHJlcXVlc3RzIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iY3dzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9ImN3c2lud3NhLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9ImNqYXhycGMuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdGFza3MvdG92ZXJ3cy5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9ImNqc3IxMDkiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5KU1IgMTA5IGFuZCBKU1IgOTIxLSBJbXBsZW1lbnRpbmcgRW50ZXJwcmlzZSBXZWIgc2VydmljZXM8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9ImNqc3IxMDkiPjxhIG5hbWU9ImNqc3IxMDkiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkpTUiAxMDkgYW5kIEpTUiA5MjEtIEltcGxlbWVudGluZyBFbnRlcnByaXNlIFdlYiBzZXJ2aWNlczwvaDE+Ci0KLQotCi08ZGl2PjxwPkpTUiAxMDkgYW5kIEpTUiA5MjEgKEltcGxlbWVudGluZyBFbnRlcnByaXNlIFdlYiBTZXJ2aWNlcykgZGVmaW5lCi10aGUgcHJvZ3JhbW1pbmcgbW9kZWwgYW5kIHJ1bi10aW1lIGFyY2hpdGVjdHVyZSB0byBkZXBsb3kgYW5kIGxvb2sgdXAgV2ViCi1zZXJ2aWNlcyBpbiB0aGUgSjJFRSBlbnZpcm9ubWVudDsgbW9yZSBzcGVjaWZpY2FsbHksIGluIHRoZSBXZWIsIEVKQiwgYW5kCi1DbGllbnQgQXBwbGljYXRpb24gY29udGFpbmVycy4gT25lIG9mIGl0cyBtYWluIGdvYWxzIGlzIHRvIGVuc3VyZSB2ZW5kb3JzJwotaW1wbGVtZW50YXRpb25zIGludGVyb3BlcmF0ZS48L3A+Ci0KLTxwPkpTUiAxMDkgYW5kIEpTUiA5MjEgYnVpbGQgb24gdG9wIG9mIEpBWC1SUEMgdG8gY292ZXIgdGhlIHVzZSBvZiBKQVgtUlBDCi1pbiBhIEoyRUUgZW52aXJvbm1lbnQsIGFzIHdlbGwgYXMgdGhlIGltcGxlbWVudGF0aW9uIGFuZCBkZXBsb3ltZW50IG9mIFdlYgotc2VydmljZXMgdG8gYSBKMkVFIGFwcGxpY2F0aW9uIHNlcnZlci4gSlNSIDEwOSBhbmQgSlNSIDkyMSBkZWZpbmUgYSBzZXQgb2YKLVhNTC1iYXNlZCBkZXBsb3ltZW50IGRlc2NyaXB0b3JzIHRvIHN0YW5kYXJkaXplIFdlYiBzZXJ2aWNlcyBhbmQgV2ViIHNlcnZpY2UKLWNsaWVudCBkZXBsb3ltZW50cyBpbiB0aGUgSjJFRSBlbnZpcm9ubWVudC4gVGhlc2UgdG9vbHMgc3VwcG9ydCBKU1IgMTA5IGZvcgotSjJFRSAxLjMgYW5kIEpTUiA5MjEgZm9yIEoyRUUgMS40LjwvcD4KLQotPHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24sIHJlZmVyIHRvOiAgPGEgaHJlZj0iaHR0cDovL3d3dy5qY3Aub3JnL2VuL2pzci9kZXRhaWw/aWQ9MTA5IiB0YXJnZXQ9Il9ibGFuayI+SlNSIDEwOSwgIkltcGxlbWVudGluZyBFbnRlcnByaXNlIFdlYiBTZXJ2aWNlczwvYT4gYW5kIDxhIGhyZWY9Imh0dHA6Ly93d3cuamNwLm9yZy9lbi9qc3IvZGV0YWlsP2lkPTkyMSIgdGFyZ2V0PSJfYmxhbmsiPkpTUiA5MjE6IEltcGxlbWVudGluZyBFbnRlcnByaXNlIFdlYiBTZXJ2aWNlcyAxLjE8L2E+LjwvcD4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIENvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iY3dzLmh0bWwiIHRpdGxlPSJBIFdlYiBzZXJ2aWNlIGlzIGEgc2V0IG9mIHJlbGF0ZWQgYXBwbGljYXRpb24gZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHByb2dyYW1tYXRpY2FsbHkgaW52b2tlZCBvdmVyIHRoZSBJbnRlcm5ldC4gQnVzaW5lc3NlcyBjYW4gZHluYW1pY2FsbHkgbWl4IGFuZCBtYXRjaCBXZWIgc2VydmljZXMgdG8gcGVyZm9ybSBjb21wbGV4IHRyYW5zYWN0aW9ucyB3aXRoIG1pbmltYWwgcHJvZ3JhbW1pbmcuIFdlYiBzZXJ2aWNlcyBhbGxvdyBidXllcnMgYW5kIHNlbGxlcnMgYWxsIG92ZXIgdGhlIHdvcmxkIHRvIGRpc2NvdmVyIGVhY2ggb3RoZXIsIGNvbm5lY3QgZHluYW1pY2FsbHksIGFuZCBleGVjdXRlIHRyYW5zYWN0aW9ucyBpbiByZWFsIHRpbWUgd2l0aCBtaW5pbWFsIGh1bWFuIGludGVyYWN0aW9uLiI+V2ViIHNlcnZpY2VzIG92ZXJ2aWV3PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJjd3NpbndzYS5odG1sIiB0aXRsZT0iIj5Ub29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJjamF4cnBjLmh0bWwiIHRpdGxlPSJKQVgtUlBDIHN0YW5kcyBmb3IgSmF2YSBBUEkgZm9yIFhNTC1iYXNlZCBSUEMsIGFsc28ga25vd24gYXMgSlNSIDEwMS4gSXQgaXMgYSBzcGVjaWZpY2F0aW9uIHRoYXQgZGVzY3JpYmVzIEphdmEgQXBwbGljYXRpb24gUHJvZ3JhbW1pbmcgSW50ZXJmYWNlcyAoQVBJcykgYW5kIGNvbnZlbnRpb25zIGZvciBidWlsZGluZyBXZWIgc2VydmljZXMgYW5kIFdlYiBzZXJ2aWNlIGNsaWVudHMgdGhhdCB1c2UgcmVtb3RlIHByb2NlZHVyZSBjYWxscyAoUlBDKSBhbmQgWE1MLiBJdCBzdGFuZGFyZGl6ZXMgdGhlIEphdmEgdG8gV1NETCBhbmQgV1NETCB0byBKYXZhIG1hcHBpbmdzLCBhbmQgcHJvdmlkZXMgdGhlIGNvcmUgQVBJcyBmb3IgZGV2ZWxvcGluZyBXZWIgc2VydmljZXMgYW5kIFdlYiBzZXJ2aWNlIGNsaWVudHMgb24gdGhlIEphdmEgcGxhdGZvcm0uIE9mdGVuIHVzZWQgaW4gYSBkaXN0cmlidXRlZCBjbGllbnQvc2VydmVyIG1vZGVsLCBhbiBSUEMgbWVjaGFuaXNtIGVuYWJsZXMgY2xpZW50cyB0byBleGVjdXRlIHByb2NlZHVyZXMgb24gb3RoZXIgc3lzdGVtcy4iPkpBWC1SUEM8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgVGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi90YXNrcy90b3ZlcndzLmh0bWwiPiBEZXZlbG9waW5nIFdlYgotc2VydmljZXM8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2Nzb2FwLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jc29hcC5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjM3YzI3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2Nzb2FwLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+Ci08IURPQ1RZUEUgY29uY2VwdCBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBDb25jZXB0Ly9FTiIKLSAiY29uY2VwdC5kdGQiPgotPGNvbmNlcHQgaWQ9ImNzb2FwIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPlNPQVA8L3RpdGxlPgotPHNob3J0ZGVzYz5TT0FQIChmb3JtZXJseSBrbm93biBhcyBTaW1wbGUgT2JqZWN0IEFjY2VzcyBQcm90b2NvbCkgaXMgYSBsaWdodHdlaWdodAotcHJvdG9jb2wgZm9yIHRoZSBleGNoYW5nZSBvZiBpbmZvcm1hdGlvbiBpbiBhIGRlY2VudHJhbGl6ZWQsIGRpc3RyaWJ1dGVkIGVudmlyb25tZW50LgotQSBTT0FQIG1lc3NhZ2UgaXMgYSB0cmFuc21pc3Npb24gb2YgaW5mb3JtYXRpb24gZnJvbSBhIHNlbmRlciB0byBhIHJlY2VpdmVyLgotU09BUCBtZXNzYWdlcyBjYW4gYmUgY29tYmluZWQgdG8gcGVyZm9ybSByZXF1ZXN0L3Jlc3BvbnNlIHBhdHRlcm5zLiA8L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0+U09BUDxpbmRleHRlcm0+b3ZlcnZpZXc8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5TT0FQPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTxjb25ib2R5PgotPHA+U09BUCBpcyB0cmFuc3BvcnQgaW5kZXBlbmRlbnQgYnV0IGlzIG1vc3QgY29tbW9ubHkgY2FycmllZCBvdmVyIEhUVFAgaW4KLW9yZGVyIHRvIHJ1biB3aXRoIHRoZSBleGlzdGluZyBJbnRlcm5ldCBpbmZyYXN0cnVjdHVyZS4mbmJzcDsgU09BUCBlbmFibGVzCi10aGUgYmluZGluZyBhbmQgdXNhZ2Ugb2YgZGlzY292ZXJlZCBXZWIgc2VydmljZXMgYnkgZGVmaW5pbmcgYSBtZXNzYWdlIHBhdGgKLWZvciByb3V0aW5nIG1lc3NhZ2VzLiBTT0FQIGlzIHVzZWQgdG8gcXVlcnkgVURESSBmb3IgV2ViIHNlcnZpY2VzLiBUaGUgd29ya2JlbmNoCi1zdXBwb3J0cyBTT0FQIDEuMS48L3A+Ci08cD5TT0FQIGlzIGFuIFhNTC1iYXNlZCBwcm90b2NvbCB0aGF0IGRlZmluZXMgdGhyZWUgcGFydHMgdG8gZXZlcnkgbWVzc2FnZTo8L3A+Ci08dWw+Ci08bGk+IDx1aWNvbnRyb2w+RW52ZWxvcGUuPC91aWNvbnRyb2w+Jm5ic3A7IFRoZSBlbnZlbG9wZSBkZWZpbmVzIGEgZnJhbWV3b3JrCi1mb3IgZGVzY3JpYmluZyB3aGF0IGlzIGluIGEgbWVzc2FnZSBhbmQgaG93IHRvIHByb2Nlc3MgaXQuJm5ic3A7IEEgU09BUCBtZXNzYWdlCi1pcyBhbiBlbnZlbG9wZSBjb250YWluaW5nIHplcm8gb3IgbW9yZSBoZWFkZXJzIGFuZCBleGFjdGx5IG9uZSBib2R5LiZuYnNwOwotVGhlIGVudmVsb3BlIGlzIHRoZSB0b3AgZWxlbWVudCBvZiB0aGUgWE1MIGRvY3VtZW50LCBwcm92aWRpbmcgYSBjb250YWluZXIKLWZvciBjb250cm9sIGluZm9ybWF0aW9uLCB0aGUgYWRkcmVzcyBvZiBhIG1lc3NhZ2UsIGFuZCB0aGUgbWVzc2FnZSBpdHNlbGYuJm5ic3A7Ci1IZWFkZXJzIHRyYW5zcG9ydCBhbnkgY29udHJvbCBpbmZvcm1hdGlvbiBzdWNoIGFzIHF1YWxpdHktb2Ytc2VydmljZSBhdHRyaWJ1dGVzLiZuYnNwOwotVGhlIGJvZHkgY29udGFpbnMgdGhlIG1lc3NhZ2UgaWRlbnRpZmljYXRpb24gYW5kIGl0cyBwYXJhbWV0ZXJzLiZuYnNwOyBCb3RoCi10aGUgaGVhZGVycyBhbmQgdGhlIGJvZHkgYXJlIGNoaWxkIGVsZW1lbnRzIG9mIHRoZSBlbnZlbG9wZS48L2xpPgotPGxpPiA8dWljb250cm9sPkVuY29kaW5nIHJ1bGVzLjwvdWljb250cm9sPiZuYnNwOyBUaGUgc2V0IG9mIGVuY29kaW5nIHJ1bGVzCi1leHByZXNzZXMgaW5zdGFuY2VzIG9mIGFwcGxpY2F0aW9uLWRlZmluZWQgZGF0YSB0eXBlcy4gRW5jb2RpbmcgcnVsZXMgZGVmaW5lCi1hIHNlcmlhbGl6YXRpb24gbWVjaGFuaXNtIHRoYXQgY2FuIGJlIHVzZWQgdG8gZXhjaGFuZ2UgaW5zdGFuY2VzIG9mIGFwcGxpY2F0aW9uLWRlZmluZWQKLWRhdGEgdHlwZXMuIFNPQVAgZGVmaW5lcyBhIHByb2dyYW1taW5nIGxhbmd1YWdlLWluZGVwZW5kZW50IGRhdGEgdHlwZSBzY2hlbWUKLWJhc2VkIG9uIFhTRCBwbHVzIGVuY29kaW5nIHJ1bGVzIGZvciBhbGwgZGF0YSB0eXBlcyBkZWZpbmVkIGFjY29yZGluZyB0byB0aGlzCi1tb2RlbC4gU09BUCBlbmNvZGluZyBpcyBub3QgV1MtSSBjb21wbGlhbnQgYW5kIHRodXMgdGhlIExpdGVyYWwgdXNlICh3aGljaAotaXMgbm8gZW5jb2RpbmcpIGlzIHN1Z2dlc3RlZCBmb3IgaW50ZXJvcGVyYWJsZSBXZWIgc2VydmljZXMgYW5kIHJlcXVpcmVkIGZvcgotV1MtSSBjb21wbGlhbmNlLjwvbGk+Ci08bGk+IDx1aWNvbnRyb2w+Q29tbXVuaWNhdGlvbiBzdHlsZXMuPC91aWNvbnRyb2w+IENvbW11bmljYXRpb25zIGNhbiBmb2xsb3cKLWEgcmVtb3RlIHByb2NlZHVyZSBjYWxsIChSUEMpIG9yIG1lc3NhZ2Utb3JpZW50ZWQgKERvY3VtZW50KSBmb3JtYXQuJm5ic3A7Ci1UaGVzZSBhcmUgZGlzY3Vzc2VkIGJlbG93LjwvbGk+Ci08L3VsPgotPHNlY3Rpb24+PHRpdGxlPkJpbmRpbmcgc3R5bGVzPC90aXRsZT48cD5TT0FQIHN1cHBvcnRzIHR3byBkaWZmZXJlbnQgY29tbXVuaWNhdGlvbgotc3R5bGVzOjwvcD48bHE+IDxwPiA8dWljb250cm9sPlJlbW90ZSBwcm9jZWR1cmUgY2FsbCAoUlBDKTo8L3VpY29udHJvbD4mbmJzcDsKLUludm9jYXRpb24gb2YgYW4gb3BlcmF0aW9uIHJldHVybmluZyBhIHJlc3VsdC4gVHlwaWNhbGx5IHVzZWQgd2l0aCBTT0FQIGVuY29kaW5nLAotd2hpY2ggaXMgbm90IFdTLUkgY29tcGxpYW50LjwvcD48cD4gPHVpY29udHJvbD5Eb2N1bWVudCBTdHlsZTo8L3VpY29udHJvbD4mbmJzcDsKLUFsc28ga25vd24gYXMgZG9jdW1lbnQtb3JpZW50ZWQgb3IgbWVzc2FnZS1vcmllbnRlZCBzdHlsZS4mbmJzcDsgVGhpcyBzdHlsZQotcHJvdmlkZXMgYSBsb3dlciBsYXllciBvZiBhYnN0cmFjdGlvbiwgYW5kIHJlcXVpcmVzIG1vcmUgcHJvZ3JhbW1pbmcgd29yay48L3A+IDwvbHE+PC9zZWN0aW9uPgotPHNlY3Rpb24+PHRpdGxlPkVuY29kaW5nIHN0eWxlczwvdGl0bGU+PHA+SW4gZGlzdHJpYnV0ZWQgY29tcHV0aW5nIGVudmlyb25tZW50cywKLWVuY29kaW5nIHN0eWxlcyBkZWZpbmUgaG93IGRhdGEgdmFsdWVzIGRlZmluZWQgaW4gdGhlIGFwcGxpY2F0aW9uIGNhbiBiZSB0cmFuc2xhdGVkCi10byBhbmQgZnJvbSBhIHBhcnRpY3VsYXIgcHJvdG9jb2wgZm9ybWF0LiZuYnNwOyBUaGUgdHJhbnNsYXRpb24gcHJvY2VzcyBpcwota25vdyBhcyBzZXJpYWxpemF0aW9uIGFuZCBkZXNlcmlhbGl6YXRpb24uPC9wPjxwPlRoZSBTT0FQIHNwZWNpZmljYXRpb24gZGVmaW5lcwotdGhlIFNPQVAgZW5jb2Rpbmcgc3R5bGU6PC9wPjxscT4gPHA+IDx1aWNvbnRyb2w+U09BUCBlbmNvZGluZzo8L3VpY29udHJvbD4mbmJzcDsKLVRoZSBTT0FQIGVuY29kaW5nIHN0eWxlIGFsbG93cyB5b3UgdG8gc2VyaWFsaXplL2Rlc2VyaWFsaXplIHZhbHVlcyBvZiBkYXRhCi10eXBlcyBmcm9tIHRoZSBTT0FQIGRhdGEgbW9kZWwuJm5ic3A7IFRoaXMgZW5jb2Rpbmcgc3R5bGUgaXMgZGVmaW5lZCBpbiB0aGUKLVNPQVAgMS4xIHN0YW5kYXJkLCBhbmQgaXMgbm90IFdTLUkgY29tcGxpYW50LjwvcD4gPC9scT48cD5XU0RMIGRlZmluZXMgdGhlCi1MaXRlcmFsIFhNTCBlbmNvZGluZyBzdHlsZTo8L3A+PGxxPiA8cD4gPHVpY29udHJvbD5MaXRlcmFsIFhNTDo8L3VpY29udHJvbD4mbmJzcDsKLUxpdGVyYWwgcmVmZXJzIHRvIHRoZSBmYWN0IHRoYXQgdGhlIGRvY3VtZW50IHNob3VsZCBiZSByZWFkIGFzLWlzLCBvciB1bmVuY29kZWQuCi1UaGUgZG9jdW1lbnQgaXMgc2VyaWFsaXplZCBhcyBYTUksIG1lYW5pbmcgdGhhdCB0aGUgbWVzc2FnZSBYTUwgY29tcGxpZXMgd2l0aAotdGhlIFNjaGVtYSBpbiB0aGUgV1NETC4gV2hlbiB1c2luZyBMaXRlcmFsIGVuY29kaW5nLCBlYWNoIG1lc3NhZ2UgcGFydCByZWZlcmVuY2VzCi1hIGNvbmNyZXRlIHNjaGVtYSBkZWZpbml0aW9uLiBMaXRlcmFsIGVuY29kaW5nIGlzIFdTLUkgY29tcGxpYW50LjwvcD4gPC9scT48L3NlY3Rpb24+Ci08c2VjdGlvbj48dGl0bGU+RGF0YSBtb2RlbDwvdGl0bGU+PHA+VGhlIHB1cnBvc2Ugb2YgdGhlIFNPQVAgZGF0YSBtb2RlbCBpcwotdG8gcHJvdmlkZSBhIGxhbmd1YWdlLWluZGVwZW5kZW50IGFic3RyYWN0aW9uIGZvciBkYXRhIHR5cGVzIHVzZWQgYnkgY29tbW9uCi1wcm9ncmFtbWluZyBsYW5ndWFnZSB0eXBlcy4mbmJzcDtJdCBjb25zaXN0cyBvZjo8L3A+PHVsPgotPGxpPiA8dWljb250cm9sPlNpbXBsZSBYU0QgdHlwZXMuPC91aWNvbnRyb2w+Jm5ic3A7IEZvciBleGFtcGxlIGludCwgc3RyaW5nLAotYW5kIGRhdGUuPC9saT4KLTxsaT4gPHVpY29udHJvbD5Db21wb3VuZCB0eXBlcy48L3VpY29udHJvbD4mbmJzcDsgVGhlcmUgYXJlIHR3byBraW5kcyBvZiBjb21wb3VuZAotdHlwZXMsICA8dmFybmFtZT5zdHJ1Y3RzPC92YXJuYW1lPiBhbmQgIDx2YXJuYW1lPmFycmF5czwvdmFybmFtZT4uJm5ic3A7IFN0cnVjdHMKLWFyZSBuYW1lZCBhZ2dyZWdhdGUgdHlwZXMgaW4gd2hpY2ggZWFjaCBlbGVtZW50IGhhcyBhIHVuaXF1ZSBuYW1lIG9yIFhNTCB0YWcuJm5ic3A7Ci1BcnJheXMgaGF2ZSBlbGVtZW50cyB0aGF0IGFyZSBpZGVudGlmaWVkIGJ5IHBvc2l0aW9uLCBub3QgYnkgbmFtZS48L2xpPgotPC91bD48cD5BbGwgZWxlbWVudHMgYW5kIGlkZW50aWZpZXJzIGNvbXByaXNpbmcgdGhlIFNPQVAgZGF0YSBtb2RlbCBhcmUgZGVmaW5lZAotaW4gdGhlIG5hbWVzcGFjZSBVUkkuJm5ic3A7IFRoZSBTT0FQIHN0YW5kYXJkIGRlZmluZXMgdGhlIHJ1bGVzIGZvciBob3cgZGF0YQotdHlwZXMgY2FuIGJlIGNvbnN0cnVjdGVkLiBBIHByb2plY3Qgc3BlY2lmaWMgWE1MIHNjaGVtYSBtdXN0IGRlZmluZSB0aGUgYWN0dWFsCi1kYXRhIHR5cGVzLiBUaGUgZWxlbWVudHMgb2YgdGhlIFNPQVAgc3BlY2lmaWNhdGlvbiBhcmUgZGVmaW5lZCBpbiAgPHhyZWYgZm9ybWF0PSJodG1sIgotaHJlZj0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8iIHNjb3BlPSJleHRlcm5hbCI+aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS88L3hyZWY+IGFuZAotIDx4cmVmIGZvcm1hdD0iaHRtbCIgaHJlZj0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iIHNjb3BlPSJleHRlcm5hbCI+aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy88L3hyZWY+PC9wPjwvc2VjdGlvbj4KLTxzZWN0aW9uPjx0aXRsZT5TT0FQIGltcGxlbWVudGF0aW9uczwvdGl0bGU+PHA+RGlmZmVyZW50IGltcGxlbWVudGF0aW9ucyBvZgotdGhlIFNPQVAgcHJvdG9jb2wgYXJlIGF2YWlsYWJsZSB0b2RheS4mbmJzcDsgRm9yIGV4YW1wbGUsIHRoZSBBcGFjaGUgRm91bmRhdGlvbgotcHJvdmlkZXMgQXBhY2hlIFNPQVAsIHdoaWNoIGdyZXcgb3V0IG9mIGFuIDx0bSB0bWNsYXNzPSJpYm0iIHRtb3duZXI9IklCTSBDb3Jwb3JhdGlvbiIKLXRtdHlwZT0icmVnIiB0cmFkZW1hcms9IklCTSI+SUJNPC90bT4gcHJvamVjdCBjYWxsZWQgU09BUDRKLCBhcyB3ZWxsIGFzIEFwYWNoZQotQXhpcyBhbmQgdGhlIDx0bSB0bWNsYXNzPSJpYm0iIHRtb3duZXI9IklCTSBDb3Jwb3JhdGlvbiIgdG10eXBlPSJyZWciIHRyYWRlbWFyaz0iSUJNIj5JQk08L3RtPiA8dG0KLXRtY2xhc3M9ImlibSIgdG1vd25lcj0iSUJNIENvcnBvcmF0aW9uIiB0bXR5cGU9InJlZyIgdHJhZGVtYXJrPSJXZWJTcGhlcmUiPldlYlNwaGVyZTwvdG0+IHJ1bi10aW1lCi1lbnZpcm9ubWVudC4gVGhlIHByb3ZpZGVkIFdlYiBzZXJ2aWNlcyB0b29scyBzdXBwb3J0IEFwYWNoZSBTT0FQIDIuMywgQXhpcwotMS4zLCBhbmQgPHRtIHRtY2xhc3M9ImlibSIgdG1vd25lcj0iSUJNIENvcnBvcmF0aW9uIiB0bXR5cGU9InJlZyIgdHJhZGVtYXJrPSJJQk0iPklCTTwvdG0+IDx0bQotdG1jbGFzcz0iaWJtIiB0bW93bmVyPSJJQk0gQ29ycG9yYXRpb24iIHRtdHlwZT0icmVnIiB0cmFkZW1hcms9IldlYlNwaGVyZSI+V2ViU3BoZXJlPC90bT4gaW1wbGVtZW50YXRpb25zLjwvcD48L3NlY3Rpb24+Ci08c2VjdGlvbj48dGl0bGU+TWFwcGluZ3M8L3RpdGxlPjxwPkEgbWFwcGluZyBkZWZpbmVzIGFuIGFzc29jaWF0aW9uIGJldHdlZW4KLWEgcXVhbGlmaWVkIFhNTCBlbGVtZW50IG5hbWUsIGEgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBjbGFzcyBuYW1lLCBhbmQgYW4gZW5jb2Rpbmcgc3R5bGUuJm5ic3A7Ci1UaGUgbWFwcGluZyBzcGVjaWZpZXMgaG93LCB1bmRlciB0aGUgZ2l2ZW4gZW5jb2RpbmcsIGFuIGluY29taW5nIFhNTCBlbGVtZW50Ci13aXRoIGEgZnVsbHkgcXVhbGlmaWVkIG5hbWUgaXMgY29udmVydGVkIHRvIGEgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBjbGFzcyBhbmQgdmljZSB2ZXJzYS48L3A+PHA+Rm9yIG1vcmUKLWluZm9ybWF0aW9uIG9uIEFwYWNoZSBTT0FQLCByZWZlciB0byAgPHhyZWYgZm9ybWF0PSJodG1sIiBocmVmPSJodHRwOi8veG1sLmFwYWNoZS5vcmcvc29hcCIKLXNjb3BlPSJleHRlcm5hbCI+eG1sLmFwYWNoZS5vcmcvc29hcDwveHJlZj4mbmJzcDsgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24KLVNPQVAgcmVmZXIgdG8gIDx4cmVmIGZvcm1hdD0iaHRtbCIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvU09BUCIgc2NvcGU9ImV4dGVybmFsIj53d3cudzMub3JnL1RSL1NPQVA8L3hyZWY+IDwvcD48L3NlY3Rpb24+Ci08L2NvbmJvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBDb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSJjd3MuZGl0YSI+PGxpbmt0ZXh0PldlYiBzZXJ2aWNlcyBvdmVydmlldzwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iY3dzaW53c2EuZGl0YSI+PGxpbmt0ZXh0PlRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PgotPC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+Ci08bGluayBocmVmPSIuLi90YXNrcy90b3ZlcndzLmRpdGEiIHNjb3BlPSJwZWVyIj48bGlua3RleHQ+IERldmVsb3BpbmcgV2ViCi1zZXJ2aWNlczwvbGlua3RleHQ+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvY29uY2VwdD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2Nzb2FwLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jc29hcC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZWFmNjE4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2Nzb2FwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDciIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9ImNvbmNlcHQiIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iU09BUCIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJTT0FQIChmb3JtZXJseSBrbm93biBhcyBTaW1wbGUgT2JqZWN0IEFjY2VzcyBQcm90b2NvbCkgaXMgYSBsaWdodHdlaWdodCBwcm90b2NvbCBmb3IgdGhlIGV4Y2hhbmdlIG9mIGluZm9ybWF0aW9uIGluIGEgZGVjZW50cmFsaXplZCwgZGlzdHJpYnV0ZWQgZW52aXJvbm1lbnQuIEEgU09BUCBtZXNzYWdlIGlzIGEgdHJhbnNtaXNzaW9uIG9mIGluZm9ybWF0aW9uIGZyb20gYSBzZW5kZXIgdG8gYSByZWNlaXZlci4gU09BUCBtZXNzYWdlcyBjYW4gYmUgY29tYmluZWQgdG8gcGVyZm9ybSByZXF1ZXN0L3Jlc3BvbnNlIHBhdHRlcm5zLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJTT0FQIChmb3JtZXJseSBrbm93biBhcyBTaW1wbGUgT2JqZWN0IEFjY2VzcyBQcm90b2NvbCkgaXMgYSBsaWdodHdlaWdodCBwcm90b2NvbCBmb3IgdGhlIGV4Y2hhbmdlIG9mIGluZm9ybWF0aW9uIGluIGEgZGVjZW50cmFsaXplZCwgZGlzdHJpYnV0ZWQgZW52aXJvbm1lbnQuIEEgU09BUCBtZXNzYWdlIGlzIGEgdHJhbnNtaXNzaW9uIG9mIGluZm9ybWF0aW9uIGZyb20gYSBzZW5kZXIgdG8gYSByZWNlaXZlci4gU09BUCBtZXNzYWdlcyBjYW4gYmUgY29tYmluZWQgdG8gcGVyZm9ybSByZXF1ZXN0L3Jlc3BvbnNlIHBhdHRlcm5zLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IlNPQVAsIG92ZXJ2aWV3LCBXZWIgc2VydmljZXMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJTT0FQLCBvdmVydmlldywgV2ViIHNlcnZpY2VzIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iY3dzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9ImN3c2lud3NhLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3Rhc2tzL3RvdmVyd3MuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJjc29hcCIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPlNPQVA8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9ImNzb2FwIj48YSBuYW1lPSJjc29hcCI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+U09BUDwvaDE+Ci0KLQotCi08ZGl2PjxwPlNPQVAgKGZvcm1lcmx5IGtub3duIGFzIFNpbXBsZSBPYmplY3QgQWNjZXNzIFByb3RvY29sKSBpcyBhIGxpZ2h0d2VpZ2h0Ci1wcm90b2NvbCBmb3IgdGhlIGV4Y2hhbmdlIG9mIGluZm9ybWF0aW9uIGluIGEgZGVjZW50cmFsaXplZCwgZGlzdHJpYnV0ZWQgZW52aXJvbm1lbnQuCi1BIFNPQVAgbWVzc2FnZSBpcyBhIHRyYW5zbWlzc2lvbiBvZiBpbmZvcm1hdGlvbiBmcm9tIGEgc2VuZGVyIHRvIGEgcmVjZWl2ZXIuCi1TT0FQIG1lc3NhZ2VzIGNhbiBiZSBjb21iaW5lZCB0byBwZXJmb3JtIHJlcXVlc3QvcmVzcG9uc2UgcGF0dGVybnMuIDwvcD4KLQotPHA+U09BUCBpcyB0cmFuc3BvcnQgaW5kZXBlbmRlbnQgYnV0IGlzIG1vc3QgY29tbW9ubHkgY2FycmllZCBvdmVyIEhUVFAgaW4KLW9yZGVyIHRvIHJ1biB3aXRoIHRoZSBleGlzdGluZyBJbnRlcm5ldCBpbmZyYXN0cnVjdHVyZS7CoCBTT0FQIGVuYWJsZXMKLXRoZSBiaW5kaW5nIGFuZCB1c2FnZSBvZiBkaXNjb3ZlcmVkIFdlYiBzZXJ2aWNlcyBieSBkZWZpbmluZyBhIG1lc3NhZ2UgcGF0aAotZm9yIHJvdXRpbmcgbWVzc2FnZXMuIFNPQVAgaXMgdXNlZCB0byBxdWVyeSBVRERJIGZvciBXZWIgc2VydmljZXMuIFRoZSB3b3JrYmVuY2gKLXN1cHBvcnRzIFNPQVAgMS4xLjwvcD4KLQotPHA+U09BUCBpcyBhbiBYTUwtYmFzZWQgcHJvdG9jb2wgdGhhdCBkZWZpbmVzIHRocmVlIHBhcnRzIHRvIGV2ZXJ5IG1lc3NhZ2U6PC9wPgotCi08dWw+Ci08bGk+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkVudmVsb3BlLjwvc3Bhbj7CoCBUaGUgZW52ZWxvcGUgZGVmaW5lcyBhIGZyYW1ld29yawotZm9yIGRlc2NyaWJpbmcgd2hhdCBpcyBpbiBhIG1lc3NhZ2UgYW5kIGhvdyB0byBwcm9jZXNzIGl0LsKgIEEgU09BUCBtZXNzYWdlCi1pcyBhbiBlbnZlbG9wZSBjb250YWluaW5nIHplcm8gb3IgbW9yZSBoZWFkZXJzIGFuZCBleGFjdGx5IG9uZSBib2R5LsKgCi1UaGUgZW52ZWxvcGUgaXMgdGhlIHRvcCBlbGVtZW50IG9mIHRoZSBYTUwgZG9jdW1lbnQsIHByb3ZpZGluZyBhIGNvbnRhaW5lcgotZm9yIGNvbnRyb2wgaW5mb3JtYXRpb24sIHRoZSBhZGRyZXNzIG9mIGEgbWVzc2FnZSwgYW5kIHRoZSBtZXNzYWdlIGl0c2VsZi7CoAotSGVhZGVycyB0cmFuc3BvcnQgYW55IGNvbnRyb2wgaW5mb3JtYXRpb24gc3VjaCBhcyBxdWFsaXR5LW9mLXNlcnZpY2UgYXR0cmlidXRlcy7CoAotVGhlIGJvZHkgY29udGFpbnMgdGhlIG1lc3NhZ2UgaWRlbnRpZmljYXRpb24gYW5kIGl0cyBwYXJhbWV0ZXJzLsKgIEJvdGgKLXRoZSBoZWFkZXJzIGFuZCB0aGUgYm9keSBhcmUgY2hpbGQgZWxlbWVudHMgb2YgdGhlIGVudmVsb3BlLjwvbGk+Ci0KLTxsaT4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RW5jb2RpbmcgcnVsZXMuPC9zcGFuPsKgIFRoZSBzZXQgb2YgZW5jb2RpbmcgcnVsZXMKLWV4cHJlc3NlcyBpbnN0YW5jZXMgb2YgYXBwbGljYXRpb24tZGVmaW5lZCBkYXRhIHR5cGVzLiBFbmNvZGluZyBydWxlcyBkZWZpbmUKLWEgc2VyaWFsaXphdGlvbiBtZWNoYW5pc20gdGhhdCBjYW4gYmUgdXNlZCB0byBleGNoYW5nZSBpbnN0YW5jZXMgb2YgYXBwbGljYXRpb24tZGVmaW5lZAotZGF0YSB0eXBlcy4gU09BUCBkZWZpbmVzIGEgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UtaW5kZXBlbmRlbnQgZGF0YSB0eXBlIHNjaGVtZQotYmFzZWQgb24gWFNEIHBsdXMgZW5jb2RpbmcgcnVsZXMgZm9yIGFsbCBkYXRhIHR5cGVzIGRlZmluZWQgYWNjb3JkaW5nIHRvIHRoaXMKLW1vZGVsLiBTT0FQIGVuY29kaW5nIGlzIG5vdCBXUy1JIGNvbXBsaWFudCBhbmQgdGh1cyB0aGUgTGl0ZXJhbCB1c2UgKHdoaWNoCi1pcyBubyBlbmNvZGluZykgaXMgc3VnZ2VzdGVkIGZvciBpbnRlcm9wZXJhYmxlIFdlYiBzZXJ2aWNlcyBhbmQgcmVxdWlyZWQgZm9yCi1XUy1JIGNvbXBsaWFuY2UuPC9saT4KLQotPGxpPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Db21tdW5pY2F0aW9uIHN0eWxlcy48L3NwYW4+IENvbW11bmljYXRpb25zIGNhbiBmb2xsb3cKLWEgcmVtb3RlIHByb2NlZHVyZSBjYWxsIChSUEMpIG9yIG1lc3NhZ2Utb3JpZW50ZWQgKERvY3VtZW50KSBmb3JtYXQuwqAKLVRoZXNlIGFyZSBkaXNjdXNzZWQgYmVsb3cuPC9saT4KLQotPC91bD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PGg0IGNsYXNzPSJzZWN0aW9udGl0bGUiPkJpbmRpbmcgc3R5bGVzPC9oND48cD5TT0FQIHN1cHBvcnRzIHR3byBkaWZmZXJlbnQgY29tbXVuaWNhdGlvbgotc3R5bGVzOjwvcD4KLTxibG9ja3F1b3RlPiA8cD4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+UmVtb3RlIHByb2NlZHVyZSBjYWxsIChSUEMpOjwvc3Bhbj7CoAotSW52b2NhdGlvbiBvZiBhbiBvcGVyYXRpb24gcmV0dXJuaW5nIGEgcmVzdWx0LiBUeXBpY2FsbHkgdXNlZCB3aXRoIFNPQVAgZW5jb2RpbmcsCi13aGljaCBpcyBub3QgV1MtSSBjb21wbGlhbnQuPC9wPgotPHA+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkRvY3VtZW50IFN0eWxlOjwvc3Bhbj7CoAotQWxzbyBrbm93biBhcyBkb2N1bWVudC1vcmllbnRlZCBvciBtZXNzYWdlLW9yaWVudGVkIHN0eWxlLsKgIFRoaXMgc3R5bGUKLXByb3ZpZGVzIGEgbG93ZXIgbGF5ZXIgb2YgYWJzdHJhY3Rpb24sIGFuZCByZXF1aXJlcyBtb3JlIHByb2dyYW1taW5nIHdvcmsuPC9wPgotIDwvYmxvY2txdW90ZT4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48aDQgY2xhc3M9InNlY3Rpb250aXRsZSI+RW5jb2Rpbmcgc3R5bGVzPC9oND48cD5JbiBkaXN0cmlidXRlZCBjb21wdXRpbmcgZW52aXJvbm1lbnRzLAotZW5jb2Rpbmcgc3R5bGVzIGRlZmluZSBob3cgZGF0YSB2YWx1ZXMgZGVmaW5lZCBpbiB0aGUgYXBwbGljYXRpb24gY2FuIGJlIHRyYW5zbGF0ZWQKLXRvIGFuZCBmcm9tIGEgcGFydGljdWxhciBwcm90b2NvbCBmb3JtYXQuwqAgVGhlIHRyYW5zbGF0aW9uIHByb2Nlc3MgaXMKLWtub3cgYXMgc2VyaWFsaXphdGlvbiBhbmQgZGVzZXJpYWxpemF0aW9uLjwvcD4KLTxwPlRoZSBTT0FQIHNwZWNpZmljYXRpb24gZGVmaW5lcwotdGhlIFNPQVAgZW5jb2Rpbmcgc3R5bGU6PC9wPgotPGJsb2NrcXVvdGU+IDxwPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5TT0FQIGVuY29kaW5nOjwvc3Bhbj7CoAotVGhlIFNPQVAgZW5jb2Rpbmcgc3R5bGUgYWxsb3dzIHlvdSB0byBzZXJpYWxpemUvZGVzZXJpYWxpemUgdmFsdWVzIG9mIGRhdGEKLXR5cGVzIGZyb20gdGhlIFNPQVAgZGF0YSBtb2RlbC7CoCBUaGlzIGVuY29kaW5nIHN0eWxlIGlzIGRlZmluZWQgaW4gdGhlCi1TT0FQIDEuMSBzdGFuZGFyZCwgYW5kIGlzIG5vdCBXUy1JIGNvbXBsaWFudC48L3A+Ci0gPC9ibG9ja3F1b3RlPgotPHA+V1NETCBkZWZpbmVzIHRoZQotTGl0ZXJhbCBYTUwgZW5jb2Rpbmcgc3R5bGU6PC9wPgotPGJsb2NrcXVvdGU+IDxwPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5MaXRlcmFsIFhNTDo8L3NwYW4+wqAKLUxpdGVyYWwgcmVmZXJzIHRvIHRoZSBmYWN0IHRoYXQgdGhlIGRvY3VtZW50IHNob3VsZCBiZSByZWFkIGFzLWlzLCBvciB1bmVuY29kZWQuCi1UaGUgZG9jdW1lbnQgaXMgc2VyaWFsaXplZCBhcyBYTUksIG1lYW5pbmcgdGhhdCB0aGUgbWVzc2FnZSBYTUwgY29tcGxpZXMgd2l0aAotdGhlIFNjaGVtYSBpbiB0aGUgV1NETC4gV2hlbiB1c2luZyBMaXRlcmFsIGVuY29kaW5nLCBlYWNoIG1lc3NhZ2UgcGFydCByZWZlcmVuY2VzCi1hIGNvbmNyZXRlIHNjaGVtYSBkZWZpbml0aW9uLiBMaXRlcmFsIGVuY29kaW5nIGlzIFdTLUkgY29tcGxpYW50LjwvcD4KLSA8L2Jsb2NrcXVvdGU+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PGg0IGNsYXNzPSJzZWN0aW9udGl0bGUiPkRhdGEgbW9kZWw8L2g0PjxwPlRoZSBwdXJwb3NlIG9mIHRoZSBTT0FQIGRhdGEgbW9kZWwgaXMKLXRvIHByb3ZpZGUgYSBsYW5ndWFnZS1pbmRlcGVuZGVudCBhYnN0cmFjdGlvbiBmb3IgZGF0YSB0eXBlcyB1c2VkIGJ5IGNvbW1vbgotcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgdHlwZXMuwqBJdCBjb25zaXN0cyBvZjo8L3A+Ci08dWw+Ci08bGk+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlNpbXBsZSBYU0QgdHlwZXMuPC9zcGFuPsKgIEZvciBleGFtcGxlIGludCwgc3RyaW5nLAotYW5kIGRhdGUuPC9saT4KLQotPGxpPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Db21wb3VuZCB0eXBlcy48L3NwYW4+wqAgVGhlcmUgYXJlIHR3byBraW5kcyBvZiBjb21wb3VuZAotdHlwZXMsICA8dmFyIGNsYXNzPSJ2YXJuYW1lIj5zdHJ1Y3RzPC92YXI+IGFuZCAgPHZhciBjbGFzcz0idmFybmFtZSI+YXJyYXlzPC92YXI+LsKgIFN0cnVjdHMKLWFyZSBuYW1lZCBhZ2dyZWdhdGUgdHlwZXMgaW4gd2hpY2ggZWFjaCBlbGVtZW50IGhhcyBhIHVuaXF1ZSBuYW1lIG9yIFhNTCB0YWcuwqAKLUFycmF5cyBoYXZlIGVsZW1lbnRzIHRoYXQgYXJlIGlkZW50aWZpZWQgYnkgcG9zaXRpb24sIG5vdCBieSBuYW1lLjwvbGk+Ci0KLTwvdWw+Ci08cD5BbGwgZWxlbWVudHMgYW5kIGlkZW50aWZpZXJzIGNvbXByaXNpbmcgdGhlIFNPQVAgZGF0YSBtb2RlbCBhcmUgZGVmaW5lZAotaW4gdGhlIG5hbWVzcGFjZSBVUkkuwqAgVGhlIFNPQVAgc3RhbmRhcmQgZGVmaW5lcyB0aGUgcnVsZXMgZm9yIGhvdyBkYXRhCi10eXBlcyBjYW4gYmUgY29uc3RydWN0ZWQuIEEgcHJvamVjdCBzcGVjaWZpYyBYTUwgc2NoZW1hIG11c3QgZGVmaW5lIHRoZSBhY3R1YWwKLWRhdGEgdHlwZXMuIFRoZSBlbGVtZW50cyBvZiB0aGUgU09BUCBzcGVjaWZpY2F0aW9uIGFyZSBkZWZpbmVkIGluICA8YSBocmVmPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvPC9hPiBhbmQKLSA8YSBocmVmPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvPC9hPjwvcD4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48aDQgY2xhc3M9InNlY3Rpb250aXRsZSI+U09BUCBpbXBsZW1lbnRhdGlvbnM8L2g0PjxwPkRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbnMgb2YKLXRoZSBTT0FQIHByb3RvY29sIGFyZSBhdmFpbGFibGUgdG9kYXkuwqAgRm9yIGV4YW1wbGUsIHRoZSBBcGFjaGUgRm91bmRhdGlvbgotcHJvdmlkZXMgQXBhY2hlIFNPQVAsIHdoaWNoIGdyZXcgb3V0IG9mIGFuIElCTTxzdXA+wq48L3N1cD4gcHJvamVjdCBjYWxsZWQgU09BUDRKLCBhcyB3ZWxsIGFzIEFwYWNoZQotQXhpcyBhbmQgdGhlIElCTSBXZWJTcGhlcmU8c3VwPsKuPC9zdXA+IHJ1bi10aW1lCi1lbnZpcm9ubWVudC4gVGhlIHByb3ZpZGVkIFdlYiBzZXJ2aWNlcyB0b29scyBzdXBwb3J0IEFwYWNoZSBTT0FQIDIuMywgQXhpcwotMS4zLCBhbmQgSUJNIFdlYlNwaGVyZSBpbXBsZW1lbnRhdGlvbnMuPC9wPgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxoNCBjbGFzcz0ic2VjdGlvbnRpdGxlIj5NYXBwaW5nczwvaDQ+PHA+QSBtYXBwaW5nIGRlZmluZXMgYW4gYXNzb2NpYXRpb24gYmV0d2VlbgotYSBxdWFsaWZpZWQgWE1MIGVsZW1lbnQgbmFtZSwgYSBKYXZh4oSiIGNsYXNzIG5hbWUsIGFuZCBhbiBlbmNvZGluZyBzdHlsZS7CoAotVGhlIG1hcHBpbmcgc3BlY2lmaWVzIGhvdywgdW5kZXIgdGhlIGdpdmVuIGVuY29kaW5nLCBhbiBpbmNvbWluZyBYTUwgZWxlbWVudAotd2l0aCBhIGZ1bGx5IHF1YWxpZmllZCBuYW1lIGlzIGNvbnZlcnRlZCB0byBhIEphdmEgY2xhc3MgYW5kIHZpY2UgdmVyc2EuPC9wPgotPHA+Rm9yIG1vcmUKLWluZm9ybWF0aW9uIG9uIEFwYWNoZSBTT0FQLCByZWZlciB0byAgPGEgaHJlZj0iaHR0cDovL3htbC5hcGFjaGUub3JnL3NvYXAiIHRhcmdldD0iX2JsYW5rIj54bWwuYXBhY2hlLm9yZy9zb2FwPC9hPsKgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uCi1TT0FQIHJlZmVyIHRvICA8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9TT0FQIiB0YXJnZXQ9Il9ibGFuayI+d3d3LnczLm9yZy9UUi9TT0FQPC9hPiA8L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIENvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iY3dzLmh0bWwiIHRpdGxlPSJBIFdlYiBzZXJ2aWNlIGlzIGEgc2V0IG9mIHJlbGF0ZWQgYXBwbGljYXRpb24gZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHByb2dyYW1tYXRpY2FsbHkgaW52b2tlZCBvdmVyIHRoZSBJbnRlcm5ldC4gQnVzaW5lc3NlcyBjYW4gZHluYW1pY2FsbHkgbWl4IGFuZCBtYXRjaCBXZWIgc2VydmljZXMgdG8gcGVyZm9ybSBjb21wbGV4IHRyYW5zYWN0aW9ucyB3aXRoIG1pbmltYWwgcHJvZ3JhbW1pbmcuIFdlYiBzZXJ2aWNlcyBhbGxvdyBidXllcnMgYW5kIHNlbGxlcnMgYWxsIG92ZXIgdGhlIHdvcmxkIHRvIGRpc2NvdmVyIGVhY2ggb3RoZXIsIGNvbm5lY3QgZHluYW1pY2FsbHksIGFuZCBleGVjdXRlIHRyYW5zYWN0aW9ucyBpbiByZWFsIHRpbWUgd2l0aCBtaW5pbWFsIGh1bWFuIGludGVyYWN0aW9uLiI+V2ViIHNlcnZpY2VzIG92ZXJ2aWV3PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJjd3NpbndzYS5odG1sIiB0aXRsZT0iIj5Ub29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vdGFza3MvdG92ZXJ3cy5odG1sIj4gRGV2ZWxvcGluZyBXZWIKLXNlcnZpY2VzPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMGU2Mjg2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+Ci08IURPQ1RZUEUgY29uY2VwdCBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBDb25jZXB0Ly9FTiIKLSAiY29uY2VwdC5kdGQiPgotPGNvbmNlcHQgaWQ9ImN3cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5XZWIgc2VydmljZXMgb3ZlcnZpZXc8L3RpdGxlPgotPHNob3J0ZGVzYz5BIFdlYiBzZXJ2aWNlIGlzIGEgc2V0IG9mIHJlbGF0ZWQgYXBwbGljYXRpb24gZnVuY3Rpb25zIHRoYXQgY2FuCi1iZSBwcm9ncmFtbWF0aWNhbGx5IGludm9rZWQgb3ZlciB0aGUgSW50ZXJuZXQuIEJ1c2luZXNzZXMgY2FuIGR5bmFtaWNhbGx5Ci1taXggYW5kIG1hdGNoIFdlYiBzZXJ2aWNlcyB0byBwZXJmb3JtIGNvbXBsZXggdHJhbnNhY3Rpb25zIHdpdGggbWluaW1hbCBwcm9ncmFtbWluZy4KLVdlYiBzZXJ2aWNlcyBhbGxvdyBidXllcnMgYW5kIHNlbGxlcnMgYWxsIG92ZXIgdGhlIHdvcmxkIHRvIGRpc2NvdmVyIGVhY2gKLW90aGVyLCBjb25uZWN0IGR5bmFtaWNhbGx5LCBhbmQgZXhlY3V0ZSB0cmFuc2FjdGlvbnMgaW4gcmVhbCB0aW1lIHdpdGggbWluaW1hbAotaHVtYW4gaW50ZXJhY3Rpb24uPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+b3ZlcnZpZXc8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPGNvbmJvZHk+Ci08cD5XZWIgc2VydmljZXMgYXJlIHNlbGYtY29udGFpbmVkLCBzZWxmLWRlc2NyaWJpbmcgbW9kdWxhciBhcHBsaWNhdGlvbnMgdGhhdAotY2FuIGJlIHB1Ymxpc2hlZCwgbG9jYXRlZCwgYW5kIGludm9rZWQgYWNyb3NzIHRoZSBXZWIuPC9wPgotPGxxPiA8cD4gPHVpY29udHJvbD5XZWIgc2VydmljZXMgYXJlIHNlbGYtY29udGFpbmVkLjwvdWljb250cm9sPiBPbiB0aGUgY2xpZW50Ci1zaWRlLCBubyBhZGRpdGlvbmFsIHNvZnR3YXJlIGlzIHJlcXVpcmVkLiZuYnNwOyBBIHByb2dyYW1taW5nIGxhbmd1YWdlIHdpdGgKLVhNTCBhbmQgSFRUUCBjbGllbnQgc3VwcG9ydCBpcyBlbm91Z2ggdG8gZ2V0IHlvdSBzdGFydGVkLiZuYnNwOyBPbiB0aGUgc2VydmVyCi1zaWRlLCBhIFdlYiBzZXJ2ZXIgYW5kIHNlcnZsZXQgZW5naW5lIGFyZSByZXF1aXJlZC4mbmJzcDsgVGhlIGNsaWVudCBhbmQgc2VydmVyCi1jYW4gYmUgaW1wbGVtZW50ZWQgaW4gZGlmZmVyZW50IGVudmlyb25tZW50cy4mbmJzcDsgSXQgaXMgcG9zc2libGUgdG8gV2ViCi1zZXJ2aWNlIGVuYWJsZSBhbiBleGlzdGluZyBhcHBsaWNhdGlvbiB3aXRob3V0IHdyaXRpbmcgYSBzaW5nbGUgbGluZSBvZiBjb2RlLjwvcD4gPHA+IDx1aWNvbnRyb2w+V2ViCi1zZXJ2aWNlcyBhcmUgc2VsZi1kZXNjcmliaW5nLjwvdWljb250cm9sPiBUaGUgY2xpZW50IGFuZCBzZXJ2ZXIgbmVlZCB0byByZWNvZ25pemUKLW9ubHkgdGhlIGZvcm1hdCBhbmQgY29udGVudCBvZiByZXF1ZXN0IGFuZCByZXNwb25zZSBtZXNzYWdlcy4mbmJzcDsgVGhlIGRlZmluaXRpb24KLW9mIHRoZSBtZXNzYWdlIGZvcm1hdCB0cmF2ZWxzIHdpdGggdGhlIG1lc3NhZ2U7IG5vIGV4dGVybmFsIG1ldGFkYXRhIHJlcG9zaXRvcmllcwotb3IgY29kZSBnZW5lcmF0aW9uIHRvb2xzIGFyZSByZXF1aXJlZC48L3A+IDxwPiA8dWljb250cm9sPldlYiBzZXJ2aWNlcyBhcmUKLW1vZHVsYXIuPC91aWNvbnRyb2w+IFNpbXBsZSBXZWIgc2VydmljZXMgY2FuIGJlIGFnZ3JlZ2F0ZWQgdG8gZm9ybSBtb3JlIGNvbXBsZXgKLVdlYiBzZXJ2aWNlcyBlaXRoZXIgYnkgdXNpbmcgd29ya2Zsb3cgdGVjaG5pcXVlcyBvciBieSBjYWxsaW5nIGxvd2VyIGxheWVyCi1XZWIgc2VydmljZXMgZnJvbSBhIFdlYiBzZXJ2aWNlIGltcGxlbWVudGF0aW9uLjwvcD48cD48dWljb250cm9sPldlYiBTZXJ2aWNlcwotYXJlIHBsYXRmb3JtIGluZGVwZW5kZW50LjwvdWljb250cm9sPiBXZWIgc2VydmljZXMgYXJlIGJhc2VkIG9uIGEgY29uY2lzZQotc2V0IG9mIG9wZW4sIFhNTC1iYXNlZCBzdGFuZGFyZHMgZGVzaWduZWQgdG8gcHJvbW90ZSBpbnRlcm9wZXJhYmlsaXR5IGJldHdlZW4KLWEgV2ViIHNlcnZpY2UgYW5kIGNsaWVudHMgYWNyb3NzIGEgdmFyaWV0eSBvZiBjb21wdXRpbmcgcGxhdGZvcm1zIGFuZCBwcm9ncmFtbWluZwotbGFuZ3VhZ2VzLjwvcD4gPC9scT4KLTxwPldlYiBzZXJ2aWNlcyBtaWdodCBiZSBhbnl0aGluZywgZm9yIGV4YW1wbGUsIHRoZWF0cmUgcmV2aWV3IGFydGljbGVzLCB3ZWF0aGVyCi1yZXBvcnRzLCBjcmVkaXQgY2hlY2tzLCBzdG9jayBxdW90YXRpb25zLCB0cmF2ZWwgYWR2aXNvcmllcywgb3IgYWlybGluZSB0cmF2ZWwKLXJlc2VydmF0aW9uIHByb2Nlc3Nlcy4gRWFjaCBvZiB0aGVzZSBzZWxmLWNvbnRhaW5lZCBidXNpbmVzcyBzZXJ2aWNlcyBpcyBhbgotYXBwbGljYXRpb24gdGhhdCBjYW4gZWFzaWx5IGludGVncmF0ZSB3aXRoIG90aGVyIHNlcnZpY2VzLCBmcm9tIHRoZSBzYW1lIG9yCi1kaWZmZXJlbnQgY29tcGFuaWVzLCB0byBjcmVhdGUgYSBjb21wbGV0ZSBidXNpbmVzcyBwcm9jZXNzLiBUaGlzIGludGVyb3BlcmFiaWxpdHkKLWFsbG93cyBidXNpbmVzc2VzIHRvIGR5bmFtaWNhbGx5IHB1Ymxpc2gsIGRpc2NvdmVyLCBhbmQgYmluZCBhIHJhbmdlIG9mIFdlYgotc2VydmljZXMgdGhyb3VnaCB0aGUgSW50ZXJuZXQuPC9wPgotPHNlY3Rpb24+PHRpdGxlPkNhdGVnb3JpZXMgb2YgV2ViIHNlcnZpY2VzPC90aXRsZT48cD5XZWIgc2VydmljZXMgY2FuIGJlIGdyb3VwZWQKLWludG8gdGhyZWUgY2F0ZWdvcmllczo8L3A+PGxxPiA8cD4gPHVpY29udHJvbD5CdXNpbmVzcyBpbmZvcm1hdGlvbi48L3VpY29udHJvbD4gQQotYnVzaW5lc3Mgc2hhcmVzIGluZm9ybWF0aW9uIHdpdGggY29uc3VtZXJzIG9yIG90aGVyIGJ1c2luZXNzZXMuIEluIHRoaXMgY2FzZSwKLXRoZSBidXNpbmVzcyBpcyB1c2luZyBXZWIgc2VydmljZXMgdG8gZXhwYW5kIGl0cyBzY29wZS4gRXhhbXBsZXMgb2YgYnVzaW5lc3MKLWluZm9ybWF0aW9uYWwgV2ViIHNlcnZpY2VzIGFyZSBuZXdzIHN0cmVhbXMsIHdlYXRoZXIgcmVwb3J0cywgb3Igc3RvY2sgcXVvdGF0aW9ucy48L3A+IDxwPiA8dWljb250cm9sPkJ1c2luZXNzCi1pbnRlZ3JhdGlvbi48L3VpY29udHJvbD4gQSBidXNpbmVzcyBwcm92aWRlcyB0cmFuc2FjdGlvbmFsLCAiZm9yIGZlZSIgc2VydmljZXMKLXRvIGl0cyBjdXN0b21lcnMuIEluIHRoaXMgY2FzZSwgdGhlIGJ1c2luZXNzIGJlY29tZXMgcGFydCBvZiBhIGdsb2JhbCBuZXR3b3JrCi1vZiB2YWx1ZS1hZGRlZCBzdXBwbGllcnMgdGhhdCBjYW4gYmUgdXNlZCB0byBjb25kdWN0IGNvbW1lcmNlLiBFeGFtcGxlcyBvZgotYnVzaW5lc3MgaW50ZWdyYXRpb24gV2ViIHNlcnZpY2VzIGluY2x1ZGUgYmlkIGFuZCBhdWN0aW9uIGUtbWFya2V0cGxhY2VzLAotcmVzZXJ2YXRpb24gc3lzdGVtcywgYW5kIGNyZWRpdCBjaGVja2luZy48L3A+IDxwPiA8dWljb250cm9sPkJ1c2luZXNzIHByb2Nlc3MKLWV4dGVybmFsaXphdGlvbi48L3VpY29udHJvbD4gQSBidXNpbmVzcyBkaWZmZXJlbnRpYXRlcyBpdHNlbGYgZnJvbSBpdHMgY29tcGV0aXRpb24KLXRocm91Z2ggdGhlIGNyZWF0aW9uIG9mIGEgZ2xvYmFsIHZhbHVlIGNoYWluLiBJbiB0aGlzIGNhc2UsIHRoZSBidXNpbmVzcyB1c2VzCi1XZWIgc2VydmljZXMgdG8gZHluYW1pY2FsbHkgaW50ZWdyYXRlIGl0cyBwcm9jZXNzZXMuIEFuIGV4YW1wbGUgb2YgYnVzaW5lc3MKLXByb2Nlc3MgZXh0ZXJuYWxpemF0aW9uIFdlYiBzZXJ2aWNlcyBpcyB0aGUgYXNzb2NpYXRpb25zIGJldHdlZW4gZGlmZmVyZW50Ci1jb21wYW5pZXMgdG8gY29tYmluZSBtYW51ZmFjdHVyaW5nLCBhc3NlbWJseSwgd2hvbGVzYWxlIGRpc3RyaWJ1dGlvbiwgYW5kCi1yZXRhaWwgc2FsZXMgb2YgYSBwYXJ0aWN1bGFyIHByb2R1Y3QuPC9wPiA8L2xxPjwvc2VjdGlvbj4KLTxzZWN0aW9uPjx0aXRsZT5TZXJ2aWNlIHJvbGVzIGFuZCBpbnRlcmFjdGlvbnM8L3RpdGxlPjxwPkEgbmV0d29yayBjb21wb25lbnQKLWluIGEgV2ViIFNlcnZpY2VzIGFyY2hpdGVjdHVyZSBjYW4gcGxheSBvbmUgb3IgbW9yZSBmdW5kYW1lbnRhbCByb2xlczogc2VydmljZQotcHJvdmlkZXIsIHNlcnZpY2UgYnJva2VyLCBhbmQgc2VydmljZSBjbGllbnQuPC9wPjx1bD4KLTxsaT5TZXJ2aWNlIHByb3ZpZGVycyBjcmVhdGUgYW5kIGRlcGxveSB0aGVpciBXZWIgc2VydmljZXMgYW5kIGNhbiBwdWJsaXNoCi10aGUgYXZhaWxhYmlsaXR5IG9mIHRoZWlyIFdTREwtZGVzY3JpYmVkIHNlcnZpY2VzIHRocm91Z2ggYSBzZXJ2aWNlIHJlZ2lzdHJ5LAotc3VjaCBhcyBhIFVEREkgQnVzaW5lc3MgUmVnaXN0cnkuPC9saT4KLTxsaT5TZXJ2aWNlIGJyb2tlcnMgcmVnaXN0ZXIgYW5kIGNhdGVnb3JpemUgcHVibGlzaGVkIHNlcnZpY2VzIGFuZCBwcm92aWRlCi1zZWFyY2ggc2VydmljZXMuIEZvciBleGFtcGxlLCBVRERJIGFjdHMgYXMgYSBzZXJ2aWNlIGJyb2tlciBmb3IgV1NETC1kZXNjcmliZWQKLVdlYiBzZXJ2aWNlcy48L2xpPgotPGxpPlNlcnZpY2UgY2xpZW50cyB1c2UgYnJva2VyIHNlcnZpY2VzIHN1Y2ggYXMgdGhlIFVEREkgQnVzaW5lc3MgUmVnaXN0cnkKLXRvIGRpc2NvdmVyIGEgbmVlZGVkIFdTREwtZGVzY3JpYmVkIHNlcnZpY2UgYW5kIHRoZW4gYmluZCB0byBhbmQgY2FsbCB0aGUKLXNlcnZpY2UgcHJvdmlkZXIuPC9saT4KLTwvdWw+PHA+QmluZGluZyBpbnZvbHZlcyBlc3RhYmxpc2hpbmcgYWxsIGVudmlyb25tZW50YWwgcHJlcmVxdWlzaXRlcyB0aGF0Ci1hcmUgbmVjZXNzYXJ5IHRvIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZSB0aGUgc2VydmljZXMuIEV4YW1wbGVzIG9mIGVudmlyb25tZW50YWwKLXByZXJlcXVpc2l0ZXMgaW5jbHVkZSBzZWN1cml0eSwgdHJhbnNhY3Rpb24gbW9uaXRvcmluZywgYW5kIEhUVFAgYXZhaWxhYmlsaXR5LgotVGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVzZSByb2xlcyBhcmUgZGVzY3JpYmVkIGluIEZpZ3VyZSAxLjwvcD48cD5GaWd1cmUKLTEuIFNlcnZpY2Ugcm9sZXMgYW5kIGludGVyYWN0aW9ucy48L3A+PHA+IDxpbWFnZSBhbHQ9IkZpZ3VyZSAxIGlsbHVzdHJhdGVzIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGUgc2VydmljZSBicm9rZXIsIHNlcnZpY2UgcHJvdmlkZXIsIGFuZCBzZXJ2aWNlIHJlcXVlc3Rvci4iCi1ocmVmPSIuLi9pbWFnZXMvcm9sZXMuZ2lmIj48L2ltYWdlPiA8L3A+PHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gb24gV2ViIHNlcnZpY2VzLAotcmVmZXIgdG8gIDx4cmVmIGZvcm1hdD0iaHRtbCIgaHJlZj0iaHR0cDovL3d3dy5pYm0uY29tL2RldmVsb3BlcndvcmtzL3dlYnNlcnZpY2VzIgotc2NvcGU9ImV4dGVybmFsIj53d3cuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy93ZWJzZXJ2aWNlczwveHJlZj48L3A+PC9zZWN0aW9uPgotPC9jb25ib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgQ29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iY3dzaW53c2EuZGl0YSI+PGxpbmt0ZXh0PlRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PgotPC9saW5rPgotPGxpbmsgaHJlZj0iY3dzc3RhbmRhcmRzLmRpdGEiIHNjb3BlPSJsb2NhbCI+PGxpbmt0ZXh0PldlYiBzZXJ2aWNlcyBzdGFuZGFyZHM8L2xpbmt0ZXh0PgotPC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+Ci08bGluayBocmVmPSIuLi90YXNrcy90b3ZlcndzLmRpdGEiIHNjb3BlPSJsb2NhbCI+PGxpbmt0ZXh0PiBEZXZlbG9waW5nIFdlYgotc2VydmljZXM8L2xpbmt0ZXh0PjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L2NvbmNlcHQ+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3MuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MGQ3Y2UxLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3cy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTM3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA3IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJjb25jZXB0IiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcyBvdmVydmlldyIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJBIFdlYiBzZXJ2aWNlIGlzIGEgc2V0IG9mIHJlbGF0ZWQgYXBwbGljYXRpb24gZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHByb2dyYW1tYXRpY2FsbHkgaW52b2tlZCBvdmVyIHRoZSBJbnRlcm5ldC4gQnVzaW5lc3NlcyBjYW4gZHluYW1pY2FsbHkgbWl4IGFuZCBtYXRjaCBXZWIgc2VydmljZXMgdG8gcGVyZm9ybSBjb21wbGV4IHRyYW5zYWN0aW9ucyB3aXRoIG1pbmltYWwgcHJvZ3JhbW1pbmcuIFdlYiBzZXJ2aWNlcyBhbGxvdyBidXllcnMgYW5kIHNlbGxlcnMgYWxsIG92ZXIgdGhlIHdvcmxkIHRvIGRpc2NvdmVyIGVhY2ggb3RoZXIsIGNvbm5lY3QgZHluYW1pY2FsbHksIGFuZCBleGVjdXRlIHRyYW5zYWN0aW9ucyBpbiByZWFsIHRpbWUgd2l0aCBtaW5pbWFsIGh1bWFuIGludGVyYWN0aW9uLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJBIFdlYiBzZXJ2aWNlIGlzIGEgc2V0IG9mIHJlbGF0ZWQgYXBwbGljYXRpb24gZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHByb2dyYW1tYXRpY2FsbHkgaW52b2tlZCBvdmVyIHRoZSBJbnRlcm5ldC4gQnVzaW5lc3NlcyBjYW4gZHluYW1pY2FsbHkgbWl4IGFuZCBtYXRjaCBXZWIgc2VydmljZXMgdG8gcGVyZm9ybSBjb21wbGV4IHRyYW5zYWN0aW9ucyB3aXRoIG1pbmltYWwgcHJvZ3JhbW1pbmcuIFdlYiBzZXJ2aWNlcyBhbGxvdyBidXllcnMgYW5kIHNlbGxlcnMgYWxsIG92ZXIgdGhlIHdvcmxkIHRvIGRpc2NvdmVyIGVhY2ggb3RoZXIsIGNvbm5lY3QgZHluYW1pY2FsbHksIGFuZCBleGVjdXRlIHRyYW5zYWN0aW9ucyBpbiByZWFsIHRpbWUgd2l0aCBtaW5pbWFsIGh1bWFuIGludGVyYWN0aW9uLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcywgb3ZlcnZpZXciIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIG92ZXJ2aWV3IiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iY3dzaW53c2EuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iY3dzc3RhbmRhcmRzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3Rhc2tzL3RvdmVyd3MuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJjd3MiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5XZWIgc2VydmljZXMgb3ZlcnZpZXc8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9ImN3cyI+PGEgbmFtZT0iY3dzIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5XZWIgc2VydmljZXMgb3ZlcnZpZXc8L2gxPgotCi0KLQotPGRpdj48cD5BIFdlYiBzZXJ2aWNlIGlzIGEgc2V0IG9mIHJlbGF0ZWQgYXBwbGljYXRpb24gZnVuY3Rpb25zIHRoYXQgY2FuCi1iZSBwcm9ncmFtbWF0aWNhbGx5IGludm9rZWQgb3ZlciB0aGUgSW50ZXJuZXQuIEJ1c2luZXNzZXMgY2FuIGR5bmFtaWNhbGx5Ci1taXggYW5kIG1hdGNoIFdlYiBzZXJ2aWNlcyB0byBwZXJmb3JtIGNvbXBsZXggdHJhbnNhY3Rpb25zIHdpdGggbWluaW1hbCBwcm9ncmFtbWluZy4KLVdlYiBzZXJ2aWNlcyBhbGxvdyBidXllcnMgYW5kIHNlbGxlcnMgYWxsIG92ZXIgdGhlIHdvcmxkIHRvIGRpc2NvdmVyIGVhY2gKLW90aGVyLCBjb25uZWN0IGR5bmFtaWNhbGx5LCBhbmQgZXhlY3V0ZSB0cmFuc2FjdGlvbnMgaW4gcmVhbCB0aW1lIHdpdGggbWluaW1hbAotaHVtYW4gaW50ZXJhY3Rpb24uPC9wPgotCi08cD5XZWIgc2VydmljZXMgYXJlIHNlbGYtY29udGFpbmVkLCBzZWxmLWRlc2NyaWJpbmcgbW9kdWxhciBhcHBsaWNhdGlvbnMgdGhhdAotY2FuIGJlIHB1Ymxpc2hlZCwgbG9jYXRlZCwgYW5kIGludm9rZWQgYWNyb3NzIHRoZSBXZWIuPC9wPgotCi08YmxvY2txdW90ZT4gPHA+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPldlYiBzZXJ2aWNlcyBhcmUgc2VsZi1jb250YWluZWQuPC9zcGFuPiBPbiB0aGUgY2xpZW50Ci1zaWRlLCBubyBhZGRpdGlvbmFsIHNvZnR3YXJlIGlzIHJlcXVpcmVkLsKgIEEgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2Ugd2l0aAotWE1MIGFuZCBIVFRQIGNsaWVudCBzdXBwb3J0IGlzIGVub3VnaCB0byBnZXQgeW91IHN0YXJ0ZWQuwqAgT24gdGhlIHNlcnZlcgotc2lkZSwgYSBXZWIgc2VydmVyIGFuZCBzZXJ2bGV0IGVuZ2luZSBhcmUgcmVxdWlyZWQuwqAgVGhlIGNsaWVudCBhbmQgc2VydmVyCi1jYW4gYmUgaW1wbGVtZW50ZWQgaW4gZGlmZmVyZW50IGVudmlyb25tZW50cy7CoCBJdCBpcyBwb3NzaWJsZSB0byBXZWIKLXNlcnZpY2UgZW5hYmxlIGFuIGV4aXN0aW5nIGFwcGxpY2F0aW9uIHdpdGhvdXQgd3JpdGluZyBhIHNpbmdsZSBsaW5lIG9mIGNvZGUuPC9wPgotIDxwPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5XZWIKLXNlcnZpY2VzIGFyZSBzZWxmLWRlc2NyaWJpbmcuPC9zcGFuPiBUaGUgY2xpZW50IGFuZCBzZXJ2ZXIgbmVlZCB0byByZWNvZ25pemUKLW9ubHkgdGhlIGZvcm1hdCBhbmQgY29udGVudCBvZiByZXF1ZXN0IGFuZCByZXNwb25zZSBtZXNzYWdlcy7CoCBUaGUgZGVmaW5pdGlvbgotb2YgdGhlIG1lc3NhZ2UgZm9ybWF0IHRyYXZlbHMgd2l0aCB0aGUgbWVzc2FnZTsgbm8gZXh0ZXJuYWwgbWV0YWRhdGEgcmVwb3NpdG9yaWVzCi1vciBjb2RlIGdlbmVyYXRpb24gdG9vbHMgYXJlIHJlcXVpcmVkLjwvcD4KLSA8cD4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+V2ViIHNlcnZpY2VzIGFyZQotbW9kdWxhci48L3NwYW4+IFNpbXBsZSBXZWIgc2VydmljZXMgY2FuIGJlIGFnZ3JlZ2F0ZWQgdG8gZm9ybSBtb3JlIGNvbXBsZXgKLVdlYiBzZXJ2aWNlcyBlaXRoZXIgYnkgdXNpbmcgd29ya2Zsb3cgdGVjaG5pcXVlcyBvciBieSBjYWxsaW5nIGxvd2VyIGxheWVyCi1XZWIgc2VydmljZXMgZnJvbSBhIFdlYiBzZXJ2aWNlIGltcGxlbWVudGF0aW9uLjwvcD4KLTxwPjxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPldlYiBTZXJ2aWNlcwotYXJlIHBsYXRmb3JtIGluZGVwZW5kZW50Ljwvc3Bhbj4gV2ViIHNlcnZpY2VzIGFyZSBiYXNlZCBvbiBhIGNvbmNpc2UKLXNldCBvZiBvcGVuLCBYTUwtYmFzZWQgc3RhbmRhcmRzIGRlc2lnbmVkIHRvIHByb21vdGUgaW50ZXJvcGVyYWJpbGl0eSBiZXR3ZWVuCi1hIFdlYiBzZXJ2aWNlIGFuZCBjbGllbnRzIGFjcm9zcyBhIHZhcmlldHkgb2YgY29tcHV0aW5nIHBsYXRmb3JtcyBhbmQgcHJvZ3JhbW1pbmcKLWxhbmd1YWdlcy48L3A+Ci0gPC9ibG9ja3F1b3RlPgotCi08cD5XZWIgc2VydmljZXMgbWlnaHQgYmUgYW55dGhpbmcsIGZvciBleGFtcGxlLCB0aGVhdHJlIHJldmlldyBhcnRpY2xlcywgd2VhdGhlcgotcmVwb3J0cywgY3JlZGl0IGNoZWNrcywgc3RvY2sgcXVvdGF0aW9ucywgdHJhdmVsIGFkdmlzb3JpZXMsIG9yIGFpcmxpbmUgdHJhdmVsCi1yZXNlcnZhdGlvbiBwcm9jZXNzZXMuIEVhY2ggb2YgdGhlc2Ugc2VsZi1jb250YWluZWQgYnVzaW5lc3Mgc2VydmljZXMgaXMgYW4KLWFwcGxpY2F0aW9uIHRoYXQgY2FuIGVhc2lseSBpbnRlZ3JhdGUgd2l0aCBvdGhlciBzZXJ2aWNlcywgZnJvbSB0aGUgc2FtZSBvcgotZGlmZmVyZW50IGNvbXBhbmllcywgdG8gY3JlYXRlIGEgY29tcGxldGUgYnVzaW5lc3MgcHJvY2Vzcy4gVGhpcyBpbnRlcm9wZXJhYmlsaXR5Ci1hbGxvd3MgYnVzaW5lc3NlcyB0byBkeW5hbWljYWxseSBwdWJsaXNoLCBkaXNjb3ZlciwgYW5kIGJpbmQgYSByYW5nZSBvZiBXZWIKLXNlcnZpY2VzIHRocm91Z2ggdGhlIEludGVybmV0LjwvcD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PGg0IGNsYXNzPSJzZWN0aW9udGl0bGUiPkNhdGVnb3JpZXMgb2YgV2ViIHNlcnZpY2VzPC9oND48cD5XZWIgc2VydmljZXMgY2FuIGJlIGdyb3VwZWQKLWludG8gdGhyZWUgY2F0ZWdvcmllczo8L3A+Ci08YmxvY2txdW90ZT4gPHA+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkJ1c2luZXNzIGluZm9ybWF0aW9uLjwvc3Bhbj4gQQotYnVzaW5lc3Mgc2hhcmVzIGluZm9ybWF0aW9uIHdpdGggY29uc3VtZXJzIG9yIG90aGVyIGJ1c2luZXNzZXMuIEluIHRoaXMgY2FzZSwKLXRoZSBidXNpbmVzcyBpcyB1c2luZyBXZWIgc2VydmljZXMgdG8gZXhwYW5kIGl0cyBzY29wZS4gRXhhbXBsZXMgb2YgYnVzaW5lc3MKLWluZm9ybWF0aW9uYWwgV2ViIHNlcnZpY2VzIGFyZSBuZXdzIHN0cmVhbXMsIHdlYXRoZXIgcmVwb3J0cywgb3Igc3RvY2sgcXVvdGF0aW9ucy48L3A+Ci0gPHA+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkJ1c2luZXNzCi1pbnRlZ3JhdGlvbi48L3NwYW4+IEEgYnVzaW5lc3MgcHJvdmlkZXMgdHJhbnNhY3Rpb25hbCwgImZvciBmZWUiIHNlcnZpY2VzCi10byBpdHMgY3VzdG9tZXJzLiBJbiB0aGlzIGNhc2UsIHRoZSBidXNpbmVzcyBiZWNvbWVzIHBhcnQgb2YgYSBnbG9iYWwgbmV0d29yawotb2YgdmFsdWUtYWRkZWQgc3VwcGxpZXJzIHRoYXQgY2FuIGJlIHVzZWQgdG8gY29uZHVjdCBjb21tZXJjZS4gRXhhbXBsZXMgb2YKLWJ1c2luZXNzIGludGVncmF0aW9uIFdlYiBzZXJ2aWNlcyBpbmNsdWRlIGJpZCBhbmQgYXVjdGlvbiBlLW1hcmtldHBsYWNlcywKLXJlc2VydmF0aW9uIHN5c3RlbXMsIGFuZCBjcmVkaXQgY2hlY2tpbmcuPC9wPgotIDxwPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5CdXNpbmVzcyBwcm9jZXNzCi1leHRlcm5hbGl6YXRpb24uPC9zcGFuPiBBIGJ1c2luZXNzIGRpZmZlcmVudGlhdGVzIGl0c2VsZiBmcm9tIGl0cyBjb21wZXRpdGlvbgotdGhyb3VnaCB0aGUgY3JlYXRpb24gb2YgYSBnbG9iYWwgdmFsdWUgY2hhaW4uIEluIHRoaXMgY2FzZSwgdGhlIGJ1c2luZXNzIHVzZXMKLVdlYiBzZXJ2aWNlcyB0byBkeW5hbWljYWxseSBpbnRlZ3JhdGUgaXRzIHByb2Nlc3Nlcy4gQW4gZXhhbXBsZSBvZiBidXNpbmVzcwotcHJvY2VzcyBleHRlcm5hbGl6YXRpb24gV2ViIHNlcnZpY2VzIGlzIHRoZSBhc3NvY2lhdGlvbnMgYmV0d2VlbiBkaWZmZXJlbnQKLWNvbXBhbmllcyB0byBjb21iaW5lIG1hbnVmYWN0dXJpbmcsIGFzc2VtYmx5LCB3aG9sZXNhbGUgZGlzdHJpYnV0aW9uLCBhbmQKLXJldGFpbCBzYWxlcyBvZiBhIHBhcnRpY3VsYXIgcHJvZHVjdC48L3A+Ci0gPC9ibG9ja3F1b3RlPgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxoNCBjbGFzcz0ic2VjdGlvbnRpdGxlIj5TZXJ2aWNlIHJvbGVzIGFuZCBpbnRlcmFjdGlvbnM8L2g0PjxwPkEgbmV0d29yayBjb21wb25lbnQKLWluIGEgV2ViIFNlcnZpY2VzIGFyY2hpdGVjdHVyZSBjYW4gcGxheSBvbmUgb3IgbW9yZSBmdW5kYW1lbnRhbCByb2xlczogc2VydmljZQotcHJvdmlkZXIsIHNlcnZpY2UgYnJva2VyLCBhbmQgc2VydmljZSBjbGllbnQuPC9wPgotPHVsPgotPGxpPlNlcnZpY2UgcHJvdmlkZXJzIGNyZWF0ZSBhbmQgZGVwbG95IHRoZWlyIFdlYiBzZXJ2aWNlcyBhbmQgY2FuIHB1Ymxpc2gKLXRoZSBhdmFpbGFiaWxpdHkgb2YgdGhlaXIgV1NETC1kZXNjcmliZWQgc2VydmljZXMgdGhyb3VnaCBhIHNlcnZpY2UgcmVnaXN0cnksCi1zdWNoIGFzIGEgVURESSBCdXNpbmVzcyBSZWdpc3RyeS48L2xpPgotCi08bGk+U2VydmljZSBicm9rZXJzIHJlZ2lzdGVyIGFuZCBjYXRlZ29yaXplIHB1Ymxpc2hlZCBzZXJ2aWNlcyBhbmQgcHJvdmlkZQotc2VhcmNoIHNlcnZpY2VzLiBGb3IgZXhhbXBsZSwgVURESSBhY3RzIGFzIGEgc2VydmljZSBicm9rZXIgZm9yIFdTREwtZGVzY3JpYmVkCi1XZWIgc2VydmljZXMuPC9saT4KLQotPGxpPlNlcnZpY2UgY2xpZW50cyB1c2UgYnJva2VyIHNlcnZpY2VzIHN1Y2ggYXMgdGhlIFVEREkgQnVzaW5lc3MgUmVnaXN0cnkKLXRvIGRpc2NvdmVyIGEgbmVlZGVkIFdTREwtZGVzY3JpYmVkIHNlcnZpY2UgYW5kIHRoZW4gYmluZCB0byBhbmQgY2FsbCB0aGUKLXNlcnZpY2UgcHJvdmlkZXIuPC9saT4KLQotPC91bD4KLTxwPkJpbmRpbmcgaW52b2x2ZXMgZXN0YWJsaXNoaW5nIGFsbCBlbnZpcm9ubWVudGFsIHByZXJlcXVpc2l0ZXMgdGhhdAotYXJlIG5lY2Vzc2FyeSB0byBzdWNjZXNzZnVsbHkgY29tcGxldGUgdGhlIHNlcnZpY2VzLiBFeGFtcGxlcyBvZiBlbnZpcm9ubWVudGFsCi1wcmVyZXF1aXNpdGVzIGluY2x1ZGUgc2VjdXJpdHksIHRyYW5zYWN0aW9uIG1vbml0b3JpbmcsIGFuZCBIVFRQIGF2YWlsYWJpbGl0eS4KLVRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlc2Ugcm9sZXMgYXJlIGRlc2NyaWJlZCBpbiBGaWd1cmUgMS48L3A+Ci08cD5GaWd1cmUKLTEuIFNlcnZpY2Ugcm9sZXMgYW5kIGludGVyYWN0aW9ucy48L3A+Ci08cD4gPGltZyBzcmM9Ii4uL2ltYWdlcy9yb2xlcy5naWYiIGFsdD0iRmlndXJlIDEgaWxsdXN0cmF0ZXMgdGhlIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSBzZXJ2aWNlIGJyb2tlciwgc2VydmljZSBwcm92aWRlciwgYW5kIHNlcnZpY2UgcmVxdWVzdG9yLiIgLz4gPC9wPgotPHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gb24gV2ViIHNlcnZpY2VzLAotcmVmZXIgdG8gIDxhIGhyZWY9Imh0dHA6Ly93d3cuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy93ZWJzZXJ2aWNlcyIgdGFyZ2V0PSJfYmxhbmsiPnd3dy5pYm0uY29tL2RldmVsb3BlcndvcmtzL3dlYnNlcnZpY2VzPC9hPjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgQ29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJjd3NpbndzYS5odG1sIiB0aXRsZT0iIj5Ub29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJjd3NzdGFuZGFyZHMuaHRtbCIgdGl0bGU9Ik9uZSBvZiB0aGUga2V5IGF0dHJpYnV0ZXMgb2YgSW50ZXJuZXQgc3RhbmRhcmRzIGlzIHRoYXQgdGhleSBmb2N1cyBvbiBwcm90b2NvbHMgYW5kIG5vdCBvbiBpbXBsZW1lbnRhdGlvbnMuIFRoZSBJbnRlcm5ldCBpcyBjb21wb3NlZCBvZiBoZXRlcm9nZW5lb3VzIHRlY2hub2xvZ2llcyB0aGF0IHN1Y2Nlc3NmdWxseSBpbnRlcm9wZXJhdGUgdGhyb3VnaCBzaGFyZWQgcHJvdG9jb2xzLiBUaGlzIHByZXZlbnRzIGluZGl2aWR1YWwgdmVuZG9ycyBmcm9tIGltcG9zaW5nIGEgc3RhbmRhcmQgb24gdGhlIEludGVybmV0LiBPcGVuIFNvdXJjZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBwbGF5cyBhIGNydWNpYWwgcm9sZSBpbiBwcmVzZXJ2aW5nIHRoZSBpbnRlcm9wZXJhYmlsaXR5IG9mIHZlbmRvciBpbXBsZW1lbnRhdGlvbnMgb2Ygc3RhbmRhcmRzLiI+V2ViIHNlcnZpY2VzIHN0YW5kYXJkczwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL3Rhc2tzL3RvdmVyd3MuaHRtbCIgdGl0bGU9IlVzZSBXZWIgc2VydmljZXMgdG9vbHMgdG8gZGlzY292ZXIsIGNyZWF0ZSwgYW5kIHB1Ymxpc2ggV2ViIHNlcnZpY2VzIHRoYXQgYXJlIGNyZWF0ZWQgZnJvbSBKYXZhIGJlYW5zLCBlbnRlcnByaXNlIGJlYW5zLCBhbmQgV1NETCBmaWxlcy4gWW91IGNhbiBjcmVhdGUgb2YgV2ViIHNlcnZpY2VzIHVzaW5nIGEgdG9wLWRvd24gYXBwcm9hY2ggKHdoaWNoIHN0YXJ0cyB3aXRoIGEgV1NETCBmaWxlKSBvciBhIGJvdHRvbS11cCBhcHByb2FjaCAod2hpY2ggc3RhcnRzIHdpdGggYSBKYXZhIGJlYW4gb3IgRUpCKS4iPiBEZXZlbG9waW5nIFdlYgotc2VydmljZXM8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2J0bXVwLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NidG11cC5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMThmN2ZiLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2J0bXVwLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSBjb25jZXB0IFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIENvbmNlcHQvL0VOIgotICJjb25jZXB0LmR0ZCI+Ci08Y29uY2VwdCBpZD0iY3JlYXRpbmdib3R0b20tdXB3ZWJzZXJ2aWNlcyIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5DcmVhdGluZyBib3R0b20tdXAgV2ViIHNlcnZpY2VzPC90aXRsZT4KLTxzaG9ydGRlc2M+V2ViIHNlcnZpY2VzIGNhbiBiZSBjcmVhdGVkIHVzaW5nIHR3byBtZXRob2RzOiB0b3AtZG93biBkZXZlbG9wbWVudAotYW5kIGJvdHRvbS11cCBkZXZlbG9wbWVudC4gQm90dG9tLXVwIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCBpbnZvbHZlcyBjcmVhdGluZwotYSBXZWIgc2VydmljZSBmcm9tIGEgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBiZWFuIG9yIGVudGVycHJpc2UgYmVhbi48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0+Ym90dG9tLXVwIFdlYiBzZXJ2aWNlczxpbmRleHRlcm0+b3ZlcnZpZXc8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5ib3R0b20tdXA8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPGNvbmJvZHk+Ci08cD5BbHRob3VnaCBib3R0b20tdXAgV2ViIHNlcnZpY2UgZGV2ZWxvcG1lbnQgbWF5IGJlIGZhc3RlciBhbmQgZWFzaWVyLCBlc3BlY2lhbGx5Ci1pZiB5b3UgYXJlIG5ldyB0byBXZWIgc2VydmljZXMsIHRoZSB0b3AtZG93biBhcHByb2FjaCBpcyB0aGUgcmVjb21tZW5kZWQgd2F5Ci1vZiBjcmVhdGluZyBhIFdlYiBzZXJ2aWNlLjwvcD4KLTxwPldoZW4gY3JlYXRpbmcgYSBXZWIgc2VydmljZSB1c2luZyBhIGJvdHRvbS11cCBhcHByb2FjaCwgZmlyc3QgeW91IGNyZWF0ZQotYSA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIgdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gYmVhbgotb3IgRUpCIGJlYW4gYW5kIHRoZW4gdXNlIHRoZSBXZWIgc2VydmljZXMgd2l6YXJkIHRvIGNyZWF0ZSB0aGUgV1NETCBmaWxlIGFuZAotV2ViIHNlcnZpY2UuPC9wPgotPC9jb25ib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgQ29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iY3dzLmRpdGEiPjxsaW5rdGV4dD5XZWIgc2VydmljZXMgb3ZlcnZpZXc8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9ImN3c2lud3NhLmRpdGEiPjxsaW5rdGV4dD5Ub29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9saW5rdGV4dD4KLTwvbGluaz4KLTxsaW5rIGhyZWY9ImN3c3RvcGRvd24uZGl0YSIgc2NvcGU9ImxvY2FsIj48bGlua3RleHQ+Q3JlYXRpbmcgdG9wLWRvd24gV2ViCi1zZXJ2aWNlczwvbGlua3RleHQ+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+Ci08bGluayBocmVmPSIuLi90YXNrcy90b3ZlcndzLmRpdGEiIHNjb3BlPSJsb2NhbCI+PGxpbmt0ZXh0PiBEZXZlbG9waW5nIFdlYgotc2VydmljZXM8L2xpbmt0ZXh0PjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L2NvbmNlcHQ+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NidG11cC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzYnRtdXAuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzJiZmFmNC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NidG11cC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDciIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9ImNvbmNlcHQiIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iQ3JlYXRpbmcgYm90dG9tLXVwIFdlYiBzZXJ2aWNlcyIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJXZWIgc2VydmljZXMgY2FuIGJlIGNyZWF0ZWQgdXNpbmcgdHdvIG1ldGhvZHM6IHRvcC1kb3duIGRldmVsb3BtZW50IGFuZCBib3R0b20tdXAgZGV2ZWxvcG1lbnQuIEJvdHRvbS11cCBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQgaW52b2x2ZXMgY3JlYXRpbmcgYSBXZWIgc2VydmljZSBmcm9tIGEgSmF2YSBiZWFuIG9yIGVudGVycHJpc2UgYmVhbi4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iV2ViIHNlcnZpY2VzIGNhbiBiZSBjcmVhdGVkIHVzaW5nIHR3byBtZXRob2RzOiB0b3AtZG93biBkZXZlbG9wbWVudCBhbmQgYm90dG9tLXVwIGRldmVsb3BtZW50LiBCb3R0b20tdXAgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50IGludm9sdmVzIGNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgZnJvbSBhIEphdmEgYmVhbiBvciBlbnRlcnByaXNlIGJlYW4uIiAvPgotPG1ldGEgY29udGVudD0iYm90dG9tLXVwIFdlYiBzZXJ2aWNlcywgb3ZlcnZpZXcsIFdlYiBzZXJ2aWNlcywgYm90dG9tLXVwIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iYm90dG9tLXVwIFdlYiBzZXJ2aWNlcywgb3ZlcnZpZXcsIFdlYiBzZXJ2aWNlcywgYm90dG9tLXVwIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iY3dzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9ImN3c2lud3NhLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9ImN3c3RvcGRvd24uaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdGFza3MvdG92ZXJ3cy5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9ImNyZWF0aW5nYm90dG9tLXVwd2Vic2VydmljZXMiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5DcmVhdGluZyBib3R0b20tdXAgV2ViIHNlcnZpY2VzPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJjcmVhdGluZ2JvdHRvbS11cHdlYnNlcnZpY2VzIj48YSBuYW1lPSJjcmVhdGluZ2JvdHRvbS11cHdlYnNlcnZpY2VzIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5DcmVhdGluZyBib3R0b20tdXAgV2ViIHNlcnZpY2VzPC9oMT4KLQotCi0KLTxkaXY+PHA+V2ViIHNlcnZpY2VzIGNhbiBiZSBjcmVhdGVkIHVzaW5nIHR3byBtZXRob2RzOiB0b3AtZG93biBkZXZlbG9wbWVudAotYW5kIGJvdHRvbS11cCBkZXZlbG9wbWVudC4gQm90dG9tLXVwIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCBpbnZvbHZlcyBjcmVhdGluZwotYSBXZWIgc2VydmljZSBmcm9tIGEgSmF2YeKEoiBiZWFuIG9yIGVudGVycHJpc2UgYmVhbi48L3A+Ci0KLTxwPkFsdGhvdWdoIGJvdHRvbS11cCBXZWIgc2VydmljZSBkZXZlbG9wbWVudCBtYXkgYmUgZmFzdGVyIGFuZCBlYXNpZXIsIGVzcGVjaWFsbHkKLWlmIHlvdSBhcmUgbmV3IHRvIFdlYiBzZXJ2aWNlcywgdGhlIHRvcC1kb3duIGFwcHJvYWNoIGlzIHRoZSByZWNvbW1lbmRlZCB3YXkKLW9mIGNyZWF0aW5nIGEgV2ViIHNlcnZpY2UuPC9wPgotCi08cD5XaGVuIGNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgdXNpbmcgYSBib3R0b20tdXAgYXBwcm9hY2gsIGZpcnN0IHlvdSBjcmVhdGUKLWEgSmF2YSBiZWFuCi1vciBFSkIgYmVhbiBhbmQgdGhlbiB1c2UgdGhlIFdlYiBzZXJ2aWNlcyB3aXphcmQgdG8gY3JlYXRlIHRoZSBXU0RMIGZpbGUgYW5kCi1XZWIgc2VydmljZS48L3A+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9ImN3cy5odG1sIiB0aXRsZT0iQSBXZWIgc2VydmljZSBpcyBhIHNldCBvZiByZWxhdGVkIGFwcGxpY2F0aW9uIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSBwcm9ncmFtbWF0aWNhbGx5IGludm9rZWQgb3ZlciB0aGUgSW50ZXJuZXQuIEJ1c2luZXNzZXMgY2FuIGR5bmFtaWNhbGx5IG1peCBhbmQgbWF0Y2ggV2ViIHNlcnZpY2VzIHRvIHBlcmZvcm0gY29tcGxleCB0cmFuc2FjdGlvbnMgd2l0aCBtaW5pbWFsIHByb2dyYW1taW5nLiBXZWIgc2VydmljZXMgYWxsb3cgYnV5ZXJzIGFuZCBzZWxsZXJzIGFsbCBvdmVyIHRoZSB3b3JsZCB0byBkaXNjb3ZlciBlYWNoIG90aGVyLCBjb25uZWN0IGR5bmFtaWNhbGx5LCBhbmQgZXhlY3V0ZSB0cmFuc2FjdGlvbnMgaW4gcmVhbCB0aW1lIHdpdGggbWluaW1hbCBodW1hbiBpbnRlcmFjdGlvbi4iPldlYiBzZXJ2aWNlcyBvdmVydmlldzwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iY3dzaW53c2EuaHRtbCIgdGl0bGU9IiI+VG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iY3dzdG9wZG93bi5odG1sIiB0aXRsZT0iV2ViIHNlcnZpY2VzIGNhbiBiZSBjcmVhdGVkIHVzaW5nIHR3byBtZXRob2RzOiB0b3AtZG93biBkZXZlbG9wbWVudCBhbmQgYm90dG9tLXVwIGRldmVsb3BtZW50LiBUb3AtZG93biBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQgaW52b2x2ZXMgY3JlYXRpbmcgYSBXZWIgc2VydmljZSBmcm9tIGEgV1NETCBmaWxlLiI+Q3JlYXRpbmcgdG9wLWRvd24gV2ViCi1zZXJ2aWNlczwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL3Rhc2tzL3RvdmVyd3MuaHRtbCIgdGl0bGU9IlVzZSBXZWIgc2VydmljZXMgdG9vbHMgdG8gZGlzY292ZXIsIGNyZWF0ZSwgYW5kIHB1Ymxpc2ggV2ViIHNlcnZpY2VzIHRoYXQgYXJlIGNyZWF0ZWQgZnJvbSBKYXZhIGJlYW5zLCBlbnRlcnByaXNlIGJlYW5zLCBhbmQgV1NETCBmaWxlcy4gWW91IGNhbiBjcmVhdGUgb2YgV2ViIHNlcnZpY2VzIHVzaW5nIGEgdG9wLWRvd24gYXBwcm9hY2ggKHdoaWNoIHN0YXJ0cyB3aXRoIGEgV1NETCBmaWxlKSBvciBhIGJvdHRvbS11cCBhcHByb2FjaCAod2hpY2ggc3RhcnRzIHdpdGggYSBKYXZhIGJlYW4gb3IgRUpCKS4iPiBEZXZlbG9waW5nIFdlYgotc2VydmljZXM8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NkbC5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzg5ZTlmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSBjb25jZXB0IFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIENvbmNlcHQvL0VOIgotICJjb25jZXB0LmR0ZCI+Ci08Y29uY2VwdCBpZD0iY3dzZGwiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+V2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKTwvdGl0bGU+Ci08c2hvcnRkZXNjPldlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBMYW5ndWFnZSAoV1NETCkgaXMgYSBzdGFuZGFyZCBzcGVjaWZpY2F0aW9uCi1mb3IgZGVzY3JpYmluZyBuZXR3b3JrZWQsIFhNTC1iYXNlZCBzZXJ2aWNlcy4gSXQgcHJvdmlkZXMgYSBzaW1wbGUgd2F5IGZvcgotc2VydmljZSBwcm92aWRlcnMgdG8gZGVzY3JpYmUgdGhlIGJhc2ljIGZvcm1hdCBvZiByZXF1ZXN0cyB0byB0aGVpciBzeXN0ZW1zCi1yZWdhcmRsZXNzIG9mIHRoZSB1bmRlcmx5aW5nIHJ1bi10aW1lIGltcGxlbWVudGF0aW9uLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5XU0RMPGluZGV4dGVybT5vdmVydmlldzwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjxpbmRleHRlcm0+V2ViCi1zZXJ2aWNlczxpbmRleHRlcm0+V1NETDwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPGNvbmJvZHk+Ci08cD5XU0RMIGRlZmluZXMgYW4gWE1MIGZvcm1hdCBmb3IgZGVzY3JpYmluZyBuZXR3b3JrIHNlcnZpY2VzIGFzIGEgc2V0IG9mCi0gPHZhcm5hbWU+ZW5kcG9pbnRzPC92YXJuYW1lPiB0aGF0IG9wZXJhdGUgb24gbWVzc2FnZXMgdGhhdCBjb250YWluIGVpdGhlcgotZG9jdW1lbnQtb3JpZW50ZWQgb3IgcHJvY2VkdXJlLW9yaWVudGVkIGluZm9ybWF0aW9uLiBUaGUgb3BlcmF0aW9ucyBhbmQgbWVzc2FnZXMKLWFyZSBmaXJzdCBkZXNjcmliZWQgYWJzdHJhY3RseSBhbmQgdGhlbiBib3VuZCB0byBhIGNvbmNyZXRlIG5ldHdvcmsgcHJvdG9jb2wKLWFuZCBtZXNzYWdlIGZvcm1hdCBpbiBvcmRlciB0byBkZWZpbmUgYW4gZW5kcG9pbnQuIFJlbGF0ZWQgY29uY3JldGUgZW5kcG9pbnRzCi1hcmUgY29tYmluZWQgaW50byBhYnN0cmFjdCBlbmRwb2ludHMgKHNlcnZpY2VzKS4gV1NETCBpcyBleHRlbnNpYmxlIHRvIGFsbG93Ci1kZXNjcmlwdGlvbiBvZiBlbmRwb2ludHMgYW5kIHRoZWlyIG1lc3NhZ2VzLCByZWdhcmRsZXNzIG9mIHdoaWNoIG1lc3NhZ2UgZm9ybWF0cwotb3IgbmV0d29yayBwcm90b2NvbHMgYXJlIHVzZWQgdG8gY29tbXVuaWNhdGUuIFRoaXMgbWVhbnMgdGhhdCBpbnRlcmZhY2VzIGFyZQotZGVmaW5lZCBhYnN0cmFjdGx5IHVzaW5nIFhNTCBzY2hlbWEgYW5kIHRoZW4gYm91bmQgdG8gY29uY3JldGUgcmVwcmVzZW50YXRpb25zCi10aGF0IGFyZSBhcHByb3ByaWF0ZSBmb3IgdGhlIHByb3RvY29sLjwvcD4KLTxwPldTREwgYWxsb3dzIGEgc2VydmljZSBwcm92aWRlciB0byBzcGVjaWZ5IHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyaXN0aWNzCi1vZiBhIFdlYiBzZXJ2aWNlOjwvcD4KLTx1bD4KLTxsaT5UaGUgbmFtZSBvZiB0aGUgV2ViIHNlcnZpY2UgYW5kIGFkZHJlc3NpbmcgaW5mb3JtYXRpb248L2xpPgotPGxpPlRoZSBwcm90b2NvbCBhbmQgZW5jb2Rpbmcgc3R5bGUgdG8gYmUgdXNlZCB3aGVuIGFjY2Vzc2luZyB0aGUgcHVibGljIG9wZXJhdGlvbnMKLW9mIHRoZSBXZWIgc2VydmljZTwvbGk+Ci08bGk+VGhlIHR5cGUgaW5mb3JtYXRpb24gc3VjaCBhcyBvcGVyYXRpb25zLCBwYXJhbWV0ZXJzLCBhbmQgZGF0YSB0eXBlcyBjb21wcmlzaW5nCi10aGUgaW50ZXJmYWNlIG9mIHRoZSBXZWIgc2VydmljZTwvbGk+Ci08L3VsPgotPHA+V1NETCBkb2N1bWVudHMgYWxsb3cgZGV2ZWxvcGVycyB0byBleHBvc2UgdGhlaXIgYXBwbGljYXRpb25zIGFzIG5ldHdvcmstYWNjZXNzaWJsZQotc2VydmljZXMgb24gdGhlIEludGVybmV0LiBUaHJvdWdoIFVEREkgYW5kIFdTSUwsIG90aGVyIGFwcGxpY2F0aW9ucyBjYW4gZGlzY292ZXIKLVdTREwgZG9jdW1lbnRzIGFuZCBiaW5kIHdpdGggdGhlbSB0byBleGVjdXRlIHRyYW5zYWN0aW9ucyBvciBwZXJmb3JtIG90aGVyCi1idXNpbmVzcyBwcm9jZXNzZXMuPC9wPgotPHA+VGhpcyBkZXZlbG9wbWVudCBwbGF0Zm9ybSBzdXBwb3J0cyBhbmQgZW5jb3VyYWdlcyB0aGUgZGV2ZWxvcG1lbnQgYW5kIHVzZQotb2YgV1MtSSBjb21wbGlhbnQgV1NETC4gQnVzaW5lc3Mgc2VydmljZSBwcm92aWRlcnMgY2FuIGRlcGxveSA8dG0gdG1jbGFzcz0ic3BlY2lhbCIKLXRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iIHRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IGJlYW5zCi1hbmQgZW50ZXJwcmlzZSBiZWFucyBhcyBhIFdlYiBzZXJ2aWNlIGFuZCBnZW5lcmF0ZSBhIFdTREwgZG9jdW1lbnQgdGhhdCBkZXNjcmliZXMKLXRoZSBzZXJ2aWNlLiBUaGV5IGNhbiBhbHNvIGdlbmVyYXRlIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIgotdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gYW5kIGVudGVycHJpc2UgYmVhbiBza2VsZXRvbnMgZnJvbQotYW4gZXhpc3RpbmcgV1NETCBmaWxlLiBBIGJ1c2luZXNzIHNlcnZpY2UgY2xpZW50IGNhbiBnZW5lcmF0ZSBhIDx0bSB0bWNsYXNzPSJzcGVjaWFsIgotdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIgdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gcHJveHkKLWZyb20gYSBXU0RMIGRvY3VtZW50LCB0aGVyZWJ5IHByb3ZpZGluZyBhbiBlYXN5LXRvLXVzZSA8dG0gdG1jbGFzcz0ic3BlY2lhbCIKLXRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iIHRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IGludGVyZmFjZQotdG8gdGhlIFdlYiBzZXJ2aWNlLiBUaGUgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBpbnRlcmZhY2UgaGlkZXMgdGhlIG5ldHdvcmsgY29tbXVuaWNhdGlvbnMKLWRldGFpbHMgZnJvbSB0aGUgY2xpZW50IGVuYWJsaW5nIHRoZSBidXNpbmVzcyBzZXJ2aWNlIHByb3ZpZGVyIHRvIGZvY3VzIG9uCi1idXNpbmVzcyBhbmQgcHJvY2VzcyBwb3J0aW9ucyBvZiB0aGUgYXBwbGljYXRpb24uPC9wPgotPHA+SW4gYWRkaXRpb24gdG8gcHJvdmlkaW5nIHRvb2xzIHRvIGNyZWF0ZSBXZWIgc2VydmljZXMsIHRoZSB3b3JrYmVuY2ggcHJvdmlkZXMKLWEgV1NETCBlZGl0b3IgdGhhdCBhbGxvd3MgeW91IHRvIGNyZWF0ZSBXU0RMIGZpbGVzIHVzaW5nIGEgZ3JhcGhpY2FsIGludGVyZmFjZSwKLWEgV1NETCB2YWxpZGF0b3IgdGhhdCBlbnN1cmVzIHRoYXQgeW91ciBXU0RMIGZpbGUgaXMgc2VtYW50aWNhbGx5IGNvcnJlY3QKLWFuZCBvcHRpb25hbGx5IGNoZWNrcyBmb3IgV1MtSSBjb21wbGlhbmNlLCBhbmQgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciB3aGljaAotYWxsb3dzIHlvdSB0byBkeW5hbWljYWxseSB0ZXN0IFdlYiBzZXJ2aWNlcyB3aXRob3V0IHJlcXVpcmluZyB5b3UgdG8gZ2VuZXJhdGUKLWEgcHJveHkuPC9wPgotPHA+VGhlIHdvcmtiZW5jaCBzdXBwb3J0cyBXU0RMIDEuMS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIFdTREwgc3BlY2lmaWNhdGlvbiwKLXJlZmVyIHRvICA8eHJlZiBmb3JtYXQ9Imh0bWwiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3dzZGwiIHNjb3BlPSJleHRlcm5hbCI+d3d3LnczLm9yZy9UUi93c2RsPC94cmVmPjwvcD4KLTwvY29uYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9ImN3cy5kaXRhIj48bGlua3RleHQ+V2ViIHNlcnZpY2VzIG92ZXJ2aWV3PC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSJjd3NpbndzYS5kaXRhIj48bGlua3RleHQ+VG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvbGlua3RleHQ+Ci08L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL3Rhc2tzL3RvdmVyd3MuZGl0YSIgc2NvcGU9InBlZXIiPjxsaW5rdGV4dD4gRGV2ZWxvcGluZyBXZWIKLXNlcnZpY2VzPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC9jb25jZXB0PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGwuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1ZjgxOTkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGwuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwNyIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0iY29uY2VwdCIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJXZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IldlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBMYW5ndWFnZSAoV1NETCkgaXMgYSBzdGFuZGFyZCBzcGVjaWZpY2F0aW9uIGZvciBkZXNjcmliaW5nIG5ldHdvcmtlZCwgWE1MLWJhc2VkIHNlcnZpY2VzLiBJdCBwcm92aWRlcyBhIHNpbXBsZSB3YXkgZm9yIHNlcnZpY2UgcHJvdmlkZXJzIHRvIGRlc2NyaWJlIHRoZSBiYXNpYyBmb3JtYXQgb2YgcmVxdWVzdHMgdG8gdGhlaXIgc3lzdGVtcyByZWdhcmRsZXNzIG9mIHRoZSB1bmRlcmx5aW5nIHJ1bi10aW1lIGltcGxlbWVudGF0aW9uLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJXZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpIGlzIGEgc3RhbmRhcmQgc3BlY2lmaWNhdGlvbiBmb3IgZGVzY3JpYmluZyBuZXR3b3JrZWQsIFhNTC1iYXNlZCBzZXJ2aWNlcy4gSXQgcHJvdmlkZXMgYSBzaW1wbGUgd2F5IGZvciBzZXJ2aWNlIHByb3ZpZGVycyB0byBkZXNjcmliZSB0aGUgYmFzaWMgZm9ybWF0IG9mIHJlcXVlc3RzIHRvIHRoZWlyIHN5c3RlbXMgcmVnYXJkbGVzcyBvZiB0aGUgdW5kZXJseWluZyBydW4tdGltZSBpbXBsZW1lbnRhdGlvbi4iIC8+Ci08bWV0YSBjb250ZW50PSJXU0RMLCBvdmVydmlldywgV2ViIHNlcnZpY2VzIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV1NETCwgb3ZlcnZpZXcsIFdlYiBzZXJ2aWNlcyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9ImN3cy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJjd3NpbndzYS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90YXNrcy90b3ZlcndzLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0iY3dzZGwiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5XZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJjd3NkbCI+PGEgbmFtZT0iY3dzZGwiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPldlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBMYW5ndWFnZSAoV1NETCk8L2gxPgotCi0KLQotPGRpdj48cD5XZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpIGlzIGEgc3RhbmRhcmQgc3BlY2lmaWNhdGlvbgotZm9yIGRlc2NyaWJpbmcgbmV0d29ya2VkLCBYTUwtYmFzZWQgc2VydmljZXMuIEl0IHByb3ZpZGVzIGEgc2ltcGxlIHdheSBmb3IKLXNlcnZpY2UgcHJvdmlkZXJzIHRvIGRlc2NyaWJlIHRoZSBiYXNpYyBmb3JtYXQgb2YgcmVxdWVzdHMgdG8gdGhlaXIgc3lzdGVtcwotcmVnYXJkbGVzcyBvZiB0aGUgdW5kZXJseWluZyBydW4tdGltZSBpbXBsZW1lbnRhdGlvbi48L3A+Ci0KLTxwPldTREwgZGVmaW5lcyBhbiBYTUwgZm9ybWF0IGZvciBkZXNjcmliaW5nIG5ldHdvcmsgc2VydmljZXMgYXMgYSBzZXQgb2YKLSA8dmFyIGNsYXNzPSJ2YXJuYW1lIj5lbmRwb2ludHM8L3Zhcj4gdGhhdCBvcGVyYXRlIG9uIG1lc3NhZ2VzIHRoYXQgY29udGFpbiBlaXRoZXIKLWRvY3VtZW50LW9yaWVudGVkIG9yIHByb2NlZHVyZS1vcmllbnRlZCBpbmZvcm1hdGlvbi4gVGhlIG9wZXJhdGlvbnMgYW5kIG1lc3NhZ2VzCi1hcmUgZmlyc3QgZGVzY3JpYmVkIGFic3RyYWN0bHkgYW5kIHRoZW4gYm91bmQgdG8gYSBjb25jcmV0ZSBuZXR3b3JrIHByb3RvY29sCi1hbmQgbWVzc2FnZSBmb3JtYXQgaW4gb3JkZXIgdG8gZGVmaW5lIGFuIGVuZHBvaW50LiBSZWxhdGVkIGNvbmNyZXRlIGVuZHBvaW50cwotYXJlIGNvbWJpbmVkIGludG8gYWJzdHJhY3QgZW5kcG9pbnRzIChzZXJ2aWNlcykuIFdTREwgaXMgZXh0ZW5zaWJsZSB0byBhbGxvdwotZGVzY3JpcHRpb24gb2YgZW5kcG9pbnRzIGFuZCB0aGVpciBtZXNzYWdlcywgcmVnYXJkbGVzcyBvZiB3aGljaCBtZXNzYWdlIGZvcm1hdHMKLW9yIG5ldHdvcmsgcHJvdG9jb2xzIGFyZSB1c2VkIHRvIGNvbW11bmljYXRlLiBUaGlzIG1lYW5zIHRoYXQgaW50ZXJmYWNlcyBhcmUKLWRlZmluZWQgYWJzdHJhY3RseSB1c2luZyBYTUwgc2NoZW1hIGFuZCB0aGVuIGJvdW5kIHRvIGNvbmNyZXRlIHJlcHJlc2VudGF0aW9ucwotdGhhdCBhcmUgYXBwcm9wcmlhdGUgZm9yIHRoZSBwcm90b2NvbC48L3A+Ci0KLTxwPldTREwgYWxsb3dzIGEgc2VydmljZSBwcm92aWRlciB0byBzcGVjaWZ5IHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyaXN0aWNzCi1vZiBhIFdlYiBzZXJ2aWNlOjwvcD4KLQotPHVsPgotPGxpPlRoZSBuYW1lIG9mIHRoZSBXZWIgc2VydmljZSBhbmQgYWRkcmVzc2luZyBpbmZvcm1hdGlvbjwvbGk+Ci0KLTxsaT5UaGUgcHJvdG9jb2wgYW5kIGVuY29kaW5nIHN0eWxlIHRvIGJlIHVzZWQgd2hlbiBhY2Nlc3NpbmcgdGhlIHB1YmxpYyBvcGVyYXRpb25zCi1vZiB0aGUgV2ViIHNlcnZpY2U8L2xpPgotCi08bGk+VGhlIHR5cGUgaW5mb3JtYXRpb24gc3VjaCBhcyBvcGVyYXRpb25zLCBwYXJhbWV0ZXJzLCBhbmQgZGF0YSB0eXBlcyBjb21wcmlzaW5nCi10aGUgaW50ZXJmYWNlIG9mIHRoZSBXZWIgc2VydmljZTwvbGk+Ci0KLTwvdWw+Ci0KLTxwPldTREwgZG9jdW1lbnRzIGFsbG93IGRldmVsb3BlcnMgdG8gZXhwb3NlIHRoZWlyIGFwcGxpY2F0aW9ucyBhcyBuZXR3b3JrLWFjY2Vzc2libGUKLXNlcnZpY2VzIG9uIHRoZSBJbnRlcm5ldC4gVGhyb3VnaCBVRERJIGFuZCBXU0lMLCBvdGhlciBhcHBsaWNhdGlvbnMgY2FuIGRpc2NvdmVyCi1XU0RMIGRvY3VtZW50cyBhbmQgYmluZCB3aXRoIHRoZW0gdG8gZXhlY3V0ZSB0cmFuc2FjdGlvbnMgb3IgcGVyZm9ybSBvdGhlcgotYnVzaW5lc3MgcHJvY2Vzc2VzLjwvcD4KLQotPHA+VGhpcyBkZXZlbG9wbWVudCBwbGF0Zm9ybSBzdXBwb3J0cyBhbmQgZW5jb3VyYWdlcyB0aGUgZGV2ZWxvcG1lbnQgYW5kIHVzZQotb2YgV1MtSSBjb21wbGlhbnQgV1NETC4gQnVzaW5lc3Mgc2VydmljZSBwcm92aWRlcnMgY2FuIGRlcGxveSBKYXZh4oSiIGJlYW5zCi1hbmQgZW50ZXJwcmlzZSBiZWFucyBhcyBhIFdlYiBzZXJ2aWNlIGFuZCBnZW5lcmF0ZSBhIFdTREwgZG9jdW1lbnQgdGhhdCBkZXNjcmliZXMKLXRoZSBzZXJ2aWNlLiBUaGV5IGNhbiBhbHNvIGdlbmVyYXRlIEphdmEgYW5kIGVudGVycHJpc2UgYmVhbiBza2VsZXRvbnMgZnJvbQotYW4gZXhpc3RpbmcgV1NETCBmaWxlLiBBIGJ1c2luZXNzIHNlcnZpY2UgY2xpZW50IGNhbiBnZW5lcmF0ZSBhIEphdmEgcHJveHkKLWZyb20gYSBXU0RMIGRvY3VtZW50LCB0aGVyZWJ5IHByb3ZpZGluZyBhbiBlYXN5LXRvLXVzZSBKYXZhIGludGVyZmFjZQotdG8gdGhlIFdlYiBzZXJ2aWNlLiBUaGUgSmF2YSBpbnRlcmZhY2UgaGlkZXMgdGhlIG5ldHdvcmsgY29tbXVuaWNhdGlvbnMKLWRldGFpbHMgZnJvbSB0aGUgY2xpZW50IGVuYWJsaW5nIHRoZSBidXNpbmVzcyBzZXJ2aWNlIHByb3ZpZGVyIHRvIGZvY3VzIG9uCi1idXNpbmVzcyBhbmQgcHJvY2VzcyBwb3J0aW9ucyBvZiB0aGUgYXBwbGljYXRpb24uPC9wPgotCi08cD5JbiBhZGRpdGlvbiB0byBwcm92aWRpbmcgdG9vbHMgdG8gY3JlYXRlIFdlYiBzZXJ2aWNlcywgdGhlIHdvcmtiZW5jaCBwcm92aWRlcwotYSBXU0RMIGVkaXRvciB0aGF0IGFsbG93cyB5b3UgdG8gY3JlYXRlIFdTREwgZmlsZXMgdXNpbmcgYSBncmFwaGljYWwgaW50ZXJmYWNlLAotYSBXU0RMIHZhbGlkYXRvciB0aGF0IGVuc3VyZXMgdGhhdCB5b3VyIFdTREwgZmlsZSBpcyBzZW1hbnRpY2FsbHkgY29ycmVjdAotYW5kIG9wdGlvbmFsbHkgY2hlY2tzIGZvciBXUy1JIGNvbXBsaWFuY2UsIGFuZCB0aGUgV2ViIFNlcnZpY2VzIEV4cGxvcmVyIHdoaWNoCi1hbGxvd3MgeW91IHRvIGR5bmFtaWNhbGx5IHRlc3QgV2ViIHNlcnZpY2VzIHdpdGhvdXQgcmVxdWlyaW5nIHlvdSB0byBnZW5lcmF0ZQotYSBwcm94eS48L3A+Ci0KLTxwPlRoZSB3b3JrYmVuY2ggc3VwcG9ydHMgV1NETCAxLjEuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBXU0RMIHNwZWNpZmljYXRpb24sCi1yZWZlciB0byAgPGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvd3NkbCIgdGFyZ2V0PSJfYmxhbmsiPnd3dy53My5vcmcvVFIvd3NkbDwvYT48L3A+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9ImN3cy5odG1sIiB0aXRsZT0iQSBXZWIgc2VydmljZSBpcyBhIHNldCBvZiByZWxhdGVkIGFwcGxpY2F0aW9uIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSBwcm9ncmFtbWF0aWNhbGx5IGludm9rZWQgb3ZlciB0aGUgSW50ZXJuZXQuIEJ1c2luZXNzZXMgY2FuIGR5bmFtaWNhbGx5IG1peCBhbmQgbWF0Y2ggV2ViIHNlcnZpY2VzIHRvIHBlcmZvcm0gY29tcGxleCB0cmFuc2FjdGlvbnMgd2l0aCBtaW5pbWFsIHByb2dyYW1taW5nLiBXZWIgc2VydmljZXMgYWxsb3cgYnV5ZXJzIGFuZCBzZWxsZXJzIGFsbCBvdmVyIHRoZSB3b3JsZCB0byBkaXNjb3ZlciBlYWNoIG90aGVyLCBjb25uZWN0IGR5bmFtaWNhbGx5LCBhbmQgZXhlY3V0ZSB0cmFuc2FjdGlvbnMgaW4gcmVhbCB0aW1lIHdpdGggbWluaW1hbCBodW1hbiBpbnRlcmFjdGlvbi4iPldlYiBzZXJ2aWNlcyBvdmVydmlldzwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iY3dzaW53c2EuaHRtbCIgdGl0bGU9IiI+VG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL3Rhc2tzL3RvdmVyd3MuaHRtbCI+IERldmVsb3BpbmcgV2ViCi1zZXJ2aWNlczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaWwuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lsLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiMTBmMjMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaWwuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIGNvbmNlcHQgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgQ29uY2VwdC8vRU4iCi0gImNvbmNlcHQuZHRkIj4KLTxjb25jZXB0IGlkPSJjd3NpbCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5XZWIgU2VydmljZXMgSW5zcGVjdGlvbiBMYW5ndWFnZSAoV1NJTCk8L3RpdGxlPgotPHNob3J0ZGVzYz5XZWIgU2VydmljZXMgSW5zcGVjdGlvbiBMYW5ndWFnZSAoV1NJTCkgaXMgYSBzZXJ2aWNlIGRpc2NvdmVyeQotbWVjaGFuaXNtIHRoYXQgaXMgYW4gYWx0ZXJuYXRpdmUgdG8gVURESSBhcyB3ZWxsIGFzIGNvbXBsZW1lbnRhcnkgdG8gVURESS4KLVdoZW4geW91IGRpc2NvdmVyIFdlYiBzZXJ2aWNlcyB3aXRoIFVEREksIHlvdSBnbyB0byBhIGNlbnRyYWxpemVkIHJlZ2lzdHJ5LiZuYnNwOwotV1NJTCBpcyBhbiBhbHRlcm5hdGl2ZSBhcHByb2FjaCB0byBXZWIgc2VydmljZSBkaXNjb3ZlcnkuJm5ic3A7IFdTSUwgYWxsb3dzCi15b3UgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNlcnZpY2UgcHJvdmlkZXIgYW5kIGFzayBmb3IgdGhlIHNlcnZpY2VzIGl0IHByb3ZpZGVzLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5XU0lMPGluZGV4dGVybT5vdmVydmlldzwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjxpbmRleHRlcm0+V2ViCi1zZXJ2aWNlczxpbmRleHRlcm0+V1NJTDwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPGNvbmJvZHk+Ci08cD48dG0gdG1jbGFzcz0iaWJtIiB0bW93bmVyPSJJQk0gQ29ycG9yYXRpb24iIHRtdHlwZT0icmVnIiB0cmFkZW1hcms9IklCTSI+SUJNPC90bT4gYW5kCi1NaWNyb3NvZnQncyBwcm9wb3NhbCBmb3IgdGhlIFdTSUwgc3BlY2lmaWNhdGlvbiBpcyBkZXNpZ25lZCBhcm91bmQgYW4gWE1MLWJhc2VkCi1tb2RlbCBmb3IgYnVpbGRpbmcgYW4gYWdncmVnYXRpb24gb2YgcmVmZXJlbmNlcyB0byBleGlzdGluZyBXZWIgc2VydmljZSBkZXNjcmlwdGlvbnMsCi10aGF0IGFyZSBleHBvc2VkIHVzaW5nIHN0YW5kYXJkIFdlYiBzZXJ2ZXIgdGVjaG5vbG9neS48L3A+Ci08cD5XU0lMIHByb3ZpZGVzIGEgZGlzdHJpYnV0ZWQgc2VydmljZSBkaXNjb3ZlcnkgbWV0aG9kIHRoYXQgc3VwcGxpZXMgcmVmZXJlbmNlcwotdG8gc2VydmljZSBkZXNjcmlwdGlvbnMgYXQgdGhlIHNlcnZpY2UgcHJvdmlkZXIncyBwb2ludC1vZi1vZmZlcmluZywgYnkgc3BlY2lmeWluZwotaG93IHRvIGluc3BlY3QgYSBXZWIgc2l0ZSBmb3IgYXZhaWxhYmxlIFdlYiBzZXJ2aWNlcy4gVGhlIFdTSUwgc3BlY2lmaWNhdGlvbgotZGVmaW5lcyB0aGUgbG9jYXRpb25zIG9uIGEgV2ViIHNpdGUgd2hlcmUgeW91IGNhbiBsb29rIGZvciBXZWIgc2VydmljZSBkZXNjcmlwdGlvbnMuPC9wPgotPHA+U2luY2UgV1NJTCBmb2N1c2VzIG9uIGRpc3RyaWJ1dGVkIHNlcnZpY2UgZGlzY292ZXJ5LCB0aGUgV1NJTCBzcGVjaWZpY2F0aW9uCi1jb21wbGVtZW50cyBVRERJIGJ5IGZhY2lsaXRhdGluZyB0aGUgZGlzY292ZXJ5IG9mIHNlcnZpY2VzIHRoYXQgYXJlIGF2YWlsYWJsZQotb24gV2ViIHNpdGVzIHRoYXQgbWF5IG5vdCBiZSBsaXN0ZWQgeWV0IGluIGEgVURESSByZWdpc3RyeS4gQSBzZXBhcmF0ZSB0b3BpYwotaW4gdGhpcyBkb2N1bWVudGF0aW9uIGRpc2N1c3NlcyB0aGUgIDx4cmVmIGhyZWY9ImN3c2lsdWQuZGl0YSI+UmVsYXRpb25zaGlwCi1iZXR3ZWVuIFVEREkgYW5kIFdTSUw8L3hyZWY+LjwvcD4KLTxwPlRoZSBXU0lMIHNwZWNpZmljYXRpb24gZG9lcyBub3QgZGVmaW5lIGEgc2VydmljZSBkZXNjcmlwdGlvbiBsYW5ndWFnZS4mbmJzcDsKLVdTSUwgZG9jdW1lbnRzIHByb3ZpZGUgYSBtZXRob2QgZm9yIGFnZ3JlZ2F0aW5nIGRpZmZlcmVudCB0eXBlcyBvZiBzZXJ2aWNlCi1kZXNjcmlwdGlvbnMuJm5ic3A7IFdpdGhpbiBhIFdTSUwgZG9jdW1lbnQsIGEgc2luZ2xlIHNlcnZpY2UgY2FuIGhhdmUgbW9yZQotdGhhbiBvbmUgcmVmZXJlbmNlIHRvIGEgc2VydmljZSBkZXNjcmlwdGlvbi4mbmJzcDsgRm9yIGV4YW1wbGUsIGEgc2luZ2xlIFdlYgotc2VydmljZSBtaWdodCBiZSByZWZlcmVuY2VkIHR3aWNlIGluIGEgV1NJTCBkb2N1bWVudDogb25jZSBkaXJlY3RseSB2aWEgaXRzCi1XU0RMLCBhbmQgYWdhaW4gdmlhIGl0cyBidXNpbmVzc1NlcnZpY2UgZW50cnkgaW4gYSBVRERJIHJlZ2lzdHJ5LiBSZWZlcmVuY2VzCi10byB0aGVzZSB0d28gc2VydmljZSBkZXNjcmlwdGlvbnMgc2hvdWxkIGJlIHB1dCBpbnRvIGEgV1NJTCBkb2N1bWVudC4mbmJzcDsKLUlmIG11bHRpcGxlIHJlZmVyZW5jZXMgYXJlIGF2YWlsYWJsZSwgaXQgaXMgYmVuZWZpY2lhbCB0byBwdXQgYWxsIG9mIHRoZW0KLWluIHRoZSBXU0lMIGRvY3VtZW50IHNvIHRoYXQgdGhlIGFwcGxpY2F0aW9uIHRoYXQgdXNlcyB0aGUgZG9jdW1lbnQgY2FuIHNlbGVjdAotdGhlIHR5cGUgb2Ygc2VydmljZSBkZXNjcmlwdGlvbiB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aCBhbmQgcHJlZmVycmVkIGJ5IHRoYXQKLWFwcGxpY2F0aW9uLjwvcD4KLTxwPlRoZSBXU0lMIHNwZWNpZmljYXRpb24gc2VydmVzIHR3byBwcmltYXJ5IGZ1bmN0aW9uczo8L3A+Ci08dWw+Ci08bGk+V1NJTCBkZWZpbmVzIGFuIFhNTCBmb3JtYXQgZm9yIGxpc3RpbmcgcmVmZXJlbmNlcyB0byBleGlzdGluZyBzZXJ2aWNlCi1kZXNjcmlwdGlvbnMuIFRoZXNlIHNlcnZpY2UgZGVzY3JpcHRpb25zIGNhbiBiZSBkZWZpbmVkIGluIGFueSBmb3JtYXQsIHN1Y2gKLWFzIFdTREwsIFVEREksIG9yIHBsYWluIEhUTUwuJm5ic3A7IEEgV1NJTCBkb2N1bWVudCBpcyBnZW5lcmFsbHkgbWFkZSBhdmFpbGFibGUKLWF0IHRoZSBwb2ludC1vZi1vZmZlcmluZyBmb3IgdGhlIHNlcnZpY2VzIHRoYXQgYXJlIHJlZmVyZW5jZWQgd2l0aGluIHRoZSBkb2N1bWVudC4KLUEgV1NJTCBkb2N1bWVudCBjYW4gY29udGFpbiBhIGxpc3Qgb2YgcmVmZXJlbmNlcyB0byBzZXJ2aWNlIGRlc2NyaXB0aW9ucywKLWFzIHdlbGwgYXMgcmVmZXJlbmNlcyB0byBvdGhlciBXU0lMIGRvY3VtZW50cy4gIDxwPlRoZSBhYmlsaXR5IHRvIGxpbmsgYSBXU0lMCi1kb2N1bWVudCB0byBvbmUgb3IgbW9yZSBkaWZmZXJlbnQgV1NJTCBkb2N1bWVudHMgYWxsb3dzIHlvdSB0byBtYW5hZ2Ugc2VydmljZQotZGVzY3JpcHRpb24gcmVmZXJlbmNlcyBieSBncm91cGluZyB0aGVtIGludG8gZGlmZmVyZW50IGRvY3VtZW50cyBhbmQgdG8gYnVpbGQKLWEgaGllcmFyY2h5IG9mIFdTSUwgZG9jdW1lbnRzLiZuYnNwOyBGb3IgZXhhbXBsZSwgc2VwYXJhdGUgV1NJTCBkb2N1bWVudHMKLWNhbiBiZSBjcmVhdGVkIGZvciBkaWZmZXJlbnQgY2F0ZWdvcmllcyBvZiBzZXJ2aWNlcywgYW5kIG9uZSBwcmltYXJ5IFdTSUwKLWRvY3VtZW50IGNhbiBsaW5rIGFsbCBvZiB0aGVtIHRvZ2V0aGVyLjwvcD48L2xpPgotPGxpPldTSUwgZGVmaW5lcyBhIHNldCBvZiBjb252ZW50aW9ucyBzbyB0aGF0IGl0IGlzIGVhc3kgdG8gbG9jYXRlIG90aGVyIFdTSUwKLWRvY3VtZW50cy4gVGhlIFdTSUwgc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCBsaW1pdCB0aGUgdHlwZSBvZiBzZXJ2aWNlIGRlc2NyaXB0aW9ucwotdGhhdCBjYW4gYmUgcmVmZXJlbmNlZC4mbmJzcDsgVGhlIFdTSUwgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIGEgc2V0IG9mIHN0YW5kYXJkCi1leHRlbnNpYmlsaXR5IGVsZW1lbnRzIGZvciBib3RoIFdTREwgYW5kIFVEREkuJm5ic3A7IFRoZSBXU0lMIHNwZWNpZmljYXRpb24KLWlzIHRoZSBkZWZpbml0aW9uIG9mIGxvY2F0aW9ucyB3aGVyZSB5b3UgY2FuIGFjY2VzcyBXU0lMIGRvY3VtZW50cy48L2xpPgotPGxpPiBUd28gY29udmVudGlvbnMgbWFrZSB0aGUgbG9jYXRpb24gYW5kIHJldHJpZXZhbCBvZiBXU0lMIGRvY3VtZW50cyBlYXN5OiA8dWw+Ci08bGk+IDx1aWNvbnRyb2w+Rml4ZWQtbmFtZSBXU0lMIGRvY3VtZW50cy48L3VpY29udHJvbD4gVGhlIGZpeGVkIG5hbWUgZm9yCi1XU0lMIGRvY3VtZW50cyBpcyBpbnNwZWN0aW9uLndzaWwuJm5ic3A7IFRoZSBpbnNwZWN0aW9uLndzaWwgZmlsZSBpcyBwbGFjZWQKLWF0IGNvbW1vbiBlbnRyeSBwb2ludHMgZm9yIGEgV2ViIHNpdGUuJm5ic3A7IEZvciBleGFtcGxlLCBpZiB0aGUgY29tbW9uIGVudHJ5Ci1wb2ludCBpcyBodHRwOi8vZW50cnlwb2ludC5jb20gdGhlbiB0aGUgbG9jYXRpb24gb2YgdGhlIFdTSUwgZG9jdW1lbnQgd291bGQKLWJlIGh0dHA6Ly9lbnRyeXBvaW50LmNvbS9pbnNwZWN0aW9uLndzaWw8L2xpPgotPGxpPiA8dWljb250cm9sPkxpbmtlZCBXU0lMIGRvY3VtZW50cy48L3VpY29udHJvbD4gUmVmZXJlbmNlcyB0byBXU0lMIGRvY3VtZW50cwotY2FuIGFsc28gYXBwZWFyIHdpdGhpbiBkaWZmZXJlbnQgY29udGVudCBkb2N1bWVudHMsIHN1Y2ggYXMgSFRNTCBwYWdlcy48L2xpPgotPC91bD4gPC9saT4KLTwvdWw+Ci08cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgV2ViIFNlcnZpY2VzIEluc3BlY3Rpb24gTGFuZ3VhZ2Ugc3BlY2lmaWNhdGlvbiwKLXJlZmVyIHRvICA8eHJlZiBocmVmPSJodHRwOi8vd3d3LTEwNi5pYm0uY29tL2RldmVsb3BlcndvcmtzL3dlYnNlcnZpY2VzL2xpYnJhcnkvd3Mtd3NpbHNwZWMuaHRtbCIKLXNjb3BlPSJleHRlcm5hbCI+IHd3dy5pYm0uY29tL2RldmVsb3BlcndvcmtzL3dlYnNlcnZpY2VzL2xpYnJhcnkvd3Mtd3NpbHNwZWMuaHRtbDwveHJlZj48L3A+Ci08L2NvbmJvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBDb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSJjd3MuZGl0YSI+PGxpbmt0ZXh0PldlYiBzZXJ2aWNlcyBvdmVydmlldzwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iY3dzaW53c2EuZGl0YSI+PGxpbmt0ZXh0PlRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PgotPC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+Ci08bGluayBocmVmPSIuLi90YXNrcy90b3ZlcndzLmRpdGEiIHNjb3BlPSJwZWVyIj48bGlua3RleHQ+IERldmVsb3BpbmcgV2ViCi1zZXJ2aWNlczwvbGlua3RleHQ+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvY29uY2VwdD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lsLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzIwZjAxLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lsLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMjAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDciIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9ImNvbmNlcHQiIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iV2ViIFNlcnZpY2VzIEluc3BlY3Rpb24gTGFuZ3VhZ2UgKFdTSUwpIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IldlYiBTZXJ2aWNlcyBJbnNwZWN0aW9uIExhbmd1YWdlIChXU0lMKSBpcyBhIHNlcnZpY2UgZGlzY292ZXJ5IG1lY2hhbmlzbSB0aGF0IGlzIGFuIGFsdGVybmF0aXZlIHRvIFVEREkgYXMgd2VsbCBhcyBjb21wbGVtZW50YXJ5IHRvIFVEREkuIFdoZW4geW91IGRpc2NvdmVyIFdlYiBzZXJ2aWNlcyB3aXRoIFVEREksIHlvdSBnbyB0byBhIGNlbnRyYWxpemVkIHJlZ2lzdHJ5LsKgIFdTSUwgaXMgYW4gYWx0ZXJuYXRpdmUgYXBwcm9hY2ggdG8gV2ViIHNlcnZpY2UgZGlzY292ZXJ5LsKgIFdTSUwgYWxsb3dzIHlvdSB0byBnbyBkaXJlY3RseSB0byB0aGUgc2VydmljZSBwcm92aWRlciBhbmQgYXNrIGZvciB0aGUgc2VydmljZXMgaXQgcHJvdmlkZXMuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IldlYiBTZXJ2aWNlcyBJbnNwZWN0aW9uIExhbmd1YWdlIChXU0lMKSBpcyBhIHNlcnZpY2UgZGlzY292ZXJ5IG1lY2hhbmlzbSB0aGF0IGlzIGFuIGFsdGVybmF0aXZlIHRvIFVEREkgYXMgd2VsbCBhcyBjb21wbGVtZW50YXJ5IHRvIFVEREkuIFdoZW4geW91IGRpc2NvdmVyIFdlYiBzZXJ2aWNlcyB3aXRoIFVEREksIHlvdSBnbyB0byBhIGNlbnRyYWxpemVkIHJlZ2lzdHJ5LsKgIFdTSUwgaXMgYW4gYWx0ZXJuYXRpdmUgYXBwcm9hY2ggdG8gV2ViIHNlcnZpY2UgZGlzY292ZXJ5LsKgIFdTSUwgYWxsb3dzIHlvdSB0byBnbyBkaXJlY3RseSB0byB0aGUgc2VydmljZSBwcm92aWRlciBhbmQgYXNrIGZvciB0aGUgc2VydmljZXMgaXQgcHJvdmlkZXMuIiAvPgotPG1ldGEgY29udGVudD0iV1NJTCwgb3ZlcnZpZXcsIFdlYiBzZXJ2aWNlcyIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IldTSUwsIG92ZXJ2aWV3LCBXZWIgc2VydmljZXMiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJjd3MuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iY3dzaW53c2EuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdGFza3MvdG92ZXJ3cy5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9ImN3c2lsIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+V2ViIFNlcnZpY2VzIEluc3BlY3Rpb24gTGFuZ3VhZ2UgKFdTSUwpPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJjd3NpbCI+PGEgbmFtZT0iY3dzaWwiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPldlYiBTZXJ2aWNlcyBJbnNwZWN0aW9uIExhbmd1YWdlIChXU0lMKTwvaDE+Ci0KLQotCi08ZGl2PjxwPldlYiBTZXJ2aWNlcyBJbnNwZWN0aW9uIExhbmd1YWdlIChXU0lMKSBpcyBhIHNlcnZpY2UgZGlzY292ZXJ5Ci1tZWNoYW5pc20gdGhhdCBpcyBhbiBhbHRlcm5hdGl2ZSB0byBVRERJIGFzIHdlbGwgYXMgY29tcGxlbWVudGFyeSB0byBVRERJLgotV2hlbiB5b3UgZGlzY292ZXIgV2ViIHNlcnZpY2VzIHdpdGggVURESSwgeW91IGdvIHRvIGEgY2VudHJhbGl6ZWQgcmVnaXN0cnkuwqAKLVdTSUwgaXMgYW4gYWx0ZXJuYXRpdmUgYXBwcm9hY2ggdG8gV2ViIHNlcnZpY2UgZGlzY292ZXJ5LsKgIFdTSUwgYWxsb3dzCi15b3UgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNlcnZpY2UgcHJvdmlkZXIgYW5kIGFzayBmb3IgdGhlIHNlcnZpY2VzIGl0IHByb3ZpZGVzLjwvcD4KLQotPHA+SUJNPHN1cD7Crjwvc3VwPiBhbmQKLU1pY3Jvc29mdCdzIHByb3Bvc2FsIGZvciB0aGUgV1NJTCBzcGVjaWZpY2F0aW9uIGlzIGRlc2lnbmVkIGFyb3VuZCBhbiBYTUwtYmFzZWQKLW1vZGVsIGZvciBidWlsZGluZyBhbiBhZ2dyZWdhdGlvbiBvZiByZWZlcmVuY2VzIHRvIGV4aXN0aW5nIFdlYiBzZXJ2aWNlIGRlc2NyaXB0aW9ucywKLXRoYXQgYXJlIGV4cG9zZWQgdXNpbmcgc3RhbmRhcmQgV2ViIHNlcnZlciB0ZWNobm9sb2d5LjwvcD4KLQotPHA+V1NJTCBwcm92aWRlcyBhIGRpc3RyaWJ1dGVkIHNlcnZpY2UgZGlzY292ZXJ5IG1ldGhvZCB0aGF0IHN1cHBsaWVzIHJlZmVyZW5jZXMKLXRvIHNlcnZpY2UgZGVzY3JpcHRpb25zIGF0IHRoZSBzZXJ2aWNlIHByb3ZpZGVyJ3MgcG9pbnQtb2Ytb2ZmZXJpbmcsIGJ5IHNwZWNpZnlpbmcKLWhvdyB0byBpbnNwZWN0IGEgV2ViIHNpdGUgZm9yIGF2YWlsYWJsZSBXZWIgc2VydmljZXMuIFRoZSBXU0lMIHNwZWNpZmljYXRpb24KLWRlZmluZXMgdGhlIGxvY2F0aW9ucyBvbiBhIFdlYiBzaXRlIHdoZXJlIHlvdSBjYW4gbG9vayBmb3IgV2ViIHNlcnZpY2UgZGVzY3JpcHRpb25zLjwvcD4KLQotPHA+U2luY2UgV1NJTCBmb2N1c2VzIG9uIGRpc3RyaWJ1dGVkIHNlcnZpY2UgZGlzY292ZXJ5LCB0aGUgV1NJTCBzcGVjaWZpY2F0aW9uCi1jb21wbGVtZW50cyBVRERJIGJ5IGZhY2lsaXRhdGluZyB0aGUgZGlzY292ZXJ5IG9mIHNlcnZpY2VzIHRoYXQgYXJlIGF2YWlsYWJsZQotb24gV2ViIHNpdGVzIHRoYXQgbWF5IG5vdCBiZSBsaXN0ZWQgeWV0IGluIGEgVURESSByZWdpc3RyeS4gQSBzZXBhcmF0ZSB0b3BpYwotaW4gdGhpcyBkb2N1bWVudGF0aW9uIGRpc2N1c3NlcyB0aGUgIDxhIGhyZWY9ImN3c2lsdWQuaHRtbCI+UmVsYXRpb25zaGlwIGJldHdlZW4gVURESSBhbmQgV1NJTDwvYT4uPC9wPgotCi08cD5UaGUgV1NJTCBzcGVjaWZpY2F0aW9uIGRvZXMgbm90IGRlZmluZSBhIHNlcnZpY2UgZGVzY3JpcHRpb24gbGFuZ3VhZ2UuwqAKLVdTSUwgZG9jdW1lbnRzIHByb3ZpZGUgYSBtZXRob2QgZm9yIGFnZ3JlZ2F0aW5nIGRpZmZlcmVudCB0eXBlcyBvZiBzZXJ2aWNlCi1kZXNjcmlwdGlvbnMuwqAgV2l0aGluIGEgV1NJTCBkb2N1bWVudCwgYSBzaW5nbGUgc2VydmljZSBjYW4gaGF2ZSBtb3JlCi10aGFuIG9uZSByZWZlcmVuY2UgdG8gYSBzZXJ2aWNlIGRlc2NyaXB0aW9uLsKgIEZvciBleGFtcGxlLCBhIHNpbmdsZSBXZWIKLXNlcnZpY2UgbWlnaHQgYmUgcmVmZXJlbmNlZCB0d2ljZSBpbiBhIFdTSUwgZG9jdW1lbnQ6IG9uY2UgZGlyZWN0bHkgdmlhIGl0cwotV1NETCwgYW5kIGFnYWluIHZpYSBpdHMgYnVzaW5lc3NTZXJ2aWNlIGVudHJ5IGluIGEgVURESSByZWdpc3RyeS4gUmVmZXJlbmNlcwotdG8gdGhlc2UgdHdvIHNlcnZpY2UgZGVzY3JpcHRpb25zIHNob3VsZCBiZSBwdXQgaW50byBhIFdTSUwgZG9jdW1lbnQuwqAKLUlmIG11bHRpcGxlIHJlZmVyZW5jZXMgYXJlIGF2YWlsYWJsZSwgaXQgaXMgYmVuZWZpY2lhbCB0byBwdXQgYWxsIG9mIHRoZW0KLWluIHRoZSBXU0lMIGRvY3VtZW50IHNvIHRoYXQgdGhlIGFwcGxpY2F0aW9uIHRoYXQgdXNlcyB0aGUgZG9jdW1lbnQgY2FuIHNlbGVjdAotdGhlIHR5cGUgb2Ygc2VydmljZSBkZXNjcmlwdGlvbiB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aCBhbmQgcHJlZmVycmVkIGJ5IHRoYXQKLWFwcGxpY2F0aW9uLjwvcD4KLQotPHA+VGhlIFdTSUwgc3BlY2lmaWNhdGlvbiBzZXJ2ZXMgdHdvIHByaW1hcnkgZnVuY3Rpb25zOjwvcD4KLQotPHVsPgotPGxpPldTSUwgZGVmaW5lcyBhbiBYTUwgZm9ybWF0IGZvciBsaXN0aW5nIHJlZmVyZW5jZXMgdG8gZXhpc3Rpbmcgc2VydmljZQotZGVzY3JpcHRpb25zLiBUaGVzZSBzZXJ2aWNlIGRlc2NyaXB0aW9ucyBjYW4gYmUgZGVmaW5lZCBpbiBhbnkgZm9ybWF0LCBzdWNoCi1hcyBXU0RMLCBVRERJLCBvciBwbGFpbiBIVE1MLsKgIEEgV1NJTCBkb2N1bWVudCBpcyBnZW5lcmFsbHkgbWFkZSBhdmFpbGFibGUKLWF0IHRoZSBwb2ludC1vZi1vZmZlcmluZyBmb3IgdGhlIHNlcnZpY2VzIHRoYXQgYXJlIHJlZmVyZW5jZWQgd2l0aGluIHRoZSBkb2N1bWVudC4KLUEgV1NJTCBkb2N1bWVudCBjYW4gY29udGFpbiBhIGxpc3Qgb2YgcmVmZXJlbmNlcyB0byBzZXJ2aWNlIGRlc2NyaXB0aW9ucywKLWFzIHdlbGwgYXMgcmVmZXJlbmNlcyB0byBvdGhlciBXU0lMIGRvY3VtZW50cy4gIDxwPlRoZSBhYmlsaXR5IHRvIGxpbmsgYSBXU0lMCi1kb2N1bWVudCB0byBvbmUgb3IgbW9yZSBkaWZmZXJlbnQgV1NJTCBkb2N1bWVudHMgYWxsb3dzIHlvdSB0byBtYW5hZ2Ugc2VydmljZQotZGVzY3JpcHRpb24gcmVmZXJlbmNlcyBieSBncm91cGluZyB0aGVtIGludG8gZGlmZmVyZW50IGRvY3VtZW50cyBhbmQgdG8gYnVpbGQKLWEgaGllcmFyY2h5IG9mIFdTSUwgZG9jdW1lbnRzLsKgIEZvciBleGFtcGxlLCBzZXBhcmF0ZSBXU0lMIGRvY3VtZW50cwotY2FuIGJlIGNyZWF0ZWQgZm9yIGRpZmZlcmVudCBjYXRlZ29yaWVzIG9mIHNlcnZpY2VzLCBhbmQgb25lIHByaW1hcnkgV1NJTAotZG9jdW1lbnQgY2FuIGxpbmsgYWxsIG9mIHRoZW0gdG9nZXRoZXIuPC9wPgotPC9saT4KLQotPGxpPldTSUwgZGVmaW5lcyBhIHNldCBvZiBjb252ZW50aW9ucyBzbyB0aGF0IGl0IGlzIGVhc3kgdG8gbG9jYXRlIG90aGVyIFdTSUwKLWRvY3VtZW50cy4gVGhlIFdTSUwgc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCBsaW1pdCB0aGUgdHlwZSBvZiBzZXJ2aWNlIGRlc2NyaXB0aW9ucwotdGhhdCBjYW4gYmUgcmVmZXJlbmNlZC7CoCBUaGUgV1NJTCBzcGVjaWZpY2F0aW9uIGRlZmluZXMgYSBzZXQgb2Ygc3RhbmRhcmQKLWV4dGVuc2liaWxpdHkgZWxlbWVudHMgZm9yIGJvdGggV1NETCBhbmQgVURESS7CoCBUaGUgV1NJTCBzcGVjaWZpY2F0aW9uCi1pcyB0aGUgZGVmaW5pdGlvbiBvZiBsb2NhdGlvbnMgd2hlcmUgeW91IGNhbiBhY2Nlc3MgV1NJTCBkb2N1bWVudHMuPC9saT4KLQotPGxpPiBUd28gY29udmVudGlvbnMgbWFrZSB0aGUgbG9jYXRpb24gYW5kIHJldHJpZXZhbCBvZiBXU0lMIGRvY3VtZW50cyBlYXN5OiA8dWw+Ci08bGk+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkZpeGVkLW5hbWUgV1NJTCBkb2N1bWVudHMuPC9zcGFuPiBUaGUgZml4ZWQgbmFtZSBmb3IKLVdTSUwgZG9jdW1lbnRzIGlzIGluc3BlY3Rpb24ud3NpbC7CoCBUaGUgaW5zcGVjdGlvbi53c2lsIGZpbGUgaXMgcGxhY2VkCi1hdCBjb21tb24gZW50cnkgcG9pbnRzIGZvciBhIFdlYiBzaXRlLsKgIEZvciBleGFtcGxlLCBpZiB0aGUgY29tbW9uIGVudHJ5Ci1wb2ludCBpcyBodHRwOi8vZW50cnlwb2ludC5jb20gdGhlbiB0aGUgbG9jYXRpb24gb2YgdGhlIFdTSUwgZG9jdW1lbnQgd291bGQKLWJlIGh0dHA6Ly9lbnRyeXBvaW50LmNvbS9pbnNwZWN0aW9uLndzaWw8L2xpPgotCi08bGk+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkxpbmtlZCBXU0lMIGRvY3VtZW50cy48L3NwYW4+IFJlZmVyZW5jZXMgdG8gV1NJTCBkb2N1bWVudHMKLWNhbiBhbHNvIGFwcGVhciB3aXRoaW4gZGlmZmVyZW50IGNvbnRlbnQgZG9jdW1lbnRzLCBzdWNoIGFzIEhUTUwgcGFnZXMuPC9saT4KLQotPC91bD4KLSA8L2xpPgotCi08L3VsPgotCi08cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgV2ViIFNlcnZpY2VzIEluc3BlY3Rpb24gTGFuZ3VhZ2Ugc3BlY2lmaWNhdGlvbiwKLXJlZmVyIHRvICA8YSBocmVmPSJodHRwOi8vd3d3LTEwNi5pYm0uY29tL2RldmVsb3BlcndvcmtzL3dlYnNlcnZpY2VzL2xpYnJhcnkvd3Mtd3NpbHNwZWMuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPnd3dy5pYm0uY29tL2RldmVsb3BlcndvcmtzL3dlYnNlcnZpY2VzL2xpYnJhcnkvd3Mtd3NpbHNwZWMuaHRtbDwvYT48L3A+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9ImN3cy5odG1sIiB0aXRsZT0iQSBXZWIgc2VydmljZSBpcyBhIHNldCBvZiByZWxhdGVkIGFwcGxpY2F0aW9uIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSBwcm9ncmFtbWF0aWNhbGx5IGludm9rZWQgb3ZlciB0aGUgSW50ZXJuZXQuIEJ1c2luZXNzZXMgY2FuIGR5bmFtaWNhbGx5IG1peCBhbmQgbWF0Y2ggV2ViIHNlcnZpY2VzIHRvIHBlcmZvcm0gY29tcGxleCB0cmFuc2FjdGlvbnMgd2l0aCBtaW5pbWFsIHByb2dyYW1taW5nLiBXZWIgc2VydmljZXMgYWxsb3cgYnV5ZXJzIGFuZCBzZWxsZXJzIGFsbCBvdmVyIHRoZSB3b3JsZCB0byBkaXNjb3ZlciBlYWNoIG90aGVyLCBjb25uZWN0IGR5bmFtaWNhbGx5LCBhbmQgZXhlY3V0ZSB0cmFuc2FjdGlvbnMgaW4gcmVhbCB0aW1lIHdpdGggbWluaW1hbCBodW1hbiBpbnRlcmFjdGlvbi4iPldlYiBzZXJ2aWNlcyBvdmVydmlldzwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iY3dzaW53c2EuaHRtbCIgdGl0bGU9IiI+VG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL3Rhc2tzL3RvdmVyd3MuaHRtbCI+IERldmVsb3BpbmcgV2ViCi1zZXJ2aWNlczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaWx1ZC5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaWx1ZC5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTU4YTBiLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lsdWQuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIGNvbmNlcHQgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgQ29uY2VwdC8vRU4iCi0gImNvbmNlcHQuZHRkIj4KLTxjb25jZXB0IGlkPSJjd3NpbHVkIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPlJlbGF0aW9uc2hpcCBiZXR3ZWVuIFVEREkgYW5kIFdTSUw8L3RpdGxlPgotPHNob3J0ZGVzYz5UaGUgV2ViIFNlcnZpY2VzIEluc3BlY3Rpb24gTGFuZ3VhZ2UgKFdTSUwpIGFuZCB0aGUgVW5pdmVyc2FsIERlc2NyaXB0aW9uLAotRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpIHNwZWNpZmljYXRpb24gYm90aCBhZGRyZXNzIGlzc3VlcyByZWxhdGVkCi10byBXZWIgc2VydmljZSBkaXNjb3ZlcnkuJm5ic3A7IEhvd2V2ZXIsIGVhY2ggc3BlY2lmaWNhdGlvbiB0YWtlcyBhIGRpZmZlcmVudAotYXBwcm9hY2ggdG8gdGhlIGRpc2NvdmVyeSBvZiBXZWIgc2VydmljZXMuJm5ic3A7IFRoZSB0d28gc3BlY2lmaWNhdGlvbnMgY2FuCi1iZSB1c2VkIHNlcGFyYXRlbHkgb3Igam9pbnRseTsgc2VhcmNoaW5nIHdpdGggV1NJTCBjYW4gcmVzdWx0IGluIGZpbmRpbmcgaXRlbXMKLWluIFVEREkuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPlVEREk8aW5kZXh0ZXJtPnJlbGF0aW9uc2hpcCB3aXRoIFdTSUw8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+V1NJTDxpbmRleHRlcm0+cmVsYXRpb25zaGlwIHdpdGggVURESTwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPGNvbmJvZHk+Ci08cD5UaGUgVURESSBzcGVjaWZpY2F0aW9uIGFkZHJlc3NlcyBXZWIgc2VydmljZSBkaXNjb3ZlcnkgdGhyb3VnaCB0aGUgdXNlCi1vZiBhIGNlbnRyYWxpemVkIG1vZGVsLiZuYnNwOyBPbmUgb3IgbW9yZSByZXBvc2l0b3JpZXMgYXJlIGNyZWF0ZWQgdG8gaG91c2UKLWluZm9ybWF0aW9uIGFib3V0IGJ1c2luZXNzZXMgYW5kIHRoZSBzZXJ2aWNlcyB0aGV5IG9mZmVyLiZuYnNwOyBSZXF1ZXN0cyBhbmQKLXVwZGF0ZXMgcGVydGFpbmluZyB0byB0aGUgc2VydmljZSBhbmQgYnVzaW5lc3MgcmVsYXRlZCBpbmZvcm1hdGlvbiBhcmUgaXNzdWVkCi1kaXJlY3RseSBhZ2FpbnN0IHRoZSByZXBvc2l0b3JpZXMuJm5ic3A7IEluIGFkZGl0aW9uLCBVRERJIHByZXNjcmliZXMgYSBzcGVjaWZpYwotZm9ybWF0IGZvciBhIHBvcnRpb24gb2YgdGhlIHN0b3JlZCBkZXNjcmlwdGlvbiBpbmZvcm1hdGlvbiBhbmQsIHRvIGZhY2lsaXRhdGUKLWFkdmFuY2VkIChmb2N1c2VkKSBzZWFyY2hpbmcsIGFzc3VtZXMgdGhhdCBvdGhlciBkZXNjcmlwdGlvbiBpbmZvcm1hdGlvbiB3aWxsCi1iZSBzdG9yZWQgYW5kIHJlZ2lzdGVyZWQgd2l0aGluIHRoZSBzeXN0ZW0gYXMgd2VsbC48L3A+Ci08cD5VRERJIHN5c3RlbXMgZmFjaWxpdGF0ZSBmb2N1c2VkIGRpc2NvdmVyeSBwYXR0ZXJucyBzaW5jZSB0aGVzZSBzeXN0ZW1zCi1hcmUgYmFzZWQgb24gb3JnYW5pemVkIHJlcG9zaXRvcmllcyB0aGF0IHByb3ZpZGUgYWR2YW5jZWQgc2VhcmNoaW5nIGNhcGFiaWxpdGllcy4mbmJzcDsKLVRoaXMgaGVscHMgcmVxdWVzdG9ycyBsb2NhdGUgcG90ZW50aWFsIGNvbW11bmljYXRpb24gcGFydG5lcnMuJm5ic3A7IEluIG9yZGVyCi10byBwcm92aWRlIGFkdmFuY2VkIGZ1bmN0aW9uYWxpdHksIGhvd2V2ZXIsIFVEREkgcmVxdWlyZXMgdGhlIGRlcGxveW1lbnQgYW5kCi1tYWludGVuYW5jZSBvZiBhIGNlcnRhaW4gYW1vdW50IG9mIGluZnJhc3RydWN0dXJlLCB0aHVzIGluY3JlYXNpbmcgdGhlIGNvc3QKLW9mIG9wZXJhdGlvbi4mbmJzcDsgSW4gYWRkaXRpb24sIHVubGVzcyB0aGUgc2VydmljZSBkZXNjcmlwdGlvbnMgYXJlIHN0b3JlZAotb25seSB3aXRoaW4gVURESSwgdGhlcmUgaXMgYSBjb3N0IGFzc29jaWF0ZWQgd2l0aCBrZWVwaW5nIHRoZSBkaWZmZXJlbnQgdmVyc2lvbnMKLXN5bmNocm9uaXplZC48L3A+Ci08cD5UaGUgV1NJTCBzcGVjaWZpY2F0aW9uIHJlbGllcyBvbiBhIGNvbXBsZXRlbHkgZGlzdHJpYnV0ZWQgbW9kZWwgZm9yIHByb3ZpZGluZwotc2VydmljZS1yZWxhdGVkIGluZm9ybWF0aW9uLiZuYnNwOyBUaGUgc2VydmljZSBkZXNjcmlwdGlvbnMgY2FuIGJlIHN0b3JlZAotYXQgYW55IGxvY2F0aW9uLCBhbmQgcmVxdWVzdHMgdG8gcmV0cmlldmUgdGhlIGluZm9ybWF0aW9uIGFyZSBnZW5lcmFsbHkgbWFkZQotZGlyZWN0bHkgdG8gdGhlIGVudGl0aWVzIHRoYXQgYXJlIG9mZmVyaW5nIHRoZSBzZXJ2aWNlcy4mbmJzcDsgVGhlIFdTSUwgc3BlY2lmaWNhdGlvbgotZG9lcyBub3Qgc3RpcHVsYXRlIGFueSBwYXJ0aWN1bGFyIGZvcm1hdCBmb3IgdGhlIHNlcnZpY2UgaW5mb3JtYXRpb24uJm5ic3A7Ci1JdCByZWxpZXMgb24gb3RoZXIgc3RhbmRhcmRzLCBpbmNsdWRpbmcgVURESSwgdG8gZGVmaW5lIHRoZSBkZXNjcmlwdGlvbiBmb3JtYXRzLiZuYnNwOwotVGhlIFdTSUwgc3BlY2lmaWNhdGlvbiBhbHNvIHJlbGllcyBvbiBleGlzdGluZyBXZWIgdGVjaG5vbG9naWVzIGFuZCBpbmZyYXN0cnVjdHVyZQotdG8gcHJvdmlkZSBtZWNoYW5pc21zIGZvciBwdWJsaXNoaW5nIGFuZCByZXRyaWV2aW5nIGl0cyBkb2N1bWVudHMuPC9wPgotPHA+V1NJTCBwcm92aWRlcyB0aGUgYWJpbGl0eSB0byBkaXNzZW1pbmF0ZSBzZXJ2aWNlLXJlbGF0ZWQgaW5mb3JtYXRpb24gdGhyb3VnaAotZXhpc3RpbmcgcHJvdG9jb2xzIGRpcmVjdGx5IGZyb20gdGhlIHBvaW50IGF0IHdoaWNoIHRoZSBzZXJ2aWNlIGlzIGJlaW5nIG9mZmVyZWQuJm5ic3A7Ci1UaGlzIGVuYWJsZXMgZm9jdXNlZCBkaXNjb3ZlcnkgdG8gYmUgcGVyZm9ybWVkIG9uIGEgc2luZ2xlIHRhcmdldDsgaG93ZXZlciwKLWJlY2F1c2Ugb2YgaXRzIGRlY2VudHJhbGl6ZWQgYW5kIGRpc3RyaWJ1dGVkIG1vZGVsLCBXU0lMIGlzIG5vdCBhIGdvb2QgbWVjaGFuaXNtCi1mb3IgZXhlY3V0aW5nIGZvY3VzZWQgZGlzY292ZXJ5IGlmIHRoZSBjb21tdW5pY2F0aW9uIHBhcnRuZXIgaXMgdW5rbm93bi48L3A+Ci08cD5UaGUgVURESSBhbmQgV1NJTCBzcGVjaWZpY2F0aW9ucyBzaG91bGQgYmUgdmlld2VkIGFzIGNvbXBsZW1lbnRhcnkgdGVjaG5vbG9naWVzCi10byBiZSB1c2VkIGVpdGhlciB0b2dldGhlciBvciBzZXBhcmF0ZWx5IGRlcGVuZGluZyBvbiB0aGUgc2l0dWF0aW9uLiZuYnNwOwotRm9yIGV4YW1wbGUsIGEgVURESSByZXBvc2l0b3J5IGNvdWxkIGJlIHBvcHVsYXRlZCBiYXNlZCBvbiB0aGUgcmVzdWx0cyBmb3VuZAotd2hlbiBwZXJmb3JtaW5nIGEgc2VhcmNoIGZvciBXU0lMIGRvY3VtZW50cy4mbmJzcDsgTGlrZXdpc2UsIGEgVURESSByZXBvc2l0b3J5Ci1tYXkgaXRzZWxmIGJlIGRpc2NvdmVyZWQgd2hlbiBhIHJlcXVlc3RlciByZXRyaWV2ZXMgYSBXU0lMIGRvY3VtZW50IHRoYXQgcmVmZXJlbmNlcwotYW4gZW50cnkgaW4gdGhlIHJlcG9zaXRvcnkuJm5ic3A7IEluIGVudmlyb25tZW50cyB3aGVyZSB0aGUgYWR2YW5jZWQgZnVuY3Rpb25hbGl0eQotYWZmb3JkZWQgYnkgVURESSBpcyBub3QgcmVxdWlyZWQgYW5kIHdoZXJlIGNvbnN0cmFpbnRzIGRvIG5vdCBhbGxvdyBmb3IgaXRzCi1kZXBsb3ltZW50LCB0aGUgV1NJTCBtZWNoYW5pc20gbWF5IHByb3ZpZGUgYWxsIG9mIHRoZSBjYXBhYmlsaXRpZXMgdGhhdCBhcmUKLW5lZWRlZC4mbmJzcDsgSW4gc2l0dWF0aW9ucyB3aGVyZSBkYXRhIG5lZWRzIHRvIGJlIGNlbnRyYWxseSBtYW5hZ2VkLCBhIFVEREkKLXNvbHV0aW9uIGFsb25lIG1heSBwcm92aWRlIHRoZSBiZXN0IGZpdC4mbmJzcDsgVGhlIFVEREkgYW5kIFdTSUwgc3BlY2lmaWNhdGlvbnMKLXNob3VsZCBub3QgYmUgdmlld2VkIGFzIG11dHVhbGx5IGV4Y2x1c2l2ZS48L3A+Ci08bm90ZT5Cb3RoIFVEREkgYW5kIFdTSUwgY29udGFpbiBvbmx5IHJlZmVyZW5jZXMgdG8gV1NETCAtIHRoZXkgZG8gbm90IGNvbnRhaW4KLXRoZSBXU0RMIGRvY3VtZW50cyB0aGVtc2VsdmVzLjwvbm90ZT4KLTwvY29uYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9ImN3cy5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJjd3NpbndzYS5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJjd3NpbC5kaXRhIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL3Rhc2tzL3RvdmVyd3MuZGl0YSIgc2NvcGU9InBlZXIiPjxsaW5rdGV4dD4gRGV2ZWxvcGluZyBXZWIKLXNlcnZpY2VzPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC9jb25jZXB0PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaWx1ZC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaWx1ZC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzNjNDRkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lsdWQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwNyIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0iY29uY2VwdCIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJSZWxhdGlvbnNoaXAgYmV0d2VlbiBVRERJIGFuZCBXU0lMIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IlRoZSBXZWIgU2VydmljZXMgSW5zcGVjdGlvbiBMYW5ndWFnZSAoV1NJTCkgYW5kIHRoZSBVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSBzcGVjaWZpY2F0aW9uIGJvdGggYWRkcmVzcyBpc3N1ZXMgcmVsYXRlZCB0byBXZWIgc2VydmljZSBkaXNjb3ZlcnkuwqAgSG93ZXZlciwgZWFjaCBzcGVjaWZpY2F0aW9uIHRha2VzIGEgZGlmZmVyZW50IGFwcHJvYWNoIHRvIHRoZSBkaXNjb3Zlcnkgb2YgV2ViIHNlcnZpY2VzLsKgIFRoZSB0d28gc3BlY2lmaWNhdGlvbnMgY2FuIGJlIHVzZWQgc2VwYXJhdGVseSBvciBqb2ludGx5OyBzZWFyY2hpbmcgd2l0aCBXU0lMIGNhbiByZXN1bHQgaW4gZmluZGluZyBpdGVtcyBpbiBVRERJLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgV2ViIFNlcnZpY2VzIEluc3BlY3Rpb24gTGFuZ3VhZ2UgKFdTSUwpIGFuZCB0aGUgVW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkgc3BlY2lmaWNhdGlvbiBib3RoIGFkZHJlc3MgaXNzdWVzIHJlbGF0ZWQgdG8gV2ViIHNlcnZpY2UgZGlzY292ZXJ5LsKgIEhvd2V2ZXIsIGVhY2ggc3BlY2lmaWNhdGlvbiB0YWtlcyBhIGRpZmZlcmVudCBhcHByb2FjaCB0byB0aGUgZGlzY292ZXJ5IG9mIFdlYiBzZXJ2aWNlcy7CoCBUaGUgdHdvIHNwZWNpZmljYXRpb25zIGNhbiBiZSB1c2VkIHNlcGFyYXRlbHkgb3Igam9pbnRseTsgc2VhcmNoaW5nIHdpdGggV1NJTCBjYW4gcmVzdWx0IGluIGZpbmRpbmcgaXRlbXMgaW4gVURESS4iIC8+Ci08bWV0YSBjb250ZW50PSJVRERJLCByZWxhdGlvbnNoaXAgd2l0aCBXU0lMLCBXU0lMLCByZWxhdGlvbnNoaXAgd2l0aCBVRERJIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iVURESSwgcmVsYXRpb25zaGlwIHdpdGggV1NJTCwgV1NJTCwgcmVsYXRpb25zaGlwIHdpdGggVURESSIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9ImN3cy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJjd3NpbndzYS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJjd3NpbC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90YXNrcy90b3ZlcndzLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0iY3dzaWx1ZCIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPlJlbGF0aW9uc2hpcCBiZXR3ZWVuIFVEREkgYW5kIFdTSUw8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9ImN3c2lsdWQiPjxhIG5hbWU9ImN3c2lsdWQiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPlJlbGF0aW9uc2hpcCBiZXR3ZWVuIFVEREkgYW5kIFdTSUw8L2gxPgotCi0KLQotPGRpdj48cD5UaGUgV2ViIFNlcnZpY2VzIEluc3BlY3Rpb24gTGFuZ3VhZ2UgKFdTSUwpIGFuZCB0aGUgVW5pdmVyc2FsIERlc2NyaXB0aW9uLAotRGlzY292ZXJ5LCBhbmQgSW50ZWdyYXRpb24gKFVEREkpIHNwZWNpZmljYXRpb24gYm90aCBhZGRyZXNzIGlzc3VlcyByZWxhdGVkCi10byBXZWIgc2VydmljZSBkaXNjb3ZlcnkuwqAgSG93ZXZlciwgZWFjaCBzcGVjaWZpY2F0aW9uIHRha2VzIGEgZGlmZmVyZW50Ci1hcHByb2FjaCB0byB0aGUgZGlzY292ZXJ5IG9mIFdlYiBzZXJ2aWNlcy7CoCBUaGUgdHdvIHNwZWNpZmljYXRpb25zIGNhbgotYmUgdXNlZCBzZXBhcmF0ZWx5IG9yIGpvaW50bHk7IHNlYXJjaGluZyB3aXRoIFdTSUwgY2FuIHJlc3VsdCBpbiBmaW5kaW5nIGl0ZW1zCi1pbiBVRERJLjwvcD4KLQotPHA+VGhlIFVEREkgc3BlY2lmaWNhdGlvbiBhZGRyZXNzZXMgV2ViIHNlcnZpY2UgZGlzY292ZXJ5IHRocm91Z2ggdGhlIHVzZQotb2YgYSBjZW50cmFsaXplZCBtb2RlbC7CoCBPbmUgb3IgbW9yZSByZXBvc2l0b3JpZXMgYXJlIGNyZWF0ZWQgdG8gaG91c2UKLWluZm9ybWF0aW9uIGFib3V0IGJ1c2luZXNzZXMgYW5kIHRoZSBzZXJ2aWNlcyB0aGV5IG9mZmVyLsKgIFJlcXVlc3RzIGFuZAotdXBkYXRlcyBwZXJ0YWluaW5nIHRvIHRoZSBzZXJ2aWNlIGFuZCBidXNpbmVzcyByZWxhdGVkIGluZm9ybWF0aW9uIGFyZSBpc3N1ZWQKLWRpcmVjdGx5IGFnYWluc3QgdGhlIHJlcG9zaXRvcmllcy7CoCBJbiBhZGRpdGlvbiwgVURESSBwcmVzY3JpYmVzIGEgc3BlY2lmaWMKLWZvcm1hdCBmb3IgYSBwb3J0aW9uIG9mIHRoZSBzdG9yZWQgZGVzY3JpcHRpb24gaW5mb3JtYXRpb24gYW5kLCB0byBmYWNpbGl0YXRlCi1hZHZhbmNlZCAoZm9jdXNlZCkgc2VhcmNoaW5nLCBhc3N1bWVzIHRoYXQgb3RoZXIgZGVzY3JpcHRpb24gaW5mb3JtYXRpb24gd2lsbAotYmUgc3RvcmVkIGFuZCByZWdpc3RlcmVkIHdpdGhpbiB0aGUgc3lzdGVtIGFzIHdlbGwuPC9wPgotCi08cD5VRERJIHN5c3RlbXMgZmFjaWxpdGF0ZSBmb2N1c2VkIGRpc2NvdmVyeSBwYXR0ZXJucyBzaW5jZSB0aGVzZSBzeXN0ZW1zCi1hcmUgYmFzZWQgb24gb3JnYW5pemVkIHJlcG9zaXRvcmllcyB0aGF0IHByb3ZpZGUgYWR2YW5jZWQgc2VhcmNoaW5nIGNhcGFiaWxpdGllcy7CoAotVGhpcyBoZWxwcyByZXF1ZXN0b3JzIGxvY2F0ZSBwb3RlbnRpYWwgY29tbXVuaWNhdGlvbiBwYXJ0bmVycy7CoCBJbiBvcmRlcgotdG8gcHJvdmlkZSBhZHZhbmNlZCBmdW5jdGlvbmFsaXR5LCBob3dldmVyLCBVRERJIHJlcXVpcmVzIHRoZSBkZXBsb3ltZW50IGFuZAotbWFpbnRlbmFuY2Ugb2YgYSBjZXJ0YWluIGFtb3VudCBvZiBpbmZyYXN0cnVjdHVyZSwgdGh1cyBpbmNyZWFzaW5nIHRoZSBjb3N0Ci1vZiBvcGVyYXRpb24uwqAgSW4gYWRkaXRpb24sIHVubGVzcyB0aGUgc2VydmljZSBkZXNjcmlwdGlvbnMgYXJlIHN0b3JlZAotb25seSB3aXRoaW4gVURESSwgdGhlcmUgaXMgYSBjb3N0IGFzc29jaWF0ZWQgd2l0aCBrZWVwaW5nIHRoZSBkaWZmZXJlbnQgdmVyc2lvbnMKLXN5bmNocm9uaXplZC48L3A+Ci0KLTxwPlRoZSBXU0lMIHNwZWNpZmljYXRpb24gcmVsaWVzIG9uIGEgY29tcGxldGVseSBkaXN0cmlidXRlZCBtb2RlbCBmb3IgcHJvdmlkaW5nCi1zZXJ2aWNlLXJlbGF0ZWQgaW5mb3JtYXRpb24uwqAgVGhlIHNlcnZpY2UgZGVzY3JpcHRpb25zIGNhbiBiZSBzdG9yZWQKLWF0IGFueSBsb2NhdGlvbiwgYW5kIHJlcXVlc3RzIHRvIHJldHJpZXZlIHRoZSBpbmZvcm1hdGlvbiBhcmUgZ2VuZXJhbGx5IG1hZGUKLWRpcmVjdGx5IHRvIHRoZSBlbnRpdGllcyB0aGF0IGFyZSBvZmZlcmluZyB0aGUgc2VydmljZXMuwqAgVGhlIFdTSUwgc3BlY2lmaWNhdGlvbgotZG9lcyBub3Qgc3RpcHVsYXRlIGFueSBwYXJ0aWN1bGFyIGZvcm1hdCBmb3IgdGhlIHNlcnZpY2UgaW5mb3JtYXRpb24uwqAKLUl0IHJlbGllcyBvbiBvdGhlciBzdGFuZGFyZHMsIGluY2x1ZGluZyBVRERJLCB0byBkZWZpbmUgdGhlIGRlc2NyaXB0aW9uIGZvcm1hdHMuwqAKLVRoZSBXU0lMIHNwZWNpZmljYXRpb24gYWxzbyByZWxpZXMgb24gZXhpc3RpbmcgV2ViIHRlY2hub2xvZ2llcyBhbmQgaW5mcmFzdHJ1Y3R1cmUKLXRvIHByb3ZpZGUgbWVjaGFuaXNtcyBmb3IgcHVibGlzaGluZyBhbmQgcmV0cmlldmluZyBpdHMgZG9jdW1lbnRzLjwvcD4KLQotPHA+V1NJTCBwcm92aWRlcyB0aGUgYWJpbGl0eSB0byBkaXNzZW1pbmF0ZSBzZXJ2aWNlLXJlbGF0ZWQgaW5mb3JtYXRpb24gdGhyb3VnaAotZXhpc3RpbmcgcHJvdG9jb2xzIGRpcmVjdGx5IGZyb20gdGhlIHBvaW50IGF0IHdoaWNoIHRoZSBzZXJ2aWNlIGlzIGJlaW5nIG9mZmVyZWQuwqAKLVRoaXMgZW5hYmxlcyBmb2N1c2VkIGRpc2NvdmVyeSB0byBiZSBwZXJmb3JtZWQgb24gYSBzaW5nbGUgdGFyZ2V0OyBob3dldmVyLAotYmVjYXVzZSBvZiBpdHMgZGVjZW50cmFsaXplZCBhbmQgZGlzdHJpYnV0ZWQgbW9kZWwsIFdTSUwgaXMgbm90IGEgZ29vZCBtZWNoYW5pc20KLWZvciBleGVjdXRpbmcgZm9jdXNlZCBkaXNjb3ZlcnkgaWYgdGhlIGNvbW11bmljYXRpb24gcGFydG5lciBpcyB1bmtub3duLjwvcD4KLQotPHA+VGhlIFVEREkgYW5kIFdTSUwgc3BlY2lmaWNhdGlvbnMgc2hvdWxkIGJlIHZpZXdlZCBhcyBjb21wbGVtZW50YXJ5IHRlY2hub2xvZ2llcwotdG8gYmUgdXNlZCBlaXRoZXIgdG9nZXRoZXIgb3Igc2VwYXJhdGVseSBkZXBlbmRpbmcgb24gdGhlIHNpdHVhdGlvbi7CoAotRm9yIGV4YW1wbGUsIGEgVURESSByZXBvc2l0b3J5IGNvdWxkIGJlIHBvcHVsYXRlZCBiYXNlZCBvbiB0aGUgcmVzdWx0cyBmb3VuZAotd2hlbiBwZXJmb3JtaW5nIGEgc2VhcmNoIGZvciBXU0lMIGRvY3VtZW50cy7CoCBMaWtld2lzZSwgYSBVRERJIHJlcG9zaXRvcnkKLW1heSBpdHNlbGYgYmUgZGlzY292ZXJlZCB3aGVuIGEgcmVxdWVzdGVyIHJldHJpZXZlcyBhIFdTSUwgZG9jdW1lbnQgdGhhdCByZWZlcmVuY2VzCi1hbiBlbnRyeSBpbiB0aGUgcmVwb3NpdG9yeS7CoCBJbiBlbnZpcm9ubWVudHMgd2hlcmUgdGhlIGFkdmFuY2VkIGZ1bmN0aW9uYWxpdHkKLWFmZm9yZGVkIGJ5IFVEREkgaXMgbm90IHJlcXVpcmVkIGFuZCB3aGVyZSBjb25zdHJhaW50cyBkbyBub3QgYWxsb3cgZm9yIGl0cwotZGVwbG95bWVudCwgdGhlIFdTSUwgbWVjaGFuaXNtIG1heSBwcm92aWRlIGFsbCBvZiB0aGUgY2FwYWJpbGl0aWVzIHRoYXQgYXJlCi1uZWVkZWQuwqAgSW4gc2l0dWF0aW9ucyB3aGVyZSBkYXRhIG5lZWRzIHRvIGJlIGNlbnRyYWxseSBtYW5hZ2VkLCBhIFVEREkKLXNvbHV0aW9uIGFsb25lIG1heSBwcm92aWRlIHRoZSBiZXN0IGZpdC7CoCBUaGUgVURESSBhbmQgV1NJTCBzcGVjaWZpY2F0aW9ucwotc2hvdWxkIG5vdCBiZSB2aWV3ZWQgYXMgbXV0dWFsbHkgZXhjbHVzaXZlLjwvcD4KLQotPGRpdiBjbGFzcz0ibm90ZSI+PHNwYW4gY2xhc3M9Im5vdGV0aXRsZSI+Tm90ZTo8L3NwYW4+IEJvdGggVURESSBhbmQgV1NJTCBjb250YWluIG9ubHkgcmVmZXJlbmNlcyB0byBXU0RMIC0gdGhleSBkbyBub3QgY29udGFpbgotdGhlIFdTREwgZG9jdW1lbnRzIHRoZW1zZWx2ZXMuPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9ImN3cy5odG1sIiB0aXRsZT0iQSBXZWIgc2VydmljZSBpcyBhIHNldCBvZiByZWxhdGVkIGFwcGxpY2F0aW9uIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSBwcm9ncmFtbWF0aWNhbGx5IGludm9rZWQgb3ZlciB0aGUgSW50ZXJuZXQuIEJ1c2luZXNzZXMgY2FuIGR5bmFtaWNhbGx5IG1peCBhbmQgbWF0Y2ggV2ViIHNlcnZpY2VzIHRvIHBlcmZvcm0gY29tcGxleCB0cmFuc2FjdGlvbnMgd2l0aCBtaW5pbWFsIHByb2dyYW1taW5nLiBXZWIgc2VydmljZXMgYWxsb3cgYnV5ZXJzIGFuZCBzZWxsZXJzIGFsbCBvdmVyIHRoZSB3b3JsZCB0byBkaXNjb3ZlciBlYWNoIG90aGVyLCBjb25uZWN0IGR5bmFtaWNhbGx5LCBhbmQgZXhlY3V0ZSB0cmFuc2FjdGlvbnMgaW4gcmVhbCB0aW1lIHdpdGggbWluaW1hbCBodW1hbiBpbnRlcmFjdGlvbi4iPldlYiBzZXJ2aWNlcyBvdmVydmlldzwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iY3dzaW53c2EuaHRtbCIgdGl0bGU9IiI+VG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iY3dzaWwuaHRtbCIgdGl0bGU9IldlYiBTZXJ2aWNlcyBJbnNwZWN0aW9uIExhbmd1YWdlIChXU0lMKSBpcyBhIHNlcnZpY2UgZGlzY292ZXJ5IG1lY2hhbmlzbSB0aGF0IGlzIGFuIGFsdGVybmF0aXZlIHRvIFVEREkgYXMgd2VsbCBhcyBjb21wbGVtZW50YXJ5IHRvIFVEREkuIFdoZW4geW91IGRpc2NvdmVyIFdlYiBzZXJ2aWNlcyB3aXRoIFVEREksIHlvdSBnbyB0byBhIGNlbnRyYWxpemVkIHJlZ2lzdHJ5LsKgIFdTSUwgaXMgYW4gYWx0ZXJuYXRpdmUgYXBwcm9hY2ggdG8gV2ViIHNlcnZpY2UgZGlzY292ZXJ5LsKgIFdTSUwgYWxsb3dzIHlvdSB0byBnbyBkaXJlY3RseSB0byB0aGUgc2VydmljZSBwcm92aWRlciBhbmQgYXNrIGZvciB0aGUgc2VydmljZXMgaXQgcHJvdmlkZXMuIj5XZWIgU2VydmljZXMgSW5zcGVjdGlvbiBMYW5ndWFnZSAoV1NJTCk8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgVGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi90YXNrcy90b3ZlcndzLmh0bWwiPiBEZXZlbG9waW5nIFdlYgotc2VydmljZXM8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Y2QwYTE4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSBjb25jZXB0IFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIENvbmNlcHQvL0VOIgotICJjb25jZXB0LmR0ZCI+Ci08Y29uY2VwdCBpZD0iY3dzaW53c2EiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+VG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvdGl0bGU+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+dG9vbHMgb3ZlcnZpZXc8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPGNvbmJvZHk+Ci08cD5Ub29scyBhcmUgcHJvdmlkZWQgdG8gYXNzaXN0IHdpdGggdGhlIGZvbGxvd2luZyBhc3BlY3RzIG9mIFdlYiBzZXJ2aWNlcwotZGV2ZWxvcG1lbnQ6PC9wPgotPHVsPgotPGxpPiA8dWljb250cm9sPkRpc2NvdmVyPC91aWNvbnRyb2w+LiBCcm93c2UgdGhlIFVEREkgQnVzaW5lc3MgUmVnaXN0cmllcwotb3IgV1NJTCBkb2N1bWVudHMgdG8gbG9jYXRlIGV4aXN0aW5nIFdlYiBzZXJ2aWNlcyBmb3IgaW50ZWdyYXRpb24uPC9saT4KLTxsaT4gPHVpY29udHJvbD5DcmVhdGUgb3IgVHJhbnNmb3JtPC91aWNvbnRyb2w+LiBDcmVhdGUgYm90dG9tLXVwIFdlYiBzZXJ2aWNlcwotZnJvbSBleGlzdGluZyBhcnRpZmFjdHMsIHN1Y2ggYXMgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBiZWFucyBhbmQgZW50ZXJwcmlzZSBiZWFucy4gQ3JlYXRlCi10b3AtZG93biBXZWIgc2VydmljZXMgZnJvbSBXU0RMIGRpc2NvdmVyZWQgZnJvbSBvdGhlcnMgb3IgY3JlYXRlZCB1c2luZyB0aGUKLVdTREwgRWRpdG9yLjwvbGk+Ci08bGk+IDx1aWNvbnRyb2w+QnVpbGQ8L3VpY29udHJvbD4uIFdyYXAgZXhpc3RpbmcgYXJ0aWZhY3RzIGFzIFNPQVAgYWNjZXNzaWJsZQotc2VydmljZXMgYW5kIGRlc2NyaWJlIHRoZW0gaW4gV1NETC4gVGhlIFdlYiBzZXJ2aWNlcyB3aXphcmRzIGFzc2lzdCB5b3UgaW4KLWdlbmVyYXRpbmcgYSA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIgdG10eXBlPSJ0bSIKLXRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IGNsaWVudCBwcm94eSB0byBXZWIgc2VydmljZXMgZGVzY3JpYmVkIGluIFdTREwKLWFuZCBpbiBnZW5lcmF0aW5nIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIiB0bXR5cGU9InRtIgotdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gYmVhbiBza2VsZXRvbnMgZnJvbSBXU0RMLjwvbGk+Ci08bGk+IDx1aWNvbnRyb2w+RGVwbG95PC91aWNvbnRyb2w+LiBEZXBsb3kgV2ViIHNlcnZpY2VzIGludG8gYSB2YXJpZXR5IG9mCi10ZXN0IGVudmlyb25tZW50cy48L2xpPgotPGxpPiA8dWljb250cm9sPlRlc3Q8L3VpY29udHJvbD4uIFRlc3QgV2ViIHNlcnZpY2VzIHJ1bm5pbmcgbG9jYWxseSBvciByZW1vdGVseQotaW4gb3JkZXIgdG8gZ2V0IGluc3RhbnQgZmVlZGJhY2suPC9saT4KLTxsaT4gPHVpY29udHJvbD5EZXZlbG9wPC91aWNvbnRyb2w+LiBHZW5lcmF0ZSBzYW1wbGUgYXBwbGljYXRpb25zIHRvIGFzc2lzdAoteW91IGluIGNyZWF0aW5nIHlvdXIgb3duIFdlYiBzZXJ2aWNlIGNsaWVudCBhcHBsaWNhdGlvbi48L2xpPgotPGxpPiA8dWljb250cm9sPlB1Ymxpc2g8L3VpY29udHJvbD4uIFB1Ymxpc2ggV2ViIHNlcnZpY2VzIHRvIGEgVURESSB2MiBvcgotdjMgQnVzaW5lc3MgUmVnaXN0cnksIGFkdmVydGlzaW5nIHlvdXIgV2ViIHNlcnZpY2VzIHNvIHRoYXQgb3RoZXIgYnVzaW5lc3NlcwotYW5kIGNsaWVudHMgY2FuIGFjY2VzcyB0aGVtLjwvbGk+Ci08L3VsPgotPC9jb25ib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgQ29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iY3dzLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgVGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vdGFza3MvdG92ZXJ3cy5kaXRhIiBzY29wZT0ibG9jYWwiPjxsaW5rdGV4dD4gRGV2ZWxvcGluZyBXZWIKLXNlcnZpY2VzPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC9jb25jZXB0PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lud3NhLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjMDg4N2QuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW53c2EuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA3IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJjb25jZXB0IiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IlRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQiIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIHRvb2xzIG92ZXJ2aWV3IiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzLCB0b29scyBvdmVydmlldyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9ImN3cy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90YXNrcy90b3ZlcndzLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0iY3dzaW53c2EiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5Ub29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJjd3NpbndzYSI+PGEgbmFtZT0iY3dzaW53c2EiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPlRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2gxPgotCi0KLTxkaXY+Ci08cD5Ub29scyBhcmUgcHJvdmlkZWQgdG8gYXNzaXN0IHdpdGggdGhlIGZvbGxvd2luZyBhc3BlY3RzIG9mIFdlYiBzZXJ2aWNlcwotZGV2ZWxvcG1lbnQ6PC9wPgotCi08dWw+Ci08bGk+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkRpc2NvdmVyPC9zcGFuPi4gQnJvd3NlIHRoZSBVRERJIEJ1c2luZXNzIFJlZ2lzdHJpZXMKLW9yIFdTSUwgZG9jdW1lbnRzIHRvIGxvY2F0ZSBleGlzdGluZyBXZWIgc2VydmljZXMgZm9yIGludGVncmF0aW9uLjwvbGk+Ci0KLTxsaT4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+Q3JlYXRlIG9yIFRyYW5zZm9ybTwvc3Bhbj4uIENyZWF0ZSBib3R0b20tdXAgV2ViIHNlcnZpY2VzCi1mcm9tIGV4aXN0aW5nIGFydGlmYWN0cywgc3VjaCBhcyBKYXZh4oSiIGJlYW5zIGFuZCBlbnRlcnByaXNlIGJlYW5zLiBDcmVhdGUKLXRvcC1kb3duIFdlYiBzZXJ2aWNlcyBmcm9tIFdTREwgZGlzY292ZXJlZCBmcm9tIG90aGVycyBvciBjcmVhdGVkIHVzaW5nIHRoZQotV1NETCBFZGl0b3IuPC9saT4KLQotPGxpPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5CdWlsZDwvc3Bhbj4uIFdyYXAgZXhpc3RpbmcgYXJ0aWZhY3RzIGFzIFNPQVAgYWNjZXNzaWJsZQotc2VydmljZXMgYW5kIGRlc2NyaWJlIHRoZW0gaW4gV1NETC4gVGhlIFdlYiBzZXJ2aWNlcyB3aXphcmRzIGFzc2lzdCB5b3UgaW4KLWdlbmVyYXRpbmcgYSBKYXZhIGNsaWVudCBwcm94eSB0byBXZWIgc2VydmljZXMgZGVzY3JpYmVkIGluIFdTREwKLWFuZCBpbiBnZW5lcmF0aW5nIEphdmEgYmVhbiBza2VsZXRvbnMgZnJvbSBXU0RMLjwvbGk+Ci0KLTxsaT4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RGVwbG95PC9zcGFuPi4gRGVwbG95IFdlYiBzZXJ2aWNlcyBpbnRvIGEgdmFyaWV0eSBvZgotdGVzdCBlbnZpcm9ubWVudHMuPC9saT4KLQotPGxpPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5UZXN0PC9zcGFuPi4gVGVzdCBXZWIgc2VydmljZXMgcnVubmluZyBsb2NhbGx5IG9yIHJlbW90ZWx5Ci1pbiBvcmRlciB0byBnZXQgaW5zdGFudCBmZWVkYmFjay48L2xpPgotCi08bGk+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkRldmVsb3A8L3NwYW4+LiBHZW5lcmF0ZSBzYW1wbGUgYXBwbGljYXRpb25zIHRvIGFzc2lzdAoteW91IGluIGNyZWF0aW5nIHlvdXIgb3duIFdlYiBzZXJ2aWNlIGNsaWVudCBhcHBsaWNhdGlvbi48L2xpPgotCi08bGk+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlB1Ymxpc2g8L3NwYW4+LiBQdWJsaXNoIFdlYiBzZXJ2aWNlcyB0byBhIFVEREkgdjIgb3IKLXYzIEJ1c2luZXNzIFJlZ2lzdHJ5LCBhZHZlcnRpc2luZyB5b3VyIFdlYiBzZXJ2aWNlcyBzbyB0aGF0IG90aGVyIGJ1c2luZXNzZXMKLWFuZCBjbGllbnRzIGNhbiBhY2Nlc3MgdGhlbS48L2xpPgotCi08L3VsPgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgQ29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJjd3MuaHRtbCIgdGl0bGU9IkEgV2ViIHNlcnZpY2UgaXMgYSBzZXQgb2YgcmVsYXRlZCBhcHBsaWNhdGlvbiBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgcHJvZ3JhbW1hdGljYWxseSBpbnZva2VkIG92ZXIgdGhlIEludGVybmV0LiBCdXNpbmVzc2VzIGNhbiBkeW5hbWljYWxseSBtaXggYW5kIG1hdGNoIFdlYiBzZXJ2aWNlcyB0byBwZXJmb3JtIGNvbXBsZXggdHJhbnNhY3Rpb25zIHdpdGggbWluaW1hbCBwcm9ncmFtbWluZy4gV2ViIHNlcnZpY2VzIGFsbG93IGJ1eWVycyBhbmQgc2VsbGVycyBhbGwgb3ZlciB0aGUgd29ybGQgdG8gZGlzY292ZXIgZWFjaCBvdGhlciwgY29ubmVjdCBkeW5hbWljYWxseSwgYW5kIGV4ZWN1dGUgdHJhbnNhY3Rpb25zIGluIHJlYWwgdGltZSB3aXRoIG1pbmltYWwgaHVtYW4gaW50ZXJhY3Rpb24uIj5XZWIgc2VydmljZXMgb3ZlcnZpZXc8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgVGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi90YXNrcy90b3ZlcndzLmh0bWwiIHRpdGxlPSJVc2UgV2ViIHNlcnZpY2VzIHRvb2xzIHRvIGRpc2NvdmVyLCBjcmVhdGUsIGFuZCBwdWJsaXNoIFdlYiBzZXJ2aWNlcyB0aGF0IGFyZSBjcmVhdGVkIGZyb20gSmF2YSBiZWFucywgZW50ZXJwcmlzZSBiZWFucywgYW5kIFdTREwgZmlsZXMuIFlvdSBjYW4gY3JlYXRlIG9mIFdlYiBzZXJ2aWNlcyB1c2luZyBhIHRvcC1kb3duIGFwcHJvYWNoICh3aGljaCBzdGFydHMgd2l0aCBhIFdTREwgZmlsZSkgb3IgYSBib3R0b20tdXAgYXBwcm9hY2ggKHdoaWNoIHN0YXJ0cyB3aXRoIGEgSmF2YSBiZWFuIG9yIEVKQikuIj4gRGV2ZWxvcGluZyBXZWIKLXNlcnZpY2VzPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3Npb3Zlci5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW92ZXIuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTA3NTUyNC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3Npb3Zlci5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+Ci08IURPQ1RZUEUgY29uY2VwdCBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBDb25jZXB0Ly9FTiIKLSAiY29uY2VwdC5kdGQiPgotPGNvbmNlcHQgaWQ9ImN3c2lvdmVyIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPldlYiBzZXJ2aWNlcyBpbnRlcm9wZXJhYmlsaXR5IChXUy1JKTwvdGl0bGU+Ci08c2hvcnRkZXNjPldTLUkgaXMgYW4gb3JnYW5pemF0aW9uIGRlc2lnbmVkIHRvIHByb21vdGUgV2ViIHNlcnZpY2UgaW50ZXJvcGVyYWJpbGl0eQotYWNyb3NzIHBsYXRmb3Jtcywgb3BlcmF0aW5nIHN5c3RlbXMsIGFuZCBwcm9ncmFtbWluZyBsYW5ndWFnZXMuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPldlYiBzZXJ2aWNlcyBpbnRlcm9wZXJhYmlsaXR5PGluZGV4dGVybT50cmFmZmljIGNvbXBsaWFuY2U8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+aW50ZXJvcGVyYWJpbGl0eTxpbmRleHRlcm0+V2ViIHNlcnZpY2UgdHJhZmZpYyBjb21wbGlhbmNlPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTxjb25ib2R5PgotPHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gb24gV1MtSSwgcmVmZXIgdG8gdGhlaXIgV2ViIHNpdGU6ICA8eHJlZiBmb3JtYXQ9Imh0bWwiCi1ocmVmPSJodHRwOi8vd3d3LndzLWkub3JnLyIgc2NvcGU9ImV4dGVybmFsIj5odHRwOi8vd3d3LndzLWkub3JnLzwveHJlZj4uCi1UaGlzIHNpdGUgY29udGFpbnMgcmVzb3VyY2VzIHN1Y2ggYXMgYW4gb3ZlcnZpZXcgb2YgV2ViIHNlcnZpY2VzIGludGVyb3BlcmFiaWxpdHksCi11c2FnZSBzY2VuYXJpb3MsIGFuZCBzcGVjaWZpY2F0aW9ucy48L3A+Ci08cD5XUy1JIEJhc2ljIFByb2ZpbGUgaXMgYSBvdXRsaW5lIG9mIHJlcXVpcmVtZW50cyB0byB3aGljaCBXU0RMIGFuZCBXZWIgc2VydmljZQotcHJvdG9jb2wgKFNPQVAvSFRUUCkgdHJhZmZpYyBtdXN0IGNvbXBseSBpbiBvcmRlciB0byBjbGFpbSBXUy1JIGNvbmZvcm1hbmNlLgotVGhlIFdlYiBzZXJ2aWNlcyBXUy1JIHZhbGlkYXRpb24gdG9vbHMgY3VycmVudGx5IHN1cHBvcnQgV1MtSSBTaW1wbGUgU09BUAotQmluZGluZyBQcm9maWxlIDEuMCAoV1MtSSBTU0JQKSB3aGljaCBidWlsZHMgb24gdGhlIFdTLUkgQmFzaWMgUHJvZmlsZSwgYW5kCi10aGUgV1MtSSBBdHRhY2htZW50cyBQcm9maWxlIDEuMCAoV1MtSSBBUCkuIFRvIHZpZXcgdGhlIHNwZWNpZmljYXRpb25zLCByZWZlcgotdG8gdGhlIFdTLUkgV2ViIHNpdGUsIGFuZCB1bmRlciAgPHVpY29udHJvbD5EZWxpdmVyYWJsZXM8L3VpY29udHJvbD4gc2VsZWN0Ci0gPHVpY29udHJvbD5CYXNpYyBQcm9maWxlPC91aWNvbnRyb2w+LjwvcD4KLTxwPkRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBXZWIgc2VydmljZSBiZWluZyBjcmVhdGVkLCB5b3UgbWF5IG9yIG1heSBub3QKLXdhbnQgeW91ciBXZWIgc2VydmljZSB0byBjb21wbHkgd2l0aCB0aGUgV1MtSSBwcm9maWxlcy4gVGhlIGRlZmF1bHQgbGV2ZWwKLW9mIGNvbXBsaWFuY2UgaXMgdG8gZ2VuZXJhdGUgYSB3YXJuaW5nIGlmIGEgbm9uIFdTLUkgU1NCUCBjb21wbGFpbnQgV2ViIHNlcnZpY2UKLW9wdGlvbiBpcyBzZWxlY3RlZCBhbmQgdG8gaWdub3JlIGFueSBub24gV1MtSSBBUCBjb21wbGlhbnQgc2VsZWN0aW9ucy4gWW91Ci1jYW4gc2V0IHRoZSBsZXZlbCBvZiBXUy1JIGNvbXBsaWFuY2UgYXQgdGhlIHdvcmtzcGFjZSBvciBwcm9qZWN0IGxldmVsLiBUaGUKLVdlYiBzZXJ2aWNlcyB3aXphcmRzLCB0aGUgPHRtIHRtY2xhc3M9ImlibSIgdG1vd25lcj0iSUJNIENvcnBvcmF0aW9uIiB0bXR5cGU9InJlZyIKLXRyYWRlbWFyaz0iV2ViU3BoZXJlIj5XZWJTcGhlcmU8L3RtPiBydW4tdGltZSBlbnZpcm9ubWVudHMsIHRoZSBXU0RMIGVkaXRvciwKLWFuZCBvdGhlciBXZWIgc2VydmljZXMgdG9vbHMgcHJvdmlkZWQgc3VwcG9ydCBhbmQgZW5jb3VyYWdlIHRoZSBkZXZlbG9wbWVudAotb2YgV1MtSSBjb21wbGlhbmNlIHNlcnZpY2VzLjwvcD4KLTwvY29uYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL3Rhc2tzL3R3c2ljb21wbHkuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvY29uY2VwdD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lvdmVyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3Npb3Zlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OGVhMTRiLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lvdmVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwNyIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0iY29uY2VwdCIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJXZWIgc2VydmljZXMgaW50ZXJvcGVyYWJpbGl0eSAoV1MtSSkiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iV1MtSSBpcyBhbiBvcmdhbml6YXRpb24gZGVzaWduZWQgdG8gcHJvbW90ZSBXZWIgc2VydmljZSBpbnRlcm9wZXJhYmlsaXR5IGFjcm9zcyBwbGF0Zm9ybXMsIG9wZXJhdGluZyBzeXN0ZW1zLCBhbmQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJXUy1JIGlzIGFuIG9yZ2FuaXphdGlvbiBkZXNpZ25lZCB0byBwcm9tb3RlIFdlYiBzZXJ2aWNlIGludGVyb3BlcmFiaWxpdHkgYWNyb3NzIHBsYXRmb3Jtcywgb3BlcmF0aW5nIHN5c3RlbXMsIGFuZCBwcm9ncmFtbWluZyBsYW5ndWFnZXMuIiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzIGludGVyb3BlcmFiaWxpdHksIHRyYWZmaWMgY29tcGxpYW5jZSwgaW50ZXJvcGVyYWJpbGl0eSwgV2ViIHNlcnZpY2UgdHJhZmZpYyBjb21wbGlhbmNlIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzIGludGVyb3BlcmFiaWxpdHksIHRyYWZmaWMgY29tcGxpYW5jZSwgaW50ZXJvcGVyYWJpbGl0eSwgV2ViIHNlcnZpY2UgdHJhZmZpYyBjb21wbGlhbmNlIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdGFza3MvdHdzaWNvbXBseS5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9ImN3c2lvdmVyIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+V2ViIHNlcnZpY2VzIGludGVyb3BlcmFiaWxpdHkgKFdTLUkpPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJjd3Npb3ZlciI+PGEgbmFtZT0iY3dzaW92ZXIiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPldlYiBzZXJ2aWNlcyBpbnRlcm9wZXJhYmlsaXR5IChXUy1JKTwvaDE+Ci0KLQotCi08ZGl2PjxwPldTLUkgaXMgYW4gb3JnYW5pemF0aW9uIGRlc2lnbmVkIHRvIHByb21vdGUgV2ViIHNlcnZpY2UgaW50ZXJvcGVyYWJpbGl0eQotYWNyb3NzIHBsYXRmb3Jtcywgb3BlcmF0aW5nIHN5c3RlbXMsIGFuZCBwcm9ncmFtbWluZyBsYW5ndWFnZXMuPC9wPgotCi08cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBXUy1JLCByZWZlciB0byB0aGVpciBXZWIgc2l0ZTogIDxhIGhyZWY9Imh0dHA6Ly93d3cud3MtaS5vcmcvIiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL3d3dy53cy1pLm9yZy88L2E+LgotVGhpcyBzaXRlIGNvbnRhaW5zIHJlc291cmNlcyBzdWNoIGFzIGFuIG92ZXJ2aWV3IG9mIFdlYiBzZXJ2aWNlcyBpbnRlcm9wZXJhYmlsaXR5LAotdXNhZ2Ugc2NlbmFyaW9zLCBhbmQgc3BlY2lmaWNhdGlvbnMuPC9wPgotCi08cD5XUy1JIEJhc2ljIFByb2ZpbGUgaXMgYSBvdXRsaW5lIG9mIHJlcXVpcmVtZW50cyB0byB3aGljaCBXU0RMIGFuZCBXZWIgc2VydmljZQotcHJvdG9jb2wgKFNPQVAvSFRUUCkgdHJhZmZpYyBtdXN0IGNvbXBseSBpbiBvcmRlciB0byBjbGFpbSBXUy1JIGNvbmZvcm1hbmNlLgotVGhlIFdlYiBzZXJ2aWNlcyBXUy1JIHZhbGlkYXRpb24gdG9vbHMgY3VycmVudGx5IHN1cHBvcnQgV1MtSSBTaW1wbGUgU09BUAotQmluZGluZyBQcm9maWxlIDEuMCAoV1MtSSBTU0JQKSB3aGljaCBidWlsZHMgb24gdGhlIFdTLUkgQmFzaWMgUHJvZmlsZSwgYW5kCi10aGUgV1MtSSBBdHRhY2htZW50cyBQcm9maWxlIDEuMCAoV1MtSSBBUCkuIFRvIHZpZXcgdGhlIHNwZWNpZmljYXRpb25zLCByZWZlcgotdG8gdGhlIFdTLUkgV2ViIHNpdGUsIGFuZCB1bmRlciAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RGVsaXZlcmFibGVzPC9zcGFuPiBzZWxlY3QKLSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5CYXNpYyBQcm9maWxlPC9zcGFuPi48L3A+Ci0KLTxwPkRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBXZWIgc2VydmljZSBiZWluZyBjcmVhdGVkLCB5b3UgbWF5IG9yIG1heSBub3QKLXdhbnQgeW91ciBXZWIgc2VydmljZSB0byBjb21wbHkgd2l0aCB0aGUgV1MtSSBwcm9maWxlcy4gVGhlIGRlZmF1bHQgbGV2ZWwKLW9mIGNvbXBsaWFuY2UgaXMgdG8gZ2VuZXJhdGUgYSB3YXJuaW5nIGlmIGEgbm9uIFdTLUkgU1NCUCBjb21wbGFpbnQgV2ViIHNlcnZpY2UKLW9wdGlvbiBpcyBzZWxlY3RlZCBhbmQgdG8gaWdub3JlIGFueSBub24gV1MtSSBBUCBjb21wbGlhbnQgc2VsZWN0aW9ucy4gWW91Ci1jYW4gc2V0IHRoZSBsZXZlbCBvZiBXUy1JIGNvbXBsaWFuY2UgYXQgdGhlIHdvcmtzcGFjZSBvciBwcm9qZWN0IGxldmVsLiBUaGUKLVdlYiBzZXJ2aWNlcyB3aXphcmRzLCB0aGUgV2ViU3BoZXJlPHN1cD7Crjwvc3VwPiBydW4tdGltZSBlbnZpcm9ubWVudHMsIHRoZSBXU0RMIGVkaXRvciwKLWFuZCBvdGhlciBXZWIgc2VydmljZXMgdG9vbHMgcHJvdmlkZWQgc3VwcG9ydCBhbmQgZW5jb3VyYWdlIHRoZSBkZXZlbG9wbWVudAotb2YgV1MtSSBjb21wbGlhbmNlIHNlcnZpY2VzLjwvcD4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vdGFza3MvdHdzaWNvbXBseS5odG1sIiB0aXRsZT0iVGhlIFdlYiBzZXJ2aWNlcyBXUy1JIHZhbGlkYXRpb24gdG9vbHMgc3VwcG9ydCB0aGUgbGV2ZWwgb2YgV1MtSSBjb21wbGlhbmNlIG91dGxpbmVkIGluIHRoZSBXUy1JIEJhc2ljIFByb2ZpbGUgMS4xLCB0aGUgV1MtSSBTaW1wbGUgU09BUCBCaW5kaW5nIFByb2ZpbGUgMS4wIChXUy1JIFNTQlApLCBhbmQgdGhlIFdTLUkgQXR0YWNobWVudHMgUHJvZmlsZSAxLjAgKFdTLUkgQVApLiBZb3UgY2FuIGNob29zZSB0byBtYWtlIHlvdXIgV2ViIHNlcnZpY2UgY29tcGxpYW50IG9yIG5vbi1jb21wbGlhbnQsIGRlcGVuZGluZyBvbiB5b3VyIG5lZWRzLiBGb3IgZXhhbXBsZSwgZW5jb2RlZCBzdHlsZSAoUlBDL2VuY29kZWQpLCBTT0FQIG92ZXIgSk1TIHByb3RvY29scyBhcmUgbm90IFdTLUkgY29tcGxpYW50LiI+U2V0dGluZyB0aGUgbGV2ZWwgb2YgV1MtSSBjb21wbGlhbmNlPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NzdGFuZGFyZHMuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c3N0YW5kYXJkcy5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDlhOTVmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c3N0YW5kYXJkcy5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsMjIyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIGNvbmNlcHQgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgQ29uY2VwdC8vRU4iCi0gImNvbmNlcHQuZHRkIj4KLTxjb25jZXB0IGlkPSJ3ZWJzZXJ2aWNlc3N0YW5kYXJkcyIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5XZWIgc2VydmljZXMgc3RhbmRhcmRzPC90aXRsZT4KLTxzaG9ydGRlc2M+T25lIG9mIHRoZSBrZXkgYXR0cmlidXRlcyBvZiBJbnRlcm5ldCBzdGFuZGFyZHMgaXMgdGhhdCB0aGV5IGZvY3VzCi1vbiBwcm90b2NvbHMgYW5kIG5vdCBvbiBpbXBsZW1lbnRhdGlvbnMuIFRoZSBJbnRlcm5ldCBpcyBjb21wb3NlZCBvZiBoZXRlcm9nZW5lb3VzCi10ZWNobm9sb2dpZXMgdGhhdCBzdWNjZXNzZnVsbHkgaW50ZXJvcGVyYXRlIHRocm91Z2ggc2hhcmVkIHByb3RvY29scy4gVGhpcwotcHJldmVudHMgaW5kaXZpZHVhbCB2ZW5kb3JzIGZyb20gaW1wb3NpbmcgYSBzdGFuZGFyZCBvbiB0aGUgSW50ZXJuZXQuIE9wZW4KLVNvdXJjZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBwbGF5cyBhIGNydWNpYWwgcm9sZSBpbiBwcmVzZXJ2aW5nIHRoZSBpbnRlcm9wZXJhYmlsaXR5Ci1vZiB2ZW5kb3IgaW1wbGVtZW50YXRpb25zIG9mIHN0YW5kYXJkcy48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5zdGFuZGFyZHM8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPGNvbmJvZHk+Ci08cD5UaGUgZm9sbG93aW5nIHN0YW5kYXJkcyBwbGF5IGtleSByb2xlcyBpbiBXZWIgc2VydmljZXM6IFVuaXZlcnNhbCBEZXNjcmlwdGlvbiwKLURpc2NvdmVyeSBhbmQgSW50ZWdyYXRpb24gKFVEREkpLCBXZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpLAotV2ViIFNlcnZpY2VzIEluc3BlY3Rpb24gTGFuZ3VhZ2UgKFdTSUwpLCBTT0FQLCBhbmQgV2ViIFNlcnZpY2VzIEludGVyb3BlcmFiaWxpdHkKLShXUy1JKS4gVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIHN0YW5kYXJkcyBpcyBkZXNjcmliZWQgaW4gRmlndXJlIDIuPC9wPgotPHA+VGhlIFVEREkgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIG9wZW4sIHBsYXRmb3JtLWluZGVwZW5kZW50IHN0YW5kYXJkcyB0aGF0Ci1lbmFibGUgYnVzaW5lc3NlcyB0byBzaGFyZSBpbmZvcm1hdGlvbiBpbiBhIGdsb2JhbCBidXNpbmVzcyByZWdpc3RyeSwgZGlzY292ZXIKLXNlcnZpY2VzIG9uIHRoZSByZWdpc3RyeSwgYW5kIGRlZmluZSBob3cgdGhleSBpbnRlcmFjdCBvdmVyIHRoZSBJbnRlcm5ldC4KLUZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFVEREksIHJlZmVyIHRvICA8eHJlZiBmb3JtYXQ9Imh0bWwiIGhyZWY9Imh0dHA6Ly93d3cudWRkaS5vcmciCi1zY29wZT0iZXh0ZXJuYWwiPnd3dy51ZGRpLm9yZzwveHJlZj48L3A+Ci08cD5XU0lMIGlzIGFuIFhNTC1iYXNlZCBvcGVuIHNwZWNpZmljYXRpb24gdGhhdCBkZWZpbmVzIGEgZGlzdHJpYnV0ZWQgc2VydmljZQotZGlzY292ZXJ5IG1ldGhvZCB0aGF0IHN1cHBsaWVzIHJlZmVyZW5jZXMgdG8gc2VydmljZSBkZXNjcmlwdGlvbnMgYXQgdGhlIHNlcnZpY2UKLXByb3ZpZGVyJ3MgcG9pbnQtb2Ytb2ZmZXJpbmcsIGJ5IHNwZWNpZnlpbmcgaG93IHRvIGluc3BlY3QgYSBXZWIgc2l0ZSBmb3IKLWF2YWlsYWJsZSBXZWIgc2VydmljZXMuJm5ic3A7IEEgV1NJTCBkb2N1bWVudCBkZWZpbmVzIHRoZSBsb2NhdGlvbnMgb24gYSBXZWIKLXNpdGUgd2hlcmUgeW91IGNhbiBsb29rIGZvciBXZWIgc2VydmljZSBkZXNjcmlwdGlvbnMuJm5ic3A7U2luY2UgV1NJTCBmb2N1c2VzCi1vbiBkaXN0cmlidXRlZCBzZXJ2aWNlIGRpc2NvdmVyeSwgdGhlIFdTSUwgc3BlY2lmaWNhdGlvbiBjb21wbGVtZW50cyBVRERJCi1ieSBmYWNpbGl0YXRpbmcgdGhlIGRpc2NvdmVyeSBvZiBzZXJ2aWNlcyB0aGF0IGFyZSBhdmFpbGFibGUgb24gV2ViIHNpdGVzCi10aGF0IG1heSBub3QgYmUgbGlzdGVkIHlldCBpbiBhIFVEREkgcmVnaXN0cnkuJm5ic3A7QSBzZXBhcmF0ZSB0b3BpYyBpbiB0aGlzCi1kb2N1bWVudGF0aW9uIGRpc2N1c3NlcyB0aGUgIDx4cmVmIGhyZWY9ImN3c2lsdWQuZGl0YSI+UmVsYXRpb25zaGlwIGJldHdlZW4KLVVEREkgYW5kIFdTSUw8L3hyZWY+LiZuYnNwOyBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBXU0lMLCByZWZlciB0byAgPHhyZWYKLWhyZWY9Imh0dHA6Ly93d3ctMTA2LmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvd2Vic2VydmljZXMvbGlicmFyeS93cy13c2lsc3BlYy5odG1sIgotc2NvcGU9ImV4dGVybmFsIj4gd3d3LmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvd2Vic2VydmljZXMvbGlicmFyeS93cy13c2lsc3BlYy5odG1sPC94cmVmPjwvcD4KLTxwPldTREwgaXMgYW4gWE1MLWJhc2VkIG9wZW4gc3BlY2lmaWNhdGlvbiB0aGF0IGRlc2NyaWJlcyB0aGUgaW50ZXJmYWNlcyB0bwotYW5kIGluc3RhbmNlcyBvZiBXZWIgc2VydmljZXMgb24gdGhlIG5ldHdvcmsuIEl0IGlzIGV4dGVuc2libGUsIHNvIGVuZHBvaW50cwotY2FuIGJlIGRlc2NyaWJlZCByZWdhcmRsZXNzIG9mIHRoZSBtZXNzYWdlIGZvcm1hdHMgb3IgbmV0d29yayBwcm90b2NvbHMgdGhhdAotYXJlIHVzZWQgdG8gY29tbXVuaWNhdGUuIEJ1c2luZXNzZXMgY2FuIG1ha2UgdGhlIFdTREwgZG9jdW1lbnRzIGZvciB0aGVpcgotV2ViIHNlcnZpY2VzIGF2YWlsYWJsZSB0aG91Z2ggVURESSwgV1NJTCwgb3IgYnkgYnJvYWRjYXN0aW5nIHRoZSBVUkxzIHRvIHRoZWlyCi1XU0RMIHZpYSBlbWFpbCBvciBXZWIgc2l0ZXMuIFdTREwgaXMgZGVzY3JpYmVkIGFzIGEgc2VwYXJhdGUgdG9waWMgaW4gdGhpcwotZG9jdW1lbnRhdGlvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gV1NETCwgcmVmZXIgdG8gIDx4cmVmIGZvcm1hdD0iaHRtbCIKLWhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3dzZGwiIHNjb3BlPSJleHRlcm5hbCI+d3d3LnczLm9yZy9UUi93c2RsPC94cmVmPjwvcD4KLTxwPlNPQVAgaXMgYW4gWE1MLWJhc2VkIHN0YW5kYXJkIGZvciBtZXNzYWdpbmcgb3ZlciBIVFRQIGFuZCBvdGhlciBJbnRlcm5ldAotcHJvdG9jb2xzLiBJdCBpcyBhIGxpZ2h0d2VpZ2h0IHByb3RvY29sIGZvciB0aGUgZXhjaGFuZ2Ugb2YgaW5mb3JtYXRpb24gaW4KLWEgZGVjZW50cmFsaXplZCwgZGlzdHJpYnV0ZWQgZW52aXJvbm1lbnQuIEl0IGlzIGJhc2VkIG9uIFhNTCBhbmQgY29uc2lzdHMKLW9mIHRocmVlIHBhcnRzOjx1bD4KLTxsaT5BbiBlbnZlbG9wZSB0aGF0IGRlZmluZXMgYSBmcmFtZXdvcmsgZm9yIGRlc2NyaWJpbmcgd2hhdCBpcyBpbiBhIG1lc3NhZ2UKLWFuZCBob3cgdG8gcHJvY2VzcyBpdC48L2xpPgotPGxpPkEgc2V0IG9mIGVuY29kaW5nIHJ1bGVzIGZvciBleHByZXNzaW5nIGluc3RhbmNlcyBvZiBhcHBsaWNhdGlvbi1kZWZpbmVkCi1kYXRhIHR5cGVzLjwvbGk+Ci08bGk+QSBjb252ZW50aW9uIGZvciByZXByZXNlbnRpbmcgcmVtb3RlIHByb2NlZHVyZSBjYWxscyBhbmQgcmVzcG9uc2VzLjwvbGk+Ci08L3VsPlNPQVAgZW5hYmxlcyB0aGUgYmluZGluZyBhbmQgdXNhZ2Ugb2YgZGlzY292ZXJlZCBXZWIgc2VydmljZXMgYnkgZGVmaW5pbmcKLWEgbWVzc2FnZSBwYXRoIGZvciByb3V0aW5nIG1lc3NhZ2VzLiBTT0FQIG1heSBiZSB1c2VkIHRvIHF1ZXJ5IFVEREkgZm9yIFdlYgotc2VydmljZXMuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFNPQVAgMS4xIChTT0FQIDEuMiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZQotV2ViIHNlcnZpY2VzIHRvb2xzKSwgcmVmZXIgdG8gIDx4cmVmIGZvcm1hdD0iaHRtbCIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvU09BUCIKLXNjb3BlPSJleHRlcm5hbCI+d3d3LnczLm9yZy9UUi9TT0FQPC94cmVmPjwvcD4KLTxwPkZpZ3VyZSAyLiBSZWxhdGlvbnNoaXBzIGJldHdlZW4gU09BUCwgVURESSwgV1NJTCBhbmQgV1NETC48L3A+Ci08cD4gPGltYWdlIGFsdD0iRmlndXJlIDIgaWxsdXN0cmF0ZXMgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBTT0FQLCBVRERJLCBXU0lMLCBhbmQgV1NETC4iCi1ocmVmPSIuLi9pbWFnZXMvc29hcHVkd3MuZ2lmIj48L2ltYWdlPiA8L3A+Ci08cD5BIHNlcnZpY2UgcHJvdmlkZXIgaG9zdHMgYSBXZWIgc2VydmljZSBhbmQgbWFrZXMgaXQgYWNjZXNzaWJsZSB1c2luZyBwcm90b2NvbHMKLXN1Y2ggYXMgU09BUC9IVFRQIG9yIFNPQVAvSk1TLiBUaGUgV2ViIHNlcnZpY2UgaXMgZGVzY3JpYmVkIGJ5IGEgV1NETCBkb2N1bWVudAotdGhhdCBpcyBzdG9yZWQgb24gdGhlIHByb3ZpZGVyJ3Mgc2VydmVyIG9yIGluIGEgc3BlY2lhbCByZXBvc2l0b3J5LiBUaGUgV1NETAotZG9jdW1lbnQgbWF5IGJlIHJlZmVyZW5jZWQgYnkgdGhlIFVEREkgYnVzaW5lc3MgcmVnaXN0cnkgYW5kIFdTSUwgZG9jdW1lbnRzLgotVGhlc2UgY29udGFpbiBwb2ludGVycyB0byB0aGUgV2ViIHNlcnZpY2UncyBXU0RMIGZpbGVzLjwvcD4KLTxwPlRoZSBXUy1JIFNpbXBsZSBTT0FQIEJpbmRpbmcgUHJvZmlsZSBhbmQgV1MtSSBBdHRhY2htZW50cyBQcm9maWxlIGFyZSBvdXRsaW5lcwotb2YgcmVxdWlyZW1lbnRzIHRvIHdoaWNoIFdTREwgYW5kIFdlYiBzZXJ2aWNlIHByb3RvY29sIChTT0FQL0hUVFApIHRyYWZmaWMKLW11c3QgY29tcGx5IGluIG9yZGVyIHRvIGNsYWltIFdTLUkgY29uZm9ybWFuY2UuIFRoZSBXZWIgc2VydmljZXMgV1MtSSB2YWxpZGF0aW9uCi10b29scyBjdXJyZW50bHkgc3VwcG9ydCBXUy1JIFNpbXBsZSBTT0FQIEJpbmRpbmcgUHJvZmlsZSAxLjAgYW5kIHRoZSBBdHRhY2htZW50Ci1Qcm9maWxlIDEuMC4gVG8gdmlldyB0aGUgc3BlY2lmaWNhdGlvbnMsIHJlZmVyIHRvIHRoZSBXUy1JIFdlYiBzaXRlLCBhbmQgdW5kZXIKLSA8dWljb250cm9sPlJlc291cmNlczwvdWljb250cm9sPiBzZWxlY3QgIDx1aWNvbnRyb2w+RG9jdW1lbnRhdGlvbjwvdWljb250cm9sPjogPHhyZWYKLWhyZWY9Imh0dHA6Ly93d3cud3MtaS5vcmciIHNjb3BlPSJleHRlcm5hbCI+aHR0cDovL3d3dy53cy1pLm9yZzwveHJlZj48L3A+Ci08cD5TZXZlcmFsIG5ldyBXZWIgc2VydmljZXMgc3RhbmRhcmRzIGFyZSBhbHNvIHN1cHBvcnRlZCBieSB0aGlzIGRldmVsb3BtZW50Ci1lbnZpcm9ubWVudC4gVGhlc2UgaW5jbHVkZTo8ZGw+PGRsZW50cnk+Ci08ZHQ+SkFYLVJQQzwvZHQ+Ci08ZGQ+SkFYLVJQQyBzdGFuZHMgZm9yIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIgotdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gQVBJIGZvciBYTUwtYmFzZWQgUlBDLCBhbHNvIGtub3duIGFzCi1KU1IgMTAxLiBJdCBpcyBhIHNwZWNpZmljYXRpb24gdGhhdCBkZXNjcmliZXMgPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBBcHBsaWNhdGlvbiBQcm9ncmFtbWluZyBJbnRlcmZhY2VzCi0oQVBJcykgYW5kIGNvbnZlbnRpb25zIGZvciBidWlsZGluZyBXZWIgc2VydmljZXMgYW5kIFdlYiBzZXJ2aWNlIGNsaWVudHMgdGhhdAotdXNlIHJlbW90ZSBwcm9jZWR1cmUgY2FsbHMgKFJQQykgYW5kIFhNTC4gSXQgc3RhbmRhcmRpemVzIHRoZSA8dG0gdG1jbGFzcz0ic3BlY2lhbCIKLXRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iIHRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IHRvCi1XU0RMIGFuZCBXU0RMIHRvIDx0bSB0bWNsYXNzPSJzcGVjaWFsIiB0bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIiB0bXR5cGU9InRtIgotdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gbWFwcGluZ3MsIGFuZCBwcm92aWRlcyB0aGUgY29yZSBBUElzIGZvciBkZXZlbG9waW5nCi1hbmQgZGVwbG95aW5nIFdlYiBzZXJ2aWNlcyBhbmQgV2ViIHNlcnZpY2UgY2xpZW50cyBvbiB0aGUgPHRtIHRtY2xhc3M9InNwZWNpYWwiCi10bW93bmVyPSJTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIiB0bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBwbGF0Zm9ybS4KLUZvciBtb3JlIGluZm9ybWF0aW9uIHJlZmVyIHRvIHRoZSA8eHJlZiBocmVmPSJodHRwOi8vd3d3LmpjcC5vcmcvZW4vanNyL2RldGFpbD9pZD0xMDEiCi1zY29wZT0iZXh0ZXJuYWwiPm9mZmljaWFsIHNwZWNpZmljYXRpb25zPC94cmVmPi48L2RkPgotPC9kbGVudHJ5PjxkbGVudHJ5PgotPGR0PkpTUi0xMDkgYW5kIEpTUi05MjE8L2R0PgotPGRkPkpTUi0xMDkgYW5kIEpTUi05MjEgKEltcGxlbWVudGluZyBFbnRlcnByaXNlIFdlYiBTZXJ2aWNlcykgZGVmaW5lIHRoZQotcHJvZ3JhbW1pbmcgbW9kZWwgYW5kIHJ1bi10aW1lIGFyY2hpdGVjdHVyZSB0byBkZXBsb3kgYW5kIGxvb2sgdXAgV2ViIHNlcnZpY2VzCi1pbiB0aGUgSjJFRSBlbnZpcm9ubWVudDsgbW9yZSBzcGVjaWZpY2FsbHksIGluIHRoZSBXZWIsIEVKQiwgYW5kIENsaWVudCBBcHBsaWNhdGlvbgotY29udGFpbmVycy4gT25lIG9mIGl0cyBtYWluIGdvYWxzIGlzIHRvIGVuc3VyZSB2ZW5kb3JzJyBpbXBsZW1lbnRhdGlvbnMgaW50ZXJvcGVyYXRlLgotRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJlZmVyIHRvIHRoZSBvZmZpY2lhbCBzcGVjaWZpY2F0aW9uczogPHVsPgotPGxpPjx4cmVmIGhyZWY9Imh0dHA6Ly93d3cuamNwLm9yZy9lbi9qc3IvZGV0YWlsP2lkPTEwOSIgc2NvcGU9ImV4dGVybmFsIgotdHlwZT0iaHRtbCI+SlNSLTEwOTwveHJlZj48L2xpPgotPGxpPjx4cmVmIGhyZWY9Imh0dHA6Ly93d3cuamNwLm9yZy9lbi9qc3IvZGV0YWlsP2lkPTkyMSIgc2NvcGU9ImV4dGVybmFsIgotdHlwZT0iaHRtbCI+SlNSLTkyMTwveHJlZj48L2xpPgotPC91bD48L2RkPgotPC9kbGVudHJ5PjxkbGVudHJ5PgotPGR0PldTLVM8L2R0PgotPGRkPlRoZXNlIHRvb2xzIHN1cHBvcnQgdGhlIE9BU0lTIFdlYiBTZXJ2aWNlcyBTZWN1cml0eSAxLjAgc3RhbmRhcmQuIEZvcgotbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgdmFyaW91cyBjb21wb25lbnRzIG9mIHRoaXMgc3RhbmRhcmQsIHJlZmVyIHRvOjx1bD4KLTxsaT48eHJlZiBocmVmPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXNvYXAtbWVzc2FnZS1zZWN1cml0eS0xLjAucGRmIgotc2NvcGU9ImV4dGVybmFsIiB0eXBlPSJodG1sIj5XZWIgU2VydmljZXMgU2VjdXJpdHk6IFNPQVAgTWVzc2FnZSBTZWN1cml0eQotVjEuMDwveHJlZj4gPC9saT4KLTxsaT4gPHhyZWYgaHJlZj0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy11c2VybmFtZS10b2tlbi1wcm9maWxlLTEuMC5wZGYiCi1zY29wZT0iZXh0ZXJuYWwiIHR5cGU9Imh0bWwiPldlYiBTZXJ2aWNlcyBTZWN1cml0eTogVXNlcm5hbWUgVG9rZW4gUHJvZmlsZQotVjEuMDwveHJlZj48L2xpPgotPGxpPiA8eHJlZiBocmVmPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXg1MDktdG9rZW4tcHJvZmlsZS0xLjAucGRmIgotc2NvcGU9ImV4dGVybmFsIiB0eXBlPSJodG1sIj5XZWIgU2VydmljZXMgU2VjdXJpdHk6IFguNTA5IFRva2VuIFByb2ZpbGUgVjEuMDwveHJlZj48L2xpPgotPC91bD48L2RkPgotPC9kbGVudHJ5PjwvZGw+PC9wPgotPHA+V2ViIHNlcnZpY2VzIHRvb2xpbmcgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBzcGVjaWZpY2F0aW9uczo8L3A+Ci08dGFibGU+Ci08dGdyb3VwIGNvbHM9IjIiPjxjb2xzcGVjIGNvbG5hbWU9ImNvbDEiIGNvbHdpZHRoPSI5NSoiLz48Y29sc3BlYyBjb2xuYW1lPSJjb2wyIgotY29sd2lkdGg9IjEwNCoiLz4KLTx0aGVhZD4KLTxyb3c+Ci08ZW50cnkgY29sbmFtZT0iY29sMSIgdmFsaWduPSJ0b3AiPlRlY2hub2xvZ3kgb3Igc3BlY2lmaWNhdGlvbjwvZW50cnk+Ci08ZW50cnkgY29sbmFtZT0iY29sMiIgdmFsaWduPSJ0b3AiPlZlcnNpb24gb3IgbGV2ZWwgc3VwcG9ydGVkPC9lbnRyeT4KLTwvcm93PgotPC90aGVhZD4KLTx0Ym9keT4KLTxyb3c+Ci08ZW50cnkgbmFtZWVuZD0iY29sMiIgbmFtZXN0PSJjb2wxIj48Yj5UcmFuc3BvcnRzPC9iPjwvZW50cnk+Ci08L3Jvdz4KLTxyb3c+Ci08ZW50cnkgY29sbmFtZT0iY29sMSI+SFRUUC9IVFRQUzwvZW50cnk+Ci08ZW50cnkgY29sbmFtZT0iY29sMiI+djEuMCBhbmQgdjEuMTwvZW50cnk+Ci08L3Jvdz4KLTxyb3c+Ci08ZW50cnkgY29sbmFtZT0iY29sMSI+Sk1TPC9lbnRyeT4KLTxlbnRyeSBjb2xuYW1lPSJjb2wyIj48L2VudHJ5PgotPC9yb3c+Ci08cm93PgotPGVudHJ5IG5hbWVlbmQ9ImNvbDIiIG5hbWVzdD0iY29sMSI+PGI+TWVzc2FnaW5nPC9iPjwvZW50cnk+Ci08L3Jvdz4KLTxyb3c+Ci08ZW50cnkgY29sbmFtZT0iY29sMSI+U09BUCBzcGVjaWZpY2F0aW9uPC9lbnRyeT4KLTxlbnRyeSBjb2xuYW1lPSJjb2wyIj52MS4xPC9lbnRyeT4KLTwvcm93PgotPHJvdz4KLTxlbnRyeSBjb2xuYW1lPSJjb2wxIj5TT0FQIEF0dGFjaGVtZW50czwvZW50cnk+Ci08ZW50cnkgY29sbmFtZT0iY29sMiI+PC9lbnRyeT4KLTwvcm93PgotPHJvdz4KLTxlbnRyeSBuYW1lZW5kPSJjb2wyIiBuYW1lc3Q9ImNvbDEiPjxiPkRlc2NyaXB0aW9uPC9iPjwvZW50cnk+Ci08L3Jvdz4KLTxyb3c+Ci08ZW50cnkgY29sbmFtZT0iY29sMSI+VURESTwvZW50cnk+Ci08ZW50cnkgY29sbmFtZT0iY29sMiI+djIuMDwvZW50cnk+Ci08L3Jvdz4KLTxyb3c+Ci08ZW50cnkgY29sbmFtZT0iY29sMSI+V1NETDwvZW50cnk+Ci08ZW50cnkgY29sbmFtZT0iY29sMiI+djEuMTwvZW50cnk+Ci08L3Jvdz4KLTxyb3c+Ci08ZW50cnkgY29sbmFtZT0iY29sMSI+V1NJTDwvZW50cnk+Ci08ZW50cnkgY29sbmFtZT0iY29sMiI+djEuMDwvZW50cnk+Ci08L3Jvdz4KLTxyb3c+Ci08ZW50cnkgbmFtZWVuZD0iY29sMiIgbmFtZXN0PSJjb2wxIj48Yj5TZWN1cml0eTwvYj48L2VudHJ5PgotPC9yb3c+Ci08cm93PgotPGVudHJ5IGNvbG5hbWU9ImNvbDEiPldTLVNlY3VyaXR5PC9lbnRyeT4KLTxlbnRyeSBjb2xuYW1lPSJjb2wyIj5PQVNJUyBTdGFuZGFyZCAxLjA8L2VudHJ5PgotPC9yb3c+Ci08cm93PgotPGVudHJ5IG5hbWVlbmQ9ImNvbDIiIG5hbWVzdD0iY29sMSI+PGI+SW5lcm9wZXJhYmlsaXR5PC9iPjwvZW50cnk+Ci08L3Jvdz4KLTxyb3c+Ci08ZW50cnkgY29sbmFtZT0iY29sMSI+V1MtSSBCYXNpYyBQcm9maWxlPC9lbnRyeT4KLTxlbnRyeSBjb2xuYW1lPSJjb2wyIj4xLjEuMjwvZW50cnk+Ci08L3Jvdz4KLTxyb3c+Ci08ZW50cnkgY29sbmFtZT0iY29sMSI+V1MtSSBTaW1wbGUgU09BUCBCaW5kaW5nIFByb2ZpbGU8L2VudHJ5PgotPGVudHJ5IGNvbG5hbWU9ImNvbDIiPjEuMC4zPC9lbnRyeT4KLTwvcm93PgotPHJvdz4KLTxlbnRyeSBjb2xuYW1lPSJjb2wxIj5XUy1JIEF0dGFjaG1lbnRzIFByb2ZpbGU8L2VudHJ5PgotPGVudHJ5IGNvbG5hbWU9ImNvbDIiPjEuMDwvZW50cnk+Ci08L3Jvdz4KLTxyb3c+Ci08ZW50cnkgY29sbmFtZT0iY29sMSI+PGI+T3RoZXIgU3RhbmRhcmRzPC9iPjwvZW50cnk+Ci08ZW50cnkgY29sbmFtZT0iY29sMiI+PC9lbnRyeT4KLTwvcm93PgotPHJvdz4KLTxlbnRyeSBjb2xuYW1lPSJjb2wxIj5KQVgtUlBDPC9lbnRyeT4KLTxlbnRyeSBjb2xuYW1lPSJjb2wyIj52MS4wIGZvciBKMkVFIDEuMywgdjEuMSBmb3IgSjJFRSAxLjQ8L2VudHJ5PgotPC9yb3c+Ci08cm93PgotPGVudHJ5IGNvbG5hbWU9ImNvbDEiPkpTUiAxMDk8L2VudHJ5PgotPGVudHJ5IGNvbG5hbWU9ImNvbDIiPkoyRUUgMS4zPC9lbnRyeT4KLTwvcm93PgotPHJvdz4KLTxlbnRyeSBjb2xuYW1lPSJjb2wxIj5KU1IgOTIxPC9lbnRyeT4KLTxlbnRyeSBjb2xuYW1lPSJjb2wyIj5KMkVFIDEuNDwvZW50cnk+Ci08L3Jvdz4KLTwvdGJvZHk+Ci08L3Rncm91cD4KLTwvdGFibGU+Ci08L2NvbmJvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBDb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSJjd3MuZGl0YSIgc2NvcGU9ImxvY2FsIj48bGlua3RleHQ+V2ViIHNlcnZpY2VzIG92ZXJ2aWV3PC9saW5rdGV4dD4KLTwvbGluaz4KLTxsaW5rIGhyZWY9ImN3c2lud3NhLmRpdGEiIHNjb3BlPSJsb2NhbCI+PGxpbmt0ZXh0PlRvb2xzIGZvciBXZWIgc2VydmljZXMKLWRldmVsb3BtZW50PC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSJjd3Npb3Zlci5kaXRhIiBzY29wZT0ibG9jYWwiPjxsaW5rdGV4dD5XZWIgc2VydmljZXMgaW50ZXJvcGVyYWJpbGl0eQotKFdTLUkpPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL3Rhc2tzL3RvdmVyd3MuZGl0YSIgc2NvcGU9ImxvY2FsIj48bGlua3RleHQ+IERldmVsb3BpbmcgV2ViCi1zZXJ2aWNlczwvbGlua3RleHQ+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvY29uY2VwdD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c3N0YW5kYXJkcy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzc3RhbmRhcmRzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhYzUwMzYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzc3RhbmRhcmRzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDciIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9ImNvbmNlcHQiIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iV2ViIHNlcnZpY2VzIHN0YW5kYXJkcyIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJPbmUgb2YgdGhlIGtleSBhdHRyaWJ1dGVzIG9mIEludGVybmV0IHN0YW5kYXJkcyBpcyB0aGF0IHRoZXkgZm9jdXMgb24gcHJvdG9jb2xzIGFuZCBub3Qgb24gaW1wbGVtZW50YXRpb25zLiBUaGUgSW50ZXJuZXQgaXMgY29tcG9zZWQgb2YgaGV0ZXJvZ2VuZW91cyB0ZWNobm9sb2dpZXMgdGhhdCBzdWNjZXNzZnVsbHkgaW50ZXJvcGVyYXRlIHRocm91Z2ggc2hhcmVkIHByb3RvY29scy4gVGhpcyBwcmV2ZW50cyBpbmRpdmlkdWFsIHZlbmRvcnMgZnJvbSBpbXBvc2luZyBhIHN0YW5kYXJkIG9uIHRoZSBJbnRlcm5ldC4gT3BlbiBTb3VyY2Ugc29mdHdhcmUgZGV2ZWxvcG1lbnQgcGxheXMgYSBjcnVjaWFsIHJvbGUgaW4gcHJlc2VydmluZyB0aGUgaW50ZXJvcGVyYWJpbGl0eSBvZiB2ZW5kb3IgaW1wbGVtZW50YXRpb25zIG9mIHN0YW5kYXJkcy4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iT25lIG9mIHRoZSBrZXkgYXR0cmlidXRlcyBvZiBJbnRlcm5ldCBzdGFuZGFyZHMgaXMgdGhhdCB0aGV5IGZvY3VzIG9uIHByb3RvY29scyBhbmQgbm90IG9uIGltcGxlbWVudGF0aW9ucy4gVGhlIEludGVybmV0IGlzIGNvbXBvc2VkIG9mIGhldGVyb2dlbmVvdXMgdGVjaG5vbG9naWVzIHRoYXQgc3VjY2Vzc2Z1bGx5IGludGVyb3BlcmF0ZSB0aHJvdWdoIHNoYXJlZCBwcm90b2NvbHMuIFRoaXMgcHJldmVudHMgaW5kaXZpZHVhbCB2ZW5kb3JzIGZyb20gaW1wb3NpbmcgYSBzdGFuZGFyZCBvbiB0aGUgSW50ZXJuZXQuIE9wZW4gU291cmNlIHNvZnR3YXJlIGRldmVsb3BtZW50IHBsYXlzIGEgY3J1Y2lhbCByb2xlIGluIHByZXNlcnZpbmcgdGhlIGludGVyb3BlcmFiaWxpdHkgb2YgdmVuZG9yIGltcGxlbWVudGF0aW9ucyBvZiBzdGFuZGFyZHMuIiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzLCBzdGFuZGFyZHMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIHN0YW5kYXJkcyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9ImN3cy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJjd3NpbndzYS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJjd3Npb3Zlci5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90YXNrcy90b3ZlcndzLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0id2Vic2VydmljZXNzdGFuZGFyZHMiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5XZWIgc2VydmljZXMgc3RhbmRhcmRzPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ3ZWJzZXJ2aWNlc3N0YW5kYXJkcyI+PGEgbmFtZT0id2Vic2VydmljZXNzdGFuZGFyZHMiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPldlYiBzZXJ2aWNlcyBzdGFuZGFyZHM8L2gxPgotCi0KLQotPGRpdj48cD5PbmUgb2YgdGhlIGtleSBhdHRyaWJ1dGVzIG9mIEludGVybmV0IHN0YW5kYXJkcyBpcyB0aGF0IHRoZXkgZm9jdXMKLW9uIHByb3RvY29scyBhbmQgbm90IG9uIGltcGxlbWVudGF0aW9ucy4gVGhlIEludGVybmV0IGlzIGNvbXBvc2VkIG9mIGhldGVyb2dlbmVvdXMKLXRlY2hub2xvZ2llcyB0aGF0IHN1Y2Nlc3NmdWxseSBpbnRlcm9wZXJhdGUgdGhyb3VnaCBzaGFyZWQgcHJvdG9jb2xzLiBUaGlzCi1wcmV2ZW50cyBpbmRpdmlkdWFsIHZlbmRvcnMgZnJvbSBpbXBvc2luZyBhIHN0YW5kYXJkIG9uIHRoZSBJbnRlcm5ldC4gT3BlbgotU291cmNlIHNvZnR3YXJlIGRldmVsb3BtZW50IHBsYXlzIGEgY3J1Y2lhbCByb2xlIGluIHByZXNlcnZpbmcgdGhlIGludGVyb3BlcmFiaWxpdHkKLW9mIHZlbmRvciBpbXBsZW1lbnRhdGlvbnMgb2Ygc3RhbmRhcmRzLjwvcD4KLQotPHA+VGhlIGZvbGxvd2luZyBzdGFuZGFyZHMgcGxheSBrZXkgcm9sZXMgaW4gV2ViIHNlcnZpY2VzOiBVbml2ZXJzYWwgRGVzY3JpcHRpb24sCi1EaXNjb3ZlcnkgYW5kIEludGVncmF0aW9uIChVRERJKSwgV2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKSwKLVdlYiBTZXJ2aWNlcyBJbnNwZWN0aW9uIExhbmd1YWdlIChXU0lMKSwgU09BUCwgYW5kIFdlYiBTZXJ2aWNlcyBJbnRlcm9wZXJhYmlsaXR5Ci0oV1MtSSkuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBzdGFuZGFyZHMgaXMgZGVzY3JpYmVkIGluIEZpZ3VyZSAyLjwvcD4KLQotPHA+VGhlIFVEREkgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIG9wZW4sIHBsYXRmb3JtLWluZGVwZW5kZW50IHN0YW5kYXJkcyB0aGF0Ci1lbmFibGUgYnVzaW5lc3NlcyB0byBzaGFyZSBpbmZvcm1hdGlvbiBpbiBhIGdsb2JhbCBidXNpbmVzcyByZWdpc3RyeSwgZGlzY292ZXIKLXNlcnZpY2VzIG9uIHRoZSByZWdpc3RyeSwgYW5kIGRlZmluZSBob3cgdGhleSBpbnRlcmFjdCBvdmVyIHRoZSBJbnRlcm5ldC4KLUZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFVEREksIHJlZmVyIHRvICA8YSBocmVmPSJodHRwOi8vd3d3LnVkZGkub3JnIiB0YXJnZXQ9Il9ibGFuayI+d3d3LnVkZGkub3JnPC9hPjwvcD4KLQotPHA+V1NJTCBpcyBhbiBYTUwtYmFzZWQgb3BlbiBzcGVjaWZpY2F0aW9uIHRoYXQgZGVmaW5lcyBhIGRpc3RyaWJ1dGVkIHNlcnZpY2UKLWRpc2NvdmVyeSBtZXRob2QgdGhhdCBzdXBwbGllcyByZWZlcmVuY2VzIHRvIHNlcnZpY2UgZGVzY3JpcHRpb25zIGF0IHRoZSBzZXJ2aWNlCi1wcm92aWRlcidzIHBvaW50LW9mLW9mZmVyaW5nLCBieSBzcGVjaWZ5aW5nIGhvdyB0byBpbnNwZWN0IGEgV2ViIHNpdGUgZm9yCi1hdmFpbGFibGUgV2ViIHNlcnZpY2VzLsKgIEEgV1NJTCBkb2N1bWVudCBkZWZpbmVzIHRoZSBsb2NhdGlvbnMgb24gYSBXZWIKLXNpdGUgd2hlcmUgeW91IGNhbiBsb29rIGZvciBXZWIgc2VydmljZSBkZXNjcmlwdGlvbnMuwqBTaW5jZSBXU0lMIGZvY3VzZXMKLW9uIGRpc3RyaWJ1dGVkIHNlcnZpY2UgZGlzY292ZXJ5LCB0aGUgV1NJTCBzcGVjaWZpY2F0aW9uIGNvbXBsZW1lbnRzIFVEREkKLWJ5IGZhY2lsaXRhdGluZyB0aGUgZGlzY292ZXJ5IG9mIHNlcnZpY2VzIHRoYXQgYXJlIGF2YWlsYWJsZSBvbiBXZWIgc2l0ZXMKLXRoYXQgbWF5IG5vdCBiZSBsaXN0ZWQgeWV0IGluIGEgVURESSByZWdpc3RyeS7CoEEgc2VwYXJhdGUgdG9waWMgaW4gdGhpcwotZG9jdW1lbnRhdGlvbiBkaXNjdXNzZXMgdGhlICA8YSBocmVmPSJjd3NpbHVkLmh0bWwiPlJlbGF0aW9uc2hpcCBiZXR3ZWVuIFVEREkgYW5kIFdTSUw8L2E+LsKgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFdTSUwsIHJlZmVyIHRvICA8YSBocmVmPSJodHRwOi8vd3d3LTEwNi5pYm0uY29tL2RldmVsb3BlcndvcmtzL3dlYnNlcnZpY2VzL2xpYnJhcnkvd3Mtd3NpbHNwZWMuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPnd3dy5pYm0uY29tL2RldmVsb3BlcndvcmtzL3dlYnNlcnZpY2VzL2xpYnJhcnkvd3Mtd3NpbHNwZWMuaHRtbDwvYT48L3A+Ci0KLTxwPldTREwgaXMgYW4gWE1MLWJhc2VkIG9wZW4gc3BlY2lmaWNhdGlvbiB0aGF0IGRlc2NyaWJlcyB0aGUgaW50ZXJmYWNlcyB0bwotYW5kIGluc3RhbmNlcyBvZiBXZWIgc2VydmljZXMgb24gdGhlIG5ldHdvcmsuIEl0IGlzIGV4dGVuc2libGUsIHNvIGVuZHBvaW50cwotY2FuIGJlIGRlc2NyaWJlZCByZWdhcmRsZXNzIG9mIHRoZSBtZXNzYWdlIGZvcm1hdHMgb3IgbmV0d29yayBwcm90b2NvbHMgdGhhdAotYXJlIHVzZWQgdG8gY29tbXVuaWNhdGUuIEJ1c2luZXNzZXMgY2FuIG1ha2UgdGhlIFdTREwgZG9jdW1lbnRzIGZvciB0aGVpcgotV2ViIHNlcnZpY2VzIGF2YWlsYWJsZSB0aG91Z2ggVURESSwgV1NJTCwgb3IgYnkgYnJvYWRjYXN0aW5nIHRoZSBVUkxzIHRvIHRoZWlyCi1XU0RMIHZpYSBlbWFpbCBvciBXZWIgc2l0ZXMuIFdTREwgaXMgZGVzY3JpYmVkIGFzIGEgc2VwYXJhdGUgdG9waWMgaW4gdGhpcwotZG9jdW1lbnRhdGlvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gV1NETCwgcmVmZXIgdG8gIDxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3dzZGwiIHRhcmdldD0iX2JsYW5rIj53d3cudzMub3JnL1RSL3dzZGw8L2E+PC9wPgotCi08ZGl2IGNsYXNzPSJwIj5TT0FQIGlzIGFuIFhNTC1iYXNlZCBzdGFuZGFyZCBmb3IgbWVzc2FnaW5nIG92ZXIgSFRUUCBhbmQgb3RoZXIgSW50ZXJuZXQKLXByb3RvY29scy4gSXQgaXMgYSBsaWdodHdlaWdodCBwcm90b2NvbCBmb3IgdGhlIGV4Y2hhbmdlIG9mIGluZm9ybWF0aW9uIGluCi1hIGRlY2VudHJhbGl6ZWQsIGRpc3RyaWJ1dGVkIGVudmlyb25tZW50LiBJdCBpcyBiYXNlZCBvbiBYTUwgYW5kIGNvbnNpc3RzCi1vZiB0aHJlZSBwYXJ0czo8dWw+Ci08bGk+QW4gZW52ZWxvcGUgdGhhdCBkZWZpbmVzIGEgZnJhbWV3b3JrIGZvciBkZXNjcmliaW5nIHdoYXQgaXMgaW4gYSBtZXNzYWdlCi1hbmQgaG93IHRvIHByb2Nlc3MgaXQuPC9saT4KLQotPGxpPkEgc2V0IG9mIGVuY29kaW5nIHJ1bGVzIGZvciBleHByZXNzaW5nIGluc3RhbmNlcyBvZiBhcHBsaWNhdGlvbi1kZWZpbmVkCi1kYXRhIHR5cGVzLjwvbGk+Ci0KLTxsaT5BIGNvbnZlbnRpb24gZm9yIHJlcHJlc2VudGluZyByZW1vdGUgcHJvY2VkdXJlIGNhbGxzIGFuZCByZXNwb25zZXMuPC9saT4KLQotPC91bD4KLVNPQVAgZW5hYmxlcyB0aGUgYmluZGluZyBhbmQgdXNhZ2Ugb2YgZGlzY292ZXJlZCBXZWIgc2VydmljZXMgYnkgZGVmaW5pbmcKLWEgbWVzc2FnZSBwYXRoIGZvciByb3V0aW5nIG1lc3NhZ2VzLiBTT0FQIG1heSBiZSB1c2VkIHRvIHF1ZXJ5IFVEREkgZm9yIFdlYgotc2VydmljZXMuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFNPQVAgMS4xIChTT0FQIDEuMiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZQotV2ViIHNlcnZpY2VzIHRvb2xzKSwgcmVmZXIgdG8gIDxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL1NPQVAiIHRhcmdldD0iX2JsYW5rIj53d3cudzMub3JnL1RSL1NPQVA8L2E+PC9kaXY+Ci0KLTxwPkZpZ3VyZSAyLiBSZWxhdGlvbnNoaXBzIGJldHdlZW4gU09BUCwgVURESSwgV1NJTCBhbmQgV1NETC48L3A+Ci0KLTxwPiA8aW1nIHNyYz0iLi4vaW1hZ2VzL3NvYXB1ZHdzLmdpZiIgYWx0PSJGaWd1cmUgMiBpbGx1c3RyYXRlcyB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIFNPQVAsIFVEREksIFdTSUwsIGFuZCBXU0RMLiIgLz4gPC9wPgotCi08cD5BIHNlcnZpY2UgcHJvdmlkZXIgaG9zdHMgYSBXZWIgc2VydmljZSBhbmQgbWFrZXMgaXQgYWNjZXNzaWJsZSB1c2luZyBwcm90b2NvbHMKLXN1Y2ggYXMgU09BUC9IVFRQIG9yIFNPQVAvSk1TLiBUaGUgV2ViIHNlcnZpY2UgaXMgZGVzY3JpYmVkIGJ5IGEgV1NETCBkb2N1bWVudAotdGhhdCBpcyBzdG9yZWQgb24gdGhlIHByb3ZpZGVyJ3Mgc2VydmVyIG9yIGluIGEgc3BlY2lhbCByZXBvc2l0b3J5LiBUaGUgV1NETAotZG9jdW1lbnQgbWF5IGJlIHJlZmVyZW5jZWQgYnkgdGhlIFVEREkgYnVzaW5lc3MgcmVnaXN0cnkgYW5kIFdTSUwgZG9jdW1lbnRzLgotVGhlc2UgY29udGFpbiBwb2ludGVycyB0byB0aGUgV2ViIHNlcnZpY2UncyBXU0RMIGZpbGVzLjwvcD4KLQotPHA+VGhlIFdTLUkgU2ltcGxlIFNPQVAgQmluZGluZyBQcm9maWxlIGFuZCBXUy1JIEF0dGFjaG1lbnRzIFByb2ZpbGUgYXJlIG91dGxpbmVzCi1vZiByZXF1aXJlbWVudHMgdG8gd2hpY2ggV1NETCBhbmQgV2ViIHNlcnZpY2UgcHJvdG9jb2wgKFNPQVAvSFRUUCkgdHJhZmZpYwotbXVzdCBjb21wbHkgaW4gb3JkZXIgdG8gY2xhaW0gV1MtSSBjb25mb3JtYW5jZS4gVGhlIFdlYiBzZXJ2aWNlcyBXUy1JIHZhbGlkYXRpb24KLXRvb2xzIGN1cnJlbnRseSBzdXBwb3J0IFdTLUkgU2ltcGxlIFNPQVAgQmluZGluZyBQcm9maWxlIDEuMCBhbmQgdGhlIEF0dGFjaG1lbnQKLVByb2ZpbGUgMS4wLiBUbyB2aWV3IHRoZSBzcGVjaWZpY2F0aW9ucywgcmVmZXIgdG8gdGhlIFdTLUkgV2ViIHNpdGUsIGFuZCB1bmRlcgotIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlJlc291cmNlczwvc3Bhbj4gc2VsZWN0ICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5Eb2N1bWVudGF0aW9uPC9zcGFuPjogPGEgaHJlZj0iaHR0cDovL3d3dy53cy1pLm9yZyIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly93d3cud3MtaS5vcmc8L2E+PC9wPgotCi08ZGl2IGNsYXNzPSJwIj5TZXZlcmFsIG5ldyBXZWIgc2VydmljZXMgc3RhbmRhcmRzIGFyZSBhbHNvIHN1cHBvcnRlZCBieSB0aGlzIGRldmVsb3BtZW50Ci1lbnZpcm9ubWVudC4gVGhlc2UgaW5jbHVkZTo8ZGw+Ci08ZHQgY2xhc3M9ImRsdGVybSI+SkFYLVJQQzwvZHQ+Ci0KLTxkZD5KQVgtUlBDIHN0YW5kcyBmb3IgSmF2YeKEoiBBUEkgZm9yIFhNTC1iYXNlZCBSUEMsIGFsc28ga25vd24gYXMKLUpTUiAxMDEuIEl0IGlzIGEgc3BlY2lmaWNhdGlvbiB0aGF0IGRlc2NyaWJlcyBKYXZhIEFwcGxpY2F0aW9uIFByb2dyYW1taW5nIEludGVyZmFjZXMKLShBUElzKSBhbmQgY29udmVudGlvbnMgZm9yIGJ1aWxkaW5nIFdlYiBzZXJ2aWNlcyBhbmQgV2ViIHNlcnZpY2UgY2xpZW50cyB0aGF0Ci11c2UgcmVtb3RlIHByb2NlZHVyZSBjYWxscyAoUlBDKSBhbmQgWE1MLiBJdCBzdGFuZGFyZGl6ZXMgdGhlIEphdmEgdG8KLVdTREwgYW5kIFdTREwgdG8gSmF2YSBtYXBwaW5ncywgYW5kIHByb3ZpZGVzIHRoZSBjb3JlIEFQSXMgZm9yIGRldmVsb3BpbmcKLWFuZCBkZXBsb3lpbmcgV2ViIHNlcnZpY2VzIGFuZCBXZWIgc2VydmljZSBjbGllbnRzIG9uIHRoZSBKYXZhIHBsYXRmb3JtLgotRm9yIG1vcmUgaW5mb3JtYXRpb24gcmVmZXIgdG8gdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuamNwLm9yZy9lbi9qc3IvZGV0YWlsP2lkPTEwMSIgdGFyZ2V0PSJfYmxhbmsiPm9mZmljaWFsIHNwZWNpZmljYXRpb25zPC9hPi48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5KU1ItMTA5IGFuZCBKU1ItOTIxPC9kdD4KLQotPGRkPkpTUi0xMDkgYW5kIEpTUi05MjEgKEltcGxlbWVudGluZyBFbnRlcnByaXNlIFdlYiBTZXJ2aWNlcykgZGVmaW5lIHRoZQotcHJvZ3JhbW1pbmcgbW9kZWwgYW5kIHJ1bi10aW1lIGFyY2hpdGVjdHVyZSB0byBkZXBsb3kgYW5kIGxvb2sgdXAgV2ViIHNlcnZpY2VzCi1pbiB0aGUgSjJFRSBlbnZpcm9ubWVudDsgbW9yZSBzcGVjaWZpY2FsbHksIGluIHRoZSBXZWIsIEVKQiwgYW5kIENsaWVudCBBcHBsaWNhdGlvbgotY29udGFpbmVycy4gT25lIG9mIGl0cyBtYWluIGdvYWxzIGlzIHRvIGVuc3VyZSB2ZW5kb3JzJyBpbXBsZW1lbnRhdGlvbnMgaW50ZXJvcGVyYXRlLgotRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJlZmVyIHRvIHRoZSBvZmZpY2lhbCBzcGVjaWZpY2F0aW9uczogPHVsPgotPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuamNwLm9yZy9lbi9qc3IvZGV0YWlsP2lkPTEwOSIgdGFyZ2V0PSJfYmxhbmsiPkpTUi0xMDk8L2E+PC9saT4KLQotPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuamNwLm9yZy9lbi9qc3IvZGV0YWlsP2lkPTkyMSIgdGFyZ2V0PSJfYmxhbmsiPkpTUi05MjE8L2E+PC9saT4KLQotPC91bD4KLTwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPldTLVM8L2R0PgotCi08ZGQ+VGhlc2UgdG9vbHMgc3VwcG9ydCB0aGUgT0FTSVMgV2ViIFNlcnZpY2VzIFNlY3VyaXR5IDEuMCBzdGFuZGFyZC4gRm9yCi1tb3JlIGluZm9ybWF0aW9uIG9uIHRoZSB2YXJpb3VzIGNvbXBvbmVudHMgb2YgdGhpcyBzdGFuZGFyZCwgcmVmZXIgdG86PHVsPgotPGxpPjxhIGhyZWY9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3Mtc29hcC1tZXNzYWdlLXNlY3VyaXR5LTEuMC5wZGYiIHRhcmdldD0iX2JsYW5rIj5XZWIgU2VydmljZXMgU2VjdXJpdHk6IFNPQVAgTWVzc2FnZSBTZWN1cml0eSBWMS4wPC9hPiA8L2xpPgotCi08bGk+IDxhIGhyZWY9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3MtdXNlcm5hbWUtdG9rZW4tcHJvZmlsZS0xLjAucGRmIiB0YXJnZXQ9Il9ibGFuayI+V2ViIFNlcnZpY2VzIFNlY3VyaXR5OiBVc2VybmFtZSBUb2tlbiBQcm9maWxlIFYxLjA8L2E+PC9saT4KLQotPGxpPiA8YSBocmVmPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXg1MDktdG9rZW4tcHJvZmlsZS0xLjAucGRmIiB0YXJnZXQ9Il9ibGFuayI+V2ViIFNlcnZpY2VzIFNlY3VyaXR5OiBYLjUwOSBUb2tlbiBQcm9maWxlIFYxLjA8L2E+PC9saT4KLQotPC91bD4KLTwvZGQ+Ci0KLTwvZGw+Ci08L2Rpdj4KLQotPHA+V2ViIHNlcnZpY2VzIHRvb2xpbmcgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBzcGVjaWZpY2F0aW9uczo8L3A+Ci0KLQotPGRpdiBjbGFzcz0idGFibGVub2JvcmRlciI+PHRhYmxlIHN1bW1hcnk9IiIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSI0IiBmcmFtZT0iYm9yZGVyIiBib3JkZXI9IjEiIHJ1bGVzPSJhbGwiPgotPHRoZWFkIGFsaWduPSJsZWZ0Ij4KLTx0cj4KLTx0aCB2YWxpZ249InRvcCIgd2lkdGg9IjQ3LjczODY5MzQ2NzMzNjY5JSIgaWQ9Ik4xMDFCNCI+VGVjaG5vbG9neSBvciBzcGVjaWZpY2F0aW9uPC90aD4KLQotPHRoIHZhbGlnbj0idG9wIiB3aWR0aD0iNTIuMjYxMzA2NTMyNjYzMzIlIiBpZD0iTjEwMUJDIj5WZXJzaW9uIG9yIGxldmVsIHN1cHBvcnRlZDwvdGg+Ci0KLTwvdHI+Ci0KLTwvdGhlYWQ+Ci0KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjb2xzcGFuPSIyIiB2YWxpZ249InRvcCIgaGVhZGVycz0iTjEwMUI0IE4xMDFCQyAiPjxzdHJvbmc+VHJhbnNwb3J0czwvc3Ryb25nPjwvdGQ+Ci0KLTwvdHI+Ci0KLTx0cj4KLTx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ3LjczODY5MzQ2NzMzNjY5JSIgaGVhZGVycz0iTjEwMUI0ICI+SFRUUC9IVFRQUzwvdGQ+Ci0KLTx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjUyLjI2MTMwNjUzMjY2MzMyJSIgaGVhZGVycz0iTjEwMUJDICI+djEuMCBhbmQgdjEuMTwvdGQ+Ci0KLTwvdHI+Ci0KLTx0cj4KLTx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ3LjczODY5MzQ2NzMzNjY5JSIgaGVhZGVycz0iTjEwMUI0ICI+Sk1TPC90ZD4KLQotPHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNTIuMjYxMzA2NTMyNjYzMzIlIiBoZWFkZXJzPSJOMTAxQkMgIj4mbmJzcDs8L3RkPgotCi08L3RyPgotCi08dHI+Ci08dGQgY29sc3Bhbj0iMiIgdmFsaWduPSJ0b3AiIGhlYWRlcnM9Ik4xMDFCNCBOMTAxQkMgIj48c3Ryb25nPk1lc3NhZ2luZzwvc3Ryb25nPjwvdGQ+Ci0KLTwvdHI+Ci0KLTx0cj4KLTx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ3LjczODY5MzQ2NzMzNjY5JSIgaGVhZGVycz0iTjEwMUI0ICI+U09BUCBzcGVjaWZpY2F0aW9uPC90ZD4KLQotPHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNTIuMjYxMzA2NTMyNjYzMzIlIiBoZWFkZXJzPSJOMTAxQkMgIj52MS4xPC90ZD4KLQotPC90cj4KLQotPHRyPgotPHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDcuNzM4NjkzNDY3MzM2NjklIiBoZWFkZXJzPSJOMTAxQjQgIj5TT0FQIEF0dGFjaGVtZW50czwvdGQ+Ci0KLTx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjUyLjI2MTMwNjUzMjY2MzMyJSIgaGVhZGVycz0iTjEwMUJDICI+Jm5ic3A7PC90ZD4KLQotPC90cj4KLQotPHRyPgotPHRkIGNvbHNwYW49IjIiIHZhbGlnbj0idG9wIiBoZWFkZXJzPSJOMTAxQjQgTjEwMUJDICI+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjwvdGQ+Ci0KLTwvdHI+Ci0KLTx0cj4KLTx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ3LjczODY5MzQ2NzMzNjY5JSIgaGVhZGVycz0iTjEwMUI0ICI+VURESTwvdGQ+Ci0KLTx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjUyLjI2MTMwNjUzMjY2MzMyJSIgaGVhZGVycz0iTjEwMUJDICI+djIuMDwvdGQ+Ci0KLTwvdHI+Ci0KLTx0cj4KLTx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ3LjczODY5MzQ2NzMzNjY5JSIgaGVhZGVycz0iTjEwMUI0ICI+V1NETDwvdGQ+Ci0KLTx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjUyLjI2MTMwNjUzMjY2MzMyJSIgaGVhZGVycz0iTjEwMUJDICI+djEuMTwvdGQ+Ci0KLTwvdHI+Ci0KLTx0cj4KLTx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ3LjczODY5MzQ2NzMzNjY5JSIgaGVhZGVycz0iTjEwMUI0ICI+V1NJTDwvdGQ+Ci0KLTx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjUyLjI2MTMwNjUzMjY2MzMyJSIgaGVhZGVycz0iTjEwMUJDICI+djEuMDwvdGQ+Ci0KLTwvdHI+Ci0KLTx0cj4KLTx0ZCBjb2xzcGFuPSIyIiB2YWxpZ249InRvcCIgaGVhZGVycz0iTjEwMUI0IE4xMDFCQyAiPjxzdHJvbmc+U2VjdXJpdHk8L3N0cm9uZz48L3RkPgotCi08L3RyPgotCi08dHI+Ci08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0Ny43Mzg2OTM0NjczMzY2OSUiIGhlYWRlcnM9Ik4xMDFCNCAiPldTLVNlY3VyaXR5PC90ZD4KLQotPHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNTIuMjYxMzA2NTMyNjYzMzIlIiBoZWFkZXJzPSJOMTAxQkMgIj5PQVNJUyBTdGFuZGFyZCAxLjA8L3RkPgotCi08L3RyPgotCi08dHI+Ci08dGQgY29sc3Bhbj0iMiIgdmFsaWduPSJ0b3AiIGhlYWRlcnM9Ik4xMDFCNCBOMTAxQkMgIj48c3Ryb25nPkluZXJvcGVyYWJpbGl0eTwvc3Ryb25nPjwvdGQ+Ci0KLTwvdHI+Ci0KLTx0cj4KLTx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ3LjczODY5MzQ2NzMzNjY5JSIgaGVhZGVycz0iTjEwMUI0ICI+V1MtSSBCYXNpYyBQcm9maWxlPC90ZD4KLQotPHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNTIuMjYxMzA2NTMyNjYzMzIlIiBoZWFkZXJzPSJOMTAxQkMgIj4xLjEuMjwvdGQ+Ci0KLTwvdHI+Ci0KLTx0cj4KLTx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ3LjczODY5MzQ2NzMzNjY5JSIgaGVhZGVycz0iTjEwMUI0ICI+V1MtSSBTaW1wbGUgU09BUCBCaW5kaW5nIFByb2ZpbGU8L3RkPgotCi08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI1Mi4yNjEzMDY1MzI2NjMzMiUiIGhlYWRlcnM9Ik4xMDFCQyAiPjEuMC4zPC90ZD4KLQotPC90cj4KLQotPHRyPgotPHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDcuNzM4NjkzNDY3MzM2NjklIiBoZWFkZXJzPSJOMTAxQjQgIj5XUy1JIEF0dGFjaG1lbnRzIFByb2ZpbGU8L3RkPgotCi08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI1Mi4yNjEzMDY1MzI2NjMzMiUiIGhlYWRlcnM9Ik4xMDFCQyAiPjEuMDwvdGQ+Ci0KLTwvdHI+Ci0KLTx0cj4KLTx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ3LjczODY5MzQ2NzMzNjY5JSIgaGVhZGVycz0iTjEwMUI0ICI+PHN0cm9uZz5PdGhlciBTdGFuZGFyZHM8L3N0cm9uZz48L3RkPgotCi08dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI1Mi4yNjEzMDY1MzI2NjMzMiUiIGhlYWRlcnM9Ik4xMDFCQyAiPiZuYnNwOzwvdGQ+Ci0KLTwvdHI+Ci0KLTx0cj4KLTx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ3LjczODY5MzQ2NzMzNjY5JSIgaGVhZGVycz0iTjEwMUI0ICI+SkFYLVJQQzwvdGQ+Ci0KLTx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjUyLjI2MTMwNjUzMjY2MzMyJSIgaGVhZGVycz0iTjEwMUJDICI+djEuMCBmb3IgSjJFRSAxLjMsIHYxLjEgZm9yIEoyRUUgMS40PC90ZD4KLQotPC90cj4KLQotPHRyPgotPHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDcuNzM4NjkzNDY3MzM2NjklIiBoZWFkZXJzPSJOMTAxQjQgIj5KU1IgMTA5PC90ZD4KLQotPHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNTIuMjYxMzA2NTMyNjYzMzIlIiBoZWFkZXJzPSJOMTAxQkMgIj5KMkVFIDEuMzwvdGQ+Ci0KLTwvdHI+Ci0KLTx0cj4KLTx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ3LjczODY5MzQ2NzMzNjY5JSIgaGVhZGVycz0iTjEwMUI0ICI+SlNSIDkyMTwvdGQ+Ci0KLTx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjUyLjI2MTMwNjUzMjY2MzMyJSIgaGVhZGVycz0iTjEwMUJDICI+SjJFRSAxLjQ8L3RkPgotCi08L3RyPgotCi08L3Rib2R5PgotCi08L3RhYmxlPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9ImN3cy5odG1sIiB0aXRsZT0iQSBXZWIgc2VydmljZSBpcyBhIHNldCBvZiByZWxhdGVkIGFwcGxpY2F0aW9uIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSBwcm9ncmFtbWF0aWNhbGx5IGludm9rZWQgb3ZlciB0aGUgSW50ZXJuZXQuIEJ1c2luZXNzZXMgY2FuIGR5bmFtaWNhbGx5IG1peCBhbmQgbWF0Y2ggV2ViIHNlcnZpY2VzIHRvIHBlcmZvcm0gY29tcGxleCB0cmFuc2FjdGlvbnMgd2l0aCBtaW5pbWFsIHByb2dyYW1taW5nLiBXZWIgc2VydmljZXMgYWxsb3cgYnV5ZXJzIGFuZCBzZWxsZXJzIGFsbCBvdmVyIHRoZSB3b3JsZCB0byBkaXNjb3ZlciBlYWNoIG90aGVyLCBjb25uZWN0IGR5bmFtaWNhbGx5LCBhbmQgZXhlY3V0ZSB0cmFuc2FjdGlvbnMgaW4gcmVhbCB0aW1lIHdpdGggbWluaW1hbCBodW1hbiBpbnRlcmFjdGlvbi4iPldlYiBzZXJ2aWNlcyBvdmVydmlldzwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iY3dzaW53c2EuaHRtbCIgdGl0bGU9IiI+VG9vbHMgZm9yIFdlYiBzZXJ2aWNlcwotZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9ImN3c2lvdmVyLmh0bWwiIHRpdGxlPSJXUy1JIGlzIGFuIG9yZ2FuaXphdGlvbiBkZXNpZ25lZCB0byBwcm9tb3RlIFdlYiBzZXJ2aWNlIGludGVyb3BlcmFiaWxpdHkgYWNyb3NzIHBsYXRmb3Jtcywgb3BlcmF0aW5nIHN5c3RlbXMsIGFuZCBwcm9ncmFtbWluZyBsYW5ndWFnZXMuIj5XZWIgc2VydmljZXMgaW50ZXJvcGVyYWJpbGl0eQotKFdTLUkpPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vdGFza3MvdG92ZXJ3cy5odG1sIiB0aXRsZT0iVXNlIFdlYiBzZXJ2aWNlcyB0b29scyB0byBkaXNjb3ZlciwgY3JlYXRlLCBhbmQgcHVibGlzaCBXZWIgc2VydmljZXMgdGhhdCBhcmUgY3JlYXRlZCBmcm9tIEphdmEgYmVhbnMsIGVudGVycHJpc2UgYmVhbnMsIGFuZCBXU0RMIGZpbGVzLiBZb3UgY2FuIGNyZWF0ZSBvZiBXZWIgc2VydmljZXMgdXNpbmcgYSB0b3AtZG93biBhcHByb2FjaCAod2hpY2ggc3RhcnRzIHdpdGggYSBXU0RMIGZpbGUpIG9yIGEgYm90dG9tLXVwIGFwcHJvYWNoICh3aGljaCBzdGFydHMgd2l0aCBhIEphdmEgYmVhbiBvciBFSkIpLiI+IERldmVsb3BpbmcgV2ViCi1zZXJ2aWNlczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzdG9wZG93bi5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzdG9wZG93bi5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzE2NzZkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c3RvcGRvd24uZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIGNvbmNlcHQgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgQ29uY2VwdC8vRU4iCi0gImNvbmNlcHQuZHRkIj4KLTxjb25jZXB0IGlkPSJjcmVhdGluZ3RvcC1kb3dud2Vic2VydmljZXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+Q3JlYXRpbmcgdG9wLWRvd24gV2ViIHNlcnZpY2VzPC90aXRsZT4KLTxzaG9ydGRlc2M+V2ViIHNlcnZpY2VzIGNhbiBiZSBjcmVhdGVkIHVzaW5nIHR3byBtZXRob2RzOiB0b3AtZG93biBkZXZlbG9wbWVudAotYW5kIGJvdHRvbS11cCBkZXZlbG9wbWVudC4gVG9wLWRvd24gV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50IGludm9sdmVzIGNyZWF0aW5nCi1hIFdlYiBzZXJ2aWNlIGZyb20gYSBXU0RMIGZpbGUuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPnRvcC1kb3duIFdlYiBzZXJ2aWNlczxpbmRleHRlcm0+Y3JlYXRpbmc8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT50b3AtZG93bjwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08Y29uYm9keT4KLTxwPldoZW4gY3JlYXRpbmcgYSBXZWIgc2VydmljZSB1c2luZyBhIHRvcC1kb3duIGFwcHJvYWNoLCBmaXJzdCB5b3UgZGVzaWduCi10aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIFdlYiBzZXJ2aWNlIGJ5IGNyZWF0aW5nIGEgV1NETCBmaWxlLiBZb3UgY2FuIGRvCi10aGlzIHVzaW5nIHRoZSBXU0RMIEVkaXRvci4gWW91IGNhbiB0aGVuIHVzZSB0aGUgV2ViIHNlcnZpY2VzIHdpemFyZCB0byBjcmVhdGUKLXRoZSBXZWIgc2VydmljZSBhbmQgc2tlbGV0b24gPHRtIHRtY2xhc3M9InNwZWNpYWwiIHRtb3duZXI9IlN1biBNaWNyb3N5c3RlbXMsIEluYy4iCi10bXR5cGU9InRtIiB0cmFkZW1hcms9IkphdmEiPkphdmE8L3RtPiBjbGFzc2VzIHRvIHdoaWNoIHlvdSBjYW4gYWRkIHRoZSByZXF1aXJlZAotY29kZS48L3A+Ci08cD5BbHRob3VnaCBib3R0b20tdXAgV2ViIHNlcnZpY2UgZGV2ZWxvcG1lbnQgbWF5IGJlIGZhc3RlciBhbmQgZWFzaWVyLCBlc3BlY2lhbGx5Ci1pZiB5b3UgYXJlIG5ldyB0byBXZWIgc2VydmljZXMsIHRoZSB0b3AtZG93biBhcHByb2FjaCBpcyB0aGUgcmVjb21tZW5kZWQgd2F5Ci1vZiBjcmVhdGluZyBhIFdlYiBzZXJ2aWNlLiBCeSBjcmVhdGluZyB0aGUgV1NETCBmaWxlIGZpcnN0IHlvdSB3aWxsIHVsdGltYXRlbHkKLWhhdmUgbW9yZSBjb250cm9sIG92ZXIgdGhlIFdlYiBzZXJ2aWNlLCBhbmQgY2FuIGVsaW1pbmF0ZSBpbnRlcm9wZXJhYmlsaXR5Ci1pc3N1ZXMgdGhhdCBtYXkgYXJpc2Ugd2hlbiBjcmVhdGluZyBhIFdlYiBzZXJ2aWNlIHVzaW5nIHRoZSBib3R0b20tdXAgbWV0aG9kLjwvcD4KLTwvY29uYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9ImN3cy5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJjd3NpbndzYS5kaXRhIj48L2xpbms+Ci08bGluayBocmVmPSJjd3NidG11cC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgVGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vdGFza3MvdG92ZXJ3cy5kaXRhIiBzY29wZT0ibG9jYWwiPjxsaW5rdGV4dD4gRGV2ZWxvcGluZyBXZWIKLXNlcnZpY2VzPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC9jb25jZXB0PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzdG9wZG93bi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzdG9wZG93bi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTI0YThiLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c3RvcGRvd24uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA3IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJjb25jZXB0IiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IkNyZWF0aW5nIHRvcC1kb3duIFdlYiBzZXJ2aWNlcyIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJXZWIgc2VydmljZXMgY2FuIGJlIGNyZWF0ZWQgdXNpbmcgdHdvIG1ldGhvZHM6IHRvcC1kb3duIGRldmVsb3BtZW50IGFuZCBib3R0b20tdXAgZGV2ZWxvcG1lbnQuIFRvcC1kb3duIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCBpbnZvbHZlcyBjcmVhdGluZyBhIFdlYiBzZXJ2aWNlIGZyb20gYSBXU0RMIGZpbGUuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcyBjYW4gYmUgY3JlYXRlZCB1c2luZyB0d28gbWV0aG9kczogdG9wLWRvd24gZGV2ZWxvcG1lbnQgYW5kIGJvdHRvbS11cCBkZXZlbG9wbWVudC4gVG9wLWRvd24gV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50IGludm9sdmVzIGNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgZnJvbSBhIFdTREwgZmlsZS4iIC8+Ci08bWV0YSBjb250ZW50PSJ0b3AtZG93biBXZWIgc2VydmljZXMsIGNyZWF0aW5nLCBXZWIgc2VydmljZXMsIHRvcC1kb3duIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0idG9wLWRvd24gV2ViIHNlcnZpY2VzLCBjcmVhdGluZywgV2ViIHNlcnZpY2VzLCB0b3AtZG93biIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9ImN3cy5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJjd3NpbndzYS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJjd3NidG11cC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90YXNrcy90b3ZlcndzLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0iY3JlYXRpbmd0b3AtZG93bndlYnNlcnZpY2VzIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+Q3JlYXRpbmcgdG9wLWRvd24gV2ViIHNlcnZpY2VzPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJjcmVhdGluZ3RvcC1kb3dud2Vic2VydmljZXMiPjxhIG5hbWU9ImNyZWF0aW5ndG9wLWRvd253ZWJzZXJ2aWNlcyI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+Q3JlYXRpbmcgdG9wLWRvd24gV2ViIHNlcnZpY2VzPC9oMT4KLQotCi0KLTxkaXY+PHA+V2ViIHNlcnZpY2VzIGNhbiBiZSBjcmVhdGVkIHVzaW5nIHR3byBtZXRob2RzOiB0b3AtZG93biBkZXZlbG9wbWVudAotYW5kIGJvdHRvbS11cCBkZXZlbG9wbWVudC4gVG9wLWRvd24gV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50IGludm9sdmVzIGNyZWF0aW5nCi1hIFdlYiBzZXJ2aWNlIGZyb20gYSBXU0RMIGZpbGUuPC9wPgotCi08cD5XaGVuIGNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgdXNpbmcgYSB0b3AtZG93biBhcHByb2FjaCwgZmlyc3QgeW91IGRlc2lnbgotdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBXZWIgc2VydmljZSBieSBjcmVhdGluZyBhIFdTREwgZmlsZS4gWW91IGNhbiBkbwotdGhpcyB1c2luZyB0aGUgV1NETCBFZGl0b3IuIFlvdSBjYW4gdGhlbiB1c2UgdGhlIFdlYiBzZXJ2aWNlcyB3aXphcmQgdG8gY3JlYXRlCi10aGUgV2ViIHNlcnZpY2UgYW5kIHNrZWxldG9uIEphdmHihKIgY2xhc3NlcyB0byB3aGljaCB5b3UgY2FuIGFkZCB0aGUgcmVxdWlyZWQKLWNvZGUuPC9wPgotCi08cD5BbHRob3VnaCBib3R0b20tdXAgV2ViIHNlcnZpY2UgZGV2ZWxvcG1lbnQgbWF5IGJlIGZhc3RlciBhbmQgZWFzaWVyLCBlc3BlY2lhbGx5Ci1pZiB5b3UgYXJlIG5ldyB0byBXZWIgc2VydmljZXMsIHRoZSB0b3AtZG93biBhcHByb2FjaCBpcyB0aGUgcmVjb21tZW5kZWQgd2F5Ci1vZiBjcmVhdGluZyBhIFdlYiBzZXJ2aWNlLiBCeSBjcmVhdGluZyB0aGUgV1NETCBmaWxlIGZpcnN0IHlvdSB3aWxsIHVsdGltYXRlbHkKLWhhdmUgbW9yZSBjb250cm9sIG92ZXIgdGhlIFdlYiBzZXJ2aWNlLCBhbmQgY2FuIGVsaW1pbmF0ZSBpbnRlcm9wZXJhYmlsaXR5Ci1pc3N1ZXMgdGhhdCBtYXkgYXJpc2Ugd2hlbiBjcmVhdGluZyBhIFdlYiBzZXJ2aWNlIHVzaW5nIHRoZSBib3R0b20tdXAgbWV0aG9kLjwvcD4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIENvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iY3dzLmh0bWwiIHRpdGxlPSJBIFdlYiBzZXJ2aWNlIGlzIGEgc2V0IG9mIHJlbGF0ZWQgYXBwbGljYXRpb24gZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHByb2dyYW1tYXRpY2FsbHkgaW52b2tlZCBvdmVyIHRoZSBJbnRlcm5ldC4gQnVzaW5lc3NlcyBjYW4gZHluYW1pY2FsbHkgbWl4IGFuZCBtYXRjaCBXZWIgc2VydmljZXMgdG8gcGVyZm9ybSBjb21wbGV4IHRyYW5zYWN0aW9ucyB3aXRoIG1pbmltYWwgcHJvZ3JhbW1pbmcuIFdlYiBzZXJ2aWNlcyBhbGxvdyBidXllcnMgYW5kIHNlbGxlcnMgYWxsIG92ZXIgdGhlIHdvcmxkIHRvIGRpc2NvdmVyIGVhY2ggb3RoZXIsIGNvbm5lY3QgZHluYW1pY2FsbHksIGFuZCBleGVjdXRlIHRyYW5zYWN0aW9ucyBpbiByZWFsIHRpbWUgd2l0aCBtaW5pbWFsIGh1bWFuIGludGVyYWN0aW9uLiI+V2ViIHNlcnZpY2VzIG92ZXJ2aWV3PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJjd3NpbndzYS5odG1sIiB0aXRsZT0iIj5Ub29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJjd3NidG11cC5odG1sIiB0aXRsZT0iV2ViIHNlcnZpY2VzIGNhbiBiZSBjcmVhdGVkIHVzaW5nIHR3byBtZXRob2RzOiB0b3AtZG93biBkZXZlbG9wbWVudCBhbmQgYm90dG9tLXVwIGRldmVsb3BtZW50LiBCb3R0b20tdXAgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50IGludm9sdmVzIGNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgZnJvbSBhIEphdmEgYmVhbiBvciBlbnRlcnByaXNlIGJlYW4uIj5DcmVhdGluZyBib3R0b20tdXAgV2ViIHNlcnZpY2VzPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vdGFza3MvdG92ZXJ3cy5odG1sIiB0aXRsZT0iVXNlIFdlYiBzZXJ2aWNlcyB0b29scyB0byBkaXNjb3ZlciwgY3JlYXRlLCBhbmQgcHVibGlzaCBXZWIgc2VydmljZXMgdGhhdCBhcmUgY3JlYXRlZCBmcm9tIEphdmEgYmVhbnMsIGVudGVycHJpc2UgYmVhbnMsIGFuZCBXU0RMIGZpbGVzLiBZb3UgY2FuIGNyZWF0ZSBvZiBXZWIgc2VydmljZXMgdXNpbmcgYSB0b3AtZG93biBhcHByb2FjaCAod2hpY2ggc3RhcnRzIHdpdGggYSBXU0RMIGZpbGUpIG9yIGEgYm90dG9tLXVwIGFwcHJvYWNoICh3aGljaCBzdGFydHMgd2l0aCBhIEphdmEgYmVhbiBvciBFSkIpLiI+IERldmVsb3BpbmcgV2ViCi1zZXJ2aWNlczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvaW1hZ2VzL3JvbGVzLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2ltYWdlcy9yb2xlcy5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1ZTk5ODcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvaW1hZ2VzL3JvbGVzLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2ltYWdlcy9zb2FwdWR3cy5naWYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9pbWFnZXMvc29hcHVkd3MuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZmI0MmY1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2ltYWdlcy9zb2FwdWR3cy5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9pbmRleC9fdy5jZnMgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9pbmRleC9fdy5jZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4ZWI2ZmIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvaW5kZXgvX3cuY2ZzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvaW5kZXgvZGVsZXRhYmxlIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvaW5kZXgvZGVsZXRhYmxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDIzMjQyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2luZGV4L2RlbGV0YWJsZQorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfY29udHJpYnV0aW9ucyBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfY29udHJpYnV0aW9ucwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGE4N2Q4ZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9pbmRleC9pbmRleGVkX2NvbnRyaWJ1dGlvbnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUaGlzIGlzIGEgZ2VuZXJhdGVkIGZpbGU7IGRvIG5vdCBlZGl0Lg0KLSNXZWQgTWF5IDA5IDE0OjEzOjM3IEVEVCAyMDA3DQotb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyPW9yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlclxuMS4wLjMwMC5xdWFsaWZpZXINCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9pbmRleC9pbmRleGVkX2RlcGVuZGVuY2llcyBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfZGVwZW5kZW5jaWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMmZlNDFkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfZGVwZW5kZW5jaWVzCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0jVGhpcyBpcyBhIGdlbmVyYXRlZCBmaWxlOyBkbyBub3QgZWRpdC4NCi0jV2VkIE1heSAwOSAxNDoxMzozNyBFRFQgMjAwNw0KLWx1Y2VuZT0xLjQuMTAzLnYyMDA2MDYwMQ0KLWFuYWx5emVyPW9yZy5lY2xpcHNlLmhlbHAuYmFzZVwjMy4yLjAudjIwMDYwNjAxP2xvY2FsZVw9ZW4NCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9pbmRleC9pbmRleGVkX2RvY3MgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9pbmRleC9pbmRleGVkX2RvY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyOWY4ZmQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kb2NzCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotI1RoaXMgaXMgYSBnZW5lcmF0ZWQgZmlsZTsgZG8gbm90IGVkaXQuDQotI1dlZCBNYXkgMDkgMTQ6MTM6MzcgRURUIDIwMDcNCi0vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2J0bXVwLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2NvbmNlcHRzL2N1ZGRpLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvLi4vb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdGFza3MvdHRvbWNhdHNlcnYuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGRpc2Nvdi5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c3RvcGRvd24uaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9yZWYvcndzcHJlZi5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyLy4uL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvdGFza3MvdHdzZGx2YWwuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90d3NpY29tcGx5Lmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvLi4vb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdGFza3MvdHNrbHdzZGxhLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGwuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NpbndzYS5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yd3NkbC5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyLy4uL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvdGFza3MvdG1vbml0b3IuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGdlbndzaWwuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci90YXNrcy90c2FtcGFwcGEuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jc29hcC5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyLy4uL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dGVzdHdzZGwuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90b3ZlcndzLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzc3RhbmRhcmRzLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvLi4vb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvY29uY2VwdHMvY2F4aXN0b3Zlci5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2NqYXhycGMuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3Npb3Zlci5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyLy4uL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci9jb25jZXB0cy9jd3NkbHVkLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvLi4vb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci90YXNrcy90d3NpdmFsLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaWwuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci90YXNrcy90d3NiZWFuYS5odG1sPTANCi0vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lsdWQuaHRtbD0wDQotL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9janNyMTA5Lmh0bWw9MA0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2luZGV4L3NlZ21lbnRzIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvaW5kZXgvc2VnbWVudHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5YjVkMGMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvaW5kZXgvc2VnbWVudHMKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9teXBsdWdpbi54bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9teXBsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmOGIyMGIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvbXlwbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLTw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj8+IAotPCEtLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIC0tPgotPHBsdWdpbj4KLSAgCi0gIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj4KLSAgICAgICA8dG9jIGZpbGU9IndlYnNlcnZpY2VfdG9jLnhtbCIgLz4KLSAgICAgICA8aW5kZXggcGF0aD0iaW5kZXgvIi8+Ci0gICA8L2V4dGVuc2lvbj4KLSAgICAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAuaW5kZXgiPgotICAgICAgPGluZGV4IGZpbGU9Im9yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlcmluZGV4LnhtbCIvPgotICAgICAgPC9leHRlbnNpb24+Ci08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIubWFwbGlzdCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci5tYXBsaXN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjY2OTkxLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci5tYXBsaXN0CisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08bWFwbGlzdCB2ZXJzaW9uPSIzLjYuMiI+Ci0gIDxuYXY+Ci0gICAgPG1hcCBmaWxlPSJ3ZWJzZXJ2aWNlX3RvYy5kaXRhbWFwIi8+Ci0gIDwvbmF2PgotICA8bGluaz4KLSAgICA8bWFwIGZpbGU9IndlYnNlcnZpY2VfdG9jLmRpdGFtYXAiLz4KLSAgPC9saW5rPgotPC9tYXBsaXN0PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyaW5kZXguaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlcmluZGV4Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmOTUwNWUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyaW5kZXguaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE2NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIGh0bWwKLSAgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSIoQykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDA3IiAvPgotPG1ldGEgbmFtZT0ic2VjdXJpdHkiIGNvbnRlbnQ9InB1YmxpYyIgLz4KLTxtZXRhIG5hbWU9IlJvYm90cyIgY29udGVudD0iaW5kZXgsZm9sbG93IiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBuYW1lPSJEQy5Gb3JtYXQiIGNvbnRlbnQ9IlhIVE1MIiAvPgotPCEtLSBBbGwgcmlnaHRzIHJlc2VydmVkLiBMaWNlbnNlZCBNYXRlcmlhbHMgUHJvcGVydHkgb2YgSUJNIC0tPgotPCEtLSBVUyBHb3Zlcm5tZW50IFVzZXJzIFJlc3RyaWN0ZWQgUmlnaHRzIC0tPgotPCEtLSBVc2UsIGR1cGxpY2F0aW9uIG9yIGRpc2Nsb3N1cmUgcmVzdHJpY3RlZCBieSAtLT4KLTwhLS0gR1NBIEFEUCBTY2hlZHVsZSBDb250cmFjdCB3aXRoIElCTSBDb3JwLiAtLT4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9ImlibWRpdGEuY3NzIiAvPgotPHRpdGxlPkluZGV4PC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPGgxPkluZGV4PC9oMT4KLTxhIG5hbWU9IklEWDBfNDIiIGhyZWY9IiNJRFgxXzQyIj5CPC9hPgotPGEgbmFtZT0iSURYMF80OSIgaHJlZj0iI0lEWDFfNDkiPkk8L2E+Ci08YSBuYW1lPSJJRFgwXzRBIiBocmVmPSIjSURYMV80QSI+SjwvYT4KLTxhIG5hbWU9IklEWDBfNTAiIGhyZWY9IiNJRFgxXzUwIj5QPC9hPgotPGEgbmFtZT0iSURYMF81MyIgaHJlZj0iI0lEWDFfNTMiPlM8L2E+Ci08YSBuYW1lPSJJRFgwXzU0IiBocmVmPSIjSURYMV81NCI+VDwvYT4KLTxhIG5hbWU9IklEWDBfNTUiIGhyZWY9IiNJRFgxXzU1Ij5VPC9hPgotPGEgbmFtZT0iSURYMF81NyIgaHJlZj0iI0lEWDFfNTciPlc8L2E+Ci08aHI+PC9ocj4KLTxzdHJvbmc+PGEgbmFtZT0iSURYMV80MiIgaHJlZj0iI0lEWDBfNDIiPkI8L2E+PC9zdHJvbmc+Ci08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+Ym90dG9tLXVwIFdlYiBzZXJ2aWNlcwotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPjxhIGhyZWY9ImNvbmNlcHRzL2N3c2J0bXVwLmh0bWwjY3JlYXRpbmdib3R0b20tdXB3ZWJzZXJ2aWNlcyI+b3ZlcnZpZXc8L2E+Ci08L2xpPgotPC91bD4KLTwvbGk+Ci08L3VsPgotPHN0cm9uZz48YSBuYW1lPSJJRFgxXzQ5IiBocmVmPSIjSURYMF80OSI+STwvYT48L3N0cm9uZz4KLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT5pbnRlcm9wZXJhYmlsaXR5Ci08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+PGEgaHJlZj0iY29uY2VwdHMvY3dzaW92ZXIuaHRtbCNjd3Npb3ZlciI+V2ViIHNlcnZpY2UgdHJhZmZpYyBjb21wbGlhbmNlPC9hPgotPC9saT4KLTwvdWw+Ci08L2xpPgotPC91bD4KLTxzdHJvbmc+PGEgbmFtZT0iSURYMV80QSIgaHJlZj0iI0lEWDBfNEEiPko8L2E+PC9zdHJvbmc+Ci08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+SkFYLVJQQwotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPjxhIGhyZWY9ImNvbmNlcHRzL2NqYXhycGMuaHRtbCNjamF4cnBjIj5XZWIgc2VydmljZXM8L2E+Ci08L2xpPgotPC91bD4KLTwvbGk+Ci08bGk+PGEgaHJlZj0iY29uY2VwdHMvY2pzcjEwOS5odG1sI2Nqc3IxMDkiPkpTUiAxMDkgSmF2YSBzcGVjaWZpY2F0aW9uPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJjb25jZXB0cy9janNyMTA5Lmh0bWwjY2pzcjEwOSI+SlNSIDkyMSBKYXZhIHNwZWNpZmljYXRpb248L2E+Ci08L2xpPgotPC91bD4KLTxzdHJvbmc+PGEgbmFtZT0iSURYMV81MCIgaHJlZj0iI0lEWDBfNTAiPlA8L2E+PC9zdHJvbmc+Ci08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+cHJlZmVyZW5jZXMKLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT48YSBocmVmPSJyZWYvcndzcHJlZi5odG1sI3J3c3ByZWYiPldlYiBzZXJ2aWNlczwvYT4KLTwvbGk+Ci08L3VsPgotPC9saT4KLTwvdWw+Ci08c3Ryb25nPjxhIG5hbWU9IklEWDFfNTMiIGhyZWY9IiNJRFgwXzUzIj5TPC9hPjwvc3Ryb25nPgotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPlNPQVAKLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT48YSBocmVmPSJjb25jZXB0cy9jc29hcC5odG1sI2Nzb2FwIj5vdmVydmlldzwvYT4KLTwvbGk+Ci08L3VsPgotPC9saT4KLTwvdWw+Ci08c3Ryb25nPjxhIG5hbWU9IklEWDFfNTQiIGhyZWY9IiNJRFgwXzU0Ij5UPC9hPjwvc3Ryb25nPgotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPnRvcC1kb3duIFdlYiBzZXJ2aWNlcwotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPjxhIGhyZWY9ImNvbmNlcHRzL2N3c3RvcGRvd24uaHRtbCNjcmVhdGluZ3RvcC1kb3dud2Vic2VydmljZXMiPmNyZWF0aW5nPC9hPgotPC9saT4KLTwvdWw+Ci08L2xpPgotPC91bD4KLTxzdHJvbmc+PGEgbmFtZT0iSURYMV81NSIgaHJlZj0iI0lEWDBfNTUiPlU8L2E+PC9zdHJvbmc+Ci08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+VURESQotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPjxhIGhyZWY9ImNvbmNlcHRzL2N3c2lsdWQuaHRtbCNjd3NpbHVkIj5yZWxhdGlvbnNoaXAgd2l0aCBXU0lMPC9hPgotPC9saT4KLTwvdWw+Ci08L2xpPgotPC91bD4KLTxzdHJvbmc+PGEgbmFtZT0iSURYMV81NyIgaHJlZj0iI0lEWDBfNTciPlc8L2E+PC9zdHJvbmc+Ci08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+V2ViIHNlcnZpY2VzCi08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+PGEgaHJlZj0iY29uY2VwdHMvY3dzYnRtdXAuaHRtbCNjcmVhdGluZ2JvdHRvbS11cHdlYnNlcnZpY2VzIj5ib3R0b20tdXA8L2E+Ci08L2xpPgotPGxpPmNyZWF0aW5nCi08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+PGEgaHJlZj0idGFza3MvdG92ZXJ3cy5odG1sI3RvdmVyd3MiPm92ZXJ2aWV3PC9hPgotPC9saT4KLTwvdWw+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3R3c2ljb21wbHkuaHRtbCN0d3NpY29tcGx5Ij5pbnRlcm9wZXJhYmlsaXR5IGNvbXBsaWFuY2U8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9ImNvbmNlcHRzL2Nqc3IxMDkuaHRtbCNjanNyMTA5Ij5KYXZhIHNwZWNpZmljYXRpb24gcmVxdWVzdHM8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9ImNvbmNlcHRzL2NqYXhycGMuaHRtbCNjamF4cnBjIj5KQVgtUlBDPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJjb25jZXB0cy9jd3MuaHRtbCNjd3MiPm92ZXJ2aWV3PC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJyZWYvcndzcHJlZi5odG1sI3J3c3ByZWYiPnByZWZlcmVuY2VzPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJjb25jZXB0cy9jc29hcC5odG1sI2Nzb2FwIj5TT0FQPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJjb25jZXB0cy9jd3NzdGFuZGFyZHMuaHRtbCN3ZWJzZXJ2aWNlc3N0YW5kYXJkcyI+c3RhbmRhcmRzPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJjb25jZXB0cy9jd3NpbndzYS5odG1sI2N3c2lud3NhIj50b29scyBvdmVydmlldzwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0iY29uY2VwdHMvY3dzdG9wZG93bi5odG1sI2NyZWF0aW5ndG9wLWRvd253ZWJzZXJ2aWNlcyI+dG9wLWRvd248L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9ImNvbmNlcHRzL2N3c2RsLmh0bWwjY3dzZGwiPldTREw8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InJlZi9yd3NkbC5odG1sI3J3c2RsIj5XU0RMIHJlZmVyZW5jZTwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0iY29uY2VwdHMvY3dzaWwuaHRtbCNjd3NpbCI+V1NJTDwvYT4KLTwvbGk+Ci08L3VsPgotPC9saT4KLTxsaT5XZWIgc2VydmljZXMgaW50ZXJvcGVyYWJpbGl0eQotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPjxhIGhyZWY9ImNvbmNlcHRzL2N3c2lvdmVyLmh0bWwjY3dzaW92ZXIiPnRyYWZmaWMgY29tcGxpYW5jZTwvYT4KLTwvbGk+Ci08L3VsPgotPC9saT4KLTxsaT5XU0RMCi08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+PGEgaHJlZj0iY29uY2VwdHMvY3dzZGwuaHRtbCNjd3NkbCI+b3ZlcnZpZXc8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InJlZi9yd3NkbC5odG1sI3J3c2RsIj5yZWZlcmVuY2U8L2E+Ci08L2xpPgotPC91bD4KLTwvbGk+Ci08bGk+V1NJCi08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+PGEgaHJlZj0idGFza3MvdHdzaWNvbXBseS5odG1sI3R3c2ljb21wbHkiPnNldHRpbmcgY29tcGxpYW5jZTwvYT4KLTwvbGk+Ci08L3VsPgotPC9saT4KLTxsaT5XU0lMCi08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+PGEgaHJlZj0iY29uY2VwdHMvY3dzaWwuaHRtbCNjd3NpbCI+b3ZlcnZpZXc8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9ImNvbmNlcHRzL2N3c2lsdWQuaHRtbCNjd3NpbHVkIj5yZWxhdGlvbnNoaXAgd2l0aCBVRERJPC9hPgotPC9saT4KLTwvdWw+Ci08L2xpPgotPC91bD4KLTwvYm9keT48L2h0bWw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXJpbmRleC54bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXJpbmRleC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkNjY3M2EuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyaW5kZXgueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTE2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08aW5kZXg+Ci0gIDxlbnRyeSBrZXl3b3JkPSJXZWIgc2VydmljZXMiPgotICAgIDxlbnRyeSBrZXl3b3JkPSJvdmVydmlldyI+Ci0gICAgICA8dG9waWMgaHJlZj0iY29uY2VwdHMvY3dzLmh0bWwjY3dzIiB0aXRsZT0iV2ViIHNlcnZpY2VzIG92ZXJ2aWV3Ii8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0ic3RhbmRhcmRzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJjb25jZXB0cy9jd3NzdGFuZGFyZHMuaHRtbCN3ZWJzZXJ2aWNlc3N0YW5kYXJkcyIgdGl0bGU9IldlYiBzZXJ2aWNlcyBzdGFuZGFyZHMiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJXU0RMIj4KLSAgICAgIDx0b3BpYyBocmVmPSJjb25jZXB0cy9jd3NkbC5odG1sI2N3c2RsIiB0aXRsZT0iV2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9IldTREwgcmVmZXJlbmNlIj4KLSAgICAgIDx0b3BpYyBocmVmPSJyZWYvcndzZGwuaHRtbCNyd3NkbCIgdGl0bGU9IldlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBMYW5ndWFnZSAoV1NETCkgcmVmZXJlbmNlIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iU09BUCI+Ci0gICAgICA8dG9waWMgaHJlZj0iY29uY2VwdHMvY3NvYXAuaHRtbCNjc29hcCIgdGl0bGU9IlNPQVAiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJXU0lMIj4KLSAgICAgIDx0b3BpYyBocmVmPSJjb25jZXB0cy9jd3NpbC5odG1sI2N3c2lsIiB0aXRsZT0iV2ViIFNlcnZpY2VzIEluc3BlY3Rpb24gTGFuZ3VhZ2UgKFdTSUwpIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iSkFYLVJQQyI+Ci0gICAgICA8dG9waWMgaHJlZj0iY29uY2VwdHMvY2pheHJwYy5odG1sI2NqYXhycGMiIHRpdGxlPSJKQVgtUlBDIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iSmF2YSBzcGVjaWZpY2F0aW9uIHJlcXVlc3RzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJjb25jZXB0cy9janNyMTA5Lmh0bWwjY2pzcjEwOSIgdGl0bGU9IkpTUiAxMDkgYW5kIEpTUiA5MjEtIEltcGxlbWVudGluZyBFbnRlcnByaXNlIFdlYiBzZXJ2aWNlcyIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InRvb2xzIG92ZXJ2aWV3Ij4KLSAgICAgIDx0b3BpYyBocmVmPSJjb25jZXB0cy9jd3NpbndzYS5odG1sI2N3c2lud3NhIiB0aXRsZT0iVG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InByZWZlcmVuY2VzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJyZWYvcndzcHJlZi5odG1sI3J3c3ByZWYiIHRpdGxlPSJXZWIgc2VydmljZXMgcHJlZmVyZW5jZXMiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJpbnRlcm9wZXJhYmlsaXR5IGNvbXBsaWFuY2UiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3R3c2ljb21wbHkuaHRtbCN0d3NpY29tcGx5IiB0aXRsZT0iU2V0dGluZyB0aGUgbGV2ZWwgb2YgV1MtSSBjb21wbGlhbmNlIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iY3JlYXRpbmciPgotICAgICAgPGVudHJ5IGtleXdvcmQ9Im92ZXJ2aWV3Ij4KLSAgICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RvdmVyd3MuaHRtbCN0b3ZlcndzIiB0aXRsZT0iRGV2ZWxvcGluZyBXZWIgc2VydmljZXMiLz4KLSAgICAgIDwvZW50cnk+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0idG9wLWRvd24iPgotICAgICAgPHRvcGljIGhyZWY9ImNvbmNlcHRzL2N3c3RvcGRvd24uaHRtbCNjcmVhdGluZ3RvcC1kb3dud2Vic2VydmljZXMiIHRpdGxlPSJDcmVhdGluZyB0b3AtZG93biBXZWIgc2VydmljZXMiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJib3R0b20tdXAiPgotICAgICAgPHRvcGljIGhyZWY9ImNvbmNlcHRzL2N3c2J0bXVwLmh0bWwjY3JlYXRpbmdib3R0b20tdXB3ZWJzZXJ2aWNlcyIgdGl0bGU9IkNyZWF0aW5nIGJvdHRvbS11cCBXZWIgc2VydmljZXMiLz4KLSAgICA8L2VudHJ5PgotICA8L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0iV1NETCI+Ci0gICAgPGVudHJ5IGtleXdvcmQ9Im92ZXJ2aWV3Ij4KLSAgICAgIDx0b3BpYyBocmVmPSJjb25jZXB0cy9jd3NkbC5odG1sI2N3c2RsIiB0aXRsZT0iV2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InJlZmVyZW5jZSI+Ci0gICAgICA8dG9waWMgaHJlZj0icmVmL3J3c2RsLmh0bWwjcndzZGwiIHRpdGxlPSJXZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpIHJlZmVyZW5jZSIvPgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJTT0FQIj4KLSAgICA8ZW50cnkga2V5d29yZD0ib3ZlcnZpZXciPgotICAgICAgPHRvcGljIGhyZWY9ImNvbmNlcHRzL2Nzb2FwLmh0bWwjY3NvYXAiIHRpdGxlPSJTT0FQIi8+Ci0gICAgPC9lbnRyeT4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9IldTSUwiPgotICAgIDxlbnRyeSBrZXl3b3JkPSJvdmVydmlldyI+Ci0gICAgICA8dG9waWMgaHJlZj0iY29uY2VwdHMvY3dzaWwuaHRtbCNjd3NpbCIgdGl0bGU9IldlYiBTZXJ2aWNlcyBJbnNwZWN0aW9uIExhbmd1YWdlIChXU0lMKSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InJlbGF0aW9uc2hpcCB3aXRoIFVEREkiPgotICAgICAgPHRvcGljIGhyZWY9ImNvbmNlcHRzL2N3c2lsdWQuaHRtbCNjd3NpbHVkIiB0aXRsZT0iUmVsYXRpb25zaGlwIGJldHdlZW4gVURESSBhbmQgV1NJTCIvPgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJVRERJIj4KLSAgICA8ZW50cnkga2V5d29yZD0icmVsYXRpb25zaGlwIHdpdGggV1NJTCI+Ci0gICAgICA8dG9waWMgaHJlZj0iY29uY2VwdHMvY3dzaWx1ZC5odG1sI2N3c2lsdWQiIHRpdGxlPSJSZWxhdGlvbnNoaXAgYmV0d2VlbiBVRERJIGFuZCBXU0lMIi8+Ci0gICAgPC9lbnRyeT4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9IkpBWC1SUEMiPgotICAgIDxlbnRyeSBrZXl3b3JkPSJXZWIgc2VydmljZXMiPgotICAgICAgPHRvcGljIGhyZWY9ImNvbmNlcHRzL2NqYXhycGMuaHRtbCNjamF4cnBjIiB0aXRsZT0iSkFYLVJQQyIvPgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJKU1IgMTA5IEphdmEgc3BlY2lmaWNhdGlvbiI+Ci0gICAgPHRvcGljIGhyZWY9ImNvbmNlcHRzL2Nqc3IxMDkuaHRtbCNjanNyMTA5IiB0aXRsZT0iSlNSIDEwOSBhbmQgSlNSIDkyMS0gSW1wbGVtZW50aW5nIEVudGVycHJpc2UgV2ViIHNlcnZpY2VzIi8+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJKU1IgOTIxIEphdmEgc3BlY2lmaWNhdGlvbiI+Ci0gICAgPHRvcGljIGhyZWY9ImNvbmNlcHRzL2Nqc3IxMDkuaHRtbCNjanNyMTA5IiB0aXRsZT0iSlNSIDEwOSBhbmQgSlNSIDkyMS0gSW1wbGVtZW50aW5nIEVudGVycHJpc2UgV2ViIHNlcnZpY2VzIi8+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJwcmVmZXJlbmNlcyI+Ci0gICAgPGVudHJ5IGtleXdvcmQ9IldlYiBzZXJ2aWNlcyI+Ci0gICAgICA8dG9waWMgaHJlZj0icmVmL3J3c3ByZWYuaHRtbCNyd3NwcmVmIiB0aXRsZT0iV2ViIHNlcnZpY2VzIHByZWZlcmVuY2VzIi8+Ci0gICAgPC9lbnRyeT4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9IldlYiBzZXJ2aWNlcyBpbnRlcm9wZXJhYmlsaXR5Ij4KLSAgICA8ZW50cnkga2V5d29yZD0idHJhZmZpYyBjb21wbGlhbmNlIj4KLSAgICAgIDx0b3BpYyBocmVmPSJjb25jZXB0cy9jd3Npb3Zlci5odG1sI2N3c2lvdmVyIiB0aXRsZT0iV2ViIHNlcnZpY2VzIGludGVyb3BlcmFiaWxpdHkgKFdTLUkpIi8+Ci0gICAgPC9lbnRyeT4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9ImludGVyb3BlcmFiaWxpdHkiPgotICAgIDxlbnRyeSBrZXl3b3JkPSJXZWIgc2VydmljZSB0cmFmZmljIGNvbXBsaWFuY2UiPgotICAgICAgPHRvcGljIGhyZWY9ImNvbmNlcHRzL2N3c2lvdmVyLmh0bWwjY3dzaW92ZXIiIHRpdGxlPSJXZWIgc2VydmljZXMgaW50ZXJvcGVyYWJpbGl0eSAoV1MtSSkiLz4KLSAgICA8L2VudHJ5PgotICA8L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0iV1NJIj4KLSAgICA8ZW50cnkga2V5d29yZD0ic2V0dGluZyBjb21wbGlhbmNlIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90d3NpY29tcGx5Lmh0bWwjdHdzaWNvbXBseSIgdGl0bGU9IlNldHRpbmcgdGhlIGxldmVsIG9mIFdTLUkgY29tcGxpYW5jZSIvPgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJ0b3AtZG93biBXZWIgc2VydmljZXMiPgotICAgIDxlbnRyeSBrZXl3b3JkPSJjcmVhdGluZyI+Ci0gICAgICA8dG9waWMgaHJlZj0iY29uY2VwdHMvY3dzdG9wZG93bi5odG1sI2NyZWF0aW5ndG9wLWRvd253ZWJzZXJ2aWNlcyIgdGl0bGU9IkNyZWF0aW5nIHRvcC1kb3duIFdlYiBzZXJ2aWNlcyIvPgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJib3R0b20tdXAgV2ViIHNlcnZpY2VzIj4KLSAgICA8ZW50cnkga2V5d29yZD0ib3ZlcnZpZXciPgotICAgICAgPHRvcGljIGhyZWY9ImNvbmNlcHRzL2N3c2J0bXVwLmh0bWwjY3JlYXRpbmdib3R0b20tdXB3ZWJzZXJ2aWNlcyIgdGl0bGU9IkNyZWF0aW5nIGJvdHRvbS11cCBXZWIgc2VydmljZXMiLz4KLSAgICA8L2VudHJ5PgotICA8L2VudHJ5PgotPC9pbmRleD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9wbHVnaW4ucHJvcGVydGllcyBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyN2NjN2FhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgTkxTX01FU1NBR0VGT1JNQVRfVkFSIAotIyBOTFNfRU5DT0RJTkc9VVRGLTggCi0KLXBsdWdpbk5hbWUgICAgID0gV2ViIFNlcnZpY2VzIFVJCi1wbHVnaW5Qcm92aWRlciA9IEVjbGlwc2Uub3JnCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9wbHVnaW4ueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTIyYWNkMC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLTw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj8+IAotPCEtLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIC0tPgotPHBsdWdpbj4KLSAgCi0gIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj4KLSAgICAgICA8dG9jIGZpbGU9IndlYnNlcnZpY2VfdG9jLnhtbCIgLz4KLSAgICAgICA8aW5kZXggcGF0aD0iaW5kZXgvIi8+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAuaW5kZXgiPgotICAgICAgPGluZGV4IGZpbGU9Im9yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlcmluZGV4LnhtbCIvPgotICAgICAgPC9leHRlbnNpb24+Ci08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9yZWYvcndzZGwuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yd3NkbC5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZmNlYjdkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yd3NkbC5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+Ci08IURPQ1RZUEUgcmVmZXJlbmNlIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFJlZmVyZW5jZS8vRU4iCi0gInJlZmVyZW5jZS5kdGQiPgotPHJlZmVyZW5jZSBpZD0icndzZGwiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+V2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKSByZWZlcmVuY2U8L3RpdGxlPgotPHNob3J0ZGVzYz5BIFdTREwgZG9jdW1lbnQgZGVmaW5lcyBzZXJ2aWNlcyBhcyBjb2xsZWN0aW9ucyBvZiBuZXR3b3JrIGVuZHBvaW50cywKLW9yIHBvcnRzLiBJbiBXU0RMLCB0aGUgYWJzdHJhY3QgZGVmaW5pdGlvbiBvZiBlbmRwb2ludHMgYW5kIG1lc3NhZ2VzIGlzIHNlcGFyYXRlZAotZnJvbSB0aGVpciBjb25jcmV0ZSBuZXR3b3JrIGRlcGxveW1lbnQgb3IgZGF0YSBmb3JtYXQgYmluZGluZ3MuIFRoaXMgYWxsb3dzCi10aGUgcmV1c2Ugb2YgYWJzdHJhY3QgZGVmaW5pdGlvbnM6IG1lc3NhZ2VzLCB3aGljaCBhcmUgYWJzdHJhY3QgZGVzY3JpcHRpb25zCi1vZiB0aGUgZGF0YSBiZWluZyBleGNoYW5nZWQsIGFuZCBwb3J0IHR5cGVzIHdoaWNoIGFyZSBhYnN0cmFjdCBjb2xsZWN0aW9ucwotb2Ygb3BlcmF0aW9ucy4gPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPldTREw8aW5kZXh0ZXJtPnJlZmVyZW5jZTwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjxpbmRleHRlcm0+V2ViCi1zZXJ2aWNlczxpbmRleHRlcm0+V1NETCByZWZlcmVuY2U8L2luZGV4dGVybT48L2luZGV4dGVybT48L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTxyZWZib2R5PgotPHNlY3Rpb24+PHA+VGhlIGNvbmNyZXRlIHByb3RvY29sIGFuZCBkYXRhIGZvcm1hdCBzcGVjaWZpY2F0aW9ucyBmb3IgYSBwYXJ0aWN1bGFyCi1wb3J0IHR5cGUgY29uc3RpdHV0ZXMgYSByZXVzYWJsZSBiaW5kaW5nLiBBIHBvcnQgaXMgZGVmaW5lZCBieSBhc3NvY2lhdGluZwotYSBuZXR3b3JrIGFkZHJlc3Mgd2l0aCBhIHJldXNhYmxlIGJpbmRpbmcsIGFuZCBhIGNvbGxlY3Rpb24gb2YgcG9ydHMgZGVmaW5lCi1hIHNlcnZpY2UuIEhlbmNlLCBhIFdTREwgZG9jdW1lbnQgdXNlcyB0aGUgZm9sbG93aW5nIGVsZW1lbnRzIGluIHRoZSBkZWZpbml0aW9uCi1vZiBuZXR3b3JrIHNlcnZpY2VzOjwvcD48dWw+Ci08bGk+IDx1aWNvbnRyb2w+VHlwZXM8L3VpY29udHJvbD46IGEgY29udGFpbmVyIGZvciBkYXRhIHR5cGUgZGVmaW5pdGlvbnMgdXNpbmcKLXNvbWUgdHlwZSBzeXN0ZW0gKHN1Y2ggYXMgWFNEKS48L2xpPgotPGxpPiA8dWljb250cm9sPk1lc3NhZ2U8L3VpY29udHJvbD46IGFuIGFic3RyYWN0LCB0eXBlZCBkZWZpbml0aW9uIG9mIHRoZQotZGF0YSBiZWluZyBjb21tdW5pY2F0ZWQuPC9saT4KLTxsaT4gPHVpY29udHJvbD5PcGVyYXRpb248L3VpY29udHJvbD46IGFuIGFic3RyYWN0IGRlc2NyaXB0aW9uIG9mIGFuIGFjdGlvbgotc3VwcG9ydGVkIGJ5IHRoZSBzZXJ2aWNlLjwvbGk+Ci08bGk+IDx1aWNvbnRyb2w+UG9ydCBUeXBlPC91aWNvbnRyb2w+OiBhbiBhYnN0cmFjdCBzZXQgb2Ygb3BlcmF0aW9ucyBzdXBwb3J0ZWQKLWJ5IG9uZSBvciBtb3JlIGVuZHBvaW50cy48L2xpPgotPGxpPiA8dWljb250cm9sPkJpbmRpbmc8L3VpY29udHJvbD46IGEgY29uY3JldGUgcHJvdG9jb2wgYW5kIGRhdGEgZm9ybWF0IHNwZWNpZmljYXRpb24KLWZvciBhIHBhcnRpY3VsYXIgcG9ydCB0eXBlLiBUaGUgYmluZGluZyBpcyB1c3VhbGx5IFNPQVAgYW5kIHRoZSBlbmNvZGluZyBhbmQKLWRhdGEgZm9ybWF0dGluZyByZWd1bGF0aW9ucyB1c2VkIChhbHNvIGtub3duIGFzIHRoZSBzdHlsZSkgaXMgdXN1YWxseSBsaXRlcmFsCi0odGhpcyBpbmNsdWRlcyBkb2N1bWVudC9saXRlcmFsLCBhbmQgc29tZXRpbWVzIHJwYy9saXRlcmFsKS48L2xpPgotPGxpPiA8dWljb250cm9sPlBvcnQ8L3VpY29udHJvbD46IGEgc2luZ2xlIGVuZHBvaW50IGRlZmluZWQgYXMgYSBjb21iaW5hdGlvbgotb2YgYSBiaW5kaW5nIGFuZCBhIG5ldHdvcmsgYWRkcmVzcy48L2xpPgotPGxpPiA8dWljb250cm9sPlNlcnZpY2U8L3VpY29udHJvbD46IGEgY29sbGVjdGlvbiBvZiByZWxhdGVkIGVuZHBvaW50cy48L2xpPgotPC91bD48cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBXU0RMLCByZWZlciB0byAgPC9wPjxwPjx4cmVmIGZvcm1hdD0iaHRtbCIKLWhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3dzZGwiIHNjb3BlPSJleHRlcm5hbCI+d3d3LnczLm9yZy9UUi93c2RsPC94cmVmPjwvcD48cD5UaGUKLXZhcmlvdXMgV1NETCBlbGVtZW50cyBjYW4gYmUgc3RydWN0dXJlZCBpbiBtYW55IHdheXMuIEl0IGNhbiBiZSBpbiBvbmUgc2luZ2xlCi1XU0RMIGZpbGUgb3IgaW4gbXVsaXRwbGUgV1NETCBmaWxlcy48L3A+PC9zZWN0aW9uPgotPC9yZWZib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgQ29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vY29uY2VwdHMvY3dzLmRpdGEiPjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2RsLmRpdGEiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgVGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vdGFza3MvdG92ZXJ3cy5kaXRhIiBzY29wZT0icGVlciI+PGxpbmt0ZXh0PiBEZXZlbG9waW5nIFdlYgotc2VydmljZXM8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90dWRkaWV4cC5kaXRhIgotc2NvcGU9InBlZXIiPjxsaW5rdGV4dD4gVXNpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlcjwvbGlua3RleHQ+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvcmVmZXJlbmNlPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvcmVmL3J3c2RsLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9yZWYvcndzZGwuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmFkZTNmNi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9yZWYvcndzZGwuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA3IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJyZWZlcmVuY2UiIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iV2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKSByZWZlcmVuY2UiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iQSBXU0RMIGRvY3VtZW50IGRlZmluZXMgc2VydmljZXMgYXMgY29sbGVjdGlvbnMgb2YgbmV0d29yayBlbmRwb2ludHMsIG9yIHBvcnRzLiBJbiBXU0RMLCB0aGUgYWJzdHJhY3QgZGVmaW5pdGlvbiBvZiBlbmRwb2ludHMgYW5kIG1lc3NhZ2VzIGlzIHNlcGFyYXRlZCBmcm9tIHRoZWlyIGNvbmNyZXRlIG5ldHdvcmsgZGVwbG95bWVudCBvciBkYXRhIGZvcm1hdCBiaW5kaW5ncy4gVGhpcyBhbGxvd3MgdGhlIHJldXNlIG9mIGFic3RyYWN0IGRlZmluaXRpb25zOiBtZXNzYWdlcywgd2hpY2ggYXJlIGFic3RyYWN0IGRlc2NyaXB0aW9ucyBvZiB0aGUgZGF0YSBiZWluZyBleGNoYW5nZWQsIGFuZCBwb3J0IHR5cGVzIHdoaWNoIGFyZSBhYnN0cmFjdCBjb2xsZWN0aW9ucyBvZiBvcGVyYXRpb25zLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJBIFdTREwgZG9jdW1lbnQgZGVmaW5lcyBzZXJ2aWNlcyBhcyBjb2xsZWN0aW9ucyBvZiBuZXR3b3JrIGVuZHBvaW50cywgb3IgcG9ydHMuIEluIFdTREwsIHRoZSBhYnN0cmFjdCBkZWZpbml0aW9uIG9mIGVuZHBvaW50cyBhbmQgbWVzc2FnZXMgaXMgc2VwYXJhdGVkIGZyb20gdGhlaXIgY29uY3JldGUgbmV0d29yayBkZXBsb3ltZW50IG9yIGRhdGEgZm9ybWF0IGJpbmRpbmdzLiBUaGlzIGFsbG93cyB0aGUgcmV1c2Ugb2YgYWJzdHJhY3QgZGVmaW5pdGlvbnM6IG1lc3NhZ2VzLCB3aGljaCBhcmUgYWJzdHJhY3QgZGVzY3JpcHRpb25zIG9mIHRoZSBkYXRhIGJlaW5nIGV4Y2hhbmdlZCwgYW5kIHBvcnQgdHlwZXMgd2hpY2ggYXJlIGFic3RyYWN0IGNvbGxlY3Rpb25zIG9mIG9wZXJhdGlvbnMuIiAvPgotPG1ldGEgY29udGVudD0iV1NETCwgcmVmZXJlbmNlLCBXZWIgc2VydmljZXMsIFdTREwgcmVmZXJlbmNlIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV1NETCwgcmVmZXJlbmNlLCBXZWIgc2VydmljZXMsIFdTREwgcmVmZXJlbmNlIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3dzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N3c2RsLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3Rhc2tzL3RvdmVyd3MuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R1ZGRpZXhwLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0icndzZGwiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5XZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpIHJlZmVyZW5jZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0icndzZGwiPjxhIG5hbWU9InJ3c2RsIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5XZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpIHJlZmVyZW5jZTwvaDE+Ci0KLQotCi08ZGl2PjxwPkEgV1NETCBkb2N1bWVudCBkZWZpbmVzIHNlcnZpY2VzIGFzIGNvbGxlY3Rpb25zIG9mIG5ldHdvcmsgZW5kcG9pbnRzLAotb3IgcG9ydHMuIEluIFdTREwsIHRoZSBhYnN0cmFjdCBkZWZpbml0aW9uIG9mIGVuZHBvaW50cyBhbmQgbWVzc2FnZXMgaXMgc2VwYXJhdGVkCi1mcm9tIHRoZWlyIGNvbmNyZXRlIG5ldHdvcmsgZGVwbG95bWVudCBvciBkYXRhIGZvcm1hdCBiaW5kaW5ncy4gVGhpcyBhbGxvd3MKLXRoZSByZXVzZSBvZiBhYnN0cmFjdCBkZWZpbml0aW9uczogbWVzc2FnZXMsIHdoaWNoIGFyZSBhYnN0cmFjdCBkZXNjcmlwdGlvbnMKLW9mIHRoZSBkYXRhIGJlaW5nIGV4Y2hhbmdlZCwgYW5kIHBvcnQgdHlwZXMgd2hpY2ggYXJlIGFic3RyYWN0IGNvbGxlY3Rpb25zCi1vZiBvcGVyYXRpb25zLiA8L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRoZSBjb25jcmV0ZSBwcm90b2NvbCBhbmQgZGF0YSBmb3JtYXQgc3BlY2lmaWNhdGlvbnMgZm9yIGEgcGFydGljdWxhcgotcG9ydCB0eXBlIGNvbnN0aXR1dGVzIGEgcmV1c2FibGUgYmluZGluZy4gQSBwb3J0IGlzIGRlZmluZWQgYnkgYXNzb2NpYXRpbmcKLWEgbmV0d29yayBhZGRyZXNzIHdpdGggYSByZXVzYWJsZSBiaW5kaW5nLCBhbmQgYSBjb2xsZWN0aW9uIG9mIHBvcnRzIGRlZmluZQotYSBzZXJ2aWNlLiBIZW5jZSwgYSBXU0RMIGRvY3VtZW50IHVzZXMgdGhlIGZvbGxvd2luZyBlbGVtZW50cyBpbiB0aGUgZGVmaW5pdGlvbgotb2YgbmV0d29yayBzZXJ2aWNlczo8L3A+Ci08dWw+Ci08bGk+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlR5cGVzPC9zcGFuPjogYSBjb250YWluZXIgZm9yIGRhdGEgdHlwZSBkZWZpbml0aW9ucyB1c2luZwotc29tZSB0eXBlIHN5c3RlbSAoc3VjaCBhcyBYU0QpLjwvbGk+Ci0KLTxsaT4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+TWVzc2FnZTwvc3Bhbj46IGFuIGFic3RyYWN0LCB0eXBlZCBkZWZpbml0aW9uIG9mIHRoZQotZGF0YSBiZWluZyBjb21tdW5pY2F0ZWQuPC9saT4KLQotPGxpPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5PcGVyYXRpb248L3NwYW4+OiBhbiBhYnN0cmFjdCBkZXNjcmlwdGlvbiBvZiBhbiBhY3Rpb24KLXN1cHBvcnRlZCBieSB0aGUgc2VydmljZS48L2xpPgotCi08bGk+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlBvcnQgVHlwZTwvc3Bhbj46IGFuIGFic3RyYWN0IHNldCBvZiBvcGVyYXRpb25zIHN1cHBvcnRlZAotYnkgb25lIG9yIG1vcmUgZW5kcG9pbnRzLjwvbGk+Ci0KLTxsaT4gPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QmluZGluZzwvc3Bhbj46IGEgY29uY3JldGUgcHJvdG9jb2wgYW5kIGRhdGEgZm9ybWF0IHNwZWNpZmljYXRpb24KLWZvciBhIHBhcnRpY3VsYXIgcG9ydCB0eXBlLiBUaGUgYmluZGluZyBpcyB1c3VhbGx5IFNPQVAgYW5kIHRoZSBlbmNvZGluZyBhbmQKLWRhdGEgZm9ybWF0dGluZyByZWd1bGF0aW9ucyB1c2VkIChhbHNvIGtub3duIGFzIHRoZSBzdHlsZSkgaXMgdXN1YWxseSBsaXRlcmFsCi0odGhpcyBpbmNsdWRlcyBkb2N1bWVudC9saXRlcmFsLCBhbmQgc29tZXRpbWVzIHJwYy9saXRlcmFsKS48L2xpPgotCi08bGk+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlBvcnQ8L3NwYW4+OiBhIHNpbmdsZSBlbmRwb2ludCBkZWZpbmVkIGFzIGEgY29tYmluYXRpb24KLW9mIGEgYmluZGluZyBhbmQgYSBuZXR3b3JrIGFkZHJlc3MuPC9saT4KLQotPGxpPiA8c3BhbiBjbGFzcz0idWljb250cm9sIj5TZXJ2aWNlPC9zcGFuPjogYSBjb2xsZWN0aW9uIG9mIHJlbGF0ZWQgZW5kcG9pbnRzLjwvbGk+Ci0KLTwvdWw+Ci08cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBXU0RMLCByZWZlciB0byAgPC9wPgotPHA+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvd3NkbCIgdGFyZ2V0PSJfYmxhbmsiPnd3dy53My5vcmcvVFIvd3NkbDwvYT48L3A+Ci08cD5UaGUKLXZhcmlvdXMgV1NETCBlbGVtZW50cyBjYW4gYmUgc3RydWN0dXJlZCBpbiBtYW55IHdheXMuIEl0IGNhbiBiZSBpbiBvbmUgc2luZ2xlCi1XU0RMIGZpbGUgb3IgaW4gbXVsaXRwbGUgV1NETCBmaWxlcy48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIENvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzLmh0bWwiIHRpdGxlPSJBIFdlYiBzZXJ2aWNlIGlzIGEgc2V0IG9mIHJlbGF0ZWQgYXBwbGljYXRpb24gZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHByb2dyYW1tYXRpY2FsbHkgaW52b2tlZCBvdmVyIHRoZSBJbnRlcm5ldC4gQnVzaW5lc3NlcyBjYW4gZHluYW1pY2FsbHkgbWl4IGFuZCBtYXRjaCBXZWIgc2VydmljZXMgdG8gcGVyZm9ybSBjb21wbGV4IHRyYW5zYWN0aW9ucyB3aXRoIG1pbmltYWwgcHJvZ3JhbW1pbmcuIFdlYiBzZXJ2aWNlcyBhbGxvdyBidXllcnMgYW5kIHNlbGxlcnMgYWxsIG92ZXIgdGhlIHdvcmxkIHRvIGRpc2NvdmVyIGVhY2ggb3RoZXIsIGNvbm5lY3QgZHluYW1pY2FsbHksIGFuZCBleGVjdXRlIHRyYW5zYWN0aW9ucyBpbiByZWFsIHRpbWUgd2l0aCBtaW5pbWFsIGh1bWFuIGludGVyYWN0aW9uLiI+V2ViIHNlcnZpY2VzIG92ZXJ2aWV3PC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jd3NkbC5odG1sIiB0aXRsZT0iV2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKSBpcyBhIHN0YW5kYXJkIHNwZWNpZmljYXRpb24gZm9yIGRlc2NyaWJpbmcgbmV0d29ya2VkLCBYTUwtYmFzZWQgc2VydmljZXMuIEl0IHByb3ZpZGVzIGEgc2ltcGxlIHdheSBmb3Igc2VydmljZSBwcm92aWRlcnMgdG8gZGVzY3JpYmUgdGhlIGJhc2ljIGZvcm1hdCBvZiByZXF1ZXN0cyB0byB0aGVpciBzeXN0ZW1zIHJlZ2FyZGxlc3Mgb2YgdGhlIHVuZGVybHlpbmcgcnVuLXRpbWUgaW1wbGVtZW50YXRpb24uIj5XZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vdGFza3MvdG92ZXJ3cy5odG1sIj4gRGV2ZWxvcGluZyBXZWIKLXNlcnZpY2VzPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHVkZGlleHAuaHRtbCI+IFVzaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXI8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yd3NwcmVmLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9yZWYvcndzcHJlZi5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2U4ZjM5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yd3NwcmVmLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+Ci08IURPQ1RZUEUgcmVmZXJlbmNlIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFJlZmVyZW5jZS8vRU4iCi0gInJlZmVyZW5jZS5kdGQiPgotPHJlZmVyZW5jZSBpZD0icndzcHJlZiIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5XZWIgc2VydmljZXMgcHJlZmVyZW5jZXM8L3RpdGxlPgotPHNob3J0ZGVzYz5CZWZvcmUgeW91IGJlZ2luIGRldmVsb3BpbmcgV2ViIHNlcnZpY2VzIG9yIGNsaWVudHMsIHlvdSBjYW4gb3B0aW1pemUKLXRoZSB3b3JrYmVuY2ggZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCBieSBzZXR0aW5nIGEgdmFyaWV0eSBvZiBwcmVmZXJlbmNlcy48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0+cHJlZmVyZW5jZXM8aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPnByZWZlcmVuY2VzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTxyZWZib2R5PgotPHNlY3Rpb24+PHAgaWQ9InNldHByZWZtYWluIj5UbyBzZXQgYW55IG9mIHRoZSBXZWIgc2VydmljZXMgcHJlZmVyZW5jZXMsIGZvbGxvdwotdGhlc2Ugc3RlcHM6PG9sPgotPGxpPkNsaWNrICA8dWljb250cm9sPldpbmRvdyA+IFByZWZlcmVuY2VzPC91aWNvbnRyb2w+IHRvIG9wZW4gdGhlIFByZWZlcmVuY2VzCi1ub3RlYm9vay48L2xpPgotPGxpPkV4cGFuZCAgPHVpY29udHJvbD5XZWIgc2VydmljZXM8L3VpY29udHJvbD4gb3IgPHVpY29udHJvbD5XZWIgYW5kIFhNTDwvdWljb250cm9sPiwKLWFuZCBjbGljayB0aGUgcHJlZmVyZW5jZSBjYXRlZ29yeSB0aGF0IHlvdSB3YW50IHRvIHNldDwvbGk+Ci08bGk+U2VsZWN0IHRoZSBjaGVjayBib3hlcyB0aGF0IHlvdSB3YW50IHRvIHNldCBhcyB0aGUgZGVmYXVsdCB3aGVuIGNyZWF0aW5nCi15b3VyIFdlYiBzZXJ2aWNlLjwvbGk+Ci08bGk+Q2xpY2sgIDx1aWNvbnRyb2w+T0s8L3VpY29udHJvbD4gdG8gYXBwbHkgdGhlIGNoYW5nZXMgYW5kIGNsb3NlIHRoZSBQcmVmZXJlbmNlcwotbm90ZWJvb2suPC9saT4KLTwvb2w+SWYgeW91IHJlcXVpcmUgbW9yZSBpbmZvcm1hdGlvbiBvbiBhbnkgb2YgdGhlIG9wdGlvbnMsIHNlbGVjdCB0aGUgb3B0aW9uCi1hbmQgcHJlc3MgIDx1aWNvbnRyb2w+RjE8L3VpY29udHJvbD4uPC9wPjxwPldlYiBzZXJ2aWNlcyB0b29scyBlbmFibGUgeW91Ci10byBkZWZpbmUgdGhlIGZvbGxvd2luZyBwcmVmZXJlbmNlczo8L3A+PGRsPjxkbGVudHJ5IGlkPSJheGlzZW1pdHRlcnByZWYiPgotPGR0PkF4aXMgRW1pdHRlcjwvZHQ+Ci08ZGQ+VGhpcyBwYWdlIGFsbG93cyB5b3UgdG8gc2V0IHRoZSBmb2xsb3dpbmcgcHJlZmVyZW5jZXMgdXNlZCB3aGVuIGNyZWF0aW5nCi1vciBjb25zdW1pbmcgQXhpcyBXZWIgc2VydmljZXMuPC9kZD4KLTxkZD48Yj5XU0RMMkphdmE8L2I+PHVsPgotPGxpPkdlbmVyYXRlIGNvZGUgZm9yIGFsbCBlbGVtZW50czogQnkgZGVmYXVsdCwgV1NETDJKYXZhIG9ubHkgZ2VuZXJhdGVzIGNvZGUKLWZvciB0aG9zZSBlbGVtZW50cyBpbiB0aGUgV1NETCBmaWxlIHRoYXQgYXJlIHJlZmVyZW5jZWQuIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi1yZWdhcmRpbmcgaG93IHJlZmVyZW5jaW5nIHdvcmtzIHJlZmVyIHRvIHRoZSBBeGlzIHJlZmVyZW5jZSBndWlkZTogPHhyZWYgaHJlZj0iaHR0cDovL3dzLmFwYWNoZS5vcmcvYXhpcy9qYXZhL3JlZmVyZW5jZS5odG1sIgotc2NvcGU9ImV4dGVybmFsIj48L3hyZWY+PC9saT4KLTxsaT5FbWl0cyBzZXBhcmF0ZSBIZWxwZXIgY2xhc3NlcyBmb3IgbWV0YWRhdGE6IElmIHlvdSBzZWxlY3QgdGhpcyBvcHRpb24KLVdTREwySmF2YSB3aWxsIGNyZWF0ZSBhIHNlcGFyYXRlIGhlbHBlciBjbGFzcyB0aGF0IGNvbnRhaW5zIHRoZSBtZXRhZGF0YSByYXRoZXIKLXRoYW4gaW5jbHVkaW5nIGl0IGluIHRoZSBza2VsZXRvbi48L2xpPgotPGxpPlByZWZlcnMgYnVpbGRpbmcgYmVhbnMgdG8gc3RyYWlnaHQgYXJyYXlzIGZvciB3cmFwcGVkIFhNTCBhcnJheSB0eXBlczoKLVRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIHRvIG1hcCB0aGlzIFhNTCBjb25zdHJ1Y3Q6IDxjb2RlYmxvY2s+Jmx0O2VsZW1lbnQgbmFtZT0iYXJyYXkiPgotICZsdDtjb21wbGV4VHlwZT4KLSAgJmx0O3NlcXVlbmNlPgotICAgJmx0O2VsZW1lbnQgbmFtZT0iaXRlbSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0gICZsdDsvc2VxdWVuY2U+Ci0gJmx0Oy9jb21wbGV4VHlwZT4KLSZsdDsvZWxlbWVudD48L2NvZGVibG9jaz50byBhIEphdmEgU3RyaW5nIGFycmF5IChTdHJpbmdbXSkuIElmIHlvdSB3b3VsZCByYXRoZXIKLWEgc3BlY2lmaWMgSmF2YUJlYW4gY2xhc3MgKEFycmF5T2ZTdHJpbmcpIGJlIGdlbmVyYXRlZCBmb3IgdGhlc2UgdHlwZXMgb2YKLXNjaGVtYXMsIHNlbGVjdCB0aGlzIG9wdGlvbi4gPC9saT4KLTxsaT5BZGQgc2NvcGUgdG8gZGVwbG95LndzZGQ6IFRoaXMgaW5kaWNhdGVzIGhvdyB0byBkZXBsb3kgdGhlIHNlcnZlciBpbXBsZW1lbnRhdGlvbi4KLUFwcGxpY2F0aW9uIHVzZXMgb25lIGluc3RhbmNlIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgYWxsIHJlcXVlc3RzLgotUmVxdWVzdCBjcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgZWFjaCByZXF1ZXN0LgotU2Vzc2lvbiBjcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgZWFjaCBzZXNzaW9uLjwvbGk+Ci08bGk+VGltZW91dCBpbiBzZWNvbmRzOiBUaGUgZGVmYXVsdCBpcyA0NS4gVXNlIC0xIHRvIGRpc2FibGUgdGhlIHRpbWVvdXQuPC9saT4KLTwvdWw+PC9kZD4KLTxkZD48Yj5KYXZhMldTREw8L2I+PHVsPgotPGxpPkxvb2sgZm9yIGFsbG93ZWQgbWV0aG9kcyBpbiBpbmhlcml0ZWQgY2xhc3M6IElmIHRoaXMgb3B0aW9uIGlzIHNwZWNpZmllZCwKLXRoZSBKYXZhMldTREwgcGFyc2VyIHdpbGwgbG9vayBpbnRvIGV4dGVuZGVkIGNsYXNzZXMgdG8gZGV0ZXJtaW5lIHRoZSBsaXN0Ci1vZiBtZXRob2RzIHRvIGV4cG9ydCBpbnRvIHRoZSBXU0RMIGZpbGUuIDwvbGk+Ci08bGk+QW5hbHl6ZSB0aGUgc2VydmljZSBjbGFzcyBmb3IgY29tcGxpYW5jZSB0byBKQVgtUlBDIGJlZm9yZSBnZW5lcmF0aW5nCi1jb2RlOiBJZiBzZWxlY3RlZCwgdGhlIHRvb2xzIHdpbGwgZXhhbWluZSB0aGUgSmF2YSBzZXJ2aWNlIGNsYXNzIGFuZCBpdHMgdmFsdWUKLXR5cGVzIHRvIGRldGVybWluZSBpZiBpdCBzYXRpc2ZpZXMgaW1wb3J0YW50IHJlcXVpcmVtZW50cyBvZiB0aGUgSkFYLVJQQyBzcGVjaWZpY2F0aW9uLjwvbGk+Ci08L3VsPjwvZGQ+Ci08L2RsZW50cnk+PGRsZW50cnkgaWQ9InBvcHVwZGlhbG9nc2VsZWN0Ij4KLTxkdD5Qb3B1cCBEaWFsb2cgU2VsZWN0aW9uPC9kdD4KLTxkZD5UaGUgRGlhbG9ncyBwcmVmZXJlbmNlcyBlbmFibGUgeW91IHRvIGRldGVybWluZSB3aGljaCBkaWFsb2cgYm94ZXMgdGhhdAoteW91IHdhbnQgdG8gc2VlIHdoZW4gcnVubmluZyBwb3B1cCBhY3Rpb25zLiBJZiB5b3UgaGF2ZSBkaXNhYmxlZCBhbnkgb2YgdGhlCi1kaWFsb2dzIGJ5IHNlbGVjdGluZyAiRG8gbm90IHNob3cgdGhpcyBkaWFsb2cgYWdhaW4iIG9uIHRoZSBmaXJzdCBwYWdlIG9mCi1hIFdlYiBzZXJ2aWNlcyB3aXphcmQsIHlvdSBjYW4gdW5kbyB5b3VyIGNoYW5nZSBieSBjbGVhcmluZyB0aGUgY2hlY2sgYm94Ci1iZXNpZGUgdGhlIGRpYWxvZyB0aGF0IHlvdSBoYXZlIGNob3NlbiB0byBoaWRlLjwvZGQ+Ci08L2RsZW50cnk+PGRsZW50cnkgaWQ9IndzaWNvbXBsaWFuY2UiPgotPGR0PlByb2ZpbGUgQ29tcGxpYW5jZSBhbmQgVmFsaWRhdGlvbjwvZHQ+Ci08ZGQ+VGhlIFdTLUkgQ29tcGxpYW5jZSBwcmVmZXJlbmNlcyBhbGxvdyB5b3UgdG8gc2VsZWN0IHlvdXIgbGV2ZWwgb2YgY29tcGxpYW5jZQotd2l0aCB0aGUgV1MtSSBTaW1wbGUgU09BUCBCaW5kaW5nIFByb2ZpbGUgKFNTQlApIGFuZCBXUy1JIEF0dGFjaGVtZW50IFByb2ZpbGUKLShBUCkuIE5vdGU6IGlmIHlvdSBjaGFuZ2UgdGhlIGxldmVsIG9mIFdTLUkgY29tcGxpYW5jZSB3aGlsZSBXUy1JIGluY29tcGxpYW5jZXMKLWFyZSBsaXN0ZWQgaW4gdGhlIFRhc2sgdmlldywgdGhlIFRhc2sgdmlldyB3aWxsIG5vdCBiZSBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQuCi1UaGUgd29ya3NwYWNlIG11c3QgYmUgcmV2YWxpZGF0ZWQgYmVmb3JlIHRoZSB3YXJuaW5ncyB3aWxsIGJlIHJlbW92ZWQgZnJvbQotdGhlIFRhc2sgdmlldy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gV1MtSSwgcmVmZXIgdG86IDx4cmVmIGhyZWY9Imh0dHA6Ly93d3cud3MtaS5vcmcvIgotc2NvcGU9ImV4dGVybmFsIj48L3hyZWY+PC9kZD4KLTxkZD5Gb3IgdmFsaWRhdGlvbiBwcmVmZXJlbmNlcywgeW91IGNhbiBjaG9vc2Ugd2hldGhlciBvciBub3QgV1NETCBmaWxlcyBjb25zdW1lZAotYnkgdGhlIFdlYiBzZXJ2aWNlcyB3aXphcmRzIGFyZSB2YWxpZGF0ZWQsIGFuZCB3aGV0aGVyIG9yIG5vdCB0aGUgV1NETCB2YWxpZGF0aW9uCi1tdXN0IGNvbXBsZXRlIGJlZm9yZSB0aGUgd2l6YXJkIHdpbGwgbW92ZSB0byB0aGUgbmV4dCBzdGVwLjwvZGQ+Ci08L2RsZW50cnk+PGRsZW50cnkgaWQ9InByb2p0b3BvbG9neSI+Ci08ZHQ+UHJvamVjdCBUb3BvbG9neTwvZHQ+Ci08ZGQ+VGhlIFByb2plY3QgVG9wb2xvZ3kgcHJlZmVyZW5jZXMgYWxsb3cgeW91IHRvOjx1bD4KLTxsaT5TZWxlY3QgdGhlIGRlZmF1bHQgY2xpZW50IHByb2plY3QgdHlwZSB0aGF0IHRoZSBXZWIgc2VydmljZXMgd2l6YXJkcyB3aWxsCi1jcmVhdGUgd2hlbiBnZW5lcmF0aW5nIGEgV2ViIHNlcnZpY2UgY2xpZW50LiBZb3UgY2FuIGFsc28gc2V0IHRoZSBvcmRlciBpbgotd2hpY2ggdGhlIGNsaWVudCBwcm9qZWN0IHR5cGVzIHdpbGwgYmUgbGlzdGVkIGluIHRoZSB3aXphcmQuIE5vdGUgdGhhdCB0aGlzCi1zZWxlY3Rpb24gaXMgc2ltcGx5IGEgZGVmYXVsdCBhbmQgYW4gYWx0ZXJuYXRlIHByb2plY3QgdHlwZSBjYW4gYmUgc2VsZWN0ZWQKLWluIHRoZSB3aXphcmQuPC9saT4KLTxsaT5TZWxlY3Qgd2hldGhlciB5b3Ugd2FudCB0byBnZW5lcmF0ZSB0aGUgV2ViIHNlcnZpY2UgYW5kIHRoZSBXZWIgc2VydmljZQotY2xpZW50IGluIHRoZSBzYW1lIEVBUiBwcm9qZWN0IG9yIGRpZmZlcmVudCBFQVIgcHJvamVjdHMuIEdlbmVyYXRpbmcgdGhlIHNlcnZpY2UKLWFuZCBjbGllbnQgaW50byBkaWZmZXJlbnQgRUFSIHByb2plY3RzIGNhbiByZWR1Y2UgdGhlIGNoYW5jZSBvZiBjb25mbGljdHMKLXRoYXQgb2NjdXIgd2hlbiBib3RoIGV4aXN0IGluIGEgc2luZ2xlIEVBUiBwcm9qZWN0LCBidXQgdXNlcyBtb3JlIHN5c3RlbSByZXNvdXJjZXMuPC9saT4KLTwvdWw+PC9kZD4KLTwvZGxlbnRyeT48ZGxlbnRyeSBpZD0icmVzb3VyY2VtYW5hZ2VtZW50Ij4KLTxkdD5SZXNvdXJjZSBNYW5hZ2VtZW50PC9kdD4KLTxkZD5UaGUgUmVzb3VyY2UgTWFuYWdlbWVudCBwcmVmZXJlbmNlcyBlbmFibGUgeW91IHRvIGRldGVybWluZSB0aGUgZmlsZSBhbmQKLWZvbGRlciBjcmVhdGlvbiBhbmQgb3ZlcndyaXRpbmcgZGVmYXVsdHMgdGhhdCB5b3Ugd2FudCB0byB1c2Ugd2hlbiBjcmVhdGluZwoteW91ciBXZWIgc2VydmljZS48dWw+Ci08bGk+T3ZlcndyaXRlIGZpbGVzIHdpdGhvdXQgd2FybmluZzogc2VsZWN0aW5nIHRoaXMgd2lsbCBhbGxvdyB0aGUgd2l6YXJkcwotdG8gb3ZlcndyaXRlIGFueSBleGlzdGluZyBmaWxlcyBpbiB0aGUgd29ya3NwYWNlIHdpdGhvdXQgcHJvbXB0aW5nLiBJZiBpdAotaXMgbm90IHNlbGVjdGVkIHlvdSB3aWxsIGJlIHByb21wdGVkIGVhY2ggdGltZSBhIGZpbGUgbmVlZHMgdG8gYmUgb3ZlcndyaXR0ZW4uPC9saT4KLTxsaT5DcmVhdGUgZm9sZGVycyB3aGVuIG5lY2Vzc2FyeTogc2VsZWN0aW5nIHRoaXMgZW5hYmxlcyB0aGUgd2l6YXJkcyB0byBjcmVhdGUKLWFueSByZXF1aXJlZCBmb2xkZXJzLjwvbGk+Ci08bGk+Q2hlY2sgb3V0IGZpbGVzIHdpdGhvdXQgd2FybmluZzogc2VsZWN0IHRvIGNoZWNrIG91dCBmaWxlcyB3aXRob3V0IHJlY2VpdmluZwotYSB3YXJuaW5nIG1lc3NhZ2UgYXNraW5nIGZvciBjb25maXJtYXRpb24uPC9saT4KLTxsaT5NZXJnZSBnZW5lcmF0ZWQgc2tlbGV0b24gZmlsZTogdGhpcyBjaGVjayBib3ggaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KLSBJZiB0aGlzIGNoZWNrIGJveCBpcyBlbmFibGVkLCB3aGVuIGEgc2tlbGV0b24gZmlsZSBvZiB0aGUgc2FtZSBuYW1lIGFscmVhZHkKLWV4aXN0cyBpbiB0aGUgd29ya3NwYWNlLCB0aGUgbmV3bHkgZ2VuZXJhdGVkIHNrZWxldG9uIGZpbGUgd2lsbCBtZXJnZSB3aXRoCi10aGUgZXhpc3Rpbmcgc2tlbGV0b24gZmlsZS4gIEVuYWJsZSB0aGlzIHRvIHByZXNlcnZlIGNvZGUgdGhhdCB5b3UgaGF2ZSBhbHJlYWR5Ci1tb2RpZmllZCBpbiB0aGUgZXhpc3Rpbmcgc2tlbGV0b24gZmlsZXMuPHA+Tm90ZSB0aGF0IHdoZW4gdGhpcyBwcmVmZXJlbmNlCi1pcyBlbmFibGVkLCBpZiB5b3UgY2hhbmdlIHRoZSByZXR1cm4gdHlwZSBvZiBhbiBpbnRlcmZhY2UsIHRoZSByZXN1bHRpbmcgc2tlbGV0b24KLWZpbGUgd2lsbCBoYXZlIGEgbWV0aG9kIHJldHVybmluZyB0aGUgdHlwZSBhcyBkZWZpbmVkIGluIHRoZSBuZXcgaW50ZXJmYWNlCi1idXQgd291bGQgaGF2ZSBhIG1ldGhvZCBib2R5IGZyb20gdGhlIG9yaWdpbmFsIHNrZWxldG9uIGZpbGUgKHdoaWNoIHdvdWxkCi1iZSByZXR1cm5pbmcgYSBkaWZmZXJlbnQgdHlwZSkuICBUaGlzIHdpbGwgcmVzdWx0IGluIGFuIGNvbXBpbGF0aW9uIGVycm9yCi10aGF0IHRoZSB5b3Ugd2lsbCBoYXZlIHRvIGNvcnJlY3QgbWFudWFsbHkuPC9wPjwvbGk+Ci08L3VsPjwvZGQ+Ci08L2RsZW50cnk+PGRsZW50cnkgaWQ9InNjZW5hcmlvZGVmYXVsdHMiPgotPGR0PlNjZW5hcmlvIERlZmF1bHRzPC9kdD4KLTxkZD5UaGUgU2NlbmFyaW8gRGVmYXVsdHMgcHJlZmVyZW5jZXMgZW5hYmxlIHlvdSB0byBzZXQgdGhlIGZvbGxvd2luZyBzY2VuYXJpbwotZGVmYXVsdHMgdGhhdCB5b3Ugd2FudCB0byB1c2Ugd2hlbiBjcmVhdGluZyB5b3VyIFdlYiBzZXJ2aWNlOjx1bD4KLTxsaT53aGljaCB0eXBlIG9mIFdlYiBzZXJ2aWNlIGFuZCBjbGllbnQgeW91IHdhbnQgdG8gYmUgc2VsZWN0ZWQgYnkgZGVmYXVsdC48L2xpPgotPGxpPndoaWNoIHBoYXNlcyBvZiB0aGUgV2ViIHNlcnZpY2UgbGlmZWN5Y2xlIHlvdSB3YW50IHRvIGNvbXBsZXRlIGluIHRoZQotd2l6YXJkLjwvbGk+Ci08bGk+aWYgeW91IHdhbnQgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciB0byBsYXVuY2ggYnkgZGVmYXVsdCBzbyB0aGF0IHlvdQotY2FuIHB1Ymxpc2ggeW91ciBXZWIgc2VydmljZSB0byBhIFVEREkgcmVnaXN0cnkuPC9saT4KLTxsaT5pZiB5b3Ugd2FudCB0aGUgV2ViIHNlcnZpY2UgU09BUCB0cmFmZmljIHJvdXRlZCB0aHJvdWdoIGEgVENQL0lQIG1vbml0b3IKLXNvIHRoYXQgeW91IGNhbiBtb25pdG9yIHRoZSBTT0FQIHBhY2tldHMgYW5kIG9wdGlvbmFsbHkgdGVzdCB0aGVtIGZvciBXUy1JCi1jb21wbGlhbmNlLjwvbGk+Ci08L3VsPk5vdGUgdGhhdCBhbGwgdGhlc2UgZGVmYXVsdHMgY2FuIGJlIG92ZXJyaWRkZW4gaW4gdGhlIHdpemFyZC48L2RkPgotPC9kbGVudHJ5PjxkbGVudHJ5IGlkPSJzZXJ2ZXJhbmRydW50aW1lIj4KLTxkdD5TZXJ2ZXIgYW5kIFJ1bnRpbWU8L2R0PgotPGRkPlNlbGVjdCB0aGUgc2VydmVyLCBXZWIgc2VydmljZSBydW4tdGltZSBlbnZpcm9ubWVudCwgYW5kIEoyRUUgdmVyc2lvbgotdGhhdCB5b3Ugd2FudCBzZWxlY3RlZCBieSBkZWZhdWx0IGluIHRoZSBXZWIgc2VydmljZXMgd2l6YXJkLiBOb3RlIHRoYXQgYWxsCi10aGVzZSBkZWZhdWx0cyBjYW4gYmUgb3ZlcnJpZGRlbiBpbiB0aGUgd2l6YXJkLjwvZGQ+Ci08L2RsZW50cnk+PGRsZW50cnkgaWQ9InRlc3RmYWNpbGl0eWRlZmF1bHRzIj4KLTxkdD5UZXN0IEZhY2lsaXR5IERlZmF1bHRzPC9kdD4KLTxkZD5jYW4gc2VsZWN0IHdoZXRoZXIgdG8gaGF2ZSB0aGUgd2l6YXJkIGF1dG9tYXRpY2FsbHkgbGF1bmNoIGEgdGVzdCBmYWNpbGl0eSwKLWFuZCB5b3UgY2FuIHNlbGVjdCB5b3VyIHByZWZlcnJlZCB0eXBlIG9mIHRlc3QgZmFjaWxpdHk8L2RkPgotPC9kbGVudHJ5PjxkbGVudHJ5IGlkPSJ3c2RsZmlsZXMiPgotPGR0PldTREwgZmlsZXM8L2R0PgotPGRkPldoZW4gY3JlYXRpbmcgYSBXU0RMIGZpbGUgaW4gdGhlIFdTREwgZWRpdG9yLCB5b3UgY2FuIHNldCB0aGUgZGVmYXVsdAotdGFyZ2V0IG5hbWVzcGFjZS4gSWYgeW91IGRvIG5vdCBzZWxlY3QgdG8gY2hhbmdlIHRoZSBkZWZhdWx0LCB5b3VyIFdTREwgZmlsZQotd2lsbCBoYXZlIGh0dHA6Ly90ZW1wdXJpLm9yZyBhcyBpdHMgdGFyZ2V0IG5hbWVzcGFjZS48L2RkPgotPC9kbGVudHJ5PjwvZGw+PC9zZWN0aW9uPgotPC9yZWZib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgQ29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vY29uY2VwdHMvY3dzaW53c2EuZGl0YSI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBUYXNrczwvdGl0bGU+Ci08bGluayBocmVmPSIuLi90YXNrcy90b3ZlcndzLmRpdGEiIHNjb3BlPSJwZWVyIj48bGlua3RleHQ+IERldmVsb3BpbmcgV2ViCi1zZXJ2aWNlczwvbGlua3RleHQ+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvcmVmZXJlbmNlPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvcmVmL3J3c3ByZWYuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3JlZi9yd3NwcmVmLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5NjA5ZTMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvcmVmL3J3c3ByZWYuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwNiIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0icmVmZXJlbmNlIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcyBwcmVmZXJlbmNlcyIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJCZWZvcmUgeW91IGJlZ2luIGRldmVsb3BpbmcgV2ViIHNlcnZpY2VzIG9yIGNsaWVudHMsIHlvdSBjYW4gb3B0aW1pemUgdGhlIHdvcmtiZW5jaCBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50IGJ5IHNldHRpbmcgYSB2YXJpZXR5IG9mIHByZWZlcmVuY2VzLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJCZWZvcmUgeW91IGJlZ2luIGRldmVsb3BpbmcgV2ViIHNlcnZpY2VzIG9yIGNsaWVudHMsIHlvdSBjYW4gb3B0aW1pemUgdGhlIHdvcmtiZW5jaCBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50IGJ5IHNldHRpbmcgYSB2YXJpZXR5IG9mIHByZWZlcmVuY2VzLiIgLz4KLTxtZXRhIGNvbnRlbnQ9InByZWZlcmVuY2VzLCBXZWIgc2VydmljZXMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJwcmVmZXJlbmNlcywgV2ViIHNlcnZpY2VzIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3dzLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N3c2lud3NhLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3Rhc2tzL3RvdmVyd3MuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJyd3NwcmVmIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+V2ViIHNlcnZpY2VzIHByZWZlcmVuY2VzPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJyd3NwcmVmIj48YSBuYW1lPSJyd3NwcmVmIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5XZWIgc2VydmljZXMgcHJlZmVyZW5jZXM8L2gxPgotCi0KLQotPGRpdj48cD5CZWZvcmUgeW91IGJlZ2luIGRldmVsb3BpbmcgV2ViIHNlcnZpY2VzIG9yIGNsaWVudHMsIHlvdSBjYW4gb3B0aW1pemUKLXRoZSB3b3JrYmVuY2ggZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCBieSBzZXR0aW5nIGEgdmFyaWV0eSBvZiBwcmVmZXJlbmNlcy48L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxkaXYgY2xhc3M9InAiIGlkPSJyd3NwcmVmX19zZXRwcmVmbWFpbiI+PGEgbmFtZT0icndzcHJlZl9fc2V0cHJlZm1haW4iPjwhLS0gLS0+PC9hPlRvIHNldCBhbnkgb2YgdGhlIFdlYiBzZXJ2aWNlcyBwcmVmZXJlbmNlcywgZm9sbG93Ci10aGVzZSBzdGVwczo8b2w+Ci08bGk+Q2xpY2sgIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPldpbmRvdyAmZ3Q7IFByZWZlcmVuY2VzPC9zcGFuPiB0byBvcGVuIHRoZSBQcmVmZXJlbmNlcwotbm90ZWJvb2suPC9saT4KLQotPGxpPkV4cGFuZCAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+V2ViIHNlcnZpY2VzPC9zcGFuPiBvciA8c3BhbiBjbGFzcz0idWljb250cm9sIj5XZWIgYW5kIFhNTDwvc3Bhbj4sCi1hbmQgY2xpY2sgdGhlIHByZWZlcmVuY2UgY2F0ZWdvcnkgdGhhdCB5b3Ugd2FudCB0byBzZXQ8L2xpPgotCi08bGk+U2VsZWN0IHRoZSBjaGVjayBib3hlcyB0aGF0IHlvdSB3YW50IHRvIHNldCBhcyB0aGUgZGVmYXVsdCB3aGVuIGNyZWF0aW5nCi15b3VyIFdlYiBzZXJ2aWNlLjwvbGk+Ci0KLTxsaT5DbGljayAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+T0s8L3NwYW4+IHRvIGFwcGx5IHRoZSBjaGFuZ2VzIGFuZCBjbG9zZSB0aGUgUHJlZmVyZW5jZXMKLW5vdGVib29rLjwvbGk+Ci0KLTwvb2w+Ci1JZiB5b3UgcmVxdWlyZSBtb3JlIGluZm9ybWF0aW9uIG9uIGFueSBvZiB0aGUgb3B0aW9ucywgc2VsZWN0IHRoZSBvcHRpb24KLWFuZCBwcmVzcyAgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RjE8L3NwYW4+LjwvZGl2PgotPHA+V2ViIHNlcnZpY2VzIHRvb2xzIGVuYWJsZSB5b3UKLXRvIGRlZmluZSB0aGUgZm9sbG93aW5nIHByZWZlcmVuY2VzOjwvcD4KLTxkbD4KLTxkdCBjbGFzcz0iZGx0ZXJtIj48YSBuYW1lPSJyd3NwcmVmX19heGlzZW1pdHRlcnByZWYiPjwhLS0gLS0+PC9hPkF4aXMgRW1pdHRlcjwvZHQ+Ci0KLTxkZD5UaGlzIHBhZ2UgYWxsb3dzIHlvdSB0byBzZXQgdGhlIGZvbGxvd2luZyBwcmVmZXJlbmNlcyB1c2VkIHdoZW4gY3JlYXRpbmcKLW9yIGNvbnN1bWluZyBBeGlzIFdlYiBzZXJ2aWNlcy48L2RkPgotCi08ZGQgY2xhc3M9ImRkZXhwYW5kIj48c3Ryb25nPldTREwySmF2YTwvc3Ryb25nPjx1bD4KLTxsaT5HZW5lcmF0ZSBjb2RlIGZvciBhbGwgZWxlbWVudHM6IEJ5IGRlZmF1bHQsIFdTREwySmF2YSBvbmx5IGdlbmVyYXRlcyBjb2RlCi1mb3IgdGhvc2UgZWxlbWVudHMgaW4gdGhlIFdTREwgZmlsZSB0aGF0IGFyZSByZWZlcmVuY2VkLiBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotcmVnYXJkaW5nIGhvdyByZWZlcmVuY2luZyB3b3JrcyByZWZlciB0byB0aGUgQXhpcyByZWZlcmVuY2UgZ3VpZGU6IDxhIGhyZWY9Imh0dHA6Ly93cy5hcGFjaGUub3JnL2F4aXMvamF2YS9yZWZlcmVuY2UuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly93cy5hcGFjaGUub3JnL2F4aXMvamF2YS9yZWZlcmVuY2UuaHRtbDwvYT48L2xpPgotCi08bGk+RW1pdHMgc2VwYXJhdGUgSGVscGVyIGNsYXNzZXMgZm9yIG1ldGFkYXRhOiBJZiB5b3Ugc2VsZWN0IHRoaXMgb3B0aW9uCi1XU0RMMkphdmEgd2lsbCBjcmVhdGUgYSBzZXBhcmF0ZSBoZWxwZXIgY2xhc3MgdGhhdCBjb250YWlucyB0aGUgbWV0YWRhdGEgcmF0aGVyCi10aGFuIGluY2x1ZGluZyBpdCBpbiB0aGUgc2tlbGV0b24uPC9saT4KLQotPGxpPlByZWZlcnMgYnVpbGRpbmcgYmVhbnMgdG8gc3RyYWlnaHQgYXJyYXlzIGZvciB3cmFwcGVkIFhNTCBhcnJheSB0eXBlczoKLVRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIHRvIG1hcCB0aGlzIFhNTCBjb25zdHJ1Y3Q6IDxwcmU+Jmx0O2VsZW1lbnQgbmFtZT0iYXJyYXkiJmd0OwotICZsdDtjb21wbGV4VHlwZSZndDsKLSAgJmx0O3NlcXVlbmNlJmd0OwotICAgJmx0O2VsZW1lbnQgbmFtZT0iaXRlbSIgdHlwZT0ieHM6c3RyaW5nIi8mZ3Q7Ci0gICZsdDsvc2VxdWVuY2UmZ3Q7Ci0gJmx0Oy9jb21wbGV4VHlwZSZndDsKLSZsdDsvZWxlbWVudCZndDs8L3ByZT4KLXRvIGEgSmF2YSBTdHJpbmcgYXJyYXkgKFN0cmluZ1tdKS4gSWYgeW91IHdvdWxkIHJhdGhlcgotYSBzcGVjaWZpYyBKYXZhQmVhbiBjbGFzcyAoQXJyYXlPZlN0cmluZykgYmUgZ2VuZXJhdGVkIGZvciB0aGVzZSB0eXBlcyBvZgotc2NoZW1hcywgc2VsZWN0IHRoaXMgb3B0aW9uLiA8L2xpPgotCi08bGk+QWRkIHNjb3BlIHRvIGRlcGxveS53c2RkOiBUaGlzIGluZGljYXRlcyBob3cgdG8gZGVwbG95IHRoZSBzZXJ2ZXIgaW1wbGVtZW50YXRpb24uCi1BcHBsaWNhdGlvbiB1c2VzIG9uZSBpbnN0YW5jZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGFsbCByZXF1ZXN0cy4KLVJlcXVlc3QgY3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGVhY2ggcmVxdWVzdC4KLVNlc3Npb24gY3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGVhY2ggc2Vzc2lvbi48L2xpPgotCi08bGk+VGltZW91dCBpbiBzZWNvbmRzOiBUaGUgZGVmYXVsdCBpcyA0NS4gVXNlIC0xIHRvIGRpc2FibGUgdGhlIHRpbWVvdXQuPC9saT4KLQotPC91bD4KLTwvZGQ+Ci0KLTxkZCBjbGFzcz0iZGRleHBhbmQiPjxzdHJvbmc+SmF2YTJXU0RMPC9zdHJvbmc+PHVsPgotPGxpPkxvb2sgZm9yIGFsbG93ZWQgbWV0aG9kcyBpbiBpbmhlcml0ZWQgY2xhc3M6IElmIHRoaXMgb3B0aW9uIGlzIHNwZWNpZmllZCwKLXRoZSBKYXZhMldTREwgcGFyc2VyIHdpbGwgbG9vayBpbnRvIGV4dGVuZGVkIGNsYXNzZXMgdG8gZGV0ZXJtaW5lIHRoZSBsaXN0Ci1vZiBtZXRob2RzIHRvIGV4cG9ydCBpbnRvIHRoZSBXU0RMIGZpbGUuIDwvbGk+Ci0KLTxsaT5BbmFseXplIHRoZSBzZXJ2aWNlIGNsYXNzIGZvciBjb21wbGlhbmNlIHRvIEpBWC1SUEMgYmVmb3JlIGdlbmVyYXRpbmcKLWNvZGU6IElmIHNlbGVjdGVkLCB0aGUgdG9vbHMgd2lsbCBleGFtaW5lIHRoZSBKYXZhIHNlcnZpY2UgY2xhc3MgYW5kIGl0cyB2YWx1ZQotdHlwZXMgdG8gZGV0ZXJtaW5lIGlmIGl0IHNhdGlzZmllcyBpbXBvcnRhbnQgcmVxdWlyZW1lbnRzIG9mIHRoZSBKQVgtUlBDIHNwZWNpZmljYXRpb24uPC9saT4KLQotPC91bD4KLTwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPjxhIG5hbWU9InJ3c3ByZWZfX3BvcHVwZGlhbG9nc2VsZWN0Ij48IS0tIC0tPjwvYT5Qb3B1cCBEaWFsb2cgU2VsZWN0aW9uPC9kdD4KLQotPGRkPlRoZSBEaWFsb2dzIHByZWZlcmVuY2VzIGVuYWJsZSB5b3UgdG8gZGV0ZXJtaW5lIHdoaWNoIGRpYWxvZyBib3hlcyB0aGF0Ci15b3Ugd2FudCB0byBzZWUgd2hlbiBydW5uaW5nIHBvcHVwIGFjdGlvbnMuIElmIHlvdSBoYXZlIGRpc2FibGVkIGFueSBvZiB0aGUKLWRpYWxvZ3MgYnkgc2VsZWN0aW5nICJEbyBub3Qgc2hvdyB0aGlzIGRpYWxvZyBhZ2FpbiIgb24gdGhlIGZpcnN0IHBhZ2Ugb2YKLWEgV2ViIHNlcnZpY2VzIHdpemFyZCwgeW91IGNhbiB1bmRvIHlvdXIgY2hhbmdlIGJ5IGNsZWFyaW5nIHRoZSBjaGVjayBib3gKLWJlc2lkZSB0aGUgZGlhbG9nIHRoYXQgeW91IGhhdmUgY2hvc2VuIHRvIGhpZGUuPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+PGEgbmFtZT0icndzcHJlZl9fd3NpY29tcGxpYW5jZSI+PCEtLSAtLT48L2E+UHJvZmlsZSBDb21wbGlhbmNlIGFuZCBWYWxpZGF0aW9uPC9kdD4KLQotPGRkPlRoZSBXUy1JIENvbXBsaWFuY2UgcHJlZmVyZW5jZXMgYWxsb3cgeW91IHRvIHNlbGVjdCB5b3VyIGxldmVsIG9mIGNvbXBsaWFuY2UKLXdpdGggdGhlIFdTLUkgU2ltcGxlIFNPQVAgQmluZGluZyBQcm9maWxlIChTU0JQKSBhbmQgV1MtSSBBdHRhY2hlbWVudCBQcm9maWxlCi0oQVApLiBOb3RlOiBpZiB5b3UgY2hhbmdlIHRoZSBsZXZlbCBvZiBXUy1JIGNvbXBsaWFuY2Ugd2hpbGUgV1MtSSBpbmNvbXBsaWFuY2VzCi1hcmUgbGlzdGVkIGluIHRoZSBUYXNrIHZpZXcsIHRoZSBUYXNrIHZpZXcgd2lsbCBub3QgYmUgYXV0b21hdGljYWxseSB1cGRhdGVkLgotVGhlIHdvcmtzcGFjZSBtdXN0IGJlIHJldmFsaWRhdGVkIGJlZm9yZSB0aGUgd2FybmluZ3Mgd2lsbCBiZSByZW1vdmVkIGZyb20KLXRoZSBUYXNrIHZpZXcuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFdTLUksIHJlZmVyIHRvOiA8YSBocmVmPSJodHRwOi8vd3d3LndzLWkub3JnLyIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly93d3cud3MtaS5vcmcvPC9hPjwvZGQ+Ci0KLTxkZCBjbGFzcz0iZGRleHBhbmQiPkZvciB2YWxpZGF0aW9uIHByZWZlcmVuY2VzLCB5b3UgY2FuIGNob29zZSB3aGV0aGVyIG9yIG5vdCBXU0RMIGZpbGVzIGNvbnN1bWVkCi1ieSB0aGUgV2ViIHNlcnZpY2VzIHdpemFyZHMgYXJlIHZhbGlkYXRlZCwgYW5kIHdoZXRoZXIgb3Igbm90IHRoZSBXU0RMIHZhbGlkYXRpb24KLW11c3QgY29tcGxldGUgYmVmb3JlIHRoZSB3aXphcmQgd2lsbCBtb3ZlIHRvIHRoZSBuZXh0IHN0ZXAuPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+PGEgbmFtZT0icndzcHJlZl9fcHJvanRvcG9sb2d5Ij48IS0tIC0tPjwvYT5Qcm9qZWN0IFRvcG9sb2d5PC9kdD4KLQotPGRkPlRoZSBQcm9qZWN0IFRvcG9sb2d5IHByZWZlcmVuY2VzIGFsbG93IHlvdSB0bzo8dWw+Ci08bGk+U2VsZWN0IHRoZSBkZWZhdWx0IGNsaWVudCBwcm9qZWN0IHR5cGUgdGhhdCB0aGUgV2ViIHNlcnZpY2VzIHdpemFyZHMgd2lsbAotY3JlYXRlIHdoZW4gZ2VuZXJhdGluZyBhIFdlYiBzZXJ2aWNlIGNsaWVudC4gWW91IGNhbiBhbHNvIHNldCB0aGUgb3JkZXIgaW4KLXdoaWNoIHRoZSBjbGllbnQgcHJvamVjdCB0eXBlcyB3aWxsIGJlIGxpc3RlZCBpbiB0aGUgd2l6YXJkLiBOb3RlIHRoYXQgdGhpcwotc2VsZWN0aW9uIGlzIHNpbXBseSBhIGRlZmF1bHQgYW5kIGFuIGFsdGVybmF0ZSBwcm9qZWN0IHR5cGUgY2FuIGJlIHNlbGVjdGVkCi1pbiB0aGUgd2l6YXJkLjwvbGk+Ci0KLTxsaT5TZWxlY3Qgd2hldGhlciB5b3Ugd2FudCB0byBnZW5lcmF0ZSB0aGUgV2ViIHNlcnZpY2UgYW5kIHRoZSBXZWIgc2VydmljZQotY2xpZW50IGluIHRoZSBzYW1lIEVBUiBwcm9qZWN0IG9yIGRpZmZlcmVudCBFQVIgcHJvamVjdHMuIEdlbmVyYXRpbmcgdGhlIHNlcnZpY2UKLWFuZCBjbGllbnQgaW50byBkaWZmZXJlbnQgRUFSIHByb2plY3RzIGNhbiByZWR1Y2UgdGhlIGNoYW5jZSBvZiBjb25mbGljdHMKLXRoYXQgb2NjdXIgd2hlbiBib3RoIGV4aXN0IGluIGEgc2luZ2xlIEVBUiBwcm9qZWN0LCBidXQgdXNlcyBtb3JlIHN5c3RlbSByZXNvdXJjZXMuPC9saT4KLQotPC91bD4KLTwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPjxhIG5hbWU9InJ3c3ByZWZfX3Jlc291cmNlbWFuYWdlbWVudCI+PCEtLSAtLT48L2E+UmVzb3VyY2UgTWFuYWdlbWVudDwvZHQ+Ci0KLTxkZD5UaGUgUmVzb3VyY2UgTWFuYWdlbWVudCBwcmVmZXJlbmNlcyBlbmFibGUgeW91IHRvIGRldGVybWluZSB0aGUgZmlsZSBhbmQKLWZvbGRlciBjcmVhdGlvbiBhbmQgb3ZlcndyaXRpbmcgZGVmYXVsdHMgdGhhdCB5b3Ugd2FudCB0byB1c2Ugd2hlbiBjcmVhdGluZwoteW91ciBXZWIgc2VydmljZS48dWw+Ci08bGk+T3ZlcndyaXRlIGZpbGVzIHdpdGhvdXQgd2FybmluZzogc2VsZWN0aW5nIHRoaXMgd2lsbCBhbGxvdyB0aGUgd2l6YXJkcwotdG8gb3ZlcndyaXRlIGFueSBleGlzdGluZyBmaWxlcyBpbiB0aGUgd29ya3NwYWNlIHdpdGhvdXQgcHJvbXB0aW5nLiBJZiBpdAotaXMgbm90IHNlbGVjdGVkIHlvdSB3aWxsIGJlIHByb21wdGVkIGVhY2ggdGltZSBhIGZpbGUgbmVlZHMgdG8gYmUgb3ZlcndyaXR0ZW4uPC9saT4KLQotPGxpPkNyZWF0ZSBmb2xkZXJzIHdoZW4gbmVjZXNzYXJ5OiBzZWxlY3RpbmcgdGhpcyBlbmFibGVzIHRoZSB3aXphcmRzIHRvIGNyZWF0ZQotYW55IHJlcXVpcmVkIGZvbGRlcnMuPC9saT4KLQotPGxpPkNoZWNrIG91dCBmaWxlcyB3aXRob3V0IHdhcm5pbmc6IHNlbGVjdCB0byBjaGVjayBvdXQgZmlsZXMgd2l0aG91dCByZWNlaXZpbmcKLWEgd2FybmluZyBtZXNzYWdlIGFza2luZyBmb3IgY29uZmlybWF0aW9uLjwvbGk+Ci0KLTxsaT5NZXJnZSBnZW5lcmF0ZWQgc2tlbGV0b24gZmlsZTogdGhpcyBjaGVjayBib3ggaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KLSBJZiB0aGlzIGNoZWNrIGJveCBpcyBlbmFibGVkLCB3aGVuIGEgc2tlbGV0b24gZmlsZSBvZiB0aGUgc2FtZSBuYW1lIGFscmVhZHkKLWV4aXN0cyBpbiB0aGUgd29ya3NwYWNlLCB0aGUgbmV3bHkgZ2VuZXJhdGVkIHNrZWxldG9uIGZpbGUgd2lsbCBtZXJnZSB3aXRoCi10aGUgZXhpc3Rpbmcgc2tlbGV0b24gZmlsZS4gIEVuYWJsZSB0aGlzIHRvIHByZXNlcnZlIGNvZGUgdGhhdCB5b3UgaGF2ZSBhbHJlYWR5Ci1tb2RpZmllZCBpbiB0aGUgZXhpc3Rpbmcgc2tlbGV0b24gZmlsZXMuPHA+Tm90ZSB0aGF0IHdoZW4gdGhpcyBwcmVmZXJlbmNlCi1pcyBlbmFibGVkLCBpZiB5b3UgY2hhbmdlIHRoZSByZXR1cm4gdHlwZSBvZiBhbiBpbnRlcmZhY2UsIHRoZSByZXN1bHRpbmcgc2tlbGV0b24KLWZpbGUgd2lsbCBoYXZlIGEgbWV0aG9kIHJldHVybmluZyB0aGUgdHlwZSBhcyBkZWZpbmVkIGluIHRoZSBuZXcgaW50ZXJmYWNlCi1idXQgd291bGQgaGF2ZSBhIG1ldGhvZCBib2R5IGZyb20gdGhlIG9yaWdpbmFsIHNrZWxldG9uIGZpbGUgKHdoaWNoIHdvdWxkCi1iZSByZXR1cm5pbmcgYSBkaWZmZXJlbnQgdHlwZSkuICBUaGlzIHdpbGwgcmVzdWx0IGluIGFuIGNvbXBpbGF0aW9uIGVycm9yCi10aGF0IHRoZSB5b3Ugd2lsbCBoYXZlIHRvIGNvcnJlY3QgbWFudWFsbHkuPC9wPgotPC9saT4KLQotPC91bD4KLTwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPjxhIG5hbWU9InJ3c3ByZWZfX3NjZW5hcmlvZGVmYXVsdHMiPjwhLS0gLS0+PC9hPlNjZW5hcmlvIERlZmF1bHRzPC9kdD4KLQotPGRkPlRoZSBTY2VuYXJpbyBEZWZhdWx0cyBwcmVmZXJlbmNlcyBlbmFibGUgeW91IHRvIHNldCB0aGUgZm9sbG93aW5nIHNjZW5hcmlvCi1kZWZhdWx0cyB0aGF0IHlvdSB3YW50IHRvIHVzZSB3aGVuIGNyZWF0aW5nIHlvdXIgV2ViIHNlcnZpY2U6PHVsPgotPGxpPndoaWNoIHR5cGUgb2YgV2ViIHNlcnZpY2UgYW5kIGNsaWVudCB5b3Ugd2FudCB0byBiZSBzZWxlY3RlZCBieSBkZWZhdWx0LjwvbGk+Ci0KLTxsaT53aGljaCBwaGFzZXMgb2YgdGhlIFdlYiBzZXJ2aWNlIGxpZmVjeWNsZSB5b3Ugd2FudCB0byBjb21wbGV0ZSBpbiB0aGUKLXdpemFyZC48L2xpPgotCi08bGk+aWYgeW91IHdhbnQgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciB0byBsYXVuY2ggYnkgZGVmYXVsdCBzbyB0aGF0IHlvdQotY2FuIHB1Ymxpc2ggeW91ciBXZWIgc2VydmljZSB0byBhIFVEREkgcmVnaXN0cnkuPC9saT4KLQotPGxpPmlmIHlvdSB3YW50IHRoZSBXZWIgc2VydmljZSBTT0FQIHRyYWZmaWMgcm91dGVkIHRocm91Z2ggYSBUQ1AvSVAgbW9uaXRvcgotc28gdGhhdCB5b3UgY2FuIG1vbml0b3IgdGhlIFNPQVAgcGFja2V0cyBhbmQgb3B0aW9uYWxseSB0ZXN0IHRoZW0gZm9yIFdTLUkKLWNvbXBsaWFuY2UuPC9saT4KLQotPC91bD4KLU5vdGUgdGhhdCBhbGwgdGhlc2UgZGVmYXVsdHMgY2FuIGJlIG92ZXJyaWRkZW4gaW4gdGhlIHdpemFyZC48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj48YSBuYW1lPSJyd3NwcmVmX19zZXJ2ZXJhbmRydW50aW1lIj48IS0tIC0tPjwvYT5TZXJ2ZXIgYW5kIFJ1bnRpbWU8L2R0PgotCi08ZGQ+U2VsZWN0IHRoZSBzZXJ2ZXIsIFdlYiBzZXJ2aWNlIHJ1bi10aW1lIGVudmlyb25tZW50LCBhbmQgSjJFRSB2ZXJzaW9uCi10aGF0IHlvdSB3YW50IHNlbGVjdGVkIGJ5IGRlZmF1bHQgaW4gdGhlIFdlYiBzZXJ2aWNlcyB3aXphcmQuIE5vdGUgdGhhdCBhbGwKLXRoZXNlIGRlZmF1bHRzIGNhbiBiZSBvdmVycmlkZGVuIGluIHRoZSB3aXphcmQuPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+PGEgbmFtZT0icndzcHJlZl9fdGVzdGZhY2lsaXR5ZGVmYXVsdHMiPjwhLS0gLS0+PC9hPlRlc3QgRmFjaWxpdHkgRGVmYXVsdHM8L2R0PgotCi08ZGQ+Y2FuIHNlbGVjdCB3aGV0aGVyIHRvIGhhdmUgdGhlIHdpemFyZCBhdXRvbWF0aWNhbGx5IGxhdW5jaCBhIHRlc3QgZmFjaWxpdHksCi1hbmQgeW91IGNhbiBzZWxlY3QgeW91ciBwcmVmZXJyZWQgdHlwZSBvZiB0ZXN0IGZhY2lsaXR5PC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+PGEgbmFtZT0icndzcHJlZl9fd3NkbGZpbGVzIj48IS0tIC0tPjwvYT5XU0RMIGZpbGVzPC9kdD4KLQotPGRkPldoZW4gY3JlYXRpbmcgYSBXU0RMIGZpbGUgaW4gdGhlIFdTREwgZWRpdG9yLCB5b3UgY2FuIHNldCB0aGUgZGVmYXVsdAotdGFyZ2V0IG5hbWVzcGFjZS4gSWYgeW91IGRvIG5vdCBzZWxlY3QgdG8gY2hhbmdlIHRoZSBkZWZhdWx0LCB5b3VyIFdTREwgZmlsZQotd2lsbCBoYXZlIGh0dHA6Ly90ZW1wdXJpLm9yZyBhcyBpdHMgdGFyZ2V0IG5hbWVzcGFjZS48L2RkPgotCi08L2RsPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0iZmFtaWx5bGlua3MiPgotPGRpdiBjbGFzcz0icGFyZW50bGluayI+PHN0cm9uZz5QYXJlbnQgdG9waWM6PC9zdHJvbmc+IDxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3cy5odG1sIiB0aXRsZT0iQSBXZWIgc2VydmljZSBpcyBhIHNldCBvZiByZWxhdGVkIGFwcGxpY2F0aW9uIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSBwcm9ncmFtbWF0aWNhbGx5IGludm9rZWQgb3ZlciB0aGUgSW50ZXJuZXQuIEJ1c2luZXNzZXMgY2FuIGR5bmFtaWNhbGx5IG1peCBhbmQgbWF0Y2ggV2ViIHNlcnZpY2VzIHRvIHBlcmZvcm0gY29tcGxleCB0cmFuc2FjdGlvbnMgd2l0aCBtaW5pbWFsIHByb2dyYW1taW5nLiBXZWIgc2VydmljZXMgYWxsb3cgYnV5ZXJzIGFuZCBzZWxsZXJzIGFsbCBvdmVyIHRoZSB3b3JsZCB0byBkaXNjb3ZlciBlYWNoIG90aGVyLCBjb25uZWN0IGR5bmFtaWNhbGx5LCBhbmQgZXhlY3V0ZSB0cmFuc2FjdGlvbnMgaW4gcmVhbCB0aW1lIHdpdGggbWluaW1hbCBodW1hbiBpbnRlcmFjdGlvbi4iPldlYiBzZXJ2aWNlcyBvdmVydmlldzwvYT48L2Rpdj4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIENvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzaW53c2EuaHRtbCIgdGl0bGU9IiI+VG9vbHMgZm9yIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudDwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBUYXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL3Rhc2tzL3RvdmVyd3MuaHRtbCI+IERldmVsb3BpbmcgV2ViCi1zZXJ2aWNlczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdG92ZXJ3cy5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdG92ZXJ3cy5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTA0NWY1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3Rhc2tzL3RvdmVyd3MuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iCi0gInRhc2suZHRkIj4KLTx0YXNrIGlkPSJ0b3ZlcndzIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkRldmVsb3BpbmcgV2ViIHNlcnZpY2VzPC90aXRsZT4KLTxzaG9ydGRlc2M+VXNlIFdlYiBzZXJ2aWNlcyB0b29scyB0byBkaXNjb3ZlciwgY3JlYXRlLCBhbmQgcHVibGlzaCBXZWIgc2VydmljZXMKLXRoYXQgYXJlIGNyZWF0ZWQgZnJvbSA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIKLXRtdHlwZT0idG0iIHRyYWRlbWFyaz0iSmF2YSI+SmF2YTwvdG0+IGJlYW5zLCBlbnRlcnByaXNlIGJlYW5zLCBhbmQgV1NETCBmaWxlcy4KLVlvdSBjYW4gY3JlYXRlIG9mIFdlYiBzZXJ2aWNlcyB1c2luZyBhIHRvcC1kb3duIGFwcHJvYWNoICh3aGljaCBzdGFydHMgd2l0aAotYSBXU0RMIGZpbGUpIG9yIGEgYm90dG9tLXVwIGFwcHJvYWNoICh3aGljaCBzdGFydHMgd2l0aCBhIDx0bSB0bWNsYXNzPSJzcGVjaWFsIgotdG1vd25lcj0iU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiIgdG10eXBlPSJ0bSIgdHJhZGVtYXJrPSJKYXZhIj5KYXZhPC90bT4gYmVhbgotb3IgRUpCKS48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5jcmVhdGluZzxpbmRleHRlcm0+b3ZlcnZpZXc8L2luZGV4dGVybT48L2luZGV4dGVybT48L2luZGV4dGVybT4KLTwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+SW4gdGhpcyByZWxlYXNlLCB0aGUgZGV2ZWxvcG1lbnQgcGF0aCB0aGF0IHlvdSB3b3VsZCB0eXBpY2FsbHkKLWZvbGxvdyB0byBjcmVhdGUgYW5kIHB1Ymxpc2ggYSBXZWIgc2VydmljZSBpcyBhcyBmb2xsb3dzOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPkNyZWF0ZSBhIFdlYiBwcm9qZWN0LjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+Q3JlYXRlIG9yIGltcG9ydCBhbiBhcnRpZmFjdCB0byBiZSB0dXJuZWQgaW50byBhIFdlYiBzZXJ2aWNlLjwvY21kPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5DcmVhdGUgYSBXZWIgc2VydmljZS48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPlB1Ymxpc2ggYSBidXNpbmVzcyBlbnRpdHkuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5QdWJsaXNoIGEgV2ViIHNlcnZpY2UuPC9jbWQ+PC9zdGVwPgotPC9zdGVwcz4KLTxyZXN1bHQ+PHA+Rm9yIGluc3RydWN0aW9ucyBvbiBwZXJmb3JtaW5nIHRoZXNlIHRhc2tzLCByZWZlciB0byB0aGUgbGlzdCBvZgotcmVsYXRlZCB0b3BpY3MgYXQgdGhlIGVuZCBvZiB0aGlzIHRvcGljLjwvcD48cD5XZWIgdG9vbHMgYXNzaXN0IHlvdSBpbiBkZXZlbG9waW5nCi1XZWIgYXBwbGljYXRpb25zIHRoYXQgeW91IGNhbiBjb25maWd1cmUgYXMgYSBXZWIgc2VydmljZS4gV2ViIGFwcGxpY2F0aW9ucwotYXJlIGRldmVsb3BlZCBpbiBhIFdlYiBwcm9qZWN0LCBhbmQgU2VydmVyIHRvb2xzIGFsbG93IHlvdSB0byB1c2UgdGhlIHNlcnZlcgotdGVzdCBlbnZpcm9ubWVudCB0byB0ZXN0IGFuZCBkZXBsb3kgeW91ciBXZWIgc2VydmljZXMuPC9wPjwvcmVzdWx0PgotPC90YXNrYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL2NvbmNlcHRzL2N3cy5kaXRhIiBzY29wZT0ibG9jYWwiPjxsaW5rdGV4dD5XZWIgc2VydmljZXMgb3ZlcnZpZXc8L2xpbmt0ZXh0PgotPC9saW5rPgotPGxpbmsgaHJlZj0iLi4vY29uY2VwdHMvY3dzaW53c2EuZGl0YSIgc2NvcGU9ImxvY2FsIj48bGlua3RleHQ+VG9vbHMgZm9yIFdlYgotc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2J0bXVwLmRpdGEiIHNjb3BlPSJsb2NhbCI+PGxpbmt0ZXh0PkNyZWF0aW5nIGJvdHRvbS11cAotV2ViIHNlcnZpY2VzPC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jd3N0b3Bkb3duLmRpdGEiIHNjb3BlPSJsb2NhbCI+PGxpbmt0ZXh0PkNyZWF0aW5nCi10b3AtZG93biBXZWIgc2VydmljZXM8L2xpbmt0ZXh0PjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgVGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGNydHdzZGwuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PkNyZWF0aW5nIGEgbmV3IFdTREwgZmlsZTwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R1ZGRpZXhwLmRpdGEiCi1zY29wZT0icGVlciI+PGxpbmt0ZXh0PlB1Ymxpc2hpbmcgV2ViIHNlcnZpY2VzIGFuZCBidXNpbmVzcyBlbnRpdGllczwvbGlua3RleHQ+Ci08L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdG92ZXJ3cy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdG92ZXJ3cy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTQ1MmRmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3Rhc2tzL3RvdmVyd3MuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA3IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IkRldmVsb3BpbmcgV2ViIHNlcnZpY2VzIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IlVzZSBXZWIgc2VydmljZXMgdG9vbHMgdG8gZGlzY292ZXIsIGNyZWF0ZSwgYW5kIHB1Ymxpc2ggV2ViIHNlcnZpY2VzIHRoYXQgYXJlIGNyZWF0ZWQgZnJvbSBKYXZhIGJlYW5zLCBlbnRlcnByaXNlIGJlYW5zLCBhbmQgV1NETCBmaWxlcy4gWW91IGNhbiBjcmVhdGUgb2YgV2ViIHNlcnZpY2VzIHVzaW5nIGEgdG9wLWRvd24gYXBwcm9hY2ggKHdoaWNoIHN0YXJ0cyB3aXRoIGEgV1NETCBmaWxlKSBvciBhIGJvdHRvbS11cCBhcHByb2FjaCAod2hpY2ggc3RhcnRzIHdpdGggYSBKYXZhIGJlYW4gb3IgRUpCKS4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNlIFdlYiBzZXJ2aWNlcyB0b29scyB0byBkaXNjb3ZlciwgY3JlYXRlLCBhbmQgcHVibGlzaCBXZWIgc2VydmljZXMgdGhhdCBhcmUgY3JlYXRlZCBmcm9tIEphdmEgYmVhbnMsIGVudGVycHJpc2UgYmVhbnMsIGFuZCBXU0RMIGZpbGVzLiBZb3UgY2FuIGNyZWF0ZSBvZiBXZWIgc2VydmljZXMgdXNpbmcgYSB0b3AtZG93biBhcHByb2FjaCAod2hpY2ggc3RhcnRzIHdpdGggYSBXU0RMIGZpbGUpIG9yIGEgYm90dG9tLXVwIGFwcHJvYWNoICh3aGljaCBzdGFydHMgd2l0aCBhIEphdmEgYmVhbiBvciBFSkIpLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IldlYiBzZXJ2aWNlcywgY3JlYXRpbmcsIG92ZXJ2aWV3IiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV2ViIHNlcnZpY2VzLCBjcmVhdGluZywgb3ZlcnZpZXciIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9jb25jZXB0cy9jd3MuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3dzaW53c2EuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3dzYnRtdXAuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3dzdG9wZG93bi5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90Y3J0d3NkbC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHVkZGlleHAuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0b3ZlcndzIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+RGV2ZWxvcGluZyBXZWIgc2VydmljZXM8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InRvdmVyd3MiPjxhIG5hbWU9InRvdmVyd3MiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkRldmVsb3BpbmcgV2ViIHNlcnZpY2VzPC9oMT4KLQotCi0KLTxkaXY+PHA+VXNlIFdlYiBzZXJ2aWNlcyB0b29scyB0byBkaXNjb3ZlciwgY3JlYXRlLCBhbmQgcHVibGlzaCBXZWIgc2VydmljZXMKLXRoYXQgYXJlIGNyZWF0ZWQgZnJvbSBKYXZh4oSiIGJlYW5zLCBlbnRlcnByaXNlIGJlYW5zLCBhbmQgV1NETCBmaWxlcy4KLVlvdSBjYW4gY3JlYXRlIG9mIFdlYiBzZXJ2aWNlcyB1c2luZyBhIHRvcC1kb3duIGFwcHJvYWNoICh3aGljaCBzdGFydHMgd2l0aAotYSBXU0RMIGZpbGUpIG9yIGEgYm90dG9tLXVwIGFwcHJvYWNoICh3aGljaCBzdGFydHMgd2l0aCBhIEphdmEgYmVhbgotb3IgRUpCKS48L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPkluIHRoaXMgcmVsZWFzZSwgdGhlIGRldmVsb3BtZW50IHBhdGggdGhhdCB5b3Ugd291bGQgdHlwaWNhbGx5Ci1mb2xsb3cgdG8gY3JlYXRlIGFuZCBwdWJsaXNoIGEgV2ViIHNlcnZpY2UgaXMgYXMgZm9sbG93czo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpPjxzcGFuPkNyZWF0ZSBhIFdlYiBwcm9qZWN0Ljwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+Q3JlYXRlIG9yIGltcG9ydCBhbiBhcnRpZmFjdCB0byBiZSB0dXJuZWQgaW50byBhIFdlYiBzZXJ2aWNlLjwvc3Bhbj4KLTwvbGk+Ci0KLTxsaT48c3Bhbj5DcmVhdGUgYSBXZWIgc2VydmljZS48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPlB1Ymxpc2ggYSBidXNpbmVzcyBlbnRpdHkuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5QdWJsaXNoIGEgV2ViIHNlcnZpY2UuPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPkZvciBpbnN0cnVjdGlvbnMgb24gcGVyZm9ybWluZyB0aGVzZSB0YXNrcywgcmVmZXIgdG8gdGhlIGxpc3Qgb2YKLXJlbGF0ZWQgdG9waWNzIGF0IHRoZSBlbmQgb2YgdGhpcyB0b3BpYy48L3A+Ci08cD5XZWIgdG9vbHMgYXNzaXN0IHlvdSBpbiBkZXZlbG9waW5nCi1XZWIgYXBwbGljYXRpb25zIHRoYXQgeW91IGNhbiBjb25maWd1cmUgYXMgYSBXZWIgc2VydmljZS4gV2ViIGFwcGxpY2F0aW9ucwotYXJlIGRldmVsb3BlZCBpbiBhIFdlYiBwcm9qZWN0LCBhbmQgU2VydmVyIHRvb2xzIGFsbG93IHlvdSB0byB1c2UgdGhlIHNlcnZlcgotdGVzdCBlbnZpcm9ubWVudCB0byB0ZXN0IGFuZCBkZXBsb3kgeW91ciBXZWIgc2VydmljZXMuPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBDb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3cy5odG1sIiB0aXRsZT0iQSBXZWIgc2VydmljZSBpcyBhIHNldCBvZiByZWxhdGVkIGFwcGxpY2F0aW9uIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSBwcm9ncmFtbWF0aWNhbGx5IGludm9rZWQgb3ZlciB0aGUgSW50ZXJuZXQuIEJ1c2luZXNzZXMgY2FuIGR5bmFtaWNhbGx5IG1peCBhbmQgbWF0Y2ggV2ViIHNlcnZpY2VzIHRvIHBlcmZvcm0gY29tcGxleCB0cmFuc2FjdGlvbnMgd2l0aCBtaW5pbWFsIHByb2dyYW1taW5nLiBXZWIgc2VydmljZXMgYWxsb3cgYnV5ZXJzIGFuZCBzZWxsZXJzIGFsbCBvdmVyIHRoZSB3b3JsZCB0byBkaXNjb3ZlciBlYWNoIG90aGVyLCBjb25uZWN0IGR5bmFtaWNhbGx5LCBhbmQgZXhlY3V0ZSB0cmFuc2FjdGlvbnMgaW4gcmVhbCB0aW1lIHdpdGggbWluaW1hbCBodW1hbiBpbnRlcmFjdGlvbi4iPldlYiBzZXJ2aWNlcyBvdmVydmlldzwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzaW53c2EuaHRtbCIgdGl0bGU9IiI+VG9vbHMgZm9yIFdlYgotc2VydmljZXMgZGV2ZWxvcG1lbnQ8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2J0bXVwLmh0bWwiIHRpdGxlPSJXZWIgc2VydmljZXMgY2FuIGJlIGNyZWF0ZWQgdXNpbmcgdHdvIG1ldGhvZHM6IHRvcC1kb3duIGRldmVsb3BtZW50IGFuZCBib3R0b20tdXAgZGV2ZWxvcG1lbnQuIEJvdHRvbS11cCBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQgaW52b2x2ZXMgY3JlYXRpbmcgYSBXZWIgc2VydmljZSBmcm9tIGEgSmF2YSBiZWFuIG9yIGVudGVycHJpc2UgYmVhbi4iPkNyZWF0aW5nIGJvdHRvbS11cAotV2ViIHNlcnZpY2VzPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jd3N0b3Bkb3duLmh0bWwiIHRpdGxlPSJXZWIgc2VydmljZXMgY2FuIGJlIGNyZWF0ZWQgdXNpbmcgdHdvIG1ldGhvZHM6IHRvcC1kb3duIGRldmVsb3BtZW50IGFuZCBib3R0b20tdXAgZGV2ZWxvcG1lbnQuIFRvcC1kb3duIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCBpbnZvbHZlcyBjcmVhdGluZyBhIFdlYiBzZXJ2aWNlIGZyb20gYSBXU0RMIGZpbGUuIj5DcmVhdGluZwotdG9wLWRvd24gV2ViIHNlcnZpY2VzPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGNydHdzZGwuaHRtbCI+Q3JlYXRpbmcgYSBuZXcgV1NETCBmaWxlPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHVkZGlleHAuaHRtbCI+UHVibGlzaGluZyBXZWIgc2VydmljZXMgYW5kIGJ1c2luZXNzIGVudGl0aWVzPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90d3NpY29tcGx5LmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90d3NpY29tcGx5LmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2MjE2YjYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdHdzaWNvbXBseS5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+Ci08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiIKLSAidGFzay5kdGQiPgotPHRhc2sgaWQ9InR3c2ljb21wbHkiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+U2V0dGluZyB0aGUgbGV2ZWwgb2YgV1MtSSBjb21wbGlhbmNlPC90aXRsZT4KLTxzaG9ydGRlc2M+VGhlIFdlYiBzZXJ2aWNlcyBXUy1JIHZhbGlkYXRpb24gdG9vbHMgc3VwcG9ydCB0aGUgbGV2ZWwgb2YgV1MtSQotY29tcGxpYW5jZSBvdXRsaW5lZCBpbiB0aGUgV1MtSSBCYXNpYyBQcm9maWxlIDEuMSwgdGhlIFdTLUkgU2ltcGxlIFNPQVAgQmluZGluZwotUHJvZmlsZSAxLjAgKFdTLUkgU1NCUCksIGFuZCB0aGUgV1MtSSBBdHRhY2htZW50cyBQcm9maWxlIDEuMCAoV1MtSSBBUCkuIFlvdQotY2FuIGNob29zZSB0byBtYWtlIHlvdXIgV2ViIHNlcnZpY2UgY29tcGxpYW50IG9yIG5vbi1jb21wbGlhbnQsIGRlcGVuZGluZwotb24geW91ciBuZWVkcy4gRm9yIGV4YW1wbGUsIGVuY29kZWQgc3R5bGUgKFJQQy9lbmNvZGVkKSwgU09BUCBvdmVyIEpNUyBwcm90b2NvbHMKLWFyZSBub3QgV1MtSSBjb21wbGlhbnQuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+aW50ZXJvcGVyYWJpbGl0eSBjb21wbGlhbmNlPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPldTSTxpbmRleHRlcm0+c2V0dGluZyBjb21wbGlhbmNlPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPllvdSBjYW4gc2V0IHRoZSBsZXZlbCBvZiBjb21wbGlhbmNlIGZvciBlaXRoZXIgdGhlIEJhc2ljIFByb2ZpbGUKLWFuZCB0aGUgU2ltcGxlIFNPQVAgQmluZGluZyBQcm9maWxlLCBvciBmb3IgdGhlIEF0dGFjaG1lbnRzIFByb2ZpbGUuIFlvdSBjYW4KLXNlbGVjdCBmcm9tIHRocmVlIGxldmVscyBvZiBjb21wbGlhbmNlIHdpdGggV1MtSSBzcGVjaWZpY2F0aW9uczo8L3A+PHVsPgotPGxpPlJlcXVpcmUgV1MtSSBjb21wbGlhbmNlIC0gdGhpcyBsZXZlbCBwcmV2ZW50cyB5b3UgZnJvbSBjcmVhdGluZyBhIG5vbi1jb21wbGlhbnQKLVdlYiBzZXJ2aWNlLjwvbGk+Ci08bGk+U3VnZ2VzdCBXUy1JIGNvbXBsaWFuY2UgLSB0aGlzIGxldmVsIGFsbG93cyB5b3UgdG8gY3JlYXRlIGEgbm9uLWNvbXBsaWFudAotV2ViIHNlcnZpY2UsIGJ1dCBwcm92aWRlcyBhIHZpc2libGUgd2FybmluZyBzdGF0aW5nIGhvdyB0aGUgc2VydmljZSBpcyBub24tY29tcGxpYW50LjwvbGk+Ci08bGk+SWdub3JlIFdTLUkgY29tcGxpYW5jZSAtIHRoaXMgbGV2ZWwgYWxsb3dzIHlvdSB0byBjcmVhdGUgYSBub24tY29tcGxpYW50Ci1XZWIgc2VydmljZSBhbmQgZG9lcyBub3Qgbm90aWZ5IHlvdSBvZiBub24tY29tcGxpYW5jZS48L2xpPgotPC91bD48cD5Zb3UgY2FuIHNldCB0aGUgbGV2ZWwgb2YgV1MtSSBjb21wbGlhbmNlIGF0IHRoZSB3b3Jrc3BhY2UgbGV2ZWwsIG9yCi1hdCB0aGUgcHJvamVjdCBsZXZlbC48L3A+PC9jb250ZXh0PgotPC90YXNrYm9keT4KLTx0YXNrIGlkPSJzZGdmc2RncyIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5TZXQgdGhlIGxldmVsIG9mIFdTLUkgY29tcGxpYW5jZSBmb3IgdGhlIHdvcmtzcGFjZTwvdGl0bGU+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5UbyBzZXQgdGhlIGxldmVsIG9mIFdTLUkgY29tcGxpYW5jZSBmb3IgdGhlIHdvcmtzcGFjZTo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5Gcm9tIHRoZSAgPGI+V2luZG93PC9iPiBtZW51LCBzZWxlY3QgIDxiPlByZWZlcmVuY2VzPC9iPi48L2NtZD4KLTwvc3RlcD4KLTxzdGVwPjxjbWQ+U2VsZWN0ICA8Yj5XZWIgU2VydmljZXM8L2I+IGZyb20gdGhlIGNvbXBvbmVudCB0cmVlIG9uIHRoZSBsZWZ0LWhhbmQKLXNpZGUgb2YgdGhlIHBhbmVsLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+VW5kZXIgPGI+UHJvZmlsZSBDb21wbGlhbmNlIGFuZCBWYWxpZGF0aW9uPC9iPiwgc2VsZWN0IHRoZSBsZXZlbAotb2YgY29tcGxpYW5jZSB5b3Ugd2FudCBmcm9tIHRoZSBkcm9wLWRvd24gbGlzdHMuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5DbGljayAgPGI+QXBwbHk8L2I+LCB0aGVuIGNsaWNrICA8Yj5PSzwvYj4uPC9jbWQ+PC9zdGVwPgotPC9zdGVwcz4KLTwvdGFza2JvZHk+Ci08L3Rhc2s+Ci08dGFzayBpZD0ieHZnZHNnZnNnIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPlNldCB0aGUgbGV2ZWwgb2YgV1MtSSBjb21wbGlhbmNlIGZvciBhIHByb2plY3Q8L3RpdGxlPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+VG8gc2V0IHRoZSBsZXZlbCBvZiBXUy1JIGNvbXBsaWFuY2UgZm9yIGEgcHJvamVjdDo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5JbiB0aGUgUHJvamVjdCBOYXZpZ2F0b3IsIHJpZ2h0IGNsaWNrIGFuZCBzZWxlY3QgIDxiPlByb3BlcnRpZXM8L2I+LjwvY21kPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5TZWxlY3QgIDxiPlByb2ZpbGUgQ29tcGxpYW5jZSBhbmQgVmFsaWRhdGlvbjwvYj4gZnJvbSB0aGUgY29tcG9uZW50Ci10cmVlIG9uIHRoZSBsZWZ0LWhhbmQgc2lkZSBvZiB0aGUgcGFuZWwuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5TZWxlY3QgdGhlIGxldmVsIG9mIGNvbXBsaWFuY2UgeW91IHdhbnQgZnJvbSB0aGUgZHJvcC1kb3duIGxpc3RzLAotb3Igc2VsZWN0IHRvIGhhdmUgdGhlIHByb2plY3Qgc2hhcmUgdGhlIHNhbWUgbGV2ZWwgb2YgV1MtSSBjb21wbGlhbmNlIGFzIHRoZQotd29ya3NwYWNlPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5DbGljayAgPGI+QXBwbHk8L2I+LCB0aGVuIGNsaWNrICA8Yj5PSzwvYj4uPC9jbWQ+PC9zdGVwPgotPC9zdGVwcz4KLTwvdGFza2JvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBDb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jd3Npb3Zlci5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L3Rhc2s+Ci08L3Rhc2s+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90d3NpY29tcGx5Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90d3NpY29tcGx5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhYmYwNmYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdHdzaWNvbXBseS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA3IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IlNldHRpbmcgdGhlIGxldmVsIG9mIFdTLUkgY29tcGxpYW5jZSIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJUaGUgV2ViIHNlcnZpY2VzIFdTLUkgdmFsaWRhdGlvbiB0b29scyBzdXBwb3J0IHRoZSBsZXZlbCBvZiBXUy1JIGNvbXBsaWFuY2Ugb3V0bGluZWQgaW4gdGhlIFdTLUkgQmFzaWMgUHJvZmlsZSAxLjEsIHRoZSBXUy1JIFNpbXBsZSBTT0FQIEJpbmRpbmcgUHJvZmlsZSAxLjAgKFdTLUkgU1NCUCksIGFuZCB0aGUgV1MtSSBBdHRhY2htZW50cyBQcm9maWxlIDEuMCAoV1MtSSBBUCkuIFlvdSBjYW4gY2hvb3NlIHRvIG1ha2UgeW91ciBXZWIgc2VydmljZSBjb21wbGlhbnQgb3Igbm9uLWNvbXBsaWFudCwgZGVwZW5kaW5nIG9uIHlvdXIgbmVlZHMuIEZvciBleGFtcGxlLCBlbmNvZGVkIHN0eWxlIChSUEMvZW5jb2RlZCksIFNPQVAgb3ZlciBKTVMgcHJvdG9jb2xzIGFyZSBub3QgV1MtSSBjb21wbGlhbnQuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBXZWIgc2VydmljZXMgV1MtSSB2YWxpZGF0aW9uIHRvb2xzIHN1cHBvcnQgdGhlIGxldmVsIG9mIFdTLUkgY29tcGxpYW5jZSBvdXRsaW5lZCBpbiB0aGUgV1MtSSBCYXNpYyBQcm9maWxlIDEuMSwgdGhlIFdTLUkgU2ltcGxlIFNPQVAgQmluZGluZyBQcm9maWxlIDEuMCAoV1MtSSBTU0JQKSwgYW5kIHRoZSBXUy1JIEF0dGFjaG1lbnRzIFByb2ZpbGUgMS4wIChXUy1JIEFQKS4gWW91IGNhbiBjaG9vc2UgdG8gbWFrZSB5b3VyIFdlYiBzZXJ2aWNlIGNvbXBsaWFudCBvciBub24tY29tcGxpYW50LCBkZXBlbmRpbmcgb24geW91ciBuZWVkcy4gRm9yIGV4YW1wbGUsIGVuY29kZWQgc3R5bGUgKFJQQy9lbmNvZGVkKSwgU09BUCBvdmVyIEpNUyBwcm90b2NvbHMgYXJlIG5vdCBXUy1JIGNvbXBsaWFudC4iIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIGludGVyb3BlcmFiaWxpdHkgY29tcGxpYW5jZSwgV1NJLCBzZXR0aW5nIGNvbXBsaWFuY2UiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJXZWIgc2VydmljZXMsIGludGVyb3BlcmFiaWxpdHkgY29tcGxpYW5jZSwgV1NJLCBzZXR0aW5nIGNvbXBsaWFuY2UiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InR3c2ljb21wbHkiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5TZXR0aW5nIHRoZSBsZXZlbCBvZiBXUy1JIGNvbXBsaWFuY2U8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InR3c2ljb21wbHkiPjxhIG5hbWU9InR3c2ljb21wbHkiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPlNldHRpbmcgdGhlIGxldmVsIG9mIFdTLUkgY29tcGxpYW5jZTwvaDE+Ci0KLQotCi08ZGl2PjxwPlRoZSBXZWIgc2VydmljZXMgV1MtSSB2YWxpZGF0aW9uIHRvb2xzIHN1cHBvcnQgdGhlIGxldmVsIG9mIFdTLUkKLWNvbXBsaWFuY2Ugb3V0bGluZWQgaW4gdGhlIFdTLUkgQmFzaWMgUHJvZmlsZSAxLjEsIHRoZSBXUy1JIFNpbXBsZSBTT0FQIEJpbmRpbmcKLVByb2ZpbGUgMS4wIChXUy1JIFNTQlApLCBhbmQgdGhlIFdTLUkgQXR0YWNobWVudHMgUHJvZmlsZSAxLjAgKFdTLUkgQVApLiBZb3UKLWNhbiBjaG9vc2UgdG8gbWFrZSB5b3VyIFdlYiBzZXJ2aWNlIGNvbXBsaWFudCBvciBub24tY29tcGxpYW50LCBkZXBlbmRpbmcKLW9uIHlvdXIgbmVlZHMuIEZvciBleGFtcGxlLCBlbmNvZGVkIHN0eWxlIChSUEMvZW5jb2RlZCksIFNPQVAgb3ZlciBKTVMgcHJvdG9jb2xzCi1hcmUgbm90IFdTLUkgY29tcGxpYW50LjwvcD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+WW91IGNhbiBzZXQgdGhlIGxldmVsIG9mIGNvbXBsaWFuY2UgZm9yIGVpdGhlciB0aGUgQmFzaWMgUHJvZmlsZQotYW5kIHRoZSBTaW1wbGUgU09BUCBCaW5kaW5nIFByb2ZpbGUsIG9yIGZvciB0aGUgQXR0YWNobWVudHMgUHJvZmlsZS4gWW91IGNhbgotc2VsZWN0IGZyb20gdGhyZWUgbGV2ZWxzIG9mIGNvbXBsaWFuY2Ugd2l0aCBXUy1JIHNwZWNpZmljYXRpb25zOjwvcD4KLTx1bD4KLTxsaT5SZXF1aXJlIFdTLUkgY29tcGxpYW5jZSAtIHRoaXMgbGV2ZWwgcHJldmVudHMgeW91IGZyb20gY3JlYXRpbmcgYSBub24tY29tcGxpYW50Ci1XZWIgc2VydmljZS48L2xpPgotCi08bGk+U3VnZ2VzdCBXUy1JIGNvbXBsaWFuY2UgLSB0aGlzIGxldmVsIGFsbG93cyB5b3UgdG8gY3JlYXRlIGEgbm9uLWNvbXBsaWFudAotV2ViIHNlcnZpY2UsIGJ1dCBwcm92aWRlcyBhIHZpc2libGUgd2FybmluZyBzdGF0aW5nIGhvdyB0aGUgc2VydmljZSBpcyBub24tY29tcGxpYW50LjwvbGk+Ci0KLTxsaT5JZ25vcmUgV1MtSSBjb21wbGlhbmNlIC0gdGhpcyBsZXZlbCBhbGxvd3MgeW91IHRvIGNyZWF0ZSBhIG5vbi1jb21wbGlhbnQKLVdlYiBzZXJ2aWNlIGFuZCBkb2VzIG5vdCBub3RpZnkgeW91IG9mIG5vbi1jb21wbGlhbmNlLjwvbGk+Ci0KLTwvdWw+Ci08cD5Zb3UgY2FuIHNldCB0aGUgbGV2ZWwgb2YgV1MtSSBjb21wbGlhbmNlIGF0IHRoZSB3b3Jrc3BhY2UgbGV2ZWwsIG9yCi1hdCB0aGUgcHJvamVjdCBsZXZlbC48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9Im5lc3RlZDEiIHhtbDpsYW5nPSJlbi11cyIgaWQ9InNkZ2ZzZGdzIj48YSBuYW1lPSJzZGdmc2RncyI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj5TZXQgdGhlIGxldmVsIG9mIFdTLUkgY29tcGxpYW5jZSBmb3IgdGhlIHdvcmtzcGFjZTwvaDI+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UbyBzZXQgdGhlIGxldmVsIG9mIFdTLUkgY29tcGxpYW5jZSBmb3IgdGhlIHdvcmtzcGFjZTo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpPjxzcGFuPkZyb20gdGhlICA8c3Ryb25nPldpbmRvdzwvc3Ryb25nPiBtZW51LCBzZWxlY3QgIDxzdHJvbmc+UHJlZmVyZW5jZXM8L3N0cm9uZz4uPC9zcGFuPgotPC9saT4KLQotPGxpPjxzcGFuPlNlbGVjdCAgPHN0cm9uZz5XZWIgU2VydmljZXM8L3N0cm9uZz4gZnJvbSB0aGUgY29tcG9uZW50IHRyZWUgb24gdGhlIGxlZnQtaGFuZAotc2lkZSBvZiB0aGUgcGFuZWwuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5VbmRlciA8c3Ryb25nPlByb2ZpbGUgQ29tcGxpYW5jZSBhbmQgVmFsaWRhdGlvbjwvc3Ryb25nPiwgc2VsZWN0IHRoZSBsZXZlbAotb2YgY29tcGxpYW5jZSB5b3Ugd2FudCBmcm9tIHRoZSBkcm9wLWRvd24gbGlzdHMuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5DbGljayAgPHN0cm9uZz5BcHBseTwvc3Ryb25nPiwgdGhlbiBjbGljayAgPHN0cm9uZz5PSzwvc3Ryb25nPi48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJuZXN0ZWQxIiB4bWw6bGFuZz0iZW4tdXMiIGlkPSJ4dmdkc2dmc2ciPjxhIG5hbWU9Inh2Z2RzZ2ZzZyI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj5TZXQgdGhlIGxldmVsIG9mIFdTLUkgY29tcGxpYW5jZSBmb3IgYSBwcm9qZWN0PC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRvIHNldCB0aGUgbGV2ZWwgb2YgV1MtSSBjb21wbGlhbmNlIGZvciBhIHByb2plY3Q6PC9wPgotPC9kaXY+Ci0KLTxvbD4KLTxsaT48c3Bhbj5JbiB0aGUgUHJvamVjdCBOYXZpZ2F0b3IsIHJpZ2h0IGNsaWNrIGFuZCBzZWxlY3QgIDxzdHJvbmc+UHJvcGVydGllczwvc3Ryb25nPi48L3NwYW4+Ci08L2xpPgotCi08bGk+PHNwYW4+U2VsZWN0ICA8c3Ryb25nPlByb2ZpbGUgQ29tcGxpYW5jZSBhbmQgVmFsaWRhdGlvbjwvc3Ryb25nPiBmcm9tIHRoZSBjb21wb25lbnQKLXRyZWUgb24gdGhlIGxlZnQtaGFuZCBzaWRlIG9mIHRoZSBwYW5lbC48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPlNlbGVjdCB0aGUgbGV2ZWwgb2YgY29tcGxpYW5jZSB5b3Ugd2FudCBmcm9tIHRoZSBkcm9wLWRvd24gbGlzdHMsCi1vciBzZWxlY3QgdG8gaGF2ZSB0aGUgcHJvamVjdCBzaGFyZSB0aGUgc2FtZSBsZXZlbCBvZiBXUy1JIGNvbXBsaWFuY2UgYXMgdGhlCi13b3Jrc3BhY2U8L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkNsaWNrICA8c3Ryb25nPkFwcGx5PC9zdHJvbmc+LCB0aGVuIGNsaWNrICA8c3Ryb25nPk9LPC9zdHJvbmc+Ljwvc3Bhbj48L2xpPgotCi08L29sPgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgQ29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jd3Npb3Zlci5odG1sIiB0aXRsZT0iV1MtSSBpcyBhbiBvcmdhbml6YXRpb24gZGVzaWduZWQgdG8gcHJvbW90ZSBXZWIgc2VydmljZSBpbnRlcm9wZXJhYmlsaXR5IGFjcm9zcyBwbGF0Zm9ybXMsIG9wZXJhdGluZyBzeXN0ZW1zLCBhbmQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzLiI+V2ViIHNlcnZpY2VzIGludGVyb3BlcmFiaWxpdHkgKFdTLUkpPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLQotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvd2Vic2VydmljZV90b2MuZGl0YW1hcCBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3dlYnNlcnZpY2VfdG9jLmRpdGFtYXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlYTk0NmMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvd2Vic2VydmljZV90b2MuZGl0YW1hcAorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIG1hcCBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBNYXAvL0VOIgotICJtYXAuZHRkIj4KLTxtYXAgaWQ9IndzbWFpbnRvYyIgdGl0bGU9IndzbWFpbnRvYyI+Ci08dG9waWNyZWYgaHJlZj0iY29uY2VwdHMvY3dzLmRpdGEiIG5hdnRpdGxlPSJXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQiPgotPHRvcGljcmVmIGhyZWY9ImNvbmNlcHRzL2N3c3N0YW5kYXJkcy5kaXRhIiBuYXZ0aXRsZT0iV2ViIHNlcnZpY2VzIHN0YW5kYXJkcyIKLXNjb3BlPSJsb2NhbCI+Ci08dG9waWNyZWYgaHJlZj0iY29uY2VwdHMvY3dzZGwuZGl0YSIgbmF2dGl0bGU9IldlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBMYW5ndWFnZSAoV1NETCkiPgotPHRvcGljcmVmIGhyZWY9InJlZi9yd3NkbC5kaXRhIiBuYXZ0aXRsZT0iV2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKSByZWZlcmVuY2UiPgotPC90b3BpY3JlZj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0iY29uY2VwdHMvY3NvYXAuZGl0YSIgbmF2dGl0bGU9IlNPQVAiPjwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0iLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2NvbmNlcHRzL2N1ZGRpLmRpdGEiCi1uYXZ0aXRsZT0iVW5pdmVyc2FsIERlc2NyaXB0aW9uLCBEaXNjb3ZlcnksIGFuZCBJbnRlZ3JhdGlvbiAoVURESSkiIHNjb3BlPSJwZWVyIj4KLTx0b3BpY3JlZiBocmVmPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGx1ZC5kaXRhIgotbmF2dGl0bGU9IlJlbGF0aW9uc2hpcCBiZXR3ZWVuIFVEREkgYW5kIFdTREwiIHNjb3BlPSJwZWVyIj48L3RvcGljcmVmPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJjb25jZXB0cy9jd3NpbC5kaXRhIiBuYXZ0aXRsZT0iV2ViIFNlcnZpY2VzIEluc3BlY3Rpb24gTGFuZ3VhZ2UgKFdTSUwpIj4KLTx0b3BpY3JlZiBocmVmPSJjb25jZXB0cy9jd3NpbHVkLmRpdGEiIG5hdnRpdGxlPSJSZWxhdGlvbnNoaXAgYmV0d2VlbiBVRERJIGFuZCBXU0lMIj4KLTwvdG9waWNyZWY+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9ImNvbmNlcHRzL2NqYXhycGMuZGl0YSIgbmF2dGl0bGU9IkpBWC1SUEMiPjwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0iY29uY2VwdHMvY2pzcjEwOS5kaXRhIiBuYXZ0aXRsZT0iSlNSIDEwOSBhbmQgSlNSIDkyMSI+PC90b3BpY3JlZj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgbmF2dGl0bGU9IldvcmtzcGFjZSBhbmQgdG9vbHMiPgotPHRvcGljcmVmIGhyZWY9ImNvbmNlcHRzL2N3c2lud3NhLmRpdGEiIG5hdnRpdGxlPSJUb29scyBmb3IgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50Igotc2NvcGU9ImxvY2FsIj4KLTx0b3BpY3JlZiBocmVmPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci9jb25jZXB0cy9jYXhpc3RvdmVyLmRpdGEiCi1uYXZ0aXRsZT0iQ3JlYXRpbmcgV2ViIHNlcnZpY2VzIHdpdGggdGhlIEFwYWNoZSBBeGlzIHJ1bi10aW1lIGVudmlyb25tZW50Igotc2NvcGU9InBlZXIiPjwvdG9waWNyZWY+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIG5hdnRpdGxlPSJDb25maWd1cmluZyB5b3VyIHdvcmtzcGFjZSI+Ci08dG9waWNyZWYgaHJlZj0icmVmL3J3c3ByZWYuZGl0YSIgbmF2dGl0bGU9IlNldHRpbmcgV2ViIHNlcnZpY2VzIHByZWZlcmVuY2VzIgotc2NvcGU9ImxvY2FsIj48L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9ImNvbmNlcHRzL2N3c2lvdmVyLmRpdGEiIG5hdnRpdGxlPSJXUy1JIGNvbXBsaWFuY2UiIHNjb3BlPSJsb2NhbCI+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdHdzaWNvbXBseS5kaXRhIiBuYXZ0aXRsZT0iU2V0dGluZyB0aGUgbGV2ZWwgb2YgV1MtSSBjb21wbGlhbmNlIgotc2NvcGU9ImxvY2FsIj48L3RvcGljcmVmPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci90YXNrcy90dG9tY2F0c2Vydi5kaXRhIgotbmF2dGl0bGU9IkNyZWF0aW5nIGFuIEFwYWNoZSBUb21jYXQgc2VydmVyIGFuZCAgV2ViIHByb2plY3QiIHNjb3BlPSJwZWVyIj4KLTwvdG9waWNyZWY+Ci08L3RvcGljcmVmPgotPC90b3BpY3JlZj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgbmF2dGl0bGU9IkltcG9ydGluZyBhbmQgY3JlYXRpbmcgcmVzb3VyY2VzIHVzZWQgYnkgV2ViIHNlcnZpY2VzIj4KLTxuYXZyZWYgbWFwcmVmPSIuLi9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci93c3dzZGxlZGl0b3J0X3RvYy5kaXRhbWFwIi8+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3RvdmVyd3MuZGl0YSIgbmF2dGl0bGU9IkNyZWF0aW5nIFdlYiBzZXJ2aWNlcyI+Ci08dG9waWNyZWYgaHJlZj0iY29uY2VwdHMvY3dzdG9wZG93bi5kaXRhIiBuYXZ0aXRsZT0iVG9wLWRvd24gV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50Igotc2NvcGU9ImxvY2FsIj4KLTx0b3BpY2dyb3VwPgotPHRvcGljcmVmIGhyZWY9Ii4uL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3Rhc2tzL3Rza2x3c2RsYS5kaXRhIgotbmF2dGl0bGU9IkNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgYW5kIEphdmEgYmVhbiBza2VsZXRvbiBmcm9tIFdTREwiIHNjb3BlPSJwZWVyIj4KLTwvdG9waWNyZWY+Ci08L3RvcGljZ3JvdXA+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9ImNvbmNlcHRzL2N3c2J0bXVwLmRpdGEiIG5hdnRpdGxlPSJCb3R0b20tdXAgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50Igotc2NvcGU9ImxvY2FsIj4KLTx0b3BpY2dyb3VwPgotPHRvcGljcmVmIGhyZWY9Ii4uL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2JlYW5hLmRpdGEiCi1uYXZ0aXRsZT0iQ3JlYXRpbmcgYSBXZWIgc2VydmljZSBmcm9tIGEgSmF2YSBiZWFuIiBzY29wZT0icGVlciI+PC90b3BpY3JlZj4KLTwvdG9waWNncm91cD4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgbmF2dGl0bGU9IkNyZWF0aW5nIFdlYiBzZXJ2aWNlIGNsaWVudHMiPgotPHRvcGljcmVmIGhyZWY9Ii4uL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90ZGlzY292LmRpdGEiCi1uYXZ0aXRsZT0iRGlzY292ZXJpbmcgYW5kIGltcG9ydGluZyBhIFdlYiBzZXJ2aWNlIiBzY29wZT0icGVlciI+PC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci90YXNrcy90c2FtcGFwcGEuZGl0YSIKLW5hdnRpdGxlPSJHZW5lcmF0aW5nIGEgSmF2YSBjbGllbnQgcHJveHkgZnJvbSBhIFdTREwgZG9jdW1lbnQgdXNpbmcgdGhlIEF4aXMgcnVuLXRpbWUgZW52aXJvbm1lbnQiCi1zY29wZT0icGVlciI+PC90b3BpY3JlZj4KLTxhbmNob3IgaWQ9ImV4dGVuZGluZ193c19jbGllbnRfY3JlYXRpb24iLz48L3RvcGljcmVmPgotPG5hdnJlZiBtYXByZWY9Ii4uL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci93c2F4aXNhbnRfdG9jLmRpdGFtYXAiLz4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgbmF2dGl0bGU9IlRlc3RpbmcgYW5kIHZhbGlkYXRpbmcgV2ViIHNlcnZpY2VzIj4KLTx0b3BpY3JlZiBocmVmPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHRlc3R3c2RsLmRpdGEiCi1uYXZ0aXRsZT0iVGVzdGluZyBXU0RMIGRvY3VtZW50cyBhbmQgV2ViIHNlcnZpY2VzIHdpdGggdGhlIFdTREwgRXhwbG9yZXIiCi1zY29wZT0icGVlciI+PC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSIuLi9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2RsdmFsLmRpdGEiIG5hdnRpdGxlPSJWYWxpZGF0aW5nIFdTREwiCi1zY29wZT0icGVlciI+PC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSIuLi9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3Rtb25pdG9yLmRpdGEiIG5hdnRpdGxlPSJUZXN0aW5nIFdlYiBzZXJ2aWNlcyB3aXRoIHRoZSBUQ1AvSVAgTW9uaXRvciIKLXNjb3BlPSJwZWVyIj4KLTx0b3BpY3JlZiBocmVmPSIuLi9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2l2YWwuZGl0YSIgbmF2dGl0bGU9IlZhbGlkYXRpbmcgV1MtSSBjb21wbGlhbmNlIG9mIFdlYiBzZXJ2aWNlIFNPQVAgdHJhZmZpYyIKLXNjb3BlPSJwZWVyIj48L3RvcGljcmVmPgotPC90b3BpY3JlZj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgbmF2dGl0bGU9IlB1Ymxpc2hpbmcgV2ViIHNlcnZpY2VzIj4KLTxuYXZyZWYgbWFwcmVmPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvd3Njb25zdW1wdGlvbnRfdG9jLmRpdGFtYXAiLz4KLTx0b3BpY3JlZiBocmVmPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdGdlbndzaWwuZGl0YSIKLW5hdnRpdGxlPSJHZW5lcmF0aW5nIFdTSUwiIHNjb3BlPSJwZWVyIj48L3RvcGljcmVmPgotPC90b3BpY3JlZj4KLTwvbWFwPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvd2Vic2VydmljZV90b2MueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvd2Vic2VydmljZV90b2MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNWQ3NmMzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3dlYnNlcnZpY2VfdG9jLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0KLTw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj8+Ci0KLTx0b2MgbGFiZWw9IndzbWFpbnRvYyIgdG9waWM9ImNvbmNlcHRzL2N3cy5odG1sIj4KLTx0b3BpYyBsYWJlbD0iV2ViIHNlcnZpY2VzIG92ZXJ2aWV3IiBocmVmPSJjb25jZXB0cy9jd3MuaHRtbCI+Ci08dG9waWMgbGFiZWw9IldlYiBzZXJ2aWNlcyBzdGFuZGFyZHMiIGhyZWY9ImNvbmNlcHRzL2N3c3N0YW5kYXJkcy5odG1sIj4KLTx0b3BpYyBsYWJlbD0iV2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKSIgaHJlZj0iY29uY2VwdHMvY3dzZGwuaHRtbCI+Ci08dG9waWMgbGFiZWw9IldlYiBTZXJ2aWNlcyBEZXNjcmlwdGlvbiBMYW5ndWFnZSAoV1NETCkgcmVmZXJlbmNlIiBocmVmPSJyZWYvcndzZGwuaHRtbCIvPgotPC90b3BpYz4KLTx0b3BpYyBsYWJlbD0iU09BUCIgaHJlZj0iY29uY2VwdHMvY3NvYXAuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJVbml2ZXJzYWwgRGVzY3JpcHRpb24sIERpc2NvdmVyeSwgYW5kIEludGVncmF0aW9uIChVRERJKSIgaHJlZj0iLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL2NvbmNlcHRzL2N1ZGRpLmh0bWwiPgotPHRvcGljIGxhYmVsPSJSZWxhdGlvbnNoaXAgYmV0d2VlbiBVRERJIGFuZCBXU0RMIiBocmVmPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGx1ZC5odG1sIi8+Ci08L3RvcGljPgotPHRvcGljIGxhYmVsPSJXZWIgU2VydmljZXMgSW5zcGVjdGlvbiBMYW5ndWFnZSAoV1NJTCkiIGhyZWY9ImNvbmNlcHRzL2N3c2lsLmh0bWwiPgotPHRvcGljIGxhYmVsPSJSZWxhdGlvbnNoaXAgYmV0d2VlbiBVRERJIGFuZCBXU0lMIiBocmVmPSJjb25jZXB0cy9jd3NpbHVkLmh0bWwiLz4KLTwvdG9waWM+Ci08dG9waWMgbGFiZWw9IkpBWC1SUEMiIGhyZWY9ImNvbmNlcHRzL2NqYXhycGMuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJKU1IgMTA5IGFuZCBKU1IgOTIxLSBJbXBsZW1lbnRpbmcgRW50ZXJwcmlzZSBXZWIgc2VydmljZXMiIGhyZWY9ImNvbmNlcHRzL2Nqc3IxMDkuaHRtbCIvPgotPC90b3BpYz4KLTx0b3BpYyBsYWJlbD0iV29ya3NwYWNlIGFuZCB0b29scyI+Ci08dG9waWMgbGFiZWw9IlRvb2xzIGZvciBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQiIGhyZWY9ImNvbmNlcHRzL2N3c2lud3NhLmh0bWwiPgotPHRvcGljIGxhYmVsPSJDcmVhdGluZyBXZWIgc2VydmljZXMgd2l0aCB0aGUgQXBhY2hlIEF4aXMgcnVuLXRpbWUgZW52aXJvbm1lbnQiIGhyZWY9Ii4uL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL2NvbmNlcHRzL2NheGlzdG92ZXIuaHRtbCIvPgotPC90b3BpYz4KLTx0b3BpYyBsYWJlbD0iQ29uZmlndXJpbmcgeW91ciB3b3Jrc3BhY2UiPgotPHRvcGljIGxhYmVsPSJXZWIgc2VydmljZXMgcHJlZmVyZW5jZXMiIGhyZWY9InJlZi9yd3NwcmVmLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iV2ViIHNlcnZpY2VzIGludGVyb3BlcmFiaWxpdHkgKFdTLUkpIiBocmVmPSJjb25jZXB0cy9jd3Npb3Zlci5odG1sIj4KLTx0b3BpYyBsYWJlbD0iU2V0dGluZyB0aGUgbGV2ZWwgb2YgV1MtSSBjb21wbGlhbmNlIiBocmVmPSJ0YXNrcy90d3NpY29tcGx5Lmh0bWwiLz4KLTwvdG9waWM+Ci08dG9waWMgbGFiZWw9IkNyZWF0aW5nIGFuIEFwYWNoZSBUb21jYXQgc2VydmVyIGFuZCBXZWIgcHJvamVjdCIgaHJlZj0iLi4vb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdGFza3MvdHRvbWNhdHNlcnYuaHRtbCIvPgotPC90b3BpYz4KLTwvdG9waWM+Ci08L3RvcGljPgotPHRvcGljIGxhYmVsPSJJbXBvcnRpbmcgYW5kIGNyZWF0aW5nIHJlc291cmNlcyB1c2VkIGJ5IFdlYiBzZXJ2aWNlcyI+Ci08bGluayB0b2M9Ii4uL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3dzd3NkbGVkaXRvcnRfdG9jLnhtbCIvPgotPC90b3BpYz4KLTx0b3BpYyBsYWJlbD0iRGV2ZWxvcGluZyBXZWIgc2VydmljZXMiIGhyZWY9InRhc2tzL3RvdmVyd3MuaHRtbCI+Ci08dG9waWMgbGFiZWw9IkNyZWF0aW5nIHRvcC1kb3duIFdlYiBzZXJ2aWNlcyIgaHJlZj0iY29uY2VwdHMvY3dzdG9wZG93bi5odG1sIj4KLTx0b3BpYyBsYWJlbD0iQ3JlYXRpbmcgYSBXZWIgc2VydmljZSBhbmQgSmF2YSBiZWFuIHNrZWxldG9uIGZyb20gV1NETCIgaHJlZj0iLi4vb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdGFza3MvdHNrbHdzZGxhLmh0bWwiLz4KLTwvdG9waWM+Ci08dG9waWMgbGFiZWw9IkNyZWF0aW5nIGJvdHRvbS11cCBXZWIgc2VydmljZXMiIGhyZWY9ImNvbmNlcHRzL2N3c2J0bXVwLmh0bWwiPgotPHRvcGljIGxhYmVsPSJDcmVhdGluZyBhIFdlYiBzZXJ2aWNlIGZyb20gYSBKYXZhIGJlYW4iIGhyZWY9Ii4uL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2JlYW5hLmh0bWwiLz4KLTwvdG9waWM+Ci08dG9waWMgbGFiZWw9IkNyZWF0aW5nIFdlYiBzZXJ2aWNlIGNsaWVudHMiPgotPHRvcGljIGxhYmVsPSJEaXNjb3ZlcmluZyBhbmQgaW1wb3J0aW5nIGEgV2ViIHNlcnZpY2UiIGhyZWY9Ii4uL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90ZGlzY292Lmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iR2VuZXJhdGluZyBhIEphdmEgY2xpZW50IHByb3h5IGZyb20gYSBXU0RMIGRvY3VtZW50IHVzaW5nIHRoZSBBeGlzIHJ1bi10aW1lIGVudmlyb25tZW50IiBocmVmPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci90YXNrcy90c2FtcGFwcGEuaHRtbCIvPgotPGFuY2hvciBpZD0iZXh0ZW5kaW5nX3dzX2NsaWVudF9jcmVhdGlvbiIvPgotPC90b3BpYz4KLTxsaW5rIHRvYz0iLi4vb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3dzYXhpc2FudF90b2MueG1sIi8+Ci08L3RvcGljPgotPHRvcGljIGxhYmVsPSJUZXN0aW5nIGFuZCB2YWxpZGF0aW5nIFdlYiBzZXJ2aWNlcyI+Ci08dG9waWMgbGFiZWw9IlRlc3RpbmcgV1NETCBkb2N1bWVudHMgYW5kIFdlYiBzZXJ2aWNlcyB3aXRoIHRoZSBXU0RMIEV4cGxvcmVyIiBocmVmPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHRlc3R3c2RsLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iVmFsaWRhdGluZyBXU0RMIiBocmVmPSIuLi9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2RsdmFsLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iVGVzdGluZyBXZWIgc2VydmljZXMgd2l0aCB0aGUgVENQL0lQIE1vbml0b3IiIGhyZWY9Ii4uL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvdGFza3MvdG1vbml0b3IuaHRtbCI+Ci08dG9waWMgbGFiZWw9IlZhbGlkYXRpbmcgV1MtSSBjb21wbGlhbmNlIG9mIFdlYiBzZXJ2aWNlIFNPQVAgdHJhZmZpYyIgaHJlZj0iLi4vb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci90YXNrcy90d3NpdmFsLmh0bWwiLz4KLTwvdG9waWM+Ci08L3RvcGljPgotPHRvcGljIGxhYmVsPSJQdWJsaXNoaW5nIFdlYiBzZXJ2aWNlcyI+Ci08bGluayB0b2M9Ii4uL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci93c2NvbnN1bXB0aW9udF90b2MueG1sIi8+Ci08dG9waWMgbGFiZWw9IkdlbmVyYXRpbmcgV1NJTCIgaHJlZj0iLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3RnZW53c2lsLmh0bWwiLz4KLTwvdG9waWM+Ci08L3RvYz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmluZm9wb3AvLmN2c2lnbm9yZSBiL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmluZm9wb3AvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE0NDg3Yy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5pbmZvcG9wLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1idWlsZC54bWwKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmluZm9wb3AvLnByb2plY3QgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5pbmZvcG9wLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNmI1ZDY5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmluZm9wb3AvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS5qc3Qud3MuaW5mb3BvcDwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmluZm9wb3AvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5pbmZvcG9wL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjljNzZhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmluZm9wb3AvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qc3Qud3MuaW5mb3BvcDsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjIwMy5xdWFsaWZpZXIKLUJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yLjAKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuaW5mb3BvcC9hYm91dC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuaW5mb3BvcC9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2RiMzZlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmluZm9wb3AvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuaW5mb3BvcC9idWlsZC5wcm9wZXJ0aWVzIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuaW5mb3BvcC9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyN2JmYjRlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmluZm9wb3AvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotYmluLmluY2x1ZGVzID0gcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICB3ZWJzZXJ2aWNldWktZjFDb250ZXh0cy54bWwsXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmluZm9wb3AvcGx1Z2luLnByb3BlcnRpZXMgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5pbmZvcG9wL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjExYWZjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmluZm9wb3AvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSMgcHJvcGVydGllcyBmaWxlIGZvciBvcmcuZWNsaXBzZS5qc3Qud3MuaW5mb3BvcAotQnVuZGxlLVZlbmRvci4wID0gRWNsaXBzZS5vcmcKLUJ1bmRsZS1OYW1lLjAgPSBXZWIgc2VydmljZXMgVUkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5pbmZvcG9wL3BsdWdpbi54bWwgYi9kb2NzL29yZy5lY2xpcHNlLmpzdC53cy5pbmZvcG9wL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzZTRhOTQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuaW5mb3BvcC9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLTw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj8+IAotPCEtLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIC0tPgotPHBsdWdpbj4KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLmNvbnRleHRzIj4KLQkJPGNvbnRleHRzIGZpbGU9IndlYnNlcnZpY2V1aS1mMUNvbnRleHRzLnhtbCIgcGx1Z2luPSJvcmcuZWNsaXBzZS5qc3Qud3MudWkiLz4KLQk8L2V4dGVuc2lvbj4KLTwvcGx1Z2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2UuanN0LndzLmluZm9wb3Avd2Vic2VydmljZXVpLWYxQ29udGV4dHMueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuaW5mb3BvcC93ZWJzZXJ2aWNldWktZjFDb250ZXh0cy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3OTgxZGUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS5qc3Qud3MuaW5mb3BvcC93ZWJzZXJ2aWNldWktZjFDb250ZXh0cy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAuY29udGV4dHMiPz4KLTwhLS0gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAtLT4KLTxjb250ZXh0cz4KLQotPCEtLURSRVM6IFJlc291cmNlIFNlbGVjdGlvbiBEaWFsb2ctLT4KLTxjb250ZXh0IGlkPSJEUkVTMDAwMSI+Ci08IS0tUmVzb3VyY2UgVHlwZSBkcm9wIGRvd24tLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgYSByZXNvdXJjZSBmcm9tIHdoaWNoIHRvIGNyZWF0ZSBhIFdlYiBzZXJ2aWNlLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci08Y29udGV4dCBpZD0iRFJFUzAwMDIiPgotPCEtLVJlc291cmNlIHRyZWUtLT4KLTxkZXNjcmlwdGlvbj5MaXN0cyB0aGUgcmVzb3VyY2VzIHRoYXQgY2FuIGJlIHR1cm5lZCBpbnRvIGEgV2ViIHNlcnZpY2UuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPCEtLVBQUk06IFJlc291cmNlIE1hbmFnZW1lbnQgUHJlZmVyZW5jZSBwYWdlLS0+Ci0KLTxjb250ZXh0IGlkPSJQUFJNMDAwMSI+Ci08IS0tbWFpbiBwYWdlLS0+Ci08ZGVzY3JpcHRpb24+VGhlIFJlc291cmNlIE1hbmFnZW1lbnQgcHJlZmVyZW5jZXMgZW5hYmxlIHlvdSB0byBkZXRlcm1pbmUgdGhlIGRlZmF1bHRzIHRoYXQgeW91IHdhbnQgdG8gdXNlIHdoZW4gY3JlYXRpbmcgeW91ciBXZWIgc2VydmljZS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFBSTTAwMDIiPgotPCEtLUZpbGUgb3ZlcndyaXRlIGNoZWNrIGJveC0tPgotPGRlc2NyaXB0aW9uPlRoaXMgY2hlY2tib3ggYWxsb3dzIHlvdSB0byBvdmVyd3JpdGUgZmlsZXMgd2l0aG91dCByZWNlaXZpbmcgYSB3YXJuaW5nIG1lc3NhZ2UgYXNraW5nIGZvciBjb25maXJtYXRpb24gd2hlbiBvdmVyd3JpdGluZyBmaWxlcy48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotPGNvbnRleHQgaWQ9IlBQUk0wMDAzIj4KLTwhLS1DcmVhdGUgZm9sZGVycyBjaGVjayBib3gtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhpcyBjaGVja2JveCB0byBjcmVhdGUgZm9sZGVycyBhbmQgZm9sZGVyIHN0cnVjdHVyZXMgd2l0aG91dCByZWNlaXZpbmcgYSB3YXJuaW5nIG1lc3NhZ2UgYXNraW5nIGZvciBjb25maXJtYXRpb24uPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLTxjb250ZXh0IGlkPSJQUFJNMDAwNCI+Ci08IS0tQ2hlY2sgb3V0IGZpbGVzIGNoZWNrIGJveC0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGlzIGNoZWNrYm94IHRvIGNoZWNrIG91dCBmaWxlcyB3aXRob3V0IHJlY2VpdmluZyBhIHdhcm5pbmcgbWVzc2FnZSBhc2tpbmcgZm9yIGNvbmZpcm1hdGlvbi48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFBSTTAwMDUiPgotPCEtLVNrZWxldG9uIG1lcmdlLS0+Ci08ZGVzY3JpcHRpb24+VGhpcyBjaGVjayBib3ggaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4gSWYgdGhpcyBjaGVjayBib3ggaXMgZW5hYmxlZCwgd2hlbiBhIHNrZWxldG9uIAotZmlsZSBvZiB0aGUgc2FtZSBuYW1lIGFscmVhZHkgZXhpc3RzIGluIHRoZSB3b3Jrc3BhY2UsIHRoZSBuZXdseSBnZW5lcmF0ZWQgc2tlbGV0b24gZmlsZSB3aWxsIG1lcmdlIAotd2l0aCB0aGUgZXhpc3Rpbmcgc2tlbGV0b24gZmlsZS4gIEVuYWJsZSB0aGlzIHRvIHByZXNlcnZlIGNvZGUgdGhhdCB5b3UgaGF2ZSBhbHJlYWR5IG1vZGlmaWVkIGluIHRoZSAKLWV4aXN0aW5nIHNrZWxldG9uIGZpbGVzLiAgCi08YnIgLz4KLU5vdGUgdGhhdCB3aGVuIHRoaXMgcHJlZmVyZW5jZSBpcyBlbmFibGVkLCBpZiB5b3UgY2hhbmdlIHRoZSByZXR1cm4gdHlwZQotb2YgYW4gaW50ZXJmYWNlLCB0aGUgcmVzdWx0aW5nIHNrZWxldG9uIGZpbGUgd2lsbCBoYXZlIGEgbWV0aG9kIHJldHVybmluZyB0aGUKLXR5cGUgYXMgZGVmaW5lZCBpbiB0aGUgbmV3IGludGVyZmFjZSBidXQgd291bGQgaGF2ZSBhIG1ldGhvZCBib2R5IGZyb20gdGhlCi1vcmlnaW5hbCBza2VsZXRvbiBmaWxlICh3aGljaCB3b3VsZCBiZSByZXR1cm5pbmcgYSBkaWZmZXJlbnQgdHlwZSkuICBUaGlzIHdpbGwKLXJlc3VsdCBpbiBhbiBjb21waWxhdGlvbiBlcnJvciB0aGF0IHRoZSB5b3Ugd2lsbCBoYXZlIHRvIGNvcnJlY3QgbWFudWFsbHkuCi0KLTwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTwhLS1QUFNEOiBTY2VuYXJpbyBEZWZhdWx0cyBQcmVmZXJlbmNlIHBhZ2UtLT4KLQotPCEtLVNjZW5hcmlvRGVmYXVsdHNQcmVmZXJlbmNlUGFnZS5qYXZhLS0+Ci08Y29udGV4dCBpZD0iUFBTRDAwMDEiPgotPCEtLVBQU0QwMDAxIGZvciB0aGUgU2NlbmFyaW8gRGVmYXVsdHMgUHJlZmVyZW5jZSBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+VXNlIHRoaXMgcGFnZSB0byBzZWxlY3QgdGhlIGRlZmF1bHQgc2V0dGluZ3MgZm9yIHRoZSBXZWIgc2VydmljZXMgd2l6YXJkLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci08Y29udGV4dCBpZD0iUFBTRDAwMDIiPgotPCEtLVBQU0QwMDAyIGZvciB0aGUgbGF1bmNoIHNhbXBsZSBjaGVjayBib3ggb24gdGhlIFNjZW5hcmlvIERlZmF1bHRzIFByZWZlcmVuY2UgUGFnZS0tPgotPGRlc2NyaXB0aW9uPlRoZSBTY2VuYXJpbyBEZWZhdWx0cyBwcmVmZXJlbmNlcyBlbmFibGUgeW91IHRvIGRldGVybWluZSB0aGUgZGVmYXVsdHMgdGhhdCB5b3Ugd2FudCB0byB1c2Ugd2hlbiBjcmVhdGluZyB5b3VyIFdlYiBzZXJ2aWNlLiBUaGUgc2FtcGxlIFdlYiBhcHBsaWNhdGlvbiBkZW1vbnN0cmF0ZXMgaG93IHRvIGNvZGUgdGhlIHByb3h5IGZpbGUuIFNlbGVjdCB0aGlzIGNoZWNrIGJveCB0byBsYXVuY2ggc2FtcGxlIGFwcGxpY2F0aW9uIGFmdGVyIGl0IGlzIGNyZWF0ZWQuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLTxjb250ZXh0IGlkPSJQUFNEMDAwNCI+Ci08IS0tUFBTRDAwMDQgZm9yIHRoZSBzYW1wbGUgSlNQIHR5cGUgY29tYm8gYm94IG9uIHRoZSBTY2VuYXJpbyBEZWZhdWx0cyBQcmVmZXJlbmNlIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5TZWxlY3QgdGhlIHR5cGUgb2Ygc2FtcGxlIEpTUCB0byBiZSBjcmVhdGVkLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci08Y29udGV4dCBpZD0iUFBTRDAwMDMiPgotPCEtLVBQU0QwMDAzIGZvciB0aGUgd2ViIGV4cGxvcmVyIHR5cGUgY29tYm8gYm94IG9uIHRoZSBTY2VuYXJpbyBEZWZhdWx0cyBQcmVmZXJlbmNlIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5UaGUgU2NlbmFyaW8gRGVmYXVsdHMgcHJlZmVyZW5jZXMgZW5hYmxlIHlvdSB0byBkZXRlcm1pbmUgdGhlIGRlZmF1bHRzIHRoYXQgeW91IHdhbnQgdG8gdXNlIHdoZW4gY3JlYXRpbmcgeW91ciBXZWIgc2VydmljZS4gU2VsZWN0IGZyb20gdGhlIGF2YWlsYWJsZSBXZWIgc2VydmljZXMgZXhwbG9yZXJzLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci08Y29udGV4dCBpZD0iUFBTRDAwMDUiPgotPCEtLVBQU0QwMDA1IGZvciB0aGUgVXNlci1kZWZpbmVkIFVEREkgQ2F0ZWdvcnkgRGF0YSBDb2x1bW4gRGVsaW1pdGVyIHRleHQgZmllbGQgb24gdGhlIFNjZW5hcmlvIERlZmF1bHRzIFByZWZlcmVuY2UgUGFnZS0tPgotPGRlc2NyaXB0aW9uPkVudGVyIHRoZSBjaGFyYWN0ZXIgeW91IHdhbnQgdG8gdXNlIGFzIGEgY29sdW1uIGRlbGltaXRlciBmb3IgdXNlci1kZWZpbmVkIFVEREkgQ2F0ZWdvcnkgZGF0YS48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotPGNvbnRleHQgaWQ9IlBQU0QwMDA2Ij4KLTwhLS1QUFNEMDAwNiBmb3IgdGhlIFVzZXItZGVmaW5lZCBVRERJIENhdGVnb3J5IERhdGEgU3RyaW5nIERlbGltaXRlciB0ZXh0IGZpZWxkIG9uIHRoZSBTY2VuYXJpbyBEZWZhdWx0cyBQcmVmZXJlbmNlIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5FbnRlciB0aGUgY2hhcmFjdGVyIHlvdSB3YW50IHRvIHVzZSBhcyBhIHN0cmluZyBkZWxpbWl0ZXIgZm9yIHVzZXItZGVmaW5lZCBVRERJIENhdGVnb3J5IGRhdGEuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotCi08Y29udGV4dCBpZD0iUFBBRDAwMDQiPgotPCEtLSAgSGlkZSBnZW5lcmF0ZSBjbGllbnQgY2hlY2sgYm94LS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHRoaXMgY2hlY2sgYm94IHRvIGhpZGUgdGhlIG9wdGlvbiBvZiBnZW5lcmF0aW5nIGEgV2ViIHNlcnZpY2UgY2xpZW50IHdoZW4geW91IHJpZ2h0LWNsaWNrIGEgZmlsZSBpbiB0aGUgUHJvamVjdCBFeHBsb3JlciBvciBOYXZpZ2F0b3IuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBQQUQwMDA1Ij4KLTwhLS0gIEhpZGUgZ2VuZXJhdGUgc2FtcGxlIGNoZWNrIGJveC0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGlzIGNoZWNrIGJveCB0byBoaWRlIHRoZSBvcHRpb24gb2YgZ2VuZXJhdGluZyBzYW1wbGUgSlNQIGNvZGUgZm9yIHRoZSBXZWIgc2VydmljZSB3aGVuIHlvdSByaWdodC1jbGljayBhIGZpbGUgaW4gdGhlIFByb2plY3QgRXhwbG9yZXIgb3IgTmF2aWdhdG9yLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQUEFEMDAwNiI+Ci08IS0tICBjcmVhdGUgd2ViIHNlcnZpY2UgY2hlY2sgYm94LS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHRoaXMgY2hlY2sgYm94IHRvIGhpZGUgdGhlIG9wdGlvbiBvZiBnZW5lcmF0aW5nIGEgV2ViIHNlcnZpY2UgY2xpZW50IHdoZW4geW91IHJpZ2h0LWNsaWNrIGEgZmlsZSBpbiB0aGUgUHJvamVjdCBFeHBsb3JlciBvciBOYXZpZ2F0b3IuPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBQQUQwMDA4Ij4KLTwhLS0gIGdlbmVyYXRlIHNrZWxldG9uIGNoZWNrIGJveC0tPgotPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGlzIGNoZWNrIGJveCB0byBoaWRlIHRoZSBvcHRpb24gb2YgZ2VuZXJhdGluZyBza2VsZXRvbiBKYXZhIGNsYXNzZXMgd2hlbiB5b3UgcmlnaHQtY2xpY2sgYSBmaWxlIGluIHRoZSBQcm9qZWN0IEV4cGxvcmVyIG9yIE5hdmlnYXRvci4gVGhlIHNrZWxldG9uIGJlYW4gY29udGFpbnMgYSBzZXQgb2YgbWV0aG9kcyB0aGF0IGNvcnJlc3BvbmQgdG8gdGhlIG9wZXJhdGlvbnMgZGVzY3JpYmVkIGluIHRoZSBXU0RMIGRvY3VtZW50LiBXaGVuIHRoZSBiZWFuIGlzIGNyZWF0ZWQsIGVhY2ggbWV0aG9kIGhhcyBhIHRyaXZpYWwgaW1wbGVtZW50YXRpb24gdGhhdCB5b3UgcmVwbGFjZSBieSBlZGl0aW5nIHRoZSBiZWFuLjwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQUEFEMDAwOSI+Ci08IS0tICBwdWJsaXNoIFdTREwgY2hlY2sgYm94LS0+Ci08ZGVzY3JpcHRpb24+U2VsZWN0IHRoaXMgY2hlY2sgYm94IHRvIGhpZGUgdGhlIG9wdGlvbiBvZiBwdWJsaXNoaW5nIHRoZSBXZWIgc2VydmljZSdzIFdTREwgZmlsZSB0byBhIFVEREkgcmVnaXN0cnkgd2hlbiB5b3UgcmlnaHQtY2xpY2sgYSBmaWxlIGluIHRoZSBQcm9qZWN0IEV4cGxvcmVyIG9yIE5hdmlnYXRvci48L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi0KLTwvY29udGV4dHM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvLmN2c2lnbm9yZSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4NDY2OGMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyXzEuMC4wLmphcgotYmFrCi10ZW1wCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci8ucHJvamVjdCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjM5NTBiLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvRG9jQnVpbGQueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvRG9jQnVpbGQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjU0MGZlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL0RvY0J1aWxkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgotPCEtLSAKLQotCVRoaXMgc2NyaXB0IGJ1aWxkIHRoZSBIZWxwIHBsdWctaW4gYnkgdHJhbnNmb3JtaW5nIHRoZSBESVRBIHNvdXJjZSBmaWxlcyBpbnRvIEhUTUwuCi0JCi0JVG8gdXNlIHRoaXMgc2NyaXB0LCB5b3UgbXVzdCBpbnN0YWxsIERJVEEtT1Qgb24geW91ciBtYWNoaW5lIGluIHRoZSBkaXJlY3RvcnkKLQlkZWZpbmVkIGJ5IHRoZSBkaXRhLm90LmRpciBwcm9wZXJ0eS4KLQkKLQlSdW4gdGhlIGRlZmF1bHQgdGFyZ2V0IGFmdGVyIHlvdSBlZGl0IHRoZSBESVRBIHNvdXJjZSBmaWxlcyB0byByZWdlbmVyYXRlIHRoZSBIVE1MLgotCQotCVRvIGN1c3RvbWl6ZSB0aGlzIHNjcmlwdCBmb3Igb3RoZXIgSGVscCBwbHVnLWlucywgbW9kaWZ5IHRoZSB2YWx1ZSBvZiB0aGUgYXJncy5pbnB1dCBwcm9wZXJ0eQotCXRvIGJlIHRoZSBESVRBIG1hcCBmaWxlIGZvciB0aGUgcGx1Zy1pbi4KLQkKLQlOT1RFOiBUaGlzIHNjcmlwdCBhc3N1bWVzIHRoYXQgbGlua3MgdG8gc2libGluZyBIZWxwIHBsdWctaW5zIGhhdmUgc2NvcGU9InBlZXIiLCBvdGhlcndpc2UgdGhlCi0Jb3V0cHV0IGRpcmVjdG9yeSBzdHJ1Y3R1cmUgd2lsbCBiZSBzaGlmdGVkIGluY29ycmVjdGx5LgotCQotCU5PVEU6IFRoaXMgc2NyaXB0IGFzc3VtZXMgdGhhdCB5b3UgaGFuZCBjb2RlIHlvdXIgcGx1Z2luLnhtbCBmaWxlIGluIG15cGx1Z2luLnhtbC4gVGhpcyBmaWxlCi0Jd2lsbCBiZSBjb3BpZWQgb3ZlciB0aGUgZ2VuZXJhdGVkIHBsdWdpbi54bWwgd2hpY2ggaXMgY3VycmVudGx5IG5vdCBiZWluZyBnZW5lcmF0ZWQgY29ycmVjdGx5Ci0JYnkgRElUQS1PVC4KLQkKLQlDaGFuZ2VMb2c6Ci0JMjAwNi0wNC0wNSBBcnRodXIgUnltYW4gPHJ5bWFuQGNhLmlibS5jb20+Ci0JLSBDcmVhdGVkLgotCi0tLT4KLTxwcm9qZWN0IG5hbWU9ImVjbGlwc2VoZWxwIiBkZWZhdWx0PSJhbGwiPgotCi0JPHByb3BlcnR5IG5hbWU9ImRpdGEub3QuZGlyIiBsb2NhdGlvbj0iQzovRElUQS1PVDEuMi4yIiAvPgotCi0JPHBhdGggaWQ9ImRvc3QuY2xhc3MucGF0aCI+Ci0JCTxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtkaXRhLm90LmRpcn0ke2ZpbGUuc2VwYXJhdG9yfWxpYiR7ZmlsZS5zZXBhcmF0b3J9ZG9zdC5qYXIiIC8+Ci0JPC9wYXRoPgotCi0JPHRhc2tkZWYgbmFtZT0iaW50ZWdyYXRlIiBjbGFzc25hbWU9Im9yZy5kaXRhLmRvc3QucGxhdGZvcm0uSW50ZWdyYXRvclRhc2siPgotCQk8Y2xhc3NwYXRoIHJlZmlkPSJkb3N0LmNsYXNzLnBhdGgiIC8+Ci0JPC90YXNrZGVmPgotCTx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJpbnRlZ3JhdGUsIGVjbGlwc2VoZWxwIj4KLQk8L3RhcmdldD4KLQk8dGFyZ2V0IG5hbWU9ImludGVncmF0ZSI+Ci0JCTxpbnRlZ3JhdGUgZGl0YWRpcj0iJHtkaXRhLm90LmRpcn0iIC8+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tIHJldmlzZSBiZWxvdyBoZXJlIC0tPgotCTx0YXJnZXQgbmFtZT0iZWNsaXBzZWhlbHAiPgotCQk8YW50IGFudGZpbGU9IiR7ZGl0YS5vdC5kaXJ9JHtmaWxlLnNlcGFyYXRvcn1jb25kdWN0b3IueG1sIiB0YXJnZXQ9ImluaXQiIGRpcj0iJHtkaXRhLm90LmRpcn0iPgotCQkJPHByb3BlcnR5IG5hbWU9ImFyZ3MuY29weWNzcyIgdmFsdWU9Im5vIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9ImFyZ3MuY3NzcGF0aCIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5kb2MudXNlciIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJhcmdzLmVjbGlwc2UucHJvdmlkZXIiIHZhbHVlPSJFY2xpcHNlLm9yZyIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJhcmdzLmVjbGlwc2UudmVyc2lvbiIgdmFsdWU9IjEuNS4wIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9ImFyZ3MuaW5wdXQiIGxvY2F0aW9uPSJ3c2F4aXNhbnRfdG9jLmRpdGFtYXAiIC8+IAotCQkJPHByb3BlcnR5IG5hbWU9ImNsZWFuLnRlbXAiIHZhbHVlPSJ0cnVlIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9ImRpdGEuZXh0bmFtZSIgdmFsdWU9Ii5kaXRhIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9ImRpdGEudGVtcC5kaXIiIGxvY2F0aW9uPSJ0ZW1wIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9Im91dHB1dC5kaXIiIGxvY2F0aW9uPSIuLiIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJ0cmFuc3R5cGUiIHZhbHVlPSJlY2xpcHNlaGVscCIgLz4KLQkJPC9hbnQ+Ci0JCTxjb3B5IGZpbGU9Im15cGx1Z2luLnhtbCIgdG9maWxlPSJwbHVnaW4ueG1sIiBvdmVyd3JpdGU9InllcyIgLz4KLQk8L3RhcmdldD4KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL01FVEEtSU5GL01BTklGRVNULk1GIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyNmI2NmQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXI7c2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS41LjEucXVhbGlmaWVyCi1CdW5kbGUtVmVuZG9yOiAlcGx1Z2luUHJvdmlkZXIKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL2Fib3V0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2RiMzZlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lIDA2LCAyMDA3PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL2J1aWxkLnByb3BlcnRpZXMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzc0Y2UzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi1iaW4uaW5jbHVkZXMgPSBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIHdzYXhpc2FudF90b2MueG1sLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgdG9waWNzLyouaHRtKixcCi0gICAgICAgICAgICAgICBpbmRleC8sXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvCi1zcmMuaW5jbHVkZXMgPSBidWlsZC5wcm9wZXJ0aWVzLFwKLQkJICAgICAgICoubWFwbGlzdCxcCi0gICAgICAgICAgICAgICAqLmRpdGFtYXAsXAotCQkgICAgICAgdG9waWNzLyouZGl0YSAgICAgICAgICAgICAgIAotYmluLmV4Y2x1ZGVzID0gRG9jQnVpbGQueG1sLFwKLSAgICAgICAgICAgICAgIG15UGx1Z2luKi54bWwKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9pbmRleC9fNi5jZnMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9pbmRleC9fNi5jZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1OTJhMWYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvaW5kZXgvXzYuY2ZzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvaW5kZXgvZGVsZXRhYmxlIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvaW5kZXgvZGVsZXRhYmxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDIzMjQyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL2luZGV4L2RlbGV0YWJsZQorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL2luZGV4L2luZGV4ZWRfY29udHJpYnV0aW9ucyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL2luZGV4L2luZGV4ZWRfY29udHJpYnV0aW9ucwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTU1NzBkMC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9pbmRleC9pbmRleGVkX2NvbnRyaWJ1dGlvbnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUaGlzIGlzIGEgZ2VuZXJhdGVkIGZpbGU7IGRvIG5vdCBlZGl0Lg0KLSNXZWQgTWF5IDA5IDE0OjEzOjU4IEVEVCAyMDA3DQotb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyPW9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlclxuMS41LjAucXVhbGlmaWVyDQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kZXBlbmRlbmNpZXMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9pbmRleC9pbmRleGVkX2RlcGVuZGVuY2llcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmI5ZGU1Mi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9pbmRleC9pbmRleGVkX2RlcGVuZGVuY2llcworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotI1RoaXMgaXMgYSBnZW5lcmF0ZWQgZmlsZTsgZG8gbm90IGVkaXQuDQotI1dlZCBNYXkgMDkgMTQ6MTM6NTggRURUIDIwMDcNCi1sdWNlbmU9MS40LjEwMy52MjAwNjA2MDENCi1hbmFseXplcj1vcmcuZWNsaXBzZS5oZWxwLmJhc2VcIzMuMi4wLnYyMDA2MDYwMT9sb2NhbGVcPWVuDQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kb2NzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kb2NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGE2Y2IwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL2luZGV4L2luZGV4ZWRfZG9jcworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotI1RoaXMgaXMgYSBnZW5lcmF0ZWQgZmlsZTsgZG8gbm90IGVkaXQuDQotI1dlZCBNYXkgMDkgMTQ6MTM6NTggRURUIDIwMDcNCi0vb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy9yYnV3c2EuaHRtbD0wDQotL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci90b3BpY3MvdHdid3NhLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL3J0ZHdzYS5odG1sPTANCi0vb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy9yd3NjbGllbnRhLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL3R3YndzY2xpZW50YS5odG1sPTANCi0vb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy9jd3NheGlzYW50Lmh0bWw9MA0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL2luZGV4L3NlZ21lbnRzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvaW5kZXgvc2VnbWVudHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5YjVkMGMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvaW5kZXgvc2VnbWVudHMKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9teXBsdWdpbi54bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9teXBsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmNTk4NzMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvbXlwbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLTw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj8+IAotCi08IS0tIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gLS0+Ci0KLTxwbHVnaW4+Ci0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC50b2MiPgotICAgICAgICAgPHRvYyBmaWxlPSJ3c2F4aXNhbnRfdG9jLnhtbCIgLz4KLSAgICAgICA8aW5kZXggcGF0aD0iaW5kZXgvIi8+Ci0gICA8L2V4dGVuc2lvbj4KLQotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIubWFwbGlzdCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci5tYXBsaXN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjVmMjYzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci5tYXBsaXN0CisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08bWFwbGlzdCB2ZXJzaW9uPSIzLjYuMiI+DQotICA8bmF2Pg0KLSAgICA8bWFwIGZpbGU9IndzYXhpc2FudF90b2MuZGl0YW1hcCIvPg0KLSAgPC9uYXY+DQotICA8bGluaz4NCi0gICAgPG1hcCBmaWxlPSJ3c2F4aXNhbnRfdG9jLmRpdGFtYXAiLz4NCi0gIDwvbGluaz4NCi08L21hcGxpc3Q+DQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvcGx1Z2luLnByb3BlcnRpZXMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzVjMmRhYy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIE5MU19NRVNTQUdFRk9STUFUX1ZBUiAKLSMgTkxTX0VOQ09ESU5HPVVURi04IAotCi1wbHVnaW5OYW1lICAgICA9IFdlYiBzZXJ2aWNlcyBBeGlzIEFudCB0YXNrIGRvY3VtZW50YXRpb24KLXBsdWdpblByb3ZpZGVyID0gRWNsaXBzZS5vcmcKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3BsdWdpbi54bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjU5ODczLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotPD9OTFMgVFlQRT0ib3JnLmVjbGlwc2UuaGVscC50b2MiPz4gCi0KLTwhLS0gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAtLT4KLQotPHBsdWdpbj4KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI+Ci0gICAgICAgICA8dG9jIGZpbGU9IndzYXhpc2FudF90b2MueG1sIiAvPgotICAgICAgIDxpbmRleCBwYXRoPSJpbmRleC8iLz4KLSAgIDwvZXh0ZW5zaW9uPgotCi08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy9jd3NheGlzYW50LmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci90b3BpY3MvY3dzYXhpc2FudC5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MmNmODI2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy9jd3NheGlzYW50LmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+DQotPCFET0NUWVBFIGNvbmNlcHQgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgQ29uY2VwdC8vRU4iDQotICJjb25jZXB0LmR0ZCI+DQotPGNvbmNlcHQgaWQ9ImNyZWF0aW5nYXdlYnNlcnZpY2Vmcm9tYWphdmFiZWFuIiB4bWw6bGFuZz0iZW4tdXMiPg0KLTx0aXRsZT5DcmVhdGluZyBBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQgV2ViIHNlcnZpY2VzIGFuZCBjbGllbnRzIHVzaW5nIFdlYg0KLXNlcnZpY2VzIEFudCB0YXNrczwvdGl0bGU+DQotPHRpdGxlYWx0cz4NCi08c2VhcmNodGl0bGU+Q3JlYXRpbmcgQXhpcyBydW50aW1lIGVudmlyb25tZW50IFdlYiBzZXJ2aWNlcyBhbmQgY2xpZW50cyB1c2luZw0KLUFudCB0YXNrczwvc2VhcmNodGl0bGU+DQotPC90aXRsZWFsdHM+DQotPHNob3J0ZGVzYz5JZiB5b3UgcHJlZmVyIG5vdCB0byB1c2UgdGhlIFdlYiBzZXJ2aWNlIHdpemFyZCwgeW91IGNhbiB1c2UgQW50DQotZmlsZXMgdG8gY3JlYXRlIFdlYiBzZXJ2aWNlcyBhbmQgY2xpZW50cyB1c2luZyB0aGUgQXhpcyBydW50aW1lIGVudmlyb25tZW50Lg0KLVRoZSBXZWIgc2VydmljZXMgQW50IHRhc2tzIGNhbiBiZSBydW4gaW4gdHdvIHdheXM6IHRocm91Z2ggdGhlIEVjbGlwc2Ugd29ya3NwYWNlDQotdXNpbmcgPG1lbnVjYXNjYWRlPjx1aWNvbnRyb2w+UnVuIEFzPC91aWNvbnRyb2w+PHVpY29udHJvbD5BbnQgQnVpbGQuLi48L3VpY29udHJvbD4NCi08L21lbnVjYXNjYWRlPiwgb3IgdGhleSBjYW4gYmUgcnVuIGhlYWRsZXNzIHRocm91Z2ggdGhlIGNvbW1hbmQgbGluZS4gT25jZQ0KLXlvdSBoYXZlIGNyZWF0ZWQgeW91ciBXZWIgc2VydmljZSwgeW91IGNhbiB0aGVuIGRlcGxveSBpdCB0byBhIHNlcnZlciwgdGVzdA0KLWl0LCBhbmQgcHVibGlzaCBpdCBhcyBhIGJ1c2luZXNzIGVudGl0eSBvciBidXNpbmVzcyBzZXJ2aWNlLjwvc2hvcnRkZXNjPg0KLTxjb25ib2R5Pg0KLTxzZWN0aW9uPjx0aXRsZT5QcmVyZXF1aXNpdGVzPC90aXRsZT48cD5CZWZvcmUgeW91IGNyZWF0ZSBhIFdlYiBzZXJ2aWNlIG9yDQotY2xpZW50IHVzaW5nIHRoZSBBbnQgdGFza3MsIHlvdSBuZWVkIHRvIGNvbXBsZXRlIGEgZmV3IHByZXJlcXVpc2l0ZXMuPC9wPjx1bD4NCi08bGk+SW5zdGFsbCBBcGFjaGUgVG9tY2F0LCBjcmVhdGUgYSBzZXJ2ZXIsIGFuZCBjcmVhdGUgYSBkeW5hbWljIFdlYiBwcm9qZWN0DQotYXNzb2NpYXRlZCB3aXRoIHRoYXQgc2VydmVyIGFzIGRlc2NyaWJlZCBpbiA8eHJlZiBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy51aS5kb2MudXNlci90YXNrcy90dG9tY2F0c2Vydi5kaXRhIj5DcmVhdGluZw0KLWFuIEFwYWNoZSBUb21jYXQgc2VydmVyIGFuZCBXZWIgcHJvamVjdDwveHJlZj48L2xpPg0KLTxsaT5JbXBvcnQgdGhlIHJlcXVpcmVkIEFudCBmaWxlcyBpbnRvIHlvdXIgd29ya3NwYWNlOjxvbD4NCi08bGk+Q3JlYXRlIGEgcHJvamVjdC48L2xpPg0KLTxsaT5JbXBvcnQgdGhlIHJlcXVpcmVkIEFudCBmaWxlcy4gU2VsZWN0IDxtZW51Y2FzY2FkZT48dWljb250cm9sPkZpbGU8L3VpY29udHJvbD4NCi08dWljb250cm9sPk5ldzwvdWljb250cm9sPjx1aWNvbnRyb2w+T3RoZXI8L3VpY29udHJvbD48dWljb250cm9sPldlYiBTZXJ2aWNlczwvdWljb250cm9sPg0KLTx1aWNvbnRyb2w+QW50IEZpbGVzPC91aWNvbnRyb2w+PHVpY29udHJvbD5OZXh0PC91aWNvbnRyb2w+PC9tZW51Y2FzY2FkZT4uPC9saT4NCi08bGk+U2VsZWN0IHRoZSBwcm9qZWN0IHlvdSBjcmVhdGVkLCBhbmQgY2xpY2sgPHVpY29udHJvbD5GaW5pc2g8L3VpY29udHJvbD4uPC9saT4NCi08L29sPlRocmVlIGZpbGVzIHdpbGwgYmUgaW1wb3J0ZWQgaW50byB0aGlzIHByb2plY3Q6PHVsPg0KLTxsaT53c2dlbi54bWwgLSB0aGlzIGlzIHRoZSBBbnQgZmlsZS48L2xpPg0KLTxsaT5heGlzc2VydmljZS5wcm9wZXJ0aWVzIC0gdGhpcyBpcyBhIHNhbXBsZSBBbnQgcHJvcGVydGllcyBmaWxlIHJlZmVyZW5jZWQNCi1ieSB0aGUgQW50IGZpbGUuIFlvdSBjYW4gbW9kaWZ5IHRoZSBwcm9wZXJ0aWVzIGluIHRoaXMgZmlsZSB0byBnZW5lcmF0ZSBhDQotV2ViIHNlcnZpY2UuPC9saT4NCi08bGk+YXhpc2NsaWVudC5wcm9wZXJ0aWVzIC0gdGhpcyBpcyBhIHNhbXBsZSBBbnQgcHJvcGVydGllcyBmaWxlIHJlZmVyZW5jZWQNCi1ieSB0aGUgQW50IGZpbGUuIFlvdSBjYW4gbW9kaWZ5IHRoZSBwcm9wZXJ0aWVzIGluIHRoaXMgZmlsZSB0byBnZW5lcmF0ZSBhDQotV2ViIHNlcnZpY2UgY2xpZW50LjwvbGk+DQotPC91bD48L2xpPg0KLTxsaT5DcmVhdGUgYSBkeW5hbWljIFdlYiBwcm9qZWN0IGZvciB0aGUgV2ViIHNlcnZpY2Ugb3IgY2xpZW50LjwvbGk+DQotPC91bD48L3NlY3Rpb24+DQotPHNlY3Rpb24+PHRpdGxlPkNyZWF0aW5nIGEgV2ViIHNlcnZpY2Ugb3IgY2xpZW50PC90aXRsZT48cD5PbmNlIHlvdSd2ZSBjb21wbGV0ZWQNCi10aGUgcHJlcmVxdWlzaXRlcyB5b3UgY2FuIGRvIHRoZSBmb2xsb3dpbmc6PC9wPjwvc2VjdGlvbj4NCi08L2NvbmJvZHk+DQotPC9jb25jZXB0Pg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy9jd3NheGlzYW50Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci90b3BpY3MvY3dzYXhpc2FudC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZmFhYzIzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy9jd3NheGlzYW50Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwNiIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0iY29uY2VwdCIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJDcmVhdGluZyBBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQgV2ViIHNlcnZpY2VzIGFuZCBjbGllbnRzIHVzaW5nIFdlYiBzZXJ2aWNlcyBBbnQgdGFza3MiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iSWYgeW91IHByZWZlciBub3QgdG8gdXNlIHRoZSBXZWIgc2VydmljZSB3aXphcmQsIHlvdSBjYW4gdXNlIEFudCBmaWxlcyB0byBjcmVhdGUgV2ViIHNlcnZpY2VzIGFuZCBjbGllbnRzIHVzaW5nIHRoZSBBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQuIFRoZSBXZWIgc2VydmljZXMgQW50IHRhc2tzIGNhbiBiZSBydW4gaW4gdHdvIHdheXM6IHRocm91Z2ggdGhlIEVjbGlwc2Ugd29ya3NwYWNlIHVzaW5nIFJ1biBBcyAmZ3Q7IEFudCBCdWlsZC4uLiwgb3IgdGhleSBjYW4gYmUgcnVuIGhlYWRsZXNzIHRocm91Z2ggdGhlIGNvbW1hbmQgbGluZS4gT25jZSB5b3UgaGF2ZSBjcmVhdGVkIHlvdXIgV2ViIHNlcnZpY2UsIHlvdSBjYW4gdGhlbiBkZXBsb3kgaXQgdG8gYSBzZXJ2ZXIsIHRlc3QgaXQsIGFuZCBwdWJsaXNoIGl0IGFzIGEgYnVzaW5lc3MgZW50aXR5IG9yIGJ1c2luZXNzIHNlcnZpY2UuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IklmIHlvdSBwcmVmZXIgbm90IHRvIHVzZSB0aGUgV2ViIHNlcnZpY2Ugd2l6YXJkLCB5b3UgY2FuIHVzZSBBbnQgZmlsZXMgdG8gY3JlYXRlIFdlYiBzZXJ2aWNlcyBhbmQgY2xpZW50cyB1c2luZyB0aGUgQXhpcyBydW50aW1lIGVudmlyb25tZW50LiBUaGUgV2ViIHNlcnZpY2VzIEFudCB0YXNrcyBjYW4gYmUgcnVuIGluIHR3byB3YXlzOiB0aHJvdWdoIHRoZSBFY2xpcHNlIHdvcmtzcGFjZSB1c2luZyBSdW4gQXMgJmd0OyBBbnQgQnVpbGQuLi4sIG9yIHRoZXkgY2FuIGJlIHJ1biBoZWFkbGVzcyB0aHJvdWdoIHRoZSBjb21tYW5kIGxpbmUuIE9uY2UgeW91IGhhdmUgY3JlYXRlZCB5b3VyIFdlYiBzZXJ2aWNlLCB5b3UgY2FuIHRoZW4gZGVwbG95IGl0IHRvIGEgc2VydmVyLCB0ZXN0IGl0LCBhbmQgcHVibGlzaCBpdCBhcyBhIGJ1c2luZXNzIGVudGl0eSBvciBidXNpbmVzcyBzZXJ2aWNlLiIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3R3YndzYS5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvdHdid3NjbGllbnRhLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0iY3JlYXRpbmdhd2Vic2VydmljZWZyb21hamF2YWJlYW4iIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5DcmVhdGluZyBBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQgV2ViIHNlcnZpY2VzIGFuZCBjbGllbnRzIHVzaW5nCi1BbnQgdGFza3M8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9ImNyZWF0aW5nYXdlYnNlcnZpY2Vmcm9tYWphdmFiZWFuIj48YSBuYW1lPSJjcmVhdGluZ2F3ZWJzZXJ2aWNlZnJvbWFqYXZhYmVhbiI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+Q3JlYXRpbmcgQXhpcyBydW50aW1lIGVudmlyb25tZW50IFdlYiBzZXJ2aWNlcyBhbmQgY2xpZW50cyB1c2luZyBXZWIKLXNlcnZpY2VzIEFudCB0YXNrczwvaDE+Ci0KLQotCi08ZGl2PjxwPklmIHlvdSBwcmVmZXIgbm90IHRvIHVzZSB0aGUgV2ViIHNlcnZpY2Ugd2l6YXJkLCB5b3UgY2FuIHVzZSBBbnQKLWZpbGVzIHRvIGNyZWF0ZSBXZWIgc2VydmljZXMgYW5kIGNsaWVudHMgdXNpbmcgdGhlIEF4aXMgcnVudGltZSBlbnZpcm9ubWVudC4KLVRoZSBXZWIgc2VydmljZXMgQW50IHRhc2tzIGNhbiBiZSBydW4gaW4gdHdvIHdheXM6IHRocm91Z2ggdGhlIEVjbGlwc2Ugd29ya3NwYWNlCi11c2luZyA8c3BhbiBjbGFzcz0ibWVudWNhc2NhZGUiPjxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlJ1biBBczwvc3Bhbj4gJmd0OyA8c3BhbiBjbGFzcz0idWljb250cm9sIj5BbnQgQnVpbGQuLi48L3NwYW4+Ci08L3NwYW4+LCBvciB0aGV5IGNhbiBiZSBydW4gaGVhZGxlc3MgdGhyb3VnaCB0aGUgY29tbWFuZCBsaW5lLiBPbmNlCi15b3UgaGF2ZSBjcmVhdGVkIHlvdXIgV2ViIHNlcnZpY2UsIHlvdSBjYW4gdGhlbiBkZXBsb3kgaXQgdG8gYSBzZXJ2ZXIsIHRlc3QKLWl0LCBhbmQgcHVibGlzaCBpdCBhcyBhIGJ1c2luZXNzIGVudGl0eSBvciBidXNpbmVzcyBzZXJ2aWNlLjwvcD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PGg0IGNsYXNzPSJzZWN0aW9udGl0bGUiPlByZXJlcXVpc2l0ZXM8L2g0PjxwPkJlZm9yZSB5b3UgY3JlYXRlIGEgV2ViIHNlcnZpY2Ugb3IKLWNsaWVudCB1c2luZyB0aGUgQW50IHRhc2tzLCB5b3UgbmVlZCB0byBjb21wbGV0ZSBhIGZldyBwcmVyZXF1aXNpdGVzLjwvcD4KLTx1bD4KLTxsaT5JbnN0YWxsIEFwYWNoZSBUb21jYXQsIGNyZWF0ZSBhIHNlcnZlciwgYW5kIGNyZWF0ZSBhIGR5bmFtaWMgV2ViIHByb2plY3QKLWFzc29jaWF0ZWQgd2l0aCB0aGF0IHNlcnZlciBhcyBkZXNjcmliZWQgaW4gPGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmF4aXMudWkuZG9jLnVzZXIvdGFza3MvdHRvbWNhdHNlcnYuaHRtbCI+Q3JlYXRpbmcgYW4gQXBhY2hlIFRvbWNhdCBzZXJ2ZXIgYW5kIFdlYiBwcm9qZWN0PC9hPjwvbGk+Ci0KLTxsaT5JbXBvcnQgdGhlIHJlcXVpcmVkIEFudCBmaWxlcyBpbnRvIHlvdXIgd29ya3NwYWNlOjxvbD4KLTxsaT5DcmVhdGUgYSBwcm9qZWN0LjwvbGk+Ci0KLTxsaT5JbXBvcnQgdGhlIHJlcXVpcmVkIEFudCBmaWxlcy4gU2VsZWN0IDxzcGFuIGNsYXNzPSJtZW51Y2FzY2FkZSI+PHNwYW4gY2xhc3M9InVpY29udHJvbCI+RmlsZTwvc3Bhbj4KLSAmZ3Q7IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPk5ldzwvc3Bhbj4gJmd0OyA8c3BhbiBjbGFzcz0idWljb250cm9sIj5PdGhlcjwvc3Bhbj4gJmd0OyA8c3BhbiBjbGFzcz0idWljb250cm9sIj5XZWIgU2VydmljZXM8L3NwYW4+Ci0gJmd0OyA8c3BhbiBjbGFzcz0idWljb250cm9sIj5BbnQgRmlsZXM8L3NwYW4+ICZndDsgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+TmV4dDwvc3Bhbj48L3NwYW4+LjwvbGk+Ci0KLTxsaT5TZWxlY3QgdGhlIHByb2plY3QgeW91IGNyZWF0ZWQsIGFuZCBjbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5GaW5pc2g8L3NwYW4+LjwvbGk+Ci0KLTwvb2w+Ci1UaHJlZSBmaWxlcyB3aWxsIGJlIGltcG9ydGVkIGludG8gdGhpcyBwcm9qZWN0Ojx1bD4KLTxsaT53c2dlbi54bWwgLSB0aGlzIGlzIHRoZSBBbnQgZmlsZS48L2xpPgotCi08bGk+YXhpc3NlcnZpY2UucHJvcGVydGllcyAtIHRoaXMgaXMgYSBzYW1wbGUgQW50IHByb3BlcnRpZXMgZmlsZSByZWZlcmVuY2VkCi1ieSB0aGUgQW50IGZpbGUuIFlvdSBjYW4gbW9kaWZ5IHRoZSBwcm9wZXJ0aWVzIGluIHRoaXMgZmlsZSB0byBnZW5lcmF0ZSBhCi1XZWIgc2VydmljZS48L2xpPgotCi08bGk+YXhpc2NsaWVudC5wcm9wZXJ0aWVzIC0gdGhpcyBpcyBhIHNhbXBsZSBBbnQgcHJvcGVydGllcyBmaWxlIHJlZmVyZW5jZWQKLWJ5IHRoZSBBbnQgZmlsZS4gWW91IGNhbiBtb2RpZnkgdGhlIHByb3BlcnRpZXMgaW4gdGhpcyBmaWxlIHRvIGdlbmVyYXRlIGEKLVdlYiBzZXJ2aWNlIGNsaWVudC48L2xpPgotCi08L3VsPgotPC9saT4KLQotPGxpPkNyZWF0ZSBhIGR5bmFtaWMgV2ViIHByb2plY3QgZm9yIHRoZSBXZWIgc2VydmljZSBvciBjbGllbnQuPC9saT4KLQotPC91bD4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48aDQgY2xhc3M9InNlY3Rpb250aXRsZSI+Q3JlYXRpbmcgYSBXZWIgc2VydmljZSBvciBjbGllbnQ8L2g0PjxwPk9uY2UgeW91J3ZlIGNvbXBsZXRlZAotdGhlIHByZXJlcXVpc2l0ZXMgeW91IGNhbiBkbyB0aGUgZm9sbG93aW5nOjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTx1bCBjbGFzcz0idWxsaW5rcyI+Ci08bGkgY2xhc3M9InVsY2hpbGRsaW5rIj48c3Ryb25nPjxhIGhyZWY9Ii4uL3RvcGljcy90d2J3c2EuaHRtbCI+Q3JlYXRpbmcgYSBXZWIgc2VydmljZSB1c2luZyBBbnQgdGFza3MgaW4gdGhlIFdvcmtiZW5jaDwvYT48L3N0cm9uZz48YnIgLz4KLVlvdSBjYW4gdXNlIEFudCB0aHJvdWdoIHRoZSBFY2xpcHNlIHdvcmtzcGFjZSB0byBnZW5lcmF0ZSBhIFdlYiBzZXJ2aWNlIHVzaW5nIHRoZSBBeGlzIHJ1bi10aW1lIGVudmlyb25tZW50LiBCb3RoIHRvcC1kb3duIGFuZCBib3R0b20tdXAgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50IGlzIHN1cHBvcnRlZCB3aXRoIHRoZSBBbnQgdGFza3MuPC9saT4KLTxsaSBjbGFzcz0idWxjaGlsZGxpbmsiPjxzdHJvbmc+PGEgaHJlZj0iLi4vdG9waWNzL3R3YndzY2xpZW50YS5odG1sIj5DcmVhdGluZyBhIFdlYiBzZXJ2aWNlIGNsaWVudCB1c2luZyBBbnQgdGFza3M8L2E+PC9zdHJvbmc+PGJyIC8+Ci1JZiB5b3UgaGF2ZSBhIFdTREwgZmlsZSB5b3UgY2FuIHVzZSBBbnQgdGhyb3VnaCB0aGUgRWNsaXBzZSB3b3Jrc3BhY2UgdG8gZ2VuZXJhdGUgYSBXZWIgc2VydmljZSBjbGllbnQgdXNpbmcgdGhlIEF4aXMgcnVuLXRpbWUgZW52aXJvbm1lbnQuPC9saT4KLTwvdWw+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy9yYnV3c2EuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy9yYnV3c2EuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzA0ZGFmYS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci90b3BpY3MvcmJ1d3NhLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+DQotPCFET0NUWVBFIHJlZmVyZW5jZSBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBSZWZlcmVuY2UvL0VOIg0KLSAicmVmZXJlbmNlLmR0ZCI+DQotPHJlZmVyZW5jZSBpZD0iYm90dG9tLXVwYXhpc3dlYnNlcnZpY2Vjb21tYW5kbGluZXJlZmVyZW5jZSIgeG1sOmxhbmc9ImVuLXVzIj4NCi08dGl0bGU+Qm90dG9tLXVwIEF4aXMgV2ViIHNlcnZpY2UgQW50IHRhc2sgcHJvcGVydGllcyBmaWxlIHJlZmVyZW5jZTwvdGl0bGU+DQotPHNob3J0ZGVzYz5UaGUgPHVzZXJpbnB1dD5heGlzc2VydmljZS5wcm9wZXJ0aWVzPC91c2VyaW5wdXQ+IGZpbGUgaXMgdXNlZA0KLXRvIHBhc3MgZGF0YSB0byB0aGUgV2ViIHNlcnZpY2VzIEFudCB0YXNrcyB3aGVuIGNyZWF0aW5nIGFuIEF4aXMgV2ViIHNlcnZpY2UNCi0uIFRoaXMgZmlsZSBzaG93cyB0aGUgYXZhaWxhYmxlIG9wdGlvbnMuPC9zaG9ydGRlc2M+DQotPHJlZmJvZHk+DQotPHNlY3Rpb24+PHRpdGxlPlBhcmFtZXRlcnM8L3RpdGxlPjxwYXJtbD48cGxlbnRyeT4NCi08cHQ+U2NlbmFyaW9UeXBlPC9wdD4NCi08cGQ+PHN5bnBoPiBPcHRpb25zOiA8Y29kZXBoPnNlcnZpY2U8L2NvZGVwaD4gPC9zeW5waD48L3BkPg0KLTxwZD5UaGlzIGlzIGEgcmVxdWlyZWQgZWxlbWVudCB0aGF0IHRlbGxzIHRoZSBBbnQgdGFzayBpZiBpdCBpcyBjcmVhdGluZyBhDQotV2ViIHNlcnZpY2Ugb3IgYSBXZWIgc2VydmljZSBjbGllbnQuPC9wZD4NCi08L3BsZW50cnk+PHBsZW50cnk+DQotPHB0PkluaXRpYWxTZWxlY3Rpb248L3B0Pg0KLTxwZD5FbnRlciB0aGUgd29ya3NwYWNlIHJlbGF0aXZlIFVSSSB0byB0aGUgV1NETCBmaWxlIG9yIEphdmEgYmVhbiB3aXRoaW4NCi15b3VyIHdvcmtzcGFjZS4gRm9yIGV4YW1wbGUgPHVzZXJpbnB1dD4vZHluYW1pY1dlYlByb2plY3ROYW1lL1dlYkNvbnRlbnQvbXlTZXJ2aWNlLndzZGw8L3VzZXJpbnB1dD4gb3IgPHVzZXJpbnB1dD4vZHluYW1pY1dlYlByb2plY3ROYW1lL3NyYy9teUJlYW4uamF2YTwvdXNlcmlucHV0DQotPjwvcGQ+DQotPC9wbGVudHJ5PjxwbGVudHJ5Pg0KLTxwdD5MaXN0UnVudGltZXM8L3B0Pg0KLTxwZD48c3lucGg+IE9wdGlvbnM6IDxjb2RlcGg+dHJ1ZTwvY29kZXBoPiA8Y29kZXBoPmZhbHNlPC9jb2RlcGg+PC9zeW5waD48L3BkPg0KLTxwZD5JZiA8Y29kZXBoPnRydWU8L2NvZGVwaD4gaXMgc2VsZWN0ZWQsIHRoZSBsaXN0IG9mIHZhbGlkIHJ1bnRpbWUgb3B0aW9ucw0KLXdpbGwgYmUgcHJvdmlkZWQgd2hlbiB0aGUgQW50IHRhc2sgaXMgcnVuLjwvcGQ+DQotPC9wbGVudHJ5PjxwbGVudHJ5Pg0KLTxwdD5MaXN0U2VydmVyczwvcHQ+DQotPHBkPjxzeW5waD4gT3B0aW9uczogPGNvZGVwaD50cnVlPC9jb2RlcGg+IDxjb2RlcGg+ZmFsc2U8L2NvZGVwaD48L3N5bnBoPjwvcGQ+DQotPHBkPklmIDxjb2RlcGg+dHJ1ZTwvY29kZXBoPiBpcyBzZWxlY3RlZCwgdGhlIGxpc3Qgb2YgdmFsaWQgc2VydmVyIG9wdGlvbnMNCi13aWxsIGJlIHByb3ZpZGVkIHdoZW4gdGhlIEFudCB0YXNrIGlzIHJ1bi48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+U2VydmljZS5SdW50aW1lSWQ8L3B0Pg0KLTxwZD5UaGlzIGlzIHRoZSBJRCBvZiB0aGUgV2ViIHNlcnZpY2UncyBydW50aW1lLiBUaGlzIHBhcmFtZXRlciBzaG91bGQgbm90DQotYmUgbW9kaWZpZWQuPC9wZD4NCi08L3BsZW50cnk+PHBsZW50cnk+DQotPHB0PlNlcnZpY2UuU2VydmVySWQ8L3B0Pg0KLTxwZD5PcHRpb25zOjxzbD4NCi08c2xpPjxjb2RlcGg+b3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQueDwvY29kZXBoPiAod2hlcmUgPGNvZGVwaD54PC9jb2RlcGg+IGlzIDxjb2RlcGg+MzIsDQotNDAsIDQxLCA1MCw8L2NvZGVwaD4gb3IgPGNvZGVwaD41NTwvY29kZXBoPik8L3NsaT4NCi08c2xpPjxjb2RlcGg+b3JnLmVjbGlwc2UuanN0LnNlcnZlci5nZW5lcmljLndlYmxvZ2ljeDwvY29kZXBoPiAod2hlcmUgPGNvZGVwaD54PC9jb2RlcGg+IGlzIDxjb2RlcGg+ODE8L2NvZGVwaD4gb3IgPGNvZGVwaD45MDwvY29kZXBoPikgPC9zbGk+DQotPHNsaT48Y29kZXBoPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuZ2VuZXJpYy5qYm9zc3g8L2NvZGVwaD4gKHdoZXJlIDxjb2RlcGg+eDwvY29kZXBoPiBpcyA8Y29kZXBoPjMyMzwvY29kZXBoPiBvciA8Y29kZXBoPjQ8L2NvZGVwaD4pPC9zbGk+DQotPHNsaT48Y29kZXBoPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuZ2VuZXJpYy5qb25hczQ8L2NvZGVwaD48L3NsaT4NCi08c2xpPjxjb2RlcGg+b3JnLmVjbGlwc2UuanN0LnNlcnZlci5nZW5lcmljLm9yYWNsZTEwMTM8L2NvZGVwaD48L3NsaT4NCi08c2xpPjxjb2RlcGg+b3JnLmVjbGlwc2UuanN0LnNlcnZlcnMud2Vic3BoZXJlLjY8L2NvZGVwaD48L3NsaT4NCi08L3NsPjwvcGQ+DQotPHBkPlRoaXMgaXMgdGhlIElEIG9mIHRoZSB0YXJnZXQgc2VydmVyLiBEZWxldGUgb3IgY29tbWVudCBvdXQgdGhpcyBwYXJhbWV0ZXINCi10byBoYXZlIHRoZSBBbnQgdGFzayBzZWxlY3QgdGhlIGNvcnJlY3QgdmFsdWUgYmFzZWQgb24gdGhlIHNlcnZlciBzZXR0aW5ncw0KLW9mIHRoZSBkeW5hbWljIFdlYiBwcm9qZWN0LjwvcGQ+DQotPC9wbGVudHJ5PjxwbGVudHJ5Pg0KLTxwdD5TZXJ2aWNlUHJvamVjdE5hbWU8L3B0Pg0KLTxwZD5CeSBkZWZhdWx0IHRoZSBzZXJ2aWNlIHByb2plY3QgaXMgZ2l2ZW4gdGhlIG5hbWUgb2YgdGhlIFdTREwgZmlsZSBvciBKYXZhDQotYmVhbiBmcm9tIHdoaWNoIGl0IGlzIGNyZWF0ZWQuIFVzZSB0aGlzIHBhcmFtZXRlciB0byBjcmVhdGUgdGhlIHNlcnZpY2UgcHJvamVjdA0KLXdpdGggYSBkaWZmZXJlbnQgbmFtZS48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+U2VydmljZUVhclByb2plY3ROYW1lPC9wdD4NCi08cGQ+QnkgZGVmYXVsdCB0aGUgc2VydmljZSBFQVIgcHJvamVjdCBpcyBnaXZlbiB0aGUgbmFtZSBvZiB0aGUgV1NETCBmaWxlDQotb3IgSmF2YSBiZWFuIGZyb20gd2hpY2ggaXQgaXMgY3JlYXRlZC4gVXNlIHRoaXMgcGFyYW1ldGVyIHRvIGNyZWF0ZSB0aGUgc2VydmljZQ0KLUVBUiBwcm9qZWN0IHdpdGggYSBkaWZmZXJlbnQgbmFtZS48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+TWFwcGluZ3M8L3B0Pg0KLTxwZD5FbnRlciB0aGUgd29ya3NwYWNlIHJlbGF0aXZlIFVSSSB0byBhIHByb3BlcnR5IGZpbGUgY29udGFpbmluZyBtYXBwaW5ncy48L3BkPg0KLTxwZD5NYXBwaW5ncyBhcmUgdXNlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBuYW1lc3BhY2UgbmFtZXMgaW4gdGhlIGdlbmVyYXRlZA0KLVdTREwuIFRoZSBjb250ZW50IG9mIHRoZSBwcm9wZXJ0aWVzIGZpbGUgbXVzdCBiZSBvZiB0aGUgZm9ybWF0IHBhY2thZ2UgPSBuYW1lc3BhY2UgPC9wZD4NCi08L3BsZW50cnk+PHBsZW50cnk+DQotPHB0PkphdmFPdXRwdXQ8L3B0Pg0KLTxwZD5FbnRlciB0aGUgd29ya3NwYWNlIHJlbGF0aXZlIFVSSSB0byBhbiBleGlzdGluZyBKYXZhIHNvdXJjZSBmb2xkZXIgZm9yDQotdGhlIGdlbmVyYXRlZCBKYXZhIGNvZGUuPC9wZD4NCi08L3BsZW50cnk+PHBsZW50cnk+DQotPHB0Pk1ldGhvZHM8L3B0Pg0KLTxwZD5Vc2UgdGhpcyBwYXJhbWV0ZXIgdG8gbGltaXQgd2hpY2ggbWV0aG9kcyBhcmUgZXhwb3NlZCBpbiB0aGUgc2VydmljZS4NCi1JdCBtdXN0IGJlIGluIHRoZSBmb3JtIG9mIGEgc3BhY2UgZGVsaW1pdGVkIHN0cmluZyBvZiBtZXRob2Qgc2lnbmF0dXJlcy4gRm9yDQotZXhhbXBsZSwgPHVzZXJpbnB1dD5tZXRob2QxKHBhcm1UeXBlMSkgbWV0aG9kMihwYXJtVHlwZTIpPC91c2VyaW5wdXQ+LiBJZg0KLW5vIGxpc3QgaXMgcHJvdmlkZWQsIGFsbCBtZXRob2RzIGFyZSBleHBvc2VkLiA8L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+U3R5bGU8L3B0Pg0KLTxwZD48c3lucGg+IE9wdGlvbnM6IDxjb2RlcGg+RE9DVU1FTlQ8L2NvZGVwaD4gPGNvZGVwaD5SUEM8L2NvZGVwaD4gPGNvZGVwaD5XUkFQUEVEPC9jb2RlcGg+PC9zeW5waD48L3BkPg0KLTxwZD5TZWxlY3QgdGhlIFNPQVAgbWVzc2FnZSBzdHlsZS4gVGhlIGRlZmF1bHQgaXMgPGNvZGVwaD5ET0NVTUVOVDwvY29kZXBoPi48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+VXNlPC9wdD4NCi08cGQ+PHN5bnBoPiBPcHRpb25zOiA8Y29kZXBoPkxJVEVSQUw8L2NvZGVwaD4gPGNvZGVwaD5FTkNPREVEPC9jb2RlcGg+PC9zeW5waD48L3BkPg0KLTxwZD5TZWxlY3QgaWYgdGhlIFNPQVAgbWVzc2FnZSB3aWxsIGJlIGxpdGVyYWwgb3IgZW5jb2RlZC4gVGhlIGRlZmF1bHQgaXMgPGNvZGVwaD5MSVRFUkFMPC9jb2RlcGg+LjwvcGQ+DQotPC9wbGVudHJ5PjxwbGVudHJ5Pg0KLTxwdD5PdmVyd3JpdGVGaWxlc0VuYWJsZWQ8L3B0Pg0KLTxwZD48c3lucGg+IE9wdGlvbnM6IDxjb2RlcGg+dHJ1ZTwvY29kZXBoPiA8Y29kZXBoPmZhbHNlPC9jb2RlcGg+PC9zeW5waD48L3BkPg0KLTxwZD5Vc2UgdGhpcyBwYXJhbWV0ZXIgdG8gdGVsbCB0aGUgQW50IHRhc2sgdG8gb3ZlcndyaXRlIGFueSBmaWxlIHRoYXQgaXQNCi1jcmVhdGVzIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBhbiBleGlzdGluZyBmaWxlLiBCeSBkZWZhdWx0IHRoaXMgaXMgc2V0IHRvIDxjb2RlcGg+dHJ1ZTwvY29kZXBoPi48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+Q3JlYXRlRm9sZGVyc0VuYWJsZWQ8L3B0Pg0KLTxwZD48c3lucGg+IE9wdGlvbnM6IDxjb2RlcGg+dHJ1ZTwvY29kZXBoPiA8Y29kZXBoPmZhbHNlPC9jb2RlcGg+PC9zeW5waD48L3BkPg0KLTxwZD5Vc2UgdGhpcyBwYXJhbWV0ZXIgdG8gdGVsbCB0aGUgQW50IHRhc2sgdG8gY3JlYXRlIGFueSBuZWNjZXNzYXJ5IGZvbGRlcnMuDQotQnkgZGVmYXVsdCB0aGlzIGlzIHNldCB0byA8Y29kZXBoPnRydWU8L2NvZGVwaD4uPC9wZD4NCi08L3BsZW50cnk+PHBsZW50cnk+DQotPHB0PkNoZWNrb3V0RmlsZXNFbmFibGVkPC9wdD4NCi08cGQ+PHN5bnBoPiBPcHRpb25zOiA8Y29kZXBoPnRydWU8L2NvZGVwaD4gPGNvZGVwaD5mYWxzZTwvY29kZXBoPjwvc3lucGg+PC9wZD4NCi08cGQ+VXNlIHRoaXMgcGFyYW1ldGVyIHRvIHRlbGwgdGhlIEFudCB0YXNrIHRvIGNoZWNrb3V0IGZpbGVzIGZyb20gQ1ZTIHdpdGhvdXQNCi1wcm9tcHRpbmcgeW91LiBCeSBkZWZhdWx0IHRoaXMgaXMgc2V0IHRvIDxjb2RlcGg+dHJ1ZTwvY29kZXBoPi48L3BkPg0KLTwvcGxlbnRyeT48L3Bhcm1sPjwvc2VjdGlvbj4NCi08L3JlZmJvZHk+DQotPC9yZWZlcmVuY2U+DQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL3JidXdzYS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL3JidXdzYS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NWM0MzI5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy9yYnV3c2EuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwNiIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0icmVmZXJlbmNlIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IkJvdHRvbS11cCBBeGlzIFdlYiBzZXJ2aWNlIEFudCB0YXNrIHByb3BlcnRpZXMgZmlsZSByZWZlcmVuY2UiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iVGhlIGF4aXNzZXJ2aWNlLnByb3BlcnRpZXMgZmlsZSBpcyB1c2VkIHRvIHBhc3MgZGF0YSB0byB0aGUgV2ViIHNlcnZpY2VzIEFudCB0YXNrcyB3aGVuIGNyZWF0aW5nIGFuIEF4aXMgV2ViIHNlcnZpY2UgLiBUaGlzIGZpbGUgc2hvd3MgdGhlIGF2YWlsYWJsZSBvcHRpb25zLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgYXhpc3NlcnZpY2UucHJvcGVydGllcyBmaWxlIGlzIHVzZWQgdG8gcGFzcyBkYXRhIHRvIHRoZSBXZWIgc2VydmljZXMgQW50IHRhc2tzIHdoZW4gY3JlYXRpbmcgYW4gQXhpcyBXZWIgc2VydmljZSAuIFRoaXMgZmlsZSBzaG93cyB0aGUgYXZhaWxhYmxlIG9wdGlvbnMuIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvdHdid3NhLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0iYm90dG9tLXVwYXhpc3dlYnNlcnZpY2Vjb21tYW5kbGluZXJlZmVyZW5jZSIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkJvdHRvbS11cCBBeGlzIFdlYiBzZXJ2aWNlIEFudCB0YXNrIHByb3BlcnRpZXMgZmlsZSByZWZlcmVuY2U8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9ImJvdHRvbS11cGF4aXN3ZWJzZXJ2aWNlY29tbWFuZGxpbmVyZWZlcmVuY2UiPjxhIG5hbWU9ImJvdHRvbS11cGF4aXN3ZWJzZXJ2aWNlY29tbWFuZGxpbmVyZWZlcmVuY2UiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkJvdHRvbS11cCBBeGlzIFdlYiBzZXJ2aWNlIEFudCB0YXNrIHByb3BlcnRpZXMgZmlsZSByZWZlcmVuY2U8L2gxPgotCi0KLTxkaXY+PHA+VGhlIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+YXhpc3NlcnZpY2UucHJvcGVydGllczwva2JkPiBmaWxlIGlzIHVzZWQKLXRvIHBhc3MgZGF0YSB0byB0aGUgV2ViIHNlcnZpY2VzIEFudCB0YXNrcyB3aGVuIGNyZWF0aW5nIGFuIEF4aXMgV2ViIHNlcnZpY2UKLS4gVGhpcyBmaWxlIHNob3dzIHRoZSBhdmFpbGFibGUgb3B0aW9ucy48L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxoNCBjbGFzcz0ic2VjdGlvbnRpdGxlIj5QYXJhbWV0ZXJzPC9oND48ZGw+Ci08ZHQgY2xhc3M9ImRsdGVybSI+U2NlbmFyaW9UeXBlPC9kdD4KLQotPGRkPjxzcGFuIGNsYXNzPSJzeW5waCI+IE9wdGlvbnM6IDxzYW1wIGNsYXNzPSJjb2RlcGgiPnNlcnZpY2U8L3NhbXA+IDwvc3Bhbj48L2RkPgotCi08ZGQgY2xhc3M9ImRkZXhwYW5kIj5UaGlzIGlzIGEgcmVxdWlyZWQgZWxlbWVudCB0aGF0IHRlbGxzIHRoZSBBbnQgdGFzayBpZiBpdCBpcyBjcmVhdGluZyBhCi1XZWIgc2VydmljZSBvciBhIFdlYiBzZXJ2aWNlIGNsaWVudC48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5Jbml0aWFsU2VsZWN0aW9uPC9kdD4KLQotPGRkPkVudGVyIHRoZSB3b3Jrc3BhY2UgcmVsYXRpdmUgVVJJIHRvIHRoZSBXU0RMIGZpbGUgb3IgSmF2YSBiZWFuIHdpdGhpbgoteW91ciB3b3Jrc3BhY2UuIEZvciBleGFtcGxlIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+L2R5bmFtaWNXZWJQcm9qZWN0TmFtZS9XZWJDb250ZW50L215U2VydmljZS53c2RsPC9rYmQ+IG9yIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+L2R5bmFtaWNXZWJQcm9qZWN0TmFtZS9zcmMvbXlCZWFuLmphdmE8L2tiZD48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5MaXN0UnVudGltZXM8L2R0PgotCi08ZGQ+PHNwYW4gY2xhc3M9InN5bnBoIj4gT3B0aW9uczogPHNhbXAgY2xhc3M9ImNvZGVwaCI+dHJ1ZTwvc2FtcD4gPHNhbXAgY2xhc3M9ImNvZGVwaCI+ZmFsc2U8L3NhbXA+PC9zcGFuPjwvZGQ+Ci0KLTxkZCBjbGFzcz0iZGRleHBhbmQiPklmIDxzYW1wIGNsYXNzPSJjb2RlcGgiPnRydWU8L3NhbXA+IGlzIHNlbGVjdGVkLCB0aGUgbGlzdCBvZiB2YWxpZCBydW50aW1lIG9wdGlvbnMKLXdpbGwgYmUgcHJvdmlkZWQgd2hlbiB0aGUgQW50IHRhc2sgaXMgcnVuLjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPkxpc3RTZXJ2ZXJzPC9kdD4KLQotPGRkPjxzcGFuIGNsYXNzPSJzeW5waCI+IE9wdGlvbnM6IDxzYW1wIGNsYXNzPSJjb2RlcGgiPnRydWU8L3NhbXA+IDxzYW1wIGNsYXNzPSJjb2RlcGgiPmZhbHNlPC9zYW1wPjwvc3Bhbj48L2RkPgotCi08ZGQgY2xhc3M9ImRkZXhwYW5kIj5JZiA8c2FtcCBjbGFzcz0iY29kZXBoIj50cnVlPC9zYW1wPiBpcyBzZWxlY3RlZCwgdGhlIGxpc3Qgb2YgdmFsaWQgc2VydmVyIG9wdGlvbnMKLXdpbGwgYmUgcHJvdmlkZWQgd2hlbiB0aGUgQW50IHRhc2sgaXMgcnVuLjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPlNlcnZpY2UuUnVudGltZUlkPC9kdD4KLQotPGRkPlRoaXMgaXMgdGhlIElEIG9mIHRoZSBXZWIgc2VydmljZSdzIHJ1bnRpbWUuIFRoaXMgcGFyYW1ldGVyIHNob3VsZCBub3QKLWJlIG1vZGlmaWVkLjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPlNlcnZpY2UuU2VydmVySWQ8L2R0PgotCi08ZGQ+T3B0aW9uczo8dWwgY2xhc3M9InNpbXBsZSI+Ci08bGk+PHNhbXAgY2xhc3M9ImNvZGVwaCI+b3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQueDwvc2FtcD4gKHdoZXJlIDxzYW1wIGNsYXNzPSJjb2RlcGgiPng8L3NhbXA+IGlzIDxzYW1wIGNsYXNzPSJjb2RlcGgiPjMyLAotNDAsIDQxLCA1MCw8L3NhbXA+IG9yIDxzYW1wIGNsYXNzPSJjb2RlcGgiPjU1PC9zYW1wPik8L2xpPgotCi08bGk+PHNhbXAgY2xhc3M9ImNvZGVwaCI+b3JnLmVjbGlwc2UuanN0LnNlcnZlci5nZW5lcmljLndlYmxvZ2ljeDwvc2FtcD4gKHdoZXJlIDxzYW1wIGNsYXNzPSJjb2RlcGgiPng8L3NhbXA+IGlzIDxzYW1wIGNsYXNzPSJjb2RlcGgiPjgxPC9zYW1wPiBvciA8c2FtcCBjbGFzcz0iY29kZXBoIj45MDwvc2FtcD4pIDwvbGk+Ci0KLTxsaT48c2FtcCBjbGFzcz0iY29kZXBoIj5vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmdlbmVyaWMuamJvc3N4PC9zYW1wPiAod2hlcmUgPHNhbXAgY2xhc3M9ImNvZGVwaCI+eDwvc2FtcD4gaXMgPHNhbXAgY2xhc3M9ImNvZGVwaCI+MzIzPC9zYW1wPiBvciA8c2FtcCBjbGFzcz0iY29kZXBoIj40PC9zYW1wPik8L2xpPgotCi08bGk+PHNhbXAgY2xhc3M9ImNvZGVwaCI+b3JnLmVjbGlwc2UuanN0LnNlcnZlci5nZW5lcmljLmpvbmFzNDwvc2FtcD48L2xpPgotCi08bGk+PHNhbXAgY2xhc3M9ImNvZGVwaCI+b3JnLmVjbGlwc2UuanN0LnNlcnZlci5nZW5lcmljLm9yYWNsZTEwMTM8L3NhbXA+PC9saT4KLQotPGxpPjxzYW1wIGNsYXNzPSJjb2RlcGgiPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXJzLndlYnNwaGVyZS42PC9zYW1wPjwvbGk+Ci0KLTwvdWw+Ci08L2RkPgotCi08ZGQgY2xhc3M9ImRkZXhwYW5kIj5UaGlzIGlzIHRoZSBJRCBvZiB0aGUgdGFyZ2V0IHNlcnZlci4gRGVsZXRlIG9yIGNvbW1lbnQgb3V0IHRoaXMgcGFyYW1ldGVyCi10byBoYXZlIHRoZSBBbnQgdGFzayBzZWxlY3QgdGhlIGNvcnJlY3QgdmFsdWUgYmFzZWQgb24gdGhlIHNlcnZlciBzZXR0aW5ncwotb2YgdGhlIGR5bmFtaWMgV2ViIHByb2plY3QuPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+U2VydmljZVByb2plY3ROYW1lPC9kdD4KLQotPGRkPkJ5IGRlZmF1bHQgdGhlIHNlcnZpY2UgcHJvamVjdCBpcyBnaXZlbiB0aGUgbmFtZSBvZiB0aGUgV1NETCBmaWxlIG9yIEphdmEKLWJlYW4gZnJvbSB3aGljaCBpdCBpcyBjcmVhdGVkLiBVc2UgdGhpcyBwYXJhbWV0ZXIgdG8gY3JlYXRlIHRoZSBzZXJ2aWNlIHByb2plY3QKLXdpdGggYSBkaWZmZXJlbnQgbmFtZS48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5TZXJ2aWNlRWFyUHJvamVjdE5hbWU8L2R0PgotCi08ZGQ+QnkgZGVmYXVsdCB0aGUgc2VydmljZSBFQVIgcHJvamVjdCBpcyBnaXZlbiB0aGUgbmFtZSBvZiB0aGUgV1NETCBmaWxlCi1vciBKYXZhIGJlYW4gZnJvbSB3aGljaCBpdCBpcyBjcmVhdGVkLiBVc2UgdGhpcyBwYXJhbWV0ZXIgdG8gY3JlYXRlIHRoZSBzZXJ2aWNlCi1FQVIgcHJvamVjdCB3aXRoIGEgZGlmZmVyZW50IG5hbWUuPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+TWFwcGluZ3M8L2R0PgotCi08ZGQ+RW50ZXIgdGhlIHdvcmtzcGFjZSByZWxhdGl2ZSBVUkkgdG8gYSBwcm9wZXJ0eSBmaWxlIGNvbnRhaW5pbmcgbWFwcGluZ3MuPC9kZD4KLQotPGRkIGNsYXNzPSJkZGV4cGFuZCI+TWFwcGluZ3MgYXJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgbmFtZXNwYWNlIG5hbWVzIGluIHRoZSBnZW5lcmF0ZWQKLVdTREwuIFRoZSBjb250ZW50IG9mIHRoZSBwcm9wZXJ0aWVzIGZpbGUgbXVzdCBiZSBvZiB0aGUgZm9ybWF0IHBhY2thZ2UgPSBuYW1lc3BhY2UgPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+SmF2YU91dHB1dDwvZHQ+Ci0KLTxkZD5FbnRlciB0aGUgd29ya3NwYWNlIHJlbGF0aXZlIFVSSSB0byBhbiBleGlzdGluZyBKYXZhIHNvdXJjZSBmb2xkZXIgZm9yCi10aGUgZ2VuZXJhdGVkIEphdmEgY29kZS48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5NZXRob2RzPC9kdD4KLQotPGRkPlVzZSB0aGlzIHBhcmFtZXRlciB0byBsaW1pdCB3aGljaCBtZXRob2RzIGFyZSBleHBvc2VkIGluIHRoZSBzZXJ2aWNlLgotSXQgbXVzdCBiZSBpbiB0aGUgZm9ybSBvZiBhIHNwYWNlIGRlbGltaXRlZCBzdHJpbmcgb2YgbWV0aG9kIHNpZ25hdHVyZXMuIEZvcgotZXhhbXBsZSwgPGtiZCBjbGFzcz0idXNlcmlucHV0Ij5tZXRob2QxKHBhcm1UeXBlMSkgbWV0aG9kMihwYXJtVHlwZTIpPC9rYmQ+LiBJZgotbm8gbGlzdCBpcyBwcm92aWRlZCwgYWxsIG1ldGhvZHMgYXJlIGV4cG9zZWQuIDwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPlN0eWxlPC9kdD4KLQotPGRkPjxzcGFuIGNsYXNzPSJzeW5waCI+IE9wdGlvbnM6IDxzYW1wIGNsYXNzPSJjb2RlcGgiPkRPQ1VNRU5UPC9zYW1wPiA8c2FtcCBjbGFzcz0iY29kZXBoIj5SUEM8L3NhbXA+IDxzYW1wIGNsYXNzPSJjb2RlcGgiPldSQVBQRUQ8L3NhbXA+PC9zcGFuPjwvZGQ+Ci0KLTxkZCBjbGFzcz0iZGRleHBhbmQiPlNlbGVjdCB0aGUgU09BUCBtZXNzYWdlIHN0eWxlLiBUaGUgZGVmYXVsdCBpcyA8c2FtcCBjbGFzcz0iY29kZXBoIj5ET0NVTUVOVDwvc2FtcD4uPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+VXNlPC9kdD4KLQotPGRkPjxzcGFuIGNsYXNzPSJzeW5waCI+IE9wdGlvbnM6IDxzYW1wIGNsYXNzPSJjb2RlcGgiPkxJVEVSQUw8L3NhbXA+IDxzYW1wIGNsYXNzPSJjb2RlcGgiPkVOQ09ERUQ8L3NhbXA+PC9zcGFuPjwvZGQ+Ci0KLTxkZCBjbGFzcz0iZGRleHBhbmQiPlNlbGVjdCBpZiB0aGUgU09BUCBtZXNzYWdlIHdpbGwgYmUgbGl0ZXJhbCBvciBlbmNvZGVkLiBUaGUgZGVmYXVsdCBpcyA8c2FtcCBjbGFzcz0iY29kZXBoIj5MSVRFUkFMPC9zYW1wPi48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5PdmVyd3JpdGVGaWxlc0VuYWJsZWQ8L2R0PgotCi08ZGQ+PHNwYW4gY2xhc3M9InN5bnBoIj4gT3B0aW9uczogPHNhbXAgY2xhc3M9ImNvZGVwaCI+dHJ1ZTwvc2FtcD4gPHNhbXAgY2xhc3M9ImNvZGVwaCI+ZmFsc2U8L3NhbXA+PC9zcGFuPjwvZGQ+Ci0KLTxkZCBjbGFzcz0iZGRleHBhbmQiPlVzZSB0aGlzIHBhcmFtZXRlciB0byB0ZWxsIHRoZSBBbnQgdGFzayB0byBvdmVyd3JpdGUgYW55IGZpbGUgdGhhdCBpdAotY3JlYXRlcyB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgYW4gZXhpc3RpbmcgZmlsZS4gQnkgZGVmYXVsdCB0aGlzIGlzIHNldCB0byA8c2FtcCBjbGFzcz0iY29kZXBoIj50cnVlPC9zYW1wPi48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5DcmVhdGVGb2xkZXJzRW5hYmxlZDwvZHQ+Ci0KLTxkZD48c3BhbiBjbGFzcz0ic3lucGgiPiBPcHRpb25zOiA8c2FtcCBjbGFzcz0iY29kZXBoIj50cnVlPC9zYW1wPiA8c2FtcCBjbGFzcz0iY29kZXBoIj5mYWxzZTwvc2FtcD48L3NwYW4+PC9kZD4KLQotPGRkIGNsYXNzPSJkZGV4cGFuZCI+VXNlIHRoaXMgcGFyYW1ldGVyIHRvIHRlbGwgdGhlIEFudCB0YXNrIHRvIGNyZWF0ZSBhbnkgbmVjY2Vzc2FyeSBmb2xkZXJzLgotQnkgZGVmYXVsdCB0aGlzIGlzIHNldCB0byA8c2FtcCBjbGFzcz0iY29kZXBoIj50cnVlPC9zYW1wPi48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5DaGVja291dEZpbGVzRW5hYmxlZDwvZHQ+Ci0KLTxkZD48c3BhbiBjbGFzcz0ic3lucGgiPiBPcHRpb25zOiA8c2FtcCBjbGFzcz0iY29kZXBoIj50cnVlPC9zYW1wPiA8c2FtcCBjbGFzcz0iY29kZXBoIj5mYWxzZTwvc2FtcD48L3NwYW4+PC9kZD4KLQotPGRkIGNsYXNzPSJkZGV4cGFuZCI+VXNlIHRoaXMgcGFyYW1ldGVyIHRvIHRlbGwgdGhlIEFudCB0YXNrIHRvIGNoZWNrb3V0IGZpbGVzIGZyb20gQ1ZTIHdpdGhvdXQKLXByb21wdGluZyB5b3UuIEJ5IGRlZmF1bHQgdGhpcyBpcyBzZXQgdG8gPHNhbXAgY2xhc3M9ImNvZGVwaCI+dHJ1ZTwvc2FtcD4uPC9kZD4KLQotPC9kbD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImZhbWlseWxpbmtzIj4KLTxkaXYgY2xhc3M9InBhcmVudGxpbmsiPjxzdHJvbmc+UGFyZW50IHRvcGljOjwvc3Ryb25nPiA8YSBocmVmPSIuLi90b3BpY3MvdHdid3NhLmh0bWwiIHRpdGxlPSJZb3UgY2FuIHVzZSBBbnQgdGhyb3VnaCB0aGUgRWNsaXBzZSB3b3Jrc3BhY2UgdG8gZ2VuZXJhdGUgYSBXZWIgc2VydmljZSB1c2luZyB0aGUgQXhpcyBydW4tdGltZSBlbnZpcm9ubWVudC4gQm90aCB0b3AtZG93biBhbmQgYm90dG9tLXVwIFdlYiBzZXJ2aWNlcyBkZXZlbG9wbWVudCBpcyBzdXBwb3J0ZWQgd2l0aCB0aGUgQW50IHRhc2tzLiI+Q3JlYXRpbmcgYSBXZWIgc2VydmljZSB1c2luZyBBbnQgdGFza3MgaW4gdGhlIFdvcmtiZW5jaDwvYT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci90b3BpY3MvcnRkd3NhLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci90b3BpY3MvcnRkd3NhLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiNDAwMGEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL3J0ZHdzYS5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+DQotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4NCi08IURPQ1RZUEUgcmVmZXJlbmNlIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFJlZmVyZW5jZS8vRU4iDQotICJyZWZlcmVuY2UuZHRkIj4NCi08cmVmZXJlbmNlIGlkPSJ0b3AtZG93bmF4aXN3ZWJzZXJ2aWNlY29tbWFuZGxpbmVyZWZlcmVuY2UiIHhtbDpsYW5nPSJlbi11cyI+DQotPHRpdGxlPlRvcC1kb3duIEF4aXMgV2ViIHNlcnZpY2UgQW50IHRhc2sgcHJvcGVydGllcyBmaWxlIHJlZmVyZW5jZTwvdGl0bGU+DQotPHNob3J0ZGVzYz5UaGUgPHVzZXJpbnB1dD5heGlzc2VydmljZS5wcm9wZXJ0aWVzPC91c2VyaW5wdXQ+IGZpbGUgaXMgdXNlZA0KLXRvIHBhc3MgZGF0YSB0byB0aGUgV2ViIHNlcnZpY2VzIEFudCB0YXNrcyB3aGVuIGNyZWF0aW5nIGFuIEF4aXMgV2ViIHNlcnZpY2UNCi0uIFRoaXMgZmlsZSBzaG93cyB0aGUgYXZhaWxhYmxlIG9wdGlvbnMuPC9zaG9ydGRlc2M+DQotPHJlZmJvZHk+DQotPHNlY3Rpb24+PHRpdGxlPlBhcmFtZXRlcnM8L3RpdGxlPjxwYXJtbD48cGxlbnRyeT4NCi08cHQ+U2NlbmFyaW9UeXBlPC9wdD4NCi08cGQ+PHN5bnBoPiBPcHRpb25zOiA8Y29kZXBoPnNlcnZpY2U8L2NvZGVwaD4gPC9zeW5waD48L3BkPg0KLTxwZD5UaGlzIGlzIGEgcmVxdWlyZWQgZWxlbWVudCB0aGF0IHRlbGxzIHRoZSBBbnQgdGFzayBpZiBpdCBpcyBjcmVhdGluZyBhDQotV2ViIHNlcnZpY2Ugb3IgYSBXZWIgc2VydmljZSBjbGllbnQuPC9wZD4NCi08L3BsZW50cnk+PHBsZW50cnk+DQotPHB0PkluaXRpYWxTZWxlY3Rpb248L3B0Pg0KLTxwZD5FbnRlciB0aGUgd29ya3NwYWNlIHJlbGF0aXZlIFVSSSB0byB0aGUgV1NETCBmaWxlIG9yIEphdmEgYmVhbiB3aXRoaW4NCi15b3VyIHdvcmtzcGFjZS4gRm9yIGV4YW1wbGUgPHVzZXJpbnB1dD4vZHluYW1pY1dlYlByb2plY3ROYW1lL1dlYkNvbnRlbnQvbXlTZXJ2aWNlLndzZGw8L3VzZXJpbnB1dD4gb3IgPHVzZXJpbnB1dD4vZHluYW1pY1dlYlByb2plY3ROYW1lL3NyYy9teUJlYW4uamF2YTwvdXNlcmlucHV0DQotPjwvcGQ+DQotPC9wbGVudHJ5PjxwbGVudHJ5Pg0KLTxwdD5MaXN0UnVudGltZXM8L3B0Pg0KLTxwZD48c3lucGg+IE9wdGlvbnM6IDxjb2RlcGg+dHJ1ZTwvY29kZXBoPiA8Y29kZXBoPmZhbHNlPC9jb2RlcGg+PC9zeW5waD48L3BkPg0KLTxwZD5JZiA8Y29kZXBoPnRydWU8L2NvZGVwaD4gaXMgc2VsZWN0ZWQsIHRoZSBsaXN0IG9mIHZhbGlkIHJ1bnRpbWUgb3B0aW9ucw0KLXdpbGwgYmUgcHJvdmlkZWQgd2hlbiB0aGUgQW50IHRhc2sgaXMgcnVuLjwvcGQ+DQotPC9wbGVudHJ5PjxwbGVudHJ5Pg0KLTxwdD5MaXN0U2VydmVyczwvcHQ+DQotPHBkPjxzeW5waD4gT3B0aW9uczogPGNvZGVwaD50cnVlPC9jb2RlcGg+IDxjb2RlcGg+ZmFsc2U8L2NvZGVwaD48L3N5bnBoPjwvcGQ+DQotPHBkPklmIDxjb2RlcGg+dHJ1ZTwvY29kZXBoPiBpcyBzZWxlY3RlZCwgdGhlIGxpc3Qgb2YgdmFsaWQgc2VydmVyIG9wdGlvbnMNCi13aWxsIGJlIHByb3ZpZGVkIHdoZW4gdGhlIEFudCB0YXNrIGlzIHJ1bi48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+U2VydmljZS5SdW50aW1lSWQ8L3B0Pg0KLTxwZD5UaGlzIGlzIHRoZSBJRCBvZiB0aGUgV2ViIHNlcnZpY2UncyBydW50aW1lLiBUaGlzIHBhcmFtZXRlciBzaG91bGQgbm90DQotYmUgbW9kaWZpZWQuPC9wZD4NCi08L3BsZW50cnk+PHBsZW50cnk+DQotPHB0PlNlcnZpY2UuU2VydmVySWQ8L3B0Pg0KLTxwZD5PcHRpb25zOjxzbD4NCi08c2xpPjxjb2RlcGg+b3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQueDwvY29kZXBoPiAod2hlcmUgPGNvZGVwaD54PC9jb2RlcGg+IGlzIDxjb2RlcGg+MzIsDQotNDAsIDQxLCA1MCw8L2NvZGVwaD4gb3IgPGNvZGVwaD41NTwvY29kZXBoPik8L3NsaT4NCi08c2xpPjxjb2RlcGg+b3JnLmVjbGlwc2UuanN0LnNlcnZlci5nZW5lcmljLndlYmxvZ2ljeDwvY29kZXBoPiAod2hlcmUgPGNvZGVwaD54PC9jb2RlcGg+IGlzIDxjb2RlcGg+ODE8L2NvZGVwaD4gb3IgPGNvZGVwaD45MDwvY29kZXBoPikgPC9zbGk+DQotPHNsaT48Y29kZXBoPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuZ2VuZXJpYy5qYm9zc3g8L2NvZGVwaD4gKHdoZXJlIDxjb2RlcGg+eDwvY29kZXBoPiBpcyA8Y29kZXBoPjMyMzwvY29kZXBoPiBvciA8Y29kZXBoPjQ8L2NvZGVwaD4pPC9zbGk+DQotPHNsaT48Y29kZXBoPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuZ2VuZXJpYy5qb25hczQ8L2NvZGVwaD48L3NsaT4NCi08c2xpPjxjb2RlcGg+b3JnLmVjbGlwc2UuanN0LnNlcnZlci5nZW5lcmljLm9yYWNsZTEwMTM8L2NvZGVwaD48L3NsaT4NCi08c2xpPjxjb2RlcGg+b3JnLmVjbGlwc2UuanN0LnNlcnZlcnMud2Vic3BoZXJlLjY8L2NvZGVwaD48L3NsaT4NCi08L3NsPjwvcGQ+DQotPHBkPlRoaXMgaXMgdGhlIElEIG9mIHRoZSB0YXJnZXQgc2VydmVyLiBEZWxldGUgb3IgY29tbWVudCBvdXQgdGhpcyBwYXJhbWV0ZXINCi10byBoYXZlIHRoZSBBbnQgdGFzayBzZWxlY3QgdGhlIGNvcnJlY3QgdmFsdWUgYmFzZWQgb24gdGhlIHNlcnZlciBzZXR0aW5ncw0KLW9mIHRoZSBkeW5hbWljIFdlYiBwcm9qZWN0LjwvcGQ+DQotPC9wbGVudHJ5PjxwbGVudHJ5Pg0KLTxwdD5TZXJ2aWNlUHJvamVjdE5hbWU8L3B0Pg0KLTxwZD5CeSBkZWZhdWx0IHRoZSBzZXJ2aWNlIHByb2plY3QgaXMgZ2l2ZW4gdGhlIG5hbWUgb2YgdGhlIFdTREwgZmlsZSBvciBKYXZhDQotYmVhbiBmcm9tIHdoaWNoIGl0IGlzIGNyZWF0ZWQuIFVzZSB0aGlzIHBhcmFtZXRlciB0byBjcmVhdGUgdGhlIHNlcnZpY2UgcHJvamVjdA0KLXdpdGggYSBkaWZmZXJlbnQgbmFtZS48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+U2VydmljZUVhclByb2plY3ROYW1lPC9wdD4NCi08cGQ+QnkgZGVmYXVsdCB0aGUgc2VydmljZSBFQVIgcHJvamVjdCBpcyBnaXZlbiB0aGUgbmFtZSBvZiB0aGUgV1NETCBmaWxlDQotb3IgSmF2YSBiZWFuIGZyb20gd2hpY2ggaXQgaXMgY3JlYXRlZC4gVXNlIHRoaXMgcGFyYW1ldGVyIHRvIGNyZWF0ZSB0aGUgc2VydmljZQ0KLUVBUiBwcm9qZWN0IHdpdGggYSBkaWZmZXJlbnQgbmFtZS48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+TWFwcGluZ3M8L3B0Pg0KLTxwZD5FbnRlciB0aGUgd29ya3NwYWNlIHJlbGF0aXZlIFVSSSB0byBhIHByb3BlcnR5IGZpbGUgY29udGFpbmluZyBtYXBwaW5ncy48L3BkPg0KLTxwZD5NYXBwaW5ncyBhcmUgdXNlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBwYWNrYWdlIG5hbWVzIG9mIHRoZSBnZW5lcmF0ZWQNCi1KYXZhIHRlbXBsYXRlIGNsYXNzZXMuIFRoZSBjb250ZW50IG9mIHRoZSBwcm9wZXJ0aWVzIGZpbGUgbXVzdCBiZSBvZiB0aGUgZm9ybWF0DQotbmFtZXNwYWNlPXBhY2thZ2UgPC9wZD4NCi08L3BsZW50cnk+PHBsZW50cnk+DQotPHB0PkphdmFPdXRwdXQ8L3B0Pg0KLTxwZD5FbnRlciB0aGUgd29ya3NwYWNlIHJlbGF0aXZlIFVSSSB0byBhbiBleGlzdGluZyBKYXZhIHNvdXJjZSBmb2xkZXIgZm9yDQotdGhlIGdlbmVyYXRlZCBKYXZhIGNvZGUuPC9wZD4NCi08L3BsZW50cnk+PHBsZW50cnk+DQotPHB0Pk1ldGhvZHM8L3B0Pg0KLTxwZD5Vc2UgdGhpcyBwYXJhbWV0ZXIgdG8gbGltaXQgd2hpY2ggbWV0aG9kcyBhcmUgZXhwb3NlZCBpbiB0aGUgc2VydmljZS4NCi1JdCBtdXN0IGJlIGluIHRoZSBmb3JtIG9mIGEgc3BhY2UgZGVsaW1pdGVkIHN0cmluZyBvZiBtZXRob2Qgc2lnbmF0dXJlcy4gRm9yDQotZXhhbXBsZSwgPHVzZXJpbnB1dD5tZXRob2QxKHBhcm1UeXBlMSkgbWV0aG9kMihwYXJtVHlwZTIpPC91c2VyaW5wdXQ+LiBJZg0KLW5vIGxpc3QgaXMgcHJvdmlkZWQsIGFsbCBtZXRob2RzIGFyZSBleHBvc2VkLiA8L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+U3R5bGU8L3B0Pg0KLTxwZD48c3lucGg+IE9wdGlvbnM6IDxjb2RlcGg+RE9DVU1FTlQ8L2NvZGVwaD4gPGNvZGVwaD5SUEM8L2NvZGVwaD4gPGNvZGVwaD5XUkFQUEVEPC9jb2RlcGg+PC9zeW5waD48L3BkPg0KLTxwZD5TZWxlY3QgdGhlIFNPQVAgbWVzc2FnZSBzdHlsZS4gVGhlIGRlZmF1bHQgaXMgPGNvZGVwaD5ET0NVTUVOVDwvY29kZXBoPi48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+VXNlPC9wdD4NCi08cGQ+PHN5bnBoPiBPcHRpb25zOiA8Y29kZXBoPkxJVEVSQUw8L2NvZGVwaD4gPGNvZGVwaD5FTkNPREVEPC9jb2RlcGg+PC9zeW5waD48L3BkPg0KLTxwZD5TZWxlY3QgaWYgdGhlIFNPQVAgbWVzc2FnZSB3aWxsIGJlIGxpdGVyYWwgb3IgZW5jb2RlZC4gVGhlIGRlZmF1bHQgaXMgPGNvZGVwaD5MSVRFUkFMPC9jb2RlcGg+LjwvcGQ+DQotPC9wbGVudHJ5PjxwbGVudHJ5Pg0KLTxwdD5PdmVyd3JpdGVGaWxlc0VuYWJsZWQ8L3B0Pg0KLTxwZD48c3lucGg+IE9wdGlvbnM6IDxjb2RlcGg+dHJ1ZTwvY29kZXBoPiA8Y29kZXBoPmZhbHNlPC9jb2RlcGg+PC9zeW5waD48L3BkPg0KLTxwZD5Vc2UgdGhpcyBwYXJhbWV0ZXIgdG8gdGVsbCB0aGUgQW50IHRhc2sgdG8gb3ZlcndyaXRlIGFueSBmaWxlIHRoYXQgaXQNCi1jcmVhdGVzIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBhbiBleGlzdGluZyBmaWxlLiBCeSBkZWZhdWx0IHRoaXMgaXMgc2V0IHRvIDxjb2RlcGg+dHJ1ZTwvY29kZXBoPi48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+Q3JlYXRlRm9sZGVyc0VuYWJsZWQ8L3B0Pg0KLTxwZD48c3lucGg+IE9wdGlvbnM6IDxjb2RlcGg+dHJ1ZTwvY29kZXBoPiA8Y29kZXBoPmZhbHNlPC9jb2RlcGg+PC9zeW5waD48L3BkPg0KLTxwZD5Vc2UgdGhpcyBwYXJhbWV0ZXIgdG8gdGVsbCB0aGUgQW50IHRhc2sgdG8gY3JlYXRlIGFueSBuZWNjZXNzYXJ5IGZvbGRlcnMuDQotQnkgZGVmYXVsdCB0aGlzIGlzIHNldCB0byA8Y29kZXBoPnRydWU8L2NvZGVwaD4uPC9wZD4NCi08L3BsZW50cnk+PHBsZW50cnk+DQotPHB0PkNoZWNrb3V0RmlsZXNFbmFibGVkPC9wdD4NCi08cGQ+PHN5bnBoPiBPcHRpb25zOiA8Y29kZXBoPnRydWU8L2NvZGVwaD4gPGNvZGVwaD5mYWxzZTwvY29kZXBoPjwvc3lucGg+PC9wZD4NCi08cGQ+VXNlIHRoaXMgcGFyYW1ldGVyIHRvIHRlbGwgdGhlIEFudCB0YXNrIHRvIGNoZWNrb3V0IGZpbGVzIGZyb20gQ1ZTIHdpdGhvdXQNCi1wcm9tcHRpbmcgeW91LiBCeSBkZWZhdWx0IHRoaXMgaXMgc2V0IHRvIDxjb2RlcGg+dHJ1ZTwvY29kZXBoPi48L3BkPg0KLTwvcGxlbnRyeT48L3Bhcm1sPjwvc2VjdGlvbj4NCi08L3JlZmJvZHk+DQotPC9yZWZlcmVuY2U+DQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL3J0ZHdzYS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL3J0ZHdzYS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjMxMzJmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy9ydGR3c2EuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3OCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwNiIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0icmVmZXJlbmNlIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IlRvcC1kb3duIEF4aXMgV2ViIHNlcnZpY2UgQW50IHRhc2sgcHJvcGVydGllcyBmaWxlIHJlZmVyZW5jZSIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJUaGUgYXhpc3NlcnZpY2UucHJvcGVydGllcyBmaWxlIGlzIHVzZWQgdG8gcGFzcyBkYXRhIHRvIHRoZSBXZWIgc2VydmljZXMgQW50IHRhc2tzIHdoZW4gY3JlYXRpbmcgYW4gQXhpcyBXZWIgc2VydmljZSAuIFRoaXMgZmlsZSBzaG93cyB0aGUgYXZhaWxhYmxlIG9wdGlvbnMuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBheGlzc2VydmljZS5wcm9wZXJ0aWVzIGZpbGUgaXMgdXNlZCB0byBwYXNzIGRhdGEgdG8gdGhlIFdlYiBzZXJ2aWNlcyBBbnQgdGFza3Mgd2hlbiBjcmVhdGluZyBhbiBBeGlzIFdlYiBzZXJ2aWNlIC4gVGhpcyBmaWxlIHNob3dzIHRoZSBhdmFpbGFibGUgb3B0aW9ucy4iIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy90d2J3c2EuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0b3AtZG93bmF4aXN3ZWJzZXJ2aWNlY29tbWFuZGxpbmVyZWZlcmVuY2UiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5Ub3AtZG93biBBeGlzIFdlYiBzZXJ2aWNlIEFudCB0YXNrIHByb3BlcnRpZXMgZmlsZSByZWZlcmVuY2U8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InRvcC1kb3duYXhpc3dlYnNlcnZpY2Vjb21tYW5kbGluZXJlZmVyZW5jZSI+PGEgbmFtZT0idG9wLWRvd25heGlzd2Vic2VydmljZWNvbW1hbmRsaW5lcmVmZXJlbmNlIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5Ub3AtZG93biBBeGlzIFdlYiBzZXJ2aWNlIEFudCB0YXNrIHByb3BlcnRpZXMgZmlsZSByZWZlcmVuY2U8L2gxPgotCi0KLTxkaXY+PHA+VGhlIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+YXhpc3NlcnZpY2UucHJvcGVydGllczwva2JkPiBmaWxlIGlzIHVzZWQKLXRvIHBhc3MgZGF0YSB0byB0aGUgV2ViIHNlcnZpY2VzIEFudCB0YXNrcyB3aGVuIGNyZWF0aW5nIGFuIEF4aXMgV2ViIHNlcnZpY2UKLS4gVGhpcyBmaWxlIHNob3dzIHRoZSBhdmFpbGFibGUgb3B0aW9ucy48L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxoNCBjbGFzcz0ic2VjdGlvbnRpdGxlIj5QYXJhbWV0ZXJzPC9oND48ZGw+Ci08ZHQgY2xhc3M9ImRsdGVybSI+U2NlbmFyaW9UeXBlPC9kdD4KLQotPGRkPjxzcGFuIGNsYXNzPSJzeW5waCI+IE9wdGlvbnM6IDxzYW1wIGNsYXNzPSJjb2RlcGgiPnNlcnZpY2U8L3NhbXA+IDwvc3Bhbj48L2RkPgotCi08ZGQgY2xhc3M9ImRkZXhwYW5kIj5UaGlzIGlzIGEgcmVxdWlyZWQgZWxlbWVudCB0aGF0IHRlbGxzIHRoZSBBbnQgdGFzayBpZiBpdCBpcyBjcmVhdGluZyBhCi1XZWIgc2VydmljZSBvciBhIFdlYiBzZXJ2aWNlIGNsaWVudC48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5Jbml0aWFsU2VsZWN0aW9uPC9kdD4KLQotPGRkPkVudGVyIHRoZSB3b3Jrc3BhY2UgcmVsYXRpdmUgVVJJIHRvIHRoZSBXU0RMIGZpbGUgb3IgSmF2YSBiZWFuIHdpdGhpbgoteW91ciB3b3Jrc3BhY2UuIEZvciBleGFtcGxlIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+L2R5bmFtaWNXZWJQcm9qZWN0TmFtZS9XZWJDb250ZW50L215U2VydmljZS53c2RsPC9rYmQ+IG9yIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+L2R5bmFtaWNXZWJQcm9qZWN0TmFtZS9zcmMvbXlCZWFuLmphdmE8L2tiZD48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5MaXN0UnVudGltZXM8L2R0PgotCi08ZGQ+PHNwYW4gY2xhc3M9InN5bnBoIj4gT3B0aW9uczogPHNhbXAgY2xhc3M9ImNvZGVwaCI+dHJ1ZTwvc2FtcD4gPHNhbXAgY2xhc3M9ImNvZGVwaCI+ZmFsc2U8L3NhbXA+PC9zcGFuPjwvZGQ+Ci0KLTxkZCBjbGFzcz0iZGRleHBhbmQiPklmIDxzYW1wIGNsYXNzPSJjb2RlcGgiPnRydWU8L3NhbXA+IGlzIHNlbGVjdGVkLCB0aGUgbGlzdCBvZiB2YWxpZCBydW50aW1lIG9wdGlvbnMKLXdpbGwgYmUgcHJvdmlkZWQgd2hlbiB0aGUgQW50IHRhc2sgaXMgcnVuLjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPkxpc3RTZXJ2ZXJzPC9kdD4KLQotPGRkPjxzcGFuIGNsYXNzPSJzeW5waCI+IE9wdGlvbnM6IDxzYW1wIGNsYXNzPSJjb2RlcGgiPnRydWU8L3NhbXA+IDxzYW1wIGNsYXNzPSJjb2RlcGgiPmZhbHNlPC9zYW1wPjwvc3Bhbj48L2RkPgotCi08ZGQgY2xhc3M9ImRkZXhwYW5kIj5JZiA8c2FtcCBjbGFzcz0iY29kZXBoIj50cnVlPC9zYW1wPiBpcyBzZWxlY3RlZCwgdGhlIGxpc3Qgb2YgdmFsaWQgc2VydmVyIG9wdGlvbnMKLXdpbGwgYmUgcHJvdmlkZWQgd2hlbiB0aGUgQW50IHRhc2sgaXMgcnVuLjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPlNlcnZpY2UuUnVudGltZUlkPC9kdD4KLQotPGRkPlRoaXMgaXMgdGhlIElEIG9mIHRoZSBXZWIgc2VydmljZSdzIHJ1bnRpbWUuIFRoaXMgcGFyYW1ldGVyIHNob3VsZCBub3QKLWJlIG1vZGlmaWVkLjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPlNlcnZpY2UuU2VydmVySWQ8L2R0PgotCi08ZGQ+T3B0aW9uczo8dWwgY2xhc3M9InNpbXBsZSI+Ci08bGk+PHNhbXAgY2xhc3M9ImNvZGVwaCI+b3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQueDwvc2FtcD4gKHdoZXJlIDxzYW1wIGNsYXNzPSJjb2RlcGgiPng8L3NhbXA+IGlzIDxzYW1wIGNsYXNzPSJjb2RlcGgiPjMyLAotNDAsIDQxLCA1MCw8L3NhbXA+IG9yIDxzYW1wIGNsYXNzPSJjb2RlcGgiPjU1PC9zYW1wPik8L2xpPgotCi08bGk+PHNhbXAgY2xhc3M9ImNvZGVwaCI+b3JnLmVjbGlwc2UuanN0LnNlcnZlci5nZW5lcmljLndlYmxvZ2ljeDwvc2FtcD4gKHdoZXJlIDxzYW1wIGNsYXNzPSJjb2RlcGgiPng8L3NhbXA+IGlzIDxzYW1wIGNsYXNzPSJjb2RlcGgiPjgxPC9zYW1wPiBvciA8c2FtcCBjbGFzcz0iY29kZXBoIj45MDwvc2FtcD4pIDwvbGk+Ci0KLTxsaT48c2FtcCBjbGFzcz0iY29kZXBoIj5vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmdlbmVyaWMuamJvc3N4PC9zYW1wPiAod2hlcmUgPHNhbXAgY2xhc3M9ImNvZGVwaCI+eDwvc2FtcD4gaXMgPHNhbXAgY2xhc3M9ImNvZGVwaCI+MzIzPC9zYW1wPiBvciA8c2FtcCBjbGFzcz0iY29kZXBoIj40PC9zYW1wPik8L2xpPgotCi08bGk+PHNhbXAgY2xhc3M9ImNvZGVwaCI+b3JnLmVjbGlwc2UuanN0LnNlcnZlci5nZW5lcmljLmpvbmFzNDwvc2FtcD48L2xpPgotCi08bGk+PHNhbXAgY2xhc3M9ImNvZGVwaCI+b3JnLmVjbGlwc2UuanN0LnNlcnZlci5nZW5lcmljLm9yYWNsZTEwMTM8L3NhbXA+PC9saT4KLQotPGxpPjxzYW1wIGNsYXNzPSJjb2RlcGgiPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXJzLndlYnNwaGVyZS42PC9zYW1wPjwvbGk+Ci0KLTwvdWw+Ci08L2RkPgotCi08ZGQgY2xhc3M9ImRkZXhwYW5kIj5UaGlzIGlzIHRoZSBJRCBvZiB0aGUgdGFyZ2V0IHNlcnZlci4gRGVsZXRlIG9yIGNvbW1lbnQgb3V0IHRoaXMgcGFyYW1ldGVyCi10byBoYXZlIHRoZSBBbnQgdGFzayBzZWxlY3QgdGhlIGNvcnJlY3QgdmFsdWUgYmFzZWQgb24gdGhlIHNlcnZlciBzZXR0aW5ncwotb2YgdGhlIGR5bmFtaWMgV2ViIHByb2plY3QuPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+U2VydmljZVByb2plY3ROYW1lPC9kdD4KLQotPGRkPkJ5IGRlZmF1bHQgdGhlIHNlcnZpY2UgcHJvamVjdCBpcyBnaXZlbiB0aGUgbmFtZSBvZiB0aGUgV1NETCBmaWxlIG9yIEphdmEKLWJlYW4gZnJvbSB3aGljaCBpdCBpcyBjcmVhdGVkLiBVc2UgdGhpcyBwYXJhbWV0ZXIgdG8gY3JlYXRlIHRoZSBzZXJ2aWNlIHByb2plY3QKLXdpdGggYSBkaWZmZXJlbnQgbmFtZS48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5TZXJ2aWNlRWFyUHJvamVjdE5hbWU8L2R0PgotCi08ZGQ+QnkgZGVmYXVsdCB0aGUgc2VydmljZSBFQVIgcHJvamVjdCBpcyBnaXZlbiB0aGUgbmFtZSBvZiB0aGUgV1NETCBmaWxlCi1vciBKYXZhIGJlYW4gZnJvbSB3aGljaCBpdCBpcyBjcmVhdGVkLiBVc2UgdGhpcyBwYXJhbWV0ZXIgdG8gY3JlYXRlIHRoZSBzZXJ2aWNlCi1FQVIgcHJvamVjdCB3aXRoIGEgZGlmZmVyZW50IG5hbWUuPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+TWFwcGluZ3M8L2R0PgotCi08ZGQ+RW50ZXIgdGhlIHdvcmtzcGFjZSByZWxhdGl2ZSBVUkkgdG8gYSBwcm9wZXJ0eSBmaWxlIGNvbnRhaW5pbmcgbWFwcGluZ3MuPC9kZD4KLQotPGRkIGNsYXNzPSJkZGV4cGFuZCI+TWFwcGluZ3MgYXJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcGFja2FnZSBuYW1lcyBvZiB0aGUgZ2VuZXJhdGVkCi1KYXZhIHRlbXBsYXRlIGNsYXNzZXMuIFRoZSBjb250ZW50IG9mIHRoZSBwcm9wZXJ0aWVzIGZpbGUgbXVzdCBiZSBvZiB0aGUgZm9ybWF0Ci1uYW1lc3BhY2U9cGFja2FnZSA8L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5KYXZhT3V0cHV0PC9kdD4KLQotPGRkPkVudGVyIHRoZSB3b3Jrc3BhY2UgcmVsYXRpdmUgVVJJIHRvIGFuIGV4aXN0aW5nIEphdmEgc291cmNlIGZvbGRlciBmb3IKLXRoZSBnZW5lcmF0ZWQgSmF2YSBjb2RlLjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPk1ldGhvZHM8L2R0PgotCi08ZGQ+VXNlIHRoaXMgcGFyYW1ldGVyIHRvIGxpbWl0IHdoaWNoIG1ldGhvZHMgYXJlIGV4cG9zZWQgaW4gdGhlIHNlcnZpY2UuCi1JdCBtdXN0IGJlIGluIHRoZSBmb3JtIG9mIGEgc3BhY2UgZGVsaW1pdGVkIHN0cmluZyBvZiBtZXRob2Qgc2lnbmF0dXJlcy4gRm9yCi1leGFtcGxlLCA8a2JkIGNsYXNzPSJ1c2VyaW5wdXQiPm1ldGhvZDEocGFybVR5cGUxKSBtZXRob2QyKHBhcm1UeXBlMik8L2tiZD4uIElmCi1ubyBsaXN0IGlzIHByb3ZpZGVkLCBhbGwgbWV0aG9kcyBhcmUgZXhwb3NlZC4gPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+U3R5bGU8L2R0PgotCi08ZGQ+PHNwYW4gY2xhc3M9InN5bnBoIj4gT3B0aW9uczogPHNhbXAgY2xhc3M9ImNvZGVwaCI+RE9DVU1FTlQ8L3NhbXA+IDxzYW1wIGNsYXNzPSJjb2RlcGgiPlJQQzwvc2FtcD4gPHNhbXAgY2xhc3M9ImNvZGVwaCI+V1JBUFBFRDwvc2FtcD48L3NwYW4+PC9kZD4KLQotPGRkIGNsYXNzPSJkZGV4cGFuZCI+U2VsZWN0IHRoZSBTT0FQIG1lc3NhZ2Ugc3R5bGUuIFRoZSBkZWZhdWx0IGlzIDxzYW1wIGNsYXNzPSJjb2RlcGgiPkRPQ1VNRU5UPC9zYW1wPi48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5Vc2U8L2R0PgotCi08ZGQ+PHNwYW4gY2xhc3M9InN5bnBoIj4gT3B0aW9uczogPHNhbXAgY2xhc3M9ImNvZGVwaCI+TElURVJBTDwvc2FtcD4gPHNhbXAgY2xhc3M9ImNvZGVwaCI+RU5DT0RFRDwvc2FtcD48L3NwYW4+PC9kZD4KLQotPGRkIGNsYXNzPSJkZGV4cGFuZCI+U2VsZWN0IGlmIHRoZSBTT0FQIG1lc3NhZ2Ugd2lsbCBiZSBsaXRlcmFsIG9yIGVuY29kZWQuIFRoZSBkZWZhdWx0IGlzIDxzYW1wIGNsYXNzPSJjb2RlcGgiPkxJVEVSQUw8L3NhbXA+LjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPk92ZXJ3cml0ZUZpbGVzRW5hYmxlZDwvZHQ+Ci0KLTxkZD48c3BhbiBjbGFzcz0ic3lucGgiPiBPcHRpb25zOiA8c2FtcCBjbGFzcz0iY29kZXBoIj50cnVlPC9zYW1wPiA8c2FtcCBjbGFzcz0iY29kZXBoIj5mYWxzZTwvc2FtcD48L3NwYW4+PC9kZD4KLQotPGRkIGNsYXNzPSJkZGV4cGFuZCI+VXNlIHRoaXMgcGFyYW1ldGVyIHRvIHRlbGwgdGhlIEFudCB0YXNrIHRvIG92ZXJ3cml0ZSBhbnkgZmlsZSB0aGF0IGl0Ci1jcmVhdGVzIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBhbiBleGlzdGluZyBmaWxlLiBCeSBkZWZhdWx0IHRoaXMgaXMgc2V0IHRvIDxzYW1wIGNsYXNzPSJjb2RlcGgiPnRydWU8L3NhbXA+LjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPkNyZWF0ZUZvbGRlcnNFbmFibGVkPC9kdD4KLQotPGRkPjxzcGFuIGNsYXNzPSJzeW5waCI+IE9wdGlvbnM6IDxzYW1wIGNsYXNzPSJjb2RlcGgiPnRydWU8L3NhbXA+IDxzYW1wIGNsYXNzPSJjb2RlcGgiPmZhbHNlPC9zYW1wPjwvc3Bhbj48L2RkPgotCi08ZGQgY2xhc3M9ImRkZXhwYW5kIj5Vc2UgdGhpcyBwYXJhbWV0ZXIgdG8gdGVsbCB0aGUgQW50IHRhc2sgdG8gY3JlYXRlIGFueSBuZWNjZXNzYXJ5IGZvbGRlcnMuCi1CeSBkZWZhdWx0IHRoaXMgaXMgc2V0IHRvIDxzYW1wIGNsYXNzPSJjb2RlcGgiPnRydWU8L3NhbXA+LjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPkNoZWNrb3V0RmlsZXNFbmFibGVkPC9kdD4KLQotPGRkPjxzcGFuIGNsYXNzPSJzeW5waCI+IE9wdGlvbnM6IDxzYW1wIGNsYXNzPSJjb2RlcGgiPnRydWU8L3NhbXA+IDxzYW1wIGNsYXNzPSJjb2RlcGgiPmZhbHNlPC9zYW1wPjwvc3Bhbj48L2RkPgotCi08ZGQgY2xhc3M9ImRkZXhwYW5kIj5Vc2UgdGhpcyBwYXJhbWV0ZXIgdG8gdGVsbCB0aGUgQW50IHRhc2sgdG8gY2hlY2tvdXQgZmlsZXMgZnJvbSBDVlMgd2l0aG91dAotcHJvbXB0aW5nIHlvdS4gQnkgZGVmYXVsdCB0aGlzIGlzIHNldCB0byA8c2FtcCBjbGFzcz0iY29kZXBoIj50cnVlPC9zYW1wPi48L2RkPgotCi08L2RsPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0iZmFtaWx5bGlua3MiPgotPGRpdiBjbGFzcz0icGFyZW50bGluayI+PHN0cm9uZz5QYXJlbnQgdG9waWM6PC9zdHJvbmc+IDxhIGhyZWY9Ii4uL3RvcGljcy90d2J3c2EuaHRtbCIgdGl0bGU9IllvdSBjYW4gdXNlIEFudCB0aHJvdWdoIHRoZSBFY2xpcHNlIHdvcmtzcGFjZSB0byBnZW5lcmF0ZSBhIFdlYiBzZXJ2aWNlIHVzaW5nIHRoZSBBeGlzIHJ1bi10aW1lIGVudmlyb25tZW50LiBCb3RoIHRvcC1kb3duIGFuZCBib3R0b20tdXAgV2ViIHNlcnZpY2VzIGRldmVsb3BtZW50IGlzIHN1cHBvcnRlZCB3aXRoIHRoZSBBbnQgdGFza3MuIj5DcmVhdGluZyBhIFdlYiBzZXJ2aWNlIHVzaW5nIEFudCB0YXNrcyBpbiB0aGUgV29ya2JlbmNoPC9hPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy9yd3NjbGllbnRhLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci90b3BpY3MvcndzY2xpZW50YS5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzM0NmNhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy9yd3NjbGllbnRhLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+DQotPCFET0NUWVBFIHJlZmVyZW5jZSBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBSZWZlcmVuY2UvL0VOIg0KLSAicmVmZXJlbmNlLmR0ZCI+DQotPHJlZmVyZW5jZSBpZD0iYXhpc3dlYnNlcnZpY2VjbGllbnRjb21tYW5kbGluZXJlZmVyZW5jZSIgeG1sOmxhbmc9ImVuLXVzIj4NCi08dGl0bGU+QXhpcyBXZWIgc2VydmljZSBjbGllbnQgQW50IHRhc2sgcHJvcGVydGllcyBmaWxlIHJlZmVyZW5jZTwvdGl0bGU+DQotPHNob3J0ZGVzYz5UaGUgPHVzZXJpbnB1dD5heGlzY2xpZW50LnByb3BlcnRpZXM8L3VzZXJpbnB1dD4gZmlsZSBpcyB1c2VkIHRvDQotcGFzcyBkYXRhIHRvIHRoZSBXZWIgc2VydmljZXMgQW50IHRhc2tzIHdoZW4gY3JlYXRpbmcgYW4gQXhpcyBXZWIgc2VydmljZQ0KLWNsaWVudC4gVGhpcyBmaWxlIHNob3dzIHRoZSBhdmFpbGFibGUgb3B0aW9ucy48L3Nob3J0ZGVzYz4NCi08cmVmYm9keT4NCi08c2VjdGlvbj48dGl0bGU+UGFyYW1ldGVyczwvdGl0bGU+PHBhcm1sPjxwbGVudHJ5Pg0KLTxwdD5TY2VuYXJpb1R5cGU8L3B0Pg0KLTxwZD48c3lucGg+IE9wdGlvbnM6IDxjb2RlcGg+Y2xpZW50PC9jb2RlcGg+PC9zeW5waD48L3BkPg0KLTxwZD5UaGlzIGlzIGEgcmVxdWlyZWQgZWxlbWVudCB0aGF0IHRlbGxzIHRoZSBBbnQgdGFzayBpZiBpdCBpcyBjcmVhdGluZyBhDQotV2ViIHNlcnZpY2Ugb3IgYSBXZWIgc2VydmljZSBjbGllbnQuPC9wZD4NCi08L3BsZW50cnk+PHBsZW50cnk+DQotPHB0PkluaXRpYWxTZWxlY3Rpb248L3B0Pg0KLTxwZD5FbnRlciB0aGUgd29ya3NwYWNlIHJlbGF0aXZlIFVSSSB0byB0aGUgV1NETCBmaWxlIG9yIEphdmEgYmVhbiB3aXRoaW4NCi15b3VyIHdvcmtzcGFjZS4gRm9yIGV4YW1wbGUgPHVzZXJpbnB1dD4vZHluYW1pY1dlYlByb2plY3ROYW1lL1dlYkNvbnRlbnQvbXlTZXJ2aWNlLndzZGw8L3VzZXJpbnB1dD4gb3IgPHVzZXJpbnB1dD4vZHluYW1pY1dlYlByb2plY3ROYW1lL3NyYy9teUJlYW4uamF2YTwvdXNlcmlucHV0DQotPjwvcGQ+DQotPC9wbGVudHJ5PjxwbGVudHJ5Pg0KLTxwdD5MaXN0UnVudGltZXM8L3B0Pg0KLTxwZD48c3lucGg+IE9wdGlvbnM6IDxjb2RlcGg+dHJ1ZTwvY29kZXBoPiA8Y29kZXBoPmZhbHNlPC9jb2RlcGg+PC9zeW5waD48L3BkPg0KLTxwZD5JZiA8Y29kZXBoPnRydWU8L2NvZGVwaD4gaXMgc2VsZWN0ZWQsIHRoZSBsaXN0IG9mIHZhbGlkIHJ1bnRpbWUgb3B0aW9ucw0KLXdpbGwgYmUgcHJvdmlkZWQgd2hlbiB0aGUgQW50IHRhc2sgaXMgcnVuLjwvcGQ+DQotPC9wbGVudHJ5PjxwbGVudHJ5Pg0KLTxwdD5MaXN0U2VydmVyczwvcHQ+DQotPHBkPjxzeW5waD4gT3B0aW9uczogPGNvZGVwaD50cnVlPC9jb2RlcGg+IDxjb2RlcGg+ZmFsc2U8L2NvZGVwaD48L3N5bnBoPjwvcGQ+DQotPHBkPklmIDxjb2RlcGg+dHJ1ZTwvY29kZXBoPiBpcyBzZWxlY3RlZCwgdGhlIGxpc3Qgb2YgdmFsaWQgc2VydmVyIG9wdGlvbnMNCi13aWxsIGJlIHByb3ZpZGVkIHdoZW4gdGhlIEFudCB0YXNrIGlzIHJ1bi48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+Q2xpZW50LlJ1bnRpbWVJZDwvcHQ+DQotPHBkPlRoaXMgaXMgdGhlIElEIG9mIHRoZSBXZWIgc2VydmljZSdzIHJ1bnRpbWUuIFRoaXMgcGFyYW1ldGVyIHNob3VsZCBub3QNCi1iZSBtb2RpZmllZC48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+Q2xpZW50LlNlcnZlcklkPC9wdD4NCi08cGQ+T3B0aW9uczo8c2w+DQotPHNsaT48Y29kZXBoPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0Lng8L2NvZGVwaD4gKHdoZXJlIDxjb2RlcGg+eDwvY29kZXBoPiBpcyA8Y29kZXBoPjMyLA0KLTQwLCA0MSwgNTAsPC9jb2RlcGg+IG9yIDxjb2RlcGg+NTU8L2NvZGVwaD4pPC9zbGk+DQotPHNsaT48Y29kZXBoPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuZ2VuZXJpYy53ZWJsb2dpY3g8L2NvZGVwaD4gKHdoZXJlIDxjb2RlcGg+eDwvY29kZXBoPiBpcyA8Y29kZXBoPjgxPC9jb2RlcGg+IG9yIDxjb2RlcGg+OTA8L2NvZGVwaD4pIDwvc2xpPg0KLTxzbGk+PGNvZGVwaD5vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmdlbmVyaWMuamJvc3N4PC9jb2RlcGg+ICh3aGVyZSA8Y29kZXBoPng8L2NvZGVwaD4gaXMgPGNvZGVwaD4zMjM8L2NvZGVwaD4gb3IgPGNvZGVwaD40PC9jb2RlcGg+KTwvc2xpPg0KLTxzbGk+PGNvZGVwaD5vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmdlbmVyaWMuam9uYXM0PC9jb2RlcGg+PC9zbGk+DQotPHNsaT48Y29kZXBoPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuZ2VuZXJpYy5vcmFjbGUxMDEzPC9jb2RlcGg+PC9zbGk+DQotPHNsaT48Y29kZXBoPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXJzLndlYnNwaGVyZS42PC9jb2RlcGg+PC9zbGk+DQotPC9zbD48L3BkPg0KLTxwZD5UaGlzIGlzIHRoZSBJRCBvZiB0aGUgdGFyZ2V0IHNlcnZlci4gRGVsZXRlIG9yIGNvbW1lbnQgb3V0IHRoaXMgcGFyYW1ldGVyDQotdG8gaGF2ZSB0aGUgQW50IHRhc2sgc2VsZWN0IHRoZSBjb3JyZWN0IHZhbHVlIGJhc2VkIG9uIHRoZSBzZXJ2ZXIgc2V0dGluZ3MNCi1vZiB0aGUgZHluYW1pYyBXZWIgcHJvamVjdC48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+Q2xpZW50UHJvamVjdE5hbWU8L3B0Pg0KLTxwZD5CeSBkZWZhdWx0IHRoZSBjbGllbnQgcHJvamVjdCBpcyBnaXZlbiB0aGUgbmFtZSBvZiB0aGUgV1NETCBmaWxlIG9yIEphdmENCi1iZWFuIGZyb20gd2hpY2ggaXQgaXMgY3JlYXRlZC4gVXNlIHRoaXMgcGFyYW1ldGVyIHRvIGNyZWF0ZSB0aGUgc2VydmljZSBwcm9qZWN0DQotd2l0aCBhIGRpZmZlcmVudCBuYW1lLjwvcGQ+DQotPC9wbGVudHJ5PjxwbGVudHJ5Pg0KLTxwdD5DbGllbnRFYXJQcm9qZWN0TmFtZTwvcHQ+DQotPHBkPkJ5IGRlZmF1bHQgdGhlIGNsaWVudCBFQVIgcHJvamVjdCBpcyBnaXZlbiB0aGUgbmFtZSBvZiB0aGUgV1NETCBmaWxlIG9yDQotSmF2YSBiZWFuIGZyb20gd2hpY2ggaXQgaXMgY3JlYXRlZC4gVXNlIHRoaXMgcGFyYW1ldGVyIHRvIGNyZWF0ZSB0aGUgc2VydmljZQ0KLUVBUiBwcm9qZWN0IHdpdGggYSBkaWZmZXJlbnQgbmFtZS48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+Q2xpZW50Q29tcG9uZW50VHlwZTwvcHQ+DQotPHBkPjxwPk9wdGlvbnM6IDx1c2VyaW5wdXQ+anN0LndlYjwvdXNlcmlucHV0PiA8dXNlcmlucHV0PmpzdC5qYXZhPC91c2VyaW5wdXQ+PC9wPjxwPlVzZQ0KLXRoaXMgcGFyYW1ldGVyIHRvIHNlbGVjdCB0aGUgdHlwZSBvZiBjbGllbnQgcHJvamVjdC4gVGhlIG9ubHkgdmFsaWQgY2xpZW50DQotcHJvamVjdCB0eXBlIGZvciBBeGlzIGNsaWVudHMgaXMgPHVzZXJpbnB1dD5qc3Qud2ViPC91c2VyaW5wdXQ+LjwvcD48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+Q3VzdG9taXplQ2xpZW50TWFwcGluZ3M8L3B0Pg0KLTxwZD48cD5PcHRpb25zOiA8dXNlcmlucHV0PnRydWU8L3VzZXJpbnB1dD4gPHVzZXJpbnB1dD5mYWxzZTwvdXNlcmlucHV0PjwvcD48cD5NYXBwaW5ncw0KLWFyZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IG5hbWVzcGFjZSBuYW1lcyBpbiB0aGUgZ2VuZXJhdGVkIFdTREwuIFRoZQ0KLWNvbnRlbnQgb2YgdGhlIHByb3BlcnRpZXMgZmlsZSBtdXN0IGJlIG9mIHRoZSBmb3JtYXQgcGFja2FnZSA9IG5hbWVzcGFjZTwvcD48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+TWFwcGluZ3M8L3B0Pg0KLTxwZD5FbnRlciB0aGUgd29ya3NwYWNlIHJlbGF0aXZlIFVSSSB0byBhIHByb3BlcnR5IGZpbGUgY29udGFpbmluZyBtYXBwaW5ncy4gPC9wZD4NCi08L3BsZW50cnk+PHBsZW50cnk+DQotPHB0Pk92ZXJ3cml0ZUZpbGVzRW5hYmxlZDwvcHQ+DQotPHBkPjxzeW5waD4gT3B0aW9uczogPGNvZGVwaD50cnVlPC9jb2RlcGg+IDxjb2RlcGg+ZmFsc2U8L2NvZGVwaD48L3N5bnBoPjwvcGQ+DQotPHBkPlVzZSB0aGlzIHBhcmFtZXRlciB0byB0ZWxsIHRoZSBBbnQgdGFzayB0byBvdmVyd3JpdGUgYW55IGZpbGUgdGhhdCBpdA0KLWNyZWF0ZXMgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIGFuIGV4aXN0aW5nIGZpbGUuIEJ5IGRlZmF1bHQgdGhpcyBpcyBzZXQgdG8gPGNvZGVwaD50cnVlPC9jb2RlcGg+LjwvcGQ+DQotPC9wbGVudHJ5PjxwbGVudHJ5Pg0KLTxwdD5DcmVhdGVGb2xkZXJzRW5hYmxlZDwvcHQ+DQotPHBkPjxzeW5waD4gT3B0aW9uczogPGNvZGVwaD50cnVlPC9jb2RlcGg+IDxjb2RlcGg+ZmFsc2U8L2NvZGVwaD48L3N5bnBoPjwvcGQ+DQotPHBkPlVzZSB0aGlzIHBhcmFtZXRlciB0byB0ZWxsIHRoZSBBbnQgdGFzayB0byBjcmVhdGUgYW55IG5lY2Nlc3NhcnkgZm9sZGVycy4NCi1CeSBkZWZhdWx0IHRoaXMgaXMgc2V0IHRvIDxjb2RlcGg+dHJ1ZTwvY29kZXBoPi48L3BkPg0KLTwvcGxlbnRyeT48cGxlbnRyeT4NCi08cHQ+Q2hlY2tvdXRGaWxlc0VuYWJsZWQ8L3B0Pg0KLTxwZD48c3lucGg+IE9wdGlvbnM6IDxjb2RlcGg+dHJ1ZTwvY29kZXBoPiA8Y29kZXBoPmZhbHNlPC9jb2RlcGg+PC9zeW5waD48L3BkPg0KLTxwZD5Vc2UgdGhpcyBwYXJhbWV0ZXIgdG8gdGVsbCB0aGUgQW50IHRhc2sgdG8gY2hlY2tvdXQgZmlsZXMgZnJvbSBDVlMgd2l0aG91dA0KLXByb21wdGluZyB5b3UuIEJ5IGRlZmF1bHQgdGhpcyBpcyBzZXQgdG8gPGNvZGVwaD50cnVlPC9jb2RlcGg+LjwvcGQ+DQotPC9wbGVudHJ5PjwvcGFybWw+PC9zZWN0aW9uPg0KLTwvcmVmYm9keT4NCi08L3JlZmVyZW5jZT4NCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci90b3BpY3MvcndzY2xpZW50YS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL3J3c2NsaWVudGEuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2QyYjM0My4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci90b3BpY3MvcndzY2xpZW50YS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTY0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA2IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJyZWZlcmVuY2UiIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iQXhpcyBXZWIgc2VydmljZSBjbGllbnQgQW50IHRhc2sgcHJvcGVydGllcyBmaWxlIHJlZmVyZW5jZSIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJUaGUgYXhpc2NsaWVudC5wcm9wZXJ0aWVzIGZpbGUgaXMgdXNlZCB0byBwYXNzIGRhdGEgdG8gdGhlIFdlYiBzZXJ2aWNlcyBBbnQgdGFza3Mgd2hlbiBjcmVhdGluZyBhbiBBeGlzIFdlYiBzZXJ2aWNlIGNsaWVudC4gVGhpcyBmaWxlIHNob3dzIHRoZSBhdmFpbGFibGUgb3B0aW9ucy4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIGF4aXNjbGllbnQucHJvcGVydGllcyBmaWxlIGlzIHVzZWQgdG8gcGFzcyBkYXRhIHRvIHRoZSBXZWIgc2VydmljZXMgQW50IHRhc2tzIHdoZW4gY3JlYXRpbmcgYW4gQXhpcyBXZWIgc2VydmljZSBjbGllbnQuIFRoaXMgZmlsZSBzaG93cyB0aGUgYXZhaWxhYmxlIG9wdGlvbnMuIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvdHdid3NjbGllbnRhLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0iYXhpc3dlYnNlcnZpY2VjbGllbnRjb21tYW5kbGluZXJlZmVyZW5jZSIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkF4aXMgV2ViIHNlcnZpY2UgY2xpZW50IEFudCB0YXNrIHByb3BlcnRpZXMgZmlsZSByZWZlcmVuY2U8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9ImF4aXN3ZWJzZXJ2aWNlY2xpZW50Y29tbWFuZGxpbmVyZWZlcmVuY2UiPjxhIG5hbWU9ImF4aXN3ZWJzZXJ2aWNlY2xpZW50Y29tbWFuZGxpbmVyZWZlcmVuY2UiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkF4aXMgV2ViIHNlcnZpY2UgY2xpZW50IEFudCB0YXNrIHByb3BlcnRpZXMgZmlsZSByZWZlcmVuY2U8L2gxPgotCi0KLTxkaXY+PHA+VGhlIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+YXhpc2NsaWVudC5wcm9wZXJ0aWVzPC9rYmQ+IGZpbGUgaXMgdXNlZCB0bwotcGFzcyBkYXRhIHRvIHRoZSBXZWIgc2VydmljZXMgQW50IHRhc2tzIHdoZW4gY3JlYXRpbmcgYW4gQXhpcyBXZWIgc2VydmljZQotY2xpZW50LiBUaGlzIGZpbGUgc2hvd3MgdGhlIGF2YWlsYWJsZSBvcHRpb25zLjwvcD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PGg0IGNsYXNzPSJzZWN0aW9udGl0bGUiPlBhcmFtZXRlcnM8L2g0PjxkbD4KLTxkdCBjbGFzcz0iZGx0ZXJtIj5TY2VuYXJpb1R5cGU8L2R0PgotCi08ZGQ+PHNwYW4gY2xhc3M9InN5bnBoIj4gT3B0aW9uczogPHNhbXAgY2xhc3M9ImNvZGVwaCI+Y2xpZW50PC9zYW1wPjwvc3Bhbj48L2RkPgotCi08ZGQgY2xhc3M9ImRkZXhwYW5kIj5UaGlzIGlzIGEgcmVxdWlyZWQgZWxlbWVudCB0aGF0IHRlbGxzIHRoZSBBbnQgdGFzayBpZiBpdCBpcyBjcmVhdGluZyBhCi1XZWIgc2VydmljZSBvciBhIFdlYiBzZXJ2aWNlIGNsaWVudC48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5Jbml0aWFsU2VsZWN0aW9uPC9kdD4KLQotPGRkPkVudGVyIHRoZSB3b3Jrc3BhY2UgcmVsYXRpdmUgVVJJIHRvIHRoZSBXU0RMIGZpbGUgb3IgSmF2YSBiZWFuIHdpdGhpbgoteW91ciB3b3Jrc3BhY2UuIEZvciBleGFtcGxlIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+L2R5bmFtaWNXZWJQcm9qZWN0TmFtZS9XZWJDb250ZW50L215U2VydmljZS53c2RsPC9rYmQ+IG9yIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+L2R5bmFtaWNXZWJQcm9qZWN0TmFtZS9zcmMvbXlCZWFuLmphdmE8L2tiZD48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5MaXN0UnVudGltZXM8L2R0PgotCi08ZGQ+PHNwYW4gY2xhc3M9InN5bnBoIj4gT3B0aW9uczogPHNhbXAgY2xhc3M9ImNvZGVwaCI+dHJ1ZTwvc2FtcD4gPHNhbXAgY2xhc3M9ImNvZGVwaCI+ZmFsc2U8L3NhbXA+PC9zcGFuPjwvZGQ+Ci0KLTxkZCBjbGFzcz0iZGRleHBhbmQiPklmIDxzYW1wIGNsYXNzPSJjb2RlcGgiPnRydWU8L3NhbXA+IGlzIHNlbGVjdGVkLCB0aGUgbGlzdCBvZiB2YWxpZCBydW50aW1lIG9wdGlvbnMKLXdpbGwgYmUgcHJvdmlkZWQgd2hlbiB0aGUgQW50IHRhc2sgaXMgcnVuLjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPkxpc3RTZXJ2ZXJzPC9kdD4KLQotPGRkPjxzcGFuIGNsYXNzPSJzeW5waCI+IE9wdGlvbnM6IDxzYW1wIGNsYXNzPSJjb2RlcGgiPnRydWU8L3NhbXA+IDxzYW1wIGNsYXNzPSJjb2RlcGgiPmZhbHNlPC9zYW1wPjwvc3Bhbj48L2RkPgotCi08ZGQgY2xhc3M9ImRkZXhwYW5kIj5JZiA8c2FtcCBjbGFzcz0iY29kZXBoIj50cnVlPC9zYW1wPiBpcyBzZWxlY3RlZCwgdGhlIGxpc3Qgb2YgdmFsaWQgc2VydmVyIG9wdGlvbnMKLXdpbGwgYmUgcHJvdmlkZWQgd2hlbiB0aGUgQW50IHRhc2sgaXMgcnVuLjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPkNsaWVudC5SdW50aW1lSWQ8L2R0PgotCi08ZGQ+VGhpcyBpcyB0aGUgSUQgb2YgdGhlIFdlYiBzZXJ2aWNlJ3MgcnVudGltZS4gVGhpcyBwYXJhbWV0ZXIgc2hvdWxkIG5vdAotYmUgbW9kaWZpZWQuPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+Q2xpZW50LlNlcnZlcklkPC9kdD4KLQotPGRkPk9wdGlvbnM6PHVsIGNsYXNzPSJzaW1wbGUiPgotPGxpPjxzYW1wIGNsYXNzPSJjb2RlcGgiPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0Lng8L3NhbXA+ICh3aGVyZSA8c2FtcCBjbGFzcz0iY29kZXBoIj54PC9zYW1wPiBpcyA8c2FtcCBjbGFzcz0iY29kZXBoIj4zMiwKLTQwLCA0MSwgNTAsPC9zYW1wPiBvciA8c2FtcCBjbGFzcz0iY29kZXBoIj41NTwvc2FtcD4pPC9saT4KLQotPGxpPjxzYW1wIGNsYXNzPSJjb2RlcGgiPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuZ2VuZXJpYy53ZWJsb2dpY3g8L3NhbXA+ICh3aGVyZSA8c2FtcCBjbGFzcz0iY29kZXBoIj54PC9zYW1wPiBpcyA8c2FtcCBjbGFzcz0iY29kZXBoIj44MTwvc2FtcD4gb3IgPHNhbXAgY2xhc3M9ImNvZGVwaCI+OTA8L3NhbXA+KSA8L2xpPgotCi08bGk+PHNhbXAgY2xhc3M9ImNvZGVwaCI+b3JnLmVjbGlwc2UuanN0LnNlcnZlci5nZW5lcmljLmpib3NzeDwvc2FtcD4gKHdoZXJlIDxzYW1wIGNsYXNzPSJjb2RlcGgiPng8L3NhbXA+IGlzIDxzYW1wIGNsYXNzPSJjb2RlcGgiPjMyMzwvc2FtcD4gb3IgPHNhbXAgY2xhc3M9ImNvZGVwaCI+NDwvc2FtcD4pPC9saT4KLQotPGxpPjxzYW1wIGNsYXNzPSJjb2RlcGgiPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuZ2VuZXJpYy5qb25hczQ8L3NhbXA+PC9saT4KLQotPGxpPjxzYW1wIGNsYXNzPSJjb2RlcGgiPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuZ2VuZXJpYy5vcmFjbGUxMDEzPC9zYW1wPjwvbGk+Ci0KLTxsaT48c2FtcCBjbGFzcz0iY29kZXBoIj5vcmcuZWNsaXBzZS5qc3Quc2VydmVycy53ZWJzcGhlcmUuNjwvc2FtcD48L2xpPgotCi08L3VsPgotPC9kZD4KLQotPGRkIGNsYXNzPSJkZGV4cGFuZCI+VGhpcyBpcyB0aGUgSUQgb2YgdGhlIHRhcmdldCBzZXJ2ZXIuIERlbGV0ZSBvciBjb21tZW50IG91dCB0aGlzIHBhcmFtZXRlcgotdG8gaGF2ZSB0aGUgQW50IHRhc2sgc2VsZWN0IHRoZSBjb3JyZWN0IHZhbHVlIGJhc2VkIG9uIHRoZSBzZXJ2ZXIgc2V0dGluZ3MKLW9mIHRoZSBkeW5hbWljIFdlYiBwcm9qZWN0LjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPkNsaWVudFByb2plY3ROYW1lPC9kdD4KLQotPGRkPkJ5IGRlZmF1bHQgdGhlIGNsaWVudCBwcm9qZWN0IGlzIGdpdmVuIHRoZSBuYW1lIG9mIHRoZSBXU0RMIGZpbGUgb3IgSmF2YQotYmVhbiBmcm9tIHdoaWNoIGl0IGlzIGNyZWF0ZWQuIFVzZSB0aGlzIHBhcmFtZXRlciB0byBjcmVhdGUgdGhlIHNlcnZpY2UgcHJvamVjdAotd2l0aCBhIGRpZmZlcmVudCBuYW1lLjwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPkNsaWVudEVhclByb2plY3ROYW1lPC9kdD4KLQotPGRkPkJ5IGRlZmF1bHQgdGhlIGNsaWVudCBFQVIgcHJvamVjdCBpcyBnaXZlbiB0aGUgbmFtZSBvZiB0aGUgV1NETCBmaWxlIG9yCi1KYXZhIGJlYW4gZnJvbSB3aGljaCBpdCBpcyBjcmVhdGVkLiBVc2UgdGhpcyBwYXJhbWV0ZXIgdG8gY3JlYXRlIHRoZSBzZXJ2aWNlCi1FQVIgcHJvamVjdCB3aXRoIGEgZGlmZmVyZW50IG5hbWUuPC9kZD4KLQotCi08ZHQgY2xhc3M9ImRsdGVybSI+Q2xpZW50Q29tcG9uZW50VHlwZTwvZHQ+Ci0KLTxkZD48cD5PcHRpb25zOiA8a2JkIGNsYXNzPSJ1c2VyaW5wdXQiPmpzdC53ZWI8L2tiZD4gPGtiZCBjbGFzcz0idXNlcmlucHV0Ij5qc3QuamF2YTwva2JkPjwvcD4KLTxwPlVzZQotdGhpcyBwYXJhbWV0ZXIgdG8gc2VsZWN0IHRoZSB0eXBlIG9mIGNsaWVudCBwcm9qZWN0LiBUaGUgb25seSB2YWxpZCBjbGllbnQKLXByb2plY3QgdHlwZSBmb3IgQXhpcyBjbGllbnRzIGlzIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+anN0LndlYjwva2JkPi48L3A+Ci08L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5DdXN0b21pemVDbGllbnRNYXBwaW5nczwvZHQ+Ci0KLTxkZD48cD5PcHRpb25zOiA8a2JkIGNsYXNzPSJ1c2VyaW5wdXQiPnRydWU8L2tiZD4gPGtiZCBjbGFzcz0idXNlcmlucHV0Ij5mYWxzZTwva2JkPjwvcD4KLTxwPk1hcHBpbmdzCi1hcmUgdXNlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBuYW1lc3BhY2UgbmFtZXMgaW4gdGhlIGdlbmVyYXRlZCBXU0RMLiBUaGUKLWNvbnRlbnQgb2YgdGhlIHByb3BlcnRpZXMgZmlsZSBtdXN0IGJlIG9mIHRoZSBmb3JtYXQgcGFja2FnZSA9IG5hbWVzcGFjZTwvcD4KLTwvZGQ+Ci0KLQotPGR0IGNsYXNzPSJkbHRlcm0iPk1hcHBpbmdzPC9kdD4KLQotPGRkPkVudGVyIHRoZSB3b3Jrc3BhY2UgcmVsYXRpdmUgVVJJIHRvIGEgcHJvcGVydHkgZmlsZSBjb250YWluaW5nIG1hcHBpbmdzLiA8L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5PdmVyd3JpdGVGaWxlc0VuYWJsZWQ8L2R0PgotCi08ZGQ+PHNwYW4gY2xhc3M9InN5bnBoIj4gT3B0aW9uczogPHNhbXAgY2xhc3M9ImNvZGVwaCI+dHJ1ZTwvc2FtcD4gPHNhbXAgY2xhc3M9ImNvZGVwaCI+ZmFsc2U8L3NhbXA+PC9zcGFuPjwvZGQ+Ci0KLTxkZCBjbGFzcz0iZGRleHBhbmQiPlVzZSB0aGlzIHBhcmFtZXRlciB0byB0ZWxsIHRoZSBBbnQgdGFzayB0byBvdmVyd3JpdGUgYW55IGZpbGUgdGhhdCBpdAotY3JlYXRlcyB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgYW4gZXhpc3RpbmcgZmlsZS4gQnkgZGVmYXVsdCB0aGlzIGlzIHNldCB0byA8c2FtcCBjbGFzcz0iY29kZXBoIj50cnVlPC9zYW1wPi48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5DcmVhdGVGb2xkZXJzRW5hYmxlZDwvZHQ+Ci0KLTxkZD48c3BhbiBjbGFzcz0ic3lucGgiPiBPcHRpb25zOiA8c2FtcCBjbGFzcz0iY29kZXBoIj50cnVlPC9zYW1wPiA8c2FtcCBjbGFzcz0iY29kZXBoIj5mYWxzZTwvc2FtcD48L3NwYW4+PC9kZD4KLQotPGRkIGNsYXNzPSJkZGV4cGFuZCI+VXNlIHRoaXMgcGFyYW1ldGVyIHRvIHRlbGwgdGhlIEFudCB0YXNrIHRvIGNyZWF0ZSBhbnkgbmVjY2Vzc2FyeSBmb2xkZXJzLgotQnkgZGVmYXVsdCB0aGlzIGlzIHNldCB0byA8c2FtcCBjbGFzcz0iY29kZXBoIj50cnVlPC9zYW1wPi48L2RkPgotCi0KLTxkdCBjbGFzcz0iZGx0ZXJtIj5DaGVja291dEZpbGVzRW5hYmxlZDwvZHQ+Ci0KLTxkZD48c3BhbiBjbGFzcz0ic3lucGgiPiBPcHRpb25zOiA8c2FtcCBjbGFzcz0iY29kZXBoIj50cnVlPC9zYW1wPiA8c2FtcCBjbGFzcz0iY29kZXBoIj5mYWxzZTwvc2FtcD48L3NwYW4+PC9kZD4KLQotPGRkIGNsYXNzPSJkZGV4cGFuZCI+VXNlIHRoaXMgcGFyYW1ldGVyIHRvIHRlbGwgdGhlIEFudCB0YXNrIHRvIGNoZWNrb3V0IGZpbGVzIGZyb20gQ1ZTIHdpdGhvdXQKLXByb21wdGluZyB5b3UuIEJ5IGRlZmF1bHQgdGhpcyBpcyBzZXQgdG8gPHNhbXAgY2xhc3M9ImNvZGVwaCI+dHJ1ZTwvc2FtcD4uPC9kZD4KLQotPC9kbD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImZhbWlseWxpbmtzIj4KLTxkaXYgY2xhc3M9InBhcmVudGxpbmsiPjxzdHJvbmc+UGFyZW50IHRvcGljOjwvc3Ryb25nPiA8YSBocmVmPSIuLi90b3BpY3MvdHdid3NjbGllbnRhLmh0bWwiIHRpdGxlPSJJZiB5b3UgaGF2ZSBhIFdTREwgZmlsZSB5b3UgY2FuIHVzZSBBbnQgdGhyb3VnaCB0aGUgRWNsaXBzZSB3b3Jrc3BhY2UgdG8gZ2VuZXJhdGUgYSBXZWIgc2VydmljZSBjbGllbnQgdXNpbmcgdGhlIEF4aXMgcnVuLXRpbWUgZW52aXJvbm1lbnQuIj5DcmVhdGluZyBhIFdlYiBzZXJ2aWNlIGNsaWVudCB1c2luZyBBbnQgdGFza3M8L2E+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL3R3YndzYS5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL3R3YndzYS5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NWU5MTQzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy90d2J3c2EuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+DQotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4NCi08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiINCi0gInRhc2suZHRkIj4NCi08dGFzayBpZD0idHRkd3NhIiB4bWw6bGFuZz0iZW4tdXMiPg0KLTx0aXRsZT5DcmVhdGluZyBhIFdlYiBzZXJ2aWNlIHVzaW5nIEFudCB0YXNrcyBpbiB0aGUgV29ya2JlbmNoPC90aXRsZT4NCi08dGl0bGVhbHRzPg0KLTxzZWFyY2h0aXRsZT5DcmVhdGluZyBhbiBBeGlzIHJ1bnRpbWUgV2ViIHNlcnZpY2UgdXNpbmcgQW50IHRhc2tzIGluIHRoZSBXb3JrYmVuY2g8L3NlYXJjaHRpdGxlPg0KLTwvdGl0bGVhbHRzPg0KLTxzaG9ydGRlc2M+WW91IGNhbiB1c2UgQW50IHRocm91Z2ggdGhlIEVjbGlwc2Ugd29ya3NwYWNlIHRvIGdlbmVyYXRlIGEgV2ViDQotc2VydmljZSB1c2luZyB0aGUgQXhpcyBydW4tdGltZSBlbnZpcm9ubWVudC4gQm90aCB0b3AtZG93biBhbmQgYm90dG9tLXVwIFdlYg0KLXNlcnZpY2VzIGRldmVsb3BtZW50IGlzIHN1cHBvcnRlZCB3aXRoIHRoZSBBbnQgdGFza3MuPC9zaG9ydGRlc2M+DQotPHRhc2tib2R5Pg0KLTxwcmVyZXE+QmVmb3JlIGNyZWF0aW5nIHRoZSBXZWIgc2VydmljZSB5b3UgbXVzdDo8dWw+DQotPGxpPmNvbXBsZXRlIHRoZSBwcmVyZXF1aXNpdGVzIGxpc3RlZCBpbjogPHhyZWYgaHJlZj0iY3dzYXhpc2FudC5kaXRhIj48L3hyZWY+PC9saT4NCi08bGk+aWYgeW91IGFyZSBjcmVhdGluZyBhIHRvcC1kb3duIFdlYiBzZXJ2aWNlLCBjcmVhdGUgb3IgaW1wb3J0IGEgV1NETCBmaWxlDQotaW50byB0aGUgPHVzZXJpbnB1dD5XZWJDb25lbnQ8L3VzZXJpbnB1dD4gZm9sZGVyIG9mIHRoZSBkeW5hbWljIFdlYiBwcm9qZWN0DQoteW91IGNyZWF0ZWQuPC9saT4NCi08bGk+SWYgeW91IGFyZSBjcmVhdGluZyBhIGJvdHRvbS11cCBXZWIgc2VydmljZSwgY3JlYXRlIG9yIGltcG9ydCBhIEphdmEgYmVhbg0KLWludG8gdGhlIDx1c2VyaW5wdXQ+c3JjPC91c2VyaW5wdXQ+IGZvbGRlciBvZiB0aGUgZHluYW1pYyBXZWIgcHJvamVjdC48L2xpPg0KLTwvdWw+PC9wcmVyZXE+DQotPGNvbnRleHQ+SW4gb3JkZXIgdG8gY3JlYXRlIHRoZSBXZWIgc2VydmljZSB5b3UgbmVlZCB0byBtb2RpZnkgdGhlIEFudCBmaWxlDQotYW5kIHRoZSBzZXJ2aWNlIEFudCBwcm9wZXJ0aWVzIGZpbGUuPC9jb250ZXh0Pg0KLTxzdGVwcz4NCi08c3RlcD48Y21kPkVkaXQgdGhlIEFudCBmaWxlICg8dXNlcmlucHV0PndzZ2VuLnhtbDwvdXNlcmlucHV0PikgdGhhdCB5b3UgaW1wb3J0ZWQNCi1pbiB0aGUgcHJlcmVxdWlzaXRlIHN0ZXBzLiBFbnN1cmUgdGhhdCBpdCBwb2ludHMgdG8gdGhlIHNlcnZpY2UgQW50IHByb3BlcnRpZXMNCi1maWxlOiBpdCBzaG91bGQgY29udGFpbiBhIGxpbmUgc3RhdGluZyA8dXNlcmlucHV0PiZsdDtwcm9wZXJ0eSBmaWxlPSJheGlzc2VydmljZS5wcm9wZXJ0aWVzIi8+PC91c2VyaW5wdXQ+LjwvY21kPg0KLTxpbmZvPlNhdmUgYW55IGNoYW5nZXMgdGhhdCB5b3UgaGF2ZSBtYWRlLjwvaW5mbz48L3N0ZXA+DQotPHN0ZXA+PGNtZD5FZGl0IHRoZSA8dXNlcmlucHV0PmF4aXNzZXJ2aWNlLnByb3BlcnRpZXM8L3VzZXJpbnB1dD4gZmlsZSB0aGF0DQoteW91IGltcG9ydGVkIGluIHRoZSBwcmVyZXF1aXNpdGUgc3RlcHMuPC9jbWQ+DQotPHN1YnN0ZXBzPg0KLTxzdWJzdGVwPjxjbWQ+RW5zdXJlIHRoYXQgdGhlIHNjZW5hcmlvVHlwZSBwYXJhbWV0ZXIgaXMgc2V0IHRvIHNlcnZpY2UuPC9jbWQ+DQotPC9zdWJzdGVwPg0KLTxzdWJzdGVwPjxjbWQ+U2V0IHRoZSB3b3Jrc3BhY2UgcGFyYW1ldGVyIHNvIHRoYXQgaXQgcG9pbnRzIHRvIHRoZSBsb2NhdGlvbg0KLW9mIHlvdXIgV1NETCBmaWxlIG9yIEphdmEgYmVhbi48L2NtZD48L3N1YnN0ZXA+DQotPHN1YnN0ZXA+PGNtZD5BbGwgb3RoZXIgcGFyYW1ldGVycyBhcmUgb3B0aW9uYWwgYW5kIHNob3VsZCBiZSBkZWxldGVkIGlmIG5vdA0KLWV4cGxpY2l0bHkgc2V0LiBUaGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSByZW1haW5pbmcgcGFyYW1ldGVycyB3aWxsIGJlIHJldHJpZXZlZA0KLWZyb20gdGhlIGR5bmFtaWMgcHJvamVjdCBzZXR0aW5ncyBhbmQgcHJlZmVyZW5jZXMuIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQotb24gaG93IHRvIHNldCB0aGVzZSBwYXJhbWV0ZXJzIHJlZmVyIHRvOiA8L2NtZD48aW5mbz48dWw+DQotPGxpPjx4cmVmIGhyZWY9InJ0ZHdzYS5kaXRhIj48L3hyZWY+PC9saT4NCi08bGk+PHhyZWYgaHJlZj0icmJ1d3NhLmRpdGEiPjwveHJlZj48L2xpPg0KLTwvdWw+PC9pbmZvPjwvc3Vic3RlcD4NCi08L3N1YnN0ZXBzPg0KLTxpbmZvPlNhdmUgdGhlIDx1c2VyaW5wdXQ+YXhpc3NlcnZpY2UucHJvcGVydGllczwvdXNlcmlucHV0PiBmaWxlLjwvaW5mbz4NCi08L3N0ZXA+DQotPHN0ZXA+PGNtZD5SaWdodC1jbGljayA8dXNlcmlucHV0PndzZ2VuLnhtbDwvdXNlcmlucHV0PiBhbmQgc2VsZWN0IDxtZW51Y2FzY2FkZT4NCi08dWljb250cm9sPlJ1biBBczwvdWljb250cm9sPjx1aWNvbnRyb2w+QW50IEJ1aWxkLi4uPC91aWNvbnRyb2w+PC9tZW51Y2FzY2FkZT48L2NtZD4NCi08L3N0ZXA+DQotPHN0ZXA+PGNtZD5JbiB0aGUgZGlhbG9nIHRoYXQgb3BlbnMsIHNlbGVjdCB0aGUgPHVpY29udHJvbD5KUkU8L3VpY29udHJvbD4gdGFiDQotYW5kIHNlbGVjdCA8dWljb250cm9sPlJ1biBpbiB0aGUgc2FtZSBKUkUgYXMgdGhlIHdvcmtzcGFjZTwvdWljb250cm9sPi48L2NtZD4NCi08aW5mbz5DbGljayA8dWljb250cm9sPkFwcGx5PC91aWNvbnRyb2w+IGFuZCB0aGVuIGNsaWNrIDx1aWNvbnRyb2w+UnVuPC91aWNvbnRyb2w+LjwvaW5mbz4NCi08L3N0ZXA+DQotPHN0ZXA+PGNtZD5PbmNlIHlvdXIgV2ViIHNlcnZpY2UgaGFzIGJlZW4gZ2VuZXJhdGVkIHRoZSBjb25zb2xlIGRpc3BsYXlzIGEgPHVzZXJpbnB1dD5CdWlsZA0KLVN1Y2Nlc3NmdWw8L3VzZXJpbnB1dD4gbWVzc2FnZS48L2NtZD48L3N0ZXA+DQotPC9zdGVwcz4NCi08cmVzdWx0PlRoZSBXU0RMIGZpbGUgZm9yIHRoZSBzZXJ2aWNlIHdpbGwgaGF2ZSBiZWVuIGNyZWF0ZWQgYW5kIHBsYWNlZCBpbg0KLXRoZSBkeW5hbWljIFdlYiBwcm9qZWN0J3MgV2ViQ29udGVudFx3c2RsIGZvbGRlci4gVGhlIGZvbGxvd2luZyBmaWxlcyB3aWxsDQotaGF2ZSBiZWVuIGNyZWF0ZWQgYW5kIHBsYWNlZCBpbiBhIHN1YmRpcmVjdG9yeSBvZiB0aGUgZHluYW1pYyBXZWIgcHJvamVjdCdzDQotV2ViQ29udGVudFxXRUItSU5GIGZvbGRlcjo8dWw+DQotPGxpPndlYi54bWw8L2xpPg0KLTxsaT51bmRlcGxveS53c2RkPC9saT4NCi08bGk+ZGVwbG95LndzZGQgPC9saT4NCi08L3VsPklmIHlvdSBhcmUgY3JlYXRpbmcgYSB0b3AtZG93biBXZWIgc2VydmljZSwgV2ViIHNlcnZpY2UgZmlsZXMgc2ltaWxhcg0KLXRvIHRoZSBmb2xsb3dpbmcgb25lcyB3aWxsIGJlIGNyZWF0ZWQgYW5kIHBsYWNlZCB1bmRlciB0aGUgZHluYW1pYyBXZWIgcHJvamVjdCdzDQotc3JjIGZvbGRlci4gRGVwZW5kaW5nIG9uIHRoZSBXU0RMIGZpbGUgb24gd2hpY2ggdGhlIFdlYiBzZXJ2aWNlIGlzIGJhc2VkLA0KLXRoZSBmaWxlcyBmb3IgeW91ciBXZWIgc2VydmljZSBtYXkgYmUgZGlmZmVyZW50Ojx1bD4NCi08bGk+PGk+U2VydmljZV9uYW1lPC9pPl9Qb3J0VHlwZS5qYXZhPC9saT4NCi08bGk+PGk+U2VydmljZV9uYW1lPC9pPl9TZXJ2aWNlLmphdmE8L2xpPg0KLTxsaT48aT5TZXJ2aWNlX25hbWU8L2k+X1NlcnZpY2VMb2NhdG9yLmphdmE8L2xpPg0KLTxsaT48aT5TZXJ2aWNlX25hbWU8L2k+U09BUEltcGwuamF2YTwvbGk+DQotPGxpPjxpPlNlcnZpY2VfbmFtZTwvaT5TT0FQU2tlbGV0b24uamF2YTwvbGk+DQotPGxpPjxpPlNlcnZpY2VfbmFtZTwvaT5TT0FQU3R1Yi5qYXZhPC9saT4NCi08L3VsPiA8L3Jlc3VsdD4NCi08L3Rhc2tib2R5Pg0KLTwvdGFzaz4NCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci90b3BpY3MvdHdid3NhLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci90b3BpY3MvdHdid3NhLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1NGVmYzAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL3R3YndzYS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA2IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IkNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgdXNpbmcgQW50IHRhc2tzIGluIHRoZSBXb3JrYmVuY2giIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iWW91IGNhbiB1c2UgQW50IHRocm91Z2ggdGhlIEVjbGlwc2Ugd29ya3NwYWNlIHRvIGdlbmVyYXRlIGEgV2ViIHNlcnZpY2UgdXNpbmcgdGhlIEF4aXMgcnVuLXRpbWUgZW52aXJvbm1lbnQuIEJvdGggdG9wLWRvd24gYW5kIGJvdHRvbS11cCBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQgaXMgc3VwcG9ydGVkIHdpdGggdGhlIEFudCB0YXNrcy4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iWW91IGNhbiB1c2UgQW50IHRocm91Z2ggdGhlIEVjbGlwc2Ugd29ya3NwYWNlIHRvIGdlbmVyYXRlIGEgV2ViIHNlcnZpY2UgdXNpbmcgdGhlIEF4aXMgcnVuLXRpbWUgZW52aXJvbm1lbnQuIEJvdGggdG9wLWRvd24gYW5kIGJvdHRvbS11cCBXZWIgc2VydmljZXMgZGV2ZWxvcG1lbnQgaXMgc3VwcG9ydGVkIHdpdGggdGhlIEFudCB0YXNrcy4iIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy9jd3NheGlzYW50Lmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL3RvcGljcy9ydGR3c2EuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vdG9waWNzL3JidXdzYS5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InR0ZHdzYSIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkNyZWF0aW5nIGFuIEF4aXMgcnVudGltZSBXZWIgc2VydmljZSB1c2luZyBBbnQgdGFza3MgaW4gdGhlIFdvcmtiZW5jaDwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idHRkd3NhIj48YSBuYW1lPSJ0dGR3c2EiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgdXNpbmcgQW50IHRhc2tzIGluIHRoZSBXb3JrYmVuY2g8L2gxPgotCi0KLQotPGRpdj48cD5Zb3UgY2FuIHVzZSBBbnQgdGhyb3VnaCB0aGUgRWNsaXBzZSB3b3Jrc3BhY2UgdG8gZ2VuZXJhdGUgYSBXZWIKLXNlcnZpY2UgdXNpbmcgdGhlIEF4aXMgcnVuLXRpbWUgZW52aXJvbm1lbnQuIEJvdGggdG9wLWRvd24gYW5kIGJvdHRvbS11cCBXZWIKLXNlcnZpY2VzIGRldmVsb3BtZW50IGlzIHN1cHBvcnRlZCB3aXRoIHRoZSBBbnQgdGFza3MuPC9wPgotCi08ZGl2IGNsYXNzPSJwIj5CZWZvcmUgY3JlYXRpbmcgdGhlIFdlYiBzZXJ2aWNlIHlvdSBtdXN0Ojx1bD4KLTxsaT5jb21wbGV0ZSB0aGUgcHJlcmVxdWlzaXRlcyBsaXN0ZWQgaW46IDxhIGhyZWY9ImN3c2F4aXNhbnQuaHRtbCIgdGl0bGU9IklmIHlvdSBwcmVmZXIgbm90IHRvIHVzZSB0aGUgV2ViIHNlcnZpY2Ugd2l6YXJkLCB5b3UgY2FuIHVzZSBBbnQmIzEwO2ZpbGVzIHRvIGNyZWF0ZSBXZWIgc2VydmljZXMgYW5kIGNsaWVudHMgdXNpbmcgdGhlIEF4aXMgcnVudGltZSBlbnZpcm9ubWVudC4mIzEwO1RoZSBXZWIgc2VydmljZXMgQW50IHRhc2tzIGNhbiBiZSBydW4gaW4gdHdvIHdheXM6IHRocm91Z2ggdGhlIEVjbGlwc2Ugd29ya3NwYWNlJiMxMDt1c2luZyBSdW4gQXMgJmd0OyBBbnQgQnVpbGQuLi4sIG9yIHRoZXkgY2FuIGJlIHJ1biBoZWFkbGVzcyB0aHJvdWdoIHRoZSBjb21tYW5kIGxpbmUuIE9uY2UmIzEwO3lvdSBoYXZlIGNyZWF0ZWQgeW91ciBXZWIgc2VydmljZSwgeW91IGNhbiB0aGVuIGRlcGxveSBpdCB0byBhIHNlcnZlciwgdGVzdCYjMTA7aXQsIGFuZCBwdWJsaXNoIGl0IGFzIGEgYnVzaW5lc3MgZW50aXR5IG9yIGJ1c2luZXNzIHNlcnZpY2UuIj5DcmVhdGluZyBBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQgV2ViIHNlcnZpY2VzIGFuZCBjbGllbnRzIHVzaW5nIFdlYiBzZXJ2aWNlcyBBbnQgdGFza3M8L2E+PC9saT4KLQotPGxpPmlmIHlvdSBhcmUgY3JlYXRpbmcgYSB0b3AtZG93biBXZWIgc2VydmljZSwgY3JlYXRlIG9yIGltcG9ydCBhIFdTREwgZmlsZQotaW50byB0aGUgPGtiZCBjbGFzcz0idXNlcmlucHV0Ij5XZWJDb25lbnQ8L2tiZD4gZm9sZGVyIG9mIHRoZSBkeW5hbWljIFdlYiBwcm9qZWN0Ci15b3UgY3JlYXRlZC48L2xpPgotCi08bGk+SWYgeW91IGFyZSBjcmVhdGluZyBhIGJvdHRvbS11cCBXZWIgc2VydmljZSwgY3JlYXRlIG9yIGltcG9ydCBhIEphdmEgYmVhbgotaW50byB0aGUgPGtiZCBjbGFzcz0idXNlcmlucHV0Ij5zcmM8L2tiZD4gZm9sZGVyIG9mIHRoZSBkeW5hbWljIFdlYiBwcm9qZWN0LjwvbGk+Ci0KLTwvdWw+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+SW4gb3JkZXIgdG8gY3JlYXRlIHRoZSBXZWIgc2VydmljZSB5b3UgbmVlZCB0byBtb2RpZnkgdGhlIEFudCBmaWxlCi1hbmQgdGhlIHNlcnZpY2UgQW50IHByb3BlcnRpZXMgZmlsZS48L2Rpdj4KLQotPG9sPgotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5FZGl0IHRoZSBBbnQgZmlsZSAoPGtiZCBjbGFzcz0idXNlcmlucHV0Ij53c2dlbi54bWw8L2tiZD4pIHRoYXQgeW91IGltcG9ydGVkCi1pbiB0aGUgcHJlcmVxdWlzaXRlIHN0ZXBzLiBFbnN1cmUgdGhhdCBpdCBwb2ludHMgdG8gdGhlIHNlcnZpY2UgQW50IHByb3BlcnRpZXMKLWZpbGU6IGl0IHNob3VsZCBjb250YWluIGEgbGluZSBzdGF0aW5nIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+Jmx0O3Byb3BlcnR5IGZpbGU9ImF4aXNzZXJ2aWNlLnByb3BlcnRpZXMiLyZndDs8L2tiZD4uPC9zcGFuPgotIFNhdmUgYW55IGNoYW5nZXMgdGhhdCB5b3UgaGF2ZSBtYWRlLjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+RWRpdCB0aGUgPGtiZCBjbGFzcz0idXNlcmlucHV0Ij5heGlzc2VydmljZS5wcm9wZXJ0aWVzPC9rYmQ+IGZpbGUgdGhhdAoteW91IGltcG9ydGVkIGluIHRoZSBwcmVyZXF1aXNpdGUgc3RlcHMuPC9zcGFuPgotPG9sIHR5cGU9ImEiPgotPGxpIGNsYXNzPSJzdWJzdGVwZXhwYW5kIj48c3Bhbj5FbnN1cmUgdGhhdCB0aGUgc2NlbmFyaW9UeXBlIHBhcmFtZXRlciBpcyBzZXQgdG8gc2VydmljZS48L3NwYW4+Ci08L2xpPgotCi08bGkgY2xhc3M9InN1YnN0ZXBleHBhbmQiPjxzcGFuPlNldCB0aGUgd29ya3NwYWNlIHBhcmFtZXRlciBzbyB0aGF0IGl0IHBvaW50cyB0byB0aGUgbG9jYXRpb24KLW9mIHlvdXIgV1NETCBmaWxlIG9yIEphdmEgYmVhbi48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdWJzdGVwZXhwYW5kIj48c3Bhbj5BbGwgb3RoZXIgcGFyYW1ldGVycyBhcmUgb3B0aW9uYWwgYW5kIHNob3VsZCBiZSBkZWxldGVkIGlmIG5vdAotZXhwbGljaXRseSBzZXQuIFRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIHJlbWFpbmluZyBwYXJhbWV0ZXJzIHdpbGwgYmUgcmV0cmlldmVkCi1mcm9tIHRoZSBkeW5hbWljIHByb2plY3Qgc2V0dGluZ3MgYW5kIHByZWZlcmVuY2VzLiBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotb24gaG93IHRvIHNldCB0aGVzZSBwYXJhbWV0ZXJzIHJlZmVyIHRvOiA8L3NwYW4+IDx1bD4KLTxsaT48YSBocmVmPSJydGR3c2EuaHRtbCIgdGl0bGU9IlRoZSBheGlzc2VydmljZS5wcm9wZXJ0aWVzIGZpbGUgaXMgdXNlZCYjMTA7dG8gcGFzcyBkYXRhIHRvIHRoZSBXZWIgc2VydmljZXMgQW50IHRhc2tzIHdoZW4gY3JlYXRpbmcgYW4gQXhpcyBXZWIgc2VydmljZSYjMTA7LiBUaGlzIGZpbGUgc2hvd3MgdGhlIGF2YWlsYWJsZSBvcHRpb25zLiI+VG9wLWRvd24gQXhpcyBXZWIgc2VydmljZSBBbnQgdGFzayBwcm9wZXJ0aWVzIGZpbGUgcmVmZXJlbmNlPC9hPjwvbGk+Ci0KLTxsaT48YSBocmVmPSJyYnV3c2EuaHRtbCIgdGl0bGU9IlRoZSBheGlzc2VydmljZS5wcm9wZXJ0aWVzIGZpbGUgaXMgdXNlZCYjMTA7dG8gcGFzcyBkYXRhIHRvIHRoZSBXZWIgc2VydmljZXMgQW50IHRhc2tzIHdoZW4gY3JlYXRpbmcgYW4gQXhpcyBXZWIgc2VydmljZSYjMTA7LiBUaGlzIGZpbGUgc2hvd3MgdGhlIGF2YWlsYWJsZSBvcHRpb25zLiI+Qm90dG9tLXVwIEF4aXMgV2ViIHNlcnZpY2UgQW50IHRhc2sgcHJvcGVydGllcyBmaWxlIHJlZmVyZW5jZTwvYT48L2xpPgotCi08L3VsPgotPC9saT4KLQotPC9vbD4KLQotIFNhdmUgdGhlIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+YXhpc3NlcnZpY2UucHJvcGVydGllczwva2JkPiBmaWxlLgotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5SaWdodC1jbGljayA8a2JkIGNsYXNzPSJ1c2VyaW5wdXQiPndzZ2VuLnhtbDwva2JkPiBhbmQgc2VsZWN0IDxzcGFuIGNsYXNzPSJtZW51Y2FzY2FkZSI+Ci08c3BhbiBjbGFzcz0idWljb250cm9sIj5SdW4gQXM8L3NwYW4+ICZndDsgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QW50IEJ1aWxkLi4uPC9zcGFuPjwvc3Bhbj48L3NwYW4+Ci08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSBkaWFsb2cgdGhhdCBvcGVucywgc2VsZWN0IHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5KUkU8L3NwYW4+IHRhYgotYW5kIHNlbGVjdCA8c3BhbiBjbGFzcz0idWljb250cm9sIj5SdW4gaW4gdGhlIHNhbWUgSlJFIGFzIHRoZSB3b3Jrc3BhY2U8L3NwYW4+Ljwvc3Bhbj4KLSBDbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5BcHBseTwvc3Bhbj4gYW5kIHRoZW4gY2xpY2sgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+UnVuPC9zcGFuPi4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+T25jZSB5b3VyIFdlYiBzZXJ2aWNlIGhhcyBiZWVuIGdlbmVyYXRlZCB0aGUgY29uc29sZSBkaXNwbGF5cyBhIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+QnVpbGQKLVN1Y2Nlc3NmdWw8L2tiZD4gbWVzc2FnZS48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+VGhlIFdTREwgZmlsZSBmb3IgdGhlIHNlcnZpY2Ugd2lsbCBoYXZlIGJlZW4gY3JlYXRlZCBhbmQgcGxhY2VkIGluCi10aGUgZHluYW1pYyBXZWIgcHJvamVjdCdzIFdlYkNvbnRlbnRcd3NkbCBmb2xkZXIuIFRoZSBmb2xsb3dpbmcgZmlsZXMgd2lsbAotaGF2ZSBiZWVuIGNyZWF0ZWQgYW5kIHBsYWNlZCBpbiBhIHN1YmRpcmVjdG9yeSBvZiB0aGUgZHluYW1pYyBXZWIgcHJvamVjdCdzCi1XZWJDb250ZW50XFdFQi1JTkYgZm9sZGVyOjx1bD4KLTxsaT53ZWIueG1sPC9saT4KLQotPGxpPnVuZGVwbG95LndzZGQ8L2xpPgotCi08bGk+ZGVwbG95LndzZGQgPC9saT4KLQotPC91bD4KLUlmIHlvdSBhcmUgY3JlYXRpbmcgYSB0b3AtZG93biBXZWIgc2VydmljZSwgV2ViIHNlcnZpY2UgZmlsZXMgc2ltaWxhcgotdG8gdGhlIGZvbGxvd2luZyBvbmVzIHdpbGwgYmUgY3JlYXRlZCBhbmQgcGxhY2VkIHVuZGVyIHRoZSBkeW5hbWljIFdlYiBwcm9qZWN0J3MKLXNyYyBmb2xkZXIuIERlcGVuZGluZyBvbiB0aGUgV1NETCBmaWxlIG9uIHdoaWNoIHRoZSBXZWIgc2VydmljZSBpcyBiYXNlZCwKLXRoZSBmaWxlcyBmb3IgeW91ciBXZWIgc2VydmljZSBtYXkgYmUgZGlmZmVyZW50Ojx1bD4KLTxsaT48ZW0+U2VydmljZV9uYW1lPC9lbT5fUG9ydFR5cGUuamF2YTwvbGk+Ci0KLTxsaT48ZW0+U2VydmljZV9uYW1lPC9lbT5fU2VydmljZS5qYXZhPC9saT4KLQotPGxpPjxlbT5TZXJ2aWNlX25hbWU8L2VtPl9TZXJ2aWNlTG9jYXRvci5qYXZhPC9saT4KLQotPGxpPjxlbT5TZXJ2aWNlX25hbWU8L2VtPlNPQVBJbXBsLmphdmE8L2xpPgotCi08bGk+PGVtPlNlcnZpY2VfbmFtZTwvZW0+U09BUFNrZWxldG9uLmphdmE8L2xpPgotCi08bGk+PGVtPlNlcnZpY2VfbmFtZTwvZW0+U09BUFN0dWIuamF2YTwvbGk+Ci0KLTwvdWw+Ci0gPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPHVsIGNsYXNzPSJ1bGxpbmtzIj4KLTxsaSBjbGFzcz0idWxjaGlsZGxpbmsiPjxzdHJvbmc+PGEgaHJlZj0iLi4vdG9waWNzL3J0ZHdzYS5odG1sIj5Ub3AtZG93biBBeGlzIFdlYiBzZXJ2aWNlIEFudCB0YXNrIHByb3BlcnRpZXMgZmlsZSByZWZlcmVuY2U8L2E+PC9zdHJvbmc+PGJyIC8+Ci1UaGUgYXhpc3NlcnZpY2UucHJvcGVydGllcyBmaWxlIGlzIHVzZWQgdG8gcGFzcyBkYXRhIHRvIHRoZSBXZWIgc2VydmljZXMgQW50IHRhc2tzIHdoZW4gY3JlYXRpbmcgYW4gQXhpcyBXZWIgc2VydmljZSAuIFRoaXMgZmlsZSBzaG93cyB0aGUgYXZhaWxhYmxlIG9wdGlvbnMuPC9saT4KLTxsaSBjbGFzcz0idWxjaGlsZGxpbmsiPjxzdHJvbmc+PGEgaHJlZj0iLi4vdG9waWNzL3JidXdzYS5odG1sIj5Cb3R0b20tdXAgQXhpcyBXZWIgc2VydmljZSBBbnQgdGFzayBwcm9wZXJ0aWVzIGZpbGUgcmVmZXJlbmNlPC9hPjwvc3Ryb25nPjxiciAvPgotVGhlIGF4aXNzZXJ2aWNlLnByb3BlcnRpZXMgZmlsZSBpcyB1c2VkIHRvIHBhc3MgZGF0YSB0byB0aGUgV2ViIHNlcnZpY2VzIEFudCB0YXNrcyB3aGVuIGNyZWF0aW5nIGFuIEF4aXMgV2ViIHNlcnZpY2UgLiBUaGlzIGZpbGUgc2hvd3MgdGhlIGF2YWlsYWJsZSBvcHRpb25zLjwvbGk+Ci08L3VsPgotCi08ZGl2IGNsYXNzPSJmYW1pbHlsaW5rcyI+Ci08ZGl2IGNsYXNzPSJwYXJlbnRsaW5rIj48c3Ryb25nPlBhcmVudCB0b3BpYzo8L3N0cm9uZz4gPGEgaHJlZj0iLi4vdG9waWNzL2N3c2F4aXNhbnQuaHRtbCIgdGl0bGU9IklmIHlvdSBwcmVmZXIgbm90IHRvIHVzZSB0aGUgV2ViIHNlcnZpY2Ugd2l6YXJkLCB5b3UgY2FuIHVzZSBBbnQgZmlsZXMgdG8gY3JlYXRlIFdlYiBzZXJ2aWNlcyBhbmQgY2xpZW50cyB1c2luZyB0aGUgQXhpcyBydW50aW1lIGVudmlyb25tZW50LiBUaGUgV2ViIHNlcnZpY2VzIEFudCB0YXNrcyBjYW4gYmUgcnVuIGluIHR3byB3YXlzOiB0aHJvdWdoIHRoZSBFY2xpcHNlIHdvcmtzcGFjZSB1c2luZyBSdW4gQXMgJmd0OyBBbnQgQnVpbGQuLi4sIG9yIHRoZXkgY2FuIGJlIHJ1biBoZWFkbGVzcyB0aHJvdWdoIHRoZSBjb21tYW5kIGxpbmUuIE9uY2UgeW91IGhhdmUgY3JlYXRlZCB5b3VyIFdlYiBzZXJ2aWNlLCB5b3UgY2FuIHRoZW4gZGVwbG95IGl0IHRvIGEgc2VydmVyLCB0ZXN0IGl0LCBhbmQgcHVibGlzaCBpdCBhcyBhIGJ1c2luZXNzIGVudGl0eSBvciBidXNpbmVzcyBzZXJ2aWNlLiI+Q3JlYXRpbmcgQXhpcyBydW50aW1lIGVudmlyb25tZW50IFdlYiBzZXJ2aWNlcyBhbmQgY2xpZW50cyB1c2luZyBXZWIgc2VydmljZXMgQW50IHRhc2tzPC9hPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy90d2J3c2NsaWVudGEuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy90d2J3c2NsaWVudGEuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI3YjVjNy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci90b3BpY3MvdHdid3NjbGllbnRhLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+DQotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iDQotICJ0YXNrLmR0ZCI+DQotPHRhc2sgaWQ9InR3c2NsaWVudGEiIHhtbDpsYW5nPSJlbi11cyI+DQotPHRpdGxlPkNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgY2xpZW50IHVzaW5nIEFudCB0YXNrczwvdGl0bGU+DQotPHRpdGxlYWx0cz4NCi08c2VhcmNodGl0bGU+Q3JlYXRpbmcgYW4gQXhpcyBydW50aW1lIFdlYiBzZXJ2aWNlIGNsaWVudCBmcm9tIGEgV1NETCBmaWxlDQotdXNpbmcgY29tbWFuZCBsaW5lIHRvb2xzPC9zZWFyY2h0aXRsZT4NCi08L3RpdGxlYWx0cz4NCi08c2hvcnRkZXNjPklmIHlvdSBoYXZlIGEgV1NETCBmaWxlIHlvdSBjYW4gdXNlIEFudCB0aHJvdWdoIHRoZSBFY2xpcHNlIHdvcmtzcGFjZQ0KLXRvIGdlbmVyYXRlIGEgV2ViIHNlcnZpY2UgY2xpZW50IHVzaW5nIHRoZSBBeGlzIHJ1bi10aW1lIGVudmlyb25tZW50Ljwvc2hvcnRkZXNjPg0KLTx0YXNrYm9keT4NCi08cHJlcmVxPkJlZm9yZSBjcmVhdGluZyB0aGUgV2ViIHNlcnZpY2UgY2xpZW50IHlvdSBtdXN0Ojx1bD4NCi08bGk+Y29tcGxldGUgdGhlIHByZXJlcXVpc2l0ZXMgbGlzdGVkIGluOiA8eHJlZiBocmVmPSJjd3NheGlzYW50LmRpdGEiPjwveHJlZj48L2xpPg0KLTxsaT5jcmVhdGUgb3IgaW1wb3J0IGEgV1NETCBmaWxlIGludG8gdGhlIGR5bmFtaWMgV2ViIHByb2plY3QgeW91IGNyZWF0ZWQuPC9saT4NCi08L3VsPjwvcHJlcmVxPg0KLTxjb250ZXh0PkluIG9yZGVyIHRvIGNyZWF0ZSB0aGUgV2ViIHNlcnZpY2UgY2xpZW50IHlvdSBuZWVkIHRvIG1vZGlmeSB0aGUNCi1BbnQgZmlsZSBhbmQgdGhlIEFudCBwcm9wZXJ0aWVzIGZpbGUuPC9jb250ZXh0Pg0KLTxzdGVwcz4NCi08c3RlcD48Y21kPkVkaXQgdGhlIEFudCBmaWxlICg8dXNlcmlucHV0PndzZ2VuLnhtbDwvdXNlcmlucHV0PikgdGhhdCB5b3UgaW1wb3J0ZWQNCi1pbiB0aGUgcHJlcmVxdWlzaXRlIHN0ZXBzLiBFbnN1cmUgdGhhdCBpdCBwb2ludHMgdG8gdGhlIGNsaWVudCBBbnQgcHJvcGVydGllcw0KLWZpbGU6IGl0IHNob3VsZCBjb250YWluIGEgbGluZSBzdGF0aW5nIDx1c2VyaW5wdXQ+Jmx0O3Byb3BlcnR5IGZpbGU9ImF4aXNjbGllbnQucHJvcGVydGllcyIvPjwvdXNlcmlucHV0Pi48L2NtZD4NCi08aW5mbz5TYXZlIGFueSBjaGFuZ2VzIHRoYXQgeW91IGhhdmUgbWFkZS48L2luZm8+PC9zdGVwPg0KLTxzdGVwPjxjbWQ+RWRpdCB0aGUgPHVzZXJpbnB1dD5heGlzY2xpZW50LnByb3BlcnRpZXM8L3VzZXJpbnB1dD4gZmlsZSB0aGF0DQoteW91IGltcG9ydGVkIGluIHRoZSBwcmVyZXF1aXNpdGUgc3RlcHMuPC9jbWQ+DQotPHN1YnN0ZXBzPg0KLTxzdWJzdGVwPjxjbWQ+RW5zdXJlIHRoYXQgdGhlIHNjZW5hcmlvVHlwZSBwYXJhbWV0ZXIgaXMgc2V0IHRvIGNsaWVudC48L2NtZD4NCi08L3N1YnN0ZXA+DQotPHN1YnN0ZXA+PGNtZD5TZXQgdGhlIHdvcmtzcGFjZSBwYXJhbWV0ZXIgc28gdGhhdCBpdCBwb2ludHMgdG8gdGhlIGxvY2F0aW9uDQotb2YgeW91ciBXU0RMIGZpbGUuPC9jbWQ+PC9zdWJzdGVwPg0KLTxzdWJzdGVwPjxjbWQ+QWxsIG90aGVyIHBhcmFtZXRlcnMgYXJlIG9wdGlvbmFsIGFuZCBzaG91bGQgYmUgZGVsZXRlZCBpZiBub3QNCi1leHBsaWNpdGx5IHNldC4gVGhlIGRlZmF1bHQgdmFsdWVzIGZvciB0aGUgcmVtYWluaW5nIHBhcmFtZXRlcnMgd2lsbCBiZSByZXRyaWV2ZWQNCi1mcm9tIHRoZSBkeW5hbWljIHByb2plY3Qgc2V0dGluZ3MuIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGhvdyB0byBzZXQNCi10aGVzZSBwYXJhbWV0ZXJzIHJlZmVyIHRvOiA8eHJlZiBocmVmPSJyd3NjbGllbnRhLmRpdGEiPjwveHJlZj48L2NtZD48L3N1YnN0ZXA+DQotPC9zdWJzdGVwcz4NCi08aW5mbz5TYXZlIHRoZSA8dXNlcmlucHV0PmF4aXNjbGllbnQucHJvcGVydGllczwvdXNlcmlucHV0PiBmaWxlLjwvaW5mbz48L3N0ZXA+DQotPHN0ZXA+PGNtZD5SaWdodC1jbGljayA8dXNlcmlucHV0PndzZ2VuLnhtbDwvdXNlcmlucHV0PiBhbmQgc2VsZWN0IDxtZW51Y2FzY2FkZT4NCi08dWljb250cm9sPlJ1biBBczwvdWljb250cm9sPjx1aWNvbnRyb2w+QW50IEJ1aWxkLi4uPC91aWNvbnRyb2w+PC9tZW51Y2FzY2FkZT48L2NtZD4NCi08L3N0ZXA+DQotPHN0ZXA+PGNtZD5JbiB0aGUgZGlhbG9nIHRoYXQgb3BlbnMsIHNlbGVjdCB0aGUgPHVpY29udHJvbD5KUkU8L3VpY29udHJvbD4gdGFiDQotYW5kIHNlbGVjdCA8dWljb250cm9sPlJ1biBpbiB0aGUgc2FtZSBKUkUgYXMgdGhlIHdvcmtzcGFjZTwvdWljb250cm9sPi48L2NtZD4NCi08aW5mbz5DbGljayA8dWljb250cm9sPkFwcGx5PC91aWNvbnRyb2w+IGFuZCB0aGVuIGNsaWNrIDx1aWNvbnRyb2w+UnVuPC91aWNvbnRyb2w+LjwvaW5mbz4NCi08L3N0ZXA+DQotPHN0ZXA+PGNtZD5PbmNlIHlvdXIgV2ViIHNlcnZpY2UgaGFzIGJlZW4gZ2VuZXJhdGVkIHRoZSBjb25zb2xlIGRpc3BsYXlzIGEgPHVzZXJpbnB1dD5CdWlsZA0KLVN1Y2Nlc3NmdWw8L3VzZXJpbnB1dD4gbWVzc2FnZS48L2NtZD48L3N0ZXA+DQotPC9zdGVwcz4NCi08cmVzdWx0PlRoZSBmb2xsb3dpbmcgZmlsZXMgd2lsbCBoYXZlIGJlZW4gY3JlYXRlZCBhbmQgcGxhY2VkIGluIHRoZSBkeW5hbWljDQotV2ViIHByb2plY3QncyBXZWJDb250ZW50XHdzZGwgZm9sZGVyOjx1bD4NCi08bGk+PGk+U2VydmljZV9uYW1lPC9pPlNPQVAud3NkbCA8L2xpPg0KLTwvdWw+VGhlIGZvbGxvd2luZyBmaWxlcyB3aWxsIGhhdmUgYmVlbiBjcmVhdGVkIGFuZCBwbGFjZWQgaW4gdGhlIGR5bmFtaWMNCi1XZWIgcHJvamVjdCdzIFdlYkNvbnRlbnRcV0VCLUlORiBmb2xkZXI6PHVsPg0KLTxsaT51bmRlcGxveS53c2RkPC9saT4NCi08bGk+ZGVwbG95LndzZGQgPC9saT4NCi08L3VsPlRoZSBmb2xsb3dpbmcgZmlsZXMgd2lsbCBoYXZlIGJlZW4gY3JlYXRlZCBhbmQgcGxhY2VkIHVuZGVyIHRoZSBkeW5hbWljDQotV2ViIHByb2plY3QncyBzcmMgZm9sZGVyLiBEZXBlbmRpbmcgb24gdGhlIFdTREwgZmlsZSBvbiB3aGljaCB0aGUgV2ViIHNlcnZpY2UNCi1jbGllbnQgaXMgYmFzZWQsIHRoZSBmaWxlcyBmb3IgeW91ciBXZWIgc2VydmljZSBjbGllbnQgbWF5IGJlIGRpZmZlcmVudDo8dWw+DQotPGxpPjxpPlNlcnZpY2VfbmFtZTwvaT5Qcm94eS5qYXZhPC9saT4NCi08bGk+Z2V0PGk+U2VydmljZV9uYW1lPC9pPi5qYXZhPC9saT4NCi08bGk+Z2V0PGk+U2VydmljZV9uYW1lPC9pPkxvY2F0b3IuamF2YTwvbGk+DQotPGxpPmdldDxpPlNlcnZpY2VfbmFtZTwvaT5Tb2FwLmphdmE8L2xpPg0KLTxsaT5nZXQ8aT5TZXJ2aWNlX25hbWU8L2k+U29hcFByb3h5LmphdmE8L2xpPg0KLTxsaT5nZXQ8aT5TZXJ2aWNlX25hbWU8L2k+U29hcFN0dWIuamF2YTwvbGk+DQotPC91bD4gPC9yZXN1bHQ+DQotPC90YXNrYm9keT4NCi08L3Rhc2s+DQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL3R3YndzY2xpZW50YS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuZG9jLnVzZXIvdG9waWNzL3R3YndzY2xpZW50YS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTA3NmMzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3RvcGljcy90d2J3c2NsaWVudGEuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEyNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwNiIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJDcmVhdGluZyBhIFdlYiBzZXJ2aWNlIGNsaWVudCB1c2luZyBBbnQgdGFza3MiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iSWYgeW91IGhhdmUgYSBXU0RMIGZpbGUgeW91IGNhbiB1c2UgQW50IHRocm91Z2ggdGhlIEVjbGlwc2Ugd29ya3NwYWNlIHRvIGdlbmVyYXRlIGEgV2ViIHNlcnZpY2UgY2xpZW50IHVzaW5nIHRoZSBBeGlzIHJ1bi10aW1lIGVudmlyb25tZW50LiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJJZiB5b3UgaGF2ZSBhIFdTREwgZmlsZSB5b3UgY2FuIHVzZSBBbnQgdGhyb3VnaCB0aGUgRWNsaXBzZSB3b3Jrc3BhY2UgdG8gZ2VuZXJhdGUgYSBXZWIgc2VydmljZSBjbGllbnQgdXNpbmcgdGhlIEF4aXMgcnVuLXRpbWUgZW52aXJvbm1lbnQuIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvY3dzYXhpc2FudC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90b3BpY3MvcndzY2xpZW50YS5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InR3c2NsaWVudGEiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5DcmVhdGluZyBhbiBBeGlzIHJ1bnRpbWUgV2ViIHNlcnZpY2UgY2xpZW50IGZyb20gYSBXU0RMIGZpbGUKLXVzaW5nIGNvbW1hbmQgbGluZSB0b29sczwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idHdzY2xpZW50YSI+PGEgbmFtZT0idHdzY2xpZW50YSI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+Q3JlYXRpbmcgYSBXZWIgc2VydmljZSBjbGllbnQgdXNpbmcgQW50IHRhc2tzPC9oMT4KLQotCi0KLTxkaXY+PHA+SWYgeW91IGhhdmUgYSBXU0RMIGZpbGUgeW91IGNhbiB1c2UgQW50IHRocm91Z2ggdGhlIEVjbGlwc2Ugd29ya3NwYWNlCi10byBnZW5lcmF0ZSBhIFdlYiBzZXJ2aWNlIGNsaWVudCB1c2luZyB0aGUgQXhpcyBydW4tdGltZSBlbnZpcm9ubWVudC48L3A+Ci0KLTxkaXYgY2xhc3M9InAiPkJlZm9yZSBjcmVhdGluZyB0aGUgV2ViIHNlcnZpY2UgY2xpZW50IHlvdSBtdXN0Ojx1bD4KLTxsaT5jb21wbGV0ZSB0aGUgcHJlcmVxdWlzaXRlcyBsaXN0ZWQgaW46IDxhIGhyZWY9ImN3c2F4aXNhbnQuaHRtbCIgdGl0bGU9IklmIHlvdSBwcmVmZXIgbm90IHRvIHVzZSB0aGUgV2ViIHNlcnZpY2Ugd2l6YXJkLCB5b3UgY2FuIHVzZSBBbnQmIzEwO2ZpbGVzIHRvIGNyZWF0ZSBXZWIgc2VydmljZXMgYW5kIGNsaWVudHMgdXNpbmcgdGhlIEF4aXMgcnVudGltZSBlbnZpcm9ubWVudC4mIzEwO1RoZSBXZWIgc2VydmljZXMgQW50IHRhc2tzIGNhbiBiZSBydW4gaW4gdHdvIHdheXM6IHRocm91Z2ggdGhlIEVjbGlwc2Ugd29ya3NwYWNlJiMxMDt1c2luZyBSdW4gQXMgJmd0OyBBbnQgQnVpbGQuLi4sIG9yIHRoZXkgY2FuIGJlIHJ1biBoZWFkbGVzcyB0aHJvdWdoIHRoZSBjb21tYW5kIGxpbmUuIE9uY2UmIzEwO3lvdSBoYXZlIGNyZWF0ZWQgeW91ciBXZWIgc2VydmljZSwgeW91IGNhbiB0aGVuIGRlcGxveSBpdCB0byBhIHNlcnZlciwgdGVzdCYjMTA7aXQsIGFuZCBwdWJsaXNoIGl0IGFzIGEgYnVzaW5lc3MgZW50aXR5IG9yIGJ1c2luZXNzIHNlcnZpY2UuIj5DcmVhdGluZyBBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQgV2ViIHNlcnZpY2VzIGFuZCBjbGllbnRzIHVzaW5nIFdlYiBzZXJ2aWNlcyBBbnQgdGFza3M8L2E+PC9saT4KLQotPGxpPmNyZWF0ZSBvciBpbXBvcnQgYSBXU0RMIGZpbGUgaW50byB0aGUgZHluYW1pYyBXZWIgcHJvamVjdCB5b3UgY3JlYXRlZC48L2xpPgotCi08L3VsPgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPkluIG9yZGVyIHRvIGNyZWF0ZSB0aGUgV2ViIHNlcnZpY2UgY2xpZW50IHlvdSBuZWVkIHRvIG1vZGlmeSB0aGUKLUFudCBmaWxlIGFuZCB0aGUgQW50IHByb3BlcnRpZXMgZmlsZS48L2Rpdj4KLQotPG9sPgotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5FZGl0IHRoZSBBbnQgZmlsZSAoPGtiZCBjbGFzcz0idXNlcmlucHV0Ij53c2dlbi54bWw8L2tiZD4pIHRoYXQgeW91IGltcG9ydGVkCi1pbiB0aGUgcHJlcmVxdWlzaXRlIHN0ZXBzLiBFbnN1cmUgdGhhdCBpdCBwb2ludHMgdG8gdGhlIGNsaWVudCBBbnQgcHJvcGVydGllcwotZmlsZTogaXQgc2hvdWxkIGNvbnRhaW4gYSBsaW5lIHN0YXRpbmcgPGtiZCBjbGFzcz0idXNlcmlucHV0Ij4mbHQ7cHJvcGVydHkgZmlsZT0iYXhpc2NsaWVudC5wcm9wZXJ0aWVzIi8mZ3Q7PC9rYmQ+Ljwvc3Bhbj4KLSBTYXZlIGFueSBjaGFuZ2VzIHRoYXQgeW91IGhhdmUgbWFkZS48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkVkaXQgdGhlIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+YXhpc2NsaWVudC5wcm9wZXJ0aWVzPC9rYmQ+IGZpbGUgdGhhdAoteW91IGltcG9ydGVkIGluIHRoZSBwcmVyZXF1aXNpdGUgc3RlcHMuPC9zcGFuPgotPG9sIHR5cGU9ImEiPgotPGxpPjxzcGFuPkVuc3VyZSB0aGF0IHRoZSBzY2VuYXJpb1R5cGUgcGFyYW1ldGVyIGlzIHNldCB0byBjbGllbnQuPC9zcGFuPgotPC9saT4KLQotPGxpPjxzcGFuPlNldCB0aGUgd29ya3NwYWNlIHBhcmFtZXRlciBzbyB0aGF0IGl0IHBvaW50cyB0byB0aGUgbG9jYXRpb24KLW9mIHlvdXIgV1NETCBmaWxlLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+QWxsIG90aGVyIHBhcmFtZXRlcnMgYXJlIG9wdGlvbmFsIGFuZCBzaG91bGQgYmUgZGVsZXRlZCBpZiBub3QKLWV4cGxpY2l0bHkgc2V0LiBUaGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSByZW1haW5pbmcgcGFyYW1ldGVycyB3aWxsIGJlIHJldHJpZXZlZAotZnJvbSB0aGUgZHluYW1pYyBwcm9qZWN0IHNldHRpbmdzLiBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gc2V0Ci10aGVzZSBwYXJhbWV0ZXJzIHJlZmVyIHRvOiA8YSBocmVmPSJyd3NjbGllbnRhLmh0bWwiIHRpdGxlPSJUaGUgYXhpc2NsaWVudC5wcm9wZXJ0aWVzIGZpbGUgaXMgdXNlZCB0byYjMTA7cGFzcyBkYXRhIHRvIHRoZSBXZWIgc2VydmljZXMgQW50IHRhc2tzIHdoZW4gY3JlYXRpbmcgYW4gQXhpcyBXZWIgc2VydmljZSYjMTA7Y2xpZW50LiBUaGlzIGZpbGUgc2hvd3MgdGhlIGF2YWlsYWJsZSBvcHRpb25zLiI+QXhpcyBXZWIgc2VydmljZSBjbGllbnQgQW50IHRhc2sgcHJvcGVydGllcyBmaWxlIHJlZmVyZW5jZTwvYT48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotIFNhdmUgdGhlIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+YXhpc2NsaWVudC5wcm9wZXJ0aWVzPC9rYmQ+IGZpbGUuPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5SaWdodC1jbGljayA8a2JkIGNsYXNzPSJ1c2VyaW5wdXQiPndzZ2VuLnhtbDwva2JkPiBhbmQgc2VsZWN0IDxzcGFuIGNsYXNzPSJtZW51Y2FzY2FkZSI+Ci08c3BhbiBjbGFzcz0idWljb250cm9sIj5SdW4gQXM8L3NwYW4+ICZndDsgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QW50IEJ1aWxkLi4uPC9zcGFuPjwvc3Bhbj48L3NwYW4+Ci08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSBkaWFsb2cgdGhhdCBvcGVucywgc2VsZWN0IHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5KUkU8L3NwYW4+IHRhYgotYW5kIHNlbGVjdCA8c3BhbiBjbGFzcz0idWljb250cm9sIj5SdW4gaW4gdGhlIHNhbWUgSlJFIGFzIHRoZSB3b3Jrc3BhY2U8L3NwYW4+Ljwvc3Bhbj4KLSBDbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5BcHBseTwvc3Bhbj4gYW5kIHRoZW4gY2xpY2sgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+UnVuPC9zcGFuPi4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+T25jZSB5b3VyIFdlYiBzZXJ2aWNlIGhhcyBiZWVuIGdlbmVyYXRlZCB0aGUgY29uc29sZSBkaXNwbGF5cyBhIDxrYmQgY2xhc3M9InVzZXJpbnB1dCI+QnVpbGQKLVN1Y2Nlc3NmdWw8L2tiZD4gbWVzc2FnZS48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+VGhlIGZvbGxvd2luZyBmaWxlcyB3aWxsIGhhdmUgYmVlbiBjcmVhdGVkIGFuZCBwbGFjZWQgaW4gdGhlIGR5bmFtaWMKLVdlYiBwcm9qZWN0J3MgV2ViQ29udGVudFx3c2RsIGZvbGRlcjo8dWw+Ci08bGk+PGVtPlNlcnZpY2VfbmFtZTwvZW0+U09BUC53c2RsIDwvbGk+Ci0KLTwvdWw+Ci1UaGUgZm9sbG93aW5nIGZpbGVzIHdpbGwgaGF2ZSBiZWVuIGNyZWF0ZWQgYW5kIHBsYWNlZCBpbiB0aGUgZHluYW1pYwotV2ViIHByb2plY3QncyBXZWJDb250ZW50XFdFQi1JTkYgZm9sZGVyOjx1bD4KLTxsaT51bmRlcGxveS53c2RkPC9saT4KLQotPGxpPmRlcGxveS53c2RkIDwvbGk+Ci0KLTwvdWw+Ci1UaGUgZm9sbG93aW5nIGZpbGVzIHdpbGwgaGF2ZSBiZWVuIGNyZWF0ZWQgYW5kIHBsYWNlZCB1bmRlciB0aGUgZHluYW1pYwotV2ViIHByb2plY3QncyBzcmMgZm9sZGVyLiBEZXBlbmRpbmcgb24gdGhlIFdTREwgZmlsZSBvbiB3aGljaCB0aGUgV2ViIHNlcnZpY2UKLWNsaWVudCBpcyBiYXNlZCwgdGhlIGZpbGVzIGZvciB5b3VyIFdlYiBzZXJ2aWNlIGNsaWVudCBtYXkgYmUgZGlmZmVyZW50Ojx1bD4KLTxsaT48ZW0+U2VydmljZV9uYW1lPC9lbT5Qcm94eS5qYXZhPC9saT4KLQotPGxpPmdldDxlbT5TZXJ2aWNlX25hbWU8L2VtPi5qYXZhPC9saT4KLQotPGxpPmdldDxlbT5TZXJ2aWNlX25hbWU8L2VtPkxvY2F0b3IuamF2YTwvbGk+Ci0KLTxsaT5nZXQ8ZW0+U2VydmljZV9uYW1lPC9lbT5Tb2FwLmphdmE8L2xpPgotCi08bGk+Z2V0PGVtPlNlcnZpY2VfbmFtZTwvZW0+U29hcFByb3h5LmphdmE8L2xpPgotCi08bGk+Z2V0PGVtPlNlcnZpY2VfbmFtZTwvZW0+U29hcFN0dWIuamF2YTwvbGk+Ci0KLTwvdWw+Ci0gPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPHVsIGNsYXNzPSJ1bGxpbmtzIj4KLTxsaSBjbGFzcz0idWxjaGlsZGxpbmsiPjxzdHJvbmc+PGEgaHJlZj0iLi4vdG9waWNzL3J3c2NsaWVudGEuaHRtbCI+QXhpcyBXZWIgc2VydmljZSBjbGllbnQgQW50IHRhc2sgcHJvcGVydGllcyBmaWxlIHJlZmVyZW5jZTwvYT48L3N0cm9uZz48YnIgLz4KLVRoZSBheGlzY2xpZW50LnByb3BlcnRpZXMgZmlsZSBpcyB1c2VkIHRvIHBhc3MgZGF0YSB0byB0aGUgV2ViIHNlcnZpY2VzIEFudCB0YXNrcyB3aGVuIGNyZWF0aW5nIGFuIEF4aXMgV2ViIHNlcnZpY2UgY2xpZW50LiBUaGlzIGZpbGUgc2hvd3MgdGhlIGF2YWlsYWJsZSBvcHRpb25zLjwvbGk+Ci08L3VsPgotCi08ZGl2IGNsYXNzPSJmYW1pbHlsaW5rcyI+Ci08ZGl2IGNsYXNzPSJwYXJlbnRsaW5rIj48c3Ryb25nPlBhcmVudCB0b3BpYzo8L3N0cm9uZz4gPGEgaHJlZj0iLi4vdG9waWNzL2N3c2F4aXNhbnQuaHRtbCIgdGl0bGU9IklmIHlvdSBwcmVmZXIgbm90IHRvIHVzZSB0aGUgV2ViIHNlcnZpY2Ugd2l6YXJkLCB5b3UgY2FuIHVzZSBBbnQgZmlsZXMgdG8gY3JlYXRlIFdlYiBzZXJ2aWNlcyBhbmQgY2xpZW50cyB1c2luZyB0aGUgQXhpcyBydW50aW1lIGVudmlyb25tZW50LiBUaGUgV2ViIHNlcnZpY2VzIEFudCB0YXNrcyBjYW4gYmUgcnVuIGluIHR3byB3YXlzOiB0aHJvdWdoIHRoZSBFY2xpcHNlIHdvcmtzcGFjZSB1c2luZyBSdW4gQXMgJmd0OyBBbnQgQnVpbGQuLi4sIG9yIHRoZXkgY2FuIGJlIHJ1biBoZWFkbGVzcyB0aHJvdWdoIHRoZSBjb21tYW5kIGxpbmUuIE9uY2UgeW91IGhhdmUgY3JlYXRlZCB5b3VyIFdlYiBzZXJ2aWNlLCB5b3UgY2FuIHRoZW4gZGVwbG95IGl0IHRvIGEgc2VydmVyLCB0ZXN0IGl0LCBhbmQgcHVibGlzaCBpdCBhcyBhIGJ1c2luZXNzIGVudGl0eSBvciBidXNpbmVzcyBzZXJ2aWNlLiI+Q3JlYXRpbmcgQXhpcyBydW50aW1lIGVudmlyb25tZW50IFdlYiBzZXJ2aWNlcyBhbmQgY2xpZW50cyB1c2luZyBXZWIgc2VydmljZXMgQW50IHRhc2tzPC9hPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3dzYXhpc2FudF90b2MuZGl0YW1hcCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3dzYXhpc2FudF90b2MuZGl0YW1hcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU2YmZlZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci93c2F4aXNhbnRfdG9jLmRpdGFtYXAKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+DQotPCFET0NUWVBFIG1hcCBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBNYXAvL0VOIg0KLSAibWFwLmR0ZCI+DQotPG1hcCBhbmNob3JyZWY9Ii4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci93ZWJzZXJ2aWNlX3RvYy5kaXRhbWFwI3dzYXhpc2FudCINCi1pZD0id3NheGlzYW50IiB0aXRsZT0id3NheGlzYW50Ij4NCi08dG9waWNyZWYgaHJlZj0idG9waWNzL2N3c2F4aXNhbnQuZGl0YSIgbmF2dGl0bGU9IkNyZWF0aW5nIEF4aXMgcnVudGltZSBXZWIgc2VydmljZXMgdXNpbmcgQW50IHRhc2tzIj4NCi08dG9waWNyZWYgaHJlZj0idG9waWNzL3R3YndzYS5kaXRhIiBuYXZ0aXRsZT0iQ3JlYXRpbmcgYSBXZWIgc2VydmljZSB1c2luZyBBbnQgdGFza3MgaW4gdGhlIFdvcmtiZW5jaCI+DQotPHRvcGljcmVmIGhyZWY9InRvcGljcy9ydGR3c2EuZGl0YSIgbmF2dGl0bGU9IlRvcC1kb3duIEF4aXMgV2ViIHNlcnZpY2UgQW50IGZpbGUgcmVmZXJlbmNlIj4NCi08L3RvcGljcmVmPg0KLTx0b3BpY3JlZiBocmVmPSJ0b3BpY3MvcmJ1d3NhLmRpdGEiIG5hdnRpdGxlPSJCb3R0b20tdXAgQXhpcyBXZWIgc2VydmljZSBBbnQgZmlsZSByZWZlcmVuY2UiPg0KLTwvdG9waWNyZWY+DQotPC90b3BpY3JlZj4NCi08dG9waWNyZWYgaHJlZj0idG9waWNzL3R3YndzY2xpZW50YS5kaXRhIiBuYXZ0aXRsZT0iQ3JlYXRpbmcgYSBXZWIgc2VydmljZSBjbGllbnQgdXNpbmcgQW50IHRhc2tzIGluIHRoZSBXb3JrYmVuY2giPg0KLTx0b3BpY3JlZiBocmVmPSJ0b3BpY3MvcndzY2xpZW50YS5kaXRhIiBuYXZ0aXRsZT0iQXhpcyBXZWIgc2VydmljZSBjbGllbnQgQW50IGZpbGUgcmVmZXJlbmNlIj4NCi08L3RvcGljcmVmPg0KLTwvdG9waWNyZWY+DQotPC90b3BpY3JlZj4NCi08L21hcD4NCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlci93c2F4aXNhbnRfdG9jLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3dzYXhpc2FudF90b2MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2Q4YWM2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmRvYy51c2VyL3dzYXhpc2FudF90b2MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotPD9OTFMgVFlQRT0ib3JnLmVjbGlwc2UuaGVscC50b2MiPz4KLQotPHRvYyBsaW5rX3RvPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvd2Vic2VydmljZV90b2MueG1sI3dzYXhpc2FudCIgbGFiZWw9IndzYXhpc2FudCIgdG9waWM9InRvcGljcy9jd3NheGlzYW50Lmh0bWwiPgotPHRvcGljIGxhYmVsPSJDcmVhdGluZyBBeGlzIHJ1bnRpbWUgZW52aXJvbm1lbnQgV2ViIHNlcnZpY2VzIGFuZCBjbGllbnRzIHVzaW5nIFdlYiBzZXJ2aWNlcyBBbnQgdGFza3MiIGhyZWY9InRvcGljcy9jd3NheGlzYW50Lmh0bWwiPgotPHRvcGljIGxhYmVsPSJDcmVhdGluZyBhIFdlYiBzZXJ2aWNlIHVzaW5nIEFudCB0YXNrcyBpbiB0aGUgV29ya2JlbmNoIiBocmVmPSJ0b3BpY3MvdHdid3NhLmh0bWwiPgotPHRvcGljIGxhYmVsPSJUb3AtZG93biBBeGlzIFdlYiBzZXJ2aWNlIEFudCB0YXNrIHByb3BlcnRpZXMgZmlsZSByZWZlcmVuY2UiIGhyZWY9InRvcGljcy9ydGR3c2EuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJCb3R0b20tdXAgQXhpcyBXZWIgc2VydmljZSBBbnQgdGFzayBwcm9wZXJ0aWVzIGZpbGUgcmVmZXJlbmNlIiBocmVmPSJ0b3BpY3MvcmJ1d3NhLmh0bWwiLz4KLTwvdG9waWM+Ci08dG9waWMgbGFiZWw9IkNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgY2xpZW50IHVzaW5nIEFudCB0YXNrcyIgaHJlZj0idG9waWNzL3R3YndzY2xpZW50YS5odG1sIj4KLTx0b3BpYyBsYWJlbD0iQXhpcyBXZWIgc2VydmljZSBjbGllbnQgQW50IHRhc2sgcHJvcGVydGllcyBmaWxlIHJlZmVyZW5jZSIgaHJlZj0idG9waWNzL3J3c2NsaWVudGEuaHRtbCIvPgotPC90b3BpYz4KLTwvdG9waWM+Ci08L3RvYz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmluZm9wb3AvLmN2c2lnbm9yZSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmluZm9wb3AvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE0NDg3Yy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5pbmZvcG9wLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1idWlsZC54bWwKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmluZm9wb3AvLnByb2plY3QgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5pbmZvcG9wLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWI4M2ZlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmluZm9wb3AvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuaW5mb3BvcDwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmluZm9wb3AvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5pbmZvcG9wL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYWEwODhlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmluZm9wb3AvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuaW5mb3BvcDsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjMucXVhbGlmaWVyCi1CdW5kbGUtVmVuZG9yOiAlcGx1Z2luUHJvdmlkZXIKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmluZm9wb3AvYWJvdXQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmluZm9wb3AvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkYjM2ZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5pbmZvcG9wL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lIDA2LCAyMDA3PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmluZm9wb3AvYnVpbGQucHJvcGVydGllcyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmluZm9wb3AvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjlmNTZlYi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5pbmZvcG9wL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICB3c3QtY29tbWFuZC1mMS54bWwsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCi1zcmMuaW5jbHVkZXMgPSBidWlsZC5wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5pbmZvcG9wL3BsdWdpbi5wcm9wZXJ0aWVzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuaW5mb3BvcC9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRlZWY2Mi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5pbmZvcG9wL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0hIHBsdWctaW4gcHJvcGVydGllcwotcGx1Z2luTmFtZSAgICAgPSBXZWIgc2VydmljZXMgVUkKLXBsdWdpblByb3ZpZGVyID0gRWNsaXBzZS5vcmcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5pbmZvcG9wL3BsdWdpbi54bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5pbmZvcG9wL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4NzBjMDUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuaW5mb3BvcC9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiA/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotPD9OTFMgVFlQRT0ib3JnLmVjbGlwc2UuaGVscC50b2MiPz4gCi08IS0tIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gLS0+Ci08cGx1Z2luPgotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAuY29udGV4dHMiPgotCQk8Y29udGV4dHMgZmlsZT0id3N0LWNvbW1hbmQtZjEueG1sIiBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aSIvPgotCTwvZXh0ZW5zaW9uPgotPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuaW5mb3BvcC93c3QtY29tbWFuZC1mMS54bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5pbmZvcG9wL3dzdC1jb21tYW5kLWYxLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGM2M2M2NC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5pbmZvcG9wL3dzdC1jb21tYW5kLWYxLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLmNvbnRleHRzIj8+Ci08Y29udGV4dHM+Ci0KLTwhLS1vcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWktLT4KLTxjb250ZXh0IGlkPSJQUEFEMDAwMSI+Ci08IS0tQWN0aW9uIERpYWxvZ3MgUHJlZmVyZW5jZSBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+WW91IGNhbiB1c2UgdGhpcyBwYWdlIHRvIGNob29zZSB3aGljaCBXZWIgc2VydmljZXMgcG9wdXAgYWN0aW9ucyBhcmUgZGlzcGxheWVkIG9yIGhpZGRlbi4gV2hlbiB1c2luZyB0aGUgV2ViIHNlcnZpY2VzIHdpemFyZHMgbGF1bmNlZCBmcm9tIGEgcG9wdXAgbWVudSB5b3UgbWF5IHNlZSBhIGNoZWNrIGJveCB0aGF0IGdpdmVzIHlvdSB0aGUgb3B0aW9uIG9mIGhpZGluZyB0aGUgcG9wdXAgYWN0aW9uIHRoYXQgeW91IGhhdmUganVzdCBwZXJmb3JtZWQuIElmIHlvdSBzZWxlY3QgdGhhdCBjaGVja2JveCBpdCB3aWxsIHNlbGVjdCB0aGUgcmVzcGVjdGl2ZSBjaGVja2JveCBvbiB0aGlzIHByZWZlcmVuY2UgcGFnZS4gSWYgeW91IGhhdmUgY2hvc2VuIHRvIGhpZGUgYSBwb3B1cCBhY3Rpb24gdGhhdCB5b3Ugd2FudCB0byBkaXNwbGF5IHVzZSB0aGlzIHBhZ2UgdG8gbWFrZSB0aGUgcG9wdXAgYWN0aW9uIHZpc2libGUuCi08L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFBBRDAwMDIiPgotPCEtLXNob3cgYWxsIGNoZWNrIGJveCBvbiB0aGUgQWN0aW9uIERpYWxvZ3MgUHJlZmVyZW5jZSBQYWdlLS0+Ci08ZGVzY3JpcHRpb24+Qnkgc2VsZWN0aW5nIHRoaXMgY2hlY2tib3gsIGFsbCB2YWxpZCBXZWIgc2VydmljZXMgcG9wdXAgYWN0aW9ucyB3aWxsIGJlIGRpc3BsYXllZCB3aGVuIHlvdSBzZWxlY3QgYSBmaWxlIGluIHlvdXIgd29ya3NwYWNlIGFuZCByaWdodC1jbGljayBpdC4gQWx0ZXJuYXRlbHkgeW91IGNhbiBzZWxlY3QgdG8gZGlzcGxheSBvciBoaWRlIGluZGl2aWR1YWwgcG9wdXAgYWN0aW9ucy4KLTwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQUEFEMDAwMyI+Ci08IS0taGlkZSBhbGwgY2hlY2sgYm94IG9uIHRoZSBBY3Rpb24gRGlhbG9ncyBQcmVmZXJlbmNlIFBhZ2UtLT4KLTxkZXNjcmlwdGlvbj5CeSBzZWxlY3RpbmcgdGhpcyBjaGVja2JveCwgYWxsIFdlYiBzZXJ2aWNlcyBwb3B1cCBhY3Rpb25zIHdpbGwgYmUgaGlkZGVuIHdoZW4geW91IHNlbGVjdCBhIGZpbGUgaW4geW91ciB3b3Jrc3BhY2UgYW5kIHJpZ2h0LWNsaWNrIGl0LiBBbHRlcm5hdGVseSB5b3UgY2FuIHNlbGVjdCB0byBkaXNwbGF5IG9yIGhpZGUgaW5kaXZpZHVhbCBwb3B1cCBhY3Rpb25zLgotPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlRXUDAwMDEiPgotPCEtLXNob3cvaGlkZSBjaGVjayBib3gtLT4KLTxkZXNjcmlwdGlvbj5XaGVuIHVzaW5nIHRoZSBXZWIgc2VydmljZXMgd2l6YXJkcyBsYXVuY2VkIGZyb20gYSBwb3B1cCBtZW51LCB0aGlzIGNoZWNrIGJveCB0aGF0IGdpdmVzIHlvdSB0aGUgb3B0aW9uIG9mIGhpZGluZyB0aGUgcG9wdXAgYWN0aW9uIHRoYXQgeW91IGhhdmUganVzdCBwZXJmb3JtZWQuIElmIHlvdSBzZWxlY3QgdGhlIGNoZWNrYm94IGl0IHdpbGwgc2VsZWN0IHRoZSByZXNwZWN0aXZlIGNoZWNrYm94IG9uIHRoZSBXZWIgc2VydmljZXMgPiBQb3B1cCBEaWFsb2cgU2VsZWN0aW9uIHByZWZlcmVuY2UgcGFnZS4gSWYgeW91IGhhdmUgY2hvc2VuIHRvIGhpZGUgYSBwb3B1cCBhY3Rpb24gdGhhdCB5b3Ugd2FudCB0byBkaXNwbGF5LCBnbyB0byBXaW5kb3cgPiBQcmVmZXJlbmNlcyA+IFdlYiBzZXJ2aWNlcyA+IFBvcHVwIERpYWxvZyBTZWxlY3Rpb24sIGFuZCB1c2UgdGhpcyBwYWdlIHRvIG1ha2UgdGhlIHBvcHVwIGFjdGlvbiB2aXNpYmxlLgotPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPC9jb250ZXh0cz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5pbmZvcG9wLy5jdnNpZ25vcmUgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5pbmZvcG9wLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxNDQ4N2MuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuaW5mb3BvcC8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotYnVpbGQueG1sCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5pbmZvcG9wLy5wcm9qZWN0IGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuaW5mb3BvcC8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTI3NTAxZi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5pbmZvcG9wLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LndzLmluZm9wb3A8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5pbmZvcG9wL01FVEEtSU5GL01BTklGRVNULk1GIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuaW5mb3BvcC9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDRmODRmMy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5pbmZvcG9wL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LndzLmluZm9wb3A7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4yMDMucXVhbGlmaWVyCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1CdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5pbmZvcG9wL2Fib3V0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5pbmZvcG9wL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGIzNmUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuaW5mb3BvcC9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5pbmZvcG9wL2J1aWxkLnByb3BlcnRpZXMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5pbmZvcG9wL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxYTE1OWIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuaW5mb3BvcC9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1iaW4uaW5jbHVkZXMgPSBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgd2Vic2VydmljZXVpLWYxQ29udGV4dHMueG1sLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcwotc3JjLmluY2x1ZGVzID0gYnVpbGQucHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuaW5mb3BvcC9wbHVnaW4ucHJvcGVydGllcyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzLmluZm9wb3AvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmM2I1N2YuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuaW5mb3BvcC9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLXBsdWdpbk5hbWUgICA9IFdlYiBTZXJ2aWNlcyBVSQotcHJvdmlkZXJOYW1lID0gRWNsaXBzZS5vcmcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5pbmZvcG9wL3BsdWdpbi54bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5pbmZvcG9wL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmZTNiZmQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuaW5mb3BvcC9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiA/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotPD9OTFMgVFlQRT0ib3JnLmVjbGlwc2UuaGVscC50b2MiPz4gCi08IS0tIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gLS0+Ci08cGx1Z2luPgotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAuY29udGV4dHMiPgotCQk8Y29udGV4dHMgZmlsZT0id2Vic2VydmljZXVpLWYxQ29udGV4dHMueG1sIiBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC53cy51aSIvPgotCTwvZXh0ZW5zaW9uPgotPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3MuaW5mb3BvcC93ZWJzZXJ2aWNldWktZjFDb250ZXh0cy54bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5pbmZvcG9wL3dlYnNlcnZpY2V1aS1mMUNvbnRleHRzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmVkNjcxMS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53cy5pbmZvcG9wL3dlYnNlcnZpY2V1aS1mMUNvbnRleHRzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9OTFMgVFlQRT0ib3JnLmVjbGlwc2UuaGVscC5jb250ZXh0cyI/PgotPCEtLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIC0tPgotCi08Y29udGV4dHM+Ci0KLTwhLS1XU0lQYWdlLmphdmEtLT4KLTxjb250ZXh0IGlkPSJQV1NJMDAwMSI+Ci08IS0tZGVzYy0tPgotPGRlc2NyaXB0aW9uPlRoZSBXZWIgc2VydmljZXMgV1MtSSB2YWxpZGF0aW9uIHRvb2xzIHN1cHBvcnQgdGhlIGxldmVsIG9mIFdTLUkgY29tcGxpYW5jZSBvdXRsaW5lZCBpbiB0aGUgV1MtSSBCYXNpYyBQcm9maWxlIDEuMSwgdGhlIFdTLUkgU2ltcGxlIFNPQVAgQmluZGluZyBQcm9maWxlIDEuMCAoV1MtSSBTU0JQKSwgYW5kIHRoZSBXUy1JIEF0dGFjaG1lbnRzIFByb2ZpbGUgMS4wIChXUy1JIEFQKS4gWW91IGNhbiBjaG9vc2UgdG8gbWFrZSB5b3VyIFdlYiBzZXJ2aWNlIGNvbXBsaWFudCBvciBub24tY29tcGxpYW50LCBkZXBlbmRpbmcgb24geW91ciBuZWVkcy4gRm9yIGV4YW1wbGUsIGVuY29kZWQgc3R5bGUgKFJQQy9lbmNvZGVkKSwgU09BUCBvdmVyIEpNUyBwcm90b2NvbHMsIGFuZCBzZWN1cmVkIFdlYiBzZXJ2aWNlcywgYXJlIG5vdCBXUy1JIGNvbXBsaWFudC4KLQotWW91IGNhbiBzZXQgdGhlIGxldmVsIG9mIGNvbXBsaWFuY2UgZm9yIGVpdGhlciB0aGUgQmFzaWMgUHJvZmlsZSBhbmQgdGhlIFNpbXBsZSBTT0FQIEJpbmRpbmcgUHJvZmlsZSwgb3IgZm9yIHRoZSBBdHRhY2htZW50cyBQcm9maWxlLiBZb3UgY2FuIHNlbGVjdCBmcm9tIHRocmVlIGxldmVscyBvZiBjb21wbGlhbmNlIHdpdGggV1MtSSBzcGVjaWZpY2F0aW9uczoKLS0gUmVxdWlyZSBXUy1JIGNvbXBsaWFuY2UgLSB0aGlzIGxldmVsIHByZXZlbnRzIHlvdSBmcm9tIGNyZWF0aW5nIGEgbm9uLWNvbXBsaWFudCBXZWIgc2VydmljZS4KLS0gU3VnZ2VzdCBXUy1JIGNvbXBsaWFuY2UgLSB0aGlzIGxldmVsIGFsbG93cyB5b3UgdG8gY3JlYXRlIGEgbm9uLWNvbXBsaWFudCBXZWIgc2VydmljZSwgYnV0IHByb3ZpZGVzIGEgdmlzaWJsZSB3YXJuaW5nIHN0YXRpbmcgaG93IHRoZSBzZXJ2aWNlIGlzIG5vbi1jb21wbGlhbnQuCi0tIElnbm9yZSBXUy1JIGNvbXBsaWFuY2UgLSB0aGlzIGxldmVsIGFsbG93cyB5b3UgdG8gY3JlYXRlIGEgbm9uLWNvbXBsaWFudCBXZWIgc2VydmljZSBhbmQgZG9lcyBub3Qgbm90aWZ5IHlvdSBvZiBub24tY29tcGxpYW5jZS4KLQotWW91IGNhbiBhbHNvIHNlbGVjdCB3aGljaCB0eXBlcyBvZiBXU0RMIGZpbGVzIHRvIHJ1biB2YWxpZGF0aW9uIG9uOgotLSBCeSBzZWxlY3RpbmcgIk5vIHdpemFyZCBXU0RMIHZhbGlkYXRpb24iIHRoZSB3aXphcmRzIHdpbGwgbm90IHJ1biB2YWxpZGF0aW9uIG9uIHRoZSBXU0RMIGZpbGUuCi0tIEJ5IHNlbGVjdGluZyB0byBydW4gdmFsaWRhdGlvbiBvbiByZW1vdGUgZmlsZXMsIHRoZSB3aXphcmRzIHdpbGwgb25seSB2YWxpZGF0ZSBXU0RMIGZpbGVzIHRoYXQgZXhpc3Qgb3V0c2lkZSBvZiB5b3VyIHdvcmtzcGFjZS4KLS0gQnkgc2VsZWN0aW5nIHRvIHJ1biB2YWxpZGF0aW9uIG9uIGFsbCBXU0RMIGZpbGVzIHRoZSB3aXphcmQgd2lsbCB2YWxpZGF0ZSBhbGwgV1NETCBmaWxlcywgcmVnYXJkbGVzcyBvZiB3aGVyZSB0aGV5IHJlc2lkZS4KLQotSWYgeW91IHNlbGVjdCB0byB3YWl0IGZvciBXU0RMIHZhbGlkYXRpb24gdG8gY29tcGxldGUsIHRoZSBXZWIgc2VydmljZXMgd2l6YXJkcyB3aWxsIHByZXZlbnQgeW91IGZyb20gZ29pbmcgZm9yd2FyZCBhbmQgY29tcGxldGluZyBhZGRpdGlvbmFsIHdpemFyZCBwYWdlcyBvbmNlIHlvdSBoYXZlIHNlbGVjdGVkIHlvdXIgV1NETCBmaWxlIHVudGlsIHRoYXQgV1NETCBmaWxlIGhhcyBiZWVuIHZhbGlkYXRlZC4gSWYgdGhlIFdTREwgZmlsZSBpcyBub3QgdmFsaWQsIHlvdSB3aWxsIGJlIGdpdmVuIHRoZSBvcHRpb24gb2YgZXhpdGluZyB0aGUgd2l6YXJkIG9yIGNvbnRpbnVpbmcgd2l0aCB0aGUgaW52YWxpZCBXU0RMIGZpbGUuCi08L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdTSTAwMDQiPgotPGRlc2NyaXB0aW9uPlRoZSBXZWIgc2VydmljZXMgV1MtSSB2YWxpZGF0aW9uIHRvb2xzIHN1cHBvcnQgdGhlIGxldmVsIG9mIFdTLUkgY29tcGxpYW5jZSBvdXRsaW5lZCBpbiB0aGUgV1MtSSBCYXNpYyBQcm9maWxlIDEuMSwgdGhlIFdTLUkgU2ltcGxlIFNPQVAgQmluZGluZyBQcm9maWxlIDEuMCAoV1MtSSBTU0JQKSwgYW5kIHRoZSBXUy1JIEF0dGFjaG1lbnRzIFByb2ZpbGUgMS4wIChXUy1JIEFQKS4gWW91IGNhbiBjaG9vc2UgdG8gbWFrZSB5b3VyIFdlYiBzZXJ2aWNlIGNvbXBsaWFudCBvciBub24tY29tcGxpYW50LCBkZXBlbmRpbmcgb24geW91ciBuZWVkcy4gRm9yIGV4YW1wbGUsIGVuY29kZWQgc3R5bGUgKFJQQy9lbmNvZGVkKSwgU09BUCBvdmVyIEpNUyBwcm90b2NvbHMsIGFuZCBzZWN1cmVkIFdlYiBzZXJ2aWNlcywgYXJlIG5vdCBXUy1JIGNvbXBsaWFudC4KLVlvdSBjYW4gc2V0IHRoZSBsZXZlbCBvZiBjb21wbGlhbmNlIGZvciBlaXRoZXIgdGhlIEJhc2ljIFByb2ZpbGUgYW5kIHRoZSBTaW1wbGUgU09BUCBCaW5kaW5nIFByb2ZpbGUsIG9yIGZvciB0aGUgQXR0YWNobWVudHMgUHJvZmlsZS4gWW91IGNhbiBzZWxlY3QgZnJvbSB0aHJlZSBsZXZlbHMgb2YgY29tcGxpYW5jZSB3aXRoIFdTLUkgc3BlY2lmaWNhdGlvbnM6Ci0tIFJlcXVpcmUgV1MtSSBjb21wbGlhbmNlIC0gdGhpcyBsZXZlbCBwcmV2ZW50cyB5b3UgZnJvbSBjcmVhdGluZyBhIG5vbi1jb21wbGlhbnQgV2ViIHNlcnZpY2UuCi0tIFN1Z2dlc3QgV1MtSSBjb21wbGlhbmNlIC0gdGhpcyBsZXZlbCBhbGxvd3MgeW91IHRvIGNyZWF0ZSBhIG5vbi1jb21wbGlhbnQgV2ViIHNlcnZpY2UsIGJ1dCBwcm92aWRlcyBhIHZpc2libGUgd2FybmluZyBzdGF0aW5nIGhvdyB0aGUgc2VydmljZSBpcyBub24tY29tcGxpYW50LgotLSBJZ25vcmUgV1MtSSBjb21wbGlhbmNlIC0gdGhpcyBsZXZlbCBhbGxvd3MgeW91IHRvIGNyZWF0ZSBhIG5vbi1jb21wbGlhbnQgV2ViIHNlcnZpY2UgYW5kIGRvZXMgbm90IG5vdGlmeSB5b3Ugb2Ygbm9uLWNvbXBsaWFuY2UuCi08L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdTSTAwMDgiPgotPGRlc2NyaXB0aW9uPlRoZSBXZWIgc2VydmljZXMgV1MtSSB2YWxpZGF0aW9uIHRvb2xzIHN1cHBvcnQgdGhlIGxldmVsIG9mIFdTLUkgY29tcGxpYW5jZSBvdXRsaW5lZCBpbiB0aGUgV1MtSSBCYXNpYyBQcm9maWxlIDEuMSwgdGhlIFdTLUkgU2ltcGxlIFNPQVAgQmluZGluZyBQcm9maWxlIDEuMCAoV1MtSSBTU0JQKSwgYW5kIHRoZSBXUy1JIEF0dGFjaG1lbnRzIFByb2ZpbGUgMS4wIChXUy1JIEFQKS4gWW91IGNhbiBjaG9vc2UgdG8gbWFrZSB5b3VyIFdlYiBzZXJ2aWNlIGNvbXBsaWFudCBvciBub24tY29tcGxpYW50LCBkZXBlbmRpbmcgb24geW91ciBuZWVkcy4gRm9yIGV4YW1wbGUsIGVuY29kZWQgc3R5bGUgKFJQQy9lbmNvZGVkKSwgU09BUCBvdmVyIEpNUyBwcm90b2NvbHMsIGFuZCBzZWN1cmVkIFdlYiBzZXJ2aWNlcywgYXJlIG5vdCBXUy1JIGNvbXBsaWFudC4KLVlvdSBjYW4gc2V0IHRoZSBsZXZlbCBvZiBjb21wbGlhbmNlIGZvciBlaXRoZXIgdGhlIEJhc2ljIFByb2ZpbGUgYW5kIHRoZSBTaW1wbGUgU09BUCBCaW5kaW5nIFByb2ZpbGUsIG9yIGZvciB0aGUgQXR0YWNobWVudHMgUHJvZmlsZS4gWW91IGNhbiBzZWxlY3QgZnJvbSB0aHJlZSBsZXZlbHMgb2YgY29tcGxpYW5jZSB3aXRoIFdTLUkgc3BlY2lmaWNhdGlvbnM6Ci0tIFJlcXVpcmUgV1MtSSBjb21wbGlhbmNlIC0gdGhpcyBsZXZlbCBwcmV2ZW50cyB5b3UgZnJvbSBjcmVhdGluZyBhIG5vbi1jb21wbGlhbnQgV2ViIHNlcnZpY2UuCi0tIFN1Z2dlc3QgV1MtSSBjb21wbGlhbmNlIC0gdGhpcyBsZXZlbCBhbGxvd3MgeW91IHRvIGNyZWF0ZSBhIG5vbi1jb21wbGlhbnQgV2ViIHNlcnZpY2UsIGJ1dCBwcm92aWRlcyBhIHZpc2libGUgd2FybmluZyBzdGF0aW5nIGhvdyB0aGUgc2VydmljZSBpcyBub24tY29tcGxpYW50LgotLSBJZ25vcmUgV1MtSSBjb21wbGlhbmNlIC0gdGhpcyBsZXZlbCBhbGxvd3MgeW91IHRvIGNyZWF0ZSBhIG5vbi1jb21wbGlhbnQgV2ViIHNlcnZpY2UgYW5kIGRvZXMgbm90IG5vdGlmeSB5b3Ugb2Ygbm9uLWNvbXBsaWFuY2UuCi08L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdTSTAwMDkiPgotPCEtLWRlc2MtLT4KLTxkZXNjcmlwdGlvbj4KLVlvdSBjYW4gc2VsZWN0IHdoaWNoIHR5cGVzIG9mIFdTREwgZmlsZXMgdG8gcnVuIHZhbGlkYXRpb24gb246Ci0tIEJ5IHNlbGVjdGluZyAiTm8gd2l6YXJkIFdTREwgdmFsaWRhdGlvbiIgdGhlIHdpemFyZHMgd2lsbCBub3QgcnVuIHZhbGlkYXRpb24gb24gdGhlIFdTREwgZmlsZS4KLS0gQnkgc2VsZWN0aW5nIHRvIHJ1biB2YWxpZGF0aW9uIG9uIHJlbW90ZSBmaWxlcywgdGhlIHdpemFyZHMgd2lsbCBvbmx5IHZhbGlkYXRlIFdTREwgZmlsZXMgdGhhdCBleGlzdCBvdXRzaWRlIG9mIHlvdXIgd29ya3NwYWNlLgotLSBCeSBzZWxlY3RpbmcgdG8gcnVuIHZhbGlkYXRpb24gb24gYWxsIFdTREwgZmlsZXMgdGhlIHdpemFyZCB3aWxsIHZhbGlkYXRlIGFsbCBXU0RMIGZpbGVzLCByZWdhcmRsZXNzIG9mIHdoZXJlIHRoZXkgcmVzaWRlLgotPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXU0kwMDEwIj4KLTwhLS1kZXNjLS0+Ci08ZGVzY3JpcHRpb24+Ci1Zb3UgY2FuIHNlbGVjdCB3aGljaCB0eXBlcyBvZiBXU0RMIGZpbGVzIHRvIHJ1biB2YWxpZGF0aW9uIG9uOgotLSBCeSBzZWxlY3RpbmcgIk5vIHdpemFyZCBXU0RMIHZhbGlkYXRpb24iIHRoZSB3aXphcmRzIHdpbGwgbm90IHJ1biB2YWxpZGF0aW9uIG9uIHRoZSBXU0RMIGZpbGUuCi0tIEJ5IHNlbGVjdGluZyB0byBydW4gdmFsaWRhdGlvbiBvbiByZW1vdGUgZmlsZXMsIHRoZSB3aXphcmRzIHdpbGwgb25seSB2YWxpZGF0ZSBXU0RMIGZpbGVzIHRoYXQgZXhpc3Qgb3V0c2lkZSBvZiB5b3VyIHdvcmtzcGFjZS4KLS0gQnkgc2VsZWN0aW5nIHRvIHJ1biB2YWxpZGF0aW9uIG9uIGFsbCBXU0RMIGZpbGVzIHRoZSB3aXphcmQgd2lsbCB2YWxpZGF0ZSBhbGwgV1NETCBmaWxlcywgcmVnYXJkbGVzcyBvZiB3aGVyZSB0aGV5IHJlc2lkZS4KLTwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1NJMDAwMTEiPgotPCEtLWRlc2MtLT4KLTxkZXNjcmlwdGlvbj4KLVlvdSBjYW4gc2VsZWN0IHdoaWNoIHR5cGVzIG9mIFdTREwgZmlsZXMgdG8gcnVuIHZhbGlkYXRpb24gb246Ci0tIEJ5IHNlbGVjdGluZyAiTm8gd2l6YXJkIFdTREwgdmFsaWRhdGlvbiIgdGhlIHdpemFyZHMgd2lsbCBub3QgcnVuIHZhbGlkYXRpb24gb24gdGhlIFdTREwgZmlsZS4KLS0gQnkgc2VsZWN0aW5nIHRvIHJ1biB2YWxpZGF0aW9uIG9uIHJlbW90ZSBmaWxlcywgdGhlIHdpemFyZHMgd2lsbCBvbmx5IHZhbGlkYXRlIFdTREwgZmlsZXMgdGhhdCBleGlzdCBvdXRzaWRlIG9mIHlvdXIgd29ya3NwYWNlLgotLSBCeSBzZWxlY3RpbmcgdG8gcnVuIHZhbGlkYXRpb24gb24gYWxsIFdTREwgZmlsZXMgdGhlIHdpemFyZCB3aWxsIHZhbGlkYXRlIGFsbCBXU0RMIGZpbGVzLCByZWdhcmRsZXNzIG9mIHdoZXJlIHRoZXkgcmVzaWRlLgotPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXU0kwMDEyIj4KLTwhLS1kZXNjLS0+Ci08ZGVzY3JpcHRpb24+Ci1JZiB5b3Ugc2VsZWN0IHRvIHdhaXQgZm9yIFdTREwgdmFsaWRhdGlvbiB0byBjb21wbGV0ZSwgdGhlIFdlYiBzZXJ2aWNlcyB3aXphcmRzIHdpbGwgcHJldmVudCB5b3UgZnJvbSBnb2luZyBmb3J3YXJkIGFuZCBjb21wbGV0aW5nIGFkZGl0aW9uYWwgd2l6YXJkIHBhZ2VzIG9uY2UgeW91IGhhdmUgc2VsZWN0ZWQgeW91ciBXU0RMIGZpbGUgdW50aWwgdGhhdCBXU0RMIGZpbGUgaGFzIGJlZW4gdmFsaWRhdGVkLiBJZiB0aGUgV1NETCBmaWxlIGlzIG5vdCB2YWxpZCwgeW91IHdpbGwgYmUgZ2l2ZW4gdGhlIG9wdGlvbiBvZiBleGl0aW5nIHRoZSB3aXphcmQgb3IgY29udGludWluZyB3aXRoIHRoZSBpbnZhbGlkIFdTREwgZmlsZS4KLTwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1JTMDAwMDkiPgotPCEtLWRlc2MtLT4KLTxkZXNjcmlwdGlvbj4KLVlvdSBjYW4gc2VsZWN0IHdoaWNoIHR5cGVzIG9mIFdTREwgZmlsZXMgdG8gcnVuIHZhbGlkYXRpb24gb246Ci0tIEJ5IHNlbGVjdGluZyAiTm8gd2l6YXJkIFdTREwgdmFsaWRhdGlvbiIgdGhlIHdpemFyZHMgd2lsbCBub3QgcnVuIHZhbGlkYXRpb24gb24gdGhlIFdTREwgZmlsZS4KLS0gQnkgc2VsZWN0aW5nIHRvIHJ1biB2YWxpZGF0aW9uIG9uIHJlbW90ZSBmaWxlcywgdGhlIHdpemFyZHMgd2lsbCBvbmx5IHZhbGlkYXRlIFdTREwgZmlsZXMgdGhhdCBleGlzdCBvdXRzaWRlIG9mIHlvdXIgd29ya3NwYWNlLgotLSBCeSBzZWxlY3RpbmcgdG8gcnVuIHZhbGlkYXRpb24gb24gYWxsIFdTREwgZmlsZXMgdGhlIHdpemFyZCB3aWxsIHZhbGlkYXRlIGFsbCBXU0RMIGZpbGVzLCByZWdhcmRsZXNzIG9mIHdoZXJlIHRoZXkgcmVzaWRlLgotPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXUlMwMDAxMCI+Ci08IS0tZGVzYy0tPgotPGRlc2NyaXB0aW9uPgotWW91IGNhbiBzZWxlY3Qgd2hpY2ggdHlwZXMgb2YgV1NETCBmaWxlcyB0byBydW4gdmFsaWRhdGlvbiBvbjoKLS0gQnkgc2VsZWN0aW5nICJObyB3aXphcmQgV1NETCB2YWxpZGF0aW9uIiB0aGUgd2l6YXJkcyB3aWxsIG5vdCBydW4gdmFsaWRhdGlvbiBvbiB0aGUgV1NETCBmaWxlLgotLSBCeSBzZWxlY3RpbmcgdG8gcnVuIHZhbGlkYXRpb24gb24gcmVtb3RlIGZpbGVzLCB0aGUgd2l6YXJkcyB3aWxsIG9ubHkgdmFsaWRhdGUgV1NETCBmaWxlcyB0aGF0IGV4aXN0IG91dHNpZGUgb2YgeW91ciB3b3Jrc3BhY2UuCi0tIEJ5IHNlbGVjdGluZyB0byBydW4gdmFsaWRhdGlvbiBvbiBhbGwgV1NETCBmaWxlcyB0aGUgd2l6YXJkIHdpbGwgdmFsaWRhdGUgYWxsIFdTREwgZmlsZXMsIHJlZ2FyZGxlc3Mgb2Ygd2hlcmUgdGhleSByZXNpZGUuCi08L2Rlc2NyaXB0aW9uPgotPC9jb250ZXh0PgotCi08Y29udGV4dCBpZD0iUFdSUzAwMDExIj4KLTwhLS1kZXNjLS0+Ci08ZGVzY3JpcHRpb24+Ci1Zb3UgY2FuIHNlbGVjdCB3aGljaCB0eXBlcyBvZiBXU0RMIGZpbGVzIHRvIHJ1biB2YWxpZGF0aW9uIG9uOgotLSBCeSBzZWxlY3RpbmcgIk5vIHdpemFyZCBXU0RMIHZhbGlkYXRpb24iIHRoZSB3aXphcmRzIHdpbGwgbm90IHJ1biB2YWxpZGF0aW9uIG9uIHRoZSBXU0RMIGZpbGUuCi0tIEJ5IHNlbGVjdGluZyB0byBydW4gdmFsaWRhdGlvbiBvbiByZW1vdGUgZmlsZXMsIHRoZSB3aXphcmRzIHdpbGwgb25seSB2YWxpZGF0ZSBXU0RMIGZpbGVzIHRoYXQgZXhpc3Qgb3V0c2lkZSBvZiB5b3VyIHdvcmtzcGFjZS4KLS0gQnkgc2VsZWN0aW5nIHRvIHJ1biB2YWxpZGF0aW9uIG9uIGFsbCBXU0RMIGZpbGVzIHRoZSB3aXphcmQgd2lsbCB2YWxpZGF0ZSBhbGwgV1NETCBmaWxlcywgcmVnYXJkbGVzcyBvZiB3aGVyZSB0aGV5IHJlc2lkZS4KLTwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTxjb250ZXh0IGlkPSJQV1JTMDAwMTIiPgotPCEtLWRlc2MtLT4KLTxkZXNjcmlwdGlvbj4KLVlvdSBjYW4gc2VsZWN0IHdoaWNoIHR5cGVzIG9mIFdTREwgZmlsZXMgdG8gcnVuIHZhbGlkYXRpb24gb246Ci0tIEJ5IHNlbGVjdGluZyAiTm8gd2l6YXJkIFdTREwgdmFsaWRhdGlvbiIgdGhlIHdpemFyZHMgd2lsbCBub3QgcnVuIHZhbGlkYXRpb24gb24gdGhlIFdTREwgZmlsZS4KLS0gQnkgc2VsZWN0aW5nIHRvIHJ1biB2YWxpZGF0aW9uIG9uIHJlbW90ZSBmaWxlcywgdGhlIHdpemFyZHMgd2lsbCBvbmx5IHZhbGlkYXRlIFdTREwgZmlsZXMgdGhhdCBleGlzdCBvdXRzaWRlIG9mIHlvdXIgd29ya3NwYWNlLgotLSBCeSBzZWxlY3RpbmcgdG8gcnVuIHZhbGlkYXRpb24gb24gYWxsIFdTREwgZmlsZXMgdGhlIHdpemFyZCB3aWxsIHZhbGlkYXRlIGFsbCBXU0RMIGZpbGVzLCByZWdhcmRsZXNzIG9mIHdoZXJlIHRoZXkgcmVzaWRlLgotPC9kZXNjcmlwdGlvbj4KLTwvY29udGV4dD4KLQotPGNvbnRleHQgaWQ9IlBXUlMwMDEzIj4KLTwhLS1kZXNjLS0+Ci08ZGVzY3JpcHRpb24+Ci1JZiB5b3Ugc2VsZWN0IHRvIHdhaXQgZm9yIFdTREwgdmFsaWRhdGlvbiB0byBjb21wbGV0ZSwgdGhlIFdlYiBzZXJ2aWNlcyB3aXphcmRzIHdpbGwgcHJldmVudCB5b3UgZnJvbSBnb2luZyBmb3J3YXJkIGFuZCBjb21wbGV0aW5nIGFkZGl0aW9uYWwgd2l6YXJkIHBhZ2VzIG9uY2UgeW91IGhhdmUgc2VsZWN0ZWQgeW91ciBXU0RMIGZpbGUgdW50aWwgdGhhdCBXU0RMIGZpbGUgaGFzIGJlZW4gdmFsaWRhdGVkLiBJZiB0aGUgV1NETCBmaWxlIGlzIG5vdCB2YWxpZCwgeW91IHdpbGwgYmUgZ2l2ZW4gdGhlIG9wdGlvbiBvZiBleGl0aW5nIHRoZSB3aXphcmQgb3IgY29udGludWluZyB3aXRoIHRoZSBpbnZhbGlkIFdTREwgZmlsZS4KLTwvZGVzY3JpcHRpb24+Ci08L2NvbnRleHQ+Ci0KLTwvY29udGV4dHM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci8uY3ZzaWdub3JlIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3N2FkZjk3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXJfMS4wLjAuamFyCi1idWlsZC54bWwKLWJhawotdGVtcApkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci8ucHJvamVjdCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3ODUxMDAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzljMjY0Ny4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1N1biBBcHIgMTYgMTg6MDE6MjUgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy88cHJvamVjdD49SVNPLTg4NTktMQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NGVjNWQ4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLSNTdW4gQXByIDE2IDE4OjAxOjMyIEVEVCAyMDA2Ci1jb21waWxlcnMucC5idWlsZD0wCi1jb21waWxlcnMucC5kZXByZWNhdGVkPTAKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0wCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0wCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9Eb2NCdWlsZC54bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL0RvY0J1aWxkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQ0YjNmYS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL0RvY0J1aWxkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgotPCEtLSAKLQotCVRoaXMgc2NyaXB0IGJ1aWxkIHRoZSBIZWxwIHBsdWctaW4gYnkgdHJhbnNmb3JtaW5nIHRoZSBESVRBIHNvdXJjZSBmaWxlcyBpbnRvIEhUTUwuCi0JCi0JVG8gdXNlIHRoaXMgc2NyaXB0LCB5b3UgbXVzdCBpbnN0YWxsIERJVEEtT1Qgb24geW91ciBtYWNoaW5lIGluIHRoZSBkaXJlY3RvcnkKLQlkZWZpbmVkIGJ5IHRoZSBkaXRhLm90LmRpciBwcm9wZXJ0eS4KLQkKLQlSdW4gdGhlIGRlZmF1bHQgdGFyZ2V0IGFmdGVyIHlvdSBlZGl0IHRoZSBESVRBIHNvdXJjZSBmaWxlcyB0byByZWdlbmVyYXRlIHRoZSBIVE1MLgotCQotCVRvIGN1c3RvbWl6ZSB0aGlzIHNjcmlwdCBmb3Igb3RoZXIgSGVscCBwbHVnLWlucywgbW9kaWZ5IHRoZSB2YWx1ZSBvZiB0aGUgYXJncy5pbnB1dCBwcm9wZXJ0eQotCXRvIGJlIHRoZSBESVRBIG1hcCBmaWxlIGZvciB0aGUgcGx1Zy1pbi4KLQkKLQlOT1RFOiBUaGlzIHNjcmlwdCBhc3N1bWVzIHRoYXQgbGlua3MgdG8gc2libGluZyBIZWxwIHBsdWctaW5zIGhhdmUgc2NvcGU9InBlZXIiLCBvdGhlcndpc2UgdGhlCi0Jb3V0cHV0IGRpcmVjdG9yeSBzdHJ1Y3R1cmUgd2lsbCBiZSBzaGlmdGVkIGluY29ycmVjdGx5LgotCQotCU5PVEU6IFRoaXMgc2NyaXB0IGFzc3VtZXMgdGhhdCB5b3UgaGFuZCBjb2RlIHlvdXIgcGx1Z2luLnhtbCBmaWxlIGluIG15cGx1Z2luLnhtbC4gVGhpcyBmaWxlCi0Jd2lsbCBiZSBjb3BpZWQgb3ZlciB0aGUgZ2VuZXJhdGVkIHBsdWdpbi54bWwgd2hpY2ggaXMgY3VycmVudGx5IG5vdCBiZWluZyBnZW5lcmF0ZWQgY29ycmVjdGx5Ci0JYnkgRElUQS1PVC4KLQkKLQlDaGFuZ2VMb2c6Ci0JMjAwNi0wNC0wNSBBcnRodXIgUnltYW4gPHJ5bWFuQGNhLmlibS5jb20+Ci0JLSBDcmVhdGVkLgotCi0tLT4KLTxwcm9qZWN0IG5hbWU9ImVjbGlwc2VoZWxwIiBkZWZhdWx0PSJhbGwiPgotCi0JPHByb3BlcnR5IG5hbWU9ImRpdGEub3QuZGlyIiBsb2NhdGlvbj0iQzovRElUQS1PVDEuMi4yIiAvPgotCi0JPHBhdGggaWQ9ImRvc3QuY2xhc3MucGF0aCI+Ci0JCTxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtkaXRhLm90LmRpcn0ke2ZpbGUuc2VwYXJhdG9yfWxpYiR7ZmlsZS5zZXBhcmF0b3J9ZG9zdC5qYXIiIC8+Ci0JPC9wYXRoPgotCi0JPHRhc2tkZWYgbmFtZT0iaW50ZWdyYXRlIiBjbGFzc25hbWU9Im9yZy5kaXRhLmRvc3QucGxhdGZvcm0uSW50ZWdyYXRvclRhc2siPgotCQk8Y2xhc3NwYXRoIHJlZmlkPSJkb3N0LmNsYXNzLnBhdGgiIC8+Ci0JPC90YXNrZGVmPgotCTx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJpbnRlZ3JhdGUsIGVjbGlwc2VoZWxwIj4KLQk8L3RhcmdldD4KLQk8dGFyZ2V0IG5hbWU9ImludGVncmF0ZSI+Ci0JCTxpbnRlZ3JhdGUgZGl0YWRpcj0iJHtkaXRhLm90LmRpcn0iIC8+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tIHJldmlzZSBiZWxvdyBoZXJlIC0tPgotCTx0YXJnZXQgbmFtZT0iZWNsaXBzZWhlbHAiPgotCQk8YW50IGFudGZpbGU9IiR7ZGl0YS5vdC5kaXJ9JHtmaWxlLnNlcGFyYXRvcn1jb25kdWN0b3IueG1sIiB0YXJnZXQ9ImluaXQiIGRpcj0iJHtkaXRhLm90LmRpcn0iPgotCQkJPHByb3BlcnR5IG5hbWU9ImFyZ3MuY29weWNzcyIgdmFsdWU9Im5vIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9ImFyZ3MuY3NzcGF0aCIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5kb2MudXNlciIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJhcmdzLmVjbGlwc2UucHJvdmlkZXIiIHZhbHVlPSJFY2xpcHNlLm9yZyIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJhcmdzLmVjbGlwc2UudmVyc2lvbiIgdmFsdWU9IjEuNS4wIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9ImFyZ3MuaW5wdXQiIGxvY2F0aW9uPSJ3c3dzZGxlZGl0b3J0X3RvYy5kaXRhbWFwIiAvPiAgICAJCQotCQkJPHByb3BlcnR5IG5hbWU9ImNsZWFuLnRlbXAiIHZhbHVlPSJ0cnVlIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9ImRpdGEuZXh0bmFtZSIgdmFsdWU9Ii5kaXRhIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9ImRpdGEudGVtcC5kaXIiIGxvY2F0aW9uPSJ0ZW1wIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9Im91dHB1dC5kaXIiIGxvY2F0aW9uPSIuLiIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJ0cmFuc3R5cGUiIHZhbHVlPSJlY2xpcHNlaGVscCIgLz4KLQkJPC9hbnQ+Ci0JCTxjb3B5IGZpbGU9Im15cGx1Z2luLnhtbCIgdG9maWxlPSJwbHVnaW4ueG1sIiBvdmVyd3JpdGU9InllcyIgLz4KLQk8L3RhcmdldD4KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OThlMjJmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlcjsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjMwMC5xdWFsaWZpZXIKLUJ1bmRsZS1WZW5kb3I6ICVwbHVnaW5Qcm92aWRlcgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9hYm91dC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2RiMzZlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9idWlsZC5wcm9wZXJ0aWVzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzAxNjgyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IHdzd3NkbGVkaXRvcmNfdG9jLnhtbCxcCi0gICAgICAgICAgICAgICB3c3dzZGxlZGl0b3J0X3RvYy54bWwsXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlcmluZGV4LnhtbCxcCi0gICAgICAgICAgICAgICBpbWFnZXMvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAotCQkJICAgY29uY2VwdHMvKi5odG0qLFwKLSAgICAgICAgICAgICAgIHRhc2tzLyouaHRtKixcCi0gICAgICAgICAgICAgICBpbmRleC8sXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvCi1zcmMuaW5jbHVkZXMgPSBidWlsZC5wcm9wZXJ0aWVzLFwKLQkJICAgICAgICoubWFwbGlzdCxcCi0gICAgICAgICAgICAgICAqLmRpdGFtYXAsXAotCQkgICAgICAgY29uY2VwdHMvKi5kaXRhLFwKLSAgICAgICAgICAgICAgIHRhc2tzLyouZGl0YQotYmluLmV4Y2x1ZGVzID0gRG9jQnVpbGQueG1sLFwKLSAgICAgICAgICAgICAgIG15UGx1Z2luKi54bWwKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGxlZC5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9jb25jZXB0cy9jd3NkbGVkLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwYmZkYTkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9jb25jZXB0cy9jd3NkbGVkLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSBjb25jZXB0IFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIENvbmNlcHQvL0VOIgotICJjb25jZXB0LmR0ZCI+Ci08Y29uY2VwdCBpZD0iY3dzZGxlZCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5FZGl0aW5nIFdTREwgZmlsZXMgd2l0aCB0aGUgV1NETCBFZGl0b3I8L3RpdGxlPgotPHRpdGxlYWx0cz4KLTxzZWFyY2h0aXRsZT5FZGl0aW5nIFdTREwgZmlsZXMgd2l0aCB0aGUgV1NETCBlZGl0b3I8L3NlYXJjaHRpdGxlPgotPC90aXRsZWFsdHM+Ci08c2hvcnRkZXNjPlRoZSBXU0RMIGVkaXRvciBhbGxvd3MgeW91IHRvIGVhc2lseSBhbmQgZ3JhcGhpY2FsbHkgY3JlYXRlLCBtb2RpZnksCi12aWV3LCBhbmQgdmFsaWRhdGUgV1NETCBmaWxlcy48L3Nob3J0ZGVzYz4KLTxjb25ib2R5PgotPHA+VXNpbmcgdGhlIFdTREwgZWRpdG9yLCB5b3UgY2FuIGRvIHRoZSBmb2xsb3dpbmc6PC9wPgotPHVsPgotPGxpPkNyZWF0ZSBuZXcgV1NETCBmaWxlczwvbGk+Ci08bGk+VmFsaWRhdGUgYW5kIGVkaXQgV1NETCBmaWxlczwvbGk+Ci08bGk+Q3JlYXRlIGFuZCBkZWxldGU6ICA8dWw+Ci08bGk+c2VydmljZXMsIHdoaWNoIGFyZSB1c2VkIHRvIGFnZ3JlZ2F0ZSBhIHNldCBvZiByZWxhdGVkIHBvcnRzLiBUaGVzZSBhcmUKLXRoZSByb290IGVsZW1lbnRzIG9mIGFsbCBXU0RMIGZpbGVzLjwvbGk+Ci08bGk+cG9ydHMsIHdoaWNoIHNwZWNpZnkgYW4gYWRkcmVzcyBmb3IgYSBiaW5kaW5nLCB0aHVzIGRlZmluaW5nIGEgc2luZ2xlCi1jb21tdW5pY2F0aW9uIGVuZHBvaW50LjwvbGk+Ci08bGk+YmluZGluZ3MsIHdoaWNoIHNwZWNpZnkgY29uY3JldGUgcHJvdG9jb2wgYW5kIGRhdGEgZm9ybWF0IHNwZWNpZmljYXRpb25zCi1mb3IgdGhlIG9wZXJhdGlvbnMgYW5kIG1lc3NhZ2VzIGRlZmluZWQgYnkgYSBwYXJ0aWN1bGFyIHBvcnQgdHlwZS48L2xpPgotPGxpPnBvcnQgdHlwZXMsIHdoaWNoIGFyZSBhIHNldCBvZiBhYnN0cmFjdCBvcGVyYXRpb25zLiBFYWNoIG9wZXJhdGlvbiByZWZlcnMKLXRvIGFuIGlucHV0IG1lc3NhZ2UgYW5kIG91dHB1dCBtZXNzYWdlcy48L2xpPgotPGxpPm9wZXJhdGlvbnMsIHdoaWNoIHJlZmVyIHRvIGlucHV0IGFuZCBvdXRwdXQgbWVzc2FnZXM8L2xpPgotPGxpPm1lc3NhZ2VzLCB3aGljaCByZXByZXNlbnQgYW4gYWJzdHJhY3QgZGVmaW5pdGlvbiBvZiB0aGUgZGF0YSBiZWluZyB0cmFuc21pdHRlZC4KLUEgbWVzc2FnZSBjb25zaXN0cyBvZiBsb2dpY2FsIHBhcnRzLCBlYWNoIG9mIHdoaWNoIGlzIGFzc29jaWF0ZWQgd2l0aCBhIGRlZmluaXRpb24KLXdpdGhpbiBzb21lIHR5cGUgc3lzdGVtLjwvbGk+Ci08bGk+cGFydHMsIHdoaWNoIGFyZSBhIGZsZXhpYmxlIG1lY2hhbmlzbSBmb3IgZGVzY3JpYmluZyB0aGUgbG9naWNhbCBhYnN0cmFjdAotY29udGVudCBvZiBhIG1lc3NhZ2U8L2xpPgotPGxpPnR5cGVzLCB3aGljaCBkZXNjcmliZSBhbGwgdGhlIGRhdGEgdHlwZXMgdXNlZCBiZXR3ZWVuIHRoZSBjbGllbnQgYW5kIHNlcnZlci4KLVdTREwgaXMgbm90IHRpZWQgZXhjbHVzaXZlbHkgdG8gYSBzcGVjaWZpYyB0eXBpbmcgc3lzdGVtLCBidXQgaXQgdXNlcyB0aGUKLVczQyBYTUwgU2NoZW1hIHNwZWNpZmljYXRpb24gYXMgaXRzIGRlZmF1bHQgY2hvaWNlLjwvbGk+Ci08bGk+aW1wb3J0IHN0YXRlbWVudHMsIHdoaWNoIGFyZSB1c2VkIHRvIGFzc29jaWF0ZSBhIG5hbWVzcGFjZSB3aXRoIGEgZG9jdW1lbnQKLWxvY2F0aW9uIDwvbGk+Ci08L3VsPjwvbGk+Ci08bGk+SW1wb3J0IGV4aXN0aW5nIFdTREwgZmlsZXMgZm9yIHN0cnVjdHVyZWQgdmlld2luZzwvbGk+Ci08bGk+R2VuZXJhdGUgZG9jdW1lbnRhdGlvbiBmcm9tIGEgV1NETCBkb2N1bWVudC48L2xpPgotPC91bD4KLTxwPlRoZSBXU0RMIHN1cHBvcnQgaW4gdGhlIFdTREwgZWRpdG9yIGlzIGJhc2VkIG9uIHRoZSBXM0MgPHhyZWYgZm9ybWF0PSJodG1sIgotaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvd3NkbCIgc2NvcGU9ImV4dGVybmFsIj5XZWIgU2VydmljZXMgRGVzY3JpcHRpb24KLUxhbmd1YWdlIChXU0RMKSAxLjE8L3hyZWY+LiBUaGUgV1NETCBzcGVjaWZpY2F0aW9uIGZyb20gdGhlIFczQyBXZWIgc2l0ZSBpcwotYWxzbyB1c2VkIGZvciB2YWxpZGF0aW9uLiZuYnNwOyA8L3A+Ci08L2NvbmJvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBjb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGwuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PldTREw8L2xpbmt0ZXh0PjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgdGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vdGFza3MvdGNydHdzZGwuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08bGluayBocmVmPSIuLi90YXNrcy90ZWR0d3NkbC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L2NvbmNlcHQ+Ci08P1B1YiAqMDAwMDAwMjYxNz8+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsZWQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGxlZC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NWQ3NTcyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGxlZC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDciIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9ImNvbmNlcHQiIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iRWRpdGluZyBXU0RMIGZpbGVzIHdpdGggdGhlIFdTREwgRWRpdG9yIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IlRoZSBXU0RMIGVkaXRvciBhbGxvd3MgeW91IHRvIGVhc2lseSBhbmQgZ3JhcGhpY2FsbHkgY3JlYXRlLCBtb2RpZnksIHZpZXcsIGFuZCB2YWxpZGF0ZSBXU0RMIGZpbGVzLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgV1NETCBlZGl0b3IgYWxsb3dzIHlvdSB0byBlYXNpbHkgYW5kIGdyYXBoaWNhbGx5IGNyZWF0ZSwgbW9kaWZ5LCB2aWV3LCBhbmQgdmFsaWRhdGUgV1NETCBmaWxlcy4iIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NkbC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90YXNrcy90Y3J0d3NkbC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi90YXNrcy90ZWR0d3NkbC5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9ImN3c2RsZWQiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5FZGl0aW5nIFdTREwgZmlsZXMgd2l0aCB0aGUgV1NETCBlZGl0b3I8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9ImN3c2RsZWQiPjxhIG5hbWU9ImN3c2RsZWQiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkVkaXRpbmcgV1NETCBmaWxlcyB3aXRoIHRoZSBXU0RMIEVkaXRvcjwvaDE+Ci0KLQotCi08ZGl2PjxwPlRoZSBXU0RMIGVkaXRvciBhbGxvd3MgeW91IHRvIGVhc2lseSBhbmQgZ3JhcGhpY2FsbHkgY3JlYXRlLCBtb2RpZnksCi12aWV3LCBhbmQgdmFsaWRhdGUgV1NETCBmaWxlcy48L3A+Ci0KLTxwPlVzaW5nIHRoZSBXU0RMIGVkaXRvciwgeW91IGNhbiBkbyB0aGUgZm9sbG93aW5nOjwvcD4KLQotPHVsPgotPGxpPkNyZWF0ZSBuZXcgV1NETCBmaWxlczwvbGk+Ci0KLTxsaT5WYWxpZGF0ZSBhbmQgZWRpdCBXU0RMIGZpbGVzPC9saT4KLQotPGxpPkNyZWF0ZSBhbmQgZGVsZXRlOiAgPHVsPgotPGxpPnNlcnZpY2VzLCB3aGljaCBhcmUgdXNlZCB0byBhZ2dyZWdhdGUgYSBzZXQgb2YgcmVsYXRlZCBwb3J0cy4gVGhlc2UgYXJlCi10aGUgcm9vdCBlbGVtZW50cyBvZiBhbGwgV1NETCBmaWxlcy48L2xpPgotCi08bGk+cG9ydHMsIHdoaWNoIHNwZWNpZnkgYW4gYWRkcmVzcyBmb3IgYSBiaW5kaW5nLCB0aHVzIGRlZmluaW5nIGEgc2luZ2xlCi1jb21tdW5pY2F0aW9uIGVuZHBvaW50LjwvbGk+Ci0KLTxsaT5iaW5kaW5ncywgd2hpY2ggc3BlY2lmeSBjb25jcmV0ZSBwcm90b2NvbCBhbmQgZGF0YSBmb3JtYXQgc3BlY2lmaWNhdGlvbnMKLWZvciB0aGUgb3BlcmF0aW9ucyBhbmQgbWVzc2FnZXMgZGVmaW5lZCBieSBhIHBhcnRpY3VsYXIgcG9ydCB0eXBlLjwvbGk+Ci0KLTxsaT5wb3J0IHR5cGVzLCB3aGljaCBhcmUgYSBzZXQgb2YgYWJzdHJhY3Qgb3BlcmF0aW9ucy4gRWFjaCBvcGVyYXRpb24gcmVmZXJzCi10byBhbiBpbnB1dCBtZXNzYWdlIGFuZCBvdXRwdXQgbWVzc2FnZXMuPC9saT4KLQotPGxpPm9wZXJhdGlvbnMsIHdoaWNoIHJlZmVyIHRvIGlucHV0IGFuZCBvdXRwdXQgbWVzc2FnZXM8L2xpPgotCi08bGk+bWVzc2FnZXMsIHdoaWNoIHJlcHJlc2VudCBhbiBhYnN0cmFjdCBkZWZpbml0aW9uIG9mIHRoZSBkYXRhIGJlaW5nIHRyYW5zbWl0dGVkLgotQSBtZXNzYWdlIGNvbnNpc3RzIG9mIGxvZ2ljYWwgcGFydHMsIGVhY2ggb2Ygd2hpY2ggaXMgYXNzb2NpYXRlZCB3aXRoIGEgZGVmaW5pdGlvbgotd2l0aGluIHNvbWUgdHlwZSBzeXN0ZW0uPC9saT4KLQotPGxpPnBhcnRzLCB3aGljaCBhcmUgYSBmbGV4aWJsZSBtZWNoYW5pc20gZm9yIGRlc2NyaWJpbmcgdGhlIGxvZ2ljYWwgYWJzdHJhY3QKLWNvbnRlbnQgb2YgYSBtZXNzYWdlPC9saT4KLQotPGxpPnR5cGVzLCB3aGljaCBkZXNjcmliZSBhbGwgdGhlIGRhdGEgdHlwZXMgdXNlZCBiZXR3ZWVuIHRoZSBjbGllbnQgYW5kIHNlcnZlci4KLVdTREwgaXMgbm90IHRpZWQgZXhjbHVzaXZlbHkgdG8gYSBzcGVjaWZpYyB0eXBpbmcgc3lzdGVtLCBidXQgaXQgdXNlcyB0aGUKLVczQyBYTUwgU2NoZW1hIHNwZWNpZmljYXRpb24gYXMgaXRzIGRlZmF1bHQgY2hvaWNlLjwvbGk+Ci0KLTxsaT5pbXBvcnQgc3RhdGVtZW50cywgd2hpY2ggYXJlIHVzZWQgdG8gYXNzb2NpYXRlIGEgbmFtZXNwYWNlIHdpdGggYSBkb2N1bWVudAotbG9jYXRpb24gPC9saT4KLQotPC91bD4KLTwvbGk+Ci0KLTxsaT5JbXBvcnQgZXhpc3RpbmcgV1NETCBmaWxlcyBmb3Igc3RydWN0dXJlZCB2aWV3aW5nPC9saT4KLQotPGxpPkdlbmVyYXRlIGRvY3VtZW50YXRpb24gZnJvbSBhIFdTREwgZG9jdW1lbnQuPC9saT4KLQotPC91bD4KLQotPHA+VGhlIFdTREwgc3VwcG9ydCBpbiB0aGUgV1NETCBlZGl0b3IgaXMgYmFzZWQgb24gdGhlIFczQyA8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi93c2RsIiB0YXJnZXQ9Il9ibGFuayI+V2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uIExhbmd1YWdlIChXU0RMKSAxLjE8L2E+LiBUaGUgV1NETCBzcGVjaWZpY2F0aW9uIGZyb20gdGhlIFczQyBXZWIgc2l0ZSBpcwotYWxzbyB1c2VkIGZvciB2YWxpZGF0aW9uLsKgIDwvcD4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIGNvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsLmh0bWwiPldTREw8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgdGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi90YXNrcy90Y3J0d3NkbC5odG1sIiB0aXRsZT0iWW91IGNhbiBjcmVhdGUgYSBuZXcsIGVtcHR5IFdTREwgZmlsZSwgdGhlbiBlZGl0IGl0IHVzaW5nIHRoZSBXU0RMIGVkaXRvci4iPkNyZWF0aW5nIGEgbmV3IFdTREwgZmlsZTwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vdGFza3MvdGVkdHdzZGwuaHRtbCIgdGl0bGU9Ik9uY2UgeW91IGhhdmUgY3JlYXRlZCBhIFdTREwgZmlsZSwgeW91IGNhbiBlZGl0IGl0IGluIHRoZSBXU0RMIGVkaXRvci4gWW91IGNhbiBhbHNvIGltcG9ydCBXU0RMIGZpbGVzIHlvdSBoYXZlIGNyZWF0ZWQgaW50byB0aGUgd29ya2JlbmNoIGFuZCBlZGl0IHRoZW0gaW4gdGhlIFdTREwgZWRpdG9yLiI+RWRpdGluZyBXU0RMIGZpbGVzPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2ltYWdlcy9odHRwc2tlbC5naWYgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2ltYWdlcy9odHRwc2tlbC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyZTY2ODYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9pbWFnZXMvaHR0cHNrZWwuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9pbWFnZXMvc2hvdy1oaWRlLWJpbmRpbmcuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9pbWFnZXMvc2hvdy1oaWRlLWJpbmRpbmcuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZGE5YjU4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW1hZ2VzL3Nob3ctaGlkZS1iaW5kaW5nLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW1hZ2VzL3NvYXBza2VsLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW1hZ2VzL3NvYXBza2VsLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODA0MjczNS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2ltYWdlcy9zb2Fwc2tlbC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2ltYWdlcy93c2RsZWRpdG9yLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxlZGl0b3IuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjY2JlM2I5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW1hZ2VzL3dzZGxlZGl0b3IuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9pbmRleC9fZi5jZnMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2luZGV4L19mLmNmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWY4MDE4YS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2luZGV4L19mLmNmcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW5kZXgvZGVsZXRhYmxlIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9pbmRleC9kZWxldGFibGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0MjMyNDIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9pbmRleC9kZWxldGFibGUKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfY29udHJpYnV0aW9ucyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9jb250cmlidXRpb25zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NmRlNjhkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9jb250cmlidXRpb25zCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVGhpcyBpcyBhIGdlbmVyYXRlZCBmaWxlOyBkbyBub3QgZWRpdC4NCi0jV2VkIE1heSAwOSAxNDoxNTozOCBFRFQgMjAwNw0KLW9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyPW9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyXG4xLjAuMzAwLnF1YWxpZmllcg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kZXBlbmRlbmNpZXMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfZGVwZW5kZW5jaWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjQ4NjhhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kZXBlbmRlbmNpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLSNUaGlzIGlzIGEgZ2VuZXJhdGVkIGZpbGU7IGRvIG5vdCBlZGl0Lg0KLSNXZWQgTWF5IDA5IDE0OjE1OjM4IEVEVCAyMDA3DQotbHVjZW5lPTEuNC4xMDMudjIwMDYwNjAxDQotYW5hbHl6ZXI9b3JnLmVjbGlwc2UuaGVscC5iYXNlXCMzLjIuMC52MjAwNjA2MDE/bG9jYWxlXD1lbg0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kb2NzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9pbmRleC9pbmRleGVkX2RvY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2MTI4ODkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9pbmRleC9pbmRleGVkX2RvY3MKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0jVGhpcyBpcyBhIGdlbmVyYXRlZCBmaWxlOyBkbyBub3QgZWRpdC4NCi0jV2VkIE1heSAwOSAxNDoxNTozOCBFRFQgMjAwNw0KLS9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90c2V0YmluZC5odG1sPTANCi0vb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGxlZC5odG1sPTANCi0vb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGVkdHdzZGwuaHRtbD0wDQotL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRwYXJ0Lmh0bWw9MA0KLS9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkc3J2Yy5odG1sPTANCi0vb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZG9wZXIuaHRtbD0wDQotL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RzZXRwcnR0Lmh0bWw9MA0KLS9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkbWVzcy5odG1sPTANCi0vb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2RsZXhwLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90Y3J0d3NkbC5odG1sPTANCi0vb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGNydGltcHQuaHRtbD0wDQotL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RpbXB3c2RsLmh0bWw9MA0KLS9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkcG9ydC5odG1sPTANCi0vb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGNydHR5cGUuaHRtbD0wDQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9pbmRleC9zZWdtZW50cyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvaW5kZXgvc2VnbWVudHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5YjVkMGMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9pbmRleC9zZWdtZW50cworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvbXlwbHVnaW4ueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9teXBsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3ZWNlNzQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9teXBsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotPD9OTFMgVFlQRT0ib3JnLmVjbGlwc2UuaGVscC50b2MiPz4KLTwhLS0gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAtLT4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLTwhLS0gVGhpcyBpcyB0aGUgcGx1Z2luIGZvciBkZWNsYXJpbmcgdGhlIGhlbHAgICAgICAgICAtLT4KLTwhLS0gY29udHJpYnV0aW9ucyBmb3IgdXNpbmcgdGhlIHRvb2wuICAgICAgICAgICAgICAgICAtLT4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQotPHBsdWdpbj4KLQotPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC50b2MiPgotICAgIDx0b2MgZmlsZT0id3N3c2RsZWRpdG9ydF90b2MueG1sIi8+ICAgCi0gICAgPHRvYyBmaWxlPSJ3c3dzZGxlZGl0b3JjX3RvYy54bWwiLz4KLSAgICAgICA8aW5kZXggcGF0aD0iaW5kZXgvIi8+Ci0gICAgICAKLTwvZXh0ZW5zaW9uPgotPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC5pbmRleCI+Ci0gICAgICA8aW5kZXggZmlsZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXJpbmRleC54bWwiLz4KLTwvZXh0ZW5zaW9uPgotCi0KLTwvcGx1Z2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIubWFwbGlzdCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIubWFwbGlzdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGRlYjk5Zi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyLm1hcGxpc3QKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08bWFwbGlzdCB2ZXJzaW9uPSIzLjYuMiI+Ci0gIDxuYXY+Ci0gICAgPG1hcCBmaWxlPSJ3c3dzZGxlZGl0b3J0X3RvYy5kaXRhbWFwIi8+Ci0gICAgPG1hcCBmaWxlPSJ3c3dzZGxlZGl0b3JjX3RvYy5kaXRhbWFwIi8+Ci0gIDwvbmF2PgotICA8bGluaz4KLSAgICA8bWFwIGZpbGU9Indzd3NkbGVkaXRvcnRfdG9jLmRpdGFtYXAiLz4KLSAgICA8bWFwIGZpbGU9Indzd3NkbGVkaXRvcmNfdG9jLmRpdGFtYXAiLz4KLSAgPC9saW5rPgotPC9tYXBsaXN0PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlcmluZGV4Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyaW5kZXguaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjEwNjk3Zi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyaW5kZXguaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgaHRtbAotICBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDciIC8+Ci08bWV0YSBuYW1lPSJzZWN1cml0eSIgY29udGVudD0icHVibGljIiAvPgotPG1ldGEgbmFtZT0iUm9ib3RzIiBjb250ZW50PSJpbmRleCxmb2xsb3ciIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIG5hbWU9IkRDLkZvcm1hdCIgY29udGVudD0iWEhUTUwiIC8+Ci08IS0tIEFsbCByaWdodHMgcmVzZXJ2ZWQuIExpY2Vuc2VkIE1hdGVyaWFscyBQcm9wZXJ0eSBvZiBJQk0gLS0+Ci08IS0tIFVTIEdvdmVybm1lbnQgVXNlcnMgUmVzdHJpY3RlZCBSaWdodHMgLS0+Ci08IS0tIFVzZSwgZHVwbGljYXRpb24gb3IgZGlzY2xvc3VyZSByZXN0cmljdGVkIGJ5IC0tPgotPCEtLSBHU0EgQURQIFNjaGVkdWxlIENvbnRyYWN0IHdpdGggSUJNIENvcnAuIC0tPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iaWJtZGl0YS5jc3MiIC8+Ci08dGl0bGU+SW5kZXg8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci08aDE+SW5kZXg8L2gxPgotPGEgbmFtZT0iSURYMF81NyIgaHJlZj0iI0lEWDFfNTciPlc8L2E+Ci08aHI+PC9ocj4KLTxzdHJvbmc+PGEgbmFtZT0iSURYMV81NyIgaHJlZj0iI0lEWDBfNTciPlc8L2E+PC9zdHJvbmc+Ci08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+V2ViIHNlcnZpY2VzCi08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+PGEgaHJlZj0idGFza3MvdGFkZHNydmMuaHRtbCN0YWRkc3J2YyI+YWRkaW5nIHNlcnZpY2VzIHRvIFdTREw8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3RjcnRpbXB0Lmh0bWwjdGNydGltcHQiPmFkZGluZyBXU0RMIGltcG9ydCBzdGF0ZW1lbnRzPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90YWRkcGFydC5odG1sI3RhZGRwYXJ0Ij5hZGRpbmcgV1NETCBtZXNzYWdlIHBhcnRzPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90YWRkbWVzcy5odG1sI3RhZGRtZXNzIj5hZGRpbmcgV1NETCBtZXNzYWdlczwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdGFkZG9wZXIuaHRtbCN0YWRkb3BlciI+YWRkaW5nIFdTREwgb3BlcmF0aW9uczwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdGFkZHBvcnQuaHRtbCN0YWRkcG9ydCI+YWRkaW5nIFdTREwgcG9ydHM8L2E+Ci08L2xpPgotPGxpPmJpbmRpbmdzCi08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+PGEgaHJlZj0idGFza3MvdHNldGJpbmQuaHRtbCN0c2V0YmluZCI+Y3JlYXRpbmc8L2E+Ci08L2xpPgotPC91bD4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdGNydHdzZGwuaHRtbCN0Y3J0d3NkbCI+Y3JlYXRpbmcgV1NETDwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdGNydHR5cGUuaHRtbCN0Y3J0dHlwZSI+Y3JlYXRpbmcgV1NETCB0eXBlczwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdGVkdHdzZGwuaHRtbCN0ZWR0d3NkbCI+ZWRpdGluZyBXU0RMPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90aW1wd3NkbC5odG1sI3RpbXB3c2RsIj5pbXBvcnRpbmcgV1NETDwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdHNldHBydHQuaHRtbCN0c2V0cHJ0dCI+c2V0dGluZyBwb3J0IHR5cGVzPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90c2V0YmluZC5odG1sI3RzZXRiaW5kIj5zZXR0aW5nIFdTREwgYmluZGluZ3M8L2E+Ci08L2xpPgotPC91bD4KLTwvbGk+Ci08bGk+V1NETAotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPjxhIGhyZWY9InRhc2tzL3RzZXRiaW5kLmh0bWwjdHNldGJpbmQiPmJpbmRpbmdzPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90Y3J0d3NkbC5odG1sI3RjcnR3c2RsIj5jcmVhdGluZzwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdGVkdHdzZGwuaHRtbCN0ZWR0d3NkbCI+ZWRpdGluZzwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdGNydGltcHQuaHRtbCN0Y3J0aW1wdCI+aW1wb3J0IHN0YXRlbWVudHM8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3RpbXB3c2RsLmh0bWwjdGltcHdzZGwiPmltcG9ydGluZzwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdGFkZHBhcnQuaHRtbCN0YWRkcGFydCI+bWVzc2FnZSBwYXJ0czwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdGFkZG1lc3MuaHRtbCN0YWRkbWVzcyI+bWVzc2FnZXM8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3RhZGRvcGVyLmh0bWwjdGFkZG9wZXIiPm9wZXJhdGlvbnM8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3RhZGRwb3J0Lmh0bWwjdGFkZHBvcnQiPnBvcnRzPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90YWRkc3J2Yy5odG1sI3RhZGRzcnZjIj5zZXJ2aWNlczwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdHNldHBydHQuaHRtbCN0c2V0cHJ0dCI+c2V0dGluZyBwb3J0IHR5cGVzPC9hPgotPC9saT4KLTxsaT48YSBocmVmPSJ0YXNrcy90Y3J0dHlwZS5odG1sI3RjcnR0eXBlIj50eXBlczwvYT4KLTwvbGk+Ci08L3VsPgotPC9saT4KLTwvdWw+Ci08L2JvZHk+PC9odG1sPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlcmluZGV4LnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXJpbmRleC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5ZjJmNWMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlcmluZGV4LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08aW5kZXg+Ci0gIDxlbnRyeSBrZXl3b3JkPSJXU0RMIj4KLSAgICA8ZW50cnkga2V5d29yZD0iaW1wb3J0aW5nIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90aW1wd3NkbC5odG1sI3RpbXB3c2RsIiB0aXRsZT0iSW1wb3J0aW5nIGEgV1NETCBmaWxlIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iY3JlYXRpbmciPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RjcnR3c2RsLmh0bWwjdGNydHdzZGwiIHRpdGxlPSJDcmVhdGluZyBhIG5ldyBXU0RMIGZpbGUiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJlZGl0aW5nIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90ZWR0d3NkbC5odG1sI3RlZHR3c2RsIiB0aXRsZT0iRWRpdGluZyBXU0RMIGZpbGVzIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0ic2VydmljZXMiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RhZGRzcnZjLmh0bWwjdGFkZHNydmMiIHRpdGxlPSJBZGRpbmcgYSBzZXJ2aWNlIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0icG9ydHMiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RhZGRwb3J0Lmh0bWwjdGFkZHBvcnQiIHRpdGxlPSJBZGRpbmcgYSBwb3J0IHRvIGEgc2VydmljZSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InNldHRpbmcgcG9ydCB0eXBlcyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdHNldHBydHQuaHRtbCN0c2V0cHJ0dCIgdGl0bGU9IlNldHRpbmcgYSBwb3J0IHR5cGUiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJiaW5kaW5ncyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdHNldGJpbmQuaHRtbCN0c2V0YmluZCIgdGl0bGU9IlNldHRpbmcgYSBiaW5kaW5nIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0ib3BlcmF0aW9ucyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGFkZG9wZXIuaHRtbCN0YWRkb3BlciIgdGl0bGU9IkFkZGluZyBhbiBvcGVyYXRpb24iLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJtZXNzYWdlcyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGFkZG1lc3MuaHRtbCN0YWRkbWVzcyIgdGl0bGU9IkFkZGluZyBhIG1lc3NhZ2UiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJtZXNzYWdlIHBhcnRzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90YWRkcGFydC5odG1sI3RhZGRwYXJ0IiB0aXRsZT0iQWRkaW5nIGEgcGFydCB0byBhIG1lc3NhZ2UiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJpbXBvcnQgc3RhdGVtZW50cyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGNydGltcHQuaHRtbCN0Y3J0aW1wdCIgdGl0bGU9IkNyZWF0aW5nIGFuIGltcG9ydCBzdGF0ZW1lbnQiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJ0eXBlcyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGNydHR5cGUuaHRtbCN0Y3J0dHlwZSIgdGl0bGU9IkNyZWF0aW5nIGEgbmV3IHR5cGUgZm9yIHlvdXIgV1NETCBmaWxlIi8+Ci0gICAgPC9lbnRyeT4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9IldlYiBzZXJ2aWNlcyI+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImltcG9ydGluZyBXU0RMIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90aW1wd3NkbC5odG1sI3RpbXB3c2RsIiB0aXRsZT0iSW1wb3J0aW5nIGEgV1NETCBmaWxlIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iY3JlYXRpbmcgV1NETCI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGNydHdzZGwuaHRtbCN0Y3J0d3NkbCIgdGl0bGU9IkNyZWF0aW5nIGEgbmV3IFdTREwgZmlsZSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImVkaXRpbmcgV1NETCI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGVkdHdzZGwuaHRtbCN0ZWR0d3NkbCIgdGl0bGU9IkVkaXRpbmcgV1NETCBmaWxlcyIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImFkZGluZyBzZXJ2aWNlcyB0byBXU0RMIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90YWRkc3J2Yy5odG1sI3RhZGRzcnZjIiB0aXRsZT0iQWRkaW5nIGEgc2VydmljZSIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImFkZGluZyBXU0RMIHBvcnRzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90YWRkcG9ydC5odG1sI3RhZGRwb3J0IiB0aXRsZT0iQWRkaW5nIGEgcG9ydCB0byBhIHNlcnZpY2UiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJzZXR0aW5nIHBvcnQgdHlwZXMiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RzZXRwcnR0Lmh0bWwjdHNldHBydHQiIHRpdGxlPSJTZXR0aW5nIGEgcG9ydCB0eXBlIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iYmluZGluZ3MiPgotICAgICAgPGVudHJ5IGtleXdvcmQ9ImNyZWF0aW5nIj4KLSAgICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RzZXRiaW5kLmh0bWwjdHNldGJpbmQiIHRpdGxlPSJTZXR0aW5nIGEgYmluZGluZyIvPgotICAgICAgPC9lbnRyeT4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJzZXR0aW5nIFdTREwgYmluZGluZ3MiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RzZXRiaW5kLmh0bWwjdHNldGJpbmQiIHRpdGxlPSJTZXR0aW5nIGEgYmluZGluZyIvPgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImFkZGluZyBXU0RMIG9wZXJhdGlvbnMiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RhZGRvcGVyLmh0bWwjdGFkZG9wZXIiIHRpdGxlPSJBZGRpbmcgYW4gb3BlcmF0aW9uIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iYWRkaW5nIFdTREwgbWVzc2FnZXMiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RhZGRtZXNzLmh0bWwjdGFkZG1lc3MiIHRpdGxlPSJBZGRpbmcgYSBtZXNzYWdlIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iYWRkaW5nIFdTREwgbWVzc2FnZSBwYXJ0cyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGFkZHBhcnQuaHRtbCN0YWRkcGFydCIgdGl0bGU9IkFkZGluZyBhIHBhcnQgdG8gYSBtZXNzYWdlIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iYWRkaW5nIFdTREwgaW1wb3J0IHN0YXRlbWVudHMiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3RjcnRpbXB0Lmh0bWwjdGNydGltcHQiIHRpdGxlPSJDcmVhdGluZyBhbiBpbXBvcnQgc3RhdGVtZW50Ii8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0iY3JlYXRpbmcgV1NETCB0eXBlcyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdGNydHR5cGUuaHRtbCN0Y3J0dHlwZSIgdGl0bGU9IkNyZWF0aW5nIGEgbmV3IHR5cGUgZm9yIHlvdXIgV1NETCBmaWxlIi8+Ci0gICAgPC9lbnRyeT4KLSAgPC9lbnRyeT4KLTwvaW5kZXg+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9wbHVnaW4ucHJvcGVydGllcyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyMTY0MjEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIE5MU19NRVNTQUdFRk9STUFUX1ZBUiAKLSMgTkxTX0VOQ09ESU5HPVVURi04IAotCi1wbHVnaW5OYW1lICAgICA9IFdTREwgRWRpdG9yIERvY3VtZW50YXRpb24KLXBsdWdpblByb3ZpZGVyID0gRWNsaXBzZS5vcmcKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvcGx1Z2luLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTdlY2U3NC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotPD9OTFMgVFlQRT0ib3JnLmVjbGlwc2UuaGVscC50b2MiPz4KLTwhLS0gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAtLT4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLTwhLS0gVGhpcyBpcyB0aGUgcGx1Z2luIGZvciBkZWNsYXJpbmcgdGhlIGhlbHAgICAgICAgICAtLT4KLTwhLS0gY29udHJpYnV0aW9ucyBmb3IgdXNpbmcgdGhlIHRvb2wuICAgICAgICAgICAgICAgICAtLT4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQotPHBsdWdpbj4KLQotPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC50b2MiPgotICAgIDx0b2MgZmlsZT0id3N3c2RsZWRpdG9ydF90b2MueG1sIi8+ICAgCi0gICAgPHRvYyBmaWxlPSJ3c3dzZGxlZGl0b3JjX3RvYy54bWwiLz4KLSAgICAgICA8aW5kZXggcGF0aD0iaW5kZXgvIi8+Ci0gICAgICAKLTwvZXh0ZW5zaW9uPgotPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC5pbmRleCI+Ci0gICAgICA8aW5kZXggZmlsZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXJpbmRleC54bWwiLz4KLTwvZXh0ZW5zaW9uPgotCi0KLTwvcGx1Z2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZG1lc3MuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZG1lc3MuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWYzNDhhMC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRtZXNzLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICJ0YXNrLmR0ZCI+Ci08dGFzayBpZD0idGFkZG1lc3MiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+QWRkaW5nIGEgbWVzc2FnZTwvdGl0bGU+Ci08c2hvcnRkZXNjPk1lc3NhZ2VzIHJlcHJlc2VudCBhbiBhYnN0cmFjdCBkZWZpbml0aW9uIG9mIHRoZSBkYXRhIGJlaW5nIHRyYW5zbWl0dGVkLgotQSBtZXNzYWdlIGNvbnNpc3RzIG9mIGxvZ2ljYWwgcGFydHMsIGVhY2ggb2Ygd2hpY2ggaXMgYXNzb2NpYXRlZCB3aXRoIGEgZGVmaW5pdGlvbgotd2l0aGluIHNvbWUgdHlwZSBzeXN0ZW0uIFdTREwgbWVzc2FnZXMgYXJlIHRvcCBsZXZlbCBvYmplY3RzIHRoYXQgY2FuIGJlIHJlZmVyZW5jZWQKLWJ5IGFuIG9wZXJhdGlvbidzIGlucHV0LCBvdXRwdXQgYW5kIGZhdWx0IGVsZW1lbnRzICh3aXRoaW4gYSBwb3J0IHR5cGUpLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPmFkZGluZyBXU0RMIG1lc3NhZ2VzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPldTREw8aW5kZXh0ZXJtPm1lc3NhZ2VzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPllvdSBjYW4gY3JlYXRlIGEgbWVzc2FnZSB1c2luZyB0aGUgT3V0bGluZSB2aWV3IGJ5IHJpZ2h0LWNsaWNraW5nCi10aGUgPGI+TWVzc2FnZXM8L2I+IGZvbGRlciBhbmQgY2xpY2tpbmcgPGI+QWRkIE1lc3NhZ2U8L2I+LjwvcD48cD5JZiB5b3Ugd2FudAotdG8gY3JlYXRlIGEgbmV3IG1lc3NhZ2UgZm9yIHlvdXIgaW5wdXQsIG91dHB1dCwgb3IgZmF1bHQgZWxlbWVudCwgZm9sbG93IHRoZXNlCi1zdGVwczogIDwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPkluIHRoZSBEZXNpZ24gdmlldywgcmlnaHQtY2xpY2sgeW91ciBpbnB1dCwgb3V0cHV0LCBvciBmYXVsdCBlbGVtZW50Ci1hbmQgY2xpY2sgIDxiPlNldCBNZXNzYWdlID4gTmV3IE1lc3NhZ2UuPC9iPjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+VHlwZSB0aGUgbmFtZSBvZiB0aGUgbWVzc2FnZSBpbiBkaWFsb2cuPC9jbWQ+PGluZm8+VGhpcyBuYW1lIHNob3VsZAotYmUgYSB1bmlxdWUgYW1vbmdzdCBhbGwgbWVzc2FnZXMgZGVmaW5lZCB3aXRoaW4gdGhlIGVuY2xvc2luZyBXU0RMIGRvY3VtZW50LgotQ2xpY2sgPGI+T0s8L2I+LjwvaW5mbz48L3N0ZXA+Ci08c3RlcD48Y21kPlRoZSBuZXcgbWVzc2FnZSB3aWxsIGFwcGVhciBpbiB0aGUgRGVzaWduIHZpZXcgd2l0aGluIHRoZSBwb3J0Ci10eXBlLjwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08cmVzdWx0PjxwPiA8Yj5Ob3RlPC9iPjogTWVzc2FnZXMgYXJlIHJlZmVyZW5jZWQgd2l0aGluIGEgcG9ydCB0eXBlIChzcGVjaWZpY2FsbHkKLWJ5IGFuIG9wZXJhdGlvbidzIGlucHV0LCBvdXRwdXQgYW5kIGZhdWx0IG9iamVjdHMpLiBUaGUgaW5wdXQsIG91dHB1dCBhbmQKLWZhdWx0IG9iamVjdHMgd2l0aGluIGEgYmluZGluZyBkbyBub3QgcmVmZXJlbmNlIG1lc3NhZ2VzLiBIZW5jZSB5b3UgY2Fubm90Ci1jcmVhdGUgYSBuZXcgbWVzc2FnZSBieSByaWdodCBjbGlja2luZyBvbiBhIGlucHV0LCBvdXRwdXQsIG9yIGZhdWx0IHdpdGhpbgotYSBiaW5kaW5nICh0aGVzZSBhcmUgYWxzbyBrbm93biBhcyBiaW5kaW5nIGlucHV0LCBiaW5kaW5nIG91dHB1dCBhbmQgYmluZGluZwotZmF1bHRzKS48L3A+PHA+IDxiPlRpcDwvYj46IFlvdSBjYW4gYWxzbyBjcmVhdGUgYSBuZXcgbWVzc2FnZSBmb3IgeW91ciBpbnB1dCwKLW91dHB1dCwgb3IgZmF1bHQgZWxlbWVudCB1c2luZyB0aGUgT3V0bGluZSB2aWV3LiBVbmRlciB0aGUgIDxiPlBvcnQgVHlwZXM8L2I+IGZvbGRlciwKLXJpZ2h0LWNsaWNrIHlvdXIgZWxlbWVudCBhbmQgY2xpY2sgIDxiPlNldCBNZXNzYWdlID4gQWRkIE1lc3NhZ2U8L2I+LiBZb3VyCi1tZXNzYWdlIHdpbGwgYXBwZWFyIGluIHRoZSBPdXRsaW5lIHZpZXcgdW5kZXIgdGhlICA8Yj5NZXNzYWdlczwvYj4gZm9sZGVyLjwvcD48cD5JZgoteW91IHdhbnQgdG8gcmV1c2UgYSBtZXNzYWdlIGZvciB5b3VyIGlucHV0LCBvdXRwdXQsIG9yIGZhdWx0IGVsZW1lbnQsIGZvbGxvdwotdGhlc2Ugc3RlcHM6PC9wPjxvbD4KLTxsaT5JbiB0aGUgRGVzaWduIHZpZXcsIHJpZ2h0LWNsaWNrIHlvdXIgaW5wdXQsIG91dHB1dCwgb3IgZmF1bHQgZWxlbWVudCBhbmQKLWNsaWNrICA8Yj5TZXQgTWVzc2FnZSA+IEV4aXN0aW5nIE1lc3NhZ2UuPC9iPjwvbGk+Ci08bGk+SW4gdGhlIDxiPk5hbWU8L2I+IGZpZWxkLCB0eXBlIGEgc2VhcmNoIHN0cmluZyB0byBmaWx0ZXIgdGhlIGxpc3Qgb3IgbGVhdmUKLXRoZSBmaWVsZCBibGFuayB0byB2aWV3IGFsbC48L2xpPgotPGxpPllvdSBjYW4gY2hhbmdlIHRoZSBzY29wZSBvZiB0aGUgbGlzdCBieSBzZWxlY3Rpbmcgb25lIG9mIHRoZSBmb2xsb3dpbmcKLW9wdGlvbnM6PHVsPgotPGxpPjxiPldvcmtzcGFjZTwvYj4uIExpc3RzIHRoZSBtZXNzYWdlcyBhdmFpbGFibGUgaW4geW91ciB3b3Jrc3BhY2UuPC9saT4KLTxsaT48Yj5FbmNsb3NpbmcgUHJvamVjdDwvYj4uIExpc3RzIHRoZSBtZXNzYWdlcyBhdmFpbGFibGUgaW4gdGhlIHByb2plY3QKLXRoYXQgY29udGFpbnMgeW91ciBmaWxlLjwvbGk+Ci08bGk+PGI+Q3VycmVudCBSZXNvdXJjZTwvYj4uIExpc3RzIHRoZSBtZXNzYWdlcyBhdmFpbGFibGUgaW4geW91ciBjdXJyZW50Ci1maWxlLjwvbGk+Ci08bGk+PGI+V29ya2luZyBTZXRzPC9iPi4gTGlzdHMgdGhlIG1lc3NhZ2VzIGF2YWlsYWJsZSBpbiBhIHNwZWNpZmllZCBzZXQgb2YKLWZpbGVzLiBUbyBzcGVjaWZ5IGEgd29ya2luZyBzZXQsIGNsaWNrIDxiPkNob29zZTwvYj4uIFlvdSBjYW4gc2VsZWN0IGZpbGVzCi1mcm9tIGFuIGV4aXN0aW5nIHdvcmtpbmcgc2V0IG9yIGNyZWF0ZSBhIG5ldyB3b3JraW5nIHNldC4gT25jZSB5b3UgaGF2ZSBzZWxlY3RlZAotdGhlIGZpbGVzLCBjbGljayA8Yj5PSzwvYj4uPC9saT4KLTwvdWw+PC9saT4KLTxsaT5UaGUgZXhpc3RpbmcgbWVzc2FnZXMgd2lsbCBiZSBsaXN0ZWQuIFNlbGVjdCBvbmUgYW5kIGNsaWNrICA8Yj5PSzwvYj4uPC9saT4KLTwvb2w+PHA+SWYgeW91IHdhbnQgdG8gaW1wb3J0IGFuIGV4aXN0aW5nIG1lc3NhZ2UgZm9yIHlvdXIgaW5wdXQsIG91dHB1dCwKLW9yIGZhdWx0IGVsZW1lbnQsIGZvbGxvdyB0aGVzZSBzdGVwczo8L3A+PG9sPgotPGxpPkluIHRoZSBEZXNpZ24gdmlldywgcmlnaHQtY2xpY2sgeW91ciBpbnB1dCwgb3V0cHV0LCBvciBmYXVsdCBlbGVtZW50IGFuZAotY2xpY2sgIDxiPlNldCBNZXNzYWdlID4gRXhpc3RpbmcgTWVzc2FnZS48L2I+PC9saT4KLTxsaT5JbiB0aGUgPGI+TmFtZTwvYj4gZmllbGQsIHR5cGUgYSBzZWFyY2ggc3RyaW5nIHRvIGZpbHRlciB0aGUgbGlzdCBvciBsZWF2ZQotdGhlIGZpZWxkIGJsYW5rIHRvIHZpZXcgYWxsLjwvbGk+Ci08bGk+WW91IGNhbiBpbXBvcnQgYSBtZXNzYWdlIGJ5IHNlbGVjdGluZyBvbmUgb2YgdGhlIGZvbGxvd2luZyBvcHRpb25zOjx1bD4KLTxsaT48Yj5Xb3Jrc3BhY2U8L2I+LiBMaXN0cyB0aGUgbWVzc2FnZXMgYXZhaWxhYmxlIGluIHlvdXIgd29ya3NwYWNlLjwvbGk+Ci08bGk+PGI+RW5jbG9zaW5nIFByb2plY3Q8L2I+LiBMaXN0cyB0aGUgbWVzc2FnZXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0Ci10aGF0IGNvbnRhaW5zIHlvdXIgZmlsZS48L2xpPgotPGxpPjxiPldvcmtpbmcgU2V0czwvYj4uIExpc3RzIHRoZSBtZXNzYWdlcyBhdmFpbGFibGUgaW4gYSBzcGVjaWZpZWQgc2V0IG9mCi1maWxlcy4gVG8gc3BlY2lmeSBhIHdvcmtpbmcgc2V0LCBjbGljayA8Yj5DaG9vc2U8L2I+LiBZb3UgY2FuIHNlbGVjdCBmaWxlcwotZnJvbSBhbiBleGlzdGluZyB3b3JraW5nIHNldCBvciBjcmVhdGUgYSBuZXcgd29ya2luZyBzZXQuIE9uY2UgeW91IGhhdmUgc2VsZWN0ZWQKLXRoZSBmaWxlcywgY2xpY2sgPGI+T0s8L2I+LjwvbGk+Ci08L3VsPjwvbGk+Ci08bGk+VGhlIG1lc3NhZ2VzIHdpbGwgYmUgbGlzdGVkLiBTZWxlY3Qgb25lIGFuZCBjbGljayA8Yj5PSzwvYj4uPC9saT4KLTwvb2w+PHA+WW91IGNhbiBub3cgYWRkIHBhcnRzIHRvIHlvdXIgbWVzc2FnZS4gUGFydHMgYXJlIGEgZmxleGlibGUgbWVjaGFuaXNtCi1mb3IgZGVzY3JpYmluZyB0aGUgbG9naWNhbCBhYnN0cmFjdCBjb250ZW50IG9mIGEgbWVzc2FnZS48L3A+PC9yZXN1bHQ+Ci08L3Rhc2tib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgY29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vY29uY2VwdHMvY3dzZGxlZC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgdGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0idGNydHdzZGwuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08bGluayBocmVmPSJ0ZWR0d3NkbC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L3Rhc2s+Ci08P1B1YiAqMDAwMDAwNDY3Nj8+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRtZXNzLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRtZXNzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwMmUyMjEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkbWVzcy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA2IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IkFkZGluZyBhIG1lc3NhZ2UiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iTWVzc2FnZXMgcmVwcmVzZW50IGFuIGFic3RyYWN0IGRlZmluaXRpb24gb2YgdGhlIGRhdGEgYmVpbmcgdHJhbnNtaXR0ZWQuIEEgbWVzc2FnZSBjb25zaXN0cyBvZiBsb2dpY2FsIHBhcnRzLCBlYWNoIG9mIHdoaWNoIGlzIGFzc29jaWF0ZWQgd2l0aCBhIGRlZmluaXRpb24gd2l0aGluIHNvbWUgdHlwZSBzeXN0ZW0uIFdTREwgbWVzc2FnZXMgYXJlIHRvcCBsZXZlbCBvYmplY3RzIHRoYXQgY2FuIGJlIHJlZmVyZW5jZWQgYnkgYW4gb3BlcmF0aW9uJ3MgaW5wdXQsIG91dHB1dCBhbmQgZmF1bHQgZWxlbWVudHMgKHdpdGhpbiBhIHBvcnQgdHlwZSkuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9Ik1lc3NhZ2VzIHJlcHJlc2VudCBhbiBhYnN0cmFjdCBkZWZpbml0aW9uIG9mIHRoZSBkYXRhIGJlaW5nIHRyYW5zbWl0dGVkLiBBIG1lc3NhZ2UgY29uc2lzdHMgb2YgbG9naWNhbCBwYXJ0cywgZWFjaCBvZiB3aGljaCBpcyBhc3NvY2lhdGVkIHdpdGggYSBkZWZpbml0aW9uIHdpdGhpbiBzb21lIHR5cGUgc3lzdGVtLiBXU0RMIG1lc3NhZ2VzIGFyZSB0b3AgbGV2ZWwgb2JqZWN0cyB0aGF0IGNhbiBiZSByZWZlcmVuY2VkIGJ5IGFuIG9wZXJhdGlvbidzIGlucHV0LCBvdXRwdXQgYW5kIGZhdWx0IGVsZW1lbnRzICh3aXRoaW4gYSBwb3J0IHR5cGUpLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IldTREwsIGFkZGluZyBtZXNzYWdlcywgV2ViIHNlcnZpY2VzLCBhZGRpbmcgV1NETCBtZXNzYWdlcyIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IldTREwsIGFkZGluZyBtZXNzYWdlcywgV2ViIHNlcnZpY2VzLCBhZGRpbmcgV1NETCBtZXNzYWdlcyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idGNydHdzZGwuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idGVkdHdzZGwuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0YWRkbWVzcyIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkFkZGluZyBhIG1lc3NhZ2U8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InRhZGRtZXNzIj48YSBuYW1lPSJ0YWRkbWVzcyI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+QWRkaW5nIGEgbWVzc2FnZTwvaDE+Ci0KLQotCi08ZGl2PjxwPk1lc3NhZ2VzIHJlcHJlc2VudCBhbiBhYnN0cmFjdCBkZWZpbml0aW9uIG9mIHRoZSBkYXRhIGJlaW5nIHRyYW5zbWl0dGVkLgotQSBtZXNzYWdlIGNvbnNpc3RzIG9mIGxvZ2ljYWwgcGFydHMsIGVhY2ggb2Ygd2hpY2ggaXMgYXNzb2NpYXRlZCB3aXRoIGEgZGVmaW5pdGlvbgotd2l0aGluIHNvbWUgdHlwZSBzeXN0ZW0uIFdTREwgbWVzc2FnZXMgYXJlIHRvcCBsZXZlbCBvYmplY3RzIHRoYXQgY2FuIGJlIHJlZmVyZW5jZWQKLWJ5IGFuIG9wZXJhdGlvbidzIGlucHV0LCBvdXRwdXQgYW5kIGZhdWx0IGVsZW1lbnRzICh3aXRoaW4gYSBwb3J0IHR5cGUpLjwvcD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+WW91IGNhbiBjcmVhdGUgYSBtZXNzYWdlIHVzaW5nIHRoZSBPdXRsaW5lIHZpZXcgYnkgcmlnaHQtY2xpY2tpbmcKLXRoZSA8c3Ryb25nPk1lc3NhZ2VzPC9zdHJvbmc+IGZvbGRlciBhbmQgY2xpY2tpbmcgPHN0cm9uZz5BZGQgTWVzc2FnZTwvc3Ryb25nPi48L3A+Ci08cD5JZiB5b3Ugd2FudAotdG8gY3JlYXRlIGEgbmV3IG1lc3NhZ2UgZm9yIHlvdXIgaW5wdXQsIG91dHB1dCwgb3IgZmF1bHQgZWxlbWVudCwgZm9sbG93IHRoZXNlCi1zdGVwczogIDwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSBEZXNpZ24gdmlldywgcmlnaHQtY2xpY2sgeW91ciBpbnB1dCwgb3V0cHV0LCBvciBmYXVsdCBlbGVtZW50Ci1hbmQgY2xpY2sgIDxzdHJvbmc+U2V0IE1lc3NhZ2UgJmd0OyBOZXcgTWVzc2FnZS48L3N0cm9uZz48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5UeXBlIHRoZSBuYW1lIG9mIHRoZSBtZXNzYWdlIGluIGRpYWxvZy48L3NwYW4+IFRoaXMgbmFtZSBzaG91bGQKLWJlIGEgdW5pcXVlIGFtb25nc3QgYWxsIG1lc3NhZ2VzIGRlZmluZWQgd2l0aGluIHRoZSBlbmNsb3NpbmcgV1NETCBkb2N1bWVudC4KLUNsaWNrIDxzdHJvbmc+T0s8L3N0cm9uZz4uPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5UaGUgbmV3IG1lc3NhZ2Ugd2lsbCBhcHBlYXIgaW4gdGhlIERlc2lnbiB2aWV3IHdpdGhpbiB0aGUgcG9ydAotdHlwZS48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+IDxzdHJvbmc+Tm90ZTwvc3Ryb25nPjogTWVzc2FnZXMgYXJlIHJlZmVyZW5jZWQgd2l0aGluIGEgcG9ydCB0eXBlIChzcGVjaWZpY2FsbHkKLWJ5IGFuIG9wZXJhdGlvbidzIGlucHV0LCBvdXRwdXQgYW5kIGZhdWx0IG9iamVjdHMpLiBUaGUgaW5wdXQsIG91dHB1dCBhbmQKLWZhdWx0IG9iamVjdHMgd2l0aGluIGEgYmluZGluZyBkbyBub3QgcmVmZXJlbmNlIG1lc3NhZ2VzLiBIZW5jZSB5b3UgY2Fubm90Ci1jcmVhdGUgYSBuZXcgbWVzc2FnZSBieSByaWdodCBjbGlja2luZyBvbiBhIGlucHV0LCBvdXRwdXQsIG9yIGZhdWx0IHdpdGhpbgotYSBiaW5kaW5nICh0aGVzZSBhcmUgYWxzbyBrbm93biBhcyBiaW5kaW5nIGlucHV0LCBiaW5kaW5nIG91dHB1dCBhbmQgYmluZGluZwotZmF1bHRzKS48L3A+Ci08cD4gPHN0cm9uZz5UaXA8L3N0cm9uZz46IFlvdSBjYW4gYWxzbyBjcmVhdGUgYSBuZXcgbWVzc2FnZSBmb3IgeW91ciBpbnB1dCwKLW91dHB1dCwgb3IgZmF1bHQgZWxlbWVudCB1c2luZyB0aGUgT3V0bGluZSB2aWV3LiBVbmRlciB0aGUgIDxzdHJvbmc+UG9ydCBUeXBlczwvc3Ryb25nPiBmb2xkZXIsCi1yaWdodC1jbGljayB5b3VyIGVsZW1lbnQgYW5kIGNsaWNrICA8c3Ryb25nPlNldCBNZXNzYWdlICZndDsgQWRkIE1lc3NhZ2U8L3N0cm9uZz4uIFlvdXIKLW1lc3NhZ2Ugd2lsbCBhcHBlYXIgaW4gdGhlIE91dGxpbmUgdmlldyB1bmRlciB0aGUgIDxzdHJvbmc+TWVzc2FnZXM8L3N0cm9uZz4gZm9sZGVyLjwvcD4KLTxwPklmCi15b3Ugd2FudCB0byByZXVzZSBhIG1lc3NhZ2UgZm9yIHlvdXIgaW5wdXQsIG91dHB1dCwgb3IgZmF1bHQgZWxlbWVudCwgZm9sbG93Ci10aGVzZSBzdGVwczo8L3A+Ci08b2w+Ci08bGk+SW4gdGhlIERlc2lnbiB2aWV3LCByaWdodC1jbGljayB5b3VyIGlucHV0LCBvdXRwdXQsIG9yIGZhdWx0IGVsZW1lbnQgYW5kCi1jbGljayAgPHN0cm9uZz5TZXQgTWVzc2FnZSAmZ3Q7IEV4aXN0aW5nIE1lc3NhZ2UuPC9zdHJvbmc+PC9saT4KLQotPGxpPkluIHRoZSA8c3Ryb25nPk5hbWU8L3N0cm9uZz4gZmllbGQsIHR5cGUgYSBzZWFyY2ggc3RyaW5nIHRvIGZpbHRlciB0aGUgbGlzdCBvciBsZWF2ZQotdGhlIGZpZWxkIGJsYW5rIHRvIHZpZXcgYWxsLjwvbGk+Ci0KLTxsaT5Zb3UgY2FuIGNoYW5nZSB0aGUgc2NvcGUgb2YgdGhlIGxpc3QgYnkgc2VsZWN0aW5nIG9uZSBvZiB0aGUgZm9sbG93aW5nCi1vcHRpb25zOjx1bD4KLTxsaT48c3Ryb25nPldvcmtzcGFjZTwvc3Ryb25nPi4gTGlzdHMgdGhlIG1lc3NhZ2VzIGF2YWlsYWJsZSBpbiB5b3VyIHdvcmtzcGFjZS48L2xpPgotCi08bGk+PHN0cm9uZz5FbmNsb3NpbmcgUHJvamVjdDwvc3Ryb25nPi4gTGlzdHMgdGhlIG1lc3NhZ2VzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdAotdGhhdCBjb250YWlucyB5b3VyIGZpbGUuPC9saT4KLQotPGxpPjxzdHJvbmc+Q3VycmVudCBSZXNvdXJjZTwvc3Ryb25nPi4gTGlzdHMgdGhlIG1lc3NhZ2VzIGF2YWlsYWJsZSBpbiB5b3VyIGN1cnJlbnQKLWZpbGUuPC9saT4KLQotPGxpPjxzdHJvbmc+V29ya2luZyBTZXRzPC9zdHJvbmc+LiBMaXN0cyB0aGUgbWVzc2FnZXMgYXZhaWxhYmxlIGluIGEgc3BlY2lmaWVkIHNldCBvZgotZmlsZXMuIFRvIHNwZWNpZnkgYSB3b3JraW5nIHNldCwgY2xpY2sgPHN0cm9uZz5DaG9vc2U8L3N0cm9uZz4uIFlvdSBjYW4gc2VsZWN0IGZpbGVzCi1mcm9tIGFuIGV4aXN0aW5nIHdvcmtpbmcgc2V0IG9yIGNyZWF0ZSBhIG5ldyB3b3JraW5nIHNldC4gT25jZSB5b3UgaGF2ZSBzZWxlY3RlZAotdGhlIGZpbGVzLCBjbGljayA8c3Ryb25nPk9LPC9zdHJvbmc+LjwvbGk+Ci0KLTwvdWw+Ci08L2xpPgotCi08bGk+VGhlIGV4aXN0aW5nIG1lc3NhZ2VzIHdpbGwgYmUgbGlzdGVkLiBTZWxlY3Qgb25lIGFuZCBjbGljayAgPHN0cm9uZz5PSzwvc3Ryb25nPi48L2xpPgotCi08L29sPgotPHA+SWYgeW91IHdhbnQgdG8gaW1wb3J0IGFuIGV4aXN0aW5nIG1lc3NhZ2UgZm9yIHlvdXIgaW5wdXQsIG91dHB1dCwKLW9yIGZhdWx0IGVsZW1lbnQsIGZvbGxvdyB0aGVzZSBzdGVwczo8L3A+Ci08b2w+Ci08bGk+SW4gdGhlIERlc2lnbiB2aWV3LCByaWdodC1jbGljayB5b3VyIGlucHV0LCBvdXRwdXQsIG9yIGZhdWx0IGVsZW1lbnQgYW5kCi1jbGljayAgPHN0cm9uZz5TZXQgTWVzc2FnZSAmZ3Q7IEV4aXN0aW5nIE1lc3NhZ2UuPC9zdHJvbmc+PC9saT4KLQotPGxpPkluIHRoZSA8c3Ryb25nPk5hbWU8L3N0cm9uZz4gZmllbGQsIHR5cGUgYSBzZWFyY2ggc3RyaW5nIHRvIGZpbHRlciB0aGUgbGlzdCBvciBsZWF2ZQotdGhlIGZpZWxkIGJsYW5rIHRvIHZpZXcgYWxsLjwvbGk+Ci0KLTxsaT5Zb3UgY2FuIGltcG9ydCBhIG1lc3NhZ2UgYnkgc2VsZWN0aW5nIG9uZSBvZiB0aGUgZm9sbG93aW5nIG9wdGlvbnM6PHVsPgotPGxpPjxzdHJvbmc+V29ya3NwYWNlPC9zdHJvbmc+LiBMaXN0cyB0aGUgbWVzc2FnZXMgYXZhaWxhYmxlIGluIHlvdXIgd29ya3NwYWNlLjwvbGk+Ci0KLTxsaT48c3Ryb25nPkVuY2xvc2luZyBQcm9qZWN0PC9zdHJvbmc+LiBMaXN0cyB0aGUgbWVzc2FnZXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0Ci10aGF0IGNvbnRhaW5zIHlvdXIgZmlsZS48L2xpPgotCi08bGk+PHN0cm9uZz5Xb3JraW5nIFNldHM8L3N0cm9uZz4uIExpc3RzIHRoZSBtZXNzYWdlcyBhdmFpbGFibGUgaW4gYSBzcGVjaWZpZWQgc2V0IG9mCi1maWxlcy4gVG8gc3BlY2lmeSBhIHdvcmtpbmcgc2V0LCBjbGljayA8c3Ryb25nPkNob29zZTwvc3Ryb25nPi4gWW91IGNhbiBzZWxlY3QgZmlsZXMKLWZyb20gYW4gZXhpc3Rpbmcgd29ya2luZyBzZXQgb3IgY3JlYXRlIGEgbmV3IHdvcmtpbmcgc2V0LiBPbmNlIHlvdSBoYXZlIHNlbGVjdGVkCi10aGUgZmlsZXMsIGNsaWNrIDxzdHJvbmc+T0s8L3N0cm9uZz4uPC9saT4KLQotPC91bD4KLTwvbGk+Ci0KLTxsaT5UaGUgbWVzc2FnZXMgd2lsbCBiZSBsaXN0ZWQuIFNlbGVjdCBvbmUgYW5kIGNsaWNrIDxzdHJvbmc+T0s8L3N0cm9uZz4uPC9saT4KLQotPC9vbD4KLTxwPllvdSBjYW4gbm93IGFkZCBwYXJ0cyB0byB5b3VyIG1lc3NhZ2UuIFBhcnRzIGFyZSBhIGZsZXhpYmxlIG1lY2hhbmlzbQotZm9yIGRlc2NyaWJpbmcgdGhlIGxvZ2ljYWwgYWJzdHJhY3QgY29udGVudCBvZiBhIG1lc3NhZ2UuPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBjb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuaHRtbCIgdGl0bGU9IlRoZSBXU0RMIGVkaXRvciBhbGxvd3MgeW91IHRvIGVhc2lseSBhbmQgZ3JhcGhpY2FsbHkgY3JlYXRlLCBtb2RpZnksIHZpZXcsIGFuZCB2YWxpZGF0ZSBXU0RMIGZpbGVzLiI+RWRpdGluZyBXU0RMIGZpbGVzIHdpdGggdGhlIFdTREwgRWRpdG9yPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIHRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0idGNydHdzZGwuaHRtbCIgdGl0bGU9IllvdSBjYW4gY3JlYXRlIGEgbmV3LCBlbXB0eSBXU0RMIGZpbGUsIHRoZW4gZWRpdCBpdCB1c2luZyB0aGUgV1NETCBlZGl0b3IuIj5DcmVhdGluZyBhIG5ldyBXU0RMIGZpbGU8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRlZHR3c2RsLmh0bWwiIHRpdGxlPSJPbmNlIHlvdSBoYXZlIGNyZWF0ZWQgYSBXU0RMIGZpbGUsIHlvdSBjYW4gZWRpdCBpdCBpbiB0aGUgV1NETCBlZGl0b3IuIFlvdSBjYW4gYWxzbyBpbXBvcnQgV1NETCBmaWxlcyB5b3UgaGF2ZSBjcmVhdGVkIGludG8gdGhlIHdvcmtiZW5jaCBhbmQgZWRpdCB0aGVtIGluIHRoZSBXU0RMIGVkaXRvci4iPkVkaXRpbmcgV1NETCBmaWxlczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkb3Blci5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkb3Blci5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTY5MWFmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZG9wZXIuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iCi0gInRhc2suZHRkIj4KLTx0YXNrIGlkPSJ0YWRkb3BlciIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5BZGRpbmcgYW4gb3BlcmF0aW9uPC90aXRsZT4KLTxzaG9ydGRlc2M+QW4gb3BlcmF0aW9uIG5hbWVzIHRoZSBvcGVyYXRpb24gYW5kIGxpc3RzIHRoZSBleHBlY3RlZCBpbnB1dHMKLWFuZCBvdXRwdXRzLiBUaGUgb3BlcmF0aW9uIGVsZW1lbnQgbWF5IGFsc28gY29udGFpbiBhIGZhdWx0IHN1Yi1lbGVtZW50IHRoYXQKLWRlc2NyaWJlcyBhbnkgZXJyb3IgZGF0YSB0aGUgb3BlcmF0aW9uIG1heSByZXR1cm4uPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+YWRkaW5nIFdTREwgb3BlcmF0aW9uczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPGluZGV4dGVybT5XU0RMPGluZGV4dGVybT5vcGVyYXRpb25zPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxjb250ZXh0PlVzaW5nIHRoZXNlLCB5b3UgY2FuIGRlY2xhcmUgZm91ciB0cmFuc21pc3Npb24gcHJpbWl0aXZlcyB0aGF0IGFuCi1lbmRwb2ludCBjYW4gc3VwcG9ydDo8dWw+Ci08bGk+IDxiPk9uZS13YXk8L2I+LiBUaGUgZW5kcG9pbnQgcmVjZWl2ZXMgYSBtZXNzYWdlLjwvbGk+Ci08bGk+IDxiPlJlcXVlc3QtcmVzcG9uc2U8L2I+LiBUaGUgZW5kcG9pbnQgcmVjZWl2ZXMgYSBtZXNzYWdlLCBhbmQgc2VuZHMgYQotY29ycmVsYXRlZCBtZXNzYWdlLjwvbGk+Ci08bGk+IDxiPlNvbGljaXQtcmVzcG9uc2U8L2I+LiBUaGUgZW5kcG9pbnQgc2VuZHMgYSBtZXNzYWdlLCBhbmQgcmVjZWl2ZXMgYQotY29ycmVsYXRlZCBtZXNzYWdlLjwvbGk+Ci08bGk+IDxiPk5vdGlmaWNhdGlvbjwvYj4uIFRoZSBlbmRwb2ludCBzZW5kcyBhIG1lc3NhZ2UuPC9saT4KLTwvdWw+PHA+WW91IGNhbiBhZGQgYW4gb3BlcmF0aW9uIHRvIGEgcG9ydCB0eXBlIG9yIGEgcG9ydCBiaW5kaW5nLjwvcD48cD5UbwotYWRkIGFuIG9wZXJhdGlvbiB0byBhIHBvcnQgdHlwZSwgZm9sbG93IHRoZXNlIHN0ZXBzOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPkluIHRoZSBEZXNpZ24gdmlldywgcmlnaHQtY2xpY2sgeW91ciBwb3J0IHR5cGUuPC9jbWQ+PGluZm8+Q2xpY2sgPGI+QWRkCi1PcGVyYXRpb248L2I+LiBUbyBzZWxlY3QgdGhlIG5ldyBvcGVyYXRpb24sIGNsaWNrIHRoZSBvcGVyYXRpb24gaW4gdGhlIHBvcnQKLXR5cGUgb2JqZWN0LjwvaW5mbz48L3N0ZXA+Ci08c3RlcD48Y21kPkluIHRoZSBQcm9wZXJ0aWVzIHZpZXcsIGNsaWNrIHRoZSA8Yj5HZW5lcmFsPC9iPiBwYW5lLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SW4gdGhlIDxiPk5hbWU8L2I+IGZpZWxkLCB0eXBlIHRoZSBuYW1lIG9mIHRoZSBvcGVyYXRpb24uPC9jbWQ+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPlJpZ2h0IGNsaWNrIG9uIHRoZSBvcGVyYXRpb24gdG8gYWRkIGlucHV0LCBvdXRwdXQgb3IgZmF1bHQgb2JqZWN0cy48L2NtZD4KLTxpbmZvPkRlcGVuZGluZyBvbiBhbiBvcGVyYXRpb24ncyBpbnB1dHMgYW5kIG91dHB1dHMgaXQgY2FuIGJlIGNsYXNzaWZpZWQKLWFzIGZvbGxvd3M6PHVsPgotPGxpPjxiPk9uZSB3YXkgb3BlcmF0aW9uPC9iPjogaW5wdXQgPC9saT4KLTxsaT48Yj5SZXF1ZXN0IHJlc3BvbnNlIG9wZXJhdGlvbjwvYj46IGlucHV0LCBvdXRwdXQgPC9saT4KLTxsaT48Yj4gU29saWNpdCByZXNwb25zZSBvcGVyYXRpb248L2I+OiBvdXRwdXQsIGlucHV0IDwvbGk+Ci08bGk+PGI+Tm90aWZpY2F0aW9uIG9wZXJhdGlvbjwvYj46IG91dHB1dDwvbGk+Ci08L3VsPjwvaW5mbz48L3N0ZXA+Ci08c3RlcD48Y21kPkluIHRoZSBQcm9wZXJ0aWVzIHZpZXcsIHR5cGUgYW55IGluZm9ybWF0aW9uIGFib3V0IHRoZSBvcGVyYXRpb24KLXlvdSB3aXNoIHRoZSB1c2VyIHRvIHJlYWQgaW4gdGhlICA8Yj5Eb2N1bWVudGF0aW9uPC9iPiBwYW5lLjwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08cmVzdWx0PjxwPiA8Yj5UaXA8L2I+OiBZb3UgY2FuIGFsc28gY3JlYXRlIGEgbmV3IG9wZXJhdGlvbiBmb3IgeW91ciBwb3J0Ci10eXBlIHVzaW5nIHRoZSBPdXRsaW5lIHZpZXcuPC9wPjwvcmVzdWx0PgotPC90YXNrYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIGNvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIHRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9InRjcnR3c2RsLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPGxpbmsgaHJlZj0idGVkdHdzZGwuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgotPD9QdWIgKjAwMDAwMDI2MDI/PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkb3Blci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkb3Blci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MWQxZDM4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZG9wZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwNiIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJBZGRpbmcgYW4gb3BlcmF0aW9uIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IkFuIG9wZXJhdGlvbiBuYW1lcyB0aGUgb3BlcmF0aW9uIGFuZCBsaXN0cyB0aGUgZXhwZWN0ZWQgaW5wdXRzIGFuZCBvdXRwdXRzLiBUaGUgb3BlcmF0aW9uIGVsZW1lbnQgbWF5IGFsc28gY29udGFpbiBhIGZhdWx0IHN1Yi1lbGVtZW50IHRoYXQgZGVzY3JpYmVzIGFueSBlcnJvciBkYXRhIHRoZSBvcGVyYXRpb24gbWF5IHJldHVybi4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iQW4gb3BlcmF0aW9uIG5hbWVzIHRoZSBvcGVyYXRpb24gYW5kIGxpc3RzIHRoZSBleHBlY3RlZCBpbnB1dHMgYW5kIG91dHB1dHMuIFRoZSBvcGVyYXRpb24gZWxlbWVudCBtYXkgYWxzbyBjb250YWluIGEgZmF1bHQgc3ViLWVsZW1lbnQgdGhhdCBkZXNjcmliZXMgYW55IGVycm9yIGRhdGEgdGhlIG9wZXJhdGlvbiBtYXkgcmV0dXJuLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IldTREwsIGFkZGluZyBvcGVyYXRpb25zLCBXZWIgc2VydmljZXMsIGFkZGluZyBXU0RMIG9wZXJhdGlvbnMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJXU0RMLCBhZGRpbmcgb3BlcmF0aW9ucywgV2ViIHNlcnZpY2VzLCBhZGRpbmcgV1NETCBvcGVyYXRpb25zIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3dzZGxlZC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0Y3J0d3NkbC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0ZWR0d3NkbC5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRhZGRvcGVyIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+QWRkaW5nIGFuIG9wZXJhdGlvbjwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idGFkZG9wZXIiPjxhIG5hbWU9InRhZGRvcGVyIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5BZGRpbmcgYW4gb3BlcmF0aW9uPC9oMT4KLQotCi0KLTxkaXY+PHA+QW4gb3BlcmF0aW9uIG5hbWVzIHRoZSBvcGVyYXRpb24gYW5kIGxpc3RzIHRoZSBleHBlY3RlZCBpbnB1dHMKLWFuZCBvdXRwdXRzLiBUaGUgb3BlcmF0aW9uIGVsZW1lbnQgbWF5IGFsc28gY29udGFpbiBhIGZhdWx0IHN1Yi1lbGVtZW50IHRoYXQKLWRlc2NyaWJlcyBhbnkgZXJyb3IgZGF0YSB0aGUgb3BlcmF0aW9uIG1heSByZXR1cm4uPC9wPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj5Vc2luZyB0aGVzZSwgeW91IGNhbiBkZWNsYXJlIGZvdXIgdHJhbnNtaXNzaW9uIHByaW1pdGl2ZXMgdGhhdCBhbgotZW5kcG9pbnQgY2FuIHN1cHBvcnQ6PHVsPgotPGxpPiA8c3Ryb25nPk9uZS13YXk8L3N0cm9uZz4uIFRoZSBlbmRwb2ludCByZWNlaXZlcyBhIG1lc3NhZ2UuPC9saT4KLQotPGxpPiA8c3Ryb25nPlJlcXVlc3QtcmVzcG9uc2U8L3N0cm9uZz4uIFRoZSBlbmRwb2ludCByZWNlaXZlcyBhIG1lc3NhZ2UsIGFuZCBzZW5kcyBhCi1jb3JyZWxhdGVkIG1lc3NhZ2UuPC9saT4KLQotPGxpPiA8c3Ryb25nPlNvbGljaXQtcmVzcG9uc2U8L3N0cm9uZz4uIFRoZSBlbmRwb2ludCBzZW5kcyBhIG1lc3NhZ2UsIGFuZCByZWNlaXZlcyBhCi1jb3JyZWxhdGVkIG1lc3NhZ2UuPC9saT4KLQotPGxpPiA8c3Ryb25nPk5vdGlmaWNhdGlvbjwvc3Ryb25nPi4gVGhlIGVuZHBvaW50IHNlbmRzIGEgbWVzc2FnZS48L2xpPgotCi08L3VsPgotPHA+WW91IGNhbiBhZGQgYW4gb3BlcmF0aW9uIHRvIGEgcG9ydCB0eXBlIG9yIGEgcG9ydCBiaW5kaW5nLjwvcD4KLTxwPlRvCi1hZGQgYW4gb3BlcmF0aW9uIHRvIGEgcG9ydCB0eXBlLCBmb2xsb3cgdGhlc2Ugc3RlcHM6PC9wPgotPC9kaXY+Ci0KLTxvbD4KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIERlc2lnbiB2aWV3LCByaWdodC1jbGljayB5b3VyIHBvcnQgdHlwZS48L3NwYW4+IENsaWNrIDxzdHJvbmc+QWRkCi1PcGVyYXRpb248L3N0cm9uZz4uIFRvIHNlbGVjdCB0aGUgbmV3IG9wZXJhdGlvbiwgY2xpY2sgdGhlIG9wZXJhdGlvbiBpbiB0aGUgcG9ydAotdHlwZSBvYmplY3QuPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JbiB0aGUgUHJvcGVydGllcyB2aWV3LCBjbGljayB0aGUgPHN0cm9uZz5HZW5lcmFsPC9zdHJvbmc+IHBhbmUuPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIDxzdHJvbmc+TmFtZTwvc3Ryb25nPiBmaWVsZCwgdHlwZSB0aGUgbmFtZSBvZiB0aGUgb3BlcmF0aW9uLjwvc3Bhbj4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+UmlnaHQgY2xpY2sgb24gdGhlIG9wZXJhdGlvbiB0byBhZGQgaW5wdXQsIG91dHB1dCBvciBmYXVsdCBvYmplY3RzLjwvc3Bhbj4KLSBEZXBlbmRpbmcgb24gYW4gb3BlcmF0aW9uJ3MgaW5wdXRzIGFuZCBvdXRwdXRzIGl0IGNhbiBiZSBjbGFzc2lmaWVkCi1hcyBmb2xsb3dzOjx1bD4KLTxsaT48c3Ryb25nPk9uZSB3YXkgb3BlcmF0aW9uPC9zdHJvbmc+OiBpbnB1dCA8L2xpPgotCi08bGk+PHN0cm9uZz5SZXF1ZXN0IHJlc3BvbnNlIG9wZXJhdGlvbjwvc3Ryb25nPjogaW5wdXQsIG91dHB1dCA8L2xpPgotCi08bGk+PHN0cm9uZz4gU29saWNpdCByZXNwb25zZSBvcGVyYXRpb248L3N0cm9uZz46IG91dHB1dCwgaW5wdXQgPC9saT4KLQotPGxpPjxzdHJvbmc+Tm90aWZpY2F0aW9uIG9wZXJhdGlvbjwvc3Ryb25nPjogb3V0cHV0PC9saT4KLQotPC91bD4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIFByb3BlcnRpZXMgdmlldywgdHlwZSBhbnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9wZXJhdGlvbgoteW91IHdpc2ggdGhlIHVzZXIgdG8gcmVhZCBpbiB0aGUgIDxzdHJvbmc+RG9jdW1lbnRhdGlvbjwvc3Ryb25nPiBwYW5lLjwvc3Bhbj48L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD4gPHN0cm9uZz5UaXA8L3N0cm9uZz46IFlvdSBjYW4gYWxzbyBjcmVhdGUgYSBuZXcgb3BlcmF0aW9uIGZvciB5b3VyIHBvcnQKLXR5cGUgdXNpbmcgdGhlIE91dGxpbmUgdmlldy48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIGNvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzZGxlZC5odG1sIiB0aXRsZT0iVGhlIFdTREwgZWRpdG9yIGFsbG93cyB5b3UgdG8gZWFzaWx5IGFuZCBncmFwaGljYWxseSBjcmVhdGUsIG1vZGlmeSwgdmlldywgYW5kIHZhbGlkYXRlIFdTREwgZmlsZXMuIj5FZGl0aW5nIFdTREwgZmlsZXMgd2l0aCB0aGUgV1NETCBFZGl0b3I8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgdGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJ0Y3J0d3NkbC5odG1sIiB0aXRsZT0iWW91IGNhbiBjcmVhdGUgYSBuZXcsIGVtcHR5IFdTREwgZmlsZSwgdGhlbiBlZGl0IGl0IHVzaW5nIHRoZSBXU0RMIGVkaXRvci4iPkNyZWF0aW5nIGEgbmV3IFdTREwgZmlsZTwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idGVkdHdzZGwuaHRtbCIgdGl0bGU9Ik9uY2UgeW91IGhhdmUgY3JlYXRlZCBhIFdTREwgZmlsZSwgeW91IGNhbiBlZGl0IGl0IGluIHRoZSBXU0RMIGVkaXRvci4gWW91IGNhbiBhbHNvIGltcG9ydCBXU0RMIGZpbGVzIHlvdSBoYXZlIGNyZWF0ZWQgaW50byB0aGUgd29ya2JlbmNoIGFuZCBlZGl0IHRoZW0gaW4gdGhlIFdTREwgZWRpdG9yLiI+RWRpdGluZyBXU0RMIGZpbGVzPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRwYXJ0LmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRwYXJ0LmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4Yjk0NTIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkcGFydC5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+Ci08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiIKLSAidGFzay5kdGQiPgotPHRhc2sgaWQ9InRhZGRwYXJ0IiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkFkZGluZyBhIHBhcnQgdG8gYSBtZXNzYWdlPC90aXRsZT4KLTxzaG9ydGRlc2M+QWxsIG1lc3NhZ2VzIGNvbnRhaW4gb25lIG9yIG1vcmUgcGFydHMuIFBhcnRzIGFyZSBhIGZsZXhpYmxlIG1lY2hhbmlzbQotZm9yIGRlc2NyaWJpbmcgdGhlIGxvZ2ljYWwgYWJzdHJhY3QgY29udGVudCBvZiBhIG1lc3NhZ2UuIFRoZSBtZXNzYWdlIGRlZmluaXRpb24KLWFzc29jaWF0ZXMgZWFjaCBwYXJ0IHdpdGggYSB0eXBlIHVzaW5nIGEgbWVzc2FnZS10eXBpbmcgYXR0cmlidXRlLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPmFkZGluZyBXU0RMIG1lc3NhZ2UgcGFydHM8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+V1NETDxpbmRleHRlcm0+bWVzc2FnZSBwYXJ0czwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5UbyBhZGQgYSBwYXJ0IHRvIGEgbWVzc2FnZSwgZm9sbG93IHRoZXNlIHN0ZXBzOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPkluIERlc2lnbiB2aWV3LCByaWdodC1jbGljayBhbiBpbnB1dCwgb3V0cHV0LCBvciBmYXVsdCBvYmplY3QgYW5kCi1jbGljayA8Yj5BZGQgUGFydDwvYj4uIDwvY21kPjxzdGVwcmVzdWx0PiBUaGUgcGFydCBpcyBhZGRlZCB0byB0aGUgaW5wdXQsCi1vdXRwdXQsIG9yIGZhdWx0J3MgbWVzc2FnZSByZWZlcmVuY2UuPC9zdGVwcmVzdWx0Pjwvc3RlcD4KLTxzdGVwPjxjbWQ+VG8gc2VsZWN0IHRoZSBwYXJ0LCBjbGljayB0aGUgcGFydCBpbiB0aGUgcG9ydCB0eXBlCi1vYmplY3QuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgUHJvcGVydGllcyB2aWV3LCBjbGljayB0aGUgPGI+R2VuZXJhbDwvYj4gcGFuZS48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkluIHRoZSA8Yj5OYW1lPC9iPiBmaWVsZCwgdHlwZSB0aGUgbmFtZSBvZiB0aGUgcGFydC48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPllvdXIgcGFydCBjYW4gcmVmZXIgdG8gZWl0aGVyIGEgPGI+dHlwZTwvYj4gb3IgYW4gPGI+ZWxlbWVudDwvYj4uPC9jbWQ+Ci08aW5mbz5TZWxlY3QgdGhlIGFwcHJvcHJpYXRlIG9wdGlvbiBmcm9tIHRoZSA8Yj5SZWZlcmVuY2UgS2luZDwvYj4gbGlzdC48L2luZm8+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPklmIHlvdSBzZWxlY3RlZCAgPGI+dHlwZTwvYj4gaW4gdGhlIDxiPlJlZmVyZW5jZSBLaW5kPC9iPiBsaXN0LAoteW91IG5vdyBoYXZlIHRoZSBvcHRpb24gb2Ygc2VsZWN0aW5nIGFuIFhNTCBzY2hlbWEgZGF0YSB0eXBlIGZyb20gdGhlIDxiPlR5cGU8L2I+IGRyb3AKLWRvd24gbGlzdC48L2NtZD48aW5mbz5UaGUgbGlzdCBvZiB0eXBlcyBjb21lcyBmcm9tIGFueSBhdmFpbGFibGUgcmVmZXJlbmNlZAotWE1MIHNjaGVtYXMuPC9pbmZvPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SWYgeW91IHNlbGVjdGVkIDxiPmVsZW1lbnQ8L2I+IGluIHRoZSA8Yj5SZWZlcmVuY2UgS2luZDwvYj4gbGlzdCwKLXlvdSBub3cgaGF2ZSB0aGUgb3B0aW9uIG9mIHNlbGVjdGluZyBhbiBYTUwgc2NoZW1hIGVsZW1lbnQgZnJvbSB0aGUgIDxiPkVsZW1lbnQ8L2I+IGRyb3AKLWRvd24gbGlzdC48L2NtZD48aW5mbz5UaGUgbGlzdCBvZiBlbGVtZW50cyBjb21lcyBmcm9tIGFueSBhdmFpbGFibGUgcmVmZXJlbmNlZAotWE1MIHNjaGVtYXMuPC9pbmZvPjwvc3RlcD4KLTwvc3RlcHM+Ci08cmVzdWx0PjxwPiA8Yj5UaXA8L2I+OiBZb3UgY2FuIGFsc28gY3JlYXRlIGEgbmV3IHBhcnQgZm9yIHlvdXIgbWVzc2FnZSB1c2luZwotdGhlIE91dGxpbmUgdmlldy4gVW5kZXIgdGhlICA8Yj5NZXNzYWdlczwvYj4gZm9sZGVyLCByaWdodC1jbGljayB5b3VyIGVsZW1lbnQKLWFuZCBjbGljayA8Yj5BZGQgUGFydDwvYj4uIFlvdXIgcGFydCB3aWxsIGF1dG9tYXRpY2FsbHkgYXBwZWFyIGluIHRoZSBPdXRsaW5lCi12aWV3ICh1bmRlciB0aGUgPGI+TWVzc2FnZXM8L2I+IGZvbGRlciksIGJ1dCBpdCB3aWxsIG9ubHkgYXBwZWFyIGluIHRoZSBEZXNpZ24KLXZpZXcgaWYgdGhlIG1lc3NhZ2UgeW91IGFkZGVkIGl0IHRvIGN1cnJlbnRseSBkb2VzLjwvcD48L3Jlc3VsdD4KLTwvdGFza2JvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBjb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jd3NkbGVkLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCB0YXNrczwvdGl0bGU+Ci08bGluayBocmVmPSJ0Y3J0d3NkbC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRlZHR3c2RsLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvdGFzaz4KLTw/UHViICowMDAwMDAyNjcyPz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZHBhcnQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZHBhcnQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE5Y2UwZi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRwYXJ0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwNiIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJBZGRpbmcgYSBwYXJ0IHRvIGEgbWVzc2FnZSIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJBbGwgbWVzc2FnZXMgY29udGFpbiBvbmUgb3IgbW9yZSBwYXJ0cy4gUGFydHMgYXJlIGEgZmxleGlibGUgbWVjaGFuaXNtIGZvciBkZXNjcmliaW5nIHRoZSBsb2dpY2FsIGFic3RyYWN0IGNvbnRlbnQgb2YgYSBtZXNzYWdlLiBUaGUgbWVzc2FnZSBkZWZpbml0aW9uIGFzc29jaWF0ZXMgZWFjaCBwYXJ0IHdpdGggYSB0eXBlIHVzaW5nIGEgbWVzc2FnZS10eXBpbmcgYXR0cmlidXRlLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJBbGwgbWVzc2FnZXMgY29udGFpbiBvbmUgb3IgbW9yZSBwYXJ0cy4gUGFydHMgYXJlIGEgZmxleGlibGUgbWVjaGFuaXNtIGZvciBkZXNjcmliaW5nIHRoZSBsb2dpY2FsIGFic3RyYWN0IGNvbnRlbnQgb2YgYSBtZXNzYWdlLiBUaGUgbWVzc2FnZSBkZWZpbml0aW9uIGFzc29jaWF0ZXMgZWFjaCBwYXJ0IHdpdGggYSB0eXBlIHVzaW5nIGEgbWVzc2FnZS10eXBpbmcgYXR0cmlidXRlLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IldTREwsIGFkZGluZyBtZXNzYWdlIHBhcnRzLCBXZWIgc2VydmljZXMsIGFkZGluZyBXU0RMIG1lc3NhZ2UgcGFydHMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJXU0RMLCBhZGRpbmcgbWVzc2FnZSBwYXJ0cywgV2ViIHNlcnZpY2VzLCBhZGRpbmcgV1NETCBtZXNzYWdlIHBhcnRzIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3dzZGxlZC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0Y3J0d3NkbC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0ZWR0d3NkbC5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRhZGRwYXJ0IiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+QWRkaW5nIGEgcGFydCB0byBhIG1lc3NhZ2U8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InRhZGRwYXJ0Ij48YSBuYW1lPSJ0YWRkcGFydCI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+QWRkaW5nIGEgcGFydCB0byBhIG1lc3NhZ2U8L2gxPgotCi0KLQotPGRpdj48cD5BbGwgbWVzc2FnZXMgY29udGFpbiBvbmUgb3IgbW9yZSBwYXJ0cy4gUGFydHMgYXJlIGEgZmxleGlibGUgbWVjaGFuaXNtCi1mb3IgZGVzY3JpYmluZyB0aGUgbG9naWNhbCBhYnN0cmFjdCBjb250ZW50IG9mIGEgbWVzc2FnZS4gVGhlIG1lc3NhZ2UgZGVmaW5pdGlvbgotYXNzb2NpYXRlcyBlYWNoIHBhcnQgd2l0aCBhIHR5cGUgdXNpbmcgYSBtZXNzYWdlLXR5cGluZyBhdHRyaWJ1dGUuPC9wPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UbyBhZGQgYSBwYXJ0IHRvIGEgbWVzc2FnZSwgZm9sbG93IHRoZXNlIHN0ZXBzOjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIERlc2lnbiB2aWV3LCByaWdodC1jbGljayBhbiBpbnB1dCwgb3V0cHV0LCBvciBmYXVsdCBvYmplY3QgYW5kCi1jbGljayA8c3Ryb25nPkFkZCBQYXJ0PC9zdHJvbmc+LiA8L3NwYW4+ICBUaGUgcGFydCBpcyBhZGRlZCB0byB0aGUgaW5wdXQsCi1vdXRwdXQsIG9yIGZhdWx0J3MgbWVzc2FnZSByZWZlcmVuY2UuPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5UbyBzZWxlY3QgdGhlIHBhcnQsIGNsaWNrIHRoZSBwYXJ0IGluIHRoZSBwb3J0IHR5cGUKLW9iamVjdC48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JbiB0aGUgUHJvcGVydGllcyB2aWV3LCBjbGljayB0aGUgPHN0cm9uZz5HZW5lcmFsPC9zdHJvbmc+IHBhbmUuPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIDxzdHJvbmc+TmFtZTwvc3Ryb25nPiBmaWVsZCwgdHlwZSB0aGUgbmFtZSBvZiB0aGUgcGFydC48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5Zb3VyIHBhcnQgY2FuIHJlZmVyIHRvIGVpdGhlciBhIDxzdHJvbmc+dHlwZTwvc3Ryb25nPiBvciBhbiA8c3Ryb25nPmVsZW1lbnQ8L3N0cm9uZz4uPC9zcGFuPgotIFNlbGVjdCB0aGUgYXBwcm9wcmlhdGUgb3B0aW9uIGZyb20gdGhlIDxzdHJvbmc+UmVmZXJlbmNlIEtpbmQ8L3N0cm9uZz4gbGlzdC4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SWYgeW91IHNlbGVjdGVkICA8c3Ryb25nPnR5cGU8L3N0cm9uZz4gaW4gdGhlIDxzdHJvbmc+UmVmZXJlbmNlIEtpbmQ8L3N0cm9uZz4gbGlzdCwKLXlvdSBub3cgaGF2ZSB0aGUgb3B0aW9uIG9mIHNlbGVjdGluZyBhbiBYTUwgc2NoZW1hIGRhdGEgdHlwZSBmcm9tIHRoZSA8c3Ryb25nPlR5cGU8L3N0cm9uZz4gZHJvcAotZG93biBsaXN0Ljwvc3Bhbj4gVGhlIGxpc3Qgb2YgdHlwZXMgY29tZXMgZnJvbSBhbnkgYXZhaWxhYmxlIHJlZmVyZW5jZWQKLVhNTCBzY2hlbWFzLjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SWYgeW91IHNlbGVjdGVkIDxzdHJvbmc+ZWxlbWVudDwvc3Ryb25nPiBpbiB0aGUgPHN0cm9uZz5SZWZlcmVuY2UgS2luZDwvc3Ryb25nPiBsaXN0LAoteW91IG5vdyBoYXZlIHRoZSBvcHRpb24gb2Ygc2VsZWN0aW5nIGFuIFhNTCBzY2hlbWEgZWxlbWVudCBmcm9tIHRoZSAgPHN0cm9uZz5FbGVtZW50PC9zdHJvbmc+IGRyb3AKLWRvd24gbGlzdC48L3NwYW4+IFRoZSBsaXN0IG9mIGVsZW1lbnRzIGNvbWVzIGZyb20gYW55IGF2YWlsYWJsZSByZWZlcmVuY2VkCi1YTUwgc2NoZW1hcy48L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD4gPHN0cm9uZz5UaXA8L3N0cm9uZz46IFlvdSBjYW4gYWxzbyBjcmVhdGUgYSBuZXcgcGFydCBmb3IgeW91ciBtZXNzYWdlIHVzaW5nCi10aGUgT3V0bGluZSB2aWV3LiBVbmRlciB0aGUgIDxzdHJvbmc+TWVzc2FnZXM8L3N0cm9uZz4gZm9sZGVyLCByaWdodC1jbGljayB5b3VyIGVsZW1lbnQKLWFuZCBjbGljayA8c3Ryb25nPkFkZCBQYXJ0PC9zdHJvbmc+LiBZb3VyIHBhcnQgd2lsbCBhdXRvbWF0aWNhbGx5IGFwcGVhciBpbiB0aGUgT3V0bGluZQotdmlldyAodW5kZXIgdGhlIDxzdHJvbmc+TWVzc2FnZXM8L3N0cm9uZz4gZm9sZGVyKSwgYnV0IGl0IHdpbGwgb25seSBhcHBlYXIgaW4gdGhlIERlc2lnbgotdmlldyBpZiB0aGUgbWVzc2FnZSB5b3UgYWRkZWQgaXQgdG8gY3VycmVudGx5IGRvZXMuPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBjb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuaHRtbCIgdGl0bGU9IlRoZSBXU0RMIGVkaXRvciBhbGxvd3MgeW91IHRvIGVhc2lseSBhbmQgZ3JhcGhpY2FsbHkgY3JlYXRlLCBtb2RpZnksIHZpZXcsIGFuZCB2YWxpZGF0ZSBXU0RMIGZpbGVzLiI+RWRpdGluZyBXU0RMIGZpbGVzIHdpdGggdGhlIFdTREwgRWRpdG9yPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIHRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0idGNydHdzZGwuaHRtbCIgdGl0bGU9IllvdSBjYW4gY3JlYXRlIGEgbmV3LCBlbXB0eSBXU0RMIGZpbGUsIHRoZW4gZWRpdCBpdCB1c2luZyB0aGUgV1NETCBlZGl0b3IuIj5DcmVhdGluZyBhIG5ldyBXU0RMIGZpbGU8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRlZHR3c2RsLmh0bWwiIHRpdGxlPSJPbmNlIHlvdSBoYXZlIGNyZWF0ZWQgYSBXU0RMIGZpbGUsIHlvdSBjYW4gZWRpdCBpdCBpbiB0aGUgV1NETCBlZGl0b3IuIFlvdSBjYW4gYWxzbyBpbXBvcnQgV1NETCBmaWxlcyB5b3UgaGF2ZSBjcmVhdGVkIGludG8gdGhlIHdvcmtiZW5jaCBhbmQgZWRpdCB0aGVtIGluIHRoZSBXU0RMIGVkaXRvci4iPkVkaXRpbmcgV1NETCBmaWxlczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkcG9ydC5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkcG9ydC5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjlmYzM3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZHBvcnQuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iCi0gInRhc2suZHRkIj4KLTx0YXNrIGlkPSJ0YWRkcG9ydCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5BZGRpbmcgYSBwb3J0IHRvIGEgc2VydmljZTwvdGl0bGU+Ci08c2hvcnRkZXNjPkEgcG9ydCBkZWZpbmVzIGFuIGluZGl2aWR1YWwgZW5kcG9pbnQgYnkgc3BlY2lmeWluZyBhIHNpbmdsZSBhZGRyZXNzCi1mb3IgYSBiaW5kaW5nLiBUaGUgcG9ydCBjb250YWlucyBhICdiaW5kaW5nJyBhdHRyaWJ1dGUgdGhhdCByZWZlcmVuY2VzIGEgYmluZGluZwotYW5kIGFuIGFkZHJlc3MgZWxlbWVudCB0aGF0IHByb3ZpZGVzIGEgc3BlY2lmaWNhdGlvbiBmb3IgdGhlIGVuZHBvaW50Ljwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPmFkZGluZyBXU0RMIHBvcnRzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08aW5kZXh0ZXJtPldTREw8aW5kZXh0ZXJtPnBvcnRzPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlNlcnZpY2VzIGFyZSB1c2VkIHRvIGdyb3VwIHNldHMgb2YgcmVsYXRlZCBwb3J0cyB0b2dldGhlci4gUG9ydHMKLXdpdGhpbiBhIHNlcnZpY2UgaGF2ZSB0aGUgZm9sbG93aW5nIHJlbGF0aW9uc2hpcDo8L3A+PHVsPgotPGxpPk5vbmUgb2YgdGhlIHBvcnRzIGNvbW11bmljYXRlIHdpdGggZWFjaCBvdGhlciAoZm9yIGV4YW1wbGUsIHRoZSBvdXRwdXQKLW9mIG9uZSBwb3J0IGlzIG5vdCB0aGUgaW5wdXQgb2YgYW5vdGhlcikuPC9saT4KLTxsaT5JZiBhIHNlcnZpY2UgaGFzIHNldmVyYWwgcG9ydHMgdGhhdCBzaGFyZSBhIHBvcnQgdHlwZSwgYnV0IGVtcGxveSBkaWZmZXJlbnQKLWJpbmRpbmdzIG9yIGFkZHJlc3NlcywgdGhlIHBvcnRzIGFyZSBhbHRlcm5hdGl2ZXMuIEVhY2ggcG9ydCBwcm92aWRlcyBzZW1hbnRpY2FsbHkKLWVxdWl2YWxlbnQgYmVoYXZpb3IgKHdpdGhpbiB0aGUgdHJhbnNwb3J0IGFuZCBtZXNzYWdlIGZvcm1hdCBsaW1pdGF0aW9ucyBpbXBvc2VkCi1ieSBlYWNoIGJpbmRpbmcpLjwvbGk+Ci08bGk+WW91IGNhbiBkZXRlcm1pbmUgYSBzZXJ2aWNlJ3MgcG9ydCB0eXBlcyBieSBleGFtaW5pbmcgaXRzIHBvcnRzLiBVc2luZwotdGhpcyBpbmZvcm1hdGlvbiBhIHVzZXIgY2FuIGRldGVybWluZSBpZiBhIGdpdmVuIG1hY2hpbmUgc3VwcG9ydHMgYWxsIHRoZQotb3BlcmF0aW9ucyBuZWVkZWQgdG8gY29tcGxldGUgYSBnaXZlbiB0YXNrLjwvbGk+Ci08L3VsPjxwPlRvIGFkZCBhIHBvcnQgdG8gYSBzZXJ2aWNlLCBmb2xsb3cgdGhlc2Ugc3RlcHM6PC9wPjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+SW4gdGhlIERlc2lnbiB2aWV3LCByaWdodC1jbGljayB0aGUgc2VydmljZSB5b3Ugd2FudCB0byBhZGQgYSBwb3J0Ci10bywgdGhlbiBjbGljayA8Yj5BZGQgUG9ydC48L2I+IFRvIHNlbGVjdCB0aGUgbmV3IHBvcnQsIGNsaWNrIHRoZSBwb3J0IGluCi10aGUgc2VydmljZSBvYmplY3QuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgUHJvcGVydGllcyB2aWV3LCBjbGljayB0aGUgPGI+R2VuZXJhbDwvYj4gcGFuZS4gSW4gdGhlIDxiPk5hbWU8L2I+IGZpZWxkLAotdHlwZSB0aGUgbmFtZSBvZiB0aGUgcG9ydC48L2NtZD48aW5mbz5UaGUgbmFtZSBvZiB0aGUgcG9ydCBzaG91bGQgcHJvdmlkZQotaXQgd2l0aCBhIHVuaXF1ZSBuYW1lIGFtb25nc3QgYWxsIHRoZSBwb3J0cyBkZWZpbmVkIHdpdGhpbiB0aGUgc2VydmljZS48L2luZm8+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPkEgPGI+QmluZGluZzwvYj4gZGVmaW5lcyB0aGUgbWVzc2FnZSBmb3JtYXQgYW5kIHByb3RvY29sIGRldGFpbHMKLWZvciBvcGVyYXRpb25zIGFuZCBtZXNzYWdlcyBkZWZpbmVkIGJ5IGEgcGFydGljdWxhciBwb3J0IHR5cGUuPC9jbWQ+PGluZm8+WW91Ci1jYW4gY3JlYXRlIGEgbmV3IGJpbmRpbmcgZm9yIHlvdXIgcG9ydCwgcmUtdXNlIGFuIGV4aXN0aW5nIG9uZSwgb3IgaW1wb3J0Ci1vbmUuIFJlZmVyIHRvIHRoZSByZWxhdGVkIHRhc2tzIGZvciBtb3JlIGRldGFpbHMuPC9pbmZvPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SW4gdGhlIDxiPkFkZHJlc3M8L2I+IGZpZWxkLCB0eXBlIHRoZSBhZGRyZXNzIG9mIHRoZSBwb3J0LjwvY21kPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5UeXBlIGFueSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcG9ydCB5b3Ugd2FudCB0aGUgdXNlciB0byByZWFkIGluCi10aGUgPGI+RG9jdW1lbnRhdGlvbjwvYj4gcGFuZS48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPlRvIG1hbmFnZSBleHRlbnNpb25zLCBjbGljayB0aGUgPGI+RXh0ZW5zaWJpbGl0eTwvYj4gcGFuZS4gWW91Ci1jYW4gZWl0aGVyIGFkZCwgc29ydCwgb3IgcmVtb3ZlIGV4dGVuc2lvbnMuIDxkcmFmdC1jb21tZW50PlJlZmVyIHRvIHRoZSByZWxhdGVkCi10YXNrcyBmb3IgbW9yZSBkZXRhaWxzLiBBZGQgbGluayB0byBYU0QgRWRpdG9yIGluIHJlbGF0ZWQgdGFza3Mgc2VjdGlvbi48L2RyYWZ0LWNvbW1lbnQ+PC9jbWQ+Ci08L3N0ZXA+Ci08L3N0ZXBzPgotPHJlc3VsdD48cD4gPGI+VGlwPC9iPjogWW91IGNhbiBhbHNvIGNyZWF0ZSBhIHBvcnQgdXNpbmcgdGhlIE91dGxpbmUgdmlldwotYnkgcmlnaHQtY2xpY2tpbmcgeW91ciBzZXJ2aWNlIHVuZGVyIHRoZSA8Yj5TZXJ2aWNlczwvYj4gZm9sZGVyIGFuZCBjbGlja2luZyA8Yj5BZGQKLVBvcnQ8L2I+LiBZb3VyIHBvcnQgKHJlZ2FyZGxlc3Mgb2Ygd2hpY2ggdmlldyB5b3UgY3JlYXRlIGl0IGluKSB3aWxsIGFwcGVhcgotaW4gYm90aCB0aGUgRGVzaWduIHZpZXcgYW5kIHRoZSBPdXRsaW5lIHZpZXcuPC9wPjwvcmVzdWx0PgotPC90YXNrYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIGNvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIHRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9InRjcnR3c2RsLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPGxpbmsgaHJlZj0idGVkdHdzZGwuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgotPD9QdWIgKjAwMDAwMDMzMjI/PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkcG9ydC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkcG9ydC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYmQwMzFlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZHBvcnQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwNiIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJBZGRpbmcgYSBwb3J0IHRvIGEgc2VydmljZSIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJBIHBvcnQgZGVmaW5lcyBhbiBpbmRpdmlkdWFsIGVuZHBvaW50IGJ5IHNwZWNpZnlpbmcgYSBzaW5nbGUgYWRkcmVzcyBmb3IgYSBiaW5kaW5nLiBUaGUgcG9ydCBjb250YWlucyBhICdiaW5kaW5nJyBhdHRyaWJ1dGUgdGhhdCByZWZlcmVuY2VzIGEgYmluZGluZyBhbmQgYW4gYWRkcmVzcyBlbGVtZW50IHRoYXQgcHJvdmlkZXMgYSBzcGVjaWZpY2F0aW9uIGZvciB0aGUgZW5kcG9pbnQuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkEgcG9ydCBkZWZpbmVzIGFuIGluZGl2aWR1YWwgZW5kcG9pbnQgYnkgc3BlY2lmeWluZyBhIHNpbmdsZSBhZGRyZXNzIGZvciBhIGJpbmRpbmcuIFRoZSBwb3J0IGNvbnRhaW5zIGEgJ2JpbmRpbmcnIGF0dHJpYnV0ZSB0aGF0IHJlZmVyZW5jZXMgYSBiaW5kaW5nIGFuZCBhbiBhZGRyZXNzIGVsZW1lbnQgdGhhdCBwcm92aWRlcyBhIHNwZWNpZmljYXRpb24gZm9yIHRoZSBlbmRwb2ludC4iIC8+Ci08bWV0YSBjb250ZW50PSJXU0RMLCBhZGRpbmcgcG9ydHMsIFdlYiBzZXJ2aWNlcywgYWRkaW5nIFdTREwgcG9ydHMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJXU0RMLCBhZGRpbmcgcG9ydHMsIFdlYiBzZXJ2aWNlcywgYWRkaW5nIFdTREwgcG9ydHMiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9jb25jZXB0cy9jd3NkbGVkLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InRjcnR3c2RsLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InRlZHR3c2RsLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idGFkZHBvcnQiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5BZGRpbmcgYSBwb3J0IHRvIGEgc2VydmljZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idGFkZHBvcnQiPjxhIG5hbWU9InRhZGRwb3J0Ij48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5BZGRpbmcgYSBwb3J0IHRvIGEgc2VydmljZTwvaDE+Ci0KLQotCi08ZGl2PjxwPkEgcG9ydCBkZWZpbmVzIGFuIGluZGl2aWR1YWwgZW5kcG9pbnQgYnkgc3BlY2lmeWluZyBhIHNpbmdsZSBhZGRyZXNzCi1mb3IgYSBiaW5kaW5nLiBUaGUgcG9ydCBjb250YWlucyBhICdiaW5kaW5nJyBhdHRyaWJ1dGUgdGhhdCByZWZlcmVuY2VzIGEgYmluZGluZwotYW5kIGFuIGFkZHJlc3MgZWxlbWVudCB0aGF0IHByb3ZpZGVzIGEgc3BlY2lmaWNhdGlvbiBmb3IgdGhlIGVuZHBvaW50LjwvcD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+U2VydmljZXMgYXJlIHVzZWQgdG8gZ3JvdXAgc2V0cyBvZiByZWxhdGVkIHBvcnRzIHRvZ2V0aGVyLiBQb3J0cwotd2l0aGluIGEgc2VydmljZSBoYXZlIHRoZSBmb2xsb3dpbmcgcmVsYXRpb25zaGlwOjwvcD4KLTx1bD4KLTxsaT5Ob25lIG9mIHRoZSBwb3J0cyBjb21tdW5pY2F0ZSB3aXRoIGVhY2ggb3RoZXIgKGZvciBleGFtcGxlLCB0aGUgb3V0cHV0Ci1vZiBvbmUgcG9ydCBpcyBub3QgdGhlIGlucHV0IG9mIGFub3RoZXIpLjwvbGk+Ci0KLTxsaT5JZiBhIHNlcnZpY2UgaGFzIHNldmVyYWwgcG9ydHMgdGhhdCBzaGFyZSBhIHBvcnQgdHlwZSwgYnV0IGVtcGxveSBkaWZmZXJlbnQKLWJpbmRpbmdzIG9yIGFkZHJlc3NlcywgdGhlIHBvcnRzIGFyZSBhbHRlcm5hdGl2ZXMuIEVhY2ggcG9ydCBwcm92aWRlcyBzZW1hbnRpY2FsbHkKLWVxdWl2YWxlbnQgYmVoYXZpb3IgKHdpdGhpbiB0aGUgdHJhbnNwb3J0IGFuZCBtZXNzYWdlIGZvcm1hdCBsaW1pdGF0aW9ucyBpbXBvc2VkCi1ieSBlYWNoIGJpbmRpbmcpLjwvbGk+Ci0KLTxsaT5Zb3UgY2FuIGRldGVybWluZSBhIHNlcnZpY2UncyBwb3J0IHR5cGVzIGJ5IGV4YW1pbmluZyBpdHMgcG9ydHMuIFVzaW5nCi10aGlzIGluZm9ybWF0aW9uIGEgdXNlciBjYW4gZGV0ZXJtaW5lIGlmIGEgZ2l2ZW4gbWFjaGluZSBzdXBwb3J0cyBhbGwgdGhlCi1vcGVyYXRpb25zIG5lZWRlZCB0byBjb21wbGV0ZSBhIGdpdmVuIHRhc2suPC9saT4KLQotPC91bD4KLTxwPlRvIGFkZCBhIHBvcnQgdG8gYSBzZXJ2aWNlLCBmb2xsb3cgdGhlc2Ugc3RlcHM6PC9wPgotPC9kaXY+Ci0KLTxvbD4KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIERlc2lnbiB2aWV3LCByaWdodC1jbGljayB0aGUgc2VydmljZSB5b3Ugd2FudCB0byBhZGQgYSBwb3J0Ci10bywgdGhlbiBjbGljayA8c3Ryb25nPkFkZCBQb3J0Ljwvc3Ryb25nPiBUbyBzZWxlY3QgdGhlIG5ldyBwb3J0LCBjbGljayB0aGUgcG9ydCBpbgotdGhlIHNlcnZpY2Ugb2JqZWN0Ljwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSBQcm9wZXJ0aWVzIHZpZXcsIGNsaWNrIHRoZSA8c3Ryb25nPkdlbmVyYWw8L3N0cm9uZz4gcGFuZS4gSW4gdGhlIDxzdHJvbmc+TmFtZTwvc3Ryb25nPiBmaWVsZCwKLXR5cGUgdGhlIG5hbWUgb2YgdGhlIHBvcnQuPC9zcGFuPiBUaGUgbmFtZSBvZiB0aGUgcG9ydCBzaG91bGQgcHJvdmlkZQotaXQgd2l0aCBhIHVuaXF1ZSBuYW1lIGFtb25nc3QgYWxsIHRoZSBwb3J0cyBkZWZpbmVkIHdpdGhpbiB0aGUgc2VydmljZS4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+QSA8c3Ryb25nPkJpbmRpbmc8L3N0cm9uZz4gZGVmaW5lcyB0aGUgbWVzc2FnZSBmb3JtYXQgYW5kIHByb3RvY29sIGRldGFpbHMKLWZvciBvcGVyYXRpb25zIGFuZCBtZXNzYWdlcyBkZWZpbmVkIGJ5IGEgcGFydGljdWxhciBwb3J0IHR5cGUuPC9zcGFuPiBZb3UKLWNhbiBjcmVhdGUgYSBuZXcgYmluZGluZyBmb3IgeW91ciBwb3J0LCByZS11c2UgYW4gZXhpc3Rpbmcgb25lLCBvciBpbXBvcnQKLW9uZS4gUmVmZXIgdG8gdGhlIHJlbGF0ZWQgdGFza3MgZm9yIG1vcmUgZGV0YWlscy48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSA8c3Ryb25nPkFkZHJlc3M8L3N0cm9uZz4gZmllbGQsIHR5cGUgdGhlIGFkZHJlc3Mgb2YgdGhlIHBvcnQuPC9zcGFuPgotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5UeXBlIGFueSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcG9ydCB5b3Ugd2FudCB0aGUgdXNlciB0byByZWFkIGluCi10aGUgPHN0cm9uZz5Eb2N1bWVudGF0aW9uPC9zdHJvbmc+IHBhbmUuPC9zcGFuPjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+VG8gbWFuYWdlIGV4dGVuc2lvbnMsIGNsaWNrIHRoZSA8c3Ryb25nPkV4dGVuc2liaWxpdHk8L3N0cm9uZz4gcGFuZS4gWW91Ci1jYW4gZWl0aGVyIGFkZCwgc29ydCwgb3IgcmVtb3ZlIGV4dGVuc2lvbnMuIDwvc3Bhbj4KLTwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPiA8c3Ryb25nPlRpcDwvc3Ryb25nPjogWW91IGNhbiBhbHNvIGNyZWF0ZSBhIHBvcnQgdXNpbmcgdGhlIE91dGxpbmUgdmlldwotYnkgcmlnaHQtY2xpY2tpbmcgeW91ciBzZXJ2aWNlIHVuZGVyIHRoZSA8c3Ryb25nPlNlcnZpY2VzPC9zdHJvbmc+IGZvbGRlciBhbmQgY2xpY2tpbmcgPHN0cm9uZz5BZGQKLVBvcnQ8L3N0cm9uZz4uIFlvdXIgcG9ydCAocmVnYXJkbGVzcyBvZiB3aGljaCB2aWV3IHlvdSBjcmVhdGUgaXQgaW4pIHdpbGwgYXBwZWFyCi1pbiBib3RoIHRoZSBEZXNpZ24gdmlldyBhbmQgdGhlIE91dGxpbmUgdmlldy48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIGNvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzZGxlZC5odG1sIiB0aXRsZT0iVGhlIFdTREwgZWRpdG9yIGFsbG93cyB5b3UgdG8gZWFzaWx5IGFuZCBncmFwaGljYWxseSBjcmVhdGUsIG1vZGlmeSwgdmlldywgYW5kIHZhbGlkYXRlIFdTREwgZmlsZXMuIj5FZGl0aW5nIFdTREwgZmlsZXMgd2l0aCB0aGUgV1NETCBFZGl0b3I8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgdGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJ0Y3J0d3NkbC5odG1sIiB0aXRsZT0iWW91IGNhbiBjcmVhdGUgYSBuZXcsIGVtcHR5IFdTREwgZmlsZSwgdGhlbiBlZGl0IGl0IHVzaW5nIHRoZSBXU0RMIGVkaXRvci4iPkNyZWF0aW5nIGEgbmV3IFdTREwgZmlsZTwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idGVkdHdzZGwuaHRtbCIgdGl0bGU9Ik9uY2UgeW91IGhhdmUgY3JlYXRlZCBhIFdTREwgZmlsZSwgeW91IGNhbiBlZGl0IGl0IGluIHRoZSBXU0RMIGVkaXRvci4gWW91IGNhbiBhbHNvIGltcG9ydCBXU0RMIGZpbGVzIHlvdSBoYXZlIGNyZWF0ZWQgaW50byB0aGUgd29ya2JlbmNoIGFuZCBlZGl0IHRoZW0gaW4gdGhlIFdTREwgZWRpdG9yLiI+RWRpdGluZyBXU0RMIGZpbGVzPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRzcnZjLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRzcnZjLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3NTJmNGYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90YWRkc3J2Yy5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+Ci08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiIKLSAidGFzay5kdGQiPgotPHRhc2sgaWQ9InRhZGRzcnZjIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkFkZGluZyBhIHNlcnZpY2U8L3RpdGxlPgotPHNob3J0ZGVzYz5UaGUgIDxzeXN0ZW1vdXRwdXQ+c2VydmljZTwvc3lzdGVtb3V0cHV0PiBlbGVtZW50IGlzIGEgY29sbGVjdGlvbgotb2YgcmVsYXRlZCBwb3J0cyBhbmQgc3BlY2lmaWVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgc2VydmljZS48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5hZGRpbmcgc2VydmljZXMgdG8gV1NETDwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPGluZGV4dGVybT5XU0RMPGluZGV4dGVybT5zZXJ2aWNlczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5UbyBjcmVhdGUgYSBuZXcgc2VydmljZSwgZm9sbG93IHRoZXNlIHN0ZXBzOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPkluIHRoZSBEZXNpZ24gdmlldywgcmlnaHQtY2xpY2sgaW4gYW55IGJsYW5rIHNwYWNlIGFuZCBjbGljayA8Yj5BZGQKLVNlcnZpY2U8L2I+LiBUbyBzZWxlY3QgdGhlIG5ldyBzZXJ2aWNlLCBjbGljayB0aGUgc2VydmljZSBvYmplY3QuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgUHJvcGVydGllcyB2aWV3LCBjbGljayB0aGUgPGI+R2VuZXJhbDwvYj4gcGFuZS4gSW4gdGhlIDxiPk5hbWU8L2I+IGZpZWxkLAotdHlwZSB0aGUgbmFtZSBvZiB0aGUgc2VydmljZS48L2NtZD48aW5mbz5UaGUgbmFtZSBvZiB0aGUgc2VydmljZSBwcm92aWRlcwotaXQgd2l0aCBhIHVuaXF1ZSBuYW1lIGFtb25nc3QgYWxsIHRoZSBzZXJ2aWNlcyBkZWZpbmVkIHdpdGhpbiBpbiB0aGUgZW5jbG9zaW5nCi1XU0RMIGRvY3VtZW50LjwvaW5mbz48L3N0ZXA+Ci08c3RlcD48Y21kPlR5cGUgYW55IGluZm9ybWF0aW9uIGFib3V0IHRoZSBzZXJ2aWNlIHlvdSB3YW50IHRoZSB1c2VyIHRvIHJlYWQKLWluIHRoZSA8Yj5Eb2N1bWVudGF0aW9uPC9iPiBwYW5lLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+VG8gbWFuYWdlIGV4dGVuc2lvbnMsIGNsaWNrIHRoZSA8Yj5FeHRlbnNpYmlsaXR5PC9iPiBwYW5lLiBZb3UKLWNhbiBlaXRoZXIgYWRkLCBzb3J0LCBvciByZW1vdmUgZXh0ZW5zaW9ucy48ZHJhZnQtY29tbWVudD4gUmVmZXIgdG8gdGhlIHJlbGF0ZWQKLXRhc2tzIGZvciBtb3JlIGRldGFpbHMuIEFkZCBsaW5rIHRvIHRoZSBYU0QgRWRpdG9yIHBsdWdpbiB0b3BpYyBmb3IgIkFkZGluZwotZXh0ZW5zaW9uIGNvbXBvbmVudHMiPC9kcmFmdC1jb21tZW50PjwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08cmVzdWx0PjxwPiA8Yj5UaXA8L2I+OiBZb3UgY2FuIGFsc28gY3JlYXRlIGEgc2VydmljZSB1c2luZyB0aGUgT3V0bGluZSB2aWV3Ci1ieSByaWdodC1jbGlja2luZyB0aGUgPGI+U2VydmljZXM8L2I+IGZvbGRlciBhbmQgY2xpY2tpbmcgPGI+QWRkIFNlcnZpY2U8L2I+LjwvcD48cD5Zb3UKLWNhbiBub3cgYWRkIGEgcG9ydCB0byB5b3VyIHNlcnZpY2UuIEEgcG9ydCBkZWZpbmVzIGFuIGluZGl2aWR1YWwgZW5kcG9pbnQKLWJ5IHNwZWNpZnlpbmcgYSBzaW5nbGUgYWRkcmVzcyBmb3IgYSBiaW5kaW5nLjwvcD48L3Jlc3VsdD4KLTwvdGFza2JvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBjb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jd3NkbGVkLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCB0YXNrczwvdGl0bGU+Ci08bGluayBocmVmPSJ0Y3J0d3NkbC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRlZHR3c2RsLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvdGFzaz4KLTw/UHViICowMDAwMDAyMTU3Pz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZHNydmMuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGFkZHNydmMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2E4YWNiMy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RhZGRzcnZjLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwNiIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJBZGRpbmcgYSBzZXJ2aWNlIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IlRoZSBzZXJ2aWNlIGVsZW1lbnQgaXMgYSBjb2xsZWN0aW9uIG9mIHJlbGF0ZWQgcG9ydHMgYW5kIHNwZWNpZmllcyB0aGUgbG9jYXRpb24gb2YgdGhlIHNlcnZpY2UuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBzZXJ2aWNlIGVsZW1lbnQgaXMgYSBjb2xsZWN0aW9uIG9mIHJlbGF0ZWQgcG9ydHMgYW5kIHNwZWNpZmllcyB0aGUgbG9jYXRpb24gb2YgdGhlIHNlcnZpY2UuIiAvPgotPG1ldGEgY29udGVudD0iV1NETCwgYWRkaW5nIHNlcnZpY2VzLCBXZWIgc2VydmljZXMsIGFkZGluZyBzZXJ2aWNlcyB0byBXU0RMIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV1NETCwgYWRkaW5nIHNlcnZpY2VzLCBXZWIgc2VydmljZXMsIGFkZGluZyBzZXJ2aWNlcyB0byBXU0RMIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3dzZGxlZC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0Y3J0d3NkbC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0ZWR0d3NkbC5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRhZGRzcnZjIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+QWRkaW5nIGEgc2VydmljZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idGFkZHNydmMiPjxhIG5hbWU9InRhZGRzcnZjIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5BZGRpbmcgYSBzZXJ2aWNlPC9oMT4KLQotCi0KLTxkaXY+PHA+VGhlICA8dHQgY2xhc3M9InN5c291dCI+c2VydmljZTwvdHQ+IGVsZW1lbnQgaXMgYSBjb2xsZWN0aW9uCi1vZiByZWxhdGVkIHBvcnRzIGFuZCBzcGVjaWZpZXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBzZXJ2aWNlLjwvcD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VG8gY3JlYXRlIGEgbmV3IHNlcnZpY2UsIGZvbGxvdyB0aGVzZSBzdGVwczo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JbiB0aGUgRGVzaWduIHZpZXcsIHJpZ2h0LWNsaWNrIGluIGFueSBibGFuayBzcGFjZSBhbmQgY2xpY2sgPHN0cm9uZz5BZGQKLVNlcnZpY2U8L3N0cm9uZz4uIFRvIHNlbGVjdCB0aGUgbmV3IHNlcnZpY2UsIGNsaWNrIHRoZSBzZXJ2aWNlIG9iamVjdC48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JbiB0aGUgUHJvcGVydGllcyB2aWV3LCBjbGljayB0aGUgPHN0cm9uZz5HZW5lcmFsPC9zdHJvbmc+IHBhbmUuIEluIHRoZSA8c3Ryb25nPk5hbWU8L3N0cm9uZz4gZmllbGQsCi10eXBlIHRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlLjwvc3Bhbj4gVGhlIG5hbWUgb2YgdGhlIHNlcnZpY2UgcHJvdmlkZXMKLWl0IHdpdGggYSB1bmlxdWUgbmFtZSBhbW9uZ3N0IGFsbCB0aGUgc2VydmljZXMgZGVmaW5lZCB3aXRoaW4gaW4gdGhlIGVuY2xvc2luZwotV1NETCBkb2N1bWVudC48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPlR5cGUgYW55IGluZm9ybWF0aW9uIGFib3V0IHRoZSBzZXJ2aWNlIHlvdSB3YW50IHRoZSB1c2VyIHRvIHJlYWQKLWluIHRoZSA8c3Ryb25nPkRvY3VtZW50YXRpb248L3N0cm9uZz4gcGFuZS48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5UbyBtYW5hZ2UgZXh0ZW5zaW9ucywgY2xpY2sgdGhlIDxzdHJvbmc+RXh0ZW5zaWJpbGl0eTwvc3Ryb25nPiBwYW5lLiBZb3UKLWNhbiBlaXRoZXIgYWRkLCBzb3J0LCBvciByZW1vdmUgZXh0ZW5zaW9ucy48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+IDxzdHJvbmc+VGlwPC9zdHJvbmc+OiBZb3UgY2FuIGFsc28gY3JlYXRlIGEgc2VydmljZSB1c2luZyB0aGUgT3V0bGluZSB2aWV3Ci1ieSByaWdodC1jbGlja2luZyB0aGUgPHN0cm9uZz5TZXJ2aWNlczwvc3Ryb25nPiBmb2xkZXIgYW5kIGNsaWNraW5nIDxzdHJvbmc+QWRkIFNlcnZpY2U8L3N0cm9uZz4uPC9wPgotPHA+WW91Ci1jYW4gbm93IGFkZCBhIHBvcnQgdG8geW91ciBzZXJ2aWNlLiBBIHBvcnQgZGVmaW5lcyBhbiBpbmRpdmlkdWFsIGVuZHBvaW50Ci1ieSBzcGVjaWZ5aW5nIGEgc2luZ2xlIGFkZHJlc3MgZm9yIGEgYmluZGluZy48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIGNvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzZGxlZC5odG1sIiB0aXRsZT0iVGhlIFdTREwgZWRpdG9yIGFsbG93cyB5b3UgdG8gZWFzaWx5IGFuZCBncmFwaGljYWxseSBjcmVhdGUsIG1vZGlmeSwgdmlldywgYW5kIHZhbGlkYXRlIFdTREwgZmlsZXMuIj5FZGl0aW5nIFdTREwgZmlsZXMgd2l0aCB0aGUgV1NETCBFZGl0b3I8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgdGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJ0Y3J0d3NkbC5odG1sIiB0aXRsZT0iWW91IGNhbiBjcmVhdGUgYSBuZXcsIGVtcHR5IFdTREwgZmlsZSwgdGhlbiBlZGl0IGl0IHVzaW5nIHRoZSBXU0RMIGVkaXRvci4iPkNyZWF0aW5nIGEgbmV3IFdTREwgZmlsZTwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idGVkdHdzZGwuaHRtbCIgdGl0bGU9Ik9uY2UgeW91IGhhdmUgY3JlYXRlZCBhIFdTREwgZmlsZSwgeW91IGNhbiBlZGl0IGl0IGluIHRoZSBXU0RMIGVkaXRvci4gWW91IGNhbiBhbHNvIGltcG9ydCBXU0RMIGZpbGVzIHlvdSBoYXZlIGNyZWF0ZWQgaW50byB0aGUgd29ya2JlbmNoIGFuZCBlZGl0IHRoZW0gaW4gdGhlIFdTREwgZWRpdG9yLiI+RWRpdGluZyBXU0RMIGZpbGVzPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RjcnRpbXB0LmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RjcnRpbXB0LmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliN2FkYWEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90Y3J0aW1wdC5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+Ci08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiIKLSAidGFzay5kdGQiPgotPHRhc2sgaWQ9InRjcnRpbXB0IiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkNyZWF0aW5nIGFuIGltcG9ydCBzdGF0ZW1lbnQ8L3RpdGxlPgotPHNob3J0ZGVzYz5UaGUgaW1wb3J0IHN0YXRlbWVudCBpcyB1c2VkIHRvIGltcG9ydCBvdGhlciBXU0RMIGRvY3VtZW50cyBvcgotWE1MIHNjaGVtYXMgaW50byB5b3VyIFdTREwgZG9jdW1lbnQuIFRoaXMgZW5hYmxlcyB5b3UgdG8gaGF2ZSBtb3JlIG1vZHVsYXIKLVdTREwgZG9jdW1lbnRzLiBUaGUgdXNlIG9mIHRoZSAgPGI+aW1wb3J0PC9iPiBzdGF0ZW1lbnQgYWxsb3dzIHRoZSBzZXBhcmF0aW9uCi1vZiB0aGUgZGlmZmVyZW50IGVsZW1lbnRzIG9mIGEgc2VydmljZSBkZWZpbml0aW9uIGludG8gaW5kZXBlbmRlbnQgZG9jdW1lbnRzLAotd2hpY2ggY2FuIHRoZW4gYmUgaW1wb3J0ZWQgYXMgbmVlZGVkLiBUaGlzIHRlY2huaXF1ZSBoZWxwcyBpbiB3cml0aW5nIGNsZWFyZXIKLXNlcnZpY2UgZGVmaW5pdGlvbnMsIGJ5IHNlcGFyYXRpbmcgdGhlIGRlZmluaXRpb25zIGFjY29yZGluZyB0byB0aGVpciBsZXZlbAotb2YgYWJzdHJhY3Rpb24uPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPldlYiBzZXJ2aWNlczxpbmRleHRlcm0+YWRkaW5nIFdTREwgaW1wb3J0IHN0YXRlbWVudHM8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+V1NETDxpbmRleHRlcm0+aW1wb3J0IHN0YXRlbWVudHM8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+VG8gY3JlYXRlIGFuIGltcG9ydCBzdGF0ZW1lbnQsIGZvbGxvdyB0aGVzZSBzdGVwczo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5JbiB0aGUgT3V0bGluZSB2aWV3LCByaWdodC1jbGljayB0aGUgPGI+SW1wb3J0czwvYj4gZm9sZGVyIGFuZAotY2xpY2sgPGI+QWRkIEltcG9ydC48L2I+IFNlbGVjdCB5b3VyIG5ldyBpbXBvcnQgc3RhdGVtZW50LjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SW4gdGhlIFByb3BlcnRpZXMgdmlldywgY2xpY2sgdGhlIDxiPkdlbmVyYWw8L2I+IHBhbmUuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5DbGljayB0aGUgaWNvbiB0byB0aGUgcmlnaHQgb2YgdGhlIDxiPkxvY2F0aW9uPC9iPiBmaWVsZC48L2NtZD4KLTxzdGVwcmVzdWx0PkEgIlNlbGVjdCBmaWxlIiB3aW5kb3cgb3BlbnMuPC9zdGVwcmVzdWx0Pjwvc3RlcD4KLTxzdGVwPjxjbWQ+U2VsZWN0IHRoZSBXU0RMIGZpbGUgb3IgWE1MIFNjaGVtYSBmaWxlIHlvdSB3aXNoIHRvIGltcG9ydC4gQ2xpY2sgPGI+T0s8L2I+LjxkcmFmdC1jb21tZW50PlNlbmQKLWZvciBmaW5hbCBzaWduLW9mZjwvZHJhZnQtY29tbWVudD48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPlR5cGUgYW55IGluZm9ybWF0aW9uIGFib3V0IHRoZSBpbXBvcnQgc3RhdGVtZW50IHlvdSB3aXNoIHRoZSB1c2VyCi10byByZWFkIGluIHRoZSA8Yj5Eb2N1bWVudGF0aW9uPC9iPiBwYW5lLjwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08cmVzdWx0Pk9uY2UgeW91IHNwZWNpZnkgdGhlIGxvY2F0aW9uIG9mIHRoZSBkb2N1bWVudCB5b3Ugd2lzaCB0byBpbXBvcnQsCi10aGUgaW1wb3J0IG9iamVjdCdzIGxhYmVsIGNoYW5nZXMgdG8gcmVmbGVjdCB0aGUgc3BlY2lmaWVkIGxvY2F0aW9uLiBJbXBvcnRlZAotV1NETCBjb21wb25lbnRzIG1heSBub3cgYmUgdmlzaWJsZSB3aXRoaW4gdGhlIGVkaXRvci48L3Jlc3VsdD4KLTwvdGFza2JvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBjb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jd3NkbGVkLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCB0YXNrczwvdGl0bGU+Ci08bGluayBocmVmPSJ0Y3J0d3NkbC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRlZHR3c2RsLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvdGFzaz4KLTw/UHViICowMDAwMDAyMjU4Pz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGNydGltcHQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGNydGltcHQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGE0OTQxMC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RjcnRpbXB0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwNiIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJDcmVhdGluZyBhbiBpbXBvcnQgc3RhdGVtZW50IiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IlRoZSBpbXBvcnQgc3RhdGVtZW50IGlzIHVzZWQgdG8gaW1wb3J0IG90aGVyIFdTREwgZG9jdW1lbnRzIG9yIFhNTCBzY2hlbWFzIGludG8geW91ciBXU0RMIGRvY3VtZW50LiBUaGlzIGVuYWJsZXMgeW91IHRvIGhhdmUgbW9yZSBtb2R1bGFyIFdTREwgZG9jdW1lbnRzLiBUaGUgdXNlIG9mIHRoZSBpbXBvcnQgc3RhdGVtZW50IGFsbG93cyB0aGUgc2VwYXJhdGlvbiBvZiB0aGUgZGlmZmVyZW50IGVsZW1lbnRzIG9mIGEgc2VydmljZSBkZWZpbml0aW9uIGludG8gaW5kZXBlbmRlbnQgZG9jdW1lbnRzLCB3aGljaCBjYW4gdGhlbiBiZSBpbXBvcnRlZCBhcyBuZWVkZWQuIFRoaXMgdGVjaG5pcXVlIGhlbHBzIGluIHdyaXRpbmcgY2xlYXJlciBzZXJ2aWNlIGRlZmluaXRpb25zLCBieSBzZXBhcmF0aW5nIHRoZSBkZWZpbml0aW9ucyBhY2NvcmRpbmcgdG8gdGhlaXIgbGV2ZWwgb2YgYWJzdHJhY3Rpb24uIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBpbXBvcnQgc3RhdGVtZW50IGlzIHVzZWQgdG8gaW1wb3J0IG90aGVyIFdTREwgZG9jdW1lbnRzIG9yIFhNTCBzY2hlbWFzIGludG8geW91ciBXU0RMIGRvY3VtZW50LiBUaGlzIGVuYWJsZXMgeW91IHRvIGhhdmUgbW9yZSBtb2R1bGFyIFdTREwgZG9jdW1lbnRzLiBUaGUgdXNlIG9mIHRoZSBpbXBvcnQgc3RhdGVtZW50IGFsbG93cyB0aGUgc2VwYXJhdGlvbiBvZiB0aGUgZGlmZmVyZW50IGVsZW1lbnRzIG9mIGEgc2VydmljZSBkZWZpbml0aW9uIGludG8gaW5kZXBlbmRlbnQgZG9jdW1lbnRzLCB3aGljaCBjYW4gdGhlbiBiZSBpbXBvcnRlZCBhcyBuZWVkZWQuIFRoaXMgdGVjaG5pcXVlIGhlbHBzIGluIHdyaXRpbmcgY2xlYXJlciBzZXJ2aWNlIGRlZmluaXRpb25zLCBieSBzZXBhcmF0aW5nIHRoZSBkZWZpbml0aW9ucyBhY2NvcmRpbmcgdG8gdGhlaXIgbGV2ZWwgb2YgYWJzdHJhY3Rpb24uIiAvPgotPG1ldGEgY29udGVudD0iV1NETCwgYWRkaW5nIGltcG9ydCBzdGF0ZW1lbnRzLCBXZWIgc2VydmljZXMsIGFkZGluZyBXU0RMIGltcG9ydCBzdGF0ZW1lbnRzIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV1NETCwgYWRkaW5nIGltcG9ydCBzdGF0ZW1lbnRzLCBXZWIgc2VydmljZXMsIGFkZGluZyBXU0RMIGltcG9ydCBzdGF0ZW1lbnRzIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vY29uY2VwdHMvY3dzZGxlZC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0Y3J0d3NkbC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSJ0ZWR0d3NkbC5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRjcnRpbXB0IiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+Q3JlYXRpbmcgYW4gaW1wb3J0IHN0YXRlbWVudDwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idGNydGltcHQiPjxhIG5hbWU9InRjcnRpbXB0Ij48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5DcmVhdGluZyBhbiBpbXBvcnQgc3RhdGVtZW50PC9oMT4KLQotCi0KLTxkaXY+PHA+VGhlIGltcG9ydCBzdGF0ZW1lbnQgaXMgdXNlZCB0byBpbXBvcnQgb3RoZXIgV1NETCBkb2N1bWVudHMgb3IKLVhNTCBzY2hlbWFzIGludG8geW91ciBXU0RMIGRvY3VtZW50LiBUaGlzIGVuYWJsZXMgeW91IHRvIGhhdmUgbW9yZSBtb2R1bGFyCi1XU0RMIGRvY3VtZW50cy4gVGhlIHVzZSBvZiB0aGUgIDxzdHJvbmc+aW1wb3J0PC9zdHJvbmc+IHN0YXRlbWVudCBhbGxvd3MgdGhlIHNlcGFyYXRpb24KLW9mIHRoZSBkaWZmZXJlbnQgZWxlbWVudHMgb2YgYSBzZXJ2aWNlIGRlZmluaXRpb24gaW50byBpbmRlcGVuZGVudCBkb2N1bWVudHMsCi13aGljaCBjYW4gdGhlbiBiZSBpbXBvcnRlZCBhcyBuZWVkZWQuIFRoaXMgdGVjaG5pcXVlIGhlbHBzIGluIHdyaXRpbmcgY2xlYXJlcgotc2VydmljZSBkZWZpbml0aW9ucywgYnkgc2VwYXJhdGluZyB0aGUgZGVmaW5pdGlvbnMgYWNjb3JkaW5nIHRvIHRoZWlyIGxldmVsCi1vZiBhYnN0cmFjdGlvbi48L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRvIGNyZWF0ZSBhbiBpbXBvcnQgc3RhdGVtZW50LCBmb2xsb3cgdGhlc2Ugc3RlcHM6PC9wPgotPC9kaXY+Ci0KLTxvbD4KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIE91dGxpbmUgdmlldywgcmlnaHQtY2xpY2sgdGhlIDxzdHJvbmc+SW1wb3J0czwvc3Ryb25nPiBmb2xkZXIgYW5kCi1jbGljayA8c3Ryb25nPkFkZCBJbXBvcnQuPC9zdHJvbmc+IFNlbGVjdCB5b3VyIG5ldyBpbXBvcnQgc3RhdGVtZW50Ljwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkluIHRoZSBQcm9wZXJ0aWVzIHZpZXcsIGNsaWNrIHRoZSA8c3Ryb25nPkdlbmVyYWw8L3N0cm9uZz4gcGFuZS48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5DbGljayB0aGUgaWNvbiB0byB0aGUgcmlnaHQgb2YgdGhlIDxzdHJvbmc+TG9jYXRpb248L3N0cm9uZz4gZmllbGQuPC9zcGFuPgotIEEgIlNlbGVjdCBmaWxlIiB3aW5kb3cgb3BlbnMuPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5TZWxlY3QgdGhlIFdTREwgZmlsZSBvciBYTUwgU2NoZW1hIGZpbGUgeW91IHdpc2ggdG8gaW1wb3J0LiBDbGljayA8c3Ryb25nPk9LPC9zdHJvbmc+Ljwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPlR5cGUgYW55IGluZm9ybWF0aW9uIGFib3V0IHRoZSBpbXBvcnQgc3RhdGVtZW50IHlvdSB3aXNoIHRoZSB1c2VyCi10byByZWFkIGluIHRoZSA8c3Ryb25nPkRvY3VtZW50YXRpb248L3N0cm9uZz4gcGFuZS48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+T25jZSB5b3Ugc3BlY2lmeSB0aGUgbG9jYXRpb24gb2YgdGhlIGRvY3VtZW50IHlvdSB3aXNoIHRvIGltcG9ydCwKLXRoZSBpbXBvcnQgb2JqZWN0J3MgbGFiZWwgY2hhbmdlcyB0byByZWZsZWN0IHRoZSBzcGVjaWZpZWQgbG9jYXRpb24uIEltcG9ydGVkCi1XU0RMIGNvbXBvbmVudHMgbWF5IG5vdyBiZSB2aXNpYmxlIHdpdGhpbiB0aGUgZWRpdG9yLjwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgY29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jd3NkbGVkLmh0bWwiIHRpdGxlPSJUaGUgV1NETCBlZGl0b3IgYWxsb3dzIHlvdSB0byBlYXNpbHkgYW5kIGdyYXBoaWNhbGx5IGNyZWF0ZSwgbW9kaWZ5LCB2aWV3LCBhbmQgdmFsaWRhdGUgV1NETCBmaWxlcy4iPkVkaXRpbmcgV1NETCBmaWxlcyB3aXRoIHRoZSBXU0RMIEVkaXRvcjwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCB0YXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9InRjcnR3c2RsLmh0bWwiIHRpdGxlPSJZb3UgY2FuIGNyZWF0ZSBhIG5ldywgZW1wdHkgV1NETCBmaWxlLCB0aGVuIGVkaXQgaXQgdXNpbmcgdGhlIFdTREwgZWRpdG9yLiI+Q3JlYXRpbmcgYSBuZXcgV1NETCBmaWxlPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSJ0ZWR0d3NkbC5odG1sIiB0aXRsZT0iT25jZSB5b3UgaGF2ZSBjcmVhdGVkIGEgV1NETCBmaWxlLCB5b3UgY2FuIGVkaXQgaXQgaW4gdGhlIFdTREwgZWRpdG9yLiBZb3UgY2FuIGFsc28gaW1wb3J0IFdTREwgZmlsZXMgeW91IGhhdmUgY3JlYXRlZCBpbnRvIHRoZSB3b3JrYmVuY2ggYW5kIGVkaXQgdGhlbSBpbiB0aGUgV1NETCBlZGl0b3IuIj5FZGl0aW5nIFdTREwgZmlsZXM8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGNydHR5cGUuZGl0YSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGNydHR5cGUuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjY0NmY4ZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RjcnR0eXBlLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICJ0YXNrLmR0ZCI+Ci08dGFzayBpZD0idGNydHR5cGUiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+Q3JlYXRpbmcgYSBuZXcgdHlwZSBmb3IgeW91ciBXU0RMIGZpbGU8L3RpdGxlPgotPHNob3J0ZGVzYz5UeXBlcyBkZXNjcmliZSBhbGwgdGhlIGRhdGEgdHlwZXMgdXNlZCBiZXR3ZWVuIHRoZSBjbGllbnQgYW5kIHNlcnZlci4KLVdTREwgaXMgbm90IHRpZWQgZXhjbHVzaXZlbHkgdG8gYSBzcGVjaWZpYyB0eXBpbmcgc3lzdGVtLCBidXQgaXQgdXNlcyB0aGUKLVczQyBYTUwgU2NoZW1hIHNwZWNpZmljYXRpb24gYXMgaXRzIGRlZmF1bHQgY2hvaWNlLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5XZWIgc2VydmljZXM8aW5kZXh0ZXJtPmNyZWF0aW5nIFdTREwgdHlwZXM8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+V1NETDxpbmRleHRlcm0+dHlwZXM8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+V1NETCBhbGxvd3MgdHlwZSBzeXN0ZW1zIHRvIGJlIGFkZGVkIHZpYSBleHRlbnNpYmlsaXR5IGVsZW1lbnRzLgotQW4gZXh0ZW5zaWJpbGl0eSBlbGVtZW50IG1heSBhcHBlYXIgdW5kZXIgdGhlICA8Yj50eXBlczwvYj4gZWxlbWVudCB0byBpZGVudGlmeQotdGhlIHR5cGUgZGVmaW5pdGlvbiBzeXN0ZW0gYmVpbmcgdXNlZCBhbmQgdG8gcHJvdmlkZSBhbiBYTUwgY29udGFpbmVyIGVsZW1lbnQKLWZvciB0aGUgdHlwZSBkZWZpbml0aW9ucy48L3A+PHA+VG8gYWRkIGFuIFhTRCB0eXBlIG9yIGVsZW1lbnQgdG8geW91ciBXU0RMCi1maWxlOjwvcD48L2NvbnRleHQ+Ci08c3RlcHMtdW5vcmRlcmVkPgotPHN0ZXA+PGNtZD5JbiB0aGUgRGVzaWduIHZpZXcsIGNsaWNrIHRoZSBpbmRpY2F0b3IgaWNvbiB0byB0aGUgcmlnaHQgb2YgdGhlCi1wb3J0IHR5cGUgb2JqZWN0IHRvIGRyaWxsIGRvd24gaW50byB0aGUgc2NoZW1hLiBOb3cgeW91IGNhbiBlZGl0IHRoZSBzY2hlbWEKLWluIHRoZSBYTUwgc2NoZW1hIGVkaXRvci48L2NtZD48L3N0ZXA+Ci08L3N0ZXBzLXVub3JkZXJlZD4KLTxyZXN1bHQ+PHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgWE1MIHNjaGVtYXMsIHJlZmVyIHRvIHRoZSBYTUwgc2NoZW1hCi1lZGl0b3Igb25saW5lIGRvY3VtZW50YXRpb24uPC9wPjwvcmVzdWx0PgotPC90YXNrYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIGNvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIHRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9InRjcnR3c2RsLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPGxpbmsgaHJlZj0idGVkdHdzZGwuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgotPD9QdWIgKjAwMDAwMDE2OTc/PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90Y3J0dHlwZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90Y3J0dHlwZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjI5NzdjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGNydHR5cGUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgbGFuZz0iZW4tdXMiIHhtbDpsYW5nPSJlbi11cyI+Ci08aGVhZD4KLTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9IkRDLnJpZ2h0cy5vd25lciIgY29udGVudD0iKEMpIENvcHlyaWdodCAyMDAwLCAyMDA2IiAvPgotPG1ldGEgY29udGVudD0icHVibGljIiBuYW1lPSJzZWN1cml0eSIgLz4KLTxtZXRhIGNvbnRlbnQ9ImluZGV4LGZvbGxvdyIgbmFtZT0iUm9ib3RzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iUElDUy1MYWJlbCIgY29udGVudD0nKFBJQ1MtMS4xICJodHRwOi8vd3d3LmljcmEub3JnL3JhdGluZ3N2MDIuaHRtbCIgbCBnZW4gdHJ1ZSByIChjeiAxIGx6IDEgbnogMSBveiAxIHZ6IDEpICJodHRwOi8vd3d3LnJzYWMub3JnL3JhdGluZ3N2MDEuaHRtbCIgbCBnZW4gdHJ1ZSByIChuIDAgcyAwIHYgMCBsIDApICJodHRwOi8vd3d3LmNsYXNzaWZ5Lm9yZy9zYWZlc3VyZi8iIGwgZ2VuIHRydWUgciAoU1N+fjAwMCAxKSknIC8+Ci08bWV0YSBjb250ZW50PSJ0YXNrIiBuYW1lPSJEQy5UeXBlIiAvPgotPG1ldGEgbmFtZT0iREMuVGl0bGUiIGNvbnRlbnQ9IkNyZWF0aW5nIGEgbmV3IHR5cGUgZm9yIHlvdXIgV1NETCBmaWxlIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IlR5cGVzIGRlc2NyaWJlIGFsbCB0aGUgZGF0YSB0eXBlcyB1c2VkIGJldHdlZW4gdGhlIGNsaWVudCBhbmQgc2VydmVyLiBXU0RMIGlzIG5vdCB0aWVkIGV4Y2x1c2l2ZWx5IHRvIGEgc3BlY2lmaWMgdHlwaW5nIHN5c3RlbSwgYnV0IGl0IHVzZXMgdGhlIFczQyBYTUwgU2NoZW1hIHNwZWNpZmljYXRpb24gYXMgaXRzIGRlZmF1bHQgY2hvaWNlLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUeXBlcyBkZXNjcmliZSBhbGwgdGhlIGRhdGEgdHlwZXMgdXNlZCBiZXR3ZWVuIHRoZSBjbGllbnQgYW5kIHNlcnZlci4gV1NETCBpcyBub3QgdGllZCBleGNsdXNpdmVseSB0byBhIHNwZWNpZmljIHR5cGluZyBzeXN0ZW0sIGJ1dCBpdCB1c2VzIHRoZSBXM0MgWE1MIFNjaGVtYSBzcGVjaWZpY2F0aW9uIGFzIGl0cyBkZWZhdWx0IGNob2ljZS4iIC8+Ci08bWV0YSBjb250ZW50PSJXU0RMLCBjcmVhdGluZyB0eXBlcywgV2ViIHNlcnZpY2VzLCBjcmVhdGluZyBXU0RMIHR5cGVzIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV1NETCwgY3JlYXRpbmcgdHlwZXMsIFdlYiBzZXJ2aWNlcywgY3JlYXRpbmcgV1NETCB0eXBlcyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idGNydHdzZGwuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idGVkdHdzZGwuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0Y3J0dHlwZSIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkNyZWF0aW5nIGEgbmV3IHR5cGUgZm9yIHlvdXIgV1NETCBmaWxlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0Y3J0dHlwZSI+PGEgbmFtZT0idGNydHR5cGUiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkNyZWF0aW5nIGEgbmV3IHR5cGUgZm9yIHlvdXIgV1NETCBmaWxlPC9oMT4KLQotCi0KLTxkaXY+PHA+VHlwZXMgZGVzY3JpYmUgYWxsIHRoZSBkYXRhIHR5cGVzIHVzZWQgYmV0d2VlbiB0aGUgY2xpZW50IGFuZCBzZXJ2ZXIuCi1XU0RMIGlzIG5vdCB0aWVkIGV4Y2x1c2l2ZWx5IHRvIGEgc3BlY2lmaWMgdHlwaW5nIHN5c3RlbSwgYnV0IGl0IHVzZXMgdGhlCi1XM0MgWE1MIFNjaGVtYSBzcGVjaWZpY2F0aW9uIGFzIGl0cyBkZWZhdWx0IGNob2ljZS48L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPldTREwgYWxsb3dzIHR5cGUgc3lzdGVtcyB0byBiZSBhZGRlZCB2aWEgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cy4KLUFuIGV4dGVuc2liaWxpdHkgZWxlbWVudCBtYXkgYXBwZWFyIHVuZGVyIHRoZSAgPHN0cm9uZz50eXBlczwvc3Ryb25nPiBlbGVtZW50IHRvIGlkZW50aWZ5Ci10aGUgdHlwZSBkZWZpbml0aW9uIHN5c3RlbSBiZWluZyB1c2VkIGFuZCB0byBwcm92aWRlIGFuIFhNTCBjb250YWluZXIgZWxlbWVudAotZm9yIHRoZSB0eXBlIGRlZmluaXRpb25zLjwvcD4KLTxwPlRvIGFkZCBhbiBYU0QgdHlwZSBvciBlbGVtZW50IHRvIHlvdXIgV1NETAotZmlsZTo8L3A+Ci08L2Rpdj4KLQotCi08ZGl2IGNsYXNzPSJwIj48c3Bhbj5JbiB0aGUgRGVzaWduIHZpZXcsIGNsaWNrIHRoZSBpbmRpY2F0b3IgaWNvbiB0byB0aGUgcmlnaHQgb2YgdGhlCi1wb3J0IHR5cGUgb2JqZWN0IHRvIGRyaWxsIGRvd24gaW50byB0aGUgc2NoZW1hLiBOb3cgeW91IGNhbiBlZGl0IHRoZSBzY2hlbWEKLWluIHRoZSBYTUwgc2NoZW1hIGVkaXRvci48L3NwYW4+PC9kaXY+Ci0KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgWE1MIHNjaGVtYXMsIHJlZmVyIHRvIHRoZSBYTUwgc2NoZW1hCi1lZGl0b3Igb25saW5lIGRvY3VtZW50YXRpb24uPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBjb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuaHRtbCIgdGl0bGU9IlRoZSBXU0RMIGVkaXRvciBhbGxvd3MgeW91IHRvIGVhc2lseSBhbmQgZ3JhcGhpY2FsbHkgY3JlYXRlLCBtb2RpZnksIHZpZXcsIGFuZCB2YWxpZGF0ZSBXU0RMIGZpbGVzLiI+RWRpdGluZyBXU0RMIGZpbGVzIHdpdGggdGhlIFdTREwgRWRpdG9yPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIHRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0idGNydHdzZGwuaHRtbCIgdGl0bGU9IllvdSBjYW4gY3JlYXRlIGEgbmV3LCBlbXB0eSBXU0RMIGZpbGUsIHRoZW4gZWRpdCBpdCB1c2luZyB0aGUgV1NETCBlZGl0b3IuIj5DcmVhdGluZyBhIG5ldyBXU0RMIGZpbGU8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRlZHR3c2RsLmh0bWwiIHRpdGxlPSJPbmNlIHlvdSBoYXZlIGNyZWF0ZWQgYSBXU0RMIGZpbGUsIHlvdSBjYW4gZWRpdCBpdCBpbiB0aGUgV1NETCBlZGl0b3IuIFlvdSBjYW4gYWxzbyBpbXBvcnQgV1NETCBmaWxlcyB5b3UgaGF2ZSBjcmVhdGVkIGludG8gdGhlIHdvcmtiZW5jaCBhbmQgZWRpdCB0aGVtIGluIHRoZSBXU0RMIGVkaXRvci4iPkVkaXRpbmcgV1NETCBmaWxlczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90Y3J0d3NkbC5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90Y3J0d3NkbC5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzZkNGRlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGNydHdzZGwuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iCi0gInRhc2suZHRkIj4KLTx0YXNrIGlkPSJ0Y3J0d3NkbCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5DcmVhdGluZyBhIG5ldyBXU0RMIGZpbGU8L3RpdGxlPgotPHNob3J0ZGVzYz5Zb3UgY2FuIGNyZWF0ZSBhIG5ldywgZW1wdHkgV1NETCBmaWxlLCB0aGVuIGVkaXQgaXQgdXNpbmcgdGhlIFdTREwKLWVkaXRvci48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0+V1NETDxpbmRleHRlcm0+Y3JlYXRpbmc8L2luZGV4dGVybT48L2luZGV4dGVybT48aW5kZXh0ZXJtPldlYgotc2VydmljZXM8aW5kZXh0ZXJtPmNyZWF0aW5nIFdTREw8L2luZGV4dGVybT48L2luZGV4dGVybT48L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlRvIGNyZWF0ZSBhIFdTREwgZmlsZSwgZm9sbG93IHRoZXNlIHN0ZXBzOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPkNyZWF0ZSBhIHByb2plY3QgdG8gY29udGFpbiB0aGUgV1NETCBkb2N1bWVudC48L2NtZD48aW5mbz5JdCBkb2VzCi1ub3QgbWF0dGVyIHdoYXQga2luZCBvZiBwcm9qZWN0IHlvdSBjcmVhdGUuPC9pbmZvPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SW4gdGhlIHdvcmtiZW5jaCwgY2xpY2sgIDxiPkZpbGUgPiBOZXcgPiBPdGhlciA+IFdlYiBTZXJ2aWNlcyA+Ci1XU0RMPC9iPi48L2NtZD48aW5mbz5DbGljayA8Yj5OZXh0PC9iPi48L2luZm8+PC9zdGVwPgotPHN0ZXA+PGNtZD5TZWxlY3QgdGhlIHByb2plY3Qgb3IgZm9sZGVyIHRoYXQgd2lsbCBjb250YWluIHRoZSBXU0RMIGZpbGUuPC9jbWQ+Ci08aW5mbz5JbiB0aGUgIDxiPkZpbGUgbmFtZTwvYj4gZmllbGQsIHR5cGUgdGhlIG5hbWUgb2YgdGhlIFdTREwgZmlsZSwgZm9yCi1leGFtcGxlICA8c3lzdGVtb3V0cHV0Pk15V1NETEZpbGUud3NkbDwvc3lzdGVtb3V0cHV0Pi4gVGhlIG5hbWUgb2YgeW91ciBYTUwKLWZpbGUgbXVzdCBlbmQgaW4gIDxzeXN0ZW1vdXRwdXQ+LndzZGw8L3N5c3RlbW91dHB1dD48L2luZm8+PC9zdGVwPgotPHN0ZXA+PGNtZD5DbGljayAgPGI+TmV4dC48L2I+PC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5FbnRlciB0aGUgIGZvbGxvd2luZyBpbmZvcm1hdGlvbjogPC9jbWQ+Ci08c3Vic3RlcHM+Ci08c3Vic3RlcD48Y21kPjxiPlRhcmdldCBuYW1lc3BhY2U8L2I+IGlzIHRoZSBuYW1lc3BhY2UgZm9yIHRoZSBXU0RMIGZpbGUgb3IKLWFjY2VwdCB0aGUgZGVmYXVsdCAoPGNvZGVwaD5odHRwOi8vd3d3LmV4YW1wbGUub3JnLzxpPk15V1NETEZpbGU8L2k+LzwvY29kZXBoPikuPC9jbWQ+Ci08aW5mbz5UaGUgdGFyZ2V0IG5hbWVzcGFjZSBpcyB1c2VkIGZvciB0aGUgbmFtZXMgb2YgbWVzc2FnZXMgYW5kIHRoZSBwb3J0Ci10eXBlLCBiaW5kaW5nIGFuZCBzZXJ2aWNlIGRlZmluZWQgaW4gdGhlIFdTREwgZmlsZS4gVGhlIHZhbHVlIG11c3QgdGFrZSB0aGUKLWZvcm0gb2YgYSB2YWxpZCBVUkkgKGZvciBleGFtcGxlLCA8Y29kZXBoPmh0dHA6Ly93d3cubXljb21wYW55LmNvbS9teXNlcnZpY2UvPC9jb2RlcGg+KTwvaW5mbz4KLTwvc3Vic3RlcD4KLTxzdWJzdGVwPjxjbWQ+VGhlICA8Yj5QcmVmaXg8L2I+IGlzIHRoZSBwcmVmaXggYXNzb2NpYXRlZCB3aXRoIHRoZSB0YXJnZXQKLW5hbWVzcGFjZS48L2NtZD48L3N1YnN0ZXA+Ci08c3Vic3RlcD48Y21kPlNlbGVjdCA8dWljb250cm9sPkNyZWF0ZSBXU0RMIFNrZWxldG9uPC91aWNvbnRyb2w+IGlmIHlvdSB3YW50Ci10aGUgd2l6YXJkIHRvIGNyZWF0ZSB0aGUgc2tlbGV0b24gb2YgdGhlIFdTREwgZmlsZS48L2NtZD48aW5mbz4gVGhpcyB3aWxsCi1nZW5lcmF0ZSB0aGUgV1NETCBlbGVtZW50cyByZXF1aXJlZCBmb3IgeW91ciBzZXJ2aWNlLCBpbmNsdWRpbmcgYmluZGluZ3MsCi1wb3J0cyBhbmQgbWVzc2FnZXMuIFlvdSBjYW4gdGhlbiBtb2RpZnkgdGhlc2UgdG8gbWVldCB0aGUgcmVxdWlyZW1lbnRzIG9mCi15b3VyIFdlYiBzZXJ2aWNlLjwvaW5mbz48L3N1YnN0ZXA+Ci08c3Vic3RlcD48Y21kPklmIHlvdSBoYXZlIGNob3NlbiB0byBjcmVhdGUgYSBXU0RMIHNrZWxldG9uLCBzZWxlY3QgdGhlIGJpbmRpbmcKLW9wdGlvbnMgeW91IHdhbnQgdG8gdXNlIGluIHRoZSBXU0RMIGRvY3VtZW50LiBUaGUgb3B0aW9ucyBhcmUgU09BUCBhbmQgSFRUUC4KLVVzZSB0aGUgU09BUCBwcm90b2NvbCB3aGVuIHlvdSB3YW50IHRvIGV4Y2hhbmdlIHN0cnVjdHVyZWQgYW5kIHR5cGVkIGluZm9ybWF0aW9uLgotVXNlIHRoZSBIVFRQIHByb3RvY29sIHdoZW4geW91IHdhbnQgeW91ciBhcHBsaWNhdGlvbiBjbGllbnQgdG8ganVzdCByZXF1ZXN0Ci1vciB1cGRhdGUgaW5mb3JtYXRpb24uPC9jbWQ+PGluZm8+IElmIHlvdSBzZWxlY3QgU09BUCB5b3UgY2FuCi10aGVuIHNlbGVjdCB0aGUgZW5jb2Rpbmcgc3R5bGUgeW91IHdhbnQgdG8gdXNlLjx1bD4KLTxsaT48Yj5Eb2N1bWVudCBsaXRlcmFsPC9iPi4gRG9jdW1lbnQgc3R5bGUgbWVzc2FnZXMsIGxpdGVyYWwgZW5jb2RpbmcuIFVzZQotdGhpcyBzdHlsZSBvZiBiaW5kaW5nIHdoZW4geW91IHdhbnQgdG8gc2VuZCBTT0FQIG1lc3NhZ2VzIHRoYXQgY2FuIGJlIHZhbGlkYXRlZAotYnkgYW4gWE1MIHZhbGlkYXRvci4gIEFsbCB0aGUgZGF0YSB0eXBlcyBpbiB0aGUgU09BUCBtZXNzYWdlIGJvZHkgYXJlIGRlZmluZWQKLWluIGEgc2NoZW1hLCBzbyB0aGUgV1NETCBwYXJ0cyBtdXN0IHBvaW50IHRvIHNjaGVtYSBlbGVtZW50cy4gPC9saT4KLTxsaT48Yj5SUEMgbGl0ZXJhbDwvYj4uIFJQQyBzdHlsZSBtZXNzYWdlcywgbGl0ZXJhbCBlbmNvZGluZy4gVXNlIHRoaXMgc3R5bGUKLW9mIGJpbmRpbmcgd2hlbiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBvcGVyYXRpb24gbWV0aG9kIG5hbWVzIGluIHlvdXIgU09BUAotbWVzc2FnZXMgc28gYSBzZXJ2ZXIgY2FuIGRpc3BhdGNoIHRoZSBzcGVjaWZpZWQgbWV0aG9kcy4gIERhdGEgdHlwZXMgbXVzdAotYmUgZGVmaW5lZCwgc28gdGhlIFdTREwgcGFydHMgbXVzdCBwb2ludCB0byBYU0QgdHlwZXMuPC9saT4KLTxsaT48Yj5SUEMgZW5jb2RlZDwvYj4uIFJQQyBzdHlsZSBtZXNzYWdlcyBhbmQgU09BUCBlbmNvZGluZy4gVXNlIHRoaXMgc3R5bGUKLW9mIGJpbmRpbmcgd2hlbiB5b3Ugd2FudCB0byBlbmNvZGUgZGF0YSBncmFwaHMgaW4geW91ciBTT0FQIG1lc3NhZ2VzIHNvIGEKLXNlcnZlciBjYW4gZGVzZXJpYWxpemUgdGhlIG9iamVjdCBkYXRhLiAgRGF0YSB0eXBlcyBtdXN0IGJlIGRlZmluZWQsIHNvIHRoZQotV1NETCBwYXJ0cyBtdXN0IHBvaW50IHRvIFhTRCB0eXBlcy48L2xpPgotPC91bD4gSWYgeW91IHNlbGVjdCBIVFRQIHlvdSBjYW4gc2VsZWN0IHdoZXRoZXIgdG8gY3JlYXRlIGFuIEhUVFAgZ2V0dGVyIG9yCi1zZXR0ZXIuPHVsPgotPGxpPjxiPkhUVFAgR0VUPC9iPi4gQSBHRVQgcmVxdWVzdCBmZXRjaGVzIGRhdGEgZnJvbSBhIFdlYiBzZXJ2ZXIgYmFzZWQgb24KLWFuIFVSTCB2YWx1ZSBhbmQgYSBzZXQgb2YgSFRUUCBoZWFkZXJzLiBVc2UgdGhpcyBtZXRob2Qgd2hlbiB5b3Ugd2FudCB0byByZXRyaWV2ZQotaW5mb3JtYXRpb24gc3BlY2lmaWVkIGluIHRoZSByZXF1ZXN0LiA8L2xpPgotPGxpPjxiPkhUVFAgUE9TVDwvYj4uIEEgUE9TVCByZXF1ZXN0IHNlbmRzIGFkZGl0aW9uYWwgZGF0YSB0byB0aGUgc2VydmVyLAotc3BlY2lmaWVkIGFmdGVyIHRoZSBVUkwgYW5kIHRoZSBoZWFkZXJzLiBVc2UgdGhpcyBtZXRob2Qgd2hlbiB5b3Ugd2FudCB0bwotc2VuZCBkYXRhIGVuY2xvc2VkIGluIHRoZSBib2R5IG9mIHRoZSByZXF1ZXN0LjwvbGk+Ci08L3VsPjwvaW5mbz48L3N1YnN0ZXA+Ci08L3N1YnN0ZXBzPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5DbGljayAgPGI+RmluaXNoPC9iPi48L2NtZD48aW5mbz5UaGUgV1NETCBmaWxlIG9wZW5zIGluIHRoZSBXU0RMCi1lZGl0b3IuPC9pbmZvPjwvc3RlcD4KLTwvc3RlcHM+Ci08cmVzdWx0PjxwPklmIHlvdSBjcmVhdGVkIGEgV1NETCBmaWxlIHdpdGggYSBza2VsZXRvbiB1c2luZyBTT0FQIGJpbmRpbmdzLAotaXQgc2hvdWxkIGxvb2sgc2ltaWxhciB0byB0aGUgZm9sbG93aW5nOjwvcD48cD48aW1hZ2UgYWx0PSJJbWFnZSBvZiBhIFdTREwgc2tlbGV0b24gdXNpbmcgU09BUCBiaW5kaW5ncyIKLWhyZWY9Ii4uL2ltYWdlcy9zb2Fwc2tlbC5naWYiIHBsYWNlbWVudD0iYnJlYWsiPjwvaW1hZ2U+PC9wPjxwPklmIHlvdSBjcmVhdGVkCi1hIFdTREwgZmlsZSB3aXRoIGEgc2tlbGV0b24gdXNpbmcgSFRUUCBiaW5kaW5ncywgaXQgc2hvdWxkIGxvb2sgc2ltaWxhciB0bwotdGhlIGZvbGxvd2luZzo8L3A+PHA+PGltYWdlIGFsdD0iSW1hZ2Ugb2YgYSBXU0RMIHNrZWxldG9uIHVzaW5nIEhUVFAgYmluZGluZ3MiCi1ocmVmPSIuLi9pbWFnZXMvaHR0cHNrZWwuZ2lmIiBwbGFjZW1lbnQ9ImJyZWFrIj48L2ltYWdlPjwvcD48L3Jlc3VsdD4KLTwvdGFza2JvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBjb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGwuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PldTREw8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIHRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9InRpbXB3c2RsLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPGxpbmsgaHJlZj0idGVkdHdzZGwuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgotPD9QdWIgKjAwMDAwMDQ5OTE/PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90Y3J0d3NkbC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90Y3J0d3NkbC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTFlMjRhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGNydHdzZGwuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwNyIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJDcmVhdGluZyBhIG5ldyBXU0RMIGZpbGUiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iWW91IGNhbiBjcmVhdGUgYSBuZXcsIGVtcHR5IFdTREwgZmlsZSwgdGhlbiBlZGl0IGl0IHVzaW5nIHRoZSBXU0RMIGVkaXRvci4iIC8+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iWW91IGNhbiBjcmVhdGUgYSBuZXcsIGVtcHR5IFdTREwgZmlsZSwgdGhlbiBlZGl0IGl0IHVzaW5nIHRoZSBXU0RMIGVkaXRvci4iIC8+Ci08bWV0YSBjb250ZW50PSJXU0RMLCBjcmVhdGluZywgV2ViIHNlcnZpY2VzLCBjcmVhdGluZyBXU0RMIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV1NETCwgY3JlYXRpbmcsIFdlYiBzZXJ2aWNlcywgY3JlYXRpbmcgV1NETCIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NkbC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi9jb25jZXB0cy9jd3NkbGVkLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InRpbXB3c2RsLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9InRlZHR3c2RsLmh0bWwiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idGNydHdzZGwiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5DcmVhdGluZyBhIG5ldyBXU0RMIGZpbGU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InRjcnR3c2RsIj48YSBuYW1lPSJ0Y3J0d3NkbCI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+Q3JlYXRpbmcgYSBuZXcgV1NETCBmaWxlPC9oMT4KLQotCi0KLTxkaXY+PHA+WW91IGNhbiBjcmVhdGUgYSBuZXcsIGVtcHR5IFdTREwgZmlsZSwgdGhlbiBlZGl0IGl0IHVzaW5nIHRoZSBXU0RMCi1lZGl0b3IuPC9wPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UbyBjcmVhdGUgYSBXU0RMIGZpbGUsIGZvbGxvdyB0aGVzZSBzdGVwczo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5DcmVhdGUgYSBwcm9qZWN0IHRvIGNvbnRhaW4gdGhlIFdTREwgZG9jdW1lbnQuPC9zcGFuPiBJdCBkb2VzCi1ub3QgbWF0dGVyIHdoYXQga2luZCBvZiBwcm9qZWN0IHlvdSBjcmVhdGUuPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JbiB0aGUgd29ya2JlbmNoLCBjbGljayAgPHN0cm9uZz5GaWxlICZndDsgTmV3ICZndDsgT3RoZXIgJmd0OyBXZWIgU2VydmljZXMgJmd0OwotV1NETDwvc3Ryb25nPi48L3NwYW4+IENsaWNrIDxzdHJvbmc+TmV4dDwvc3Ryb25nPi48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPlNlbGVjdCB0aGUgcHJvamVjdCBvciBmb2xkZXIgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIFdTREwgZmlsZS48L3NwYW4+Ci0gSW4gdGhlICA8c3Ryb25nPkZpbGUgbmFtZTwvc3Ryb25nPiBmaWVsZCwgdHlwZSB0aGUgbmFtZSBvZiB0aGUgV1NETCBmaWxlLCBmb3IKLWV4YW1wbGUgIDx0dCBjbGFzcz0ic3lzb3V0Ij5NeVdTRExGaWxlLndzZGw8L3R0Pi4gVGhlIG5hbWUgb2YgeW91ciBYTUwKLWZpbGUgbXVzdCBlbmQgaW4gIDx0dCBjbGFzcz0ic3lzb3V0Ij4ud3NkbDwvdHQ+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5DbGljayAgPHN0cm9uZz5OZXh0Ljwvc3Ryb25nPjwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkVudGVyIHRoZSAgZm9sbG93aW5nIGluZm9ybWF0aW9uOiA8L3NwYW4+Ci08b2wgdHlwZT0iYSI+Ci08bGkgY2xhc3M9InN1YnN0ZXBleHBhbmQiPjxzcGFuPjxzdHJvbmc+VGFyZ2V0IG5hbWVzcGFjZTwvc3Ryb25nPiBpcyB0aGUgbmFtZXNwYWNlIGZvciB0aGUgV1NETCBmaWxlIG9yCi1hY2NlcHQgdGhlIGRlZmF1bHQgKDxzYW1wIGNsYXNzPSJjb2RlcGgiPmh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvPGVtPk15V1NETEZpbGU8L2VtPi88L3NhbXA+KS48L3NwYW4+Ci0gVGhlIHRhcmdldCBuYW1lc3BhY2UgaXMgdXNlZCBmb3IgdGhlIG5hbWVzIG9mIG1lc3NhZ2VzIGFuZCB0aGUgcG9ydAotdHlwZSwgYmluZGluZyBhbmQgc2VydmljZSBkZWZpbmVkIGluIHRoZSBXU0RMIGZpbGUuIFRoZSB2YWx1ZSBtdXN0IHRha2UgdGhlCi1mb3JtIG9mIGEgdmFsaWQgVVJJIChmb3IgZXhhbXBsZSwgPHNhbXAgY2xhc3M9ImNvZGVwaCI+aHR0cDovL3d3dy5teWNvbXBhbnkuY29tL215c2VydmljZS88L3NhbXA+KQotPC9saT4KLQotPGxpIGNsYXNzPSJzdWJzdGVwZXhwYW5kIj48c3Bhbj5UaGUgIDxzdHJvbmc+UHJlZml4PC9zdHJvbmc+IGlzIHRoZSBwcmVmaXggYXNzb2NpYXRlZCB3aXRoIHRoZSB0YXJnZXQKLW5hbWVzcGFjZS48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdWJzdGVwZXhwYW5kIj48c3Bhbj5TZWxlY3QgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+Q3JlYXRlIFdTREwgU2tlbGV0b248L3NwYW4+IGlmIHlvdSB3YW50Ci10aGUgd2l6YXJkIHRvIGNyZWF0ZSB0aGUgc2tlbGV0b24gb2YgdGhlIFdTREwgZmlsZS48L3NwYW4+ICBUaGlzIHdpbGwKLWdlbmVyYXRlIHRoZSBXU0RMIGVsZW1lbnRzIHJlcXVpcmVkIGZvciB5b3VyIHNlcnZpY2UsIGluY2x1ZGluZyBiaW5kaW5ncywKLXBvcnRzIGFuZCBtZXNzYWdlcy4gWW91IGNhbiB0aGVuIG1vZGlmeSB0aGVzZSB0byBtZWV0IHRoZSByZXF1aXJlbWVudHMgb2YKLXlvdXIgV2ViIHNlcnZpY2UuPC9saT4KLQotPGxpIGNsYXNzPSJzdWJzdGVwZXhwYW5kIj48c3Bhbj5JZiB5b3UgaGF2ZSBjaG9zZW4gdG8gY3JlYXRlIGEgV1NETCBza2VsZXRvbiwgc2VsZWN0IHRoZSBiaW5kaW5nCi1vcHRpb25zIHlvdSB3YW50IHRvIHVzZSBpbiB0aGUgV1NETCBkb2N1bWVudC4gVGhlIG9wdGlvbnMgYXJlIFNPQVAgYW5kIEhUVFAuCi1Vc2UgdGhlIFNPQVAgcHJvdG9jb2wgd2hlbiB5b3Ugd2FudCB0byBleGNoYW5nZSBzdHJ1Y3R1cmVkIGFuZCB0eXBlZCBpbmZvcm1hdGlvbi4KLVVzZSB0aGUgSFRUUCBwcm90b2NvbCB3aGVuIHlvdSB3YW50IHlvdXIgYXBwbGljYXRpb24gY2xpZW50IHRvIGp1c3QgcmVxdWVzdAotb3IgdXBkYXRlIGluZm9ybWF0aW9uLjwvc3Bhbj4gIElmIHlvdSBzZWxlY3QgU09BUCB5b3UgY2FuCi10aGVuIHNlbGVjdCB0aGUgZW5jb2Rpbmcgc3R5bGUgeW91IHdhbnQgdG8gdXNlLjx1bD4KLTxsaT48c3Ryb25nPkRvY3VtZW50IGxpdGVyYWw8L3N0cm9uZz4uIERvY3VtZW50IHN0eWxlIG1lc3NhZ2VzLCBsaXRlcmFsIGVuY29kaW5nLiBVc2UKLXRoaXMgc3R5bGUgb2YgYmluZGluZyB3aGVuIHlvdSB3YW50IHRvIHNlbmQgU09BUCBtZXNzYWdlcyB0aGF0IGNhbiBiZSB2YWxpZGF0ZWQKLWJ5IGFuIFhNTCB2YWxpZGF0b3IuICBBbGwgdGhlIGRhdGEgdHlwZXMgaW4gdGhlIFNPQVAgbWVzc2FnZSBib2R5IGFyZSBkZWZpbmVkCi1pbiBhIHNjaGVtYSwgc28gdGhlIFdTREwgcGFydHMgbXVzdCBwb2ludCB0byBzY2hlbWEgZWxlbWVudHMuIDwvbGk+Ci0KLTxsaT48c3Ryb25nPlJQQyBsaXRlcmFsPC9zdHJvbmc+LiBSUEMgc3R5bGUgbWVzc2FnZXMsIGxpdGVyYWwgZW5jb2RpbmcuIFVzZSB0aGlzIHN0eWxlCi1vZiBiaW5kaW5nIHdoZW4geW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgb3BlcmF0aW9uIG1ldGhvZCBuYW1lcyBpbiB5b3VyIFNPQVAKLW1lc3NhZ2VzIHNvIGEgc2VydmVyIGNhbiBkaXNwYXRjaCB0aGUgc3BlY2lmaWVkIG1ldGhvZHMuICBEYXRhIHR5cGVzIG11c3QKLWJlIGRlZmluZWQsIHNvIHRoZSBXU0RMIHBhcnRzIG11c3QgcG9pbnQgdG8gWFNEIHR5cGVzLjwvbGk+Ci0KLTxsaT48c3Ryb25nPlJQQyBlbmNvZGVkPC9zdHJvbmc+LiBSUEMgc3R5bGUgbWVzc2FnZXMgYW5kIFNPQVAgZW5jb2RpbmcuIFVzZSB0aGlzIHN0eWxlCi1vZiBiaW5kaW5nIHdoZW4geW91IHdhbnQgdG8gZW5jb2RlIGRhdGEgZ3JhcGhzIGluIHlvdXIgU09BUCBtZXNzYWdlcyBzbyBhCi1zZXJ2ZXIgY2FuIGRlc2VyaWFsaXplIHRoZSBvYmplY3QgZGF0YS4gIERhdGEgdHlwZXMgbXVzdCBiZSBkZWZpbmVkLCBzbyB0aGUKLVdTREwgcGFydHMgbXVzdCBwb2ludCB0byBYU0QgdHlwZXMuPC9saT4KLQotPC91bD4KLSBJZiB5b3Ugc2VsZWN0IEhUVFAgeW91IGNhbiBzZWxlY3Qgd2hldGhlciB0byBjcmVhdGUgYW4gSFRUUCBnZXR0ZXIgb3IKLXNldHRlci48dWw+Ci08bGk+PHN0cm9uZz5IVFRQIEdFVDwvc3Ryb25nPi4gQSBHRVQgcmVxdWVzdCBmZXRjaGVzIGRhdGEgZnJvbSBhIFdlYiBzZXJ2ZXIgYmFzZWQgb24KLWFuIFVSTCB2YWx1ZSBhbmQgYSBzZXQgb2YgSFRUUCBoZWFkZXJzLiBVc2UgdGhpcyBtZXRob2Qgd2hlbiB5b3Ugd2FudCB0byByZXRyaWV2ZQotaW5mb3JtYXRpb24gc3BlY2lmaWVkIGluIHRoZSByZXF1ZXN0LiA8L2xpPgotCi08bGk+PHN0cm9uZz5IVFRQIFBPU1Q8L3N0cm9uZz4uIEEgUE9TVCByZXF1ZXN0IHNlbmRzIGFkZGl0aW9uYWwgZGF0YSB0byB0aGUgc2VydmVyLAotc3BlY2lmaWVkIGFmdGVyIHRoZSBVUkwgYW5kIHRoZSBoZWFkZXJzLiBVc2UgdGhpcyBtZXRob2Qgd2hlbiB5b3Ugd2FudCB0bwotc2VuZCBkYXRhIGVuY2xvc2VkIGluIHRoZSBib2R5IG9mIHRoZSByZXF1ZXN0LjwvbGk+Ci0KLTwvdWw+Ci08L2xpPgotCi08L29sPgotCi08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkNsaWNrICA8c3Ryb25nPkZpbmlzaDwvc3Ryb25nPi48L3NwYW4+IFRoZSBXU0RMIGZpbGUgb3BlbnMgaW4gdGhlIFdTREwKLWVkaXRvci48L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5JZiB5b3UgY3JlYXRlZCBhIFdTREwgZmlsZSB3aXRoIGEgc2tlbGV0b24gdXNpbmcgU09BUCBiaW5kaW5ncywKLWl0IHNob3VsZCBsb29rIHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZzo8L3A+Ci08cD48YnIgLz48aW1nIHNyYz0iLi4vaW1hZ2VzL3NvYXBza2VsLmdpZiIgYWx0PSJJbWFnZSBvZiBhIFdTREwgc2tlbGV0b24gdXNpbmcgU09BUCBiaW5kaW5ncyIgLz48YnIgLz48L3A+Ci08cD5JZiB5b3UgY3JlYXRlZAotYSBXU0RMIGZpbGUgd2l0aCBhIHNrZWxldG9uIHVzaW5nIEhUVFAgYmluZGluZ3MsIGl0IHNob3VsZCBsb29rIHNpbWlsYXIgdG8KLXRoZSBmb2xsb3dpbmc6PC9wPgotPHA+PGJyIC8+PGltZyBzcmM9Ii4uL2ltYWdlcy9odHRwc2tlbC5naWYiIGFsdD0iSW1hZ2Ugb2YgYSBXU0RMIHNrZWxldG9uIHVzaW5nIEhUVFAgYmluZGluZ3MiIC8+PGJyIC8+PC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2PgotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCBjb25jZXB0czwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NkbC5odG1sIj5XU0RMPC9hPjwvZGl2PgotPGRpdj48YSBocmVmPSIuLi9jb25jZXB0cy9jd3NkbGVkLmh0bWwiIHRpdGxlPSJUaGUgV1NETCBlZGl0b3IgYWxsb3dzIHlvdSB0byBlYXNpbHkgYW5kIGdyYXBoaWNhbGx5IGNyZWF0ZSwgbW9kaWZ5LCB2aWV3LCBhbmQgdmFsaWRhdGUgV1NETCBmaWxlcy4iPkVkaXRpbmcgV1NETCBmaWxlcyB3aXRoIHRoZSBXU0RMIEVkaXRvcjwvYT48L2Rpdj48L2Rpdj4KLQotPGRpdiBjbGFzcz0ibGlua2xpc3QiPjxzdHJvbmc+UmVsYXRlZCB0YXNrczwvc3Ryb25nPjxiciAvPgotCi08ZGl2PjxhIGhyZWY9InRpbXB3c2RsLmh0bWwiIHRpdGxlPSJZb3UgY2FuIGltcG9ydCBXU0RMIGZpbGVzIGludG8gdGhlIHdvcmtiZW5jaCBhbmQgb3BlbiB0aGVtIGluIHRoZSBXU0RMIGVkaXRvci4gT3BlbmluZyB0aGVtIGluIHRoZSBXU0RMIGVkaXRvciBwcm92aWRlcyB5b3Ugd2l0aCBhbiBvcHBvcnR1bml0eSB0byBoYXZlIGEgc3RydWN0dXJlZCB2aWV3aW5nIG9mIHRoZSBXU0RMIGZpbGUuIj5JbXBvcnRpbmcgYSBXU0RMIGZpbGU8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRlZHR3c2RsLmh0bWwiIHRpdGxlPSJPbmNlIHlvdSBoYXZlIGNyZWF0ZWQgYSBXU0RMIGZpbGUsIHlvdSBjYW4gZWRpdCBpdCBpbiB0aGUgV1NETCBlZGl0b3IuIFlvdSBjYW4gYWxzbyBpbXBvcnQgV1NETCBmaWxlcyB5b3UgaGF2ZSBjcmVhdGVkIGludG8gdGhlIHdvcmtiZW5jaCBhbmQgZWRpdCB0aGVtIGluIHRoZSBXU0RMIGVkaXRvci4iPkVkaXRpbmcgV1NETCBmaWxlczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90ZWR0d3NkbC5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90ZWR0d3NkbC5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMTA0MWUzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGVkdHdzZGwuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iCi0gInRhc2suZHRkIj4KLTx0YXNrIGlkPSJ0ZWR0d3NkbCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5FZGl0aW5nIFdTREwgZmlsZXM8L3RpdGxlPgotPHNob3J0ZGVzYz5PbmNlIHlvdSBoYXZlIGNyZWF0ZWQgYSBXU0RMIGZpbGUsIHlvdSBjYW4gZWRpdCBpdCBpbiB0aGUgV1NETAotZWRpdG9yLiBZb3UgY2FuIGFsc28gaW1wb3J0IFdTREwgZmlsZXMgeW91IGhhdmUgY3JlYXRlZCBpbnRvIHRoZSB3b3JrYmVuY2gKLWFuZCBlZGl0IHRoZW0gaW4gdGhlIFdTREwgZWRpdG9yLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5XU0RMPGluZGV4dGVybT5lZGl0aW5nPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PGluZGV4dGVybT5XZWIKLXNlcnZpY2VzPGluZGV4dGVybT5lZGl0aW5nIFdTREw8L2luZGV4dGVybT48L2luZGV4dGVybT48L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlRvIG9wZW4gYSBXU0RMIGZpbGUgaW4gdGhlIFdTREwgZWRpdG9yLCBkb3VibGUtY2xpY2sgaXQgaW4gdGhlCi1OYXZpZ2F0b3IgdmlldyBvciByaWdodC1jbGljayBpdCBhbmQgY2xpY2sgIDxiPk9wZW4gV2l0aCA+IFdTREwgRWRpdG9yLjwvYj48L3A+PC9jb250ZXh0PgotPC90YXNrYm9keT4KLTx0YXNrIGlkPSJlZGl0aXNvdXJjZXZpZXciPgotPHRpdGxlPkVkaXRpbmcgaW4gdGhlIFNvdXJjZSB2aWV3PC90aXRsZT4KLTx0YXNrYm9keT4KLTxjb250ZXh0PlRvIGVkaXQgYSBXU0RMIGZpbGUgaW4gdGhlIFNvdXJjZSB2aWV3LCBmb2xsb3cgdGhlc2Ugc3RlcHM6PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5PcGVuIHlvdXIgV1NETCBmaWxlIGluIHRoZSBXU0RMIGVkaXRvci48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkNsaWNrIHRoZSAgPGI+U291cmNlPC9iPiB0YWIuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5TZWxlY3QgdGhlIHNvdXJjZSBjb2RlIHlvdSB3YW50IHRvIGVkaXQuPC9jbWQ+PC9zdGVwPgotPC9zdGVwcz4KLTxyZXN1bHQ+PHA+QXQgYW55IHRpbWUsIHlvdSBjYW4gc3dpdGNoIHRvIHRoZSBTb3VyY2UgdmlldyB0byByZXZpZXcgdGhlIHNvdXJjZQotY29kZSBvZiB0aGUgV1NETCBmaWxlLiBZb3UgY2FuIGFsc28gZWRpdCB5b3VyIFdTREwgZmlsZSBkaXJlY3RseSBpbiB0aGUgU291cmNlCi12aWV3LjwvcD48L3Jlc3VsdD4KLTwvdGFza2JvZHk+Ci08L3Rhc2s+Ci08dGFzayBpZD0iZWRpdGVkaXR2aWV3Ij4KLTx0aXRsZT5FZGl0aW5nIGluIHRoZSBEZXNpZ24gdmlldzwvdGl0bGU+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5UaGUgRGVzaWduIHZpZXcgcHJvdmlkZXMgYSBncmFwaGljYWwgd2F5IHRvIGJyb3dzZSBhbmQgZWRpdCB5b3VyCi1XU0RMIGZpbGUuIEVhY2ggdHlwZSBvZiB0b3AgbGV2ZWwgd3NkbCBvYmplY3QgaXMgc2hvd24gd2l0aGluIGEgdGFidWxhciB2aWV3Ci0oZm9yIGV4YW1wbGUsIHNlcnZpY2UsIGJpbmRpbmcsIHBvcnQgdHlwZSkuIEVhY2ggdGFidWxhciB2aWV3IGNvbnRhaW5zIG9uZQotb3IgbW9yZSByb3dzIHRoYXQgcmVwcmVzZW50IHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIG9iamVjdC4gVGhlIHNlcnZpY2UsIGJpbmRpbmcsCi1hbmQgcG9ydCB0eXBlIG9iamVjdHMgYXJlICdsaW5rZWQnLiBBIGxpbmUgZGlzcGxheXMgdG8gZGVub3RlIGEgcmVmZXJlbmNlCi0ob3IgYXNzb2NpYXRpb24pIGJldHdlZW4gdGhlc2Ugb2JqZWN0cy48L3A+PHA+IDxpbWFnZSBhbHQ9IkltYWdlIG9mIGEgV1NETCBmaWxlIG9wZW4gaW4gdGhlIFdTREwgZWRpdG9yIgotaHJlZj0iLi4vaW1hZ2VzL3dzZGxlZGl0b3IuZ2lmIiBwbGFjZW1lbnQ9ImJyZWFrIj48L2ltYWdlPjwvcD48L2NvbnRleHQ+Ci08L3Rhc2tib2R5PgotPC90YXNrPgotPHRhc2sgaWQ9ImVkaXRwcm9wZXJ0aWVzdmlldyI+Ci08dGl0bGU+RWRpdGluZyBpbiB0aGUgUHJvcGVydGllcyB2aWV3PC90aXRsZT4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlRoZSBQcm9wZXJ0aWVzIHZpZXcgZGlzcGxheXMgYSBsaXN0IG9mIGF0dHJpYnV0ZXMgYW5kIGVkaXRhYmxlCi1hdHRyaWJ1dGUgdmFsdWVzIG9mIGEgc2VsZWN0ZWQgd3NkbCBvYmplY3QuPC9wPjxwPlRoZSBQcm9wZXJ0aWVzIHZpZXcgY29udGFpbnMKLXRoZSBmb2xsb3dpbmcgcGFuZXMgKGJ5IGNsaWNraW5nIGFuZCBzZWxlY3RpbmcgdGhlIGFwcHJvcHJpYXRlIHBhbmUpIHRvIGVkaXQ6PC9wPjx1bD4KLTxsaT4gPGI+R2VuZXJhbDwvYj4gcGFuZSwgd2hpY2ggZGlzcGxheXMgYSBsaXN0IG9mIG9iamVjdCBhdHRyaWJ1dGVzLjwvbGk+Ci08bGk+IDxiPkRvY3VtZW50YXRpb248L2I+IHBhbmUsIHdoaWNoIHNwZWNpZmllcyB0aGUgaW5mb3JtYXRpb24geW91IHdhbnQgdGhlCi11c2VyIHRvIHJlYWQuPC9saT4KLTxsaT4gPGI+RXh0ZW5zaWJpbGl0eTwvYj4gcGFuZSwgd2hpY2ggaXMgdXNlZCB0byBhZGQgZXh0ZW5zaW9uIGNvbXBvbmVudHMuPC9saT4KLTwvdWw+PGRyYWZ0LWNvbW1lbnQ+IFtMZWdhY3kgVGl0bGVdIFNob3dpbmcgQmluZGluZ3MgaW4gdGhlIERlc2lnbiBbTGVnYWN5Ci1Db250ZXh0XUJ5IGRlZmF1bHQgYmluZGluZ3MgYXJlIHNob3duIGluIHRoZSBEZXNpZ24gVmlldy4gU2VsZWN0IHRoZSBzaG93L2hpZGUKLWJpbmRpbmcgYnV0dG9uIGF0IHRoZSB0b3AgbGVmdCBvZiB0aGUgRGVzaWduIFZpZXcgdG8gaGlkZSB0aGUgYmluZGluZ3MuIFdpdGgKLXRoZSBiaW5kaW5ncyBoaWRkZW4gYSBzZXJ2aWNlIGNhbiBiZSBicm93c2VkIGZyb20gYSBwdXJlbHkgYWJzdHJhY3QgbGV2ZWwKLXdpdGhvdXQgc2hvd2luZyBiaW5kaW5nIGluZm9ybWF0aW9uLiBXaGVuIHRoZSBuZWVkIGFyaXNlcyB0byB1bmRlcnN0YW5kIHRoZQotY29uY3JldGUgZGV0YWlscyByZXByZXNlbnRlZCBieSB0aGUgYmluZGluZywgc2VsZWN0IHRoZSBzaG93L2hpZGUgYmluZGluZwotYnV0dG9uIGFnYWluIHRvIG1ha2UgdGhlbSB2aXNpYmxlLiB2aWV3IFtXcml0ZXIgY29tbWVudHNdIFJlbW92ZSB0b3BpYyAiU2hvd2luZwotYmluZGluZ3MuLi4iIGJlY2F1c2UgdGhlcmUgaXMgbm8gc2hvdy9oaWRlIGJpbmRpbmcgZnVuY3Rpb24gaW4gdGhlIG5ldyBHVUk8L2RyYWZ0LWNvbW1lbnQ+PC9jb250ZXh0PgotPC90YXNrYm9keT4KLTwvdGFzaz4KLTx0YXNrIGlkPSJlZGl0b3V0bGluZXZpZXciIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+RWRpdGluZyBpbiB0aGUgT3V0bGluZSB2aWV3PC90aXRsZT4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlRoZSBPdXRsaW5lIHZpZXcgd2lsbCBzaG93IHlvdSBhbGwgdGhlIGl0ZW1zIGluIHlvdXIgV1NETCBmaWxlCi1hcyB5b3UgYWRkIHRoZW0uIEluIHRoaXMgdmlldywgeW91IGNhbiBib3RoIGNyZWF0ZSBhbmQgZGVsZXRlIFdTREwgY29tcG9uZW50cy48L3A+PHA+VGhlCi1PdXRsaW5lIHZpZXcgY29udGFpbnMgdGhlIGZvbGxvd2luZyBmb2xkZXJzIHlvdSBjYW4gdXNlIChieSByaWdodC1jbGlja2luZwotYW5kIHNlbGVjdGluZyB0aGUgYXBwcm9wcmlhdGUgb3B0aW9uKSB0byBlZGl0IHlvdXIgV1NETCBmaWxlOjwvcD48dWw+Ci08bGk+IDxiPkltcG9ydHM8L2I+Jm5ic3A7c3RhdGVtZW50cywgd2hpY2ggYXJlIHVzZWQgdG8gYXNzb2NpYXRlIGEgbmFtZXNwYWNlCi13aXRoIGEgZG9jdW1lbnQgbG9jYXRpb24uPC9saT4KLTxsaT4gPGI+VHlwZXM8L2I+LCB3aGljaCBwcm92aWRlIGRhdGEgdHlwZSBkZWZpbml0aW9ucyB1c2VkIHRvIGRlc2NyaWJlIHRoZQotbWVzc2FnZXMgZXhjaGFuZ2VkLiBZb3UgY2Fubm90IGVkaXQgYW55IHR5cGVzIGRpcmVjdGx5IHVzaW5nIHRoaXMgZm9sZGVyLjwvbGk+Ci08bGk+IDxiPlNlcnZpY2VzPC9iPiwgd2hpY2ggYXJlIHVzZWQgdG8gYWdncmVnYXRlIGEgc2V0IG9mIHJlbGF0ZWQgcG9ydHMuPC9saT4KLTxsaT4gPGI+QmluZGluZ3M8L2I+LCB3aGljaCBzcGVjaWZ5IGNvbmNyZXRlIHByb3RvY29sIGFuZCBkYXRhIGZvcm1hdCBzcGVjaWZpY2F0aW9ucwotZm9yIHRoZSBvcGVyYXRpb25zIGFuZCBtZXNzYWdlcyBkZWZpbmVkIGJ5IGEgcGFydGljdWxhciBwb3J0IHR5cGUuPC9saT4KLTxsaT4gPGI+UG9ydCBUeXBlczwvYj4sIHdoaWNoIGFyZSBhIHNldCBvZiBhYnN0cmFjdCBvcGVyYXRpb25zLiBFYWNoIG9wZXJhdGlvbgotcmVmZXJzIHRvIGFuIGlucHV0IG1lc3NhZ2UgYW5kIG91dHB1dCBtZXNzYWdlcy4gPC9saT4KLTxsaT4gPGI+TWVzc2FnZXM8L2I+LCB3aGljaCByZXByZXNlbnQgYW4gYWJzdHJhY3QgZGVmaW5pdGlvbiBvZiB0aGUgZGF0YSBiZWluZwotdHJhbnNtaXR0ZWQuIEEgbWVzc2FnZSBjb25zaXN0cyBvZiBsb2dpY2FsIHBhcnRzLCBlYWNoIG9mIHdoaWNoIGlzIGFzc29jaWF0ZWQKLXdpdGggYSBkZWZpbml0aW9uIHdpdGhpbiBzb21lIHR5cGUgc3lzdGVtLjwvbGk+Ci08L3VsPjwvY29udGV4dD4KLTwvdGFza2JvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBjb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGwuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PldTREw8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIHRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9InRjcnR3c2RsLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPGxpbmsgaHJlZj0idGltcHdzZGwuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgotPC90YXNrPgotPD9QdWIgKjAwMDAwMDQ5NzI/PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90ZWR0d3NkbC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90ZWR0d3NkbC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTAzMmRiLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGVkdHdzZGwuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwNyIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJFZGl0aW5nIFdTREwgZmlsZXMiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iT25jZSB5b3UgaGF2ZSBjcmVhdGVkIGEgV1NETCBmaWxlLCB5b3UgY2FuIGVkaXQgaXQgaW4gdGhlIFdTREwgZWRpdG9yLiBZb3UgY2FuIGFsc28gaW1wb3J0IFdTREwgZmlsZXMgeW91IGhhdmUgY3JlYXRlZCBpbnRvIHRoZSB3b3JrYmVuY2ggYW5kIGVkaXQgdGhlbSBpbiB0aGUgV1NETCBlZGl0b3IuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9Ik9uY2UgeW91IGhhdmUgY3JlYXRlZCBhIFdTREwgZmlsZSwgeW91IGNhbiBlZGl0IGl0IGluIHRoZSBXU0RMIGVkaXRvci4gWW91IGNhbiBhbHNvIGltcG9ydCBXU0RMIGZpbGVzIHlvdSBoYXZlIGNyZWF0ZWQgaW50byB0aGUgd29ya2JlbmNoIGFuZCBlZGl0IHRoZW0gaW4gdGhlIFdTREwgZWRpdG9yLiIgLz4KLTxtZXRhIGNvbnRlbnQ9IldTREwsIGVkaXRpbmcsIFdlYiBzZXJ2aWNlcywgZWRpdGluZyBXU0RMIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV1NETCwgZWRpdGluZywgV2ViIHNlcnZpY2VzLCBlZGl0aW5nIFdTREwiIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRlZHR3c2RsIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+RWRpdGluZyBXU0RMIGZpbGVzPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0ZWR0d3NkbCI+PGEgbmFtZT0idGVkdHdzZGwiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkVkaXRpbmcgV1NETCBmaWxlczwvaDE+Ci0KLQotCi08ZGl2PjxwPk9uY2UgeW91IGhhdmUgY3JlYXRlZCBhIFdTREwgZmlsZSwgeW91IGNhbiBlZGl0IGl0IGluIHRoZSBXU0RMCi1lZGl0b3IuIFlvdSBjYW4gYWxzbyBpbXBvcnQgV1NETCBmaWxlcyB5b3UgaGF2ZSBjcmVhdGVkIGludG8gdGhlIHdvcmtiZW5jaAotYW5kIGVkaXQgdGhlbSBpbiB0aGUgV1NETCBlZGl0b3IuPC9wPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UbyBvcGVuIGEgV1NETCBmaWxlIGluIHRoZSBXU0RMIGVkaXRvciwgZG91YmxlLWNsaWNrIGl0IGluIHRoZQotTmF2aWdhdG9yIHZpZXcgb3IgcmlnaHQtY2xpY2sgaXQgYW5kIGNsaWNrICA8c3Ryb25nPk9wZW4gV2l0aCAmZ3Q7IFdTREwgRWRpdG9yLjwvc3Ryb25nPjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibmVzdGVkMSIgaWQ9ImVkaXRpc291cmNldmlldyI+PGEgbmFtZT0iZWRpdGlzb3VyY2V2aWV3Ij48IS0tIC0tPjwvYT4KLTxoMiBjbGFzcz0idG9waWN0aXRsZTIiPkVkaXRpbmcgaW4gdGhlIFNvdXJjZSB2aWV3PC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPlRvIGVkaXQgYSBXU0RMIGZpbGUgaW4gdGhlIFNvdXJjZSB2aWV3LCBmb2xsb3cgdGhlc2Ugc3RlcHM6PC9kaXY+Ci0KLTxvbD4KLTxsaT48c3Bhbj5PcGVuIHlvdXIgV1NETCBmaWxlIGluIHRoZSBXU0RMIGVkaXRvci48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkNsaWNrIHRoZSAgPHN0cm9uZz5Tb3VyY2U8L3N0cm9uZz4gdGFiLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+U2VsZWN0IHRoZSBzb3VyY2UgY29kZSB5b3Ugd2FudCB0byBlZGl0Ljwvc3Bhbj48L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5BdCBhbnkgdGltZSwgeW91IGNhbiBzd2l0Y2ggdG8gdGhlIFNvdXJjZSB2aWV3IHRvIHJldmlldyB0aGUgc291cmNlCi1jb2RlIG9mIHRoZSBXU0RMIGZpbGUuIFlvdSBjYW4gYWxzbyBlZGl0IHlvdXIgV1NETCBmaWxlIGRpcmVjdGx5IGluIHRoZSBTb3VyY2UKLXZpZXcuPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08L2Rpdj4KLQotPGRpdiBjbGFzcz0ibmVzdGVkMSIgaWQ9ImVkaXRlZGl0dmlldyI+PGEgbmFtZT0iZWRpdGVkaXR2aWV3Ij48IS0tIC0tPjwvYT4KLTxoMiBjbGFzcz0idG9waWN0aXRsZTIiPkVkaXRpbmcgaW4gdGhlIERlc2lnbiB2aWV3PC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRoZSBEZXNpZ24gdmlldyBwcm92aWRlcyBhIGdyYXBoaWNhbCB3YXkgdG8gYnJvd3NlIGFuZCBlZGl0IHlvdXIKLVdTREwgZmlsZS4gRWFjaCB0eXBlIG9mIHRvcCBsZXZlbCB3c2RsIG9iamVjdCBpcyBzaG93biB3aXRoaW4gYSB0YWJ1bGFyIHZpZXcKLShmb3IgZXhhbXBsZSwgc2VydmljZSwgYmluZGluZywgcG9ydCB0eXBlKS4gRWFjaCB0YWJ1bGFyIHZpZXcgY29udGFpbnMgb25lCi1vciBtb3JlIHJvd3MgdGhhdCByZXByZXNlbnQgdGhlIHN0cnVjdHVyZSBvZiB0aGUgb2JqZWN0LiBUaGUgc2VydmljZSwgYmluZGluZywKLWFuZCBwb3J0IHR5cGUgb2JqZWN0cyBhcmUgJ2xpbmtlZCcuIEEgbGluZSBkaXNwbGF5cyB0byBkZW5vdGUgYSByZWZlcmVuY2UKLShvciBhc3NvY2lhdGlvbikgYmV0d2VlbiB0aGVzZSBvYmplY3RzLjwvcD4KLTxwPiA8YnIgLz48aW1nIHNyYz0iLi4vaW1hZ2VzL3dzZGxlZGl0b3IuZ2lmIiBhbHQ9IkltYWdlIG9mIGEgV1NETCBmaWxlIG9wZW4gaW4gdGhlIFdTREwgZWRpdG9yIiAvPjxiciAvPjwvcD4KLTwvZGl2PgotCi08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9Im5lc3RlZDEiIGlkPSJlZGl0cHJvcGVydGllc3ZpZXciPjxhIG5hbWU9ImVkaXRwcm9wZXJ0aWVzdmlldyI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj5FZGl0aW5nIGluIHRoZSBQcm9wZXJ0aWVzIHZpZXc8L2gyPgotCi08ZGl2PgotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VGhlIFByb3BlcnRpZXMgdmlldyBkaXNwbGF5cyBhIGxpc3Qgb2YgYXR0cmlidXRlcyBhbmQgZWRpdGFibGUKLWF0dHJpYnV0ZSB2YWx1ZXMgb2YgYSBzZWxlY3RlZCB3c2RsIG9iamVjdC48L3A+Ci08cD5UaGUgUHJvcGVydGllcyB2aWV3IGNvbnRhaW5zCi10aGUgZm9sbG93aW5nIHBhbmVzIChieSBjbGlja2luZyBhbmQgc2VsZWN0aW5nIHRoZSBhcHByb3ByaWF0ZSBwYW5lKSB0byBlZGl0OjwvcD4KLTx1bD4KLTxsaT4gPHN0cm9uZz5HZW5lcmFsPC9zdHJvbmc+IHBhbmUsIHdoaWNoIGRpc3BsYXlzIGEgbGlzdCBvZiBvYmplY3QgYXR0cmlidXRlcy48L2xpPgotCi08bGk+IDxzdHJvbmc+RG9jdW1lbnRhdGlvbjwvc3Ryb25nPiBwYW5lLCB3aGljaCBzcGVjaWZpZXMgdGhlIGluZm9ybWF0aW9uIHlvdSB3YW50IHRoZQotdXNlciB0byByZWFkLjwvbGk+Ci0KLTxsaT4gPHN0cm9uZz5FeHRlbnNpYmlsaXR5PC9zdHJvbmc+IHBhbmUsIHdoaWNoIGlzIHVzZWQgdG8gYWRkIGV4dGVuc2lvbiBjb21wb25lbnRzLjwvbGk+Ci0KLTwvdWw+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJuZXN0ZWQxIiB4bWw6bGFuZz0iZW4tdXMiIGlkPSJlZGl0b3V0bGluZXZpZXciPjxhIG5hbWU9ImVkaXRvdXRsaW5ldmlldyI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj5FZGl0aW5nIGluIHRoZSBPdXRsaW5lIHZpZXc8L2gyPgotCi08ZGl2PgotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VGhlIE91dGxpbmUgdmlldyB3aWxsIHNob3cgeW91IGFsbCB0aGUgaXRlbXMgaW4geW91ciBXU0RMIGZpbGUKLWFzIHlvdSBhZGQgdGhlbS4gSW4gdGhpcyB2aWV3LCB5b3UgY2FuIGJvdGggY3JlYXRlIGFuZCBkZWxldGUgV1NETCBjb21wb25lbnRzLjwvcD4KLTxwPlRoZQotT3V0bGluZSB2aWV3IGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgZm9sZGVycyB5b3UgY2FuIHVzZSAoYnkgcmlnaHQtY2xpY2tpbmcKLWFuZCBzZWxlY3RpbmcgdGhlIGFwcHJvcHJpYXRlIG9wdGlvbikgdG8gZWRpdCB5b3VyIFdTREwgZmlsZTo8L3A+Ci08dWw+Ci08bGk+IDxzdHJvbmc+SW1wb3J0czwvc3Ryb25nPsKgc3RhdGVtZW50cywgd2hpY2ggYXJlIHVzZWQgdG8gYXNzb2NpYXRlIGEgbmFtZXNwYWNlCi13aXRoIGEgZG9jdW1lbnQgbG9jYXRpb24uPC9saT4KLQotPGxpPiA8c3Ryb25nPlR5cGVzPC9zdHJvbmc+LCB3aGljaCBwcm92aWRlIGRhdGEgdHlwZSBkZWZpbml0aW9ucyB1c2VkIHRvIGRlc2NyaWJlIHRoZQotbWVzc2FnZXMgZXhjaGFuZ2VkLiBZb3UgY2Fubm90IGVkaXQgYW55IHR5cGVzIGRpcmVjdGx5IHVzaW5nIHRoaXMgZm9sZGVyLjwvbGk+Ci0KLTxsaT4gPHN0cm9uZz5TZXJ2aWNlczwvc3Ryb25nPiwgd2hpY2ggYXJlIHVzZWQgdG8gYWdncmVnYXRlIGEgc2V0IG9mIHJlbGF0ZWQgcG9ydHMuPC9saT4KLQotPGxpPiA8c3Ryb25nPkJpbmRpbmdzPC9zdHJvbmc+LCB3aGljaCBzcGVjaWZ5IGNvbmNyZXRlIHByb3RvY29sIGFuZCBkYXRhIGZvcm1hdCBzcGVjaWZpY2F0aW9ucwotZm9yIHRoZSBvcGVyYXRpb25zIGFuZCBtZXNzYWdlcyBkZWZpbmVkIGJ5IGEgcGFydGljdWxhciBwb3J0IHR5cGUuPC9saT4KLQotPGxpPiA8c3Ryb25nPlBvcnQgVHlwZXM8L3N0cm9uZz4sIHdoaWNoIGFyZSBhIHNldCBvZiBhYnN0cmFjdCBvcGVyYXRpb25zLiBFYWNoIG9wZXJhdGlvbgotcmVmZXJzIHRvIGFuIGlucHV0IG1lc3NhZ2UgYW5kIG91dHB1dCBtZXNzYWdlcy4gPC9saT4KLQotPGxpPiA8c3Ryb25nPk1lc3NhZ2VzPC9zdHJvbmc+LCB3aGljaCByZXByZXNlbnQgYW4gYWJzdHJhY3QgZGVmaW5pdGlvbiBvZiB0aGUgZGF0YSBiZWluZwotdHJhbnNtaXR0ZWQuIEEgbWVzc2FnZSBjb25zaXN0cyBvZiBsb2dpY2FsIHBhcnRzLCBlYWNoIG9mIHdoaWNoIGlzIGFzc29jaWF0ZWQKLXdpdGggYSBkZWZpbml0aW9uIHdpdGhpbiBzb21lIHR5cGUgc3lzdGVtLjwvbGk+Ci0KLTwvdWw+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIGNvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsLmh0bWwiPldTREw8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuaHRtbCIgdGl0bGU9IlRoZSBXU0RMIGVkaXRvciBhbGxvd3MgeW91IHRvIGVhc2lseSBhbmQgZ3JhcGhpY2FsbHkgY3JlYXRlLCBtb2RpZnksIHZpZXcsIGFuZCB2YWxpZGF0ZSBXU0RMIGZpbGVzLiI+RWRpdGluZyBXU0RMIGZpbGVzIHdpdGggdGhlIFdTREwgRWRpdG9yPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIHRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0idGNydHdzZGwuaHRtbCIgdGl0bGU9IllvdSBjYW4gY3JlYXRlIGEgbmV3LCBlbXB0eSBXU0RMIGZpbGUsIHRoZW4gZWRpdCBpdCB1c2luZyB0aGUgV1NETCBlZGl0b3IuIj5DcmVhdGluZyBhIG5ldyBXU0RMIGZpbGU8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRpbXB3c2RsLmh0bWwiIHRpdGxlPSJZb3UgY2FuIGltcG9ydCBXU0RMIGZpbGVzIGludG8gdGhlIHdvcmtiZW5jaCBhbmQgb3BlbiB0aGVtIGluIHRoZSBXU0RMIGVkaXRvci4gT3BlbmluZyB0aGVtIGluIHRoZSBXU0RMIGVkaXRvciBwcm92aWRlcyB5b3Ugd2l0aCBhbiBvcHBvcnR1bml0eSB0byBoYXZlIGEgc3RydWN0dXJlZCB2aWV3aW5nIG9mIHRoZSBXU0RMIGZpbGUuIj5JbXBvcnRpbmcgYSBXU0RMIGZpbGU8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotCi0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RpbXB3c2RsLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RpbXB3c2RsLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmZjc3ZGEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90aW1wd3NkbC5kaXRhCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+Ci08IURPQ1RZUEUgdGFzayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRElUQSBUYXNrLy9FTiIKLSAidGFzay5kdGQiPgotPHRhc2sgaWQ9InRpbXB3c2RsIiB4bWw6bGFuZz0iZW4tdXMiPgotPHRpdGxlPkltcG9ydGluZyBhIFdTREwgZmlsZTwvdGl0bGU+Ci08dGl0bGVhbHRzPgotPHNlYXJjaHRpdGxlPkltcG9ydGluZyBXU0RMIGZpbGVzPC9zZWFyY2h0aXRsZT4KLTwvdGl0bGVhbHRzPgotPHNob3J0ZGVzYz5Zb3UgY2FuIGltcG9ydCBXU0RMIGZpbGVzIGludG8gdGhlIHdvcmtiZW5jaCBhbmQgb3BlbiB0aGVtIGluIHRoZQotV1NETCBlZGl0b3IuIE9wZW5pbmcgdGhlbSBpbiB0aGUgV1NETCBlZGl0b3IgcHJvdmlkZXMgeW91IHdpdGggYW4gb3Bwb3J0dW5pdHkKLXRvIGhhdmUgYSBzdHJ1Y3R1cmVkIHZpZXdpbmcgb2YgdGhlIFdTREwgZmlsZS48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0+V1NETDxpbmRleHRlcm0+aW1wb3J0aW5nPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PGluZGV4dGVybT5XZWIKLXNlcnZpY2VzPGluZGV4dGVybT5pbXBvcnRpbmcgV1NETDwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+VGhlIFdlYiBTZXJ2aWNlIHdpemFyZCBhc3Npc3RzIHlvdSBpbiBjcmVhdGluZyBhIG5ldyBXZWIgc2VydmljZQotZnJvbSBhIFdTREwgZmlsZS4gWW91IG11c3QgZmlyc3QgY3JlYXRlIG9yIGltcG9ydCBhIFdTREwgZmlsZS4gQSBXU0RMIGZpbGUKLWNhbiBiZSBjcmVhdGVkIHVzaW5nIHRoZSBXU0RMIGVkaXRvci4gVGhpcyBpcyBkZXNjcmliZWQgaW46ICA8eHJlZiBocmVmPSIuLi90YXNrcy90Y3J0d3NkbC5kaXRhIgotc2NvcGU9InBlZXIiPkNyZWF0aW5nIGEgbmV3IFdTREwgZmlsZTwveHJlZj4uIFRvIGltcG9ydCBhIFdTREwgZmlsZSBmb2xsb3cKLXRoZSBpbnN0cnVjdGlvbnMgYmVsb3cuPC9wPjxwPiA8dWljb250cm9sPlByZXJlcXVpc2l0ZTo8L3VpY29udHJvbD4gQ3JlYXRlCi1hIHByb2plY3QuIEl0IGlzIHJlY29tbWVuZCB0aGF0IHlvdSBjcmVhdGUgYSBXZWIgcHJvamVjdCBzbyB0aGF0IHRoZSBXU0RMCi1jYW4gYmUgZWFzaWx5IHVzZWQgdG8gZ2VuZXJhdGUgYWRkaXRpb25hbCBhcnRpZmFjdHMgYW5kIGRlcGxveWVkLjwvcD48cD5Gb3IKLW1vcmUgaW5mb3JtYXRpb24gb24gY3JlYXRpbmcgYSBXZWIgcHJvamVjdCwgcmVmZXIgdG8gdGhlIFdlYiBhcHBsaWNhdGlvbiBkZXZlbG9wbWVudAotZG9jdW1lbnRhdGlvbi48L3A+PHA+VG8gaW1wb3J0IGEgV1NETCBmaWxlIHRvIHlvdXIgV2ViIHByb2plY3Q6PC9wPjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+U2VsZWN0IHlvdXIgcHJvamVjdCBpbiB0aGUgSjJFRSBOYXZpZ2F0b3IgcGFuZSwgYW5kIGZyb20gdGhlIDx1aWNvbnRyb2w+RmlsZTwvdWljb250cm9sPiBtZW51LAotc2VsZWN0IDx1aWNvbnRyb2w+SW1wb3J0PC91aWNvbnRyb2w+LjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+U2VsZWN0IDx1aWNvbnRyb2w+RmlsZSBTeXN0ZW08L3VpY29udHJvbD4gYW5kIGNsaWNrICA8dWljb250cm9sPk5leHQ8L3VpY29udHJvbD4uPC9jbWQ+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPkNsaWNrIDx1aWNvbnRyb2w+QnJvd3NlPC91aWNvbnRyb2w+IG9uIHRoZSBuZXh0IHBhZ2UKLW9mIHRoZSB3aXphcmQgdG8gc2VsZWN0IHRoZSBkaXJlY3RvcmllcyBmcm9tIHdoaWNoIHlvdSB3b3VsZCBsaWtlIHRvIGFkZCB0aGUKLVdTREwuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgaW1wb3J0IHNlbGVjdGlvbiBwYW5lcywgdXNlIHRoZSBmb2xsb3dpbmcgbWV0aG9kcyB0byBzZWxlY3QKLWV4YWN0bHkgdGhlIHJlc291cmNlcyB5b3Ugd2FudCB0byBhZGQ6ICA8L2NtZD48aW5mbz48dWw+Ci08bGk+RXhwYW5kIHRoZSBoaWVyYXJjaGllcyBpbiB0aGUgbGVmdCBwYW5lIGFuZCBzZWxlY3Qgb3IgY2xlYXIgdGhlIGNoZWNrYm94ZXMKLXRoYXQgcmVwcmVzZW50IHRoZSBmb2xkZXJzIGluIHRoZSBzZWxlY3RlZCBkaXJlY3RvcnkuIFRoZW4gaW4gdGhlIHJpZ2h0IHBhbmUsCi1zZWxlY3Qgb3IgY2xlYXIgY2hlY2tib3hlcyBmb3IgaW5kaXZpZHVhbCBmaWxlcy48L2xpPgotPGxpPkNsaWNrIDx1aWNvbnRyb2w+RmlsdGVyIFR5cGVzPC91aWNvbnRyb2w+IHRvIGZpbHRlciB0aGUgY3VycmVudCBzZWxlY3Rpb24KLWZvciBmaWxlcyBvZiBhIHNwZWNpZmljIHR5cGUuPC9saT4KLTxsaT5DbGljayA8dWljb250cm9sPlNlbGVjdCBBbGw8L3VpY29udHJvbD4gdG8gc2VsZWN0IGFsbCByZXNvdXJjZXMgaW4gdGhlCi1kaXJlY3RvcnksIHRoZW4gZ28gdGhyb3VnaCBhbmQgZGVzZWxlY3QgdGhlIG9uZXMgdGhhdCB5b3UgZG8gbm90IHdhbnQgdG8gYWRkLjwvbGk+Ci08bGk+Q2xpY2sgPHVpY29udHJvbD5EZXNlbGVjdCBBbGw8L3VpY29udHJvbD4gdG8gZGVzZWxlY3QgYWxsIHJlc291cmNlcyBpbgotdGhlIGRpcmVjdG9yeSwgdGhlbiBnbyB0aHJvdWdoIGFuZCBjaG9vc2UgaW5kaXZpZHVhbCByZXNvdXJjZXMgdG8gYWRkLjwvbGk+Ci08L3VsPjwvaW5mbz48L3N0ZXA+Ci08c3RlcD48Y21kPlNwZWNpZnkgdGhlIFdvcmtiZW5jaCBwcm9qZWN0IG9yIGZvbGRlciB0aGF0IHdpbGwgYmUgdGhlIGltcG9ydAotZGVzdGluYXRpb24uPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5XaGVuIHlvdSBoYXZlIGZpbmlzaGVkIHNwZWNpZnlpbmcgeW91ciBpbXBvcnQgb3B0aW9ucywgY2xpY2sgPHVpY29udHJvbD5GaW5pc2guPC91aWNvbnRyb2w+PC9jbWQ+Ci08L3N0ZXA+Ci08L3N0ZXBzPgotPHJlc3VsdD48cD5BZnRlciB5b3UgaGF2ZSBpbXBvcnRlZCBhIFdTREwgZmlsZSBpbnRvIHRoZSB3b3JrYmVuY2ggYW5kIG9wZW5lZAotaXQgaW4gdGhlIFdTREwgZWRpdG9yLCB5b3UgY2FuIGVkaXQgaXQuPC9wPjxwPkFsdGVybmF0ZWx5LCB5b3UgY2FuIGltcG9ydAotYSBXU0RMIGZpbGUgdXNpbmcgdGhlIFdTREwgRXhwbG9yZXIuIEZvciBtb3JlIGluZm9ybWF0aW9uLCByZWZlciB0bzogIDx4cmVmCi1ocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24udWkuZG9jLnVzZXIvdGFza3MvdHdzZGxleHAuZGl0YSIKLXNjb3BlPSJwZWVyIj4gVXNpbmcgdGhlIFdTREwgRXhwbG9yZXI8L3hyZWY+LiAgPC9wPjwvcmVzdWx0PgotPHBvc3RyZXE+PGI+S25vd24gbGltaXRhdGlvbiB3aGVuIGltcG9ydGluZyBXU0RMOjwvYj4gT24gc29tZSA8dG0gdG1jbGFzcz0ic3BlY2lhbCIKLXRtb3duZXI9Ik1pY3Jvc29mdCBDb3Jwb3JhdGlvbiIgdG10eXBlPSJyZWciIHRyYWRlbWFyaz0iV2luZG93cyI+V2luZG93czwvdG0+IHN5c3RlbXMsCi10aGUgIkltcG9ydCB0byBGaWxlIFN5c3RlbSIgb3BlcmF0aW9uIG1heSByZXN1bHQgaW4gc2F2aW5nIHRoZSBIVE1MIGZpbGUgcmF0aGVyCi10aGFuIHRoZSBkZXNpcmVkIFdTREwgZmlsZXMuIFRoZSB3b3JrYXJvdW5kIGFuZCBmaXggZm9yIHRoaXMgcHJvYmxlbSBpcyBkb2N1bWVudGVkCi1pbiA8dG0gdG1jbGFzcz0ic3BlY2lhbCIgdG1vd25lcj0iTWljcm9zb2Z0IENvcnBvcmF0aW9uIiB0bXR5cGU9InJlZyIgdHJhZGVtYXJrPSJNaWNyb3NvZnQiPk1pY3Jvc29mdDwvdG0+IEtub3dsZWRnZQotQmFzZSBhcnRpY2xlIFEyODExMTkuIEEgZGlhbG9nIGJveCBtYXkgYXNrIGlmIHlvdSB3YW50IHRvIHNhdmUgIldTRExGaWxlRG93bmxvYWRlciIsCi10aGUgbWVzc2FnZSBpcyBpbmNvcnJlY3QgYW5kIGRvZXMgbm90IGFmZmVjdCB0aGUgYWN0dWFsIG5hbWUgb2YgdGhlIGZpbGUgc2F2ZWQuCi1JZiB0aGUgZmlsZSBleHRlbnNpb24gZGlzcGxheXMgWE1MIHdoZW4gc2VsZWN0aW5nIHRoZSBzYXZlIGxvY2F0aW9uIGZvciB0aGUKLVdTREwgZG9jdW1lbnQsIGlnbm9yZSB0aGUgaW5jb3JyZWN0IGV4dGVuc2lvbiBhbmQgY29udGludWUgdGhlIHNhdmUuIFRoZSBmaWxlCi13aWxsIGJlIHNhdmVkIHdpdGggdGhlIFdTREwgZXh0ZW5zaW9uLjwvcG9zdHJlcT4KLTwvdGFza2JvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBjb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzZGwuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PldTREw8L2xpbmt0ZXh0PjwvbGluaz4KLTxsaW5rIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIHRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9InRjcnR3c2RsLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPGxpbmsgaHJlZj0idGVkdHdzZGwuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgotPD9QdWIgKjAwMDAwMDQ1MTc/PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90aW1wd3NkbC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90aW1wd3NkbC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDEyNmU3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdGltcHdzZGwuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwNyIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJJbXBvcnRpbmcgYSBXU0RMIGZpbGUiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iWW91IGNhbiBpbXBvcnQgV1NETCBmaWxlcyBpbnRvIHRoZSB3b3JrYmVuY2ggYW5kIG9wZW4gdGhlbSBpbiB0aGUgV1NETCBlZGl0b3IuIE9wZW5pbmcgdGhlbSBpbiB0aGUgV1NETCBlZGl0b3IgcHJvdmlkZXMgeW91IHdpdGggYW4gb3Bwb3J0dW5pdHkgdG8gaGF2ZSBhIHN0cnVjdHVyZWQgdmlld2luZyBvZiB0aGUgV1NETCBmaWxlLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJZb3UgY2FuIGltcG9ydCBXU0RMIGZpbGVzIGludG8gdGhlIHdvcmtiZW5jaCBhbmQgb3BlbiB0aGVtIGluIHRoZSBXU0RMIGVkaXRvci4gT3BlbmluZyB0aGVtIGluIHRoZSBXU0RMIGVkaXRvciBwcm92aWRlcyB5b3Ugd2l0aCBhbiBvcHBvcnR1bml0eSB0byBoYXZlIGEgc3RydWN0dXJlZCB2aWV3aW5nIG9mIHRoZSBXU0RMIGZpbGUuIiAvPgotPG1ldGEgY29udGVudD0iV1NETCwgaW1wb3J0aW5nLCBXZWIgc2VydmljZXMsIGltcG9ydGluZyBXU0RMIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV1NETCwgaW1wb3J0aW5nLCBXZWIgc2VydmljZXMsIGltcG9ydGluZyBXU0RMIiBuYW1lPSJrZXl3b3JkcyIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsLmh0bWwiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idGNydHdzZGwuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0idGVkdHdzZGwuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0aW1wd3NkbCIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPkltcG9ydGluZyBXU0RMIGZpbGVzPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0aW1wd3NkbCI+PGEgbmFtZT0idGltcHdzZGwiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPkltcG9ydGluZyBhIFdTREwgZmlsZTwvaDE+Ci0KLQotCi0KLTxkaXY+PHA+WW91IGNhbiBpbXBvcnQgV1NETCBmaWxlcyBpbnRvIHRoZSB3b3JrYmVuY2ggYW5kIG9wZW4gdGhlbSBpbiB0aGUKLVdTREwgZWRpdG9yLiBPcGVuaW5nIHRoZW0gaW4gdGhlIFdTREwgZWRpdG9yIHByb3ZpZGVzIHlvdSB3aXRoIGFuIG9wcG9ydHVuaXR5Ci10byBoYXZlIGEgc3RydWN0dXJlZCB2aWV3aW5nIG9mIHRoZSBXU0RMIGZpbGUuPC9wPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UaGUgV2ViIFNlcnZpY2Ugd2l6YXJkIGFzc2lzdHMgeW91IGluIGNyZWF0aW5nIGEgbmV3IFdlYiBzZXJ2aWNlCi1mcm9tIGEgV1NETCBmaWxlLiBZb3UgbXVzdCBmaXJzdCBjcmVhdGUgb3IgaW1wb3J0IGEgV1NETCBmaWxlLiBBIFdTREwgZmlsZQotY2FuIGJlIGNyZWF0ZWQgdXNpbmcgdGhlIFdTREwgZWRpdG9yLiBUaGlzIGlzIGRlc2NyaWJlZCBpbjogIDxhIGhyZWY9Ii4uL3Rhc2tzL3RjcnR3c2RsLmh0bWwiPkNyZWF0aW5nIGEgbmV3IFdTREwgZmlsZTwvYT4uIFRvIGltcG9ydCBhIFdTREwgZmlsZSBmb2xsb3cKLXRoZSBpbnN0cnVjdGlvbnMgYmVsb3cuPC9wPgotPHA+IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlByZXJlcXVpc2l0ZTo8L3NwYW4+IENyZWF0ZQotYSBwcm9qZWN0LiBJdCBpcyByZWNvbW1lbmQgdGhhdCB5b3UgY3JlYXRlIGEgV2ViIHByb2plY3Qgc28gdGhhdCB0aGUgV1NETAotY2FuIGJlIGVhc2lseSB1c2VkIHRvIGdlbmVyYXRlIGFkZGl0aW9uYWwgYXJ0aWZhY3RzIGFuZCBkZXBsb3llZC48L3A+Ci08cD5Gb3IKLW1vcmUgaW5mb3JtYXRpb24gb24gY3JlYXRpbmcgYSBXZWIgcHJvamVjdCwgcmVmZXIgdG8gdGhlIFdlYiBhcHBsaWNhdGlvbiBkZXZlbG9wbWVudAotZG9jdW1lbnRhdGlvbi48L3A+Ci08cD5UbyBpbXBvcnQgYSBXU0RMIGZpbGUgdG8geW91ciBXZWIgcHJvamVjdDo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5TZWxlY3QgeW91ciBwcm9qZWN0IGluIHRoZSBKMkVFIE5hdmlnYXRvciBwYW5lLCBhbmQgZnJvbSB0aGUgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RmlsZTwvc3Bhbj4gbWVudSwKLXNlbGVjdCA8c3BhbiBjbGFzcz0idWljb250cm9sIj5JbXBvcnQ8L3NwYW4+Ljwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPlNlbGVjdCA8c3BhbiBjbGFzcz0idWljb250cm9sIj5GaWxlIFN5c3RlbTwvc3Bhbj4gYW5kIGNsaWNrICA8c3BhbiBjbGFzcz0idWljb250cm9sIj5OZXh0PC9zcGFuPi48L3NwYW4+Ci08L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPkNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkJyb3dzZTwvc3Bhbj4gb24gdGhlIG5leHQgcGFnZQotb2YgdGhlIHdpemFyZCB0byBzZWxlY3QgdGhlIGRpcmVjdG9yaWVzIGZyb20gd2hpY2ggeW91IHdvdWxkIGxpa2UgdG8gYWRkIHRoZQotV1NETC48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JbiB0aGUgaW1wb3J0IHNlbGVjdGlvbiBwYW5lcywgdXNlIHRoZSBmb2xsb3dpbmcgbWV0aG9kcyB0byBzZWxlY3QKLWV4YWN0bHkgdGhlIHJlc291cmNlcyB5b3Ugd2FudCB0byBhZGQ6ICA8L3NwYW4+IDx1bD4KLTxsaT5FeHBhbmQgdGhlIGhpZXJhcmNoaWVzIGluIHRoZSBsZWZ0IHBhbmUgYW5kIHNlbGVjdCBvciBjbGVhciB0aGUgY2hlY2tib3hlcwotdGhhdCByZXByZXNlbnQgdGhlIGZvbGRlcnMgaW4gdGhlIHNlbGVjdGVkIGRpcmVjdG9yeS4gVGhlbiBpbiB0aGUgcmlnaHQgcGFuZSwKLXNlbGVjdCBvciBjbGVhciBjaGVja2JveGVzIGZvciBpbmRpdmlkdWFsIGZpbGVzLjwvbGk+Ci0KLTxsaT5DbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5GaWx0ZXIgVHlwZXM8L3NwYW4+IHRvIGZpbHRlciB0aGUgY3VycmVudCBzZWxlY3Rpb24KLWZvciBmaWxlcyBvZiBhIHNwZWNpZmljIHR5cGUuPC9saT4KLQotPGxpPkNsaWNrIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPlNlbGVjdCBBbGw8L3NwYW4+IHRvIHNlbGVjdCBhbGwgcmVzb3VyY2VzIGluIHRoZQotZGlyZWN0b3J5LCB0aGVuIGdvIHRocm91Z2ggYW5kIGRlc2VsZWN0IHRoZSBvbmVzIHRoYXQgeW91IGRvIG5vdCB3YW50IHRvIGFkZC48L2xpPgotCi08bGk+Q2xpY2sgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RGVzZWxlY3QgQWxsPC9zcGFuPiB0byBkZXNlbGVjdCBhbGwgcmVzb3VyY2VzIGluCi10aGUgZGlyZWN0b3J5LCB0aGVuIGdvIHRocm91Z2ggYW5kIGNob29zZSBpbmRpdmlkdWFsIHJlc291cmNlcyB0byBhZGQuPC9saT4KLQotPC91bD4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+U3BlY2lmeSB0aGUgV29ya2JlbmNoIHByb2plY3Qgb3IgZm9sZGVyIHRoYXQgd2lsbCBiZSB0aGUgaW1wb3J0Ci1kZXN0aW5hdGlvbi48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5XaGVuIHlvdSBoYXZlIGZpbmlzaGVkIHNwZWNpZnlpbmcgeW91ciBpbXBvcnQgb3B0aW9ucywgY2xpY2sgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+RmluaXNoLjwvc3Bhbj48L3NwYW4+Ci08L2xpPgotCi08L29sPgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5BZnRlciB5b3UgaGF2ZSBpbXBvcnRlZCBhIFdTREwgZmlsZSBpbnRvIHRoZSB3b3JrYmVuY2ggYW5kIG9wZW5lZAotaXQgaW4gdGhlIFdTREwgZWRpdG9yLCB5b3UgY2FuIGVkaXQgaXQuPC9wPgotPHA+QWx0ZXJuYXRlbHksIHlvdSBjYW4gaW1wb3J0Ci1hIFdTREwgZmlsZSB1c2luZyB0aGUgV1NETCBFeHBsb3Jlci4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJlZmVyIHRvOiAgPGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2RsZXhwLmh0bWwiPlVzaW5nIHRoZSBXU0RMIEV4cGxvcmVyPC9hPi4gIDwvcD4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48c3Ryb25nPktub3duIGxpbWl0YXRpb24gd2hlbiBpbXBvcnRpbmcgV1NETDo8L3N0cm9uZz4gT24gc29tZSBXaW5kb3dzPHN1cD7Crjwvc3VwPiBzeXN0ZW1zLAotdGhlICJJbXBvcnQgdG8gRmlsZSBTeXN0ZW0iIG9wZXJhdGlvbiBtYXkgcmVzdWx0IGluIHNhdmluZyB0aGUgSFRNTCBmaWxlIHJhdGhlcgotdGhhbiB0aGUgZGVzaXJlZCBXU0RMIGZpbGVzLiBUaGUgd29ya2Fyb3VuZCBhbmQgZml4IGZvciB0aGlzIHByb2JsZW0gaXMgZG9jdW1lbnRlZAotaW4gTWljcm9zb2Z0PHN1cD7Crjwvc3VwPiBLbm93bGVkZ2UKLUJhc2UgYXJ0aWNsZSBRMjgxMTE5LiBBIGRpYWxvZyBib3ggbWF5IGFzayBpZiB5b3Ugd2FudCB0byBzYXZlICJXU0RMRmlsZURvd25sb2FkZXIiLAotdGhlIG1lc3NhZ2UgaXMgaW5jb3JyZWN0IGFuZCBkb2VzIG5vdCBhZmZlY3QgdGhlIGFjdHVhbCBuYW1lIG9mIHRoZSBmaWxlIHNhdmVkLgotSWYgdGhlIGZpbGUgZXh0ZW5zaW9uIGRpc3BsYXlzIFhNTCB3aGVuIHNlbGVjdGluZyB0aGUgc2F2ZSBsb2NhdGlvbiBmb3IgdGhlCi1XU0RMIGRvY3VtZW50LCBpZ25vcmUgdGhlIGluY29ycmVjdCBleHRlbnNpb24gYW5kIGNvbnRpbnVlIHRoZSBzYXZlLiBUaGUgZmlsZQotd2lsbCBiZSBzYXZlZCB3aXRoIHRoZSBXU0RMIGV4dGVuc2lvbi48L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIGNvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsLmh0bWwiPldTREw8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuaHRtbCIgdGl0bGU9IlRoZSBXU0RMIGVkaXRvciBhbGxvd3MgeW91IHRvIGVhc2lseSBhbmQgZ3JhcGhpY2FsbHkgY3JlYXRlLCBtb2RpZnksIHZpZXcsIGFuZCB2YWxpZGF0ZSBXU0RMIGZpbGVzLiI+RWRpdGluZyBXU0RMIGZpbGVzIHdpdGggdGhlIFdTREwgRWRpdG9yPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIHRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0idGNydHdzZGwuaHRtbCIgdGl0bGU9IllvdSBjYW4gY3JlYXRlIGEgbmV3LCBlbXB0eSBXU0RMIGZpbGUsIHRoZW4gZWRpdCBpdCB1c2luZyB0aGUgV1NETCBlZGl0b3IuIj5DcmVhdGluZyBhIG5ldyBXU0RMIGZpbGU8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9InRlZHR3c2RsLmh0bWwiIHRpdGxlPSJPbmNlIHlvdSBoYXZlIGNyZWF0ZWQgYSBXU0RMIGZpbGUsIHlvdSBjYW4gZWRpdCBpdCBpbiB0aGUgV1NETCBlZGl0b3IuIFlvdSBjYW4gYWxzbyBpbXBvcnQgV1NETCBmaWxlcyB5b3UgaGF2ZSBjcmVhdGVkIGludG8gdGhlIHdvcmtiZW5jaCBhbmQgZWRpdCB0aGVtIGluIHRoZSBXU0RMIGVkaXRvci4iPkVkaXRpbmcgV1NETCBmaWxlczwvYT48L2Rpdj48L2Rpdj4KLTwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90c2V0YmluZC5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90c2V0YmluZC5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGYzMDZjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdHNldGJpbmQuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDEwOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICJ0YXNrLmR0ZCI+Ci08dGFzayBpZD0idHNldGJpbmQiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+U2V0dGluZyBhIGJpbmRpbmc8L3RpdGxlPgotPHNob3J0ZGVzYz5BIGJpbmRpbmcgaXMgYSB0b3AgbGV2ZWwgV1NETCBvYmplY3QgdGhhdCBwcm92aWRlcyBhIGNvbmNyZXRlIHNwZWNpZmljYXRpb24KLXJlZ2FyZGluZyB0aGUgdHJhbnNtaXNzaW9uIG9mIG1lc3NhZ2VzIHRvIGFuZCBmcm9tIGEgd2ViIHNlcnZpY2UuIEEgYmluZGluZwotcmVmZXJlbmNlcyBleGFjdGx5IG9uZSBwb3J0IHR5cGUuIFRoZSBzdHJ1Y3R1cmUgb2YgYSBiaW5kaW5nIGNvcnJlc3BvbmRzIHZlcnkKLWNsb3NlbHkgdG8gdGhhdCBvZiB0aGUgcG9ydCB0eXBlLiBUaGUgYmluZGluZyBjb250YWlucyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzCi0oZm9yIGV4YW1wbGUsIHNvYXAsIGh0dHAsIGFuZCBtaW1lKSB0aGF0IHNwZWNpZnkgcHJvdG9jb2wgc3BlY2lmaWMgZGV0YWlscy4KLUVhY2ggcG9ydCB3aXRoaW4gYSBzZXJ2aWNlIHJlZmVyZW5jZXMgZXhhY3RseSBvbmUgYmluZGluZy48L3Nob3J0ZGVzYz4KLTxwcm9sb2c+PG1ldGFkYXRhPgotPGtleXdvcmRzPjxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5iaW5kaW5nczxpbmRleHRlcm0+Y3JlYXRpbmc8L2luZGV4dGVybT48L2luZGV4dGVybT48aW5kZXh0ZXJtPnNldHRpbmcgV1NETCBiaW5kaW5nczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPGluZGV4dGVybT5XU0RMPGluZGV4dGVybT5iaW5kaW5nczwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPgotPC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5Zb3UgY2FuIGNyZWF0ZSBhIGJpbmRpbmcgYnkgcmlnaHQgY2xpY2tpbmcgaW4gYW55IGJsYW5rIHNwYWNlCi1pbiB0aGUgRGVzaWduIHZpZXcgYW5kIHNlbGVjdGluZyA8dWljb250cm9sPkFkZCBCaW5kaW5nPC91aWNvbnRyb2w+LiBZb3UgY2FuCi1jcmVhdGUgYSBuZXcgYmluZGluZywgcmV1c2UgYW4gZXhpc3Rpbmcgb25lLCBvciBpbXBvcnQgb25lLiA8L3A+PC9jb250ZXh0PgotPC90YXNrYm9keT4KLTx0YXNrIGlkPSJjcmVhdGVuZXdiaW5kIj4KLTx0aXRsZT5DcmVhdGluZyBhIG5ldyBiaW5kaW5nPC90aXRsZT4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlRvIGNyZWF0ZSBhIG5ldyBiaW5kaW5nIGZvciB5b3VyIHBvcnQsIGZvbGxvdyB0aGVzZSBzdGVwczo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5JbiB0aGUgRGVzaWduIHZpZXcsIHJpZ2h0LWNsaWNrIHlvdXIgcG9ydCBhbmQgY2xpY2sgPGI+U2V0IEJpbmRpbmcKLT4gTmV3IEJpbmRpbmc8L2I+LjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SW4gdGhlIDxiPk5hbWU8L2I+IGZpZWxkLCB0eXBlIHRoZSBuYW1lIG9mIHRoZSBiaW5kaW5nLjwvY21kPjxpbmZvPlRoZQotbmFtZSBzaG91bGQgYmUgdW5pcXVlIGFtb25nIGFsbCBiaW5kaW5ncyBkZWZpbmVkIHdpdGhpbiB0aGUgZW5jbG9zaW5nIFdTREwKLWRvY3VtZW50LiBDbGljayA8Yj5PSy48L2I+IFRvIHNlbGVjdCB0aGUgbmV3IGJpbmRpbmcsIGNsaWNrIHRoZSBiaW5kaW5nIG9iamVjdC48L2luZm8+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPkEgPGI+UG9ydCBUeXBlPC9iPiBpcyBhIG5hbWVkIHNldCBvZiBhYnN0cmFjdCBvcGVyYXRpb25zIGFuZCB0aGUKLWFic3RyYWN0IG1lc3NhZ2VzIGludm9sdmVkLiBZb3UgY2FuIGVpdGhlciBjcmVhdGUgYSBuZXcgcG9ydCB0eXBlIGZvciB5b3VyCi1iaW5kaW5nLCByZXVzZSBhbiBleGlzdGluZyBvbmUsIG9yIGltcG9ydCBvbmUuIFJlZmVyIHRvIHRoZSByZWxhdGVkIHRhc2tzCi1mb3IgbW9yZSBkZXRhaWxzLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+VHlwZSBhbnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGJpbmRpbmcgeW91IHdhbnQgdGhlIHVzZXIgdG8gcmVhZAotaW4gdGhlIDxiPkRvY3VtZW50YXRpb248L2I+IHBhbmUuPC9jbWQ+PC9zdGVwPgotPC9zdGVwcz4KLTxyZXN1bHQ+PHA+IDxiPlRpcDwvYj46IFlvdSBjYW4gYWxzbyBjcmVhdGUgYSBuZXcgYmluZGluZyBmb3IgeW91ciBwb3J0IHVzaW5nCi10aGUgT3V0bGluZSB2aWV3LjwvcD48L3Jlc3VsdD4KLTwvdGFza2JvZHk+Ci08L3Rhc2s+Ci08dGFzayBpZD0icmV1c2ViaW5kaW5nIj4KLTx0aXRsZT5SZXVzaW5nIGEgYmluZGluZyBmb3IgYSBwb3J0PC90aXRsZT4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPlRvIHJldXNlIGEgYmluZGluZyBmb3IgeW91ciBwb3J0LCBmb2xsb3cgdGhlc2Ugc3RlcHM6PC9wPjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+SW4gdGhlIERlc2lnbiB2aWV3LCBzZWxlY3QgeW91ciBwb3J0LjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SW4gdGhlIFByb3BlcnRpZXMgdmlldywgY2xpY2sgdGhlIDxiPkdlbmVyYWw8L2I+IHBhbmUuPC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5Gcm9tIHRoZSA8Yj5CaW5kaW5nPC9iPiBkcm9wIGRvd24gbGlzdCwgc2VsZWN0IHRoZSBiaW5kaW5nIHlvdQotd2FudCB0byB1c2UuPC9jbWQ+PC9zdGVwPgotPC9zdGVwcz4KLTwvdGFza2JvZHk+Ci08L3Rhc2s+Ci08dGFzayBpZD0icmVnZW5lcmF0aW5nYWJpbmRpbmciPgotPHRpdGxlPlJlZ2VuZXJhdGluZyBhIGJpbmRpbmc8L3RpdGxlPgotPHRhc2tib2R5PgotPGNvbnRleHQ+VG8gcmVnZW5lcmF0ZSBhIGJpbmRpbmc6PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5SaWdodC1jbGljayB0aGUgYmluZGluZyB5b3Ugd2FudCB0byByZWdlbmVyYXRlLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+U2VsZWN0IDx1aWNvbnRyb2w+R2VuZXJhdGUgQmluZGluZyBDb250ZW50PC91aWNvbnRyb2w+LjxkcmFmdC1jb21tZW50PlJBVExDMDA5NzU3MTEKLXByb3ZpZGUgbW9yZSBpbmZvIGFib3V0IFNPQVAgYmluZGluZyBvcHRpb25zPC9kcmFmdC1jb21tZW50PjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+U3BlY2lmeSBhbiByZXF1aXJlZCBiaW5kaW5nIGluZm9ybWF0aW9uLiBJZiB5b3UgYXJlIG1vZGlmeWluZyBhbgotZXhpc3RpbmcgYmluZGluZywgZW5zdXJlIHRoYXQgeW91IHNlbGVjdCB0aGUgPHVpY29udHJvbD5PdmVyd3JpdGUgZXhpc3RpbmcKLWJpbmRpbmcgaW5mb3JtYXRpb248L3VpY29udHJvbD4gY2hlY2sgYm94LjwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08L3Rhc2tib2R5PgotPC90YXNrPgotPHRhc2sgaWQ9ImltcGJpbmRpbmciPgotPHRpdGxlPkltcG9ydCBhbiBleGlzdGluZyBiaW5kaW5nPC90aXRsZT4KLTx0YXNrYm9keT4KLTxjb250ZXh0PlRvIGltcG9ydCBhbiBleGlzdGluZyBiaW5kaW5nIGZvciB5b3VyIHBvcnQsIGZvbGxvdyB0aGVzZSBzdGVwczo8L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPkluIHRoZSBEZXNpZ24gdmlldywgcmlnaHQtY2xpY2sgeW91ciBwb3J0IGFuZCBjbGljayAgPGI+U2V0IEJpbmRpbmcKLT4gRXhpc3RpbmcgQmluZGluZy48L2I+PC9jbWQ+PC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgPGI+TmFtZTwvYj4gZmllbGQsIHR5cGUgYSBzZWFyY2ggc3RyaW5nIHRvIGZpbHRlciB0aGUgbGlzdAotb3IgbGVhdmUgdGhlIGZpZWxkIGJsYW5rIHRvIHZpZXcgYWxsLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+WW91IGNhbiBpbXBvcnQgYSBiaW5kaW5nIGJ5IHNlbGVjdGluZyBvbmUgb2YgdGhlIGZvbGxvd2luZyBvcHRpb25zOjwvY21kPgotPGNob2ljZXM+Ci08Y2hvaWNlPjxiPldvcmtzcGFjZTwvYj4uIExpc3RzIHRoZSBiaW5kaW5ncyBhdmFpbGFibGUgaW4geW91ciB3b3Jrc3BhY2UuPC9jaG9pY2U+Ci08Y2hvaWNlPjxiPkVuY2xvc2luZyBQcm9qZWN0PC9iPi4gTGlzdHMgdGhlIGJpbmRpbmdzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdAotdGhhdCBjb250YWlucyB5b3VyIGZpbGUuPC9jaG9pY2U+Ci08Y2hvaWNlPjxiPldvcmtpbmcgU2V0czwvYj4uIExpc3RzIHRoZSBiaW5kaW5ncyBhdmFpbGFibGUgaW4gYSBzcGVjaWZpZWQgc2V0Ci1vZiBmaWxlcy4gVG8gc3BlY2lmeSBhIHdvcmtpbmcgc2V0LCBjbGljayA8Yj5DaG9vc2U8L2I+LiBZb3UgY2FuIHNlbGVjdCBmaWxlcwotZnJvbSBhbiBleGlzdGluZyB3b3JraW5nIHNldCBvciBjcmVhdGUgYSBuZXcgd29ya2luZyBzZXQuIE9uY2UgeW91IGhhdmUgc2VsZWN0ZWQKLXRoZSBmaWxlcywgY2xpY2sgPGI+T0s8L2I+LjwvY2hvaWNlPgotPC9jaG9pY2VzPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5UaGUgYmluZGluZ3Mgd2lsbCBiZSBsaXN0ZWQuIFNlbGVjdCBvbmUgYW5kIGNsaWNrIDxiPk9LPC9iPi4gSW4KLXRoZSBEZXNpZ24gdmlldywgY2xpY2sgdGhlIGJpbmRpbmcgb2JqZWN0LjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SW4gdGhlIFByb3BlcnRpZXMgdmlldywgdHlwZSBhbnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGJpbmRpbmcKLXlvdSB3aXNoIHRoZSB1c2VyIHRvIHJlYWQgaW4gdGhlIDxiPkRvY3VtZW50YXRpb248L2I+IHBhbmUuPC9jbWQ+PC9zdGVwPgotPC9zdGVwcz4KLTwvdGFza2JvZHk+Ci08cmVsYXRlZC1saW5rcz4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCBjb25jZXB0czwvdGl0bGU+Ci08bGluayBocmVmPSIuLi9jb25jZXB0cy9jd3NkbGVkLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPC9saW5rbGlzdD4KLTxsaW5rbGlzdD48dGl0bGU+UmVsYXRlZCB0YXNrczwvdGl0bGU+Ci08bGluayBocmVmPSJ0Y3J0d3NkbC5kaXRhIiBzY29wZT0ibG9jYWwiPjwvbGluaz4KLTxsaW5rIGhyZWY9InRlZHR3c2RsLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvdGFzaz4KLTwvdGFzaz4KLTw/UHViICowMDAwMDA0OTM3Pz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdHNldGJpbmQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdHNldGJpbmQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODExODM0NS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3Rhc2tzL3RzZXRiaW5kLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNzIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDYiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iU2V0dGluZyBhIGJpbmRpbmciIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iQSBiaW5kaW5nIGlzIGEgdG9wIGxldmVsIFdTREwgb2JqZWN0IHRoYXQgcHJvdmlkZXMgYSBjb25jcmV0ZSBzcGVjaWZpY2F0aW9uIHJlZ2FyZGluZyB0aGUgdHJhbnNtaXNzaW9uIG9mIG1lc3NhZ2VzIHRvIGFuZCBmcm9tIGEgd2ViIHNlcnZpY2UuIEEgYmluZGluZyByZWZlcmVuY2VzIGV4YWN0bHkgb25lIHBvcnQgdHlwZS4gVGhlIHN0cnVjdHVyZSBvZiBhIGJpbmRpbmcgY29ycmVzcG9uZHMgdmVyeSBjbG9zZWx5IHRvIHRoYXQgb2YgdGhlIHBvcnQgdHlwZS4gVGhlIGJpbmRpbmcgY29udGFpbnMgZXh0ZW5zaWJpbGl0eSBlbGVtZW50cyAoZm9yIGV4YW1wbGUsIHNvYXAsIGh0dHAsIGFuZCBtaW1lKSB0aGF0IHNwZWNpZnkgcHJvdG9jb2wgc3BlY2lmaWMgZGV0YWlscy4gRWFjaCBwb3J0IHdpdGhpbiBhIHNlcnZpY2UgcmVmZXJlbmNlcyBleGFjdGx5IG9uZSBiaW5kaW5nLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJBIGJpbmRpbmcgaXMgYSB0b3AgbGV2ZWwgV1NETCBvYmplY3QgdGhhdCBwcm92aWRlcyBhIGNvbmNyZXRlIHNwZWNpZmljYXRpb24gcmVnYXJkaW5nIHRoZSB0cmFuc21pc3Npb24gb2YgbWVzc2FnZXMgdG8gYW5kIGZyb20gYSB3ZWIgc2VydmljZS4gQSBiaW5kaW5nIHJlZmVyZW5jZXMgZXhhY3RseSBvbmUgcG9ydCB0eXBlLiBUaGUgc3RydWN0dXJlIG9mIGEgYmluZGluZyBjb3JyZXNwb25kcyB2ZXJ5IGNsb3NlbHkgdG8gdGhhdCBvZiB0aGUgcG9ydCB0eXBlLiBUaGUgYmluZGluZyBjb250YWlucyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzIChmb3IgZXhhbXBsZSwgc29hcCwgaHR0cCwgYW5kIG1pbWUpIHRoYXQgc3BlY2lmeSBwcm90b2NvbCBzcGVjaWZpYyBkZXRhaWxzLiBFYWNoIHBvcnQgd2l0aGluIGEgc2VydmljZSByZWZlcmVuY2VzIGV4YWN0bHkgb25lIGJpbmRpbmcuIiAvPgotPG1ldGEgY29udGVudD0iV1NETCwgc2V0dGluZyBiaW5kaW5ncywgV2ViIHNlcnZpY2VzLCBzZXR0aW5nIFdTREwgYmluZGluZ3MsIGJpbmRpbmdzLCBjcmVhdGluZyIgbmFtZT0iREMuc3ViamVjdCIgLz4KLTxtZXRhIGNvbnRlbnQ9IldTREwsIHNldHRpbmcgYmluZGluZ3MsIFdlYiBzZXJ2aWNlcywgc2V0dGluZyBXU0RMIGJpbmRpbmdzLCBiaW5kaW5ncywgY3JlYXRpbmciIG5hbWU9ImtleXdvcmRzIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InRzZXRiaW5kIiBuYW1lPSJEQy5JZGVudGlmaWVyIiAvPgotPG1ldGEgY29udGVudD0iZW4tdXMiIG5hbWU9IkRDLkxhbmd1YWdlIiAvPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2Uud3N0LmRvYy51c2VyL2NvbW1vbi5jc3MiIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+Ci08dGl0bGU+U2V0dGluZyBhIGJpbmRpbmc8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgaWQ9InRzZXRiaW5kIj48YSBuYW1lPSJ0c2V0YmluZCI+PCEtLSAtLT48L2E+Ci0KLQotPGgxIGNsYXNzPSJ0b3BpY3RpdGxlMSI+U2V0dGluZyBhIGJpbmRpbmc8L2gxPgotCi0KLQotPGRpdj48cD5BIGJpbmRpbmcgaXMgYSB0b3AgbGV2ZWwgV1NETCBvYmplY3QgdGhhdCBwcm92aWRlcyBhIGNvbmNyZXRlIHNwZWNpZmljYXRpb24KLXJlZ2FyZGluZyB0aGUgdHJhbnNtaXNzaW9uIG9mIG1lc3NhZ2VzIHRvIGFuZCBmcm9tIGEgd2ViIHNlcnZpY2UuIEEgYmluZGluZwotcmVmZXJlbmNlcyBleGFjdGx5IG9uZSBwb3J0IHR5cGUuIFRoZSBzdHJ1Y3R1cmUgb2YgYSBiaW5kaW5nIGNvcnJlc3BvbmRzIHZlcnkKLWNsb3NlbHkgdG8gdGhhdCBvZiB0aGUgcG9ydCB0eXBlLiBUaGUgYmluZGluZyBjb250YWlucyBleHRlbnNpYmlsaXR5IGVsZW1lbnRzCi0oZm9yIGV4YW1wbGUsIHNvYXAsIGh0dHAsIGFuZCBtaW1lKSB0aGF0IHNwZWNpZnkgcHJvdG9jb2wgc3BlY2lmaWMgZGV0YWlscy4KLUVhY2ggcG9ydCB3aXRoaW4gYSBzZXJ2aWNlIHJlZmVyZW5jZXMgZXhhY3RseSBvbmUgYmluZGluZy48L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPllvdSBjYW4gY3JlYXRlIGEgYmluZGluZyBieSByaWdodCBjbGlja2luZyBpbiBhbnkgYmxhbmsgc3BhY2UKLWluIHRoZSBEZXNpZ24gdmlldyBhbmQgc2VsZWN0aW5nIDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkFkZCBCaW5kaW5nPC9zcGFuPi4gWW91IGNhbgotY3JlYXRlIGEgbmV3IGJpbmRpbmcsIHJldXNlIGFuIGV4aXN0aW5nIG9uZSwgb3IgaW1wb3J0IG9uZS4gPC9wPgotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJuZXN0ZWQxIiBpZD0iY3JlYXRlbmV3YmluZCI+PGEgbmFtZT0iY3JlYXRlbmV3YmluZCI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj5DcmVhdGluZyBhIG5ldyBiaW5kaW5nPC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPlRvIGNyZWF0ZSBhIG5ldyBiaW5kaW5nIGZvciB5b3VyIHBvcnQsIGZvbGxvdyB0aGVzZSBzdGVwczo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JbiB0aGUgRGVzaWduIHZpZXcsIHJpZ2h0LWNsaWNrIHlvdXIgcG9ydCBhbmQgY2xpY2sgPHN0cm9uZz5TZXQgQmluZGluZwotJmd0OyBOZXcgQmluZGluZzwvc3Ryb25nPi48L3NwYW4+PC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JbiB0aGUgPHN0cm9uZz5OYW1lPC9zdHJvbmc+IGZpZWxkLCB0eXBlIHRoZSBuYW1lIG9mIHRoZSBiaW5kaW5nLjwvc3Bhbj4gVGhlCi1uYW1lIHNob3VsZCBiZSB1bmlxdWUgYW1vbmcgYWxsIGJpbmRpbmdzIGRlZmluZWQgd2l0aGluIHRoZSBlbmNsb3NpbmcgV1NETAotZG9jdW1lbnQuIENsaWNrIDxzdHJvbmc+T0suPC9zdHJvbmc+IFRvIHNlbGVjdCB0aGUgbmV3IGJpbmRpbmcsIGNsaWNrIHRoZSBiaW5kaW5nIG9iamVjdC4KLTwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+QSA8c3Ryb25nPlBvcnQgVHlwZTwvc3Ryb25nPiBpcyBhIG5hbWVkIHNldCBvZiBhYnN0cmFjdCBvcGVyYXRpb25zIGFuZCB0aGUKLWFic3RyYWN0IG1lc3NhZ2VzIGludm9sdmVkLiBZb3UgY2FuIGVpdGhlciBjcmVhdGUgYSBuZXcgcG9ydCB0eXBlIGZvciB5b3VyCi1iaW5kaW5nLCByZXVzZSBhbiBleGlzdGluZyBvbmUsIG9yIGltcG9ydCBvbmUuIFJlZmVyIHRvIHRoZSByZWxhdGVkIHRhc2tzCi1mb3IgbW9yZSBkZXRhaWxzLjwvc3Bhbj48L2xpPgotCi08bGkgY2xhc3M9InN0ZXBleHBhbmQiPjxzcGFuPlR5cGUgYW55IGluZm9ybWF0aW9uIGFib3V0IHRoZSBiaW5kaW5nIHlvdSB3YW50IHRoZSB1c2VyIHRvIHJlYWQKLWluIHRoZSA8c3Ryb25nPkRvY3VtZW50YXRpb248L3N0cm9uZz4gcGFuZS48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+IDxzdHJvbmc+VGlwPC9zdHJvbmc+OiBZb3UgY2FuIGFsc28gY3JlYXRlIGEgbmV3IGJpbmRpbmcgZm9yIHlvdXIgcG9ydCB1c2luZwotdGhlIE91dGxpbmUgdmlldy48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJuZXN0ZWQxIiBpZD0icmV1c2ViaW5kaW5nIj48YSBuYW1lPSJyZXVzZWJpbmRpbmciPjwhLS0gLS0+PC9hPgotPGgyIGNsYXNzPSJ0b3BpY3RpdGxlMiI+UmV1c2luZyBhIGJpbmRpbmcgZm9yIGEgcG9ydDwvaDI+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5UbyByZXVzZSBhIGJpbmRpbmcgZm9yIHlvdXIgcG9ydCwgZm9sbG93IHRoZXNlIHN0ZXBzOjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGk+PHNwYW4+SW4gdGhlIERlc2lnbiB2aWV3LCBzZWxlY3QgeW91ciBwb3J0Ljwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+SW4gdGhlIFByb3BlcnRpZXMgdmlldywgY2xpY2sgdGhlIDxzdHJvbmc+R2VuZXJhbDwvc3Ryb25nPiBwYW5lLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+RnJvbSB0aGUgPHN0cm9uZz5CaW5kaW5nPC9zdHJvbmc+IGRyb3AgZG93biBsaXN0LCBzZWxlY3QgdGhlIGJpbmRpbmcgeW91Ci13YW50IHRvIHVzZS48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJuZXN0ZWQxIiBpZD0icmVnZW5lcmF0aW5nYWJpbmRpbmciPjxhIG5hbWU9InJlZ2VuZXJhdGluZ2FiaW5kaW5nIj48IS0tIC0tPjwvYT4KLTxoMiBjbGFzcz0idG9waWN0aXRsZTIiPlJlZ2VuZXJhdGluZyBhIGJpbmRpbmc8L2gyPgotCi08ZGl2PgotPGRpdiBjbGFzcz0ic2VjdGlvbiI+VG8gcmVnZW5lcmF0ZSBhIGJpbmRpbmc6PC9kaXY+Ci0KLTxvbD4KLTxsaT48c3Bhbj5SaWdodC1jbGljayB0aGUgYmluZGluZyB5b3Ugd2FudCB0byByZWdlbmVyYXRlLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+U2VsZWN0IDxzcGFuIGNsYXNzPSJ1aWNvbnRyb2wiPkdlbmVyYXRlIEJpbmRpbmcgQ29udGVudDwvc3Bhbj4uPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5TcGVjaWZ5IGFuIHJlcXVpcmVkIGJpbmRpbmcgaW5mb3JtYXRpb24uIElmIHlvdSBhcmUgbW9kaWZ5aW5nIGFuCi1leGlzdGluZyBiaW5kaW5nLCBlbnN1cmUgdGhhdCB5b3Ugc2VsZWN0IHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5PdmVyd3JpdGUgZXhpc3RpbmcKLWJpbmRpbmcgaW5mb3JtYXRpb248L3NwYW4+IGNoZWNrIGJveC48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJuZXN0ZWQxIiBpZD0iaW1wYmluZGluZyI+PGEgbmFtZT0iaW1wYmluZGluZyI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj5JbXBvcnQgYW4gZXhpc3RpbmcgYmluZGluZzwvaDI+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJzZWN0aW9uIj5UbyBpbXBvcnQgYW4gZXhpc3RpbmcgYmluZGluZyBmb3IgeW91ciBwb3J0LCBmb2xsb3cgdGhlc2Ugc3RlcHM6PC9kaXY+Ci0KLTxvbD4KLTxsaT48c3Bhbj5JbiB0aGUgRGVzaWduIHZpZXcsIHJpZ2h0LWNsaWNrIHlvdXIgcG9ydCBhbmQgY2xpY2sgIDxzdHJvbmc+U2V0IEJpbmRpbmcKLSZndDsgRXhpc3RpbmcgQmluZGluZy48L3N0cm9uZz48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkluIHRoZSA8c3Ryb25nPk5hbWU8L3N0cm9uZz4gZmllbGQsIHR5cGUgYSBzZWFyY2ggc3RyaW5nIHRvIGZpbHRlciB0aGUgbGlzdAotb3IgbGVhdmUgdGhlIGZpZWxkIGJsYW5rIHRvIHZpZXcgYWxsLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+WW91IGNhbiBpbXBvcnQgYSBiaW5kaW5nIGJ5IHNlbGVjdGluZyBvbmUgb2YgdGhlIGZvbGxvd2luZyBvcHRpb25zOjwvc3Bhbj4KLTx1bD4KLTxsaT48c3Ryb25nPldvcmtzcGFjZTwvc3Ryb25nPi4gTGlzdHMgdGhlIGJpbmRpbmdzIGF2YWlsYWJsZSBpbiB5b3VyIHdvcmtzcGFjZS48L2xpPgotCi08bGk+PHN0cm9uZz5FbmNsb3NpbmcgUHJvamVjdDwvc3Ryb25nPi4gTGlzdHMgdGhlIGJpbmRpbmdzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdAotdGhhdCBjb250YWlucyB5b3VyIGZpbGUuPC9saT4KLQotPGxpPjxzdHJvbmc+V29ya2luZyBTZXRzPC9zdHJvbmc+LiBMaXN0cyB0aGUgYmluZGluZ3MgYXZhaWxhYmxlIGluIGEgc3BlY2lmaWVkIHNldAotb2YgZmlsZXMuIFRvIHNwZWNpZnkgYSB3b3JraW5nIHNldCwgY2xpY2sgPHN0cm9uZz5DaG9vc2U8L3N0cm9uZz4uIFlvdSBjYW4gc2VsZWN0IGZpbGVzCi1mcm9tIGFuIGV4aXN0aW5nIHdvcmtpbmcgc2V0IG9yIGNyZWF0ZSBhIG5ldyB3b3JraW5nIHNldC4gT25jZSB5b3UgaGF2ZSBzZWxlY3RlZAotdGhlIGZpbGVzLCBjbGljayA8c3Ryb25nPk9LPC9zdHJvbmc+LjwvbGk+Ci0KLTwvdWw+Ci0KLTwvbGk+Ci0KLTxsaT48c3Bhbj5UaGUgYmluZGluZ3Mgd2lsbCBiZSBsaXN0ZWQuIFNlbGVjdCBvbmUgYW5kIGNsaWNrIDxzdHJvbmc+T0s8L3N0cm9uZz4uIEluCi10aGUgRGVzaWduIHZpZXcsIGNsaWNrIHRoZSBiaW5kaW5nIG9iamVjdC48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPkluIHRoZSBQcm9wZXJ0aWVzIHZpZXcsIHR5cGUgYW55IGluZm9ybWF0aW9uIGFib3V0IHRoZSBiaW5kaW5nCi15b3Ugd2lzaCB0aGUgdXNlciB0byByZWFkIGluIHRoZSA8c3Ryb25nPkRvY3VtZW50YXRpb248L3N0cm9uZz4gcGFuZS48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIGNvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzZGxlZC5odG1sIiB0aXRsZT0iVGhlIFdTREwgZWRpdG9yIGFsbG93cyB5b3UgdG8gZWFzaWx5IGFuZCBncmFwaGljYWxseSBjcmVhdGUsIG1vZGlmeSwgdmlldywgYW5kIHZhbGlkYXRlIFdTREwgZmlsZXMuIj5FZGl0aW5nIFdTREwgZmlsZXMgd2l0aCB0aGUgV1NETCBFZGl0b3I8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgdGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJ0Y3J0d3NkbC5odG1sIiB0aXRsZT0iWW91IGNhbiBjcmVhdGUgYSBuZXcsIGVtcHR5IFdTREwgZmlsZSwgdGhlbiBlZGl0IGl0IHVzaW5nIHRoZSBXU0RMIGVkaXRvci4iPkNyZWF0aW5nIGEgbmV3IFdTREwgZmlsZTwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idGVkdHdzZGwuaHRtbCIgdGl0bGU9Ik9uY2UgeW91IGhhdmUgY3JlYXRlZCBhIFdTREwgZmlsZSwgeW91IGNhbiBlZGl0IGl0IGluIHRoZSBXU0RMIGVkaXRvci4gWW91IGNhbiBhbHNvIGltcG9ydCBXU0RMIGZpbGVzIHlvdSBoYXZlIGNyZWF0ZWQgaW50byB0aGUgd29ya2JlbmNoIGFuZCBlZGl0IHRoZW0gaW4gdGhlIFdTREwgZWRpdG9yLiI+RWRpdGluZyBXU0RMIGZpbGVzPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLQotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90c2V0cHJ0dC5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90c2V0cHJ0dC5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjlhYTA5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdHNldHBydHQuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICJ0YXNrLmR0ZCI+Ci08dGFzayBpZD0idHNldHBydHQiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+U2V0dGluZyBhIHBvcnQgdHlwZTwvdGl0bGU+Ci08c2hvcnRkZXNjPkEgcG9ydCB0eXBlIGlzIGEgbmFtZWQgc2V0IG9mIGFic3RyYWN0IG9wZXJhdGlvbnMgYW5kIHRoZSBhYnN0cmFjdAotbWVzc2FnZXMgaW52b2x2ZWQuIEVhY2ggb3BlcmF0aW9uIHJlZmVycyB0byBhbiBpbnB1dCBtZXNzYWdlIGFuZCBvdXRwdXQgbWVzc2FnZXMuCi1BIHBvcnQgdHlwZSBpcyByZWZlcmVuY2VkIGJ5IGEgYmluZGluZyBvYmplY3QuIEVhY2ggYmluZGluZyByZWZlcmVuY2VzIGV4YWN0bHkKLW9uZSBwb3J0IHR5cGUuIFNpbmNlIGVhY2ggcG9ydCByZWZlcnMgdG8gZXhhY3RseSBvbmUgYmluZGluZywgZWFjaCBwb3J0IGhhcwotZXhhY3RseSBvbmUgcG9ydCB0eXBlLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5XU0RMPGluZGV4dGVybT5zZXR0aW5nIHBvcnQgdHlwZXM8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT5zZXR0aW5nIHBvcnQgdHlwZXM8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+WW91IGNhbiBjcmVhdGUgYSBwb3J0IHR5cGUgYnkgcmlnaHQgY2xpY2tpbmcgaW4gYW55IGJsYW5rIHNwYWNlCi1pbiB0aGUgRGVzaWduIHZpZXcgYW5kIHNlbGVjdGluZyA8dWljb250cm9sPkFkZCBQb3J0VHlwZTwvdWljb250cm9sPi4gQXMgYQotY29udmVuaWVuY2UgeW91IGNhbiBhbHNvIGFkZCBhIHBvcnQgdHlwZSB2aWEgYSBiaW5kaW5nLiBUaGlzIGFsbG93cyB5b3UgdG8KLWNyZWF0ZSBhIHBvcnQgdHlwZSBhbmQgbW9kaWZ5IHRoZSBiaW5kaW5nIHRvIHJlZmVyZW5jZSB0aGUgbmV3IHBvcnQgdHlwZSBpbgotb25lIGFjdGlvbi4gWW91IGNhbiBlaXRoZXIgY3JlYXRlIGEgbmV3IHBvcnQgdHlwZSBmb3IgeW91ciBiaW5kaW5nLCByZS11c2UKLWFuIGV4aXN0aW5nIG9uZSwgb3IgaW1wb3J0IG9uZS48L3A+PC9jb250ZXh0PgotPC90YXNrYm9keT4KLTx0YXNrIGlkPSJjcmVhdGVwb3J0dHlwZSI+Ci08dGl0bGU+Q3JlYXRlIGEgbmV3IHBvcnQgdHlwZSBmb3IgYSBiaW5kaW5nPC90aXRsZT4KLTx0YXNrYm9keT4KLTxjb250ZXh0PjxwPklmIHlvdSB3YW50IHRvIGNyZWF0ZSBhIG5ldyBwb3J0IHR5cGUgZm9yIHlvdXIgYmluZGluZywgZm9sbG93Ci10aGVzZSBzdGVwczo8L3A+PC9jb250ZXh0PgotPHN0ZXBzPgotPHN0ZXA+PGNtZD5JbiB0aGUgRGVzaWduIHZpZXcsIHJpZ2h0LWNsaWNrIG9uIGEgYmluZGluZyBvYmplY3QgKG5vdGUgdGhhdAotcG9ydCBtdXN0IHJlZmVyZW5jZSBhIGJpbmRpbmcpIGFuZCBjbGljayA8Yj5TZXQgUG9ydCBUeXBlID4gTmV3IFBvcnRUeXBlPC9iPi48L2NtZD4KLTwvc3RlcD4KLTxzdGVwPjxjbWQ+VHlwZSB0aGUgbmFtZSBvZiB0aGUgcG9ydCB0eXBlIGluIHRoZSA8Yj5OYW1lPC9iPiBmaWVsZC48L2NtZD4KLTxpbmZvPlRoZSBuYW1lIHNob3VsZCBiZSB1bmlxdWUgbmFtZSBhbW9uZyBhbGwgcG9ydCB0eXBlcyBkZWZpbmVkIHdpdGhpbiBpbgotdGhlIGVuY2xvc2luZyBXU0RMIGRvY3VtZW50LiBDbGljayA8Yj5PSzwvYj4uIFRvIHNlbGVjdCB0aGUgbmV3IHBvcnQgdHlwZSwKLWNsaWNrIHRoZSBwb3J0IHR5cGUgb2JqZWN0LjwvaW5mbz48L3N0ZXA+Ci08c3RlcD48Y21kPkluIHRoZSBQcm9wZXJ0aWVzIHZpZXcsIHR5cGUgYW55IGluZm9ybWF0aW9uIGFib3V0IHRoZSBwb3J0IHR5cGUKLXlvdSB3aXNoIHRoZSB1c2VyIHRvIHJlYWQgaW4gdGhlIDxiPkRvY3VtZW50YXRpb248L2I+IHBhbmUuPC9jbWQ+PC9zdGVwPgotPC9zdGVwcz4KLTxyZXN1bHQ+PHA+IDxiPlRpcDwvYj46IFlvdSBjYW4gYWxzbyBjcmVhdGUgYSBuZXcgcG9ydCB0eXBlIGZvciB5b3VyIGJpbmRpbmcKLXVzaW5nIHRoZSBPdXRsaW5lIHZpZXcuPC9wPjxwPk9uY2UgeW91IGhhdmUgY3JlYXRlZCBhIHBvcnQgdHlwZSwgeW91IGNhbiBhZGQKLW9wZXJhdGlvbnMgdG8gaXQsIHdoaWNoIGNhbiBzZW5kIGFuZCByZWNlaXZlIG1lc3NhZ2VzLjwvcD48L3Jlc3VsdD4KLTwvdGFza2JvZHk+Ci08L3Rhc2s+Ci08dGFzayBpZD0icmV1c2Vwb3J0dHlwZSI+Ci08dGl0bGU+UmV1c2UgYSBwb3J0IHR5cGUgZm9yIGEgYmluZGluZzwvdGl0bGU+Ci08dGFza2JvZHk+Ci08Y29udGV4dD48cD5JZiB5b3Ugd2FudCB0byByZXVzZSBhIHBvcnQgdHlwZSBmb3IgeW91ciBiaW5kaW5nLCBmb2xsb3cgdGhlc2UKLXN0ZXBzOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPkluIHRoZSBEZXNpZ24gdmlldywgcmlnaHQtY2xpY2sgb24gYSBiaW5kaW5nIG9iamVjdCAobm90ZSB0aGF0Ci1wb3J0IG11c3QgcmVmZXJlbmNlIGEgYmluZGluZykgYW5kIGNsaWNrICA8Yj5TZXQgUG9ydCBUeXBlID4gRXhpc3RpbmcgUG9ydFR5cGU8L2I+LjwvY21kPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgPGI+TmFtZTwvYj4gZmllbGQsIHR5cGUgYSBzZWFyY2ggc3RyaW5nIHRvIGZpbHRlciB0aGUgbGlzdAotb3IgbGVhdmUgdGhlIGZpZWxkIGJsYW5rIHRvIHZpZXcgYWxsLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+WW91IGNhbiBjaGFuZ2UgdGhlIHNjb3BlIG9mIHRoZSBsaXN0IGJ5IHNlbGVjdGluZyBvbmUgb2YgdGhlIGZvbGxvd2luZwotb3B0aW9uczo8L2NtZD4KLTxjaG9pY2VzPgotPGNob2ljZT48Yj5Xb3Jrc3BhY2U8L2I+LiBMaXN0cyB0aGUgcG9ydCB0eXBlcyBhdmFpbGFibGUgaW4geW91ciB3b3Jrc3BhY2UuPC9jaG9pY2U+Ci08Y2hvaWNlPjxiPkVuY2xvc2luZyBQcm9qZWN0PC9iPi4gTGlzdHMgdGhlIHBvcnQgdHlwZXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0Ci10aGF0IGNvbnRhaW5zIHlvdXIgZmlsZS48L2Nob2ljZT4KLTxjaG9pY2U+PGI+Q3VycmVudCBSZXNvdXJjZTwvYj4uIExpc3RzIHRoZSBwb3J0IHR5cGVzIGF2YWlsYWJsZSBpbiB5b3VyIGN1cnJlbnQKLWZpbGUuPC9jaG9pY2U+Ci08Y2hvaWNlPjxiPldvcmtpbmcgU2V0czwvYj4uIExpc3RzIHRoZSBwb3J0IHR5cGVzIGF2YWlsYWJsZSBpbiBhIHNwZWNpZmllZAotc2V0IG9mIGZpbGVzLiBUbyBzcGVjaWZ5IGEgd29ya2luZyBzZXQsIGNsaWNrIDxiPkNob29zZTwvYj4uIFlvdSBjYW4gc2VsZWN0Ci1maWxlcyBmcm9tIGFuIGV4aXN0aW5nIHdvcmtpbmcgc2V0IG9yIGNyZWF0ZSBhIG5ldyB3b3JraW5nIHNldC4gT25jZSB5b3UgaGF2ZQotc2VsZWN0ZWQgdGhlIGZpbGVzLCBjbGljayA8Yj5PSzwvYj4uPC9jaG9pY2U+Ci08L2Nob2ljZXM+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPlRoZSBleGlzdGluZyBwb3J0IHR5cGVzIHdpbGwgYmUgbGlzdGVkLiBTZWxlY3Qgb25lIGFuZCBjbGljayA8Yj5PSzwvYj4uPC9jbWQ+Ci08L3N0ZXA+Ci08L3N0ZXBzPgotPC90YXNrYm9keT4KLTwvdGFzaz4KLTx0YXNrIGlkPSJpbXBvcnRwb3J0dHlwZSI+Ci08dGl0bGU+SW1wb3J0IGEgcG9ydCB0eXBlIGZvciBhIGJpbmRpbmc8L3RpdGxlPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+SWYgeW91IHdhbnQgdG8gaW1wb3J0IGFuIGV4aXN0aW5nIHBvcnQgdHlwZSBmb3IgeW91ciBiaW5kaW5nLAotZm9sbG93IHRoZXNlIHN0ZXBzOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPkluIHRoZSBEZXNpZ24gdmlldywgcmlnaHQtY2xpY2sgb24gYSBiaW5kaW5nIG9iamVjdCAobm90ZSB0aGF0Ci1wb3J0IG11c3QgcmVmZXJlbmNlIGEgYmluZGluZykgYW5kIGNsaWNrICA8Yj5TZXQgUG9ydCBUeXBlID4gRXhpc3RpbmcgUG9ydFR5cGUuPC9iPjwvY21kPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5JbiB0aGUgPGI+TmFtZTwvYj4gZmllbGQsIHR5cGUgYSBzZWFyY2ggc3RyaW5nIHRvIGZpbHRlciB0aGUgbGlzdAotb3IgbGVhdmUgdGhlIGZpZWxkIGJsYW5rIHRvIHZpZXcgYWxsLjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+WW91IGNhbiBpbXBvcnQgYSBwb3J0IHR5cGUgYnkgc2VsZWN0aW5nIG9uZSBvZiB0aGUgZm9sbG93aW5nIG9wdGlvbnM6PC9jbWQ+Ci08Y2hvaWNlcz4KLTxjaG9pY2U+PGI+V29ya3NwYWNlPC9iPi4gTGlzdHMgdGhlIHBvcnQgdHlwZXMgYXZhaWxhYmxlIGluIHlvdXIgd29ya3NwYWNlLjwvY2hvaWNlPgotPGNob2ljZT48Yj5FbmNsb3NpbmcgUHJvamVjdDwvYj4uIExpc3RzIHRoZSBwb3J0IHR5cGVzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdAotdGhhdCBjb250YWlucyB5b3VyIGZpbGUuPC9jaG9pY2U+Ci08Y2hvaWNlPjxiPldvcmtpbmcgU2V0czwvYj4uIExpc3RzIHRoZSBwb3J0IHR5cGVzIGF2YWlsYWJsZSBpbiBhIHNwZWNpZmllZAotc2V0IG9mIGZpbGVzLiBUbyBzcGVjaWZ5IGEgd29ya2luZyBzZXQsIGNsaWNrIDxiPkNob29zZTwvYj4uIFlvdSBjYW4gc2VsZWN0Ci1maWxlcyBmcm9tIGFuIGV4aXN0aW5nIHdvcmtpbmcgc2V0IG9yIGNyZWF0ZSBhIG5ldyB3b3JraW5nIHNldC4gT25jZSB5b3UgaGF2ZQotc2VsZWN0ZWQgdGhlIGZpbGVzLCBjbGljayA8Yj5PSzwvYj4uPC9jaG9pY2U+Ci08L2Nob2ljZXM+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPlRoZSBwb3J0IHR5cGVzIHdpbGwgYmUgbGlzdGVkLiBTZWxlY3Qgb25lIGFuZCBjbGljayA8Yj5PSzwvYj4uCi1JbiB0aGUgRGVzaWduIHZpZXcsIGNsaWNrIHRoZSBwb3J0IHR5cGUgb2JqZWN0LjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+SW4gdGhlIFByb3BlcnRpZXMgdmlldywgdHlwZSBhbnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBvcnQgdHlwZQoteW91IHdpc2ggdGhlIHVzZXIgdG8gcmVhZCBpbiB0aGUgPGI+RG9jdW1lbnRhdGlvbjwvYj4gcGFuZS48L2NtZD48L3N0ZXA+Ci08L3N0ZXBzPgotPC90YXNrYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIGNvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uL2NvbmNlcHRzL2N3c2RsZWQuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIHRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9InRjcnR3c2RsLmRpdGEiIHNjb3BlPSJsb2NhbCI+PC9saW5rPgotPGxpbmsgaHJlZj0idGVkdHdzZGwuZGl0YSIgc2NvcGU9ImxvY2FsIj48L2xpbms+Ci08L2xpbmtsaXN0PgotPC9yZWxhdGVkLWxpbmtzPgotPC90YXNrPgotPC90YXNrPgotPD9QdWIgKjAwMDAwMDUzMDg/PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90c2V0cHJ0dC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci90YXNrcy90c2V0cHJ0dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkM2MwZDUyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvdGFza3MvdHNldHBydHQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwNiIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJTZXR0aW5nIGEgcG9ydCB0eXBlIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9IkEgcG9ydCB0eXBlIGlzIGEgbmFtZWQgc2V0IG9mIGFic3RyYWN0IG9wZXJhdGlvbnMgYW5kIHRoZSBhYnN0cmFjdCBtZXNzYWdlcyBpbnZvbHZlZC4gRWFjaCBvcGVyYXRpb24gcmVmZXJzIHRvIGFuIGlucHV0IG1lc3NhZ2UgYW5kIG91dHB1dCBtZXNzYWdlcy4gQSBwb3J0IHR5cGUgaXMgcmVmZXJlbmNlZCBieSBhIGJpbmRpbmcgb2JqZWN0LiBFYWNoIGJpbmRpbmcgcmVmZXJlbmNlcyBleGFjdGx5IG9uZSBwb3J0IHR5cGUuIFNpbmNlIGVhY2ggcG9ydCByZWZlcnMgdG8gZXhhY3RseSBvbmUgYmluZGluZywgZWFjaCBwb3J0IGhhcyBleGFjdGx5IG9uZSBwb3J0IHR5cGUuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkEgcG9ydCB0eXBlIGlzIGEgbmFtZWQgc2V0IG9mIGFic3RyYWN0IG9wZXJhdGlvbnMgYW5kIHRoZSBhYnN0cmFjdCBtZXNzYWdlcyBpbnZvbHZlZC4gRWFjaCBvcGVyYXRpb24gcmVmZXJzIHRvIGFuIGlucHV0IG1lc3NhZ2UgYW5kIG91dHB1dCBtZXNzYWdlcy4gQSBwb3J0IHR5cGUgaXMgcmVmZXJlbmNlZCBieSBhIGJpbmRpbmcgb2JqZWN0LiBFYWNoIGJpbmRpbmcgcmVmZXJlbmNlcyBleGFjdGx5IG9uZSBwb3J0IHR5cGUuIFNpbmNlIGVhY2ggcG9ydCByZWZlcnMgdG8gZXhhY3RseSBvbmUgYmluZGluZywgZWFjaCBwb3J0IGhhcyBleGFjdGx5IG9uZSBwb3J0IHR5cGUuIiAvPgotPG1ldGEgY29udGVudD0iV1NETCwgc2V0dGluZyBwb3J0IHR5cGVzLCBXZWIgc2VydmljZXMiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJXU0RMLCBzZXR0aW5nIHBvcnQgdHlwZXMsIFdlYiBzZXJ2aWNlcyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBjb250ZW50PSJYSFRNTCIgbmFtZT0iREMuRm9ybWF0IiAvPgotPG1ldGEgY29udGVudD0idHNldHBydHQiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5TZXR0aW5nIGEgcG9ydCB0eXBlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0c2V0cHJ0dCI+PGEgbmFtZT0idHNldHBydHQiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPlNldHRpbmcgYSBwb3J0IHR5cGU8L2gxPgotCi0KLQotPGRpdj48cD5BIHBvcnQgdHlwZSBpcyBhIG5hbWVkIHNldCBvZiBhYnN0cmFjdCBvcGVyYXRpb25zIGFuZCB0aGUgYWJzdHJhY3QKLW1lc3NhZ2VzIGludm9sdmVkLiBFYWNoIG9wZXJhdGlvbiByZWZlcnMgdG8gYW4gaW5wdXQgbWVzc2FnZSBhbmQgb3V0cHV0IG1lc3NhZ2VzLgotQSBwb3J0IHR5cGUgaXMgcmVmZXJlbmNlZCBieSBhIGJpbmRpbmcgb2JqZWN0LiBFYWNoIGJpbmRpbmcgcmVmZXJlbmNlcyBleGFjdGx5Ci1vbmUgcG9ydCB0eXBlLiBTaW5jZSBlYWNoIHBvcnQgcmVmZXJzIHRvIGV4YWN0bHkgb25lIGJpbmRpbmcsIGVhY2ggcG9ydCBoYXMKLWV4YWN0bHkgb25lIHBvcnQgdHlwZS48L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPllvdSBjYW4gY3JlYXRlIGEgcG9ydCB0eXBlIGJ5IHJpZ2h0IGNsaWNraW5nIGluIGFueSBibGFuayBzcGFjZQotaW4gdGhlIERlc2lnbiB2aWV3IGFuZCBzZWxlY3RpbmcgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+QWRkIFBvcnRUeXBlPC9zcGFuPi4gQXMgYQotY29udmVuaWVuY2UgeW91IGNhbiBhbHNvIGFkZCBhIHBvcnQgdHlwZSB2aWEgYSBiaW5kaW5nLiBUaGlzIGFsbG93cyB5b3UgdG8KLWNyZWF0ZSBhIHBvcnQgdHlwZSBhbmQgbW9kaWZ5IHRoZSBiaW5kaW5nIHRvIHJlZmVyZW5jZSB0aGUgbmV3IHBvcnQgdHlwZSBpbgotb25lIGFjdGlvbi4gWW91IGNhbiBlaXRoZXIgY3JlYXRlIGEgbmV3IHBvcnQgdHlwZSBmb3IgeW91ciBiaW5kaW5nLCByZS11c2UKLWFuIGV4aXN0aW5nIG9uZSwgb3IgaW1wb3J0IG9uZS48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9Im5lc3RlZDEiIGlkPSJjcmVhdGVwb3J0dHlwZSI+PGEgbmFtZT0iY3JlYXRlcG9ydHR5cGUiPjwhLS0gLS0+PC9hPgotPGgyIGNsYXNzPSJ0b3BpY3RpdGxlMiI+Q3JlYXRlIGEgbmV3IHBvcnQgdHlwZSBmb3IgYSBiaW5kaW5nPC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPklmIHlvdSB3YW50IHRvIGNyZWF0ZSBhIG5ldyBwb3J0IHR5cGUgZm9yIHlvdXIgYmluZGluZywgZm9sbG93Ci10aGVzZSBzdGVwczo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5JbiB0aGUgRGVzaWduIHZpZXcsIHJpZ2h0LWNsaWNrIG9uIGEgYmluZGluZyBvYmplY3QgKG5vdGUgdGhhdAotcG9ydCBtdXN0IHJlZmVyZW5jZSBhIGJpbmRpbmcpIGFuZCBjbGljayA8c3Ryb25nPlNldCBQb3J0IFR5cGUgJmd0OyBOZXcgUG9ydFR5cGU8L3N0cm9uZz4uPC9zcGFuPgotPC9saT4KLQotPGxpIGNsYXNzPSJzdGVwZXhwYW5kIj48c3Bhbj5UeXBlIHRoZSBuYW1lIG9mIHRoZSBwb3J0IHR5cGUgaW4gdGhlIDxzdHJvbmc+TmFtZTwvc3Ryb25nPiBmaWVsZC48L3NwYW4+Ci0gVGhlIG5hbWUgc2hvdWxkIGJlIHVuaXF1ZSBuYW1lIGFtb25nIGFsbCBwb3J0IHR5cGVzIGRlZmluZWQgd2l0aGluIGluCi10aGUgZW5jbG9zaW5nIFdTREwgZG9jdW1lbnQuIENsaWNrIDxzdHJvbmc+T0s8L3N0cm9uZz4uIFRvIHNlbGVjdCB0aGUgbmV3IHBvcnQgdHlwZSwKLWNsaWNrIHRoZSBwb3J0IHR5cGUgb2JqZWN0LjwvbGk+Ci0KLTxsaSBjbGFzcz0ic3RlcGV4cGFuZCI+PHNwYW4+SW4gdGhlIFByb3BlcnRpZXMgdmlldywgdHlwZSBhbnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBvcnQgdHlwZQoteW91IHdpc2ggdGhlIHVzZXIgdG8gcmVhZCBpbiB0aGUgPHN0cm9uZz5Eb2N1bWVudGF0aW9uPC9zdHJvbmc+IHBhbmUuPC9zcGFuPjwvbGk+Ci0KLTwvb2w+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPiA8c3Ryb25nPlRpcDwvc3Ryb25nPjogWW91IGNhbiBhbHNvIGNyZWF0ZSBhIG5ldyBwb3J0IHR5cGUgZm9yIHlvdXIgYmluZGluZwotdXNpbmcgdGhlIE91dGxpbmUgdmlldy48L3A+Ci08cD5PbmNlIHlvdSBoYXZlIGNyZWF0ZWQgYSBwb3J0IHR5cGUsIHlvdSBjYW4gYWRkCi1vcGVyYXRpb25zIHRvIGl0LCB3aGljaCBjYW4gc2VuZCBhbmQgcmVjZWl2ZSBtZXNzYWdlcy48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJuZXN0ZWQxIiBpZD0icmV1c2Vwb3J0dHlwZSI+PGEgbmFtZT0icmV1c2Vwb3J0dHlwZSI+PCEtLSAtLT48L2E+Ci08aDIgY2xhc3M9InRvcGljdGl0bGUyIj5SZXVzZSBhIHBvcnQgdHlwZSBmb3IgYSBiaW5kaW5nPC9oMj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPklmIHlvdSB3YW50IHRvIHJldXNlIGEgcG9ydCB0eXBlIGZvciB5b3VyIGJpbmRpbmcsIGZvbGxvdyB0aGVzZQotc3RlcHM6PC9wPgotPC9kaXY+Ci0KLTxvbD4KLTxsaT48c3Bhbj5JbiB0aGUgRGVzaWduIHZpZXcsIHJpZ2h0LWNsaWNrIG9uIGEgYmluZGluZyBvYmplY3QgKG5vdGUgdGhhdAotcG9ydCBtdXN0IHJlZmVyZW5jZSBhIGJpbmRpbmcpIGFuZCBjbGljayAgPHN0cm9uZz5TZXQgUG9ydCBUeXBlICZndDsgRXhpc3RpbmcgUG9ydFR5cGU8L3N0cm9uZz4uPC9zcGFuPgotPC9saT4KLQotPGxpPjxzcGFuPkluIHRoZSA8c3Ryb25nPk5hbWU8L3N0cm9uZz4gZmllbGQsIHR5cGUgYSBzZWFyY2ggc3RyaW5nIHRvIGZpbHRlciB0aGUgbGlzdAotb3IgbGVhdmUgdGhlIGZpZWxkIGJsYW5rIHRvIHZpZXcgYWxsLjwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+WW91IGNhbiBjaGFuZ2UgdGhlIHNjb3BlIG9mIHRoZSBsaXN0IGJ5IHNlbGVjdGluZyBvbmUgb2YgdGhlIGZvbGxvd2luZwotb3B0aW9uczo8L3NwYW4+Ci08dWw+Ci08bGk+PHN0cm9uZz5Xb3Jrc3BhY2U8L3N0cm9uZz4uIExpc3RzIHRoZSBwb3J0IHR5cGVzIGF2YWlsYWJsZSBpbiB5b3VyIHdvcmtzcGFjZS48L2xpPgotCi08bGk+PHN0cm9uZz5FbmNsb3NpbmcgUHJvamVjdDwvc3Ryb25nPi4gTGlzdHMgdGhlIHBvcnQgdHlwZXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0Ci10aGF0IGNvbnRhaW5zIHlvdXIgZmlsZS48L2xpPgotCi08bGk+PHN0cm9uZz5DdXJyZW50IFJlc291cmNlPC9zdHJvbmc+LiBMaXN0cyB0aGUgcG9ydCB0eXBlcyBhdmFpbGFibGUgaW4geW91ciBjdXJyZW50Ci1maWxlLjwvbGk+Ci0KLTxsaT48c3Ryb25nPldvcmtpbmcgU2V0czwvc3Ryb25nPi4gTGlzdHMgdGhlIHBvcnQgdHlwZXMgYXZhaWxhYmxlIGluIGEgc3BlY2lmaWVkCi1zZXQgb2YgZmlsZXMuIFRvIHNwZWNpZnkgYSB3b3JraW5nIHNldCwgY2xpY2sgPHN0cm9uZz5DaG9vc2U8L3N0cm9uZz4uIFlvdSBjYW4gc2VsZWN0Ci1maWxlcyBmcm9tIGFuIGV4aXN0aW5nIHdvcmtpbmcgc2V0IG9yIGNyZWF0ZSBhIG5ldyB3b3JraW5nIHNldC4gT25jZSB5b3UgaGF2ZQotc2VsZWN0ZWQgdGhlIGZpbGVzLCBjbGljayA8c3Ryb25nPk9LPC9zdHJvbmc+LjwvbGk+Ci0KLTwvdWw+Ci0KLTwvbGk+Ci0KLTxsaT48c3Bhbj5UaGUgZXhpc3RpbmcgcG9ydCB0eXBlcyB3aWxsIGJlIGxpc3RlZC4gU2VsZWN0IG9uZSBhbmQgY2xpY2sgPHN0cm9uZz5PSzwvc3Ryb25nPi48L3NwYW4+Ci08L2xpPgotCi08L29sPgotCi08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9Im5lc3RlZDEiIGlkPSJpbXBvcnRwb3J0dHlwZSI+PGEgbmFtZT0iaW1wb3J0cG9ydHR5cGUiPjwhLS0gLS0+PC9hPgotPGgyIGNsYXNzPSJ0b3BpY3RpdGxlMiI+SW1wb3J0IGEgcG9ydCB0eXBlIGZvciBhIGJpbmRpbmc8L2gyPgotCi08ZGl2PgotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+SWYgeW91IHdhbnQgdG8gaW1wb3J0IGFuIGV4aXN0aW5nIHBvcnQgdHlwZSBmb3IgeW91ciBiaW5kaW5nLAotZm9sbG93IHRoZXNlIHN0ZXBzOjwvcD4KLTwvZGl2PgotCi08b2w+Ci08bGk+PHNwYW4+SW4gdGhlIERlc2lnbiB2aWV3LCByaWdodC1jbGljayBvbiBhIGJpbmRpbmcgb2JqZWN0IChub3RlIHRoYXQKLXBvcnQgbXVzdCByZWZlcmVuY2UgYSBiaW5kaW5nKSBhbmQgY2xpY2sgIDxzdHJvbmc+U2V0IFBvcnQgVHlwZSAmZ3Q7IEV4aXN0aW5nIFBvcnRUeXBlLjwvc3Ryb25nPjwvc3Bhbj4KLTwvbGk+Ci0KLTxsaT48c3Bhbj5JbiB0aGUgPHN0cm9uZz5OYW1lPC9zdHJvbmc+IGZpZWxkLCB0eXBlIGEgc2VhcmNoIHN0cmluZyB0byBmaWx0ZXIgdGhlIGxpc3QKLW9yIGxlYXZlIHRoZSBmaWVsZCBibGFuayB0byB2aWV3IGFsbC48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPllvdSBjYW4gaW1wb3J0IGEgcG9ydCB0eXBlIGJ5IHNlbGVjdGluZyBvbmUgb2YgdGhlIGZvbGxvd2luZyBvcHRpb25zOjwvc3Bhbj4KLTx1bD4KLTxsaT48c3Ryb25nPldvcmtzcGFjZTwvc3Ryb25nPi4gTGlzdHMgdGhlIHBvcnQgdHlwZXMgYXZhaWxhYmxlIGluIHlvdXIgd29ya3NwYWNlLjwvbGk+Ci0KLTxsaT48c3Ryb25nPkVuY2xvc2luZyBQcm9qZWN0PC9zdHJvbmc+LiBMaXN0cyB0aGUgcG9ydCB0eXBlcyBhdmFpbGFibGUgaW4gdGhlIHByb2plY3QKLXRoYXQgY29udGFpbnMgeW91ciBmaWxlLjwvbGk+Ci0KLTxsaT48c3Ryb25nPldvcmtpbmcgU2V0czwvc3Ryb25nPi4gTGlzdHMgdGhlIHBvcnQgdHlwZXMgYXZhaWxhYmxlIGluIGEgc3BlY2lmaWVkCi1zZXQgb2YgZmlsZXMuIFRvIHNwZWNpZnkgYSB3b3JraW5nIHNldCwgY2xpY2sgPHN0cm9uZz5DaG9vc2U8L3N0cm9uZz4uIFlvdSBjYW4gc2VsZWN0Ci1maWxlcyBmcm9tIGFuIGV4aXN0aW5nIHdvcmtpbmcgc2V0IG9yIGNyZWF0ZSBhIG5ldyB3b3JraW5nIHNldC4gT25jZSB5b3UgaGF2ZQotc2VsZWN0ZWQgdGhlIGZpbGVzLCBjbGljayA8c3Ryb25nPk9LPC9zdHJvbmc+LjwvbGk+Ci0KLTwvdWw+Ci0KLTwvbGk+Ci0KLTxsaT48c3Bhbj5UaGUgcG9ydCB0eXBlcyB3aWxsIGJlIGxpc3RlZC4gU2VsZWN0IG9uZSBhbmQgY2xpY2sgPHN0cm9uZz5PSzwvc3Ryb25nPi4KLUluIHRoZSBEZXNpZ24gdmlldywgY2xpY2sgdGhlIHBvcnQgdHlwZSBvYmplY3QuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5JbiB0aGUgUHJvcGVydGllcyB2aWV3LCB0eXBlIGFueSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcG9ydCB0eXBlCi15b3Ugd2lzaCB0aGUgdXNlciB0byByZWFkIGluIHRoZSA8c3Ryb25nPkRvY3VtZW50YXRpb248L3N0cm9uZz4gcGFuZS48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIGNvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vY29uY2VwdHMvY3dzZGxlZC5odG1sIiB0aXRsZT0iVGhlIFdTREwgZWRpdG9yIGFsbG93cyB5b3UgdG8gZWFzaWx5IGFuZCBncmFwaGljYWxseSBjcmVhdGUsIG1vZGlmeSwgdmlldywgYW5kIHZhbGlkYXRlIFdTREwgZmlsZXMuIj5FZGl0aW5nIFdTREwgZmlsZXMgd2l0aCB0aGUgV1NETCBFZGl0b3I8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgdGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSJ0Y3J0d3NkbC5odG1sIiB0aXRsZT0iWW91IGNhbiBjcmVhdGUgYSBuZXcsIGVtcHR5IFdTREwgZmlsZSwgdGhlbiBlZGl0IGl0IHVzaW5nIHRoZSBXU0RMIGVkaXRvci4iPkNyZWF0aW5nIGEgbmV3IFdTREwgZmlsZTwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0idGVkdHdzZGwuaHRtbCIgdGl0bGU9Ik9uY2UgeW91IGhhdmUgY3JlYXRlZCBhIFdTREwgZmlsZSwgeW91IGNhbiBlZGl0IGl0IGluIHRoZSBXU0RMIGVkaXRvci4gWW91IGNhbiBhbHNvIGltcG9ydCBXU0RMIGZpbGVzIHlvdSBoYXZlIGNyZWF0ZWQgaW50byB0aGUgd29ya2JlbmNoIGFuZCBlZGl0IHRoZW0gaW4gdGhlIFdTREwgZWRpdG9yLiI+RWRpdGluZyBXU0RMIGZpbGVzPC9hPjwvZGl2PjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLQotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci93c3dzZGxlZGl0b3JjX3RvYy5kaXRhbWFwIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci93c3dzZGxlZGl0b3JjX3RvYy5kaXRhbWFwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZGU2MGFiLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvd3N3c2RsZWRpdG9yY190b2MuZGl0YW1hcAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+Ci08IURPQ1RZUEUgbWFwIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIE1hcC8vRU4iICJtYXAuZHRkIj4KLTxtYXAgYW5jaG9ycmVmPSIuLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvd2Vic2VydmljZV90b2MuZGl0YW1hcCN3c3dzZGxlZGl0b3JjIgotaWQ9Indzd3NkbGVkaXRvcmMiIHRpdGxlPSJ3c3dzZGxlZGl0b3JjIj4KLTx0b3BpY3JlZiBocmVmPSJjb25jZXB0cy9jd3NkbGVkLmRpdGEiIG5hdnRpdGxlPSJXZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpIGVkaXRvciI+Ci08L3RvcGljcmVmPgotPC9tYXA+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3dzd3NkbGVkaXRvcmNfdG9jLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvd3N3c2RsZWRpdG9yY190b2MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTgyNmIxLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvd3N3c2RsZWRpdG9yY190b2MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCi08P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI/PgotCi08dG9jIGxpbmtfdG89Ii4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci93ZWJzZXJ2aWNlX3RvYy54bWwjd3N3c2RsZWRpdG9yYyIgbGFiZWw9Indzd3NkbGVkaXRvcmMiIHRvcGljPSJjb25jZXB0cy9jd3NkbGVkLmh0bWwiPgotPHRvcGljIGxhYmVsPSJFZGl0aW5nIFdTREwgZmlsZXMgd2l0aCB0aGUgV1NETCBFZGl0b3IiIGhyZWY9ImNvbmNlcHRzL2N3c2RsZWQuaHRtbCIvPgotPC90b2M+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3dzd3NkbGVkaXRvcnRfdG9jLmRpdGFtYXAgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyL3dzd3NkbGVkaXRvcnRfdG9jLmRpdGFtYXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5NzBhNTIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci93c3dzZGxlZGl0b3J0X3RvYy5kaXRhbWFwCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS1BcmJvcnRleHQsIEluYy4sIDE5ODgtMjAwNSwgdi40MDAyLS0+Ci08IURPQ1RZUEUgbWFwIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIE1hcC8vRU4iCi0gIm1hcC5kdGQiPgotPG1hcCBhbmNob3JyZWY9Ii4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci93ZWJzZXJ2aWNlX3RvYy5kaXRhbWFwI3dzd3NkbGVkaXRvcnQiCi1pZD0id3N3c2RsZWRpdG9ydCIgdGl0bGU9Indzd3NkbGVkaXRvcnQiPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3RpbXB3c2RsLmRpdGEiIG5hdnRpdGxlPSJJbXBvcnRpbmcgV1NETCBmaWxlcyI+PC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90Y3J0d3NkbC5kaXRhIiBuYXZ0aXRsZT0iQ3JlYXRpbmcgV1NETCBmaWxlcyI+PC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJjb25jZXB0cy9jd3NkbGVkLmRpdGEiIG5hdnRpdGxlPSJXZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpIGVkaXRvciI+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdGVkdHdzZGwuZGl0YSIgbmF2dGl0bGU9IkVkaXRpbmcgV1NETCBmaWxlcyI+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdGFkZHNydmMuZGl0YSIgbGlua2luZz0ibm9uZSIgbmF2dGl0bGU9IkFkZGluZyBhIHNlcnZpY2UiPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90YWRkcG9ydC5kaXRhIiBsaW5raW5nPSJub25lIiBuYXZ0aXRsZT0iQWRkaW5nIGEgcG9ydCB0byBhIHNlcnZpY2UiPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90c2V0cHJ0dC5kaXRhIiBsaW5raW5nPSJub25lIiBuYXZ0aXRsZT0iU2V0dGluZyBhIHBvcnQgdHlwZSI+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3RzZXRiaW5kLmRpdGEiIGxpbmtpbmc9Im5vbmUiIG5hdnRpdGxlPSJTZXR0aW5nIGEgYmluZGluZyI+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3RhZGRvcGVyLmRpdGEiIGxpbmtpbmc9Im5vbmUiIG5hdnRpdGxlPSJBZGRpbmcgYW4gb3BlcmF0aW9uIj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdGFkZG1lc3MuZGl0YSIgbGlua2luZz0ibm9uZSIgbmF2dGl0bGU9IkFkZGluZyBhIG1lc3NhZ2UiPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90YWRkcGFydC5kaXRhIiBsaW5raW5nPSJub25lIiBuYXZ0aXRsZT0iQWRkaW5nIGEgcGFydCB0byBhIG1lc3NhZ2UiPgotPC90b3BpY3JlZj4KLTx0b3BpY3JlZiBocmVmPSJ0YXNrcy90Y3J0aW1wdC5kaXRhIiBsaW5raW5nPSJub25lIiBuYXZ0aXRsZT0iQ3JlYXRpbmcgYW4gaW1wb3J0IHN0YXRlbWVudCI+Ci08L3RvcGljcmVmPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3RjcnR0eXBlLmRpdGEiIGxpbmtpbmc9Im5vbmUiIG5hdnRpdGxlPSJDcmVhdGluZyBhIG5ldyB0eXBlIGZvciB5b3VyIFdTREwgZmlsZSI+Ci08L3RvcGljcmVmPgotPC90b3BpY3JlZj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0iLi4vb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2RsZXhwLmRpdGEiCi1uYXZ0aXRsZT0iRXhwbG9yaW5nIFdTREwgdXNpbmcgdGhlIFdlYiBTZXJ2aWNlcyBFeHBsb3JlciIgc2NvcGU9InBlZXIiPjwvdG9waWNyZWY+Ci08L21hcD4KLTw/UHViICowMDAwMDAxNzEzPz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzZGwudWkuZG9jLnVzZXIvd3N3c2RsZWRpdG9ydF90b2MueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci93c3dzZGxlZGl0b3J0X3RvYy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5ODRlMDguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NkbC51aS5kb2MudXNlci93c3dzZGxlZGl0b3J0X3RvYy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCi08P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI/PgotCi08dG9jIGxpbmtfdG89Ii4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci93ZWJzZXJ2aWNlX3RvYy54bWwjd3N3c2RsZWRpdG9ydCIgbGFiZWw9Indzd3NkbGVkaXRvcnQiIHRvcGljPSJ0YXNrcy90aW1wd3NkbC5odG1sIj4KLTx0b3BpYyBsYWJlbD0iSW1wb3J0aW5nIGEgV1NETCBmaWxlIiBocmVmPSJ0YXNrcy90aW1wd3NkbC5odG1sIi8+Ci08dG9waWMgbGFiZWw9IkNyZWF0aW5nIGEgbmV3IFdTREwgZmlsZSIgaHJlZj0idGFza3MvdGNydHdzZGwuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJFZGl0aW5nIFdTREwgZmlsZXMgd2l0aCB0aGUgV1NETCBFZGl0b3IiIGhyZWY9ImNvbmNlcHRzL2N3c2RsZWQuaHRtbCI+Ci08dG9waWMgbGFiZWw9IkVkaXRpbmcgV1NETCBmaWxlcyIgaHJlZj0idGFza3MvdGVkdHdzZGwuaHRtbCI+Ci08dG9waWMgbGFiZWw9IkFkZGluZyBhIHNlcnZpY2UiIGhyZWY9InRhc2tzL3RhZGRzcnZjLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iQWRkaW5nIGEgcG9ydCB0byBhIHNlcnZpY2UiIGhyZWY9InRhc2tzL3RhZGRwb3J0Lmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iU2V0dGluZyBhIHBvcnQgdHlwZSIgaHJlZj0idGFza3MvdHNldHBydHQuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJTZXR0aW5nIGEgYmluZGluZyIgaHJlZj0idGFza3MvdHNldGJpbmQuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJBZGRpbmcgYW4gb3BlcmF0aW9uIiBocmVmPSJ0YXNrcy90YWRkb3Blci5odG1sIi8+Ci08dG9waWMgbGFiZWw9IkFkZGluZyBhIG1lc3NhZ2UiIGhyZWY9InRhc2tzL3RhZGRtZXNzLmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iQWRkaW5nIGEgcGFydCB0byBhIG1lc3NhZ2UiIGhyZWY9InRhc2tzL3RhZGRwYXJ0Lmh0bWwiLz4KLTx0b3BpYyBsYWJlbD0iQ3JlYXRpbmcgYW4gaW1wb3J0IHN0YXRlbWVudCIgaHJlZj0idGFza3MvdGNydGltcHQuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJDcmVhdGluZyBhIG5ldyB0eXBlIGZvciB5b3VyIFdTREwgZmlsZSIgaHJlZj0idGFza3MvdGNydHR5cGUuaHRtbCIvPgotPC90b3BpYz4KLTwvdG9waWM+Ci08dG9waWMgbGFiZWw9IkV4cGxvcmluZyBXU0RMIHVzaW5nIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIiIGhyZWY9Ii4uL29yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aS5kb2MudXNlci90YXNrcy90d3NkbGV4cC5odG1sIi8+Ci08L3RvYz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci8uY3ZzaWdub3JlIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4NWE2OWMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXJfMS4wLjAuamFyCi1iYWsKLXRlbXAKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci8ucHJvamVjdCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQ3YzQ2ZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3MzdjOWEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1N1biBNYXkgMDcgMjM6MDk6MTAgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy88cHJvamVjdD49SVNPLTg4NTktMQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL0RvY0J1aWxkLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9Eb2NCdWlsZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2YmI3YjIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL0RvY0J1aWxkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgotPCEtLSAKLQotCVRoaXMgc2NyaXB0IGJ1aWxkIHRoZSBIZWxwIHBsdWctaW4gYnkgdHJhbnNmb3JtaW5nIHRoZSBESVRBIHNvdXJjZSBmaWxlcyBpbnRvIEhUTUwuCi0JCi0JVG8gdXNlIHRoaXMgc2NyaXB0LCB5b3UgbXVzdCBpbnN0YWxsIERJVEEtT1Qgb24geW91ciBtYWNoaW5lIGluIHRoZSBkaXJlY3RvcnkKLQlkZWZpbmVkIGJ5IHRoZSBkaXRhLm90LmRpciBwcm9wZXJ0eS4KLQkKLQlSdW4gdGhlIGRlZmF1bHQgdGFyZ2V0IGFmdGVyIHlvdSBlZGl0IHRoZSBESVRBIHNvdXJjZSBmaWxlcyB0byByZWdlbmVyYXRlIHRoZSBIVE1MLgotCQotCVRvIGN1c3RvbWl6ZSB0aGlzIHNjcmlwdCBmb3Igb3RoZXIgSGVscCBwbHVnLWlucywgbW9kaWZ5IHRoZSB2YWx1ZSBvZiB0aGUgYXJncy5pbnB1dCBwcm9wZXJ0eQotCXRvIGJlIHRoZSBESVRBIG1hcCBmaWxlIGZvciB0aGUgcGx1Zy1pbi4KLQkKLQlOT1RFOiBUaGlzIHNjcmlwdCBhc3N1bWVzIHRoYXQgbGlua3MgdG8gc2libGluZyBIZWxwIHBsdWctaW5zIGhhdmUgc2NvcGU9InBlZXIiLCBvdGhlcndpc2UgdGhlCi0Jb3V0cHV0IGRpcmVjdG9yeSBzdHJ1Y3R1cmUgd2lsbCBiZSBzaGlmdGVkIGluY29ycmVjdGx5LgotCQotCU5PVEU6IFRoaXMgc2NyaXB0IGFzc3VtZXMgdGhhdCB5b3UgaGFuZCBjb2RlIHlvdXIgcGx1Z2luLnhtbCBmaWxlIGluIG15cGx1Z2luLnhtbC4gVGhpcyBmaWxlCi0Jd2lsbCBiZSBjb3BpZWQgb3ZlciB0aGUgZ2VuZXJhdGVkIHBsdWdpbi54bWwgd2hpY2ggaXMgY3VycmVudGx5IG5vdCBiZWluZyBnZW5lcmF0ZWQgY29ycmVjdGx5Ci0JYnkgRElUQS1PVC4KLQkKLQlDaGFuZ2VMb2c6Ci0JMjAwNi0wNC0wNSBBcnRodXIgUnltYW4gPHJ5bWFuQGNhLmlibS5jb20+Ci0JLSBDcmVhdGVkLgotCi0tLT4KLTxwcm9qZWN0IG5hbWU9ImVjbGlwc2VoZWxwIiBkZWZhdWx0PSJhbGwiPgotCi0JPHByb3BlcnR5IG5hbWU9ImRpdGEub3QuZGlyIiBsb2NhdGlvbj0iQzovRElUQS1PVDEuMi4yIiAvPgotCi0JPHBhdGggaWQ9ImRvc3QuY2xhc3MucGF0aCI+Ci0JCTxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtkaXRhLm90LmRpcn0ke2ZpbGUuc2VwYXJhdG9yfWxpYiR7ZmlsZS5zZXBhcmF0b3J9ZG9zdC5qYXIiIC8+Ci0JPC9wYXRoPgotCi0JPHRhc2tkZWYgbmFtZT0iaW50ZWdyYXRlIiBjbGFzc25hbWU9Im9yZy5kaXRhLmRvc3QucGxhdGZvcm0uSW50ZWdyYXRvclRhc2siPgotCQk8Y2xhc3NwYXRoIHJlZmlkPSJkb3N0LmNsYXNzLnBhdGgiIC8+Ci0JPC90YXNrZGVmPgotCTx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJpbnRlZ3JhdGUsIGVjbGlwc2VoZWxwIj4KLQk8L3RhcmdldD4KLQk8dGFyZ2V0IG5hbWU9ImludGVncmF0ZSI+Ci0JCTxpbnRlZ3JhdGUgZGl0YWRpcj0iJHtkaXRhLm90LmRpcn0iIC8+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tIHJldmlzZSBiZWxvdyBoZXJlIC0tPgotCTx0YXJnZXQgbmFtZT0iZWNsaXBzZWhlbHAiPgotCQk8YW50IGFudGZpbGU9IiR7ZGl0YS5vdC5kaXJ9JHtmaWxlLnNlcGFyYXRvcn1jb25kdWN0b3IueG1sIiB0YXJnZXQ9ImluaXQiIGRpcj0iJHtkaXRhLm90LmRpcn0iPgotCQkJPHByb3BlcnR5IG5hbWU9ImFyZ3MuY29weWNzcyIgdmFsdWU9Im5vIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9ImFyZ3MuY3NzcGF0aCIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5kb2MudXNlciIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJhcmdzLmVjbGlwc2UucHJvdmlkZXIiIHZhbHVlPSJFY2xpcHNlLm9yZyIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJhcmdzLmVjbGlwc2UudmVyc2lvbiIgdmFsdWU9IjEuNS4wIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9ImFyZ3MuaW5wdXQiIGxvY2F0aW9uPSJ3c3dzaXRlc3RfdG9jLmRpdGFtYXAiIC8+ICAgIAkJCi0JCQk8cHJvcGVydHkgbmFtZT0iY2xlYW4udGVtcCIgdmFsdWU9InRydWUiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iZGl0YS5leHRuYW1lIiB2YWx1ZT0iLmRpdGEiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0iZGl0YS50ZW1wLmRpciIgbG9jYXRpb249InRlbXAiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0ib3V0cHV0LmRpciIgbG9jYXRpb249Ii4uIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9InRyYW5zdHlwZSIgdmFsdWU9ImVjbGlwc2VoZWxwIiAvPgotCQk8L2FudD4KLQkJPGNvcHkgZmlsZT0ibXlwbHVnaW4ueG1sIiB0b2ZpbGU9InBsdWdpbi54bWwiIG92ZXJ3cml0ZT0ieWVzIiAvPgotCTwvdGFyZ2V0PgotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL01FVEEtSU5GL01BTklGRVNULk1GIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2M2ZlMDJmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXI7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4yMDMucXVhbGlmaWVyCi1CdW5kbGUtVmVuZG9yOiAlcGx1Z2luUHJvdmlkZXIKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL2Fib3V0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkYjM2ZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL2J1aWxkLnByb3BlcnRpZXMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjJlYjE3Yy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgaW1hZ2VzLyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIHRhc2tzLyouaHRtKixcCi0gICAgICAgICAgICAgICB3c3dzaXRlc3RfdG9jLnhtbCxcCi0gICAgICAgICAgICAgICBvcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyaW5kZXgueG1sLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBpbmRleC8sXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKLXNyYy5pbmNsdWRlcyA9IGJ1aWxkLnByb3BlcnRpZXMsXAotCQkgICAgICAgKi5tYXBsaXN0LFwKLSAgICAgICAgICAgICAgICouZGl0YW1hcCxcCi0JCSAgICAgIHRhc2tzLyouZGl0YQotYmluLmV4Y2x1ZGVzID0gRG9jQnVpbGQueG1sLFwKLSAgICAgICAgICAgICAgIG15UGx1Z2luKi54bWwKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9pbWFnZXMvdHJhZmZpYy5naWYgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvaW1hZ2VzL3RyYWZmaWMuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzFlYTRhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9pbWFnZXMvdHJhZmZpYy5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvaW1hZ2VzL3dzaXZhbGljby5naWYgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvaW1hZ2VzL3dzaXZhbGljby5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiY2FkODQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL2ltYWdlcy93c2l2YWxpY28uZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL2luZGV4L18zLmNmcyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9pbmRleC9fMy5jZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhNzg2YjcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL2luZGV4L18zLmNmcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9pbmRleC9kZWxldGFibGUgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvaW5kZXgvZGVsZXRhYmxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDIzMjQyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9pbmRleC9kZWxldGFibGUKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9jb250cmlidXRpb25zIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfY29udHJpYnV0aW9ucwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzM4NWIyNi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9jb250cmlidXRpb25zCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVGhpcyBpcyBhIGdlbmVyYXRlZCBmaWxlOyBkbyBub3QgZWRpdC4NCi0jV2VkIE1heSAwOSAxNDoxNTo1MiBFRFQgMjAwNw0KLW9yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXI9b3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlclxuMS4wLjIwMi5xdWFsaWZpZXINCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kZXBlbmRlbmNpZXMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kZXBlbmRlbmNpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwNzkxNTAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfZGVwZW5kZW5jaWVzCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0jVGhpcyBpcyBhIGdlbmVyYXRlZCBmaWxlOyBkbyBub3QgZWRpdC4NCi0jV2VkIE1heSAwOSAxNDoxNTo1MiBFRFQgMjAwNw0KLWx1Y2VuZT0xLjQuMTAzLnYyMDA2MDYwMQ0KLWFuYWx5emVyPW9yZy5lY2xpcHNlLmhlbHAuYmFzZVwjMy4yLjAudjIwMDYwNjAxP2xvY2FsZVw9ZW4NCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kb2NzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL2luZGV4L2luZGV4ZWRfZG9jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjhmYzZhOS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvaW5kZXgvaW5kZXhlZF9kb2NzCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi0jVGhpcyBpcyBhIGdlbmVyYXRlZCBmaWxlOyBkbyBub3QgZWRpdC4NCi0jV2VkIE1heSAwOSAxNDoxNTo1MiBFRFQgMjAwNw0KLS9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2l2YWwuaHRtbD0wDQotL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvdGFza3MvdHdzZGx2YWwuaHRtbD0wDQotL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvdGFza3MvdG1vbml0b3IuaHRtbD0wDQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL2luZGV4L3NlZ21lbnRzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL2luZGV4L3NlZ21lbnRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWI1ZDBjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9pbmRleC9zZWdtZW50cworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9teXBsdWdpbi54bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvbXlwbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MmNmM2JkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9teXBsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLTwhLS0gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAtLT4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLTwhLS0gVGhpcyBpcyB0aGUgcGx1Z2luIGZvciBkZWNsYXJpbmcgdGhlIGhlbHAgICAgICAgICAtLT4KLTwhLS0gY29udHJpYnV0aW9ucyBmb3IgdXNpbmcgdGhlIHRvb2wuICAgICAgICAgICAgICAgICAtLT4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQotPHBsdWdpbj4KLQotPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC50b2MiPgotICAgIDx0b2MgZmlsZT0id3N3c2l0ZXN0X3RvYy54bWwiLz4gCi0gICAgICAgPGluZGV4IHBhdGg9ImluZGV4LyIvPiAgCi08L2V4dGVuc2lvbj4KLQotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAuaW5kZXgiPgotICAgICAgPGluZGV4IGZpbGU9Im9yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXJpbmRleC54bWwiLz4KLTwvZXh0ZW5zaW9uPgotPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIubWFwbGlzdCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyLm1hcGxpc3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkNThhMjYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIubWFwbGlzdAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPG1hcGxpc3QgdmVyc2lvbj0iMy42LjIiPgotICA8bmF2PgotICAgIDxtYXAgZmlsZT0id3N3c2l0ZXN0X3RvYy5kaXRhbWFwIi8+Ci0gIDwvbmF2PgotICA8bGluaz4KLSAgICA8bWFwIGZpbGU9Indzd3NpdGVzdF90b2MuZGl0YW1hcCIvPgotICA8L2xpbms+Ci08L21hcGxpc3Q+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlcmluZGV4Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlcmluZGV4Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5ZWZkNDYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXJpbmRleC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBodG1sCi0gIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJzZWN1cml0eSIgY29udGVudD0icHVibGljIiAvPgotPG1ldGEgbmFtZT0iUm9ib3RzIiBjb250ZW50PSJpbmRleCxmb2xsb3ciIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIG5hbWU9IkRDLkZvcm1hdCIgY29udGVudD0iWEhUTUwiIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvaWJtZGl0YS5jc3MiIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgLz4KLTx0aXRsZT5JbmRleDwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTxoMT5JbmRleDwvaDE+Ci08c3Ryb25nPlQ8L3N0cm9uZz4KLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT5UQ1AvSVAgTW9uaXRvcgotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPjxhIGhyZWY9InRhc2tzL3Rtb25pdG9yLmh0bWwjdG1vbml0b3IiPnRlc3RpbmcgV2ViIHNlcnZpY2VzPC9hPgotPC9saT4KLTwvdWw+Ci08L2xpPgotPC91bD4KLTxzdHJvbmc+Vzwvc3Ryb25nPgotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPldlYiBzZXJ2aWNlcwotPHVsIGNsYXNzPSJpbmRleGxpc3QiPgotPGxpPjxhIGhyZWY9InRhc2tzL3Rtb25pdG9yLmh0bWwjdG1vbml0b3IiPm1vbml0b3JpbmcgVENQL0lQIHRyYWZmaWM8L2E+Ci08L2xpPgotPGxpPjxhIGhyZWY9InRhc2tzL3Rtb25pdG9yLmh0bWwjdG1vbml0b3IiPnRlc3RpbmcgdHJhZmZpYzwvYT4KLTwvbGk+Ci08bGk+dmFsaWRhdGluZyBXUy1JIGNvbXBsaWFuY2UKLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT48YSBocmVmPSJ0YXNrcy90d3NpdmFsLmh0bWwjdHdzaXZhbCI+aW50ZXJvcGVyYWJpbGl0eTwvYT4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdHdzaXZhbC5odG1sI3R3c2l2YWwiPnZhbGlkYXRpbmc8L2E+Ci08L2xpPgotPC91bD4KLTwvbGk+Ci08bGk+PGEgaHJlZj0idGFza3MvdHdzZGx2YWwuaHRtbCN0d3NkbHZhbCI+dmFsaWRhdGluZyBXU0RMPC9hPgotPC9saT4KLTwvdWw+Ci08L2xpPgotPGxpPldTLUkKLTx1bCBjbGFzcz0iaW5kZXhsaXN0Ij4KLTxsaT48YSBocmVmPSJ0YXNrcy90d3NpdmFsLmh0bWwjdHdzaXZhbCI+dmFsaWRhdGluZzwvYT4KLTwvbGk+Ci08L3VsPgotPC9saT4KLTxsaT5XU0RMCi08dWwgY2xhc3M9ImluZGV4bGlzdCI+Ci08bGk+PGEgaHJlZj0idGFza3MvdHdzZGx2YWwuaHRtbCN0d3NkbHZhbCI+dmFsaWRhdGluZzwvYT4KLTwvbGk+Ci08L3VsPgotPC9saT4KLTwvdWw+Ci08L2JvZHk+PC9odG1sPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXJpbmRleC54bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlcmluZGV4LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQ1NDdiNC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlcmluZGV4LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08aW5kZXg+Ci0gIDxlbnRyeSBrZXl3b3JkPSJXU0RMIj4KLSAgICA8ZW50cnkga2V5d29yZD0idmFsaWRhdGluZyI+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MvdHdzZGx2YWwuaHRtbCN0d3NkbHZhbCIgdGl0bGU9IlZhbGlkYXRpbmcgV1NETCBmaWxlcyIvPgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJXZWIgc2VydmljZXMiPgotICAgIDxlbnRyeSBrZXl3b3JkPSJ2YWxpZGF0aW5nIFdTREwiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3R3c2RsdmFsLmh0bWwjdHdzZGx2YWwiIHRpdGxlPSJWYWxpZGF0aW5nIFdTREwgZmlsZXMiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJ0ZXN0aW5nIHRyYWZmaWMiPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzL3Rtb25pdG9yLmh0bWwjdG1vbml0b3IiIHRpdGxlPSJVc2luZyB0aGUgVENQL0lQIE1vbml0b3IgdG8gdGVzdCBXZWIgc2VydmljZXMiLz4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJtb25pdG9yaW5nIFRDUC9JUCB0cmFmZmljIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90bW9uaXRvci5odG1sI3Rtb25pdG9yIiB0aXRsZT0iVXNpbmcgdGhlIFRDUC9JUCBNb25pdG9yIHRvIHRlc3QgV2ViIHNlcnZpY2VzIi8+Ci0gICAgPC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0idmFsaWRhdGluZyBXUy1JIGNvbXBsaWFuY2UiPgotICAgICAgPGVudHJ5IGtleXdvcmQ9InZhbGlkYXRpbmciPgotICAgICAgICA8dG9waWMgaHJlZj0idGFza3MvdHdzaXZhbC5odG1sI3R3c2l2YWwiIHRpdGxlPSJWYWxpZGF0aW5nIFdTLUkgV2ViIHNlcnZpY2UgdHJhZmZpYyBjb21wbGlhbmNlIi8+Ci0gICAgICA8L2VudHJ5PgotICAgICAgPGVudHJ5IGtleXdvcmQ9ImludGVyb3BlcmFiaWxpdHkiPgotICAgICAgICA8dG9waWMgaHJlZj0idGFza3MvdHdzaXZhbC5odG1sI3R3c2l2YWwiIHRpdGxlPSJWYWxpZGF0aW5nIFdTLUkgV2ViIHNlcnZpY2UgdHJhZmZpYyBjb21wbGlhbmNlIi8+Ci0gICAgICA8L2VudHJ5PgotICAgIDwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJUQ1AvSVAgTW9uaXRvciI+Ci0gICAgPGVudHJ5IGtleXdvcmQ9InRlc3RpbmcgV2ViIHNlcnZpY2VzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90bW9uaXRvci5odG1sI3Rtb25pdG9yIiB0aXRsZT0iVXNpbmcgdGhlIFRDUC9JUCBNb25pdG9yIHRvIHRlc3QgV2ViIHNlcnZpY2VzIi8+Ci0gICAgPC9lbnRyeT4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9IldTLUkiPgotICAgIDxlbnRyeSBrZXl3b3JkPSJ2YWxpZGF0aW5nIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrcy90d3NpdmFsLmh0bWwjdHdzaXZhbCIgdGl0bGU9IlZhbGlkYXRpbmcgV1MtSSBXZWIgc2VydmljZSB0cmFmZmljIGNvbXBsaWFuY2UiLz4KLSAgICA8L2VudHJ5PgotICA8L2VudHJ5PgotPC9pbmRleD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvcGx1Z2luLnByb3BlcnRpZXMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5MzZmZWMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgTkxTX01FU1NBR0VGT1JNQVRfVkFSIAotIyBOTFNfRU5DT0RJTkc9VVRGLTggCi0KLXBsdWdpbk5hbWUgICAgID0gV1MtSSBWYWxpZGF0aW9uIERvY3VtZW50YXRpb24KLXBsdWdpblByb3ZpZGVyID0gRWNsaXBzZS5vcmcKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci9wbHVnaW4ueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyMTlkYWEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLTwhLS0gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAtLT4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLTwhLS0gVGhpcyBpcyB0aGUgcGx1Z2luIGZvciBkZWNsYXJpbmcgdGhlIGhlbHAgICAgICAgICAtLT4KLTwhLS0gY29udHJpYnV0aW9ucyBmb3IgdXNpbmcgdGhlIHRvb2wuICAgICAgICAgICAgICAgICAtLT4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQotPHBsdWdpbj4KLQotPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC50b2MiPgotICAgIDx0b2MgZmlsZT0id3N3c2l0ZXN0X3RvYy54bWwiLz4gIAotICAgICAgIDxpbmRleCBwYXRoPSJpbmRleC8iLz4gCi08L2V4dGVuc2lvbj4KLQotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAuaW5kZXgiPgotICAgICAgPGluZGV4IGZpbGU9Im9yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXJpbmRleC54bWwiLz4KLTwvZXh0ZW5zaW9uPgotPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3Rtb25pdG9yLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvdGFza3MvdG1vbml0b3IuZGl0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTM5NWIyNy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvdGFza3MvdG1vbml0b3IuZGl0YQorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tQXJib3J0ZXh0LCBJbmMuLCAxOTg4LTIwMDUsIHYuNDAwMi0tPgotPCFET0NUWVBFIHRhc2sgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgVGFzay8vRU4iCi0gInRhc2suZHRkIj4KLTx0YXNrIGlkPSJ0bW9uaXRvciIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5Vc2luZyB0aGUgVENQL0lQIE1vbml0b3IgdG8gdGVzdCBXZWIgc2VydmljZXM8L3RpdGxlPgotPHRpdGxlYWx0cz4KLTxzZWFyY2h0aXRsZT5Vc2luZyB0aGUgVENQL0lQIG9yIFNPQVAgbW9uaXRvciB0byB0ZXN0IFdlYiBzZXJ2aWNlczwvc2VhcmNodGl0bGU+Ci08L3RpdGxlYWx0cz4KLTxzaG9ydGRlc2M+T25jZSB5b3UgaGF2ZSBjcmVhdGVkIHlvdXIgV2ViIHNlcnZpY2UgYW5kIFdlYiBzZXJ2aWNlIGNsaWVudCwKLXlvdSBjYW4gbW9uaXRvciB0aGUgV2ViIHNlcnZpY2UncyBTT0FQIHRyYWZmaWMgdXNpbmcgdGhlIFRDUC9JUCBNb25pdG9yLjwvc2hvcnRkZXNjPgotPHByb2xvZz48bWV0YWRhdGE+Ci08a2V5d29yZHM+PGluZGV4dGVybT5UQ1AvSVAgTW9uaXRvcjxpbmRleHRlcm0+dGVzdGluZyBXZWIgc2VydmljZXM8L2luZGV4dGVybT48L2luZGV4dGVybT4KLTxpbmRleHRlcm0+V2ViIHNlcnZpY2VzPGluZGV4dGVybT50ZXN0aW5nIHRyYWZmaWM8L2luZGV4dGVybT48aW5kZXh0ZXJtPm1vbml0b3JpbmcKLVRDUC9JUCB0cmFmZmljPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9rZXl3b3Jkcz4KLTwvbWV0YWRhdGE+PC9wcm9sb2c+Ci08dGFza2JvZHk+Ci08cHJlcmVxPjxwPiBQcmVyZXF1aXNpdGVzOiA8L3A+PHVsPgotPGxpPkdlbmVyYXRlIGEgV2ViIHNlcnZpY2U8L2xpPgotPGxpPkdlbmVyYXRlIGEgUHJveHkgYW5kIGEgc2FtcGxlIGFwcGxpY2F0aW9uPC9saT4KLTwvdWw+PC9wcmVyZXE+Ci08Y29udGV4dD48cD5XaGVuIGNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgdXNpbmcgdGhlIFdlYiBzZXJ2aWNlIG9yIFdlYiBzZXJ2aWNlCi1jbGllbnQgd2l6YXJkcywgeW91IGNhbiBzZWxlY3QgdG8gc2V0IHVwIGFuZCBydW4gdGhlIFRDUC9JUCBNb25pdG9yIGF1dG9tYXRpY2FsbHkuCi1BbHRlcm5hdGVseSwgeW91IGNhbiBzZXQgdXAgdGhlIFRDUC9JUCBNb25pdG9yIG1hbnVhbGx5IGJ5IGNvbXBsZXRpbmcgdGhlCi1mb2xsb3dpbmcgc3RlcHM6PC9wPjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+SW4gdGhlIHNhbXBsZSBhcHBsaWNhdGlvbiwgaW52b2tlIHRoZSBnZXRFbmRQb2ludCBtZXRob2QuIFJlY29yZAotdGhpcyBlbmRwb2ludC4gVGhlIGRlZmF1bHQgZW5kcG9pbnQgZm9yIGEgV2ViIHNlcnZpY2UgaXM6IGh0dHA6Ly9sb2NhbGhvc3Q6Jmx0O3BvcnQ+LyZsdDt3ZWIKLW1vZHVsZSBjb250ZXh0IHJvb3Q+L3NlcnZpY2VzLyZsdDtwb3J0PjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+Q3JlYXRlIGEgc2VydmVyIHRvIGFjdCBhcyB0aGUgVENQL0lQIE1vbml0b3I6PC9jbWQ+Ci08c3Vic3RlcHM+Ci08c3Vic3RlcD48Y21kPkZyb20gdGhlIFdpbmRvdyBtZW51LCBzZWxlY3QgPHVpY29udHJvbD5QcmVmZXJlbmNlczwvdWljb250cm9sPi4gPC9jbWQ+Ci08L3N1YnN0ZXA+Ci08c3Vic3RlcD48Y21kPkluIHRoZSBQcmVmZXJlbmNlcyB3aW5kb3csIGV4cGFuZCA8dWljb250cm9sPlJ1bi9EZWJ1ZzwvdWljb250cm9sPiwKLWFuZCB0aGVuIHNlbGVjdCA8dWljb250cm9sPlRDUC9JUCBNb25pdG9yPC91aWNvbnRyb2w+LiA8L2NtZD48L3N1YnN0ZXA+Ci08c3Vic3RlcD48Y21kPlNlbGVjdCB0aGUgPHVpY29udHJvbD5TaG93IFRDUC9JUCBNb25pdG9yIFZpZXcgd2hlbiB0aGVyZSBpcwotYWN0aXZpdHk8L3VpY29udHJvbD4gY2hlY2sgYm94LiA8L2NtZD48L3N1YnN0ZXA+Ci08c3Vic3RlcD48Y21kPlVuZGVyIHRoZSBUQ1AvSVAgTW9uaXRvcnMgbGlzdHMsIGNsaWNrIDx1aWNvbnRyb2w+QWRkPC91aWNvbnRyb2w+LgotQSBOZXcgTW9uaXRvciBkaWFsb2cgb3BlbnMuPC9jbWQ+PC9zdWJzdGVwPgotPHN1YnN0ZXA+PGNtZD5TcGVjaWZ5IHRoZSBmb2xsb3dpbmcgc2V0dGluZ3M6IDwvY21kPjwvc3Vic3RlcD4KLTwvc3Vic3RlcHM+Ci08Y2hvaWNldGFibGU+Ci08Y2hoZWFkPjxjaG9wdGlvbmhkPk9wdGlvbjwvY2hvcHRpb25oZD48Y2hkZXNjaGQ+RGVzY3JpcHRpb248L2NoZGVzY2hkPjwvY2hoZWFkPgotPGNocm93PjxjaG9wdGlvbj5Mb2NhbCBtb25pdG9yaW5nIHBvcnQ8L2Nob3B0aW9uPjxjaGRlc2M+U3BlY2lmeSBhIHVuaXF1ZQotcG9ydCBudW1iZXIgb24geW91ciBsb2NhbCBtYWNoaW5lLjwvY2hkZXNjPjwvY2hyb3c+Ci08Y2hyb3c+PGNob3B0aW9uPkhvc3QgbmFtZTwvY2hvcHRpb24+PGNoZGVzYz5TcGVjaWZ5IHRoZSBob3N0IG5hbWUgb3IgSVAgYWRkcmVzcwotb2YgdGhlIG1hY2hpbmUgd2hlcmUgdGhlIHNlcnZlciBpcyBydW5uaW5nLjwvY2hkZXNjPjwvY2hyb3c+Ci08Y2hyb3c+PGNob3B0aW9uPlBvcnQ8L2Nob3B0aW9uPjxjaGRlc2M+U3BlY2lmeSB0aGUgcG9ydCBudW1iZXIgb2YgdGhlIHJlbW90ZQotc2VydmVyLjwvY2hkZXNjPjwvY2hyb3c+Ci08Y2hyb3c+PGNob3B0aW9uPlR5cGU8L2Nob3B0aW9uPjxjaGRlc2M+U3BlY2lmeSB3aGV0aGVyIHRoZSByZXF1ZXN0IHR5cGUgZnJvbQotdGhlIFdlYiBicm93c2VyIGFyZSBzZW50IGJ5IEhUVFAgb3IgVENQL0lQLiBJZiB0aGUgSFRUUCBvcHRpb24gaXMgc2VsZWN0ZWQKLXRoZSByZXF1ZXN0cyBmcm9tIHRoZSBXZWIgYnJvd3NlciBhcmUgbW9kaWZpZWQgc28gdGhhdCB0aGUgSFRUUCBoZWFkZXIgcG9pbnRzCi10byB0aGUgcmVtb3RlIG1hY2hpbmUgYW5kIHNlcGFyYXRlZCBpZiBtdWx0aXBsZSBIVFRQIHJlcXVlc3RzIGFyZSByZWNlaXZlZAotaW4gdGhlIHNhbWUgY29ubmVjdGlvbi4gSWYgdGhlIFRDUC9JUCBvcHRpb24gaXMgc2VsZWN0ZWQsIGFsbCB0aGUgcmVxdWVzdHMKLWFyZSBzZW50IGJ5dGUgZm9yIGJ5dGUuIDwvY2hkZXNjPjwvY2hyb3c+Ci08L2Nob2ljZXRhYmxlPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5JbiBvcmRlciB0byByb3V0ZSB0aGUgV2ViIHNlcnZpY2UgdGhyb3VnaCB0aGUgbW9uaXRvciwgdGhlIGVuZHBvaW50Ci1vZiB0aGUgV2ViIHNlcnZpY2UgY2xpZW50IG5lZWRzIHRvIGJlIGNoYW5nZWQuIFRoZSBUQ1AvSVAgTW9uaXRvciBsaXN0ZW5zCi1vbiBwb3J0IDkwODEuIEluIHRoZSBXZWIgYnJvd3NlciB3aW5kb3cgdXNlZCBpbiBzdGVwIDEsIGludm9rZSB0aGUgc2V0RW5kUG9pbnQKLW1ldGhvZCwgYW5kIGNoYW5nZSB0aGUgZW5kcG9pbnQgc28gdGhhdCBpdCBkaXJlY3RzIHRvIHBvcnQgOTA4MS4gRm9yIGV4YW1wbGUsCi10aGUgZGVmYXVsdCB3b3VsZCBiZTogPGNvZGVwaD5odHRwOi8vbG9jYWxob3N0OjkwODEvd2ViX21vZHVsZV9jb250ZXh0X3Jvb3Qvc2VydmxldC9ycGNyb3V0ZXI8L2NvZGVwaD4gSW52b2tlCi10aGUgZ2V0RW5kUG9pbnQgbWV0aG9kIGFnYWluIHRvIGVuc3VyZSB0aGF0IHlvdXIgY2hhbmdlIGhhcyBiZWVuIGltcGxlbWVudGVkLjwvY21kPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5TZWxlY3QgYSBXZWIgc2VydmljZSBtZXRob2QgaW4gdGhlIE1ldGhvZHMgcGFuZS4gSW52b2tlIHRoaXMgbWV0aG9kLjwvY21kPgotPC9zdGVwPgotPHN0ZXA+PGNtZD5DaGFuZ2UgdG8gdGhlIFRDUC9JUCBNb25pdG9yIHZpZXcgYnkgc2VsZWN0aW5nIHRoZSBUQ1AvSVAgTW9uaXRvcgotdGFiIGluIHRoZSBTZXJ2ZXJzIHZpZXcuIFRoaXMgd2lsbCBkaXNwbGF5IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHBhaXJzIHRoYXQKLWFyZSBiZWluZyByb3V0ZWQgdGhyb3VnaCB0aGUgVENQL0lQIE1vbml0b3IuIEl0IHdpbGwgbG9vayBzaW1pbGFyIHRvIHRoZSBmb2xsb3dpbmcKLXBpY3R1cmU6ICA8aW1hZ2UgYWx0PSJTY3JlZW4gY2FwdHVyZSBvZiByZXF1ZXN0IGFuZCByZXNwb25zZSB0cmFmZmljIiBocmVmPSIuLi9pbWFnZXMvdHJhZmZpYy5naWYiCi1wbGFjZW1lbnQ9ImJyZWFrIj48L2ltYWdlPjwvY21kPjwvc3RlcD4KLTxzdGVwPjxjbWQ+VG8gZW5zdXJlIHRoYXQgeW91ciBXZWIgc2VydmljZSBTT0FQIHRyYWZmaWMgaXMgV1MtSSBjb21wbGlhbnQsCi15b3UgY2FuIGdlbmVyYXRlIGEgbG9nIGZpbGUgYnkgY2xpY2tpbmcgdGhlICA8aW1hZ2UgYWx0PSJXUy1JIHZhbGlkYXRpb24gaWNvbiIKLWhyZWY9Ii4uL2ltYWdlcy93c2l2YWxpY28uZ2lmIj48L2ltYWdlPiBpY29uLiBJbiB0aGUgZGlhbG9nIGJveCB0aGF0IG9wZW5zLAotc2VsZWN0IGEgbmFtZSBmb3IgdGhlIGxvZyBmaWxlIGFuZCBzcGVjaWZ5IHdoZXJlIHlvdSB3YW50IGl0IHRvIGJlIHN0b3JlZC4gPC9jbWQ+Ci08L3N0ZXA+Ci08L3N0ZXBzPgotPHJlc3VsdD5UaGlzIGxvZyBmaWxlIHdpbGwgYmUgdmFsaWRhdGVkIGZvciBXUy1JIGNvbXBsaWFuY2UuIFlvdSBjYW4gb3BlbgotdGhlIGxvZyBmaWxlIGluIGFuIFhNTCBlZGl0b3IgdG8gZXhhbWluZSBpdHMgY29udGVudHMuPC9yZXN1bHQ+Ci08L3Rhc2tib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgQ29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2Nzb2FwLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD5TT0FQPC9saW5rdGV4dD48L2xpbms+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW92ZXIuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PldTLUk8L2xpbmt0ZXh0PjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgVGFza3M8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3Rhc2tzL3R3c2ljb21wbHkuZGl0YSIgc2NvcGU9InBlZXIiPgotPGxpbmt0ZXh0PlNldHRpbmcgdGhlIGxldmVsIG9mIFdTLUkgY29tcGxpYW5jZTwvbGlua3RleHQ+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvdGFzaz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci90YXNrcy90bW9uaXRvci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3Rtb25pdG9yLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2N2VhOGUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3Rtb25pdG9yLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDciIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iVXNpbmcgdGhlIFRDUC9JUCBNb25pdG9yIHRvIHRlc3QgV2ViIHNlcnZpY2VzIiAvPgotPG1ldGEgbmFtZT0iYWJzdHJhY3QiIGNvbnRlbnQ9Ik9uY2UgeW91IGhhdmUgY3JlYXRlZCB5b3VyIFdlYiBzZXJ2aWNlIGFuZCBXZWIgc2VydmljZSBjbGllbnQsIHlvdSBjYW4gbW9uaXRvciB0aGUgV2ViIHNlcnZpY2UncyBTT0FQIHRyYWZmaWMgdXNpbmcgdGhlIFRDUC9JUCBNb25pdG9yLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJPbmNlIHlvdSBoYXZlIGNyZWF0ZWQgeW91ciBXZWIgc2VydmljZSBhbmQgV2ViIHNlcnZpY2UgY2xpZW50LCB5b3UgY2FuIG1vbml0b3IgdGhlIFdlYiBzZXJ2aWNlJ3MgU09BUCB0cmFmZmljIHVzaW5nIHRoZSBUQ1AvSVAgTW9uaXRvci4iIC8+Ci08bWV0YSBjb250ZW50PSJUQ1AvSVAgTW9uaXRvciwgdGVzdGluZyBXZWIgc2VydmljZXMsIFdlYiBzZXJ2aWNlcywgdGVzdGluZyB0cmFmZmljLCBtb25pdG9yaW5nIFRDUC9JUCB0cmFmZmljIiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iVENQL0lQIE1vbml0b3IsIHRlc3RpbmcgV2ViIHNlcnZpY2VzLCBXZWIgc2VydmljZXMsIHRlc3RpbmcgdHJhZmZpYywgbW9uaXRvcmluZyBUQ1AvSVAgdHJhZmZpYyIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jc29hcC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW92ZXIuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3Rhc2tzL3R3c2ljb21wbHkuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0bW9uaXRvciIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPlVzaW5nIHRoZSBUQ1AvSVAgb3IgU09BUCBtb25pdG9yIHRvIHRlc3QgV2ViIHNlcnZpY2VzPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0bW9uaXRvciI+PGEgbmFtZT0idG1vbml0b3IiPjwhLS0gLS0+PC9hPgotCi0KLTxoMSBjbGFzcz0idG9waWN0aXRsZTEiPlVzaW5nIHRoZSBUQ1AvSVAgTW9uaXRvciB0byB0ZXN0IFdlYiBzZXJ2aWNlczwvaDE+Ci0KLQotCi0KLTxkaXY+PHA+T25jZSB5b3UgaGF2ZSBjcmVhdGVkIHlvdXIgV2ViIHNlcnZpY2UgYW5kIFdlYiBzZXJ2aWNlIGNsaWVudCwKLXlvdSBjYW4gbW9uaXRvciB0aGUgV2ViIHNlcnZpY2UncyBTT0FQIHRyYWZmaWMgdXNpbmcgdGhlIFRDUC9JUCBNb25pdG9yLjwvcD4KLQotPGRpdiBjbGFzcz0icCI+PHA+IFByZXJlcXVpc2l0ZXM6IDwvcD4KLTx1bD4KLTxsaT5HZW5lcmF0ZSBhIFdlYiBzZXJ2aWNlPC9saT4KLQotPGxpPkdlbmVyYXRlIGEgUHJveHkgYW5kIGEgc2FtcGxlIGFwcGxpY2F0aW9uPC9saT4KLQotPC91bD4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJzZWN0aW9uIj48cD5XaGVuIGNyZWF0aW5nIGEgV2ViIHNlcnZpY2UgdXNpbmcgdGhlIFdlYiBzZXJ2aWNlIG9yIFdlYiBzZXJ2aWNlCi1jbGllbnQgd2l6YXJkcywgeW91IGNhbiBzZWxlY3QgdG8gc2V0IHVwIGFuZCBydW4gdGhlIFRDUC9JUCBNb25pdG9yIGF1dG9tYXRpY2FsbHkuCi1BbHRlcm5hdGVseSwgeW91IGNhbiBzZXQgdXAgdGhlIFRDUC9JUCBNb25pdG9yIG1hbnVhbGx5IGJ5IGNvbXBsZXRpbmcgdGhlCi1mb2xsb3dpbmcgc3RlcHM6PC9wPgotPC9kaXY+Ci0KLTxvbD4KLTxsaT48c3Bhbj5JbiB0aGUgc2FtcGxlIGFwcGxpY2F0aW9uLCBpbnZva2UgdGhlIGdldEVuZFBvaW50IG1ldGhvZC4gUmVjb3JkCi10aGlzIGVuZHBvaW50LiBUaGUgZGVmYXVsdCBlbmRwb2ludCBmb3IgYSBXZWIgc2VydmljZSBpczogaHR0cDovL2xvY2FsaG9zdDombHQ7cG9ydCZndDsvJmx0O3dlYgotbW9kdWxlIGNvbnRleHQgcm9vdCZndDsvc2VydmljZXMvJmx0O3BvcnQmZ3Q7PC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5DcmVhdGUgYSBzZXJ2ZXIgdG8gYWN0IGFzIHRoZSBUQ1AvSVAgTW9uaXRvcjo8L3NwYW4+Ci08b2wgdHlwZT0iYSI+Ci08bGk+PHNwYW4+RnJvbSB0aGUgV2luZG93IG1lbnUsIHNlbGVjdCA8c3BhbiBjbGFzcz0idWljb250cm9sIj5QcmVmZXJlbmNlczwvc3Bhbj4uIDwvc3Bhbj4KLTwvbGk+Ci0KLTxsaT48c3Bhbj5JbiB0aGUgUHJlZmVyZW5jZXMgd2luZG93LCBleHBhbmQgPHNwYW4gY2xhc3M9InVpY29udHJvbCI+UnVuL0RlYnVnPC9zcGFuPiwKLWFuZCB0aGVuIHNlbGVjdCA8c3BhbiBjbGFzcz0idWljb250cm9sIj5UQ1AvSVAgTW9uaXRvcjwvc3Bhbj4uIDwvc3Bhbj48L2xpPgotCi08bGk+PHNwYW4+U2VsZWN0IHRoZSA8c3BhbiBjbGFzcz0idWljb250cm9sIj5TaG93IFRDUC9JUCBNb25pdG9yIFZpZXcgd2hlbiB0aGVyZSBpcwotYWN0aXZpdHk8L3NwYW4+IGNoZWNrIGJveC4gPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5VbmRlciB0aGUgVENQL0lQIE1vbml0b3JzIGxpc3RzLCBjbGljayA8c3BhbiBjbGFzcz0idWljb250cm9sIj5BZGQ8L3NwYW4+LgotQSBOZXcgTW9uaXRvciBkaWFsb2cgb3BlbnMuPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5TcGVjaWZ5IHRoZSBmb2xsb3dpbmcgc2V0dGluZ3M6IDwvc3Bhbj48L2xpPgotCi08L29sPgotCi0KLTx0YWJsZSBjbGFzcz0iY2hvaWNldGFibGVib3JkZXIiIHN1bW1hcnk9IiIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSI0IiBydWxlcz0icm93cyIgZnJhbWU9ImhzaWRlcyIgYm9yZGVyPSIxIj4KLTx0aGVhZD48dHI+PHRoIHZhbGlnbj0iYm90dG9tIiBpZD0iTjEwMEU5LW9wdGlvbiI+T3B0aW9uPC90aD4KLTx0aCB2YWxpZ249ImJvdHRvbSIgaWQ9Ik4xMDBFOS1kZXNjIj5EZXNjcmlwdGlvbjwvdGg+PC90cj48L3RoZWFkPgotPHRib2R5PgotCi08dHI+PHRkIHZhbGlnbj0idG9wIiBoZWFkZXJzPSJOMTAwRTktb3B0aW9uIiBpZD0iTjEwMTAyIj48c3Ryb25nPkxvY2FsIG1vbml0b3JpbmcgcG9ydDwvc3Ryb25nPjwvdGQ+Ci08dGQgdmFsaWduPSJ0b3AiIGhlYWRlcnM9Ik4xMDBFOS1kZXNjIE4xMDEwMiI+U3BlY2lmeSBhIHVuaXF1ZQotcG9ydCBudW1iZXIgb24geW91ciBsb2NhbCBtYWNoaW5lLjwvdGQ+Ci08L3RyPgotCi08dHI+PHRkIHZhbGlnbj0idG9wIiBoZWFkZXJzPSJOMTAwRTktb3B0aW9uIiBpZD0iTjEwMTExIj48c3Ryb25nPkhvc3QgbmFtZTwvc3Ryb25nPjwvdGQ+Ci08dGQgdmFsaWduPSJ0b3AiIGhlYWRlcnM9Ik4xMDBFOS1kZXNjIE4xMDExMSI+U3BlY2lmeSB0aGUgaG9zdCBuYW1lIG9yIElQIGFkZHJlc3MKLW9mIHRoZSBtYWNoaW5lIHdoZXJlIHRoZSBzZXJ2ZXIgaXMgcnVubmluZy48L3RkPgotPC90cj4KLQotPHRyPjx0ZCB2YWxpZ249InRvcCIgaGVhZGVycz0iTjEwMEU5LW9wdGlvbiIgaWQ9Ik4xMDEyMCI+PHN0cm9uZz5Qb3J0PC9zdHJvbmc+PC90ZD4KLTx0ZCB2YWxpZ249InRvcCIgaGVhZGVycz0iTjEwMEU5LWRlc2MgTjEwMTIwIj5TcGVjaWZ5IHRoZSBwb3J0IG51bWJlciBvZiB0aGUgcmVtb3RlCi1zZXJ2ZXIuPC90ZD4KLTwvdHI+Ci0KLTx0cj48dGQgdmFsaWduPSJ0b3AiIGhlYWRlcnM9Ik4xMDBFOS1vcHRpb24iIGlkPSJOMTAxMkYiPjxzdHJvbmc+VHlwZTwvc3Ryb25nPjwvdGQ+Ci08dGQgdmFsaWduPSJ0b3AiIGhlYWRlcnM9Ik4xMDBFOS1kZXNjIE4xMDEyRiI+U3BlY2lmeSB3aGV0aGVyIHRoZSByZXF1ZXN0IHR5cGUgZnJvbQotdGhlIFdlYiBicm93c2VyIGFyZSBzZW50IGJ5IEhUVFAgb3IgVENQL0lQLiBJZiB0aGUgSFRUUCBvcHRpb24gaXMgc2VsZWN0ZWQKLXRoZSByZXF1ZXN0cyBmcm9tIHRoZSBXZWIgYnJvd3NlciBhcmUgbW9kaWZpZWQgc28gdGhhdCB0aGUgSFRUUCBoZWFkZXIgcG9pbnRzCi10byB0aGUgcmVtb3RlIG1hY2hpbmUgYW5kIHNlcGFyYXRlZCBpZiBtdWx0aXBsZSBIVFRQIHJlcXVlc3RzIGFyZSByZWNlaXZlZAotaW4gdGhlIHNhbWUgY29ubmVjdGlvbi4gSWYgdGhlIFRDUC9JUCBvcHRpb24gaXMgc2VsZWN0ZWQsIGFsbCB0aGUgcmVxdWVzdHMKLWFyZSBzZW50IGJ5dGUgZm9yIGJ5dGUuIDwvdGQ+Ci08L3RyPgotCi08L3Rib2R5PjwvdGFibGU+Ci0KLTwvbGk+Ci0KLTxsaT48c3Bhbj5JbiBvcmRlciB0byByb3V0ZSB0aGUgV2ViIHNlcnZpY2UgdGhyb3VnaCB0aGUgbW9uaXRvciwgdGhlIGVuZHBvaW50Ci1vZiB0aGUgV2ViIHNlcnZpY2UgY2xpZW50IG5lZWRzIHRvIGJlIGNoYW5nZWQuIFRoZSBUQ1AvSVAgTW9uaXRvciBsaXN0ZW5zCi1vbiBwb3J0IDkwODEuIEluIHRoZSBXZWIgYnJvd3NlciB3aW5kb3cgdXNlZCBpbiBzdGVwIDEsIGludm9rZSB0aGUgc2V0RW5kUG9pbnQKLW1ldGhvZCwgYW5kIGNoYW5nZSB0aGUgZW5kcG9pbnQgc28gdGhhdCBpdCBkaXJlY3RzIHRvIHBvcnQgOTA4MS4gRm9yIGV4YW1wbGUsCi10aGUgZGVmYXVsdCB3b3VsZCBiZTogPHNhbXAgY2xhc3M9ImNvZGVwaCI+aHR0cDovL2xvY2FsaG9zdDo5MDgxL3dlYl9tb2R1bGVfY29udGV4dF9yb290L3NlcnZsZXQvcnBjcm91dGVyPC9zYW1wPiBJbnZva2UKLXRoZSBnZXRFbmRQb2ludCBtZXRob2QgYWdhaW4gdG8gZW5zdXJlIHRoYXQgeW91ciBjaGFuZ2UgaGFzIGJlZW4gaW1wbGVtZW50ZWQuPC9zcGFuPgotPC9saT4KLQotPGxpPjxzcGFuPlNlbGVjdCBhIFdlYiBzZXJ2aWNlIG1ldGhvZCBpbiB0aGUgTWV0aG9kcyBwYW5lLiBJbnZva2UgdGhpcyBtZXRob2QuPC9zcGFuPgotPC9saT4KLQotPGxpPjxzcGFuPkNoYW5nZSB0byB0aGUgVENQL0lQIE1vbml0b3IgdmlldyBieSBzZWxlY3RpbmcgdGhlIFRDUC9JUCBNb25pdG9yCi10YWIgaW4gdGhlIFNlcnZlcnMgdmlldy4gVGhpcyB3aWxsIGRpc3BsYXkgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcGFpcnMgdGhhdAotYXJlIGJlaW5nIHJvdXRlZCB0aHJvdWdoIHRoZSBUQ1AvSVAgTW9uaXRvci4gSXQgd2lsbCBsb29rIHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZwotcGljdHVyZTogIDxiciAvPjxpbWcgc3JjPSIuLi9pbWFnZXMvdHJhZmZpYy5naWYiIGFsdD0iU2NyZWVuIGNhcHR1cmUgb2YgcmVxdWVzdCBhbmQgcmVzcG9uc2UgdHJhZmZpYyIgLz48YnIgLz48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPlRvIGVuc3VyZSB0aGF0IHlvdXIgV2ViIHNlcnZpY2UgU09BUCB0cmFmZmljIGlzIFdTLUkgY29tcGxpYW50LAoteW91IGNhbiBnZW5lcmF0ZSBhIGxvZyBmaWxlIGJ5IGNsaWNraW5nIHRoZSAgPGltZyBzcmM9Ii4uL2ltYWdlcy93c2l2YWxpY28uZ2lmIiBhbHQ9IldTLUkgdmFsaWRhdGlvbiBpY29uIiAvPiBpY29uLiBJbiB0aGUgZGlhbG9nIGJveCB0aGF0IG9wZW5zLAotc2VsZWN0IGEgbmFtZSBmb3IgdGhlIGxvZyBmaWxlIGFuZCBzcGVjaWZ5IHdoZXJlIHlvdSB3YW50IGl0IHRvIGJlIHN0b3JlZC4gPC9zcGFuPgotPC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+VGhpcyBsb2cgZmlsZSB3aWxsIGJlIHZhbGlkYXRlZCBmb3IgV1MtSSBjb21wbGlhbmNlLiBZb3UgY2FuIG9wZW4KLXRoZSBsb2cgZmlsZSBpbiBhbiBYTUwgZWRpdG9yIHRvIGV4YW1pbmUgaXRzIGNvbnRlbnRzLjwvZGl2PgotCi08L2Rpdj4KLQotPGRpdj4KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgQ29uY2VwdHM8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3NvYXAuaHRtbCI+U09BUDwvYT48L2Rpdj4KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lvdmVyLmh0bWwiPldTLUk8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgVGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdHdzaWNvbXBseS5odG1sIj5TZXR0aW5nIHRoZSBsZXZlbCBvZiBXUy1JIGNvbXBsaWFuY2U8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci90YXNrcy90d3NkbHZhbC5kaXRhIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2RsdmFsLmRpdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzOWRjN2EuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2RsdmFsLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICJ0YXNrLmR0ZCI+Ci08dGFzayBpZD0idHdzZGx2YWwiIHhtbDpsYW5nPSJlbi11cyI+Ci08dGl0bGU+VmFsaWRhdGluZyBXU0RMIGZpbGVzPC90aXRsZT4KLTx0aXRsZWFsdHM+Ci08c2VhcmNodGl0bGU+VmFsaWRhdGluZyBXU0RMIGZpbGVzPC9zZWFyY2h0aXRsZT4KLTwvdGl0bGVhbHRzPgotPHNob3J0ZGVzYz5JZiB5b3UgaGF2ZSBjcmVhdGVkIGEgV1NETCBmaWxlIHRocm91Z2ggdGhlIFdlYiBzZXJ2aWNlcyB3aXphcmQKLXRoZSBXU0RMIHRoYXQgaXMgZ2VuZXJhdGVkIHNob3VsZCBiZSB2YWxpZC4gSG93ZXZlciwgaWYgeW91IGhhdmUgaW1wb3J0ZWQKLWEgV1NETCBmaWxlLCBvciBpZiB5b3UgYXJlIGNyZWF0aW5nIGEgV1NETCBmaWxlLCB5b3Ugc2hvdWxkIHZhbGlkYXRlIHRoZSBXU0RMCi10byBlbnN1cmUgaXQgaXMgdmFsaWQuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPldTREw8aW5kZXh0ZXJtPnZhbGlkYXRpbmc8L2luZGV4dGVybT48L2luZGV4dGVybT48aW5kZXh0ZXJtPldlYgotc2VydmljZXM8aW5kZXh0ZXJtPnZhbGlkYXRpbmcgV1NETDwvaW5kZXh0ZXJtPjwvaW5kZXh0ZXJtPjwva2V5d29yZHM+Ci08L21ldGFkYXRhPjwvcHJvbG9nPgotPHRhc2tib2R5PgotPGNvbnRleHQ+PHA+SWYgeW91IGhhdmUgc2VsZWN0ZWQgUmVxdWlyZSBvciBTdWdnZXN0IFdTLUkgQ29tcGxpYW5jZSBvbiB0aGUKLVdTLUkgQ29tcGxpYW5jZSBwcmVmZXJlbmNlIHBhZ2UsIHRoZSB2YWxpZGF0aW9uIGFsc28gY2hlY2tzIFdTLUkgY29tcGxpYW5jZS4KLUlmIHlvdSBoYXZlIHNlbGVjdGVkIElnbm9yZSBXUy1JIENvbXBsaWFuY2UgdGhlIHZhbGlkYXRvciB3aWxsIG9ubHkgY2hlY2sKLXRoZSB2YWxpZGl0eSBvZiB0aGUgV1NETC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gc2V0dGluZyBXUy1JIGNvbXBsaWFuY2UKLWxldmVscywgcmVmZXIgdG86ICA8eHJlZiBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdHdzaWNvbXBseS5kaXRhIgotc2NvcGU9InBlZXIiPiBTZXR0aW5nIHRoZSBsZXZlbCBvZiBXUy1JIGNvbXBsaWFuY2U8L3hyZWY+LjwvcD48cD5UaGUgV1NETAotVmFsaWRhdG9yIGNvbXBhcmVzIHRoZSBXU0RMIGZpbGUgaW4geW91ciBwcm9qZWN0IHRvIHRoZSBXM0MgIDx4cmVmIGZvcm1hdD0iaHRtbCIKLWhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3dzZGwiIHNjb3BlPSJleHRlcm5hbCI+V2ViIFNlcnZpY2VzIERlc2NyaXB0aW9uCi1MYW5ndWFnZSAoV1NETCkgMS4xPC94cmVmPiBzcGVjaWZpY2F0aW9ucywgYW5kIHRoZSBXUy1JIGNvbXBsaWFuY2Ugc2V0dGluZ3MKLXRoYXQgeW91IGhhdmUgc2VsZWN0ZWQuPC9wPjxwPlRvIHZhbGlkYXRlIHlvdXIgV1NETCwgY29tcGxldGUgdGhlIGZvbGxvd2luZwotc3RlcHM6PC9wPjwvY29udGV4dD4KLTxzdGVwcz4KLTxzdGVwPjxjbWQ+U2VsZWN0IGEgV1NETCBmaWxlIGluIHRoZSAgPGI+UHJvamVjdCBOYXZpZ2F0b3I8L2I+IHZpZXcuPC9jbWQ+Ci08L3N0ZXA+Ci08c3RlcD48Y21kPlJpZ2h0LWNsaWNrIHRoZSBXU0RMIGZpbGUsIGFuZCBzZWxlY3QgIDxiPlZhbGlkYXRlPC9iPjwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08cmVzdWx0PkFueSBwcm9ibGVtcyBlbmNvdW50ZXJlZCB3aGlsZSB2YWxpZGF0aW5nIHRoZSBmaWxlIHdpbGwgYmUgc2hvd24gaW4KLXRoZSAgPGI+VGFza3M8L2I+IHZpZXcuPHA+V2hlbiB5b3UgcmVidWlsZCBhIHByb2plY3Qgb3Igc2F2ZSBhIHJlc291cmNlLCB0aGUKLVdTREwgVmFsaWRhdG9yIGNhbiBiZSBzZXQgdG8gcnVuIGF1dG9tYXRpY2FsbHkuIFRvIGRvIHRoaXMsIGZyb20gdGhlIFdpbmRvdwotbWVudSwgc2VsZWN0ICA8Yj5QcmVmZXJlbmNlczwvYj4gPiAgPGI+VmFsaWRhdGlvbjwvYj4uIEVuc3VyZSB0aGF0IHRoZSBXU0RMCi1WYWxpZGF0b3IgY2hlY2sgYm94IGluIHRoZSBCdWlsZCBjb2x1bW4gaXMgc2VsZWN0ZWQuPC9wPjwvcmVzdWx0PgotPC90YXNrYm9keT4KLTxyZWxhdGVkLWxpbmtzPgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIENvbmNlcHRzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NkbC5kaXRhIiBzY29wZT0icGVlciI+Ci08bGlua3RleHQ+V1NETDwvbGlua3RleHQ+PC9saW5rPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lvdmVyLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD5XUy1JPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90d3NpY29tcGx5LmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD5TZXR0aW5nIFdTLUkgY29tcGxpYW5jZTwvbGlua3RleHQ+PC9saW5rPgotPC9saW5rbGlzdD4KLTwvcmVsYXRlZC1saW5rcz4KLTwvdGFzaz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci90YXNrcy90d3NkbHZhbC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2RsdmFsLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjZDQ4M2MuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2RsdmFsLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIGxhbmc9ImVuLXVzIiB4bWw6bGFuZz0iZW4tdXMiPgotPGhlYWQ+Ci08bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bWV0YSBuYW1lPSJEQy5yaWdodHMub3duZXIiIGNvbnRlbnQ9IihDKSBDb3B5cmlnaHQgMjAwMCwgMjAwNiIgLz4KLTxtZXRhIGNvbnRlbnQ9InB1YmxpYyIgbmFtZT0ic2VjdXJpdHkiIC8+Ci08bWV0YSBjb250ZW50PSJpbmRleCxmb2xsb3ciIG5hbWU9IlJvYm90cyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IlBJQ1MtTGFiZWwiIGNvbnRlbnQ9JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5pY3JhLm9yZy9yYXRpbmdzdjAyLmh0bWwiIGwgZ2VuIHRydWUgciAoY3ogMSBseiAxIG56IDEgb3ogMSB2eiAxKSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgZ2VuIHRydWUgciAobiAwIHMgMCB2IDAgbCAwKSAiaHR0cDovL3d3dy5jbGFzc2lmeS5vcmcvc2FmZXN1cmYvIiBsIGdlbiB0cnVlIHIgKFNTfn4wMDAgMSkpJyAvPgotPG1ldGEgY29udGVudD0idGFzayIgbmFtZT0iREMuVHlwZSIgLz4KLTxtZXRhIG5hbWU9IkRDLlRpdGxlIiBjb250ZW50PSJWYWxpZGF0aW5nIFdTREwgZmlsZXMiIC8+Ci08bWV0YSBuYW1lPSJhYnN0cmFjdCIgY29udGVudD0iSWYgeW91IGhhdmUgY3JlYXRlZCBhIFdTREwgZmlsZSB0aHJvdWdoIHRoZSBXZWIgc2VydmljZXMgd2l6YXJkIHRoZSBXU0RMIHRoYXQgaXMgZ2VuZXJhdGVkIHNob3VsZCBiZSB2YWxpZC4gSG93ZXZlciwgaWYgeW91IGhhdmUgaW1wb3J0ZWQgYSBXU0RMIGZpbGUsIG9yIGlmIHlvdSBhcmUgY3JlYXRpbmcgYSBXU0RMIGZpbGUsIHlvdSBzaG91bGQgdmFsaWRhdGUgdGhlIFdTREwgdG8gZW5zdXJlIGl0IGlzIHZhbGlkLiIgLz4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJJZiB5b3UgaGF2ZSBjcmVhdGVkIGEgV1NETCBmaWxlIHRocm91Z2ggdGhlIFdlYiBzZXJ2aWNlcyB3aXphcmQgdGhlIFdTREwgdGhhdCBpcyBnZW5lcmF0ZWQgc2hvdWxkIGJlIHZhbGlkLiBIb3dldmVyLCBpZiB5b3UgaGF2ZSBpbXBvcnRlZCBhIFdTREwgZmlsZSwgb3IgaWYgeW91IGFyZSBjcmVhdGluZyBhIFdTREwgZmlsZSwgeW91IHNob3VsZCB2YWxpZGF0ZSB0aGUgV1NETCB0byBlbnN1cmUgaXQgaXMgdmFsaWQuIiAvPgotPG1ldGEgY29udGVudD0iV1NETCwgdmFsaWRhdGluZywgV2ViIHNlcnZpY2VzLCB2YWxpZGF0aW5nIFdTREwiIG5hbWU9IkRDLnN1YmplY3QiIC8+Ci08bWV0YSBjb250ZW50PSJXU0RMLCB2YWxpZGF0aW5nLCBXZWIgc2VydmljZXMsIHZhbGlkYXRpbmcgV1NETCIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3NkbC5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvY29uY2VwdHMvY3dzaW92ZXIuaHRtbCIgLz4KLTxtZXRhIHNjaGVtZT0iVVJJIiBuYW1lPSJEQy5SZWxhdGlvbiIgY29udGVudD0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3Rhc2tzL3R3c2ljb21wbHkuaHRtbCIgLz4KLTxtZXRhIGNvbnRlbnQ9IlhIVE1MIiBuYW1lPSJEQy5Gb3JtYXQiIC8+Ci08bWV0YSBjb250ZW50PSJ0d3NkbHZhbCIgbmFtZT0iREMuSWRlbnRpZmllciIgLz4KLTxtZXRhIGNvbnRlbnQ9ImVuLXVzIiBuYW1lPSJEQy5MYW5ndWFnZSIgLz4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLndzdC5kb2MudXNlci9jb21tb24uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgotPHRpdGxlPlZhbGlkYXRpbmcgV1NETCBmaWxlczwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBpZD0idHdzZGx2YWwiPjxhIG5hbWU9InR3c2RsdmFsIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5WYWxpZGF0aW5nIFdTREwgZmlsZXM8L2gxPgotCi0KLQotCi08ZGl2PjxwPklmIHlvdSBoYXZlIGNyZWF0ZWQgYSBXU0RMIGZpbGUgdGhyb3VnaCB0aGUgV2ViIHNlcnZpY2VzIHdpemFyZAotdGhlIFdTREwgdGhhdCBpcyBnZW5lcmF0ZWQgc2hvdWxkIGJlIHZhbGlkLiBIb3dldmVyLCBpZiB5b3UgaGF2ZSBpbXBvcnRlZAotYSBXU0RMIGZpbGUsIG9yIGlmIHlvdSBhcmUgY3JlYXRpbmcgYSBXU0RMIGZpbGUsIHlvdSBzaG91bGQgdmFsaWRhdGUgdGhlIFdTREwKLXRvIGVuc3VyZSBpdCBpcyB2YWxpZC48L3A+Ci0KLTxkaXYgY2xhc3M9InNlY3Rpb24iPjxwPklmIHlvdSBoYXZlIHNlbGVjdGVkIFJlcXVpcmUgb3IgU3VnZ2VzdCBXUy1JIENvbXBsaWFuY2Ugb24gdGhlCi1XUy1JIENvbXBsaWFuY2UgcHJlZmVyZW5jZSBwYWdlLCB0aGUgdmFsaWRhdGlvbiBhbHNvIGNoZWNrcyBXUy1JIGNvbXBsaWFuY2UuCi1JZiB5b3UgaGF2ZSBzZWxlY3RlZCBJZ25vcmUgV1MtSSBDb21wbGlhbmNlIHRoZSB2YWxpZGF0b3Igd2lsbCBvbmx5IGNoZWNrCi10aGUgdmFsaWRpdHkgb2YgdGhlIFdTREwuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHNldHRpbmcgV1MtSSBjb21wbGlhbmNlCi1sZXZlbHMsIHJlZmVyIHRvOiAgPGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3Rhc2tzL3R3c2ljb21wbHkuaHRtbCI+U2V0dGluZyB0aGUgbGV2ZWwgb2YgV1MtSSBjb21wbGlhbmNlPC9hPi48L3A+Ci08cD5UaGUgV1NETAotVmFsaWRhdG9yIGNvbXBhcmVzIHRoZSBXU0RMIGZpbGUgaW4geW91ciBwcm9qZWN0IHRvIHRoZSBXM0MgIDxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3dzZGwiIHRhcmdldD0iX2JsYW5rIj5XZWIgU2VydmljZXMgRGVzY3JpcHRpb24gTGFuZ3VhZ2UgKFdTREwpIDEuMTwvYT4gc3BlY2lmaWNhdGlvbnMsIGFuZCB0aGUgV1MtSSBjb21wbGlhbmNlIHNldHRpbmdzCi10aGF0IHlvdSBoYXZlIHNlbGVjdGVkLjwvcD4KLTxwPlRvIHZhbGlkYXRlIHlvdXIgV1NETCwgY29tcGxldGUgdGhlIGZvbGxvd2luZwotc3RlcHM6PC9wPgotPC9kaXY+Ci0KLTxvbD4KLTxsaT48c3Bhbj5TZWxlY3QgYSBXU0RMIGZpbGUgaW4gdGhlICA8c3Ryb25nPlByb2plY3QgTmF2aWdhdG9yPC9zdHJvbmc+IHZpZXcuPC9zcGFuPgotPC9saT4KLQotPGxpPjxzcGFuPlJpZ2h0LWNsaWNrIHRoZSBXU0RMIGZpbGUsIGFuZCBzZWxlY3QgIDxzdHJvbmc+VmFsaWRhdGU8L3N0cm9uZz48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+QW55IHByb2JsZW1zIGVuY291bnRlcmVkIHdoaWxlIHZhbGlkYXRpbmcgdGhlIGZpbGUgd2lsbCBiZSBzaG93biBpbgotdGhlICA8c3Ryb25nPlRhc2tzPC9zdHJvbmc+IHZpZXcuPHA+V2hlbiB5b3UgcmVidWlsZCBhIHByb2plY3Qgb3Igc2F2ZSBhIHJlc291cmNlLCB0aGUKLVdTREwgVmFsaWRhdG9yIGNhbiBiZSBzZXQgdG8gcnVuIGF1dG9tYXRpY2FsbHkuIFRvIGRvIHRoaXMsIGZyb20gdGhlIFdpbmRvdwotbWVudSwgc2VsZWN0ICA8c3Ryb25nPlByZWZlcmVuY2VzPC9zdHJvbmc+ICZndDsgIDxzdHJvbmc+VmFsaWRhdGlvbjwvc3Ryb25nPi4gRW5zdXJlIHRoYXQgdGhlIFdTREwKLVZhbGlkYXRvciBjaGVjayBib3ggaW4gdGhlIEJ1aWxkIGNvbHVtbiBpcyBzZWxlY3RlZC48L3A+Ci08L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIENvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2RsLmh0bWwiPldTREw8L2E+PC9kaXY+Ci08ZGl2PjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3Npb3Zlci5odG1sIj5XUy1JPC9hPjwvZGl2PjwvZGl2PgotCi08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIFRhc2tzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3Rhc2tzL3R3c2ljb21wbHkuaHRtbCI+U2V0dGluZyBXUy1JIGNvbXBsaWFuY2U8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci90YXNrcy90d3NpdmFsLmRpdGEgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvdGFza3MvdHdzaXZhbC5kaXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzliMThjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci90YXNrcy90d3NpdmFsLmRpdGEKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSB0YXNrIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBESVRBIFRhc2svL0VOIgotICJ0YXNrLmR0ZCI+Ci08dGFzayBpZD0idHdzaXZhbCIgeG1sOmxhbmc9ImVuLXVzIj4KLTx0aXRsZT5WYWxpZGF0aW5nIFdTLUkgV2ViIHNlcnZpY2UgdHJhZmZpYyBjb21wbGlhbmNlPC90aXRsZT4KLTx0aXRsZWFsdHM+Ci08c2VhcmNodGl0bGU+VmFsaWRhdGluZyBXUy1JIFdlYiBzZXJ2aWNlIHRyYWZmaWMgY29tcGxpYW5jZTwvc2VhcmNodGl0bGU+Ci08L3RpdGxlYWx0cz4KLTxzaG9ydGRlc2M+QXMgd2VsbCBhcyBzZXR0aW5nIHRoZSBsZXZlbCBvZiBXUy1JIGNvbXBsaWFuY2UgZHVyaW5nIFdlYiBzZXJ2aWNlcwotY3JlYXRpb24sIHlvdSBjYW4gdmFsaWRhdGUgV1MtSSBjb21wbGlhbmNlIG9mIHRoZSBTT0FQIHRyYWZmaWMgYSBXZWIgc2VydmljZQotcHJvZHVjZXMgdGhyb3VnaCB0aGUgVENQL0lQIE1vbml0b3IuPC9zaG9ydGRlc2M+Ci08cHJvbG9nPjxtZXRhZGF0YT4KLTxrZXl3b3Jkcz48aW5kZXh0ZXJtPldTLUk8aW5kZXh0ZXJtPnZhbGlkYXRpbmc8L2luZGV4dGVybT48L2luZGV4dGVybT48aW5kZXh0ZXJtPldlYgotc2VydmljZXM8aW5kZXh0ZXJtPnZhbGlkYXRpbmcgV1MtSSBjb21wbGlhbmNlPGluZGV4dGVybT5pbnRlcm9wZXJhYmlsaXR5PGluZGV4dGVybT52YWxpZGF0aW5nPC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+PC9pbmRleHRlcm0+Ci08L2tleXdvcmRzPgotPC9tZXRhZGF0YT48L3Byb2xvZz4KLTx0YXNrYm9keT4KLTxwcmVyZXE+IFByZXJlcXVpc2l0ZXM6IEJlZm9yZSB5b3UgY2FuIHVzZSB0aGUgdmFsaWRhdGlvbiB0b29sIHRvIGVuc3VyZSB0aGF0Ci15b3VyIFdlYiBzZXJ2aWNlIFNPQVAgdHJhZmZpYyBpcyBXUy1JIGNvbXBsaWFudCwgeW91IG11c3QgaGF2ZSBjb21wbGV0ZWQgdGhlCi1mb2xsb3dpbmcgc3RlcHM6PHVsPgotPGxpPkdlbmVyYXRlIGEgV2ViIHNlcnZpY2UuPC9saT4KLTxsaT4gPHhyZWYgaHJlZj0idHdzZGx2YWwuZGl0YSI+VmFsaWRhdGUgdGhlIFdTREwgdGhhdCBpcyBwcm9kdWNlZC48L3hyZWY+IDwvbGk+Ci08bGk+R2VuZXJhdGUgYSBQcm94eSBhbmQgYSBzYW1wbGUgYXBwbGljYXRpb24uIDwvbGk+Ci08bGk+IDx4cmVmIGhyZWY9InRtb25pdG9yLmRpdGEiPlNldCB1cCB0aGUgVENQL0lQIE1vbml0b3IuPC94cmVmPiBFbnN1cmUgdGhhdAoteW91ciBXZWIgc2VydmljZSBzYW1wbGUgYXBwbGljYXRpb24gdHJhZmZpYyBpcyBkaXJlY3RlZCB0aHJvdWdoIHRoZSBUQ1AvSVAKLU1vbml0b3IuPC9saT4KLTwvdWw+PC9wcmVyZXE+Ci08Y29udGV4dD48cD5UbyB2YWxpZGF0ZSB5b3VyIFdlYiBzZXJ2aWNlLCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOjwvcD48L2NvbnRleHQ+Ci08c3RlcHM+Ci08c3RlcD48Y21kPkludm9rZSBhIG1ldGhvZCBpbiB5b3VyIFdlYiBzZXJ2aWNlIHNhbXBsZSBhcHBsaWNhdGlvbiB0byBnZW5lcmF0ZQotdHJhZmZpYyB0aHJvdWdoIHRoZSBUQ1AvSVAgTW9uaXRvci48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPlRvIGVuc3VyZSB0aGF0IHlvdXIgV2ViIHNlcnZpY2UgU09BUCB0cmFmZmljIGlzIFdTLUkgY29tcGxpYW50LAoteW91IGNhbiBnZW5lcmF0ZSBhIGxvZyBmaWxlIGJ5IGNsaWNraW5nIHRoZSAgPGltYWdlIGFsdD0iVmFsaWRhdGUgaWNvbiIgaHJlZj0iLi4vaW1hZ2VzL3dzaXZhbGljby5naWYiPgotPC9pbWFnZT4gaWNvbi48L2NtZD48L3N0ZXA+Ci08c3RlcD48Y21kPkluIHRoZSBkaWFsb2cgYm94IHRoYXQgb3BlbnMsIHNlbGVjdCBhIG5hbWUgZm9yIHRoZSBsb2cgZmlsZSBhbmQKLXNwZWNpZnkgd2hlcmUgeW91IHdhbnQgaXQgdG8gYmUgc3RvcmVkLjwvY21kPjwvc3RlcD4KLTwvc3RlcHM+Ci08cmVzdWx0PiBUaGlzIGxvZyBmaWxlIHdpbGwgc2hvdyB3aGV0aGVyIG9yIG5vdCBtZXNzYWdlcyBzZW50IHRvIGFuZCBmcm9tCi15b3VyIFdlYiBzZXJ2aWNlIGFyZSBXUy1JIGNvbXBsaWFudCwgYW5kIGxpc3QgYW55IG5vbi1jb21wbGlhbnQgZWxlbWVudHMuCi1Zb3UgY2FuIG9wZW4gdGhlIGxvZyBmaWxlIGluIGFuIFhNTCBlZGl0b3IgdG8gZXhhbWluZSBpdHMgY29udGVudHMuPC9yZXN1bHQ+Ci08L3Rhc2tib2R5PgotPHJlbGF0ZWQtbGlua3M+Ci08bGlua2xpc3Q+PHRpdGxlPlJlbGF0ZWQgQ29uY2VwdHM8L3RpdGxlPgotPGxpbmsgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lvdmVyLmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD5XUy1JPC9saW5rdGV4dD48L2xpbms+Ci08L2xpbmtsaXN0PgotPGxpbmtsaXN0Pjx0aXRsZT5SZWxhdGVkIFRhc2tzPC90aXRsZT4KLTxsaW5rIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci90YXNrcy90d3NpY29tcGx5LmRpdGEiIHNjb3BlPSJwZWVyIj4KLTxsaW5rdGV4dD5TZXR0aW5nIHRoZSBsZXZlbCBvZiBXUy1JIGNvbXBsaWFuY2U8L2xpbmt0ZXh0PjwvbGluaz4KLTwvbGlua2xpc3Q+Ci08L3JlbGF0ZWQtbGlua3M+Ci08L3Rhc2s+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvdGFza3MvdHdzaXZhbC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3Qud3NpLnVpLmRvYy51c2VyL3Rhc2tzL3R3c2l2YWwuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGU3MWNiMi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvdGFza3MvdHdzaXZhbC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCBsYW5nPSJlbi11cyIgeG1sOmxhbmc9ImVuLXVzIj4KLTxoZWFkPgotPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPG1ldGEgbmFtZT0iREMucmlnaHRzLm93bmVyIiBjb250ZW50PSIoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDYiIC8+Ci08bWV0YSBjb250ZW50PSJwdWJsaWMiIG5hbWU9InNlY3VyaXR5IiAvPgotPG1ldGEgY29udGVudD0iaW5kZXgsZm9sbG93IiBuYW1lPSJSb2JvdHMiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJQSUNTLUxhYmVsIiBjb250ZW50PScoUElDUy0xLjEgImh0dHA6Ly93d3cuaWNyYS5vcmcvcmF0aW5nc3YwMi5odG1sIiBsIGdlbiB0cnVlIHIgKGN6IDEgbHogMSBueiAxIG96IDEgdnogMSkgImh0dHA6Ly93d3cucnNhYy5vcmcvcmF0aW5nc3YwMS5odG1sIiBsIGdlbiB0cnVlIHIgKG4gMCBzIDAgdiAwIGwgMCkgImh0dHA6Ly93d3cuY2xhc3NpZnkub3JnL3NhZmVzdXJmLyIgbCBnZW4gdHJ1ZSByIChTU35+MDAwIDEpKScgLz4KLTxtZXRhIGNvbnRlbnQ9InRhc2siIG5hbWU9IkRDLlR5cGUiIC8+Ci08bWV0YSBuYW1lPSJEQy5UaXRsZSIgY29udGVudD0iVmFsaWRhdGluZyBXUy1JIFdlYiBzZXJ2aWNlIHRyYWZmaWMgY29tcGxpYW5jZSIgLz4KLTxtZXRhIG5hbWU9ImFic3RyYWN0IiBjb250ZW50PSJBcyB3ZWxsIGFzIHNldHRpbmcgdGhlIGxldmVsIG9mIFdTLUkgY29tcGxpYW5jZSBkdXJpbmcgV2ViIHNlcnZpY2VzIGNyZWF0aW9uLCB5b3UgY2FuIHZhbGlkYXRlIFdTLUkgY29tcGxpYW5jZSBvZiB0aGUgU09BUCB0cmFmZmljIGEgV2ViIHNlcnZpY2UgcHJvZHVjZXMgdGhyb3VnaCB0aGUgVENQL0lQIE1vbml0b3IuIiAvPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkFzIHdlbGwgYXMgc2V0dGluZyB0aGUgbGV2ZWwgb2YgV1MtSSBjb21wbGlhbmNlIGR1cmluZyBXZWIgc2VydmljZXMgY3JlYXRpb24sIHlvdSBjYW4gdmFsaWRhdGUgV1MtSSBjb21wbGlhbmNlIG9mIHRoZSBTT0FQIHRyYWZmaWMgYSBXZWIgc2VydmljZSBwcm9kdWNlcyB0aHJvdWdoIHRoZSBUQ1AvSVAgTW9uaXRvci4iIC8+Ci08bWV0YSBjb250ZW50PSJXUy1JLCB2YWxpZGF0aW5nLCBXZWIgc2VydmljZXMsIHZhbGlkYXRpbmcgV1MtSSBjb21wbGlhbmNlLCBpbnRlcm9wZXJhYmlsaXR5IiBuYW1lPSJEQy5zdWJqZWN0IiAvPgotPG1ldGEgY29udGVudD0iV1MtSSwgdmFsaWRhdGluZywgV2ViIHNlcnZpY2VzLCB2YWxpZGF0aW5nIFdTLUkgY29tcGxpYW5jZSwgaW50ZXJvcGVyYWJpbGl0eSIgbmFtZT0ia2V5d29yZHMiIC8+Ci08bWV0YSBzY2hlbWU9IlVSSSIgbmFtZT0iREMuUmVsYXRpb24iIGNvbnRlbnQ9Ii4uLy4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci9jb25jZXB0cy9jd3Npb3Zlci5odG1sIiAvPgotPG1ldGEgc2NoZW1lPSJVUkkiIG5hbWU9IkRDLlJlbGF0aW9uIiBjb250ZW50PSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdHdzaWNvbXBseS5odG1sIiAvPgotPG1ldGEgY29udGVudD0iWEhUTUwiIG5hbWU9IkRDLkZvcm1hdCIgLz4KLTxtZXRhIGNvbnRlbnQ9InR3c2l2YWwiIG5hbWU9IkRDLklkZW50aWZpZXIiIC8+Ci08bWV0YSBjb250ZW50PSJlbi11cyIgbmFtZT0iREMuTGFuZ3VhZ2UiIC8+Ci08bGluayBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS53c3QuZG9jLnVzZXIvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KLTx0aXRsZT5WYWxpZGF0aW5nIFdTLUkgV2ViIHNlcnZpY2UgdHJhZmZpYyBjb21wbGlhbmNlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGlkPSJ0d3NpdmFsIj48YSBuYW1lPSJ0d3NpdmFsIj48IS0tIC0tPjwvYT4KLQotCi08aDEgY2xhc3M9InRvcGljdGl0bGUxIj5WYWxpZGF0aW5nIFdTLUkgV2ViIHNlcnZpY2UgdHJhZmZpYyBjb21wbGlhbmNlPC9oMT4KLQotCi0KLQotPGRpdj48cD5BcyB3ZWxsIGFzIHNldHRpbmcgdGhlIGxldmVsIG9mIFdTLUkgY29tcGxpYW5jZSBkdXJpbmcgV2ViIHNlcnZpY2VzCi1jcmVhdGlvbiwgeW91IGNhbiB2YWxpZGF0ZSBXUy1JIGNvbXBsaWFuY2Ugb2YgdGhlIFNPQVAgdHJhZmZpYyBhIFdlYiBzZXJ2aWNlCi1wcm9kdWNlcyB0aHJvdWdoIHRoZSBUQ1AvSVAgTW9uaXRvci48L3A+Ci0KLTxkaXYgY2xhc3M9InAiPiBQcmVyZXF1aXNpdGVzOiBCZWZvcmUgeW91IGNhbiB1c2UgdGhlIHZhbGlkYXRpb24gdG9vbCB0byBlbnN1cmUgdGhhdAoteW91ciBXZWIgc2VydmljZSBTT0FQIHRyYWZmaWMgaXMgV1MtSSBjb21wbGlhbnQsIHlvdSBtdXN0IGhhdmUgY29tcGxldGVkIHRoZQotZm9sbG93aW5nIHN0ZXBzOjx1bD4KLTxsaT5HZW5lcmF0ZSBhIFdlYiBzZXJ2aWNlLjwvbGk+Ci0KLTxsaT4gPGEgaHJlZj0idHdzZGx2YWwuaHRtbCI+VmFsaWRhdGUgdGhlIFdTREwgdGhhdCBpcyBwcm9kdWNlZC48L2E+IDwvbGk+Ci0KLTxsaT5HZW5lcmF0ZSBhIFByb3h5IGFuZCBhIHNhbXBsZSBhcHBsaWNhdGlvbi4gPC9saT4KLQotPGxpPiA8YSBocmVmPSJ0bW9uaXRvci5odG1sIj5TZXQgdXAgdGhlIFRDUC9JUCBNb25pdG9yLjwvYT4gRW5zdXJlIHRoYXQKLXlvdXIgV2ViIHNlcnZpY2Ugc2FtcGxlIGFwcGxpY2F0aW9uIHRyYWZmaWMgaXMgZGlyZWN0ZWQgdGhyb3VnaCB0aGUgVENQL0lQCi1Nb25pdG9yLjwvbGk+Ci0KLTwvdWw+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+PHA+VG8gdmFsaWRhdGUgeW91ciBXZWIgc2VydmljZSwgY29tcGxldGUgdGhlIGZvbGxvd2luZyBzdGVwczo8L3A+Ci08L2Rpdj4KLQotPG9sPgotPGxpPjxzcGFuPkludm9rZSBhIG1ldGhvZCBpbiB5b3VyIFdlYiBzZXJ2aWNlIHNhbXBsZSBhcHBsaWNhdGlvbiB0byBnZW5lcmF0ZQotdHJhZmZpYyB0aHJvdWdoIHRoZSBUQ1AvSVAgTW9uaXRvci48L3NwYW4+PC9saT4KLQotPGxpPjxzcGFuPlRvIGVuc3VyZSB0aGF0IHlvdXIgV2ViIHNlcnZpY2UgU09BUCB0cmFmZmljIGlzIFdTLUkgY29tcGxpYW50LAoteW91IGNhbiBnZW5lcmF0ZSBhIGxvZyBmaWxlIGJ5IGNsaWNraW5nIHRoZSAgPGltZyBzcmM9Ii4uL2ltYWdlcy93c2l2YWxpY28uZ2lmIiBhbHQ9IlZhbGlkYXRlIGljb24iIC8+IGljb24uPC9zcGFuPjwvbGk+Ci0KLTxsaT48c3Bhbj5JbiB0aGUgZGlhbG9nIGJveCB0aGF0IG9wZW5zLCBzZWxlY3QgYSBuYW1lIGZvciB0aGUgbG9nIGZpbGUgYW5kCi1zcGVjaWZ5IHdoZXJlIHlvdSB3YW50IGl0IHRvIGJlIHN0b3JlZC48L3NwYW4+PC9saT4KLQotPC9vbD4KLQotPGRpdiBjbGFzcz0ic2VjdGlvbiI+IFRoaXMgbG9nIGZpbGUgd2lsbCBzaG93IHdoZXRoZXIgb3Igbm90IG1lc3NhZ2VzIHNlbnQgdG8gYW5kIGZyb20KLXlvdXIgV2ViIHNlcnZpY2UgYXJlIFdTLUkgY29tcGxpYW50LCBhbmQgbGlzdCBhbnkgbm9uLWNvbXBsaWFudCBlbGVtZW50cy4KLVlvdSBjYW4gb3BlbiB0aGUgbG9nIGZpbGUgaW4gYW4gWE1MIGVkaXRvciB0byBleGFtaW5lIGl0cyBjb250ZW50cy48L2Rpdj4KLQotPC9kaXY+Ci0KLTxkaXY+Ci08ZGl2IGNsYXNzPSJsaW5rbGlzdCI+PHN0cm9uZz5SZWxhdGVkIENvbmNlcHRzPC9zdHJvbmc+PGJyIC8+Ci0KLTxkaXY+PGEgaHJlZj0iLi4vLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL2NvbmNlcHRzL2N3c2lvdmVyLmh0bWwiPldTLUk8L2E+PC9kaXY+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImxpbmtsaXN0Ij48c3Ryb25nPlJlbGF0ZWQgVGFza3M8L3N0cm9uZz48YnIgLz4KLQotPGRpdj48YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5qc3Qud3MuZG9jLnVzZXIvdGFza3MvdHdzaWNvbXBseS5odG1sIj5TZXR0aW5nIHRoZSBsZXZlbCBvZiBXUy1JIGNvbXBsaWFuY2U8L2E+PC9kaXY+PC9kaXY+Ci08L2Rpdj4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci93c3dzaXRlc3RfdG9jLmRpdGFtYXAgYi9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvd3N3c2l0ZXN0X3RvYy5kaXRhbWFwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDk4MmM5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci93c3dzaXRlc3RfdG9jLmRpdGFtYXAKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLUFyYm9ydGV4dCwgSW5jLiwgMTk4OC0yMDA1LCB2LjQwMDItLT4KLTwhRE9DVFlQRSBtYXAgUFVCTElDICItLy9PQVNJUy8vRFREIERJVEEgTWFwLy9FTiIgIm1hcC5kdGQiPgotPG1hcCBhbmNob3JyZWY9Ii4uL29yZy5lY2xpcHNlLmpzdC53cy5kb2MudXNlci93ZWJzZXJ2aWNlX3RvYy5kaXRhbWFwI3dzd3NpdGVzdCIKLWlkPSJ3c3dzaXRlc3QiIHRpdGxlPSJ3c3dzaXRlc3QiPgotPHRvcGljcmVmIGhyZWY9InRhc2tzL3R3c2RsdmFsLmRpdGEiIG5hdnRpdGxlPSJWYWxpZGF0aW5nIFdTREwiPjwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdG1vbml0b3IuZGl0YSIgbmF2dGl0bGU9IlRlc3RpbmcgV2ViIHNlcnZpY2VzIHdpdGggdGhlIFRDUC9JUCBNb25pdG9yIj4KLTwvdG9waWNyZWY+Ci08dG9waWNyZWYgaHJlZj0idGFza3MvdHdzaXZhbC5kaXRhIiBuYXZ0aXRsZT0iVmFsaWRhdGluZyBXUy1JIGNvbXBsaWFuY2Ugb2YgV2ViIHNlcnZpY2UgU09BUCB0cmFmZmljIj4KLTwvdG9waWNyZWY+Ci08L21hcD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci93c3dzaXRlc3RfdG9jLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlci93c3dzaXRlc3RfdG9jLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTEwMjBhZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC53c2kudWkuZG9jLnVzZXIvd3N3c2l0ZXN0X3RvYy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0KLTw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj8+Ci0KLTx0b2MgbGlua190bz0iLi4vb3JnLmVjbGlwc2UuanN0LndzLmRvYy51c2VyL3dlYnNlcnZpY2VfdG9jLnhtbCN3c3dzaXRlc3QiIGxhYmVsPSJ3c3dzaXRlc3QiIHRvcGljPSJ0YXNrcy90d3NkbHZhbC5odG1sIj4KLTx0b3BpYyBsYWJlbD0iVmFsaWRhdGluZyBXU0RMIGZpbGVzIiBocmVmPSJ0YXNrcy90d3NkbHZhbC5odG1sIi8+Ci08dG9waWMgbGFiZWw9IlVzaW5nIHRoZSBUQ1AvSVAgTW9uaXRvciB0byB0ZXN0IFdlYiBzZXJ2aWNlcyIgaHJlZj0idGFza3MvdG1vbml0b3IuaHRtbCIvPgotPHRvcGljIGxhYmVsPSJWYWxpZGF0aW5nIFdTLUkgV2ViIHNlcnZpY2UgdHJhZmZpYyBjb21wbGlhbmNlIiBocmVmPSJ0YXNrcy90d3NpdmFsLmh0bWwiLz4KLTwvdG9jPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS8uY3ZzaWdub3JlIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTQ0ODdjLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWJ1aWxkLnhtbApkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS8ucHJvamVjdCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlZmZhNzguLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmU8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL2FkZFByZUJ1aWx0Q29tcG9uZW50cy54bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL2FkZFByZUJ1aWx0Q29tcG9uZW50cy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4N2QzM2UuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9hZGRQcmVCdWlsdENvbXBvbmVudHMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08IS0tIENhbGxiYWNrcyB0byB1c2Ugd2hlbiBidWlsZGluZyB0aGlzIGZlYXR1cmUgICAgICAgICAgICAgICAgCQkgICAtLT4KLTwhLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotPCEtLSBidWlsZC5wcm9wZXJ0aWVzIG11c3QgaGF2ZSBhIGxpbmUgdGhhdCBzYXlzICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci08IS0tICAgY3VzdG9tQnVpbGRDYWxsYmFja3M9YWRkUHJlQnVpbHRDb21wb25lbnRzLnhtbCAgICAgICAgICAgICAgICAgICAgICAtLT4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotPHByb2plY3QgbmFtZT0iYWRkUHJlQnVpbHRDb21wb25lbnRzIiBkZWZhdWx0PSJub0RlZmF1bHQiPgotICAgIDwhLS0gCi0gICAgCU5vdGUgdG8gYmUgY3Jvc3MtcGxhdGZvcm0sICJlbnZpcm9ubWVudCB2YXJpYWJsZXMiIGFyZSBvbmx5IGFwcHJvcHJpYXRlIGZvciAKLSAgICAgICAgc29tZSB2YXJpYWJsZXMsIGUuZy4gb25lcyB3ZSBzZXQsIHNpbmNlIHByb3BlcnRpZXMgYXJlIGNhc2Ugc2Vuc2l0aXZlLCBldmVuIGlmIAotICAgICAgICB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIG9uIHlvdXIgb3BlcmF0aW5nIHN5c3RlbSBhcmUgbm90LCBlLmcuIGl0IHdpbGwgCi0gICAgICAgIGJlICR7ZW52LlBhdGh9IG5vdCAke2Vudi5QQVRIfSBvbiBXaW5kb3dzIC0tPgotICAgIDxwcm9wZXJ0eSBlbnZpcm9ubWVudD0iZW52IiAvPgotCi0KLSAgICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLSAgICA8IS0tIFN0ZXBzIHRvIGRvIGJlZm9yZSB0aGUgdGFyZ2V0IGdhdGhlci5iaW4ucGFydHMgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLSAgICA8IS0tIEF2YWlsYWJsZSBwYXJhbWV0ZXJzIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLSAgICA8IS0tICBkZXN0aW5hdGlvbi50ZW1wLmZvbGRlciAtIHRoZSBkaXJlY3RvcnkgcGx1Z2lucyB3aWxsIGJlIGNvbGxlY3RlZCB0byAtLT4KLSAgICA8IS0tICBmZWF0dXJlLmRpcmVjdG9yeSAtIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgcmVzdWx0aW5nIGZlYXR1cmUgICAtLT4KLSAgICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9InByZS5nYXRoZXIuYmluLnBhcnRzIj4KLSAgICAgICAgPCEtLSBjb3B5IG91ciBrbm93biwgcHJlLWJ1aWx0LCB1c3VhbGx5IHRoaXJkIHBhcnR5IHByZS1yZXFzIGludG8gdGhpcyBmZWF0dXJlIC0tPgotICAgICAgICA8ZWNobyBtZXNzYWdlPSJDdXJyZW50IGJhc2VkaXIgZHVyaW5nIGNhbGxiYWNrOiAke2Jhc2VkaXJ9IiAvPgotICAgICAgICA8ZWNobyBtZXNzYWdlPSJDdXJyZW50IGRlc3RpbmF0aW9uLnRlbXAuZm9sZGVyIGR1cmluZyBjYWxsYmFjazogJHtkZXN0aW5hdGlvbi50ZW1wLmZvbGRlcn0iIC8+Ci0gICAgICAgIDxjb3B5IHRvZGlyPSIke2Rlc3RpbmF0aW9uLnRlbXAuZm9sZGVyfSIKLSAgICAgICAgICAgICAgb3ZlcndyaXRlPSJ0cnVlIj4KLSAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuQlVJTERfSE9NRX0vcHJlYnVpbHQvZWNsaXBzZS9wbHVnaW5zLyIKLSAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJvcmcuYXBhY2hlLmNvbW1vbnNfbG9nZ2luZyovKioiIC8+Ci0gICAgICAgIDwvY29weT4KLSAgICAgICAgPGNvcHkgdG9kaXI9IiR7ZGVzdGluYXRpb24udGVtcC5mb2xkZXJ9IgotICAgICAgICAgICAgICBvdmVyd3JpdGU9InRydWUiPgotICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5CVUlMRF9IT01FfS9wcmVidWlsdC9lY2xpcHNlL3BsdWdpbnMvIgotICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZXM9Im9yZy5hcGFjaGUuamFrYXJ0YV9sb2c0aiovKioiIC8+Ci0gICAgICAgIDwvY29weT4KLSAgICAgICAgPGNvcHkgdG9kaXI9IiR7ZGVzdGluYXRpb24udGVtcC5mb2xkZXJ9IgotICAgICAgICAgICAgICBvdmVyd3JpdGU9InRydWUiPgotICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5CVUlMRF9IT01FfS9wcmVidWlsdC9lY2xpcHNlL3BsdWdpbnMvIgotICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZXM9Im9yZy5hcGFjaGUud3NpbDRqKi8qKiIgLz4KLSAgICAgICAgPC9jb3B5PgotICAgICAgICA8Y29weSB0b2Rpcj0iJHtkZXN0aW5hdGlvbi50ZW1wLmZvbGRlcn0iCi0gICAgICAgICAgICAgIG92ZXJ3cml0ZT0idHJ1ZSI+Ci0gICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LkJVSUxEX0hPTUV9L3ByZWJ1aWx0L2VjbGlwc2UvcGx1Z2lucy8iCi0gICAgICAgICAgICAgICAgICAgICBpbmNsdWRlcz0ib3JnLnVkZGk0aiovKioiIC8+Ci0gICAgICAgIDwvY29weT4KLSAgICAgICAgPGNvcHkgdG9kaXI9IiR7ZGVzdGluYXRpb24udGVtcC5mb2xkZXJ9IgotICAgICAgICAgICAgICBvdmVyd3JpdGU9InRydWUiPgotICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5CVUlMRF9IT01FfS9wcmVidWlsdC9lY2xpcHNlL3BsdWdpbnMvIgotICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZXM9Im9yZy53c2RsNGoqLyoqIiAvPgotICAgICAgICA8L2NvcHk+Ci0gICAgICAgIDxjb3B5IHRvZGlyPSIke2Rlc3RpbmF0aW9uLnRlbXAuZm9sZGVyfSIKLSAgICAgICAgICAgICAgb3ZlcndyaXRlPSJ0cnVlIj4KLSAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuQlVJTERfSE9NRX0vcHJlYnVpbHQvZWNsaXBzZS9wbHVnaW5zLyIKLSAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJvcmcuYXBhY2hlLmF4aXMqLyoqIiAvPgotICAgICAgICA8L2NvcHk+Ci0KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0gICAgPCEtLSBTdGVwcyB0byBkbyBhZnRlciB0aGUgdGFyZ2V0IGdhdGhlci5iaW4ucGFydHMgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0gICAgPCEtLSBBdmFpbGFibGUgcGFyYW1ldGVycyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0gICAgPCEtLSAgZGVzdGluYXRpb24udGVtcC5mb2xkZXIgLSB0aGUgZGlyZWN0b3J5IHBsdWdpbnMgd2lsbCBiZSBjb2xsZWN0ZWQgdG8gLS0+Ci0gICAgPCEtLSAgZmVhdHVyZS5kaXJlY3RvcnkgLSB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIHJlc3VsdGluZyBmZWF0dXJlICAgLS0+Ci0gICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJwb3N0LmdhdGhlci5iaW4ucGFydHMiPgotICAgIDwvdGFyZ2V0PgotCi0KLQotICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotICAgIDwhLS0gTm8gRGVmYXVsdCB0YXJnZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotICAgIDx0YXJnZXQgbmFtZT0ibm9EZWZhdWx0Ij4KLSAgICAgICAgPGVjaG8gbWVzc2FnZT0iVGhpcyBmaWxlIG11c3QgYmUgY2FsbGVkIHdpdGggZXhwbGljaXQgdGFyZ2V0cyIgLz4KLSAgICA8L3RhcmdldD4KLQotCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2NDQ4MGIuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1iaW4uaW5jbHVkZXMgPSBmZWF0dXJlLnhtbCxcCi0gICAgICAgICAgICAgICBlY2xpcHNlX3VwZGF0ZV8xMjAuanBnLFwKLSAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbCxcCi0gICAgICAgICAgICAgICBsaWNlbnNlLmh0bWwsXAotICAgICAgICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzCi0KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZkZjcwOC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL2VwbC12MTAuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvZXBsLXYxMC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDRiMTk2Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvZXBsLXYxMC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzI4ICswLDAgQEAKLTxodG1sIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIKLXhtbG5zOnc9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmQiCi14bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+Ci0KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+Ci08bWV0YSBuYW1lPVByb2dJZCBjb250ZW50PVdvcmQuRG9jdW1lbnQ+Ci08bWV0YSBuYW1lPUdlbmVyYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxtZXRhIG5hbWU9T3JpZ2luYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxsaW5rIHJlbD1GaWxlLUxpc3QKLWhyZWY9Ii4vRWNsaXBzZSUyMEVQTCUyMDIwMDNfMTFfMTAlMjBGaW5hbF9maWxlcy9maWxlbGlzdC54bWwiPgotPHRpdGxlPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSBWZXJzaW9uIDEuMDwvdGl0bGU+Ci08IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8bzpEb2N1bWVudFByb3BlcnRpZXM+Ci0gIDxvOlJldmlzaW9uPjI8L286UmV2aXNpb24+Ci0gIDxvOlRvdGFsVGltZT4zPC9vOlRvdGFsVGltZT4KLSAgPG86Q3JlYXRlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpDcmVhdGVkPgotICA8bzpMYXN0U2F2ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286TGFzdFNhdmVkPgotICA8bzpQYWdlcz40PC9vOlBhZ2VzPgotICA8bzpXb3Jkcz4xNjI2PC9vOldvcmRzPgotICA8bzpDaGFyYWN0ZXJzPjkyNzA8L286Q2hhcmFjdGVycz4KLSAgIDxvOkxpbmVzPjc3PC9vOkxpbmVzPgotICA8bzpQYXJhZ3JhcGhzPjE4PC9vOlBhcmFncmFwaHM+Ci0gIDxvOkNoYXJhY3RlcnNXaXRoU3BhY2VzPjExMzg0PC9vOkNoYXJhY3RlcnNXaXRoU3BhY2VzPgotICA8bzpWZXJzaW9uPjkuNDQwMjwvbzpWZXJzaW9uPgotIDwvbzpEb2N1bWVudFByb3BlcnRpZXM+Ci08L3htbD48IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8dzpXb3JkRG9jdW1lbnQ+Ci0gIDx3OlRyYWNrUmV2aXNpb25zLz4KLSA8L3c6V29yZERvY3VtZW50PgotPC94bWw+PCFbZW5kaWZdLS0+Ci08c3R5bGU+Ci08IS0tCi0gLyogRm9udCBEZWZpbml0aW9ucyAqLwotQGZvbnQtZmFjZQotCXtmb250LWZhbWlseTpUYWhvbWE7Ci0JcGFub3NlLTE6MiAxMSA2IDQgMyA1IDQgNCAyIDQ7Ci0JbXNvLWZvbnQtY2hhcnNldDowOwotCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOwotCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOwotCW1zby1mb250LXNpZ25hdHVyZTo1NTM2Nzk0OTUgLTIxNDc0ODM2NDggOCAwIDY2MDQ3IDA7fQotIC8qIFN0eWxlIERlZmluaXRpb25zICovCi1wLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsCi0Je21zby1zdHlsZS1wYXJlbnQ6IiI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZToxMi4wcHQ7Ci0JZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotcAotCXttYXJnaW4tcmlnaHQ6MGluOwotCW1zby1tYXJnaW4tdG9wLWFsdDphdXRvOwotCW1zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvOwotCW1hcmdpbi1sZWZ0OjBpbjsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wLkJhbGxvb25UZXh0LCBsaS5CYWxsb29uVGV4dCwgZGl2LkJhbGxvb25UZXh0Ci0Je21zby1zdHlsZS1uYW1lOiJCYWxsb29uIFRleHQiOwotCW1hcmdpbjowaW47Ci0JbWFyZ2luLWJvdHRvbTouMDAwMXB0OwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6OC4wcHQ7Ci0JZm9udC1mYW1pbHk6VGFob21hOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLUBwYWdlIFNlY3Rpb24xCi0Je3NpemU6OC41aW4gMTEuMGluOwotCW1hcmdpbjoxLjBpbiAxLjI1aW4gMS4waW4gMS4yNWluOwotCW1zby1oZWFkZXItbWFyZ2luOi41aW47Ci0JbXNvLWZvb3Rlci1tYXJnaW46LjVpbjsKLQltc28tcGFwZXItc291cmNlOjA7fQotZGl2LlNlY3Rpb24xCi0Je3BhZ2U6U2VjdGlvbjE7fQotLS0+Ci08L3N0eWxlPgotPC9oZWFkPgotCi08Ym9keSBsYW5nPUVOLVVTIHN0eWxlPSd0YWItaW50ZXJ2YWw6LjVpbic+Ci0KLTxkaXYgY2xhc3M9U2VjdGlvbjE+Ci0KLTxwIGFsaWduPWNlbnRlciBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxiPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMDwvYj4KLTwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUgotVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoJnF1b3Q7QUdSRUVNRU5UJnF1b3Q7KS4gQU5ZIFVTRSwKLVJFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRQotT0YgVEhJUyBBR1JFRU1FTlQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4xLiBERUZJTklUSU9OUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dGlvbiZxdW90OyBtZWFuczo8L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWluIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uCi1kaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kPGJyIGNsZWFyPWxlZnQ+Ci1iKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWNoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOzwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPndoZXJlCi1zdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkCi1ieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uICdvcmlnaW5hdGVzJyBmcm9tIGEgQ29udHJpYnV0b3IKLWlmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uCi1zdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUKLVByb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbgotd2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZQotd29ya3Mgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRvciZxdW90OyBtZWFucyBhbnkgcGVyc29uIG9yCi1lbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0xpY2Vuc2VkIFBhdGVudHMgJnF1b3Q7IG1lYW4gcGF0ZW50Ci1jbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZQotb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1Byb2dyYW0mcXVvdDsgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMKLWRpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1JlY2lwaWVudCZxdW90OyBtZWFucyBhbnlvbmUgd2hvCi1yZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4yLiBHUkFOVCBPRiBSSUdIVFM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudAotYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bzxzcGFuCi1zdHlsZT0nY29sb3I6cmVkJz4gPC9zcGFuPnJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseQotZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2gKLUNvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZQotZm9ybS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQotU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cwotUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLDxzcGFuIHN0eWxlPSdjb2xvcjpncmVlbic+IDwvc3Bhbj5yb3lhbHR5LWZyZWUKLXBhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQKLWFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZQotY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24KLW9mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkCi1ieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbgotdG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0bwotYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcwotbGljZW5zZWQgaGVyZXVuZGVyLiA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5jKQotUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cwotQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IKLXRoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkKLXJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudAotZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbAotcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZAotbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkKLXRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsCi1pZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlCi10aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlCi1kaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+ZCkKLUVhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0Ci1yaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluCi10aGlzIEFncmVlbWVudC4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjMuIFJFUVVJUkVNRU5UUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkEgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZQotUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6PC9zcGFuPgotPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1pdHMgbGljZW5zZSBhZ3JlZW1lbnQ6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWVmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQKLWNvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUKLWFuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5Ci1hbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7IDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywKLWluY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2gKLWFzIGxvc3QgcHJvZml0czsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWlpKQotc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdAotQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPml2KQotc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZAotaW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYQotbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLjxzcGFuIHN0eWxlPSdjb2xvcjpibHVlJz4gPC9zcGFuPjwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5XaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZQotY29kZSBmb3JtOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpIGEKLWNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkKLWNvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZQotb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3MKLXN1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT048L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkKLWFjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMKLWFuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlCi1vZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwKLXByb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwKLWxpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgmcXVvdDtDb21tZXJjaWFsCi1Db250cmlidXRvciZxdW90OykgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlcgotQ29udHJpYnV0b3IgKCZxdW90O0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnF1b3Q7KSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kCi1jb3N0cyAoY29sbGVjdGl2ZWx5ICZxdW90O0xvc3NlcyZxdW90OykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyCi1sZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0bwotdGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbgotY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKLW9mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcwotcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyCi10byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCi10byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZAotYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUKLWluIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQotY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZAotd2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMKLXNlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZQotb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYQotY291cnQgcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz41LiBOTyBXQVJSQU5UWTwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKLUFHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsCi1XSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCi1NRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseQotcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUKLVByb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMKLUFncmVlbWVudCAsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywKLWNvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yCi1lcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SCi1BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLShJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi1PRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORwotTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YKLVRIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YKLVRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz43LiBHRU5FUkFMPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkCi1vciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvcgotZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0Ci1mdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZQotbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24KLWFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkKLWFsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGgKLW90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaAotUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZQotc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudAotc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IKLWNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZQotcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MKLXJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZAotZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwKLVJlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieQotUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUKLWNvcGllcyBvZiB0aGlzIEFncmVlbWVudCwgYnV0IGluIG9yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcwotY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50Ci1TdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YKLXRoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzCi10aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsCi1BZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0bwotc2VydmUgYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uCi1vZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0KLShpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mCi10aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQotKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZAotaW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0bwotdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIKLWV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKLWV4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQotU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZgotQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzCi1BZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzCi1pdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uPC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbD48IVtpZiAhc3VwcG9ydEVtcHR5UGFyYXNdPiZuYnNwOzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvcD4KLQotPC9kaXY+Ci0KLTwvYm9keT4KLQotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3OWJlMzAuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgZmVhdHVyZS5wcm9wZXJ0aWVzCi0jIGNvbnRhaW5zIGV4dGVybmFsaXplZCBzdHJpbmdzIGZvciBmZWF0dXJlLnhtbAotIyAiJWZvbyIgaW4gZmVhdHVyZS54bWwgY29ycmVzcG9uZHMgdG8gdGhlIGtleSAiZm9vIiBpbiB0aGlzIGZpbGUKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgVGhpcyBmaWxlIHNob3VsZCBiZSB0cmFuc2xhdGVkLgotCi0jICJmZWF0dXJlTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBmZWF0dXJlCi1mZWF0dXJlTmFtZT1XU1QgV2ViIFNlcnZpY2VzIENvcmUKLQotIyAicHJvdmlkZXJOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGNvbXBhbnkgdGhhdCBwcm92aWRlcyB0aGUgZmVhdHVyZQotcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCi0KLSMgInVwZGF0ZVNpdGVOYW1lIiBwcm9wZXJ0eSAtIGxhYmVsIGZvciB0aGUgdXBkYXRlIHNpdGUKLXVwZGF0ZVNpdGVOYW1lPVRoZSBFY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybSAoV1RQKSBQcm9qZWN0IHVwZGF0ZSBzaXRlCi0KLSMgImRlc2NyaXB0aW9uIiBwcm9wZXJ0eSAtIGRlc2NyaXB0aW9uIG9mIHRoZSBmZWF0dXJlCi1kZXNjcmlwdGlvbj1XU1QgV2ViIFNlcnZpY2VzIGNvcmUuCi0KLSMgImNvcHlyaWdodCIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgQ29weXJpZ2h0IgotY29weXJpZ2h0PVwKLUNvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy5cblwKLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHNcblwKLWFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMFxuXAotd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXRcblwKLWh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sXG5cCi1cblwKLUNvbnRyaWJ1dG9yczpcblwKLSAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb25cbgotIyMjIyMjIyMjIyMjIyMjIyBlbmQgb2YgY29weXJpZ2h0IHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jICJsaWNlbnNlVVJMIiBwcm9wZXJ0eSAtIFVSTCBvZiB0aGUgIkZlYXR1cmUgTGljZW5zZSIKLSMgZG8gbm90IHRyYW5zbGF0ZSB2YWx1ZSAtIGp1c3QgY2hhbmdlIHRvIHBvaW50IHRvIGEgbG9jYWxlLXNwZWNpZmljIEhUTUwgcGFnZQotbGljZW5zZVVSTD1saWNlbnNlLmh0bWwKLQotIyAibGljZW5zZSIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgTGljZW5zZSIKLSMgc2hvdWxkIGJlIHBsYWluIHRleHQgdmVyc2lvbiBvZiBsaWNlbnNlIGFncmVlbWVudCBwb2ludGVkIHRvIGJlICJsaWNlbnNlVVJMIgotbGljZW5zZT1cCi1FQ0xJUFNFIEZPVU5EQVRJT04gU09GVFdBUkUgVVNFUiBBR1JFRU1FTlRcblwKLUp1bmUgMDYsIDIwMDdcblwKLVxuXAotVXNhZ2UgT2YgQ29udGVudFxuXAotXG5cCi1USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SXG5cCi1PVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS5cblwKLVVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJU1xuXAotQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SXG5cCi1OT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VXG5cCi1BR1JFRSBUSEFUIFlPVVIgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UXG5cCi1BTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UU1xuXAotT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEVcblwKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlNcblwKLU9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEXG5cCi1CRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuXG5cCi1cblwKLUFwcGxpY2FibGUgTGljZW5zZXNcblwKLVxuXAotVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb25cblwKLWlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljXG5cCi1MaWNlbnNlIFZlcnNpb24gMS4wICgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpc1xuXAotQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuXG5cCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC5cblwKLVxuXAotQ29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsXG5cCi1kb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlNcblwKLXJlcG9zaXRvcnkgKCJSZXBvc2l0b3J5IikgaW4gQ1ZTIG1vZHVsZXMgKCJNb2R1bGVzIikgYW5kIG1hZGUgYXZhaWxhYmxlXG5cCi1hcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCJEb3dubG9hZHMiKS5cblwKLVxuXAotICAgLSBDb250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLFxuXAotICAgICBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoIlBsdWctaW5zIiksXG5cCi0gICAgIHBsdWctaW4gZnJhZ21lbnRzICgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuXG5cCi0gICAtIEVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YT8gQVJjaGl2ZSlcblwKLSAgICAgaW4gYSBkaXJlY3RvcnkgbmFtZWQgInBsdWdpbnMiLlxuXAotICAgLSBBIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC5cblwKLSAgICAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgImZlYXR1cmVzIi5cblwKLSAgICAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uXG5cCi0gICAgIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS5cblwKLSAgIC0gRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzXG5cCi0gICAgIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gRmlsZXMgbmFtZWRcblwKLSJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mXG5cCi1JbmNsdWRlZCBGZWF0dXJlcy5cblwKLVxuXAotVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZVxuXAotY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJhYm91dC5odG1sIiAoIkFib3V0cyIpLiBUaGUgdGVybXMgYW5kXG5cCi1jb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQgSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZFxuXAotaW4gZmlsZXMgbmFtZWQgImxpY2Vuc2UuaHRtbCIgKCJGZWF0dXJlIExpY2Vuc2VzIikuIEFib3V0cyBhbmQgRmVhdHVyZVxuXAotTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZVxuXAotaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6XG5cCi1cblwKLSAgIC0gVGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5XG5cCi0gICAtIFBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzXG5cCi0gICAtIEluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnNcblwKLSAgIC0gU3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWluc1xuXAotICAgLSBGZWF0dXJlIGRpcmVjdG9yaWVzXG5cCi1cblwKLU5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGVcblwKLUVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgVXBkYXRlXG5cCi1MaWNlbnNlIikgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2Vzcy4gSWYgdGhlIEZlYXR1cmUgY29udGFpbnNcblwKLUluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91XG5cCi13aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yIGluZm9ybVxuXAoteW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpblxuXAotdGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAiZmVhdHVyZS5wcm9wZXJ0aWVzIi4gU3VjaCBBYm91dHMsXG5cCi1GZWF0dXJlIExpY2Vuc2VzIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91clxuXAotdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCBkaXJlY3RvcnkuXG5cCi1cblwKLVRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUlxuXAotVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuXG5cCi1TT01FIE9GIFRIRVNFIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6XG5cCi1cblwKLSAgICAtIENvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sKVxuXAotICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UpXG5cCi0gICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjApXG5cCi0gICAgLSBJQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwpXG5cCi0gICAgLSBNZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbClcblwKLSAgICAtIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwpXG5cCi0gICAgLSBDb21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlIChDRERMKSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbClcblwKLVxuXAotSVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUlxuXAotVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VcblwKLWlzIHByb3ZpZGVkLCBwbGVhc2UgY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zXG5cCi1nb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuXG5cCi1cblwKLUNyeXB0b2dyYXBoeVxuXAotXG5cCi1Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmVcblwKLWN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSxcblwKLWFuZC9vciByZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkVcblwKLXVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLFxuXAotcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLFxuXAotYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuXG5cCi1cblwKLUphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLlxuCi0jIyMjIyMjIyMjIyBlbmQgb2YgbGljZW5zZSBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvZmVhdHVyZS54bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL2ZlYXR1cmUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTY5YmNiLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvZmVhdHVyZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNjAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxmZWF0dXJlCi0gICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZSIKLSAgICAgIGxhYmVsPSIlZmVhdHVyZU5hbWUiCi0gICAgICB2ZXJzaW9uPSIyLjAuMS5xdWFsaWZpZXIiCi0gICAgICBwcm92aWRlci1uYW1lPSIlcHJvdmlkZXJOYW1lIj4KLQotICAgPGRlc2NyaXB0aW9uPgotICAgICAgJWRlc2NyaXB0aW9uCi0gICA8L2Rlc2NyaXB0aW9uPgotCi0gICA8Y29weXJpZ2h0PgotICAgICAgJWNvcHlyaWdodAotICAgPC9jb3B5cmlnaHQ+Ci0KLSAgIDxsaWNlbnNlIHVybD0iJWxpY2Vuc2VVUkwiPgotICAgICAgJWxpY2Vuc2UKLSAgIDwvbGljZW5zZT4KLQotICAgPHVybD4KLSAgICAgIDx1cGRhdGUgbGFiZWw9IiV1cGRhdGVTaXRlTmFtZSIgdXJsPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvd2VidG9vbHMvdXBkYXRlcy8iLz4KLSAgIDwvdXJsPgotCi0gICA8cmVxdWlyZXM+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lIiB2ZXJzaW9uPSIzLjIuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci5jb3JlIiB2ZXJzaW9uPSIxLjAuMTAyIiBtYXRjaD0iZXF1aXZhbGVudCIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZSIgdmVyc2lvbj0iMS4wLjEwMiIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZSIgdmVyc2lvbj0iMS4wLjEwMSIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3Qud3MucGFyc2VyIiB2ZXJzaW9uPSIxLjAuMTAwIiBtYXRjaD0iZXF1aXZhbGVudCIvPgotICAgICAgPGltcG9ydCBwbHVnaW49ImphdmF4LndzZGwiIHZlcnNpb249IjEuNC4wIiBtYXRjaD0iZXF1aXZhbGVudCIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5hcGFjaGUud3NpbDRqIiB2ZXJzaW9uPSIxLjAuMCIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYiIHZlcnNpb249IjEuMC4xMDEiIG1hdGNoPSJlcXVpdmFsZW50Ii8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzIiB2ZXJzaW9uPSIxLjEuMCIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzIiB2ZXJzaW9uPSIzLjIuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50IiB2ZXJzaW9uPSIxLjAuMTAwIiBtYXRjaD0iZXF1aXZhbGVudCIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnhzZCIgdmVyc2lvbj0iMi4zLjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LndzZGwiIHZlcnNpb249IjEuMS4wIiBtYXRjaD0iZXF1aXZhbGVudCIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzIiB2ZXJzaW9uPSIzLjIuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuYXBhY2hlLnhlcmNlcyIgdmVyc2lvbj0iMi44LjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0iY29tLmlibS5pY3UiIHZlcnNpb249IjMuNC40IiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5hcGFjaGUuYW50IiB2ZXJzaW9uPSIxLjYuNSIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyIiB2ZXJzaW9uPSIxLjEuMCIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbiIgdmVyc2lvbj0iMS4xLjAiIG1hdGNoPSJlcXVpdmFsZW50Ii8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlIiB2ZXJzaW9uPSIxLjEuMCIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uIiB2ZXJzaW9uPSIxLjEuMCIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3Qud3MiIHZlcnNpb249IjEuMC4xMDAiIG1hdGNoPSJlcXVpdmFsZW50Ii8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmFwYWNoZS5heGlzIiB2ZXJzaW9uPSIxLjMuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcudWRkaTRqIiB2ZXJzaW9uPSIyLjAuNCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZyIgdmVyc2lvbj0iMS4wLjQiIG1hdGNoPSJjb21wYXRpYmxlIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0iamF2YXgueG1sLnNvYXAiIHZlcnNpb249IjEuMi4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49ImphdmF4LnNlcnZsZXQiIHZlcnNpb249IjIuNC4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49ImphdmF4LnhtbC5ycGMiIHZlcnNpb249IjEuMS4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5hcGFjaGUuY29tbW9ucy5kaXNjb3ZlcnkiIHZlcnNpb249IjAuMi4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmVtZi5jb21tb24iIHZlcnNpb249IjIuMi4wIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlIiB2ZXJzaW9uPSIyLjIuMCIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkiIHZlcnNpb249IjIuMi4wIi8+Ci0gICA8L3JlcXVpcmVzPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzLnBhcnNlciIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbiIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c2kiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIxLjAuNC5xdWFsaWZpZXIiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuYXBhY2hlLmxvZzRqIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjEuMi4xMy5xdWFsaWZpZXIiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuYXBhY2hlLndzaWw0aiIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIxLjAuMC5xdWFsaWZpZXIiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcudWRkaTRqIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjIuMC41LnF1YWxpZmllciIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9ImphdmF4LndzZGwiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMS40LjAucXVhbGlmaWVyIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmFwYWNoZS5jb21tb25zLmRpc2NvdmVyeSIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjIuMC5xdWFsaWZpZXIiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9ImphdmF4LndzZGwxNSIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIxLjUuMS5xdWFsaWZpZXIiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJqYXZheC54bWwucnBjIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjEuMS4wLnF1YWxpZmllciIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0iamF2YXgueG1sLnNvYXAiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMS4yLjAucXVhbGlmaWVyIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuYXBhY2hlLmF4aXMiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMS40LjAucXVhbGlmaWVyIi8+Ci0KLTwvZmVhdHVyZT4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvbGljZW5zZS5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9saWNlbnNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2YWJmYjQuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9saWNlbnNlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53M2Mub3JnL1RSLzE5OTkvUkVDLWh0bWw0MDEtMTk5OTEyMjQvbG9vc2UuZHRkIj4KLTwhLS0gc2F2ZWQgZnJvbSB1cmw9KDAwNDQpaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwvbm90aWNlLmh0bWwgLS0+Ci08SFRNTD48SEVBRD48VElUTEU+RWNsaXBzZS5vcmcgU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L1RJVExFPgotPE1FVEEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgotPE1FVEEgY29udGVudD0iTVNIVE1MIDYuMDAuMjgwMC4xNDc5IiBuYW1lPUdFTkVSQVRPUj48L0hFQUQ+Ci08Qk9EWSBsYW5nPUVOLVVTIHZMaW5rPXB1cnBsZSBsaW5rPWJsdWU+Ci08SDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9IMj4KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci08SDM+VXNhZ2UgT2YgQ29udGVudDwvSDM+Ci08UD5USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gCi1BTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUyAoQ09MTEVDVElWRUxZICJDT05URU5UIikuIFVTRSBPRiAKLVRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgCi1CRUxPVy4gQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVSBBR1JFRSBUSEFUIFlPVVIgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIAotQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIAotQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSAKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIAotQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgCi1NQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC48L1A+Ci08SDM+QXBwbGljYWJsZSBMaWNlbnNlczwvSDM+Ci08UD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgCi1Gb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgCi1QdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXMgCi1Db250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8QSAKLWhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotPFA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIAotZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTIHJlcG9zaXRvcnkgCi0oIlJlcG9zaXRvcnkiKSBpbiBDVlMgbW9kdWxlcyAoIk1vZHVsZXMiKSBhbmQgbWFkZSBhdmFpbGFibGUgYXMgZG93bmxvYWRhYmxlIAotYXJjaGl2ZXMgKCJEb3dubG9hZHMiKS48L1A+Ci08UD5Db250ZW50IG1heSBiZSBhcHBvcnRpb25lZCBpbnRvIHBsdWctaW5zICgiUGx1Zy1pbnMiKSwgcGx1Zy1pbiBmcmFnbWVudHMgCi0oIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLiBBIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgCi1QbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLiBGaWxlcyBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSAKLWNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIAotYXNzb2NpYXRlZCB3aXRoIGEgRmVhdHVyZS4gUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBhcmUgbG9jYXRlZCBpbiBkaXJlY3RvcmllcyAKLW5hbWVkICJwbHVnaW5zIiBhbmQgRmVhdHVyZXMgYXJlIGxvY2F0ZWQgaW4gZGlyZWN0b3JpZXMgbmFtZWQgImZlYXR1cmVzIi48L1A+Ci08UD5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gRmlsZXMgbmFtZWQgCi0iZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCAKLUZlYXR1cmVzLjwvUD4KLTxQPlRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmUgY29udGFpbmVkIAotaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgCi1GZWF0dXJlcyBhbmQgSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAKLSgiRmVhdHVyZSBMaWNlbnNlcyIpLiBBYm91dHMgYW5kIEZlYXR1cmUgTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IAotZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgCi1sb2NhdGlvbnM6PC9QPgotPFVMPgotICA8TEk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5IAotICA8TEk+UGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXMgCi0gIDxMST5TdWJkaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICJzcmMiIG9mIGNlcnRhaW4gUGx1Zy1pbnMgCi0gIDxMST5GZWF0dXJlIGRpcmVjdG9yaWVzIDwvTEk+PC9VTD4KLTxQPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCAKLXVzaW5nIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCJGZWF0dXJlIFVwZGF0ZSAKLUxpY2Vuc2UiKSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCAKLUZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91IHdpdGggdGhlIHRlcm1zIAotYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gCi1sb2NhdGUgdGhlbS4gRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluIHRoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgCi1maWxlcyBuYW1lZCAiZmVhdHVyZS5wcm9wZXJ0aWVzIi4gU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMgYW5kIEZlYXR1cmUgCi1VcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyAKLWFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgCi1kaXJlY3RvcnkuPC9QPgotPFA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUyBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSIFRPIFRIRSBFUEwgCi1PUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuIFNPTUUgT0YgVEhFU0UgCi1PVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOjwvUD4KLTxVTD4KLSAgPExJPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWw8L0E+KSAKLQotICA8TEk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvQT4pIAotCi0gIDxMST5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L0E+KSAKLQotICA8TEk+SUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbCI+aHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWw8L0E+KSAKLQotICA8TEk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvQT4pIAotCi0gIDxMST5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9BPikgCi0gIDwvTEk+Ci0gICAKLSAgPExJPkNvbW1vbiBEZXZlbG9wbWVudCBhbmQgRGlzdHJpYnV0aW9uIExpY2Vuc2UgKENEREwpIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbCI+aHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sKTwvQT4KLSAgPC9MST4KLTwvVUw+Ci08UD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIAotVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgCi1wcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgCi1jb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L1A+Ci08SDM+Q3J5cHRvZ3JhcGh5PC9IMz4KLTxQPkNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZSAKLWN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIAotcmUtZXhwb3J0IHRvIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFIHVzaW5nIGFueSAKLWVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyAKLWNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIAotdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvUD48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvYnVpbGQucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyNDllOWYuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1iaW4uaW5jbHVkZXMgPVwKLWVwbC12MTAuaHRtbCxcCi1lY2xpcHNlX3VwZGF0ZV8xMjAuanBnLFwKLWZlYXR1cmUueG1sLFwKLWZlYXR1cmUucHJvcGVydGllcyxcCi1saWNlbnNlLmh0bWwKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmRmNzA4Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9lcGwtdjEwLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9lcGwtdjEwLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyMmFkMjkuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZXBsLXYxMC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzI4ICswLDAgQEAKLTxodG1sIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIKLXhtbG5zOnc9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmQiCi14bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+Ci0KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+Ci08bWV0YSBuYW1lPVByb2dJZCBjb250ZW50PVdvcmQuRG9jdW1lbnQ+Ci08bWV0YSBuYW1lPUdlbmVyYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxtZXRhIG5hbWU9T3JpZ2luYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxsaW5rIHJlbD1GaWxlLUxpc3QKLWhyZWY9Ii4vRWNsaXBzZSUyMEVQTCUyMDIwMDNfMTFfMTAlMjBGaW5hbF9maWxlcy9maWxlbGlzdC54bWwiPgotPHRpdGxlPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSBWZXJzaW9uIDEuMDwvdGl0bGU+Ci08IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8bzpEb2N1bWVudFByb3BlcnRpZXM+Ci0gIDxvOlJldmlzaW9uPjI8L286UmV2aXNpb24+Ci0gIDxvOlRvdGFsVGltZT4zPC9vOlRvdGFsVGltZT4KLSAgPG86Q3JlYXRlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpDcmVhdGVkPgotICA8bzpMYXN0U2F2ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286TGFzdFNhdmVkPgotICA8bzpQYWdlcz40PC9vOlBhZ2VzPgotICA8bzpXb3Jkcz4xNjI2PC9vOldvcmRzPgotICA8bzpDaGFyYWN0ZXJzPjkyNzA8L286Q2hhcmFjdGVycz4KLSAgIDxvOkxpbmVzPjc3PC9vOkxpbmVzPgotICA8bzpQYXJhZ3JhcGhzPjE4PC9vOlBhcmFncmFwaHM+Ci0gIDxvOkNoYXJhY3RlcnNXaXRoU3BhY2VzPjExMzg0PC9vOkNoYXJhY3RlcnNXaXRoU3BhY2VzPgotICA8bzpWZXJzaW9uPjkuNDQwMjwvbzpWZXJzaW9uPgotIDwvbzpEb2N1bWVudFByb3BlcnRpZXM+Ci08L3htbD48IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8dzpXb3JkRG9jdW1lbnQ+Ci0gIDx3OlRyYWNrUmV2aXNpb25zLz4KLSA8L3c6V29yZERvY3VtZW50PgotPC94bWw+PCFbZW5kaWZdLS0+Ci08c3R5bGU+Ci08IS0tCi0gLyogRm9udCBEZWZpbml0aW9ucyAqLwotQGZvbnQtZmFjZQotCXtmb250LWZhbWlseTpUYWhvbWE7Ci0JcGFub3NlLTE6MiAxMSA2IDQgMyA1IDQgNCAyIDQ7Ci0JbXNvLWZvbnQtY2hhcnNldDowOwotCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOwotCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOwotCW1zby1mb250LXNpZ25hdHVyZTo1NTM2Nzk0OTUgLTIxNDc0ODM2NDggOCAwIDY2MDQ3IDA7fQotIC8qIFN0eWxlIERlZmluaXRpb25zICovCi1wLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsCi0Je21zby1zdHlsZS1wYXJlbnQ6IiI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZToxMi4wcHQ7Ci0JZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotcAotCXttYXJnaW4tcmlnaHQ6MGluOwotCW1zby1tYXJnaW4tdG9wLWFsdDphdXRvOwotCW1zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvOwotCW1hcmdpbi1sZWZ0OjBpbjsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wLkJhbGxvb25UZXh0LCBsaS5CYWxsb29uVGV4dCwgZGl2LkJhbGxvb25UZXh0Ci0Je21zby1zdHlsZS1uYW1lOiJCYWxsb29uIFRleHQiOwotCW1hcmdpbjowaW47Ci0JbWFyZ2luLWJvdHRvbTouMDAwMXB0OwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6OC4wcHQ7Ci0JZm9udC1mYW1pbHk6VGFob21hOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLUBwYWdlIFNlY3Rpb24xCi0Je3NpemU6OC41aW4gMTEuMGluOwotCW1hcmdpbjoxLjBpbiAxLjI1aW4gMS4waW4gMS4yNWluOwotCW1zby1oZWFkZXItbWFyZ2luOi41aW47Ci0JbXNvLWZvb3Rlci1tYXJnaW46LjVpbjsKLQltc28tcGFwZXItc291cmNlOjA7fQotZGl2LlNlY3Rpb24xCi0Je3BhZ2U6U2VjdGlvbjE7fQotLS0+Ci08L3N0eWxlPgotPC9oZWFkPgotCi08Ym9keSBsYW5nPUVOLVVTIHN0eWxlPSd0YWItaW50ZXJ2YWw6LjVpbic+Ci0KLTxkaXYgY2xhc3M9U2VjdGlvbjE+Ci0KLTxwIGFsaWduPWNlbnRlciBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxiPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMDwvYj4KLTwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUgotVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoJnF1b3Q7QUdSRUVNRU5UJnF1b3Q7KS4gQU5ZIFVTRSwKLVJFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRQotT0YgVEhJUyBBR1JFRU1FTlQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4xLiBERUZJTklUSU9OUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dGlvbiZxdW90OyBtZWFuczo8L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWluIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uCi1kaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kPGJyIGNsZWFyPWxlZnQ+Ci1iKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWNoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOzwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPndoZXJlCi1zdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkCi1ieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uICdvcmlnaW5hdGVzJyBmcm9tIGEgQ29udHJpYnV0b3IKLWlmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uCi1zdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUKLVByb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbgotd2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZQotd29ya3Mgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRvciZxdW90OyBtZWFucyBhbnkgcGVyc29uIG9yCi1lbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0xpY2Vuc2VkIFBhdGVudHMgJnF1b3Q7IG1lYW4gcGF0ZW50Ci1jbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZQotb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1Byb2dyYW0mcXVvdDsgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMKLWRpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1JlY2lwaWVudCZxdW90OyBtZWFucyBhbnlvbmUgd2hvCi1yZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4yLiBHUkFOVCBPRiBSSUdIVFM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudAotYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bzxzcGFuCi1zdHlsZT0nY29sb3I6cmVkJz4gPC9zcGFuPnJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseQotZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2gKLUNvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZQotZm9ybS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQotU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cwotUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLDxzcGFuIHN0eWxlPSdjb2xvcjpncmVlbic+IDwvc3Bhbj5yb3lhbHR5LWZyZWUKLXBhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQKLWFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZQotY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24KLW9mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkCi1ieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbgotdG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0bwotYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcwotbGljZW5zZWQgaGVyZXVuZGVyLiA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5jKQotUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cwotQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IKLXRoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkKLXJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudAotZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbAotcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZAotbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkKLXRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsCi1pZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlCi10aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlCi1kaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+ZCkKLUVhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0Ci1yaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluCi10aGlzIEFncmVlbWVudC4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjMuIFJFUVVJUkVNRU5UUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkEgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZQotUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6PC9zcGFuPgotPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1pdHMgbGljZW5zZSBhZ3JlZW1lbnQ6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWVmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQKLWNvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUKLWFuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5Ci1hbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7IDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywKLWluY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2gKLWFzIGxvc3QgcHJvZml0czsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWlpKQotc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdAotQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPml2KQotc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZAotaW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYQotbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLjxzcGFuIHN0eWxlPSdjb2xvcjpibHVlJz4gPC9zcGFuPjwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5XaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZQotY29kZSBmb3JtOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpIGEKLWNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkKLWNvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZQotb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3MKLXN1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT048L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkKLWFjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMKLWFuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlCi1vZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwKLXByb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwKLWxpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgmcXVvdDtDb21tZXJjaWFsCi1Db250cmlidXRvciZxdW90OykgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlcgotQ29udHJpYnV0b3IgKCZxdW90O0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnF1b3Q7KSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kCi1jb3N0cyAoY29sbGVjdGl2ZWx5ICZxdW90O0xvc3NlcyZxdW90OykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyCi1sZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0bwotdGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbgotY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKLW9mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcwotcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyCi10byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCi10byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZAotYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUKLWluIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQotY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZAotd2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMKLXNlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZQotb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYQotY291cnQgcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz41LiBOTyBXQVJSQU5UWTwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKLUFHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsCi1XSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCi1NRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseQotcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUKLVByb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMKLUFncmVlbWVudCAsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywKLWNvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yCi1lcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SCi1BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLShJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi1PRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORwotTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YKLVRIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YKLVRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz43LiBHRU5FUkFMPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkCi1vciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvcgotZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0Ci1mdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZQotbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24KLWFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkKLWFsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGgKLW90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaAotUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZQotc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudAotc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IKLWNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZQotcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MKLXJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZAotZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwKLVJlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieQotUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUKLWNvcGllcyBvZiB0aGlzIEFncmVlbWVudCwgYnV0IGluIG9yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcwotY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50Ci1TdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YKLXRoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzCi10aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsCi1BZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0bwotc2VydmUgYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uCi1vZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0KLShpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mCi10aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQotKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZAotaW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0bwotdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIKLWV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKLWV4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQotU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZgotQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzCi1BZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzCi1pdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uPC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbD48IVtpZiAhc3VwcG9ydEVtcHR5UGFyYXNdPiZuYnNwOzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvcD4KLQotPC9kaXY+Ci0KLTwvYm9keT4KLQotPC9odG1sPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMmE5NGQ1Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE0NSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBmZWF0dXJlLnByb3BlcnRpZXMKLSMgY29udGFpbnMgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZm9yIGZlYXR1cmUueG1sCi0jICIlZm9vIiBpbiBmZWF0dXJlLnhtbCBjb3JyZXNwb25kcyB0byB0aGUga2V5ICJmb28iIGluIHRoaXMgZmlsZQotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQotIyBUaGlzIGZpbGUgc2hvdWxkIGJlIHRyYW5zbGF0ZWQuCi0KLSMgImZlYXR1cmVOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGZlYXR1cmUKLWZlYXR1cmVOYW1lPVdTVCBXUyBDb3JlIERldmVsb3BlciBSZXNvdXJjZXMKLQotIyAicHJvdmlkZXJOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGNvbXBhbnkgdGhhdCBwcm92aWRlcyB0aGUgZmVhdHVyZQotcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCi0KLSMgInVwZGF0ZVNpdGVOYW1lIiBwcm9wZXJ0eSAtIGxhYmVsIGZvciB0aGUgdXBkYXRlIHNpdGUKLXVwZGF0ZVNpdGVOYW1lPVRoZSBFY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybSAoV1RQKSBQcm9qZWN0IHVwZGF0ZSBzaXRlCi0KLSMgImRlc2NyaXB0aW9uIiBwcm9wZXJ0eSAtIGRlc2NyaXB0aW9uIG9mIHRoZSBmZWF0dXJlCi1kZXNjcmlwdGlvbj1Tb3VyY2UgY29kZSB6aXBzIGZvciBXU1QgV1MgY29yZS4KLQotIyAiY29weXJpZ2h0IiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBDb3B5cmlnaHQiCi1jb3B5cmlnaHQ9XAotQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLlxuXAotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuXAotYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG5cCi13aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdFxuXAotaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcblwKLVxuXAotQ29udHJpYnV0b3JzOlxuXAotICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvblxuCi0jIyMjIyMjIyMjIyMjIyMjIGVuZCBvZiBjb3B5cmlnaHQgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgImxpY2Vuc2VVUkwiIHByb3BlcnR5IC0gVVJMIG9mIHRoZSAiRmVhdHVyZSBMaWNlbnNlIgotIyBkbyBub3QgdHJhbnNsYXRlIHZhbHVlIC0ganVzdCBjaGFuZ2UgdG8gcG9pbnQgdG8gYSBsb2NhbGUtc3BlY2lmaWMgSFRNTCBwYWdlCi1saWNlbnNlVVJMPWxpY2Vuc2UuaHRtbAotCi0jICJsaWNlbnNlIiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIgotIyBzaG91bGQgYmUgcGxhaW4gdGV4dCB2ZXJzaW9uIG9mIGxpY2Vuc2UgYWdyZWVtZW50IHBvaW50ZWQgdG8gYmUgImxpY2Vuc2VVUkwiCi1saWNlbnNlPVwKLUVDTElQU0UgRk9VTkRBVElPTiBTT0ZUV0FSRSBVU0VSIEFHUkVFTUVOVFxuXAotSnVuZSAwNiwgMjAwN1xuXAotXG5cCi1Vc2FnZSBPZiBDb250ZW50XG5cCi1cblwKLVRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1JcblwKLU9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMgKENPTExFQ1RJVkVMWSAiQ09OVEVOVCIpLlxuXAotVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTXG5cCi1BR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1JcblwKLU5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1VcblwKLUFHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlRcblwKLUFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTXG5cCi1PUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRVxuXAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OU1xuXAotT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRURcblwKLUJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC5cblwKLVxuXAotQXBwbGljYWJsZSBMaWNlbnNlc1xuXAotXG5cCi1Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvblxuXAotaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWNcblwKLUxpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzXG5cCi1Db250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC5cblwKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LlxuXAotXG5cCi1Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSxcblwKLWRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWU1xuXAotcmVwb3NpdG9yeSAoIlJlcG9zaXRvcnkiKSBpbiBDVlMgbW9kdWxlcyAoIk1vZHVsZXMiKSBhbmQgbWFkZSBhdmFpbGFibGVcblwKLWFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoIkRvd25sb2FkcyIpLlxuXAotXG5cCi0gICAtIENvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsXG5cCi0gICAgIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgiUGx1Zy1pbnMiKSxcblwKLSAgICAgcGx1Zy1pbiBmcmFnbWVudHMgKCJGcmFnbWVudHMiKSwgYW5kIGZlYXR1cmVzICgiRmVhdHVyZXMiKS5cblwKLSAgIC0gRWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhPyBBUmNoaXZlKVxuXAotICAgICBpbiBhIGRpcmVjdG9yeSBuYW1lZCAicGx1Z2lucyIuXG5cCi0gICAtIEEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLlxuXAotICAgICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAiZmVhdHVyZXMiLlxuXAotICAgICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb25cblwKLSAgICAgbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLlxuXAotICAgLSBGZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXNcblwKLSAgICAgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuXG5cCi1cblwKLUZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBGaWxlcyBuYW1lZFxuXAotImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2ZcblwKLUluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlXG5cCi1jb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkXG5cCi1pbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAoIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlXG5cCi1MaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlXG5cCi1pbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczpcblwKLVxuXAotICAgLSBUaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnlcblwKLSAgIC0gUGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXNcblwKLSAgIC0gSW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSc1xuXAotICAgLSBTdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAic3JjIiBvZiBjZXJ0YWluIFBsdWctaW5zXG5cCi0gICAtIEZlYXR1cmUgZGlyZWN0b3JpZXNcblwKLVxuXAotTm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZVxuXAotRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgiRmVhdHVyZSBVcGRhdGVcblwKLUxpY2Vuc2UiKSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBJZiB0aGUgRmVhdHVyZSBjb250YWluc1xuXAotSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3VcblwKLXdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IgaW5mb3JtXG5cCi15b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluXG5cCi10aGUgImxpY2Vuc2UiIHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiLiBTdWNoIEFib3V0cyxcblwKLUZlYXR1cmUgTGljZW5zZXMgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZFxuXAotY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyXG5cCi11c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbiB0aGF0IGRpcmVjdG9yeS5cblwKLVxuXAotVEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUyBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSXG5cCi1UTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy5cblwKLVNPTUUgT0YgVEhFU0UgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTpcblwKLVxuXAotICAgIC0gQ29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwpXG5cCi0gICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSlcblwKLSAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMClcblwKLSAgICAtIElCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbClcblwKLSAgICAtIE1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sKVxuXAotICAgIC0gTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbClcblwKLSAgICAtIENvbW1vbiBEZXZlbG9wbWVudCBhbmQgRGlzdHJpYnV0aW9uIExpY2Vuc2UgKENEREwpIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sKVxuXAotXG5cCi1JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SXG5cCi1UTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2Ugb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZVxuXAotaXMgcHJvdmlkZWQsIHBsZWFzZSBjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnNcblwKLWdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC5cblwKLVxuXAotQ3J5cHRvZ3JhcGh5XG5cCi1cblwKLUNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZVxuXAotY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLFxuXAotYW5kL29yIHJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRVxuXAotdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsXG5cCi1yZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsXG5cCi1hbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC5cblwKLVxuXAotSmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguXG4KLSMjIyMjIyMjIyMjIGVuZCBvZiBsaWNlbnNlIHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZmVhdHVyZS54bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9mZWF0dXJlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTM4NzE5Yy4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9mZWF0dXJlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZmVhdHVyZQotICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUuc291cmNlIgotICAgICAgbGFiZWw9IiVmZWF0dXJlTmFtZSIKLSAgICAgIHZlcnNpb249IjIuMC4xLnF1YWxpZmllciIKLSAgICAgIHByb3ZpZGVyLW5hbWU9IiVwcm92aWRlck5hbWUiPgotCi0gICA8ZGVzY3JpcHRpb24+Ci0gICAgICAlZGVzY3JpcHRpb24KLSAgIDwvZGVzY3JpcHRpb24+Ci0KLSAgIDxjb3B5cmlnaHQ+Ci0gICAgICAlY29weXJpZ2h0Ci0gICA8L2NvcHlyaWdodD4KLQotICAgPGxpY2Vuc2UgdXJsPSIlbGljZW5zZVVSTCI+Ci0gICAgICAlbGljZW5zZQotICAgPC9saWNlbnNlPgotCi0gICA8dXJsPgotICAgICAgPHVwZGF0ZSBsYWJlbD0iJXVwZGF0ZVNpdGVOYW1lIiB1cmw9Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy93ZWJ0b29scy91cGRhdGVzLyIvPgotICAgPC91cmw+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlLnNvdXJjZSIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi08L2ZlYXR1cmU+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9saWNlbnNlLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9saWNlbnNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlYzRhNDguLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvbGljZW5zZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KLTx0aXRsZT5FY2xpcHNlLm9yZyBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvdGl0bGU+Ci08L2hlYWQ+Ci0KLTxib2R5IGxhbmc9IkVOLVVTIiBsaW5rPWJsdWUgdmxpbms9cHVycGxlPgotPGgyPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvaDI+Ci08cD5KdW5lIDA2LCAyMDA3PC9wPgotCi08aDM+VXNhZ2UgT2YgQ29udGVudDwvaDM+Ci0KLTxwPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUwotICAgKENPTExFQ1RJVkVMWSAmcXVvdDtDT05URU5UJnF1b3Q7KS4gIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQKLSAgIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UKLSAgIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SCi0gICBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQKLSAgIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvcD4KLSAgIAotPGgzPkFwcGxpY2FibGUgTGljZW5zZXM8L2gzPiAgIAotICAgCi08cD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wCi0gICAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgotICAgRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KLQotPHA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIGRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWUyByZXBvc2l0b3J5ICgmcXVvdDtSZXBvc2l0b3J5JnF1b3Q7KSBpbiBDVlMKLSAgIG1vZHVsZXMgKCZxdW90O01vZHVsZXMmcXVvdDspIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCZxdW90O0Rvd25sb2FkcyZxdW90OykuPC9wPgotICAgCi08dWw+Ci0JPGxpPkNvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoJnF1b3Q7UGx1Zy1pbnMmcXVvdDspLCBwbHVnLWluIGZyYWdtZW50cyAoJnF1b3Q7RnJhZ21lbnRzJnF1b3Q7KSwgYW5kIGZlYXR1cmVzICgmcXVvdDtGZWF0dXJlcyZxdW90OykuPC9saT4KLQk8bGk+RWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhJnRyYWRlOyBBUmNoaXZlKSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtwbHVnaW5zJnF1b3Q7LjwvbGk+Ci0JPGxpPkEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLiAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7ZmVhdHVyZXMmcXVvdDsuICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zCi0gICAgICBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuPC9saT4KLQk8bGk+RmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoJnF1b3Q7SW5jbHVkZWQgRmVhdHVyZXMmcXVvdDspLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuPC9saT4KLTwvdWw+ICAgCi0gCi08cD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDthYm91dC5odG1sJnF1b3Q7ICgmcXVvdDtBYm91dHMmcXVvdDspLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZAotSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDtsaWNlbnNlLmh0bWwmcXVvdDsgKCZxdW90O0ZlYXR1cmUgTGljZW5zZXMmcXVvdDspLiAgQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUKLWluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOjwvcD4KLQotPHVsPgotCTxsaT5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3Rvcnk8L2xpPgotCTxsaT5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllczwvbGk+Ci0JPGxpPkluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnM8L2xpPgotCTxsaT5TdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtzcmMmcXVvdDsgb2YgY2VydGFpbiBQbHVnLWluczwvbGk+Ci0JPGxpPkZlYXR1cmUgZGlyZWN0b3JpZXM8L2xpPgotPC91bD4KLQkJCi08cD5Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoJnF1b3Q7RmVhdHVyZSBVcGRhdGUgTGljZW5zZSZxdW90OykgZHVyaW5nIHRoZQotaW5zdGFsbGF0aW9uIHByb2Nlc3MuICBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yCi1pbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uICBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICZxdW90O2xpY2Vuc2UmcXVvdDsgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS5wcm9wZXJ0aWVzJnF1b3Q7IGZvdW5kIHdpdGhpbiBhIEZlYXR1cmUuCi1TdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcywgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4KLXRoYXQgZGlyZWN0b3J5LjwvcD4KLQotPHA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUywgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gIFNPTUUgT0YgVEhFU0UKLU9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9wPgotCi08dWw+Ci0JPGxpPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvYT4pPC9saT4KLQk8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9hPik8L2xpPgotCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvYT4pPC9saT4KLQk8bGk+SUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sIj5odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbDwvYT4pPC9saT4JCi0JPGxpPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvYT4pPC9saT4KLQk8bGk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9hPik8L2xpPgotICA8TEk+Q29tbW9uIERldmVsb3BtZW50IGFuZCBEaXN0cmlidXRpb24gTGljZW5zZSAoQ0RETCkgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sIj5odHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwpPC9BPgotICA8L0xJPgotPC9VTD4KLQotPHA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiBUTyBVU0UgT0YgVEhFIENPTlRFTlQuICBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIHByb3ZpZGVkLCBwbGVhc2UKLWNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9wPgotCi08aDM+Q3J5cHRvZ3JhcGh5PC9oMz4KLQotPHA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIGN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIHJlLWV4cG9ydCB0bwotICAgYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsCi0gICBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvcD4KLSAgIAotPHNtYWxsPkphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLjwvc21hbGw+ICAgCi08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0Lmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0OTE2ZGYuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci08Ym9keSBsYW5nPSJFTi1VUyI+Ci08aDI+QWJvdXQgVGhpcyBDb250ZW50PC9oMj4KLQotPHA+SnVuZSAwNiwgMjAwNzwvcD4JCi08aDM+TGljZW5zZTwvaDM+Ci0KLTxwPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAoJnF1b3Q7Q29udGVudCZxdW90OykuICBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUKLUVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCZxdW90O0VQTCZxdW90OykuICBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9hPi4KLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAmcXVvdDtQcm9ncmFtJnF1b3Q7IHdpbGwgbWVhbiB0aGUgQ29udGVudC48L3A+Ci0KLTxwPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIENvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgmcXVvdDtSZWRpc3RyaWJ1dG9yJnF1b3Q7KSBhbmQgZGlmZmVyZW50IHRlcm1zIGFuZCBjb25kaXRpb25zIG1heQotYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAgQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3IncyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuICBJZiBubyBzdWNoIGxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiAgVW5sZXNzIG90aGVyd2lzZQotaW5kaWNhdGVkIGJlbG93LCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQuPC9wPgotCi08aDM+U291cmNlIENvZGU8L2gzPgotPHA+VGhpcyBwbHVnLWluIGNvbnRhaW5zIHNvdXJjZSBjb2RlIHppcCBmaWxlcyAoJnF1b3Q7U291cmNlIFppcHMmcXVvdDspIHRoYXQgY29ycmVzcG9uZCB0byBiaW5hcnkgY29udGVudCBpbiBvdGhlciBwbHVnLWlucy4gVGhlc2UgU291cmNlIFppcHMgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlCi1hZ3JlZW1lbnRzIGFuZC9vciBub3RpY2VzLiBEZXRhaWxzIGFib3V0IHRoZXNlIGxpY2Vuc2UgYWdyZWVtZW50cyBhbmQgbm90aWNlcyBhcmUgY29udGFpbmVkIGluICZxdW90O2Fib3V0Lmh0bWwmcXVvdDsgZmlsZXMgKCZxdW90O0Fib3V0cyZxdW90OykgbG9jYXRlZCBpbiBzdWItZGlyZWN0b3JpZXMgaW4gdGhlCi1zcmMvIGRpcmVjdG9yeSBvZiB0aGlzIHBsdWctaW4uIFN1Y2ggQWJvdXRzIGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgU291cmNlIFppcHMgaW4gdGhhdCBkaXJlY3RvcnksIG5vdCB0aGUgRVBMLjwvcD4KLQotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5pbmkgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0LmluaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRhNWE0MC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0LmluaQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLSMgYWJvdXQuaW5pCi0jIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IGEgZmVhdHVyZQotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQotIyAiJWtleSIgYXJlIGV4dGVybmFsaXplZCBzdHJpbmdzIGRlZmluZWQgaW4gYWJvdXQucHJvcGVydGllcwotIyBUaGlzIGZpbGUgZG9lcyBub3QgbmVlZCB0byBiZSB0cmFuc2xhdGVkLgotCi0jIFByb3BlcnR5ICJhYm91dFRleHQiIGNvbnRhaW5zIGJsdXJiIGZvciAiQWJvdXQiIGRpYWxvZyAodHJhbnNsYXRlZCkKLWFib3V0VGV4dD0lYmx1cmIKLQotIyBQcm9wZXJ0eSAid2luZG93SW1hZ2UiIGNvbnRhaW5zIHBhdGggdG8gd2luZG93IGljb24gKDE2eDE2KQotIyBuZWVkZWQgZm9yIHByaW1hcnkgZmVhdHVyZXMgb25seQotCi0jIFByb3BlcnR5ICJmZWF0dXJlSW1hZ2UiIGNvbnRhaW5zIHBhdGggdG8gZmVhdHVyZSBpbWFnZSAoMzJ4MzIpCi1mZWF0dXJlSW1hZ2U9d3RwX3Byb2QzMi5wbmcKLQotIyBQcm9wZXJ0eSAiYWJvdXRJbWFnZSIgY29udGFpbnMgcGF0aCB0byBwcm9kdWN0IGltYWdlICg1MDB4MzMwIG9yIDExNXgxNjQpCi0jIG5lZWRlZCBmb3IgcHJpbWFyeSBmZWF0dXJlcyBvbmx5Ci0KLSMgUHJvcGVydHkgImFwcE5hbWUiIGNvbnRhaW5zIG5hbWUgb2YgdGhlIGFwcGxpY2F0aW9uIChub3QgdHJhbnNsYXRlZCkKLSMgbmVlZGVkIGZvciBwcmltYXJ5IGZlYXR1cmVzIG9ubHkKLQotIyBQcm9wZXJ0eSAid2VsY29tZVBhZ2UiIGNvbnRhaW5zIHBhdGggdG8gd2VsY29tZSBwYWdlIChzcGVjaWFsIFhNTC1iYXNlZCBmb3JtYXQpCi0jIG9wdGlvbmFsCi0KLSMgUHJvcGVydHkgIndlbGNvbWVQZXJzcGVjdGl2ZSIgY29udGFpbnMgdGhlIGlkIG9mIHRoZSBwZXJzcGVjdGl2ZSBpbiB3aGljaCB0aGUKLSMgd2VsY29tZSBwYWdlIGlzIHRvIGJlIG9wZW5lZC4KLSMgb3B0aW9uYWwKLQotCi0KLQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5tYXBwaW5ncyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQubWFwcGluZ3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkZmI3MzUuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5tYXBwaW5ncworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotIyBhYm91dC5tYXBwaW5ncw0KLSMgY29udGFpbnMgZmlsbC1pbnMgZm9yIGFib3V0LnByb3BlcnRpZXMNCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpDQotIyBUaGlzIGZpbGUgZG9lcyBub3QgbmVlZCB0byBiZSB0cmFuc2xhdGVkLg0KLQ0KLTA9QGJ1aWxkQA0KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjkwZGE4NS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0LnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBhYm91dC5wcm9wZXJ0aWVzCi0jIGNvbnRhaW5zIGV4dGVybmFsaXplZCBzdHJpbmdzIGZvciBhYm91dC5pbmkKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgZmlsbC1pbnMgYXJlIHN1cHBsaWVkIGJ5IGFib3V0Lm1hcHBpbmdzCi0jIFRoaXMgZmlsZSBzaG91bGQgYmUgdHJhbnNsYXRlZC4KLSMKLSMgRG8gbm90IHRyYW5zbGF0ZSBhbnkgdmFsdWVzIHN1cnJvdW5kZWQgYnkge30KLQotYmx1cmI9V2ViIFN0YW5kYXJkIFRvb2xzIC0gV2ViIFNlcnZpY2UgQ29yZVxuXAotXG5cCi1WZXJzaW9uOiB7ZmVhdHVyZVZlcnNpb259XG5cCi1CdWlsZCBpZDogezB9XG5cCi1cblwKLShjKSBDb3B5cmlnaHQgRWNsaXBzZSBjb250cmlidXRvcnMgYW5kIG90aGVycyAyMDA1LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC5cblwKLVZpc2l0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMKLQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9idWlsZC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYWQ1MTJkLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotYmluLmluY2x1ZGVzID0gYWJvdXQuaHRtbCwgYWJvdXQuaW5pLCBhYm91dC5tYXBwaW5ncywgYWJvdXQucHJvcGVydGllcywgd3RwX3Byb2QzMi5wbmcsIHBsdWdpbi5wcm9wZXJ0aWVzLCBwbHVnaW4ueG1sLCBzcmMvKiosIE1FVEEtSU5GLwotc291cmNlUGx1Z2luID0gdHJ1ZQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9wbHVnaW4ucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxMzlkMGYuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1wbHVnaW5OYW1lPVdlYiBTdGFuZGFyZCBUb29scyAtIFdlYiBTZXJ2aWNlIENvcmUgU291cmNlCi1wcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vd3RwX3Byb2QzMi5naWYgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL3d0cF9wcm9kMzIuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZWZiNDRhLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vd3RwX3Byb2QzMi5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL3d0cF9wcm9kMzIucG5nIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi93dHBfcHJvZDMyLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZjZWFiMy4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfY29yZS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL3d0cF9wcm9kMzIucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Nkay5mZWF0dXJlLy5jdnNpZ25vcmUgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfc2RrLmZlYXR1cmUvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjg2NjcxZC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfc2RrLmZlYXR1cmUvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotYnVpbGQueG1sCi1mZWF0dXJlcwotcGx1Z2lucwotb3JnLmVjbGlwc2Uud3N0LndzX3Nkay5mZWF0dXJlXzEuMC4wLmJpbi5kaXN0LnppcApkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Nkay5mZWF0dXJlLy5wcm9qZWN0IGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Nkay5mZWF0dXJlLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4N2ViZWU3Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19zZGsuZmVhdHVyZS8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC53c19zZGsuZmVhdHVyZTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVOYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19zZGsuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Nkay5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwM2U4MGIuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Nkay5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IGZlYXR1cmUueG1sLFwKLSAgICAgICAgICAgICAgIGxpY2Vuc2UuaHRtbCxcCi0gICAgICAgICAgICAgICBlcGwtdjEwLmh0bWwsXAotICAgICAgICAgICAgICAgZWNsaXBzZV91cGRhdGVfMTIwLmpwZyxcCi0gICAgICAgICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXMKLQotZ2VuZXJhdGUuZmVhdHVyZUBvcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS5zb3VyY2U9b3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19zZGsuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Nkay5mZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmZGY3MDguLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Nkay5mZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfc2RrLmZlYXR1cmUvZXBsLXYxMC5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Nkay5mZWF0dXJlL2VwbC12MTAuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ0YjE5Ni4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfc2RrLmZlYXR1cmUvZXBsLXYxMC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzI4ICswLDAgQEAKLTxodG1sIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIKLXhtbG5zOnc9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmQiCi14bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+Ci0KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+Ci08bWV0YSBuYW1lPVByb2dJZCBjb250ZW50PVdvcmQuRG9jdW1lbnQ+Ci08bWV0YSBuYW1lPUdlbmVyYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxtZXRhIG5hbWU9T3JpZ2luYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxsaW5rIHJlbD1GaWxlLUxpc3QKLWhyZWY9Ii4vRWNsaXBzZSUyMEVQTCUyMDIwMDNfMTFfMTAlMjBGaW5hbF9maWxlcy9maWxlbGlzdC54bWwiPgotPHRpdGxlPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSBWZXJzaW9uIDEuMDwvdGl0bGU+Ci08IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8bzpEb2N1bWVudFByb3BlcnRpZXM+Ci0gIDxvOlJldmlzaW9uPjI8L286UmV2aXNpb24+Ci0gIDxvOlRvdGFsVGltZT4zPC9vOlRvdGFsVGltZT4KLSAgPG86Q3JlYXRlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpDcmVhdGVkPgotICA8bzpMYXN0U2F2ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286TGFzdFNhdmVkPgotICA8bzpQYWdlcz40PC9vOlBhZ2VzPgotICA8bzpXb3Jkcz4xNjI2PC9vOldvcmRzPgotICA8bzpDaGFyYWN0ZXJzPjkyNzA8L286Q2hhcmFjdGVycz4KLSAgIDxvOkxpbmVzPjc3PC9vOkxpbmVzPgotICA8bzpQYXJhZ3JhcGhzPjE4PC9vOlBhcmFncmFwaHM+Ci0gIDxvOkNoYXJhY3RlcnNXaXRoU3BhY2VzPjExMzg0PC9vOkNoYXJhY3RlcnNXaXRoU3BhY2VzPgotICA8bzpWZXJzaW9uPjkuNDQwMjwvbzpWZXJzaW9uPgotIDwvbzpEb2N1bWVudFByb3BlcnRpZXM+Ci08L3htbD48IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8dzpXb3JkRG9jdW1lbnQ+Ci0gIDx3OlRyYWNrUmV2aXNpb25zLz4KLSA8L3c6V29yZERvY3VtZW50PgotPC94bWw+PCFbZW5kaWZdLS0+Ci08c3R5bGU+Ci08IS0tCi0gLyogRm9udCBEZWZpbml0aW9ucyAqLwotQGZvbnQtZmFjZQotCXtmb250LWZhbWlseTpUYWhvbWE7Ci0JcGFub3NlLTE6MiAxMSA2IDQgMyA1IDQgNCAyIDQ7Ci0JbXNvLWZvbnQtY2hhcnNldDowOwotCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOwotCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOwotCW1zby1mb250LXNpZ25hdHVyZTo1NTM2Nzk0OTUgLTIxNDc0ODM2NDggOCAwIDY2MDQ3IDA7fQotIC8qIFN0eWxlIERlZmluaXRpb25zICovCi1wLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsCi0Je21zby1zdHlsZS1wYXJlbnQ6IiI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZToxMi4wcHQ7Ci0JZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotcAotCXttYXJnaW4tcmlnaHQ6MGluOwotCW1zby1tYXJnaW4tdG9wLWFsdDphdXRvOwotCW1zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvOwotCW1hcmdpbi1sZWZ0OjBpbjsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wLkJhbGxvb25UZXh0LCBsaS5CYWxsb29uVGV4dCwgZGl2LkJhbGxvb25UZXh0Ci0Je21zby1zdHlsZS1uYW1lOiJCYWxsb29uIFRleHQiOwotCW1hcmdpbjowaW47Ci0JbWFyZ2luLWJvdHRvbTouMDAwMXB0OwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6OC4wcHQ7Ci0JZm9udC1mYW1pbHk6VGFob21hOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLUBwYWdlIFNlY3Rpb24xCi0Je3NpemU6OC41aW4gMTEuMGluOwotCW1hcmdpbjoxLjBpbiAxLjI1aW4gMS4waW4gMS4yNWluOwotCW1zby1oZWFkZXItbWFyZ2luOi41aW47Ci0JbXNvLWZvb3Rlci1tYXJnaW46LjVpbjsKLQltc28tcGFwZXItc291cmNlOjA7fQotZGl2LlNlY3Rpb24xCi0Je3BhZ2U6U2VjdGlvbjE7fQotLS0+Ci08L3N0eWxlPgotPC9oZWFkPgotCi08Ym9keSBsYW5nPUVOLVVTIHN0eWxlPSd0YWItaW50ZXJ2YWw6LjVpbic+Ci0KLTxkaXYgY2xhc3M9U2VjdGlvbjE+Ci0KLTxwIGFsaWduPWNlbnRlciBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxiPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMDwvYj4KLTwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUgotVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoJnF1b3Q7QUdSRUVNRU5UJnF1b3Q7KS4gQU5ZIFVTRSwKLVJFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRQotT0YgVEhJUyBBR1JFRU1FTlQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4xLiBERUZJTklUSU9OUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dGlvbiZxdW90OyBtZWFuczo8L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWluIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uCi1kaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kPGJyIGNsZWFyPWxlZnQ+Ci1iKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWNoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOzwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPndoZXJlCi1zdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkCi1ieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uICdvcmlnaW5hdGVzJyBmcm9tIGEgQ29udHJpYnV0b3IKLWlmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uCi1zdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUKLVByb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbgotd2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZQotd29ya3Mgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRvciZxdW90OyBtZWFucyBhbnkgcGVyc29uIG9yCi1lbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0xpY2Vuc2VkIFBhdGVudHMgJnF1b3Q7IG1lYW4gcGF0ZW50Ci1jbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZQotb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1Byb2dyYW0mcXVvdDsgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMKLWRpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1JlY2lwaWVudCZxdW90OyBtZWFucyBhbnlvbmUgd2hvCi1yZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4yLiBHUkFOVCBPRiBSSUdIVFM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudAotYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bzxzcGFuCi1zdHlsZT0nY29sb3I6cmVkJz4gPC9zcGFuPnJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseQotZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2gKLUNvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZQotZm9ybS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQotU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cwotUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLDxzcGFuIHN0eWxlPSdjb2xvcjpncmVlbic+IDwvc3Bhbj5yb3lhbHR5LWZyZWUKLXBhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQKLWFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZQotY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24KLW9mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkCi1ieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbgotdG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0bwotYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcwotbGljZW5zZWQgaGVyZXVuZGVyLiA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5jKQotUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cwotQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IKLXRoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkKLXJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudAotZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbAotcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZAotbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkKLXRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsCi1pZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlCi10aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlCi1kaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+ZCkKLUVhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0Ci1yaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluCi10aGlzIEFncmVlbWVudC4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjMuIFJFUVVJUkVNRU5UUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkEgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZQotUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6PC9zcGFuPgotPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1pdHMgbGljZW5zZSBhZ3JlZW1lbnQ6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWVmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQKLWNvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUKLWFuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5Ci1hbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7IDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywKLWluY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2gKLWFzIGxvc3QgcHJvZml0czsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWlpKQotc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdAotQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPml2KQotc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZAotaW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYQotbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLjxzcGFuIHN0eWxlPSdjb2xvcjpibHVlJz4gPC9zcGFuPjwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5XaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZQotY29kZSBmb3JtOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpIGEKLWNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkKLWNvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZQotb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3MKLXN1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT048L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkKLWFjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMKLWFuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlCi1vZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwKLXByb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwKLWxpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgmcXVvdDtDb21tZXJjaWFsCi1Db250cmlidXRvciZxdW90OykgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlcgotQ29udHJpYnV0b3IgKCZxdW90O0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnF1b3Q7KSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kCi1jb3N0cyAoY29sbGVjdGl2ZWx5ICZxdW90O0xvc3NlcyZxdW90OykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyCi1sZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0bwotdGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbgotY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKLW9mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcwotcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyCi10byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCi10byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZAotYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUKLWluIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQotY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZAotd2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMKLXNlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZQotb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYQotY291cnQgcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz41LiBOTyBXQVJSQU5UWTwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKLUFHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsCi1XSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCi1NRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseQotcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUKLVByb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMKLUFncmVlbWVudCAsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywKLWNvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yCi1lcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SCi1BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLShJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi1PRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORwotTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YKLVRIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YKLVRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz43LiBHRU5FUkFMPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkCi1vciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvcgotZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0Ci1mdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZQotbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24KLWFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkKLWFsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGgKLW90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaAotUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZQotc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudAotc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IKLWNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZQotcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MKLXJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZAotZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwKLVJlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieQotUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUKLWNvcGllcyBvZiB0aGlzIEFncmVlbWVudCwgYnV0IGluIG9yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcwotY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50Ci1TdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YKLXRoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzCi10aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsCi1BZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0bwotc2VydmUgYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uCi1vZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0KLShpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mCi10aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQotKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZAotaW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0bwotdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIKLWV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKLWV4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQotU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZgotQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzCi1BZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzCi1pdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uPC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbD48IVtpZiAhc3VwcG9ydEVtcHR5UGFyYXNdPiZuYnNwOzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvcD4KLQotPC9kaXY+Ci0KLTwvYm9keT4KLQotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19zZGsuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfc2RrLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzA1YzI2Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19zZGsuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgZmVhdHVyZS5wcm9wZXJ0aWVzCi0jIGNvbnRhaW5zIGV4dGVybmFsaXplZCBzdHJpbmdzIGZvciBmZWF0dXJlLnhtbAotIyAiJWZvbyIgaW4gZmVhdHVyZS54bWwgY29ycmVzcG9uZHMgdG8gdGhlIGtleSAiZm9vIiBpbiB0aGlzIGZpbGUKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgVGhpcyBmaWxlIHNob3VsZCBiZSB0cmFuc2xhdGVkLgotCi0jICJmZWF0dXJlTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBmZWF0dXJlCi1mZWF0dXJlTmFtZT1XU1QgV2ViIFNlcnZpY2VzIFBsdWctaW4gRGV2ZWxvcGVyIFJlc291cmNlcwotCi0jICJwcm92aWRlck5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgY29tcGFueSB0aGF0IHByb3ZpZGVzIHRoZSBmZWF0dXJlCi1wcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKLQotIyAidXBkYXRlU2l0ZU5hbWUiIHByb3BlcnR5IC0gbGFiZWwgZm9yIHRoZSB1cGRhdGUgc2l0ZQotdXBkYXRlU2l0ZU5hbWU9VGhlIEVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtIChXVFApIFByb2plY3QgdXBkYXRlIHNpdGUKLQotIyAiZGVzY3JpcHRpb24iIHByb3BlcnR5IC0gZGVzY3JpcHRpb24gb2YgdGhlIGZlYXR1cmUKLWRlc2NyaXB0aW9uPVNvdXJjZSBjb2RlIHppcHMgZm9yIHRoZSBXU1QgV2ViIHNlcnZpY2VzIHRvb2xzCi0KLSMgImNvcHlyaWdodCIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgQ29weXJpZ2h0IgotY29weXJpZ2h0PVwKLUNvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy5cblwKLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHNcblwKLWFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMFxuXAotd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXRcblwKLWh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sXG5cCi1cblwKLUNvbnRyaWJ1dG9yczpcblwKLSAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb25cbgotIyMjIyMjIyMjIyMjIyMjIyBlbmQgb2YgY29weXJpZ2h0IHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jICJsaWNlbnNlVVJMIiBwcm9wZXJ0eSAtIFVSTCBvZiB0aGUgIkZlYXR1cmUgTGljZW5zZSIKLSMgZG8gbm90IHRyYW5zbGF0ZSB2YWx1ZSAtIGp1c3QgY2hhbmdlIHRvIHBvaW50IHRvIGEgbG9jYWxlLXNwZWNpZmljIEhUTUwgcGFnZQotbGljZW5zZVVSTD1saWNlbnNlLmh0bWwKLQotIyAibGljZW5zZSIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgTGljZW5zZSIKLSMgc2hvdWxkIGJlIHBsYWluIHRleHQgdmVyc2lvbiBvZiBsaWNlbnNlIGFncmVlbWVudCBwb2ludGVkIHRvIGJlICJsaWNlbnNlVVJMIgotbGljZW5zZT1cCi1FQ0xJUFNFIEZPVU5EQVRJT04gU09GVFdBUkUgVVNFUiBBR1JFRU1FTlRcblwKLUp1bmUgMDYsIDIwMDdcblwKLVxuXAotVXNhZ2UgT2YgQ29udGVudFxuXAotXG5cCi1USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SXG5cCi1PVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS5cblwKLVVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJU1xuXAotQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SXG5cCi1OT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VXG5cCi1BR1JFRSBUSEFUIFlPVVIgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UXG5cCi1BTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UU1xuXAotT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEVcblwKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlNcblwKLU9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEXG5cCi1CRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuXG5cCi1cblwKLUFwcGxpY2FibGUgTGljZW5zZXNcblwKLVxuXAotVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb25cblwKLWlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljXG5cCi1MaWNlbnNlIFZlcnNpb24gMS4wICgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpc1xuXAotQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuXG5cCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC5cblwKLVxuXAotQ29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsXG5cCi1kb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlNcblwKLXJlcG9zaXRvcnkgKCJSZXBvc2l0b3J5IikgaW4gQ1ZTIG1vZHVsZXMgKCJNb2R1bGVzIikgYW5kIG1hZGUgYXZhaWxhYmxlXG5cCi1hcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCJEb3dubG9hZHMiKS5cblwKLVxuXAotICAgLSBDb250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLFxuXAotICAgICBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoIlBsdWctaW5zIiksXG5cCi0gICAgIHBsdWctaW4gZnJhZ21lbnRzICgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuXG5cCi0gICAtIEVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YT8gQVJjaGl2ZSlcblwKLSAgICAgaW4gYSBkaXJlY3RvcnkgbmFtZWQgInBsdWdpbnMiLlxuXAotICAgLSBBIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC5cblwKLSAgICAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgImZlYXR1cmVzIi5cblwKLSAgICAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uXG5cCi0gICAgIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS5cblwKLSAgIC0gRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzXG5cCi0gICAgIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gRmlsZXMgbmFtZWRcblwKLSJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mXG5cCi1JbmNsdWRlZCBGZWF0dXJlcy5cblwKLVxuXAotVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZVxuXAotY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJhYm91dC5odG1sIiAoIkFib3V0cyIpLiBUaGUgdGVybXMgYW5kXG5cCi1jb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQgSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZFxuXAotaW4gZmlsZXMgbmFtZWQgImxpY2Vuc2UuaHRtbCIgKCJGZWF0dXJlIExpY2Vuc2VzIikuIEFib3V0cyBhbmQgRmVhdHVyZVxuXAotTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZVxuXAotaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6XG5cCi1cblwKLSAgIC0gVGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5XG5cCi0gICAtIFBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzXG5cCi0gICAtIEluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnNcblwKLSAgIC0gU3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWluc1xuXAotICAgLSBGZWF0dXJlIGRpcmVjdG9yaWVzXG5cCi1cblwKLU5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGVcblwKLUVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgVXBkYXRlXG5cCi1MaWNlbnNlIikgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2Vzcy4gSWYgdGhlIEZlYXR1cmUgY29udGFpbnNcblwKLUluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91XG5cCi13aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yIGluZm9ybVxuXAoteW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpblxuXAotdGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAiZmVhdHVyZS5wcm9wZXJ0aWVzIi4gU3VjaCBBYm91dHMsXG5cCi1GZWF0dXJlIExpY2Vuc2VzIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91clxuXAotdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCBkaXJlY3RvcnkuXG5cCi1cblwKLVRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUlxuXAotVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuXG5cCi1TT01FIE9GIFRIRVNFIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6XG5cCi1cblwKLSAgICAtIENvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sKVxuXAotICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UpXG5cCi0gICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjApXG5cCi0gICAgLSBJQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwpXG5cCi0gICAgLSBNZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbClcblwKLSAgICAtIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwpXG5cCi0gICAgLSBDb21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlIChDRERMKSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbClcblwKLVxuXAotSVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUlxuXAotVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VcblwKLWlzIHByb3ZpZGVkLCBwbGVhc2UgY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zXG5cCi1nb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuXG5cCi1cblwKLUNyeXB0b2dyYXBoeVxuXAotXG5cCi1Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmVcblwKLWN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSxcblwKLWFuZC9vciByZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkVcblwKLXVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLFxuXAotcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLFxuXAotYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuXG5cCi1cblwKLUphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLlxuCi0jIyMjIyMjIyMjIyBlbmQgb2YgbGljZW5zZSBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19zZGsuZmVhdHVyZS9mZWF0dXJlLnhtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19zZGsuZmVhdHVyZS9mZWF0dXJlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGIwNGIzMy4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3Nfc2RrLmZlYXR1cmUvZmVhdHVyZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGZlYXR1cmUKLSAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3Nfc2RrLmZlYXR1cmUiCi0gICAgICBsYWJlbD0iJWZlYXR1cmVOYW1lIgotICAgICAgdmVyc2lvbj0iMi4wLjEucXVhbGlmaWVyIgotICAgICAgcHJvdmlkZXItbmFtZT0iJXByb3ZpZGVyTmFtZSI+Ci0KLSAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICVkZXNjcmlwdGlvbgotICAgPC9kZXNjcmlwdGlvbj4KLQotICAgPGNvcHlyaWdodD4KLSAgICAgICVjb3B5cmlnaHQKLSAgIDwvY29weXJpZ2h0PgotCi0gICA8bGljZW5zZSB1cmw9IiVsaWNlbnNlVVJMIj4KLSAgICAgICVsaWNlbnNlCi0gICA8L2xpY2Vuc2U+Ci0KLSAgIDx1cmw+Ci0gICAgICA8dXBkYXRlIGxhYmVsPSIldXBkYXRlU2l0ZU5hbWUiIHVybD0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3dlYnRvb2xzL3VwZGF0ZXMvIi8+Ci0gICA8L3VybD4KLSAKLSAgIDxpbmNsdWRlcwotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPGluY2x1ZGVzCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUuc291cmNlIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotPC9mZWF0dXJlPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Nkay5mZWF0dXJlL2xpY2Vuc2UuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c19zZGsuZmVhdHVyZS9saWNlbnNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2NDQ1OTguLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Nkay5mZWF0dXJlL2xpY2Vuc2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczYy5vcmcvVFIvMTk5OS9SRUMtaHRtbDQwMS0xOTk5MTIyNC9sb29zZS5kdGQiPgotPCEtLSBzYXZlZCBmcm9tIHVybD0oMDA0NClodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC9ub3RpY2UuaHRtbCAtLT4KLTxIVE1MPjxIRUFEPjxUSVRMRT5FY2xpcHNlLm9yZyBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvVElUTEU+Ci08TUVUQSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Ci08TUVUQSBjb250ZW50PSJNU0hUTUwgNi4wMC4yODAwLjE0NzkiIG5hbWU9R0VORVJBVE9SPjwvSEVBRD4KLTxCT0RZIGxhbmc9RU4tVVMgdkxpbms9cHVycGxlIGxpbms9Ymx1ZT4KLTxIMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L0gyPgotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLTxIMz5Vc2FnZSBPZiBDb250ZW50PC9IMz4KLTxQPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiAKLUFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS4gVVNFIE9GIAotVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCAKLUJFTE9XLiBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgCi1CWSBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgCi1BR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgCi1BUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLCBUSEVOIFlPVSAKLU1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvUD4KLTxIMz5BcHBsaWNhYmxlIExpY2Vuc2VzPC9IMz4KLTxQPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSAKLUZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSAKLVB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyAKLUNvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxBIAotaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci08UD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgCi1kb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlMgcmVwb3NpdG9yeSAKLSgiUmVwb3NpdG9yeSIpIGluIENWUyBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgCi1hcmNoaXZlcyAoIkRvd25sb2FkcyIpLjwvUD4KLTxQPkNvbnRlbnQgbWF5IGJlIGFwcG9ydGlvbmVkIGludG8gcGx1Zy1pbnMgKCJQbHVnLWlucyIpLCBwbHVnLWluIGZyYWdtZW50cyAKLSgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuIEEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSAKLVBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuIEZpbGVzIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IAotY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgCi1hc3NvY2lhdGVkIHdpdGggYSBGZWF0dXJlLiBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIGFyZSBsb2NhdGVkIGluIGRpcmVjdG9yaWVzIAotbmFtZWQgInBsdWdpbnMiIGFuZCBGZWF0dXJlcyBhcmUgbG9jYXRlZCBpbiBkaXJlY3RvcmllcyBuYW1lZCAiZmVhdHVyZXMiLjwvUD4KLTxQPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBGaWxlcyBuYW1lZCAKLSJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIAotRmVhdHVyZXMuPC9QPgotPFA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgCi1pbiBmaWxlcyBuYW1lZCAiYWJvdXQuaHRtbCIgKCJBYm91dHMiKS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyAKLUZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJsaWNlbnNlLmh0bWwiIAotKCJGZWF0dXJlIExpY2Vuc2VzIikuIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgCi1kaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyAKLWxvY2F0aW9uczo8L1A+Ci08VUw+Ci0gIDxMST5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnkgCi0gIDxMST5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllcyAKLSAgPExJPlN1YmRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWlucyAKLSAgPExJPkZlYXR1cmUgZGlyZWN0b3JpZXMgPC9MST48L1VMPgotPFA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIAotdXNpbmcgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgVXBkYXRlIAotTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zIEluY2x1ZGVkIAotRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgCi1hbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yIGluZm9ybSB5b3Ugd2hlcmUgeW91IGNhbiAKLWxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiAKLWZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiLiBTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcyBhbmQgRmVhdHVyZSAKLVVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIAotYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCAKLWRpcmVjdG9yeS48L1A+Ci08UD5USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCAKLU9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gU09NRSBPRiBUSEVTRSAKLU9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9QPgotPFVMPgotICA8TEk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvQT4pIAotCi0gIDxMST5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9BPikgCi0KLSAgPExJPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvQT4pIAotCi0gIDxMST5JQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sIj5odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbDwvQT4pIAotCi0gIDxMST5NZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9BPikgCi0KLSAgPExJPk1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L0E+KSAKLSAgPC9MST4KLSAgICAKLSAgPExJPkNvbW1vbiBEZXZlbG9wbWVudCBhbmQgRGlzdHJpYnV0aW9uIExpY2Vuc2UgKENEREwpIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbCI+aHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sKTwvQT4KLSAgPC9MST4KLTwvVUw+Ci08UD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIAotVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgCi1wcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgCi1jb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L1A+Ci08SDM+Q3J5cHRvZ3JhcGh5PC9IMz4KLTxQPkNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZSAKLWN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIAotcmUtZXhwb3J0IHRvIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFIHVzaW5nIGFueSAKLWVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyAKLWNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIAotdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvUD48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Rlc3RzLmZlYXR1cmUvLmN2c2lnbm9yZSBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c190ZXN0cy5mZWF0dXJlLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyZDU2ZTQuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Rlc3RzLmZlYXR1cmUvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotYnVpbGQueG1sCi1vcmcuZWNsaXBzZS53c3Qud3NfdGVzdHMuZmVhdHVyZV8xLjAuMC5iaW4uZGlzdC56aXAKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c190ZXN0cy5mZWF0dXJlLy5wcm9qZWN0IGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Rlc3RzLmZlYXR1cmUvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhZTIzNTQuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Rlc3RzLmZlYXR1cmUvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Qud3NfdGVzdHMuZmVhdHVyZTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVOYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c190ZXN0cy5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdGVzdHMuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiY2IzM2FkLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c190ZXN0cy5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IGZlYXR1cmUueG1sLFwKLSAgICAgICAgICAgICAgIGxpY2Vuc2UuaHRtbCxcCi0gICAgICAgICAgICAgICBlcGwtdjEwLmh0bWwsXAotICAgICAgICAgICAgICAgZWNsaXBzZV91cGRhdGVfMTIwLmpwZyxcCi0gICAgICAgICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c190ZXN0cy5mZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdGVzdHMuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmRmNzA4Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c190ZXN0cy5mZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdGVzdHMuZmVhdHVyZS9lcGwtdjEwLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdGVzdHMuZmVhdHVyZS9lcGwtdjEwLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNGIxOTYuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Rlc3RzLmZlYXR1cmUvZXBsLXYxMC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzI4ICswLDAgQEAKLTxodG1sIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIKLXhtbG5zOnc9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmQiCi14bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+Ci0KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+Ci08bWV0YSBuYW1lPVByb2dJZCBjb250ZW50PVdvcmQuRG9jdW1lbnQ+Ci08bWV0YSBuYW1lPUdlbmVyYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxtZXRhIG5hbWU9T3JpZ2luYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxsaW5rIHJlbD1GaWxlLUxpc3QKLWhyZWY9Ii4vRWNsaXBzZSUyMEVQTCUyMDIwMDNfMTFfMTAlMjBGaW5hbF9maWxlcy9maWxlbGlzdC54bWwiPgotPHRpdGxlPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSBWZXJzaW9uIDEuMDwvdGl0bGU+Ci08IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8bzpEb2N1bWVudFByb3BlcnRpZXM+Ci0gIDxvOlJldmlzaW9uPjI8L286UmV2aXNpb24+Ci0gIDxvOlRvdGFsVGltZT4zPC9vOlRvdGFsVGltZT4KLSAgPG86Q3JlYXRlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpDcmVhdGVkPgotICA8bzpMYXN0U2F2ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286TGFzdFNhdmVkPgotICA8bzpQYWdlcz40PC9vOlBhZ2VzPgotICA8bzpXb3Jkcz4xNjI2PC9vOldvcmRzPgotICA8bzpDaGFyYWN0ZXJzPjkyNzA8L286Q2hhcmFjdGVycz4KLSAgIDxvOkxpbmVzPjc3PC9vOkxpbmVzPgotICA8bzpQYXJhZ3JhcGhzPjE4PC9vOlBhcmFncmFwaHM+Ci0gIDxvOkNoYXJhY3RlcnNXaXRoU3BhY2VzPjExMzg0PC9vOkNoYXJhY3RlcnNXaXRoU3BhY2VzPgotICA8bzpWZXJzaW9uPjkuNDQwMjwvbzpWZXJzaW9uPgotIDwvbzpEb2N1bWVudFByb3BlcnRpZXM+Ci08L3htbD48IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8dzpXb3JkRG9jdW1lbnQ+Ci0gIDx3OlRyYWNrUmV2aXNpb25zLz4KLSA8L3c6V29yZERvY3VtZW50PgotPC94bWw+PCFbZW5kaWZdLS0+Ci08c3R5bGU+Ci08IS0tCi0gLyogRm9udCBEZWZpbml0aW9ucyAqLwotQGZvbnQtZmFjZQotCXtmb250LWZhbWlseTpUYWhvbWE7Ci0JcGFub3NlLTE6MiAxMSA2IDQgMyA1IDQgNCAyIDQ7Ci0JbXNvLWZvbnQtY2hhcnNldDowOwotCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOwotCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOwotCW1zby1mb250LXNpZ25hdHVyZTo1NTM2Nzk0OTUgLTIxNDc0ODM2NDggOCAwIDY2MDQ3IDA7fQotIC8qIFN0eWxlIERlZmluaXRpb25zICovCi1wLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsCi0Je21zby1zdHlsZS1wYXJlbnQ6IiI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZToxMi4wcHQ7Ci0JZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotcAotCXttYXJnaW4tcmlnaHQ6MGluOwotCW1zby1tYXJnaW4tdG9wLWFsdDphdXRvOwotCW1zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvOwotCW1hcmdpbi1sZWZ0OjBpbjsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wLkJhbGxvb25UZXh0LCBsaS5CYWxsb29uVGV4dCwgZGl2LkJhbGxvb25UZXh0Ci0Je21zby1zdHlsZS1uYW1lOiJCYWxsb29uIFRleHQiOwotCW1hcmdpbjowaW47Ci0JbWFyZ2luLWJvdHRvbTouMDAwMXB0OwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6OC4wcHQ7Ci0JZm9udC1mYW1pbHk6VGFob21hOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLUBwYWdlIFNlY3Rpb24xCi0Je3NpemU6OC41aW4gMTEuMGluOwotCW1hcmdpbjoxLjBpbiAxLjI1aW4gMS4waW4gMS4yNWluOwotCW1zby1oZWFkZXItbWFyZ2luOi41aW47Ci0JbXNvLWZvb3Rlci1tYXJnaW46LjVpbjsKLQltc28tcGFwZXItc291cmNlOjA7fQotZGl2LlNlY3Rpb24xCi0Je3BhZ2U6U2VjdGlvbjE7fQotLS0+Ci08L3N0eWxlPgotPC9oZWFkPgotCi08Ym9keSBsYW5nPUVOLVVTIHN0eWxlPSd0YWItaW50ZXJ2YWw6LjVpbic+Ci0KLTxkaXYgY2xhc3M9U2VjdGlvbjE+Ci0KLTxwIGFsaWduPWNlbnRlciBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxiPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMDwvYj4KLTwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUgotVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoJnF1b3Q7QUdSRUVNRU5UJnF1b3Q7KS4gQU5ZIFVTRSwKLVJFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRQotT0YgVEhJUyBBR1JFRU1FTlQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4xLiBERUZJTklUSU9OUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dGlvbiZxdW90OyBtZWFuczo8L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWluIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uCi1kaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kPGJyIGNsZWFyPWxlZnQ+Ci1iKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWNoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOzwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPndoZXJlCi1zdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkCi1ieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uICdvcmlnaW5hdGVzJyBmcm9tIGEgQ29udHJpYnV0b3IKLWlmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uCi1zdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUKLVByb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbgotd2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZQotd29ya3Mgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRvciZxdW90OyBtZWFucyBhbnkgcGVyc29uIG9yCi1lbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0xpY2Vuc2VkIFBhdGVudHMgJnF1b3Q7IG1lYW4gcGF0ZW50Ci1jbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZQotb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1Byb2dyYW0mcXVvdDsgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMKLWRpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1JlY2lwaWVudCZxdW90OyBtZWFucyBhbnlvbmUgd2hvCi1yZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4yLiBHUkFOVCBPRiBSSUdIVFM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudAotYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bzxzcGFuCi1zdHlsZT0nY29sb3I6cmVkJz4gPC9zcGFuPnJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseQotZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2gKLUNvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZQotZm9ybS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQotU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cwotUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLDxzcGFuIHN0eWxlPSdjb2xvcjpncmVlbic+IDwvc3Bhbj5yb3lhbHR5LWZyZWUKLXBhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQKLWFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZQotY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24KLW9mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkCi1ieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbgotdG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0bwotYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcwotbGljZW5zZWQgaGVyZXVuZGVyLiA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5jKQotUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cwotQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IKLXRoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkKLXJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudAotZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbAotcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZAotbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkKLXRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsCi1pZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlCi10aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlCi1kaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+ZCkKLUVhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0Ci1yaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluCi10aGlzIEFncmVlbWVudC4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjMuIFJFUVVJUkVNRU5UUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkEgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZQotUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6PC9zcGFuPgotPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1pdHMgbGljZW5zZSBhZ3JlZW1lbnQ6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWVmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQKLWNvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUKLWFuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5Ci1hbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7IDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywKLWluY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2gKLWFzIGxvc3QgcHJvZml0czsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWlpKQotc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdAotQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPml2KQotc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZAotaW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYQotbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLjxzcGFuIHN0eWxlPSdjb2xvcjpibHVlJz4gPC9zcGFuPjwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5XaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZQotY29kZSBmb3JtOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpIGEKLWNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkKLWNvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZQotb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3MKLXN1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT048L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkKLWFjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMKLWFuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlCi1vZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwKLXByb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwKLWxpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgmcXVvdDtDb21tZXJjaWFsCi1Db250cmlidXRvciZxdW90OykgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlcgotQ29udHJpYnV0b3IgKCZxdW90O0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnF1b3Q7KSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kCi1jb3N0cyAoY29sbGVjdGl2ZWx5ICZxdW90O0xvc3NlcyZxdW90OykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyCi1sZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0bwotdGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbgotY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKLW9mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcwotcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyCi10byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCi10byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZAotYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUKLWluIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQotY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZAotd2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMKLXNlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZQotb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYQotY291cnQgcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz41LiBOTyBXQVJSQU5UWTwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKLUFHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsCi1XSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCi1NRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseQotcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUKLVByb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMKLUFncmVlbWVudCAsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywKLWNvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yCi1lcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SCi1BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLShJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi1PRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORwotTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YKLVRIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YKLVRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz43LiBHRU5FUkFMPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkCi1vciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvcgotZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0Ci1mdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZQotbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24KLWFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkKLWFsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGgKLW90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaAotUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZQotc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudAotc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IKLWNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZQotcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MKLXJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZAotZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwKLVJlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieQotUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUKLWNvcGllcyBvZiB0aGlzIEFncmVlbWVudCwgYnV0IGluIG9yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcwotY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50Ci1TdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YKLXRoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzCi10aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsCi1BZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0bwotc2VydmUgYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uCi1vZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0KLShpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mCi10aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQotKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZAotaW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0bwotdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIKLWV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKLWV4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQotU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZgotQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzCi1BZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzCi1pdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uPC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbD48IVtpZiAhc3VwcG9ydEVtcHR5UGFyYXNdPiZuYnNwOzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvcD4KLQotPC9kaXY+Ci0KLTwvYm9keT4KLQotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c190ZXN0cy5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c190ZXN0cy5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjE4ZTY4YS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdGVzdHMuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgZmVhdHVyZS5wcm9wZXJ0aWVzCi0jIGNvbnRhaW5zIGV4dGVybmFsaXplZCBzdHJpbmdzIGZvciBmZWF0dXJlLnhtbAotIyAiJWZvbyIgaW4gZmVhdHVyZS54bWwgY29ycmVzcG9uZHMgdG8gdGhlIGtleSAiZm9vIiBpbiB0aGlzIGZpbGUKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgVGhpcyBmaWxlIHNob3VsZCBiZSB0cmFuc2xhdGVkLgotCi0jICJmZWF0dXJlTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBmZWF0dXJlCi1mZWF0dXJlTmFtZT1XU1QgV2ViIFNlcnZpY2VzIFRlc3RzCi0KLSMgInByb3ZpZGVyTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBjb21wYW55IHRoYXQgcHJvdmlkZXMgdGhlIGZlYXR1cmUKLXByb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZwotCi0jICJ1cGRhdGVTaXRlTmFtZSIgcHJvcGVydHkgLSBsYWJlbCBmb3IgdGhlIHVwZGF0ZSBzaXRlCi11cGRhdGVTaXRlTmFtZT1UaGUgRWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0gKFdUUCkgUHJvamVjdCB1cGRhdGUgc2l0ZQotCi0jICJkZXNjcmlwdGlvbiIgcHJvcGVydHkgLSBkZXNjcmlwdGlvbiBvZiB0aGUgZmVhdHVyZQotZGVzY3JpcHRpb249V1NUIFdlYiBzZXJ2aWNlcyB0ZXN0cwotCi0jICJjb3B5cmlnaHQiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIENvcHlyaWdodCIKLWNvcHlyaWdodD1cCi1Db3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuXG5cCi1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzXG5cCi1hcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjBcblwKLXdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0XG5cCi1odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbFxuXAotXG5cCi1Db250cmlidXRvcnM6XG5cCi0gICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uXG4KLSMjIyMjIyMjIyMjIyMjIyMgZW5kIG9mIGNvcHlyaWdodCBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyAibGljZW5zZVVSTCIgcHJvcGVydHkgLSBVUkwgb2YgdGhlICJGZWF0dXJlIExpY2Vuc2UiCi0jIGRvIG5vdCB0cmFuc2xhdGUgdmFsdWUgLSBqdXN0IGNoYW5nZSB0byBwb2ludCB0byBhIGxvY2FsZS1zcGVjaWZpYyBIVE1MIHBhZ2UKLWxpY2Vuc2VVUkw9bGljZW5zZS5odG1sCi0KLSMgImxpY2Vuc2UiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIExpY2Vuc2UiCi0jIHNob3VsZCBiZSBwbGFpbiB0ZXh0IHZlcnNpb24gb2YgbGljZW5zZSBhZ3JlZW1lbnQgcG9pbnRlZCB0byBiZSAibGljZW5zZVVSTCIKLWxpY2Vuc2U9XAotRUNMSVBTRSBGT1VOREFUSU9OIFNPRlRXQVJFIFVTRVIgQUdSRUVNRU5UXG5cCi1KdW5lIDA2LCAyMDA3XG5cCi1cblwKLVVzYWdlIE9mIENvbnRlbnRcblwKLVxuXAotVEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUlxuXAotT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUyAoQ09MTEVDVElWRUxZICJDT05URU5UIikuXG5cCi1VU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVNcblwKLUFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUlxuXAotTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVVxuXAotQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVFxuXAotQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFNcblwKLU9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFXG5cCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TXG5cCi1PRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRFxuXAotQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULlxuXAotXG5cCi1BcHBsaWNhYmxlIExpY2Vuc2VzXG5cCi1cblwKLVVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uXG5cCi1pcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpY1xuXAotTGljZW5zZSBWZXJzaW9uIDEuMCAoIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXNcblwKLUNvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLlxuXAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuXG5cCi1cblwKLUNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLFxuXAotZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTXG5cCi1yZXBvc2l0b3J5ICgiUmVwb3NpdG9yeSIpIGluIENWUyBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZVxuXAotYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgiRG93bmxvYWRzIikuXG5cCi1cblwKLSAgIC0gQ29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZyxcblwKLSAgICAgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCJQbHVnLWlucyIpLFxuXAotICAgICBwbHVnLWluIGZyYWdtZW50cyAoIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLlxuXAotICAgLSBFYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmE/IEFSY2hpdmUpXG5cCi0gICAgIGluIGEgZGlyZWN0b3J5IG5hbWVkICJwbHVnaW5zIi5cblwKLSAgIC0gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuXG5cCi0gICAgIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICJmZWF0dXJlcyIuXG5cCi0gICAgIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvblxuXAotICAgICBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuXG5cCi0gICAtIEZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlc1xuXAotICAgICBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy5cblwKLVxuXAotRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIEZpbGVzIG5hbWVkXG5cCi0iZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZlxuXAotSW5jbHVkZWQgRmVhdHVyZXMuXG5cCi1cblwKLVRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmVcblwKLWNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAiYWJvdXQuaHRtbCIgKCJBYm91dHMiKS4gVGhlIHRlcm1zIGFuZFxuXAotY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kIEluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWRcblwKLWluIGZpbGVzIG5hbWVkICJsaWNlbnNlLmh0bWwiICgiRmVhdHVyZSBMaWNlbnNlcyIpLiBBYm91dHMgYW5kIEZlYXR1cmVcblwKLUxpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGVcblwKLWluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOlxuXAotXG5cCi0gICAtIFRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeVxuXAotICAgLSBQbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3Rvcmllc1xuXAotICAgLSBJbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzXG5cCi0gICAtIFN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICJzcmMiIG9mIGNlcnRhaW4gUGx1Zy1pbnNcblwKLSAgIC0gRmVhdHVyZSBkaXJlY3Rvcmllc1xuXAotXG5cCi1Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlXG5cCi1FY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCJGZWF0dXJlIFVwZGF0ZVxuXAotTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zXG5cCi1JbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdVxuXAotd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm1cblwKLXlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW5cblwKLXRoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIuIFN1Y2ggQWJvdXRzLFxuXAotRmVhdHVyZSBMaWNlbnNlcyBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kXG5cCi1jb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXJcblwKLXVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgZGlyZWN0b3J5LlxuXAotXG5cCi1USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVJcblwKLVRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLlxuXAotU09NRSBPRiBUSEVTRSBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOlxuXAotXG5cCi0gICAgLSBDb21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbClcblwKLSAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFKVxuXAotICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wKVxuXAotICAgIC0gSUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sKVxuXAotICAgIC0gTWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwpXG5cCi0gICAgLSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sKVxuXAotICAgIC0gQ29tbW9uIERldmVsb3BtZW50IGFuZCBEaXN0cmlidXRpb24gTGljZW5zZSAoQ0RETCkgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwpXG5cCi1cblwKLUlUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1JcblwKLVRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlXG5cCi1pcyBwcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9uc1xuXAotZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LlxuXAotXG5cCi1DcnlwdG9ncmFwaHlcblwKLVxuXAotQ29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlXG5cCi1jdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsXG5cCi1hbmQvb3IgcmUtZXhwb3J0IHRvIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFXG5cCi11c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cyxcblwKLXJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIG9yIHVzZSxcblwKLWFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLlxuXAotXG5cCi1KYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC5cbgotIyMjIyMjIyMjIyMgZW5kIG9mIGxpY2Vuc2UgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdGVzdHMuZmVhdHVyZS9mZWF0dXJlLnhtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c190ZXN0cy5mZWF0dXJlL2ZlYXR1cmUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNmMyZjIxLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c190ZXN0cy5mZWF0dXJlL2ZlYXR1cmUueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxmZWF0dXJlCi0gICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzX3Rlc3RzLmZlYXR1cmUiCi0gICAgICBsYWJlbD0iJWZlYXR1cmVOYW1lIgotICAgICAgdmVyc2lvbj0iMi4xLjAucXVhbGlmaWVyIgotICAgICAgcHJvdmlkZXItbmFtZT0iJXByb3ZpZGVyTmFtZSI+Ci0KLSAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICVkZXNjcmlwdGlvbgotICAgPC9kZXNjcmlwdGlvbj4KLQotICAgPGNvcHlyaWdodD4KLSAgICAgICVjb3B5cmlnaHQKLSAgIDwvY29weXJpZ2h0PgotCi0gICA8bGljZW5zZSB1cmw9ImxpY2Vuc2UuaHRtbCI+Ci0gICAgICAlbGljZW5zZQotICAgPC9saWNlbnNlPgotCi0gICA8dXJsPgotICAgICAgPHVwZGF0ZSBsYWJlbD0iJXVwZGF0ZVNpdGVOYW1lIiB1cmw9Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy93ZWJ0b29scy91cGRhdGVzLyIvPgotICAgPC91cmw+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3MudGVzdHMiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZSIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudWkiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c2kudGVzdHMiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotPC9mZWF0dXJlPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Rlc3RzLmZlYXR1cmUvbGljZW5zZS5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3Rlc3RzLmZlYXR1cmUvbGljZW5zZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjQ0NTk4Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c190ZXN0cy5mZWF0dXJlL2xpY2Vuc2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczYy5vcmcvVFIvMTk5OS9SRUMtaHRtbDQwMS0xOTk5MTIyNC9sb29zZS5kdGQiPgotPCEtLSBzYXZlZCBmcm9tIHVybD0oMDA0NClodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC9ub3RpY2UuaHRtbCAtLT4KLTxIVE1MPjxIRUFEPjxUSVRMRT5FY2xpcHNlLm9yZyBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvVElUTEU+Ci08TUVUQSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Ci08TUVUQSBjb250ZW50PSJNU0hUTUwgNi4wMC4yODAwLjE0NzkiIG5hbWU9R0VORVJBVE9SPjwvSEVBRD4KLTxCT0RZIGxhbmc9RU4tVVMgdkxpbms9cHVycGxlIGxpbms9Ymx1ZT4KLTxIMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L0gyPgotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLTxIMz5Vc2FnZSBPZiBDb250ZW50PC9IMz4KLTxQPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiAKLUFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS4gVVNFIE9GIAotVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCAKLUJFTE9XLiBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgCi1CWSBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgCi1BR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgCi1BUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLCBUSEVOIFlPVSAKLU1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvUD4KLTxIMz5BcHBsaWNhYmxlIExpY2Vuc2VzPC9IMz4KLTxQPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSAKLUZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSAKLVB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyAKLUNvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxBIAotaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci08UD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgCi1kb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlMgcmVwb3NpdG9yeSAKLSgiUmVwb3NpdG9yeSIpIGluIENWUyBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgCi1hcmNoaXZlcyAoIkRvd25sb2FkcyIpLjwvUD4KLTxQPkNvbnRlbnQgbWF5IGJlIGFwcG9ydGlvbmVkIGludG8gcGx1Zy1pbnMgKCJQbHVnLWlucyIpLCBwbHVnLWluIGZyYWdtZW50cyAKLSgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuIEEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSAKLVBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuIEZpbGVzIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IAotY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgCi1hc3NvY2lhdGVkIHdpdGggYSBGZWF0dXJlLiBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIGFyZSBsb2NhdGVkIGluIGRpcmVjdG9yaWVzIAotbmFtZWQgInBsdWdpbnMiIGFuZCBGZWF0dXJlcyBhcmUgbG9jYXRlZCBpbiBkaXJlY3RvcmllcyBuYW1lZCAiZmVhdHVyZXMiLjwvUD4KLTxQPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBGaWxlcyBuYW1lZCAKLSJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIAotRmVhdHVyZXMuPC9QPgotPFA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgCi1pbiBmaWxlcyBuYW1lZCAiYWJvdXQuaHRtbCIgKCJBYm91dHMiKS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyAKLUZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJsaWNlbnNlLmh0bWwiIAotKCJGZWF0dXJlIExpY2Vuc2VzIikuIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgCi1kaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyAKLWxvY2F0aW9uczo8L1A+Ci08VUw+Ci0gIDxMST5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnkgCi0gIDxMST5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllcyAKLSAgPExJPlN1YmRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWlucyAKLSAgPExJPkZlYXR1cmUgZGlyZWN0b3JpZXMgPC9MST48L1VMPgotPFA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIAotdXNpbmcgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgVXBkYXRlIAotTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zIEluY2x1ZGVkIAotRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgCi1hbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yIGluZm9ybSB5b3Ugd2hlcmUgeW91IGNhbiAKLWxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiAKLWZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiLiBTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcyBhbmQgRmVhdHVyZSAKLVVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIAotYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCAKLWRpcmVjdG9yeS48L1A+Ci08UD5USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCAKLU9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gU09NRSBPRiBUSEVTRSAKLU9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9QPgotPFVMPgotICA8TEk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvQT4pIAotCi0gIDxMST5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9BPikgCi0KLSAgPExJPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvQT4pIAotCi0gIDxMST5JQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sIj5odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbDwvQT4pIAotCi0gIDxMST5NZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9BPikgCi0KLSAgPExJPk1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L0E+KSAKLSAgPC9MST4KLSAgICAKLSAgPExJPkNvbW1vbiBEZXZlbG9wbWVudCBhbmQgRGlzdHJpYnV0aW9uIExpY2Vuc2UgKENEREwpIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbCI+aHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sKTwvQT4KLSAgPC9MST4KLTwvVUw+Ci08UD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIAotVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgCi1wcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgCi1jb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L1A+Ci08SDM+Q3J5cHRvZ3JhcGh5PC9IMz4KLTxQPkNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZSAKLWN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIAotcmUtZXhwb3J0IHRvIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFIHVzaW5nIGFueSAKLWVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyAKLWNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIAotdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvUD48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvLmN2c2lnbm9yZSBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxNDQ4N2MuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWJ1aWxkLnhtbApkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvLnByb2plY3QgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzAzYThiMC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZU5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmNDc2OTQuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotYmluLmluY2x1ZGVzID0gZmVhdHVyZS54bWwsXAotICAgICAgICAgICAgICAgZWNsaXBzZV91cGRhdGVfMTIwLmpwZyxcCi0gICAgICAgICAgICAgICBlcGwtdjEwLmh0bWwsXAotICAgICAgICAgICAgICAgbGljZW5zZS5odG1sLFwKLSAgICAgICAgICAgICAgIGZlYXR1cmUucHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmZGY3MDguLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL2VwbC12MTAuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL2VwbC12MTAuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ0YjE5Ni4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9lcGwtdjEwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMjggKzAsMCBAQAotPGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIgoteG1sbnM6dz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIKLXhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4KLQotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4KLTxtZXRhIG5hbWU9UHJvZ0lkIGNvbnRlbnQ9V29yZC5Eb2N1bWVudD4KLTxtZXRhIG5hbWU9R2VuZXJhdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgotPG1ldGEgbmFtZT1PcmlnaW5hdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgotPGxpbmsgcmVsPUZpbGUtTGlzdAotaHJlZj0iLi9FY2xpcHNlJTIwRVBMJTIwMjAwM18xMV8xMCUyMEZpbmFsX2ZpbGVzL2ZpbGVsaXN0LnhtbCI+Ci08dGl0bGU+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIFZlcnNpb24gMS4wPC90aXRsZT4KLTwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgotIDxvOkRvY3VtZW50UHJvcGVydGllcz4KLSAgPG86UmV2aXNpb24+MjwvbzpSZXZpc2lvbj4KLSAgPG86VG90YWxUaW1lPjM8L286VG90YWxUaW1lPgotICA8bzpDcmVhdGVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkNyZWF0ZWQ+Ci0gIDxvOkxhc3RTYXZlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpMYXN0U2F2ZWQ+Ci0gIDxvOlBhZ2VzPjQ8L286UGFnZXM+Ci0gIDxvOldvcmRzPjE2MjY8L286V29yZHM+Ci0gIDxvOkNoYXJhY3RlcnM+OTI3MDwvbzpDaGFyYWN0ZXJzPgotICAgPG86TGluZXM+Nzc8L286TGluZXM+Ci0gIDxvOlBhcmFncmFwaHM+MTg8L286UGFyYWdyYXBocz4KLSAgPG86Q2hhcmFjdGVyc1dpdGhTcGFjZXM+MTEzODQ8L286Q2hhcmFjdGVyc1dpdGhTcGFjZXM+Ci0gIDxvOlZlcnNpb24+OS40NDAyPC9vOlZlcnNpb24+Ci0gPC9vOkRvY3VtZW50UHJvcGVydGllcz4KLTwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgotIDx3OldvcmREb2N1bWVudD4KLSAgPHc6VHJhY2tSZXZpc2lvbnMvPgotIDwvdzpXb3JkRG9jdW1lbnQ+Ci08L3htbD48IVtlbmRpZl0tLT4KLTxzdHlsZT4KLTwhLS0KLSAvKiBGb250IERlZmluaXRpb25zICovCi1AZm9udC1mYWNlCi0Je2ZvbnQtZmFtaWx5OlRhaG9tYTsKLQlwYW5vc2UtMToyIDExIDYgNCAzIDUgNCA0IDIgNDsKLQltc28tZm9udC1jaGFyc2V0OjA7Ci0JbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6c3dpc3M7Ci0JbXNvLWZvbnQtcGl0Y2g6dmFyaWFibGU7Ci0JbXNvLWZvbnQtc2lnbmF0dXJlOjU1MzY3OTQ5NSAtMjE0NzQ4MzY0OCA4IDAgNjYwNDcgMDt9Ci0gLyogU3R5bGUgRGVmaW5pdGlvbnMgKi8KLXAuTXNvTm9ybWFsLCBsaS5Nc29Ob3JtYWwsIGRpdi5Nc29Ob3JtYWwKLQl7bXNvLXN0eWxlLXBhcmVudDoiIjsKLQltYXJnaW46MGluOwotCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wCi0Je21hcmdpbi1yaWdodDowaW47Ci0JbXNvLW1hcmdpbi10b3AtYWx0OmF1dG87Ci0JbXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87Ci0JbWFyZ2luLWxlZnQ6MGluOwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6MTIuMHB0OwotCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLXAuQmFsbG9vblRleHQsIGxpLkJhbGxvb25UZXh0LCBkaXYuQmFsbG9vblRleHQKLQl7bXNvLXN0eWxlLW5hbWU6IkJhbGxvb24gVGV4dCI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZTo4LjBwdDsKLQlmb250LWZhbWlseTpUYWhvbWE7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotQHBhZ2UgU2VjdGlvbjEKLQl7c2l6ZTo4LjVpbiAxMS4waW47Ci0JbWFyZ2luOjEuMGluIDEuMjVpbiAxLjBpbiAxLjI1aW47Ci0JbXNvLWhlYWRlci1tYXJnaW46LjVpbjsKLQltc28tZm9vdGVyLW1hcmdpbjouNWluOwotCW1zby1wYXBlci1zb3VyY2U6MDt9Ci1kaXYuU2VjdGlvbjEKLQl7cGFnZTpTZWN0aW9uMTt9Ci0tLT4KLTwvc3R5bGU+Ci08L2hlYWQ+Ci0KLTxib2R5IGxhbmc9RU4tVVMgc3R5bGU9J3RhYi1pbnRlcnZhbDouNWluJz4KLQotPGRpdiBjbGFzcz1TZWN0aW9uMT4KLQotPHAgYWxpZ249Y2VudGVyIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcic+PGI+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIHYgMS4wPC9iPgotPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSCi1USEUgVEVSTVMgT0YgVEhJUyBFQ0xJUFNFIFBVQkxJQyBMSUNFTlNFICgmcXVvdDtBR1JFRU1FTlQmcXVvdDspLiBBTlkgVVNFLAotUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBDT05TVElUVVRFUyBSRUNJUElFTlQnUyBBQ0NFUFRBTkNFCi1PRiBUSElTIEFHUkVFTUVOVC48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjEuIERFRklOSVRJT05TPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0aW9uJnF1b3Q7IG1lYW5zOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaW4gdGhlIGNhc2Ugb2YgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IsIHRoZSBpbml0aWFsIGNvZGUgYW5kIGRvY3VtZW50YXRpb24KLWRpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhbmQ8YnIgY2xlYXI9bGVmdD4KLWIpIGluIHRoZSBjYXNlIG9mIGVhY2ggc3Vic2VxdWVudCBDb250cmlidXRvcjo8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQotY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCi1hZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+d2hlcmUKLXN1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tIGFuZCBhcmUgZGlzdHJpYnV0ZWQKLWJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24gJ29yaWdpbmF0ZXMnIGZyb20gYSBDb250cmlidXRvcgotaWYgaXQgd2FzIGFkZGVkIHRvIHRoZSBQcm9ncmFtIGJ5IHN1Y2ggQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZSBhY3Rpbmcgb24KLXN1Y2ggQ29udHJpYnV0b3IncyBiZWhhbGYuIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvIHRoZQotUHJvZ3JhbSB3aGljaDogKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uCi13aXRoIHRoZSBQcm9ncmFtIHVuZGVyIHRoZWlyIG93biBsaWNlbnNlIGFncmVlbWVudCwgYW5kIChpaSkgYXJlIG5vdCBkZXJpdmF0aXZlCi13b3JrcyBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dG9yJnF1b3Q7IG1lYW5zIGFueSBwZXJzb24gb3IKLWVudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7TGljZW5zZWQgUGF0ZW50cyAmcXVvdDsgbWVhbiBwYXRlbnQKLWNsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2ggYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlCi1vciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UHJvZ3JhbSZxdW90OyBtZWFucyB0aGUgQ29udHJpYnV0aW9ucwotZGlzdHJpYnV0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50Ljwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UmVjaXBpZW50JnF1b3Q7IG1lYW5zIGFueW9uZSB3aG8KLXJlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjIuIEdSQU5UIE9GIFJJR0hUUzwvc3Bhbj48L2I+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLVN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50Ci1hIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvPHNwYW4KLXN0eWxlPSdjb2xvcjpyZWQnPiA8L3NwYW4+cmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5Ci1kaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaAotQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlCi1mb3JtLjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzCi1SZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsPHNwYW4gc3R5bGU9J2NvbG9yOmdyZWVuJz4gPC9zcGFuPnJveWFsdHktZnJlZQotcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydAotYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlCi1jb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbgotb2YgdGhlIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQKLWJ5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uCi10byBiZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvCi1hbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzCi1saWNlbnNlZCBoZXJldW5kZXIuIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmMpCi1SZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzCi1Db250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvcgotdGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eQotcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50Ci1mb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsCi1wcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kCi1saWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eQotdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwKLWlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUKLXRoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnQncyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUKLWRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5kKQotRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMgc3VmZmljaWVudCBjb3B5cmlnaHQKLXJpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZSBzZXQgZm9ydGggaW4KLXRoaXMgQWdyZWVtZW50LiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+My4gUkVRVUlSRU1FTlRTPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlCi1Qcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDo8L3NwYW4+Ci08L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKLWl0cyBsaWNlbnNlIGFncmVlbWVudDo8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQotZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZAotY29uZGl0aW9ucywgZXhwcmVzcyBhbmQgaW1wbGllZCwgaW5jbHVkaW5nIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiB0aXRsZQotYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkKLWFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCi1lZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzLAotaW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaAotYXMgbG9zdCBwcm9maXRzOyA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paWkpCi1zdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSB0aGF0Ci1Db250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eTsgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aXYpCi1zdGF0ZXMgdGhhdCBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gc3VjaCBDb250cmlidXRvciwgYW5kCi1pbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhCi1tZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuPHNwYW4gc3R5bGU9J2NvbG9yOmJsdWUnPiA8L3NwYW4+PC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPldoZW4gdGhlIFByb2dyYW0gaXMgbWFkZSBhdmFpbGFibGUgaW4gc291cmNlCi1jb2RlIGZvcm06PC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikgYQotY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29udHJpYnV0b3JzIG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueQotY29weXJpZ2h0IG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlCi1vcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cwotc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz40LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTjwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heQotYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycwotYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2UKLW9mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbAotcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbAotbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUKLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2ggQ29udHJpYnV0b3IgKCZxdW90O0NvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yJnF1b3Q7KSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyCi1Db250cmlidXRvciAoJnF1b3Q7SW5kZW1uaWZpZWQgQ29udHJpYnV0b3ImcXVvdDspIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQKLWNvc3RzIChjb2xsZWN0aXZlbHkgJnF1b3Q7TG9zc2VzJnF1b3Q7KSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIKLWxlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvCi10aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluCi1jb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdAotb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzCi1yZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIKLXRvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbAotQ29udHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IKLXRvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kCi1hbnkgcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZQotaW4gYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Rm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUKLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEKLUNvbW1lcmNpYWwgQ29udHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBDb250cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlCi1jbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kCi13YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IncyByZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcwotc2VjdGlvbiwgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3Igd291bGQgaGF2ZSB0byBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlCi1vdGhlciBDb250cmlidXRvcnMgcmVsYXRlZCB0byB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhCi1jb3VydCByZXF1aXJlcyBhbnkgb3RoZXIgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUKLUNvbW1lcmNpYWwgQ29udHJpYnV0b3IgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjUuIE5PIFdBUlJBTlRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTiAmcXVvdDtBUyBJUyZxdW90OyBCQVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywKLVdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwKLU1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5Ci1yZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZQotUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcwotQWdyZWVtZW50ICwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLAotY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IKLWVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ni4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFk8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCi1BR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IKLUFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLU9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCi1ORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRgotVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRgotVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjcuIEdFTkVSQUw8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQKLW9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yCi1lbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQKLWZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlCi1taW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbgotYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KQotYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbSBpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aAotb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudCdzIHBhdGVudChzKSwgdGhlbiBzdWNoCi1SZWNpcGllbnQncyByaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlCi1zdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BbGwgUmVjaXBpZW50J3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50Ci1zaGFsbCB0ZXJtaW5hdGUgaWYgaXQgZmFpbHMgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvcgotY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlCi1wZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnQncwotcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRlcm1pbmF0ZSwgUmVjaXBpZW50IGFncmVlcyB0byBjZWFzZSB1c2UgYW5kCi1kaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5IHByYWN0aWNhYmxlLiBIb3dldmVyLAotUmVjaXBpZW50J3Mgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5Ci1SZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlIFByb2dyYW0gc2hhbGwgY29udGludWUgYW5kIHN1cnZpdmUuIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZQotY29waWVzIG9mIHRoaXMgQWdyZWVtZW50LCBidXQgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzCi1jb3B5cmlnaHRlZCBhbmQgbWF5IG9ubHkgYmUgbW9kaWZpZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuIFRoZSBBZ3JlZW1lbnQKLVN0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZgotdGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCBoYXMKLXRoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgdGhlIGluaXRpYWwKLUFncmVlbWVudCBTdGV3YXJkLiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvCi1zZXJ2ZSBhcyB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24KLW9mIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbQotKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZgotdGhlIEFncmVlbWVudCBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCi0oaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkCi1pbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvCi10aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlcgotZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdAotZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlCi1TdGF0ZSBvZiBOZXcgWW9yayBhbmQgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mCi1BbWVyaWNhLiBObyBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMKLUFncmVlbWVudCBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMKLWl0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi48L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsPjwhW2lmICFzdXBwb3J0RW1wdHlQYXJhc10+Jm5ic3A7PCFbZW5kaWZdPjxvOnA+PC9vOnA+PC9wPgotCi08L2Rpdj4KLQotPC9ib2R5PgotCi08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTYwMGUwLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE0NSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBmZWF0dXJlLnByb3BlcnRpZXMKLSMgY29udGFpbnMgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZm9yIGZlYXR1cmUueG1sCi0jICIlZm9vIiBpbiBmZWF0dXJlLnhtbCBjb3JyZXNwb25kcyB0byB0aGUga2V5ICJmb28iIGluIHRoaXMgZmlsZQotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQotIyBUaGlzIGZpbGUgc2hvdWxkIGJlIHRyYW5zbGF0ZWQuCi0KLSMgImZlYXR1cmVOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGZlYXR1cmUKLWZlYXR1cmVOYW1lPVdTVCBXZWIgU2VydmljZXMgVUkKLQotIyAicHJvdmlkZXJOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGNvbXBhbnkgdGhhdCBwcm92aWRlcyB0aGUgZmVhdHVyZQotcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCi0KLSMgInVwZGF0ZVNpdGVOYW1lIiBwcm9wZXJ0eSAtIGxhYmVsIGZvciB0aGUgdXBkYXRlIHNpdGUKLXVwZGF0ZVNpdGVOYW1lPVRoZSBFY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybSAoV1RQKSBQcm9qZWN0IHVwZGF0ZSBzaXRlCi0KLSMgImRlc2NyaXB0aW9uIiBwcm9wZXJ0eSAtIGRlc2NyaXB0aW9uIG9mIHRoZSBmZWF0dXJlCi1kZXNjcmlwdGlvbj1XZWIgU2VydmljZXMgVUkgdG9vbHMuCi0KLSMgImNvcHlyaWdodCIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgQ29weXJpZ2h0IgotY29weXJpZ2h0PVwKLUNvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy5cblwKLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHNcblwKLWFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMFxuXAotd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXRcblwKLWh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sXG5cCi1cblwKLUNvbnRyaWJ1dG9yczpcblwKLSAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb25cbgotIyMjIyMjIyMjIyMjIyMjIyBlbmQgb2YgY29weXJpZ2h0IHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jICJsaWNlbnNlVVJMIiBwcm9wZXJ0eSAtIFVSTCBvZiB0aGUgIkZlYXR1cmUgTGljZW5zZSIKLSMgZG8gbm90IHRyYW5zbGF0ZSB2YWx1ZSAtIGp1c3QgY2hhbmdlIHRvIHBvaW50IHRvIGEgbG9jYWxlLXNwZWNpZmljIEhUTUwgcGFnZQotbGljZW5zZVVSTD1saWNlbnNlLmh0bWwKLQotIyAibGljZW5zZSIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgTGljZW5zZSIKLSMgc2hvdWxkIGJlIHBsYWluIHRleHQgdmVyc2lvbiBvZiBsaWNlbnNlIGFncmVlbWVudCBwb2ludGVkIHRvIGJlICJsaWNlbnNlVVJMIgotbGljZW5zZT1cCi1FQ0xJUFNFIEZPVU5EQVRJT04gU09GVFdBUkUgVVNFUiBBR1JFRU1FTlRcblwKLUp1bmUgMDYsIDIwMDdcblwKLVxuXAotVXNhZ2UgT2YgQ29udGVudFxuXAotXG5cCi1USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SXG5cCi1PVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS5cblwKLVVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJU1xuXAotQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SXG5cCi1OT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VXG5cCi1BR1JFRSBUSEFUIFlPVVIgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UXG5cCi1BTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UU1xuXAotT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEVcblwKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlNcblwKLU9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEXG5cCi1CRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuXG5cCi1cblwKLUFwcGxpY2FibGUgTGljZW5zZXNcblwKLVxuXAotVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb25cblwKLWlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljXG5cCi1MaWNlbnNlIFZlcnNpb24gMS4wICgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpc1xuXAotQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuXG5cCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC5cblwKLVxuXAotQ29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsXG5cCi1kb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlNcblwKLXJlcG9zaXRvcnkgKCJSZXBvc2l0b3J5IikgaW4gQ1ZTIG1vZHVsZXMgKCJNb2R1bGVzIikgYW5kIG1hZGUgYXZhaWxhYmxlXG5cCi1hcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCJEb3dubG9hZHMiKS5cblwKLVxuXAotICAgLSBDb250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLFxuXAotICAgICBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoIlBsdWctaW5zIiksXG5cCi0gICAgIHBsdWctaW4gZnJhZ21lbnRzICgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuXG5cCi0gICAtIEVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YT8gQVJjaGl2ZSlcblwKLSAgICAgaW4gYSBkaXJlY3RvcnkgbmFtZWQgInBsdWdpbnMiLlxuXAotICAgLSBBIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC5cblwKLSAgICAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgImZlYXR1cmVzIi5cblwKLSAgICAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uXG5cCi0gICAgIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS5cblwKLSAgIC0gRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzXG5cCi0gICAgIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gRmlsZXMgbmFtZWRcblwKLSJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mXG5cCi1JbmNsdWRlZCBGZWF0dXJlcy5cblwKLVxuXAotVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZVxuXAotY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJhYm91dC5odG1sIiAoIkFib3V0cyIpLiBUaGUgdGVybXMgYW5kXG5cCi1jb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQgSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZFxuXAotaW4gZmlsZXMgbmFtZWQgImxpY2Vuc2UuaHRtbCIgKCJGZWF0dXJlIExpY2Vuc2VzIikuIEFib3V0cyBhbmQgRmVhdHVyZVxuXAotTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZVxuXAotaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6XG5cCi1cblwKLSAgIC0gVGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5XG5cCi0gICAtIFBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzXG5cCi0gICAtIEluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnNcblwKLSAgIC0gU3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWluc1xuXAotICAgLSBGZWF0dXJlIGRpcmVjdG9yaWVzXG5cCi1cblwKLU5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGVcblwKLUVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgVXBkYXRlXG5cCi1MaWNlbnNlIikgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2Vzcy4gSWYgdGhlIEZlYXR1cmUgY29udGFpbnNcblwKLUluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91XG5cCi13aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yIGluZm9ybVxuXAoteW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpblxuXAotdGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAiZmVhdHVyZS5wcm9wZXJ0aWVzIi4gU3VjaCBBYm91dHMsXG5cCi1GZWF0dXJlIExpY2Vuc2VzIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91clxuXAotdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCBkaXJlY3RvcnkuXG5cCi1cblwKLVRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUlxuXAotVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuXG5cCi1TT01FIE9GIFRIRVNFIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6XG5cCi1cblwKLSAgICAtIENvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sKVxuXAotICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UpXG5cCi0gICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjApXG5cCi0gICAgLSBJQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwpXG5cCi0gICAgLSBNZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbClcblwKLSAgICAtIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwpXG5cCi0gICAgLSBDb21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlIChDRERMKSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbClcblwKLVxuXAotSVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUlxuXAotVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VcblwKLWlzIHByb3ZpZGVkLCBwbGVhc2UgY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zXG5cCi1nb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuXG5cCi1cblwKLUNyeXB0b2dyYXBoeVxuXAotXG5cCi1Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmVcblwKLWN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSxcblwKLWFuZC9vciByZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkVcblwKLXVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLFxuXAotcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLFxuXAotYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuXG5cCi1cblwKLUphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLlxuCi0jIyMjIyMjIyMjIyBlbmQgb2YgbGljZW5zZSBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvZmVhdHVyZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjZWFmMzAuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvZmVhdHVyZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxmZWF0dXJlCi0gICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUiCi0gICAgICBsYWJlbD0iJWZlYXR1cmVOYW1lIgotICAgICAgdmVyc2lvbj0iMi4wLjEucXVhbGlmaWVyIgotICAgICAgcHJvdmlkZXItbmFtZT0iJXByb3ZpZGVyTmFtZSI+Ci0KLSAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICVkZXNjcmlwdGlvbgotICAgPC9kZXNjcmlwdGlvbj4KLQotICAgPGNvcHlyaWdodD4KLSAgICAgICVjb3B5cmlnaHQKLSAgIDwvY29weXJpZ2h0PgotCi0gICA8bGljZW5zZSB1cmw9IiVsaWNlbnNlVVJMIj4KLSAgICAgICVsaWNlbnNlCi0gICA8L2xpY2Vuc2U+Ci0KLSAgIDx1cmw+Ci0gICAgICA8dXBkYXRlIGxhYmVsPSIldXBkYXRlU2l0ZU5hbWUiIHVybD0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3dlYnRvb2xzL3VwZGF0ZXMvIi8+Ci0gICA8L3VybD4KLQotICAgPGluY2x1ZGVzCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzX3VzZXJkb2MuZmVhdHVyZSIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxpbmNsdWRlcwotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cmVxdWlyZXM+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lIiB2ZXJzaW9uPSIzLjIuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5oZWxwLmFwcHNlcnZlciIgdmVyc2lvbj0iMy4xLjEwMCIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZSIgdmVyc2lvbj0iMS4wLjEwMSIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYudWkiIHZlcnNpb249IjEuMC4xMDEiIG1hdGNoPSJlcXVpdmFsZW50Ii8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LndzIiB2ZXJzaW9uPSIxLjAuMTAwIiBtYXRjaD0iZXF1aXZhbGVudCIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC53cy5wYXJzZXIiIHZlcnNpb249IjEuMC4xMDAiIG1hdGNoPSJlcXVpdmFsZW50Ii8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LndzZGwiIHZlcnNpb249IjEuMS4wIiBtYXRjaD0iZXF1aXZhbGVudCIvPgotICAgICAgPGltcG9ydCBwbHVnaW49ImphdmF4LndzZGwiIHZlcnNpb249IjEuNC4wIiBtYXRjaD0iZXF1aXZhbGVudCIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5hcGFjaGUud3NpbDRqIiB2ZXJzaW9uPSIxLjAuMCIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcudWRkaTRqIiB2ZXJzaW9uPSIyLjAuNCIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuYXBhY2hlLmF4aXMiIHZlcnNpb249IjEuNC4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3JrcyIgdmVyc2lvbj0iMS4xLjAiIG1hdGNoPSJlcXVpdmFsZW50Ii8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLnVpIiB2ZXJzaW9uPSIxLjEuMCIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50IiB2ZXJzaW9uPSIxLjAuMTAwIiBtYXRjaD0iZXF1aXZhbGVudCIvPgotICAgICAgPGltcG9ydCBwbHVnaW49ImNvbS5pYm0uaWN1IiB2ZXJzaW9uPSIzLjQuNCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS51aSIgdmVyc2lvbj0iMy4yLjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UudWkuaWRlIiB2ZXJzaW9uPSIzLjIuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcyIgdmVyc2lvbj0iMy4yLjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuZW1mLmNvbW1vbiIgdmVyc2lvbj0iMi4yLjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlIiB2ZXJzaW9uPSIyLjIuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5nZWYiIHZlcnNpb249IjMuMi4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmpmYWNlIiB2ZXJzaW9uPSIzLjIuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5qZmFjZS50ZXh0IiB2ZXJzaW9uPSIzLjIuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS51aS5lZGl0b3JzIiB2ZXJzaW9uPSIzLjIuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS51aS52aWV3cyIgdmVyc2lvbj0iMy4yLjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UudWkud29ya2JlbmNoLnRleHRlZGl0b3IiIHZlcnNpb249IjMuMi4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC5zc2UuY29yZSIgdmVyc2lvbj0iMS4xLjAiIG1hdGNoPSJlcXVpdmFsZW50Ii8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aSIgdmVyc2lvbj0iMS4wLjEwMSIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyIiB2ZXJzaW9uPSIxLjEuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVpIiB2ZXJzaW9uPSIxLjEuMCIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUiIHZlcnNpb249IjEuMS4wIiBtYXRjaD0iZXF1aXZhbGVudCIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC54bWwudWkiIHZlcnNpb249IjEuMC4xMDAiIG1hdGNoPSJlcXVpdmFsZW50Ii8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UueHNkIiB2ZXJzaW9uPSIyLjIuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvcmUiIHZlcnNpb249IjEuMS4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC54c2QudWkiIHZlcnNpb249IjEuMi4wIiBtYXRjaD0iZXF1aXZhbGVudCIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmVtZi5lZGl0IiB2ZXJzaW9uPSIyLjIuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5lbWYuZWRpdC51aSIgdmVyc2lvbj0iMi4yLjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24iIHZlcnNpb249IjEuMS4wIiBtYXRjaD0iZXF1aXZhbGVudCIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24iIHZlcnNpb249IjEuMS4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nIiB2ZXJzaW9uPSIzLjIuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5sdGsudWkucmVmYWN0b3JpbmciIHZlcnNpb249IjMuMi4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5hcGFjaGUueGVyY2VzIiB2ZXJzaW9uPSIyLjguMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLnRhYmJlZCIgdmVyc2lvbj0iMy4yLjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52IiB2ZXJzaW9uPSIxLjAuMTAyIiBtYXRjaD0iZXF1aXZhbGVudCIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC53cy51aSIgdmVyc2lvbj0iMS4wLjEwMSIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zZWFyY2giIHZlcnNpb249IjMuMi4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmRlYnVnLmNvcmUiIHZlcnNpb249IjMuMi4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC53c2kiIHZlcnNpb249IjEuMC4xMDEiIG1hdGNoPSJlcXVpdmFsZW50Ii8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LmludGVybmV0Lm1vbml0b3IuY29yZSIgdmVyc2lvbj0iMS4wLjEwMiIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3QuaW50ZXJuZXQubW9uaXRvci51aSIgdmVyc2lvbj0iMS4wLjEwMiIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KLSAgIDwvcmVxdWlyZXM+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3MuaW5mb3BvcCIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy5leHBsb3JlciIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzLnVpIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzZGwudWkiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NpLnVpIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi08L2ZlYXR1cmU+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9saWNlbnNlLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9saWNlbnNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2NDQ1OTguLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvbGljZW5zZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzNjLm9yZy9UUi8xOTk5L1JFQy1odG1sNDAxLTE5OTkxMjI0L2xvb3NlLmR0ZCI+Ci08IS0tIHNhdmVkIGZyb20gdXJsPSgwMDQ0KWh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsL25vdGljZS5odG1sIC0tPgotPEhUTUw+PEhFQUQ+PFRJVExFPkVjbGlwc2Uub3JnIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9USVRMRT4KLTxNRVRBIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KLTxNRVRBIGNvbnRlbnQ9Ik1TSFRNTCA2LjAwLjI4MDAuMTQ3OSIgbmFtZT1HRU5FUkFUT1I+PC9IRUFEPgotPEJPRFkgbGFuZz1FTi1VUyB2TGluaz1wdXJwbGUgbGluaz1ibHVlPgotPEgyPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvSDI+Ci08UD5KdW5lIDA2LCAyMDA3PC9QPgotPEgzPlVzYWdlIE9mIENvbnRlbnQ8L0gzPgotPFA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIAotQU5EL09SIE9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMgKENPTExFQ1RJVkVMWSAiQ09OVEVOVCIpLiBVU0UgT0YgCi1USEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSAKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIAotQkVMT1cuIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCAKLUJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSAKLUFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSAKLUFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIAotTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9QPgotPEgzPkFwcGxpY2FibGUgTGljZW5zZXM8L0gzPgotPFA+VW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIAotRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIAotUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIAotQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgPEEgCi1ocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLTxQPkNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLCAKLWRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWUyByZXBvc2l0b3J5IAotKCJSZXBvc2l0b3J5IikgaW4gQ1ZTIG1vZHVsZXMgKCJNb2R1bGVzIikgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSAKLWFyY2hpdmVzICgiRG93bmxvYWRzIikuPC9QPgotPFA+Q29udGVudCBtYXkgYmUgYXBwb3J0aW9uZWQgaW50byBwbHVnLWlucyAoIlBsdWctaW5zIiksIHBsdWctaW4gZnJhZ21lbnRzIAotKCJGcmFnbWVudHMiKSwgYW5kIGZlYXR1cmVzICgiRmVhdHVyZXMiKS4gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIAotUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4gRmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgCi1jb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyAKLWFzc29jaWF0ZWQgd2l0aCBhIEZlYXR1cmUuIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgYXJlIGxvY2F0ZWQgaW4gZGlyZWN0b3JpZXMgCi1uYW1lZCAicGx1Z2lucyIgYW5kIEZlYXR1cmVzIGFyZSBsb2NhdGVkIGluIGRpcmVjdG9yaWVzIG5hbWVkICJmZWF0dXJlcyIuPC9QPgotPFA+RmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIEZpbGVzIG5hbWVkIAotImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgCi1GZWF0dXJlcy48L1A+Ci08UD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCAKLWluIGZpbGVzIG5hbWVkICJhYm91dC5odG1sIiAoIkFib3V0cyIpLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIAotRmVhdHVyZXMgYW5kIEluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImxpY2Vuc2UuaHRtbCIgCi0oIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSAKLWRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZSBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIAotbG9jYXRpb25zOjwvUD4KLTxVTD4KLSAgPExJPlRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeSAKLSAgPExJPlBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzIAotICA8TEk+U3ViZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAic3JjIiBvZiBjZXJ0YWluIFBsdWctaW5zIAotICA8TEk+RmVhdHVyZSBkaXJlY3RvcmllcyA8L0xJPjwvVUw+Ci08UD5Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgCi11c2luZyB0aGUgRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgiRmVhdHVyZSBVcGRhdGUgCi1MaWNlbnNlIikgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2Vzcy4gSWYgdGhlIEZlYXR1cmUgY29udGFpbnMgSW5jbHVkZWQgCi1GZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyAKLWFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IgaW5mb3JtIHlvdSB3aGVyZSB5b3UgY2FuIAotbG9jYXRlIHRoZW0uIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpbiB0aGUgImxpY2Vuc2UiIHByb3BlcnR5IG9mIAotZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIuIFN1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzIGFuZCBGZWF0dXJlIAotVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgCi1hbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbiB0aGF0IAotZGlyZWN0b3J5LjwvUD4KLTxQPlRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIAotT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLiBTT01FIE9GIFRIRVNFIAotT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTo8L1A+Ci08VUw+Ci0gIDxMST5Db21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sPC9BPikgCi0KLSAgPExJPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0U8L0E+KSAKLQotICA8TEk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPC9BPikgCi0KLSAgPExJPklCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwiPmh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sPC9BPikgCi0KLSAgPExJPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbCI+aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWw8L0E+KSAKLQotICA8TEk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwiPmh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbDwvQT4pIAotICA8L0xJPgotICAgIAotICA8TEk+Q29tbW9uIERldmVsb3BtZW50IGFuZCBEaXN0cmlidXRpb24gTGljZW5zZSAoQ0RETCkgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sIj5odHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwpPC9BPgotICA8L0xJPgotPC9VTD4KLTxQPklUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1IgCi1UTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2Ugb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBpcyAKLXByb3ZpZGVkLCBwbGVhc2UgY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCAKLWNvbmRpdGlvbnMgZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LjwvUD4KLTxIMz5DcnlwdG9ncmFwaHk8L0gzPgotPFA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIAotY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgCi1yZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IAotZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIAotY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgCi10byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9QPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvYnVpbGQucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjY2MyMjkyLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLWJpbi5pbmNsdWRlcyA9XAotZXBsLXYxMC5odG1sLFwKLWVjbGlwc2VfdXBkYXRlXzEyMC5qcGcsXAotZmVhdHVyZS54bWwsXAotZmVhdHVyZS5wcm9wZXJ0aWVzLFwKLWxpY2Vuc2UuaHRtbAotCi1nZW5lcmF0ZS5mZWF0dXJlQG9yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUuc291cmNlID0gb3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZQotCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmRmNzA4Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2VwbC12MTAuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9lcGwtdjEwLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyMmFkMjkuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2VwbC12MTAuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMyOCArMCwwIEBACi08aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCi14bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoteG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgotCi08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgotPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgotPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Ci08bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Ci08bGluayByZWw9RmlsZS1MaXN0Ci1ocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KLTx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgotPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+Ci0gPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgotICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgotICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+Ci0gIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KLSAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KLSAgPG86UGFnZXM+NDwvbzpQYWdlcz4KLSAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KLSAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+Ci0gICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KLSAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgotICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KLSAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KLSA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgotPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+Ci0gPHc6V29yZERvY3VtZW50PgotICA8dzpUcmFja1JldmlzaW9ucy8+Ci0gPC93OldvcmREb2N1bWVudD4KLTwveG1sPjwhW2VuZGlmXS0tPgotPHN0eWxlPgotPCEtLQotIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KLUBmb250LWZhY2UKLQl7Zm9udC1mYW1pbHk6VGFob21hOwotCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OwotCW1zby1mb250LWNoYXJzZXQ6MDsKLQltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKLQltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKLQltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KLSAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLwotcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAotCXttc28tc3R5bGUtcGFyZW50OiIiOwotCW1hcmdpbjowaW47Ci0JbWFyZ2luLWJvdHRvbTouMDAwMXB0OwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6MTIuMHB0OwotCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLXAKLQl7bWFyZ2luLXJpZ2h0OjBpbjsKLQltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKLQltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKLQltYXJnaW4tbGVmdDowaW47Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZToxMi4wcHQ7Ci0JZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAotCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKLQltYXJnaW46MGluOwotCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjguMHB0OwotCWZvbnQtZmFtaWx5OlRhaG9tYTsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1AcGFnZSBTZWN0aW9uMQotCXtzaXplOjguNWluIDExLjBpbjsKLQltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKLQltc28taGVhZGVyLW1hcmdpbjouNWluOwotCW1zby1mb290ZXItbWFyZ2luOi41aW47Ci0JbXNvLXBhcGVyLXNvdXJjZTowO30KLWRpdi5TZWN0aW9uMQotCXtwYWdlOlNlY3Rpb24xO30KLS0tPgotPC9zdHlsZT4KLTwvaGVhZD4KLQotPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgotCi08ZGl2IGNsYXNzPVNlY3Rpb24xPgotCi08cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Ci08L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKLVRIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCi1SRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKLU9GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgotZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgotYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCi1jaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKLWFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQotc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAotYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCi1pZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgotc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCi1Qcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KLXdpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKLXdvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgotZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAotY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKLW9yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCi1kaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobwotcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKLWEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgotc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKLWRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCi1Db250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKLWZvcm0uPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKLVN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKLVJlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCi1wYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0Ci1hbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKLWNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCi1vZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAotYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KLXRvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KLWFueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKLWxpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKLVJlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKLUNvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCi10aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5Ci1yaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKLWZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKLXByb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKLWxpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Ci10byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAotaWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQotdGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQotZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCi1FYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAotcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgotdGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKLVByb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KLTwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWl0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQotaXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCi1lZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCi1jb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCi1hbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQotYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKLWVmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCi1pbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCi1hcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKLXN0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKLUNvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKLXN0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKLWluZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKLW1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKLWNvZGUgZm9ybTo8L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWl0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCi1jb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Ci1jb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKLW9yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCi1zdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5Ci1hY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCi1hbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQotb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCi1wcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCi1saWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQotUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAotQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKLUNvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAotY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgotbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KLXRoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KLWNvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0Ci1vZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKLXJlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgotdG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCi1Db250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgotdG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKLWFueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCi1pbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQotUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQotQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKLWNsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKLXdhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCi1zZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKLW90aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKLWNvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQotQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCi1BR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCi1XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAotV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAotTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKLXJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCi1Qcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCi1BZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCi1jb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgotZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKLUFHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgotQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0oSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKLU5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCi1USEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCi1USEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAotb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKLWVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAotZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKLW1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCi1hZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCi1hbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCi1vdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKLVJlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKLXN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKLXNoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCi1jb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKLXBlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCi1yaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKLWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCi1SZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKLVJlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCi1jb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKLWNvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAotU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCi10aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwotdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAotQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KLXNlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgotb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCi0oaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgotdGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCi10aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KLShpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKLWluIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KLXRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCi1leHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90Ci1leHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKLVN0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKLUFtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcwotQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcwotaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+Ci0KLTwvZGl2PgotCi08L2JvZHk+Ci0KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTUzMjIzLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgZmVhdHVyZS5wcm9wZXJ0aWVzCi0jIGNvbnRhaW5zIGV4dGVybmFsaXplZCBzdHJpbmdzIGZvciBmZWF0dXJlLnhtbAotIyAiJWZvbyIgaW4gZmVhdHVyZS54bWwgY29ycmVzcG9uZHMgdG8gdGhlIGtleSAiZm9vIiBpbiB0aGlzIGZpbGUKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgVGhpcyBmaWxlIHNob3VsZCBiZSB0cmFuc2xhdGVkLgotCi0jICJmZWF0dXJlTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBmZWF0dXJlCi1mZWF0dXJlTmFtZT1XU1QgV1MgVUkgRGV2ZWxvcGVyIFJlc291cmNlcwotCi0jICJwcm92aWRlck5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgY29tcGFueSB0aGF0IHByb3ZpZGVzIHRoZSBmZWF0dXJlCi1wcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKLQotIyAidXBkYXRlU2l0ZU5hbWUiIHByb3BlcnR5IC0gbGFiZWwgZm9yIHRoZSB1cGRhdGUgc2l0ZQotdXBkYXRlU2l0ZU5hbWU9VGhlIEVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtIChXVFApIFByb2plY3QgdXBkYXRlIHNpdGUKLQotIyAiZGVzY3JpcHRpb24iIHByb3BlcnR5IC0gZGVzY3JpcHRpb24gb2YgdGhlIGZlYXR1cmUKLWRlc2NyaXB0aW9uPVNvdXJjZSBjb2RlIHppcHMgZm9yIFdTVCBXUyBVSS4KLQotIyAiY29weXJpZ2h0IiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBDb3B5cmlnaHQiCi1jb3B5cmlnaHQ9XAotQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLlxuXAotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuXAotYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG5cCi13aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdFxuXAotaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcblwKLVxuXAotQ29udHJpYnV0b3JzOlxuXAotICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvblxuCi0jIyMjIyMjIyMjIyMjIyMjIGVuZCBvZiBjb3B5cmlnaHQgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgImxpY2Vuc2VVUkwiIHByb3BlcnR5IC0gVVJMIG9mIHRoZSAiRmVhdHVyZSBMaWNlbnNlIgotIyBkbyBub3QgdHJhbnNsYXRlIHZhbHVlIC0ganVzdCBjaGFuZ2UgdG8gcG9pbnQgdG8gYSBsb2NhbGUtc3BlY2lmaWMgSFRNTCBwYWdlCi1saWNlbnNlVVJMPWxpY2Vuc2UuaHRtbAotCi0jICJsaWNlbnNlIiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIgotIyBzaG91bGQgYmUgcGxhaW4gdGV4dCB2ZXJzaW9uIG9mIGxpY2Vuc2UgYWdyZWVtZW50IHBvaW50ZWQgdG8gYmUgImxpY2Vuc2VVUkwiCi1saWNlbnNlPVwKLUVDTElQU0UgRk9VTkRBVElPTiBTT0ZUV0FSRSBVU0VSIEFHUkVFTUVOVFxuXAotSnVuZSAwNiwgMjAwN1xuXAotXG5cCi1Vc2FnZSBPZiBDb250ZW50XG5cCi1cblwKLVRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1JcblwKLU9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMgKENPTExFQ1RJVkVMWSAiQ09OVEVOVCIpLlxuXAotVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTXG5cCi1BR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1JcblwKLU5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1VcblwKLUFHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlRcblwKLUFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTXG5cCi1PUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRVxuXAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OU1xuXAotT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRURcblwKLUJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC5cblwKLVxuXAotQXBwbGljYWJsZSBMaWNlbnNlc1xuXAotXG5cCi1Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvblxuXAotaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWNcblwKLUxpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzXG5cCi1Db250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC5cblwKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LlxuXAotXG5cCi1Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSxcblwKLWRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWU1xuXAotcmVwb3NpdG9yeSAoIlJlcG9zaXRvcnkiKSBpbiBDVlMgbW9kdWxlcyAoIk1vZHVsZXMiKSBhbmQgbWFkZSBhdmFpbGFibGVcblwKLWFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoIkRvd25sb2FkcyIpLlxuXAotXG5cCi0gICAtIENvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsXG5cCi0gICAgIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgiUGx1Zy1pbnMiKSxcblwKLSAgICAgcGx1Zy1pbiBmcmFnbWVudHMgKCJGcmFnbWVudHMiKSwgYW5kIGZlYXR1cmVzICgiRmVhdHVyZXMiKS5cblwKLSAgIC0gRWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhPyBBUmNoaXZlKVxuXAotICAgICBpbiBhIGRpcmVjdG9yeSBuYW1lZCAicGx1Z2lucyIuXG5cCi0gICAtIEEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLlxuXAotICAgICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAiZmVhdHVyZXMiLlxuXAotICAgICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb25cblwKLSAgICAgbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLlxuXAotICAgLSBGZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXNcblwKLSAgICAgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuXG5cCi1cblwKLUZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBGaWxlcyBuYW1lZFxuXAotImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2ZcblwKLUluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlXG5cCi1jb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkXG5cCi1pbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAoIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlXG5cCi1MaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlXG5cCi1pbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczpcblwKLVxuXAotICAgLSBUaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnlcblwKLSAgIC0gUGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXNcblwKLSAgIC0gSW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSc1xuXAotICAgLSBTdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAic3JjIiBvZiBjZXJ0YWluIFBsdWctaW5zXG5cCi0gICAtIEZlYXR1cmUgZGlyZWN0b3JpZXNcblwKLVxuXAotTm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZVxuXAotRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgiRmVhdHVyZSBVcGRhdGVcblwKLUxpY2Vuc2UiKSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBJZiB0aGUgRmVhdHVyZSBjb250YWluc1xuXAotSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3VcblwKLXdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IgaW5mb3JtXG5cCi15b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluXG5cCi10aGUgImxpY2Vuc2UiIHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiLiBTdWNoIEFib3V0cyxcblwKLUZlYXR1cmUgTGljZW5zZXMgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZFxuXAotY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyXG5cCi11c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbiB0aGF0IGRpcmVjdG9yeS5cblwKLVxuXAotVEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUyBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSXG5cCi1UTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy5cblwKLVNPTUUgT0YgVEhFU0UgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTpcblwKLVxuXAotICAgIC0gQ29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwpXG5cCi0gICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSlcblwKLSAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMClcblwKLSAgICAtIElCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbClcblwKLSAgICAtIE1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sKVxuXAotICAgIC0gTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbClcblwKLSAgICAtIENvbW1vbiBEZXZlbG9wbWVudCBhbmQgRGlzdHJpYnV0aW9uIExpY2Vuc2UgKENEREwpIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sKVxuXAotXG5cCi1JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SXG5cCi1UTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2Ugb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZVxuXAotaXMgcHJvdmlkZWQsIHBsZWFzZSBjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnNcblwKLWdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC5cblwKLVxuXAotQ3J5cHRvZ3JhcGh5XG5cCi1cblwKLUNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZVxuXAotY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLFxuXAotYW5kL29yIHJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRVxuXAotdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsXG5cCi1yZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsXG5cCi1hbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC5cblwKLVxuXAotSmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguXG4KLSMjIyMjIyMjIyMjIGVuZCBvZiBsaWNlbnNlIHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2ZlYXR1cmUueG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2ZlYXR1cmUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTAwYjA0Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9mZWF0dXJlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZmVhdHVyZQotICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlLnNvdXJjZSIKLSAgICAgIGxhYmVsPSIlZmVhdHVyZU5hbWUiCi0gICAgICB2ZXJzaW9uPSIyLjAuMS5xdWFsaWZpZXIiCi0gICAgICBwcm92aWRlci1uYW1lPSIlZmVhdHVyZVByb3ZpZGVyIj4KLQotICAgPGRlc2NyaXB0aW9uPgotICAgICAgJWRlc2NyaXB0aW9uCi0gICA8L2Rlc2NyaXB0aW9uPgotCi0gICA8Y29weXJpZ2h0PgotICAgICAgJWNvcHlyaWdodAotICAgPC9jb3B5cmlnaHQ+Ci0KLSAgIDxsaWNlbnNlIHVybD0ibGljZW5zZS5odG1sIj4KLSAgICAgICVsaWNlbnNlCi0gICA8L2xpY2Vuc2U+Ci0KLSAgIDx1cmw+Ci0gICAgICA8dXBkYXRlIGxhYmVsPSIldXBkYXRlU2l0ZU5hbWUiIHVybD0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3dlYnRvb2xzL3VwZGF0ZXMvIi8+Ci0gICA8L3VybD4KLQotICAgPGluY2x1ZGVzCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzX2NvcmUuZmVhdHVyZSIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxpbmNsdWRlcwotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c19jb3JlLmZlYXR1cmUuc291cmNlIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlLnNvdXJjZSIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi08L2ZlYXR1cmU+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvbGljZW5zZS5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2xpY2Vuc2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmVjNGE0OC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvbGljZW5zZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KLTx0aXRsZT5FY2xpcHNlLm9yZyBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvdGl0bGU+Ci08L2hlYWQ+Ci0KLTxib2R5IGxhbmc9IkVOLVVTIiBsaW5rPWJsdWUgdmxpbms9cHVycGxlPgotPGgyPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvaDI+Ci08cD5KdW5lIDA2LCAyMDA3PC9wPgotCi08aDM+VXNhZ2UgT2YgQ29udGVudDwvaDM+Ci0KLTxwPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUwotICAgKENPTExFQ1RJVkVMWSAmcXVvdDtDT05URU5UJnF1b3Q7KS4gIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQKLSAgIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UKLSAgIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SCi0gICBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQKLSAgIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvcD4KLSAgIAotPGgzPkFwcGxpY2FibGUgTGljZW5zZXM8L2gzPiAgIAotICAgCi08cD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wCi0gICAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgotICAgRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KLQotPHA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIGRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWUyByZXBvc2l0b3J5ICgmcXVvdDtSZXBvc2l0b3J5JnF1b3Q7KSBpbiBDVlMKLSAgIG1vZHVsZXMgKCZxdW90O01vZHVsZXMmcXVvdDspIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCZxdW90O0Rvd25sb2FkcyZxdW90OykuPC9wPgotICAgCi08dWw+Ci0JPGxpPkNvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoJnF1b3Q7UGx1Zy1pbnMmcXVvdDspLCBwbHVnLWluIGZyYWdtZW50cyAoJnF1b3Q7RnJhZ21lbnRzJnF1b3Q7KSwgYW5kIGZlYXR1cmVzICgmcXVvdDtGZWF0dXJlcyZxdW90OykuPC9saT4KLQk8bGk+RWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhJnRyYWRlOyBBUmNoaXZlKSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtwbHVnaW5zJnF1b3Q7LjwvbGk+Ci0JPGxpPkEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLiAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7ZmVhdHVyZXMmcXVvdDsuICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zCi0gICAgICBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuPC9saT4KLQk8bGk+RmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoJnF1b3Q7SW5jbHVkZWQgRmVhdHVyZXMmcXVvdDspLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuPC9saT4KLTwvdWw+ICAgCi0gCi08cD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDthYm91dC5odG1sJnF1b3Q7ICgmcXVvdDtBYm91dHMmcXVvdDspLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZAotSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDtsaWNlbnNlLmh0bWwmcXVvdDsgKCZxdW90O0ZlYXR1cmUgTGljZW5zZXMmcXVvdDspLiAgQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUKLWluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOjwvcD4KLQotPHVsPgotCTxsaT5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3Rvcnk8L2xpPgotCTxsaT5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllczwvbGk+Ci0JPGxpPkluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnM8L2xpPgotCTxsaT5TdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtzcmMmcXVvdDsgb2YgY2VydGFpbiBQbHVnLWluczwvbGk+Ci0JPGxpPkZlYXR1cmUgZGlyZWN0b3JpZXM8L2xpPgotPC91bD4KLQkJCi08cD5Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoJnF1b3Q7RmVhdHVyZSBVcGRhdGUgTGljZW5zZSZxdW90OykgZHVyaW5nIHRoZQotaW5zdGFsbGF0aW9uIHByb2Nlc3MuICBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yCi1pbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uICBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICZxdW90O2xpY2Vuc2UmcXVvdDsgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS5wcm9wZXJ0aWVzJnF1b3Q7IGZvdW5kIHdpdGhpbiBhIEZlYXR1cmUuCi1TdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcywgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4KLXRoYXQgZGlyZWN0b3J5LjwvcD4KLQotPHA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUywgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gIFNPTUUgT0YgVEhFU0UKLU9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9wPgotCi08dWw+Ci0JPGxpPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvYT4pPC9saT4KLQk8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9hPik8L2xpPgotCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvYT4pPC9saT4KLQk8bGk+SUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sIj5odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbDwvYT4pPC9saT4JCi0JPGxpPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvYT4pPC9saT4KLQk8bGk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9hPik8L2xpPgotICA8TEk+Q29tbW9uIERldmVsb3BtZW50IGFuZCBEaXN0cmlidXRpb24gTGljZW5zZSAoQ0RETCkgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sIj5odHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwpPC9BPgotICA8L0xJPgotPC9VTD4KLQotPHA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiBUTyBVU0UgT0YgVEhFIENPTlRFTlQuICBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIHByb3ZpZGVkLCBwbGVhc2UKLWNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9wPgotCi08aDM+Q3J5cHRvZ3JhcGh5PC9oMz4KLQotPHA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIGN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIHJlLWV4cG9ydCB0bwotICAgYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsCi0gICBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvcD4KLSAgIAotPHNtYWxsPkphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLjwvc21hbGw+ICAgCi08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQ5MTZkZi4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci08Ym9keSBsYW5nPSJFTi1VUyI+Ci08aDI+QWJvdXQgVGhpcyBDb250ZW50PC9oMj4KLQotPHA+SnVuZSAwNiwgMjAwNzwvcD4JCi08aDM+TGljZW5zZTwvaDM+Ci0KLTxwPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAoJnF1b3Q7Q29udGVudCZxdW90OykuICBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUKLUVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCZxdW90O0VQTCZxdW90OykuICBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9hPi4KLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAmcXVvdDtQcm9ncmFtJnF1b3Q7IHdpbGwgbWVhbiB0aGUgQ29udGVudC48L3A+Ci0KLTxwPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIENvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgmcXVvdDtSZWRpc3RyaWJ1dG9yJnF1b3Q7KSBhbmQgZGlmZmVyZW50IHRlcm1zIGFuZCBjb25kaXRpb25zIG1heQotYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAgQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3IncyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuICBJZiBubyBzdWNoIGxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiAgVW5sZXNzIG90aGVyd2lzZQotaW5kaWNhdGVkIGJlbG93LCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQuPC9wPgotCi08aDM+U291cmNlIENvZGU8L2gzPgotPHA+VGhpcyBwbHVnLWluIGNvbnRhaW5zIHNvdXJjZSBjb2RlIHppcCBmaWxlcyAoJnF1b3Q7U291cmNlIFppcHMmcXVvdDspIHRoYXQgY29ycmVzcG9uZCB0byBiaW5hcnkgY29udGVudCBpbiBvdGhlciBwbHVnLWlucy4gVGhlc2UgU291cmNlIFppcHMgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlCi1hZ3JlZW1lbnRzIGFuZC9vciBub3RpY2VzLiBEZXRhaWxzIGFib3V0IHRoZXNlIGxpY2Vuc2UgYWdyZWVtZW50cyBhbmQgbm90aWNlcyBhcmUgY29udGFpbmVkIGluICZxdW90O2Fib3V0Lmh0bWwmcXVvdDsgZmlsZXMgKCZxdW90O0Fib3V0cyZxdW90OykgbG9jYXRlZCBpbiBzdWItZGlyZWN0b3JpZXMgaW4gdGhlCi1zcmMvIGRpcmVjdG9yeSBvZiB0aGlzIHBsdWctaW4uIFN1Y2ggQWJvdXRzIGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgU291cmNlIFppcHMgaW4gdGhhdCBkaXJlY3RvcnksIG5vdCB0aGUgRVBMLjwvcD4KLQotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQuaW5pIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQuaW5pCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZGE1YTQwLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0LmluaQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLSMgYWJvdXQuaW5pCi0jIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IGEgZmVhdHVyZQotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQotIyAiJWtleSIgYXJlIGV4dGVybmFsaXplZCBzdHJpbmdzIGRlZmluZWQgaW4gYWJvdXQucHJvcGVydGllcwotIyBUaGlzIGZpbGUgZG9lcyBub3QgbmVlZCB0byBiZSB0cmFuc2xhdGVkLgotCi0jIFByb3BlcnR5ICJhYm91dFRleHQiIGNvbnRhaW5zIGJsdXJiIGZvciAiQWJvdXQiIGRpYWxvZyAodHJhbnNsYXRlZCkKLWFib3V0VGV4dD0lYmx1cmIKLQotIyBQcm9wZXJ0eSAid2luZG93SW1hZ2UiIGNvbnRhaW5zIHBhdGggdG8gd2luZG93IGljb24gKDE2eDE2KQotIyBuZWVkZWQgZm9yIHByaW1hcnkgZmVhdHVyZXMgb25seQotCi0jIFByb3BlcnR5ICJmZWF0dXJlSW1hZ2UiIGNvbnRhaW5zIHBhdGggdG8gZmVhdHVyZSBpbWFnZSAoMzJ4MzIpCi1mZWF0dXJlSW1hZ2U9d3RwX3Byb2QzMi5wbmcKLQotIyBQcm9wZXJ0eSAiYWJvdXRJbWFnZSIgY29udGFpbnMgcGF0aCB0byBwcm9kdWN0IGltYWdlICg1MDB4MzMwIG9yIDExNXgxNjQpCi0jIG5lZWRlZCBmb3IgcHJpbWFyeSBmZWF0dXJlcyBvbmx5Ci0KLSMgUHJvcGVydHkgImFwcE5hbWUiIGNvbnRhaW5zIG5hbWUgb2YgdGhlIGFwcGxpY2F0aW9uIChub3QgdHJhbnNsYXRlZCkKLSMgbmVlZGVkIGZvciBwcmltYXJ5IGZlYXR1cmVzIG9ubHkKLQotIyBQcm9wZXJ0eSAid2VsY29tZVBhZ2UiIGNvbnRhaW5zIHBhdGggdG8gd2VsY29tZSBwYWdlIChzcGVjaWFsIFhNTC1iYXNlZCBmb3JtYXQpCi0jIG9wdGlvbmFsCi0KLSMgUHJvcGVydHkgIndlbGNvbWVQZXJzcGVjdGl2ZSIgY29udGFpbnMgdGhlIGlkIG9mIHRoZSBwZXJzcGVjdGl2ZSBpbiB3aGljaCB0aGUKLSMgd2VsY29tZSBwYWdlIGlzIHRvIGJlIG9wZW5lZC4KLSMgb3B0aW9uYWwKLQotCi0KLQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQubWFwcGluZ3MgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5tYXBwaW5ncwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGRmYjczNS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5tYXBwaW5ncworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotIyBhYm91dC5tYXBwaW5ncw0KLSMgY29udGFpbnMgZmlsbC1pbnMgZm9yIGFib3V0LnByb3BlcnRpZXMNCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpDQotIyBUaGlzIGZpbGUgZG9lcyBub3QgbmVlZCB0byBiZSB0cmFuc2xhdGVkLg0KLQ0KLTA9QGJ1aWxkQA0KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0LnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzk3ODdhLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0LnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBhYm91dC5wcm9wZXJ0aWVzCi0jIGNvbnRhaW5zIGV4dGVybmFsaXplZCBzdHJpbmdzIGZvciBhYm91dC5pbmkKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgZmlsbC1pbnMgYXJlIHN1cHBsaWVkIGJ5IGFib3V0Lm1hcHBpbmdzCi0jIFRoaXMgZmlsZSBzaG91bGQgYmUgdHJhbnNsYXRlZC4KLSMKLSMgRG8gbm90IHRyYW5zbGF0ZSBhbnkgdmFsdWVzIHN1cnJvdW5kZWQgYnkge30KLQotYmx1cmI9V2ViIFN0YW5kYXJkIFRvb2xzIC0gV2ViIFNlcnZpY2UgVUlcblwKLVxuXAotVmVyc2lvbjoge2ZlYXR1cmVWZXJzaW9ufVxuXAotQnVpbGQgaWQ6IHswfVxuXAotXG5cCi0oYykgQ29weXJpZ2h0IEVjbGlwc2UgY29udHJpYnV0b3JzIGFuZCBvdGhlcnMgMjAwNS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cCi1WaXNpdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzCi0KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2J1aWxkLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMGE1NzVjLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLQotYmluLmluY2x1ZGVzID0gYWJvdXQuaHRtbCwgYWJvdXQuaW5pLCBhYm91dC5tYXBwaW5ncywgYWJvdXQucHJvcGVydGllcywgd3RwX3Byb2QzMi5wbmcsIHBsdWdpbi5wcm9wZXJ0aWVzLCBwbHVnaW4ueG1sLCBzcmMvKiosIE1FVEEtSU5GLwotc291cmNlUGx1Z2luID0gdHJ1ZQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vcGx1Z2luLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNhNjU0NS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1wbHVnaW5OYW1lPVdlYiBTdGFuZGFyZCBUb29scyAtIFdlYiBTZXJ2aWNlIFVJIFNvdXJjZQotcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi93dHBfcHJvZDMyLmdpZiBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL3d0cF9wcm9kMzIuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZWZiNDRhLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191aS5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL3d0cF9wcm9kMzIuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VpLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vd3RwX3Byb2QzMi5wbmcgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi93dHBfcHJvZDMyLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZjZWFiMy4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdWkuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi93dHBfcHJvZDMyLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191c2VyZG9jLmZlYXR1cmUvLmN2c2lnbm9yZSBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191c2VyZG9jLmZlYXR1cmUvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2VlZmY1Ni4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdXNlcmRvYy5mZWF0dXJlLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLWJ1aWxkLnhtbAotb3JnLmVjbGlwc2Uud3N0LndzX3VzZXJkb2MuZmVhdHVyZV8xLjAuMC5qYXIKLW9yZy5lY2xpcHNlLndzdC54bWxfdXNlcmRvYy5mZWF0dXJlXzEuMC4wLmphcgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VzZXJkb2MuZmVhdHVyZS8ucHJvamVjdCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191c2VyZG9jLmZlYXR1cmUvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkNTY3NWUuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VzZXJkb2MuZmVhdHVyZS8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC53c191c2VyZG9jLmZlYXR1cmU8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdXNlcmRvYy5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdXNlcmRvYy5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmNDc2OTQuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VzZXJkb2MuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1iaW4uaW5jbHVkZXMgPSBmZWF0dXJlLnhtbCxcCi0gICAgICAgICAgICAgICBlY2xpcHNlX3VwZGF0ZV8xMjAuanBnLFwKLSAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbCxcCi0gICAgICAgICAgICAgICBsaWNlbnNlLmh0bWwsXAotICAgICAgICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdXNlcmRvYy5mZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdXNlcmRvYy5mZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmZGY3MDguLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VzZXJkb2MuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VzZXJkb2MuZmVhdHVyZS9lcGwtdjEwLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdXNlcmRvYy5mZWF0dXJlL2VwbC12MTAuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ0YjE5Ni4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdXNlcmRvYy5mZWF0dXJlL2VwbC12MTAuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMyOCArMCwwIEBACi08aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCi14bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoteG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgotCi08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgotPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgotPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Ci08bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Ci08bGluayByZWw9RmlsZS1MaXN0Ci1ocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KLTx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgotPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+Ci0gPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgotICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgotICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+Ci0gIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KLSAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KLSAgPG86UGFnZXM+NDwvbzpQYWdlcz4KLSAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KLSAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+Ci0gICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KLSAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgotICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KLSAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KLSA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgotPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+Ci0gPHc6V29yZERvY3VtZW50PgotICA8dzpUcmFja1JldmlzaW9ucy8+Ci0gPC93OldvcmREb2N1bWVudD4KLTwveG1sPjwhW2VuZGlmXS0tPgotPHN0eWxlPgotPCEtLQotIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KLUBmb250LWZhY2UKLQl7Zm9udC1mYW1pbHk6VGFob21hOwotCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OwotCW1zby1mb250LWNoYXJzZXQ6MDsKLQltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKLQltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKLQltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KLSAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLwotcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAotCXttc28tc3R5bGUtcGFyZW50OiIiOwotCW1hcmdpbjowaW47Ci0JbWFyZ2luLWJvdHRvbTouMDAwMXB0OwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6MTIuMHB0OwotCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLXAKLQl7bWFyZ2luLXJpZ2h0OjBpbjsKLQltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKLQltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKLQltYXJnaW4tbGVmdDowaW47Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZToxMi4wcHQ7Ci0JZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAotCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKLQltYXJnaW46MGluOwotCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjguMHB0OwotCWZvbnQtZmFtaWx5OlRhaG9tYTsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1AcGFnZSBTZWN0aW9uMQotCXtzaXplOjguNWluIDExLjBpbjsKLQltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKLQltc28taGVhZGVyLW1hcmdpbjouNWluOwotCW1zby1mb290ZXItbWFyZ2luOi41aW47Ci0JbXNvLXBhcGVyLXNvdXJjZTowO30KLWRpdi5TZWN0aW9uMQotCXtwYWdlOlNlY3Rpb24xO30KLS0tPgotPC9zdHlsZT4KLTwvaGVhZD4KLQotPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgotCi08ZGl2IGNsYXNzPVNlY3Rpb24xPgotCi08cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Ci08L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKLVRIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCi1SRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKLU9GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgotZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgotYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCi1jaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKLWFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQotc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAotYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCi1pZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgotc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCi1Qcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KLXdpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKLXdvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgotZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAotY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKLW9yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCi1kaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobwotcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKLWEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgotc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKLWRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCi1Db250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKLWZvcm0uPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKLVN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKLVJlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCi1wYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0Ci1hbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKLWNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCi1vZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAotYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KLXRvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KLWFueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKLWxpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKLVJlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKLUNvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCi10aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5Ci1yaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKLWZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKLXByb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKLWxpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Ci10byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAotaWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQotdGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQotZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCi1FYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAotcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgotdGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKLVByb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KLTwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWl0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQotaXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCi1lZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCi1jb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCi1hbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQotYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKLWVmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCi1pbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCi1hcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKLXN0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKLUNvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKLXN0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKLWluZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKLW1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKLWNvZGUgZm9ybTo8L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWl0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCi1jb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Ci1jb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKLW9yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCi1zdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5Ci1hY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCi1hbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQotb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCi1wcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCi1saWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQotUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAotQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKLUNvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAotY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgotbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KLXRoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KLWNvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0Ci1vZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKLXJlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgotdG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCi1Db250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgotdG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKLWFueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCi1pbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQotUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQotQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKLWNsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKLXdhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCi1zZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKLW90aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKLWNvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQotQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCi1BR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCi1XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAotV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAotTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKLXJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCi1Qcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCi1BZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCi1jb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgotZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKLUFHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgotQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0oSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKLU5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCi1USEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCi1USEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAotb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKLWVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAotZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKLW1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCi1hZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCi1hbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCi1vdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKLVJlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKLXN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKLXNoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCi1jb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKLXBlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCi1yaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKLWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCi1SZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKLVJlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCi1jb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKLWNvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAotU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCi10aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwotdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAotQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KLXNlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgotb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCi0oaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgotdGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCi10aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KLShpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKLWluIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KLXRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCi1leHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90Ci1leHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKLVN0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKLUFtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcwotQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcwotaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+Ci0KLTwvZGl2PgotCi08L2JvZHk+Ci0KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdXNlcmRvYy5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191c2VyZG9jLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiY2E1ODVjLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53c191c2VyZG9jLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTQ1ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIGZlYXR1cmUucHJvcGVydGllcwotIyBjb250YWlucyBleHRlcm5hbGl6ZWQgc3RyaW5ncyBmb3IgZmVhdHVyZS54bWwKLSMgIiVmb28iIGluIGZlYXR1cmUueG1sIGNvcnJlc3BvbmRzIHRvIHRoZSBrZXkgImZvbyIgaW4gdGhpcyBmaWxlCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jIFRoaXMgZmlsZSBzaG91bGQgYmUgdHJhbnNsYXRlZC4KLQotIyAiZmVhdHVyZU5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgZmVhdHVyZQotZmVhdHVyZU5hbWU9V1NUIFdlYiBTZXJ2aWNlcyBVc2VyIERvY3VtZW50YXRpb24KLQotIyAicHJvdmlkZXJOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGNvbXBhbnkgdGhhdCBwcm92aWRlcyB0aGUgZmVhdHVyZQotcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCi0KLSMgInVwZGF0ZVNpdGVOYW1lIiBwcm9wZXJ0eSAtIGxhYmVsIGZvciB0aGUgdXBkYXRlIHNpdGUKLXVwZGF0ZVNpdGVOYW1lPVRoZSBFY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybSAoV1RQKSBQcm9qZWN0IHVwZGF0ZSBzaXRlCi0KLSMgImRlc2NyaXB0aW9uIiBwcm9wZXJ0eSAtIGRlc2NyaXB0aW9uIG9mIHRoZSBmZWF0dXJlCi1kZXNjcmlwdGlvbj1XU1QgV2ViIHNlcnZpY2VzIHVzZXIgZG9jdW1lbnRhdGlvbgotCi0jICJjb3B5cmlnaHQiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIENvcHlyaWdodCIKLWNvcHlyaWdodD1cCi1Db3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuXG5cCi1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzXG5cCi1hcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjBcblwKLXdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0XG5cCi1odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbFxuXAotXG5cCi1Db250cmlidXRvcnM6XG5cCi0gICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uXG4KLSMjIyMjIyMjIyMjIyMjIyMgZW5kIG9mIGNvcHlyaWdodCBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyAibGljZW5zZVVSTCIgcHJvcGVydHkgLSBVUkwgb2YgdGhlICJGZWF0dXJlIExpY2Vuc2UiCi0jIGRvIG5vdCB0cmFuc2xhdGUgdmFsdWUgLSBqdXN0IGNoYW5nZSB0byBwb2ludCB0byBhIGxvY2FsZS1zcGVjaWZpYyBIVE1MIHBhZ2UKLWxpY2Vuc2VVUkw9bGljZW5zZS5odG1sCi0KLSMgImxpY2Vuc2UiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIExpY2Vuc2UiCi0jIHNob3VsZCBiZSBwbGFpbiB0ZXh0IHZlcnNpb24gb2YgbGljZW5zZSBhZ3JlZW1lbnQgcG9pbnRlZCB0byBiZSAibGljZW5zZVVSTCIKLWxpY2Vuc2U9XAotRUNMSVBTRSBGT1VOREFUSU9OIFNPRlRXQVJFIFVTRVIgQUdSRUVNRU5UXG5cCi1KdW5lIDA2LCAyMDA3XG5cCi1cblwKLVVzYWdlIE9mIENvbnRlbnRcblwKLVxuXAotVEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUlxuXAotT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUyAoQ09MTEVDVElWRUxZICJDT05URU5UIikuXG5cCi1VU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVNcblwKLUFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUlxuXAotTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVVxuXAotQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVFxuXAotQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFNcblwKLU9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFXG5cCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TXG5cCi1PRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRFxuXAotQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULlxuXAotXG5cCi1BcHBsaWNhYmxlIExpY2Vuc2VzXG5cCi1cblwKLVVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uXG5cCi1pcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpY1xuXAotTGljZW5zZSBWZXJzaW9uIDEuMCAoIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXNcblwKLUNvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLlxuXAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuXG5cCi1cblwKLUNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLFxuXAotZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTXG5cCi1yZXBvc2l0b3J5ICgiUmVwb3NpdG9yeSIpIGluIENWUyBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZVxuXAotYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgiRG93bmxvYWRzIikuXG5cCi1cblwKLSAgIC0gQ29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZyxcblwKLSAgICAgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCJQbHVnLWlucyIpLFxuXAotICAgICBwbHVnLWluIGZyYWdtZW50cyAoIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLlxuXAotICAgLSBFYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmE/IEFSY2hpdmUpXG5cCi0gICAgIGluIGEgZGlyZWN0b3J5IG5hbWVkICJwbHVnaW5zIi5cblwKLSAgIC0gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuXG5cCi0gICAgIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICJmZWF0dXJlcyIuXG5cCi0gICAgIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvblxuXAotICAgICBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuXG5cCi0gICAtIEZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlc1xuXAotICAgICBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy5cblwKLVxuXAotRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIEZpbGVzIG5hbWVkXG5cCi0iZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZlxuXAotSW5jbHVkZWQgRmVhdHVyZXMuXG5cCi1cblwKLVRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmVcblwKLWNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAiYWJvdXQuaHRtbCIgKCJBYm91dHMiKS4gVGhlIHRlcm1zIGFuZFxuXAotY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kIEluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWRcblwKLWluIGZpbGVzIG5hbWVkICJsaWNlbnNlLmh0bWwiICgiRmVhdHVyZSBMaWNlbnNlcyIpLiBBYm91dHMgYW5kIEZlYXR1cmVcblwKLUxpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGVcblwKLWluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOlxuXAotXG5cCi0gICAtIFRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeVxuXAotICAgLSBQbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3Rvcmllc1xuXAotICAgLSBJbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzXG5cCi0gICAtIFN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICJzcmMiIG9mIGNlcnRhaW4gUGx1Zy1pbnNcblwKLSAgIC0gRmVhdHVyZSBkaXJlY3Rvcmllc1xuXAotXG5cCi1Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlXG5cCi1FY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCJGZWF0dXJlIFVwZGF0ZVxuXAotTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zXG5cCi1JbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdVxuXAotd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm1cblwKLXlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW5cblwKLXRoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIuIFN1Y2ggQWJvdXRzLFxuXAotRmVhdHVyZSBMaWNlbnNlcyBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kXG5cCi1jb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXJcblwKLXVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgZGlyZWN0b3J5LlxuXAotXG5cCi1USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVJcblwKLVRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLlxuXAotU09NRSBPRiBUSEVTRSBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOlxuXAotXG5cCi0gICAgLSBDb21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbClcblwKLSAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFKVxuXAotICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wKVxuXAotICAgIC0gSUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sKVxuXAotICAgIC0gTWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwpXG5cCi0gICAgLSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sKVxuXAotICAgIC0gQ29tbW9uIERldmVsb3BtZW50IGFuZCBEaXN0cmlidXRpb24gTGljZW5zZSAoQ0RETCkgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwpXG5cCi1cblwKLUlUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1JcblwKLVRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlXG5cCi1pcyBwcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9uc1xuXAotZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LlxuXAotXG5cCi1DcnlwdG9ncmFwaHlcblwKLVxuXAotQ29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlXG5cCi1jdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsXG5cCi1hbmQvb3IgcmUtZXhwb3J0IHRvIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFXG5cCi11c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cyxcblwKLXJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIG9yIHVzZSxcblwKLWFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLlxuXAotXG5cCi1KYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC5cbgotIyMjIyMjIyMjIyMgZW5kIG9mIGxpY2Vuc2UgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdXNlcmRvYy5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VzZXJkb2MuZmVhdHVyZS9mZWF0dXJlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWIwOWM1ZS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdXNlcmRvYy5mZWF0dXJlL2ZlYXR1cmUueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxmZWF0dXJlCi0gICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzX3VzZXJkb2MuZmVhdHVyZSIKLSAgICAgIGxhYmVsPSIlZmVhdHVyZU5hbWUiCi0gICAgICB2ZXJzaW9uPSIyLjEuMC5xdWFsaWZpZXIiCi0gICAgICBwcm92aWRlci1uYW1lPSIlcHJvdmlkZXJOYW1lIj4KLQotICAgPGRlc2NyaXB0aW9uPgotICAgICAgJWRlc2NyaXB0aW9uCi0gICA8L2Rlc2NyaXB0aW9uPgotCi0gICA8Y29weXJpZ2h0PgotICAgICAgJWNvcHlyaWdodAotICAgPC9jb3B5cmlnaHQ+Ci0KLSAgIDxsaWNlbnNlIHVybD0ibGljZW5zZS5odG1sIj4KLSAgICAgICVsaWNlbnNlCi0gICA8L2xpY2Vuc2U+Ci0KLSAgIDx1cmw+Ci0gICAgICA8dXBkYXRlIGxhYmVsPSIldXBkYXRlU2l0ZU5hbWUiIHVybD0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3dlYnRvb2xzL3VwZGF0ZXMvIi8+Ci0gICA8L3VybD4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnVpLmRvYy51c2VyIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzaS51aS5kb2MudXNlciIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5kb2MudXNlciIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotPC9mZWF0dXJlPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndzX3VzZXJkb2MuZmVhdHVyZS9saWNlbnNlLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdXNlcmRvYy5mZWF0dXJlL2xpY2Vuc2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY0NDU5OC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud3NfdXNlcmRvYy5mZWF0dXJlL2xpY2Vuc2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczYy5vcmcvVFIvMTk5OS9SRUMtaHRtbDQwMS0xOTk5MTIyNC9sb29zZS5kdGQiPgotPCEtLSBzYXZlZCBmcm9tIHVybD0oMDA0NClodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC9ub3RpY2UuaHRtbCAtLT4KLTxIVE1MPjxIRUFEPjxUSVRMRT5FY2xpcHNlLm9yZyBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvVElUTEU+Ci08TUVUQSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Ci08TUVUQSBjb250ZW50PSJNU0hUTUwgNi4wMC4yODAwLjE0NzkiIG5hbWU9R0VORVJBVE9SPjwvSEVBRD4KLTxCT0RZIGxhbmc9RU4tVVMgdkxpbms9cHVycGxlIGxpbms9Ymx1ZT4KLTxIMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L0gyPgotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLTxIMz5Vc2FnZSBPZiBDb250ZW50PC9IMz4KLTxQPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiAKLUFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS4gVVNFIE9GIAotVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCAKLUJFTE9XLiBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgCi1CWSBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgCi1BR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgCi1BUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLCBUSEVOIFlPVSAKLU1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvUD4KLTxIMz5BcHBsaWNhYmxlIExpY2Vuc2VzPC9IMz4KLTxQPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSAKLUZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSAKLVB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyAKLUNvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxBIAotaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci08UD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgCi1kb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlMgcmVwb3NpdG9yeSAKLSgiUmVwb3NpdG9yeSIpIGluIENWUyBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgCi1hcmNoaXZlcyAoIkRvd25sb2FkcyIpLjwvUD4KLTxQPkNvbnRlbnQgbWF5IGJlIGFwcG9ydGlvbmVkIGludG8gcGx1Zy1pbnMgKCJQbHVnLWlucyIpLCBwbHVnLWluIGZyYWdtZW50cyAKLSgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuIEEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSAKLVBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuIEZpbGVzIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IAotY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgCi1hc3NvY2lhdGVkIHdpdGggYSBGZWF0dXJlLiBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIGFyZSBsb2NhdGVkIGluIGRpcmVjdG9yaWVzIAotbmFtZWQgInBsdWdpbnMiIGFuZCBGZWF0dXJlcyBhcmUgbG9jYXRlZCBpbiBkaXJlY3RvcmllcyBuYW1lZCAiZmVhdHVyZXMiLjwvUD4KLTxQPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBGaWxlcyBuYW1lZCAKLSJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIAotRmVhdHVyZXMuPC9QPgotPFA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgCi1pbiBmaWxlcyBuYW1lZCAiYWJvdXQuaHRtbCIgKCJBYm91dHMiKS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyAKLUZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJsaWNlbnNlLmh0bWwiIAotKCJGZWF0dXJlIExpY2Vuc2VzIikuIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgCi1kaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyAKLWxvY2F0aW9uczo8L1A+Ci08VUw+Ci0gIDxMST5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnkgCi0gIDxMST5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllcyAKLSAgPExJPlN1YmRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWlucyAKLSAgPExJPkZlYXR1cmUgZGlyZWN0b3JpZXMgPC9MST48L1VMPgotPFA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIAotdXNpbmcgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgVXBkYXRlIAotTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zIEluY2x1ZGVkIAotRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgCi1hbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yIGluZm9ybSB5b3Ugd2hlcmUgeW91IGNhbiAKLWxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiAKLWZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiLiBTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcyBhbmQgRmVhdHVyZSAKLVVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIAotYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCAKLWRpcmVjdG9yeS48L1A+Ci08UD5USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCAKLU9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gU09NRSBPRiBUSEVTRSAKLU9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9QPgotPFVMPgotICA8TEk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvQT4pIAotCi0gIDxMST5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9BPikgCi0KLSAgPExJPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvQT4pIAotCi0gIDxMST5JQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sIj5odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbDwvQT4pIAotCi0gIDxMST5NZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9BPikgCi0KLSAgPExJPk1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L0E+KSAKLSAgPC9MST4KLSAgICAKLSAgPExJPkNvbW1vbiBEZXZlbG9wbWVudCBhbmQgRGlzdHJpYnV0aW9uIExpY2Vuc2UgKENEREwpIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbCI+aHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sKTwvQT4KLSAgPC9MST4KLTwvVUw+Ci08UD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIAotVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgCi1wcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgCi1jb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L1A+Ci08SDM+Q3J5cHRvZ3JhcGh5PC9IMz4KLTxQPkNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZSAKLWN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIAotcmUtZXhwb3J0IHRvIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFIHVzaW5nIGFueSAKLWVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyAKLWNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIAotdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvUD48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjg5OGNjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0idGVzdHMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTc3NjNlYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLWJpbgotYnVpbGQueG1sCi10ZW1wLmZvbGRlcgotdGVzdHMuamFyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjAyZTdjZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2RiMTA4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotI1RodSBNYXkgMzEgMTQ6Mjg6MzMgRURUIDIwMDcKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnN0YW5jZS9vcmcuZWNsaXBzZS5jb3JlLm5ldC9vcmcuZWNsaXBzZS5jb3JlLm5ldC5oYXNNaWdyYXRlZD10cnVlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTc3MDQwMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jTW9uIEphbiAzMCAxMDo0MTozOSBFU1QgMjAwNgotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMWUzYzRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlUExVR0lOX05BTUUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMTAxLnF1YWxpZmllcgotQnVuZGxlLVZlbmRvcjogJVBMVUdJTl9QUk9WSURFUgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmp1bml0LAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcywKLSBvcmcuZWNsaXBzZS5qZHQuY29yZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MsCi0gb3JnLmVjbGlwc2UuanN0LndzLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2RiMzZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzYwNWM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLWJpbi5pbmNsdWRlcyA9IE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIGRhdGEvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIHRlc3RzLmphcgotamFycy5jb21waWxlLm9yZGVyID0gdGVzdHMuamFyCi1zb3VyY2UudGVzdHMuamFyID0gdGVzdHMvCi1vdXRwdXQudGVzdHMuamFyID0gYmluLwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UxL29yZy90ZW1wdXJpL0FyZWFTZXJ2aWNlL0FyZWFTZXJ2aWNlUHJveHkuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvZGF0YS9heGlzU291cmNlMS9vcmcvdGVtcHVyaS9BcmVhU2VydmljZS9BcmVhU2VydmljZVByb3h5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyN2E0OGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UxL29yZy90ZW1wdXJpL0FyZWFTZXJ2aWNlL0FyZWFTZXJ2aWNlUHJveHkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcudGVtcHVyaS5BcmVhU2VydmljZTsKLQotcHVibGljIGNsYXNzIEFyZWFTZXJ2aWNlUHJveHkgaW1wbGVtZW50cyBvcmcudGVtcHVyaS5BcmVhU2VydmljZS5BcmVhU2VydmljZV9Qb3J0VHlwZSB7Ci0gIHByaXZhdGUgU3RyaW5nIF9lbmRwb2ludCA9IG51bGw7Ci0gIHByaXZhdGUgb3JnLnRlbXB1cmkuQXJlYVNlcnZpY2UuQXJlYVNlcnZpY2VfUG9ydFR5cGUgYXJlYVNlcnZpY2VfUG9ydFR5cGUgPSBudWxsOwotICAKLSAgcHVibGljIEFyZWFTZXJ2aWNlUHJveHkoKSB7Ci0gICAgX2luaXRBcmVhU2VydmljZVByb3h5KCk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBfaW5pdEFyZWFTZXJ2aWNlUHJveHkoKSB7Ci0gICAgdHJ5IHsKLSAgICAgIGFyZWFTZXJ2aWNlX1BvcnRUeXBlID0gKG5ldyBvcmcudGVtcHVyaS5BcmVhU2VydmljZS5BcmVhU2VydmljZV9TZXJ2aWNlTG9jYXRvcigpKS5nZXRBcmVhU2VydmljZVNPQVAoKTsKLSAgICAgIGlmIChhcmVhU2VydmljZV9Qb3J0VHlwZSAhPSBudWxsKSB7Ci0gICAgICAgIGlmIChfZW5kcG9pbnQgIT0gbnVsbCkKLSAgICAgICAgICAoKGphdmF4LnhtbC5ycGMuU3R1YilhcmVhU2VydmljZV9Qb3J0VHlwZSkuX3NldFByb3BlcnR5KCJqYXZheC54bWwucnBjLnNlcnZpY2UuZW5kcG9pbnQuYWRkcmVzcyIsIF9lbmRwb2ludCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBfZW5kcG9pbnQgPSAoU3RyaW5nKSgoamF2YXgueG1sLnJwYy5TdHViKWFyZWFTZXJ2aWNlX1BvcnRUeXBlKS5fZ2V0UHJvcGVydHkoImphdmF4LnhtbC5ycGMuc2VydmljZS5lbmRwb2ludC5hZGRyZXNzIik7Ci0gICAgICB9Ci0gICAgICAKLSAgICB9Ci0gICAgY2F0Y2ggKGphdmF4LnhtbC5ycGMuU2VydmljZUV4Y2VwdGlvbiBzZXJ2aWNlRXhjZXB0aW9uKSB7fQotICB9Ci0gIAotICBwdWJsaWMgU3RyaW5nIGdldEVuZHBvaW50KCkgewotICAgIHJldHVybiBfZW5kcG9pbnQ7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHNldEVuZHBvaW50KFN0cmluZyBlbmRwb2ludCkgewotICAgIF9lbmRwb2ludCA9IGVuZHBvaW50OwotICAgIGlmIChhcmVhU2VydmljZV9Qb3J0VHlwZSAhPSBudWxsKQotICAgICAgKChqYXZheC54bWwucnBjLlN0dWIpYXJlYVNlcnZpY2VfUG9ydFR5cGUpLl9zZXRQcm9wZXJ0eSgiamF2YXgueG1sLnJwYy5zZXJ2aWNlLmVuZHBvaW50LmFkZHJlc3MiLCBfZW5kcG9pbnQpOwotICAgIAotICB9Ci0gIAotICBwdWJsaWMgb3JnLnRlbXB1cmkuQXJlYVNlcnZpY2UuQXJlYVNlcnZpY2VfUG9ydFR5cGUgZ2V0QXJlYVNlcnZpY2VfUG9ydFR5cGUoKSB7Ci0gICAgaWYgKGFyZWFTZXJ2aWNlX1BvcnRUeXBlID09IG51bGwpCi0gICAgICBfaW5pdEFyZWFTZXJ2aWNlUHJveHkoKTsKLSAgICByZXR1cm4gYXJlYVNlcnZpY2VfUG9ydFR5cGU7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmbG9hdCBjYWxjdWxhdGVSZWN0QXJlYShvcmcudGVtcHVyaS5BcmVhU2VydmljZS5EaW1lbnNpb25zIHBhcmFtZXRlcnMpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb257Ci0gICAgaWYgKGFyZWFTZXJ2aWNlX1BvcnRUeXBlID09IG51bGwpCi0gICAgICBfaW5pdEFyZWFTZXJ2aWNlUHJveHkoKTsKLSAgICByZXR1cm4gYXJlYVNlcnZpY2VfUG9ydFR5cGUuY2FsY3VsYXRlUmVjdEFyZWEocGFyYW1ldGVycyk7Ci0gIH0KLSAgCi0gIAotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvZGF0YS9heGlzU291cmNlMS9vcmcvdGVtcHVyaS9BcmVhU2VydmljZS9BcmVhU2VydmljZVNPQVBTdHViLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTEvb3JnL3RlbXB1cmkvQXJlYVNlcnZpY2UvQXJlYVNlcnZpY2VTT0FQU3R1Yi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMWViOTIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvZGF0YS9heGlzU291cmNlMS9vcmcvdGVtcHVyaS9BcmVhU2VydmljZS9BcmVhU2VydmljZVNPQVBTdHViLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioKLSAqIEFyZWFTZXJ2aWNlU09BUFN0dWIuamF2YQotICoKLSAqIFRoaXMgZmlsZSB3YXMgYXV0by1nZW5lcmF0ZWQgZnJvbSBXU0RMCi0gKiBieSB0aGUgQXBhY2hlIEF4aXMgMS4yLjEgSnVuIDE0LCAyMDA1ICgwOToxNTo1NyBFRFQpIFdTREwySmF2YSBlbWl0dGVyLgotICovCi0KLXBhY2thZ2Ugb3JnLnRlbXB1cmkuQXJlYVNlcnZpY2U7Ci0KLXB1YmxpYyBjbGFzcyBBcmVhU2VydmljZVNPQVBTdHViIGV4dGVuZHMgb3JnLmFwYWNoZS5heGlzLmNsaWVudC5TdHViIGltcGxlbWVudHMgb3JnLnRlbXB1cmkuQXJlYVNlcnZpY2UuQXJlYVNlcnZpY2VfUG9ydFR5cGUgewotICAgIHByaXZhdGUgamF2YS51dGlsLlZlY3RvciBjYWNoZWRTZXJDbGFzc2VzID0gbmV3IGphdmEudXRpbC5WZWN0b3IoKTsKLSAgICBwcml2YXRlIGphdmEudXRpbC5WZWN0b3IgY2FjaGVkU2VyUU5hbWVzID0gbmV3IGphdmEudXRpbC5WZWN0b3IoKTsKLSAgICBwcml2YXRlIGphdmEudXRpbC5WZWN0b3IgY2FjaGVkU2VyRmFjdG9yaWVzID0gbmV3IGphdmEudXRpbC5WZWN0b3IoKTsKLSAgICBwcml2YXRlIGphdmEudXRpbC5WZWN0b3IgY2FjaGVkRGVzZXJGYWN0b3JpZXMgPSBuZXcgamF2YS51dGlsLlZlY3RvcigpOwotCi0gICAgc3RhdGljIG9yZy5hcGFjaGUuYXhpcy5kZXNjcmlwdGlvbi5PcGVyYXRpb25EZXNjIFtdIF9vcGVyYXRpb25zOwotCi0gICAgc3RhdGljIHsKLSAgICAgICAgX29wZXJhdGlvbnMgPSBuZXcgb3JnLmFwYWNoZS5heGlzLmRlc2NyaXB0aW9uLk9wZXJhdGlvbkRlc2NbMV07Ci0gICAgICAgIF9pbml0T3BlcmF0aW9uRGVzYzEoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyB2b2lkIF9pbml0T3BlcmF0aW9uRGVzYzEoKXsKLSAgICAgICAgb3JnLmFwYWNoZS5heGlzLmRlc2NyaXB0aW9uLk9wZXJhdGlvbkRlc2Mgb3BlcjsKLSAgICAgICAgb3JnLmFwYWNoZS5heGlzLmRlc2NyaXB0aW9uLlBhcmFtZXRlckRlc2MgcGFyYW07Ci0gICAgICAgIG9wZXIgPSBuZXcgb3JnLmFwYWNoZS5heGlzLmRlc2NyaXB0aW9uLk9wZXJhdGlvbkRlc2MoKTsKLSAgICAgICAgb3Blci5zZXROYW1lKCJDYWxjdWxhdGVSZWN0QXJlYSIpOwotICAgICAgICBwYXJhbSA9IG5ldyBvcmcuYXBhY2hlLmF4aXMuZGVzY3JpcHRpb24uUGFyYW1ldGVyRGVzYyhuZXcgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSgiaHR0cDovL3RlbXB1cmkub3JnL0FyZWFTZXJ2aWNlLyIsICJwYXJhbWV0ZXJzIiksIG9yZy5hcGFjaGUuYXhpcy5kZXNjcmlwdGlvbi5QYXJhbWV0ZXJEZXNjLklOLCBuZXcgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSgiaHR0cDovL3RlbXB1cmkub3JnL0FyZWFTZXJ2aWNlLyIsICJkaW1lbnNpb25zIiksIG9yZy50ZW1wdXJpLkFyZWFTZXJ2aWNlLkRpbWVuc2lvbnMuY2xhc3MsIGZhbHNlLCBmYWxzZSk7Ci0gICAgICAgIG9wZXIuYWRkUGFyYW1ldGVyKHBhcmFtKTsKLSAgICAgICAgb3Blci5zZXRSZXR1cm5UeXBlKG5ldyBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIsICJmbG9hdCIpKTsKLSAgICAgICAgb3Blci5zZXRSZXR1cm5DbGFzcyhmbG9hdC5jbGFzcyk7Ci0gICAgICAgIG9wZXIuc2V0UmV0dXJuUU5hbWUobmV3IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUoImh0dHA6Ly90ZW1wdXJpLm9yZy9BcmVhU2VydmljZS8iLCAiYXJlYSIpKTsKLSAgICAgICAgb3Blci5zZXRTdHlsZShvcmcuYXBhY2hlLmF4aXMuY29uc3RhbnRzLlN0eWxlLkRPQ1VNRU5UKTsKLSAgICAgICAgb3Blci5zZXRVc2Uob3JnLmFwYWNoZS5heGlzLmNvbnN0YW50cy5Vc2UuTElURVJBTCk7Ci0gICAgICAgIF9vcGVyYXRpb25zWzBdID0gb3BlcjsKLQotICAgIH0KLQotICAgIHB1YmxpYyBBcmVhU2VydmljZVNPQVBTdHViKCkgdGhyb3dzIG9yZy5hcGFjaGUuYXhpcy5BeGlzRmF1bHQgewotICAgICAgICAgdGhpcyhudWxsKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQXJlYVNlcnZpY2VTT0FQU3R1YihqYXZhLm5ldC5VUkwgZW5kcG9pbnRVUkwsIGphdmF4LnhtbC5ycGMuU2VydmljZSBzZXJ2aWNlKSB0aHJvd3Mgb3JnLmFwYWNoZS5heGlzLkF4aXNGYXVsdCB7Ci0gICAgICAgICB0aGlzKHNlcnZpY2UpOwotICAgICAgICAgc3VwZXIuY2FjaGVkRW5kcG9pbnQgPSBlbmRwb2ludFVSTDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQXJlYVNlcnZpY2VTT0FQU3R1YihqYXZheC54bWwucnBjLlNlcnZpY2Ugc2VydmljZSkgdGhyb3dzIG9yZy5hcGFjaGUuYXhpcy5BeGlzRmF1bHQgewotICAgICAgICBpZiAoc2VydmljZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICBzdXBlci5zZXJ2aWNlID0gbmV3IG9yZy5hcGFjaGUuYXhpcy5jbGllbnQuU2VydmljZSgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3VwZXIuc2VydmljZSA9IHNlcnZpY2U7Ci0gICAgICAgIH0KLSAgICAgICAgKChvcmcuYXBhY2hlLmF4aXMuY2xpZW50LlNlcnZpY2Upc3VwZXIuc2VydmljZSkuc2V0VHlwZU1hcHBpbmdWZXJzaW9uKCIxLjIiKTsKLSAgICAgICAgICAgIGphdmEubGFuZy5DbGFzcyBjbHM7Ci0gICAgICAgICAgICBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lIHFOYW1lOwotICAgICAgICAgICAgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSBxTmFtZTI7Ci0gICAgICAgICAgICBqYXZhLmxhbmcuQ2xhc3MgYmVhbnNmID0gb3JnLmFwYWNoZS5heGlzLmVuY29kaW5nLnNlci5CZWFuU2VyaWFsaXplckZhY3RvcnkuY2xhc3M7Ci0gICAgICAgICAgICBqYXZhLmxhbmcuQ2xhc3MgYmVhbmRmID0gb3JnLmFwYWNoZS5heGlzLmVuY29kaW5nLnNlci5CZWFuRGVzZXJpYWxpemVyRmFjdG9yeS5jbGFzczsKLSAgICAgICAgICAgIGphdmEubGFuZy5DbGFzcyBlbnVtc2YgPSBvcmcuYXBhY2hlLmF4aXMuZW5jb2Rpbmcuc2VyLkVudW1TZXJpYWxpemVyRmFjdG9yeS5jbGFzczsKLSAgICAgICAgICAgIGphdmEubGFuZy5DbGFzcyBlbnVtZGYgPSBvcmcuYXBhY2hlLmF4aXMuZW5jb2Rpbmcuc2VyLkVudW1EZXNlcmlhbGl6ZXJGYWN0b3J5LmNsYXNzOwotICAgICAgICAgICAgamF2YS5sYW5nLkNsYXNzIGFycmF5c2YgPSBvcmcuYXBhY2hlLmF4aXMuZW5jb2Rpbmcuc2VyLkFycmF5U2VyaWFsaXplckZhY3RvcnkuY2xhc3M7Ci0gICAgICAgICAgICBqYXZhLmxhbmcuQ2xhc3MgYXJyYXlkZiA9IG9yZy5hcGFjaGUuYXhpcy5lbmNvZGluZy5zZXIuQXJyYXlEZXNlcmlhbGl6ZXJGYWN0b3J5LmNsYXNzOwotICAgICAgICAgICAgamF2YS5sYW5nLkNsYXNzIHNpbXBsZXNmID0gb3JnLmFwYWNoZS5heGlzLmVuY29kaW5nLnNlci5TaW1wbGVTZXJpYWxpemVyRmFjdG9yeS5jbGFzczsKLSAgICAgICAgICAgIGphdmEubGFuZy5DbGFzcyBzaW1wbGVkZiA9IG9yZy5hcGFjaGUuYXhpcy5lbmNvZGluZy5zZXIuU2ltcGxlRGVzZXJpYWxpemVyRmFjdG9yeS5jbGFzczsKLSAgICAgICAgICAgIGphdmEubGFuZy5DbGFzcyBzaW1wbGVsaXN0c2YgPSBvcmcuYXBhY2hlLmF4aXMuZW5jb2Rpbmcuc2VyLlNpbXBsZUxpc3RTZXJpYWxpemVyRmFjdG9yeS5jbGFzczsKLSAgICAgICAgICAgIGphdmEubGFuZy5DbGFzcyBzaW1wbGVsaXN0ZGYgPSBvcmcuYXBhY2hlLmF4aXMuZW5jb2Rpbmcuc2VyLlNpbXBsZUxpc3REZXNlcmlhbGl6ZXJGYWN0b3J5LmNsYXNzOwotICAgICAgICAgICAgcU5hbWUgPSBuZXcgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSgiaHR0cDovL3RlbXB1cmkub3JnL0FyZWFTZXJ2aWNlLyIsICJkaW1lbnNpb25zIik7Ci0gICAgICAgICAgICBjYWNoZWRTZXJRTmFtZXMuYWRkKHFOYW1lKTsKLSAgICAgICAgICAgIGNscyA9IG9yZy50ZW1wdXJpLkFyZWFTZXJ2aWNlLkRpbWVuc2lvbnMuY2xhc3M7Ci0gICAgICAgICAgICBjYWNoZWRTZXJDbGFzc2VzLmFkZChjbHMpOwotICAgICAgICAgICAgY2FjaGVkU2VyRmFjdG9yaWVzLmFkZChiZWFuc2YpOwotICAgICAgICAgICAgY2FjaGVkRGVzZXJGYWN0b3JpZXMuYWRkKGJlYW5kZik7Ci0KLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgb3JnLmFwYWNoZS5heGlzLmNsaWVudC5DYWxsIGNyZWF0ZUNhbGwoKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIG9yZy5hcGFjaGUuYXhpcy5jbGllbnQuQ2FsbCBfY2FsbCA9IHN1cGVyLl9jcmVhdGVDYWxsKCk7Ci0gICAgICAgICAgICBpZiAoc3VwZXIubWFpbnRhaW5TZXNzaW9uU2V0KSB7Ci0gICAgICAgICAgICAgICAgX2NhbGwuc2V0TWFpbnRhaW5TZXNzaW9uKHN1cGVyLm1haW50YWluU2Vzc2lvbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc3VwZXIuY2FjaGVkVXNlcm5hbWUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIF9jYWxsLnNldFVzZXJuYW1lKHN1cGVyLmNhY2hlZFVzZXJuYW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzdXBlci5jYWNoZWRQYXNzd29yZCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgX2NhbGwuc2V0UGFzc3dvcmQoc3VwZXIuY2FjaGVkUGFzc3dvcmQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHN1cGVyLmNhY2hlZEVuZHBvaW50ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBfY2FsbC5zZXRUYXJnZXRFbmRwb2ludEFkZHJlc3Moc3VwZXIuY2FjaGVkRW5kcG9pbnQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHN1cGVyLmNhY2hlZFRpbWVvdXQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIF9jYWxsLnNldFRpbWVvdXQoc3VwZXIuY2FjaGVkVGltZW91dCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc3VwZXIuY2FjaGVkUG9ydE5hbWUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIF9jYWxsLnNldFBvcnROYW1lKHN1cGVyLmNhY2hlZFBvcnROYW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGphdmEudXRpbC5FbnVtZXJhdGlvbiBrZXlzID0gc3VwZXIuY2FjaGVkUHJvcGVydGllcy5rZXlzKCk7Ci0gICAgICAgICAgICB3aGlsZSAoa2V5cy5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgICAgICAgICAgIGphdmEubGFuZy5TdHJpbmcga2V5ID0gKGphdmEubGFuZy5TdHJpbmcpIGtleXMubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICBfY2FsbC5zZXRQcm9wZXJ0eShrZXksIHN1cGVyLmNhY2hlZFByb3BlcnRpZXMuZ2V0KGtleSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gQWxsIHRoZSB0eXBlIG1hcHBpbmcgaW5mb3JtYXRpb24gaXMgcmVnaXN0ZXJlZAotICAgICAgICAgICAgLy8gd2hlbiB0aGUgZmlyc3QgY2FsbCBpcyBtYWRlLgotICAgICAgICAgICAgLy8gVGhlIHR5cGUgbWFwcGluZyBpbmZvcm1hdGlvbiBpcyBhY3R1YWxseSByZWdpc3RlcmVkIGluCi0gICAgICAgICAgICAvLyB0aGUgVHlwZU1hcHBpbmdSZWdpc3RyeSBvZiB0aGUgc2VydmljZSwgd2hpY2gKLSAgICAgICAgICAgIC8vIGlzIHRoZSByZWFzb24gd2h5IHJlZ2lzdHJhdGlvbiBpcyBvbmx5IG5lZWRlZCBmb3IgdGhlIGZpcnN0IGNhbGwuCi0gICAgICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKLSAgICAgICAgICAgICAgICBpZiAoZmlyc3RDYWxsKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gbXVzdCBzZXQgZW5jb2Rpbmcgc3R5bGUgYmVmb3JlIHJlZ2lzdGVyaW5nIHNlcmlhbGl6ZXJzCi0gICAgICAgICAgICAgICAgICAgIF9jYWxsLnNldEVuY29kaW5nU3R5bGUobnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2FjaGVkU2VyRmFjdG9yaWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmxhbmcuQ2xhc3MgY2xzID0gKGphdmEubGFuZy5DbGFzcykgY2FjaGVkU2VyQ2xhc3Nlcy5nZXQoaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lIHFOYW1lID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIGNhY2hlZFNlclFOYW1lcy5nZXQoaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmxhbmcuT2JqZWN0IHggPSBjYWNoZWRTZXJGYWN0b3JpZXMuZ2V0KGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHggaW5zdGFuY2VvZiBDbGFzcykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEubGFuZy5DbGFzcyBzZiA9IChqYXZhLmxhbmcuQ2xhc3MpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZWRTZXJGYWN0b3JpZXMuZ2V0KGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEubGFuZy5DbGFzcyBkZiA9IChqYXZhLmxhbmcuQ2xhc3MpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZWREZXNlckZhY3Rvcmllcy5nZXQoaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NhbGwucmVnaXN0ZXJUeXBlTWFwcGluZyhjbHMsIHFOYW1lLCBzZiwgZGYsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHggaW5zdGFuY2VvZiBqYXZheC54bWwucnBjLmVuY29kaW5nLlNlcmlhbGl6ZXJGYWN0b3J5KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5heGlzLmVuY29kaW5nLlNlcmlhbGl6ZXJGYWN0b3J5IHNmID0gKG9yZy5hcGFjaGUuYXhpcy5lbmNvZGluZy5TZXJpYWxpemVyRmFjdG9yeSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlZFNlckZhY3Rvcmllcy5nZXQoaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5heGlzLmVuY29kaW5nLkRlc2VyaWFsaXplckZhY3RvcnkgZGYgPSAob3JnLmFwYWNoZS5heGlzLmVuY29kaW5nLkRlc2VyaWFsaXplckZhY3RvcnkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZWREZXNlckZhY3Rvcmllcy5nZXQoaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NhbGwucmVnaXN0ZXJUeXBlTWFwcGluZyhjbHMsIHFOYW1lLCBzZiwgZGYsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBfY2FsbDsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoamF2YS5sYW5nLlRocm93YWJsZSBfdCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IG9yZy5hcGFjaGUuYXhpcy5BeGlzRmF1bHQoIkZhaWx1cmUgdHJ5aW5nIHRvIGdldCB0aGUgQ2FsbCBvYmplY3QiLCBfdCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgZmxvYXQgY2FsY3VsYXRlUmVjdEFyZWEob3JnLnRlbXB1cmkuQXJlYVNlcnZpY2UuRGltZW5zaW9ucyBwYXJhbWV0ZXJzKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgaWYgKHN1cGVyLmNhY2hlZEVuZHBvaW50ID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBvcmcuYXBhY2hlLmF4aXMuTm9FbmRQb2ludEV4Y2VwdGlvbigpOwotICAgICAgICB9Ci0gICAgICAgIG9yZy5hcGFjaGUuYXhpcy5jbGllbnQuQ2FsbCBfY2FsbCA9IGNyZWF0ZUNhbGwoKTsKLSAgICAgICAgX2NhbGwuc2V0T3BlcmF0aW9uKF9vcGVyYXRpb25zWzBdKTsKLSAgICAgICAgX2NhbGwuc2V0VXNlU09BUEFjdGlvbih0cnVlKTsKLSAgICAgICAgX2NhbGwuc2V0U09BUEFjdGlvblVSSSgiaHR0cDovL3RlbXB1cmkub3JnL0FyZWFTZXJ2aWNlL05ld09wZXJhdGlvbiIpOwotICAgICAgICBfY2FsbC5zZXRFbmNvZGluZ1N0eWxlKG51bGwpOwotICAgICAgICBfY2FsbC5zZXRQcm9wZXJ0eShvcmcuYXBhY2hlLmF4aXMuY2xpZW50LkNhbGwuU0VORF9UWVBFX0FUVFIsIEJvb2xlYW4uRkFMU0UpOwotICAgICAgICBfY2FsbC5zZXRQcm9wZXJ0eShvcmcuYXBhY2hlLmF4aXMuQXhpc0VuZ2luZS5QUk9QX0RPTVVMVElSRUZTLCBCb29sZWFuLkZBTFNFKTsKLSAgICAgICAgX2NhbGwuc2V0U09BUFZlcnNpb24ob3JnLmFwYWNoZS5heGlzLnNvYXAuU09BUENvbnN0YW50cy5TT0FQMTFfQ09OU1RBTlRTKTsKLSAgICAgICAgX2NhbGwuc2V0T3BlcmF0aW9uTmFtZShuZXcgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSgiIiwgIkNhbGN1bGF0ZVJlY3RBcmVhIikpOwotCi0gICAgICAgIHNldFJlcXVlc3RIZWFkZXJzKF9jYWxsKTsKLSAgICAgICAgc2V0QXR0YWNobWVudHMoX2NhbGwpOwotIHRyeSB7ICAgICAgICBqYXZhLmxhbmcuT2JqZWN0IF9yZXNwID0gX2NhbGwuaW52b2tlKG5ldyBqYXZhLmxhbmcuT2JqZWN0W10ge3BhcmFtZXRlcnN9KTsKLQotICAgICAgICBpZiAoX3Jlc3AgaW5zdGFuY2VvZiBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24pIHsKLSAgICAgICAgICAgIHRocm93IChqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24pX3Jlc3A7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBleHRyYWN0QXR0YWNobWVudHMoX2NhbGwpOwotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gKChqYXZhLmxhbmcuRmxvYXQpIF9yZXNwKS5mbG9hdFZhbHVlKCk7Ci0gICAgICAgICAgICB9IGNhdGNoIChqYXZhLmxhbmcuRXhjZXB0aW9uIF9leGNlcHRpb24pIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gKChqYXZhLmxhbmcuRmxvYXQpIG9yZy5hcGFjaGUuYXhpcy51dGlscy5KYXZhVXRpbHMuY29udmVydChfcmVzcCwgZmxvYXQuY2xhc3MpKS5mbG9hdFZhbHVlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgfSBjYXRjaCAob3JnLmFwYWNoZS5heGlzLkF4aXNGYXVsdCBheGlzRmF1bHRFeGNlcHRpb24pIHsKLSAgdGhyb3cgYXhpc0ZhdWx0RXhjZXB0aW9uOwotfQotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UxL29yZy90ZW1wdXJpL0FyZWFTZXJ2aWNlL0FyZWFTZXJ2aWNlX1BvcnRUeXBlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTEvb3JnL3RlbXB1cmkvQXJlYVNlcnZpY2UvQXJlYVNlcnZpY2VfUG9ydFR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmE2NWY2Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTEvb3JnL3RlbXB1cmkvQXJlYVNlcnZpY2UvQXJlYVNlcnZpY2VfUG9ydFR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqCi0gKiBBcmVhU2VydmljZV9Qb3J0VHlwZS5qYXZhCi0gKgotICogVGhpcyBmaWxlIHdhcyBhdXRvLWdlbmVyYXRlZCBmcm9tIFdTREwKLSAqIGJ5IHRoZSBBcGFjaGUgQXhpcyAxLjIuMSBKdW4gMTQsIDIwMDUgKDA5OjE1OjU3IEVEVCkgV1NETDJKYXZhIGVtaXR0ZXIuCi0gKi8KLQotcGFja2FnZSBvcmcudGVtcHVyaS5BcmVhU2VydmljZTsKLQotcHVibGljIGludGVyZmFjZSBBcmVhU2VydmljZV9Qb3J0VHlwZSBleHRlbmRzIGphdmEucm1pLlJlbW90ZSB7Ci0gICAgcHVibGljIGZsb2F0IGNhbGN1bGF0ZVJlY3RBcmVhKG9yZy50ZW1wdXJpLkFyZWFTZXJ2aWNlLkRpbWVuc2lvbnMgcGFyYW1ldGVycykgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvZGF0YS9heGlzU291cmNlMS9vcmcvdGVtcHVyaS9BcmVhU2VydmljZS9BcmVhU2VydmljZV9TZXJ2aWNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTEvb3JnL3RlbXB1cmkvQXJlYVNlcnZpY2UvQXJlYVNlcnZpY2VfU2VydmljZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDA5MzI1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvZGF0YS9heGlzU291cmNlMS9vcmcvdGVtcHVyaS9BcmVhU2VydmljZS9BcmVhU2VydmljZV9TZXJ2aWNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKgotICogQXJlYVNlcnZpY2VfU2VydmljZS5qYXZhCi0gKgotICogVGhpcyBmaWxlIHdhcyBhdXRvLWdlbmVyYXRlZCBmcm9tIFdTREwKLSAqIGJ5IHRoZSBBcGFjaGUgQXhpcyAxLjIuMSBKdW4gMTQsIDIwMDUgKDA5OjE1OjU3IEVEVCkgV1NETDJKYXZhIGVtaXR0ZXIuCi0gKi8KLQotcGFja2FnZSBvcmcudGVtcHVyaS5BcmVhU2VydmljZTsKLQotcHVibGljIGludGVyZmFjZSBBcmVhU2VydmljZV9TZXJ2aWNlIGV4dGVuZHMgamF2YXgueG1sLnJwYy5TZXJ2aWNlIHsKLSAgICBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRBcmVhU2VydmljZVNPQVBBZGRyZXNzKCk7Ci0KLSAgICBwdWJsaWMgb3JnLnRlbXB1cmkuQXJlYVNlcnZpY2UuQXJlYVNlcnZpY2VfUG9ydFR5cGUgZ2V0QXJlYVNlcnZpY2VTT0FQKCkgdGhyb3dzIGphdmF4LnhtbC5ycGMuU2VydmljZUV4Y2VwdGlvbjsKLQotICAgIHB1YmxpYyBvcmcudGVtcHVyaS5BcmVhU2VydmljZS5BcmVhU2VydmljZV9Qb3J0VHlwZSBnZXRBcmVhU2VydmljZVNPQVAoamF2YS5uZXQuVVJMIHBvcnRBZGRyZXNzKSB0aHJvd3MgamF2YXgueG1sLnJwYy5TZXJ2aWNlRXhjZXB0aW9uOwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UxL29yZy90ZW1wdXJpL0FyZWFTZXJ2aWNlL0FyZWFTZXJ2aWNlX1NlcnZpY2VMb2NhdG9yLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTEvb3JnL3RlbXB1cmkvQXJlYVNlcnZpY2UvQXJlYVNlcnZpY2VfU2VydmljZUxvY2F0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjdkZmMwZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTEvb3JnL3RlbXB1cmkvQXJlYVNlcnZpY2UvQXJlYVNlcnZpY2VfU2VydmljZUxvY2F0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKgotICogQXJlYVNlcnZpY2VfU2VydmljZUxvY2F0b3IuamF2YQotICoKLSAqIFRoaXMgZmlsZSB3YXMgYXV0by1nZW5lcmF0ZWQgZnJvbSBXU0RMCi0gKiBieSB0aGUgQXBhY2hlIEF4aXMgMS4yLjEgSnVuIDE0LCAyMDA1ICgwOToxNTo1NyBFRFQpIFdTREwySmF2YSBlbWl0dGVyLgotICovCi0KLXBhY2thZ2Ugb3JnLnRlbXB1cmkuQXJlYVNlcnZpY2U7Ci0KLXB1YmxpYyBjbGFzcyBBcmVhU2VydmljZV9TZXJ2aWNlTG9jYXRvciBleHRlbmRzIG9yZy5hcGFjaGUuYXhpcy5jbGllbnQuU2VydmljZSBpbXBsZW1lbnRzIG9yZy50ZW1wdXJpLkFyZWFTZXJ2aWNlLkFyZWFTZXJ2aWNlX1NlcnZpY2UgewotCi0gICAgcHVibGljIEFyZWFTZXJ2aWNlX1NlcnZpY2VMb2NhdG9yKCkgewotICAgIH0KLQotCi0gICAgcHVibGljIEFyZWFTZXJ2aWNlX1NlcnZpY2VMb2NhdG9yKG9yZy5hcGFjaGUuYXhpcy5FbmdpbmVDb25maWd1cmF0aW9uIGNvbmZpZykgewotICAgICAgICBzdXBlcihjb25maWcpOwotICAgIH0KLQotICAgIHB1YmxpYyBBcmVhU2VydmljZV9TZXJ2aWNlTG9jYXRvcihqYXZhLmxhbmcuU3RyaW5nIHdzZGxMb2MsIGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUgc05hbWUpIHRocm93cyBqYXZheC54bWwucnBjLlNlcnZpY2VFeGNlcHRpb24gewotICAgICAgICBzdXBlcih3c2RsTG9jLCBzTmFtZSk7Ci0gICAgfQotCi0gICAgLy8gVXNlIHRvIGdldCBhIHByb3h5IGNsYXNzIGZvciBBcmVhU2VydmljZVNPQVAKLSAgICBwcml2YXRlIGphdmEubGFuZy5TdHJpbmcgQXJlYVNlcnZpY2VTT0FQX2FkZHJlc3MgPSAiaHR0cDovL2xvY2FsaG9zdDo4MDgwL0FyZWFQcm9qL3NlcnZpY2VzL0FyZWFTZXJ2aWNlU09BUCI7Ci0KLSAgICBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRBcmVhU2VydmljZVNPQVBBZGRyZXNzKCkgewotICAgICAgICByZXR1cm4gQXJlYVNlcnZpY2VTT0FQX2FkZHJlc3M7Ci0gICAgfQotCi0gICAgLy8gVGhlIFdTREQgc2VydmljZSBuYW1lIGRlZmF1bHRzIHRvIHRoZSBwb3J0IG5hbWUuCi0gICAgcHJpdmF0ZSBqYXZhLmxhbmcuU3RyaW5nIEFyZWFTZXJ2aWNlU09BUFdTRERTZXJ2aWNlTmFtZSA9ICJBcmVhU2VydmljZVNPQVAiOwotCi0gICAgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0QXJlYVNlcnZpY2VTT0FQV1NERFNlcnZpY2VOYW1lKCkgewotICAgICAgICByZXR1cm4gQXJlYVNlcnZpY2VTT0FQV1NERFNlcnZpY2VOYW1lOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEFyZWFTZXJ2aWNlU09BUFdTRERTZXJ2aWNlTmFtZShqYXZhLmxhbmcuU3RyaW5nIG5hbWUpIHsKLSAgICAgICAgQXJlYVNlcnZpY2VTT0FQV1NERFNlcnZpY2VOYW1lID0gbmFtZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgb3JnLnRlbXB1cmkuQXJlYVNlcnZpY2UuQXJlYVNlcnZpY2VfUG9ydFR5cGUgZ2V0QXJlYVNlcnZpY2VTT0FQKCkgdGhyb3dzIGphdmF4LnhtbC5ycGMuU2VydmljZUV4Y2VwdGlvbiB7Ci0gICAgICAgamF2YS5uZXQuVVJMIGVuZHBvaW50OwotICAgICAgICB0cnkgewotICAgICAgICAgICAgZW5kcG9pbnQgPSBuZXcgamF2YS5uZXQuVVJMKEFyZWFTZXJ2aWNlU09BUF9hZGRyZXNzKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBqYXZheC54bWwucnBjLlNlcnZpY2VFeGNlcHRpb24oZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGdldEFyZWFTZXJ2aWNlU09BUChlbmRwb2ludCk7Ci0gICAgfQotCi0gICAgcHVibGljIG9yZy50ZW1wdXJpLkFyZWFTZXJ2aWNlLkFyZWFTZXJ2aWNlX1BvcnRUeXBlIGdldEFyZWFTZXJ2aWNlU09BUChqYXZhLm5ldC5VUkwgcG9ydEFkZHJlc3MpIHRocm93cyBqYXZheC54bWwucnBjLlNlcnZpY2VFeGNlcHRpb24gewotICAgICAgICB0cnkgewotICAgICAgICAgICAgb3JnLnRlbXB1cmkuQXJlYVNlcnZpY2UuQXJlYVNlcnZpY2VTT0FQU3R1YiBfc3R1YiA9IG5ldyBvcmcudGVtcHVyaS5BcmVhU2VydmljZS5BcmVhU2VydmljZVNPQVBTdHViKHBvcnRBZGRyZXNzLCB0aGlzKTsKLSAgICAgICAgICAgIF9zdHViLnNldFBvcnROYW1lKGdldEFyZWFTZXJ2aWNlU09BUFdTRERTZXJ2aWNlTmFtZSgpKTsKLSAgICAgICAgICAgIHJldHVybiBfc3R1YjsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAob3JnLmFwYWNoZS5heGlzLkF4aXNGYXVsdCBlKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEFyZWFTZXJ2aWNlU09BUEVuZHBvaW50QWRkcmVzcyhqYXZhLmxhbmcuU3RyaW5nIGFkZHJlc3MpIHsKLSAgICAgICAgQXJlYVNlcnZpY2VTT0FQX2FkZHJlc3MgPSBhZGRyZXNzOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEZvciB0aGUgZ2l2ZW4gaW50ZXJmYWNlLCBnZXQgdGhlIHN0dWIgaW1wbGVtZW50YXRpb24uCi0gICAgICogSWYgdGhpcyBzZXJ2aWNlIGhhcyBubyBwb3J0IGZvciB0aGUgZ2l2ZW4gaW50ZXJmYWNlLAotICAgICAqIHRoZW4gU2VydmljZUV4Y2VwdGlvbiBpcyB0aHJvd24uCi0gICAgICovCi0gICAgcHVibGljIGphdmEucm1pLlJlbW90ZSBnZXRQb3J0KENsYXNzIHNlcnZpY2VFbmRwb2ludEludGVyZmFjZSkgdGhyb3dzIGphdmF4LnhtbC5ycGMuU2VydmljZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBpZiAob3JnLnRlbXB1cmkuQXJlYVNlcnZpY2UuQXJlYVNlcnZpY2VfUG9ydFR5cGUuY2xhc3MuaXNBc3NpZ25hYmxlRnJvbShzZXJ2aWNlRW5kcG9pbnRJbnRlcmZhY2UpKSB7Ci0gICAgICAgICAgICAgICAgb3JnLnRlbXB1cmkuQXJlYVNlcnZpY2UuQXJlYVNlcnZpY2VTT0FQU3R1YiBfc3R1YiA9IG5ldyBvcmcudGVtcHVyaS5BcmVhU2VydmljZS5BcmVhU2VydmljZVNPQVBTdHViKG5ldyBqYXZhLm5ldC5VUkwoQXJlYVNlcnZpY2VTT0FQX2FkZHJlc3MpLCB0aGlzKTsKLSAgICAgICAgICAgICAgICBfc3R1Yi5zZXRQb3J0TmFtZShnZXRBcmVhU2VydmljZVNPQVBXU0REU2VydmljZU5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIF9zdHViOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChqYXZhLmxhbmcuVGhyb3dhYmxlIHQpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBqYXZheC54bWwucnBjLlNlcnZpY2VFeGNlcHRpb24odCk7Ci0gICAgICAgIH0KLSAgICAgICAgdGhyb3cgbmV3IGphdmF4LnhtbC5ycGMuU2VydmljZUV4Y2VwdGlvbigiVGhlcmUgaXMgbm8gc3R1YiBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIGludGVyZmFjZTogICIgKyAoc2VydmljZUVuZHBvaW50SW50ZXJmYWNlID09IG51bGwgPyAibnVsbCIgOiBzZXJ2aWNlRW5kcG9pbnRJbnRlcmZhY2UuZ2V0TmFtZSgpKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRm9yIHRoZSBnaXZlbiBpbnRlcmZhY2UsIGdldCB0aGUgc3R1YiBpbXBsZW1lbnRhdGlvbi4KLSAgICAgKiBJZiB0aGlzIHNlcnZpY2UgaGFzIG5vIHBvcnQgZm9yIHRoZSBnaXZlbiBpbnRlcmZhY2UsCi0gICAgICogdGhlbiBTZXJ2aWNlRXhjZXB0aW9uIGlzIHRocm93bi4KLSAgICAgKi8KLSAgICBwdWJsaWMgamF2YS5ybWkuUmVtb3RlIGdldFBvcnQoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSBwb3J0TmFtZSwgQ2xhc3Mgc2VydmljZUVuZHBvaW50SW50ZXJmYWNlKSB0aHJvd3MgamF2YXgueG1sLnJwYy5TZXJ2aWNlRXhjZXB0aW9uIHsKLSAgICAgICAgaWYgKHBvcnROYW1lID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBnZXRQb3J0KHNlcnZpY2VFbmRwb2ludEludGVyZmFjZSk7Ci0gICAgICAgIH0KLSAgICAgICAgamF2YS5sYW5nLlN0cmluZyBpbnB1dFBvcnROYW1lID0gcG9ydE5hbWUuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgICAgIGlmICgiQXJlYVNlcnZpY2VTT0FQIi5lcXVhbHMoaW5wdXRQb3J0TmFtZSkpIHsKLSAgICAgICAgICAgIHJldHVybiBnZXRBcmVhU2VydmljZVNPQVAoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlICB7Ci0gICAgICAgICAgICBqYXZhLnJtaS5SZW1vdGUgX3N0dWIgPSBnZXRQb3J0KHNlcnZpY2VFbmRwb2ludEludGVyZmFjZSk7Ci0gICAgICAgICAgICAoKG9yZy5hcGFjaGUuYXhpcy5jbGllbnQuU3R1YikgX3N0dWIpLnNldFBvcnROYW1lKHBvcnROYW1lKTsKLSAgICAgICAgICAgIHJldHVybiBfc3R1YjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lIGdldFNlcnZpY2VOYW1lKCkgewotICAgICAgICByZXR1cm4gbmV3IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUoImh0dHA6Ly90ZW1wdXJpLm9yZy9BcmVhU2VydmljZS8iLCAiQXJlYVNlcnZpY2UiKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGphdmEudXRpbC5IYXNoU2V0IHBvcnRzID0gbnVsbDsKLQotICAgIHB1YmxpYyBqYXZhLnV0aWwuSXRlcmF0b3IgZ2V0UG9ydHMoKSB7Ci0gICAgICAgIGlmIChwb3J0cyA9PSBudWxsKSB7Ci0gICAgICAgICAgICBwb3J0cyA9IG5ldyBqYXZhLnV0aWwuSGFzaFNldCgpOwotICAgICAgICAgICAgcG9ydHMuYWRkKG5ldyBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKCJodHRwOi8vdGVtcHVyaS5vcmcvQXJlYVNlcnZpY2UvIiwgIkFyZWFTZXJ2aWNlU09BUCIpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcG9ydHMuaXRlcmF0b3IoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAqIFNldCB0aGUgZW5kcG9pbnQgYWRkcmVzcyBmb3IgdGhlIHNwZWNpZmllZCBwb3J0IG5hbWUuCi0gICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRFbmRwb2ludEFkZHJlc3MoamF2YS5sYW5nLlN0cmluZyBwb3J0TmFtZSwgamF2YS5sYW5nLlN0cmluZyBhZGRyZXNzKSB0aHJvd3MgamF2YXgueG1sLnJwYy5TZXJ2aWNlRXhjZXB0aW9uIHsKLSAgICAgICAgCi1pZiAoIkFyZWFTZXJ2aWNlU09BUCIuZXF1YWxzKHBvcnROYW1lKSkgewotICAgICAgICAgICAgc2V0QXJlYVNlcnZpY2VTT0FQRW5kcG9pbnRBZGRyZXNzKGFkZHJlc3MpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgCi17IC8vIFVua25vd24gUG9ydCBOYW1lCi0gICAgICAgICAgICB0aHJvdyBuZXcgamF2YXgueG1sLnJwYy5TZXJ2aWNlRXhjZXB0aW9uKCIgQ2Fubm90IHNldCBFbmRwb2ludCBBZGRyZXNzIGZvciBVbmtub3duIFBvcnQiICsgcG9ydE5hbWUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgKiBTZXQgdGhlIGVuZHBvaW50IGFkZHJlc3MgZm9yIHRoZSBzcGVjaWZpZWQgcG9ydCBuYW1lLgotICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0RW5kcG9pbnRBZGRyZXNzKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUgcG9ydE5hbWUsIGphdmEubGFuZy5TdHJpbmcgYWRkcmVzcykgdGhyb3dzIGphdmF4LnhtbC5ycGMuU2VydmljZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHNldEVuZHBvaW50QWRkcmVzcyhwb3J0TmFtZS5nZXRMb2NhbFBhcnQoKSwgYWRkcmVzcyk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTEvb3JnL3RlbXB1cmkvQXJlYVNlcnZpY2UvRGltZW5zaW9ucy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UxL29yZy90ZW1wdXJpL0FyZWFTZXJ2aWNlL0RpbWVuc2lvbnMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTMxMGY5NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTEvb3JnL3RlbXB1cmkvQXJlYVNlcnZpY2UvRGltZW5zaW9ucy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqCi0gKiBEaW1lbnNpb25zLmphdmEKLSAqCi0gKiBUaGlzIGZpbGUgd2FzIGF1dG8tZ2VuZXJhdGVkIGZyb20gV1NETAotICogYnkgdGhlIEFwYWNoZSBBeGlzIDEuMi4xIEp1biAxNCwgMjAwNSAoMDk6MTU6NTcgRURUKSBXU0RMMkphdmEgZW1pdHRlci4KLSAqLwotCi1wYWNrYWdlIG9yZy50ZW1wdXJpLkFyZWFTZXJ2aWNlOwotCi1wdWJsaWMgY2xhc3MgRGltZW5zaW9ucyAgaW1wbGVtZW50cyBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7Ci0gICAgcHJpdmF0ZSBmbG9hdCB3aWR0aDsKLSAgICBwcml2YXRlIGZsb2F0IGhlaWdodDsKLQotICAgIHB1YmxpYyBEaW1lbnNpb25zKCkgewotICAgIH0KLQotICAgIHB1YmxpYyBEaW1lbnNpb25zKAotICAgICAgICAgICBmbG9hdCB3aWR0aCwKLSAgICAgICAgICAgZmxvYXQgaGVpZ2h0KSB7Ci0gICAgICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDsKLSAgICAgICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgfQotCi0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSB3aWR0aCB2YWx1ZSBmb3IgdGhpcyBEaW1lbnNpb25zLgotICAgICAqIAotICAgICAqIEByZXR1cm4gd2lkdGgKLSAgICAgKi8KLSAgICBwdWJsaWMgZmxvYXQgZ2V0V2lkdGgoKSB7Ci0gICAgICAgIHJldHVybiB3aWR0aDsKLSAgICB9Ci0KLQotICAgIC8qKgotICAgICAqIFNldHMgdGhlIHdpZHRoIHZhbHVlIGZvciB0aGlzIERpbWVuc2lvbnMuCi0gICAgICogCi0gICAgICogQHBhcmFtIHdpZHRoCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0V2lkdGgoZmxvYXQgd2lkdGgpIHsKLSAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoOwotICAgIH0KLQotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgaGVpZ2h0IHZhbHVlIGZvciB0aGlzIERpbWVuc2lvbnMuCi0gICAgICogCi0gICAgICogQHJldHVybiBoZWlnaHQKLSAgICAgKi8KLSAgICBwdWJsaWMgZmxvYXQgZ2V0SGVpZ2h0KCkgewotICAgICAgICByZXR1cm4gaGVpZ2h0OwotICAgIH0KLQotCi0gICAgLyoqCi0gICAgICogU2V0cyB0aGUgaGVpZ2h0IHZhbHVlIGZvciB0aGlzIERpbWVuc2lvbnMuCi0gICAgICogCi0gICAgICogQHBhcmFtIGhlaWdodAotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldEhlaWdodChmbG9hdCBoZWlnaHQpIHsKLSAgICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBqYXZhLmxhbmcuT2JqZWN0IF9fZXF1YWxzQ2FsYyA9IG51bGw7Ci0gICAgcHVibGljIHN5bmNocm9uaXplZCBib29sZWFuIGVxdWFscyhqYXZhLmxhbmcuT2JqZWN0IG9iaikgewotICAgICAgICBpZiAoIShvYmogaW5zdGFuY2VvZiBEaW1lbnNpb25zKSkgcmV0dXJuIGZhbHNlOwotICAgICAgICBEaW1lbnNpb25zIG90aGVyID0gKERpbWVuc2lvbnMpIG9iajsKLSAgICAgICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICh0aGlzID09IG9iaikgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmIChfX2VxdWFsc0NhbGMgIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIChfX2VxdWFsc0NhbGMgPT0gb2JqKTsKLSAgICAgICAgfQotICAgICAgICBfX2VxdWFsc0NhbGMgPSBvYmo7Ci0gICAgICAgIGJvb2xlYW4gX2VxdWFsczsKLSAgICAgICAgX2VxdWFscyA9IHRydWUgJiYgCi0gICAgICAgICAgICB0aGlzLndpZHRoID09IG90aGVyLmdldFdpZHRoKCkgJiYKLSAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID09IG90aGVyLmdldEhlaWdodCgpOwotICAgICAgICBfX2VxdWFsc0NhbGMgPSBudWxsOwotICAgICAgICByZXR1cm4gX2VxdWFsczsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGJvb2xlYW4gX19oYXNoQ29kZUNhbGMgPSBmYWxzZTsKLSAgICBwdWJsaWMgc3luY2hyb25pemVkIGludCBoYXNoQ29kZSgpIHsKLSAgICAgICAgaWYgKF9faGFzaENvZGVDYWxjKSB7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgICAgICBfX2hhc2hDb2RlQ2FsYyA9IHRydWU7Ci0gICAgICAgIGludCBfaGFzaENvZGUgPSAxOwotICAgICAgICBfaGFzaENvZGUgKz0gbmV3IEZsb2F0KGdldFdpZHRoKCkpLmhhc2hDb2RlKCk7Ci0gICAgICAgIF9oYXNoQ29kZSArPSBuZXcgRmxvYXQoZ2V0SGVpZ2h0KCkpLmhhc2hDb2RlKCk7Ci0gICAgICAgIF9faGFzaENvZGVDYWxjID0gZmFsc2U7Ci0gICAgICAgIHJldHVybiBfaGFzaENvZGU7Ci0gICAgfQotCi0gICAgLy8gVHlwZSBtZXRhZGF0YQotICAgIHByaXZhdGUgc3RhdGljIG9yZy5hcGFjaGUuYXhpcy5kZXNjcmlwdGlvbi5UeXBlRGVzYyB0eXBlRGVzYyA9Ci0gICAgICAgIG5ldyBvcmcuYXBhY2hlLmF4aXMuZGVzY3JpcHRpb24uVHlwZURlc2MoRGltZW5zaW9ucy5jbGFzcywgdHJ1ZSk7Ci0KLSAgICBzdGF0aWMgewotICAgICAgICB0eXBlRGVzYy5zZXRYbWxUeXBlKG5ldyBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKCJodHRwOi8vdGVtcHVyaS5vcmcvQXJlYVNlcnZpY2UvIiwgImRpbWVuc2lvbnMiKSk7Ci0gICAgICAgIG9yZy5hcGFjaGUuYXhpcy5kZXNjcmlwdGlvbi5FbGVtZW50RGVzYyBlbGVtRmllbGQgPSBuZXcgb3JnLmFwYWNoZS5heGlzLmRlc2NyaXB0aW9uLkVsZW1lbnREZXNjKCk7Ci0gICAgICAgIGVsZW1GaWVsZC5zZXRGaWVsZE5hbWUoIndpZHRoIik7Ci0gICAgICAgIGVsZW1GaWVsZC5zZXRYbWxOYW1lKG5ldyBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKCIiLCAid2lkdGgiKSk7Ci0gICAgICAgIGVsZW1GaWVsZC5zZXRYbWxUeXBlKG5ldyBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIsICJmbG9hdCIpKTsKLSAgICAgICAgZWxlbUZpZWxkLnNldE5pbGxhYmxlKGZhbHNlKTsKLSAgICAgICAgdHlwZURlc2MuYWRkRmllbGREZXNjKGVsZW1GaWVsZCk7Ci0gICAgICAgIGVsZW1GaWVsZCA9IG5ldyBvcmcuYXBhY2hlLmF4aXMuZGVzY3JpcHRpb24uRWxlbWVudERlc2MoKTsKLSAgICAgICAgZWxlbUZpZWxkLnNldEZpZWxkTmFtZSgiaGVpZ2h0Iik7Ci0gICAgICAgIGVsZW1GaWVsZC5zZXRYbWxOYW1lKG5ldyBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKCIiLCAiaGVpZ2h0IikpOwotICAgICAgICBlbGVtRmllbGQuc2V0WG1sVHlwZShuZXcgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSgiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiLCAiZmxvYXQiKSk7Ci0gICAgICAgIGVsZW1GaWVsZC5zZXROaWxsYWJsZShmYWxzZSk7Ci0gICAgICAgIHR5cGVEZXNjLmFkZEZpZWxkRGVzYyhlbGVtRmllbGQpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybiB0eXBlIG1ldGFkYXRhIG9iamVjdAotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgb3JnLmFwYWNoZS5heGlzLmRlc2NyaXB0aW9uLlR5cGVEZXNjIGdldFR5cGVEZXNjKCkgewotICAgICAgICByZXR1cm4gdHlwZURlc2M7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0IEN1c3RvbSBTZXJpYWxpemVyCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBvcmcuYXBhY2hlLmF4aXMuZW5jb2RpbmcuU2VyaWFsaXplciBnZXRTZXJpYWxpemVyKAotICAgICAgICAgICBqYXZhLmxhbmcuU3RyaW5nIG1lY2hUeXBlLCAKLSAgICAgICAgICAgamF2YS5sYW5nLkNsYXNzIF9qYXZhVHlwZSwgIAotICAgICAgICAgICBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lIF94bWxUeXBlKSB7Ci0gICAgICAgIHJldHVybiAKLSAgICAgICAgICBuZXcgIG9yZy5hcGFjaGUuYXhpcy5lbmNvZGluZy5zZXIuQmVhblNlcmlhbGl6ZXIoCi0gICAgICAgICAgICBfamF2YVR5cGUsIF94bWxUeXBlLCB0eXBlRGVzYyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0IEN1c3RvbSBEZXNlcmlhbGl6ZXIKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIG9yZy5hcGFjaGUuYXhpcy5lbmNvZGluZy5EZXNlcmlhbGl6ZXIgZ2V0RGVzZXJpYWxpemVyKAotICAgICAgICAgICBqYXZhLmxhbmcuU3RyaW5nIG1lY2hUeXBlLCAKLSAgICAgICAgICAgamF2YS5sYW5nLkNsYXNzIF9qYXZhVHlwZSwgIAotICAgICAgICAgICBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lIF94bWxUeXBlKSB7Ci0gICAgICAgIHJldHVybiAKLSAgICAgICAgICBuZXcgIG9yZy5hcGFjaGUuYXhpcy5lbmNvZGluZy5zZXIuQmVhbkRlc2VyaWFsaXplcigKLSAgICAgICAgICAgIF9qYXZhVHlwZSwgX3htbFR5cGUsIHR5cGVEZXNjKTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvZGF0YS9heGlzU291cmNlMi93dHAvQ29udmVydGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTIvd3RwL0NvbnZlcnRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkY2E3ZDQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvZGF0YS9heGlzU291cmNlMi93dHAvQ29udmVydGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKgotICogQ29udmVydGVyLmphdmEKLSAqCi0gKiBUaGlzIGZpbGUgd2FzIGF1dG8tZ2VuZXJhdGVkIGZyb20gV1NETAotICogYnkgdGhlIEFwYWNoZSBBeGlzIDEuMi4xIEp1biAxNCwgMjAwNSAoMDk6MTU6NTcgRURUKSBXU0RMMkphdmEgZW1pdHRlci4KLSAqLwotCi1wYWNrYWdlIHd0cDsKLQotcHVibGljIGludGVyZmFjZSBDb252ZXJ0ZXIgZXh0ZW5kcyBqYXZhLnJtaS5SZW1vdGUgewotICAgIHB1YmxpYyBmbG9hdCBjZWxzaXVzVG9GYXJlbmhlaXQoZmxvYXQgY2Vsc2l1cykgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKLSAgICBwdWJsaWMgZmxvYXQgZmFyZW5oZWl0VG9DZWxzaXVzKGZsb2F0IGZhcmVuaGVpdCkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvZGF0YS9heGlzU291cmNlMi93dHAvQ29udmVydGVyUHJveHkuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvZGF0YS9heGlzU291cmNlMi93dHAvQ29udmVydGVyUHJveHkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWFhN2M0Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTIvd3RwL0NvbnZlcnRlclByb3h5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugd3RwOwotCi1wdWJsaWMgY2xhc3MgQ29udmVydGVyUHJveHkgaW1wbGVtZW50cyB3dHAuQ29udmVydGVyIHsKLSAgcHJpdmF0ZSBTdHJpbmcgX2VuZHBvaW50ID0gbnVsbDsKLSAgcHJpdmF0ZSB3dHAuQ29udmVydGVyIGNvbnZlcnRlciA9IG51bGw7Ci0gIAotICBwdWJsaWMgQ29udmVydGVyUHJveHkoKSB7Ci0gICAgX2luaXRDb252ZXJ0ZXJQcm94eSgpOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgX2luaXRDb252ZXJ0ZXJQcm94eSgpIHsKLSAgICB0cnkgewotICAgICAgY29udmVydGVyID0gKG5ldyB3dHAuQ29udmVydGVyU2VydmljZUxvY2F0b3IoKSkuZ2V0Q29udmVydGVyKCk7Ci0gICAgICBpZiAoY29udmVydGVyICE9IG51bGwpIHsKLSAgICAgICAgaWYgKF9lbmRwb2ludCAhPSBudWxsKQotICAgICAgICAgICgoamF2YXgueG1sLnJwYy5TdHViKWNvbnZlcnRlcikuX3NldFByb3BlcnR5KCJqYXZheC54bWwucnBjLnNlcnZpY2UuZW5kcG9pbnQuYWRkcmVzcyIsIF9lbmRwb2ludCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBfZW5kcG9pbnQgPSAoU3RyaW5nKSgoamF2YXgueG1sLnJwYy5TdHViKWNvbnZlcnRlcikuX2dldFByb3BlcnR5KCJqYXZheC54bWwucnBjLnNlcnZpY2UuZW5kcG9pbnQuYWRkcmVzcyIpOwotICAgICAgfQotICAgICAgCi0gICAgfQotICAgIGNhdGNoIChqYXZheC54bWwucnBjLlNlcnZpY2VFeGNlcHRpb24gc2VydmljZUV4Y2VwdGlvbikge30KLSAgfQotICAKLSAgcHVibGljIFN0cmluZyBnZXRFbmRwb2ludCgpIHsKLSAgICByZXR1cm4gX2VuZHBvaW50OwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBzZXRFbmRwb2ludChTdHJpbmcgZW5kcG9pbnQpIHsKLSAgICBfZW5kcG9pbnQgPSBlbmRwb2ludDsKLSAgICBpZiAoY29udmVydGVyICE9IG51bGwpCi0gICAgICAoKGphdmF4LnhtbC5ycGMuU3R1Yiljb252ZXJ0ZXIpLl9zZXRQcm9wZXJ0eSgiamF2YXgueG1sLnJwYy5zZXJ2aWNlLmVuZHBvaW50LmFkZHJlc3MiLCBfZW5kcG9pbnQpOwotICAgIAotICB9Ci0gIAotICBwdWJsaWMgd3RwLkNvbnZlcnRlciBnZXRDb252ZXJ0ZXIoKSB7Ci0gICAgaWYgKGNvbnZlcnRlciA9PSBudWxsKQotICAgICAgX2luaXRDb252ZXJ0ZXJQcm94eSgpOwotICAgIHJldHVybiBjb252ZXJ0ZXI7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmbG9hdCBjZWxzaXVzVG9GYXJlbmhlaXQoZmxvYXQgY2Vsc2l1cykgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbnsKLSAgICBpZiAoY29udmVydGVyID09IG51bGwpCi0gICAgICBfaW5pdENvbnZlcnRlclByb3h5KCk7Ci0gICAgcmV0dXJuIGNvbnZlcnRlci5jZWxzaXVzVG9GYXJlbmhlaXQoY2Vsc2l1cyk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBmbG9hdCBmYXJlbmhlaXRUb0NlbHNpdXMoZmxvYXQgZmFyZW5oZWl0KSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uewotICAgIGlmIChjb252ZXJ0ZXIgPT0gbnVsbCkKLSAgICAgIF9pbml0Q29udmVydGVyUHJveHkoKTsKLSAgICByZXR1cm4gY29udmVydGVyLmZhcmVuaGVpdFRvQ2Vsc2l1cyhmYXJlbmhlaXQpOwotICB9Ci0gIAotICAKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTIvd3RwL0NvbnZlcnRlclNlcnZpY2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvZGF0YS9heGlzU291cmNlMi93dHAvQ29udmVydGVyU2VydmljZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZGFhZmUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvZGF0YS9heGlzU291cmNlMi93dHAvQ29udmVydGVyU2VydmljZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioKLSAqIENvbnZlcnRlclNlcnZpY2UuamF2YQotICoKLSAqIFRoaXMgZmlsZSB3YXMgYXV0by1nZW5lcmF0ZWQgZnJvbSBXU0RMCi0gKiBieSB0aGUgQXBhY2hlIEF4aXMgMS4yLjEgSnVuIDE0LCAyMDA1ICgwOToxNTo1NyBFRFQpIFdTREwySmF2YSBlbWl0dGVyLgotICovCi0KLXBhY2thZ2Ugd3RwOwotCi1wdWJsaWMgaW50ZXJmYWNlIENvbnZlcnRlclNlcnZpY2UgZXh0ZW5kcyBqYXZheC54bWwucnBjLlNlcnZpY2UgewotICAgIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldENvbnZlcnRlckFkZHJlc3MoKTsKLQotICAgIHB1YmxpYyB3dHAuQ29udmVydGVyIGdldENvbnZlcnRlcigpIHRocm93cyBqYXZheC54bWwucnBjLlNlcnZpY2VFeGNlcHRpb247Ci0KLSAgICBwdWJsaWMgd3RwLkNvbnZlcnRlciBnZXRDb252ZXJ0ZXIoamF2YS5uZXQuVVJMIHBvcnRBZGRyZXNzKSB0aHJvd3MgamF2YXgueG1sLnJwYy5TZXJ2aWNlRXhjZXB0aW9uOwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UyL3d0cC9Db252ZXJ0ZXJTZXJ2aWNlTG9jYXRvci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UyL3d0cC9Db252ZXJ0ZXJTZXJ2aWNlTG9jYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYWY1Y2Q3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvZGF0YS9heGlzU291cmNlMi93dHAvQ29udmVydGVyU2VydmljZUxvY2F0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKgotICogQ29udmVydGVyU2VydmljZUxvY2F0b3IuamF2YQotICoKLSAqIFRoaXMgZmlsZSB3YXMgYXV0by1nZW5lcmF0ZWQgZnJvbSBXU0RMCi0gKiBieSB0aGUgQXBhY2hlIEF4aXMgMS4yLjEgSnVuIDE0LCAyMDA1ICgwOToxNTo1NyBFRFQpIFdTREwySmF2YSBlbWl0dGVyLgotICovCi0KLXBhY2thZ2Ugd3RwOwotCi1wdWJsaWMgY2xhc3MgQ29udmVydGVyU2VydmljZUxvY2F0b3IgZXh0ZW5kcyBvcmcuYXBhY2hlLmF4aXMuY2xpZW50LlNlcnZpY2UgaW1wbGVtZW50cyB3dHAuQ29udmVydGVyU2VydmljZSB7Ci0KLSAgICBwdWJsaWMgQ29udmVydGVyU2VydmljZUxvY2F0b3IoKSB7Ci0gICAgfQotCi0KLSAgICBwdWJsaWMgQ29udmVydGVyU2VydmljZUxvY2F0b3Iob3JnLmFwYWNoZS5heGlzLkVuZ2luZUNvbmZpZ3VyYXRpb24gY29uZmlnKSB7Ci0gICAgICAgIHN1cGVyKGNvbmZpZyk7Ci0gICAgfQotCi0gICAgcHVibGljIENvbnZlcnRlclNlcnZpY2VMb2NhdG9yKGphdmEubGFuZy5TdHJpbmcgd3NkbExvYywgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSBzTmFtZSkgdGhyb3dzIGphdmF4LnhtbC5ycGMuU2VydmljZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHN1cGVyKHdzZGxMb2MsIHNOYW1lKTsKLSAgICB9Ci0KLSAgICAvLyBVc2UgdG8gZ2V0IGEgcHJveHkgY2xhc3MgZm9yIENvbnZlcnRlcgotICAgIHByaXZhdGUgamF2YS5sYW5nLlN0cmluZyBDb252ZXJ0ZXJfYWRkcmVzcyA9ICJodHRwOi8vbG9jYWxob3N0OjgwODAvQ29udmVydGVyUHJvai9zZXJ2aWNlcy9Db252ZXJ0ZXIiOwotCi0gICAgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0Q29udmVydGVyQWRkcmVzcygpIHsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcl9hZGRyZXNzOwotICAgIH0KLQotICAgIC8vIFRoZSBXU0REIHNlcnZpY2UgbmFtZSBkZWZhdWx0cyB0byB0aGUgcG9ydCBuYW1lLgotICAgIHByaXZhdGUgamF2YS5sYW5nLlN0cmluZyBDb252ZXJ0ZXJXU0REU2VydmljZU5hbWUgPSAiQ29udmVydGVyIjsKLQotICAgIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldENvbnZlcnRlcldTRERTZXJ2aWNlTmFtZSgpIHsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcldTRERTZXJ2aWNlTmFtZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRDb252ZXJ0ZXJXU0REU2VydmljZU5hbWUoamF2YS5sYW5nLlN0cmluZyBuYW1lKSB7Ci0gICAgICAgIENvbnZlcnRlcldTRERTZXJ2aWNlTmFtZSA9IG5hbWU7Ci0gICAgfQotCi0gICAgcHVibGljIHd0cC5Db252ZXJ0ZXIgZ2V0Q29udmVydGVyKCkgdGhyb3dzIGphdmF4LnhtbC5ycGMuU2VydmljZUV4Y2VwdGlvbiB7Ci0gICAgICAgamF2YS5uZXQuVVJMIGVuZHBvaW50OwotICAgICAgICB0cnkgewotICAgICAgICAgICAgZW5kcG9pbnQgPSBuZXcgamF2YS5uZXQuVVJMKENvbnZlcnRlcl9hZGRyZXNzKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBqYXZheC54bWwucnBjLlNlcnZpY2VFeGNlcHRpb24oZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGdldENvbnZlcnRlcihlbmRwb2ludCk7Ci0gICAgfQotCi0gICAgcHVibGljIHd0cC5Db252ZXJ0ZXIgZ2V0Q29udmVydGVyKGphdmEubmV0LlVSTCBwb3J0QWRkcmVzcykgdGhyb3dzIGphdmF4LnhtbC5ycGMuU2VydmljZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICB3dHAuQ29udmVydGVyU29hcEJpbmRpbmdTdHViIF9zdHViID0gbmV3IHd0cC5Db252ZXJ0ZXJTb2FwQmluZGluZ1N0dWIocG9ydEFkZHJlc3MsIHRoaXMpOwotICAgICAgICAgICAgX3N0dWIuc2V0UG9ydE5hbWUoZ2V0Q29udmVydGVyV1NERFNlcnZpY2VOYW1lKCkpOwotICAgICAgICAgICAgcmV0dXJuIF9zdHViOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChvcmcuYXBhY2hlLmF4aXMuQXhpc0ZhdWx0IGUpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0Q29udmVydGVyRW5kcG9pbnRBZGRyZXNzKGphdmEubGFuZy5TdHJpbmcgYWRkcmVzcykgewotICAgICAgICBDb252ZXJ0ZXJfYWRkcmVzcyA9IGFkZHJlc3M7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRm9yIHRoZSBnaXZlbiBpbnRlcmZhY2UsIGdldCB0aGUgc3R1YiBpbXBsZW1lbnRhdGlvbi4KLSAgICAgKiBJZiB0aGlzIHNlcnZpY2UgaGFzIG5vIHBvcnQgZm9yIHRoZSBnaXZlbiBpbnRlcmZhY2UsCi0gICAgICogdGhlbiBTZXJ2aWNlRXhjZXB0aW9uIGlzIHRocm93bi4KLSAgICAgKi8KLSAgICBwdWJsaWMgamF2YS5ybWkuUmVtb3RlIGdldFBvcnQoQ2xhc3Mgc2VydmljZUVuZHBvaW50SW50ZXJmYWNlKSB0aHJvd3MgamF2YXgueG1sLnJwYy5TZXJ2aWNlRXhjZXB0aW9uIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGlmICh3dHAuQ29udmVydGVyLmNsYXNzLmlzQXNzaWduYWJsZUZyb20oc2VydmljZUVuZHBvaW50SW50ZXJmYWNlKSkgewotICAgICAgICAgICAgICAgIHd0cC5Db252ZXJ0ZXJTb2FwQmluZGluZ1N0dWIgX3N0dWIgPSBuZXcgd3RwLkNvbnZlcnRlclNvYXBCaW5kaW5nU3R1YihuZXcgamF2YS5uZXQuVVJMKENvbnZlcnRlcl9hZGRyZXNzKSwgdGhpcyk7Ci0gICAgICAgICAgICAgICAgX3N0dWIuc2V0UG9ydE5hbWUoZ2V0Q29udmVydGVyV1NERFNlcnZpY2VOYW1lKCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBfc3R1YjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoamF2YS5sYW5nLlRocm93YWJsZSB0KSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgamF2YXgueG1sLnJwYy5TZXJ2aWNlRXhjZXB0aW9uKHQpOwotICAgICAgICB9Ci0gICAgICAgIHRocm93IG5ldyBqYXZheC54bWwucnBjLlNlcnZpY2VFeGNlcHRpb24oIlRoZXJlIGlzIG5vIHN0dWIgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBpbnRlcmZhY2U6ICAiICsgKHNlcnZpY2VFbmRwb2ludEludGVyZmFjZSA9PSBudWxsID8gIm51bGwiIDogc2VydmljZUVuZHBvaW50SW50ZXJmYWNlLmdldE5hbWUoKSkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEZvciB0aGUgZ2l2ZW4gaW50ZXJmYWNlLCBnZXQgdGhlIHN0dWIgaW1wbGVtZW50YXRpb24uCi0gICAgICogSWYgdGhpcyBzZXJ2aWNlIGhhcyBubyBwb3J0IGZvciB0aGUgZ2l2ZW4gaW50ZXJmYWNlLAotICAgICAqIHRoZW4gU2VydmljZUV4Y2VwdGlvbiBpcyB0aHJvd24uCi0gICAgICovCi0gICAgcHVibGljIGphdmEucm1pLlJlbW90ZSBnZXRQb3J0KGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUgcG9ydE5hbWUsIENsYXNzIHNlcnZpY2VFbmRwb2ludEludGVyZmFjZSkgdGhyb3dzIGphdmF4LnhtbC5ycGMuU2VydmljZUV4Y2VwdGlvbiB7Ci0gICAgICAgIGlmIChwb3J0TmFtZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gZ2V0UG9ydChzZXJ2aWNlRW5kcG9pbnRJbnRlcmZhY2UpOwotICAgICAgICB9Ci0gICAgICAgIGphdmEubGFuZy5TdHJpbmcgaW5wdXRQb3J0TmFtZSA9IHBvcnROYW1lLmdldExvY2FsUGFydCgpOwotICAgICAgICBpZiAoIkNvbnZlcnRlciIuZXF1YWxzKGlucHV0UG9ydE5hbWUpKSB7Ci0gICAgICAgICAgICByZXR1cm4gZ2V0Q29udmVydGVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSAgewotICAgICAgICAgICAgamF2YS5ybWkuUmVtb3RlIF9zdHViID0gZ2V0UG9ydChzZXJ2aWNlRW5kcG9pbnRJbnRlcmZhY2UpOwotICAgICAgICAgICAgKChvcmcuYXBhY2hlLmF4aXMuY2xpZW50LlN0dWIpIF9zdHViKS5zZXRQb3J0TmFtZShwb3J0TmFtZSk7Ci0gICAgICAgICAgICByZXR1cm4gX3N0dWI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSBnZXRTZXJ2aWNlTmFtZSgpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKCJodHRwOi8vd3RwIiwgIkNvbnZlcnRlclNlcnZpY2UiKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGphdmEudXRpbC5IYXNoU2V0IHBvcnRzID0gbnVsbDsKLQotICAgIHB1YmxpYyBqYXZhLnV0aWwuSXRlcmF0b3IgZ2V0UG9ydHMoKSB7Ci0gICAgICAgIGlmIChwb3J0cyA9PSBudWxsKSB7Ci0gICAgICAgICAgICBwb3J0cyA9IG5ldyBqYXZhLnV0aWwuSGFzaFNldCgpOwotICAgICAgICAgICAgcG9ydHMuYWRkKG5ldyBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKCJodHRwOi8vd3RwIiwgIkNvbnZlcnRlciIpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcG9ydHMuaXRlcmF0b3IoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAqIFNldCB0aGUgZW5kcG9pbnQgYWRkcmVzcyBmb3IgdGhlIHNwZWNpZmllZCBwb3J0IG5hbWUuCi0gICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRFbmRwb2ludEFkZHJlc3MoamF2YS5sYW5nLlN0cmluZyBwb3J0TmFtZSwgamF2YS5sYW5nLlN0cmluZyBhZGRyZXNzKSB0aHJvd3MgamF2YXgueG1sLnJwYy5TZXJ2aWNlRXhjZXB0aW9uIHsKLSAgICAgICAgCi1pZiAoIkNvbnZlcnRlciIuZXF1YWxzKHBvcnROYW1lKSkgewotICAgICAgICAgICAgc2V0Q29udmVydGVyRW5kcG9pbnRBZGRyZXNzKGFkZHJlc3MpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgCi17IC8vIFVua25vd24gUG9ydCBOYW1lCi0gICAgICAgICAgICB0aHJvdyBuZXcgamF2YXgueG1sLnJwYy5TZXJ2aWNlRXhjZXB0aW9uKCIgQ2Fubm90IHNldCBFbmRwb2ludCBBZGRyZXNzIGZvciBVbmtub3duIFBvcnQiICsgcG9ydE5hbWUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgKiBTZXQgdGhlIGVuZHBvaW50IGFkZHJlc3MgZm9yIHRoZSBzcGVjaWZpZWQgcG9ydCBuYW1lLgotICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0RW5kcG9pbnRBZGRyZXNzKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUgcG9ydE5hbWUsIGphdmEubGFuZy5TdHJpbmcgYWRkcmVzcykgdGhyb3dzIGphdmF4LnhtbC5ycGMuU2VydmljZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHNldEVuZHBvaW50QWRkcmVzcyhwb3J0TmFtZS5nZXRMb2NhbFBhcnQoKSwgYWRkcmVzcyk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTIvd3RwL0NvbnZlcnRlclNvYXBCaW5kaW5nU3R1Yi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9kYXRhL2F4aXNTb3VyY2UyL3d0cC9Db252ZXJ0ZXJTb2FwQmluZGluZ1N0dWIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTM5N2FhYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL2RhdGEvYXhpc1NvdXJjZTIvd3RwL0NvbnZlcnRlclNvYXBCaW5kaW5nU3R1Yi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTc5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqCi0gKiBDb252ZXJ0ZXJTb2FwQmluZGluZ1N0dWIuamF2YQotICoKLSAqIFRoaXMgZmlsZSB3YXMgYXV0by1nZW5lcmF0ZWQgZnJvbSBXU0RMCi0gKiBieSB0aGUgQXBhY2hlIEF4aXMgMS4yLjEgSnVuIDE0LCAyMDA1ICgwOToxNTo1NyBFRFQpIFdTREwySmF2YSBlbWl0dGVyLgotICovCi0KLXBhY2thZ2Ugd3RwOwotCi1wdWJsaWMgY2xhc3MgQ29udmVydGVyU29hcEJpbmRpbmdTdHViIGV4dGVuZHMgb3JnLmFwYWNoZS5heGlzLmNsaWVudC5TdHViIGltcGxlbWVudHMgd3RwLkNvbnZlcnRlciB7Ci0gICAgcHJpdmF0ZSBqYXZhLnV0aWwuVmVjdG9yIGNhY2hlZFNlckNsYXNzZXMgPSBuZXcgamF2YS51dGlsLlZlY3RvcigpOwotICAgIHByaXZhdGUgamF2YS51dGlsLlZlY3RvciBjYWNoZWRTZXJRTmFtZXMgPSBuZXcgamF2YS51dGlsLlZlY3RvcigpOwotICAgIHByaXZhdGUgamF2YS51dGlsLlZlY3RvciBjYWNoZWRTZXJGYWN0b3JpZXMgPSBuZXcgamF2YS51dGlsLlZlY3RvcigpOwotICAgIHByaXZhdGUgamF2YS51dGlsLlZlY3RvciBjYWNoZWREZXNlckZhY3RvcmllcyA9IG5ldyBqYXZhLnV0aWwuVmVjdG9yKCk7Ci0KLSAgICBzdGF0aWMgb3JnLmFwYWNoZS5heGlzLmRlc2NyaXB0aW9uLk9wZXJhdGlvbkRlc2MgW10gX29wZXJhdGlvbnM7Ci0KLSAgICBzdGF0aWMgewotICAgICAgICBfb3BlcmF0aW9ucyA9IG5ldyBvcmcuYXBhY2hlLmF4aXMuZGVzY3JpcHRpb24uT3BlcmF0aW9uRGVzY1syXTsKLSAgICAgICAgX2luaXRPcGVyYXRpb25EZXNjMSgpOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIHZvaWQgX2luaXRPcGVyYXRpb25EZXNjMSgpewotICAgICAgICBvcmcuYXBhY2hlLmF4aXMuZGVzY3JpcHRpb24uT3BlcmF0aW9uRGVzYyBvcGVyOwotICAgICAgICBvcmcuYXBhY2hlLmF4aXMuZGVzY3JpcHRpb24uUGFyYW1ldGVyRGVzYyBwYXJhbTsKLSAgICAgICAgb3BlciA9IG5ldyBvcmcuYXBhY2hlLmF4aXMuZGVzY3JpcHRpb24uT3BlcmF0aW9uRGVzYygpOwotICAgICAgICBvcGVyLnNldE5hbWUoImNlbHNpdXNUb0ZhcmVuaGVpdCIpOwotICAgICAgICBwYXJhbSA9IG5ldyBvcmcuYXBhY2hlLmF4aXMuZGVzY3JpcHRpb24uUGFyYW1ldGVyRGVzYyhuZXcgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSgiaHR0cDovL3d0cCIsICJjZWxzaXVzIiksIG9yZy5hcGFjaGUuYXhpcy5kZXNjcmlwdGlvbi5QYXJhbWV0ZXJEZXNjLklOLCBuZXcgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSgiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiLCAiZmxvYXQiKSwgZmxvYXQuY2xhc3MsIGZhbHNlLCBmYWxzZSk7Ci0gICAgICAgIG9wZXIuYWRkUGFyYW1ldGVyKHBhcmFtKTsKLSAgICAgICAgb3Blci5zZXRSZXR1cm5UeXBlKG5ldyBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIsICJmbG9hdCIpKTsKLSAgICAgICAgb3Blci5zZXRSZXR1cm5DbGFzcyhmbG9hdC5jbGFzcyk7Ci0gICAgICAgIG9wZXIuc2V0UmV0dXJuUU5hbWUobmV3IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUoImh0dHA6Ly93dHAiLCAiY2Vsc2l1c1RvRmFyZW5oZWl0UmV0dXJuIikpOwotICAgICAgICBvcGVyLnNldFN0eWxlKG9yZy5hcGFjaGUuYXhpcy5jb25zdGFudHMuU3R5bGUuV1JBUFBFRCk7Ci0gICAgICAgIG9wZXIuc2V0VXNlKG9yZy5hcGFjaGUuYXhpcy5jb25zdGFudHMuVXNlLkxJVEVSQUwpOwotICAgICAgICBfb3BlcmF0aW9uc1swXSA9IG9wZXI7Ci0KLSAgICAgICAgb3BlciA9IG5ldyBvcmcuYXBhY2hlLmF4aXMuZGVzY3JpcHRpb24uT3BlcmF0aW9uRGVzYygpOwotICAgICAgICBvcGVyLnNldE5hbWUoImZhcmVuaGVpdFRvQ2Vsc2l1cyIpOwotICAgICAgICBwYXJhbSA9IG5ldyBvcmcuYXBhY2hlLmF4aXMuZGVzY3JpcHRpb24uUGFyYW1ldGVyRGVzYyhuZXcgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSgiaHR0cDovL3d0cCIsICJmYXJlbmhlaXQiKSwgb3JnLmFwYWNoZS5heGlzLmRlc2NyaXB0aW9uLlBhcmFtZXRlckRlc2MuSU4sIG5ldyBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIsICJmbG9hdCIpLCBmbG9hdC5jbGFzcywgZmFsc2UsIGZhbHNlKTsKLSAgICAgICAgb3Blci5hZGRQYXJhbWV0ZXIocGFyYW0pOwotICAgICAgICBvcGVyLnNldFJldHVyblR5cGUobmV3IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUoImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiwgImZsb2F0IikpOwotICAgICAgICBvcGVyLnNldFJldHVybkNsYXNzKGZsb2F0LmNsYXNzKTsKLSAgICAgICAgb3Blci5zZXRSZXR1cm5RTmFtZShuZXcgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSgiaHR0cDovL3d0cCIsICJmYXJlbmhlaXRUb0NlbHNpdXNSZXR1cm4iKSk7Ci0gICAgICAgIG9wZXIuc2V0U3R5bGUob3JnLmFwYWNoZS5heGlzLmNvbnN0YW50cy5TdHlsZS5XUkFQUEVEKTsKLSAgICAgICAgb3Blci5zZXRVc2Uob3JnLmFwYWNoZS5heGlzLmNvbnN0YW50cy5Vc2UuTElURVJBTCk7Ci0gICAgICAgIF9vcGVyYXRpb25zWzFdID0gb3BlcjsKLQotICAgIH0KLQotICAgIHB1YmxpYyBDb252ZXJ0ZXJTb2FwQmluZGluZ1N0dWIoKSB0aHJvd3Mgb3JnLmFwYWNoZS5heGlzLkF4aXNGYXVsdCB7Ci0gICAgICAgICB0aGlzKG51bGwpOwotICAgIH0KLQotICAgIHB1YmxpYyBDb252ZXJ0ZXJTb2FwQmluZGluZ1N0dWIoamF2YS5uZXQuVVJMIGVuZHBvaW50VVJMLCBqYXZheC54bWwucnBjLlNlcnZpY2Ugc2VydmljZSkgdGhyb3dzIG9yZy5hcGFjaGUuYXhpcy5BeGlzRmF1bHQgewotICAgICAgICAgdGhpcyhzZXJ2aWNlKTsKLSAgICAgICAgIHN1cGVyLmNhY2hlZEVuZHBvaW50ID0gZW5kcG9pbnRVUkw7Ci0gICAgfQotCi0gICAgcHVibGljIENvbnZlcnRlclNvYXBCaW5kaW5nU3R1YihqYXZheC54bWwucnBjLlNlcnZpY2Ugc2VydmljZSkgdGhyb3dzIG9yZy5hcGFjaGUuYXhpcy5BeGlzRmF1bHQgewotICAgICAgICBpZiAoc2VydmljZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICBzdXBlci5zZXJ2aWNlID0gbmV3IG9yZy5hcGFjaGUuYXhpcy5jbGllbnQuU2VydmljZSgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3VwZXIuc2VydmljZSA9IHNlcnZpY2U7Ci0gICAgICAgIH0KLSAgICAgICAgKChvcmcuYXBhY2hlLmF4aXMuY2xpZW50LlNlcnZpY2Upc3VwZXIuc2VydmljZSkuc2V0VHlwZU1hcHBpbmdWZXJzaW9uKCIxLjIiKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgb3JnLmFwYWNoZS5heGlzLmNsaWVudC5DYWxsIGNyZWF0ZUNhbGwoKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIG9yZy5hcGFjaGUuYXhpcy5jbGllbnQuQ2FsbCBfY2FsbCA9IHN1cGVyLl9jcmVhdGVDYWxsKCk7Ci0gICAgICAgICAgICBpZiAoc3VwZXIubWFpbnRhaW5TZXNzaW9uU2V0KSB7Ci0gICAgICAgICAgICAgICAgX2NhbGwuc2V0TWFpbnRhaW5TZXNzaW9uKHN1cGVyLm1haW50YWluU2Vzc2lvbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc3VwZXIuY2FjaGVkVXNlcm5hbWUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIF9jYWxsLnNldFVzZXJuYW1lKHN1cGVyLmNhY2hlZFVzZXJuYW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzdXBlci5jYWNoZWRQYXNzd29yZCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgX2NhbGwuc2V0UGFzc3dvcmQoc3VwZXIuY2FjaGVkUGFzc3dvcmQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHN1cGVyLmNhY2hlZEVuZHBvaW50ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBfY2FsbC5zZXRUYXJnZXRFbmRwb2ludEFkZHJlc3Moc3VwZXIuY2FjaGVkRW5kcG9pbnQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHN1cGVyLmNhY2hlZFRpbWVvdXQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIF9jYWxsLnNldFRpbWVvdXQoc3VwZXIuY2FjaGVkVGltZW91dCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc3VwZXIuY2FjaGVkUG9ydE5hbWUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIF9jYWxsLnNldFBvcnROYW1lKHN1cGVyLmNhY2hlZFBvcnROYW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGphdmEudXRpbC5FbnVtZXJhdGlvbiBrZXlzID0gc3VwZXIuY2FjaGVkUHJvcGVydGllcy5rZXlzKCk7Ci0gICAgICAgICAgICB3aGlsZSAoa2V5cy5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgICAgICAgICAgIGphdmEubGFuZy5TdHJpbmcga2V5ID0gKGphdmEubGFuZy5TdHJpbmcpIGtleXMubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICBfY2FsbC5zZXRQcm9wZXJ0eShrZXksIHN1cGVyLmNhY2hlZFByb3BlcnRpZXMuZ2V0KGtleSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIF9jYWxsOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChqYXZhLmxhbmcuVGhyb3dhYmxlIF90KSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgb3JnLmFwYWNoZS5heGlzLkF4aXNGYXVsdCgiRmFpbHVyZSB0cnlpbmcgdG8gZ2V0IHRoZSBDYWxsIG9iamVjdCIsIF90KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBmbG9hdCBjZWxzaXVzVG9GYXJlbmhlaXQoZmxvYXQgY2Vsc2l1cykgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIGlmIChzdXBlci5jYWNoZWRFbmRwb2ludCA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgb3JnLmFwYWNoZS5heGlzLk5vRW5kUG9pbnRFeGNlcHRpb24oKTsKLSAgICAgICAgfQotICAgICAgICBvcmcuYXBhY2hlLmF4aXMuY2xpZW50LkNhbGwgX2NhbGwgPSBjcmVhdGVDYWxsKCk7Ci0gICAgICAgIF9jYWxsLnNldE9wZXJhdGlvbihfb3BlcmF0aW9uc1swXSk7Ci0gICAgICAgIF9jYWxsLnNldFVzZVNPQVBBY3Rpb24odHJ1ZSk7Ci0gICAgICAgIF9jYWxsLnNldFNPQVBBY3Rpb25VUkkoIiIpOwotICAgICAgICBfY2FsbC5zZXRFbmNvZGluZ1N0eWxlKG51bGwpOwotICAgICAgICBfY2FsbC5zZXRQcm9wZXJ0eShvcmcuYXBhY2hlLmF4aXMuY2xpZW50LkNhbGwuU0VORF9UWVBFX0FUVFIsIEJvb2xlYW4uRkFMU0UpOwotICAgICAgICBfY2FsbC5zZXRQcm9wZXJ0eShvcmcuYXBhY2hlLmF4aXMuQXhpc0VuZ2luZS5QUk9QX0RPTVVMVElSRUZTLCBCb29sZWFuLkZBTFNFKTsKLSAgICAgICAgX2NhbGwuc2V0U09BUFZlcnNpb24ob3JnLmFwYWNoZS5heGlzLnNvYXAuU09BUENvbnN0YW50cy5TT0FQMTFfQ09OU1RBTlRTKTsKLSAgICAgICAgX2NhbGwuc2V0T3BlcmF0aW9uTmFtZShuZXcgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSgiaHR0cDovL3d0cCIsICJjZWxzaXVzVG9GYXJlbmhlaXQiKSk7Ci0KLSAgICAgICAgc2V0UmVxdWVzdEhlYWRlcnMoX2NhbGwpOwotICAgICAgICBzZXRBdHRhY2htZW50cyhfY2FsbCk7Ci0gdHJ5IHsgICAgICAgIGphdmEubGFuZy5PYmplY3QgX3Jlc3AgPSBfY2FsbC5pbnZva2UobmV3IGphdmEubGFuZy5PYmplY3RbXSB7bmV3IGphdmEubGFuZy5GbG9hdChjZWxzaXVzKX0pOwotCi0gICAgICAgIGlmIChfcmVzcCBpbnN0YW5jZW9mIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbikgewotICAgICAgICAgICAgdGhyb3cgKGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbilfcmVzcDsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGV4dHJhY3RBdHRhY2htZW50cyhfY2FsbCk7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIHJldHVybiAoKGphdmEubGFuZy5GbG9hdCkgX3Jlc3ApLmZsb2F0VmFsdWUoKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKGphdmEubGFuZy5FeGNlcHRpb24gX2V4Y2VwdGlvbikgewotICAgICAgICAgICAgICAgIHJldHVybiAoKGphdmEubGFuZy5GbG9hdCkgb3JnLmFwYWNoZS5heGlzLnV0aWxzLkphdmFVdGlscy5jb252ZXJ0KF9yZXNwLCBmbG9hdC5jbGFzcykpLmZsb2F0VmFsdWUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICB9IGNhdGNoIChvcmcuYXBhY2hlLmF4aXMuQXhpc0ZhdWx0IGF4aXNGYXVsdEV4Y2VwdGlvbikgewotICB0aHJvdyBheGlzRmF1bHRFeGNlcHRpb247Ci19Ci0gICAgfQotCi0gICAgcHVibGljIGZsb2F0IGZhcmVuaGVpdFRvQ2Vsc2l1cyhmbG9hdCBmYXJlbmhlaXQpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24gewotICAgICAgICBpZiAoc3VwZXIuY2FjaGVkRW5kcG9pbnQgPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IG9yZy5hcGFjaGUuYXhpcy5Ob0VuZFBvaW50RXhjZXB0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgICAgb3JnLmFwYWNoZS5heGlzLmNsaWVudC5DYWxsIF9jYWxsID0gY3JlYXRlQ2FsbCgpOwotICAgICAgICBfY2FsbC5zZXRPcGVyYXRpb24oX29wZXJhdGlvbnNbMV0pOwotICAgICAgICBfY2FsbC5zZXRVc2VTT0FQQWN0aW9uKHRydWUpOwotICAgICAgICBfY2FsbC5zZXRTT0FQQWN0aW9uVVJJKCIiKTsKLSAgICAgICAgX2NhbGwuc2V0RW5jb2RpbmdTdHlsZShudWxsKTsKLSAgICAgICAgX2NhbGwuc2V0UHJvcGVydHkob3JnLmFwYWNoZS5heGlzLmNsaWVudC5DYWxsLlNFTkRfVFlQRV9BVFRSLCBCb29sZWFuLkZBTFNFKTsKLSAgICAgICAgX2NhbGwuc2V0UHJvcGVydHkob3JnLmFwYWNoZS5heGlzLkF4aXNFbmdpbmUuUFJPUF9ET01VTFRJUkVGUywgQm9vbGVhbi5GQUxTRSk7Ci0gICAgICAgIF9jYWxsLnNldFNPQVBWZXJzaW9uKG9yZy5hcGFjaGUuYXhpcy5zb2FwLlNPQVBDb25zdGFudHMuU09BUDExX0NPTlNUQU5UUyk7Ci0gICAgICAgIF9jYWxsLnNldE9wZXJhdGlvbk5hbWUobmV3IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUoImh0dHA6Ly93dHAiLCAiZmFyZW5oZWl0VG9DZWxzaXVzIikpOwotCi0gICAgICAgIHNldFJlcXVlc3RIZWFkZXJzKF9jYWxsKTsKLSAgICAgICAgc2V0QXR0YWNobWVudHMoX2NhbGwpOwotIHRyeSB7ICAgICAgICBqYXZhLmxhbmcuT2JqZWN0IF9yZXNwID0gX2NhbGwuaW52b2tlKG5ldyBqYXZhLmxhbmcuT2JqZWN0W10ge25ldyBqYXZhLmxhbmcuRmxvYXQoZmFyZW5oZWl0KX0pOwotCi0gICAgICAgIGlmIChfcmVzcCBpbnN0YW5jZW9mIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbikgewotICAgICAgICAgICAgdGhyb3cgKGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbilfcmVzcDsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGV4dHJhY3RBdHRhY2htZW50cyhfY2FsbCk7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIHJldHVybiAoKGphdmEubGFuZy5GbG9hdCkgX3Jlc3ApLmZsb2F0VmFsdWUoKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKGphdmEubGFuZy5FeGNlcHRpb24gX2V4Y2VwdGlvbikgewotICAgICAgICAgICAgICAgIHJldHVybiAoKGphdmEubGFuZy5GbG9hdCkgb3JnLmFwYWNoZS5heGlzLnV0aWxzLkphdmFVdGlscy5jb252ZXJ0KF9yZXNwLCBmbG9hdC5jbGFzcykpLmZsb2F0VmFsdWUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICB9IGNhdGNoIChvcmcuYXBhY2hlLmF4aXMuQXhpc0ZhdWx0IGF4aXNGYXVsdEV4Y2VwdGlvbikgewotICB0aHJvdyBheGlzRmF1bHRFeGNlcHRpb247Ci19Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTZlZjZjNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0jIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIDIwMDYwNDI0ICAgMTM4MDYwIGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgTWVzc2FnZXMgaW4gcGx1Z2luLnhtbC4KLSMKLVBMVUdJTl9OQU1FPUpTVCBXZWIgU2VydmljZXMgQXhpcyBDb25zdW1wdGlvbiBDb3JlIFRlc3QKLVBMVUdJTl9QUk9WSURFUj1FY2xpcHNlLm9yZwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvYXhpcy9jb25zdW1wdGlvbi9jb3JlL3Rlc3RzL3VuaXR0ZXN0L0xvY2F0b3JUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvYXhpcy9jb25zdW1wdGlvbi9jb3JlL3Rlc3RzL3VuaXR0ZXN0L0xvY2F0b3JUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzdhNjBiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL2F4aXMvY29uc3VtcHRpb24vY29yZS90ZXN0cy91bml0dGVzdC9Mb2NhdG9yVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMzE3ICAgMTI3NDU2IGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5Ci0gKiAyMDA2MDcxMSAgIDE0Nzg2MiBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICogMjAwNjA3MTEgICAxNDc4NjQgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMudW5pdHRlc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JSmF2YVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy51dGlsLkphdmFGaWx0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy51dGlsLlN0ZG91dFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzLnV0aWwuVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwud3NydC5XZWJTZXJ2aWNlSmF2YUNsaWVudEluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzZmluZGVyLldlYlNlcnZpY2VGaW5kZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLndzcnQuV2ViU2VydmljZUNsaWVudEluZm87Ci0KLXB1YmxpYyBjbGFzcyBMb2NhdG9yVGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZQotewotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSAoKQotCXsKLQkJcmV0dXJuIG5ldyBUZXN0U3VpdGUoTG9jYXRvclRlc3RzLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0X0F4aXNDbGllbnRMb2NhdG9yICgpCi0JewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkJFR0lOIHRlc3RfQXhpc0NsaWVudExvY2F0b3IiKTsKLQkJdHJ5Ci0JCXsKLQkJCVN0cmluZ1tdIHByb2plY3ROYW1lcyA9IG5ldyBTdHJpbmdbXSB7IkphdmExIiwiSmF2YTIiLCJKYXZhMyJ9OwotCQkJSVByb2plY3RbXSBwcm9qZWN0cyA9IG5ldyBJUHJvamVjdFtwcm9qZWN0TmFtZXMubGVuZ3RoXTsKLQkJCWZvciAoaW50IHg9MDsgeDxwcm9qZWN0TmFtZXMubGVuZ3RoOyB4KyspCi0JCQl7Ci0JCQkJcHJvamVjdHNbeF0gPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QocHJvamVjdE5hbWVzW3hdKTsKLQkJCX0KLQkJCVV0aWwuaW5pdCgpOwotCQkJdHJ5Ci0JCQl7Ci0JCQkJZm9yIChpbnQgaT0wOyBpPHByb2plY3RzLmxlbmd0aDsgaSsrKQotCQkJCXsKLQkJCQkJSUphdmFQcm9qZWN0IGphdmFQcm9qZWN0ID0gVXRpbC5jcmVhdGVKYXZhUHJvamVjdChwcm9qZWN0TmFtZXNbaV0pOwotCQkJCQlVdGlsLmFkZFJlcXVpcmVkSmFyc1RvSmF2YVByb2plY3QoamF2YVByb2plY3QpOwotCQkJCQlVdGlsLmNvcHlFeGFtcGxlc1RvSmF2YVByb2plY3QoamF2YVByb2plY3QsbmV3IEphdmFGaWx0ZXIoKSk7Ci0JCQkJfQotCQkJfQotCQkJY2F0Y2ggKFRocm93YWJsZSB0KQotCQkJewotCQkJCXQucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQkJZmFpbCgiRmFpbGVkIHRvIGFjY2VzcyBvciBjcmVhdGUgcHJlcmVxdWlzaXRlIHByb2plY3RzIik7Ci0JCQl9Ci0JCQlXZWJTZXJ2aWNlRmluZGVyIGZpbmRlciA9IFdlYlNlcnZpY2VGaW5kZXIuaW5zdGFuY2UoKTsKLQkJCVN0cmluZ1tdIGNhdGVnb3J5SWRzID0gZmluZGVyLmdldFdlYlNlcnZpY2VDYXRlZ29yeUlkcygpOwotCQkJaW50IG4gPSAtMTsKLQkJCUlQcm9ncmVzc01vbml0b3IgbW9uaXRvciA9IG5ldyBTdGRvdXRQcm9ncmVzc01vbml0b3IoKTsKLQkJCWZvciAoaW50IGk9MDsgaTxjYXRlZ29yeUlkcy5sZW5ndGg7IGkrKykKLQkJCXsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNhdGVnb3J5IElEID0gWyIrY2F0ZWdvcnlJZHNbaV0rIl0iKTsKLQkJCQlpZiAoY2F0ZWdvcnlJZHNbaV0uZXF1YWxzKCJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuYXhpcy5jb25zdW1wdGlvbi5jb3JlLmxvY2F0b3IuY2F0ZWdvcnkuYXhpcyIpKQotCQkJCXsKLQkJCQkJbiA9IGk7Ci0JCQkJCUl0ZXJhdG9yIGl0ZXIgPSBmaW5kZXIuZ2V0V2ViU2VydmljZUNsaWVudHNCeUNhdGVnb3J5SWQoY2F0ZWdvcnlJZHNbaV0sbW9uaXRvcik7Ci0JCQkJCWFzc2VydEZvdW5kQ2xpZW50cyhpdGVyLDYpOwotCQkJCQlpdGVyID0gZmluZGVyLmdldFdlYlNlcnZpY2VDbGllbnRzQnlDYXRlZ29yeUlkKGNhdGVnb3J5SWRzW2ldLHByb2plY3RzLG1vbml0b3IpOwotCQkJCQlhc3NlcnRGb3VuZENsaWVudHMoaXRlciw2KTsKLQkJCQkJaXRlciA9IGZpbmRlci5nZXRXZWJTZXJ2aWNlQ2xpZW50c0J5Q2F0ZWdvcnlJZChjYXRlZ29yeUlkc1tpXSxuZXcgSVByb2plY3RbXSB7cHJvamVjdHNbMF19LG1vbml0b3IpOwotCQkJCQlhc3NlcnRGb3VuZENsaWVudHMoaXRlciwyKTsKLQkJCQkJaXRlciA9IGZpbmRlci5nZXRXZWJTZXJ2aWNlQ2xpZW50c0J5Q2F0ZWdvcnlJZChjYXRlZ29yeUlkc1tpXSxuZXcgSVByb2plY3RbXSB7cHJvamVjdHNbMV0scHJvamVjdHNbMl19LG1vbml0b3IpOwotCQkJCQlhc3NlcnRGb3VuZENsaWVudHMoaXRlciw0KTsKLQkJCQkJSVByb2plY3Qgbm9TdWNoUHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdCgibm9TdWNoUHJvamVjdCIpOwotCQkJCQlpdGVyID0gZmluZGVyLmdldFdlYlNlcnZpY2VDbGllbnRzQnlDYXRlZ29yeUlkKGNhdGVnb3J5SWRzW2ldLG5ldyBJUHJvamVjdFtdIHtub1N1Y2hQcm9qZWN0fSxtb25pdG9yKTsKLQkJCQkJYXNzZXJ0Rm91bmRDbGllbnRzKGl0ZXIsMCk7Ci0JCQkJfQotCQkJfQotCQkJYXNzZXJ0VHJ1ZSgiQXhpcyBsb2NhdG9yIGV4dGVuc2lvbiBtaXNzaW5nLiIsbiA+PSAwKTsKLQkJfQotCQlmaW5hbGx5Ci0JCXsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRU5ERUQgdGVzdF9BeGlzQ2xpZW50TG9jYXRvciIpOwotCQl9Ci0JfQotCQotCXByaXZhdGUgdm9pZCBhc3NlcnRGb3VuZENsaWVudHMgKCBJdGVyYXRvciBpdGVyLCBpbnQgeCApCi0JewotCQlpbnQgcCA9IDA7Ci0JCXdoaWxlIChpdGVyLmhhc05leHQoKSkKLQkJewotCQkJT2JqZWN0IG9iaiA9IGl0ZXIubmV4dCgpOwotCQkJYXNzZXJ0VHJ1ZSgiRmluZGVyIHJldHVybmVkIGEgIitvYmouZ2V0Q2xhc3MoKS5nZXROYW1lKCkrIiBpbnN0ZWFkIG9mIGEgV2ViU2VydmljZUNsaWVudEluZm8uIixvYmogaW5zdGFuY2VvZiBXZWJTZXJ2aWNlQ2xpZW50SW5mbyk7Ci0JCQlwKys7Ci0JCQlXZWJTZXJ2aWNlQ2xpZW50SW5mbyB3c2NJbmZvID0gKFdlYlNlcnZpY2VDbGllbnRJbmZvKW9iajsKLQkJCVN0cmluZyBwcm94eUNsYXNzVVJMID0gd3NjSW5mby5nZXRJbXBsVVJMKCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkF4aXMgY2xpZW50IHByb3h5IGNsYXNzID0gWyIrcHJveHlDbGFzc1VSTCsiXSIpOwotCQkJaWYgKHdzY0luZm8gaW5zdGFuY2VvZiBXZWJTZXJ2aWNlSmF2YUNsaWVudEluZm8pCi0JCQl7Ci0JCQkJV2ViU2VydmljZUphdmFDbGllbnRJbmZvIHdzY0pJbmZvID0gKFdlYlNlcnZpY2VKYXZhQ2xpZW50SW5mbyl3c2NJbmZvOwotCQkJCWFzc2VydE5vdE51bGwoIkZvdW5kIGFuIHVuZXhwZWN0ZWQgbnVsbCBJVHlwZSIsd3NjSkluZm8uZ2V0VHlwZSgpKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkF4aXMgY2xpZW50IHByb3h5IElUeXBlID0gWyIrd3NjSkluZm8uZ2V0VHlwZSgpKyJdIik7Ci0JCQl9Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgiRm91bmQgIitwKyIgcHJveGllcyBpbnN0ZWFkIG9mIHRoZSBleHBlY3RlZCAiK3grIi4iLHAgPT0geCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvYXhpcy9jb25zdW1wdGlvbi9jb3JlL3Rlc3RzL3V0aWwvRmlsdGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy9heGlzL2NvbnN1bXB0aW9uL2NvcmUvdGVzdHMvdXRpbC9GaWx0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmE2YzA0NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy9heGlzL2NvbnN1bXB0aW9uL2NvcmUvdGVzdHMvdXRpbC9GaWx0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA3MTEgICAxNDc4NjIgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkKLSAqIDIwMDYwNzExICAgMTQ3ODY0IGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzLnV0aWw7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgRmlsdGVyCi17Ci0JcHVibGljIGJvb2xlYW4gYWNjZXB0ICggT2JqZWN0IG9iamVjdCApOwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvYXhpcy9jb25zdW1wdGlvbi9jb3JlL3Rlc3RzL3V0aWwvSmF2YUZpbHRlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvYXhpcy9jb25zdW1wdGlvbi9jb3JlL3Rlc3RzL3V0aWwvSmF2YUZpbHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzYyMDZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL2F4aXMvY29uc3VtcHRpb24vY29yZS90ZXN0cy91dGlsL0phdmFGaWx0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA3MTEgICAxNDc4NjIgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkKLSAqIDIwMDYwNzExICAgMTQ3ODY0IGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzLnV0aWw7Ci0KLXB1YmxpYyBjbGFzcyBKYXZhRmlsdGVyIGltcGxlbWVudHMgRmlsdGVyIHsKLQotCXB1YmxpYyBib29sZWFuIGFjY2VwdCAoIE9iamVjdCBvYmplY3QgKQotCXsKLQkJcmV0dXJuIG9iamVjdC50b1N0cmluZygpLmVuZHNXaXRoKCIuamF2YSIpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvYXhpcy9jb25zdW1wdGlvbi9jb3JlL3Rlc3RzL3V0aWwvU3Rkb3V0UHJvZ3Jlc3NNb25pdG9yLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy9heGlzL2NvbnN1bXB0aW9uL2NvcmUvdGVzdHMvdXRpbC9TdGRvdXRQcm9ncmVzc01vbml0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE4OGIxNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy9heGlzL2NvbnN1bXB0aW9uL2NvcmUvdGVzdHMvdXRpbC9TdGRvdXRQcm9ncmVzc01vbml0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAzMTcgICAxMjc0NTYgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMudXRpbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotCi1wdWJsaWMgY2xhc3MgU3Rkb3V0UHJvZ3Jlc3NNb25pdG9yIGV4dGVuZHMgTnVsbFByb2dyZXNzTW9uaXRvcgotewotCi0JcHVibGljIHZvaWQgYmVnaW5UYXNrKFN0cmluZyBuYW1lLCBpbnQgdG90YWxXb3JrKQotCXsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJbUHJvZ3Jlc3NdICIrbmFtZSsiLCAiK3RvdGFsV29yaysiIHVuaXQocykgcmVtYWluaW5nKS4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBkb25lKCkKLQl7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiW1Byb2dyZXNzXSBEb25lLiIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFRhc2tOYW1lKFN0cmluZyBuYW1lKQotCXsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJbUHJvZ3Jlc3NdICIrbmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgc3ViVGFzayhTdHJpbmcgbmFtZSkKLQl7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiW1Byb2dyZXNzXSAiK25hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHdvcmtlZChpbnQgd29yaykKLQl7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiW1Byb2dyZXNzXSAiK3dvcmsrIiB1bml0KHMpIGNvbXBsZXRlZC4iKTsKLQl9Ci0JCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy9heGlzL2NvbnN1bXB0aW9uL2NvcmUvdGVzdHMvdXRpbC9VdGlsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy9heGlzL2NvbnN1bXB0aW9uL2NvcmUvdGVzdHMvdXRpbC9VdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3OTAyNjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvYXhpcy9jb25zdW1wdGlvbi9jb3JlL3Rlc3RzL3V0aWwvVXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjU5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjAzMTcgICAxMjc0NTYgY2JyZWFsZXlAY2EuaWJtLmNvbSAtIENocmlzIEJyZWFsZXkKLSAqIDIwMDYwNzExICAgMTQ3ODYyIGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5Ci0gKiAyMDA2MDcxMSAgIDE0Nzg2NCBjYnJlYWxleUBjYS5pYm0uY29tIC0gQ2hyaXMgQnJlYWxleQotICogMjAwNjEyMTEgICAxNjIyODggbWFrYW5kcmVAY2EuaWJtLmNvbSAtIEFuZHJldyBNYWssIHdvcmtzcGFjZSBwYXRocyB3aXRoIHNwYWNlcyBicmVhayBKYXZhIEVkaXRvciBMYXVuY2gKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLmNvcmUudGVzdHMudXRpbDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSSTsKLWltcG9ydCBqYXZhLm5ldC5VUklTeW50YXhFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3REZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLkluY3JlbWVudGFsUHJvamVjdEJ1aWxkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUNsYXNzcGF0aEVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklKYXZhUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhTW9kZWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlci5pbnRlcm5hbC51dGlsLlVSSUVuY29kZXI7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotcHVibGljIGNsYXNzIFV0aWwKLXsKLQkvKioKLQkgKiBJbml0aWFsaXplcyB0aGlzIHRlc3RzdWl0ZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIHZvaWQgaW5pdCAoKQotCXsKLQkJU3RyaW5nIHdvcmtzcGFjZU9TUGF0aCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0TG9jYXRpb24oKS50b1N0cmluZygpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIldvcmtzcGFjZSA9IFsiK3dvcmtzcGFjZU9TUGF0aCsiXSIpOwotCX0KLQkKLQkvKioKLQkgKiBDcmVhdGUgYSBKYXZhIHByb2plY3QgaWYgaXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0LgotCSAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IHRvIGNyZWF0ZS4KLQkgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24gSWYgdGhlIHByb2plY3QgY291bGQgbm90IGJlIGNyZWF0ZWQuCi0JICovCi0JcHVibGljIHN0YXRpYyBJSmF2YVByb2plY3QgY3JlYXRlSmF2YVByb2plY3QgKCBTdHJpbmcgbmFtZSApCi0JdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCUlXb3Jrc3BhY2Ugd29ya3NwYWNlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpOwotCQlJV29ya3NwYWNlUm9vdCByb290ID0gd29ya3NwYWNlLmdldFJvb3QoKTsKLQkJSVByb2plY3QgcHJvamVjdCA9IHJvb3QuZ2V0UHJvamVjdChuYW1lKTsKLQkJaWYgKCFwcm9qZWN0LmV4aXN0cygpKQotCQl7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0aW5nIHByb2plY3QgWyIrbmFtZSsiXSIpOwotCQkJcHJvamVjdC5jcmVhdGUobnVsbCk7Ci0JCQlwcm9qZWN0Lm9wZW4obnVsbCk7Ci0JICAgICAgICBJUHJvamVjdERlc2NyaXB0aW9uIGRlc2MgPSBwcm9qZWN0LmdldERlc2NyaXB0aW9uKCk7Ci0JICAgICAgICBkZXNjLnNldE5hdHVyZUlkcyhuZXcgU3RyaW5nW10ge0phdmFDb3JlLk5BVFVSRV9JRH0pOwotCSAgICAgICAgSUNvbW1hbmQgY21kID0gZGVzYy5uZXdDb21tYW5kKCk7Ci0JICAgICAgICBjbWQuc2V0QnVpbGRlck5hbWUoSmF2YUNvcmUuQlVJTERFUl9JRCk7Ci0JICAgICAgICBkZXNjLnNldEJ1aWxkU3BlYyhuZXcgSUNvbW1hbmRbXSB7Y21kfSk7Ci0JICAgICAgICBwcm9qZWN0LnNldERlc2NyaXB0aW9uKGRlc2MsbnVsbCk7Ci0JCX0KLQkJU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGluZyBKYXZhIHByb2plY3QgWyIrbmFtZSsiXSIpOwotCQlJSmF2YVByb2plY3QgamF2YVByb2plY3QgPSBKYXZhQ29yZS5jcmVhdGUocHJvamVjdCk7Ci0JCWphdmFQcm9qZWN0Lm9wZW4obnVsbCk7Ci0JCXJldHVybiBqYXZhUHJvamVjdDsKLQl9Ci0JCi0JLyoqCi0JICogQWRkcyBBeGlzIGphcnMgYW5kIHRoZSBKUkUgdG8gdGhlIGNsYXNzcGF0aCBvZiB0aGUgZ2l2ZW4gcHJvamVjdC4KLQkgKiBAcGFyYW0gamF2YVByb2plY3QgVGhlIHByb2plY3QgdG8gYWRkIGF4aXMuamFyIHRvLgotCSAqIEB0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uIElmIHRoZSBqYXIgY291bGQgbm90IGJlIGFkZGVkLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgdm9pZCBhZGRSZXF1aXJlZEphcnNUb0phdmFQcm9qZWN0ICggSUphdmFQcm9qZWN0IGphdmFQcm9qZWN0ICkKLQl0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJLy8gR2V0IHRoZSBjdXJyZW50IGNsYXNzcGF0aCBhcyBhIGxpc3QuCi0JCUlDbGFzc3BhdGhFbnRyeVtdIGNsYXNzcGF0aCA9IGphdmFQcm9qZWN0LmdldFJhd0NsYXNzcGF0aCgpOwotCQlMaXN0IGxpc3QgPSBuZXcgTGlua2VkTGlzdChqYXZhLnV0aWwuQXJyYXlzLmFzTGlzdChjbGFzc3BhdGgpKTsKLQkJCi0JCS8vIEFkZCB0aGUgSlJFIHRvIHRoZSBsaXN0LgotCQlJQ2xhc3NwYXRoRW50cnkgY29uID0gSmF2YUNvcmUubmV3Q29udGFpbmVyRW50cnkobmV3IFBhdGgoIm9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUiIpKTsKLQkJbGlzdC5hZGQoY29uKTsKLQkJCi0JCS8vIEFkZCB0aGUgQXhpcyBqYXJzIHRvIHRoZSBsaXN0LgotCQlTdHJpbmdbXSBqYXJzID0gbmV3IFN0cmluZ1tdIHsKLQkJCQkib3JnLmFwYWNoZS5heGlzIiwiYXhpcy5qYXIiLAotCQkJCSJvcmcuYXBhY2hlLmF4aXMiLCJjb21tb25zLWRpc2NvdmVyeS0wLjIuamFyIiwKLQkJCQkib3JnLmFwYWNoZS5jb21tb25zX2xvZ2dpbmciLCJjb21tb25zLWxvZ2dpbmctMS4wLjQuamFyIiwKLQkJCQkib3JnLmFwYWNoZS5heGlzIiwiamF4cnBjLmphciIsCi0JCQkJIm9yZy5hcGFjaGUuamFrYXJ0YV9sb2c0aiIsImxvZzRqLTEuMi44LmphciIsCi0JCQkJIm9yZy5hcGFjaGUuYXhpcyIsInNhYWouamFyIiwKLQkJCQkib3JnLmFwYWNoZS5heGlzIiwid3NkbDRqLTEuNS4xLmphciIKLQkJfTsKLQkJCi0JCWZvciAoaW50IGk9MDsgaTxqYXJzLmxlbmd0aDsgaSs9MikKLQkJewotCQkJSVBhdGggamFyID0gZ2V0QXhpc1BsdWdpbkphclBhdGgoamFyc1tpXSxqYXJzW2krMV0pOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJBZGRpbmcgamFyIFsiK2phci50b1N0cmluZygpKyJdIik7Ci0JCQlJQ2xhc3NwYXRoRW50cnkgamFyRW50cnkgPSBKYXZhQ29yZS5uZXdMaWJyYXJ5RW50cnkoamFyLG51bGwsbnVsbCk7Ci0JCQlsaXN0LmFkZChqYXJFbnRyeSk7Ci0JCX0KLQkJCi0JCS8vIFVwZGF0ZSB0aGUgY3VycmVudCBjbGFzc3BhdGggZnJvbSB0aGUgbGlzdC4KLQkJSUNsYXNzcGF0aEVudHJ5W10gbmV3Q2xhc3NwYXRoID0gKElDbGFzc3BhdGhFbnRyeVtdKWxpc3QudG9BcnJheShuZXcgSUNsYXNzcGF0aEVudHJ5WzBdKTsKLQkJamF2YVByb2plY3Quc2V0UmF3Q2xhc3NwYXRoKG5ld0NsYXNzcGF0aCxudWxsKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZmlsZXN5c3RlbSBwYXRoIHRvIHRoZSBuYW1lZCBqYXIgaW4gdGhlIEF4aXMgcGx1Z2luLgotCSAqIEByZXR1cm4gVGhlIGZpbGVzeXN0ZW0gcGF0aCB0byB0aGUgbmFtZWQgamFyIGluIHRoZSBBeGlzIHBsdWdpbi4KLQkgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24gSWYgdGhlIHBhdGggY291bGQgbm90IGJlIGNvbXB1dGVkLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVBhdGggZ2V0QXhpc1BsdWdpbkphclBhdGggKCBTdHJpbmcgcGx1Z2luTmFtZSwgU3RyaW5nIGphck5hbWUgKQotCXRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKHBsdWdpbk5hbWUpOwotCQlpZiAoYnVuZGxlID09IG51bGwpCi0JCXsKLQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwiIiwwLCJVbmFibGUgdG8gbG9jYXRlIHBsdWdpbiBvcmcuYXBhY2hlLmF4aXMiLG51bGwpKTsKLQkJfQotCQlVUkwgYXhpc1VSTCA9IEZpbGVMb2NhdG9yLmZpbmQoYnVuZGxlLG5ldyBQYXRoKCJsaWIvIitqYXJOYW1lKSxudWxsKTsKLQkJdHJ5Ci0JCXsKLQkJCVVSTCBsb2NhbEF4aXNVUkwgPSBGaWxlTG9jYXRvci50b0ZpbGVVUkwoYXhpc1VSTCk7Ci0JCQlGaWxlIGZpbGUgPSBuZXcgRmlsZShuZXcgVVJJKFVSSUVuY29kZXIuZW5jb2RlKGxvY2FsQXhpc1VSTC50b1N0cmluZygpLCAiVVRGLTgiKSkpOwotCQkJcmV0dXJuIG5ldyBQYXRoKGZpbGUudG9TdHJpbmcoKSk7Ci0JCX0KLQkJY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gdWVlKSB7Ci0JCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIiIsMCwiVW5hYmxlIHRvIGVuY29kZSBqYXIgcGF0aCBmb3IgcGx1Z2luIG9yZy5hcGFjaGUuYXhpcyIsdWVlKSk7CQkJCi0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkKLQkJewotCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCIiLDAsIlVuYWJsZSB0byBsb2NhdGUgcGx1Z2luIG9yZy5hcGFjaGUuYXhpcyIsaW9lKSk7Ci0JCX0KLQkJY2F0Y2ggKFVSSVN5bnRheEV4Y2VwdGlvbiB1c2UpCi0JCXsKLQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwiIiwwLCJVbmFibGUgdG8gbG9jYXRlIHBsdWdpbiBvcmcuYXBhY2hlLmF4aXMiLHVzZSkpOwotCQl9Ci0JfQotCQotCS8qKgotCSAqIENvcGllcyBleGFtcGxlcyB0byB0aGUgZ2l2ZW4gSmF2YSBwcm9qZWN0LgotCSAqIEBwYXJhbSBqYXZhUHJvamVjdCBUaGUgcHJvamVjdCB0byBjb3B5IHRoZSBleGFtcGxlcyB0by4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIHZvaWQgY29weUV4YW1wbGVzVG9KYXZhUHJvamVjdCAoIElKYXZhUHJvamVjdCBqYXZhUHJvamVjdCwgRmlsdGVyIGZpbHRlciApCi0JdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBqYXZhUHJvamVjdC5nZXRQcm9qZWN0KCk7Ci0JCVN0cmluZyBzb3VyY2VQYXRoID0gcHJvamVjdC5nZXROYW1lKCk7Ci0JCWNvcHlFeGFtcGxlKCJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5jb3JlLnRlc3RzIiwiZGF0YS9heGlzU291cmNlMSIsc291cmNlUGF0aCxmaWx0ZXIpOwotCQljb3B5RXhhbXBsZSgib3JnLmVjbGlwc2UuanN0LndzLmF4aXMuY29uc3VtcHRpb24uY29yZS50ZXN0cyIsImRhdGEvYXhpc1NvdXJjZTIiLHNvdXJjZVBhdGgsZmlsdGVyKTsKLQkJcHJvamVjdC5idWlsZChJbmNyZW1lbnRhbFByb2plY3RCdWlsZGVyLkZVTExfQlVJTEQsbnVsbCk7Ci0JCXRyeQotCQl7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIldhaXRpbmcgZm9yIGJ1aWxkIHRvIGNvbXBsZXRlIik7Ci0JCQlQbGF0Zm9ybS5nZXRKb2JNYW5hZ2VyKCkuam9pbihSZXNvdXJjZXNQbHVnaW4uRkFNSUxZX0FVVE9fQlVJTEQsbnVsbCk7Ci0JCX0KLQkJY2F0Y2ggKFRocm93YWJsZSB0KQotCQl7Ci0JCQkvL0RvIG5vdGhpbmcuCi0JCX0KLQl9Ci0JCi0JLyoqCi0JICogUmVjdXJzaXZlbHkgY29waWVzIGZpbGVzIGZyb20gYSBwbHVnaW4gdG8gdGhlIHdvcmtzcGFjZS4KLQkgKiBAcGFyYW0gc291cmNlUGx1Z2luIFRoZSBwbHVnaW4gdG8gY29weSBmcm9tLgotCSAqIEBwYXJhbSBzb3VyY2VSb290IFRoZSBwbHVnaW4tcmVsYXRlZCBwYXRoIHRvIGNvcHkgZnJvbS4KLQkgKiBAcGFyYW0gdGFyZ2V0V29ya3NwYWNlUGF0aCBUaGUgd29ya3NwYWNlIHBhdGggdG8gY29weSB0by4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIHZvaWQgY29weUV4YW1wbGUgKCBTdHJpbmcgc291cmNlUGx1Z2luLCBTdHJpbmcgc291cmNlUm9vdCwgU3RyaW5nIHRhcmdldFdvcmtzcGFjZVBhdGgsIEZpbHRlciBmaWx0ZXIgKQotCXRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKHNvdXJjZVBsdWdpbik7Ci0JCWlmIChidW5kbGUgPT0gbnVsbCkKLQkJewotCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCIiLDAsIlVuYWJsZSB0byBsb2NhdGUgcGx1Z2luICIrc291cmNlUGx1Z2luLG51bGwpKTsKLQkJfQotCQlFbnVtZXJhdGlvbiBlID0gYnVuZGxlLmdldEVudHJ5UGF0aHMoc291cmNlUm9vdCk7Ci0JCXdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKQotCQl7Ci0JCQlTdHJpbmcgcGF0aCA9IGUubmV4dEVsZW1lbnQoKS50b1N0cmluZygpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJCdW5kbGUgcGF0aCA9IFsiK3BhdGgrIl0iKTsKLQkJCWNvcHlFeGFtcGxlRmlsZShidW5kbGUscGF0aCxuZXcgUGF0aChzb3VyY2VSb290KS5zZWdtZW50Q291bnQoKSx0YXJnZXRXb3Jrc3BhY2VQYXRoLGZpbHRlcik7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHN0YXRpYyB2b2lkIGNvcHlFeGFtcGxlRmlsZSAoIEJ1bmRsZSBidW5kbGUsIFN0cmluZyBwYXRoLCBpbnQgb2Zmc2V0LCBTdHJpbmcgdGFyZ2V0V29ya3NwYWNlUGF0aCwgRmlsdGVyIGZpbHRlciApCi0JdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCUlQYXRoIHJlZHVjZWRQYXRoID0gbmV3IFBhdGgocGF0aCkucmVtb3ZlRmlyc3RTZWdtZW50cyhvZmZzZXQpOwotCQlJUGF0aCB0YXJnZXRQYXRoID0gbmV3IFBhdGgodGFyZ2V0V29ya3NwYWNlUGF0aCkuYXBwZW5kKHJlZHVjZWRQYXRoKTsKLQkJaWYgKHBhdGguZW5kc1dpdGgoIi8iKSkKLQkJewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJGb2xkZXIgPSBbIitwYXRoKyJdIFRhcmdldCA9IFsiK3RhcmdldFBhdGgrIl0iKTsKLQkJCUlGb2xkZXIgZm9sZGVyID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGb2xkZXIodGFyZ2V0UGF0aCk7Ci0JCQlpZiAoIWZvbGRlci5leGlzdHMoKSkKLQkJCXsKLQkJCQlmb2xkZXIuY3JlYXRlKHRydWUsdHJ1ZSxudWxsKTsKLQkJCX0KLQkJCUVudW1lcmF0aW9uIGUgPSBidW5kbGUuZ2V0RW50cnlQYXRocyhwYXRoKTsKLQkJCXdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKQotCQkJewotCQkJCVN0cmluZyBzdWJwYXRoID0gZS5uZXh0RWxlbWVudCgpLnRvU3RyaW5nKCk7Ci0JCQkJY29weUV4YW1wbGVGaWxlKGJ1bmRsZSxzdWJwYXRoLG9mZnNldCx0YXJnZXRXb3Jrc3BhY2VQYXRoLGZpbHRlcik7Ci0JCQl9Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkZpbGUgPSBbIitwYXRoKyJdIFRhcmdldCA9IFsiK3RhcmdldFBhdGgrIl0iKTsKLQkJCWlmIChmaWx0ZXIuYWNjZXB0KHBhdGgpKQotCQkJewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQ29waWVkIFsiK3BhdGgrIl0iKTsKLQkJCQlVUkwgdXJsID0gYnVuZGxlLmdldEVudHJ5KHBhdGgpOwotCQkJCWNvcHlGaWxlKHVybCx0YXJnZXRQYXRoKTsKLQkJCX0KLQkJfQotCX0KLQkKLQlwdWJsaWMgc3RhdGljIHZvaWQgY29weUZpbGUgKCBVUkwgdXJsLCBJUGF0aCB0YXJnZXRQYXRoICkKLQl0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZSh0YXJnZXRQYXRoKTsKLQkJdHJ5Ci0JCXsKLQkJCUlucHV0U3RyZWFtIHN0cmVhbSA9IHVybC5vcGVuU3RyZWFtKCk7Ci0JCQlmaWxlLmNyZWF0ZShzdHJlYW0sdHJ1ZSxudWxsKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gaW9lKQotCQl7Ci0JCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIiIsMCwiSU9FeGNlcHRpb24gY29weWluZyBmaWxlIixpb2UpKTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwNGU4NjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDM0ODEwOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotYmluCi1idWlsZC54bWwKLXRlbXAuZm9sZGVyCi1heGlzUGVyZm1zci5qYXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDg4ZTFhOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2U8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiNmU4ZTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLSNUaHUgTWF5IDMxIDE0OjI4OjA1IEVEVCAyMDA3Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotaW5zdGFuY2Uvb3JnLmVjbGlwc2UuY29yZS5uZXQvb3JnLmVjbGlwc2UuY29yZS5uZXQuaGFzTWlncmF0ZWQ9dHJ1ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0NjNjZDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jTW9uIEphbiAzMCAxMDo0MDo1NCBFU1QgMjAwNgotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzAyMDI5NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlUExVR0lOX05BTUUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZTsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjIwMS5xdWFsaWZpZXIKLUJ1bmRsZS1DbGFzc1BhdGg6IHBlcmZ0ZXN0cy5qYXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS5wbHVnaW4uUGVyZm9ybWFuY2VQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVQTFVHSU5fUFJPVklERVIKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzLnRvbWNhdC52NTAucGVyZm1zciwKLSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpczIudG9tY2F0LnY1NS5wZXJmbXNyLAotIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UucGx1Z2luLAotIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS51dGlsCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuanN0LndzLAotIG9yZy5lY2xpcHNlLmpzdC5qMmVlLmNvcmUsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAotIG9yZy5lY2xpcHNlLnVpLAotIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZSwKLSBvcmcuanVuaXQ7YnVuZGxlLXZlcnNpb249IlszLjguMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cywKLSBvcmcuZWNsaXBzZS5qZW0udXRpbCwKLSBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24ubW9kdWxlY29yZSwKLSBvcmcuZWNsaXBzZS5lbWYuZWNvcmUsCi0gb3JnLmVjbGlwc2UuanN0LndzLmNvbnN1bXB0aW9uLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZnJhbWV3b3JrcywKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYsCi0gb3JnLmVjbGlwc2UuanN0LndzLmF4aXMyLmNvcmUKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGIzNmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lIDA2LCAyMDA3PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwM2YwNjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1iaW4uaW5jbHVkZXMgPSBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICBwZXJmdGVzdHMuamFyLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIGJpbi8sXAotICAgICAgICAgICAgICAgYXB0LwotamFycy5jb21waWxlLm9yZGVyID0gcGVyZnRlc3RzLmphcgotc291cmNlLnBlcmZ0ZXN0cy5qYXIgPSBzcmMvCi1vdXRwdXQucGVyZnRlc3RzLmphciA9IGJpbi8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTlkODliYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSMgLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgMjAwNjA0MjQgICAxMzgwNjAga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIwotIyBNZXNzYWdlcyBpbiBwbHVnaW4ueG1sLgotIwotUExVR0lOX05BTUU9SlNUIFdlYiBTZXJ2aWNlcyBQZXJmb3JtYW5jZSBQbHVnLWluCi1QTFVHSU5fUFJPVklERVI9RWNsaXBzZS5vcmcKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL2F4aXMvdG9tY2F0L3Y1MC9wZXJmbXNyL1BlcmZtc3JCVUphdmFBeGlzVEM1MC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvYXhpcy90b21jYXQvdjUwL3BlcmZtc3IvUGVyZm1zckJVSmF2YUF4aXNUQzUwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwMDBkN2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvYXhpcy90b21jYXQvdjUwL3BlcmZtc3IvUGVyZm1zckJVSmF2YUF4aXNUQzUwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNTAyICAxODUyMDggc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1IAotICogMjAwNzA1MDkgIDE4MDU2NyBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDcwNzA1ICAxOTU1NTMgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MC5wZXJmbXNyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5pbnRlcm5hbC5KMkVFVmVyc2lvbkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uLkNyZWF0ZU1vZHVsZUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MC5XU1dpemFyZFRvbWNhdDUwVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UudXRpbC5QZXJmb3JtYW5jZUpVbml0VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnVuaXR0ZXN0LldTSlVuaXRDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnV0aWwuSlVuaXRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbC5TY2VuYXJpb0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlLlBlcmZvcm1hbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnRlc3QucGVyZm9ybWFuY2UuUGVyZm9ybWFuY2VNZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5BY2N1bXVsYXRlU3RhdHVzSGFuZGxlcjsKLQotLyoqCi0gKiBCb3R0b20gdXAgcGVyZm9ybWFuY2Ugc2NlbmFyaW8gd2l0aCBBeGlzIGFuZCBUb21jYXQgdjUuMAotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgUGVyZm1zckJVSmF2YUF4aXNUQzUwIGV4dGVuZHMgV1NXaXphcmRUb21jYXQ1MFRlc3QgewotCS8vIENvbnN0YW50cwotICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIFdTX1JVTlRJTUVJRF9BWElTID0gIFdTSlVuaXRDb25zdGFudHMuV1NfUlVOVElNRUlEX0FYSVM7IAotCXByaXZhdGUgZmluYWwgU3RyaW5nIFBST0pFQ1RfTkFNRSA9IFdTSlVuaXRDb25zdGFudHMuQlVfUFJPSkVDVF9OQU1FOwotICAgIAotCXByaXZhdGUgSUZpbGUgc291cmNlRmlsZV87Ci0JCi0gIC8qKgotICAgKiBTZXRzIHVwIHRoZSBpbnB1dCBkYXRhOwotICAgKiAtIGNyZWF0ZSBwcm9qZWN0KHMpLAotICAgKiAtIGNvcHkgcmVzb3VyY2VzIHRvIHdvcmtzcGFjZSAKLSAgICovCi0JcHJvdGVjdGVkIHZvaWQgaW5zdGFsbElucHV0RGF0YSgpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JICAgIAotCQlJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSk7Ci0gICAgICAgIElQYXRoIGRlc3RQYXRoID0gUmVzb3VyY2VVdGlscy5nZXRKYXZhU291cmNlTG9jYXRpb24od2ViUHJvamVjdCk7Ci0gICAgICAgIElGb2xkZXIgZm9sZGVyID0gKElGb2xkZXIpUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2UoZGVzdFBhdGgpOwkJCi0JCUpVbml0VXRpbHMuY29weVRlc3REYXRhKCJCVUphdmEvc3JjIixmb2xkZXIsZW52XywgbnVsbCk7Ci0JCXNvdXJjZUZpbGVfID0gZm9sZGVyLmdldEZpbGUobmV3IFBhdGgoImZvby9FY2hvLmphdmEiKSk7Ci0JCS8vIEVuc3VyZSB0aGF0IEVjaG8uY2xhc3MgaXMgYnVpbHQgaW46Ci0JCS8vIDxXZWIgUHJvamVjdD4vV2ViQ29udGVudC9XRUItSU5GL2NsYXNzZXMvZm9vL0VjaG8uY2xhc3MKLQkJSlVuaXRVdGlscy5kaXNhYmxlVmFsaWRhdGlvbih3ZWJQcm9qZWN0KTsKLQkJSlVuaXRVdGlscy5zeW5jQnVpbGRQcm9qZWN0KHdlYlByb2plY3QsZW52XywgbnVsbCk7Ci0JCS8vYXNzZXJ0VHJ1ZShKVW5pdFV0aWxzLmdldENsYXNzZXNGb2xkZXJGb3JXZWJQcm9qZWN0KFdFQl9QUk9KRUNUX05BTUUpLmdldEZpbGUobmV3IFBhdGgoImZvby9FY2hvLmNsYXNzIikpLmV4aXN0cygpKTsKLQotCQkKLQl9Ci0JCi0gICAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlUHJvamVjdHMoKSB0aHJvd3MgRXhjZXB0aW9uewotICAgICAgICBJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSk7Ci0gICAgICAgIGlmICh3ZWJQcm9qZWN0PT1udWxsIHx8ICF3ZWJQcm9qZWN0LmV4aXN0cygpKXsKLSAgICAgICAgICBjcmVhdGVXZWJNb2R1bGUoUFJPSkVDVF9OQU1FLCBQUk9KRUNUX05BTUUsSjJFRVZlcnNpb25Db25zdGFudHMuSjJFRV8xXzRfSUQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIHByaXZhdGUgdm9pZCBjcmVhdGVXZWJNb2R1bGUoU3RyaW5nIHByb2plY3RObSwgU3RyaW5nIGNvbXBvbmVudE5hbWUsIGludCBqMmVlVmVyc2lvbil7Ci0KLSAgICAgICAgQ3JlYXRlTW9kdWxlQ29tbWFuZCBjbWMgPSBuZXcgQ3JlYXRlTW9kdWxlQ29tbWFuZCgpOwotICAgICAgICBjbWMuc2V0SjJlZUxldmVsKG5ldyBJbnRlZ2VyKGoyZWVWZXJzaW9uKS50b1N0cmluZygpKTsKLSAgICAgICAgY21jLnNldE1vZHVsZU5hbWUoY29tcG9uZW50TmFtZSk7Ci0gICAgICAgIGNtYy5zZXRNb2R1bGVUeXBlKENyZWF0ZU1vZHVsZUNvbW1hbmQuV0VCKTsKLSAgICAgICAgY21jLnNldFByb2plY3ROYW1lKHByb2plY3RObSk7Ci0gICAgICAgIGNtYy5zZXRTZXJ2ZXJGYWN0b3J5SWQoU0VSVkVSVFlQRUlEX1RDNTApOwotICAgICAgICBjbWMuc2V0U2VydmVySW5zdGFuY2VJZChzZXJ2ZXJfLmdldElkKCkpOwotICAgICAgICBjbWMuZXhlY3V0ZShudWxsLCBudWxsICk7Ci0gICAgICAgIAotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRvbmUgY3JlYXRpbmcgV2ViIFByb2plY3QsICIrcHJvamVjdE5tKTsgICAgICAKLSAgICAgICAKLSAgICAgIH0KLQkKLQkKLSAgLyoqCi0gICAqIFNldCB0aGUgcGVyc2lzdGVudCBzZXJ2ZXIgcnVudGltZSBjb250ZXh0IHByZWZlcmVuY2VzCi0gICAqLyAgCi0JcHJvdGVjdGVkIHZvaWQgaW5pdEoyRUVXU1J1bnRpbWVTZXJ2ZXJEZWZhdWx0cygpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCS8vIFNldCBkZWZhdWx0IHByZWZlcmVuY2VzIGZvciBBeGlzIGFuZCBUb21jYXQgNS4wCi0JCUpVbml0VXRpbHMuc2V0V1NSdW50aW1lU2VydmVyKFdTX1JVTlRJTUVJRF9BWElTLCBTRVJWRVJUWVBFSURfVEM1MCk7CQkKLQl9Ci0JCi0gIC8qKgotICAgKiBTZXQgdGhlIGluaXRpYWwgc2VsZWN0aW9uCi0gICAqLwotCXByb3RlY3RlZCB2b2lkIGluaXRJbml0aWFsU2VsZWN0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJaW5pdGlhbFNlbGVjdGlvbl8gPSBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihzb3VyY2VGaWxlXyk7Ci0JfQotCQotICAvKioKLSAgICogTGF1bmNoZXMgdGhlIHBvcC11cCBjb21tYW5kIHRvIGluaXRpYXRlIHRoZSBzY2VuYXJpbwotICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgotICAgKi8gIAotCXB1YmxpYyB2b2lkIHRlc3RCVUphdmFBeGlzVEM1MCgpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JICAJSVN0YXR1c1tdIHN0YXR1czsKLQkgICAgSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChQUk9KRUNUX05BTUUpOwotCSAgICBKVW5pdFV0aWxzLmRpc2FibGVXU0lEaWFsb2cod2ViUHJvamVjdCk7Ci0JCUpVbml0VXRpbHMuZW5hYmxlT3ZlcndyaXRlKHRydWUpOwotCSAgICBKVW5pdFV0aWxzLnNldFJ1bnRpbWVQcmVmZXJlbmNlKCJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi5heGlzV2ViU2VydmljZVJUIik7Ci0KLQkgICAgCi0JICAgIFBlcmZvcm1hbmNlIHBlcmY9IFBlcmZvcm1hbmNlLmdldERlZmF1bHQoKTsKLQkgICAgUGVyZm9ybWFuY2VNZXRlciBwZXJmb3JtYW5jZU1ldGVyPSBwZXJmLmNyZWF0ZVBlcmZvcm1hbmNlTWV0ZXIocGVyZi5nZXREZWZhdWx0U2NlbmFyaW9JZCh0aGlzKSk7CSAgICAKLQkgICAgdHJ5IHsKLSAgICAKLQkgICAgICBwZXJmb3JtYW5jZU1ldGVyLnN0YXJ0KCk7Ci0JICAgICAgc3RhdHVzID0gUGVyZm9ybWFuY2VKVW5pdFV0aWxzLmxhdW5jaENyZWF0aW9uV2l6YXJkKFNjZW5hcmlvQ29uc3RhbnRzLldJWkFSRElEX0JPVFRPTV9VUCxTY2VuYXJpb0NvbnN0YW50cy5PQkpFQ1RfQ0xBU1NfSURfSUZJTEUsaW5pdGlhbFNlbGVjdGlvbl8pOwotCSAgICAgIHBlcmZvcm1hbmNlTWV0ZXIuc3RvcCgpOwotCi0JICAgICAgcGVyZm9ybWFuY2VNZXRlci5jb21taXQoKTsKLQkgICAgICBwZXJmLmFzc2VydFBlcmZvcm1hbmNlKHBlcmZvcm1hbmNlTWV0ZXIpOwotCSAgICB9Ci0JICAgIGZpbmFsbHkgewotCSAgICAJaWYgKHBlcmZvcm1hbmNlTWV0ZXI9PW51bGwpCi0JICAgIAkJcGVyZm9ybWFuY2VNZXRlci5kaXNwb3NlKCk7Ci0JIAl9Ci0JCQotCSAgICB2ZXJpZnlPdXRwdXQoc3RhdHVzKTsKLQkJCi0JfQotCQotICAvKioKLSAgICogVmVyaWZ5IHRoZSBzY2VuYXJpbyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5Ci0gICAqIEB0aHJvd3MgRXhjZXB0aW9uCi0gICAqLwotCXByaXZhdGUgZmluYWwgdm9pZCB2ZXJpZnlPdXRwdXQoSVN0YXR1c1tdIHN0YXR1cykgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLSAgICAgICAgSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChQUk9KRUNUX05BTUUpOyAgICAKLQkJSUZvbGRlciB3ZWJDb250ZW50Rm9sZGVyID0gKElGb2xkZXIpSjJFRVV0aWxzLmdldFdlYkNvbnRlbnRDb250YWluZXIod2ViUHJvamVjdCk7Ci0gICAgCi0gICAgICAgIElGb2xkZXIgd3NkbEZvbGRlciA9IHdlYkNvbnRlbnRGb2xkZXIuZ2V0Rm9sZGVyKCJ3c2RsIik7Ci0JCWFzc2VydFRydWUod3NkbEZvbGRlci5leGlzdHMoKSk7Ci0JCWFzc2VydFRydWUod3NkbEZvbGRlci5tZW1iZXJzKCkubGVuZ3RoID4gMCk7Ci0JCWFzc2VydFRydWUod2ViQ29udGVudEZvbGRlci5nZXRGb2xkZXIoIndzZGwiKS5tZW1iZXJzKCkubGVuZ3RoID4gMCk7Ci0gICAgCi0JCUFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyIHN0YXR1c0hhbmRsZXIgPSBuZXcgQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXIoc3RhdHVzKTsKLQkJSVN0YXR1c1tdIHMgPSBzdGF0dXNIYW5kbGVyLmdldEVycm9yUmVwb3J0cygpOwotCQkvL3Nob3cgZXJyb3JzCi0JCWlmIChzLmxlbmd0aCA+IDApewotCQkJZm9yIChpbnQgaT0wO2k8cy5sZW5ndGg7aSsrKXsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkJVSmF2YSBFcnJvciBtZXNzYWdlIGZvciByZXBvcnQgIyIraSsiOiAiK3NbaV0uZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQkJfQotCQlhc3NlcnRUcnVlKHMubGVuZ3RoID09IDApOwotCX0KLQkKLSAgLyoqCi0gICAqIENsZWFyIHdvcmtzcGFjZSBpZiBuZWNlc3NhcnkKLSAgICovCi0JcHJvdGVjdGVkIHZvaWQgZGVsZXRlSW5wdXREYXRhKCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJLy8gUmVtb3ZlIHRoZSBFQVIgZnJvbSB0aGUgc2VydmVyLgotCQlJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSk7Ci0JCS8vSlVuaXRVdGlscy5yZW1vdmVNb2R1bGVGcm9tU2VydmVyKHNlcnZlcl8sd2ViUHJvamVjdCxlbnZfKTsKLQkJCi0JCS8vIERlbGV0ZSB0aGUgV2ViIHByb2plY3QuCi0JCXdlYlByb2plY3QuZGVsZXRlKHRydWUsdHJ1ZSwgbnVsbCk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHdlYlByb2plY3QuZXhpc3RzKCkpOwotCQkKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvYXhpcy90b21jYXQvdjUwL3BlcmZtc3IvUGVyZm1zckNsaWVudEF4aXNUQzUwLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2Uvc3JjL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9heGlzL3RvbWNhdC92NTAvcGVyZm1zci9QZXJmbXNyQ2xpZW50QXhpc1RDNTAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFkZjE2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2Uvc3JjL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9heGlzL3RvbWNhdC92NTAvcGVyZm1zci9QZXJmbXNyQ2xpZW50QXhpc1RDNTAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNTAyICAxODUyMDggc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1ICAgICAgCi0gKiAyMDA3MDUwOSAgMTgwNTY3IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICogMjAwNzA3MDUgIDE5NTU1MyBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjUwLnBlcmZtc3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmludGVybmFsLkoyRUVWZXJzaW9uQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uSjJFRVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb24uQ3JlYXRlTW9kdWxlQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjUwLldTV2l6YXJkVG9tY2F0NTBUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS51dGlsLlBlcmZvcm1hbmNlSlVuaXRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudW5pdHRlc3QuV1NKVW5pdENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbC5KVW5pdFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsLlNjZW5hcmlvQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnRlc3QucGVyZm9ybWFuY2UuUGVyZm9ybWFuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudGVzdC5wZXJmb3JtYW5jZS5QZXJmb3JtYW5jZU1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyOwotCi0vKioKLSAqIENsaWVudCBwZXJmb3JtYW5jZSBzY2VuYXJpbyB3aXRoIEF4aXMgYW5kIFRvbWNhdCB2NS4wCi0gKi8KLXB1YmxpYyBjbGFzcyBQZXJmbXNyQ2xpZW50QXhpc1RDNTAgZXh0ZW5kcyBXU1dpemFyZFRvbWNhdDUwVGVzdCB7Ci0KLQlwcml2YXRlIGZpbmFsIFN0cmluZyBXU19SVU5USU1FSURfQVhJUyA9IFdTSlVuaXRDb25zdGFudHMuV1NfUlVOVElNRUlEX0FYSVM7Ci0gIAotCXByaXZhdGUgZmluYWwgU3RyaW5nIENMSUVOVF9QUk9KRUNUX05BTUUgPSBXU0pVbml0Q29uc3RhbnRzLkNMSUVOVF9QUk9KRUNUX05BTUU7Ci0JCi0JcHJpdmF0ZSBJRmlsZSBzb3VyY2VGaWxlXzsKLQotICAgIHByb3RlY3RlZCB2b2lkIGNyZWF0ZVByb2plY3RzKCkgdGhyb3dzIEV4Y2VwdGlvbnsKLSAgICAgICAgSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChDTElFTlRfUFJPSkVDVF9OQU1FKTsKLSAgICAgICAgaWYgKCF3ZWJQcm9qZWN0LmV4aXN0cygpKXsKLSAgICAgICAgICBjcmVhdGVXZWJNb2R1bGUoQ0xJRU5UX1BST0pFQ1RfTkFNRSwgQ0xJRU5UX1BST0pFQ1RfTkFNRSxKMkVFVmVyc2lvbkNvbnN0YW50cy5KMkVFXzFfNF9JRCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIAotICAgICAgcHJpdmF0ZSB2b2lkIGNyZWF0ZVdlYk1vZHVsZShTdHJpbmcgcHJvamVjdE5tLCBTdHJpbmcgY29tcG9uZW50TmFtZSwgaW50IGoyZWVWZXJzaW9uKXsKLQotICAgICAgICBDcmVhdGVNb2R1bGVDb21tYW5kIGNtYyA9IG5ldyBDcmVhdGVNb2R1bGVDb21tYW5kKCk7Ci0gICAgICAgIGNtYy5zZXRKMmVlTGV2ZWwobmV3IEludGVnZXIoajJlZVZlcnNpb24pLnRvU3RyaW5nKCkpOwotICAgICAgICBjbWMuc2V0TW9kdWxlTmFtZShjb21wb25lbnROYW1lKTsKLSAgICAgICAgY21jLnNldE1vZHVsZVR5cGUoQ3JlYXRlTW9kdWxlQ29tbWFuZC5XRUIpOwotICAgICAgICBjbWMuc2V0UHJvamVjdE5hbWUocHJvamVjdE5tKTsKLSAgICAgICAgY21jLnNldFNlcnZlckZhY3RvcnlJZChTRVJWRVJUWVBFSURfVEM1MCk7Ci0gICAgICAgIGNtYy5zZXRTZXJ2ZXJJbnN0YW5jZUlkKHNlcnZlcl8uZ2V0SWQoKSk7Ci0gICAgICAgIGNtYy5leGVjdXRlKG51bGwsIG51bGwgKTsKLSAgICAgICAgCi0gICAgICB9Ci0gICAgICAKLQkvKioKLSAgICogU2V0cyB1cCB0aGUgaW5wdXQgZGF0YTsKLSAgICogLSBjcmVhdGUgcHJvamVjdChzKSwKLSAgICogLSBjb3B5IHJlc291cmNlcyB0byB3b3Jrc3BhY2UgCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgaW5zdGFsbElucHV0RGF0YSgpIHRocm93cyBFeGNlcHRpb24gewotCQkKLQkKLQkJSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChDTElFTlRfUFJPSkVDVF9OQU1FKTsKLSAgICAgICAgSUZvbGRlciBkZXN0Rm9sZGVyID0gKElGb2xkZXIpSjJFRVV0aWxzLmdldFdlYkNvbnRlbnRDb250YWluZXIod2ViUHJvamVjdCk7Ci0gICAgICAgIEpVbml0VXRpbHMuY29weVRlc3REYXRhKCJUREphdmEiLGRlc3RGb2xkZXIsZW52XywgbnVsbCk7Ci0JCXNvdXJjZUZpbGVfID0gZGVzdEZvbGRlci5nZXRGaWxlKG5ldyBQYXRoKCJFY2hvLndzZGwiKSk7CQkKLQotCQlKVW5pdFV0aWxzLmRpc2FibGVWYWxpZGF0aW9uKHdlYlByb2plY3QpOwotCQlKVW5pdFV0aWxzLnN5bmNCdWlsZFByb2plY3Qod2ViUHJvamVjdCxlbnZfLCBudWxsKTsKLQkJCi0JfQotCi0gIC8qKgotICAgKiBTZXQgdGhlIHBlcnNpc3RlbnQgc2VydmVyIHJ1bnRpbWUgY29udGV4dCBwcmVmZXJlbmNlcwotICAgKi8KLQlwcm90ZWN0ZWQgdm9pZCBpbml0SjJFRVdTUnVudGltZVNlcnZlckRlZmF1bHRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFNldCBkZWZhdWx0IHByZWZlcmVuY2VzIGZvciBBeGlzIGFuZCBUb21jYXQgNS4wICAgIAotCQlKVW5pdFV0aWxzLnNldFdTUnVudGltZVNlcnZlcihXU19SVU5USU1FSURfQVhJUywgU0VSVkVSVFlQRUlEX1RDNTApOwotCX0KLQotICAvKioKLSAgICogU2V0IHRoZSBpbml0aWFsIHNlbGVjdGlvbgotICAgKi8KLQlwcm90ZWN0ZWQgdm9pZCBpbml0SW5pdGlhbFNlbGVjdGlvbigpIHRocm93cyBFeGNlcHRpb24gewotCQlpbml0aWFsU2VsZWN0aW9uXyA9IG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHNvdXJjZUZpbGVfKTsKLQl9Ci0KLSAgLyoqCi0gICAqIExhdW5jaGVzIHRoZSBwb3AtdXAgY29tbWFuZCB0byBpbml0aWF0ZSB0aGUgc2NlbmFyaW8KLSAgICogQHRocm93cyBFeGNlcHRpb24KLSAgICovCi0JcHVibGljIHZvaWQgdGVzdENsaWVudEF4aXNUQzUwKCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsJCi0JICAJSVN0YXR1c1tdIHN0YXR1czsKLQkgIAkKLQkJSlVuaXRVdGlscy5lbmFibGVQcm94eUdlbmVyYXRpb24odHJ1ZSk7Ci0JCUpVbml0VXRpbHMuZW5hYmxlT3ZlcndyaXRlKHRydWUpOwotCQlKVW5pdFV0aWxzLnNldFJ1bnRpbWVQcmVmZXJlbmNlKCJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi5heGlzV2ViU2VydmljZVJUIik7Ci0JCi0JCVBlcmZvcm1hbmNlIHBlcmY9IFBlcmZvcm1hbmNlLmdldERlZmF1bHQoKTsKLQkJUGVyZm9ybWFuY2VNZXRlciBwZXJmb3JtYW5jZU1ldGVyPSBwZXJmLmNyZWF0ZVBlcmZvcm1hbmNlTWV0ZXIocGVyZi5nZXREZWZhdWx0U2NlbmFyaW9JZCh0aGlzKSk7CSAgICAKLQkgICAgdHJ5IHsKLSAgICAKLQkgICAgICBwZXJmb3JtYW5jZU1ldGVyLnN0YXJ0KCk7Ci0JICAgICAgc3RhdHVzID0gUGVyZm9ybWFuY2VKVW5pdFV0aWxzLmxhdW5jaENyZWF0aW9uV2l6YXJkKFNjZW5hcmlvQ29uc3RhbnRzLldJWkFSRElEX0NMSUVOVCxTY2VuYXJpb0NvbnN0YW50cy5PQkpFQ1RfQ0xBU1NfSURfSUZJTEUsaW5pdGlhbFNlbGVjdGlvbl8pOwotCSAgICAgIHBlcmZvcm1hbmNlTWV0ZXIuc3RvcCgpOwotCSAgICAgIHBlcmZvcm1hbmNlTWV0ZXIuY29tbWl0KCk7Ci0JICAgICAgcGVyZi5hc3NlcnRQZXJmb3JtYW5jZShwZXJmb3JtYW5jZU1ldGVyKTsKLQkgICAgfQotCSAgICBmaW5hbGx5IHsKLQkgICAgCWlmIChwZXJmb3JtYW5jZU1ldGVyPT1udWxsKQotCSAgICAJCXBlcmZvcm1hbmNlTWV0ZXIuZGlzcG9zZSgpOwotCSAJfQotCSAgICAKLQkgICAgdmVyaWZ5T3V0cHV0KHN0YXR1cyk7Ci0KLQotCX0KLQkKLSAgLyoqCi0gICAqIFZlcmlmeSB0aGUgc2NlbmFyaW8gY29tcGxldGVkIHN1Y2Nlc2Z1bGx5Ci0gICAqIEB0aHJvd3MgRXhjZXB0aW9uCi0gICAqLwotCXByaXZhdGUgZmluYWwgdm9pZCB2ZXJpZnlPdXRwdXQoSVN0YXR1c1tdIHN0YXR1cykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIElQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoQ0xJRU5UX1BST0pFQ1RfTkFNRSk7Ci0gICAgCi0gICAgICAgIElQYXRoIGRlc3RQYXRoID0gUmVzb3VyY2VVdGlscy5nZXRKYXZhU291cmNlTG9jYXRpb24od2ViUHJvamVjdCk7Ci0gICAgICAgIElGb2xkZXIgc3JjRm9sZGVyID0gKElGb2xkZXIpUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2UoZGVzdFBhdGgpOwotICAgIAotCQkvL0lGb2xkZXIgc3JjRm9sZGVyID0gSlVuaXRVdGlscy5nZXRTb3VyY2VGb2xkZXJGb3JXZWJQcm9qZWN0KENMSUVOVF9QUk9KRUNUX05BTUUpOwotCQlJRm9sZGVyIGZvbGRlciA9IHNyY0ZvbGRlci5nZXRGb2xkZXIoImZvbyIpOwotCQlhc3NlcnRUcnVlKGZvbGRlci5leGlzdHMoKSk7Ci0JCWFzc2VydFRydWUoZm9sZGVyLm1lbWJlcnMoKS5sZW5ndGggPiAwKTsKLQkJCi0JCUFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyIHN0YXR1c0hhbmRsZXIgPSBuZXcgQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXIoc3RhdHVzKTsKLQkJSVN0YXR1c1tdIHMgPSBzdGF0dXNIYW5kbGVyLmdldEVycm9yUmVwb3J0cygpOwotCQkvLwotCQlpZiAocy5sZW5ndGggPiAwKXsKLQkJCWZvciAoaW50IGk9MDtpPHMubGVuZ3RoO2krKyl7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJFcnJvciBtZXNzYWdlIGZvciByZXBvcnQgIyIraSsiOiAiK3NbaV0uZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQkJfQotCQlhc3NlcnRUcnVlKHMubGVuZ3RoID09IDApOyAgICAgICAKLQotCX0KLQkKLSAgLyoqCi0gICAqIFJlbW92ZSB3b3Jrc3BhY2UgaWYgbmVjZXNzYXJ5Ci0gICAqLwotCXByb3RlY3RlZCB2b2lkIGRlbGV0ZUlucHV0RGF0YSgpIHRocm93cyBFeGNlcHRpb24gewotCi0JCS8vIERlbGV0ZSB0aGUgV2ViIHByb2plY3QuCi0JCUlQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoQ0xJRU5UX1BST0pFQ1RfTkFNRSk7Ci0JCXdlYlByb2plY3QuZGVsZXRlKHRydWUsdHJ1ZSwgbnVsbCk7Ci0JCQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvYXhpcy90b21jYXQvdjUwL3BlcmZtc3IvUGVyZm1zclRESmF2YUF4aXNUQzUwLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2Uvc3JjL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9heGlzL3RvbWNhdC92NTAvcGVyZm1zci9QZXJmbXNyVERKYXZhQXhpc1RDNTAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg5YzVlNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2Uvc3JjL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9heGlzL3RvbWNhdC92NTAvcGVyZm1zci9QZXJmbXNyVERKYXZhQXhpc1RDNTAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA1MDIgIDE4NTIwOCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUgICAgIAotICogMjAwNzA1MDkgIDE4MDU2NyBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDcwNzA1ICAxOTU1NTMgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MC5wZXJmbXNyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmludGVybmFsLkoyRUVWZXJzaW9uQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uSjJFRVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5DcmVhdGVNb2R1bGVDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzLnRvbWNhdC52NTAuV1NXaXphcmRUb21jYXQ1MFRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlLnV0aWwuUGVyZm9ybWFuY2VKVW5pdFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51bml0dGVzdC5XU0pVbml0Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsLkpVbml0VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnV0aWwuU2NlbmFyaW9Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudGVzdC5wZXJmb3JtYW5jZS5QZXJmb3JtYW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlLlBlcmZvcm1hbmNlTWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXI7Ci0KLS8qKgotICogVG9wIGRvd24gcGVyZm9ybWFuY2Ugc2NlbmFyaW8gd2l0aCBBeGlzIGFuZCBUb21jYXQgdjUuMAotICovCi1wdWJsaWMgY2xhc3MgUGVyZm1zclRESmF2YUF4aXNUQzUwIGV4dGVuZHMgV1NXaXphcmRUb21jYXQ1MFRlc3QgewotCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFdTX1JVTlRJTUVJRF9BWElTID0gV1NKVW5pdENvbnN0YW50cy5XU19SVU5USU1FSURfQVhJUzsKLSAgCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFBST0pFQ1RfTkFNRSA9IFdTSlVuaXRDb25zdGFudHMuVERfUFJPSkVDVF9OQU1FOwotICAKLSAgcHJpdmF0ZSBJRmlsZSBzb3VyY2VGaWxlXzsKLQkKLSAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlUHJvamVjdHMoKSB0aHJvd3MgRXhjZXB0aW9uewotCSAgICBJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSk7Ci0JICAgIGlmICghd2ViUHJvamVjdC5leGlzdHMoKSl7Ci0JICAgICAgY3JlYXRlV2ViTW9kdWxlKFBST0pFQ1RfTkFNRSwgUFJPSkVDVF9OQU1FLEoyRUVWZXJzaW9uQ29uc3RhbnRzLkoyRUVfMV80X0lEKTsKLQkgICAgfQotCSAgfQotCSAgCi0JICBwcml2YXRlIHZvaWQgY3JlYXRlV2ViTW9kdWxlKFN0cmluZyBwcm9qZWN0Tm0sIFN0cmluZyBjb21wb25lbnROYW1lLCBpbnQgajJlZVZlcnNpb24pewotCi0JICAgIENyZWF0ZU1vZHVsZUNvbW1hbmQgY21jID0gbmV3IENyZWF0ZU1vZHVsZUNvbW1hbmQoKTsKLQkgICAgY21jLnNldEoyZWVMZXZlbChuZXcgSW50ZWdlcihqMmVlVmVyc2lvbikudG9TdHJpbmcoKSk7Ci0JICAgIGNtYy5zZXRNb2R1bGVOYW1lKGNvbXBvbmVudE5hbWUpOwotCSAgICBjbWMuc2V0TW9kdWxlVHlwZShDcmVhdGVNb2R1bGVDb21tYW5kLldFQik7Ci0JICAgIGNtYy5zZXRQcm9qZWN0TmFtZShwcm9qZWN0Tm0pOwotCSAgICBjbWMuc2V0U2VydmVyRmFjdG9yeUlkKFNFUlZFUlRZUEVJRF9UQzUwKTsKLQkgICAgY21jLnNldFNlcnZlckluc3RhbmNlSWQoc2VydmVyXy5nZXRJZCgpKTsKLQkgICAgY21jLmV4ZWN1dGUobnVsbCwgbnVsbCApOwotCSAgICAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJEb25lIGNyZWF0aW5nIFdlYiBQcm9qZWN0LCAiK3Byb2plY3RObSk7ICAgICAgCi0JICAgCi0JICB9ICAKLQkgIAotICAvKioKLSAgICogU2V0cyB1cCB0aGUgaW5wdXQgZGF0YTsKLSAgICogLSBjcmVhdGUgcHJvamVjdChzKSwKLSAgICogLSBjb3B5IHJlc291cmNlcyB0byB3b3Jrc3BhY2UgCi0gICAqLyAgCi0JcHJvdGVjdGVkIHZvaWQgaW5zdGFsbElucHV0RGF0YSgpIHRocm93cyBFeGNlcHRpb24gewotCi0JCUlQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoUFJPSkVDVF9OQU1FKTsJCQotCQlJRm9sZGVyIGRlc3RGb2xkZXIgPSAoSUZvbGRlcilKMkVFVXRpbHMuZ2V0V2ViQ29udGVudENvbnRhaW5lcih3ZWJQcm9qZWN0KTsKLQkJSlVuaXRVdGlscy5jb3B5VGVzdERhdGEoIlRESmF2YSIsZGVzdEZvbGRlcixlbnZfLCBudWxsKTsKLQkJc291cmNlRmlsZV8gPSBkZXN0Rm9sZGVyLmdldEZpbGUobmV3IFBhdGgoIkVjaG8ud3NkbCIpKTsKLQkJCi0JCUpVbml0VXRpbHMuZGlzYWJsZVZhbGlkYXRpb24od2ViUHJvamVjdCk7Ci0JCUpVbml0VXRpbHMuc3luY0J1aWxkUHJvamVjdCh3ZWJQcm9qZWN0LGVudl8sIG51bGwpOwotCX0KLQotICAvKioKLSAgICogU2V0IHRoZSBwZXJzaXN0ZW50IHNlcnZlciBydW50aW1lIGNvbnRleHQgcHJlZmVyZW5jZXMKLSAgICovICAKLQlwcm90ZWN0ZWQgdm9pZCBpbml0SjJFRVdTUnVudGltZVNlcnZlckRlZmF1bHRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIFNldCBkZWZhdWx0IHByZWZlcmVuY2VzIGZvciBBeGlzIGFuZCBUb21jYXQgdjUuMCBzZXJ2ZXIKLQkJSlVuaXRVdGlscy5zZXRXU1J1bnRpbWVTZXJ2ZXIoV1NfUlVOVElNRUlEX0FYSVMsIFNFUlZFUlRZUEVJRF9UQzUwKTsJCQotCX0KLQotICAvKioKLSAgICogU2V0IHRoZSBpbml0aWFsIHNlbGVjdGlvbgotICAgKi8gIAotCXByb3RlY3RlZCB2b2lkIGluaXRJbml0aWFsU2VsZWN0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWluaXRpYWxTZWxlY3Rpb25fID0gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oc291cmNlRmlsZV8pOwotCi0JfQotCi0gIC8qKgotICAgKiBMYXVuY2hlcyB0aGUgcG9wLXVwIGNvbW1hbmQgdG8gaW5pdGlhdGUgdGhlIHNjZW5hcmlvCi0gICAqIEB0aHJvd3MgRXhjZXB0aW9uCi0gICAqLyAgCi0JcHVibGljIHZvaWQgdGVzdFRESmF2YUF4aXNUQzUwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JICAKLQkgICAgSVN0YXR1c1tdIHN0YXR1czsKLQkJSlVuaXRVdGlscy5lbmFibGVPdmVyd3JpdGUodHJ1ZSk7Ci0JCUpVbml0VXRpbHMuc2V0UnVudGltZVByZWZlcmVuY2UoIm9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLmF4aXNXZWJTZXJ2aWNlUlQiKTsKLQkJCi0JCVBlcmZvcm1hbmNlIHBlcmY9IFBlcmZvcm1hbmNlLmdldERlZmF1bHQoKTsKLQkJUGVyZm9ybWFuY2VNZXRlciBwZXJmb3JtYW5jZU1ldGVyPSBwZXJmLmNyZWF0ZVBlcmZvcm1hbmNlTWV0ZXIocGVyZi5nZXREZWZhdWx0U2NlbmFyaW9JZCh0aGlzKSk7CSAgICAKLQkgICAgdHJ5IHsKLSAgICAKLQkgICAgICBwZXJmb3JtYW5jZU1ldGVyLnN0YXJ0KCk7Ci0JICAgICAgc3RhdHVzID0gUGVyZm9ybWFuY2VKVW5pdFV0aWxzLmxhdW5jaENyZWF0aW9uV2l6YXJkKFNjZW5hcmlvQ29uc3RhbnRzLldJWkFSRElEX1RPUF9ET1dOLFNjZW5hcmlvQ29uc3RhbnRzLk9CSkVDVF9DTEFTU19JRF9JRklMRSxpbml0aWFsU2VsZWN0aW9uXyk7Ci0JICAgICAgcGVyZm9ybWFuY2VNZXRlci5zdG9wKCk7Ci0JICAgICAgcGVyZm9ybWFuY2VNZXRlci5jb21taXQoKTsKLQkgICAgICBwZXJmLmFzc2VydFBlcmZvcm1hbmNlKHBlcmZvcm1hbmNlTWV0ZXIpOwotCSAgICB9Ci0JICAgIGZpbmFsbHkgewotCSAgICAJaWYgKHBlcmZvcm1hbmNlTWV0ZXI9PW51bGwpCi0JICAgIAkJcGVyZm9ybWFuY2VNZXRlci5kaXNwb3NlKCk7Ci0JIAl9Ci0JICAgIAotCSAgICB2ZXJpZnlPdXRwdXQoc3RhdHVzKTsKLQotCi0JfQotCi0gIC8qKgotICAgKiBWZXJpZnkgdGhlIHNjZW5hcmlvIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkKLSAgICogQHRocm93cyBFeGNlcHRpb24KLSAgICovCi0JcHJpdmF0ZSBmaW5hbCB2b2lkIHZlcmlmeU91dHB1dChJU3RhdHVzW10gc3RhdHVzKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotICAgICAgICBJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSk7ICAgIAotICAgICAgICBJRm9sZGVyIHdlYkNvbnRlbnRGb2xkZXIgPSAoSUZvbGRlcilKMkVFVXRpbHMuZ2V0V2ViQ29udGVudENvbnRhaW5lcih3ZWJQcm9qZWN0KTsgICAgCi0gICAgCi0JCQotCQlJRm9sZGVyIHdzZGxGb2xkZXIgPSB3ZWJDb250ZW50Rm9sZGVyLmdldEZvbGRlcigid3NkbCIpOwotCQlhc3NlcnRUcnVlKHdzZGxGb2xkZXIuZXhpc3RzKCkpOwotCQlhc3NlcnRUcnVlKHdzZGxGb2xkZXIubWVtYmVycygpLmxlbmd0aCA+IDApOwotCi0JCUFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyIHN0YXR1c0hhbmRsZXIgPSBuZXcgQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXIoc3RhdHVzKTsKLQkJSVN0YXR1c1tdIHMgPSBzdGF0dXNIYW5kbGVyLmdldEVycm9yUmVwb3J0cygpOwotCQkvLwotCQlpZiAocy5sZW5ndGggPiAwKXsKLQkJCWZvciAoaW50IGk9MDtpPHMubGVuZ3RoO2krKyl7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJUREphdmEgRXJyb3IgbWVzc2FnZSBmb3IgcmVwb3J0ICMiK2krIjogIitzW2ldLmdldE1lc3NhZ2UoKSk7Ci0JCQl9Ci0JCX0KLQkJYXNzZXJ0VHJ1ZShzLmxlbmd0aCA9PSAwKTsKLQl9Ci0JCi0gIC8qKgotICAgKiBDbGVhciB3b3Jrc3BhY2UgaWYgcmVxdWlyZWQKLSAgICovCi0JcHJvdGVjdGVkIHZvaWQgZGVsZXRlSW5wdXREYXRhKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIERlbGV0ZSB0aGUgV2ViIHByb2plY3QuCi0JCUlQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoUFJPSkVDVF9OQU1FKTsKLQkJd2ViUHJvamVjdC5kZWxldGUodHJ1ZSx0cnVlLG51bGwpOwotCQkKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL2F4aXMvdG9tY2F0L3Y1NS9XU1dpemFyZFRvbWNhdDU1VGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvYXhpcy90b21jYXQvdjU1L1dTV2l6YXJkVG9tY2F0NTVUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5NjczOTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvYXhpcy90b21jYXQvdjU1L1dTV2l6YXJkVG9tY2F0NTVUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA3MDUgIDE5NTU1MyBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzLnRvbWNhdC52NTU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuYXhpczIuY29yZS5jb250ZXh0LkF4aXMyRW1pdHRlckNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmF4aXMyLmNvcmUucGx1Z2luLldlYlNlcnZpY2VBeGlzMkNvcmVQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLldTV2l6YXJkVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbC5KVW5pdFV0aWxzOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgV1NXaXphcmRUb21jYXQ1NVRlc3QgZXh0ZW5kcyBXU1dpemFyZFRlc3QgewotICAKLQlwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIFNFUlZFUl9JTlNUQUxMX1BBVEggPSBTeXN0ZW0uZ2V0UHJvcGVydHkoIm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjU1Iik7Ci0JcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBSVU5USU1FX0lOU1RBTExfUEFUSCA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgib3JnLmVjbGlwc2UuanN0LnJ1bnRpbWUuYXhpczIiKTsKLQlwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIFJVTlRJTUVUWVBFSURfVEM1NSA9ICJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5ydW50aW1lLjU1IjsKLQlwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIFNFUlZFUlRZUEVJRF9UQzU1ID0gIm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjU1IjsKLQkgIAotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBjb20uaWJtLmV0b29scy53ZWJzZXJ2aWNlLndhcy50ZXN0cy5XU1dpemFyZFRlc3QjaW5zdGFsbFNlcnZlclJ1bnRpbWUoKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgaW5zdGFsbFNlcnZlclJ1bnRpbWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotCS8vIGNyZWF0ZSBzZXJ2ZXIgcnVudGltZQotICAgIHNlcnZlclJ1bnRpbWVfID0gSlVuaXRVdGlscy5jcmVhdGVTZXJ2ZXJSdW50aW1lKFJVTlRJTUVUWVBFSURfVEM1NSwgU0VSVkVSX0lOU1RBTExfUEFUSCk7Ci0gICAgCi0gICAgLy8gc2V0IGluc3RhbGwgbG9jYXRpb25zCi0gICAgQXhpczJFbWl0dGVyQ29udGV4dCBjb250ZXh0ID0gV2ViU2VydmljZUF4aXMyQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QXhpc0VtaXR0ZXJDb250ZXh0KCk7Ci0gICAgaWYgKGNvbnRleHQuZ2V0QXhpczJSdW50aW1lTG9jYXRpb24oKT09bnVsbCB8fCBjb250ZXh0LmdldEF4aXMyUnVudGltZUxvY2F0aW9uKCkuZXF1YWxzKCIiKSl7Ci0gICAgCVN0cmluZyBydW50aW1lUGF0aCA9IFJVTlRJTUVfSU5TVEFMTF9QQVRIOwotICAgIAlpZiAocnVudGltZVBhdGghPW51bGwpIHsKLSAgICAJCSBjb250ZXh0LnNldEF4aXMyUnVudGltZUxvY2F0aW9uKHJ1bnRpbWVQYXRoKTsKLSAgICAJfSAgICAgICAgCi0gICAgfQotICB9Ci0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgY29tLmlibS5ldG9vbHMud2Vic2VydmljZS53YXMudGVzdHMuV1NXaXphcmRUZXN0I2luc3RhbGxTZXJ2ZXIoKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgaW5zdGFsbFNlcnZlcigpIHRocm93cyBFeGNlcHRpb24gewotCi0gICAgc2VydmVyXyA9IEpVbml0VXRpbHMuY3JlYXRlU2VydmVyKCJBcGFjaGUgVG9tY2F0IHY1NSIsIFNFUlZFUlRZUEVJRF9UQzU1LCBzZXJ2ZXJSdW50aW1lXywgZW52XywgbnVsbCApOwotICB9Ci0gIAotfQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2Uvc3JjL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9heGlzMi90b21jYXQvdjU1L3BlcmZtc3IvUGVyZm1zckJVSmF2YUF4aXMyVEM1NS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvYXhpczIvdG9tY2F0L3Y1NS9wZXJmbXNyL1BlcmZtc3JCVUphdmFBeGlzMlRDNTUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzVjYThlYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2Uvc3JjL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9heGlzMi90b21jYXQvdjU1L3BlcmZtc3IvUGVyZm1zckJVSmF2YUF4aXMyVEM1NS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTgzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDcwNSAgMTk1NTUzIHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzMi50b21jYXQudjU1LnBlcmZtc3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmludGVybmFsLkoyRUVWZXJzaW9uQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uSjJFRVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb24uQ3JlYXRlTW9kdWxlQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjU1LldTV2l6YXJkVG9tY2F0NTVUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS51dGlsLlBlcmZvcm1hbmNlSlVuaXRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudW5pdHRlc3QuV1NKVW5pdENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbC5KVW5pdFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsLlNjZW5hcmlvQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnRlc3QucGVyZm9ybWFuY2UuUGVyZm9ybWFuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudGVzdC5wZXJmb3JtYW5jZS5QZXJmb3JtYW5jZU1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyOwotCi0vKioKLSAqIEJvdHRvbSB1cCBwZXJmb3JtYW5jZSBzY2VuYXJpbyB3aXRoIEF4aXMyIGFuZCBUb21jYXQgdjUuNQotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgUGVyZm1zckJVSmF2YUF4aXMyVEM1NSBleHRlbmRzIFdTV2l6YXJkVG9tY2F0NTVUZXN0IHsKLQkvLyBDb25zdGFudHMKLSAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBXU19SVU5USU1FSURfQVhJUyA9ICBXU0pVbml0Q29uc3RhbnRzLldTX1JVTlRJTUVJRF9BWElTMjsgCi0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgUFJPSkVDVF9OQU1FID0gV1NKVW5pdENvbnN0YW50cy5CVV9QUk9KRUNUX05BTUU7Ci0gICAgCi0JcHJpdmF0ZSBJRmlsZSBzb3VyY2VGaWxlXzsKLQkKLSAgLyoqCi0gICAqIFNldHMgdXAgdGhlIGlucHV0IGRhdGE7Ci0gICAqIC0gY3JlYXRlIHByb2plY3QocyksCi0gICAqIC0gY29weSByZXNvdXJjZXMgdG8gd29ya3NwYWNlIAotICAgKi8KLQlwcm90ZWN0ZWQgdm9pZCBpbnN0YWxsSW5wdXREYXRhKCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLSAgICAKLQkJSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChQUk9KRUNUX05BTUUpOwotICAgICAgICBJUGF0aCBkZXN0UGF0aCA9IFJlc291cmNlVXRpbHMuZ2V0SmF2YVNvdXJjZUxvY2F0aW9uKHdlYlByb2plY3QpOwotICAgICAgICBJRm9sZGVyIGZvbGRlciA9IChJRm9sZGVyKVJlc291cmNlVXRpbHMuZmluZFJlc291cmNlKGRlc3RQYXRoKTsJCQotCQlKVW5pdFV0aWxzLmNvcHlUZXN0RGF0YSgiQlVKYXZhL3NyYyIsZm9sZGVyLGVudl8sIG51bGwpOwotCQlzb3VyY2VGaWxlXyA9IGZvbGRlci5nZXRGaWxlKG5ldyBQYXRoKCJmb28vRWNoby5qYXZhIikpOwotCQkvLyBFbnN1cmUgdGhhdCBFY2hvLmNsYXNzIGlzIGJ1aWx0IGluOgotCQkvLyA8V2ViIFByb2plY3Q+L1dlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzL2Zvby9FY2hvLmNsYXNzCi0JCUpVbml0VXRpbHMuZGlzYWJsZVZhbGlkYXRpb24od2ViUHJvamVjdCk7Ci0JCUpVbml0VXRpbHMuc3luY0J1aWxkUHJvamVjdCh3ZWJQcm9qZWN0LGVudl8sIG51bGwpOwotCQkvL2Fzc2VydFRydWUoSlVuaXRVdGlscy5nZXRDbGFzc2VzRm9sZGVyRm9yV2ViUHJvamVjdChXRUJfUFJPSkVDVF9OQU1FKS5nZXRGaWxlKG5ldyBQYXRoKCJmb28vRWNoby5jbGFzcyIpKS5leGlzdHMoKSk7Ci0JCQotCQkKLQl9Ci0JCi0gICAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlUHJvamVjdHMoKSB0aHJvd3MgRXhjZXB0aW9uewotICAgICAgICBJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSk7Ci0gICAgICAgIGlmICh3ZWJQcm9qZWN0PT1udWxsIHx8ICF3ZWJQcm9qZWN0LmV4aXN0cygpKXsKLSAgICAgICAgICBjcmVhdGVXZWJNb2R1bGUoUFJPSkVDVF9OQU1FLCBQUk9KRUNUX05BTUUsSjJFRVZlcnNpb25Db25zdGFudHMuSjJFRV8xXzRfSUQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIHByaXZhdGUgdm9pZCBjcmVhdGVXZWJNb2R1bGUoU3RyaW5nIHByb2plY3RObSwgU3RyaW5nIGNvbXBvbmVudE5hbWUsIGludCBqMmVlVmVyc2lvbil7Ci0KLSAgICAgICAgQ3JlYXRlTW9kdWxlQ29tbWFuZCBjbWMgPSBuZXcgQ3JlYXRlTW9kdWxlQ29tbWFuZCgpOwotICAgICAgICBjbWMuc2V0SjJlZUxldmVsKG5ldyBJbnRlZ2VyKGoyZWVWZXJzaW9uKS50b1N0cmluZygpKTsKLSAgICAgICAgY21jLnNldE1vZHVsZU5hbWUoY29tcG9uZW50TmFtZSk7Ci0gICAgICAgIGNtYy5zZXRNb2R1bGVUeXBlKENyZWF0ZU1vZHVsZUNvbW1hbmQuV0VCKTsKLSAgICAgICAgY21jLnNldFByb2plY3ROYW1lKHByb2plY3RObSk7Ci0gICAgICAgIGNtYy5zZXRTZXJ2ZXJGYWN0b3J5SWQoU0VSVkVSVFlQRUlEX1RDNTUpOwotICAgICAgICBjbWMuc2V0U2VydmVySW5zdGFuY2VJZChzZXJ2ZXJfLmdldElkKCkpOwotICAgICAgICBjbWMuZXhlY3V0ZShudWxsLCBudWxsICk7Ci0gICAgICAgIAotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRvbmUgY3JlYXRpbmcgV2ViIFByb2plY3QsICIrcHJvamVjdE5tKTsgICAgICAKLSAgICAgICAKLSAgICAgIH0KLQkKLQkKLSAgLyoqCi0gICAqIFNldCB0aGUgcGVyc2lzdGVudCBzZXJ2ZXIgcnVudGltZSBjb250ZXh0IHByZWZlcmVuY2VzCi0gICAqLyAgCi0JcHJvdGVjdGVkIHZvaWQgaW5pdEoyRUVXU1J1bnRpbWVTZXJ2ZXJEZWZhdWx0cygpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCS8vIFNldCBkZWZhdWx0IHByZWZlcmVuY2VzIGZvciBBeGlzMiBhbmQgVG9tY2F0IDUuNQotCQlKVW5pdFV0aWxzLnNldFdTUnVudGltZVNlcnZlcihXU19SVU5USU1FSURfQVhJUywgU0VSVkVSVFlQRUlEX1RDNTUpOwkJCi0JfQotCQotICAvKioKLSAgICogU2V0IHRoZSBpbml0aWFsIHNlbGVjdGlvbgotICAgKi8KLQlwcm90ZWN0ZWQgdm9pZCBpbml0SW5pdGlhbFNlbGVjdGlvbigpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCWluaXRpYWxTZWxlY3Rpb25fID0gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oc291cmNlRmlsZV8pOwotCX0KLQkKLSAgLyoqCi0gICAqIExhdW5jaGVzIHRoZSBwb3AtdXAgY29tbWFuZCB0byBpbml0aWF0ZSB0aGUgc2NlbmFyaW8KLSAgICogQHRocm93cyBFeGNlcHRpb24KLSAgICovICAKLQlwdWJsaWMgdm9pZCB0ZXN0QlVKYXZhQXhpc1RDNTAoKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCSAgCUlTdGF0dXNbXSBzdGF0dXM7Ci0JICAgIElQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoUFJPSkVDVF9OQU1FKTsKLQkgICAgSlVuaXRVdGlscy5kaXNhYmxlV1NJRGlhbG9nKHdlYlByb2plY3QpOwotCQlKVW5pdFV0aWxzLmVuYWJsZU92ZXJ3cml0ZSh0cnVlKTsKLQkgICAgSlVuaXRVdGlscy5zZXRSdW50aW1lUHJlZmVyZW5jZShXU19BWElTMl9SVU5USU1FKTsKLQotCSAgICAKLQkgICAgUGVyZm9ybWFuY2UgcGVyZj0gUGVyZm9ybWFuY2UuZ2V0RGVmYXVsdCgpOwotCSAgICBQZXJmb3JtYW5jZU1ldGVyIHBlcmZvcm1hbmNlTWV0ZXI9IHBlcmYuY3JlYXRlUGVyZm9ybWFuY2VNZXRlcihwZXJmLmdldERlZmF1bHRTY2VuYXJpb0lkKHRoaXMpKTsJICAgIAotCSAgICB0cnkgewotICAgIAotCSAgICAgIHBlcmZvcm1hbmNlTWV0ZXIuc3RhcnQoKTsKLQkgICAgICBzdGF0dXMgPSBQZXJmb3JtYW5jZUpVbml0VXRpbHMubGF1bmNoQ3JlYXRpb25XaXphcmQoU2NlbmFyaW9Db25zdGFudHMuV0laQVJESURfQk9UVE9NX1VQLFNjZW5hcmlvQ29uc3RhbnRzLk9CSkVDVF9DTEFTU19JRF9JRklMRSxpbml0aWFsU2VsZWN0aW9uXyk7Ci0JICAgICAgcGVyZm9ybWFuY2VNZXRlci5zdG9wKCk7Ci0KLQkgICAgICBwZXJmb3JtYW5jZU1ldGVyLmNvbW1pdCgpOwotCSAgICAgIHBlcmYuYXNzZXJ0UGVyZm9ybWFuY2UocGVyZm9ybWFuY2VNZXRlcik7Ci0JICAgIH0KLQkgICAgZmluYWxseSB7Ci0JICAgIAlpZiAocGVyZm9ybWFuY2VNZXRlcj09bnVsbCkKLQkgICAgCQlwZXJmb3JtYW5jZU1ldGVyLmRpc3Bvc2UoKTsKLQkgCX0KLQkJCi0JICAgIHZlcmlmeU91dHB1dChzdGF0dXMpOwotCQkKLQl9Ci0JCi0gIC8qKgotICAgKiBWZXJpZnkgdGhlIHNjZW5hcmlvIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkKLSAgICogQHRocm93cyBFeGNlcHRpb24KLSAgICovCi0JcHJpdmF0ZSBmaW5hbCB2b2lkIHZlcmlmeU91dHB1dChJU3RhdHVzW10gc3RhdHVzKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotICAgICAgICBJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSk7ICAgIAotCQlJRm9sZGVyIHdlYkNvbnRlbnRGb2xkZXIgPSAoSUZvbGRlcilKMkVFVXRpbHMuZ2V0V2ViQ29udGVudENvbnRhaW5lcih3ZWJQcm9qZWN0KTsKLSAgICAKLSAgICAgICAgSUZvbGRlciB3ZWJJbmZGb2xkZXIgPSB3ZWJDb250ZW50Rm9sZGVyLmdldEZvbGRlcigiV0VCLUlORiIpOwotICAgICAgICBJRm9sZGVyIHNlcnZpY2VzRm9sZGVyID0gd2ViSW5mRm9sZGVyLmdldEZvbGRlcigic2VydmljZXMiKTsKLQkJYXNzZXJ0VHJ1ZShzZXJ2aWNlc0ZvbGRlci5leGlzdHMoKSk7Ci0JCUlGb2xkZXIgd3NGb2xkZXIgPSBzZXJ2aWNlc0ZvbGRlci5nZXRGb2xkZXIoIkVjaG8iKTsKLQkJYXNzZXJ0VHJ1ZSh3c0ZvbGRlci5leGlzdHMoKSk7Ci0JCWFzc2VydFRydWUod3NGb2xkZXIubWVtYmVycygpLmxlbmd0aCA+IDApOwotICAgIAotCQlBY2N1bXVsYXRlU3RhdHVzSGFuZGxlciBzdGF0dXNIYW5kbGVyID0gbmV3IEFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyKHN0YXR1cyk7Ci0JCUlTdGF0dXNbXSBzID0gc3RhdHVzSGFuZGxlci5nZXRFcnJvclJlcG9ydHMoKTsKLQkJLy9zaG93IGVycm9ycwotCQlpZiAocy5sZW5ndGggPiAwKXsKLQkJCWZvciAoaW50IGk9MDtpPHMubGVuZ3RoO2krKyl7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJCVUphdmEgRXJyb3IgbWVzc2FnZSBmb3IgcmVwb3J0ICMiK2krIjogIitzW2ldLmdldE1lc3NhZ2UoKSk7Ci0JCQl9Ci0JCX0KLQkJYXNzZXJ0VHJ1ZShzLmxlbmd0aCA9PSAwKTsKLQl9Ci0JCi0gIC8qKgotICAgKiBDbGVhciB3b3Jrc3BhY2UgaWYgbmVjZXNzYXJ5Ci0gICAqLwotCXByb3RlY3RlZCB2b2lkIGRlbGV0ZUlucHV0RGF0YSgpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCS8vIFJlbW92ZSB0aGUgRUFSIGZyb20gdGhlIHNlcnZlci4KLQkJSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChQUk9KRUNUX05BTUUpOwotCQkvL0pVbml0VXRpbHMucmVtb3ZlTW9kdWxlRnJvbVNlcnZlcihzZXJ2ZXJfLHdlYlByb2plY3QsZW52Xyk7Ci0JCQotCQkvLyBEZWxldGUgdGhlIFdlYiBwcm9qZWN0LgotCQl3ZWJQcm9qZWN0LmRlbGV0ZSh0cnVlLHRydWUsIG51bGwpOwotICAgICAgICBhc3NlcnRGYWxzZSh3ZWJQcm9qZWN0LmV4aXN0cygpKTsKLQkJCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvYXhpczIvdG9tY2F0L3Y1NS9wZXJmbXNyL1BlcmZtc3JDbGllbnRBeGlzMlRDNTUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL2F4aXMyL3RvbWNhdC92NTUvcGVyZm1zci9QZXJmbXNyQ2xpZW50QXhpczJUQzU1LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3ZjNlMzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvYXhpczIvdG9tY2F0L3Y1NS9wZXJmbXNyL1BlcmZtc3JDbGllbnRBeGlzMlRDNTUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA3MDUgIDE5NTU1MyBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpczIudG9tY2F0LnY1NS5wZXJmbXNyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5pbnRlcm5hbC5KMkVFVmVyc2lvbkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uLkNyZWF0ZU1vZHVsZUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1NS5XU1dpemFyZFRvbWNhdDU1VGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UudXRpbC5QZXJmb3JtYW5jZUpVbml0VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnVuaXR0ZXN0LldTSlVuaXRDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnV0aWwuSlVuaXRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbC5TY2VuYXJpb0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlLlBlcmZvcm1hbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnRlc3QucGVyZm9ybWFuY2UuUGVyZm9ybWFuY2VNZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5BY2N1bXVsYXRlU3RhdHVzSGFuZGxlcjsKLQotLyoqCi0gKiBDbGllbnQgcGVyZm9ybWFuY2Ugc2NlbmFyaW8gd2l0aCBBeGlzMiBhbmQgVG9tY2F0IHY1LjUKLSAqLwotcHVibGljIGNsYXNzIFBlcmZtc3JDbGllbnRBeGlzMlRDNTUgZXh0ZW5kcyBXU1dpemFyZFRvbWNhdDU1VGVzdCB7Ci0KLQlwcml2YXRlIGZpbmFsIFN0cmluZyBXU19SVU5USU1FSURfQVhJUyA9IFdTSlVuaXRDb25zdGFudHMuV1NfUlVOVElNRUlEX0FYSVMyOwotICAKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBDTElFTlRfUFJPSkVDVF9OQU1FID0gV1NKVW5pdENvbnN0YW50cy5DTElFTlRfUFJPSkVDVF9OQU1FOwotCQotCXByaXZhdGUgSUZpbGUgc291cmNlRmlsZV87Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVQcm9qZWN0cygpIHRocm93cyBFeGNlcHRpb257Ci0gICAgICAgIElQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoQ0xJRU5UX1BST0pFQ1RfTkFNRSk7Ci0gICAgICAgIGlmICghd2ViUHJvamVjdC5leGlzdHMoKSl7Ci0gICAgICAgICAgY3JlYXRlV2ViTW9kdWxlKENMSUVOVF9QUk9KRUNUX05BTUUsIENMSUVOVF9QUk9KRUNUX05BTUUsSjJFRVZlcnNpb25Db25zdGFudHMuSjJFRV8xXzRfSUQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIHByaXZhdGUgdm9pZCBjcmVhdGVXZWJNb2R1bGUoU3RyaW5nIHByb2plY3RObSwgU3RyaW5nIGNvbXBvbmVudE5hbWUsIGludCBqMmVlVmVyc2lvbil7Ci0KLSAgICAgICAgQ3JlYXRlTW9kdWxlQ29tbWFuZCBjbWMgPSBuZXcgQ3JlYXRlTW9kdWxlQ29tbWFuZCgpOwotICAgICAgICBjbWMuc2V0SjJlZUxldmVsKG5ldyBJbnRlZ2VyKGoyZWVWZXJzaW9uKS50b1N0cmluZygpKTsKLSAgICAgICAgY21jLnNldE1vZHVsZU5hbWUoY29tcG9uZW50TmFtZSk7Ci0gICAgICAgIGNtYy5zZXRNb2R1bGVUeXBlKENyZWF0ZU1vZHVsZUNvbW1hbmQuV0VCKTsKLSAgICAgICAgY21jLnNldFByb2plY3ROYW1lKHByb2plY3RObSk7Ci0gICAgICAgIGNtYy5zZXRTZXJ2ZXJGYWN0b3J5SWQoU0VSVkVSVFlQRUlEX1RDNTUpOwotICAgICAgICBjbWMuc2V0U2VydmVySW5zdGFuY2VJZChzZXJ2ZXJfLmdldElkKCkpOwotICAgICAgICBjbWMuZXhlY3V0ZShudWxsLCBudWxsICk7Ci0gICAgICAgIAotICAgICAgfQotICAgICAgCi0JLyoqCi0gICAqIFNldHMgdXAgdGhlIGlucHV0IGRhdGE7Ci0gICAqIC0gY3JlYXRlIHByb2plY3QocyksCi0gICAqIC0gY29weSByZXNvdXJjZXMgdG8gd29ya3NwYWNlIAotCSAqLwotCXByb3RlY3RlZCB2b2lkIGluc3RhbGxJbnB1dERhdGEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJCi0JCi0JCUlQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoQ0xJRU5UX1BST0pFQ1RfTkFNRSk7Ci0gICAgICAgIElGb2xkZXIgZGVzdEZvbGRlciA9IChJRm9sZGVyKUoyRUVVdGlscy5nZXRXZWJDb250ZW50Q29udGFpbmVyKHdlYlByb2plY3QpOwotICAgICAgICBKVW5pdFV0aWxzLmNvcHlUZXN0RGF0YSgiVERKYXZhIixkZXN0Rm9sZGVyLGVudl8sIG51bGwpOwotCQlzb3VyY2VGaWxlXyA9IGRlc3RGb2xkZXIuZ2V0RmlsZShuZXcgUGF0aCgiRWNoby53c2RsIikpOwkKLQkJSlVuaXRVdGlscy5kaXNhYmxlVmFsaWRhdGlvbih3ZWJQcm9qZWN0KTsKLQkJSlVuaXRVdGlscy5zeW5jQnVpbGRQcm9qZWN0KHdlYlByb2plY3QsZW52XywgbnVsbCk7Ci0JCQotCX0KLQotICAvKioKLSAgICogU2V0IHRoZSBwZXJzaXN0ZW50IHNlcnZlciBydW50aW1lIGNvbnRleHQgcHJlZmVyZW5jZXMKLSAgICovCi0JcHJvdGVjdGVkIHZvaWQgaW5pdEoyRUVXU1J1bnRpbWVTZXJ2ZXJEZWZhdWx0cygpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAvLyBTZXQgZGVmYXVsdCBwcmVmZXJlbmNlcyBmb3IgQXhpcyBhbmQgVG9tY2F0IDUuMCAgICAKLQkJSlVuaXRVdGlscy5zZXRXU1J1bnRpbWVTZXJ2ZXIoV1NfUlVOVElNRUlEX0FYSVMsIFNFUlZFUlRZUEVJRF9UQzU1KTsKLQl9Ci0KLSAgLyoqCi0gICAqIFNldCB0aGUgaW5pdGlhbCBzZWxlY3Rpb24KLSAgICovCi0JcHJvdGVjdGVkIHZvaWQgaW5pdEluaXRpYWxTZWxlY3Rpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJaW5pdGlhbFNlbGVjdGlvbl8gPSBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihzb3VyY2VGaWxlXyk7Ci0JfQotCi0gIC8qKgotICAgKiBMYXVuY2hlcyB0aGUgcG9wLXVwIGNvbW1hbmQgdG8gaW5pdGlhdGUgdGhlIHNjZW5hcmlvCi0gICAqIEB0aHJvd3MgRXhjZXB0aW9uCi0gICAqLwotCXB1YmxpYyB2b2lkIHRlc3RDbGllbnRBeGlzVEM1MCgpIHRocm93cyBFeGNlcHRpb24KLQl7CQotCSAgCUlTdGF0dXNbXSBzdGF0dXM7Ci0JICAJCi0JCUpVbml0VXRpbHMuZW5hYmxlUHJveHlHZW5lcmF0aW9uKHRydWUpOwotCQlKVW5pdFV0aWxzLmVuYWJsZU92ZXJ3cml0ZSh0cnVlKTsKLQkJSlVuaXRVdGlscy5zZXRSdW50aW1lUHJlZmVyZW5jZShXU19BWElTMl9SVU5USU1FKTsKLQotCQkKLQkJUGVyZm9ybWFuY2UgcGVyZj0gUGVyZm9ybWFuY2UuZ2V0RGVmYXVsdCgpOwotCQlQZXJmb3JtYW5jZU1ldGVyIHBlcmZvcm1hbmNlTWV0ZXI9IHBlcmYuY3JlYXRlUGVyZm9ybWFuY2VNZXRlcihwZXJmLmdldERlZmF1bHRTY2VuYXJpb0lkKHRoaXMpKTsJICAgIAotCSAgICB0cnkgewotICAgIAotCSAgICAgIHBlcmZvcm1hbmNlTWV0ZXIuc3RhcnQoKTsKLQkgICAgICBzdGF0dXMgPSBQZXJmb3JtYW5jZUpVbml0VXRpbHMubGF1bmNoQ3JlYXRpb25XaXphcmQoU2NlbmFyaW9Db25zdGFudHMuV0laQVJESURfQ0xJRU5ULFNjZW5hcmlvQ29uc3RhbnRzLk9CSkVDVF9DTEFTU19JRF9JRklMRSxpbml0aWFsU2VsZWN0aW9uXyk7Ci0JICAgICAgcGVyZm9ybWFuY2VNZXRlci5zdG9wKCk7Ci0JICAgICAgcGVyZm9ybWFuY2VNZXRlci5jb21taXQoKTsKLQkgICAgICBwZXJmLmFzc2VydFBlcmZvcm1hbmNlKHBlcmZvcm1hbmNlTWV0ZXIpOwotCSAgICB9Ci0JICAgIGZpbmFsbHkgewotCSAgICAJaWYgKHBlcmZvcm1hbmNlTWV0ZXI9PW51bGwpCi0JICAgIAkJcGVyZm9ybWFuY2VNZXRlci5kaXNwb3NlKCk7Ci0JIAl9Ci0JICAgIAotCSAgICB2ZXJpZnlPdXRwdXQoc3RhdHVzKTsKLQotCi0JfQotCQotICAvKioKLSAgICogVmVyaWZ5IHRoZSBzY2VuYXJpbyBjb21wbGV0ZWQgc3VjY2VzZnVsbHkKLSAgICogQHRocm93cyBFeGNlcHRpb24KLSAgICovCi0JcHJpdmF0ZSBmaW5hbCB2b2lkIHZlcmlmeU91dHB1dChJU3RhdHVzW10gc3RhdHVzKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChDTElFTlRfUFJPSkVDVF9OQU1FKTsKLSAgICAKLSAgICAgICAgSVBhdGggZGVzdFBhdGggPSBSZXNvdXJjZVV0aWxzLmdldEphdmFTb3VyY2VMb2NhdGlvbih3ZWJQcm9qZWN0KTsKLSAgICAgICAgSUZvbGRlciBzcmNGb2xkZXIgPSAoSUZvbGRlcilSZXNvdXJjZVV0aWxzLmZpbmRSZXNvdXJjZShkZXN0UGF0aCk7Ci0gICAgCi0JCS8vSUZvbGRlciBzcmNGb2xkZXIgPSBKVW5pdFV0aWxzLmdldFNvdXJjZUZvbGRlckZvcldlYlByb2plY3QoQ0xJRU5UX1BST0pFQ1RfTkFNRSk7Ci0JCUlGb2xkZXIgZm9sZGVyID0gc3JjRm9sZGVyLmdldEZvbGRlcigiZm9vIik7Ci0JCWFzc2VydFRydWUoZm9sZGVyLmV4aXN0cygpKTsKLQkJYXNzZXJ0VHJ1ZShmb2xkZXIubWVtYmVycygpLmxlbmd0aCA+IDApOwotCQkKLQkJQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXIgc3RhdHVzSGFuZGxlciA9IG5ldyBBY2N1bXVsYXRlU3RhdHVzSGFuZGxlcihzdGF0dXMpOwotCQlJU3RhdHVzW10gcyA9IHN0YXR1c0hhbmRsZXIuZ2V0RXJyb3JSZXBvcnRzKCk7Ci0JCS8vCi0JCWlmIChzLmxlbmd0aCA+IDApewotCQkJZm9yIChpbnQgaT0wO2k8cy5sZW5ndGg7aSsrKXsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIG1lc3NhZ2UgZm9yIHJlcG9ydCAjIitpKyI6ICIrc1tpXS5nZXRNZXNzYWdlKCkpOwotCQkJfQotCQl9Ci0JCWFzc2VydFRydWUocy5sZW5ndGggPT0gMCk7ICAgICAgIAotCi0JfQotCQotICAvKioKLSAgICogUmVtb3ZlIHdvcmtzcGFjZSBpZiBuZWNlc3NhcnkKLSAgICovCi0JcHJvdGVjdGVkIHZvaWQgZGVsZXRlSW5wdXREYXRhKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJLy8gRGVsZXRlIHRoZSBXZWIgcHJvamVjdC4KLQkJSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChDTElFTlRfUFJPSkVDVF9OQU1FKTsKLQkJd2ViUHJvamVjdC5kZWxldGUodHJ1ZSx0cnVlLCBudWxsKTsKLQkJCi0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2Uvc3JjL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9heGlzMi90b21jYXQvdjU1L3BlcmZtc3IvUGVyZm1zclRESmF2YUF4aXMyVEM1NS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvYXhpczIvdG9tY2F0L3Y1NS9wZXJmbXNyL1BlcmZtc3JUREphdmFBeGlzMlRDNTUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjdlYmNhZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2Uvc3JjL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9heGlzMi90b21jYXQvdjU1L3BlcmZtc3IvUGVyZm1zclRESmF2YUF4aXMyVEM1NS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDcwNSAgMTk1NTUzIHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzMi50b21jYXQudjU1LnBlcmZtc3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuaW50ZXJuYWwuSjJFRVZlcnNpb25Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uLkNyZWF0ZU1vZHVsZUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1NS5XU1dpemFyZFRvbWNhdDU1VGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UudXRpbC5QZXJmb3JtYW5jZUpVbml0VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnVuaXR0ZXN0LldTSlVuaXRDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnV0aWwuSlVuaXRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbC5TY2VuYXJpb0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlLlBlcmZvcm1hbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnRlc3QucGVyZm9ybWFuY2UuUGVyZm9ybWFuY2VNZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5BY2N1bXVsYXRlU3RhdHVzSGFuZGxlcjsKLQotLyoqCi0gKiBUb3AgZG93biBwZXJmb3JtYW5jZSBzY2VuYXJpbyB3aXRoIEF4aXMyIGFuZCBUb21jYXQgdjUuNQotICovCi1wdWJsaWMgY2xhc3MgUGVyZm1zclRESmF2YUF4aXMyVEM1NSBleHRlbmRzIFdTV2l6YXJkVG9tY2F0NTVUZXN0IHsKLQotICBwcml2YXRlIGZpbmFsIFN0cmluZyBXU19SVU5USU1FSURfQVhJUyA9IFdTSlVuaXRDb25zdGFudHMuV1NfUlVOVElNRUlEX0FYSVMyOwotICAKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgUFJPSkVDVF9OQU1FID0gV1NKVW5pdENvbnN0YW50cy5URF9QUk9KRUNUX05BTUU7Ci0gIAotICBwcml2YXRlIElGaWxlIHNvdXJjZUZpbGVfOwotCQotICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVQcm9qZWN0cygpIHRocm93cyBFeGNlcHRpb257Ci0JICAgIElQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoUFJPSkVDVF9OQU1FKTsKLQkgICAgaWYgKCF3ZWJQcm9qZWN0LmV4aXN0cygpKXsKLQkgICAgICBjcmVhdGVXZWJNb2R1bGUoUFJPSkVDVF9OQU1FLCBQUk9KRUNUX05BTUUsSjJFRVZlcnNpb25Db25zdGFudHMuSjJFRV8xXzRfSUQpOwotCSAgICB9Ci0JICB9Ci0JICAKLQkgIHByaXZhdGUgdm9pZCBjcmVhdGVXZWJNb2R1bGUoU3RyaW5nIHByb2plY3RObSwgU3RyaW5nIGNvbXBvbmVudE5hbWUsIGludCBqMmVlVmVyc2lvbil7Ci0KLQkgICAgQ3JlYXRlTW9kdWxlQ29tbWFuZCBjbWMgPSBuZXcgQ3JlYXRlTW9kdWxlQ29tbWFuZCgpOwotCSAgICBjbWMuc2V0SjJlZUxldmVsKG5ldyBJbnRlZ2VyKGoyZWVWZXJzaW9uKS50b1N0cmluZygpKTsKLQkgICAgY21jLnNldE1vZHVsZU5hbWUoY29tcG9uZW50TmFtZSk7Ci0JICAgIGNtYy5zZXRNb2R1bGVUeXBlKENyZWF0ZU1vZHVsZUNvbW1hbmQuV0VCKTsKLQkgICAgY21jLnNldFByb2plY3ROYW1lKHByb2plY3RObSk7Ci0JICAgIGNtYy5zZXRTZXJ2ZXJGYWN0b3J5SWQoU0VSVkVSVFlQRUlEX1RDNTUpOwotCSAgICBjbWMuc2V0U2VydmVySW5zdGFuY2VJZChzZXJ2ZXJfLmdldElkKCkpOwotCSAgICBjbWMuZXhlY3V0ZShudWxsLCBudWxsICk7Ci0JICAgIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRvbmUgY3JlYXRpbmcgV2ViIFByb2plY3QsICIrcHJvamVjdE5tKTsgICAgICAKLQkgICAKLQkgIH0gIAotCSAgCi0gIC8qKgotICAgKiBTZXRzIHVwIHRoZSBpbnB1dCBkYXRhOwotICAgKiAtIGNyZWF0ZSBwcm9qZWN0KHMpLAotICAgKiAtIGNvcHkgcmVzb3VyY2VzIHRvIHdvcmtzcGFjZSAKLSAgICovICAKLQlwcm90ZWN0ZWQgdm9pZCBpbnN0YWxsSW5wdXREYXRhKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkKLQkJSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChQUk9KRUNUX05BTUUpOwkJCi0JCUlGb2xkZXIgZGVzdEZvbGRlciA9IChJRm9sZGVyKUoyRUVVdGlscy5nZXRXZWJDb250ZW50Q29udGFpbmVyKHdlYlByb2plY3QpOwotCQlKVW5pdFV0aWxzLmNvcHlUZXN0RGF0YSgiVERKYXZhIixkZXN0Rm9sZGVyLGVudl8sIG51bGwpOwotCQlzb3VyY2VGaWxlXyA9IGRlc3RGb2xkZXIuZ2V0RmlsZShuZXcgUGF0aCgiRWNoby53c2RsIikpOwotCQlKVW5pdFV0aWxzLmRpc2FibGVWYWxpZGF0aW9uKHdlYlByb2plY3QpOwotCQlKVW5pdFV0aWxzLnN5bmNCdWlsZFByb2plY3Qod2ViUHJvamVjdCxlbnZfLCBudWxsKTsKLQl9Ci0KLSAgLyoqCi0gICAqIFNldCB0aGUgcGVyc2lzdGVudCBzZXJ2ZXIgcnVudGltZSBjb250ZXh0IHByZWZlcmVuY2VzCi0gICAqLyAgCi0JcHJvdGVjdGVkIHZvaWQgaW5pdEoyRUVXU1J1bnRpbWVTZXJ2ZXJEZWZhdWx0cygpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBTZXQgZGVmYXVsdCBwcmVmZXJlbmNlcyBmb3IgQXhpcyBhbmQgVG9tY2F0IHY1LjAgc2VydmVyCi0JCUpVbml0VXRpbHMuc2V0V1NSdW50aW1lU2VydmVyKFdTX1JVTlRJTUVJRF9BWElTLCBTRVJWRVJUWVBFSURfVEM1NSk7CQkKLQl9Ci0KLSAgLyoqCi0gICAqIFNldCB0aGUgaW5pdGlhbCBzZWxlY3Rpb24KLSAgICovICAKLQlwcm90ZWN0ZWQgdm9pZCBpbml0SW5pdGlhbFNlbGVjdGlvbigpIHRocm93cyBFeGNlcHRpb24gewotCQlpbml0aWFsU2VsZWN0aW9uXyA9IG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHNvdXJjZUZpbGVfKTsKLQotCX0KLQotICAvKioKLSAgICogTGF1bmNoZXMgdGhlIHBvcC11cCBjb21tYW5kIHRvIGluaXRpYXRlIHRoZSBzY2VuYXJpbwotICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgotICAgKi8gIAotCXB1YmxpYyB2b2lkIHRlc3RUREphdmFBeGlzVEM1MCgpIHRocm93cyBFeGNlcHRpb24gewotCSAgCi0JICAgIElTdGF0dXNbXSBzdGF0dXM7Ci0JCUpVbml0VXRpbHMuZW5hYmxlT3ZlcndyaXRlKHRydWUpOwotCQlKVW5pdFV0aWxzLnNldFJ1bnRpbWVQcmVmZXJlbmNlKFdTX0FYSVMyX1JVTlRJTUUpOwotCi0JCQotCQlQZXJmb3JtYW5jZSBwZXJmPSBQZXJmb3JtYW5jZS5nZXREZWZhdWx0KCk7Ci0JCVBlcmZvcm1hbmNlTWV0ZXIgcGVyZm9ybWFuY2VNZXRlcj0gcGVyZi5jcmVhdGVQZXJmb3JtYW5jZU1ldGVyKHBlcmYuZ2V0RGVmYXVsdFNjZW5hcmlvSWQodGhpcykpOwkgICAgCi0JICAgIHRyeSB7Ci0gICAgCi0JICAgICAgcGVyZm9ybWFuY2VNZXRlci5zdGFydCgpOwotCSAgICAgIHN0YXR1cyA9IFBlcmZvcm1hbmNlSlVuaXRVdGlscy5sYXVuY2hDcmVhdGlvbldpemFyZChTY2VuYXJpb0NvbnN0YW50cy5XSVpBUkRJRF9UT1BfRE9XTixTY2VuYXJpb0NvbnN0YW50cy5PQkpFQ1RfQ0xBU1NfSURfSUZJTEUsaW5pdGlhbFNlbGVjdGlvbl8pOwotCSAgICAgIHBlcmZvcm1hbmNlTWV0ZXIuc3RvcCgpOwotCSAgICAgIHBlcmZvcm1hbmNlTWV0ZXIuY29tbWl0KCk7Ci0JICAgICAgcGVyZi5hc3NlcnRQZXJmb3JtYW5jZShwZXJmb3JtYW5jZU1ldGVyKTsKLQkgICAgfQotCSAgICBmaW5hbGx5IHsKLQkgICAgCWlmIChwZXJmb3JtYW5jZU1ldGVyPT1udWxsKQotCSAgICAJCXBlcmZvcm1hbmNlTWV0ZXIuZGlzcG9zZSgpOwotCSAJfQotCSAgICAKLQkgICAgdmVyaWZ5T3V0cHV0KHN0YXR1cyk7Ci0KLQotCX0KLQotICAvKioKLSAgICogVmVyaWZ5IHRoZSBzY2VuYXJpbyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5Ci0gICAqIEB0aHJvd3MgRXhjZXB0aW9uCi0gICAqLwotCXByaXZhdGUgZmluYWwgdm9pZCB2ZXJpZnlPdXRwdXQoSVN0YXR1c1tdIHN0YXR1cykgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLSAgICAgICAgSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChQUk9KRUNUX05BTUUpOyAgICAKLQkJSUZvbGRlciB3ZWJDb250ZW50Rm9sZGVyID0gKElGb2xkZXIpSjJFRVV0aWxzLmdldFdlYkNvbnRlbnRDb250YWluZXIod2ViUHJvamVjdCk7Ci0gICAgCi0gICAgICAgIElGb2xkZXIgd2ViSW5mRm9sZGVyID0gd2ViQ29udGVudEZvbGRlci5nZXRGb2xkZXIoIldFQi1JTkYiKTsKLSAgICAgICAgSUZvbGRlciBzZXJ2aWNlc0ZvbGRlciA9IHdlYkluZkZvbGRlci5nZXRGb2xkZXIoInNlcnZpY2VzIik7Ci0JCWFzc2VydFRydWUoc2VydmljZXNGb2xkZXIuZXhpc3RzKCkpOwotCQlJRm9sZGVyIHdzRm9sZGVyID0gc2VydmljZXNGb2xkZXIuZ2V0Rm9sZGVyKCJFY2hvU2VydmljZSIpOwotCQlhc3NlcnRUcnVlKHdzRm9sZGVyLmV4aXN0cygpKTsKLQkJYXNzZXJ0VHJ1ZSh3c0ZvbGRlci5tZW1iZXJzKCkubGVuZ3RoID4gMCk7Ci0KLQkJQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXIgc3RhdHVzSGFuZGxlciA9IG5ldyBBY2N1bXVsYXRlU3RhdHVzSGFuZGxlcihzdGF0dXMpOwotCQlJU3RhdHVzW10gcyA9IHN0YXR1c0hhbmRsZXIuZ2V0RXJyb3JSZXBvcnRzKCk7Ci0JCS8vCi0JCWlmIChzLmxlbmd0aCA+IDApewotCQkJZm9yIChpbnQgaT0wO2k8cy5sZW5ndGg7aSsrKXsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRESmF2YSBFcnJvciBtZXNzYWdlIGZvciByZXBvcnQgIyIraSsiOiAiK3NbaV0uZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQkJfQotCQlhc3NlcnRUcnVlKHMubGVuZ3RoID09IDApOwotCX0KLQkKLSAgLyoqCi0gICAqIENsZWFyIHdvcmtzcGFjZSBpZiByZXF1aXJlZAotICAgKi8KLQlwcm90ZWN0ZWQgdm9pZCBkZWxldGVJbnB1dERhdGEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gRGVsZXRlIHRoZSBXZWIgcHJvamVjdC4KLQkJSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChQUk9KRUNUX05BTUUpOwotCQl3ZWJQcm9qZWN0LmRlbGV0ZSh0cnVlLHRydWUsbnVsbCk7Ci0JCQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvcGVyZm9ybWFuY2UvQWxsUGVyZm9ybWFuY2VUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvcGVyZm9ybWFuY2UvQWxsUGVyZm9ybWFuY2VUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTE2YWYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3BlcmZvcm1hbmNlL0FsbFBlcmZvcm1hbmNlVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDUwMiAgMTg1MjA4IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjUwLnBlcmZtc3IuUGVyZm1zckJVSmF2YUF4aXNUQzUwOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzLnRvbWNhdC52NTAucGVyZm1zci5QZXJmbXNyQ2xpZW50QXhpc1RDNTA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MC5wZXJmbXNyLlBlcmZtc3JUREphdmFBeGlzVEM1MDsKLQotcHVibGljIGNsYXNzIEFsbFBlcmZvcm1hbmNlVGVzdHMgewotCQotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0gICAgCi0gICAgVGVzdFN1aXRlIHN1aXRlID0gbmV3IFRlc3RTdWl0ZSgiVGVzdCBmb3Igb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlIik7Ci0gICAgLy8kSlVuaXQtQkVHSU4kCi0gICAgCi0JU3RyaW5nIHMgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoIm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjUwIik7Ci0JaWYgKHM9PW51bGwpewotCQlzID0gU3lzdGVtLmdldFByb3BlcnR5KCJ0b21jYXQ1MERpciIpOwotCX0KLQotCWlmIChzICE9IG51bGwgJiYgcy5sZW5ndGgoKSA+IDApIHsKLQkgICAgc3VpdGUuYWRkVGVzdFN1aXRlKFBlcmZtc3JCVUphdmFBeGlzVEM1MC5jbGFzcyk7Ci0JICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShQZXJmbXNyVERKYXZhQXhpc1RDNTAuY2xhc3MpOwotCSAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoUGVyZm1zckNsaWVudEF4aXNUQzUwLmNsYXNzKTsKLQl9IGVsc2UgewotCQotCQlTeXN0ZW0uZXJyLnByaW50bG4oIldhcm5pbmc6IFRvbWNhdCA1LjAgbm90IGZvdW5kIC0gcGVyZm9ybWFuY2UgdGVzdHMgc2tpcHBlZCIpOwotCX0KLQotICAgIC8vJEpVbml0LUVORCQKLSAgICByZXR1cm4gc3VpdGU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS9zcmMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3BlcmZvcm1hbmNlL3BsdWdpbi9QZXJmb3JtYW5jZVBsdWdpbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvcGVyZm9ybWFuY2UvcGx1Z2luL1BlcmZvcm1hbmNlUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4MjYyYjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvcGVyZm9ybWFuY2UvcGx1Z2luL1BlcmZvcm1hbmNlUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzA1MDIgIDE4NTIwOCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUgICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UucGx1Z2luOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW47Ci0KLS8qKgotICogVGhlIG1haW4gcGx1Z2luIGNsYXNzIHRvIGJlIHVzZWQgaW4gdGhlIGRlc2t0b3AuCi0gKi8KLXB1YmxpYyBjbGFzcyBQZXJmb3JtYW5jZVBsdWdpbiBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4gewotCS8vVGhlIHNoYXJlZCBpbnN0YW5jZS4KLQlwcml2YXRlIHN0YXRpYyBQZXJmb3JtYW5jZVBsdWdpbiBwbHVnaW47Ci0KLQkKLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIFBlcmZvcm1hbmNlUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlwbHVnaW4gPSB0aGlzOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFBlcmZvcm1hbmNlUGx1Z2luIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2Uvc3JjL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9wZXJmb3JtYW5jZS91dGlsL0VjbGlwc2VQZXJmb3JtYW5jZUxvZy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvcGVyZm9ybWFuY2UvdXRpbC9FY2xpcHNlUGVyZm9ybWFuY2VMb2cuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQ4ZjFhMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2Uvc3JjL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9wZXJmb3JtYW5jZS91dGlsL0VjbGlwc2VQZXJmb3JtYW5jZUxvZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UudXRpbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnRlc3QucGVyZm9ybWFuY2UuUGVyZm9ybWFuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudGVzdC5wZXJmb3JtYW5jZS5QZXJmb3JtYW5jZU1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUxvZzsKLQotCi1wdWJsaWMgY2xhc3MgRWNsaXBzZVBlcmZvcm1hbmNlTG9nIGltcGxlbWVudHMgSUxvZyB7Ci0KLSAgcHJpdmF0ZSBib29sZWFuIHJ1blN0YXRlID0gZmFsc2U7Ci0gIFBlcmZvcm1hbmNlIHBlcmYgPSBudWxsOyAgICAgIAotICBQZXJmb3JtYW5jZU1ldGVyIHBlcmZvcm1hbmNlTWV0ZXI9IG51bGw7ICAKLSAgCi0gIHB1YmxpYyBib29sZWFuIGlzRW5hYmxlZCgpIHsKLSAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNFbmFibGVkKFN0cmluZyBvcHRpb24pIHsKLSAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCBsb2coaW50IHNldmVyaXR5LCBpbnQgbWVzc2FnZU51bSwgT2JqZWN0IGNhbGxlciwgU3RyaW5nIG1ldGhvZCwgVGhyb3dhYmxlIHRocm93YWJsZSkgewotICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQotICB9Ci0KLSAgcHVibGljIHZvaWQgbG9nKGludCBzZXZlcml0eSwgU3RyaW5nIG9wdGlvbiwgaW50IG1lc3NhZ2VOdW0sIE9iamVjdCBjYWxsZXIsIFN0cmluZyBtZXRob2QsIFRocm93YWJsZSB0aHJvd2FibGUpIHsKLSAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIGxvZyhpbnQgc2V2ZXJpdHksIGludCBtZXNzYWdlTnVtLCBPYmplY3QgY2FsbGVyLCBTdHJpbmcgbWV0aG9kLCBJU3RhdHVzIHN0YXR1cykgewotICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQotICB9Ci0KLSAgcHVibGljIHZvaWQgbG9nKGludCBzZXZlcml0eSwgU3RyaW5nIG9wdGlvbiwgaW50IG1lc3NhZ2VOdW0sIE9iamVjdCBjYWxsZXIsIFN0cmluZyBtZXRob2QsIElTdGF0dXMgc3RhdHVzKSB7Ci0gICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCi0gIH0KLQotICBwdWJsaWMgdm9pZCBsb2coaW50IHNldmVyaXR5LCBpbnQgbWVzc2FnZU51bSwgT2JqZWN0IGNhbGxlciwgU3RyaW5nIG1ldGhvZCwgT2JqZWN0IG9iamVjdCkgewotICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQotICB9Ci0KLSAgcHVibGljIHZvaWQgbG9nKGludCBzZXZlcml0eSwgU3RyaW5nIG9wdGlvbiwgaW50IG1lc3NhZ2VOdW0sIE9iamVjdCBjYWxsZXIsIFN0cmluZyBtZXRob2QsIE9iamVjdCBvYmplY3QpIHsKLSAgICAKLSAgICBpZiAobWV0aG9kLmVxdWFscygicnVuQ29tbWFuZCIpKSB7Ci0KLSAgICAgIHRyeSB7Ci0gICAgICAgIGlmICghcnVuU3RhdGUpIHsKLSAgICAgICAgICAvLyBiZWdpbiBwZXJmb3JtYW5jZSByZWNvcmRpbmcKLSAgICAgICAgICBwZXJmID0gUGVyZm9ybWFuY2UuZ2V0RGVmYXVsdCgpOyAgICAgIAotICAgICAgICAgIHBlcmZvcm1hbmNlTWV0ZXIgPSBwZXJmLmNyZWF0ZVBlcmZvcm1hbmNlTWV0ZXIoKChTdHJpbmcpb2JqZWN0KS50b1N0cmluZygpKTsgICAgICAgICAgCi0gICAgICAgICAgcGVyZm9ybWFuY2VNZXRlci5zdGFydCgpOwotICAgICAgICAgIHJ1blN0YXRlID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAvLyBlbmQgcGVyZm9ybWFuY2UgcmVjb3JkaW5nCi0gICAgICAgICAgcGVyZm9ybWFuY2VNZXRlci5zdG9wKCk7Ci0gICAgICAgICAgcGVyZm9ybWFuY2VNZXRlci5jb21taXQoKTsKLSAgICAgICAgICBwZXJmLmFzc2VydFBlcmZvcm1hbmNlKHBlcmZvcm1hbmNlTWV0ZXIpOwotICAgICAgICAgIHBlcmZvcm1hbmNlTWV0ZXIuZGlzcG9zZSgpOwotICAgICAgICAgIHJ1blN0YXRlID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIC8vIGhhbmRsZSBleGNlcHRpb24KLSAgICAgIH0gICAgICAgIAotICAgIH0KLSAgfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2Uvc3JjL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9wZXJmb3JtYW5jZS91dGlsL1BlcmZvcm1hbmNlSlVuaXRVdGlscy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3NyYy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvcGVyZm9ybWFuY2UvdXRpbC9QZXJmb3JtYW5jZUpVbml0VXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGRkMzgxYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2Uvc3JjL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9wZXJmb3JtYW5jZS91dGlsL1BlcmZvcm1hbmNlSlVuaXRVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMzIxICAxNzY4ODYgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNzA1MDkgIDE4MDU2NyBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGVyZm9ybWFuY2UudXRpbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuUHJvZ3Jlc3NNb25pdG9yRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnV0aWwuRHluYW1pY1BvcHVwSlVuaXRXaXphcmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5BY2N1bXVsYXRlU3RhdHVzSGFuZGxlcjsKLQotCi1wdWJsaWMgY2xhc3MgUGVyZm9ybWFuY2VKVW5pdFV0aWxzIHsKLSAgCi0JcHJpdmF0ZSBzdGF0aWMgSVN0YXR1c1tdIGxhdW5jaFdpemFyZChTdHJpbmcgcGx1Z2luTlMsU3RyaW5nIHdpemFyZElkLFN0cmluZyBvYmplY3RDbGFzc0lkLElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGluaXRpYWxTZWxlY3Rpb24pIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCUFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyIHN0YXR1c0hhbmRsZXIgPSBuZXcgQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXIoKTsKLQotICAgICAgICBEeW5hbWljUG9wdXBKVW5pdFdpemFyZCB3aXphcmQgPSBuZXcgRHluYW1pY1BvcHVwSlVuaXRXaXphcmQoc3RhdHVzSGFuZGxlcik7Ci0gICAgICAgIHdpemFyZC5zZXRJbml0aWFsRGF0YSh3aXphcmRJZCk7Ci0gICAgICAgIFByb2dyZXNzTW9uaXRvckRpYWxvZyBtb25pdG9yID0gbmV3IFByb2dyZXNzTW9uaXRvckRpYWxvZyhQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldFNoZWxsKCkpOwotICAgICAgICB0cnkgewotICAgICAgICAJd2l6YXJkLnJ1bkhlYWRMZXNzKGluaXRpYWxTZWxlY3Rpb24sIG1vbml0b3IpOwotICAgICAgICB9IAotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpewotICAgICAgICAJZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHN0YXR1c0hhbmRsZXIuZ2V0QWxsUmVwb3J0cygpOwotCi0JfQotCQotCXB1YmxpYyBzdGF0aWMgSVN0YXR1c1tdIGxhdW5jaENyZWF0aW9uV2l6YXJkKFN0cmluZyB3aXphcmRJZCxTdHJpbmcgb2JqZWN0Q2xhc3NJZCxJU3RydWN0dXJlZFNlbGVjdGlvbiBpbml0aWFsU2VsZWN0aW9uKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQlyZXR1cm4gbGF1bmNoV2l6YXJkKCJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkiLHdpemFyZElkLG9iamVjdENsYXNzSWQsaW5pdGlhbFNlbGVjdGlvbik7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgSVN0YXR1c1tdIGxhdW5jaENvbnN1bXB0aW9uV2l6YXJkKFN0cmluZyB3aXphcmRJZCxTdHJpbmcgb2JqZWN0Q2xhc3NJZCxJU3RydWN0dXJlZFNlbGVjdGlvbiBpbml0aWFsU2VsZWN0aW9uKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQlyZXR1cm4gbGF1bmNoV2l6YXJkKCJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkiLHdpemFyZElkLG9iamVjdENsYXNzSWQsaW5pdGlhbFNlbGVjdGlvbik7Ci0JfQotCQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnBlcmZvcm1hbmNlL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDBiYWE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZS90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE4OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLQotPHByb2plY3QgbmFtZT0idGVzdHN1aXRlIiBkZWZhdWx0PSJwZXJmb3JtYW5jZSIgYmFzZWRpcj0iLiI+Ci0gIDwhLS0gVGhlIHByb3BlcnR5ICR7ZWNsaXBzZS1ob21lfSBzaG91bGQgYmUgcGFzc2VkIGludG8gdGhpcyBzY3JpcHQgLS0+Ci0gIDwhLS0gU2V0IGEgbWVhbmluZ2Z1bCBkZWZhdWx0IHZhbHVlIGZvciB3aGVuIGl0IGlzIG5vdC4gLS0+Ci0gIDwhLS0gPHByb3BlcnR5IG5hbWU9ImVjbGlwc2UtaG9tZSIgdmFsdWU9IiR7YmFzZWRpcn1cLi5cLi4iLz4gLS0+Ci0JPGVjaG8gbWVzc2FnZT0iYmFzZWRpciAke2Jhc2VkaXJ9IiAvPgotCTxlY2hvIG1lc3NhZ2U9ImVjbGlwc2UgcGxhY2UgJHtlY2xpcHNlLWhvbWV9IiAvPgotCQotICA8IS0tIHNldHMgdGhlIHByb3BlcnRpZXMgcGx1Z2luLW5hbWUsIGFuZCBsaWJyYXJ5LWZpbGUgLS0+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wZXJmb3JtYW5jZSIvPgotICA8cHJvcGVydHkgbmFtZT0ibGlicmFyeS1maWxlIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjEuMC9saWJyYXJ5LnhtbCIvPgotICA8cHJvcGVydHkgbmFtZT0icGVyZi10ZXN0cy1maWxlIiB2YWx1ZT0iJHt0ZXN0RGlyfS9wZXJmb3JtYW5jZS10ZXN0cy54bWwiLz4KLSAgPHByb3BlcnR5IG5hbWU9IndvcmtzcGFjZSIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS93b3Jrc3BhY2Vfd3NfcGVyZm9ybWFuY2UiLz4KLSAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iLURvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41MD0ke3Rlc3REaXJ9LyR7dG9tY2F0NTBEaXJ9Ii8+Ci0gICAgICAKLSAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotICA8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgotICA8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KLSAgPHRhcmdldCBuYW1lPSJpbml0Ij4KLSAgICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0gIDwvdGFyZ2V0PgotCi0gIDwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+Ci0gIDx0YXJnZXQgbmFtZT0icGVyZm9ybWFuY2Vfc3VpdGUiPgotICAJCi0gIAk8IS0tIEl0ZXJhdGlvbiAxIC0tPgotICAJCi0gICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4gICAgCQotICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjUwLnBlcmZtc3IuUGVyZm1zckJVSmF2YUF4aXNUQzUwIiAvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1wYXRoIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+ICAgICAgCi0gICAgPC9hbnQ+Ci0gIAkKLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPiAgICAJCi0gICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzLnRvbWNhdC52NTAucGVyZm1zci5QZXJmbXNyQ2xpZW50QXhpc1RDNTAiIC8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLXBhdGgiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4gICAgICAKLSAgICA8L2FudD4KLSAgCQotICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+ICAgIAkKLSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MC5wZXJmbXNyLlBlcmZtc3JUREphdmFBeGlzVEM1MCIgLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tcGF0aCIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPiAgICAgIAotICAgIDwvYW50PiAgCQotICAJCi0gIAk8IS0tIEl0ZXJhdGlvbiAyIC0tPgotICAJCi0gICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4gICAgCQotICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjUwLnBlcmZtc3IuUGVyZm1zckJVSmF2YUF4aXNUQzUwIiAvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1wYXRoIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+ICAgICAgCi0gICAgPC9hbnQ+Ci0gIAkKLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPiAgICAJCi0gICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzLnRvbWNhdC52NTAucGVyZm1zci5QZXJmbXNyQ2xpZW50QXhpc1RDNTAiIC8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLXBhdGgiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4gICAgICAKLSAgICA8L2FudD4KLSAgCQotICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+ICAgIAkKLSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MC5wZXJmbXNyLlBlcmZtc3JUREphdmFBeGlzVEM1MCIgLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tcGF0aCIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPiAgICAgIAotICAgIDwvYW50PiAgCQotCi0gIAk8IS0tIEl0ZXJhdGlvbiAzIC0tPgotICAJCi0gICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4gICAgCQotICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjUwLnBlcmZtc3IuUGVyZm1zckJVSmF2YUF4aXNUQzUwIiAvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1wYXRoIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+ICAgICAgCi0gICAgPC9hbnQ+Ci0gIAkKLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPiAgICAJCi0gICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzLnRvbWNhdC52NTAucGVyZm1zci5QZXJmbXNyQ2xpZW50QXhpc1RDNTAiIC8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLXBhdGgiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4gICAgICAKLSAgICA8L2FudD4KLSAgCQotICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+ICAgIAkKLSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MC5wZXJmbXNyLlBlcmZtc3JUREphdmFBeGlzVEM1MCIgLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tcGF0aCIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPiAgICAgIAotICAgIDwvYW50PiAgCQotCi0gIAk8IS0tIEl0ZXJhdGlvbiA0IC0tPgotICAJCi0gICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4gICAgCQotICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjUwLnBlcmZtc3IuUGVyZm1zckJVSmF2YUF4aXNUQzUwIiAvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1wYXRoIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+ICAgICAgCi0gICAgPC9hbnQ+Ci0gIAkKLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPiAgICAJCi0gICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzLnRvbWNhdC52NTAucGVyZm1zci5QZXJmbXNyQ2xpZW50QXhpc1RDNTAiIC8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLXBhdGgiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4gICAgICAKLSAgICA8L2FudD4KLSAgCQotICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+ICAgIAkKLSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MC5wZXJmbXNyLlBlcmZtc3JUREphdmFBeGlzVEM1MCIgLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tcGF0aCIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPiAgICAgIAotICAgIDwvYW50PiAgCQotCi0gIAk8IS0tIEl0ZXJhdGlvbiA1IC0tPgotICAJCi0gICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4gICAgCQotICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjUwLnBlcmZtc3IuUGVyZm1zckJVSmF2YUF4aXNUQzUwIiAvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1wYXRoIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+ICAgICAgCi0gICAgPC9hbnQ+Ci0gIAkKLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPiAgICAJCi0gICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5heGlzLnRvbWNhdC52NTAucGVyZm1zci5QZXJmbXNyQ2xpZW50QXhpc1RDNTAiIC8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLXBhdGgiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4gICAgICAKLSAgICA8L2FudD4KLSAgCQotICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+ICAgIAkKLSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MC5wZXJmbXNyLlBlcmZtc3JUREphdmFBeGlzVEM1MCIgLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tcGF0aCIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPiAgICAgIAotICAgIDwvYW50PiAgCQotICAJCi0gIDwvdGFyZ2V0PgotCi0gIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotICA8IS0tIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0gIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KLSAgPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPiAgCi0gIDwvdGFyZ2V0PgotCi0gIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLSAgPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgotICA8dGFyZ2V0IG5hbWU9InBlcmZvcm1hbmNlIiBkZXBlbmRzPSJpbml0LHBlcmZvcm1hbmNlX3N1aXRlLGNsZWFudXAiPgotICAgIDxhbnQgdGFyZ2V0PSJjb2xsZWN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJpbmNsdWRlcyIgdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cyoueG1sIi8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0ib3V0cHV0LWZpbGUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiLz4KLSAgICA8L2FudD4KLSAgPC90YXJnZXQ+Ci08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjNmYmFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJ0ZXN0cyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTc3NjNlYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotYmluCi1idWlsZC54bWwKLXRlbXAuZm9sZGVyCi10ZXN0cy5qYXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmU4MGQ1NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHM8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2OTQwYWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLSNUaHUgTWF5IDMxIDE0OjI3OjM5IEVEVCAyMDA3Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotaW5zdGFuY2Uvb3JnLmVjbGlwc2UuY29yZS5uZXQvb3JnLmVjbGlwc2UuY29yZS5uZXQuaGFzTWlncmF0ZWQ9dHJ1ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlYTJhMWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jTW9uIEphbiAzMCAxMDo0MDo1OCBFU1QgMjAwNgotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDExNmRlNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlUExVR0lOX05BTUUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cztzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMjAxLnF1YWxpZmllcgotQnVuZGxlLUNsYXNzUGF0aDogdGVzdHMuamFyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGx1Z2luLlRlc3RzUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlUExVR0lOX1BST1ZJREVSCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMsCi0gb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MCwKLSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGx1Z2luLAotIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51bml0dGVzdCwKLSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbAotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmpzdC53cy5jb25zdW1wdGlvbi51aSwKLSBvcmcuZWNsaXBzZS5qc3Qud3MuY29uc3VtcHRpb24sCi0gb3JnLmVjbGlwc2UuanN0LndzLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi51aSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYsCi0gb3JnLmVjbGlwc2UuanN0LmoyZWUuY29yZSwKLSBvcmcuZWNsaXBzZS5qc3QuajJlZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5qdW5pdDtidW5kbGUtdmVyc2lvbj0iWzMuOC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UudWksCi0gb3JnLmVjbGlwc2UuZGVidWcuY29yZSwKLSBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUsCi0gb3JnLmVjbGlwc2UuamVtLnV0aWwsCi0gb3JnLmVjbGlwc2Uud3N0LndzLAotIG9yZy5lY2xpcHNlLmVtZi5lY29yZSwKLSBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUsCi0gb3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZywKLSBvcmcuZWNsaXBzZS5qZHQuZGVidWcudWksCi0gb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuY29yZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnRlc3RzLAotIG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLAotIG9yZy5lY2xpcHNlLndzdC53cy5leHBsb3JlcgotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL2Fib3V0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkYjM2ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTY1NzZlZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLWJpbi5pbmNsdWRlcyA9IGRhdGEvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgcmVhZG1lLnR4dCxcCi0gICAgICAgICAgICAgICB0ZXN0cy5qYXIsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgYmluLwotamFycy5jb21waWxlLm9yZGVyID0gdGVzdHMuamFyCi1zb3VyY2UudGVzdHMuamFyID0gdGVzdHMvCi1vdXRwdXQudGVzdHMuamFyID0gYmluLwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL2RhdGEvQlVKYXZhL2NsaWVudC9FY2hvUHJveHlUZXN0LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9kYXRhL0JVSmF2YS9jbGllbnQvRWNob1Byb3h5VGVzdC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiMGUzYjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL2RhdGEvQlVKYXZhL2NsaWVudC9FY2hvUHJveHlUZXN0LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIGltcG9ydD0iamF2YS5pby4qIiAlPgotPGpzcDp1c2VCZWFuIGlkPSJlY2hvUHJveHkiIGNsYXNzPSJmb28uRWNob1Byb3h5IiBzY29wZT0icmVxdWVzdCIvPgotPGh0bWw+Ci08JUAgaW5jbHVkZSBmaWxlID0gIi9vdXRwdXRGaWxlUGF0aC5qc3BmIiAlPgotPCUKLSAgIC8vIEhUVFAvUE9TVCBwYXJhbWV0ZXI6Ci0gICAvLyB0ZXN0SW5wdXQgLSB0aGUgU3RyaW5nIGFyZ3VtZW50IHRvIGNhbGwgdGhlIHByb3h5IHdpdGguCi0gICBTdHJpbmcgdGVzdElucHV0ID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoInRlc3RJbnB1dCIpOwotICAgCi0gICAvLyBFeGVjdXRlIHRoZSBXZWIgc2VydmljZS4KLSAgIFN0cmluZyByZXN1bHQgPSBlY2hvUHJveHkuZWNob1N0cmluZyh0ZXN0SW5wdXQpOwotICAgCi0gICAvLyBXcml0ZSB0aGUgcmVzdWx0IHRvIHRoZSBvdXRwdXRGaWxlUGF0aC4KLSAgIFByaW50V3JpdGVyIHB3ID0gbnVsbDsKLSAgIHRyeQotICAgewotICAgICBwdyA9IG5ldyBQcmludFdyaXRlcihuZXcgRmlsZU91dHB1dFN0cmVhbShvdXRwdXRGaWxlUGF0aCkpOwotICAgICBwdy5wcmludChyZXN1bHQpOwotICAgICBwdy5mbHVzaCgpOwotICAgfSAgIAotICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgewotICAgfQotICAgZmluYWxseQotICAgewotICAgICBpZiAocHcgIT0gbnVsbCkKLSAgICAgICBwdy5jbG9zZSgpOwotICAgfQotJT4KLTwvYm9keT4KLTxwPgotdGVzdElucHV0OiA8JT10ZXN0SW5wdXQlPgotPHA+Ci1vdXRwdXRGaWxlUGF0aDogPCU9b3V0cHV0RmlsZVBhdGglPgotPHA+Ci1UaGUgcmVzdWx0IGlzIDwlPXJlc3VsdCU+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL2RhdGEvQlVKYXZhL3NyYy9mb28vRWNoby5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL2RhdGEvQlVKYXZhL3NyYy9mb28vRWNoby5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTg5M2QyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9kYXRhL0JVSmF2YS9zcmMvZm9vL0VjaG8uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotcGFja2FnZSBmb287Ci0KLXB1YmxpYyBjbGFzcyBFY2hvCi17Ci0JcHVibGljIFN0cmluZyBlY2hvU3RyaW5nKFN0cmluZyBpbnB1dCkKLQl7Ci0JCXJldHVybiBpbnB1dDsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL2RhdGEvVERKYXZhL0VjaG8ud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9kYXRhL1RESmF2YS9FY2hvLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2ZGYzMmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL2RhdGEvVERKYXZhL0VjaG8ud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9mb28iIHhtbG5zOmltcGw9Imh0dHA6Ly9mb28iIHhtbG5zOmludGY9Imh0dHA6Ly9mb28iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp3c2Rsc29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6d3NpPSJodHRwOi8vd3MtaS5vcmcvcHJvZmlsZXMvYmFzaWMvMS4xL3hzZCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0gPHdzZGw6dHlwZXM+Ci0gIDxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZm9vIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOmltcGw9Imh0dHA6Ly9mb28iIHhtbG5zOmludGY9Imh0dHA6Ly9mb28iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLSAgIDxlbGVtZW50IG5hbWU9ImVjaG9TdHJpbmdSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJlY2hvU3RyaW5nUmV0dXJuIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJlY2hvU3RyaW5nIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImlucHV0IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gIDwvc2NoZW1hPgotIDwvd3NkbDp0eXBlcz4KLQotICAgPHdzZGw6bWVzc2FnZSBuYW1lPSJlY2hvU3RyaW5nUmVzcG9uc2UiPgotCi0gICAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9ImltcGw6ZWNob1N0cmluZ1Jlc3BvbnNlIiBuYW1lPSJwYXJhbWV0ZXJzIi8+Ci0KLSAgIDwvd3NkbDptZXNzYWdlPgotCi0gICA8d3NkbDptZXNzYWdlIG5hbWU9ImVjaG9TdHJpbmdSZXF1ZXN0Ij4KLQotICAgICAgPHdzZGw6cGFydCBlbGVtZW50PSJpbXBsOmVjaG9TdHJpbmciIG5hbWU9InBhcmFtZXRlcnMiLz4KLQotICAgPC93c2RsOm1lc3NhZ2U+Ci0KLSAgIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkVjaG8iPgotCi0gICAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZWNob1N0cmluZyI+Ci0KLSAgICAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9ImltcGw6ZWNob1N0cmluZ1JlcXVlc3QiIG5hbWU9ImVjaG9TdHJpbmdSZXF1ZXN0Ii8+Ci0KLSAgICAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJpbXBsOmVjaG9TdHJpbmdSZXNwb25zZSIgbmFtZT0iZWNob1N0cmluZ1Jlc3BvbnNlIi8+Ci0KLSAgICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0KLSAgIDwvd3NkbDpwb3J0VHlwZT4KLQotICAgPHdzZGw6YmluZGluZyBuYW1lPSJFY2hvU29hcEJpbmRpbmciIHR5cGU9ImltcGw6RWNobyI+Ci0KLSAgICAgIDx3c2Rsc29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLQotICAgICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImVjaG9TdHJpbmciPgotCi0gICAgICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotCi0gICAgICAgICA8d3NkbDppbnB1dCBuYW1lPSJlY2hvU3RyaW5nUmVxdWVzdCI+Ci0KLSAgICAgICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotCi0gICAgICAgICA8L3dzZGw6aW5wdXQ+Ci0KLSAgICAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJlY2hvU3RyaW5nUmVzcG9uc2UiPgotCi0gICAgICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLQotICAgICAgICAgPC93c2RsOm91dHB1dD4KLQotICAgICAgPC93c2RsOm9wZXJhdGlvbj4KLQotICAgPC93c2RsOmJpbmRpbmc+Ci0KLSAgIDx3c2RsOnNlcnZpY2UgbmFtZT0iRWNob1NlcnZpY2UiPgotCi0gICAgICA8d3NkbDpwb3J0IGJpbmRpbmc9ImltcGw6RWNob1NvYXBCaW5kaW5nIiBuYW1lPSJFY2hvIj4KLQotICAgICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly9sb2NhbGhvc3Q6OTA4MC9UZXN0V2ViL3NlcnZpY2VzL0VjaG8iLz4KLQotICAgICAgPC93c2RsOnBvcnQ+Ci0KLSAgIDwvd3NkbDpzZXJ2aWNlPgotCi08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvZGF0YS9XU1BlcmZQcm9qZWN0cy56aXAgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvZGF0YS9XU1BlcmZQcm9qZWN0cy56aXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1ZDgxZjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL2RhdGEvV1NQZXJmUHJvamVjdHMuemlwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL2RhdGEvV1NUZXN0UHJvamVjdHMuemlwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL2RhdGEvV1NUZXN0UHJvamVjdHMuemlwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjJlOWViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9kYXRhL1dTVGVzdFByb2plY3RzLnppcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9kYXRhL3dlYmNsaWVudC9vdXRwdXRGaWxlUGF0aC5qc3BmIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL2RhdGEvd2ViY2xpZW50L291dHB1dEZpbGVQYXRoLmpzcGYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4YTdhZWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL2RhdGEvd2ViY2xpZW50L291dHB1dEZpbGVQYXRoLmpzcGYKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08L2hlYWQ+ICAKLTwlCi0gICBTdHJpbmcgb3V0cHV0RmlsZVBhdGggPSByZXF1ZXN0LmdldFBhcmFtZXRlcigib3V0cHV0RmlsZVBhdGgiKTsKLSU+ICAgClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTM5NDcxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotIyAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyAyMDA2MDQyNCAgIDEzODA2MCBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotIyAyMDA3MDMyNyAgIDE3MjMzOSBrYXRoeUBjYS5pYm0uY29tIC0gS2F0aHkgQ2hhbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jCi0jIE1lc3NhZ2VzIGluIHBsdWdpbi54bWwuCi0jCi1QTFVHSU5fTkFNRT1KYXZhIFdlYiBTZXJ2aWNlcyBUb29scyBUZXN0cwotUExVR0lOX1BST1ZJREVSPUVjbGlwc2Uub3JnCi0KLVBPUFVQX1RFU1RfV1NETD1UZXN0IHdpdGggV2ViIFNlcnZpY2VzIEV4cGxvcmVyCi1BQ1RJT05fR0VORVJBVEVfSkFWQV9TS0VMRVRPTj1HZW5lcmF0ZSBKYXZhIGJlYW4gc2tlbGV0b24KLUFDVElPTl9HRU5FUkFURV9KQVZBX1BST1hZPUdlbmVyYXRlIENsaWVudAotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvcGx1Z2luLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjQ1NTliLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLTxwbHVnaW4+Ci0KLQkgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wb3B1cE1lbnVzIj4KLSAgICAgICAgCi0gICAgICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLlNlcnZsZXRMaW5rIgotICAgICAgICAgICAgbmFtZUZpbHRlcj0iKiIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZC5qYXZhIj4KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICAgIGxhYmVsPSIlQUNUSU9OX0dFTkVSQVRFX0pBVkFfU0tFTEVUT04iCi0gICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMucG9wdXAuRHluYW1pY1BvcHVwV2l6YXJkIgotICAgICAgICAgICAgICAgbWVudWJhclBhdGg9ImFkZGl0aW9ucyIKLSAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZCI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPgotICAgICAgICAgCi0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLlNlcnZsZXRMaW5rIgotICAgICAgICAgICAgbmFtZUZpbHRlcj0iKiIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud2l6YXJkLmNsaWVudC5jbGllbnR3aXphcmQiPgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IiVBQ1RJT05fR0VORVJBVEVfSkFWQV9QUk9YWSIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5wb3B1cC5EeW5hbWljUG9wdXBXaXphcmQiCi0gICAgICAgICAgICAgICBtZW51YmFyUGF0aD0iYWRkaXRpb25zIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS53aXphcmQuY2xpZW50LmNsaWVudHdpemFyZCI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPgotCi0gICAgICA8b2JqZWN0Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLlNlcnZsZXRMaW5rIgotICAgICAgICAgICAgbmFtZUZpbHRlcj0iKiIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkuYWN0aW9uLldTRExGaWxlTWVudSI+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iJVBPUFVQX1RFU1RfV1NETCIKLSAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwuZXhwbG9yZXIucG9wdXAuUG9wdXBUZXN0V1NETCIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJhZGRpdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLmV4cGxvcmVyLnBvcHVwLlBvcHVwVGVzdFdTREwiPgotICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4KLSAgICAKLSAgICAgIDwvZXh0ZW5zaW9uPgotCi08ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRlcnMiPgotICAgICAgICAgPGZhY3RvcnkgCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnV0aWwuV1NDdXN0b21BZGFwdGVyRmFjdG9yeSIgCi0gICAgICAgICAgICBhZGFwdGFibGVUeXBlPSJvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuU2VydmxldExpbmsiPgotICAgICAgICAgICAgPGFkYXB0ZXIgdHlwZT0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGUiLz4KLSAgICAgICAgIDwvZmFjdG9yeT4KLSAgICAgIDwvZXh0ZW5zaW9uPgotCi0gICAgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRlcnMiPgotICAgICAgICAgPGZhY3RvcnkgCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnV0aWwuV1NDdXN0b21BZGFwdGVyRmFjdG9yeSIgCi0gICAgICAgICAgICBhZGFwdGFibGVUeXBlPSJvcmcuZWNsaXBzZS5qc3QuajJlZS53ZWJzZXJ2aWNlLndzZGQuU2VydmxldExpbmsiPgotICAgICAgICAgICAgPGFkYXB0ZXIgdHlwZT0iamF2YS5sYW5nLlN0cmluZyIvPgotICAgICAgICAgPC9mYWN0b3J5PgotICAgICAgPC9leHRlbnNpb24+ICAKLSAgICAKLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3JlYWRtZS50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvcmVhZG1lLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODMyOTU0Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvcmVhZG1lLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotVGhlIGFyZ3VtZW50cyB0byBiZSBwYXNzZWQgaW4gYXJlOiAKLQotLURvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41MD1FOlxcVG9tY2F0XFxUb21jYXQ1LjAKLQotLCB3aGVyZSAib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNTAiIGlzIHRoZSBpbnN0YWxsIGRpcmVjdG9yeSBvZiB5b3VyIFRvbWNhdCB2NS4wIHNlcnZlci4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTdlNGM1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLQotPHByb2plY3QgbmFtZT0idGVzdHN1aXRlIiBkZWZhdWx0PSJydW4iIGJhc2VkaXI9Ii4iPgotICA8IS0tIFRoZSBwcm9wZXJ0eSAke2VjbGlwc2UtaG9tZX0gc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotICA8IS0tIFNldCBhIG1lYW5pbmdmdWwgZGVmYXVsdCB2YWx1ZSBmb3Igd2hlbiBpdCBpcyBub3QuIC0tPgotIDwhLS0gPHByb3BlcnR5IG5hbWU9ImVjbGlwc2UtaG9tZSIgdmFsdWU9IiR7YmFzZWRpcn1cLi5cLi4iLz4gLS0+Ci0JPGVjaG8gbWVzc2FnZT0iYmFzZWRpciAke2Jhc2VkaXJ9IiAvPgotCTxlY2hvIG1lc3NhZ2U9ImVjbGlwc2UgcGxhY2UgJHtlY2xpcHNlLWhvbWV9IiAvPgotICA8IS0tIHNldHMgdGhlIHByb3BlcnRpZXMgcGx1Z2luLW5hbWUsIGFuZCBsaWJyYXJ5LWZpbGUgLS0+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cyIvPgotICA8cHJvcGVydHkgbmFtZT0ibGlicmFyeS1maWxlIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjEuMC9saWJyYXJ5LnhtbCIvPgotICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSItRG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjUwPSR7dGVzdERpcn0vJHt0b21jYXQ1MERpcn0iLz4KLQkKLSAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotICA8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgotICA8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KLSAgPHRhcmdldCBuYW1lPSJpbml0Ij4KLSAgICA8dHN0YW1wLz4KLSAgICA8ZGVsZXRlPgotICAgICAgPGZpbGVzZXQgZGlyPSIke2VjbGlwc2UtaG9tZX0iIGluY2x1ZGVzPSJvcmcqLnhtbCIvPgotICAgIDwvZGVsZXRlPgotICA8L3RhcmdldD4KLQotICA8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgotICA8dGFyZ2V0IG5hbWU9InN1aXRlIj4KLSAgICA8cHJvcGVydHkgbmFtZT0ianN0LXdzLWZvbGRlciIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9qc3Rfd3NfZm9sZGVyIi8+Ci0gICAgPGRlbGV0ZSBkaXI9IiR7anN0LWZvbGRlcn0iIHF1aWV0PSJ0cnVlIi8+Ci0gICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHtqc3Qtd3MtZm9sZGVyfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudW5pdHRlc3QuQWxsV1NKVW5pdFRlc3RzIiAvPgotICAgCSAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1wYXRoIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iLz4KLSAgIAkgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+ICAgIAkKLSAgICA8L2FudD4KLSAgPC90YXJnZXQ+Ci0KLSAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+Ci0gIDwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLSAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgotICA8L3RhcmdldD4KLQotICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0gIDwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KLSAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0gICAgPGFudCB0YXJnZXQ9ImNvbGxlY3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImluY2x1ZGVzIiB2YWx1ZT0ib3JnKi54bWwiLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJvdXRwdXQtZmlsZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIvPgotICAgIDwvYW50PgotICA8L3RhcmdldD4KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvV1NXaXphcmRUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL1dTV2l6YXJkVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDQyMjY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvV1NXaXphcmRUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDQgICAxMTQ4MzUgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudW5pdHRlc3QuV1NKVW5pdENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbC5KVW5pdFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb250ZXh0LlBlcnNpc3RlbnRSZXNvdXJjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuRWNsaXBzZUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi51aS5lY2xpcHNlLkVjbGlwc2VTdGF0dXNIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUVudmlyb25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JUnVudGltZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFdTV2l6YXJkVGVzdCBleHRlbmRzIFRlc3RDYXNlIGltcGxlbWVudHMgV1NKVW5pdENvbnN0YW50cwotewotCXByb3RlY3RlZCBJRW52aXJvbm1lbnQgZW52XzsKLQlwcm90ZWN0ZWQgSVJ1bnRpbWUgc2VydmVyUnVudGltZV87Ci0JcHJvdGVjdGVkIElTZXJ2ZXIgc2VydmVyXzsKLQlwcm90ZWN0ZWQgSVN0cnVjdHVyZWRTZWxlY3Rpb24gaW5pdGlhbFNlbGVjdGlvbl87Ci0gIAotICBwdWJsaWMgU3RyaW5nIGRlZmF1bHRVUkxfID0gImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8iOwotCQotCS8qKgotCSAqIFNldCB1cCB0aGUgd29ya3NwYWNlIGZvciB0aGUgV2ViIFNlcnZpY2UgV2l6YXJkIEpVbml0IHRlc3QuIFNldHVwIGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgc3RlcHM6Ci0JICogMSkgT2J0YWluIGFuIGluc3RhbmNlIG9mIHRoZSBlbnZpcm9ubWVudC4KLQkgKiAyKSBJbnN0YWxsIHRoZSBzZXJ2ZXIgcnVudGltZS4KLQkgKiAzKSBJbnN0YWxsIHRoZSBpbnB1dCBkYXRhLiBUaGlzIG1heSBpbmNsdWRlIHByb2plY3RzLCBzb3VyY2UgZmlsZXMgZXRjLgotCSAqIDQpIEluc3RhbGwgYW4gaW5zdGFuY2Ugb2YgdGhlIHNlcnZlciBpZiByZXF1aXJlZC4gVGhpcyBtYXkgYWxzbyBpbmNsdWRlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGlucHV0IGRhdGEgb24gdGhlIHNlcnZlci4KLQkgKiA1KSBJbml0aWFsaXplIHRoZSBKMkVFLCBXZWIgU2VydmljZSBSdW50aW1lIGFuZCBTZXJ2ZXIgdHlwZSBkZWZhdWx0cyBmb3IgdGhlIFdlYiBTZXJ2aWNlIHdpemFyZCB0byB1c2UuCi0JICogNikgSW5pdGlhbGl6ZSB0aGUgaW5pdGlhbCBzZWxlY3Rpb24gb2JqZWN0IHRvIHNldCB0aGUgY29udGV4dCBmb3IgdGhlIFdlYiBTZXJ2aWNlIHdpemFyZC4KLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJLy8gR2V0IGFuIGluc3RhbmNlIG9mIHRoZSBkZWZhdWx0IGVudmlyb25tZW50IHdpdGggdGhlIEFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyIHRvIG1pbmltaXplIFVJIGRpYWxvZyBibG9ja3MuCi0JICAJUGVyc2lzdGVudFJlc291cmNlQ29udGV4dCAgcmVzb3VyY2VDb250ZXh0ID0gUGVyc2lzdGVudFJlc291cmNlQ29udGV4dC5nZXRJbnN0YW5jZSgpOwotCQlFY2xpcHNlU3RhdHVzSGFuZGxlciAgICAgICBoYW5kbGVyICAgICAgICAgPSBuZXcgRWNsaXBzZVN0YXR1c0hhbmRsZXIoKTsKLQkJRWNsaXBzZUVudmlyb25tZW50ICAgICAgICAgZW52aXJvbm1lbnQgICAgID0gbmV3IEVjbGlwc2VFbnZpcm9ubWVudCggbnVsbCwgcmVzb3VyY2VDb250ZXh0LCBoYW5kbGVyICk7Ci0JICAKLQkJZW52XyA9IGVudmlyb25tZW50OyAKLQkJYXNzZXJ0VHJ1ZShlbnZfICE9IG51bGwpOwotCQkKLQkJc2VydmVyXyA9IG51bGw7Ci0JCUpVbml0VXRpbHMuaGlkZUFjdGlvbkRpYWxvZ3MoKTsKLQkJaW5zdGFsbFNlcnZlclJ1bnRpbWUoKTsKLQkJaW5zdGFsbFNlcnZlcigpOwotCQkKLQkJLy8gdW56aXAgcHJlLWNvbmZpZ3VyZWQgd29ya3NwYWNlIHByb2plY3RzCi0JCS8vaWYgKCFQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoV1NKVW5pdENvbnN0YW50cy5CVV9QUk9KRUNUX05BTUUpLmV4aXN0cygpKQotCQkJY3JlYXRlUHJvamVjdHMoKTsJCQotCQkKLQkJaW5zdGFsbElucHV0RGF0YSgpOwotCQlpbml0SjJFRVdTUnVudGltZVNlcnZlckRlZmF1bHRzKCk7Ci0JCWluaXRJbml0aWFsU2VsZWN0aW9uKCk7Ci0JfQotCQotCS8qKgotCSAqIEluc3RhbGwgdGhlIHNlcnZlciBydW50aW1lLgotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgaW5zdGFsbFNlcnZlclJ1bnRpbWUoKSB0aHJvd3MgRXhjZXB0aW9uOwotCQotCS8qKgotCSAqIEluc3RhbGxzIHRoZSBpbnB1dCBkYXRhIGZyb20gYW4gYWdncmVnYXRvci4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGVudmlyb25tZW50LCBydW50aW1lCi0JICogYW5kIHNlcnZlciBhcmUgY29ycmVjdGx5IHNldCBvbiB0aGUgYWdncmVnYXRlIHNpbmNlIGl0cyBsaWZlY3ljbGUgbWV0aG9kcyBhcmUgbm90IG5lY2Vzc2FyaWx5Ci0JICogY2FsbGVkLgotCSAqIEBwYXJhbSBlbnYKLQkgKiBAcGFyYW0gc2VydmVyUnVudGltZQotCSAqIEBwYXJhbSBzZXJ2ZXIKLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIGluc3RhbGxJbnB1dERhdGEoSUVudmlyb25tZW50IGVudixJUnVudGltZSBzZXJ2ZXJSdW50aW1lLElTZXJ2ZXIgc2VydmVyKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQllbnZfID0gZW52OwotCQlzZXJ2ZXJSdW50aW1lXyA9IHNlcnZlclJ1bnRpbWU7Ci0JCXNlcnZlcl8gPSBzZXJ2ZXI7Ci0JCS8vaW5zdGFsbElucHV0RGF0YSgpOwotCX0KLQkKLQkvLyBDcmVhdGVzIHByb2plY3RzIGZyb20gdGhlIHByb3ZpZGVkIFpJUCBmaWxlLgotLy8JcHVibGljIHN0YXRpYyBib29sZWFuIGNyZWF0ZVByb2plY3RzKCkgewotLy8JCUlQYXRoIGxvY2FsWmlwUGF0aCA9IGdldExvY2FsUGF0aCgpOwotLy8JCVByb2plY3RVbnppcFV0aWwgdXRpbCA9IG5ldyBQcm9qZWN0VW56aXBVdGlsKGxvY2FsWmlwUGF0aCwgcGVyZl9wcm9qZWN0TmFtZXMpOwotLy8JCXJldHVybiB1dGlsLmNyZWF0ZVByb2plY3RzKCk7Ci0vLwl9Ci0JCi0vLwlwcml2YXRlIHN0YXRpYyBJUGF0aCBnZXRMb2NhbFBhdGgoKSB7Ci0vLwkJVVJMIHVybCA9IFRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5maW5kKHBlcmZfemlwRmlsZVBhdGgpOwotLy8JCXRyeSB7Ci0vLwkJCXVybCA9IFBsYXRmb3JtLmFzTG9jYWxVUkwodXJsKTsKLS8vCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0vLwkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0vLwkJfQotLy8JCXJldHVybiBuZXcgUGF0aCh1cmwuZ2V0UGF0aCgpKTsKLS8vCX0JCi0JCi0gICAgLyoqCi0gICAgICogQ3JlYXRlIHRoZSBuZWNlc3NhcnkgcHJvamVjdHMgZm9yIHRoZSB0ZXN0cy4gIFRoaXMgY291bGQgYmUgV2ViLCBKYXZhLCBvciBvdGhlciBKMkVFIHByb2plY3RzLgotICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCi0gICAgICovCi0gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgY3JlYXRlUHJvamVjdHMoKSB0aHJvd3MgRXhjZXB0aW9uOwotCQotCS8qKgotCSAqIEluc3RhbGwgdGhlIGlucHV0IGRhdGEgZm9yIHRoZSB0ZXN0LiBUaGlzIG1heSBpbmNsdWRlIHByb2plY3RzLCBzb3VyY2UgZmlsZXMgZXRjLgotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgaW5zdGFsbElucHV0RGF0YSgpIHRocm93cyBFeGNlcHRpb247Ci0JCi0JLyoqCi0JICogSW5zdGFsbCBhbiBpbnN0YW5jZSBvZiB0aGUgc2VydmVyLiBUaGlzIG1heSBhbHNvIGNvbmZpZ3VyZSBpbnB1dCBkYXRhIG9uIHRoZSBzZXJ2ZXIuCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCBpbnN0YWxsU2VydmVyKCkgdGhyb3dzIEV4Y2VwdGlvbjsKLQkKLQkvKioKLQkgKiBJbml0aWFsaXplIHRoZSBKMkVFIGxldmVsLCBXZWIgU2VydmljZSBydW50aW1lIHR5cGUgYW5kIFNlcnZlciBkZWZhdWx0cyBmb3IgdGhlIHRlc3QgY2FzZS4KLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCXByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIGluaXRKMkVFV1NSdW50aW1lU2VydmVyRGVmYXVsdHMoKSB0aHJvd3MgRXhjZXB0aW9uOwotCQotCS8qKgotCSAqIEluaXRpYWxpemUgdGhlIGluaXRpYWwgc2VsZWN0aW9uIHdoaWNoIGRyaXZlcyB0aGUgV2ViIFNlcnZpY2Ugd2l6YXJkLiBUaGlzIGNvdWxkIGluY2x1ZGUgc291cmNlIEphdmEgZmlsZXMsCi0JICogV1NETCBVUkxzIGFuZCBldmVuIEVKQnMuCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCBpbml0SW5pdGlhbFNlbGVjdGlvbigpIHRocm93cyBFeGNlcHRpb247Ci0JCi0JLyoqCi0JICogQ2xlYW4gdXAgdGhlIHdvcmtzcGFjZS4gQ2xlYW51cCBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIHN0ZXBzOgotCSAqIDEpIERlbGV0ZSB0aGUgaW5wdXQgZGF0YS4gVGhpcyBzaG91bGQgaW5jbHVkZSByZW1vdmFsIG9mIGNvbmZpZ3VyYXRpb24gZGF0YSBvbiB0aGUgc2VydmVyIGlmIG5lY2Vzc2FyeS4KLQkgKiAyKSBTdG9wIHRoZSBzZXJ2ZXIuCi0JICogMykgRGVsZXRlIHRoZSBzZXJ2ZXIuCi0JICogNCkgRGVsZXRlIHRoZSBzZXJ2ZXIgcnVudGltZS4KLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCXN0b3BTZXJ2ZXIoKTsKLQkJZGVsZXRlU2VydmVyKCk7Ci0vLyAgICAgIGRlbGV0ZUlucHV0RGF0YSgpOwotLy8JCWRlbGV0ZVNlcnZlclJ1bnRpbWUoKTsKLQl9Ci0JCi0JLyoqCi0JICogRGVsZXRlIHRoZSBpbnB1dCBkYXRhLiBUaGlzIHNob3VsZCBpbmNsdWRlIHJlbW92YWwgb2YgcHJvamVjdHMsIHNyYyBmaWxlcyBldGMuIGFzIHdlbGwgYXMgcmVtb3ZhbCBvZiBhbnkgc2VydmVyIGNvbmZpZ3VyZWQgZGF0YS4KLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCXByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIGRlbGV0ZUlucHV0RGF0YSgpIHRocm93cyBFeGNlcHRpb247Ci0JCi0JLyoqCi0JICogU3RvcCB0aGUgc2VydmVyIGlmIGl0IGlzIHJ1bm5pbmcuCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBzdG9wU2VydmVyKCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJaWYgKHNlcnZlcl8gIT0gbnVsbCAmJiBzZXJ2ZXJfLmdldFNlcnZlclN0YXRlKCkgPT0gSVNlcnZlci5TVEFURV9TVEFSVEVEKQotCQkJc2VydmVyXy5zdG9wKHRydWUpOwotCQlhc3NlcnRUcnVlKHNlcnZlcl8uZ2V0U2VydmVyU3RhdGUoKSA9PSBJU2VydmVyLlNUQVRFX1NUT1BQRUQpOwotCX0KLQkKLQkvKioKLQkgKiBEZWxldGUgdGhlIHNlcnZlci4KLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCXByb3RlY3RlZCB2b2lkIGRlbGV0ZVNlcnZlcigpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCWlmIChzZXJ2ZXJfICE9IG51bGwpCi0JCQlzZXJ2ZXJfLmRlbGV0ZSgpOwotCX0KLQkKLQkvKioKLQkgKiBEZWxldGUgdGhlIHNlcnZlciBydW50aW1lLgotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgZGVsZXRlU2VydmVyUnVudGltZSgpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCWlmIChzZXJ2ZXJSdW50aW1lXyAhPSBudWxsKQotCQkJc2VydmVyUnVudGltZV8uZGVsZXRlKCk7Ci0JfQotCQotCS8qKgotCSAqIEdldCB0aGUgZGVmYXVsdCBVUkwgaW4gdGhlIGZvcm0gb2Y6IGh0dHA6Ly9sb2NhbGhvc3Q6OTA4MC88Y29udGV4dFJvb3Q+LzxwYXRoPgotCSAqIEBwYXJhbSBwYXRoIC0gYSBmaWxlIG9yIFVSTCByZWxhdGl2ZSBwYXRoLgotCSAqIEBwYXJhbSBjb250ZXh0Um9vdCAtIHRoZSBjb250ZXh0IHJvb3Qgb2YgdGhlIFdlYiBtb2R1bGUgZm9yIHRoaXMgVVJMLgotCSAqIEByZXR1cm4KLQkgKi8KLQlwcm90ZWN0ZWQgU3RyaW5nIGdldERlZmF1bHRVUkwoU3RyaW5nIHBhdGgsU3RyaW5nIGNvbnRleHRSb290KQotCXsKLQkJU3RyaW5nQnVmZmVyIHVybCA9IG5ldyBTdHJpbmdCdWZmZXIoZGVmYXVsdFVSTF8pOwotCQl1cmwuYXBwZW5kKGNvbnRleHRSb290KTsKLQkJdXJsLmFwcGVuZCgnLycpOwotCQl1cmwuYXBwZW5kKHBhdGgpOwotCQlyZXR1cm4gdXJsLnRvU3RyaW5nKCk7Ci0JfQkKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvYXhpcy90b21jYXQvdjUwL1dTV2l6YXJkVG9tY2F0NTBUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL2F4aXMvdG9tY2F0L3Y1MC9XU1dpemFyZFRvbWNhdDUwVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjYyNmIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvYXhpcy90b21jYXQvdjUwL1dTV2l6YXJkVG9tY2F0NTBUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5XU1dpemFyZFRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnV0aWwuSlVuaXRVdGlsczsKLQotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgV1NXaXphcmRUb21jYXQ1MFRlc3QgZXh0ZW5kcyBXU1dpemFyZFRlc3QgewotICAKLQlwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIFNFUlZFUl9JTlNUQUxMX1BBVEggPSBTeXN0ZW0uZ2V0UHJvcGVydHkoIm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjUwIik7Ci0JcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBSVU5USU1FVFlQRUlEX1RDNTAgPSAib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQucnVudGltZS41MCI7Ci0JcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBTRVJWRVJUWVBFSURfVEM1MCA9ICJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41MCI7Ci0JICAKLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgY29tLmlibS5ldG9vbHMud2Vic2VydmljZS53YXMudGVzdHMuV1NXaXphcmRUZXN0I2luc3RhbGxTZXJ2ZXJSdW50aW1lKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGluc3RhbGxTZXJ2ZXJSdW50aW1lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLSAgICBzZXJ2ZXJSdW50aW1lXyA9IEpVbml0VXRpbHMuY3JlYXRlU2VydmVyUnVudGltZShSVU5USU1FVFlQRUlEX1RDNTAsIFNFUlZFUl9JTlNUQUxMX1BBVEgpOwotICB9Ci0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgY29tLmlibS5ldG9vbHMud2Vic2VydmljZS53YXMudGVzdHMuV1NXaXphcmRUZXN0I2luc3RhbGxTZXJ2ZXIoKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgaW5zdGFsbFNlcnZlcigpIHRocm93cyBFeGNlcHRpb24gewotCi0gICAgc2VydmVyXyA9IEpVbml0VXRpbHMuY3JlYXRlU2VydmVyKCJBcGFjaGUgVG9tY2F0IHY1MCIsIFNFUlZFUlRZUEVJRF9UQzUwLCBzZXJ2ZXJSdW50aW1lXywgZW52XywgbnVsbCApOwotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9wbHVnaW4vVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvcGx1Z2luL1Rlc3RzUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzMmM3Y2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy9wbHVnaW4vVGVzdHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGx1Z2luOwotCi1pbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OwotCi0vKioKLSAqIFRoZSBtYWluIHBsdWdpbiBjbGFzcyB0byBiZSB1c2VkIGluIHRoZSBkZXNrdG9wLgotICovCi1wdWJsaWMgY2xhc3MgVGVzdHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCS8vVGhlIHNoYXJlZCBpbnN0YW5jZS4KLQlwcml2YXRlIHN0YXRpYyBUZXN0c1BsdWdpbiBwbHVnaW47Ci0JLy9SZXNvdXJjZSBidW5kbGUuCi0JcHJpdmF0ZSBSZXNvdXJjZUJ1bmRsZSByZXNvdXJjZUJ1bmRsZTsKLQkKLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIFRlc3RzUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlwbHVnaW4gPSB0aGlzOwotCQl0cnkgewotCQkJcmVzb3VyY2VCdW5kbGUgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wbHVnaW4uVGVzdHNQbHVnaW4iKTsKLQkJfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIHgpIHsKLQkJCXJlc291cmNlQnVuZGxlID0gbnVsbDsKLQkJfQotCX0KLQotCS8qKgotCSAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB1cG9uIHBsdWctaW4gYWN0aXZhdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnN0YXJ0KGNvbnRleHQpOwotCX0KLQotCS8qKgotCSAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSBwbHVnLWluIGlzIHN0b3BwZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnN0b3AoY29udGV4dCk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgVGVzdHNQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzdHJpbmcgZnJvbSB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqIG9yICdrZXknIGlmIG5vdCBmb3VuZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRSZXNvdXJjZVN0cmluZyhTdHJpbmcga2V5KSB7Ci0JCVJlc291cmNlQnVuZGxlIGJ1bmRsZSA9IFRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRSZXNvdXJjZUJ1bmRsZSgpOwotCQl0cnkgewotCQkJcmV0dXJuIChidW5kbGUgIT0gbnVsbCkgPyBidW5kbGUuZ2V0U3RyaW5nKGtleSkgOiBrZXk7Ci0JCX0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7Ci0JCQlyZXR1cm4ga2V5OwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqLwotCXB1YmxpYyBSZXNvdXJjZUJ1bmRsZSBnZXRSZXNvdXJjZUJ1bmRsZSgpIHsKLQkJcmV0dXJuIHJlc291cmNlQnVuZGxlOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvQWxsV1NKVW5pdFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L0FsbFdTSlVuaXRUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjZkYzllLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvQWxsV1NKVW5pdFRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDQgICAxMTQ4MzUgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA3MDMxNCAgIDE3Njg4NiBwbW9vZ2tAY2EuaWJtLmNvbSAtIFBldGVyIE1vb2drCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnVuaXR0ZXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0UmVzdWx0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci1pbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbC5KVW5pdFV0aWxzOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgaXMgdG8gcnVuIGFsbCB0aGUgdW5pdHRlc3QgdGVzdHMuCi0gKi8KLXB1YmxpYyBjbGFzcyBBbGxXU0pVbml0VGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZSBpbXBsZW1lbnRzIFdTSlVuaXRDb25zdGFudHMKLXsKLSAgLyoqCi0gICAqIE1ldGhvZCBwYXJzZUFyZ3MuCi0gICAqIAotICAgKiBAcGFyYW0gYXJncwotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHBhcnNlQXJncyhPYmplY3QgYXJncykKLSAgewotICAgIC8vIHR5cGljaWFsbHkgYXJncyBpcyBhbiBhcnJheSBvZiBzdHJpbmdzLAotICAgIC8vIG5vdCBzdXJlIHdoZW4gaXQgd291bGRuJ3QgYmUuCi0gIH0KLQotICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQotICB7Ci0gICAgbmV3IEFsbFdTSlVuaXRUZXN0cygpLnJ1bk1haW4oYXJncyk7Ci0gIH0KLQotICAKLSAgcHVibGljIE9iamVjdCBydW5NYWluKE9iamVjdCBhcmdzKQotICB7Ci0gICAgT2JqZWN0IHJlc3VsdCA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgVGVzdFJ1bm5lciB0ZXN0UnVubmVyID0gbnVsbDsKLQotICAgICAgcGFyc2VBcmdzKGFyZ3MpOwotCi0gICAgICB0ZXN0UnVubmVyID0gbmV3IFRlc3RSdW5uZXIoU3lzdGVtLm91dCk7Ci0KLSAgICAgIFRlc3Qgc3VpdGUgPSBzdWl0ZSgpOwotICAgICAgVGVzdFJlc3VsdCB0ZXN0UmVzdWx0ID0gdGVzdFJ1bm5lci5kb1J1bihzdWl0ZSwgZmFsc2UpOwotICAgICAgcHJpbnRIZWFkZXIodGVzdFJlc3VsdCk7ICAgICAgCi0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBlOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgSlVuaXRVdGlscy5lbmFibGVPdmVyd3JpdGUodHJ1ZSk7Ci0gICAgCi0gICAgVGVzdFN1aXRlIHRlc3RTdWl0ZSA9IG5ldyBUZXN0U3VpdGUoKTsKLSAgICB0ZXN0U3VpdGUuYWRkVGVzdCggQ29tcG9uZW50Q3JlYXRpb25UZXN0cy5zdWl0ZSgpICk7Ci0gICAgdGVzdFN1aXRlLmFkZFRlc3QoIEoyRUVVdGlsc1Rlc3RzLnN1aXRlKCkgKTsKLSAgIAotICAgIC8vIFRlc3RzIHdoaWNoIHJlcXVpcmUgYSBUb21jYXQgc2VydmVyCi0gICAgU3RyaW5nIHMgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoIm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjUwIik7Ci0gICAgaWYgKHMgIT0gbnVsbCAmJiBzLmxlbmd0aCgpID4gMCkgewotICAgICAgdGVzdFN1aXRlLmFkZFRlc3QoIFNlcnZlckNyZWF0aW9uVGVzdHMuc3VpdGUoKSk7Ci0gICAgICB0ZXN0U3VpdGUuYWRkVGVzdCggQlVKYXZhQXhpc1RDNTAuc3VpdGUoKSApOwotICAgICAgdGVzdFN1aXRlLmFkZFRlc3QoIFRESmF2YUF4aXNUQzUwLnN1aXRlKCkgKTsKLSAgICAgIHRlc3RTdWl0ZS5hZGRUZXN0KCBDbGllbnRBeGlzVEM1MC5zdWl0ZSgpICk7Ci0KLSAgICB9Ci0gICAgdGVzdFN1aXRlLmFkZFRlc3QoIFJlc291cmNlVXRpbHNUZXN0cy5zdWl0ZSgpICk7Ci0KLSAgICByZXR1cm4gdGVzdFN1aXRlOwotICB9Ci0KLSAgLyoqCi0gICAqIFByaW50cyB0aGUgaGVhZGVyIG9mIHRoZSByZXBvcnQKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHByaW50SGVhZGVyKFRlc3RSZXN1bHQgcmVzdWx0KQotICB7Ci0gICAgaWYgKHJlc3VsdC53YXNTdWNjZXNzZnVsKCkpCi0gICAgewotICAgICAgU3lzdGVtLm91dC5wcmludGxuKCk7Ci0gICAgICBTeXN0ZW0ub3V0LnByaW50KCJPSyIpOwotICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgKCIgKyByZXN1bHQucnVuQ291bnQoKSArICIgdGVzdHMpIik7Ci0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigpOwotICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGQUlMVVJFUyEhISIpOwotICAgICAgU3lzdGVtLm91dC5wcmludGxuKAotICAgICAgICAiVGVzdHMgcnVuOiAiCi0gICAgICAgICAgKyByZXN1bHQucnVuQ291bnQoKQotICAgICAgICAgICsgIiwgIEZhaWx1cmVzOiAiCi0gICAgICAgICAgKyByZXN1bHQuZmFpbHVyZUNvdW50KCkKLSAgICAgICAgICArICIsICBFcnJvcnM6ICIKLSAgICAgICAgICArIHJlc3VsdC5lcnJvckNvdW50KCkpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9CVUphdmFBeGlzVEM1MC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9CVUphdmFBeGlzVEM1MC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjk2ZDQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvQlVKYXZhQXhpc1RDNTAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzAxMDQgICAxMTQ4MzUgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKiAyMDA3MDUwOSAgIDE4MDU2NyBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudW5pdHRlc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamVtLnV0aWwuZW1mLndvcmtiZW5jaC5Qcm9qZWN0VXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5pbnRlcm5hbC5KMkVFVmVyc2lvbkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uLkNyZWF0ZU1vZHVsZUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MC5XU1dpemFyZFRvbWNhdDUwVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbC5KVW5pdFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsLlNjZW5hcmlvQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyOwotCi0vKioKLSAqIEJvdHRvbSB1cCBwZXJmb3JtYW5jZSBzY2VuYXJpbyB3aXRoIEF4aXMgYW5kIFRvbWNhdCB2NS4wCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBCVUphdmFBeGlzVEM1MCBleHRlbmRzIFdTV2l6YXJkVG9tY2F0NTBUZXN0IHsKLQkvLyBDb25zdGFudHMKLSAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBXU19SVU5USU1FSURfQVhJUyA9ICBXU0pVbml0Q29uc3RhbnRzLldTX1JVTlRJTUVJRF9BWElTOyAKLQlwcml2YXRlIFN0cmluZyBQUk9KRUNUX05BTUUgPSBXU0pVbml0Q29uc3RhbnRzLkJVX1BST0pFQ1RfTkFNRTsKLSAgICAKLQlwcml2YXRlIElGaWxlIHNvdXJjZUZpbGVfOwotCQotCQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpewotCQlyZXR1cm4gbmV3IFRlc3RTdWl0ZShCVUphdmFBeGlzVEM1MC5jbGFzcyk7Ci0JfQotCQotICAvKioKLSAgICogU2V0cyB1cCB0aGUgaW5wdXQgZGF0YTsKLSAgICogLSBjcmVhdGUgcHJvamVjdChzKSwKLSAgICogLSBjb3B5IHJlc291cmNlcyB0byB3b3Jrc3BhY2UgCi0gICAqLwotCXByb3RlY3RlZCB2b2lkIGluc3RhbGxJbnB1dERhdGEoKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQkKLQkJSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChQUk9KRUNUX05BTUUpOwotICAgICAgICBJUGF0aCBkZXN0UGF0aCA9IFJlc291cmNlVXRpbHMuZ2V0SmF2YVNvdXJjZUxvY2F0aW9uKHdlYlByb2plY3QpOwotICAgICAgICBJRm9sZGVyIGZvbGRlciA9IChJRm9sZGVyKVJlc291cmNlVXRpbHMuZmluZFJlc291cmNlKGRlc3RQYXRoKTsJCQotCQlKVW5pdFV0aWxzLmNvcHlUZXN0RGF0YSgiQlVKYXZhL3NyYyIsZm9sZGVyLGVudl8sIG51bGwpOwotCQlzb3VyY2VGaWxlXyA9IGZvbGRlci5nZXRGaWxlKG5ldyBQYXRoKCJmb28vRWNoby5qYXZhIikpOwotCQkvLyBFbnN1cmUgdGhhdCBFY2hvLmNsYXNzIGlzIGJ1aWx0IGluOgotCQkvLyA8V2ViIFByb2plY3Q+L1dlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzL2Zvby9FY2hvLmNsYXNzCi0JCUpVbml0VXRpbHMuc3luY0J1aWxkUHJvamVjdCh3ZWJQcm9qZWN0LGVudl8sIG51bGwpOwotCQkvL2Fzc2VydFRydWUoSlVuaXRVdGlscy5nZXRDbGFzc2VzRm9sZGVyRm9yV2ViUHJvamVjdChXRUJfUFJPSkVDVF9OQU1FKS5nZXRGaWxlKG5ldyBQYXRoKCJmb28vRWNoby5jbGFzcyIpKS5leGlzdHMoKSk7Ci0JCQotCQkKLQl9Ci0JCi0gICAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlUHJvamVjdHMoKSB0aHJvd3MgRXhjZXB0aW9uewotICAgICAgICBJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSk7Ci0gICAgICAgIGlmICh3ZWJQcm9qZWN0PT1udWxsIHx8ICF3ZWJQcm9qZWN0LmV4aXN0cygpKXsKLSAgICAgICAgICBjcmVhdGVXZWJNb2R1bGUoUFJPSkVDVF9OQU1FLCBQUk9KRUNUX05BTUUsSjJFRVZlcnNpb25Db25zdGFudHMuSjJFRV8xXzRfSUQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIHByaXZhdGUgdm9pZCBjcmVhdGVXZWJNb2R1bGUoU3RyaW5nIHByb2plY3RObSwgU3RyaW5nIGNvbXBvbmVudE5hbWUsIGludCBqMmVlVmVyc2lvbil7Ci0KLSAgICAgICAgQ3JlYXRlTW9kdWxlQ29tbWFuZCBjbWMgPSBuZXcgQ3JlYXRlTW9kdWxlQ29tbWFuZCgpOwotICAgICAgICBjbWMuc2V0SjJlZUxldmVsKG5ldyBJbnRlZ2VyKGoyZWVWZXJzaW9uKS50b1N0cmluZygpKTsKLSAgICAgICAgY21jLnNldE1vZHVsZU5hbWUoY29tcG9uZW50TmFtZSk7Ci0gICAgICAgIGNtYy5zZXRNb2R1bGVUeXBlKENyZWF0ZU1vZHVsZUNvbW1hbmQuV0VCKTsKLSAgICAgICAgY21jLnNldFByb2plY3ROYW1lKHByb2plY3RObSk7Ci0gICAgICAgIGNtYy5zZXRTZXJ2ZXJGYWN0b3J5SWQoU0VSVkVSVFlQRUlEX1RDNTApOwotICAgICAgICBjbWMuc2V0U2VydmVySW5zdGFuY2VJZChzZXJ2ZXJfLmdldElkKCkpOwotICAgICAgICBjbWMuZXhlY3V0ZShudWxsLCBudWxsICk7Ci0gICAgICAgIAotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRvbmUgY3JlYXRpbmcgV2ViIFByb2plY3QsICIrcHJvamVjdE5tKTsgICAgICAKLSAgICAgICAKLSAgICAgIH0KLQkKLQkKLSAgLyoqCi0gICAqIFNldCB0aGUgcGVyc2lzdGVudCBzZXJ2ZXIgcnVudGltZSBjb250ZXh0IHByZWZlcmVuY2VzCi0gICAqLyAgCi0JcHJvdGVjdGVkIHZvaWQgaW5pdEoyRUVXU1J1bnRpbWVTZXJ2ZXJEZWZhdWx0cygpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCS8vIFNldCBkZWZhdWx0IHByZWZlcmVuY2VzIGZvciBBeGlzIGFuZCBUb21jYXQgNS4wCi0JCUpVbml0VXRpbHMuc2V0V1NSdW50aW1lU2VydmVyKFdTX1JVTlRJTUVJRF9BWElTLCBTRVJWRVJUWVBFSURfVEM1MCk7CQkKLQl9Ci0JCi0gIC8qKgotICAgKiBTZXQgdGhlIGluaXRpYWwgc2VsZWN0aW9uCi0gICAqLwotCXByb3RlY3RlZCB2b2lkIGluaXRJbml0aWFsU2VsZWN0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJaW5pdGlhbFNlbGVjdGlvbl8gPSBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihzb3VyY2VGaWxlXyk7Ci0JfQotCQotICAvKioKLSAgICogTGF1bmNoZXMgdGhlIHBvcC11cCBjb21tYW5kIHRvIGluaXRpYXRlIHRoZSBzY2VuYXJpbwotICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgotICAgKi8gIAotCXB1YmxpYyB2b2lkIHRlc3RCVUphdmFBeGlzVEM1MCgpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JICAgIElQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoUFJPSkVDVF9OQU1FKTsKLQkgICAgSlVuaXRVdGlscy5kaXNhYmxlV1NJRGlhbG9nKHdlYlByb2plY3QpOwotCi0JICAgIElTdGF0dXNbXSBzdGF0dXMgPSBKVW5pdFV0aWxzLmxhdW5jaENyZWF0aW9uV2l6YXJkKFNjZW5hcmlvQ29uc3RhbnRzLldJWkFSRElEX0JPVFRPTV9VUCxTY2VuYXJpb0NvbnN0YW50cy5PQkpFQ1RfQ0xBU1NfSURfSUZJTEUsaW5pdGlhbFNlbGVjdGlvbl8pOwotCi0gICAgICAgIHZlcmlmeU91dHB1dChzdGF0dXMpOwotCi0JCQotCX0KLQkKLSAgLyoqCi0gICAqIFZlcmlmeSB0aGUgc2NlbmFyaW8gY29tcGxldGVkIHN1Y2Nlc3NmdWxseQotICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgotICAgKi8KLQlwcml2YXRlIGZpbmFsIHZvaWQgdmVyaWZ5T3V0cHV0KElTdGF0dXNbXSBzdGF0dXMpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0gICAgICAgIElQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoUFJPSkVDVF9OQU1FKTsgICAgCi0JCUlGb2xkZXIgd2ViQ29udGVudEZvbGRlciA9IChJRm9sZGVyKUoyRUVVdGlscy5nZXRXZWJDb250ZW50Q29udGFpbmVyKHdlYlByb2plY3QpOwotICAgIAotICAgICAgICBJRm9sZGVyIHdzZGxGb2xkZXIgPSB3ZWJDb250ZW50Rm9sZGVyLmdldEZvbGRlcigid3NkbCIpOwotCQlhc3NlcnRUcnVlKHdzZGxGb2xkZXIuZXhpc3RzKCkpOwotCQlhc3NlcnRUcnVlKHdzZGxGb2xkZXIubWVtYmVycygpLmxlbmd0aCA+IDApOwotCQlhc3NlcnRUcnVlKHdlYkNvbnRlbnRGb2xkZXIuZ2V0Rm9sZGVyKCJ3c2RsIikubWVtYmVycygpLmxlbmd0aCA+IDApOwotICAgIAotCQlBY2N1bXVsYXRlU3RhdHVzSGFuZGxlciBzdGF0dXNIYW5kbGVyID0gbmV3IEFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyKHN0YXR1cyk7Ci0JCUlTdGF0dXNbXSBzID0gc3RhdHVzSGFuZGxlci5nZXRFcnJvclJlcG9ydHMoKTsKLQkJLy8KLQkJaWYgKHMubGVuZ3RoID4gMCl7Ci0JCQlmb3IgKGludCBpPTA7aTxzLmxlbmd0aDtpKyspewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3IgbWVzc2FnZSBmb3IgcmVwb3J0ICMiK2krIjogIitzW2ldLmdldE1lc3NhZ2UoKSk7Ci0JCQl9Ci0JCX0KLQkJYXNzZXJ0VHJ1ZShzLmxlbmd0aCA9PSAwKTsKLQotCX0KLQkKLSAgLyoqCi0gICAqIENsZWFyIHdvcmtzcGFjZSBpZiBuZWNlc3NhcnkKLSAgICovCi0JcHJvdGVjdGVkIHZvaWQgZGVsZXRlSW5wdXREYXRhKCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJLy8gUmVtb3ZlIHRoZSBFQVIgZnJvbSB0aGUgc2VydmVyLgotCQlJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSk7Ci0JCS8vSlVuaXRVdGlscy5yZW1vdmVNb2R1bGVGcm9tU2VydmVyKHNlcnZlcl8sd2ViUHJvamVjdCxlbnZfKTsKLQkJCi0JCS8vIERlbGV0ZSB0aGUgV2ViIHByb2plY3QuCi0JCXdlYlByb2plY3QuZGVsZXRlKHRydWUsdHJ1ZSwgbnVsbCk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHdlYlByb2plY3QuZXhpc3RzKCkpOwotCQkKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L0NsaWVudEF4aXNUQzUwLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L0NsaWVudEF4aXNUQzUwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwNGU0MmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9DbGllbnRBeGlzVEM1MC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDEwNCAgIDExNDgzNSBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDcwNTA5ICAgMTgwNTY3IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51bml0dGVzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmludGVybmFsLkoyRUVWZXJzaW9uQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uSjJFRVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb24uQ3JlYXRlTW9kdWxlQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMuYXhpcy50b21jYXQudjUwLldTV2l6YXJkVG9tY2F0NTBUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsLkpVbml0VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnV0aWwuU2NlbmFyaW9Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmVjbGlwc2UuQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXI7Ci0KLS8qKgotICogQ2xpZW50IHBlcmZvcm1hbmNlIHNjZW5hcmlvIHdpdGggQXhpcyBhbmQgVG9tY2F0IHY1LjAKLSAqLwotcHVibGljIGNsYXNzIENsaWVudEF4aXNUQzUwIGV4dGVuZHMgV1NXaXphcmRUb21jYXQ1MFRlc3QgewotCi0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgV1NfUlVOVElNRUlEX0FYSVMgPSBXU0pVbml0Q29uc3RhbnRzLldTX1JVTlRJTUVJRF9BWElTOwotICAKLQlwcml2YXRlIFN0cmluZyBDTElFTlRfUFJPSkVDVF9OQU1FID0gV1NKVW5pdENvbnN0YW50cy5DTElFTlRfUFJPSkVDVF9OQU1FOwotCQotCXByaXZhdGUgSUZpbGUgc291cmNlRmlsZV87Ci0KLQkKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKXsKLQkJcmV0dXJuIG5ldyBUZXN0U3VpdGUoQ2xpZW50QXhpc1RDNTAuY2xhc3MpOwotCX0KLQkKLSAgICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVQcm9qZWN0cygpIHRocm93cyBFeGNlcHRpb257Ci0gICAgICAgIElQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoQ0xJRU5UX1BST0pFQ1RfTkFNRSk7Ci0gICAgICAgIGlmICghd2ViUHJvamVjdC5leGlzdHMoKSl7Ci0gICAgICAgICAgY3JlYXRlV2ViTW9kdWxlKENMSUVOVF9QUk9KRUNUX05BTUUsIENMSUVOVF9QUk9KRUNUX05BTUUsSjJFRVZlcnNpb25Db25zdGFudHMuSjJFRV8xXzRfSUQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIHByaXZhdGUgdm9pZCBjcmVhdGVXZWJNb2R1bGUoU3RyaW5nIHByb2plY3RObSwgU3RyaW5nIGNvbXBvbmVudE5hbWUsIGludCBqMmVlVmVyc2lvbil7Ci0KLSAgICAgICAgQ3JlYXRlTW9kdWxlQ29tbWFuZCBjbWMgPSBuZXcgQ3JlYXRlTW9kdWxlQ29tbWFuZCgpOwotICAgICAgICBjbWMuc2V0SjJlZUxldmVsKG5ldyBJbnRlZ2VyKGoyZWVWZXJzaW9uKS50b1N0cmluZygpKTsKLSAgICAgICAgY21jLnNldE1vZHVsZU5hbWUoY29tcG9uZW50TmFtZSk7Ci0gICAgICAgIGNtYy5zZXRNb2R1bGVUeXBlKENyZWF0ZU1vZHVsZUNvbW1hbmQuV0VCKTsKLSAgICAgICAgY21jLnNldFByb2plY3ROYW1lKHByb2plY3RObSk7Ci0gICAgICAgIGNtYy5zZXRTZXJ2ZXJGYWN0b3J5SWQoU0VSVkVSVFlQRUlEX1RDNTApOwotICAgICAgICBjbWMuc2V0U2VydmVySW5zdGFuY2VJZChzZXJ2ZXJfLmdldElkKCkpOwotICAgICAgICBjbWMuZXhlY3V0ZShudWxsLCBudWxsICk7Ci0gICAgICAgIAotICAgICAgfQotICAgICAgCi0JLyoqCi0gICAqIFNldHMgdXAgdGhlIGlucHV0IGRhdGE7Ci0gICAqIC0gY3JlYXRlIHByb2plY3QocyksCi0gICAqIC0gY29weSByZXNvdXJjZXMgdG8gd29ya3NwYWNlIAotCSAqLwotCXByb3RlY3RlZCB2b2lkIGluc3RhbGxJbnB1dERhdGEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJCi0JCUlQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoQ0xJRU5UX1BST0pFQ1RfTkFNRSk7Ci0gICAgICAgIElGb2xkZXIgZGVzdEZvbGRlciA9IChJRm9sZGVyKUoyRUVVdGlscy5nZXRXZWJDb250ZW50Q29udGFpbmVyKHdlYlByb2plY3QpOwotICAgICAgICBKVW5pdFV0aWxzLmNvcHlUZXN0RGF0YSgiVERKYXZhIixkZXN0Rm9sZGVyLGVudl8sIG51bGwpOwotCQlzb3VyY2VGaWxlXyA9IGRlc3RGb2xkZXIuZ2V0RmlsZShuZXcgUGF0aCgiRWNoby53c2RsIikpOwkJCi0JCUpVbml0VXRpbHMuc3luY0J1aWxkUHJvamVjdCh3ZWJQcm9qZWN0LGVudl8sIG51bGwpOwotCQkKLQl9Ci0KLSAgLyoqCi0gICAqIFNldCB0aGUgcGVyc2lzdGVudCBzZXJ2ZXIgcnVudGltZSBjb250ZXh0IHByZWZlcmVuY2VzCi0gICAqLwotCXByb3RlY3RlZCB2b2lkIGluaXRKMkVFV1NSdW50aW1lU2VydmVyRGVmYXVsdHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gU2V0IGRlZmF1bHQgcHJlZmVyZW5jZXMgZm9yIEF4aXMgYW5kIFRvbWNhdCA1LjAgICAgCi0JCUpVbml0VXRpbHMuc2V0V1NSdW50aW1lU2VydmVyKFdTX1JVTlRJTUVJRF9BWElTLCBTRVJWRVJUWVBFSURfVEM1MCk7Ci0JfQotCi0gIC8qKgotICAgKiBTZXQgdGhlIGluaXRpYWwgc2VsZWN0aW9uCi0gICAqLwotCXByb3RlY3RlZCB2b2lkIGluaXRJbml0aWFsU2VsZWN0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWluaXRpYWxTZWxlY3Rpb25fID0gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oc291cmNlRmlsZV8pOwotCX0KLQotICAvKioKLSAgICogTGF1bmNoZXMgdGhlIHBvcC11cCBjb21tYW5kIHRvIGluaXRpYXRlIHRoZSBzY2VuYXJpbwotICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgotICAgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Q2xpZW50QXhpc1RDNTAoKSB0aHJvd3MgRXhjZXB0aW9uCi0JewkKLQkgIAkKLQkJSlVuaXRVdGlscy5lbmFibGVQcm94eUdlbmVyYXRpb24odHJ1ZSk7Ci0JCUpVbml0VXRpbHMuZW5hYmxlT3ZlcndyaXRlKHRydWUpOwotICAgICAgICAKLQkJSVN0YXR1c1tdIHN0YXR1cyA9IEpVbml0VXRpbHMubGF1bmNoQ3JlYXRpb25XaXphcmQoU2NlbmFyaW9Db25zdGFudHMuV0laQVJESURfQ0xJRU5ULFNjZW5hcmlvQ29uc3RhbnRzLk9CSkVDVF9DTEFTU19JRF9JRklMRSxpbml0aWFsU2VsZWN0aW9uXyk7Ci0KLQkgICAgdmVyaWZ5T3V0cHV0KHN0YXR1cyk7Ci0KLQotCX0KLQkKLSAgLyoqCi0gICAqIFZlcmlmeSB0aGUgc2NlbmFyaW8gY29tcGxldGVkIHN1Y2Nlc2Z1bGx5Ci0gICAqIEB0aHJvd3MgRXhjZXB0aW9uCi0gICAqLwotCXByaXZhdGUgZmluYWwgdm9pZCB2ZXJpZnlPdXRwdXQoSVN0YXR1c1tdIHN0YXR1cykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIElQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoQ0xJRU5UX1BST0pFQ1RfTkFNRSk7Ci0gICAgCi0gICAgICAgIElQYXRoIGRlc3RQYXRoID0gUmVzb3VyY2VVdGlscy5nZXRKYXZhU291cmNlTG9jYXRpb24od2ViUHJvamVjdCk7Ci0gICAgICAgIElGb2xkZXIgc3JjRm9sZGVyID0gKElGb2xkZXIpUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2UoZGVzdFBhdGgpOwotICAgIAotCQkvL0lGb2xkZXIgc3JjRm9sZGVyID0gSlVuaXRVdGlscy5nZXRTb3VyY2VGb2xkZXJGb3JXZWJQcm9qZWN0KENMSUVOVF9QUk9KRUNUX05BTUUpOwotCQlJRm9sZGVyIGZvbGRlciA9IHNyY0ZvbGRlci5nZXRGb2xkZXIoImZvbyIpOwotCQlhc3NlcnRUcnVlKGZvbGRlci5leGlzdHMoKSk7Ci0JCWFzc2VydFRydWUoZm9sZGVyLm1lbWJlcnMoKS5sZW5ndGggPiAwKTsKLQkJCi0JCS8vIENoZWNrIHN0YXR1cyBoYW5kbGVyIGZvciBlcnJvcnMKLQkJQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXIgc3RhdHVzSGFuZGxlciA9IG5ldyBBY2N1bXVsYXRlU3RhdHVzSGFuZGxlcihzdGF0dXMpOwotCQlJU3RhdHVzW10gcyA9IHN0YXR1c0hhbmRsZXIuZ2V0RXJyb3JSZXBvcnRzKCk7Ci0JCWlmIChzLmxlbmd0aCA+IDApewotCQkJZm9yIChpbnQgaT0wO2k8cy5sZW5ndGg7aSsrKXsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIG1lc3NhZ2UgZm9yIHJlcG9ydCAjIitpKyI6ICIrc1tpXS5nZXRNZXNzYWdlKCkpOwotCQkJfQotCQl9ICAgIAotCQlhc3NlcnRUcnVlKHMubGVuZ3RoID09IDApOwotCi0JfQotCQotICAvKioKLSAgICogUmVtb3ZlIHdvcmtzcGFjZSBpZiBuZWNlc3NhcnkKLSAgICovCi0JcHJvdGVjdGVkIHZvaWQgZGVsZXRlSW5wdXREYXRhKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJLy8gRGVsZXRlIHRoZSBXZWIgcHJvamVjdC4KLQkJSVByb2plY3Qgd2ViUHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChDTElFTlRfUFJPSkVDVF9OQU1FKTsKLQkJd2ViUHJvamVjdC5kZWxldGUodHJ1ZSx0cnVlLCBudWxsKTsKLQkJCi0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L0NvbXBvbmVudENyZWF0aW9uVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvQ29tcG9uZW50Q3JlYXRpb25UZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTE3NjM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvQ29tcG9uZW50Q3JlYXRpb25UZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTA0ICAgMTE0ODM1IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51bml0dGVzdDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmV0b29scy5jb21tb24udGVzdC5hcGl0b29scy5Qcm9qZWN0VW56aXBVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLmludGVybmFsLkoyRUVWZXJzaW9uQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb21tb24uUmVzb3VyY2VVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24uY29tbWFuZC5jb21tb24uQ3JlYXRlTW9kdWxlQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMucGx1Z2luLlRlc3RzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsLkpVbml0VXRpbHM7Ci0KLS8qKgotICogVGVzdHMgdGhlIHZhcmlvdXMgQ29tcG9uZW50IGNyZWF0aW9uIGNvbW1hbmRzCi0gKi8KLXB1YmxpYyBjbGFzcyBDb21wb25lbnRDcmVhdGlvblRlc3RzIGV4dGVuZHMgVGVzdENhc2UgaW1wbGVtZW50cyBXU0pVbml0Q29uc3RhbnRzIHsKLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpewotCQlyZXR1cm4gbmV3IFRlc3RTdWl0ZShDb21wb25lbnRDcmVhdGlvblRlc3RzLmNsYXNzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFdlYkNvbXBvbmVudENyZWF0aW9uKCl7Ci0KLSAgICAgICAgY3JlYXRlU2VydmVyUnVudGltZSgpOwotICAgICAgICBjcmVhdGVEeW5hbWljV2ViTW9kdWxlKHByb2plY3ROYW1lcyk7Ci0gICAgICAgIC8vY3JlYXRlUHJvamVjdHMoKTsKLSAgICAgICAgLy9jcmVhdGVXZWJNb2R1bGUocHJvamVjdE5hbWUsIHByb2plY3ROYW1lLCBKMkVFVmVyc2lvbkNvbnN0YW50cy5KMkVFXzFfNF9JRCk7Ci0gICAgICAgIC8vY3JlYXRlV2ViTW9kdWxlKHByb2plY3QyTmFtZSwgcHJvamVjdDJOYW1lLCBKMkVFVmVyc2lvbkNvbnN0YW50cy5KMkVFXzFfM19JRCk7Ci0KLQl9Ci0gIAotCS8vIENyZWF0ZXMgcHJvamVjdHMgZnJvbSB0aGUgcHJvdmlkZWQgWklQIGZpbGUuCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGNyZWF0ZVByb2plY3RzKCkgewotCQlJUGF0aCBsb2NhbFppcFBhdGggPSBnZXRMb2NhbFBhdGgoKTsKLQkJUHJvamVjdFVuemlwVXRpbCB1dGlsID0gbmV3IFByb2plY3RVbnppcFV0aWwobG9jYWxaaXBQYXRoLCBwcm9qZWN0TmFtZXMpOwotCQlyZXR1cm4gdXRpbC5jcmVhdGVQcm9qZWN0cygpOwotCX0KLQkKLQotCXByaXZhdGUgc3RhdGljIElQYXRoIGdldExvY2FsUGF0aCgpIHsKLQkJVVJMIHVybCA9IFRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5maW5kKHppcEZpbGVQYXRoKTsKLQkJdHJ5IHsKLQkJCXVybCA9IFBsYXRmb3JtLmFzTG9jYWxVUkwodXJsKTsKLQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlyZXR1cm4gbmV3IFBhdGgodXJsLmdldFBhdGgoKSk7Ci0JfQkKLSAgCi0gICAgcHVibGljIHZvaWQgY3JlYXRlU2VydmVyUnVudGltZSgpewotICAgICAgCi0gICAgICB0cnkgewotICAgICAgICBKVW5pdFV0aWxzLmNyZWF0ZVNlcnZlclJ1bnRpbWUoUlVOVElNRVRZUEVJRF9UQzUwLCBTRVJWRVJfSU5TVEFMTF9QQVRIKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoKEV4Y2VwdGlvbiBlKXsKLSAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIH0gICAgICAKLSAgICAgIAotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBjcmVhdGVEeW5hbWljV2ViTW9kdWxlKFN0cmluZ1tdIHByb2plY3ROYW1lcyl7Ci0gICAgCQotICAgICAgZm9yIChpbnQgaT0wO2k8cHJvamVjdE5hbWVzLmxlbmd0aDtpKyspIHsKLSAgICAJICBDcmVhdGVNb2R1bGVDb21tYW5kIGNvbW1hbmQgPSBuZXcgQ3JlYXRlTW9kdWxlQ29tbWFuZCgpOwotCSAgCSAgY29tbWFuZC5zZXRQcm9qZWN0TmFtZShwcm9qZWN0TmFtZXNbaV0pOwotCSAgCSAgY29tbWFuZC5zZXRNb2R1bGVOYW1lKHByb2plY3ROYW1lc1tpXSk7CQkJCi0JICAJICBjb21tYW5kLnNldE1vZHVsZVR5cGUoQ3JlYXRlTW9kdWxlQ29tbWFuZC5XRUIpOwotCSAgCSAgY29tbWFuZC5zZXRTZXJ2ZXJGYWN0b3J5SWQoU0VSVkVSVFlQRUlEX1RDNTApOwotCSAgCSAgY29tbWFuZC5zZXRKMmVlTGV2ZWwobmV3IEludGVnZXIoSjJFRVZlcnNpb25Db25zdGFudHMuSjJFRV8xXzRfSUQpLnRvU3RyaW5nKCkpOwotCSAgCSAgY29tbWFuZC5leGVjdXRlKCBudWxsLCBudWxsICkgOwotCi0JICAgICAgSVByb2plY3QgcCA9IFJlc291cmNlVXRpbHMuZ2V0V29ya3NwYWNlUm9vdCgpLmdldFByb2plY3QocHJvamVjdE5hbWVzW2ldKTsKLQkgICAgICBhc3NlcnRUcnVlKHAuZXhpc3RzKCkpOwotICAgICAgfQotICAgIH0KLSAgCi0gICAgcHVibGljIHZvaWQgZHRlc3RDcmVhdGVFSkJNb2R1bGUoKXsKLSAgICAgCi0gICAgICBDcmVhdGVNb2R1bGVDb21tYW5kIGNtYyA9IG5ldyBDcmVhdGVNb2R1bGVDb21tYW5kKCk7Ci0gICAgICBjbWMuc2V0SjJlZUxldmVsKG5ldyBJbnRlZ2VyKEoyRUVWZXJzaW9uQ29uc3RhbnRzLkoyRUVfMV80X0lEKS50b1N0cmluZygpKTsKLSAgICAgIGNtYy5zZXRNb2R1bGVOYW1lKGVqYkNvbXBvbmVudE5hbWUpOwotICAgICAgY21jLnNldE1vZHVsZVR5cGUoQ3JlYXRlTW9kdWxlQ29tbWFuZC5FSkIpOwotICAgICAgY21jLnNldFByb2plY3ROYW1lKGVqYlByb2plY3ROYW1lKTsKLSAgICAgIGNtYy5zZXRTZXJ2ZXJGYWN0b3J5SWQoU0VSVkVSVFlQRUlEX1RDNTApOwotICAgICAgY21jLmV4ZWN1dGUobnVsbCwgbnVsbCApOwotICAgICAgCi0gICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRvbmUgY3JlYXRpbmcgRUpCIGNvbXBvbmVudC4iKTsKLSAgICAgIElQcm9qZWN0IHAgPSBSZXNvdXJjZVV0aWxzLmdldFdvcmtzcGFjZVJvb3QoKS5nZXRQcm9qZWN0KGVqYlByb2plY3ROYW1lKTsKLSAgICAgIGFzc2VydFRydWUocC5leGlzdHMoKSk7ICAgICAgCi0gICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIGR0ZXN0Q3JlYXRlQXBwQ2xpZW50TW9kdWxlKCl7Ci0gICAgICBDcmVhdGVNb2R1bGVDb21tYW5kIGNtYyA9IG5ldyBDcmVhdGVNb2R1bGVDb21tYW5kKCk7Ci0gICAgICBjbWMuc2V0SjJlZUxldmVsKG5ldyBJbnRlZ2VyKEoyRUVWZXJzaW9uQ29uc3RhbnRzLkoyRUVfMV80X0lEKS50b1N0cmluZygpKTsKLSAgICAgIGNtYy5zZXRNb2R1bGVOYW1lKGFwcENsaWVudENvbXBOYW1lKTsKLSAgICAgIGNtYy5zZXRNb2R1bGVUeXBlKENyZWF0ZU1vZHVsZUNvbW1hbmQuQVBQQ0xJRU5UKTsKLSAgICAgIGNtYy5zZXRQcm9qZWN0TmFtZShhcHBDbGllbnRQcm9qZWN0TmFtZSk7Ci0gICAgICBjbWMuc2V0U2VydmVyRmFjdG9yeUlkKFNFUlZFUlRZUEVJRF9UQzUwKTsKLSAgICAgIGNtYy5leGVjdXRlKG51bGwsIG51bGwpOwotICAgICAgCi0gICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRvbmUgY3JlYXRpbmcgQXBwIGNsaWVudCBjb21wb25lbnQuIik7Ci0gICAgICBJUHJvamVjdCBwID0gUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2VSb290KCkuZ2V0UHJvamVjdChhcHBDbGllbnRQcm9qZWN0TmFtZSk7Ci0gICAgICBhc3NlcnRUcnVlKHAuZXhpc3RzKCkpOyAgICAgICAKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBkdGVzdENyZWF0ZUVBUk1vZHVsZSgpewotICAgICAgQ3JlYXRlTW9kdWxlQ29tbWFuZCBjbWMgPSBuZXcgQ3JlYXRlTW9kdWxlQ29tbWFuZCgpOwotICAgICAgY21jLnNldEoyZWVMZXZlbChuZXcgSW50ZWdlcihKMkVFVmVyc2lvbkNvbnN0YW50cy5KMkVFXzFfNF9JRCkudG9TdHJpbmcoKSk7Ci0gICAgICBjbWMuc2V0TW9kdWxlTmFtZShlYXJDb21wTmFtZSk7Ci0gICAgICBjbWMuc2V0TW9kdWxlVHlwZShDcmVhdGVNb2R1bGVDb21tYW5kLkVBUik7Ci0gICAgICBjbWMuc2V0UHJvamVjdE5hbWUocHJvamVjdE5hbWUpOwotICAgICAgY21jLnNldFNlcnZlckZhY3RvcnlJZChTRVJWRVJUWVBFSURfVEM1MCk7Ci0gICAgICBjbWMuZXhlY3V0ZShudWxsLCBudWxsKTsKLSAgICAgIAotICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEb25lIGNyZWF0aW5nIEVBUiBjb21wb25lbnQuIik7Ci0gICAgICBJUHJvamVjdCBwID0gUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2VSb290KCkuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSk7Ci0gICAgICBhc3NlcnRUcnVlKHAuZXhpc3RzKCkpOyAgICAgICAKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L0oyRUVVdGlsc1Rlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L0oyRUVVdGlsc1Rlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhODkxNmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9KMkVFVXRpbHNUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjE1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MTA0ICAgMTE0ODM1IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51bml0dGVzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuajJlZS5pbnRlcm5hbC5KMkVFVmVyc2lvbkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uLkFzc29jaWF0ZU1vZHVsZVdpdGhFQVJDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5yZXNvdXJjZXMuSVZpcnR1YWxDb21wb25lbnQ7Ci0KLS8qKgotICogQGF1dGhvciBzZW5ncGwKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBKMkVFVXRpbHNUZXN0cyBleHRlbmRzIFRlc3RDYXNlIGltcGxlbWVudHMgV1NKVW5pdENvbnN0YW50c3sKLQotICAgIHByaXZhdGUgSVByb2plY3QgcHJvamVjdDEgPSBudWxsOwotICAgIHByaXZhdGUgSVByb2plY3QgcHJvamVjdDIgPSBudWxsOwotICAgIHByaXZhdGUgSVByb2plY3QgZWpiUHJvamVjdCA9IG51bGw7Ci0gICAgCi0gICAgcHJpdmF0ZSBTdHJpbmcgY29tcDEgPSB3ZWJDb21wb25lbnROYW1lOwotCQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7Ci0JCQotCQkvLyBQcm9qZWN0IGFuZCBjb21wb25lbnQgbmFtZXMgaW5pdGlhbGl6ZWQgaGVyZSEKLQkJcHJvamVjdDEgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QocHJvamVjdE5hbWUpOwotCQlhc3NlcnROb3ROdWxsKHByb2plY3QxKTsKLQkJCi0JCXByb2plY3QyID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHByb2plY3QyTmFtZSk7Ci0JCWFzc2VydE5vdE51bGwocHJvamVjdDIpOwotICAgIAotICAgICAgICBlamJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KGVqYlByb2plY3ROYW1lKTsKLSAgICAgICAgYXNzZXJ0Tm90TnVsbChlamJQcm9qZWN0KTsKLQkJCi0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIudGVhckRvd24oKTsKLQkJLy8gVE9ETyBDbGVhciB0aGUgd29ya3NwYWNlCi0JCQotCX0KLQotCSBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotCSAgewotCSAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShKMkVFVXRpbHNUZXN0cy5jbGFzcyk7Ci0JICB9Ci0JIAotCSAgcHVibGljIHZvaWQgdGVzdENvbXBvbmVudHNFeGlzdCgpewotCQkgIFN5c3RlbS5vdXQucHJpbnRsbigiPCBCRUdJTjogdGVzdENvbXBvbmVudEV4aXN0cyAuLi4iKTsKLQkJICBJVmlydHVhbENvbXBvbmVudCB2YzEgPSBKMkVFVXRpbHMuZ2V0VmlydHVhbENvbXBvbmVudChwcm9qZWN0MSk7Ci0JCSAgSVZpcnR1YWxDb21wb25lbnQgdmMyID0gSjJFRVV0aWxzLmdldFZpcnR1YWxDb21wb25lbnQocHJvamVjdDIuZ2V0TmFtZSgpKTsKLQkJICAKLQkJICBhc3NlcnRUcnVlKHZjMS5leGlzdHMoKSk7Ci0JCSAgYXNzZXJ0VHJ1ZShKMkVFVXRpbHMuZXhpc3RzKHByb2plY3QxKSk7Ci0JCSAgYXNzZXJ0VHJ1ZSh2YzIuZXhpc3RzKCkpOwotCQkgIGFzc2VydFRydWUoSjJFRVV0aWxzLmV4aXN0cyhwcm9qZWN0Mi5nZXROYW1lKCksIHByb2plY3QyTmFtZSkpOwotCQkgIFN5c3RlbS5vdXQucHJpbnRsbigiPCBFTkQ6IHRlc3RDb21wb25lbnRFeGlzdHMgLi4uIik7Ci0JICB9Ci0JICAKLQkgIHB1YmxpYyB2b2lkIHRlc3RMb2NhdGlvbkdldHRlck1ldGhvZHMoKXsKLQkJICAKLQkJICBTeXN0ZW0ub3V0LnByaW50bG4oIjwgQkVHSU46IHRlc3RMb2NhdGlvbkdldHRlck1ldGhvZHMgLi4uIik7Ci0JCSAgSVBhdGggbG9jMSA9IEoyRUVVdGlscy5nZXRXZWJDb250ZW50UGF0aChwcm9qZWN0MSk7Ci0JCSAgU3lzdGVtLm91dC5wcmludGxuKCJXZWJDb250ZW50UGF0aCBvZiBwcm9qZWN0MSA9ICIrbG9jMSk7Ci0JCSAgSVJlc291cmNlIHJlcyA9IFJlc291cmNlVXRpbHMuZ2V0V29ya3NwYWNlUm9vdCgpLmZpbmRNZW1iZXIobG9jMSk7Ci0JCSAgYXNzZXJ0VHJ1ZShyZXMuZXhpc3RzKCkpOwotCQkgIGFzc2VydFRydWUocmVzLnRvU3RyaW5nKCkuZW5kc1dpdGgoIldlYkNvbnRlbnQiKSk7Ci0JCSAgCi0JCSAgSVBhdGggbG9jMiA9IEoyRUVVdGlscy5nZXRXZWJDb250ZW50UGF0aChwcm9qZWN0Mik7Ci0JCSAgU3lzdGVtLm91dC5wcmludGxuKCJXZWJDb250ZW50UGF0aCBvZiBwcm9qZWN0MiA9ICIrbG9jMik7Ci0JCSAgSVJlc291cmNlIHJlczIgPSBSZXNvdXJjZVV0aWxzLmdldFdvcmtzcGFjZVJvb3QoKS5maW5kTWVtYmVyKGxvYzIpOwotCQkgIGFzc2VydFRydWUocmVzMi5leGlzdHMoKSk7Ci0JCSAgYXNzZXJ0VHJ1ZShyZXMyLnRvU3RyaW5nKCkuZW5kc1dpdGgoIldlYkNvbnRlbnQiKSk7CQkgIAotCQkgIAotCQkgIElQYXRoIGxvYzMgPSBKMkVFVXRpbHMuZ2V0V2ViSW5mUGF0aChwcm9qZWN0MSk7Ci0JCSAgU3lzdGVtLm91dC5wcmludGxuKCJXZWItSU5GIHBhdGggPSAiK2xvYzMpOwotCQkgIElSZXNvdXJjZSByZXMzID0gUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2VSb290KCkuZmluZE1lbWJlcihsb2MzKTsKLQkJICBhc3NlcnRUcnVlKHJlczMuZXhpc3RzKCkpOwotCQkgIGFzc2VydFRydWUocmVzMy50b1N0cmluZygpLmVuZHNXaXRoKCJXRUItSU5GIikpOwotCQkgIAotCQkgIElDb250YWluZXIgY29udGFpbmVyID0gSjJFRVV0aWxzLmdldFdlYkNvbnRlbnRDb250YWluZXIocHJvamVjdDIpOwotCQkgIElSZXNvdXJjZSByZXM0ID0gUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2VSb290KCkuZmluZE1lbWJlcihjb250YWluZXIuZ2V0RnVsbFBhdGgoKSk7Ci0JCSAgYXNzZXJ0RXF1YWxzKHJlczIsIHJlczQpOwotCQkgIAotCQkgIFN5c3RlbS5vdXQucHJpbnRsbigiPCBFTkQ6IHRlc3RMb2NhdGlvbkdldHRlck1ldGhvZHMgLi4uIik7Ci0JCSAgCi0JICB9Ci0JICAKLQkgIHB1YmxpYyB2b2lkIHRlc3RKMkVFVmVyc2lvbk1ldGhvZHMoKXsKLQkJICAKLQkJICBTeXN0ZW0ub3V0LnByaW50bG4oIjwgQkVHSU46IHRlc3RKMkVFVmVyc2lvbk1ldGhvZHMgLi4uIik7Ci0JICAJCSAgCi0JCSAgU3RyaW5nIGozID0gSjJFRVV0aWxzLmdldEoyRUVWZXJzaW9uQXNTdHJpbmcocHJvamVjdDEpOwotCQkgIFN5c3RlbS5vdXQucHJpbnRsbigiSjJFRVZlcnNpb24gcDEgYXMgU3RyaW5nOiAiK2ozKTsKLQkJICBhc3NlcnRFcXVhbHMoSjJFRVZlcnNpb25Db25zdGFudHMuVkVSU0lPTl8yXzRfVEVYVCwgajMpOwotCQkgIAotCQkgIElWaXJ0dWFsQ29tcG9uZW50IHZjMiA9IEoyRUVVdGlscy5nZXRWaXJ0dWFsQ29tcG9uZW50KHByb2plY3QyKTsKLQkJICBpbnQgajIgPSBKMkVFVXRpbHMuZ2V0SjJFRVZlcnNpb24odmMyKTsKLQkJICBTeXN0ZW0ub3V0LnByaW50bG4oIkoyRUVWZXJzaW9ucyBwMTogIitqMik7CQkgIAotCQkgIGFzc2VydEVxdWFscyhKMkVFVmVyc2lvbkNvbnN0YW50cy5TRVJWTEVUXzJfNCwgajIpOwotCQkgIAotCQkgIFN5c3RlbS5vdXQucHJpbnRsbigiPCBFTkQ6IHRlc3RKMkVFVmVyc2lvbk1ldGhvZHMgLi4uIik7Ci0JICB9Ci0KLQkgIHB1YmxpYyB2b2lkIHRlc3RDb21wb25lbnRHZXR0ZXJNZXRob2RzKCl7Ci0JCSAgCi0JCSAgU3lzdGVtLm91dC5wcmludGxuKCI8IEJFR0lOOiB0ZXN0Q29tcG9uZW50R2V0dGVyTWV0aG9kcyAuLi4iKTsKLQkJICAKLQkJICBJVmlydHVhbENvbXBvbmVudFtdIHZjcyA9IEoyRUVVdGlscy5nZXRBbGxDb21wb25lbnRzKCk7Ci0JCSAgY2hlY2tWaXJ0dWFsQ29tcG9uZW50c0V4aXN0cyh2Y3MpOwotCQkgIAotCQkgIElWaXJ0dWFsQ29tcG9uZW50W10gdmNzMiA9IEoyRUVVdGlscy5nZXRBbGxFQVJDb21wb25lbnRzKCk7Ci0JCSAgY2hlY2tWaXJ0dWFsQ29tcG9uZW50c0V4aXN0cyh2Y3MyKTsKLQkJICAKLQkJICBJVmlydHVhbENvbXBvbmVudFtdIHZjczMgPSBKMkVFVXRpbHMuZ2V0QWxsV2ViQ29tcG9uZW50cygpOwotCQkgIGNoZWNrVmlydHVhbENvbXBvbmVudHNFeGlzdHModmNzMyk7Ci0JCSAgCi0JCSAgSVZpcnR1YWxDb21wb25lbnRbXSB2Y3M0ID0gSjJFRVV0aWxzLmdldFdlYkNvbXBvbmVudHMocHJvamVjdDEpOwotCQkgIGNoZWNrVmlydHVhbENvbXBvbmVudHNFeGlzdHModmNzNCk7Ci0JCSAgCi0JCSAgU3RyaW5nW10gbmFtZXMgPSBKMkVFVXRpbHMuZ2V0V2ViQ29tcG9uZW50TmFtZXMocHJvamVjdDIpOwotCQkgIHByaW50TmFtZVN0cmluZ3MobmFtZXMpOwotCQkgIAotCQkgIFN0cmluZ1tdIG5hbWVzMiA9IEoyRUVVdGlscy50b0NvbXBvbmVudE5hbWVzQXJyYXkoSjJFRVV0aWxzLmdldENvbXBvbmVudHNCeVR5cGUocHJvamVjdDEsIEoyRUVVdGlscy5XRUIgfCBKMkVFVXRpbHMuRUpCKSk7Ci0JCSAgcHJpbnROYW1lU3RyaW5ncyhuYW1lczIpOwotCQkgIAotCQkgIElQcm9qZWN0W10gcHJvamVjdHMgPSBKMkVFVXRpbHMuZ2V0QWxsRmxleGlibGVQcm9qZWN0cygpOwotCQkgIGZvciAoaW50IGk9MDtpPHByb2plY3RzLmxlbmd0aDtpKyspewotCQkJICBTeXN0ZW0ub3V0LnByaW50bG4oIkZsZXggcHJvamVjdCAiK2krIiA9ICIrcHJvamVjdHNbaV0pOwotCQkgIH0KLQkJICAKLQkJICBTeXN0ZW0ub3V0LnByaW50bG4oIjwgRU5EOiB0ZXN0Q29tcG9uZW50R2V0dGVyTWV0aG9kcyAuLi4iKTsKLQkgIH0KLQkgIAotCSAgcHJpdmF0ZSB2b2lkIGNoZWNrVmlydHVhbENvbXBvbmVudHNFeGlzdHMoSVZpcnR1YWxDb21wb25lbnRbXSB2Y3MpewotCQkgIGZvciAoaW50IGk9MDsgaTx2Y3MubGVuZ3RoO2krKyl7Ci0JCQkgIElWaXJ0dWFsQ29tcG9uZW50IHZjID0gdmNzW2ldOwotCQkJICBTeXN0ZW0ub3V0LnByaW50bG4oIlZDOiBQcm9qZWN0ID0gIit2Yy5nZXRQcm9qZWN0KCkrIiBOYW1lID0gIit2Yy5nZXROYW1lKCkpOwotCQkJICBhc3NlcnRUcnVlKHZjLmV4aXN0cygpKTsKLQkJCSAgCi0JCSAgfQotCSAgfQotCSAgCi0JICBwcml2YXRlIHZvaWQgcHJpbnROYW1lU3RyaW5ncyhTdHJpbmdbXSBuYW1lcyl7Ci0JCSAgZm9yIChpbnQgaT0wO2k8bmFtZXMubGVuZ3RoO2krKyl7Ci0JCQkgIFN5c3RlbS5vdXQucHJpbnRsbigiTmFtZSIraSsiID0gIituYW1lc1tpXSk7Ci0JCSAgfQotCSAgfQotCSAgCi0gICAgICBwdWJsaWMgdm9pZCBkdGVzdEFzc29jaWF0ZUNvbXBvbmVudENvbW1hbmQoKXsKLSAgICAgICAgCi0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPCBCRUdJTjogdGVzdEFzc29jaWF0ZUNvbXBvbmVudENvbW1hbmQgLi4uIik7Ci0gICAgICAgIAotICAgICAgICBBc3NvY2lhdGVNb2R1bGVXaXRoRUFSQ29tbWFuZCBhbXdlID0gbmV3IEFzc29jaWF0ZU1vZHVsZVdpdGhFQVJDb21tYW5kKCk7Ci0gICAgICAgIGFtd2Uuc2V0RWFyKGVhckNvbXBOYW1lKTsKLSAgICAgICAgYW13ZS5zZXRFQVJQcm9qZWN0KHByb2plY3ROYW1lKTsKLSAgICAgICAgYW13ZS5zZXRNb2R1bGUoY29tcDEpOwotICAgICAgICBhbXdlLnNldFByb2plY3QocHJvamVjdE5hbWUpOwotICAgICAgICBhbXdlLmV4ZWN1dGUobnVsbCwgbnVsbCk7Ci0gICAgICAgIAotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjwgRU5EOiB0ZXN0QXNzb2NpYXRlQ29tcG9uZW50Q29tbWFuZCAuLi4iKTsgICAgIAotICAgICAgfQotICAgIAotCSAgcHVibGljIHZvaWQgZHRlc3RSZWZlcmVuY2luZ0dldHRlck1ldGhvZHMoKXsKLQkJICAKLQkJICBTeXN0ZW0ub3V0LnByaW50bG4oIjwgQkVHSU46IHRlc3RSZWZlcmVuY2luZ0dldHRlck1ldGhvZHMgLi4uIik7Ci0JCSAgCi0JCSAgU3lzdGVtLm91dC5wcmludGxuKCJpc0NvbXBvbmVudEFzc29jaWF0ZWQgLi4iKTsKLQkJICBKMkVFVXRpbHMuaXNDb21wb25lbnRBc3NvY2lhdGVkKHByb2plY3QxLCBwcm9qZWN0MSk7Ci0JCQotCQkgIFN0cmluZ1tdIG5hbWVzID0gSjJFRVV0aWxzLnRvQ29tcG9uZW50TmFtZXNBcnJheShKMkVFVXRpbHMuZ2V0UmVmZXJlbmNpbmdFQVJDb21wb25lbnRzKHByb2plY3QxKSk7Ci0JCSAgcHJpbnROYW1lU3RyaW5ncyhuYW1lcyk7Ci0JCSAgU3RyaW5nW10gbmFtZXMyID0gSjJFRVV0aWxzLnRvQ29tcG9uZW50TmFtZXNBcnJheShKMkVFVXRpbHMuZ2V0UmVmZXJlbmNpbmdFQVJDb21wb25lbnRzKHByb2plY3QyKSk7Ci0JCSAgcHJpbnROYW1lU3RyaW5ncyhuYW1lczIpOwotCQkgIAotCQkgIFN0cmluZ1tdIG5hbWVzMyA9IEoyRUVVdGlscy50b0NvbXBvbmVudE5hbWVzQXJyYXkoSjJFRVV0aWxzLmdldFJlZmVyZW5jaW5nV2ViQ29tcG9uZW50c0Zyb21FQVIocHJvamVjdDEpKTsKLQkJICBwcmludE5hbWVTdHJpbmdzKG5hbWVzMyk7Ci0JCSAgCi0JCSAgU3lzdGVtLm91dC5wcmludGxuKCI8IEVORDogdGVzdFJlZmVyZW5jaW5nR2V0dGVyTWV0aG9kcyAuLi4iKTsKLQkgIH0KLQkgIAotCSAgcHVibGljIHZvaWQgZHRlc3RJc0NvbXBvbmVudE1ldGhvZHMoKXsKLQkJCi0JCSAgU3lzdGVtLm91dC5wcmludGxuKCI8IEJFR0lOOiB0ZXN0SXNDb21wb25lbnRNZXRob2RzIC4uLiIpOwotCQkgIAotCQkgIC8vYXNzZXJ0RmFsc2UoSjJFRVV0aWxzLmlzRUpCMjBDb21wb25lbnQoZWpiUHJvamVjdCwgZWpiQ29tcG9uZW50TmFtZSkpOwotCQkgIGFzc2VydFRydWUoSjJFRVV0aWxzLmlzRUpCMjBDb21wb25lbnQoZWpiUHJvamVjdCkpOwotCQkgIAotCQkgIFN5c3RlbS5vdXQucHJpbnRsbigiPCBFTkQ6IHRlc3RJc0NvbXBvbmVudE1ldGhvZHMgLi4uIik7Ci0JICB9Ci0JICAKLQotCSAgCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L0xhdW5jaFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvTGF1bmNoVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzJmNmFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvTGF1bmNoVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudW5pdHRlc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBsYXRmb3JtUnVubmFibGU7Ci0KLS8qKgotICogTWluaW1hbCBhcHAgdG8gcnVuIGFzIEVjbGlwc2UgImFwcGxpY2F0aW9uIgotICovCi1wdWJsaWMgY2xhc3MgTGF1bmNoVGVzdCBpbXBsZW1lbnRzIElQbGF0Zm9ybVJ1bm5hYmxlCi17Ci0gIC8qKgotICAgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGxhdGZvcm1SdW5uYWJsZSNydW4oT2JqZWN0KQotICAgKi8KLSAgcHVibGljIE9iamVjdCBydW4oT2JqZWN0IGFyZ3MpIHRocm93cyBFeGNlcHRpb24KLSAgewotCi0gICAgT2JqZWN0IHJlc3VsdCA9IG5ldyBBbGxXU0pVbml0VGVzdHMoKS5ydW5NYWluKGFyZ3MpOwotCi0gICAgaWYgKHJlc3VsdCAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBUaHJvd2FibGUpCi0gICAgICB7Ci0gICAgICAgICgoVGhyb3dhYmxlKSByZXN1bHQpLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRlc3RzIGRpZG4ndCByZXR1cm4gJ29rJyIpOwotICAgICAgfQotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIElQbGF0Zm9ybVJ1bm5hYmxlLkVYSVRfT0s7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvUmVzb3VyY2VVdGlsc1Rlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L1Jlc291cmNlVXRpbHNUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OWI4ZWYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvUmVzb3VyY2VVdGlsc1Rlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudW5pdHRlc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5SZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsLkpVbml0VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbnRleHQuUGVyc2lzdGVudFJlc291cmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5FY2xpcHNlRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLmVjbGlwc2UuRWNsaXBzZVN0YXR1c0hhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLkNvbXBvbmVudENvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnRjb3JlLmludGVybmFsLnV0aWwuSU1vZHVsZUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUucmVzb3VyY2VzLklWaXJ0dWFsQ29tcG9uZW50OwotCi0vKioKLSAqIEpVbml0IHRlc3RzIGZvciBzZWxlY3RpdmUgUmVzb3VyY2VVdGlscyBtZXRob2RzLiAgQ2FsbHMgd2hpY2ggcmV0dXJuIGEgc2ltcGxlIFN0cmluZyBvciByZWx5IG9uIGEgSVJlc291cmNlCi0gKiBBUEkgbmVlZCBub3QgYmUgdGVzdGVkLiAgVGhlIGZvY3VzIGlzIG1haW5seSB0byBleGVyY2lzZSBDb21wb25lbnQgYW5kIEZsZXhpYmxlIHByb2plY3QgQVBJcy4gCi0gKiAKLSAqLwotcHVibGljIGNsYXNzIFJlc291cmNlVXRpbHNUZXN0cyBleHRlbmRzIFRlc3RDYXNlIGltcGxlbWVudHMgV1NKVW5pdENvbnN0YW50c3sKLQotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCl7Ci0JCXJldHVybiBuZXcgVGVzdFN1aXRlKFJlc291cmNlVXRpbHNUZXN0cy5jbGFzcyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RDb21wb25lbnRUeXBlKCl7Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QocHJvamVjdE5hbWUpOwotCQlTdHJpbmcgY29tcG9uZW50VHlwZSA9IFJlc291cmNlVXRpbHMuZ2V0Q29tcG9uZW50VHlwZShwcm9qZWN0KTsKLQkJYXNzZXJ0RXF1YWxzKElNb2R1bGVDb25zdGFudHMuSlNUX1dFQl9NT0RVTEUsIGNvbXBvbmVudFR5cGUpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Q29tcG9uZW50T2YoKXsKLQkJSVByb2plY3QgcHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSk7Ci0gICAgICAgIElQYXRoIGRlc3RQYXRoID0gUmVzb3VyY2VVdGlscy5nZXRKYXZhU291cmNlTG9jYXRpb24ocHJvamVjdCk7Ci0gICAgICAgIElGb2xkZXIgZm9sZGVyID0gKElGb2xkZXIpUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2UoZGVzdFBhdGgpOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgUGVyc2lzdGVudFJlc291cmNlQ29udGV4dCAgcmVzb3VyY2VDb250ZXh0ID0gUGVyc2lzdGVudFJlc291cmNlQ29udGV4dC5nZXRJbnN0YW5jZSgpOwotICAgICAgICAgICAgRWNsaXBzZVN0YXR1c0hhbmRsZXIgICAgICAgaGFuZGxlciAgICAgICAgID0gbmV3IEVjbGlwc2VTdGF0dXNIYW5kbGVyKCk7Ci0gICAgICAgICAgICBFY2xpcHNlRW52aXJvbm1lbnQgICAgICAgICBlbnYgICAgID0gbmV3IEVjbGlwc2VFbnZpcm9ubWVudCggbnVsbCwgcmVzb3VyY2VDb250ZXh0LCBoYW5kbGVyICk7Ci0KLSAgICAgICAgICAgIElGaWxlIGZpbGUgPSBmb2xkZXIuZ2V0RmlsZShuZXcgUGF0aCgiZm9vL0VjaG8uamF2YSIpKTsKLSAgICAgICAgICAgIGlmICghZmlsZS5leGlzdHMoKSkgewotICAgICAgICAgICAgICBKVW5pdFV0aWxzLmNvcHlUZXN0RGF0YSgiQlVKYXZhL3NyYyIsIGZvbGRlciwgZW52LCBudWxsICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleCl7Ci0gICAgICAgIAlleC5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgfQotCi0gICAgICAgIElQYXRoIGphdmFGaWxlUGF0aCA9IGZvbGRlci5nZXRGaWxlKG5ldyBQYXRoKCJmb28vRWNoby5qYXZhIikpLmdldEZ1bGxQYXRoKCk7Ci0gICAgICAgIElWaXJ0dWFsQ29tcG9uZW50IHZjID0gUmVzb3VyY2VVdGlscy5nZXRDb21wb25lbnRPZihqYXZhRmlsZVBhdGgpOwotICAgICAgICBhc3NlcnRUcnVlKHZjLmV4aXN0cygpKTsKLSAgICAgICAgCi0JCQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0SmF2YVNvdXJjZUxvY2F0aW9uKCl7Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QocHJvamVjdE5hbWUpOwotCQlTdHJpbmcgamF2YVNvdXJjZUxvYyA9IFJlc291cmNlVXRpbHMuZ2V0SmF2YVNvdXJjZUxvY2F0aW9uKHByb2plY3QpLnRvU3RyaW5nKCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiSmF2YSBzb3VyY2UgbG9jYXRpb24gPSAiK2phdmFTb3VyY2VMb2MpOwotCQlhc3NlcnRUcnVlKGphdmFTb3VyY2VMb2MuZW5kc1dpdGgoInNyYyIpKTsKLQkJCi0JCS8vIGdldCBhbGwgdGhlIEphdmFTb3VyY2VMb2NhdGlvbnMgdmlhIHRoZSBWaXJ0dWFsQ29tcG9uZW50Ci0JCUlWaXJ0dWFsQ29tcG9uZW50IHZjMSA9IENvbXBvbmVudENvcmUuY3JlYXRlQ29tcG9uZW50KHByb2plY3QpOwotCQlJVmlydHVhbENvbXBvbmVudCB2YzIgPSBDb21wb25lbnRDb3JlLmNyZWF0ZUNvbXBvbmVudChwcm9qZWN0KTsKLQkJSVZpcnR1YWxDb21wb25lbnRbXSB2Y3MgPSBuZXcgSVZpcnR1YWxDb21wb25lbnRbXXt2YzEsIHZjMn07Ci0JCUlQYXRoW10gcGF0aHMgPSBSZXNvdXJjZVV0aWxzLmdldEFsbEphdmFTb3VyY2VMb2NhdGlvbnModmNzKTsKLQkJCi0JCS8vIHZlcmlmeSBmaXJzdCBmb2xkZXIgZXhpc3RzCi0JCUlQYXRoIHBhdGgxID0gKElQYXRoKXBhdGhzWzBdOwotCQlJUmVzb3VyY2UgcmVzb3VyY2UgID0gUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2UocGF0aDEpOwotCQlpZiAocmVzb3VyY2UuZXhpc3RzKCkpewotCQkJYXNzZXJ0RXF1YWxzKElSZXNvdXJjZS5GT0xERVIsIHJlc291cmNlLmdldFR5cGUoKSk7Ci0JCX0KLQotCQkvLyB2ZXJpZnkgc2Vjb25kIGZvbGRlciBleGlzdHMKLQkJSVBhdGggcGF0aDIgPSAoSVBhdGgpcGF0aHNbMV07Ci0JCUlSZXNvdXJjZSByZXNvdXJjZTIgID0gUmVzb3VyY2VVdGlscy5maW5kUmVzb3VyY2UocGF0aDIpOwotCQlpZiAocmVzb3VyY2UyLmV4aXN0cygpKXsKLQkJCWFzc2VydEVxdWFscyhJUmVzb3VyY2UuRk9MREVSLCByZXNvdXJjZTIuZ2V0VHlwZSgpKTsKLQkJfQkJCi0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RXZWJDb21wb25lbnRTZXJ2ZXJSb290KCkgewotCQlJUHJvamVjdCBwcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLQkJSUZvbGRlciBmb2xkZXIgPSBSZXNvdXJjZVV0aWxzLmdldFdlYkNvbXBvbmVudFNlcnZlclJvb3QocHJvamVjdCk7Ci0JCWFzc2VydFRydWUoZm9sZGVyLmV4aXN0cygpKTsKLQkKLQl9Ci0JCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L1NlcnZlckNyZWF0aW9uVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvU2VydmVyQ3JlYXRpb25UZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTNkMDRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvU2VydmVyQ3JlYXRpb25UZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcxMDQgICAxMTQ4MzUgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnVuaXR0ZXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydGlvbkZhaWxlZEVycm9yOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uLkNyZWF0ZVNlcnZlckNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnV0aWwuSlVuaXRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuU2VydmVyQ29yZTsKLQotcHVibGljIGNsYXNzIFNlcnZlckNyZWF0aW9uVGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZSBpbXBsZW1lbnRzIFdTSlVuaXRDb25zdGFudHN7Ci0KLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpewotCQlyZXR1cm4gbmV3IFRlc3RTdWl0ZShTZXJ2ZXJDcmVhdGlvblRlc3RzLmNsYXNzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgaW5pdCgpewotCSAgICB0cnkgewotICAgICAgICAgIGFzc2VydE5vdE51bGwoU0VSVkVSX0lOU1RBTExfUEFUSCk7ICAgICAgICAgIAotCSAgICAgIEpVbml0VXRpbHMuY3JlYXRlU2VydmVyUnVudGltZShSVU5USU1FVFlQRUlEX1RDNTAsIFNFUlZFUl9JTlNUQUxMX1BBVEgpOwotCSAgICB9Ci0JICAgIGNhdGNoKEV4Y2VwdGlvbiBlKXsKLQkgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICB9IAotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlVG9tY2F0djVTZXJ2ZXIoKXsKLQkJaW5pdCgpOwotCQkKLQkJU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGluZyBUb21jYXQgdjUgc2VydmVyLiIpOwotCQlDcmVhdGVTZXJ2ZXJDb21tYW5kIGNzYyA9IG5ldyBDcmVhdGVTZXJ2ZXJDb21tYW5kKCk7Ci0JCWNzYy5zZXRTZXJ2ZXJGYWN0b3J5aWQoU0VSVkVSVFlQRUlEX1RDNTApOwotCQljc2MuZXhlY3V0ZShudWxsLCBudWxsICk7Ci0JCQotCQlJU2VydmVyIHNlcnZlciA9IG51bGw7Ci0JCVN0cmluZyBpbnN0SWQgPSBjc2MuZ2V0U2VydmVySW5zdGFuY2VJZCgpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlNlcnZlciBpbnN0YW5jZSBJZCA9ICIraW5zdElkKTsKLQkJaWYgKGluc3RJZCE9bnVsbCl7Ci0JCSAgc2VydmVyID0gU2VydmVyQ29yZS5maW5kU2VydmVyKGluc3RJZCk7Ci0JCX0KLQkJYXNzZXJ0Tm90TnVsbChzZXJ2ZXIpOwotCQkKLQkJdHJ5IHsKLQkJCXNlcnZlci5kZWxldGUoKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSl7Ci0JCQluZXcgQXNzZXJ0aW9uRmFpbGVkRXJyb3IoKTsKLQkJfQotCQkKLQkJU3lzdGVtLm91dC5wcmludGxuKCJEb25lIGNyZWF0aW5nIFRvbWNhdCB2NSBzZXJ2ZXIuIik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RSZWF0dGVtcHRDcmVhdGVUb21jYXR2NVNlcnZlcigpewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkF0dGVtcHRpbmcgdG8gY3JlYXRlIDJuZCBUb21jYXQgdjUgc2VydmVyLiIpOwotCQlDcmVhdGVTZXJ2ZXJDb21tYW5kIGNzYyA9IG5ldyBDcmVhdGVTZXJ2ZXJDb21tYW5kKCk7Ci0JCWNzYy5zZXRTZXJ2ZXJGYWN0b3J5aWQoU0VSVkVSVFlQRUlEX1RDNTApOwotCQljc2MuZXhlY3V0ZShudWxsLCBudWxsICk7Ci0JCQotCQlJU2VydmVyIHNlcnZlciA9IG51bGw7Ci0JCVN0cmluZyBpbnN0SWQgPSBjc2MuZ2V0U2VydmVySW5zdGFuY2VJZCgpOwotCQlpZiAoaW5zdElkIT1udWxsKSB7Ci0JCSAgc2VydmVyID0gU2VydmVyQ29yZS5maW5kU2VydmVyKGluc3RJZCk7Ci0JCX0KLQkJYXNzZXJ0Tm90TnVsbChzZXJ2ZXIpOwotCQkKLQkJdHJ5IHsKLQkJCXNlcnZlci5kZWxldGUoKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSl7Ci0JCQluZXcgQXNzZXJ0aW9uRmFpbGVkRXJyb3IoKTsKLQkJfQotCQkKLQkJU3lzdGVtLm91dC5wcmludGxuKCJEb25lIGF0dGVtcHRpbmcgMm5kIFRvbWNhdCB2NSBzZXJ2ZXIgY3JlYXRpb24uIik7CQkKLQl9Ci0JCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L1RESmF2YUF4aXNUQzUwLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L1RESmF2YUF4aXNUQzUwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyNmVhYzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9UREphdmFBeGlzVEM1MC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAqIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyMDA3MDEwNCAgIDExNDgzNSBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDcwNTA5ICAgMTgwNTY3IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51bml0dGVzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmplbS51dGlsLmVtZi53b3JrYmVuY2guUHJvamVjdFV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuaW50ZXJuYWwuSjJFRVZlcnNpb25Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbW1vbi5KMkVFVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1hbmQuY29tbW9uLkNyZWF0ZU1vZHVsZUNvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLmF4aXMudG9tY2F0LnY1MC5XU1dpemFyZFRvbWNhdDUwVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbC5KVW5pdFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsLlNjZW5hcmlvQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyOwotCi0vKioKLSAqIFRvcCBkb3duIHBlcmZvcm1hbmNlIHNjZW5hcmlvIHdpdGggQXhpcyBhbmQgVG9tY2F0IHY1LjAKLSAqLwotcHVibGljIGNsYXNzIFRESmF2YUF4aXNUQzUwIGV4dGVuZHMgV1NXaXphcmRUb21jYXQ1MFRlc3QgewotCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFdTX1JVTlRJTUVJRF9BWElTID0gV1NKVW5pdENvbnN0YW50cy5XU19SVU5USU1FSURfQVhJUzsKLSAgCi0gIHByaXZhdGUgU3RyaW5nIFBST0pFQ1RfTkFNRSA9IFdTSlVuaXRDb25zdGFudHMuVERfUFJPSkVDVF9OQU1FOwotICAKLSAgcHJpdmF0ZSBJRmlsZSBzb3VyY2VGaWxlXzsKLQkKLQkKLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCl7Ci0JCXJldHVybiBuZXcgVGVzdFN1aXRlKFRESmF2YUF4aXNUQzUwLmNsYXNzKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlUHJvamVjdHMoKSB0aHJvd3MgRXhjZXB0aW9uewotCSAgICBJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSk7Ci0JICAgIGlmICghd2ViUHJvamVjdC5leGlzdHMoKSl7Ci0JICAgICAgY3JlYXRlV2ViTW9kdWxlKFBST0pFQ1RfTkFNRSwgUFJPSkVDVF9OQU1FLEoyRUVWZXJzaW9uQ29uc3RhbnRzLkoyRUVfMV80X0lEKTsKLQkgICAgfQotCSAgfQotCSAgCi0JICBwcml2YXRlIHZvaWQgY3JlYXRlV2ViTW9kdWxlKFN0cmluZyBwcm9qZWN0Tm0sIFN0cmluZyBjb21wb25lbnROYW1lLCBpbnQgajJlZVZlcnNpb24pewotCi0JICAgIENyZWF0ZU1vZHVsZUNvbW1hbmQgY21jID0gbmV3IENyZWF0ZU1vZHVsZUNvbW1hbmQoKTsKLQkgICAgY21jLnNldEoyZWVMZXZlbChuZXcgSW50ZWdlcihqMmVlVmVyc2lvbikudG9TdHJpbmcoKSk7Ci0JICAgIGNtYy5zZXRNb2R1bGVOYW1lKGNvbXBvbmVudE5hbWUpOwotCSAgICBjbWMuc2V0TW9kdWxlVHlwZShDcmVhdGVNb2R1bGVDb21tYW5kLldFQik7Ci0JICAgIGNtYy5zZXRQcm9qZWN0TmFtZShwcm9qZWN0Tm0pOwotCSAgICBjbWMuc2V0U2VydmVyRmFjdG9yeUlkKFNFUlZFUlRZUEVJRF9UQzUwKTsKLQkgICAgY21jLnNldFNlcnZlckluc3RhbmNlSWQoc2VydmVyXy5nZXRJZCgpKTsKLQkgICAgY21jLmV4ZWN1dGUobnVsbCwgbnVsbCApOwotCSAgICAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJEb25lIGNyZWF0aW5nIFdlYiBQcm9qZWN0LCAiK3Byb2plY3RObSk7ICAgICAgCi0JICAgCi0JICB9ICAKLQkgIAotICAvKioKLSAgICogU2V0cyB1cCB0aGUgaW5wdXQgZGF0YTsKLSAgICogLSBjcmVhdGUgcHJvamVjdChzKSwKLSAgICogLSBjb3B5IHJlc291cmNlcyB0byB3b3Jrc3BhY2UgCi0gICAqLyAgCi0JcHJvdGVjdGVkIHZvaWQgaW5zdGFsbElucHV0RGF0YSgpIHRocm93cyBFeGNlcHRpb24gewotCi0JCUlQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoUFJPSkVDVF9OQU1FKTsJCQotCQlJRm9sZGVyIGRlc3RGb2xkZXIgPSAoSUZvbGRlcilKMkVFVXRpbHMuZ2V0V2ViQ29udGVudENvbnRhaW5lcih3ZWJQcm9qZWN0KTsKLQkJSlVuaXRVdGlscy5jb3B5VGVzdERhdGEoIlRESmF2YSIsZGVzdEZvbGRlcixlbnZfLCBudWxsKTsKLQkJc291cmNlRmlsZV8gPSBkZXN0Rm9sZGVyLmdldEZpbGUobmV3IFBhdGgoIkVjaG8ud3NkbCIpKTsKLQkJSlVuaXRVdGlscy5zeW5jQnVpbGRQcm9qZWN0KHdlYlByb2plY3QsZW52XywgbnVsbCk7Ci0JfQotCi0gIC8qKgotICAgKiBTZXQgdGhlIHBlcnNpc3RlbnQgc2VydmVyIHJ1bnRpbWUgY29udGV4dCBwcmVmZXJlbmNlcwotICAgKi8gIAotCXByb3RlY3RlZCB2b2lkIGluaXRKMkVFV1NSdW50aW1lU2VydmVyRGVmYXVsdHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gU2V0IGRlZmF1bHQgcHJlZmVyZW5jZXMgZm9yIEF4aXMgYW5kIFRvbWNhdCB2NS4wIHNlcnZlcgotCQlKVW5pdFV0aWxzLnNldFdTUnVudGltZVNlcnZlcihXU19SVU5USU1FSURfQVhJUywgU0VSVkVSVFlQRUlEX1RDNTApOwkJCi0JfQotCi0gIC8qKgotICAgKiBTZXQgdGhlIGluaXRpYWwgc2VsZWN0aW9uCi0gICAqLyAgCi0JcHJvdGVjdGVkIHZvaWQgaW5pdEluaXRpYWxTZWxlY3Rpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJaW5pdGlhbFNlbGVjdGlvbl8gPSBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihzb3VyY2VGaWxlXyk7Ci0KLQl9Ci0KLSAgLyoqCi0gICAqIExhdW5jaGVzIHRoZSBwb3AtdXAgY29tbWFuZCB0byBpbml0aWF0ZSB0aGUgc2NlbmFyaW8KLSAgICogQHRocm93cyBFeGNlcHRpb24KLSAgICovICAKLQlwdWJsaWMgdm9pZCB0ZXN0VERKYXZhQXhpc1RDNTAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkgIAotCSAgSVN0YXR1c1tdIHN0YXR1cyA9IEpVbml0VXRpbHMubGF1bmNoQ3JlYXRpb25XaXphcmQoU2NlbmFyaW9Db25zdGFudHMuV0laQVJESURfVE9QX0RPV04sU2NlbmFyaW9Db25zdGFudHMuT0JKRUNUX0NMQVNTX0lEX0lGSUxFLGluaXRpYWxTZWxlY3Rpb25fKTsKLQkgIHZlcmlmeU91dHB1dChzdGF0dXMpOwotCi0JfQotCi0gIC8qKgotICAgKiBWZXJpZnkgdGhlIHNjZW5hcmlvIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkKLSAgICogQHRocm93cyBFeGNlcHRpb24KLSAgICovCi0JcHJpdmF0ZSBmaW5hbCB2b2lkIHZlcmlmeU91dHB1dChJU3RhdHVzW10gc3RhdHVzKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotICAgICAgICBJUHJvamVjdCB3ZWJQcm9qZWN0ID0gUHJvamVjdFV0aWxpdGllcy5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSk7ICAgIAotICAgICAgICBJRm9sZGVyIHdlYkNvbnRlbnRGb2xkZXIgPSAoSUZvbGRlcilKMkVFVXRpbHMuZ2V0V2ViQ29udGVudENvbnRhaW5lcih3ZWJQcm9qZWN0KTsgICAgCi0gICAgCi0JCQotCQlJRm9sZGVyIHdzZGxGb2xkZXIgPSB3ZWJDb250ZW50Rm9sZGVyLmdldEZvbGRlcigid3NkbCIpOwotCQlhc3NlcnRUcnVlKHdzZGxGb2xkZXIuZXhpc3RzKCkpOwotCQlhc3NlcnRUcnVlKHdzZGxGb2xkZXIubWVtYmVycygpLmxlbmd0aCA+IDApOwotCi0JCS8vIENoZWNrIHN0YXR1cyBoYW5kbGVyIGZvciBlcnJvcnMKLQkJQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXIgc3RhdHVzSGFuZGxlciA9IG5ldyBBY2N1bXVsYXRlU3RhdHVzSGFuZGxlcihzdGF0dXMpOwotCQlJU3RhdHVzW10gcyA9IHN0YXR1c0hhbmRsZXIuZ2V0RXJyb3JSZXBvcnRzKCk7Ci0JCS8vCi0JCWlmIChzLmxlbmd0aCA+IDApewotCQkJZm9yIChpbnQgaT0wO2k8cy5sZW5ndGg7aSsrKXsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIG1lc3NhZ2UgZm9yIHJlcG9ydCAjIitpKyI6ICIrc1tpXS5nZXRNZXNzYWdlKCkpOwotCQkJfQotCQl9IAotCQlhc3NlcnRUcnVlKHMubGVuZ3RoID09IDApOwotCQkKLQl9Ci0JCi0gIC8qKgotICAgKiBDbGVhciB3b3Jrc3BhY2UgaWYgcmVxdWlyZWQKLSAgICovCi0JcHJvdGVjdGVkIHZvaWQgZGVsZXRlSW5wdXREYXRhKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIERlbGV0ZSB0aGUgV2ViIHByb2plY3QuCi0JCUlQcm9qZWN0IHdlYlByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QoUFJPSkVDVF9OQU1FKTsKLQkJd2ViUHJvamVjdC5kZWxldGUodHJ1ZSx0cnVlLG51bGwpOwotCQkKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdW5pdHRlc3QvV1NKVW5pdENvbnN0YW50cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9XU0pVbml0Q29uc3RhbnRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhZDlmNGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9XU0pVbml0Q29uc3RhbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwNzA1ICAxOTU1NTMgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1ICAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnVuaXR0ZXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci0KLQotcHVibGljIGludGVyZmFjZSBXU0pVbml0Q29uc3RhbnRzIHsKLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgU0VSVkVSX0lOU1RBTExfUEFUSCA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNTAiKTsKLSAgcHVibGljIGZpbmFsIFN0cmluZyBSVU5USU1FVFlQRUlEX1RDNTAgPSAib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQucnVudGltZS41MCI7Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBXU19SVU5USU1FSURfQVhJUyA9ICJvcmcuZWNsaXBzZS5qc3Qud3MucnVudGltZS5heGlzMTEiOwotICBwdWJsaWMgZmluYWwgU3RyaW5nIFdTX1JVTlRJTUVJRF9BWElTMiA9ICJvcmcuZWNsaXBzZS5qc3Qud3MucnVudGltZS5heGlzMiI7Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIFdTX0FYSVMyX1JVTlRJTUUgPSAib3JnLmVjbGlwc2UuanN0LndzLmF4aXMyLmNyZWF0aW9uLmF4aXMyV2ViU2VydmljZVJUIjsKLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgU0VSVkVSVFlQRUlEX1RDNTAgPSAib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNTAiOwotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyB3ZWJQcm9qZWN0TmFtZSA9ICJXZWJQcm9qZWN0IjsKLSAgCi0gIC8vIGZsZXhpYmxlIHByb2plY3Qgc3RydWN0dXJlIDEKLSAgcHVibGljIGZpbmFsIFN0cmluZyBwcm9qZWN0TmFtZSA9ICJGbGV4UHJvamVjdCI7Ci0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgd2ViQ29tcG9uZW50TmFtZSA9ICJ3ZWJDb21wb25lbnQiOwotICBwdWJsaWMgZmluYWwgU3RyaW5nIHdlYkNvbXBvbmVudDJOYW1lID0gIndlYkNvbXAyIjsKLQotICAvLyBmbGV4aWJsZSBwcm9qZWN0IHN0cnVjdHVyZSAyCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgcHJvamVjdDJOYW1lID0gIkZsZXhQcm9qZWN0MiI7Ci0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgd2ViQ29tcDNOYW1lID0gIndlYkNvbXAzIjsKLSAgcHVibGljIGZpbmFsIFN0cmluZyB3ZWJDb21wNE5hbWUgPSAid2ViQ29tcDQiOwotICAgIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIGVqYlByb2plY3ROYW1lID0gIkZsZXhFSkJQcm9qZWN0IjsKLSAgcHVibGljIGZpbmFsIFN0cmluZyBlamJDb21wb25lbnROYW1lID0gImVqYkNvbXBvbmVudCI7Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBhcHBDbGllbnRQcm9qZWN0TmFtZSA9ICJGbGV4QXBwQ2xpZW50UHJvamVjdCI7Ci0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgYXBwQ2xpZW50Q29tcE5hbWUgPSAiYXBwQ2xpZW50Q29tcG9uZW50IjsgIAotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBlYXJDb21wTmFtZSA9ICJFQVJDb21wb25lbnQiOwotICAKLSAgcHVibGljIGZpbmFsIFBhdGggemlwRmlsZVBhdGggPSBuZXcgUGF0aCgiL2RhdGEvV1NUZXN0UHJvamVjdHMuemlwIik7Ci0gIHB1YmxpYyBmaW5hbCBTdHJpbmdbXSBwcm9qZWN0TmFtZXMgPSBuZXcgU3RyaW5nW117cHJvamVjdE5hbWUsIHByb2plY3QyTmFtZX07Ci0gIAotICAvLyBwZXJmb3JtYW5jZSBjb25zdGFudHMKLSAgcHVibGljIGZpbmFsIFN0cmluZyBCVV9QUk9KRUNUX05BTUUgPSAiVGVzdFdlYiI7Ci0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgVERfUFJPSkVDVF9OQU1FID0gIlRlc3RURFByb2plY3QiOwotICBwdWJsaWMgZmluYWwgU3RyaW5nIENMSUVOVF9QUk9KRUNUX05BTUUgPSAiVGVzdFdlYkNsaWVudCI7Ci0gIAotICBwdWJsaWMgZmluYWwgUGF0aCBwZXJmX3ppcEZpbGVQYXRoID0gbmV3IFBhdGgoIi9kYXRhL1dTUGVyZlByb2plY3RzLnppcCIpOwotICBwdWJsaWMgZmluYWwgU3RyaW5nW10gcGVyZl9wcm9qZWN0TmFtZXMgPSBuZXcgU3RyaW5nW117QlVfUFJPSkVDVF9OQU1FLCBURF9QUk9KRUNUX05BTUUsIENMSUVOVF9QUk9KRUNUX05BTUV9OwotIAotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91bml0dGVzdC9XZWJTZXJ2aWNlUnVudGltZVRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L1dlYlNlcnZpY2VSdW50aW1lVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDNhYzA0Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3VuaXR0ZXN0L1dlYlNlcnZpY2VSdW50aW1lVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNjA1MTggICAxMjcxODkgcnNpbmhhQGNhLmlibS5jb20gLSBSdXBhbSBLdWVobmVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnVuaXR0ZXN0OwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5qcmVzLkpSRXNVcGRhdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSVZNSW5zdGFsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLklWTUluc3RhbGwyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSVZNSW5zdGFsbFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KYXZhUnVudGltZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLlZNU3RhbmRpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuaW50ZXJuYWwuSjJFRVZlcnNpb25Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUuaW50ZXJuYWwucGx1Z2luLklKMkVFTW9kdWxlQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS5GYWNldFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuY29yZS5pbnRlcm5hbC5JVG9tY2F0UnVudGltZVdvcmtpbmdDb3B5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5DcmVhdGVGYWNldGVkUHJvamVjdENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmNvbW1vbi5GYWNldFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tb24uUmVxdWlyZWRGYWNldFZlcnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLmRhdGFtb2RlbC52YWxpZGF0ZS5WYWxpZGF0aW9uTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29uc3VtcHRpb24udWkud3NydC5GYWNldE1hdGNoQ2FjaGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndzcnQuV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuSUZhY2V0ZWRQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLklGYWNldGVkUHJvamVjdFRlbXBsYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLklQcm9qZWN0RmFjZXRWZXJzaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLlByb2plY3RGYWNldHNNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JUnVudGltZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVJ1bnRpbWVUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5JUnVudGltZVdvcmtpbmdDb3B5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZS5TZXJ2ZXJDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VTY2VuYXJpbzsKLQotLyoqCi0gKiBXZWJTZXJ2aWNlUnVudGltZVRlc3RzIGNvbnRhaW5zIHRoZSBKVW5pdCB0ZXN0cyB3aGljaCBjb3ZlciBwcm9qZWN0Ci0gKiBjcmVhdGlvbiwgcHJvamVjdCBmaWx0ZXJpbmcsIGFuZCBwcm9qZWN0IHR5cGUgZmlsdGVyaW5nIGZvciB0aGUgQXhpcwotICogV2ViIHNlcnZpY2UgcnVudGltZS4gSW4gb3JkZXIgZm9yIHRoZSB0ZXN0IHRvIHJ1biBzdWNjZXNzZnVsbHk6Ci0gKiA8b2w+Ci0gKiA8bGk+VGhlIEVjbGlwc2UgdGVzdCBlbnZpcm9ubWVudCBtdXN0IGJlIGxhdW5jaGVkIHdpdGggSkRLMS40LjI8L2xpPgotICogPGxpPlRoZSBmb2xsb3dpbmcgVk0gYXJndW1lbnRzIG11c3QgYmUgc3BlY2lmaWVkOgotICogPHVsPgotICogICA8bGk+b3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNTU6IHRoZSBpbnN0YWxsIGxvY2F0aW9uIG9mIGEgVG9tY2F0IDUuNSBzZXJ2ZXIsPGJyPiAKLSAqICAgZm9yIGV4YW1wbGUsIHVzZSAtRG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjU1PWQ6XGpha2FydGEtdG9tY2F0LTUuNS45Ci0gKiAgIDxsaT5vcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41MDogdGhlIGluc3RhbGwgbG9jYXRpb24gb2YgYSBUb21jYXQgNS4wIHNlcnZlciw8YnI+Ci0gKiAgIGZvciBleGFtcGxlLCB1c2UgLURvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41MD1kOlxqYWthcnRhLXRvbWNhdC01LjAuMjggICAKLSAqICAgPGxpPm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjQxOiB0aGUgaW5zdGFsbCBsb2NhdGlvbiBvZiBhIFRvbWNhdCA0LjEgc2VydmVyLDxicj4KLSAqICAgZm9yIGV4YW1wbGUsIHVzZSAtRG9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjQxPWQ6XGpha2FydGEtdG9tY2F0LTQuMS4yOQotICogICA8bGk+amF2YS4xNS5pbnN0YWxsLnBhdGg6IHRoZSBpbnN0YWxsIGxvY2F0aW9uIG9mIGEgSmF2YSAxLjUgSkRLLDxicj4KLSAqICAgZm9yIGV4YW1wbGUsIHVzZSAtRGphdmEuMTUuaW5zdGFsbC5wYXRoPWQ6XGpkazEuNS4wXzAyCi0gKiA8L3VsPjwvbGk+Ci0gKiA8L29sPgotICogCi0gKiAKLSAqLwotcHVibGljIGNsYXNzIFdlYlNlcnZpY2VSdW50aW1lVGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZQotewotICAKLSAgLy9TZXJ2ZXIgaW5zdGFsbCBwYXRocwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBTRVJWRVJfSU5TVEFMTF9QQVRIX1RDNTUgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoIm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjU1Iik7ICAKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgU0VSVkVSX0lOU1RBTExfUEFUSF9UQzUwID0gU3lzdGVtLmdldFByb3BlcnR5KCJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41MCIpOyAgCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFNFUlZFUl9JTlNUQUxMX1BBVEhfVEM0MSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNDEiKTsKLSAgCi0gIC8vSkRLIDEuNSBpbnN0YWxsIGluZm8KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSkFWQTE1X1ZNX0lOU1RBTExfUEFUSCA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgiamF2YS4xNS5pbnN0YWxsLnBhdGgiKTsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSkFWQTE1X1ZNX0lOU1RBTExfVFlQRSA9ICJvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBKQVZBMTVfVk1fSU5TVEFMTF9OQU1FID0gIkphdmExNSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEpBVkExNV9WTV9JTlNUQUxMX0pBVkFET0MgPSAiaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNS4wL2RvY3MvYXBpLyI7Ci0gIAotICAvL1J1bnRpbWUgdHlwZSBpZHMgYW5zIHNlcnZlciB0eXBlIGlkcwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBSVU5USU1FVFlQRUlEX1RDNTUgPSAib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQucnVudGltZS41NSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFNFUlZFUlRZUEVJRF9UQzU1ID0gIm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjU1IjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgUlVOVElNRVRZUEVJRF9UQzUwID0gIm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnJ1bnRpbWUuNTAiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBTRVJWRVJUWVBFSURfVEM1MCA9ICJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41MCI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFJVTlRJTUVUWVBFSURfVEM0MSA9ICJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5ydW50aW1lLjQxIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgU0VSVkVSVFlQRUlEX1RDNDEgPSAib3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNDEiOyAgCi0gIAotICAvL1J1bnRpbWUgaWRzIGZvciBydW50aW1lcyB0aGF0IHdpbGwgYmUgY3JlYXRlZAotICBwcml2YXRlIGZpbmFsIFN0cmluZyBSVU5USU1FSURfVEM1NSA9ICJUb21jYXQ1NVJ1bnRpbWUiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBSVU5USU1FSURfVEM1MCA9ICJUb21jYXQ1MFJ1bnRpbWUiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBSVU5USU1FSURfVEM0MSA9ICJUb21jYXQ0MVJ1bnRpbWUiOwotICAKLSAgLy9XZWIgc2VydmljZSBydW50aW1lIGV4dGVuc2lvbiBpZHMgZm9yIEF4aXMKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgQVhJU19SVU5USU1FID0gIm9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNyZWF0aW9uLmF4aXNXZWJTZXJ2aWNlUlQiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBTRVJWSUNFX0lNUExfSkFWQSA9ICJvcmcuZWNsaXBzZS5qc3Qud3Mud3NJbXBsLmphdmEiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBBWElTX1NFUlZJQ0VfUlVOVElNRSA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jcmVhdGlvbi5qYXZhIjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgQ0xJRU5UX0lNUExfSkFWQSA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuY2xpZW50LnR5cGUuamF2YSI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEFYSVNfQ0xJRU5UX1JVTlRJTUVfV0VCID0gIm9yZy5lY2xpcHNlLmpzdC53cy5heGlzLmNvbnN1bXB0aW9uLndlYiI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIEFYSVNfQ0xJRU5UX1JVTlRJTUVfSkFWQSA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuYXhpcy5jb25zdW1wdGlvbi5qYXZhIjsKLSAgCi0gIC8vVmFyaW91cyBjb25zdGFudHMgdXNlZCBieSB0aGUgdGVzdCBjYXNlIGZvciBpZGVudGlmeWluZyBzZXJ2aWNlL2NsaWVudCBzaWRlIGFuZCAKLSAgLy9mb3Igc2V0dGluZyBuYW1lcyBvbiBjcmVhdGVkIHByb2plY3RzLgotICBwcml2YXRlIGZpbmFsIFN0cmluZyBTRVJWSUNFX1NJREUgPSAicyI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIENMSUVOVF9TSURFID0gImMiOyAgCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIFBST0pFQ1RfTkFNRV9QUkVGSVggPSAidGMiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBQUk9KRUNUX05BTUVfU1VGRklYID0gInByb2plY3QiOwotICAKLSAgLy9JUHJvamVjdEZhY2V0VmVyc2lvbnMgdXNlZCBpbiB0aGUgZXhwZWN0ZWQgcmVzdWx0cwotICBwcml2YXRlIGZpbmFsIElQcm9qZWN0RmFjZXRWZXJzaW9uIFdFQjIzID0gUHJvamVjdEZhY2V0c01hbmFnZXIuZ2V0UHJvamVjdEZhY2V0KElKMkVFTW9kdWxlQ29uc3RhbnRzLkpTVF9XRUJfTU9EVUxFKS5nZXRWZXJzaW9uKEoyRUVWZXJzaW9uQ29uc3RhbnRzLlZFUlNJT05fMl8zX1RFWFQpOwotICBwcml2YXRlIGZpbmFsIElQcm9qZWN0RmFjZXRWZXJzaW9uIFdFQjI0ID0gUHJvamVjdEZhY2V0c01hbmFnZXIuZ2V0UHJvamVjdEZhY2V0KElKMkVFTW9kdWxlQ29uc3RhbnRzLkpTVF9XRUJfTU9EVUxFKS5nZXRWZXJzaW9uKEoyRUVWZXJzaW9uQ29uc3RhbnRzLlZFUlNJT05fMl80X1RFWFQpOwotICBwcml2YXRlIGZpbmFsIElQcm9qZWN0RmFjZXRWZXJzaW9uIEpBVkExNCA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmdldFByb2plY3RGYWNldChJSjJFRU1vZHVsZUNvbnN0YW50cy5KU1RfSkFWQSkuZ2V0VmVyc2lvbihKMkVFVmVyc2lvbkNvbnN0YW50cy5WRVJTSU9OXzFfNF9URVhUKTsKLSAgcHJpdmF0ZSBmaW5hbCBJUHJvamVjdEZhY2V0VmVyc2lvbiBKQVZBNTAgPSBQcm9qZWN0RmFjZXRzTWFuYWdlci5nZXRQcm9qZWN0RmFjZXQoSUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX0pBVkEpLmdldFZlcnNpb24oIjUuMCIpOwotICBwcml2YXRlIGZpbmFsIElQcm9qZWN0RmFjZXRWZXJzaW9uIFVUSUxJVFkxMCA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmdldFByb2plY3RGYWNldChJSjJFRU1vZHVsZUNvbnN0YW50cy5KU1RfVVRJTElUWV9NT0RVTEUpLmdldFZlcnNpb24oSjJFRVZlcnNpb25Db25zdGFudHMuVkVSU0lPTl8xXzBfVEVYVCk7ICAKLSAgCi0gIHByaXZhdGUgZmluYWwgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGUgVEVNUExBVEVfV0VCID0gUHJvamVjdEZhY2V0c01hbmFnZXIuZ2V0VGVtcGxhdGUoSUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX1dFQl9URU1QTEFURSk7Ci0gIHByaXZhdGUgZmluYWwgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGUgVEVNUExBVEVfVVRJTElUWSA9IFByb2plY3RGYWNldHNNYW5hZ2VyLmdldFRlbXBsYXRlKElKMkVFTW9kdWxlQ29uc3RhbnRzLkpTVF9VVElMSVRZX1RFTVBMQVRFKTsKLSAgCi0gIHByaXZhdGUgaW50IG11bHRpcGxlc0ZvclByb2plY3RDcmVhdGlvbjsKLSAgCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShXZWJTZXJ2aWNlUnVudGltZVRlc3RzLmNsYXNzKTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGluaXQoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgYXNzZXJ0Tm90TnVsbChTRVJWRVJfSU5TVEFMTF9QQVRIX1RDNTUpOwotICAgICAgYXNzZXJ0Tm90TnVsbChTRVJWRVJfSU5TVEFMTF9QQVRIX1RDNTApOwotICAgICAgYXNzZXJ0Tm90TnVsbChTRVJWRVJfSU5TVEFMTF9QQVRIX1RDNDEpOwotICAgICAgYXNzZXJ0Tm90TnVsbChKQVZBMTVfVk1fSU5TVEFMTF9QQVRIKTsKLSAgICAgIAotICAgICAgLy9DcmVhdGUgYSBzZXJ2ZXIgcnVudGltZTogVG9tY2F0IDQuMSB3aXRoIEpESyAxLjQuMgotICAgICAgY3JlYXRlVG9tY2F0U2VydmVyUnVudGltZShSVU5USU1FSURfVEM0MSwgUlVOVElNRVRZUEVJRF9UQzQxLCBTRVJWRVJfSU5TVEFMTF9QQVRIX1RDNDEpOwotICAgICAgCi0gICAgICAvL0NyZWF0ZSBhIHNlcnZlciBydW50aW1lOiBUb21jYXQgNS4wIHdpdGggSkRLIDEuNC4yCi0gICAgICBjcmVhdGVUb21jYXRTZXJ2ZXJSdW50aW1lKFJVTlRJTUVJRF9UQzUwLCBSVU5USU1FVFlQRUlEX1RDNTAsIFNFUlZFUl9JTlNUQUxMX1BBVEhfVEM1MCk7Ci0gICAgICAKLSAgICAgIC8vQ3JlYXRlIGEgc2VydmVyIHJ1bnRpbWU6IFRvbWNhdCA1LjUgd2l0aCBKREsgMS41Ci0gICAgICBjcmVhdGVUb21jYXRTZXJ2ZXJSdW50aW1lKFJVTlRJTUVJRF9UQzU1LCBSVU5USU1FVFlQRUlEX1RDNTUsIFNFUlZFUl9JTlNUQUxMX1BBVEhfVEM1NSk7Ci0gICAgICAKLSAgICAgIAotICAgICAgCi0gICAgICBTdHJpbmcgbXVsdGlwbGVzID0gU3lzdGVtLmdldFByb3BlcnR5KCJtdWx0aXBsZXMiKTsgLy90aGlzIGlzIGFuIG9wdGlvbmFsIHByb3BlcnkgLSBkZWZhdWx0ZWQgdG8gMQotICAgICAgaWYgKG11bHRpcGxlcyAhPSBudWxsICYmIChJbnRlZ2VyLnBhcnNlSW50KG11bHRpcGxlcykgPiAwKSkKLSAgICAgIHsKLSAgICAgICAgbXVsdGlwbGVzRm9yUHJvamVjdENyZWF0aW9uID0gSW50ZWdlci5wYXJzZUludChtdWx0aXBsZXMpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBtdWx0aXBsZXNGb3JQcm9qZWN0Q3JlYXRpb24gPSAxOwotICAgICAgfQotICAgICAgCi0gICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9Ci0gIH0gIAotICAKLSAgcHJpdmF0ZSBJUnVudGltZSBjcmVhdGVUb21jYXRTZXJ2ZXJSdW50aW1lKFN0cmluZyBydW50aW1lSWQsIFN0cmluZyBydW50aW1lVHlwZUlkLCBTdHJpbmcgc2VydmVySW5zdGFsbFBhdGgpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIElSdW50aW1lVHlwZSBydCA9IFNlcnZlckNvcmUuZmluZFJ1bnRpbWVUeXBlKHJ1bnRpbWVUeXBlSWQpOwotICAgIElSdW50aW1lV29ya2luZ0NvcHkgd2MgPSBydC5jcmVhdGVSdW50aW1lKHJ1bnRpbWVJZCwgbnVsbCk7Ci0gICAgd2Muc2V0TG9jYXRpb24obmV3IFBhdGgoc2VydmVySW5zdGFsbFBhdGgpKTsKLSAgICBJUnVudGltZSBydW50aW1lID0gd2Muc2F2ZSh0cnVlLCBudWxsKTsKLSAgICAKLSAgICBpZiAocnVudGltZVR5cGVJZC5lcXVhbHMoUlVOVElNRVRZUEVJRF9UQzU1KSkKLSAgICB7Ci0gICAgICAvL0NyZWF0ZSBhIG5ldyBJVk1JbnN0YWxsCi0gICAgICBJVk1JbnN0YWxsVHlwZSB0eXBlID0gSmF2YVJ1bnRpbWUuZ2V0Vk1JbnN0YWxsVHlwZShKQVZBMTVfVk1fSU5TVEFMTF9UWVBFKTsKLSAgICAgIElWTUluc3RhbGwgbmV3Vk0gPSBuZXcgVk1TdGFuZGluKHR5cGUsIGNyZWF0ZVVuaXF1ZUlkKHR5cGUpKTsgCi0gICAgICBuZXdWTS5zZXRJbnN0YWxsTG9jYXRpb24obmV3IEZpbGUoSkFWQTE1X1ZNX0lOU1RBTExfUEFUSCkuZ2V0QWJzb2x1dGVGaWxlKCkpOwotICAgICAgbmV3Vk0uc2V0TmFtZShKQVZBMTVfVk1fSU5TVEFMTF9OQU1FKTsKLSAgICAgIG5ld1ZNLnNldEphdmFkb2NMb2NhdGlvbihuZXcgVVJMKEpBVkExNV9WTV9JTlNUQUxMX0pBVkFET0MpKTsKLSAgICAgIGlmIChuZXdWTSBpbnN0YW5jZW9mIElWTUluc3RhbGwyKQotICAgICAgewotICAgICAgICBJVk1JbnN0YWxsMiBuZXdWTTIgPSAoSVZNSW5zdGFsbDIpIG5ld1ZNOwotICAgICAgICBuZXdWTTIuc2V0Vk1BcmdzKG51bGwpOwotICAgICAgfQotICAgICAgbmV3Vk0uc2V0TGlicmFyeUxvY2F0aW9ucyhudWxsKTsgICAgICAKLQotICAgICAgLy9BZGQgdGhlIG5ldyBJVk1JbnN0YWxsIHRvIHRoZSBtYXN0ZXIgbGlzdC4KLSAgICAgIElWTUluc3RhbGxbXSB2bXMgPSBuZXcgSVZNSW5zdGFsbFtde25ld1ZNfTsKLSAgICAgIC8vVE9ETyBSZXBsYWNlIHVzZSBvZiB0aGUgaW50ZXJuYWwgY2xhc3Mgb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmpyZXMuSlJFc1VwZGF0ZXIKLSAgICAgIC8vd2l0aCBzb21ldGhpbmcgcHVibGljLiBOb3Qgc3VyZSBpZiBzb21ldGhpbmcgcHVibGljIGlzIGF2YWlsYWJsZSBhdCB0aGlzIHRpbWUuIE5lZWQgdG8gY2hlY2suCi0gICAgICBKUkVzVXBkYXRlciB1cGRhdGVyID0gbmV3IEpSRXNVcGRhdGVyKCk7Ci0gICAgICBJVk1JbnN0YWxsIGRlZmF1bHRWTSA9IEphdmFSdW50aW1lLmdldERlZmF1bHRWTUluc3RhbGwoKTsKLSAgICAgIHVwZGF0ZXIudXBkYXRlSlJFU2V0dGluZ3Modm1zLCBkZWZhdWx0Vk0pOwotICAgICAgCi0gICAgICAvL0dldCB0aGUgbmV3IElWTUluc3RhbGwKLSAgICAgIElWTUluc3RhbGxUeXBlIHZtVHlwZSA9IEphdmFSdW50aW1lLmdldFZNSW5zdGFsbFR5cGUoSkFWQTE1X1ZNX0lOU1RBTExfVFlQRSk7Ci0gICAgICBJVk1JbnN0YWxsIGphdmExNVZNID0gdm1UeXBlLmZpbmRWTUluc3RhbGxCeU5hbWUoSkFWQTE1X1ZNX0lOU1RBTExfTkFNRSk7Ci0gICAgCi0gICAgICAvL1NldCB0aGUgdG9tY2F0IHJ1bnRpbWUgdG8gdXNlIHRoZSBuZXcgSmF2YSAxNSBKREsuCi0gICAgICBJUnVudGltZVdvcmtpbmdDb3B5IHdjMiA9IHJ1bnRpbWUuY3JlYXRlV29ya2luZ0NvcHkoKTsKLSAgICAgIC8vVE9ETyBSZXBsYWNlIHVzZSBvZiB0aGUgaW50ZXJuYWwgY2xhc3MgCi0gICAgICAvL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LmNvcmUuaW50ZXJuYWwuSVRvbWNhdFJ1bnRpbWVXb3JraW5nQ29weQotICAgICAgLy93aXRoIHNvbWV0aGluZyBwdWJsaWMuIEVuaGFuY2VtZW50IDEyNzg4NCBoYXMgYmVlbiBvcGVuZWQgdG8gcmVxdWVzdCBBUEkKLSAgICAgIC8vZm9yIHRoaXMuCi0gICAgICBJVG9tY2F0UnVudGltZVdvcmtpbmdDb3B5IHRjd2MgPSAoSVRvbWNhdFJ1bnRpbWVXb3JraW5nQ29weSl3YzIubG9hZEFkYXB0ZXIoSVRvbWNhdFJ1bnRpbWVXb3JraW5nQ29weS5jbGFzcywgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0gICAgICB0Y3djLnNldFZNSW5zdGFsbChqYXZhMTVWTSk7Ci0gICAgICB3YzIuc2F2ZSh0cnVlLCBudWxsKTsgICAgICAKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIFNlcnZlckNvcmUuZmluZFJ1bnRpbWUocnVudGltZUlkKTsKLSAgfSAgCi0gIAotICBwcml2YXRlIFN0cmluZyBjcmVhdGVVbmlxdWVJZChJVk1JbnN0YWxsVHlwZSB2bVR5cGUpCi0gIHsKLSAgICBTdHJpbmcgaWQgPSBudWxsOwotICAgIGRvCi0gICAgewotICAgICAgaWQgPSBTdHJpbmcudmFsdWVPZihTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSk7Ci0gICAgfSB3aGlsZSAodm1UeXBlLmZpbmRWTUluc3RhbGwoaWQpICE9IG51bGwpOwotICAgIHJldHVybiBpZDsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3RzIHByb2plY3QgY3JlYXRpb24gYW5kIGZpbHRlcmluZyBmb3IgdGhlIEF4aXMgV2ViIHNlcnZpY2UKLSAgICogcnVudGltZS4gVGVzdHMgY292ZXIgYWxsIHZhbGlkIGNvbWJpbmF0aW9ucyBvZiBTZXJ2aWNlUnVudGltZXMsIAotICAgKiBUb21jYXQgc2VydmVycywgYW5kIEoyRUUgcHJvamVjdCB0eXBlcyBhbmQgd2VsbCBhcyBhbGwgdmFsaWQgIAotICAgKiBjb21iaW5hdGlvbnMgb2YgQ2xpZW50UnVudGltZXMsIFRvbWNhdCBzZXJ2ZXJzLCBhbmQgSjJFRSBwcm9qZWN0IHR5cGVzLgotICAgKi8gIAotICBwdWJsaWMgdm9pZCB0ZXN0UHJvamVjdENyZWF0aW9uQW5kRmlsdGVyaW5nKCkKLSAgewotICAgIGluaXQoKTsKLSAgICAKLSAgICBTdHJpbmdbXSB0ZW1wbGF0ZUlkcyA9IG5ldyBTdHJpbmdbXXtJSjJFRU1vZHVsZUNvbnN0YW50cy5KU1RfV0VCX1RFTVBMQVRFLAotICAgICAgICBJSjJFRU1vZHVsZUNvbnN0YW50cy5KU1RfV0VCX1RFTVBMQVRFLAotICAgICAgICBJSjJFRU1vZHVsZUNvbnN0YW50cy5KU1RfV0VCX1RFTVBMQVRFLAotICAgICAgICBJSjJFRU1vZHVsZUNvbnN0YW50cy5KU1RfV0VCX1RFTVBMQVRFLAotICAgICAgICBJSjJFRU1vZHVsZUNvbnN0YW50cy5KU1RfV0VCX1RFTVBMQVRFLAotICAgICAgICBJSjJFRU1vZHVsZUNvbnN0YW50cy5KU1RfV0VCX1RFTVBMQVRFLAotICAgICAgICBJSjJFRU1vZHVsZUNvbnN0YW50cy5KU1RfVVRJTElUWV9URU1QTEFURSwKLSAgICAgICAgSUoyRUVNb2R1bGVDb25zdGFudHMuSlNUX1VUSUxJVFlfVEVNUExBVEUsCi0gICAgICAgIElKMkVFTW9kdWxlQ29uc3RhbnRzLkpTVF9VVElMSVRZX1RFTVBMQVRFfTsKLSAgICBTdHJpbmdbXSBzY2VuYXJpb3MgPSBuZXcgU3RyaW5nW117U0VSVklDRV9TSURFLAotICAgICAgICBTRVJWSUNFX1NJREUsCi0gICAgICAgIFNFUlZJQ0VfU0lERSwKLSAgICAgICAgQ0xJRU5UX1NJREUsCi0gICAgICAgIENMSUVOVF9TSURFLAotICAgICAgICBDTElFTlRfU0lERSwKLSAgICAgICAgQ0xJRU5UX1NJREUsCi0gICAgICAgIENMSUVOVF9TSURFLAotICAgICAgICBDTElFTlRfU0lERX07Ci0gICAgU3RyaW5nW10gc2VydmljZUNsaWVudFJ1bnRpbWVJZHMgPSBuZXcgU3RyaW5nW117QVhJU19TRVJWSUNFX1JVTlRJTUUsCi0gICAgICAgIEFYSVNfU0VSVklDRV9SVU5USU1FLAotICAgICAgICBBWElTX1NFUlZJQ0VfUlVOVElNRSwKLSAgICAgICAgQVhJU19DTElFTlRfUlVOVElNRV9XRUIsCi0gICAgICAgIEFYSVNfQ0xJRU5UX1JVTlRJTUVfV0VCLAotICAgICAgICBBWElTX0NMSUVOVF9SVU5USU1FX1dFQiwKLSAgICAgICAgQVhJU19DTElFTlRfUlVOVElNRV9KQVZBLAotICAgICAgICBBWElTX0NMSUVOVF9SVU5USU1FX0pBVkEsCi0gICAgICAgIEFYSVNfQ0xJRU5UX1JVTlRJTUVfSkFWQX07Ci0gICAgU3RyaW5nW10gc2VydmVyVHlwZXMgPSBuZXcgU3RyaW5nW117U0VSVkVSVFlQRUlEX1RDNDEsCi0gICAgICAgIFNFUlZFUlRZUEVJRF9UQzUwLAotICAgICAgICBTRVJWRVJUWVBFSURfVEM1NSwKLSAgICAgICAgU0VSVkVSVFlQRUlEX1RDNDEsCi0gICAgICAgIFNFUlZFUlRZUEVJRF9UQzUwLAotICAgICAgICBTRVJWRVJUWVBFSURfVEM1NSwKLSAgICAgICAgU0VSVkVSVFlQRUlEX1RDNDEsCi0gICAgICAgIFNFUlZFUlRZUEVJRF9UQzUwLAotICAgICAgICBTRVJWRVJUWVBFSURfVEM1NX07Ci0gICAgCi0gICAgCi0gICAgLy9FeHBlY3RlZCBSZXN1bHRzOgotICAgIAotICAgIElQcm9qZWN0RmFjZXRWZXJzaW9uW11bXSBleHBlY3RlZEZhY2V0cyA9IG5ldyBJUHJvamVjdEZhY2V0VmVyc2lvbltdW117IG5ldyBJUHJvamVjdEZhY2V0VmVyc2lvbltde1dFQjIzLCBKQVZBMTR9LAotICAgICAgICBuZXcgSVByb2plY3RGYWNldFZlcnNpb25bXXtXRUIyNCwgSkFWQTE0fSwKLSAgICAgICAgbmV3IElQcm9qZWN0RmFjZXRWZXJzaW9uW117V0VCMjQsIEpBVkE1MH0sCi0gICAgICAgIG5ldyBJUHJvamVjdEZhY2V0VmVyc2lvbltde1dFQjIzLCBKQVZBMTR9LAotICAgICAgICBuZXcgSVByb2plY3RGYWNldFZlcnNpb25bXXtXRUIyNCwgSkFWQTE0fSwKLSAgICAgICAgbmV3IElQcm9qZWN0RmFjZXRWZXJzaW9uW117V0VCMjQsIEpBVkE1MH0sCi0gICAgICAgIG5ldyBJUHJvamVjdEZhY2V0VmVyc2lvbltde1VUSUxJVFkxMCwgSkFWQTE0fSwKLSAgICAgICAgbmV3IElQcm9qZWN0RmFjZXRWZXJzaW9uW117VVRJTElUWTEwLCBKQVZBMTR9LAotICAgICAgICBuZXcgSVByb2plY3RGYWNldFZlcnNpb25bXXtVVElMSVRZMTAsIEpBVkE1MH0sCi0gICAgfTsKLSAgICAKLSAgICBTdHJpbmdbXSBleHBlY3RlZFJ1bnRpbWVzID0gbmV3IFN0cmluZ1tdIHtSVU5USU1FSURfVEM0MSwKLSAgICAgICAgUlVOVElNRUlEX1RDNTAsCi0gICAgICAgIFJVTlRJTUVJRF9UQzU1LAotICAgICAgICBSVU5USU1FSURfVEM0MSwKLSAgICAgICAgUlVOVElNRUlEX1RDNTAsCi0gICAgICAgIFJVTlRJTUVJRF9UQzU1LAotICAgICAgICBSVU5USU1FSURfVEM0MSwKLSAgICAgICAgUlVOVElNRUlEX1RDNTAsCi0gICAgICAgIFJVTlRJTUVJRF9UQzU1ICAgICAgICAKLSAgICB9OwotICAgIAotICAgIFN0cmluZyBiaWdQcmVmaXggPSBQUk9KRUNUX05BTUVfUFJFRklYKyIwIitQUk9KRUNUX05BTUVfU1VGRklYOwotICAgIFN0cmluZ1tdIGV4cGVjdGVkUHJvamVjdHNGb3JBeGlzU2VydmljZSA9IG5ldyBTdHJpbmdbXSB7IGJpZ1ByZWZpeCsiMCIsIAotICAgICAgICBiaWdQcmVmaXgrIjEiLAotICAgICAgICBiaWdQcmVmaXgrIjIiLAotICAgICAgICBiaWdQcmVmaXgrIjMiLAotICAgICAgICBiaWdQcmVmaXgrIjQiLAotICAgICAgICBiaWdQcmVmaXgrIjUiICAgICAgICAKLSAgICB9OwotICAgIAotICAgIFN0cmluZ1tdIGV4cGVjdGVkUHJvamVjdHNGb3JBeGlzQ2xpZW50ID0gbmV3IFN0cmluZ1tdIHsgYmlnUHJlZml4KyIwIiwgCi0gICAgICAgIGJpZ1ByZWZpeCsiMSIsCi0gICAgICAgIGJpZ1ByZWZpeCsiMiIsCi0gICAgICAgIGJpZ1ByZWZpeCsiMyIsCi0gICAgICAgIGJpZ1ByZWZpeCsiNCIsCi0gICAgICAgIGJpZ1ByZWZpeCsiNSIsCi0gICAgICAgIGJpZ1ByZWZpeCsiNiIsCi0gICAgICAgIGJpZ1ByZWZpeCsiNyIsCi0gICAgICAgIGJpZ1ByZWZpeCsiOCIsCi0gICAgfTsKLSAgICAKLSAgICBib29sZWFuW10gZXhwZWN0ZWRCb29sZWFuc0ZvckF4aXNTZXJ2aWNlID0gbmV3IGJvb2xlYW5bXSB7dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZX07Ci0gICAgYm9vbGVhbltdIGV4cGVjdGVkQm9vbGVhbnNGb3JBeGlzQ2xpZW50V2ViID0gbmV3IGJvb2xlYW5bXSB7dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZX07Ci0gICAgYm9vbGVhbltdIGV4cGVjdGVkQm9vbGVhbnNGb3JBeGlzQ2xpZW50SmF2YSA9IG5ldyBib29sZWFuW10ge2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUsIHRydWUsIHRydWV9OwotICAgIAotICAgIAotICAgIC8vVHVybiBhdXRvLWJ1aWxkIG9mZgotICAgIFZhbGlkYXRpb25NYW5hZ2VyIG1hbmFnZXIgPSBuZXcgVmFsaWRhdGlvbk1hbmFnZXIoKTsKLSAgICBtYW5hZ2VyLmRpc2FibGVBdXRvQnVpbGQoKTsKLSAgICAKLSAgICAvL0NyZWF0ZSB0aGUgcHJvamVjdHMKLSAgICBmb3IgKGludCBpPTA7IGk8bXVsdGlwbGVzRm9yUHJvamVjdENyZWF0aW9uOyBpKyspCi0gICAgewotICAgICAgY3JlYXRlUHJvamVjdHModGVtcGxhdGVJZHMsIHNjZW5hcmlvcywgc2VydmljZUNsaWVudFJ1bnRpbWVJZHMsIHNlcnZlclR5cGVzLCBQUk9KRUNUX05BTUVfUFJFRklYK2kpOwotICAgIH0gIAotICAgIAotICAgIC8vUmVzdG9yZSBhdXRvLWJ1aWxkCi0gICAgbWFuYWdlci5yZXN0b3JlQXV0b0J1aWxkKCk7Ci0gICAgCi0gICAgLy9DaGVjayBFeHBlY3RlZCBSZXN1bHRzOgotICAgIAotICAgIC8vQ2hlY2sgZmFjZXRzIGFuZCBydW50aW1lIG9uIHRoZSBmaXJzdCAiMCJ0aCBzZXQgb2YgY3JlYXRlZCBwcm9qZWN0cy4gSWdub3JlIGhpZ2hlciBtdWx0aXBsZXMgc2luY2UgdGhleQotICAgIC8vYXJlIGR1cGxpY2F0ZXMuICAgIAotICAgIGZvciAoaW50IGo9MDsgajxleHBlY3RlZEZhY2V0cy5sZW5ndGg7IGorKykKLSAgICB7Ci0gICAgICBTdHJpbmcgcHJvamVjdE5hbWUgPSBiaWdQcmVmaXgrajsKLSAgICAgIElQcm9qZWN0IHByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QocHJvamVjdE5hbWUpOwotICAgICAgYXNzZXJ0Tm90TnVsbChwcm9qZWN0KTsKLSAgICAgIGFzc2VydFRydWUocHJvamVjdC5leGlzdHMoKSk7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgSUZhY2V0ZWRQcm9qZWN0IGZQcm9qZWN0ID0gUHJvamVjdEZhY2V0c01hbmFnZXIuY3JlYXRlKHByb2plY3QpOwotICAgICAgICBhc3NlcnROb3ROdWxsKGZQcm9qZWN0KTsKLQotICAgICAgICAvL0NoZWNrIGZhY2V0cwotICAgICAgICAvL2JlZ2luIGRlYnVnCi0gICAgICAgIEl0ZXJhdG9yIHBmYWNldHMgPSBmUHJvamVjdC5nZXRQcm9qZWN0RmFjZXRzKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgd2hpbGUgKHBmYWNldHMuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgIAlJUHJvamVjdEZhY2V0VmVyc2lvbiBwZnYgPSAoSVByb2plY3RGYWNldFZlcnNpb24pcGZhY2V0cy5uZXh0KCk7Ci0gICAgICAgIAlTeXN0ZW0ub3V0LnByaW50bG4oImZhY2V0PSIrcGZ2LmdldFByb2plY3RGYWNldCgpLmdldElkKCkrIiwgdmVyc2lvbj0iK3Bmdi5nZXRWZXJzaW9uU3RyaW5nKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBmb3IgKGludCBrPTA7IGs8ZXhwZWN0ZWRGYWNldHNbal0ubGVuZ3RoOyBrKyspCi0gICAgICAgIHsKLSAgICAgICAgICBhc3NlcnRUcnVlKGZQcm9qZWN0Lmhhc1Byb2plY3RGYWNldChleHBlY3RlZEZhY2V0c1tqXVtrXSkpOwotICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvL0NoZWNrIHJ1bnRpbWUKLSAgICAgICAgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUucnVudGltZS5JUnVudGltZSBmUnVudGltZSA9IGZQcm9qZWN0LmdldFJ1bnRpbWUoKTsKLSAgICAgICAgYXNzZXJ0Tm90TnVsbChmUnVudGltZSk7Ci0gICAgICAgIElSdW50aW1lIHNSdW50aW1lID0gRmFjZXRVdGlsLmdldFJ1bnRpbWUoZlJ1bnRpbWUpOwotICAgICAgICBhc3NlcnROb3ROdWxsKHNSdW50aW1lKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShzUnVudGltZS5nZXRJZCgpLmVxdWFscyhleHBlY3RlZFJ1bnRpbWVzW2pdKSk7Ci0gICAgICAgIAotICAgICAgfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkKLSAgICAgIHsKLSAgICAgICAgZmFpbCgpOwotICAgICAgfQotICAgICAgCi0gICAgfQotICAgIAotICAgIC8vQ2hlY2sgdGhhdCBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRQcm9qZWN0c0ZvclNlcnZpY2VUeXBlQW5kUnVudGltZSguLikgcmV0dXJucwotICAgIC8vdGhlIHJpZ2h0IHNldCBvZiBwcm9qZWN0cwotICAgIFN0cmluZyBzZXJ2aWNlVHlwZSA9IFN0cmluZy52YWx1ZU9mKFdlYlNlcnZpY2VTY2VuYXJpby5CT1RUT01VUCkgKyAiLyIgKyBTRVJWSUNFX0lNUExfSkFWQTsKLSAgICBTdHJpbmdbXSBwcm9qZWN0c0ZvckF4aXNTZXJ2aWNlID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0UHJvamVjdHNGb3JTZXJ2aWNlVHlwZUFuZFJ1bnRpbWUoc2VydmljZVR5cGUsIEFYSVNfUlVOVElNRSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkUHJvamVjdHNGb3JBeGlzU2VydmljZS5sZW5ndGgsIHByb2plY3RzRm9yQXhpc1NlcnZpY2UubGVuZ3RoKTsKLSAgICBMaXN0IHByb2plY3RzRm9yQXhpc1NlcnZpY2VMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGZvciAoaW50IGk9MDsgaTxwcm9qZWN0c0ZvckF4aXNTZXJ2aWNlLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIHByb2plY3RzRm9yQXhpc1NlcnZpY2VMaXN0LmFkZChwcm9qZWN0c0ZvckF4aXNTZXJ2aWNlW2ldKTsgICAgICAKLSAgICB9Ci0gICAgZm9yIChpbnQgaT0wOyBpPGV4cGVjdGVkUHJvamVjdHNGb3JBeGlzU2VydmljZS5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBhc3NlcnRUcnVlKHByb2plY3RzRm9yQXhpc1NlcnZpY2VMaXN0LmNvbnRhaW5zKGV4cGVjdGVkUHJvamVjdHNGb3JBeGlzU2VydmljZVtpXSkpOwotICAgIH0KLSAgICAKLSAgICAvL0NoZWNrIHRoYXQgV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0UHJvamVjdHNGb3JDbGllbnRUeXBlQW5kUnVudGltZSguLikgcmV0dXJucwotICAgIC8vdGhlIHJpZ2h0IHNldCBvZiBwcm9qZWN0cyAgICAKLSAgICBTdHJpbmdbXSBwcm9qZWN0c0ZvckF4aXNDbGllbnQgPSBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5nZXRQcm9qZWN0c0ZvckNsaWVudFR5cGVBbmRSdW50aW1lKENMSUVOVF9JTVBMX0pBVkEsIEFYSVNfUlVOVElNRSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkUHJvamVjdHNGb3JBeGlzQ2xpZW50Lmxlbmd0aCwgcHJvamVjdHNGb3JBeGlzQ2xpZW50Lmxlbmd0aCk7Ci0gICAgTGlzdCBwcm9qZWN0c0ZvckF4aXNDbGllbnRMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGZvciAoaW50IGk9MDsgaTxwcm9qZWN0c0ZvckF4aXNDbGllbnQubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgcHJvamVjdHNGb3JBeGlzQ2xpZW50TGlzdC5hZGQocHJvamVjdHNGb3JBeGlzQ2xpZW50W2ldKTsgICAgICAKLSAgICB9Ci0gICAgZm9yIChpbnQgaT0wOyBpPGV4cGVjdGVkUHJvamVjdHNGb3JBeGlzQ2xpZW50Lmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGFzc2VydFRydWUocHJvamVjdHNGb3JBeGlzQ2xpZW50TGlzdC5jb250YWlucyhleHBlY3RlZFByb2plY3RzRm9yQXhpc0NsaWVudFtpXSkpOwotICAgIH0gICAgCi0gICAgCi0gICAgLy9DaGVjayB0aGF0IHRoZSBBeGlzIHNlcnZpY2UgYW5kIGNsaWVudCBydW50aW1lcycgcHJvamVjdCBjb21wYXRpYmlsaXR5IGNoZWNraW5nIGlzIHdvcmtpbmcKLSAgICBmb3IgKGludCBpPTA7IGk8ZXhwZWN0ZWRCb29sZWFuc0ZvckF4aXNTZXJ2aWNlLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIFN0cmluZyBwcm9qZWN0TmFtZSA9IGJpZ1ByZWZpeCtpOyAgICAgIAotICAgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkQm9vbGVhbnNGb3JBeGlzU2VydmljZVtpXSwgV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZG9lc1NlcnZpY2VSdW50aW1lU3VwcG9ydFByb2plY3QoQVhJU19TRVJWSUNFX1JVTlRJTUUsIHByb2plY3ROYW1lKSk7ICAgIAotICAgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkQm9vbGVhbnNGb3JBeGlzQ2xpZW50V2ViW2ldLCBXZWJTZXJ2aWNlUnVudGltZUV4dGVuc2lvblV0aWxzMi5kb2VzQ2xpZW50UnVudGltZVN1cHBvcnRQcm9qZWN0KEFYSVNfQ0xJRU5UX1JVTlRJTUVfV0VCLCBwcm9qZWN0TmFtZSkpOwotICAgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkQm9vbGVhbnNGb3JBeGlzQ2xpZW50SmF2YVtpXSwgV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZG9lc0NsaWVudFJ1bnRpbWVTdXBwb3J0UHJvamVjdChBWElTX0NMSUVOVF9SVU5USU1FX0pBVkEsIHByb2plY3ROYW1lKSk7Ci0gICAgfSAKLSAgICAKLSAgICAvL1R1cm4gYXV0by1idWlsZCBvZmYKLSAgICBtYW5hZ2VyLmRpc2FibGVBdXRvQnVpbGQoKTsKLSAgICAgICAgCi0gICAgLy9EZWxldGUgdGhlIHByb2plY3RzCi0gICAgZm9yIChpbnQgaT0wOyBpPG11bHRpcGxlc0ZvclByb2plY3RDcmVhdGlvbjsgaSsrKQotICAgIHsKLSAgICAgIGRlbGV0ZVByb2plY3RzKHRlbXBsYXRlSWRzLmxlbmd0aCwgUFJPSkVDVF9OQU1FX1BSRUZJWCtpKTsKLSAgICB9ICAgICAgCi0KLSAgICAvL1Jlc3RvcmUgYXV0by1idWlsZAotICAgIG1hbmFnZXIucmVzdG9yZUF1dG9CdWlsZCgpOyAgICAKLSAgfSAgCi0gIAotICBwcml2YXRlIHZvaWQgZGVsZXRlUHJvamVjdHMoaW50IG4sIFN0cmluZyBuYW1lUHJlZml4KQotICB7Ci0gICAgZm9yIChpbnQgaT0wOyBpPG47IGkrKykKLSAgICB7Ci0gICAgICBTdHJpbmcgbmFtZSA9IG5hbWVQcmVmaXggKyBQUk9KRUNUX05BTUVfU1VGRklYICsgaTsKLSAgICAgIElQcm9qZWN0IHByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QobmFtZSk7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgcHJvamVjdC5kZWxldGUodHJ1ZSwgbnVsbCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkKLSAgICAgIHsKLSAgICAgICAgLy9Eb24ndCBmYWlsIHRoZSB0ZXN0IGNhc2UgaWYgcHJvamVjdCBkZWxldGlvbiBmYWlscy4KLSAgICAgIH0KLSAgICB9Ci0gIH0gIAotICAKLSAgcHJpdmF0ZSB2b2lkIGNyZWF0ZVByb2plY3RzKFN0cmluZ1tdIHRlbXBsYXRlSWRzLCBTdHJpbmdbXSBzY2VuYXJpb3MsIFN0cmluZ1tdIHNlcnZpY2VDbGllbnRSdW50aW1lSWRzLCBTdHJpbmdbXSBzZXJ2ZXJUeXBlcywgU3RyaW5nIG5hbWVQcmVmaXggKQotICB7Ci0gICAgaW50IG4gPSB0ZW1wbGF0ZUlkcy5sZW5ndGg7Ci0gICAgZm9yIChpbnQgaT0wOyBpPG47IGkrKykKLSAgICB7Ci0gICAgICBTdHJpbmcgbmFtZSA9IG5hbWVQcmVmaXggKyBQUk9KRUNUX05BTUVfU1VGRklYICsgaTsKLSAgICAgIFJlcXVpcmVkRmFjZXRWZXJzaW9uW10gcmZ2cyA9IG51bGw7Ci0gICAgICBpZiAoc2NlbmFyaW9zW2ldLmVxdWFscyhDTElFTlRfU0lERSkpCi0gICAgICB7Ci0KLSAgICAgICAgICByZnZzID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0Q2xpZW50UnVudGltZURlc2NyaXB0b3JCeUlkKHNlcnZpY2VDbGllbnRSdW50aW1lSWRzW2ldKS5nZXRSZXF1aXJlZEZhY2V0VmVyc2lvbnMoKTsKLSAgICAgICAgCi0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGlmIChzY2VuYXJpb3NbaV0uZXF1YWxzKFNFUlZJQ0VfU0lERSkpCi0gICAgICAgIHsKLSAgICAgICAgICByZnZzID0gV2ViU2VydmljZVJ1bnRpbWVFeHRlbnNpb25VdGlsczIuZ2V0U2VydmljZVJ1bnRpbWVEZXNjcmlwdG9yQnlJZChzZXJ2aWNlQ2xpZW50UnVudGltZUlkc1tpXSkuZ2V0UmVxdWlyZWRGYWNldFZlcnNpb25zKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgcmZ2cyA9IG5ldyBSZXF1aXJlZEZhY2V0VmVyc2lvblswXTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgCi0gICAgICBDcmVhdGVGYWNldGVkUHJvamVjdENvbW1hbmQgY29tbWFuZCA9IG5ldyBDcmVhdGVGYWNldGVkUHJvamVjdENvbW1hbmQoKTsKLSAgICAgIGNvbW1hbmQuc2V0UHJvamVjdE5hbWUobmFtZSk7Ci0gICAgICBjb21tYW5kLnNldFRlbXBsYXRlSWQodGVtcGxhdGVJZHNbaV0pOyAgICAgICAgICAgICAgICAgICAgCi0gICAgICBjb21tYW5kLnNldFJlcXVpcmVkRmFjZXRWZXJzaW9ucyhyZnZzKTsgICAgICAgICAgIAotICAgICAgY29tbWFuZC5zZXRTZXJ2ZXJGYWN0b3J5SWQoc2VydmVyVHlwZXNbaV0pOwotICAgICAgSVN0YXR1cyBzdGF0dXMgPSBjb21tYW5kLmV4ZWN1dGUoIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCksIG51bGwgKTsgICAgCi0gICAgICBpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gU3RhdHVzLkVSUk9SKQotICAgICAgewotICAgICAgICBmYWlsKCk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIElQcm9qZWN0IHByb2plY3QgPSBQcm9qZWN0VXRpbGl0aWVzLmdldFByb2plY3QobmFtZSk7Ci0gICAgICBGYWNldFV0aWxzLmFkZFJlcXVpcmVkRmFjZXRzVG9Qcm9qZWN0KHByb2plY3QsIHJmdnMsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotICAgIH0gICAgCi0gIH0gIAotICAKLSAgLyoqCi0gICAqIFRlc3RzIHByb2plY3QgdHlwZSBmaWx0ZXJpbmcgZm9yIHRoZSBBeGlzIFdlYiBzZXJ2aWNlIHJ1bnRpbWUuCi0gICAqIFRlc3RzIGNvdmVyIGFsbCBTZXJ2aWNlUnVudGltZXMgYW5kIENsaWVudFJ1bnRpbWVzLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFByb2plY3RUeXBlRmlsdGVyaW5nKCkKLSAgeyAgCi0gICAgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGVbXSBleHBlY3RlZFRlbXBsYXRlc0ZvckF4aXNTZXJ2aWNlID0gbmV3IElGYWNldGVkUHJvamVjdFRlbXBsYXRlW10ge1RFTVBMQVRFX1dFQn07Ci0gICAgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGVbXSBleHBlY3RlZFRlbXBsYXRlc0ZvckF4aXNDbGllbnRXZWIgPSBuZXcgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGVbXSB7VEVNUExBVEVfV0VCfTsKLSAgICBJRmFjZXRlZFByb2plY3RUZW1wbGF0ZVtdIGV4cGVjdGVkVGVtcGxhdGVzRm9yQXhpc0NsaWVudEphdmEgPSBuZXcgSUZhY2V0ZWRQcm9qZWN0VGVtcGxhdGVbXSB7VEVNUExBVEVfVVRJTElUWX07Ci0gICAgCi0gICAgU2V0IHRlbXBsYXRlc0ZvckF4aXNTZXJ2aWNlID0gRmFjZXRNYXRjaENhY2hlLmdldEluc3RhbmNlKCkuZ2V0VGVtcGxhdGVzRm9yU2VydmljZVJ1bnRpbWUoQVhJU19TRVJWSUNFX1JVTlRJTUUpOwotICAgIGFzc2VydEVxdWFscyhleHBlY3RlZFRlbXBsYXRlc0ZvckF4aXNTZXJ2aWNlLmxlbmd0aCx0ZW1wbGF0ZXNGb3JBeGlzU2VydmljZS5zaXplKCkpOwotICAgIGZvciAoaW50IGk9MDsgaTxleHBlY3RlZFRlbXBsYXRlc0ZvckF4aXNTZXJ2aWNlLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGFzc2VydFRydWUodGVtcGxhdGVzRm9yQXhpc1NlcnZpY2UuY29udGFpbnMoZXhwZWN0ZWRUZW1wbGF0ZXNGb3JBeGlzU2VydmljZVtpXSkpOwotICAgIH0KLSAgICBTZXQgdGVtcGxhdGVzRm9yQXhpc0NsaWVudFdlYiA9IEZhY2V0TWF0Y2hDYWNoZS5nZXRJbnN0YW5jZSgpLmdldFRlbXBsYXRlc0ZvckNsaWVudFJ1bnRpbWUoQVhJU19DTElFTlRfUlVOVElNRV9XRUIpOwotICAgIGFzc2VydEVxdWFscyhleHBlY3RlZFRlbXBsYXRlc0ZvckF4aXNDbGllbnRXZWIubGVuZ3RoLCB0ZW1wbGF0ZXNGb3JBeGlzQ2xpZW50V2ViLnNpemUoKSk7Ci0gICAgZm9yIChpbnQgaT0wOyBpPGV4cGVjdGVkVGVtcGxhdGVzRm9yQXhpc0NsaWVudFdlYi5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBhc3NlcnRUcnVlKHRlbXBsYXRlc0ZvckF4aXNDbGllbnRXZWIuY29udGFpbnMoZXhwZWN0ZWRUZW1wbGF0ZXNGb3JBeGlzQ2xpZW50V2ViW2ldKSk7Ci0gICAgfSAgICAKLSAgICBTZXQgdGVtcGxhdGVzRm9yQXhpc0NsaWVudEphdmEgPSBGYWNldE1hdGNoQ2FjaGUuZ2V0SW5zdGFuY2UoKS5nZXRUZW1wbGF0ZXNGb3JDbGllbnRSdW50aW1lKEFYSVNfQ0xJRU5UX1JVTlRJTUVfSkFWQSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkVGVtcGxhdGVzRm9yQXhpc0NsaWVudEphdmEubGVuZ3RoLCB0ZW1wbGF0ZXNGb3JBeGlzQ2xpZW50SmF2YS5zaXplKCkpOwotICAgIGZvciAoaW50IGk9MDsgaTxleHBlY3RlZFRlbXBsYXRlc0ZvckF4aXNDbGllbnRKYXZhLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGFzc2VydFRydWUodGVtcGxhdGVzRm9yQXhpc0NsaWVudEphdmEuY29udGFpbnMoZXhwZWN0ZWRUZW1wbGF0ZXNGb3JBeGlzQ2xpZW50SmF2YVtpXSkpOwotICAgIH0KLSAgICAKLSAgICAKLSAgfSAgCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3V0aWwvRHluYW1pY1BvcHVwSlVuaXRXaXphcmQuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdXRpbC9EeW5hbWljUG9wdXBKVW5pdFdpemFyZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTcyZjcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdXRpbC9EeW5hbWljUG9wdXBKVW5pdFdpemFyZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMzE0ICAgMTc2ODg2IHBtb29na0BjYS5pYm0uY29tIC0gUGV0ZXIgTW9vZ2sKLSAqIDIwMDcwNTA5ICAgMTgwNTY3IHNlbmdwbEBjYS5pYm0uY29tIC0gU2VuZyBQaHVuZy1MdQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uub3BlcmF0aW9uLklSdW5uYWJsZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29udGV4dC5QZXJzaXN0ZW50UmVzb3VyY2VDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YUZsb3dNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmRhdGEuRGF0YU1hcHBpbmdSZWdpc3RyeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvcmUuZnJhZ21lbnQuQ29tbWFuZEZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5lY2xpcHNlLkVjbGlwc2VFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5JRWNsaXBzZVN0YXR1c0hhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuQ29tbWFuZFdpZGdldEJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMuU2ltcGxlQ29tbWFuZEVuZ2luZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLndpZGdldHMucG9wdXAuRHluYW1pY1BvcHVwV2l6YXJkOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQuSUxvZzsKLQotcHVibGljIGNsYXNzIER5bmFtaWNQb3B1cEpVbml0V2l6YXJkIGV4dGVuZHMgRHluYW1pY1BvcHVwV2l6YXJkIHsKLQlwcml2YXRlIElFY2xpcHNlU3RhdHVzSGFuZGxlciBoYW5kbGVyXzsKLSAgICBwcml2YXRlIElMb2cgbG9nXzsKLQlwdWJsaWMgRHluYW1pY1BvcHVwSlVuaXRXaXphcmQoSUVjbGlwc2VTdGF0dXNIYW5kbGVyIGhhbmRsZXIpCi0JewotCQloYW5kbGVyXyA9IGhhbmRsZXI7Ci0JfQotICAKLSAgICBwdWJsaWMgRHluYW1pY1BvcHVwSlVuaXRXaXphcmQoSUVjbGlwc2VTdGF0dXNIYW5kbGVyIGhhbmRsZXIsIElMb2cgbG9nKQotICAgIHsKLSAgICAgICAgaGFuZGxlcl8gPSBoYW5kbGVyOwotICAgICAgICBsb2dfID0gbG9nOwotICAgIH0KLSAgICAKLQlwdWJsaWMgdm9pZCBydW5IZWFkTGVzcyhJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24sSVJ1bm5hYmxlQ29udGV4dCBjb250ZXh0KSB7Ci0JCQotCQlQZXJzaXN0ZW50UmVzb3VyY2VDb250ZXh0ICByZXNvdXJjZUNvbnRleHQgPSBQZXJzaXN0ZW50UmVzb3VyY2VDb250ZXh0LmdldEluc3RhbmNlKCk7Ci0JCUVjbGlwc2VFbnZpcm9ubWVudCAgICAgICAgIGVudmlyb25tZW50ICAgICA9IG5ldyBFY2xpcHNlRW52aXJvbm1lbnQoIG51bGwsIHJlc291cmNlQ29udGV4dCwgaGFuZGxlcl8gKTsKLQkJaWYgKGxvZ18hPW51bGwpCi0gICAgICAgICAgZW52aXJvbm1lbnQuc2V0TG9nKGxvZ18pOwotICAgIAotCQlEYXRhTWFwcGluZ1JlZ2lzdHJ5SW1wbCAgICBkYXRhUmVnaXN0cnlfICAgPSBuZXcgRGF0YU1hcHBpbmdSZWdpc3RyeUltcGwoKTsJICAgIAotCQlEYXRhRmxvd01hbmFnZXIgICAgICAgICAgICBkYXRhTWFuYWdlciAgICAgPSBuZXcgRGF0YUZsb3dNYW5hZ2VyKCBkYXRhUmVnaXN0cnlfLCBlbnZpcm9ubWVudCApOwotCQlTaW1wbGVDb21tYW5kRW5naW5lTWFuYWdlciBtYW5hZ2VyICAgICAgICAgPSBuZXcgU2ltcGxlQ29tbWFuZEVuZ2luZU1hbmFnZXIoZW52aXJvbm1lbnQsIGRhdGFNYW5hZ2VyKTsKLQkJICAKLQkgICAgdHJ5Ci0JICAgIHsKLQkgICAgICBjb21tYW5kV2lkZ2V0QmluZGluZ18gPSAoQ29tbWFuZFdpZGdldEJpbmRpbmcpd2l6YXJkRWxlbWVudF8uY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbiggImNsYXNzIiApOwotCSAgICB9Ci0JICAgIGNhdGNoKCBDb3JlRXhjZXB0aW9uIGV4YyApCi0JICAgIHsKLQkgICAgICBleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIH0KLQkgICAgCi0JCWNvbW1hbmRXaWRnZXRCaW5kaW5nXy5yZWdpc3RlckRhdGFNYXBwaW5ncyggZGF0YVJlZ2lzdHJ5XyApOwotCQkKLQkJQ29tbWFuZEZyYWdtZW50ICAgICAgICAgICAgcm9vdEZyYWdtZW50ICAgID0gZ2V0Um9vdEZyYWdtZW50KCBzZWxlY3Rpb24sIG51bGwgKTsKLQkJbWFuYWdlci5zZXRSb290RnJhZ21lbnQoIHJvb3RGcmFnbWVudCApOwotCQltYW5hZ2VyLnJ1bkZvcndhcmRUb05leHRTdG9wKCBjb250ZXh0ICk7Ci0JfQotCQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91dGlsL0pVbml0VXRpbHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdXRpbC9KVW5pdFV0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyZTc3MWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL2pzdC93cy90ZXN0cy91dGlsL0pVbml0VXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIHl5eXltbWRkIGJ1ZyAgICAgIEVtYWlsIGFuZCBvdGhlciBjb250YWN0IGluZm9ybWF0aW9uCi0gKiAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjAwNzEwNCAgIDExNDgzNSBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDcwMzE0ICAxNzY4ODYgcG1vb2drQGNhLmlibS5jb20gLSBQZXRlciBNb29nawotICogMjAwNzA1MDIgIDE4NTIwOCBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqIDIwMDcwNTA5ICAxODA1Njcgc2VuZ3BsQGNhLmlibS5jb20gLSBTZW5nIFBodW5nLUx1IAotICogMjAwNzA3MDUgIDE5NTU1MyBzZW5ncGxAY2EuaWJtLmNvbSAtIFNlbmcgUGh1bmctTHUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMudXRpbDsKLQotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25UYXJnZXRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JbmNyZW1lbnRhbFByb2plY3RCdWlsZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLklMYXVuY2hNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuUHJvZ3Jlc3NNb25pdG9yRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLm9wZXJhdGlvbi5JUnVubmFibGVXaXRoUHJvZ3Jlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlNlcnZlclV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi5jb21tYW5kLmNvbW1vbi5DcmVhdGVNb2R1bGVDb21tYW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aS5wbHVnaW4uV2ViU2VydmljZUNvbnN1bXB0aW9uVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLnByZWZlcmVuY2VzLlBlcnNpc3RlbnRTZXJ2ZXJSdW50aW1lQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29udGV4dC5TY2VuYXJpb0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLnBsdWdpbi5XZWJTZXJ2aWNlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy5wbHVnaW4uVGVzdHNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29tbW9uLkZpbGVSZXNvdXJjZVV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb21tb24uV2FpdEZvckF1dG9CdWlsZENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LmNvbnRleHQuUGVyc2lzdGVudEFjdGlvbkRpYWxvZ3NDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmludGVybmFsLmVudi5jb3JlLmNvbW1vbi5TdGF0dXNVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuY29yZS5jb250ZXh0LlJlc291cmNlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYuZWNsaXBzZS5BY2N1bXVsYXRlU3RhdHVzSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYucHJlZmVyZW5jZXMuQWN0aW9uRGlhbG9nUHJlZmVyZW5jZVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuaW50ZXJuYWwuZW52LnVpLmVjbGlwc2UuRW52aXJvbm1lbnRVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmVudmlyb25tZW50LklFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSU1vZHVsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVJ1bnRpbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklSdW50aW1lVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVJ1bnRpbWVXb3JraW5nQ29weTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuSVNlcnZlclR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNlcnZlci5jb3JlLklTZXJ2ZXJXb3JraW5nQ29weTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuU2VydmVyQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc2VydmVyLmNvcmUuU2VydmVyVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5Db25maWd1cmF0aW9uTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5HbG9iYWxDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLlZhbGlkYXRvck1ldGFEYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLm9wZXJhdGlvbnMuVmFsaWRhdG9yTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V1NJQ29udGV4dDsKLQotCi1wdWJsaWMgY2xhc3MgSlVuaXRVdGlscyB7Ci0JLy8gQmVnaW4gU2VydmVyIFV0aWxpdGllcwotCXB1YmxpYyBzdGF0aWMgSVJ1bnRpbWUgY3JlYXRlU2VydmVyUnVudGltZShTdHJpbmcgcnVudGltZVR5cGVJZCxTdHJpbmcgc2VydmVySW5zdGFsbFBhdGgpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCUlSdW50aW1lVHlwZSBydCA9IFNlcnZlckNvcmUuZmluZFJ1bnRpbWVUeXBlKHJ1bnRpbWVUeXBlSWQpOwotCQlJUnVudGltZVdvcmtpbmdDb3B5IHdjID0gcnQuY3JlYXRlUnVudGltZSgiYVJ1bnRpbWUiLCBudWxsKTsKLQkJd2Muc2V0TG9jYXRpb24obmV3IFBhdGgoc2VydmVySW5zdGFsbFBhdGgpKTsKLQkJCi0JCXJldHVybiB3Yy5zYXZlKHRydWUsIG51bGwpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgSVNlcnZlciBjcmVhdGVTZXJ2ZXIoU3RyaW5nIG5hbWUsU3RyaW5nIHNlcnZlclR5cGVJZCxJUnVudGltZSBydW50aW1lLElFbnZpcm9ubWVudCBlbnYsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JICBJU2VydmVyVHlwZSBzZXJ2ZXJUeXBlID0gU2VydmVyQ29yZS5maW5kU2VydmVyVHlwZShzZXJ2ZXJUeXBlSWQpOwotICAgICAgSVNlcnZlcltdIHNlcnZlcnMgPSBTZXJ2ZXJDb3JlLmdldFNlcnZlcnMoKTsgCi0gICAgICBmb3IgKGludCBpPTA7aTxzZXJ2ZXJzLmxlbmd0aDtpKyspewotICAgICAgICBpZihzZXJ2ZXJzW2ldLmdldFNlcnZlclR5cGUoKS5nZXRJZCgpLmVxdWFscyhzZXJ2ZXJUeXBlLmdldElkKCkpKXsKLSAgICAgICAgICByZXR1cm4gc2VydmVyc1tpXTsgIAotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIElTZXJ2ZXJXb3JraW5nQ29weSBzZXJ2ZXJXYyA9IHNlcnZlclR5cGUuY3JlYXRlU2VydmVyKHNlcnZlclR5cGVJZCxudWxsLCBtb25pdG9yICk7Ci0JICBzZXJ2ZXJXYy5zZXROYW1lKG5hbWUpOwotCSAgc2VydmVyV2Muc2V0UnVudGltZShydW50aW1lKTsKLSAgICAgIElTZXJ2ZXIgc2VydmVyID0gc2VydmVyV2Muc2F2ZUFsbCh0cnVlLCBtb25pdG9yICk7Ci0gICAgICByZXR1cm4gc2VydmVyOwotCX0JCi0JCi0JLyoqCi0JICogY3JlYXRlU2VydmVyIGFuZCBpbnN0YWxsIEpSRSBmb3IgU2VydmVycyByZXF1aXJpbmcgYSBzcGVjaWZpYyBKUkUKLQkgKiBAcGFyYW0gamF2YVJ1bnRpbWVQYXRoIEpSRSBpbnN0YWxsIGxvY2F0aW9uOyBpLmUuIEU6XFxKYXZhMTQxCi0JICogQHBhcmFtIGpyZUlEIEpSRSBpZDsgaS5lLiBqYXZhMTQxCi0JICogQHBhcmFtIG5hbWUgc2VydmVyIG5hbWUKLQkgKiBAcGFyYW0gc2VydmVyVHlwZUlkIHNlcnZlciB0eXBlIGlkCi0JICogQHBhcmFtIHJ1bnRpbWUgSVJ1bnRpbWUKLQkgKiBAcGFyYW0gZW52IElFbnZpcm9ubWVudAotCSAqIEByZXR1cm4gIHNlcnZlciBJU2VydmVyCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKiAKLQkgKiBAZGVwcmVjYXRlZAotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVNlcnZlciBjcmVhdGVTZXJ2ZXIoU3RyaW5nIGphdmFSdW50aW1lUGF0aCwgU3RyaW5nIGpyZUlELCBTdHJpbmcgbmFtZSxTdHJpbmcgc2VydmVyVHlwZUlkLElSdW50aW1lIHJ1bnRpbWUsSUVudmlyb25tZW50IGVudiwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJSVNlcnZlclR5cGUgc2VydmVyVHlwZSA9IFNlcnZlckNvcmUuZmluZFNlcnZlclR5cGUoc2VydmVyVHlwZUlkKTsKLSAgICBJU2VydmVyW10gc2VydmVycyA9IFNlcnZlckNvcmUuZ2V0U2VydmVycygpOyAKLSAgICBmb3IgKGludCBpPTA7aTxzZXJ2ZXJzLmxlbmd0aDtpKyspewotICAgICAgaWYoc2VydmVyc1tpXS5nZXRTZXJ2ZXJUeXBlKCkuZ2V0SWQoKS5lcXVhbHMoc2VydmVyVHlwZS5nZXRJZCgpKSl7Ci0gICAgICAgIHJldHVybiBzZXJ2ZXJzW2ldOyAgCi0gICAgICB9Ci0gICAgfQotCi0JCUlTZXJ2ZXJXb3JraW5nQ29weSBzZXJ2ZXJXYyA9IHNlcnZlclR5cGUuY3JlYXRlU2VydmVyKHNlcnZlclR5cGVJZCxudWxsLCBtb25pdG9yICk7Ci0JCXNlcnZlcldjLnNldE5hbWUobmFtZSk7Ci0JCXNlcnZlcldjLnNldFJ1bnRpbWUocnVudGltZSk7Ci0JCQotCQlJU2VydmVyIHNlcnZlciA9IHNlcnZlcldjLnNhdmVBbGwodHJ1ZSwgbW9uaXRvciApOwotCQkKLQkJcmV0dXJuIHNlcnZlcjsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyB2b2lkIHN0YXJ0U2VydmVyKElTZXJ2ZXIgc2VydmVyLElFbnZpcm9ubWVudCBlbnYpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCWZpbmFsIElTZXJ2ZXIgY3VycmVudFNlcnZlciA9IHNlcnZlcjsKLQkJSVJ1bm5hYmxlV2l0aFByb2dyZXNzIHJ1bm5hYmxlID0gbmV3IElSdW5uYWJsZVdpdGhQcm9ncmVzcygpCi0JCXsKLQkJCXB1YmxpYyB2b2lkIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uLCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbgotCQkJewotCQkJCXRyeQotCQkJCXsKLQkJCQkgIGN1cnJlbnRTZXJ2ZXIuc3RhcnQoSUxhdW5jaE1hbmFnZXIuUlVOX01PREUsIG1vbml0b3IgKTsKLQkJCQl9Ci0JCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkKLQkJCQl7Ci0JCQkJCUludGVycnVwdGVkRXhjZXB0aW9uIHdyYXBwZXIgPSBuZXcgSW50ZXJydXB0ZWRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwotCQkJCQl3cmFwcGVyLnNldFN0YWNrVHJhY2UoZS5nZXRTdGFja1RyYWNlKCkpOwotCQkJCQl0aHJvdyB3cmFwcGVyOwotCQkJCX0KLQkJCX0KLQkJfTsKLQkJUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRQcm9ncmVzc1NlcnZpY2UoKS5ydW4odHJ1ZSxmYWxzZSxydW5uYWJsZSk7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiByZW1vdmVFQVJGcm9tU2VydmVyKElTZXJ2ZXIgc2VydmVyLElQcm9qZWN0IGVhclByb2plY3QsSUVudmlyb25tZW50IGVudiwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJaW50IG51bWJlck9mTW9kdWxlcyA9IHNlcnZlci5nZXRNb2R1bGVzKCkubGVuZ3RoOwotCQlpZiAoc2VydmVyICE9IG51bGwpCi0JCXsKLSAgICAgIGZpbmFsIElNb2R1bGUgZWFyUHJvamVjdE1vZHVsZSA9IFNlcnZlclV0aWwuZ2V0TW9kdWxlKGVhclByb2plY3QpOwotICAgICAgZmluYWwgSU1vZHVsZVtdIG1vZHVsZXMgPSB7ZWFyUHJvamVjdE1vZHVsZX07Ci0JCQluZXcgU2VydmVyVXRpbHMoKS5tb2RpZnlNb2R1bGVzKGVudiwgc2VydmVyLGVhclByb2plY3RNb2R1bGUsZmFsc2UsIG1vbml0b3IgKTsKLQkJICAJZmluYWwgSVNlcnZlciBjdXJyZW50U2VydmVyID0gc2VydmVyOwotCQkgIAlJUnVubmFibGVXaXRoUHJvZ3Jlc3MgcnVubmFibGUgPSBuZXcgSVJ1bm5hYmxlV2l0aFByb2dyZXNzKCkKLQkJCXsKLQkJICAJCXB1YmxpYyB2b2lkIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uLCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbgotCQkJCXsKLQkJICAJCSAgCWZvciAoaW50IGk9MDtpPDEwMDA7aSsrKQotCQkgIAkJICAJewotCQkgIAkJICAJCWludCBtb2R1bGVTdGF0ZSA9IGN1cnJlbnRTZXJ2ZXIuZ2V0TW9kdWxlU3RhdGUobW9kdWxlcyk7Ci0JCSAgCQkgIAkJaWYgKG1vZHVsZVN0YXRlID09IElTZXJ2ZXIuU1RBVEVfU1RBUlRFRCB8fCBtb2R1bGVTdGF0ZSA9PSBJU2VydmVyLlNUQVRFX1NUT1BQSU5HKQotCQkgIAkJICAJCXsKLQkJICAJCSAgCQkgIHRyeQotCQkgIAkJCQkgIHsKLQkJICAJCSAgCQkgICAgVGhyZWFkLnNsZWVwKDMwMCk7Ci0JCSAgCQkJCSAgfQotCQkgIAkJICAJCSAgY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpCi0JCSAgCQkJCSAgewotCQkgIAkJICAJCSAgICAgIGUucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5lcnIpOwotCQkgIAkJCQkgIH0KLQkJICAJCSAgCQl9Ci0JCSAgCQkgIAkJZWxzZQotCQkgIAkJICAJCQlicmVhazsKLQkJICAJCSAgCX0gIAkJCSAgCQkJCi0JCQkJfSAgCQkKLQkJCX07Ci0JCQlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldFByb2dyZXNzU2VydmljZSgpLnJ1bih0cnVlLGZhbHNlLHJ1bm5hYmxlKTsKLQkJCXJldHVybiAoc2VydmVyLmdldE1vZHVsZXMoKS5sZW5ndGggPT0gKG51bWJlck9mTW9kdWxlcy0xKSk7Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gcmVtb3ZlTW9kdWxlRnJvbVNlcnZlcihJU2VydmVyIHNlcnZlciwgSVByb2plY3Qgd2ViUHJvamVjdCwgSUVudmlyb25tZW50IGVudiwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yICkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JICAKLQkgIGludCBudW1iZXJPZk1vZHVsZXMgPSBzZXJ2ZXIuZ2V0TW9kdWxlcygpLmxlbmd0aDsKLQkJaWYgKHNlcnZlciAhPSBudWxsKQotCQl7Ci0gICAgICBmaW5hbCBJTW9kdWxlIHdlYlByb2plY3RNb2R1bGUgPSBTZXJ2ZXJVdGlsLmdldE1vZHVsZSh3ZWJQcm9qZWN0KTsKLSAgICAgIGZpbmFsIElNb2R1bGVbXSBtb2R1bGVzID0ge3dlYlByb2plY3RNb2R1bGV9OwotCi0JCQluZXcgU2VydmVyVXRpbHMoKS5tb2RpZnlNb2R1bGVzKGVudiwgc2VydmVyLHdlYlByb2plY3RNb2R1bGUsZmFsc2UsIG1vbml0b3IgKTsKLQkJICAJZmluYWwgSVNlcnZlciBjdXJyZW50U2VydmVyID0gc2VydmVyOwotCQkgIAlJUnVubmFibGVXaXRoUHJvZ3Jlc3MgcnVubmFibGUgPSBuZXcgSVJ1bm5hYmxlV2l0aFByb2dyZXNzKCkKLQkJCXsKLQkJICAJCXB1YmxpYyB2b2lkIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uLCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbgotCQkJCXsKLQkJICAJCSAgCWZvciAoaW50IGk9MDtpPDEwMDA7aSsrKQotCQkgIAkJICAJewotCQkgIAkJICAJCWludCBtb2R1bGVTdGF0ZSA9IGN1cnJlbnRTZXJ2ZXIuZ2V0TW9kdWxlU3RhdGUobW9kdWxlcyk7Ci0JCSAgCQkgIAkJaWYgKG1vZHVsZVN0YXRlID09IElTZXJ2ZXIuU1RBVEVfU1RBUlRFRCB8fCBtb2R1bGVTdGF0ZSA9PSBJU2VydmVyLlNUQVRFX1NUT1BQSU5HKQotCQkgIAkJICAJCXsKLQkJICAJCSAgCQkgIHRyeQotCQkgIAkJCQkgIHsKLQkJICAJCSAgCQkgICAgVGhyZWFkLnNsZWVwKDMwMCk7Ci0JCSAgCQkJCSAgfQotCQkgIAkJICAJCSAgY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpCi0JCSAgCQkJCSAgewotCQkgIAkJICAJCSAgICAgIGUucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5lcnIpOwotCQkgIAkJCQkgIH0KLQkJICAJCSAgCQl9Ci0JCSAgCQkgIAkJZWxzZQotCQkgIAkJICAJCQlicmVhazsKLQkJICAJCSAgCX0gIAkJCSAgCQkJCi0JCQkJfSAgCQkKLQkJCX07Ci0JCQlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldFByb2dyZXNzU2VydmljZSgpLnJ1bih0cnVlLGZhbHNlLHJ1bm5hYmxlKTsKLQkJCS8vVGhyZWFkLnNsZWVwKDYwMDApOwotCQkJcmV0dXJuIChzZXJ2ZXIuZ2V0TW9kdWxlcygpLmxlbmd0aCA9PSAobnVtYmVyT2ZNb2R1bGVzLTEpKTsKLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCQotCS8vIEJlZ2luOiBHZW5lcmFsIEVjbGlwc2UgVXRpbGl0aWVzCi0JCi0JcHVibGljIHN0YXRpYyB2b2lkIHN5bmNCdWlsZFByb2plY3QoSVByb2plY3QgcHJvamVjdCxJRW52aXJvbm1lbnQgZW52LCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQlwcm9qZWN0LmJ1aWxkKEluY3JlbWVudGFsUHJvamVjdEJ1aWxkZXIuRlVMTF9CVUlMRCwgbW9uaXRvciApOwotCQlXYWl0Rm9yQXV0b0J1aWxkQ29tbWFuZCBjbWQgPSBuZXcgV2FpdEZvckF1dG9CdWlsZENvbW1hbmQoKTsKLSAgICBjbWQuc2V0RW52aXJvbm1lbnQoIGVudiApOwotCQljbWQuZXhlY3V0ZSggbW9uaXRvciwgbnVsbCApOwotCX0KLQkKLQlwcml2YXRlIHN0YXRpYyB2b2lkIGNvcHlUZXN0RmlsZXMoU3RyaW5nIHBhdGhTdHJpbmcsaW50IHJvb3RTZWdtZW50TGVuZ3RoLElGb2xkZXIgZGVzdEZvbGRlcixJRW52aXJvbm1lbnQgZW52LCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQlFbnVtZXJhdGlvbiBlID0gVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5UGF0aHMocGF0aFN0cmluZyk7Ci0JCXdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKQotCQl7Ci0JCQlTdHJpbmcgZmlsZVBhdGggPSAoU3RyaW5nKWUubmV4dEVsZW1lbnQoKTsKLQkJCWlmIChmaWxlUGF0aC5lbmRzV2l0aCgiLyIpKQotCQkJCWNvcHlUZXN0RmlsZXMoZmlsZVBhdGgscm9vdFNlZ21lbnRMZW5ndGgsZGVzdEZvbGRlcixlbnYsIG1vbml0b3IgKTsKLQkJCWVsc2UKLQkJCXsKLQkJCQlJUGF0aCBmaWxlSVBhdGggPSBuZXcgUGF0aChmaWxlUGF0aCk7Ci0JCQkJRmlsZVJlc291cmNlVXRpbHMuY29weUZpbGUoRW52aXJvbm1lbnRVdGlscy5nZXRSZXNvdXJjZUNvbnRleHQoZW52KSwKLQkJCQkJCSAgICAgICAgICAgICAgICAgICBUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCksCi0JCQkJCQkJCQkJICAgZmlsZUlQYXRoLnJlbW92ZUxhc3RTZWdtZW50cyhmaWxlSVBhdGguc2VnbWVudENvdW50KCktcm9vdFNlZ21lbnRMZW5ndGgpLCAvLyAvZGF0YS88c3ViZGlyPgotCQkJCQkJCQkJCSAgIChuZXcgUGF0aChmaWxlUGF0aCkpLnJlbW92ZUZpcnN0U2VnbWVudHMocm9vdFNlZ21lbnRMZW5ndGgpLCAvLyBmaWxlcyBhZnRlciAvZGF0YS88c3ViZGlyPgotCQkJCQkJCQkJCSAgIGRlc3RGb2xkZXIuZ2V0RnVsbFBhdGgoKSwKLQkJCQkJCQkJCQkgICBtb25pdG9yLAotCQkJCQkJCQkJCSAgIGVudi5nZXRTdGF0dXNIYW5kbGVyKCkpOwotCQkJfQotCQl9Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgdm9pZCBjb3B5VGVzdERhdGEoU3RyaW5nIGRhdGFTdWJkaXJlY3RvcnksSUZvbGRlciBkZXN0Rm9sZGVyLElFbnZpcm9ubWVudCBlbnYsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCVN0cmluZyBwYXRoU3RyaW5nID0gIi9kYXRhLyIrZGF0YVN1YmRpcmVjdG9yeTsKLQkJY29weVRlc3RGaWxlcyhwYXRoU3RyaW5nLG5ldyBQYXRoKHBhdGhTdHJpbmcpLnNlZ21lbnRDb3VudCgpLGRlc3RGb2xkZXIsZW52LCBtb25pdG9yKTsKLQkJCi0JfQotCQotCS8vIEJlZ2luOiBXZWIgU2VydmljZXMgVXRpbGl0aWVzCi0JcHVibGljIHN0YXRpYyB2b2lkIGhpZGVBY3Rpb25EaWFsb2dzKCkKLQl7Ci0JCVBlcnNpc3RlbnRBY3Rpb25EaWFsb2dzQ29udGV4dCBhY3Rpb25EaWFsb2dzQ3R4ID0gUGVyc2lzdGVudEFjdGlvbkRpYWxvZ3NDb250ZXh0LmdldEluc3RhbmNlKCk7Ci0JCUFjdGlvbkRpYWxvZ1ByZWZlcmVuY2VUeXBlW10gYWN0aW9uRGlhbG9nUHJlZnMgID0gYWN0aW9uRGlhbG9nc0N0eC5nZXREaWFsb2dzKCk7Ci0JCWZvciAoaW50IGk9MDtpPGFjdGlvbkRpYWxvZ1ByZWZzLmxlbmd0aDtpKyspCi0JCQlhY3Rpb25EaWFsb2dzQ3R4LnNldEFjdGlvbkRpYWxvZ0VuYWJsZWQoYWN0aW9uRGlhbG9nUHJlZnNbaV0uZ2V0SWQoKSx0cnVlKTsJCQotCX0KLQkKLQotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBlbmFibGVQcm94eUdlbmVyYXRpb24oYm9vbGVhbiBlbmFibGUpCi0JewotCQlTY2VuYXJpb0NvbnRleHQgY3R4ID0gV2ViU2VydmljZVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFNjZW5hcmlvQ29udGV4dCgpOwotCQlib29sZWFuIHByZXZpb3VzU2V0dGluZyA9IGN0eC5nZXRHZW5lcmF0ZVByb3h5KCk7Ci0JCWN0eC5zZXRHZW5lcmF0ZVByb3h5KGVuYWJsZSk7Ci0JCXJldHVybiBwcmV2aW91c1NldHRpbmc7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBlbmFibGVPdmVyd3JpdGUoYm9vbGVhbiBlbmFibGUpCi0JewotCQlSZXNvdXJjZUNvbnRleHQgY3R4ID0gV2ViU2VydmljZVBsdWdpbi5nZXRJbnN0YW5jZSgpLmdldFJlc291cmNlQ29udGV4dCgpOwotCQlib29sZWFuIHByZXZpb3VzU2V0dGluZyA9IGN0eC5pc092ZXJ3cml0ZUZpbGVzRW5hYmxlZCgpOwotCQljdHguc2V0T3ZlcndyaXRlRmlsZXNFbmFibGVkKGVuYWJsZSk7Ci0JCXJldHVybiBwcmV2aW91c1NldHRpbmc7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgdm9pZCBzZXRSdW50aW1lUHJlZmVyZW5jZShTdHJpbmcgcnQpewotCQlQZXJzaXN0ZW50U2VydmVyUnVudGltZUNvbnRleHQgY29udGV4dCA9IFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0U2VydmVyUnVudGltZUNvbnRleHQoKTsKLQkJY29udGV4dC5zZXRSdW50aW1lSWQocnQpOwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIHZvaWQgZGlzYWJsZVdTSURpYWxvZyhJUHJvamVjdCBwcm9qZWN0KXsKLQkgIAotCSAgUGVyc2lzdGVudFdTSUNvbnRleHQgY3R4ID0gV1NQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRXU0lBUENvbnRleHQoKTsKLQkgIGN0eC51cGRhdGVQcm9qZWN0V1NJQ29tcGxpYW5jZXMocHJvamVjdCwgUGVyc2lzdGVudFdTSUNvbnRleHQuSUdOT1JFX05PTl9XU0kpOwotCSAgCi0JICBQZXJzaXN0ZW50V1NJQ29udGV4dCBjdHgyID0gV1NQbHVnaW4uZ2V0SW5zdGFuY2UoKS5nZXRXU0lTU0JQQ29udGV4dCgpOwotCSAgY3R4Mi51cGRhdGVQcm9qZWN0V1NJQ29tcGxpYW5jZXMocHJvamVjdCwgUGVyc2lzdGVudFdTSUNvbnRleHQuSUdOT1JFX05PTl9XU0kpOwotCSAgCi0JfQotCQotCXB1YmxpYyBzdGF0aWMgdm9pZCBzZXRXU1J1bnRpbWVTZXJ2ZXIoU3RyaW5nIHdzUnVudGltZUlkLFN0cmluZyBzZXJ2ZXJUeXBlSWQpCi0JewotCQlQZXJzaXN0ZW50U2VydmVyUnVudGltZUNvbnRleHQgc2VydmVyUnVudGltZUN0eCA9IFdlYlNlcnZpY2VDb25zdW1wdGlvblVJUGx1Z2luLmdldEluc3RhbmNlKCkuZ2V0U2VydmVyUnVudGltZUNvbnRleHQoKTsKLQkJc2VydmVyUnVudGltZUN0eC5zZXRSdW50aW1lSWQod3NSdW50aW1lSWQpOwotCQlzZXJ2ZXJSdW50aW1lQ3R4LnNldFNlcnZlckZhY3RvcnlJZChzZXJ2ZXJUeXBlSWQpOwkJCi0JfQotCQotCi0JcHJpdmF0ZSBzdGF0aWMgSVN0YXR1c1tdIGxhdW5jaFdpemFyZChTdHJpbmcgcGx1Z2luTlMsU3RyaW5nIHdpemFyZElkLFN0cmluZyBvYmplY3RDbGFzc0lkLElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGluaXRpYWxTZWxlY3Rpb24pIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCUFjY3VtdWxhdGVTdGF0dXNIYW5kbGVyIHN0YXR1c0hhbmRsZXIgPSBuZXcgQWNjdW11bGF0ZVN0YXR1c0hhbmRsZXIoKTsKLQotICAgICAgICBEeW5hbWljUG9wdXBKVW5pdFdpemFyZCB3aXphcmQgPSBuZXcgRHluYW1pY1BvcHVwSlVuaXRXaXphcmQoc3RhdHVzSGFuZGxlcik7Ci0gICAgICAgIHdpemFyZC5zZXRJbml0aWFsRGF0YSh3aXphcmRJZCk7Ci0gICAgICAgIFByb2dyZXNzTW9uaXRvckRpYWxvZyBtb25pdG9yID0gbmV3IFByb2dyZXNzTW9uaXRvckRpYWxvZyhQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldFNoZWxsKCkpOwotICAgICAgICB0cnkgewotICAgICAgICAJd2l6YXJkLnJ1bkhlYWRMZXNzKGluaXRpYWxTZWxlY3Rpb24sIG1vbml0b3IpOwotICAgICAgICB9IAotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpewotICAgICAgICAJZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgCXJldHVybiBuZXcgSVN0YXR1c1tde1N0YXR1c1V0aWxzLmVycm9yU3RhdHVzKGUpfTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gc3RhdHVzSGFuZGxlci5nZXRBbGxSZXBvcnRzKCk7Ci0KLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBJU3RhdHVzW10gbGF1bmNoQ3JlYXRpb25XaXphcmQoU3RyaW5nIHdpemFyZElkLFN0cmluZyBvYmplY3RDbGFzc0lkLElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGluaXRpYWxTZWxlY3Rpb24pIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCXJldHVybiBsYXVuY2hXaXphcmQoIm9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aSIsd2l6YXJkSWQsb2JqZWN0Q2xhc3NJZCxpbml0aWFsU2VsZWN0aW9uKTsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBJU3RhdHVzW10gbGF1bmNoQ29uc3VtcHRpb25XaXphcmQoU3RyaW5nIHdpemFyZElkLFN0cmluZyBvYmplY3RDbGFzc0lkLElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGluaXRpYWxTZWxlY3Rpb24pIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCXJldHVybiBsYXVuY2hXaXphcmQoIm9yZy5lY2xpcHNlLmpzdC53cy5pbnRlcm5hbC5jb25zdW1wdGlvbi51aSIsd2l6YXJkSWQsb2JqZWN0Q2xhc3NJZCxpbml0aWFsU2VsZWN0aW9uKTsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBJU3RhdHVzIGNyZWF0ZVdlYk1vZHVsZShTdHJpbmcgd2ViUHJvamVjdE5hbWUsIFN0cmluZyBtb2R1bGVOYW1lLCBTdHJpbmcgc2VydmVyRmFjdG9yeUlkLCBTdHJpbmcgajJlZVZlcnNpb24sIElFbnZpcm9ubWVudCBlbnYsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvciApewotCi0JICBJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0JICB0cnl7Ci0JICAgIENyZWF0ZU1vZHVsZUNvbW1hbmQgY3JlYXRlV2ViID0gbmV3IENyZWF0ZU1vZHVsZUNvbW1hbmQoKTsKLQkgICAgY3JlYXRlV2ViLnNldFByb2plY3ROYW1lKHdlYlByb2plY3ROYW1lKTsKLSAgICAgICAgY3JlYXRlV2ViLnNldE1vZHVsZU5hbWUobW9kdWxlTmFtZSk7Ci0gICAgICAgIGNyZWF0ZVdlYi5zZXRNb2R1bGVUeXBlKENyZWF0ZU1vZHVsZUNvbW1hbmQuV0VCKTsKLQkgICAgY3JlYXRlV2ViLnNldEoyZWVMZXZlbChqMmVlVmVyc2lvbik7Ci0JICAgIGNyZWF0ZVdlYi5zZXRTZXJ2ZXJGYWN0b3J5SWQoc2VydmVyRmFjdG9yeUlkKTsKLSAgICAgICAgY3JlYXRlV2ViLnNldEVudmlyb25tZW50KCBlbnYgKTsKLQkgICAgcmV0dXJuIGNyZWF0ZVdlYi5leGVjdXRlKCBtb25pdG9yLCBudWxsICk7Ci0JICB9Ci0JICBjYXRjaCAoRXhjZXB0aW9uIGUpewotCSAgICBzdGF0dXMgPSBTdGF0dXNVdGlscy5lcnJvclN0YXR1cyggZSApOwotCSAgfQotCSAgcmV0dXJuIHN0YXR1czsKLQkgIAotCX0KLQkKLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gZGlzYWJsZVZhbGlkYXRpb24oSVByb2plY3QgcHJvamVjdCl7Ci0JCQotICAgIAkvLyBkaXNhYmxlIHZhbGlkYXRvcnMgZm9yIHByb2plY3QKLQkJdHJ5Ci0JCXsKLQkJCVZhbGlkYXRvck1hbmFnZXIgdm0gPSBWYWxpZGF0b3JNYW5hZ2VyLmdldE1hbmFnZXIoKTsKLQkJCXZtLmRpc2FibGVBbGxWYWxpZGF0b3JzKHByb2plY3QsIG51bGwpOwkJCQotCQkJCi0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKQotCQl7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkZhaWxlZCB0byBzZXQgVmFsaWRhdG9ycy4uLiIpOwotCQl9Ci0JCQotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0JCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3V0aWwvU2NlbmFyaW9Db25zdGFudHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdXRpbC9TY2VuYXJpb0NvbnN0YW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTllNWJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdXRpbC9TY2VuYXJpb0NvbnN0YW50cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy51dGlsOwotCi1wdWJsaWMgY2xhc3MgU2NlbmFyaW9Db25zdGFudHMgewotCS8vIEJvdHRvbSB1cCBKYXZhIG9yIEVKQiB0byBXZWIgU2VydmljZSB3aXphcmQgSUQuCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgV0laQVJESURfQk9UVE9NX1VQID0gIm9yZy5lY2xpcHNlLmpzdC53cy5jcmVhdGlvbi51aS53aXphcmQuc2VydmVyd2l6YXJkIjsKLQkKLQkvLyBUb3AgZG93biBXU0RMIHRvIFNrZWxldG9uIFdlYiBTZXJ2aWNlIHdpemFyZCBJRC4KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBXSVpBUkRJRF9UT1BfRE9XTiA9ICJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZCI7Ci0JCi0JLy8gV2ViIFNlcnZpY2UgY2xpZW50IHdpemFyZCBJRC4KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBXSVpBUkRJRF9DTElFTlQgPSAib3JnLmVjbGlwc2UuanN0LndzLmludGVybmFsLmNvbnN1bXB0aW9uLnVpLndpemFyZC5jbGllbnQuY2xpZW50d2l6YXJkIjsJCi0JCi0JLy8gT2JqZWN0IGNsYXNzIGZvcjoKLQkvLyAxKSBKYXZhIHNvdXJjZSAoYm90dG9tLXVwKQotCS8vIDIpIFdTREwgb3IgV1NJTCAodG9wLWRvd24gb3IgY2xpZW50KS4KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBPQkpFQ1RfQ0xBU1NfSURfSUZJTEUgPSAib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGUiOwotCQotCS8vIE9iamVjdCBjbGFzcyBmb3IgSmF2YSBjb21waWxhdGlvbiB1bml0cyAoaS5lLiBKYXZhIGNsYXNzZXMgc2VsZWN0ZWQgaW4gdGhlIEphdmEgcGVyc3BlY3RpdmUpLgotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE9CSkVDVF9DTEFTU19JRF9DT01QSUxBVElPTlVOSVQgPSAib3JnLmVjbGlwc2UuamR0LmludGVybmFsLmNvcmUuQ29tcGlsYXRpb25Vbml0IjsKLQkKLQkvLyBPYmplY3QgY2xhc3MgZm9yIGEgc2VydmljZSBzZWxlY3RlZCBpbiB0aGUgSjJFRSBwZXJzcGVjdGl2ZSAodG9wLWRvd24gb3IgY2xpZW50KS4KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBPQkpFQ1RfQ0xBU1NfSURfU0VSVklDRUlNUEwgPSAib3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZSI7Ci0JCi0JLy8gT2JqZWN0IGNsYXNzIGZvciBhIFdTRExSZXNvdXJjZUltcGwgKHRvcC1kb3duIG9yIGNsaWVudCkuCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgT0JKRUNUX0NMQVNTX0lEX1dTRExTRVJWSUNFSU1QTCA9ICJvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC51dGlsLldTRExSZXNvdXJjZUltcGwiOwotCQotCS8vIE9iamVjdCBjbGFzcyBmb3IgYSBTZXJ2aWNlUmVmICh0b3AtZG93biBvciBjbGllbnQpLgotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE9CSkVDVF9DTEFTU19JRF9TRVJWSUNFUkVGID0gIm9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NjbGllbnQuU2VydmljZVJlZiI7Ci0JCi0JLy8gT2JqZWN0IGNsYXNzIGZvciBhIFNlcnZpY2VJbXBsQmVhbiAoYm90dG9tLXVwKS4KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBPQkpFQ1RfQ0xBU1NfSURfU0VSVklDRUlNUExCRUFOID0gIm9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5TZXJ2aWNlSW1wbEJlYW4iOwotCQotCS8vIE9iamVjdCBjbGFzcyBmb3IgYSBCZWFuTGluayAoYm90dG9tLXVwKS4KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBPQkpFQ1RfQ0xBU1NfSURfQkVBTkxJTksgPSAib3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLkJlYW5MaW5rIjsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdXRpbC9XU0N1c3RvbUFkYXB0ZXJGYWN0b3J5LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2UvanN0L3dzL3Rlc3RzL3V0aWwvV1NDdXN0b21BZGFwdGVyRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYWI4NGVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS9qc3Qvd3MvdGVzdHMvdXRpbC9XU0N1c3RvbUFkYXB0ZXJGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMzI3ICAgMTcyMzM5IGthdGh5QGNhLmlibS5jb20gLSBLYXRoeSBDaGFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LndzLnRlc3RzLnV0aWw7Ci0KLWltcG9ydCBqYXZhLm5ldC5VUkk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0ZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZW0udXRpbC5lbWYud29ya2JlbmNoLlByb2plY3RVdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLlNlcnZsZXRMaW5rOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qMmVlLndlYnNlcnZpY2Uud3NkZC5TZXJ2aWNlSW1wbEJlYW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmoyZWUud2Vic2VydmljZS53c2RkLldlYlNlcnZpY2VEZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLkoyRUVVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3Qud3MuaW50ZXJuYWwuY29tbW9uLlJlc291cmNlVXRpbHM7Ci0KLS8qKgotICogVGhlIFdTQ3VzdG9tQWRhcHRlckZhY3RvcnkgaXMgYW4gQWRhcHRlckZhY3Rvcnkgc2ltaWxhciB0byBvbmUgYW4gYWRvcHRlciB3b3VsZCBwcm92aWRlIHRvIGFkYXB0IGEgY3VzdG9tIG9iamVjdCAKLSAqIHRvIGEgV1NETCB1cmkgdGhhdCB0aGUgV2ViIHNlcnZpY2VzIHdpemFyZHMgYW5kIHRoZSBXZWIgU2VydmljZXMgRXhwbG9yZXIgd291bGQgdGFrZSBhcyBpbnB1dC4gIFRoZSBTZXJ2bGV0IExpbmssIAotICogcmVwcmVzZW50aW5nIHRoZSBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIHVuZGVyIHRoZSBKU1ItMTA5IFdlYiBzZXJ2aWNlcyBicmFuY2ggb2YgdGhlIEoyRUUgUHJvamVjdCBFeHBsb3JlciwgaXMgCi0gKiB1c2VkIGFzIHRoZSAiY3VzdG9tIG9iamVjdCIgaW4gdGhpcyB0ZXN0LgotICoKLSAqLwotcHVibGljIGNsYXNzIFdTQ3VzdG9tQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cyBJQWRhcHRlckZhY3RvcnkgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgQ2xhc3NbXSB0eXBlcyA9IHsKLQkJSUZpbGUuY2xhc3MsIFN0cmluZy5jbGFzcwotCX07Ci0JCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGVyRmFjdG9yeSNnZXRBZGFwdGVyKGphdmEubGFuZy5PYmplY3QsIGphdmEubGFuZy5DbGFzcykKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGdldEFkYXB0ZXIoT2JqZWN0IGFkYXB0YWJsZU9iamVjdCwgQ2xhc3MgYWRhcHRlclR5cGUpIHsKLQkJaWYgKGFkYXB0YWJsZU9iamVjdCBpbnN0YW5jZW9mIFNlcnZsZXRMaW5rICYmICgoYWRhcHRlclR5cGUgPT0gSUZpbGUuY2xhc3MgKSB8fCAoYWRhcHRlclR5cGUgPT0gU3RyaW5nLmNsYXNzKSkpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiZ2V0QWRhcHRlciBvbiAiK2FkYXB0YWJsZU9iamVjdC50b1N0cmluZygpKTsKLQkJCVNlcnZsZXRMaW5rIGJlYW5MaW5rID0gKFNlcnZsZXRMaW5rKSBhZGFwdGFibGVPYmplY3Q7Ci0KLQkJCUlGaWxlIHdzZGxGaWxlID0gZ2V0V1NETEZpbGUoYmVhbkxpbmspOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJ3c2RsRmlsZSA9ICIrd3NkbEZpbGUpOwotCQkJaWYgKGFkYXB0ZXJUeXBlID09IElGaWxlLmNsYXNzKSB7Ci0JCQkJcmV0dXJuIHdzZGxGaWxlOwotCQkJfSBlbHNlIAotCQkJCWlmIChhZGFwdGVyVHlwZSA9PSBTdHJpbmcuY2xhc3MpIHsKLQkJCQkJVVJJIHdzZGxVcmkgPSB3c2RsRmlsZS5nZXRMb2NhdGlvblVSSSgpOwotCQkJCQlTdHJpbmcgd3NkbEZpbGVTdHJpbmcgPSBudWxsOwotCQkJCQlpZiAod3NkbFVyaSAhPSBudWxsKSB7Ci0JCQkJCQl3c2RsRmlsZVN0cmluZyA9IHdzZGxVcmkudG9TdHJpbmcoKTsKLQkJCQkJCVN5c3RlbS5vdXQucHJpbnRsbigid3NkbEZpbGVTdHJpbmcgPSAiK3dzZGxGaWxlU3RyaW5nKTsKLQkJCQkJfQotCQkJCQlyZXR1cm4gd3NkbEZpbGVTdHJpbmc7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJcmV0dXJuIG51bGw7Ci0JCQkJfQotCQl9Ci0JCWVsc2UgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0ZXJGYWN0b3J5I2dldEFkYXB0ZXJMaXN0KCkKLQkgKi8KLQlwdWJsaWMgQ2xhc3NbXSBnZXRBZGFwdGVyTGlzdCgpIHsKLQkJcmV0dXJuIHR5cGVzOwotCX0KLQkKLQkvKioKLQkgKiBAcGFyYW0gYmVhbiBUaGUgU2VydmljZUltcGxCZWFuCi0JICogQHJldHVybiBUaGUgSUZpbGUgcmVwcmVzZW50aW5nIHRoZSBXU0RMIGZpbGUgZm9yIHRoaXMgU2VydmljZUltcGxCZWFuLgotCSAqLwotCXByaXZhdGUgSUZpbGUgZ2V0V1NETEZpbGUoU2VydmljZUltcGxCZWFuIGJlYW4pIHsKLQkJICBFT2JqZWN0IGVPYmplY3QgPSBiZWFuLmVDb250YWluZXIoKTsKLQkJICBpZiAoZU9iamVjdCA9PSBudWxsKQotCQkJICByZXR1cm4gbnVsbDsKLQkgICAgICAgICAgCi0JCSAgZU9iamVjdCA9IGVPYmplY3QuZUNvbnRhaW5lcigpOwotCSAgICAgIAotCQkgIGlmIChlT2JqZWN0IGluc3RhbmNlb2YgV2ViU2VydmljZURlc2NyaXB0aW9uKSB7Ci0JCQkgIFdlYlNlcnZpY2VEZXNjcmlwdGlvbiB3c2QgPSAoV2ViU2VydmljZURlc2NyaXB0aW9uKSBlT2JqZWN0OwotCQkJICAKLQkJCSAgSVByb2plY3QgcHJvamVjdCA9IFByb2plY3RVdGlsaXRpZXMuZ2V0UHJvamVjdCh3c2QpOyAgICAJICAKLQkgICAgCSAgCi0JCQkgIElQYXRoIHBhdGggPSBKMkVFVXRpbHMuZ2V0V2ViQ29udGVudFBhdGgocHJvamVjdCk7ICAgIAkgCi0JCQkgIHBhdGggPSBwYXRoLmFwcGVuZCh3c2QuZ2V0V3NkbEZpbGUoKSk7IAotCQkJICByZXR1cm4gUmVzb3VyY2VVdGlscy5nZXRXb3Jrc3BhY2VSb290KCkuZ2V0RmlsZShwYXRoKTsgCSAgCi0JCQkgICAgICAJICAgIAotCQkgIH0KLQkJICByZXR1cm4gbnVsbDsKLQkgIH0KLQkgIAotCSAgLyoqCi0JICogQHBhcmFtIGxpbmsgVGhlIFNlcnZsZXRMaW5rCi0JICogQHJldHVybiBUaGUgSUZpbGUgcmVwcmVzZW50aW5nIHRoZSBXU0RMIGZpbGUgZm9yIHRoaXMgU2VydmxldExpbmsKLQkgKi8KLQlwcml2YXRlIElGaWxlIGdldFdTRExGaWxlKFNlcnZsZXRMaW5rIGxpbmspIHsKLQkJICBFT2JqZWN0IGVPYmplY3QgPSBsaW5rLmVDb250YWluZXIoKTsKLQkJICBpZiAoZU9iamVjdCBpbnN0YW5jZW9mIFNlcnZpY2VJbXBsQmVhbikKLQkJCSAgcmV0dXJuIGdldFdTRExGaWxlKChTZXJ2aWNlSW1wbEJlYW4pIGVPYmplY3QpOwotCQkgIHJldHVybiBudWxsOwotCSAgfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjg5OGNjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJ0ZXN0cyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjQiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTc3NjNlYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotYmluCi1idWlsZC54bWwKLXRlbXAuZm9sZGVyCi10ZXN0cy5qYXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTVmMmJjZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Qud3MudGVzdHM8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmZDEwNDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLSNNb24gSmFuIDMwIDEwOjI5OjE0IEVTVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTg3YThhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotI01vbiBBcHIgMjQgMTA6Mjc6NTQgRURUIDIwMDYKLWNvbXBpbGVycy5wLmJ1aWxkPTEKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTEKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTEKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3MjA1ZmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJVBMVUdJTl9OQU1FCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3Qud3MudGVzdHM7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4yMDEucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3Qud3MudGVzdHMucGx1Z2luLlRlc3RzUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlUExVR0lOX1BST1ZJREVSCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS53c3Qud3MsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5qdW5pdDtidW5kbGUtdmVyc2lvbj0iWzMuOC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmVjbGlwc2UuZGVidWcuY29yZSwKLSBvcmcuZWNsaXBzZS5qZW0udXRpbCwKLSBvcmcuZWNsaXBzZS5qZmFjZSwKLSBvcmcuZWNsaXBzZS51aSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5mcmFtZXdvcmtzLAotIG9yZy5lY2xpcHNlLndzdC5zZXJ2ZXIuY29yZSwKLSBvcmcuZWNsaXBzZS53c3Qud3MudWksCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LnVpLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24uZW52aXJvbm1lbnQsCi0gb3JnLmVjbGlwc2UuZW1mLmVjb3JlLAotIG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLmRhdGEsCi0gb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLnBsdWdpbiwKLSBvcmcuZWNsaXBzZS53c3Qud3MudGVzdHMudW5pdHRlc3QKLUJ1bmRsZS1DbGFzc1BhdGg6IHRlc3RzLmphcgotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGIzNmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lIDA2LCAyMDA3PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczMWI5MjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1iaW4uaW5jbHVkZXMgPSBkYXRhLyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIHJlYWRtZS50eHQsXAotICAgICAgICAgICAgICAgdGVzdHMuamFyLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCi1qYXJzLmNvbXBpbGUub3JkZXIgPSB0ZXN0cy5qYXIKLXNvdXJjZS50ZXN0cy5qYXIgPSB0ZXN0cy8KLW91dHB1dC50ZXN0cy5qYXIgPSBiaW4vCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvZGF0YS9sb2NhdG9yL3Rlc3Qud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9kYXRhL2xvY2F0b3IvdGVzdC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYmQzMWNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9kYXRhL2xvY2F0b3IvdGVzdC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnL0FyZWFTZXJ2aWNlLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IkFyZWFTZXJ2aWNlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9BcmVhU2VydmljZS8iPgotICA8d3NkbDp0eXBlcz4KLSAgICA8eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9BcmVhU2VydmljZS8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDpmbG9hdCIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9InRuczpkaW1lbnNpb25zIi8+Ci0gICAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9ImRpbWVuc2lvbnMiPgotICAgICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJ3aWR0aCIgdHlwZT0ieHNkOmZsb2F0Ij48L3hzZDplbGVtZW50PgotICAgICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iaGVpZ2h0IiB0eXBlPSJ4c2Q6ZmxvYXQiPjwveHNkOmVsZW1lbnQ+Ci0gICAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDwveHNkOnNjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IkNhbGN1bGF0ZVJlY3RBcmVhUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgZWxlbWVudD0idG5zOmFyZWEiIG5hbWU9ImFyZWEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iQ2FsY3VsYXRlUmVjdEFyZWFSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpwYXJhbWV0ZXJzIiBuYW1lPSJwYXJhbWV0ZXJzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJBcmVhU2VydmljZSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9IkNhbGN1bGF0ZVJlY3RBcmVhIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpDYWxjdWxhdGVSZWN0QXJlYVJlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6Q2FsY3VsYXRlUmVjdEFyZWFSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJBcmVhU2VydmljZVNPQVAiIHR5cGU9InRuczpBcmVhU2VydmljZSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9IkNhbGN1bGF0ZVJlY3RBcmVhIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvQXJlYVNlcnZpY2UvTmV3T3BlcmF0aW9uIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQXJlYVNlcnZpY2UiPgotICAgIDx3c2RsOnBvcnQgYmluZGluZz0idG5zOkFyZWFTZXJ2aWNlU09BUCIgbmFtZT0iQXJlYVNlcnZpY2VTT0FQIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9kYXRhL3dzZGxjb3BpZXIvMS8yLzMvdGVzdC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL2RhdGEvd3NkbGNvcGllci8xLzIvMy90ZXN0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4ZDYyYjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL2RhdGEvd3NkbGNvcGllci8xLzIvMy90ZXN0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgCi0JeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi0JeG1sbnM6dGVzdD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy90ZXN0LyIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvdGVzdC8iCi0JeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIKLQl4bWxuczp0eHNkPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3Rlc3R4c2QiCi0JeG1sbnM6dHhzZDI9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvdGVzdHhzZDIiPgotCi0JPHdzZGw6dHlwZXM+Ci0JCTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLSAJCSAgICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy90ZXN0eHNkMiIKLQkJCQlzY2hlbWFMb2NhdGlvbj0iLi4vLi4vMmEvdGVzdC54c2QiIC8+Ci0JCQk8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy90ZXN0eHNkIgotCQkJCXNjaGVtYUxvY2F0aW9uPSIuLi8uLi8uLi90ZXN0LnhzZCIgLz4KLQkJPC9zY2hlbWE+Ci0JPC93c2RsOnR5cGVzPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci0JCTx3c2RsOnBhcnQgbmFtZT0iaW5wdXQiIGVsZW1lbnQ9InR4c2Q6VGVzdFN0cmluZyI+PC93c2RsOnBhcnQ+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0JCTx3c2RsOnBhcnQgbmFtZT0ib3V0cHV0IiBlbGVtZW50PSJ0eHNkMjpUZXN0U3RyaW5nMiI+PC93c2RsOnBhcnQ+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6cG9ydFR5cGUgbmFtZT0iVGVzdFBvcnRUeXBlIj4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0JCQk8d3NkbDppbnB1dCBtZXNzYWdlPSJ0ZXN0Ok5ld09wZXJhdGlvblJlcXVlc3QiPjwvd3NkbDppbnB1dD4KLQkJCTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0ZXN0Ok5ld09wZXJhdGlvblJlc3BvbnNlIj48L3dzZGw6b3V0cHV0PgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpwb3J0VHlwZT4KLQk8d3NkbDpiaW5kaW5nIG5hbWU9Ik5ld0JpbmRpbmciIHR5cGU9InRlc3Q6VGVzdFBvcnRUeXBlIj4KLQkJPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiCi0JCQl0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIgLz4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0JCQk8c29hcDpvcGVyYXRpb24KLQkJCQlzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3Rlc3QvTmV3T3BlcmF0aW9uIiAvPgotCQkJPHdzZGw6aW5wdXQ+Ci0JCQkJPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIC8+Ci0JCQk8L3dzZGw6aW5wdXQ+Ci0JCQk8d3NkbDpvdXRwdXQ+Ci0JCQkJPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIC8+Ci0JCQk8L3dzZGw6b3V0cHV0PgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpiaW5kaW5nPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL2RhdGEvd3NkbGNvcGllci8xLzJhL3N0YXJ0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvZGF0YS93c2RsY29waWVyLzEvMmEvc3RhcnQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWY2MjdiYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvZGF0YS93c2RsY29waWVyLzEvMmEvc3RhcnQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucwotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zdGFydC8iCQkKLQl4bWxuczp0ZXN0PSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3Rlc3QvIgotCXhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iCSAKLQl4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0KLQk8d3NkbDppbXBvcnQgbG9jYXRpb249Ii4uLzIvMy90ZXN0LndzZGwiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy90ZXN0LyIvPgotCQotCTx3c2RsOnR5cGVzPgotCQk8c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0JCQk8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy90ZXN0eHNkIgotCQkJCXNjaGVtYUxvY2F0aW9uPSIuLi8uLi90ZXN0LnhzZCIgLz4KLQkJPC9zY2hlbWE+Ci0JPC93c2RsOnR5cGVzPgotCQotCTx3c2RsOnNlcnZpY2UgbmFtZT0iU3RhcnQiPgotCQk8d3NkbDpwb3J0IG5hbWU9Ik5ld1BvcnQiIGJpbmRpbmc9InRlc3Q6TmV3QmluZGluZyI+Ci0JCQk8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyI+PC9zb2FwOmFkZHJlc3M+Ci0JCTwvd3NkbDpwb3J0PgotCTwvd3NkbDpzZXJ2aWNlPgotCQotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL2RhdGEvd3NkbGNvcGllci8xLzJhL3Rlc3QueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL2RhdGEvd3NkbGNvcGllci8xLzJhL3Rlc3QueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjZmZmUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9kYXRhL3dzZGxjb3BpZXIvMS8yYS90ZXN0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgCi0JeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy90ZXN0eHNkMiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+Ci0gICAgPGVsZW1lbnQgbmFtZT0iVGVzdFN0cmluZzIiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvZGF0YS93c2RsY29waWVyL3Rlc3QueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL2RhdGEvd3NkbGNvcGllci90ZXN0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTFlNjQ2Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvZGF0YS93c2RsY29waWVyL3Rlc3QueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSAKLQl4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3Rlc3R4c2QiIAotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KLSAgICA8ZWxlbWVudCBuYW1lPSJUZXN0U3RyaW5nIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL2ljb25zL2Z1bGwvd2l6YmFuL3dlYnNlcnZpY2VzX3dpei5wbmcgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvaWNvbnMvZnVsbC93aXpiYW4vd2Vic2VydmljZXNfd2l6LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODUyMGZiNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvaWNvbnMvZnVsbC93aXpiYW4vd2Vic2VydmljZXNfd2l6LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjkzM2VjMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgeXl5eW1tZGQgYnVnICAgICAgRW1haWwgYW5kIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb24KLSMgLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgMjAwNjA0MjQgICAxMzgwNjAga2F0aHlAY2EuaWJtLmNvbSAtIEthdGh5IENoYW4KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIwotIyBNZXNzYWdlcyBpbiBwbHVnaW4ueG1sLgotIwotUExVR0lOX05BTUU9V1NUIFdlYiBTZXJ2aWNlcyBUZXN0Ci1QTFVHSU5fUFJPVklERVI9RWNsaXBzZS5vcmcKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9wbHVnaW4ueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkNTI5YTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotCi08cGx1Z2luPgotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnBvcHVwTWVudXMiPgotICAgICAgPG9iamVjdENvbnRyaWJ1dGlvbgotICAgICAgICAgICAgb2JqZWN0Q2xhc3M9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy50ZXN0LnBvcHVwLmNvbnRyaWJ1dGlvbjEiPgotICAgICAgICAgPG1lbnUKLSAgICAgICAgICAgICAgIGxhYmVsPSJQb3B1cCB0ZXN0IG1lbnUiCi0gICAgICAgICAgICAgICBwYXRoPSJhZGRpdGlvbnMiCi0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LndzLnRlc3QucG9wdXAubWVudTEiPgotICAgICAgICAgICAgPHNlcGFyYXRvcgotICAgICAgICAgICAgICAgICAgbmFtZT0iZ3JvdXAxIj4KLSAgICAgICAgICAgIDwvc2VwYXJhdG9yPgotICAgICAgICAgPC9tZW51PgotICAgICAgICAgPGFjdGlvbgotICAgICAgICAgICAgICAgbGFiZWw9IlBvcHVwIHRlc3QgYWN0aW9uIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53cy50ZXN0LnBvcHVwLk5ld0FjdGlvbiIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJvcmcuZWNsaXBzZS53c3Qud3MudGVzdC5wb3B1cC5tZW51MS9ncm91cDEiCi0gICAgICAgICAgICAgICBlbmFibGVzRm9yPSIxIgotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53cy50ZXN0LnBvcHVwLm5ld0FjdGlvbiI+Ci0gICAgICAgICA8L2FjdGlvbj4KLSAgICAgIDwvb2JqZWN0Q29udHJpYnV0aW9uPgotICAgPC9leHRlbnNpb24+Ci0gICAgCi08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy9yZWFkbWUudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3JlYWRtZS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxZGUwMzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3JlYWRtZS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLUN1cnJlbnRseSBubyBhcmd1bWVudHMgdG8gYmUgcGFzc2VkIGluLiAgU2VlIG9yZy5lY2xpcHNlLmpzdC53cy50ZXN0cyBmb3IgYWRkaW5nCi1hcmd1bWVudHMgd2hlbiBydW5uaW5nIHRlc3Qgc3VpdGUgKGkuZS4gc2VydmVyIGluc3RhbGwgbG9jYXRpb24uLi4pCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyOTFhY2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci0KLTxwcm9qZWN0IG5hbWU9InRlc3RzdWl0ZSIgZGVmYXVsdD0icnVuIiBiYXNlZGlyPSIuIj4KLSAgPCEtLSBUaGUgcHJvcGVydHkgJHtlY2xpcHNlLWhvbWV9IHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KLSAgPCEtLSBTZXQgYSBtZWFuaW5nZnVsIGRlZmF1bHQgdmFsdWUgZm9yIHdoZW4gaXQgaXMgbm90LiAtLT4KLSA8IS0tIDxwcm9wZXJ0eSBuYW1lPSJlY2xpcHNlLWhvbWUiIHZhbHVlPSIke2Jhc2VkaXJ9XC4uXC4uIi8+IC0tPgotCTxlY2hvIG1lc3NhZ2U9ImJhc2VkaXIgJHtiYXNlZGlyfSIgLz4KLQk8ZWNobyBtZXNzYWdlPSJlY2xpcHNlIHBsYWNlICR7ZWNsaXBzZS1ob21lfSIgLz4KLSAgPCEtLSBzZXRzIHRoZSBwcm9wZXJ0aWVzIHBsdWdpbi1uYW1lLCBhbmQgbGlicmFyeS1maWxlIC0tPgotICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3MudGVzdHMiLz4KLSAgPHByb3BlcnR5IG5hbWU9ImxpYnJhcnktZmlsZSIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiLz4KLSAgPCEtLSBjb21tZW50ZWQgZm9yIG5vdyB1bnRpbCBzdWNoIGEgdGltZSBhcyB3ZSBuZWVkIHRvIGNhbGwgYSBzZXJ2ZXIgZm9yIHdzdCB0ZXN0cyAtLT4KLSAgPCEtLTxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9Ii1Eb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQuNTA9JHt0ZXN0RGlyfS8ke3RvbWNhdDUwRGlyfSIvPiAtLT4KLQkKLSAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotICA8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgotICA8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KLSAgPHRhcmdldCBuYW1lPSJpbml0Ij4KLSAgICA8dHN0YW1wLz4KLSAgICA8ZGVsZXRlPgotICAgICAgPGZpbGVzZXQgZGlyPSIke2VjbGlwc2UtaG9tZX0iIGluY2x1ZGVzPSJvcmcqLnhtbCIvPgotICAgIDwvZGVsZXRlPgotICA8L3RhcmdldD4KLQotICA8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgotICA8dGFyZ2V0IG5hbWU9InN1aXRlIj4KLSAgICA8cHJvcGVydHkgbmFtZT0id3N0LXdzLWZvbGRlciIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS93c3Rfd3NfZm9sZGVyIi8+Ci0gICAgPGRlbGV0ZSBkaXI9IiR7d3N0LWZvbGRlcn0iIHF1aWV0PSJ0cnVlIi8+Ci0gICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3c3Qtd3MtZm9sZGVyfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3MudGVzdHMudW5pdHRlc3QuQWxsV1NKVW5pdFRlc3RzIiAvPgotICAgCSAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1wYXRoIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iLz4KLTwhLS0gICAJICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPiAgICAJLS0+Ci0gICAgPC9hbnQ+Ci0gIDwvdGFyZ2V0PgotCi0gIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0gIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KLSAgPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLSAgPC90YXJnZXQ+Ci0KLSAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgotICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0gIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgotICAgIDxhbnQgdGFyZ2V0PSJjb2xsZWN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJpbmNsdWRlcyIgdmFsdWU9Im9yZyoueG1sIi8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0ib3V0cHV0LWZpbGUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiLz4KLSAgICA8L2FudD4KLSAgPC90YXJnZXQ+Ci08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3QvcG9wdXAvTmV3QWN0aW9uLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3QvcG9wdXAvTmV3QWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmYTFiZTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0L3BvcHVwL05ld0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MudGVzdC5wb3B1cDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklBY3Rpb25EZWxlZ2F0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JT2JqZWN0QWN0aW9uRGVsZWdhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5pbnRlcm5hbC5lbnYudWkud2lkZ2V0cy5EeW5hbWljV2l6YXJkOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci0KLXB1YmxpYyBjbGFzcyBOZXdBY3Rpb24gaW1wbGVtZW50cyBJT2JqZWN0QWN0aW9uRGVsZWdhdGUgewotCi0gIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbjsKLSAgCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEFjdGlvbjEuCi0JICovCi0JcHVibGljIE5ld0FjdGlvbigpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElPYmplY3RBY3Rpb25EZWxlZ2F0ZSNzZXRBY3RpdmVQYXJ0KElBY3Rpb24sIElXb3JrYmVuY2hQYXJ0KQotCSAqLwotCXB1YmxpYyB2b2lkIHNldEFjdGl2ZVBhcnQoSUFjdGlvbiBhY3Rpb24sIElXb3JrYmVuY2hQYXJ0IHRhcmdldFBhcnQpIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElBY3Rpb25EZWxlZ2F0ZSNydW4oSUFjdGlvbikKLQkgKi8KLQlwdWJsaWMgdm9pZCBydW4oSUFjdGlvbiBhY3Rpb24pIAotCXsKLQkgIER5bmFtaWNXaXphcmQgd2l6YXJkID0gbmV3IER5bmFtaWNXaXphcmQoKTsKLQkgIFdpemFyZERpYWxvZyAgZGlhbG9nID0gbmV3IFdpemFyZERpYWxvZyggbnVsbCwgd2l6YXJkICk7Ci0JICAKLQkgIHRyeQotCSAgewotCSAgICBCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKCAib3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzIiApOwotCSAgICB3aXphcmQuc2V0SW5pdGlhbERhdGEoICJvcmcuZWNsaXBzZS5qc3Qud3MuY3JlYXRpb24udWkud2l6YXJkLnNlcnZlcndpemFyZCIsIGJ1bmRsZSwgImljb25zL2Z1bGwvd2l6YmFuL3dlYnNlcnZpY2VzX3dpei5wbmciLCAiUGV0ZXIgdGl0bGUiICk7Ci0JICAgIHdpemFyZC5pbml0KCBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLCBzZWxlY3Rpb24gKTsKLQkgICAgCi0JICAgIGRpYWxvZy5vcGVuKCk7Ci0JICB9Ci0JICBjYXRjaCggQ29yZUV4Y2VwdGlvbiBleGMgKQotCSAgewotCSAgICBleGMucHJpbnRTdGFja1RyYWNlKCk7Ci0JICB9Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJQWN0aW9uRGVsZWdhdGUjc2VsZWN0aW9uQ2hhbmdlZChJQWN0aW9uLCBJU2VsZWN0aW9uKQotCSAqLwotCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoSUFjdGlvbiBhY3Rpb24sIElTZWxlY3Rpb24gc2VsZWN0aW9uKSAKLQl7Ci0JICBpZiggc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24gKQotICAgIHsKLSAgICAgIHRoaXMuc2VsZWN0aW9uID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uICkgc2VsZWN0aW9uOwotICAgIH0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvZGF0YS9Mb2NhdG9yV29ya3NwYWNlU2V0dXAuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvZGF0YS9Mb2NhdG9yV29ya3NwYWNlU2V0dXAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQ1NWZhOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL2RhdGEvTG9jYXRvcldvcmtzcGFjZVNldHVwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzYgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MudGVzdHMuZGF0YTsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5pbnRyby5JSW50cm9NYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmludHJvLklJbnRyb1BhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLnBsdWdpbi5UZXN0c1BsdWdpbjsKLQotLyoqCi0gKiBAYXV0aG9yIGpvYW4KLSAqICBTZXRzIHVwIGxvY2F0b3IgdGVzdCBkYXRhIC0gdXNlcyBzYW1lIGRhdGEgZmlsZSBidXQgcmVuYW1lcyBpdCBmb3IgZWFjaCB1c2UKLSAqICBXb3Jrc3BhY2Ugc3RydWN0dXJlIGNyZWF0ZWQgbG9va3MgbGlrZSB0aGlzOgotICogIAotICogIHJvb3QKLSAqICAtLXByb2plY3QxCi0gKiAgICB8LS0tLWZvbGRlcjEKLSAqICAgICAgICAgfC0tLS0tZm9sZGVyMgotICogICAgICAgICAgICAgICB8LS0tLS0tb25lLndzZGwKLSAqICAgICAgICAgfC0tLS0tdHdvLndzZGwKLSAqICAgIHwtLS0tZm9sZGVyMwotICogICAgICAgICB8LS0tLS10aHJlZS53c2RsCi0gKiAgICAgICAgIHwtLS0tLWZvdXIud3NkbCAKLSAqICAtLXByb2plY3QyCi0gKiAgICB8LS0tLWZpdmUud3NkbAotICogICAgfC0tLS1mb2xkZXI0Ci0gKiAgICB8LS0tLWZvbGRlcjUKLSAqICAgICAgICAgfC0tLS0tc2l4LndzZGwKLSAqICAtLXByb2plY3QzCi0gKiAgICB8LS0tLW9uZS54bWwKLSAqLwotCi1wdWJsaWMgY2xhc3MgTG9jYXRvcldvcmtzcGFjZVNldHVwIGV4dGVuZHMgVGVzdENhc2UgewotCi0JICBwdWJsaWMgc3RhdGljIFN0cmluZyBQUk9KRUNUMV9OQU1FID0gIlByb2plY3QxIjsKLQkgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIEZPTERFUjFfTkFNRSA9ICJGb2xkZXIxIjsgIC8vY29udGFpbnMgV1NETCBmaWxlIGFuZCBvbmUgZm9sZGVyIAotCSAgcHVibGljIHN0YXRpYyBTdHJpbmcgRk9MREVSMl9OQU1FID0gIkZvbGRlcjIiOyAgLy9uZXN0ZWQgaW4gZm9sZGVyIDEgYW5kIGNvbnRhaW5zIFdTREwgZmlsZQotCSAgcHVibGljIHN0YXRpYyBTdHJpbmcgRk9MREVSM19OQU1FID0gIkZvbGRlcjMiOyAgLy9jb250YWlucyB0d28gV1NETCBmaWxlcwotCSAgcHVibGljIHN0YXRpYyBTdHJpbmcgUFJPSkVDVDJfTkFNRSA9ICJQcm9qZWN0MiI7IC8vY29udGFpbnMgV1NETCBmaWxlIGFuZCB0d28gZm9sZGVycwotCSAgcHVibGljIHN0YXRpYyBTdHJpbmcgRk9MREVSNF9OQU1FID0gIkZvbGRlcjQiOyAgLy9jb250YWlucyBubyBXU0RMCi0JICBwdWJsaWMgc3RhdGljIFN0cmluZyBGT0xERVI1X05BTUUgPSAiRm9sZGVyNSI7ICAvL2NvbnRhaW5zIG9uZSBXU0RMIGZpbGUKLQkgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFBST0pFQ1QzX05BTUUgPSAiUHJvamVjdDMiOyAgLy9jb250YWlucyBubyBXU0RMIGZpbGVzIGJ1dCBvbmUgWE1MIGZpbGUKLQkgIAotCSAgcHVibGljIHN0YXRpYyBTdHJpbmcgV1NETEZJTEVfT05FID0gIm9uZS53c2RsIjsKLQkgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExGSUxFX1RXTyA9ICJ0d28ud3NkbCI7Ci0JICBwdWJsaWMgc3RhdGljIFN0cmluZyBXU0RMRklMRV9USFJFRSA9ICJ0aHJlZS53c2RsIjsKLQkgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExGSUxFX0ZPVVIgPSAiZm91ci53c2RsIjsKLQkgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExGSUxFX0ZJVkUgPSAiZml2ZS53c2RsIjsKLQkgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFdTRExGSUxFX1NJWCA9ICJzaXgud3NkbCI7Ci0JICBwdWJsaWMgc3RhdGljIFN0cmluZyBYTUxGSUxFX09ORSA9ICJvbmUuWE1MIjsKLQkgIAotCSAgcHVibGljIHN0YXRpYyBTdHJpbmcgQUNUVUFMX1RFU1RGSUxFUEFUSCA9ICJkYXRhL2xvY2F0b3IvdGVzdC53c2RsIjsKLQkgIAkgIAotCSAgcHJpdmF0ZSBJV29ya3NwYWNlUm9vdCByb290ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLQkgIAotCSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLQkgIHsKLQkgICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoTG9jYXRvcldvcmtzcGFjZVNldHVwLmNsYXNzLCAiTG9jYXRvcldvcmtzcGFjZVNldHVwIik7Ci0JICB9Ci0KLQkgIHByb3RlY3RlZCB2b2lkIGNsb3NlSW50cm8oKQotCSAgewotCSAgICBJSW50cm9NYW5hZ2VyIGludHJvTWFuYWdlciA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SW50cm9NYW5hZ2VyKCk7Ci0JICAgIElJbnRyb1BhcnQgaW50cm9QYXJ0ID0gaW50cm9NYW5hZ2VyLmdldEludHJvKCk7Ci0JICAgIGlmIChpbnRyb1BhcnQgIT0gbnVsbCkKLQkgICAgICBpbnRyb01hbmFnZXIuY2xvc2VJbnRybyhpbnRyb1BhcnQpOwotCSAgfQotCi0JICBwcm90ZWN0ZWQgSVByb2plY3QgY3JlYXRlU2ltcGxlUHJvamVjdChTdHJpbmcgbmFtZSkgdGhyb3dzIENvcmVFeGNlcHRpb24KLQkgIHsKLQkgICAgSVByb2plY3Qgc2ltcGxlUHJvamVjdCA9IHJvb3QuZ2V0UHJvamVjdChuYW1lKTsKLQkgICAgc2ltcGxlUHJvamVjdC5jcmVhdGUobnVsbCk7Ci0JICAgIHNpbXBsZVByb2plY3Qub3BlbihudWxsKTsKLQkgICAgcmV0dXJuIHNpbXBsZVByb2plY3Q7Ci0JICB9Ci0KLQkgIHByb3RlY3RlZCBJRm9sZGVyIGNyZWF0ZUZvbGRlcihJQ29udGFpbmVyIHBhcmVudCwgU3RyaW5nIGZvbGRlck5hbWUpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JICB7Ci0JCUlGb2xkZXIgZm9sZGVyMSA9IHBhcmVudC5nZXRGb2xkZXIobmV3IFBhdGgoZm9sZGVyTmFtZSkpOwotICAgICAgICBmb2xkZXIxLmNyZWF0ZShmYWxzZSwgdHJ1ZSwgbnVsbCk7Ci0JICAgIHJldHVybiBmb2xkZXIxOwotCSAgfQotCi0JICAKLQkgIHByb3RlY3RlZCB2b2lkIGNvcHlGaWxlKElDb250YWluZXIgcHJvamVjdCwgU3RyaW5nIHNvdXJjZSwgU3RyaW5nIGRlc3QpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbgotCSAgewotCQkgIAotCSAgICBJRmlsZSBmaWxlID0gcHJvamVjdC5nZXRGaWxlKG5ldyBQYXRoKGRlc3QpKTsKLQkgICAgZmlsZS5jcmVhdGUoVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5KHNvdXJjZSkub3BlblN0cmVhbSgpLCB0cnVlLCBudWxsKTsKLQkgICAgQXNzZXJ0LmFzc2VydFRydWUoZmlsZS5leGlzdHMoKSk7Ci0JICB9Ci0KLQkgIHByb3RlY3RlZCB2b2lkIGpvaW5BdXRvQnVpbGQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCSAgewotCSAgICBib29sZWFuIGludGVycnVwdGVkID0gdHJ1ZTsKLQkgICAgd2hpbGUgKGludGVycnVwdGVkKQotCSAgICB7Ci0JICAgICAgdHJ5Ci0JICAgICAgewotCSAgICAgICAgUGxhdGZvcm0uZ2V0Sm9iTWFuYWdlcigpLmpvaW4oUmVzb3VyY2VzUGx1Z2luLkZBTUlMWV9BVVRPX0JVSUxELCBudWxsKTsKLQkgICAgICAgIGludGVycnVwdGVkID0gZmFsc2U7Ci0JICAgICAgfQotCSAgICAgIGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKQotCSAgICAgIHsKLQkgICAgICAgIGludGVycnVwdGVkID0gdHJ1ZTsKLQkgICAgICB9Ci0JICAgIH0KLQkgIH0KLQotCSAgcHVibGljIHZvaWQgdGVzdFNldHVwKCkgdGhyb3dzIEV4Y2VwdGlvbgotCSAgewotCQkgIHRyeXsKLQkJU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0gbG9jYXRvciBkYXRhIHNldHVwIHN0YXJ0aW5nIik7Ci0JICAgIGNsb3NlSW50cm8oKTsKLQotCSAgICBJUHJvamVjdCBwcm9qZWN0MSA9IGNyZWF0ZVNpbXBsZVByb2plY3QoUFJPSkVDVDFfTkFNRSk7Ci0JICAgIElGb2xkZXIgZm9sZGVyMSA9IGNyZWF0ZUZvbGRlcihwcm9qZWN0MSwgRk9MREVSMV9OQU1FKTsKLQkgICAgY29weUZpbGUoZm9sZGVyMSwgQUNUVUFMX1RFU1RGSUxFUEFUSCwgV1NETEZJTEVfVFdPKTsKLQkgICAgSUZvbGRlciBmb2xkZXIyID0gY3JlYXRlRm9sZGVyKGZvbGRlcjEsIEZPTERFUjJfTkFNRSk7Ci0JICAgIGNvcHlGaWxlKGZvbGRlcjIsIEFDVFVBTF9URVNURklMRVBBVEgsIFdTRExGSUxFX09ORSk7Ci0JICAgIElGb2xkZXIgZm9sZGVyMyA9IGNyZWF0ZUZvbGRlcihwcm9qZWN0MSwgRk9MREVSM19OQU1FKTsKLQkgICAgY29weUZpbGUoZm9sZGVyMywgQUNUVUFMX1RFU1RGSUxFUEFUSCwgV1NETEZJTEVfVEhSRUUpOwotCSAgICBjb3B5RmlsZShmb2xkZXIzLCBBQ1RVQUxfVEVTVEZJTEVQQVRILCBXU0RMRklMRV9GT1VSKTsKLQkgICAgCi0JICAgIElQcm9qZWN0IHByb2plY3QyID0gY3JlYXRlU2ltcGxlUHJvamVjdChQUk9KRUNUMl9OQU1FKTsKLQkgICAgY29weUZpbGUocHJvamVjdDIsIEFDVFVBTF9URVNURklMRVBBVEgsIFdTRExGSUxFX0ZJVkUpOwotCSAgICBjcmVhdGVGb2xkZXIocHJvamVjdDIsIEZPTERFUjRfTkFNRSk7ICAvL2ZvbGRlciB3aXRoIG5vIGNvbnRlbnQKLQkgICAgSUZvbGRlciBmb2xkZXI1ID0gY3JlYXRlRm9sZGVyKHByb2plY3QyLCBGT0xERVI1X05BTUUpOwotCSAgICBjb3B5RmlsZShmb2xkZXI1LCBBQ1RVQUxfVEVTVEZJTEVQQVRILCBXU0RMRklMRV9TSVgpOwotCSAgICBJUHJvamVjdCBwcm9qZWN0MyA9IGNyZWF0ZVNpbXBsZVByb2plY3QoUFJPSkVDVDNfTkFNRSk7Ci0JICAgIGNvcHlGaWxlKHByb2plY3QzLCBBQ1RVQUxfVEVTVEZJTEVQQVRILCBYTUxGSUxFX09ORSk7Ci0JCSAgfQotCQkgIGNhdGNoIChFeGNlcHRpb24gZSkKLQkJICB7Ci0JCQkgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCSAgfQotCSAKLQkJLy9jb2RlIHRvIGNoZWNrIHdvcmtzcGFjZSBzZXQgdXAgLSBkZWJ1ZwotCQkvKkRhdGFSZXNvdXJjZVZpc2l0b3IgdmlzaXRvciA9IG5ldyBEYXRhUmVzb3VyY2VWaXNpdG9yKCk7Ci0JICAgIHJvb3QuYWNjZXB0KHZpc2l0b3IpOwotCSAgICB2aXNpdG9yLnZpc2l0KHJvb3QpOyovCi0JICAgIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLSBsb2NhdG9yIGRhdGEgc2V0dXAgY29tcGxldGUiKTsKLQkgIH0KLQkKLQlwcm90ZWN0ZWQgY2xhc3MgRGF0YVJlc291cmNlVmlzaXRvciBpbXBsZW1lbnRzIElSZXNvdXJjZVZpc2l0b3IKLQl7Ci0gICAgCXB1YmxpYyBib29sZWFuIHZpc2l0KElSZXNvdXJjZSByZXNvdXJjZSkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotICAgIAkJaWYgKChyZXNvdXJjZSBpbnN0YW5jZW9mIElQcm9qZWN0KSB8fCAocmVzb3VyY2UgaW5zdGFuY2VvZiBJRm9sZGVyKSkKLSAgICAJCXsKLSAgICAJCSAgU3lzdGVtLm91dC5wcmludGxuKCJ2aXNpdGluZyAiICsgcmVzb3VyY2UuZ2V0TmFtZSgpKTsgICAgCQkgIAotICAgIAkJfQotICAgIAkJZWxzZSBpZiAocmVzb3VyY2UgaW5zdGFuY2VvZiBJRmlsZSkKLSAgICAJCXsKLSAgICAJCQlTeXN0ZW0ub3V0LnByaW50bG4oImZvdW5kIGZpbGUgIiArIHJlc291cmNlLmdldE5hbWUoKSk7ICAgIAkJCQotICAgIAkJfQotICAgIAkJcmV0dXJuIHRydWU7Ci0gICAgCX0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3BsdWdpbi9UZXN0c1BsdWdpbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy9wbHVnaW4vVGVzdHNQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGE1NmI2Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3BsdWdpbi9UZXN0c1BsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MudGVzdHMucGx1Z2luOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIFRlc3RzUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHsKLQkvL1RoZSBzaGFyZWQgaW5zdGFuY2UuCi0JcHJpdmF0ZSBzdGF0aWMgVGVzdHNQbHVnaW4gcGx1Z2luOwotCQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3Rvci4KLQkgKi8KLQlwdWJsaWMgVGVzdHNQbHVnaW4oKSB7Ci0JCXN1cGVyKCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHVwb24gcGx1Zy1pbiBhY3RpdmF0aW9uCi0JICovCi0JcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RhcnQoY29udGV4dCk7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIHBsdWctaW4gaXMgc3RvcHBlZAotCSAqLwotCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RvcChjb250ZXh0KTsKLQkJcGx1Z2luID0gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBUZXN0c1BsdWdpbiBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91bml0dGVzdC9BbGxXU0pVbml0VGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdW5pdHRlc3QvQWxsV1NKVW5pdFRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkY2NkYTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91bml0dGVzdC9BbGxXU0pVbml0VGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLnVuaXR0ZXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLmRhdGEuTG9jYXRvcldvcmtzcGFjZVNldHVwOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0UmVzdWx0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci1pbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBpcyB0byBydW4gYWxsIHRoZSB1bml0dGVzdCB0ZXN0cy4KLSAqLwotcHVibGljIGNsYXNzIEFsbFdTSlVuaXRUZXN0cyBleHRlbmRzIFRlc3RDYXNlCi17Ci0gIC8qKgotICAgKiBNZXRob2QgcGFyc2VBcmdzLgotICAgKiAKLSAgICogQHBhcmFtIGFyZ3MKLSAgICovCi0gIHByaXZhdGUgdm9pZCBwYXJzZUFyZ3MoT2JqZWN0IGFyZ3MpCi0gIHsKLSAgICAvLyB0eXBpY2lhbGx5IGFyZ3MgaXMgYW4gYXJyYXkgb2Ygc3RyaW5ncywKLSAgICAvLyBub3Qgc3VyZSB3aGVuIGl0IHdvdWxkbid0IGJlLgotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKLSAgewotICAgIG5ldyBBbGxXU0pVbml0VGVzdHMoKS5ydW5NYWluKGFyZ3MpOwotICB9Ci0KLSAgcHVibGljIE9iamVjdCBydW5NYWluKE9iamVjdCBhcmdzKQotICB7Ci0gICAgT2JqZWN0IHJlc3VsdCA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgVGVzdFJ1bm5lciB0ZXN0UnVubmVyID0gbnVsbDsKLQotICAgICAgcGFyc2VBcmdzKGFyZ3MpOwotCi0gICAgICB0ZXN0UnVubmVyID0gbmV3IFRlc3RSdW5uZXIoU3lzdGVtLm91dCk7Ci0gCi0KLSAgICAgIFRlc3Qgc3VpdGUgPSBzdWl0ZSgpOwotICAgICAgVGVzdFJlc3VsdCB0ZXN0UmVzdWx0ID0gdGVzdFJ1bm5lci5kb1J1bihzdWl0ZSwgZmFsc2UpOwotICAgICAgcHJpbnRIZWFkZXIodGVzdFJlc3VsdCk7ICAgICAgCi0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXN1bHQgPSBlOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgVGVzdFN1aXRlIHRlc3RTdWl0ZSA9IG5ldyBUZXN0U3VpdGUoKTsKLSAvL2FkZCB1bml0IHRlc3RzIHRvIHN1aXRlIGhlcmUuLi4KLSAgICB0ZXN0U3VpdGUuYWRkVGVzdCggTG9jYXRvcldvcmtzcGFjZVNldHVwLnN1aXRlKCkpOwotICAgIHRlc3RTdWl0ZS5hZGRUZXN0KCBXZWJTZXJ2aWNlRmluZGVyVGVzdHMuc3VpdGUoKSk7Ci0gICAgdGVzdFN1aXRlLmFkZFRlc3QoIFdTRExDb3BpZXJUZXN0cy5zdWl0ZSgpKTsKLSAgICByZXR1cm4gdGVzdFN1aXRlOwotICB9Ci0KLSAgLyoqCi0gICAqIFByaW50cyB0aGUgaGVhZGVyIG9mIHRoZSByZXBvcnQKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHByaW50SGVhZGVyKFRlc3RSZXN1bHQgcmVzdWx0KQotICB7Ci0gICAgaWYgKHJlc3VsdC53YXNTdWNjZXNzZnVsKCkpCi0gICAgewotICAgICAgU3lzdGVtLm91dC5wcmludGxuKCk7Ci0gICAgICBTeXN0ZW0ub3V0LnByaW50KCJPSyIpOwotICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgKCIgKyByZXN1bHQucnVuQ291bnQoKSArICIgdGVzdHMpIik7Ci0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigpOwotICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGQUlMVVJFUyEhISIpOwotICAgICAgU3lzdGVtLm91dC5wcmludGxuKAotICAgICAgICAiVGVzdHMgcnVuOiAiCi0gICAgICAgICAgKyByZXN1bHQucnVuQ291bnQoKQotICAgICAgICAgICsgIiwgIEZhaWx1cmVzOiAiCi0gICAgICAgICAgKyByZXN1bHQuZmFpbHVyZUNvdW50KCkKLSAgICAgICAgICArICIsICBFcnJvcnM6ICIKLSAgICAgICAgICArIHJlc3VsdC5lcnJvckNvdW50KCkpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91bml0dGVzdC9MYXVuY2hUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3VuaXR0ZXN0L0xhdW5jaFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2E2ZWZlNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3VuaXR0ZXN0L0xhdW5jaFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzLnVuaXR0ZXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQbGF0Zm9ybVJ1bm5hYmxlOwotCi0vKioKLSAqIE1pbmltYWwgYXBwIHRvIHJ1biBhcyBFY2xpcHNlICJhcHBsaWNhdGlvbiIKLSAqLwotcHVibGljIGNsYXNzIExhdW5jaFRlc3QgaW1wbGVtZW50cyBJUGxhdGZvcm1SdW5uYWJsZQotewotICAvKioKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBsYXRmb3JtUnVubmFibGUjcnVuKE9iamVjdCkKLSAgICovCi0gIHB1YmxpYyBPYmplY3QgcnVuKE9iamVjdCBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLQotICAgIE9iamVjdCByZXN1bHQgPSBuZXcgQWxsV1NKVW5pdFRlc3RzKCkucnVuTWFpbihhcmdzKTsKLQotICAgIGlmIChyZXN1bHQgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgVGhyb3dhYmxlKQotICAgICAgewotICAgICAgICAoKFRocm93YWJsZSkgcmVzdWx0KS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0ZXN0cyBkaWRuJ3QgcmV0dXJuICdvayciKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJldHVybiBJUGxhdGZvcm1SdW5uYWJsZS5FWElUX09LOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3VuaXR0ZXN0L1JlZ2lzdHJ5VGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdW5pdHRlc3QvUmVnaXN0cnlUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNWEzNmU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdW5pdHRlc3QvUmVnaXN0cnlUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjg1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MudGVzdHMudW5pdHRlc3Q7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnJlZ2lzdHJ5LlJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAucmVnaXN0cnkuUmVnaXN0cnlGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudGF4b25vbXkuQ2F0ZWdvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLm1vZGVsLnYxMC50YXhvbm9teS5UYXhvbm9teTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnRheG9ub215LlRheG9ub215RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5UYXhvbm9taWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5tb2RlbC52MTAudWRkaXJlZ2lzdHJ5LlVERElSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwubW9kZWwudjEwLnVkZGlyZWdpc3RyeS5VRERJUmVnaXN0cnlGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5yZWdpc3RyeS5JUmVnaXN0cnlNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5yZWdpc3RyeS5SZWdpc3RyeVNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnJlZ2lzdHJ5LlVERElSZWdpc3RyeVNlcnZpY2U7Ci0KLXB1YmxpYyBjbGFzcyBSZWdpc3RyeVRlc3RzIGV4dGVuZHMgVGVzdENhc2UKLXsKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUgKCkKLQl7Ci0JCXJldHVybiBuZXcgVGVzdFN1aXRlKFJlZ2lzdHJ5VGVzdHMuY2xhc3MpOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgVGF4b25vbXkgbW9kZWwgYW5kIHBhc3NlcyBpdCB0bwotCSAqIDxjb2RlPlJlZ2lzdHJ5U2VydmljZS5zYXZlVGF4b25vbXkoKTwvY29kZT4KLQkgKiB3aGVyZSB0aGUgbW9kZWwgaXMgcGVyc2lzdGVkIHRvIGEgcGxhdGZvcm0KLQkgKiBzcGVjaWZpZWQgdGVtcG9yYXJ5IGZpbGVzeXN0ZW0gbG9jYXRpb24uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdF9SZWdpc3RyeVNlcnZpY2Vfc2F2ZVRheG9ub215ICgpCi0JewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlNUQVJUSU5HIHRlc3RfUmVnaXN0cnlTZXJ2aWNlX3NhdmVUYXhvbm9teSIpOwotCQl0cnkKLQkJewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGluZyBSZWdpc3RyeVNlcnZpY2UgYW5kIFRheG9ub215Iik7Ci0JCQlSZWdpc3RyeVNlcnZpY2UgcmVnaXN0cnlTZXJ2aWNlID0gUmVnaXN0cnlTZXJ2aWNlLmluc3RhbmNlKCk7CQkJCi0JCQlUYXhvbm9teSB0YXhvbm9teSA9IHJlZ2lzdHJ5U2VydmljZS5uZXdUYXhvbm9teSgpOwotCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkJ1aWxkaW5nIGEgc2ltcGxlIFRheG9ub215IG1vZGVsIik7Ci0JCQl0YXhvbm9teS5zZXRJZCgibXkudGF4b25vbXkiKTsKLQkJCXRheG9ub215LnNldE5hbWUoIk15IFRheG9ub215Iik7Ci0JCQlFTGlzdCBsaXN0ID0gdGF4b25vbXkuZ2V0Q2F0ZWdvcnkoKTsKLQkJCUNhdGVnb3J5IGNhdGVnb3J5MSA9IFRheG9ub215RmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQ2F0ZWdvcnkoKTsKLQkJCWNhdGVnb3J5MS5zZXROYW1lKCJNeSBmaXJzdCBjYXRlZ29yeSIpOwotCQkJY2F0ZWdvcnkxLnNldENvZGUoIjEiKTsKLQkJCUNhdGVnb3J5IGNhdGVnb3J5MiA9IFRheG9ub215RmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQ2F0ZWdvcnkoKTsKLQkJCWNhdGVnb3J5Mi5zZXROYW1lKCJNeSBzZWNvbmQgY2F0ZWdvcnkiKTsKLQkJCWNhdGVnb3J5Mi5zZXRDb2RlKCIyIik7Ci0JCQlDYXRlZ29yeSBjYXRlZ29yeTMgPSBUYXhvbm9teUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUNhdGVnb3J5KCk7Ci0JCQljYXRlZ29yeTMuc2V0TmFtZSgiTXkgdGhpcmQgY2F0ZWdvcnkiKTsKLQkJCWNhdGVnb3J5My5zZXRDb2RlKCIyLjEiKTsKLQkJCWNhdGVnb3J5Mi5nZXRDYXRlZ29yeSgpLmFkZChjYXRlZ29yeTMpOwotCQkJbGlzdC5hZGQoY2F0ZWdvcnkxKTsKLQkJCWxpc3QuYWRkKGNhdGVnb3J5Mik7Ci0KLQkJCUZpbGUgZmlsZSA9IEZpbGUuY3JlYXRlVGVtcEZpbGUoInRheG9ub215LiIsIi54bWwiKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiU2F2aW5nIHRoZSBUYXhvbm9teSBtb2RlbCB0byAiK2ZpbGUuZ2V0Q2Fub25pY2FsUGF0aCgpKTsKLQkJCXJlZ2lzdHJ5U2VydmljZS5zYXZlVGF4b25vbXkoZmlsZS50b1VSTCgpLHRheG9ub215KTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGV4YykKLQkJewotCQkJZXhjLnByaW50U3RhY2tUcmFjZSgpOwotCQkJZmFpbCgiVW5leHBlY3RlZCBUaHJvd2FibGUgWyIrZXhjLmdldE1lc3NhZ2UoKSsiXSIpOwotCQl9Ci0JCWZpbmFsbHkKLQkJewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJGSU5JU0hFRCB0ZXN0X1JlZ2lzdHJ5U2VydmljZV9zYXZlVGF4b25vbXlcbiIpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBVRERJIFJlZ2lzdHJ5IG1vZGVsIGFuZCBwYXNzZXMgaXQgdG8KLQkgKiA8Y29kZT5SZWdpc3RyeVNlcnZpY2Uuc2F2ZVJlZ2lzdHJ5KCk8L2NvZGU+Ci0JICogd2hlcmUgdGhlIG1vZGVsIGlzIHBlcnNpc3RlZCB0byBhIHBsYXRmb3JtCi0JICogc3BlY2lmaWVkIHRlbXBvcmFyeSBmaWxlc3lzdGVtIGxvY2F0aW9uLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RfUmVnaXN0cnlTZXJ2aWNlX3NhdmVSZWdpc3RyeSAoKQotCXsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJTVEFSVElORyB0ZXN0X1JlZ2lzdHJ5U2VydmljZV9zYXZlUmVnaXN0cnkiKTsKLQkJdHJ5Ci0JCXsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRpbmcgUmVnaXN0cnlTZXJ2aWNlLCBVRERJUmVnaXN0cnlTZXJ2aWNlIGFuZCBSZWdpc3RyeSIpOwotCQkJUmVnaXN0cnlTZXJ2aWNlIHJlZ2lzdHJ5U2VydmljZSA9IFJlZ2lzdHJ5U2VydmljZS5pbnN0YW5jZSgpOwotCQkJVURESVJlZ2lzdHJ5U2VydmljZSB1ZGRpUmVnaXN0cnlTZXJ2aWNlID0gVURESVJlZ2lzdHJ5U2VydmljZS5pbnN0YW5jZSgpOwkJCQotCQkJVURESVJlZ2lzdHJ5IHVkZGlSZWdpc3RyeSA9IHVkZGlSZWdpc3RyeVNlcnZpY2UubmV3VURESVJlZ2lzdHJ5KCk7Ci0KLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQnVpbGRpbmcgYSBzaW1wbGUgUmVnaXN0cnkgbW9kZWwiKTsKLQkJCXVkZGlSZWdpc3RyeS5zZXRJZCgibXkucmVnaXN0cnkiKTsKLQkJCXVkZGlSZWdpc3RyeS5zZXRWZXJzaW9uKCIyLjAiKTsKLQkJCXVkZGlSZWdpc3RyeS5zZXREaXNjb3ZlcnlVUkwoImh0dHA6Ly9zb21lLmRpc2NvdmVyeS51cmwiKTsKLQkJCXVkZGlSZWdpc3RyeS5zZXRQdWJsaWNhdGlvblVSTCgiaHR0cDovL3NvbWUucHVibGljYXRpb24udXJsIik7Ci0JCQl1ZGRpUmVnaXN0cnkuc2V0RGVmYXVsdExvZ2luKCJob2NrZXlmYW5hdGljIik7Ci0JCQlOYW1lIG5hbWUgPSBSZWdpc3RyeUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU5hbWUoKTsKLQkJCW5hbWUuc2V0VmFsdWUoIk15IFJlZ2lzdHJ5Iik7Ci0JCQl1ZGRpUmVnaXN0cnkuZ2V0TmFtZSgpLmFkZChuYW1lKTsKLQkJCVRheG9ub215IHRheG9ub215UmVmID0gcmVnaXN0cnlTZXJ2aWNlLm5ld1RheG9ub215KCk7Ci0JCQl0YXhvbm9teVJlZi5zZXRSZWYoIm15LnRheG9ub215Iik7Ci0JCQlUYXhvbm9taWVzIHQgPSB1ZGRpUmVnaXN0cnkuZ2V0VGF4b25vbWllcygpOwotCQkJaWYgKHQgPT0gbnVsbCkKLQkJCXsKLQkJCQl0ID0gVURESVJlZ2lzdHJ5RmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlVGF4b25vbWllcygpOwotCQkJCXVkZGlSZWdpc3RyeS5zZXRUYXhvbm9taWVzKHQpOwotCQkJfQotCQkJRUxpc3QgZSA9IHQuZ2V0VGF4b25vbXkoKTsKLQkJCWUuYWRkKHRheG9ub215UmVmKTsKLQotCQkJRmlsZSBmaWxlID0gRmlsZS5jcmVhdGVUZW1wRmlsZSgicmVnaXN0cnkuIiwiLnhtbCIpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJTYXZpbmcgdGhlIFJlZ2lzdHJ5IG1vZGVsIHRvICIrZmlsZS5nZXRDYW5vbmljYWxQYXRoKCkpOwotCQkJcmVnaXN0cnlTZXJ2aWNlLnNhdmVSZWdpc3RyeShmaWxlLnRvVVJMKCksdWRkaVJlZ2lzdHJ5KTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGV4YykKLQkJewotCQkJZXhjLnByaW50U3RhY2tUcmFjZSgpOwotCQkJZmFpbCgiVW5leHBlY3RlZCBUaHJvd2FibGUgWyIrZXhjLmdldE1lc3NhZ2UoKSsiXSIpOwotCQl9Ci0JCWZpbmFsbHkKLQkJewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJGSU5JU0hFRCB0ZXN0X1JlZ2lzdHJ5U2VydmljZV9zYXZlUmVnaXN0cnlcbiIpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBVRERJIFJlZ2lzdHJ5IG1vZGVsIGFuZCBhIG5ldyBUYXhvbm9teQotCSAqIG1vZGVsLCBhc3NvY2lhdGVzIHRoZSBsYXR0ZXIgd2l0aCB0aGUgZm9ybWVyLCBhbmQKLQkgKiBkcml2ZXMgPGNvZGU+SVJlZ2lzdHJ5TWFuYWdlci5zYXZlUmVnaXN0cnkoKTwvY29kZT4KLQkgKiB0byBzYXZlIHRoZSBtb2RlbHMgYW5kIHRoZSBpbmRleCBkb2N1bWVudCB0byB0aGUKLQkgKiBwcmVmZXJyZWQgbG9jYXRpb24gb2YgdGhlIGRlZmF1bHQgcmVnaXN0cnkgbWFuYWdlci4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0X1JlZ2lzdHJ5TWFuYWdlcl9zYXZlUmVnaXN0cnkoKQotCXsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJTVEFSVElORyB0ZXN0X1JlZ2lzdHJ5TWFuYWdlcl9zYXZlUmVnaXN0cnkiKTsKLQkJdHJ5IHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRpbmcgUmVnaXN0cnlTZXJ2aWNlIGFuZCBHZXR0aW5nIFJlZ2lzdHJ5TWFuYWdlciIpOwkKLQkJCVJlZ2lzdHJ5U2VydmljZSByZWdpc3RyeVNlcnZpY2UgPSBSZWdpc3RyeVNlcnZpY2UuaW5zdGFuY2UoKTsJCi0JCQlJUmVnaXN0cnlNYW5hZ2VyIHJlZ01hbmFnZXIgPSByZWdpc3RyeVNlcnZpY2UuZ2V0RGVmYXVsdFJlZ2lzdHJ5TWFuYWdlcigpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJUaGUgbG9jYXRpb24gb2YgdGhlIGRlZmF1bHQgaW5kZXggaXMgIiArIHJlZ01hbmFnZXIuZ2V0VVJMKCkpOwotCi0JCQkvL2J1aWxkIHRoZSBob2NrZXkgdGF4b25vbXkKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQnVpbGRpbmcgdGhlIGhvY2tleSBUYXhvbm9teSBtb2RlbCIpOwotCQkJVGF4b25vbXkgaG9ja2V5VGF4b25vbXkgPSByZWdpc3RyeVNlcnZpY2UubmV3VGF4b25vbXkoKTsKLQkJCWhvY2tleVRheG9ub215LnNldElkKCJob2NrZXkudGF4b25vbXkiKTsKLQkJCWhvY2tleVRheG9ub215LnNldE5hbWUoImhvY2tleSBUYXhvbm9teSIpOwotCQkJRUxpc3QgbGlzdCA9IGhvY2tleVRheG9ub215LmdldENhdGVnb3J5KCk7Ci0JCQlDYXRlZ29yeSBjYXRlZ29yeTEgPSBUYXhvbm9teUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUNhdGVnb3J5KCk7Ci0JCQlDYXRlZ29yeSBjYXRlZ29yeTQgPSBUYXhvbm9teUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUNhdGVnb3J5KCk7Ci0JCQljYXRlZ29yeTQuc2V0TmFtZSgiUHJvIik7Ci0JCQljYXRlZ29yeTQuc2V0Q29kZSgiNCIpOwotCQkJQ2F0ZWdvcnkgY2F0ZWdvcnk1ID0gVGF4b25vbXlGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVDYXRlZ29yeSgpOwotCQkJY2F0ZWdvcnk1LnNldE5hbWUoIkFITCIpOwotCQkJY2F0ZWdvcnk1LnNldENvZGUoIjQuMSIpOwotCQkJQ2F0ZWdvcnkgY2F0ZWdvcnk2ID0gVGF4b25vbXlGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVDYXRlZ29yeSgpOwotCQkJY2F0ZWdvcnk2LnNldE5hbWUoIk5ITCIpOwotCQkJY2F0ZWdvcnk2LnNldENvZGUoIjQuMiIpOwotCQkJY2F0ZWdvcnkxLnNldE5hbWUoIkp1bmlvciIpOwotCQkJY2F0ZWdvcnkxLnNldENvZGUoIjEiKTsKLQkJCUNhdGVnb3J5IGNhdGVnb3J5MiA9IFRheG9ub215RmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQ2F0ZWdvcnkoKTsKLQkJCWNhdGVnb3J5Mi5zZXROYW1lKCJNaWRnZXQiKTsKLQkJCWNhdGVnb3J5Mi5zZXRDb2RlKCIyIik7Ci0JCQlDYXRlZ29yeSBjYXRlZ29yeTMgPSBUYXhvbm9teUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUNhdGVnb3J5KCk7Ci0JCQljYXRlZ29yeTMuc2V0TmFtZSgiQmFudGFtIik7Ci0JCQljYXRlZ29yeTMuc2V0Q29kZSgiMyIpOwotCQkJY2F0ZWdvcnk0LmdldENhdGVnb3J5KCkuYWRkKGNhdGVnb3J5NSk7Ci0JCQljYXRlZ29yeTQuZ2V0Q2F0ZWdvcnkoKS5hZGQoY2F0ZWdvcnk2KTsKLQkJCWxpc3QuYWRkKGNhdGVnb3J5MSk7Ci0JCQlsaXN0LmFkZChjYXRlZ29yeTIpOwotCQkJbGlzdC5hZGQoY2F0ZWdvcnkzKTsKLQkJCWxpc3QuYWRkKGNhdGVnb3J5NCk7Ci0JCQkKLQkJCS8vc2F2ZSB0aGUgaG9ja2V5IHRheG9ub215Ci0JCQlUYXhvbm9teSBob2NrZXlUYXhvbm9teVJlZiA9IHJlZ01hbmFnZXIuc2F2ZVRheG9ub215KGhvY2tleVRheG9ub215KTsKLQotCQkJLy9tYWtlIHRoZSBob2NrZXkgcmVnaXN0cnkKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQnVpbGRpbmcgdGhlIGhvY2tleSBSZWdpc3RyeSBtb2RlbCIpOwotCQkJVURESVJlZ2lzdHJ5U2VydmljZSB1ZGRpUmVnaXN0cnlTZXJ2aWNlID0gVURESVJlZ2lzdHJ5U2VydmljZS5pbnN0YW5jZSgpOwkJCQotCQkJVURESVJlZ2lzdHJ5IHVkZGlSZWdpc3RyeSA9IHVkZGlSZWdpc3RyeVNlcnZpY2UubmV3VURESVJlZ2lzdHJ5KCk7Ci0JCQl1ZGRpUmVnaXN0cnkuc2V0SWQoImhvY2tleS5yZWdpc3RyeSIpOwotCQkJdWRkaVJlZ2lzdHJ5LnNldFZlcnNpb24oIjIuMCIpOwotCQkJdWRkaVJlZ2lzdHJ5LnNldERlZmF1bHRMb2dpbigiaG9ja2V5ZmFuYXRpYyIpOwotCQkJdWRkaVJlZ2lzdHJ5LnNldERpc2NvdmVyeVVSTCgiaHR0cDovL3NvbWUuZGlzY292ZXJ5LnVybCIpOwotCQkJdWRkaVJlZ2lzdHJ5LnNldFB1YmxpY2F0aW9uVVJMKCJodHRwOi8vc29tZS5wdWJsaWNhdGlvbi51cmwiKTsKLQkJCU5hbWUgbmFtZSA9IFJlZ2lzdHJ5RmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTmFtZSgpOwotCQkJbmFtZS5zZXRWYWx1ZSgiSG9ja2V5IFJlZ2lzdHJ5Iik7Ci0JCQl1ZGRpUmVnaXN0cnkuZ2V0TmFtZSgpLmFkZChuYW1lKTsKLQotCQkJLy8gQWRkIHRoZSByZWZlcmVuY2UgdG8gdGhlIHRheG9ub215IChzYXZlZCBhYm92ZSkgdG8gdGhlIHJlZ2lzdHJ5LiAgCi0JCQl1ZGRpUmVnaXN0cnlTZXJ2aWNlLmFkZFRheG9ub215KHVkZGlSZWdpc3RyeSxob2NrZXlUYXhvbm9teVJlZik7Ci0KLQkJCS8qCi0JCQlVRERJVGF4b25vbXlGaW5kZXIgVUlURmluZGVyID0gbmV3IFVERElUYXhvbm9teUZpbmRlcigpOwotCQkJcmVnTWFuYWdlci5hZGRUYXhvbm9teUZpbmRlcih1ZGRpUmVnaXN0cnkuZ2V0Q2xhc3MoKS5nZXROYW1lKCksVUlURmluZGVyKTsKLQkJCSovCi0JCQkvLyBTYXZlIHRoZSB0aGluZy4KLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiU2F2aW5nIHRoZSBob2NrZXkgUmVnaXN0cnkgbW9kZWwiKTsKLQkJCXJlZ01hbmFnZXIuc2F2ZVJlZ2lzdHJ5KHVkZGlSZWdpc3RyeSk7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGMpCi0JCXsKLQkJCWV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLQkJCWZhaWwoIlVuZXhwZWN0ZWQgVGhyb3dhYmxlIFsiK2V4Yy5nZXRNZXNzYWdlKCkrIl0iKTsKLQkJfQotCQlmaW5hbGx5Ci0JCXsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRklOSVNIRUQgdGVzdF9SZWdpc3RyeU1hbmFnZXJfc2F2ZVJlZ2lzdHJ5XG4iKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIExvYWRzIHRoZSByZWdpc3RyeSBhbmQgdGF4b25vbXkgaW4gdGhlIGluZGV4IGNyZWF0ZWQgaW4KLQkgKiB0ZXN0X1JlZ2lzdHJ5TWFuYWdlcl9zYXZlUmVnaXN0cnksIHRoZW4gYXNzZXJ0cyB0aGF0IHRoZQotCSAqIGNvbnRlbnQgb2YgdGhlIG1vZGVsIGlzIHdoYXQgd2UgZXhwZWN0LgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RfUmVnaXN0cnlNYW5hZ2VyX2xvYWRSZWdpc3RyeSgpCi0JewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlNUQVJUSU5HIHRlc3RfUmVnaXN0cnlNYW5hZ2VyX2xvYWRSZWdpc3RyeSIpOwotCQl0cnkgewotCQkJLy8gU2V0dXAKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRpbmcgUmVnaXN0cnlTZXJ2aWNlIGFuZCBHZXR0aW5nIFJlZ2lzdHJ5TWFuYWdlciIpOwkKLQkJCVJlZ2lzdHJ5U2VydmljZSByZWdpc3RyeVNlcnZpY2UgPSBSZWdpc3RyeVNlcnZpY2UuaW5zdGFuY2UoKTsJCi0JCQlJUmVnaXN0cnlNYW5hZ2VyIHJlZ01hbmFnZXIgPSByZWdpc3RyeVNlcnZpY2UuZ2V0RGVmYXVsdFJlZ2lzdHJ5TWFuYWdlcigpOwotCQkJCi0JCQkvLyBHZXQgdGhlIG9uZSByZWdpc3RyeSBVUkkgd2UgZXhwZWN0LCBhbmQgbG9hZCB0aGUgcmVnaXN0cnkuCi0JCQlTdHJpbmdbXSByZWdpc3RyaWVzID0gcmVnTWFuYWdlci5nZXRSZWdpc3RyeVVSSXMoKTsKLQkJCWFzc2VydEVxdWFscygiVW5leHBlY3RlZCBudW1iZXIgb2YgcmVnaXN0cmllcyAiK3JlZ2lzdHJpZXMubGVuZ3RoLHJlZ2lzdHJpZXMubGVuZ3RoLDEpOwotCQkJU3RyaW5nIHVyaSA9IHJlZ2lzdHJpZXNbMF07Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkxvYWRpbmcgcmVnaXN0cnkgIiArIHVyaSk7Ci0JCQlSZWdpc3RyeSByZWdpc3RyeSA9IHJlZ01hbmFnZXIubG9hZFJlZ2lzdHJ5KHVyaSk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkZvdW5kIHJlZ2lzdHJ5ICIgKyByZWdpc3RyeS5nZXRJZCgpKTsKLQkJCWFzc2VydEVxdWFscygiRGlkIG5vdCBmaW5kIGhvY2tleSByZWdpc3RyeSIsImhvY2tleS5yZWdpc3RyeSIscmVnaXN0cnkuZ2V0SWQoKSk7Ci0JCQkKLQkJCS8vIEl0J3Mgc3VwcG9zZWQgdG8gYmUgYSBVRERJIHJlZ2lzdHJ5LiBWZXJpZnkgaXQgYW5kIGNoZWNrIGl0cyB2YWx1ZXMuCi0JCQlhc3NlcnRUcnVlKCJSZWdpc3RyeSBpcyBub3QgYSBVRERJUmVnaXN0cnkiLChyZWdpc3RyeSBpbnN0YW5jZW9mIFVERElSZWdpc3RyeSkpOwotCQkJVURESVJlZ2lzdHJ5IHVkZGlSZWdpc3RyeSA9IChVRERJUmVnaXN0cnkpcmVnaXN0cnk7Ci0JCQlhc3NlcnRFcXVhbHModWRkaVJlZ2lzdHJ5LmdldFZlcnNpb24oKSwiMi4wIik7Ci0JCQlhc3NlcnRFcXVhbHModWRkaVJlZ2lzdHJ5LmdldERlZmF1bHRMb2dpbigpLCJob2NrZXlmYW5hdGljIik7Ci0JCQlhc3NlcnRFcXVhbHModWRkaVJlZ2lzdHJ5LmdldERpc2NvdmVyeVVSTCgpLCJodHRwOi8vc29tZS5kaXNjb3ZlcnkudXJsIik7Ci0JCQlhc3NlcnRFcXVhbHModWRkaVJlZ2lzdHJ5LmdldFB1YmxpY2F0aW9uVVJMKCksImh0dHA6Ly9zb21lLnB1YmxpY2F0aW9uLnVybCIpOwotCQkJCi0JCQkvLyBMb2FkIHRoZSB0YXhvbm9taWVzIHVzZWQgdGhlIFVEREkgcmVnaXN0cnkuCi0JCQlVRERJUmVnaXN0cnlTZXJ2aWNlIHVkZGlSZWdpc3RyeVNlcnZpY2UgPSBVRERJUmVnaXN0cnlTZXJ2aWNlLmluc3RhbmNlKCk7Ci0JCQlUYXhvbm9teVtdIHRheG9ub21pZXMgPSByZWdNYW5hZ2VyLmxvYWRUYXhvbm9taWVzKHVkZGlSZWdpc3RyeVNlcnZpY2UuZ2V0VGF4b25vbXlVUklzKHVkZGlSZWdpc3RyeSkpOwotCQkJYXNzZXJ0RXF1YWxzKCJVbmV4cGVjdGVkIG51bWJlciBvZiB0YXhvbm9taWVzICIrdGF4b25vbWllcy5sZW5ndGgsdGF4b25vbWllcy5sZW5ndGgsMSk7Ci0JCQlUYXhvbm9teSB0YXhvbm9teSA9IHRheG9ub21pZXNbMF07Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkZvdW5kIHRheG9ub215ICIgKyB0YXhvbm9teS5nZXRJZCgpKTsKLQkJCUFzc2VydC5hc3NlcnRFcXVhbHMoIkRpZCBub3QgZmluZCBob2NrZXkgdGF4b25vbXkiLCJob2NrZXkudGF4b25vbXkiLHRheG9ub215LmdldElkKCkpOwotCQkJCi0JCQkvLyBEdW1wIG91dCB0aGUgdmFsdWVzIChubyBhc3NlcnRpb25zIGhlcmUpLgotCQkJRUxpc3QgY0xpc3QgPSB0YXhvbm9teS5nZXRDYXRlZ29yeSgpOwotCQkJZm9yKGludCBpID0gMDtpPGNMaXN0LnNpemUoKTtpKyspewotCQkJCUNhdGVnb3J5IGNhdGVnb3J5ID0gKENhdGVnb3J5KWNMaXN0LmdldChpKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkZvdW5kIGNhdGVnb3J5ICIgKyBjYXRlZ29yeS5nZXROYW1lKCkpOwotCQkJCUVMaXN0IGMyTGlzdCA9IGNhdGVnb3J5LmdldENhdGVnb3J5KCk7Ci0JCQkJZm9yKGludCBqID0gMDtqPGMyTGlzdC5zaXplKCk7aisrKXsKLQkJCQkJQ2F0ZWdvcnkgaUNhdGVnb3J5ID0gKENhdGVnb3J5KWMyTGlzdC5nZXQoaik7Ci0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRm91bmQgc3ViY2F0ZWdvcnkgIiArIGlDYXRlZ29yeS5nZXROYW1lKCkpOwotCQkJCX0KLQkJCX0JCQkJCQotCQl9Ci0JCWNhdGNoKEV4Y2VwdGlvbiB0KQotCQl7Ci0JCQl0LnByaW50U3RhY2tUcmFjZSgpOwotCQkJZmFpbCgiVW5leHBlY3RlZCBUaHJvd2FibGUgWyIrdC5nZXRNZXNzYWdlKCkrIl0iKTsKLQkJfQotCQlmaW5hbGx5Ci0JCXsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRklOSVNIRUQgdGVzdF9SZWdpc3RyeU1hbmFnZXJfbG9hZFJlZ2lzdHJ5XG4iKTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdW5pdHRlc3QvVGVzdEJ1bmRsZVV0aWxzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3VuaXR0ZXN0L1Rlc3RCdW5kbGVVdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODIyYTEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdW5pdHRlc3QvVGVzdEJ1bmRsZVV0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy50ZXN0cy51bml0dGVzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5jb21tb24uQnVuZGxlVXRpbHM7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLlZlcnNpb247Ci0KLXB1YmxpYyBjbGFzcyBUZXN0QnVuZGxlVXRpbHMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0VmVyc2lvbigpIHsKLQkJVmVyc2lvbiB2ZXJzaW9uID0gQnVuZGxlVXRpbHMuZ2V0VmVyc2lvbigib3JnLmVjbGlwc2Uud3N0LndzIik7Ci0JCWFzc2VydE5vdE51bGwoInZlcnNpb24gc2hvdWxkIG5ldmVyIGJlIG51bGwiLCB2ZXJzaW9uKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdW5pdHRlc3QvV1NETENvcGllclRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3VuaXR0ZXN0L1dTRExDb3BpZXJUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTVlN2E3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdW5pdHRlc3QvV1NETENvcGllclRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDcwMTI2ICAgMTcxMDcxIG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBDcmVhdGUgcHVibGljIHV0aWxpdHkgbWV0aG9kIGZvciBjb3B5aW5nIFdTREwgZmlsZXMKLSAqIDIwMDcwNDA5ICAgMTgxNjM1IG1ha2FuZHJlQGNhLmlibS5jb20gLSBBbmRyZXcgTWFrLCBXU0RMQ29waWVyIHV0aWxpdHkgc2hvdWxkIGNyZWF0ZSB0YXJnZXQgZm9sZGVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MudGVzdHMudW5pdHRlc3Q7Ci0KLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnV0aWwuV1NETENvcGllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MudGVzdHMucGx1Z2luLlRlc3RzUGx1Z2luOwotCi0vKioKLSAqIEpVbml0IHRlc3RzIGZvciBXU0RMQ29waWVyCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMQ29waWVyVGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERBVEFfRElSICAgICA9ICJkYXRhL3dzZGxjb3BpZXIvIjsKLQkKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgV1NETF9GT0xERVIxID0gIndzZGwxIjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgV1NETF9GT0xERVIyID0gIndzZGwyIjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgV1NETF9GT0xERVIzID0gIndzZGwzIjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgV1NETF9GT0xERVI0ID0gIndzZGw0IjsKLQkKLQlwcml2YXRlIElQcm9qZWN0IHByb2plY3Q7Ci0KLQkvKioKLQkgKiBSZXR1cm4gc3VpdGUgb2YgdGVzdHMgdG8gcnVuLgotCSAqIAotCSAqIEByZXR1cm4gQSBUZXN0U3VpdGUuCi0JICovCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKCJXU0RMQ29waWVyVGVzdHMiKTsKLQkJc3VpdGUuYWRkVGVzdChuZXcgV1NETENvcGllclRlc3RzKCJ0ZXN0Q2FzZTEiKSk7Ci0JCXN1aXRlLmFkZFRlc3QobmV3IFdTRExDb3BpZXJUZXN0cygidGVzdENhc2UyIikpOwotCQlzdWl0ZS5hZGRUZXN0KG5ldyBXU0RMQ29waWVyVGVzdHMoInRlc3RDYXNlMyIpKTsKLQkJc3VpdGUuYWRkVGVzdChuZXcgV1NETENvcGllclRlc3RzKCJ0ZXN0Q2FzZTQiKSk7Ci0JCXN1aXRlLmFkZFRlc3QobmV3IFdTRExDb3BpZXJUZXN0cygidGVzdENhc2U1IikpOwotCQlzdWl0ZS5hZGRUZXN0KG5ldyBXU0RMQ29waWVyVGVzdHMoInRlc3RDYXNlNiIpKTsKLQkJcmV0dXJuIHN1aXRlOwotCX0KLQkJCi0JLyoqCi0JICogQ29uc3RydWN0b3IuCi0JICogCi0JICogQHBhcmFtIG5hbWUgVGVzdCBtZXRob2QgbmFtZS4KLQkgKi8KLQlwdWJsaWMgV1NETENvcGllclRlc3RzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQotCSAqLwotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JICAgIHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QoIldTRExDb3BpZXJUZXN0cyIpOwotCSAgICAKLQkgICAgaWYgKCFwcm9qZWN0LmV4aXN0cygpKQotCSAgICAJcHJvamVjdC5jcmVhdGUobnVsbCk7Ci0JICAgIAkKLQkgICAgaWYgKCFwcm9qZWN0LmlzT3BlbigpKQotCSAgICAJcHJvamVjdC5vcGVuKG51bGwpOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZSBhIGZvbGRlci4KLQkgKiBAcGFyYW0gbmFtZSBOYW1lIG9mIGZvbGRlci4KLQkgKiBAcmV0dXJuIFRoZSBjcmVhdGVkIGZvbGRlci4KLQkgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24KLQkgKi8KLQlwcm90ZWN0ZWQgSUZvbGRlciBjcmVhdGVGb2xkZXIoU3RyaW5nIG5hbWUpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJSUZvbGRlciBmb2xkZXIgPSBwcm9qZWN0LmdldEZvbGRlcihuZXcgUGF0aChuYW1lKSk7Ci0gICAgICAgIGZvbGRlci5jcmVhdGUoZmFsc2UsIHRydWUsIG51bGwpOwotCSAgICByZXR1cm4gZm9sZGVyOwotCX0KLQkKLQkvKgotCSAqIFZhbGlkYXRlIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIG9mIHRoZSB0YXJnZXQgZm9sZGVyIGFmdGVyIGNvcHlpbmcuCi0JICovCi0JcHJpdmF0ZSB2b2lkIHZhbGlkYXRlKElGb2xkZXIgZm9sZGVyLCBTdHJpbmcgZmlsZW5hbWUpIHsJCQotCQlhc3NlcnROb3ROdWxsKGZvbGRlci5maW5kTWVtYmVyKCIxLzIvMy90ZXN0LndzZGwiKSk7Ci0JCWFzc2VydE5vdE51bGwoZm9sZGVyLmZpbmRNZW1iZXIoIjEvMmEvIiArIGZpbGVuYW1lKSk7Ci0JCWFzc2VydE5vdE51bGwoZm9sZGVyLmZpbmRNZW1iZXIoIjEvMmEvdGVzdC54c2QiKSk7Ci0JCWFzc2VydE5vdE51bGwoZm9sZGVyLmZpbmRNZW1iZXIoInRlc3QueHNkIikpOwkJCi0JfQotCQotCS8qCi0JICogVmFsaWRhdGUgdGhlIHRpbWVzdGFtcHMgb2YgdGhlIGZpbGVzIGhhdmUgbm90IGNoYW5nZWQuCi0JICovCi0JcHJpdmF0ZSBsb25nW10gdmFsaWRhdGVUaW1lc3RhbXBzKElGb2xkZXIgZm9sZGVyLCBsb25nW10gb2xkVGltZXN0YW1wcykgewotCQkKLQkJbG9uZ1tdIGN1cnJlbnRUaW1lc3RhbXBzID0gbmV3IGxvbmdbM107Ci0JCQotCQljdXJyZW50VGltZXN0YW1wc1swXSA9IGZvbGRlci5maW5kTWVtYmVyKCIxLzIvMy90ZXN0LndzZGwiKS5nZXRNb2RpZmljYXRpb25TdGFtcCgpOwotCQlpZiAob2xkVGltZXN0YW1wcyAhPSBudWxsKSBhc3NlcnRFcXVhbHMoY3VycmVudFRpbWVzdGFtcHNbMF0sIG9sZFRpbWVzdGFtcHNbMF0pOwotCi0JCWN1cnJlbnRUaW1lc3RhbXBzWzFdID0gZm9sZGVyLmZpbmRNZW1iZXIoIjEvMmEvdGVzdC54c2QiKS5nZXRNb2RpZmljYXRpb25TdGFtcCgpOwotCQlpZiAob2xkVGltZXN0YW1wcyAhPSBudWxsKSBhc3NlcnRFcXVhbHMoY3VycmVudFRpbWVzdGFtcHNbMV0sIG9sZFRpbWVzdGFtcHNbMV0pOwotCQkKLQkJY3VycmVudFRpbWVzdGFtcHNbMl0gPSBmb2xkZXIuZmluZE1lbWJlcigidGVzdC54c2QiKS5nZXRNb2RpZmljYXRpb25TdGFtcCgpOwotCQlpZiAob2xkVGltZXN0YW1wcyAhPSBudWxsKSBhc3NlcnRFcXVhbHMoY3VycmVudFRpbWVzdGFtcHNbMl0sIG9sZFRpbWVzdGFtcHNbMl0pOwotCQkKLQkJcmV0dXJuIGN1cnJlbnRUaW1lc3RhbXBzOwotCX0KLQkKLQkvKioKLQkgKiBUZXN0IGNhc2UgIzEKLQkgKiAtIGNvcGllcyB3c2RsIGZyb20gdGVzdCBkYXRhIGRpcmVjdG9yeSB1c2luZyBmaWxlOi8gVVJJIAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RDYXNlMSgpIHsKLQkJdHJ5IHsKLQkJCVVSTCB1cmwgPSBUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0RW50cnkoREFUQV9ESVIgKyAiMS8yYS9zdGFydC53c2RsIik7CQkJCQotCQkJdXJsID0gRmlsZUxvY2F0b3IudG9GaWxlVVJMKHVybCk7Ci0JCQkKLQkJCUlGb2xkZXIgZm9sZGVyID0gY3JlYXRlRm9sZGVyKFdTRExfRk9MREVSMSk7Ci0JCQlTdHJpbmcgZm9sZGVyVVJJID0gInBsYXRmb3JtOi9yZXNvdXJjZSIgKyBmb2xkZXIuZ2V0RnVsbFBhdGgoKTsKLQkJCQotCQkJU3lzdGVtLm91dC5wcmludGxuKCJDb3B5aW5nIGZyb206ICIgKyB1cmwpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJDb3B5aW5nIHRvOiAgICIgKyBmb2xkZXJVUkkpOwotCQkJCi0JCQlXU0RMQ29waWVyIGNvcGllciA9IG5ldyBXU0RMQ29waWVyKCk7Ci0JCQljb3BpZXIuc2V0U291cmNlVVJJKHVybC50b1N0cmluZygpKTsKLQkJCWNvcGllci5zZXRUYXJnZXRGb2xkZXJVUkkoZm9sZGVyVVJJKTsKLQkJCQotCQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJ1bihjb3BpZXIsIG51bGwpOwotCQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQkJCQotCQkJdmFsaWRhdGUoZm9sZGVyLCAic3RhcnQud3NkbCIpOwotCQkJYXNzZXJ0RXF1YWxzKGNvcGllci5nZXRSZWxhdGl2ZVBhdGgoKS50b1N0cmluZygpLCAiMS8yYS9zdGFydC53c2RsIik7Ci0JCQkKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2VzcyEiKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihlKTsKLQkJCWFzc2VydFRydWUoZS5nZXRNZXNzYWdlKCksIGZhbHNlKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFRlc3QgY2FzZSAjMgotCSAqIC0gY29waWVzIHdzZGwgZnJvbSBvbmUgZm9sZGVyIHRvIGFub3RoZXIgdXNpbmcgcGxhdGZvcm06L3Jlc291cmNlIFVSSQotCSAqIC0gYWxzbyBjaGFuZ2VzIHRoZSB0YXJnZXQgZmlsZW5hbWUKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Q2FzZTIoKSB7Ci0JCXRyeSB7Ci0JCQlJUmVzb3VyY2UgcmVzb3VyY2UgPSBwcm9qZWN0LmdldEZvbGRlcihXU0RMX0ZPTERFUjEpLmZpbmRNZW1iZXIoIjEvMmEvc3RhcnQud3NkbCIpOwotCQkJSUZvbGRlciBmb2xkZXIgPSBjcmVhdGVGb2xkZXIoV1NETF9GT0xERVIyKTsJCQkKLQkJCQotCQkJU3RyaW5nIHBhdGggPSAicGxhdGZvcm06L3Jlc291cmNlIiArIHJlc291cmNlLmdldEZ1bGxQYXRoKCk7IAkJCQkJCQkJCQotCQkJU3RyaW5nIGZvbGRlclVSSSA9IGZvbGRlci5nZXRMb2NhdGlvblVSSSgpLnRvU3RyaW5nKCk7Ci0JCQkKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQ29weWluZyBmcm9tOiAiICsgcGF0aCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNvcHlpbmcgdG86ICAgIiArIGZvbGRlclVSSSk7Ci0JCQkKLQkJCVdTRExDb3BpZXIgY29waWVyID0gbmV3IFdTRExDb3BpZXIoKTsKLQkJCWNvcGllci5zZXRTb3VyY2VVUkkocGF0aCk7CQkJCi0JCQljb3BpZXIuc2V0VGFyZ2V0Rm9sZGVyVVJJKGZvbGRlclVSSSk7Ci0JCQljb3BpZXIuc2V0VGFyZ2V0RmlsZW5hbWUoIm5ld25hbWUud3NkbCIpOwotCQkJCi0JCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkucnVuKGNvcGllciwgbnVsbCk7Ci0JCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQkJCi0JCQl2YWxpZGF0ZShmb2xkZXIsICJuZXduYW1lLndzZGwiKTsKLQkJCWFzc2VydEVxdWFscyhjb3BpZXIuZ2V0UmVsYXRpdmVQYXRoKCkudG9TdHJpbmcoKSwgIjEvMmEvbmV3bmFtZS53c2RsIik7Ci0JCQkKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2VzcyEiKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsJCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oZSk7Ci0JCQlhc3NlcnRUcnVlKGUuZ2V0TWVzc2FnZSgpLCBmYWxzZSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBUZXN0IGNhc2UgIzMKLQkgKiAtIHJ1bnMgdGhlIFdTRExDb3BpZXIgd2l0aG91dCBzcGVjaWZ5aW5nIGEgc291cmNlIFVSSSAob3BlcmF0aW9uIHNob3VsZCBmYWlsKQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RDYXNlMygpIHsKLQkJdHJ5IHsJCQkKLQkJCUlGb2xkZXIgZm9sZGVyID0gY3JlYXRlRm9sZGVyKFdTRExfRk9MREVSMyk7Ci0JCQkKLQkJCVN0cmluZyBmb2xkZXJVUkkgPSBmb2xkZXIuZ2V0TG9jYXRpb25VUkkoKS50b1N0cmluZygpOwotCQkJCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNvcHlpbmcgZnJvbTogTi9BIik7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNvcHlpbmcgdG86ICAgIiArIGZvbGRlclVSSSk7Ci0JCQkKLQkJCVdTRExDb3BpZXIgY29waWVyID0gbmV3IFdTRExDb3BpZXIoKTsKLQkJCWNvcGllci5zZXRUYXJnZXRGb2xkZXJVUkkoZm9sZGVyVVJJKTsJCQkKLQkJCQotCQkJdHJ5IHsKLQkJCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkucnVuKGNvcGllciwgbnVsbCk7Ci0JCQkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIG5vdCBnZXQgaGVyZSIsIGZhbHNlKTsKLQkJCX0KLQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGNlKSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKGNlKTsKLQkJCX0KLQkJCQotCQkJU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzISIpOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKGUpOwotCQkJYXNzZXJ0VHJ1ZShlLmdldE1lc3NhZ2UoKSwgZmFsc2UpOwotCQl9Ci0JfQkKLQotCS8qKgotCSAqIFRlc3QgY2FzZSAjNAotCSAqIC0gcnVucyB0aGUgV1NETENvcGllciB3aXRob3V0IGNyZWF0aW5nIGEgdGFyZ2V0IGZvbGRlcgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RDYXNlNCgpIHsKLQkJdHJ5IHsKLQkJCUlSZXNvdXJjZSByZXNvdXJjZSA9IHByb2plY3QuZ2V0Rm9sZGVyKFdTRExfRk9MREVSMSkuZmluZE1lbWJlcigiMS8yYS9zdGFydC53c2RsIik7Ci0JCQlJRm9sZGVyIGZvbGRlciA9IHByb2plY3QuZ2V0Rm9sZGVyKFdTRExfRk9MREVSNCk7Ci0JCQkJCQkKLQkJCVN0cmluZyBwYXRoID0gcmVzb3VyY2UuZ2V0TG9jYXRpb25VUkkoKS50b1N0cmluZygpOwotCQkJU3RyaW5nIGZvbGRlclVSSSA9ICJwbGF0Zm9ybTovcmVzb3VyY2UiICsgZm9sZGVyLmdldEZ1bGxQYXRoKCk7Ci0JCQkKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQ29weWluZyBmcm9tOiAiICsgcGF0aCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNvcHlpbmcgdG86ICAgIiArIGZvbGRlclVSSSk7Ci0JCQlhc3NlcnRUcnVlKCFmb2xkZXIuZXhpc3RzKCkpOwotCQkJCi0JCQlXU0RMQ29waWVyIGNvcGllciA9IG5ldyBXU0RMQ29waWVyKCk7Ci0JCQljb3BpZXIuc2V0U291cmNlVVJJKHBhdGgpOwotCQkJY29waWVyLnNldFRhcmdldEZvbGRlclVSSShmb2xkZXJVUkkpOwotCQkJCi0JCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkucnVuKGNvcGllciwgbnVsbCk7Ci0JCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQkJCi0JCQlhc3NlcnRUcnVlKGZvbGRlci5leGlzdHMoKSk7Ci0JCQl2YWxpZGF0ZShmb2xkZXIsICJzdGFydC53c2RsIik7Ci0JCQlhc3NlcnRFcXVhbHMoY29waWVyLmdldFJlbGF0aXZlUGF0aCgpLnRvU3RyaW5nKCksICIxLzJhL3N0YXJ0LndzZGwiKTsKLQkJCQotCQkJU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzISIpOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKGUpOwotCQkJYXNzZXJ0VHJ1ZShlLmdldE1lc3NhZ2UoKSwgZmFsc2UpOwkJCQotCQl9Ci0JfQotCQotCS8qKgotCSAqIFRlc3QgY2FzZSAjNQotCSAqIC0gcnVucyB0aGUgV1NETENvcGllciB3aXRob3V0IHNwZWNpZnlpbmcgYSB0YXJnZXQgZm9sZGVyIChvcGVyYXRpb24gc2hvdWxkIGZhaWwpCi0JICovCi0JcHVibGljIHZvaWQgdGVzdENhc2U1KCkgewotCQl0cnkgewotCQkJSVJlc291cmNlIHJlc291cmNlID0gcHJvamVjdC5nZXRGb2xkZXIoV1NETF9GT0xERVIxKS5maW5kTWVtYmVyKCIxLzJhL3N0YXJ0LndzZGwiKTsKLQkJCQotCQkJU3RyaW5nIHBhdGggPSAicGxhdGZvcm06L3Jlc291cmNlIiArIHJlc291cmNlLmdldEZ1bGxQYXRoKCk7IAkJCQkJCQkJCQkJCQkJCQotCQkJCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNvcHlpbmcgZnJvbTogIiArIHBhdGgpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJDb3B5aW5nIHRvOiAgIE4vQSIpOwotCQkJCi0JCQlXU0RMQ29waWVyIGNvcGllciA9IG5ldyBXU0RMQ29waWVyKCk7Ci0JCQljb3BpZXIuc2V0U291cmNlVVJJKHBhdGgpOwkJCQotCQkJCi0JCQl0cnkgewotCQkJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5ydW4oY29waWVyLCBudWxsKTsKLQkJCQlhc3NlcnRUcnVlKCJTaG91bGQgbm90IGdldCBoZXJlIiwgZmFsc2UpOwotCQkJfQotCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gY2UpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oY2UpOwotCQkJfQotCQkJCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3MhIik7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oZSk7Ci0JCQlhc3NlcnRUcnVlKGUuZ2V0TWVzc2FnZSgpLCBmYWxzZSk7CQkJCi0JCX0KLQl9Ci0JCi0JLyoqCi0JICogVGVzdCBjYXNlICM2Ci0JICogLSBjb3BpZXMgd3NkbCBmcm9tIG9uZSBmb2xkZXIgb250byBpdHNlbGYgdXNpbmcgcGxhdGZvcm06L3Jlc291cmNlIFVSSQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RDYXNlNigpIHsKLQkJdHJ5IHsKLQkJCUlGb2xkZXIgZm9sZGVyID0gcHJvamVjdC5nZXRGb2xkZXIoV1NETF9GT0xERVIxKTsKLQkJCUlSZXNvdXJjZSByZXNvdXJjZSA9IGZvbGRlci5maW5kTWVtYmVyKCIxLzJhL3N0YXJ0LndzZGwiKTsKLQkJCQotCQkJU3RyaW5nIHBhdGggPSAicGxhdGZvcm06L3Jlc291cmNlIiArIHJlc291cmNlLmdldEZ1bGxQYXRoKCk7IAkJCQkJCQotCQkJU3RyaW5nIGZvbGRlclVSSSA9IGZvbGRlci5nZXRMb2NhdGlvblVSSSgpLnRvU3RyaW5nKCk7Ci0JCQkJCQkJCQkKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQ29weWluZyBmcm9tOiAiICsgcGF0aCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNvcHlpbmcgdG86ICAgIiArIGZvbGRlclVSSSk7Ci0JCQkKLQkJCVdTRExDb3BpZXIgY29waWVyID0gbmV3IFdTRExDb3BpZXIoKTsKLQkJCWNvcGllci5zZXRTb3VyY2VVUkkocGF0aCk7CQkJCi0JCQljb3BpZXIuc2V0VGFyZ2V0Rm9sZGVyVVJJKGZvbGRlclVSSSk7CQkJCi0KLQkJCWxvbmdbXSBvbGRUaW1lc3RhbXBzID0gdmFsaWRhdGVUaW1lc3RhbXBzKGZvbGRlciwgbnVsbCk7Ci0JCQkKLQkJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5ydW4oY29waWVyLCBudWxsKTsKLQkJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JCQkKLQkJCXZhbGlkYXRlKGZvbGRlciwgInN0YXJ0LndzZGwiKTsKLQkJCXZhbGlkYXRlVGltZXN0YW1wcyhmb2xkZXIsIG9sZFRpbWVzdGFtcHMpOwotCQkJYXNzZXJ0RXF1YWxzKGNvcGllci5nZXRSZWxhdGl2ZVBhdGgoKS50b1N0cmluZygpLCAiMS8yYS9zdGFydC53c2RsIik7Ci0JCQkKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2VzcyEiKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsJCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oZSk7Ci0JCQlhc3NlcnRUcnVlKGUuZ2V0TWVzc2FnZSgpLCBmYWxzZSk7Ci0JCX0KLQl9Ci19Ci0KLQotCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdW5pdHRlc3QvV1NKVW5pdENvbnN0YW50cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91bml0dGVzdC9XU0pVbml0Q29uc3RhbnRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjZTVmZjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzLnRlc3RzL3Rlc3RzL29yZy9lY2xpcHNlL3dzdC93cy90ZXN0cy91bml0dGVzdC9XU0pVbml0Q29uc3RhbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53cy50ZXN0cy51bml0dGVzdDsKLQotCi1wdWJsaWMgaW50ZXJmYWNlIFdTSlVuaXRDb25zdGFudHMgewotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBTRVJWRVJfSU5TVEFMTF9QQVRIID0gU3lzdGVtLmdldFByb3BlcnR5KCJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC41MCIpOwotICBwdWJsaWMgZmluYWwgU3RyaW5nIFJVTlRJTUVUWVBFSURfVEM1MCA9ICJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5ydW50aW1lLjUwIjsKLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIFdTX1JVTlRJTUVJRF9BWElTID0gIm9yZy5lY2xpcHNlLmpzdC53cy5ydW50aW1lLmF4aXMxMSI7Ci0gIAotICBwdWJsaWMgZmluYWwgU3RyaW5nIFNFUlZFUlRZUEVJRF9UQzUwID0gIm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LjUwIjsKLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgd2ViUHJvamVjdE5hbWUgPSAiV1AiOwotICBwdWJsaWMgZmluYWwgU3RyaW5nIHdlYlByb2plY3QyTmFtZSA9ICJXUDIiOwotICBwdWJsaWMgZmluYWwgU3RyaW5nIHdlYkNvbXBvbmVudE5hbWUgPSAid2ViQ29tcG9uZW50IjsKLSAgcHVibGljIGZpbmFsIFN0cmluZyB3ZWJDb21wb25lbnQyTmFtZSA9ICJ3ZWJDb21wMiI7Ci0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgd2ViQ29tcDNOYW1lID0gIndlYkNvbXAzIjsKLSAgcHVibGljIGZpbmFsIFN0cmluZyB3ZWJDb21wNE5hbWUgPSAid2ViQ29tcDQiOwotICAKLSAgCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZWpiUHJvamVjdE5hbWUgPSAiRUpCUHJvamVjdCI7Ci0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZWpiQ29tcG9uZW50TmFtZSA9ICJlamJDb21wb25lbnQiOwotCi0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgYXBwQ2xpZW50UHJvamVjdE5hbWUgPSAiQXBwQ2xpZW50UHJvamVjdCI7Ci0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgYXBwQ2xpZW50Q29tcE5hbWUgPSAiYXBwQ2xpZW50Q29tcG9uZW50IjsgIAotICAKLSAgcHVibGljIGZpbmFsIFN0cmluZyBlYXJDb21wTmFtZSA9ICJFQVJDb21wb25lbnQiOwotICAKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdW5pdHRlc3QvV2ViU2VydmljZUZpbmRlclRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3MudGVzdHMvdGVzdHMvb3JnL2VjbGlwc2Uvd3N0L3dzL3Rlc3RzL3VuaXR0ZXN0L1dlYlNlcnZpY2VGaW5kZXJUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDFmMTk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53cy50ZXN0cy90ZXN0cy9vcmcvZWNsaXBzZS93c3Qvd3MvdGVzdHMvdW5pdHRlc3QvV2ViU2VydmljZUZpbmRlclRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiB5eXl5bW1kZCBidWcgICAgICBFbWFpbCBhbmQgb3RoZXIgY29udGFjdCBpbmZvcm1hdGlvbgotICogLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDIwMDYwMzE3ICAgMTI3NDU2IGNicmVhbGV5QGNhLmlibS5jb20gLSBDaHJpcyBCcmVhbGV5Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3MudGVzdHMudW5pdHRlc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c2ZpbmRlci5XZWJTZXJ2aWNlRmluZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC53c3J0LldlYlNlcnZpY2VJbmZvOwotCi0vKioKLSAqIEBhdXRob3Igam9hbgotICoKLSAqLwotCi1wdWJsaWMgY2xhc3MgV2ViU2VydmljZUZpbmRlclRlc3RzIGV4dGVuZHMgVGVzdENhc2UgaW1wbGVtZW50cyBXU0pVbml0Q29uc3RhbnRzIHsKLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpewotCQlyZXR1cm4gbmV3IFRlc3RTdWl0ZShXZWJTZXJ2aWNlRmluZGVyVGVzdHMuY2xhc3MpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0V1NGaW5kZXIoKXsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJjcmVhdGluZyB3ZWIgc2VydmljZSBmaW5kZXIiKTsKLQkJV2ViU2VydmljZUZpbmRlciB3c2YgPSBXZWJTZXJ2aWNlRmluZGVyLmluc3RhbmNlKCk7Ci0JCQotCQlTeXN0ZW0ub3V0LnByaW50bG4oImF0dGVtcHRpbmcgdG8gbG9jYXRlIGFsbCB3ZWIgc2VydmljZXMgaW4gd29ya3NwYWNlIik7Ci0JCUl0ZXJhdG9yIHdzSXRlcmF0b3IgPSB3c2YuZ2V0V2ViU2VydmljZXMobnVsbCk7Ci0JCXdoaWxlICh3c0l0ZXJhdG9yLmhhc05leHQoKSkgewotCQkJV2ViU2VydmljZUluZm8gd3NJbmZvID0gKFdlYlNlcnZpY2VJbmZvKSB3c0l0ZXJhdG9yLm5leHQoKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigid2ViU2VydmljZSBVUkw6ICIgKyB3c0luZm8uZ2V0V3NkbFVSTCgpKTsKLQkJfQotCQkKLQkJU3lzdGVtLm91dC5wcmludGxuKCJmaW5pc2hlZCBmaW5kaW5nIGFsbCB3ZWJzZXJ2aWNlcyIpOwotCQkgCi0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE2OGQwZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0icGVyZm9ybWFuY2UiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIj4KLQkJPGFjY2Vzc3J1bGVzPgotCQkJPGFjY2Vzc3J1bGUga2luZD0iYWNjZXNzaWJsZSIgcGF0dGVybj0ib3JnL2VjbGlwc2Uvd3N0L3dzZGwvKioiLz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy9lY2xpcHNlL3dzdC93cy9pbnRlcm5hbC9wcmVmZXJlbmNlcy9QZXJzaXN0ZW50V1NJQ29udGV4dCIvPgotCQkJPGFjY2Vzc3J1bGUga2luZD0iYWNjZXNzaWJsZSIgcGF0dGVybj0ib3JnL2VjbGlwc2Uvd3N0L3dzL2ludGVybmFsL3BsdWdpbi9XU1BsdWdpbiIvPgotCQkJPGFjY2Vzc3J1bGUga2luZD0iYWNjZXNzaWJsZSIgcGF0dGVybj0ib3JnL2VjbGlwc2Uvd3N0L3ZhbGlkYXRpb24vaW50ZXJuYWwvKioiLz4KLQkJPC9hY2Nlc3NydWxlcz4KLQk8L2NsYXNzcGF0aGVudHJ5PgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmEyZmRhOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1iaW4KLWJ1aWxkLnhtbAotCi10ZW1wLmZvbGRlcgotcGVyZm9ybWFuY2UuamFyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzZlODYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2U8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+CQotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0gICAgIAk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiMmM1MDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jV2VkIFNlcCAyNiAwNjozMToxMiBFRFQgMjAwNwotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWVuY29kaW5nLzxwcm9qZWN0Pj1JU08tODg1OS0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4NWZhZmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0jU3VuIEp1biAwMyAwMDo0MTo0NCBFRFQgMjAwNwotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTI5YTg0ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZQotQnVuZGxlLVZlcnNpb246IDEuMC4xCi1CdW5kbGUtQ2xhc3NQYXRoOiBwZXJmb3JtYW5jZS5qYXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLlBlcmZvcm1hbmNlUGx1Z2luCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eQotUmVxdWlyZS1CdW5kbGU6IG9yZy5qdW5pdDtidW5kbGUtdmVyc2lvbj0iWzMuOC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAotIG9yZy5lY2xpcHNlLmVtZi5lY29yZSwKLSBvcmcuZWNsaXBzZS51aSwKLSBvcmcuZWNsaXBzZS51aS5pZGUsCi0gb3JnLmVjbGlwc2UudGVzdCwKLSBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmZyYW1ld29ya3MsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudWksCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbiwKLSBqYXZheC53c2RsO2J1bmRsZS12ZXJzaW9uPSJbMS40LjAsMS41LjApIiwKLSBvcmcuZWNsaXBzZS53c3Qud3MsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudi5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24udGVzdHMucGVyZm9ybWFuY2UsCi0gb3JnLmVjbGlwc2UudGVzdCwKLSBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlCi1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkYjM2ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWRkZGZmNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLXNvdXJjZS5wZXJmb3JtYW5jZS5qYXIgPSBwZXJmb3JtYW5jZS8KLW91dHB1dC5wZXJmb3JtYW5jZS5qYXIgPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBwZXJmb3JtYW5jZS5qYXIsXAotICAgICAgICAgICAgICAgdGVzdC54bWwsXAotICAgICAgICAgICAgICAgZGF0YS8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2I2MjI3OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkzIiBsb2NhdGlvbj0ic2FtcGxlODkzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY2IiBsb2NhdGlvbj0iLi9zYW1wbGU2NjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTkiIGxvY2F0aW9uPSIuXHNhbXBsZTQ1OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGNjNzhhYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMiIGxvY2F0aW9uPSJzYW1wbGUxMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNCIgbG9jYXRpb249Ii4vc2FtcGxlODM0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc1IiBsb2NhdGlvbj0iLlxzYW1wbGUzNzUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjY3ZTE0MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA4IiBsb2NhdGlvbj0ic2FtcGxlMzA4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY5IiBsb2NhdGlvbj0iLi9zYW1wbGU4Njkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDAiIGxvY2F0aW9uPSIuXHNhbXBsZTE0MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEwMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTkzZmI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEwMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODIiIGxvY2F0aW9uPSJzYW1wbGU2ODIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNyIgbG9jYXRpb249Ii4vc2FtcGxlMjcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzQiIGxvY2F0aW9uPSIuXHNhbXBsZTE3NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTAxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGUzZTBlZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgxIiBsb2NhdGlvbj0ic2FtcGxlNzgxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk3IiBsb2NhdGlvbj0iLi9zYW1wbGU3OTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTgiIGxvY2F0aW9uPSIuXHNhbXBsZTg1OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTAyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2U1ZTQ1ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkxIiBsb2NhdGlvbj0ic2FtcGxlMTkxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM2IiBsb2NhdGlvbj0iLi9zYW1wbGUzMzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODYiIGxvY2F0aW9uPSIuXHNhbXBsZTQ4Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTAzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI0NjdhYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA1IiBsb2NhdGlvbj0ic2FtcGxlNTA1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA4IiBsb2NhdGlvbj0iLi9zYW1wbGUzMDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTkiIGxvY2F0aW9uPSIuXHNhbXBsZTkxOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTA0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjVlY2I3NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk0IiBsb2NhdGlvbj0ic2FtcGxlMTk0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDciIGxvY2F0aW9uPSIuL3NhbXBsZTQ3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk5IiBsb2NhdGlvbj0iLlxzYW1wbGUxOTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEwNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTA1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3MWI2MzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTA1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NiIgbG9jYXRpb249InNhbXBsZTU2Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMiIgbG9jYXRpb249Ii4vc2FtcGxlODIyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE0IiBsb2NhdGlvbj0iLlxzYW1wbGU4MTQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEwNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTA2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5ODkxOTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTA2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNiIgbG9jYXRpb249InNhbXBsZTQwNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NyIgbG9jYXRpb249Ii4vc2FtcGxlNzk3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjcyIiBsb2NhdGlvbj0iLlxzYW1wbGUyNzIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEwNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTA3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5YWQ3ZmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTA3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NyIgbG9jYXRpb249InNhbXBsZTE4Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMiIgbG9jYXRpb249Ii4vc2FtcGxlNDIyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI0IiBsb2NhdGlvbj0iLlxzYW1wbGU5MjQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEwOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTA4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmZDYwMjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTA4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMSIgbG9jYXRpb249InNhbXBsZTQzMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1OCIgbG9jYXRpb249Ii4vc2FtcGxlODU4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA4IiBsb2NhdGlvbj0iLlxzYW1wbGUyMDgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEwOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTA5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxYmNhNzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTA5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NyIgbG9jYXRpb249InNhbXBsZTY0Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1OSIgbG9jYXRpb249Ii4vc2FtcGxlMTU5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE0IiBsb2NhdGlvbj0iLlxzYW1wbGU3MTQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTExLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YmZhZDNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTExLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTUiIGxvY2F0aW9uPSJzYW1wbGU1OTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTYiIGxvY2F0aW9uPSIuL3NhbXBsZTMxNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNSIgbG9jYXRpb249Ii5cc2FtcGxlMjM1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTExMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTEwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5ZmUyNjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTEwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NyIgbG9jYXRpb249InNhbXBsZTU3Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNSIgbG9jYXRpb249Ii4vc2FtcGxlNjE1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk2IiBsb2NhdGlvbj0iLlxzYW1wbGUxOTYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTExMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTExLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1ZmE5ZGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTExLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTExIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTExIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MSIgbG9jYXRpb249InNhbXBsZTg1MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNiIgbG9jYXRpb249Ii4vc2FtcGxlMzE2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzciIGxvY2F0aW9uPSIuXHNhbXBsZTM3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTExMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjRhYTJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTExMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTIiIGxvY2F0aW9uPSJzYW1wbGU3OTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDgiIGxvY2F0aW9uPSIuL3NhbXBsZTQ0OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3OCIgbG9jYXRpb249Ii5cc2FtcGxlMTc4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTExMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDI5MDYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTExMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzEiIGxvY2F0aW9uPSJzYW1wbGU1NzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTkiIGxvY2F0aW9uPSIuL3NhbXBsZTk1OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwOCIgbG9jYXRpb249Ii5cc2FtcGxlNzA4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTExNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTE3MDU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTExNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTQiIGxvY2F0aW9uPSJzYW1wbGUzNTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDkiIGxvY2F0aW9uPSIuL3NhbXBsZTg0OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNSIgbG9jYXRpb249Ii5cc2FtcGxlNjE1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTExNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjVlYmFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTExNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDEiIGxvY2F0aW9uPSJzYW1wbGUxNDEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OSIgbG9jYXRpb249Ii4vc2FtcGxlNTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODUiIGxvY2F0aW9uPSIuXHNhbXBsZTE4NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTE2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjY5NjFlZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIyIiBsb2NhdGlvbj0ic2FtcGxlNjIyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk2IiBsb2NhdGlvbj0iLi9zYW1wbGUyOTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDIiIGxvY2F0aW9uPSIuXHNhbXBsZTUwMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTE3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGViMjA1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUyIiBsb2NhdGlvbj0ic2FtcGxlOTUyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM1IiBsb2NhdGlvbj0iLi9zYW1wbGU4MzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NSIgbG9jYXRpb249Ii5cc2FtcGxlNTUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTExOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTE4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0OTU0YmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTE4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0OCIgbG9jYXRpb249InNhbXBsZTg0OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMSIgbG9jYXRpb249Ii4vc2FtcGxlNzIxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI2IiBsb2NhdGlvbj0iLlxzYW1wbGU5MjYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTExOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTE5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjMGM4MGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTE5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1OCIgbG9jYXRpb249InNhbXBsZTE1OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0OSIgbG9jYXRpb249Ii4vc2FtcGxlNTQ5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDcxIiBsb2NhdGlvbj0iLlxzYW1wbGU0NzEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjliNzQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzUiIGxvY2F0aW9uPSJzYW1wbGU1MzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDEiIGxvY2F0aW9uPSIuL3NhbXBsZTM0MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1OCIgbG9jYXRpb249Ii5cc2FtcGxlNjU4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEyMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTIwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3YjdjYTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTIwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MCIgbG9jYXRpb249InNhbXBsZTQ2MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMCIgbG9jYXRpb249Ii4vc2FtcGxlMTEwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk3IiBsb2NhdGlvbj0iLlxzYW1wbGU4OTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEyMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTIxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkZmFjYjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTIxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NCIgbG9jYXRpb249InNhbXBsZTE3NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNyIgbG9jYXRpb249Ii4vc2FtcGxlMzA3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMiIGxvY2F0aW9uPSIuXHNhbXBsZTgzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEyMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTVhMjc2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTUiIGxvY2F0aW9uPSJzYW1wbGU0NTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzEiIGxvY2F0aW9uPSIuL3NhbXBsZTgzMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMCIgbG9jYXRpb249Ii5cc2FtcGxlMTAwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEyMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjRmNDk1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEyMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDUiIGxvY2F0aW9uPSJzYW1wbGUzNDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMiIgbG9jYXRpb249Ii4vc2FtcGxlMTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjMiIGxvY2F0aW9uPSIuXHNhbXBsZTYyMy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTI0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQ3MGVkZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA2IiBsb2NhdGlvbj0ic2FtcGxlMjA2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEwIiBsb2NhdGlvbj0iLi9zYW1wbGUxMTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMCIgbG9jYXRpb249Ii5cc2FtcGxlMzAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEyNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTI1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwNjZiNTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTI1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4IiBsb2NhdGlvbj0ic2FtcGxlOTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOCIgbG9jYXRpb249Ii4vc2FtcGxlMzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTEiIGxvY2F0aW9uPSIuXHNhbXBsZTgxMS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTI2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDE3ZjFiZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMiIGxvY2F0aW9uPSJzYW1wbGU2My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMSIgbG9jYXRpb249Ii4vc2FtcGxlNzIxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAwIiBsb2NhdGlvbj0iLlxzYW1wbGU1MDAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEyNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTI3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1NWZhZWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTI3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NiIgbG9jYXRpb249InNhbXBsZTI3Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2OSIgbG9jYXRpb249Ii4vc2FtcGxlNDY5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA2IiBsb2NhdGlvbj0iLlxzYW1wbGU2MDYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEyOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTI4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1ZTAyMWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTI4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzOCIgbG9jYXRpb249InNhbXBsZTkzOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxOCIgbG9jYXRpb249Ii4vc2FtcGxlODE4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU5IiBsb2NhdGlvbj0iLlxzYW1wbGU2NTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEyOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTI5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyYzhiYTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTI5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NyIgbG9jYXRpb249InNhbXBsZTE2Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MCIgbG9jYXRpb249Ii4vc2FtcGxlNzkwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEwIiBsb2NhdGlvbj0iLlxzYW1wbGU4MTAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZGRmOWQxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzUiIGxvY2F0aW9uPSJzYW1wbGU2MzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODEiIGxvY2F0aW9uPSIuL3NhbXBsZTQ4MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NCIgbG9jYXRpb249Ii5cc2FtcGxlODY0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEzMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTMwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllZDc1NGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTMwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNCIgbG9jYXRpb249InNhbXBsZTkxNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NSIgbG9jYXRpb249Ii4vc2FtcGxlMzc1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMwIiBsb2NhdGlvbj0iLlxzYW1wbGU2MzAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEzMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTMxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjMTgyNzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTMxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NCIgbG9jYXRpb249InNhbXBsZTI4NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4OSIgbG9jYXRpb249Ii4vc2FtcGxlMjg5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk2IiBsb2NhdGlvbj0iLlxzYW1wbGUzOTYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEzMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTMyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmZjcyNzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTMyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1OSIgbG9jYXRpb249InNhbXBsZTg1OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMSIgbG9jYXRpb249Ii4vc2FtcGxlODAxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg1IiBsb2NhdGlvbj0iLlxzYW1wbGU0ODUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEzMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTMzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2ZDA4MWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTMzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MCIgbG9jYXRpb249InNhbXBsZTE1MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzIiBsb2NhdGlvbj0iLi9zYW1wbGUxMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMSIgbG9jYXRpb249Ii5cc2FtcGxlNTIxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEzNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YWM2ZjBkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEzNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDkiIGxvY2F0aW9uPSJzYW1wbGUyNDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDIiIGxvY2F0aW9uPSIuL3NhbXBsZTc0Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3OCIgbG9jYXRpb249Ii5cc2FtcGxlNDc4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEzNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOWMxNjZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEzNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzciIGxvY2F0aW9uPSJzYW1wbGUzNzcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDIiIGxvY2F0aW9uPSIuL3NhbXBsZTcwMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNCIgbG9jYXRpb249Ii5cc2FtcGxlOTM0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEzNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTk3OWFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEzNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjQiIGxvY2F0aW9uPSJzYW1wbGU5NjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTAiIGxvY2F0aW9uPSIuL3NhbXBsZTE1MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNyIgbG9jYXRpb249Ii5cc2FtcGxlOTE3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEzNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDZlNGRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEzNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODYiIGxvY2F0aW9uPSJzYW1wbGU3ODYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMiIgbG9jYXRpb249Ii4vc2FtcGxlMjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTIiIGxvY2F0aW9uPSIuXHNhbXBsZTM5Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTM4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODIyNmIwNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM3IiBsb2NhdGlvbj0ic2FtcGxlNzM3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQzIiBsb2NhdGlvbj0iLi9zYW1wbGU0NDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjciIGxvY2F0aW9uPSIuXHNhbXBsZTk2Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTM5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTkzM2RjMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgiIGxvY2F0aW9uPSJzYW1wbGU3OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczOSIgbG9jYXRpb249Ii4vc2FtcGxlNzM5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgwIiBsb2NhdGlvbj0iLlxzYW1wbGUxODAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzY2I0YTQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTAiIGxvY2F0aW9uPSJzYW1wbGU0OTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjciIGxvY2F0aW9uPSIuL3NhbXBsZTE2Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MSIgbG9jYXRpb249Ii5cc2FtcGxlMzQxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE0MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTQwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1OWUyNjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTQwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NCIgbG9jYXRpb249InNhbXBsZTM0NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNCIgbG9jYXRpb249Ii4vc2FtcGxlMjM0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA1IiBsb2NhdGlvbj0iLlxzYW1wbGU0MDUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE0MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTQxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmMmY5NzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTQxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5IiBsb2NhdGlvbj0ic2FtcGxlMTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDgiIGxvY2F0aW9uPSIuL3NhbXBsZTYwOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0OCIgbG9jYXRpb249Ii5cc2FtcGxlMjQ4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE0Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZmY3MWVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE0Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTIiIGxvY2F0aW9uPSJzYW1wbGU5NTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjYiIGxvY2F0aW9uPSIuL3NhbXBsZTUyNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MyIgbG9jYXRpb249Ii5cc2FtcGxlMzQzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE0My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjIyM2U4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE0My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDgiIGxvY2F0aW9uPSJzYW1wbGU2MDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTIiIGxvY2F0aW9uPSIuL3NhbXBsZTUxMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyIiBsb2NhdGlvbj0iLlxzYW1wbGU2Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTQ0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRmNWVmMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ4IiBsb2NhdGlvbj0ic2FtcGxlNjQ4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA2IiBsb2NhdGlvbj0iLi9zYW1wbGU0MDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzIiIGxvY2F0aW9uPSIuXHNhbXBsZTczMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTQ1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzVjMGJiNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgxIiBsb2NhdGlvbj0ic2FtcGxlOTgxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI1IiBsb2NhdGlvbj0iLi9zYW1wbGU5MjUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODYiIGxvY2F0aW9uPSIuXHNhbXBsZTU4Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTQ2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTk0ODcxZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ4IiBsb2NhdGlvbj0ic2FtcGxlOTQ4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYwIiBsb2NhdGlvbj0iLi9zYW1wbGUxNjAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODQiIGxvY2F0aW9uPSIuXHNhbXBsZTQ4NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTQ3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWFhNDA4Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk3IiBsb2NhdGlvbj0ic2FtcGxlNDk3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgwIiBsb2NhdGlvbj0iLi9zYW1wbGU1ODAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzMiIGxvY2F0aW9uPSIuXHNhbXBsZTY3My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTQ4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjEwNWM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMwIiBsb2NhdGlvbj0ic2FtcGxlMjMwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY4IiBsb2NhdGlvbj0iLi9zYW1wbGU1Njgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTMiIGxvY2F0aW9uPSIuXHNhbXBsZTY1My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTQ5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjMzYzhmYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM1IiBsb2NhdGlvbj0ic2FtcGxlMjM1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQwIiBsb2NhdGlvbj0iLi9zYW1wbGU2NDAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODciIGxvY2F0aW9uPSIuXHNhbXBsZTg4Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2NWY3ODkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NiIgbG9jYXRpb249InNhbXBsZTY1Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4OSIgbG9jYXRpb249Ii4vc2FtcGxlNzg5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAyIiBsb2NhdGlvbj0iLlxzYW1wbGU5MDIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTUwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2YwMDI2OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk1IiBsb2NhdGlvbj0ic2FtcGxlOTk1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY2IiBsb2NhdGlvbj0iLi9zYW1wbGU2NjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTkiIGxvY2F0aW9uPSIuXHNhbXBsZTI5OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDVmZjU4ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAiIGxvY2F0aW9uPSJzYW1wbGUxMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5IiBsb2NhdGlvbj0iLi9zYW1wbGU0OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NyIgbG9jYXRpb249Ii5cc2FtcGxlNzY3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE1Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmJjNTRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE1Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDciIGxvY2F0aW9uPSJzYW1wbGU4NDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjciIGxvY2F0aW9uPSIuL3NhbXBsZTc2Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNSIgbG9jYXRpb249Ii5cc2FtcGxlOTM1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE1My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOGIxZmY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE1My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTAiIGxvY2F0aW9uPSJzYW1wbGU1MTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjQiIGxvY2F0aW9uPSIuL3NhbXBsZTcyNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMSIgbG9jYXRpb249Ii5cc2FtcGxlMjIxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE1NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDUyOTA5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE1NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTQiIGxvY2F0aW9uPSJzYW1wbGU0MTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjQiIGxvY2F0aW9uPSIuL3NhbXBsZTM2NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNCIgbG9jYXRpb249Ii5cc2FtcGxlODI0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE1NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZmUzZWQ0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE1NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTgiIGxvY2F0aW9uPSJzYW1wbGU2NTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDYiIGxvY2F0aW9uPSIuL3NhbXBsZTkwNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MCIgbG9jYXRpb249Ii5cc2FtcGxlMjgwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE1Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTRlZWZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE1Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjkiIGxvY2F0aW9uPSJzYW1wbGUyMjkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTAiIGxvY2F0aW9uPSIuL3NhbXBsZTc5MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NiIgbG9jYXRpb249Ii5cc2FtcGxlNTY2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE1Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDFjYzM0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE1Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MiIgbG9jYXRpb249InNhbXBsZTUyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc0IiBsb2NhdGlvbj0iLi9zYW1wbGU2NzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzciIGxvY2F0aW9uPSIuXHNhbXBsZTkzNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE0ZDMwMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI2IiBsb2NhdGlvbj0ic2FtcGxlMzI2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc2IiBsb2NhdGlvbj0iLi9zYW1wbGUxNzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzMiIGxvY2F0aW9uPSIuXHNhbXBsZTYzMy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTU5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTM0ODFmYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc0IiBsb2NhdGlvbj0ic2FtcGxlMzc0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEzIiBsb2NhdGlvbj0iLi9zYW1wbGU0MTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzkiIGxvY2F0aW9uPSIuXHNhbXBsZTMzOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiNTE1ZWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExIiBsb2NhdGlvbj0ic2FtcGxlMTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MyIgbG9jYXRpb249Ii4vc2FtcGxlODMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzMiIGxvY2F0aW9uPSIuXHNhbXBsZTkzMy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE2MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Yjc0NDFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE2MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTMiIGxvY2F0aW9uPSJzYW1wbGUxMTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTEiIGxvY2F0aW9uPSIuL3NhbXBsZTg1MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNSIgbG9jYXRpb249Ii5cc2FtcGxlNzM1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE2MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDdiOWJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE2MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjciIGxvY2F0aW9uPSJzYW1wbGUxMjcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzQiIGxvY2F0aW9uPSIuL3NhbXBsZTI3NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MCIgbG9jYXRpb249Ii5cc2FtcGxlMzkwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE2Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTk1Y2NjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE2Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjEiIGxvY2F0aW9uPSJzYW1wbGUzMjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzYiIGxvY2F0aW9uPSIuL3NhbXBsZTUzNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNyIgbG9jYXRpb249Ii5cc2FtcGxlMjM3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE2My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNGMwNGM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE2My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDEiIGxvY2F0aW9uPSJzYW1wbGU5NDEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NyIgbG9jYXRpb249Ii4vc2FtcGxlNzcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDUiIGxvY2F0aW9uPSIuXHNhbXBsZTE0NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTY0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzM0ZDY2OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU0IiBsb2NhdGlvbj0ic2FtcGxlODU0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE4IiBsb2NhdGlvbj0iLi9zYW1wbGU0MTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODUiIGxvY2F0aW9uPSIuXHNhbXBsZTE4NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTY1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTUxYjJjMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIzIiBsb2NhdGlvbj0ic2FtcGxlOTIzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc4IiBsb2NhdGlvbj0iLi9zYW1wbGU5Nzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDUiIGxvY2F0aW9uPSIuXHNhbXBsZTM0NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTY2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFiMDRlOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk1IiBsb2NhdGlvbj0ic2FtcGxlODk1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUwIiBsb2NhdGlvbj0iLi9zYW1wbGUyNTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NSIgbG9jYXRpb249Ii5cc2FtcGxlNzUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE2Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTY3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1YmJmZTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTY3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MCIgbG9jYXRpb249InNhbXBsZTE2MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMyIgbG9jYXRpb249Ii4vc2FtcGxlODIzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM5IiBsb2NhdGlvbj0iLlxzYW1wbGU2Mzkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE2OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTY4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1NGNlNjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTY4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5OCIgbG9jYXRpb249InNhbXBsZTY5OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NiIgbG9jYXRpb249Ii4vc2FtcGxlNTQ2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAwIiBsb2NhdGlvbj0iLlxzYW1wbGU0MDAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE2OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTY5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0NjcwZTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTY5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzOSIgbG9jYXRpb249InNhbXBsZTMzOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNyIgbG9jYXRpb249Ii4vc2FtcGxlNTA3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE1IiBsb2NhdGlvbj0iLlxzYW1wbGU2MTUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzdiZjkzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTAiIGxvY2F0aW9uPSJzYW1wbGU4NTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTkiIGxvY2F0aW9uPSIuL3NhbXBsZTM1OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNyIgbG9jYXRpb249Ii5cc2FtcGxlOTI3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE3MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTcwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMzRhYTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTcwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTcwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTcwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NSIgbG9jYXRpb249InNhbXBsZTY0NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MSIgbG9jYXRpb249Ii4vc2FtcGxlODcxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ0IiBsb2NhdGlvbj0iLlxzYW1wbGU0NDQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTcwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE3MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTcxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2YWJhODMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTcxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTcxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTcxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwIiBsb2NhdGlvbj0ic2FtcGxlMjAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzIiIGxvY2F0aW9uPSIuL3NhbXBsZTEzMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNSIgbG9jYXRpb249Ii5cc2FtcGxlNjA1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE3Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjNhZjg1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE3Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzIiIGxvY2F0aW9uPSJzYW1wbGU0NzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTQiIGxvY2F0aW9uPSIuL3NhbXBsZTU5NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3OSIgbG9jYXRpb249Ii5cc2FtcGxlNzc5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE3My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODg1YWIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE3My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzAiIGxvY2F0aW9uPSJzYW1wbGU3NzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMiIgbG9jYXRpb249Ii4vc2FtcGxlMzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTgiIGxvY2F0aW9uPSIuXHNhbXBsZTM5OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTc0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTMyMzExNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIzIiBsb2NhdGlvbj0ic2FtcGxlNTIzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTcxIiBsb2NhdGlvbj0iLi9zYW1wbGU1NzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDUiIGxvY2F0aW9uPSIuXHNhbXBsZTU0NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTc1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ZkNWE5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk2IiBsb2NhdGlvbj0ic2FtcGxlNTk2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA3IiBsb2NhdGlvbj0iLi9zYW1wbGU4MDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDQiIGxvY2F0aW9uPSIuXHNhbXBsZTMwNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTc2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGJhYmJkYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMzIiBsb2NhdGlvbj0ic2FtcGxlNjMzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkzIiBsb2NhdGlvbj0iLi9zYW1wbGUxOTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDUiIGxvY2F0aW9uPSIuXHNhbXBsZTgwNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTc3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODhiOWNkNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQxIiBsb2NhdGlvbj0ic2FtcGxlMjQxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgyIiBsb2NhdGlvbj0iLi9zYW1wbGU0ODIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDAiIGxvY2F0aW9uPSIuXHNhbXBsZTE0MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTc4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjFlOTFmMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQiIGxvY2F0aW9uPSJzYW1wbGUzNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MiIgbG9jYXRpb249Ii4vc2FtcGxlNjUyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYxIiBsb2NhdGlvbj0iLlxzYW1wbGU3NjEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE3OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTc5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3OTJmYTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTc5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MyIgbG9jYXRpb249InNhbXBsZTg2My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMSIgbG9jYXRpb249Ii4vc2FtcGxlODIxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc2IiBsb2NhdGlvbj0iLlxzYW1wbGU1NzYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOGFmYzk2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjUiIGxvY2F0aW9uPSJzYW1wbGU5NjUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzYiIGxvY2F0aW9uPSIuL3NhbXBsZTc3Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMyIgbG9jYXRpb249Ii5cc2FtcGxlNjEzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTgwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzNzEwMTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTgwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4OCIgbG9jYXRpb249InNhbXBsZTQ4OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MiIgbG9jYXRpb249Ii4vc2FtcGxlNTkyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI1IiBsb2NhdGlvbj0iLlxzYW1wbGU4MjUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTgxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzOGIzMWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTgxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzOCIgbG9jYXRpb249InNhbXBsZTUzOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MyIgbG9jYXRpb249Ii4vc2FtcGxlOTQzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk1IiBsb2NhdGlvbj0iLlxzYW1wbGUyOTUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTgyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3Y2NiODIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTgyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NCIgbG9jYXRpb249InNhbXBsZTg5NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MSIgbG9jYXRpb249Ii4vc2FtcGxlOTYxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMwIiBsb2NhdGlvbj0iLlxzYW1wbGU3MzAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTgzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3YjVkNTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTgzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MSIgbG9jYXRpb249InNhbXBsZTk3MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1OCIgbG9jYXRpb249Ii4vc2FtcGxlMjU4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgwIiBsb2NhdGlvbj0iLlxzYW1wbGU0ODAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTg0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhOGYyZjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTg0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0IiBsb2NhdGlvbj0ic2FtcGxlNDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODEiIGxvY2F0aW9uPSIuL3NhbXBsZTM4MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2IiBsb2NhdGlvbj0iLlxzYW1wbGU5Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTg1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxODUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQ5MTRhOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxODUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQzIiBsb2NhdGlvbj0ic2FtcGxlOTQzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI1IiBsb2NhdGlvbj0iLi9zYW1wbGU4MjUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNCIgbG9jYXRpb249Ii5cc2FtcGxlMjQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTg2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2MDVhZGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTg2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNCIgbG9jYXRpb249InNhbXBsZTgzNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNiIgbG9jYXRpb249Ii4vc2FtcGxlODA2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA4IiBsb2NhdGlvbj0iLlxzYW1wbGU2MDgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTg3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0ZGIyM2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTg3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwIiBsb2NhdGlvbj0ic2FtcGxlNjAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTEiIGxvY2F0aW9uPSIuL3NhbXBsZTQ1MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2OCIgbG9jYXRpb249Ii5cc2FtcGxlOTY4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxODgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTEwM2Y0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjgiIGxvY2F0aW9uPSJzYW1wbGU3Mjgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODYiIGxvY2F0aW9uPSIuL3NhbXBsZTI4Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNSIgbG9jYXRpb249Ii5cc2FtcGxlMzI1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxODkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNmYyMmY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzkiIGxvY2F0aW9uPSJzYW1wbGU2Mzkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMCIgbG9jYXRpb249Ii4vc2FtcGxlMTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjUiIGxvY2F0aW9uPSIuXHNhbXBsZTc2NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyM2E1YTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MiIgbG9jYXRpb249InNhbXBsZTM3Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MyIgbG9jYXRpb249Ii4vc2FtcGxlMjYzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMiIGxvY2F0aW9uPSIuXHNhbXBsZTgzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTkwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhOWNjMGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTkwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NSIgbG9jYXRpb249InNhbXBsZTU4NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NiIgbG9jYXRpb249Ii4vc2FtcGxlNDY2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM2IiBsb2NhdGlvbj0iLlxzYW1wbGU4MzYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTkxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmMDNmMGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTkxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MiIgbG9jYXRpb249InNhbXBsZTI5Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NCIgbG9jYXRpb249Ii4vc2FtcGxlNTc0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkyIiBsb2NhdGlvbj0iLlxzYW1wbGUzOTIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTkyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2NGQ2MWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTkyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MSIgbG9jYXRpb249InNhbXBsZTU4MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMyIgbG9jYXRpb249Ii4vc2FtcGxlNTAzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUyIiBsb2NhdGlvbj0iLlxzYW1wbGU5NTIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTkzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5N2VkNzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTkzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3NSIgbG9jYXRpb249InNhbXBsZTk3NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNiIgbG9jYXRpb249Ii4vc2FtcGxlMTE2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE5IiBsb2NhdGlvbj0iLlxzYW1wbGUyMTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTk0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwZDZlM2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTk0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNSIgbG9jYXRpb249InNhbXBsZTQyNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNCIgbG9jYXRpb249Ii4vc2FtcGxlNDE0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk5IiBsb2NhdGlvbj0iLlxzYW1wbGUyOTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTk1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5NDBhMGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTk1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5IiBsb2NhdGlvbj0ic2FtcGxlMzkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzAiIGxvY2F0aW9uPSIuL3NhbXBsZTY3MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MSIgbG9jYXRpb249Ii5cc2FtcGxlMjkxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDZmZDg4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzciIGxvY2F0aW9uPSJzYW1wbGU3Mzcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTMiIGxvY2F0aW9uPSIuL3NhbXBsZTk1My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwIiBsb2NhdGlvbj0iLlxzYW1wbGU0MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTk3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTBmNGYzYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk0IiBsb2NhdGlvbj0ic2FtcGxlMTk0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgyIiBsb2NhdGlvbj0iLi9zYW1wbGUzODIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDYiIGxvY2F0aW9uPSIuXHNhbXBsZTg0Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTk4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjU0NDVkNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE5IiBsb2NhdGlvbj0ic2FtcGxlNDE5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIyIiBsb2NhdGlvbj0iLi9zYW1wbGU3MjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzEiIGxvY2F0aW9uPSIuXHNhbXBsZTY3MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTk5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWJjMTg1NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxOTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYyIiBsb2NhdGlvbj0ic2FtcGxlNzYyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM5IiBsb2NhdGlvbj0iLi9zYW1wbGU1Mzkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzciIGxvY2F0aW9uPSIuXHNhbXBsZTg3Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzU3YTBhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjQiIGxvY2F0aW9uPSJzYW1wbGUzNjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDQiIGxvY2F0aW9uPSIuL3NhbXBsZTg0NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1OCIgbG9jYXRpb249Ii5cc2FtcGxlMjU4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0MDcyMDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NCIgbG9jYXRpb249InNhbXBsZTc1NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NiIgbG9jYXRpb249Ii4vc2FtcGxlOTQ2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc2IiBsb2NhdGlvbj0iLlxzYW1wbGU3NzYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjAwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGMyYTE1Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU3IiBsb2NhdGlvbj0ic2FtcGxlNDU3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE2IiBsb2NhdGlvbj0iLi9zYW1wbGU2MTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzMiIGxvY2F0aW9uPSIuXHNhbXBsZTY3My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjAxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2UxZTdhNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI1IiBsb2NhdGlvbj0ic2FtcGxlNTI1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA2IiBsb2NhdGlvbj0iLi9zYW1wbGU1MDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTEiIGxvY2F0aW9uPSIuXHNhbXBsZTE1MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjAyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODUyOGYxNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM0IiBsb2NhdGlvbj0ic2FtcGxlMTM0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAyIiBsb2NhdGlvbj0iLi9zYW1wbGU3MDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzEiIGxvY2F0aW9uPSIuXHNhbXBsZTU3MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjAzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2QxMjNlOTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjAzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NSIgbG9jYXRpb249InNhbXBsZTk4NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNSIgbG9jYXRpb249Ii4vc2FtcGxlMTM1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ3IiBsb2NhdGlvbj0iLlxzYW1wbGUzNDcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjA0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmNjBjY2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjA0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMSIgbG9jYXRpb249InNhbXBsZTIwMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2OCIgbG9jYXRpb249Ii4vc2FtcGxlMzY4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM0IiBsb2NhdGlvbj0iLlxzYW1wbGU3MzQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjA1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0MzMyZWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjA1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMSIgbG9jYXRpb249InNhbXBsZTQwMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MyIgbG9jYXRpb249Ii4vc2FtcGxlNjgzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA3IiBsb2NhdGlvbj0iLlxzYW1wbGU2MDcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjA2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyNjcxOWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjA2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMyIgbG9jYXRpb249InNhbXBsZTkxMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNiIgbG9jYXRpb249Ii4vc2FtcGxlODI2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQyIiBsb2NhdGlvbj0iLlxzYW1wbGUxNDIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjA3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0NDBlNTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjA3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1OSIgbG9jYXRpb249InNhbXBsZTY1OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NCIgbG9jYXRpb249Ii4vc2FtcGxlNDg0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU5IiBsb2NhdGlvbj0iLlxzYW1wbGUzNTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjA4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1YTRlY2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjA4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NiIgbG9jYXRpb249InNhbXBsZTk5Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MSIgbG9jYXRpb249Ii4vc2FtcGxlNzQxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkzIiBsb2NhdGlvbj0iLlxzYW1wbGUxOTMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjA5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhZjI1YjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjA5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMyIgbG9jYXRpb249InNhbXBsZTMzMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4OCIgbG9jYXRpb249Ii4vc2FtcGxlMTg4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEzIiBsb2NhdGlvbj0iLlxzYW1wbGU0MTMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODI1NTIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODEiIGxvY2F0aW9uPSJzYW1wbGU5ODEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzMiIGxvY2F0aW9uPSIuL3NhbXBsZTE3My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyOCIgbG9jYXRpb249Ii5cc2FtcGxlMzI4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIxMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjEwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczM2U0ZWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjEwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4OCIgbG9jYXRpb249InNhbXBsZTY4OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNiIgbG9jYXRpb249Ii4vc2FtcGxlOTA2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc0IiBsb2NhdGlvbj0iLlxzYW1wbGUyNzQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIxMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjExLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0NzM5YzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjExLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjExIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjExIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNyIgbG9jYXRpb249InNhbXBsZTcwNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0OSIgbG9jYXRpb249Ii4vc2FtcGxlNDQ5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA4IiBsb2NhdGlvbj0iLlxzYW1wbGU3MDgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjExIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIxMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllNTQxNmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjEyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NSIgbG9jYXRpb249InNhbXBsZTg1NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwOSIgbG9jYXRpb249Ii4vc2FtcGxlOTA5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU0IiBsb2NhdGlvbj0iLlxzYW1wbGU0NTQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIxMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjEzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlZjIwMzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjEzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5IiBsb2NhdGlvbj0ic2FtcGxlMzkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTEiIGxvY2F0aW9uPSIuL3NhbXBsZTI1MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMCIgbG9jYXRpb249Ii5cc2FtcGxlODAwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIxNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDY0M2FhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIxNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjIiIGxvY2F0aW9uPSJzYW1wbGUyNjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDUiIGxvY2F0aW9uPSIuL3NhbXBsZTMwNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MyIgbG9jYXRpb249Ii5cc2FtcGxlOTQzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIxNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjIyNzc1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIxNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDUiIGxvY2F0aW9uPSJzYW1wbGU0MDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0IiBsb2NhdGlvbj0iLi9zYW1wbGU0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNCIgbG9jYXRpb249Ii5cc2FtcGxlNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjE2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmJmYWE5Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA3IiBsb2NhdGlvbj0ic2FtcGxlODA3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAzIiBsb2NhdGlvbj0iLi9zYW1wbGUyMDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTgiIGxvY2F0aW9uPSIuXHNhbXBsZTE1OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjE3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWVjMmMxNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc1IiBsb2NhdGlvbj0ic2FtcGxlOTc1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA4IiBsb2NhdGlvbj0iLi9zYW1wbGU3MDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDYiIGxvY2F0aW9uPSIuXHNhbXBsZTc0Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjE4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTdiMmJkYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM3IiBsb2NhdGlvbj0ic2FtcGxlMzM3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkzIiBsb2NhdGlvbj0iLi9zYW1wbGUzOTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTIiIGxvY2F0aW9uPSIuXHNhbXBsZTMxMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjE5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg2ODFjMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkxIiBsb2NhdGlvbj0ic2FtcGxlODkxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA2IiBsb2NhdGlvbj0iLi9zYW1wbGUxMDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTUiIGxvY2F0aW9uPSIuXHNhbXBsZTUxNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2NmRmNTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NiIgbG9jYXRpb249InNhbXBsZTY0Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MyIgbG9jYXRpb249Ii4vc2FtcGxlODgzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMzIiBsb2NhdGlvbj0iLlxzYW1wbGU5MzMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjIwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjU1MTNjYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQyIiBsb2NhdGlvbj0ic2FtcGxlODQyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEzIiBsb2NhdGlvbj0iLi9zYW1wbGU3MTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjMiIGxvY2F0aW9uPSIuXHNhbXBsZTY2My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjIxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTM4OWI3NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE3IiBsb2NhdGlvbj0ic2FtcGxlMjE3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc4IiBsb2NhdGlvbj0iLi9zYW1wbGU5Nzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODMiIGxvY2F0aW9uPSIuXHNhbXBsZTY4My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjIyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjlmNTc0NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA0IiBsb2NhdGlvbj0ic2FtcGxlNDA0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM3IiBsb2NhdGlvbj0iLi9zYW1wbGUyMzcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzkiIGxvY2F0aW9uPSIuXHNhbXBsZTgzOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjIzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY3OTgxNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc4IiBsb2NhdGlvbj0ic2FtcGxlOTc4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc4IiBsb2NhdGlvbj0iLi9zYW1wbGUzNzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzUiIGxvY2F0aW9uPSIuXHNhbXBsZTM3NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjI0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmEyYzI1YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTcxIiBsb2NhdGlvbj0ic2FtcGxlOTcxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzcwIiBsb2NhdGlvbj0iLi9zYW1wbGUzNzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OCIgbG9jYXRpb249Ii5cc2FtcGxlOTgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIyNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjI1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5NDA2ODAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjI1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMSIgbG9jYXRpb249InNhbXBsZTIyMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNiIgbG9jYXRpb249Ii4vc2FtcGxlNDE2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQyIiBsb2NhdGlvbj0iLlxzYW1wbGU5NDIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIyNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjI2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmOWJmM2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjI2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NSIgbG9jYXRpb249InNhbXBsZTc3NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NyIgbG9jYXRpb249Ii4vc2FtcGxlNDY3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIiIGxvY2F0aW9uPSIuXHNhbXBsZTkyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIyNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGQyNGVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIyNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTYiIGxvY2F0aW9uPSJzYW1wbGUzOTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzciIGxvY2F0aW9uPSIuL3NhbXBsZTkzNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMCIgbG9jYXRpb249Ii5cc2FtcGxlNTIwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIyOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjY2RiYzA4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzkiIGxvY2F0aW9uPSJzYW1wbGU0Mzkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDYiIGxvY2F0aW9uPSIuL3NhbXBsZTc0Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNyIgbG9jYXRpb249Ii5cc2FtcGxlOTE3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIyOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZWUyZWI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIyOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjgiIGxvY2F0aW9uPSJzYW1wbGU0Njgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDkiIGxvY2F0aW9uPSIuL3NhbXBsZTUwOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NiIgbG9jYXRpb249Ii5cc2FtcGxlMTk2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDJiZTE0My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODExIiBsb2NhdGlvbj0ic2FtcGxlODExLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSIgbG9jYXRpb249Ii4vc2FtcGxlOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNSIgbG9jYXRpb249Ii5cc2FtcGxlNzE1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIzMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjMwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4MjRkNTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjMwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MCIgbG9jYXRpb249InNhbXBsZTY5MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyNSIgbG9jYXRpb249Ii4vc2FtcGxlNjI1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUiIGxvY2F0aW9uPSIuXHNhbXBsZTE1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIzMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTkzMjVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIzMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzYiIGxvY2F0aW9uPSJzYW1wbGU4MzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTgiIGxvY2F0aW9uPSIuL3NhbXBsZTMxOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNiIgbG9jYXRpb249Ii5cc2FtcGxlODA2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIzMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjcyZmQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIzMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzYiIGxvY2F0aW9uPSJzYW1wbGU2MzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDgiIGxvY2F0aW9uPSIuL3NhbXBsZTMwOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNSIgbG9jYXRpb249Ii5cc2FtcGxlODE1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIzMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzQ0Y2IwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIzMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDYiIGxvY2F0aW9uPSJzYW1wbGU3NDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOSIgbG9jYXRpb249Ii4vc2FtcGxlMjkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDIiIGxvY2F0aW9uPSIuXHNhbXBsZTQ0Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjM0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDdkMGZjNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYiIGxvY2F0aW9uPSJzYW1wbGU4Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MyIgbG9jYXRpb249Ii4vc2FtcGxlNTYzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU0IiBsb2NhdGlvbj0iLlxzYW1wbGU4NTQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIzNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjM1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhNDY4NTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjM1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5IiBsb2NhdGlvbj0ic2FtcGxlNDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjYiIGxvY2F0aW9uPSIuL3NhbXBsZTkyNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MSIgbG9jYXRpb249Ii5cc2FtcGxlODkxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIzNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODdiZTYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIzNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODUiIGxvY2F0aW9uPSJzYW1wbGUzODUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDAiIGxvY2F0aW9uPSIuL3NhbXBsZTIwMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NyIgbG9jYXRpb249Ii5cc2FtcGxlODY3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIzNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOThjOGE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIzNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjciIGxvY2F0aW9uPSJzYW1wbGUyNjcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODAiIGxvY2F0aW9uPSIuL3NhbXBsZTc4MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2OSIgbG9jYXRpb249Ii5cc2FtcGxlNTY5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIzOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTUxMTg5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIzOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzciIGxvY2F0aW9uPSJzYW1wbGU2Mzcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTEiIGxvY2F0aW9uPSIuL3NhbXBsZTE1MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1OCIgbG9jYXRpb249Ii5cc2FtcGxlODU4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIzOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTk1OTExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIzOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzIiIGxvY2F0aW9uPSJzYW1wbGU2NzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDMiIGxvY2F0aW9uPSIuL3NhbXBsZTgwMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MiIgbG9jYXRpb249Ii5cc2FtcGxlNjYyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjkxYmMwOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY0IiBsb2NhdGlvbj0ic2FtcGxlMzY0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAwIiBsb2NhdGlvbj0iLi9zYW1wbGUyMDAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzUiIGxvY2F0aW9uPSIuXHNhbXBsZTkzNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI0MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNmJkYzdlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI0MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODQiIGxvY2F0aW9uPSJzYW1wbGU5ODQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTAiIGxvY2F0aW9uPSIuL3NhbXBsZTUxMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2OCIgbG9jYXRpb249Ii5cc2FtcGxlMjY4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI0MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOWE0NjdkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI0MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDgiIGxvY2F0aW9uPSJzYW1wbGU3NDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NSIgbG9jYXRpb249Ii4vc2FtcGxlODUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODUiIGxvY2F0aW9uPSIuXHNhbXBsZTE4NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjQyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGU5OGNlMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI0IiBsb2NhdGlvbj0ic2FtcGxlNjI0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc3IiBsb2NhdGlvbj0iLi9zYW1wbGU4Nzcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDgiIGxvY2F0aW9uPSIuXHNhbXBsZTE0OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjQzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2RhYmY1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEzIiBsb2NhdGlvbj0ic2FtcGxlNTEzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMzIiBsb2NhdGlvbj0iLi9zYW1wbGUzMzMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDgiIGxvY2F0aW9uPSIuXHNhbXBsZTQwOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjQ0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmI5NDA5My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY3IiBsb2NhdGlvbj0ic2FtcGxlMzY3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQiIGxvY2F0aW9uPSIuL3NhbXBsZTM0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI3IiBsb2NhdGlvbj0iLlxzYW1wbGUxMjcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjQ1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5MmFkNDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjQ1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NCIgbG9jYXRpb249InNhbXBsZTY1NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0OSIgbG9jYXRpb249Ii4vc2FtcGxlNDQ5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYxIiBsb2NhdGlvbj0iLlxzYW1wbGUzNjEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI0Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjQ2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjOWRmNWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjQ2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5IiBsb2NhdGlvbj0ic2FtcGxlNzkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTgiIGxvY2F0aW9uPSIuL3NhbXBsZTM1OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNSIgbG9jYXRpb249Ii5cc2FtcGxlMjA1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI0Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTA0MTE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI0Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODEiIGxvY2F0aW9uPSJzYW1wbGU3ODEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTkiIGxvY2F0aW9uPSIuL3NhbXBsZTI5OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NSIgbG9jYXRpb249Ii5cc2FtcGxlODk1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI0OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZThmMWNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI0OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjUiIGxvY2F0aW9uPSJzYW1wbGUxMjUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzIiIGxvY2F0aW9uPSIuL3NhbXBsZTE3Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyIiBsb2NhdGlvbj0iLlxzYW1wbGU2Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjQ5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzJkMGM3MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMzIiBsb2NhdGlvbj0ic2FtcGxlNDMzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMxIiBsb2NhdGlvbj0iLi9zYW1wbGU3MzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzUiIGxvY2F0aW9uPSIuXHNhbXBsZTkzNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5N2FhY2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NyIgbG9jYXRpb249InNhbXBsZTM5Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MyIgbG9jYXRpb249Ii4vc2FtcGxlMTUzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkwIiBsb2NhdGlvbj0iLlxzYW1wbGUzOTAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjUwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGIxYzg0Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUwIiBsb2NhdGlvbj0ic2FtcGxlMzUwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk2IiBsb2NhdGlvbj0iLi9zYW1wbGU2OTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTkiIGxvY2F0aW9uPSIuXHNhbXBsZTQ5OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJiOTVmNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYiIGxvY2F0aW9uPSJzYW1wbGUyNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MCIgbG9jYXRpb249Ii4vc2FtcGxlNTQwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQyIiBsb2NhdGlvbj0iLlxzYW1wbGU5NDIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI1Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjUyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiZTExZWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NSIgbG9jYXRpb249InNhbXBsZTE0NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MiIgbG9jYXRpb249Ii4vc2FtcGxlNDUyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg1IiBsb2NhdGlvbj0iLlxzYW1wbGUzODUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI1My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2YjU1OTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMyIgbG9jYXRpb249InNhbXBsZTUyMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxIiBsb2NhdGlvbj0iLi9zYW1wbGU3MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3IiBsb2NhdGlvbj0iLlxzYW1wbGU4Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjk3ZDQ5OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc5IiBsb2NhdGlvbj0ic2FtcGxlMzc5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk2IiBsb2NhdGlvbj0iLi9zYW1wbGUxOTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTEiIGxvY2F0aW9uPSIuXHNhbXBsZTk1MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjU1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGZiMjJiZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAxIiBsb2NhdGlvbj0ic2FtcGxlNTAxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIzIiBsb2NhdGlvbj0iLi9zYW1wbGU2MjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjUiIGxvY2F0aW9uPSIuXHNhbXBsZTEyNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjU2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThhNmE0OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY3IiBsb2NhdGlvbj0ic2FtcGxlOTY3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc2IiBsb2NhdGlvbj0iLi9zYW1wbGU1NzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjgiIGxvY2F0aW9uPSIuXHNhbXBsZTMyOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGM0NTU0YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA4IiBsb2NhdGlvbj0ic2FtcGxlMTA4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE4IiBsb2NhdGlvbj0iLi9zYW1wbGU2MTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTUiIGxvY2F0aW9uPSIuXHNhbXBsZTk5NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY2ZTI5Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA5IiBsb2NhdGlvbj0ic2FtcGxlMzA5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY0IiBsb2NhdGlvbj0iLi9zYW1wbGUzNjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDIiIGxvY2F0aW9uPSIuXHNhbXBsZTYwMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjU5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQ1NzU5NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM0IiBsb2NhdGlvbj0ic2FtcGxlMjM0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUzIiBsb2NhdGlvbj0iLi9zYW1wbGUzNTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTgiIGxvY2F0aW9uPSIuXHNhbXBsZTI5OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlOWFkMjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NiIgbG9jYXRpb249InNhbXBsZTk4Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MyIgbG9jYXRpb249Ii4vc2FtcGxlNDQzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgzIiBsb2NhdGlvbj0iLlxzYW1wbGU0ODMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjYwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTM4M2MzZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgiIGxvY2F0aW9uPSJzYW1wbGUyOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MiIgbG9jYXRpb249Ii4vc2FtcGxlNjgyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI0IiBsb2NhdGlvbj0iLlxzYW1wbGUxMjQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI2MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjYxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5ODRlMWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjYxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNCIgbG9jYXRpb249InNhbXBsZTIyNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMCIgbG9jYXRpb249Ii4vc2FtcGxlNjIwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU1IiBsb2NhdGlvbj0iLlxzYW1wbGUyNTUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI2Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjYyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3MzE2NTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjYyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1IiBsb2NhdGlvbj0ic2FtcGxlNTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMiIgbG9jYXRpb249Ii4vc2FtcGxlMTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTEiIGxvY2F0aW9uPSIuXHNhbXBsZTc1MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjYzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzE3Mzg2ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA1IiBsb2NhdGlvbj0ic2FtcGxlOTA1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ1IiBsb2NhdGlvbj0iLi9zYW1wbGU4NDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDgiIGxvY2F0aW9uPSIuXHNhbXBsZTE0OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjY0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTkyMTRjNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ0IiBsb2NhdGlvbj0ic2FtcGxlMzQ0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ2IiBsb2NhdGlvbj0iLi9zYW1wbGUzNDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDEiIGxvY2F0aW9uPSIuXHNhbXBsZTEwMS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjY1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWUzM2YwYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMCIgbG9jYXRpb249InNhbXBsZTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MCIgbG9jYXRpb249Ii4vc2FtcGxlNTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjYiIGxvY2F0aW9uPSIuXHNhbXBsZTk2Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjY2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTgwNDU5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAzIiBsb2NhdGlvbj0ic2FtcGxlMjAzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE5IiBsb2NhdGlvbj0iLi9zYW1wbGU0MTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDQiIGxvY2F0aW9uPSIuXHNhbXBsZTY0NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjY3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWViZDA0ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQzIiBsb2NhdGlvbj0ic2FtcGxlNTQzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU4IiBsb2NhdGlvbj0iLi9zYW1wbGUzNTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDciIGxvY2F0aW9uPSIuXHNhbXBsZTIwNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjY4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODI2OTkwZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkwIiBsb2NhdGlvbj0ic2FtcGxlNjkwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzciIGxvY2F0aW9uPSIuL3NhbXBsZTM3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ0IiBsb2NhdGlvbj0iLlxzYW1wbGUyNDQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI2OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjY5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0ZGU3ZWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjY5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMyIgbG9jYXRpb249InNhbXBsZTUzMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMiIgbG9jYXRpb249Ii4vc2FtcGxlODMyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI2IiBsb2NhdGlvbj0iLlxzYW1wbGUxMjYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMzVlMWE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODciIGxvY2F0aW9uPSJzYW1wbGU5ODcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDgiIGxvY2F0aW9uPSIuL3NhbXBsZTk0OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MCIgbG9jYXRpb249Ii5cc2FtcGxlMzkwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI3MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjcwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiZjE3ODguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjcwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjcwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjcwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3OCIgbG9jYXRpb249InNhbXBsZTk3OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwIiBsb2NhdGlvbj0iLi9zYW1wbGU3MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NiIgbG9jYXRpb249Ii5cc2FtcGxlNzg2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI3MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzkwYTQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTkiIGxvY2F0aW9uPSJzYW1wbGU3OTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTYiIGxvY2F0aW9uPSIuL3NhbXBsZTI5Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MyIgbG9jYXRpb249Ii5cc2FtcGxlNjczLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI3Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjY2U0MGU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI3Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDYiIGxvY2F0aW9uPSJzYW1wbGU4MDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTUiIGxvY2F0aW9uPSIuL3NhbXBsZTQxNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNyIgbG9jYXRpb249Ii5cc2FtcGxlMTM3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI3My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTlkNDVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI3My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTgiIGxvY2F0aW9uPSJzYW1wbGU4OTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzkiIGxvY2F0aW9uPSIuL3NhbXBsZTk3OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNiIgbG9jYXRpb249Ii5cc2FtcGxlNDM2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI3NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Y2NlOWQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI3NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTYiIGxvY2F0aW9uPSJzYW1wbGU0OTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTgiIGxvY2F0aW9uPSIuL3NhbXBsZTIxOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3IiBsb2NhdGlvbj0iLlxzYW1wbGUyNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjc1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmE2M2U4OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAxIiBsb2NhdGlvbj0ic2FtcGxlNTAxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQxIiBsb2NhdGlvbj0iLi9zYW1wbGU3NDEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTciIGxvY2F0aW9uPSIuXHNhbXBsZTg5Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjc2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjY4NjJhYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU2IiBsb2NhdGlvbj0ic2FtcGxlNTU2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzcxIiBsb2NhdGlvbj0iLi9zYW1wbGUzNzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTUiIGxvY2F0aW9uPSIuXHNhbXBsZTQ1NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjc3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjVmNGJiYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEzIiBsb2NhdGlvbj0ic2FtcGxlMjEzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAwIiBsb2NhdGlvbj0iLi9zYW1wbGUxMDAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNyIgbG9jYXRpb249Ii5cc2FtcGxlMzcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI3OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1NTEyMGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjc4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MCIgbG9jYXRpb249InNhbXBsZTM4MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNyIgbG9jYXRpb249Ii4vc2FtcGxlMTE3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY2IiBsb2NhdGlvbj0iLlxzYW1wbGU2NjYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI3OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjc5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhZThiYmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjc5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMyIgbG9jYXRpb249InNhbXBsZTQyMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MCIgbG9jYXRpb249Ii4vc2FtcGxlNzQwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYyIiBsb2NhdGlvbj0iLlxzYW1wbGU4NjIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzc4NTQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjkiIGxvY2F0aW9uPSJzYW1wbGUzNjkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTciIGxvY2F0aW9uPSIuL3NhbXBsZTI1Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNyIgbG9jYXRpb249Ii5cc2FtcGxlODI3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjgwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4ZjQwNWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjgwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MiIgbG9jYXRpb249InNhbXBsZTM2Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MSIgbG9jYXRpb249Ii4vc2FtcGxlNDYxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE2IiBsb2NhdGlvbj0iLlxzYW1wbGU5MTYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjgxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkZjVmYTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjgxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0OSIgbG9jYXRpb249InNhbXBsZTI0OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNiIgbG9jYXRpb249Ii4vc2FtcGxlNjE2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY5IiBsb2NhdGlvbj0iLlxzYW1wbGU5Njkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjgyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzNmY0NTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjgyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNCIgbG9jYXRpb249InNhbXBsZTYxNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0OCIgbG9jYXRpb249Ii4vc2FtcGxlNDQ4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU0IiBsb2NhdGlvbj0iLlxzYW1wbGUyNTQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjgzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkMjlkZTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjgzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExOSIgbG9jYXRpb249InNhbXBsZTExOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNyIgbG9jYXRpb249Ii4vc2FtcGxlMjM3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM1IiBsb2NhdGlvbj0iLlxzYW1wbGUyMzUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjg0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkNzQ0M2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjg0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NCIgbG9jYXRpb249InNhbXBsZTQ2NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMCIgbG9jYXRpb249Ii4vc2FtcGxlNzMwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY2IiBsb2NhdGlvbj0iLlxzYW1wbGU5NjYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjg1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyMGM2MmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjg1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQiIGxvY2F0aW9uPSJzYW1wbGU0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM3IiBsb2NhdGlvbj0iLi9zYW1wbGUyMzcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDUiIGxvY2F0aW9uPSIuXHNhbXBsZTYwNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjg2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyODYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWI1ZDQxNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyODYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEwIiBsb2NhdGlvbj0ic2FtcGxlMjEwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE0IiBsb2NhdGlvbj0iLi9zYW1wbGU5MTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTYiIGxvY2F0aW9uPSIuXHNhbXBsZTY1Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjg3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyODcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTkwYWY5Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIiIGxvY2F0aW9uPSJzYW1wbGUzMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMCIgbG9jYXRpb249Ii4vc2FtcGxlOTIwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM4IiBsb2NhdGlvbj0iLlxzYW1wbGUyMzgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjg4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkYzU3ZTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjg4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MiIgbG9jYXRpb249InNhbXBsZTE3Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4IiBsb2NhdGlvbj0iLi9zYW1wbGU2OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NSIgbG9jYXRpb249Ii5cc2FtcGxlMjU1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyODkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTBlYTE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI4OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODgiIGxvY2F0aW9uPSJzYW1wbGU2ODgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzgiIGxvY2F0aW9uPSIuL3NhbXBsZTgzOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMSIgbG9jYXRpb249Ii5cc2FtcGxlMTAxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTcwMDkwZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk1IiBsb2NhdGlvbj0ic2FtcGxlMjk1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk5IiBsb2NhdGlvbj0iLi9zYW1wbGU1OTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDAiIGxvY2F0aW9uPSIuXHNhbXBsZTEwMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyOTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI5MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzZhNzQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI5MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzMiIGxvY2F0aW9uPSJzYW1wbGU4MzMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzYiIGxvY2F0aW9uPSIuL3NhbXBsZTg3Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4IiBsb2NhdGlvbj0iLlxzYW1wbGUyOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjkxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyOTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjEyNTNhOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyOTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA3IiBsb2NhdGlvbj0ic2FtcGxlMzA3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc2IiBsb2NhdGlvbj0iLi9zYW1wbGU2NzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTUiIGxvY2F0aW9uPSIuXHNhbXBsZTY1NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjkyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyOTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJiMGNiNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyOTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk2IiBsb2NhdGlvbj0ic2FtcGxlOTk2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA5IiBsb2NhdGlvbj0iLi9zYW1wbGUxMDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzAiIGxvY2F0aW9uPSIuXHNhbXBsZTE3MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjkzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyOTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQyMGI2Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyOTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIwIiBsb2NhdGlvbj0ic2FtcGxlMTIwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMiIGxvY2F0aW9uPSIuL3NhbXBsZTYzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg3IiBsb2NhdGlvbj0iLlxzYW1wbGUxODcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI5NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjk0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiOTk3OGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjk0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NCIgbG9jYXRpb249InNhbXBsZTc0NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NSIgbG9jYXRpb249Ii4vc2FtcGxlNDg1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMyIiBsb2NhdGlvbj0iLlxzYW1wbGU3MzIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI5NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjk1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkMzQ3YzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjk1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyIiBsb2NhdGlvbj0ic2FtcGxlNjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTUiIGxvY2F0aW9uPSIuL3NhbXBsZTUxNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MSIgbG9jYXRpb249Ii5cc2FtcGxlNDUxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyOTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI5Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjg3Y2Y3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTI5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMiIgbG9jYXRpb249InNhbXBsZTMyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgyIiBsb2NhdGlvbj0iLi9zYW1wbGU3ODIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDYiIGxvY2F0aW9uPSIuXHNhbXBsZTY0Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjk3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyOTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM2NTFkNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyOTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUzIiBsb2NhdGlvbj0ic2FtcGxlMzUzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk5IiBsb2NhdGlvbj0iLi9zYW1wbGU4OTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzkiIGxvY2F0aW9uPSIuXHNhbXBsZTI3OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjk4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyOTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2M3OTMyMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyOTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk2IiBsb2NhdGlvbj0ic2FtcGxlNDk2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIyIiBsb2NhdGlvbj0iLi9zYW1wbGUxMjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDciIGxvY2F0aW9uPSIuXHNhbXBsZTQ0Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjk5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyOTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZjMTI1Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyOTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA5IiBsb2NhdGlvbj0ic2FtcGxlNDA5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTcxIiBsb2NhdGlvbj0iLi9zYW1wbGU1NzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDUiIGxvY2F0aW9uPSIuXHNhbXBsZTY0NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGEyOWM2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTIiIGxvY2F0aW9uPSJzYW1wbGUyMTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTAiIGxvY2F0aW9uPSIuL3NhbXBsZTc5MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NSIgbG9jYXRpb249Ii5cc2FtcGxlNjY1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiYmViM2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExOSIgbG9jYXRpb249InNhbXBsZTExOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5OSIgbG9jYXRpb249Ii4vc2FtcGxlMzk5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg3IiBsb2NhdGlvbj0iLlxzYW1wbGUxODcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzAwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWY2MGFlYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM4IiBsb2NhdGlvbj0ic2FtcGxlMTM4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ3IiBsb2NhdGlvbj0iLi9zYW1wbGUzNDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NSIgbG9jYXRpb249Ii5cc2FtcGxlNTUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMwMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzAxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyMmFhNTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzAxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MSIgbG9jYXRpb249InNhbXBsZTU3MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2IiBsb2NhdGlvbj0iLi9zYW1wbGU2Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4OCIgbG9jYXRpb249Ii5cc2FtcGxlNTg4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMwMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjU3MmFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMwMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTciIGxvY2F0aW9uPSJzYW1wbGU1NTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDQiIGxvY2F0aW9uPSIuL3NhbXBsZTQ0NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMCIgbG9jYXRpb249Ii5cc2FtcGxlMzIwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMwMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZGZjODZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMwMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTciIGxvY2F0aW9uPSJzYW1wbGUxNTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTYiIGxvY2F0aW9uPSIuL3NhbXBsZTQ5Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5OCIgbG9jYXRpb249Ii5cc2FtcGxlMTk4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMwNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MmViMjhjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMwNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODkiIGxvY2F0aW9uPSJzYW1wbGUxODkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjYiIGxvY2F0aW9uPSIuL3NhbXBsZTkyNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMyIgbG9jYXRpb249Ii5cc2FtcGxlNzMzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMwNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNWYyZDg2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMwNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzEiIGxvY2F0aW9uPSJzYW1wbGU5MzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjkiIGxvY2F0aW9uPSIuL3NhbXBsZTE2OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NyIgbG9jYXRpb249Ii5cc2FtcGxlODY3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMwNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzM0OGU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMwNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzUiIGxvY2F0aW9uPSJzYW1wbGU4MzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTciIGxvY2F0aW9uPSIuL3NhbXBsZTk5Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NiIgbG9jYXRpb249Ii5cc2FtcGxlMjY2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMwNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTcxOGRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMwNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDciIGxvY2F0aW9uPSJzYW1wbGU5MDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzMiIGxvY2F0aW9uPSIuL3NhbXBsZTM3My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwOSIgbG9jYXRpb249Ii5cc2FtcGxlNjA5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMwOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNWJiY2Y1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMwOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDEiIGxvY2F0aW9uPSJzYW1wbGU2NDEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODEiIGxvY2F0aW9uPSIuL3NhbXBsZTk4MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NSIgbG9jYXRpb249Ii5cc2FtcGxlNjg1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMwOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjN2M2ZjhkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMwOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjYiIGxvY2F0aW9uPSJzYW1wbGUzNjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDEiIGxvY2F0aW9uPSIuL3NhbXBsZTQwMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MiIgbG9jYXRpb249Ii5cc2FtcGxlMTUyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzRlMTY1Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE5IiBsb2NhdGlvbj0ic2FtcGxlNjE5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODcxIiBsb2NhdGlvbj0iLi9zYW1wbGU4NzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTIiIGxvY2F0aW9uPSIuXHNhbXBsZTQxMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMxMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzAxNjM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMxMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzEiIGxvY2F0aW9uPSJzYW1wbGU5MzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDQiIGxvY2F0aW9uPSIuL3NhbXBsZTE0NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1IiBsb2NhdGlvbj0iLlxzYW1wbGU2NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzExLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI5OTllNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQxIiBsb2NhdGlvbj0ic2FtcGxlMzQxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE0IiBsb2NhdGlvbj0iLi9zYW1wbGUxMTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjUiIGxvY2F0aW9uPSIuXHNhbXBsZTEyNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzEyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDAxZTgzOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA1IiBsb2NhdGlvbj0ic2FtcGxlNTA1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU1IiBsb2NhdGlvbj0iLi9zYW1wbGUxNTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzIiIGxvY2F0aW9uPSIuXHNhbXBsZTkzMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzEzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU0NTc3ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUiIGxvY2F0aW9uPSJzYW1wbGU3NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MyIgbG9jYXRpb249Ii4vc2FtcGxlMjczLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ3IiBsb2NhdGlvbj0iLlxzYW1wbGU2NDcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMxNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzE0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxMTVhMDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzE0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2OCIgbG9jYXRpb249InNhbXBsZTg2OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMSIgbG9jYXRpb249Ii4vc2FtcGxlNDIxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA0IiBsb2NhdGlvbj0iLlxzYW1wbGUyMDQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMxNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzE1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3NzY2Y2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzE1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5IiBsb2NhdGlvbj0ic2FtcGxlNjkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTMiIGxvY2F0aW9uPSIuL3NhbXBsZTE5My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NiIgbG9jYXRpb249Ii5cc2FtcGxlODk2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMxNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOGZlMTNjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMxNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDciIGxvY2F0aW9uPSJzYW1wbGUxMDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjciIGxvY2F0aW9uPSIuL3NhbXBsZTM2Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxOCIgbG9jYXRpb249Ii5cc2FtcGxlNDE4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMxNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OWQ3NjM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMxNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjIiIGxvY2F0aW9uPSJzYW1wbGU0NjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTkiIGxvY2F0aW9uPSIuL3NhbXBsZTkxOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MSIgbG9jYXRpb249Ii5cc2FtcGxlNzYxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMxOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzYwMzdkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMxOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzIiIGxvY2F0aW9uPSJzYW1wbGUxMzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTAiIGxvY2F0aW9uPSIuL3NhbXBsZTc5MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NCIgbG9jYXRpb249Ii5cc2FtcGxlMjU0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMxOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjI4ZGZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMxOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzkiIGxvY2F0aW9uPSJzYW1wbGU0Mzkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDUiIGxvY2F0aW9uPSIuL3NhbXBsZTk0NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NyIgbG9jYXRpb249Ii5cc2FtcGxlOTk3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjJhOGZiYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYiIGxvY2F0aW9uPSJzYW1wbGU0Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NCIgbG9jYXRpb249Ii4vc2FtcGxlOTQ0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ4IiBsb2NhdGlvbj0iLlxzYW1wbGU1NDgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzIwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGZkNWQ2Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEwIiBsb2NhdGlvbj0ic2FtcGxlMTEwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUyIiBsb2NhdGlvbj0iLi9zYW1wbGU2NTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNSIgbG9jYXRpb249Ii5cc2FtcGxlMzUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzIxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyOGVlOTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzIxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MyIgbG9jYXRpb249InNhbXBsZTU3My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwOCIgbG9jYXRpb249Ii4vc2FtcGxlMjA4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgwIiBsb2NhdGlvbj0iLlxzYW1wbGU4ODAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzIyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4NDM2ODEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzIyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1IiBsb2NhdGlvbj0ic2FtcGxlOTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NiIgbG9jYXRpb249Ii4vc2FtcGxlOTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjAiIGxvY2F0aW9uPSIuXHNhbXBsZTY2MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzIzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWNhM2M0ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY4IiBsb2NhdGlvbj0ic2FtcGxlNDY4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI4IiBsb2NhdGlvbj0iLi9zYW1wbGU4Mjgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDYiIGxvY2F0aW9uPSIuXHNhbXBsZTUwNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzI0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWVlNmIxYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzcwIiBsb2NhdGlvbj0ic2FtcGxlMzcwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYxIiBsb2NhdGlvbj0iLi9zYW1wbGU0NjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzgiIGxvY2F0aW9uPSIuXHNhbXBsZTE3OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzI1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTViYzk3MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM3IiBsb2NhdGlvbj0ic2FtcGxlMzM3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEiIGxvY2F0aW9uPSIuL3NhbXBsZTgxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE1IiBsb2NhdGlvbj0iLlxzYW1wbGUxMTUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzI2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1MWQ3N2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzI2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NyIgbG9jYXRpb249InNhbXBsZTc2Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NCIgbG9jYXRpb249Ii4vc2FtcGxlNTk0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAwIiBsb2NhdGlvbj0iLlxzYW1wbGUyMDAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzI3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyYTRjNTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzI3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4OSIgbG9jYXRpb249InNhbXBsZTU4OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0OCIgbG9jYXRpb249Ii4vc2FtcGxlNzQ4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgwIiBsb2NhdGlvbj0iLlxzYW1wbGUyODAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzI4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2MDZiZDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzI4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMyIgbG9jYXRpb249InNhbXBsZTkxMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyOCIgbG9jYXRpb249Ii4vc2FtcGxlNjI4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE5IiBsb2NhdGlvbj0iLlxzYW1wbGUxMTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzI5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxNWQ5MmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzI5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MSIgbG9jYXRpb249InNhbXBsZTg5MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MCIgbG9jYXRpb249Ii4vc2FtcGxlMzUwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA4IiBsb2NhdGlvbj0iLlxzYW1wbGU4MDgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTBiZDVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzIiIGxvY2F0aW9uPSJzYW1wbGUyNzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTgiIGxvY2F0aW9uPSIuL3NhbXBsZTcxOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0IiBsb2NhdGlvbj0iLlxzYW1wbGU5NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMzMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOGVmNWFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMzMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTAiIGxvY2F0aW9uPSJzYW1wbGU2NTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODMiIGxvY2F0aW9uPSIuL3NhbXBsZTg4My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxOSIgbG9jYXRpb249Ii5cc2FtcGxlNjE5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMzMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjdmMWU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMzMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDYiIGxvY2F0aW9uPSJzYW1wbGUxNDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNCIgbG9jYXRpb249Ii4vc2FtcGxlMjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjAiIGxvY2F0aW9uPSIuXHNhbXBsZTMyMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzMyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQ3ZGIzZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU5IiBsb2NhdGlvbj0ic2FtcGxlODU5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgzIiBsb2NhdGlvbj0iLi9zYW1wbGU1ODMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjQiIGxvY2F0aW9uPSIuXHNhbXBsZTQ2NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzMzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDUzZGY2Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI4IiBsb2NhdGlvbj0ic2FtcGxlNzI4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA3IiBsb2NhdGlvbj0iLi9zYW1wbGUyMDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjUiIGxvY2F0aW9uPSIuXHNhbXBsZTUyNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzM0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTgwNzAxMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg2IiBsb2NhdGlvbj0ic2FtcGxlNTg2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUiIGxvY2F0aW9uPSIuL3NhbXBsZTM1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgxIiBsb2NhdGlvbj0iLlxzYW1wbGUyODEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMzNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzM1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwOWY4ZGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzM1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0OSIgbG9jYXRpb249InNhbXBsZTk0OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMCIgbG9jYXRpb249Ii4vc2FtcGxlMzEwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU5IiBsb2NhdGlvbj0iLlxzYW1wbGU3NTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMzNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzM2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2N2NkNGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzM2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzIiBsb2NhdGlvbj0ic2FtcGxlNjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjYiIGxvY2F0aW9uPSIuL3NhbXBsZTkyNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MiIgbG9jYXRpb249Ii5cc2FtcGxlOTcyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMzNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTI5NzI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMzNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTUiIGxvY2F0aW9uPSJzYW1wbGUzMTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTgiIGxvY2F0aW9uPSIuL3NhbXBsZTY1OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzOCIgbG9jYXRpb249Ii5cc2FtcGxlMzM4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMzOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDZlYmNjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMzOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzMiIGxvY2F0aW9uPSJzYW1wbGUxNzMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTgiIGxvY2F0aW9uPSIuL3NhbXBsZTQxOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NCIgbG9jYXRpb249Ii5cc2FtcGxlMjU0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMzOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTViYmRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMzOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjciIGxvY2F0aW9uPSJzYW1wbGUxMjcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5IiBsb2NhdGlvbj0iLi9zYW1wbGU5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDcwIiBsb2NhdGlvbj0iLlxzYW1wbGU0NzAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNWVjYjg1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzAiIGxvY2F0aW9uPSJzYW1wbGU0MzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDMiIGxvY2F0aW9uPSIuL3NhbXBsZTM0My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNSIgbG9jYXRpb249Ii5cc2FtcGxlMzM1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM0MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzQwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5NDYzY2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzQwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MiIgbG9jYXRpb249InNhbXBsZTY1Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0OCIgbG9jYXRpb249Ii4vc2FtcGxlNTQ4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk0IiBsb2NhdGlvbj0iLlxzYW1wbGUzOTQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM0MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzQxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiMTQ0ZjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzQxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MSIgbG9jYXRpb249InNhbXBsZTc4MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NyIgbG9jYXRpb249Ii4vc2FtcGxlNTQ3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY5IiBsb2NhdGlvbj0iLlxzYW1wbGU0Njkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzQyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzMTNmYTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzQyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MiIgbG9jYXRpb249InNhbXBsZTc4Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4OSIgbG9jYXRpb249Ii4vc2FtcGxlMTg5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ2IiBsb2NhdGlvbj0iLlxzYW1wbGU2NDYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM0My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzQzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2NjQzYTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzQzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MyIgbG9jYXRpb249InNhbXBsZTI1My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NiIgbG9jYXRpb249Ii4vc2FtcGxlNzg2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYiIGxvY2F0aW9uPSIuXHNhbXBsZTk2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM0NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWVhZTFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM0NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTUiIGxvY2F0aW9uPSJzYW1wbGU0MTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDgiIGxvY2F0aW9uPSIuL3NhbXBsZTQ0OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNSIgbG9jYXRpb249Ii5cc2FtcGxlMjI1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM0NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjQ1Y2IxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM0NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzYiIGxvY2F0aW9uPSJzYW1wbGU2NzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTIiIGxvY2F0aW9uPSIuL3NhbXBsZTM5Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNiIgbG9jYXRpb249Ii5cc2FtcGxlNzA2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM0Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTMxM2VlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM0Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTIiIGxvY2F0aW9uPSJzYW1wbGUyNTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDYiIGxvY2F0aW9uPSIuL3NhbXBsZTE0Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NCIgbG9jYXRpb249Ii5cc2FtcGxlODc0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM0Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODRjZDMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM0Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MSIgbG9jYXRpb249InNhbXBsZTcxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE1IiBsb2NhdGlvbj0iLi9zYW1wbGUxMTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjQiIGxvY2F0aW9uPSIuXHNhbXBsZTQyNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzQ4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQyYTlhNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjcwIiBsb2NhdGlvbj0ic2FtcGxlMjcwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ4IiBsb2NhdGlvbj0iLi9zYW1wbGU0NDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzQiIGxvY2F0aW9uPSIuXHNhbXBsZTY3NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzQ5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDk0ZjlmMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzciIGxvY2F0aW9uPSJzYW1wbGU3Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MyIgbG9jYXRpb249Ii4vc2FtcGxlOTkzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgzIiBsb2NhdGlvbj0iLlxzYW1wbGUzODMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDg3MDU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTAiIGxvY2F0aW9uPSJzYW1wbGU3OTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzgiIGxvY2F0aW9uPSIuL3NhbXBsZTU3OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NyIgbG9jYXRpb249Ii5cc2FtcGxlOTU3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM1MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhNmU5MDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MiIgbG9jYXRpb249InNhbXBsZTY2Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMyIgbG9jYXRpb249Ii4vc2FtcGxlMTEzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIyIiBsb2NhdGlvbj0iLlxzYW1wbGU0MjIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM1MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiZjRiZmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NSIgbG9jYXRpb249InNhbXBsZTQ1NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5OSIgbG9jYXRpb249Ii4vc2FtcGxlMTk5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY3IiBsb2NhdGlvbj0iLlxzYW1wbGUxNjcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM1Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzUyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmN2YyODAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzOSIgbG9jYXRpb249InNhbXBsZTMzOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NCIgbG9jYXRpb249Ii4vc2FtcGxlMTU0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMyIiBsb2NhdGlvbj0iLlxzYW1wbGU2MzIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM1My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2ZDdkN2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNSIgbG9jYXRpb249InNhbXBsZTEzNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNCIgbG9jYXRpb249Ii4vc2FtcGxlNzI0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTciIGxvY2F0aW9uPSIuXHNhbXBsZTE3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM1NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjBlZWZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM1NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDEiIGxvY2F0aW9uPSJzYW1wbGUyNDEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTIiIGxvY2F0aW9uPSIuL3NhbXBsZTYxMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NiIgbG9jYXRpb249Ii5cc2FtcGxlNDg2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM1NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGNiNDZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM1NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MCIgbG9jYXRpb249InNhbXBsZTUwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAyIiBsb2NhdGlvbj0iLi9zYW1wbGU5MDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjMiIGxvY2F0aW9uPSIuXHNhbXBsZTgyMy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzU2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGZkZTFmNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY4IiBsb2NhdGlvbj0ic2FtcGxlMjY4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYxIiBsb2NhdGlvbj0iLi9zYW1wbGUzNjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDAiIGxvY2F0aW9uPSIuXHNhbXBsZTg0MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTM4YmFiOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODcwIiBsb2NhdGlvbj0ic2FtcGxlODcwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAyIiBsb2NhdGlvbj0iLi9zYW1wbGU3MDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTciIGxvY2F0aW9uPSIuXHNhbXBsZTE5Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmZiMWNlOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUzIiBsb2NhdGlvbj0ic2FtcGxlMTUzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ5IiBsb2NhdGlvbj0iLi9zYW1wbGU3NDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODgiIGxvY2F0aW9uPSIuXHNhbXBsZTY4OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzU5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzNkYzkwNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA1IiBsb2NhdGlvbj0ic2FtcGxlODA1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg1IiBsb2NhdGlvbj0iLi9zYW1wbGU4ODUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjMiIGxvY2F0aW9uPSIuXHNhbXBsZTIyMy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzMTJjY2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3OCIgbG9jYXRpb249InNhbXBsZTc3OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzOCIgbG9jYXRpb249Ii4vc2FtcGxlNjM4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzczIiBsb2NhdGlvbj0iLlxzYW1wbGUzNzMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzYwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjNiYTBlMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM1IiBsb2NhdGlvbj0ic2FtcGxlMzM1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgzIiBsb2NhdGlvbj0iLi9zYW1wbGUxODMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODAiIGxvY2F0aW9uPSIuXHNhbXBsZTE4MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzYxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDcwYjAwYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODczIiBsb2NhdGlvbj0ic2FtcGxlODczLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA1IiBsb2NhdGlvbj0iLi9zYW1wbGU4MDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjUiIGxvY2F0aW9uPSIuXHNhbXBsZTM2NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzYyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjBmNDdkZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE5IiBsb2NhdGlvbj0ic2FtcGxlNDE5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMiIGxvY2F0aW9uPSIuL3NhbXBsZTgzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUiIGxvY2F0aW9uPSIuXHNhbXBsZTQ1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM2My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMGMyNDBkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM2My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDUiIGxvY2F0aW9uPSJzYW1wbGU0NDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDMiIGxvY2F0aW9uPSIuL3NhbXBsZTY0My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NCIgbG9jYXRpb249Ii5cc2FtcGxlMjQ0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM2NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjZhYmU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM2NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MyIgbG9jYXRpb249InNhbXBsZTQzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ4IiBsb2NhdGlvbj0iLi9zYW1wbGU1NDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNyIgbG9jYXRpb249Ii5cc2FtcGxlMTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM2NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzY1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0MDY2NGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzY1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkiIGxvY2F0aW9uPSJzYW1wbGU5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc4IiBsb2NhdGlvbj0iLi9zYW1wbGUxNzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzgiIGxvY2F0aW9uPSIuXHNhbXBsZTI3OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzY2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzk5ZTc5My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEyIiBsb2NhdGlvbj0ic2FtcGxlNDEyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUzIiBsb2NhdGlvbj0iLi9zYW1wbGUxNTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjUiIGxvY2F0aW9uPSIuXHNhbXBsZTQ2NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzY3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmMyMmYzZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUyIiBsb2NhdGlvbj0ic2FtcGxlMjUyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAyIiBsb2NhdGlvbj0iLi9zYW1wbGU3MDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDQiIGxvY2F0aW9uPSIuXHNhbXBsZTcwNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzY4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGY1ODk4NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ4IiBsb2NhdGlvbj0ic2FtcGxlNjQ4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc4IiBsb2NhdGlvbj0iLi9zYW1wbGUzNzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODkiIGxvY2F0aW9uPSIuXHNhbXBsZTQ4OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzY5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTk1NGNlNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU0IiBsb2NhdGlvbj0ic2FtcGxlMjU0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA4IiBsb2NhdGlvbj0iLi9zYW1wbGUzMDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTIiIGxvY2F0aW9uPSIuXHNhbXBsZTI5Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjYWVjMDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiIGxvY2F0aW9uPSJzYW1wbGUxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM4IiBsb2NhdGlvbj0iLi9zYW1wbGUyMzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODIiIGxvY2F0aW9uPSIuXHNhbXBsZTE4Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM3MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMGMwM2MzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM3MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTEiIGxvY2F0aW9uPSJzYW1wbGU4NTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzIiIGxvY2F0aW9uPSIuL3NhbXBsZTc3Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwIiBsb2NhdGlvbj0iLlxzYW1wbGU1MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzcxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzI2MWFiMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgiIGxvY2F0aW9uPSJzYW1wbGU2OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMCIgbG9jYXRpb249Ii4vc2FtcGxlMTAwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg2IiBsb2NhdGlvbj0iLlxzYW1wbGUzODYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzcxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM3Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzcyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyYTUzNjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzcyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzcyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMiIgbG9jYXRpb249InNhbXBsZTExMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MyIgbG9jYXRpb249Ii4vc2FtcGxlNDQzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgiIGxvY2F0aW9uPSIuXHNhbXBsZTY4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM3My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzI2ZTg3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM3My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTYiIGxvY2F0aW9uPSJzYW1wbGU0OTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzUiIGxvY2F0aW9uPSIuL3NhbXBsZTkzNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MiIgbG9jYXRpb249Ii5cc2FtcGxlMjgyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM3NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNmE1M2ViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM3NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDIiIGxvY2F0aW9uPSJzYW1wbGU2MDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODMiIGxvY2F0aW9uPSIuL3NhbXBsZTc4My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NSIgbG9jYXRpb249Ii5cc2FtcGxlMTY1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM3NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZGRjZDkyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM3NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTkiIGxvY2F0aW9uPSJzYW1wbGU2MTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzkiIGxvY2F0aW9uPSIuL3NhbXBsZTg3OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NiIgbG9jYXRpb249Ii5cc2FtcGxlMTQ2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM3Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NWY3NjJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM3Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTEiIGxvY2F0aW9uPSJzYW1wbGU5OTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjUiIGxvY2F0aW9uPSIuL3NhbXBsZTIyNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMCIgbG9jYXRpb249Ii5cc2FtcGxlMjMwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM3Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlM2EwMzA3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM3Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzUiIGxvY2F0aW9uPSJzYW1wbGU0NzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODgiIGxvY2F0aW9uPSIuL3NhbXBsZTg4OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNCIgbG9jYXRpb249Ii5cc2FtcGxlODM0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM3OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTM5ZjNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM3OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTIiIGxvY2F0aW9uPSJzYW1wbGU2NTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzUiIGxvY2F0aW9uPSIuL3NhbXBsZTgzNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MSIgbG9jYXRpb249Ii5cc2FtcGxlMjUxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM3OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDNiZTNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM3OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NCIgbG9jYXRpb249InNhbXBsZTY0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYzIiBsb2NhdGlvbj0iLi9zYW1wbGU0NjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDYiIGxvY2F0aW9uPSIuXHNhbXBsZTg0Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1ODBmNGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NCIgbG9jYXRpb249InNhbXBsZTk1NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNiIgbG9jYXRpb249Ii4vc2FtcGxlNzA2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk0IiBsb2NhdGlvbj0iLlxzYW1wbGU1OTQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzgwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzODAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODk2OTAxYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzODAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTciIGxvY2F0aW9uPSJzYW1wbGU5Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MiIgbG9jYXRpb249Ii4vc2FtcGxlNzkyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg3IiBsb2NhdGlvbj0iLlxzYW1wbGU4ODcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM4MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzgxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5YzdkNGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzgxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NCIgbG9jYXRpb249InNhbXBsZTE0NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMiIgbG9jYXRpb249Ii4vc2FtcGxlNTIyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI0IiBsb2NhdGlvbj0iLlxzYW1wbGUxMjQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM4Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzgyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhMzY3YmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzgyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0OCIgbG9jYXRpb249InNhbXBsZTI0OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNCIgbG9jYXRpb249Ii4vc2FtcGxlMjM0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc1IiBsb2NhdGlvbj0iLlxzYW1wbGU2NzUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM4My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzgzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzN2Y1MmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzgzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NSIgbG9jYXRpb249InNhbXBsZTU2NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNSIgbG9jYXRpb249Ii4vc2FtcGxlNDE1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAwIiBsb2NhdGlvbj0iLlxzYW1wbGUxMDAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM4NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzg0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1MmZlODcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzg0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NCIgbG9jYXRpb249InNhbXBsZTQ0NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMSIgbG9jYXRpb249Ii4vc2FtcGxlMzIxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEiIGxvY2F0aW9uPSIuXHNhbXBsZTkxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzODUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM4NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjdkMGI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM4NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzkiIGxvY2F0aW9uPSJzYW1wbGUyMzkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDciIGxvY2F0aW9uPSIuL3NhbXBsZTkwNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNSIgbG9jYXRpb249Ii5cc2FtcGxlMTI1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzODYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM4Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2M2I5Y2NjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM4Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODgiIGxvY2F0aW9uPSJzYW1wbGUxODgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzkiIGxvY2F0aW9uPSIuL3NhbXBsZTIzOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MSIgbG9jYXRpb249Ii5cc2FtcGxlNjcxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzODcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM4Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODI0NDFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM4Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTAiIGxvY2F0aW9uPSJzYW1wbGUxOTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTQiIGxvY2F0aW9uPSIuL3NhbXBsZTExNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2OSIgbG9jYXRpb249Ii5cc2FtcGxlMjY5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzODgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM4OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMThhYzQ5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM4OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTAiIGxvY2F0aW9uPSJzYW1wbGU2NTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjAiIGxvY2F0aW9uPSIuL3NhbXBsZTMyMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNiIgbG9jYXRpb249Ii5cc2FtcGxlODM2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzODkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM4OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNGI3MDU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM4OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzkiIGxvY2F0aW9uPSJzYW1wbGUzNzkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTkiIGxvY2F0aW9uPSIuL3NhbXBsZTYxOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNiIgbG9jYXRpb249Ii5cc2FtcGxlOTA2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDJhMmU4OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE3IiBsb2NhdGlvbj0ic2FtcGxlODE3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTExIiBsb2NhdGlvbj0iLi9zYW1wbGUxMTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjUiIGxvY2F0aW9uPSIuXHNhbXBsZTcyNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM5MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTM2MjVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM5MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODgiIGxvY2F0aW9uPSJzYW1wbGUzODgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzMiIGxvY2F0aW9uPSIuL3NhbXBsZTY3My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MCIgbG9jYXRpb249Ii5cc2FtcGxlMzYwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM5MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzhjMTkzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM5MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDkiIGxvY2F0aW9uPSJzYW1wbGUyNDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzIiIGxvY2F0aW9uPSIuL3NhbXBsZTM3Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyOCIgbG9jYXRpb249Ii5cc2FtcGxlODI4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM5Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzcyYzFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM5Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzciIGxvY2F0aW9uPSJzYW1wbGUyNzcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OCIgbG9jYXRpb249Ii4vc2FtcGxlNDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTUiIGxvY2F0aW9uPSIuXHNhbXBsZTY1NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzkzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWY4MDQ5Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMwIiBsb2NhdGlvbj0ic2FtcGxlMjMwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQzIiBsb2NhdGlvbj0iLi9zYW1wbGU2NDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5IiBsb2NhdGlvbj0iLlxzYW1wbGU5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM5NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NWI2ZDMxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM5NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NCIgbG9jYXRpb249InNhbXBsZTU0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI5IiBsb2NhdGlvbj0iLi9zYW1wbGUxMjkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MiIgbG9jYXRpb249Ii5cc2FtcGxlNzIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM5NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzk1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmMmVhY2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzk1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNCIgbG9jYXRpb249InNhbXBsZTYxNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NSIgbG9jYXRpb249Ii4vc2FtcGxlODQ1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYwIiBsb2NhdGlvbj0iLlxzYW1wbGU4NjAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM5Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzk2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwN2E3NjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzk2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NiIgbG9jYXRpb249InNhbXBsZTg4Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0OCIgbG9jYXRpb249Ii4vc2FtcGxlMjQ4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA2IiBsb2NhdGlvbj0iLlxzYW1wbGUzMDYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM5Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzk3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjNmZkOGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2IiBsb2NhdGlvbj0ic2FtcGxlOTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzIiBsb2NhdGlvbj0iLi9zYW1wbGUzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA5IiBsb2NhdGlvbj0iLlxzYW1wbGU4MDkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM5OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzk4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwNzAxYWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzk4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNSIgbG9jYXRpb249InNhbXBsZTkwNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMyIgbG9jYXRpb249Ii4vc2FtcGxlNzMzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgxIiBsb2NhdGlvbj0iLlxzYW1wbGUzODEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM5OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzk5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkZmFlYTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzk5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3IiBsb2NhdGlvbj0ic2FtcGxlMzcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTUiIGxvY2F0aW9uPSIuL3NhbXBsZTQ5NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyOSIgbG9jYXRpb249Ii5cc2FtcGxlNjI5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4MDA3MzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwIiBsb2NhdGlvbj0ic2FtcGxlOTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjMiIGxvY2F0aW9uPSIuL3NhbXBsZTYyMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNiIgbG9jYXRpb249Ii5cc2FtcGxlMjI2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5YmMzNTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMiIgbG9jYXRpb249InNhbXBsZTkzMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NSIgbG9jYXRpb249Ii4vc2FtcGxlNzY1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU4IiBsb2NhdGlvbj0iLlxzYW1wbGUzNTgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDAwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGY4NTZlMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAzIiBsb2NhdGlvbj0ic2FtcGxlNzAzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgyIiBsb2NhdGlvbj0iLi9zYW1wbGUyODIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODUiIGxvY2F0aW9uPSIuXHNhbXBsZTk4NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDAxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTBkNGE3Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAiIGxvY2F0aW9uPSJzYW1wbGU5MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNyIgbG9jYXRpb249Ii4vc2FtcGxlMTE3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg4IiBsb2NhdGlvbj0iLlxzYW1wbGU4ODgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQwMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDAyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3Yzk4M2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDAyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NSIgbG9jYXRpb249InNhbXBsZTg1NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNSIgbG9jYXRpb249Ii4vc2FtcGxlNjM1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIwIiBsb2NhdGlvbj0iLlxzYW1wbGU3MjAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQwMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDAzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlYzY1MmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDAzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMyIgbG9jYXRpb249InNhbXBsZTkyMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNSIgbG9jYXRpb249Ii4vc2FtcGxlMzE1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU3IiBsb2NhdGlvbj0iLlxzYW1wbGU2NTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQwNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDA0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiMDBkMGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDA0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2IiBsb2NhdGlvbj0ic2FtcGxlNDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTgiIGxvY2F0aW9uPSIuL3NhbXBsZTk5OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMCIgbG9jYXRpb249Ii5cc2FtcGxlMTIwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQwNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2M2Y1OTkzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQwNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzIiIGxvY2F0aW9uPSJzYW1wbGU4MzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDUiIGxvY2F0aW9uPSIuL3NhbXBsZTEwNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NiIgbG9jYXRpb249Ii5cc2FtcGxlNDY2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQwNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjliYmM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQwNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjUiIGxvY2F0aW9uPSJzYW1wbGUyNjUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzAiIGxvY2F0aW9uPSIuL3NhbXBsZTk3MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMCIgbG9jYXRpb249Ii5cc2FtcGxlMzMwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQwNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDg5ZjFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQwNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODEiIGxvY2F0aW9uPSJzYW1wbGUxODEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDAiIGxvY2F0aW9uPSIuL3NhbXBsZTQwMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MSIgbG9jYXRpb249Ii5cc2FtcGxlMzQxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQwOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYmJkNjJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQwOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzgiIGxvY2F0aW9uPSJzYW1wbGUzMzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTMiIGxvY2F0aW9uPSIuL3NhbXBsZTYxMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNyIgbG9jYXRpb249Ii5cc2FtcGxlNTI3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQwOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMmIzZTFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQwOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDkiIGxvY2F0aW9uPSJzYW1wbGU1MDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzMiIGxvY2F0aW9uPSIuL3NhbXBsZTkzMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NyIgbG9jYXRpb249Ii5cc2FtcGxlMTQ3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDE4OGQ3Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE2IiBsb2NhdGlvbj0ic2FtcGxlNjE2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEyIiBsb2NhdGlvbj0iLi9zYW1wbGUyMTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTgiIGxvY2F0aW9uPSIuXHNhbXBsZTkxOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQxMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzE3MDc5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQxMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMiIgbG9jYXRpb249InNhbXBsZTIyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI0IiBsb2NhdGlvbj0iLi9zYW1wbGU3MjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTUiIGxvY2F0aW9uPSIuXHNhbXBsZTUxNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDExLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTk2ODdlOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk2IiBsb2NhdGlvbj0ic2FtcGxlNTk2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY2IiBsb2NhdGlvbj0iLi9zYW1wbGU0NjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjkiIGxvY2F0aW9uPSIuXHNhbXBsZTQ2OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDEyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDYxZWQyNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQwIiBsb2NhdGlvbj0ic2FtcGxlOTQwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIiIGxvY2F0aW9uPSIuL3NhbXBsZTQyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA2IiBsb2NhdGlvbj0iLlxzYW1wbGU2MDYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQxMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDEzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3NjdiMWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDEzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MiIgbG9jYXRpb249InNhbXBsZTk1Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4IiBsb2NhdGlvbj0iLi9zYW1wbGU0OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNiIgbG9jYXRpb249Ii5cc2FtcGxlMzA2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQxNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NmI4ZDk0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQxNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDAiIGxvY2F0aW9uPSJzYW1wbGU0NDAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjciIGxvY2F0aW9uPSIuL3NhbXBsZTkyNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4OCIgbG9jYXRpb249Ii5cc2FtcGxlNDg4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQxNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTFmMGNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQxNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTEiIGxvY2F0aW9uPSJzYW1wbGU3OTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMCIgbG9jYXRpb249Ii4vc2FtcGxlMTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDciIGxvY2F0aW9uPSIuXHNhbXBsZTQ0Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDE2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGEyMjMxMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM2IiBsb2NhdGlvbj0ic2FtcGxlNjM2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMyIiBsb2NhdGlvbj0iLi9zYW1wbGUxMzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDAiIGxvY2F0aW9uPSIuXHNhbXBsZTcwMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDE3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGYzNmFiYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc5IiBsb2NhdGlvbj0ic2FtcGxlMTc5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE0IiBsb2NhdGlvbj0iLi9zYW1wbGUzMTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzAiIGxvY2F0aW9uPSIuXHNhbXBsZTYzMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDE4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTUyNzIzYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAzIiBsb2NhdGlvbj0ic2FtcGxlNDAzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc5IiBsb2NhdGlvbj0iLi9zYW1wbGUzNzkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDgiIGxvY2F0aW9uPSIuXHNhbXBsZTQwOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDE5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjJkMjk4OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU1IiBsb2NhdGlvbj0ic2FtcGxlNDU1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYiIGxvY2F0aW9uPSIuL3NhbXBsZTk2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU3IiBsb2NhdGlvbj0iLlxzYW1wbGU0NTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDY3OGE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NyIgbG9jYXRpb249InNhbXBsZTg3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA2IiBsb2NhdGlvbj0iLi9zYW1wbGU2MDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTQiIGxvY2F0aW9uPSIuXHNhbXBsZTM1NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQyMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTUzOTllLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQyMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMiIgbG9jYXRpb249InNhbXBsZTIyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkxIiBsb2NhdGlvbj0iLi9zYW1wbGU5OTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTkiIGxvY2F0aW9uPSIuXHNhbXBsZTcxOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDIxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2E1MDM5Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk2IiBsb2NhdGlvbj0ic2FtcGxlNTk2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMyIgbG9jYXRpb249Ii4vc2FtcGxlMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NyIgbG9jYXRpb249Ii5cc2FtcGxlNDc3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQyMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MTYwZjEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTgiIGxvY2F0aW9uPSJzYW1wbGU4OTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjkiIGxvY2F0aW9uPSIuL3NhbXBsZTg2OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNiIgbG9jYXRpb249Ii5cc2FtcGxlMjI2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQyMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTc3MTNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQyMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDAiIGxvY2F0aW9uPSJzYW1wbGU1MDAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzAiIGxvY2F0aW9uPSIuL3NhbXBsZTk3MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NSIgbG9jYXRpb249Ii5cc2FtcGxlNjk1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQyNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZmE5MWFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQyNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzYiIGxvY2F0aW9uPSJzYW1wbGU3NzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTciIGxvY2F0aW9uPSIuL3NhbXBsZTg1Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNiIgbG9jYXRpb249Ii5cc2FtcGxlODI2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQyNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzc3MDBkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDQiIGxvY2F0aW9uPSJzYW1wbGUyNDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDkiIGxvY2F0aW9uPSIuL3NhbXBsZTkwOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMiIgbG9jYXRpb249Ii5cc2FtcGxlNDMyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQyNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYTA5YzZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQyNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NyIgbG9jYXRpb249InNhbXBsZTg3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIyIiBsb2NhdGlvbj0iLi9zYW1wbGU3MjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjkiIGxvY2F0aW9uPSIuXHNhbXBsZTgyOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDI3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Mjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQwZjY0My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Mjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ5IiBsb2NhdGlvbj0ic2FtcGxlOTQ5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM2IiBsb2NhdGlvbj0iLi9zYW1wbGUzMzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTYiIGxvY2F0aW9uPSIuXHNhbXBsZTM1Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDI4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Mjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWY0NDZmNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Mjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYiIGxvY2F0aW9uPSJzYW1wbGU2Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NiIgbG9jYXRpb249Ii4vc2FtcGxlODk2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkwIiBsb2NhdGlvbj0iLlxzYW1wbGUxOTAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQyOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDI5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0ZGQ5YjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDI5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyIiBsb2NhdGlvbj0ic2FtcGxlNzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDMiIGxvY2F0aW9uPSIuL3NhbXBsZTYwMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNiIgbG9jYXRpb249Ii5cc2FtcGxlOTM2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmE5ODk5My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTczIiBsb2NhdGlvbj0ic2FtcGxlMTczLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTcxIiBsb2NhdGlvbj0iLi9zYW1wbGU5NzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDgiIGxvY2F0aW9uPSIuXHNhbXBsZTQwOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTZlMjllLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzkiIGxvY2F0aW9uPSJzYW1wbGU2Mzkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTIiIGxvY2F0aW9uPSIuL3NhbXBsZTg1Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUiIGxvY2F0aW9uPSIuXHNhbXBsZTUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDMxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3OTZkNzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDMxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNiIgbG9jYXRpb249InNhbXBsZTQwNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNSIgbG9jYXRpb249Ii4vc2FtcGxlMzA1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk0IiBsb2NhdGlvbj0iLlxzYW1wbGUxOTQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDMyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3YTNkNDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDMyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNSIgbG9jYXRpb249InNhbXBsZTkwNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MyIgbG9jYXRpb249Ii4vc2FtcGxlNjYzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg0IiBsb2NhdGlvbj0iLlxzYW1wbGU1ODQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDMzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2Y2M3ZWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDMzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNSIgbG9jYXRpb249InNhbXBsZTgyNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MiIgbG9jYXRpb249Ii4vc2FtcGxlMTkyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE3IiBsb2NhdGlvbj0iLlxzYW1wbGU2MTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDM0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiYWI5YjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDM0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMCIgbG9jYXRpb249InNhbXBsZTcwMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NSIgbG9jYXRpb249Ii4vc2FtcGxlMTY1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMwIiBsb2NhdGlvbj0iLlxzYW1wbGU3MzAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDM1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwMWJlZGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDM1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MCIgbG9jYXRpb249InNhbXBsZTM4MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NyIgbG9jYXRpb249Ii4vc2FtcGxlODY3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIyIiBsb2NhdGlvbj0iLlxzYW1wbGU5MjIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDM2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkNGI1ZGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDM2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MiIgbG9jYXRpb249InNhbXBsZTU3Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MiIgbG9jYXRpb249Ii4vc2FtcGxlNDUyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMxIiBsb2NhdGlvbj0iLlxzYW1wbGU1MzEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDM3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhNDM4ZmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDM3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNSIgbG9jYXRpb249InNhbXBsZTIxNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNCIgbG9jYXRpb249Ii4vc2FtcGxlNjA0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYyIiBsb2NhdGlvbj0iLlxzYW1wbGUxNjIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDM4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1Zjg4ZWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDM4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNyIgbG9jYXRpb249InNhbXBsZTQxNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMCIgbG9jYXRpb249Ii4vc2FtcGxlMzEwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYiIGxvY2F0aW9uPSIuXHNhbXBsZTE2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Mzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTlkYjgyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjkiIGxvY2F0aW9uPSJzYW1wbGU0Mjkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjMiIGxvY2F0aW9uPSIuL3NhbXBsZTQ2My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MSIgbG9jYXRpb249Ii5cc2FtcGxlOTUxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDFjMjIzNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU5IiBsb2NhdGlvbj0ic2FtcGxlMzU5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA0IiBsb2NhdGlvbj0iLi9zYW1wbGUxMDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjciIGxvY2F0aW9uPSIuXHNhbXBsZTQyNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ0MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTdhNDY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ0MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjQiIGxvY2F0aW9uPSJzYW1wbGUxNjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzAiIGxvY2F0aW9uPSIuL3NhbXBsZTc3MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMyIgbG9jYXRpb249Ii5cc2FtcGxlMzEzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ0MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Yjc5ZTJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ0MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjgiIGxvY2F0aW9uPSJzYW1wbGU4Njgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDYiIGxvY2F0aW9uPSIuL3NhbXBsZTE0Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2OSIgbG9jYXRpb249Ii5cc2FtcGxlMjY5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ0Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzdiZWU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ0Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODgiIGxvY2F0aW9uPSJzYW1wbGU2ODgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDQiIGxvY2F0aW9uPSIuL3NhbXBsZTQwNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzOSIgbG9jYXRpb249Ii5cc2FtcGxlOTM5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ0My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjcxMmIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ0My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODciIGxvY2F0aW9uPSJzYW1wbGU3ODcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTYiIGxvY2F0aW9uPSIuL3NhbXBsZTg1Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxIiBsb2NhdGlvbj0iLlxzYW1wbGUzMS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQ0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDg0MjFiZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTcyIiBsb2NhdGlvbj0ic2FtcGxlOTcyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA2IiBsb2NhdGlvbj0iLi9zYW1wbGU4MDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTIiIGxvY2F0aW9uPSIuXHNhbXBsZTI1Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQ1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQ0NmYzYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc1IiBsb2NhdGlvbj0ic2FtcGxlODc1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg4IiBsb2NhdGlvbj0iLi9zYW1wbGU3ODgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDgiIGxvY2F0aW9uPSIuXHNhbXBsZTkwOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQ2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjAyZDgzOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc3IiBsb2NhdGlvbj0ic2FtcGxlMTc3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA1IiBsb2NhdGlvbj0iLi9zYW1wbGU5MDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTciIGxvY2F0aW9uPSIuXHNhbXBsZTg5Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQ3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjg5NTI4Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYwIiBsb2NhdGlvbj0ic2FtcGxlMjYwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAwIiBsb2NhdGlvbj0iLi9zYW1wbGUyMDAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDciIGxvY2F0aW9uPSIuXHNhbXBsZTcwNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQ4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDJhYjZkNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI1IiBsb2NhdGlvbj0ic2FtcGxlMTI1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkzIiBsb2NhdGlvbj0iLi9zYW1wbGU4OTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzEiIGxvY2F0aW9uPSIuXHNhbXBsZTkzMS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDQ5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjc2ZmNiOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ4IiBsb2NhdGlvbj0ic2FtcGxlODQ4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ5IiBsb2NhdGlvbj0iLi9zYW1wbGUxNDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDEiIGxvY2F0aW9uPSIuXHNhbXBsZTU0MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0MzhiNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwOCIgbG9jYXRpb249InNhbXBsZTcwOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNyIgbG9jYXRpb249Ii4vc2FtcGxlOTI3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMxIiBsb2NhdGlvbj0iLlxzYW1wbGU2MzEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDUwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjY2OTYxNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAwIiBsb2NhdGlvbj0ic2FtcGxlMjAwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQzIiBsb2NhdGlvbj0iLi9zYW1wbGU5NDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTIiIGxvY2F0aW9uPSIuXHNhbXBsZTIxMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGFmNTEzMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE2IiBsb2NhdGlvbj0ic2FtcGxlMTE2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ0IiBsb2NhdGlvbj0iLi9zYW1wbGUzNDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjQiIGxvY2F0aW9uPSIuXHNhbXBsZTgyNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDUyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTdjZDExYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg3IiBsb2NhdGlvbj0ic2FtcGxlNTg3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk5IiBsb2NhdGlvbj0iLi9zYW1wbGU3OTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjAiIGxvY2F0aW9uPSIuXHNhbXBsZTMyMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDUzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQ0N2Y2NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg3IiBsb2NhdGlvbj0ic2FtcGxlNzg3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI2IiBsb2NhdGlvbj0iLi9zYW1wbGU4MjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDMiIGxvY2F0aW9uPSIuXHNhbXBsZTE0My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGFkNzE5ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIiIGxvY2F0aW9uPSJzYW1wbGU0Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MCIgbG9jYXRpb249Ii4vc2FtcGxlNTkwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI2IiBsb2NhdGlvbj0iLlxzYW1wbGU2MjYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ1NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDU1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhZmNiZWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NiIgbG9jYXRpb249InNhbXBsZTg0Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2OSIgbG9jYXRpb249Ii4vc2FtcGxlMzY5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQiIGxvY2F0aW9uPSIuXHNhbXBsZTQ0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ1Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODk0NTEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ1Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzgiIGxvY2F0aW9uPSJzYW1wbGUxMzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MCIgbG9jYXRpb249Ii4vc2FtcGxlODAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTgiIGxvY2F0aW9uPSIuXHNhbXBsZTg5OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmExMjZiZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc1IiBsb2NhdGlvbj0ic2FtcGxlNDc1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI4IiBsb2NhdGlvbj0iLi9zYW1wbGU4Mjgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODEiIGxvY2F0aW9uPSIuXHNhbXBsZTQ4MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFhOTdjNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU4IiBsb2NhdGlvbj0ic2FtcGxlNzU4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc1IiBsb2NhdGlvbj0iLi9zYW1wbGUxNzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDYiIGxvY2F0aW9uPSIuXHNhbXBsZTI0Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDU5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzRiNmNmNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY3IiBsb2NhdGlvbj0ic2FtcGxlNjY3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYiIGxvY2F0aW9uPSIuL3NhbXBsZTg2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY2IiBsb2NhdGlvbj0iLlxzYW1wbGU2NjYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTIwNjlhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTUiIGxvY2F0aW9uPSJzYW1wbGUyNTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDgiIGxvY2F0aW9uPSIuL3NhbXBsZTE0OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5OSIgbG9jYXRpb249Ii5cc2FtcGxlODk5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ2MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDYwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzMTc4MWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDYwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MSIgbG9jYXRpb249InNhbXBsZTM3MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczIiBsb2NhdGlvbj0iLi9zYW1wbGU3My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NSIgbG9jYXRpb249Ii5cc2FtcGxlMjk1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ2MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNmM0MzYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ2MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODgiIGxvY2F0aW9uPSJzYW1wbGU4ODgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODgiIGxvY2F0aW9uPSIuL3NhbXBsZTc4OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NCIgbG9jYXRpb249Ii5cc2FtcGxlNTc0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ2Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjdlODYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ2Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjgiIGxvY2F0aW9uPSJzYW1wbGU4Njgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODUiIGxvY2F0aW9uPSIuL3NhbXBsZTc4NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0OSIgbG9jYXRpb249Ii5cc2FtcGxlMjQ5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ2My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYjVmMDVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ2My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDUiIGxvY2F0aW9uPSJzYW1wbGU4NDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTUiIGxvY2F0aW9uPSIuL3NhbXBsZTU5NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNCIgbG9jYXRpb249Ii5cc2FtcGxlMjA0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ2NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDdhNzU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ2NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTciIGxvY2F0aW9uPSJzYW1wbGUyOTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDIiIGxvY2F0aW9uPSIuL3NhbXBsZTUwMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NiIgbG9jYXRpb249Ii5cc2FtcGxlNzc2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ2NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjNlODRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ2NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDgiIGxvY2F0aW9uPSJzYW1wbGU1MDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzQiIGxvY2F0aW9uPSIuL3NhbXBsZTIzNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNSIgbG9jYXRpb249Ii5cc2FtcGxlMjI1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ2Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmVlNTRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ2Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDkiIGxvY2F0aW9uPSJzYW1wbGUxMDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDUiIGxvY2F0aW9uPSIuL3NhbXBsZTc0NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NiIgbG9jYXRpb249Ii5cc2FtcGxlNzg2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Njcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ2Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTNhZjE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ2Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzgiIGxvY2F0aW9uPSJzYW1wbGUzNzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDciIGxvY2F0aW9uPSIuL3NhbXBsZTU0Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExOCIgbG9jYXRpb249Ii5cc2FtcGxlMTE4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Njgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ2OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGNlYTRiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ2OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjQiIGxvY2F0aW9uPSJzYW1wbGUzMjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjkiIGxvY2F0aW9uPSIuL3NhbXBsZTU2OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5OCIgbG9jYXRpb249Ii5cc2FtcGxlODk4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Njkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ2OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNWI1ODVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ2OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzEiIGxvY2F0aW9uPSJzYW1wbGUzMzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2IiBsb2NhdGlvbj0iLi9zYW1wbGU2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE2IiBsb2NhdGlvbj0iLlxzYW1wbGUxMTYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZGUxMDgxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDIiIGxvY2F0aW9uPSJzYW1wbGU0MDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDYiIGxvY2F0aW9uPSIuL3NhbXBsZTM0Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNSIgbG9jYXRpb249Ii5cc2FtcGxlMTI1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ3MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDcwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2YTc4ODQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDcwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDcwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDcwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NiIgbG9jYXRpb249InNhbXBsZTU1Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNyIgbG9jYXRpb249Ii4vc2FtcGxlODA3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI2IiBsb2NhdGlvbj0iLlxzYW1wbGUzMjYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDcwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ3MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDcxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwNTgxZmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDcxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDcxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDcxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNCIgbG9jYXRpb249InNhbXBsZTYwNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMCIgbG9jYXRpb249Ii4vc2FtcGxlNjAwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA3IiBsb2NhdGlvbj0iLlxzYW1wbGUxMDcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDcxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ3Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDcyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3Y2EzYTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDcyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDcyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MSIgbG9jYXRpb249InNhbXBsZTU0MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NSIgbG9jYXRpb249Ii4vc2FtcGxlMTg1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkxIiBsb2NhdGlvbj0iLlxzYW1wbGUyOTEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDcyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ3My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDczLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzMGEwNTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDczLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDczIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDczIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NSIgbG9jYXRpb249InNhbXBsZTU2NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyOCIgbG9jYXRpb249Ii4vc2FtcGxlODI4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQzIiBsb2NhdGlvbj0iLlxzYW1wbGU2NDMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDczIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ3NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDc0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0MDlkOGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDc0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0OSIgbG9jYXRpb249InNhbXBsZTI0OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNiIgbG9jYXRpb249Ii4vc2FtcGxlNDE2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg3IiBsb2NhdGlvbj0iLlxzYW1wbGU3ODcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ3NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDc1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExM2UyMGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDc1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2IiBsb2NhdGlvbj0ic2FtcGxlNDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzIiIGxvY2F0aW9uPSIuL3NhbXBsZTgzMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMiIgbG9jYXRpb249Ii5cc2FtcGxlMjEyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ3Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTAzNjY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ3Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjUiIGxvY2F0aW9uPSJzYW1wbGUyNjUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODQiIGxvY2F0aW9uPSIuL3NhbXBsZTk4NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwOSIgbG9jYXRpb249Ii5cc2FtcGxlNTA5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Nzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ3Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTViMDdmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ3Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjgiIGxvY2F0aW9uPSJzYW1wbGUxNjgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDUiIGxvY2F0aW9uPSIuL3NhbXBsZTI0NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExIiBsb2NhdGlvbj0iLlxzYW1wbGUxMS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDc4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Nzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWY0MWE3ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Nzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg0IiBsb2NhdGlvbj0ic2FtcGxlNzg0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUzIiBsb2NhdGlvbj0iLi9zYW1wbGUzNTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTAiIGxvY2F0aW9uPSIuXHNhbXBsZTYxMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDc5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Nzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDU1YjJjMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Nzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIyIiBsb2NhdGlvbj0ic2FtcGxlOTIyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE5IiBsb2NhdGlvbj0iLi9zYW1wbGUyMTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzYiIGxvY2F0aW9uPSIuXHNhbXBsZTg3Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhYTY0MzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxIiBsb2NhdGlvbj0ic2FtcGxlNjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTQiIGxvY2F0aW9uPSIuL3NhbXBsZTkxNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MCIgbG9jYXRpb249Ii5cc2FtcGxlMjkwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ4MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDgwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjNzJkZmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDgwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0IiBsb2NhdGlvbj0ic2FtcGxlNzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzMiIGxvY2F0aW9uPSIuL3NhbXBsZTgzMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2IiBsb2NhdGlvbj0iLlxzYW1wbGU5Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDgxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0ODEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODgzNWFlMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0ODEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQwIiBsb2NhdGlvbj0ic2FtcGxlNDQwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk0IiBsb2NhdGlvbj0iLi9zYW1wbGU3OTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzMiIGxvY2F0aW9uPSIuXHNhbXBsZTk3My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDgyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0ODIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQ1YjcyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0ODIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk2IiBsb2NhdGlvbj0ic2FtcGxlNDk2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUzIiBsb2NhdGlvbj0iLi9zYW1wbGU3NTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzgiIGxvY2F0aW9uPSIuXHNhbXBsZTk3OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDgzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0ODMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY3NmM4My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0ODMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA5IiBsb2NhdGlvbj0ic2FtcGxlMTA5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjcxIiBsb2NhdGlvbj0iLi9zYW1wbGU2NzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjciIGxvY2F0aW9uPSIuXHNhbXBsZTgyNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDg0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0ODQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjYyNzhlMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0ODQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQwIiBsb2NhdGlvbj0ic2FtcGxlNjQwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ0IiBsb2NhdGlvbj0iLi9zYW1wbGU0NDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTciIGxvY2F0aW9uPSIuXHNhbXBsZTM1Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDg1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0ODUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmEwMjA4NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0ODUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQiIGxvY2F0aW9uPSJzYW1wbGU4NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NiIgbG9jYXRpb249Ii4vc2FtcGxlOTg2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg0IiBsb2NhdGlvbj0iLlxzYW1wbGUyODQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ4Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDg2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmOGU1MGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDg2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyIiBsb2NhdGlvbj0ic2FtcGxlNzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjMiIGxvY2F0aW9uPSIuL3NhbXBsZTEyMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NSIgbG9jYXRpb249Ii5cc2FtcGxlMzg1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0ODcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ4Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MWE2YWMxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ4Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzMiIGxvY2F0aW9uPSJzYW1wbGU0NzMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTMiIGxvY2F0aW9uPSIuL3NhbXBsZTg5My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MSIgbG9jYXRpb249Ii5cc2FtcGxlNDUxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0ODgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ4OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OWJkNGM0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ4OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzAiIGxvY2F0aW9uPSJzYW1wbGUyMzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTkiIGxvY2F0aW9uPSIuL3NhbXBsZTU5OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NSIgbG9jYXRpb249Ii5cc2FtcGxlODQ1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0ODkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ4OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTM2ZmY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ4OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjIiIGxvY2F0aW9uPSJzYW1wbGU0MjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjgiIGxvY2F0aW9uPSIuL3NhbXBsZTQyOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MiIgbG9jYXRpb249Ii5cc2FtcGxlNTkyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFhZmJhZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgyIiBsb2NhdGlvbj0ic2FtcGxlMjgyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgwIiBsb2NhdGlvbj0iLi9zYW1wbGU3ODAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjMiIGxvY2F0aW9uPSIuXHNhbXBsZTU2My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ5MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDc3MjdhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ5MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjQiIGxvY2F0aW9uPSJzYW1wbGU5MjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTIiIGxvY2F0aW9uPSIuL3NhbXBsZTUxMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNyIgbG9jYXRpb249Ii5cc2FtcGxlOTE3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ5MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxN2ZkYWQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ5MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTAiIGxvY2F0aW9uPSJzYW1wbGUxNTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjUiIGxvY2F0aW9uPSIuL3NhbXBsZTEyNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MSIgbG9jYXRpb249Ii5cc2FtcGxlNDgxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ5Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MmVjMTExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ5Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTMiIGxvY2F0aW9uPSJzYW1wbGUxMTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODkiIGxvY2F0aW9uPSIuL3NhbXBsZTI4OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NCIgbG9jYXRpb249Ii5cc2FtcGxlNjY0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ5My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NmFiODlhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzQiIGxvY2F0aW9uPSJzYW1wbGU1MzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDUiIGxvY2F0aW9uPSIuL3NhbXBsZTU0NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NiIgbG9jYXRpb249Ii5cc2FtcGxlNjg2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ5NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTVkZWY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ5NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDIiIGxvY2F0aW9uPSJzYW1wbGU3MDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDIiIGxvY2F0aW9uPSIuL3NhbXBsZTU0Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MyIgbG9jYXRpb249Ii5cc2FtcGxlOTkzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ5NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmY2M4MzY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ5NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODkiIGxvY2F0aW9uPSJzYW1wbGU5ODkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjQiIGxvY2F0aW9uPSIuL3NhbXBsZTc2NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NCIgbG9jYXRpb249Ii5cc2FtcGxlNjQ0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ5Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZWQ0ZWMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjMiIGxvY2F0aW9uPSJzYW1wbGU1NjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDkiIGxvY2F0aW9uPSIuL3NhbXBsZTMwOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNCIgbG9jYXRpb249Ii5cc2FtcGxlNzE0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ5Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2FmOTg1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ5Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzciIGxvY2F0aW9uPSJzYW1wbGUyMzcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTMiIGxvY2F0aW9uPSIuL3NhbXBsZTM1My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MiIgbG9jYXRpb249Ii5cc2FtcGxlNTQyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ5OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhY2NiMWVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ5OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODQiIGxvY2F0aW9uPSJzYW1wbGU1ODQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjMiIGxvY2F0aW9uPSIuL3NhbXBsZTgyMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NCIgbG9jYXRpb249Ii5cc2FtcGxlMTk0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ5OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODMzYjRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDIiIGxvY2F0aW9uPSJzYW1wbGU2NDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTAiIGxvY2F0aW9uPSIuL3NhbXBsZTU5MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNyIgbG9jYXRpb249Ii5cc2FtcGxlOTA3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkZGE4ZWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMiIgbG9jYXRpb249InNhbXBsZTIyMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMSIgbG9jYXRpb249Ii4vc2FtcGxlNDMxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc0IiBsb2NhdGlvbj0iLlxzYW1wbGUyNzQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTg5OTBiYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYyIiBsb2NhdGlvbj0ic2FtcGxlNDYyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI1IiBsb2NhdGlvbj0iLi9zYW1wbGUxMjUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjQiIGxvY2F0aW9uPSIuXHNhbXBsZTgyNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUwMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDhhZjM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUwMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTgiIGxvY2F0aW9uPSJzYW1wbGU5NTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzciIGxvY2F0aW9uPSIuL3NhbXBsZTM3Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNyIgbG9jYXRpb249Ii5cc2FtcGxlMjE3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUwMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDU3MjliLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUwMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTMiIGxvY2F0aW9uPSJzYW1wbGU3NTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjUiIGxvY2F0aW9uPSIuL3NhbXBsZTk2NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NSIgbG9jYXRpb249Ii5cc2FtcGxlODU1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUwMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTI1ZTQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUwMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzgiIGxvY2F0aW9uPSJzYW1wbGU2Nzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzEiIGxvY2F0aW9uPSIuL3NhbXBsZTY3MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3IiBsb2NhdGlvbj0iLlxzYW1wbGUxNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTAzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjU4OGNhOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkyIiBsb2NhdGlvbj0ic2FtcGxlNjkyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkxIiBsb2NhdGlvbj0iLi9zYW1wbGUzOTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDYiIGxvY2F0aW9uPSIuXHNhbXBsZTQwNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTA0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjljMjUyOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQwIiBsb2NhdGlvbj0ic2FtcGxlMzQwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAxIiBsb2NhdGlvbj0iLi9zYW1wbGU2MDEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MCIgbG9jYXRpb249Ii5cc2FtcGxlNTAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUwNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTA1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhMmQ1YTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTA1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMiIgbG9jYXRpb249InNhbXBsZTYwMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1OSIgbG9jYXRpb249Ii4vc2FtcGxlNjU5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQyIiBsb2NhdGlvbj0iLlxzYW1wbGU0NDIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUwNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTA2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzZGZjZTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTA2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NSIgbG9jYXRpb249InNhbXBsZTI2NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NyIgbG9jYXRpb249Ii4vc2FtcGxlMTg3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc4IiBsb2NhdGlvbj0iLlxzYW1wbGUzNzgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUwNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTA3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmZjE2YTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTA3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MiIgbG9jYXRpb249InNhbXBsZTI5Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MiIgbG9jYXRpb249Ii4vc2FtcGxlMjkyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQwIiBsb2NhdGlvbj0iLlxzYW1wbGU3NDAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUwOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTA4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhODcyMjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTA4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NCIgbG9jYXRpb249InNhbXBsZTc1NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2IiBsb2NhdGlvbj0iLi9zYW1wbGU3Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNiIgbG9jYXRpb249Ii5cc2FtcGxlMzA2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUwOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDZlMDE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUwOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjgiIGxvY2F0aW9uPSJzYW1wbGU1Njgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTMiIGxvY2F0aW9uPSIuL3NhbXBsZTIxMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NyIgbG9jYXRpb249Ii5cc2FtcGxlNDk3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmU4NmRlMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkwIiBsb2NhdGlvbj0ic2FtcGxlMjkwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMzIiBsb2NhdGlvbj0iLi9zYW1wbGU0MzMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTAiIGxvY2F0aW9uPSIuXHNhbXBsZTI1MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUxMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODQ0NDgyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUxMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTUiIGxvY2F0aW9uPSJzYW1wbGU4OTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjAiIGxvY2F0aW9uPSIuL3NhbXBsZTQ2MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MiIgbG9jYXRpb249Ii5cc2FtcGxlNjgyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUxMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTc5NzJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUxMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzUiIGxvY2F0aW9uPSJzYW1wbGUxNzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NSIgbG9jYXRpb249Ii4vc2FtcGxlNTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDgiIGxvY2F0aW9uPSIuXHNhbXBsZTM0OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTEyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE0Mjg2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTcyIiBsb2NhdGlvbj0ic2FtcGxlOTcyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY5IiBsb2NhdGlvbj0iLi9zYW1wbGU3Njkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTMiIGxvY2F0aW9uPSIuXHNhbXBsZTU1My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTEzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzI0ZTQwNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM0IiBsb2NhdGlvbj0ic2FtcGxlNTM0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ5IiBsb2NhdGlvbj0iLi9zYW1wbGU5NDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTAiIGxvY2F0aW9uPSIuXHNhbXBsZTI5MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTE0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWFmZDQwYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgzIiBsb2NhdGlvbj0ic2FtcGxlNzgzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkzIiBsb2NhdGlvbj0iLi9zYW1wbGUyOTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTEiIGxvY2F0aW9uPSIuXHNhbXBsZTM1MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTE1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRhNmMwNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI0IiBsb2NhdGlvbj0ic2FtcGxlODI0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQxIiBsb2NhdGlvbj0iLi9zYW1wbGU0NDEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MSIgbG9jYXRpb249Ii5cc2FtcGxlOTEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUxNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTE2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1YmUyYzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTE2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMyIgbG9jYXRpb249InNhbXBsZTgwMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNiIgbG9jYXRpb249Ii4vc2FtcGxlMzI2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY5IiBsb2NhdGlvbj0iLlxzYW1wbGUzNjkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUxNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTE3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxY2I2MmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTE3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NSIgbG9jYXRpb249InNhbXBsZTQ1NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MyIgbG9jYXRpb249Ii4vc2FtcGxlNjgzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ5IiBsb2NhdGlvbj0iLlxzYW1wbGU1NDkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUxOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTE4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0NDc0YjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTE4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NSIgbG9jYXRpb249InNhbXBsZTE0NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5OSIgbG9jYXRpb249Ii4vc2FtcGxlNTk5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI5IiBsb2NhdGlvbj0iLlxzYW1wbGU1Mjkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUxOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTE5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5NTdiNTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTE5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NCIgbG9jYXRpb249InNhbXBsZTg1NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MiIgbG9jYXRpb249Ii4vc2FtcGxlMTUyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg1IiBsb2NhdGlvbj0iLlxzYW1wbGUxODUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzhlYzY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTkiIGxvY2F0aW9uPSJzYW1wbGUxMTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTciIGxvY2F0aW9uPSIuL3NhbXBsZTQ5Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NSIgbG9jYXRpb249Ii5cc2FtcGxlNjc1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUyMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTIwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwZTM3Y2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTIwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MyIgbG9jYXRpb249InNhbXBsZTk2My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxOCIgbG9jYXRpb249Ii4vc2FtcGxlOTE4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg0IiBsb2NhdGlvbj0iLlxzYW1wbGUyODQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUyMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTIxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1YTEzZDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTIxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MCIgbG9jYXRpb249InNhbXBsZTM0MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MiIgbG9jYXRpb249Ii4vc2FtcGxlNTQyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg2IiBsb2NhdGlvbj0iLlxzYW1wbGU0ODYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUyMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTIyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjNDgyZTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTIyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NiIgbG9jYXRpb249InNhbXBsZTE0Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MiIgbG9jYXRpb249Ii4vc2FtcGxlOTQyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM1IiBsb2NhdGlvbj0iLlxzYW1wbGU5MzUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUyMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTIzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzOTYzMzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTIzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MiIgbG9jYXRpb249InNhbXBsZTk0Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNSIgbG9jYXRpb249Ii4vc2FtcGxlOTA1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk3IiBsb2NhdGlvbj0iLlxzYW1wbGU2OTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUyNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTI0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiNDFhMzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTI0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczIiBsb2NhdGlvbj0ic2FtcGxlNzMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MiIgbG9jYXRpb249Ii4vc2FtcGxlNjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzIiIGxvY2F0aW9uPSIuXHNhbXBsZTUzMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTI1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGU4YjQ2ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkxIiBsb2NhdGlvbj0ic2FtcGxlMzkxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA0IiBsb2NhdGlvbj0iLi9zYW1wbGU3MDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzMiIGxvY2F0aW9uPSIuXHNhbXBsZTYzMy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTI2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjE2NTU2Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM3IiBsb2NhdGlvbj0ic2FtcGxlMjM3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgyIiBsb2NhdGlvbj0iLi9zYW1wbGUxODIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDAiIGxvY2F0aW9uPSIuXHNhbXBsZTcwMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTI3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Mjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmNlNmQ1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Mjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg2IiBsb2NhdGlvbj0ic2FtcGxlMjg2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE1IiBsb2NhdGlvbj0iLi9zYW1wbGU0MTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDciIGxvY2F0aW9uPSIuXHNhbXBsZTc0Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTI4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Mjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmIwOTJhZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Mjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg1IiBsb2NhdGlvbj0ic2FtcGxlMzg1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQwIiBsb2NhdGlvbj0iLi9zYW1wbGUxNDAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjUiIGxvY2F0aW9uPSIuXHNhbXBsZTUyNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTI5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Mjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2IxN2IwMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Mjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ3IiBsb2NhdGlvbj0ic2FtcGxlNjQ3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc5IiBsb2NhdGlvbj0iLi9zYW1wbGU5Nzkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTciIGxvY2F0aW9uPSIuXHNhbXBsZTI5Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4ZjNlN2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NiIgbG9jYXRpb249InNhbXBsZTQ5Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNiIgbG9jYXRpb249Ii4vc2FtcGxlODA2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMyIiBsb2NhdGlvbj0iLlxzYW1wbGU1MzIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTMwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWRhMjBjZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQyIiBsb2NhdGlvbj0ic2FtcGxlOTQyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEyIiBsb2NhdGlvbj0iLi9zYW1wbGU3MTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzkiIGxvY2F0aW9uPSIuXHNhbXBsZTY3OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTMxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDFiMzgyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg3IiBsb2NhdGlvbj0ic2FtcGxlODg3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE3IiBsb2NhdGlvbj0iLi9zYW1wbGUyMTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMyIgbG9jYXRpb249Ii5cc2FtcGxlMjMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUzMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTMyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2YTJiMmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTMyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2OSIgbG9jYXRpb249InNhbXBsZTI2OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwOCIgbG9jYXRpb249Ii4vc2FtcGxlMzA4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTczIiBsb2NhdGlvbj0iLlxzYW1wbGU1NzMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUzMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTMzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjYmFhNmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTMzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMSIgbG9jYXRpb249InNhbXBsZTQwMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NiIgbG9jYXRpb249Ii4vc2FtcGxlMzg2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIiIGxvY2F0aW9uPSIuXHNhbXBsZTUyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUzNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODEwYTU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUzNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDUiIGxvY2F0aW9uPSJzYW1wbGU5MDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTYiIGxvY2F0aW9uPSIuL3NhbXBsZTM5Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NSIgbG9jYXRpb249Ii5cc2FtcGxlMTQ1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUzNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzZjZmQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUzNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDEiIGxvY2F0aW9uPSJzYW1wbGUzMDEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjMiIGxvY2F0aW9uPSIuL3NhbXBsZTkyMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNiIgbG9jYXRpb249Ii5cc2FtcGxlNDE2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUzNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZmRlZjM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUzNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODkiIGxvY2F0aW9uPSJzYW1wbGU0ODkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTkiIGxvY2F0aW9uPSIuL3NhbXBsZTUxOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQiIGxvY2F0aW9uPSIuXHNhbXBsZTQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUzNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTM3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3MjJjNGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTM3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MSIgbG9jYXRpb249InNhbXBsZTc5MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MCIgbG9jYXRpb249Ii4vc2FtcGxlODUwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc4IiBsb2NhdGlvbj0iLlxzYW1wbGU2Nzgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUzOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTM4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5ZmFmM2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTM4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNiIgbG9jYXRpb249InNhbXBsZTIxNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1NCIgbG9jYXRpb249Ii4vc2FtcGxlMzU0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUzIiBsb2NhdGlvbj0iLlxzYW1wbGUzNTMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUzOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTM5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5YTFhOGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTM5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMSIgbG9jYXRpb249InNhbXBsZTcwMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMyIgbG9jYXRpb249Ii4vc2FtcGxlNzIzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYiIGxvY2F0aW9uPSIuXHNhbXBsZTI2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODc0MGEzOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM4IiBsb2NhdGlvbj0ic2FtcGxlNjM4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ1IiBsb2NhdGlvbj0iLi9zYW1wbGUyNDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzkiIGxvY2F0aW9uPSIuXHNhbXBsZTU3OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU0MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjJiNjc4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU0MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzIiIGxvY2F0aW9uPSJzYW1wbGU3MzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDUiIGxvY2F0aW9uPSIuL3NhbXBsZTU0NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMSIgbG9jYXRpb249Ii5cc2FtcGxlNjMxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU0MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OGM1OWU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU0MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzIiIGxvY2F0aW9uPSJzYW1wbGUyMzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjMiIGxvY2F0aW9uPSIuL3NhbXBsZTIyMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NSIgbG9jYXRpb249Ii5cc2FtcGxlMjk1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU0Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWI0NjkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU0Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzQiIGxvY2F0aW9uPSJzYW1wbGU0MzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODEiIGxvY2F0aW9uPSIuL3NhbXBsZTQ4MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MiIgbG9jYXRpb249Ii5cc2FtcGxlNDkyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU0My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDdjMDMxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU0My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTkiIGxvY2F0aW9uPSJzYW1wbGU0NTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTciIGxvY2F0aW9uPSIuL3NhbXBsZTc5Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNiIgbG9jYXRpb249Ii5cc2FtcGxlNTA2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU0NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OGY5ZjVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU0NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODQiIGxvY2F0aW9uPSJzYW1wbGU1ODQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjIiIGxvY2F0aW9uPSIuL3NhbXBsZTgyMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1OSIgbG9jYXRpb249Ii5cc2FtcGxlNTU5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU0NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjc5ZWNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU0NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTIiIGxvY2F0aW9uPSJzYW1wbGU2OTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzgiIGxvY2F0aW9uPSIuL3NhbXBsZTczOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMyIgbG9jYXRpb249Ii5cc2FtcGxlMjAzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU0Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTk5OGUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU0Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDciIGxvY2F0aW9uPSJzYW1wbGUyMDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODciIGxvY2F0aW9uPSIuL3NhbXBsZTc4Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2IiBsb2NhdGlvbj0iLlxzYW1wbGU5Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTQ3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmRkYjIxZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU0IiBsb2NhdGlvbj0ic2FtcGxlNDU0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE3IiBsb2NhdGlvbj0iLi9zYW1wbGUyMTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDkiIGxvY2F0aW9uPSIuXHNhbXBsZTQwOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTQ4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjBkMDRkYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAiIGxvY2F0aW9uPSJzYW1wbGU1MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4OSIgbG9jYXRpb249Ii4vc2FtcGxlNjg5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODcxIiBsb2NhdGlvbj0iLlxzYW1wbGU4NzEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU0OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTQ5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2Mjc5ZjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTQ5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMiIgbG9jYXRpb249InNhbXBsZTMyMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNyIgbG9jYXRpb249Ii4vc2FtcGxlNzI3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEzIiBsb2NhdGlvbj0iLlxzYW1wbGU2MTMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTNiYWZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTEiIGxvY2F0aW9uPSJzYW1wbGUxNTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzciIGxvY2F0aW9uPSIuL3NhbXBsZTI3Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NSIgbG9jYXRpb249Ii5cc2FtcGxlODg1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU1MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxYjJiZGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMSIgbG9jYXRpb249InNhbXBsZTkyMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MyIgbG9jYXRpb249Ii4vc2FtcGxlMTYzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYyIiBsb2NhdGlvbj0iLlxzYW1wbGU2NjIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU1MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1OWQzY2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4OSIgbG9jYXRpb249InNhbXBsZTI4OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NCIgbG9jYXRpb249Ii4vc2FtcGxlNDY0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA4IiBsb2NhdGlvbj0iLlxzYW1wbGUzMDgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU1Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTUyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3YWVhZTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMyIgbG9jYXRpb249InNhbXBsZTgxMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NiIgbG9jYXRpb249Ii4vc2FtcGxlNzg2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkyIiBsb2NhdGlvbj0iLlxzYW1wbGU0OTIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU1My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwMzBkNWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyIiBsb2NhdGlvbj0ic2FtcGxlNzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTMiIGxvY2F0aW9uPSIuL3NhbXBsZTY1My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxOSIgbG9jYXRpb249Ii5cc2FtcGxlNzE5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU1NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNGIxZWI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU1NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzMiIGxvY2F0aW9uPSJzYW1wbGUzMzMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzMiIGxvY2F0aW9uPSIuL3NhbXBsZTEzMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MSIgbG9jYXRpb249Ii5cc2FtcGxlMzkxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU1NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODI0MmNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU1NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzYiIGxvY2F0aW9uPSJzYW1wbGUxNzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzQiIGxvY2F0aW9uPSIuL3NhbXBsZTMzNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NCIgbG9jYXRpb249Ii5cc2FtcGxlMTY0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU1Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNWQ5ODI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU1Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTUiIGxvY2F0aW9uPSJzYW1wbGU0OTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTEiIGxvY2F0aW9uPSIuL3NhbXBsZTgxMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4OSIgbG9jYXRpb249Ii5cc2FtcGxlOTg5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU1Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjZlZDU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU1Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTAiIGxvY2F0aW9uPSJzYW1wbGU1OTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjciIGxvY2F0aW9uPSIuL3NhbXBsZTUyNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMiIgbG9jYXRpb249Ii5cc2FtcGxlMTIyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU1OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTAxMGIwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU1OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDMiIGxvY2F0aW9uPSJzYW1wbGUzMDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzIiIGxvY2F0aW9uPSIuL3NhbXBsZTI3Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NyIgbG9jYXRpb249Ii5cc2FtcGxlNjg3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU1OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzIwZWYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU1OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDgiIGxvY2F0aW9uPSJzYW1wbGUzNDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODUiIGxvY2F0aW9uPSIuL3NhbXBsZTU4NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwOSIgbG9jYXRpb249Ii5cc2FtcGxlOTA5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGJjODg2Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMiIGxvY2F0aW9uPSJzYW1wbGUyMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNCIgbG9jYXRpb249Ii4vc2FtcGxlMTM0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEzIiBsb2NhdGlvbj0iLlxzYW1wbGU1MTMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTYwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTI4NDE5ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIzIiBsb2NhdGlvbj0ic2FtcGxlNjIzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNiIgbG9jYXRpb249Ii4vc2FtcGxlNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNiIgbG9jYXRpb249Ii5cc2FtcGxlNzA2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU2MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjYwMjFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU2MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjMiIGxvY2F0aW9uPSJzYW1wbGUyMjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNSIgbG9jYXRpb249Ii4vc2FtcGxlMTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTgiIGxvY2F0aW9uPSIuXHNhbXBsZTcxOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTYyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTAwMTQ4NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM2IiBsb2NhdGlvbj0ic2FtcGxlNjM2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMwIiBsb2NhdGlvbj0iLi9zYW1wbGUzMzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjIiIGxvY2F0aW9uPSIuXHNhbXBsZTQ2Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTYzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTA0ODJmYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA0IiBsb2NhdGlvbj0ic2FtcGxlNDA0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTciIGxvY2F0aW9uPSIuL3NhbXBsZTU3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ5IiBsb2NhdGlvbj0iLlxzYW1wbGUxNDkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU2NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTY0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2MWVkMDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTY0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MCIgbG9jYXRpb249InNhbXBsZTU5MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NCIgbG9jYXRpb249Ii4vc2FtcGxlNjk0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc0IiBsb2NhdGlvbj0iLlxzYW1wbGUyNzQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU2NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTY1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkMGRiNTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTY1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NyIgbG9jYXRpb249InNhbXBsZTU1Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MyIgbG9jYXRpb249Ii4vc2FtcGxlMjczLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMwIiBsb2NhdGlvbj0iLlxzYW1wbGU4MzAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU2Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTY2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzYjNkM2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTY2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMCIgbG9jYXRpb249InNhbXBsZTczMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwIiBsb2NhdGlvbj0iLi9zYW1wbGU4MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NyIgbG9jYXRpb249Ii5cc2FtcGxlNzk3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Njcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU2Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzY2NzlkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU2Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjIiIGxvY2F0aW9uPSJzYW1wbGU3NjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjEiIGxvY2F0aW9uPSIuL3NhbXBsZTkyMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NyIgbG9jYXRpb249Ii5cc2FtcGxlNzQ3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Njgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU2OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2N2JjNDg0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU2OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzQiIGxvY2F0aW9uPSJzYW1wbGUyNzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTkiIGxvY2F0aW9uPSIuL3NhbXBsZTU1OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MiIgbG9jYXRpb249Ii5cc2FtcGxlODkyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Njkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU2OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDVhMDZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU2OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTMiIGxvY2F0aW9uPSJzYW1wbGUxMTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjEiIGxvY2F0aW9uPSIuL3NhbXBsZTQ2MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NSIgbG9jYXRpb249Ii5cc2FtcGxlNTk1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzc4MmNmMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDcwIiBsb2NhdGlvbj0ic2FtcGxlNDcwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU3IiBsb2NhdGlvbj0iLi9zYW1wbGUyNTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzIiIGxvY2F0aW9uPSIuXHNhbXBsZTQzMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU3MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjU1ODk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU3MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTgiIGxvY2F0aW9uPSJzYW1wbGU0MTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODQiIGxvY2F0aW9uPSIuL3NhbXBsZTM4NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NSIgbG9jYXRpb249Ii5cc2FtcGxlODQ1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU3MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTg4ZWI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODIiIGxvY2F0aW9uPSJzYW1wbGU5ODIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjIiIGxvY2F0aW9uPSIuL3NhbXBsZTk2Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwOSIgbG9jYXRpb249Ii5cc2FtcGxlODA5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU3Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNGRhODQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU3Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjYiIGxvY2F0aW9uPSJzYW1wbGU4MjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzYiIGxvY2F0aW9uPSIuL3NhbXBsZTY3Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0OCIgbG9jYXRpb249Ii5cc2FtcGxlNjQ4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU3My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OGNkZjAzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU3My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTYiIGxvY2F0aW9uPSJzYW1wbGU3NTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjEiIGxvY2F0aW9uPSIuL3NhbXBsZTI2MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NCIgbG9jYXRpb249Ii5cc2FtcGxlODc0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU3NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NzRiMjJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU3NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTgiIGxvY2F0aW9uPSJzYW1wbGUxNTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTAiIGxvY2F0aW9uPSIuL3NhbXBsZTU5MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NCIgbG9jYXRpb249Ii5cc2FtcGxlNzU0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU3NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzM5NWFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU3NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzAiIGxvY2F0aW9uPSJzYW1wbGUxMzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMyIgbG9jYXRpb249Ii4vc2FtcGxlMjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTYiIGxvY2F0aW9uPSIuXHNhbXBsZTI1Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTc2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2VmNDFlZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODExIiBsb2NhdGlvbj0ic2FtcGxlODExLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY4IiBsb2NhdGlvbj0iLi9zYW1wbGU2Njgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzEiIGxvY2F0aW9uPSIuXHNhbXBsZTgzMS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTc3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Nzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjRhY2U0ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Nzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg1IiBsb2NhdGlvbj0ic2FtcGxlMjg1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkxIiBsb2NhdGlvbj0iLi9zYW1wbGU5OTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTkiIGxvY2F0aW9uPSIuXHNhbXBsZTYxOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTc4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Nzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGYxNjRjZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Nzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEwIiBsb2NhdGlvbj0ic2FtcGxlMTEwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEyIiBsb2NhdGlvbj0iLi9zYW1wbGU1MTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNSIgbG9jYXRpb249Ii5cc2FtcGxlMTUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU3OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTc5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjMzNkYjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTc5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMCIgbG9jYXRpb249InNhbXBsZTkzMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNSIgbG9jYXRpb249Ii4vc2FtcGxlNTE1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjcxIiBsb2NhdGlvbj0iLlxzYW1wbGU2NzEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmFhNjI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTMiIGxvY2F0aW9uPSJzYW1wbGU4NTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDIiIGxvY2F0aW9uPSIuL3NhbXBsZTI0Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MSIgbG9jYXRpb249Ii5cc2FtcGxlNzQxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU4MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTgwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzOTc5YjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTgwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNiIgbG9jYXRpb249InNhbXBsZTczNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMyIgbG9jYXRpb249Ii4vc2FtcGxlMTEzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg5IiBsb2NhdGlvbj0iLlxzYW1wbGUzODkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU4MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTgxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwN2ZmNjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTgxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0OCIgbG9jYXRpb249InNhbXBsZTQ0OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MiIgbG9jYXRpb249Ii4vc2FtcGxlNjkyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEyIiBsb2NhdGlvbj0iLlxzYW1wbGUzMTIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU4Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTgyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4ODJlZDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTgyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MSIgbG9jYXRpb249InNhbXBsZTc4MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MCIgbG9jYXRpb249Ii4vc2FtcGxlMTkwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjciIGxvY2F0aW9uPSIuXHNhbXBsZTY3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1ODMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU4My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NzdkZTA0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU4My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzAiIGxvY2F0aW9uPSJzYW1wbGUyMzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDMiIGxvY2F0aW9uPSIuL3NhbXBsZTcwMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMiIgbG9jYXRpb249Ii5cc2FtcGxlMTEyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1ODQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU4NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMGY4YjhmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU4NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDAiIGxvY2F0aW9uPSJzYW1wbGUyNDAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTQiIGxvY2F0aW9uPSIuL3NhbXBsZTYxNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzIiBsb2NhdGlvbj0iLlxzYW1wbGUyMy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTg1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1ODUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGNhYzRlOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1ODUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMwIiBsb2NhdGlvbj0ic2FtcGxlNjMwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjcwIiBsb2NhdGlvbj0iLi9zYW1wbGU2NzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTkiIGxvY2F0aW9uPSIuXHNhbXBsZTMxOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTg2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1ODYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODNjODU5My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1ODYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIxIiBsb2NhdGlvbj0ic2FtcGxlNTIxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDczIiBsb2NhdGlvbj0iLi9zYW1wbGU0NzMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzMiIGxvY2F0aW9uPSIuXHNhbXBsZTYzMy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTg3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1ODcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDBjMmE2YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1ODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ3IiBsb2NhdGlvbj0ic2FtcGxlNDQ3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAwIiBsb2NhdGlvbj0iLi9zYW1wbGUyMDAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjIiIGxvY2F0aW9uPSIuXHNhbXBsZTI2Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTg4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1ODgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDBlMWU2Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1ODgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM2IiBsb2NhdGlvbj0ic2FtcGxlNzM2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI3IiBsb2NhdGlvbj0iLi9zYW1wbGU4Mjcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODQiIGxvY2F0aW9uPSIuXHNhbXBsZTc4NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTg5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1ODkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjZjMDg3OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1ODkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAzIiBsb2NhdGlvbj0ic2FtcGxlNzAzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMyIiBsb2NhdGlvbj0iLi9zYW1wbGU0MzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjkiIGxvY2F0aW9uPSIuXHNhbXBsZTQyOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkMzI3ODMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyOSIgbG9jYXRpb249InNhbXBsZTMyOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4OSIgbG9jYXRpb249Ii4vc2FtcGxlMjg5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM0IiBsb2NhdGlvbj0iLlxzYW1wbGUyMzQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTkwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzEwYjE3ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAiIGxvY2F0aW9uPSJzYW1wbGU0MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MiIgbG9jYXRpb249Ii4vc2FtcGxlNjYyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMzIiBsb2NhdGlvbj0iLlxzYW1wbGUzMzMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU5MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTkxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0NjliZmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTkxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1NSIgbG9jYXRpb249InNhbXBsZTM1NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMCIgbG9jYXRpb249Ii4vc2FtcGxlMTEwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQzIiBsb2NhdGlvbj0iLlxzYW1wbGU5NDMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU5Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTkyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyMjhkZTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTkyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczIiBsb2NhdGlvbj0ic2FtcGxlNzMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODgiIGxvY2F0aW9uPSIuL3NhbXBsZTg4OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NiIgbG9jYXRpb249Ii5cc2FtcGxlNjg2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU5My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMWNlZTRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTMiIGxvY2F0aW9uPSJzYW1wbGUzMTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDciIGxvY2F0aW9uPSIuL3NhbXBsZTQwNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNSIgbG9jYXRpb249Ii5cc2FtcGxlMTA1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU5NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwM2ViYWIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU5NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjYiIGxvY2F0aW9uPSJzYW1wbGU5NjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzYiIGxvY2F0aW9uPSIuL3NhbXBsZTkzNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMSIgbG9jYXRpb249Ii5cc2FtcGxlMjAxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU5NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDg0NDU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU5NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjIiIGxvY2F0aW9uPSJzYW1wbGUyMjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODkiIGxvY2F0aW9uPSIuL3NhbXBsZTY4OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMCIgbG9jYXRpb249Ii5cc2FtcGxlMTMwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU5Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YmViZWFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjkiIGxvY2F0aW9uPSJzYW1wbGU2Mjkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTQiIGxvY2F0aW9uPSIuL3NhbXBsZTcxNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5OSIgbG9jYXRpb249Ii5cc2FtcGxlNDk5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU5Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTViNGVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU5Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzEiIGxvY2F0aW9uPSJzYW1wbGU5MzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzgiIGxvY2F0aW9uPSIuL3NhbXBsZTQzOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NSIgbG9jYXRpb249Ii5cc2FtcGxlOTg1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU5OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzQwZDQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU5OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODMiIGxvY2F0aW9uPSJzYW1wbGU0ODMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjQiIGxvY2F0aW9uPSIuL3NhbXBsZTYyNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NyIgbG9jYXRpb249Ii5cc2FtcGxlNTY3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU5OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWRmNzVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzQiIGxvY2F0aW9uPSJzYW1wbGU3MzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NiIgbG9jYXRpb249Ii4vc2FtcGxlNzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzMiIGxvY2F0aW9uPSIuXHNhbXBsZTEzMy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDRiZmMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDQiIGxvY2F0aW9uPSJzYW1wbGUzNDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDIiIGxvY2F0aW9uPSIuL3NhbXBsZTI0Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MCIgbG9jYXRpb249Ii5cc2FtcGxlMzUwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0MDViNDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNiIgbG9jYXRpb249InNhbXBsZTkxNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NyIgbG9jYXRpb249Ii4vc2FtcGxlMTg3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE3IiBsb2NhdGlvbj0iLlxzYW1wbGUzMTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjAwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWIzNjc1ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQyIiBsb2NhdGlvbj0ic2FtcGxlNjQyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUwIiBsb2NhdGlvbj0iLi9zYW1wbGU1NTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTAiIGxvY2F0aW9uPSIuXHNhbXBsZTkxMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjAxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTczNjU4OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkiIGxvY2F0aW9uPSJzYW1wbGU5OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MyIgbG9jYXRpb249Ii4vc2FtcGxlMzQzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQiIGxvY2F0aW9uPSIuXHNhbXBsZTg0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYwMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTc2Y2YxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYwMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzUiIGxvY2F0aW9uPSJzYW1wbGU0NzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzAiIGxvY2F0aW9uPSIuL3NhbXBsZTEzMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNCIgbG9jYXRpb249Ii5cc2FtcGxlMzA0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYwMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjkwNWZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYwMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODYiIGxvY2F0aW9uPSJzYW1wbGU1ODYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTUiIGxvY2F0aW9uPSIuL3NhbXBsZTk5NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1OCIgbG9jYXRpb249Ii5cc2FtcGxlMTU4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYwNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjYyYzJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYwNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjUiIGxvY2F0aW9uPSJzYW1wbGUyNjUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzMiIGxvY2F0aW9uPSIuL3NhbXBsZTg3My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NiIgbG9jYXRpb249Ii5cc2FtcGxlNDU2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYwNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTY2NjJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYwNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjkiIGxvY2F0aW9uPSJzYW1wbGUxMjkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTciIGxvY2F0aW9uPSIuL3NhbXBsZTU5Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NSIgbG9jYXRpb249Ii5cc2FtcGxlNjg1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYwNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzU4ZDQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYwNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NiIgbG9jYXRpb249InNhbXBsZTg2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ5IiBsb2NhdGlvbj0iLi9zYW1wbGU3NDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDMiIGxvY2F0aW9uPSIuXHNhbXBsZTgwMy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjA3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGUwYTM0YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUxIiBsb2NhdGlvbj0ic2FtcGxlNzUxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgiIGxvY2F0aW9uPSIuL3NhbXBsZTU4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAiIGxvY2F0aW9uPSIuXHNhbXBsZTIwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYwOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDJkYmU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYwOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjMiIGxvY2F0aW9uPSJzYW1wbGU4NjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDAiIGxvY2F0aW9uPSIuL3NhbXBsZTgwMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMyIgbG9jYXRpb249Ii5cc2FtcGxlOTIzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYwOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTlkOTEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYwOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNCIgbG9jYXRpb249InNhbXBsZTE0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzczIiBsb2NhdGlvbj0iLi9zYW1wbGUzNzMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NyIgbG9jYXRpb249Ii5cc2FtcGxlNDcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZjk1ZGU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTYiIGxvY2F0aW9uPSJzYW1wbGU1NTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjkiIGxvY2F0aW9uPSIuL3NhbXBsZTI2OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMiIgbG9jYXRpb249Ii5cc2FtcGxlODMyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYxMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjEwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2MGVkNDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjEwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyIiBsb2NhdGlvbj0ic2FtcGxlNjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzQiIGxvY2F0aW9uPSIuL3NhbXBsZTM3NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NyIgbG9jYXRpb249Ii5cc2FtcGxlODU3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYxMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMmUzYWJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYxMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjAiIGxvY2F0aW9uPSJzYW1wbGUxMjAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDciIGxvY2F0aW9uPSIuL3NhbXBsZTk0Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwIiBsb2NhdGlvbj0iLlxzYW1wbGUxMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjEyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDJiYmJmMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU4IiBsb2NhdGlvbj0ic2FtcGxlNDU4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTcwIiBsb2NhdGlvbj0iLi9zYW1wbGUxNzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjkiIGxvY2F0aW9uPSIuXHNhbXBsZTYyOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjEzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzljODVmYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkyIiBsb2NhdGlvbj0ic2FtcGxlODkyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUiIGxvY2F0aW9uPSIuL3NhbXBsZTg1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg2IiBsb2NhdGlvbj0iLlxzYW1wbGUxODYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYxNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjE0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0YzJiZTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjE0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NSIgbG9jYXRpb249InNhbXBsZTM3NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2IiBsb2NhdGlvbj0iLi9zYW1wbGU2Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MSIgbG9jYXRpb249Ii5cc2FtcGxlNTQxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYxNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZWVlZmQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYxNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5IiBsb2NhdGlvbj0ic2FtcGxlOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMiIgbG9jYXRpb249Ii4vc2FtcGxlODAyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUxIiBsb2NhdGlvbj0iLlxzYW1wbGU1NTEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYxNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjE2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4YzJiNWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjE2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3IiBsb2NhdGlvbj0ic2FtcGxlODcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzEiIGxvY2F0aW9uPSIuL3NhbXBsZTIzMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MyIgbG9jYXRpb249Ii5cc2FtcGxlMzYzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYxNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDY1MDgwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYxNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzEiIGxvY2F0aW9uPSJzYW1wbGU3MzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjgiIGxvY2F0aW9uPSIuL3NhbXBsZTQ2OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MCIgbG9jYXRpb249Ii5cc2FtcGxlNjUwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYxOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDUzZjQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYxOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMyIgbG9jYXRpb249InNhbXBsZTMzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI2IiBsb2NhdGlvbj0iLi9zYW1wbGU1MjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNCIgbG9jYXRpb249Ii5cc2FtcGxlMjQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYxOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjE5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyYmYwZTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjE5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MSIgbG9jYXRpb249InNhbXBsZTM1MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4OCIgbG9jYXRpb249Ii4vc2FtcGxlNTg4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkyIiBsb2NhdGlvbj0iLlxzYW1wbGU0OTIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTE0MWQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTEiIGxvY2F0aW9uPSJzYW1wbGUyOTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODkiIGxvY2F0aW9uPSIuL3NhbXBsZTQ4OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MyIgbG9jYXRpb249Ii5cc2FtcGxlOTkzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYyMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjIwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1NmJkYmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjIwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MiIgbG9jYXRpb249InNhbXBsZTU5Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NCIgbG9jYXRpb249Ii4vc2FtcGxlMzY0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA1IiBsb2NhdGlvbj0iLlxzYW1wbGUxMDUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYyMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjIxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3ODQ2N2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjIxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYiIGxvY2F0aW9uPSJzYW1wbGU2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSIgbG9jYXRpb249Ii4vc2FtcGxlMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MyIgbG9jYXRpb249Ii5cc2FtcGxlMTgzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYyMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMGRkMDA5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzQiIGxvY2F0aW9uPSJzYW1wbGU0NzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjUiIGxvY2F0aW9uPSIuL3NhbXBsZTMyNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMiIgbG9jYXRpb249Ii5cc2FtcGxlMzIyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYyMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzA0ZWNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYyMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODMiIGxvY2F0aW9uPSJzYW1wbGU3ODMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTQiIGxvY2F0aW9uPSIuL3NhbXBsZTE5NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNSIgbG9jYXRpb249Ii5cc2FtcGxlNjM1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYyNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZGMyMzE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYyNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzUiIGxvY2F0aW9uPSJzYW1wbGUyMzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTciIGxvY2F0aW9uPSIuL3NhbXBsZTM5Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NCIgbG9jYXRpb249Ii5cc2FtcGxlNjU0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYyNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOGU3NmQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTYiIGxvY2F0aW9uPSJzYW1wbGUyMTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTUiIGxvY2F0aW9uPSIuL3NhbXBsZTQxNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyIiBsb2NhdGlvbj0iLlxzYW1wbGU2Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjI2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTE4NzhlZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg3IiBsb2NhdGlvbj0ic2FtcGxlNjg3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAiIGxvY2F0aW9uPSIuL3NhbXBsZTcwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEiIGxvY2F0aW9uPSIuXHNhbXBsZTIxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Mjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYyNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMGQzNGUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYyNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODgiIGxvY2F0aW9uPSJzYW1wbGU2ODgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTciIGxvY2F0aW9uPSIuL3NhbXBsZTUxNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyOSIgbG9jYXRpb249Ii5cc2FtcGxlNTI5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Mjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYyOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOGFjMWM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDEiIGxvY2F0aW9uPSJzYW1wbGU5NDEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDIiIGxvY2F0aW9uPSIuL3NhbXBsZTk0Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyOSIgbG9jYXRpb249Ii5cc2FtcGxlNjI5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Mjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYyOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTRhYThkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYyOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjYiIGxvY2F0aW9uPSJzYW1wbGU1NjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTciIGxvY2F0aW9uPSIuL3NhbXBsZTcxNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MiIgbG9jYXRpb249Ii5cc2FtcGxlODQyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDA3YzUwOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE5IiBsb2NhdGlvbj0ic2FtcGxlMTE5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU0IiBsb2NhdGlvbj0iLi9zYW1wbGU2NTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzQiIGxvY2F0aW9uPSIuXHNhbXBsZTMzNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYzMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzQ0NTIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYzMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTAiIGxvY2F0aW9uPSJzYW1wbGUyOTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOSIgbG9jYXRpb249Ii4vc2FtcGxlMzkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjciIGxvY2F0aW9uPSIuXHNhbXBsZTY2Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjMxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjUyN2VmNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQiIGxvY2F0aW9uPSJzYW1wbGUxNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MiIgbG9jYXRpb249Ii4vc2FtcGxlNjgyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA1IiBsb2NhdGlvbj0iLlxzYW1wbGU1MDUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYzMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjMyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3OTcwOWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjMyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwOSIgbG9jYXRpb249InNhbXBsZTUwOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MyIgbG9jYXRpb249Ii4vc2FtcGxlNTgzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkxIiBsb2NhdGlvbj0iLlxzYW1wbGUxOTEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYzMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjMzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYjU1ZDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjMzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1NCIgbG9jYXRpb249InNhbXBsZTM1NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MiIgbG9jYXRpb249Ii4vc2FtcGxlOTcyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUxIiBsb2NhdGlvbj0iLlxzYW1wbGU1NTEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYzNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjM0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0NTAwNWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjM0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MCIgbG9jYXRpb249InNhbXBsZTQ3MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NiIgbG9jYXRpb249Ii4vc2FtcGxlOTg2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg3IiBsb2NhdGlvbj0iLlxzYW1wbGU4ODcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYzNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjM1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmY2VjM2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjM1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxMCIgbG9jYXRpb249InNhbXBsZTcxMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NCIgbG9jYXRpb249Ii4vc2FtcGxlMzY0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUiIGxvY2F0aW9uPSIuXHNhbXBsZTg1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2MzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYzNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjM2ZmQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYzNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODQiIGxvY2F0aW9uPSJzYW1wbGUyODQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzkiIGxvY2F0aW9uPSIuL3NhbXBsZTk3OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0OCIgbG9jYXRpb249Ii5cc2FtcGxlNzQ4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Mzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYzNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4N2UxYzE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYzNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTMiIGxvY2F0aW9uPSJzYW1wbGU1MTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTMiIGxvY2F0aW9uPSIuL3NhbXBsZTk1My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MCIgbG9jYXRpb249Ii5cc2FtcGxlOTQwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Mzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYzOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjgyYzFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYzOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjYiIGxvY2F0aW9uPSJzYW1wbGUzNjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDciIGxvY2F0aW9uPSIuL3NhbXBsZTEwNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwOSIgbG9jYXRpb249Ii5cc2FtcGxlODA5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Mzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYzOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDZjNTdjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYzOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTYiIGxvY2F0aW9uPSJzYW1wbGU2OTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDYiIGxvY2F0aW9uPSIuL3NhbXBsZTMwNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5IiBsb2NhdGlvbj0iLlxzYW1wbGU0OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkOWI4YTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MiIgbG9jYXRpb249InNhbXBsZTQ5Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MiIgbG9jYXRpb249Ii4vc2FtcGxlNTkyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU4IiBsb2NhdGlvbj0iLlxzYW1wbGU2NTgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjQwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2FmNjIwNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM0IiBsb2NhdGlvbj0ic2FtcGxlODM0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ5IiBsb2NhdGlvbj0iLi9zYW1wbGU3NDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzciIGxvY2F0aW9uPSIuXHNhbXBsZTEzNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjQxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTI4ZTViZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMxIiBsb2NhdGlvbj0ic2FtcGxlMTMxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMwIiBsb2NhdGlvbj0iLi9zYW1wbGU3MzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NCIgbG9jYXRpb249Ii5cc2FtcGxlNDQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjQyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3YjA0ZmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjQyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0OCIgbG9jYXRpb249InNhbXBsZTc0OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNCIgbG9jYXRpb249Ii4vc2FtcGxlODM0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYiIGxvY2F0aW9uPSIuXHNhbXBsZTI2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY0My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTNlMWIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY0My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjkiIGxvY2F0aW9uPSJzYW1wbGU4Njkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjYiIGxvY2F0aW9uPSIuL3NhbXBsZTcyNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MyIgbG9jYXRpb249Ii5cc2FtcGxlNzczLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY0NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzQ5OTA1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY0NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjciIGxvY2F0aW9uPSJzYW1wbGU2Njcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzEiIGxvY2F0aW9uPSIuL3NhbXBsZTQ3MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4OSIgbG9jYXRpb249Ii5cc2FtcGxlMTg5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY0NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTE3MTc1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY0NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTciIGxvY2F0aW9uPSJzYW1wbGUxNTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTYiIGxvY2F0aW9uPSIuL3NhbXBsZTY1Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4OSIgbG9jYXRpb249Ii5cc2FtcGxlNTg5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY0Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOWYyYzY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY0Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjgiIGxvY2F0aW9uPSJzYW1wbGU4Mjgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTkiIGxvY2F0aW9uPSIuL3NhbXBsZTExOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMiIgbG9jYXRpb249Ii5cc2FtcGxlOTAyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY0Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDA2ZDY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY0Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjUiIGxvY2F0aW9uPSJzYW1wbGUxNjUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjYiIGxvY2F0aW9uPSIuL3NhbXBsZTEyNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MCIgbG9jYXRpb249Ii5cc2FtcGxlNDQwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY0OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NWMzNGNjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY0OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTYiIGxvY2F0aW9uPSJzYW1wbGU4OTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTEiIGxvY2F0aW9uPSIuL3NhbXBsZTI1MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5OSIgbG9jYXRpb249Ii5cc2FtcGxlODk5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY0OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2N2EyYjY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY0OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NCIgbG9jYXRpb249InNhbXBsZTQ0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI0IiBsb2NhdGlvbj0iLi9zYW1wbGU1MjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTAiIGxvY2F0aW9uPSIuXHNhbXBsZTQxMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2ZTkzMzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MCIgbG9jYXRpb249InNhbXBsZTM0MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNiIgbG9jYXRpb249Ii4vc2FtcGxlNjE2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYyIiBsb2NhdGlvbj0iLlxzYW1wbGU0NjIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjUwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJlMWEyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIxIiBsb2NhdGlvbj0ic2FtcGxlOTIxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYiIGxvY2F0aW9uPSIuL3NhbXBsZTI2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTczIiBsb2NhdGlvbj0iLlxzYW1wbGU5NzMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY1MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlNDQ2ODEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNyIgbG9jYXRpb249InNhbXBsZTMxNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzOCIgbG9jYXRpb249Ii4vc2FtcGxlMTM4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM4IiBsb2NhdGlvbj0iLlxzYW1wbGUzMzgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY1Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjUyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4YTM1M2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMiIgbG9jYXRpb249InNhbXBsZTkxMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNCIgbG9jYXRpb249Ii4vc2FtcGxlMTI0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDciIGxvY2F0aW9uPSIuXHNhbXBsZTQ3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY1My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNGNkYzljLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY1My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTIiIGxvY2F0aW9uPSJzYW1wbGU0NTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTUiIGxvY2F0aW9uPSIuL3NhbXBsZTE5NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NyIgbG9jYXRpb249Ii5cc2FtcGxlNzQ3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY1NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzY1M2EzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY1NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNyIgbG9jYXRpb249InNhbXBsZTE3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI4IiBsb2NhdGlvbj0iLi9zYW1wbGU2Mjgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjciIGxvY2F0aW9uPSIuXHNhbXBsZTgyNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjU1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWZjZmM2NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgxIiBsb2NhdGlvbj0ic2FtcGxlODgxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkxIiBsb2NhdGlvbj0iLi9zYW1wbGUxOTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDEiIGxvY2F0aW9uPSIuXHNhbXBsZTQ0MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjU2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJmMTlkNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc3IiBsb2NhdGlvbj0ic2FtcGxlMTc3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU0IiBsb2NhdGlvbj0iLi9zYW1wbGUyNTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjEiIGxvY2F0aW9uPSIuXHNhbXBsZTE2MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNThjYmExZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY4IiBsb2NhdGlvbj0ic2FtcGxlNjY4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTciIGxvY2F0aW9uPSIuL3NhbXBsZTU3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU3IiBsb2NhdGlvbj0iLlxzYW1wbGU3NTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY1OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2YjA0Y2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwOCIgbG9jYXRpb249InNhbXBsZTQwOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNiIgbG9jYXRpb249Ii4vc2FtcGxlOTI2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkwIiBsb2NhdGlvbj0iLlxzYW1wbGU3OTAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY1OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkMGVkMDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MSIgbG9jYXRpb249InNhbXBsZTQ0MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNiIgbG9jYXRpb249Ii4vc2FtcGxlMjE2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU0IiBsb2NhdGlvbj0iLlxzYW1wbGUzNTQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDBjYzU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTMiIGxvY2F0aW9uPSJzYW1wbGUxNTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDYiIGxvY2F0aW9uPSIuL3NhbXBsZTQ0Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNSIgbG9jYXRpb249Ii5cc2FtcGxlNDM1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY2MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjYwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzYzFiY2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjYwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NyIgbG9jYXRpb249InNhbXBsZTE1Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NCIgbG9jYXRpb249Ii4vc2FtcGxlODg0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM1IiBsb2NhdGlvbj0iLlxzYW1wbGU0MzUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY2MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjYxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1YjFjODcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjYxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMCIgbG9jYXRpb249InNhbXBsZTgxMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4OCIgbG9jYXRpb249Ii4vc2FtcGxlNTg4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU4IiBsb2NhdGlvbj0iLlxzYW1wbGU0NTgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY2Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjYyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmMTJhMWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjYyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NCIgbG9jYXRpb249InNhbXBsZTE1NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNiIgbG9jYXRpb249Ii4vc2FtcGxlMTI2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTExIiBsb2NhdGlvbj0iLlxzYW1wbGU1MTEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY2My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjYzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzYmRjY2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjYzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4OSIgbG9jYXRpb249InNhbXBsZTU4OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1OSIgbG9jYXRpb249Ii4vc2FtcGxlNDU5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc5IiBsb2NhdGlvbj0iLlxzYW1wbGU0Nzkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY2NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjY0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3Nzc5ZDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjY0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNSIgbG9jYXRpb249InNhbXBsZTUzNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzOCIgbG9jYXRpb249Ii4vc2FtcGxlOTM4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIyIiBsb2NhdGlvbj0iLlxzYW1wbGUzMjIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY2NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjY1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyODM2NmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjY1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MyIgbG9jYXRpb249InNhbXBsZTI3My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1IiBsb2NhdGlvbj0iLi9zYW1wbGU1NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwOCIgbG9jYXRpb249Ii5cc2FtcGxlNDA4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY2Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzMwODU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY2Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzciIGxvY2F0aW9uPSJzYW1wbGU0Nzcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDciIGxvY2F0aW9uPSIuL3NhbXBsZTI0Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwOCIgbG9jYXRpb249Ii5cc2FtcGxlMTA4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Njcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY2Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTg5ZmEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY2Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NSIgbG9jYXRpb249InNhbXBsZTY1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgxIiBsb2NhdGlvbj0iLi9zYW1wbGUyODEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTYiIGxvY2F0aW9uPSIuXHNhbXBsZTg1Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjY4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Njgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWRhZGM2My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Njgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg4IiBsb2NhdGlvbj0ic2FtcGxlMjg4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMyIiBsb2NhdGlvbj0iLi9zYW1wbGU4MzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODYiIGxvY2F0aW9uPSIuXHNhbXBsZTM4Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjY5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Njkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDY3MWE0My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Njkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU1IiBsb2NhdGlvbj0ic2FtcGxlMjU1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI0IiBsb2NhdGlvbj0iLi9zYW1wbGU1MjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyIiBsb2NhdGlvbj0iLlxzYW1wbGUyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWU2Y2ZkYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc2IiBsb2NhdGlvbj0ic2FtcGxlMzc2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgwIiBsb2NhdGlvbj0iLi9zYW1wbGU3ODAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTEiIGxvY2F0aW9uPSIuXHNhbXBsZTU5MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY3MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDExYTIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY3MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTUiIGxvY2F0aW9uPSJzYW1wbGU3MTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4IiBsb2NhdGlvbj0iLi9zYW1wbGU4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMyIiBsb2NhdGlvbj0iLlxzYW1wbGUyMzIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjcwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY3MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjcxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwMzYwNGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjcxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjcxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjcxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NiIgbG9jYXRpb249InNhbXBsZTk0Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNCIgbG9jYXRpb249Ii4vc2FtcGxlNzE0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA2IiBsb2NhdGlvbj0iLlxzYW1wbGU4MDYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjcxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY3Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjcyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3ZTY1OTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjcyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjcyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyOCIgbG9jYXRpb249InNhbXBsZTkyOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NSIgbG9jYXRpb249Ii4vc2FtcGxlNDQ1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM1IiBsb2NhdGlvbj0iLlxzYW1wbGU5MzUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjcyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY3My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjczLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwNWQyNjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjczLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjczIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjczIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyIiBsb2NhdGlvbj0ic2FtcGxlNDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzIiIGxvY2F0aW9uPSIuL3NhbXBsZTM3Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NCIgbG9jYXRpb249Ii5cc2FtcGxlNjQ0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY3NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTU3ZjU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY3NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjEiIGxvY2F0aW9uPSJzYW1wbGU3MjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjIiIGxvY2F0aW9uPSIuL3NhbXBsZTY2Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4OCIgbG9jYXRpb249Ii5cc2FtcGxlNzg4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY3NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMWIxMWMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY3NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTEiIGxvY2F0aW9uPSJzYW1wbGU1OTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjkiIGxvY2F0aW9uPSIuL3NhbXBsZTYyOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyIiBsb2NhdGlvbj0iLlxzYW1wbGUzMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjc2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg1NzIxZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgiIGxvY2F0aW9uPSJzYW1wbGU3OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYiIGxvY2F0aW9uPSIuL3NhbXBsZTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTIiIGxvY2F0aW9uPSIuXHNhbXBsZTg5Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjc3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Nzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGZiNjM5OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Nzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMwIiBsb2NhdGlvbj0ic2FtcGxlMTMwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkwIiBsb2NhdGlvbj0iLi9zYW1wbGUxOTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODciIGxvY2F0aW9uPSIuXHNhbXBsZTc4Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjc4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Nzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDI2MjkyMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Nzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk1IiBsb2NhdGlvbj0ic2FtcGxlMjk1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUwIiBsb2NhdGlvbj0iLi9zYW1wbGU5NTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzIiIGxvY2F0aW9uPSIuXHNhbXBsZTg3Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjc5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Nzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM1YjVlMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Nzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYzIiBsb2NhdGlvbj0ic2FtcGxlOTYzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAyIiBsb2NhdGlvbj0iLi9zYW1wbGU0MDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDIiIGxvY2F0aW9uPSIuXHNhbXBsZTcwMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxZGEwMzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNiIgbG9jYXRpb249InNhbXBsZTMzNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNyIgbG9jYXRpb249Ii4vc2FtcGxlNDI3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMxIiBsb2NhdGlvbj0iLlxzYW1wbGU3MzEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjgwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2ODAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2JiNTc1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2ODAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA1IiBsb2NhdGlvbj0ic2FtcGxlNDA1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIiIGxvY2F0aW9uPSIuL3NhbXBsZTUyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAiIGxvY2F0aW9uPSIuXHNhbXBsZTkwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2ODEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY4MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGI5ZWYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY4MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjEiIGxvY2F0aW9uPSJzYW1wbGUzNjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTIiIGxvY2F0aW9uPSIuL3NhbXBsZTc1Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNSIgbG9jYXRpb249Ii5cc2FtcGxlNTA1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2ODIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY4Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MGE1YTI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTIiIGxvY2F0aW9uPSJzYW1wbGU2OTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjIiIGxvY2F0aW9uPSIuL3NhbXBsZTM2Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyOCIgbG9jYXRpb249Ii5cc2FtcGxlNjI4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2ODMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY4My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmYxN2Y4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY4My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjgiIGxvY2F0aW9uPSJzYW1wbGU1Mjgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzIiIGxvY2F0aW9uPSIuL3NhbXBsZTk3Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyNyIgbG9jYXRpb249Ii5cc2FtcGxlNjI3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2ODQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY4NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMWEzZDgxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY4NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODQiIGxvY2F0aW9uPSJzYW1wbGU0ODQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjQiIGxvY2F0aW9uPSIuL3NhbXBsZTkyNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNyIgbG9jYXRpb249Ii5cc2FtcGxlNTI3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2ODUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY4NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNWE0ZTZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY4NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDciIGxvY2F0aW9uPSJzYW1wbGUyMDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjYiIGxvY2F0aW9uPSIuL3NhbXBsZTEyNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NCIgbG9jYXRpb249Ii5cc2FtcGxlNjU0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2ODYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY4Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzQ0ODA4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY4Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzMiIGxvY2F0aW9uPSJzYW1wbGUxMzMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzYiIGxvY2F0aW9uPSIuL3NhbXBsZTYzNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNyIgbG9jYXRpb249Ii5cc2FtcGxlMjM3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2ODcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY4Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTMyNjdmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY4Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjYiIGxvY2F0aW9uPSJzYW1wbGU1NjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTQiIGxvY2F0aW9uPSIuL3NhbXBsZTYxNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMSIgbG9jYXRpb249Ii5cc2FtcGxlNjMxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2ODgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY4OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDJmNDNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY4OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTMiIGxvY2F0aW9uPSJzYW1wbGU5NTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjQiIGxvY2F0aW9uPSIuL3NhbXBsZTIyNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3NiIgbG9jYXRpb249Ii5cc2FtcGxlOTc2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2ODkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY4OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MGM2NzhhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY4OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTgiIGxvY2F0aW9uPSJzYW1wbGU4MTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTciIGxvY2F0aW9uPSIuL3NhbXBsZTU1Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MiIgbG9jYXRpb249Ii5cc2FtcGxlNDQyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzM0Y2VlZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAxIiBsb2NhdGlvbj0ic2FtcGxlMzAxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDExIiBsb2NhdGlvbj0iLi9zYW1wbGU0MTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjAiIGxvY2F0aW9uPSIuXHNhbXBsZTUyMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjA5MTNjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MiIgbG9jYXRpb249InNhbXBsZTgyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYwIiBsb2NhdGlvbj0iLi9zYW1wbGU1NjAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDUiIGxvY2F0aW9uPSIuXHNhbXBsZTQ0NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjkxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGRiODA2OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgyIiBsb2NhdGlvbj0ic2FtcGxlMjgyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg4IiBsb2NhdGlvbj0iLi9zYW1wbGUyODgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTAiIGxvY2F0aW9uPSIuXHNhbXBsZTQ1MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjkyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRiYWMwNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE0IiBsb2NhdGlvbj0ic2FtcGxlMTE0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgiIGxvY2F0aW9uPSIuL3NhbXBsZTY4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMyIiBsb2NhdGlvbj0iLlxzYW1wbGU1MzIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjkzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlOWY1Y2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjkzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNCIgbG9jYXRpb249InNhbXBsZTMxNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0IiBsb2NhdGlvbj0iLi9zYW1wbGU0NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgiIGxvY2F0aW9uPSIuXHNhbXBsZTgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjk0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiMDczY2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjk0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNSIgbG9jYXRpb249InNhbXBsZTkyNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MiIgbG9jYXRpb249Ii4vc2FtcGxlNTcyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ3IiBsb2NhdGlvbj0iLlxzYW1wbGU5NDcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjk1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkMTFkNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjk1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNCIgbG9jYXRpb249InNhbXBsZTYzNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxOSIgbG9jYXRpb249Ii4vc2FtcGxlMzE5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgwIiBsb2NhdGlvbj0iLlxzYW1wbGU1ODAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjk2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3NThiYTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjk2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NyIgbG9jYXRpb249InNhbXBsZTI5Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MSIgbG9jYXRpb249Ii4vc2FtcGxlNDUxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg3IiBsb2NhdGlvbj0iLlxzYW1wbGU4ODcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjk3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1MjU5NzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3OCIgbG9jYXRpb249InNhbXBsZTU3OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3OSIgbG9jYXRpb249Ii4vc2FtcGxlMjc5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY1IiBsb2NhdGlvbj0iLlxzYW1wbGUxNjUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjk4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1ZjVkNmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjk4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNCIgbG9jYXRpb249InNhbXBsZTQyNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1OCIgbG9jYXRpb249Ii4vc2FtcGxlMjU4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzcxIiBsb2NhdGlvbj0iLlxzYW1wbGUzNzEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjk5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzNmIxMGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjk5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MiIgbG9jYXRpb249InNhbXBsZTI5Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1OSIgbG9jYXRpb249Ii4vc2FtcGxlNTU5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ0IiBsb2NhdGlvbj0iLlxzYW1wbGU1NDQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAxOGRkYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg3IiBsb2NhdGlvbj0ic2FtcGxlODg3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIzIiBsb2NhdGlvbj0iLi9zYW1wbGUzMjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTkiIGxvY2F0aW9uPSIuXHNhbXBsZTQ5OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTYyN2U4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDciIGxvY2F0aW9uPSJzYW1wbGU1NDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODIiIGxvY2F0aW9uPSIuL3NhbXBsZTU4Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3OCIgbG9jYXRpb249Ii5cc2FtcGxlNjc4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcwMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzAwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmMmNjNTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzAwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NyIgbG9jYXRpb249InNhbXBsZTQ2Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NiIgbG9jYXRpb249Ii4vc2FtcGxlMjU2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgzIiBsb2NhdGlvbj0iLlxzYW1wbGUxODMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcwMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzAxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5ZjIwOTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzAxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MyIgbG9jYXRpb249InNhbXBsZTU5My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMSIgbG9jYXRpb249Ii4vc2FtcGxlMTIxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY3IiBsb2NhdGlvbj0iLlxzYW1wbGU1Njcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcwMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzAyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkNTc1NjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzAyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3OCIgbG9jYXRpb249InNhbXBsZTE3OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NSIgbG9jYXRpb249Ii4vc2FtcGxlMjg1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAyIiBsb2NhdGlvbj0iLlxzYW1wbGU0MDIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcwMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzAzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzZTQ1MzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzAzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NSIgbG9jYXRpb249InNhbXBsZTg1NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyOSIgbG9jYXRpb249Ii4vc2FtcGxlODI5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ1IiBsb2NhdGlvbj0iLlxzYW1wbGU5NDUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcwNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzA0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjMGRiZTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzA0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwIiBsb2NhdGlvbj0ic2FtcGxlNjAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzciIGxvY2F0aW9uPSIuL3NhbXBsZTM3Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MSIgbG9jYXRpb249Ii5cc2FtcGxlMzUxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcwNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDA3ZWU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcwNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDEiIGxvY2F0aW9uPSJzYW1wbGU0NDEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzIiIGxvY2F0aW9uPSIuL3NhbXBsZTUzMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyOSIgbG9jYXRpb249Ii5cc2FtcGxlOTI5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcwNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjI5YWJkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcwNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDIiIGxvY2F0aW9uPSJzYW1wbGUzMDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTgiIGxvY2F0aW9uPSIuL3NhbXBsZTYxOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MiIgbG9jYXRpb249Ii5cc2FtcGxlODgyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcwNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YWUxMjFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcwNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzQiIGxvY2F0aW9uPSJzYW1wbGU2NzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzQiIGxvY2F0aW9uPSIuL3NhbXBsZTk3NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MCIgbG9jYXRpb249Ii5cc2FtcGxlOTQwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcwOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOGYyM2MzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcwOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDkiIGxvY2F0aW9uPSJzYW1wbGU2NDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTUiIGxvY2F0aW9uPSIuL3NhbXBsZTYxNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NiIgbG9jYXRpb249Ii5cc2FtcGxlNzY2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcwOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzM1Mjg4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcwOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzUiIGxvY2F0aW9uPSJzYW1wbGUxNzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzkiIGxvY2F0aW9uPSIuL3NhbXBsZTY3OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNSIgbG9jYXRpb249Ii5cc2FtcGxlNjM1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjVmZDJlMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY1IiBsb2NhdGlvbj0ic2FtcGxlMzY1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM0IiBsb2NhdGlvbj0iLi9zYW1wbGUzMzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDEiIGxvY2F0aW9uPSIuXHNhbXBsZTUwMS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcxMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjQ0YTI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcxMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjAiIGxvY2F0aW9uPSJzYW1wbGUxNjAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDkiIGxvY2F0aW9uPSIuL3NhbXBsZTcwOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NSIgbG9jYXRpb249Ii5cc2FtcGxlNzY1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcxMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTI5N2IwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcxMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODIiIGxvY2F0aW9uPSJzYW1wbGUyODIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDUiIGxvY2F0aW9uPSIuL3NhbXBsZTgwNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNyIgbG9jYXRpb249Ii5cc2FtcGxlMTE3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcxMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMGZiMzg5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcxMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTkiIGxvY2F0aW9uPSJzYW1wbGU0NTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODkiIGxvY2F0aW9uPSIuL3NhbXBsZTY4OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NyIgbG9jYXRpb249Ii5cc2FtcGxlMzQ3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcxMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODNhNTNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcxMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjQiIGxvY2F0aW9uPSJzYW1wbGU4NjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTYiIGxvY2F0aW9uPSIuL3NhbXBsZTU5Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxMiIgbG9jYXRpb249Ii5cc2FtcGxlNzEyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcxNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODQ3ZjMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcxNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTMiIGxvY2F0aW9uPSJzYW1wbGU2NTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzIiIGxvY2F0aW9uPSIuL3NhbXBsZTk3Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMSIgbG9jYXRpb249Ii5cc2FtcGxlMzIxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcxNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NmU5ZDcxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcxNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTIiIGxvY2F0aW9uPSJzYW1wbGU3NTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzciIGxvY2F0aW9uPSIuL3NhbXBsZTY3Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMiIgbG9jYXRpb249Ii5cc2FtcGxlNTAyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcxNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTYzMjJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcxNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTYiIGxvY2F0aW9uPSJzYW1wbGUxOTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzAiIGxvY2F0aW9uPSIuL3NhbXBsZTQzMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NCIgbG9jYXRpb249Ii5cc2FtcGxlMTQ0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcxNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTExYTFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcxNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODgiIGxvY2F0aW9uPSJzYW1wbGUzODgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzUiIGxvY2F0aW9uPSIuL3NhbXBsZTQzNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzIiBsb2NhdGlvbj0iLlxzYW1wbGU2My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzE4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTM5Yjg3NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU4IiBsb2NhdGlvbj0ic2FtcGxlMTU4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYxIiBsb2NhdGlvbj0iLi9zYW1wbGU1NjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTkiIGxvY2F0aW9uPSIuXHNhbXBsZTU5OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzE5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODAxZGZkOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY3IiBsb2NhdGlvbj0ic2FtcGxlNzY3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ4IiBsb2NhdGlvbj0iLi9zYW1wbGU3NDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODkiIGxvY2F0aW9uPSIuXHNhbXBsZTI4OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2MTRhYTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2OSIgbG9jYXRpb249InNhbXBsZTM2OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNSIgbG9jYXRpb249Ii4vc2FtcGxlODM1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkzIiBsb2NhdGlvbj0iLlxzYW1wbGU1OTMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzIwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWMyZDQ5NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI1IiBsb2NhdGlvbj0ic2FtcGxlNDI1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM4IiBsb2NhdGlvbj0iLi9zYW1wbGU3Mzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTIiIGxvY2F0aW9uPSIuXHNhbXBsZTExMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzIxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjEyNGY3Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkyIiBsb2NhdGlvbj0ic2FtcGxlNjkyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY4IiBsb2NhdGlvbj0iLi9zYW1wbGUzNjgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzEiIGxvY2F0aW9uPSIuXHNhbXBsZTU3MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzIyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDE0YmE0Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkiIGxvY2F0aW9uPSJzYW1wbGU0OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MiIgbG9jYXRpb249Ii4vc2FtcGxlNDcyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTciIGxvY2F0aW9uPSIuXHNhbXBsZTU3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTBiMWQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyIiBsb2NhdGlvbj0ic2FtcGxlMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NiIgbG9jYXRpb249Ii4vc2FtcGxlNjk2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM4IiBsb2NhdGlvbj0iLlxzYW1wbGU2Mzgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzI0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxZDhiYmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzI0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MyIgbG9jYXRpb249InNhbXBsZTE2My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MCIgbG9jYXRpb249Ii4vc2FtcGxlNDQwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE0IiBsb2NhdGlvbj0iLlxzYW1wbGU0MTQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzI1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmODQ2YWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzI1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NSIgbG9jYXRpb249InNhbXBsZTM3NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwOSIgbG9jYXRpb249Ii4vc2FtcGxlOTA5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg3IiBsb2NhdGlvbj0iLlxzYW1wbGUyODcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzI2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0MTM2MWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzI2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNiIgbG9jYXRpb249InNhbXBsZTcxNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MCIgbG9jYXRpb249Ii4vc2FtcGxlMjQwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc5IiBsb2NhdGlvbj0iLlxzYW1wbGU2Nzkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzI3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiODgzZGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzI3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNSIgbG9jYXRpb249InNhbXBsZTkyNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NSIgbG9jYXRpb249Ii4vc2FtcGxlODY1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk2IiBsb2NhdGlvbj0iLlxzYW1wbGU4OTYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzI4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyYjBhMzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzI4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNiIgbG9jYXRpb249InNhbXBsZTgyNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzOSIgbG9jYXRpb249Ii4vc2FtcGxlNjM5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIwIiBsb2NhdGlvbj0iLlxzYW1wbGUyMjAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzI5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0Yjc3MGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzI5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NiIgbG9jYXRpb249InNhbXBsZTk4Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MSIgbG9jYXRpb249Ii4vc2FtcGxlNzgxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSIgbG9jYXRpb249Ii5cc2FtcGxlMS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTczLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiZmI2ZDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5IiBsb2NhdGlvbj0ic2FtcGxlODkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTQiIGxvY2F0aW9uPSIuL3NhbXBsZTg1NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNCIgbG9jYXRpb249Ii5cc2FtcGxlNDA0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTczMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzMwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1ZGNiZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzMwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NiIgbG9jYXRpb249InNhbXBsZTY0Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4OSIgbG9jYXRpb249Ii4vc2FtcGxlOTg5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg1IiBsb2NhdGlvbj0iLlxzYW1wbGUyODUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTczMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzMxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0NjczNzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzMxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MSIgbG9jYXRpb249InNhbXBsZTY5MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MiIgbG9jYXRpb249Ii4vc2FtcGxlMjgyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE3IiBsb2NhdGlvbj0iLlxzYW1wbGUyMTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTczMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzMyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzY2ZlYjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzMyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3IiBsb2NhdGlvbj0ic2FtcGxlNDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjgiIGxvY2F0aW9uPSIuL3NhbXBsZTkyOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNCIgbG9jYXRpb249Ii5cc2FtcGxlNTI0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTczMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NmE5NmQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTczMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzMiIGxvY2F0aW9uPSJzYW1wbGUxNzMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjUiIGxvY2F0aW9uPSIuL3NhbXBsZTEyNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwOCIgbG9jYXRpb249Ii5cc2FtcGxlNDA4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTczNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjU0NGM0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTczNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODQiIGxvY2F0aW9uPSJzYW1wbGU2ODQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTIiIGxvY2F0aW9uPSIuL3NhbXBsZTI5Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0OCIgbG9jYXRpb249Ii5cc2FtcGxlNzQ4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTczNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjI2MzVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTczNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OSIgbG9jYXRpb249InNhbXBsZTY5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE0IiBsb2NhdGlvbj0iLi9zYW1wbGU0MTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDEiIGxvY2F0aW9uPSIuXHNhbXBsZTkwMS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzM2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE3NjY3My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3MzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk4IiBsb2NhdGlvbj0ic2FtcGxlMzk4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc1IiBsb2NhdGlvbj0iLi9zYW1wbGU0NzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTEiIGxvY2F0aW9uPSIuXHNhbXBsZTM1MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzM3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Mzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWExY2UyZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Mzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY1IiBsb2NhdGlvbj0ic2FtcGxlODY1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc2IiBsb2NhdGlvbj0iLi9zYW1wbGU1NzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDUiIGxvY2F0aW9uPSIuXHNhbXBsZTE0NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzM4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Mzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQ5MTY4OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Mzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAxIiBsb2NhdGlvbj0ic2FtcGxlOTAxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYwIiBsb2NhdGlvbj0iLi9zYW1wbGU1NjAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDYiIGxvY2F0aW9uPSIuXHNhbXBsZTEwNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzM5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Mzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDFmYWYzYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Mzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU2IiBsb2NhdGlvbj0ic2FtcGxlMTU2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYzIiBsb2NhdGlvbj0iLi9zYW1wbGU3NjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTIiIGxvY2F0aW9uPSIuXHNhbXBsZTY5Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyNGNlMmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NiIgbG9jYXRpb249InNhbXBsZTI4Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNCIgbG9jYXRpb249Ii4vc2FtcGxlNDM0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMwIiBsb2NhdGlvbj0iLlxzYW1wbGU5MzAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzQwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWEyNmI5My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIyIiBsb2NhdGlvbj0ic2FtcGxlNDIyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgiIGxvY2F0aW9uPSIuL3NhbXBsZTU4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA4IiBsb2NhdGlvbj0iLlxzYW1wbGU4MDgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzQxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczMDYxZTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzQxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NSIgbG9jYXRpb249InNhbXBsZTU3NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMyIgbG9jYXRpb249Ii4vc2FtcGxlMTAzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQzIiBsb2NhdGlvbj0iLlxzYW1wbGU2NDMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzQyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiY2E5NDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzQyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MyIgbG9jYXRpb249InNhbXBsZTI0My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMSIgbG9jYXRpb249Ii4vc2FtcGxlOTIxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE1IiBsb2NhdGlvbj0iLlxzYW1wbGU0MTUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzQzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhYjRkMDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzQzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMCIgbG9jYXRpb249InNhbXBsZTEwMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NSIgbG9jYXRpb249Ii4vc2FtcGxlMzY1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkzIiBsb2NhdGlvbj0iLlxzYW1wbGU5OTMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzQ0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhMWRmOGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzQ0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NSIgbG9jYXRpb249InNhbXBsZTc2NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNiIgbG9jYXRpb249Ii4vc2FtcGxlMzI2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUxIiBsb2NhdGlvbj0iLlxzYW1wbGU4NTEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzQ1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyZjc4NWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzQ1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2OCIgbG9jYXRpb249InNhbXBsZTg2OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NiIgbG9jYXRpb249Ii4vc2FtcGxlOTQ2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQzIiBsb2NhdGlvbj0iLlxzYW1wbGUyNDMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzQ2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkYTI4NzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzQ2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNyIgbG9jYXRpb249InNhbXBsZTMyNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNiIgbG9jYXRpb249Ii4vc2FtcGxlMjM2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk0IiBsb2NhdGlvbj0iLlxzYW1wbGU2OTQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzQ3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5MTFhNDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzQ3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyIiBsb2NhdGlvbj0ic2FtcGxlNzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODYiIGxvY2F0aW9uPSIuL3NhbXBsZTE4Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4IiBsb2NhdGlvbj0iLlxzYW1wbGU0OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzQ4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGYyM2UyNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMyIiBsb2NhdGlvbj0ic2FtcGxlMzMyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU0IiBsb2NhdGlvbj0iLi9zYW1wbGUyNTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODgiIGxvY2F0aW9uPSIuXHNhbXBsZTY4OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzQ5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzZkZTJhZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY1IiBsb2NhdGlvbj0ic2FtcGxlNDY1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc5IiBsb2NhdGlvbj0iLi9zYW1wbGUyNzkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OSIgbG9jYXRpb249Ii5cc2FtcGxlNTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODcwZGZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODYiIGxvY2F0aW9uPSJzYW1wbGU4ODYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTgiIGxvY2F0aW9uPSIuL3NhbXBsZTg1OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2OSIgbG9jYXRpb249Ii5cc2FtcGxlOTY5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc1MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3YjEzNDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NSIgbG9jYXRpb249InNhbXBsZTY1NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0IiBsb2NhdGlvbj0iLi9zYW1wbGU0NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMSIgbG9jYXRpb249Ii5cc2FtcGxlNjMxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc1MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjQ1MDI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc1MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTgiIGxvY2F0aW9uPSJzYW1wbGU1MTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzMiIGxvY2F0aW9uPSIuL3NhbXBsZTM3My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMyIgbG9jYXRpb249Ii5cc2FtcGxlODAzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc1Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MmE4MTIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc1Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTkiIGxvY2F0aW9uPSJzYW1wbGU2OTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDciIGxvY2F0aW9uPSIuL3NhbXBsZTg0Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1OCIgbG9jYXRpb249Ii5cc2FtcGxlOTU4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc1My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZWZmYmMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc1My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzkiIGxvY2F0aW9uPSJzYW1wbGU2Mzkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTIiIGxvY2F0aW9uPSIuL3NhbXBsZTg5Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MiIgbG9jYXRpb249Ii5cc2FtcGxlODUyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc1NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTY4ZmVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc1NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMSIgbG9jYXRpb249InNhbXBsZTMxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI0IiBsb2NhdGlvbj0iLi9zYW1wbGU0MjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjQiIGxvY2F0aW9uPSIuXHNhbXBsZTU2NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzU1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGFlMTM1Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY4IiBsb2NhdGlvbj0ic2FtcGxlOTY4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM4IiBsb2NhdGlvbj0iLi9zYW1wbGU5Mzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDAiIGxvY2F0aW9uPSIuXHNhbXBsZTU0MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzU2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzk0YWIwMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM0IiBsb2NhdGlvbj0ic2FtcGxlMjM0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEiIGxvY2F0aW9uPSIuL3NhbXBsZTYxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIyIiBsb2NhdGlvbj0iLlxzYW1wbGU0MjIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc1Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmZjRkYjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNiIgbG9jYXRpb249InNhbXBsZTcyNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMyIgbG9jYXRpb249Ii4vc2FtcGxlMjAzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUiIGxvY2F0aW9uPSIuXHNhbXBsZTc1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc1OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDc4ZDlmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc1OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODIiIGxvY2F0aW9uPSJzYW1wbGU0ODIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjYiIGxvY2F0aW9uPSIuL3NhbXBsZTMyNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1IiBsb2NhdGlvbj0iLlxzYW1wbGU1NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzU5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGRlOGFjNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ1IiBsb2NhdGlvbj0ic2FtcGxlOTQ1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkwIiBsb2NhdGlvbj0iLi9zYW1wbGU3OTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzkiIGxvY2F0aW9uPSIuXHNhbXBsZTQzOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwNTEyZWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4IiBsb2NhdGlvbj0ic2FtcGxlODgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTciIGxvY2F0aW9uPSIuL3NhbXBsZTg5Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2OSIgbG9jYXRpb249Ii5cc2FtcGxlMzY5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzYwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkOGVlMWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzYwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0OSIgbG9jYXRpb249InNhbXBsZTU0OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MCIgbG9jYXRpb249Ii4vc2FtcGxlODgwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU3IiBsb2NhdGlvbj0iLlxzYW1wbGU3NTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzYxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllYWU2OWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzYxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4OSIgbG9jYXRpb249InNhbXBsZTk4OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NSIgbG9jYXRpb249Ii4vc2FtcGxlODc1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIwIiBsb2NhdGlvbj0iLlxzYW1wbGU5MjAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzYyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4Zjg1YzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzYyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3OSIgbG9jYXRpb249InNhbXBsZTM3OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNyIgbG9jYXRpb249Ii4vc2FtcGxlNzE3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ2IiBsb2NhdGlvbj0iLlxzYW1wbGU4NDYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzYzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5NjI1YjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzYzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MSIgbG9jYXRpb249InNhbXBsZTk2MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NCIgbG9jYXRpb249Ii4vc2FtcGxlMjY0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM5IiBsb2NhdGlvbj0iLlxzYW1wbGUyMzkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzY0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5NjQ5MTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzY0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMiIgbG9jYXRpb249InNhbXBsZTcyMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5OSIgbG9jYXRpb249Ii4vc2FtcGxlMjk5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM0IiBsb2NhdGlvbj0iLlxzYW1wbGUxMzQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzY1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3ZTJjZDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzY1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxOCIgbG9jYXRpb249InNhbXBsZTcxOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NCIgbG9jYXRpb249Ii4vc2FtcGxlNzc0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIxIiBsb2NhdGlvbj0iLlxzYW1wbGUzMjEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzY2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxMTA1YjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzY2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MiIgbG9jYXRpb249InNhbXBsZTg1Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4OCIgbG9jYXRpb249Ii4vc2FtcGxlNjg4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI4IiBsb2NhdGlvbj0iLlxzYW1wbGU5Mjgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzY3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzNzQyMGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzY3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxMiIgbG9jYXRpb249InNhbXBsZTcxMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMyIgbG9jYXRpb249Ii4vc2FtcGxlOTAzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIwIiBsb2NhdGlvbj0iLlxzYW1wbGU3MjAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzY4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyMzdkZTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzY4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMSIgbG9jYXRpb249InNhbXBsZTYwMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2IiBsb2NhdGlvbj0iLi9zYW1wbGU0Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NiIgbG9jYXRpb249Ii5cc2FtcGxlMzQ2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Njkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDVkN2UwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc2OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjEiIGxvY2F0aW9uPSJzYW1wbGU3NjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjQiIGxvY2F0aW9uPSIuL3NhbXBsZTEyNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MCIgbG9jYXRpb249Ii5cc2FtcGxlMTkwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzJjZTViMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEyIiBsb2NhdGlvbj0ic2FtcGxlNjEyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ0IiBsb2NhdGlvbj0iLi9zYW1wbGU5NDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODgiIGxvY2F0aW9uPSIuXHNhbXBsZTg4OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc3MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWRlNTU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc3MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NiIgbG9jYXRpb249InNhbXBsZTY2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc3IiBsb2NhdGlvbj0iLi9zYW1wbGU2Nzcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjQiIGxvY2F0aW9uPSIuXHNhbXBsZTIyNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzcxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJmMTY3Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEyIiBsb2NhdGlvbj0ic2FtcGxlOTEyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSIgbG9jYXRpb249Ii4vc2FtcGxlMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2OCIgbG9jYXRpb249Ii5cc2FtcGxlNjY4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc3Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZWVlYWI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc3Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjMiIGxvY2F0aW9uPSJzYW1wbGU0NjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OCIgbG9jYXRpb249Ii4vc2FtcGxlNjgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOSIgbG9jYXRpb249Ii5cc2FtcGxlMjkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzcyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc3My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzczLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0MjE1NmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzczLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzczIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzczIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MiIgbG9jYXRpb249InNhbXBsZTU5Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MiIgbG9jYXRpb249Ii4vc2FtcGxlODgyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM5IiBsb2NhdGlvbj0iLlxzYW1wbGU0Mzkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzczIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc3NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzc0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwY2Q1ODguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzc0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczOSIgbG9jYXRpb249InNhbXBsZTczOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMyIgbG9jYXRpb249Ii4vc2FtcGxlNDEzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEyIiBsb2NhdGlvbj0iLlxzYW1wbGUyMTIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc3NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzc1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViMDBhOGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzc1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MiIgbG9jYXRpb249InNhbXBsZTk0Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NSIgbG9jYXRpb249Ii4vc2FtcGxlNDg1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQiIGxvY2F0aW9uPSIuXHNhbXBsZTE0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc3Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTcxNjNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc3Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTYiIGxvY2F0aW9uPSJzYW1wbGU4MTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjciIGxvY2F0aW9uPSIuL3NhbXBsZTk2Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwIiBsb2NhdGlvbj0iLlxzYW1wbGU3MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzc3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Nzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYxOWZmOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Nzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM4IiBsb2NhdGlvbj0ic2FtcGxlMTM4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUiIGxvY2F0aW9uPSIuL3NhbXBsZTU1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMyIiBsb2NhdGlvbj0iLlxzYW1wbGU4MzIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc3OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzNjc3NTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzc4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5OCIgbG9jYXRpb249InNhbXBsZTc5OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NCIgbG9jYXRpb249Ii4vc2FtcGxlNTc0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA2IiBsb2NhdGlvbj0iLlxzYW1wbGUxMDYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc3OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzc5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlM2U1M2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzc5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NyIgbG9jYXRpb249InNhbXBsZTM2Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NyIgbG9jYXRpb249Ii4vc2FtcGxlNTY3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgiIGxvY2F0aW9uPSIuXHNhbXBsZTI4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWRkOWYxOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQxIiBsb2NhdGlvbj0ic2FtcGxlMTQxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE4IiBsb2NhdGlvbj0iLi9zYW1wbGU2MTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjQiIGxvY2F0aW9uPSIuXHNhbXBsZTEyNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3ODAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc4MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTM1MThiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc4MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODQiIGxvY2F0aW9uPSJzYW1wbGU1ODQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NCIgbG9jYXRpb249Ii4vc2FtcGxlNjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzgiIGxvY2F0aW9uPSIuXHNhbXBsZTk3OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzgxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3ODEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjdhZjFlMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3ODEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY1IiBsb2NhdGlvbj0ic2FtcGxlNjY1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg4IiBsb2NhdGlvbj0iLi9zYW1wbGU5ODgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzciIGxvY2F0aW9uPSIuXHNhbXBsZTY3Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzgyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3ODIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTMzMTQxNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3ODIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkwIiBsb2NhdGlvbj0ic2FtcGxlMzkwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYwIiBsb2NhdGlvbj0iLi9zYW1wbGU0NjAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTkiIGxvY2F0aW9uPSIuXHNhbXBsZTkxOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzgzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3ODMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTYwYzc4My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3ODMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODciIGxvY2F0aW9uPSJzYW1wbGU4Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NiIgbG9jYXRpb249Ii4vc2FtcGxlMzY2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE3IiBsb2NhdGlvbj0iLlxzYW1wbGU4MTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc4NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzg0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhNDY0ZTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzg0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMSIgbG9jYXRpb249InNhbXBsZTIyMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNSIgbG9jYXRpb249Ii4vc2FtcGxlNTE1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEwIiBsb2NhdGlvbj0iLlxzYW1wbGU5MTAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc4NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzg1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiNGQ5OGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzg1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwIiBsb2NhdGlvbj0ic2FtcGxlNzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OSIgbG9jYXRpb249Ii4vc2FtcGxlNzkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODAiIGxvY2F0aW9uPSIuXHNhbXBsZTY4MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzg2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3ODYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzM3ODI2My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3ODYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIyIiBsb2NhdGlvbj0ic2FtcGxlOTIyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA1IiBsb2NhdGlvbj0iLi9zYW1wbGU4MDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjQiIGxvY2F0aW9uPSIuXHNhbXBsZTc2NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzg3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3ODcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTA4ZjdmNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3ODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIxIiBsb2NhdGlvbj0ic2FtcGxlNDIxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc5IiBsb2NhdGlvbj0iLi9zYW1wbGUxNzkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MiIgbG9jYXRpb249Ii5cc2FtcGxlNzIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc4OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzg4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1ODVjYWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzg4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MCIgbG9jYXRpb249InNhbXBsZTc0MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0OCIgbG9jYXRpb249Ii4vc2FtcGxlMjQ4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA3IiBsb2NhdGlvbj0iLlxzYW1wbGU4MDcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc4OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzg5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyNDJiM2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzg5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMSIgbG9jYXRpb249InNhbXBsZTIxMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MSIgbG9jYXRpb249Ii4vc2FtcGxlMzcxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMyIiBsb2NhdGlvbj0iLlxzYW1wbGU4MzIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhY2U0ZWE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzUiIGxvY2F0aW9uPSJzYW1wbGUzNzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzAiIGxvY2F0aW9uPSIuL3NhbXBsZTQzMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNyIgbG9jYXRpb249Ii5cc2FtcGxlNDE3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc5MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzkwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxMGMwNGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzkwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNyIgbG9jYXRpb249InNhbXBsZTEwNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NSIgbG9jYXRpb249Ii4vc2FtcGxlMTU1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY3IiBsb2NhdGlvbj0iLlxzYW1wbGUzNjcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc5MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzkxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxNTA4ZTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzkxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NiIgbG9jYXRpb249InNhbXBsZTg3Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MiIgbG9jYXRpb249Ii4vc2FtcGxlODcyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQxIiBsb2NhdGlvbj0iLlxzYW1wbGUzNDEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc5Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzkyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzZTMxYmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzkyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MCIgbG9jYXRpb249InNhbXBsZTU5MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MiIgbG9jYXRpb249Ii4vc2FtcGxlNDkyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg0IiBsb2NhdGlvbj0iLlxzYW1wbGUxODQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc5My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzkzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzYTIzNjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzkzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NyIgbG9jYXRpb249InNhbXBsZTc3Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNCIgbG9jYXRpb249Ii4vc2FtcGxlOTM0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc3IiBsb2NhdGlvbj0iLlxzYW1wbGU0Nzcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc5NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzk0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5NmQ3ODUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzk0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NyIgbG9jYXRpb249InNhbXBsZTc0Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMiIgbG9jYXRpb249Ii4vc2FtcGxlNTMyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAiIGxvY2F0aW9uPSIuXHNhbXBsZTEwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc5NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTY5NTRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc5NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTEiIGxvY2F0aW9uPSJzYW1wbGU2OTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzAiIGxvY2F0aW9uPSIuL3NhbXBsZTM3MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4MSIgbG9jYXRpb249Ii5cc2FtcGxlOTgxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc5Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYWIxNjkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDYiIGxvY2F0aW9uPSJzYW1wbGU4NDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTgiIGxvY2F0aW9uPSIuL3NhbXBsZTM5OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMyIgbG9jYXRpb249Ii5cc2FtcGxlMjIzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc5Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjEzNjU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc5Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTEiIGxvY2F0aW9uPSJzYW1wbGU5MTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NiIgbG9jYXRpb249Ii4vc2FtcGxlNTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDciIGxvY2F0aW9uPSIuXHNhbXBsZTYwNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzk4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjAxNTVlYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY3IiBsb2NhdGlvbj0ic2FtcGxlOTY3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI1IiBsb2NhdGlvbj0iLi9zYW1wbGUzMjUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTUiIGxvY2F0aW9uPSIuXHNhbXBsZTMxNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzk5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmIyY2JjMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3OTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkyIiBsb2NhdGlvbj0ic2FtcGxlNjkyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYyIiBsb2NhdGlvbj0iLi9zYW1wbGU4NjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MSIgbG9jYXRpb249Ii5cc2FtcGxlNjEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGViMDQxZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM2IiBsb2NhdGlvbj0ic2FtcGxlNTM2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUyIiBsb2NhdGlvbj0iLi9zYW1wbGUzNTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTEiIGxvY2F0aW9uPSIuXHNhbXBsZTYxMS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNzllMThjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDIiIGxvY2F0aW9uPSJzYW1wbGU0NDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDYiIGxvY2F0aW9uPSIuL3NhbXBsZTE0Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5IiBsb2NhdGlvbj0iLlxzYW1wbGUxOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgwMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjQ0YzVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgwMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODEiIGxvY2F0aW9uPSJzYW1wbGU2ODEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTUiIGxvY2F0aW9uPSIuL3NhbXBsZTY1NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3IiBsb2NhdGlvbj0iLlxzYW1wbGU3Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODAxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTIxNWQ1Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ3IiBsb2NhdGlvbj0ic2FtcGxlOTQ3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI4IiBsb2NhdGlvbj0iLi9zYW1wbGU0Mjgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTciIGxvY2F0aW9uPSIuXHNhbXBsZTk1Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODAyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE5MzU2OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMwIiBsb2NhdGlvbj0ic2FtcGxlOTMwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUwIiBsb2NhdGlvbj0iLi9zYW1wbGU3NTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTMiIGxvY2F0aW9uPSIuXHNhbXBsZTE5My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODAzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTU2MzYyOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzcwIiBsb2NhdGlvbj0ic2FtcGxlNzcwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA4IiBsb2NhdGlvbj0iLi9zYW1wbGU3MDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTkiIGxvY2F0aW9uPSIuXHNhbXBsZTc1OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODA0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjkyNTcxNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAxIiBsb2NhdGlvbj0ic2FtcGxlNDAxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI5IiBsb2NhdGlvbj0iLi9zYW1wbGU1Mjkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDQiIGxvY2F0aW9uPSIuXHNhbXBsZTMwNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODA1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQyMjNhNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY5IiBsb2NhdGlvbj0ic2FtcGxlNjY5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg1IiBsb2NhdGlvbj0iLi9zYW1wbGU2ODUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NyIgbG9jYXRpb249Ii5cc2FtcGxlNTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgwNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODA2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0NjliMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODA2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMSIgbG9jYXRpb249InNhbXBsZTgyMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMiIgbG9jYXRpb249Ii4vc2FtcGxlNjIyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgyIiBsb2NhdGlvbj0iLlxzYW1wbGU5ODIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgwNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODA3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3ZDMzY2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODA3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNiIgbG9jYXRpb249InNhbXBsZTIzNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNCIgbG9jYXRpb249Ii4vc2FtcGxlNzE0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY0IiBsb2NhdGlvbj0iLlxzYW1wbGU2NjQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgwOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODA4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3ODM2ZDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODA4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MyIgbG9jYXRpb249InNhbXBsZTU4My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3IiBsb2NhdGlvbj0iLi9zYW1wbGU5Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NSIgbG9jYXRpb249Ii5cc2FtcGxlNjU1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgwOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OWYzYjUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgwOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzAiIGxvY2F0aW9uPSJzYW1wbGU0NzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDMiIGxvY2F0aW9uPSIuL3NhbXBsZTcwMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MSIgbG9jYXRpb249Ii5cc2FtcGxlMzYxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDRlOGMzZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgxIiBsb2NhdGlvbj0ic2FtcGxlNjgxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc4IiBsb2NhdGlvbj0iLi9zYW1wbGU0Nzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzAiIGxvY2F0aW9uPSIuXHNhbXBsZTIzMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgxMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2I4YWM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgxMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDIiIGxvY2F0aW9uPSJzYW1wbGU5NDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDIiIGxvY2F0aW9uPSIuL3NhbXBsZTU0Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MSIgbG9jYXRpb249Ii5cc2FtcGxlOTUxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgxMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjN2ZjNTcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgxMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NCIgbG9jYXRpb249InNhbXBsZTk0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE1IiBsb2NhdGlvbj0iLi9zYW1wbGU0MTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTkiIGxvY2F0aW9uPSIuXHNhbXBsZTM5OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODEyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDIzN2ZmYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY0IiBsb2NhdGlvbj0ic2FtcGxlMzY0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTExIiBsb2NhdGlvbj0iLi9zYW1wbGUxMTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTAiIGxvY2F0aW9uPSIuXHNhbXBsZTgxMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODEzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzA1OGUwNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk5IiBsb2NhdGlvbj0ic2FtcGxlMzk5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ1IiBsb2NhdGlvbj0iLi9zYW1wbGUxNDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDUiIGxvY2F0aW9uPSIuXHNhbXBsZTk0NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODE0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTIyODUwOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkzIiBsb2NhdGlvbj0ic2FtcGxlNjkzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzcwIiBsb2NhdGlvbj0iLi9zYW1wbGU3NzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NiIgbG9jYXRpb249Ii5cc2FtcGxlNzYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgxNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODE1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkOGMwNDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODE1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMiIgbG9jYXRpb249InNhbXBsZTQzMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMiIgbG9jYXRpb249Ii4vc2FtcGxlODAyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkyIiBsb2NhdGlvbj0iLlxzYW1wbGU5OTIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgxNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODE2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExNzMwZmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODE2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNSIgbG9jYXRpb249InNhbXBsZTUxNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MSIgbG9jYXRpb249Ii4vc2FtcGxlMTcxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE5IiBsb2NhdGlvbj0iLlxzYW1wbGU2MTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgxNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODE3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhZjA4NTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODE3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MyIgbG9jYXRpb249InNhbXBsZTQ5My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMSIgbG9jYXRpb249Ii4vc2FtcGxlODExLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY1IiBsb2NhdGlvbj0iLlxzYW1wbGU5NjUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgxOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODE4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4Nzg3ZWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODE4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NSIgbG9jYXRpb249InNhbXBsZTY0NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MiIgbG9jYXRpb249Ii4vc2FtcGxlNDkyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ1IiBsb2NhdGlvbj0iLlxzYW1wbGUyNDUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgxOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODE5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0ZjM2MTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODE5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NSIgbG9jYXRpb249InNhbXBsZTI5NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NCIgbG9jYXRpb249Ii4vc2FtcGxlODU0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI5IiBsb2NhdGlvbj0iLlxzYW1wbGU4Mjkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDg2Y2UxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzgiIGxvY2F0aW9uPSJzYW1wbGU0Mzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTIiIGxvY2F0aW9uPSIuL3NhbXBsZTQ5Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciIGxvY2F0aW9uPSIuXHNhbXBsZTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODIwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmFiNDNlYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAxIiBsb2NhdGlvbj0ic2FtcGxlOTAxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQiIGxvY2F0aW9uPSIuL3NhbXBsZTM0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkzIiBsb2NhdGlvbj0iLlxzYW1wbGU0OTMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODIxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4Y2U4ODkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODIxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNSIgbG9jYXRpb249InNhbXBsZTExNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MyIgbG9jYXRpb249Ii4vc2FtcGxlMzkzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY3IiBsb2NhdGlvbj0iLlxzYW1wbGUyNjcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODIyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0MGI0N2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODIyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2OSIgbG9jYXRpb249InNhbXBsZTg2OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNyIgbG9jYXRpb249Ii4vc2FtcGxlNTA3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU4IiBsb2NhdGlvbj0iLlxzYW1wbGU0NTgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODIzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmMGNlNWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODIzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMiIgbG9jYXRpb249InNhbXBsZTQzMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNyIgbG9jYXRpb249Ii4vc2FtcGxlMjM3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAyIiBsb2NhdGlvbj0iLlxzYW1wbGUxMDIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODI0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyYzI5MWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODI0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNiIgbG9jYXRpb249InNhbXBsZTcwNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNSIgbG9jYXRpb249Ii4vc2FtcGxlNjE1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM5IiBsb2NhdGlvbj0iLlxzYW1wbGU4Mzkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODI1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkMzdiMGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODI1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxOSIgbG9jYXRpb249InNhbXBsZTUxOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3OCIgbG9jYXRpb249Ii4vc2FtcGxlMzc4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI1IiBsb2NhdGlvbj0iLlxzYW1wbGUzMjUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODI2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyZjg1NjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODI2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MSIgbG9jYXRpb249InNhbXBsZTg5MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MCIgbG9jYXRpb249Ii4vc2FtcGxlNDgwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAyIiBsb2NhdGlvbj0iLlxzYW1wbGU5MDIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODI3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZmZiMzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODI3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MSIgbG9jYXRpb249InNhbXBsZTQ3MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MSIgbG9jYXRpb249Ii4vc2FtcGxlMzUxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjcyIiBsb2NhdGlvbj0iLlxzYW1wbGUyNzIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODI4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0MzU2MjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODI4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NyIgbG9jYXRpb249InNhbXBsZTc1Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNSIgbG9jYXRpb249Ii4vc2FtcGxlMjA1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc0IiBsb2NhdGlvbj0iLlxzYW1wbGUxNzQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODI5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxZWFmODYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODI5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NCIgbG9jYXRpb249InNhbXBsZTY1NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2OSIgbG9jYXRpb249Ii4vc2FtcGxlODY5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkzIiBsb2NhdGlvbj0iLlxzYW1wbGUxOTMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMGNjNjgwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OSIgbG9jYXRpb249InNhbXBsZTc5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI2IiBsb2NhdGlvbj0iLi9zYW1wbGU3MjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjUiIGxvY2F0aW9uPSIuXHNhbXBsZTUyNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgzMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjgzNjRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgzMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjgiIGxvY2F0aW9uPSJzYW1wbGUzMjgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDkiIGxvY2F0aW9uPSIuL3NhbXBsZTI0OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MiIgbG9jYXRpb249Ii5cc2FtcGxlNjkyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgzMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzQwZmEwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgzMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTciIGxvY2F0aW9uPSJzYW1wbGU1NTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTkiIGxvY2F0aW9uPSIuL3NhbXBsZTE1OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MyIgbG9jYXRpb249Ii5cc2FtcGxlNDQzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgzMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OThhZDkzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgzMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDAiIGxvY2F0aW9uPSJzYW1wbGU2NDAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjMiIGxvY2F0aW9uPSIuL3NhbXBsZTUyMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxOSIgbG9jYXRpb249Ii5cc2FtcGxlNDE5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgzMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZWFiMDY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgzMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDAiIGxvY2F0aW9uPSJzYW1wbGUzNDAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjkiIGxvY2F0aW9uPSIuL3NhbXBsZTc2OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3OSIgbG9jYXRpb249Ii5cc2FtcGxlODc5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgzNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjY1MWUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgzNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjEiIGxvY2F0aW9uPSJzYW1wbGU4MjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDAiIGxvY2F0aW9uPSIuL3NhbXBsZTYwMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzOCIgbG9jYXRpb249Ii5cc2FtcGxlMjM4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgzNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjQ5ZGY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgzNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjciIGxvY2F0aW9uPSJzYW1wbGU3Mjcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTMiIGxvY2F0aW9uPSIuL3NhbXBsZTMxMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0OCIgbG9jYXRpb249Ii5cc2FtcGxlMjQ4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgzNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTIwYjg0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgzNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzciIGxvY2F0aW9uPSJzYW1wbGU4Nzcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDciIGxvY2F0aW9uPSIuL3NhbXBsZTQwNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MCIgbG9jYXRpb249Ii5cc2FtcGxlNzcwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Mzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgzNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTA0YTMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgzNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzYiIGxvY2F0aW9uPSJzYW1wbGUyNzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjciIGxvY2F0aW9uPSIuL3NhbXBsZTU2Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwOSIgbG9jYXRpb249Ii5cc2FtcGxlNzA5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Mzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgzOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNmE4M2FhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgzOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDMiIGxvY2F0aW9uPSJzYW1wbGUxNDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTgiIGxvY2F0aW9uPSIuL3NhbXBsZTIxOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNSIgbG9jYXRpb249Ii5cc2FtcGxlNzA1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Mzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgzOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZWZiZWZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgzOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTAiIGxvY2F0aW9uPSJzYW1wbGU3OTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODMiIGxvY2F0aW9uPSIuL3NhbXBsZTY4My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0IiBsb2NhdGlvbj0iLlxzYW1wbGU1NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxNWEyNDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MiIgbG9jYXRpb249InNhbXBsZTg0Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0OCIgbG9jYXRpb249Ii4vc2FtcGxlMTQ4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc4IiBsb2NhdGlvbj0iLlxzYW1wbGU2Nzgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDBiMjU1YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUxIiBsb2NhdGlvbj0ic2FtcGxlMzUxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA3IiBsb2NhdGlvbj0iLi9zYW1wbGU5MDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODMiIGxvY2F0aW9uPSIuXHNhbXBsZTY4My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM1ZjMxNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYzIiBsb2NhdGlvbj0ic2FtcGxlMjYzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAzIiBsb2NhdGlvbj0iLi9zYW1wbGU4MDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTYiIGxvY2F0aW9uPSIuXHNhbXBsZTc1Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2YxZDk3ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQwIiBsb2NhdGlvbj0ic2FtcGxlODQwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg1IiBsb2NhdGlvbj0iLi9zYW1wbGUxODUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTEiIGxvY2F0aW9uPSIuXHNhbXBsZTQxMS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWZlMWJhMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE5IiBsb2NhdGlvbj0ic2FtcGxlMzE5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY0IiBsb2NhdGlvbj0iLi9zYW1wbGUxNjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzUiIGxvY2F0aW9uPSIuXHNhbXBsZTQ3NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQ0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDlkY2Y4NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgxIiBsb2NhdGlvbj0ic2FtcGxlMjgxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQwIiBsb2NhdGlvbj0iLi9zYW1wbGU5NDAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDEiIGxvY2F0aW9uPSIuXHNhbXBsZTI0MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQ1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODEyM2IwNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc1IiBsb2NhdGlvbj0ic2FtcGxlMTc1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE2IiBsb2NhdGlvbj0iLi9zYW1wbGU1MTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzYiIGxvY2F0aW9uPSIuXHNhbXBsZTc3Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQ2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDAzNTBlYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzczIiBsb2NhdGlvbj0ic2FtcGxlNzczLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM0IiBsb2NhdGlvbj0iLi9zYW1wbGUyMzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODMiIGxvY2F0aW9uPSIuXHNhbXBsZTY4My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQ3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg1MmFjYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgiIGxvY2F0aW9uPSJzYW1wbGU2OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NCIgbG9jYXRpb249Ii4vc2FtcGxlOTk0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI4IiBsb2NhdGlvbj0iLlxzYW1wbGUzMjgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQ4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0MjIwZTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODQ4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzOCIgbG9jYXRpb249InNhbXBsZTEzOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMCIgbG9jYXRpb249Ii4vc2FtcGxlNDEwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgiIGxvY2F0aW9uPSIuXHNhbXBsZTk4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg0OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzdmMWJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg0OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjkiIGxvY2F0aW9uPSJzYW1wbGU2Mjkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTMiIGxvY2F0aW9uPSIuL3NhbXBsZTQ5My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NiIgbG9jYXRpb249Ii5cc2FtcGxlNDc2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmRkZWJiYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM5IiBsb2NhdGlvbj0ic2FtcGxlOTM5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk2IiBsb2NhdGlvbj0iLi9zYW1wbGUzOTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTQiIGxvY2F0aW9uPSIuXHNhbXBsZTcxNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjY2Q5MjI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NyIgbG9jYXRpb249InNhbXBsZTQ3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYyIiBsb2NhdGlvbj0iLi9zYW1wbGU3NjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTciIGxvY2F0aW9uPSIuXHNhbXBsZTgxNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBiYjA0MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYiIGxvY2F0aW9uPSJzYW1wbGU5Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMCIgbG9jYXRpb249Ii4vc2FtcGxlNzIwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMwIiBsb2NhdGlvbj0iLlxzYW1wbGUzMzAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODUyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkZDdmNzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MCIgbG9jYXRpb249InNhbXBsZTI5MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4OCIgbG9jYXRpb249Ii4vc2FtcGxlMzg4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA4IiBsb2NhdGlvbj0iLlxzYW1wbGUyMDgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxNzZmOTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MyIgbG9jYXRpb249InNhbXBsZTc0My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NyIgbG9jYXRpb249Ii4vc2FtcGxlNTY3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc4IiBsb2NhdGlvbj0iLlxzYW1wbGUxNzgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmMzMzOTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NyIgbG9jYXRpb249InNhbXBsZTI5Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMCIgbG9jYXRpb249Ii4vc2FtcGxlNjMwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU4IiBsb2NhdGlvbj0iLlxzYW1wbGU0NTgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODU1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0M2Y3MTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyNCIgbG9jYXRpb249InNhbXBsZTYyNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MiIgbG9jYXRpb249Ii4vc2FtcGxlODYyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg0IiBsb2NhdGlvbj0iLlxzYW1wbGU2ODQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxNDZlYTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMSIgbG9jYXRpb249InNhbXBsZTgxMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MSIgbG9jYXRpb249Ii4vc2FtcGxlNjcxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE4IiBsb2NhdGlvbj0iLlxzYW1wbGU5MTgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwZDYxMTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MyIgbG9jYXRpb249InNhbXBsZTI0My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MiIgbG9jYXRpb249Ii4vc2FtcGxlMzcyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk3IiBsb2NhdGlvbj0iLlxzYW1wbGU3OTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyY2FhNDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNSIgbG9jYXRpb249InNhbXBsZTkxNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5OCIgbG9jYXRpb249Ii4vc2FtcGxlNTk4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU5IiBsb2NhdGlvbj0iLlxzYW1wbGU1NTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxMTNhM2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5IiBsb2NhdGlvbj0ic2FtcGxlODkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDYiIGxvY2F0aW9uPSIuL3NhbXBsZTEwNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNSIgbG9jYXRpb249Ii5cc2FtcGxlNDA1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWFmYTg0Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYzIiBsb2NhdGlvbj0ic2FtcGxlNTYzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ4IiBsb2NhdGlvbj0iLi9zYW1wbGU0NDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNiIgbG9jYXRpb249Ii5cc2FtcGxlMTYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODYwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQ0M2EzZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEyIiBsb2NhdGlvbj0ic2FtcGxlNDEyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkxIiBsb2NhdGlvbj0iLi9zYW1wbGUyOTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMiIgbG9jYXRpb249Ii5cc2FtcGxlMjIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg2MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODYxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyYWU3NzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODYxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NiIgbG9jYXRpb249InNhbXBsZTM5Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNSIgbG9jYXRpb249Ii4vc2FtcGxlNzM1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ5IiBsb2NhdGlvbj0iLlxzYW1wbGU5NDkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg2Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODYyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhN2MxY2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODYyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyOSIgbG9jYXRpb249InNhbXBsZTIyOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyIiBsb2NhdGlvbj0iLi9zYW1wbGUyMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNCIgbG9jYXRpb249Ii5cc2FtcGxlOTM0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg2My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjcxZjkyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg2My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNiIgbG9jYXRpb249InNhbXBsZTI2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIiIGxvY2F0aW9uPSIuL3NhbXBsZTUyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg2IiBsb2NhdGlvbj0iLlxzYW1wbGU5ODYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg2NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODY0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3ODFmYmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODY0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MyIgbG9jYXRpb249InNhbXBsZTE4My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4IiBsb2NhdGlvbj0iLi9zYW1wbGUxOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5OCIgbG9jYXRpb249Ii5cc2FtcGxlMTk4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg2NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMTViYTBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg2NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjMiIGxvY2F0aW9uPSJzYW1wbGU4NjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDQiIGxvY2F0aW9uPSIuL3NhbXBsZTM0NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxIiBsb2NhdGlvbj0iLlxzYW1wbGU3MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODY2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQ5NjczNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk5IiBsb2NhdGlvbj0ic2FtcGxlOTk5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY2IiBsb2NhdGlvbj0iLi9zYW1wbGU0NjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDkiIGxvY2F0aW9uPSIuXHNhbXBsZTI0OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODY3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Njcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg4NDhmMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Njcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc5IiBsb2NhdGlvbj0ic2FtcGxlNDc5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ0IiBsb2NhdGlvbj0iLi9zYW1wbGUzNDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzYiIGxvY2F0aW9uPSIuXHNhbXBsZTkzNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODY4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Njgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZlMWQ1NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Njgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQzIiBsb2NhdGlvbj0ic2FtcGxlNjQzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIyIiBsb2NhdGlvbj0iLi9zYW1wbGU2MjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzUiIGxvY2F0aW9uPSIuXHNhbXBsZTg3NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODY5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Njkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMThlZDI1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Njkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA2IiBsb2NhdGlvbj0ic2FtcGxlNzA2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYwIiBsb2NhdGlvbj0iLi9zYW1wbGU0NjAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODMiIGxvY2F0aW9uPSIuXHNhbXBsZTc4My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzYjMwOGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NCIgbG9jYXRpb249InNhbXBsZTY0NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NiIgbG9jYXRpb249Ii4vc2FtcGxlMjY2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk4IiBsb2NhdGlvbj0iLlxzYW1wbGU2OTgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODcwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjdkYjE3Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI5IiBsb2NhdGlvbj0ic2FtcGxlNDI5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg5IiBsb2NhdGlvbj0iLi9zYW1wbGUzODkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzAiIGxvY2F0aW9uPSIuXHNhbXBsZTUzMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODcxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWZjZjExMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc4IiBsb2NhdGlvbj0ic2FtcGxlMjc4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ3IiBsb2NhdGlvbj0iLi9zYW1wbGU3NDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODIiIGxvY2F0aW9uPSIuXHNhbXBsZTI4Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODcyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTI5NmE2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEzIiBsb2NhdGlvbj0ic2FtcGxlNDEzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc4IiBsb2NhdGlvbj0iLi9zYW1wbGUyNzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDEiIGxvY2F0aW9uPSIuXHNhbXBsZTEwMS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODczLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjFhNTY5Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ5IiBsb2NhdGlvbj0ic2FtcGxlODQ5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU0IiBsb2NhdGlvbj0iLi9zYW1wbGUxNTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzQiIGxvY2F0aW9uPSIuXHNhbXBsZTQ3NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODc0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjE0MWNmMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE2IiBsb2NhdGlvbj0ic2FtcGxlODE2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI0IiBsb2NhdGlvbj0iLi9zYW1wbGUzMjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODkiIGxvY2F0aW9uPSIuXHNhbXBsZTg4OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODc1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmI2OTk0ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI2IiBsb2NhdGlvbj0ic2FtcGxlODI2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYwIiBsb2NhdGlvbj0iLi9zYW1wbGUxNjAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzEiIGxvY2F0aW9uPSIuXHNhbXBsZTczMS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODc2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjg5ZWZlNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA0IiBsb2NhdGlvbj0ic2FtcGxlNzA0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI0IiBsb2NhdGlvbj0iLi9zYW1wbGUxMjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjYiIGxvY2F0aW9uPSIuXHNhbXBsZTQyNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODc3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Nzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Y2MTY5NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Nzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgiIGxvY2F0aW9uPSJzYW1wbGU2OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMiIgbG9jYXRpb249Ii4vc2FtcGxlNDMyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc2IiBsb2NhdGlvbj0iLlxzYW1wbGU0NzYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg3OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjZTJjYzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODc4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MSIgbG9jYXRpb249InNhbXBsZTc5MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwOSIgbG9jYXRpb249Ii4vc2FtcGxlNzA5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYxIiBsb2NhdGlvbj0iLlxzYW1wbGU2NjEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg3OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODc5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4YWJkMTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODc5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwIiBsb2NhdGlvbj0ic2FtcGxlOTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzYiIGxvY2F0aW9uPSIuL3NhbXBsZTY3Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NiIgbG9jYXRpb249Ii5cc2FtcGxlNTc2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWVjMjM0ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkyIiBsb2NhdGlvbj0ic2FtcGxlNzkyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUyIiBsb2NhdGlvbj0iLi9zYW1wbGU2NTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDQiIGxvY2F0aW9uPSIuXHNhbXBsZTM0NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4ODAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg4MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOWVmYzAwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg4MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODQiIGxvY2F0aW9uPSJzYW1wbGU4ODQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzUiIGxvY2F0aW9uPSIuL3NhbXBsZTU3NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MiIgbG9jYXRpb249Ii5cc2FtcGxlNTgyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4ODEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg4MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiN2Y2MmNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg4MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzMiIGxvY2F0aW9uPSJzYW1wbGU0MzMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDUiIGxvY2F0aW9uPSIuL3NhbXBsZTIwNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNSIgbG9jYXRpb249Ii5cc2FtcGxlMjM1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4ODIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg4Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzBhZTA2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzYiIGxvY2F0aW9uPSJzYW1wbGU0MzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODMiIGxvY2F0aW9uPSIuL3NhbXBsZTU4My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMSIgbG9jYXRpb249Ii5cc2FtcGxlNjMxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4ODMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg4My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWExOTZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg4My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzciIGxvY2F0aW9uPSJzYW1wbGU4Mzcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDkiIGxvY2F0aW9uPSIuL3NhbXBsZTcwOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NSIgbG9jYXRpb249Ii5cc2FtcGxlMjg1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4ODQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg4NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MGNlYWQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg4NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDYiIGxvY2F0aW9uPSJzYW1wbGU3MDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzYiIGxvY2F0aW9uPSIuL3NhbXBsZTczNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NCIgbG9jYXRpb249Ii5cc2FtcGxlNzg0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4ODUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg4NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDRhNzc4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg4NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzEiIGxvY2F0aW9uPSJzYW1wbGU1MzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDQiIGxvY2F0aW9uPSIuL3NhbXBsZTU0NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NyIgbG9jYXRpb249Ii5cc2FtcGxlNTY3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4ODYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg4Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzIxNzBhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg4Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NiIgbG9jYXRpb249InNhbXBsZTY2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYiIGxvY2F0aW9uPSIuL3NhbXBsZTg2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA1IiBsb2NhdGlvbj0iLlxzYW1wbGUyMDUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg4Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODg3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhYzE4ZjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODg3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMSIgbG9jYXRpb249InNhbXBsZTUwMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MyIgbG9jYXRpb249Ii4vc2FtcGxlMTUzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYwIiBsb2NhdGlvbj0iLlxzYW1wbGUxNjAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg4OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODg4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhYjlkNmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODg4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1OCIgbG9jYXRpb249InNhbXBsZTU1OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNSIgbG9jYXRpb249Ii4vc2FtcGxlODM1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE1IiBsb2NhdGlvbj0iLlxzYW1wbGU2MTUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg4OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODg5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzMmM5NTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODg5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyOSIgbG9jYXRpb249InNhbXBsZTYyOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxOCIgbG9jYXRpb249Ii4vc2FtcGxlOTE4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk1IiBsb2NhdGlvbj0iLlxzYW1wbGU0OTUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTUyNDhlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzciIGxvY2F0aW9uPSJzYW1wbGU4Mzcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjkiIGxvY2F0aW9uPSIuL3NhbXBsZTUyOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MSIgbG9jYXRpb249Ii5cc2FtcGxlODQxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg5MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODkwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2ZDdiMmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODkwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MSIgbG9jYXRpb249InNhbXBsZTE3MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMCIgbG9jYXRpb249Ii4vc2FtcGxlNDIwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc4IiBsb2NhdGlvbj0iLlxzYW1wbGU3Nzgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg5MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODkxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyMmY2MDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODkxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4OSIgbG9jYXRpb249InNhbXBsZTk4OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMiIgbG9jYXRpb249Ii4vc2FtcGxlNjAyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU5IiBsb2NhdGlvbj0iLlxzYW1wbGUxNTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg5Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODkyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiM2I5YTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODkyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MCIgbG9jYXRpb249InNhbXBsZTM5MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MyIgbG9jYXRpb249Ii4vc2FtcGxlNzczLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAzIiBsb2NhdGlvbj0iLlxzYW1wbGU4MDMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg5My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODkzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyNzJhZmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODkzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5OSIgbG9jYXRpb249InNhbXBsZTE5OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MSIgbG9jYXRpb249Ii4vc2FtcGxlNTYxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM2IiBsb2NhdGlvbj0iLlxzYW1wbGU3MzYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg5NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODk0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjZGM0MDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODk0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMSIgbG9jYXRpb249InNhbXBsZTExMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NiIgbG9jYXRpb249Ii4vc2FtcGxlNzY2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkyIiBsb2NhdGlvbj0iLlxzYW1wbGU2OTIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg5NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODk1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyYWJlMmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODk1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMiIgbG9jYXRpb249InNhbXBsZTgzMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1OSIgbG9jYXRpb249Ii4vc2FtcGxlNzU5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc0IiBsb2NhdGlvbj0iLlxzYW1wbGU4NzQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg5Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODk2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2M2Y0NDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODk2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NCIgbG9jYXRpb249InNhbXBsZTg2NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwOCIgbG9jYXRpb249Ii4vc2FtcGxlNTA4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgiIGxvY2F0aW9uPSIuXHNhbXBsZTQ4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg5Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDI3OTZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg5Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzEiIGxvY2F0aW9uPSJzYW1wbGUzNzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDgiIGxvY2F0aW9uPSIuL3NhbXBsZTE0OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NiIgbG9jYXRpb249Ii5cc2FtcGxlMTk2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg5OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODY2ODA2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg5OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDUiIGxvY2F0aW9uPSJzYW1wbGU1MDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzAiIGxvY2F0aW9uPSIuL3NhbXBsZTk3MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MCIgbG9jYXRpb249Ii5cc2FtcGxlNjcwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg5OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YmNkN2U2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDMiIGxvY2F0aW9uPSJzYW1wbGU5MDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTMiIGxvY2F0aW9uPSIuL3NhbXBsZTY1My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNyIgbG9jYXRpb249Ii5cc2FtcGxlODM3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiYjg0YWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NiIgbG9jYXRpb249InNhbXBsZTM3Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMSIgbG9jYXRpb249Ii4vc2FtcGxlMTMxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY1IiBsb2NhdGlvbj0iLlxzYW1wbGU0NjUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDVmYmZmNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgzIiBsb2NhdGlvbj0ic2FtcGxlNDgzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEwIiBsb2NhdGlvbj0iLi9zYW1wbGUyMTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzUiIGxvY2F0aW9uPSIuXHNhbXBsZTczNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkwMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTNmMTlmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkwMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTMiIGxvY2F0aW9uPSJzYW1wbGU5MTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzkiIGxvY2F0aW9uPSIuL3NhbXBsZTgzOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwOCIgbG9jYXRpb249Ii5cc2FtcGxlMzA4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkwMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTE3NWZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkwMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTUiIGxvY2F0aW9uPSJzYW1wbGUxOTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODAiIGxvY2F0aW9uPSIuL3NhbXBsZTM4MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NCIgbG9jYXRpb249Ii5cc2FtcGxlMjk0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkwMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTljZTE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkwMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzYiIGxvY2F0aW9uPSJzYW1wbGU2NzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzciIGxvY2F0aW9uPSIuL3NhbXBsZTkzNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NCIgbG9jYXRpb249Ii5cc2FtcGxlNzY0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkwMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NmM1NGM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkwMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTUiIGxvY2F0aW9uPSJzYW1wbGUyOTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMiIgbG9jYXRpb249Ii4vc2FtcGxlMTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjYiIGxvY2F0aW9uPSIuXHNhbXBsZTU2Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTA0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQ2MDk0Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQzIiBsb2NhdGlvbj0ic2FtcGxlOTQzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUiIGxvY2F0aW9uPSIuL3NhbXBsZTM1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ1IiBsb2NhdGlvbj0iLlxzYW1wbGUxNDUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkwNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTA1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhMDM3NTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTA1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MSIgbG9jYXRpb249InNhbXBsZTk2MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0OSIgbG9jYXRpb249Ii4vc2FtcGxlMjQ5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM0IiBsb2NhdGlvbj0iLlxzYW1wbGU3MzQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkwNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTA2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzMDE3ZjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTA2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NiIgbG9jYXRpb249InNhbXBsZTU4Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NSIgbG9jYXRpb249Ii4vc2FtcGxlMjg1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU3IiBsb2NhdGlvbj0iLlxzYW1wbGU1NTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkwNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTA3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjZjAwYTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTA3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwOSIgbG9jYXRpb249InNhbXBsZTkwOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0IiBsb2NhdGlvbj0iLi9zYW1wbGUxNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NSIgbG9jYXRpb249Ii5cc2FtcGxlNTc1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkwOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOWM4MjM0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkwOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODUiIGxvY2F0aW9uPSJzYW1wbGU3ODUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTkiIGxvY2F0aW9uPSIuL3NhbXBsZTcxOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMiIgbG9jYXRpb249Ii5cc2FtcGxlNTAyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkwOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDk4YWEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkwOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDAiIGxvY2F0aW9uPSJzYW1wbGU3NDAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDMiIGxvY2F0aW9uPSIuL3NhbXBsZTg0My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MyIgbG9jYXRpb249Ii5cc2FtcGxlMjkzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTcyMzQ0Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk2IiBsb2NhdGlvbj0ic2FtcGxlNTk2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI2IiBsb2NhdGlvbj0iLi9zYW1wbGU1MjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODEiIGxvY2F0aW9uPSIuXHNhbXBsZTg4MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkxMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZWNkNTZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkxMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzYiIGxvY2F0aW9uPSJzYW1wbGU2MzYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDEiIGxvY2F0aW9uPSIuL3NhbXBsZTYwMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MiIgbG9jYXRpb249Ii5cc2FtcGxlMzYyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkxMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmQzMGFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkxMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDMiIGxvY2F0aW9uPSJzYW1wbGU1MDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjIiIGxvY2F0aW9uPSIuL3NhbXBsZTc2Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MCIgbG9jYXRpb249Ii5cc2FtcGxlMjgwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkxMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjlhNWNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkxMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDUiIGxvY2F0aW9uPSJzYW1wbGUyMDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjkiIGxvY2F0aW9uPSIuL3NhbXBsZTY2OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwIiBsb2NhdGlvbj0iLlxzYW1wbGU4MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTEzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjI2N2RlOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE5IiBsb2NhdGlvbj0ic2FtcGxlMjE5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI0IiBsb2NhdGlvbj0iLi9zYW1wbGU4MjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODIiIGxvY2F0aW9uPSIuXHNhbXBsZTU4Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTE0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmY3OGNkZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE3IiBsb2NhdGlvbj0ic2FtcGxlNzE3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA5IiBsb2NhdGlvbj0iLi9zYW1wbGU4MDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTgiIGxvY2F0aW9uPSIuXHNhbXBsZTk1OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTE1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjY3Y2NlNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk3IiBsb2NhdGlvbj0ic2FtcGxlODk3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU0IiBsb2NhdGlvbj0iLi9zYW1wbGU0NTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTQiIGxvY2F0aW9uPSIuXHNhbXBsZTU5NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTE2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjA4M2MxNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM2IiBsb2NhdGlvbj0ic2FtcGxlNzM2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUwIiBsb2NhdGlvbj0iLi9zYW1wbGUxNTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDkiIGxvY2F0aW9uPSIuXHNhbXBsZTEwOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTE3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJjZjgxNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTciIGxvY2F0aW9uPSJzYW1wbGUxNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMCIgbG9jYXRpb249Ii4vc2FtcGxlMzMwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNyIgbG9jYXRpb249Ii5cc2FtcGxlNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTE4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzdkY2MxNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgxIiBsb2NhdGlvbj0ic2FtcGxlMjgxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkiIGxvY2F0aW9uPSIuL3NhbXBsZTI5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzExIiBsb2NhdGlvbj0iLlxzYW1wbGUzMTEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkxOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTE5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxMGEzMjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTE5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyOCIgbG9jYXRpb249InNhbXBsZTcyOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MyIgbG9jYXRpb249Ii4vc2FtcGxlMzYzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQzIiBsb2NhdGlvbj0iLlxzYW1wbGU4NDMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzU2NDIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjciIGxvY2F0aW9uPSJzYW1wbGUzNjcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDAiIGxvY2F0aW9uPSIuL3NhbXBsZTIwMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzOCIgbG9jYXRpb249Ii5cc2FtcGxlOTM4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkyMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTIwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyYjA5YWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTIwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NSIgbG9jYXRpb249InNhbXBsZTI3NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyOCIgbG9jYXRpb249Ii4vc2FtcGxlNzI4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA5IiBsb2NhdGlvbj0iLlxzYW1wbGU0MDkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkyMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTIxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwODkyZmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTIxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NCIgbG9jYXRpb249InNhbXBsZTk2NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNiIgbG9jYXRpb249Ii4vc2FtcGxlNDA2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM5IiBsb2NhdGlvbj0iLlxzYW1wbGU1Mzkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkyMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTIyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3YzE0NTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTIyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxIiBsb2NhdGlvbj0ic2FtcGxlOTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzUiIGxvY2F0aW9uPSIuL3NhbXBsZTU3NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2OSIgbG9jYXRpb249Ii5cc2FtcGxlNzY5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkyMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjUyY2Y2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkyMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjYiIGxvY2F0aW9uPSJzYW1wbGU3NjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTgiIGxvY2F0aW9uPSIuL3NhbXBsZTI1OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NyIgbG9jYXRpb249Ii5cc2FtcGxlMTQ3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkyNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODEyNzcwYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA1IiBsb2NhdGlvbj0ic2FtcGxlMTA1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNyIgbG9jYXRpb249Ii4vc2FtcGxlNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMiIgbG9jYXRpb249Ii5cc2FtcGxlMzEyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkyNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTllNTQ0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODYiIGxvY2F0aW9uPSJzYW1wbGUzODYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTIiIGxvY2F0aW9uPSIuL3NhbXBsZTExMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExOCIgbG9jYXRpb249Ii5cc2FtcGxlMTE4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkyNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDI5YzJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkyNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDMiIGxvY2F0aW9uPSJzYW1wbGU0MDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjEiIGxvY2F0aW9uPSIuL3NhbXBsZTY2MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MCIgbG9jYXRpb249Ii5cc2FtcGxlNzcwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Mjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkyNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTJmOWQxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkyNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTkiIGxvY2F0aW9uPSJzYW1wbGUyNTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjAiIGxvY2F0aW9uPSIuL3NhbXBsZTg2MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNiIgbG9jYXRpb249Ii5cc2FtcGxlNzM2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Mjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkyOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzVhYTVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODUiIGxvY2F0aW9uPSJzYW1wbGU0ODUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDkiIGxvY2F0aW9uPSIuL3NhbXBsZTk0OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2IiBsb2NhdGlvbj0iLlxzYW1wbGU3Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTI5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Mjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQ5ZjNhNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Mjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk4IiBsb2NhdGlvbj0ic2FtcGxlNjk4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE0IiBsb2NhdGlvbj0iLi9zYW1wbGU5MTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDAiIGxvY2F0aW9uPSIuXHNhbXBsZTc0MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlOTliOWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMCIgbG9jYXRpb249InNhbXBsZTMxMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNCIgbG9jYXRpb249Ii4vc2FtcGxlMzI0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAzIiBsb2NhdGlvbj0iLlxzYW1wbGUzMDMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTMwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjU0MmQwOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkiIGxvY2F0aW9uPSJzYW1wbGUyOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwIiBsb2NhdGlvbj0iLi9zYW1wbGUyMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NSIgbG9jYXRpb249Ii5cc2FtcGxlOTQ1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkzMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYWNlMjlmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkzMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODkiIGxvY2F0aW9uPSJzYW1wbGU1ODkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTgiIGxvY2F0aW9uPSIuL3NhbXBsZTExOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxOSIgbG9jYXRpb249Ii5cc2FtcGxlMjE5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkzMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjY2OTIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkzMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTciIGxvY2F0aW9uPSJzYW1wbGU2OTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODQiIGxvY2F0aW9uPSIuL3NhbXBsZTE4NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MyIgbG9jYXRpb249Ii5cc2FtcGxlMzUzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkzMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZmQ5NzcxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkzMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzIiIGxvY2F0aW9uPSJzYW1wbGU5MzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjQiIGxvY2F0aW9uPSIuL3NhbXBsZTU2NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYiIGxvY2F0aW9uPSIuXHNhbXBsZTYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkzNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTM0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhYTQzY2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTM0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxOSIgbG9jYXRpb249InNhbXBsZTMxOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1OSIgbG9jYXRpb249Ii4vc2FtcGxlMjU5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMyIiBsb2NhdGlvbj0iLlxzYW1wbGUyMzIud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkzNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTM1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzNDg3NzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTM1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMCIgbG9jYXRpb249InNhbXBsZTgyMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMyIgbG9jYXRpb249Ii4vc2FtcGxlNDAzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA3IiBsb2NhdGlvbj0iLlxzYW1wbGUyMDcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkzNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTM2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllN2UyNjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTM2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NCIgbG9jYXRpb249InNhbXBsZTk1NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NyIgbG9jYXRpb249Ii4vc2FtcGxlOTY3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc1IiBsb2NhdGlvbj0iLlxzYW1wbGU4NzUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkzNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTM3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwNDljNzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTM3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NyIgbG9jYXRpb249InNhbXBsZTY3Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNiIgbG9jYXRpb249Ii4vc2FtcGxlNTI2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgzIiBsb2NhdGlvbj0iLlxzYW1wbGUyODMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkzOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTM4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxNmEwYWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTM4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzOCIgbG9jYXRpb249InNhbXBsZTUzOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNiIgbG9jYXRpb249Ii4vc2FtcGxlNTM2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMzIiBsb2NhdGlvbj0iLlxzYW1wbGU0MzMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkzOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTM5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmZDY4NjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTM5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMiIgbG9jYXRpb249InNhbXBsZTIxMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NSIgbG9jYXRpb249Ii4vc2FtcGxlNTU1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM0IiBsb2NhdGlvbj0iLlxzYW1wbGU4MzQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzdiY2JjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzEiIGxvY2F0aW9uPSJzYW1wbGU2MzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTUiIGxvY2F0aW9uPSIuL3NhbXBsZTU5NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwIiBsb2NhdGlvbj0iLlxzYW1wbGU4MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk0MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzBhZjE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk0MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NyIgbG9jYXRpb249InNhbXBsZTg3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUyIiBsb2NhdGlvbj0iLi9zYW1wbGUzNTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDAiIGxvY2F0aW9uPSIuXHNhbXBsZTgwMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWI2ZGYzYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE4IiBsb2NhdGlvbj0ic2FtcGxlMjE4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI5IiBsb2NhdGlvbj0iLi9zYW1wbGUxMjkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTUiIGxvY2F0aW9uPSIuXHNhbXBsZTIxNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNlOTk5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg5IiBsb2NhdGlvbj0ic2FtcGxlNDg5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIyIiBsb2NhdGlvbj0iLi9zYW1wbGUzMjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTAiIGxvY2F0aW9uPSIuXHNhbXBsZTk1MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGI1OGYxMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg3IiBsb2NhdGlvbj0ic2FtcGxlODg3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY5IiBsb2NhdGlvbj0iLi9zYW1wbGUzNjkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzUiIGxvY2F0aW9uPSIuXHNhbXBsZTgzNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQ0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWNlZGMxMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMwIiBsb2NhdGlvbj0ic2FtcGxlOTMwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY1IiBsb2NhdGlvbj0iLi9zYW1wbGUyNjUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTciIGxvY2F0aW9uPSIuXHNhbXBsZTYxNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQ1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBiN2VkMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY3IiBsb2NhdGlvbj0ic2FtcGxlOTY3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg4IiBsb2NhdGlvbj0iLi9zYW1wbGU5ODgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjYiIGxvY2F0aW9uPSIuXHNhbXBsZTQyNi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQ2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjAyNTMwYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEyIiBsb2NhdGlvbj0ic2FtcGxlMzEyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc1IiBsb2NhdGlvbj0iLi9zYW1wbGU0NzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MSIgbG9jYXRpb249Ii5cc2FtcGxlODEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk0Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQ3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiZmI0YzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQ3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMSIgbG9jYXRpb249InNhbXBsZTIzMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NCIgbG9jYXRpb249Ii4vc2FtcGxlMTk0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkxIiBsb2NhdGlvbj0iLlxzYW1wbGUxOTEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQ4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkZTM0ZTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQ4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzOCIgbG9jYXRpb249InNhbXBsZTIzOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2IiBsb2NhdGlvbj0iLi9zYW1wbGUxNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NCIgbG9jYXRpb249Ii5cc2FtcGxlNjg0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk0OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMmE4MjkwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk0OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTYiIGxvY2F0aW9uPSJzYW1wbGU5NTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjIiIGxvY2F0aW9uPSIuL3NhbXBsZTU2Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NyIgbG9jYXRpb249Ii5cc2FtcGxlMjQ3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWZkNjk4Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU1IiBsb2NhdGlvbj0ic2FtcGxlMTU1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUwIiBsb2NhdGlvbj0iLi9zYW1wbGU0NTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDYiIGxvY2F0aW9uPSIuXHNhbXBsZTk0Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk1MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYWIyNzg2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk1MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MiIgbG9jYXRpb249InNhbXBsZTQyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY5IiBsb2NhdGlvbj0iLi9zYW1wbGU3Njkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDYiIGxvY2F0aW9uPSIuXHNhbXBsZTM0Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjk5MzRmNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE4IiBsb2NhdGlvbj0ic2FtcGxlMTE4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA0IiBsb2NhdGlvbj0iLi9zYW1wbGUxMDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDkiIGxvY2F0aW9uPSIuXHNhbXBsZTIwOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTUyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2IyMTBiNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ2IiBsb2NhdGlvbj0ic2FtcGxlMjQ2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU0IiBsb2NhdGlvbj0iLi9zYW1wbGU1NTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDkiIGxvY2F0aW9uPSIuXHNhbXBsZTMwOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTUzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQ0YzJhZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY4IiBsb2NhdGlvbj0ic2FtcGxlNjY4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYxIiBsb2NhdGlvbj0iLi9zYW1wbGU1NjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzUiIGxvY2F0aW9uPSIuXHNhbXBsZTk3NS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGUzNTg1My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ2IiBsb2NhdGlvbj0ic2FtcGxlNDQ2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI0IiBsb2NhdGlvbj0iLi9zYW1wbGU4MjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MSIgbG9jYXRpb249Ii5cc2FtcGxlNzEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk1NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTU1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlYTZlYjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyOSIgbG9jYXRpb249InNhbXBsZTEyOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMSIgbG9jYXRpb249Ii4vc2FtcGxlMTExLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ0IiBsb2NhdGlvbj0iLlxzYW1wbGUyNDQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk1Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5NTEyY2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MSIgbG9jYXRpb249InNhbXBsZTc1MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMyIgbG9jYXRpb249Ii4vc2FtcGxlNjEzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA3IiBsb2NhdGlvbj0iLlxzYW1wbGU1MDcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk1Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiZTMzMGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MCIgbG9jYXRpb249InNhbXBsZTE3MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NyIgbG9jYXRpb249Ii4vc2FtcGxlNjg3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUwIiBsb2NhdGlvbj0iLlxzYW1wbGU0NTAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk1OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjN2UzYzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwOCIgbG9jYXRpb249InNhbXBsZTUwOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNSIgbG9jYXRpb249Ii4vc2FtcGxlMjE1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk4IiBsb2NhdGlvbj0iLlxzYW1wbGUxOTgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk1OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhYjFjOTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyIiBsb2NhdGlvbj0ic2FtcGxlNzIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzgiIGxvY2F0aW9uPSIuL3NhbXBsZTQzOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwOCIgbG9jYXRpb249Ii5cc2FtcGxlODA4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzM1NjMzZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM2IiBsb2NhdGlvbj0ic2FtcGxlNDM2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkyIiBsb2NhdGlvbj0iLi9zYW1wbGU5OTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzYiIGxvY2F0aW9uPSIuXHNhbXBsZTU3Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk2MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZmVmZDIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk2MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjAiIGxvY2F0aW9uPSJzYW1wbGU2MjAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzkiIGxvY2F0aW9uPSIuL3NhbXBsZTczOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMCIgbG9jYXRpb249Ii5cc2FtcGxlNDMwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk2MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzlkY2QwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk2MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTAiIGxvY2F0aW9uPSJzYW1wbGU2MTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjYiIGxvY2F0aW9uPSIuL3NhbXBsZTU2Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MSIgbG9jYXRpb249Ii5cc2FtcGxlMjUxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk2Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNmYzZjZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk2Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTciIGxvY2F0aW9uPSJzYW1wbGUyMTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTMiIGxvY2F0aW9uPSIuL3NhbXBsZTIxMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0IiBsb2NhdGlvbj0iLlxzYW1wbGU5NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTYzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDk0NmNiOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEiIGxvY2F0aW9uPSJzYW1wbGU5MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NyIgbG9jYXRpb249Ii4vc2FtcGxlNjQ3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODcwIiBsb2NhdGlvbj0iLlxzYW1wbGU4NzAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk2NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTY0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjNjlkMGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTY0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NCIgbG9jYXRpb249InNhbXBsZTc0NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MyIgbG9jYXRpb249Ii4vc2FtcGxlNzYzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg2IiBsb2NhdGlvbj0iLlxzYW1wbGU2ODYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk2NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTY1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3N2YwZWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTY1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNCIgbG9jYXRpb249InNhbXBsZTIyNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNyIgbG9jYXRpb249Ii4vc2FtcGxlMjA3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY1IiBsb2NhdGlvbj0iLlxzYW1wbGUzNjUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk2Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTY2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5NGRhNTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTY2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMiIgbG9jYXRpb249InNhbXBsZTIwMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwIiBsb2NhdGlvbj0iLi9zYW1wbGU3MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMyIgbG9jYXRpb249Ii5cc2FtcGxlODEzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Njcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk2Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjdhNGE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk2Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODUiIGxvY2F0aW9uPSJzYW1wbGU1ODUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzQiIGxvY2F0aW9uPSIuL3NhbXBsZTgzNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NCIgbG9jYXRpb249Ii5cc2FtcGxlOTg0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Njgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk2OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZmVlYmFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk2OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzciIGxvY2F0aW9uPSJzYW1wbGU5Mzcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MSIgbG9jYXRpb249Ii4vc2FtcGxlNjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzQiIGxvY2F0aW9uPSIuXHNhbXBsZTc3NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTY5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Njkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTEyNzA0OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Njkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIwIiBsb2NhdGlvbj0ic2FtcGxlOTIwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMiIGxvY2F0aW9uPSIuL3NhbXBsZTgzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI1IiBsb2NhdGlvbj0iLlxzYW1wbGUzMjUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Yjk3YWJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTciIGxvY2F0aW9uPSJzYW1wbGU1MTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjQiIGxvY2F0aW9uPSIuL3NhbXBsZTMyNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzIiBsb2NhdGlvbj0iLlxzYW1wbGU0My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk3MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNTQ0ZmI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk3MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjQiIGxvY2F0aW9uPSJzYW1wbGUzMjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTIiIGxvY2F0aW9uPSIuL3NhbXBsZTMxMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMyIgbG9jYXRpb249Ii5cc2FtcGxlMjAzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk3MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDUwMTY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODIiIGxvY2F0aW9uPSJzYW1wbGU2ODIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODYiIGxvY2F0aW9uPSIuL3NhbXBsZTk4Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNyIgbG9jYXRpb249Ii5cc2FtcGxlNTM3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk3Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDlmOWFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk3Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTYiIGxvY2F0aW9uPSJzYW1wbGU2MTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNiIgbG9jYXRpb249Ii4vc2FtcGxlMjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTQiIGxvY2F0aW9uPSIuXHNhbXBsZTgxNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTczLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTljYzgxYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMiIgbG9jYXRpb249InNhbXBsZTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzYiIGxvY2F0aW9uPSIuL3NhbXBsZTYzNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MSIgbG9jYXRpb249Ii5cc2FtcGxlNzgxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk3NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzQ1ODJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk3NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzQiIGxvY2F0aW9uPSJzYW1wbGU4NzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTEiIGxvY2F0aW9uPSIuL3NhbXBsZTY1MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4OCIgbG9jYXRpb249Ii5cc2FtcGxlMTg4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk3NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjhiYmRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk3NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTkiIGxvY2F0aW9uPSJzYW1wbGU1OTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTUiIGxvY2F0aW9uPSIuL3NhbXBsZTc1NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNSIgbG9jYXRpb249Ii5cc2FtcGxlMjA1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk3Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTkyOTdhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk3Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDYiIGxvY2F0aW9uPSJzYW1wbGU0NDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzQiIGxvY2F0aW9uPSIuL3NhbXBsZTUzNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NiIgbG9jYXRpb249Ii5cc2FtcGxlODk2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Nzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk3Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjU4MzM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk3Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDUiIGxvY2F0aW9uPSJzYW1wbGU3NDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzEiIGxvY2F0aW9uPSIuL3NhbXBsZTczMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NiIgbG9jYXRpb249Ii5cc2FtcGxlNTQ2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Nzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk3OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YmQ2ZDZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk3OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDMiIGxvY2F0aW9uPSJzYW1wbGU1NDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTciIGxvY2F0aW9uPSIuL3NhbXBsZTgxNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MiIgbG9jYXRpb249Ii5cc2FtcGxlMTcyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Nzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk3OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYmY4YzQxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk3OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNSIgbG9jYXRpb249InNhbXBsZTM1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUxIiBsb2NhdGlvbj0iLi9zYW1wbGU4NTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjMiIGxvY2F0aW9uPSIuXHNhbXBsZTY2My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxMzVmZGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NSIgbG9jYXRpb249InNhbXBsZTc4NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MiIgbG9jYXRpb249Ii4vc2FtcGxlNTcyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEzIiBsb2NhdGlvbj0iLlxzYW1wbGUxMTMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTgwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5ODAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjI4MzNhMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5ODAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk2IiBsb2NhdGlvbj0ic2FtcGxlMjk2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE2IiBsb2NhdGlvbj0iLi9zYW1wbGU3MTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTAiIGxvY2F0aW9uPSIuXHNhbXBsZTI5MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTgxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5ODEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTgwOGI2Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5ODEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ4IiBsb2NhdGlvbj0ic2FtcGxlODQ4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM5IiBsb2NhdGlvbj0iLi9zYW1wbGU1Mzkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTEiIGxvY2F0aW9uPSIuXHNhbXBsZTQxMS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTgyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5ODIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjBkYzRmZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5ODIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk5IiBsb2NhdGlvbj0ic2FtcGxlODk5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ4IiBsb2NhdGlvbj0iLi9zYW1wbGU5NDgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzEiIGxvY2F0aW9uPSIuXHNhbXBsZTUzMS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTgzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5ODMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Y1M2FlOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5ODMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSIgbG9jYXRpb249InNhbXBsZTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDEiIGxvY2F0aW9uPSIuL3NhbXBsZTk0MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MyIgbG9jYXRpb249Ii5cc2FtcGxlNDkzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5ODQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk4NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Mjg1YWU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk4NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTYiIGxvY2F0aW9uPSJzYW1wbGUxOTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDAiIGxvY2F0aW9uPSIuL3NhbXBsZTkwMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNiIgbG9jYXRpb249Ii5cc2FtcGxlODI2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5ODUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk4NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMWZmZjEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk4NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjkiIGxvY2F0aW9uPSJzYW1wbGU5Mjkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjMiIGxvY2F0aW9uPSIuL3NhbXBsZTMyMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNiIgbG9jYXRpb249Ii5cc2FtcGxlMTI2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5ODYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk4Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjk2OGMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk4Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDYiIGxvY2F0aW9uPSJzYW1wbGU5NDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDkiIGxvY2F0aW9uPSIuL3NhbXBsZTUwOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNiIgbG9jYXRpb249Ii5cc2FtcGxlMjE2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5ODcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk4Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTQyODljLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk4Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDIiIGxvY2F0aW9uPSJzYW1wbGUyNDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTYiIGxvY2F0aW9uPSIuL3NhbXBsZTc5Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NiIgbG9jYXRpb249Ii5cc2FtcGxlMjU2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5ODgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk4OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjEyNjU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk4OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTYiIGxvY2F0aW9uPSJzYW1wbGUzMTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNyIgbG9jYXRpb249Ii4vc2FtcGxlMjcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzUiIGxvY2F0aW9uPSIuXHNhbXBsZTEzNS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTg5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5ODkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTFkYWNlYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5ODkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE4IiBsb2NhdGlvbj0ic2FtcGxlNjE4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY2IiBsb2NhdGlvbj0iLi9zYW1wbGU0NjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjkiIGxvY2F0aW9uPSIuXHNhbXBsZTc2OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczMjNhYTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MCIgbG9jYXRpb249InNhbXBsZTM5MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NCIgbG9jYXRpb249Ii4vc2FtcGxlNTQ0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYiIGxvY2F0aW9uPSIuXHNhbXBsZTI2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTkwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyMTZjOTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTkwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MyIgbG9jYXRpb249InNhbXBsZTY2My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNyIgbG9jYXRpb249Ii4vc2FtcGxlODA3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE0IiBsb2NhdGlvbj0iLlxzYW1wbGUxMTQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTkxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjMzM1OWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTkxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczIiBsb2NhdGlvbj0ic2FtcGxlNzMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjciIGxvY2F0aW9uPSIuL3NhbXBsZTgyNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMCIgbG9jYXRpb249Ii5cc2FtcGxlNTAwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMGI0NDMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDQiIGxvY2F0aW9uPSJzYW1wbGUzMDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTkiIGxvY2F0aW9uPSIuL3NhbXBsZTE1OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNSIgbG9jYXRpb249Ii5cc2FtcGxlMTE1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZmE0MzFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTMiIGxvY2F0aW9uPSJzYW1wbGU0OTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTIiIGxvY2F0aW9uPSIuL3NhbXBsZTQxMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzIiBsb2NhdGlvbj0iLlxzYW1wbGU0My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTk0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA5YWFmNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk1IiBsb2NhdGlvbj0ic2FtcGxlNjk1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgwIiBsb2NhdGlvbj0iLi9zYW1wbGUyODAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzgiIGxvY2F0aW9uPSIuXHNhbXBsZTEzOC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTk1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQyMDYwMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQxIiBsb2NhdGlvbj0ic2FtcGxlMTQxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM5IiBsb2NhdGlvbj0iLi9zYW1wbGU5Mzkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NiIgbG9jYXRpb249Ii5cc2FtcGxlNjYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTk2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyYTU0ZTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTk2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwOSIgbG9jYXRpb249InNhbXBsZTIwOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNCIgbG9jYXRpb249Ii4vc2FtcGxlNDE0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU5IiBsb2NhdGlvbj0iLlxzYW1wbGU3NTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTk3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxZDA4OGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NyIgbG9jYXRpb249InNhbXBsZTE0Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NyIgbG9jYXRpb249Ii4vc2FtcGxlMTc3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzczIiBsb2NhdGlvbj0iLlxzYW1wbGU3NzMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTk4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0NDU2MTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTk4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NCIgbG9jYXRpb249InNhbXBsZTg3NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNiIgbG9jYXRpb249Ii4vc2FtcGxlMjE2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAxIiBsb2NhdGlvbj0iLlxzYW1wbGUzMDEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTk5OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTk5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxNzhlZGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTk5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNiIgbG9jYXRpb249InNhbXBsZTgyNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NiIgbG9jYXRpb249Ii4vc2FtcGxlMTY2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI2IiBsb2NhdGlvbj0iLlxzYW1wbGU3MjYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjAwOWZlNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjNlZWFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzliMzlmYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEwMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTAwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhOWZmMGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTAwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTAxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTVjYTM3Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEwMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDc2MzIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEwMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEwMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTAzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwYTY4ZmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTAzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTA0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQ4OGMxZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEwNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MWRhNjU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEwNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEwNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTA2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3YjMxMzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTA2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTA3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDcwMjk5Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEwOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzM0ODQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEwOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEwOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTA5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwM2U0MGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTA5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTExLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4M2FlZGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTExMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODQ0ZTIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTExMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTExMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTExLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3NWRkYjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTExLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTExIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTExIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTEyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWExNWZlMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTExMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzcxYzU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTExMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTExNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTE0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0NjA4M2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTE0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTE1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQzZThjYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTExNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDRiOTlmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTExNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTExNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTE3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkZTlmOTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTE3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTE4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTUzYWIxNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTExOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzI2ZTJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTExOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwM2RmYjA5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTIwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmYwNWUwMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEyMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODU0NDA0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEyMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEyMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTIyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5ZGM5MDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTIyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTIzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTFjOWUxZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEyNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTk5ZGUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEyNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEyNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTI1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwMDAyZDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTI1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTI2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDAxYWJiNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEyNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzVlY2IyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEyNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEyOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTI4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiMWUwZDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTI4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTI5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjc2NTRhNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTY3NzE1Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEzMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTMwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmNzcxNzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTMwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTMxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGU2MDg5My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEzMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTMxNjJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEzMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEzMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTMzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyODU4ZDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTMzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTM0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjM4YzAyMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEzNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMWFhNWU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEzNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEzNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTM2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwZTIyZmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTM2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTM3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQwYzM5Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEzOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTM1OGQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEzOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEzOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTM5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmNjVkY2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTM5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3NTdhMGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE0MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjg1NDIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE0MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE0MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTQxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyMDBlY2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTQxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTQyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDk3YTBkYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE0My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDYwZDUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE0My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE0NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTQ0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhMGJhYzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTQ0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTQ1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzEyODhiZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE0Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTY4Y2FlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE0Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE0Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTQ3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkOTk3MDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTQ3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTQ4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDY3OTU1YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE0OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNmIzZGQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE0OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTM4MGUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTUwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjdiOTM5My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE1MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzQ3ZTBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE1MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE1Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTUyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0YWFmZGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTUzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU5NWQ1YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE1NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTlhZjhlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE1NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE1NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTU1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwZWE4NzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTU2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDdiNjUxMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE1Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OThhYmUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE1Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE1OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwNTVmYzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTU5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2RjYjM5YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGY2YjExZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE2MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTYwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5MWI0ZTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTYwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTYxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRkOTVlOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE2Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDA1NGUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE2Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE2My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTYzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3MmYzMTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTYzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTY0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2I5YTM0NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE2NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDY4NWVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE2NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE2Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTY2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjMzlmNjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTY2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTY3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTI3MDhlMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE2OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNWJjOTgyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE2OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE2OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTY5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2YzU0NjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTY5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1YTY5MjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE3MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTg0ZjYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE3MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTcwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE3MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTcxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0YzZkNTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTcxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTcxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTcxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTcyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM2MDg0Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE3My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjg2ZDQ5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE3My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTczIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE3NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTc0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxMGVjNjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTc0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTc1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjVlNGNmNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE3Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiN2IyMTkwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE3Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE3Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTc3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4Y2Y4NjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTc3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTc4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTA4Mjc3MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE3OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYWVjZDI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE3OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTAxYTljLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTgwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxODAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDA4NDIyNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxODAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxODEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE4MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjM0NzgwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE4MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE4Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTgyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0NDcxYWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTgyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTgzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxODMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjZlN2EzYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxODMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxODQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE4NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTBiZTQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE4NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE4NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTg1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiZGMzOWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTg1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTg2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxODYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzY0YzA1ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxODYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxODcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE4Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDdlNjVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE4Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE4OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTg4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhZTVkY2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTg4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTg5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxODkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWFiNWViNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxODkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODRkMTg1Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE5MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTkwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2Yzg3ODEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTkwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTkxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjI0Y2UwMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE5Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTM5NGYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE5Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE5My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTkzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiZmJmZjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTkzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTk0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjBmMmNlYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE5NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDRmNTdiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE5NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE5Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTk2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiOWVhNDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTk2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTk3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzM5YmQ5Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE5OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NGIxZmUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE5OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE5OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTk5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlZjg3MWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTk5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDA0ZjNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTMxYjEyNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIwMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjAwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1YzJjNjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjAwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjAxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWZmZjljYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIwMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NzgxYjI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIwMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIwMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjAzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmM2U3YWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjAzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjA0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjJiNzMwOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIwNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZThmNjI3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIwNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIwNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjA2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1ODE2OGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjA2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjA3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjE5NmFlMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIwOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTg3Yzk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIwOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIwOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjA5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2ZjA1MTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjA5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyOWI3MGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIxMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTcwMDFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIxMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIxMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjExLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzYWI1NWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjExLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjExIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjExIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjEyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzA2MzM2YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIxMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTA4OTJkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIxMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIxNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjE0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwYWQyNTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjE0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjE1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjRlMWJhYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIxNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzEyMDNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIxNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIxNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjE3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzMzNlZjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjE3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjE4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDcxN2ZiYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIxOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MmVlNTJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIxOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjY0ZDY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjIwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZDYyYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIyMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzJjYmI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIyMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIyMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjIyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0ZjcyMTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjIyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjIzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY5YzlkNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIyNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZWViZDgzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIyNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIyNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjI1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5MmU5YjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjI1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjI2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWM2YmQ3Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIyNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2JkNTIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIyNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIyOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjI4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmMGI0MWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjI4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjI5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmYzNzc2Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzJhZGJmMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIzMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjMwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0MDlmY2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjMwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjMxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWU1NTFhZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIzMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzA5N2I4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIzMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIzMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjMzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiZjk5MGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjMzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjM0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWM3MGQ4Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIzNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMWJkYjQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIzNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIzNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjM2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwNTljMTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjM2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjM3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDUwZjZmNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIzOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Y2IyYTIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIzOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIzOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjM5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxMDMyMGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjM5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5NmI3NzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI0MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzVmMjFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI0MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI0MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjQxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4OGU3MzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjQxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjQyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGVjYTNhYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI0My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjc2OWY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI0My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI0NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjQ0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzZTBhMmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjQ0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjQ1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjMxYzU2NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI0Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZmY1ZGM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI0Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI0Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjQ3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyOWE4ZmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjQ3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjQ4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZhMmQwZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI0OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWFkNzVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI0OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTU2MzA0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjUwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWJiNjA2Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI1MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTgwMzA1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI1MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI1Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjUyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxYTU4MTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjUzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMThkY2U4My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI1NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDllM2I3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI1NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI1NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjU1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1MjI3YjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjU2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2JkZWVmYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI1Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTdhNTExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI1Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI1OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxMmFiNWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjU5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ1ODE1NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDM0M2FmNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI2MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjYwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhMjI4YjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjYwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjYxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjAyYzExMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI2Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzQ1NWMxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI2Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI2My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjYzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmYTZjYzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjYzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjY0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWEyY2U3Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI2NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOGI1ZWU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI2NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI2Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjY2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4NDFmYTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjY2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjY3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDIyMDFlOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI2OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjNiZTFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI2OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI2OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjY5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyMmE3MTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjY5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxNTMwOGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI3MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NzRiNTE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI3MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjcwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI3MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjcxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1N2ViNjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjcxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjcxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjcxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjcyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQyN2RkOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI3My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjkxNGIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI3My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjczIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI3NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjc0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxZmNhYzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjc0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjc1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQxMmFjNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI3Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNWVmOGExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI3Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI3Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjc3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5MGY5M2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjc3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjc4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjIyODA1NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI3OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjdmZjc2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI3OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjUyODFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjgwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyODAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWYxNmNmNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyODAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyODEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI4MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDc0MDg4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI4MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI4Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjgyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyMWFkZWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjgyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjgzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyODMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTE0OGY1NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyODMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyODQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI4NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNmE4M2VkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI4NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI4NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjg1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxYTM2NWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjg1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjg2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyODYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJlZGVkOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyODYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyODcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI4Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOGM5OGVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI4Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI4OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjg4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmMWEwNzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjg4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjg5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyODkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM4NWQ5MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyODkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQ0NDY2Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI5MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjkwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwNDllNDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjkwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjkxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI3Mjg4MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI5Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTgzNTZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI5Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI5My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjkzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiMzE0NDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjkzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjk0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTk1Njg4OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI5NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OWU1ZWI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI5NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI5Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjk2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjYTNkMjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjk2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjk3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjgzYThiMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI5OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYWRiMWIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI5OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI5OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjk5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5ZDkxOTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjk5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODkxY2M2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjc2ZTM2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMwMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzAwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzYWZiYzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzAwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzAxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzg5NzIzMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMwMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNmQ3YmNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMwMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMwMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzAzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzYmQwNjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzAzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzA0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTFlYjA1ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMwNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTJiMGFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMwNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMwNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzA2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1ZjQyYWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzA2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzA3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzY2YjJkYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMwOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNmNmMTY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMwOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMwOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzA5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwZjhlNTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzA5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5ODMyNTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMxMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OGYxNTBmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMxMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMxMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzExLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkYjI1M2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzExLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzExIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzExIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzEyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDBkN2UwNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMxMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiM2JjZWI3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMxMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMxNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzE0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwMDYyNTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzE0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzE1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjI3Yjk0Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMxNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTM4NmQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMxNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMxNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzE3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzZTM1ZWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzE3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzE4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWMwOWRiMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMxOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzc5MDhhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMxOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzFmMTM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzIwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzIzYjI2My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMyMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MmE1ZWU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMyMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMyMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzIyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhODFjZDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzIyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzIzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmFmNDU5Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMyNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTAyYzhhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMyNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMyNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzI1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3YjBkNWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzI1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzI2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjFiN2VlOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMyNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NjkwYjUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMyNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMyOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzI4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2ZTRmYTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzI4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzI5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDIwYzcwZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDdlZDMzMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMzMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzMwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmMGU2YWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzMwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzMxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDY2OTliMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMzMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTgwNjUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMzMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMzMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzMzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzOGY0NzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzMzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzM0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGY5NjMyMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMzNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTdmMzg4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMzNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMzNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzM2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjMGU5M2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzM2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzM3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjIyZTBjYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMzOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzczZTRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMzOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMzOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzM5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0MmM0YjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzM5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxMzY2OGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM0MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMTg4NzAxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM0MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM0MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzQxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmNDFkYTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzQxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzQyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzYxZmZhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM0My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGIzNWI1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM0My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM0NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzQ0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4YzkyOTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzQ0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzQ1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzgzYmY3Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM0Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MGFkYWE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM0Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM0Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzQ3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0YWM0ODYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzQ3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzQ4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjUzNDdiNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM0OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NzczNDNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM0OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzU1Nzg0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzUwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRlZTFhOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM1MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDBkNGU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM1MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM1Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzUyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2ZTIzODIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzUzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU4OWE1Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM1NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiM2IxMjQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM1NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM1NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzU1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmOTI2NGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzU2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjk1Y2JhYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM1Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTVjYzNjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM1Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM1OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0MDZjY2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzU5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDJkNGU2OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmVjZDFmMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM2MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzYwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1YmI1MTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzYwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzYxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTNmMGRlYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM2Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTM4Y2FmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM2Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM2My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzYzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5ZmZjMTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzYzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzY0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2I4OTMzZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM2NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YWNlN2Q4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM2NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM2Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzY2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4NTM0YWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzY2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzY3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGNkMDYzMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM2OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYmIwNjk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM2OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM2OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzY5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwYzZlYWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzY5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkZTQxZWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM3MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNWZhYTViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM3MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzcwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM3MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzcxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyYWIyYTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzcxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzcxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzcxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzcyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBjMzg1MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM3My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjQ4N2YxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM3My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzczIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM3NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzc0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmNzI4NWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzc0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzc1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmI0ZWEzOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM3Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZGYyNzI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM3Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM3Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzc3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5ZDcxNjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzc3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzc4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTM3ZjE5NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM3OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOWM3MGYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM3OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZWVjMGViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzgwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzODAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTU1MWNmMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzODAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzODEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM4MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZGI1ZGUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM4MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM4Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzgyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwYzU2Y2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzgyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzgzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzODMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQ1MDM5OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzODMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzODQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM4NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzM2MzYjhjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM4NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM4NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzg1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwNWUxODIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzg1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzg2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzODYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzU1ZDk0ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzODYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzODcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM4Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZjQxZTRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM4Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM4OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzg4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyY2Q1NmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzg4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzg5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzODkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmY2MDlmNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzODkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjExMDVlMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM5MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzkwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5MThjNTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzkwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzkxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjdkMWE3ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM5Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MmY0MGRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM5Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM5My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzkzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjMzlmMjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzkzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzk0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZhYzBiOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM5NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTg0YTFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM5NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM5Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzk2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyNzBmYWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzk2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzk3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTZjNDIyZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM5OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjE4MGY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM5OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM5OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzk5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0ZGYxZjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzk5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZThjMGE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWEwODllNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQwMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDAwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzNjJmMTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDAwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDAxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjM2ZmYwOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQwMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTg0ZTZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQwMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQwMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDAzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0ZjUxZmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDAzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDA0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmY3ZGMwNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQwNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmJjNWE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQwNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQwNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDA2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlNDlhZDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDA2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDA3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzgwYWM1Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQwOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTJmN2RkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQwOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQwOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDA5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0OGVhZDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDA5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1MTczNWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQxMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOTg1MDhmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQxMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQxMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDExLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3NjZlZjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDExLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDExIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDExIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDEyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTVkNzIxYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQxMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMmQ5ODU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQxMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQxNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDE0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4ZTA3MDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDE0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDE1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWEwNTdhYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQxNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNmQ1OGY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQxNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQxNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDE3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhZmIyODEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDE3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDE4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWVmMzA1MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQxOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjE0NzBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQxOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzcwNDBiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDIwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTkxZWQyNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQyMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTAwZmUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQyMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQyMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDIyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkNzExMzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDIyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDIzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmY2MWVjNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQyNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjQ1OWZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQyNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQyNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDI1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4MzRmZmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDI1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDI2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWI1NjgyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Mjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQyNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDM0NzA0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQyNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQyOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDI4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkNTYzNmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDI4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDI5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Mjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGIyMGUzMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Mjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjM5YjQyYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQzMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDMwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3NTJkZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDMwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDMxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODc0N2U5NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQzMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OGM3Yzc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQzMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQzMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDMzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhZDY3ZTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDMzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDM0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWJjZjY0MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQzNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzdmOWNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQzNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQzNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDM2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxM2I4NGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDM2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDM3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Mzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzVkNmNiNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Mzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Mzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQzOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDkyOTk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQzOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQzOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDM5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3OTlmYmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDM5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhNzA1MGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ0MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMmRjOTU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ0MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ0MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDQxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5N2E2YjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDQxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDQyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2IzZGY4OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ0My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWJjODc3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ0My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ0NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDQ0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhMTViYjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDQ0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDQ1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzg5YjcyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ0Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTU1ZDc3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ0Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ0Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDQ3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5YjIxYWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDQ3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDQ4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDJjODI1Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ0OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZGE4MTI1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ0OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTM0OTUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDUwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjkwNTdlNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ1MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDI3ZGY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ1MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ1Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDUyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliNjEwNjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDUzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGU0OGY3YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ1NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMmJhYzI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ1NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ1NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDU1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlNmZlYjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDU2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2U4M2NlZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ1Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjA0N2Y3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ1Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ1OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1NjA0NTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDU5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWI4NWFiYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWY0MDdiNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ2MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDYwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwMTk3NzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDYwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDYxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDMyYzU3NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ2Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OWFjODkwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ2Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ2My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDYzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzMzg5YjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDYzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDY0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWE0MDZmNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ2NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMzVlZGYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ2NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ2Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDY2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiNzU5YTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDY2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDY3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Njcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjkyOGY5MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Njcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Njgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ2OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDJmZTc3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ2OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ2OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDY5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmMjVkNTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDY5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwYzEwZjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ3MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZWQwNmRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ3MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDcwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ3MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDcxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkNjNlMzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDcxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDcxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDcxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDcyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDZhMzJkMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ3My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTRkMjFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ3My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDczIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ3NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDc0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0ZGY2MDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDc0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDc1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNmZTQwMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ3Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTQ1OTZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ3Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ3Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDc3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmZDI0MWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDc3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDc4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Nzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTZhODg1ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Nzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Nzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ3OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjZjNGQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ3OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTE0MzcxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDgwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0ODAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ViYmY0OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0ODAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0ODEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ4MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNGY1YjFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ4MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ4Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDgyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1OWZlZTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDgyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDgzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0ODMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJkMGFhOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0ODMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0ODQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ4NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTg0Y2NkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ4NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ4NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDg1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyMmUwOWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDg1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDg2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0ODYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGU0YWM0NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0ODYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0ODcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ4Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNGE2ZDVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ4Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ4OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDg4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkM2ZlOWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDg4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDg5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0ODkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjEzMmJhNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0ODkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzk4ZmY1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ5MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDkwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyZjNlMDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDkwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDkxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmE5OThlMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ5Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzEzZGIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ5Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ5My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDkzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViNjQ2OTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDkzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDk0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDE1YTkwMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ5NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDllYWRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ5NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ5Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDk2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkYTdiNjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDk2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDk3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWZiMjQxOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ5OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjlmNGU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ5OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ5OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDk5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlOGQ5YjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDk5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDE4NTY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDY4ODEyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUwMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTAwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMmNhODUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTAwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTAxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTg0ZTBkMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUwMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDJhMmQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUwMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUwMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTAzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhMjAyYjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTAzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTA0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjk0NGFkYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUwNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODdlNzE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUwNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUwNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTA2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4NjBmYjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTA2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTA3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzViNmVjMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUwOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmIzZGNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUwOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUwOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTA5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0MDkzZjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTA5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlZTJhNTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUxMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMWNiZTQ0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUxMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUxMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTExLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxODdkZGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTExLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTExIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTExIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTEyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI5MzE4NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUxMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTM4OTI1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUxMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUxNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTE0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkZjQwYzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTE0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTE1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDM4NDM1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUxNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYjAyYzExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUxNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUxNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTE3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiYWRmMWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTE3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTE4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjI4ZmNmOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUxOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTVlYzJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUxOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiM2UyNWU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTIwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjNlNTJlYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUyMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzMwNTQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUyMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUyMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTIyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmYTlhYzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTIyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTIzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTdiMjhjMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUyNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjY1NzYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUyNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUyNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTI1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmZTdhNGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTI1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTI2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDU4Y2ZlYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Mjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUyNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjJhODJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUyNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUyOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTI4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2YTE5ZjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTI4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTI5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Mjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNhYjUxYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Mjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjE1MTJhOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUzMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTMwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5YTcyODMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTMwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTMxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2JlNjZjZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUzMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDlhM2I2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUzMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUzMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTMzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5OGU3MWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTMzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTM0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDM0NjYyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUzNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjQ1ODRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUzNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUzNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTM2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5OGM4ODQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTM2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTM3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Mzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzA1NTU2YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Mzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Mzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUzOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NWNkNDJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUzOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUzOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTM5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyNTc0YjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTM5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0MGY3OGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU0MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjc0YzRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU0MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU0MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTQxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmYTc0ZDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTQxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTQyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTEzNDcyMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU0My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTg4ZDkyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU0My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU0NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTQ0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllZjljNjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTQ0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTQ1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmE4ODM3Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU0Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNmIwNjA4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU0Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU0Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTQ3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzMTUzMzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTQ3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTQ4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTA2NTVmMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU0OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjUzYTc1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU0OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZGFmYzQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTUwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODlmOTMzMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU1MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzljZDRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU1MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU1Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTUyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhYTlmMDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTUzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjlmZDZkMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU1NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTc4YzRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU1NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU1NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTU1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5YzRiZTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTU2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjMxYzM3MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU1Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzM1NjA4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU1Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU1OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzYmMzOTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTU5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYThiMTI1OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzkzYjMyMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU2MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTYwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlMjMxOGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTYwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTYxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGU5YmYyZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU2Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTYxYTQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU2Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU2My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTYzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllZTMxYmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTYzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTY0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2VmZDNhYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU2NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTE4MzRiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU2NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU2Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTY2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliMmQzM2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTY2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTY3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Njcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTZkOGYyZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Njcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Njgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU2OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwY2ZjOWI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU2OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU2OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTY5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzNTc0MGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTY5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlZDA3NzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU3MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NmNhNTkyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU3MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTcwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU3MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTcxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiNmRjMGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTcxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTcxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTcxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTcyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTFkYzZjMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU3My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjExNTEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU3My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTczIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU3NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTc0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzMzJiODAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTc0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTc1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODgwZDgxZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU3Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzM5ZjgxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU3Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU3Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTc3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjMjVhNzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTc3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTc4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Nzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzgwNmM3Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Nzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Nzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU3OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlN2ExMzk2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU3OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YWU1MWQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTgwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1ODAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTExYmNjMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1ODAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1ODEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU4MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzBiYjdkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU4MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU4Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTgyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmYWUxODQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTgyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTgzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1ODMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzMwODhkZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1ODMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1ODQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU4NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MmQ0YzA2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU4NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU4NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTg1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxZDBkZjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTg1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTg2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1ODYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDIwMzU3OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1ODYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1ODcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU4Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDRjMDE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU4Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU4OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTg4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1M2E4NjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTg4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTg5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1ODkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGE3YmQxZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1ODkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU4YjU1ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU5MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTkwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxMDUwNTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTkwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTkxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWNiYmRjNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU5Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjA0ZGNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU5Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU5My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTkzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzNWI3MzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTkzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTk0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmZiNGM0YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU5NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYmM2N2MzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU5NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU5Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTk2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlMDdjYmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTk2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTk3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzdiNTNkNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU5OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OGIyMDlhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU5OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU5OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTk5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhYzhkNWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTk5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjIyZDMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjc2NjAwNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYwMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjAwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxMGYyNGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjAwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjAxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWYxMjE2YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYwMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOWExYmI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYwMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYwMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjAzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmZGExZDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjAzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjA0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTAyYTg5NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYwNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTY3M2FiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYwNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYwNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjA2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxMjRmNTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjA2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjA3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDZkMmRkYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYwOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OGY5NGJkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYwOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYwOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjA5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3NGFhOTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjA5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2MWE0ZGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYxMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDhiNjk1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYxMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYxMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjExLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxNjBhOTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjExLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjExIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjExIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjEyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGZmY2EwMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYxMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTNhMmJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYxMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYxNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjE0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4YWFjYzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjE0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjE1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzEzODQzMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYxNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTcwMTRiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYxNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYxNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjE3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0OTdlZjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjE3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjE4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGNhNWRmNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYxOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYmY2NDQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYxOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTkwYTUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjIwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzM4ZjBhZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYyMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzBjZjVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYyMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYyMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjIyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5MjdkNWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjIyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjIzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTg1YmUyYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYyNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Zjk5MzE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYyNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYyNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjI1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkODQ5MGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjI1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjI2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQxNGYxYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Mjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYyNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YmE0MmM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYyNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYyOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjI4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4OTU0NjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjI4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjI5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Mjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTU5NDdlMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Mjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzA3NzJkMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYzMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjMwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyNmM2ZWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjMwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjMxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg1NjQ3NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYzMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMmQyNmIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYzMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYzMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjMzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhN2Y1NzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjMzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjM0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjA3ZjY4MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYzNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDFiYjJkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYzNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYzNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjM2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjMTZhMGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjM2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjM3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Mzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGRhZmJiYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Mzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Mzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYzOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWI1ZDkwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYzOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYzOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjM5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzMTVhNjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjM5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjNTRlOWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY0MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjBlOTllLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY0MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY0MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjQxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxYzRkN2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjQxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjQyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjFiNTgyYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY0My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2M2JkNjNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY0My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY0NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjQ0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiOTY5NTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjQ0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjQ1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzJiNGU2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY0Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTgwNjYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY0Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY0Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjQ3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2YzI3ZWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjQ3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjQ4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTc1MzQ2Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY0OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOGY3YWQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY0OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjY4MmM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjUwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWMzYzNhMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY1MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTg1ZmJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY1MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY1Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjUyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4MzI2NDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjUzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTAyYmExZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY1NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzZhNjVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY1NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY1NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjU1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiOGZlNzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjU2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTFkN2UwZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY1Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjFkNDczLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY1Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY1OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzZTA1OTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjU5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzI3YzliYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE0MDA0NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY2MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjYwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3YjQyMGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjYwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjYxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQwNzk1Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY2Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYWZmMjA5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY2Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY2My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjYzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhODM0Y2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjYzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjY0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGI2Y2YwYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY2NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzhmMDQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY2NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY2Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjY2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2M2U5OTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjY2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjY3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Njcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWUyMjAyZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Njcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Njgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY2OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NWUwOTA3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY2OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY2OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjY5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzYzExYmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjY5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4YjllNjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY3MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDg3NzlmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY3MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjcwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY3MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjcxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyMWFjZjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjcxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjcxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjcxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjcyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmVhYWE3Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY3My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OWM4ZTYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY3My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjczIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY3NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjc0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1YTc4YzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjc0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjc1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2YyN2RlZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY3Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmQyMWM0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY3Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY3Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjc3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlMGU2YjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjc3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjc4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Nzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjExODY1YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Nzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Nzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY3OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNGFhM2E1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY3OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZWIzMDk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjgwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2ODAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQ2NTJkMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2ODAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2ODEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY4MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzQ2NzY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY4MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY4Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjgyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmZTA4NjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjgyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjgzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2ODMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDEwNDE5NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2ODMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2ODQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY4NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTRiY2NjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY4NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY4NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjg1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0ODRjNWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjg1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjg2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2ODYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTRkZWM5Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2ODYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2ODcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY4Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1N2Y2YmViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY4Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY4OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjg4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3NDk4ODMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjg4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjg5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2ODkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjRlOTA4Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2ODkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGE0MzEzYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY5MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjkwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlOTgwODAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjkwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjkxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWUwMmZmMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY5Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOTU2NzM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY5Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY5My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjkzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0ODI0YTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjkzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjk0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzkxNWM5OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY5NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDEyZTdjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY5NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY5Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjk2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5ZDk0NDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjk2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjk3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjVlNTFlNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY5OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YWJiZGQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY5OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY5OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjk5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlMGVjNTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjk5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMDYwYTcyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTU5NTAyYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcwMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzAwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2YTFmMzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzAwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzAxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWUwNmUxZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcwMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTI5Njc5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcwMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcwMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzAzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5YTMxYWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzAzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzA0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRlNzZjMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcwNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDM5YzY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcwNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcwNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzA2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwNzNmZmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzA2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzA3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQ5OWJjNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcwOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODEyZTM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcwOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcwOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzA5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczM2IyYTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzA5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzMzcwZWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcxMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YWJiNTcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcxMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcxMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzExLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxYzY5ZTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzExLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzExIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzExIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzEyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE0ZmYwYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcxMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTA2YzZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcxMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcxNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzE0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2NzhkMDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzE0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzE1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTYxNWU5Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcxNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMWNkZWIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcxNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcxNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzE3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMTljOWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzE3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzE4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTJhZTU5YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcxOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzliN2VhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcxOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzdmMzRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzIwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2JmOTBlNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcyMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZWY1YjcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcyMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcyMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzIyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2NmIyNDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzIyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzIzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTg1ZWY5Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcyNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjk1NjhjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcyNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcyNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzI1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0OWViZWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzI1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzI2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzNmYWFhZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Mjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcyNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjBhZTJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcyNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcyOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzI4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2ZjgwNDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzI4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzI5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Mjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2QwZmUxMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Mjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTBkNmRhOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTczMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzMwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1Nzk3ZmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzMwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzMxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWIzNmM5Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTczMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjcwYjM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTczMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTczMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzMzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlMzllNTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzMzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzM0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODc5OWU1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTczNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOWQ4ODE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTczNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTczNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzM2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1ZGMyYmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzM2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzM3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Mzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBiNDVmMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Mzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Mzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTczOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZWVkNmNjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTczOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTczOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzM5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5MGJkMTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzM5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2MDM1ZDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc0MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDg5YTU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc0MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc0MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzQxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllOTE1ZGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzQxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzQyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQ2YzA4MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc0My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOGYzNGY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc0My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc0NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzQ0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0Nzg4MTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzQ0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzQ1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGFhMTdmZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc0Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzE2Zjc3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc0Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc0Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzQ3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjODQ1NDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzQ3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzQ4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDZiODg1ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc0OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmMwZDBmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc0OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzY2E1Zjk4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzUwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmMxYmVlZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc1MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTQ1NWEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc1MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc1Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzUyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3ZTYwNDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzUzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjZmZjI5MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc1NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYTY4ZDRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc1NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc1NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzU1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzZjIxNGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzU2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjhlYWExZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc1Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YmY3MmI3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc1Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc1OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4MzcyMTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzU5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDAxMmRlZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNThmNWJlOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc2MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzYwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiZTBjNzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzYwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzYxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTIwNDAzYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc2Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzVhOTJkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc2Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc2My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzYzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1MDM5NjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzYzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzY0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTVhYWMyMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc2NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzQ5Y2I0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc2NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc2Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzY2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkN2RjYmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzY2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzY3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Njcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTNhMWZiNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Njcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Njgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc2OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDBhMDAwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc2OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc2OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzY5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwOWE5ZjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzY5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlMWY2MmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc3MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOGY2ZWNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc3MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzcwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc3MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzcxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxYmUwNTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzcxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzcxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzcxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzcyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTg1ODU3My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc3My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTg3ZjI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc3My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzczIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc3NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzc0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhMjIzMDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzc0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzc1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMThhMGYzMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc3Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MWQ2YmZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc3Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc3Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzc3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyMmE2ZmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzc3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzc4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Nzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjY4OWI5Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Nzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Nzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc3OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYWFkYTY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc3OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjk3ZDhkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzgwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3ODAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWRiNmNlNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3ODAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3ODEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc4MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MGVhMzg5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc4MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc4Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzgyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4NDkwODIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzgyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzgzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3ODMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJhYTQ2NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3ODMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3ODQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc4NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTI3MTY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc4NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc4NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzg1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhOGIyZWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzg1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzg2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3ODYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzI0ZGIyNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3ODYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3ODcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc4Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMGRkYjk4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc4Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc4OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzg4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5NzFkZWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzg4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzg5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3ODkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjYyMDVmMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3ODkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTM4NzNiZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc5MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzkwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5NjI2YzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzkwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzkxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGRjYWE0MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc5Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTEwNDFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc5Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc5My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzkzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzYzAwZjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzkzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzk0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDVhNmZhYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc5NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTM4ZjkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc5NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc5Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzk2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1NTRhY2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzk2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzk3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzRmYzRhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc5OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjMwMzI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc5OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc5OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzk5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3MTBmZTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzk5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDcxYjFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRhODJlMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgwMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODAwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhMTc2YzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODAwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODAxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTNhNGIwNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgwMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNGE1NDZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgwMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgwMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODAzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkZDE5NzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODAzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODA0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQ3NjQwYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgwNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTdmOGU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgwNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgwNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODA2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0Y2Q2ODYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODA2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODA3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmMwOTVhZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgwOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTQxMWVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgwOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgwOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODA5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiMDAyYjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODA5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5YzZiZTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgxMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmYxMDdjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgxMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgxMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODExLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwMmMzM2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODExLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODExIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODExIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODEyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzUyMDM3Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgxMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYTU5NWY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgxMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgxNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODE0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1MDc1M2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODE0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODE1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI4Njg0YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgxNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OWNiYzAwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgxNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgxNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODE3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1ZGFjNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODE3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODE4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWNlNDNjMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgxOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4M2MwMmI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgxOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMWFkZDYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODIwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGZjZmQ0NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgyMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDBmY2QyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgyMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgyMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODIyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiNjc0MjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODIyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODIzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWIxN2QwNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgyNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkN2YxNDIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgyNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgyNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODI1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxYWQ5NTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODI1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODI2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGNiYzAwYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Mjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgyNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDRjNTE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgyNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgyOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODI4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyMjU3OTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODI4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODI5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Mjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWViOTI2Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Mjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjllYzk4NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgzMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODMwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwYWI3MzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODMwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODMxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmVkYzhmMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgzMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzUzNmI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgzMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgzMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODMzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiMGQ4MzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODMzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODM0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDk0YWRiMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgzNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjUxODE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgzNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgzNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODM2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4MDUyZDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODM2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODM3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Mzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzU4MjFmYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Mzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Mzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgzOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjNhMTcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgzOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgzOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODM5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkMTU1MzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODM5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjZWQ2MGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg0MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Njk2Yjk4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg0MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg0MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODQxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExMmI1MjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODQxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODQyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjI1NDJmNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg0My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MWM0NzlmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg0My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg0NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODQ0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiOTUxNzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODQ0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODQ1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2YzYjFjNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg0Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjg5NWNjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg0Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg0Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODQ3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1MDhlMGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODQ3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODQ4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWM2MTIyNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg0OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjJhMzliLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg0OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjQ5MjdjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODUwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzIxMTk0NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg1MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTdlOTNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg1MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg1Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODUyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0MzQ0MDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODUzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmE2ZjczNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg1NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NmI0MDdiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg1NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg1NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODU1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhNTYzNmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODU2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGIzZmQxYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg1Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzIxMzM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg1Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg1OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllMjIzZjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODU5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjc4NTAwOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWExZDA3ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg2MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODYwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2YTVjODguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODYwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODYxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGE5ODJiMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg2Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OWEwYmQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg2Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg2My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODYzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3MmE1MzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODYzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODY0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjc0NTI1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg2NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTVjN2I0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg2NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg2Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODY2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5MTU2ZGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODY2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODY3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Njcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjg4OGI2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Njcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Njgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg2OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTk5NmI3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg2OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg2OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODY5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5NzJjMDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODY5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5N2IzNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg3MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkY2JmMDJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg3MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODcwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg3MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODcxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhMGQ1MzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODcxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODcxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODcxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODcyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2VhZGE0Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg3My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYmIzMjY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg3My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODczIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg3NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODc0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzYmRjY2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODc0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODc1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDZkYzYzOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg3Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzZmZGZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg3Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg3Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODc3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwMzE4YzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODc3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODc4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Nzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjkzMjQ5ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Nzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Nzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg3OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjYxMjAxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg3OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzNkYzIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODgwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4ODAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTEwMTRhMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4ODAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4ODEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg4MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjRmMmJkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg4MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg4Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODgyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2ZmI3ZjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODgyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODgzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4ODMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODc1OTI5MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4ODMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4ODQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg4NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmY2RhNTc4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg4NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg4NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODg1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0M2I1MGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODg1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODg2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4ODYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJmMGJhNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4ODYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4ODcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg4Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjBjODk0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg4Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg4OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODg4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNTJmODMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODg4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODg5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4ODkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGIzY2Q3MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4ODkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGVmMjJmZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg5MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODkwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzODQ0MDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODkwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODkxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDc2NzU5MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg5Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOWUyZDE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg5Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg5My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODkzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjYjczNzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODkzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODk0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODgyOGFmZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg5NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDIxNTA4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg5NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg5Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODk2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3NDViY2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODk2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODk3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWM2ZDFiZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg5OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYTIxMzI3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg5OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg5OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODk5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhOGI3OWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODk5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZmNkYTMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI3ODUxMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkwMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTAwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlYjk2YWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTAwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTAxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjYyZGQwMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkwMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzA0ODM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkwMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkwMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTAzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwNTA5OTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTAzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTA0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjVlMDgwYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkwNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDQyNTZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkwNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkwNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTA2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmM2FiY2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTA2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTA3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkYmYzMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkwOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWQyOGU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkwOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkwOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTA5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyOThlOWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTA5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjMGU0MzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkxMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Mjk3MjU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkxMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkxMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTExLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0ODEwODcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTExLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTExIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTExIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTEyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTI0MTRlNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkxMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODdiNjYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkxMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkxNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTE0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3MTQ1NWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTE0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTE1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWVlM2Y4Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkxNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhN2JiZjJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkxNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkxNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTE3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzNTE4NTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTE3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTE4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDU5NzQ5Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkxOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjM2Q1ZTk5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkxOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDQzOGFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTIwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjBjNmNlZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkyMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzhjZTM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkyMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkyMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTIyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiOWQ2MjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTIyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTIzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI1YTJkOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkyNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmY3OTZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkyNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkyNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTI1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxYTI4YzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTI1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTI2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWFlM2Y5NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Mjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkyNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjMwYWY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkyNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkyOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTI4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyYmNkYmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTI4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTI5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Mjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2M3YmM2Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Mjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTdlZGUyNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkzMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTMwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2M2FkOTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTMwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTMxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDcyNmI0ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkzMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4N2E1MWJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkzMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkzMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTMzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyNDRkNDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTMzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTM0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGYzNmE4NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkzNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjI0OGUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkzNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkzNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTM2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkY2Q3N2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTM2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTM3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Mzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGM5OWQ4Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Mzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Mzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkzOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZmNiZDEwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkzOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkzOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTM5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjMDNmZWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTM5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3Y2MxNmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk0MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZGUwNjVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk0MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk0MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTQxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1OGNhZjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTQxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTQyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWUzMDBhYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk0My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZWE3NGJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk0My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk0NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTQ0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1Nzk2ZGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTQ0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTQ1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWU5M2U1NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk0Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjc1YzhlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk0Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk0Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTQ3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OGRkN2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTQ3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTQ4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjAxMWRmMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk0OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMTBmYWE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk0OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjlhN2Q1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTUwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDU2NTg5Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk1MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OGYyNWVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk1MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk1Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTUyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2MDgzMGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTUzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThlOWViMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk1NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MWExZTY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk1NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk1NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTU1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiNDhmMDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTU2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmMyNWNhYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk1Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMGMzYTMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk1Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk1OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0NWQyNjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTU5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWZjNDhkZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmQzNjQ4MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk2MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTYwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2ZmYxNDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTYwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTYxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRlMzVkOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk2Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OGM4OWYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk2Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk2My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTYzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlOTBlZTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTYzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTY0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzdjYjI3ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk2NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDY5ODM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk2NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk2Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTY2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3ZTIwMzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTY2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTY3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Njcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjMxNGRkNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Njcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Njgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk2OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2M2E3OWE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk2OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk2OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTY5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0ODFiMjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTY5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyY2QzOTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk3MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NWJlZWQxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk3MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTcwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk3MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTcxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyYTJhMDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTcxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTcxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTcxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTcyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2RmNzFiNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk3My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Yzc0ODM2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk3My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTczIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk3NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTc0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwNGRmMDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTc0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTc1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWJlN2E0OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk3Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTJkMGRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk3Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk3Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTc3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4NzcxNDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTc3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTc4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Nzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmEwOWJmZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Nzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Nzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk3OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDVkOTVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk3OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTY0NmRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTgwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5ODAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODI5NDEyYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5ODAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5ODEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk4MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDFjYmFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk4MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk4Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTgyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjYTQ4OTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTgyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTgzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5ODMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjcxY2JiNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5ODMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5ODQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk4NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjQwMWVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk4NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk4NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTg1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxOGU4MWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTg1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTg2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5ODYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM1ZjYyMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5ODYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5ODcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk4Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDZkNzdmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk4Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk4OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTg4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2NDJjMWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTg4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTg5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5ODkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzliNDliOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5ODkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTM0YmEwMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk5MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTkwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2Y2Y3ZGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTkwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTkxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzA0YTM0OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk5Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDZjYjE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk5Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk5My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTkzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3M2UwNTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTkzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTk0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTU3MDRhZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk5NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTFlOTgyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk5NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk5Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTk2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5ZjMxMDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTk2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTk3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQyZjM2ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk5OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTMwYjYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk5OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk5OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTk5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4MTg2YTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTk5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyMmE2YzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTNmYzFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8wIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8wIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMTIueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmI3MDdlYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2YmI4ODEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk3IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU5Ny54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg3IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU4Ny54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzN2I3MTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWRjZjg5My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNzkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNTkueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTAwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTAwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4YWFiMmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTAwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDIyZjJmYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTAxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMDEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDgxODM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEwMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDcyMjRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEwMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTA0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTA0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0MGIyYjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTA0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDBkZmZhNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTA1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMDUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODMyYTFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEwNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjdlYjZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEwNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTA4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTA4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzYzVkOWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTA4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWI3YmQ4Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTA5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTA5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMDkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ZlOTljYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTExIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMWU0OGEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzExIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNzIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMzcueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTEwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTEwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5M2Y0NWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTEwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThmYTdkMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTExLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTExIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTExIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMTEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjg0NDBkNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTEyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMTIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzM2Y2JmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTExMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjk0NDhiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTExNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MWI1OThlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTExNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTE2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTE2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlMzA0M2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTE2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTE3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTE3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlOTQ5Y2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTE3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGY3Mzg2NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTE4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTE4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMTgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjdhN2YwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTExOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTAxNjgxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3MmQ3MjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTIiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDYiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTQ2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTIiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTUyLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTQ3ZGMxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEyMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTIxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTIxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1MWJhYmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTIxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDhhZGQzOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTIyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMjIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTNlMTU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEyMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZmM3OTMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEyNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTI1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTI1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3MTRjNzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTI1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODMwMDdkNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTI2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMjYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTY2MDBlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEyNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTI4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTI4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhMWU4YzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTI4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmU5ZTE5Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTI5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTI5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMjkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzMWQ2ZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTU3Y2JjOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzQiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTc0LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzMzYmExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEzMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTMxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTMxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4Y2Y3NTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTMxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTA5Nzg4Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTMyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMzIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OWFjNjJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEzMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTM0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTM0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzY2Y1ZTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTM0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTc4NDc0Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTM1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMzUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTY0M2NiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEzNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTM3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTM3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3NzcwYTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTM3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzllOTY2ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTM4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTM4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxMzgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzExIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzY3OTFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEzOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTdkNDgwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyMTE1MWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTQiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjQiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTI0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjhmNmI5OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNDAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDAwYWYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE0MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmMzYwOGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTQyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzhmNThlMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNDMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2Q5MzZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE0NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQ1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQ1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5MjE3YTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTQ1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjA0MzY5YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQ2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNDYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODg1ZWU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE0NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQ4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQ4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxYmIxMzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTQ4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMThiNmJiNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQ5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQ5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNDkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGNjYTNjMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDNlMDc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE1Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3NC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU1IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU1NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI4IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUyOC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBhZmFjNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNTAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDVkNTIwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE1MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDE5OTVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE1MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTUzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmMWMwNjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTUzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2E5ZjNkYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWM5MzdkYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNTUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg2MTM1NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNTYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzAzMzZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE1NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjZDU3NzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTU4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTU5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5OGQzOWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTU5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTU5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3NjAyYjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTYueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTY4NDNjYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTYueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzczIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNTcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU4LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NzZhNWZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE2MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTYxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTYxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkYWRkNTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTYxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWMxNjQ4Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTYyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNjIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTA2NWI2YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTYzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNjMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDc5M2JkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE2NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTY1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTY1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwNGNmMjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTY1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWMxYTk2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTY2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNjYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzcyMTA1OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTY3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNjciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTc2ZDUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE2OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTY5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTY5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3M2YwZDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTY5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTY5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkNGQzMzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTcueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQxMjA3Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTcueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMTEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlODkueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTcwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTcwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1ZjZhNjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTcwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTcwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDZkNjdkOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTcxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTcxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTcxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNzEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTYyMmM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE3MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTczLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTczLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxOGFmMzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTczIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTczIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzY1ZjY2Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTc0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNzQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzczIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMGE3NmNjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE3NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTc2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTc2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyYjJlNWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTc2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2YxZmFmMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTc3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNzciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTE1YWUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE3OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTc5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTc5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwNzE5YmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTc5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTc5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlYzQxNzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTgueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQwYzUxYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTgueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNzMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzIueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTgwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTgwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmNjM1YTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTgwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTgxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTgxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmYzU2MmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTgxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxODIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxODIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzI4ZjQ4ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTgyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxODIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTRiM2I5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxODMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE4MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTg0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTg0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2Y2QzYjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTg0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxODUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxODUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2IwNGYyZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTg1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxODUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMWZjMjc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxODYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE4NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTg3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTg3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxMGIzYjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTg3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxODgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxODgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Y4YzI0OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTg4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTg4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxODgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOWI0MTcxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxODkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxODkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE4OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDcyMjIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5YzVjMWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTkiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgxLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTkzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTYiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTU2LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTY3Mzc2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE5MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTkxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTkxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmM2QwZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTkxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjAyMmRmNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTkyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxOTIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDU1NjNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE5MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTk0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTk0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlM2FkYmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTk0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzY4MzUzMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTk1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxOTUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGZmYmFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE5NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTVmZjcyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTE5NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTk4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTk4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkNmZkMTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTk4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGE1ZjlkMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTk5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTk5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxOTkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzExIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4ZDZmNzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MThhMmQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3OC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUwIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU1MC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ0IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU0NC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlMTMwNTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODg1MWMxZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNzIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzEueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjAwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjAwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxOTI0YTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjAwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzcwNzRhNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjAxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMDEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MWY0YzMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIwMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjAzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjAzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliMTVhODkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjAzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzRkODllOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjA0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMDQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMThmZmExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIwNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjA2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjA2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzZTE2YTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjA2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzRkMzc0Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjA3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMDciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzczIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTU2MzEwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIwOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjA5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjA5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2NmU0MWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjA5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjA5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlMmY5MDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWNhZDUxNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzYueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjEwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjEwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhNDNjNmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjEwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDVmZmM4NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjExLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjExIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjExIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMTEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzkxN2UzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIxMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjEzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjEzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiOWNmNjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjEzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjI4NGJjNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjE0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDFiZDAwOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjE1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMTUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzZhZDNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIxNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmM2MWMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIxNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjE4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjE4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiNzhiMGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjE4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjE5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjE5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3OTg0YTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjE5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjE5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2ZTVmNDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTE1MzUyMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTUwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTE5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDcyNTc2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIyMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjIxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjIxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxZTcwMzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjIxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzJmYjVhNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjIyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMjIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjY3MmI1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIyMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjI0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjI0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjMDk1NWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjI0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZjOWFkYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjI1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMjUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmZmZWI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIyNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjI3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjI3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhZjlmM2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjI3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU1YWEyNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjI4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjI4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMjgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzFkMDIwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIyOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZWQ5MmM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhNTdhNWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjMiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY0IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU2NC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIxIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUyMS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQwNDhkNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjMwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMzAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmM2EzZTNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIzMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjMyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjMyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2MjdiMzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjMyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTI3YmYzMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjMzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMzMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOGQ2NmE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIzNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjM1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjM1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxZmZmN2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjM1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTRmODM3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjM2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMzYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNWQ4Zjk4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIzNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjM4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjM4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4MjliYzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjM4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDM4YjM2YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjM5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjM5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMzkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWNjNjc1Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjA2NTIwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI0Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Ny54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY2IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU2Ni54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY0IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU2NC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2E0NDdjMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNDAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NjdlMTlmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI0MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjZTZiM2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjQyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY0MjU5ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNDMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNGY0NzAwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI0NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQ1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQ1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1OTM5YzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjQ1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjdlZTIyZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQ2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNDYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODY3MjhjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI0NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQ4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQ4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzNGIwODcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjQ4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGU4OWZjYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQ5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQ5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNDkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2YTlhMTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGU4MDI5Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlODIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlOTUueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjUwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3Y2NmNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjUwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZjZjZiZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNTEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTI2MDQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI1MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjUzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0MDJkOWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjUzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2ZGI1YzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjU0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDU1MjVjOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNTUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGY5NGI0Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNTYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YWM3ZjJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI1NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhNmM2M2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjU4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTExNTE0ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNTkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmYyM2I3ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjYueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYWUzNjk2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI2Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUyIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU1Mi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTgueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjYwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjYwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5MzFlNzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjYwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQwY2Q2NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjYxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNjEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZWY4NTYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI2MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjYzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjYzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1ZGZjY2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjYzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQyZTIxNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjY0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNjQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4N2MyZjc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI2NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjY2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjY2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlNGViOTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjY2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2FiMmViNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjY3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNjciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDFiMzMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI2OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjY5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjY5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzZDFkMTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjY5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjY5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlODBkYjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjcueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTkxNTExOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjcueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMzkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMzcueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjcwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjcwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2MzQ0ZjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjcwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjcwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmI5YjNlYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjcxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjcxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjcxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNzEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzM1NjU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI3MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjczLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjczLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjNGJkOTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjczIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjczIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGM1MTJmMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjc0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNzQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNWMwMDUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI3NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjc2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjc2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1ZTk3NTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjc2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTdlYzgxYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjc3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNzciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzYzMjk2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI3OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjc5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjc5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlMjgyYzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjc5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjc5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2M2E5MDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjgueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTU5YzJlMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjgueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNzgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNDYueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjgwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjgwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjZmFjNjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjgwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyODEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyODEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDY1ZGU3My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjgxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyODEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTM5ZjRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyODIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI4MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjgzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjgzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhMjViNmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjgzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyODQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyODQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJhODQyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjg0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyODQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyODUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyODUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmMzNDQ3YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjg1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyODUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMGI5NTVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyODYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI4NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjg3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjg3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5YTZhYTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjg3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyODgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyODgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQ2ZDkzZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjg4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjg4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyODgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzI3Yjk0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyODkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyODkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI4OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTI3ZTMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4NjE1YTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjkiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTUzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTQ5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMTg1OWUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI5MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjkxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjkxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyMGE1MDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjkxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzY1MTk4Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjkyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyOTIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MWJmNDVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI5MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjk0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjk0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjNWI1NTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjk0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjI2YTYxZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjk1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyOTUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmJlMDFlMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjk2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyOTYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjY2U0OGE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI5NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjk4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjk4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwMTg4Y2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjk4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjM2MGM1Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjk5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjk5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyOTkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTc3NTU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZmMGU5NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzgiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTc4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjciIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTY3LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ1MmRhMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNGY0YjgxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMwIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkyIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU5Mi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc2IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3Ni54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjljMmM4YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzAwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMDAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzA2NzQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMwMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzAyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzAyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyNWYxMTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzAyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWE5Y2U4MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzAzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMDMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYWIxODI1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMwNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzA1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzA1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2OTAwM2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzA1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzgxOWQxYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzA2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMDYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxY2I0NDkwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMwNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzA4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzA4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzYjgyNzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzA4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTdhOTMwOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzA5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzA5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMDkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmY0NmIwNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTMyZjA4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMxIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Ny54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg0IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU4NC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ2IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU0Ni54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWU2NWZlMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzEwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMTAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZGZhMTllLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMxMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzEyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkMWY1MTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzEyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2QzNmE3OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzEzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMTMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTRiMDA0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMxNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzE1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzE1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmMWVjOWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzE1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzE2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzE2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjMTRjMTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzE2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjI3NDg2Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzE3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMTciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MGZjYWY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMxOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzE5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzE5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyMWY3NzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzE5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzE5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwZjE1NTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTIyZWMxMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTIiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTkyLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTg1ZDQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMyMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzIxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzIxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhMmM5OWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzIxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDhjMGUwZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzIyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMjIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OWZjOTExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMyMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDI2NGYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMyNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzI1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzI1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjMTZkNWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzI1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmUzOWUwMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzI2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMjYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzE4ZTg5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMyNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzI4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzI4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwYmZmMjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzI4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQ0ZmQxMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzI5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzI5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMjkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjZhODA4MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZGU4YmEwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMzIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Mi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkzIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU5My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEwIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUxMC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjYzNzZmYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzMwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMzAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjIzOTU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMzMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzMyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzMyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1YTlhZTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzMyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTNkMTZhMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzMzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMzMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMGNlNzg0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMzNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzM1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzM1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2ZDc4MmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzM1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjhkMTNjOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzM2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMzYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDcwN2JiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMzNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzViNDQ5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMzOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzM5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzM5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5N2FjOTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzM5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzM5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmNmZhOGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTJhOThjNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNTkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzEueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0NmQ0ZTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzQwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjJjZDg0ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNDEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2RjNmNmNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNDIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NWNlOWEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM0MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQ0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQ0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwODBkMzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzQ0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRiMWFkMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQ1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNDUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZGU1N2U4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM0NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQ3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQ3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiOGFmN2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzQ3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDlmYWMyZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQ4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNDgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjFjMjU3ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQ5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQ5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNDkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWEyOTg2ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZWVjYmQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM1Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5NC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMwIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUzMC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU0IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1NC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2VhYmM3NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNTAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTEyNTA2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM1MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzUyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzUyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4MzQ1MTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzUyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDM3ZmZkNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNTMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNGI1MTU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM1NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NGVmNzgyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM1NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzU2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1NDY3MDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzU2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRjYWQ1NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNTciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTIwODZkMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNTgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzk5NDk0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM1OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MWYyZTkwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzYmViODAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzYiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjciIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTY3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDEiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTQxLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZGE1ZTFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM2MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzYxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzYxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxMzRlZmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzYxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTY1ZDc4YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzYyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNjIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjZlYTZkZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzYzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNjMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OWE4NWM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM2NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzY1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzY1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxYjk4MGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzY1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJiMTRhNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzY2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNjYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjY1M2NlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM2NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYWZmZDE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM2OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzY5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzY5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwYjY4MzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzY5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzY5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4M2MwN2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzcueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDUzMjgxYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzcueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlOTMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlOTIueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzcwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzcwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmNDIzOTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzcwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzcwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2NkN2Y5ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzcxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzcxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzcxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNzEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmN2RmZDQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM3MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzczLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzczLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwODc2OGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzczIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzczIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjdkZmViOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzc0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNzQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZGM4ODdjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM3NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTFjNjJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM3NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzc3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzc3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlYWViZTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzc3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTAwYjkyMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzc4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzc4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNzgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjA2NGU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM3OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZWQ0YzY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1NWRkZGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzgiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTUwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTQiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTU0LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTZlMTEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzODAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM4MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzgxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzgxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmN2QzMzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzgxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzODIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzODIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODExNjQ5ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzgyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzODIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjdmY2U4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzODMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM4MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzg0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzg0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1N2JlYzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzg0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzODUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzODUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDFjZDc2YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzg1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzODUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYmUwNzc1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzODYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM4NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzIwMTJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM4NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzg4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzg4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjNzdjZTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzg4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzODkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzODkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWY2MmQxOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzg5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzg5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzODkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzODkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQzNjkzNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzkueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjcyOWIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM5Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNjcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUxLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTJjN2M5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM5MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzkxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzkxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5NGYxYTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzkxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzkyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzkyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwNWQ0MmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzkyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZhOGVjNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzkzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzOTMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjhhZTdjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM5NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzVmYmJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM5NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzk2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzk2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyNGM4MDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzk2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGEzMTUyZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzk3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzOTciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjNlOGM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM5OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzk5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzk5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjMTE0MTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzk5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzZjNjBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzg3YWI2My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzEiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTMxLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzciIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTM3LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNjNjE0Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTAxNTc4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQwIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNDgueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDAwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDAwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhZjJhMWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDAwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTk3NDc2NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDAxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MDEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTE1OTVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQwMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjQ1YmU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQwMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDA0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDA0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzY2FkYjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDA0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWYzMTQ1Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDA1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MDUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjliZGM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQwNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDA3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDA3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwOWEwOTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDA3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQ1NjY2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDA4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDA4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MDgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzgyZjdmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQwOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxM2E3NjI3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzczIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyNGU3YmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDEiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTEwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzUiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTM1LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTJiOGQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQxMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDExLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDExLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwMGI4NjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDExIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDExIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQwZDJiMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDEyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MTIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQxNjdkMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDEzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MTMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODkxYWM0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQxNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDE1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDE1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxMDQ3MmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDE1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDk5ZWIwNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDE2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MTYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTAzNTg5Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDE3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MTciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTZkZGU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQxOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDE5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDE5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViMWY1ZjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDE5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDE5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhM2U3YzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjA4ZDhjMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlODgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlODUueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDIwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDIwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmOWViMjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDIwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjI0NTJmMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDIxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MjEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTE3MDMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQyMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDIzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDIzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3NjIyOTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDIzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDI0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDI0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3YjE3ZTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDI0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODA4YzU5Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDI1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MjUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzEwZTlhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQyNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDI3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDI3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1N2IyY2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDI3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Mjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Mjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VkN2RkMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDI4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MjgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Mjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Mjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWM0MjZlNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDI5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDI5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MjkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmUzZDMwMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0My54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjkzMWM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0My54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQzIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyOS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUwIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU1MC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIwIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUyMC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzI3NjhkNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDMwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MzAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmIxMDRiOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDMxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MzEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGFlNjE5NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDMyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MzIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDVhZjg1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQzMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDM0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDM0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyOGExOGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDM0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjllNjk0Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDM1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MzUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzkxYjYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQzNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDM3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDM3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3ZjY1Y2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDM3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Mzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Mzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTc5OGUxNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDM4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDM4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MzgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTkxMDQxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Mzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQzOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTAzM2FlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlYmVhNjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDQiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjQiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTY0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTEiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTkxLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzdkM2NjYjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDQwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDlmNDhmNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NDEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzdiODZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ0MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTVlNjgyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ0MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQ0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQ0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0OWRlYTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDQ0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODFmOWFhMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQ1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NDUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzExIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDkzYTQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ0NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQ3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQ3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2ZGVjNDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDQ3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjY3YjhkYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQ4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQ4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NDgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTRjOWU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ0OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNWRhNzVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4MDQ3YTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDUiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTEiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTExLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzQiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTc0LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjk0OGUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ1MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmMzdlODEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDUxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjA1OTZkNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NTIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTc0OTI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ1MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4OGFmNTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDU0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWE5MjcwMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NTUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTM0MDNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ1NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmNDhkODAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDU3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmE0ZjJkNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NTgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZmZmNWU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ1OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODA5ZmU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Ni54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmYWQ3NTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDYiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTcwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDk5NDg2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDYwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NjAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzczIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjQ0M2IwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ2MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDYyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDYyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiYzg3ODEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDYyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGMwZGJlYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDYzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NjMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTVjMWQ1YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDY0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NjQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODg1YzE0ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDY1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NjUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZWYxMjg3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ2NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDY3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDY3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzMWExMmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDY3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Njgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Njgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2U0NTQ2OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDY4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDY4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NjgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjJhZDcxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Njkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ2OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMWE3NjEwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Ny54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwNWY1MjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDciPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDUiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTQ1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzMiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTMzLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMDU5MzU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ3MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDcxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDcxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwNWQwOTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDcxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDcxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmUxYzUyZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDcyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDcyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NzIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOTI0YThiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ3MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDc0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDc0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5MDI5YjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDc0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDc1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDc1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5Zjg2YTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDc1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWI1YmYwNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDc2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NzYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjg0M2ZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Nzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ3NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDc4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzMmIzMjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDc4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Nzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Nzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTA4NzQxZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDc5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDc5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0NzkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBiNTUzOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDgueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZWE2NWZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ4Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMxIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUzMS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU4IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1OC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0ODAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0ODAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDJhNTQ2YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDgwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0ODAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTI4ODYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0ODEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ4MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDgyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDgyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4ODg0MTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDgyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDgzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDgzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmYTU5MjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDgzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0ODQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0ODQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTUwMzVlZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDg0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0ODQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmYxZmVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0ODUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ4NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDg2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDg2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjYmNjY2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDg2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDg3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDg3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjMDNhZGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDg3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDg4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDg4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhMjE4YTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDg4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0ODkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0ODkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzkyYzk4Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDg5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDg5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0ODkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0ODkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmU1ZmJiZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDkueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzY1ODFjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ5Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU4IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU1OC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc5IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3OS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGU3NGVmNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDkwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0OTAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTMxNjc1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ5MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDkyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDkyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjZTNhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDkyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTI2M2FjNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDkzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0OTMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzIzNzcxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ5NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDk1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDk1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0Mjg0YTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDk1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTUwODMxZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDk2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0OTYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMWNkZTBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ5NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDk4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDk4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiMGU1MzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDk4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjIzNWU4NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDk5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDk5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0OTkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyMjI3YTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTc3ZTg2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzOC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE2IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUxNi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUzIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1My54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkZTNmYzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDBmNjgwMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMzMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlODIueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTAwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTAwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzZTFkZDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTAwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Q2MGNjNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTAxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MDEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODU4YWZmYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTAyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MDIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTdlOGY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUwMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTA0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTA0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmMDMwMGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTA0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDRlNjg1Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTA1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MDUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDhjZjNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUwNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTdlOWJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUwNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OGNkNDFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUwOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTA5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTA5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiOTNkMzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTA5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTA5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkNDczOTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDU0YmM0ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNTkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU4LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkM2FiNGZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUxMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTExLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTExLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1ZWE5YWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTExIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTExIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjNjY2IxMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTEyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MTIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwY2IxNzkyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUxMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTE0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTE0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5YTkwZWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTE0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDY3NGJjNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTE1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MTUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODJlOWQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUxNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NmRmODI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUxNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTE4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTE4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmZTBmMTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTE4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQzODg2Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTE5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTE5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MTkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzczIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTU5YzE4YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Mi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwM2FkNzE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Mi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUyIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU2IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU1Ni54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg3IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU4Ny54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjJmZDU1ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTIwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MjAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzhjZmQ0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUyMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTIyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTIyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkZGIyMWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTIyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGI5YzFiOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTIzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MjMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MWVhN2RjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUyNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MGQxNmM2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUyNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTI2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTI2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0OTU5YzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTI2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Mjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Mjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWY4NTg0Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTI3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MjciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjc5MWU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Mjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUyOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTI5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTI5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzODFlMTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTI5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTI5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3MGM1ZTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1My54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhOWJhZTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTMiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTQzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDciIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTQ3LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODgyZmMxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUzMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTMxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTMxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4MjNmMWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTMxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWEzNjkyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTMyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MzIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzE3ZDc2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUzMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTM0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTM0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxNGVmNWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTM0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjdmNzQ2NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTM1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MzUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNWM5MTgyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUzNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTM3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTM3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0NmY2ZjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTM3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTM4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTM4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3YTcxMDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTM4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Mzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Mzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzg3YTU5YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTM5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTM5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MzkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDg3MTQ5NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZmM3NzgyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU0Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4OC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYwIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU2MC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc3IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3Ny54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzkyYjAwZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NDAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OGZmMzM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU0MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwN2IwM2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTQyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQwY2ViNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NDMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDljYjA5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU0NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQ1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQ1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliZjExYjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTQ1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RkZWY0Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQ2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NDYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNGQ3MWY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU0NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQ4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQ4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxM2YyOWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTQ4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTEyODA2YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQ5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQ5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NDkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmRlZTJhOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODM5ZTgyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU1Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY3IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU2Ny54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkxIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU5MS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmIyOGQyZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NTAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjQ5NzQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU1MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTUyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTUyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjMDdjZDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTUyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTUzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzZmNjMjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTUzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGM3YWNlYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTNmZmQxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU1NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTU2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzYzM2ZWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTU2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWUyNmNhMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NTciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2Y5NWVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU1OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzMzMTU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU1OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOGNhNmY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Ni54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTYueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDdiYTVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Ni54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU2Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI0IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUyNC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg5IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU4OS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGEzZjJjNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTYwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NjAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOWVjMTRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU2MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTYyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTYyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiMGYzMGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTYyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI3YWU1Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTYzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NjMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTM1YzUxYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTY0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NjQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4N2QyNGJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU2NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTY2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTY2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5OTE5YTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTY2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Njcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Njcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmJmYmU3Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTY3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NjciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODA3NDE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Njgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU2OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTY5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTY5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwMmRlZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTY5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTY5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjZDc0OTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Ny54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4ODJjZmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTciPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIyIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUyMi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTUzNDNhNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTcwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTcwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTcwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NzAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzRjYzFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU3MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTcyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTcyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkZmZjNzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTcyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTcyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzRlODAwYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTczLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTczIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTczIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NzMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTNjNmEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU3NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTc1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTc1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhNjk1ZWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTc1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjVjYTM0My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTc2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NzYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDZlMjJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Nzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU3NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTc4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzNGZlMWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTc4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Nzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Nzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWM0YjlkMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTc5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTc5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NzkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjNkNTdjYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTgueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTg2ZGEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU4Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE5IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUxOS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYzIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU2My54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1ODAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1ODAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjkwMTZmMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTgwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1ODAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZmU5MmIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1ODEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU4MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTgyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTgyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4Y2U5MGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTgyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1ODMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1ODMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDc0MzM2NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTgzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1ODMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjFmNWE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1ODQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU4NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTg1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTg1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhYzhiN2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTg1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1ODYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1ODYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDNiMjNmZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTg2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1ODYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDIyMWQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1ODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU4NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTg4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTg4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhZGI2MTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTg4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1ODkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1ODkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTUxY2IxNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTg5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTg5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1ODkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1ODkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzIxNmU2My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTkueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMThkMmQ4NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTkueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNTYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzYueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTkwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTkwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzMGNiYjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTkwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmEyZjk0OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTkxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1OTEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYWU2MTM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU5MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTkzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTkzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1YjBhOWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTkzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTI0ODQ2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTk0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1OTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMWVkN2I2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU5NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTAwMDk4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU5NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTk3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTk3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwMzVmYTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTk3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTk4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTk4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmYWIzZGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTk4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBiMWNlYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTk5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTk5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1OTkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhODViMTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjEyMGEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Mi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNjQueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOGU0YWJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmNDA1M2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjAiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTQiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTk0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzIiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTMyLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGM5Y2FmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYwMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjAxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjAxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkZGJlMzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjAxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTFkZDk1Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjAyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MDIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjI4ODhmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYwMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjA0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjA0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlM2U3NzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjA0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzI4ZWEzNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjA1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MDUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWU4NThkMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjA2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MDYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDg0N2EzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYwNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjA4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjA4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiNjQ5MmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjA4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGMyNTljYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjA5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjA5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MDkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWUwYzM5Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZWFhMjM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYxIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkwIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU5MC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgwIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU4MC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTA4OTdhZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjEwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MTAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDE2ZjUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYxMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjEyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2ODg4NDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjEyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVlNDdhZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjEzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MTMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2NmYWI5ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjE0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDBjZmEwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYxNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjE2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjE2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0NDQ5M2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjE2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWRlZmIzYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjE3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MTciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMmM2ZmIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYxOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjE5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjE5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiYzc2OTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjE5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjE5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwYTBmNzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Mi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4ZDFjMWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjIiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI3IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUyNy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU3IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1Ny54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjJjZTFmMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjIwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MjAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOGYwZDZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYyMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjIyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjIyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzMjJmMGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjIyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGViNjE2Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjIzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MjMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYmNhNGQ5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYyNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjI1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjI1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlMDcwZjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjI1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDkwNzU3Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjI2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MjYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmN2JiZDRiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Mjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYyNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjI4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjI4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0MjU4ZjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjI4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Mjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Mjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGMzMzAyMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjI5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjI5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MjkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTU1YzMxOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2My54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTNjZWE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2My54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYzIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5OS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMwIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUzMC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTUueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjMwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjMwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwOTQ3MzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjMwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTRlNWFhNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjMxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MzEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2E4NTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYzMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjMzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjMzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwZWI3MmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjMzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDZlYTZmNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjM0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MzQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzExIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDk5NmM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYzNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjM2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjM2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1YjcxNTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjM2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Mzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Mzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTY5ZWJmOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjM3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MzciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMGNiOTk2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Mzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYzOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjM5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjM5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3ZjA2YTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjM5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjM5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlYjQ3OWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Q5YWU2OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMzgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMjMueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMTcwYTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjQwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGRjMWU0Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NDEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzZjM2MxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY0MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjODE3NzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjQzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY5MTJhMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQ0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NDQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NWNlYjg4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY0NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQ2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQ2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3OGY0ZjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjQ2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTNhNzQ2Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQ3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NDciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTZmZjU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY0OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQ5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQ5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4Y2Y2N2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQ5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjQ5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyY2JiMTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGViNjhlYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNjQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNDUueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjUwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjNTA0ZjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjUwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJhNDFiYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NTEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTM2MzNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY1MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjUzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllZmZmMmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjUzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQ4MGRiNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMmI4MzI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY1NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjU2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkOTViYTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjU2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiMGIxZWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjU3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDgwMWU3Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NTgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjNkNzMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY1OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNGY5MzRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Ni54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4ZTJiZDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjYiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ4IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU0OC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzczIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3My54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmU3NTA5ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjYwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NjAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZmNkYzlhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY2MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjYyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjYyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0YjJmYjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjYyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjYzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjYzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhMjExMzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjYzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2EzOGJmNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjY0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NjQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDdmZDdhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY2NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjY2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjY2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwZWNjZTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjY2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Njcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Njcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTczZWNjNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjY3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NjciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDVkMTgzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Njgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY2OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjY5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjY5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3ZDBlYTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjY5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjY5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjY2JkMTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjcueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjAwMWQyMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjcueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMzYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlOTIueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjcwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjcwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5ZWFjZjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjcwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjcwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTliODliNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjcxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjcxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjcxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NzEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMGY1MWM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY3MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjczLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjczLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzM2FhM2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjczIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjczIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzk2MDY5Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjc0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NzQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzljYTgzNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjc1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NzUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTI1NmRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY3NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjc3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjc3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjOTA5YTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjc3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Nzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Nzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzRlOGQ0My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjc4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjc4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NzgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTczMDhiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Nzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY3OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YjBiY2VmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiMWViNzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjgiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTkiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTE5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjQiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTY0LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNzQ5NDk0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2ODAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY4MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjgxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjgxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzNTk0NjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjgxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2ODIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2ODIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTBhOTk2NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjgyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2ODIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjE4MGQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2ODMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY4MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjg0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjg0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5NTYwNTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjg0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2ODUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2ODUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjlkMTQ5My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjg1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2ODUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzgwMGMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2ODYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY4NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjg3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjg3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwNTA5NmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjg3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2ODgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2ODgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2QxYmY4Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjg4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2ODgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2ODkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2ODkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFjMmZjMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjg5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjg5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2ODkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2ODkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODhlOWQwMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjkueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDVjNTNjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY5Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk0IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU5NC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc4IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3OC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWMyODZiZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjkwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2OTAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTAzMGU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY5MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjkyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjkyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxZTdjZGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjkyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzFiNzZmMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjkzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2OTMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODFlNzkwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY5NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjk1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjk1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyOTJlNjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjk1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWRjNjY3Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjk2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2OTYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODQ3YjIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY5NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjk4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjk4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyMTFjNDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjk4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTBjN2ExNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjk5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjk5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2OTkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YmE3YjAyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDVjNzY5ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlOTMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNTQueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NmVjY2IyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5MzA3MWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzAiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjYiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTI2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzMiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTMzLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODc2OGU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTcwMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzAxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzAxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiZGMyYTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzAxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmVmNDk0Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzAyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MDIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDhiZTQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTcwMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YWVmYTIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTcwNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0M2ZlYzg4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTcwNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzA2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzA2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlYTMyMTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzA2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzM3YTE1ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzA3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MDciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODhkZWE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTcwOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzA5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzA5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxODE2ZmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzA5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzA5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2MzcyNjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZhOWE2OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzRkM2MyZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzEwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MTAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzEwY2IzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTcxMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzEyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzEyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlYzgzMmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzEyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNlYTIzMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzEzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MTMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MWZjZjQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTcxNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzE1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzE1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkZGFhZjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzE1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzE2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzE2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5NzczZWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzE2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE5NTVhMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzE3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MTciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTJlMTg4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTcxOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzE5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzE5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkZjA2MWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzE5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzE5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjOTU5MTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTEwNWMwZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNjMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlODcueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzIwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzIwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxMjQ1MTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzIwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmJkMGQzMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzIxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MjEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjI4YmY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTcyMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzIzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzIzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2YTBjMTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzIzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWFhYzBiMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzI0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MjQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMGJiOGI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTcyNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzI2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzI2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyOTI5ZjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzI2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Mjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Mjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjMzZGQyOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzI3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MjciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGFlYjM2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Mjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTcyOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzI5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzI5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxM2NjYWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzI5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzI5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4MzE5MTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3My54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwZmJjZDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzMiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTEwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzYiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTM2LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YjQ0Mjg4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTczMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzMxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzMxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkMDkxNmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzMxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Y3YzlkYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzMyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MzIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiY2E3MTFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTczMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzM0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzM0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3ZmYxNjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzM0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWEzNGY2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzM1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MzUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWY1ZGQyZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzM2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MzYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZmE4OTVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Mzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTczNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzM4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzM4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5OGQ1YjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzM4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Mzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Mzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODg1ZDc2Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzM5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzM5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MzkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmNiMjFkMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTg3ZDAxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc0Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2MS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc2IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3Ni54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEwIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUxMC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE4NmM1YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NDAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZmUxODVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc0MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyMGU4NWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzQyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGI3YTZjMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NDMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MmIxZjRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc0NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQ1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQ1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2YjYyMzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzQ1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2NmMjYyZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQ2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NDYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzczIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMWU0NmZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc0NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NmFlNDMxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc0OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQ5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQ5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3MDg3YzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQ5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzQ5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViMzEyOTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGM5OTEzOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNzQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNDkueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzUwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhMTkxOTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzUwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDE0ZTZmNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NTEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTI1MTBkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc1MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzUzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiODA2ZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzUzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQ2Y2ZiYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTE2NTNjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc1NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzU2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyOWMxYTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzU2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzI1NjVmYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NTciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMWY5NTFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc1OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzU5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4NWQ1NmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzU5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzU5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5Yzc5NWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzYueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDRmMmU2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzYueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNzUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlOTgueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzYwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzYwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0ZjUyNGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzYwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8wIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzYxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzYxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhMDkzYWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzYxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGNiMDdhNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzYyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NjIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjZiNzBlZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzYzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NjMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYWZkYThhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc2NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzY1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzY1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1NmZjZWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzY1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjhlZDdjYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzY2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NjYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjUzODk4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Njcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc2NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzY4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzY4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmNDMzNDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzY4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Njkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Njkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQwMWJlNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzY5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzY5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NjkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTUxMWUyYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Ny54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzcueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlN2NmNjhmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Ny54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc3Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Ny54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYzIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU2My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU1IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1NS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThjOTlhNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzcwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzcwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzcwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NzAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjZjMDA3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc3MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzcyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzcyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyMjUxMDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzcyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzcyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDBjNjc1Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzczLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzczIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzczIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NzMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzUyZGU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc3NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzc1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzc1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzMzdjOTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzc1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmM2YTNmZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzc2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NzYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZWRkODExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Nzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc3NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzc4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzc4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzZTY5MDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzc4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Nzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Nzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGIzZThkNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzc5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzc5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NzkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDVkMjc0Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzgueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NjM0ZTdkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc4Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82OSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNjkueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzgwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzgwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyYjMzODMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzgwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3ODEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3ODEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWZmNjk5OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzgxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3ODEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTM2OGYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3ODIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc4MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzgzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzgzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmMDUzZjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzgzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3ODQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3ODQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDAwMjkyMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzg0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3ODQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmN2YyNGE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3ODUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc4NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzg2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzg2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5MjkzMDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzg2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3ODcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3ODcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQ1NjY0MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzg3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzg3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3ODciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYWRkZWRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3ODgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc4OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NWIxODllLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3ODkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3ODkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc4OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzY0YWRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0MDliN2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzkiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDUiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTQ1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTI5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjE1OTdkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc5MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MGU4YWYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc5MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzkyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzkyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhMWJhZTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzkyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTVhMWEzOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzkzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3OTMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjU5ZDk4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc5NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzk1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzk1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5YWZlNDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzk1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmI1MmU5OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzk2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3OTYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjYxMGYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc5NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzk4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzk4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2NWZmMTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzk4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDc3NTc4ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzk5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzk5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3OTkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5YTA3NTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NWMwZWNjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1OC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEyIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUxMi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU1IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1NS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkNmQyZGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzk3N2U1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlODkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMjcueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODAwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODAwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5NzY3MWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODAwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjM1YmI3Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODAxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MDEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODg0ZTc2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgwMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODAzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODAzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4MDY5NDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODAzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTExLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmNjMjE3ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODA0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MDQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDc5ZTU4Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODA1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MDUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzBmNjNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgwNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODA3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODA3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlMDJlMTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODA3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI1OTRlNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODA4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MDgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzdiMTU3Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODA5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODA5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MDkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzMxMGVmNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzNlNzI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgxIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMTUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMjAueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODEwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODEwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4ODcxZDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODEwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTEyMWU1ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODExLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODExIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODExIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MTEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOGU0MmEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgxMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODEzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODEzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhZWI0ZTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODEzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzNjNjVmNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODE0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZWVkN2YxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgxNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODE2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODE2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0MWZhODUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODE2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjU3YTcxYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODE3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MTciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTQ1NWQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgxOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODE5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODE5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5YTY3ZjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODE5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODE5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhODYyYzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Mi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0YmNjZmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODIiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIxLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTMwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTM5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTIwYzM2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgyMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODIxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODIxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1NDZkNmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODIxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2RkZDE4Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODIyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MjIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjVkMTUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgyMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODI0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODI0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhM2ExYzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODI0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTBlOGQ4Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODI1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MjUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTI4ODE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgyNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODI3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODI3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViYTYxOWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODI3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Mjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Mjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RkY2RhNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODI4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODI4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MjgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOGIwZDdiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Mjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgyOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzIyZGU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4My54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTdlMDU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4My54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgzIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1OC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkxIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU5MS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzczIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3My54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODc2ZTU5OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODMwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MzAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDhhMTcyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgzMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODMyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODMyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxNWEyNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODMyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmJjNjNiNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODMzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MzMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZmFlNzE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgzNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODM1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODM1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlNWQwYTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODM1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmNhYjBkMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODM2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MzYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZWI4OTNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Mzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgzNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODM4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODM4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjNTIwNzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODM4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Mzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Mzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzM2YzQ4OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODM5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODM5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MzkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTMyMzIwMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjQxZDlmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg0Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4Ny54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIzIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUyMy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg4IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU4OC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGFlZTE3Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NDAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjM3YTMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg0MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiNjQ3ZGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODQyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmVkMmE0Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NDMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOThlMzM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NDQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg0NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQ1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQ1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4OTJkYjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODQ1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NDYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGU2OGUxYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQ2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NDYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjQ5NmY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg0NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQ4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQ4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5ZDM3OTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODQ4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NDkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTVkY2FlNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQ5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQ5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NDkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTAwZGRiYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkM2VjNWRiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg1Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3NC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI3IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUyNy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkyIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU5Mi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGEyMjA1ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NTAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjdiNmYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg1MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODUyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODUyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkOGI0ZjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODUyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzI0NjIyNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NTMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTVlZTgwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg1NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODU1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODU1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmZDlhMzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODU1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjkzZGQ5ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NTYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZWU4ZmI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg1NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4ZjEwNzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODU4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTA3YTQyYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NTkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWJmNDgwMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Ni54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODYueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODk4ZGIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Ni54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg2Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0MS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMzQueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODYwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODYwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkZTQ2ZTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODYwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTg2ZWM5Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODYxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NjEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmFmNTdlZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODYyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NjIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWY0OWE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg2MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODY0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODY0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzYmNjYjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODY0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZmYTExMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODY1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NjUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzk5YzQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg2NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODY3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODY3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkYjYzNjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODY3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODY4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODY4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViMDI3MDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODY4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Njkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Njkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTNjZTdjZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODY5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODY5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NjkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjMmVhZWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODcueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDBhNTIxNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODcueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTIiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTkyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTEiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTUxLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDY3ZmJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg3MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODcxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODcxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyMWZlZGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODcxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODcxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjA3NDRhMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODcyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODcyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NzIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjA4MzI1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NzMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg3MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODc0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODc0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiNjgwNzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODc0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NzUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzBkZjdiNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODc1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NzUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjdhN2FiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg3NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODc3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODc3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjNGUyZDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODc3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Nzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Nzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZjYjQxNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODc4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NzgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Nzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Nzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTY2ODU5Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODc5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODc5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NzkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWU4OGY4NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODgueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjgyNzZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg4Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Ny54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI1IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUyNS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE5IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUxOS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4ODAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4ODAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWE0ZjY1NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODgwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4ODAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjVjY2U1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4ODEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg4MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODgyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODgyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiMThhODQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODgyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4ODMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4ODMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDYzNjYwZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODgzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4ODMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTgyMzM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4ODQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg4NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODg1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODg1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0Y2M3ODYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODg1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4ODYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4ODYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQ1NWRhZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODg2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4ODYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODg5ZTQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4ODcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg4NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODg4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODg4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2NTljYmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODg4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4ODkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4ODkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGJlYmNhMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODg5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODg5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4ODkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4ODkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODU3MmMxNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODkueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODVhMjA2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODkueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDMyYzg3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODkwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4OTAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDVjNTY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg5MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODkyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODkyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5OWEyN2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODkyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2YzNTJmOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODkzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4OTMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMWIyNmY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg5NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODk1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODk1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlODQ0ZjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODk1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTE5OTA2ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODk2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4OTYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMmNhNjdiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg5NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODk4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODk4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4OTg1YTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODk4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWRjZDdmZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODk5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODk5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4OTkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTRlMjQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjFmNTU3NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNDIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNDMueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNWQ2MTQ0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwODQ4ZWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTAiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMzIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUzMy54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MDAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWJmMGIxMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTAwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MDAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODc3NTQ0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkwMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTAyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTAyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjMjJjMmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTAyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MDMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MDMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjhjNjM3My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTAzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MDMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2FiYzUxZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTA0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MDQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2Y4Yzc3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkwNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTA2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTA2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzZTU0ODYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTA2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTA3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTA3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhMTM5ZDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTA3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTgwMzkyOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTA4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTA4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MDgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZWIzY2Q2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkwOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDYxY2RhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxMzdhMjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTEiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzIiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTMyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzYiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTM2LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzI3ODFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkxMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTExLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTExLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3M2E4NjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTExIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTExIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2M3YWY3Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTEyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MTIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDAxNGUzMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTEzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MTMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzcxNzJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkxNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTE1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTE1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhNDI3M2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTE1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjRjOWFiOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTE2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MTYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzczIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOTFkMjI1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkxNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTE4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTE4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4NjFhY2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTE4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjZhZWFmMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTE5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTE5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MTkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Q4OGQ4MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Mi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmN2Q2YjU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Mi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkyIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc5IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3OS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ3IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU0Ny54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2EzMmEwOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTIwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MjAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNGY5ZDRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkyMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTIyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTIyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyMTgxZWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTIyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGJjM2NkMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTIzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MjMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjMyZTUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkyNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzNiMjFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkyNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTI2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTI2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0NmZlNDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTI2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Mjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Mjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjk1YWU5Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTI3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MjciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzVjZGY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Mjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkyOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTI5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTI5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0ODU1OTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTI5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTI5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzMjUwNDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI3NmU2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNzIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU4LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMTg2OWE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkzMCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTMxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTMxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyNDc0MzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTMxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWU2YTJhYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTMyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MzIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTZjY2QxZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTMzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MzMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGNiNmMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkzNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTM1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTM1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyNzYzMDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTM1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY4ODJkZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTM2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MzYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Mzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Mzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzFjYmM2OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTM3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MzciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTE1NThmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Mzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkzOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTM5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTM5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2ZTI4NDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTM5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTM5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViMTUwOTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzkwNjQ5NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODgiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTg4LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTliNWU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk0MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0NS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmMGYyN2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTQxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NDIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGUxNjcxMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NDIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYmY3MTQxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NDMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk0MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQ0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQ0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0Y2EyMjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTQ0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NDUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmUxYjJmZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQ1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NDUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTNmZjVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NDYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk0NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQ3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQ3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0NmVjODAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTQ3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NDgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NDgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGZmYWJhMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQ4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQ4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NDgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTQ2NTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NDkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk0OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQ0ZTRlMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjkyZTBhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk1Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE1IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUxNS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTEueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTUwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4MTA5NWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTUwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE4ZTE5Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NTEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZWYxYWIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk1MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTUzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1ZTMzZGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTUzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQxMDI3YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTRhYTkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk1NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTU2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhNjFiMzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTU2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTBiZmEyMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NTciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YWIyYjAxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk1OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTU5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTU5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkNTBjOGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTU5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTU5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzZDU2ZDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTYueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmUxNDkzMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTYueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNjQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMjkueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTYwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTYwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0OWZhNzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTYwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDkzODc4Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTYxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NjEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzA1NDVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NjIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk2MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTYzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTYzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2NWQyYWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTYzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NjQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NjQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjJlNmZjZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTY0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NjQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOGEyMDBiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk2NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZGM2OGI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk2NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTY3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTY3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0YmYzYjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTY3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Njgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Njgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTNiNTZlZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTY4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTY4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NjgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjVhMTg2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Njkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NjkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk2OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTVjM2NkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Ny54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTcueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjRiYzM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Ny54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk3Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlODYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMzkueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTcwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTcwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiYmRiMjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTcwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTcwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOThlYmY1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTcxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTcxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTcxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NzEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMGIxMjRiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk3MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTczLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTczLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1Y2U2NDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTczIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTczIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQzZjI1OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTc0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NzQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxM2FiOTE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk3NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTc2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTc2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4MjJkMDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTc2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Nzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Nzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzJiM2FjMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTc3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NzciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTI5MmE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Nzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk3OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTc5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTc5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjMTEzNzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTc5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTc5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliMDMwYzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTgueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjM4ZDgyNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTgueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlOTMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMjgueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTgwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTgwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxM2FhMDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTgwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5ODEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5ODEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWMxNTUyZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTgxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5ODEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTg0MWY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5ODIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk4MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTgzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTgzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2ODZmMTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTgzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5ODQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5ODQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTM0NDUyNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTg0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5ODQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Yjc3YmIwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5ODUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk4NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTg2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTg2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4NzRkMjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTg2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5ODcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5ODcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDA0OTdjZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTg3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5ODciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5ODgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5ODgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDFhMmQ3NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTg4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTg4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5ODgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YWQ4OTg3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5ODkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5ODkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk4OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NGViYWRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxNzlkMWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTkiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzQiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTM0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjIiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTYyLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzBiN2RiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk5MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTkxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTkxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1NWJkMGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTkxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWMzODdmNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTkyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5OTIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOGFmMmY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk5MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTk0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTk0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0YWUzNjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTk0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWY4ZmM0ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTk1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5OTUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzEyYWJkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk5NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTk3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTk3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1NDczMWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTk3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTk4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTk4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmNzk5YjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTk4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM3MDNhYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTk5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTk5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5OTkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBLQi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBLQi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTA0N2I5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwS0Iud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDMxMDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9IkRlZmluaXRpb24iIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scyI+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDExIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDcwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDcxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDcyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDczIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDwveHNkOnNjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24wIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTAiIG5hbWU9IklucHV0MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UwIiBuYW1lPSJPdXRwdXQwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcwIiB0eXBlPSJ0bnM6UG9ydFR5cGUwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24wIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDAiIGJpbmRpbmc9InRuczpCaW5kaW5nMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxIiBuYW1lPSJJbnB1dDEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMSIgbmFtZT0iT3V0cHV0MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMSIgdHlwZT0idG5zOlBvcnRUeXBlMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMiIgbmFtZT0iSW5wdXQyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIiIG5hbWU9Ik91dHB1dDIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIiIHR5cGU9InRuczpQb3J0VHlwZTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MiIgYmluZGluZz0idG5zOkJpbmRpbmcyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMiIG5hbWU9IklucHV0MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzIiBuYW1lPSJPdXRwdXQzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczIiB0eXBlPSJ0bnM6UG9ydFR5cGUzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMiIGJpbmRpbmc9InRuczpCaW5kaW5nMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0IiBuYW1lPSJJbnB1dDQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNCIgbmFtZT0iT3V0cHV0NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNCIgdHlwZT0idG5zOlBvcnRUeXBlNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNSIgbmFtZT0iSW5wdXQ1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUiIG5hbWU9Ik91dHB1dDUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUiIHR5cGU9InRuczpQb3J0VHlwZTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NSIgYmluZGluZz0idG5zOkJpbmRpbmc1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYiIG5hbWU9IklucHV0NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2IiBuYW1lPSJPdXRwdXQ2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2IiB0eXBlPSJ0bnM6UG9ydFR5cGU2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYiIGJpbmRpbmc9InRuczpCaW5kaW5nNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3IiBuYW1lPSJJbnB1dDciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNyIgbmFtZT0iT3V0cHV0NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNyIgdHlwZT0idG5zOlBvcnRUeXBlNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOCIgbmFtZT0iSW5wdXQ4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgiIG5hbWU9Ik91dHB1dDgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgiIHR5cGU9InRuczpQb3J0VHlwZTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OCIgYmluZGluZz0idG5zOkJpbmRpbmc4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkiIG5hbWU9IklucHV0OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5IiBuYW1lPSJPdXRwdXQ5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5IiB0eXBlPSJ0bnM6UG9ydFR5cGU5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkiIGJpbmRpbmc9InRuczpCaW5kaW5nOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMCIgbmFtZT0iSW5wdXQxMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMCIgbmFtZT0iT3V0cHV0MTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEwIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMCIgYmluZGluZz0idG5zOkJpbmRpbmcxMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDExIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMSIgbmFtZT0iSW5wdXQxMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMSIgbmFtZT0iT3V0cHV0MTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzExIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjExIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTExIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMSIgYmluZGluZz0idG5zOkJpbmRpbmcxMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMiIgbmFtZT0iSW5wdXQxMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMiIgbmFtZT0iT3V0cHV0MTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEyIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMiIgYmluZGluZz0idG5zOkJpbmRpbmcxMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMyIgbmFtZT0iSW5wdXQxMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMyIgbmFtZT0iT3V0cHV0MTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEzIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMyIgYmluZGluZz0idG5zOkJpbmRpbmcxMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNCIgbmFtZT0iSW5wdXQxNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNCIgbmFtZT0iT3V0cHV0MTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE0IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNCIgYmluZGluZz0idG5zOkJpbmRpbmcxNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNSIgbmFtZT0iSW5wdXQxNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNSIgbmFtZT0iT3V0cHV0MTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE1IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNSIgYmluZGluZz0idG5zOkJpbmRpbmcxNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNiIgbmFtZT0iSW5wdXQxNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNiIgbmFtZT0iT3V0cHV0MTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE2IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNiIgYmluZGluZz0idG5zOkJpbmRpbmcxNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNyIgbmFtZT0iSW5wdXQxNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNyIgbmFtZT0iT3V0cHV0MTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE3IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNyIgYmluZGluZz0idG5zOkJpbmRpbmcxNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxOCIgbmFtZT0iSW5wdXQxOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxOCIgbmFtZT0iT3V0cHV0MTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE4IiB0eXBlPSJ0bnM6UG9ydFR5cGUxOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxOCIgYmluZGluZz0idG5zOkJpbmRpbmcxOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxOSIgbmFtZT0iSW5wdXQxOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxOSIgbmFtZT0iT3V0cHV0MTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE5IiB0eXBlPSJ0bnM6UG9ydFR5cGUxOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxOSIgYmluZGluZz0idG5zOkJpbmRpbmcxOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMCIgbmFtZT0iSW5wdXQyMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMCIgbmFtZT0iT3V0cHV0MjAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIwIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMCIgYmluZGluZz0idG5zOkJpbmRpbmcyMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMSIgbmFtZT0iSW5wdXQyMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMSIgbmFtZT0iT3V0cHV0MjEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIxIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMSIgYmluZGluZz0idG5zOkJpbmRpbmcyMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMiIgbmFtZT0iSW5wdXQyMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMiIgbmFtZT0iT3V0cHV0MjIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIyIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMiIgYmluZGluZz0idG5zOkJpbmRpbmcyMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMyIgbmFtZT0iSW5wdXQyMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMyIgbmFtZT0iT3V0cHV0MjMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIzIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMyIgYmluZGluZz0idG5zOkJpbmRpbmcyMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNCIgbmFtZT0iSW5wdXQyNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNCIgbmFtZT0iT3V0cHV0MjQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI0IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNCIgYmluZGluZz0idG5zOkJpbmRpbmcyNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNSIgbmFtZT0iSW5wdXQyNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNSIgbmFtZT0iT3V0cHV0MjUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI1IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNSIgYmluZGluZz0idG5zOkJpbmRpbmcyNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNiIgbmFtZT0iSW5wdXQyNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNiIgbmFtZT0iT3V0cHV0MjYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI2IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNiIgYmluZGluZz0idG5zOkJpbmRpbmcyNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNyIgbmFtZT0iSW5wdXQyNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNyIgbmFtZT0iT3V0cHV0MjciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI3IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNyIgYmluZGluZz0idG5zOkJpbmRpbmcyNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyOCIgbmFtZT0iSW5wdXQyOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyOCIgbmFtZT0iT3V0cHV0MjgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI4IiB0eXBlPSJ0bnM6UG9ydFR5cGUyOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyOCIgYmluZGluZz0idG5zOkJpbmRpbmcyOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyOSIgbmFtZT0iSW5wdXQyOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyOSIgbmFtZT0iT3V0cHV0MjkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI5IiB0eXBlPSJ0bnM6UG9ydFR5cGUyOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyOSIgYmluZGluZz0idG5zOkJpbmRpbmcyOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMCIgbmFtZT0iSW5wdXQzMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMCIgbmFtZT0iT3V0cHV0MzAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMwIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMCIgYmluZGluZz0idG5zOkJpbmRpbmczMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMSIgbmFtZT0iSW5wdXQzMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMSIgbmFtZT0iT3V0cHV0MzEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMxIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMSIgYmluZGluZz0idG5zOkJpbmRpbmczMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMiIgbmFtZT0iSW5wdXQzMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMiIgbmFtZT0iT3V0cHV0MzIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMyIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMiIgYmluZGluZz0idG5zOkJpbmRpbmczMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMyIgbmFtZT0iSW5wdXQzMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMyIgbmFtZT0iT3V0cHV0MzMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMzIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMyIgYmluZGluZz0idG5zOkJpbmRpbmczMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNCIgbmFtZT0iSW5wdXQzNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNCIgbmFtZT0iT3V0cHV0MzQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM0IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNCIgYmluZGluZz0idG5zOkJpbmRpbmczNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNSIgbmFtZT0iSW5wdXQzNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNSIgbmFtZT0iT3V0cHV0MzUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM1IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNSIgYmluZGluZz0idG5zOkJpbmRpbmczNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNiIgbmFtZT0iSW5wdXQzNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNiIgbmFtZT0iT3V0cHV0MzYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM2IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNiIgYmluZGluZz0idG5zOkJpbmRpbmczNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNyIgbmFtZT0iSW5wdXQzNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNyIgbmFtZT0iT3V0cHV0MzciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM3IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNyIgYmluZGluZz0idG5zOkJpbmRpbmczNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzOCIgbmFtZT0iSW5wdXQzOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzOCIgbmFtZT0iT3V0cHV0MzgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM4IiB0eXBlPSJ0bnM6UG9ydFR5cGUzOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzOCIgYmluZGluZz0idG5zOkJpbmRpbmczOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzOSIgbmFtZT0iSW5wdXQzOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzOSIgbmFtZT0iT3V0cHV0MzkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM5IiB0eXBlPSJ0bnM6UG9ydFR5cGUzOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzOSIgYmluZGluZz0idG5zOkJpbmRpbmczOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MCIgbmFtZT0iSW5wdXQ0MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MCIgbmFtZT0iT3V0cHV0NDAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQwIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MCIgYmluZGluZz0idG5zOkJpbmRpbmc0MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MSIgbmFtZT0iSW5wdXQ0MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MSIgbmFtZT0iT3V0cHV0NDEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQxIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MSIgYmluZGluZz0idG5zOkJpbmRpbmc0MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MiIgbmFtZT0iSW5wdXQ0MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MiIgbmFtZT0iT3V0cHV0NDIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQyIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MiIgYmluZGluZz0idG5zOkJpbmRpbmc0MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MyIgbmFtZT0iSW5wdXQ0MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MyIgbmFtZT0iT3V0cHV0NDMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQzIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MyIgYmluZGluZz0idG5zOkJpbmRpbmc0MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NCIgbmFtZT0iSW5wdXQ0NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NCIgbmFtZT0iT3V0cHV0NDQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ0IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NCIgYmluZGluZz0idG5zOkJpbmRpbmc0NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NSIgbmFtZT0iSW5wdXQ0NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NSIgbmFtZT0iT3V0cHV0NDUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ1IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NSIgYmluZGluZz0idG5zOkJpbmRpbmc0NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NiIgbmFtZT0iSW5wdXQ0NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NiIgbmFtZT0iT3V0cHV0NDYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ2IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NiIgYmluZGluZz0idG5zOkJpbmRpbmc0NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NyIgbmFtZT0iSW5wdXQ0NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NyIgbmFtZT0iT3V0cHV0NDciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ3IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NyIgYmluZGluZz0idG5zOkJpbmRpbmc0NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0OCIgbmFtZT0iSW5wdXQ0OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0OCIgbmFtZT0iT3V0cHV0NDgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ4IiB0eXBlPSJ0bnM6UG9ydFR5cGU0OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0OCIgYmluZGluZz0idG5zOkJpbmRpbmc0OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0OSIgbmFtZT0iSW5wdXQ0OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0OSIgbmFtZT0iT3V0cHV0NDkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ5IiB0eXBlPSJ0bnM6UG9ydFR5cGU0OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0OSIgYmluZGluZz0idG5zOkJpbmRpbmc0OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MCIgbmFtZT0iSW5wdXQ1MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MCIgbmFtZT0iT3V0cHV0NTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUwIiB0eXBlPSJ0bnM6UG9ydFR5cGU1MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MCIgYmluZGluZz0idG5zOkJpbmRpbmc1MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MSIgbmFtZT0iSW5wdXQ1MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MSIgbmFtZT0iT3V0cHV0NTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUxIiB0eXBlPSJ0bnM6UG9ydFR5cGU1MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MSIgYmluZGluZz0idG5zOkJpbmRpbmc1MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MiIgbmFtZT0iSW5wdXQ1MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MiIgbmFtZT0iT3V0cHV0NTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUyIiB0eXBlPSJ0bnM6UG9ydFR5cGU1MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MiIgYmluZGluZz0idG5zOkJpbmRpbmc1MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MyIgbmFtZT0iSW5wdXQ1MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MyIgbmFtZT0iT3V0cHV0NTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUzIiB0eXBlPSJ0bnM6UG9ydFR5cGU1MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MyIgYmluZGluZz0idG5zOkJpbmRpbmc1MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NCIgbmFtZT0iSW5wdXQ1NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NCIgbmFtZT0iT3V0cHV0NTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU0IiB0eXBlPSJ0bnM6UG9ydFR5cGU1NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NCIgYmluZGluZz0idG5zOkJpbmRpbmc1NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NSIgbmFtZT0iSW5wdXQ1NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NSIgbmFtZT0iT3V0cHV0NTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU1IiB0eXBlPSJ0bnM6UG9ydFR5cGU1NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NSIgYmluZGluZz0idG5zOkJpbmRpbmc1NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NiIgbmFtZT0iSW5wdXQ1NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NiIgbmFtZT0iT3V0cHV0NTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU2IiB0eXBlPSJ0bnM6UG9ydFR5cGU1NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NiIgYmluZGluZz0idG5zOkJpbmRpbmc1NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NyIgbmFtZT0iSW5wdXQ1NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NyIgbmFtZT0iT3V0cHV0NTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU3IiB0eXBlPSJ0bnM6UG9ydFR5cGU1NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NyIgYmluZGluZz0idG5zOkJpbmRpbmc1NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1OCIgbmFtZT0iSW5wdXQ1OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1OCIgbmFtZT0iT3V0cHV0NTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU4IiB0eXBlPSJ0bnM6UG9ydFR5cGU1OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1OCIgYmluZGluZz0idG5zOkJpbmRpbmc1OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1OSIgbmFtZT0iSW5wdXQ1OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1OSIgbmFtZT0iT3V0cHV0NTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU5IiB0eXBlPSJ0bnM6UG9ydFR5cGU1OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1OSIgYmluZGluZz0idG5zOkJpbmRpbmc1OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MCIgbmFtZT0iSW5wdXQ2MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MCIgbmFtZT0iT3V0cHV0NjAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYwIiB0eXBlPSJ0bnM6UG9ydFR5cGU2MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MCIgYmluZGluZz0idG5zOkJpbmRpbmc2MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MSIgbmFtZT0iSW5wdXQ2MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MSIgbmFtZT0iT3V0cHV0NjEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYxIiB0eXBlPSJ0bnM6UG9ydFR5cGU2MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MSIgYmluZGluZz0idG5zOkJpbmRpbmc2MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MiIgbmFtZT0iSW5wdXQ2MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MiIgbmFtZT0iT3V0cHV0NjIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYyIiB0eXBlPSJ0bnM6UG9ydFR5cGU2MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MiIgYmluZGluZz0idG5zOkJpbmRpbmc2MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MyIgbmFtZT0iSW5wdXQ2MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MyIgbmFtZT0iT3V0cHV0NjMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYzIiB0eXBlPSJ0bnM6UG9ydFR5cGU2MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MyIgYmluZGluZz0idG5zOkJpbmRpbmc2MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NCIgbmFtZT0iSW5wdXQ2NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NCIgbmFtZT0iT3V0cHV0NjQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY0IiB0eXBlPSJ0bnM6UG9ydFR5cGU2NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NCIgYmluZGluZz0idG5zOkJpbmRpbmc2NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NSIgbmFtZT0iSW5wdXQ2NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NSIgbmFtZT0iT3V0cHV0NjUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY1IiB0eXBlPSJ0bnM6UG9ydFR5cGU2NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NSIgYmluZGluZz0idG5zOkJpbmRpbmc2NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NiIgbmFtZT0iSW5wdXQ2NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NiIgbmFtZT0iT3V0cHV0NjYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY2IiB0eXBlPSJ0bnM6UG9ydFR5cGU2NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NiIgYmluZGluZz0idG5zOkJpbmRpbmc2NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NyIgbmFtZT0iSW5wdXQ2NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NyIgbmFtZT0iT3V0cHV0NjciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY3IiB0eXBlPSJ0bnM6UG9ydFR5cGU2NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NyIgYmluZGluZz0idG5zOkJpbmRpbmc2NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2OCIgbmFtZT0iSW5wdXQ2OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2OCIgbmFtZT0iT3V0cHV0NjgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY4IiB0eXBlPSJ0bnM6UG9ydFR5cGU2OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2OCIgYmluZGluZz0idG5zOkJpbmRpbmc2OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2OSIgbmFtZT0iSW5wdXQ2OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2OSIgbmFtZT0iT3V0cHV0NjkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY5IiB0eXBlPSJ0bnM6UG9ydFR5cGU2OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2OSIgYmluZGluZz0idG5zOkJpbmRpbmc2OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MCIgbmFtZT0iSW5wdXQ3MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MCIgbmFtZT0iT3V0cHV0NzAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcwIiB0eXBlPSJ0bnM6UG9ydFR5cGU3MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MCIgYmluZGluZz0idG5zOkJpbmRpbmc3MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MSIgbmFtZT0iSW5wdXQ3MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MSIgbmFtZT0iT3V0cHV0NzEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcxIiB0eXBlPSJ0bnM6UG9ydFR5cGU3MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MSIgYmluZGluZz0idG5zOkJpbmRpbmc3MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MiIgbmFtZT0iSW5wdXQ3MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MiIgbmFtZT0iT3V0cHV0NzIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcyIiB0eXBlPSJ0bnM6UG9ydFR5cGU3MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MiIgYmluZGluZz0idG5zOkJpbmRpbmc3MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDczIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MyIgbmFtZT0iSW5wdXQ3MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MyIgbmFtZT0iT3V0cHV0NzMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzczIiB0eXBlPSJ0bnM6UG9ydFR5cGU3MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjczIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjczIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTczIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MyIgYmluZGluZz0idG5zOkJpbmRpbmc3MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NCIgbmFtZT0iSW5wdXQ3NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NCIgbmFtZT0iT3V0cHV0NzQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc0IiB0eXBlPSJ0bnM6UG9ydFR5cGU3NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NCIgYmluZGluZz0idG5zOkJpbmRpbmc3NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NSIgbmFtZT0iSW5wdXQ3NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NSIgbmFtZT0iT3V0cHV0NzUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc1IiB0eXBlPSJ0bnM6UG9ydFR5cGU3NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NSIgYmluZGluZz0idG5zOkJpbmRpbmc3NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NiIgbmFtZT0iSW5wdXQ3NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NiIgbmFtZT0iT3V0cHV0NzYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc2IiB0eXBlPSJ0bnM6UG9ydFR5cGU3NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NiIgYmluZGluZz0idG5zOkJpbmRpbmc3NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NyIgbmFtZT0iSW5wdXQ3NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NyIgbmFtZT0iT3V0cHV0NzciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc3IiB0eXBlPSJ0bnM6UG9ydFR5cGU3NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NyIgYmluZGluZz0idG5zOkJpbmRpbmc3NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3OCIgbmFtZT0iSW5wdXQ3OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3OCIgbmFtZT0iT3V0cHV0NzgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc4IiB0eXBlPSJ0bnM6UG9ydFR5cGU3OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3OCIgYmluZGluZz0idG5zOkJpbmRpbmc3OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3OSIgbmFtZT0iSW5wdXQ3OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3OSIgbmFtZT0iT3V0cHV0NzkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc5IiB0eXBlPSJ0bnM6UG9ydFR5cGU3OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3OSIgYmluZGluZz0idG5zOkJpbmRpbmc3OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MCIgbmFtZT0iSW5wdXQ4MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MCIgbmFtZT0iT3V0cHV0ODAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgwIiB0eXBlPSJ0bnM6UG9ydFR5cGU4MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MCIgYmluZGluZz0idG5zOkJpbmRpbmc4MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MSIgbmFtZT0iSW5wdXQ4MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MSIgbmFtZT0iT3V0cHV0ODEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgxIiB0eXBlPSJ0bnM6UG9ydFR5cGU4MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MSIgYmluZGluZz0idG5zOkJpbmRpbmc4MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MiIgbmFtZT0iSW5wdXQ4MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MiIgbmFtZT0iT3V0cHV0ODIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgyIiB0eXBlPSJ0bnM6UG9ydFR5cGU4MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MiIgYmluZGluZz0idG5zOkJpbmRpbmc4MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MyIgbmFtZT0iSW5wdXQ4MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MyIgbmFtZT0iT3V0cHV0ODMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgzIiB0eXBlPSJ0bnM6UG9ydFR5cGU4MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MyIgYmluZGluZz0idG5zOkJpbmRpbmc4MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NCIgbmFtZT0iSW5wdXQ4NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NCIgbmFtZT0iT3V0cHV0ODQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg0IiB0eXBlPSJ0bnM6UG9ydFR5cGU4NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NCIgYmluZGluZz0idG5zOkJpbmRpbmc4NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NSIgbmFtZT0iSW5wdXQ4NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NSIgbmFtZT0iT3V0cHV0ODUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg1IiB0eXBlPSJ0bnM6UG9ydFR5cGU4NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NSIgYmluZGluZz0idG5zOkJpbmRpbmc4NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NiIgbmFtZT0iSW5wdXQ4NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NiIgbmFtZT0iT3V0cHV0ODYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg2IiB0eXBlPSJ0bnM6UG9ydFR5cGU4NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NiIgYmluZGluZz0idG5zOkJpbmRpbmc4NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NyIgbmFtZT0iSW5wdXQ4NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NyIgbmFtZT0iT3V0cHV0ODciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg3IiB0eXBlPSJ0bnM6UG9ydFR5cGU4NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NyIgYmluZGluZz0idG5zOkJpbmRpbmc4NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4OCIgbmFtZT0iSW5wdXQ4OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4OCIgbmFtZT0iT3V0cHV0ODgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg4IiB0eXBlPSJ0bnM6UG9ydFR5cGU4OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4OCIgYmluZGluZz0idG5zOkJpbmRpbmc4OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4OSIgbmFtZT0iSW5wdXQ4OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4OSIgbmFtZT0iT3V0cHV0ODkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg5IiB0eXBlPSJ0bnM6UG9ydFR5cGU4OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4OSIgYmluZGluZz0idG5zOkJpbmRpbmc4OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MCIgbmFtZT0iSW5wdXQ5MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MCIgbmFtZT0iT3V0cHV0OTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkwIiB0eXBlPSJ0bnM6UG9ydFR5cGU5MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MCIgYmluZGluZz0idG5zOkJpbmRpbmc5MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MSIgbmFtZT0iSW5wdXQ5MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MSIgbmFtZT0iT3V0cHV0OTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkxIiB0eXBlPSJ0bnM6UG9ydFR5cGU5MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MSIgYmluZGluZz0idG5zOkJpbmRpbmc5MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MiIgbmFtZT0iSW5wdXQ5MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MiIgbmFtZT0iT3V0cHV0OTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkyIiB0eXBlPSJ0bnM6UG9ydFR5cGU5MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MiIgYmluZGluZz0idG5zOkJpbmRpbmc5MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MyIgbmFtZT0iSW5wdXQ5MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MyIgbmFtZT0iT3V0cHV0OTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkzIiB0eXBlPSJ0bnM6UG9ydFR5cGU5MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MyIgYmluZGluZz0idG5zOkJpbmRpbmc5MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NCIgbmFtZT0iSW5wdXQ5NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NCIgbmFtZT0iT3V0cHV0OTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk0IiB0eXBlPSJ0bnM6UG9ydFR5cGU5NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NCIgYmluZGluZz0idG5zOkJpbmRpbmc5NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NSIgbmFtZT0iSW5wdXQ5NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NSIgbmFtZT0iT3V0cHV0OTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk1IiB0eXBlPSJ0bnM6UG9ydFR5cGU5NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NSIgYmluZGluZz0idG5zOkJpbmRpbmc5NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NiIgbmFtZT0iSW5wdXQ5NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NiIgbmFtZT0iT3V0cHV0OTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk2IiB0eXBlPSJ0bnM6UG9ydFR5cGU5NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NiIgYmluZGluZz0idG5zOkJpbmRpbmc5NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NyIgbmFtZT0iSW5wdXQ5NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NyIgbmFtZT0iT3V0cHV0OTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk3IiB0eXBlPSJ0bnM6UG9ydFR5cGU5NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NyIgYmluZGluZz0idG5zOkJpbmRpbmc5NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5OCIgbmFtZT0iSW5wdXQ5OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5OCIgbmFtZT0iT3V0cHV0OTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk4IiB0eXBlPSJ0bnM6UG9ydFR5cGU5OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5OCIgYmluZGluZz0idG5zOkJpbmRpbmc5OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5OSIgbmFtZT0iSW5wdXQ5OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5OSIgbmFtZT0iT3V0cHV0OTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk5IiB0eXBlPSJ0bnM6UG9ydFR5cGU5OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5OSIgYmluZGluZz0idG5zOkJpbmRpbmc5OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODA4YTI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0IiBsb2NhdGlvbj0ic2FtcGxlNjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MiIgbG9jYXRpb249Ii4vc2FtcGxlODIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMyIgbG9jYXRpb249Ii5cc2FtcGxlMTMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTJhMmI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwIiBsb2NhdGlvbj0ic2FtcGxlMjAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNCIgbG9jYXRpb249Ii4vc2FtcGxlMzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5IiBsb2NhdGlvbj0iLlxzYW1wbGU5LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OGM0MmQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4IiBsb2NhdGlvbj0ic2FtcGxlMTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNCIgbG9jYXRpb249Ii4vc2FtcGxlMjQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNyIgbG9jYXRpb249Ii5cc2FtcGxlMzcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MThkZGViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwIiBsb2NhdGlvbj0ic2FtcGxlMTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NiIgbG9jYXRpb249Ii4vc2FtcGxlNTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1IiBsb2NhdGlvbj0iLlxzYW1wbGU1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjE4OTA1Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMSIgbG9jYXRpb249InNhbXBsZTIxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAiIGxvY2F0aW9uPSIuL3NhbXBsZTYwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQiIGxvY2F0aW9uPSIuXHNhbXBsZTM0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQ2ZGUwZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIiBsb2NhdGlvbj0ic2FtcGxlMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0IiBsb2NhdGlvbj0iLi9zYW1wbGU0NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyIiBsb2NhdGlvbj0iLlxzYW1wbGUzMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4NTcyMmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgiIGxvY2F0aW9uPSJzYW1wbGU5OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwIiBsb2NhdGlvbj0iLi9zYW1wbGU2MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0IiBsb2NhdGlvbj0iLlxzYW1wbGU0NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1Y2VmYjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMiIGxvY2F0aW9uPSJzYW1wbGU5My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2IiBsb2NhdGlvbj0iLi9zYW1wbGU1Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzIiBsb2NhdGlvbj0iLlxzYW1wbGUyMy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhOGFmZWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUxNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOCIgbG9jYXRpb249InNhbXBsZTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NyIgbG9jYXRpb249Ii4vc2FtcGxlOTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3IiBsb2NhdGlvbj0iLlxzYW1wbGU3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGMyMzRmMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NyIgbG9jYXRpb249InNhbXBsZTU3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEiIGxvY2F0aW9uPSIuL3NhbXBsZTIxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQiIGxvY2F0aW9uPSIuXHNhbXBsZTQ0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWRhYmYwNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMCIgbG9jYXRpb249InNhbXBsZTMwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYiIGxvY2F0aW9uPSIuL3NhbXBsZTI2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjciIGxvY2F0aW9uPSIuXHNhbXBsZTY3LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWRiMzgwNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTE5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MiIgbG9jYXRpb249InNhbXBsZTQyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMiIGxvY2F0aW9uPSIuL3NhbXBsZTUzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgiIGxvY2F0aW9uPSIuXHNhbXBsZTQ4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmNjg1MjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMiIGxvY2F0aW9uPSJzYW1wbGU2My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxIiBsb2NhdGlvbj0iLi9zYW1wbGUyMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5IiBsb2NhdGlvbj0iLlxzYW1wbGU1OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQ4ZWJiNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NCIgbG9jYXRpb249InNhbXBsZTY0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYiIGxvY2F0aW9uPSIuL3NhbXBsZTc2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEiIGxvY2F0aW9uPSIuXHNhbXBsZTkxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjliMDMxNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NiIgbG9jYXRpb249InNhbXBsZTg2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEiIGxvY2F0aW9uPSIuL3NhbXBsZTgxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMCIgbG9jYXRpb249Ii5cc2FtcGxlMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyYjA4MTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAiIGxvY2F0aW9uPSJzYW1wbGU3MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0IiBsb2NhdGlvbj0iLi9zYW1wbGU0NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQiIGxvY2F0aW9uPSIuXHNhbXBsZTQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NzQxMDA5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwIiBsb2NhdGlvbj0ic2FtcGxlMzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMyIgbG9jYXRpb249Ii4vc2FtcGxlMTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MCIgbG9jYXRpb249Ii5cc2FtcGxlNjAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MTBjMTdjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxIiBsb2NhdGlvbj0ic2FtcGxlODEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NSIgbG9jYXRpb249Ii4vc2FtcGxlNzUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NSIgbG9jYXRpb249Ii5cc2FtcGxlODUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjFiYWM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5IiBsb2NhdGlvbj0ic2FtcGxlMTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MSIgbG9jYXRpb249Ii4vc2FtcGxlODEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MyIgbG9jYXRpb249Ii5cc2FtcGxlNDMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZmU5NTdiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzIiBsb2NhdGlvbj0ic2FtcGxlNjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MSIgbG9jYXRpb249Ii4vc2FtcGxlNTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNCIgbG9jYXRpb249Ii5cc2FtcGxlMjQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZWU3YjU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxIiBsb2NhdGlvbj0ic2FtcGxlOTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NiIgbG9jYXRpb249Ii4vc2FtcGxlNDYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OSIgbG9jYXRpb249Ii5cc2FtcGxlNDkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjIzODk0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2IiBsb2NhdGlvbj0ic2FtcGxlNjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNCIgbG9jYXRpb249Ii4vc2FtcGxlMTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOCIgbG9jYXRpb249Ii5cc2FtcGxlMzgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUyOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTRlYmU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0IiBsb2NhdGlvbj0ic2FtcGxlNDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMyIgbG9jYXRpb249Ii4vc2FtcGxlMjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIiBsb2NhdGlvbj0iLlxzYW1wbGUxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhZjczODEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYiIGxvY2F0aW9uPSJzYW1wbGU3Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiIGxvY2F0aW9uPSIuL3NhbXBsZTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OCIgbG9jYXRpb249Ii5cc2FtcGxlNDgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2OGVhYzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQiIGxvY2F0aW9uPSJzYW1wbGUyNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwIiBsb2NhdGlvbj0iLi9zYW1wbGU2MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiIGxvY2F0aW9uPSIuXHNhbXBsZTEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTdiODRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3IiBsb2NhdGlvbj0ic2FtcGxlMjcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MiIgbG9jYXRpb249Ii4vc2FtcGxlOTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyIiBsb2NhdGlvbj0iLlxzYW1wbGUyLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBmMzhjNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3IiBsb2NhdGlvbj0ic2FtcGxlNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwIiBsb2NhdGlvbj0iLi9zYW1wbGU5MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4IiBsb2NhdGlvbj0iLlxzYW1wbGU3OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3N2QxYzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjkiIGxvY2F0aW9uPSJzYW1wbGUyOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1IiBsb2NhdGlvbj0iLi9zYW1wbGUzNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0IiBsb2NhdGlvbj0iLlxzYW1wbGU2NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExODk3ZjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQiIGxvY2F0aW9uPSJzYW1wbGU3NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0IiBsb2NhdGlvbj0iLi9zYW1wbGU5NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4IiBsb2NhdGlvbj0iLlxzYW1wbGU2OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxMjFmYzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgiIGxvY2F0aW9uPSJzYW1wbGU1OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0IiBsb2NhdGlvbj0iLi9zYW1wbGUyNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3IiBsb2NhdGlvbj0iLlxzYW1wbGUzNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhODY3ZDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODciIGxvY2F0aW9uPSJzYW1wbGU4Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciIGxvY2F0aW9uPSIuL3NhbXBsZTcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OSIgbG9jYXRpb249Ii5cc2FtcGxlNzkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmRlYTU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1IiBsb2NhdGlvbj0ic2FtcGxlNTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMiIgbG9jYXRpb249Ii4vc2FtcGxlMTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2IiBsb2NhdGlvbj0iLlxzYW1wbGU2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjdhNzY5Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5IiBsb2NhdGlvbj0ic2FtcGxlOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyIiBsb2NhdGlvbj0iLi9zYW1wbGU3Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0IiBsb2NhdGlvbj0iLlxzYW1wbGU3NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTM5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkZTdhODQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUzOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUiIGxvY2F0aW9uPSJzYW1wbGU0NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgiIGxvY2F0aW9uPSIuL3NhbXBsZTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NCIgbG9jYXRpb249Ii5cc2FtcGxlNTQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWMzNDllZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMCIgbG9jYXRpb249InNhbXBsZTEwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYiIGxvY2F0aW9uPSIuL3NhbXBsZTY2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMiIGxvY2F0aW9uPSIuXHNhbXBsZTIzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjMxZWIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3IiBsb2NhdGlvbj0ic2FtcGxlNDcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNCIgbG9jYXRpb249Ii4vc2FtcGxlMzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNiIgbG9jYXRpb249Ii5cc2FtcGxlMTYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDYyOGJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNDEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiIGxvY2F0aW9uPSJzYW1wbGUxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSIgbG9jYXRpb249Ii4vc2FtcGxlOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwIiBsb2NhdGlvbj0iLlxzYW1wbGU4MC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViMzNiMzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIiIGxvY2F0aW9uPSJzYW1wbGU4Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzIiBsb2NhdGlvbj0iLi9zYW1wbGU4My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzIiBsb2NhdGlvbj0iLlxzYW1wbGU0My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmNmMzMjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEiIGxvY2F0aW9uPSJzYW1wbGUzMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3IiBsb2NhdGlvbj0iLi9zYW1wbGU5Ny53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2IiBsb2NhdGlvbj0iLlxzYW1wbGU3Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4NzMyZjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIiIGxvY2F0aW9uPSJzYW1wbGU3Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1IiBsb2NhdGlvbj0iLi9zYW1wbGU4NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxIiBsb2NhdGlvbj0iLlxzYW1wbGU3MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhZWNhNjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYiIGxvY2F0aW9uPSJzYW1wbGU2Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1IiBsb2NhdGlvbj0iLi9zYW1wbGUxNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5IiBsb2NhdGlvbj0iLlxzYW1wbGU4OS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4Njc5NDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAiIGxvY2F0aW9uPSJzYW1wbGUzMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4IiBsb2NhdGlvbj0iLi9zYW1wbGU1OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0IiBsb2NhdGlvbj0iLlxzYW1wbGU5NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1NjRkYTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIiIGxvY2F0aW9uPSJzYW1wbGU2Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwIiBsb2NhdGlvbj0iLi9zYW1wbGUzMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5IiBsb2NhdGlvbj0iLlxzYW1wbGUxOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlNjczYjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMiIGxvY2F0aW9uPSJzYW1wbGU1My53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE0IiBsb2NhdGlvbj0iLi9zYW1wbGUxNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyIiBsb2NhdGlvbj0iLlxzYW1wbGU1Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQ5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhMGM3MzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU0OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgiIGxvY2F0aW9uPSJzYW1wbGU2OC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTAiIGxvY2F0aW9uPSIuL3NhbXBsZTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MyIgbG9jYXRpb249Ii5cc2FtcGxlOTMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjlhNjBhOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NyIgbG9jYXRpb249InNhbXBsZTQ3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgiIGxvY2F0aW9uPSIuL3NhbXBsZTY4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMiIGxvY2F0aW9uPSIuXHNhbXBsZTMzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjUxNjJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxIiBsb2NhdGlvbj0ic2FtcGxlNjEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NiIgbG9jYXRpb249Ii4vc2FtcGxlODYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OSIgbG9jYXRpb249Ii5cc2FtcGxlODkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OWFmYzhhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1IiBsb2NhdGlvbj0ic2FtcGxlODUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMiIgbG9jYXRpb249Ii4vc2FtcGxlMjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MCIgbG9jYXRpb249Ii5cc2FtcGxlODAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTkyNzgwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3IiBsb2NhdGlvbj0ic2FtcGxlNzcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MSIgbG9jYXRpb249Ii4vc2FtcGxlNzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NyIgbG9jYXRpb249Ii5cc2FtcGxlNjcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OWE5M2ExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyIiBsb2NhdGlvbj0ic2FtcGxlNjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OSIgbG9jYXRpb249Ii4vc2FtcGxlNDkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OSIgbG9jYXRpb249Ii5cc2FtcGxlNTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmNkYjk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyIiBsb2NhdGlvbj0ic2FtcGxlODIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMCIgbG9jYXRpb249Ii4vc2FtcGxlMzAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MyIgbG9jYXRpb249Ii5cc2FtcGxlNTMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODM5MjRiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4IiBsb2NhdGlvbj0ic2FtcGxlNzgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NyIgbG9jYXRpb249Ii4vc2FtcGxlNzcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIiBsb2NhdGlvbj0iLlxzYW1wbGUxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFlOWMxZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMCIgbG9jYXRpb249InNhbXBsZTIwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzciIGxvY2F0aW9uPSIuL3NhbXBsZTc3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNCIgbG9jYXRpb249Ii5cc2FtcGxlNC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjZmJkNzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUiIGxvY2F0aW9uPSJzYW1wbGU5NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2IiBsb2NhdGlvbj0iLi9zYW1wbGU1Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2IiBsb2NhdGlvbj0iLlxzYW1wbGU5Ni53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzMTdhNDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAiIGxvY2F0aW9uPSJzYW1wbGU5MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiIGxvY2F0aW9uPSIuL3NhbXBsZTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MyIgbG9jYXRpb249Ii5cc2FtcGxlNzMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU1OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZGQ0YTdhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzIiBsb2NhdGlvbj0ic2FtcGxlNjMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUwIiBsb2NhdGlvbj0iLi9zYW1wbGUwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUiIGxvY2F0aW9uPSIuXHNhbXBsZTY1LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5N2MyZTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkiIGxvY2F0aW9uPSJzYW1wbGU2OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2IiBsb2NhdGlvbj0iLi9zYW1wbGU2Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5IiBsb2NhdGlvbj0iLlxzYW1wbGUxOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2RmOTIxNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NyIgbG9jYXRpb249InNhbXBsZTk3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIiIGxvY2F0aW9uPSIuL3NhbXBsZTEyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEiIGxvY2F0aW9uPSIuXHNhbXBsZTQxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjA4YTg1Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOCIgbG9jYXRpb249InNhbXBsZTE4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYiIGxvY2F0aW9uPSIuL3NhbXBsZTE2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSIgbG9jYXRpb249Ii5cc2FtcGxlOS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiZGY0YWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUiIGxvY2F0aW9uPSJzYW1wbGUyNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyIiBsb2NhdGlvbj0iLi9zYW1wbGUxMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxIiBsb2NhdGlvbj0iLlxzYW1wbGUyMS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkMWYyNzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkiIGxvY2F0aW9uPSJzYW1wbGU2OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQiIGxvY2F0aW9uPSIuL3NhbXBsZTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOSIgbG9jYXRpb249Ii5cc2FtcGxlMTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMmEyMjcyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMzIiBsb2NhdGlvbj0ic2FtcGxlMzMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NCIgbG9jYXRpb249Ii4vc2FtcGxlNzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNSIgbG9jYXRpb249Ii5cc2FtcGxlMjUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YWEwOTdiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYiIGxvY2F0aW9uPSJzYW1wbGU2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAiIGxvY2F0aW9uPSIuL3NhbXBsZTMwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYiIGxvY2F0aW9uPSIuXHNhbXBsZTg2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2I2MTMyZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNCIgbG9jYXRpb249InNhbXBsZTI0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkiIGxvY2F0aW9uPSIuL3NhbXBsZTM5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMiIGxvY2F0aW9uPSIuXHNhbXBsZTEzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2M5ODA2NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4IiBsb2NhdGlvbj0ic2FtcGxlOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxIiBsb2NhdGlvbj0iLi9zYW1wbGU2MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzIiBsb2NhdGlvbj0iLlxzYW1wbGU4My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwODYyMTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU2OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMiIgbG9jYXRpb249InNhbXBsZTIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MSIgbG9jYXRpb249Ii4vc2FtcGxlOTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIiBsb2NhdGlvbj0iLlxzYW1wbGUxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTA4N2RmNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTY5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMyIgbG9jYXRpb249InNhbXBsZTMzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAiIGxvY2F0aW9uPSIuL3NhbXBsZTcwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMiIGxvY2F0aW9uPSIuXHNhbXBsZTczLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzYWNlNGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQiIGxvY2F0aW9uPSJzYW1wbGUyNC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2IiBsb2NhdGlvbj0iLi9zYW1wbGU2Ni53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3IiBsb2NhdGlvbj0iLlxzYW1wbGUxNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBmOWM3Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNiIgbG9jYXRpb249InNhbXBsZTE2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMiIGxvY2F0aW9uPSIuL3NhbXBsZTEzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQiIGxvY2F0aW9uPSIuXHNhbXBsZTY0LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmM0YjZlOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNSIgbG9jYXRpb249InNhbXBsZTM1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYiIGxvY2F0aW9uPSIuL3NhbXBsZTU2LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMiIGxvY2F0aW9uPSIuXHNhbXBsZTQzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDIxMzAwMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NSIgbG9jYXRpb249InNhbXBsZTk1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSIgbG9jYXRpb249Ii4vc2FtcGxlMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3IiBsb2NhdGlvbj0iLlxzYW1wbGU1Ny53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTczLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTczLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczOGY2NjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIiIGxvY2F0aW9uPSJzYW1wbGUzMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0IiBsb2NhdGlvbj0iLi9zYW1wbGU3NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzIiBsb2NhdGlvbj0iLlxzYW1wbGU5My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkYjk5OTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQiIGxvY2F0aW9uPSJzYW1wbGU1NC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxIiBsb2NhdGlvbj0iLi9zYW1wbGU1MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyIiBsb2NhdGlvbj0iLlxzYW1wbGUxMi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmOGMyN2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkiIGxvY2F0aW9uPSJzYW1wbGUxOS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTAiIGxvY2F0aW9uPSIuL3NhbXBsZTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMyIgbG9jYXRpb249Ii5cc2FtcGxlMTMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGI2M2Y3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0IiBsb2NhdGlvbj0ic2FtcGxlMzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OSIgbG9jYXRpb249Ii4vc2FtcGxlODkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NyIgbG9jYXRpb249Ii5cc2FtcGxlNDcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU3Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZGZhZTNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiIGxvY2F0aW9uPSJzYW1wbGUyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMiIGxvY2F0aW9uPSIuL3NhbXBsZTgzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMiIGxvY2F0aW9uPSIuXHNhbXBsZTQzLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTYwYzQyNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MSIgbG9jYXRpb249InNhbXBsZTYxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkiIGxvY2F0aW9uPSIuL3NhbXBsZTg5LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYiIGxvY2F0aW9uPSIuXHNhbXBsZTU2LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWRiNmVhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTc5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3IiBsb2NhdGlvbj0ic2FtcGxlNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyIiBsb2NhdGlvbj0iLi9zYW1wbGU1Mi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4IiBsb2NhdGlvbj0iLlxzYW1wbGU0OC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjI1NjQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1IiBsb2NhdGlvbj0ic2FtcGxlNDUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MiIgbG9jYXRpb249Ii4vc2FtcGxlNDIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OCIgbG9jYXRpb249Ii5cc2FtcGxlODgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3Njc4MDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNiIgbG9jYXRpb249InNhbXBsZTYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OCIgbG9jYXRpb249Ii4vc2FtcGxlOTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OCIgbG9jYXRpb249Ii5cc2FtcGxlNjgud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzk5OGRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0IiBsb2NhdGlvbj0ic2FtcGxlNzQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUwIiBsb2NhdGlvbj0iLi9zYW1wbGUwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjEiIGxvY2F0aW9uPSIuXHNhbXBsZTYxLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Y4YWQ1Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MyIgbG9jYXRpb249InNhbXBsZTkzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMyIgbG9jYXRpb249Ii4vc2FtcGxlMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyIiBsb2NhdGlvbj0iLlxzYW1wbGU5Mi53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3OWNmMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkiIGxvY2F0aW9uPSJzYW1wbGU1OS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1IiBsb2NhdGlvbj0iLi9zYW1wbGU4NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxIiBsb2NhdGlvbj0iLlxzYW1wbGU2MS53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiMDIzOTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAiIGxvY2F0aW9uPSJzYW1wbGU1MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2IiBsb2NhdGlvbj0iLi9zYW1wbGUxNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE3IiBsb2NhdGlvbj0iLlxzYW1wbGUxNy53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5MmE4ZDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMiIGxvY2F0aW9uPSJzYW1wbGUyMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwIiBsb2NhdGlvbj0iLi9zYW1wbGU4MC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzIiBsb2NhdGlvbj0iLlxzYW1wbGU2My53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmMzljNzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAiIGxvY2F0aW9uPSJzYW1wbGUzMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1IiBsb2NhdGlvbj0iLi9zYW1wbGU4NS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0IiBsb2NhdGlvbj0iLlxzYW1wbGU4NC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4NGIzZDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYiIGxvY2F0aW9uPSJzYW1wbGUxNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxIiBsb2NhdGlvbj0iLi9zYW1wbGU3MS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwIiBsb2NhdGlvbj0iLlxzYW1wbGUxMC53c2RsIi8+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTg4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyN2QyYTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMiIGxvY2F0aW9uPSJzYW1wbGUxMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkiIGxvY2F0aW9uPSIuL3NhbXBsZTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MSIgbG9jYXRpb249Ii5cc2FtcGxlOTEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU4OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OWIxYzcxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlODkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxIiBsb2NhdGlvbj0ic2FtcGxlOTEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MyIgbG9jYXRpb249Ii4vc2FtcGxlNDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MCIgbG9jYXRpb249Ii5cc2FtcGxlNDAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmZjNjJmMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMSIgbG9jYXRpb249InNhbXBsZTIxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODMiIGxvY2F0aW9uPSIuL3NhbXBsZTgzLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgiIGxvY2F0aW9uPSIuXHNhbXBsZTQ4LndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZmM3Y2Q1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYwIiBsb2NhdGlvbj0ic2FtcGxlNjAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MyIgbG9jYXRpb249Ii4vc2FtcGxlNTMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NyIgbG9jYXRpb249Ii5cc2FtcGxlODcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzZhNjI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5IiBsb2NhdGlvbj0ic2FtcGxlOTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NyIgbG9jYXRpb249Ii4vc2FtcGxlODcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MSIgbG9jYXRpb249Ii5cc2FtcGxlNTEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDFmMDFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzIiBsb2NhdGlvbj0ic2FtcGxlODMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNyIgbG9jYXRpb249Ii4vc2FtcGxlMjcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMCIgbG9jYXRpb249Ii5cc2FtcGxlMjAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzFiMjk1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0IiBsb2NhdGlvbj0ic2FtcGxlNTQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NCIgbG9jYXRpb249Ii4vc2FtcGxlNDQud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NyIgbG9jYXRpb249Ii5cc2FtcGxlOTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjJmZTEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzIiBsb2NhdGlvbj0ic2FtcGxlNDMud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MiIgbG9jYXRpb249Ii4vc2FtcGxlNjIud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MCIgbG9jYXRpb249Ii5cc2FtcGxlNjAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxN2M1MDdiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwIiBsb2NhdGlvbj0ic2FtcGxlNTAud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNyIgbG9jYXRpb249Ii4vc2FtcGxlMzcud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NiIgbG9jYXRpb249Ii5cc2FtcGxlNDYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmN2E4M2RiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1IiBsb2NhdGlvbj0ic2FtcGxlMTUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MSIgbG9jYXRpb249Ii4vc2FtcGxlNzEud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMyIgbG9jYXRpb249Ii5cc2FtcGxlMzMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDU2YWExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5IiBsb2NhdGlvbj0ic2FtcGxlNTkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNiIgbG9jYXRpb249Ii4vc2FtcGxlMjYud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MSIgbG9jYXRpb249Ii5cc2FtcGxlNzEud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZWNiZTRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4IiBsb2NhdGlvbj0ic2FtcGxlMTgud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OSIgbG9jYXRpb249Ii4vc2FtcGxlNjkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NyIgbG9jYXRpb249Ii5cc2FtcGxlNjcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGU5OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZWI0Mzg2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1IiBsb2NhdGlvbj0ic2FtcGxlODUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOSIgbG9jYXRpb249Ii4vc2FtcGxlMjkud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUwIiBsb2NhdGlvbj0iLlxzYW1wbGUwLndzZGwiLz4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwMDlmZTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGYzZWVhYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5YjM5ZmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzgzYWVkYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTExLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwM2RmYjA5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTEzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2NzcxNWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzc1N2EwYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTM4MGUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmNmIxMWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzVhNjkyOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTAxYTljLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTE5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0ZDE4NTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUxOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkMDRmM2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzFiMTI1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyOWI3MGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI2NGQ2NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMmFkYmYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5NmI3NzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGE1NjMwNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzQzYWY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxNTMwOGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDY1MjgxZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTI4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUyOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDQ0NjY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODkxY2M2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjc2ZTM2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTgzMjUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjMWYxMzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDdlZDMzMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTM2NjhlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3NTU3ODQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmVjZDFmMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZGU0MWVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlZWMwZWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUzOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMzkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjExMDVlMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTM5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGU4YzBhNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhMDg5ZTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTUxNzM1ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzcwNDBiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzOWI0MmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGE3MDUwZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTM0OTUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmNDA3YjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjBjMTBmOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTE0MzcxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNDgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTQ5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5OGZmNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU0OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwMTg1NjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Njg4MTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlZTJhNTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjNlMjVlOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTUxMmE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0MGY3OGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWRhZmM0MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTNiMzIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlZDA3NzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGFlNTFkNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU1OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNThiNTVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjIyZDMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjc2NjAwNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjFhNGRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1OTBhNTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzA3NzJkMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzU0ZTlkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2NjgyYzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE0MDA0NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOGI5ZTYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlYjMwOTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU2OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNjkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGE0MzEzYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTY5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjA2MGE3Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1OTUwMmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjMzNzBlYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTcxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzdmMzRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTczLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTczLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwZDZkYTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDYwMzVkNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzY2E1Zjk4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4ZjViZTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmUxZjYyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjk3ZDhkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlNzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTc5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzODczYmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU3OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwNzFiMWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZGE4MmUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5YzZiZTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTFhZGQ2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOWVjOTg0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjZWQ2MGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTI0OTI3Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTFkMDdkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5N2IzNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzMzZGMyMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTg4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU4OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWYyMmZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlODkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZmNkYTMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI3ODUxMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzBlNDMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwNDM4YWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTdlZGUyNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2NjMTZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmOWE3ZDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmQzNjQ4MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMmNkMzk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5NjQ2ZGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc05vRGVwZW5kcy9zYW1wbGU5OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNOb0RlcGVuZHMvc2FtcGxlOTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTM0YmEwMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTk5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OGQ0MWM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWUxMmRjMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8wIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8wIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxOC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg0IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU4NC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTUueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5YjMyN2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYWQxNDQxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcxLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjYiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTY2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjYiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTI2LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhODhmZjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiZDhkMjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwYjliNzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTExIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTExIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTExLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGExMzYwYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzExIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMTUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNDMueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzdmNDVlNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjZjMTI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTIiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTEiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTExLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzEiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTMxLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3NTBiMTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTEzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjExMGNhYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEzIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyMi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ3IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU0Ny54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc3IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3Ny54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNGU2ODdkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhYzA1YTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNTAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMTcueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTBiYjBhNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGU2NWNiMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE1Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMzAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlOTgueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRlNmJjYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTYueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTYueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTVlYWM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTYiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTkwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlOS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzBmNGEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxNyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxNy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1MDAyMjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTcueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTQiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTE0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNy54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzZiODgzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUxOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkZWEwYjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTgueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlOTQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzgueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjgzMDNmYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTE5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMTkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTkueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTkueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Y2I1NzY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTkiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzIiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTcyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTQiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTU0LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjhhYWUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQ3MjI4Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI3IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUyNy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTUueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGE4MTY3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTI2YTE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjAiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTMwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTgiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTE4LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2MWE0Y2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTIxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTY2MWFiYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIxIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1MC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE3IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUxNy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcxIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3MS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjUyMWU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyMiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5ZWRiYjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlODAueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQxMGQ0NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMjMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjU2MThhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjMiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIyIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUyMi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTUxNjdjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlMTVkMjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUxLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNy54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTczY2NjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzODBiZTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmYWY3YTY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwYzA2NDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjYueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMzUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUzLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1NDNiMGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGRjOWYzOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI3Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc1IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUyIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1Mi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTUwODQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMjgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjgueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjgueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YmQ1ZGM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjgiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzYiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTc2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjYiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTY2LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyODYxZmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTI5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTI5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Q0YjU0Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI5Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNDEueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3NzgyZmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTlhNWViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTIiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTUyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjYiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTY2LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzMDZhNDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjA2Y2E0OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMwIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4OC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ1IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU0NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE3IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUxNy54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDVkMjE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNTk5YTE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzEiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzkiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTc5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjgiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTY4LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzMzliMzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjBhN2RiNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMyIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Mi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI4IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUyOC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc3IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3Ny54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjAwNjczLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzMyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzMy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhZmY0OWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNjMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNjUueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzk0YjJhOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlM2MwMzM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzQiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTYzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjIiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTYyLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxN2NkM2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTMyYTI4MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM1Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ3IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU0Ny54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE5IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUxOS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzgyMjFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzNiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4OGMyYWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzYueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNTQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzUueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBkYTgyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMzciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzcueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzcueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjNmM2NiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzciPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjIiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTIyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTg5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjMzEwOTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTM4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTM4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc0LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNlMjFkMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM4Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1MC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk1IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU5NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzczIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3My54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTBhZDFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMzkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUzOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2OS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzOS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxYmY4MTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzkueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMzAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU0LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYThiNTMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RkZThkYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNjIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMzQueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNjNjE0Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzJmZDJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDAiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTkiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTU5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlOS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzQzMDk5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlOTM0YmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUxLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhYzBlM2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMxLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTk3MTgxNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Mi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQyIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc3IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3Ny54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUxIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1MS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0My53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDc1MjY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0MyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDMiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0MyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0My54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0My54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5NjA2OTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNzMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMTMueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjljZmQ2OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDQiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzExIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNmUxZDViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDQiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTczLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDUiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTQ1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTIiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTEyLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlN2IwMDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ1LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODk3MDJmYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ1Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlOTUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNjYueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDgyYzNlZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDYueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDYueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDQwMWU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ2LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDYiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTczLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjMiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTYzLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3NGJmNGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTQ3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ3LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTAxNTc4Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Ny54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ3Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc3IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3Ny54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE0IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUxNC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzM5NDg2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU0OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2NDA0ZDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDgueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMTkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMjgueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTUwZTA2Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNDkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQ5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNDkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDkueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDkueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjQ0MWE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQ5LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDkiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTkiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTk5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTMiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTUzLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDFhYzM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDkueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmFmODhkMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlODkueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDYwYTliMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTAiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDIxNzI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTAiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTIzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjBhMjEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzOS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1MS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3ZmMyMjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDEiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTQxLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiMTAzMmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTUyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDlhOTQzZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Mi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUyIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMTkueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJlNDE2YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YWIzNDAwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTMiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcwIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3MC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc4IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3OC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZWM5ZTU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5ZTMzZTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlOTQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU2LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2YzZlYTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGRjZGI5OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1NS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU1Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Mi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzczIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc0IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3NC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTkxZWJkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Ni54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Ni54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkMTc5MGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTYueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlODQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMjgueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDA4MGI4My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTcueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTcueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1N2ZlODNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTciPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODgiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTg4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTgiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTU4LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3ZGMzMzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTU4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWUxZWFiZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU4Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI5IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUyOS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTUueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjZlNTllYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTU5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNTkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODQueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTkueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTkueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NWJjZjIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTkiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjkiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTY5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTAiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTkwLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmRlNDM0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODU2YjljYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1OC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY2IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU2Ni54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcyIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3Mi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNGY0YTcxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2YWRjZDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMTUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUzLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwYjRkMWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4YmRhMTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNjIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMjQueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzMyMDJlMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlM2M4YjJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjIiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTgiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTE4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTciIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTU3LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4MGMxMjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTg1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWUxZDM4MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2My54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYzIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ4IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU0OC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcwIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3MC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZWIxMDgwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiMTc3ZmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlODMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNTgueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjI3YWZkNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDM1MDdlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjUiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzUiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTM1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzgiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTM4LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5ZWJkMmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTY2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjc4Nzc4MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Ni54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY2Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0NC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUxIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU1MS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU5IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1OS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjVlODQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Ny54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Ny54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1Yzg0YTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjcueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNDUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlODQueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQyNzc0Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTY4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNjgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjgueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjgueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NzI0MzlhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjgiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8wIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc5IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3OS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk2IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU5Ni54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMWU2YjEwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNjkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU2OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Ni54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyNzg2MjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjkueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82OSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTE5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OWFiMmI1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGUxYjI3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI2IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUyNi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk4IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU5OC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDdhZGI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjOTgwNTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlODAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNDkueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTg0ODc3Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzEiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZWQzMTgyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzEiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTEzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTciIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTU3LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiODk5ZmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTcyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3MiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTcyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Mi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Mi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4NDcwM2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMzIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNjEueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWVkMjhmNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTczIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDgueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODA4OWFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzMiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjciIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTI3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTciIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTk3LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwOGMwNTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc0Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmMxYzA0YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc0Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4Ni54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgzIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU4My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg0IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU4NC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTMzZjk2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3NS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzMDFkOTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMTQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMzAueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Ni53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmFjYjRmNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Ni53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODhmODA2Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Ni54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc2Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0MS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU2IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU1Ni54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI0IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUyNC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Ny53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDc1ZmI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3NyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU3NyI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Ny54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Ny54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhYjhhYmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzcueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMTEueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2I4YjNiOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNzgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNzgiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzgueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzgueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZGJlNTJkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc4LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzgiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDEiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTQxLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTk5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyYWRhYWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTc5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3OSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTc5Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc5LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRhNzNmMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc5Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcwIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3MC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc4IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3OC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzRhMDhkMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ4LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlNWM3ZjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTczLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjEiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTIxLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxOTgwYjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTFmYzkzZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgwIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzOC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQxIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU0MS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg5IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU4OS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmNhYWM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4MSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4MC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmYmQ0YmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNDMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNDkueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Mi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2M1Mzg5MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Mi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgyIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODIiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTM1NGVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODIiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTEyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTQiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTE0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTY5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1NTFlMmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4MyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTgzIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY1LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTExNjE0ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4My54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgzIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzMi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUzIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU1My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI0IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUyNC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Zjg1MDMxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkY2M2MmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMzYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlODIueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWRlZTk5NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NmYwZjIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODUiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDQiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTQ0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTI5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODYud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllNjFjODYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4NiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg2Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTIyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzM5ZGI4OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Ni54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg2Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlODAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzEueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Ny53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2U0NzY3Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Ny53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg3Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlODciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzUueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODcueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODcueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODU5YTZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODciPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzciIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTc3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzYiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTM2LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlZDRkYjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTg4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTg4Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA4NDdkZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg4Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg2IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU4Ni54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY2IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU2Ni54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmYxZGY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4OSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlODkiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU4OSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3MS54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4OS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1MWY1YzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODkueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlOTQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUxLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTFjZWEwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzEueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjJhOTQwOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0MS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkxIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU5MS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY3IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU2Ny54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjE0YzYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTllMTZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTAiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjkiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTI5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjIiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTYyLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjMTQ3N2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTkxIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYzLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzFkYWVjYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkxIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg2IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU4Ni54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcwIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3MC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Mi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZGI3Yzc5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5MiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5MiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Mi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Mi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4ZTJlNzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMTMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlODAueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5My53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWY0MzVlMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5My53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjAueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDBjM2M0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTMiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEzIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUxMy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYyIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU2Mi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjFiOTZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Mi54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjZTA2MTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNDAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzIueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2FiYjRkYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk1Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTUiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk1LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMThjOTE3YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk1Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0MS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg3IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU4Ny54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQxIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU0MS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Ni53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OGFkNDA0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTYiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5NiI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3OC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Ni54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Ni54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiZmRlN2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTYueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjYiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTY2LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTcud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2NTIzOGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5NyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTk3Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ5OTM5Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Ny54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk3Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Ny54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgwIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU4MC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQwIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU0MC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjcwNjhhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5OCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTgiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU5OCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3My54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlMTg1YWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTgueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzExIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlOTQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzAueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTZhNWQ0Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOTkiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTk5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOTkiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU5LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk5LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTFkMTUzMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk5Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM5IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUzOS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE0IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUxNC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBLQi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMEtCLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxMGRiYzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMEtCLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9IkRlZmluaXRpb24iIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scyI+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDwveHNkOnNjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24wIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTAiIG5hbWU9IklucHV0MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UwIiBuYW1lPSJPdXRwdXQwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcwIiB0eXBlPSJ0bnM6UG9ydFR5cGUwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24wIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDAiIGJpbmRpbmc9InRuczpCaW5kaW5nMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxIiBuYW1lPSJJbnB1dDEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMSIgbmFtZT0iT3V0cHV0MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMSIgdHlwZT0idG5zOlBvcnRUeXBlMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMiIgbmFtZT0iSW5wdXQyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIiIG5hbWU9Ik91dHB1dDIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIiIHR5cGU9InRuczpQb3J0VHlwZTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MiIgYmluZGluZz0idG5zOkJpbmRpbmcyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMiIG5hbWU9IklucHV0MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzIiBuYW1lPSJPdXRwdXQzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczIiB0eXBlPSJ0bnM6UG9ydFR5cGUzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMiIGJpbmRpbmc9InRuczpCaW5kaW5nMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0IiBuYW1lPSJJbnB1dDQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNCIgbmFtZT0iT3V0cHV0NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNCIgdHlwZT0idG5zOlBvcnRUeXBlNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNSIgbmFtZT0iSW5wdXQ1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUiIG5hbWU9Ik91dHB1dDUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUiIHR5cGU9InRuczpQb3J0VHlwZTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NSIgYmluZGluZz0idG5zOkJpbmRpbmc1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYiIG5hbWU9IklucHV0NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2IiBuYW1lPSJPdXRwdXQ2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2IiB0eXBlPSJ0bnM6UG9ydFR5cGU2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYiIGJpbmRpbmc9InRuczpCaW5kaW5nNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3IiBuYW1lPSJJbnB1dDciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNyIgbmFtZT0iT3V0cHV0NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNyIgdHlwZT0idG5zOlBvcnRUeXBlNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOCIgbmFtZT0iSW5wdXQ4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgiIG5hbWU9Ik91dHB1dDgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgiIHR5cGU9InRuczpQb3J0VHlwZTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OCIgYmluZGluZz0idG5zOkJpbmRpbmc4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkiIG5hbWU9IklucHV0OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5IiBuYW1lPSJPdXRwdXQ5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5IiB0eXBlPSJ0bnM6UG9ydFR5cGU5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkiIGJpbmRpbmc9InRuczpCaW5kaW5nOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODMzNjk4ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiIGxvY2F0aW9uPSJzYW1wbGUxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMiIgbG9jYXRpb249Ii4vc2FtcGxlMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQiIGxvY2F0aW9uPSIuXHNhbXBsZTQud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzVjMzI5Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgiIGxvY2F0aW9uPSJzYW1wbGU4LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNyIgbG9jYXRpb249Ii4vc2FtcGxlNy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkiIGxvY2F0aW9uPSIuXHNhbXBsZTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjljOTI3MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTAiIGxvY2F0aW9uPSJzYW1wbGUwLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNSIgbG9jYXRpb249Ii4vc2FtcGxlNS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciIGxvY2F0aW9uPSIuXHNhbXBsZTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDIyMWU4YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciIGxvY2F0aW9uPSJzYW1wbGU3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOCIgbG9jYXRpb249Ii4vc2FtcGxlOC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYiIGxvY2F0aW9uPSIuXHNhbXBsZTYud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTZkYzFjOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiIGxvY2F0aW9uPSJzYW1wbGUyLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMyIgbG9jYXRpb249Ii4vc2FtcGxlMy53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciIGxvY2F0aW9uPSIuXHNhbXBsZTcud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjBhZTMyMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciIGxvY2F0aW9uPSJzYW1wbGU3LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMCIgbG9jYXRpb249Ii4vc2FtcGxlMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkiIGxvY2F0aW9uPSIuXHNhbXBsZTkud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzVjYmUwMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUiIGxvY2F0aW9uPSJzYW1wbGU1LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSIgbG9jYXRpb249Ii4vc2FtcGxlMS53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTAiIGxvY2F0aW9uPSIuXHNhbXBsZTAud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzgzMWZmMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlNy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQiIGxvY2F0aW9uPSJzYW1wbGU0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNiIgbG9jYXRpb249Ii4vc2FtcGxlNi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUiIGxvY2F0aW9uPSIuXHNhbXBsZTUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTgud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRlMmU4Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQiIGxvY2F0aW9uPSJzYW1wbGU0LndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMiIgbG9jYXRpb249Ii4vc2FtcGxlMi53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUiIGxvY2F0aW9uPSIuXHNhbXBsZTUud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZhOGY3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiIGxvY2F0aW9uPSJzYW1wbGUxLndzZGwiLz4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMCIgbG9jYXRpb249Ii4vc2FtcGxlMC53c2RsIi8+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMiIGxvY2F0aW9uPSIuXHNhbXBsZTMud3NkbCIvPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNOb0RlcGVuZHMvc2FtcGxlMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzTm9EZXBlbmRzL3NhbXBsZTAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjAwOWZlNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNOb0RlcGVuZHMvc2FtcGxlMC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUwIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUwIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc05vRGVwZW5kcy9zYW1wbGUxLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNOb0RlcGVuZHMvc2FtcGxlMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjNlZWFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc05vRGVwZW5kcy9zYW1wbGUxLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc05vRGVwZW5kcy9zYW1wbGUyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkMDRmM2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzTm9EZXBlbmRzL3NhbXBsZTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNOb0RlcGVuZHMvc2FtcGxlMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzTm9EZXBlbmRzL3NhbXBsZTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg5MWNjNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNOb0RlcGVuZHMvc2FtcGxlMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc05vRGVwZW5kcy9zYW1wbGU0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNOb0RlcGVuZHMvc2FtcGxlNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZThjMGE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc05vRGVwZW5kcy9zYW1wbGU0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc05vRGVwZW5kcy9zYW1wbGU1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwMTg1NjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzTm9EZXBlbmRzL3NhbXBsZTUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNSI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNOb0RlcGVuZHMvc2FtcGxlNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzTm9EZXBlbmRzL3NhbXBsZTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTYyMmQzMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNOb0RlcGVuZHMvc2FtcGxlNi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc05vRGVwZW5kcy9zYW1wbGU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNOb0RlcGVuZHMvc2FtcGxlNy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMDYwYTcyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc05vRGVwZW5kcy9zYW1wbGU3LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTciPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc05vRGVwZW5kcy9zYW1wbGU4LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwNzFiMWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzTm9EZXBlbmRzL3NhbXBsZTgud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlOCI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNOb0RlcGVuZHMvc2FtcGxlOS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzTm9EZXBlbmRzL3NhbXBsZTkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGZjZGEzMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNOb0RlcGVuZHMvc2FtcGxlOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUwLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5NmFjOTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUwLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTAiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTAiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUwIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTcwLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTYwY2Q2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNzIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMzQueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTRhZmM0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUxIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlMSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMy54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDdhZTFjOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTgwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzgiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTc4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0YWVlNTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEwIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1Ni54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYwIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU2MC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQyIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU0Mi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0MDI2M2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzExIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIzIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUyMy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM5IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUzOS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwMjYxNWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEyIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Ni54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzMueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTEzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTc1YWE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNjQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzQueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzU5ZmEwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNTgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMzIueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE1LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTRjNWI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNjEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlOTAueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE2LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTYueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjcyODEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTYueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNjMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlODQueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE3LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTcueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzQ3YTVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMTcueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlODcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU2LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTAwMWMyNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE4LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTgiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTYzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzYiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTc2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjMiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTIzLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUxOS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjYwNGUzYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTE5LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTkiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY1IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU2NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ4IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU0OC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0YmI1NjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTIiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGUyIj48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM3LnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjhlZmU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNTYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNTQueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTI4MWI1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNjEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNTkueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDk3MjQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTciIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTk3LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWRjYmYxYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjIiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQ5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjkiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTY5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDIiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTQyLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyMy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQ2Y2Y1Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTIzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjMiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTIiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTEyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjAiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTIwLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ZkZWU4OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjQiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTk0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODciIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTg3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODYiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTg2LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmI5NTkwYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI1LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjUiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzkiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTc5LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNy54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjYueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzZGVkNDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyNi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI2Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjIiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Mi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc1IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTMueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI3LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjcueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjIyYjY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjcueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMzEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNTAueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI4LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjgueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTJkNWFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMjgueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNzgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8wIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUwLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUyOS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmExYWRmOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTI5LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjkiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDYiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTQ2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTY5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQyZjJjYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlMyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTMiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODIueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5NmQyM2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGUzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Ny54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlOTkueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMGNkNGZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNjAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzkueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTIzYzNjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNTgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMzgueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYmUyOTRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlOTkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNDMueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTMzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTcwMTdiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNjQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzAueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZmJhN2ZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xMiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMTIueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM1LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDFjNDE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMzQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMjMueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM2LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzYueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTdhYzkwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzYueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83OSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNzkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzYueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM3LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzcueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YWFmMzM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzcueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNTEueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM4LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzgueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjQwZjNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzgueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNTQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMjkueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTM5LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzkueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OWE3MWI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMzkueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlOTUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNDMueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Yzk2YzRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU0Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlNCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Ny54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFkYWRmZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI3IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUyNy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIyIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUyMi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5NjJmYjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0MC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQwIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk2IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU5Ni54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTMueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTQxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTk0YTc5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Mi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhMWYzZTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Mi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQyIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyOC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU1IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU1NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU5IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1OS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0My54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlNTRiMDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0My54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQzIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1OS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ5IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU0OS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQwIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU0MC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlNDNlNzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ0Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Ni54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU5IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU1OS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE1IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUxNS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyY2U1YzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0NS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ1Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkzIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU5My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE4IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUxOC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDYueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Ni54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjNzgxY2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Ni54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDYiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ2Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2NC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMyIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUzMi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQxIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU0MS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDcueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Ny54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3MTUwM2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0Ny54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ3Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDUiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0NS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM5IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUzOS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzczIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3My54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDgueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhMDY3MzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ4Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Ni54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI1IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUyNS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUyIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1Mi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNDkueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhZDU2OTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU0OS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ5Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Ny54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcwIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3MC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzczIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3My54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1ZjNjMjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0ic2FtcGxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTUiPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz48L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy9zYW1wbGU1Ij48eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMyLnhzZCIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9InNhbXBsZVNPQVAiIHR5cGU9InRuczpzYW1wbGUiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZS9OZXdPcGVyYXRpb24iLz4KLTx3c2RsOmlucHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOmlucHV0PgotPHdzZGw6b3V0cHV0PgotPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvdXRwdXQ+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOmJpbmRpbmc+Ci08d3NkbDpzZXJ2aWNlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpwb3J0IG5hbWU9InNhbXBsZVNPQVAiIGJpbmRpbmc9InRuczpzYW1wbGVTT0FQIj4KLTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci08L3dzZGw6cG9ydD4KLTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjM1NmMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY5IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zOSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMzkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzcueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNWRiZjhlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUwIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNTcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNjYueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzA0NGE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNjUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlOTAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNjMueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZWI5OTk5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNDIueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTUzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYWNiMWU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlODEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNDMueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODRjNDI1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzExIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNDgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlOTEueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU1LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjhiMWJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIyIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlODYueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU2LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTYueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZmQyNzk0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTYueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlOTYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNTgueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU3LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTcueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwN2JjMmQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNTcueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMzIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjdmZjY5Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU4LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTgiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTUwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTUiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTE1LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU1OS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWE3ODhhYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTU5LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTkiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOCIgc2NoZW1hTG9jYXRpb249InNhbXBsZTI4LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODUiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTg1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzIiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTcyLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjU3NzQ4OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNiI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTYiPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDcueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjZDhmZGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Ny54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgwIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU4MC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk4IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU5OC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwZDEzNjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYwIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3Ny54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcyIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU3Mi54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU3IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1Ny54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzYmVhYTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2MS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYxIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDkiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0OS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk5IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU5OS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMyIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUzMi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Mi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyMmU3MTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Mi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYyIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80NCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNDQueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTYzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NGI5NTdhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzYzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlODMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlODIueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNmJiMTFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlOTAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNTMueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY1LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZWQzYTk5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMzAueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY2LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjYueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjI5NTRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNjYueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODciIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTg3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjgiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTI4LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2Ny54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTMxYzgzOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY3LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjciPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTU3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTMwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjciIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTI3LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmFhN2ZjNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY4LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjgiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zMiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTMyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTUiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTU1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTM5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU2OS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjBlMjA2ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTY5LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82OSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjkiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTE1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjEiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTYxLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDciIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTQ3LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTY1YWRjMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJzYW1wbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlNyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz48eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPjwveHNkOnNjaGVtYT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnL3NhbXBsZTciPjx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODYueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTx3c2RsOmJpbmRpbmcgbmFtZT0ic2FtcGxlU09BUCIgdHlwZT0idG5zOnNhbXBsZSI+Ci08c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2FtcGxlL05ld09wZXJhdGlvbiIvPgotPHdzZGw6aW5wdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6aW5wdXQ+Ci08d3NkbDpvdXRwdXQ+Ci08c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm91dHB1dD4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6YmluZGluZz4KLTx3c2RsOnNlcnZpY2UgbmFtZT0ic2FtcGxlIj4KLTx3c2RsOnBvcnQgbmFtZT0ic2FtcGxlU09BUCIgYmluZGluZz0idG5zOnNhbXBsZVNPQVAiPgotPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLTwvd3NkbDpwb3J0PgotPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3MjkyZDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzNy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzUzIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU1My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI2IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUyNi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3NmRhMDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3MC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzAiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcwIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yOSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMTYueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNmVlZDVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcxIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlOTAueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTcyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDQ3MGUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzcyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNjIueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yMiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMjIueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTczLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjE0OGMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzczIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlOTkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlOTAueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OWM0ZjQ5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMzQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy81MyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNTMueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc1LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDU4ZWFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQwIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82MyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNjMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzEueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTc2LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzYueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTIxNTYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzYueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU2LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMi54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzcueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Ny54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyNDQ1MzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3Ny54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzciIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc3Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI3IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUyNy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM5IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUzOS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzgueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3YjdkNzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc4Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTAiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxMC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQxIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU0MS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzczIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU3My54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlNzkueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1NGRjNzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU3OS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc5Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4Ny54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM4IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUzOC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzAiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTAueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjUwOWI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU4Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOCI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU4NC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmMwODdkZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTY1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTMwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTEiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTExLnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjUzYzNiYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODAiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTczLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTAiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTkwLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjgiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTY4LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4MS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTE3MTFmYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODEiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NyIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc3LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODUiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTg1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNy54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Mi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzMzA4OTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU4Mi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgyIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjYiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU2Ni54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgxIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU4MS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTMueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTgzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZGRjNTE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83MyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNzMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlOTkueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiM2NmNWM2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg0IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg1IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlODUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzYueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg1LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzdhMWJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg1IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIxIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlOTMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMjYueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg2LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODYueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYWE4ZjliLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODYueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzE4IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMTgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NiIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlOTYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNDgueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg3LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODcueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOGFjODU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODcueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84NyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNDYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy82NSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNjUueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MSIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlODEueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg4LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODgueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTUwNmIwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODgueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg4IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OCI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzc2IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlNzYueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84MCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlODAueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMzcueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTg5LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODkueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDZlMGRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlODkueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzg5IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OSI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk0IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOTQueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80OSIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlNDkueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NiIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNzYueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTMwNDUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9InNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NhbXBsZTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGU5Ij4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPjx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+PC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvc2FtcGxlOSI+PHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMzgiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUzOC54c2QiLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9InNhbXBsZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJzYW1wbGVTT0FQIiB0eXBlPSJ0bnM6c2FtcGxlIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zYW1wbGUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJzYW1wbGUiPgotPHdzZGw6cG9ydCBuYW1lPSJzYW1wbGVTT0FQIiBiaW5kaW5nPSJ0bnM6c2FtcGxlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTRkNzUzNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8zNSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTM1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNjQiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTY0LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzkiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTc5LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmRmOWI0NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTAiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy83NSIgc2NoZW1hTG9jYXRpb249InNhbXBsZTc1LnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvODMiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTgzLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzQiIHNjaGVtYUxvY2F0aW9uPSIuXHNhbXBsZTc0LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5MS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjliOTMyNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTkxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85MSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTEiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlOC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzIzIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUyMy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzM1IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUzNS54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Mi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhMzU4YmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5Mi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkyIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMTciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUxNy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI4IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUyOC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzY4IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU2OC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5My54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwMmVmODguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5My54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzkzIj4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvMjciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGUyNy54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMxIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGUzMS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU0IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1NC54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlZDhjMzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk0Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzMiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU3My54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzgxIiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU4MS54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzU3IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU1Ny54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3MzczZTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5NS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTUiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk1Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNDciIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU0Ny54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTEueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8xNyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlMTcueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk2LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTYueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTc3YTUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTYueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk2IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NiI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzI3IiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMjcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84OCIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlODgueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MCIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNDAueHNkIi8+PGNvbXBsZXhUeXBlIG5hbWU9Ik5ld0NvbXBsZXhUeXBlIj48c2VxdWVuY2U+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50Pjwvc2VxdWVuY2U+PC9jb21wbGV4VHlwZT48ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0bnM6TmV3Q29tcGxleFR5cGUiPjwvZWxlbWVudD48L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk3LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTcueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDc5MjRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTcueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk3IiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85NyI+Ci08aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzMzIiBzY2hlbWFMb2NhdGlvbj0ic2FtcGxlMzMueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy8yNyIgc2NoZW1hTG9jYXRpb249Ii4vc2FtcGxlMjcueHNkIi8+PGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy84IiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGU4LnhzZCIvPjxjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+PHNlcXVlbmNlPjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PjxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48L3NlcXVlbmNlPjwvY29tcGxleFR5cGU+PGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0idG5zOk5ld0NvbXBsZXhUeXBlIj48L2VsZW1lbnQ+PC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDk3NWRiMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTk4LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy85OCIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTgiPgotPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuc2FtcGxlLm9yZy80MiIgc2NoZW1hTG9jYXRpb249InNhbXBsZTQyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNzIiIHNjaGVtYUxvY2F0aW9uPSIuL3NhbXBsZTcyLnhzZCIvPjxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNyIgc2NoZW1hTG9jYXRpb249Ii5cc2FtcGxlNy54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMTBXU0RMc1hTRERlcGVuZHMvc2FtcGxlOTkueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2ZGFkMzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xMFdTRExzWFNERGVwZW5kcy9zYW1wbGU5OS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvOTkiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzk5Ij4KLTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnNhbXBsZS5vcmcvNTQiIHNjaGVtYUxvY2F0aW9uPSJzYW1wbGU1NC54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzQ2IiBzY2hlbWFMb2NhdGlvbj0iLi9zYW1wbGU0Ni54c2QiLz48aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5zYW1wbGUub3JnLzEzIiBzY2hlbWFMb2NhdGlvbj0iLlxzYW1wbGUxMy54c2QiLz48Y29tcGxleFR5cGUgbmFtZT0iTmV3Q29tcGxleFR5cGUiPjxzZXF1ZW5jZT48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD48ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+PC9zZXF1ZW5jZT48L2NvbXBsZXhUeXBlPjxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InRuczpOZXdDb21wbGV4VHlwZSI+PC9lbGVtZW50Pjwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMUtCLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhLzFLQi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MmE3YzhmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMUtCLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0iRGVmaW5pdGlvbiIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzIj4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDwveHNkOnNjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZSIgbmFtZT0iSW5wdXQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlIiBuYW1lPSJPdXRwdXQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZyIgdHlwZT0idG5zOlBvcnRUeXBlIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydCIgYmluZGluZz0idG5zOkJpbmRpbmciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xTUIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMU1CLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzNmJjNGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8xTUIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDMxMDA3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJEZWZpbml0aW9uIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotICA8d3NkbDp0eXBlcz4KLSAgICA8eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMiPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEwMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEwMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTAxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTAyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEwMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEwNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTA0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTA1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEwNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEwNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTA3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTA4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEwOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDExMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTEwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTExIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDExMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDExMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTEzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTE0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDExNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDExNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTE2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTE3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDExOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDExOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTE5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEyMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEyMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTIyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTIzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEyNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEyNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTI1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTI2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEyNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEyOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTI4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTI5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEzMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEzMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTMxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTMyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEzMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEzNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTM0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTM1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEzNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEzNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTM3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTM4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEzOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE0MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE0MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE0MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE0NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE0NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE0OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE0OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTUwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE1MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE1MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTUyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTUzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE1NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE1NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTU1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTU2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE1NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE1OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTU4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTU5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE2MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE2MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTYxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTYyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE2MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE2NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTY0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTY1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE2NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE2NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTY3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTY4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE2OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE3MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTcwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTcxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE3MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE3MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTczIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTc0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE3NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE3NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTc2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTc3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE3OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE3OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTc5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTgwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxODAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxODEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE4MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE4MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTgyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTgzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxODMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxODQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE4NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE4NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTg1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTg2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxODYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxODciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE4NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE4OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTg4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTg5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxODkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxOTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE5MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE5MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTkxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTkyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxOTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxOTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE5MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE5NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTk0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTk1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxOTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxOTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE5NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE5NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTk3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTk4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxOTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxOTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE5OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIwMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjAwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjAxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIwMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIwMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjAzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjA0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIwNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIwNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjA2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjA3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIwOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIwOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjA5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjEwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIxMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIxMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjEyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjEzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIxNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIxNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjE1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjE2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIxNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIxOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjE4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjE5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIyMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIyMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjIxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjIyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIyMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIyNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjI0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjI1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIyNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIyNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjI3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjI4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIyOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIzMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjMwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjMxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIzMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIzMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjMzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjM0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIzNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIzNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjM2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjM3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIzOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIzOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjM5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI0MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI0MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI0NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI0NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI0NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI0OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI1MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI1MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjUxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjUyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI1MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI1NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjU0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjU1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI1NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI1NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjU3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjU4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI1OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI2MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjYwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjYxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI2MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI2MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjYzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjY0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI2NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI2NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjY2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjY3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI2OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI2OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjY5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjcwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI3MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI3MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjcyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjczIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI3NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI3NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mjc1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mjc2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI3NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI3OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mjc4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mjc5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyODAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI4MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI4MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjgxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjgyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyODIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyODMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI4MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI4NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mjg0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mjg1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyODUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyODYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI4NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI4NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mjg3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mjg4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyODgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyODkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI4OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI5MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjkwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjkxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyOTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyOTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI5MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI5MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjkzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mjk0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyOTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyOTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI5NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI5NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mjk2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mjk3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyOTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyOTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI5OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI5OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mjk5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzAwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMwMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMwMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzAyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzAzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMwNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMwNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzA1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzA2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMwNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMwOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzA4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzA5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMxMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMxMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzExIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzEyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMxMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMxNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzE0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzE1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMxNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMxNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzE3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzE4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMxOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMyMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzIxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMyMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMyMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzIzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzI0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMyNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMyNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzI2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzI3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMyOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMyOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzI5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzMwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMzMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMzMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzMyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzMzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMzNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMzNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzM1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzM2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMzNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMzOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzM4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzM5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM0MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM0MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM0MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM0NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM0NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM0NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM0OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM1MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzUwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzUxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM1MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM1MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzUzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzU0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM1NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM1NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzU2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzU3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM1OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM1OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzU5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzYwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM2MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM2MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzYyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzYzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM2NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM2NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzY1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzY2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM2NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM2OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzY4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzY5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM3MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM3MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzcxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzcyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM3MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM3NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mzc0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mzc1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM3NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM3NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mzc3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mzc4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM3OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM4MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzgwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzgxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzODEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzODIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM4MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM4MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzgzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mzg0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzODQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzODUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM4NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM4NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mzg2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mzg3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzODciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzODgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM4OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM4OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mzg5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzkwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzOTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzOTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM5MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM5MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzkyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzkzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzOTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzOTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM5NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM5NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mzk1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mzk2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzOTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzOTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM5NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM5OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mzk4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mzk5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzOTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQwMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQwMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDAxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDAyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQwMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQwNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDA0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDA1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQwNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQwNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDA3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDA4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQwOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQxMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDEwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDExIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQxMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQxMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDEzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDE0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQxNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQxNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDE2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDE3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQxOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQxOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDE5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQyMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQyMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDIyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDIzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQyNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQyNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDI1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDI2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQyNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQyOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDI4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDI5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQzMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQzMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDMxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDMyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQzMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQzNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDM0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDM1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQzNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQzNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDM3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDM4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQzOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ0MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ0MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ0MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ0NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ0NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ0OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ0OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDUwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ1MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ1MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDUyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDUzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ1NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ1NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDU1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDU2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ1NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ1OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDU4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDU5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ2MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ2MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDYxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDYyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ2MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ2NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDY0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDY1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ2NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ2NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDY3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDY4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ2OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ3MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDcwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDcxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ3MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ3MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDczIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDc0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ3NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ3NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDc2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDc3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ3OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ3OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDc5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDgwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0ODAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0ODEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ4MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ4MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDgyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDgzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0ODMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0ODQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ4NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ4NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDg1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDg2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0ODYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0ODciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ4NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ4OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDg4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDg5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0ODkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0OTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ5MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ5MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDkxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDkyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0OTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0OTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ5MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ5NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDk0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDk1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0OTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0OTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ5NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ5NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDk3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDk4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0OTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0OTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ5OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUwMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTAwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTAxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUwMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUwMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTAzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTA0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUwNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUwNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTA2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTA3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUwOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUwOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTA5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTEwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUxMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUxMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTEyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTEzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUxNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUxNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTE1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTE2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUxNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUxOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTE4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTE5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUyMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUyMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTIxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTIyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUyMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUyNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTI0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTI1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUyNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUyNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTI3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTI4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUyOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUzMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTMwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTMxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUzMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUzMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTMzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTM0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUzNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUzNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTM2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTM3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDUzOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUzOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTM5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU0MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU0MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU0NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU0NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU0NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU0OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU1MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU1MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTUxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTUyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU1MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU1NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTU0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTU1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU1NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU1NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTU3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTU4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU1OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU2MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTYwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTYxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU2MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU2MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTYzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTY0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU2NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU2NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTY2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTY3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU2OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU2OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTY5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTcwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU3MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU3MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTcyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTczIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU3NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU3NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTc1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTc2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU3NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU3OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTc4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTc5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1ODAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU4MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU4MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTgxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTgyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1ODIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1ODMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU4MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU4NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTg0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTg1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1ODUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1ODYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU4NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU4NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTg3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTg4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1ODgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1ODkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU4OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU5MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTkwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTkxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1OTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1OTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU5MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU5MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTkzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTk0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1OTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1OTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU5NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU5NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTk2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NTk3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1OTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1OTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDU5OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU5OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTk5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjAwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYwMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYwMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjAyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjAzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYwNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYwNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjA1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjA2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYwNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYwOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjA4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjA5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYxMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYxMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjExIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjEyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYxMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYxNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjE0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjE1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYxNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYxNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjE3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjE4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYxOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYyMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjIxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYyMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYyMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjIzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjI0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYyNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYyNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjI2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjI3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYyOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYyOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjI5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjMwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYzMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYzMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjMyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjMzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYzNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYzNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjM1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjM2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYzNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYzOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjM4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjM5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY0MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY0MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY0MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY0NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY0NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY0NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY0OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY1MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjUwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjUxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY1MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY1MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjUzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjU0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY1NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY1NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjU2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjU3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY1OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY1OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjU5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjYwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY2MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY2MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjYyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjYzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY2NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY2NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjY1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjY2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY2NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY2OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjY4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjY5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY3MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY3MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjcxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjcyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY3MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY3NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Njc0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Njc1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY3NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY3NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Njc3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Njc4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY3OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY4MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjgwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjgxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2ODEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2ODIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY4MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY4MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjgzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Njg0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2ODQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2ODUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY4NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY4NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Njg2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Njg3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2ODciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2ODgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY4OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY4OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Njg5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjkwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2OTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2OTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY5MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY5MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjkyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NjkzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2OTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2OTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY5NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY5NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Njk1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Njk2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2OTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2OTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDY5NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY5OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Njk4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Njk5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2OTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcwMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDcwMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzAxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzAyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcwMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDcwNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzA0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzA1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcwNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDcwNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzA3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzA4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcwOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDcxMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzEwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzExIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcxMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDcxMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzEzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzE0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcxNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDcxNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzE2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzE3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcxOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDcxOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzE5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcyMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDcyMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzIyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzIzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcyNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDcyNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzI1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzI2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDcyNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDcyOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzI4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzI5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDczMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDczMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzMxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzMyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDczMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDczNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzM0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzM1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDczNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDczNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzM3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzM4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDczOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc0MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc0MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc0MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc0NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc0NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc0OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc0OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzUwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc1MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc1MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzUyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzUzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc1NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc1NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzU1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzU2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc1NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc1OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzU4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzU5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc2MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc2MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzYxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzYyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc2MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc2NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzY0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzY1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc2NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc2NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzY3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzY4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc2OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc3MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzcwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzcxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc3MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc3MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzczIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Nzc0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc3NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc3NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Nzc2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Nzc3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc3OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc3OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Nzc5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzgwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3ODAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3ODEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc4MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc4MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzgyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzgzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3ODMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3ODQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc4NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc4NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Nzg1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Nzg2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3ODYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3ODciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc4NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc4OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Nzg4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Nzg5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3ODkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3OTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc5MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc5MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzkxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NzkyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3OTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3OTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc5MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc5NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Nzk0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Nzk1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3OTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3OTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc5NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc5NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Nzk3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Nzk4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3OTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3OTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDc5OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgwMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODAwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODAxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgwMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgwMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODAzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODA0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgwNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgwNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODA2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODA3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgwOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgwOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODA5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODEwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgxMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgxMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODEyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODEzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgxNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgxNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODE1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODE2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgxNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgxOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODE4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODE5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgyMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgyMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODIxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODIyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgyMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgyNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODI0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODI1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgyNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgyNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODI3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODI4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgyOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgzMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODMwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODMxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgzMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgzMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODMzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODM0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgzNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgzNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODM2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODM3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDgzOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgzOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODM5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg0MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg0MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg0NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg0NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg0NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg0OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg1MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg1MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODUxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODUyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg1MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg1NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODU0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODU1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg1NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg1NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODU3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODU4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg1OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg2MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODYwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODYxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg2MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg2MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODYzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODY0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg2NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg2NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODY2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODY3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg2OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg2OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODY5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODcwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg3MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg3MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODcyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODczIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg3NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg3NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODc1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODc2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg3NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg3OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODc4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODc5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4ODAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg4MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg4MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODgxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODgyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4ODIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4ODMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg4MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg4NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODg0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODg1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4ODUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4ODYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg4NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg4NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODg3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODg4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4ODgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4ODkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg4OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg5MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODkwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODkxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4OTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4OTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg5MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg5MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODkzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODk0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4OTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4OTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg5NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg5NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODk2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50ODk3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4OTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4OTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDg5OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg5OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODk5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTAwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkwMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkwMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTAyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTAzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkwNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkwNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTA1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTA2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkwNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkwOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTA4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTA5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkxMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkxMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTExIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTEyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkxMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkxNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTE0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTE1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkxNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkxNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTE3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTE4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkxOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkyMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTIxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkyMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkyMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTIzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTI0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkyNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkyNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTI2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTI3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkyOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkyOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTI5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTMwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkzMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkzMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTMyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTMzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkzNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkzNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTM1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTM2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkzNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkzOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTM4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTM5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk0MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk0MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk0MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk0NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk0NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk0NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk0OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk1MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTUwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTUxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk1MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk1MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTUzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTU0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk1NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk1NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTU2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTU3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk1OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk1OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTU5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTYwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk2MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk2MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTYyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTYzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk2NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk2NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTY1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTY2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk2NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk2OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTY4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTY5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk3MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk3MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTcxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTcyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk3MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk3NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTc0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTc1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk3NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk3NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTc3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTc4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk3OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk4MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTgwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTgxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5ODEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5ODIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk4MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk4MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTgzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTg0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5ODQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5ODUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk4NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk4NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTg2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTg3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5ODciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5ODgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk4OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk4OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTg5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTkwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5OTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5OTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk5MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk5MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTkyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTkzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5OTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5OTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk5NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk5NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTk1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTk2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5OTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5OTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDk5NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk5OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTk4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OTk5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5OTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICA8L3hzZDpzY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UwIiBuYW1lPSJJbnB1dDAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMCIgbmFtZT0iT3V0cHV0MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMCIgdHlwZT0idG5zOlBvcnRUeXBlMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMSIgbmFtZT0iSW5wdXQxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEiIG5hbWU9Ik91dHB1dDEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEiIHR5cGU9InRuczpQb3J0VHlwZTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MSIgYmluZGluZz0idG5zOkJpbmRpbmcxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIiIG5hbWU9IklucHV0MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyIiBuYW1lPSJPdXRwdXQyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyIiB0eXBlPSJ0bnM6UG9ydFR5cGUyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIiIGJpbmRpbmc9InRuczpCaW5kaW5nMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzIiBuYW1lPSJJbnB1dDMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMyIgbmFtZT0iT3V0cHV0MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMyIgdHlwZT0idG5zOlBvcnRUeXBlMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNCIgbmFtZT0iSW5wdXQ0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQiIG5hbWU9Ik91dHB1dDQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQiIHR5cGU9InRuczpQb3J0VHlwZTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NCIgYmluZGluZz0idG5zOkJpbmRpbmc0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUiIG5hbWU9IklucHV0NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1IiBuYW1lPSJPdXRwdXQ1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1IiB0eXBlPSJ0bnM6UG9ydFR5cGU1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUiIGJpbmRpbmc9InRuczpCaW5kaW5nNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2IiBuYW1lPSJJbnB1dDYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNiIgbmFtZT0iT3V0cHV0NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNiIgdHlwZT0idG5zOlBvcnRUeXBlNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNyIgbmFtZT0iSW5wdXQ3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTciIG5hbWU9Ik91dHB1dDciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzciIHR5cGU9InRuczpQb3J0VHlwZTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NyIgYmluZGluZz0idG5zOkJpbmRpbmc3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgiIG5hbWU9IklucHV0OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4IiBuYW1lPSJPdXRwdXQ4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4IiB0eXBlPSJ0bnM6UG9ydFR5cGU4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgiIGJpbmRpbmc9InRuczpCaW5kaW5nOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5IiBuYW1lPSJJbnB1dDkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOSIgbmFtZT0iT3V0cHV0OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOSIgdHlwZT0idG5zOlBvcnRUeXBlOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTAiIG5hbWU9IklucHV0MTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTAiIG5hbWU9Ik91dHB1dDEwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMCIgdHlwZT0idG5zOlBvcnRUeXBlMTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTAiIGJpbmRpbmc9InRuczpCaW5kaW5nMTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTExIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDExIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTExIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTEiIG5hbWU9IklucHV0MTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTEiIG5hbWU9Ik91dHB1dDExIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMSIgdHlwZT0idG5zOlBvcnRUeXBlMTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTEiIGJpbmRpbmc9InRuczpCaW5kaW5nMTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTIiIG5hbWU9IklucHV0MTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTIiIG5hbWU9Ik91dHB1dDEyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMiIgdHlwZT0idG5zOlBvcnRUeXBlMTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTIiIGJpbmRpbmc9InRuczpCaW5kaW5nMTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTMiIG5hbWU9IklucHV0MTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTMiIG5hbWU9Ik91dHB1dDEzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMyIgdHlwZT0idG5zOlBvcnRUeXBlMTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTMiIGJpbmRpbmc9InRuczpCaW5kaW5nMTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTQiIG5hbWU9IklucHV0MTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTQiIG5hbWU9Ik91dHB1dDE0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNCIgdHlwZT0idG5zOlBvcnRUeXBlMTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTQiIGJpbmRpbmc9InRuczpCaW5kaW5nMTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTUiIG5hbWU9IklucHV0MTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTUiIG5hbWU9Ik91dHB1dDE1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNSIgdHlwZT0idG5zOlBvcnRUeXBlMTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTUiIGJpbmRpbmc9InRuczpCaW5kaW5nMTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTYiIG5hbWU9IklucHV0MTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTYiIG5hbWU9Ik91dHB1dDE2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNiIgdHlwZT0idG5zOlBvcnRUeXBlMTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTYiIGJpbmRpbmc9InRuczpCaW5kaW5nMTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTciIG5hbWU9IklucHV0MTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTciIG5hbWU9Ik91dHB1dDE3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNyIgdHlwZT0idG5zOlBvcnRUeXBlMTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTciIGJpbmRpbmc9InRuczpCaW5kaW5nMTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTgiIG5hbWU9IklucHV0MTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTgiIG5hbWU9Ik91dHB1dDE4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxOCIgdHlwZT0idG5zOlBvcnRUeXBlMTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTgiIGJpbmRpbmc9InRuczpCaW5kaW5nMTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTkiIG5hbWU9IklucHV0MTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTkiIG5hbWU9Ik91dHB1dDE5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxOSIgdHlwZT0idG5zOlBvcnRUeXBlMTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTkiIGJpbmRpbmc9InRuczpCaW5kaW5nMTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjAiIG5hbWU9IklucHV0MjAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjAiIG5hbWU9Ik91dHB1dDIwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMCIgdHlwZT0idG5zOlBvcnRUeXBlMjAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjAiIGJpbmRpbmc9InRuczpCaW5kaW5nMjAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjEiIG5hbWU9IklucHV0MjEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjEiIG5hbWU9Ik91dHB1dDIxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMSIgdHlwZT0idG5zOlBvcnRUeXBlMjEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjEiIGJpbmRpbmc9InRuczpCaW5kaW5nMjEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjIiIG5hbWU9IklucHV0MjIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjIiIG5hbWU9Ik91dHB1dDIyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMiIgdHlwZT0idG5zOlBvcnRUeXBlMjIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjIiIGJpbmRpbmc9InRuczpCaW5kaW5nMjIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjMiIG5hbWU9IklucHV0MjMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjMiIG5hbWU9Ik91dHB1dDIzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMyIgdHlwZT0idG5zOlBvcnRUeXBlMjMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjMiIGJpbmRpbmc9InRuczpCaW5kaW5nMjMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjQiIG5hbWU9IklucHV0MjQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjQiIG5hbWU9Ik91dHB1dDI0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNCIgdHlwZT0idG5zOlBvcnRUeXBlMjQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjQiIGJpbmRpbmc9InRuczpCaW5kaW5nMjQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjUiIG5hbWU9IklucHV0MjUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjUiIG5hbWU9Ik91dHB1dDI1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNSIgdHlwZT0idG5zOlBvcnRUeXBlMjUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjUiIGJpbmRpbmc9InRuczpCaW5kaW5nMjUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjYiIG5hbWU9IklucHV0MjYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjYiIG5hbWU9Ik91dHB1dDI2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNiIgdHlwZT0idG5zOlBvcnRUeXBlMjYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjYiIGJpbmRpbmc9InRuczpCaW5kaW5nMjYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjciIG5hbWU9IklucHV0MjciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjciIG5hbWU9Ik91dHB1dDI3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNyIgdHlwZT0idG5zOlBvcnRUeXBlMjciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjciIGJpbmRpbmc9InRuczpCaW5kaW5nMjciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjgiIG5hbWU9IklucHV0MjgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjgiIG5hbWU9Ik91dHB1dDI4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyOCIgdHlwZT0idG5zOlBvcnRUeXBlMjgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjgiIGJpbmRpbmc9InRuczpCaW5kaW5nMjgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjkiIG5hbWU9IklucHV0MjkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjkiIG5hbWU9Ik91dHB1dDI5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyOSIgdHlwZT0idG5zOlBvcnRUeXBlMjkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjkiIGJpbmRpbmc9InRuczpCaW5kaW5nMjkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzAiIG5hbWU9IklucHV0MzAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzAiIG5hbWU9Ik91dHB1dDMwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMCIgdHlwZT0idG5zOlBvcnRUeXBlMzAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzAiIGJpbmRpbmc9InRuczpCaW5kaW5nMzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzEiIG5hbWU9IklucHV0MzEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzEiIG5hbWU9Ik91dHB1dDMxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMSIgdHlwZT0idG5zOlBvcnRUeXBlMzEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzEiIGJpbmRpbmc9InRuczpCaW5kaW5nMzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzIiIG5hbWU9IklucHV0MzIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzIiIG5hbWU9Ik91dHB1dDMyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMiIgdHlwZT0idG5zOlBvcnRUeXBlMzIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzIiIGJpbmRpbmc9InRuczpCaW5kaW5nMzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzMiIG5hbWU9IklucHV0MzMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzMiIG5hbWU9Ik91dHB1dDMzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMyIgdHlwZT0idG5zOlBvcnRUeXBlMzMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzMiIGJpbmRpbmc9InRuczpCaW5kaW5nMzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzQiIG5hbWU9IklucHV0MzQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzQiIG5hbWU9Ik91dHB1dDM0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNCIgdHlwZT0idG5zOlBvcnRUeXBlMzQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzQiIGJpbmRpbmc9InRuczpCaW5kaW5nMzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzUiIG5hbWU9IklucHV0MzUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzUiIG5hbWU9Ik91dHB1dDM1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNSIgdHlwZT0idG5zOlBvcnRUeXBlMzUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzUiIGJpbmRpbmc9InRuczpCaW5kaW5nMzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzYiIG5hbWU9IklucHV0MzYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzYiIG5hbWU9Ik91dHB1dDM2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNiIgdHlwZT0idG5zOlBvcnRUeXBlMzYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzYiIGJpbmRpbmc9InRuczpCaW5kaW5nMzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzciIG5hbWU9IklucHV0MzciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzciIG5hbWU9Ik91dHB1dDM3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNyIgdHlwZT0idG5zOlBvcnRUeXBlMzciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzciIGJpbmRpbmc9InRuczpCaW5kaW5nMzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzgiIG5hbWU9IklucHV0MzgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzgiIG5hbWU9Ik91dHB1dDM4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczOCIgdHlwZT0idG5zOlBvcnRUeXBlMzgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzgiIGJpbmRpbmc9InRuczpCaW5kaW5nMzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzkiIG5hbWU9IklucHV0MzkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzkiIG5hbWU9Ik91dHB1dDM5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczOSIgdHlwZT0idG5zOlBvcnRUeXBlMzkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzkiIGJpbmRpbmc9InRuczpCaW5kaW5nMzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDAiIG5hbWU9IklucHV0NDAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDAiIG5hbWU9Ik91dHB1dDQwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MCIgdHlwZT0idG5zOlBvcnRUeXBlNDAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDAiIGJpbmRpbmc9InRuczpCaW5kaW5nNDAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDEiIG5hbWU9IklucHV0NDEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDEiIG5hbWU9Ik91dHB1dDQxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MSIgdHlwZT0idG5zOlBvcnRUeXBlNDEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDEiIGJpbmRpbmc9InRuczpCaW5kaW5nNDEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDIiIG5hbWU9IklucHV0NDIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDIiIG5hbWU9Ik91dHB1dDQyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MiIgdHlwZT0idG5zOlBvcnRUeXBlNDIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDIiIGJpbmRpbmc9InRuczpCaW5kaW5nNDIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDMiIG5hbWU9IklucHV0NDMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDMiIG5hbWU9Ik91dHB1dDQzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MyIgdHlwZT0idG5zOlBvcnRUeXBlNDMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDMiIGJpbmRpbmc9InRuczpCaW5kaW5nNDMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDQiIG5hbWU9IklucHV0NDQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDQiIG5hbWU9Ik91dHB1dDQ0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NCIgdHlwZT0idG5zOlBvcnRUeXBlNDQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDQiIGJpbmRpbmc9InRuczpCaW5kaW5nNDQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDUiIG5hbWU9IklucHV0NDUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDUiIG5hbWU9Ik91dHB1dDQ1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NSIgdHlwZT0idG5zOlBvcnRUeXBlNDUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDUiIGJpbmRpbmc9InRuczpCaW5kaW5nNDUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDYiIG5hbWU9IklucHV0NDYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDYiIG5hbWU9Ik91dHB1dDQ2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NiIgdHlwZT0idG5zOlBvcnRUeXBlNDYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDYiIGJpbmRpbmc9InRuczpCaW5kaW5nNDYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDciIG5hbWU9IklucHV0NDciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDciIG5hbWU9Ik91dHB1dDQ3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NyIgdHlwZT0idG5zOlBvcnRUeXBlNDciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDciIGJpbmRpbmc9InRuczpCaW5kaW5nNDciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDgiIG5hbWU9IklucHV0NDgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDgiIG5hbWU9Ik91dHB1dDQ4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0OCIgdHlwZT0idG5zOlBvcnRUeXBlNDgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDgiIGJpbmRpbmc9InRuczpCaW5kaW5nNDgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDkiIG5hbWU9IklucHV0NDkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDkiIG5hbWU9Ik91dHB1dDQ5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0OSIgdHlwZT0idG5zOlBvcnRUeXBlNDkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDkiIGJpbmRpbmc9InRuczpCaW5kaW5nNDkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTAiIG5hbWU9IklucHV0NTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTAiIG5hbWU9Ik91dHB1dDUwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MCIgdHlwZT0idG5zOlBvcnRUeXBlNTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTAiIGJpbmRpbmc9InRuczpCaW5kaW5nNTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTEiIG5hbWU9IklucHV0NTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTEiIG5hbWU9Ik91dHB1dDUxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MSIgdHlwZT0idG5zOlBvcnRUeXBlNTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTEiIGJpbmRpbmc9InRuczpCaW5kaW5nNTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTIiIG5hbWU9IklucHV0NTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTIiIG5hbWU9Ik91dHB1dDUyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MiIgdHlwZT0idG5zOlBvcnRUeXBlNTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTIiIGJpbmRpbmc9InRuczpCaW5kaW5nNTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTMiIG5hbWU9IklucHV0NTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTMiIG5hbWU9Ik91dHB1dDUzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MyIgdHlwZT0idG5zOlBvcnRUeXBlNTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTMiIGJpbmRpbmc9InRuczpCaW5kaW5nNTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTQiIG5hbWU9IklucHV0NTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTQiIG5hbWU9Ik91dHB1dDU0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NCIgdHlwZT0idG5zOlBvcnRUeXBlNTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTQiIGJpbmRpbmc9InRuczpCaW5kaW5nNTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTUiIG5hbWU9IklucHV0NTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTUiIG5hbWU9Ik91dHB1dDU1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NSIgdHlwZT0idG5zOlBvcnRUeXBlNTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTUiIGJpbmRpbmc9InRuczpCaW5kaW5nNTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTYiIG5hbWU9IklucHV0NTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTYiIG5hbWU9Ik91dHB1dDU2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NiIgdHlwZT0idG5zOlBvcnRUeXBlNTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTYiIGJpbmRpbmc9InRuczpCaW5kaW5nNTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTciIG5hbWU9IklucHV0NTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTciIG5hbWU9Ik91dHB1dDU3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NyIgdHlwZT0idG5zOlBvcnRUeXBlNTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTciIGJpbmRpbmc9InRuczpCaW5kaW5nNTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTgiIG5hbWU9IklucHV0NTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTgiIG5hbWU9Ik91dHB1dDU4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1OCIgdHlwZT0idG5zOlBvcnRUeXBlNTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTgiIGJpbmRpbmc9InRuczpCaW5kaW5nNTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTkiIG5hbWU9IklucHV0NTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTkiIG5hbWU9Ik91dHB1dDU5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1OSIgdHlwZT0idG5zOlBvcnRUeXBlNTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTkiIGJpbmRpbmc9InRuczpCaW5kaW5nNTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjAiIG5hbWU9IklucHV0NjAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjAiIG5hbWU9Ik91dHB1dDYwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MCIgdHlwZT0idG5zOlBvcnRUeXBlNjAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjAiIGJpbmRpbmc9InRuczpCaW5kaW5nNjAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjEiIG5hbWU9IklucHV0NjEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjEiIG5hbWU9Ik91dHB1dDYxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MSIgdHlwZT0idG5zOlBvcnRUeXBlNjEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjEiIGJpbmRpbmc9InRuczpCaW5kaW5nNjEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjIiIG5hbWU9IklucHV0NjIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjIiIG5hbWU9Ik91dHB1dDYyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MiIgdHlwZT0idG5zOlBvcnRUeXBlNjIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjIiIGJpbmRpbmc9InRuczpCaW5kaW5nNjIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjMiIG5hbWU9IklucHV0NjMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjMiIG5hbWU9Ik91dHB1dDYzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MyIgdHlwZT0idG5zOlBvcnRUeXBlNjMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjMiIGJpbmRpbmc9InRuczpCaW5kaW5nNjMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjQiIG5hbWU9IklucHV0NjQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjQiIG5hbWU9Ik91dHB1dDY0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NCIgdHlwZT0idG5zOlBvcnRUeXBlNjQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjQiIGJpbmRpbmc9InRuczpCaW5kaW5nNjQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjUiIG5hbWU9IklucHV0NjUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjUiIG5hbWU9Ik91dHB1dDY1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NSIgdHlwZT0idG5zOlBvcnRUeXBlNjUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjUiIGJpbmRpbmc9InRuczpCaW5kaW5nNjUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjYiIG5hbWU9IklucHV0NjYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjYiIG5hbWU9Ik91dHB1dDY2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NiIgdHlwZT0idG5zOlBvcnRUeXBlNjYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjYiIGJpbmRpbmc9InRuczpCaW5kaW5nNjYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjciIG5hbWU9IklucHV0NjciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjciIG5hbWU9Ik91dHB1dDY3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NyIgdHlwZT0idG5zOlBvcnRUeXBlNjciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjciIGJpbmRpbmc9InRuczpCaW5kaW5nNjciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjgiIG5hbWU9IklucHV0NjgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjgiIG5hbWU9Ik91dHB1dDY4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2OCIgdHlwZT0idG5zOlBvcnRUeXBlNjgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjgiIGJpbmRpbmc9InRuczpCaW5kaW5nNjgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjkiIG5hbWU9IklucHV0NjkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjkiIG5hbWU9Ik91dHB1dDY5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2OSIgdHlwZT0idG5zOlBvcnRUeXBlNjkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjkiIGJpbmRpbmc9InRuczpCaW5kaW5nNjkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzAiIG5hbWU9IklucHV0NzAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzAiIG5hbWU9Ik91dHB1dDcwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MCIgdHlwZT0idG5zOlBvcnRUeXBlNzAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzAiIGJpbmRpbmc9InRuczpCaW5kaW5nNzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzEiIG5hbWU9IklucHV0NzEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzEiIG5hbWU9Ik91dHB1dDcxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MSIgdHlwZT0idG5zOlBvcnRUeXBlNzEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzEiIGJpbmRpbmc9InRuczpCaW5kaW5nNzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzIiIG5hbWU9IklucHV0NzIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzIiIG5hbWU9Ik91dHB1dDcyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MiIgdHlwZT0idG5zOlBvcnRUeXBlNzIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzIiIGJpbmRpbmc9InRuczpCaW5kaW5nNzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTczIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDczIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTczIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzMiIG5hbWU9IklucHV0NzMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzMiIG5hbWU9Ik91dHB1dDczIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MyIgdHlwZT0idG5zOlBvcnRUeXBlNzMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzMiIGJpbmRpbmc9InRuczpCaW5kaW5nNzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzQiIG5hbWU9IklucHV0NzQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzQiIG5hbWU9Ik91dHB1dDc0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NCIgdHlwZT0idG5zOlBvcnRUeXBlNzQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzQiIGJpbmRpbmc9InRuczpCaW5kaW5nNzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzUiIG5hbWU9IklucHV0NzUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzUiIG5hbWU9Ik91dHB1dDc1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NSIgdHlwZT0idG5zOlBvcnRUeXBlNzUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzUiIGJpbmRpbmc9InRuczpCaW5kaW5nNzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzYiIG5hbWU9IklucHV0NzYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzYiIG5hbWU9Ik91dHB1dDc2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NiIgdHlwZT0idG5zOlBvcnRUeXBlNzYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzYiIGJpbmRpbmc9InRuczpCaW5kaW5nNzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzciIG5hbWU9IklucHV0NzciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzciIG5hbWU9Ik91dHB1dDc3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NyIgdHlwZT0idG5zOlBvcnRUeXBlNzciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzciIGJpbmRpbmc9InRuczpCaW5kaW5nNzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzgiIG5hbWU9IklucHV0NzgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzgiIG5hbWU9Ik91dHB1dDc4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3OCIgdHlwZT0idG5zOlBvcnRUeXBlNzgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzgiIGJpbmRpbmc9InRuczpCaW5kaW5nNzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzkiIG5hbWU9IklucHV0NzkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzkiIG5hbWU9Ik91dHB1dDc5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3OSIgdHlwZT0idG5zOlBvcnRUeXBlNzkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzkiIGJpbmRpbmc9InRuczpCaW5kaW5nNzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODAiIG5hbWU9IklucHV0ODAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODAiIG5hbWU9Ik91dHB1dDgwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MCIgdHlwZT0idG5zOlBvcnRUeXBlODAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODAiIGJpbmRpbmc9InRuczpCaW5kaW5nODAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODEiIG5hbWU9IklucHV0ODEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODEiIG5hbWU9Ik91dHB1dDgxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MSIgdHlwZT0idG5zOlBvcnRUeXBlODEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODEiIGJpbmRpbmc9InRuczpCaW5kaW5nODEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODIiIG5hbWU9IklucHV0ODIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODIiIG5hbWU9Ik91dHB1dDgyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MiIgdHlwZT0idG5zOlBvcnRUeXBlODIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODIiIGJpbmRpbmc9InRuczpCaW5kaW5nODIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODMiIG5hbWU9IklucHV0ODMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODMiIG5hbWU9Ik91dHB1dDgzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MyIgdHlwZT0idG5zOlBvcnRUeXBlODMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODMiIGJpbmRpbmc9InRuczpCaW5kaW5nODMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODQiIG5hbWU9IklucHV0ODQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODQiIG5hbWU9Ik91dHB1dDg0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NCIgdHlwZT0idG5zOlBvcnRUeXBlODQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODQiIGJpbmRpbmc9InRuczpCaW5kaW5nODQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODUiIG5hbWU9IklucHV0ODUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODUiIG5hbWU9Ik91dHB1dDg1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NSIgdHlwZT0idG5zOlBvcnRUeXBlODUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODUiIGJpbmRpbmc9InRuczpCaW5kaW5nODUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODYiIG5hbWU9IklucHV0ODYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODYiIG5hbWU9Ik91dHB1dDg2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NiIgdHlwZT0idG5zOlBvcnRUeXBlODYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODYiIGJpbmRpbmc9InRuczpCaW5kaW5nODYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODciIG5hbWU9IklucHV0ODciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODciIG5hbWU9Ik91dHB1dDg3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NyIgdHlwZT0idG5zOlBvcnRUeXBlODciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODciIGJpbmRpbmc9InRuczpCaW5kaW5nODciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODgiIG5hbWU9IklucHV0ODgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODgiIG5hbWU9Ik91dHB1dDg4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4OCIgdHlwZT0idG5zOlBvcnRUeXBlODgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODgiIGJpbmRpbmc9InRuczpCaW5kaW5nODgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODkiIG5hbWU9IklucHV0ODkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODkiIG5hbWU9Ik91dHB1dDg5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4OSIgdHlwZT0idG5zOlBvcnRUeXBlODkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODkiIGJpbmRpbmc9InRuczpCaW5kaW5nODkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTAiIG5hbWU9IklucHV0OTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTAiIG5hbWU9Ik91dHB1dDkwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MCIgdHlwZT0idG5zOlBvcnRUeXBlOTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTAiIGJpbmRpbmc9InRuczpCaW5kaW5nOTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTEiIG5hbWU9IklucHV0OTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTEiIG5hbWU9Ik91dHB1dDkxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MSIgdHlwZT0idG5zOlBvcnRUeXBlOTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTEiIGJpbmRpbmc9InRuczpCaW5kaW5nOTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTIiIG5hbWU9IklucHV0OTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTIiIG5hbWU9Ik91dHB1dDkyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MiIgdHlwZT0idG5zOlBvcnRUeXBlOTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTIiIGJpbmRpbmc9InRuczpCaW5kaW5nOTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTMiIG5hbWU9IklucHV0OTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTMiIG5hbWU9Ik91dHB1dDkzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MyIgdHlwZT0idG5zOlBvcnRUeXBlOTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTMiIGJpbmRpbmc9InRuczpCaW5kaW5nOTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTQiIG5hbWU9IklucHV0OTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTQiIG5hbWU9Ik91dHB1dDk0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NCIgdHlwZT0idG5zOlBvcnRUeXBlOTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTQiIGJpbmRpbmc9InRuczpCaW5kaW5nOTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTUiIG5hbWU9IklucHV0OTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTUiIG5hbWU9Ik91dHB1dDk1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NSIgdHlwZT0idG5zOlBvcnRUeXBlOTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTUiIGJpbmRpbmc9InRuczpCaW5kaW5nOTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTYiIG5hbWU9IklucHV0OTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTYiIG5hbWU9Ik91dHB1dDk2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NiIgdHlwZT0idG5zOlBvcnRUeXBlOTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTYiIGJpbmRpbmc9InRuczpCaW5kaW5nOTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTciIG5hbWU9IklucHV0OTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTciIG5hbWU9Ik91dHB1dDk3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NyIgdHlwZT0idG5zOlBvcnRUeXBlOTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTciIGJpbmRpbmc9InRuczpCaW5kaW5nOTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTgiIG5hbWU9IklucHV0OTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTgiIG5hbWU9Ik91dHB1dDk4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5OCIgdHlwZT0idG5zOlBvcnRUeXBlOTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTgiIGJpbmRpbmc9InRuczpCaW5kaW5nOTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTkiIG5hbWU9IklucHV0OTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTkiIG5hbWU9Ik91dHB1dDk5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5OSIgdHlwZT0idG5zOlBvcnRUeXBlOTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTkiIGJpbmRpbmc9InRuczpCaW5kaW5nOTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTAwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTAwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTAwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEwMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMDAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTAwIiBuYW1lPSJJbnB1dDEwMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMDAiIG5hbWU9Ik91dHB1dDEwMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTAwIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMDAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTAwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEwMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTAwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEwMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTAxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEwMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMDEiIG5hbWU9IklucHV0MTAxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEwMSIgbmFtZT0iT3V0cHV0MTAxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMDEiIHR5cGU9InRuczpQb3J0VHlwZTEwMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMDEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTAxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMDEiIGJpbmRpbmc9InRuczpCaW5kaW5nMTAxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEwMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEwMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEwMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTAyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTAyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEwMiIgbmFtZT0iSW5wdXQxMDIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTAyIiBuYW1lPSJPdXRwdXQxMDIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEwMiIgdHlwZT0idG5zOlBvcnRUeXBlMTAyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTAyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEwMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMDIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEwMiIgYmluZGluZz0idG5zOkJpbmRpbmcxMDIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTAzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTAzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTAzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEwMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMDMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTAzIiBuYW1lPSJJbnB1dDEwMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMDMiIG5hbWU9Ik91dHB1dDEwMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTAzIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMDMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTAzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEwMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTAzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEwMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTA0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEwNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMDQiIG5hbWU9IklucHV0MTA0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEwNCIgbmFtZT0iT3V0cHV0MTA0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMDQiIHR5cGU9InRuczpQb3J0VHlwZTEwNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMDQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTA0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMDQiIGJpbmRpbmc9InRuczpCaW5kaW5nMTA0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEwNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEwNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEwNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTA1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTA1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEwNSIgbmFtZT0iSW5wdXQxMDUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTA1IiBuYW1lPSJPdXRwdXQxMDUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEwNSIgdHlwZT0idG5zOlBvcnRUeXBlMTA1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTA1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEwNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMDUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEwNSIgYmluZGluZz0idG5zOkJpbmRpbmcxMDUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTA2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTA2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTA2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEwNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMDYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTA2IiBuYW1lPSJJbnB1dDEwNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMDYiIG5hbWU9Ik91dHB1dDEwNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTA2IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMDYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTA2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEwNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTA2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEwNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTA3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEwNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMDciIG5hbWU9IklucHV0MTA3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEwNyIgbmFtZT0iT3V0cHV0MTA3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMDciIHR5cGU9InRuczpQb3J0VHlwZTEwNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMDciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTA3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMDciIGJpbmRpbmc9InRuczpCaW5kaW5nMTA3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEwOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEwOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEwOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTA4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTA4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEwOCIgbmFtZT0iSW5wdXQxMDgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTA4IiBuYW1lPSJPdXRwdXQxMDgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEwOCIgdHlwZT0idG5zOlBvcnRUeXBlMTA4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTA4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEwOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMDgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEwOCIgYmluZGluZz0idG5zOkJpbmRpbmcxMDgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTA5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTA5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTA5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEwOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMDkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTA5IiBuYW1lPSJJbnB1dDEwOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMDkiIG5hbWU9Ik91dHB1dDEwOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTA5IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMDkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTA5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEwOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTA5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEwOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTEwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTExMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMTAiIG5hbWU9IklucHV0MTEwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTExMCIgbmFtZT0iT3V0cHV0MTEwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMTAiIHR5cGU9InRuczpQb3J0VHlwZTExMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTEwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMTAiIGJpbmRpbmc9InRuczpCaW5kaW5nMTEwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTExMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDExMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTExMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTExIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTExIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTExMSIgbmFtZT0iSW5wdXQxMTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTExIiBuYW1lPSJPdXRwdXQxMTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzExMSIgdHlwZT0idG5zOlBvcnRUeXBlMTExIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTExIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjExMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDExMSIgYmluZGluZz0idG5zOkJpbmRpbmcxMTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTEyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTEyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTEyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDExMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTEyIiBuYW1lPSJJbnB1dDExMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMTIiIG5hbWU9Ik91dHB1dDExMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTEyIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTEyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTExMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTEyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzExMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTEzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTExMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMTMiIG5hbWU9IklucHV0MTEzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTExMyIgbmFtZT0iT3V0cHV0MTEzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMTMiIHR5cGU9InRuczpQb3J0VHlwZTExMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTEzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMTMiIGJpbmRpbmc9InRuczpCaW5kaW5nMTEzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTExNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDExNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTExNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTE0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTE0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTExNCIgbmFtZT0iSW5wdXQxMTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTE0IiBuYW1lPSJPdXRwdXQxMTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzExNCIgdHlwZT0idG5zOlBvcnRUeXBlMTE0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTE0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjExNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDExNCIgYmluZGluZz0idG5zOkJpbmRpbmcxMTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTE1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTE1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTE1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDExNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTE1IiBuYW1lPSJJbnB1dDExNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMTUiIG5hbWU9Ik91dHB1dDExNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTE1IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTE1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTExNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTE1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzExNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTE2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTExNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMTYiIG5hbWU9IklucHV0MTE2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTExNiIgbmFtZT0iT3V0cHV0MTE2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMTYiIHR5cGU9InRuczpQb3J0VHlwZTExNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTE2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMTYiIGJpbmRpbmc9InRuczpCaW5kaW5nMTE2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTExNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDExNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTExNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTE3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTE3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTExNyIgbmFtZT0iSW5wdXQxMTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTE3IiBuYW1lPSJPdXRwdXQxMTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzExNyIgdHlwZT0idG5zOlBvcnRUeXBlMTE3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTE3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjExNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDExNyIgYmluZGluZz0idG5zOkJpbmRpbmcxMTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTE4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTE4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTE4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDExOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTE4IiBuYW1lPSJJbnB1dDExOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMTgiIG5hbWU9Ik91dHB1dDExOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTE4IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTE4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTExOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTE4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzExOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTE5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTExOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMTkiIG5hbWU9IklucHV0MTE5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTExOSIgbmFtZT0iT3V0cHV0MTE5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMTkiIHR5cGU9InRuczpQb3J0VHlwZTExOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTE5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMTkiIGJpbmRpbmc9InRuczpCaW5kaW5nMTE5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEyMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEyMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEyMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTIwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTIwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEyMCIgbmFtZT0iSW5wdXQxMjAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTIwIiBuYW1lPSJPdXRwdXQxMjAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEyMCIgdHlwZT0idG5zOlBvcnRUeXBlMTIwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTIwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEyMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMjAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEyMCIgYmluZGluZz0idG5zOkJpbmRpbmcxMjAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTIxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTIxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTIxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEyMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMjEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTIxIiBuYW1lPSJJbnB1dDEyMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMjEiIG5hbWU9Ik91dHB1dDEyMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTIxIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMjEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTIxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEyMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTIxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEyMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTIyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEyMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMjIiIG5hbWU9IklucHV0MTIyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEyMiIgbmFtZT0iT3V0cHV0MTIyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMjIiIHR5cGU9InRuczpQb3J0VHlwZTEyMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTIyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMjIiIGJpbmRpbmc9InRuczpCaW5kaW5nMTIyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEyMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEyMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEyMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTIzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTIzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEyMyIgbmFtZT0iSW5wdXQxMjMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTIzIiBuYW1lPSJPdXRwdXQxMjMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEyMyIgdHlwZT0idG5zOlBvcnRUeXBlMTIzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTIzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEyMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMjMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEyMyIgYmluZGluZz0idG5zOkJpbmRpbmcxMjMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTI0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTI0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTI0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEyNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMjQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTI0IiBuYW1lPSJJbnB1dDEyNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMjQiIG5hbWU9Ik91dHB1dDEyNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTI0IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMjQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTI0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEyNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTI0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEyNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTI1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEyNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMjUiIG5hbWU9IklucHV0MTI1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEyNSIgbmFtZT0iT3V0cHV0MTI1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMjUiIHR5cGU9InRuczpQb3J0VHlwZTEyNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTI1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMjUiIGJpbmRpbmc9InRuczpCaW5kaW5nMTI1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEyNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEyNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEyNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTI2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTI2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEyNiIgbmFtZT0iSW5wdXQxMjYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTI2IiBuYW1lPSJPdXRwdXQxMjYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEyNiIgdHlwZT0idG5zOlBvcnRUeXBlMTI2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTI2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEyNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMjYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEyNiIgYmluZGluZz0idG5zOkJpbmRpbmcxMjYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTI3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTI3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTI3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEyNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMjciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTI3IiBuYW1lPSJJbnB1dDEyNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMjciIG5hbWU9Ik91dHB1dDEyNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTI3IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMjciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTI3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEyNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTI3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEyNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTI4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEyOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMjgiIG5hbWU9IklucHV0MTI4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEyOCIgbmFtZT0iT3V0cHV0MTI4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMjgiIHR5cGU9InRuczpQb3J0VHlwZTEyOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTI4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMjgiIGJpbmRpbmc9InRuczpCaW5kaW5nMTI4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEyOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEyOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEyOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTI5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTI5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEyOSIgbmFtZT0iSW5wdXQxMjkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTI5IiBuYW1lPSJPdXRwdXQxMjkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEyOSIgdHlwZT0idG5zOlBvcnRUeXBlMTI5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTI5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEyOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMjkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEyOSIgYmluZGluZz0idG5zOkJpbmRpbmcxMjkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTMwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTMwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTMwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEzMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMzAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTMwIiBuYW1lPSJJbnB1dDEzMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMzAiIG5hbWU9Ik91dHB1dDEzMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTMwIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMzAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTMwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEzMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTMwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEzMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTMxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEzMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMzEiIG5hbWU9IklucHV0MTMxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEzMSIgbmFtZT0iT3V0cHV0MTMxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMzEiIHR5cGU9InRuczpQb3J0VHlwZTEzMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMzEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTMxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMzEiIGJpbmRpbmc9InRuczpCaW5kaW5nMTMxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEzMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEzMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEzMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTMyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTMyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEzMiIgbmFtZT0iSW5wdXQxMzIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTMyIiBuYW1lPSJPdXRwdXQxMzIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEzMiIgdHlwZT0idG5zOlBvcnRUeXBlMTMyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTMyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEzMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMzIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEzMiIgYmluZGluZz0idG5zOkJpbmRpbmcxMzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTMzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTMzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTMzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEzMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMzMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTMzIiBuYW1lPSJJbnB1dDEzMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMzMiIG5hbWU9Ik91dHB1dDEzMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTMzIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMzMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTMzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEzMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTMzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEzMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTM0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEzNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMzQiIG5hbWU9IklucHV0MTM0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEzNCIgbmFtZT0iT3V0cHV0MTM0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMzQiIHR5cGU9InRuczpQb3J0VHlwZTEzNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMzQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTM0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMzQiIGJpbmRpbmc9InRuczpCaW5kaW5nMTM0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEzNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEzNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEzNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTM1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTM1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEzNSIgbmFtZT0iSW5wdXQxMzUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTM1IiBuYW1lPSJPdXRwdXQxMzUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEzNSIgdHlwZT0idG5zOlBvcnRUeXBlMTM1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTM1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEzNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMzUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEzNSIgYmluZGluZz0idG5zOkJpbmRpbmcxMzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTM2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTM2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTM2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEzNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMzYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTM2IiBuYW1lPSJJbnB1dDEzNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMzYiIG5hbWU9Ik91dHB1dDEzNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTM2IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMzYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTM2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEzNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTM2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEzNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTM3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEzNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMzciIG5hbWU9IklucHV0MTM3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEzNyIgbmFtZT0iT3V0cHV0MTM3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMzciIHR5cGU9InRuczpQb3J0VHlwZTEzNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMzciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTM3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMzciIGJpbmRpbmc9InRuczpCaW5kaW5nMTM3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEzOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEzOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEzOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTM4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTM4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEzOCIgbmFtZT0iSW5wdXQxMzgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTM4IiBuYW1lPSJPdXRwdXQxMzgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEzOCIgdHlwZT0idG5zOlBvcnRUeXBlMTM4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTM4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEzOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMzgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEzOCIgYmluZGluZz0idG5zOkJpbmRpbmcxMzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTM5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTM5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTM5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEzOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMzkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTM5IiBuYW1lPSJJbnB1dDEzOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMzkiIG5hbWU9Ik91dHB1dDEzOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTM5IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMzkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTM5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEzOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTM5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEzOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE0MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNDAiIG5hbWU9IklucHV0MTQwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE0MCIgbmFtZT0iT3V0cHV0MTQwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNDAiIHR5cGU9InRuczpQb3J0VHlwZTE0MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNDAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTQwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNDAiIGJpbmRpbmc9InRuczpCaW5kaW5nMTQwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE0MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE0MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE0MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTQxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE0MSIgbmFtZT0iSW5wdXQxNDEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTQxIiBuYW1lPSJPdXRwdXQxNDEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE0MSIgdHlwZT0idG5zOlBvcnRUeXBlMTQxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE0MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNDEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE0MSIgYmluZGluZz0idG5zOkJpbmRpbmcxNDEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTQyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTQyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE0MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNDIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTQyIiBuYW1lPSJJbnB1dDE0MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNDIiIG5hbWU9Ik91dHB1dDE0MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTQyIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNDIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTQyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE0MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTQyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE0MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE0MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNDMiIG5hbWU9IklucHV0MTQzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE0MyIgbmFtZT0iT3V0cHV0MTQzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNDMiIHR5cGU9InRuczpQb3J0VHlwZTE0MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNDMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTQzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNDMiIGJpbmRpbmc9InRuczpCaW5kaW5nMTQzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE0NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE0NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE0NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTQ0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQ0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE0NCIgbmFtZT0iSW5wdXQxNDQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTQ0IiBuYW1lPSJPdXRwdXQxNDQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE0NCIgdHlwZT0idG5zOlBvcnRUeXBlMTQ0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQ0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE0NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNDQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE0NCIgYmluZGluZz0idG5zOkJpbmRpbmcxNDQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTQ1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTQ1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE0NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNDUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTQ1IiBuYW1lPSJJbnB1dDE0NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNDUiIG5hbWU9Ik91dHB1dDE0NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTQ1IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNDUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTQ1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE0NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTQ1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE0NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE0NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNDYiIG5hbWU9IklucHV0MTQ2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE0NiIgbmFtZT0iT3V0cHV0MTQ2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNDYiIHR5cGU9InRuczpQb3J0VHlwZTE0NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNDYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTQ2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNDYiIGJpbmRpbmc9InRuczpCaW5kaW5nMTQ2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE0NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE0NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE0NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTQ3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQ3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE0NyIgbmFtZT0iSW5wdXQxNDciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTQ3IiBuYW1lPSJPdXRwdXQxNDciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE0NyIgdHlwZT0idG5zOlBvcnRUeXBlMTQ3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQ3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE0NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNDciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE0NyIgYmluZGluZz0idG5zOkJpbmRpbmcxNDciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTQ4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTQ4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE0OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNDgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTQ4IiBuYW1lPSJJbnB1dDE0OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNDgiIG5hbWU9Ik91dHB1dDE0OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTQ4IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNDgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTQ4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE0OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTQ4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE0OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE0OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNDkiIG5hbWU9IklucHV0MTQ5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE0OSIgbmFtZT0iT3V0cHV0MTQ5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNDkiIHR5cGU9InRuczpQb3J0VHlwZTE0OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNDkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTQ5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNDkiIGJpbmRpbmc9InRuczpCaW5kaW5nMTQ5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE1MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE1MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE1MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTUwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTUwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE1MCIgbmFtZT0iSW5wdXQxNTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTUwIiBuYW1lPSJPdXRwdXQxNTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE1MCIgdHlwZT0idG5zOlBvcnRUeXBlMTUwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTUwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE1MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE1MCIgYmluZGluZz0idG5zOkJpbmRpbmcxNTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTUxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTUxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTUxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE1MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTUxIiBuYW1lPSJJbnB1dDE1MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNTEiIG5hbWU9Ik91dHB1dDE1MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTUxIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTUxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE1MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTUxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE1MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTUyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE1MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNTIiIG5hbWU9IklucHV0MTUyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE1MiIgbmFtZT0iT3V0cHV0MTUyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNTIiIHR5cGU9InRuczpQb3J0VHlwZTE1MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTUyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNTIiIGJpbmRpbmc9InRuczpCaW5kaW5nMTUyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE1MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE1MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE1MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTUzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTUzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE1MyIgbmFtZT0iSW5wdXQxNTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTUzIiBuYW1lPSJPdXRwdXQxNTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE1MyIgdHlwZT0idG5zOlBvcnRUeXBlMTUzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTUzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE1MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE1MyIgYmluZGluZz0idG5zOkJpbmRpbmcxNTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTU0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTU0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTU0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE1NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTU0IiBuYW1lPSJJbnB1dDE1NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNTQiIG5hbWU9Ik91dHB1dDE1NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTU0IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTU0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE1NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTU0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE1NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTU1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE1NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNTUiIG5hbWU9IklucHV0MTU1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE1NSIgbmFtZT0iT3V0cHV0MTU1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNTUiIHR5cGU9InRuczpQb3J0VHlwZTE1NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTU1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNTUiIGJpbmRpbmc9InRuczpCaW5kaW5nMTU1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE1NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE1NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE1NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTU2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTU2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE1NiIgbmFtZT0iSW5wdXQxNTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTU2IiBuYW1lPSJPdXRwdXQxNTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE1NiIgdHlwZT0idG5zOlBvcnRUeXBlMTU2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTU2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE1NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE1NiIgYmluZGluZz0idG5zOkJpbmRpbmcxNTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTU3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTU3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTU3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE1NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTU3IiBuYW1lPSJJbnB1dDE1NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNTciIG5hbWU9Ik91dHB1dDE1NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTU3IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTU3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE1NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTU3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE1NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTU4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE1OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNTgiIG5hbWU9IklucHV0MTU4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE1OCIgbmFtZT0iT3V0cHV0MTU4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNTgiIHR5cGU9InRuczpQb3J0VHlwZTE1OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTU4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNTgiIGJpbmRpbmc9InRuczpCaW5kaW5nMTU4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE1OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE1OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE1OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTU5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTU5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE1OSIgbmFtZT0iSW5wdXQxNTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTU5IiBuYW1lPSJPdXRwdXQxNTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE1OSIgdHlwZT0idG5zOlBvcnRUeXBlMTU5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTU5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE1OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE1OSIgYmluZGluZz0idG5zOkJpbmRpbmcxNTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTYwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTYwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTYwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE2MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNjAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTYwIiBuYW1lPSJJbnB1dDE2MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNjAiIG5hbWU9Ik91dHB1dDE2MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTYwIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNjAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTYwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE2MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTYwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE2MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTYxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE2MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNjEiIG5hbWU9IklucHV0MTYxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE2MSIgbmFtZT0iT3V0cHV0MTYxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNjEiIHR5cGU9InRuczpQb3J0VHlwZTE2MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTYxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNjEiIGJpbmRpbmc9InRuczpCaW5kaW5nMTYxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE2MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE2MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE2MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTYyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTYyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE2MiIgbmFtZT0iSW5wdXQxNjIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTYyIiBuYW1lPSJPdXRwdXQxNjIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE2MiIgdHlwZT0idG5zOlBvcnRUeXBlMTYyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTYyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE2MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNjIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE2MiIgYmluZGluZz0idG5zOkJpbmRpbmcxNjIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTYzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTYzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTYzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE2MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNjMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTYzIiBuYW1lPSJJbnB1dDE2MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNjMiIG5hbWU9Ik91dHB1dDE2MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTYzIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNjMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTYzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE2MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTYzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE2MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTY0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE2NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNjQiIG5hbWU9IklucHV0MTY0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE2NCIgbmFtZT0iT3V0cHV0MTY0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNjQiIHR5cGU9InRuczpQb3J0VHlwZTE2NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTY0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNjQiIGJpbmRpbmc9InRuczpCaW5kaW5nMTY0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE2NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE2NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE2NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTY1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTY1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE2NSIgbmFtZT0iSW5wdXQxNjUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTY1IiBuYW1lPSJPdXRwdXQxNjUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE2NSIgdHlwZT0idG5zOlBvcnRUeXBlMTY1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTY1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE2NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNjUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE2NSIgYmluZGluZz0idG5zOkJpbmRpbmcxNjUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTY2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTY2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTY2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE2NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNjYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTY2IiBuYW1lPSJJbnB1dDE2NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNjYiIG5hbWU9Ik91dHB1dDE2NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTY2IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNjYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTY2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE2NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTY2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE2NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTY3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE2NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNjciIG5hbWU9IklucHV0MTY3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE2NyIgbmFtZT0iT3V0cHV0MTY3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNjciIHR5cGU9InRuczpQb3J0VHlwZTE2NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTY3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNjciIGJpbmRpbmc9InRuczpCaW5kaW5nMTY3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE2OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE2OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE2OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTY4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTY4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE2OCIgbmFtZT0iSW5wdXQxNjgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTY4IiBuYW1lPSJPdXRwdXQxNjgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE2OCIgdHlwZT0idG5zOlBvcnRUeXBlMTY4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTY4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE2OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNjgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE2OCIgYmluZGluZz0idG5zOkJpbmRpbmcxNjgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTY5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTY5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTY5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE2OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNjkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTY5IiBuYW1lPSJJbnB1dDE2OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNjkiIG5hbWU9Ik91dHB1dDE2OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTY5IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNjkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTY5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE2OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTY5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE2OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTcwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE3MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNzAiIG5hbWU9IklucHV0MTcwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE3MCIgbmFtZT0iT3V0cHV0MTcwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNzAiIHR5cGU9InRuczpQb3J0VHlwZTE3MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNzAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTcwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNzAiIGJpbmRpbmc9InRuczpCaW5kaW5nMTcwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE3MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE3MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE3MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTcxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTcxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE3MSIgbmFtZT0iSW5wdXQxNzEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTcxIiBuYW1lPSJPdXRwdXQxNzEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE3MSIgdHlwZT0idG5zOlBvcnRUeXBlMTcxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTcxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE3MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNzEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE3MSIgYmluZGluZz0idG5zOkJpbmRpbmcxNzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTcyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTcyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTcyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE3MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNzIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTcyIiBuYW1lPSJJbnB1dDE3MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNzIiIG5hbWU9Ik91dHB1dDE3MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTcyIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNzIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTcyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE3MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTcyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE3MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTczIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE3MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNzMiIG5hbWU9IklucHV0MTczIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE3MyIgbmFtZT0iT3V0cHV0MTczIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNzMiIHR5cGU9InRuczpQb3J0VHlwZTE3MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNzMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTczIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNzMiIGJpbmRpbmc9InRuczpCaW5kaW5nMTczIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE3NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE3NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE3NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTc0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTc0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE3NCIgbmFtZT0iSW5wdXQxNzQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTc0IiBuYW1lPSJPdXRwdXQxNzQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE3NCIgdHlwZT0idG5zOlBvcnRUeXBlMTc0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTc0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE3NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNzQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE3NCIgYmluZGluZz0idG5zOkJpbmRpbmcxNzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTc1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTc1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTc1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE3NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNzUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTc1IiBuYW1lPSJJbnB1dDE3NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNzUiIG5hbWU9Ik91dHB1dDE3NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTc1IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNzUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTc1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE3NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTc1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE3NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTc2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE3NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNzYiIG5hbWU9IklucHV0MTc2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE3NiIgbmFtZT0iT3V0cHV0MTc2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNzYiIHR5cGU9InRuczpQb3J0VHlwZTE3NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNzYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTc2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNzYiIGJpbmRpbmc9InRuczpCaW5kaW5nMTc2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE3NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE3NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE3NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTc3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTc3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE3NyIgbmFtZT0iSW5wdXQxNzciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTc3IiBuYW1lPSJPdXRwdXQxNzciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE3NyIgdHlwZT0idG5zOlBvcnRUeXBlMTc3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTc3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE3NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNzciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE3NyIgYmluZGluZz0idG5zOkJpbmRpbmcxNzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTc4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTc4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTc4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE3OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNzgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTc4IiBuYW1lPSJJbnB1dDE3OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNzgiIG5hbWU9Ik91dHB1dDE3OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTc4IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNzgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTc4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE3OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTc4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE3OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTc5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE3OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNzkiIG5hbWU9IklucHV0MTc5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE3OSIgbmFtZT0iT3V0cHV0MTc5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNzkiIHR5cGU9InRuczpQb3J0VHlwZTE3OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNzkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTc5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNzkiIGJpbmRpbmc9InRuczpCaW5kaW5nMTc5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE4MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE4MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE4MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxODAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTgwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTgwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE4MCIgbmFtZT0iSW5wdXQxODAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTgwIiBuYW1lPSJPdXRwdXQxODAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE4MCIgdHlwZT0idG5zOlBvcnRUeXBlMTgwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTgwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE4MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxODAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE4MCIgYmluZGluZz0idG5zOkJpbmRpbmcxODAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTgxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTgxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTgxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE4MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxODEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTgxIiBuYW1lPSJJbnB1dDE4MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxODEiIG5hbWU9Ik91dHB1dDE4MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTgxIiB0eXBlPSJ0bnM6UG9ydFR5cGUxODEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTgxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE4MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTgxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE4MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxODIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxODIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxODIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTgyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE4MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxODIiIG5hbWU9IklucHV0MTgyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE4MiIgbmFtZT0iT3V0cHV0MTgyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxODIiIHR5cGU9InRuczpQb3J0VHlwZTE4MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xODIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTgyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxODIiIGJpbmRpbmc9InRuczpCaW5kaW5nMTgyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE4MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE4MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE4MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxODMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTgzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTgzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE4MyIgbmFtZT0iSW5wdXQxODMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTgzIiBuYW1lPSJPdXRwdXQxODMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE4MyIgdHlwZT0idG5zOlBvcnRUeXBlMTgzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTgzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE4MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxODMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE4MyIgYmluZGluZz0idG5zOkJpbmRpbmcxODMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTg0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTg0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTg0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE4NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxODQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTg0IiBuYW1lPSJJbnB1dDE4NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxODQiIG5hbWU9Ik91dHB1dDE4NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTg0IiB0eXBlPSJ0bnM6UG9ydFR5cGUxODQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTg0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE4NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTg0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE4NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxODUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxODUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxODUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTg1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE4NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxODUiIG5hbWU9IklucHV0MTg1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE4NSIgbmFtZT0iT3V0cHV0MTg1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxODUiIHR5cGU9InRuczpQb3J0VHlwZTE4NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xODUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTg1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxODUiIGJpbmRpbmc9InRuczpCaW5kaW5nMTg1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE4NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE4NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE4NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxODYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTg2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTg2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE4NiIgbmFtZT0iSW5wdXQxODYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTg2IiBuYW1lPSJPdXRwdXQxODYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE4NiIgdHlwZT0idG5zOlBvcnRUeXBlMTg2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTg2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE4NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxODYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE4NiIgYmluZGluZz0idG5zOkJpbmRpbmcxODYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTg3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTg3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTg3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE4NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxODciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTg3IiBuYW1lPSJJbnB1dDE4NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxODciIG5hbWU9Ik91dHB1dDE4NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTg3IiB0eXBlPSJ0bnM6UG9ydFR5cGUxODciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTg3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE4NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTg3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE4NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxODgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxODgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxODgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTg4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE4OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxODgiIG5hbWU9IklucHV0MTg4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE4OCIgbmFtZT0iT3V0cHV0MTg4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxODgiIHR5cGU9InRuczpQb3J0VHlwZTE4OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xODgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTg4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxODgiIGJpbmRpbmc9InRuczpCaW5kaW5nMTg4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE4OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE4OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE4OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxODkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTg5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTg5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE4OSIgbmFtZT0iSW5wdXQxODkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTg5IiBuYW1lPSJPdXRwdXQxODkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE4OSIgdHlwZT0idG5zOlBvcnRUeXBlMTg5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTg5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE4OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxODkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE4OSIgYmluZGluZz0idG5zOkJpbmRpbmcxODkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTkwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTkwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTkwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE5MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxOTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTkwIiBuYW1lPSJJbnB1dDE5MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxOTAiIG5hbWU9Ik91dHB1dDE5MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTkwIiB0eXBlPSJ0bnM6UG9ydFR5cGUxOTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTkwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE5MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTkwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE5MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxOTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxOTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxOTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTkxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE5MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxOTEiIG5hbWU9IklucHV0MTkxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE5MSIgbmFtZT0iT3V0cHV0MTkxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxOTEiIHR5cGU9InRuczpQb3J0VHlwZTE5MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xOTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTkxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxOTEiIGJpbmRpbmc9InRuczpCaW5kaW5nMTkxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE5MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE5MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE5MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxOTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTkyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTkyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE5MiIgbmFtZT0iSW5wdXQxOTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTkyIiBuYW1lPSJPdXRwdXQxOTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE5MiIgdHlwZT0idG5zOlBvcnRUeXBlMTkyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTkyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE5MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxOTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE5MiIgYmluZGluZz0idG5zOkJpbmRpbmcxOTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTkzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTkzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTkzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE5MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxOTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTkzIiBuYW1lPSJJbnB1dDE5MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxOTMiIG5hbWU9Ik91dHB1dDE5MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTkzIiB0eXBlPSJ0bnM6UG9ydFR5cGUxOTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTkzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE5MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTkzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE5MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxOTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxOTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxOTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTk0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE5NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxOTQiIG5hbWU9IklucHV0MTk0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE5NCIgbmFtZT0iT3V0cHV0MTk0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxOTQiIHR5cGU9InRuczpQb3J0VHlwZTE5NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xOTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTk0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxOTQiIGJpbmRpbmc9InRuczpCaW5kaW5nMTk0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE5NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE5NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE5NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxOTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTk1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTk1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE5NSIgbmFtZT0iSW5wdXQxOTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTk1IiBuYW1lPSJPdXRwdXQxOTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE5NSIgdHlwZT0idG5zOlBvcnRUeXBlMTk1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTk1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE5NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxOTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE5NSIgYmluZGluZz0idG5zOkJpbmRpbmcxOTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTk2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTk2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTk2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE5NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxOTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTk2IiBuYW1lPSJJbnB1dDE5NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxOTYiIG5hbWU9Ik91dHB1dDE5NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTk2IiB0eXBlPSJ0bnM6UG9ydFR5cGUxOTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTk2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE5NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTk2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE5NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxOTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxOTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxOTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTk3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE5NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxOTciIG5hbWU9IklucHV0MTk3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE5NyIgbmFtZT0iT3V0cHV0MTk3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxOTciIHR5cGU9InRuczpQb3J0VHlwZTE5NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xOTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTk3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxOTciIGJpbmRpbmc9InRuczpCaW5kaW5nMTk3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE5OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE5OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE5OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxOTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTk4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTk4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE5OCIgbmFtZT0iSW5wdXQxOTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTk4IiBuYW1lPSJPdXRwdXQxOTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE5OCIgdHlwZT0idG5zOlBvcnRUeXBlMTk4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTk4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE5OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxOTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE5OCIgYmluZGluZz0idG5zOkJpbmRpbmcxOTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTk5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTk5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTk5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE5OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxOTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTk5IiBuYW1lPSJJbnB1dDE5OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxOTkiIG5hbWU9Ik91dHB1dDE5OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTk5IiB0eXBlPSJ0bnM6UG9ydFR5cGUxOTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTk5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE5OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTk5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE5OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjAwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIwMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMDAiIG5hbWU9IklucHV0MjAwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIwMCIgbmFtZT0iT3V0cHV0MjAwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMDAiIHR5cGU9InRuczpQb3J0VHlwZTIwMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMDAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjAwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMDAiIGJpbmRpbmc9InRuczpCaW5kaW5nMjAwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIwMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIwMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIwMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjAxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjAxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIwMSIgbmFtZT0iSW5wdXQyMDEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjAxIiBuYW1lPSJPdXRwdXQyMDEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIwMSIgdHlwZT0idG5zOlBvcnRUeXBlMjAxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjAxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIwMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMDEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIwMSIgYmluZGluZz0idG5zOkJpbmRpbmcyMDEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjAyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjAyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjAyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIwMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMDIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjAyIiBuYW1lPSJJbnB1dDIwMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMDIiIG5hbWU9Ik91dHB1dDIwMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjAyIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMDIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjAyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIwMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjAyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIwMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjAzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIwMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMDMiIG5hbWU9IklucHV0MjAzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIwMyIgbmFtZT0iT3V0cHV0MjAzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMDMiIHR5cGU9InRuczpQb3J0VHlwZTIwMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMDMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjAzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMDMiIGJpbmRpbmc9InRuczpCaW5kaW5nMjAzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIwNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIwNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIwNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjA0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjA0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIwNCIgbmFtZT0iSW5wdXQyMDQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjA0IiBuYW1lPSJPdXRwdXQyMDQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIwNCIgdHlwZT0idG5zOlBvcnRUeXBlMjA0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjA0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIwNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMDQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIwNCIgYmluZGluZz0idG5zOkJpbmRpbmcyMDQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjA1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjA1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjA1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIwNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMDUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjA1IiBuYW1lPSJJbnB1dDIwNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMDUiIG5hbWU9Ik91dHB1dDIwNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjA1IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMDUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjA1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIwNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjA1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIwNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjA2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIwNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMDYiIG5hbWU9IklucHV0MjA2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIwNiIgbmFtZT0iT3V0cHV0MjA2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMDYiIHR5cGU9InRuczpQb3J0VHlwZTIwNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMDYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjA2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMDYiIGJpbmRpbmc9InRuczpCaW5kaW5nMjA2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIwNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIwNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIwNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjA3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjA3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIwNyIgbmFtZT0iSW5wdXQyMDciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjA3IiBuYW1lPSJPdXRwdXQyMDciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIwNyIgdHlwZT0idG5zOlBvcnRUeXBlMjA3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjA3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIwNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMDciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIwNyIgYmluZGluZz0idG5zOkJpbmRpbmcyMDciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjA4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjA4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjA4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIwOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMDgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjA4IiBuYW1lPSJJbnB1dDIwOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMDgiIG5hbWU9Ik91dHB1dDIwOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjA4IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMDgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjA4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIwOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjA4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIwOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjA5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIwOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMDkiIG5hbWU9IklucHV0MjA5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIwOSIgbmFtZT0iT3V0cHV0MjA5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMDkiIHR5cGU9InRuczpQb3J0VHlwZTIwOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMDkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjA5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMDkiIGJpbmRpbmc9InRuczpCaW5kaW5nMjA5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIxMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIxMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIxMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjEwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjEwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIxMCIgbmFtZT0iSW5wdXQyMTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjEwIiBuYW1lPSJPdXRwdXQyMTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIxMCIgdHlwZT0idG5zOlBvcnRUeXBlMjEwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjEwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIxMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIxMCIgYmluZGluZz0idG5zOkJpbmRpbmcyMTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjExIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjExIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjExIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIxMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjExIiBuYW1lPSJJbnB1dDIxMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMTEiIG5hbWU9Ik91dHB1dDIxMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjExIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjExIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIxMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjExIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIxMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjEyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIxMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMTIiIG5hbWU9IklucHV0MjEyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIxMiIgbmFtZT0iT3V0cHV0MjEyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMTIiIHR5cGU9InRuczpQb3J0VHlwZTIxMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjEyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMTIiIGJpbmRpbmc9InRuczpCaW5kaW5nMjEyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIxMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIxMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIxMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjEzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjEzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIxMyIgbmFtZT0iSW5wdXQyMTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjEzIiBuYW1lPSJPdXRwdXQyMTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIxMyIgdHlwZT0idG5zOlBvcnRUeXBlMjEzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjEzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIxMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIxMyIgYmluZGluZz0idG5zOkJpbmRpbmcyMTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjE0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjE0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjE0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIxNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjE0IiBuYW1lPSJJbnB1dDIxNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMTQiIG5hbWU9Ik91dHB1dDIxNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjE0IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjE0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIxNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjE0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIxNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjE1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIxNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMTUiIG5hbWU9IklucHV0MjE1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIxNSIgbmFtZT0iT3V0cHV0MjE1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMTUiIHR5cGU9InRuczpQb3J0VHlwZTIxNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjE1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMTUiIGJpbmRpbmc9InRuczpCaW5kaW5nMjE1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIxNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIxNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIxNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjE2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjE2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIxNiIgbmFtZT0iSW5wdXQyMTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjE2IiBuYW1lPSJPdXRwdXQyMTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIxNiIgdHlwZT0idG5zOlBvcnRUeXBlMjE2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjE2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIxNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIxNiIgYmluZGluZz0idG5zOkJpbmRpbmcyMTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjE3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjE3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjE3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIxNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjE3IiBuYW1lPSJJbnB1dDIxNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMTciIG5hbWU9Ik91dHB1dDIxNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjE3IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjE3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIxNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjE3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIxNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjE4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIxOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMTgiIG5hbWU9IklucHV0MjE4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIxOCIgbmFtZT0iT3V0cHV0MjE4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMTgiIHR5cGU9InRuczpQb3J0VHlwZTIxOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjE4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMTgiIGJpbmRpbmc9InRuczpCaW5kaW5nMjE4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIxOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIxOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIxOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjE5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjE5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIxOSIgbmFtZT0iSW5wdXQyMTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjE5IiBuYW1lPSJPdXRwdXQyMTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIxOSIgdHlwZT0idG5zOlBvcnRUeXBlMjE5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjE5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIxOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIxOSIgYmluZGluZz0idG5zOkJpbmRpbmcyMTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjIwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjIwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjIwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIyMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMjAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjIwIiBuYW1lPSJJbnB1dDIyMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMjAiIG5hbWU9Ik91dHB1dDIyMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjIwIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMjAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjIwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIyMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjIwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIyMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjIxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIyMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMjEiIG5hbWU9IklucHV0MjIxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIyMSIgbmFtZT0iT3V0cHV0MjIxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMjEiIHR5cGU9InRuczpQb3J0VHlwZTIyMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjIxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMjEiIGJpbmRpbmc9InRuczpCaW5kaW5nMjIxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIyMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIyMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIyMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjIyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjIyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIyMiIgbmFtZT0iSW5wdXQyMjIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjIyIiBuYW1lPSJPdXRwdXQyMjIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIyMiIgdHlwZT0idG5zOlBvcnRUeXBlMjIyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjIyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIyMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMjIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIyMiIgYmluZGluZz0idG5zOkJpbmRpbmcyMjIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjIzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjIzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjIzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIyMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMjMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjIzIiBuYW1lPSJJbnB1dDIyMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMjMiIG5hbWU9Ik91dHB1dDIyMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjIzIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMjMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjIzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIyMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjIzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIyMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjI0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIyNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMjQiIG5hbWU9IklucHV0MjI0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIyNCIgbmFtZT0iT3V0cHV0MjI0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMjQiIHR5cGU9InRuczpQb3J0VHlwZTIyNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjI0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMjQiIGJpbmRpbmc9InRuczpCaW5kaW5nMjI0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIyNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIyNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIyNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjI1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjI1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIyNSIgbmFtZT0iSW5wdXQyMjUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjI1IiBuYW1lPSJPdXRwdXQyMjUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIyNSIgdHlwZT0idG5zOlBvcnRUeXBlMjI1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjI1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIyNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMjUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIyNSIgYmluZGluZz0idG5zOkJpbmRpbmcyMjUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjI2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjI2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjI2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIyNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMjYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjI2IiBuYW1lPSJJbnB1dDIyNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMjYiIG5hbWU9Ik91dHB1dDIyNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjI2IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMjYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjI2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIyNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjI2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIyNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjI3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIyNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMjciIG5hbWU9IklucHV0MjI3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIyNyIgbmFtZT0iT3V0cHV0MjI3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMjciIHR5cGU9InRuczpQb3J0VHlwZTIyNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjI3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMjciIGJpbmRpbmc9InRuczpCaW5kaW5nMjI3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIyOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIyOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIyOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjI4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjI4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIyOCIgbmFtZT0iSW5wdXQyMjgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjI4IiBuYW1lPSJPdXRwdXQyMjgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIyOCIgdHlwZT0idG5zOlBvcnRUeXBlMjI4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjI4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIyOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMjgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIyOCIgYmluZGluZz0idG5zOkJpbmRpbmcyMjgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjI5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjI5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjI5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIyOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMjkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjI5IiBuYW1lPSJJbnB1dDIyOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMjkiIG5hbWU9Ik91dHB1dDIyOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjI5IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMjkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjI5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIyOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjI5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIyOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjMwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIzMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMzAiIG5hbWU9IklucHV0MjMwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIzMCIgbmFtZT0iT3V0cHV0MjMwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMzAiIHR5cGU9InRuczpQb3J0VHlwZTIzMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMzAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjMwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMzAiIGJpbmRpbmc9InRuczpCaW5kaW5nMjMwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIzMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIzMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIzMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjMxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjMxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIzMSIgbmFtZT0iSW5wdXQyMzEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjMxIiBuYW1lPSJPdXRwdXQyMzEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIzMSIgdHlwZT0idG5zOlBvcnRUeXBlMjMxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjMxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIzMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMzEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIzMSIgYmluZGluZz0idG5zOkJpbmRpbmcyMzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjMyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjMyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjMyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIzMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMzIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjMyIiBuYW1lPSJJbnB1dDIzMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMzIiIG5hbWU9Ik91dHB1dDIzMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjMyIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMzIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjMyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIzMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjMyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIzMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjMzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIzMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMzMiIG5hbWU9IklucHV0MjMzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIzMyIgbmFtZT0iT3V0cHV0MjMzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMzMiIHR5cGU9InRuczpQb3J0VHlwZTIzMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMzMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjMzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMzMiIGJpbmRpbmc9InRuczpCaW5kaW5nMjMzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIzNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIzNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIzNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjM0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjM0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIzNCIgbmFtZT0iSW5wdXQyMzQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjM0IiBuYW1lPSJPdXRwdXQyMzQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIzNCIgdHlwZT0idG5zOlBvcnRUeXBlMjM0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjM0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIzNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMzQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIzNCIgYmluZGluZz0idG5zOkJpbmRpbmcyMzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjM1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjM1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjM1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIzNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMzUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjM1IiBuYW1lPSJJbnB1dDIzNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMzUiIG5hbWU9Ik91dHB1dDIzNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjM1IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMzUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjM1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIzNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjM1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIzNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjM2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIzNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMzYiIG5hbWU9IklucHV0MjM2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIzNiIgbmFtZT0iT3V0cHV0MjM2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMzYiIHR5cGU9InRuczpQb3J0VHlwZTIzNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMzYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjM2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMzYiIGJpbmRpbmc9InRuczpCaW5kaW5nMjM2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIzNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIzNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIzNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjM3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjM3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIzNyIgbmFtZT0iSW5wdXQyMzciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjM3IiBuYW1lPSJPdXRwdXQyMzciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIzNyIgdHlwZT0idG5zOlBvcnRUeXBlMjM3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjM3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIzNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMzciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIzNyIgYmluZGluZz0idG5zOkJpbmRpbmcyMzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjM4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjM4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjM4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIzOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMzgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjM4IiBuYW1lPSJJbnB1dDIzOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMzgiIG5hbWU9Ik91dHB1dDIzOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjM4IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMzgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjM4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIzOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjM4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIzOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjM5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIzOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMzkiIG5hbWU9IklucHV0MjM5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIzOSIgbmFtZT0iT3V0cHV0MjM5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMzkiIHR5cGU9InRuczpQb3J0VHlwZTIzOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMzkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjM5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMzkiIGJpbmRpbmc9InRuczpCaW5kaW5nMjM5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI0MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI0MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI0MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjQwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI0MCIgbmFtZT0iSW5wdXQyNDAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjQwIiBuYW1lPSJPdXRwdXQyNDAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI0MCIgdHlwZT0idG5zOlBvcnRUeXBlMjQwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI0MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNDAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI0MCIgYmluZGluZz0idG5zOkJpbmRpbmcyNDAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjQxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjQxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI0MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNDEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNDEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjQxIiBuYW1lPSJJbnB1dDI0MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNDEiIG5hbWU9Ik91dHB1dDI0MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjQxIiB0eXBlPSJ0bnM6UG9ydFR5cGUyNDEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNDEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjQxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI0MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjQxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI0MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI0MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNDIiIG5hbWU9IklucHV0MjQyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI0MiIgbmFtZT0iT3V0cHV0MjQyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNDIiIHR5cGU9InRuczpQb3J0VHlwZTI0MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNDIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjQyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNDIiIGJpbmRpbmc9InRuczpCaW5kaW5nMjQyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI0MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI0MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI0MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjQzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI0MyIgbmFtZT0iSW5wdXQyNDMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjQzIiBuYW1lPSJPdXRwdXQyNDMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI0MyIgdHlwZT0idG5zOlBvcnRUeXBlMjQzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI0MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNDMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI0MyIgYmluZGluZz0idG5zOkJpbmRpbmcyNDMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjQ0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjQ0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI0NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNDQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNDQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjQ0IiBuYW1lPSJJbnB1dDI0NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNDQiIG5hbWU9Ik91dHB1dDI0NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjQ0IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNDQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNDQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjQ0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI0NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjQ0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI0NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI0NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNDUiIG5hbWU9IklucHV0MjQ1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI0NSIgbmFtZT0iT3V0cHV0MjQ1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNDUiIHR5cGU9InRuczpQb3J0VHlwZTI0NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNDUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjQ1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNDUiIGJpbmRpbmc9InRuczpCaW5kaW5nMjQ1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI0NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI0NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI0NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjQ2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQ2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI0NiIgbmFtZT0iSW5wdXQyNDYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjQ2IiBuYW1lPSJPdXRwdXQyNDYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI0NiIgdHlwZT0idG5zOlBvcnRUeXBlMjQ2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQ2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI0NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNDYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI0NiIgYmluZGluZz0idG5zOkJpbmRpbmcyNDYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjQ3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjQ3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI0NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNDciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNDciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjQ3IiBuYW1lPSJJbnB1dDI0NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNDciIG5hbWU9Ik91dHB1dDI0NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjQ3IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNDciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNDciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjQ3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI0NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjQ3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI0NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI0OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNDgiIG5hbWU9IklucHV0MjQ4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI0OCIgbmFtZT0iT3V0cHV0MjQ4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNDgiIHR5cGU9InRuczpQb3J0VHlwZTI0OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNDgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjQ4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNDgiIGJpbmRpbmc9InRuczpCaW5kaW5nMjQ4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI0OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI0OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI0OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjQ5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQ5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI0OSIgbmFtZT0iSW5wdXQyNDkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjQ5IiBuYW1lPSJPdXRwdXQyNDkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI0OSIgdHlwZT0idG5zOlBvcnRUeXBlMjQ5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQ5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI0OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNDkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI0OSIgYmluZGluZz0idG5zOkJpbmRpbmcyNDkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjUwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjUwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjUwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI1MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjUwIiBuYW1lPSJJbnB1dDI1MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNTAiIG5hbWU9Ik91dHB1dDI1MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjUwIiB0eXBlPSJ0bnM6UG9ydFR5cGUyNTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjUwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI1MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjUwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI1MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjUxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI1MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNTEiIG5hbWU9IklucHV0MjUxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI1MSIgbmFtZT0iT3V0cHV0MjUxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNTEiIHR5cGU9InRuczpQb3J0VHlwZTI1MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjUxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNTEiIGJpbmRpbmc9InRuczpCaW5kaW5nMjUxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI1MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI1MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI1MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjUyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjUyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI1MiIgbmFtZT0iSW5wdXQyNTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjUyIiBuYW1lPSJPdXRwdXQyNTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI1MiIgdHlwZT0idG5zOlBvcnRUeXBlMjUyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjUyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI1MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI1MiIgYmluZGluZz0idG5zOkJpbmRpbmcyNTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjUzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjUzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjUzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI1MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjUzIiBuYW1lPSJJbnB1dDI1MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNTMiIG5hbWU9Ik91dHB1dDI1MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjUzIiB0eXBlPSJ0bnM6UG9ydFR5cGUyNTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjUzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI1MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjUzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI1MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjU0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI1NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNTQiIG5hbWU9IklucHV0MjU0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI1NCIgbmFtZT0iT3V0cHV0MjU0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNTQiIHR5cGU9InRuczpQb3J0VHlwZTI1NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjU0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNTQiIGJpbmRpbmc9InRuczpCaW5kaW5nMjU0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI1NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI1NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI1NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjU1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjU1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI1NSIgbmFtZT0iSW5wdXQyNTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjU1IiBuYW1lPSJPdXRwdXQyNTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI1NSIgdHlwZT0idG5zOlBvcnRUeXBlMjU1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjU1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI1NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI1NSIgYmluZGluZz0idG5zOkJpbmRpbmcyNTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjU2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjU2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjU2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI1NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjU2IiBuYW1lPSJJbnB1dDI1NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNTYiIG5hbWU9Ik91dHB1dDI1NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjU2IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjU2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI1NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjU2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI1NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjU3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI1NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNTciIG5hbWU9IklucHV0MjU3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI1NyIgbmFtZT0iT3V0cHV0MjU3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNTciIHR5cGU9InRuczpQb3J0VHlwZTI1NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjU3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNTciIGJpbmRpbmc9InRuczpCaW5kaW5nMjU3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI1OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI1OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI1OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjU4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjU4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI1OCIgbmFtZT0iSW5wdXQyNTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjU4IiBuYW1lPSJPdXRwdXQyNTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI1OCIgdHlwZT0idG5zOlBvcnRUeXBlMjU4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjU4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI1OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI1OCIgYmluZGluZz0idG5zOkJpbmRpbmcyNTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjU5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjU5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjU5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI1OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjU5IiBuYW1lPSJJbnB1dDI1OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNTkiIG5hbWU9Ik91dHB1dDI1OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjU5IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjU5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI1OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjU5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI1OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjYwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI2MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNjAiIG5hbWU9IklucHV0MjYwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI2MCIgbmFtZT0iT3V0cHV0MjYwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNjAiIHR5cGU9InRuczpQb3J0VHlwZTI2MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjYwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNjAiIGJpbmRpbmc9InRuczpCaW5kaW5nMjYwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI2MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI2MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI2MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjYxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjYxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI2MSIgbmFtZT0iSW5wdXQyNjEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjYxIiBuYW1lPSJPdXRwdXQyNjEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI2MSIgdHlwZT0idG5zOlBvcnRUeXBlMjYxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjYxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI2MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNjEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI2MSIgYmluZGluZz0idG5zOkJpbmRpbmcyNjEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjYyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjYyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjYyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI2MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNjIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjYyIiBuYW1lPSJJbnB1dDI2MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNjIiIG5hbWU9Ik91dHB1dDI2MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjYyIiB0eXBlPSJ0bnM6UG9ydFR5cGUyNjIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjYyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI2MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjYyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI2MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjYzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI2MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNjMiIG5hbWU9IklucHV0MjYzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI2MyIgbmFtZT0iT3V0cHV0MjYzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNjMiIHR5cGU9InRuczpQb3J0VHlwZTI2MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjYzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNjMiIGJpbmRpbmc9InRuczpCaW5kaW5nMjYzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI2NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI2NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI2NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjY0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjY0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI2NCIgbmFtZT0iSW5wdXQyNjQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjY0IiBuYW1lPSJPdXRwdXQyNjQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI2NCIgdHlwZT0idG5zOlBvcnRUeXBlMjY0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjY0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI2NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNjQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI2NCIgYmluZGluZz0idG5zOkJpbmRpbmcyNjQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjY1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjY1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjY1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI2NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNjUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjY1IiBuYW1lPSJJbnB1dDI2NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNjUiIG5hbWU9Ik91dHB1dDI2NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjY1IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNjUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjY1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI2NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjY1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI2NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjY2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI2NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNjYiIG5hbWU9IklucHV0MjY2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI2NiIgbmFtZT0iT3V0cHV0MjY2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNjYiIHR5cGU9InRuczpQb3J0VHlwZTI2NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjY2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNjYiIGJpbmRpbmc9InRuczpCaW5kaW5nMjY2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI2NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI2NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI2NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjY3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjY3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI2NyIgbmFtZT0iSW5wdXQyNjciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjY3IiBuYW1lPSJPdXRwdXQyNjciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI2NyIgdHlwZT0idG5zOlBvcnRUeXBlMjY3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjY3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI2NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNjciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI2NyIgYmluZGluZz0idG5zOkJpbmRpbmcyNjciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjY4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjY4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjY4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI2OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNjgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjY4IiBuYW1lPSJJbnB1dDI2OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNjgiIG5hbWU9Ik91dHB1dDI2OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjY4IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNjgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjY4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI2OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjY4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI2OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjY5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI2OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNjkiIG5hbWU9IklucHV0MjY5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI2OSIgbmFtZT0iT3V0cHV0MjY5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNjkiIHR5cGU9InRuczpQb3J0VHlwZTI2OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjY5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNjkiIGJpbmRpbmc9InRuczpCaW5kaW5nMjY5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI3MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI3MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI3MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjcwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjcwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI3MCIgbmFtZT0iSW5wdXQyNzAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjcwIiBuYW1lPSJPdXRwdXQyNzAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI3MCIgdHlwZT0idG5zOlBvcnRUeXBlMjcwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjcwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI3MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNzAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI3MCIgYmluZGluZz0idG5zOkJpbmRpbmcyNzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjcxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjcxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjcxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI3MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNzEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNzEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjcxIiBuYW1lPSJJbnB1dDI3MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNzEiIG5hbWU9Ik91dHB1dDI3MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjcxIiB0eXBlPSJ0bnM6UG9ydFR5cGUyNzEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNzEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjcxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI3MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjcxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI3MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjcyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI3MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNzIiIG5hbWU9IklucHV0MjcyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI3MiIgbmFtZT0iT3V0cHV0MjcyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNzIiIHR5cGU9InRuczpQb3J0VHlwZTI3MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNzIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjcyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNzIiIGJpbmRpbmc9InRuczpCaW5kaW5nMjcyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI3MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI3MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI3MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjczIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjczIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI3MyIgbmFtZT0iSW5wdXQyNzMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjczIiBuYW1lPSJPdXRwdXQyNzMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI3MyIgdHlwZT0idG5zOlBvcnRUeXBlMjczIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjczIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI3MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNzMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI3MyIgYmluZGluZz0idG5zOkJpbmRpbmcyNzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjc0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mjc0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjc0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI3NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNzQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNzQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjc0IiBuYW1lPSJJbnB1dDI3NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNzQiIG5hbWU9Ik91dHB1dDI3NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjc0IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNzQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNzQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjc0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI3NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mjc0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI3NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mjc1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI3NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNzUiIG5hbWU9IklucHV0Mjc1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI3NSIgbmFtZT0iT3V0cHV0Mjc1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNzUiIHR5cGU9InRuczpQb3J0VHlwZTI3NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNzUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjc1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNzUiIGJpbmRpbmc9InRuczpCaW5kaW5nMjc1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI3NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI3NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI3NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjc2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjc2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI3NiIgbmFtZT0iSW5wdXQyNzYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjc2IiBuYW1lPSJPdXRwdXQyNzYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI3NiIgdHlwZT0idG5zOlBvcnRUeXBlMjc2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjc2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI3NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNzYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI3NiIgYmluZGluZz0idG5zOkJpbmRpbmcyNzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjc3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mjc3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjc3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI3NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNzciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNzciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjc3IiBuYW1lPSJJbnB1dDI3NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNzciIG5hbWU9Ik91dHB1dDI3NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjc3IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNzciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNzciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjc3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI3NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mjc3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI3NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mjc4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI3OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNzgiIG5hbWU9IklucHV0Mjc4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI3OCIgbmFtZT0iT3V0cHV0Mjc4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNzgiIHR5cGU9InRuczpQb3J0VHlwZTI3OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNzgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjc4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNzgiIGJpbmRpbmc9InRuczpCaW5kaW5nMjc4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI3OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI3OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI3OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjc5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjc5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI3OSIgbmFtZT0iSW5wdXQyNzkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjc5IiBuYW1lPSJPdXRwdXQyNzkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI3OSIgdHlwZT0idG5zOlBvcnRUeXBlMjc5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjc5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI3OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNzkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI3OSIgYmluZGluZz0idG5zOkJpbmRpbmcyNzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjgwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjgwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjgwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI4MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyODAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjgwIiBuYW1lPSJJbnB1dDI4MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyODAiIG5hbWU9Ik91dHB1dDI4MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjgwIiB0eXBlPSJ0bnM6UG9ydFR5cGUyODAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjgwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI4MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjgwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI4MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyODEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyODEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyODEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjgxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI4MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyODEiIG5hbWU9IklucHV0MjgxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI4MSIgbmFtZT0iT3V0cHV0MjgxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyODEiIHR5cGU9InRuczpQb3J0VHlwZTI4MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yODEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjgxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyODEiIGJpbmRpbmc9InRuczpCaW5kaW5nMjgxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI4MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI4MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI4MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyODIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjgyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjgyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI4MiIgbmFtZT0iSW5wdXQyODIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjgyIiBuYW1lPSJPdXRwdXQyODIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI4MiIgdHlwZT0idG5zOlBvcnRUeXBlMjgyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjgyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI4MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyODIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI4MiIgYmluZGluZz0idG5zOkJpbmRpbmcyODIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjgzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjgzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjgzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI4MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyODMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjgzIiBuYW1lPSJJbnB1dDI4MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyODMiIG5hbWU9Ik91dHB1dDI4MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjgzIiB0eXBlPSJ0bnM6UG9ydFR5cGUyODMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjgzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI4MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjgzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI4MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyODQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyODQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyODQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mjg0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI4NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyODQiIG5hbWU9IklucHV0Mjg0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI4NCIgbmFtZT0iT3V0cHV0Mjg0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyODQiIHR5cGU9InRuczpQb3J0VHlwZTI4NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yODQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjg0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyODQiIGJpbmRpbmc9InRuczpCaW5kaW5nMjg0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI4NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI4NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI4NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyODUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjg1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjg1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI4NSIgbmFtZT0iSW5wdXQyODUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjg1IiBuYW1lPSJPdXRwdXQyODUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI4NSIgdHlwZT0idG5zOlBvcnRUeXBlMjg1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjg1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI4NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyODUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI4NSIgYmluZGluZz0idG5zOkJpbmRpbmcyODUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjg2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mjg2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjg2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI4NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyODYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjg2IiBuYW1lPSJJbnB1dDI4NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyODYiIG5hbWU9Ik91dHB1dDI4NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjg2IiB0eXBlPSJ0bnM6UG9ydFR5cGUyODYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjg2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI4NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mjg2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI4NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyODciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyODciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyODciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mjg3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI4NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyODciIG5hbWU9IklucHV0Mjg3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI4NyIgbmFtZT0iT3V0cHV0Mjg3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyODciIHR5cGU9InRuczpQb3J0VHlwZTI4NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yODciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjg3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyODciIGJpbmRpbmc9InRuczpCaW5kaW5nMjg3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI4OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI4OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI4OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyODgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjg4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjg4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI4OCIgbmFtZT0iSW5wdXQyODgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjg4IiBuYW1lPSJPdXRwdXQyODgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI4OCIgdHlwZT0idG5zOlBvcnRUeXBlMjg4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjg4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI4OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyODgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI4OCIgYmluZGluZz0idG5zOkJpbmRpbmcyODgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjg5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mjg5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjg5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI4OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyODkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjg5IiBuYW1lPSJJbnB1dDI4OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyODkiIG5hbWU9Ik91dHB1dDI4OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjg5IiB0eXBlPSJ0bnM6UG9ydFR5cGUyODkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjg5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI4OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mjg5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI4OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyOTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyOTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyOTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjkwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI5MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyOTAiIG5hbWU9IklucHV0MjkwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI5MCIgbmFtZT0iT3V0cHV0MjkwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyOTAiIHR5cGU9InRuczpQb3J0VHlwZTI5MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yOTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjkwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyOTAiIGJpbmRpbmc9InRuczpCaW5kaW5nMjkwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI5MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI5MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI5MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyOTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjkxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjkxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI5MSIgbmFtZT0iSW5wdXQyOTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjkxIiBuYW1lPSJPdXRwdXQyOTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI5MSIgdHlwZT0idG5zOlBvcnRUeXBlMjkxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjkxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI5MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyOTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI5MSIgYmluZGluZz0idG5zOkJpbmRpbmcyOTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjkyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjkyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjkyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI5MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyOTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjkyIiBuYW1lPSJJbnB1dDI5MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyOTIiIG5hbWU9Ik91dHB1dDI5MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjkyIiB0eXBlPSJ0bnM6UG9ydFR5cGUyOTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjkyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI5MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjkyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI5MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyOTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyOTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyOTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjkzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI5MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyOTMiIG5hbWU9IklucHV0MjkzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI5MyIgbmFtZT0iT3V0cHV0MjkzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyOTMiIHR5cGU9InRuczpQb3J0VHlwZTI5MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yOTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjkzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyOTMiIGJpbmRpbmc9InRuczpCaW5kaW5nMjkzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI5NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI5NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI5NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyOTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjk0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjk0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI5NCIgbmFtZT0iSW5wdXQyOTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjk0IiBuYW1lPSJPdXRwdXQyOTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI5NCIgdHlwZT0idG5zOlBvcnRUeXBlMjk0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjk0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI5NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyOTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI5NCIgYmluZGluZz0idG5zOkJpbmRpbmcyOTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjk1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mjk1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjk1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI5NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyOTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjk1IiBuYW1lPSJJbnB1dDI5NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyOTUiIG5hbWU9Ik91dHB1dDI5NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjk1IiB0eXBlPSJ0bnM6UG9ydFR5cGUyOTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjk1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI5NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mjk1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI5NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyOTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyOTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyOTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mjk2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI5NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyOTYiIG5hbWU9IklucHV0Mjk2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI5NiIgbmFtZT0iT3V0cHV0Mjk2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyOTYiIHR5cGU9InRuczpQb3J0VHlwZTI5NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yOTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjk2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyOTYiIGJpbmRpbmc9InRuczpCaW5kaW5nMjk2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI5NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI5NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI5NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyOTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjk3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjk3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI5NyIgbmFtZT0iSW5wdXQyOTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjk3IiBuYW1lPSJPdXRwdXQyOTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI5NyIgdHlwZT0idG5zOlBvcnRUeXBlMjk3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjk3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI5NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyOTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI5NyIgYmluZGluZz0idG5zOkJpbmRpbmcyOTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjk4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mjk4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjk4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI5OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyOTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjk4IiBuYW1lPSJJbnB1dDI5OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyOTgiIG5hbWU9Ik91dHB1dDI5OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjk4IiB0eXBlPSJ0bnM6UG9ydFR5cGUyOTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjk4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI5OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mjk4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI5OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyOTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyOTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyOTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mjk5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI5OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyOTkiIG5hbWU9IklucHV0Mjk5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI5OSIgbmFtZT0iT3V0cHV0Mjk5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyOTkiIHR5cGU9InRuczpQb3J0VHlwZTI5OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yOTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjk5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyOTkiIGJpbmRpbmc9InRuczpCaW5kaW5nMjk5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMwMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMwMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMwMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzAwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzAwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMwMCIgbmFtZT0iSW5wdXQzMDAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzAwIiBuYW1lPSJPdXRwdXQzMDAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMwMCIgdHlwZT0idG5zOlBvcnRUeXBlMzAwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzAwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMwMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMDAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMwMCIgYmluZGluZz0idG5zOkJpbmRpbmczMDAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzAxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzAxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzAxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMwMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMDEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMDEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzAxIiBuYW1lPSJJbnB1dDMwMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMDEiIG5hbWU9Ik91dHB1dDMwMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzAxIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMDEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMDEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzAxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMwMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzAxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMwMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzAyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMwMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMDIiIG5hbWU9IklucHV0MzAyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMwMiIgbmFtZT0iT3V0cHV0MzAyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMDIiIHR5cGU9InRuczpQb3J0VHlwZTMwMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMDIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzAyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMDIiIGJpbmRpbmc9InRuczpCaW5kaW5nMzAyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMwMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMwMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMwMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzAzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzAzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMwMyIgbmFtZT0iSW5wdXQzMDMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzAzIiBuYW1lPSJPdXRwdXQzMDMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMwMyIgdHlwZT0idG5zOlBvcnRUeXBlMzAzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzAzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMwMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMDMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMwMyIgYmluZGluZz0idG5zOkJpbmRpbmczMDMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzA0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzA0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzA0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMwNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMDQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMDQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzA0IiBuYW1lPSJJbnB1dDMwNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMDQiIG5hbWU9Ik91dHB1dDMwNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzA0IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMDQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMDQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzA0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMwNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzA0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMwNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzA1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMwNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMDUiIG5hbWU9IklucHV0MzA1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMwNSIgbmFtZT0iT3V0cHV0MzA1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMDUiIHR5cGU9InRuczpQb3J0VHlwZTMwNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMDUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzA1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMDUiIGJpbmRpbmc9InRuczpCaW5kaW5nMzA1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMwNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMwNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMwNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzA2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzA2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMwNiIgbmFtZT0iSW5wdXQzMDYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzA2IiBuYW1lPSJPdXRwdXQzMDYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMwNiIgdHlwZT0idG5zOlBvcnRUeXBlMzA2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzA2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMwNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMDYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMwNiIgYmluZGluZz0idG5zOkJpbmRpbmczMDYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzA3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzA3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzA3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMwNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMDciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMDciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzA3IiBuYW1lPSJJbnB1dDMwNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMDciIG5hbWU9Ik91dHB1dDMwNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzA3IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMDciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMDciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzA3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMwNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzA3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMwNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzA4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMwOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMDgiIG5hbWU9IklucHV0MzA4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMwOCIgbmFtZT0iT3V0cHV0MzA4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMDgiIHR5cGU9InRuczpQb3J0VHlwZTMwOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMDgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzA4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMDgiIGJpbmRpbmc9InRuczpCaW5kaW5nMzA4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMwOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMwOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMwOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzA5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzA5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMwOSIgbmFtZT0iSW5wdXQzMDkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzA5IiBuYW1lPSJPdXRwdXQzMDkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMwOSIgdHlwZT0idG5zOlBvcnRUeXBlMzA5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzA5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMwOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMDkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMwOSIgYmluZGluZz0idG5zOkJpbmRpbmczMDkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzEwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzEwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzEwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMxMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzEwIiBuYW1lPSJJbnB1dDMxMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMTAiIG5hbWU9Ik91dHB1dDMxMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzEwIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzEwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMxMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzEwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMxMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzExIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMxMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMTEiIG5hbWU9IklucHV0MzExIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMxMSIgbmFtZT0iT3V0cHV0MzExIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMTEiIHR5cGU9InRuczpQb3J0VHlwZTMxMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzExIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMTEiIGJpbmRpbmc9InRuczpCaW5kaW5nMzExIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMxMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMxMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMxMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzEyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzEyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMxMiIgbmFtZT0iSW5wdXQzMTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzEyIiBuYW1lPSJPdXRwdXQzMTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMxMiIgdHlwZT0idG5zOlBvcnRUeXBlMzEyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzEyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMxMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMxMiIgYmluZGluZz0idG5zOkJpbmRpbmczMTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzEzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzEzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzEzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMxMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzEzIiBuYW1lPSJJbnB1dDMxMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMTMiIG5hbWU9Ik91dHB1dDMxMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzEzIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzEzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMxMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzEzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMxMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzE0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMxNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMTQiIG5hbWU9IklucHV0MzE0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMxNCIgbmFtZT0iT3V0cHV0MzE0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMTQiIHR5cGU9InRuczpQb3J0VHlwZTMxNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzE0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMTQiIGJpbmRpbmc9InRuczpCaW5kaW5nMzE0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMxNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMxNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMxNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzE1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzE1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMxNSIgbmFtZT0iSW5wdXQzMTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzE1IiBuYW1lPSJPdXRwdXQzMTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMxNSIgdHlwZT0idG5zOlBvcnRUeXBlMzE1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzE1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMxNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMxNSIgYmluZGluZz0idG5zOkJpbmRpbmczMTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzE2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzE2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzE2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMxNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzE2IiBuYW1lPSJJbnB1dDMxNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMTYiIG5hbWU9Ik91dHB1dDMxNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzE2IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzE2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMxNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzE2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMxNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzE3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMxNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMTciIG5hbWU9IklucHV0MzE3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMxNyIgbmFtZT0iT3V0cHV0MzE3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMTciIHR5cGU9InRuczpQb3J0VHlwZTMxNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzE3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMTciIGJpbmRpbmc9InRuczpCaW5kaW5nMzE3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMxOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMxOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMxOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzE4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzE4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMxOCIgbmFtZT0iSW5wdXQzMTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzE4IiBuYW1lPSJPdXRwdXQzMTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMxOCIgdHlwZT0idG5zOlBvcnRUeXBlMzE4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzE4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMxOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMxOCIgYmluZGluZz0idG5zOkJpbmRpbmczMTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzE5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzE5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzE5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMxOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzE5IiBuYW1lPSJJbnB1dDMxOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMTkiIG5hbWU9Ik91dHB1dDMxOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzE5IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzE5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMxOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzE5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMxOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzIwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMyMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMjAiIG5hbWU9IklucHV0MzIwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMyMCIgbmFtZT0iT3V0cHV0MzIwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMjAiIHR5cGU9InRuczpQb3J0VHlwZTMyMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzIwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMjAiIGJpbmRpbmc9InRuczpCaW5kaW5nMzIwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMyMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMyMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMyMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzIxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzIxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMyMSIgbmFtZT0iSW5wdXQzMjEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzIxIiBuYW1lPSJPdXRwdXQzMjEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMyMSIgdHlwZT0idG5zOlBvcnRUeXBlMzIxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzIxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMyMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMjEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMyMSIgYmluZGluZz0idG5zOkJpbmRpbmczMjEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzIyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzIyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzIyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMyMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMjIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzIyIiBuYW1lPSJJbnB1dDMyMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMjIiIG5hbWU9Ik91dHB1dDMyMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzIyIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMjIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzIyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMyMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzIyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMyMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzIzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMyMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMjMiIG5hbWU9IklucHV0MzIzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMyMyIgbmFtZT0iT3V0cHV0MzIzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMjMiIHR5cGU9InRuczpQb3J0VHlwZTMyMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzIzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMjMiIGJpbmRpbmc9InRuczpCaW5kaW5nMzIzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMyNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMyNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMyNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzI0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzI0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMyNCIgbmFtZT0iSW5wdXQzMjQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzI0IiBuYW1lPSJPdXRwdXQzMjQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMyNCIgdHlwZT0idG5zOlBvcnRUeXBlMzI0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzI0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMyNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMjQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMyNCIgYmluZGluZz0idG5zOkJpbmRpbmczMjQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzI1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzI1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzI1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMyNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMjUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzI1IiBuYW1lPSJJbnB1dDMyNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMjUiIG5hbWU9Ik91dHB1dDMyNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzI1IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMjUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzI1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMyNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzI1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMyNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzI2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMyNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMjYiIG5hbWU9IklucHV0MzI2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMyNiIgbmFtZT0iT3V0cHV0MzI2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMjYiIHR5cGU9InRuczpQb3J0VHlwZTMyNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzI2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMjYiIGJpbmRpbmc9InRuczpCaW5kaW5nMzI2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMyNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMyNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMyNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzI3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzI3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMyNyIgbmFtZT0iSW5wdXQzMjciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzI3IiBuYW1lPSJPdXRwdXQzMjciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMyNyIgdHlwZT0idG5zOlBvcnRUeXBlMzI3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzI3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMyNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMjciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMyNyIgYmluZGluZz0idG5zOkJpbmRpbmczMjciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzI4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzI4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzI4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMyOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMjgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzI4IiBuYW1lPSJJbnB1dDMyOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMjgiIG5hbWU9Ik91dHB1dDMyOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzI4IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMjgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzI4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMyOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzI4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMyOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzI5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMyOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMjkiIG5hbWU9IklucHV0MzI5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMyOSIgbmFtZT0iT3V0cHV0MzI5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMjkiIHR5cGU9InRuczpQb3J0VHlwZTMyOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzI5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMjkiIGJpbmRpbmc9InRuczpCaW5kaW5nMzI5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMzMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMzMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMzMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzMwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzMwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMzMCIgbmFtZT0iSW5wdXQzMzAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzMwIiBuYW1lPSJPdXRwdXQzMzAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMzMCIgdHlwZT0idG5zOlBvcnRUeXBlMzMwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzMwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMzMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMzAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMzMCIgYmluZGluZz0idG5zOkJpbmRpbmczMzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzMxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzMxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzMxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMzMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMzEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMzEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzMxIiBuYW1lPSJJbnB1dDMzMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMzEiIG5hbWU9Ik91dHB1dDMzMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzMxIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMzEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMzEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzMxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMzMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzMxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMzMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzMyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMzMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMzIiIG5hbWU9IklucHV0MzMyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMzMiIgbmFtZT0iT3V0cHV0MzMyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMzIiIHR5cGU9InRuczpQb3J0VHlwZTMzMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMzIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzMyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMzIiIGJpbmRpbmc9InRuczpCaW5kaW5nMzMyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMzMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMzMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMzMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzMzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzMzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMzMyIgbmFtZT0iSW5wdXQzMzMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzMzIiBuYW1lPSJPdXRwdXQzMzMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMzMyIgdHlwZT0idG5zOlBvcnRUeXBlMzMzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzMzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMzMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMzMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMzMyIgYmluZGluZz0idG5zOkJpbmRpbmczMzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzM0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzM0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzM0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMzNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMzQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMzQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzM0IiBuYW1lPSJJbnB1dDMzNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMzQiIG5hbWU9Ik91dHB1dDMzNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzM0IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMzQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMzQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzM0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMzNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzM0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMzNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzM1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMzNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMzUiIG5hbWU9IklucHV0MzM1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMzNSIgbmFtZT0iT3V0cHV0MzM1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMzUiIHR5cGU9InRuczpQb3J0VHlwZTMzNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMzUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzM1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMzUiIGJpbmRpbmc9InRuczpCaW5kaW5nMzM1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMzNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMzNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMzNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzM2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzM2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMzNiIgbmFtZT0iSW5wdXQzMzYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzM2IiBuYW1lPSJPdXRwdXQzMzYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMzNiIgdHlwZT0idG5zOlBvcnRUeXBlMzM2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzM2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMzNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMzYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMzNiIgYmluZGluZz0idG5zOkJpbmRpbmczMzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzM3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzM3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzM3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMzNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMzciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMzciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzM3IiBuYW1lPSJJbnB1dDMzNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMzciIG5hbWU9Ik91dHB1dDMzNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzM3IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMzciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMzciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzM3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMzNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzM3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMzNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzM4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMzOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMzgiIG5hbWU9IklucHV0MzM4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMzOCIgbmFtZT0iT3V0cHV0MzM4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMzgiIHR5cGU9InRuczpQb3J0VHlwZTMzOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMzgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzM4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMzgiIGJpbmRpbmc9InRuczpCaW5kaW5nMzM4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMzOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMzOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMzOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzM5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzM5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMzOSIgbmFtZT0iSW5wdXQzMzkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzM5IiBuYW1lPSJPdXRwdXQzMzkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMzOSIgdHlwZT0idG5zOlBvcnRUeXBlMzM5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzM5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMzOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMzkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMzOSIgYmluZGluZz0idG5zOkJpbmRpbmczMzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzQwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzQwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM0MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNDAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzQwIiBuYW1lPSJJbnB1dDM0MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNDAiIG5hbWU9Ik91dHB1dDM0MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzQwIiB0eXBlPSJ0bnM6UG9ydFR5cGUzNDAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzQwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM0MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzQwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM0MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM0MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNDEiIG5hbWU9IklucHV0MzQxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM0MSIgbmFtZT0iT3V0cHV0MzQxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNDEiIHR5cGU9InRuczpQb3J0VHlwZTM0MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNDEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzQxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNDEiIGJpbmRpbmc9InRuczpCaW5kaW5nMzQxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM0MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM0MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM0MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzQyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM0MiIgbmFtZT0iSW5wdXQzNDIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzQyIiBuYW1lPSJPdXRwdXQzNDIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM0MiIgdHlwZT0idG5zOlBvcnRUeXBlMzQyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM0MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNDIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM0MiIgYmluZGluZz0idG5zOkJpbmRpbmczNDIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzQzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzQzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM0MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNDMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzQzIiBuYW1lPSJJbnB1dDM0MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNDMiIG5hbWU9Ik91dHB1dDM0MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzQzIiB0eXBlPSJ0bnM6UG9ydFR5cGUzNDMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzQzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM0MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzQzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM0MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM0NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNDQiIG5hbWU9IklucHV0MzQ0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM0NCIgbmFtZT0iT3V0cHV0MzQ0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNDQiIHR5cGU9InRuczpQb3J0VHlwZTM0NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNDQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzQ0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNDQiIGJpbmRpbmc9InRuczpCaW5kaW5nMzQ0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM0NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM0NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM0NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzQ1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQ1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM0NSIgbmFtZT0iSW5wdXQzNDUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzQ1IiBuYW1lPSJPdXRwdXQzNDUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM0NSIgdHlwZT0idG5zOlBvcnRUeXBlMzQ1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQ1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM0NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNDUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM0NSIgYmluZGluZz0idG5zOkJpbmRpbmczNDUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzQ2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzQ2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM0NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNDYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzQ2IiBuYW1lPSJJbnB1dDM0NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNDYiIG5hbWU9Ik91dHB1dDM0NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzQ2IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNDYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzQ2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM0NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzQ2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM0NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM0NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNDciIG5hbWU9IklucHV0MzQ3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM0NyIgbmFtZT0iT3V0cHV0MzQ3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNDciIHR5cGU9InRuczpQb3J0VHlwZTM0NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNDciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzQ3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNDciIGJpbmRpbmc9InRuczpCaW5kaW5nMzQ3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM0OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM0OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM0OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzQ4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQ4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM0OCIgbmFtZT0iSW5wdXQzNDgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzQ4IiBuYW1lPSJPdXRwdXQzNDgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM0OCIgdHlwZT0idG5zOlBvcnRUeXBlMzQ4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQ4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM0OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNDgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM0OCIgYmluZGluZz0idG5zOkJpbmRpbmczNDgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzQ5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzQ5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM0OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNDkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzQ5IiBuYW1lPSJJbnB1dDM0OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNDkiIG5hbWU9Ik91dHB1dDM0OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzQ5IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNDkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzQ5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM0OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzQ5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM0OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzUwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM1MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNTAiIG5hbWU9IklucHV0MzUwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM1MCIgbmFtZT0iT3V0cHV0MzUwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNTAiIHR5cGU9InRuczpQb3J0VHlwZTM1MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzUwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNTAiIGJpbmRpbmc9InRuczpCaW5kaW5nMzUwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM1MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM1MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM1MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzUxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzUxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM1MSIgbmFtZT0iSW5wdXQzNTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzUxIiBuYW1lPSJPdXRwdXQzNTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM1MSIgdHlwZT0idG5zOlBvcnRUeXBlMzUxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzUxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM1MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM1MSIgYmluZGluZz0idG5zOkJpbmRpbmczNTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzUyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzUyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzUyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM1MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzUyIiBuYW1lPSJJbnB1dDM1MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNTIiIG5hbWU9Ik91dHB1dDM1MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzUyIiB0eXBlPSJ0bnM6UG9ydFR5cGUzNTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzUyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM1MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzUyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM1MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzUzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM1MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNTMiIG5hbWU9IklucHV0MzUzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM1MyIgbmFtZT0iT3V0cHV0MzUzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNTMiIHR5cGU9InRuczpQb3J0VHlwZTM1MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzUzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNTMiIGJpbmRpbmc9InRuczpCaW5kaW5nMzUzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM1NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM1NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM1NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzU0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzU0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM1NCIgbmFtZT0iSW5wdXQzNTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzU0IiBuYW1lPSJPdXRwdXQzNTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM1NCIgdHlwZT0idG5zOlBvcnRUeXBlMzU0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzU0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM1NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM1NCIgYmluZGluZz0idG5zOkJpbmRpbmczNTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzU1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzU1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzU1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM1NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzU1IiBuYW1lPSJJbnB1dDM1NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNTUiIG5hbWU9Ik91dHB1dDM1NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzU1IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzU1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM1NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzU1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM1NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzU2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM1NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNTYiIG5hbWU9IklucHV0MzU2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM1NiIgbmFtZT0iT3V0cHV0MzU2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNTYiIHR5cGU9InRuczpQb3J0VHlwZTM1NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzU2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNTYiIGJpbmRpbmc9InRuczpCaW5kaW5nMzU2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM1NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM1NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM1NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzU3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzU3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM1NyIgbmFtZT0iSW5wdXQzNTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzU3IiBuYW1lPSJPdXRwdXQzNTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM1NyIgdHlwZT0idG5zOlBvcnRUeXBlMzU3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzU3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM1NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM1NyIgYmluZGluZz0idG5zOkJpbmRpbmczNTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzU4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzU4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzU4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM1OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzU4IiBuYW1lPSJJbnB1dDM1OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNTgiIG5hbWU9Ik91dHB1dDM1OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzU4IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzU4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM1OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzU4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM1OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzU5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM1OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNTkiIG5hbWU9IklucHV0MzU5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM1OSIgbmFtZT0iT3V0cHV0MzU5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNTkiIHR5cGU9InRuczpQb3J0VHlwZTM1OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzU5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNTkiIGJpbmRpbmc9InRuczpCaW5kaW5nMzU5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM2MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM2MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM2MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzYwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzYwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM2MCIgbmFtZT0iSW5wdXQzNjAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzYwIiBuYW1lPSJPdXRwdXQzNjAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM2MCIgdHlwZT0idG5zOlBvcnRUeXBlMzYwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzYwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM2MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNjAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM2MCIgYmluZGluZz0idG5zOkJpbmRpbmczNjAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzYxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzYxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzYxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM2MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNjEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzYxIiBuYW1lPSJJbnB1dDM2MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNjEiIG5hbWU9Ik91dHB1dDM2MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzYxIiB0eXBlPSJ0bnM6UG9ydFR5cGUzNjEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzYxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM2MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzYxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM2MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzYyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM2MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNjIiIG5hbWU9IklucHV0MzYyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM2MiIgbmFtZT0iT3V0cHV0MzYyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNjIiIHR5cGU9InRuczpQb3J0VHlwZTM2MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzYyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNjIiIGJpbmRpbmc9InRuczpCaW5kaW5nMzYyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM2MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM2MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM2MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzYzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzYzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM2MyIgbmFtZT0iSW5wdXQzNjMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzYzIiBuYW1lPSJPdXRwdXQzNjMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM2MyIgdHlwZT0idG5zOlBvcnRUeXBlMzYzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzYzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM2MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNjMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM2MyIgYmluZGluZz0idG5zOkJpbmRpbmczNjMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzY0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzY0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzY0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM2NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNjQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzY0IiBuYW1lPSJJbnB1dDM2NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNjQiIG5hbWU9Ik91dHB1dDM2NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzY0IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNjQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzY0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM2NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzY0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM2NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzY1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM2NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNjUiIG5hbWU9IklucHV0MzY1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM2NSIgbmFtZT0iT3V0cHV0MzY1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNjUiIHR5cGU9InRuczpQb3J0VHlwZTM2NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzY1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNjUiIGJpbmRpbmc9InRuczpCaW5kaW5nMzY1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM2NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM2NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM2NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzY2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzY2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM2NiIgbmFtZT0iSW5wdXQzNjYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzY2IiBuYW1lPSJPdXRwdXQzNjYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM2NiIgdHlwZT0idG5zOlBvcnRUeXBlMzY2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzY2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM2NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNjYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM2NiIgYmluZGluZz0idG5zOkJpbmRpbmczNjYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzY3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzY3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzY3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM2NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNjciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzY3IiBuYW1lPSJJbnB1dDM2NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNjciIG5hbWU9Ik91dHB1dDM2NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzY3IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNjciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzY3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM2NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzY3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM2NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzY4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM2OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNjgiIG5hbWU9IklucHV0MzY4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM2OCIgbmFtZT0iT3V0cHV0MzY4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNjgiIHR5cGU9InRuczpQb3J0VHlwZTM2OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzY4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNjgiIGJpbmRpbmc9InRuczpCaW5kaW5nMzY4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM2OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM2OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM2OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzY5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzY5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM2OSIgbmFtZT0iSW5wdXQzNjkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzY5IiBuYW1lPSJPdXRwdXQzNjkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM2OSIgdHlwZT0idG5zOlBvcnRUeXBlMzY5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzY5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM2OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNjkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM2OSIgYmluZGluZz0idG5zOkJpbmRpbmczNjkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzcwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzcwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzcwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM3MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNzAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzcwIiBuYW1lPSJJbnB1dDM3MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNzAiIG5hbWU9Ik91dHB1dDM3MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzcwIiB0eXBlPSJ0bnM6UG9ydFR5cGUzNzAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzcwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM3MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzcwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM3MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzcxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM3MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNzEiIG5hbWU9IklucHV0MzcxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM3MSIgbmFtZT0iT3V0cHV0MzcxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNzEiIHR5cGU9InRuczpQb3J0VHlwZTM3MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNzEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzcxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNzEiIGJpbmRpbmc9InRuczpCaW5kaW5nMzcxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM3MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM3MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM3MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzcyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzcyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM3MiIgbmFtZT0iSW5wdXQzNzIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzcyIiBuYW1lPSJPdXRwdXQzNzIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM3MiIgdHlwZT0idG5zOlBvcnRUeXBlMzcyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzcyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM3MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNzIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM3MiIgYmluZGluZz0idG5zOkJpbmRpbmczNzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzczIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzczIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzczIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM3MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNzMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzczIiBuYW1lPSJJbnB1dDM3MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNzMiIG5hbWU9Ik91dHB1dDM3MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzczIiB0eXBlPSJ0bnM6UG9ydFR5cGUzNzMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzczIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM3MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzczIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM3MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mzc0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM3NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNzQiIG5hbWU9IklucHV0Mzc0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM3NCIgbmFtZT0iT3V0cHV0Mzc0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNzQiIHR5cGU9InRuczpQb3J0VHlwZTM3NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNzQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzc0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNzQiIGJpbmRpbmc9InRuczpCaW5kaW5nMzc0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM3NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM3NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM3NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzc1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzc1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM3NSIgbmFtZT0iSW5wdXQzNzUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzc1IiBuYW1lPSJPdXRwdXQzNzUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM3NSIgdHlwZT0idG5zOlBvcnRUeXBlMzc1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzc1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM3NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNzUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM3NSIgYmluZGluZz0idG5zOkJpbmRpbmczNzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzc2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mzc2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzc2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM3NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNzYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzc2IiBuYW1lPSJJbnB1dDM3NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNzYiIG5hbWU9Ik91dHB1dDM3NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzc2IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNzYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzc2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM3NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mzc2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM3NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mzc3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM3NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNzciIG5hbWU9IklucHV0Mzc3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM3NyIgbmFtZT0iT3V0cHV0Mzc3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNzciIHR5cGU9InRuczpQb3J0VHlwZTM3NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNzciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzc3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNzciIGJpbmRpbmc9InRuczpCaW5kaW5nMzc3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM3OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM3OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM3OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzc4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzc4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM3OCIgbmFtZT0iSW5wdXQzNzgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzc4IiBuYW1lPSJPdXRwdXQzNzgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM3OCIgdHlwZT0idG5zOlBvcnRUeXBlMzc4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzc4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM3OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNzgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM3OCIgYmluZGluZz0idG5zOkJpbmRpbmczNzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzc5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mzc5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzc5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM3OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNzkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzc5IiBuYW1lPSJJbnB1dDM3OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNzkiIG5hbWU9Ik91dHB1dDM3OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzc5IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNzkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzc5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM3OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mzc5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM3OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzODAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzODAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzODAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzgwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM4MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzODAiIG5hbWU9IklucHV0MzgwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM4MCIgbmFtZT0iT3V0cHV0MzgwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczODAiIHR5cGU9InRuczpQb3J0VHlwZTM4MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zODAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzgwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzODAiIGJpbmRpbmc9InRuczpCaW5kaW5nMzgwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM4MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM4MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM4MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzODEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzgxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzgxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM4MSIgbmFtZT0iSW5wdXQzODEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzgxIiBuYW1lPSJPdXRwdXQzODEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM4MSIgdHlwZT0idG5zOlBvcnRUeXBlMzgxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzgxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM4MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzODEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM4MSIgYmluZGluZz0idG5zOkJpbmRpbmczODEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzgyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzgyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzgyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM4MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzODIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzgyIiBuYW1lPSJJbnB1dDM4MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzODIiIG5hbWU9Ik91dHB1dDM4MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzgyIiB0eXBlPSJ0bnM6UG9ydFR5cGUzODIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzgyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM4MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzgyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM4MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzODMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzODMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzODMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzgzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM4MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzODMiIG5hbWU9IklucHV0MzgzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM4MyIgbmFtZT0iT3V0cHV0MzgzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczODMiIHR5cGU9InRuczpQb3J0VHlwZTM4MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zODMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzgzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzODMiIGJpbmRpbmc9InRuczpCaW5kaW5nMzgzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM4NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM4NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM4NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzODQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzg0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzg0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM4NCIgbmFtZT0iSW5wdXQzODQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzg0IiBuYW1lPSJPdXRwdXQzODQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM4NCIgdHlwZT0idG5zOlBvcnRUeXBlMzg0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzg0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM4NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzODQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM4NCIgYmluZGluZz0idG5zOkJpbmRpbmczODQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzg1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mzg1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzg1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM4NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzODUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzg1IiBuYW1lPSJJbnB1dDM4NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzODUiIG5hbWU9Ik91dHB1dDM4NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzg1IiB0eXBlPSJ0bnM6UG9ydFR5cGUzODUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzg1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM4NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mzg1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM4NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzODYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzODYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzODYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mzg2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM4NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzODYiIG5hbWU9IklucHV0Mzg2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM4NiIgbmFtZT0iT3V0cHV0Mzg2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczODYiIHR5cGU9InRuczpQb3J0VHlwZTM4NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zODYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzg2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzODYiIGJpbmRpbmc9InRuczpCaW5kaW5nMzg2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM4NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM4NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM4NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzODciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzg3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzg3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM4NyIgbmFtZT0iSW5wdXQzODciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzg3IiBuYW1lPSJPdXRwdXQzODciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM4NyIgdHlwZT0idG5zOlBvcnRUeXBlMzg3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzg3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM4NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzODciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM4NyIgYmluZGluZz0idG5zOkJpbmRpbmczODciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzg4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mzg4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzg4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM4OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzODgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzg4IiBuYW1lPSJJbnB1dDM4OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzODgiIG5hbWU9Ik91dHB1dDM4OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzg4IiB0eXBlPSJ0bnM6UG9ydFR5cGUzODgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzg4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM4OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mzg4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM4OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzODkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzODkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzODkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mzg5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM4OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzODkiIG5hbWU9IklucHV0Mzg5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM4OSIgbmFtZT0iT3V0cHV0Mzg5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczODkiIHR5cGU9InRuczpQb3J0VHlwZTM4OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zODkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzg5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzODkiIGJpbmRpbmc9InRuczpCaW5kaW5nMzg5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM5MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM5MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM5MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzOTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzkwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzkwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM5MCIgbmFtZT0iSW5wdXQzOTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzkwIiBuYW1lPSJPdXRwdXQzOTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM5MCIgdHlwZT0idG5zOlBvcnRUeXBlMzkwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzkwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM5MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzOTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM5MCIgYmluZGluZz0idG5zOkJpbmRpbmczOTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzkxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzkxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzkxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM5MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzOTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzkxIiBuYW1lPSJJbnB1dDM5MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzOTEiIG5hbWU9Ik91dHB1dDM5MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzkxIiB0eXBlPSJ0bnM6UG9ydFR5cGUzOTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzkxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM5MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzkxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM5MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzOTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzOTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzOTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzkyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM5MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzOTIiIG5hbWU9IklucHV0MzkyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM5MiIgbmFtZT0iT3V0cHV0MzkyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczOTIiIHR5cGU9InRuczpQb3J0VHlwZTM5MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zOTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzkyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzOTIiIGJpbmRpbmc9InRuczpCaW5kaW5nMzkyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM5MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM5MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM5MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzOTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzkzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzkzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM5MyIgbmFtZT0iSW5wdXQzOTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzkzIiBuYW1lPSJPdXRwdXQzOTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM5MyIgdHlwZT0idG5zOlBvcnRUeXBlMzkzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzkzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM5MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzOTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM5MyIgYmluZGluZz0idG5zOkJpbmRpbmczOTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzk0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mzk0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzk0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM5NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzOTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzk0IiBuYW1lPSJJbnB1dDM5NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzOTQiIG5hbWU9Ik91dHB1dDM5NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzk0IiB0eXBlPSJ0bnM6UG9ydFR5cGUzOTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzk0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM5NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mzk0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM5NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzOTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzOTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzOTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mzk1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM5NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzOTUiIG5hbWU9IklucHV0Mzk1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM5NSIgbmFtZT0iT3V0cHV0Mzk1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczOTUiIHR5cGU9InRuczpQb3J0VHlwZTM5NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zOTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzk1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzOTUiIGJpbmRpbmc9InRuczpCaW5kaW5nMzk1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM5NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM5NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM5NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzOTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzk2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzk2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM5NiIgbmFtZT0iSW5wdXQzOTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzk2IiBuYW1lPSJPdXRwdXQzOTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM5NiIgdHlwZT0idG5zOlBvcnRUeXBlMzk2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzk2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM5NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzOTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM5NiIgYmluZGluZz0idG5zOkJpbmRpbmczOTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzk3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mzk3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzk3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM5NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzOTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzk3IiBuYW1lPSJJbnB1dDM5NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzOTciIG5hbWU9Ik91dHB1dDM5NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzk3IiB0eXBlPSJ0bnM6UG9ydFR5cGUzOTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzk3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM5NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mzk3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM5NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzOTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzOTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzOTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mzk4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM5OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzOTgiIG5hbWU9IklucHV0Mzk4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM5OCIgbmFtZT0iT3V0cHV0Mzk4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczOTgiIHR5cGU9InRuczpQb3J0VHlwZTM5OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zOTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzk4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzOTgiIGJpbmRpbmc9InRuczpCaW5kaW5nMzk4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM5OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM5OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM5OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzOTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzk5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzk5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM5OSIgbmFtZT0iSW5wdXQzOTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzk5IiBuYW1lPSJPdXRwdXQzOTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM5OSIgdHlwZT0idG5zOlBvcnRUeXBlMzk5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzk5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM5OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzOTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM5OSIgYmluZGluZz0idG5zOkJpbmRpbmczOTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDAwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDAwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDAwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQwMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MDAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDAwIiBuYW1lPSJJbnB1dDQwMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MDAiIG5hbWU9Ik91dHB1dDQwMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDAwIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MDAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDAwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQwMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDAwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQwMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDAxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQwMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MDEiIG5hbWU9IklucHV0NDAxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQwMSIgbmFtZT0iT3V0cHV0NDAxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MDEiIHR5cGU9InRuczpQb3J0VHlwZTQwMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MDEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDAxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MDEiIGJpbmRpbmc9InRuczpCaW5kaW5nNDAxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQwMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQwMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQwMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDAyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDAyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQwMiIgbmFtZT0iSW5wdXQ0MDIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDAyIiBuYW1lPSJPdXRwdXQ0MDIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQwMiIgdHlwZT0idG5zOlBvcnRUeXBlNDAyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDAyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQwMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MDIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQwMiIgYmluZGluZz0idG5zOkJpbmRpbmc0MDIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDAzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDAzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDAzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQwMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MDMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDAzIiBuYW1lPSJJbnB1dDQwMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MDMiIG5hbWU9Ik91dHB1dDQwMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDAzIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MDMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDAzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQwMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDAzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQwMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDA0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQwNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MDQiIG5hbWU9IklucHV0NDA0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQwNCIgbmFtZT0iT3V0cHV0NDA0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MDQiIHR5cGU9InRuczpQb3J0VHlwZTQwNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MDQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDA0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MDQiIGJpbmRpbmc9InRuczpCaW5kaW5nNDA0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQwNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQwNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQwNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDA1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDA1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQwNSIgbmFtZT0iSW5wdXQ0MDUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDA1IiBuYW1lPSJPdXRwdXQ0MDUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQwNSIgdHlwZT0idG5zOlBvcnRUeXBlNDA1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDA1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQwNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MDUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQwNSIgYmluZGluZz0idG5zOkJpbmRpbmc0MDUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDA2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDA2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDA2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQwNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MDYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDA2IiBuYW1lPSJJbnB1dDQwNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MDYiIG5hbWU9Ik91dHB1dDQwNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDA2IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MDYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDA2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQwNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDA2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQwNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDA3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQwNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MDciIG5hbWU9IklucHV0NDA3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQwNyIgbmFtZT0iT3V0cHV0NDA3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MDciIHR5cGU9InRuczpQb3J0VHlwZTQwNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MDciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDA3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MDciIGJpbmRpbmc9InRuczpCaW5kaW5nNDA3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQwOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQwOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQwOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDA4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDA4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQwOCIgbmFtZT0iSW5wdXQ0MDgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDA4IiBuYW1lPSJPdXRwdXQ0MDgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQwOCIgdHlwZT0idG5zOlBvcnRUeXBlNDA4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDA4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQwOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MDgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQwOCIgYmluZGluZz0idG5zOkJpbmRpbmc0MDgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDA5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDA5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDA5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQwOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MDkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDA5IiBuYW1lPSJJbnB1dDQwOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MDkiIG5hbWU9Ik91dHB1dDQwOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDA5IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MDkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDA5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQwOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDA5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQwOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDEwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQxMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MTAiIG5hbWU9IklucHV0NDEwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQxMCIgbmFtZT0iT3V0cHV0NDEwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MTAiIHR5cGU9InRuczpQb3J0VHlwZTQxMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDEwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MTAiIGJpbmRpbmc9InRuczpCaW5kaW5nNDEwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQxMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQxMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQxMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDExIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDExIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQxMSIgbmFtZT0iSW5wdXQ0MTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDExIiBuYW1lPSJPdXRwdXQ0MTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQxMSIgdHlwZT0idG5zOlBvcnRUeXBlNDExIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDExIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQxMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQxMSIgYmluZGluZz0idG5zOkJpbmRpbmc0MTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDEyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDEyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDEyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQxMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDEyIiBuYW1lPSJJbnB1dDQxMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MTIiIG5hbWU9Ik91dHB1dDQxMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDEyIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDEyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQxMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDEyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQxMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDEzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQxMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MTMiIG5hbWU9IklucHV0NDEzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQxMyIgbmFtZT0iT3V0cHV0NDEzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MTMiIHR5cGU9InRuczpQb3J0VHlwZTQxMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDEzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MTMiIGJpbmRpbmc9InRuczpCaW5kaW5nNDEzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQxNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQxNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQxNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDE0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDE0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQxNCIgbmFtZT0iSW5wdXQ0MTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDE0IiBuYW1lPSJPdXRwdXQ0MTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQxNCIgdHlwZT0idG5zOlBvcnRUeXBlNDE0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDE0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQxNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQxNCIgYmluZGluZz0idG5zOkJpbmRpbmc0MTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDE1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDE1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDE1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQxNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDE1IiBuYW1lPSJJbnB1dDQxNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MTUiIG5hbWU9Ik91dHB1dDQxNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDE1IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDE1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQxNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDE1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQxNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDE2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQxNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MTYiIG5hbWU9IklucHV0NDE2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQxNiIgbmFtZT0iT3V0cHV0NDE2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MTYiIHR5cGU9InRuczpQb3J0VHlwZTQxNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDE2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MTYiIGJpbmRpbmc9InRuczpCaW5kaW5nNDE2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQxNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQxNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQxNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDE3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDE3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQxNyIgbmFtZT0iSW5wdXQ0MTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDE3IiBuYW1lPSJPdXRwdXQ0MTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQxNyIgdHlwZT0idG5zOlBvcnRUeXBlNDE3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDE3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQxNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQxNyIgYmluZGluZz0idG5zOkJpbmRpbmc0MTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDE4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDE4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDE4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQxOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDE4IiBuYW1lPSJJbnB1dDQxOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MTgiIG5hbWU9Ik91dHB1dDQxOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDE4IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDE4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQxOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDE4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQxOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDE5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQxOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MTkiIG5hbWU9IklucHV0NDE5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQxOSIgbmFtZT0iT3V0cHV0NDE5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MTkiIHR5cGU9InRuczpQb3J0VHlwZTQxOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDE5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MTkiIGJpbmRpbmc9InRuczpCaW5kaW5nNDE5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQyMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQyMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQyMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDIwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDIwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQyMCIgbmFtZT0iSW5wdXQ0MjAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDIwIiBuYW1lPSJPdXRwdXQ0MjAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQyMCIgdHlwZT0idG5zOlBvcnRUeXBlNDIwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDIwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQyMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MjAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQyMCIgYmluZGluZz0idG5zOkJpbmRpbmc0MjAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDIxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDIxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDIxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQyMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MjEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDIxIiBuYW1lPSJJbnB1dDQyMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MjEiIG5hbWU9Ik91dHB1dDQyMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDIxIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MjEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDIxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQyMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDIxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQyMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDIyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQyMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MjIiIG5hbWU9IklucHV0NDIyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQyMiIgbmFtZT0iT3V0cHV0NDIyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MjIiIHR5cGU9InRuczpQb3J0VHlwZTQyMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDIyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MjIiIGJpbmRpbmc9InRuczpCaW5kaW5nNDIyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQyMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQyMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQyMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDIzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDIzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQyMyIgbmFtZT0iSW5wdXQ0MjMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDIzIiBuYW1lPSJPdXRwdXQ0MjMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQyMyIgdHlwZT0idG5zOlBvcnRUeXBlNDIzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDIzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQyMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MjMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQyMyIgYmluZGluZz0idG5zOkJpbmRpbmc0MjMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDI0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDI0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDI0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQyNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MjQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDI0IiBuYW1lPSJJbnB1dDQyNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MjQiIG5hbWU9Ik91dHB1dDQyNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDI0IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MjQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDI0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQyNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDI0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQyNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDI1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQyNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MjUiIG5hbWU9IklucHV0NDI1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQyNSIgbmFtZT0iT3V0cHV0NDI1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MjUiIHR5cGU9InRuczpQb3J0VHlwZTQyNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDI1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MjUiIGJpbmRpbmc9InRuczpCaW5kaW5nNDI1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQyNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQyNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQyNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDI2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDI2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQyNiIgbmFtZT0iSW5wdXQ0MjYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDI2IiBuYW1lPSJPdXRwdXQ0MjYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQyNiIgdHlwZT0idG5zOlBvcnRUeXBlNDI2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDI2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQyNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MjYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQyNiIgYmluZGluZz0idG5zOkJpbmRpbmc0MjYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDI3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDI3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDI3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQyNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MjciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDI3IiBuYW1lPSJJbnB1dDQyNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MjciIG5hbWU9Ik91dHB1dDQyNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDI3IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MjciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDI3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQyNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDI3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQyNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDI4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQyOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MjgiIG5hbWU9IklucHV0NDI4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQyOCIgbmFtZT0iT3V0cHV0NDI4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MjgiIHR5cGU9InRuczpQb3J0VHlwZTQyOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDI4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MjgiIGJpbmRpbmc9InRuczpCaW5kaW5nNDI4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQyOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQyOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQyOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDI5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDI5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQyOSIgbmFtZT0iSW5wdXQ0MjkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDI5IiBuYW1lPSJPdXRwdXQ0MjkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQyOSIgdHlwZT0idG5zOlBvcnRUeXBlNDI5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDI5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQyOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MjkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQyOSIgYmluZGluZz0idG5zOkJpbmRpbmc0MjkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDMwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDMwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDMwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQzMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MzAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDMwIiBuYW1lPSJJbnB1dDQzMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MzAiIG5hbWU9Ik91dHB1dDQzMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDMwIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MzAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDMwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQzMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDMwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQzMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDMxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQzMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MzEiIG5hbWU9IklucHV0NDMxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQzMSIgbmFtZT0iT3V0cHV0NDMxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MzEiIHR5cGU9InRuczpQb3J0VHlwZTQzMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MzEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDMxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MzEiIGJpbmRpbmc9InRuczpCaW5kaW5nNDMxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQzMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQzMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQzMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDMyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDMyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQzMiIgbmFtZT0iSW5wdXQ0MzIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDMyIiBuYW1lPSJPdXRwdXQ0MzIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQzMiIgdHlwZT0idG5zOlBvcnRUeXBlNDMyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDMyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQzMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MzIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQzMiIgYmluZGluZz0idG5zOkJpbmRpbmc0MzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDMzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDMzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDMzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQzMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MzMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDMzIiBuYW1lPSJJbnB1dDQzMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MzMiIG5hbWU9Ik91dHB1dDQzMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDMzIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MzMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDMzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQzMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDMzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQzMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDM0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQzNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MzQiIG5hbWU9IklucHV0NDM0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQzNCIgbmFtZT0iT3V0cHV0NDM0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MzQiIHR5cGU9InRuczpQb3J0VHlwZTQzNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MzQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDM0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MzQiIGJpbmRpbmc9InRuczpCaW5kaW5nNDM0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQzNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQzNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQzNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDM1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDM1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQzNSIgbmFtZT0iSW5wdXQ0MzUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDM1IiBuYW1lPSJPdXRwdXQ0MzUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQzNSIgdHlwZT0idG5zOlBvcnRUeXBlNDM1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDM1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQzNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MzUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQzNSIgYmluZGluZz0idG5zOkJpbmRpbmc0MzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDM2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDM2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDM2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQzNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MzYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDM2IiBuYW1lPSJJbnB1dDQzNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MzYiIG5hbWU9Ik91dHB1dDQzNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDM2IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MzYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDM2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQzNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDM2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQzNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDM3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQzNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MzciIG5hbWU9IklucHV0NDM3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQzNyIgbmFtZT0iT3V0cHV0NDM3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MzciIHR5cGU9InRuczpQb3J0VHlwZTQzNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MzciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDM3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MzciIGJpbmRpbmc9InRuczpCaW5kaW5nNDM3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQzOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQzOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQzOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDM4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDM4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQzOCIgbmFtZT0iSW5wdXQ0MzgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDM4IiBuYW1lPSJPdXRwdXQ0MzgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQzOCIgdHlwZT0idG5zOlBvcnRUeXBlNDM4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDM4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQzOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MzgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQzOCIgYmluZGluZz0idG5zOkJpbmRpbmc0MzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDM5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDM5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDM5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQzOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MzkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDM5IiBuYW1lPSJJbnB1dDQzOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MzkiIG5hbWU9Ik91dHB1dDQzOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDM5IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MzkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDM5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQzOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDM5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQzOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ0MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NDAiIG5hbWU9IklucHV0NDQwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ0MCIgbmFtZT0iT3V0cHV0NDQwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NDAiIHR5cGU9InRuczpQb3J0VHlwZTQ0MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NDAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDQwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NDAiIGJpbmRpbmc9InRuczpCaW5kaW5nNDQwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ0MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ0MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ0MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDQxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ0MSIgbmFtZT0iSW5wdXQ0NDEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDQxIiBuYW1lPSJPdXRwdXQ0NDEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ0MSIgdHlwZT0idG5zOlBvcnRUeXBlNDQxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ0MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NDEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ0MSIgYmluZGluZz0idG5zOkJpbmRpbmc0NDEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDQyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDQyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ0MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NDIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDQyIiBuYW1lPSJJbnB1dDQ0MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NDIiIG5hbWU9Ik91dHB1dDQ0MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDQyIiB0eXBlPSJ0bnM6UG9ydFR5cGU0NDIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDQyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ0MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDQyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ0MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ0MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NDMiIG5hbWU9IklucHV0NDQzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ0MyIgbmFtZT0iT3V0cHV0NDQzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NDMiIHR5cGU9InRuczpQb3J0VHlwZTQ0MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NDMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDQzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NDMiIGJpbmRpbmc9InRuczpCaW5kaW5nNDQzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ0NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ0NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ0NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDQ0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQ0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ0NCIgbmFtZT0iSW5wdXQ0NDQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDQ0IiBuYW1lPSJPdXRwdXQ0NDQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ0NCIgdHlwZT0idG5zOlBvcnRUeXBlNDQ0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQ0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ0NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NDQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ0NCIgYmluZGluZz0idG5zOkJpbmRpbmc0NDQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDQ1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDQ1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ0NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NDUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDQ1IiBuYW1lPSJJbnB1dDQ0NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NDUiIG5hbWU9Ik91dHB1dDQ0NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDQ1IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NDUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDQ1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ0NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDQ1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ0NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ0NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NDYiIG5hbWU9IklucHV0NDQ2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ0NiIgbmFtZT0iT3V0cHV0NDQ2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NDYiIHR5cGU9InRuczpQb3J0VHlwZTQ0NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NDYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDQ2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NDYiIGJpbmRpbmc9InRuczpCaW5kaW5nNDQ2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ0NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ0NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ0NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDQ3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQ3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ0NyIgbmFtZT0iSW5wdXQ0NDciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDQ3IiBuYW1lPSJPdXRwdXQ0NDciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ0NyIgdHlwZT0idG5zOlBvcnRUeXBlNDQ3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQ3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ0NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NDciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ0NyIgYmluZGluZz0idG5zOkJpbmRpbmc0NDciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDQ4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDQ4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ0OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NDgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDQ4IiBuYW1lPSJJbnB1dDQ0OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NDgiIG5hbWU9Ik91dHB1dDQ0OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDQ4IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NDgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDQ4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ0OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDQ4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ0OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ0OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NDkiIG5hbWU9IklucHV0NDQ5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ0OSIgbmFtZT0iT3V0cHV0NDQ5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NDkiIHR5cGU9InRuczpQb3J0VHlwZTQ0OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NDkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDQ5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NDkiIGJpbmRpbmc9InRuczpCaW5kaW5nNDQ5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ1MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ1MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ1MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDUwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDUwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ1MCIgbmFtZT0iSW5wdXQ0NTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDUwIiBuYW1lPSJPdXRwdXQ0NTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ1MCIgdHlwZT0idG5zOlBvcnRUeXBlNDUwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDUwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ1MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ1MCIgYmluZGluZz0idG5zOkJpbmRpbmc0NTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDUxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDUxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDUxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ1MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDUxIiBuYW1lPSJJbnB1dDQ1MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NTEiIG5hbWU9Ik91dHB1dDQ1MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDUxIiB0eXBlPSJ0bnM6UG9ydFR5cGU0NTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDUxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ1MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDUxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ1MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDUyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ1MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NTIiIG5hbWU9IklucHV0NDUyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ1MiIgbmFtZT0iT3V0cHV0NDUyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NTIiIHR5cGU9InRuczpQb3J0VHlwZTQ1MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDUyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NTIiIGJpbmRpbmc9InRuczpCaW5kaW5nNDUyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ1MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ1MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ1MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDUzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDUzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ1MyIgbmFtZT0iSW5wdXQ0NTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDUzIiBuYW1lPSJPdXRwdXQ0NTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ1MyIgdHlwZT0idG5zOlBvcnRUeXBlNDUzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDUzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ1MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ1MyIgYmluZGluZz0idG5zOkJpbmRpbmc0NTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDU0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDU0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDU0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ1NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDU0IiBuYW1lPSJJbnB1dDQ1NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NTQiIG5hbWU9Ik91dHB1dDQ1NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDU0IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDU0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ1NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDU0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ1NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDU1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ1NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NTUiIG5hbWU9IklucHV0NDU1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ1NSIgbmFtZT0iT3V0cHV0NDU1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NTUiIHR5cGU9InRuczpQb3J0VHlwZTQ1NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDU1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NTUiIGJpbmRpbmc9InRuczpCaW5kaW5nNDU1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ1NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ1NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ1NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDU2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDU2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ1NiIgbmFtZT0iSW5wdXQ0NTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDU2IiBuYW1lPSJPdXRwdXQ0NTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ1NiIgdHlwZT0idG5zOlBvcnRUeXBlNDU2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDU2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ1NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ1NiIgYmluZGluZz0idG5zOkJpbmRpbmc0NTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDU3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDU3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDU3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ1NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDU3IiBuYW1lPSJJbnB1dDQ1NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NTciIG5hbWU9Ik91dHB1dDQ1NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDU3IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDU3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ1NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDU3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ1NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDU4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ1OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NTgiIG5hbWU9IklucHV0NDU4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ1OCIgbmFtZT0iT3V0cHV0NDU4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NTgiIHR5cGU9InRuczpQb3J0VHlwZTQ1OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDU4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NTgiIGJpbmRpbmc9InRuczpCaW5kaW5nNDU4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ1OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ1OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ1OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDU5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDU5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ1OSIgbmFtZT0iSW5wdXQ0NTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDU5IiBuYW1lPSJPdXRwdXQ0NTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ1OSIgdHlwZT0idG5zOlBvcnRUeXBlNDU5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDU5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ1OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ1OSIgYmluZGluZz0idG5zOkJpbmRpbmc0NTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDYwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDYwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDYwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ2MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NjAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDYwIiBuYW1lPSJJbnB1dDQ2MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NjAiIG5hbWU9Ik91dHB1dDQ2MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDYwIiB0eXBlPSJ0bnM6UG9ydFR5cGU0NjAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDYwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ2MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDYwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ2MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDYxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ2MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NjEiIG5hbWU9IklucHV0NDYxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ2MSIgbmFtZT0iT3V0cHV0NDYxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NjEiIHR5cGU9InRuczpQb3J0VHlwZTQ2MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDYxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NjEiIGJpbmRpbmc9InRuczpCaW5kaW5nNDYxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ2MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ2MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ2MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDYyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDYyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ2MiIgbmFtZT0iSW5wdXQ0NjIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDYyIiBuYW1lPSJPdXRwdXQ0NjIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ2MiIgdHlwZT0idG5zOlBvcnRUeXBlNDYyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDYyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ2MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NjIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ2MiIgYmluZGluZz0idG5zOkJpbmRpbmc0NjIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDYzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDYzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDYzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ2MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NjMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDYzIiBuYW1lPSJJbnB1dDQ2MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NjMiIG5hbWU9Ik91dHB1dDQ2MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDYzIiB0eXBlPSJ0bnM6UG9ydFR5cGU0NjMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDYzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ2MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDYzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ2MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDY0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ2NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NjQiIG5hbWU9IklucHV0NDY0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ2NCIgbmFtZT0iT3V0cHV0NDY0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NjQiIHR5cGU9InRuczpQb3J0VHlwZTQ2NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDY0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NjQiIGJpbmRpbmc9InRuczpCaW5kaW5nNDY0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ2NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ2NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ2NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDY1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDY1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ2NSIgbmFtZT0iSW5wdXQ0NjUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDY1IiBuYW1lPSJPdXRwdXQ0NjUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ2NSIgdHlwZT0idG5zOlBvcnRUeXBlNDY1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDY1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ2NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NjUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ2NSIgYmluZGluZz0idG5zOkJpbmRpbmc0NjUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDY2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDY2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDY2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ2NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NjYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDY2IiBuYW1lPSJJbnB1dDQ2NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NjYiIG5hbWU9Ik91dHB1dDQ2NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDY2IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NjYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDY2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ2NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDY2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ2NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDY3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ2NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NjciIG5hbWU9IklucHV0NDY3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ2NyIgbmFtZT0iT3V0cHV0NDY3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NjciIHR5cGU9InRuczpQb3J0VHlwZTQ2NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDY3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NjciIGJpbmRpbmc9InRuczpCaW5kaW5nNDY3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ2OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ2OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ2OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDY4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDY4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ2OCIgbmFtZT0iSW5wdXQ0NjgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDY4IiBuYW1lPSJPdXRwdXQ0NjgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ2OCIgdHlwZT0idG5zOlBvcnRUeXBlNDY4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDY4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ2OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NjgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ2OCIgYmluZGluZz0idG5zOkJpbmRpbmc0NjgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDY5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDY5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDY5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ2OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NjkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDY5IiBuYW1lPSJJbnB1dDQ2OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NjkiIG5hbWU9Ik91dHB1dDQ2OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDY5IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NjkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDY5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ2OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDY5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ2OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDcwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ3MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NzAiIG5hbWU9IklucHV0NDcwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ3MCIgbmFtZT0iT3V0cHV0NDcwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NzAiIHR5cGU9InRuczpQb3J0VHlwZTQ3MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NzAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDcwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NzAiIGJpbmRpbmc9InRuczpCaW5kaW5nNDcwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ3MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ3MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ3MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDcxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDcxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ3MSIgbmFtZT0iSW5wdXQ0NzEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDcxIiBuYW1lPSJPdXRwdXQ0NzEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ3MSIgdHlwZT0idG5zOlBvcnRUeXBlNDcxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDcxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ3MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NzEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ3MSIgYmluZGluZz0idG5zOkJpbmRpbmc0NzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDcyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDcyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDcyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ3MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NzIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDcyIiBuYW1lPSJJbnB1dDQ3MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NzIiIG5hbWU9Ik91dHB1dDQ3MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDcyIiB0eXBlPSJ0bnM6UG9ydFR5cGU0NzIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDcyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ3MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDcyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ3MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDczIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ3MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NzMiIG5hbWU9IklucHV0NDczIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ3MyIgbmFtZT0iT3V0cHV0NDczIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NzMiIHR5cGU9InRuczpQb3J0VHlwZTQ3MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NzMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDczIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NzMiIGJpbmRpbmc9InRuczpCaW5kaW5nNDczIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ3NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ3NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ3NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDc0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDc0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ3NCIgbmFtZT0iSW5wdXQ0NzQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDc0IiBuYW1lPSJPdXRwdXQ0NzQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ3NCIgdHlwZT0idG5zOlBvcnRUeXBlNDc0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDc0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ3NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NzQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ3NCIgYmluZGluZz0idG5zOkJpbmRpbmc0NzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDc1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDc1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDc1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ3NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NzUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDc1IiBuYW1lPSJJbnB1dDQ3NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NzUiIG5hbWU9Ik91dHB1dDQ3NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDc1IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NzUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDc1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ3NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDc1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ3NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDc2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ3NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NzYiIG5hbWU9IklucHV0NDc2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ3NiIgbmFtZT0iT3V0cHV0NDc2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NzYiIHR5cGU9InRuczpQb3J0VHlwZTQ3NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NzYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDc2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NzYiIGJpbmRpbmc9InRuczpCaW5kaW5nNDc2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ3NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ3NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ3NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDc3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDc3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ3NyIgbmFtZT0iSW5wdXQ0NzciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDc3IiBuYW1lPSJPdXRwdXQ0NzciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ3NyIgdHlwZT0idG5zOlBvcnRUeXBlNDc3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDc3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ3NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NzciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ3NyIgYmluZGluZz0idG5zOkJpbmRpbmc0NzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDc4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDc4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDc4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ3OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NzgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDc4IiBuYW1lPSJJbnB1dDQ3OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NzgiIG5hbWU9Ik91dHB1dDQ3OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDc4IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NzgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDc4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ3OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDc4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ3OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDc5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ3OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NzkiIG5hbWU9IklucHV0NDc5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ3OSIgbmFtZT0iT3V0cHV0NDc5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NzkiIHR5cGU9InRuczpQb3J0VHlwZTQ3OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NzkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDc5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NzkiIGJpbmRpbmc9InRuczpCaW5kaW5nNDc5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ4MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ4MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ4MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0ODAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDgwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDgwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ4MCIgbmFtZT0iSW5wdXQ0ODAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDgwIiBuYW1lPSJPdXRwdXQ0ODAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ4MCIgdHlwZT0idG5zOlBvcnRUeXBlNDgwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDgwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ4MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0ODAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ4MCIgYmluZGluZz0idG5zOkJpbmRpbmc0ODAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDgxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDgxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDgxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ4MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0ODEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240ODEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDgxIiBuYW1lPSJJbnB1dDQ4MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0ODEiIG5hbWU9Ik91dHB1dDQ4MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDgxIiB0eXBlPSJ0bnM6UG9ydFR5cGU0ODEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240ODEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDgxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ4MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDgxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ4MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0ODIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0ODIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0ODIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDgyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ4MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0ODIiIG5hbWU9IklucHV0NDgyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ4MiIgbmFtZT0iT3V0cHV0NDgyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0ODIiIHR5cGU9InRuczpQb3J0VHlwZTQ4MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240ODIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDgyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0ODIiIGJpbmRpbmc9InRuczpCaW5kaW5nNDgyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ4MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ4MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ4MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0ODMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDgzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDgzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ4MyIgbmFtZT0iSW5wdXQ0ODMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDgzIiBuYW1lPSJPdXRwdXQ0ODMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ4MyIgdHlwZT0idG5zOlBvcnRUeXBlNDgzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDgzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ4MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0ODMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ4MyIgYmluZGluZz0idG5zOkJpbmRpbmc0ODMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDg0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDg0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDg0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ4NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0ODQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240ODQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDg0IiBuYW1lPSJJbnB1dDQ4NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0ODQiIG5hbWU9Ik91dHB1dDQ4NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDg0IiB0eXBlPSJ0bnM6UG9ydFR5cGU0ODQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240ODQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDg0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ4NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDg0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ4NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0ODUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0ODUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0ODUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDg1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ4NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0ODUiIG5hbWU9IklucHV0NDg1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ4NSIgbmFtZT0iT3V0cHV0NDg1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0ODUiIHR5cGU9InRuczpQb3J0VHlwZTQ4NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240ODUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDg1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0ODUiIGJpbmRpbmc9InRuczpCaW5kaW5nNDg1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ4NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ4NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ4NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0ODYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDg2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDg2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ4NiIgbmFtZT0iSW5wdXQ0ODYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDg2IiBuYW1lPSJPdXRwdXQ0ODYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ4NiIgdHlwZT0idG5zOlBvcnRUeXBlNDg2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDg2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ4NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0ODYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ4NiIgYmluZGluZz0idG5zOkJpbmRpbmc0ODYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDg3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDg3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDg3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ4NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0ODciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240ODciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDg3IiBuYW1lPSJJbnB1dDQ4NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0ODciIG5hbWU9Ik91dHB1dDQ4NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDg3IiB0eXBlPSJ0bnM6UG9ydFR5cGU0ODciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240ODciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDg3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ4NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDg3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ4NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0ODgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0ODgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0ODgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDg4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ4OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0ODgiIG5hbWU9IklucHV0NDg4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ4OCIgbmFtZT0iT3V0cHV0NDg4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0ODgiIHR5cGU9InRuczpQb3J0VHlwZTQ4OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240ODgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDg4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0ODgiIGJpbmRpbmc9InRuczpCaW5kaW5nNDg4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ4OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ4OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ4OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0ODkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDg5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDg5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ4OSIgbmFtZT0iSW5wdXQ0ODkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDg5IiBuYW1lPSJPdXRwdXQ0ODkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ4OSIgdHlwZT0idG5zOlBvcnRUeXBlNDg5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDg5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ4OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0ODkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ4OSIgYmluZGluZz0idG5zOkJpbmRpbmc0ODkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDkwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDkwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDkwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ5MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0OTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDkwIiBuYW1lPSJJbnB1dDQ5MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0OTAiIG5hbWU9Ik91dHB1dDQ5MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDkwIiB0eXBlPSJ0bnM6UG9ydFR5cGU0OTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDkwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ5MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDkwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ5MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0OTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0OTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0OTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDkxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ5MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0OTEiIG5hbWU9IklucHV0NDkxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ5MSIgbmFtZT0iT3V0cHV0NDkxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0OTEiIHR5cGU9InRuczpQb3J0VHlwZTQ5MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240OTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDkxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0OTEiIGJpbmRpbmc9InRuczpCaW5kaW5nNDkxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ5MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ5MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ5MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0OTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDkyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDkyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ5MiIgbmFtZT0iSW5wdXQ0OTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDkyIiBuYW1lPSJPdXRwdXQ0OTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ5MiIgdHlwZT0idG5zOlBvcnRUeXBlNDkyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDkyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ5MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0OTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ5MiIgYmluZGluZz0idG5zOkJpbmRpbmc0OTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDkzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDkzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDkzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ5MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0OTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDkzIiBuYW1lPSJJbnB1dDQ5MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0OTMiIG5hbWU9Ik91dHB1dDQ5MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDkzIiB0eXBlPSJ0bnM6UG9ydFR5cGU0OTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDkzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ5MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDkzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ5MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0OTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0OTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0OTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDk0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ5NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0OTQiIG5hbWU9IklucHV0NDk0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ5NCIgbmFtZT0iT3V0cHV0NDk0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0OTQiIHR5cGU9InRuczpQb3J0VHlwZTQ5NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240OTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDk0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0OTQiIGJpbmRpbmc9InRuczpCaW5kaW5nNDk0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ5NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ5NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ5NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0OTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDk1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDk1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ5NSIgbmFtZT0iSW5wdXQ0OTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDk1IiBuYW1lPSJPdXRwdXQ0OTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ5NSIgdHlwZT0idG5zOlBvcnRUeXBlNDk1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDk1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ5NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0OTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ5NSIgYmluZGluZz0idG5zOkJpbmRpbmc0OTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDk2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDk2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDk2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ5NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0OTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDk2IiBuYW1lPSJJbnB1dDQ5NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0OTYiIG5hbWU9Ik91dHB1dDQ5NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDk2IiB0eXBlPSJ0bnM6UG9ydFR5cGU0OTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDk2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ5NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDk2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ5NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0OTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0OTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0OTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDk3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ5NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0OTciIG5hbWU9IklucHV0NDk3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ5NyIgbmFtZT0iT3V0cHV0NDk3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0OTciIHR5cGU9InRuczpQb3J0VHlwZTQ5NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240OTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDk3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0OTciIGJpbmRpbmc9InRuczpCaW5kaW5nNDk3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ5OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ5OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ5OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0OTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDk4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDk4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ5OCIgbmFtZT0iSW5wdXQ0OTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDk4IiBuYW1lPSJPdXRwdXQ0OTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ5OCIgdHlwZT0idG5zOlBvcnRUeXBlNDk4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDk4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ5OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0OTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ5OCIgYmluZGluZz0idG5zOkJpbmRpbmc0OTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDk5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDk5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDk5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ5OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0OTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDk5IiBuYW1lPSJJbnB1dDQ5OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0OTkiIG5hbWU9Ik91dHB1dDQ5OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDk5IiB0eXBlPSJ0bnM6UG9ydFR5cGU0OTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDk5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ5OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDk5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ5OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTAwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUwMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUwMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MDAiIG5hbWU9IklucHV0NTAwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUwMCIgbmFtZT0iT3V0cHV0NTAwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MDAiIHR5cGU9InRuczpQb3J0VHlwZTUwMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUwMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MDAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTAwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MDAiIGJpbmRpbmc9InRuczpCaW5kaW5nNTAwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUwMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUwMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUwMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTAxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTAxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUwMSIgbmFtZT0iSW5wdXQ1MDEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTAxIiBuYW1lPSJPdXRwdXQ1MDEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUwMSIgdHlwZT0idG5zOlBvcnRUeXBlNTAxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTAxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUwMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MDEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUwMSIgYmluZGluZz0idG5zOkJpbmRpbmc1MDEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTAyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTAyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTAyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUwMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MDIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MDIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTAyIiBuYW1lPSJJbnB1dDUwMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MDIiIG5hbWU9Ik91dHB1dDUwMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTAyIiB0eXBlPSJ0bnM6UG9ydFR5cGU1MDIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MDIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTAyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUwMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTAyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzUwMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTAzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUwMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUwMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MDMiIG5hbWU9IklucHV0NTAzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUwMyIgbmFtZT0iT3V0cHV0NTAzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MDMiIHR5cGU9InRuczpQb3J0VHlwZTUwMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUwMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MDMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTAzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MDMiIGJpbmRpbmc9InRuczpCaW5kaW5nNTAzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUwNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUwNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUwNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTA0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTA0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUwNCIgbmFtZT0iSW5wdXQ1MDQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTA0IiBuYW1lPSJPdXRwdXQ1MDQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUwNCIgdHlwZT0idG5zOlBvcnRUeXBlNTA0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTA0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUwNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MDQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUwNCIgYmluZGluZz0idG5zOkJpbmRpbmc1MDQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTA1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTA1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTA1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUwNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MDUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MDUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTA1IiBuYW1lPSJJbnB1dDUwNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MDUiIG5hbWU9Ik91dHB1dDUwNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTA1IiB0eXBlPSJ0bnM6UG9ydFR5cGU1MDUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MDUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTA1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUwNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTA1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzUwNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTA2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUwNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUwNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MDYiIG5hbWU9IklucHV0NTA2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUwNiIgbmFtZT0iT3V0cHV0NTA2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MDYiIHR5cGU9InRuczpQb3J0VHlwZTUwNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUwNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MDYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTA2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MDYiIGJpbmRpbmc9InRuczpCaW5kaW5nNTA2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUwNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUwNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUwNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTA3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTA3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUwNyIgbmFtZT0iSW5wdXQ1MDciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTA3IiBuYW1lPSJPdXRwdXQ1MDciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUwNyIgdHlwZT0idG5zOlBvcnRUeXBlNTA3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTA3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUwNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MDciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUwNyIgYmluZGluZz0idG5zOkJpbmRpbmc1MDciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTA4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTA4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTA4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUwOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MDgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MDgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTA4IiBuYW1lPSJJbnB1dDUwOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MDgiIG5hbWU9Ik91dHB1dDUwOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTA4IiB0eXBlPSJ0bnM6UG9ydFR5cGU1MDgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MDgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTA4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUwOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTA4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzUwOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTA5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUwOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUwOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MDkiIG5hbWU9IklucHV0NTA5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUwOSIgbmFtZT0iT3V0cHV0NTA5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MDkiIHR5cGU9InRuczpQb3J0VHlwZTUwOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUwOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MDkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTA5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MDkiIGJpbmRpbmc9InRuczpCaW5kaW5nNTA5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUxMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUxMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUxMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTEwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTEwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUxMCIgbmFtZT0iSW5wdXQ1MTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTEwIiBuYW1lPSJPdXRwdXQ1MTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUxMCIgdHlwZT0idG5zOlBvcnRUeXBlNTEwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTEwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUxMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUxMCIgYmluZGluZz0idG5zOkJpbmRpbmc1MTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTExIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTExIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTExIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUxMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTExIiBuYW1lPSJJbnB1dDUxMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MTEiIG5hbWU9Ik91dHB1dDUxMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTExIiB0eXBlPSJ0bnM6UG9ydFR5cGU1MTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTExIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUxMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTExIiBiaW5kaW5nPSJ0bnM6QmluZGluZzUxMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTEyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUxMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUxMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MTIiIG5hbWU9IklucHV0NTEyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUxMiIgbmFtZT0iT3V0cHV0NTEyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MTIiIHR5cGU9InRuczpQb3J0VHlwZTUxMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUxMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTEyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MTIiIGJpbmRpbmc9InRuczpCaW5kaW5nNTEyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUxMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUxMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUxMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTEzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTEzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUxMyIgbmFtZT0iSW5wdXQ1MTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTEzIiBuYW1lPSJPdXRwdXQ1MTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUxMyIgdHlwZT0idG5zOlBvcnRUeXBlNTEzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTEzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUxMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUxMyIgYmluZGluZz0idG5zOkJpbmRpbmc1MTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTE0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTE0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTE0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUxNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTE0IiBuYW1lPSJJbnB1dDUxNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MTQiIG5hbWU9Ik91dHB1dDUxNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTE0IiB0eXBlPSJ0bnM6UG9ydFR5cGU1MTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTE0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUxNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTE0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzUxNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTE1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUxNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUxNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MTUiIG5hbWU9IklucHV0NTE1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUxNSIgbmFtZT0iT3V0cHV0NTE1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MTUiIHR5cGU9InRuczpQb3J0VHlwZTUxNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUxNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTE1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MTUiIGJpbmRpbmc9InRuczpCaW5kaW5nNTE1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUxNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUxNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUxNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTE2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTE2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUxNiIgbmFtZT0iSW5wdXQ1MTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTE2IiBuYW1lPSJPdXRwdXQ1MTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUxNiIgdHlwZT0idG5zOlBvcnRUeXBlNTE2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTE2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUxNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUxNiIgYmluZGluZz0idG5zOkJpbmRpbmc1MTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTE3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTE3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTE3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUxNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTE3IiBuYW1lPSJJbnB1dDUxNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MTciIG5hbWU9Ik91dHB1dDUxNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTE3IiB0eXBlPSJ0bnM6UG9ydFR5cGU1MTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTE3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUxNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTE3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzUxNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTE4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUxOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUxOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MTgiIG5hbWU9IklucHV0NTE4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUxOCIgbmFtZT0iT3V0cHV0NTE4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MTgiIHR5cGU9InRuczpQb3J0VHlwZTUxOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUxOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTE4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MTgiIGJpbmRpbmc9InRuczpCaW5kaW5nNTE4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUxOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUxOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUxOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTE5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTE5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUxOSIgbmFtZT0iSW5wdXQ1MTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTE5IiBuYW1lPSJPdXRwdXQ1MTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUxOSIgdHlwZT0idG5zOlBvcnRUeXBlNTE5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTE5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUxOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUxOSIgYmluZGluZz0idG5zOkJpbmRpbmc1MTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTIwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTIwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTIwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUyMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MjAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTIwIiBuYW1lPSJJbnB1dDUyMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MjAiIG5hbWU9Ik91dHB1dDUyMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTIwIiB0eXBlPSJ0bnM6UG9ydFR5cGU1MjAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTIwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUyMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTIwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzUyMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTIxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUyMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUyMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MjEiIG5hbWU9IklucHV0NTIxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUyMSIgbmFtZT0iT3V0cHV0NTIxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MjEiIHR5cGU9InRuczpQb3J0VHlwZTUyMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUyMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTIxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MjEiIGJpbmRpbmc9InRuczpCaW5kaW5nNTIxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUyMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUyMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUyMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTIyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTIyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUyMiIgbmFtZT0iSW5wdXQ1MjIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTIyIiBuYW1lPSJPdXRwdXQ1MjIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUyMiIgdHlwZT0idG5zOlBvcnRUeXBlNTIyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTIyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUyMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MjIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUyMiIgYmluZGluZz0idG5zOkJpbmRpbmc1MjIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTIzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTIzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTIzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUyMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MjMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTIzIiBuYW1lPSJJbnB1dDUyMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MjMiIG5hbWU9Ik91dHB1dDUyMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTIzIiB0eXBlPSJ0bnM6UG9ydFR5cGU1MjMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTIzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUyMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTIzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzUyMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTI0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUyNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUyNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MjQiIG5hbWU9IklucHV0NTI0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUyNCIgbmFtZT0iT3V0cHV0NTI0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MjQiIHR5cGU9InRuczpQb3J0VHlwZTUyNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUyNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTI0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MjQiIGJpbmRpbmc9InRuczpCaW5kaW5nNTI0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUyNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUyNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUyNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTI1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTI1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUyNSIgbmFtZT0iSW5wdXQ1MjUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTI1IiBuYW1lPSJPdXRwdXQ1MjUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUyNSIgdHlwZT0idG5zOlBvcnRUeXBlNTI1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTI1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUyNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MjUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUyNSIgYmluZGluZz0idG5zOkJpbmRpbmc1MjUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTI2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTI2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTI2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUyNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MjYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTI2IiBuYW1lPSJJbnB1dDUyNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MjYiIG5hbWU9Ik91dHB1dDUyNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTI2IiB0eXBlPSJ0bnM6UG9ydFR5cGU1MjYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTI2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUyNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTI2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzUyNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTI3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUyNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUyNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MjciIG5hbWU9IklucHV0NTI3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUyNyIgbmFtZT0iT3V0cHV0NTI3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MjciIHR5cGU9InRuczpQb3J0VHlwZTUyNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUyNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTI3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MjciIGJpbmRpbmc9InRuczpCaW5kaW5nNTI3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUyOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUyOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUyOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTI4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTI4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUyOCIgbmFtZT0iSW5wdXQ1MjgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTI4IiBuYW1lPSJPdXRwdXQ1MjgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUyOCIgdHlwZT0idG5zOlBvcnRUeXBlNTI4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTI4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUyOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MjgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUyOCIgYmluZGluZz0idG5zOkJpbmRpbmc1MjgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTI5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTI5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTI5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUyOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MjkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTI5IiBuYW1lPSJJbnB1dDUyOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MjkiIG5hbWU9Ik91dHB1dDUyOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTI5IiB0eXBlPSJ0bnM6UG9ydFR5cGU1MjkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTI5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUyOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTI5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzUyOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTMwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUzMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUzMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MzAiIG5hbWU9IklucHV0NTMwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUzMCIgbmFtZT0iT3V0cHV0NTMwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MzAiIHR5cGU9InRuczpQb3J0VHlwZTUzMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUzMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MzAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTMwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MzAiIGJpbmRpbmc9InRuczpCaW5kaW5nNTMwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUzMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUzMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUzMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTMxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTMxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUzMSIgbmFtZT0iSW5wdXQ1MzEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTMxIiBuYW1lPSJPdXRwdXQ1MzEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUzMSIgdHlwZT0idG5zOlBvcnRUeXBlNTMxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTMxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUzMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MzEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUzMSIgYmluZGluZz0idG5zOkJpbmRpbmc1MzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTMyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTMyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTMyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUzMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MzIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MzIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTMyIiBuYW1lPSJJbnB1dDUzMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MzIiIG5hbWU9Ik91dHB1dDUzMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTMyIiB0eXBlPSJ0bnM6UG9ydFR5cGU1MzIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MzIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTMyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUzMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTMyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzUzMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTMzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUzMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUzMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MzMiIG5hbWU9IklucHV0NTMzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUzMyIgbmFtZT0iT3V0cHV0NTMzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MzMiIHR5cGU9InRuczpQb3J0VHlwZTUzMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUzMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MzMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTMzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MzMiIGJpbmRpbmc9InRuczpCaW5kaW5nNTMzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUzNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUzNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUzNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTM0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTM0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUzNCIgbmFtZT0iSW5wdXQ1MzQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTM0IiBuYW1lPSJPdXRwdXQ1MzQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUzNCIgdHlwZT0idG5zOlBvcnRUeXBlNTM0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTM0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUzNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MzQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUzNCIgYmluZGluZz0idG5zOkJpbmRpbmc1MzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTM1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTM1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTM1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUzNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MzUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MzUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTM1IiBuYW1lPSJJbnB1dDUzNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MzUiIG5hbWU9Ik91dHB1dDUzNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTM1IiB0eXBlPSJ0bnM6UG9ydFR5cGU1MzUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MzUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTM1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUzNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTM1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzUzNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTM2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUzNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUzNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MzYiIG5hbWU9IklucHV0NTM2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUzNiIgbmFtZT0iT3V0cHV0NTM2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MzYiIHR5cGU9InRuczpQb3J0VHlwZTUzNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUzNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MzYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTM2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MzYiIGJpbmRpbmc9InRuczpCaW5kaW5nNTM2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUzNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUzNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUzNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTM3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTM3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUzNyIgbmFtZT0iSW5wdXQ1MzciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTM3IiBuYW1lPSJPdXRwdXQ1MzciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUzNyIgdHlwZT0idG5zOlBvcnRUeXBlNTM3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTM3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUzNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1MzciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUzNyIgYmluZGluZz0idG5zOkJpbmRpbmc1MzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTM4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTM4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTM4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUzOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MzgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MzgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTM4IiBuYW1lPSJJbnB1dDUzOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MzgiIG5hbWU9Ik91dHB1dDUzOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTM4IiB0eXBlPSJ0bnM6UG9ydFR5cGU1MzgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MzgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTM4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUzOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTM4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzUzOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1MzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTM5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTUzOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUzOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MzkiIG5hbWU9IklucHV0NTM5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUzOSIgbmFtZT0iT3V0cHV0NTM5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1MzkiIHR5cGU9InRuczpQb3J0VHlwZTUzOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUzOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241MzkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTM5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MzkiIGJpbmRpbmc9InRuczpCaW5kaW5nNTM5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU0MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU0MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU0MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTQwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTQwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU0MCIgbmFtZT0iSW5wdXQ1NDAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTQwIiBuYW1lPSJPdXRwdXQ1NDAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU0MCIgdHlwZT0idG5zOlBvcnRUeXBlNTQwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTQwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU0MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NDAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU0MCIgYmluZGluZz0idG5zOkJpbmRpbmc1NDAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTQxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTQxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU0MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NDEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NDEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTQxIiBuYW1lPSJJbnB1dDU0MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NDEiIG5hbWU9Ik91dHB1dDU0MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTQxIiB0eXBlPSJ0bnM6UG9ydFR5cGU1NDEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NDEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTQxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU0MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTQxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzU0MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU0MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU0MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NDIiIG5hbWU9IklucHV0NTQyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU0MiIgbmFtZT0iT3V0cHV0NTQyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NDIiIHR5cGU9InRuczpQb3J0VHlwZTU0MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU0MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NDIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTQyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NDIiIGJpbmRpbmc9InRuczpCaW5kaW5nNTQyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU0MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU0MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU0MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTQzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTQzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU0MyIgbmFtZT0iSW5wdXQ1NDMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTQzIiBuYW1lPSJPdXRwdXQ1NDMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU0MyIgdHlwZT0idG5zOlBvcnRUeXBlNTQzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTQzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU0MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NDMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU0MyIgYmluZGluZz0idG5zOkJpbmRpbmc1NDMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTQ0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTQ0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU0NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NDQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NDQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTQ0IiBuYW1lPSJJbnB1dDU0NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NDQiIG5hbWU9Ik91dHB1dDU0NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTQ0IiB0eXBlPSJ0bnM6UG9ydFR5cGU1NDQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NDQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTQ0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU0NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTQ0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU0NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU0NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU0NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NDUiIG5hbWU9IklucHV0NTQ1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU0NSIgbmFtZT0iT3V0cHV0NTQ1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NDUiIHR5cGU9InRuczpQb3J0VHlwZTU0NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU0NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NDUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTQ1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NDUiIGJpbmRpbmc9InRuczpCaW5kaW5nNTQ1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU0NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU0NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU0NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTQ2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTQ2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU0NiIgbmFtZT0iSW5wdXQ1NDYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTQ2IiBuYW1lPSJPdXRwdXQ1NDYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU0NiIgdHlwZT0idG5zOlBvcnRUeXBlNTQ2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTQ2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU0NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NDYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU0NiIgYmluZGluZz0idG5zOkJpbmRpbmc1NDYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTQ3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTQ3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU0NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NDciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NDciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTQ3IiBuYW1lPSJJbnB1dDU0NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NDciIG5hbWU9Ik91dHB1dDU0NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTQ3IiB0eXBlPSJ0bnM6UG9ydFR5cGU1NDciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NDciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTQ3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU0NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTQ3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU0NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU0OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU0OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NDgiIG5hbWU9IklucHV0NTQ4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU0OCIgbmFtZT0iT3V0cHV0NTQ4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NDgiIHR5cGU9InRuczpQb3J0VHlwZTU0OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU0OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NDgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTQ4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NDgiIGJpbmRpbmc9InRuczpCaW5kaW5nNTQ4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU0OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU0OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU0OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTQ5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTQ5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU0OSIgbmFtZT0iSW5wdXQ1NDkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTQ5IiBuYW1lPSJPdXRwdXQ1NDkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU0OSIgdHlwZT0idG5zOlBvcnRUeXBlNTQ5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTQ5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU0OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NDkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU0OSIgYmluZGluZz0idG5zOkJpbmRpbmc1NDkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTUwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTUwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTUwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU1MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTUwIiBuYW1lPSJJbnB1dDU1MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NTAiIG5hbWU9Ik91dHB1dDU1MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTUwIiB0eXBlPSJ0bnM6UG9ydFR5cGU1NTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTUwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU1MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTUwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzU1MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTUxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU1MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU1MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NTEiIG5hbWU9IklucHV0NTUxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU1MSIgbmFtZT0iT3V0cHV0NTUxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NTEiIHR5cGU9InRuczpQb3J0VHlwZTU1MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU1MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTUxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NTEiIGJpbmRpbmc9InRuczpCaW5kaW5nNTUxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU1MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU1MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU1MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTUyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTUyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU1MiIgbmFtZT0iSW5wdXQ1NTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTUyIiBuYW1lPSJPdXRwdXQ1NTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU1MiIgdHlwZT0idG5zOlBvcnRUeXBlNTUyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTUyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU1MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU1MiIgYmluZGluZz0idG5zOkJpbmRpbmc1NTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTUzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTUzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTUzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU1MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTUzIiBuYW1lPSJJbnB1dDU1MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NTMiIG5hbWU9Ik91dHB1dDU1MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTUzIiB0eXBlPSJ0bnM6UG9ydFR5cGU1NTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTUzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU1MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTUzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzU1MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTU0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU1NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU1NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NTQiIG5hbWU9IklucHV0NTU0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU1NCIgbmFtZT0iT3V0cHV0NTU0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NTQiIHR5cGU9InRuczpQb3J0VHlwZTU1NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU1NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTU0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NTQiIGJpbmRpbmc9InRuczpCaW5kaW5nNTU0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU1NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU1NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU1NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTU1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTU1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU1NSIgbmFtZT0iSW5wdXQ1NTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTU1IiBuYW1lPSJPdXRwdXQ1NTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU1NSIgdHlwZT0idG5zOlBvcnRUeXBlNTU1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTU1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU1NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU1NSIgYmluZGluZz0idG5zOkJpbmRpbmc1NTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTU2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTU2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTU2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU1NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTU2IiBuYW1lPSJJbnB1dDU1NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NTYiIG5hbWU9Ik91dHB1dDU1NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTU2IiB0eXBlPSJ0bnM6UG9ydFR5cGU1NTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTU2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU1NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTU2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU1NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTU3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU1NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU1NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NTciIG5hbWU9IklucHV0NTU3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU1NyIgbmFtZT0iT3V0cHV0NTU3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NTciIHR5cGU9InRuczpQb3J0VHlwZTU1NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU1NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTU3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NTciIGJpbmRpbmc9InRuczpCaW5kaW5nNTU3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU1OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU1OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU1OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTU4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTU4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU1OCIgbmFtZT0iSW5wdXQ1NTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTU4IiBuYW1lPSJPdXRwdXQ1NTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU1OCIgdHlwZT0idG5zOlBvcnRUeXBlNTU4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTU4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU1OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU1OCIgYmluZGluZz0idG5zOkJpbmRpbmc1NTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTU5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTU5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTU5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU1OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTU5IiBuYW1lPSJJbnB1dDU1OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NTkiIG5hbWU9Ik91dHB1dDU1OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTU5IiB0eXBlPSJ0bnM6UG9ydFR5cGU1NTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTU5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU1OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTU5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU1OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTYwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU2MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU2MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NjAiIG5hbWU9IklucHV0NTYwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU2MCIgbmFtZT0iT3V0cHV0NTYwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NjAiIHR5cGU9InRuczpQb3J0VHlwZTU2MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU2MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTYwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NjAiIGJpbmRpbmc9InRuczpCaW5kaW5nNTYwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU2MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU2MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU2MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTYxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTYxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU2MSIgbmFtZT0iSW5wdXQ1NjEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTYxIiBuYW1lPSJPdXRwdXQ1NjEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU2MSIgdHlwZT0idG5zOlBvcnRUeXBlNTYxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTYxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU2MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NjEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU2MSIgYmluZGluZz0idG5zOkJpbmRpbmc1NjEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTYyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTYyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTYyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU2MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NjIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTYyIiBuYW1lPSJJbnB1dDU2MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NjIiIG5hbWU9Ik91dHB1dDU2MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTYyIiB0eXBlPSJ0bnM6UG9ydFR5cGU1NjIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTYyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU2MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTYyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzU2MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTYzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU2MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU2MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NjMiIG5hbWU9IklucHV0NTYzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU2MyIgbmFtZT0iT3V0cHV0NTYzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NjMiIHR5cGU9InRuczpQb3J0VHlwZTU2MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU2MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTYzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NjMiIGJpbmRpbmc9InRuczpCaW5kaW5nNTYzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU2NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU2NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU2NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTY0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTY0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU2NCIgbmFtZT0iSW5wdXQ1NjQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTY0IiBuYW1lPSJPdXRwdXQ1NjQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU2NCIgdHlwZT0idG5zOlBvcnRUeXBlNTY0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTY0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU2NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NjQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU2NCIgYmluZGluZz0idG5zOkJpbmRpbmc1NjQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTY1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTY1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTY1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU2NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NjUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTY1IiBuYW1lPSJJbnB1dDU2NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NjUiIG5hbWU9Ik91dHB1dDU2NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTY1IiB0eXBlPSJ0bnM6UG9ydFR5cGU1NjUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTY1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU2NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTY1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU2NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTY2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU2NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU2NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NjYiIG5hbWU9IklucHV0NTY2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU2NiIgbmFtZT0iT3V0cHV0NTY2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NjYiIHR5cGU9InRuczpQb3J0VHlwZTU2NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU2NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTY2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NjYiIGJpbmRpbmc9InRuczpCaW5kaW5nNTY2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU2NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU2NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU2NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTY3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTY3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU2NyIgbmFtZT0iSW5wdXQ1NjciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTY3IiBuYW1lPSJPdXRwdXQ1NjciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU2NyIgdHlwZT0idG5zOlBvcnRUeXBlNTY3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTY3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU2NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NjciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU2NyIgYmluZGluZz0idG5zOkJpbmRpbmc1NjciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTY4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTY4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTY4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU2OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NjgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTY4IiBuYW1lPSJJbnB1dDU2OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NjgiIG5hbWU9Ik91dHB1dDU2OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTY4IiB0eXBlPSJ0bnM6UG9ydFR5cGU1NjgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTY4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU2OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTY4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU2OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTY5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU2OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU2OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NjkiIG5hbWU9IklucHV0NTY5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU2OSIgbmFtZT0iT3V0cHV0NTY5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NjkiIHR5cGU9InRuczpQb3J0VHlwZTU2OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU2OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTY5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NjkiIGJpbmRpbmc9InRuczpCaW5kaW5nNTY5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU3MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU3MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU3MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTcwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTcwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU3MCIgbmFtZT0iSW5wdXQ1NzAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTcwIiBuYW1lPSJPdXRwdXQ1NzAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU3MCIgdHlwZT0idG5zOlBvcnRUeXBlNTcwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTcwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU3MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NzAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU3MCIgYmluZGluZz0idG5zOkJpbmRpbmc1NzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTcxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTcxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTcxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU3MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NzEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NzEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTcxIiBuYW1lPSJJbnB1dDU3MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NzEiIG5hbWU9Ik91dHB1dDU3MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTcxIiB0eXBlPSJ0bnM6UG9ydFR5cGU1NzEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NzEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTcxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU3MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTcxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzU3MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTcyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU3MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU3MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NzIiIG5hbWU9IklucHV0NTcyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU3MiIgbmFtZT0iT3V0cHV0NTcyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NzIiIHR5cGU9InRuczpQb3J0VHlwZTU3MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU3MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NzIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTcyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NzIiIGJpbmRpbmc9InRuczpCaW5kaW5nNTcyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU3MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU3MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU3MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTczIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTczIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU3MyIgbmFtZT0iSW5wdXQ1NzMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTczIiBuYW1lPSJPdXRwdXQ1NzMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU3MyIgdHlwZT0idG5zOlBvcnRUeXBlNTczIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTczIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU3MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NzMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU3MyIgYmluZGluZz0idG5zOkJpbmRpbmc1NzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTc0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTc0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTc0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU3NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NzQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NzQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTc0IiBuYW1lPSJJbnB1dDU3NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NzQiIG5hbWU9Ik91dHB1dDU3NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTc0IiB0eXBlPSJ0bnM6UG9ydFR5cGU1NzQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NzQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTc0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU3NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTc0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU3NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTc1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU3NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU3NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NzUiIG5hbWU9IklucHV0NTc1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU3NSIgbmFtZT0iT3V0cHV0NTc1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NzUiIHR5cGU9InRuczpQb3J0VHlwZTU3NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU3NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NzUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTc1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NzUiIGJpbmRpbmc9InRuczpCaW5kaW5nNTc1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU3NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU3NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU3NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTc2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTc2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU3NiIgbmFtZT0iSW5wdXQ1NzYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTc2IiBuYW1lPSJPdXRwdXQ1NzYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU3NiIgdHlwZT0idG5zOlBvcnRUeXBlNTc2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTc2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU3NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NzYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU3NiIgYmluZGluZz0idG5zOkJpbmRpbmc1NzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTc3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTc3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTc3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU3NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NzciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NzciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTc3IiBuYW1lPSJJbnB1dDU3NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NzciIG5hbWU9Ik91dHB1dDU3NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTc3IiB0eXBlPSJ0bnM6UG9ydFR5cGU1NzciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NzciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTc3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU3NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTc3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU3NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1NzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTc4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU3OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU3OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NzgiIG5hbWU9IklucHV0NTc4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU3OCIgbmFtZT0iT3V0cHV0NTc4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1NzgiIHR5cGU9InRuczpQb3J0VHlwZTU3OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU3OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241NzgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTc4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NzgiIGJpbmRpbmc9InRuczpCaW5kaW5nNTc4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU3OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU3OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU3OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTc5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTc5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU3OSIgbmFtZT0iSW5wdXQ1NzkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTc5IiBuYW1lPSJPdXRwdXQ1NzkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU3OSIgdHlwZT0idG5zOlBvcnRUeXBlNTc5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTc5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU3OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1NzkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU3OSIgYmluZGluZz0idG5zOkJpbmRpbmc1NzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTgwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTgwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTgwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU4MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1ODAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241ODAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTgwIiBuYW1lPSJJbnB1dDU4MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1ODAiIG5hbWU9Ik91dHB1dDU4MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTgwIiB0eXBlPSJ0bnM6UG9ydFR5cGU1ODAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241ODAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTgwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU4MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTgwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzU4MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1ODEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1ODEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1ODEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTgxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU4MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU4MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1ODEiIG5hbWU9IklucHV0NTgxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU4MSIgbmFtZT0iT3V0cHV0NTgxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1ODEiIHR5cGU9InRuczpQb3J0VHlwZTU4MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU4MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241ODEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTgxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1ODEiIGJpbmRpbmc9InRuczpCaW5kaW5nNTgxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU4MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU4MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU4MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1ODIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTgyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTgyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU4MiIgbmFtZT0iSW5wdXQ1ODIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTgyIiBuYW1lPSJPdXRwdXQ1ODIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU4MiIgdHlwZT0idG5zOlBvcnRUeXBlNTgyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTgyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU4MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1ODIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU4MiIgYmluZGluZz0idG5zOkJpbmRpbmc1ODIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTgzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTgzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTgzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU4MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1ODMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241ODMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTgzIiBuYW1lPSJJbnB1dDU4MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1ODMiIG5hbWU9Ik91dHB1dDU4MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTgzIiB0eXBlPSJ0bnM6UG9ydFR5cGU1ODMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241ODMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTgzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU4MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTgzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzU4MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1ODQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1ODQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1ODQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTg0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU4NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU4NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1ODQiIG5hbWU9IklucHV0NTg0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU4NCIgbmFtZT0iT3V0cHV0NTg0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1ODQiIHR5cGU9InRuczpQb3J0VHlwZTU4NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU4NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241ODQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTg0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1ODQiIGJpbmRpbmc9InRuczpCaW5kaW5nNTg0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU4NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU4NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU4NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1ODUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTg1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTg1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU4NSIgbmFtZT0iSW5wdXQ1ODUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTg1IiBuYW1lPSJPdXRwdXQ1ODUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU4NSIgdHlwZT0idG5zOlBvcnRUeXBlNTg1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTg1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU4NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1ODUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU4NSIgYmluZGluZz0idG5zOkJpbmRpbmc1ODUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTg2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTg2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTg2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU4NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1ODYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241ODYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTg2IiBuYW1lPSJJbnB1dDU4NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1ODYiIG5hbWU9Ik91dHB1dDU4NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTg2IiB0eXBlPSJ0bnM6UG9ydFR5cGU1ODYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241ODYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTg2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU4NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTg2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU4NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1ODciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1ODciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1ODciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTg3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU4NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU4NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1ODciIG5hbWU9IklucHV0NTg3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU4NyIgbmFtZT0iT3V0cHV0NTg3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1ODciIHR5cGU9InRuczpQb3J0VHlwZTU4NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU4NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241ODciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTg3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1ODciIGJpbmRpbmc9InRuczpCaW5kaW5nNTg3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU4OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU4OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU4OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1ODgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTg4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTg4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU4OCIgbmFtZT0iSW5wdXQ1ODgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTg4IiBuYW1lPSJPdXRwdXQ1ODgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU4OCIgdHlwZT0idG5zOlBvcnRUeXBlNTg4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTg4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU4OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1ODgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU4OCIgYmluZGluZz0idG5zOkJpbmRpbmc1ODgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTg5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTg5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTg5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU4OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1ODkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241ODkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTg5IiBuYW1lPSJJbnB1dDU4OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1ODkiIG5hbWU9Ik91dHB1dDU4OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTg5IiB0eXBlPSJ0bnM6UG9ydFR5cGU1ODkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241ODkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTg5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU4OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTg5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU4OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1OTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1OTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1OTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTkwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU5MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU5MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1OTAiIG5hbWU9IklucHV0NTkwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU5MCIgbmFtZT0iT3V0cHV0NTkwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1OTAiIHR5cGU9InRuczpQb3J0VHlwZTU5MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU5MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241OTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTkwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1OTAiIGJpbmRpbmc9InRuczpCaW5kaW5nNTkwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU5MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU5MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU5MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1OTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTkxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTkxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU5MSIgbmFtZT0iSW5wdXQ1OTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTkxIiBuYW1lPSJPdXRwdXQ1OTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU5MSIgdHlwZT0idG5zOlBvcnRUeXBlNTkxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTkxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU5MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1OTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU5MSIgYmluZGluZz0idG5zOkJpbmRpbmc1OTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTkyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTkyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTkyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU5MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1OTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241OTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTkyIiBuYW1lPSJJbnB1dDU5MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1OTIiIG5hbWU9Ik91dHB1dDU5MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTkyIiB0eXBlPSJ0bnM6UG9ydFR5cGU1OTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241OTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTkyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU5MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTkyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzU5MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1OTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1OTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1OTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTkzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU5MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU5MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1OTMiIG5hbWU9IklucHV0NTkzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU5MyIgbmFtZT0iT3V0cHV0NTkzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1OTMiIHR5cGU9InRuczpQb3J0VHlwZTU5MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU5MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241OTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTkzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1OTMiIGJpbmRpbmc9InRuczpCaW5kaW5nNTkzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU5NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU5NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU5NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1OTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTk0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTk0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU5NCIgbmFtZT0iSW5wdXQ1OTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTk0IiBuYW1lPSJPdXRwdXQ1OTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU5NCIgdHlwZT0idG5zOlBvcnRUeXBlNTk0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTk0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU5NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1OTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU5NCIgYmluZGluZz0idG5zOkJpbmRpbmc1OTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTk1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTk1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTk1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU5NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1OTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241OTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTk1IiBuYW1lPSJJbnB1dDU5NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1OTUiIG5hbWU9Ik91dHB1dDU5NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTk1IiB0eXBlPSJ0bnM6UG9ydFR5cGU1OTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241OTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTk1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU5NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTk1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU5NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1OTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1OTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1OTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTk2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU5NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU5NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1OTYiIG5hbWU9IklucHV0NTk2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU5NiIgbmFtZT0iT3V0cHV0NTk2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1OTYiIHR5cGU9InRuczpQb3J0VHlwZTU5NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU5NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241OTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTk2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1OTYiIGJpbmRpbmc9InRuczpCaW5kaW5nNTk2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU5NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU5NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTU5NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1OTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTk3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTk3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU5NyIgbmFtZT0iSW5wdXQ1OTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNTk3IiBuYW1lPSJPdXRwdXQ1OTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU5NyIgdHlwZT0idG5zOlBvcnRUeXBlNTk3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTk3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU5NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1OTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU5NyIgYmluZGluZz0idG5zOkJpbmRpbmc1OTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNTk4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTk4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTk4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDU5OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1OTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241OTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNTk4IiBuYW1lPSJJbnB1dDU5OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1OTgiIG5hbWU9Ik91dHB1dDU5OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTk4IiB0eXBlPSJ0bnM6UG9ydFR5cGU1OTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241OTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTk4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU5OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NTk4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU5OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1OTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ1OTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1OTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTk5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTU5OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU5OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1OTkiIG5hbWU9IklucHV0NTk5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU5OSIgbmFtZT0iT3V0cHV0NTk5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc1OTkiIHR5cGU9InRuczpQb3J0VHlwZTU5OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU5OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb241OTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTk5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1OTkiIGJpbmRpbmc9InRuczpCaW5kaW5nNTk5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYwMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYwMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYwMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjAwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjAwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYwMCIgbmFtZT0iSW5wdXQ2MDAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjAwIiBuYW1lPSJPdXRwdXQ2MDAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYwMCIgdHlwZT0idG5zOlBvcnRUeXBlNjAwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjAwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYwMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MDAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYwMCIgYmluZGluZz0idG5zOkJpbmRpbmc2MDAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjAxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjAxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjAxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYwMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MDEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MDEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjAxIiBuYW1lPSJJbnB1dDYwMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MDEiIG5hbWU9Ik91dHB1dDYwMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjAxIiB0eXBlPSJ0bnM6UG9ydFR5cGU2MDEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MDEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjAxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYwMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjAxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzYwMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjAyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYwMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYwMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MDIiIG5hbWU9IklucHV0NjAyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYwMiIgbmFtZT0iT3V0cHV0NjAyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MDIiIHR5cGU9InRuczpQb3J0VHlwZTYwMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYwMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MDIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjAyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MDIiIGJpbmRpbmc9InRuczpCaW5kaW5nNjAyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYwMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYwMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYwMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjAzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjAzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYwMyIgbmFtZT0iSW5wdXQ2MDMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjAzIiBuYW1lPSJPdXRwdXQ2MDMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYwMyIgdHlwZT0idG5zOlBvcnRUeXBlNjAzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjAzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYwMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MDMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYwMyIgYmluZGluZz0idG5zOkJpbmRpbmc2MDMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjA0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjA0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjA0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYwNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MDQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MDQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjA0IiBuYW1lPSJJbnB1dDYwNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MDQiIG5hbWU9Ik91dHB1dDYwNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjA0IiB0eXBlPSJ0bnM6UG9ydFR5cGU2MDQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MDQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjA0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYwNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjA0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzYwNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjA1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYwNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYwNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MDUiIG5hbWU9IklucHV0NjA1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYwNSIgbmFtZT0iT3V0cHV0NjA1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MDUiIHR5cGU9InRuczpQb3J0VHlwZTYwNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYwNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MDUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjA1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MDUiIGJpbmRpbmc9InRuczpCaW5kaW5nNjA1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYwNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYwNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYwNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjA2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjA2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYwNiIgbmFtZT0iSW5wdXQ2MDYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjA2IiBuYW1lPSJPdXRwdXQ2MDYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYwNiIgdHlwZT0idG5zOlBvcnRUeXBlNjA2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjA2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYwNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MDYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYwNiIgYmluZGluZz0idG5zOkJpbmRpbmc2MDYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjA3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjA3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjA3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYwNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MDciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MDciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjA3IiBuYW1lPSJJbnB1dDYwNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MDciIG5hbWU9Ik91dHB1dDYwNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjA3IiB0eXBlPSJ0bnM6UG9ydFR5cGU2MDciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MDciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjA3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYwNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjA3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzYwNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjA4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYwOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYwOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MDgiIG5hbWU9IklucHV0NjA4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYwOCIgbmFtZT0iT3V0cHV0NjA4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MDgiIHR5cGU9InRuczpQb3J0VHlwZTYwOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYwOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MDgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjA4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MDgiIGJpbmRpbmc9InRuczpCaW5kaW5nNjA4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYwOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYwOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYwOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjA5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjA5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYwOSIgbmFtZT0iSW5wdXQ2MDkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjA5IiBuYW1lPSJPdXRwdXQ2MDkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYwOSIgdHlwZT0idG5zOlBvcnRUeXBlNjA5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjA5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYwOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MDkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYwOSIgYmluZGluZz0idG5zOkJpbmRpbmc2MDkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjEwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjEwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjEwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYxMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjEwIiBuYW1lPSJJbnB1dDYxMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MTAiIG5hbWU9Ik91dHB1dDYxMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjEwIiB0eXBlPSJ0bnM6UG9ydFR5cGU2MTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjEwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYxMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjEwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzYxMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjExIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYxMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYxMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MTEiIG5hbWU9IklucHV0NjExIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYxMSIgbmFtZT0iT3V0cHV0NjExIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MTEiIHR5cGU9InRuczpQb3J0VHlwZTYxMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYxMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjExIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MTEiIGJpbmRpbmc9InRuczpCaW5kaW5nNjExIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYxMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYxMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYxMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjEyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjEyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYxMiIgbmFtZT0iSW5wdXQ2MTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjEyIiBuYW1lPSJPdXRwdXQ2MTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYxMiIgdHlwZT0idG5zOlBvcnRUeXBlNjEyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjEyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYxMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYxMiIgYmluZGluZz0idG5zOkJpbmRpbmc2MTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjEzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjEzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjEzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYxMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjEzIiBuYW1lPSJJbnB1dDYxMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MTMiIG5hbWU9Ik91dHB1dDYxMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjEzIiB0eXBlPSJ0bnM6UG9ydFR5cGU2MTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjEzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYxMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjEzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzYxMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjE0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYxNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYxNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MTQiIG5hbWU9IklucHV0NjE0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYxNCIgbmFtZT0iT3V0cHV0NjE0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MTQiIHR5cGU9InRuczpQb3J0VHlwZTYxNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYxNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjE0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MTQiIGJpbmRpbmc9InRuczpCaW5kaW5nNjE0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYxNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYxNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYxNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjE1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjE1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYxNSIgbmFtZT0iSW5wdXQ2MTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjE1IiBuYW1lPSJPdXRwdXQ2MTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYxNSIgdHlwZT0idG5zOlBvcnRUeXBlNjE1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjE1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYxNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYxNSIgYmluZGluZz0idG5zOkJpbmRpbmc2MTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjE2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjE2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjE2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYxNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjE2IiBuYW1lPSJJbnB1dDYxNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MTYiIG5hbWU9Ik91dHB1dDYxNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjE2IiB0eXBlPSJ0bnM6UG9ydFR5cGU2MTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjE2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYxNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjE2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzYxNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjE3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYxNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYxNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MTciIG5hbWU9IklucHV0NjE3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYxNyIgbmFtZT0iT3V0cHV0NjE3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MTciIHR5cGU9InRuczpQb3J0VHlwZTYxNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYxNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjE3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MTciIGJpbmRpbmc9InRuczpCaW5kaW5nNjE3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYxOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYxOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYxOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjE4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjE4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYxOCIgbmFtZT0iSW5wdXQ2MTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjE4IiBuYW1lPSJPdXRwdXQ2MTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYxOCIgdHlwZT0idG5zOlBvcnRUeXBlNjE4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjE4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYxOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYxOCIgYmluZGluZz0idG5zOkJpbmRpbmc2MTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjE5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjE5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjE5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYxOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjE5IiBuYW1lPSJJbnB1dDYxOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MTkiIG5hbWU9Ik91dHB1dDYxOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjE5IiB0eXBlPSJ0bnM6UG9ydFR5cGU2MTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjE5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYxOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjE5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzYxOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjIwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYyMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYyMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MjAiIG5hbWU9IklucHV0NjIwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYyMCIgbmFtZT0iT3V0cHV0NjIwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MjAiIHR5cGU9InRuczpQb3J0VHlwZTYyMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYyMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjIwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MjAiIGJpbmRpbmc9InRuczpCaW5kaW5nNjIwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYyMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYyMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYyMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjIxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjIxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYyMSIgbmFtZT0iSW5wdXQ2MjEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjIxIiBuYW1lPSJPdXRwdXQ2MjEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYyMSIgdHlwZT0idG5zOlBvcnRUeXBlNjIxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjIxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYyMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MjEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYyMSIgYmluZGluZz0idG5zOkJpbmRpbmc2MjEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjIyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjIyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjIyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYyMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MjIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjIyIiBuYW1lPSJJbnB1dDYyMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MjIiIG5hbWU9Ik91dHB1dDYyMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjIyIiB0eXBlPSJ0bnM6UG9ydFR5cGU2MjIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjIyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYyMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjIyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzYyMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjIzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYyMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYyMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MjMiIG5hbWU9IklucHV0NjIzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYyMyIgbmFtZT0iT3V0cHV0NjIzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MjMiIHR5cGU9InRuczpQb3J0VHlwZTYyMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYyMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjIzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MjMiIGJpbmRpbmc9InRuczpCaW5kaW5nNjIzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYyNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYyNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYyNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjI0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjI0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYyNCIgbmFtZT0iSW5wdXQ2MjQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjI0IiBuYW1lPSJPdXRwdXQ2MjQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYyNCIgdHlwZT0idG5zOlBvcnRUeXBlNjI0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjI0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYyNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MjQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYyNCIgYmluZGluZz0idG5zOkJpbmRpbmc2MjQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjI1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjI1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjI1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYyNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MjUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjI1IiBuYW1lPSJJbnB1dDYyNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MjUiIG5hbWU9Ik91dHB1dDYyNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjI1IiB0eXBlPSJ0bnM6UG9ydFR5cGU2MjUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjI1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYyNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjI1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzYyNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjI2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYyNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYyNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MjYiIG5hbWU9IklucHV0NjI2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYyNiIgbmFtZT0iT3V0cHV0NjI2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MjYiIHR5cGU9InRuczpQb3J0VHlwZTYyNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYyNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjI2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MjYiIGJpbmRpbmc9InRuczpCaW5kaW5nNjI2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYyNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYyNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYyNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjI3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjI3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYyNyIgbmFtZT0iSW5wdXQ2MjciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjI3IiBuYW1lPSJPdXRwdXQ2MjciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYyNyIgdHlwZT0idG5zOlBvcnRUeXBlNjI3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjI3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYyNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MjciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYyNyIgYmluZGluZz0idG5zOkJpbmRpbmc2MjciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjI4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjI4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjI4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYyOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MjgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjI4IiBuYW1lPSJJbnB1dDYyOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MjgiIG5hbWU9Ik91dHB1dDYyOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjI4IiB0eXBlPSJ0bnM6UG9ydFR5cGU2MjgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjI4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYyOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjI4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzYyOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjI5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYyOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYyOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MjkiIG5hbWU9IklucHV0NjI5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYyOSIgbmFtZT0iT3V0cHV0NjI5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MjkiIHR5cGU9InRuczpQb3J0VHlwZTYyOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYyOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjI5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MjkiIGJpbmRpbmc9InRuczpCaW5kaW5nNjI5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYzMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYzMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYzMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjMwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjMwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYzMCIgbmFtZT0iSW5wdXQ2MzAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjMwIiBuYW1lPSJPdXRwdXQ2MzAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYzMCIgdHlwZT0idG5zOlBvcnRUeXBlNjMwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjMwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYzMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MzAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYzMCIgYmluZGluZz0idG5zOkJpbmRpbmc2MzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjMxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjMxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjMxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYzMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MzEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MzEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjMxIiBuYW1lPSJJbnB1dDYzMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MzEiIG5hbWU9Ik91dHB1dDYzMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjMxIiB0eXBlPSJ0bnM6UG9ydFR5cGU2MzEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MzEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjMxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYzMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjMxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzYzMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjMyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYzMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYzMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MzIiIG5hbWU9IklucHV0NjMyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYzMiIgbmFtZT0iT3V0cHV0NjMyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MzIiIHR5cGU9InRuczpQb3J0VHlwZTYzMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYzMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MzIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjMyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MzIiIGJpbmRpbmc9InRuczpCaW5kaW5nNjMyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYzMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYzMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYzMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjMzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjMzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYzMyIgbmFtZT0iSW5wdXQ2MzMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjMzIiBuYW1lPSJPdXRwdXQ2MzMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYzMyIgdHlwZT0idG5zOlBvcnRUeXBlNjMzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjMzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYzMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MzMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYzMyIgYmluZGluZz0idG5zOkJpbmRpbmc2MzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjM0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjM0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjM0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYzNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MzQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MzQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjM0IiBuYW1lPSJJbnB1dDYzNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MzQiIG5hbWU9Ik91dHB1dDYzNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjM0IiB0eXBlPSJ0bnM6UG9ydFR5cGU2MzQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MzQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjM0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYzNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjM0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzYzNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjM1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYzNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYzNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MzUiIG5hbWU9IklucHV0NjM1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYzNSIgbmFtZT0iT3V0cHV0NjM1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MzUiIHR5cGU9InRuczpQb3J0VHlwZTYzNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYzNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MzUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjM1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MzUiIGJpbmRpbmc9InRuczpCaW5kaW5nNjM1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYzNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYzNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYzNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjM2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjM2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYzNiIgbmFtZT0iSW5wdXQ2MzYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjM2IiBuYW1lPSJPdXRwdXQ2MzYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYzNiIgdHlwZT0idG5zOlBvcnRUeXBlNjM2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjM2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYzNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MzYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYzNiIgYmluZGluZz0idG5zOkJpbmRpbmc2MzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjM3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjM3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjM3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYzNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MzciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MzciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjM3IiBuYW1lPSJJbnB1dDYzNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MzciIG5hbWU9Ik91dHB1dDYzNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjM3IiB0eXBlPSJ0bnM6UG9ydFR5cGU2MzciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MzciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjM3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYzNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjM3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzYzNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2MzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjM4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYzOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYzOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MzgiIG5hbWU9IklucHV0NjM4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYzOCIgbmFtZT0iT3V0cHV0NjM4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2MzgiIHR5cGU9InRuczpQb3J0VHlwZTYzOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYzOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242MzgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjM4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MzgiIGJpbmRpbmc9InRuczpCaW5kaW5nNjM4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYzOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYzOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTYzOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjM5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjM5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYzOSIgbmFtZT0iSW5wdXQ2MzkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjM5IiBuYW1lPSJPdXRwdXQ2MzkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYzOSIgdHlwZT0idG5zOlBvcnRUeXBlNjM5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjM5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYzOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2MzkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYzOSIgYmluZGluZz0idG5zOkJpbmRpbmc2MzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjQwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjQwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY0MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NDAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NDAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjQwIiBuYW1lPSJJbnB1dDY0MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NDAiIG5hbWU9Ik91dHB1dDY0MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjQwIiB0eXBlPSJ0bnM6UG9ydFR5cGU2NDAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NDAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjQwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY0MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjQwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzY0MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY0MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY0MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NDEiIG5hbWU9IklucHV0NjQxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY0MSIgbmFtZT0iT3V0cHV0NjQxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NDEiIHR5cGU9InRuczpQb3J0VHlwZTY0MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY0MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NDEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjQxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NDEiIGJpbmRpbmc9InRuczpCaW5kaW5nNjQxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY0MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY0MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY0MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjQyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjQyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY0MiIgbmFtZT0iSW5wdXQ2NDIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjQyIiBuYW1lPSJPdXRwdXQ2NDIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY0MiIgdHlwZT0idG5zOlBvcnRUeXBlNjQyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjQyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY0MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NDIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY0MiIgYmluZGluZz0idG5zOkJpbmRpbmc2NDIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjQzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjQzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY0MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NDMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NDMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjQzIiBuYW1lPSJJbnB1dDY0MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NDMiIG5hbWU9Ik91dHB1dDY0MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjQzIiB0eXBlPSJ0bnM6UG9ydFR5cGU2NDMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NDMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjQzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY0MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjQzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzY0MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY0NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY0NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NDQiIG5hbWU9IklucHV0NjQ0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY0NCIgbmFtZT0iT3V0cHV0NjQ0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NDQiIHR5cGU9InRuczpQb3J0VHlwZTY0NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY0NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NDQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjQ0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NDQiIGJpbmRpbmc9InRuczpCaW5kaW5nNjQ0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY0NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY0NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY0NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjQ1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjQ1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY0NSIgbmFtZT0iSW5wdXQ2NDUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjQ1IiBuYW1lPSJPdXRwdXQ2NDUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY0NSIgdHlwZT0idG5zOlBvcnRUeXBlNjQ1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjQ1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY0NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NDUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY0NSIgYmluZGluZz0idG5zOkJpbmRpbmc2NDUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjQ2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjQ2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY0NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NDYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NDYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjQ2IiBuYW1lPSJJbnB1dDY0NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NDYiIG5hbWU9Ik91dHB1dDY0NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjQ2IiB0eXBlPSJ0bnM6UG9ydFR5cGU2NDYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NDYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjQ2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY0NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjQ2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY0NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY0NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY0NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NDciIG5hbWU9IklucHV0NjQ3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY0NyIgbmFtZT0iT3V0cHV0NjQ3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NDciIHR5cGU9InRuczpQb3J0VHlwZTY0NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY0NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NDciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjQ3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NDciIGJpbmRpbmc9InRuczpCaW5kaW5nNjQ3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY0OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY0OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY0OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjQ4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjQ4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY0OCIgbmFtZT0iSW5wdXQ2NDgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjQ4IiBuYW1lPSJPdXRwdXQ2NDgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY0OCIgdHlwZT0idG5zOlBvcnRUeXBlNjQ4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjQ4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY0OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NDgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY0OCIgYmluZGluZz0idG5zOkJpbmRpbmc2NDgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjQ5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjQ5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY0OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NDkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NDkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjQ5IiBuYW1lPSJJbnB1dDY0OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NDkiIG5hbWU9Ik91dHB1dDY0OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjQ5IiB0eXBlPSJ0bnM6UG9ydFR5cGU2NDkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NDkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjQ5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY0OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjQ5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY0OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjUwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY1MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY1MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NTAiIG5hbWU9IklucHV0NjUwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY1MCIgbmFtZT0iT3V0cHV0NjUwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NTAiIHR5cGU9InRuczpQb3J0VHlwZTY1MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY1MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjUwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NTAiIGJpbmRpbmc9InRuczpCaW5kaW5nNjUwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY1MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY1MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY1MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjUxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjUxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY1MSIgbmFtZT0iSW5wdXQ2NTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjUxIiBuYW1lPSJPdXRwdXQ2NTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY1MSIgdHlwZT0idG5zOlBvcnRUeXBlNjUxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjUxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY1MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY1MSIgYmluZGluZz0idG5zOkJpbmRpbmc2NTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjUyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjUyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjUyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY1MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjUyIiBuYW1lPSJJbnB1dDY1MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NTIiIG5hbWU9Ik91dHB1dDY1MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjUyIiB0eXBlPSJ0bnM6UG9ydFR5cGU2NTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjUyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY1MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjUyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzY1MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjUzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY1MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY1MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NTMiIG5hbWU9IklucHV0NjUzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY1MyIgbmFtZT0iT3V0cHV0NjUzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NTMiIHR5cGU9InRuczpQb3J0VHlwZTY1MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY1MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjUzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NTMiIGJpbmRpbmc9InRuczpCaW5kaW5nNjUzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY1NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY1NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY1NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjU0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjU0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY1NCIgbmFtZT0iSW5wdXQ2NTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjU0IiBuYW1lPSJPdXRwdXQ2NTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY1NCIgdHlwZT0idG5zOlBvcnRUeXBlNjU0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjU0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY1NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY1NCIgYmluZGluZz0idG5zOkJpbmRpbmc2NTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjU1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjU1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjU1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY1NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjU1IiBuYW1lPSJJbnB1dDY1NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NTUiIG5hbWU9Ik91dHB1dDY1NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjU1IiB0eXBlPSJ0bnM6UG9ydFR5cGU2NTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjU1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY1NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjU1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY1NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjU2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY1NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY1NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NTYiIG5hbWU9IklucHV0NjU2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY1NiIgbmFtZT0iT3V0cHV0NjU2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NTYiIHR5cGU9InRuczpQb3J0VHlwZTY1NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY1NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjU2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NTYiIGJpbmRpbmc9InRuczpCaW5kaW5nNjU2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY1NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY1NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY1NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjU3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjU3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY1NyIgbmFtZT0iSW5wdXQ2NTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjU3IiBuYW1lPSJPdXRwdXQ2NTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY1NyIgdHlwZT0idG5zOlBvcnRUeXBlNjU3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjU3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY1NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY1NyIgYmluZGluZz0idG5zOkJpbmRpbmc2NTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjU4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjU4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjU4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY1OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjU4IiBuYW1lPSJJbnB1dDY1OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NTgiIG5hbWU9Ik91dHB1dDY1OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjU4IiB0eXBlPSJ0bnM6UG9ydFR5cGU2NTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjU4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY1OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjU4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY1OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjU5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY1OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY1OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NTkiIG5hbWU9IklucHV0NjU5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY1OSIgbmFtZT0iT3V0cHV0NjU5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NTkiIHR5cGU9InRuczpQb3J0VHlwZTY1OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY1OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjU5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NTkiIGJpbmRpbmc9InRuczpCaW5kaW5nNjU5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY2MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY2MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY2MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjYwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjYwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY2MCIgbmFtZT0iSW5wdXQ2NjAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjYwIiBuYW1lPSJPdXRwdXQ2NjAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY2MCIgdHlwZT0idG5zOlBvcnRUeXBlNjYwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjYwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY2MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NjAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY2MCIgYmluZGluZz0idG5zOkJpbmRpbmc2NjAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjYxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjYxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjYxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY2MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NjEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjYxIiBuYW1lPSJJbnB1dDY2MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NjEiIG5hbWU9Ik91dHB1dDY2MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjYxIiB0eXBlPSJ0bnM6UG9ydFR5cGU2NjEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjYxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY2MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjYxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzY2MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjYyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY2MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY2MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NjIiIG5hbWU9IklucHV0NjYyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY2MiIgbmFtZT0iT3V0cHV0NjYyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NjIiIHR5cGU9InRuczpQb3J0VHlwZTY2MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY2MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjYyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NjIiIGJpbmRpbmc9InRuczpCaW5kaW5nNjYyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY2MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY2MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY2MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjYzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjYzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY2MyIgbmFtZT0iSW5wdXQ2NjMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjYzIiBuYW1lPSJPdXRwdXQ2NjMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY2MyIgdHlwZT0idG5zOlBvcnRUeXBlNjYzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjYzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY2MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NjMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY2MyIgYmluZGluZz0idG5zOkJpbmRpbmc2NjMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjY0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjY0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjY0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY2NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NjQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjY0IiBuYW1lPSJJbnB1dDY2NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NjQiIG5hbWU9Ik91dHB1dDY2NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjY0IiB0eXBlPSJ0bnM6UG9ydFR5cGU2NjQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjY0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY2NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjY0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY2NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjY1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY2NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY2NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NjUiIG5hbWU9IklucHV0NjY1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY2NSIgbmFtZT0iT3V0cHV0NjY1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NjUiIHR5cGU9InRuczpQb3J0VHlwZTY2NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY2NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjY1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NjUiIGJpbmRpbmc9InRuczpCaW5kaW5nNjY1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY2NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY2NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY2NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjY2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjY2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY2NiIgbmFtZT0iSW5wdXQ2NjYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjY2IiBuYW1lPSJPdXRwdXQ2NjYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY2NiIgdHlwZT0idG5zOlBvcnRUeXBlNjY2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjY2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY2NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NjYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY2NiIgYmluZGluZz0idG5zOkJpbmRpbmc2NjYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjY3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjY3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjY3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY2NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NjciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjY3IiBuYW1lPSJJbnB1dDY2NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NjciIG5hbWU9Ik91dHB1dDY2NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjY3IiB0eXBlPSJ0bnM6UG9ydFR5cGU2NjciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjY3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY2NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjY3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY2NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjY4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY2OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY2OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NjgiIG5hbWU9IklucHV0NjY4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY2OCIgbmFtZT0iT3V0cHV0NjY4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NjgiIHR5cGU9InRuczpQb3J0VHlwZTY2OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY2OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjY4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NjgiIGJpbmRpbmc9InRuczpCaW5kaW5nNjY4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY2OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY2OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY2OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjY5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjY5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY2OSIgbmFtZT0iSW5wdXQ2NjkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjY5IiBuYW1lPSJPdXRwdXQ2NjkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY2OSIgdHlwZT0idG5zOlBvcnRUeXBlNjY5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjY5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY2OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NjkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY2OSIgYmluZGluZz0idG5zOkJpbmRpbmc2NjkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjcwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjcwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjcwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY3MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NzAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NzAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjcwIiBuYW1lPSJJbnB1dDY3MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NzAiIG5hbWU9Ik91dHB1dDY3MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjcwIiB0eXBlPSJ0bnM6UG9ydFR5cGU2NzAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NzAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjcwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY3MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjcwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzY3MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjcxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY3MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY3MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NzEiIG5hbWU9IklucHV0NjcxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY3MSIgbmFtZT0iT3V0cHV0NjcxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NzEiIHR5cGU9InRuczpQb3J0VHlwZTY3MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY3MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NzEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjcxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NzEiIGJpbmRpbmc9InRuczpCaW5kaW5nNjcxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY3MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY3MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY3MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjcyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjcyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY3MiIgbmFtZT0iSW5wdXQ2NzIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjcyIiBuYW1lPSJPdXRwdXQ2NzIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY3MiIgdHlwZT0idG5zOlBvcnRUeXBlNjcyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjcyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY3MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NzIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY3MiIgYmluZGluZz0idG5zOkJpbmRpbmc2NzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjczIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjczIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjczIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY3MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NzMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NzMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjczIiBuYW1lPSJJbnB1dDY3MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NzMiIG5hbWU9Ik91dHB1dDY3MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjczIiB0eXBlPSJ0bnM6UG9ydFR5cGU2NzMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NzMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjczIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY3MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjczIiBiaW5kaW5nPSJ0bnM6QmluZGluZzY3MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Njc0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY3NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY3NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NzQiIG5hbWU9IklucHV0Njc0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY3NCIgbmFtZT0iT3V0cHV0Njc0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NzQiIHR5cGU9InRuczpQb3J0VHlwZTY3NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY3NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NzQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjc0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NzQiIGJpbmRpbmc9InRuczpCaW5kaW5nNjc0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY3NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY3NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY3NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjc1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjc1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY3NSIgbmFtZT0iSW5wdXQ2NzUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjc1IiBuYW1lPSJPdXRwdXQ2NzUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY3NSIgdHlwZT0idG5zOlBvcnRUeXBlNjc1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjc1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY3NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NzUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY3NSIgYmluZGluZz0idG5zOkJpbmRpbmc2NzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjc2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Njc2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjc2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY3NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NzYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NzYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjc2IiBuYW1lPSJJbnB1dDY3NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NzYiIG5hbWU9Ik91dHB1dDY3NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjc2IiB0eXBlPSJ0bnM6UG9ydFR5cGU2NzYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NzYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjc2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY3NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Njc2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY3NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2NzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Njc3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY3NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY3NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NzciIG5hbWU9IklucHV0Njc3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY3NyIgbmFtZT0iT3V0cHV0Njc3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2NzciIHR5cGU9InRuczpQb3J0VHlwZTY3NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY3NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242NzciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjc3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NzciIGJpbmRpbmc9InRuczpCaW5kaW5nNjc3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY3OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY3OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY3OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjc4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjc4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY3OCIgbmFtZT0iSW5wdXQ2NzgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjc4IiBuYW1lPSJPdXRwdXQ2NzgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY3OCIgdHlwZT0idG5zOlBvcnRUeXBlNjc4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjc4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY3OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2NzgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY3OCIgYmluZGluZz0idG5zOkJpbmRpbmc2NzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjc5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Njc5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjc5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY3OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NzkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NzkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjc5IiBuYW1lPSJJbnB1dDY3OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NzkiIG5hbWU9Ik91dHB1dDY3OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjc5IiB0eXBlPSJ0bnM6UG9ydFR5cGU2NzkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NzkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjc5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY3OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Njc5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY3OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2ODAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2ODAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2ODAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjgwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY4MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY4MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2ODAiIG5hbWU9IklucHV0NjgwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY4MCIgbmFtZT0iT3V0cHV0NjgwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2ODAiIHR5cGU9InRuczpQb3J0VHlwZTY4MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY4MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242ODAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjgwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2ODAiIGJpbmRpbmc9InRuczpCaW5kaW5nNjgwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY4MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY4MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY4MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2ODEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjgxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjgxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY4MSIgbmFtZT0iSW5wdXQ2ODEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjgxIiBuYW1lPSJPdXRwdXQ2ODEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY4MSIgdHlwZT0idG5zOlBvcnRUeXBlNjgxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjgxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY4MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2ODEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY4MSIgYmluZGluZz0idG5zOkJpbmRpbmc2ODEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjgyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjgyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjgyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY4MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2ODIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242ODIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjgyIiBuYW1lPSJJbnB1dDY4MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2ODIiIG5hbWU9Ik91dHB1dDY4MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjgyIiB0eXBlPSJ0bnM6UG9ydFR5cGU2ODIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242ODIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjgyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY4MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjgyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzY4MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2ODMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2ODMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2ODMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjgzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY4MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY4MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2ODMiIG5hbWU9IklucHV0NjgzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY4MyIgbmFtZT0iT3V0cHV0NjgzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2ODMiIHR5cGU9InRuczpQb3J0VHlwZTY4MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY4MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242ODMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjgzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2ODMiIGJpbmRpbmc9InRuczpCaW5kaW5nNjgzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY4NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY4NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY4NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2ODQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjg0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjg0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY4NCIgbmFtZT0iSW5wdXQ2ODQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjg0IiBuYW1lPSJPdXRwdXQ2ODQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY4NCIgdHlwZT0idG5zOlBvcnRUeXBlNjg0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjg0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY4NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2ODQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY4NCIgYmluZGluZz0idG5zOkJpbmRpbmc2ODQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjg1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Njg1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjg1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY4NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2ODUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242ODUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjg1IiBuYW1lPSJJbnB1dDY4NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2ODUiIG5hbWU9Ik91dHB1dDY4NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjg1IiB0eXBlPSJ0bnM6UG9ydFR5cGU2ODUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242ODUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjg1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY4NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Njg1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY4NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2ODYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2ODYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2ODYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Njg2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY4NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY4NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2ODYiIG5hbWU9IklucHV0Njg2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY4NiIgbmFtZT0iT3V0cHV0Njg2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2ODYiIHR5cGU9InRuczpQb3J0VHlwZTY4NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY4NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242ODYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjg2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2ODYiIGJpbmRpbmc9InRuczpCaW5kaW5nNjg2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY4NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY4NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY4NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2ODciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjg3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjg3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY4NyIgbmFtZT0iSW5wdXQ2ODciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjg3IiBuYW1lPSJPdXRwdXQ2ODciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY4NyIgdHlwZT0idG5zOlBvcnRUeXBlNjg3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjg3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY4NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2ODciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY4NyIgYmluZGluZz0idG5zOkJpbmRpbmc2ODciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjg4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Njg4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjg4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY4OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2ODgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242ODgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjg4IiBuYW1lPSJJbnB1dDY4OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2ODgiIG5hbWU9Ik91dHB1dDY4OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjg4IiB0eXBlPSJ0bnM6UG9ydFR5cGU2ODgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242ODgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjg4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY4OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Njg4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY4OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2ODkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2ODkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2ODkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Njg5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY4OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY4OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2ODkiIG5hbWU9IklucHV0Njg5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY4OSIgbmFtZT0iT3V0cHV0Njg5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2ODkiIHR5cGU9InRuczpQb3J0VHlwZTY4OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY4OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242ODkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjg5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2ODkiIGJpbmRpbmc9InRuczpCaW5kaW5nNjg5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY5MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY5MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY5MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2OTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjkwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjkwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY5MCIgbmFtZT0iSW5wdXQ2OTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjkwIiBuYW1lPSJPdXRwdXQ2OTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY5MCIgdHlwZT0idG5zOlBvcnRUeXBlNjkwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjkwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY5MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2OTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY5MCIgYmluZGluZz0idG5zOkJpbmRpbmc2OTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjkxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjkxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjkxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY5MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2OTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242OTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjkxIiBuYW1lPSJJbnB1dDY5MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2OTEiIG5hbWU9Ik91dHB1dDY5MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjkxIiB0eXBlPSJ0bnM6UG9ydFR5cGU2OTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242OTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjkxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY5MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NjkxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzY5MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2OTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2OTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2OTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjkyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY5MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY5MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2OTIiIG5hbWU9IklucHV0NjkyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY5MiIgbmFtZT0iT3V0cHV0NjkyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2OTIiIHR5cGU9InRuczpQb3J0VHlwZTY5MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY5MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242OTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjkyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2OTIiIGJpbmRpbmc9InRuczpCaW5kaW5nNjkyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY5MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY5MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY5MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2OTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjkzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjkzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY5MyIgbmFtZT0iSW5wdXQ2OTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjkzIiBuYW1lPSJPdXRwdXQ2OTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY5MyIgdHlwZT0idG5zOlBvcnRUeXBlNjkzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjkzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY5MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2OTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY5MyIgYmluZGluZz0idG5zOkJpbmRpbmc2OTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjk0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Njk0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjk0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY5NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2OTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242OTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjk0IiBuYW1lPSJJbnB1dDY5NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2OTQiIG5hbWU9Ik91dHB1dDY5NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjk0IiB0eXBlPSJ0bnM6UG9ydFR5cGU2OTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242OTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjk0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY5NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Njk0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY5NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2OTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2OTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2OTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Njk1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY5NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY5NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2OTUiIG5hbWU9IklucHV0Njk1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY5NSIgbmFtZT0iT3V0cHV0Njk1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2OTUiIHR5cGU9InRuczpQb3J0VHlwZTY5NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY5NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242OTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjk1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2OTUiIGJpbmRpbmc9InRuczpCaW5kaW5nNjk1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY5NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY5NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY5NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2OTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjk2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjk2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY5NiIgbmFtZT0iSW5wdXQ2OTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjk2IiBuYW1lPSJPdXRwdXQ2OTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY5NiIgdHlwZT0idG5zOlBvcnRUeXBlNjk2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjk2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY5NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2OTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY5NiIgYmluZGluZz0idG5zOkJpbmRpbmc2OTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNjk3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Njk3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjk3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDY5NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2OTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242OTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNjk3IiBuYW1lPSJJbnB1dDY5NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2OTciIG5hbWU9Ik91dHB1dDY5NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjk3IiB0eXBlPSJ0bnM6UG9ydFR5cGU2OTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242OTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjk3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY5NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Njk3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY5NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2OTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2OTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2OTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Njk4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTY5OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY5OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2OTgiIG5hbWU9IklucHV0Njk4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY5OCIgbmFtZT0iT3V0cHV0Njk4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2OTgiIHR5cGU9InRuczpQb3J0VHlwZTY5OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY5OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242OTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjk4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2OTgiIGJpbmRpbmc9InRuczpCaW5kaW5nNjk4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY5OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY5OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTY5OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2OTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjk5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjk5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY5OSIgbmFtZT0iSW5wdXQ2OTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNjk5IiBuYW1lPSJPdXRwdXQ2OTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY5OSIgdHlwZT0idG5zOlBvcnRUeXBlNjk5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjk5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY5OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U2OTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY5OSIgYmluZGluZz0idG5zOkJpbmRpbmc2OTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzAwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzAwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzAwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcwMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MDAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MDAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzAwIiBuYW1lPSJJbnB1dDcwMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MDAiIG5hbWU9Ik91dHB1dDcwMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzAwIiB0eXBlPSJ0bnM6UG9ydFR5cGU3MDAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MDAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzAwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcwMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzAwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzcwMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzAxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcwMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcwMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MDEiIG5hbWU9IklucHV0NzAxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcwMSIgbmFtZT0iT3V0cHV0NzAxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MDEiIHR5cGU9InRuczpQb3J0VHlwZTcwMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcwMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MDEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzAxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MDEiIGJpbmRpbmc9InRuczpCaW5kaW5nNzAxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcwMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcwMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcwMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzAyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzAyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcwMiIgbmFtZT0iSW5wdXQ3MDIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzAyIiBuYW1lPSJPdXRwdXQ3MDIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcwMiIgdHlwZT0idG5zOlBvcnRUeXBlNzAyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzAyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcwMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MDIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcwMiIgYmluZGluZz0idG5zOkJpbmRpbmc3MDIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzAzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzAzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzAzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcwMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MDMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MDMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzAzIiBuYW1lPSJJbnB1dDcwMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MDMiIG5hbWU9Ik91dHB1dDcwMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzAzIiB0eXBlPSJ0bnM6UG9ydFR5cGU3MDMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MDMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzAzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcwMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzAzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzcwMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzA0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcwNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcwNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MDQiIG5hbWU9IklucHV0NzA0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcwNCIgbmFtZT0iT3V0cHV0NzA0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MDQiIHR5cGU9InRuczpQb3J0VHlwZTcwNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcwNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MDQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzA0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MDQiIGJpbmRpbmc9InRuczpCaW5kaW5nNzA0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcwNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcwNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcwNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzA1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzA1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcwNSIgbmFtZT0iSW5wdXQ3MDUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzA1IiBuYW1lPSJPdXRwdXQ3MDUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcwNSIgdHlwZT0idG5zOlBvcnRUeXBlNzA1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzA1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcwNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MDUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcwNSIgYmluZGluZz0idG5zOkJpbmRpbmc3MDUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzA2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzA2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzA2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcwNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MDYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MDYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzA2IiBuYW1lPSJJbnB1dDcwNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MDYiIG5hbWU9Ik91dHB1dDcwNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzA2IiB0eXBlPSJ0bnM6UG9ydFR5cGU3MDYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MDYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzA2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcwNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzA2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzcwNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzA3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcwNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcwNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MDciIG5hbWU9IklucHV0NzA3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcwNyIgbmFtZT0iT3V0cHV0NzA3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MDciIHR5cGU9InRuczpQb3J0VHlwZTcwNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcwNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MDciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzA3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MDciIGJpbmRpbmc9InRuczpCaW5kaW5nNzA3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcwOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcwOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcwOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzA4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzA4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcwOCIgbmFtZT0iSW5wdXQ3MDgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzA4IiBuYW1lPSJPdXRwdXQ3MDgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcwOCIgdHlwZT0idG5zOlBvcnRUeXBlNzA4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzA4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcwOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MDgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcwOCIgYmluZGluZz0idG5zOkJpbmRpbmc3MDgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzA5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzA5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzA5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcwOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MDkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MDkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzA5IiBuYW1lPSJJbnB1dDcwOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MDkiIG5hbWU9Ik91dHB1dDcwOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzA5IiB0eXBlPSJ0bnM6UG9ydFR5cGU3MDkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MDkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzA5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcwOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzA5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzcwOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzEwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcxMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcxMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MTAiIG5hbWU9IklucHV0NzEwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcxMCIgbmFtZT0iT3V0cHV0NzEwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MTAiIHR5cGU9InRuczpQb3J0VHlwZTcxMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcxMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzEwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MTAiIGJpbmRpbmc9InRuczpCaW5kaW5nNzEwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcxMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcxMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcxMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzExIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzExIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcxMSIgbmFtZT0iSW5wdXQ3MTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzExIiBuYW1lPSJPdXRwdXQ3MTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcxMSIgdHlwZT0idG5zOlBvcnRUeXBlNzExIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzExIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcxMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcxMSIgYmluZGluZz0idG5zOkJpbmRpbmc3MTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzEyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzEyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzEyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcxMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzEyIiBuYW1lPSJJbnB1dDcxMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MTIiIG5hbWU9Ik91dHB1dDcxMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzEyIiB0eXBlPSJ0bnM6UG9ydFR5cGU3MTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzEyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcxMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzEyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzcxMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzEzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcxMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcxMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MTMiIG5hbWU9IklucHV0NzEzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcxMyIgbmFtZT0iT3V0cHV0NzEzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MTMiIHR5cGU9InRuczpQb3J0VHlwZTcxMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcxMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzEzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MTMiIGJpbmRpbmc9InRuczpCaW5kaW5nNzEzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcxNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcxNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcxNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzE0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzE0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcxNCIgbmFtZT0iSW5wdXQ3MTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzE0IiBuYW1lPSJPdXRwdXQ3MTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcxNCIgdHlwZT0idG5zOlBvcnRUeXBlNzE0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzE0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcxNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcxNCIgYmluZGluZz0idG5zOkJpbmRpbmc3MTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzE1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzE1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzE1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcxNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzE1IiBuYW1lPSJJbnB1dDcxNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MTUiIG5hbWU9Ik91dHB1dDcxNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzE1IiB0eXBlPSJ0bnM6UG9ydFR5cGU3MTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzE1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcxNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzE1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzcxNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzE2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcxNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcxNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MTYiIG5hbWU9IklucHV0NzE2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcxNiIgbmFtZT0iT3V0cHV0NzE2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MTYiIHR5cGU9InRuczpQb3J0VHlwZTcxNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcxNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzE2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MTYiIGJpbmRpbmc9InRuczpCaW5kaW5nNzE2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcxNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcxNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcxNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzE3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzE3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcxNyIgbmFtZT0iSW5wdXQ3MTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzE3IiBuYW1lPSJPdXRwdXQ3MTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcxNyIgdHlwZT0idG5zOlBvcnRUeXBlNzE3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzE3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcxNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcxNyIgYmluZGluZz0idG5zOkJpbmRpbmc3MTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzE4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzE4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzE4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcxOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzE4IiBuYW1lPSJJbnB1dDcxOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MTgiIG5hbWU9Ik91dHB1dDcxOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzE4IiB0eXBlPSJ0bnM6UG9ydFR5cGU3MTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzE4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcxOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzE4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzcxOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzE5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcxOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcxOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MTkiIG5hbWU9IklucHV0NzE5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcxOSIgbmFtZT0iT3V0cHV0NzE5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MTkiIHR5cGU9InRuczpQb3J0VHlwZTcxOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcxOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzE5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MTkiIGJpbmRpbmc9InRuczpCaW5kaW5nNzE5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcyMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcyMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcyMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzIwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzIwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcyMCIgbmFtZT0iSW5wdXQ3MjAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzIwIiBuYW1lPSJPdXRwdXQ3MjAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcyMCIgdHlwZT0idG5zOlBvcnRUeXBlNzIwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzIwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcyMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MjAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcyMCIgYmluZGluZz0idG5zOkJpbmRpbmc3MjAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzIxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzIxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzIxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcyMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MjEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzIxIiBuYW1lPSJJbnB1dDcyMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MjEiIG5hbWU9Ik91dHB1dDcyMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzIxIiB0eXBlPSJ0bnM6UG9ydFR5cGU3MjEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzIxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcyMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzIxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzcyMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzIyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcyMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcyMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MjIiIG5hbWU9IklucHV0NzIyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcyMiIgbmFtZT0iT3V0cHV0NzIyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MjIiIHR5cGU9InRuczpQb3J0VHlwZTcyMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcyMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzIyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MjIiIGJpbmRpbmc9InRuczpCaW5kaW5nNzIyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcyMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcyMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcyMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzIzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzIzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcyMyIgbmFtZT0iSW5wdXQ3MjMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzIzIiBuYW1lPSJPdXRwdXQ3MjMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcyMyIgdHlwZT0idG5zOlBvcnRUeXBlNzIzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzIzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcyMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MjMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcyMyIgYmluZGluZz0idG5zOkJpbmRpbmc3MjMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzI0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzI0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzI0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcyNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MjQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzI0IiBuYW1lPSJJbnB1dDcyNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MjQiIG5hbWU9Ik91dHB1dDcyNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzI0IiB0eXBlPSJ0bnM6UG9ydFR5cGU3MjQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzI0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcyNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzI0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzcyNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzI1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcyNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcyNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MjUiIG5hbWU9IklucHV0NzI1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcyNSIgbmFtZT0iT3V0cHV0NzI1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MjUiIHR5cGU9InRuczpQb3J0VHlwZTcyNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcyNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzI1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MjUiIGJpbmRpbmc9InRuczpCaW5kaW5nNzI1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcyNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcyNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcyNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzI2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzI2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcyNiIgbmFtZT0iSW5wdXQ3MjYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzI2IiBuYW1lPSJPdXRwdXQ3MjYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcyNiIgdHlwZT0idG5zOlBvcnRUeXBlNzI2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzI2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcyNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MjYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcyNiIgYmluZGluZz0idG5zOkJpbmRpbmc3MjYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzI3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzI3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzI3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDcyNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MjciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzI3IiBuYW1lPSJJbnB1dDcyNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MjciIG5hbWU9Ik91dHB1dDcyNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzI3IiB0eXBlPSJ0bnM6UG9ydFR5cGU3MjciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzI3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcyNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzI3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzcyNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzI4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTcyOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcyOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MjgiIG5hbWU9IklucHV0NzI4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcyOCIgbmFtZT0iT3V0cHV0NzI4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MjgiIHR5cGU9InRuczpQb3J0VHlwZTcyOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcyOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzI4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MjgiIGJpbmRpbmc9InRuczpCaW5kaW5nNzI4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcyOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcyOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTcyOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzI5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzI5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcyOSIgbmFtZT0iSW5wdXQ3MjkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzI5IiBuYW1lPSJPdXRwdXQ3MjkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcyOSIgdHlwZT0idG5zOlBvcnRUeXBlNzI5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzI5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcyOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MjkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcyOSIgYmluZGluZz0idG5zOkJpbmRpbmc3MjkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzMwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzMwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzMwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDczMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MzAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MzAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzMwIiBuYW1lPSJJbnB1dDczMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MzAiIG5hbWU9Ik91dHB1dDczMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzMwIiB0eXBlPSJ0bnM6UG9ydFR5cGU3MzAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MzAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzMwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTczMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzMwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzczMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzMxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTczMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjczMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MzEiIG5hbWU9IklucHV0NzMxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTczMSIgbmFtZT0iT3V0cHV0NzMxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MzEiIHR5cGU9InRuczpQb3J0VHlwZTczMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjczMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MzEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzMxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MzEiIGJpbmRpbmc9InRuczpCaW5kaW5nNzMxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTczMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDczMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTczMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzMyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzMyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTczMiIgbmFtZT0iSW5wdXQ3MzIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzMyIiBuYW1lPSJPdXRwdXQ3MzIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzczMiIgdHlwZT0idG5zOlBvcnRUeXBlNzMyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzMyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjczMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MzIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDczMiIgYmluZGluZz0idG5zOkJpbmRpbmc3MzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzMzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzMzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzMzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDczMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MzMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MzMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzMzIiBuYW1lPSJJbnB1dDczMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MzMiIG5hbWU9Ik91dHB1dDczMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzMzIiB0eXBlPSJ0bnM6UG9ydFR5cGU3MzMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MzMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzMzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTczMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzMzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzczMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzM0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTczNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjczNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MzQiIG5hbWU9IklucHV0NzM0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTczNCIgbmFtZT0iT3V0cHV0NzM0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MzQiIHR5cGU9InRuczpQb3J0VHlwZTczNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjczNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MzQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzM0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MzQiIGJpbmRpbmc9InRuczpCaW5kaW5nNzM0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTczNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDczNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTczNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzM1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzM1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTczNSIgbmFtZT0iSW5wdXQ3MzUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzM1IiBuYW1lPSJPdXRwdXQ3MzUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzczNSIgdHlwZT0idG5zOlBvcnRUeXBlNzM1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzM1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjczNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MzUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDczNSIgYmluZGluZz0idG5zOkJpbmRpbmc3MzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzM2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzM2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzM2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDczNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MzYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MzYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzM2IiBuYW1lPSJJbnB1dDczNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MzYiIG5hbWU9Ik91dHB1dDczNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzM2IiB0eXBlPSJ0bnM6UG9ydFR5cGU3MzYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MzYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzM2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTczNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzM2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzczNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3MzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzM3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTczNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjczNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MzciIG5hbWU9IklucHV0NzM3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTczNyIgbmFtZT0iT3V0cHV0NzM3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3MzciIHR5cGU9InRuczpQb3J0VHlwZTczNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjczNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243MzciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzM3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MzciIGJpbmRpbmc9InRuczpCaW5kaW5nNzM3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTczOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDczOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTczOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzM4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzM4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTczOCIgbmFtZT0iSW5wdXQ3MzgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzM4IiBuYW1lPSJPdXRwdXQ3MzgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzczOCIgdHlwZT0idG5zOlBvcnRUeXBlNzM4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzM4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjczOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3MzgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDczOCIgYmluZGluZz0idG5zOkJpbmRpbmc3MzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzM5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzM5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzM5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDczOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MzkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MzkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzM5IiBuYW1lPSJJbnB1dDczOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MzkiIG5hbWU9Ik91dHB1dDczOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzM5IiB0eXBlPSJ0bnM6UG9ydFR5cGU3MzkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MzkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzM5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTczOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzM5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzczOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc0MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc0MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NDAiIG5hbWU9IklucHV0NzQwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc0MCIgbmFtZT0iT3V0cHV0NzQwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NDAiIHR5cGU9InRuczpQb3J0VHlwZTc0MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc0MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NDAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzQwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NDAiIGJpbmRpbmc9InRuczpCaW5kaW5nNzQwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc0MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc0MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc0MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzQxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzQxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc0MSIgbmFtZT0iSW5wdXQ3NDEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzQxIiBuYW1lPSJPdXRwdXQ3NDEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc0MSIgdHlwZT0idG5zOlBvcnRUeXBlNzQxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzQxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc0MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NDEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc0MSIgYmluZGluZz0idG5zOkJpbmRpbmc3NDEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzQyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzQyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc0MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NDIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NDIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzQyIiBuYW1lPSJJbnB1dDc0MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NDIiIG5hbWU9Ik91dHB1dDc0MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzQyIiB0eXBlPSJ0bnM6UG9ydFR5cGU3NDIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NDIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzQyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc0MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzQyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzc0MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc0MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc0MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NDMiIG5hbWU9IklucHV0NzQzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc0MyIgbmFtZT0iT3V0cHV0NzQzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NDMiIHR5cGU9InRuczpQb3J0VHlwZTc0MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc0MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NDMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzQzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NDMiIGJpbmRpbmc9InRuczpCaW5kaW5nNzQzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc0NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc0NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc0NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzQ0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzQ0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc0NCIgbmFtZT0iSW5wdXQ3NDQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzQ0IiBuYW1lPSJPdXRwdXQ3NDQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc0NCIgdHlwZT0idG5zOlBvcnRUeXBlNzQ0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzQ0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc0NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NDQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc0NCIgYmluZGluZz0idG5zOkJpbmRpbmc3NDQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzQ1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzQ1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc0NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NDUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NDUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzQ1IiBuYW1lPSJJbnB1dDc0NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NDUiIG5hbWU9Ik91dHB1dDc0NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzQ1IiB0eXBlPSJ0bnM6UG9ydFR5cGU3NDUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NDUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzQ1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc0NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzQ1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc0NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc0NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc0NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NDYiIG5hbWU9IklucHV0NzQ2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc0NiIgbmFtZT0iT3V0cHV0NzQ2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NDYiIHR5cGU9InRuczpQb3J0VHlwZTc0NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc0NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NDYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzQ2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NDYiIGJpbmRpbmc9InRuczpCaW5kaW5nNzQ2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc0NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc0NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc0NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzQ3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzQ3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc0NyIgbmFtZT0iSW5wdXQ3NDciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzQ3IiBuYW1lPSJPdXRwdXQ3NDciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc0NyIgdHlwZT0idG5zOlBvcnRUeXBlNzQ3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzQ3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc0NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NDciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc0NyIgYmluZGluZz0idG5zOkJpbmRpbmc3NDciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzQ4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzQ4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc0OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NDgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NDgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzQ4IiBuYW1lPSJJbnB1dDc0OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NDgiIG5hbWU9Ik91dHB1dDc0OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzQ4IiB0eXBlPSJ0bnM6UG9ydFR5cGU3NDgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NDgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzQ4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc0OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzQ4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc0OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc0OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc0OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NDkiIG5hbWU9IklucHV0NzQ5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc0OSIgbmFtZT0iT3V0cHV0NzQ5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NDkiIHR5cGU9InRuczpQb3J0VHlwZTc0OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc0OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NDkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzQ5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NDkiIGJpbmRpbmc9InRuczpCaW5kaW5nNzQ5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc1MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc1MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc1MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzUwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzUwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc1MCIgbmFtZT0iSW5wdXQ3NTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzUwIiBuYW1lPSJPdXRwdXQ3NTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc1MCIgdHlwZT0idG5zOlBvcnRUeXBlNzUwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzUwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc1MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc1MCIgYmluZGluZz0idG5zOkJpbmRpbmc3NTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzUxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzUxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzUxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc1MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzUxIiBuYW1lPSJJbnB1dDc1MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NTEiIG5hbWU9Ik91dHB1dDc1MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzUxIiB0eXBlPSJ0bnM6UG9ydFR5cGU3NTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzUxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc1MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzUxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzc1MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzUyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc1MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc1MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NTIiIG5hbWU9IklucHV0NzUyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc1MiIgbmFtZT0iT3V0cHV0NzUyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NTIiIHR5cGU9InRuczpQb3J0VHlwZTc1MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc1MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzUyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NTIiIGJpbmRpbmc9InRuczpCaW5kaW5nNzUyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc1MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc1MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc1MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzUzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzUzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc1MyIgbmFtZT0iSW5wdXQ3NTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzUzIiBuYW1lPSJPdXRwdXQ3NTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc1MyIgdHlwZT0idG5zOlBvcnRUeXBlNzUzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzUzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc1MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc1MyIgYmluZGluZz0idG5zOkJpbmRpbmc3NTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzU0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzU0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzU0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc1NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzU0IiBuYW1lPSJJbnB1dDc1NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NTQiIG5hbWU9Ik91dHB1dDc1NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzU0IiB0eXBlPSJ0bnM6UG9ydFR5cGU3NTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzU0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc1NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzU0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc1NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzU1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc1NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc1NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NTUiIG5hbWU9IklucHV0NzU1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc1NSIgbmFtZT0iT3V0cHV0NzU1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NTUiIHR5cGU9InRuczpQb3J0VHlwZTc1NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc1NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzU1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NTUiIGJpbmRpbmc9InRuczpCaW5kaW5nNzU1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc1NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc1NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc1NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzU2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzU2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc1NiIgbmFtZT0iSW5wdXQ3NTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzU2IiBuYW1lPSJPdXRwdXQ3NTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc1NiIgdHlwZT0idG5zOlBvcnRUeXBlNzU2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzU2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc1NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc1NiIgYmluZGluZz0idG5zOkJpbmRpbmc3NTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzU3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzU3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzU3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc1NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzU3IiBuYW1lPSJJbnB1dDc1NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NTciIG5hbWU9Ik91dHB1dDc1NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzU3IiB0eXBlPSJ0bnM6UG9ydFR5cGU3NTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzU3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc1NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzU3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc1NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzU4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc1OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc1OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NTgiIG5hbWU9IklucHV0NzU4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc1OCIgbmFtZT0iT3V0cHV0NzU4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NTgiIHR5cGU9InRuczpQb3J0VHlwZTc1OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc1OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzU4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NTgiIGJpbmRpbmc9InRuczpCaW5kaW5nNzU4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc1OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc1OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc1OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzU5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzU5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc1OSIgbmFtZT0iSW5wdXQ3NTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzU5IiBuYW1lPSJPdXRwdXQ3NTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc1OSIgdHlwZT0idG5zOlBvcnRUeXBlNzU5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzU5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc1OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc1OSIgYmluZGluZz0idG5zOkJpbmRpbmc3NTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzYwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzYwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzYwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc2MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NjAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzYwIiBuYW1lPSJJbnB1dDc2MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NjAiIG5hbWU9Ik91dHB1dDc2MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzYwIiB0eXBlPSJ0bnM6UG9ydFR5cGU3NjAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzYwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc2MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzYwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzc2MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzYxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc2MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc2MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NjEiIG5hbWU9IklucHV0NzYxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc2MSIgbmFtZT0iT3V0cHV0NzYxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NjEiIHR5cGU9InRuczpQb3J0VHlwZTc2MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc2MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzYxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NjEiIGJpbmRpbmc9InRuczpCaW5kaW5nNzYxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc2MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc2MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc2MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzYyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzYyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc2MiIgbmFtZT0iSW5wdXQ3NjIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzYyIiBuYW1lPSJPdXRwdXQ3NjIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc2MiIgdHlwZT0idG5zOlBvcnRUeXBlNzYyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzYyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc2MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NjIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc2MiIgYmluZGluZz0idG5zOkJpbmRpbmc3NjIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzYzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzYzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzYzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc2MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NjMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzYzIiBuYW1lPSJJbnB1dDc2MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NjMiIG5hbWU9Ik91dHB1dDc2MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzYzIiB0eXBlPSJ0bnM6UG9ydFR5cGU3NjMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzYzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc2MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzYzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzc2MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzY0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc2NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc2NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NjQiIG5hbWU9IklucHV0NzY0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc2NCIgbmFtZT0iT3V0cHV0NzY0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NjQiIHR5cGU9InRuczpQb3J0VHlwZTc2NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc2NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzY0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NjQiIGJpbmRpbmc9InRuczpCaW5kaW5nNzY0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc2NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc2NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc2NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzY1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzY1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc2NSIgbmFtZT0iSW5wdXQ3NjUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzY1IiBuYW1lPSJPdXRwdXQ3NjUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc2NSIgdHlwZT0idG5zOlBvcnRUeXBlNzY1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzY1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc2NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NjUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc2NSIgYmluZGluZz0idG5zOkJpbmRpbmc3NjUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzY2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzY2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzY2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc2NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NjYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzY2IiBuYW1lPSJJbnB1dDc2NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NjYiIG5hbWU9Ik91dHB1dDc2NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzY2IiB0eXBlPSJ0bnM6UG9ydFR5cGU3NjYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzY2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc2NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzY2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc2NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzY3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc2NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc2NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NjciIG5hbWU9IklucHV0NzY3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc2NyIgbmFtZT0iT3V0cHV0NzY3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NjciIHR5cGU9InRuczpQb3J0VHlwZTc2NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc2NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzY3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NjciIGJpbmRpbmc9InRuczpCaW5kaW5nNzY3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc2OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc2OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc2OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzY4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzY4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc2OCIgbmFtZT0iSW5wdXQ3NjgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzY4IiBuYW1lPSJPdXRwdXQ3NjgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc2OCIgdHlwZT0idG5zOlBvcnRUeXBlNzY4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzY4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc2OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NjgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc2OCIgYmluZGluZz0idG5zOkJpbmRpbmc3NjgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzY5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzY5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzY5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc2OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NjkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzY5IiBuYW1lPSJJbnB1dDc2OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NjkiIG5hbWU9Ik91dHB1dDc2OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzY5IiB0eXBlPSJ0bnM6UG9ydFR5cGU3NjkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzY5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc2OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzY5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc2OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzcwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc3MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc3MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NzAiIG5hbWU9IklucHV0NzcwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc3MCIgbmFtZT0iT3V0cHV0NzcwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NzAiIHR5cGU9InRuczpQb3J0VHlwZTc3MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc3MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NzAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzcwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NzAiIGJpbmRpbmc9InRuczpCaW5kaW5nNzcwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc3MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc3MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc3MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzcxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzcxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc3MSIgbmFtZT0iSW5wdXQ3NzEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzcxIiBuYW1lPSJPdXRwdXQ3NzEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc3MSIgdHlwZT0idG5zOlBvcnRUeXBlNzcxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzcxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc3MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NzEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc3MSIgYmluZGluZz0idG5zOkJpbmRpbmc3NzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzcyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzcyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzcyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc3MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NzIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NzIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzcyIiBuYW1lPSJJbnB1dDc3MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NzIiIG5hbWU9Ik91dHB1dDc3MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzcyIiB0eXBlPSJ0bnM6UG9ydFR5cGU3NzIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NzIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzcyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc3MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzcyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzc3MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzczIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc3MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc3MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NzMiIG5hbWU9IklucHV0NzczIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc3MyIgbmFtZT0iT3V0cHV0NzczIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NzMiIHR5cGU9InRuczpQb3J0VHlwZTc3MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc3MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NzMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzczIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NzMiIGJpbmRpbmc9InRuczpCaW5kaW5nNzczIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc3NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc3NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc3NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzc0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzc0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc3NCIgbmFtZT0iSW5wdXQ3NzQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzc0IiBuYW1lPSJPdXRwdXQ3NzQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc3NCIgdHlwZT0idG5zOlBvcnRUeXBlNzc0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzc0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc3NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NzQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc3NCIgYmluZGluZz0idG5zOkJpbmRpbmc3NzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzc1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Nzc1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzc1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc3NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NzUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NzUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzc1IiBuYW1lPSJJbnB1dDc3NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NzUiIG5hbWU9Ik91dHB1dDc3NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzc1IiB0eXBlPSJ0bnM6UG9ydFR5cGU3NzUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NzUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzc1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc3NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Nzc1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc3NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Nzc2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc3NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc3NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NzYiIG5hbWU9IklucHV0Nzc2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc3NiIgbmFtZT0iT3V0cHV0Nzc2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NzYiIHR5cGU9InRuczpQb3J0VHlwZTc3NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc3NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NzYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzc2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NzYiIGJpbmRpbmc9InRuczpCaW5kaW5nNzc2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc3NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc3NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc3NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzc3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzc3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc3NyIgbmFtZT0iSW5wdXQ3NzciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzc3IiBuYW1lPSJPdXRwdXQ3NzciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc3NyIgdHlwZT0idG5zOlBvcnRUeXBlNzc3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzc3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc3NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3NzciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc3NyIgYmluZGluZz0idG5zOkJpbmRpbmc3NzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzc4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Nzc4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzc4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc3OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NzgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NzgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzc4IiBuYW1lPSJJbnB1dDc3OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NzgiIG5hbWU9Ik91dHB1dDc3OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzc4IiB0eXBlPSJ0bnM6UG9ydFR5cGU3NzgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NzgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzc4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc3OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Nzc4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc3OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3NzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Nzc5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc3OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc3OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NzkiIG5hbWU9IklucHV0Nzc5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc3OSIgbmFtZT0iT3V0cHV0Nzc5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3NzkiIHR5cGU9InRuczpQb3J0VHlwZTc3OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc3OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243NzkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzc5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NzkiIGJpbmRpbmc9InRuczpCaW5kaW5nNzc5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc4MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc4MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc4MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3ODAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzgwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzgwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc4MCIgbmFtZT0iSW5wdXQ3ODAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzgwIiBuYW1lPSJPdXRwdXQ3ODAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc4MCIgdHlwZT0idG5zOlBvcnRUeXBlNzgwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzgwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc4MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3ODAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc4MCIgYmluZGluZz0idG5zOkJpbmRpbmc3ODAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzgxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzgxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzgxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc4MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3ODEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243ODEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzgxIiBuYW1lPSJJbnB1dDc4MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3ODEiIG5hbWU9Ik91dHB1dDc4MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzgxIiB0eXBlPSJ0bnM6UG9ydFR5cGU3ODEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243ODEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzgxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc4MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzgxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzc4MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3ODIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3ODIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3ODIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzgyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc4MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc4MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3ODIiIG5hbWU9IklucHV0NzgyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc4MiIgbmFtZT0iT3V0cHV0NzgyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3ODIiIHR5cGU9InRuczpQb3J0VHlwZTc4MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc4MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243ODIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzgyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3ODIiIGJpbmRpbmc9InRuczpCaW5kaW5nNzgyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc4MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc4MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc4MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3ODMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzgzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzgzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc4MyIgbmFtZT0iSW5wdXQ3ODMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzgzIiBuYW1lPSJPdXRwdXQ3ODMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc4MyIgdHlwZT0idG5zOlBvcnRUeXBlNzgzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzgzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc4MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3ODMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc4MyIgYmluZGluZz0idG5zOkJpbmRpbmc3ODMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzg0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Nzg0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzg0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc4NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3ODQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243ODQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzg0IiBuYW1lPSJJbnB1dDc4NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3ODQiIG5hbWU9Ik91dHB1dDc4NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzg0IiB0eXBlPSJ0bnM6UG9ydFR5cGU3ODQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243ODQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzg0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc4NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Nzg0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc4NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3ODUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3ODUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3ODUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Nzg1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc4NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc4NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3ODUiIG5hbWU9IklucHV0Nzg1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc4NSIgbmFtZT0iT3V0cHV0Nzg1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3ODUiIHR5cGU9InRuczpQb3J0VHlwZTc4NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc4NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243ODUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzg1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3ODUiIGJpbmRpbmc9InRuczpCaW5kaW5nNzg1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc4NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc4NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc4NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3ODYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzg2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzg2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc4NiIgbmFtZT0iSW5wdXQ3ODYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzg2IiBuYW1lPSJPdXRwdXQ3ODYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc4NiIgdHlwZT0idG5zOlBvcnRUeXBlNzg2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzg2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc4NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3ODYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc4NiIgYmluZGluZz0idG5zOkJpbmRpbmc3ODYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzg3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Nzg3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzg3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc4NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3ODciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243ODciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzg3IiBuYW1lPSJJbnB1dDc4NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3ODciIG5hbWU9Ik91dHB1dDc4NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzg3IiB0eXBlPSJ0bnM6UG9ydFR5cGU3ODciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243ODciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzg3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc4NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Nzg3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc4NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3ODgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3ODgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3ODgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Nzg4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc4OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc4OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3ODgiIG5hbWU9IklucHV0Nzg4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc4OCIgbmFtZT0iT3V0cHV0Nzg4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3ODgiIHR5cGU9InRuczpQb3J0VHlwZTc4OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc4OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243ODgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzg4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3ODgiIGJpbmRpbmc9InRuczpCaW5kaW5nNzg4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc4OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc4OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc4OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3ODkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzg5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzg5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc4OSIgbmFtZT0iSW5wdXQ3ODkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzg5IiBuYW1lPSJPdXRwdXQ3ODkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc4OSIgdHlwZT0idG5zOlBvcnRUeXBlNzg5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzg5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc4OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3ODkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc4OSIgYmluZGluZz0idG5zOkJpbmRpbmc3ODkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzkwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzkwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzkwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc5MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3OTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243OTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzkwIiBuYW1lPSJJbnB1dDc5MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3OTAiIG5hbWU9Ik91dHB1dDc5MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzkwIiB0eXBlPSJ0bnM6UG9ydFR5cGU3OTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243OTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzkwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc5MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzkwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzc5MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3OTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3OTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3OTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzkxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc5MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc5MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3OTEiIG5hbWU9IklucHV0NzkxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc5MSIgbmFtZT0iT3V0cHV0NzkxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3OTEiIHR5cGU9InRuczpQb3J0VHlwZTc5MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc5MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243OTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzkxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3OTEiIGJpbmRpbmc9InRuczpCaW5kaW5nNzkxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc5MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc5MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc5MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3OTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzkyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzkyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc5MiIgbmFtZT0iSW5wdXQ3OTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzkyIiBuYW1lPSJPdXRwdXQ3OTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc5MiIgdHlwZT0idG5zOlBvcnRUeXBlNzkyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzkyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc5MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3OTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc5MiIgYmluZGluZz0idG5zOkJpbmRpbmc3OTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzkzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzkzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzkzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc5MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3OTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243OTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzkzIiBuYW1lPSJJbnB1dDc5MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3OTMiIG5hbWU9Ik91dHB1dDc5MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzkzIiB0eXBlPSJ0bnM6UG9ydFR5cGU3OTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243OTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzkzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc5MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NzkzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzc5MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3OTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3OTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3OTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Nzk0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc5NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc5NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3OTQiIG5hbWU9IklucHV0Nzk0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc5NCIgbmFtZT0iT3V0cHV0Nzk0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3OTQiIHR5cGU9InRuczpQb3J0VHlwZTc5NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc5NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243OTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzk0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3OTQiIGJpbmRpbmc9InRuczpCaW5kaW5nNzk0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc5NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc5NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc5NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3OTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzk1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzk1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc5NSIgbmFtZT0iSW5wdXQ3OTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzk1IiBuYW1lPSJPdXRwdXQ3OTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc5NSIgdHlwZT0idG5zOlBvcnRUeXBlNzk1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzk1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc5NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3OTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc5NSIgYmluZGluZz0idG5zOkJpbmRpbmc3OTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzk2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Nzk2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzk2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc5NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3OTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243OTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzk2IiBuYW1lPSJJbnB1dDc5NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3OTYiIG5hbWU9Ik91dHB1dDc5NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzk2IiB0eXBlPSJ0bnM6UG9ydFR5cGU3OTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243OTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzk2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc5NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Nzk2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc5NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3OTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3OTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3OTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Nzk3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTc5NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc5NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3OTciIG5hbWU9IklucHV0Nzk3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc5NyIgbmFtZT0iT3V0cHV0Nzk3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3OTciIHR5cGU9InRuczpQb3J0VHlwZTc5NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc5NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243OTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzk3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3OTciIGJpbmRpbmc9InRuczpCaW5kaW5nNzk3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc5OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc5OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTc5OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3OTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzk4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzk4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc5OCIgbmFtZT0iSW5wdXQ3OTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNzk4IiBuYW1lPSJPdXRwdXQ3OTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc5OCIgdHlwZT0idG5zOlBvcnRUeXBlNzk4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzk4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc5OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3OTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc5OCIgYmluZGluZz0idG5zOkJpbmRpbmc3OTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNzk5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Nzk5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzk5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDc5OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3OTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243OTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNzk5IiBuYW1lPSJJbnB1dDc5OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3OTkiIG5hbWU9Ik91dHB1dDc5OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzk5IiB0eXBlPSJ0bnM6UG9ydFR5cGU3OTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243OTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzk5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc5OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Nzk5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc5OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODAwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgwMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgwMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MDAiIG5hbWU9IklucHV0ODAwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgwMCIgbmFtZT0iT3V0cHV0ODAwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MDAiIHR5cGU9InRuczpQb3J0VHlwZTgwMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgwMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MDAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODAwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MDAiIGJpbmRpbmc9InRuczpCaW5kaW5nODAwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgwMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgwMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgwMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODAxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODAxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgwMSIgbmFtZT0iSW5wdXQ4MDEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODAxIiBuYW1lPSJPdXRwdXQ4MDEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgwMSIgdHlwZT0idG5zOlBvcnRUeXBlODAxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODAxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgwMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MDEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgwMSIgYmluZGluZz0idG5zOkJpbmRpbmc4MDEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODAyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODAyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODAyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgwMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MDIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MDIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODAyIiBuYW1lPSJJbnB1dDgwMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MDIiIG5hbWU9Ik91dHB1dDgwMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODAyIiB0eXBlPSJ0bnM6UG9ydFR5cGU4MDIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MDIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODAyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgwMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODAyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzgwMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODAzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgwMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgwMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MDMiIG5hbWU9IklucHV0ODAzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgwMyIgbmFtZT0iT3V0cHV0ODAzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MDMiIHR5cGU9InRuczpQb3J0VHlwZTgwMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgwMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MDMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODAzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MDMiIGJpbmRpbmc9InRuczpCaW5kaW5nODAzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgwNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgwNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgwNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODA0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODA0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgwNCIgbmFtZT0iSW5wdXQ4MDQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODA0IiBuYW1lPSJPdXRwdXQ4MDQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgwNCIgdHlwZT0idG5zOlBvcnRUeXBlODA0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODA0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgwNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MDQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgwNCIgYmluZGluZz0idG5zOkJpbmRpbmc4MDQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODA1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODA1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODA1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgwNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MDUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MDUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODA1IiBuYW1lPSJJbnB1dDgwNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MDUiIG5hbWU9Ik91dHB1dDgwNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODA1IiB0eXBlPSJ0bnM6UG9ydFR5cGU4MDUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MDUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODA1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgwNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODA1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzgwNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODA2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgwNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgwNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MDYiIG5hbWU9IklucHV0ODA2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgwNiIgbmFtZT0iT3V0cHV0ODA2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MDYiIHR5cGU9InRuczpQb3J0VHlwZTgwNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgwNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MDYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODA2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MDYiIGJpbmRpbmc9InRuczpCaW5kaW5nODA2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgwNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgwNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgwNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODA3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODA3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgwNyIgbmFtZT0iSW5wdXQ4MDciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODA3IiBuYW1lPSJPdXRwdXQ4MDciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgwNyIgdHlwZT0idG5zOlBvcnRUeXBlODA3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODA3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgwNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MDciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgwNyIgYmluZGluZz0idG5zOkJpbmRpbmc4MDciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODA4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODA4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODA4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgwOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MDgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MDgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODA4IiBuYW1lPSJJbnB1dDgwOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MDgiIG5hbWU9Ik91dHB1dDgwOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODA4IiB0eXBlPSJ0bnM6UG9ydFR5cGU4MDgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MDgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODA4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgwOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODA4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzgwOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODA5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgwOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgwOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MDkiIG5hbWU9IklucHV0ODA5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgwOSIgbmFtZT0iT3V0cHV0ODA5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MDkiIHR5cGU9InRuczpQb3J0VHlwZTgwOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgwOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MDkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODA5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MDkiIGJpbmRpbmc9InRuczpCaW5kaW5nODA5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgxMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgxMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgxMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODEwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODEwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgxMCIgbmFtZT0iSW5wdXQ4MTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODEwIiBuYW1lPSJPdXRwdXQ4MTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgxMCIgdHlwZT0idG5zOlBvcnRUeXBlODEwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODEwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgxMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgxMCIgYmluZGluZz0idG5zOkJpbmRpbmc4MTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODExIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODExIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODExIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgxMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODExIiBuYW1lPSJJbnB1dDgxMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MTEiIG5hbWU9Ik91dHB1dDgxMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODExIiB0eXBlPSJ0bnM6UG9ydFR5cGU4MTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODExIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgxMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODExIiBiaW5kaW5nPSJ0bnM6QmluZGluZzgxMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODEyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgxMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgxMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MTIiIG5hbWU9IklucHV0ODEyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgxMiIgbmFtZT0iT3V0cHV0ODEyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MTIiIHR5cGU9InRuczpQb3J0VHlwZTgxMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgxMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODEyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MTIiIGJpbmRpbmc9InRuczpCaW5kaW5nODEyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgxMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgxMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgxMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODEzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODEzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgxMyIgbmFtZT0iSW5wdXQ4MTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODEzIiBuYW1lPSJPdXRwdXQ4MTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgxMyIgdHlwZT0idG5zOlBvcnRUeXBlODEzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODEzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgxMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgxMyIgYmluZGluZz0idG5zOkJpbmRpbmc4MTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODE0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODE0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODE0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgxNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODE0IiBuYW1lPSJJbnB1dDgxNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MTQiIG5hbWU9Ik91dHB1dDgxNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODE0IiB0eXBlPSJ0bnM6UG9ydFR5cGU4MTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODE0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgxNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODE0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzgxNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODE1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgxNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgxNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MTUiIG5hbWU9IklucHV0ODE1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgxNSIgbmFtZT0iT3V0cHV0ODE1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MTUiIHR5cGU9InRuczpQb3J0VHlwZTgxNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgxNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODE1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MTUiIGJpbmRpbmc9InRuczpCaW5kaW5nODE1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgxNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgxNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgxNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODE2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODE2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgxNiIgbmFtZT0iSW5wdXQ4MTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODE2IiBuYW1lPSJPdXRwdXQ4MTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgxNiIgdHlwZT0idG5zOlBvcnRUeXBlODE2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODE2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgxNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgxNiIgYmluZGluZz0idG5zOkJpbmRpbmc4MTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODE3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODE3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODE3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgxNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODE3IiBuYW1lPSJJbnB1dDgxNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MTciIG5hbWU9Ik91dHB1dDgxNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODE3IiB0eXBlPSJ0bnM6UG9ydFR5cGU4MTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODE3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgxNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODE3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzgxNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODE4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgxOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgxOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MTgiIG5hbWU9IklucHV0ODE4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgxOCIgbmFtZT0iT3V0cHV0ODE4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MTgiIHR5cGU9InRuczpQb3J0VHlwZTgxOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgxOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODE4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MTgiIGJpbmRpbmc9InRuczpCaW5kaW5nODE4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgxOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgxOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgxOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODE5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODE5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgxOSIgbmFtZT0iSW5wdXQ4MTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODE5IiBuYW1lPSJPdXRwdXQ4MTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgxOSIgdHlwZT0idG5zOlBvcnRUeXBlODE5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODE5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgxOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgxOSIgYmluZGluZz0idG5zOkJpbmRpbmc4MTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODIwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODIwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODIwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgyMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MjAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODIwIiBuYW1lPSJJbnB1dDgyMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MjAiIG5hbWU9Ik91dHB1dDgyMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODIwIiB0eXBlPSJ0bnM6UG9ydFR5cGU4MjAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODIwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgyMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODIwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzgyMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODIxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgyMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgyMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MjEiIG5hbWU9IklucHV0ODIxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgyMSIgbmFtZT0iT3V0cHV0ODIxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MjEiIHR5cGU9InRuczpQb3J0VHlwZTgyMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgyMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODIxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MjEiIGJpbmRpbmc9InRuczpCaW5kaW5nODIxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgyMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgyMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgyMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODIyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODIyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgyMiIgbmFtZT0iSW5wdXQ4MjIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODIyIiBuYW1lPSJPdXRwdXQ4MjIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgyMiIgdHlwZT0idG5zOlBvcnRUeXBlODIyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODIyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgyMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MjIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgyMiIgYmluZGluZz0idG5zOkJpbmRpbmc4MjIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODIzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODIzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODIzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgyMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MjMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODIzIiBuYW1lPSJJbnB1dDgyMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MjMiIG5hbWU9Ik91dHB1dDgyMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODIzIiB0eXBlPSJ0bnM6UG9ydFR5cGU4MjMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODIzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgyMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODIzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzgyMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODI0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgyNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgyNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MjQiIG5hbWU9IklucHV0ODI0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgyNCIgbmFtZT0iT3V0cHV0ODI0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MjQiIHR5cGU9InRuczpQb3J0VHlwZTgyNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgyNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODI0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MjQiIGJpbmRpbmc9InRuczpCaW5kaW5nODI0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgyNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgyNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgyNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODI1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODI1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgyNSIgbmFtZT0iSW5wdXQ4MjUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODI1IiBuYW1lPSJPdXRwdXQ4MjUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgyNSIgdHlwZT0idG5zOlBvcnRUeXBlODI1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODI1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgyNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MjUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgyNSIgYmluZGluZz0idG5zOkJpbmRpbmc4MjUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODI2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODI2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODI2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgyNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MjYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODI2IiBuYW1lPSJJbnB1dDgyNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MjYiIG5hbWU9Ik91dHB1dDgyNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODI2IiB0eXBlPSJ0bnM6UG9ydFR5cGU4MjYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODI2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgyNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODI2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzgyNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODI3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgyNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgyNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MjciIG5hbWU9IklucHV0ODI3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgyNyIgbmFtZT0iT3V0cHV0ODI3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MjciIHR5cGU9InRuczpQb3J0VHlwZTgyNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgyNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODI3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MjciIGJpbmRpbmc9InRuczpCaW5kaW5nODI3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgyOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgyOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgyOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODI4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODI4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgyOCIgbmFtZT0iSW5wdXQ4MjgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODI4IiBuYW1lPSJPdXRwdXQ4MjgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgyOCIgdHlwZT0idG5zOlBvcnRUeXBlODI4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODI4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgyOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MjgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgyOCIgYmluZGluZz0idG5zOkJpbmRpbmc4MjgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODI5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODI5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODI5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgyOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MjkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODI5IiBuYW1lPSJJbnB1dDgyOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MjkiIG5hbWU9Ik91dHB1dDgyOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODI5IiB0eXBlPSJ0bnM6UG9ydFR5cGU4MjkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODI5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgyOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODI5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzgyOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODMwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgzMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgzMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MzAiIG5hbWU9IklucHV0ODMwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgzMCIgbmFtZT0iT3V0cHV0ODMwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MzAiIHR5cGU9InRuczpQb3J0VHlwZTgzMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgzMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MzAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODMwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MzAiIGJpbmRpbmc9InRuczpCaW5kaW5nODMwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgzMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgzMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgzMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODMxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODMxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgzMSIgbmFtZT0iSW5wdXQ4MzEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODMxIiBuYW1lPSJPdXRwdXQ4MzEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgzMSIgdHlwZT0idG5zOlBvcnRUeXBlODMxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODMxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgzMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MzEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgzMSIgYmluZGluZz0idG5zOkJpbmRpbmc4MzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODMyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODMyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODMyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgzMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MzIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MzIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODMyIiBuYW1lPSJJbnB1dDgzMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MzIiIG5hbWU9Ik91dHB1dDgzMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODMyIiB0eXBlPSJ0bnM6UG9ydFR5cGU4MzIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MzIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODMyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgzMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODMyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzgzMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODMzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgzMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgzMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MzMiIG5hbWU9IklucHV0ODMzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgzMyIgbmFtZT0iT3V0cHV0ODMzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MzMiIHR5cGU9InRuczpQb3J0VHlwZTgzMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgzMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MzMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODMzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MzMiIGJpbmRpbmc9InRuczpCaW5kaW5nODMzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgzNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgzNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgzNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODM0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODM0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgzNCIgbmFtZT0iSW5wdXQ4MzQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODM0IiBuYW1lPSJPdXRwdXQ4MzQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgzNCIgdHlwZT0idG5zOlBvcnRUeXBlODM0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODM0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgzNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MzQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgzNCIgYmluZGluZz0idG5zOkJpbmRpbmc4MzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODM1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODM1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODM1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgzNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MzUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MzUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODM1IiBuYW1lPSJJbnB1dDgzNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MzUiIG5hbWU9Ik91dHB1dDgzNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODM1IiB0eXBlPSJ0bnM6UG9ydFR5cGU4MzUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MzUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODM1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgzNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODM1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzgzNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODM2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgzNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgzNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MzYiIG5hbWU9IklucHV0ODM2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgzNiIgbmFtZT0iT3V0cHV0ODM2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MzYiIHR5cGU9InRuczpQb3J0VHlwZTgzNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgzNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MzYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODM2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MzYiIGJpbmRpbmc9InRuczpCaW5kaW5nODM2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgzNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgzNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgzNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODM3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODM3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgzNyIgbmFtZT0iSW5wdXQ4MzciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODM3IiBuYW1lPSJPdXRwdXQ4MzciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgzNyIgdHlwZT0idG5zOlBvcnRUeXBlODM3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODM3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgzNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4MzciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgzNyIgYmluZGluZz0idG5zOkJpbmRpbmc4MzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODM4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODM4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODM4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgzOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MzgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MzgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODM4IiBuYW1lPSJJbnB1dDgzOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MzgiIG5hbWU9Ik91dHB1dDgzOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODM4IiB0eXBlPSJ0bnM6UG9ydFR5cGU4MzgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MzgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODM4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgzOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODM4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzgzOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4MzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODM5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTgzOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgzOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MzkiIG5hbWU9IklucHV0ODM5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgzOSIgbmFtZT0iT3V0cHV0ODM5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4MzkiIHR5cGU9InRuczpQb3J0VHlwZTgzOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgzOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244MzkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODM5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MzkiIGJpbmRpbmc9InRuczpCaW5kaW5nODM5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg0MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg0MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg0MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODQwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODQwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg0MCIgbmFtZT0iSW5wdXQ4NDAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODQwIiBuYW1lPSJPdXRwdXQ4NDAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg0MCIgdHlwZT0idG5zOlBvcnRUeXBlODQwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODQwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg0MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NDAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg0MCIgYmluZGluZz0idG5zOkJpbmRpbmc4NDAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODQxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODQxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg0MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NDEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NDEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODQxIiBuYW1lPSJJbnB1dDg0MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NDEiIG5hbWU9Ik91dHB1dDg0MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODQxIiB0eXBlPSJ0bnM6UG9ydFR5cGU4NDEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NDEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODQxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg0MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODQxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzg0MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg0MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg0MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NDIiIG5hbWU9IklucHV0ODQyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg0MiIgbmFtZT0iT3V0cHV0ODQyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NDIiIHR5cGU9InRuczpQb3J0VHlwZTg0MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg0MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NDIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODQyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NDIiIGJpbmRpbmc9InRuczpCaW5kaW5nODQyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg0MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg0MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg0MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODQzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODQzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg0MyIgbmFtZT0iSW5wdXQ4NDMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODQzIiBuYW1lPSJPdXRwdXQ4NDMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg0MyIgdHlwZT0idG5zOlBvcnRUeXBlODQzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODQzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg0MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NDMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg0MyIgYmluZGluZz0idG5zOkJpbmRpbmc4NDMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODQ0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODQ0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg0NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NDQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NDQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODQ0IiBuYW1lPSJJbnB1dDg0NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NDQiIG5hbWU9Ik91dHB1dDg0NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODQ0IiB0eXBlPSJ0bnM6UG9ydFR5cGU4NDQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NDQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODQ0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg0NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODQ0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg0NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg0NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg0NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NDUiIG5hbWU9IklucHV0ODQ1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg0NSIgbmFtZT0iT3V0cHV0ODQ1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NDUiIHR5cGU9InRuczpQb3J0VHlwZTg0NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg0NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NDUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODQ1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NDUiIGJpbmRpbmc9InRuczpCaW5kaW5nODQ1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg0NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg0NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg0NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODQ2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODQ2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg0NiIgbmFtZT0iSW5wdXQ4NDYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODQ2IiBuYW1lPSJPdXRwdXQ4NDYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg0NiIgdHlwZT0idG5zOlBvcnRUeXBlODQ2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODQ2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg0NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NDYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg0NiIgYmluZGluZz0idG5zOkJpbmRpbmc4NDYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODQ3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODQ3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg0NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NDciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NDciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODQ3IiBuYW1lPSJJbnB1dDg0NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NDciIG5hbWU9Ik91dHB1dDg0NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODQ3IiB0eXBlPSJ0bnM6UG9ydFR5cGU4NDciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NDciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODQ3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg0NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODQ3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg0NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg0OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg0OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NDgiIG5hbWU9IklucHV0ODQ4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg0OCIgbmFtZT0iT3V0cHV0ODQ4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NDgiIHR5cGU9InRuczpQb3J0VHlwZTg0OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg0OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NDgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODQ4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NDgiIGJpbmRpbmc9InRuczpCaW5kaW5nODQ4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg0OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg0OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg0OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODQ5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODQ5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg0OSIgbmFtZT0iSW5wdXQ4NDkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODQ5IiBuYW1lPSJPdXRwdXQ4NDkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg0OSIgdHlwZT0idG5zOlBvcnRUeXBlODQ5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODQ5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg0OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NDkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg0OSIgYmluZGluZz0idG5zOkJpbmRpbmc4NDkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODUwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODUwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODUwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg1MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODUwIiBuYW1lPSJJbnB1dDg1MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NTAiIG5hbWU9Ik91dHB1dDg1MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODUwIiB0eXBlPSJ0bnM6UG9ydFR5cGU4NTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODUwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg1MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODUwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzg1MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODUxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg1MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg1MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NTEiIG5hbWU9IklucHV0ODUxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg1MSIgbmFtZT0iT3V0cHV0ODUxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NTEiIHR5cGU9InRuczpQb3J0VHlwZTg1MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg1MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODUxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NTEiIGJpbmRpbmc9InRuczpCaW5kaW5nODUxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg1MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg1MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg1MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODUyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODUyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg1MiIgbmFtZT0iSW5wdXQ4NTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODUyIiBuYW1lPSJPdXRwdXQ4NTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg1MiIgdHlwZT0idG5zOlBvcnRUeXBlODUyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODUyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg1MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg1MiIgYmluZGluZz0idG5zOkJpbmRpbmc4NTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODUzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODUzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODUzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg1MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODUzIiBuYW1lPSJJbnB1dDg1MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NTMiIG5hbWU9Ik91dHB1dDg1MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODUzIiB0eXBlPSJ0bnM6UG9ydFR5cGU4NTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODUzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg1MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODUzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzg1MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODU0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg1NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg1NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NTQiIG5hbWU9IklucHV0ODU0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg1NCIgbmFtZT0iT3V0cHV0ODU0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NTQiIHR5cGU9InRuczpQb3J0VHlwZTg1NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg1NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODU0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NTQiIGJpbmRpbmc9InRuczpCaW5kaW5nODU0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg1NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg1NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg1NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODU1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODU1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg1NSIgbmFtZT0iSW5wdXQ4NTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODU1IiBuYW1lPSJPdXRwdXQ4NTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg1NSIgdHlwZT0idG5zOlBvcnRUeXBlODU1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODU1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg1NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg1NSIgYmluZGluZz0idG5zOkJpbmRpbmc4NTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODU2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODU2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODU2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg1NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODU2IiBuYW1lPSJJbnB1dDg1NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NTYiIG5hbWU9Ik91dHB1dDg1NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODU2IiB0eXBlPSJ0bnM6UG9ydFR5cGU4NTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODU2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg1NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODU2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg1NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODU3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg1NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg1NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NTciIG5hbWU9IklucHV0ODU3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg1NyIgbmFtZT0iT3V0cHV0ODU3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NTciIHR5cGU9InRuczpQb3J0VHlwZTg1NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg1NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODU3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NTciIGJpbmRpbmc9InRuczpCaW5kaW5nODU3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg1OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg1OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg1OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODU4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODU4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg1OCIgbmFtZT0iSW5wdXQ4NTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODU4IiBuYW1lPSJPdXRwdXQ4NTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg1OCIgdHlwZT0idG5zOlBvcnRUeXBlODU4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODU4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg1OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg1OCIgYmluZGluZz0idG5zOkJpbmRpbmc4NTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODU5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODU5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODU5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg1OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODU5IiBuYW1lPSJJbnB1dDg1OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NTkiIG5hbWU9Ik91dHB1dDg1OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODU5IiB0eXBlPSJ0bnM6UG9ydFR5cGU4NTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODU5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg1OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODU5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg1OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODYwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg2MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg2MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NjAiIG5hbWU9IklucHV0ODYwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg2MCIgbmFtZT0iT3V0cHV0ODYwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NjAiIHR5cGU9InRuczpQb3J0VHlwZTg2MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg2MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODYwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NjAiIGJpbmRpbmc9InRuczpCaW5kaW5nODYwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg2MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg2MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg2MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODYxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODYxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg2MSIgbmFtZT0iSW5wdXQ4NjEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODYxIiBuYW1lPSJPdXRwdXQ4NjEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg2MSIgdHlwZT0idG5zOlBvcnRUeXBlODYxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODYxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg2MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NjEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg2MSIgYmluZGluZz0idG5zOkJpbmRpbmc4NjEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODYyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODYyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODYyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg2MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NjIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODYyIiBuYW1lPSJJbnB1dDg2MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NjIiIG5hbWU9Ik91dHB1dDg2MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODYyIiB0eXBlPSJ0bnM6UG9ydFR5cGU4NjIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODYyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg2MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODYyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzg2MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODYzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg2MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg2MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NjMiIG5hbWU9IklucHV0ODYzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg2MyIgbmFtZT0iT3V0cHV0ODYzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NjMiIHR5cGU9InRuczpQb3J0VHlwZTg2MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg2MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODYzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NjMiIGJpbmRpbmc9InRuczpCaW5kaW5nODYzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg2NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg2NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg2NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODY0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODY0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg2NCIgbmFtZT0iSW5wdXQ4NjQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODY0IiBuYW1lPSJPdXRwdXQ4NjQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg2NCIgdHlwZT0idG5zOlBvcnRUeXBlODY0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODY0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg2NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NjQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg2NCIgYmluZGluZz0idG5zOkJpbmRpbmc4NjQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODY1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODY1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODY1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg2NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NjUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODY1IiBuYW1lPSJJbnB1dDg2NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NjUiIG5hbWU9Ik91dHB1dDg2NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODY1IiB0eXBlPSJ0bnM6UG9ydFR5cGU4NjUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODY1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg2NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODY1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg2NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODY2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg2NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg2NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NjYiIG5hbWU9IklucHV0ODY2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg2NiIgbmFtZT0iT3V0cHV0ODY2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NjYiIHR5cGU9InRuczpQb3J0VHlwZTg2NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg2NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODY2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NjYiIGJpbmRpbmc9InRuczpCaW5kaW5nODY2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg2NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg2NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg2NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODY3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODY3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg2NyIgbmFtZT0iSW5wdXQ4NjciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODY3IiBuYW1lPSJPdXRwdXQ4NjciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg2NyIgdHlwZT0idG5zOlBvcnRUeXBlODY3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODY3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg2NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NjciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg2NyIgYmluZGluZz0idG5zOkJpbmRpbmc4NjciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODY4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODY4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODY4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg2OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NjgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODY4IiBuYW1lPSJJbnB1dDg2OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NjgiIG5hbWU9Ik91dHB1dDg2OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODY4IiB0eXBlPSJ0bnM6UG9ydFR5cGU4NjgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODY4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg2OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODY4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg2OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODY5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg2OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg2OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NjkiIG5hbWU9IklucHV0ODY5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg2OSIgbmFtZT0iT3V0cHV0ODY5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NjkiIHR5cGU9InRuczpQb3J0VHlwZTg2OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg2OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODY5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NjkiIGJpbmRpbmc9InRuczpCaW5kaW5nODY5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg3MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg3MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg3MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODcwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODcwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg3MCIgbmFtZT0iSW5wdXQ4NzAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODcwIiBuYW1lPSJPdXRwdXQ4NzAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg3MCIgdHlwZT0idG5zOlBvcnRUeXBlODcwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODcwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg3MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NzAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg3MCIgYmluZGluZz0idG5zOkJpbmRpbmc4NzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODcxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODcxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODcxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg3MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NzEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NzEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODcxIiBuYW1lPSJJbnB1dDg3MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NzEiIG5hbWU9Ik91dHB1dDg3MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODcxIiB0eXBlPSJ0bnM6UG9ydFR5cGU4NzEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NzEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODcxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg3MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODcxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzg3MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODcyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg3MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg3MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NzIiIG5hbWU9IklucHV0ODcyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg3MiIgbmFtZT0iT3V0cHV0ODcyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NzIiIHR5cGU9InRuczpQb3J0VHlwZTg3MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg3MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NzIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODcyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NzIiIGJpbmRpbmc9InRuczpCaW5kaW5nODcyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg3MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg3MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg3MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODczIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODczIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg3MyIgbmFtZT0iSW5wdXQ4NzMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODczIiBuYW1lPSJPdXRwdXQ4NzMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg3MyIgdHlwZT0idG5zOlBvcnRUeXBlODczIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODczIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg3MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NzMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg3MyIgYmluZGluZz0idG5zOkJpbmRpbmc4NzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODc0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODc0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODc0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg3NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NzQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NzQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODc0IiBuYW1lPSJJbnB1dDg3NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NzQiIG5hbWU9Ik91dHB1dDg3NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODc0IiB0eXBlPSJ0bnM6UG9ydFR5cGU4NzQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NzQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODc0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg3NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODc0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg3NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODc1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg3NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg3NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NzUiIG5hbWU9IklucHV0ODc1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg3NSIgbmFtZT0iT3V0cHV0ODc1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NzUiIHR5cGU9InRuczpQb3J0VHlwZTg3NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg3NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NzUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODc1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NzUiIGJpbmRpbmc9InRuczpCaW5kaW5nODc1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg3NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg3NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg3NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODc2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODc2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg3NiIgbmFtZT0iSW5wdXQ4NzYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODc2IiBuYW1lPSJPdXRwdXQ4NzYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg3NiIgdHlwZT0idG5zOlBvcnRUeXBlODc2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODc2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg3NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NzYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg3NiIgYmluZGluZz0idG5zOkJpbmRpbmc4NzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODc3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODc3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODc3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg3NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NzciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NzciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODc3IiBuYW1lPSJJbnB1dDg3NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NzciIG5hbWU9Ik91dHB1dDg3NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODc3IiB0eXBlPSJ0bnM6UG9ydFR5cGU4NzciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NzciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODc3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg3NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODc3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg3NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4NzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODc4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg3OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg3OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NzgiIG5hbWU9IklucHV0ODc4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg3OCIgbmFtZT0iT3V0cHV0ODc4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4NzgiIHR5cGU9InRuczpQb3J0VHlwZTg3OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg3OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244NzgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODc4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NzgiIGJpbmRpbmc9InRuczpCaW5kaW5nODc4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg3OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg3OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg3OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODc5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODc5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg3OSIgbmFtZT0iSW5wdXQ4NzkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODc5IiBuYW1lPSJPdXRwdXQ4NzkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg3OSIgdHlwZT0idG5zOlBvcnRUeXBlODc5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODc5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg3OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4NzkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg3OSIgYmluZGluZz0idG5zOkJpbmRpbmc4NzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODgwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODgwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODgwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg4MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4ODAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244ODAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODgwIiBuYW1lPSJJbnB1dDg4MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4ODAiIG5hbWU9Ik91dHB1dDg4MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODgwIiB0eXBlPSJ0bnM6UG9ydFR5cGU4ODAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244ODAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODgwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg4MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODgwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzg4MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4ODEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4ODEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4ODEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODgxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg4MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg4MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4ODEiIG5hbWU9IklucHV0ODgxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg4MSIgbmFtZT0iT3V0cHV0ODgxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4ODEiIHR5cGU9InRuczpQb3J0VHlwZTg4MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg4MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244ODEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODgxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4ODEiIGJpbmRpbmc9InRuczpCaW5kaW5nODgxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg4MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg4MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg4MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4ODIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODgyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODgyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg4MiIgbmFtZT0iSW5wdXQ4ODIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODgyIiBuYW1lPSJPdXRwdXQ4ODIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg4MiIgdHlwZT0idG5zOlBvcnRUeXBlODgyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODgyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg4MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4ODIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg4MiIgYmluZGluZz0idG5zOkJpbmRpbmc4ODIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODgzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODgzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODgzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg4MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4ODMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244ODMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODgzIiBuYW1lPSJJbnB1dDg4MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4ODMiIG5hbWU9Ik91dHB1dDg4MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODgzIiB0eXBlPSJ0bnM6UG9ydFR5cGU4ODMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244ODMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODgzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg4MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODgzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzg4MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4ODQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4ODQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4ODQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODg0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg4NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg4NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4ODQiIG5hbWU9IklucHV0ODg0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg4NCIgbmFtZT0iT3V0cHV0ODg0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4ODQiIHR5cGU9InRuczpQb3J0VHlwZTg4NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg4NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244ODQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODg0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4ODQiIGJpbmRpbmc9InRuczpCaW5kaW5nODg0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg4NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg4NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg4NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4ODUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODg1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODg1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg4NSIgbmFtZT0iSW5wdXQ4ODUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODg1IiBuYW1lPSJPdXRwdXQ4ODUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg4NSIgdHlwZT0idG5zOlBvcnRUeXBlODg1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODg1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg4NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4ODUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg4NSIgYmluZGluZz0idG5zOkJpbmRpbmc4ODUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODg2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODg2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODg2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg4NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4ODYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244ODYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODg2IiBuYW1lPSJJbnB1dDg4NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4ODYiIG5hbWU9Ik91dHB1dDg4NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODg2IiB0eXBlPSJ0bnM6UG9ydFR5cGU4ODYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244ODYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODg2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg4NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODg2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg4NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4ODciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4ODciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4ODciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODg3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg4NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg4NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4ODciIG5hbWU9IklucHV0ODg3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg4NyIgbmFtZT0iT3V0cHV0ODg3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4ODciIHR5cGU9InRuczpQb3J0VHlwZTg4NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg4NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244ODciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODg3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4ODciIGJpbmRpbmc9InRuczpCaW5kaW5nODg3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg4OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg4OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg4OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4ODgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODg4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODg4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg4OCIgbmFtZT0iSW5wdXQ4ODgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODg4IiBuYW1lPSJPdXRwdXQ4ODgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg4OCIgdHlwZT0idG5zOlBvcnRUeXBlODg4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODg4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg4OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4ODgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg4OCIgYmluZGluZz0idG5zOkJpbmRpbmc4ODgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODg5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODg5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODg5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg4OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4ODkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244ODkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODg5IiBuYW1lPSJJbnB1dDg4OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4ODkiIG5hbWU9Ik91dHB1dDg4OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODg5IiB0eXBlPSJ0bnM6UG9ydFR5cGU4ODkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244ODkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODg5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg4OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODg5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg4OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4OTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4OTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4OTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODkwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg5MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg5MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4OTAiIG5hbWU9IklucHV0ODkwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg5MCIgbmFtZT0iT3V0cHV0ODkwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4OTAiIHR5cGU9InRuczpQb3J0VHlwZTg5MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg5MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244OTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODkwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4OTAiIGJpbmRpbmc9InRuczpCaW5kaW5nODkwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg5MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg5MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg5MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4OTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODkxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODkxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg5MSIgbmFtZT0iSW5wdXQ4OTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODkxIiBuYW1lPSJPdXRwdXQ4OTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg5MSIgdHlwZT0idG5zOlBvcnRUeXBlODkxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODkxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg5MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4OTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg5MSIgYmluZGluZz0idG5zOkJpbmRpbmc4OTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODkyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODkyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODkyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg5MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4OTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244OTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODkyIiBuYW1lPSJJbnB1dDg5MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4OTIiIG5hbWU9Ik91dHB1dDg5MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODkyIiB0eXBlPSJ0bnM6UG9ydFR5cGU4OTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244OTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODkyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg5MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODkyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzg5MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4OTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4OTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4OTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODkzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg5MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg5MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4OTMiIG5hbWU9IklucHV0ODkzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg5MyIgbmFtZT0iT3V0cHV0ODkzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4OTMiIHR5cGU9InRuczpQb3J0VHlwZTg5MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg5MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244OTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODkzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4OTMiIGJpbmRpbmc9InRuczpCaW5kaW5nODkzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg5NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg5NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg5NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4OTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODk0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODk0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg5NCIgbmFtZT0iSW5wdXQ4OTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODk0IiBuYW1lPSJPdXRwdXQ4OTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg5NCIgdHlwZT0idG5zOlBvcnRUeXBlODk0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODk0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg5NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4OTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg5NCIgYmluZGluZz0idG5zOkJpbmRpbmc4OTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODk1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODk1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODk1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg5NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4OTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244OTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODk1IiBuYW1lPSJJbnB1dDg5NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4OTUiIG5hbWU9Ik91dHB1dDg5NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODk1IiB0eXBlPSJ0bnM6UG9ydFR5cGU4OTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244OTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODk1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg5NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODk1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg5NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4OTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4OTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4OTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODk2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg5NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg5NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4OTYiIG5hbWU9IklucHV0ODk2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg5NiIgbmFtZT0iT3V0cHV0ODk2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4OTYiIHR5cGU9InRuczpQb3J0VHlwZTg5NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg5NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244OTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODk2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4OTYiIGJpbmRpbmc9InRuczpCaW5kaW5nODk2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg5NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg5NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTg5NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4OTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODk3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODk3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg5NyIgbmFtZT0iSW5wdXQ4OTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlODk3IiBuYW1lPSJPdXRwdXQ4OTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg5NyIgdHlwZT0idG5zOlBvcnRUeXBlODk3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODk3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg5NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4OTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg5NyIgYmluZGluZz0idG5zOkJpbmRpbmc4OTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlODk4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODk4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODk4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDg5OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4OTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244OTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlODk4IiBuYW1lPSJJbnB1dDg5OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4OTgiIG5hbWU9Ik91dHB1dDg5OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODk4IiB0eXBlPSJ0bnM6UG9ydFR5cGU4OTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244OTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODk4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg5OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0ODk4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg5OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4OTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ4OTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4OTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODk5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTg5OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg5OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4OTkiIG5hbWU9IklucHV0ODk5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg5OSIgbmFtZT0iT3V0cHV0ODk5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc4OTkiIHR5cGU9InRuczpQb3J0VHlwZTg5OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg5OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb244OTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODk5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4OTkiIGJpbmRpbmc9InRuczpCaW5kaW5nODk5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkwMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkwMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkwMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTAwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTAwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkwMCIgbmFtZT0iSW5wdXQ5MDAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTAwIiBuYW1lPSJPdXRwdXQ5MDAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkwMCIgdHlwZT0idG5zOlBvcnRUeXBlOTAwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTAwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkwMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MDAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkwMCIgYmluZGluZz0idG5zOkJpbmRpbmc5MDAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTAxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTAxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTAxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkwMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MDEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MDEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTAxIiBuYW1lPSJJbnB1dDkwMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MDEiIG5hbWU9Ik91dHB1dDkwMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTAxIiB0eXBlPSJ0bnM6UG9ydFR5cGU5MDEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MDEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTAxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkwMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTAxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzkwMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTAyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkwMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkwMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MDIiIG5hbWU9IklucHV0OTAyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkwMiIgbmFtZT0iT3V0cHV0OTAyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MDIiIHR5cGU9InRuczpQb3J0VHlwZTkwMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkwMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MDIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTAyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MDIiIGJpbmRpbmc9InRuczpCaW5kaW5nOTAyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkwMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkwMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkwMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTAzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTAzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkwMyIgbmFtZT0iSW5wdXQ5MDMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTAzIiBuYW1lPSJPdXRwdXQ5MDMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkwMyIgdHlwZT0idG5zOlBvcnRUeXBlOTAzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTAzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkwMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MDMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkwMyIgYmluZGluZz0idG5zOkJpbmRpbmc5MDMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTA0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTA0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTA0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkwNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MDQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MDQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTA0IiBuYW1lPSJJbnB1dDkwNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MDQiIG5hbWU9Ik91dHB1dDkwNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTA0IiB0eXBlPSJ0bnM6UG9ydFR5cGU5MDQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MDQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTA0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkwNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTA0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzkwNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTA1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkwNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkwNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MDUiIG5hbWU9IklucHV0OTA1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkwNSIgbmFtZT0iT3V0cHV0OTA1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MDUiIHR5cGU9InRuczpQb3J0VHlwZTkwNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkwNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MDUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTA1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MDUiIGJpbmRpbmc9InRuczpCaW5kaW5nOTA1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkwNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkwNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkwNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTA2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTA2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkwNiIgbmFtZT0iSW5wdXQ5MDYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTA2IiBuYW1lPSJPdXRwdXQ5MDYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkwNiIgdHlwZT0idG5zOlBvcnRUeXBlOTA2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTA2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkwNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MDYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkwNiIgYmluZGluZz0idG5zOkJpbmRpbmc5MDYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTA3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTA3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTA3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkwNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MDciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MDciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTA3IiBuYW1lPSJJbnB1dDkwNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MDciIG5hbWU9Ik91dHB1dDkwNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTA3IiB0eXBlPSJ0bnM6UG9ydFR5cGU5MDciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MDciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTA3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkwNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTA3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzkwNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTA4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkwOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkwOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MDgiIG5hbWU9IklucHV0OTA4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkwOCIgbmFtZT0iT3V0cHV0OTA4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MDgiIHR5cGU9InRuczpQb3J0VHlwZTkwOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkwOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MDgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTA4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MDgiIGJpbmRpbmc9InRuczpCaW5kaW5nOTA4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkwOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkwOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkwOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTA5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTA5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkwOSIgbmFtZT0iSW5wdXQ5MDkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTA5IiBuYW1lPSJPdXRwdXQ5MDkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkwOSIgdHlwZT0idG5zOlBvcnRUeXBlOTA5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTA5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkwOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MDkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkwOSIgYmluZGluZz0idG5zOkJpbmRpbmc5MDkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTEwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTEwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTEwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkxMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTEwIiBuYW1lPSJJbnB1dDkxMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MTAiIG5hbWU9Ik91dHB1dDkxMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTEwIiB0eXBlPSJ0bnM6UG9ydFR5cGU5MTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTEwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkxMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTEwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzkxMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTExIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkxMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkxMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MTEiIG5hbWU9IklucHV0OTExIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkxMSIgbmFtZT0iT3V0cHV0OTExIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MTEiIHR5cGU9InRuczpQb3J0VHlwZTkxMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkxMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTExIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MTEiIGJpbmRpbmc9InRuczpCaW5kaW5nOTExIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkxMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkxMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkxMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTEyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTEyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkxMiIgbmFtZT0iSW5wdXQ5MTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTEyIiBuYW1lPSJPdXRwdXQ5MTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkxMiIgdHlwZT0idG5zOlBvcnRUeXBlOTEyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTEyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkxMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkxMiIgYmluZGluZz0idG5zOkJpbmRpbmc5MTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTEzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTEzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTEzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkxMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTEzIiBuYW1lPSJJbnB1dDkxMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MTMiIG5hbWU9Ik91dHB1dDkxMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTEzIiB0eXBlPSJ0bnM6UG9ydFR5cGU5MTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTEzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkxMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTEzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzkxMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTE0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkxNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkxNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MTQiIG5hbWU9IklucHV0OTE0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkxNCIgbmFtZT0iT3V0cHV0OTE0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MTQiIHR5cGU9InRuczpQb3J0VHlwZTkxNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkxNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTE0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MTQiIGJpbmRpbmc9InRuczpCaW5kaW5nOTE0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkxNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkxNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkxNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTE1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTE1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkxNSIgbmFtZT0iSW5wdXQ5MTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTE1IiBuYW1lPSJPdXRwdXQ5MTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkxNSIgdHlwZT0idG5zOlBvcnRUeXBlOTE1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTE1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkxNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkxNSIgYmluZGluZz0idG5zOkJpbmRpbmc5MTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTE2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTE2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTE2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkxNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTE2IiBuYW1lPSJJbnB1dDkxNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MTYiIG5hbWU9Ik91dHB1dDkxNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTE2IiB0eXBlPSJ0bnM6UG9ydFR5cGU5MTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTE2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkxNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTE2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzkxNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTE3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkxNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkxNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MTciIG5hbWU9IklucHV0OTE3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkxNyIgbmFtZT0iT3V0cHV0OTE3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MTciIHR5cGU9InRuczpQb3J0VHlwZTkxNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkxNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTE3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MTciIGJpbmRpbmc9InRuczpCaW5kaW5nOTE3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkxOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkxOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkxOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTE4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTE4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkxOCIgbmFtZT0iSW5wdXQ5MTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTE4IiBuYW1lPSJPdXRwdXQ5MTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkxOCIgdHlwZT0idG5zOlBvcnRUeXBlOTE4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTE4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkxOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkxOCIgYmluZGluZz0idG5zOkJpbmRpbmc5MTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTE5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTE5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTE5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkxOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTE5IiBuYW1lPSJJbnB1dDkxOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MTkiIG5hbWU9Ik91dHB1dDkxOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTE5IiB0eXBlPSJ0bnM6UG9ydFR5cGU5MTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTE5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkxOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTE5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzkxOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTIwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkyMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkyMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MjAiIG5hbWU9IklucHV0OTIwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkyMCIgbmFtZT0iT3V0cHV0OTIwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MjAiIHR5cGU9InRuczpQb3J0VHlwZTkyMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkyMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTIwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MjAiIGJpbmRpbmc9InRuczpCaW5kaW5nOTIwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkyMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkyMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkyMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTIxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTIxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkyMSIgbmFtZT0iSW5wdXQ5MjEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTIxIiBuYW1lPSJPdXRwdXQ5MjEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkyMSIgdHlwZT0idG5zOlBvcnRUeXBlOTIxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTIxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkyMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MjEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkyMSIgYmluZGluZz0idG5zOkJpbmRpbmc5MjEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTIyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTIyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTIyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkyMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MjIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTIyIiBuYW1lPSJJbnB1dDkyMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MjIiIG5hbWU9Ik91dHB1dDkyMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTIyIiB0eXBlPSJ0bnM6UG9ydFR5cGU5MjIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTIyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkyMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTIyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzkyMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTIzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkyMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkyMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MjMiIG5hbWU9IklucHV0OTIzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkyMyIgbmFtZT0iT3V0cHV0OTIzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MjMiIHR5cGU9InRuczpQb3J0VHlwZTkyMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkyMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTIzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MjMiIGJpbmRpbmc9InRuczpCaW5kaW5nOTIzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkyNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkyNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkyNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTI0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTI0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkyNCIgbmFtZT0iSW5wdXQ5MjQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTI0IiBuYW1lPSJPdXRwdXQ5MjQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkyNCIgdHlwZT0idG5zOlBvcnRUeXBlOTI0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTI0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkyNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MjQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkyNCIgYmluZGluZz0idG5zOkJpbmRpbmc5MjQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTI1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTI1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTI1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkyNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MjUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTI1IiBuYW1lPSJJbnB1dDkyNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MjUiIG5hbWU9Ik91dHB1dDkyNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTI1IiB0eXBlPSJ0bnM6UG9ydFR5cGU5MjUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTI1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkyNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTI1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzkyNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTI2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkyNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkyNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MjYiIG5hbWU9IklucHV0OTI2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkyNiIgbmFtZT0iT3V0cHV0OTI2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MjYiIHR5cGU9InRuczpQb3J0VHlwZTkyNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkyNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTI2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MjYiIGJpbmRpbmc9InRuczpCaW5kaW5nOTI2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkyNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkyNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkyNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTI3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTI3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkyNyIgbmFtZT0iSW5wdXQ5MjciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTI3IiBuYW1lPSJPdXRwdXQ5MjciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkyNyIgdHlwZT0idG5zOlBvcnRUeXBlOTI3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTI3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkyNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MjciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkyNyIgYmluZGluZz0idG5zOkJpbmRpbmc5MjciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTI4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTI4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTI4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkyOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MjgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTI4IiBuYW1lPSJJbnB1dDkyOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MjgiIG5hbWU9Ik91dHB1dDkyOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTI4IiB0eXBlPSJ0bnM6UG9ydFR5cGU5MjgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTI4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkyOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTI4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzkyOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTI5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkyOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkyOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MjkiIG5hbWU9IklucHV0OTI5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkyOSIgbmFtZT0iT3V0cHV0OTI5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MjkiIHR5cGU9InRuczpQb3J0VHlwZTkyOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkyOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTI5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MjkiIGJpbmRpbmc9InRuczpCaW5kaW5nOTI5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkzMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkzMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkzMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTMwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTMwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkzMCIgbmFtZT0iSW5wdXQ5MzAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTMwIiBuYW1lPSJPdXRwdXQ5MzAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkzMCIgdHlwZT0idG5zOlBvcnRUeXBlOTMwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTMwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkzMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MzAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkzMCIgYmluZGluZz0idG5zOkJpbmRpbmc5MzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTMxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTMxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTMxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkzMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MzEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MzEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTMxIiBuYW1lPSJJbnB1dDkzMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MzEiIG5hbWU9Ik91dHB1dDkzMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTMxIiB0eXBlPSJ0bnM6UG9ydFR5cGU5MzEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MzEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTMxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkzMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTMxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzkzMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTMyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkzMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkzMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MzIiIG5hbWU9IklucHV0OTMyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkzMiIgbmFtZT0iT3V0cHV0OTMyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MzIiIHR5cGU9InRuczpQb3J0VHlwZTkzMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkzMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MzIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTMyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MzIiIGJpbmRpbmc9InRuczpCaW5kaW5nOTMyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkzMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkzMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkzMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTMzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTMzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkzMyIgbmFtZT0iSW5wdXQ5MzMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTMzIiBuYW1lPSJPdXRwdXQ5MzMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkzMyIgdHlwZT0idG5zOlBvcnRUeXBlOTMzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTMzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkzMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MzMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkzMyIgYmluZGluZz0idG5zOkJpbmRpbmc5MzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTM0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTM0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTM0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkzNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MzQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MzQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTM0IiBuYW1lPSJJbnB1dDkzNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MzQiIG5hbWU9Ik91dHB1dDkzNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTM0IiB0eXBlPSJ0bnM6UG9ydFR5cGU5MzQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MzQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTM0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkzNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTM0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzkzNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTM1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkzNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkzNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MzUiIG5hbWU9IklucHV0OTM1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkzNSIgbmFtZT0iT3V0cHV0OTM1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MzUiIHR5cGU9InRuczpQb3J0VHlwZTkzNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkzNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MzUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTM1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MzUiIGJpbmRpbmc9InRuczpCaW5kaW5nOTM1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkzNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkzNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkzNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTM2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTM2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkzNiIgbmFtZT0iSW5wdXQ5MzYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTM2IiBuYW1lPSJPdXRwdXQ5MzYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkzNiIgdHlwZT0idG5zOlBvcnRUeXBlOTM2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTM2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkzNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MzYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkzNiIgYmluZGluZz0idG5zOkJpbmRpbmc5MzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTM3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTM3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTM3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkzNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MzciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MzciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTM3IiBuYW1lPSJJbnB1dDkzNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MzciIG5hbWU9Ik91dHB1dDkzNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTM3IiB0eXBlPSJ0bnM6UG9ydFR5cGU5MzciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MzciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTM3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkzNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTM3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzkzNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5MzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTM4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkzOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkzOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MzgiIG5hbWU9IklucHV0OTM4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkzOCIgbmFtZT0iT3V0cHV0OTM4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5MzgiIHR5cGU9InRuczpQb3J0VHlwZTkzOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkzOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245MzgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTM4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MzgiIGJpbmRpbmc9InRuczpCaW5kaW5nOTM4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkzOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkzOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTkzOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTM5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTM5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkzOSIgbmFtZT0iSW5wdXQ5MzkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTM5IiBuYW1lPSJPdXRwdXQ5MzkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkzOSIgdHlwZT0idG5zOlBvcnRUeXBlOTM5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTM5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkzOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5MzkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkzOSIgYmluZGluZz0idG5zOkJpbmRpbmc5MzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTQwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTQwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk0MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NDAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NDAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTQwIiBuYW1lPSJJbnB1dDk0MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NDAiIG5hbWU9Ik91dHB1dDk0MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTQwIiB0eXBlPSJ0bnM6UG9ydFR5cGU5NDAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NDAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTQwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk0MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTQwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzk0MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk0MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk0MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NDEiIG5hbWU9IklucHV0OTQxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk0MSIgbmFtZT0iT3V0cHV0OTQxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NDEiIHR5cGU9InRuczpQb3J0VHlwZTk0MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk0MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NDEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTQxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NDEiIGJpbmRpbmc9InRuczpCaW5kaW5nOTQxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk0MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk0MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk0MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTQyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTQyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk0MiIgbmFtZT0iSW5wdXQ5NDIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTQyIiBuYW1lPSJPdXRwdXQ5NDIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk0MiIgdHlwZT0idG5zOlBvcnRUeXBlOTQyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTQyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk0MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NDIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk0MiIgYmluZGluZz0idG5zOkJpbmRpbmc5NDIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTQzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTQzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk0MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NDMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NDMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTQzIiBuYW1lPSJJbnB1dDk0MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NDMiIG5hbWU9Ik91dHB1dDk0MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTQzIiB0eXBlPSJ0bnM6UG9ydFR5cGU5NDMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NDMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTQzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk0MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTQzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzk0MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk0NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk0NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NDQiIG5hbWU9IklucHV0OTQ0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk0NCIgbmFtZT0iT3V0cHV0OTQ0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NDQiIHR5cGU9InRuczpQb3J0VHlwZTk0NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk0NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NDQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTQ0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NDQiIGJpbmRpbmc9InRuczpCaW5kaW5nOTQ0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk0NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk0NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk0NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTQ1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTQ1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk0NSIgbmFtZT0iSW5wdXQ5NDUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTQ1IiBuYW1lPSJPdXRwdXQ5NDUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk0NSIgdHlwZT0idG5zOlBvcnRUeXBlOTQ1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTQ1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk0NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NDUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk0NSIgYmluZGluZz0idG5zOkJpbmRpbmc5NDUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTQ2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTQ2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk0NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NDYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NDYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTQ2IiBuYW1lPSJJbnB1dDk0NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NDYiIG5hbWU9Ik91dHB1dDk0NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTQ2IiB0eXBlPSJ0bnM6UG9ydFR5cGU5NDYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NDYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTQ2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk0NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTQ2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk0NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk0NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk0NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NDciIG5hbWU9IklucHV0OTQ3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk0NyIgbmFtZT0iT3V0cHV0OTQ3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NDciIHR5cGU9InRuczpQb3J0VHlwZTk0NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk0NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NDciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTQ3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NDciIGJpbmRpbmc9InRuczpCaW5kaW5nOTQ3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk0OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk0OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk0OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTQ4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTQ4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk0OCIgbmFtZT0iSW5wdXQ5NDgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTQ4IiBuYW1lPSJPdXRwdXQ5NDgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk0OCIgdHlwZT0idG5zOlBvcnRUeXBlOTQ4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTQ4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk0OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NDgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk0OCIgYmluZGluZz0idG5zOkJpbmRpbmc5NDgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTQ5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTQ5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk0OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NDkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NDkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTQ5IiBuYW1lPSJJbnB1dDk0OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NDkiIG5hbWU9Ik91dHB1dDk0OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTQ5IiB0eXBlPSJ0bnM6UG9ydFR5cGU5NDkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NDkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTQ5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk0OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTQ5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk0OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTUwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk1MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk1MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NTAiIG5hbWU9IklucHV0OTUwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk1MCIgbmFtZT0iT3V0cHV0OTUwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NTAiIHR5cGU9InRuczpQb3J0VHlwZTk1MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk1MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTUwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NTAiIGJpbmRpbmc9InRuczpCaW5kaW5nOTUwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk1MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk1MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk1MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTUxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTUxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk1MSIgbmFtZT0iSW5wdXQ5NTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTUxIiBuYW1lPSJPdXRwdXQ5NTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk1MSIgdHlwZT0idG5zOlBvcnRUeXBlOTUxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTUxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk1MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk1MSIgYmluZGluZz0idG5zOkJpbmRpbmc5NTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTUyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTUyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTUyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk1MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTUyIiBuYW1lPSJJbnB1dDk1MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NTIiIG5hbWU9Ik91dHB1dDk1MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTUyIiB0eXBlPSJ0bnM6UG9ydFR5cGU5NTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTUyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk1MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTUyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzk1MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTUzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk1MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk1MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NTMiIG5hbWU9IklucHV0OTUzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk1MyIgbmFtZT0iT3V0cHV0OTUzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NTMiIHR5cGU9InRuczpQb3J0VHlwZTk1MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk1MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTUzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NTMiIGJpbmRpbmc9InRuczpCaW5kaW5nOTUzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk1NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk1NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk1NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTU0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTU0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk1NCIgbmFtZT0iSW5wdXQ5NTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTU0IiBuYW1lPSJPdXRwdXQ5NTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk1NCIgdHlwZT0idG5zOlBvcnRUeXBlOTU0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTU0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk1NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk1NCIgYmluZGluZz0idG5zOkJpbmRpbmc5NTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTU1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTU1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTU1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk1NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTU1IiBuYW1lPSJJbnB1dDk1NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NTUiIG5hbWU9Ik91dHB1dDk1NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTU1IiB0eXBlPSJ0bnM6UG9ydFR5cGU5NTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTU1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk1NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTU1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk1NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTU2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk1NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk1NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NTYiIG5hbWU9IklucHV0OTU2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk1NiIgbmFtZT0iT3V0cHV0OTU2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NTYiIHR5cGU9InRuczpQb3J0VHlwZTk1NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk1NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTU2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NTYiIGJpbmRpbmc9InRuczpCaW5kaW5nOTU2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk1NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk1NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk1NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTU3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTU3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk1NyIgbmFtZT0iSW5wdXQ5NTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTU3IiBuYW1lPSJPdXRwdXQ5NTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk1NyIgdHlwZT0idG5zOlBvcnRUeXBlOTU3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTU3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk1NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk1NyIgYmluZGluZz0idG5zOkJpbmRpbmc5NTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTU4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTU4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTU4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk1OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTU4IiBuYW1lPSJJbnB1dDk1OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NTgiIG5hbWU9Ik91dHB1dDk1OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTU4IiB0eXBlPSJ0bnM6UG9ydFR5cGU5NTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTU4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk1OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTU4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk1OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTU5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk1OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk1OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NTkiIG5hbWU9IklucHV0OTU5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk1OSIgbmFtZT0iT3V0cHV0OTU5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NTkiIHR5cGU9InRuczpQb3J0VHlwZTk1OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk1OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTU5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NTkiIGJpbmRpbmc9InRuczpCaW5kaW5nOTU5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk2MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk2MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk2MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTYwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTYwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk2MCIgbmFtZT0iSW5wdXQ5NjAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTYwIiBuYW1lPSJPdXRwdXQ5NjAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk2MCIgdHlwZT0idG5zOlBvcnRUeXBlOTYwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTYwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk2MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NjAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk2MCIgYmluZGluZz0idG5zOkJpbmRpbmc5NjAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTYxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTYxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTYxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk2MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NjEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTYxIiBuYW1lPSJJbnB1dDk2MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NjEiIG5hbWU9Ik91dHB1dDk2MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTYxIiB0eXBlPSJ0bnM6UG9ydFR5cGU5NjEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTYxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk2MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTYxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzk2MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTYyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk2MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk2MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NjIiIG5hbWU9IklucHV0OTYyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk2MiIgbmFtZT0iT3V0cHV0OTYyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NjIiIHR5cGU9InRuczpQb3J0VHlwZTk2MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk2MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTYyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NjIiIGJpbmRpbmc9InRuczpCaW5kaW5nOTYyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk2MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk2MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk2MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTYzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTYzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk2MyIgbmFtZT0iSW5wdXQ5NjMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTYzIiBuYW1lPSJPdXRwdXQ5NjMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk2MyIgdHlwZT0idG5zOlBvcnRUeXBlOTYzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTYzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk2MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NjMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk2MyIgYmluZGluZz0idG5zOkJpbmRpbmc5NjMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTY0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTY0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTY0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk2NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NjQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTY0IiBuYW1lPSJJbnB1dDk2NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NjQiIG5hbWU9Ik91dHB1dDk2NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTY0IiB0eXBlPSJ0bnM6UG9ydFR5cGU5NjQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTY0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk2NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTY0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk2NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTY1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk2NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk2NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NjUiIG5hbWU9IklucHV0OTY1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk2NSIgbmFtZT0iT3V0cHV0OTY1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NjUiIHR5cGU9InRuczpQb3J0VHlwZTk2NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk2NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTY1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NjUiIGJpbmRpbmc9InRuczpCaW5kaW5nOTY1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk2NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk2NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk2NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTY2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTY2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk2NiIgbmFtZT0iSW5wdXQ5NjYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTY2IiBuYW1lPSJPdXRwdXQ5NjYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk2NiIgdHlwZT0idG5zOlBvcnRUeXBlOTY2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTY2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk2NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NjYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk2NiIgYmluZGluZz0idG5zOkJpbmRpbmc5NjYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTY3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTY3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTY3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk2NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NjciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTY3IiBuYW1lPSJJbnB1dDk2NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NjciIG5hbWU9Ik91dHB1dDk2NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTY3IiB0eXBlPSJ0bnM6UG9ydFR5cGU5NjciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTY3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk2NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTY3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk2NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTY4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk2OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk2OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NjgiIG5hbWU9IklucHV0OTY4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk2OCIgbmFtZT0iT3V0cHV0OTY4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NjgiIHR5cGU9InRuczpQb3J0VHlwZTk2OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk2OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTY4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NjgiIGJpbmRpbmc9InRuczpCaW5kaW5nOTY4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk2OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk2OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk2OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTY5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTY5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk2OSIgbmFtZT0iSW5wdXQ5NjkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTY5IiBuYW1lPSJPdXRwdXQ5NjkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk2OSIgdHlwZT0idG5zOlBvcnRUeXBlOTY5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTY5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk2OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NjkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk2OSIgYmluZGluZz0idG5zOkJpbmRpbmc5NjkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTcwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTcwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTcwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk3MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NzAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NzAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTcwIiBuYW1lPSJJbnB1dDk3MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NzAiIG5hbWU9Ik91dHB1dDk3MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTcwIiB0eXBlPSJ0bnM6UG9ydFR5cGU5NzAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NzAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTcwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk3MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTcwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzk3MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTcxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk3MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk3MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NzEiIG5hbWU9IklucHV0OTcxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk3MSIgbmFtZT0iT3V0cHV0OTcxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NzEiIHR5cGU9InRuczpQb3J0VHlwZTk3MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk3MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NzEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTcxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NzEiIGJpbmRpbmc9InRuczpCaW5kaW5nOTcxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk3MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk3MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk3MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTcyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTcyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk3MiIgbmFtZT0iSW5wdXQ5NzIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTcyIiBuYW1lPSJPdXRwdXQ5NzIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk3MiIgdHlwZT0idG5zOlBvcnRUeXBlOTcyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTcyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk3MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NzIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk3MiIgYmluZGluZz0idG5zOkJpbmRpbmc5NzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTczIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTczIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTczIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk3MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NzMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NzMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTczIiBuYW1lPSJJbnB1dDk3MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NzMiIG5hbWU9Ik91dHB1dDk3MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTczIiB0eXBlPSJ0bnM6UG9ydFR5cGU5NzMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NzMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTczIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk3MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTczIiBiaW5kaW5nPSJ0bnM6QmluZGluZzk3MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTc0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk3NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk3NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NzQiIG5hbWU9IklucHV0OTc0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk3NCIgbmFtZT0iT3V0cHV0OTc0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NzQiIHR5cGU9InRuczpQb3J0VHlwZTk3NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk3NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NzQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTc0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NzQiIGJpbmRpbmc9InRuczpCaW5kaW5nOTc0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk3NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk3NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk3NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTc1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTc1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk3NSIgbmFtZT0iSW5wdXQ5NzUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTc1IiBuYW1lPSJPdXRwdXQ5NzUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk3NSIgdHlwZT0idG5zOlBvcnRUeXBlOTc1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTc1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk3NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NzUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk3NSIgYmluZGluZz0idG5zOkJpbmRpbmc5NzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTc2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTc2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTc2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk3NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NzYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NzYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTc2IiBuYW1lPSJJbnB1dDk3NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NzYiIG5hbWU9Ik91dHB1dDk3NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTc2IiB0eXBlPSJ0bnM6UG9ydFR5cGU5NzYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NzYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTc2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk3NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTc2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk3NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5NzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTc3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk3NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk3NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NzciIG5hbWU9IklucHV0OTc3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk3NyIgbmFtZT0iT3V0cHV0OTc3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5NzciIHR5cGU9InRuczpQb3J0VHlwZTk3NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk3NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245NzciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTc3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NzciIGJpbmRpbmc9InRuczpCaW5kaW5nOTc3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk3OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk3OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk3OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTc4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTc4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk3OCIgbmFtZT0iSW5wdXQ5NzgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTc4IiBuYW1lPSJPdXRwdXQ5NzgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk3OCIgdHlwZT0idG5zOlBvcnRUeXBlOTc4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTc4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk3OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5NzgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk3OCIgYmluZGluZz0idG5zOkJpbmRpbmc5NzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTc5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTc5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTc5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk3OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NzkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NzkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTc5IiBuYW1lPSJJbnB1dDk3OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NzkiIG5hbWU9Ik91dHB1dDk3OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTc5IiB0eXBlPSJ0bnM6UG9ydFR5cGU5NzkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NzkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTc5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk3OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTc5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk3OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5ODAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5ODAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5ODAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTgwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk4MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk4MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5ODAiIG5hbWU9IklucHV0OTgwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk4MCIgbmFtZT0iT3V0cHV0OTgwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5ODAiIHR5cGU9InRuczpQb3J0VHlwZTk4MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk4MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245ODAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTgwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5ODAiIGJpbmRpbmc9InRuczpCaW5kaW5nOTgwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk4MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk4MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk4MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5ODEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTgxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTgxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk4MSIgbmFtZT0iSW5wdXQ5ODEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTgxIiBuYW1lPSJPdXRwdXQ5ODEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk4MSIgdHlwZT0idG5zOlBvcnRUeXBlOTgxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTgxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk4MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5ODEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk4MSIgYmluZGluZz0idG5zOkJpbmRpbmc5ODEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTgyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTgyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTgyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk4MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5ODIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245ODIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTgyIiBuYW1lPSJJbnB1dDk4MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5ODIiIG5hbWU9Ik91dHB1dDk4MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTgyIiB0eXBlPSJ0bnM6UG9ydFR5cGU5ODIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245ODIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTgyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk4MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTgyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzk4MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5ODMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5ODMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5ODMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTgzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk4MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk4MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5ODMiIG5hbWU9IklucHV0OTgzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk4MyIgbmFtZT0iT3V0cHV0OTgzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5ODMiIHR5cGU9InRuczpQb3J0VHlwZTk4MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk4MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245ODMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTgzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5ODMiIGJpbmRpbmc9InRuczpCaW5kaW5nOTgzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk4NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk4NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk4NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5ODQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTg0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTg0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk4NCIgbmFtZT0iSW5wdXQ5ODQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTg0IiBuYW1lPSJPdXRwdXQ5ODQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk4NCIgdHlwZT0idG5zOlBvcnRUeXBlOTg0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTg0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk4NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5ODQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk4NCIgYmluZGluZz0idG5zOkJpbmRpbmc5ODQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTg1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTg1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTg1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk4NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5ODUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245ODUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTg1IiBuYW1lPSJJbnB1dDk4NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5ODUiIG5hbWU9Ik91dHB1dDk4NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTg1IiB0eXBlPSJ0bnM6UG9ydFR5cGU5ODUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245ODUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTg1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk4NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTg1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk4NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5ODYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5ODYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5ODYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTg2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk4NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk4NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5ODYiIG5hbWU9IklucHV0OTg2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk4NiIgbmFtZT0iT3V0cHV0OTg2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5ODYiIHR5cGU9InRuczpQb3J0VHlwZTk4NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk4NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245ODYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTg2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5ODYiIGJpbmRpbmc9InRuczpCaW5kaW5nOTg2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk4NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk4NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk4NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5ODciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTg3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTg3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk4NyIgbmFtZT0iSW5wdXQ5ODciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTg3IiBuYW1lPSJPdXRwdXQ5ODciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk4NyIgdHlwZT0idG5zOlBvcnRUeXBlOTg3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTg3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk4NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5ODciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk4NyIgYmluZGluZz0idG5zOkJpbmRpbmc5ODciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTg4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTg4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTg4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk4OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5ODgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245ODgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTg4IiBuYW1lPSJJbnB1dDk4OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5ODgiIG5hbWU9Ik91dHB1dDk4OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTg4IiB0eXBlPSJ0bnM6UG9ydFR5cGU5ODgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245ODgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTg4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk4OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTg4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk4OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5ODkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5ODkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5ODkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTg5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk4OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk4OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5ODkiIG5hbWU9IklucHV0OTg5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk4OSIgbmFtZT0iT3V0cHV0OTg5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5ODkiIHR5cGU9InRuczpQb3J0VHlwZTk4OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk4OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245ODkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTg5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5ODkiIGJpbmRpbmc9InRuczpCaW5kaW5nOTg5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk5MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk5MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk5MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5OTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTkwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTkwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk5MCIgbmFtZT0iSW5wdXQ5OTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTkwIiBuYW1lPSJPdXRwdXQ5OTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk5MCIgdHlwZT0idG5zOlBvcnRUeXBlOTkwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTkwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk5MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5OTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk5MCIgYmluZGluZz0idG5zOkJpbmRpbmc5OTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTkxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTkxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTkxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk5MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5OTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245OTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTkxIiBuYW1lPSJJbnB1dDk5MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5OTEiIG5hbWU9Ik91dHB1dDk5MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTkxIiB0eXBlPSJ0bnM6UG9ydFR5cGU5OTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245OTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTkxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk5MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTkxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzk5MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5OTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5OTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5OTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTkyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk5MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk5MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5OTIiIG5hbWU9IklucHV0OTkyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk5MiIgbmFtZT0iT3V0cHV0OTkyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5OTIiIHR5cGU9InRuczpQb3J0VHlwZTk5MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk5MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245OTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTkyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5OTIiIGJpbmRpbmc9InRuczpCaW5kaW5nOTkyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk5MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk5MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk5MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5OTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTkzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTkzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk5MyIgbmFtZT0iSW5wdXQ5OTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTkzIiBuYW1lPSJPdXRwdXQ5OTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk5MyIgdHlwZT0idG5zOlBvcnRUeXBlOTkzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTkzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk5MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5OTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk5MyIgYmluZGluZz0idG5zOkJpbmRpbmc5OTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTk0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTk0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTk0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk5NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5OTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245OTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTk0IiBuYW1lPSJJbnB1dDk5NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5OTQiIG5hbWU9Ik91dHB1dDk5NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTk0IiB0eXBlPSJ0bnM6UG9ydFR5cGU5OTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245OTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTk0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk5NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTk0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk5NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5OTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5OTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5OTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTk1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk5NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk5NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5OTUiIG5hbWU9IklucHV0OTk1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk5NSIgbmFtZT0iT3V0cHV0OTk1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5OTUiIHR5cGU9InRuczpQb3J0VHlwZTk5NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk5NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245OTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTk1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5OTUiIGJpbmRpbmc9InRuczpCaW5kaW5nOTk1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk5NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk5NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk5NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5OTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTk2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTk2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk5NiIgbmFtZT0iSW5wdXQ5OTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTk2IiBuYW1lPSJPdXRwdXQ5OTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk5NiIgdHlwZT0idG5zOlBvcnRUeXBlOTk2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTk2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk5NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5OTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk5NiIgYmluZGluZz0idG5zOkJpbmRpbmc5OTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOTk3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTk3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTk3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDk5NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5OTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245OTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOTk3IiBuYW1lPSJJbnB1dDk5NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5OTciIG5hbWU9Ik91dHB1dDk5NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTk3IiB0eXBlPSJ0bnM6UG9ydFR5cGU5OTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245OTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTk3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk5NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OTk3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk5NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5OTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5OTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5OTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTk4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTk5OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk5OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5OTgiIG5hbWU9IklucHV0OTk4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk5OCIgbmFtZT0iT3V0cHV0OTk4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5OTgiIHR5cGU9InRuczpQb3J0VHlwZTk5OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk5OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245OTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTk4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5OTgiIGJpbmRpbmc9InRuczpCaW5kaW5nOTk4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk5OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk5OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTk5OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5OTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTk5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTk5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk5OSIgbmFtZT0iSW5wdXQ5OTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOTk5IiBuYW1lPSJPdXRwdXQ5OTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk5OSIgdHlwZT0idG5zOlBvcnRUeXBlOTk5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTk5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk5OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U5OTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk5OSIgYmluZGluZz0idG5zOkJpbmRpbmc5OTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8yMDBLQi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS8yMDBLQi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMWQzNzA2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvMjAwS0Iud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDYyMDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9IkRlZmluaXRpb24iIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scyI+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDExIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDUzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDU5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ1OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDY5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ2OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDcwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDcxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDcyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDczIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDc5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDgzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDg5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ4OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDk5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ5OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEwMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTAwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTAxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEwMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEwMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTAzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTA0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEwNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEwNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTA2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTA3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEwOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEwOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTA5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTEwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDExMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDExMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTEyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTEzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDExNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDExNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTE1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTE2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDExNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDExOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTE4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTE5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEyMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEyMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTIxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTIyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEyMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEyNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTI0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTI1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEyNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEyNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTI3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTI4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEyOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEzMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTMwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTMxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEzMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEzMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTMzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTM0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEzNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEzNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTM2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTM3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEzOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEzOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTM5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE0MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE0MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE0NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE0NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE0NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE0OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE1MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE1MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTUxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTUyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE1MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE1NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTU0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTU1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE1NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE1NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTU3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTU4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE1OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE2MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTYwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTYxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE2MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE2MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTYzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTY0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE2NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE2NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTY2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTY3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE2OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE2OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTY5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTcwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE3MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE3MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTcyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTczIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE3NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE3NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTc1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTc2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE3NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE3OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTc4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTc5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxODAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE4MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE4MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTgxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTgyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxODIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxODMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE4MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE4NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTg0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTg1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxODUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxODYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE4NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE4NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTg3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTg4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxODgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxODkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE4OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE5MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTkwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTkxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxOTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxOTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE5MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE5MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTkzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTk0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxOTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxOTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE5NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE5NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTk2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTk3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxOTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxOTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE5OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE5OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTk5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgPC94c2Q6c2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMCIgbmFtZT0iSW5wdXQwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTAiIG5hbWU9Ik91dHB1dDAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzAiIHR5cGU9InRuczpQb3J0VHlwZTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24wIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MCIgYmluZGluZz0idG5zOkJpbmRpbmcwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEiIG5hbWU9IklucHV0MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxIiBuYW1lPSJPdXRwdXQxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxIiB0eXBlPSJ0bnM6UG9ydFR5cGUxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEiIGJpbmRpbmc9InRuczpCaW5kaW5nMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyIiBuYW1lPSJJbnB1dDIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMiIgbmFtZT0iT3V0cHV0MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMiIgdHlwZT0idG5zOlBvcnRUeXBlMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMyIgbmFtZT0iSW5wdXQzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMiIG5hbWU9Ik91dHB1dDMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMiIHR5cGU9InRuczpQb3J0VHlwZTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MyIgYmluZGluZz0idG5zOkJpbmRpbmczIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQiIG5hbWU9IklucHV0NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0IiBuYW1lPSJPdXRwdXQ0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0IiB0eXBlPSJ0bnM6UG9ydFR5cGU0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQiIGJpbmRpbmc9InRuczpCaW5kaW5nNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1IiBuYW1lPSJJbnB1dDUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNSIgbmFtZT0iT3V0cHV0NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNSIgdHlwZT0idG5zOlBvcnRUeXBlNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNiIgbmFtZT0iSW5wdXQ2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYiIG5hbWU9Ik91dHB1dDYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYiIHR5cGU9InRuczpQb3J0VHlwZTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NiIgYmluZGluZz0idG5zOkJpbmRpbmc2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTciIG5hbWU9IklucHV0NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3IiBuYW1lPSJPdXRwdXQ3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc3IiB0eXBlPSJ0bnM6UG9ydFR5cGU3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb243Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDciIGJpbmRpbmc9InRuczpCaW5kaW5nNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4IiBuYW1lPSJJbnB1dDgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlOCIgbmFtZT0iT3V0cHV0OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOCIgdHlwZT0idG5zOlBvcnRUeXBlOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOSIgbmFtZT0iSW5wdXQ5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkiIG5hbWU9Ik91dHB1dDkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkiIHR5cGU9InRuczpQb3J0VHlwZTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OSIgYmluZGluZz0idG5zOkJpbmRpbmc5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEwIiBuYW1lPSJJbnB1dDEwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEwIiBuYW1lPSJPdXRwdXQxMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTAiIHR5cGU9InRuczpQb3J0VHlwZTEwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTExIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTExIiBuYW1lPSJJbnB1dDExIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTExIiBuYW1lPSJPdXRwdXQxMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTEiIHR5cGU9InRuczpQb3J0VHlwZTExIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDExIiBiaW5kaW5nPSJ0bnM6QmluZGluZzExIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEyIiBuYW1lPSJJbnB1dDEyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEyIiBuYW1lPSJPdXRwdXQxMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTIiIHR5cGU9InRuczpQb3J0VHlwZTEyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEzIiBuYW1lPSJJbnB1dDEzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEzIiBuYW1lPSJPdXRwdXQxMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTMiIHR5cGU9InRuczpQb3J0VHlwZTEzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE0IiBuYW1lPSJJbnB1dDE0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE0IiBuYW1lPSJPdXRwdXQxNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTQiIHR5cGU9InRuczpQb3J0VHlwZTE0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE1IiBuYW1lPSJJbnB1dDE1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE1IiBuYW1lPSJPdXRwdXQxNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTUiIHR5cGU9InRuczpQb3J0VHlwZTE1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE2IiBuYW1lPSJJbnB1dDE2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE2IiBuYW1lPSJPdXRwdXQxNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTYiIHR5cGU9InRuczpQb3J0VHlwZTE2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE3IiBuYW1lPSJJbnB1dDE3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE3IiBuYW1lPSJPdXRwdXQxNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTciIHR5cGU9InRuczpQb3J0VHlwZTE3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE4IiBuYW1lPSJJbnB1dDE4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE4IiBuYW1lPSJPdXRwdXQxOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTgiIHR5cGU9InRuczpQb3J0VHlwZTE4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE5IiBuYW1lPSJJbnB1dDE5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE5IiBuYW1lPSJPdXRwdXQxOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTkiIHR5cGU9InRuczpQb3J0VHlwZTE5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIwIiBuYW1lPSJJbnB1dDIwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIwIiBuYW1lPSJPdXRwdXQyMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjAiIHR5cGU9InRuczpQb3J0VHlwZTIwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIxIiBuYW1lPSJJbnB1dDIxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIxIiBuYW1lPSJPdXRwdXQyMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjEiIHR5cGU9InRuczpQb3J0VHlwZTIxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIyIiBuYW1lPSJJbnB1dDIyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIyIiBuYW1lPSJPdXRwdXQyMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjIiIHR5cGU9InRuczpQb3J0VHlwZTIyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIzIiBuYW1lPSJJbnB1dDIzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIzIiBuYW1lPSJPdXRwdXQyMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjMiIHR5cGU9InRuczpQb3J0VHlwZTIzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI0IiBuYW1lPSJJbnB1dDI0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI0IiBuYW1lPSJPdXRwdXQyNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjQiIHR5cGU9InRuczpQb3J0VHlwZTI0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI1IiBuYW1lPSJJbnB1dDI1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI1IiBuYW1lPSJPdXRwdXQyNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjUiIHR5cGU9InRuczpQb3J0VHlwZTI1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI2IiBuYW1lPSJJbnB1dDI2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI2IiBuYW1lPSJPdXRwdXQyNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjYiIHR5cGU9InRuczpQb3J0VHlwZTI2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI3IiBuYW1lPSJJbnB1dDI3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI3IiBuYW1lPSJPdXRwdXQyNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjciIHR5cGU9InRuczpQb3J0VHlwZTI3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI4IiBuYW1lPSJJbnB1dDI4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI4IiBuYW1lPSJPdXRwdXQyOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjgiIHR5cGU9InRuczpQb3J0VHlwZTI4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI5IiBuYW1lPSJJbnB1dDI5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI5IiBuYW1lPSJPdXRwdXQyOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjkiIHR5cGU9InRuczpQb3J0VHlwZTI5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMwIiBuYW1lPSJJbnB1dDMwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMwIiBuYW1lPSJPdXRwdXQzMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzAiIHR5cGU9InRuczpQb3J0VHlwZTMwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMxIiBuYW1lPSJJbnB1dDMxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMxIiBuYW1lPSJPdXRwdXQzMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzEiIHR5cGU9InRuczpQb3J0VHlwZTMxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMyIiBuYW1lPSJJbnB1dDMyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMyIiBuYW1lPSJPdXRwdXQzMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzIiIHR5cGU9InRuczpQb3J0VHlwZTMyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMzIiBuYW1lPSJJbnB1dDMzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMzIiBuYW1lPSJPdXRwdXQzMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzMiIHR5cGU9InRuczpQb3J0VHlwZTMzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM0IiBuYW1lPSJJbnB1dDM0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM0IiBuYW1lPSJPdXRwdXQzNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzQiIHR5cGU9InRuczpQb3J0VHlwZTM0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM1IiBuYW1lPSJJbnB1dDM1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM1IiBuYW1lPSJPdXRwdXQzNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzUiIHR5cGU9InRuczpQb3J0VHlwZTM1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM2IiBuYW1lPSJJbnB1dDM2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM2IiBuYW1lPSJPdXRwdXQzNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzYiIHR5cGU9InRuczpQb3J0VHlwZTM2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM3IiBuYW1lPSJJbnB1dDM3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM3IiBuYW1lPSJPdXRwdXQzNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzciIHR5cGU9InRuczpQb3J0VHlwZTM3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM4IiBuYW1lPSJJbnB1dDM4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM4IiBuYW1lPSJPdXRwdXQzOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzgiIHR5cGU9InRuczpQb3J0VHlwZTM4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM5IiBuYW1lPSJJbnB1dDM5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM5IiBuYW1lPSJPdXRwdXQzOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzkiIHR5cGU9InRuczpQb3J0VHlwZTM5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQwIiBuYW1lPSJJbnB1dDQwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQwIiBuYW1lPSJPdXRwdXQ0MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDAiIHR5cGU9InRuczpQb3J0VHlwZTQwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQxIiBuYW1lPSJJbnB1dDQxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQxIiBuYW1lPSJPdXRwdXQ0MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDEiIHR5cGU9InRuczpQb3J0VHlwZTQxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQyIiBuYW1lPSJJbnB1dDQyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQyIiBuYW1lPSJPdXRwdXQ0MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDIiIHR5cGU9InRuczpQb3J0VHlwZTQyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQzIiBuYW1lPSJJbnB1dDQzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQzIiBuYW1lPSJPdXRwdXQ0MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDMiIHR5cGU9InRuczpQb3J0VHlwZTQzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ0IiBuYW1lPSJJbnB1dDQ0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ0IiBuYW1lPSJPdXRwdXQ0NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDQiIHR5cGU9InRuczpQb3J0VHlwZTQ0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ1IiBuYW1lPSJJbnB1dDQ1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ1IiBuYW1lPSJPdXRwdXQ0NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDUiIHR5cGU9InRuczpQb3J0VHlwZTQ1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ2IiBuYW1lPSJJbnB1dDQ2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ2IiBuYW1lPSJPdXRwdXQ0NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDYiIHR5cGU9InRuczpQb3J0VHlwZTQ2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ3IiBuYW1lPSJJbnB1dDQ3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ3IiBuYW1lPSJPdXRwdXQ0NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDciIHR5cGU9InRuczpQb3J0VHlwZTQ3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ4IiBuYW1lPSJJbnB1dDQ4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ4IiBuYW1lPSJPdXRwdXQ0OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDgiIHR5cGU9InRuczpQb3J0VHlwZTQ4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ5IiBuYW1lPSJJbnB1dDQ5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ5IiBuYW1lPSJPdXRwdXQ0OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDkiIHR5cGU9InRuczpQb3J0VHlwZTQ5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUwIiBuYW1lPSJJbnB1dDUwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUwIiBuYW1lPSJPdXRwdXQ1MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTAiIHR5cGU9InRuczpQb3J0VHlwZTUwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzUwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUxIiBuYW1lPSJJbnB1dDUxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUxIiBuYW1lPSJPdXRwdXQ1MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTEiIHR5cGU9InRuczpQb3J0VHlwZTUxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzUxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUyIiBuYW1lPSJJbnB1dDUyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUyIiBuYW1lPSJPdXRwdXQ1MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTIiIHR5cGU9InRuczpQb3J0VHlwZTUyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzUyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTUzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTUzIiBuYW1lPSJJbnB1dDUzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUzIiBuYW1lPSJPdXRwdXQ1MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTMiIHR5cGU9InRuczpQb3J0VHlwZTUzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDUzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzUzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU0IiBuYW1lPSJJbnB1dDU0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU0IiBuYW1lPSJPdXRwdXQ1NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTQiIHR5cGU9InRuczpQb3J0VHlwZTU0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU1IiBuYW1lPSJJbnB1dDU1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU1IiBuYW1lPSJPdXRwdXQ1NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTUiIHR5cGU9InRuczpQb3J0VHlwZTU1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU2IiBuYW1lPSJJbnB1dDU2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU2IiBuYW1lPSJPdXRwdXQ1NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTYiIHR5cGU9InRuczpQb3J0VHlwZTU2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU3IiBuYW1lPSJJbnB1dDU3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU3IiBuYW1lPSJPdXRwdXQ1NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTciIHR5cGU9InRuczpQb3J0VHlwZTU3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU4IiBuYW1lPSJJbnB1dDU4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU4IiBuYW1lPSJPdXRwdXQ1OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTgiIHR5cGU9InRuczpQb3J0VHlwZTU4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTU5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ1OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU1OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTU5IiBuYW1lPSJJbnB1dDU5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTU5IiBuYW1lPSJPdXRwdXQ1OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNTkiIHR5cGU9InRuczpQb3J0VHlwZTU5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDU5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzU5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYwIiBuYW1lPSJJbnB1dDYwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYwIiBuYW1lPSJPdXRwdXQ2MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjAiIHR5cGU9InRuczpQb3J0VHlwZTYwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzYwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYxIiBuYW1lPSJJbnB1dDYxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYxIiBuYW1lPSJPdXRwdXQ2MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjEiIHR5cGU9InRuczpQb3J0VHlwZTYxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzYxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYyIiBuYW1lPSJJbnB1dDYyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYyIiBuYW1lPSJPdXRwdXQ2MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjIiIHR5cGU9InRuczpQb3J0VHlwZTYyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzYyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYzIiBuYW1lPSJJbnB1dDYzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTYzIiBuYW1lPSJPdXRwdXQ2MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjMiIHR5cGU9InRuczpQb3J0VHlwZTYzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzYzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY0IiBuYW1lPSJJbnB1dDY0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY0IiBuYW1lPSJPdXRwdXQ2NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjQiIHR5cGU9InRuczpQb3J0VHlwZTY0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY1IiBuYW1lPSJJbnB1dDY1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY1IiBuYW1lPSJPdXRwdXQ2NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjUiIHR5cGU9InRuczpQb3J0VHlwZTY1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY2IiBuYW1lPSJJbnB1dDY2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY2IiBuYW1lPSJPdXRwdXQ2NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjYiIHR5cGU9InRuczpQb3J0VHlwZTY2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY3IiBuYW1lPSJJbnB1dDY3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY3IiBuYW1lPSJPdXRwdXQ2NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjciIHR5cGU9InRuczpQb3J0VHlwZTY3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY4IiBuYW1lPSJJbnB1dDY4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY4IiBuYW1lPSJPdXRwdXQ2OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjgiIHR5cGU9InRuczpQb3J0VHlwZTY4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTY5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U2OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU2OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTY5IiBuYW1lPSJJbnB1dDY5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTY5IiBuYW1lPSJPdXRwdXQ2OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNjkiIHR5cGU9InRuczpQb3J0VHlwZTY5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNjkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDY5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzY5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcwIiBuYW1lPSJJbnB1dDcwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcwIiBuYW1lPSJPdXRwdXQ3MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzAiIHR5cGU9InRuczpQb3J0VHlwZTcwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzcwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcxIiBuYW1lPSJJbnB1dDcxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcxIiBuYW1lPSJPdXRwdXQ3MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzEiIHR5cGU9InRuczpQb3J0VHlwZTcxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzcxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTcyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTcyIiBuYW1lPSJJbnB1dDcyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTcyIiBuYW1lPSJPdXRwdXQ3MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzIiIHR5cGU9InRuczpQb3J0VHlwZTcyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDcyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzcyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTczIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjczIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTczIiBuYW1lPSJJbnB1dDczIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTczIiBuYW1lPSJPdXRwdXQ3MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzMiIHR5cGU9InRuczpQb3J0VHlwZTczIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDczIiBiaW5kaW5nPSJ0bnM6QmluZGluZzczIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc0IiBuYW1lPSJJbnB1dDc0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc0IiBuYW1lPSJPdXRwdXQ3NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzQiIHR5cGU9InRuczpQb3J0VHlwZTc0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc1IiBuYW1lPSJJbnB1dDc1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc1IiBuYW1lPSJPdXRwdXQ3NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzUiIHR5cGU9InRuczpQb3J0VHlwZTc1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc2IiBuYW1lPSJJbnB1dDc2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc2IiBuYW1lPSJPdXRwdXQ3NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzYiIHR5cGU9InRuczpQb3J0VHlwZTc2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc3IiBuYW1lPSJJbnB1dDc3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc3IiBuYW1lPSJPdXRwdXQ3NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzciIHR5cGU9InRuczpQb3J0VHlwZTc3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc4IiBuYW1lPSJJbnB1dDc4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc4IiBuYW1lPSJPdXRwdXQ3OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzgiIHR5cGU9InRuczpQb3J0VHlwZTc4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTc5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U3OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ3OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTc5IiBuYW1lPSJJbnB1dDc5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTc5IiBuYW1lPSJPdXRwdXQ3OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNzkiIHR5cGU9InRuczpQb3J0VHlwZTc5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNzkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNzkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNzkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDc5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzc5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgwIiBuYW1lPSJJbnB1dDgwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgwIiBuYW1lPSJPdXRwdXQ4MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODAiIHR5cGU9InRuczpQb3J0VHlwZTgwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzgwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgxIiBuYW1lPSJJbnB1dDgxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgxIiBuYW1lPSJPdXRwdXQ4MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODEiIHR5cGU9InRuczpQb3J0VHlwZTgxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzgxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgyIiBuYW1lPSJJbnB1dDgyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgyIiBuYW1lPSJPdXRwdXQ4MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODIiIHR5cGU9InRuczpQb3J0VHlwZTgyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzgyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTgzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTgzIiBuYW1lPSJJbnB1dDgzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgzIiBuYW1lPSJPdXRwdXQ4MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODMiIHR5cGU9InRuczpQb3J0VHlwZTgzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDgzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzgzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg0IiBuYW1lPSJJbnB1dDg0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg0IiBuYW1lPSJPdXRwdXQ4NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODQiIHR5cGU9InRuczpQb3J0VHlwZTg0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg1IiBuYW1lPSJJbnB1dDg1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg1IiBuYW1lPSJPdXRwdXQ4NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODUiIHR5cGU9InRuczpQb3J0VHlwZTg1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg2IiBuYW1lPSJJbnB1dDg2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg2IiBuYW1lPSJPdXRwdXQ4NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODYiIHR5cGU9InRuczpQb3J0VHlwZTg2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg3IiBuYW1lPSJJbnB1dDg3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg3IiBuYW1lPSJPdXRwdXQ4NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODciIHR5cGU9InRuczpQb3J0VHlwZTg3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg4IiBuYW1lPSJJbnB1dDg4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg4IiBuYW1lPSJPdXRwdXQ4OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODgiIHR5cGU9InRuczpQb3J0VHlwZTg4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTg5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50ODkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ4OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU4OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTg5IiBuYW1lPSJJbnB1dDg5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTg5IiBuYW1lPSJPdXRwdXQ4OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nODkiIHR5cGU9InRuczpQb3J0VHlwZTg5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uODkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uODkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlODkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDg5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzg5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkwIiBuYW1lPSJJbnB1dDkwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkwIiBuYW1lPSJPdXRwdXQ5MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTAiIHR5cGU9InRuczpQb3J0VHlwZTkwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzkwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkxIiBuYW1lPSJJbnB1dDkxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkxIiBuYW1lPSJPdXRwdXQ5MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTEiIHR5cGU9InRuczpQb3J0VHlwZTkxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzkxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkyIiBuYW1lPSJJbnB1dDkyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkyIiBuYW1lPSJPdXRwdXQ5MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTIiIHR5cGU9InRuczpQb3J0VHlwZTkyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzkyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkzIiBuYW1lPSJJbnB1dDkzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTkzIiBuYW1lPSJPdXRwdXQ5MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTMiIHR5cGU9InRuczpQb3J0VHlwZTkzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzkzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk0IiBuYW1lPSJJbnB1dDk0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk0IiBuYW1lPSJPdXRwdXQ5NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTQiIHR5cGU9InRuczpQb3J0VHlwZTk0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk1IiBuYW1lPSJJbnB1dDk1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk1IiBuYW1lPSJPdXRwdXQ5NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTUiIHR5cGU9InRuczpQb3J0VHlwZTk1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk2IiBuYW1lPSJJbnB1dDk2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk2IiBuYW1lPSJPdXRwdXQ5NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTYiIHR5cGU9InRuczpQb3J0VHlwZTk2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk3IiBuYW1lPSJJbnB1dDk3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk3IiBuYW1lPSJPdXRwdXQ5NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTciIHR5cGU9InRuczpQb3J0VHlwZTk3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk4IiBuYW1lPSJJbnB1dDk4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk4IiBuYW1lPSJPdXRwdXQ5OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTgiIHR5cGU9InRuczpQb3J0VHlwZTk4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTk5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50OTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U5OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU5OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTk5IiBuYW1lPSJJbnB1dDk5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTk5IiBuYW1lPSJPdXRwdXQ5OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nOTkiIHR5cGU9InRuczpQb3J0VHlwZTk5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uOTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDk5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzk5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEwMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEwMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEwMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTAwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTAwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEwMCIgbmFtZT0iSW5wdXQxMDAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTAwIiBuYW1lPSJPdXRwdXQxMDAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEwMCIgdHlwZT0idG5zOlBvcnRUeXBlMTAwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTAwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEwMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMDAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEwMCIgYmluZGluZz0idG5zOkJpbmRpbmcxMDAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTAxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTAxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTAxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEwMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMDEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTAxIiBuYW1lPSJJbnB1dDEwMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMDEiIG5hbWU9Ik91dHB1dDEwMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTAxIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMDEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTAxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEwMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTAxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEwMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTAyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEwMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMDIiIG5hbWU9IklucHV0MTAyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEwMiIgbmFtZT0iT3V0cHV0MTAyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMDIiIHR5cGU9InRuczpQb3J0VHlwZTEwMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMDIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTAyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMDIiIGJpbmRpbmc9InRuczpCaW5kaW5nMTAyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEwMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEwMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEwMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTAzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTAzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEwMyIgbmFtZT0iSW5wdXQxMDMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTAzIiBuYW1lPSJPdXRwdXQxMDMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEwMyIgdHlwZT0idG5zOlBvcnRUeXBlMTAzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTAzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEwMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMDMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEwMyIgYmluZGluZz0idG5zOkJpbmRpbmcxMDMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTA0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTA0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTA0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEwNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMDQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTA0IiBuYW1lPSJJbnB1dDEwNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMDQiIG5hbWU9Ik91dHB1dDEwNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTA0IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMDQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTA0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEwNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTA0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEwNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTA1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEwNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMDUiIG5hbWU9IklucHV0MTA1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEwNSIgbmFtZT0iT3V0cHV0MTA1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMDUiIHR5cGU9InRuczpQb3J0VHlwZTEwNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMDUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTA1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMDUiIGJpbmRpbmc9InRuczpCaW5kaW5nMTA1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEwNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEwNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEwNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTA2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTA2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEwNiIgbmFtZT0iSW5wdXQxMDYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTA2IiBuYW1lPSJPdXRwdXQxMDYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEwNiIgdHlwZT0idG5zOlBvcnRUeXBlMTA2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTA2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEwNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMDYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEwNiIgYmluZGluZz0idG5zOkJpbmRpbmcxMDYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTA3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTA3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTA3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEwNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMDciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTA3IiBuYW1lPSJJbnB1dDEwNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMDciIG5hbWU9Ik91dHB1dDEwNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTA3IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMDciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTA3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEwNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTA3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEwNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTA4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEwOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMDgiIG5hbWU9IklucHV0MTA4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEwOCIgbmFtZT0iT3V0cHV0MTA4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMDgiIHR5cGU9InRuczpQb3J0VHlwZTEwOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMDgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTA4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMDgiIGJpbmRpbmc9InRuczpCaW5kaW5nMTA4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEwOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEwOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEwOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTA5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTA5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEwOSIgbmFtZT0iSW5wdXQxMDkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTA5IiBuYW1lPSJPdXRwdXQxMDkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEwOSIgdHlwZT0idG5zOlBvcnRUeXBlMTA5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTA5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEwOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMDkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEwOSIgYmluZGluZz0idG5zOkJpbmRpbmcxMDkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTEwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTEwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTEwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDExMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTEwIiBuYW1lPSJJbnB1dDExMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMTAiIG5hbWU9Ik91dHB1dDExMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTEwIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTEwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTExMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTEwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzExMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTExIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTExMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMTEiIG5hbWU9IklucHV0MTExIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTExMSIgbmFtZT0iT3V0cHV0MTExIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMTEiIHR5cGU9InRuczpQb3J0VHlwZTExMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTExIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMTEiIGJpbmRpbmc9InRuczpCaW5kaW5nMTExIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTExMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDExMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTExMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTEyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTEyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTExMiIgbmFtZT0iSW5wdXQxMTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTEyIiBuYW1lPSJPdXRwdXQxMTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzExMiIgdHlwZT0idG5zOlBvcnRUeXBlMTEyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTEyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjExMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDExMiIgYmluZGluZz0idG5zOkJpbmRpbmcxMTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTEzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTEzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTEzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDExMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTEzIiBuYW1lPSJJbnB1dDExMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMTMiIG5hbWU9Ik91dHB1dDExMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTEzIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTEzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTExMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTEzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzExMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTE0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTExNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMTQiIG5hbWU9IklucHV0MTE0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTExNCIgbmFtZT0iT3V0cHV0MTE0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMTQiIHR5cGU9InRuczpQb3J0VHlwZTExNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTE0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMTQiIGJpbmRpbmc9InRuczpCaW5kaW5nMTE0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTExNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDExNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTExNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTE1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTE1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTExNSIgbmFtZT0iSW5wdXQxMTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTE1IiBuYW1lPSJPdXRwdXQxMTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzExNSIgdHlwZT0idG5zOlBvcnRUeXBlMTE1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTE1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjExNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDExNSIgYmluZGluZz0idG5zOkJpbmRpbmcxMTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTE2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTE2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTE2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDExNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTE2IiBuYW1lPSJJbnB1dDExNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMTYiIG5hbWU9Ik91dHB1dDExNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTE2IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTE2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTExNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTE2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzExNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTE3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTExNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMTciIG5hbWU9IklucHV0MTE3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTExNyIgbmFtZT0iT3V0cHV0MTE3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMTciIHR5cGU9InRuczpQb3J0VHlwZTExNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTE3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMTciIGJpbmRpbmc9InRuczpCaW5kaW5nMTE3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTExOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDExOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTExOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTE4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTE4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTExOCIgbmFtZT0iSW5wdXQxMTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTE4IiBuYW1lPSJPdXRwdXQxMTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzExOCIgdHlwZT0idG5zOlBvcnRUeXBlMTE4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTE4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjExOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDExOCIgYmluZGluZz0idG5zOkJpbmRpbmcxMTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTE5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTE5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTE5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDExOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTE5IiBuYW1lPSJJbnB1dDExOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMTkiIG5hbWU9Ik91dHB1dDExOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTE5IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTE5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTExOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTE5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzExOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTIwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEyMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMjAiIG5hbWU9IklucHV0MTIwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEyMCIgbmFtZT0iT3V0cHV0MTIwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMjAiIHR5cGU9InRuczpQb3J0VHlwZTEyMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTIwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMjAiIGJpbmRpbmc9InRuczpCaW5kaW5nMTIwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEyMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEyMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEyMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTIxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTIxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEyMSIgbmFtZT0iSW5wdXQxMjEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTIxIiBuYW1lPSJPdXRwdXQxMjEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEyMSIgdHlwZT0idG5zOlBvcnRUeXBlMTIxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTIxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEyMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMjEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEyMSIgYmluZGluZz0idG5zOkJpbmRpbmcxMjEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTIyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTIyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTIyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEyMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMjIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTIyIiBuYW1lPSJJbnB1dDEyMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMjIiIG5hbWU9Ik91dHB1dDEyMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTIyIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMjIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTIyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEyMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTIyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEyMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTIzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEyMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMjMiIG5hbWU9IklucHV0MTIzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEyMyIgbmFtZT0iT3V0cHV0MTIzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMjMiIHR5cGU9InRuczpQb3J0VHlwZTEyMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTIzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMjMiIGJpbmRpbmc9InRuczpCaW5kaW5nMTIzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEyNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEyNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEyNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTI0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTI0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEyNCIgbmFtZT0iSW5wdXQxMjQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTI0IiBuYW1lPSJPdXRwdXQxMjQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEyNCIgdHlwZT0idG5zOlBvcnRUeXBlMTI0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTI0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEyNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMjQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEyNCIgYmluZGluZz0idG5zOkJpbmRpbmcxMjQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTI1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTI1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTI1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEyNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMjUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTI1IiBuYW1lPSJJbnB1dDEyNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMjUiIG5hbWU9Ik91dHB1dDEyNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTI1IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMjUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTI1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEyNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTI1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEyNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTI2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEyNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMjYiIG5hbWU9IklucHV0MTI2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEyNiIgbmFtZT0iT3V0cHV0MTI2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMjYiIHR5cGU9InRuczpQb3J0VHlwZTEyNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTI2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMjYiIGJpbmRpbmc9InRuczpCaW5kaW5nMTI2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEyNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEyNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEyNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTI3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTI3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEyNyIgbmFtZT0iSW5wdXQxMjciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTI3IiBuYW1lPSJPdXRwdXQxMjciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEyNyIgdHlwZT0idG5zOlBvcnRUeXBlMTI3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTI3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEyNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMjciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEyNyIgYmluZGluZz0idG5zOkJpbmRpbmcxMjciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTI4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTI4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTI4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEyOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMjgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTI4IiBuYW1lPSJJbnB1dDEyOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMjgiIG5hbWU9Ik91dHB1dDEyOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTI4IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMjgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTI4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEyOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTI4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEyOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTI5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEyOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMjkiIG5hbWU9IklucHV0MTI5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEyOSIgbmFtZT0iT3V0cHV0MTI5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMjkiIHR5cGU9InRuczpQb3J0VHlwZTEyOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTI5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMjkiIGJpbmRpbmc9InRuczpCaW5kaW5nMTI5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEzMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEzMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEzMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTMwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTMwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEzMCIgbmFtZT0iSW5wdXQxMzAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTMwIiBuYW1lPSJPdXRwdXQxMzAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEzMCIgdHlwZT0idG5zOlBvcnRUeXBlMTMwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTMwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEzMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMzAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEzMCIgYmluZGluZz0idG5zOkJpbmRpbmcxMzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTMxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTMxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTMxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEzMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMzEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTMxIiBuYW1lPSJJbnB1dDEzMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMzEiIG5hbWU9Ik91dHB1dDEzMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTMxIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMzEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTMxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEzMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTMxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEzMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTMyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEzMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMzIiIG5hbWU9IklucHV0MTMyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEzMiIgbmFtZT0iT3V0cHV0MTMyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMzIiIHR5cGU9InRuczpQb3J0VHlwZTEzMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMzIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTMyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMzIiIGJpbmRpbmc9InRuczpCaW5kaW5nMTMyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEzMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEzMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEzMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTMzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTMzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEzMyIgbmFtZT0iSW5wdXQxMzMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTMzIiBuYW1lPSJPdXRwdXQxMzMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEzMyIgdHlwZT0idG5zOlBvcnRUeXBlMTMzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTMzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEzMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMzMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEzMyIgYmluZGluZz0idG5zOkJpbmRpbmcxMzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTM0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTM0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTM0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEzNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMzQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTM0IiBuYW1lPSJJbnB1dDEzNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMzQiIG5hbWU9Ik91dHB1dDEzNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTM0IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMzQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTM0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEzNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTM0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEzNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTM1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEzNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMzUiIG5hbWU9IklucHV0MTM1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEzNSIgbmFtZT0iT3V0cHV0MTM1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMzUiIHR5cGU9InRuczpQb3J0VHlwZTEzNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMzUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTM1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMzUiIGJpbmRpbmc9InRuczpCaW5kaW5nMTM1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEzNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEzNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEzNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTM2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTM2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEzNiIgbmFtZT0iSW5wdXQxMzYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTM2IiBuYW1lPSJPdXRwdXQxMzYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEzNiIgdHlwZT0idG5zOlBvcnRUeXBlMTM2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTM2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEzNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMzYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEzNiIgYmluZGluZz0idG5zOkJpbmRpbmcxMzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTM3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTM3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTM3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEzNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMzciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTM3IiBuYW1lPSJJbnB1dDEzNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMzciIG5hbWU9Ik91dHB1dDEzNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTM3IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMzciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTM3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEzNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTM3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEzNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTM4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEzOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMzgiIG5hbWU9IklucHV0MTM4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEzOCIgbmFtZT0iT3V0cHV0MTM4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMzgiIHR5cGU9InRuczpQb3J0VHlwZTEzOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMzgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTM4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMzgiIGJpbmRpbmc9InRuczpCaW5kaW5nMTM4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEzOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEzOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEzOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTM5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTM5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEzOSIgbmFtZT0iSW5wdXQxMzkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTM5IiBuYW1lPSJPdXRwdXQxMzkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEzOSIgdHlwZT0idG5zOlBvcnRUeXBlMTM5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTM5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEzOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMzkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEzOSIgYmluZGluZz0idG5zOkJpbmRpbmcxMzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTQwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTQwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE0MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNDAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTQwIiBuYW1lPSJJbnB1dDE0MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNDAiIG5hbWU9Ik91dHB1dDE0MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTQwIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNDAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTQwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE0MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTQwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE0MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE0MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNDEiIG5hbWU9IklucHV0MTQxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE0MSIgbmFtZT0iT3V0cHV0MTQxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNDEiIHR5cGU9InRuczpQb3J0VHlwZTE0MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNDEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTQxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNDEiIGJpbmRpbmc9InRuczpCaW5kaW5nMTQxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE0MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE0MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE0MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTQyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE0MiIgbmFtZT0iSW5wdXQxNDIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTQyIiBuYW1lPSJPdXRwdXQxNDIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE0MiIgdHlwZT0idG5zOlBvcnRUeXBlMTQyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE0MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNDIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE0MiIgYmluZGluZz0idG5zOkJpbmRpbmcxNDIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTQzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTQzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE0MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNDMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTQzIiBuYW1lPSJJbnB1dDE0MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNDMiIG5hbWU9Ik91dHB1dDE0MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTQzIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNDMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTQzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE0MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTQzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE0MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE0NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNDQiIG5hbWU9IklucHV0MTQ0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE0NCIgbmFtZT0iT3V0cHV0MTQ0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNDQiIHR5cGU9InRuczpQb3J0VHlwZTE0NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNDQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTQ0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNDQiIGJpbmRpbmc9InRuczpCaW5kaW5nMTQ0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE0NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE0NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE0NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTQ1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQ1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE0NSIgbmFtZT0iSW5wdXQxNDUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTQ1IiBuYW1lPSJPdXRwdXQxNDUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE0NSIgdHlwZT0idG5zOlBvcnRUeXBlMTQ1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQ1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE0NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNDUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE0NSIgYmluZGluZz0idG5zOkJpbmRpbmcxNDUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTQ2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTQ2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE0NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNDYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTQ2IiBuYW1lPSJJbnB1dDE0NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNDYiIG5hbWU9Ik91dHB1dDE0NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTQ2IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNDYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTQ2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE0NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTQ2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE0NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE0NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNDciIG5hbWU9IklucHV0MTQ3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE0NyIgbmFtZT0iT3V0cHV0MTQ3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNDciIHR5cGU9InRuczpQb3J0VHlwZTE0NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNDciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTQ3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNDciIGJpbmRpbmc9InRuczpCaW5kaW5nMTQ3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE0OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE0OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE0OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTQ4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQ4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE0OCIgbmFtZT0iSW5wdXQxNDgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTQ4IiBuYW1lPSJPdXRwdXQxNDgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE0OCIgdHlwZT0idG5zOlBvcnRUeXBlMTQ4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQ4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE0OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNDgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE0OCIgYmluZGluZz0idG5zOkJpbmRpbmcxNDgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTQ5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTQ5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE0OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNDkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTQ5IiBuYW1lPSJJbnB1dDE0OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNDkiIG5hbWU9Ik91dHB1dDE0OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTQ5IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNDkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTQ5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE0OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTQ5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE0OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTUwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE1MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNTAiIG5hbWU9IklucHV0MTUwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE1MCIgbmFtZT0iT3V0cHV0MTUwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNTAiIHR5cGU9InRuczpQb3J0VHlwZTE1MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTUwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNTAiIGJpbmRpbmc9InRuczpCaW5kaW5nMTUwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE1MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE1MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE1MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTUxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTUxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE1MSIgbmFtZT0iSW5wdXQxNTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTUxIiBuYW1lPSJPdXRwdXQxNTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE1MSIgdHlwZT0idG5zOlBvcnRUeXBlMTUxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTUxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE1MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE1MSIgYmluZGluZz0idG5zOkJpbmRpbmcxNTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTUyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTUyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTUyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE1MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTUyIiBuYW1lPSJJbnB1dDE1MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNTIiIG5hbWU9Ik91dHB1dDE1MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTUyIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTUyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE1MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTUyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE1MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTUzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE1MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNTMiIG5hbWU9IklucHV0MTUzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE1MyIgbmFtZT0iT3V0cHV0MTUzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNTMiIHR5cGU9InRuczpQb3J0VHlwZTE1MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTUzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNTMiIGJpbmRpbmc9InRuczpCaW5kaW5nMTUzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE1NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE1NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE1NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTU0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTU0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE1NCIgbmFtZT0iSW5wdXQxNTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTU0IiBuYW1lPSJPdXRwdXQxNTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE1NCIgdHlwZT0idG5zOlBvcnRUeXBlMTU0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTU0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE1NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE1NCIgYmluZGluZz0idG5zOkJpbmRpbmcxNTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTU1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTU1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTU1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE1NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTU1IiBuYW1lPSJJbnB1dDE1NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNTUiIG5hbWU9Ik91dHB1dDE1NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTU1IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTU1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE1NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTU1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE1NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTU2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE1NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNTYiIG5hbWU9IklucHV0MTU2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE1NiIgbmFtZT0iT3V0cHV0MTU2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNTYiIHR5cGU9InRuczpQb3J0VHlwZTE1NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTU2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNTYiIGJpbmRpbmc9InRuczpCaW5kaW5nMTU2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE1NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE1NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE1NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTU3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTU3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE1NyIgbmFtZT0iSW5wdXQxNTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTU3IiBuYW1lPSJPdXRwdXQxNTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE1NyIgdHlwZT0idG5zOlBvcnRUeXBlMTU3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTU3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE1NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE1NyIgYmluZGluZz0idG5zOkJpbmRpbmcxNTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTU4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTU4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTU4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE1OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTU4IiBuYW1lPSJJbnB1dDE1OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNTgiIG5hbWU9Ik91dHB1dDE1OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTU4IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTU4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE1OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTU4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE1OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTU5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE1OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNTkiIG5hbWU9IklucHV0MTU5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE1OSIgbmFtZT0iT3V0cHV0MTU5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNTkiIHR5cGU9InRuczpQb3J0VHlwZTE1OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTU5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNTkiIGJpbmRpbmc9InRuczpCaW5kaW5nMTU5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE2MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE2MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE2MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTYwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTYwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE2MCIgbmFtZT0iSW5wdXQxNjAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTYwIiBuYW1lPSJPdXRwdXQxNjAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE2MCIgdHlwZT0idG5zOlBvcnRUeXBlMTYwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTYwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE2MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNjAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE2MCIgYmluZGluZz0idG5zOkJpbmRpbmcxNjAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTYxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTYxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTYxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE2MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNjEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTYxIiBuYW1lPSJJbnB1dDE2MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNjEiIG5hbWU9Ik91dHB1dDE2MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTYxIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNjEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTYxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE2MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTYxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE2MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTYyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE2MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNjIiIG5hbWU9IklucHV0MTYyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE2MiIgbmFtZT0iT3V0cHV0MTYyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNjIiIHR5cGU9InRuczpQb3J0VHlwZTE2MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTYyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNjIiIGJpbmRpbmc9InRuczpCaW5kaW5nMTYyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE2MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE2MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE2MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTYzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTYzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE2MyIgbmFtZT0iSW5wdXQxNjMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTYzIiBuYW1lPSJPdXRwdXQxNjMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE2MyIgdHlwZT0idG5zOlBvcnRUeXBlMTYzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTYzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE2MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNjMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE2MyIgYmluZGluZz0idG5zOkJpbmRpbmcxNjMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTY0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTY0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTY0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE2NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNjQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTY0IiBuYW1lPSJJbnB1dDE2NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNjQiIG5hbWU9Ik91dHB1dDE2NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTY0IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNjQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTY0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE2NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTY0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE2NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTY1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE2NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNjUiIG5hbWU9IklucHV0MTY1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE2NSIgbmFtZT0iT3V0cHV0MTY1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNjUiIHR5cGU9InRuczpQb3J0VHlwZTE2NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTY1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNjUiIGJpbmRpbmc9InRuczpCaW5kaW5nMTY1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE2NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE2NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE2NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTY2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTY2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE2NiIgbmFtZT0iSW5wdXQxNjYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTY2IiBuYW1lPSJPdXRwdXQxNjYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE2NiIgdHlwZT0idG5zOlBvcnRUeXBlMTY2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTY2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE2NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNjYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE2NiIgYmluZGluZz0idG5zOkJpbmRpbmcxNjYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTY3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTY3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTY3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE2NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNjciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTY3IiBuYW1lPSJJbnB1dDE2NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNjciIG5hbWU9Ik91dHB1dDE2NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTY3IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNjciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTY3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE2NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTY3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE2NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTY4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE2OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNjgiIG5hbWU9IklucHV0MTY4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE2OCIgbmFtZT0iT3V0cHV0MTY4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNjgiIHR5cGU9InRuczpQb3J0VHlwZTE2OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTY4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNjgiIGJpbmRpbmc9InRuczpCaW5kaW5nMTY4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE2OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE2OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE2OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTY5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTY5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE2OSIgbmFtZT0iSW5wdXQxNjkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTY5IiBuYW1lPSJPdXRwdXQxNjkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE2OSIgdHlwZT0idG5zOlBvcnRUeXBlMTY5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTY5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE2OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNjkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE2OSIgYmluZGluZz0idG5zOkJpbmRpbmcxNjkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTcwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTcwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTcwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE3MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNzAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTcwIiBuYW1lPSJJbnB1dDE3MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNzAiIG5hbWU9Ik91dHB1dDE3MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTcwIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNzAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTcwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE3MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTcwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE3MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTcxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE3MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNzEiIG5hbWU9IklucHV0MTcxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE3MSIgbmFtZT0iT3V0cHV0MTcxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNzEiIHR5cGU9InRuczpQb3J0VHlwZTE3MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNzEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTcxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNzEiIGJpbmRpbmc9InRuczpCaW5kaW5nMTcxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE3MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE3MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE3MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTcyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTcyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE3MiIgbmFtZT0iSW5wdXQxNzIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTcyIiBuYW1lPSJPdXRwdXQxNzIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE3MiIgdHlwZT0idG5zOlBvcnRUeXBlMTcyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTcyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE3MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNzIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE3MiIgYmluZGluZz0idG5zOkJpbmRpbmcxNzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTczIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTczIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTczIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE3MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNzMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTczIiBuYW1lPSJJbnB1dDE3MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNzMiIG5hbWU9Ik91dHB1dDE3MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTczIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNzMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTczIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE3MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTczIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE3MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTc0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE3NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNzQiIG5hbWU9IklucHV0MTc0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE3NCIgbmFtZT0iT3V0cHV0MTc0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNzQiIHR5cGU9InRuczpQb3J0VHlwZTE3NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNzQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTc0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNzQiIGJpbmRpbmc9InRuczpCaW5kaW5nMTc0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE3NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE3NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE3NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTc1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTc1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE3NSIgbmFtZT0iSW5wdXQxNzUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTc1IiBuYW1lPSJPdXRwdXQxNzUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE3NSIgdHlwZT0idG5zOlBvcnRUeXBlMTc1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTc1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE3NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNzUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE3NSIgYmluZGluZz0idG5zOkJpbmRpbmcxNzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTc2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTc2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTc2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE3NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNzYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTc2IiBuYW1lPSJJbnB1dDE3NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNzYiIG5hbWU9Ik91dHB1dDE3NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTc2IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNzYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTc2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE3NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTc2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE3NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTc3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE3NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNzciIG5hbWU9IklucHV0MTc3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE3NyIgbmFtZT0iT3V0cHV0MTc3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNzciIHR5cGU9InRuczpQb3J0VHlwZTE3NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNzciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTc3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNzciIGJpbmRpbmc9InRuczpCaW5kaW5nMTc3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE3OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE3OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE3OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTc4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTc4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE3OCIgbmFtZT0iSW5wdXQxNzgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTc4IiBuYW1lPSJPdXRwdXQxNzgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE3OCIgdHlwZT0idG5zOlBvcnRUeXBlMTc4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTc4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE3OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNzgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE3OCIgYmluZGluZz0idG5zOkJpbmRpbmcxNzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTc5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTc5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTc5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE3OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNzkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTc5IiBuYW1lPSJJbnB1dDE3OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNzkiIG5hbWU9Ik91dHB1dDE3OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTc5IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNzkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTc5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE3OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTc5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE3OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxODAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxODAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxODAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTgwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE4MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxODAiIG5hbWU9IklucHV0MTgwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE4MCIgbmFtZT0iT3V0cHV0MTgwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxODAiIHR5cGU9InRuczpQb3J0VHlwZTE4MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xODAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTgwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxODAiIGJpbmRpbmc9InRuczpCaW5kaW5nMTgwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE4MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE4MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE4MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxODEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTgxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTgxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE4MSIgbmFtZT0iSW5wdXQxODEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTgxIiBuYW1lPSJPdXRwdXQxODEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE4MSIgdHlwZT0idG5zOlBvcnRUeXBlMTgxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTgxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE4MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxODEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE4MSIgYmluZGluZz0idG5zOkJpbmRpbmcxODEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTgyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTgyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTgyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE4MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxODIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTgyIiBuYW1lPSJJbnB1dDE4MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxODIiIG5hbWU9Ik91dHB1dDE4MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTgyIiB0eXBlPSJ0bnM6UG9ydFR5cGUxODIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTgyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE4MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTgyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE4MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxODMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxODMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxODMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTgzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE4MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxODMiIG5hbWU9IklucHV0MTgzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE4MyIgbmFtZT0iT3V0cHV0MTgzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxODMiIHR5cGU9InRuczpQb3J0VHlwZTE4MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xODMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTgzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxODMiIGJpbmRpbmc9InRuczpCaW5kaW5nMTgzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE4NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE4NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE4NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxODQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTg0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTg0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE4NCIgbmFtZT0iSW5wdXQxODQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTg0IiBuYW1lPSJPdXRwdXQxODQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE4NCIgdHlwZT0idG5zOlBvcnRUeXBlMTg0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTg0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE4NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxODQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE4NCIgYmluZGluZz0idG5zOkJpbmRpbmcxODQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTg1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTg1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTg1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE4NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxODUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTg1IiBuYW1lPSJJbnB1dDE4NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxODUiIG5hbWU9Ik91dHB1dDE4NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTg1IiB0eXBlPSJ0bnM6UG9ydFR5cGUxODUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTg1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE4NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTg1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE4NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxODYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxODYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxODYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTg2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE4NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxODYiIG5hbWU9IklucHV0MTg2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE4NiIgbmFtZT0iT3V0cHV0MTg2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxODYiIHR5cGU9InRuczpQb3J0VHlwZTE4NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xODYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTg2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxODYiIGJpbmRpbmc9InRuczpCaW5kaW5nMTg2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE4NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE4NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE4NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxODciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTg3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTg3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE4NyIgbmFtZT0iSW5wdXQxODciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTg3IiBuYW1lPSJPdXRwdXQxODciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE4NyIgdHlwZT0idG5zOlBvcnRUeXBlMTg3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTg3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE4NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxODciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE4NyIgYmluZGluZz0idG5zOkJpbmRpbmcxODciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTg4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTg4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTg4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE4OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxODgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTg4IiBuYW1lPSJJbnB1dDE4OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxODgiIG5hbWU9Ik91dHB1dDE4OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTg4IiB0eXBlPSJ0bnM6UG9ydFR5cGUxODgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTg4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE4OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTg4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE4OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxODkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxODkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxODkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTg5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE4OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxODkiIG5hbWU9IklucHV0MTg5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE4OSIgbmFtZT0iT3V0cHV0MTg5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxODkiIHR5cGU9InRuczpQb3J0VHlwZTE4OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xODkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTg5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxODkiIGJpbmRpbmc9InRuczpCaW5kaW5nMTg5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE5MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE5MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE5MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxOTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTkwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTkwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE5MCIgbmFtZT0iSW5wdXQxOTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTkwIiBuYW1lPSJPdXRwdXQxOTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE5MCIgdHlwZT0idG5zOlBvcnRUeXBlMTkwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTkwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE5MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxOTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE5MCIgYmluZGluZz0idG5zOkJpbmRpbmcxOTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTkxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTkxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTkxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE5MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxOTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTkxIiBuYW1lPSJJbnB1dDE5MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxOTEiIG5hbWU9Ik91dHB1dDE5MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTkxIiB0eXBlPSJ0bnM6UG9ydFR5cGUxOTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTkxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE5MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTkxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE5MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxOTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxOTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxOTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTkyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE5MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxOTIiIG5hbWU9IklucHV0MTkyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE5MiIgbmFtZT0iT3V0cHV0MTkyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxOTIiIHR5cGU9InRuczpQb3J0VHlwZTE5MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xOTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTkyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxOTIiIGJpbmRpbmc9InRuczpCaW5kaW5nMTkyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE5MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE5MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE5MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxOTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTkzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTkzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE5MyIgbmFtZT0iSW5wdXQxOTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTkzIiBuYW1lPSJPdXRwdXQxOTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE5MyIgdHlwZT0idG5zOlBvcnRUeXBlMTkzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTkzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE5MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxOTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE5MyIgYmluZGluZz0idG5zOkJpbmRpbmcxOTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTk0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTk0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTk0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE5NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxOTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTk0IiBuYW1lPSJJbnB1dDE5NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxOTQiIG5hbWU9Ik91dHB1dDE5NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTk0IiB0eXBlPSJ0bnM6UG9ydFR5cGUxOTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTk0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE5NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTk0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE5NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxOTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxOTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxOTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTk1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE5NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxOTUiIG5hbWU9IklucHV0MTk1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE5NSIgbmFtZT0iT3V0cHV0MTk1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxOTUiIHR5cGU9InRuczpQb3J0VHlwZTE5NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xOTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTk1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxOTUiIGJpbmRpbmc9InRuczpCaW5kaW5nMTk1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE5NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE5NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE5NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxOTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTk2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTk2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE5NiIgbmFtZT0iSW5wdXQxOTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTk2IiBuYW1lPSJPdXRwdXQxOTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE5NiIgdHlwZT0idG5zOlBvcnRUeXBlMTk2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTk2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE5NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxOTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE5NiIgYmluZGluZz0idG5zOkJpbmRpbmcxOTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTk3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTk3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTk3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE5NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxOTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTk3IiBuYW1lPSJJbnB1dDE5NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxOTciIG5hbWU9Ik91dHB1dDE5NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTk3IiB0eXBlPSJ0bnM6UG9ydFR5cGUxOTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTk3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE5NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTk3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE5NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxOTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxOTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxOTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTk4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE5OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxOTgiIG5hbWU9IklucHV0MTk4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE5OCIgbmFtZT0iT3V0cHV0MTk4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxOTgiIHR5cGU9InRuczpQb3J0VHlwZTE5OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xOTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTk4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxOTgiIGJpbmRpbmc9InRuczpCaW5kaW5nMTk4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE5OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE5OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE5OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxOTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTk5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTk5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE5OSIgbmFtZT0iSW5wdXQxOTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTk5IiBuYW1lPSJPdXRwdXQxOTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE5OSIgdHlwZT0idG5zOlBvcnRUeXBlMTk5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTk5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE5OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxOTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE5OSIgYmluZGluZz0idG5zOkJpbmRpbmcxOTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS81MDBLQi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvZGF0YS81MDBLQi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZWFiODM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvNTAwS0Iud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDE1NTA3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJEZWZpbml0aW9uIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotICA8d3NkbDp0eXBlcz4KLSAgICA8eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMiPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ1OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ2OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ3OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ4OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50ODkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ5OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50OTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEwMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEwMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTAxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTAyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEwMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEwNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTA0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTA1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEwNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEwNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTA3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTA4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEwOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDExMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTEwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTExIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDExMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDExMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTEzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTE0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDExNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDExNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTE2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTE3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDExOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDExOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTE5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEyMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEyMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTIyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTIzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEyNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEyNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTI1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTI2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEyNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEyOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTI4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTI5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEzMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEzMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTMxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTMyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEzMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEzNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTM0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTM1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEzNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDEzNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTM3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTM4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxMzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxMzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDEzOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE0MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE0MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE0MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE0NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE0NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE0OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE0OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTUwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE1MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE1MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTUyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTUzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE1NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE1NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTU1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTU2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE1NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE1OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTU4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTU5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE2MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE2MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTYxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTYyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE2MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE2NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTY0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTY1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE2NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE2NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTY3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTY4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE2OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE3MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTcwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTcxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE3MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE3MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTczIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTc0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE3NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE3NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTc2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTc3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxNzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxNzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE3OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE3OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTc5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTgwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxODAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxODEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE4MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE4MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTgyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTgzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxODMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxODQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE4NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE4NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTg1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTg2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxODYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxODciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE4NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE4OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTg4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTg5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxODkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxOTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE5MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE5MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTkxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTkyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxOTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxOTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE5MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE5NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTk0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTk1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxOTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxOTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE5NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDE5NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MTk3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MTk4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQxOTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQxOTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDE5OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIwMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjAwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjAxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIwMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIwMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjAzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjA0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIwNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIwNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjA2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjA3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIwOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIwOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjA5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjEwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIxMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIxMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjEyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjEzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIxNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIxNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjE1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjE2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIxNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIxOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjE4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjE5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIyMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIyMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjIxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjIyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIyMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIyNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjI0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjI1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIyNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIyNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjI3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjI4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIyOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIzMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjMwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjMxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIzMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIzMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjMzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjM0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIzNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIzNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjM2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjM3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyMzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyMzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDIzOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDIzOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjM5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI0MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI0MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI0NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI0NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI0NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI0OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI1MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI1MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjUxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjUyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI1MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI1NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjU0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjU1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI1NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI1NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjU3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjU4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI1OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI2MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjYwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjYxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI2MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI2MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjYzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjY0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI2NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI2NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjY2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjY3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI2OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI2OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjY5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjcwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI3MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI3MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjcyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjczIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI3NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI3NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mjc1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mjc2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyNzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI3NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI3OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mjc4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mjc5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyNzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyODAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI4MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI4MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjgxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjgyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyODIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyODMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI4MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI4NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mjg0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mjg1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyODUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyODYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI4NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI4NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mjg3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mjg4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyODgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyODkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI4OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI5MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjkwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MjkxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyOTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyOTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI5MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI5MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MjkzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mjk0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyOTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyOTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI5NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI5NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mjk2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mjk3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQyOTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQyOTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDI5OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDI5OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mjk5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzAwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMwMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMwMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzAyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzAzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMwNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMwNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzA1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzA2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMwNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMwOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzA4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzA5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMxMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMxMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzExIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzEyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMxMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMxNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzE0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzE1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMxNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMxNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzE3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzE4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMxOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMyMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzIxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMyMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMyMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzIzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzI0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMyNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMyNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzI2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzI3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMyOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMyOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzI5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzMwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMzMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMzMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzMyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzMzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMzNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMzNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzM1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzM2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzMzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDMzNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDMzOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzM4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzM5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzMzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM0MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM0MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM0MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM0NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzQ1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM0NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM0NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzQ4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM0OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM1MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzUwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzUxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM1MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM1MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzUzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzU0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM1NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM1NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzU2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzU3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM1OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM1OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzU5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzYwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM2MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM2MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzYyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzYzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM2NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM2NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzY1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzY2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM2NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM2OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzY4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzY5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM3MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM3MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzcxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzcyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM3MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM3NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mzc0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mzc1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM3NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM3NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mzc3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mzc4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzNzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzNzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM3OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM4MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzgwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzgxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzODEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzODIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM4MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM4MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzgzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mzg0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzODQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzODUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM4NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM4NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mzg2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mzg3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzODciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzODgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM4OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM4OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mzg5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzkwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzOTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzOTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM5MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM5MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50MzkyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50MzkzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzOTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzOTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM5NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM5NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mzk1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mzk2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzOTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQzOTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDM5NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDM5OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50Mzk4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50Mzk5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQzOTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MDAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQwMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQwMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDAxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDAyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MDMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQwMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQwNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDA0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDA1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MDYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQwNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQwNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDA3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDA4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MDkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQwOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQxMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDEwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDExIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQxMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQxMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDEzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDE0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQxNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQxNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDE2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDE3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQxOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQxOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDE5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MjEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQyMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQyMiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDIyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDIzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MjQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQyNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQyNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDI1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDI2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MjciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQyNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQyOCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDI4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDI5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MzAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQzMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQzMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDMxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDMyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MzMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQzMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQzNCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDM0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDM1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MzYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQzNiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQzNyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDM3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDM4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0MzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0MzkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQzOSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ0MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDQwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NDEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ0MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ0MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDQzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDQ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NDUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ0NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ0NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDQ2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDQ3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NDciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NDgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ0OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ0OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDQ5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDUwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ1MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ1MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDUyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDUzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NTQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ1NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ1NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDU1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDU2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NTciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ1NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ1OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDU4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDU5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ2MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ2MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDYxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDYyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NjIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NjMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ2MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ2NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDY0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDY1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NjUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NjYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ2NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ2NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDY3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDY4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NjgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NjkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ2OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ3MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDcwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDcxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NzIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ3MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ3MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDczIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDc0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NzQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NzUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ3NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ3NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDc2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDc3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0NzciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0NzgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ3OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ3OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDc5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDgwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0ODAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0ODEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ4MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ4MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDgyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDgzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0ODMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0ODQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ4NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ4NSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDg1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDg2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0ODYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0ODciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ4NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ4OCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDg4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDg5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0ODkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0OTAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ5MCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ5MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDkxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDkyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0OTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0OTMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ5MyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ5NCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDk0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDk1IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0OTUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0OTYiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ5NiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlRWxlbWVudDQ5NyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RFbGVtZW50NDk3IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VFbGVtZW50NDk4IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEVsZW1lbnQ0OTgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUVsZW1lbnQ0OTkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0RWxlbWVudDQ5OSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDwveHNkOnNjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24wIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTAiIG5hbWU9IklucHV0MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UwIiBuYW1lPSJPdXRwdXQwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcwIiB0eXBlPSJ0bnM6UG9ydFR5cGUwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24wIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDAiIGJpbmRpbmc9InRuczpCaW5kaW5nMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxIiBuYW1lPSJJbnB1dDEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMSIgbmFtZT0iT3V0cHV0MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMSIgdHlwZT0idG5zOlBvcnRUeXBlMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMiIgbmFtZT0iSW5wdXQyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIiIG5hbWU9Ik91dHB1dDIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIiIHR5cGU9InRuczpQb3J0VHlwZTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MiIgYmluZGluZz0idG5zOkJpbmRpbmcyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMiIG5hbWU9IklucHV0MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzIiBuYW1lPSJPdXRwdXQzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczIiB0eXBlPSJ0bnM6UG9ydFR5cGUzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMiIGJpbmRpbmc9InRuczpCaW5kaW5nMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0IiBuYW1lPSJJbnB1dDQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNCIgbmFtZT0iT3V0cHV0NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNCIgdHlwZT0idG5zOlBvcnRUeXBlNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNSIgbmFtZT0iSW5wdXQ1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTUiIG5hbWU9Ik91dHB1dDUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUiIHR5cGU9InRuczpQb3J0VHlwZTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NSIgYmluZGluZz0idG5zOkJpbmRpbmc1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTYiIG5hbWU9IklucHV0NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2IiBuYW1lPSJPdXRwdXQ2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc2IiB0eXBlPSJ0bnM6UG9ydFR5cGU2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb242Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDYiIGJpbmRpbmc9InRuczpCaW5kaW5nNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3IiBuYW1lPSJJbnB1dDciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNyIgbmFtZT0iT3V0cHV0NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNyIgdHlwZT0idG5zOlBvcnRUeXBlNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlOCIgbmFtZT0iSW5wdXQ4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTgiIG5hbWU9Ik91dHB1dDgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgiIHR5cGU9InRuczpQb3J0VHlwZTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0OCIgYmluZGluZz0idG5zOkJpbmRpbmc4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTkiIG5hbWU9IklucHV0OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5IiBuYW1lPSJPdXRwdXQ5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc5IiB0eXBlPSJ0bnM6UG9ydFR5cGU5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb245Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDkiIGJpbmRpbmc9InRuczpCaW5kaW5nOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMCIgbmFtZT0iSW5wdXQxMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMCIgbmFtZT0iT3V0cHV0MTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEwIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMCIgYmluZGluZz0idG5zOkJpbmRpbmcxMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDExIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMSIgbmFtZT0iSW5wdXQxMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMSIgbmFtZT0iT3V0cHV0MTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzExIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjExIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTExIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMSIgYmluZGluZz0idG5zOkJpbmRpbmcxMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMiIgbmFtZT0iSW5wdXQxMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMiIgbmFtZT0iT3V0cHV0MTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEyIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMiIgYmluZGluZz0idG5zOkJpbmRpbmcxMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMyIgbmFtZT0iSW5wdXQxMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMyIgbmFtZT0iT3V0cHV0MTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEzIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMyIgYmluZGluZz0idG5zOkJpbmRpbmcxMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNCIgbmFtZT0iSW5wdXQxNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNCIgbmFtZT0iT3V0cHV0MTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE0IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNCIgYmluZGluZz0idG5zOkJpbmRpbmcxNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNSIgbmFtZT0iSW5wdXQxNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNSIgbmFtZT0iT3V0cHV0MTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE1IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNSIgYmluZGluZz0idG5zOkJpbmRpbmcxNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNiIgbmFtZT0iSW5wdXQxNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNiIgbmFtZT0iT3V0cHV0MTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE2IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNiIgYmluZGluZz0idG5zOkJpbmRpbmcxNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNyIgbmFtZT0iSW5wdXQxNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNyIgbmFtZT0iT3V0cHV0MTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE3IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNyIgYmluZGluZz0idG5zOkJpbmRpbmcxNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxOCIgbmFtZT0iSW5wdXQxOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxOCIgbmFtZT0iT3V0cHV0MTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE4IiB0eXBlPSJ0bnM6UG9ydFR5cGUxOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxOCIgYmluZGluZz0idG5zOkJpbmRpbmcxOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxOSIgbmFtZT0iSW5wdXQxOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxOSIgbmFtZT0iT3V0cHV0MTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE5IiB0eXBlPSJ0bnM6UG9ydFR5cGUxOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxOSIgYmluZGluZz0idG5zOkJpbmRpbmcxOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMCIgbmFtZT0iSW5wdXQyMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMCIgbmFtZT0iT3V0cHV0MjAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIwIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMCIgYmluZGluZz0idG5zOkJpbmRpbmcyMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMSIgbmFtZT0iSW5wdXQyMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMSIgbmFtZT0iT3V0cHV0MjEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIxIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMSIgYmluZGluZz0idG5zOkJpbmRpbmcyMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMiIgbmFtZT0iSW5wdXQyMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMiIgbmFtZT0iT3V0cHV0MjIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIyIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMiIgYmluZGluZz0idG5zOkJpbmRpbmcyMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMyIgbmFtZT0iSW5wdXQyMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMyIgbmFtZT0iT3V0cHV0MjMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIzIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMyIgYmluZGluZz0idG5zOkJpbmRpbmcyMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNCIgbmFtZT0iSW5wdXQyNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNCIgbmFtZT0iT3V0cHV0MjQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI0IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNCIgYmluZGluZz0idG5zOkJpbmRpbmcyNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNSIgbmFtZT0iSW5wdXQyNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNSIgbmFtZT0iT3V0cHV0MjUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI1IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNSIgYmluZGluZz0idG5zOkJpbmRpbmcyNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNiIgbmFtZT0iSW5wdXQyNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNiIgbmFtZT0iT3V0cHV0MjYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI2IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNiIgYmluZGluZz0idG5zOkJpbmRpbmcyNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNyIgbmFtZT0iSW5wdXQyNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNyIgbmFtZT0iT3V0cHV0MjciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI3IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNyIgYmluZGluZz0idG5zOkJpbmRpbmcyNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyOCIgbmFtZT0iSW5wdXQyOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyOCIgbmFtZT0iT3V0cHV0MjgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI4IiB0eXBlPSJ0bnM6UG9ydFR5cGUyOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyOCIgYmluZGluZz0idG5zOkJpbmRpbmcyOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyOSIgbmFtZT0iSW5wdXQyOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyOSIgbmFtZT0iT3V0cHV0MjkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI5IiB0eXBlPSJ0bnM6UG9ydFR5cGUyOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyOSIgYmluZGluZz0idG5zOkJpbmRpbmcyOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMCIgbmFtZT0iSW5wdXQzMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMCIgbmFtZT0iT3V0cHV0MzAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMwIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMCIgYmluZGluZz0idG5zOkJpbmRpbmczMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMSIgbmFtZT0iSW5wdXQzMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMSIgbmFtZT0iT3V0cHV0MzEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMxIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMSIgYmluZGluZz0idG5zOkJpbmRpbmczMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMiIgbmFtZT0iSW5wdXQzMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMiIgbmFtZT0iT3V0cHV0MzIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMyIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMiIgYmluZGluZz0idG5zOkJpbmRpbmczMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMyIgbmFtZT0iSW5wdXQzMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMyIgbmFtZT0iT3V0cHV0MzMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMzIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMyIgYmluZGluZz0idG5zOkJpbmRpbmczMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNCIgbmFtZT0iSW5wdXQzNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNCIgbmFtZT0iT3V0cHV0MzQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM0IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNCIgYmluZGluZz0idG5zOkJpbmRpbmczNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNSIgbmFtZT0iSW5wdXQzNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNSIgbmFtZT0iT3V0cHV0MzUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM1IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNSIgYmluZGluZz0idG5zOkJpbmRpbmczNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNiIgbmFtZT0iSW5wdXQzNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNiIgbmFtZT0iT3V0cHV0MzYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM2IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNiIgYmluZGluZz0idG5zOkJpbmRpbmczNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNyIgbmFtZT0iSW5wdXQzNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNyIgbmFtZT0iT3V0cHV0MzciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM3IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNyIgYmluZGluZz0idG5zOkJpbmRpbmczNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzOCIgbmFtZT0iSW5wdXQzOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzOCIgbmFtZT0iT3V0cHV0MzgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM4IiB0eXBlPSJ0bnM6UG9ydFR5cGUzOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzOCIgYmluZGluZz0idG5zOkJpbmRpbmczOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzOSIgbmFtZT0iSW5wdXQzOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzOSIgbmFtZT0iT3V0cHV0MzkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM5IiB0eXBlPSJ0bnM6UG9ydFR5cGUzOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzOSIgYmluZGluZz0idG5zOkJpbmRpbmczOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MCIgbmFtZT0iSW5wdXQ0MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MCIgbmFtZT0iT3V0cHV0NDAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQwIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MCIgYmluZGluZz0idG5zOkJpbmRpbmc0MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MSIgbmFtZT0iSW5wdXQ0MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MSIgbmFtZT0iT3V0cHV0NDEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQxIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MSIgYmluZGluZz0idG5zOkJpbmRpbmc0MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MiIgbmFtZT0iSW5wdXQ0MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MiIgbmFtZT0iT3V0cHV0NDIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQyIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MiIgYmluZGluZz0idG5zOkJpbmRpbmc0MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MyIgbmFtZT0iSW5wdXQ0MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MyIgbmFtZT0iT3V0cHV0NDMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQzIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MyIgYmluZGluZz0idG5zOkJpbmRpbmc0MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NCIgbmFtZT0iSW5wdXQ0NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NCIgbmFtZT0iT3V0cHV0NDQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ0IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NCIgYmluZGluZz0idG5zOkJpbmRpbmc0NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NSIgbmFtZT0iSW5wdXQ0NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NSIgbmFtZT0iT3V0cHV0NDUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ1IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NSIgYmluZGluZz0idG5zOkJpbmRpbmc0NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NiIgbmFtZT0iSW5wdXQ0NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NiIgbmFtZT0iT3V0cHV0NDYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ2IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NiIgYmluZGluZz0idG5zOkJpbmRpbmc0NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NyIgbmFtZT0iSW5wdXQ0NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NyIgbmFtZT0iT3V0cHV0NDciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ3IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NyIgYmluZGluZz0idG5zOkJpbmRpbmc0NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0OCIgbmFtZT0iSW5wdXQ0OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0OCIgbmFtZT0iT3V0cHV0NDgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ4IiB0eXBlPSJ0bnM6UG9ydFR5cGU0OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0OCIgYmluZGluZz0idG5zOkJpbmRpbmc0OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0OSIgbmFtZT0iSW5wdXQ0OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0OSIgbmFtZT0iT3V0cHV0NDkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ5IiB0eXBlPSJ0bnM6UG9ydFR5cGU0OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0OSIgYmluZGluZz0idG5zOkJpbmRpbmc0OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MCIgbmFtZT0iSW5wdXQ1MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MCIgbmFtZT0iT3V0cHV0NTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUwIiB0eXBlPSJ0bnM6UG9ydFR5cGU1MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MCIgYmluZGluZz0idG5zOkJpbmRpbmc1MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MSIgbmFtZT0iSW5wdXQ1MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MSIgbmFtZT0iT3V0cHV0NTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUxIiB0eXBlPSJ0bnM6UG9ydFR5cGU1MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MSIgYmluZGluZz0idG5zOkJpbmRpbmc1MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MiIgbmFtZT0iSW5wdXQ1MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MiIgbmFtZT0iT3V0cHV0NTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUyIiB0eXBlPSJ0bnM6UG9ydFR5cGU1MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MiIgYmluZGluZz0idG5zOkJpbmRpbmc1MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDUzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1MyIgbmFtZT0iSW5wdXQ1MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1MyIgbmFtZT0iT3V0cHV0NTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzUzIiB0eXBlPSJ0bnM6UG9ydFR5cGU1MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjUzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjUzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTUzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1MyIgYmluZGluZz0idG5zOkJpbmRpbmc1MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NCIgbmFtZT0iSW5wdXQ1NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NCIgbmFtZT0iT3V0cHV0NTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU0IiB0eXBlPSJ0bnM6UG9ydFR5cGU1NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NCIgYmluZGluZz0idG5zOkJpbmRpbmc1NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NSIgbmFtZT0iSW5wdXQ1NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NSIgbmFtZT0iT3V0cHV0NTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU1IiB0eXBlPSJ0bnM6UG9ydFR5cGU1NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NSIgYmluZGluZz0idG5zOkJpbmRpbmc1NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NiIgbmFtZT0iSW5wdXQ1NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NiIgbmFtZT0iT3V0cHV0NTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU2IiB0eXBlPSJ0bnM6UG9ydFR5cGU1NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NiIgYmluZGluZz0idG5zOkJpbmRpbmc1NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1NyIgbmFtZT0iSW5wdXQ1NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1NyIgbmFtZT0iT3V0cHV0NTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU3IiB0eXBlPSJ0bnM6UG9ydFR5cGU1NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1NyIgYmluZGluZz0idG5zOkJpbmRpbmc1NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1OCIgbmFtZT0iSW5wdXQ1OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1OCIgbmFtZT0iT3V0cHV0NTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU4IiB0eXBlPSJ0bnM6UG9ydFR5cGU1OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1OCIgYmluZGluZz0idG5zOkJpbmRpbmc1OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U1OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDU5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb241OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U1OSIgbmFtZT0iSW5wdXQ1OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U1OSIgbmFtZT0iT3V0cHV0NTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzU5IiB0eXBlPSJ0bnM6UG9ydFR5cGU1OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjU5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjU5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTU5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ1OSIgYmluZGluZz0idG5zOkJpbmRpbmc1OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MCIgbmFtZT0iSW5wdXQ2MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MCIgbmFtZT0iT3V0cHV0NjAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYwIiB0eXBlPSJ0bnM6UG9ydFR5cGU2MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MCIgYmluZGluZz0idG5zOkJpbmRpbmc2MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MSIgbmFtZT0iSW5wdXQ2MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MSIgbmFtZT0iT3V0cHV0NjEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYxIiB0eXBlPSJ0bnM6UG9ydFR5cGU2MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MSIgYmluZGluZz0idG5zOkJpbmRpbmc2MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MiIgbmFtZT0iSW5wdXQ2MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MiIgbmFtZT0iT3V0cHV0NjIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYyIiB0eXBlPSJ0bnM6UG9ydFR5cGU2MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MiIgYmluZGluZz0idG5zOkJpbmRpbmc2MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDYzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2MyIgbmFtZT0iSW5wdXQ2MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2MyIgbmFtZT0iT3V0cHV0NjMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzYzIiB0eXBlPSJ0bnM6UG9ydFR5cGU2MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjYzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjYzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTYzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2MyIgYmluZGluZz0idG5zOkJpbmRpbmc2MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NCIgbmFtZT0iSW5wdXQ2NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NCIgbmFtZT0iT3V0cHV0NjQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY0IiB0eXBlPSJ0bnM6UG9ydFR5cGU2NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NCIgYmluZGluZz0idG5zOkJpbmRpbmc2NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NSIgbmFtZT0iSW5wdXQ2NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NSIgbmFtZT0iT3V0cHV0NjUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY1IiB0eXBlPSJ0bnM6UG9ydFR5cGU2NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NSIgYmluZGluZz0idG5zOkJpbmRpbmc2NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NiIgbmFtZT0iSW5wdXQ2NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NiIgbmFtZT0iT3V0cHV0NjYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY2IiB0eXBlPSJ0bnM6UG9ydFR5cGU2NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NiIgYmluZGluZz0idG5zOkJpbmRpbmc2NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2NyIgbmFtZT0iSW5wdXQ2NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2NyIgbmFtZT0iT3V0cHV0NjciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY3IiB0eXBlPSJ0bnM6UG9ydFR5cGU2NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2NyIgYmluZGluZz0idG5zOkJpbmRpbmc2NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2OCIgbmFtZT0iSW5wdXQ2OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2OCIgbmFtZT0iT3V0cHV0NjgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY4IiB0eXBlPSJ0bnM6UG9ydFR5cGU2OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2OCIgYmluZGluZz0idG5zOkJpbmRpbmc2OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U2OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDY5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNjkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb242OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U2OSIgbmFtZT0iSW5wdXQ2OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U2OSIgbmFtZT0iT3V0cHV0NjkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzY5IiB0eXBlPSJ0bnM6UG9ydFR5cGU2OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjY5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjY5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTY5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ2OSIgYmluZGluZz0idG5zOkJpbmRpbmc2OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MCIgbmFtZT0iSW5wdXQ3MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MCIgbmFtZT0iT3V0cHV0NzAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcwIiB0eXBlPSJ0bnM6UG9ydFR5cGU3MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MCIgYmluZGluZz0idG5zOkJpbmRpbmc3MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MSIgbmFtZT0iSW5wdXQ3MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MSIgbmFtZT0iT3V0cHV0NzEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcxIiB0eXBlPSJ0bnM6UG9ydFR5cGU3MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MSIgYmluZGluZz0idG5zOkJpbmRpbmc3MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDcyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MiIgbmFtZT0iSW5wdXQ3MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MiIgbmFtZT0iT3V0cHV0NzIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzcyIiB0eXBlPSJ0bnM6UG9ydFR5cGU3MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjcyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjcyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTcyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MiIgYmluZGluZz0idG5zOkJpbmRpbmc3MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDczIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3MyIgbmFtZT0iSW5wdXQ3MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3MyIgbmFtZT0iT3V0cHV0NzMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzczIiB0eXBlPSJ0bnM6UG9ydFR5cGU3MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjczIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjczIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTczIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3MyIgYmluZGluZz0idG5zOkJpbmRpbmc3MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NCIgbmFtZT0iSW5wdXQ3NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NCIgbmFtZT0iT3V0cHV0NzQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc0IiB0eXBlPSJ0bnM6UG9ydFR5cGU3NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NCIgYmluZGluZz0idG5zOkJpbmRpbmc3NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NSIgbmFtZT0iSW5wdXQ3NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NSIgbmFtZT0iT3V0cHV0NzUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc1IiB0eXBlPSJ0bnM6UG9ydFR5cGU3NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NSIgYmluZGluZz0idG5zOkJpbmRpbmc3NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NiIgbmFtZT0iSW5wdXQ3NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NiIgbmFtZT0iT3V0cHV0NzYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc2IiB0eXBlPSJ0bnM6UG9ydFR5cGU3NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NiIgYmluZGluZz0idG5zOkJpbmRpbmc3NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3NyIgbmFtZT0iSW5wdXQ3NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3NyIgbmFtZT0iT3V0cHV0NzciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc3IiB0eXBlPSJ0bnM6UG9ydFR5cGU3NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3NyIgYmluZGluZz0idG5zOkJpbmRpbmc3NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3OCIgbmFtZT0iSW5wdXQ3OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3OCIgbmFtZT0iT3V0cHV0NzgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc4IiB0eXBlPSJ0bnM6UG9ydFR5cGU3OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3OCIgYmluZGluZz0idG5zOkJpbmRpbmc3OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U3OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDc5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNzkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb243OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U3OSIgbmFtZT0iSW5wdXQ3OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U3OSIgbmFtZT0iT3V0cHV0NzkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzc5IiB0eXBlPSJ0bnM6UG9ydFR5cGU3OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjc5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjc5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTc5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ3OSIgYmluZGluZz0idG5zOkJpbmRpbmc3OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MCIgbmFtZT0iSW5wdXQ4MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MCIgbmFtZT0iT3V0cHV0ODAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgwIiB0eXBlPSJ0bnM6UG9ydFR5cGU4MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MCIgYmluZGluZz0idG5zOkJpbmRpbmc4MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MSIgbmFtZT0iSW5wdXQ4MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MSIgbmFtZT0iT3V0cHV0ODEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgxIiB0eXBlPSJ0bnM6UG9ydFR5cGU4MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MSIgYmluZGluZz0idG5zOkJpbmRpbmc4MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MiIgbmFtZT0iSW5wdXQ4MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MiIgbmFtZT0iT3V0cHV0ODIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgyIiB0eXBlPSJ0bnM6UG9ydFR5cGU4MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MiIgYmluZGluZz0idG5zOkJpbmRpbmc4MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDgzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4MyIgbmFtZT0iSW5wdXQ4MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4MyIgbmFtZT0iT3V0cHV0ODMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzgzIiB0eXBlPSJ0bnM6UG9ydFR5cGU4MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjgzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjgzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTgzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4MyIgYmluZGluZz0idG5zOkJpbmRpbmc4MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NCIgbmFtZT0iSW5wdXQ4NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NCIgbmFtZT0iT3V0cHV0ODQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg0IiB0eXBlPSJ0bnM6UG9ydFR5cGU4NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NCIgYmluZGluZz0idG5zOkJpbmRpbmc4NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NSIgbmFtZT0iSW5wdXQ4NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NSIgbmFtZT0iT3V0cHV0ODUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg1IiB0eXBlPSJ0bnM6UG9ydFR5cGU4NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NSIgYmluZGluZz0idG5zOkJpbmRpbmc4NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NiIgbmFtZT0iSW5wdXQ4NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NiIgbmFtZT0iT3V0cHV0ODYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg2IiB0eXBlPSJ0bnM6UG9ydFR5cGU4NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NiIgYmluZGluZz0idG5zOkJpbmRpbmc4NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4NyIgbmFtZT0iSW5wdXQ4NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4NyIgbmFtZT0iT3V0cHV0ODciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg3IiB0eXBlPSJ0bnM6UG9ydFR5cGU4NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4NyIgYmluZGluZz0idG5zOkJpbmRpbmc4NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4OCIgbmFtZT0iSW5wdXQ4OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4OCIgbmFtZT0iT3V0cHV0ODgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg4IiB0eXBlPSJ0bnM6UG9ydFR5cGU4OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4OCIgYmluZGluZz0idG5zOkJpbmRpbmc4OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U4OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDg5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlODkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50ODkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlODkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb244OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U4OSIgbmFtZT0iSW5wdXQ4OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U4OSIgbmFtZT0iT3V0cHV0ODkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzg5IiB0eXBlPSJ0bnM6UG9ydFR5cGU4OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjg5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjg5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTg5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ4OSIgYmluZGluZz0idG5zOkJpbmRpbmc4OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MCIgbmFtZT0iSW5wdXQ5MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MCIgbmFtZT0iT3V0cHV0OTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkwIiB0eXBlPSJ0bnM6UG9ydFR5cGU5MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MCIgYmluZGluZz0idG5zOkJpbmRpbmc5MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MSIgbmFtZT0iSW5wdXQ5MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MSIgbmFtZT0iT3V0cHV0OTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkxIiB0eXBlPSJ0bnM6UG9ydFR5cGU5MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MSIgYmluZGluZz0idG5zOkJpbmRpbmc5MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MiIgbmFtZT0iSW5wdXQ5MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MiIgbmFtZT0iT3V0cHV0OTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkyIiB0eXBlPSJ0bnM6UG9ydFR5cGU5MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MiIgYmluZGluZz0idG5zOkJpbmRpbmc5MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDkzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5MyIgbmFtZT0iSW5wdXQ5MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5MyIgbmFtZT0iT3V0cHV0OTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzkzIiB0eXBlPSJ0bnM6UG9ydFR5cGU5MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjkzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjkzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTkzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5MyIgYmluZGluZz0idG5zOkJpbmRpbmc5MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NCIgbmFtZT0iSW5wdXQ5NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NCIgbmFtZT0iT3V0cHV0OTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk0IiB0eXBlPSJ0bnM6UG9ydFR5cGU5NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NCIgYmluZGluZz0idG5zOkJpbmRpbmc5NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NSIgbmFtZT0iSW5wdXQ5NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NSIgbmFtZT0iT3V0cHV0OTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk1IiB0eXBlPSJ0bnM6UG9ydFR5cGU5NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NSIgYmluZGluZz0idG5zOkJpbmRpbmc5NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NiIgbmFtZT0iSW5wdXQ5NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NiIgbmFtZT0iT3V0cHV0OTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk2IiB0eXBlPSJ0bnM6UG9ydFR5cGU5NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NiIgYmluZGluZz0idG5zOkJpbmRpbmc5NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5NyIgbmFtZT0iSW5wdXQ5NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5NyIgbmFtZT0iT3V0cHV0OTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk3IiB0eXBlPSJ0bnM6UG9ydFR5cGU5NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5NyIgYmluZGluZz0idG5zOkJpbmRpbmc5NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5OCIgbmFtZT0iSW5wdXQ5OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5OCIgbmFtZT0iT3V0cHV0OTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk4IiB0eXBlPSJ0bnM6UG9ydFR5cGU5OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5OCIgYmluZGluZz0idG5zOkJpbmRpbmc5OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U5OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDk5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlOTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50OTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlOTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb245OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U5OSIgbmFtZT0iSW5wdXQ5OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U5OSIgbmFtZT0iT3V0cHV0OTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzk5IiB0eXBlPSJ0bnM6UG9ydFR5cGU5OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjk5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjk5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTk5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ5OSIgYmluZGluZz0idG5zOkJpbmRpbmc5OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTAwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEwMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMDAiIG5hbWU9IklucHV0MTAwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEwMCIgbmFtZT0iT3V0cHV0MTAwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMDAiIHR5cGU9InRuczpQb3J0VHlwZTEwMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMDAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTAwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMDAiIGJpbmRpbmc9InRuczpCaW5kaW5nMTAwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEwMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEwMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEwMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTAxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTAxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEwMSIgbmFtZT0iSW5wdXQxMDEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTAxIiBuYW1lPSJPdXRwdXQxMDEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEwMSIgdHlwZT0idG5zOlBvcnRUeXBlMTAxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTAxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEwMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMDEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEwMSIgYmluZGluZz0idG5zOkJpbmRpbmcxMDEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTAyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTAyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTAyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEwMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMDIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTAyIiBuYW1lPSJJbnB1dDEwMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMDIiIG5hbWU9Ik91dHB1dDEwMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTAyIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMDIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTAyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEwMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTAyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEwMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTAzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEwMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMDMiIG5hbWU9IklucHV0MTAzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEwMyIgbmFtZT0iT3V0cHV0MTAzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMDMiIHR5cGU9InRuczpQb3J0VHlwZTEwMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMDMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTAzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMDMiIGJpbmRpbmc9InRuczpCaW5kaW5nMTAzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEwNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEwNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEwNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTA0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTA0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEwNCIgbmFtZT0iSW5wdXQxMDQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTA0IiBuYW1lPSJPdXRwdXQxMDQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEwNCIgdHlwZT0idG5zOlBvcnRUeXBlMTA0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTA0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEwNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMDQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEwNCIgYmluZGluZz0idG5zOkJpbmRpbmcxMDQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTA1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTA1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTA1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEwNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMDUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTA1IiBuYW1lPSJJbnB1dDEwNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMDUiIG5hbWU9Ik91dHB1dDEwNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTA1IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMDUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTA1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEwNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTA1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEwNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTA2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEwNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMDYiIG5hbWU9IklucHV0MTA2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEwNiIgbmFtZT0iT3V0cHV0MTA2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMDYiIHR5cGU9InRuczpQb3J0VHlwZTEwNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMDYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTA2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMDYiIGJpbmRpbmc9InRuczpCaW5kaW5nMTA2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEwNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEwNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEwNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTA3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTA3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEwNyIgbmFtZT0iSW5wdXQxMDciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTA3IiBuYW1lPSJPdXRwdXQxMDciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEwNyIgdHlwZT0idG5zOlBvcnRUeXBlMTA3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTA3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEwNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMDciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEwNyIgYmluZGluZz0idG5zOkJpbmRpbmcxMDciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTA4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTA4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTA4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEwOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMDgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTA4IiBuYW1lPSJJbnB1dDEwOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMDgiIG5hbWU9Ik91dHB1dDEwOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTA4IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMDgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMDgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTA4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEwOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTA4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEwOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTA5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEwOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMDkiIG5hbWU9IklucHV0MTA5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEwOSIgbmFtZT0iT3V0cHV0MTA5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMDkiIHR5cGU9InRuczpQb3J0VHlwZTEwOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEwOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMDkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTA5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMDkiIGJpbmRpbmc9InRuczpCaW5kaW5nMTA5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTExMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDExMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTExMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTEwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTEwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTExMCIgbmFtZT0iSW5wdXQxMTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTEwIiBuYW1lPSJPdXRwdXQxMTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzExMCIgdHlwZT0idG5zOlBvcnRUeXBlMTEwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTEwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjExMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDExMCIgYmluZGluZz0idG5zOkJpbmRpbmcxMTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTExIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTExIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTExIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDExMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTExIiBuYW1lPSJJbnB1dDExMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMTEiIG5hbWU9Ik91dHB1dDExMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTExIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTExIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTExMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTExIiBiaW5kaW5nPSJ0bnM6QmluZGluZzExMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTEyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTExMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMTIiIG5hbWU9IklucHV0MTEyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTExMiIgbmFtZT0iT3V0cHV0MTEyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMTIiIHR5cGU9InRuczpQb3J0VHlwZTExMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTEyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMTIiIGJpbmRpbmc9InRuczpCaW5kaW5nMTEyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTExMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDExMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTExMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTEzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTEzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTExMyIgbmFtZT0iSW5wdXQxMTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTEzIiBuYW1lPSJPdXRwdXQxMTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzExMyIgdHlwZT0idG5zOlBvcnRUeXBlMTEzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTEzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjExMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDExMyIgYmluZGluZz0idG5zOkJpbmRpbmcxMTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTE0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTE0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTE0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDExNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTE0IiBuYW1lPSJJbnB1dDExNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMTQiIG5hbWU9Ik91dHB1dDExNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTE0IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTE0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTExNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTE0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzExNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTE1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTExNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMTUiIG5hbWU9IklucHV0MTE1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTExNSIgbmFtZT0iT3V0cHV0MTE1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMTUiIHR5cGU9InRuczpQb3J0VHlwZTExNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTE1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMTUiIGJpbmRpbmc9InRuczpCaW5kaW5nMTE1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTExNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDExNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTExNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTE2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTE2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTExNiIgbmFtZT0iSW5wdXQxMTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTE2IiBuYW1lPSJPdXRwdXQxMTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzExNiIgdHlwZT0idG5zOlBvcnRUeXBlMTE2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTE2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjExNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDExNiIgYmluZGluZz0idG5zOkJpbmRpbmcxMTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTE3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTE3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTE3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDExNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTE3IiBuYW1lPSJJbnB1dDExNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMTciIG5hbWU9Ik91dHB1dDExNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTE3IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTE3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTExNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTE3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzExNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTE4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTExOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMTgiIG5hbWU9IklucHV0MTE4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTExOCIgbmFtZT0iT3V0cHV0MTE4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMTgiIHR5cGU9InRuczpQb3J0VHlwZTExOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjExOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTE4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMTgiIGJpbmRpbmc9InRuczpCaW5kaW5nMTE4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTExOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDExOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTExOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTE5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTE5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTExOSIgbmFtZT0iSW5wdXQxMTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTE5IiBuYW1lPSJPdXRwdXQxMTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzExOSIgdHlwZT0idG5zOlBvcnRUeXBlMTE5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTE5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjExOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDExOSIgYmluZGluZz0idG5zOkJpbmRpbmcxMTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTIwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTIwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTIwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEyMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMjAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTIwIiBuYW1lPSJJbnB1dDEyMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMjAiIG5hbWU9Ik91dHB1dDEyMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTIwIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMjAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTIwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEyMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTIwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEyMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTIxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEyMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMjEiIG5hbWU9IklucHV0MTIxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEyMSIgbmFtZT0iT3V0cHV0MTIxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMjEiIHR5cGU9InRuczpQb3J0VHlwZTEyMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTIxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMjEiIGJpbmRpbmc9InRuczpCaW5kaW5nMTIxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEyMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEyMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEyMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTIyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTIyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEyMiIgbmFtZT0iSW5wdXQxMjIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTIyIiBuYW1lPSJPdXRwdXQxMjIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEyMiIgdHlwZT0idG5zOlBvcnRUeXBlMTIyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTIyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEyMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMjIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEyMiIgYmluZGluZz0idG5zOkJpbmRpbmcxMjIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTIzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTIzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTIzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEyMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMjMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTIzIiBuYW1lPSJJbnB1dDEyMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMjMiIG5hbWU9Ik91dHB1dDEyMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTIzIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMjMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTIzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEyMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTIzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEyMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTI0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEyNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMjQiIG5hbWU9IklucHV0MTI0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEyNCIgbmFtZT0iT3V0cHV0MTI0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMjQiIHR5cGU9InRuczpQb3J0VHlwZTEyNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTI0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMjQiIGJpbmRpbmc9InRuczpCaW5kaW5nMTI0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEyNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEyNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEyNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTI1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTI1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEyNSIgbmFtZT0iSW5wdXQxMjUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTI1IiBuYW1lPSJPdXRwdXQxMjUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEyNSIgdHlwZT0idG5zOlBvcnRUeXBlMTI1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTI1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEyNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMjUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEyNSIgYmluZGluZz0idG5zOkJpbmRpbmcxMjUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTI2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTI2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTI2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEyNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMjYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTI2IiBuYW1lPSJJbnB1dDEyNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMjYiIG5hbWU9Ik91dHB1dDEyNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTI2IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMjYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTI2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEyNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTI2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEyNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTI3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEyNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMjciIG5hbWU9IklucHV0MTI3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEyNyIgbmFtZT0iT3V0cHV0MTI3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMjciIHR5cGU9InRuczpQb3J0VHlwZTEyNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEyNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTI3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMjciIGJpbmRpbmc9InRuczpCaW5kaW5nMTI3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEyOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEyOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEyOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTI4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTI4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEyOCIgbmFtZT0iSW5wdXQxMjgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTI4IiBuYW1lPSJPdXRwdXQxMjgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEyOCIgdHlwZT0idG5zOlBvcnRUeXBlMTI4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTI4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEyOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMjgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEyOCIgYmluZGluZz0idG5zOkJpbmRpbmcxMjgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTI5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTI5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTI5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEyOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMjkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTI5IiBuYW1lPSJJbnB1dDEyOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMjkiIG5hbWU9Ik91dHB1dDEyOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTI5IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMjkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTI5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEyOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTI5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEyOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTMwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEzMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMzAiIG5hbWU9IklucHV0MTMwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEzMCIgbmFtZT0iT3V0cHV0MTMwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMzAiIHR5cGU9InRuczpQb3J0VHlwZTEzMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMzAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTMwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMzAiIGJpbmRpbmc9InRuczpCaW5kaW5nMTMwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEzMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEzMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEzMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTMxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTMxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEzMSIgbmFtZT0iSW5wdXQxMzEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTMxIiBuYW1lPSJPdXRwdXQxMzEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEzMSIgdHlwZT0idG5zOlBvcnRUeXBlMTMxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTMxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEzMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMzEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEzMSIgYmluZGluZz0idG5zOkJpbmRpbmcxMzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTMyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTMyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTMyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEzMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMzIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTMyIiBuYW1lPSJJbnB1dDEzMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMzIiIG5hbWU9Ik91dHB1dDEzMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTMyIiB0eXBlPSJ0bnM6UG9ydFR5cGUxMzIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTMyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEzMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTMyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzEzMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTMzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEzMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMzMiIG5hbWU9IklucHV0MTMzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEzMyIgbmFtZT0iT3V0cHV0MTMzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMzMiIHR5cGU9InRuczpQb3J0VHlwZTEzMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMzMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTMzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMzMiIGJpbmRpbmc9InRuczpCaW5kaW5nMTMzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEzNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEzNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEzNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTM0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTM0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEzNCIgbmFtZT0iSW5wdXQxMzQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTM0IiBuYW1lPSJPdXRwdXQxMzQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEzNCIgdHlwZT0idG5zOlBvcnRUeXBlMTM0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTM0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEzNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMzQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEzNCIgYmluZGluZz0idG5zOkJpbmRpbmcxMzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTM1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTM1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTM1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEzNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMzUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTM1IiBuYW1lPSJJbnB1dDEzNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMzUiIG5hbWU9Ik91dHB1dDEzNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTM1IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMzUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTM1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEzNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTM1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEzNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTM2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEzNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMzYiIG5hbWU9IklucHV0MTM2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEzNiIgbmFtZT0iT3V0cHV0MTM2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMzYiIHR5cGU9InRuczpQb3J0VHlwZTEzNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMzYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTM2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMzYiIGJpbmRpbmc9InRuczpCaW5kaW5nMTM2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTEzNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDEzNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTEzNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxMzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTM3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTM3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTEzNyIgbmFtZT0iSW5wdXQxMzciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTM3IiBuYW1lPSJPdXRwdXQxMzciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzEzNyIgdHlwZT0idG5zOlBvcnRUeXBlMTM3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTM3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjEzNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxMzciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDEzNyIgYmluZGluZz0idG5zOkJpbmRpbmcxMzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTM4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTM4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTM4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDEzOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxMzgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTM4IiBuYW1lPSJJbnB1dDEzOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxMzgiIG5hbWU9Ik91dHB1dDEzOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTM4IiB0eXBlPSJ0bnM6UG9ydFR5cGUxMzgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xMzgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTM4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTEzOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTM4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzEzOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxMzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxMzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxMzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTM5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTEzOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxMzkiIG5hbWU9IklucHV0MTM5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTEzOSIgbmFtZT0iT3V0cHV0MTM5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxMzkiIHR5cGU9InRuczpQb3J0VHlwZTEzOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjEzOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xMzkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTM5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxMzkiIGJpbmRpbmc9InRuczpCaW5kaW5nMTM5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE0MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE0MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE0MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTQwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE0MCIgbmFtZT0iSW5wdXQxNDAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTQwIiBuYW1lPSJPdXRwdXQxNDAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE0MCIgdHlwZT0idG5zOlBvcnRUeXBlMTQwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE0MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNDAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE0MCIgYmluZGluZz0idG5zOkJpbmRpbmcxNDAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTQxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTQxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE0MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNDEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTQxIiBuYW1lPSJJbnB1dDE0MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNDEiIG5hbWU9Ik91dHB1dDE0MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTQxIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNDEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTQxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE0MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTQxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE0MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE0MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNDIiIG5hbWU9IklucHV0MTQyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE0MiIgbmFtZT0iT3V0cHV0MTQyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNDIiIHR5cGU9InRuczpQb3J0VHlwZTE0MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNDIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTQyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNDIiIGJpbmRpbmc9InRuczpCaW5kaW5nMTQyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE0MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE0MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE0MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTQzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE0MyIgbmFtZT0iSW5wdXQxNDMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTQzIiBuYW1lPSJPdXRwdXQxNDMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE0MyIgdHlwZT0idG5zOlBvcnRUeXBlMTQzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE0MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNDMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE0MyIgYmluZGluZz0idG5zOkJpbmRpbmcxNDMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTQ0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTQ0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE0NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNDQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTQ0IiBuYW1lPSJJbnB1dDE0NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNDQiIG5hbWU9Ik91dHB1dDE0NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTQ0IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNDQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTQ0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE0NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTQ0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE0NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE0NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNDUiIG5hbWU9IklucHV0MTQ1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE0NSIgbmFtZT0iT3V0cHV0MTQ1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNDUiIHR5cGU9InRuczpQb3J0VHlwZTE0NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNDUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTQ1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNDUiIGJpbmRpbmc9InRuczpCaW5kaW5nMTQ1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE0NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE0NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE0NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTQ2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQ2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE0NiIgbmFtZT0iSW5wdXQxNDYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTQ2IiBuYW1lPSJPdXRwdXQxNDYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE0NiIgdHlwZT0idG5zOlBvcnRUeXBlMTQ2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQ2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE0NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNDYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE0NiIgYmluZGluZz0idG5zOkJpbmRpbmcxNDYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTQ3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTQ3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE0NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNDciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTQ3IiBuYW1lPSJJbnB1dDE0NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNDciIG5hbWU9Ik91dHB1dDE0NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTQ3IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNDciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNDciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTQ3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE0NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTQ3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE0NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE0OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNDgiIG5hbWU9IklucHV0MTQ4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE0OCIgbmFtZT0iT3V0cHV0MTQ4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNDgiIHR5cGU9InRuczpQb3J0VHlwZTE0OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE0OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNDgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTQ4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNDgiIGJpbmRpbmc9InRuczpCaW5kaW5nMTQ4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE0OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE0OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE0OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTQ5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQ5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE0OSIgbmFtZT0iSW5wdXQxNDkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTQ5IiBuYW1lPSJPdXRwdXQxNDkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE0OSIgdHlwZT0idG5zOlBvcnRUeXBlMTQ5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTQ5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE0OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNDkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE0OSIgYmluZGluZz0idG5zOkJpbmRpbmcxNDkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTUwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTUwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTUwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE1MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTUwIiBuYW1lPSJJbnB1dDE1MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNTAiIG5hbWU9Ik91dHB1dDE1MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTUwIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTUwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE1MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTUwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE1MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTUxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE1MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNTEiIG5hbWU9IklucHV0MTUxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE1MSIgbmFtZT0iT3V0cHV0MTUxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNTEiIHR5cGU9InRuczpQb3J0VHlwZTE1MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTUxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNTEiIGJpbmRpbmc9InRuczpCaW5kaW5nMTUxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE1MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE1MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE1MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTUyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTUyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE1MiIgbmFtZT0iSW5wdXQxNTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTUyIiBuYW1lPSJPdXRwdXQxNTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE1MiIgdHlwZT0idG5zOlBvcnRUeXBlMTUyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTUyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE1MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE1MiIgYmluZGluZz0idG5zOkJpbmRpbmcxNTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTUzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTUzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTUzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE1MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTUzIiBuYW1lPSJJbnB1dDE1MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNTMiIG5hbWU9Ik91dHB1dDE1MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTUzIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTUzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE1MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTUzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE1MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTU0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE1NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNTQiIG5hbWU9IklucHV0MTU0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE1NCIgbmFtZT0iT3V0cHV0MTU0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNTQiIHR5cGU9InRuczpQb3J0VHlwZTE1NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTU0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNTQiIGJpbmRpbmc9InRuczpCaW5kaW5nMTU0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE1NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE1NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE1NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTU1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTU1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE1NSIgbmFtZT0iSW5wdXQxNTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTU1IiBuYW1lPSJPdXRwdXQxNTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE1NSIgdHlwZT0idG5zOlBvcnRUeXBlMTU1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTU1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE1NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE1NSIgYmluZGluZz0idG5zOkJpbmRpbmcxNTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTU2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTU2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTU2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE1NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTU2IiBuYW1lPSJJbnB1dDE1NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNTYiIG5hbWU9Ik91dHB1dDE1NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTU2IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTU2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE1NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTU2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE1NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTU3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE1NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNTciIG5hbWU9IklucHV0MTU3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE1NyIgbmFtZT0iT3V0cHV0MTU3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNTciIHR5cGU9InRuczpQb3J0VHlwZTE1NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE1NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTU3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNTciIGJpbmRpbmc9InRuczpCaW5kaW5nMTU3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE1OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE1OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE1OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTU4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTU4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE1OCIgbmFtZT0iSW5wdXQxNTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTU4IiBuYW1lPSJPdXRwdXQxNTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE1OCIgdHlwZT0idG5zOlBvcnRUeXBlMTU4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTU4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE1OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE1OCIgYmluZGluZz0idG5zOkJpbmRpbmcxNTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTU5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTU5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTU5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE1OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTU5IiBuYW1lPSJJbnB1dDE1OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNTkiIG5hbWU9Ik91dHB1dDE1OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTU5IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTU5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE1OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTU5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE1OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTYwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE2MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNjAiIG5hbWU9IklucHV0MTYwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE2MCIgbmFtZT0iT3V0cHV0MTYwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNjAiIHR5cGU9InRuczpQb3J0VHlwZTE2MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTYwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNjAiIGJpbmRpbmc9InRuczpCaW5kaW5nMTYwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE2MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE2MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE2MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTYxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTYxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE2MSIgbmFtZT0iSW5wdXQxNjEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTYxIiBuYW1lPSJPdXRwdXQxNjEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE2MSIgdHlwZT0idG5zOlBvcnRUeXBlMTYxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTYxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE2MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNjEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE2MSIgYmluZGluZz0idG5zOkJpbmRpbmcxNjEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTYyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTYyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTYyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE2MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNjIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTYyIiBuYW1lPSJJbnB1dDE2MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNjIiIG5hbWU9Ik91dHB1dDE2MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTYyIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNjIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTYyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE2MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTYyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE2MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTYzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE2MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNjMiIG5hbWU9IklucHV0MTYzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE2MyIgbmFtZT0iT3V0cHV0MTYzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNjMiIHR5cGU9InRuczpQb3J0VHlwZTE2MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTYzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNjMiIGJpbmRpbmc9InRuczpCaW5kaW5nMTYzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE2NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE2NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE2NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTY0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTY0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE2NCIgbmFtZT0iSW5wdXQxNjQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTY0IiBuYW1lPSJPdXRwdXQxNjQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE2NCIgdHlwZT0idG5zOlBvcnRUeXBlMTY0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTY0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE2NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNjQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE2NCIgYmluZGluZz0idG5zOkJpbmRpbmcxNjQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTY1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTY1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTY1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE2NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNjUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTY1IiBuYW1lPSJJbnB1dDE2NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNjUiIG5hbWU9Ik91dHB1dDE2NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTY1IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNjUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTY1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE2NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTY1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE2NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTY2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE2NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNjYiIG5hbWU9IklucHV0MTY2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE2NiIgbmFtZT0iT3V0cHV0MTY2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNjYiIHR5cGU9InRuczpQb3J0VHlwZTE2NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTY2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNjYiIGJpbmRpbmc9InRuczpCaW5kaW5nMTY2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE2NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE2NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE2NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTY3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTY3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE2NyIgbmFtZT0iSW5wdXQxNjciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTY3IiBuYW1lPSJPdXRwdXQxNjciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE2NyIgdHlwZT0idG5zOlBvcnRUeXBlMTY3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTY3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE2NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNjciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE2NyIgYmluZGluZz0idG5zOkJpbmRpbmcxNjciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTY4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTY4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTY4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE2OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNjgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTY4IiBuYW1lPSJJbnB1dDE2OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNjgiIG5hbWU9Ik91dHB1dDE2OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTY4IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNjgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTY4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE2OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTY4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE2OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTY5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE2OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNjkiIG5hbWU9IklucHV0MTY5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE2OSIgbmFtZT0iT3V0cHV0MTY5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNjkiIHR5cGU9InRuczpQb3J0VHlwZTE2OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE2OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTY5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNjkiIGJpbmRpbmc9InRuczpCaW5kaW5nMTY5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE3MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE3MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE3MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTcwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTcwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE3MCIgbmFtZT0iSW5wdXQxNzAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTcwIiBuYW1lPSJPdXRwdXQxNzAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE3MCIgdHlwZT0idG5zOlBvcnRUeXBlMTcwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTcwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE3MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNzAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE3MCIgYmluZGluZz0idG5zOkJpbmRpbmcxNzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTcxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTcxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTcxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE3MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNzEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTcxIiBuYW1lPSJJbnB1dDE3MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNzEiIG5hbWU9Ik91dHB1dDE3MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTcxIiB0eXBlPSJ0bnM6UG9ydFR5cGUxNzEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTcxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE3MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTcxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE3MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTcyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE3MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNzIiIG5hbWU9IklucHV0MTcyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE3MiIgbmFtZT0iT3V0cHV0MTcyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNzIiIHR5cGU9InRuczpQb3J0VHlwZTE3MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNzIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTcyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNzIiIGJpbmRpbmc9InRuczpCaW5kaW5nMTcyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE3MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE3MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE3MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTczIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTczIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE3MyIgbmFtZT0iSW5wdXQxNzMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTczIiBuYW1lPSJPdXRwdXQxNzMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE3MyIgdHlwZT0idG5zOlBvcnRUeXBlMTczIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTczIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE3MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNzMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE3MyIgYmluZGluZz0idG5zOkJpbmRpbmcxNzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTc0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTc0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTc0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE3NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNzQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTc0IiBuYW1lPSJJbnB1dDE3NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNzQiIG5hbWU9Ik91dHB1dDE3NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTc0IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNzQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTc0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE3NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTc0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE3NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTc1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE3NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNzUiIG5hbWU9IklucHV0MTc1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE3NSIgbmFtZT0iT3V0cHV0MTc1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNzUiIHR5cGU9InRuczpQb3J0VHlwZTE3NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNzUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTc1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNzUiIGJpbmRpbmc9InRuczpCaW5kaW5nMTc1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE3NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE3NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE3NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTc2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTc2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE3NiIgbmFtZT0iSW5wdXQxNzYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTc2IiBuYW1lPSJPdXRwdXQxNzYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE3NiIgdHlwZT0idG5zOlBvcnRUeXBlMTc2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTc2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE3NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNzYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE3NiIgYmluZGluZz0idG5zOkJpbmRpbmcxNzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTc3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTc3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTc3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE3NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxNzciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTc3IiBuYW1lPSJJbnB1dDE3NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxNzciIG5hbWU9Ik91dHB1dDE3NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTc3IiB0eXBlPSJ0bnM6UG9ydFR5cGUxNzciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xNzciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTc3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE3NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTc3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE3NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxNzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxNzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxNzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTc4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE3OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxNzgiIG5hbWU9IklucHV0MTc4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE3OCIgbmFtZT0iT3V0cHV0MTc4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxNzgiIHR5cGU9InRuczpQb3J0VHlwZTE3OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE3OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xNzgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTc4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxNzgiIGJpbmRpbmc9InRuczpCaW5kaW5nMTc4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE3OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE3OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE3OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxNzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTc5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTc5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE3OSIgbmFtZT0iSW5wdXQxNzkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTc5IiBuYW1lPSJPdXRwdXQxNzkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE3OSIgdHlwZT0idG5zOlBvcnRUeXBlMTc5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTc5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE3OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxNzkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE3OSIgYmluZGluZz0idG5zOkJpbmRpbmcxNzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTgwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTgwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTgwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE4MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxODAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTgwIiBuYW1lPSJJbnB1dDE4MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxODAiIG5hbWU9Ik91dHB1dDE4MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTgwIiB0eXBlPSJ0bnM6UG9ydFR5cGUxODAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTgwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE4MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTgwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE4MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxODEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxODEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxODEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTgxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE4MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxODEiIG5hbWU9IklucHV0MTgxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE4MSIgbmFtZT0iT3V0cHV0MTgxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxODEiIHR5cGU9InRuczpQb3J0VHlwZTE4MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xODEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTgxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxODEiIGJpbmRpbmc9InRuczpCaW5kaW5nMTgxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE4MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE4MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE4MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxODIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTgyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTgyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE4MiIgbmFtZT0iSW5wdXQxODIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTgyIiBuYW1lPSJPdXRwdXQxODIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE4MiIgdHlwZT0idG5zOlBvcnRUeXBlMTgyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTgyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE4MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxODIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE4MiIgYmluZGluZz0idG5zOkJpbmRpbmcxODIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTgzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTgzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTgzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE4MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxODMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTgzIiBuYW1lPSJJbnB1dDE4MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxODMiIG5hbWU9Ik91dHB1dDE4MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTgzIiB0eXBlPSJ0bnM6UG9ydFR5cGUxODMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTgzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE4MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTgzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE4MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxODQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxODQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxODQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTg0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE4NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxODQiIG5hbWU9IklucHV0MTg0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE4NCIgbmFtZT0iT3V0cHV0MTg0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxODQiIHR5cGU9InRuczpQb3J0VHlwZTE4NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xODQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTg0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxODQiIGJpbmRpbmc9InRuczpCaW5kaW5nMTg0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE4NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE4NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE4NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxODUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTg1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTg1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE4NSIgbmFtZT0iSW5wdXQxODUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTg1IiBuYW1lPSJPdXRwdXQxODUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE4NSIgdHlwZT0idG5zOlBvcnRUeXBlMTg1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTg1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE4NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxODUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE4NSIgYmluZGluZz0idG5zOkJpbmRpbmcxODUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTg2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTg2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTg2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE4NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxODYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTg2IiBuYW1lPSJJbnB1dDE4NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxODYiIG5hbWU9Ik91dHB1dDE4NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTg2IiB0eXBlPSJ0bnM6UG9ydFR5cGUxODYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTg2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE4NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTg2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE4NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxODciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxODciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxODciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTg3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE4NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxODciIG5hbWU9IklucHV0MTg3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE4NyIgbmFtZT0iT3V0cHV0MTg3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxODciIHR5cGU9InRuczpQb3J0VHlwZTE4NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE4NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xODciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTg3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxODciIGJpbmRpbmc9InRuczpCaW5kaW5nMTg3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE4OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE4OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE4OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxODgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTg4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTg4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE4OCIgbmFtZT0iSW5wdXQxODgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTg4IiBuYW1lPSJPdXRwdXQxODgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE4OCIgdHlwZT0idG5zOlBvcnRUeXBlMTg4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTg4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE4OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxODgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE4OCIgYmluZGluZz0idG5zOkJpbmRpbmcxODgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTg5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTg5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTg5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE4OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxODkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTg5IiBuYW1lPSJJbnB1dDE4OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxODkiIG5hbWU9Ik91dHB1dDE4OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTg5IiB0eXBlPSJ0bnM6UG9ydFR5cGUxODkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xODkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTg5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE4OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTg5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE4OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxOTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxOTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxOTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTkwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE5MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxOTAiIG5hbWU9IklucHV0MTkwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE5MCIgbmFtZT0iT3V0cHV0MTkwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxOTAiIHR5cGU9InRuczpQb3J0VHlwZTE5MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xOTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTkwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxOTAiIGJpbmRpbmc9InRuczpCaW5kaW5nMTkwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE5MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE5MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE5MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxOTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTkxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTkxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE5MSIgbmFtZT0iSW5wdXQxOTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTkxIiBuYW1lPSJPdXRwdXQxOTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE5MSIgdHlwZT0idG5zOlBvcnRUeXBlMTkxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTkxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE5MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxOTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE5MSIgYmluZGluZz0idG5zOkJpbmRpbmcxOTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTkyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTkyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTkyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE5MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxOTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTkyIiBuYW1lPSJJbnB1dDE5MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxOTIiIG5hbWU9Ik91dHB1dDE5MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTkyIiB0eXBlPSJ0bnM6UG9ydFR5cGUxOTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTkyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE5MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTkyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzE5MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxOTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxOTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxOTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTkzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE5MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxOTMiIG5hbWU9IklucHV0MTkzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE5MyIgbmFtZT0iT3V0cHV0MTkzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxOTMiIHR5cGU9InRuczpQb3J0VHlwZTE5MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xOTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTkzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxOTMiIGJpbmRpbmc9InRuczpCaW5kaW5nMTkzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE5NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE5NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE5NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxOTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTk0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTk0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE5NCIgbmFtZT0iSW5wdXQxOTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTk0IiBuYW1lPSJPdXRwdXQxOTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE5NCIgdHlwZT0idG5zOlBvcnRUeXBlMTk0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTk0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE5NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxOTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE5NCIgYmluZGluZz0idG5zOkJpbmRpbmcxOTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTk1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTk1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTk1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE5NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxOTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTk1IiBuYW1lPSJJbnB1dDE5NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxOTUiIG5hbWU9Ik91dHB1dDE5NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTk1IiB0eXBlPSJ0bnM6UG9ydFR5cGUxOTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTk1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE5NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTk1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE5NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxOTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxOTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxOTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTk2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE5NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxOTYiIG5hbWU9IklucHV0MTk2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE5NiIgbmFtZT0iT3V0cHV0MTk2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxOTYiIHR5cGU9InRuczpQb3J0VHlwZTE5NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xOTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTk2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxOTYiIGJpbmRpbmc9InRuczpCaW5kaW5nMTk2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTE5NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDE5NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTE5NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQxOTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMTk3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTk3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTE5NyIgbmFtZT0iSW5wdXQxOTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMTk3IiBuYW1lPSJPdXRwdXQxOTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzE5NyIgdHlwZT0idG5zOlBvcnRUeXBlMTk3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMTk3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjE5NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxOTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDE5NyIgYmluZGluZz0idG5zOkJpbmRpbmcxOTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMTk4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MTk4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMTk4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDE5OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUxOTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMTk4IiBuYW1lPSJJbnB1dDE5OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UxOTgiIG5hbWU9Ik91dHB1dDE5OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMTk4IiB0eXBlPSJ0bnM6UG9ydFR5cGUxOTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24xOTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMTk4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTE5OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MTk4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzE5OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UxOTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQxOTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UxOTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MTk5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTE5OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UxOTkiIG5hbWU9IklucHV0MTk5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTE5OSIgbmFtZT0iT3V0cHV0MTk5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcxOTkiIHR5cGU9InRuczpQb3J0VHlwZTE5OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjE5OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24xOTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMTk5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQxOTkiIGJpbmRpbmc9InRuczpCaW5kaW5nMTk5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIwMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIwMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIwMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjAwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjAwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIwMCIgbmFtZT0iSW5wdXQyMDAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjAwIiBuYW1lPSJPdXRwdXQyMDAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIwMCIgdHlwZT0idG5zOlBvcnRUeXBlMjAwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjAwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIwMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMDAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIwMCIgYmluZGluZz0idG5zOkJpbmRpbmcyMDAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjAxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjAxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjAxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIwMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMDEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjAxIiBuYW1lPSJJbnB1dDIwMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMDEiIG5hbWU9Ik91dHB1dDIwMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjAxIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMDEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjAxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIwMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjAxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIwMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjAyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIwMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMDIiIG5hbWU9IklucHV0MjAyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIwMiIgbmFtZT0iT3V0cHV0MjAyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMDIiIHR5cGU9InRuczpQb3J0VHlwZTIwMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMDIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjAyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMDIiIGJpbmRpbmc9InRuczpCaW5kaW5nMjAyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIwMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIwMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIwMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjAzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjAzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIwMyIgbmFtZT0iSW5wdXQyMDMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjAzIiBuYW1lPSJPdXRwdXQyMDMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIwMyIgdHlwZT0idG5zOlBvcnRUeXBlMjAzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjAzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIwMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMDMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIwMyIgYmluZGluZz0idG5zOkJpbmRpbmcyMDMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjA0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjA0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjA0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIwNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMDQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjA0IiBuYW1lPSJJbnB1dDIwNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMDQiIG5hbWU9Ik91dHB1dDIwNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjA0IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMDQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjA0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIwNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjA0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIwNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjA1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIwNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMDUiIG5hbWU9IklucHV0MjA1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIwNSIgbmFtZT0iT3V0cHV0MjA1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMDUiIHR5cGU9InRuczpQb3J0VHlwZTIwNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMDUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjA1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMDUiIGJpbmRpbmc9InRuczpCaW5kaW5nMjA1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIwNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIwNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIwNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjA2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjA2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIwNiIgbmFtZT0iSW5wdXQyMDYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjA2IiBuYW1lPSJPdXRwdXQyMDYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIwNiIgdHlwZT0idG5zOlBvcnRUeXBlMjA2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjA2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIwNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMDYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIwNiIgYmluZGluZz0idG5zOkJpbmRpbmcyMDYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjA3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjA3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjA3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIwNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMDciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjA3IiBuYW1lPSJJbnB1dDIwNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMDciIG5hbWU9Ik91dHB1dDIwNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjA3IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMDciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMDciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjA3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIwNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjA3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIwNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjA4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIwOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMDgiIG5hbWU9IklucHV0MjA4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIwOCIgbmFtZT0iT3V0cHV0MjA4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMDgiIHR5cGU9InRuczpQb3J0VHlwZTIwOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIwOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMDgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjA4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMDgiIGJpbmRpbmc9InRuczpCaW5kaW5nMjA4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIwOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIwOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIwOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjA5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjA5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIwOSIgbmFtZT0iSW5wdXQyMDkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjA5IiBuYW1lPSJPdXRwdXQyMDkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIwOSIgdHlwZT0idG5zOlBvcnRUeXBlMjA5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjA5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIwOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMDkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIwOSIgYmluZGluZz0idG5zOkJpbmRpbmcyMDkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjEwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjEwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjEwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIxMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjEwIiBuYW1lPSJJbnB1dDIxMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMTAiIG5hbWU9Ik91dHB1dDIxMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjEwIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjEwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIxMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjEwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIxMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjExIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIxMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMTEiIG5hbWU9IklucHV0MjExIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIxMSIgbmFtZT0iT3V0cHV0MjExIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMTEiIHR5cGU9InRuczpQb3J0VHlwZTIxMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjExIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMTEiIGJpbmRpbmc9InRuczpCaW5kaW5nMjExIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIxMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIxMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIxMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjEyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjEyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIxMiIgbmFtZT0iSW5wdXQyMTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjEyIiBuYW1lPSJPdXRwdXQyMTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIxMiIgdHlwZT0idG5zOlBvcnRUeXBlMjEyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjEyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIxMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIxMiIgYmluZGluZz0idG5zOkJpbmRpbmcyMTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjEzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjEzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjEzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIxMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjEzIiBuYW1lPSJJbnB1dDIxMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMTMiIG5hbWU9Ik91dHB1dDIxMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjEzIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjEzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIxMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjEzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIxMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjE0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIxNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMTQiIG5hbWU9IklucHV0MjE0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIxNCIgbmFtZT0iT3V0cHV0MjE0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMTQiIHR5cGU9InRuczpQb3J0VHlwZTIxNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjE0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMTQiIGJpbmRpbmc9InRuczpCaW5kaW5nMjE0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIxNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIxNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIxNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjE1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjE1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIxNSIgbmFtZT0iSW5wdXQyMTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjE1IiBuYW1lPSJPdXRwdXQyMTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIxNSIgdHlwZT0idG5zOlBvcnRUeXBlMjE1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjE1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIxNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIxNSIgYmluZGluZz0idG5zOkJpbmRpbmcyMTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjE2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjE2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjE2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIxNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjE2IiBuYW1lPSJJbnB1dDIxNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMTYiIG5hbWU9Ik91dHB1dDIxNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjE2IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjE2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIxNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjE2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIxNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjE3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIxNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMTciIG5hbWU9IklucHV0MjE3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIxNyIgbmFtZT0iT3V0cHV0MjE3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMTciIHR5cGU9InRuczpQb3J0VHlwZTIxNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIxNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjE3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMTciIGJpbmRpbmc9InRuczpCaW5kaW5nMjE3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIxOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIxOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIxOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjE4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjE4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIxOCIgbmFtZT0iSW5wdXQyMTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjE4IiBuYW1lPSJPdXRwdXQyMTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIxOCIgdHlwZT0idG5zOlBvcnRUeXBlMjE4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjE4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIxOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIxOCIgYmluZGluZz0idG5zOkJpbmRpbmcyMTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjE5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjE5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjE5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIxOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjE5IiBuYW1lPSJJbnB1dDIxOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMTkiIG5hbWU9Ik91dHB1dDIxOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjE5IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjE5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIxOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjE5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIxOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjIwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIyMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMjAiIG5hbWU9IklucHV0MjIwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIyMCIgbmFtZT0iT3V0cHV0MjIwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMjAiIHR5cGU9InRuczpQb3J0VHlwZTIyMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjIwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMjAiIGJpbmRpbmc9InRuczpCaW5kaW5nMjIwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIyMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIyMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIyMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjIxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjIxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIyMSIgbmFtZT0iSW5wdXQyMjEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjIxIiBuYW1lPSJPdXRwdXQyMjEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIyMSIgdHlwZT0idG5zOlBvcnRUeXBlMjIxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjIxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIyMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMjEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIyMSIgYmluZGluZz0idG5zOkJpbmRpbmcyMjEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjIyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjIyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjIyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIyMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMjIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjIyIiBuYW1lPSJJbnB1dDIyMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMjIiIG5hbWU9Ik91dHB1dDIyMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjIyIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMjIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjIyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIyMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjIyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIyMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjIzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIyMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMjMiIG5hbWU9IklucHV0MjIzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIyMyIgbmFtZT0iT3V0cHV0MjIzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMjMiIHR5cGU9InRuczpQb3J0VHlwZTIyMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjIzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMjMiIGJpbmRpbmc9InRuczpCaW5kaW5nMjIzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIyNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIyNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIyNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjI0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjI0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIyNCIgbmFtZT0iSW5wdXQyMjQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjI0IiBuYW1lPSJPdXRwdXQyMjQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIyNCIgdHlwZT0idG5zOlBvcnRUeXBlMjI0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjI0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIyNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMjQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIyNCIgYmluZGluZz0idG5zOkJpbmRpbmcyMjQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjI1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjI1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjI1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIyNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMjUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjI1IiBuYW1lPSJJbnB1dDIyNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMjUiIG5hbWU9Ik91dHB1dDIyNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjI1IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMjUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjI1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIyNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjI1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIyNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjI2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIyNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMjYiIG5hbWU9IklucHV0MjI2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIyNiIgbmFtZT0iT3V0cHV0MjI2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMjYiIHR5cGU9InRuczpQb3J0VHlwZTIyNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjI2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMjYiIGJpbmRpbmc9InRuczpCaW5kaW5nMjI2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIyNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIyNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIyNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjI3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjI3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIyNyIgbmFtZT0iSW5wdXQyMjciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjI3IiBuYW1lPSJPdXRwdXQyMjciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIyNyIgdHlwZT0idG5zOlBvcnRUeXBlMjI3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjI3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIyNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMjciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIyNyIgYmluZGluZz0idG5zOkJpbmRpbmcyMjciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjI4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjI4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjI4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIyOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMjgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjI4IiBuYW1lPSJJbnB1dDIyOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMjgiIG5hbWU9Ik91dHB1dDIyOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjI4IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMjgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjI4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIyOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjI4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIyOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjI5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIyOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMjkiIG5hbWU9IklucHV0MjI5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIyOSIgbmFtZT0iT3V0cHV0MjI5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMjkiIHR5cGU9InRuczpQb3J0VHlwZTIyOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIyOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjI5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMjkiIGJpbmRpbmc9InRuczpCaW5kaW5nMjI5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIzMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIzMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIzMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjMwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjMwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIzMCIgbmFtZT0iSW5wdXQyMzAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjMwIiBuYW1lPSJPdXRwdXQyMzAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIzMCIgdHlwZT0idG5zOlBvcnRUeXBlMjMwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjMwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIzMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMzAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIzMCIgYmluZGluZz0idG5zOkJpbmRpbmcyMzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjMxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjMxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjMxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIzMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMzEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjMxIiBuYW1lPSJJbnB1dDIzMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMzEiIG5hbWU9Ik91dHB1dDIzMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjMxIiB0eXBlPSJ0bnM6UG9ydFR5cGUyMzEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjMxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIzMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjMxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzIzMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjMyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIzMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMzIiIG5hbWU9IklucHV0MjMyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIzMiIgbmFtZT0iT3V0cHV0MjMyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMzIiIHR5cGU9InRuczpQb3J0VHlwZTIzMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMzIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjMyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMzIiIGJpbmRpbmc9InRuczpCaW5kaW5nMjMyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIzMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIzMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIzMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjMzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjMzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIzMyIgbmFtZT0iSW5wdXQyMzMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjMzIiBuYW1lPSJPdXRwdXQyMzMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIzMyIgdHlwZT0idG5zOlBvcnRUeXBlMjMzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjMzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIzMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMzMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIzMyIgYmluZGluZz0idG5zOkJpbmRpbmcyMzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjM0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjM0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjM0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIzNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMzQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjM0IiBuYW1lPSJJbnB1dDIzNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMzQiIG5hbWU9Ik91dHB1dDIzNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjM0IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMzQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjM0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIzNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjM0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIzNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjM1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIzNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMzUiIG5hbWU9IklucHV0MjM1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIzNSIgbmFtZT0iT3V0cHV0MjM1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMzUiIHR5cGU9InRuczpQb3J0VHlwZTIzNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMzUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjM1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMzUiIGJpbmRpbmc9InRuczpCaW5kaW5nMjM1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIzNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIzNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIzNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjM2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjM2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIzNiIgbmFtZT0iSW5wdXQyMzYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjM2IiBuYW1lPSJPdXRwdXQyMzYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIzNiIgdHlwZT0idG5zOlBvcnRUeXBlMjM2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjM2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIzNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMzYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIzNiIgYmluZGluZz0idG5zOkJpbmRpbmcyMzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjM3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjM3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjM3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDIzNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyMzciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjM3IiBuYW1lPSJJbnB1dDIzNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyMzciIG5hbWU9Ik91dHB1dDIzNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjM3IiB0eXBlPSJ0bnM6UG9ydFR5cGUyMzciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yMzciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjM3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTIzNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjM3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzIzNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyMzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyMzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyMzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjM4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTIzOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyMzgiIG5hbWU9IklucHV0MjM4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTIzOCIgbmFtZT0iT3V0cHV0MjM4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyMzgiIHR5cGU9InRuczpQb3J0VHlwZTIzOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjIzOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yMzgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjM4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyMzgiIGJpbmRpbmc9InRuczpCaW5kaW5nMjM4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTIzOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDIzOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTIzOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyMzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjM5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjM5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTIzOSIgbmFtZT0iSW5wdXQyMzkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjM5IiBuYW1lPSJPdXRwdXQyMzkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzIzOSIgdHlwZT0idG5zOlBvcnRUeXBlMjM5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjM5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjIzOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyMzkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDIzOSIgYmluZGluZz0idG5zOkJpbmRpbmcyMzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjQwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjQwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI0MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNDAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNDAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjQwIiBuYW1lPSJJbnB1dDI0MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNDAiIG5hbWU9Ik91dHB1dDI0MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjQwIiB0eXBlPSJ0bnM6UG9ydFR5cGUyNDAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNDAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjQwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI0MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjQwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI0MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI0MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNDEiIG5hbWU9IklucHV0MjQxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI0MSIgbmFtZT0iT3V0cHV0MjQxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNDEiIHR5cGU9InRuczpQb3J0VHlwZTI0MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNDEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjQxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNDEiIGJpbmRpbmc9InRuczpCaW5kaW5nMjQxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI0MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI0MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI0MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjQyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI0MiIgbmFtZT0iSW5wdXQyNDIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjQyIiBuYW1lPSJPdXRwdXQyNDIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI0MiIgdHlwZT0idG5zOlBvcnRUeXBlMjQyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI0MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNDIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI0MiIgYmluZGluZz0idG5zOkJpbmRpbmcyNDIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjQzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjQzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI0MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNDMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNDMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjQzIiBuYW1lPSJJbnB1dDI0MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNDMiIG5hbWU9Ik91dHB1dDI0MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjQzIiB0eXBlPSJ0bnM6UG9ydFR5cGUyNDMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNDMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjQzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI0MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjQzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI0MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI0NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNDQiIG5hbWU9IklucHV0MjQ0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI0NCIgbmFtZT0iT3V0cHV0MjQ0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNDQiIHR5cGU9InRuczpQb3J0VHlwZTI0NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNDQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjQ0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNDQiIGJpbmRpbmc9InRuczpCaW5kaW5nMjQ0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI0NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI0NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI0NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjQ1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQ1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI0NSIgbmFtZT0iSW5wdXQyNDUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjQ1IiBuYW1lPSJPdXRwdXQyNDUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI0NSIgdHlwZT0idG5zOlBvcnRUeXBlMjQ1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQ1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI0NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNDUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI0NSIgYmluZGluZz0idG5zOkJpbmRpbmcyNDUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjQ2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjQ2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI0NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNDYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNDYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjQ2IiBuYW1lPSJJbnB1dDI0NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNDYiIG5hbWU9Ik91dHB1dDI0NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjQ2IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNDYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNDYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjQ2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI0NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjQ2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI0NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI0NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNDciIG5hbWU9IklucHV0MjQ3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI0NyIgbmFtZT0iT3V0cHV0MjQ3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNDciIHR5cGU9InRuczpQb3J0VHlwZTI0NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI0NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNDciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjQ3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNDciIGJpbmRpbmc9InRuczpCaW5kaW5nMjQ3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI0OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI0OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI0OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjQ4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQ4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI0OCIgbmFtZT0iSW5wdXQyNDgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjQ4IiBuYW1lPSJPdXRwdXQyNDgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI0OCIgdHlwZT0idG5zOlBvcnRUeXBlMjQ4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjQ4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI0OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNDgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI0OCIgYmluZGluZz0idG5zOkJpbmRpbmcyNDgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjQ5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjQ5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI0OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNDkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNDkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjQ5IiBuYW1lPSJJbnB1dDI0OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNDkiIG5hbWU9Ik91dHB1dDI0OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjQ5IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNDkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNDkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjQ5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI0OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjQ5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI0OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjUwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI1MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNTAiIG5hbWU9IklucHV0MjUwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI1MCIgbmFtZT0iT3V0cHV0MjUwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNTAiIHR5cGU9InRuczpQb3J0VHlwZTI1MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjUwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNTAiIGJpbmRpbmc9InRuczpCaW5kaW5nMjUwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI1MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI1MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI1MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjUxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjUxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI1MSIgbmFtZT0iSW5wdXQyNTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjUxIiBuYW1lPSJPdXRwdXQyNTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI1MSIgdHlwZT0idG5zOlBvcnRUeXBlMjUxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjUxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI1MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI1MSIgYmluZGluZz0idG5zOkJpbmRpbmcyNTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjUyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjUyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjUyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI1MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjUyIiBuYW1lPSJJbnB1dDI1MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNTIiIG5hbWU9Ik91dHB1dDI1MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjUyIiB0eXBlPSJ0bnM6UG9ydFR5cGUyNTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjUyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI1MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjUyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI1MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjUzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI1MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNTMiIG5hbWU9IklucHV0MjUzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI1MyIgbmFtZT0iT3V0cHV0MjUzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNTMiIHR5cGU9InRuczpQb3J0VHlwZTI1MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjUzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNTMiIGJpbmRpbmc9InRuczpCaW5kaW5nMjUzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI1NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI1NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI1NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjU0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjU0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI1NCIgbmFtZT0iSW5wdXQyNTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjU0IiBuYW1lPSJPdXRwdXQyNTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI1NCIgdHlwZT0idG5zOlBvcnRUeXBlMjU0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjU0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI1NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI1NCIgYmluZGluZz0idG5zOkJpbmRpbmcyNTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjU1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjU1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjU1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI1NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjU1IiBuYW1lPSJJbnB1dDI1NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNTUiIG5hbWU9Ik91dHB1dDI1NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjU1IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjU1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI1NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjU1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI1NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjU2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI1NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNTYiIG5hbWU9IklucHV0MjU2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI1NiIgbmFtZT0iT3V0cHV0MjU2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNTYiIHR5cGU9InRuczpQb3J0VHlwZTI1NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjU2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNTYiIGJpbmRpbmc9InRuczpCaW5kaW5nMjU2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI1NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI1NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI1NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjU3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjU3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI1NyIgbmFtZT0iSW5wdXQyNTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjU3IiBuYW1lPSJPdXRwdXQyNTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI1NyIgdHlwZT0idG5zOlBvcnRUeXBlMjU3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjU3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI1NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI1NyIgYmluZGluZz0idG5zOkJpbmRpbmcyNTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjU4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjU4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjU4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI1OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjU4IiBuYW1lPSJJbnB1dDI1OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNTgiIG5hbWU9Ik91dHB1dDI1OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjU4IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjU4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI1OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjU4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI1OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjU5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI1OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNTkiIG5hbWU9IklucHV0MjU5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI1OSIgbmFtZT0iT3V0cHV0MjU5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNTkiIHR5cGU9InRuczpQb3J0VHlwZTI1OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI1OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjU5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNTkiIGJpbmRpbmc9InRuczpCaW5kaW5nMjU5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI2MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI2MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI2MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjYwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjYwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI2MCIgbmFtZT0iSW5wdXQyNjAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjYwIiBuYW1lPSJPdXRwdXQyNjAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI2MCIgdHlwZT0idG5zOlBvcnRUeXBlMjYwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjYwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI2MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNjAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI2MCIgYmluZGluZz0idG5zOkJpbmRpbmcyNjAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjYxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjYxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjYxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI2MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNjEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjYxIiBuYW1lPSJJbnB1dDI2MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNjEiIG5hbWU9Ik91dHB1dDI2MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjYxIiB0eXBlPSJ0bnM6UG9ydFR5cGUyNjEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjYxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI2MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjYxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI2MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjYyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI2MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNjIiIG5hbWU9IklucHV0MjYyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI2MiIgbmFtZT0iT3V0cHV0MjYyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNjIiIHR5cGU9InRuczpQb3J0VHlwZTI2MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjYyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNjIiIGJpbmRpbmc9InRuczpCaW5kaW5nMjYyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI2MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI2MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI2MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjYzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjYzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI2MyIgbmFtZT0iSW5wdXQyNjMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjYzIiBuYW1lPSJPdXRwdXQyNjMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI2MyIgdHlwZT0idG5zOlBvcnRUeXBlMjYzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjYzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI2MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNjMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI2MyIgYmluZGluZz0idG5zOkJpbmRpbmcyNjMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjY0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjY0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjY0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI2NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNjQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjY0IiBuYW1lPSJJbnB1dDI2NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNjQiIG5hbWU9Ik91dHB1dDI2NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjY0IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNjQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjY0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI2NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjY0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI2NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjY1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI2NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNjUiIG5hbWU9IklucHV0MjY1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI2NSIgbmFtZT0iT3V0cHV0MjY1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNjUiIHR5cGU9InRuczpQb3J0VHlwZTI2NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjY1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNjUiIGJpbmRpbmc9InRuczpCaW5kaW5nMjY1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI2NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI2NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI2NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjY2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjY2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI2NiIgbmFtZT0iSW5wdXQyNjYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjY2IiBuYW1lPSJPdXRwdXQyNjYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI2NiIgdHlwZT0idG5zOlBvcnRUeXBlMjY2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjY2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI2NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNjYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI2NiIgYmluZGluZz0idG5zOkJpbmRpbmcyNjYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjY3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjY3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjY3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI2NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNjciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjY3IiBuYW1lPSJJbnB1dDI2NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNjciIG5hbWU9Ik91dHB1dDI2NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjY3IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNjciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjY3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI2NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjY3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI2NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjY4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI2OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNjgiIG5hbWU9IklucHV0MjY4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI2OCIgbmFtZT0iT3V0cHV0MjY4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNjgiIHR5cGU9InRuczpQb3J0VHlwZTI2OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI2OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjY4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNjgiIGJpbmRpbmc9InRuczpCaW5kaW5nMjY4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI2OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI2OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI2OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjY5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjY5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI2OSIgbmFtZT0iSW5wdXQyNjkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjY5IiBuYW1lPSJPdXRwdXQyNjkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI2OSIgdHlwZT0idG5zOlBvcnRUeXBlMjY5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjY5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI2OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNjkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI2OSIgYmluZGluZz0idG5zOkJpbmRpbmcyNjkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjcwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjcwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjcwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI3MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNzAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNzAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjcwIiBuYW1lPSJJbnB1dDI3MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNzAiIG5hbWU9Ik91dHB1dDI3MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjcwIiB0eXBlPSJ0bnM6UG9ydFR5cGUyNzAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNzAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjcwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI3MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjcwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI3MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjcxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI3MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNzEiIG5hbWU9IklucHV0MjcxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI3MSIgbmFtZT0iT3V0cHV0MjcxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNzEiIHR5cGU9InRuczpQb3J0VHlwZTI3MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNzEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjcxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNzEiIGJpbmRpbmc9InRuczpCaW5kaW5nMjcxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI3MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI3MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI3MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjcyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjcyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI3MiIgbmFtZT0iSW5wdXQyNzIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjcyIiBuYW1lPSJPdXRwdXQyNzIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI3MiIgdHlwZT0idG5zOlBvcnRUeXBlMjcyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjcyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI3MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNzIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI3MiIgYmluZGluZz0idG5zOkJpbmRpbmcyNzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjczIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjczIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjczIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI3MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNzMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNzMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjczIiBuYW1lPSJJbnB1dDI3MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNzMiIG5hbWU9Ik91dHB1dDI3MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjczIiB0eXBlPSJ0bnM6UG9ydFR5cGUyNzMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNzMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjczIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI3MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjczIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI3MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mjc0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI3NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNzQiIG5hbWU9IklucHV0Mjc0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI3NCIgbmFtZT0iT3V0cHV0Mjc0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNzQiIHR5cGU9InRuczpQb3J0VHlwZTI3NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNzQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjc0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNzQiIGJpbmRpbmc9InRuczpCaW5kaW5nMjc0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI3NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI3NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI3NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjc1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjc1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI3NSIgbmFtZT0iSW5wdXQyNzUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjc1IiBuYW1lPSJPdXRwdXQyNzUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI3NSIgdHlwZT0idG5zOlBvcnRUeXBlMjc1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjc1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI3NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNzUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI3NSIgYmluZGluZz0idG5zOkJpbmRpbmcyNzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjc2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mjc2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjc2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI3NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNzYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNzYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjc2IiBuYW1lPSJJbnB1dDI3NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNzYiIG5hbWU9Ik91dHB1dDI3NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjc2IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNzYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNzYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjc2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI3NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mjc2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI3NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyNzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyNzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyNzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mjc3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI3NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyNzciIG5hbWU9IklucHV0Mjc3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI3NyIgbmFtZT0iT3V0cHV0Mjc3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyNzciIHR5cGU9InRuczpQb3J0VHlwZTI3NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI3NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yNzciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjc3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyNzciIGJpbmRpbmc9InRuczpCaW5kaW5nMjc3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI3OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI3OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI3OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyNzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjc4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjc4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI3OCIgbmFtZT0iSW5wdXQyNzgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjc4IiBuYW1lPSJPdXRwdXQyNzgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI3OCIgdHlwZT0idG5zOlBvcnRUeXBlMjc4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjc4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI3OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyNzgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI3OCIgYmluZGluZz0idG5zOkJpbmRpbmcyNzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjc5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mjc5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjc5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI3OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyNzkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNzkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjc5IiBuYW1lPSJJbnB1dDI3OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyNzkiIG5hbWU9Ik91dHB1dDI3OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjc5IiB0eXBlPSJ0bnM6UG9ydFR5cGUyNzkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yNzkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjc5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI3OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mjc5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI3OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyODAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyODAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyODAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjgwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI4MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyODAiIG5hbWU9IklucHV0MjgwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI4MCIgbmFtZT0iT3V0cHV0MjgwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyODAiIHR5cGU9InRuczpQb3J0VHlwZTI4MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yODAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjgwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyODAiIGJpbmRpbmc9InRuczpCaW5kaW5nMjgwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI4MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI4MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI4MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyODEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjgxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjgxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI4MSIgbmFtZT0iSW5wdXQyODEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjgxIiBuYW1lPSJPdXRwdXQyODEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI4MSIgdHlwZT0idG5zOlBvcnRUeXBlMjgxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjgxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI4MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyODEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI4MSIgYmluZGluZz0idG5zOkJpbmRpbmcyODEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjgyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjgyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjgyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI4MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyODIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjgyIiBuYW1lPSJJbnB1dDI4MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyODIiIG5hbWU9Ik91dHB1dDI4MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjgyIiB0eXBlPSJ0bnM6UG9ydFR5cGUyODIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjgyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI4MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjgyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI4MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyODMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyODMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyODMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjgzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI4MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyODMiIG5hbWU9IklucHV0MjgzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI4MyIgbmFtZT0iT3V0cHV0MjgzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyODMiIHR5cGU9InRuczpQb3J0VHlwZTI4MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yODMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjgzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyODMiIGJpbmRpbmc9InRuczpCaW5kaW5nMjgzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI4NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI4NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI4NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyODQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjg0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjg0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI4NCIgbmFtZT0iSW5wdXQyODQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjg0IiBuYW1lPSJPdXRwdXQyODQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI4NCIgdHlwZT0idG5zOlBvcnRUeXBlMjg0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjg0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI4NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyODQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI4NCIgYmluZGluZz0idG5zOkJpbmRpbmcyODQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjg1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mjg1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjg1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI4NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyODUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjg1IiBuYW1lPSJJbnB1dDI4NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyODUiIG5hbWU9Ik91dHB1dDI4NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjg1IiB0eXBlPSJ0bnM6UG9ydFR5cGUyODUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjg1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI4NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mjg1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI4NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyODYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyODYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyODYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mjg2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI4NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyODYiIG5hbWU9IklucHV0Mjg2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI4NiIgbmFtZT0iT3V0cHV0Mjg2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyODYiIHR5cGU9InRuczpQb3J0VHlwZTI4NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yODYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjg2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyODYiIGJpbmRpbmc9InRuczpCaW5kaW5nMjg2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI4NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI4NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI4NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyODciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjg3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjg3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI4NyIgbmFtZT0iSW5wdXQyODciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjg3IiBuYW1lPSJPdXRwdXQyODciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI4NyIgdHlwZT0idG5zOlBvcnRUeXBlMjg3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjg3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI4NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyODciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI4NyIgYmluZGluZz0idG5zOkJpbmRpbmcyODciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjg4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mjg4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjg4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI4OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyODgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjg4IiBuYW1lPSJJbnB1dDI4OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyODgiIG5hbWU9Ik91dHB1dDI4OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjg4IiB0eXBlPSJ0bnM6UG9ydFR5cGUyODgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yODgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjg4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI4OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mjg4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI4OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyODkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyODkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyODkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mjg5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI4OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyODkiIG5hbWU9IklucHV0Mjg5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI4OSIgbmFtZT0iT3V0cHV0Mjg5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyODkiIHR5cGU9InRuczpQb3J0VHlwZTI4OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI4OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yODkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjg5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyODkiIGJpbmRpbmc9InRuczpCaW5kaW5nMjg5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI5MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI5MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI5MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyOTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjkwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjkwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI5MCIgbmFtZT0iSW5wdXQyOTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjkwIiBuYW1lPSJPdXRwdXQyOTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI5MCIgdHlwZT0idG5zOlBvcnRUeXBlMjkwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjkwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI5MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyOTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI5MCIgYmluZGluZz0idG5zOkJpbmRpbmcyOTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjkxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MjkxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjkxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI5MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyOTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjkxIiBuYW1lPSJJbnB1dDI5MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyOTEiIG5hbWU9Ik91dHB1dDI5MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjkxIiB0eXBlPSJ0bnM6UG9ydFR5cGUyOTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjkxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI5MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MjkxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzI5MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyOTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyOTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyOTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MjkyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI5MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyOTIiIG5hbWU9IklucHV0MjkyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI5MiIgbmFtZT0iT3V0cHV0MjkyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyOTIiIHR5cGU9InRuczpQb3J0VHlwZTI5MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yOTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjkyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyOTIiIGJpbmRpbmc9InRuczpCaW5kaW5nMjkyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI5MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI5MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI5MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyOTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjkzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjkzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI5MyIgbmFtZT0iSW5wdXQyOTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjkzIiBuYW1lPSJPdXRwdXQyOTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI5MyIgdHlwZT0idG5zOlBvcnRUeXBlMjkzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjkzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI5MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyOTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI5MyIgYmluZGluZz0idG5zOkJpbmRpbmcyOTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjk0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mjk0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjk0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI5NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyOTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjk0IiBuYW1lPSJJbnB1dDI5NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyOTQiIG5hbWU9Ik91dHB1dDI5NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjk0IiB0eXBlPSJ0bnM6UG9ydFR5cGUyOTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjk0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI5NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mjk0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI5NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyOTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyOTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyOTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mjk1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI5NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyOTUiIG5hbWU9IklucHV0Mjk1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI5NSIgbmFtZT0iT3V0cHV0Mjk1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyOTUiIHR5cGU9InRuczpQb3J0VHlwZTI5NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yOTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjk1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyOTUiIGJpbmRpbmc9InRuczpCaW5kaW5nMjk1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI5NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI5NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI5NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyOTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjk2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjk2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI5NiIgbmFtZT0iSW5wdXQyOTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjk2IiBuYW1lPSJPdXRwdXQyOTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI5NiIgdHlwZT0idG5zOlBvcnRUeXBlMjk2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjk2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI5NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyOTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI5NiIgYmluZGluZz0idG5zOkJpbmRpbmcyOTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMjk3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mjk3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMjk3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDI5NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUyOTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMjk3IiBuYW1lPSJJbnB1dDI5NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UyOTciIG5hbWU9Ik91dHB1dDI5NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMjk3IiB0eXBlPSJ0bnM6UG9ydFR5cGUyOTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yOTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMjk3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTI5NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mjk3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzI5NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UyOTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQyOTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UyOTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mjk4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTI5OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UyOTgiIG5hbWU9IklucHV0Mjk4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTI5OCIgbmFtZT0iT3V0cHV0Mjk4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmcyOTgiIHR5cGU9InRuczpQb3J0VHlwZTI5OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjI5OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24yOTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMjk4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQyOTgiIGJpbmRpbmc9InRuczpCaW5kaW5nMjk4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTI5OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDI5OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTI5OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQyOTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMjk5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjk5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTI5OSIgbmFtZT0iSW5wdXQyOTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMjk5IiBuYW1lPSJPdXRwdXQyOTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzI5OSIgdHlwZT0idG5zOlBvcnRUeXBlMjk5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMjk5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjI5OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UyOTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDI5OSIgYmluZGluZz0idG5zOkJpbmRpbmcyOTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzAwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzAwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzAwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMwMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMDAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMDAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzAwIiBuYW1lPSJJbnB1dDMwMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMDAiIG5hbWU9Ik91dHB1dDMwMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzAwIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMDAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMDAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzAwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMwMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzAwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMwMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMDEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzAxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMwMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMDEiIG5hbWU9IklucHV0MzAxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMwMSIgbmFtZT0iT3V0cHV0MzAxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMDEiIHR5cGU9InRuczpQb3J0VHlwZTMwMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMDEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzAxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMDEiIGJpbmRpbmc9InRuczpCaW5kaW5nMzAxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMwMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMwMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMwMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzAyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzAyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMwMiIgbmFtZT0iSW5wdXQzMDIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzAyIiBuYW1lPSJPdXRwdXQzMDIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMwMiIgdHlwZT0idG5zOlBvcnRUeXBlMzAyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzAyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMwMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMDIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMwMiIgYmluZGluZz0idG5zOkJpbmRpbmczMDIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzAzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzAzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzAzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMwMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMDMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMDMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzAzIiBuYW1lPSJJbnB1dDMwMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMDMiIG5hbWU9Ik91dHB1dDMwMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzAzIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMDMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMDMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzAzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMwMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzAzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMwMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMDQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzA0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMwNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMDQiIG5hbWU9IklucHV0MzA0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMwNCIgbmFtZT0iT3V0cHV0MzA0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMDQiIHR5cGU9InRuczpQb3J0VHlwZTMwNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMDQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzA0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMDQiIGJpbmRpbmc9InRuczpCaW5kaW5nMzA0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMwNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMwNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMwNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzA1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzA1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMwNSIgbmFtZT0iSW5wdXQzMDUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzA1IiBuYW1lPSJPdXRwdXQzMDUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMwNSIgdHlwZT0idG5zOlBvcnRUeXBlMzA1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzA1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMwNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMDUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMwNSIgYmluZGluZz0idG5zOkJpbmRpbmczMDUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzA2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzA2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzA2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMwNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMDYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMDYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzA2IiBuYW1lPSJJbnB1dDMwNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMDYiIG5hbWU9Ik91dHB1dDMwNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzA2IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMDYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMDYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzA2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMwNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzA2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMwNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMDciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzA3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMwNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMDciIG5hbWU9IklucHV0MzA3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMwNyIgbmFtZT0iT3V0cHV0MzA3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMDciIHR5cGU9InRuczpQb3J0VHlwZTMwNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMwNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMDciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzA3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMDciIGJpbmRpbmc9InRuczpCaW5kaW5nMzA3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMwOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMwOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMwOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzA4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzA4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMwOCIgbmFtZT0iSW5wdXQzMDgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzA4IiBuYW1lPSJPdXRwdXQzMDgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMwOCIgdHlwZT0idG5zOlBvcnRUeXBlMzA4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzA4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMwOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMDgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMwOCIgYmluZGluZz0idG5zOkJpbmRpbmczMDgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzA5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzA5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzA5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMwOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMDkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMDkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzA5IiBuYW1lPSJJbnB1dDMwOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMDkiIG5hbWU9Ik91dHB1dDMwOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzA5IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMDkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMDkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzA5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMwOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzA5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMwOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzEwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMxMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMTAiIG5hbWU9IklucHV0MzEwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMxMCIgbmFtZT0iT3V0cHV0MzEwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMTAiIHR5cGU9InRuczpQb3J0VHlwZTMxMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzEwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMTAiIGJpbmRpbmc9InRuczpCaW5kaW5nMzEwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMxMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMxMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMxMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzExIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzExIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMxMSIgbmFtZT0iSW5wdXQzMTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzExIiBuYW1lPSJPdXRwdXQzMTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMxMSIgdHlwZT0idG5zOlBvcnRUeXBlMzExIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzExIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMxMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMxMSIgYmluZGluZz0idG5zOkJpbmRpbmczMTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzEyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzEyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzEyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMxMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzEyIiBuYW1lPSJJbnB1dDMxMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMTIiIG5hbWU9Ik91dHB1dDMxMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzEyIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzEyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMxMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzEyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMxMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzEzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMxMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMTMiIG5hbWU9IklucHV0MzEzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMxMyIgbmFtZT0iT3V0cHV0MzEzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMTMiIHR5cGU9InRuczpQb3J0VHlwZTMxMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzEzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMTMiIGJpbmRpbmc9InRuczpCaW5kaW5nMzEzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMxNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMxNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMxNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzE0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzE0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMxNCIgbmFtZT0iSW5wdXQzMTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzE0IiBuYW1lPSJPdXRwdXQzMTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMxNCIgdHlwZT0idG5zOlBvcnRUeXBlMzE0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzE0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMxNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMxNCIgYmluZGluZz0idG5zOkJpbmRpbmczMTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzE1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzE1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzE1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMxNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzE1IiBuYW1lPSJJbnB1dDMxNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMTUiIG5hbWU9Ik91dHB1dDMxNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzE1IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzE1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMxNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzE1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMxNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzE2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMxNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMTYiIG5hbWU9IklucHV0MzE2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMxNiIgbmFtZT0iT3V0cHV0MzE2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMTYiIHR5cGU9InRuczpQb3J0VHlwZTMxNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzE2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMTYiIGJpbmRpbmc9InRuczpCaW5kaW5nMzE2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMxNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMxNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMxNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzE3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzE3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMxNyIgbmFtZT0iSW5wdXQzMTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzE3IiBuYW1lPSJPdXRwdXQzMTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMxNyIgdHlwZT0idG5zOlBvcnRUeXBlMzE3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzE3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMxNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMxNyIgYmluZGluZz0idG5zOkJpbmRpbmczMTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzE4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzE4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzE4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMxOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzE4IiBuYW1lPSJJbnB1dDMxOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMTgiIG5hbWU9Ik91dHB1dDMxOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzE4IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzE4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMxOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzE4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMxOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzE5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMxOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMTkiIG5hbWU9IklucHV0MzE5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMxOSIgbmFtZT0iT3V0cHV0MzE5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMTkiIHR5cGU9InRuczpQb3J0VHlwZTMxOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMxOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzE5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMTkiIGJpbmRpbmc9InRuczpCaW5kaW5nMzE5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMyMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMyMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMyMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzIwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzIwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMyMCIgbmFtZT0iSW5wdXQzMjAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzIwIiBuYW1lPSJPdXRwdXQzMjAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMyMCIgdHlwZT0idG5zOlBvcnRUeXBlMzIwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzIwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMyMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMjAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMyMCIgYmluZGluZz0idG5zOkJpbmRpbmczMjAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzIxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzIxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzIxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMyMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMjEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzIxIiBuYW1lPSJJbnB1dDMyMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMjEiIG5hbWU9Ik91dHB1dDMyMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzIxIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMjEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzIxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMyMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzIxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMyMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMjIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzIyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMyMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMjIiIG5hbWU9IklucHV0MzIyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMyMiIgbmFtZT0iT3V0cHV0MzIyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMjIiIHR5cGU9InRuczpQb3J0VHlwZTMyMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMjIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzIyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMjIiIGJpbmRpbmc9InRuczpCaW5kaW5nMzIyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMyMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMyMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMyMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzIzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzIzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMyMyIgbmFtZT0iSW5wdXQzMjMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzIzIiBuYW1lPSJPdXRwdXQzMjMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMyMyIgdHlwZT0idG5zOlBvcnRUeXBlMzIzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzIzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMyMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMjMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMyMyIgYmluZGluZz0idG5zOkJpbmRpbmczMjMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzI0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzI0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzI0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMyNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMjQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzI0IiBuYW1lPSJJbnB1dDMyNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMjQiIG5hbWU9Ik91dHB1dDMyNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzI0IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMjQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzI0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMyNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzI0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMyNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMjUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzI1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMyNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMjUiIG5hbWU9IklucHV0MzI1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMyNSIgbmFtZT0iT3V0cHV0MzI1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMjUiIHR5cGU9InRuczpQb3J0VHlwZTMyNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMjUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzI1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMjUiIGJpbmRpbmc9InRuczpCaW5kaW5nMzI1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMyNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMyNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMyNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzI2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzI2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMyNiIgbmFtZT0iSW5wdXQzMjYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzI2IiBuYW1lPSJPdXRwdXQzMjYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMyNiIgdHlwZT0idG5zOlBvcnRUeXBlMzI2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzI2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMyNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMjYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMyNiIgYmluZGluZz0idG5zOkJpbmRpbmczMjYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzI3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzI3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzI3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMyNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMjciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzI3IiBuYW1lPSJJbnB1dDMyNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMjciIG5hbWU9Ik91dHB1dDMyNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzI3IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMjciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMjciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzI3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMyNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzI3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMyNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMjgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzI4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMyOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMjgiIG5hbWU9IklucHV0MzI4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMyOCIgbmFtZT0iT3V0cHV0MzI4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMjgiIHR5cGU9InRuczpQb3J0VHlwZTMyOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMyOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMjgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzI4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMjgiIGJpbmRpbmc9InRuczpCaW5kaW5nMzI4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMyOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMyOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMyOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzI5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzI5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMyOSIgbmFtZT0iSW5wdXQzMjkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzI5IiBuYW1lPSJPdXRwdXQzMjkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMyOSIgdHlwZT0idG5zOlBvcnRUeXBlMzI5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzI5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMyOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMjkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMyOSIgYmluZGluZz0idG5zOkJpbmRpbmczMjkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzMwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzMwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzMwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMzMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMzAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMzAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzMwIiBuYW1lPSJJbnB1dDMzMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMzAiIG5hbWU9Ik91dHB1dDMzMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzMwIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMzAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMzAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzMwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMzMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzMwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMzMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMzEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzMxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMzMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMzEiIG5hbWU9IklucHV0MzMxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMzMSIgbmFtZT0iT3V0cHV0MzMxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMzEiIHR5cGU9InRuczpQb3J0VHlwZTMzMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMzEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzMxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMzEiIGJpbmRpbmc9InRuczpCaW5kaW5nMzMxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMzMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMzMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMzMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzMyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzMyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMzMiIgbmFtZT0iSW5wdXQzMzIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzMyIiBuYW1lPSJPdXRwdXQzMzIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMzMiIgdHlwZT0idG5zOlBvcnRUeXBlMzMyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzMyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMzMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMzIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMzMiIgYmluZGluZz0idG5zOkJpbmRpbmczMzIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzMzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzMzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzMzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMzMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMzMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMzMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzMzIiBuYW1lPSJJbnB1dDMzMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMzMiIG5hbWU9Ik91dHB1dDMzMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzMzIiB0eXBlPSJ0bnM6UG9ydFR5cGUzMzMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMzMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzMzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMzMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzMzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzMzMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMzQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzM0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMzNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMzQiIG5hbWU9IklucHV0MzM0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMzNCIgbmFtZT0iT3V0cHV0MzM0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMzQiIHR5cGU9InRuczpQb3J0VHlwZTMzNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMzQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzM0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMzQiIGJpbmRpbmc9InRuczpCaW5kaW5nMzM0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMzNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMzNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMzNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzM1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzM1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMzNSIgbmFtZT0iSW5wdXQzMzUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzM1IiBuYW1lPSJPdXRwdXQzMzUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMzNSIgdHlwZT0idG5zOlBvcnRUeXBlMzM1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzM1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMzNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMzUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMzNSIgYmluZGluZz0idG5zOkJpbmRpbmczMzUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzM2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzM2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzM2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMzNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMzYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMzYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzM2IiBuYW1lPSJJbnB1dDMzNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMzYiIG5hbWU9Ik91dHB1dDMzNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzM2IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMzYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMzYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzM2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMzNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzM2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMzNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzMzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzMzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzMzciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzM3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTMzNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzMzciIG5hbWU9IklucHV0MzM3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTMzNyIgbmFtZT0iT3V0cHV0MzM3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczMzciIHR5cGU9InRuczpQb3J0VHlwZTMzNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjMzNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zMzciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzM3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzMzciIGJpbmRpbmc9InRuczpCaW5kaW5nMzM3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTMzOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDMzOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTMzOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzMzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzM4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzM4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTMzOCIgbmFtZT0iSW5wdXQzMzgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzM4IiBuYW1lPSJPdXRwdXQzMzgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzMzOCIgdHlwZT0idG5zOlBvcnRUeXBlMzM4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzM4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjMzOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzMzgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDMzOCIgYmluZGluZz0idG5zOkJpbmRpbmczMzgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzM5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzM5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzM5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDMzOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzMzkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMzkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzM5IiBuYW1lPSJJbnB1dDMzOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzMzkiIG5hbWU9Ik91dHB1dDMzOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzM5IiB0eXBlPSJ0bnM6UG9ydFR5cGUzMzkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zMzkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzM5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTMzOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzM5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzMzOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzQwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM0MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNDAiIG5hbWU9IklucHV0MzQwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM0MCIgbmFtZT0iT3V0cHV0MzQwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNDAiIHR5cGU9InRuczpQb3J0VHlwZTM0MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNDAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzQwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNDAiIGJpbmRpbmc9InRuczpCaW5kaW5nMzQwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM0MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM0MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM0MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzQxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM0MSIgbmFtZT0iSW5wdXQzNDEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzQxIiBuYW1lPSJPdXRwdXQzNDEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM0MSIgdHlwZT0idG5zOlBvcnRUeXBlMzQxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM0MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNDEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM0MSIgYmluZGluZz0idG5zOkJpbmRpbmczNDEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzQyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzQyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM0MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNDIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzQyIiBuYW1lPSJJbnB1dDM0MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNDIiIG5hbWU9Ik91dHB1dDM0MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzQyIiB0eXBlPSJ0bnM6UG9ydFR5cGUzNDIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzQyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM0MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzQyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM0MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzQzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM0MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNDMiIG5hbWU9IklucHV0MzQzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM0MyIgbmFtZT0iT3V0cHV0MzQzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNDMiIHR5cGU9InRuczpQb3J0VHlwZTM0MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNDMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzQzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNDMiIGJpbmRpbmc9InRuczpCaW5kaW5nMzQzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM0NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM0NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM0NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzQ0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQ0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM0NCIgbmFtZT0iSW5wdXQzNDQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzQ0IiBuYW1lPSJPdXRwdXQzNDQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM0NCIgdHlwZT0idG5zOlBvcnRUeXBlMzQ0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQ0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM0NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNDQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM0NCIgYmluZGluZz0idG5zOkJpbmRpbmczNDQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzQ1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzQ1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM0NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNDUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzQ1IiBuYW1lPSJJbnB1dDM0NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNDUiIG5hbWU9Ik91dHB1dDM0NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzQ1IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNDUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzQ1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM0NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzQ1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM0NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzQ2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM0NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNDYiIG5hbWU9IklucHV0MzQ2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM0NiIgbmFtZT0iT3V0cHV0MzQ2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNDYiIHR5cGU9InRuczpQb3J0VHlwZTM0NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNDYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzQ2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNDYiIGJpbmRpbmc9InRuczpCaW5kaW5nMzQ2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM0NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM0NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM0NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzQ3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQ3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM0NyIgbmFtZT0iSW5wdXQzNDciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzQ3IiBuYW1lPSJPdXRwdXQzNDciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM0NyIgdHlwZT0idG5zOlBvcnRUeXBlMzQ3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzQ3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM0NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNDciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM0NyIgYmluZGluZz0idG5zOkJpbmRpbmczNDciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzQ4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzQ4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM0OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNDgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzQ4IiBuYW1lPSJJbnB1dDM0OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNDgiIG5hbWU9Ik91dHB1dDM0OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzQ4IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNDgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNDgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzQ4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM0OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzQ4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM0OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzQ5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM0OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNDkiIG5hbWU9IklucHV0MzQ5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM0OSIgbmFtZT0iT3V0cHV0MzQ5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNDkiIHR5cGU9InRuczpQb3J0VHlwZTM0OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM0OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNDkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzQ5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNDkiIGJpbmRpbmc9InRuczpCaW5kaW5nMzQ5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM1MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM1MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM1MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzUwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzUwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM1MCIgbmFtZT0iSW5wdXQzNTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzUwIiBuYW1lPSJPdXRwdXQzNTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM1MCIgdHlwZT0idG5zOlBvcnRUeXBlMzUwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzUwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM1MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM1MCIgYmluZGluZz0idG5zOkJpbmRpbmczNTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzUxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzUxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzUxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM1MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzUxIiBuYW1lPSJJbnB1dDM1MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNTEiIG5hbWU9Ik91dHB1dDM1MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzUxIiB0eXBlPSJ0bnM6UG9ydFR5cGUzNTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzUxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM1MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzUxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM1MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzUyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM1MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNTIiIG5hbWU9IklucHV0MzUyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM1MiIgbmFtZT0iT3V0cHV0MzUyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNTIiIHR5cGU9InRuczpQb3J0VHlwZTM1MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzUyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNTIiIGJpbmRpbmc9InRuczpCaW5kaW5nMzUyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM1MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM1MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM1MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzUzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzUzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM1MyIgbmFtZT0iSW5wdXQzNTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzUzIiBuYW1lPSJPdXRwdXQzNTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM1MyIgdHlwZT0idG5zOlBvcnRUeXBlMzUzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzUzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM1MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM1MyIgYmluZGluZz0idG5zOkJpbmRpbmczNTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzU0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzU0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzU0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM1NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzU0IiBuYW1lPSJJbnB1dDM1NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNTQiIG5hbWU9Ik91dHB1dDM1NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzU0IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzU0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM1NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzU0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM1NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzU1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM1NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNTUiIG5hbWU9IklucHV0MzU1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM1NSIgbmFtZT0iT3V0cHV0MzU1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNTUiIHR5cGU9InRuczpQb3J0VHlwZTM1NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzU1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNTUiIGJpbmRpbmc9InRuczpCaW5kaW5nMzU1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM1NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM1NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM1NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzU2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzU2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM1NiIgbmFtZT0iSW5wdXQzNTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzU2IiBuYW1lPSJPdXRwdXQzNTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM1NiIgdHlwZT0idG5zOlBvcnRUeXBlMzU2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzU2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM1NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM1NiIgYmluZGluZz0idG5zOkJpbmRpbmczNTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzU3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzU3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzU3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM1NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzU3IiBuYW1lPSJJbnB1dDM1NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNTciIG5hbWU9Ik91dHB1dDM1NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzU3IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzU3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM1NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzU3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM1NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzU4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM1OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNTgiIG5hbWU9IklucHV0MzU4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM1OCIgbmFtZT0iT3V0cHV0MzU4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNTgiIHR5cGU9InRuczpQb3J0VHlwZTM1OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM1OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzU4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNTgiIGJpbmRpbmc9InRuczpCaW5kaW5nMzU4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM1OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM1OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM1OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzU5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzU5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM1OSIgbmFtZT0iSW5wdXQzNTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzU5IiBuYW1lPSJPdXRwdXQzNTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM1OSIgdHlwZT0idG5zOlBvcnRUeXBlMzU5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzU5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM1OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM1OSIgYmluZGluZz0idG5zOkJpbmRpbmczNTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzYwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzYwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzYwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM2MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNjAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzYwIiBuYW1lPSJJbnB1dDM2MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNjAiIG5hbWU9Ik91dHB1dDM2MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzYwIiB0eXBlPSJ0bnM6UG9ydFR5cGUzNjAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzYwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM2MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzYwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM2MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzYxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM2MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNjEiIG5hbWU9IklucHV0MzYxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM2MSIgbmFtZT0iT3V0cHV0MzYxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNjEiIHR5cGU9InRuczpQb3J0VHlwZTM2MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzYxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNjEiIGJpbmRpbmc9InRuczpCaW5kaW5nMzYxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM2MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM2MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM2MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzYyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzYyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM2MiIgbmFtZT0iSW5wdXQzNjIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzYyIiBuYW1lPSJPdXRwdXQzNjIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM2MiIgdHlwZT0idG5zOlBvcnRUeXBlMzYyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzYyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM2MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNjIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM2MiIgYmluZGluZz0idG5zOkJpbmRpbmczNjIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzYzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzYzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzYzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM2MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNjMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzYzIiBuYW1lPSJJbnB1dDM2MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNjMiIG5hbWU9Ik91dHB1dDM2MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzYzIiB0eXBlPSJ0bnM6UG9ydFR5cGUzNjMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzYzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM2MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzYzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM2MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzY0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM2NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNjQiIG5hbWU9IklucHV0MzY0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM2NCIgbmFtZT0iT3V0cHV0MzY0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNjQiIHR5cGU9InRuczpQb3J0VHlwZTM2NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzY0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNjQiIGJpbmRpbmc9InRuczpCaW5kaW5nMzY0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM2NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM2NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM2NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzY1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzY1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM2NSIgbmFtZT0iSW5wdXQzNjUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzY1IiBuYW1lPSJPdXRwdXQzNjUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM2NSIgdHlwZT0idG5zOlBvcnRUeXBlMzY1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzY1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM2NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNjUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM2NSIgYmluZGluZz0idG5zOkJpbmRpbmczNjUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzY2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzY2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzY2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM2NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNjYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzY2IiBuYW1lPSJJbnB1dDM2NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNjYiIG5hbWU9Ik91dHB1dDM2NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzY2IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNjYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzY2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM2NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzY2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM2NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzY3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM2NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNjciIG5hbWU9IklucHV0MzY3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM2NyIgbmFtZT0iT3V0cHV0MzY3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNjciIHR5cGU9InRuczpQb3J0VHlwZTM2NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM2NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzY3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNjciIGJpbmRpbmc9InRuczpCaW5kaW5nMzY3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM2OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM2OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM2OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzY4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzY4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM2OCIgbmFtZT0iSW5wdXQzNjgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzY4IiBuYW1lPSJPdXRwdXQzNjgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM2OCIgdHlwZT0idG5zOlBvcnRUeXBlMzY4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzY4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM2OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNjgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM2OCIgYmluZGluZz0idG5zOkJpbmRpbmczNjgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzY5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzY5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzY5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM2OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNjkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzY5IiBuYW1lPSJJbnB1dDM2OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNjkiIG5hbWU9Ik91dHB1dDM2OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzY5IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNjkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzY5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM2OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzY5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM2OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzcwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM3MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNzAiIG5hbWU9IklucHV0MzcwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM3MCIgbmFtZT0iT3V0cHV0MzcwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNzAiIHR5cGU9InRuczpQb3J0VHlwZTM3MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNzAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzcwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNzAiIGJpbmRpbmc9InRuczpCaW5kaW5nMzcwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM3MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM3MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM3MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzcxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzcxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM3MSIgbmFtZT0iSW5wdXQzNzEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzcxIiBuYW1lPSJPdXRwdXQzNzEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM3MSIgdHlwZT0idG5zOlBvcnRUeXBlMzcxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzcxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM3MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNzEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM3MSIgYmluZGluZz0idG5zOkJpbmRpbmczNzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzcyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzcyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzcyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM3MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNzIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzcyIiBuYW1lPSJJbnB1dDM3MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNzIiIG5hbWU9Ik91dHB1dDM3MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzcyIiB0eXBlPSJ0bnM6UG9ydFR5cGUzNzIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzcyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM3MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzcyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM3MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzczIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM3MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNzMiIG5hbWU9IklucHV0MzczIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM3MyIgbmFtZT0iT3V0cHV0MzczIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNzMiIHR5cGU9InRuczpQb3J0VHlwZTM3MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNzMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzczIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNzMiIGJpbmRpbmc9InRuczpCaW5kaW5nMzczIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM3NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM3NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM3NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzc0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzc0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM3NCIgbmFtZT0iSW5wdXQzNzQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzc0IiBuYW1lPSJPdXRwdXQzNzQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM3NCIgdHlwZT0idG5zOlBvcnRUeXBlMzc0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzc0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM3NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNzQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM3NCIgYmluZGluZz0idG5zOkJpbmRpbmczNzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzc1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mzc1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzc1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM3NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNzUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzc1IiBuYW1lPSJJbnB1dDM3NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNzUiIG5hbWU9Ik91dHB1dDM3NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzc1IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNzUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzc1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM3NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mzc1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM3NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mzc2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM3NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNzYiIG5hbWU9IklucHV0Mzc2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM3NiIgbmFtZT0iT3V0cHV0Mzc2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNzYiIHR5cGU9InRuczpQb3J0VHlwZTM3NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNzYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzc2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNzYiIGJpbmRpbmc9InRuczpCaW5kaW5nMzc2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM3NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM3NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM3NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzNzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzc3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzc3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM3NyIgbmFtZT0iSW5wdXQzNzciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzc3IiBuYW1lPSJPdXRwdXQzNzciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM3NyIgdHlwZT0idG5zOlBvcnRUeXBlMzc3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzc3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM3NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzNzciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM3NyIgYmluZGluZz0idG5zOkJpbmRpbmczNzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzc4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mzc4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzc4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM3OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzNzgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzc4IiBuYW1lPSJJbnB1dDM3OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzNzgiIG5hbWU9Ik91dHB1dDM3OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzc4IiB0eXBlPSJ0bnM6UG9ydFR5cGUzNzgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zNzgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzc4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM3OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mzc4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM3OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzNzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzNzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzNzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mzc5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM3OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzNzkiIG5hbWU9IklucHV0Mzc5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM3OSIgbmFtZT0iT3V0cHV0Mzc5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczNzkiIHR5cGU9InRuczpQb3J0VHlwZTM3OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM3OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zNzkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzc5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzNzkiIGJpbmRpbmc9InRuczpCaW5kaW5nMzc5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM4MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM4MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM4MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzODAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzgwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzgwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM4MCIgbmFtZT0iSW5wdXQzODAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzgwIiBuYW1lPSJPdXRwdXQzODAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM4MCIgdHlwZT0idG5zOlBvcnRUeXBlMzgwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzgwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM4MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzODAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM4MCIgYmluZGluZz0idG5zOkJpbmRpbmczODAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzgxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzgxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzgxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM4MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzODEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzgxIiBuYW1lPSJJbnB1dDM4MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzODEiIG5hbWU9Ik91dHB1dDM4MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzgxIiB0eXBlPSJ0bnM6UG9ydFR5cGUzODEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzgxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM4MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzgxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM4MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzODIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzODIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzODIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzgyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM4MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzODIiIG5hbWU9IklucHV0MzgyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM4MiIgbmFtZT0iT3V0cHV0MzgyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczODIiIHR5cGU9InRuczpQb3J0VHlwZTM4MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zODIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzgyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzODIiIGJpbmRpbmc9InRuczpCaW5kaW5nMzgyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM4MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM4MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM4MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzODMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzgzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzgzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM4MyIgbmFtZT0iSW5wdXQzODMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzgzIiBuYW1lPSJPdXRwdXQzODMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM4MyIgdHlwZT0idG5zOlBvcnRUeXBlMzgzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzgzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM4MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzODMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM4MyIgYmluZGluZz0idG5zOkJpbmRpbmczODMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzg0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mzg0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzg0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM4NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzODQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzg0IiBuYW1lPSJJbnB1dDM4NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzODQiIG5hbWU9Ik91dHB1dDM4NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzg0IiB0eXBlPSJ0bnM6UG9ydFR5cGUzODQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzg0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM4NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mzg0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM4NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzODUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzODUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzODUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mzg1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM4NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzODUiIG5hbWU9IklucHV0Mzg1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM4NSIgbmFtZT0iT3V0cHV0Mzg1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczODUiIHR5cGU9InRuczpQb3J0VHlwZTM4NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zODUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzg1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzODUiIGJpbmRpbmc9InRuczpCaW5kaW5nMzg1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM4NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM4NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM4NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzODYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzg2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzg2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM4NiIgbmFtZT0iSW5wdXQzODYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzg2IiBuYW1lPSJPdXRwdXQzODYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM4NiIgdHlwZT0idG5zOlBvcnRUeXBlMzg2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzg2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM4NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzODYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM4NiIgYmluZGluZz0idG5zOkJpbmRpbmczODYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzg3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mzg3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzg3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM4NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzODciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzg3IiBuYW1lPSJJbnB1dDM4NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzODciIG5hbWU9Ik91dHB1dDM4NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzg3IiB0eXBlPSJ0bnM6UG9ydFR5cGUzODciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zODciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzg3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM4NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mzg3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM4NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzODgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzODgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzODgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mzg4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM4OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzODgiIG5hbWU9IklucHV0Mzg4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM4OCIgbmFtZT0iT3V0cHV0Mzg4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczODgiIHR5cGU9InRuczpQb3J0VHlwZTM4OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM4OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zODgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzg4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzODgiIGJpbmRpbmc9InRuczpCaW5kaW5nMzg4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM4OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM4OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM4OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzODkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzg5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzg5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM4OSIgbmFtZT0iSW5wdXQzODkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzg5IiBuYW1lPSJPdXRwdXQzODkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM4OSIgdHlwZT0idG5zOlBvcnRUeXBlMzg5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzg5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM4OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzODkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM4OSIgYmluZGluZz0idG5zOkJpbmRpbmczODkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzkwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzkwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzkwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM5MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzOTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzkwIiBuYW1lPSJJbnB1dDM5MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzOTAiIG5hbWU9Ik91dHB1dDM5MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzkwIiB0eXBlPSJ0bnM6UG9ydFR5cGUzOTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzkwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM5MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzkwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM5MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzOTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzOTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzOTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50MzkxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM5MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzOTEiIG5hbWU9IklucHV0MzkxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM5MSIgbmFtZT0iT3V0cHV0MzkxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczOTEiIHR5cGU9InRuczpQb3J0VHlwZTM5MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zOTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzkxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzOTEiIGJpbmRpbmc9InRuczpCaW5kaW5nMzkxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM5MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM5MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM5MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzOTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzkyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzkyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM5MiIgbmFtZT0iSW5wdXQzOTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzkyIiBuYW1lPSJPdXRwdXQzOTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM5MiIgdHlwZT0idG5zOlBvcnRUeXBlMzkyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzkyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM5MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzOTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM5MiIgYmluZGluZz0idG5zOkJpbmRpbmczOTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzkzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50MzkzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzkzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM5MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzOTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzkzIiBuYW1lPSJJbnB1dDM5MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzOTMiIG5hbWU9Ik91dHB1dDM5MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzkzIiB0eXBlPSJ0bnM6UG9ydFR5cGUzOTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzkzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM5MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0MzkzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzM5MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzOTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzOTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzOTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mzk0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM5NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzOTQiIG5hbWU9IklucHV0Mzk0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM5NCIgbmFtZT0iT3V0cHV0Mzk0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczOTQiIHR5cGU9InRuczpQb3J0VHlwZTM5NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zOTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzk0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzOTQiIGJpbmRpbmc9InRuczpCaW5kaW5nMzk0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM5NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM5NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM5NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzOTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzk1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzk1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM5NSIgbmFtZT0iSW5wdXQzOTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzk1IiBuYW1lPSJPdXRwdXQzOTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM5NSIgdHlwZT0idG5zOlBvcnRUeXBlMzk1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzk1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM5NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzOTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM5NSIgYmluZGluZz0idG5zOkJpbmRpbmczOTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzk2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mzk2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzk2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM5NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzOTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzk2IiBuYW1lPSJJbnB1dDM5NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzOTYiIG5hbWU9Ik91dHB1dDM5NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzk2IiB0eXBlPSJ0bnM6UG9ydFR5cGUzOTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzk2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM5NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mzk2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM5NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2UzOTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQzOTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2UzOTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50Mzk3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTM5NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2UzOTciIG5hbWU9IklucHV0Mzk3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTM5NyIgbmFtZT0iT3V0cHV0Mzk3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmczOTciIHR5cGU9InRuczpQb3J0VHlwZTM5NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjM5NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb24zOTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlMzk3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQzOTciIGJpbmRpbmc9InRuczpCaW5kaW5nMzk3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTM5OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDM5OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTM5OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQzOTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlMzk4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzk4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTM5OCIgbmFtZT0iSW5wdXQzOTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlMzk4IiBuYW1lPSJPdXRwdXQzOTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzM5OCIgdHlwZT0idG5zOlBvcnRUeXBlMzk4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMzk4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjM5OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2UzOTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDM5OCIgYmluZGluZz0idG5zOkJpbmRpbmczOTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlMzk5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50Mzk5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlMzk5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDM5OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUzOTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlMzk5IiBuYW1lPSJJbnB1dDM5OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2UzOTkiIG5hbWU9Ik91dHB1dDM5OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nMzk5IiB0eXBlPSJ0bnM6UG9ydFR5cGUzOTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24zOTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uMzk5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTM5OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0Mzk5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzM5OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MDAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDAwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQwMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MDAiIG5hbWU9IklucHV0NDAwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQwMCIgbmFtZT0iT3V0cHV0NDAwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MDAiIHR5cGU9InRuczpQb3J0VHlwZTQwMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MDAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDAwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MDAiIGJpbmRpbmc9InRuczpCaW5kaW5nNDAwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQwMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQwMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQwMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MDEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDAxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDAxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQwMSIgbmFtZT0iSW5wdXQ0MDEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDAxIiBuYW1lPSJPdXRwdXQ0MDEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQwMSIgdHlwZT0idG5zOlBvcnRUeXBlNDAxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDAxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQwMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MDEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQwMSIgYmluZGluZz0idG5zOkJpbmRpbmc0MDEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDAyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDAyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDAyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQwMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MDIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDAyIiBuYW1lPSJJbnB1dDQwMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MDIiIG5hbWU9Ik91dHB1dDQwMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDAyIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MDIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDAyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQwMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDAyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQwMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MDMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDAzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQwMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MDMiIG5hbWU9IklucHV0NDAzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQwMyIgbmFtZT0iT3V0cHV0NDAzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MDMiIHR5cGU9InRuczpQb3J0VHlwZTQwMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MDMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDAzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MDMiIGJpbmRpbmc9InRuczpCaW5kaW5nNDAzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQwNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQwNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQwNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MDQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDA0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDA0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQwNCIgbmFtZT0iSW5wdXQ0MDQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDA0IiBuYW1lPSJPdXRwdXQ0MDQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQwNCIgdHlwZT0idG5zOlBvcnRUeXBlNDA0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDA0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQwNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MDQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQwNCIgYmluZGluZz0idG5zOkJpbmRpbmc0MDQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDA1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDA1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDA1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQwNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MDUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDA1IiBuYW1lPSJJbnB1dDQwNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MDUiIG5hbWU9Ik91dHB1dDQwNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDA1IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MDUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDA1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQwNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDA1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQwNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MDYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDA2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQwNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MDYiIG5hbWU9IklucHV0NDA2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQwNiIgbmFtZT0iT3V0cHV0NDA2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MDYiIHR5cGU9InRuczpQb3J0VHlwZTQwNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MDYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDA2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MDYiIGJpbmRpbmc9InRuczpCaW5kaW5nNDA2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQwNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQwNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQwNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MDciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDA3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDA3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQwNyIgbmFtZT0iSW5wdXQ0MDciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDA3IiBuYW1lPSJPdXRwdXQ0MDciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQwNyIgdHlwZT0idG5zOlBvcnRUeXBlNDA3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDA3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQwNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MDciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQwNyIgYmluZGluZz0idG5zOkJpbmRpbmc0MDciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDA4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDA4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDA4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQwOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MDgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDA4IiBuYW1lPSJJbnB1dDQwOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MDgiIG5hbWU9Ik91dHB1dDQwOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDA4IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MDgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MDgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDA4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQwOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDA4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQwOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MDkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDA5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQwOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MDkiIG5hbWU9IklucHV0NDA5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQwOSIgbmFtZT0iT3V0cHV0NDA5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MDkiIHR5cGU9InRuczpQb3J0VHlwZTQwOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQwOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MDkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDA5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MDkiIGJpbmRpbmc9InRuczpCaW5kaW5nNDA5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQxMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQxMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQxMCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDEwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDEwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQxMCIgbmFtZT0iSW5wdXQ0MTAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDEwIiBuYW1lPSJPdXRwdXQ0MTAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQxMCIgdHlwZT0idG5zOlBvcnRUeXBlNDEwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDEwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQxMCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MTAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQxMCIgYmluZGluZz0idG5zOkJpbmRpbmc0MTAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDExIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDExIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDExIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQxMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MTEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDExIiBuYW1lPSJJbnB1dDQxMSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MTEiIG5hbWU9Ik91dHB1dDQxMSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDExIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MTEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDExIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQxMSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDExIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQxMSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MTIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDEyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQxMiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxMiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MTIiIG5hbWU9IklucHV0NDEyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQxMiIgbmFtZT0iT3V0cHV0NDEyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MTIiIHR5cGU9InRuczpQb3J0VHlwZTQxMiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxMiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MTIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDEyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MTIiIGJpbmRpbmc9InRuczpCaW5kaW5nNDEyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQxMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQxMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQxMyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDEzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDEzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQxMyIgbmFtZT0iSW5wdXQ0MTMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDEzIiBuYW1lPSJPdXRwdXQ0MTMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQxMyIgdHlwZT0idG5zOlBvcnRUeXBlNDEzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDEzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQxMyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MTMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQxMyIgYmluZGluZz0idG5zOkJpbmRpbmc0MTMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDE0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDE0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDE0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQxNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MTQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDE0IiBuYW1lPSJJbnB1dDQxNCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MTQiIG5hbWU9Ik91dHB1dDQxNCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDE0IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MTQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDE0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQxNCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDE0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQxNCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MTUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDE1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQxNSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxNSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MTUiIG5hbWU9IklucHV0NDE1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQxNSIgbmFtZT0iT3V0cHV0NDE1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MTUiIHR5cGU9InRuczpQb3J0VHlwZTQxNSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxNSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MTUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDE1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MTUiIGJpbmRpbmc9InRuczpCaW5kaW5nNDE1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQxNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQxNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQxNiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDE2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDE2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQxNiIgbmFtZT0iSW5wdXQ0MTYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDE2IiBuYW1lPSJPdXRwdXQ0MTYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQxNiIgdHlwZT0idG5zOlBvcnRUeXBlNDE2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDE2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQxNiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MTYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQxNiIgYmluZGluZz0idG5zOkJpbmRpbmc0MTYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDE3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDE3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDE3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQxNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MTciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDE3IiBuYW1lPSJJbnB1dDQxNyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MTciIG5hbWU9Ik91dHB1dDQxNyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDE3IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MTciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MTciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDE3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQxNyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDE3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQxNyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MTgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDE4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQxOCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxOCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MTgiIG5hbWU9IklucHV0NDE4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQxOCIgbmFtZT0iT3V0cHV0NDE4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MTgiIHR5cGU9InRuczpQb3J0VHlwZTQxOCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQxOCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MTgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDE4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MTgiIGJpbmRpbmc9InRuczpCaW5kaW5nNDE4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQxOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQxOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQxOSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDE5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDE5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQxOSIgbmFtZT0iSW5wdXQ0MTkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDE5IiBuYW1lPSJPdXRwdXQ0MTkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQxOSIgdHlwZT0idG5zOlBvcnRUeXBlNDE5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDE5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQxOSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MTkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQxOSIgYmluZGluZz0idG5zOkJpbmRpbmc0MTkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDIwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDIwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDIwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQyMCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MjAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MjAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDIwIiBuYW1lPSJJbnB1dDQyMCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MjAiIG5hbWU9Ik91dHB1dDQyMCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDIwIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MjAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MjAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDIwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQyMCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDIwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQyMCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MjEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDIxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQyMSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MjEiIG5hbWU9IklucHV0NDIxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQyMSIgbmFtZT0iT3V0cHV0NDIxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MjEiIHR5cGU9InRuczpQb3J0VHlwZTQyMSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyMSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MjEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDIxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MjEiIGJpbmRpbmc9InRuczpCaW5kaW5nNDIxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQyMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQyMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQyMiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MjIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDIyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDIyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQyMiIgbmFtZT0iSW5wdXQ0MjIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDIyIiBuYW1lPSJPdXRwdXQ0MjIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQyMiIgdHlwZT0idG5zOlBvcnRUeXBlNDIyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDIyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQyMiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MjIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQyMiIgYmluZGluZz0idG5zOkJpbmRpbmc0MjIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDIzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDIzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDIzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQyMyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MjMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MjMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDIzIiBuYW1lPSJJbnB1dDQyMyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MjMiIG5hbWU9Ik91dHB1dDQyMyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDIzIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MjMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MjMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDIzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQyMyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDIzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQyMyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MjQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDI0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQyNCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyNCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MjQiIG5hbWU9IklucHV0NDI0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQyNCIgbmFtZT0iT3V0cHV0NDI0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MjQiIHR5cGU9InRuczpQb3J0VHlwZTQyNCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyNCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MjQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDI0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MjQiIGJpbmRpbmc9InRuczpCaW5kaW5nNDI0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQyNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQyNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQyNSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MjUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDI1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDI1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQyNSIgbmFtZT0iSW5wdXQ0MjUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDI1IiBuYW1lPSJPdXRwdXQ0MjUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQyNSIgdHlwZT0idG5zOlBvcnRUeXBlNDI1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDI1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQyNSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MjUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQyNSIgYmluZGluZz0idG5zOkJpbmRpbmc0MjUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDI2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDI2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDI2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQyNiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MjYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MjYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDI2IiBuYW1lPSJJbnB1dDQyNiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MjYiIG5hbWU9Ik91dHB1dDQyNiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDI2IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MjYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MjYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDI2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQyNiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDI2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQyNiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MjciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDI3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQyNyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyNyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MjciIG5hbWU9IklucHV0NDI3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQyNyIgbmFtZT0iT3V0cHV0NDI3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MjciIHR5cGU9InRuczpQb3J0VHlwZTQyNyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQyNyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MjciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDI3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MjciIGJpbmRpbmc9InRuczpCaW5kaW5nNDI3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQyOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQyOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQyOCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MjgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDI4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDI4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQyOCIgbmFtZT0iSW5wdXQ0MjgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDI4IiBuYW1lPSJPdXRwdXQ0MjgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQyOCIgdHlwZT0idG5zOlBvcnRUeXBlNDI4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDI4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQyOCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MjgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQyOCIgYmluZGluZz0idG5zOkJpbmRpbmc0MjgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDI5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDI5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDI5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQyOSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MjkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MjkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDI5IiBuYW1lPSJJbnB1dDQyOSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MjkiIG5hbWU9Ik91dHB1dDQyOSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDI5IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MjkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MjkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDI5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQyOSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDI5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQyOSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MzAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDMwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQzMCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzMCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MzAiIG5hbWU9IklucHV0NDMwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQzMCIgbmFtZT0iT3V0cHV0NDMwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MzAiIHR5cGU9InRuczpQb3J0VHlwZTQzMCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzMCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MzAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDMwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MzAiIGJpbmRpbmc9InRuczpCaW5kaW5nNDMwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQzMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQzMSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQzMSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MzEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDMxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDMxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQzMSIgbmFtZT0iSW5wdXQ0MzEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDMxIiBuYW1lPSJPdXRwdXQ0MzEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQzMSIgdHlwZT0idG5zOlBvcnRUeXBlNDMxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDMxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQzMSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MzEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQzMSIgYmluZGluZz0idG5zOkJpbmRpbmc0MzEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDMyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDMyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDMyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQzMiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MzIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDMyIiBuYW1lPSJJbnB1dDQzMiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MzIiIG5hbWU9Ik91dHB1dDQzMiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDMyIiB0eXBlPSJ0bnM6UG9ydFR5cGU0MzIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDMyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQzMiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDMyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQzMiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MzMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDMzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQzMyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzMyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MzMiIG5hbWU9IklucHV0NDMzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQzMyIgbmFtZT0iT3V0cHV0NDMzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MzMiIHR5cGU9InRuczpQb3J0VHlwZTQzMyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzMyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MzMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDMzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MzMiIGJpbmRpbmc9InRuczpCaW5kaW5nNDMzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQzNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQzNCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQzNCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MzQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDM0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDM0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQzNCIgbmFtZT0iSW5wdXQ0MzQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDM0IiBuYW1lPSJPdXRwdXQ0MzQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQzNCIgdHlwZT0idG5zOlBvcnRUeXBlNDM0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDM0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQzNCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MzQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQzNCIgYmluZGluZz0idG5zOkJpbmRpbmc0MzQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDM1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDM1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDM1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQzNSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MzUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDM1IiBuYW1lPSJJbnB1dDQzNSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MzUiIG5hbWU9Ik91dHB1dDQzNSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDM1IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MzUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDM1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQzNSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDM1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQzNSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MzYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDM2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQzNiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzNiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MzYiIG5hbWU9IklucHV0NDM2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQzNiIgbmFtZT0iT3V0cHV0NDM2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MzYiIHR5cGU9InRuczpQb3J0VHlwZTQzNiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzNiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MzYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDM2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MzYiIGJpbmRpbmc9InRuczpCaW5kaW5nNDM2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQzNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQzNyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQzNyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0MzciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDM3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDM3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQzNyIgbmFtZT0iSW5wdXQ0MzciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDM3IiBuYW1lPSJPdXRwdXQ0MzciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQzNyIgdHlwZT0idG5zOlBvcnRUeXBlNDM3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDM3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQzNyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0MzciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQzNyIgYmluZGluZz0idG5zOkJpbmRpbmc0MzciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDM4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDM4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDM4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQzOCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0MzgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDM4IiBuYW1lPSJJbnB1dDQzOCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0MzgiIG5hbWU9Ik91dHB1dDQzOCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDM4IiB0eXBlPSJ0bnM6UG9ydFR5cGU0MzgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240MzgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDM4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQzOCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDM4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQzOCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0MzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0MzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0MzkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDM5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQzOSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzOSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0MzkiIG5hbWU9IklucHV0NDM5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQzOSIgbmFtZT0iT3V0cHV0NDM5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0MzkiIHR5cGU9InRuczpQb3J0VHlwZTQzOSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQzOSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240MzkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDM5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0MzkiIGJpbmRpbmc9InRuczpCaW5kaW5nNDM5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ0MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ0MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ0MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NDAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDQwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ0MCIgbmFtZT0iSW5wdXQ0NDAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDQwIiBuYW1lPSJPdXRwdXQ0NDAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ0MCIgdHlwZT0idG5zOlBvcnRUeXBlNDQwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ0MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NDAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ0MCIgYmluZGluZz0idG5zOkJpbmRpbmc0NDAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDQxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDQxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDQxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ0MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NDEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDQxIiBuYW1lPSJJbnB1dDQ0MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NDEiIG5hbWU9Ik91dHB1dDQ0MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDQxIiB0eXBlPSJ0bnM6UG9ydFR5cGU0NDEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDQxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ0MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDQxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ0MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NDIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NDIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDQyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ0MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NDIiIG5hbWU9IklucHV0NDQyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ0MiIgbmFtZT0iT3V0cHV0NDQyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NDIiIHR5cGU9InRuczpQb3J0VHlwZTQ0MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NDIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDQyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NDIiIGJpbmRpbmc9InRuczpCaW5kaW5nNDQyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ0MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ0MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ0MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NDMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDQzIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQzIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ0MyIgbmFtZT0iSW5wdXQ0NDMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDQzIiBuYW1lPSJPdXRwdXQ0NDMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ0MyIgdHlwZT0idG5zOlBvcnRUeXBlNDQzIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQzIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ0MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NDMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ0MyIgYmluZGluZz0idG5zOkJpbmRpbmc0NDMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDQ0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDQ0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDQ0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ0NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NDQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDQ0IiBuYW1lPSJJbnB1dDQ0NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NDQiIG5hbWU9Ik91dHB1dDQ0NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDQ0IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NDQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDQ0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ0NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDQ0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ0NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NDUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NDUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDQ1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ0NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NDUiIG5hbWU9IklucHV0NDQ1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ0NSIgbmFtZT0iT3V0cHV0NDQ1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NDUiIHR5cGU9InRuczpQb3J0VHlwZTQ0NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NDUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDQ1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NDUiIGJpbmRpbmc9InRuczpCaW5kaW5nNDQ1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ0NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ0NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ0NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NDYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDQ2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQ2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ0NiIgbmFtZT0iSW5wdXQ0NDYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDQ2IiBuYW1lPSJPdXRwdXQ0NDYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ0NiIgdHlwZT0idG5zOlBvcnRUeXBlNDQ2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQ2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ0NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NDYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ0NiIgYmluZGluZz0idG5zOkJpbmRpbmc0NDYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDQ3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDQ3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDQ3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ0NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NDciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDQ3IiBuYW1lPSJJbnB1dDQ0NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NDciIG5hbWU9Ik91dHB1dDQ0NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDQ3IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NDciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NDciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDQ3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ0NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDQ3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ0NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NDgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NDgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDQ4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ0OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NDgiIG5hbWU9IklucHV0NDQ4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ0OCIgbmFtZT0iT3V0cHV0NDQ4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NDgiIHR5cGU9InRuczpQb3J0VHlwZTQ0OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ0OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NDgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDQ4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NDgiIGJpbmRpbmc9InRuczpCaW5kaW5nNDQ4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ0OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ0OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ0OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NDkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDQ5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQ5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ0OSIgbmFtZT0iSW5wdXQ0NDkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDQ5IiBuYW1lPSJPdXRwdXQ0NDkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ0OSIgdHlwZT0idG5zOlBvcnRUeXBlNDQ5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDQ5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ0OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NDkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ0OSIgYmluZGluZz0idG5zOkJpbmRpbmc0NDkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDUwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDUwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDUwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ1MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NTAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NTAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDUwIiBuYW1lPSJJbnB1dDQ1MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NTAiIG5hbWU9Ik91dHB1dDQ1MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDUwIiB0eXBlPSJ0bnM6UG9ydFR5cGU0NTAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NTAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDUwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ1MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDUwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ1MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NTEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDUxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ1MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NTEiIG5hbWU9IklucHV0NDUxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ1MSIgbmFtZT0iT3V0cHV0NDUxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NTEiIHR5cGU9InRuczpQb3J0VHlwZTQ1MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NTEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDUxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NTEiIGJpbmRpbmc9InRuczpCaW5kaW5nNDUxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ1MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ1MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ1MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NTIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDUyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDUyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ1MiIgbmFtZT0iSW5wdXQ0NTIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDUyIiBuYW1lPSJPdXRwdXQ0NTIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ1MiIgdHlwZT0idG5zOlBvcnRUeXBlNDUyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDUyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ1MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NTIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ1MiIgYmluZGluZz0idG5zOkJpbmRpbmc0NTIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDUzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDUzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDUzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ1MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NTMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NTMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDUzIiBuYW1lPSJJbnB1dDQ1MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NTMiIG5hbWU9Ik91dHB1dDQ1MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDUzIiB0eXBlPSJ0bnM6UG9ydFR5cGU0NTMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NTMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDUzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ1MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDUzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ1MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NTQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDU0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ1NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NTQiIG5hbWU9IklucHV0NDU0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ1NCIgbmFtZT0iT3V0cHV0NDU0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NTQiIHR5cGU9InRuczpQb3J0VHlwZTQ1NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NTQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDU0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NTQiIGJpbmRpbmc9InRuczpCaW5kaW5nNDU0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ1NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ1NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ1NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NTUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDU1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDU1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ1NSIgbmFtZT0iSW5wdXQ0NTUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDU1IiBuYW1lPSJPdXRwdXQ0NTUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ1NSIgdHlwZT0idG5zOlBvcnRUeXBlNDU1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDU1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ1NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NTUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ1NSIgYmluZGluZz0idG5zOkJpbmRpbmc0NTUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDU2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDU2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDU2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ1NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NTYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NTYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDU2IiBuYW1lPSJJbnB1dDQ1NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NTYiIG5hbWU9Ik91dHB1dDQ1NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDU2IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NTYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NTYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDU2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ1NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDU2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ1NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NTciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDU3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ1NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NTciIG5hbWU9IklucHV0NDU3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ1NyIgbmFtZT0iT3V0cHV0NDU3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NTciIHR5cGU9InRuczpQb3J0VHlwZTQ1NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ1NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NTciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDU3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NTciIGJpbmRpbmc9InRuczpCaW5kaW5nNDU3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ1OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ1OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ1OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NTgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDU4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDU4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ1OCIgbmFtZT0iSW5wdXQ0NTgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDU4IiBuYW1lPSJPdXRwdXQ0NTgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ1OCIgdHlwZT0idG5zOlBvcnRUeXBlNDU4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDU4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ1OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NTgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ1OCIgYmluZGluZz0idG5zOkJpbmRpbmc0NTgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDU5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDU5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDU5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ1OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NTkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NTkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDU5IiBuYW1lPSJJbnB1dDQ1OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NTkiIG5hbWU9Ik91dHB1dDQ1OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDU5IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NTkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NTkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDU5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ1OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDU5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ1OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NjAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NjAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDYwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ2MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NjAiIG5hbWU9IklucHV0NDYwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ2MCIgbmFtZT0iT3V0cHV0NDYwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NjAiIHR5cGU9InRuczpQb3J0VHlwZTQ2MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NjAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDYwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NjAiIGJpbmRpbmc9InRuczpCaW5kaW5nNDYwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ2MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ2MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ2MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NjEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDYxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDYxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ2MSIgbmFtZT0iSW5wdXQ0NjEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDYxIiBuYW1lPSJPdXRwdXQ0NjEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ2MSIgdHlwZT0idG5zOlBvcnRUeXBlNDYxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDYxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ2MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NjEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ2MSIgYmluZGluZz0idG5zOkJpbmRpbmc0NjEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDYyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDYyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDYyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ2MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NjIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDYyIiBuYW1lPSJJbnB1dDQ2MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NjIiIG5hbWU9Ik91dHB1dDQ2MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDYyIiB0eXBlPSJ0bnM6UG9ydFR5cGU0NjIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDYyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ2MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDYyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ2MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NjMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NjMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDYzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ2MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NjMiIG5hbWU9IklucHV0NDYzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ2MyIgbmFtZT0iT3V0cHV0NDYzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NjMiIHR5cGU9InRuczpQb3J0VHlwZTQ2MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NjMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDYzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NjMiIGJpbmRpbmc9InRuczpCaW5kaW5nNDYzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ2NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ2NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ2NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NjQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDY0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDY0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ2NCIgbmFtZT0iSW5wdXQ0NjQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDY0IiBuYW1lPSJPdXRwdXQ0NjQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ2NCIgdHlwZT0idG5zOlBvcnRUeXBlNDY0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDY0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ2NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NjQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ2NCIgYmluZGluZz0idG5zOkJpbmRpbmc0NjQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDY1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDY1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDY1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ2NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NjUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDY1IiBuYW1lPSJJbnB1dDQ2NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NjUiIG5hbWU9Ik91dHB1dDQ2NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDY1IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NjUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDY1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ2NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDY1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ2NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NjYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NjYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDY2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ2NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NjYiIG5hbWU9IklucHV0NDY2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ2NiIgbmFtZT0iT3V0cHV0NDY2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NjYiIHR5cGU9InRuczpQb3J0VHlwZTQ2NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NjYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDY2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NjYiIGJpbmRpbmc9InRuczpCaW5kaW5nNDY2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ2NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ2NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ2NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NjciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDY3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDY3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ2NyIgbmFtZT0iSW5wdXQ0NjciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDY3IiBuYW1lPSJPdXRwdXQ0NjciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ2NyIgdHlwZT0idG5zOlBvcnRUeXBlNDY3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDY3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ2NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NjciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ2NyIgYmluZGluZz0idG5zOkJpbmRpbmc0NjciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDY4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDY4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDY4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ2OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NjgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDY4IiBuYW1lPSJJbnB1dDQ2OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NjgiIG5hbWU9Ik91dHB1dDQ2OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDY4IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NjgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NjgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDY4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ2OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDY4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ2OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NjkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NjkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDY5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ2OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NjkiIG5hbWU9IklucHV0NDY5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ2OSIgbmFtZT0iT3V0cHV0NDY5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NjkiIHR5cGU9InRuczpQb3J0VHlwZTQ2OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ2OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NjkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDY5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NjkiIGJpbmRpbmc9InRuczpCaW5kaW5nNDY5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ3MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ3MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ3MCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NzAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDcwIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDcwIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ3MCIgbmFtZT0iSW5wdXQ0NzAiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDcwIiBuYW1lPSJPdXRwdXQ0NzAiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ3MCIgdHlwZT0idG5zOlBvcnRUeXBlNDcwIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDcwIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ3MCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NzAiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ3MCIgYmluZGluZz0idG5zOkJpbmRpbmc0NzAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDcxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDcxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDcxIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ3MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NzEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzEiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDcxIiBuYW1lPSJJbnB1dDQ3MSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NzEiIG5hbWU9Ik91dHB1dDQ3MSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDcxIiB0eXBlPSJ0bnM6UG9ydFR5cGU0NzEiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzEiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDcxIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ3MSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDcxIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ3MSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NzIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NzIiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDcyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ3MiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3MiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NzIiIG5hbWU9IklucHV0NDcyIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ3MiIgbmFtZT0iT3V0cHV0NDcyIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NzIiIHR5cGU9InRuczpQb3J0VHlwZTQ3MiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3MiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NzIiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDcyIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NzIiIGJpbmRpbmc9InRuczpCaW5kaW5nNDcyIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ3MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ3MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ3MyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NzMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDczIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDczIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ3MyIgbmFtZT0iSW5wdXQ0NzMiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDczIiBuYW1lPSJPdXRwdXQ0NzMiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ3MyIgdHlwZT0idG5zOlBvcnRUeXBlNDczIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDczIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ3MyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NzMiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ3MyIgYmluZGluZz0idG5zOkJpbmRpbmc0NzMiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDc0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDc0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDc0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ3NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NzQiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzQiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDc0IiBuYW1lPSJJbnB1dDQ3NCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NzQiIG5hbWU9Ik91dHB1dDQ3NCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDc0IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NzQiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzQiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDc0Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ3NCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDc0IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ3NCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NzUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NzUiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDc1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ3NSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3NSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NzUiIG5hbWU9IklucHV0NDc1Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ3NSIgbmFtZT0iT3V0cHV0NDc1Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NzUiIHR5cGU9InRuczpQb3J0VHlwZTQ3NSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3NSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NzUiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDc1Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NzUiIGJpbmRpbmc9InRuczpCaW5kaW5nNDc1Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ3NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ3NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ3NiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NzYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDc2Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDc2Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ3NiIgbmFtZT0iSW5wdXQ0NzYiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDc2IiBuYW1lPSJPdXRwdXQ0NzYiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ3NiIgdHlwZT0idG5zOlBvcnRUeXBlNDc2Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDc2Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ3NiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NzYiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ3NiIgYmluZGluZz0idG5zOkJpbmRpbmc0NzYiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDc3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDc3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDc3Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ3NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0NzciPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzciPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDc3IiBuYW1lPSJJbnB1dDQ3NyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0NzciIG5hbWU9Ik91dHB1dDQ3NyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDc3IiB0eXBlPSJ0bnM6UG9ydFR5cGU0NzciPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240NzciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDc3Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ3NyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDc3IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ3NyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0NzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0NzgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0NzgiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDc4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ3OCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3OCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0NzgiIG5hbWU9IklucHV0NDc4Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ3OCIgbmFtZT0iT3V0cHV0NDc4Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0NzgiIHR5cGU9InRuczpQb3J0VHlwZTQ3OCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ3OCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240NzgiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDc4Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0NzgiIGJpbmRpbmc9InRuczpCaW5kaW5nNDc4Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ3OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ3OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ3OSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0NzkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDc5Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDc5Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ3OSIgbmFtZT0iSW5wdXQ0NzkiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDc5IiBuYW1lPSJPdXRwdXQ0NzkiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ3OSIgdHlwZT0idG5zOlBvcnRUeXBlNDc5Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDc5Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ3OSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0NzkiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ3OSIgYmluZGluZz0idG5zOkJpbmRpbmc0NzkiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDgwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDgwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDgwIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ4MCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0ODAiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240ODAiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDgwIiBuYW1lPSJJbnB1dDQ4MCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0ODAiIG5hbWU9Ik91dHB1dDQ4MCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDgwIiB0eXBlPSJ0bnM6UG9ydFR5cGU0ODAiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240ODAiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDgwIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ4MCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDgwIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ4MCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0ODEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0ODEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0ODEiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDgxIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ4MSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4MSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0ODEiIG5hbWU9IklucHV0NDgxIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ4MSIgbmFtZT0iT3V0cHV0NDgxIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0ODEiIHR5cGU9InRuczpQb3J0VHlwZTQ4MSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4MSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240ODEiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDgxIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0ODEiIGJpbmRpbmc9InRuczpCaW5kaW5nNDgxIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ4MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ4MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ4MiI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0ODIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDgyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDgyIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ4MiIgbmFtZT0iSW5wdXQ0ODIiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDgyIiBuYW1lPSJPdXRwdXQ0ODIiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ4MiIgdHlwZT0idG5zOlBvcnRUeXBlNDgyIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDgyIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ4MiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0ODIiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ4MiIgYmluZGluZz0idG5zOkJpbmRpbmc0ODIiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDgzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDgzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDgzIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ4MyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0ODMiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240ODMiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDgzIiBuYW1lPSJJbnB1dDQ4MyIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0ODMiIG5hbWU9Ik91dHB1dDQ4MyIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDgzIiB0eXBlPSJ0bnM6UG9ydFR5cGU0ODMiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240ODMiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDgzIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ4MyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDgzIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ4MyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0ODQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0ODQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0ODQiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDg0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ4NCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4NCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0ODQiIG5hbWU9IklucHV0NDg0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ4NCIgbmFtZT0iT3V0cHV0NDg0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0ODQiIHR5cGU9InRuczpQb3J0VHlwZTQ4NCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4NCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240ODQiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDg0Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0ODQiIGJpbmRpbmc9InRuczpCaW5kaW5nNDg0Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ4NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ4NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ4NSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0ODUiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDg1Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDg1Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ4NSIgbmFtZT0iSW5wdXQ0ODUiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDg1IiBuYW1lPSJPdXRwdXQ0ODUiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ4NSIgdHlwZT0idG5zOlBvcnRUeXBlNDg1Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDg1Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ4NSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0ODUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ4NSIgYmluZGluZz0idG5zOkJpbmRpbmc0ODUiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDg2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDg2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDg2Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ4NiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0ODYiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240ODYiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDg2IiBuYW1lPSJJbnB1dDQ4NiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0ODYiIG5hbWU9Ik91dHB1dDQ4NiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDg2IiB0eXBlPSJ0bnM6UG9ydFR5cGU0ODYiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240ODYiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDg2Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ4NiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDg2IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ4NiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0ODciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0ODciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0ODciPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDg3Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ4NyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4NyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0ODciIG5hbWU9IklucHV0NDg3Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ4NyIgbmFtZT0iT3V0cHV0NDg3Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0ODciIHR5cGU9InRuczpQb3J0VHlwZTQ4NyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ4NyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240ODciLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDg3Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0ODciIGJpbmRpbmc9InRuczpCaW5kaW5nNDg3Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ4OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ4OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ4OCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0ODgiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDg4Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDg4Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ4OCIgbmFtZT0iSW5wdXQ0ODgiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDg4IiBuYW1lPSJPdXRwdXQ0ODgiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ4OCIgdHlwZT0idG5zOlBvcnRUeXBlNDg4Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDg4Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ4OCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0ODgiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ4OCIgYmluZGluZz0idG5zOkJpbmRpbmc0ODgiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDg5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDg5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDg5Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ4OSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0ODkiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240ODkiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDg5IiBuYW1lPSJJbnB1dDQ4OSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0ODkiIG5hbWU9Ik91dHB1dDQ4OSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDg5IiB0eXBlPSJ0bnM6UG9ydFR5cGU0ODkiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240ODkiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDg5Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ4OSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDg5IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ4OSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0OTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0OTAiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0OTAiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDkwIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ5MCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5MCI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0OTAiIG5hbWU9IklucHV0NDkwIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ5MCIgbmFtZT0iT3V0cHV0NDkwIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0OTAiIHR5cGU9InRuczpQb3J0VHlwZTQ5MCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5MCI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240OTAiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDkwIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0OTAiIGJpbmRpbmc9InRuczpCaW5kaW5nNDkwIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ5MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ5MSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ5MSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0OTEiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDkxIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDkxIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ5MSIgbmFtZT0iSW5wdXQ0OTEiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDkxIiBuYW1lPSJPdXRwdXQ0OTEiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ5MSIgdHlwZT0idG5zOlBvcnRUeXBlNDkxIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDkxIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ5MSIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0OTEiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ5MSIgYmluZGluZz0idG5zOkJpbmRpbmc0OTEiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDkyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDkyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDkyIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ5MiIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0OTIiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTIiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDkyIiBuYW1lPSJJbnB1dDQ5MiIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0OTIiIG5hbWU9Ik91dHB1dDQ5MiIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDkyIiB0eXBlPSJ0bnM6UG9ydFR5cGU0OTIiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTIiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDkyIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ5MiI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDkyIiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ5MiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0OTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0OTMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0OTMiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDkzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ5MyI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5MyI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0OTMiIG5hbWU9IklucHV0NDkzIi8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ5MyIgbmFtZT0iT3V0cHV0NDkzIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0OTMiIHR5cGU9InRuczpQb3J0VHlwZTQ5MyI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5MyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240OTMiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDkzIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0OTMiIGJpbmRpbmc9InRuczpCaW5kaW5nNDkzIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ5NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ5NCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ5NCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0OTQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDk0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDk0Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ5NCIgbmFtZT0iSW5wdXQ0OTQiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDk0IiBuYW1lPSJPdXRwdXQ0OTQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ5NCIgdHlwZT0idG5zOlBvcnRUeXBlNDk0Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDk0Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ5NCIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0OTQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ5NCIgYmluZGluZz0idG5zOkJpbmRpbmc0OTQiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDk1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDk1Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDk1Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ5NSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0OTUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTUiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDk1IiBuYW1lPSJJbnB1dDQ5NSIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0OTUiIG5hbWU9Ik91dHB1dDQ5NSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDk1IiB0eXBlPSJ0bnM6UG9ydFR5cGU0OTUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTUiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDk1Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ5NSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDk1IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ5NSI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0OTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0OTYiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0OTYiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDk2Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ5NiI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5NiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0OTYiIG5hbWU9IklucHV0NDk2Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ5NiIgbmFtZT0iT3V0cHV0NDk2Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0OTYiIHR5cGU9InRuczpQb3J0VHlwZTQ5NiI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5NiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240OTYiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDk2Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0OTYiIGJpbmRpbmc9InRuczpCaW5kaW5nNDk2Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlc3BvbnNlTWVzc2FnZTQ5NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXNwb25zZSIgZWxlbWVudD0idG5zOlJlc3BvbnNlRWxlbWVudDQ5NyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXF1ZXN0TWVzc2FnZTQ5NyI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJSZXF1ZXN0IiBlbGVtZW50PSJ0bnM6UmVxdWVzdEVsZW1lbnQ0OTciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlNDk3Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDk3Ij4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpSZXF1ZXN0TWVzc2FnZTQ5NyIgbmFtZT0iSW5wdXQ0OTciLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6UmVzcG9uc2VNZXNzYWdlNDk3IiBuYW1lPSJPdXRwdXQ0OTciLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZzQ5NyIgdHlwZT0idG5zOlBvcnRUeXBlNDk3Ij4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uNDk3Ij4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL09wZXJhdGlvbjQ5NyIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2U0OTciPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydDQ5NyIgYmluZGluZz0idG5zOkJpbmRpbmc0OTciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVzcG9uc2VNZXNzYWdlNDk4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2VFbGVtZW50NDk4Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9IlJlcXVlc3RNZXNzYWdlNDk4Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IlJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0RWxlbWVudDQ5OCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGU0OTgiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTgiPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOlJlcXVlc3RNZXNzYWdlNDk4IiBuYW1lPSJJbnB1dDQ5OCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpSZXNwb25zZU1lc3NhZ2U0OTgiIG5hbWU9Ik91dHB1dDQ5OCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nNDk4IiB0eXBlPSJ0bnM6UG9ydFR5cGU0OTgiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb240OTgiPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvT3BlcmF0aW9uNDk4Ii8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZTQ5OCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0NDk4IiBiaW5kaW5nPSJ0bnM6QmluZGluZzQ5OCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1lc3NhZ2U0OTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpSZXNwb25zZUVsZW1lbnQ0OTkiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1lc3NhZ2U0OTkiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iUmVxdWVzdCIgZWxlbWVudD0idG5zOlJlcXVlc3RFbGVtZW50NDk5Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZTQ5OSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5OSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1lc3NhZ2U0OTkiIG5hbWU9IklucHV0NDk5Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTWVzc2FnZTQ5OSIgbmFtZT0iT3V0cHV0NDk5Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkJpbmRpbmc0OTkiIHR5cGU9InRuczpQb3J0VHlwZTQ5OSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik9wZXJhdGlvbjQ5OSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9PcGVyYXRpb240OTkiLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTZXJ2aWNlNDk5Ij4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IlBvcnQ0OTkiIGJpbmRpbmc9InRuczpCaW5kaW5nNDk5Ij4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvU3RvY2tRdW90ZS9TdG9ja1F1b3RlLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9kYXRhL1N0b2NrUXVvdGUvU3RvY2tRdW90ZS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MGJmOTY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL2RhdGEvU3RvY2tRdW90ZS9TdG9ja1F1b3RlLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnL1N0b2NrUXVvdGUvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iU3RvY2tRdW90ZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvU3RvY2tRdW90ZS8iPg0KLSAgPHdzZGw6dHlwZXM+DQotICAgIDx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1N0b2NrUXVvdGUvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4NCi0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZ2V0UXVvdGVSZXNwb25zZSI+DQotICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPg0KLSAgICAgICAgICA8eHNkOmFsbD4NCi0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0idGlja2VyU3ltYm9sIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+DQotICAgICAgICAgIDwveHNkOmFsbD4NCi0gICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPg0KLSAgICAgIDwveHNkOmVsZW1lbnQ+DQotICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImdldFF1b3RlUmVxdWVzdCI+DQotICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPg0KLSAgICAgICAgICA8eHNkOmFsbD4NCi0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0icHJpY2UiIHR5cGU9InhzZDpmbG9hdCIvPg0KLSAgICAgICAgICA8L3hzZDphbGw+DQotICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4NCi0gICAgICA8L3hzZDplbGVtZW50Pg0KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJIZWFkZXJzIj4NCi0gICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+DQotICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+DQotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImhlYWRlciIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+DQotICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPg0KLSAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPg0KLSAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJuYW1lIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+DQotICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InZhbHVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+DQotICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPg0KLSAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+DQotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4NCi0gICAgICAgICAgPC94c2Q6c2VxdWVuY2U+DQotICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4NCi0gICAgICA8L3hzZDplbGVtZW50Pg0KLSAgICA8L3hzZDpzY2hlbWE+DQotICA8L3dzZGw6dHlwZXM+DQotICA8d3NkbDptZXNzYWdlIG5hbWU9ImdldFF1b3RlUmVzcG9uc2UiPg0KLSAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpnZXRRdW90ZVJlc3BvbnNlIiBuYW1lPSJnZXRRdW90ZVJlc3BvbnNlIi8+DQotICAgIDx3c2RsOnBhcnQgZWxlbWVudD0idG5zOkhlYWRlcnMiIG5hbWU9ImhlYWRlcnMiLz4NCi0gIDwvd3NkbDptZXNzYWdlPg0KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJnZXRRdW90ZVJlcXVlc3QiPg0KLSAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpnZXRRdW90ZVJlcXVlc3QiIG5hbWU9ImdldFF1b3RlUmVxdWVzdCIvPg0KLSAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpIZWFkZXJzIiBuYW1lPSJoZWFkZXJzIi8+DQotICA8L3dzZGw6bWVzc2FnZT4NCi0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlN0b2NrUXVvdGUiPg0KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZ2V0UXVvdGUiPg0KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpnZXRRdW90ZVJlcXVlc3QiLz4NCi0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOmdldFF1b3RlUmVzcG9uc2UiLz4NCi0gICAgPC93c2RsOm9wZXJhdGlvbj4NCi0gIDwvd3NkbDpwb3J0VHlwZT4NCi0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iU3RvY2tRdW90ZVNPQVAiIHR5cGU9InRuczpTdG9ja1F1b3RlIj4NCi0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+DQotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJnZXRRdW90ZSI+DQotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9TdG9ja1F1b3RlL2dldFF1b3RlIi8+DQotICAgICAgPHdzZGw6aW5wdXQ+DQotICAgICAgICA8c29hcDpib2R5IHBhcnRzPSJnZXRRdW90ZVJlcXVlc3QiIHVzZT0ibGl0ZXJhbCIvPg0KLSAgICAgICAgPHNvYXA6aGVhZGVyIG1lc3NhZ2U9InRuczpnZXRRdW90ZVJlcXVlc3QiIHBhcnQ9ImhlYWRlcnMiIHVzZT0ibGl0ZXJhbCIvPg0KLSAgICAgIDwvd3NkbDppbnB1dD4NCi0gICAgICA8d3NkbDpvdXRwdXQ+DQotICAgICAgICA8c29hcDpib2R5IHBhcnRzPSJnZXRRdW90ZVJlc3BvbnNlIiB1c2U9ImxpdGVyYWwiLz4NCi0gICAgICAgIDxzb2FwOmhlYWRlciBtZXNzYWdlPSJ0bnM6Z2V0UXVvdGVSZXNwb25zZSIgcGFydD0iaGVhZGVycyIgdXNlPSJsaXRlcmFsIi8+DQotICAgICAgPC93c2RsOm91dHB1dD4NCi0gICAgPC93c2RsOm9wZXJhdGlvbj4NCi0gIDwvd3NkbDpiaW5kaW5nPg0KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTdG9ja1F1b3RlIj4NCi0gICAgPHdzZGw6cG9ydCBiaW5kaW5nPSJ0bnM6U3RvY2tRdW90ZVNPQVAiIG5hbWU9IlN0b2NrUXVvdGVTT0FQIj4NCi0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmciLz4NCi0gICAgPC93c2RsOnBvcnQ+DQotICA8L3dzZGw6c2VydmljZT4NCi08L3dzZGw6ZGVmaW5pdGlvbnM+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvQWxsVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL0FsbFRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4OGI5Y2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvQWxsVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiCgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENvbW1vbiBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwKLSCgKgotICogQ29udHJpYnV0b3JzOgotICogICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5LldTRExTY2FsYWJpbGl0eVRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotcHVibGljIGNsYXNzIEFsbFRlc3RzCi17Ci0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICBUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKCJUZXN0IGZvciBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZSIpOwotICAgIC8vJEpVbml0LUJFR0lOJAotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShSZWFkU3RvY2tRdW90ZVdTRExUZXN0Q2FzZS5jbGFzcyk7Ci0gICAgc3VpdGUuYWRkVGVzdFN1aXRlKFJlYWRTdG9ja1F1b3RlV1NETEVNRlRlc3RDYXNlLmNsYXNzKTsKLSAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoVmFsaWRhdGVTdG9ja1F1b3RlV1NETFRlc3RDYXNlLmNsYXNzKTsKLSAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoVmFsaWRhdGVTdG9ja1F1b3RlV1NJVGVzdENhc2UuY2xhc3MpOwotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShPcGVuU3RvY2tRdW90ZVdTRExTZXR1cC5jbGFzcyk7Ci0gICAgc3VpdGUuYWRkVGVzdFN1aXRlKE9wZW5TdG9ja1F1b3RlV1NETFRlc3RDYXNlLmNsYXNzKTsKLSAgICBzdWl0ZS5hZGRUZXN0KFdTRExTY2FsYWJpbGl0eVRlc3RzLnN1aXRlKCkpOwotICAgIC8vJEpVbml0LUVORCQKLSAgICByZXR1cm4gc3VpdGU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL09wZW5FZGl0b3JPQUdJU1dTRExUZXN0Y2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvT3BlbkVkaXRvck9BR0lTV1NETFRlc3RjYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwYjExNjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvT3BlbkVkaXRvck9BR0lTV1NETFRlc3RjYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZTsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLldTRExFeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZVByb3h5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZVByb3h5VmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudGVzdC5wZXJmb3JtYW5jZS5EaW1lbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudGVzdC5wZXJmb3JtYW5jZS5QZXJmb3JtYW5jZVRlc3RDYXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dDsKLQotcHVibGljIGNsYXNzIE9wZW5FZGl0b3JPQUdJU1dTRExUZXN0Y2FzZSBleHRlbmRzIFBlcmZvcm1hbmNlVGVzdENhc2UKLXsKLSAgcHVibGljIHZvaWQgdGVzdFJlYWRXU0RMKCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgV1NETEV4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiwgRmlsZU5vdEZvdW5kRXhjZXB0aW9uCi0gIHsKLSAgICBTdHJpbmcgb2FnaXM4MERpciA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgib2FnaXM4MERpciIpOwotICAgIEFzc2VydC5hc3NlcnROb3ROdWxsKG9hZ2lzODBEaXIpOwotICAgIGlmICghb2FnaXM4MERpci5lbmRzV2l0aCgiLyIpICYmICFvYWdpczgwRGlyLmVuZHNXaXRoKCJcXCIpKQotICAgICAgb2FnaXM4MERpciA9IG9hZ2lzODBEaXIgKyAiLyI7Ci0gICAgRmlsZSBkaXIgPSBuZXcgRmlsZShvYWdpczgwRGlyICsgIk9BR0lTOC4wIik7Ci0gICAgaWYgKGRpci5leGlzdHMoKSAmJiBkaXIuaXNEaXJlY3RvcnkoKSkKLSAgICB7Ci0gICAgICBJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KCJzcCIpOwotICAgICAgcHJvamVjdC5jcmVhdGUobnVsbCk7Ci0gICAgICBwcm9qZWN0Lm9wZW4obnVsbCk7Ci0gICAgICBjb3B5KGRpciwgcHJvamVjdCk7Ci0gICAgICBqb2luQmFja2dyb3VuZEpvYnMoKTsKLSAgICAgIGZpbmFsIExpc3Qgd3NkbHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICBwcm9qZWN0LmFjY2VwdAotICAgICAgKAotICAgICAgICBuZXcgSVJlc291cmNlUHJveHlWaXNpdG9yKCkKLSAgICAgICAgewotICAgICAgICAgIHB1YmxpYyBib29sZWFuIHZpc2l0KElSZXNvdXJjZVByb3h5IHByb3h5KSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChwcm94eS5nZXROYW1lKCkuZW5kc1dpdGgoIi53c2RsIikpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHdzZGxzLmFkZChwcm94eS5yZXF1ZXN0UmVzb3VyY2UoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgIElDb250YWluZXIuSU5DTFVERV9QSEFOVE9NUwotICAgICAgKTsKLSAgICAgIHRhZ0FzU3VtbWFyeSgiT3BlbiBPQUdJUyBXU0RMIiwgbmV3IERpbWVuc2lvbltdIHtEaW1lbnNpb24uRUxBUFNFRF9QUk9DRVNTLCBEaW1lbnNpb24uV09SS0lOR19TRVR9KTsKLSAgICAgIHN0YXJ0TWVhc3VyaW5nKCk7Ci0gICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gd3NkbHMuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykKLSAgICAgICAgb3BlbldTREwoKElGaWxlKWl0Lm5leHQoKSk7Ci0gICAgICBzdG9wTWVhc3VyaW5nKCk7Ci0gICAgICBjb21taXRNZWFzdXJlbWVudHMoKTsKLSAgICAgIGFzc2VydFBlcmZvcm1hbmNlKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIGZhaWwoZGlyLnRvU3RyaW5nKCkpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNvcHkoRmlsZSBzcmMsIElDb250YWluZXIgZGVzdCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbgotICB7Ci0gICAgRmlsZVtdIGNoaWxkcmVuID0gc3JjLmxpc3RGaWxlcygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgU3RyaW5nIG5hbWUgPSBjaGlsZHJlbltpXS5nZXROYW1lKCk7Ci0gICAgICBpZiAoY2hpbGRyZW5baV0uaXNEaXJlY3RvcnkoKSkKLSAgICAgIHsKLSAgICAgICAgSUZvbGRlciBmb2xkZXIgPSBkZXN0LmdldEZvbGRlcihuZXcgUGF0aChuYW1lKSk7Ci0gICAgICAgIGZvbGRlci5jcmVhdGUodHJ1ZSwgdHJ1ZSwgbnVsbCk7Ci0gICAgICAgIGNvcHkoY2hpbGRyZW5baV0sIGZvbGRlcik7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChuYW1lLmVuZHNXaXRoKCIud3NkbCIpIHx8IG5hbWUuZW5kc1dpdGgoIi54c2QiKSkKLSAgICAgIHsKLSAgICAgICAgSUZpbGUgZmlsZSA9IGRlc3QuZ2V0RmlsZShuZXcgUGF0aChuYW1lKSk7Ci0gICAgICAgIGZpbGUuY3JlYXRlKG5ldyBGaWxlSW5wdXRTdHJlYW0oY2hpbGRyZW5baV0pLCB0cnVlLCBudWxsKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgam9pbkJhY2tncm91bmRKb2JzKCkKLSAgewotICAgIERpc3BsYXkuZ2V0RGVmYXVsdCgpLnN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpCi0gICAgewotICAgICAgcHVibGljIHZvaWQgcnVuKCkKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICBQbGF0Zm9ybS5nZXRKb2JNYW5hZ2VyKCkuam9pbihSZXNvdXJjZXNQbHVnaW4uRkFNSUxZX0FVVE9fQlVJTEQsIG51bGwpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgbG9uZyBzdGFydCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotICAgICAgICBEaXNwbGF5IGRpc3BsYXkgPSBEaXNwbGF5LmdldERlZmF1bHQoKTsKLSAgICAgICAgd2hpbGUgKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gc3RhcnQgPCA1MDAwKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFkaXNwbGF5LnJlYWRBbmREaXNwYXRjaCgpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGRpc3BsYXkuc2xlZXAoKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBvcGVuV1NETChJRmlsZSBmaWxlKSB0aHJvd3MgUGFydEluaXRFeGNlcHRpb24KLSAgewotICAgIElXb3JrYmVuY2hXaW5kb3cgd29ya2JlbmNoV2luZG93ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKLSAgICBJRWRpdG9yUGFydCBlZGl0b3IgPSB3b3JrYmVuY2hXaW5kb3cuZ2V0QWN0aXZlUGFnZSgpLm9wZW5FZGl0b3IobmV3IEZpbGVFZGl0b3JJbnB1dChmaWxlKSwgUGVyZm9ybWFuY2VQbHVnaW4uV1NETF9FRElUT1JfSUQsIHRydWUpOwotICAgIHdvcmtiZW5jaFdpbmRvdy5nZXRBY3RpdmVQYWdlKCkuY2xvc2VFZGl0b3IoZWRpdG9yLCBmYWxzZSk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9PcGVuU3RvY2tRdW90ZVdTRExTZXR1cC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvT3BlblN0b2NrUXVvdGVXU0RMU2V0dXAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzA1YWI2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9PcGVuU3RvY2tRdW90ZVdTRExTZXR1cC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZTsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5pbnRyby5JSW50cm9NYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmludHJvLklJbnRyb1BhcnQ7Ci0KLXB1YmxpYyBjbGFzcyBPcGVuU3RvY2tRdW90ZVdTRExTZXR1cCBleHRlbmRzIFRlc3RDYXNlCi17Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFBST0pFQ1RfTkFNRSA9ICJQcm9qZWN0IjsKLQotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoT3BlblN0b2NrUXVvdGVXU0RMU2V0dXAuY2xhc3MsICJPcGVuU3RvY2tRdW90ZVdTRExTZXR1cCIpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgY2xvc2VJbnRybygpCi0gIHsKLSAgICBJSW50cm9NYW5hZ2VyIGludHJvTWFuYWdlciA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SW50cm9NYW5hZ2VyKCk7Ci0gICAgSUludHJvUGFydCBpbnRyb1BhcnQgPSBpbnRyb01hbmFnZXIuZ2V0SW50cm8oKTsKLSAgICBpZiAoaW50cm9QYXJ0ICE9IG51bGwpCi0gICAgICBpbnRyb01hbmFnZXIuY2xvc2VJbnRybyhpbnRyb1BhcnQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIElQcm9qZWN0IGNyZWF0ZVNpbXBsZVByb2plY3QoU3RyaW5nIG5hbWUpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0gIHsKLSAgICBJUHJvamVjdCBzaW1wbGVQcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KG5hbWUpOwotICAgIHNpbXBsZVByb2plY3QuY3JlYXRlKG51bGwpOwotICAgIHNpbXBsZVByb2plY3Qub3BlbihudWxsKTsKLSAgICByZXR1cm4gc2ltcGxlUHJvamVjdDsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGNvcHlGaWxlKElQcm9qZWN0IHByb2plY3QsIFN0cmluZyBzb3VyY2UsIFN0cmluZyBkZXN0KSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24KLSAgewotICAgIElGaWxlIGZpbGUgPSBwcm9qZWN0LmdldEZpbGUoZGVzdCk7Ci0gICAgZmlsZS5jcmVhdGUoUGVyZm9ybWFuY2VQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5KHNvdXJjZSkub3BlblN0cmVhbSgpLCB0cnVlLCBudWxsKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGpvaW5BdXRvQnVpbGQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotICB7Ci0gICAgYm9vbGVhbiBpbnRlcnJ1cHRlZCA9IHRydWU7Ci0gICAgd2hpbGUgKGludGVycnVwdGVkKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICBQbGF0Zm9ybS5nZXRKb2JNYW5hZ2VyKCkuam9pbihSZXNvdXJjZXNQbHVnaW4uRkFNSUxZX0FVVE9fQlVJTEQsIG51bGwpOwotICAgICAgICBpbnRlcnJ1cHRlZCA9IGZhbHNlOwotICAgICAgfQotICAgICAgY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIGludGVycnVwdGVkID0gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0U2V0dXAoKSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICBjbG9zZUludHJvKCk7Ci0gICAgSVByb2plY3QgcHJvamVjdCA9IGNyZWF0ZVNpbXBsZVByb2plY3QoUFJPSkVDVF9OQU1FKTsKLSAgICBjb3B5RmlsZShwcm9qZWN0LCAiZGF0YS9TdG9ja1F1b3RlL1N0b2NrUXVvdGUud3NkbCIsICJTdG9ja1F1b3RlLndzZGwiKTsKLSAgICBqb2luQXV0b0J1aWxkKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL09wZW5TdG9ja1F1b3RlV1NETFRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9PcGVuU3RvY2tRdW90ZVdTRExUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2JlNWI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL09wZW5TdG9ja1F1b3RlV1NETFRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UudGVzdC5wZXJmb3JtYW5jZS5QZXJmb3JtYW5jZVRlc3RDYXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7Ci0KLXB1YmxpYyBjbGFzcyBPcGVuU3RvY2tRdW90ZVdTRExUZXN0Q2FzZSBleHRlbmRzIFBlcmZvcm1hbmNlVGVzdENhc2UKLXsKLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKE9wZW5TdG9ja1F1b3RlV1NETFRlc3RDYXNlLmNsYXNzLCAiT3BlblN0b2NrUXVvdGVXU0RMVGVzdENhc2UiKTsKLSAgfQotCi0gIHByb3RlY3RlZCBJUHJvamVjdCBnZXRQcm9qZWN0KFN0cmluZyBwcm9qZWN0TmFtZSkgdGhyb3dzIENvcmVFeGNlcHRpb24KLSAgewotICAgIElQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QocHJvamVjdE5hbWUpOwotICAgIGFzc2VydFRydWUocHJvamVjdC5leGlzdHMoKSk7Ci0gICAgcHJvamVjdC5vcGVuKG51bGwpOwotICAgIHByb2plY3QucmVmcmVzaExvY2FsKElQcm9qZWN0LkRFUFRIX0lORklOSVRFLCBudWxsKTsKLSAgICBqb2luQXV0b0J1aWxkKCk7Ci0gICAgcmV0dXJuIHByb2plY3Q7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBqb2luQXV0b0J1aWxkKCkgdGhyb3dzIENvcmVFeGNlcHRpb24KLSAgewotICAgIGJvb2xlYW4gaW50ZXJydXB0ZWQgPSB0cnVlOwotICAgIHdoaWxlIChpbnRlcnJ1cHRlZCkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgUGxhdGZvcm0uZ2V0Sm9iTWFuYWdlcigpLmpvaW4oUmVzb3VyY2VzUGx1Z2luLkZBTUlMWV9BVVRPX0JVSUxELCBudWxsKTsKLSAgICAgICAgaW50ZXJydXB0ZWQgPSBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICBpbnRlcnJ1cHRlZCA9IHRydWU7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIElFZGl0b3JQYXJ0IG9wZW5FZGl0b3IoSUVkaXRvcklucHV0IGVkaXRvcklucHV0LCBTdHJpbmcgZWRpdG9yaWQpIHRocm93cyBQYXJ0SW5pdEV4Y2VwdGlvbgotICB7Ci0gICAgSVdvcmtiZW5jaFdpbmRvdyB3b3JrYmVuY2hXaW5kb3cgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOwotICAgIHJldHVybiB3b3JrYmVuY2hXaW5kb3cuZ2V0QWN0aXZlUGFnZSgpLm9wZW5FZGl0b3IoZWRpdG9ySW5wdXQsIGVkaXRvcmlkLCB0cnVlKTsKLSAgfQotCi0gIHByb3RlY3RlZCBib29sZWFuIGNsb3NlRWRpdG9yKElFZGl0b3JQYXJ0IGVkaXRvcikKLSAgewotICAgIElXb3JrYmVuY2hXaW5kb3cgd29ya2JlbmNoV2luZG93ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKLSAgICByZXR1cm4gd29ya2JlbmNoV2luZG93LmdldEFjdGl2ZVBhZ2UoKS5jbG9zZUVkaXRvcihlZGl0b3IsIGZhbHNlKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RPcGVuU3RvY2tRdW90ZVdTREwoKSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICBJUHJvamVjdCBwcm9qZWN0ID0gZ2V0UHJvamVjdChPcGVuU3RvY2tRdW90ZVdTRExTZXR1cC5QUk9KRUNUX05BTUUpOwotICAgIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCA9IG5ldyBGaWxlRWRpdG9ySW5wdXQoKElGaWxlKXByb2plY3QuZmluZE1lbWJlcigiU3RvY2tRdW90ZS53c2RsIikpOwotICAgIHN0YXJ0TWVhc3VyaW5nKCk7Ci0gICAgSUVkaXRvclBhcnQgZWRpdG9yUGFydCA9IG9wZW5FZGl0b3IoZWRpdG9ySW5wdXQsIFBlcmZvcm1hbmNlUGx1Z2luLldTRExfRURJVE9SX0lEKTsKLSAgICBzdG9wTWVhc3VyaW5nKCk7Ci0gICAgY29tbWl0TWVhc3VyZW1lbnRzKCk7Ci0gICAgYXNzZXJ0UGVyZm9ybWFuY2UoKTsKLSAgICBjbG9zZUVkaXRvcihlZGl0b3JQYXJ0KTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvUGVyZm9ybWFuY2VQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL1BlcmZvcm1hbmNlUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlNjhkNWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvUGVyZm9ybWFuY2VQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2U7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7Ci0KLS8qKgotICogVGhlIG1haW4gcGx1Z2luIGNsYXNzIHRvIGJlIHVzZWQgaW4gdGhlIGRlc2t0b3AuCi0gKi8KLXB1YmxpYyBjbGFzcyBQZXJmb3JtYW5jZVBsdWdpbiBleHRlbmRzIFBsdWdpbiB7Ci0JLy9UaGUgc2hhcmVkIGluc3RhbmNlLgotCXByaXZhdGUgc3RhdGljIFBlcmZvcm1hbmNlUGx1Z2luIHBsdWdpbjsKLQkvL1Jlc291cmNlIGJ1bmRsZS4KLQlwcml2YXRlIFJlc291cmNlQnVuZGxlIHJlc291cmNlQnVuZGxlOwotCi0gIC8vIFRPRE86IFRoZXNlIHR3byBjb25zdGFudHMgc2hvdWxkIHJlYWxseSBiZSBwdWxsZWQgZnJvbSB0aGUgcGx1Z2luIHdoaWNoIGRlY2xhcmVzIGl0LgotICAvLyBUaGlzIHdpbGwgYXZvaWQgIm1hZ2ljIHN0cmluZyIgZGVwZW5kZW5jaWVzIHdoaWNoIGNhbiBiZSBlYXNpbHkgYnJva2VuLgotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBXU0RMX0VESVRPUl9JRCA9ICJvcmcuZWNsaXBzZS53c3Qud3NkbC51aS5pbnRlcm5hbC5XU0RMRWRpdG9yIjsgLy8kTk9OLU5MUy0xJAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBXU0RMX1ZBTElEQVRPUl9JRCA9ICJvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2UuV1NETERlbGVnYXRpbmdWYWxpZGF0b3IiOyAvLyROT04tTkxTLTEkCi0gIAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfSUQgPSAib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UiOwkvLyROT04tTkxTLTEkCi0JCi0gIC8qKgotCSAqIFRoZSBjb25zdHJ1Y3Rvci4KLQkgKi8KLQlwdWJsaWMgUGVyZm9ybWFuY2VQbHVnaW4oKSB7Ci0JCXN1cGVyKCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHVwb24gcGx1Zy1pbiBhY3RpdmF0aW9uCi0JICovCi0JcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RhcnQoY29udGV4dCk7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIHBsdWctaW4gaXMgc3RvcHBlZAotCSAqLwotCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RvcChjb250ZXh0KTsKLQkJcGx1Z2luID0gbnVsbDsKLQkJcmVzb3VyY2VCdW5kbGUgPSBudWxsOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFBlcmZvcm1hbmNlUGx1Z2luIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc3RyaW5nIGZyb20gdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKiBvciAna2V5JyBpZiBub3QgZm91bmQuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UmVzb3VyY2VTdHJpbmcoU3RyaW5nIGtleSkgewotCQlSZXNvdXJjZUJ1bmRsZSBidW5kbGUgPSBQZXJmb3JtYW5jZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UmVzb3VyY2VCdW5kbGUoKTsKLQkJdHJ5IHsKLQkJCXJldHVybiAoYnVuZGxlICE9IG51bGwpID8gYnVuZGxlLmdldFN0cmluZyhrZXkpIDoga2V5OwotCQl9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIGtleTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0UmVzb3VyY2VCdW5kbGUoKSB7Ci0JCXRyeSB7Ci0JCQlpZiAocmVzb3VyY2VCdW5kbGUgPT0gbnVsbCkKLQkJCQlyZXNvdXJjZUJ1bmRsZSA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZSgib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UuUGVyZm9ybWFuY2VQbHVnaW5SZXNvdXJjZXMiKTsKLQkJfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIHgpIHsKLQkJCXJlc291cmNlQnVuZGxlID0gbnVsbDsKLQkJfQotCQlyZXR1cm4gcmVzb3VyY2VCdW5kbGU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvUmVhZE9BR0lTV1NETFRlc3RjYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9SZWFkT0FHSVNXU0RMVGVzdGNhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGM2OTY4Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9SZWFkT0FHSVNXU0RMVGVzdGNhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2U7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlRmlsdGVyOwotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnRlc3QucGVyZm9ybWFuY2UuRGltZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnRlc3QucGVyZm9ybWFuY2UuUGVyZm9ybWFuY2VUZXN0Q2FzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLndzZGw0ai5XU0RMUmVhZGVySW1wbDsKLQotcHVibGljIGNsYXNzIFJlYWRPQUdJU1dTRExUZXN0Y2FzZSBleHRlbmRzIFBlcmZvcm1hbmNlVGVzdENhc2UKLXsKLSAgcHJpdmF0ZSBMaXN0IGRlZnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLSAgcHVibGljIHZvaWQgdGVzdFJlYWRXU0RMKCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIG9hZ2lzODBEaXIgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoIm9hZ2lzODBEaXIiKTsKLSAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbChvYWdpczgwRGlyKTsKLSAgICBpZiAoIW9hZ2lzODBEaXIuZW5kc1dpdGgoIi8iKSAmJiAhb2FnaXM4MERpci5lbmRzV2l0aCgiXFwiKSkKLSAgICAgIG9hZ2lzODBEaXIgPSBvYWdpczgwRGlyICsgIi8iOwotICAgIEZpbGUgZGlyID0gbmV3IEZpbGUob2FnaXM4MERpciArICJPQUdJUzguMC93cy93c2RsIik7Ci0gICAgaWYgKGRpci5leGlzdHMoKSAmJiBkaXIuaXNEaXJlY3RvcnkoKSkKLSAgICB7Ci0gICAgICBGaWxlW10gd3NkbHMgPSBkaXIubGlzdEZpbGVzCi0gICAgICAoCi0gICAgICAgIG5ldyBGaWxlRmlsdGVyKCkKLSAgICAgICAgewotICAgICAgICAgIHB1YmxpYyBib29sZWFuIGFjY2VwdChGaWxlIHBhdGhuYW1lKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBwYXRobmFtZS5nZXROYW1lKCkuZW5kc1dpdGgoIi53c2RsIik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICApOwotICAgICAgdGFnQXNTdW1tYXJ5KCJSZWFkIE9BR0lTIFdTREwiLCBuZXcgRGltZW5zaW9uW10ge0RpbWVuc2lvbi5FTEFQU0VEX1BST0NFU1MsIERpbWVuc2lvbi5XT1JLSU5HX1NFVH0pOwotICAgICAgc3RhcnRNZWFzdXJpbmcoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgd3NkbHMubGVuZ3RoOyBpKyspCi0gICAgICAgIHJlYWRXU0RMKHdzZGxzW2ldLnRvVVJMKCkudG9TdHJpbmcoKSk7Ci0gICAgICBzdG9wTWVhc3VyaW5nKCk7Ci0gICAgICBjb21taXRNZWFzdXJlbWVudHMoKTsKLSAgICAgIGFzc2VydFBlcmZvcm1hbmNlKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIGZhaWwoZGlyLnRvU3RyaW5nKCkpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHJlYWRXU0RMKFN0cmluZyBsb2NhdGlvbikgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIFdTRExSZWFkZXJJbXBsIHJlYWRlciA9IG5ldyBXU0RMUmVhZGVySW1wbCgpOwotICAgIGRlZnMuYWRkKHJlYWRlci5yZWFkV1NETChsb2NhdGlvbikpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvUmVhZFN0b2NrUXVvdGVXU0RMRU1GVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL1JlYWRTdG9ja1F1b3RlV1NETEVNRlRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjOThhMWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvUmVhZFN0b2NrUXVvdGVXU0RMRU1GVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2U7Ci0KLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudGVzdC5wZXJmb3JtYW5jZS5QZXJmb3JtYW5jZVRlc3RDYXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETFJlc291cmNlSW1wbDsKLQotcHVibGljIGNsYXNzIFJlYWRTdG9ja1F1b3RlV1NETEVNRlRlc3RDYXNlIGV4dGVuZHMgUGVyZm9ybWFuY2VUZXN0Q2FzZQotewotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoUmVhZFN0b2NrUXVvdGVXU0RMRU1GVGVzdENhc2UuY2xhc3MsICJSZWFkU3RvY2tRdW90ZVdTRExFTUZUZXN0Q2FzZSIpOwotICB9Ci0gICAgCi0gIHB1YmxpYyB2b2lkIHRlc3RSZWFkU3RvY2tRdW90ZVdTRExfRU1GKCkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgc3RhcnRNZWFzdXJpbmcoKTsKLSAgICBVUkwgd3NkbCA9IFBlcmZvcm1hbmNlUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRFbnRyeSgiZGF0YS9TdG9ja1F1b3RlL1N0b2NrUXVvdGUud3NkbCIpOwotICAgIAotCVJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOwotICAgIFdTRExSZXNvdXJjZUltcGwgcmVzb3VyY2UgPSAoV1NETFJlc291cmNlSW1wbClyZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShVUkkuY3JlYXRlVVJJKCIqLndzZGwiKSk7Ci0JcmVzb3VyY2Uuc2V0VVJJKFVSSS5jcmVhdGVVUkkod3NkbC50b1N0cmluZygpKSk7Ci0gICAgamF2YS51dGlsLk1hcCBtYXAgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgbWFwLnB1dChXU0RMUmVzb3VyY2VJbXBsLkNPTlRJTlVFX09OX0xPQURfRVJST1IsQm9vbGVhbi52YWx1ZU9mKHRydWUpKTsKLSAgICBtYXAucHV0KFdTRExSZXNvdXJjZUltcGwuVVNFX0VYVEVOU0lPTl9GQUNUT1JJRVMsQm9vbGVhbi52YWx1ZU9mKHRydWUpKTsKLQlyZXNvdXJjZS5sb2FkKG1hcCk7IAotCURlZmluaXRpb24gZGVmaW5pdGlvbiA9IHJlc291cmNlLmdldERlZmluaXRpb24oKTsKLQlkZWZpbml0aW9uLmdldFFOYW1lKCk7Ci0JCi0Jc3RvcE1lYXN1cmluZygpOwotCWNvbW1pdE1lYXN1cmVtZW50cygpOwotCWFzc2VydFBlcmZvcm1hbmNlKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL1JlYWRTdG9ja1F1b3RlV1NETFRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9SZWFkU3RvY2tRdW90ZVdTRExUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTBkMDk1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL1JlYWRTdG9ja1F1b3RlV1NETFRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlOwotCi1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwueG1sLldTRExSZWFkZXI7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UudGVzdC5wZXJmb3JtYW5jZS5QZXJmb3JtYW5jZVRlc3RDYXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwud3NkbDRqLldTRExGYWN0b3J5SW1wbDsKLWltcG9ydCBvcmcueG1sLnNheC5JbnB1dFNvdXJjZTsKLQotcHVibGljIGNsYXNzIFJlYWRTdG9ja1F1b3RlV1NETFRlc3RDYXNlIGV4dGVuZHMgUGVyZm9ybWFuY2VUZXN0Q2FzZQotewotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoUmVhZFN0b2NrUXVvdGVXU0RMVGVzdENhc2UuY2xhc3MsICJSZWFkU3RvY2tRdW90ZVdTRExUZXN0Q2FzZSIpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0UmVhZFN0b2NrUXVvdGVXU0RMKCkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgc3RhcnRNZWFzdXJpbmcoKTsKLSAgICBVUkwgd3NkbCA9IFBlcmZvcm1hbmNlUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRFbnRyeSgiZGF0YS9TdG9ja1F1b3RlL1N0b2NrUXVvdGUud3NkbCIpOwotICAgIFdTRExGYWN0b3J5SW1wbCBmYWN0b3J5ID0gbmV3IFdTRExGYWN0b3J5SW1wbCgpOwotICAgIFdTRExSZWFkZXIgcmVhZGVyID0gZmFjdG9yeS5uZXdXU0RMUmVhZGVyKCk7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gcmVhZGVyLnJlYWRXU0RMKHdzZGwudG9TdHJpbmcoKSwgbmV3IElucHV0U291cmNlKHdzZGwub3BlblN0cmVhbSgpKSk7Ci0gICAgZGVmaW5pdGlvbi5nZXRRTmFtZSgpOwotICAgIHN0b3BNZWFzdXJpbmcoKTsKLQljb21taXRNZWFzdXJlbWVudHMoKTsKLQlhc3NlcnRQZXJmb3JtYW5jZSgpOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9WYWxpZGF0ZU9BR0lTV1NETFRlc3RjYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9WYWxpZGF0ZU9BR0lTV1NETFRlc3RjYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwZmM3ZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvVmFsaWRhdGVPQUdJU1dTRExUZXN0Y2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZTsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVGaWx0ZXI7Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotCi1pbXBvcnQgamF2YXgud3NkbC5XU0RMRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnRlc3QucGVyZm9ybWFuY2UuRGltZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnRlc3QucGVyZm9ybWFuY2UuUGVyZm9ybWFuY2VUZXN0Q2FzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V1NJQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2UuV1NETFZhbGlkYXRvcjsKLQotCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGVPQUdJU1dTRExUZXN0Y2FzZSBleHRlbmRzIFBlcmZvcm1hbmNlVGVzdENhc2UKLXsKLSAgcHJpdmF0ZSBXU0RMVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQkgIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiAKLSAgewotICAgIHN1cGVyLnNldFVwKCk7Ci0gICAgLy8gU2V0IHRoZSBXUy1JIHByZWZlcmVuY2UgdG8gaWdub3JlIHNvIG9ubHkgV1NETCBlcnJvcnMgd2lsbCBiZSB0ZXN0ZWQuCi0gICAgV1NQbHVnaW4gd3N1aSA9IFdTUGx1Z2luLmdldEluc3RhbmNlKCk7Ci0gICAgUGVyc2lzdGVudFdTSUNvbnRleHQgd3NpY29udGV4dCA9IHdzdWkuZ2V0V1NJU1NCUENvbnRleHQoKTsKLSAgICB3c2ljb250ZXh0LnVwZGF0ZVdTSUNvbXBsaWFuY2VzKFBlcnNpc3RlbnRXU0lDb250ZXh0LklHTk9SRV9OT05fV1NJKTsKLSAgICB3c2ljb250ZXh0ID0gd3N1aS5nZXRXU0lBUENvbnRleHQoKTsKLSAgICB3c2ljb250ZXh0LnVwZGF0ZVdTSUNvbXBsaWFuY2VzKFBlcnNpc3RlbnRXU0lDb250ZXh0LklHTk9SRV9OT05fV1NJKTsKLSAgfSAKLQotICBwdWJsaWMgdm9pZCB0ZXN0VmFsaWRhdGVXU0RMKCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIG9hZ2lzODBEaXIgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoIm9hZ2lzODBEaXIiKTsKLSAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbChvYWdpczgwRGlyKTsKLSAgICBpZiAoIW9hZ2lzODBEaXIuZW5kc1dpdGgoIi8iKSAmJiAhb2FnaXM4MERpci5lbmRzV2l0aCgiXFwiKSkKLSAgICAgIG9hZ2lzODBEaXIgPSBvYWdpczgwRGlyICsgIi8iOwotICAgIEZpbGUgZGlyID0gbmV3IEZpbGUob2FnaXM4MERpciArICJPQUdJUzguMC93cy93c2RsIik7Ci0gICAgaWYgKGRpci5leGlzdHMoKSAmJiBkaXIuaXNEaXJlY3RvcnkoKSkKLSAgICB7Ci0gICAgICBGaWxlW10gd3NkbHMgPSBkaXIubGlzdEZpbGVzCi0gICAgICAoCi0gICAgICAgIG5ldyBGaWxlRmlsdGVyKCkKLSAgICAgICAgewotICAgICAgICAgIHB1YmxpYyBib29sZWFuIGFjY2VwdChGaWxlIHBhdGhuYW1lKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBwYXRobmFtZS5nZXROYW1lKCkuZW5kc1dpdGgoIi53c2RsIik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICApOwotICAgICAgdGFnQXNTdW1tYXJ5KCJWYWxpZGF0ZSBPQUdJUyBXU0RMIiwgbmV3IERpbWVuc2lvbltdIHtEaW1lbnNpb24uRUxBUFNFRF9QUk9DRVNTLCBEaW1lbnNpb24uV09SS0lOR19TRVR9KTsKLQkgIHZhbGlkYXRvciA9IFdTRExWYWxpZGF0b3IuZ2V0SW5zdGFuY2UoKTsKLQkgIHN0YXJ0TWVhc3VyaW5nKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHdzZGxzLmxlbmd0aDsgaSsrKQotICAgICAgICB2YWxpZGF0ZVdTREwod3NkbHNbaV0udG9VUkwoKS50b1N0cmluZygpKTsKLSAgICAgIHN0b3BNZWFzdXJpbmcoKTsKLSAgICAgIGNvbW1pdE1lYXN1cmVtZW50cygpOwotICAgICAgYXNzZXJ0UGVyZm9ybWFuY2UoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgZmFpbChkaXIudG9TdHJpbmcoKSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgdmFsaWRhdGVXU0RMKFN0cmluZyBsb2NhdGlvbikgdGhyb3dzIFdTRExFeGNlcHRpb24KLSAgewotICAgIHZhbGlkYXRvci52YWxpZGF0ZShsb2NhdGlvbik7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL1ZhbGlkYXRlT0FHSVNXU0lUZXN0Y2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvVmFsaWRhdGVPQUdJU1dTSVRlc3RjYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyZWFhYzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvVmFsaWRhdGVPQUdJU1dTSVRlc3RjYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUZpbHRlcjsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci0KLWltcG9ydCBqYXZheC53c2RsLldTRExFeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UudGVzdC5wZXJmb3JtYW5jZS5EaW1lbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudGVzdC5wZXJmb3JtYW5jZS5QZXJmb3JtYW5jZVRlc3RDYXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW4uV1NQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzLlBlcnNpc3RlbnRXU0lDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuZWNsaXBzZS5XU0RMVmFsaWRhdG9yOwotCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGVPQUdJU1dTSVRlc3RjYXNlIGV4dGVuZHMgUGVyZm9ybWFuY2VUZXN0Q2FzZQotewotICBwcml2YXRlIFdTRExWYWxpZGF0b3IgdmFsaWRhdG9yOwotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gCi0gIHsKLSAgICBzdXBlci5zZXRVcCgpOwotICAgIC8vIFNldCB0aGUgV1MtSSBwcmVmZXJlbmNlIHRvIGlnbm9yZSBzbyBvbmx5IFdTREwgZXJyb3JzIHdpbGwgYmUgdGVzdGVkLgotICAgIFdTUGx1Z2luIHdzdWkgPSBXU1BsdWdpbi5nZXRJbnN0YW5jZSgpOwotICAgIFBlcnNpc3RlbnRXU0lDb250ZXh0IHdzaWNvbnRleHQgPSB3c3VpLmdldFdTSVNTQlBDb250ZXh0KCk7Ci0gICAgd3NpY29udGV4dC51cGRhdGVXU0lDb21wbGlhbmNlcyhQZXJzaXN0ZW50V1NJQ29udGV4dC5TVE9QX05PTl9XU0kpOwotICAgIHdzaWNvbnRleHQgPSB3c3VpLmdldFdTSUFQQ29udGV4dCgpOwotICAgIHdzaWNvbnRleHQudXBkYXRlV1NJQ29tcGxpYW5jZXMoUGVyc2lzdGVudFdTSUNvbnRleHQuU1RPUF9OT05fV1NJKTsKLSAgfSAKLQotICBwdWJsaWMgdm9pZCB0ZXN0VmFsaWRhdGVXU0RMKCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgV1NETEV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nIG9hZ2lzODBEaXIgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoIm9hZ2lzODBEaXIiKTsKLSAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbChvYWdpczgwRGlyKTsKLSAgICBpZiAoIW9hZ2lzODBEaXIuZW5kc1dpdGgoIi8iKSAmJiAhb2FnaXM4MERpci5lbmRzV2l0aCgiXFwiKSkKLSAgICAgIG9hZ2lzODBEaXIgPSBvYWdpczgwRGlyICsgIi8iOwotICAgIEZpbGUgZGlyID0gbmV3IEZpbGUob2FnaXM4MERpciArICJPQUdJUzguMC93cy93c2RsIik7Ci0gICAgaWYgKGRpci5leGlzdHMoKSAmJiBkaXIuaXNEaXJlY3RvcnkoKSkKLSAgICB7Ci0gICAgICBGaWxlW10gd3NkbHMgPSBkaXIubGlzdEZpbGVzCi0gICAgICAoCi0gICAgICAgIG5ldyBGaWxlRmlsdGVyKCkKLSAgICAgICAgewotICAgICAgICAgIHB1YmxpYyBib29sZWFuIGFjY2VwdChGaWxlIHBhdGhuYW1lKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBwYXRobmFtZS5nZXROYW1lKCkuZW5kc1dpdGgoIi53c2RsIik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICApOwotICAgICAgdGFnQXNTdW1tYXJ5KCJWYWxpZGF0ZSBPQUdJUyBXU0RMIHdpdGggV1MtSSIsIG5ldyBEaW1lbnNpb25bXSB7RGltZW5zaW9uLkVMQVBTRURfUFJPQ0VTUywgRGltZW5zaW9uLldPUktJTkdfU0VUfSk7Ci0JICB2YWxpZGF0b3IgPSBXU0RMVmFsaWRhdG9yLmdldEluc3RhbmNlKCk7Ci0JICBzdGFydE1lYXN1cmluZygpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3c2Rscy5sZW5ndGg7IGkrKykKLSAgICAgICAgdmFsaWRhdGVXU0RMKHdzZGxzW2ldLnRvVVJMKCkudG9TdHJpbmcoKSk7Ci0gICAgICBzdG9wTWVhc3VyaW5nKCk7Ci0gICAgICBjb21taXRNZWFzdXJlbWVudHMoKTsKLSAgICAgIGFzc2VydFBlcmZvcm1hbmNlKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIGZhaWwoZGlyLnRvU3RyaW5nKCkpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHZhbGlkYXRlV1NETChTdHJpbmcgbG9jYXRpb24pIHRocm93cyBXU0RMRXhjZXB0aW9uCi0gIHsKLSAgICB2YWxpZGF0b3IudmFsaWRhdGUobG9jYXRpb24pOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9WYWxpZGF0ZVN0b2NrUXVvdGVXU0RMVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL1ZhbGlkYXRlU3RvY2tRdW90ZVdTRExUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTAyYzdmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL1ZhbGlkYXRlU3RvY2tRdW90ZVdTRExUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZTsKLQotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlLlBlcmZvcm1hbmNlVGVzdENhc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbi5XU1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXMuUGVyc2lzdGVudFdTSUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5lY2xpcHNlLldTRExWYWxpZGF0b3I7Ci0KLXB1YmxpYyBjbGFzcyBWYWxpZGF0ZVN0b2NrUXVvdGVXU0RMVGVzdENhc2UgZXh0ZW5kcyBQZXJmb3JtYW5jZVRlc3RDYXNlCi17Ci0gIHByaXZhdGUgV1NETFZhbGlkYXRvciB2YWxpZGF0b3I7Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiAKLSAgewotICAgIHN1cGVyLnNldFVwKCk7Ci0gICAgLy8gU2V0IHRoZSBXUy1JIHByZWZlcmVuY2UgdG8gaWdub3JlIHNvIG9ubHkgV1NETCBlcnJvcnMgd2lsbCBiZSB0ZXN0ZWQuCi0gICAgV1NQbHVnaW4gd3N1aSA9IFdTUGx1Z2luLmdldEluc3RhbmNlKCk7Ci0gICAgUGVyc2lzdGVudFdTSUNvbnRleHQgd3NpY29udGV4dCA9IHdzdWkuZ2V0V1NJU1NCUENvbnRleHQoKTsKLSAgICB3c2ljb250ZXh0LnVwZGF0ZVdTSUNvbXBsaWFuY2VzKFBlcnNpc3RlbnRXU0lDb250ZXh0LklHTk9SRV9OT05fV1NJKTsKLSAgICB3c2ljb250ZXh0ID0gd3N1aS5nZXRXU0lBUENvbnRleHQoKTsKLSAgICB3c2ljb250ZXh0LnVwZGF0ZVdTSUNvbXBsaWFuY2VzKFBlcnNpc3RlbnRXU0lDb250ZXh0LklHTk9SRV9OT05fV1NJKTsKLSAgfSAgCi0gIAotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoVmFsaWRhdGVTdG9ja1F1b3RlV1NETFRlc3RDYXNlLmNsYXNzLCAiVmFsaWRhdGVTdG9ja1F1b3RlV1NETFRlc3RDYXNlIik7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3RWYWxpZGF0ZVN0b2NrUXVvdGVXU0RMKCkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgdmFsaWRhdG9yID0gV1NETFZhbGlkYXRvci5nZXRJbnN0YW5jZSgpOwotICAgIFVSTCB3c2RsID0gUGVyZm9ybWFuY2VQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5KCJkYXRhL1N0b2NrUXVvdGUvU3RvY2tRdW90ZS53c2RsIik7Ci0gICAgU3RyaW5nIHBhdGggPSB3c2RsLnRvU3RyaW5nKCk7Ci0KLSAgICBzdGFydE1lYXN1cmluZygpOwotICAgIHZhbGlkYXRvci52YWxpZGF0ZShwYXRoKTsKLSAgICBzdG9wTWVhc3VyaW5nKCk7Ci0gICAgY29tbWl0TWVhc3VyZW1lbnRzKCk7Ci0gICAgYXNzZXJ0UGVyZm9ybWFuY2UoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvVmFsaWRhdGVTdG9ja1F1b3RlV1NJVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL1ZhbGlkYXRlU3RvY2tRdW90ZVdTSVRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1ZDVmYTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvVmFsaWRhdGVTdG9ja1F1b3RlV1NJVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2U7Ci0KLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UudGVzdC5wZXJmb3JtYW5jZS5QZXJmb3JtYW5jZVRlc3RDYXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW4uV1NQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzLlBlcnNpc3RlbnRXU0lDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuZWNsaXBzZS5XU0RMVmFsaWRhdG9yOwotCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGVTdG9ja1F1b3RlV1NJVGVzdENhc2UgZXh0ZW5kcyBQZXJmb3JtYW5jZVRlc3RDYXNlCi17Ci0gIHByaXZhdGUgV1NETFZhbGlkYXRvciB2YWxpZGF0b3I7Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiAKLSAgewotICAgIHN1cGVyLnNldFVwKCk7Ci0gICAgLy8gU2V0IHRoZSBXUy1JIHByZWZlcmVuY2UgdG8gaWdub3JlIHNvIG9ubHkgV1NETCBlcnJvcnMgd2lsbCBiZSB0ZXN0ZWQuCi0gICAgV1NQbHVnaW4gd3N1aSA9IFdTUGx1Z2luLmdldEluc3RhbmNlKCk7Ci0gICAgUGVyc2lzdGVudFdTSUNvbnRleHQgd3NpY29udGV4dCA9IHdzdWkuZ2V0V1NJU1NCUENvbnRleHQoKTsKLSAgICB3c2ljb250ZXh0LnVwZGF0ZVdTSUNvbXBsaWFuY2VzKFBlcnNpc3RlbnRXU0lDb250ZXh0LlNUT1BfTk9OX1dTSSk7Ci0gICAgd3NpY29udGV4dCA9IHdzdWkuZ2V0V1NJQVBDb250ZXh0KCk7Ci0gICAgd3NpY29udGV4dC51cGRhdGVXU0lDb21wbGlhbmNlcyhQZXJzaXN0ZW50V1NJQ29udGV4dC5TVE9QX05PTl9XU0kpOwotICB9ICAKLSAgCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShWYWxpZGF0ZVN0b2NrUXVvdGVXU0lUZXN0Q2FzZS5jbGFzcywgIlZhbGlkYXRlU3RvY2tRdW90ZVdTSVRlc3RDYXNlIik7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3RWYWxpZGF0ZVN0b2NrUXVvdGVXU0koKSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICB2YWxpZGF0b3IgPSBXU0RMVmFsaWRhdG9yLmdldEluc3RhbmNlKCk7Ci0gICAgVVJMIHdzZGwgPSBQZXJmb3JtYW5jZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0RW50cnkoImRhdGEvU3RvY2tRdW90ZS9TdG9ja1F1b3RlLndzZGwiKTsKLSAgICBTdHJpbmcgcGF0aCA9IHdzZGwudG9TdHJpbmcoKTsKLQotICAgIHN0YXJ0TWVhc3VyaW5nKCk7CQotICAgIHZhbGlkYXRvci52YWxpZGF0ZShwYXRoKTsKLSAgICBzdG9wTWVhc3VyaW5nKCk7Ci0gICAgY29tbWl0TWVhc3VyZW1lbnRzKCk7Ci0gICAgYXNzZXJ0UGVyZm9ybWFuY2UoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2UvVmFsaWRhdGVXU0RMUHJvamVjdFRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9WYWxpZGF0ZVdTRExQcm9qZWN0VGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ZkMjVhMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9WYWxpZGF0ZVdTRExQcm9qZWN0VGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJ1bm5hYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlLkRpbWVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlLlBlcmZvcm1hbmNlVGVzdENhc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwub3BlcmF0aW9ucy5PbmVWYWxpZGF0b3JPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbi5XU1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXMuUGVyc2lzdGVudFdTSUNvbnRleHQ7Ci0KLS8qKgotICogVGVzdCBmb3IgdmFsaWRhdGlvbiBvZiA1MCBXU0RMIGZpbGVzIGluIHRoZSBzYW1wbGUgd29ya3NwYWNlLgotICogCi0gKiBAYXV0aG9yIEtpaHVwIEJvbywgSUJNCi0gKi8KLXB1YmxpYyBjbGFzcyBWYWxpZGF0ZVdTRExQcm9qZWN0VGVzdENhc2UgZXh0ZW5kcyBQZXJmb3JtYW5jZVRlc3RDYXNlIHsKLQkKLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IFRlc3RTdWl0ZShWYWxpZGF0ZVdTRExQcm9qZWN0VGVzdENhc2UuY2xhc3MsICJUZXN0Iik7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQotCSAqLwotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JICAgIHN1cGVyLnNldFVwKCk7Ci0JCS8vIFNldCB0aGUgV1MtSSBwcmVmZXJlbmNlIHRvIGlnbm9yZSBzbyBXUy1JIHZhbGlkYXRpb24gd2lsbCBub3QgYmUgcnVuLgotCQlXU1BsdWdpbiB3c3VpID0gV1NQbHVnaW4uZ2V0SW5zdGFuY2UoKTsKLQkJUGVyc2lzdGVudFdTSUNvbnRleHQgd3NpY29udGV4dCA9IHdzdWkuZ2V0V1NJU1NCUENvbnRleHQoKTsKLQkJd3NpY29udGV4dC51cGRhdGVXU0lDb21wbGlhbmNlcyhQZXJzaXN0ZW50V1NJQ29udGV4dC5JR05PUkVfTk9OX1dTSSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFdTRExQcm9qZWN0VmFsaWRhdGlvbigpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgcHJvamVjdERpciA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgicHJvamVjdERpciIpOwotCQlBc3NlcnQuYXNzZXJ0Tm90TnVsbChwcm9qZWN0RGlyKTsKLQkJaWYgKCFwcm9qZWN0RGlyLmVuZHNXaXRoKCIvIikgJiYgIXByb2plY3REaXIuZW5kc1dpdGgoIlxcIikpCi0JCQlwcm9qZWN0RGlyID0gcHJvamVjdERpciArICIvIjsKLQkJRmlsZSBkaXIgPSBuZXcgRmlsZShwcm9qZWN0RGlyKTsKLQkJaWYgKGRpci5leGlzdHMoKSAmJiBkaXIuaXNEaXJlY3RvcnkoKSkgewotCQkJSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdCgiV1NETFByb2plY3QiKTsKLQkJCXByb2plY3QuY3JlYXRlKG51bGwpOwotCQkJcHJvamVjdC5vcGVuKG51bGwpOwotCQkJY29weShkaXIsIHByb2plY3QpOwotCQkJam9pbkJhY2tncm91bmRKb2JzKCk7Ci0KLQkJCUlXb3Jrc3BhY2VSdW5uYWJsZSBteVJ1bm5hYmxlID0gbmV3IE9uZVZhbGlkYXRvck9wZXJhdGlvbigKLQkJCQkJcHJvamVjdCwKLSAgICAgICAgICBQZXJmb3JtYW5jZVBsdWdpbi5XU0RMX1ZBTElEQVRPUl9JRCwKLQkJCQkJdHJ1ZSwgCi0JCQkJCWZhbHNlKTsKLQkJCUlXb3Jrc3BhY2Ugd29ya3NwYWNlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpOwotCi0JCQl0YWdBc1N1bW1hcnkoIlZhbGlkYXRlIFdTREwgUHJvamVjdCIsIG5ldyBEaW1lbnNpb25bXSB7RGltZW5zaW9uLkVMQVBTRURfUFJPQ0VTUywgRGltZW5zaW9uLldPUktJTkdfU0VUIH0pOwotCQkJc3RhcnRNZWFzdXJpbmcoKTsKLQkJCXdvcmtzcGFjZS5ydW4obXlSdW5uYWJsZSwgbnVsbCk7Ci0JCQkvLyBwcm9qZWN0LmJ1aWxkKEluY3JlbWVudGFsUHJvamVjdEJ1aWxkZXIuQ0xFQU5fQlVJTEQsbnVsbCk7Ci0JCQlzdG9wTWVhc3VyaW5nKCk7Ci0JCQljb21taXRNZWFzdXJlbWVudHMoKTsKLQkJCWFzc2VydFBlcmZvcm1hbmNlKCk7Ci0JCX0gZWxzZQotCQkJZmFpbChkaXIudG9TdHJpbmcoKSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNvcHkoRmlsZSBzcmMsIElDb250YWluZXIgZGVzdCkgdGhyb3dzIENvcmVFeGNlcHRpb24sCi0JCQlGaWxlTm90Rm91bmRFeGNlcHRpb24gewotCQlGaWxlW10gY2hpbGRyZW4gPSBzcmMubGlzdEZpbGVzKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHsKLQkJCVN0cmluZyBuYW1lID0gY2hpbGRyZW5baV0uZ2V0TmFtZSgpOwotCQkJaWYgKGNoaWxkcmVuW2ldLmlzRGlyZWN0b3J5KCkpIHsKLQkJCQlJRm9sZGVyIGZvbGRlciA9IGRlc3QuZ2V0Rm9sZGVyKG5ldyBQYXRoKG5hbWUpKTsKLQkJCQlmb2xkZXIuY3JlYXRlKHRydWUsIHRydWUsIG51bGwpOwotCQkJCWNvcHkoY2hpbGRyZW5baV0sIGZvbGRlcik7Ci0JCQl9IGVsc2UgewotCQkJCUlGaWxlIGZpbGUgPSBkZXN0LmdldEZpbGUobmV3IFBhdGgobmFtZSkpOwotCQkJCWZpbGUuY3JlYXRlKG5ldyBGaWxlSW5wdXRTdHJlYW0oY2hpbGRyZW5baV0pLCB0cnVlLCBudWxsKTsKLQkJCX0KLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBqb2luQmFja2dyb3VuZEpvYnMoKSB7Ci0JCURpc3BsYXkuZ2V0RGVmYXVsdCgpLnN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpIHsKLQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQl0cnkgewotCQkJCQlQbGF0Zm9ybS5nZXRKb2JNYW5hZ2VyKCkuam9pbigKLQkJCQkJCQlSZXNvdXJjZXNQbHVnaW4uRkFNSUxZX0FVVE9fQlVJTEQsIG51bGwpOwotCQkJCX0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKLQkJCQl9Ci0JCQkJbG9uZyBzdGFydCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQkJCURpc3BsYXkgZGlzcGxheSA9IERpc3BsYXkuZ2V0RGVmYXVsdCgpOwotCQkJCXdoaWxlIChTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIHN0YXJ0IDwgNTAwMCkgewotCQkJCQlpZiAoIWRpc3BsYXkucmVhZEFuZERpc3BhdGNoKCkpIHsKLQkJCQkJCWRpc3BsYXkuc2xlZXAoKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvT3BlbjEwMEtCRmlsZVRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9PcGVuMTAwS0JGaWxlVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQ3NjM4MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9PcGVuMTAwS0JGaWxlVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLXB1YmxpYyBjbGFzcyBPcGVuMTAwS0JGaWxlVGVzdENhc2UgZXh0ZW5kcyBPcGVuV1NETEVkaXRvclRlc3RDYXNlCi17Ci0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0RmlsZVBhdGgoKQotICB7Ci0gICAgcmV0dXJuICJkYXRhLzEwMEtCLndzZGwiOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE9wZW4xMDBLQkZpbGUoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgc3VwZXIuZXhlY3V0ZSgpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0gICAgewotICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9PcGVuMTBLQkZpbGVUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvT3BlbjEwS0JGaWxlVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTcxZmYxMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9PcGVuMTBLQkZpbGVUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eTsKLQotcHVibGljIGNsYXNzIE9wZW4xMEtCRmlsZVRlc3RDYXNlIGV4dGVuZHMgT3BlbldTRExFZGl0b3JUZXN0Q2FzZQotewotICBwcm90ZWN0ZWQgU3RyaW5nIGdldEZpbGVQYXRoKCkKLSAgewotICAgIHJldHVybiAiZGF0YS8xMEtCLndzZGwiOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE9wZW4xMEtCRmlsZSgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBzdXBlci5leGVjdXRlKCk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLSAgICB7Ci0gICAgICBmYWlsKHQuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L09wZW4xS0JGaWxlVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L09wZW4xS0JGaWxlVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk2NmU0Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9PcGVuMUtCRmlsZVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5OwotCi1wdWJsaWMgY2xhc3MgT3BlbjFLQkZpbGVUZXN0Q2FzZSBleHRlbmRzIE9wZW5XU0RMRWRpdG9yVGVzdENhc2UKLXsKLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRGaWxlUGF0aCgpCi0gIHsKLSAgICByZXR1cm4gImRhdGEvMUtCLndzZGwiOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE9wZW4xS0JGaWxlKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgIHsKLSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvT3BlbjFNQkZpbGVUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvT3BlbjFNQkZpbGVUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDc0YzU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L09wZW4xTUJGaWxlVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLXB1YmxpYyBjbGFzcyBPcGVuMU1CRmlsZVRlc3RDYXNlIGV4dGVuZHMgT3BlbldTRExFZGl0b3JUZXN0Q2FzZQotewotICBwcm90ZWN0ZWQgU3RyaW5nIGdldEZpbGVQYXRoKCkKLSAgewotICAgIHJldHVybiAiZGF0YS8xTUIud3NkbCI7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0T3BlbjFNQkZpbGUoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgc3VwZXIuZXhlY3V0ZSgpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0gICAgewotICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9PcGVuMjAwS0JGaWxlVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L09wZW4yMDBLQkZpbGVUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTcyNjk2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L09wZW4yMDBLQkZpbGVUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eTsKLQotcHVibGljIGNsYXNzIE9wZW4yMDBLQkZpbGVUZXN0Q2FzZSBleHRlbmRzIE9wZW5XU0RMRWRpdG9yVGVzdENhc2UKLXsKLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRGaWxlUGF0aCgpCi0gIHsKLSAgICByZXR1cm4gImRhdGEvMjAwS0Iud3NkbCI7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0T3BlbjIwMEtCRmlsZSgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBzdXBlci5leGVjdXRlKCk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLSAgICB7Ci0gICAgICBmYWlsKHQuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L09wZW41MDBLQkZpbGVUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvT3BlbjUwMEtCRmlsZVRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiYjQxNDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvT3BlbjUwMEtCRmlsZVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5OwotCi1wdWJsaWMgY2xhc3MgT3BlbjUwMEtCRmlsZVRlc3RDYXNlIGV4dGVuZHMgT3BlbldTRExFZGl0b3JUZXN0Q2FzZQotewotICBwcm90ZWN0ZWQgU3RyaW5nIGdldEZpbGVQYXRoKCkKLSAgewotICAgIHJldHVybiAiZGF0YS81MDBLQi53c2RsIjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RPcGVuNTAwS0JGaWxlKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgIHsKLSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvT3BlbldTRExFZGl0b3JUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvT3BlbldTRExFZGl0b3JUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDQxM2Q2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L09wZW5XU0RMRWRpdG9yVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnRlc3RzLnBlcmZvcm1hbmNlLmludGVybmFsLnNjYWxhYmlsaXR5Lk9wZW5FZGl0b3JUZXN0Q2FzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5QZXJmb3JtYW5jZVBsdWdpbjsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIE9wZW5XU0RMRWRpdG9yVGVzdENhc2UgZXh0ZW5kcyBPcGVuRWRpdG9yVGVzdENhc2UKLXsKLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRFZGl0b3JJZCgpCi0gIHsKLSAgICByZXR1cm4gUGVyZm9ybWFuY2VQbHVnaW4uV1NETF9FRElUT1JfSUQ7Ci0gIH0KLQotICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJ1bmRsZUlkKCkKLSAgewotICAgIHJldHVybiBQZXJmb3JtYW5jZVBsdWdpbi5CVU5ETEVfSUQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdE9wZW5FZGl0b3J4MTAwVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdE9wZW5FZGl0b3J4MTAwVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNThiM2M3Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRPcGVuRWRpdG9yeDEwMFRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5OwotCi1wdWJsaWMgY2xhc3MgUmVwZWF0T3BlbkVkaXRvcngxMDBUZXN0Q2FzZSBleHRlbmRzIFJlcGVhdE9wZW5XU0RMRWRpdG9yVGVzdENhc2UKLXsKLSAgcHJvdGVjdGVkIGludCBnZXRSZXBlYXRDb3VudCgpCi0gIHsKLSAgICByZXR1cm4gMTAwOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE9wZW54MTAwKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgIHsKLSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0T3BlbkVkaXRvcngxMFRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRPcGVuRWRpdG9yeDEwVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ2ZWRmMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRPcGVuRWRpdG9yeDEwVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLXB1YmxpYyBjbGFzcyBSZXBlYXRPcGVuRWRpdG9yeDEwVGVzdENhc2UgZXh0ZW5kcyBSZXBlYXRPcGVuV1NETEVkaXRvclRlc3RDYXNlCi17Ci0gIHByb3RlY3RlZCBpbnQgZ2V0UmVwZWF0Q291bnQoKQotICB7Ci0gICAgcmV0dXJuIDEwOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE9wZW54MTAoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgc3VwZXIuZXhlY3V0ZSgpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0gICAgewotICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRPcGVuRWRpdG9yeDFUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0T3BlbkVkaXRvcngxVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjNjOGE1Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRPcGVuRWRpdG9yeDFUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eTsKLQotcHVibGljIGNsYXNzIFJlcGVhdE9wZW5FZGl0b3J4MVRlc3RDYXNlIGV4dGVuZHMgUmVwZWF0T3BlbldTRExFZGl0b3JUZXN0Q2FzZQotewotICBwcm90ZWN0ZWQgaW50IGdldFJlcGVhdENvdW50KCkKLSAgewotICAgIHJldHVybiAxOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE9wZW54MSgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBzdXBlci5leGVjdXRlKCk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLSAgICB7Ci0gICAgICBmYWlsKHQuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdE9wZW5FZGl0b3J4MjVUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0T3BlbkVkaXRvcngyNVRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3NzVhN2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0T3BlbkVkaXRvcngyNVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5OwotCi1wdWJsaWMgY2xhc3MgUmVwZWF0T3BlbkVkaXRvcngyNVRlc3RDYXNlIGV4dGVuZHMgUmVwZWF0T3BlbldTRExFZGl0b3JUZXN0Q2FzZQotewotICBwcm90ZWN0ZWQgaW50IGdldFJlcGVhdENvdW50KCkKLSAgewotICAgIHJldHVybiAyNTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RPcGVueDI1KCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgIHsKLSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0T3BlbkVkaXRvcng1MFRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRPcGVuRWRpdG9yeDUwVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWExNzI5OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRPcGVuRWRpdG9yeDUwVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLXB1YmxpYyBjbGFzcyBSZXBlYXRPcGVuRWRpdG9yeDUwVGVzdENhc2UgZXh0ZW5kcyBSZXBlYXRPcGVuV1NETEVkaXRvclRlc3RDYXNlCi17Ci0gIHByb3RlY3RlZCBpbnQgZ2V0UmVwZWF0Q291bnQoKQotICB7Ci0gICAgcmV0dXJuIDUwOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE9wZW54NTAoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgc3VwZXIuZXhlY3V0ZSgpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0gICAgewotICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRPcGVuRWRpdG9yeDc1VGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdE9wZW5FZGl0b3J4NzVUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODg2NWQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdE9wZW5FZGl0b3J4NzVUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eTsKLQotcHVibGljIGNsYXNzIFJlcGVhdE9wZW5FZGl0b3J4NzVUZXN0Q2FzZSBleHRlbmRzIFJlcGVhdE9wZW5XU0RMRWRpdG9yVGVzdENhc2UKLXsKLSAgcHJvdGVjdGVkIGludCBnZXRSZXBlYXRDb3VudCgpCi0gIHsKLSAgICByZXR1cm4gNzU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0T3Blbng3NSgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBzdXBlci5leGVjdXRlKCk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLSAgICB7Ci0gICAgICBmYWlsKHQuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdE9wZW5XU0RMRWRpdG9yVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdE9wZW5XU0RMRWRpdG9yVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzk1MjYzZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRPcGVuV1NETEVkaXRvclRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi50ZXN0cy5wZXJmb3JtYW5jZS5pbnRlcm5hbC5zY2FsYWJpbGl0eS5SZXBlYXRPcGVuRWRpdG9yVGVzdENhc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UuUGVyZm9ybWFuY2VQbHVnaW47Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBSZXBlYXRPcGVuV1NETEVkaXRvclRlc3RDYXNlIGV4dGVuZHMgUmVwZWF0T3BlbkVkaXRvclRlc3RDYXNlCi17Ci0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0RWRpdG9ySWQoKQotICB7Ci0gICAgcmV0dXJuIFBlcmZvcm1hbmNlUGx1Z2luLldTRExfRURJVE9SX0lEOwotICB9Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRCdW5kbGVJZCgpCi0gIHsKLSAgICByZXR1cm4gUGVyZm9ybWFuY2VQbHVnaW4uQlVORExFX0lEOwotICB9Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRGaWxlUGF0aCgpCi0gIHsKLSAgICByZXR1cm4gImRhdGEvMTAwS0Iud3NkbCI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdFJ1bldTRExWYWxpZGF0b3JUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0UnVuV1NETFZhbGlkYXRvclRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmYzU0ZDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0UnVuV1NETFZhbGlkYXRvclRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0qIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0qIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0qIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0qCi0qIENvbnRyaWJ1dG9yczoKLSogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAKLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udGVzdHMucGVyZm9ybWFuY2UuaW50ZXJuYWwuc2NhbGFiaWxpdHkuUmVwZWF0UnVuVmFsaWRhdG9yVGVzdENhc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UuUGVyZm9ybWFuY2VQbHVnaW47Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBSZXBlYXRSdW5XU0RMVmFsaWRhdG9yVGVzdENhc2UgZXh0ZW5kcyBSZXBlYXRSdW5WYWxpZGF0b3JUZXN0Q2FzZQotewotICBwcm90ZWN0ZWQgU3RyaW5nIGdldFZhbGlkYXRvcklkKCkKLSAgewotICAgIHJldHVybiBQZXJmb3JtYW5jZVBsdWdpbi5XU0RMX1ZBTElEQVRPUl9JRDsKLSAgfQotCi0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0QnVuZGxlSWQoKQotICB7Ci0gICAgcmV0dXJuIFBlcmZvcm1hbmNlUGx1Z2luLkJVTkRMRV9JRDsKLSAgfQotCi0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0RmlsZVBhdGgoKQotICB7Ci0gICAgcmV0dXJuICJkYXRhLzEwMEtCLndzZGwiOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdFZhbGlkYXRleDEwMFRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRWYWxpZGF0ZXgxMDBUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTU1NGZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdFZhbGlkYXRleDEwMFRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5OwotCi1wdWJsaWMgY2xhc3MgUmVwZWF0VmFsaWRhdGV4MTAwVGVzdENhc2UgZXh0ZW5kcyBSZXBlYXRSdW5XU0RMVmFsaWRhdG9yVGVzdENhc2UKLXsKLSAgcHJvdGVjdGVkIGludCBnZXRSZXBlYXRDb3VudCgpCi0gIHsKLSAgICByZXR1cm4gMTAwOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFZhbGlkYXRleDEwMCgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBzdXBlci5leGVjdXRlKCk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLSAgICB7Ci0gICAgICBmYWlsKHQuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdFZhbGlkYXRleDEwVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdFZhbGlkYXRleDEwVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTBiN2JiMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRWYWxpZGF0ZXgxMFRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5OwotCi1wdWJsaWMgY2xhc3MgUmVwZWF0VmFsaWRhdGV4MTBUZXN0Q2FzZSBleHRlbmRzIFJlcGVhdFJ1bldTRExWYWxpZGF0b3JUZXN0Q2FzZQotewotICBwcm90ZWN0ZWQgaW50IGdldFJlcGVhdENvdW50KCkKLSAgewotICAgIHJldHVybiAxMDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RWYWxpZGF0ZXgxMCgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBzdXBlci5leGVjdXRlKCk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLSAgICB7Ci0gICAgICBmYWlsKHQuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdFZhbGlkYXRleDFUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0VmFsaWRhdGV4MVRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiMjExNjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUmVwZWF0VmFsaWRhdGV4MVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5OwotCi1wdWJsaWMgY2xhc3MgUmVwZWF0VmFsaWRhdGV4MVRlc3RDYXNlIGV4dGVuZHMgUmVwZWF0UnVuV1NETFZhbGlkYXRvclRlc3RDYXNlCi17Ci0gIHByb3RlY3RlZCBpbnQgZ2V0UmVwZWF0Q291bnQoKQotICB7Ci0gICAgcmV0dXJuIDE7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0VmFsaWRhdGV4MSgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBzdXBlci5leGVjdXRlKCk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLSAgICB7Ci0gICAgICBmYWlsKHQuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdFZhbGlkYXRleDI1VGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdFZhbGlkYXRleDI1VGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzg3N2Q2OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRWYWxpZGF0ZXgyNVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5OwotCi1wdWJsaWMgY2xhc3MgUmVwZWF0VmFsaWRhdGV4MjVUZXN0Q2FzZSBleHRlbmRzIFJlcGVhdFJ1bldTRExWYWxpZGF0b3JUZXN0Q2FzZQotewotICBwcm90ZWN0ZWQgaW50IGdldFJlcGVhdENvdW50KCkKLSAgewotICAgIHJldHVybiAyNTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RWYWxpZGF0ZXgyNSgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBzdXBlci5leGVjdXRlKCk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLSAgICB7Ci0gICAgICBmYWlsKHQuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdFZhbGlkYXRleDUwVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdFZhbGlkYXRleDUwVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRiZDE0Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRWYWxpZGF0ZXg1MFRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5OwotCi1wdWJsaWMgY2xhc3MgUmVwZWF0VmFsaWRhdGV4NTBUZXN0Q2FzZSBleHRlbmRzIFJlcGVhdFJ1bldTRExWYWxpZGF0b3JUZXN0Q2FzZQotewotICBwcm90ZWN0ZWQgaW50IGdldFJlcGVhdENvdW50KCkKLSAgewotICAgIHJldHVybiA1MDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RWYWxpZGF0ZXg1MCgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBzdXBlci5leGVjdXRlKCk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLSAgICB7Ci0gICAgICBmYWlsKHQuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdFZhbGlkYXRleDc1VGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1JlcGVhdFZhbGlkYXRleDc1VGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdjYmI2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9SZXBlYXRWYWxpZGF0ZXg3NVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5OwotCi1wdWJsaWMgY2xhc3MgUmVwZWF0VmFsaWRhdGV4NzVUZXN0Q2FzZSBleHRlbmRzIFJlcGVhdFJ1bldTRExWYWxpZGF0b3JUZXN0Q2FzZQotewotICBwcm90ZWN0ZWQgaW50IGdldFJlcGVhdENvdW50KCkKLSAgewotICAgIHJldHVybiA3NTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RWYWxpZGF0ZXg3NSgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBzdXBlci5leGVjdXRlKCk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLSAgICB7Ci0gICAgICBmYWlsKHQuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1J1bldTRExWYWxpZGF0b3JUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUnVuV1NETFZhbGlkYXRvclRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiNzRkYjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvUnVuV1NETFZhbGlkYXRvclRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0qIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0qIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0qIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0qCi0qIENvbnRyaWJ1dG9yczoKLSogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAKLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udGVzdHMucGVyZm9ybWFuY2UuaW50ZXJuYWwuc2NhbGFiaWxpdHkuUnVuVmFsaWRhdG9yVGVzdENhc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UuUGVyZm9ybWFuY2VQbHVnaW47Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBSdW5XU0RMVmFsaWRhdG9yVGVzdENhc2UgZXh0ZW5kcyBSdW5WYWxpZGF0b3JUZXN0Q2FzZQotewotCi0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0VmFsaWRhdG9ySWQoKQotICB7Ci0gICAgICByZXR1cm4gUGVyZm9ybWFuY2VQbHVnaW4uV1NETF9WQUxJREFUT1JfSUQ7Ci0gIH0KLQotICBwcm90ZWN0ZWQgU3RyaW5nIGdldEJ1bmRsZUlkKCkKLSAgewotICAgICAgcmV0dXJuIFBlcmZvcm1hbmNlUGx1Z2luLkJVTkRMRV9JRDsKLSAgfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwMDBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwMDBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlMjA3NjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMDAwV1NETHNDcm9zc0RlcGVuZHNUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbi5XU1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXMuUGVyc2lzdGVudFdTSUNvbnRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBWYWxpZGF0ZTEwMDBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlIGV4dGVuZHMgUnVuV1NETFZhbGlkYXRvclRlc3RDYXNlCi17Ci0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQlXU1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0V1NJQVBDb250ZXh0KCkudXBkYXRlV1NJQ29tcGxpYW5jZXMoUGVyc2lzdGVudFdTSUNvbnRleHQuSUdOT1JFX05PTl9XU0kpOwotCQlXU1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0V1NJU1NCUENvbnRleHQoKS51cGRhdGVXU0lDb21wbGlhbmNlcyhQZXJzaXN0ZW50V1NJQ29udGV4dC5JR05PUkVfTk9OX1dTSSk7Ci0JICAgIElQcm9qZWN0IHByb2plY3QgPSBjcmVhdGVQcm9qZWN0KCJzcCIpOwotCSAgICBTdHJpbmcgYnVuZGxlSWQgPSBnZXRCdW5kbGVJZCgpOwotCSAgICBmb3IoaW50IGkgPSAxOyBpIDwgMTAwMDsgaSsrKQotCSAgICB7Ci0JICAgICAgY29weUZpbGUoYnVuZGxlSWQsICJkYXRhLzEwMDBXU0RMc0Nyb3NzRGVwZW5kcy9zYW1wbGUiICsgaSArIi53c2RsIiwgcHJvamVjdCk7Ci0JICAgIH0KLQkgICAgc3VwZXIuc2V0VXAoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgU3RyaW5nIGdldEZpbGVQYXRoKCkKLQl7Ci0JICAgIHJldHVybiAiZGF0YS8xMDAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMC53c2RsIjsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFZhbGlkYXRlMTAwMFdTRExzQ3Jvc3NEZXBlbmRzKCkKLQl7Ci0JICAgIHRyeQotCSAgICB7Ci0JICAgICAgc3VwZXIuZXhlY3V0ZSgpOwotCSAgICB9Ci0JICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLQkgICAgewotCSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwotCSAgICB9Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwMDBXU0RMc05vRGVwZW5kc1Rlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwMDBXU0RMc05vRGVwZW5kc1Rlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjMWVlODYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMDAwV1NETHNOb0RlcGVuZHNUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbi5XU1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXMuUGVyc2lzdGVudFdTSUNvbnRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBWYWxpZGF0ZTEwMDBXU0RMc05vRGVwZW5kc1Rlc3RDYXNlIGV4dGVuZHMgUnVuV1NETFZhbGlkYXRvclRlc3RDYXNlCi17Ci0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQlXU1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0V1NJQVBDb250ZXh0KCkudXBkYXRlV1NJQ29tcGxpYW5jZXMoUGVyc2lzdGVudFdTSUNvbnRleHQuSUdOT1JFX05PTl9XU0kpOwotCQlXU1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0V1NJU1NCUENvbnRleHQoKS51cGRhdGVXU0lDb21wbGlhbmNlcyhQZXJzaXN0ZW50V1NJQ29udGV4dC5JR05PUkVfTk9OX1dTSSk7Ci0JICAgIElQcm9qZWN0IHByb2plY3QgPSBjcmVhdGVQcm9qZWN0KCJzcCIpOwotCSAgICBTdHJpbmcgYnVuZGxlSWQgPSBnZXRCdW5kbGVJZCgpOwotCSAgICBmb3IoaW50IGkgPSAxOyBpIDwgMTAwMDsgaSsrKQotCSAgICB7Ci0JICAgICAgY29weUZpbGUoYnVuZGxlSWQsICJkYXRhLzEwMDBXU0RMc05vRGVwZW5kcy9zYW1wbGUiICsgaSArIi53c2RsIiwgcHJvamVjdCk7Ci0JICAgIH0KLQkgICAgc3VwZXIuc2V0VXAoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgU3RyaW5nIGdldEZpbGVQYXRoKCkKLQl7Ci0JICAgIHJldHVybiAiZGF0YS8xMDAwV1NETHNOb0RlcGVuZHMvc2FtcGxlMC53c2RsIjsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFZhbGlkYXRlMTAwMFdTRExzTm9EZXBlbmRzKCkKLQl7Ci0JICAgIHRyeQotCSAgICB7Ci0JICAgICAgc3VwZXIuZXhlY3V0ZSgpOwotCSAgICB9Ci0JICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLQkgICAgewotCSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwotCSAgICB9Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwMDBXU0RMc1hTRERlcGVuZHNUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMDAwV1NETHNYU0REZXBlbmRzVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWM0MzI4NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwMDBXU0RMc1hTRERlcGVuZHNUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbi5XU1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXMuUGVyc2lzdGVudFdTSUNvbnRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBWYWxpZGF0ZTEwMDBXU0RMc1hTRERlcGVuZHNUZXN0Q2FzZSBleHRlbmRzIFJ1bldTRExWYWxpZGF0b3JUZXN0Q2FzZQotewotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJV1NQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFdTSUFQQ29udGV4dCgpLnVwZGF0ZVdTSUNvbXBsaWFuY2VzKFBlcnNpc3RlbnRXU0lDb250ZXh0LklHTk9SRV9OT05fV1NJKTsKLQkJV1NQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFdTSVNTQlBDb250ZXh0KCkudXBkYXRlV1NJQ29tcGxpYW5jZXMoUGVyc2lzdGVudFdTSUNvbnRleHQuSUdOT1JFX05PTl9XU0kpOwotCSAgICBJUHJvamVjdCBwcm9qZWN0ID0gY3JlYXRlUHJvamVjdCgic3AiKTsKLQkgICAgU3RyaW5nIGJ1bmRsZUlkID0gZ2V0QnVuZGxlSWQoKTsKLQkgICAgZm9yKGludCBpID0gMTsgaSA8IDEwMDA7IGkrKykKLQkgICAgewotCSAgICAgIGNvcHlGaWxlKGJ1bmRsZUlkLCAiZGF0YS8xMDAwV1NETHNYU0REZXBlbmRzL3NhbXBsZSIgKyBpICsiLndzZGwiLCBwcm9qZWN0KTsKLQkgICAgfQotCSAgICBzdXBlci5zZXRVcCgpOwotCX0KLQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0RmlsZVBhdGgoKQotCXsKLQkgICAgcmV0dXJuICJkYXRhLzEwMDBXU0RMc1hTRERlcGVuZHMvc2FtcGxlMC53c2RsIjsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFZhbGlkYXRlMTAwMFdTRExzWFNERGVwZW5kcygpCi0JewotCSAgICB0cnkKLQkgICAgewotCSAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKLQkgICAgfQotCSAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0JICAgIHsKLQkgICAgICBmYWlsKHQuZ2V0TWVzc2FnZSgpKTsKLQkgICAgfQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMDBLQkZpbGVUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMDBLQkZpbGVUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODVkODEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTAwS0JGaWxlVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eTsKLQotCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGUxMDBLQkZpbGVUZXN0Q2FzZSBleHRlbmRzIFJ1bldTRExWYWxpZGF0b3JUZXN0Q2FzZQotewotICBwcm90ZWN0ZWQgU3RyaW5nIGdldEZpbGVQYXRoKCkKLSAgewotICAgIHJldHVybiAiZGF0YS8xMDBLQi53c2RsIjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RPcGVuMTAwS0JGaWxlKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgIHsKLSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMDBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwMFdTRExzQ3Jvc3NEZXBlbmRzVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmMzN2MzNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwMFdTRExzQ3Jvc3NEZXBlbmRzVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW4uV1NQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzLlBlcnNpc3RlbnRXU0lDb250ZXh0OwotCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGUxMDBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlIGV4dGVuZHMgUnVuV1NETFZhbGlkYXRvclRlc3RDYXNlCi17Ci0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQlXU1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0V1NJQVBDb250ZXh0KCkudXBkYXRlV1NJQ29tcGxpYW5jZXMoUGVyc2lzdGVudFdTSUNvbnRleHQuSUdOT1JFX05PTl9XU0kpOwotCQlXU1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0V1NJU1NCUENvbnRleHQoKS51cGRhdGVXU0lDb21wbGlhbmNlcyhQZXJzaXN0ZW50V1NJQ29udGV4dC5JR05PUkVfTk9OX1dTSSk7Ci0JICAgIElQcm9qZWN0IHByb2plY3QgPSBjcmVhdGVQcm9qZWN0KCJzcCIpOwotCSAgICBTdHJpbmcgYnVuZGxlSWQgPSBnZXRCdW5kbGVJZCgpOwotCSAgICBmb3IoaW50IGkgPSAxOyBpIDwgMTAwOyBpKyspCi0JICAgIHsKLQkgICAgICBjb3B5RmlsZShidW5kbGVJZCwgImRhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlIiArIGkgKyIud3NkbCIsIHByb2plY3QpOwotCSAgICB9Ci0JICAgIHN1cGVyLnNldFVwKCk7Ci0JfQotCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRGaWxlUGF0aCgpCi0JewotCSAgICByZXR1cm4gImRhdGEvMTAwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMC53c2RsIjsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFZhbGlkYXRlMTAwV1NETHNDcm9zc0RlcGVuZHMoKQotCXsKLQkgICAgdHJ5Ci0JICAgIHsKLQkgICAgICBzdXBlci5leGVjdXRlKCk7Ci0JICAgIH0KLQkgICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotCSAgICB7Ci0JICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7Ci0JICAgIH0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTAwV1NETHNOb0RlcGVuZHNUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMDBXU0RMc05vRGVwZW5kc1Rlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0OWNjM2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMDBXU0RMc05vRGVwZW5kc1Rlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V1NJQ29udGV4dDsKLQotcHVibGljIGNsYXNzIFZhbGlkYXRlMTAwV1NETHNOb0RlcGVuZHNUZXN0Q2FzZSBleHRlbmRzIFJ1bldTRExWYWxpZGF0b3JUZXN0Q2FzZQotewotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJV1NQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFdTSUFQQ29udGV4dCgpLnVwZGF0ZVdTSUNvbXBsaWFuY2VzKFBlcnNpc3RlbnRXU0lDb250ZXh0LklHTk9SRV9OT05fV1NJKTsKLQkJV1NQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFdTSVNTQlBDb250ZXh0KCkudXBkYXRlV1NJQ29tcGxpYW5jZXMoUGVyc2lzdGVudFdTSUNvbnRleHQuSUdOT1JFX05PTl9XU0kpOwotCSAgICBJUHJvamVjdCBwcm9qZWN0ID0gY3JlYXRlUHJvamVjdCgic3AiKTsKLQkgICAgU3RyaW5nIGJ1bmRsZUlkID0gZ2V0QnVuZGxlSWQoKTsKLQkgICAgZm9yKGludCBpID0gMTsgaSA8IDEwMDsgaSsrKQotCSAgICB7Ci0JICAgICAgY29weUZpbGUoYnVuZGxlSWQsICJkYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZSIgKyBpICsiLndzZGwiLCBwcm9qZWN0KTsKLQkgICAgfQotCSAgICBzdXBlci5zZXRVcCgpOwotCX0KLQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0RmlsZVBhdGgoKQotCXsKLQkgICAgcmV0dXJuICJkYXRhLzEwMFdTRExzTm9EZXBlbmRzL3NhbXBsZTAud3NkbCI7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RWYWxpZGF0ZTEwMFdTRExzTm9EZXBlbmRzKCkKLQl7Ci0JICAgIHRyeQotCSAgICB7Ci0JICAgICAgc3VwZXIuZXhlY3V0ZSgpOwotCSAgICB9Ci0JICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLQkgICAgewotCSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwotCSAgICB9Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwMFdTRExzWFNERGVwZW5kc1Rlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwMFdTRExzWFNERGVwZW5kc1Rlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlNTM3YTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMDBXU0RMc1hTRERlcGVuZHNUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbi5XU1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXMuUGVyc2lzdGVudFdTSUNvbnRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBWYWxpZGF0ZTEwMFdTRExzWFNERGVwZW5kc1Rlc3RDYXNlIGV4dGVuZHMgUnVuV1NETFZhbGlkYXRvclRlc3RDYXNlCi17Ci0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQlXU1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0V1NJQVBDb250ZXh0KCkudXBkYXRlV1NJQ29tcGxpYW5jZXMoUGVyc2lzdGVudFdTSUNvbnRleHQuSUdOT1JFX05PTl9XU0kpOwotCQlXU1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0V1NJU1NCUENvbnRleHQoKS51cGRhdGVXU0lDb21wbGlhbmNlcyhQZXJzaXN0ZW50V1NJQ29udGV4dC5JR05PUkVfTk9OX1dTSSk7Ci0JICAgIElQcm9qZWN0IHByb2plY3QgPSBjcmVhdGVQcm9qZWN0KCJzcCIpOwotCSAgICBTdHJpbmcgYnVuZGxlSWQgPSBnZXRCdW5kbGVJZCgpOwotCSAgICBmb3IoaW50IGkgPSAxOyBpIDwgMTAwOyBpKyspCi0JICAgIHsKLQkgICAgICBjb3B5RmlsZShidW5kbGVJZCwgImRhdGEvMTAwV1NETHNYU0REZXBlbmRzL3NhbXBsZSIgKyBpICsiLndzZGwiLCBwcm9qZWN0KTsKLQkgICAgfQotCSAgICBzdXBlci5zZXRVcCgpOwotCX0KLQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0RmlsZVBhdGgoKQotCXsKLQkgICAgcmV0dXJuICJkYXRhLzEwMFdTRExzWFNERGVwZW5kcy9zYW1wbGUwLnhzZCI7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RWYWxpZGF0ZTEwMFdTRExzWFNERGVwZW5kcygpCi0JewotCSAgICB0cnkKLQkgICAgewotCSAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKLQkgICAgfQotCSAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0JICAgIHsKLQkgICAgICBmYWlsKHQuZ2V0TWVzc2FnZSgpKTsKLQkgICAgfQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMEtCRmlsZVRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwS0JGaWxlVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOThkMjIzOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwS0JGaWxlVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eTsKLQotcHVibGljIGNsYXNzIFZhbGlkYXRlMTBLQkZpbGVUZXN0Q2FzZSBleHRlbmRzIFJ1bldTRExWYWxpZGF0b3JUZXN0Q2FzZQotewotICBwcm90ZWN0ZWQgU3RyaW5nIGdldEZpbGVQYXRoKCkKLSAgewotICAgIHJldHVybiAiZGF0YS8xMEtCLndzZGwiOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE9wZW4xMEtCRmlsZSgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBzdXBlci5leGVjdXRlKCk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLSAgICB7Ci0gICAgICBmYWlsKHQuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwV1NETHNDcm9zc0RlcGVuZHNUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwY2Y4MDUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V1NJQ29udGV4dDsKLQotcHVibGljIGNsYXNzIFZhbGlkYXRlMTBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlIGV4dGVuZHMgUnVuV1NETFZhbGlkYXRvclRlc3RDYXNlCi17Ci0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQlXU1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0V1NJQVBDb250ZXh0KCkudXBkYXRlV1NJQ29tcGxpYW5jZXMoUGVyc2lzdGVudFdTSUNvbnRleHQuSUdOT1JFX05PTl9XU0kpOwotCQlXU1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0V1NJU1NCUENvbnRleHQoKS51cGRhdGVXU0lDb21wbGlhbmNlcyhQZXJzaXN0ZW50V1NJQ29udGV4dC5JR05PUkVfTk9OX1dTSSk7Ci0JICAgIElQcm9qZWN0IHByb2plY3QgPSBjcmVhdGVQcm9qZWN0KCJzcCIpOwotCSAgICBTdHJpbmcgYnVuZGxlSWQgPSBnZXRCdW5kbGVJZCgpOwotCSAgICBmb3IoaW50IGkgPSAxOyBpIDwgMTA7IGkrKykKLQkgICAgewotCSAgICAgIGNvcHlGaWxlKGJ1bmRsZUlkLCAiZGF0YS8xMFdTRExzQ3Jvc3NEZXBlbmRzL3NhbXBsZSIgKyBpICsiLndzZGwiLCBwcm9qZWN0KTsKLQkgICAgfQotCSAgICBzdXBlci5zZXRVcCgpOwotCX0KLQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0RmlsZVBhdGgoKQotCXsKLQkgICAgcmV0dXJuICJkYXRhLzEwV1NETHNDcm9zc0RlcGVuZHMvc2FtcGxlMC53c2RsIjsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFZhbGlkYXRlMTBXU0RMc0Nyb3NzRGVwZW5kcygpCi0JewotCSAgICB0cnkKLQkgICAgewotCSAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKLQkgICAgfQotCSAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0JICAgIHsKLQkgICAgICBmYWlsKHQuZ2V0TWVzc2FnZSgpKTsKLQkgICAgfQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMFdTRExzTm9EZXBlbmRzVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTBXU0RMc05vRGVwZW5kc1Rlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyMWY5MzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxMFdTRExzTm9EZXBlbmRzVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wbHVnaW4uV1NQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnByZWZlcmVuY2VzLlBlcnNpc3RlbnRXU0lDb250ZXh0OwotCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGUxMFdTRExzTm9EZXBlbmRzVGVzdENhc2UgZXh0ZW5kcyBSdW5XU0RMVmFsaWRhdG9yVGVzdENhc2UKLXsKLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCVdTUGx1Z2luLmdldERlZmF1bHQoKS5nZXRXU0lBUENvbnRleHQoKS51cGRhdGVXU0lDb21wbGlhbmNlcyhQZXJzaXN0ZW50V1NJQ29udGV4dC5JR05PUkVfTk9OX1dTSSk7Ci0JCVdTUGx1Z2luLmdldERlZmF1bHQoKS5nZXRXU0lTU0JQQ29udGV4dCgpLnVwZGF0ZVdTSUNvbXBsaWFuY2VzKFBlcnNpc3RlbnRXU0lDb250ZXh0LklHTk9SRV9OT05fV1NJKTsKLQkgICAgSVByb2plY3QgcHJvamVjdCA9IGNyZWF0ZVByb2plY3QoInNwIik7Ci0JICAgIFN0cmluZyBidW5kbGVJZCA9IGdldEJ1bmRsZUlkKCk7Ci0JICAgIGZvcihpbnQgaSA9IDE7IGkgPCAxMDsgaSsrKQotCSAgICB7Ci0JICAgICAgY29weUZpbGUoYnVuZGxlSWQsICJkYXRhLzEwV1NETHNOb0RlcGVuZHMvc2FtcGxlIiArIGkgKyIud3NkbCIsIHByb2plY3QpOwotCSAgICB9Ci0JICAgIHN1cGVyLnNldFVwKCk7Ci0JfQotCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRGaWxlUGF0aCgpCi0JewotCSAgICByZXR1cm4gImRhdGEvMTBXU0RMc05vRGVwZW5kcy9zYW1wbGUwLndzZGwiOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VmFsaWRhdGUxMFdTRExzTm9EZXBlbmRzKCkKLQl7Ci0JICAgIHRyeQotCSAgICB7Ci0JICAgICAgc3VwZXIuZXhlY3V0ZSgpOwotCSAgICB9Ci0JICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLQkgICAgewotCSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwotCSAgICB9Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTEwV1NETHNYU0REZXBlbmRzVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTBXU0RMc1hTRERlcGVuZHNUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MmEyOTZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMTBXU0RMc1hTRERlcGVuZHNUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzLmludGVybmFsLnBsdWdpbi5XU1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucHJlZmVyZW5jZXMuUGVyc2lzdGVudFdTSUNvbnRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBWYWxpZGF0ZTEwV1NETHNYU0REZXBlbmRzVGVzdENhc2UgZXh0ZW5kcyBSdW5XU0RMVmFsaWRhdG9yVGVzdENhc2UKLXsKLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCVdTUGx1Z2luLmdldERlZmF1bHQoKS5nZXRXU0lBUENvbnRleHQoKS51cGRhdGVXU0lDb21wbGlhbmNlcyhQZXJzaXN0ZW50V1NJQ29udGV4dC5JR05PUkVfTk9OX1dTSSk7Ci0JCVdTUGx1Z2luLmdldERlZmF1bHQoKS5nZXRXU0lTU0JQQ29udGV4dCgpLnVwZGF0ZVdTSUNvbXBsaWFuY2VzKFBlcnNpc3RlbnRXU0lDb250ZXh0LklHTk9SRV9OT05fV1NJKTsKLQkgICAgSVByb2plY3QgcHJvamVjdCA9IGNyZWF0ZVByb2plY3QoInNwIik7Ci0JICAgIFN0cmluZyBidW5kbGVJZCA9IGdldEJ1bmRsZUlkKCk7Ci0JICAgIGZvcihpbnQgaSA9IDE7IGkgPCAxMDsgaSsrKQotCSAgICB7Ci0JICAgICAgY29weUZpbGUoYnVuZGxlSWQsICJkYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZSIgKyBpICsiLndzZGwiLCBwcm9qZWN0KTsKLQkgICAgfQotCSAgICBzdXBlci5zZXRVcCgpOwotCX0KLQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0RmlsZVBhdGgoKQotCXsKLQkgICAgcmV0dXJuICJkYXRhLzEwV1NETHNYU0REZXBlbmRzL3NhbXBsZTAueHNkIjsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFZhbGlkYXRlMTBXU0RMc1hTRERlcGVuZHMoKQotCXsKLQkgICAgdHJ5Ci0JICAgIHsKLQkgICAgICBzdXBlci5leGVjdXRlKCk7Ci0JICAgIH0KLQkgICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotCSAgICB7Ci0JICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7Ci0JICAgIH0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMUtCRmlsZVRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTFLQkZpbGVUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWUzODBhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMUtCRmlsZVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLXB1YmxpYyBjbGFzcyBWYWxpZGF0ZTFLQkZpbGVUZXN0Q2FzZSBleHRlbmRzIFJ1bldTRExWYWxpZGF0b3JUZXN0Q2FzZQotewotICBwcm90ZWN0ZWQgU3RyaW5nIGdldEZpbGVQYXRoKCkKLSAgewotICAgIHJldHVybiAiZGF0YS8xS0Iud3NkbCI7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0T3BlbjFLQkZpbGUoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgc3VwZXIuZXhlY3V0ZSgpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0gICAgewotICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTFNQkZpbGVUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUxTUJGaWxlVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjU4Nzc5OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTFNQkZpbGVUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5OwotCi1wdWJsaWMgY2xhc3MgVmFsaWRhdGUxTUJGaWxlVGVzdENhc2UgZXh0ZW5kcyBSdW5XU0RMVmFsaWRhdG9yVGVzdENhc2UKLXsKLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRGaWxlUGF0aCgpCi0gIHsKLSAgICByZXR1cm4gImRhdGEvMU1CLndzZGwiOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE9wZW4xTUJGaWxlKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHN1cGVyLmV4ZWN1dGUoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiB0KQotICAgIHsKLSAgICAgIGZhaWwodC5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUyMDBLQkZpbGVUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvVmFsaWRhdGUyMDBLQkZpbGVUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjg1MWQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlMjAwS0JGaWxlVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eTsKLQotcHVibGljIGNsYXNzIFZhbGlkYXRlMjAwS0JGaWxlVGVzdENhc2UgZXh0ZW5kcyBSdW5XU0RMVmFsaWRhdG9yVGVzdENhc2UKLXsKLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRGaWxlUGF0aCgpCi0gIHsKLSAgICByZXR1cm4gImRhdGEvMjAwS0Iud3NkbCI7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0T3BlbjIwMEtCRmlsZSgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBzdXBlci5leGVjdXRlKCk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gdCkKLSAgICB7Ci0gICAgICBmYWlsKHQuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlNTAwS0JGaWxlVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BlcmZvcm1hbmNlL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3BlcmZvcm1hbmNlL3NjYWxhYmlsaXR5L1ZhbGlkYXRlNTAwS0JGaWxlVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjEyY2IyYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9WYWxpZGF0ZTUwMEtCRmlsZVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHk7Ci0KLXB1YmxpYyBjbGFzcyBWYWxpZGF0ZTUwMEtCRmlsZVRlc3RDYXNlIGV4dGVuZHMgUnVuV1NETFZhbGlkYXRvclRlc3RDYXNlCi17Ci0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0RmlsZVBhdGgoKQotICB7Ci0gICAgcmV0dXJuICJkYXRhLzUwMEtCLndzZGwiOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE9wZW41MDBLQkZpbGUoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgc3VwZXIuZXhlY3V0ZSgpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIHQpCi0gICAgewotICAgICAgZmFpbCh0LmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9XU0RMU2NhbGFiaWxpdHlUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Uvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvcGVyZm9ybWFuY2Uvc2NhbGFiaWxpdHkvV1NETFNjYWxhYmlsaXR5VGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTI2N2E5ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9wZXJmb3JtYW5jZS9zY2FsYWJpbGl0eS9XU0RMU2NhbGFiaWxpdHlUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIKAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ29tbW9uIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbAotIKAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotcHVibGljIGNsYXNzIFdTRExTY2FsYWJpbGl0eVRlc3RzCi17Ci0KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIFRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBUZXN0U3VpdGUoIlRlc3QgZm9yIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5Iik7Ci0gICAgLy8kSlVuaXQtQkVHSU4kCi0gICAgc3VpdGUuYWRkVGVzdFN1aXRlKFJlcGVhdFZhbGlkYXRleDc1VGVzdENhc2UuY2xhc3MpOwotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShSZXBlYXRPcGVuRWRpdG9yeDI1VGVzdENhc2UuY2xhc3MpOwotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShSZXBlYXRPcGVuRWRpdG9yeDFUZXN0Q2FzZS5jbGFzcyk7Ci0gICAgc3VpdGUuYWRkVGVzdFN1aXRlKFJlcGVhdE9wZW5FZGl0b3J4MTAwVGVzdENhc2UuY2xhc3MpOwotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShSZXBlYXRPcGVuRWRpdG9yeDUwVGVzdENhc2UuY2xhc3MpOwotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShSZXBlYXRPcGVuRWRpdG9yeDEwVGVzdENhc2UuY2xhc3MpOwotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShPcGVuMjAwS0JGaWxlVGVzdENhc2UuY2xhc3MpOwotLy8gICAgc3VpdGUuYWRkVGVzdFN1aXRlKFZhbGlkYXRlMTAwMFdTRExzQ3Jvc3NEZXBlbmRzVGVzdENhc2UuY2xhc3MpOwotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShWYWxpZGF0ZTEwV1NETHNDcm9zc0RlcGVuZHNUZXN0Q2FzZS5jbGFzcyk7Ci0gICAgc3VpdGUuYWRkVGVzdFN1aXRlKFZhbGlkYXRlMTAwV1NETHNDcm9zc0RlcGVuZHNUZXN0Q2FzZS5jbGFzcyk7Ci0gICAgc3VpdGUuYWRkVGVzdFN1aXRlKFZhbGlkYXRlMjAwS0JGaWxlVGVzdENhc2UuY2xhc3MpOwotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShSZXBlYXRWYWxpZGF0ZXgxMDBUZXN0Q2FzZS5jbGFzcyk7Ci0gICAgc3VpdGUuYWRkVGVzdFN1aXRlKFJlcGVhdFZhbGlkYXRleDFUZXN0Q2FzZS5jbGFzcyk7Ci0gICAgc3VpdGUuYWRkVGVzdFN1aXRlKFJlcGVhdFZhbGlkYXRleDI1VGVzdENhc2UuY2xhc3MpOwotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShSZXBlYXRWYWxpZGF0ZXg1MFRlc3RDYXNlLmNsYXNzKTsKLSAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoUmVwZWF0VmFsaWRhdGV4MTBUZXN0Q2FzZS5jbGFzcyk7Ci0gICAgc3VpdGUuYWRkVGVzdFN1aXRlKFZhbGlkYXRlMTAwV1NETHNYU0REZXBlbmRzVGVzdENhc2UuY2xhc3MpOwotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShWYWxpZGF0ZTEwV1NETHNYU0REZXBlbmRzVGVzdENhc2UuY2xhc3MpOwotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShWYWxpZGF0ZTFNQkZpbGVUZXN0Q2FzZS5jbGFzcyk7Ci0gICAgc3VpdGUuYWRkVGVzdFN1aXRlKFJlcGVhdE9wZW5FZGl0b3J4NzVUZXN0Q2FzZS5jbGFzcyk7Ci0gICAgc3VpdGUuYWRkVGVzdFN1aXRlKE9wZW4xTUJGaWxlVGVzdENhc2UuY2xhc3MpOwotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShPcGVuMTBLQkZpbGVUZXN0Q2FzZS5jbGFzcyk7Ci0gICAgc3VpdGUuYWRkVGVzdFN1aXRlKE9wZW4xS0JGaWxlVGVzdENhc2UuY2xhc3MpOwotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShPcGVuMTAwS0JGaWxlVGVzdENhc2UuY2xhc3MpOwotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShPcGVuNTAwS0JGaWxlVGVzdENhc2UuY2xhc3MpOwotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShWYWxpZGF0ZTEwMFdTRExzTm9EZXBlbmRzVGVzdENhc2UuY2xhc3MpOwotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShWYWxpZGF0ZTUwMEtCRmlsZVRlc3RDYXNlLmNsYXNzKTsKLSAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoVmFsaWRhdGUxMDBLQkZpbGVUZXN0Q2FzZS5jbGFzcyk7Ci0gICAgc3VpdGUuYWRkVGVzdFN1aXRlKFZhbGlkYXRlMUtCRmlsZVRlc3RDYXNlLmNsYXNzKTsKLS8vICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShWYWxpZGF0ZTEwMDBXU0RMc05vRGVwZW5kc1Rlc3RDYXNlLmNsYXNzKTsKLSAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoVmFsaWRhdGUxMFdTRExzTm9EZXBlbmRzVGVzdENhc2UuY2xhc3MpOwotICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShWYWxpZGF0ZTEwS0JGaWxlVGVzdENhc2UuY2xhc3MpOwotLy8gICAgc3VpdGUuYWRkVGVzdFN1aXRlKFZhbGlkYXRlMTAwMFdTRExzWFNERGVwZW5kc1Rlc3RDYXNlLmNsYXNzKTsKLSAgICAvLyRKVW5pdC1FTkQkCi0gICAgcmV0dXJuIHN1aXRlOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4ZDBmZDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBwcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlCi1CdW5kbGUtTmFtZS4wID0gV1NETCBQZXJmb3JtYW5jZSBQbHVnLWluClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS90ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjAzZWY0NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDY0NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLQotPHByb2plY3QgbmFtZT0idGVzdHN1aXRlIiBkZWZhdWx0PSJwZXJmb3JtYW5jZSIgYmFzZWRpcj0iLiI+Ci0gIDwhLS0gc2V0cyB0aGUgcHJvcGVydGllcyBlY2xpcHNlLWhvbWUsIGFuZCBsaWJyYXJ5LWZpbGUgLS0+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlIi8+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJsaWJyYXJ5LWZpbGUiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIi8+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJwZXJmLXRlc3RzLWZpbGUiIHZhbHVlPSIke3Rlc3REaXJ9L3BlcmZvcm1hbmNlLXRlc3RzLnhtbCIvPgotICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSItRG9hZ2lzODBEaXI9JHt0ZXN0RGlyfSAtRHByb2plY3REaXI9JHt0ZXN0RGlyfS9PQUdJUzguMCAtWG14NTEyTSIvPgotICA8cHJvcGVydHkgbmFtZT0id29ya3NwYWNlIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3dvcmtzcGFjZV93c2RsX3BlcmZvcm1hbmNlIi8+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS93b3Jrc3BhY2Vfd3NkbF9wZXJmb3JtYW5jZSIvPgotCi0gIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KLSAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KLSAgPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0gIDx0YXJnZXQgbmFtZT0iaW5pdCI+Ci0gICAgPHRzdGFtcC8+Ci0gICAgPGRlbGV0ZT4KLSAgICAgIDxmaWxlc2V0IGRpcj0iJHtlY2xpcHNlLWhvbWV9IiBpbmNsdWRlcz0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UqLnhtbCIvPgotICAgIDwvZGVsZXRlPgotICA8L3RhcmdldD4KLSAgCi0gIDwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgcGVyZm9ybWFuY2UgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+Ci0gIDx0YXJnZXQgbmFtZT0icGVyZm9ybWFuY2Vfc3VpdGUiPgotCi0gICAgPGFudGNhbGwgdGFyZ2V0PSJyZWFkT0FHSVNXU0RMVGVzdGNhc2UiLz4KLSAgICA8YW50Y2FsbCB0YXJnZXQ9InJlYWRPQUdJU1dTRExUZXN0Y2FzZSIvPgotICAgIDxhbnRjYWxsIHRhcmdldD0icmVhZE9BR0lTV1NETFRlc3RjYXNlIi8+Ci0KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGVPQUdJU1dTRExUZXN0Y2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZU9BR0lTV1NETFRlc3RjYXNlIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZU9BR0lTV1NETFRlc3RjYXNlIi8+Ci0KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGVPQUdJU1dTSVRlc3RjYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlT0FHSVNXU0lUZXN0Y2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZU9BR0lTV1NJVGVzdGNhc2UiLz4KLQotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZVdTRExQcm9qZWN0VGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGVXU0RMUHJvamVjdFRlc3RDYXNlIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZVdTRExQcm9qZWN0VGVzdENhc2UiLz4KLSAgCQotICAgIDxhbnRjYWxsIHRhcmdldD0ib3BlbkVkaXRvck9BR0lTV1NETFRlc3RjYXNlIi8+Ci0gICAgPGFudGNhbGwgdGFyZ2V0PSJvcGVuRWRpdG9yT0FHSVNXU0RMVGVzdGNhc2UiLz4KLSAgICA8YW50Y2FsbCB0YXJnZXQ9Im9wZW5FZGl0b3JPQUdJU1dTRExUZXN0Y2FzZSIvPgotCi0gICAgPGFudGNhbGwgdGFyZ2V0PSJSZWFkU3RvY2tRdW90ZVdTRExUZXN0Q2FzZSIvPgotICAgIDxhbnRjYWxsIHRhcmdldD0iUmVhZFN0b2NrUXVvdGVXU0RMVGVzdENhc2UiLz4KLSAgICA8YW50Y2FsbCB0YXJnZXQ9IlJlYWRTdG9ja1F1b3RlV1NETFRlc3RDYXNlIi8+Ci0KLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVhZFN0b2NrUXVvdGVXU0RMRU1GVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVhZFN0b2NrUXVvdGVXU0RMRU1GVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVhZFN0b2NrUXVvdGVXU0RMRU1GVGVzdENhc2UiLz4KLQotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZVN0b2NrUXVvdGVXU0RMVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGVTdG9ja1F1b3RlV1NETFRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlU3RvY2tRdW90ZVdTRExUZXN0Q2FzZSIvPgotCi0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlU3RvY2tRdW90ZVdTSVRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlU3RvY2tRdW90ZVdTSVRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlU3RvY2tRdW90ZVdTSVRlc3RDYXNlIi8+Ci0KLSAgCTxhbnRjYWxsIHRhcmdldD0iT3BlblN0b2NrUXVvdGVXU0RMU2V0dXAiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iT3BlblN0b2NrUXVvdGVXU0RMU2V0dXAiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iT3BlblN0b2NrUXVvdGVXU0RMU2V0dXAiLz4KLQotICAJPGFudGNhbGwgdGFyZ2V0PSJPcGVuMUtCRmlsZVRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9Ik9wZW4xS0JGaWxlVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iT3BlbjFLQkZpbGVUZXN0Q2FzZSIvPgotCi0gIAk8YW50Y2FsbCB0YXJnZXQ9Ik9wZW4xMEtCRmlsZVRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9Ik9wZW4xMEtCRmlsZVRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9Ik9wZW4xMEtCRmlsZVRlc3RDYXNlIi8+Ci0KLSAgCTxhbnRjYWxsIHRhcmdldD0iT3BlbjEwMEtCRmlsZVRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9Ik9wZW4xMDBLQkZpbGVUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJPcGVuMTAwS0JGaWxlVGVzdENhc2UiLz4KLQotICAJPGFudGNhbGwgdGFyZ2V0PSJPcGVuMjAwS0JGaWxlVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iT3BlbjIwMEtCRmlsZVRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9Ik9wZW4yMDBLQkZpbGVUZXN0Q2FzZSIvPgotCi0gIAk8YW50Y2FsbCB0YXJnZXQ9Ik9wZW41MDBLQkZpbGVUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJPcGVuNTAwS0JGaWxlVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iT3BlbjUwMEtCRmlsZVRlc3RDYXNlIi8+Ci0KLSAgCTxhbnRjYWxsIHRhcmdldD0iT3BlbjFNQkZpbGVUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJPcGVuMU1CRmlsZVRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9Ik9wZW4xTUJGaWxlVGVzdENhc2UiLz4KLQotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTFLQkZpbGVUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTFLQkZpbGVUZXN0Q2FzZSIvPgotCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxS0JGaWxlVGVzdENhc2UiLz4KLQotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTEwS0JGaWxlVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxMEtCRmlsZVRlc3RDYXNlIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTEwS0JGaWxlVGVzdENhc2UiLz4KLQkKLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxMDBLQkZpbGVUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTEwMEtCRmlsZVRlc3RDYXNlIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTEwMEtCRmlsZVRlc3RDYXNlIi8+Ci0gIAkKLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUyMDBLQkZpbGVUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTIwMEtCRmlsZVRlc3RDYXNlIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTIwMEtCRmlsZVRlc3RDYXNlIi8+Ci0gIAkKLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGU1MDBLQkZpbGVUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTUwMEtCRmlsZVRlc3RDYXNlIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTUwMEtCRmlsZVRlc3RDYXNlIi8+Ci0JCi0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMU1CRmlsZVRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMU1CRmlsZVRlc3RDYXNlIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTFNQkZpbGVUZXN0Q2FzZSIvPgotCi0JPGFudGNhbGwgdGFyZ2V0PSJSZXBlYXRPcGVuRWRpdG9yeDFUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJSZXBlYXRPcGVuRWRpdG9yeDFUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJSZXBlYXRPcGVuRWRpdG9yeDFUZXN0Q2FzZSIvPgotICAKLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVwZWF0T3BlbkVkaXRvcngxMFRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlJlcGVhdE9wZW5FZGl0b3J4MTBUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJSZXBlYXRPcGVuRWRpdG9yeDEwVGVzdENhc2UiLz4KLSAgCQotICAJPGFudGNhbGwgdGFyZ2V0PSJSZXBlYXRPcGVuRWRpdG9yeDI1VGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVwZWF0T3BlbkVkaXRvcngyNVRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlJlcGVhdE9wZW5FZGl0b3J4MjVUZXN0Q2FzZSIvPgotCi0gIAk8YW50Y2FsbCB0YXJnZXQ9IlJlcGVhdE9wZW5FZGl0b3J4NTBUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJSZXBlYXRPcGVuRWRpdG9yeDUwVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVwZWF0T3BlbkVkaXRvcng1MFRlc3RDYXNlIi8+Ci0gIAkKLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVwZWF0T3BlbkVkaXRvcng3NVRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlJlcGVhdE9wZW5FZGl0b3J4NzVUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJSZXBlYXRPcGVuRWRpdG9yeDc1VGVzdENhc2UiLz4KLSAKLSAgCTwhLS0KLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVwZWF0T3BlbkVkaXRvcngxMDBUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJSZXBlYXRPcGVuRWRpdG9yeDEwMFRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlJlcGVhdE9wZW5FZGl0b3J4MTAwVGVzdENhc2UiLz4KLSAgCS0tPgotCi0gIAk8YW50Y2FsbCB0YXJnZXQ9IlJlcGVhdFZhbGlkYXRleDFUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJSZXBlYXRWYWxpZGF0ZXgxVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVwZWF0VmFsaWRhdGV4MVRlc3RDYXNlIi8+Ci0KLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVwZWF0VmFsaWRhdGV4MTBUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJSZXBlYXRWYWxpZGF0ZXgxMFRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlJlcGVhdFZhbGlkYXRleDEwVGVzdENhc2UiLz4KLSAgCQotICAJPGFudGNhbGwgdGFyZ2V0PSJSZXBlYXRWYWxpZGF0ZXgyNVRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlJlcGVhdFZhbGlkYXRleDI1VGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVwZWF0VmFsaWRhdGV4MjVUZXN0Q2FzZSIvPgotICAJCi0gIAk8YW50Y2FsbCB0YXJnZXQ9IlJlcGVhdFZhbGlkYXRleDUwVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVwZWF0VmFsaWRhdGV4NTBUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJSZXBlYXRWYWxpZGF0ZXg1MFRlc3RDYXNlIi8+Ci0gIAkKLSAgCTxhbnRjYWxsIHRhcmdldD0iUmVwZWF0VmFsaWRhdGV4NzVUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJSZXBlYXRWYWxpZGF0ZXg3NVRlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlJlcGVhdFZhbGlkYXRleDc1VGVzdENhc2UiLz4KLQotICAJPGFudGNhbGwgdGFyZ2V0PSJSZXBlYXRWYWxpZGF0ZXgxMDBUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJSZXBlYXRWYWxpZGF0ZXgxMDBUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJSZXBlYXRWYWxpZGF0ZXgxMDBUZXN0Q2FzZSIvPgotICAJCi0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMTAwMFdTRExzWFNERGVwZW5kc1Rlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMTAwMFdTRExzWFNERGVwZW5kc1Rlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMTAwMFdTRExzWFNERGVwZW5kc1Rlc3RDYXNlIi8+Ci0gCQotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTEwMFdTRExzWFNERGVwZW5kc1Rlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMTAwV1NETHNYU0REZXBlbmRzVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxMDBXU0RMc1hTRERlcGVuZHNUZXN0Q2FzZSIvPgotICAJCi0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMTBXU0RMc1hTRERlcGVuZHNUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTEwV1NETHNYU0REZXBlbmRzVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxMFdTRExzWFNERGVwZW5kc1Rlc3RDYXNlIi8+Ci08IS0tICAJCi0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMTAwMFdTRExzQ3Jvc3NEZXBlbmRzVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxMDAwV1NETHNDcm9zc0RlcGVuZHNUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTEwMDBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlIi8+Ci0tLT4gCQotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTEwMFdTRExzQ3Jvc3NEZXBlbmRzVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxMDBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMTAwV1NETHNDcm9zc0RlcGVuZHNUZXN0Q2FzZSIvPgotICAJCi0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMTBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMTBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMTBXU0RMc0Nyb3NzRGVwZW5kc1Rlc3RDYXNlIi8+Ci0gIAkKLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxMDAwV1NETHNOb0RlcGVuZHNUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTEwMDBXU0RMc05vRGVwZW5kc1Rlc3RDYXNlIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMTAwMFdTRExzTm9EZXBlbmRzVGVzdENhc2UiLz4KLSAJCi0gIAk8YW50Y2FsbCB0YXJnZXQ9IlZhbGlkYXRlMTAwV1NETHNOb0RlcGVuZHNUZXN0Q2FzZSIvPgotICAJPGFudGNhbGwgdGFyZ2V0PSJWYWxpZGF0ZTEwMFdTRExzTm9EZXBlbmRzVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxMDBXU0RMc05vRGVwZW5kc1Rlc3RDYXNlIi8+Ci0gIAkKLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxMFdTRExzTm9EZXBlbmRzVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxMFdTRExzTm9EZXBlbmRzVGVzdENhc2UiLz4KLSAgCTxhbnRjYWxsIHRhcmdldD0iVmFsaWRhdGUxMFdTRExzTm9EZXBlbmRzVGVzdENhc2UiLz4KLSAgCQotICA8L3RhcmdldD4KLQotICA8dGFyZ2V0IG5hbWU9InJlYWRPQUdJU1dTRExUZXN0Y2FzZSI+Ci0gICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLSAgICA8YW50IHRhcmdldD0iY29yZS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5SZWFkT0FHSVNXU0RMVGVzdGNhc2UiLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0gICAgPC9hbnQ+Ci0gIDwvdGFyZ2V0PgotCi0gIDx0YXJnZXQgbmFtZT0iVmFsaWRhdGVPQUdJU1dTRExUZXN0Y2FzZSI+Ci0gICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UuVmFsaWRhdGVPQUdJU1dTRExUZXN0Y2FzZSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4KLSAgICA8L2FudD4KLSAgPC90YXJnZXQ+Ci0KLSAgPHRhcmdldCBuYW1lPSJWYWxpZGF0ZU9BR0lTV1NJVGVzdGNhc2UiPgotICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0gICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLlZhbGlkYXRlT0FHSVNXU0lUZXN0Y2FzZSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4KLSAgICA8L2FudD4KLSAgPC90YXJnZXQ+Ci0KLSAgPHRhcmdldCBuYW1lPSJWYWxpZGF0ZVdTRExQcm9qZWN0VGVzdENhc2UiPgotICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0gICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLlZhbGlkYXRlV1NETFByb2plY3RUZXN0Q2FzZSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4KLSAgICA8L2FudD4KLSAgPC90YXJnZXQ+Ci0JCi0gIDx0YXJnZXQgbmFtZT0ib3BlbkVkaXRvck9BR0lTV1NETFRlc3RjYXNlIj4KLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5PcGVuRWRpdG9yT0FHSVNXU0RMVGVzdGNhc2UiLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0gICAgPC9hbnQ+Ci0gIDwvdGFyZ2V0PgotCi0gIDx0YXJnZXQgbmFtZT0iUmVhZFN0b2NrUXVvdGVXU0RMVGVzdENhc2UiPgotICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0gICAgPGFudCB0YXJnZXQ9ImNvcmUtdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UuUmVhZFN0b2NrUXVvdGVXU0RMVGVzdENhc2UiLz4KLSAgICA8L2FudD4KLSAgPC90YXJnZXQ+Ci0KLSAgPHRhcmdldCBuYW1lPSJSZWFkU3RvY2tRdW90ZVdTRExFTUZUZXN0Q2FzZSI+Ci0gICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLSAgICA8YW50IHRhcmdldD0iY29yZS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5SZWFkU3RvY2tRdW90ZVdTRExFTUZUZXN0Q2FzZSIvPgotICAgIDwvYW50PgotICA8L3RhcmdldD4KLQotICA8dGFyZ2V0IG5hbWU9IlZhbGlkYXRlU3RvY2tRdW90ZVdTRExUZXN0Q2FzZSI+Ci0gICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UuVmFsaWRhdGVTdG9ja1F1b3RlV1NETFRlc3RDYXNlIi8+Ci0gICAgPC9hbnQ+Ci0gIDwvdGFyZ2V0PgotCi0gIDx0YXJnZXQgbmFtZT0iVmFsaWRhdGVTdG9ja1F1b3RlV1NJVGVzdENhc2UiPgotICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0gICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLlZhbGlkYXRlU3RvY2tRdW90ZVdTSVRlc3RDYXNlIi8+Ci0gICAgPC9hbnQ+Ci0gIDwvdGFyZ2V0PgotCi0gIDx0YXJnZXQgbmFtZT0iT3BlblN0b2NrUXVvdGVXU0RMU2V0dXAiPgotICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0gICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLk9wZW5TdG9ja1F1b3RlV1NETFNldHVwIi8+Ci0gICAgPC9hbnQ+Ci0gICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLk9wZW5TdG9ja1F1b3RlV1NETFRlc3RDYXNlIi8+Ci0gICAgPC9hbnQ+Ci0gIDwvdGFyZ2V0PgotCi0JICA8dGFyZ2V0IG5hbWU9Ik9wZW4xS0JGaWxlVGVzdENhc2UiPgotCSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotCSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0JICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLQkgICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHkuT3BlbjFLQkZpbGVUZXN0Q2FzZSIvPgotCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0JICAgIDwvYW50PgotCSAgPC90YXJnZXQ+Ci0KLQkJICA8dGFyZ2V0IG5hbWU9Ik9wZW4xMEtCRmlsZVRlc3RDYXNlIj4KLQkJICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0JCSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHkuT3BlbjEwS0JGaWxlVGVzdENhc2UiLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4KLQkJICAgIDwvYW50PgotCQkgIDwvdGFyZ2V0PgotCi0JCSAgPHRhcmdldCBuYW1lPSJPcGVuMTAwS0JGaWxlVGVzdENhc2UiPgotCQkgICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLQkJICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eS5PcGVuMTAwS0JGaWxlVGVzdENhc2UiLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4KLQkJICAgIDwvYW50PgotCQkgIDwvdGFyZ2V0PgotCi0JCSAgPHRhcmdldCBuYW1lPSJPcGVuMjAwS0JGaWxlVGVzdENhc2UiPgotCQkgICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLQkJICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eS5PcGVuMjAwS0JGaWxlVGVzdENhc2UiLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4KLQkJICAgIDwvYW50PgotCQkgIDwvdGFyZ2V0PgotCi0JCSAgPHRhcmdldCBuYW1lPSJPcGVuNTAwS0JGaWxlVGVzdENhc2UiPgotCQkgICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLQkJICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eS5PcGVuNTAwS0JGaWxlVGVzdENhc2UiLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4KLQkJICAgIDwvYW50PgotCQkgIDwvdGFyZ2V0PgotCi0JCSAgPHRhcmdldCBuYW1lPSJPcGVuMU1CRmlsZVRlc3RDYXNlIj4KLQkJICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0JCSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHkuT3BlbjFNQkZpbGVUZXN0Q2FzZSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPgotCQkgICAgPC9hbnQ+Ci0JCSAgPC90YXJnZXQ+Ci0KLQkJICA8dGFyZ2V0IG5hbWU9IlZhbGlkYXRlMUtCRmlsZVRlc3RDYXNlIj4KLQkJICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0JCSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHkuVmFsaWRhdGUxS0JGaWxlVGVzdENhc2UiLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4KLQkJICAgIDwvYW50PgotCQkgIDwvdGFyZ2V0PgotCi0JCSAgPHRhcmdldCBuYW1lPSJWYWxpZGF0ZTEwS0JGaWxlVGVzdENhc2UiPgotCQkgICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLQkJICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eS5WYWxpZGF0ZTEwS0JGaWxlVGVzdENhc2UiLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4KLQkJICAgIDwvYW50PgotCQkgIDwvdGFyZ2V0PgotCi0JCSAgPHRhcmdldCBuYW1lPSJWYWxpZGF0ZTEwMEtCRmlsZVRlc3RDYXNlIj4KLQkJICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0JCSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHkuVmFsaWRhdGUxMDBLQkZpbGVUZXN0Q2FzZSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPgotCQkgICAgPC9hbnQ+Ci0JCSAgPC90YXJnZXQ+Ci0KLQkJICA8dGFyZ2V0IG5hbWU9IlZhbGlkYXRlMjAwS0JGaWxlVGVzdENhc2UiPgotCQkgICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLQkJICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eS5WYWxpZGF0ZTIwMEtCRmlsZVRlc3RDYXNlIi8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0JCSAgICA8L2FudD4KLQkJICA8L3RhcmdldD4KLQotCQkgIDx0YXJnZXQgbmFtZT0iVmFsaWRhdGU1MDBLQkZpbGVUZXN0Q2FzZSI+Ci0JCSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotCQkgICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5LlZhbGlkYXRlNTAwS0JGaWxlVGVzdENhc2UiLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4KLQkJICAgIDwvYW50PgotCQkgIDwvdGFyZ2V0PgotCi0JCSAgPHRhcmdldCBuYW1lPSJWYWxpZGF0ZTFNQkZpbGVUZXN0Q2FzZSI+Ci0JCSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotCQkgICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5LlZhbGlkYXRlMU1CRmlsZVRlc3RDYXNlIi8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0JCSAgICA8L2FudD4KLQkJICA8L3RhcmdldD4KLQotCQkgIDx0YXJnZXQgbmFtZT0iUmVwZWF0T3BlbkVkaXRvcngxVGVzdENhc2UiPgotCQkgICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLQkJICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eS5SZXBlYXRPcGVuRWRpdG9yeDFUZXN0Q2FzZSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPgotCQkgICAgPC9hbnQ+Ci0JCSAgPC90YXJnZXQ+Ci0KLQkJICA8dGFyZ2V0IG5hbWU9IlJlcGVhdE9wZW5FZGl0b3J4MTBUZXN0Q2FzZSI+Ci0JCSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotCQkgICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5LlJlcGVhdE9wZW5FZGl0b3J4MTBUZXN0Q2FzZSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPgotCQkgICAgPC9hbnQ+Ci0JCSAgPC90YXJnZXQ+Ci0KLQkJICA8dGFyZ2V0IG5hbWU9IlJlcGVhdE9wZW5FZGl0b3J4MjVUZXN0Q2FzZSI+Ci0JCSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotCQkgICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5LlJlcGVhdE9wZW5FZGl0b3J4MjVUZXN0Q2FzZSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPgotCQkgICAgPC9hbnQ+Ci0JCSAgPC90YXJnZXQ+Ci0KLQkJICA8dGFyZ2V0IG5hbWU9IlJlcGVhdE9wZW5FZGl0b3J4NTBUZXN0Q2FzZSI+Ci0JCSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotCQkgICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5LlJlcGVhdE9wZW5FZGl0b3J4NTBUZXN0Q2FzZSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPgotCQkgICAgPC9hbnQ+Ci0JCSAgPC90YXJnZXQ+Ci0KLQkJICA8dGFyZ2V0IG5hbWU9IlJlcGVhdE9wZW5FZGl0b3J4NzVUZXN0Q2FzZSI+Ci0JCSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotCQkgICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5LlJlcGVhdE9wZW5FZGl0b3J4NzVUZXN0Q2FzZSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPgotCQkgICAgPC9hbnQ+Ci0JCSAgPC90YXJnZXQ+Ci0KLQkJICA8dGFyZ2V0IG5hbWU9IlJlcGVhdE9wZW5FZGl0b3J4MTAwVGVzdENhc2UiPgotCQkgICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLQkJICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eS5SZXBlYXRPcGVuRWRpdG9yeDEwMFRlc3RDYXNlIi8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0JCSAgICA8L2FudD4KLQkJICA8L3RhcmdldD4KLQotCQkgIDx0YXJnZXQgbmFtZT0iUmVwZWF0VmFsaWRhdGV4MVRlc3RDYXNlIj4KLQkJICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0JCSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHkuUmVwZWF0VmFsaWRhdGV4MVRlc3RDYXNlIi8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0JCSAgICA8L2FudD4KLQkJICA8L3RhcmdldD4KLQotCQkgIDx0YXJnZXQgbmFtZT0iUmVwZWF0VmFsaWRhdGV4MTBUZXN0Q2FzZSI+Ci0JCSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotCQkgICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5LlJlcGVhdFZhbGlkYXRleDEwVGVzdENhc2UiLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4KLQkJICAgIDwvYW50PgotCQkgIDwvdGFyZ2V0PgotCi0JCSAgPHRhcmdldCBuYW1lPSJSZXBlYXRWYWxpZGF0ZXgyNVRlc3RDYXNlIj4KLQkJICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0JCSAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHkuUmVwZWF0VmFsaWRhdGV4MjVUZXN0Q2FzZSIvPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPgotCQkgICAgPC9hbnQ+Ci0JCSAgPC90YXJnZXQ+Ci0KLQkJICA8dGFyZ2V0IG5hbWU9IlJlcGVhdFZhbGlkYXRleDUwVGVzdENhc2UiPgotCQkgICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLQkJICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eS5SZXBlYXRWYWxpZGF0ZXg1MFRlc3RDYXNlIi8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0JCSAgICA8L2FudD4KLQkJICA8L3RhcmdldD4KLQotCQkgIDx0YXJnZXQgbmFtZT0iUmVwZWF0VmFsaWRhdGV4NzVUZXN0Q2FzZSI+Ci0JCSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotCQkgICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5LlJlcGVhdFZhbGlkYXRleDc1VGVzdENhc2UiLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4KLQkJICAgIDwvYW50PgotCQkgIDwvdGFyZ2V0PgotCi0JCSAgPHRhcmdldCBuYW1lPSJSZXBlYXRWYWxpZGF0ZXgxMDBUZXN0Q2FzZSI+Ci0JCSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotCQkgICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5LlJlcGVhdFZhbGlkYXRleDEwMFRlc3RDYXNlIi8+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiR7ZXh0cmFWTWFyZ3N9Ii8+Ci0JCSAgICA8L2FudD4KLQkJICA8L3RhcmdldD4KLQkKLQkJICA8dGFyZ2V0IG5hbWU9IlZhbGlkYXRlMTAwMFdTRExzWFNERGVwZW5kc1Rlc3RDYXNlIj4KLQkJCTxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0JCQk8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotCQkJICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotCQkJICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHkuVmFsaWRhdGUxMDAwV1NETHNYU0REZXBlbmRzVGVzdENhc2UiLz4KLQkJCSAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4KLQkJCTwvYW50PgotCSAgICAgIDwvdGFyZ2V0PgotCi0JCSAgPHRhcmdldCBuYW1lPSJWYWxpZGF0ZTEwMFdTRExzWFNERGVwZW5kc1Rlc3RDYXNlIj4KLQkJCTxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0JCQk8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotCQkJICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotCQkJICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHkuVmFsaWRhdGUxMDBXU0RMc1hTRERlcGVuZHNUZXN0Q2FzZSIvPgotCQkJICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPgotCQkJPC9hbnQ+Ci0JICAgICAgPC90YXJnZXQ+Ci0JCi0JCSAgPHRhcmdldCBuYW1lPSJWYWxpZGF0ZTEwV1NETHNYU0REZXBlbmRzVGVzdENhc2UiPgotCQkJPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLQkJCTxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJCSAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eS5WYWxpZGF0ZTEwV1NETHNYU0REZXBlbmRzVGVzdENhc2UiLz4KLQkJCSAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4KLQkJCTwvYW50PgotCSAgICAgIDwvdGFyZ2V0PgotCQotCQkgIDx0YXJnZXQgbmFtZT0iVmFsaWRhdGUxMDAwV1NETHNDcm9zc0RlcGVuZHNUZXN0Q2FzZSI+Ci0JCQk8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIvPgotCQkJPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7cGVyZi10ZXN0cy1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkJICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iLz4KLQkJCSAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLQkJCSAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnBlcmZvcm1hbmNlLnNjYWxhYmlsaXR5LlZhbGlkYXRlMTAwMFdTRExzQ3Jvc3NEZXBlbmRzVGVzdENhc2UiLz4KLQkJCSAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4KLQkJCTwvYW50PgotCSAgICAgIDwvdGFyZ2V0PgotCi0JCSAgPHRhcmdldCBuYW1lPSJWYWxpZGF0ZTEwMFdTRExzQ3Jvc3NEZXBlbmRzVGVzdENhc2UiPgotCQkJPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLQkJCTxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJCSAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eS5WYWxpZGF0ZTEwMFdTRExzQ3Jvc3NEZXBlbmRzVGVzdENhc2UiLz4KLQkJCSAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4KLQkJCTwvYW50PgotCSAgICAgIDwvdGFyZ2V0PgotCQotCQkgIDx0YXJnZXQgbmFtZT0iVmFsaWRhdGUxMFdTRExzQ3Jvc3NEZXBlbmRzVGVzdENhc2UiPgotCQkJPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLQkJCTxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJCSAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eS5WYWxpZGF0ZTEwV1NETHNDcm9zc0RlcGVuZHNUZXN0Q2FzZSIvPgotCQkJICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPgotCQkJPC9hbnQ+Ci0JICAgICAgPC90YXJnZXQ+Ci0JCi0JCSAgPHRhcmdldCBuYW1lPSJWYWxpZGF0ZTEwMDBXU0RMc05vRGVwZW5kc1Rlc3RDYXNlIj4KLQkJCTxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0JCQk8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtwZXJmLXRlc3RzLWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlfSIvPgotCQkJICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotCQkJICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2Uuc2NhbGFiaWxpdHkuVmFsaWRhdGUxMDAwV1NETHNOb0RlcGVuZHNUZXN0Q2FzZSIvPgotCQkJICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPgotCQkJPC9hbnQ+Ci0JICAgICAgPC90YXJnZXQ+Ci0JCi0JCSAgPHRhcmdldCBuYW1lPSJWYWxpZGF0ZTEwMFdTRExzTm9EZXBlbmRzVGVzdENhc2UiPgotCQkJPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLQkJCTxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJCSAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eS5WYWxpZGF0ZTEwMFdTRExzTm9EZXBlbmRzVGVzdENhc2UiLz4KLQkJCSAgPHByb3BlcnR5IG5hbWU9ImV4dHJhVk1hcmdzIiB2YWx1ZT0iJHtleHRyYVZNYXJnc30iLz4KLQkJCTwvYW50PgotCSAgICAgIDwvdGFyZ2V0PgotCQotCQkgIDx0YXJnZXQgbmFtZT0iVmFsaWRhdGUxMFdTRExzTm9EZXBlbmRzVGVzdENhc2UiPgotCQkJPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4KLQkJCTxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke3BlcmYtdGVzdHMtZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJCSAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9Ii8+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZS5zY2FsYWJpbGl0eS5WYWxpZGF0ZTEwV1NETHNOb0RlcGVuZHNUZXN0Q2FzZSIvPgotCQkJICA8cHJvcGVydHkgbmFtZT0iZXh0cmFWTWFyZ3MiIHZhbHVlPSIke2V4dHJhVk1hcmdzfSIvPgotCQkJPC9hbnQ+Ci0JICAgICAgPC90YXJnZXQ+Ci0KLSAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+Ci0gIDwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLSAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgotCTxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+Ci0gIDwvdGFyZ2V0PgotICAKLSAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSBwZXJmb3JtYW5jZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgotICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0gIDx0YXJnZXQgbmFtZT0icGVyZm9ybWFuY2UiIGRlcGVuZHM9ImluaXQscGVyZm9ybWFuY2Vfc3VpdGUsY2xlYW51cCI+Ci0gICAgPGFudCB0YXJnZXQ9ImNvbGxlY3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImluY2x1ZGVzIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMucGVyZm9ybWFuY2UqLnhtbCIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9Im91dHB1dC1maWxlIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIi8+Ci0gICAgPC9hbnQ+Ci0gIDwvdGFyZ2V0PgotCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudWkvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2U3MzkzMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnVpLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZWFkZGZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnVpLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLWJpbgotYnVpbGQueG1sCi10ZW1wLmZvbGRlcgotd3NkbC50ZXN0cy51aS5qYXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnVpLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudWkvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmZmI3OGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudWkvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhNWUwZDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0jU3VuIEp1biAwMyAwMDo0NzowNSBFRFQgMjAwNwotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGIyYjVjYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6IFdTREwgTW9kZWwgVUkgU2FtcGxlcwotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudWk7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4xLnF1YWxpZmllcgotQnVuZGxlLUNsYXNzUGF0aDogd3NkbC50ZXN0cy51aS5qYXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuY29tcGF0aWJpbGl0eS5QbHVnaW5BY3RpdmF0b3IKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuY29tcGF0aWJpbGl0eSwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbCwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cywKLSBvcmcuZWNsaXBzZS54c2QsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmVjbGlwc2UudWksCi0gb3JnLmVjbGlwc2UudWkuaWRlO3Jlc29sdXRpb246PW9wdGlvbmFsLAotIG9yZy5lY2xpcHNlLnVpLnZpZXdzO3Jlc29sdXRpb246PW9wdGlvbmFsLAotIG9yZy5lY2xpcHNlLnVpLmVkaXRvcnM7cmVzb2x1dGlvbjo9b3B0aW9uYWwsCi0gb3JnLmVjbGlwc2UuamZhY2UudGV4dDtyZXNvbHV0aW9uOj1vcHRpb25hbCwKLSBvcmcuZWNsaXBzZS51aS53b3JrYmVuY2gudGV4dGVkaXRvcjtyZXNvbHV0aW9uOj1vcHRpb25hbCwKLSBvcmcuanVuaXQsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lO2J1bmRsZS12ZXJzaW9uPSIyLjEiCi1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudWkvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkYjM2ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudWkvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWIxNThlMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLXNvdXJjZS53c2RsLnRlc3RzLnVpLmphciA9IHNyYy8KLWJpbi5pbmNsdWRlcyA9IHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICB3c2RsLnRlc3RzLnVpLmphcixcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnVpL3BsdWdpbi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjVmMTFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnVpL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHBsdWdpbj4KLQotICAgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wb3B1cE1lbnVzIj4KLSAgICAgIDxvYmplY3RDb250cmlidXRpb24KLSAgICAgICAgICBvYmplY3RDbGFzcz0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGUiCi0gICAgICAgICAgbmFtZUZpbHRlcj0iKi53c2RsIgotICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS5vYmplY3RfY29udHJpYnV0aW9uIj4KLSAgICAgICAgIDwhLS0KLSAgICAgICAgIDxhY3Rpb24KLSAgICAgICAgICAgICBsYWJlbD0iR2VuZXJhdGUgV1NETCBTYW1wbGUiCi0gICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnVpLkdlbmVyYXRlV1NETEFjdGlvbkRlbGVnYXRlIgotICAgICAgICAgICAgIGVuYWJsZXNGb3I9IjEiCi0gICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnVpLmdlbmVyYXRlX3dzZGxfYWN0aW9uIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgICAgLS0+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgbGFiZWw9IkNvbnZlcnQgdG8gV1NETCAyLjAgRG9jdW1lbnQiCi0gICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnVpLkNvbnZlcnRXU0RMMjBBY3Rpb25EZWxlZ2F0ZSIKLSAgICAgICAgICAgICBlbmFibGVzRm9yPSIxIgotICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS5jb252ZXJ0X3dzZGxfYWN0aW9uIj4KLSAgICAgICAgIDwvYWN0aW9uPgotICAgICAgICAgCi0gICAgICA8L29iamVjdENvbnRyaWJ1dGlvbj4KLSAgIDwvZXh0ZW5zaW9uPgotICAgCi08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy91aS9Db252ZXJ0V1NETDIwQWN0aW9uRGVsZWdhdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy91aS9Db252ZXJ0V1NETDIwQWN0aW9uRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjJhZWZkMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvdWkvQ29udmVydFdTREwyMEFjdGlvbkRlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnVpOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkRlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudXRpbC5EZWZpbml0aW9uTG9hZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWwuV1NETENvbnZlcnRlcjsKLQotCi0KLXB1YmxpYyBjbGFzcyBDb252ZXJ0V1NETDIwQWN0aW9uRGVsZWdhdGUgaW1wbGVtZW50cyBJQWN0aW9uRGVsZWdhdGUKLXsKLSAgcHJpdmF0ZSBJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG51bGw7Ci0KLSAgcHVibGljIHZvaWQgcnVuKElBY3Rpb24gYWN0aW9uKQotICB7Ci0gICAgSUZpbGUgaWZpbGUgPSBudWxsOwotICAgIGlmICghc2VsZWN0aW9uLmlzRW1wdHkoKSAmJiBzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikKLSAgICB7Ci0gICAgICBJU3RydWN0dXJlZFNlbGVjdGlvbiBzdHJ1Y3R1cmVkU2VsZWN0aW9uID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBzZWxlY3Rpb247Ci0gICAgICBPYmplY3QgZWxlbWVudCA9IHN0cnVjdHVyZWRTZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCk7Ci0KLSAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSUZpbGUpCi0gICAgICB7Ci0gICAgICAJaWZpbGUgPSAoSUZpbGUpIGVsZW1lbnQ7Ci0gICAgICAgIElQYXRoIHBhdGggPSBpZmlsZS5nZXRMb2NhdGlvbigpOwotICAgICAgICBJUGF0aCBwYXRoMiA9IHBhdGgucmVtb3ZlTGFzdFNlZ21lbnRzKDEpOwotICAgICAgICBTdHJpbmcgb3V0cHV0ID0gcGF0aDIudG9TdHJpbmcoKSArICIvIiArIGdldE5ld05hbWUoaWZpbGUpOwotICAgICAgICAKLSAgICAgICAgdHJ5Ci0JCSAgICB7ICAKLSAgICAgICAgICAgIERlZmluaXRpb24gZGVmID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKCJmaWxlOi8iICsgcGF0aC50b1N0cmluZygpKTsKLSAgICAgICAgICAgIFdTRExDb252ZXJ0ZXIgY29udmVydGVyID0gbmV3IFdTRExDb252ZXJ0ZXIoZGVmKTsKLSAgICAgICAgICAgIGNvbnZlcnRlci5nZW5lcmF0ZTIwKG91dHB1dCk7Ci0gICAgICAgICAgICBJQ29udGFpbmVyIGZvbGRlciA9IGlmaWxlLmdldFBhcmVudCgpOwotICAgICAgICAgICAgZm9sZGVyLnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfT05FLG51bGwpOwotCQkgICAgfQotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0JCSAgICB7Ci0gICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAgICAgCi0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGdldE5ld05hbWUoSUZpbGUgaWZpbGUpCi0gIHsKLSAgICAvLyBBc3NlcnQgY3VycmVudE5hbWUgaGFzIGEgZmlsZSBleHRlbnNpb24sIGUuZy4gZm9vLndzZGwuCi0gICAgLy8gVGhpcyB3aWxsIHJldHVybiBmb29WMjAud3NkbC4KLSAgICBTdHJpbmcgY3VycmVudE5hbWUgPSBpZmlsZS5nZXROYW1lKCk7Ci0gICAgU3RyaW5nIG5hbWUgPSBjdXJyZW50TmFtZS5zdWJzdHJpbmcoMCxjdXJyZW50TmFtZS5pbmRleE9mKCIuIikpOwotICAgIFN0cmluZyBleHRlbnNpb24gPSBjdXJyZW50TmFtZS5zdWJzdHJpbmcoY3VycmVudE5hbWUuaW5kZXhPZigiLiIpKTsKLSAgICBTdHJpbmcgbmV3TmFtZSA9IG5hbWUgKyAiVjIwIiArIGV4dGVuc2lvbjsKLSAgICByZXR1cm4gbmV3TmFtZTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChJQWN0aW9uIGFjdGlvbiwgSVNlbGVjdGlvbiBzZWxlY3Rpb24pCi0gIHsKLSAgICB0aGlzLnNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKLSAgfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvdWkvR2VuZXJhdGVXU0RMQWN0aW9uRGVsZWdhdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy91aS9HZW5lcmF0ZVdTRExBY3Rpb25EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDk1MTFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnVpL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy91aS9HZW5lcmF0ZVdTRExBY3Rpb25EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51aTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JQWN0aW9uRGVsZWdhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMuV1NETEdlbmVyYXRpb25UZXN0OwotCi1wdWJsaWMgY2xhc3MgR2VuZXJhdGVXU0RMQWN0aW9uRGVsZWdhdGUgaW1wbGVtZW50cyBJQWN0aW9uRGVsZWdhdGUKLXsKLSAgcHJpdmF0ZSBJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG51bGw7Ci0KLSAgcHVibGljIHZvaWQgcnVuKElBY3Rpb24gYWN0aW9uKQotICB7Ci0gICAgSUZpbGUgaWZpbGUgPSBudWxsOwotICAgIGlmICghc2VsZWN0aW9uLmlzRW1wdHkoKSAmJiBzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikKLSAgICB7Ci0gICAgICBJU3RydWN0dXJlZFNlbGVjdGlvbiBzdHJ1Y3R1cmVkU2VsZWN0aW9uID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBzZWxlY3Rpb247Ci0gICAgICBPYmplY3QgZWxlbWVudCA9IHN0cnVjdHVyZWRTZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCk7Ci0KLSAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSUZpbGUpCi0gICAgICB7Ci0gICAgICAJaWZpbGUgPSAoSUZpbGUpIGVsZW1lbnQ7Ci0gICAgICAgIElQYXRoIHBhdGggPSBpZmlsZS5nZXRMb2NhdGlvbigpOwotICAgICAgICBwYXRoID0gcGF0aC5yZW1vdmVMYXN0U2VnbWVudHMoMSk7Ci0gICAgICAgIFN0cmluZyBvdXRwdXQgPSBwYXRoLnRvU3RyaW5nKCkgKyAiL015U2FtcGxlLndzZGwiOwotICAgICAgICAKLSAgICAgICAgdHJ5Ci0JCXsKLSAgICAgICAgICAobmV3IFdTRExHZW5lcmF0aW9uVGVzdCgpKS5nZW5lcmF0ZVRlbXBlcmF0dXJlU2VydmljZShvdXRwdXQpOwotCQl9Ci0gICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLQkJewotICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgICAgICAKLSAgfQotICAKLSAgcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChJQWN0aW9uIGFjdGlvbiwgSVNlbGVjdGlvbiBzZWxlY3Rpb24pCi0gIHsKLSAgICB0aGlzLnNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKLSAgfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWE1YzFiMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNCI+Ci0JCTxhY2Nlc3NydWxlcz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49ImphdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUiLz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49ImphdmF4L3htbC9YTUxDb25zdGFudHMiLz4KLQkJPC9hY2Nlc3NydWxlcz4KLQk8L2NsYXNzcGF0aGVudHJ5PgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyI+Ci0JCTxhY2Nlc3NydWxlcz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy9lY2xpcHNlL3dzdC93c2RsLyoqIi8+Ci0JCTwvYWNjZXNzcnVsZXM+Ci0JPC9jbGFzc3BhdGhlbnRyeT4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiNTI0OWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotYmluCi1idWlsZC54bWwKLXRlbXAuZm9sZGVyCi13c2RsLnRlc3RzLmphcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTgxM2E3NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQ1MDMzNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNXZWQgU2VwIDI2IDA1OjQ0OjU0IEVEVCAyMDA3Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Q2YmJjNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwyNTggKzAsMCBAQAotI1N1biBBcHIgMTUgMDI6MzQ6MjIgRURUIDIwMDcKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbl90eXBlX21lbWJlcnNfb25fY29sdW1ucz1mYWxzZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYXJndW1lbnRzX2luX2FsbG9jYXRpb25fZXhwcmVzc2lvbj01Mgotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYXJndW1lbnRzX2luX2VudW1fY29uc3RhbnQ9MTYKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2FyZ3VtZW50c19pbl9leHBsaWNpdF9jb25zdHJ1Y3Rvcl9jYWxsPTUyCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9hcmd1bWVudHNfaW5fbWV0aG9kX2ludm9jYXRpb249NTIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2FyZ3VtZW50c19pbl9xdWFsaWZpZWRfYWxsb2NhdGlvbl9leHByZXNzaW9uPTUyCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9hc3NpZ25tZW50PTAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2JpbmFyeV9leHByZXNzaW9uPTIwCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9jb21wYWN0X2lmPTIwCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9jb25kaXRpb25hbF9leHByZXNzaW9uPTM2Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9lbnVtX2NvbnN0YW50cz0wCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9leHByZXNzaW9uc19pbl9hcnJheV9pbml0aWFsaXplcj01Mgotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfbXVsdGlwbGVfZmllbGRzPTE2Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9wYXJhbWV0ZXJzX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPTUyCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9wYXJhbWV0ZXJzX2luX21ldGhvZF9kZWNsYXJhdGlvbj01Mgotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3Jfc2VsZWN0b3JfaW5fbWV0aG9kX2ludm9jYXRpb249MAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3Jfc3VwZXJjbGFzc19pbl90eXBlX2RlY2xhcmF0aW9uPTM2Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9zdXBlcmludGVyZmFjZXNfaW5fZW51bV9kZWNsYXJhdGlvbj0xNgotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3Jfc3VwZXJpbnRlcmZhY2VzX2luX3R5cGVfZGVjbGFyYXRpb249NjgKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3Rocm93c19jbGF1c2VfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb249ODQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3Rocm93c19jbGF1c2VfaW5fbWV0aG9kX2RlY2xhcmF0aW9uPTg0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYWZ0ZXJfaW1wb3J0cz0yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYWZ0ZXJfcGFja2FnZT0yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX2ZpZWxkPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZWZvcmVfZmlyc3RfY2xhc3NfYm9keV9kZWNsYXJhdGlvbj0wCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX2ltcG9ydHM9MAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9tZW1iZXJfdHlwZT0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX21ldGhvZD0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX25ld19jaHVuaz0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX3BhY2thZ2U9MAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JldHdlZW5faW1wb3J0X2dyb3Vwcz0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmV0d2Vlbl90eXBlX2RlY2xhcmF0aW9ucz0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2Fubm90YXRpb25fdHlwZV9kZWNsYXJhdGlvbj1uZXh0X2xpbmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfYW5vbnltb3VzX3R5cGVfZGVjbGFyYXRpb249bmV4dF9saW5lX3NoaWZ0ZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfYXJyYXlfaW5pdGlhbGl6ZXI9ZW5kX29mX2xpbmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfYmxvY2s9bmV4dF9saW5lCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2Jsb2NrX2luX2Nhc2U9bmV4dF9saW5lCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPW5leHRfbGluZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9lbnVtX2NvbnN0YW50PW5leHRfbGluZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9lbnVtX2RlY2xhcmF0aW9uPW5leHRfbGluZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9tZXRob2RfZGVjbGFyYXRpb249bmV4dF9saW5lCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX3N3aXRjaD1uZXh0X2xpbmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfdHlwZV9kZWNsYXJhdGlvbj1uZXh0X2xpbmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmNsZWFyX2JsYW5rX2xpbmVzX2luX2Jsb2NrX2NvbW1lbnQ9ZmFsc2UKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmNsZWFyX2JsYW5rX2xpbmVzX2luX2phdmFkb2NfY29tbWVudD1mYWxzZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuZm9ybWF0X2Jsb2NrX2NvbW1lbnRzPWZhbHNlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5mb3JtYXRfaGVhZGVyPWZhbHNlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5mb3JtYXRfaHRtbD1mYWxzZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuZm9ybWF0X2phdmFkb2NfY29tbWVudHM9ZmFsc2UKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9saW5lX2NvbW1lbnRzPWZhbHNlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5mb3JtYXRfc291cmNlX2NvZGU9ZmFsc2UKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmluZGVudF9wYXJhbWV0ZXJfZGVzY3JpcHRpb249dHJ1ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuaW5kZW50X3Jvb3RfdGFncz10cnVlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5pbnNlcnRfbmV3X2xpbmVfYmVmb3JlX3Jvb3RfdGFncz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50Lmluc2VydF9uZXdfbGluZV9mb3JfcGFyYW1ldGVyPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQubGluZV9sZW5ndGg9ODAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21wYWN0X2Vsc2VfaWY9dHJ1ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbnRpbnVhdGlvbl9pbmRlbnRhdGlvbj0yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29udGludWF0aW9uX2luZGVudGF0aW9uX2Zvcl9hcnJheV9pbml0aWFsaXplcj0yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuZm9ybWF0X2d1YXJkaWFuX2NsYXVzZV9vbl9vbmVfbGluZT1mYWxzZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9ib2R5X2RlY2xhcmF0aW9uc19jb21wYXJlX3RvX2Fubm90YXRpb25fZGVjbGFyYXRpb25faGVhZGVyPXRydWUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfYm9keV9kZWNsYXJhdGlvbnNfY29tcGFyZV90b19lbnVtX2NvbnN0YW50X2hlYWRlcj10cnVlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X2JvZHlfZGVjbGFyYXRpb25zX2NvbXBhcmVfdG9fZW51bV9kZWNsYXJhdGlvbl9oZWFkZXI9dHJ1ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9ib2R5X2RlY2xhcmF0aW9uc19jb21wYXJlX3RvX3R5cGVfaGVhZGVyPXRydWUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfYnJlYWtzX2NvbXBhcmVfdG9fY2FzZXM9dHJ1ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9lbXB0eV9saW5lcz1mYWxzZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9zdGF0ZW1lbnRzX2NvbXBhcmVfdG9fYmxvY2s9dHJ1ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9zdGF0ZW1lbnRzX2NvbXBhcmVfdG9fYm9keT10cnVlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X3N3aXRjaHN0YXRlbWVudHNfY29tcGFyZV90b19jYXNlcz1mYWxzZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9zd2l0Y2hzdGF0ZW1lbnRzX2NvbXBhcmVfdG9fc3dpdGNoPXRydWUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRhdGlvbi5zaXplPTQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYWZ0ZXJfYW5ub3RhdGlvbj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYWZ0ZXJfb3BlbmluZ19icmFjZV9pbl9hcnJheV9pbml0aWFsaXplcj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2F0X2VuZF9vZl9maWxlX2lmX21pc3Npbmc9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9iZWZvcmVfY2F0Y2hfaW5fdHJ5X3N0YXRlbWVudD1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYmVmb3JlX2Nsb3NpbmdfYnJhY2VfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9iZWZvcmVfZWxzZV9pbl9pZl9zdGF0ZW1lbnQ9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2JlZm9yZV9maW5hbGx5X2luX3RyeV9zdGF0ZW1lbnQ9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2JlZm9yZV93aGlsZV9pbl9kb19zdGF0ZW1lbnQ9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2luX2VtcHR5X2Fubm90YXRpb25fZGVjbGFyYXRpb249aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2luX2VtcHR5X2Fub255bW91c190eXBlX2RlY2xhcmF0aW9uPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV9ibG9jaz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfZW51bV9jb25zdGFudD1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfZW51bV9kZWNsYXJhdGlvbj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfbWV0aG9kX2JvZHk9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2luX2VtcHR5X3R5cGVfZGVjbGFyYXRpb249aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2FuZF9pbl90eXBlX3BhcmFtZXRlcj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfYXNzaWdubWVudF9vcGVyYXRvcj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfYXRfaW5fYW5ub3RhdGlvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2F0X2luX2Fubm90YXRpb25fdHlwZV9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2JpbmFyeV9vcGVyYXRvcj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY2xvc2luZ19hbmdsZV9icmFja2V0X2luX3R5cGVfYXJndW1lbnRzPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jbG9zaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9wYXJhbWV0ZXJzPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jbG9zaW5nX2JyYWNlX2luX2Jsb2NrPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jbG9zaW5nX3BhcmVuX2luX2Nhc3Q9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb2xvbl9pbl9hc3NlcnQ9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbG9uX2luX2Nhc2U9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbG9uX2luX2NvbmRpdGlvbmFsPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb2xvbl9pbl9mb3I9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbG9uX2luX2xhYmVsZWRfc3RhdGVtZW50PWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9hbGxvY2F0aW9uX2V4cHJlc3Npb249aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2Fubm90YXRpb249aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2FycmF5X2luaXRpYWxpemVyPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbl9wYXJhbWV0ZXJzPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbl90aHJvd3M9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2VudW1fY29uc3RhbnRfYXJndW1lbnRzPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9lbnVtX2RlY2xhcmF0aW9ucz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fZXhwbGljaXRjb25zdHJ1Y3RvcmNhbGxfYXJndW1lbnRzPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9mb3JfaW5jcmVtZW50cz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fZm9yX2luaXRzPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9tZXRob2RfZGVjbGFyYXRpb25fcGFyYW1ldGVycz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fbWV0aG9kX2RlY2xhcmF0aW9uX3Rocm93cz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fbWV0aG9kX2ludm9jYXRpb25fYXJndW1lbnRzPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9tdWx0aXBsZV9maWVsZF9kZWNsYXJhdGlvbnM9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX211bHRpcGxlX2xvY2FsX2RlY2xhcmF0aW9ucz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fcGFyYW1ldGVyaXplZF90eXBlX3JlZmVyZW5jZT1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fc3VwZXJpbnRlcmZhY2VzPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl90eXBlX2FyZ3VtZW50cz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fdHlwZV9wYXJhbWV0ZXJzPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9lbGxpcHNpcz1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19hbmdsZV9icmFja2V0X2luX3BhcmFtZXRlcml6ZWRfdHlwZV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9hcmd1bWVudHM9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9wYXJhbWV0ZXJzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19icmFjZV9pbl9hcnJheV9pbml0aWFsaXplcj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19icmFja2V0X2luX2FycmF5X2FsbG9jYXRpb25fZXhwcmVzc2lvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfYnJhY2tldF9pbl9hcnJheV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX2Fubm90YXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX2Nhc3Q9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX2NhdGNoPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fZW51bV9jb25zdGFudD1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fZm9yPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9pZj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fbWV0aG9kX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9tZXRob2RfaW52b2NhdGlvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fcGFyZW50aGVzaXplZF9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9zd2l0Y2g9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX3N5bmNocm9uaXplZD1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fd2hpbGU9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9wb3N0Zml4X29wZXJhdG9yPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfcHJlZml4X29wZXJhdG9yPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfcXVlc3Rpb25faW5fY29uZGl0aW9uYWw9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3F1ZXN0aW9uX2luX3dpbGRjYXJkPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfc2VtaWNvbG9uX2luX2Zvcj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfdW5hcnlfb3BlcmF0b3I9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfYW5kX2luX3R5cGVfcGFyYW1ldGVyPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfYXNzaWdubWVudF9vcGVyYXRvcj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2F0X2luX2Fubm90YXRpb25fdHlwZV9kZWNsYXJhdGlvbj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2JpbmFyeV9vcGVyYXRvcj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfYW5nbGVfYnJhY2tldF9pbl9wYXJhbWV0ZXJpemVkX3R5cGVfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX2FyZ3VtZW50cz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9wYXJhbWV0ZXJzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfYnJhY2VfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX2JyYWNrZXRfaW5fYXJyYXlfYWxsb2NhdGlvbl9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfYnJhY2tldF9pbl9hcnJheV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9hbm5vdGF0aW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fY2FzdD1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2NhdGNoPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9lbnVtX2NvbnN0YW50PWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fZm9yPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5faWY9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9tZXRob2RfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9tZXRob2RfaW52b2NhdGlvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX3BhcmVudGhlc2l6ZWRfZXhwcmVzc2lvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX3N3aXRjaD1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX3N5bmNocm9uaXplZD1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX3doaWxlPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbG9uX2luX2Fzc2VydD1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbG9uX2luX2Nhc2U9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29sb25faW5fY29uZGl0aW9uYWw9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb2xvbl9pbl9kZWZhdWx0PWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbG9uX2luX2Zvcj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbG9uX2luX2xhYmVsZWRfc3RhdGVtZW50PWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2FsbG9jYXRpb25fZXhwcmVzc2lvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9hbm5vdGF0aW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2FycmF5X2luaXRpYWxpemVyPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uX3BhcmFtZXRlcnM9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb25fdGhyb3dzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2VudW1fY29uc3RhbnRfYXJndW1lbnRzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2VudW1fZGVjbGFyYXRpb25zPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2V4cGxpY2l0Y29uc3RydWN0b3JjYWxsX2FyZ3VtZW50cz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9mb3JfaW5jcmVtZW50cz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9mb3JfaW5pdHM9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fbWV0aG9kX2RlY2xhcmF0aW9uX3BhcmFtZXRlcnM9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fbWV0aG9kX2RlY2xhcmF0aW9uX3Rocm93cz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9tZXRob2RfaW52b2NhdGlvbl9hcmd1bWVudHM9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fbXVsdGlwbGVfZmllbGRfZGVjbGFyYXRpb25zPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX211bHRpcGxlX2xvY2FsX2RlY2xhcmF0aW9ucz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9wYXJhbWV0ZXJpemVkX3R5cGVfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX3N1cGVyaW50ZXJmYWNlcz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl90eXBlX2FyZ3VtZW50cz1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl90eXBlX3BhcmFtZXRlcnM9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfZWxsaXBzaXM9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19hbmdsZV9icmFja2V0X2luX3BhcmFtZXRlcml6ZWRfdHlwZV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19hbmdsZV9icmFja2V0X2luX3R5cGVfYXJndW1lbnRzPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX3BhcmFtZXRlcnM9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9hbm5vdGF0aW9uX3R5cGVfZGVjbGFyYXRpb249aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX2Fub255bW91c190eXBlX2RlY2xhcmF0aW9uPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9hcnJheV9pbml0aWFsaXplcj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX2Jsb2NrPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fZW51bV9jb25zdGFudD1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fZW51bV9kZWNsYXJhdGlvbj1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fbWV0aG9kX2RlY2xhcmF0aW9uPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9zd2l0Y2g9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX3R5cGVfZGVjbGFyYXRpb249aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNrZXRfaW5fYXJyYXlfYWxsb2NhdGlvbl9leHByZXNzaW9uPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFja2V0X2luX2FycmF5X3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNrZXRfaW5fYXJyYXlfdHlwZV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9hbm5vdGF0aW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fYW5ub3RhdGlvbl90eXBlX21lbWJlcl9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX2NhdGNoPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX2VudW1fY29uc3RhbnQ9ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9mb3I9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX2lmPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9tZXRob2RfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9tZXRob2RfaW52b2NhdGlvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX3BhcmVudGhlc2l6ZWRfZXhwcmVzc2lvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX3N3aXRjaD1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fc3luY2hyb25pemVkPWluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl93aGlsZT1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3BhcmVudGhlc2l6ZWRfZXhwcmVzc2lvbl9pbl9yZXR1cm49aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9wYXJlbnRoZXNpemVkX2V4cHJlc3Npb25faW5fdGhyb3c9aW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9wb3N0Zml4X29wZXJhdG9yPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3ByZWZpeF9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9xdWVzdGlvbl9pbl9jb25kaXRpb25hbD1pbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3F1ZXN0aW9uX2luX3dpbGRjYXJkPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3NlbWljb2xvbj1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9zZW1pY29sb25faW5fZm9yPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3VuYXJ5X29wZXJhdG9yPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9icmFja2V0c19pbl9hcnJheV90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfYnJhY2VzX2luX2FycmF5X2luaXRpYWxpemVyPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9lbXB0eV9icmFja2V0c19pbl9hcnJheV9hbGxvY2F0aW9uX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZXR3ZWVuX2VtcHR5X3BhcmVuc19pbl9hbm5vdGF0aW9uX3R5cGVfbWVtYmVyX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9lbXB0eV9wYXJlbnNfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZXR3ZWVuX2VtcHR5X3BhcmVuc19pbl9lbnVtX2NvbnN0YW50PWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9lbXB0eV9wYXJlbnNfaW5fbWV0aG9kX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9lbXB0eV9wYXJlbnNfaW5fbWV0aG9kX2ludm9jYXRpb249ZG8gbm90IGluc2VydAotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmtlZXBfZWxzZV9zdGF0ZW1lbnRfb25fc2FtZV9saW5lPWZhbHNlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIua2VlcF9lbXB0eV9hcnJheV9pbml0aWFsaXplcl9vbl9vbmVfbGluZT1mYWxzZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmtlZXBfaW1wbGVfaWZfb25fb25lX2xpbmU9ZmFsc2UKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5rZWVwX3RoZW5fc3RhdGVtZW50X29uX3NhbWVfbGluZT1mYWxzZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmxpbmVTcGxpdD0xNDAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5udW1iZXJfb2ZfYmxhbmtfbGluZXNfYXRfYmVnaW5uaW5nX29mX21ldGhvZF9ib2R5PTAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5udW1iZXJfb2ZfZW1wdHlfbGluZXNfdG9fcHJlc2VydmU9MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLnB1dF9lbXB0eV9zdGF0ZW1lbnRfb25fbmV3X2xpbmU9ZmFsc2UKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci50YWJ1bGF0aW9uLmNoYXI9c3BhY2UKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci50YWJ1bGF0aW9uLnNpemU9Mgotb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLnVzZV90YWJzX29ubHlfZm9yX2xlYWRpbmdfaW5kZW50YXRpb25zPWZhbHNlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmEwNWMzMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0jVGh1IE1hciAwOCAxMDoyMzozNSBFU1QgMjAwNwotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWZvcm1hdHRlcl9wcm9maWxlPV9FTUZDb2RlRm9ybWF0dGVyLnByb2ZpbGUKLWZvcm1hdHRlcl9zZXR0aW5nc192ZXJzaW9uPTExCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmYTI1MDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVGh1IEFwciAxMiAwMDowNzowOSBFRFQgMjAwNwotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLXJlc29sdmUucmVxdWlyZWJ1bmRsZT1mYWxzZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzRiMTI4ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0czsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjMucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5XU0RMVGVzdHNQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotUmVxdWlyZS1CdW5kbGU6IG9yZy5hcGFjaGUueGVyY2VzLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcywKLSBvcmcuZWNsaXBzZS5lbWYuZWNvcmUsCi0gb3JnLmVjbGlwc2UueHNkLAotIG9yZy5qdW5pdDtidW5kbGUtdmVyc2lvbj0iWzMuOC4wLDQuMC4wKSIsCi0gamF2YXgud3NkbDtidW5kbGUtdmVyc2lvbj0iWzEuNC4wLDEuNS4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlcgotQnVuZGxlLUNsYXNzUGF0aDogd3NkbC50ZXN0cy5qYXIKLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cywKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsCi1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkYjM2ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDRlMDBhYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLWJpbi5pbmNsdWRlcyA9IHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIHdzZGwudGVzdHMuamFyLFwKLSAgICAgICAgICAgICAgIHNhbXBsZXMvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvCi1zb3VyY2Uud3NkbC50ZXN0cy5qYXIgPSBzcmMvCi1qYXZhY1dhcm5pbmdzLndzZGwudGVzdHMuamFyPS1kaXNjb3VyYWdlZAotc291cmNlLndzZGwudGVzdHMuamFyID0gc3JjLwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzI4YWQzOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotcGx1Z2luTmFtZSA9IFdTREwgSlVuaXQgVGVzdAotcHJvdmlkZXJOYW1lID0gRWNsaXBzZS5vcmcKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZkNGMyZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1nZW5lcmF0ZWQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvQmluZGluZ0ZhdWx0UmVjb25jaWxpYXRpb24vQmluZGluZ0ZhdWx0U2FtcGxlLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL0JpbmRpbmdGYXVsdFJlY29uY2lsaWF0aW9uL0JpbmRpbmdGYXVsdFNhbXBsZS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NWZjYTAxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvQmluZGluZ0ZhdWx0UmVjb25jaWxpYXRpb24vQmluZGluZ0ZhdWx0U2FtcGxlLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyINCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0JpbmRpbmdGYXVsdFNhbXBsZS8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiDQotCW5hbWU9IkJpbmRpbmdGYXVsdFNhbXBsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0JpbmRpbmdGYXVsdFNhbXBsZS8iPg0KLQk8d3NkbDp0eXBlcz4NCi0JCTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9CaW5kaW5nRmF1bHRTYW1wbGUvIg0KLQkJCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPg0KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJPcGVyYXRpb24xIj4NCi0JCQkJPHhzZDpjb21wbGV4VHlwZT4NCi0JCQkJCTx4c2Q6c2VxdWVuY2U+DQotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImluIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPg0KLQkJCQkJPC94c2Q6c2VxdWVuY2U+DQotCQkJCTwveHNkOmNvbXBsZXhUeXBlPg0KLQkJCTwveHNkOmVsZW1lbnQ+DQotCQkJPHhzZDplbGVtZW50IG5hbWU9Ik9wZXJhdGlvbjFSZXNwb25zZSI+DQotCQkJCTx4c2Q6Y29tcGxleFR5cGU+DQotCQkJCQk8eHNkOnNlcXVlbmNlPg0KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJvdXQiIHR5cGU9InhzZDpzdHJpbmciIC8+DQotCQkJCQk8L3hzZDpzZXF1ZW5jZT4NCi0JCQkJPC94c2Q6Y29tcGxleFR5cGU+DQotCQkJPC94c2Q6ZWxlbWVudD4NCi0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iT3BlcmF0aW9uMUZhdWx0Ij4NCi0JCQkJPHhzZDpjb21wbGV4VHlwZT4NCi0JCQkJCTx4c2Q6c2VxdWVuY2U+DQotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImZhdWx0IiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPg0KLQkJCQkJPC94c2Q6c2VxdWVuY2U+DQotCQkJCTwveHNkOmNvbXBsZXhUeXBlPg0KLQkJCTwveHNkOmVsZW1lbnQ+DQotCQkJPHhzZDplbGVtZW50IG5hbWU9Ik9wZXJhdGlvbjIiPg0KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPg0KLQkJCQkJPHhzZDpzZXF1ZW5jZT4NCi0NCi0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iaW4iIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+DQotCQkJCQk8L3hzZDpzZXF1ZW5jZT4NCi0JCQkJPC94c2Q6Y29tcGxleFR5cGU+DQotCQkJPC94c2Q6ZWxlbWVudD4NCi0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iT3BlcmF0aW9uMlJlc3BvbnNlIj4NCi0JCQkJPHhzZDpjb21wbGV4VHlwZT4NCi0JCQkJCTx4c2Q6c2VxdWVuY2U+DQotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9Im91dCIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4NCi0JCQkJCTwveHNkOnNlcXVlbmNlPg0KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4NCi0JCQk8L3hzZDplbGVtZW50Pg0KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJPcGVyYXRpb24yRmF1bHQxIj4NCi0JCQkJPHhzZDpjb21wbGV4VHlwZT4NCi0JCQkJCTx4c2Q6c2VxdWVuY2U+DQotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9Ik9wZXJhdGlvbjJGYXVsdDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+DQotCQkJCQk8L3hzZDpzZXF1ZW5jZT4NCi0JCQkJPC94c2Q6Y29tcGxleFR5cGU+DQotCQkJPC94c2Q6ZWxlbWVudD4NCi0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iT3BlcmF0aW9uMkZhdWx0MiI+DQotCQkJCTx4c2Q6Y29tcGxleFR5cGU+DQotCQkJCQk8eHNkOnNlcXVlbmNlPg0KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJPcGVyYXRpb24yRmF1bHQyIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50Pg0KLQkJCQkJPC94c2Q6c2VxdWVuY2U+DQotCQkJCTwveHNkOmNvbXBsZXhUeXBlPg0KLQkJCTwveHNkOmVsZW1lbnQ+DQotCQk8L3hzZDpzY2hlbWE+DQotCTwvd3NkbDp0eXBlcz4NCi0JPHdzZGw6bWVzc2FnZSBuYW1lPSJPcGVyYXRpb24xUmVxdWVzdCI+DQotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpPcGVyYXRpb24xIiBuYW1lPSJwYXJhbWV0ZXJzIiAvPg0KLQk8L3dzZGw6bWVzc2FnZT4NCi0JPHdzZGw6bWVzc2FnZSBuYW1lPSJPcGVyYXRpb24xUmVzcG9uc2UiPg0KLQkJPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6T3BlcmF0aW9uMVJlc3BvbnNlIiBuYW1lPSJwYXJhbWV0ZXJzIiAvPg0KLQk8L3dzZGw6bWVzc2FnZT4NCi0JPHdzZGw6bWVzc2FnZSBuYW1lPSJPcGVyYXRpb24xRmF1bHQiPg0KLQkJPHdzZGw6cGFydCBuYW1lPSJGYXVsdCIgZWxlbWVudD0idG5zOk9wZXJhdGlvbjFGYXVsdCIgLz4NCi0JPC93c2RsOm1lc3NhZ2U+DQotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iT3BlcmF0aW9uMlJlcXVlc3QiPg0KLQkJPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJ0bnM6T3BlcmF0aW9uMiI+PC93c2RsOnBhcnQ+DQotCTwvd3NkbDptZXNzYWdlPg0KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik9wZXJhdGlvbjJSZXNwb25zZSI+DQotCQk8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9InRuczpPcGVyYXRpb24yUmVzcG9uc2UiPjwvd3NkbDpwYXJ0Pg0KLQk8L3dzZGw6bWVzc2FnZT4NCi0JPHdzZGw6bWVzc2FnZSBuYW1lPSJPcGVyYXRpb24yRmF1bHQxIj4NCi0JCTx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0idG5zOk9wZXJhdGlvbjJGYXVsdDEiPjwvd3NkbDpwYXJ0Pg0KLQk8L3dzZGw6bWVzc2FnZT4NCi0JPHdzZGw6bWVzc2FnZSBuYW1lPSJPcGVyYXRpb24yRmF1bHQyIj4NCi0JCTx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0idG5zOk9wZXJhdGlvbjJGYXVsdDIiPjwvd3NkbDpwYXJ0Pg0KLQk8L3dzZGw6bWVzc2FnZT4NCi0JPHdzZGw6cG9ydFR5cGUgbmFtZT0iU2FtcGxlUG9ydCI+DQotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMSI+DQotCQkJPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk9wZXJhdGlvbjFSZXF1ZXN0IiAvPg0KLQkJCTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6T3BlcmF0aW9uMVJlc3BvbnNlIiAvPg0KLQkJPC93c2RsOm9wZXJhdGlvbj4NCi0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJPcGVyYXRpb24yIj4NCi0JCQk8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6T3BlcmF0aW9uMlJlcXVlc3QiIC8+DQotCQkJPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpPcGVyYXRpb24yUmVzcG9uc2UiIC8+DQotCQkJPHdzZGw6ZmF1bHQgbmFtZT0iT3BlcmF0aW9uMkZhdWx0MSIgbWVzc2FnZT0idG5zOk9wZXJhdGlvbjJGYXVsdDEiIC8+DQotCQkJPHdzZGw6ZmF1bHQgbmFtZT0iT3BlcmF0aW9uMkZhdWx0MiIgbWVzc2FnZT0idG5zOk9wZXJhdGlvbjJGYXVsdDIiIC8+DQotCQk8L3dzZGw6b3BlcmF0aW9uPg0KLQk8L3dzZGw6cG9ydFR5cGU+DQotCTx3c2RsOmJpbmRpbmcgbmFtZT0iU2FtcGxlUG9ydFNPQVBCaW5kaW5nIiB0eXBlPSJ0bnM6U2FtcGxlUG9ydCI+DQotCQk8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiIC8+DQotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMSI+DQotCQkJPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvQmluZGluZ0ZhdWx0U2FtcGxlL09wZXJhdGlvbjEiIC8+DQotCQkJPHdzZGw6aW5wdXQ+DQotCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPg0KLQkJCTwvd3NkbDppbnB1dD4NCi0JCQk8d3NkbDpvdXRwdXQ+DQotCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPg0KLQkJCTwvd3NkbDpvdXRwdXQ+DQotCQkJPHdzZGw6ZmF1bHQgbmFtZT0iT3BlcmF0aW9uMUZhdWx0Ij4NCi0JCQkJPHNvYXA6ZmF1bHQgbmFtZT0iT3BlcmF0aW9uMUZhdWx0IiAvPg0KLQkJCTwvd3NkbDpmYXVsdD4NCi0JCTwvd3NkbDpvcGVyYXRpb24+DQotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uMiI+DQotCQkJPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvQmluZGluZ0ZhdWx0U2FtcGxlL09wZXJhdGlvbjIiIC8+DQotCQkJPHdzZGw6aW5wdXQ+DQotCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPg0KLQkJCTwvd3NkbDppbnB1dD4NCi0JCQk8d3NkbDpvdXRwdXQ+DQotCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPg0KLQkJCTwvd3NkbDpvdXRwdXQ+DQotCQkJPHdzZGw6ZmF1bHQgbmFtZT0iT3BlcmF0aW9uMkZhdWx0MSI+DQotCQkJCTxzb2FwOmZhdWx0IHVzZT0ibGl0ZXJhbCIgbmFtZT0iT3BlcmF0aW9uMkZhdWx0MSIgLz4NCi0JCQk8L3dzZGw6ZmF1bHQ+DQotCQkJPHdzZGw6ZmF1bHQgbmFtZT0iT3BlcmF0aW9uMkZhdWx0MiI+DQotCQkJCTxzb2FwOmZhdWx0IHVzZT0ibGl0ZXJhbCIgbmFtZT0iT3BlcmF0aW9uMkZhdWx0MiIgLz4NCi0JCQk8L3dzZGw6ZmF1bHQ+DQotCQk8L3dzZGw6b3BlcmF0aW9uPg0KLQk8L3dzZGw6YmluZGluZz4NCi0JPHdzZGw6c2VydmljZSBuYW1lPSJTYW1wbGVTZXJ2aWNlIj4NCi0JCTx3c2RsOnBvcnQgYmluZGluZz0idG5zOlNhbXBsZVBvcnRTT0FQQmluZGluZyIgbmFtZT0iU2FtcGxlUG9ydCI+DQotCQkJPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iIC8+DQotCQk8L3dzZGw6cG9ydD4NCi0JPC93c2RsOnNlcnZpY2U+DQotPC93c2RsOmRlZmluaXRpb25zPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvQmluZGluZ09wZXJhdGlvblJlY29uY2lsaWF0aW9uL0JpbmRpbmdPcGVyYXRpb25SZWNvbmNpbGlhdGlvbi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9CaW5kaW5nT3BlcmF0aW9uUmVjb25jaWxpYXRpb24vQmluZGluZ09wZXJhdGlvblJlY29uY2lsaWF0aW9uLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmMzAyNmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9CaW5kaW5nT3BlcmF0aW9uUmVjb25jaWxpYXRpb24vQmluZGluZ09wZXJhdGlvblJlY29uY2lsaWF0aW9uLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotCXhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0JpbmRpbmdPcGVyYXRpb25SZWNvbmNpbGlhdGlvbi8iCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQluYW1lPSJCaW5kaW5nT3BlcmF0aW9uUmVjb25jaWxpYXRpb24iCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0JpbmRpbmdPcGVyYXRpb25SZWNvbmNpbGlhdGlvbi8iPgotCTx3c2RsOnR5cGVzPgotCQk8eHNkOnNjaGVtYQotCQkJdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0JpbmRpbmdPcGVyYXRpb25SZWNvbmNpbGlhdGlvbi8iCi0JCQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb24iPgotCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iaW4iIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0JCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJvdXQiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLQotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci0JCTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvbiIgbmFtZT0icGFyYW1ldGVycyIgLz4KLQk8L3dzZGw6bWVzc2FnZT4KLQotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIgbmFtZT0icGFyYW1ldGVycyIgLz4KLQk8L3dzZGw6bWVzc2FnZT4KLQotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdDIiPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb24iIG5hbWU9InBhcmFtZXRlcnMiIC8+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlMiI+Ci0JCTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIiBuYW1lPSJwYXJhbWV0ZXJzIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCi0JPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0MyI+Ci0JCTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvbiIgbmFtZT0icGFyYW1ldGVycyIgLz4KLQk8L3dzZGw6bWVzc2FnZT4KLQotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UzIj4KLQkJPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiIG5hbWU9InBhcmFtZXRlcnMiIC8+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0KLQk8d3NkbDpwb3J0VHlwZSBuYW1lPSJCaW5kaW5nT3BlcmF0aW9uUmVjb25jaWxpYXRpb24iPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLQkJCTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0IiAvPgotCQkJPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIgLz4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbjIiPgotCQkJPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QyIiAvPgotCQkJPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZTIiIC8+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24zIj4KLQkJCTx3c2RsOmlucHV0IG5hbWU9IklucHV0MyIgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QzIiAvPgotCQkJPHdzZGw6b3V0cHV0IG5hbWU9Ik91dHB1dDMiIG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZTMiIC8+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JPC93c2RsOnBvcnRUeXBlPgotCi0JPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nT3BlcmF0aW9uUmVjb25jaWxpYXRpb25TT0FQIgotCQl0eXBlPSJ0bnM6QmluZGluZ09wZXJhdGlvblJlY29uY2lsaWF0aW9uIj4KLQkJPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiCi0JCQl0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIgLz4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0JCQk8c29hcDpvcGVyYXRpb24KLQkJCQlzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0JpbmRpbmdPcGVyYXRpb25SZWNvbmNpbGlhdGlvbi9OZXdPcGVyYXRpb24iIC8+Ci0JCQk8d3NkbDppbnB1dD4KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KLQkJCTwvd3NkbDppbnB1dD4KLQkJCTx3c2RsOm91dHB1dD4KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KLQkJCTwvd3NkbDpvdXRwdXQ+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24yIj4KLQkJCTxzb2FwOm9wZXJhdGlvbgotCQkJCXNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvQmluZGluZ09wZXJhdGlvblJlY29uY2lsaWF0aW9uL05ld09wZXJhdGlvbjIiIC8+Ci0JCQk8d3NkbDppbnB1dCBuYW1lPSJJbnB1dDIiPgotCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgotCQkJPC93c2RsOmlucHV0PgotCQkJPHdzZGw6b3V0cHV0IG5hbWU9Ik91dHB1dDIiPgotCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgotCQkJPC93c2RsOm91dHB1dD4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbjMiPgotCQkJPHNvYXA6b3BlcmF0aW9uCi0JCQkJc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9CaW5kaW5nT3BlcmF0aW9uUmVjb25jaWxpYXRpb24vTmV3T3BlcmF0aW9uMyIgLz4KLQkJCTx3c2RsOmlucHV0IG5hbWU9IklucHV0MyI+Ci0JCQkJPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIC8+Ci0JCQk8L3dzZGw6aW5wdXQ+Ci0JCQk8d3NkbDpvdXRwdXQgbmFtZT0iT3V0cHV0MyI+Ci0JCQkJPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIC8+Ci0JCQk8L3dzZGw6b3V0cHV0PgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpiaW5kaW5nPgotCTx3c2RsOnNlcnZpY2UgbmFtZT0iQmluZGluZ09wZXJhdGlvblJlY29uY2lsaWF0aW9uIj4KLQkJPHdzZGw6cG9ydCBiaW5kaW5nPSJ0bnM6QmluZGluZ09wZXJhdGlvblJlY29uY2lsaWF0aW9uU09BUCIKLQkJCW5hbWU9IkJpbmRpbmdPcGVyYXRpb25SZWNvbmNpbGlhdGlvblNPQVAiPgotCQkJPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iIC8+Ci0JCTwvd3NkbDpwb3J0PgotCTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9EdXBsaWNhdGVTQVhFeGNlcHRpb24vU0FYRXhjZXB0aW9uLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL0R1cGxpY2F0ZVNBWEV4Y2VwdGlvbi9TQVhFeGNlcHRpb24ud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTNmNDMxZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL0R1cGxpY2F0ZVNBWEV4Y2VwdGlvbi9TQVhFeGNlcHRpb24ud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL05hbWVzcGFjZVByZWZpeE5vdEJvdW5kLyIKLQl4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCW5hbWU9Ik5hbWVzcGFjZVByZWZpeE5vdEJvdW5kIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9OYW1lc3BhY2VQcmVmaXhOb3RCb3VuZC8iPgotCTx1bmRlZmluZWQ6dGVzdCAvPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9GdWxsRWxlbWVudEV4dGVuc2liaWxpdHkvRXh0ZW5kZWRXU0RMLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL0Z1bGxFbGVtZW50RXh0ZW5zaWJpbGl0eS9FeHRlbmRlZFdTREwud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTZiZGY0Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL0Z1bGxFbGVtZW50RXh0ZW5zaWJpbGl0eS9FeHRlbmRlZFdTREwud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvRXh0ZW5kZWRXU0RMLyIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJFeHRlbmRlZFdTREwiCi0JeG1sbnM6ZXh0PSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0V4dGVuc2lvbnMvIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9FeHRlbmRlZFdTREwvIj4KLQotCTx3c2RsOmltcG9ydCBsb2NhdGlvbj0iSW1wb3J0ZWQud3NkbCIKLQkJbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydGVkLyI+Ci0JCTxleHQ6aW1wb3J0IC8+Ci0JPC93c2RsOmltcG9ydD4KLQotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iZXh0ZW5kZWRNZXNzYWdlIj4KLQkJPGV4dDptZXNzYWdlIC8+Ci0JCTx3c2RsOnBhcnQgbmFtZT0iZXh0ZW5kZWRQYXJ0Ij4KLQkJCTxleHQ6cGFydCAvPgotCQk8L3dzZGw6cGFydD4KLQk8L3dzZGw6bWVzc2FnZT4KLQotCTx3c2RsOnBvcnRUeXBlIG5hbWU9ImV4dGVuZGVkUG9ydFR5cGUiPgotCQk8ZXh0OnBvcnRUeXBlIC8+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJleHRlbmRlZE9wZXJhdGlvbiI+Ci0JCQk8ZXh0Om9wZXJhdGlvbiAvPgotCQkJPHdzZGw6aW5wdXQgbWVzc2FnZT0iZXh0ZW5kZWRNZXNzYWdlIj4KLQkJCQk8ZXh0OmlucHV0IC8+Ci0JCQk8L3dzZGw6aW5wdXQ+Ci0JCQk8d3NkbDpvdXRwdXQgbWVzc2FnZT0iZXh0ZW5kZWRNZXNzYWdlIj4KLQkJCQk8ZXh0Om91dHB1dCAvPgotCQkJPC93c2RsOm91dHB1dD4KLQkJCTx3c2RsOmZhdWx0IG5hbWU9ImV4dGVuZGVkRmF1bHQiIG1lc3NhZ2U9ImV4dGVuZGVkTWVzc2FnZSI+Ci0JCQkJPGV4dDpmYXVsdCAvPgotCQkJPC93c2RsOmZhdWx0PgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpwb3J0VHlwZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL0Z1bGxFbGVtZW50RXh0ZW5zaWJpbGl0eS9JbXBvcnRlZC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9GdWxsRWxlbWVudEV4dGVuc2liaWxpdHkvSW1wb3J0ZWQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWJjMDAwZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL0Z1bGxFbGVtZW50RXh0ZW5zaWJpbGl0eS9JbXBvcnRlZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0ZWQvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJJbXBvcnRlZCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydGVkLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnRlZC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0gICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJpbiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ib3V0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICA8L3hzZDpzY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb24iIG5hbWU9InBhcmFtZXRlcnMiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIiBuYW1lPSJwYXJhbWV0ZXJzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJJbXBvcnRlZCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJJbXBvcnRlZFNPQVAiIHR5cGU9InRuczpJbXBvcnRlZCI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnRlZC9OZXdPcGVyYXRpb24iLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJJbXBvcnRlZCI+Ci0gICAgPHdzZGw6cG9ydCBiaW5kaW5nPSJ0bnM6SW1wb3J0ZWRTT0FQIiBuYW1lPSJJbXBvcnRlZFNPQVAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL0hhbmRsZXNEb2N1bWVudGF0aW9uRWxlbWVudHMvRG9jdW1lbnRlZC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9IYW5kbGVzRG9jdW1lbnRhdGlvbkVsZW1lbnRzL0RvY3VtZW50ZWQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmEzMTEyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL0hhbmRsZXNEb2N1bWVudGF0aW9uRWxlbWVudHMvRG9jdW1lbnRlZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotCXhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0RvY3VtZW50ZWQvIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IkRvY3VtZW50ZWQiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0RvY3VtZW50ZWQvIj4KLQk8d3NkbDpkb2N1bWVudGF0aW9uPkRlZmluaXRpb25zIGRvY3VtZW50YXRpb24uPC93c2RsOmRvY3VtZW50YXRpb24+Ci0JPHdzZGw6dHlwZXM+Ci0JCTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Eb2N1bWVudGVkLyIKLQkJCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotCQkJPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0JCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJpbiIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQk8L3hzZDplbGVtZW50PgotCQkJPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9Im91dCIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQk8L3hzZDplbGVtZW50PgotCQk8L3hzZDpzY2hlbWE+Ci0JPC93c2RsOnR5cGVzPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci0JCTx3c2RsOmRvY3VtZW50YXRpb24+TWVzc2FnZSBkb2N1bWVudGF0aW9uLjwvd3NkbDpkb2N1bWVudGF0aW9uPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb24iIG5hbWU9InBhcmFtZXRlcnMiIC8+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0JCTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIiBuYW1lPSJwYXJhbWV0ZXJzIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOnBvcnRUeXBlIG5hbWU9IkRvY3VtZW50ZWQiPgotCQk8d3NkbDpkb2N1bWVudGF0aW9uPgotCQkJUG9ydCB0eXBlIGRvY3VtZW50YXRpb24uCi0JCTwvd3NkbDpkb2N1bWVudGF0aW9uPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLQkJCTx3c2RsOmRvY3VtZW50YXRpb24+Ci0JCQkJT3BlcmF0aW9uIGRvY3VtZW50YXRpb24uCi0JCQk8L3dzZGw6ZG9jdW1lbnRhdGlvbj4KLQkJCTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0IiAvPgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpwb3J0VHlwZT4KLQk8d3NkbDpiaW5kaW5nIG5hbWU9IkRvY3VtZW50ZWRTT0FQIiB0eXBlPSJ0bnM6RG9jdW1lbnRlZCI+Ci0JCTx3c2RsOmRvY3VtZW50YXRpb24+QmluZGluZyBkb2N1bWVudGF0aW9uLjwvd3NkbDpkb2N1bWVudGF0aW9uPgotCQk8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIKLQkJCXRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIiAvPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLQkJCTxzb2FwOm9wZXJhdGlvbgotCQkJCXNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvRG9jdW1lbnRlZC9OZXdPcGVyYXRpb24iIC8+Ci0JCQk8d3NkbDppbnB1dD4KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KLQkJCTwvd3NkbDppbnB1dD4KLQkJCTx3c2RsOm91dHB1dD4KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KLQkJCTwvd3NkbDpvdXRwdXQ+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JPC93c2RsOmJpbmRpbmc+Ci0JPHdzZGw6c2VydmljZSBuYW1lPSJEb2N1bWVudGVkIj4KLQkJPHdzZGw6ZG9jdW1lbnRhdGlvbj5TZXJ2aWNlIGRvY3VtZW50YXRpb24uPC93c2RsOmRvY3VtZW50YXRpb24+Ci0JCTx3c2RsOnBvcnQgYmluZGluZz0idG5zOkRvY3VtZW50ZWRTT0FQIiBuYW1lPSJEb2N1bWVudGVkU09BUCI+Ci0JCQk8d3NkbDpkb2N1bWVudGF0aW9uPlBvcnQgZG9jdW1lbnRhdGlvbi48L3dzZGw6ZG9jdW1lbnRhdGlvbj4KLQkJCTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIiAvPgotCQk8L3dzZGw6cG9ydD4KLQk8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvTG9hZHNOYW1lbGVzc0RlZmluaXRpb24vTWlzc2luZ05hbWUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvTG9hZHNOYW1lbGVzc0RlZmluaXRpb24vTWlzc2luZ05hbWUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGU4Yzk5Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL0xvYWRzTmFtZWxlc3NEZWZpbml0aW9uL01pc3NpbmdOYW1lLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPg0KLTwvd3NkbDpkZWZpbml0aW9ucz4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL0xvYWRzTmFtZWxlc3NEZWZpbml0aW9uL1dpdGhOYW1lLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL0xvYWRzTmFtZWxlc3NEZWZpbml0aW9uL1dpdGhOYW1lLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5MDliNTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9Mb2Fkc05hbWVsZXNzRGVmaW5pdGlvbi9XaXRoTmFtZS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiBuYW1lPSJXU0RMRmlsZSI+DQotPC93c2RsOmRlZmluaXRpb25zPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvTG9jYWxOYW1lc3BhY2UvTG9jYWxOYW1lc3BhY2Uud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvTG9jYWxOYW1lc3BhY2UvTG9jYWxOYW1lc3BhY2Uud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTgyOWIyNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL0xvY2FsTmFtZXNwYWNlL0xvY2FsTmFtZXNwYWNlLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4NCi08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9TaW1wbGUvIg0KLQl4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyINCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iU2ltcGxlIg0KLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9TaW1wbGUvIj4NCi0NCi0JPHdzZGw6dHlwZXM+DQotDQotCQk8eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIg0KLQkJCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIg0KLQkJCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1NpbXBsZS8iPg0KLQ0KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJPcGVyYXRpb25JbnB1dCI+DQotDQotCQkJCTx4c2Q6Y29tcGxleFR5cGU+DQotDQotCQkJCQk8eHNkOnNlcXVlbmNlPg0KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJhdHRyaWJ1dGUxIg0KLQkJCQkJCQl0eXBlPSJ4c2Q6c3RyaW5nIiAvPg0KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJhdHRyaWJ1dGUyIg0KLQkJCQkJCQl0eXBlPSJ4c2Q6c3RyaW5nIiAvPg0KLQkJCQkJPC94c2Q6c2VxdWVuY2U+DQotCQkJCTwveHNkOmNvbXBsZXhUeXBlPg0KLQkJCTwveHNkOmVsZW1lbnQ+DQotDQotCQkJPHhzZDplbGVtZW50IG5hbWU9Ik9wZXJhdGlvbk91dHB1dCI+DQotDQotCQkJCTx4c2Q6Y29tcGxleFR5cGU+DQotDQotCQkJCQk8eHNkOnNlcXVlbmNlPg0KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJhdHRyaWJ1dGUxIg0KLQkJCQkJCQl0eXBlPSJ4c2Q6c3RyaW5nIiAvPg0KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJhdHRyaWJ1dGUyIg0KLQkJCQkJCQl0eXBlPSJ4c2Q6c3RyaW5nIiAvPg0KLQkJCQkJPC94c2Q6c2VxdWVuY2U+DQotCQkJCTwveHNkOmNvbXBsZXhUeXBlPg0KLQkJCTwveHNkOmVsZW1lbnQ+DQotCQk8L3hzZDpzY2hlbWE+DQotCTwvd3NkbDp0eXBlcz4NCi0NCi0JPHdzZGw6bWVzc2FnZSBuYW1lPSJteU9wZXJhdGlvblJlc3BvbnNlIj4NCi0JCTx3c2RsOnBhcnQgbmFtZT0ibXlPcGVyYXRpb25SZXNwb25zZSINCi0JCQllbGVtZW50PSJ0bnM6T3BlcmF0aW9uT3V0cHV0IiAvPg0KLQk8L3dzZGw6bWVzc2FnZT4NCi0NCi0JPHdzZGw6bWVzc2FnZSBuYW1lPSJteU9wZXJhdGlvblJlcXVlc3QiPg0KLQkJPHdzZGw6cGFydCB4bWxuczpwYXJ0dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvU2ltcGxlLyINCi0JCQluYW1lPSJteU9wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InBhcnR0bnM6T3BlcmF0aW9uSW5wdXQiIC8+DQotCTwvd3NkbDptZXNzYWdlPg0KLQ0KLQk8d3NkbDpwb3J0VHlwZSBuYW1lPSJNeVBvcnRUeXBlIj4NCi0NCi0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJteU9wZXJhdGlvbiI+DQotCQkJPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOm15T3BlcmF0aW9uUmVxdWVzdCIgLz4NCi0JCQk8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOm15T3BlcmF0aW9uUmVzcG9uc2UiIC8+DQotCQk8L3dzZGw6b3BlcmF0aW9uPg0KLQk8L3dzZGw6cG9ydFR5cGU+DQotCQ0KLTwvd3NkbDpkZWZpbml0aW9ucz4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL051bGxOYW1lc3BhY2VVUkkvQ29uZmlybWF0aW9uLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvTnVsbE5hbWVzcGFjZVVSSS9Db25maXJtYXRpb24ueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzQwODc3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvTnVsbE5hbWVzcGFjZVVSSS9Db25maXJtYXRpb24ueHNkCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9OdWxsTmFtZXNwYWNlVVJJL0NvbnRhY3RJbmZvLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvTnVsbE5hbWVzcGFjZVVSSS9Db250YWN0SW5mby54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzN2Q4YWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9OdWxsTmFtZXNwYWNlVVJJL0NvbnRhY3RJbmZvLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvQ29udGFjdEluZm8iCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0icGhvbmVOdW1iZXIiPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iYXJlYUNvZGUiIHR5cGU9InhzZDppbnQiIC8+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIgLz4KLQkJCTwveHNkOnNlcXVlbmNlPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iYWRkcmVzc1R5cGUiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9InN0cmVldCIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJjaXR5IiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotPC94c2Q6c2NoZW1hPgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL051bGxOYW1lc3BhY2VVUkkvQ29udGFjdEluZm9TZXJ2aWNlLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL051bGxOYW1lc3BhY2VVUkkvQ29udGFjdEluZm9TZXJ2aWNlLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5MDljNTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9OdWxsTmFtZXNwYWNlVVJJL0NvbnRhY3RJbmZvU2VydmljZS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9IkNvbnRhY3RJbmZvU2VydmljZSIKLQl4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmNvbnRhY3Q9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvQ29udGFjdEluZm8iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0NvbnRhY3RJbmZvU2VydmljZSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvQ29udGFjdEluZm9TZXJ2aWNlIj4KLQotCTx3c2RsOnR5cGVzPgotCQk8eHNkOnNjaGVtYQotCQkJdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0NvbnRhY3RJbmZvU2VydmljZSIKLQkJCXhtbG5zOmNvbnRhY3Q9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvQ29udGFjdEluZm8iCi0JCQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvQ29udGFjdEluZm9TZXJ2aWNlIgotCQkJeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0JCQk8eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvQ29udGFjdEluZm8iCi0JCQkJc2NoZW1hTG9jYXRpb249IkNvbnRhY3RJbmZvLnhzZCIgLz4KLQkJCTx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSJDb25maXJtYXRpb24ueHNkIiAvPgotCQk8L3hzZDpzY2hlbWE+Ci0JPC93c2RsOnR5cGVzPgotCi0JPHdzZGw6bWVzc2FnZSBuYW1lPSJ1cGRhdGVQaG9uZU51bWJlclJlcXVlc3RNc2ciPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9ImNvbnRhY3Q6cGhvbmVOdW1iZXIiIG5hbWU9ImlucHV0MSIgLz4KLQk8L3dzZGw6bWVzc2FnZT4KLQk8d3NkbDptZXNzYWdlIG5hbWU9InVwZGF0ZVBob25lTnVtYmVyUmVzcG9uc2VNc2ciPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9IkNvbmZpcm1hdGlvbiIgbmFtZT0ib3V0cHV0MSIgLz4KLQk8L3dzZGw6bWVzc2FnZT4KLQk8d3NkbDptZXNzYWdlIG5hbWU9InVwZGF0ZUFkZHJlc3NSZXF1ZXN0TXNnIj4KLQkJPHdzZGw6cGFydCB0eXBlPSJjb250YWN0OmFkZHJlc3NUeXBlIiBuYW1lPSJpbnB1dDIiIC8+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJ1cGRhdGVBZGRyZXNzUmVzcG9uc2VNc2ciPgotCQk8d3NkbDpwYXJ0IHR5cGU9IkNvbmZpcm1hdGlvblR5cGUiIG5hbWU9Im91dHB1dDIiIC8+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0KLQk8d3NkbDpwb3J0VHlwZSBuYW1lPSJ0ZXN0UG9ydFR5cGUiPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0idXBkYXRlUGhvbmVOdW1iZXIiPgotCQkJPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOnVwZGF0ZVBob25lTnVtYmVyUmVxdWVzdE1zZyIgLz4KLQkJCTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6dXBkYXRlUGhvbmVOdW1iZXJSZXNwb25zZU1zZyIgLz4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9InVwZGF0ZUFkZHJlc3MiPgotCQkJPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOnVwZGF0ZUFkZHJlc3NSZXF1ZXN0TXNnIiAvPgotCQkJPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczp1cGRhdGVBZGRyZXNzUmVzcG9uc2VNc2ciIC8+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JPC93c2RsOnBvcnRUeXBlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvT3BlcmF0aW9uU3R5bGUvT3BlcmF0aW9uU3R5bGVUZXN0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL09wZXJhdGlvblN0eWxlL09wZXJhdGlvblN0eWxlVGVzdC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDZhZWM2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvT3BlcmF0aW9uU3R5bGUvT3BlcmF0aW9uU3R5bGVUZXN0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMjAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08ZGVmaW5pdGlvbnMgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp0bnM9Imh0dHA6Ly9leGFtcGxlLm9yZyINCi0JeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgbmFtZT0iT3BlcmF0aW9uU3R5bGVUZXN0IiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9leGFtcGxlLm9yZyI+DQotDQotCTxqYXh3czpiaW5kaW5ncyB4bWxuczpqYXh3cz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4d3MiPg0KLQkJPGpheHdzOmVuYWJsZVdyYXBwZXJTdHlsZT50cnVlPC9qYXh3czplbmFibGVXcmFwcGVyU3R5bGU+DQotCQk8amF4d3M6ZW5hYmxlQXN5bmNNYXBwaW5nPmZhbHNlPC9qYXh3czplbmFibGVBc3luY01hcHBpbmc+DQotCTwvamF4d3M6YmluZGluZ3M+DQotDQotCTx0eXBlcz4NCi0JCTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2V4YW1wbGUub3JnIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIg0KLQkJCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB4bWxuczp0bnM9Imh0dHA6Ly9leGFtcGxlLm9yZyI+DQotDQotCQkJPHhzZDplbGVtZW50IG5hbWU9InF1b3RlUmVxdWVzdCIgdHlwZT0idG5zOnF1b3RlUmVxdWVzdFR5cGUiIC8+DQotDQotCQkJPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJxdW90ZVJlcXVlc3RUeXBlIj4NCi0JCQkJPHhzZDpzZXF1ZW5jZT4NCi0JCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJzdG9ja1N5bWJvbCIgdHlwZT0ieHNkOmludCIgLz4NCi0JCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJ0cmFuc2FjdGlvbkRhdGUiIHR5cGU9InhzZDpkYXRlIiAvPg0KLQkJCQk8L3hzZDpzZXF1ZW5jZT4NCi0JCQk8L3hzZDpjb21wbGV4VHlwZT4NCi0NCi0JCQk8eHNkOmVsZW1lbnQgbmFtZT0icXVvdGVSZXNwb25zZSIgdHlwZT0idG5zOnF1b3RlUmVzcG9uc2VUeXBlIiAvPg0KLQ0KLQkJCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0icXVvdGVSZXNwb25zZVR5cGUiPg0KLQkJCQk8eHNkOnNlcXVlbmNlPg0KLQkJCQkJPHhzZDplbGVtZW50IG5hbWU9InZhbHVlIiB0eXBlPSJ4c2Q6ZG91YmxlIiAvPg0KLQkJCQk8L3hzZDpzZXF1ZW5jZT4NCi0JCQk8L3hzZDpjb21wbGV4VHlwZT4NCi0NCi0JCQk8eHNkOmVsZW1lbnQgbmFtZT0icXVvdGVFcnJvciIgdHlwZT0ieHNkOnN0cmluZyIgLz4NCi0NCi0JCTwveHNkOnNjaGVtYT4NCi0JPC90eXBlcz4NCi0NCi0JPG1lc3NhZ2UgbmFtZT0iUXVvdGUiPg0KLQkJPHBhcnQgbmFtZT0icGFyYW1zIiBlbGVtZW50PSJ0bnM6cXVvdGVSZXF1ZXN0IiAvPg0KLQk8L21lc3NhZ2U+DQotDQotCTxtZXNzYWdlIG5hbWU9IlF1b3RlUmVzcG9uc2UiPg0KLQkJPHBhcnQgbmFtZT0icmVzdWx0IiBlbGVtZW50PSJ0bnM6cXVvdGVSZXNwb25zZSIgLz4NCi0JPC9tZXNzYWdlPg0KLQ0KLQk8bWVzc2FnZSBuYW1lPSJRdW90ZUVycm9yIj4NCi0JCTxwYXJ0IG5hbWU9ImVycm9yIiBlbGVtZW50PSJ0bnM6cXVvdGVFcnJvciIgLz4NCi0JPC9tZXNzYWdlPg0KLQ0KLQk8cG9ydFR5cGUgbmFtZT0iUXVvdGVQb3J0VHlwZSI+DQotDQotCQk8amF4d3M6YmluZGluZ3MgeG1sbnM6amF4d3M9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheHdzIj4NCi0JCQk8amF4d3M6Y2xhc3MgbmFtZT0iUXVvdGVQcm92aWRlckltcGwiIC8+DQotCQkJPGpheHdzOmVuYWJsZVdyYXBwZXJTdHlsZT50cnVlPC9qYXh3czplbmFibGVXcmFwcGVyU3R5bGU+DQotCQkJPGpheHdzOmVuYWJsZUFzeW5jTWFwcGluZz5mYWxzZTwvamF4d3M6ZW5hYmxlQXN5bmNNYXBwaW5nPg0KLQkJPC9qYXh3czpiaW5kaW5ncz4NCi0NCi0JCTxvcGVyYXRpb24gbmFtZT0iR2V0UXVvdGUiPg0KLQ0KLQkJCTxqYXh3czpiaW5kaW5ncyB4bWxuczpqYXh3cz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4d3MiDQotCQkJCXhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4NCi0JCQkJPGpheHdzOm1ldGhvZCBuYW1lPSJnZXRRdW90ZSIgLz4NCi0JCQkJPGpheHdzOnBhcmFtZXRlciBwYXJ0PSJ3c2RsOmRlZmluaXRpb25zL3dzZGw6bWVzc2FnZVtAbmFtZT0nUXVvdGUnXS93c2RsOnBhcnRbQG5hbWU9J3BhcmFtcyddIg0KLQkJCQkJY2hpbGRFbGVtZW50TmFtZT0idG5zOnN0b2NrU3ltYm9sIiBuYW1lPSJzeW1ib2wiIC8+DQotCQkJCTxqYXh3czpwYXJhbWV0ZXIgcGFydD0id3NkbDpkZWZpbml0aW9ucy93c2RsOm1lc3NhZ2VbQG5hbWU9J1F1b3RlJ10vd3NkbDpwYXJ0W0BuYW1lPSdwYXJhbXMnXSINCi0JCQkJCWNoaWxkRWxlbWVudE5hbWU9InRuczp0cmFuc2FjdGlvbkRhdGUiIG5hbWU9ImRhdGUiIC8+DQotCQkJCTxqYXh3czplbmFibGVXcmFwcGVyU3R5bGU+dHJ1ZTwvamF4d3M6ZW5hYmxlV3JhcHBlclN0eWxlPg0KLQkJCQk8amF4d3M6ZW5hYmxlQXN5bmNNYXBwaW5nPmZhbHNlPC9qYXh3czplbmFibGVBc3luY01hcHBpbmc+DQotCQkJPC9qYXh3czpiaW5kaW5ncz4NCi0NCi0JCQk8aW5wdXQgbWVzc2FnZT0idG5zOlF1b3RlIiAvPg0KLQ0KLQkJCTxvdXRwdXQgbWVzc2FnZT0idG5zOlF1b3RlUmVzcG9uc2UiIC8+DQotDQotCQkJPGZhdWx0IG5hbWU9IlF1b3RlRXJyb3IiIG1lc3NhZ2U9InRuczpRdW90ZUVycm9yIj4NCi0NCi0JCQkJPGpheHdzOmJpbmRpbmdzIHhtbG5zOmpheHdzPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXh3cyI+DQotCQkJCQk8amF4d3M6Y2xhc3MgbmFtZT0iUXVvdGVFeGNlcHRpb24iIC8+DQotCQkJCTwvamF4d3M6YmluZGluZ3M+DQotDQotCQkJPC9mYXVsdD4NCi0JCTwvb3BlcmF0aW9uPg0KLQk8L3BvcnRUeXBlPg0KLQ0KLQk8YmluZGluZyBuYW1lPSJRdW90ZUJpbmRpbmciIHR5cGU9InRuczpRdW90ZVBvcnRUeXBlIj4NCi0NCi0JCTxzb2FwOmJpbmRpbmcgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiIHN0eWxlPSJkb2N1bWVudCIgLz4NCi0NCi0JCTxvcGVyYXRpb24gbmFtZT0iR2V0UXVvdGUiPg0KLQkJCTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiIC8+DQotCQkJPGlucHV0Pg0KLQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4NCi0JCQk8L2lucHV0Pg0KLQkJCTxvdXRwdXQ+DQotCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPg0KLQkJCTwvb3V0cHV0Pg0KLQkJCTxmYXVsdCBuYW1lPSJRdW90ZUVycm9yIj4NCi0JCQkJPHNvYXA6ZmF1bHQgbmFtZT0iUXVvdGVFcnJvciIgdXNlPSJsaXRlcmFsIiAvPg0KLQkJCTwvZmF1bHQ+DQotCQk8L29wZXJhdGlvbj4NCi0NCi0JPC9iaW5kaW5nPg0KLQ0KLQk8c2VydmljZSBuYW1lPSJRdW90ZVNlcnZpY2UiPg0KLQ0KLQkJPGpheHdzOmJpbmRpbmdzIHhtbG5zOmpheHdzPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXh3cyI+DQotCQkJPGpheHdzOmNsYXNzIG5hbWU9IlF1b3RhdGlvblNlcnZpY2UiIC8+DQotCQk8L2pheHdzOmJpbmRpbmdzPg0KLQ0KLQkJPHBvcnQgbmFtZT0iUXVvdGVQb3J0IiBiaW5kaW5nPSJ0bnM6UXVvdGVCaW5kaW5nIj4NCi0NCi0JCQk8amF4d3M6YmluZGluZ3MgeG1sbnM6amF4d3M9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheHdzIj4NCi0JCQkJPGpheHdzOm1ldGhvZCBuYW1lPSJnZXRRdW90YXRpb25TZXJ2aWNlIiAvPg0KLQkJCTwvamF4d3M6YmluZGluZ3M+DQotDQotCQkJPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL2xvY2FsaG9zdDo4MDgwL3F1b3RlIiAvPg0KLQ0KLQkJPC9wb3J0Pg0KLQ0KLQk8L3NlcnZpY2U+DQotDQotPC9kZWZpbml0aW9ucz4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL1R5cGVBbmRFbGVtZW50UmVzb2x1dGlvbi9UZXN0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL1R5cGVBbmRFbGVtZW50UmVzb2x1dGlvbi9UZXN0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkZGU4OGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9UeXBlQW5kRWxlbWVudFJlc29sdXRpb24vVGVzdC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08ZGVmaW5pdGlvbnMgbmFtZT0iVGVzdFNlcnZpY2UiDQotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3Rlc3Qub3JnL1NlcnZpY2UvIg0KLQl4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iDQotCXhtbG5zOnRucz0iaHR0cDovL3Rlc3Qub3JnL1NlcnZpY2UvIg0KLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIg0KLQl4bWxuczp0ZXN0PSJodHRwOi8vdGVzdC5vcmcvIj4NCi0JPHR5cGVzPg0KLQkJPHhzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPg0KLQkJCTx4czppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vdGVzdC5vcmcvIg0KLQkJCQlzY2hlbWFMb2NhdGlvbj0iVGVzdDEueHNkIiAvPg0KLQkJPC94czpzY2hlbWE+DQotCQk8eHM6c2NoZW1hIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+DQotCQkJPHhzOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly90ZXN0Lm9yZy8iDQotCQkJCXNjaGVtYUxvY2F0aW9uPSJUZXN0Mi54c2QiIC8+DQotCQk8L3hzOnNjaGVtYT4NCi0JPC90eXBlcz4NCi0JPG1lc3NhZ2UgbmFtZT0idGVzdFJlcXVlc3QiPg0KLQkJPHBhcnQgbmFtZT0icmVxdWVzdFBhcnQiIHR5cGU9InRlc3Q6TXlUeXBlIiAvPg0KLQk8L21lc3NhZ2U+DQotCTxtZXNzYWdlIG5hbWU9InRlc3RSZXNwb25zZSI+DQotCQk8cGFydCBuYW1lPSJyZXNwb25zZVBhcnQiIGVsZW1lbnQ9InRlc3Q6TXlFbGVtZW50IiAvPg0KLQk8L21lc3NhZ2U+DQotCTxwb3J0VHlwZSBuYW1lPSJUZXN0UG9ydCI+DQotCQk8b3BlcmF0aW9uIG5hbWU9InRlc3RPcGVyYXRpb24iPg0KLQkJCTxpbnB1dCBtZXNzYWdlPSJ0bnM6dGVzdFJlcXVlc3QiIG5hbWU9InRlc3RSZXF1ZXN0IiAvPg0KLQkJCTxvdXRwdXQgbWVzc2FnZT0idG5zOnRlc3RSZXNwb25zZSIgbmFtZT0idGVzdFJlc3BvbnNlIiAvPg0KLQkJPC9vcGVyYXRpb24+DQotDQotCTwvcG9ydFR5cGU+DQotPC9kZWZpbml0aW9ucz4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL1R5cGVBbmRFbGVtZW50UmVzb2x1dGlvbi9UZXN0MS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL1R5cGVBbmRFbGVtZW50UmVzb2x1dGlvbi9UZXN0MS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyYzM2YWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9UeXBlQW5kRWxlbWVudFJlc29sdXRpb24vVGVzdDEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIg0KLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZXN0Lm9yZy8iDQotCXhtbG5zOnRucz0iaHR0cDovL3Rlc3Qub3JnLyI+DQotPC9zY2hlbWE+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9UeXBlQW5kRWxlbWVudFJlc29sdXRpb24vVGVzdDIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9UeXBlQW5kRWxlbWVudFJlc29sdXRpb24vVGVzdDIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjgxYTE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvVHlwZUFuZEVsZW1lbnRSZXNvbHV0aW9uL1Rlc3QyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiDQotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3Rlc3Qub3JnLyINCi0JeG1sbnM6dG5zPSJodHRwOi8vdGVzdC5vcmcvIj4NCi0JDQotCTxlbGVtZW50IG5hbWU9Ik15RWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+DQotDQotCTxzaW1wbGVUeXBlIG5hbWU9Ik15VHlwZSI+DQotCQk8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj48L3Jlc3RyaWN0aW9uPg0KLQk8L3NpbXBsZVR5cGU+DQotDQotPC9zY2hlbWE+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9UeXBlc0V4dGVuc2liaWxpdHkvVHlwZXNFeHRlbnNpYmlsaXR5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL1R5cGVzRXh0ZW5zaWJpbGl0eS9UeXBlc0V4dGVuc2liaWxpdHkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQ1NjY4YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL1R5cGVzRXh0ZW5zaWJpbGl0eS9UeXBlc0V4dGVuc2liaWxpdHkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvVHlwZXNFeHRlbnNpYmlsaXR5LyIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJUeXBlc0V4dGVuc2liaWxpdHkiCi0JeG1sbnM6dHlwZUV4PSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL090aGVyVHlwZXMvIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9UeXBlc0V4dGVuc2liaWxpdHkvIj4KLQk8d3NkbDp0eXBlcz4KLQkJPHR5cGVFeDp0eXBlRGVmIC8+Ci0JCTx4c2Q6c2NoZW1hCi0JCQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvVHlwZXMvIj4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJ0ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQk8L3hzZDpzY2hlbWE+Ci0JCTx0eXBlRXg6dHlwZURlZiAvPgotCTwvd3NkbDp0eXBlcz4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvV1NETEVsZW1lbnRSZXNvbHV0aW9uL2ZpcnN0bGV2ZWwud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvV1NETEVsZW1lbnRSZXNvbHV0aW9uL2ZpcnN0bGV2ZWwud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmNiOGRjMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL1dTRExFbGVtZW50UmVzb2x1dGlvbi9maXJzdGxldmVsLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPGRlZmluaXRpb25zIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPg0KLSAgICA8aW1wb3J0IGxvY2F0aW9uPSJzZWNvbmRsZXZlbC53c2RsIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iLz4NCi0JPG1lc3NhZ2UgbmFtZT0idGVzdElOUFVUbWVzc2FnZSI+DQotCQk8cGFydCBuYW1lPSJ0ZXN0SU5wYXJ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+DQotCTwvbWVzc2FnZT4NCi08L2RlZmluaXRpb25zPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvV1NETEVsZW1lbnRSZXNvbHV0aW9uL21haW4ud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvQnVnRml4ZXMvV1NETEVsZW1lbnRSZXNvbHV0aW9uL21haW4ud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjBhNDJhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL1dTRExFbGVtZW50UmVzb2x1dGlvbi9tYWluLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTxkZWZpbml0aW9ucyB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIA0KLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIA0KLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPg0KLSAgICANCi0gICAgPGltcG9ydCBsb2NhdGlvbj0iZmlyc3RsZXZlbC53c2RsIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iLz4NCi0gICAgDQotICAgIDxwb3J0VHlwZSBuYW1lPSJUZXN0UG9ydFR5cGUiPg0KLQ0KLSAgICAJPG9wZXJhdGlvbiBuYW1lPSJUZXN0T3BlcmF0aW9uIj4NCi0NCi0gICAgCQk8IS0tIFRoaXMgaXMgbG9jYXRlZCBpbiB0aGUgZmlyc3QgbGV2ZWwgaW1wb3J0IC0tPg0KLQ0KLSAgICAJCTxpbnB1dCBtZXNzYWdlPSJ0bnM6dGVzdElOUFVUbWVzc2FnZSIvPg0KLQ0KLSAgICAJCTwhLS0gVGhpcyBpcyBsb2NhdGVkIGluIHRoZSBzZWNvbmQgbGV2ZWwgaW1wb3J0IC0tPg0KLQ0KLSAgICAJCTxvdXRwdXQgbWVzc2FnZT0idG5zOnRlc3RPVVRQVVRtZXNzYWdlIi8+DQotDQotICAgIAk8L29wZXJhdGlvbj4NCi0NCi0gICAgPC9wb3J0VHlwZT4NCi0gICAgDQotPC9kZWZpbml0aW9ucz4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL1dTRExFbGVtZW50UmVzb2x1dGlvbi9zZWNvbmRsZXZlbC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9CdWdGaXhlcy9XU0RMRWxlbWVudFJlc29sdXRpb24vc2Vjb25kbGV2ZWwud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmUyZWZkOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0J1Z0ZpeGVzL1dTRExFbGVtZW50UmVzb2x1dGlvbi9zZWNvbmRsZXZlbC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08ZGVmaW5pdGlvbnMgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiANCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiANCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgDQotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+DQotDQotCTwhLS0gSGVyZSB0byBmb3JjZSBhIGN5Y2xpYyBpbXBvcnQgdG8gbWFrZSBzdXJlIHRoZSBjb2RlIGRvZXMgbm90IGdvIGludG8gYW4gaW5maW5pdGUgcmVjdXJzaW9uLiAtLT4NCi0JDQotICAgIDxpbXBvcnQgbG9jYXRpb249Im1haW4ud3NkbCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIi8+DQotDQotCTxtZXNzYWdlIG5hbWU9InRlc3RPVVRQVVRtZXNzYWdlIj4NCi0JCTxwYXJ0IG5hbWU9InRlc3RPVVRwYXJ0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+DQotCTwvbWVzc2FnZT4NCi0NCi0JPCEtLSBEdXBsaWNhdGVkIGhlcmUgdG8gYWxsb3cgdGVzdGluZyB0aGUgaW1wb3J0cyB0cmVlIHRyYXZlcnNhbCBvcmRlci4NCi0JVGhpcyBtZXNzYWdlIHdpbGwgYmUgIm1hc2tlZCIgYnkgdGhlIG9uZSBkZWNsYXJlZCBpbiB0aGUgZmlyc3RsZXZlbC53c2RsIC0tPg0KLQ0KLQk8bWVzc2FnZSBuYW1lPSJ0ZXN0SU5QVVRtZXNzYWdlIj4NCi0JCTxwYXJ0IG5hbWU9InRlc3RJTnBhcnQiIHR5cGU9InhzZDppbnQiLz4NCi0JPC9tZXNzYWdlPg0KLQ0KLTwvZGVmaW5pdGlvbnM+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9FeHRlbnNpb25zL0hUVFAvSFRUUEV4YW1wbGUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvRXh0ZW5zaW9ucy9IVFRQL0hUVFBFeGFtcGxlLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExYTRiNzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9FeHRlbnNpb25zL0hUVFAvSFRUUEV4YW1wbGUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLQl4bWxuczpodHRwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvIgotCXhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0hUVFBFeGFtcGxlLyIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJIVFRQRXhhbXBsZSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSFRUUEV4YW1wbGUvIj4KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotCQk8d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0JCTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6cG9ydFR5cGUgbmFtZT0iSFRUUEV4YW1wbGUiPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLQkJCTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0IiAvPgotCQkJPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIgLz4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQk8L3dzZGw6cG9ydFR5cGU+Ci0JPHdzZGw6YmluZGluZyBuYW1lPSJIVFRQRXhhbXBsZUhUVFAiIHR5cGU9InRuczpIVFRQRXhhbXBsZSI+Ci0JCTxodHRwOmJpbmRpbmcgdmVyYj0iR0VUIiAvPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLQkJCTxodHRwOm9wZXJhdGlvbiBsb2NhdGlvbj0iL05ld09wZXJhdGlvbiIgLz4KLQkJCTx3c2RsOmlucHV0PgotCQkJCTxodHRwOnVybEVuY29kZWQgLz4KLQkJCTwvd3NkbDppbnB1dD4KLQkJCTx3c2RsOm91dHB1dD4KLQkJCQk8bWltZTpjb250ZW50IHR5cGU9InRleHQveG1sIiAvPgotCQkJPC93c2RsOm91dHB1dD4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQk8L3dzZGw6YmluZGluZz4KLQk8d3NkbDpzZXJ2aWNlIG5hbWU9IkhUVFBFeGFtcGxlIj4KLQkJPHdzZGw6cG9ydCBiaW5kaW5nPSJ0bnM6SFRUUEV4YW1wbGVIVFRQIgotCQkJbmFtZT0iSFRUUEV4YW1wbGVIVFRQIj4KLQkJCTxodHRwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIiAvPgotCQk8L3dzZGw6cG9ydD4KLQk8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvRXh0ZW5zaW9ucy9IVFRQL0hUVFBUZXN0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0V4dGVuc2lvbnMvSFRUUC9IVFRQVGVzdC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTIxMWVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvRXh0ZW5zaW9ucy9IVFRQL0hUVFBUZXN0LndzZGwKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0V4dGVuc2lvbnMvTUlNRS9NSU1FRXhhbXBsZS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9FeHRlbnNpb25zL01JTUUvTUlNRUV4YW1wbGUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTMzZDQ0ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0V4dGVuc2lvbnMvTUlNRS9NSU1FRXhhbXBsZS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxkZWZpbml0aW9ucyB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi0JeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01JTUVFeGFtcGxlIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NSU1FRXhhbXBsZSI+Ci0JPHR5cGVzPgotCQk8eHNkOnNjaGVtYQotCQkJdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01JTUVFeGFtcGxlIj4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9IlhNTERhdGEiPgotCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iZWxlbWVudDEiIHR5cGU9InhzZDppbnQiPjwveHNkOmVsZW1lbnQ+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iZWxlbWVudDIiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2NoZW1hPgotCTwvdHlwZXM+Ci0JPG1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1zZyI+Ci0JCTxwYXJ0IG5hbWU9InJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0IiAvPgotCTwvbWVzc2FnZT4KLQk8bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1zZyI+Ci0JCTxwYXJ0IG5hbWU9InJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2UiIC8+Ci0JCTxwYXJ0IG5hbWU9InJlc3BvbnNlRGF0YSIgdHlwZT0ieHNkOmJhc2U2NEJpbmFyeSIgLz4KLQkJPHBhcnQgbmFtZT0ieG1sRGF0YSIgZWxlbWVudD0idG5zOlhNTERhdGEiIC8+Ci0JPC9tZXNzYWdlPgotCTxwb3J0VHlwZSBuYW1lPSJNSU1FRXhhbXBsZVBvcnRUeXBlIj4KLQkJPG9wZXJhdGlvbiBuYW1lPSJ0ZXN0T3BlcmF0aW9uIj4KLQkJCTxpbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1zZyIgLz4KLQkJCTxvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTXNnIiAvPgotCQk8L29wZXJhdGlvbj4KLQk8L3BvcnRUeXBlPgotCTxiaW5kaW5nIG5hbWU9Ik1JTUVFeGFtcGxlQmluZGluZyIgdHlwZT0idG5zOk1JTUVFeGFtcGxlUG9ydFR5cGUiPgotCQk8c29hcDpiaW5kaW5nIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIgotCQkJc3R5bGU9ImRvY3VtZW50IiAvPgotCQk8b3BlcmF0aW9uIG5hbWU9InRlc3RPcGVyYXRpb24iPgotCQkJPHNvYXA6b3BlcmF0aW9uCi0JCQkJc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NSU1FRXhhbXBsZS90ZXN0T3BlcmF0aW9uIiAvPgotCQkJPGlucHV0PgotCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgotCQkJPC9pbnB1dD4KLQkJCTxvdXRwdXQ+Ci0JCQkJPG1pbWU6bXVsdGlwYXJ0UmVsYXRlZD4KLQkJCQkJPG1pbWU6cGFydCBuYW1lPSJyZXNwb25zZSI+Ci0JCQkJCQk8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KLQkJCQkJPC9taW1lOnBhcnQ+Ci0JCQkJCTxtaW1lOnBhcnQgbmFtZT0icmVzcG9uc2VEYXRhIj4KLQkJCQkJCTxtaW1lOmNvbnRlbnQgcGFydD0icmVzcG9uc2VEYXRhIiB0eXBlPSJ0ZXh0L2JpbmFyeSIgLz4KLQkJCQkJPC9taW1lOnBhcnQ+Ci0JCQkJPC9taW1lOm11bHRpcGFydFJlbGF0ZWQ+Ci0JCQkJPG1pbWU6bWltZVhNTCBwYXJ0PSJ4bWxEYXRhIiAvPgotCQkJPC9vdXRwdXQ+Ci0JCTwvb3BlcmF0aW9uPgotCTwvYmluZGluZz4KLQk8c2VydmljZSBuYW1lPSJNSU1FRXhhbXBsZVNlcnZpY2UiPgotCQk8cG9ydCBuYW1lPSJNSU1FRXhhbXBsZVBvcnQiIGJpbmRpbmc9InRuczpNSU1FRXhhbXBsZUJpbmRpbmciPgotCQkJPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL2xvY2FsaG9zdDo4MDgwL01JTUVFeGFtcGxlIiAvPgotCQk8L3BvcnQ+Ci0JPC9zZXJ2aWNlPgotPC9kZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0V4dGVuc2lvbnMvTUlNRS9NSU1FVGVzdC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9FeHRlbnNpb25zL01JTUUvTUlNRVRlc3Qud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWMzMTZhYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0V4dGVuc2lvbnMvTUlNRS9NSU1FVGVzdC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxkZWZpbml0aW9ucyB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi0JeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01JTUVUZXN0IgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NSU1FVGVzdCI+Ci0JPHR5cGVzPgotCQk8eHNkOnNjaGVtYQotCQkJdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01JTUVUZXN0Ij4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9IlJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9IlhNTERhdGEiPgotCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iZWxlbWVudDEiIHR5cGU9InhzZDppbnQiPjwveHNkOmVsZW1lbnQ+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iZWxlbWVudDIiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2NoZW1hPgotCTwvdHlwZXM+Ci0JPG1lc3NhZ2UgbmFtZT0iUmVxdWVzdE1zZyI+Ci0JCTxwYXJ0IG5hbWU9InJlcXVlc3QiIGVsZW1lbnQ9InRuczpSZXF1ZXN0IiAvPgotCTwvbWVzc2FnZT4KLQk8bWVzc2FnZSBuYW1lPSJSZXNwb25zZU1zZyI+Ci0JCTxwYXJ0IG5hbWU9InJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6UmVzcG9uc2UiIC8+Ci0JCTxwYXJ0IG5hbWU9InJlc3BvbnNlRGF0YSIgdHlwZT0ieHNkOmJhc2U2NEJpbmFyeSIgLz4KLQkJPHBhcnQgbmFtZT0ieG1sRGF0YSIgZWxlbWVudD0idG5zOlhNTERhdGEiIC8+Ci0JPC9tZXNzYWdlPgotCTxwb3J0VHlwZSBuYW1lPSJNSU1FVGVzdFBvcnRUeXBlIj4KLQkJPG9wZXJhdGlvbiBuYW1lPSJ0ZXN0T3BlcmF0aW9uIj4KLQkJCTxpbnB1dCBtZXNzYWdlPSJ0bnM6UmVxdWVzdE1zZyIgLz4KLQkJCTxvdXRwdXQgbWVzc2FnZT0idG5zOlJlc3BvbnNlTXNnIiAvPgotCQk8L29wZXJhdGlvbj4KLQk8L3BvcnRUeXBlPgotCTxiaW5kaW5nIG5hbWU9Ik1JTUVUZXN0QmluZGluZyIgdHlwZT0idG5zOk1JTUVUZXN0UG9ydFR5cGUiPgotCQk8c29hcDpiaW5kaW5nIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIgotCQkJc3R5bGU9ImRvY3VtZW50IiAvPgotCQk8b3BlcmF0aW9uIG5hbWU9InRlc3RPcGVyYXRpb24iPgotCQkJPHNvYXA6b3BlcmF0aW9uCi0JCQkJc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NSU1FVGVzdC90ZXN0T3BlcmF0aW9uIiAvPgotCQkJPGlucHV0PgotCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgotCQkJPC9pbnB1dD4KLQkJCTxvdXRwdXQ+Ci0JCQk8L291dHB1dD4KLQkJPC9vcGVyYXRpb24+Ci0JPC9iaW5kaW5nPgotCTxzZXJ2aWNlIG5hbWU9Ik1JTUVUZXN0U2VydmljZSI+Ci0JCTxwb3J0IG5hbWU9Ik1JTUVUZXN0UG9ydCIgYmluZGluZz0idG5zOk1JTUVUZXN0QmluZGluZyI+Ci0JCQk8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vbG9jYWxob3N0OjgwODAvTUlNRVRlc3QiIC8+Ci0JCTwvcG9ydD4KLQk8L3NlcnZpY2U+Ci08L2RlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvRXh0ZW5zaW9ucy9TT0FQL0RvY3VtZW50TGl0ZXJhbFNPQVBFeGFtcGxlLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0V4dGVuc2lvbnMvU09BUC9Eb2N1bWVudExpdGVyYWxTT0FQRXhhbXBsZS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhY2I4MzBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvRXh0ZW5zaW9ucy9TT0FQL0RvY3VtZW50TGl0ZXJhbFNPQVBFeGFtcGxlLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMzcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotCXhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0RvY3VtZW50TGl0ZXJhbFNPQVBFeGFtcGxlLyIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCW5hbWU9IkRvY3VtZW50TGl0ZXJhbFNPQVBFeGFtcGxlIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Eb2N1bWVudExpdGVyYWxTT0FQRXhhbXBsZS8iPgotCTx3c2RsOmRvY3VtZW50YXRpb24+VGVzdCBkb2N1bWVudGF0aW9uLjwvd3NkbDpkb2N1bWVudGF0aW9uPgotCTx3c2RsOnR5cGVzPgotCQk8d3NkbDpkb2N1bWVudGF0aW9uPlRlc3QgZG9jdW1lbnRhdGlvbi48L3dzZGw6ZG9jdW1lbnRhdGlvbj4KLQkJPHhzZDpzY2hlbWEKLQkJCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Eb2N1bWVudExpdGVyYWxTT0FQRXhhbXBsZS8iCi0JCQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImluIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0ib3V0IiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uRmF1bHQiPgotCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iZmF1bHQiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25IZWFkZXIiPgotCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iaGVhZGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uSGVhZGVyRmF1bHQiPgotCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iaGVhZGVyRmF1bHQiCi0JCQkJCQkJdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQk8L3hzZDplbGVtZW50PgotCQk8L3hzZDpzY2hlbWE+Ci0JPC93c2RsOnR5cGVzPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iVGVzdE1zZyI+Ci0JCTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvbkhlYWRlciIgbmFtZT0idGVzdEhlYWRlciIgLz4KLQkJPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uSGVhZGVyRmF1bHQiCi0JCQluYW1lPSJ0ZXN0SGVhZGVyRmF1bHQiIC8+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0TXNnIj4KLQkJPHdzZGw6ZG9jdW1lbnRhdGlvbj5UZXN0IGRvY3VtZW50YXRpb24uPC93c2RsOmRvY3VtZW50YXRpb24+Ci0JCTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiCi0JCQluYW1lPSJwYXJhbWV0ZXJzIj4KLQkJCTx3c2RsOmRvY3VtZW50YXRpb24+VGVzdCBkb2N1bWVudGF0aW9uLjwvd3NkbDpkb2N1bWVudGF0aW9uPgotCQk8L3dzZGw6cGFydD4KLQkJPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uSGVhZGVyIiBuYW1lPSJoZWFkZXIiIC8+Ci0JCTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvbkhlYWRlckZhdWx0IgotCQkJbmFtZT0iaGVhZGVyRmF1bHQiIC8+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZU1zZyI+Ci0JCTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIiBuYW1lPSJwYXJhbWV0ZXJzIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uRmF1bHRNc2ciPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25GYXVsdCIgbmFtZT0iZmF1bHQiIC8+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6cG9ydFR5cGUgbmFtZT0iRG9jdW1lbnRMaXRlcmFsU09BUEV4YW1wbGUiPgotCQk8d3NkbDpkb2N1bWVudGF0aW9uPlRlc3QgZG9jdW1lbnRhdGlvbi48L3dzZGw6ZG9jdW1lbnRhdGlvbj4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0JCQk8d3NkbDpkb2N1bWVudGF0aW9uPlRlc3QgZG9jdW1lbnRhdGlvbi48L3dzZGw6ZG9jdW1lbnRhdGlvbj4KLQkJCTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0TXNnIj4KLQkJCQk8d3NkbDpkb2N1bWVudGF0aW9uPgotCQkJCQlUZXN0IGRvY3VtZW50YXRpb24uCi0JCQkJPC93c2RsOmRvY3VtZW50YXRpb24+Ci0JCQk8L3dzZGw6aW5wdXQ+Ci0JCQk8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlTXNnIj4KLQkJCQk8d3NkbDpkb2N1bWVudGF0aW9uPgotCQkJCQlUZXN0IGRvY3VtZW50YXRpb24uCi0JCQkJPC93c2RsOmRvY3VtZW50YXRpb24+Ci0JCQk8L3dzZGw6b3V0cHV0PgotCQkJPHdzZGw6ZmF1bHQgbmFtZT0iZmF1bHQiCi0JCQkJbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvbkZhdWx0TXNnIj4KLQkJCQk8d3NkbDpkb2N1bWVudGF0aW9uPgotCQkJCQlUZXN0IGRvY3VtZW50YXRpb24uCi0JCQkJPC93c2RsOmRvY3VtZW50YXRpb24+Ci0JCQk8L3dzZGw6ZmF1bHQ+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JPC93c2RsOnBvcnRUeXBlPgotCTx3c2RsOmJpbmRpbmcgbmFtZT0iRG9jdW1lbnRMaXRlcmFsU09BUEV4YW1wbGVTT0FQIgotCQl0eXBlPSJ0bnM6RG9jdW1lbnRMaXRlcmFsU09BUEV4YW1wbGUiPgotCQk8d3NkbDpkb2N1bWVudGF0aW9uPlRlc3QgZG9jdW1lbnRhdGlvbi48L3dzZGw6ZG9jdW1lbnRhdGlvbj4KLQkJPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiCi0JCQl0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIgLz4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0JCQk8d3NkbDpkb2N1bWVudGF0aW9uPlRlc3QgZG9jdW1lbnRhdGlvbi48L3dzZGw6ZG9jdW1lbnRhdGlvbj4KLQkJCTxzb2FwOm9wZXJhdGlvbiBzdHlsZT0iZG9jdW1lbnQiCi0JCQkJc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Eb2N1bWVudExpdGVyYWxTT0FQRXhhbXBsZS9OZXdPcGVyYXRpb24iIC8+Ci0JCQk8d3NkbDppbnB1dD4KLQkJCQk8d3NkbDpkb2N1bWVudGF0aW9uPgotCQkJCQlUZXN0IGRvY3VtZW50YXRpb24uCi0JCQkJPC93c2RsOmRvY3VtZW50YXRpb24+Ci0JCQkJPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSJwYXJhbWV0ZXJzIiAvPgotCQkJCTxzb2FwOmhlYWRlciB1c2U9ImxpdGVyYWwiIHBhcnQ9ImhlYWRlciIKLQkJCQkJbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3RNc2ciPgotCQkJCQk8c29hcDpoZWFkZXJmYXVsdCB1c2U9ImxpdGVyYWwiIHBhcnQ9ImhlYWRlckZhdWx0IgotCQkJCQkJbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3RNc2ciIC8+Ci0JCQkJPC9zb2FwOmhlYWRlcj4KLQkJCTwvd3NkbDppbnB1dD4KLQkJCTx3c2RsOm91dHB1dD4KLQkJCQk8d3NkbDpkb2N1bWVudGF0aW9uPgotCQkJCQlUZXN0IGRvY3VtZW50YXRpb24uCi0JCQkJPC93c2RsOmRvY3VtZW50YXRpb24+Ci0JCQkJPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIC8+Ci0JCQk8L3dzZGw6b3V0cHV0PgotCQkJPHdzZGw6ZmF1bHQgbmFtZT0iZmF1bHQiPgotCQkJCTx3c2RsOmRvY3VtZW50YXRpb24+Ci0JCQkJCVRlc3QgZG9jdW1lbnRhdGlvbi4KLQkJCQk8L3dzZGw6ZG9jdW1lbnRhdGlvbj4KLQkJCQk8c29hcDpmYXVsdCBuYW1lPSJmYXVsdCIgdXNlPSJsaXRlcmFsIiAvPgotCQkJPC93c2RsOmZhdWx0PgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpiaW5kaW5nPgotCTx3c2RsOnNlcnZpY2UgbmFtZT0iRG9jdW1lbnRMaXRlcmFsU09BUEV4YW1wbGUiPgotCQk8d3NkbDpkb2N1bWVudGF0aW9uPlRlc3QgZG9jdW1lbnRhdGlvbi48L3dzZGw6ZG9jdW1lbnRhdGlvbj4KLQkJPHdzZGw6cG9ydCBiaW5kaW5nPSJ0bnM6RG9jdW1lbnRMaXRlcmFsU09BUEV4YW1wbGVTT0FQIgotCQkJbmFtZT0iRG9jdW1lbnRMaXRlcmFsU09BUEV4YW1wbGVTT0FQIj4KLQkJCTx3c2RsOmRvY3VtZW50YXRpb24+VGVzdCBkb2N1bWVudGF0aW9uLjwvd3NkbDpkb2N1bWVudGF0aW9uPgotCQkJPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iIC8+Ci0JCTwvd3NkbDpwb3J0PgotCTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvRXh0ZW5zaW9ucy9TT0FQL1JQQ0VuY29kZWRTT0FQRXhhbXBsZS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9FeHRlbnNpb25zL1NPQVAvUlBDRW5jb2RlZFNPQVBFeGFtcGxlLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MDJhMmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9FeHRlbnNpb25zL1NPQVAvUlBDRW5jb2RlZFNPQVBFeGFtcGxlLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi0JeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvUlBDRW5jb2RlZFNPQVBFeGFtcGxlLyIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCW5hbWU9IlJQQ0VuY29kZWRTT0FQRXhhbXBsZSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvUlBDRW5jb2RlZFNPQVBFeGFtcGxlLyI+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLQkJPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotCQk8d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOnBvcnRUeXBlIG5hbWU9IlJQQ0VuY29kZWRTT0FQRXhhbXBsZSI+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotCQkJPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiIC8+Ci0JCQk8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIiAvPgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpwb3J0VHlwZT4KLQk8d3NkbDpiaW5kaW5nIG5hbWU9IlJQQ0VuY29kZWRTT0FQRXhhbXBsZVNPQVAiCi0JCXR5cGU9InRuczpSUENFbmNvZGVkU09BUEV4YW1wbGUiPgotCQk8c29hcDpiaW5kaW5nIHN0eWxlPSJycGMiCi0JCQl0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIgLz4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0JCQk8c29hcDpvcGVyYXRpb24KLQkJCQlzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1JQQ0VuY29kZWRTT0FQRXhhbXBsZS9OZXdPcGVyYXRpb24iIC8+Ci0JCQk8d3NkbDppbnB1dD4KLQkJCQk8c29hcDpib2R5Ci0JCQkJCWVuY29kaW5nU3R5bGU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIgotCQkJCQluYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvUlBDRW5jb2RlZFNPQVBFeGFtcGxlLyIKLQkJCQkJdXNlPSJlbmNvZGVkIiAvPgotCQkJPC93c2RsOmlucHV0PgotCQkJPHdzZGw6b3V0cHV0PgotCQkJCTxzb2FwOmJvZHkKLQkJCQkJZW5jb2RpbmdTdHlsZT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iCi0JCQkJCW5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9SUENFbmNvZGVkU09BUEV4YW1wbGUvIgotCQkJCQl1c2U9ImVuY29kZWQiIC8+Ci0JCQk8L3dzZGw6b3V0cHV0PgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpiaW5kaW5nPgotCTx3c2RsOnNlcnZpY2UgbmFtZT0iUlBDRW5jb2RlZFNPQVBFeGFtcGxlIj4KLQkJPHdzZGw6cG9ydCBiaW5kaW5nPSJ0bnM6UlBDRW5jb2RlZFNPQVBFeGFtcGxlU09BUCIKLQkJCW5hbWU9IlJQQ0VuY29kZWRTT0FQRXhhbXBsZVNPQVAiPgotCQkJPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iIC8+Ci0JCTwvd3NkbDpwb3J0PgotCTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9FeHRlbnNpb25zL1NPQVAvUlBDTGl0ZXJhbFNPQVBFeGFtcGxlLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0V4dGVuc2lvbnMvU09BUC9SUENMaXRlcmFsU09BUEV4YW1wbGUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWRhNzdiYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0V4dGVuc2lvbnMvU09BUC9SUENMaXRlcmFsU09BUEV4YW1wbGUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLQl4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9SUENMaXRlcmFsU09BUEV4YW1wbGUvIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JbmFtZT0iUlBDTGl0ZXJhbFNPQVBFeGFtcGxlIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9SUENMaXRlcmFsU09BUEV4YW1wbGUvIj4KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotCQk8d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0JCTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25GYXVsdCI+Ci0JCTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uRmF1bHQiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6cG9ydFR5cGUgbmFtZT0iUlBDTGl0ZXJhbFNPQVBFeGFtcGxlIj4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0JCQk8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIgLz4KLQkJCTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiIC8+Ci0JCQk8d3NkbDpmYXVsdCBuYW1lPSJmYXVsdCIgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvbkZhdWx0IiAvPgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpwb3J0VHlwZT4KLQk8d3NkbDpiaW5kaW5nIG5hbWU9IlJQQ0xpdGVyYWxTT0FQRXhhbXBsZVNPQVAiCi0JCXR5cGU9InRuczpSUENMaXRlcmFsU09BUEV4YW1wbGUiPgotCQk8c29hcDpiaW5kaW5nIHN0eWxlPSJycGMiCi0JCQl0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIgLz4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0JCQk8c29hcDpvcGVyYXRpb24KLQkJCQlzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1JQQ0xpdGVyYWxTT0FQRXhhbXBsZS9OZXdPcGVyYXRpb24iIC8+Ci0JCQk8d3NkbDppbnB1dD4KLQkJCQk8c29hcDpib2R5Ci0JCQkJCW5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9SUENMaXRlcmFsU09BUEV4YW1wbGUvIgotCQkJCQl1c2U9ImxpdGVyYWwiIC8+Ci0JCQk8L3dzZGw6aW5wdXQ+Ci0JCQk8d3NkbDpvdXRwdXQ+Ci0JCQkJPHNvYXA6Ym9keQotCQkJCQluYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvUlBDTGl0ZXJhbFNPQVBFeGFtcGxlLyIKLQkJCQkJdXNlPSJsaXRlcmFsIiAvPgotCQkJPC93c2RsOm91dHB1dD4KLQkJCTx3c2RsOmZhdWx0IG5hbWU9ImZhdWx0Ij4KLQkJCQk8c29hcDpmYXVsdCBuYW1lPSJmYXVsdCIKLQkJCQkJbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1JQQ0xpdGVyYWxTT0FQRXhhbXBsZS8iCi0JCQkJCXVzZT0ibGl0ZXJhbCIgLz4KLQkJCTwvd3NkbDpmYXVsdD4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQk8L3dzZGw6YmluZGluZz4KLQk8d3NkbDpzZXJ2aWNlIG5hbWU9IlJQQ0xpdGVyYWxTT0FQRXhhbXBsZSI+Ci0JCTx3c2RsOnBvcnQgYmluZGluZz0idG5zOlJQQ0xpdGVyYWxTT0FQRXhhbXBsZVNPQVAiCi0JCQluYW1lPSJSUENMaXRlcmFsU09BUEV4YW1wbGVTT0FQIj4KLQkJCTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIiAvPgotCQk8L3dzZGw6cG9ydD4KLQk8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvRXh0ZW5zaW9ucy9TT0FQL1NPQVBUZXN0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0V4dGVuc2lvbnMvU09BUC9TT0FQVGVzdC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2NlYjkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvRXh0ZW5zaW9ucy9TT0FQL1NPQVBUZXN0LndzZGwKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0xvYWRTdG9yZUNvbXBhcmUvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvTG9hZFN0b3JlQ29tcGFyZS8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTkyZThlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvTG9hZFN0b3JlQ29tcGFyZS8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotKi53c2RsLm91dApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9Mb2FkU3RvcmVDb21wYXJlL0ltcG9ydGVkLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0xvYWRTdG9yZUNvbXBhcmUvSW1wb3J0ZWQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGNhODJmYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zYW1wbGVzL0xvYWRTdG9yZUNvbXBhcmUvSW1wb3J0ZWQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJJbXBvcnRlZCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydGVkLyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydGVkLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPgotICA8d3NkbDp0eXBlcz4KLSAgICA8eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0ZWQvIj4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICA8L3hzZDpzY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkltcG9ydGVkIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkltcG9ydGVkU09BUCIgdHlwZT0idG5zOkltcG9ydGVkIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydGVkL05ld09wZXJhdGlvbiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBwYXJ0cz0iIE5ld09wZXJhdGlvblJlcXVlc3QiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIHBhcnRzPSIgTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iSW1wb3J0ZWQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iSW1wb3J0ZWRTT0FQIiBiaW5kaW5nPSJ0bnM6SW1wb3J0ZWRTT0FQIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9Mb2FkU3RvcmVDb21wYXJlL0xvYWRBbmRQcmludFRlc3Qud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NhbXBsZXMvTG9hZFN0b3JlQ29tcGFyZS9Mb2FkQW5kUHJpbnRUZXN0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxYmIyNzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc2FtcGxlcy9Mb2FkU3RvcmVDb21wYXJlL0xvYWRBbmRQcmludFRlc3Qud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9Mb2FkQW5kUHJpbnRUZXN0LyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IkxvYWRBbmRQcmludFRlc3QiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL0xvYWRBbmRQcmludFRlc3QvIiB4bWxuczp3c2RsMT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnRlZC8iPgotICA8d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydGVkLyIgbG9jYXRpb249IkltcG9ydGVkLndzZGwiPjwvd3NkbDppbXBvcnQ+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL0xvYWRBbmRQcmludFRlc3QvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25OZXdGYXVsdCIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAgICAgPC94c2Q6c2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIiBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0IiBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvbk5ld0ZhdWx0Ij4KLSAgCTx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uTmV3RmF1bHQiCi0gIAkJZWxlbWVudD0idG5zOk5ld09wZXJhdGlvbk5ld0ZhdWx0Ij4KLSAgCTwvd3NkbDpwYXJ0PgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iTG9hZEFuZFByaW50VGVzdCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iTmV3RmF1bHQiIG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25OZXdGYXVsdCI+PC93c2RsOmZhdWx0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJMb2FkQW5kUHJpbnRUZXN0U09BUCIgdHlwZT0idG5zOkxvYWRBbmRQcmludFRlc3QiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9Mb2FkQW5kUHJpbnRUZXN0L05ld09wZXJhdGlvbiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iTmV3RmF1bHQiPjwvd3NkbDpmYXVsdD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJMb2FkQW5kUHJpbnRUZXN0Ij4KLSAgICA8d3NkbDpwb3J0IGJpbmRpbmc9InRuczpMb2FkQW5kUHJpbnRUZXN0U09BUCIgbmFtZT0iTG9hZEFuZFByaW50VGVzdFNPQVAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL0FsbFRlc3RDYXNlcy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL0FsbFRlc3RDYXNlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOGRjYzRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9BbGxUZXN0Q2FzZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHM7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLmV4dGVuc2lvbnMuSFRUUEV4dGVuc2lvbnNUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLmV4dGVuc2lvbnMuTUlNRUV4dGVuc2lvbnNUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLmV4dGVuc2lvbnMuU09BUEV4dGVuc2lvbnNUZXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLQotLyoqCi0gKiBAYXV0aG9yIEtpaHVwIEJvbwotICovCi1wdWJsaWMgY2xhc3MgQWxsVGVzdENhc2VzIGV4dGVuZHMgVGVzdENhc2UKLXsKLQotICBwdWJsaWMgQWxsVGVzdENhc2VzKCkKLSAgewotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKLSAgewotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIFRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBUZXN0U3VpdGUoKTsKLQotICAgIHN1aXRlLmFkZFRlc3QoSW5saW5lU2NoZW1hVGVzdC5zdWl0ZSgpKTsKLSAgICBzdWl0ZS5hZGRUZXN0KExvYWRBbmRTZXJpYWxpemF0aW9uVGVzdC5zdWl0ZSgpKTsKLSAgICBzdWl0ZS5hZGRUZXN0KFNlbWFudGljVGVzdC5zdWl0ZSgpKTsKLSAgICBzdWl0ZS5hZGRUZXN0KFdTRExHZW5lcmF0aW9uVGVzdC5zdWl0ZSgpKTsKLSAgICBzdWl0ZS5hZGRUZXN0KFdTREw0SkFQSVRlc3Quc3VpdGUoKSk7Ci0gICAgc3VpdGUuYWRkVGVzdChXU0RMRU1GQVBJVGVzdC5zdWl0ZSgpKTsKLSAgICBzdWl0ZS5hZGRUZXN0KFV0aWxUZXN0LnN1aXRlKCkpOwotICAgIHN1aXRlLmFkZFRlc3QoQnVnRml4ZXNUZXN0LnN1aXRlKCkpOwotICAgIHN1aXRlLmFkZFRlc3QoTG9jYXRpb25UcmFja2luZ1Rlc3Quc3VpdGUoKSk7Ci0gICAgc3VpdGUuYWRkVGVzdChSZWZhY3RvcmluZ1Rlc3Quc3VpdGUoKSk7Ci0gICAgc3VpdGUuYWRkVGVzdChTT0FQRXh0ZW5zaW9uc1Rlc3Quc3VpdGUoKSk7Ci0gICAgc3VpdGUuYWRkVGVzdChIVFRQRXh0ZW5zaW9uc1Rlc3Quc3VpdGUoKSk7Ci0gICAgc3VpdGUuYWRkVGVzdChNSU1FRXh0ZW5zaW9uc1Rlc3Quc3VpdGUoKSk7Ci0KLSAgICByZXR1cm4gc3VpdGU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9CdWdGaXhlc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9CdWdGaXhlc1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDkyZDA4NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvQnVnRml4ZXNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDk1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0czsKLQotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uVHlwZTsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgueG1sLlhNTENvbnN0YW50czsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmxlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5GYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5UeXBlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5YU0RTY2hlbWFFeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRUNvbnRlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FTWltZVhtbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRU11bHRpcGFydFJlbGF0ZWQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuaW50ZXJuYWwudXRpbC5NSU1FQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQm9keTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC51dGlsLlNPQVBDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudXRpbC5EZWZpbml0aW9uTG9hZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNERWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RJbXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLnV0aWwuWFNEQ29uc3RhbnRzOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi0KLS8qKgotICogQ29udGFpbnMgdW5pdCB0ZXN0cyBmb3IgcmVwb3J0ZWQgYnVncy4KLSAqLwotcHVibGljIGNsYXNzIEJ1Z0ZpeGVzVGVzdCBleHRlbmRzIFRlc3RDYXNlCi17Ci0gIHByaXZhdGUgU3RyaW5nIFBMVUdJTl9BQlNPTFVURV9QQVRIID0gV1NETFRlc3RzUGx1Z2luLmdldEluc3RhbGxVUkwoKTsKLQotICBwdWJsaWMgQnVnRml4ZXNUZXN0KFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIobmFtZSk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQotICB7Ci0gICAganVuaXQudGV4dHVpLlRlc3RSdW5uZXIucnVuKHN1aXRlKCkpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIFRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBUZXN0U3VpdGUoKTsKLQotICAgIHN1aXRlLmFkZFRlc3QobmV3IEJ1Z0ZpeGVzVGVzdCgiVHlwZUFuZEVsZW1lbnRSZXNvbHV0aW9uIikgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RUeXBlQW5kRWxlbWVudFJlc29sdXRpb24oKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBCdWdGaXhlc1Rlc3QoIk1JTUVHZXRUeXBlTmFtZSIpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0UmV0dXJuc1Byb3BlclFOYW1lRm9yTUlNRUV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgICB9Ci0gICAgICB9KTsKLQotICAgIHN1aXRlLmFkZFRlc3QobmV3IEJ1Z0ZpeGVzVGVzdCgiSW1wb3J0c0VsZW1lbnRPcmRlciIpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0UGxhY2VzSW1wb3J0c0FmdGVyVGhlRGVmaW5pdGlvbkVsZW1lbnQoKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBCdWdGaXhlc1Rlc3QoIlJlc29sdmVXU0RMRWxlbWVudCIpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0UmVzb2x2ZXNFbGVtZW50SW5JbXBvcnRzKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgQnVnRml4ZXNUZXN0KCJQYXJ0c1NlcmlhbGl6YXRpb24iKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIHByb3RlY3RlZCB2b2lkIHJ1blRlc3QoKQotICAgICAgICB7Ci0gICAgICAgICAgdGVzdFNlcmlhbGl6ZXNQYXJ0c0luU09BUEJvZHkoKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBCdWdGaXhlc1Rlc3QoIkltcG9ydHNTZXJpYWxpemF0aW9uIikgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RTZXJpYWxpemVzSW1wb3J0c0JlZm9yZVR5cGVzKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgQnVnRml4ZXNUZXN0KCJMb2NhbE5hbWVzcGFjZVByZWZpeGVzIikgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RTdXBwb3J0c0xvY2FsTmFtZXNwYWNlUHJlZml4ZXMoKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBCdWdGaXhlc1Rlc3QoIk9wZXJhdGlvbkV4dGVuc2lvbkVsZW1lbnRzIikgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RUb2xsZXJhdGVzRXh0ZW5zaW9uRWxlbWVudHNGb3JPcGVyYXRpb24oKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBCdWdGaXhlc1Rlc3QoIlJlY29uY2lsZXNCaW5kaW5nRmF1bHRzIikgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RSZWNvbmNpbGVzQmluZGluZ0ZhdWx0cygpOwotICAgICAgICB9Ci0gICAgICB9KTsKLQotICAgIHN1aXRlLmFkZFRlc3QobmV3IEJ1Z0ZpeGVzVGVzdCgiRHVwbGljYXRlU0FYRXJyb3JEaWFnbm9zdGljcyIpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0QXZvaWREdXBsaWNhdGVTQVhFeGNlcHRpb25EaWFnbm9zdGljcygpOwotICAgICAgICB9Ci0gICAgICB9KTsKLQotICAgIHN1aXRlLmFkZFRlc3QobmV3IEJ1Z0ZpeGVzVGVzdCgiQmluZGluZ09wZXJhdGlvblJlY29uY2lsaWF0aW9uIikgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RCaW5kaW5nT3BlcmF0aW9uUmVjb25jaWxpYXRpb24oKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBCdWdGaXhlc1Rlc3QoIkZ1bGxFbGVtZW50RXh0ZW5zaWJpbGl0eSIpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0RnVsbEVsZW1lbnRFeHRlbnNpYmlsaXR5KCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgQnVnRml4ZXNUZXN0KCJUeXBlc0V4dGVuc2liaWxpdHkiKSAvLyROT04tTkxTLTEkCi0gICAgewotICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICB7Ci0gICAgICAgIHRlc3RUeXBlc0V4dGVuc2liaWxpdHkoKTsKLSAgICAgIH0KLSAgICB9KTsKLQotICAgIHN1aXRlLmFkZFRlc3QobmV3IEJ1Z0ZpeGVzVGVzdCgiQWxsb3dOdWxsTmFtZXNwYWNlVVJJIikgLy8kTk9OLU5MUy0xJAotICAgIHsKLSAgICAgIHByb3RlY3RlZCB2b2lkIHJ1blRlc3QoKQotICAgICAgewotICAgICAgICB0ZXN0QWxsb3dOdWxsTmFtZXNwYWNlVVJJKCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBCdWdGaXhlc1Rlc3QoIkxvYWRzTmFtZWxlc3NEZWZpbml0aW9uIikgLy8kTk9OLU5MUy0xJAotICAgIHsKLSAgICAgIHByb3RlY3RlZCB2b2lkIHJ1blRlc3QoKQotICAgICAgewotICAgICAgICB0ZXN0TG9hZHNOYW1lbGVzc0RlZmluaXRpb24oKTsKLSAgICAgIH0KLSAgICB9KTsKLQotICAgIHN1aXRlLmFkZFRlc3QobmV3IEJ1Z0ZpeGVzVGVzdCgiSGFuZGxlc0RvY3VtZW50YXRpb25FbGVtZW50cyIpIC8vJE5PTi1OTFMtMSQKLSAgICB7Ci0gICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgIHsKLSAgICAgICAgdGVzdEhhbmRsZXNEb2N1bWVudGF0aW9uRWxlbWVudHMoKTsKLSAgICAgIH0KLSAgICB9KTsKLQotICAgIHJldHVybiBzdWl0ZTsKLSAgfQotCi0gIC8qKgotICAgKiBTZWUgaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTEzMzMxMAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFR5cGVBbmRFbGVtZW50UmVzb2x1dGlvbigpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBEZWZpbml0aW9uTG9hZGVyLmxvYWQoUExVR0lOX0FCU09MVVRFX1BBVEggKyAic2FtcGxlcy9CdWdGaXhlcy9UeXBlQW5kRWxlbWVudFJlc29sdXRpb24vVGVzdC53c2RsIik7IC8vJE5PTi1OTFMtMSQKLQotICAgICAgLy8gVGhlcmUgYXJlIHR3byBpbmxpbmUgc2NoZW1hcywgZWFjaCBpbXBvcnRpbmcgYW4gZXh0ZXJuYWwgc2NoZW1hLgotICAgICAgLy8gVGhlIGZpcnN0IHNjaGVtYSBpcyBlbXB0eSBhbmQgdXNlZCBqdXN0IHRvIHNob3cgdGhlIHR5cGUgcmVzb2x1dGlvbgotICAgICAgLy8gbWVjaGFuaXNtJ3MgZmF1bHQuCi0gICAgICAvLyBUaGUgc2NoZW1hIGNvbnRhaW5pbmcgdGhlIHR5cGUgYW5kIGVsZW1lbnQgZGVjbGFyYXRpb24gd2UncmUgaW50ZXJlc3RlZAotICAgICAgLy8gaW4gaXMgdGhlIHNlY29uZCBzY2hlbWEgaW4gdGhlIGNvbGxlY3Rpb24uCi0KLSAgICAgIFhTRFNjaGVtYSBpbmxpbmVTY2hlbWEgPSAoWFNEU2NoZW1hKWRlZmluaXRpb24uZ2V0RVR5cGVzKCkuZ2V0U2NoZW1hcygpLmdldCgxKTsKLQotICAgICAgLy8gVGhlIGZpcnN0IGFuZCBvbmx5IGNvbXBvbmVudCBpbiB0aGlzIHNjaGVtYSBpcyBhbiBpbXBvcnQuCi0KLSAgICAgIFhTREltcG9ydCB4c2RJbXBvcnQgPSAoWFNESW1wb3J0KWlubGluZVNjaGVtYS5nZXRDb250ZW50cygpLmdldCgwKTsKLQotICAgICAgLy8gVGhlIGltcG9ydGVkIHNjaGVtYSB3YXMgcmVzb2x2ZWQgd2hlbiB0aGUgcmVzb3VyY2Ugd2FzIGxvYWRlZC4KLSAgICAgIC8vIFRoaXMgaXMgdGhlIHNjaGVtYSBjb250YWluaW5nIG91ciB0eXBlL2VsZW1lbnQuCi0KLSAgICAgIFhTRFNjaGVtYSBzY2hlbWEgPSB4c2RJbXBvcnQuZ2V0UmVzb2x2ZWRTY2hlbWEoKTsKLQotICAgICAgLy8gTm93IGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgcmVzb2x2ZWQgdHlwZS9lbGVtZW50IGZvciB0aGUgbWVzc2FnZXMgaW4KLSAgICAgIC8vIHRoZSBXU0RMIGRvY3VtZW50Ci0gICAgICAvLyBhcmUgdGhlIG9uZXMgaW4gdGhlIHNjaGVtYSBhbmQgbm90IHNvbWUgYm9ndXMgb25lcy4KLQotICAgICAgSXRlcmF0b3IgbWVzc2FnZXNJdGVyYXRvciA9IGRlZmluaXRpb24uZ2V0RU1lc3NhZ2VzKCkuaXRlcmF0b3IoKTsKLQotICAgICAgd2hpbGUgKG1lc3NhZ2VzSXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSAoTWVzc2FnZSltZXNzYWdlc0l0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgU3RyaW5nIG5hbWUgPSBtZXNzYWdlLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgICAgIGlmIChuYW1lLmVxdWFscygidGVzdFJlcXVlc3QiKSkgLy8kTk9OLU5MUy0xJAotICAgICAgICB7Ci0gICAgICAgICAgLy8gV2Uga25vdyB0aGVyZSBpcyBvbmx5IG9uZSBwYXJ0IGluIHRoZSBtZXNzYWdlIGFuZCBpdCByZWZlcnMgdG8gYQotICAgICAgICAgIC8vIHR5cGUuIE1ha2Ugc3VyZSB0aGUgdHlwZSBjYW4gYmUgcmVzb2x2ZWQuCi0KLSAgICAgICAgICBQYXJ0IHBhcnQgPSAoUGFydCltZXNzYWdlLmdldEVQYXJ0cygpLmdldCgwKTsKLSAgICAgICAgICBYU0RUeXBlRGVmaW5pdGlvbiBteVR5cGUgPSBwYXJ0LmdldFR5cGVEZWZpbml0aW9uKCk7Ci0gICAgICAgICAgYXNzZXJ0RXF1YWxzKHNjaGVtYSwgbXlUeXBlLmdldENvbnRhaW5lcigpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChuYW1lLmVxdWFscygidGVzdFJlc3BvbnNlIikpIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgewotICAgICAgICAgIC8vIFdlIGtub3cgdGhlcmUgaXMgb25seSBvbmUgcGFydCBpbiB0aGUgbWVzc2FnZSBhbmQgaXQgcmVmZXJzIHRvIGFuCi0gICAgICAgICAgLy8gZWxlbWVudC4KLQotICAgICAgICAgIFBhcnQgcGFydCA9IChQYXJ0KW1lc3NhZ2UuZ2V0RVBhcnRzKCkuZ2V0KDApOwotICAgICAgICAgIFhTREVsZW1lbnREZWNsYXJhdGlvbiBteUVsZW1lbnQgPSBwYXJ0LmdldEVsZW1lbnREZWNsYXJhdGlvbigpOwotICAgICAgICAgIGFzc2VydEVxdWFscyhzY2hlbWEsIG15RWxlbWVudC5nZXRDb250YWluZXIoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgQXNzZXJ0LmZhaWwoIlRlc3QgZmFpbGVkIGR1ZSB0byBhbiBleGNlcHRpb246ICIgKyBlLmdldExvY2FsaXplZE1lc3NhZ2UoKSk7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogU2VlIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xMzM5NTMKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RSZXR1cm5zUHJvcGVyUU5hbWVGb3JNSU1FRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkKLSAgewotICAgIE1JTUVGYWN0b3J5IGZhY3RvcnkgPSBNSU1FUGFja2FnZS5lSU5TVEFOQ0UuZ2V0TUlNRUZhY3RvcnkoKTsKLQotICAgIE1JTUVDb250ZW50IGNvbnRlbnQgPSBmYWN0b3J5LmNyZWF0ZU1JTUVDb250ZW50KCk7Ci0gICAgUU5hbWUgY29udGVudEVsZW1lbnRUeXBlID0gY29udGVudC5nZXRFbGVtZW50VHlwZSgpOwotICAgIGFzc2VydEVxdWFscyhNSU1FQ29uc3RhbnRzLk1JTUVfTkFNRVNQQUNFX1VSSSwgY29udGVudEVsZW1lbnRUeXBlLmdldE5hbWVzcGFjZVVSSSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoTUlNRUNvbnN0YW50cy5DT05URU5UX0VMRU1FTlRfVEFHLCBjb250ZW50RWxlbWVudFR5cGUuZ2V0TG9jYWxQYXJ0KCkpOwotCi0gICAgTUlNRU1pbWVYbWwgbWltZVhtbCA9IGZhY3RvcnkuY3JlYXRlTUlNRU1pbWVYbWwoKTsKLSAgICBRTmFtZSBtaW1lWG1sRWxlbWVudFR5cGUgPSBtaW1lWG1sLmdldEVsZW1lbnRUeXBlKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKE1JTUVDb25zdGFudHMuTUlNRV9OQU1FU1BBQ0VfVVJJLCBtaW1lWG1sRWxlbWVudFR5cGUuZ2V0TmFtZXNwYWNlVVJJKCkpOwotICAgIGFzc2VydEVxdWFscyhNSU1FQ29uc3RhbnRzLk1JTUVfWE1MX0VMRU1FTlRfVEFHLCBtaW1lWG1sRWxlbWVudFR5cGUuZ2V0TG9jYWxQYXJ0KCkpOwotCi0gICAgTUlNRU11bHRpcGFydFJlbGF0ZWQgbXVsdGlwYXJ0UmVsYXRlZCA9IGZhY3RvcnkuY3JlYXRlTUlNRU11bHRpcGFydFJlbGF0ZWQoKTsKLSAgICBRTmFtZSBtdWx0aXBhcnRSZWxhdGVkRWxlbWVudFR5cGUgPSBtdWx0aXBhcnRSZWxhdGVkLmdldEVsZW1lbnRUeXBlKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKE1JTUVDb25zdGFudHMuTUlNRV9OQU1FU1BBQ0VfVVJJLCBtdWx0aXBhcnRSZWxhdGVkRWxlbWVudFR5cGUuZ2V0TmFtZXNwYWNlVVJJKCkpOwotICAgIGFzc2VydEVxdWFscyhNSU1FQ29uc3RhbnRzLk1VTFRJUEFSVF9SRUxBVEVEX0VMRU1FTlRfVEFHLCBtdWx0aXBhcnRSZWxhdGVkRWxlbWVudFR5cGUuZ2V0TG9jYWxQYXJ0KCkpOwotCi0gICAgTUlNRVBhcnQgcGFydCA9IGZhY3RvcnkuY3JlYXRlTUlNRVBhcnQoKTsKLSAgICBRTmFtZSBwYXJ0RWxlbWVudFR5cGUgPSBwYXJ0LmdldEVsZW1lbnRUeXBlKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKE1JTUVDb25zdGFudHMuTUlNRV9OQU1FU1BBQ0VfVVJJLCBwYXJ0RWxlbWVudFR5cGUuZ2V0TmFtZXNwYWNlVVJJKCkpOwotICAgIGFzc2VydEVxdWFscyhNSU1FQ29uc3RhbnRzLlBBUlRfRUxFTUVOVF9UQUcsIHBhcnRFbGVtZW50VHlwZS5nZXRMb2NhbFBhcnQoKSk7Ci0gIH0KLQotICAvKioKLSAgICogU2VlIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xMzcwNDAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RQbGFjZXNJbXBvcnRzQWZ0ZXJUaGVEZWZpbml0aW9uRWxlbWVudCgpCi0gIHsKLSAgICBXU0RMRmFjdG9yeSBmYWN0b3J5ID0gV1NETFBhY2thZ2UuZUlOU1RBTkNFLmdldFdTRExGYWN0b3J5KCk7Ci0KLSAgICBTdHJpbmcgbmFtZXNwYWNlID0gInRlc3ROYW1lc3BhY2UiOyAvLyROT04tTkxTLTEkCi0KLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBmYWN0b3J5LmNyZWF0ZURlZmluaXRpb24oKTsKLSAgICBkZWZpbml0aW9uLnNldFFOYW1lKG5ldyBRTmFtZShuYW1lc3BhY2UsICJ0ZXN0RGVmaW5pdGlvbiIpKTsgLy8kTk9OLU5MUy0xJCAgCi0gICAgZGVmaW5pdGlvbi51cGRhdGVFbGVtZW50KCk7Ci0KLSAgICBTZXJ2aWNlIHNlcnZpY2UgPSBmYWN0b3J5LmNyZWF0ZVNlcnZpY2UoKTsKLSAgICBzZXJ2aWNlLnNldFFOYW1lKG5ldyBRTmFtZShuYW1lc3BhY2UsICJ0ZXN0U2VydmljZSIpKTsgLy8kTk9OLU5MUy0xJAotICAgIGRlZmluaXRpb24uYWRkU2VydmljZShzZXJ2aWNlKTsKLQotICAgIEltcG9ydCB3c2RsSW1wb3J0ID0gZmFjdG9yeS5jcmVhdGVJbXBvcnQoKTsKLSAgICBkZWZpbml0aW9uLmFkZEltcG9ydCh3c2RsSW1wb3J0KTsKLQotICAgIEVsZW1lbnQgZGVmaW5pdGlvbkVsZW1lbnQgPSBkZWZpbml0aW9uLmdldEVsZW1lbnQoKTsKLSAgICBFbGVtZW50IHNlcnZpY2VFbGVtZW50ID0gc2VydmljZS5nZXRFbGVtZW50KCk7Ci0gICAgRWxlbWVudCBpbXBvcnRFbGVtZW50ID0gd3NkbEltcG9ydC5nZXRFbGVtZW50KCk7Ci0KLSAgICBOb2RlTGlzdCBkZWZpbml0aW9uRWxlbWVudENoaWxkcmVuID0gZGVmaW5pdGlvbkVsZW1lbnQuZ2V0Q2hpbGROb2RlcygpOwotCi0gICAgTm9kZSBmaXJzdENoaWxkID0gZGVmaW5pdGlvbkVsZW1lbnRDaGlsZHJlbi5pdGVtKDApOwotCi0gICAgYXNzZXJ0U2FtZShpbXBvcnRFbGVtZW50LCBmaXJzdENoaWxkKTsKLQotICAgIE5vZGUgc2Vjb25kQ2hpbGQgPSBkZWZpbml0aW9uRWxlbWVudENoaWxkcmVuLml0ZW0oMSk7Ci0KLSAgICBhc3NlcnRTYW1lKHNlcnZpY2VFbGVtZW50LCBzZWNvbmRDaGlsZCk7Ci0gIH0KLQotICAvKioKLSAgICogU2VlIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xMzc4NjYKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RSZXNvbHZlc0VsZW1lbnRJbkltcG9ydHMoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvQnVnRml4ZXMvV1NETEVsZW1lbnRSZXNvbHV0aW9uL21haW4ud3NkbCIpOyAvLyROT04tTkxTLTEkCi0KLSAgICAgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSAiaHR0cDovL3d3dy5leGFtcGxlLmNvbSI7IC8vJE5PTi1OTFMtMSQKLQotICAgICAgLy8gVGhpcyB0ZXN0IGF0dGVtcHRzIHRvIGxvY2F0ZSBhIG1lc3NhZ2UgbG9jYXRlZCBpbiB0aGUgZmlyc3QgbGV2ZWwKLSAgICAgIC8vIGltcG9ydC4KLQotICAgICAgUU5hbWUgZmlyc3RMZXZlbE1lc3NhZ2VRTmFtZSA9IG5ldyBRTmFtZSh0YXJnZXROYW1lc3BhY2UsICJ0ZXN0SU5QVVRtZXNzYWdlIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGphdmF4LndzZGwuTWVzc2FnZSBmaXJzdExldmVsTWVzc2FnZSA9IGRlZmluaXRpb24uZ2V0TWVzc2FnZShmaXJzdExldmVsTWVzc2FnZVFOYW1lKTsKLQotICAgICAgYXNzZXJ0Tm90TnVsbChmaXJzdExldmVsTWVzc2FnZSk7Ci0KLSAgICAgIC8vIFRoaXMgdGVzdCBhdHRlbXB0cyB0byBsb2NhdGUgYSBtZXNzYWdlIGxvY2F0ZWQgaW4gdGhlIHNlY29uZCBsZXZlbAotICAgICAgLy8gaW1wb3J0LgotCi0gICAgICBRTmFtZSBzZWNvbmRMZXZlbE1lc3NhZ2VRTmFtZSA9IG5ldyBRTmFtZSh0YXJnZXROYW1lc3BhY2UsICJ0ZXN0T1VUUFVUbWVzc2FnZSIpOyAvLyROT04tTkxTLTEkCi0gICAgICBqYXZheC53c2RsLk1lc3NhZ2Ugc2Vjb25kTGV2ZWxNZXNzYWdlID0gZGVmaW5pdGlvbi5nZXRNZXNzYWdlKHNlY29uZExldmVsTWVzc2FnZVFOYW1lKTsKLQotICAgICAgYXNzZXJ0Tm90TnVsbChzZWNvbmRMZXZlbE1lc3NhZ2UpOwotCi0gICAgICAvLyBUaGlzIHRlc3QgZW5zdXJlcyB0aGF0IHdlIGRvIGEgYnJlYWR0aCBmaXJzdCB0cmF2ZXJzYWwgdG8ga2VlcCB0aGluZ3MKLSAgICAgIC8vIHdvcmtpbmcgYXBwcm94aW1hdGl2ZWx5IGFzIHRoZSBvbGQgaW1wbGVtZW50YXRpb24gd2hpY2ggdXNlZCB0byBjaGVjawotICAgICAgLy8gb25seSB0aGUgZGVmaW5pdGlvbiBhbmQgaXRzIGZpcnN0IGxldmVsIGltcG9ydHMuIFRoZSBmaXJzdCBtZXNzYWdlIGlzCi0gICAgICAvLyBkZWZpbmVkIGluIGZpcnN0bGV2ZWwud3NkbCBhcyB3ZWxsIGFzIHNlY29uZGxldmVsLndzZGwgYnV0IHRoZQotICAgICAgLy8gYWxnb3JpdGhtIHNob3VsZCBmaW5kIHRoZSBvbmUgaW4gZmlyc3RsZXZlbC53c2RsLgotCi0gICAgICBJbXBvcnQgZmlyc3RMZXZlbEltcG9ydCA9IChJbXBvcnQpZGVmaW5pdGlvbi5nZXRJbXBvcnRzKHRhcmdldE5hbWVzcGFjZSkuZ2V0KDApOwotICAgICAgRGVmaW5pdGlvbiBmaXJzdExldmVsRGVmaW5pdGlvbiA9IGZpcnN0TGV2ZWxJbXBvcnQuZ2V0RURlZmluaXRpb24oKTsKLQotICAgICAgYXNzZXJ0RXF1YWxzKGZpcnN0TGV2ZWxEZWZpbml0aW9uLCAoKE1lc3NhZ2UpZmlyc3RMZXZlbE1lc3NhZ2UpLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKSk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBBc3NlcnQuZmFpbCgiVGVzdCBmYWlsZWQgZHVlIHRvIGFuIGV4Y2VwdGlvbjogIiArIGUuZ2V0TG9jYWxpemVkTWVzc2FnZSgpKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBTZWUgaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTEzNzk5MAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFNlcmlhbGl6ZXNQYXJ0c0luU09BUEJvZHkoKQotICB7Ci0gICAgLy8gQnVpbGQgYW4gaW4tbWVtb3J5IFdTREwgZGVmaW5pdGlvbi4KLQotICAgIFdTRExGYWN0b3J5IGZhY3RvcnkgPSBXU0RMUGFja2FnZS5lSU5TVEFOQ0UuZ2V0V1NETEZhY3RvcnkoKTsKLQotICAgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSAidGVzdE5hbWVzcGFjZSI7IC8vJE5PTi1OTFMtMSQKLQotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IGZhY3RvcnkuY3JlYXRlRGVmaW5pdGlvbigpOwotICAgIGRlZmluaXRpb24uc2V0VGFyZ2V0TmFtZXNwYWNlKHRhcmdldE5hbWVzcGFjZSk7Ci0gICAgZGVmaW5pdGlvbi5zZXRRTmFtZShuZXcgUU5hbWUodGFyZ2V0TmFtZXNwYWNlLCAidGVzdERlZmluaXRpb24iKSk7IC8vJE5PTi1OTFMtMSQKLSAgICBkZWZpbml0aW9uLmFkZE5hbWVzcGFjZSgidG5zIiwgdGFyZ2V0TmFtZXNwYWNlKTsgLy8kTk9OLU5MUy0xJAotICAgIGRlZmluaXRpb24uYWRkTmFtZXNwYWNlKCJ4c2QiLCBYU0RDb25zdGFudHMuU0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzIwMDEpOyAvLyROT04tTkxTLTEkCi0gICAgZGVmaW5pdGlvbi5hZGROYW1lc3BhY2UoInNvYXAiLCBTT0FQQ29uc3RhbnRzLlNPQVBfTkFNRVNQQUNFX1VSSSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIE1lc3NhZ2UgbWVzc2FnZSA9IGZhY3RvcnkuY3JlYXRlTWVzc2FnZSgpOwotICAgIFFOYW1lIG1lc3NhZ2VRTmFtZSA9IG5ldyBRTmFtZSh0YXJnZXROYW1lc3BhY2UsICJ0ZXN0TWVzc2FnZSIpOwotICAgIG1lc3NhZ2Uuc2V0UU5hbWUobWVzc2FnZVFOYW1lKTsKLSAgICBkZWZpbml0aW9uLmFkZE1lc3NhZ2UobWVzc2FnZSk7Ci0KLSAgICBQYXJ0IHBhcnQxID0gZmFjdG9yeS5jcmVhdGVQYXJ0KCk7Ci0gICAgU3RyaW5nIHBhcnQxTmFtZSA9ICJwYXJ0MSI7IC8vJE5PTi1OTFMtMSQgCi0gICAgcGFydDEuc2V0TmFtZShwYXJ0MU5hbWUpOwotICAgIHBhcnQxLnNldFR5cGVOYW1lKG5ldyBRTmFtZShYU0RDb25zdGFudHMuU0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzIwMDEsICJzdHJpbmciKSk7IC8vJE5PTi1OTFMtMSQKLSAgICBtZXNzYWdlLmFkZFBhcnQocGFydDEpOwotCi0gICAgUGFydCBwYXJ0MiA9IGZhY3RvcnkuY3JlYXRlUGFydCgpOwotICAgIFN0cmluZyBwYXJ0Mk5hbWUgPSAicGFydDIiOyAvLyROT04tTkxTLTEkIAotICAgIHBhcnQyLnNldE5hbWUocGFydDJOYW1lKTsKLSAgICBwYXJ0Mi5zZXRUeXBlTmFtZShuZXcgUU5hbWUoWFNEQ29uc3RhbnRzLlNDSEVNQV9GT1JfU0NIRU1BX1VSSV8yMDAxLCAic3RyaW5nIikpOyAvLyROT04tTkxTLTEkCi0gICAgbWVzc2FnZS5hZGRQYXJ0KHBhcnQyKTsKLQotICAgIFBvcnRUeXBlIHBvcnRUeXBlID0gZmFjdG9yeS5jcmVhdGVQb3J0VHlwZSgpOwotICAgIFFOYW1lIHBvcnRRTmFtZSA9IG5ldyBRTmFtZSh0YXJnZXROYW1lc3BhY2UsICJ0ZXN0UG9ydCIpOyAvLyROT04tTkxTLTEkCi0gICAgcG9ydFR5cGUuc2V0UU5hbWUocG9ydFFOYW1lKTsKLSAgICBkZWZpbml0aW9uLmFkZFBvcnRUeXBlKHBvcnRUeXBlKTsKLQotICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSBmYWN0b3J5LmNyZWF0ZU9wZXJhdGlvbigpOwotICAgIFN0cmluZyBvcGVyYXRpb25OYW1lID0gInRlc3RPcGVyYXRpb24iOyAvLyROT04tTkxTLTEkIAotICAgIG9wZXJhdGlvbi5zZXROYW1lKG9wZXJhdGlvbk5hbWUpOwotICAgIHBvcnRUeXBlLmFkZE9wZXJhdGlvbihvcGVyYXRpb24pOwotCi0gICAgSW5wdXQgaW5wdXQgPSBmYWN0b3J5LmNyZWF0ZUlucHV0KCk7Ci0gICAgaW5wdXQuc2V0TWVzc2FnZShtZXNzYWdlKTsKLSAgICBvcGVyYXRpb24uc2V0SW5wdXQoaW5wdXQpOwotCi0gICAgQmluZGluZyBiaW5kaW5nID0gZmFjdG9yeS5jcmVhdGVCaW5kaW5nKCk7Ci0gICAgUU5hbWUgYmluZGluZ1FOYW1lID0gbmV3IFFOYW1lKHRhcmdldE5hbWVzcGFjZSwgInRlc3RCaW5kaW5nIik7IC8vJE5PTi1OTFMtMSQKLSAgICBiaW5kaW5nLnNldFFOYW1lKGJpbmRpbmdRTmFtZSk7Ci0gICAgYmluZGluZy5zZXRQb3J0VHlwZShwb3J0VHlwZSk7Ci0gICAgZGVmaW5pdGlvbi5hZGRCaW5kaW5nKGJpbmRpbmcpOwotCi0gICAgQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uID0gZmFjdG9yeS5jcmVhdGVCaW5kaW5nT3BlcmF0aW9uKCk7Ci0gICAgYmluZGluZ09wZXJhdGlvbi5zZXRPcGVyYXRpb24ob3BlcmF0aW9uKTsKLSAgICBiaW5kaW5nLmFkZEJpbmRpbmdPcGVyYXRpb24oYmluZGluZ09wZXJhdGlvbik7Ci0KLSAgICBCaW5kaW5nSW5wdXQgYmluZGluZ0lucHV0ID0gZmFjdG9yeS5jcmVhdGVCaW5kaW5nSW5wdXQoKTsKLSAgICBiaW5kaW5nT3BlcmF0aW9uLnNldEJpbmRpbmdJbnB1dChiaW5kaW5nSW5wdXQpOwotCi0gICAgU09BUEZhY3Rvcnkgc29hcEZhY3RvcnkgPSBTT0FQUGFja2FnZS5lSU5TVEFOQ0UuZ2V0U09BUEZhY3RvcnkoKTsKLSAgICBTT0FQQm9keSBzb2FwQm9keSA9IHNvYXBGYWN0b3J5LmNyZWF0ZVNPQVBCb2R5KCk7Ci0gICAgYmluZGluZ0lucHV0LmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KHNvYXBCb2R5KTsKLQotICAgIGRlZmluaXRpb24udXBkYXRlRWxlbWVudCgpOwotCi0gICAgLy8gVGVzdCB0aGUgIm5vIHBhcnRzIiBzY2VuYXJpby4gSW4gdGhpcyBjYXNlIHRoZSBwYXJ0cyBhdHRyaWJ1dGUgc2hvdWxkIG5vdAotICAgIC8vIGJlIHByZXNlbnQuCi0KLSAgICBFbGVtZW50IHNvYXBCb2R5RWxlbWVudCA9IHNvYXBCb2R5LmdldEVsZW1lbnQoKTsKLSAgICBBdHRyIHBhcnRzQXR0cmlidXRlTm9kZSA9IHNvYXBCb2R5RWxlbWVudC5nZXRBdHRyaWJ1dGVOb2RlKFNPQVBDb25zdGFudHMuUEFSVFNfQVRUUklCVVRFKTsKLSAgICBhc3NlcnROdWxsKHBhcnRzQXR0cmlidXRlTm9kZSk7Ci0KLSAgICAvLyBUZXN0IHRoZSBzY2VuYXJpbyB3aGVuIHRoZSBib2R5IHNwZWNpZmllcyBvbmUgcGFydC4gSW4gdGhpcyBjYXNlIHRoZQotICAgIC8vIHBhcnRzIGF0dHJpYnV0ZQotICAgIC8vIHNob3VsZCBiZSBwcmVzZW50IGFuZCBsb29rIGxpa2UgdGhpcyBwYXJ0cz0icGFydDEiCi0KLSAgICBMaXN0IHBhcnRzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIHBhcnRzLmFkZChwYXJ0MSk7Ci0gICAgc29hcEJvZHkuc2V0UGFydHMocGFydHMpOwotCi0gICAgc29hcEJvZHkudXBkYXRlRWxlbWVudCgpOwotCi0gICAgc29hcEJvZHlFbGVtZW50ID0gc29hcEJvZHkuZ2V0RWxlbWVudCgpOwotICAgIFN0cmluZyBwYXJ0c0F0dHJpYnV0ZVZhbHVlID0gc29hcEJvZHlFbGVtZW50LmdldEF0dHJpYnV0ZShTT0FQQ29uc3RhbnRzLlBBUlRTX0FUVFJJQlVURSk7Ci0gICAgYXNzZXJ0RXF1YWxzKHBhcnQxTmFtZSwgcGFydHNBdHRyaWJ1dGVWYWx1ZSk7Ci0KLSAgICAvLyBUZXN0IHRoZSBzY2VuYXJpbyB3aGVuIHRoZSBib2R5IHNwZWNpZmllcyB0d28gcGFydHMuIEluIHRoaXMgY2FzZSB0aGUKLSAgICAvLyBwYXJ0cyBhdHRyaWJ1dGUKLSAgICAvLyBzaG91bGQgYmUgcHJlc2VudCBhbmQgbG9vayBsaWtlIHRoaXMgcGFydHM9InBhcnQxIHBhcnQyIgotCi0gICAgcGFydHMuYWRkKHBhcnQyKTsKLSAgICBzb2FwQm9keS5zZXRQYXJ0cyhwYXJ0cyk7Ci0KLSAgICBzb2FwQm9keS51cGRhdGVFbGVtZW50KCk7Ci0KLSAgICBzb2FwQm9keUVsZW1lbnQgPSBzb2FwQm9keS5nZXRFbGVtZW50KCk7Ci0gICAgcGFydHNBdHRyaWJ1dGVWYWx1ZSA9IHNvYXBCb2R5RWxlbWVudC5nZXRBdHRyaWJ1dGUoU09BUENvbnN0YW50cy5QQVJUU19BVFRSSUJVVEUpOwotICAgIGFzc2VydEVxdWFscyhwYXJ0MU5hbWUgKyAiICIgKyBwYXJ0Mk5hbWUsIHBhcnRzQXR0cmlidXRlVmFsdWUpOyAvLyROT04tTkxTLTEkCi0gIH0KLQotICAvKioKLSAgICogU2VlIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xMzgwMzMKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RTZXJpYWxpemVzSW1wb3J0c0JlZm9yZVR5cGVzKCkKLSAgewotICAgIFdTRExGYWN0b3J5IGZhY3RvcnkgPSBXU0RMUGFja2FnZS5lSU5TVEFOQ0UuZ2V0V1NETEZhY3RvcnkoKTsKLQotICAgIFN0cmluZyBuYW1lc3BhY2UgPSAidGVzdE5hbWVzcGFjZSI7IC8vJE5PTi1OTFMtMSQKLQotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IGZhY3RvcnkuY3JlYXRlRGVmaW5pdGlvbigpOwotICAgIGRlZmluaXRpb24uc2V0UU5hbWUobmV3IFFOYW1lKG5hbWVzcGFjZSwgInRlc3REZWZpbml0aW9uIikpOyAvLyROT04tTkxTLTEkICAKLSAgICBkZWZpbml0aW9uLnVwZGF0ZUVsZW1lbnQoKTsKLQotICAgIFR5cGVzIHR5cGVzID0gZmFjdG9yeS5jcmVhdGVUeXBlcygpOwotICAgIGRlZmluaXRpb24uc2V0VHlwZXModHlwZXMpOwotCi0gICAgSW1wb3J0IHdzZGxJbXBvcnQgPSBmYWN0b3J5LmNyZWF0ZUltcG9ydCgpOwotICAgIGRlZmluaXRpb24uYWRkSW1wb3J0KHdzZGxJbXBvcnQpOwotCi0gICAgRWxlbWVudCBkZWZpbml0aW9uRWxlbWVudCA9IGRlZmluaXRpb24uZ2V0RWxlbWVudCgpOwotICAgIEVsZW1lbnQgdHlwZXNFbGVtZW50ID0gdHlwZXMuZ2V0RWxlbWVudCgpOwotICAgIEVsZW1lbnQgaW1wb3J0RWxlbWVudCA9IHdzZGxJbXBvcnQuZ2V0RWxlbWVudCgpOwotCi0gICAgTm9kZUxpc3QgZGVmaW5pdGlvbkVsZW1lbnRDaGlsZHJlbiA9IGRlZmluaXRpb25FbGVtZW50LmdldENoaWxkTm9kZXMoKTsKLQotICAgIE5vZGUgZmlyc3RDaGlsZCA9IGRlZmluaXRpb25FbGVtZW50Q2hpbGRyZW4uaXRlbSgwKTsKLQotICAgIGFzc2VydFNhbWUoaW1wb3J0RWxlbWVudCwgZmlyc3RDaGlsZCk7Ci0KLSAgICBOb2RlIHNlY29uZENoaWxkID0gZGVmaW5pdGlvbkVsZW1lbnRDaGlsZHJlbi5pdGVtKDEpOwotCi0gICAgYXNzZXJ0U2FtZSh0eXBlc0VsZW1lbnQsIHNlY29uZENoaWxkKTsKLQotICAgIC8vIEJsb3cgYXdheSB0aGUgYmFja2luZyBET00uCi0KLSAgICBkZWZpbml0aW9uLnNldEVsZW1lbnQobnVsbCk7Ci0gICAgZGVmaW5pdGlvbi51cGRhdGVFbGVtZW50KCk7Ci0KLSAgICBkZWZpbml0aW9uRWxlbWVudCA9IGRlZmluaXRpb24uZ2V0RWxlbWVudCgpOwotICAgIHR5cGVzRWxlbWVudCA9IHR5cGVzLmdldEVsZW1lbnQoKTsKLSAgICBpbXBvcnRFbGVtZW50ID0gd3NkbEltcG9ydC5nZXRFbGVtZW50KCk7Ci0KLSAgICBkZWZpbml0aW9uRWxlbWVudENoaWxkcmVuID0gZGVmaW5pdGlvbkVsZW1lbnQuZ2V0Q2hpbGROb2RlcygpOwotCi0gICAgZmlyc3RDaGlsZCA9IGRlZmluaXRpb25FbGVtZW50Q2hpbGRyZW4uaXRlbSgwKTsKLQotICAgIGFzc2VydFNhbWUoaW1wb3J0RWxlbWVudCwgZmlyc3RDaGlsZCk7Ci0KLSAgICBzZWNvbmRDaGlsZCA9IGRlZmluaXRpb25FbGVtZW50Q2hpbGRyZW4uaXRlbSgxKTsKLQotICAgIGFzc2VydFNhbWUodHlwZXNFbGVtZW50LCBzZWNvbmRDaGlsZCk7Ci0gIH0KLQotICAvKioKLSAgICogU2VlIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xNTA1NTMKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RTdXBwb3J0c0xvY2FsTmFtZXNwYWNlUHJlZml4ZXMoKQotICB7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gbnVsbDsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIGRlZmluaXRpb24gPSBEZWZpbml0aW9uTG9hZGVyLmxvYWQoUExVR0lOX0FCU09MVVRFX1BBVEggKyAic2FtcGxlcy9CdWdGaXhlcy9Mb2NhbE5hbWVzcGFjZS9Mb2NhbE5hbWVzcGFjZS53c2RsIik7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZmFpbChlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotCi0gICAgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSA9ICJodHRwOi8vdGVtcHVyaS5vcmcvU2ltcGxlLyI7IC8vJE5PTi1OTFMtMSQKLQotICAgIC8vIENoZWNrIHRoYXQgdGhlIHJlc3BvbnNlIG1lc3NhZ2UncyBwYXJ0IGVsZW1lbnQgaXMgcmVzb2x2ZWQgT0suCi0KLSAgICBRTmFtZSByZXNwb25zZU1lc3NhZ2VRTmFtZSA9IG5ldyBRTmFtZSh0YXJnZXROYW1lc3BhY2UsICJteU9wZXJhdGlvblJlc3BvbnNlIik7IC8vLy8kTk9OLU5MUy0xJAotICAgIGphdmF4LndzZGwuTWVzc2FnZSByZXNwb25zZU1lc3NhZ2UgPSBkZWZpbml0aW9uLmdldE1lc3NhZ2UocmVzcG9uc2VNZXNzYWdlUU5hbWUpOwotCi0gICAgUGFydCByZXNwb25zZVBhcnQgPSAoUGFydClyZXNwb25zZU1lc3NhZ2UuZ2V0UGFydCgibXlPcGVyYXRpb25SZXNwb25zZSIpOyAvLy8vJE5PTi1OTFMtMSQKLQotICAgIFhTREVsZW1lbnREZWNsYXJhdGlvbiByZXNwb25zZUVsZW1lbnREZWNsYXJhdGlvbiA9IHJlc3BvbnNlUGFydC5nZXRFbGVtZW50RGVjbGFyYXRpb24oKTsKLQotICAgIGFzc2VydE5vdE51bGwocmVzcG9uc2VFbGVtZW50RGVjbGFyYXRpb24pOwotICAgIGFzc2VydE5vdE51bGwocmVzcG9uc2VFbGVtZW50RGVjbGFyYXRpb24uZ2V0Q29udGFpbmVyKCkpOwotCi0gICAgLy8gQ2hlY2sgdGhhdCB0aGUgcmVxdWVzdCBtZXNzYWdlJ3MgcGFydCBlbGVtZW50IGlzIHJlc29sdmVkIE9LLgotICAgIC8vIFRoaXMgcGFydCBkZWZpbmVzIGEgbG9jYWwgbmFtZXNwYWNlIHByZWZpeAotCi0gICAgUU5hbWUgcmVxdWVzdE1lc3NhZ2VRTmFtZSA9IG5ldyBRTmFtZSh0YXJnZXROYW1lc3BhY2UsICJteU9wZXJhdGlvblJlcXVlc3QiKTsgLy8vLyROT04tTkxTLTEkCi0gICAgamF2YXgud3NkbC5NZXNzYWdlIHJlcXVlc3RNZXNzYWdlID0gZGVmaW5pdGlvbi5nZXRNZXNzYWdlKHJlcXVlc3RNZXNzYWdlUU5hbWUpOwotCi0gICAgUGFydCByZXF1ZXN0UGFydCA9IChQYXJ0KXJlcXVlc3RNZXNzYWdlLmdldFBhcnQoIm15T3BlcmF0aW9uUmVxdWVzdCIpOyAvLy8vJE5PTi1OTFMtMSQKLQotICAgIFhTREVsZW1lbnREZWNsYXJhdGlvbiByZXF1ZXN0RWxlbWVudERlY2xhcmF0aW9uID0gcmVxdWVzdFBhcnQuZ2V0RWxlbWVudERlY2xhcmF0aW9uKCk7Ci0KLSAgICBhc3NlcnROb3ROdWxsKHJlcXVlc3RFbGVtZW50RGVjbGFyYXRpb24pOwotCi0gICAgLy8gTm93IHRvIG1ha2Ugc3VyZSB0aGUgRE9NIGlzIHJlY29uY2lsZWQgcHJvcGVybHkgYW5kIHVzZXMgdGhlIGxvY2FsIG5hbWVzcGFjZSBwcmVmaXgsIAotICAgIC8vIGxldCdzIHRyeSB0byBjaGFuZ2UgdGhlIHBhcnQncyBlbGVtZW50IGRlY2xhcmF0aW9uLiBXZSdsbCB1c2UgdGhlIHJlc3BvbnNlIHBhcnQgZWxlbWVudAotICAgIC8vIGp1c3QgYmVjYXVzZSBpdCBpcyBjb252ZW5pZW50LgotCi0gICAgcmVxdWVzdFBhcnQuc2V0RWxlbWVudERlY2xhcmF0aW9uKHJlc3BvbnNlRWxlbWVudERlY2xhcmF0aW9uKTsKLQotICAgIEVsZW1lbnQgcGFydEVsZW1lbnQgPSByZXF1ZXN0UGFydC5nZXRFbGVtZW50KCk7Ci0gICAgU3RyaW5nIGVsZW1lbnRBdHRyaWJ1dGVWYWx1ZSA9IHBhcnRFbGVtZW50LmdldEF0dHJpYnV0ZShXU0RMQ29uc3RhbnRzLkVMRU1FTlRfQVRUUklCVVRFKTsKLQotICAgIGFzc2VydEVxdWFscyhlbGVtZW50QXR0cmlidXRlVmFsdWUsICJwYXJ0dG5zOiIgKyByZXNwb25zZUVsZW1lbnREZWNsYXJhdGlvbi5nZXROYW1lKCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIFNlZSBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTU3MTA3Ci0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VG9sbGVyYXRlc0V4dGVuc2lvbkVsZW1lbnRzRm9yT3BlcmF0aW9uKCkKLSAgewotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG51bGw7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBkZWZpbml0aW9uID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvQnVnRml4ZXMvT3BlcmF0aW9uU3R5bGUvT3BlcmF0aW9uU3R5bGVUZXN0LndzZGwiKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBmYWlsKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0KLSAgICBQb3J0VHlwZSBwb3J0VHlwZSA9IChQb3J0VHlwZSlkZWZpbml0aW9uLmdldEVQb3J0VHlwZXMoKS5nZXQoMCk7Ci0gICAgRUxpc3Qgb3BlcmF0aW9ucyA9IHBvcnRUeXBlLmdldEVPcGVyYXRpb25zKCk7Ci0KLSAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gKE9wZXJhdGlvbilvcGVyYXRpb25zLmdldCgwKTsKLSAgICBPcGVyYXRpb25UeXBlIG9wZXJhdGlvblR5cGUgPSBvcGVyYXRpb24uZ2V0U3R5bGUoKTsKLQotICAgIGFzc2VydEVxdWFscyhPcGVyYXRpb25UeXBlLlJFUVVFU1RfUkVTUE9OU0UsIG9wZXJhdGlvblR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIFNlZSBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTY0NTY1Ci0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UmVjb25jaWxlc0JpbmRpbmdGYXVsdHMoKQotICB7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gbnVsbDsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIGRlZmluaXRpb24gPSBEZWZpbml0aW9uTG9hZGVyLmxvYWQoUExVR0lOX0FCU09MVVRFX1BBVEggKyAic2FtcGxlcy9CdWdGaXhlcy9CaW5kaW5nRmF1bHRSZWNvbmNpbGlhdGlvbi9CaW5kaW5nRmF1bHRTYW1wbGUud3NkbCIpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGZhaWwoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLQotICAgIC8vIFRlc3QgdGhlIGFibm9ybWFsIGNhc2Ugd2hlbiB0aGUgYmluZGluZyBvcGVyYXRpb24gdHJpZXMgdG8gYmluZCBhIGZhdWx0Ci0gICAgLy8gYnV0IHRoZSBmYXVsdCBpcyBtaXNzaW5nIGluIHRoZSBjb3JyZXNwb25kaW5nIG9wZXJhdGlvbi4gSW4gdGhpcyBjYXNlIHRoZQotICAgIC8vIGZhdWx0IG9idGFpbmVkIGZyb20gdGhlIGJpbmRpbmcgb3BlcmF0aW9uJ3MgZmF1bHQgc2hvdWxkIGJlIG51bGwuCi0KLSAgICBMaXN0IGJpbmRpbmdzID0gZGVmaW5pdGlvbi5nZXRFQmluZGluZ3MoKTsKLSAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZyliaW5kaW5ncy5nZXQoMCk7Ci0gICAgTGlzdCBiaW5kaW5nT3BlcmF0aW9ucyA9IGJpbmRpbmcuZ2V0QmluZGluZ09wZXJhdGlvbnMoKTsKLSAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbiliaW5kaW5nT3BlcmF0aW9ucy5nZXQoMCk7Ci0gICAgQmluZGluZ0ZhdWx0IGJpbmRpbmdGYXVsdCA9IChCaW5kaW5nRmF1bHQpYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nRmF1bHQoIk9wZXJhdGlvbjFGYXVsdCIpOyAvLyROT04tTkxTLTEkCi0gICAgRmF1bHQgZmF1bHQgPSBiaW5kaW5nRmF1bHQuZ2V0RUZhdWx0KCk7Ci0gICAgYXNzZXJ0TnVsbChmYXVsdCk7Ci0KLSAgICAvLyBUZXN0IHRoZSBub3JtYWwgY2FzZSB3aGVuIHRoZSBvcGVyYXRpb24gYW5kIGJpbmRpbmcgb3BlcmF0aW9uIGFyZSBpbgotICAgIC8vIHN5bmNoLiBJbiB0aGlzIGNhc2UgdGhlIGZhdWx0IGRlZmluZWQgaW4gdGhlIG9wZXJhdGlvbiBzaG91bGQgbWF0Y2gKLSAgICAvLyB0aGUgb25lIG9idGFpbmVkIGZyb20gdGhlIGJpbmRpbmcgb3BlcmF0aW9uJ3MgZmF1bHQuCi0KLSAgICBMaXN0IHBvcnRUeXBlcyA9IGRlZmluaXRpb24uZ2V0RVBvcnRUeXBlcygpOwotICAgIFBvcnRUeXBlIHBvcnRUeXBlID0gKFBvcnRUeXBlKXBvcnRUeXBlcy5nZXQoMCk7Ci0gICAgRUxpc3Qgb3BlcmF0aW9ucyA9IHBvcnRUeXBlLmdldEVPcGVyYXRpb25zKCk7Ci0KLSAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gKE9wZXJhdGlvbilvcGVyYXRpb25zLmdldCgxKTsKLSAgICBqYXZheC53c2RsLkZhdWx0IGV4cGVjdGVkRmF1bHQxID0gb3BlcmF0aW9uLmdldEZhdWx0KCJPcGVyYXRpb24yRmF1bHQxIik7IC8vJE5PTi1OTFMtMSQKLSAgICBqYXZheC53c2RsLkZhdWx0IGV4cGVjdGVkRmF1bHQyID0gb3BlcmF0aW9uLmdldEZhdWx0KCJPcGVyYXRpb24yRmF1bHQyIik7IC8vJE5PTi1OTFMtMSQKLQotICAgIEJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbjIgPSAoQmluZGluZ09wZXJhdGlvbiliaW5kaW5nT3BlcmF0aW9ucy5nZXQoMSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgdGhlIGZhdWx0IG9idGFpbmVkIGZyb20gdGhlIGJpbmRpbmcgZmF1bHQgaXMgbm90IG51bGwgYW5kCi0gICAgLy8gbWF0Y2hlcyB0aGUgb25lIGluIHRoZSBjb3JyZXNwb25kaW5nIG9wZXJhdGlvbi4KLQotICAgIEJpbmRpbmdGYXVsdCBiaW5kaW5nRmF1bHQxID0gKEJpbmRpbmdGYXVsdCliaW5kaW5nT3BlcmF0aW9uMi5nZXRCaW5kaW5nRmF1bHQoIk9wZXJhdGlvbjJGYXVsdDEiKTsgLy8kTk9OLU5MUy0xJAotICAgIGphdmF4LndzZGwuRmF1bHQgYWN0dWFsRmF1bHQxID0gYmluZGluZ0ZhdWx0MS5nZXRFRmF1bHQoKTsKLSAgICBhc3NlcnROb3ROdWxsKGFjdHVhbEZhdWx0MSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkRmF1bHQxLCBhY3R1YWxGYXVsdDEpOwotCi0gICAgLy8gTWFrZSBzdXJlIHRoZSBmYXVsdCBvYnRhaW5lZCBmcm9tIHRoZSBiaW5kaW5nIGZhdWx0IGlzIG5vdCBudWxsIGFuZAotICAgIC8vIG1hdGNoZXMgdGhlIG9uZSBpbiB0aGUgY29ycmVzcG9uZGluZyBvcGVyYXRpb24uCi0KLSAgICBCaW5kaW5nRmF1bHQgYmluZGluZ0ZhdWx0MiA9IChCaW5kaW5nRmF1bHQpYmluZGluZ09wZXJhdGlvbjIuZ2V0QmluZGluZ0ZhdWx0KCJPcGVyYXRpb24yRmF1bHQyIik7IC8vJE5PTi1OTFMtMSQKLSAgICBqYXZheC53c2RsLkZhdWx0IGFjdHVhbEZhdWx0MiA9IGJpbmRpbmdGYXVsdDIuZ2V0RUZhdWx0KCk7Ci0gICAgYXNzZXJ0Tm90TnVsbChhY3R1YWxGYXVsdDIpOwotICAgIGFzc2VydEVxdWFscyhleHBlY3RlZEZhdWx0MiwgYWN0dWFsRmF1bHQyKTsKLSAgfQotCi0gIC8qKgotICAgKiBTZWUgaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTE2MTA1OQotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEF2b2lkRHVwbGljYXRlU0FYRXhjZXB0aW9uRGlhZ25vc3RpY3MoKQotICB7Ci0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gbnVsbDsKLQotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIE1ha2Ugc3VyZSB3ZSB0cmFjayBsb2NhdGlvbiB0byBhbGxvdyB0aGUgV1NETFBhcnNlciB0byBraWNrIGluLgotCi0gICAgICBkZWZpbml0aW9uID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvQnVnRml4ZXMvRHVwbGljYXRlU0FYRXhjZXB0aW9uL1NBWEV4Y2VwdGlvbi53c2RsIiwgdHJ1ZSwgdHJ1ZSk7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZmFpbChlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotCi0gICAgUmVzb3VyY2UgcmVzb3VyY2UgPSBkZWZpbml0aW9uLmVSZXNvdXJjZSgpOwotICAgIEVMaXN0IGVycm9ycyA9IHJlc291cmNlLmdldEVycm9ycygpOwotICAgIGludCBleHBlY3RlZFNpemUgPSAxOwotICAgIGludCBhY3R1YWxTaXplID0gZXJyb3JzLnNpemUoKTsKLSAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWRTaXplLCBhY3R1YWxTaXplKTsKLSAgfQotCi0gIC8qKgotICAgKiBTZWUgaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTE3MjU3NgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEJpbmRpbmdPcGVyYXRpb25SZWNvbmNpbGlhdGlvbigpCi0gIHsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBudWxsOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChQTFVHSU5fQUJTT0xVVEVfUEFUSAotICAgICAgICArICJzYW1wbGVzL0J1Z0ZpeGVzL0JpbmRpbmdPcGVyYXRpb25SZWNvbmNpbGlhdGlvbi9CaW5kaW5nT3BlcmF0aW9uUmVjb25jaWxpYXRpb24ud3NkbCIsIHRydWUpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGZhaWwoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLQotICAgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSAiaHR0cDovL3d3dy5leGFtcGxlLm9yZy9CaW5kaW5nT3BlcmF0aW9uUmVjb25jaWxpYXRpb24vIjsgLy8kTk9OLU5MUy0xJAotICAgIFFOYW1lIHBvcnRUeXBlUU5hbWUgPSBuZXcgUU5hbWUodGFyZ2V0TmFtZXNwYWNlLCAiQmluZGluZ09wZXJhdGlvblJlY29uY2lsaWF0aW9uIik7IC8vJE5PTi1OTFMtMSQKLSAgICBqYXZheC53c2RsLlBvcnRUeXBlIHBvcnRUeXBlID0gZGVmaW5pdGlvbi5nZXRQb3J0VHlwZShwb3J0VHlwZVFOYW1lKTsKLQotICAgIFN0cmluZyBpbnB1dDNOYW1lID0gIklucHV0MyI7IC8vJE5PTi1OTFMtMSQKLSAgICBTdHJpbmcgb3V0cHV0M05hbWUgPSAiT3V0cHV0MyI7IC8vJE5PTi1OTFMtMSQKLQotICAgIC8vIENoZWNrIHRoYXQgdGhlIGZpcnN0IG9wZXJhdGlvbiAtIHdoaWNoIGhhcyBubyBuYW1lZCBpbnB1dC9vdXRwdXQgaXMgYmVpbmcKLSAgICAvLyBmb3VuZC4KLQotICAgIFN0cmluZyBvcGVyYXRpb25OYW1lID0gIk5ld09wZXJhdGlvbiI7IC8vJE5PTi1OTFMtMSQKLSAgICBqYXZheC53c2RsLk9wZXJhdGlvbiBvcGVyYXRpb24xID0gcG9ydFR5cGUuZ2V0T3BlcmF0aW9uKG9wZXJhdGlvbk5hbWUsIG51bGwsIG51bGwpOwotCi0gICAgUU5hbWUgYmluZGluZ1FOYW1lID0gbmV3IFFOYW1lKHRhcmdldE5hbWVzcGFjZSwgIkJpbmRpbmdPcGVyYXRpb25SZWNvbmNpbGlhdGlvblNPQVAiKTsgLy8kTk9OLU5MUy0xJAotICAgIGphdmF4LndzZGwuQmluZGluZyBiaW5kaW5nID0gZGVmaW5pdGlvbi5nZXRCaW5kaW5nKGJpbmRpbmdRTmFtZSk7Ci0KLSAgICBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb24gYmluZGluZ09wZXJhdGlvbjEgPSBiaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb24ob3BlcmF0aW9uTmFtZSwgbnVsbCwgbnVsbCk7Ci0gICAgamF2YXgud3NkbC5PcGVyYXRpb24gYWN0dWFsT3BlcmF0aW9uMSA9IGJpbmRpbmdPcGVyYXRpb24xLmdldE9wZXJhdGlvbigpOwotCi0gICAgYXNzZXJ0RXF1YWxzKG9wZXJhdGlvbjEsIGFjdHVhbE9wZXJhdGlvbjEpOwotCi0gICAgLy8gVGhlIHNlY29uZCBvcGVyYXRpb24gLSB3aGljaCBoYXMgbm8gbmFtZWQgaW5wdXQvb3V0cHV0IGlzIGJlaW5nIGZvdW5kCi0gICAgLy8gc2hvdWxkIG5vdCBiZSByZWNvbmNpbGVkIGJlY2F1c2UgdGhlIGJpbmRpbmcgc3BlY2lmaWVzIHRoZSBpbnB1dCBhbmQKLSAgICAvLyBvdXRwdXQuCi0KLSAgICBTdHJpbmcgaW5wdXQyTmFtZSA9ICJJbnB1dDIiOyAvLyROT04tTkxTLTEkCi0gICAgU3RyaW5nIG91dHB1dDJOYW1lID0gIk91dHB1dDIiOyAvLyROT04tTkxTLTEkCi0KLSAgICBTdHJpbmcgb3BlcmF0aW9uMk5hbWUgPSAiTmV3T3BlcmF0aW9uMiI7IC8vJE5PTi1OTFMtMSQKLQotICAgIGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uMiA9IGJpbmRpbmcuZ2V0QmluZGluZ09wZXJhdGlvbihvcGVyYXRpb24yTmFtZSwgaW5wdXQyTmFtZSwgb3V0cHV0Mk5hbWUpOwotICAgIGphdmF4LndzZGwuT3BlcmF0aW9uIGFjdHVhbE9wZXJhdGlvbjIgPSBiaW5kaW5nT3BlcmF0aW9uMi5nZXRPcGVyYXRpb24oKTsKLQotICAgIGFzc2VydEVxdWFscyhudWxsLCBhY3R1YWxPcGVyYXRpb24yKTsKLQotICAgIC8vIFRoZSB0aGlyZCBvcGVyYXRpb24gc3BlY2lmaWVzIGFuIGlucHV0IGFuZCBvdXRwdXQgbmFtZSwgYW5kIHRoZSBiaW5kaW5nCi0gICAgLy8gb3BlcmF0aW9uIHdpbGwgcmVjb25jaWxlIGZpbmUgYmVjYXVzZSB0aGUgaXQgYWxzbyBzcGVjaWZpZXMgdGhlIHByb3BlcgotICAgIC8vIGlucHV0IGFuZCBvdXRwdXQgbmFtZS4KLQotICAgIFN0cmluZyBvcGVyYXRpb24zTmFtZSA9ICJOZXdPcGVyYXRpb24zIjsgLy8kTk9OLU5MUy0xJAotICAgIGphdmF4LndzZGwuT3BlcmF0aW9uIG9wZXJhdGlvbjMgPSBwb3J0VHlwZS5nZXRPcGVyYXRpb24ob3BlcmF0aW9uM05hbWUsIGlucHV0M05hbWUsIG91dHB1dDNOYW1lKTsKLQotICAgIGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uMyA9IGJpbmRpbmcuZ2V0QmluZGluZ09wZXJhdGlvbihvcGVyYXRpb24zTmFtZSwgaW5wdXQzTmFtZSwgb3V0cHV0M05hbWUpOwotICAgIGphdmF4LndzZGwuT3BlcmF0aW9uIGFjdHVhbE9wZXJhdGlvbjMgPSBiaW5kaW5nT3BlcmF0aW9uMy5nZXRPcGVyYXRpb24oKTsKLQotICAgIGFzc2VydEVxdWFscyhvcGVyYXRpb24zLCBhY3R1YWxPcGVyYXRpb24zKTsKLSAgfQotCi0gIC8qKgotICAgKiBTZWUgaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTE3Nzg1MgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEZ1bGxFbGVtZW50RXh0ZW5zaWJpbGl0eSgpCi0gIHsKLQotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG51bGw7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBkZWZpbml0aW9uID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvQnVnRml4ZXMvRnVsbEVsZW1lbnRFeHRlbnNpYmlsaXR5L0V4dGVuZGVkV1NETC53c2RsIiwgdHJ1ZSk7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZmFpbChlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotCi0gICAgU3RyaW5nIGV4dGVuc2lvbnNOYW1lc3BhY2VVUkkgPSAiaHR0cDovL3d3dy5leGFtcGxlLm9yZy9FeHRlbnNpb25zLyI7IC8vJE5PTi1OTFMtMSQgCi0gICAgRUxpc3QgaW1wb3J0cyA9IGRlZmluaXRpb24uZ2V0RUltcG9ydHMoKTsKLSAgICBhc3NlcnRGYWxzZShpbXBvcnRzLmlzRW1wdHkoKSk7Ci0gICAgSW1wb3J0IHRoZUltcG9ydCA9IChJbXBvcnQpaW1wb3J0cy5nZXQoMCk7Ci0gICAgY2hlY2tFeHRlbnNpb24odGhlSW1wb3J0LCBleHRlbnNpb25zTmFtZXNwYWNlVVJJLCAiaW1wb3J0Iik7IC8vJE5PTi1OTFMtMSQKLQotICAgIEVMaXN0IG1lc3NhZ2VzID0gZGVmaW5pdGlvbi5nZXRFTWVzc2FnZXMoKTsKLSAgICBhc3NlcnRGYWxzZShtZXNzYWdlcy5pc0VtcHR5KCkpOwotICAgIE1lc3NhZ2UgbWVzc2FnZSA9IChNZXNzYWdlKW1lc3NhZ2VzLmdldCgwKTsKLSAgICBjaGVja0V4dGVuc2lvbihtZXNzYWdlLCBleHRlbnNpb25zTmFtZXNwYWNlVVJJLCAibWVzc2FnZSIpOyAvLyROT04tTkxTLTEkCi0KLSAgICBQYXJ0IHBhcnQgPSAoUGFydCltZXNzYWdlLmdldFBhcnQoImV4dGVuZGVkUGFydCIpOyAvLyROT04tTkxTLTEkCi0gICAgYXNzZXJ0Tm90TnVsbChwYXJ0KTsKLSAgICBjaGVja0V4dGVuc2lvbihwYXJ0LCBleHRlbnNpb25zTmFtZXNwYWNlVVJJLCAicGFydCIpOyAvLyROT04tTkxTLTEkCi0KLSAgICBFTGlzdCBwb3J0VHlwZXMgPSBkZWZpbml0aW9uLmdldEVQb3J0VHlwZXMoKTsKLSAgICBhc3NlcnRGYWxzZShwb3J0VHlwZXMuaXNFbXB0eSgpKTsKLSAgICBQb3J0VHlwZSBwb3J0VHlwZSA9IChQb3J0VHlwZSlwb3J0VHlwZXMuZ2V0KDApOwotICAgIGNoZWNrRXh0ZW5zaW9uKHBvcnRUeXBlLCBleHRlbnNpb25zTmFtZXNwYWNlVVJJLCAicG9ydFR5cGUiKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IChPcGVyYXRpb24pcG9ydFR5cGUuZ2V0T3BlcmF0aW9uKCJleHRlbmRlZE9wZXJhdGlvbiIsIG51bGwsIG51bGwpOyAvLyROT04tTkxTLTEkCi0gICAgYXNzZXJ0Tm90TnVsbChvcGVyYXRpb24pOwotICAgIGNoZWNrRXh0ZW5zaW9uKG9wZXJhdGlvbiwgZXh0ZW5zaW9uc05hbWVzcGFjZVVSSSwgIm9wZXJhdGlvbiIpOyAvLyROT04tTkxTLTEkCi0KLSAgICBJbnB1dCBpbnB1dCA9IG9wZXJhdGlvbi5nZXRFSW5wdXQoKTsKLSAgICBhc3NlcnROb3ROdWxsKGlucHV0KTsKLSAgICBjaGVja0V4dGVuc2lvbihpbnB1dCwgZXh0ZW5zaW9uc05hbWVzcGFjZVVSSSwgImlucHV0Iik7IC8vJE5PTi1OTFMtMSQKLQotICAgIE91dHB1dCBvdXRwdXQgPSBvcGVyYXRpb24uZ2V0RU91dHB1dCgpOwotICAgIGFzc2VydE5vdE51bGwob3V0cHV0KTsKLSAgICBjaGVja0V4dGVuc2lvbihvdXRwdXQsIGV4dGVuc2lvbnNOYW1lc3BhY2VVUkksICJvdXRwdXQiKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgRmF1bHQgZmF1bHQgPSAoRmF1bHQpb3BlcmF0aW9uLmdldEZhdWx0KCJleHRlbmRlZEZhdWx0Iik7IC8vJE5PTi1OTFMtMSQKLSAgICBhc3NlcnROb3ROdWxsKGZhdWx0KTsKLSAgICBjaGVja0V4dGVuc2lvbihmYXVsdCwgZXh0ZW5zaW9uc05hbWVzcGFjZVVSSSwgImZhdWx0Iik7IC8vJE5PTi1OTFMtMSQKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja3MgdGhlIGdpdmVuIGV4dGVuc2libGUgZWxlbWVudCB0byBtYWtlIHN1cmUgdGhhdCBpdHMgYXNzdW1lZCBvbmUgYW5kIG9ubHkgZXh0ZW5zaWJpbGl0eSBlbGVtZW50IG1hdGNoZXMgdGhlIGdpdmVuIG5hbWVzcGFjZSBhbmQgbG9jYWwgbmFtZS4KLSAgICogQHBhcmFtIGV4dGVuc2libGVFbGVtZW50IHRoZSBleHRlbnNpYmxlIGVsZW1lbnQgdG8gdGVzdC4KLSAgICogQHBhcmFtIGV4dGVuc2lvbnNOYW1lc3BhY2VVUkkgdGhlIGV4cGVjdGVkIG5hbWVzcGFjZSBVUkkuCi0gICAqIEBwYXJhbSBlbGVtZW50TmFtZSB0aGUgZXhwZWN0ZWQgZWxlbWVudCBuYW1lLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGNoZWNrRXh0ZW5zaW9uKEV4dGVuc2libGVFbGVtZW50IGV4dGVuc2libGVFbGVtZW50LCBTdHJpbmcgZXh0ZW5zaW9uc05hbWVzcGFjZVVSSSwgU3RyaW5nIGVsZW1lbnROYW1lKQotICB7Ci0gICAgTGlzdCBleHRlbnNpYmlsaXR5RWxlbWVudHMgPSBleHRlbnNpYmxlRWxlbWVudC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICBhc3NlcnRGYWxzZShleHRlbnNpYmlsaXR5RWxlbWVudHMuaXNFbXB0eSgpKTsKLSAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXR5RWxlbWVudCA9IChFeHRlbnNpYmlsaXR5RWxlbWVudClleHRlbnNpYmlsaXR5RWxlbWVudHMuZ2V0KDApOwotICAgIFFOYW1lIGVsZW1lbnRUeXBlID0gZXh0ZW5zaWJpbGl0eUVsZW1lbnQuZ2V0RWxlbWVudFR5cGUoKTsKLSAgICBTdHJpbmcgbnNVUkkgPSBlbGVtZW50VHlwZS5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICBTdHJpbmcgbG9jYWxQYXJ0ID0gZWxlbWVudFR5cGUuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgYXNzZXJ0RXF1YWxzKGV4dGVuc2lvbnNOYW1lc3BhY2VVUkksIG5zVVJJKTsKLSAgICBhc3NlcnRFcXVhbHMobG9jYWxQYXJ0LCBlbGVtZW50TmFtZSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBTZWUgaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTE3NDM2MQotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFR5cGVzRXh0ZW5zaWJpbGl0eSgpCi0gIHsKLQotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG51bGw7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBkZWZpbml0aW9uID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvQnVnRml4ZXMvVHlwZXNFeHRlbnNpYmlsaXR5L1R5cGVzRXh0ZW5zaWJpbGl0eS53c2RsIiwgdHJ1ZSk7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZmFpbChlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICAgIAotICAgIFR5cGVzIHR5cGVzID0gZGVmaW5pdGlvbi5nZXRFVHlwZXMoKTsKLSAgICBMaXN0IGV4dGVuc2liaWxpdHlFbGVtZW50cyA9IHR5cGVzLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgIGFzc2VydEVxdWFscygzLCBleHRlbnNpYmlsaXR5RWxlbWVudHMuc2l6ZSgpKTsKLSAgICAKLSAgICBTdHJpbmcgb3RoZXJUeXBlc05hbWVzcGFjZSA9ICJodHRwOi8vd3d3LmV4YW1wbGUub3JnL090aGVyVHlwZXMvIjsgLy8kTk9OLU5MUy0xJAotCi0gICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZXh0ZW5zaWJpbGl0eUVsZW1lbnRzLmdldCgwKTsKLSAgICBRTmFtZSBlbGVtZW50VHlwZSA9IGV4dGVuc2liaWxpdHlFbGVtZW50LmdldEVsZW1lbnRUeXBlKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKG90aGVyVHlwZXNOYW1lc3BhY2UsIGVsZW1lbnRUeXBlLmdldE5hbWVzcGFjZVVSSSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoInR5cGVEZWYiLCBlbGVtZW50VHlwZS5nZXRMb2NhbFBhcnQoKSk7IC8vJE5PTi1OTFMtMSQKLQotICAgIExpc3Qgc2NoZW1hcyA9IHR5cGVzLmdldFNjaGVtYXMoKTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgc2NoZW1hcy5zaXplKCkpOwotICAgIAotICAgIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50IHNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50ID0gKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KWV4dGVuc2liaWxpdHlFbGVtZW50cy5nZXQoMSk7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IHNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50LmdldFNjaGVtYSgpOwotICAgIGFzc2VydE5vdE51bGwoc2NoZW1hKTsKLSAgICBYU0RFbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudERlY2xhcmF0aW9uID0gc2NoZW1hLnJlc29sdmVFbGVtZW50RGVjbGFyYXRpb24oInRlc3QiKTsgLy8kTk9OLU5MUy0xJAotICAgIGFzc2VydE5vdE51bGwoZWxlbWVudERlY2xhcmF0aW9uKTsKLSAgICBhc3NlcnROb3ROdWxsKGVsZW1lbnREZWNsYXJhdGlvbi5nZXRDb250YWluZXIoKSk7ICAgIAotICAgIAotICAgIGV4dGVuc2liaWxpdHlFbGVtZW50ID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWV4dGVuc2liaWxpdHlFbGVtZW50cy5nZXQoMik7Ci0gICAgZWxlbWVudFR5cGUgPSBleHRlbnNpYmlsaXR5RWxlbWVudC5nZXRFbGVtZW50VHlwZSgpOwotICAgIGFzc2VydEVxdWFscyhvdGhlclR5cGVzTmFtZXNwYWNlLCBlbGVtZW50VHlwZS5nZXROYW1lc3BhY2VVUkkoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJ0eXBlRGVmIiwgZWxlbWVudFR5cGUuZ2V0TG9jYWxQYXJ0KCkpOyAvLyROT04tTkxTLTEkICAgIAotICB9Ci0KLSAgLyoqCi0gICAqIFNlZSBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTc4NTU1Ci0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0QWxsb3dOdWxsTmFtZXNwYWNlVVJJKCkKLSAgewotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG51bGw7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBkZWZpbml0aW9uID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvQnVnRml4ZXMvTnVsbE5hbWVzcGFjZVVSSS9Db250YWN0SW5mb1NlcnZpY2Uud3NkbCIsIHRydWUpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGZhaWwoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLQotICAgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSAiaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Db250YWN0SW5mb1NlcnZpY2UiOyAvLyROT04tTkxTLTEkCi0KLSAgICAvLyBUaGUgZWxlbWVudCBkZWNsYXJhdGlvbiBmb3IgdGhlIG91dHB1dCBtZXNzYWdlIHBhcnQgaXMgc3BlY2lmaWVkIGluIGEKLSAgICAvLyBzY2hlbWEgd2l0aCBubyB0YXJnZXQgbmFtZXNwYWNlLiBJdCBzaG91bGQgcmVzb2x2ZSBmaW5lIGFuZCBoYXZlIGEgbnVsbAotICAgIC8vIG5hbWVzcGFjZSBVUkkuCi0KLSAgICBRTmFtZSBvdXRwdXQxUU5hbWUgPSBuZXcgUU5hbWUodGFyZ2V0TmFtZXNwYWNlLCAidXBkYXRlUGhvbmVOdW1iZXJSZXNwb25zZU1zZyIpOyAvLyROT04tTkxTLTEkCi0gICAgTWVzc2FnZSBvdXRwdXQxTWVzc2FnZSA9IChNZXNzYWdlKWRlZmluaXRpb24uZ2V0TWVzc2FnZShvdXRwdXQxUU5hbWUpOwotICAgIGFzc2VydE5vdE51bGwob3V0cHV0MU1lc3NhZ2UpOwotCi0gICAgUGFydCBwYXJ0MSA9IChQYXJ0KW91dHB1dDFNZXNzYWdlLmdldFBhcnQoIm91dHB1dDEiKTsgLy8kTk9OLU5MUy0xJAotICAgIGFzc2VydE5vdE51bGwocGFydDEpOwotCi0gICAgUU5hbWUgb3V0cHV0MkVsZW1lbnROYW1lID0gcGFydDEuZ2V0RWxlbWVudE5hbWUoKTsKLSAgICBhc3NlcnROb3ROdWxsKG91dHB1dDJFbGVtZW50TmFtZSk7Ci0gICAgYXNzZXJ0RXF1YWxzKFhNTENvbnN0YW50cy5OVUxMX05TX1VSSSwgb3V0cHV0MkVsZW1lbnROYW1lLmdldE5hbWVzcGFjZVVSSSgpKTsKLQotICAgIFhTREVsZW1lbnREZWNsYXJhdGlvbiBvdXRwdXQyRWxlbWVudERlY2xhcmF0aW9uID0gcGFydDEuZ2V0RWxlbWVudERlY2xhcmF0aW9uKCk7Ci0gICAgYXNzZXJ0Tm90TnVsbChvdXRwdXQyRWxlbWVudERlY2xhcmF0aW9uKTsKLSAgICBhc3NlcnROb3ROdWxsKG91dHB1dDJFbGVtZW50RGVjbGFyYXRpb24uZ2V0Q29udGFpbmVyKCkpOwotICAgIGFzc2VydE51bGwob3V0cHV0MkVsZW1lbnREZWNsYXJhdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKSk7Ci0KLSAgICAvLyBUaGUgdHlwZSBkZWZpbml0aW9uIGZvciB0aGUgb3V0cHV0IG1lc3NhZ2UgcGFydCBpcyBzcGVjaWZpZWQgaW4gYQotICAgIC8vIHNjaGVtYSB3aXRoIG5vIHRhcmdldCBuYW1lc3BhY2UuIEl0IHNob3VsZCByZXNvbHZlIGZpbmUgYW5kIGhhdmUgYSBudWxsCi0gICAgLy8gbmFtZXNwYWNlIFVSSS4KLQotICAgIFFOYW1lIG91dHB1dDJRTmFtZSA9IG5ldyBRTmFtZSh0YXJnZXROYW1lc3BhY2UsICJ1cGRhdGVBZGRyZXNzUmVzcG9uc2VNc2ciKTsgLy8kTk9OLU5MUy0xJAotICAgIE1lc3NhZ2Ugb3V0cHV0Mk1lc3NhZ2UgPSAoTWVzc2FnZSlkZWZpbml0aW9uLmdldE1lc3NhZ2Uob3V0cHV0MlFOYW1lKTsKLSAgICBhc3NlcnROb3ROdWxsKG91dHB1dDJNZXNzYWdlKTsKLQotICAgIFBhcnQgcGFydDIgPSAoUGFydClvdXRwdXQyTWVzc2FnZS5nZXRQYXJ0KCJvdXRwdXQyIik7IC8vJE5PTi1OTFMtMSQKLSAgICBhc3NlcnROb3ROdWxsKHBhcnQxKTsKLQotICAgIFFOYW1lIG91dHB1dDJUeXBlTmFtZSA9IHBhcnQyLmdldFR5cGVOYW1lKCk7Ci0gICAgYXNzZXJ0Tm90TnVsbChvdXRwdXQyVHlwZU5hbWUpOwotICAgIGFzc2VydEVxdWFscyhYTUxDb25zdGFudHMuTlVMTF9OU19VUkksIG91dHB1dDJUeXBlTmFtZS5nZXROYW1lc3BhY2VVUkkoKSk7Ci0KLSAgICBYU0RUeXBlRGVmaW5pdGlvbiBvdXRwdXQyVHlwZURlZmluaXRpb24gPSBwYXJ0Mi5nZXRUeXBlRGVmaW5pdGlvbigpOwotICAgIGFzc2VydE5vdE51bGwob3V0cHV0MlR5cGVEZWZpbml0aW9uKTsKLSAgICBhc3NlcnROb3ROdWxsKG91dHB1dDJUeXBlRGVmaW5pdGlvbi5nZXRDb250YWluZXIoKSk7Ci0gICAgYXNzZXJ0TnVsbChvdXRwdXQyVHlwZURlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCkpOwotICB9Ci0gIAotICAvKioKLSAgICogaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTEwNDQ1MwotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdExvYWRzTmFtZWxlc3NEZWZpbml0aW9uKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIC8vVGVzdCB3aXRoIG5hbWVsZXNzIGRlZmluaXRpb24KLSAgICAgIAotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvQnVnRml4ZXMvTG9hZHNOYW1lbGVzc0RlZmluaXRpb24vTWlzc2luZ05hbWUud3NkbCIpOwotICAgICAgYXNzZXJ0TnVsbChkZWZpbml0aW9uLmdldFFOYW1lKCkpOwotCi0gICAgICAvL1Rlc3Qgd2l0aCBuYW1lZCBkZWZpbml0aW9uCi0gICAgICAKLSAgICAgIGRlZmluaXRpb24gPSBEZWZpbml0aW9uTG9hZGVyLmxvYWQoUExVR0lOX0FCU09MVVRFX1BBVEggKyAic2FtcGxlcy9CdWdGaXhlcy9Mb2Fkc05hbWVsZXNzRGVmaW5pdGlvbi9XaXRoTmFtZS53c2RsIik7Ci0gICAgICBhc3NlcnROb3ROdWxsKGRlZmluaXRpb24pOwotICAgICAgUU5hbWUgbmFtZSA9IGRlZmluaXRpb24uZ2V0UU5hbWUoKTsgCi0gICAgICBhc3NlcnROb3ROdWxsKG5hbWUpOwotICAgICAgYXNzZXJ0RXF1YWxzKCJXU0RMRmlsZSIsIG5hbWUuZ2V0TG9jYWxQYXJ0KCkpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgQXNzZXJ0LmZhaWwoIlRlc3QgZmFpbGVkIGR1ZSB0byBhbiBleGNlcHRpb246ICIgKyBlLmdldExvY2FsaXplZE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci0gIAotICAvKioKLSAgICogU2VlIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xNTE2NzQKLSAgICogQHRocm93cyBFeGNlcHRpb24KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RIYW5kbGVzRG9jdW1lbnRhdGlvbkVsZW1lbnRzKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIExvYWQgYSBzYW1wbGUgV1NETCBkb2N1bWVudCB0aGF0IGhhcyBkb2N1bWVudGF0aW9uIGVsZW1lbnRzIGluIGFsbCBhbGxvd2VkIHBsYWNlcy4KLSAgICAgIAotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvQnVnRml4ZXMvSGFuZGxlc0RvY3VtZW50YXRpb25FbGVtZW50cy9Eb2N1bWVudGVkLndzZGwiKTsKLSAgICAgIAotICAgICAgLy8gTWFrZSBzdXJlIGltcG9ydHMgYXJlIGFkZGVkIGFmdGVyIHRoZSBkb2N1bWVudGF0aW9uIGVsZW1lbnQuCi0gICAgICAKLSAgICAgIFdTRExGYWN0b3J5IGZhY3RvcnkgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0U7Ci0gICAgICBJbXBvcnQgYW5JbXBvcnQgPSBmYWN0b3J5LmNyZWF0ZUltcG9ydCgpOwotICAgICAgYW5JbXBvcnQuc2V0TmFtZXNwYWNlVVJJKCJodHRwOi8vd3d3LnRlc3QuY29tIik7Ci0gICAgICBkZWZpbml0aW9uLmFkZEltcG9ydChhbkltcG9ydCk7Ci0gICAgICAKLSAgICAgIEVsZW1lbnQgZGVmaW5pdGlvbkRvY3VtZW50YXRpb25FbGVtZW50ID0gZGVmaW5pdGlvbi5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpOwotICAgICAgYXNzZXJ0Tm90TnVsbChkZWZpbml0aW9uRG9jdW1lbnRhdGlvbkVsZW1lbnQpOwotICAgICAgRWxlbWVudCBleHBlY3RlZEltcG9ydEVsZW1lbnQgPSBnZXROZXh0RWxlbWVudChkZWZpbml0aW9uRG9jdW1lbnRhdGlvbkVsZW1lbnQpOwotICAgICAgRWxlbWVudCBpbXBvcnRFbGVtZW50ID0gYW5JbXBvcnQuZ2V0RWxlbWVudCgpOwotICAgICAgYXNzZXJ0RXF1YWxzKGltcG9ydEVsZW1lbnQsIGV4cGVjdGVkSW1wb3J0RWxlbWVudCk7Ci0gICAgICAKLSAgICAgIC8vIFRoaXMgaXMgYSBiaXQgb3ZlcmtpbGwgc2luY2UgdGhlIGRvY3VtZW50YXRpb24gZWxlbWVudHMgYXJlIGhhbmRsZWQgaW4gdGhlIGJhc2UgY2xhc3MgV1NETEVsZW1lbnRJbXBsIGJ1dC4uLgotICAgICAgCi0gICAgICAvLyBNYWtlIHN1cmUgbmV3IG1lc3NhZ2UgcGFydHMgYXJlIGFkZGVkIGFmdGVyIHRoZSBkb2N1bWVudGF0aW9uIGVsZW1lbnQgYW5kIGFzIHRoZSBsYXN0IGVsZW1lbnQuCi0KLSAgICAgIE1lc3NhZ2UgYU1lc3NhZ2UgPSAoTWVzc2FnZSlkZWZpbml0aW9uLmdldEVNZXNzYWdlcygpLmdldCgwKTsKLSAgICAgIFBhcnQgbmV3UGFydCA9IGZhY3RvcnkuY3JlYXRlUGFydCgpOwotICAgICAgYU1lc3NhZ2UuYWRkUGFydChuZXdQYXJ0KTsKLQotICAgICAgRWxlbWVudCBtZXNzYWdlRWxlbWVudCA9IGFNZXNzYWdlLmdldEVsZW1lbnQoKTsKLQotICAgICAgRWxlbWVudCBtZXNzYWdlRG9jdW1lbnRhdGlvbkVsZW1lbnQgPSBhTWVzc2FnZS5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpOwotICAgICAgYXNzZXJ0Tm90TnVsbChtZXNzYWdlRG9jdW1lbnRhdGlvbkVsZW1lbnQpOwotICAgICAgRWxlbWVudCBmaXJzdENoaWxkRWxlbWVudCA9IGdldEZpcnN0Q2hpbGRFbGVtZW50KG1lc3NhZ2VFbGVtZW50KTsKLSAgICAgIGFzc2VydEVxdWFscyhtZXNzYWdlRG9jdW1lbnRhdGlvbkVsZW1lbnQsIGZpcnN0Q2hpbGRFbGVtZW50KTsKLSAgICAgIAotICAgICAgRWxlbWVudCBwYXJ0RWxlbWVudCA9IG5ld1BhcnQuZ2V0RWxlbWVudCgpOwotICAgICAgRWxlbWVudCBsYXN0Q2hpbGRFbGVtZW50ID0gZ2V0TGFzdENoaWxkRWxlbWVudChtZXNzYWdlRWxlbWVudCk7Ci0gICAgICBhc3NlcnRFcXVhbHMocGFydEVsZW1lbnQsIGxhc3RDaGlsZEVsZW1lbnQpOwotICAgICAgCi0gICAgICAvLyBNYWtlIHN1cmUgbmV3IG9wZXJhdGlvbnMgYXJlIGFkZGVkIGFmdGVyIHRoZSBkb2N1bWVudGF0aW9uIGVsZW1lbnQgYW5kIGFzIHRoZSBsYXN0IGVsZW1lbnQuCi0KLSAgICAgIFBvcnRUeXBlIHBvcnRUeXBlID0gKFBvcnRUeXBlKWRlZmluaXRpb24uZ2V0RVBvcnRUeXBlcygpLmdldCgwKTsKLSAgICAgIE9wZXJhdGlvbiBuZXdPcGVyYXRpb24gPSBmYWN0b3J5LmNyZWF0ZU9wZXJhdGlvbigpOwotICAgICAgcG9ydFR5cGUuYWRkT3BlcmF0aW9uKG5ld09wZXJhdGlvbik7Ci0gICAgICAKLSAgICAgIEVsZW1lbnQgcG9ydFR5cGVFbGVtZW50ID0gcG9ydFR5cGUuZ2V0RWxlbWVudCgpOwotCi0gICAgICBFbGVtZW50IHBvcnRUeXBlRG9jdW1lbnRhdGlvbkVsZW1lbnQgPSBwb3J0VHlwZS5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpOwotICAgICAgYXNzZXJ0Tm90TnVsbChwb3J0VHlwZURvY3VtZW50YXRpb25FbGVtZW50KTsKLSAgICAgIGZpcnN0Q2hpbGRFbGVtZW50ID0gZ2V0Rmlyc3RDaGlsZEVsZW1lbnQocG9ydFR5cGVFbGVtZW50KTsKLSAgICAgIGFzc2VydEVxdWFscyhwb3J0VHlwZURvY3VtZW50YXRpb25FbGVtZW50LCBmaXJzdENoaWxkRWxlbWVudCk7Ci0gICAgICAKLSAgICAgIEVsZW1lbnQgbmV3T3BlcmF0aW9uRWxlbWVudCA9IG5ld09wZXJhdGlvbi5nZXRFbGVtZW50KCk7Ci0gICAgICBsYXN0Q2hpbGRFbGVtZW50ID0gZ2V0TGFzdENoaWxkRWxlbWVudChwb3J0VHlwZUVsZW1lbnQpOwotICAgICAgYXNzZXJ0RXF1YWxzKG5ld09wZXJhdGlvbkVsZW1lbnQsIGxhc3RDaGlsZEVsZW1lbnQpOwotICAgICAgCi0gICAgICAvLyBNYWtlIHN1cmUgdGhlIG91dHB1dCBlbGVtZW50IGlzIGFkZGVkIGFmdGVyIHRoZSBkb2N1bWVudGF0aW9uIGVsZW1lbnQgYW5kIGFzIHRoZSBsYXN0IGVsZW1lbnQuCi0gICAgICAKLSAgICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSAoT3BlcmF0aW9uKXBvcnRUeXBlLmdldEVPcGVyYXRpb25zKCkuZ2V0KDApOwotICAgICAgT3V0cHV0IG91dHB1dCA9IGZhY3RvcnkuY3JlYXRlT3V0cHV0KCk7Ci0gICAgICBvcGVyYXRpb24uc2V0T3V0cHV0KG91dHB1dCk7Ci0KLSAgICAgIEVsZW1lbnQgb3BlcmF0aW9uRWxlbWVudCA9IG9wZXJhdGlvbi5nZXRFbGVtZW50KCk7Ci0KLSAgICAgIEVsZW1lbnQgb3BlcmF0aW9uRG9jdW1lbnRhdGlvbkVsZW1lbnQgPSBvcGVyYXRpb24uZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKTsKLSAgICAgIGFzc2VydE5vdE51bGwob3BlcmF0aW9uRG9jdW1lbnRhdGlvbkVsZW1lbnQpOwotICAgICAgZmlyc3RDaGlsZEVsZW1lbnQgPSBnZXRGaXJzdENoaWxkRWxlbWVudChvcGVyYXRpb25FbGVtZW50KTsKLSAgICAgIGFzc2VydEVxdWFscyhvcGVyYXRpb25Eb2N1bWVudGF0aW9uRWxlbWVudCwgZmlyc3RDaGlsZEVsZW1lbnQpOwotICAgICAgCi0gICAgICBFbGVtZW50IG91dHB1dEVsZW1lbnQgPSBvdXRwdXQuZ2V0RWxlbWVudCgpOwotICAgICAgbGFzdENoaWxkRWxlbWVudCA9IGdldExhc3RDaGlsZEVsZW1lbnQob3BlcmF0aW9uRWxlbWVudCk7Ci0gICAgICBhc3NlcnRFcXVhbHMob3V0cHV0RWxlbWVudCwgbGFzdENoaWxkRWxlbWVudCk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBBc3NlcnQuZmFpbCgiVGVzdCBmYWlsZWQgZHVlIHRvIGFuIGV4Y2VwdGlvbjogIiArIGUuZ2V0TG9jYWxpemVkTWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIEVsZW1lbnQgZ2V0TmV4dEVsZW1lbnQoRWxlbWVudCBhbkVsZW1lbnQpCi0gIHsKLSAgICBOb2RlIG5vZGUgPSBhbkVsZW1lbnQuZ2V0TmV4dFNpYmxpbmcoKTsKLSAgICB3aGlsZSAobm9kZSAhPSBudWxsICYmIG5vZGUuZ2V0Tm9kZVR5cGUoKSAhPSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICB7Ci0gICAgICBub2RlID0gbm9kZS5nZXROZXh0U2libGluZygpOwotICAgIH0KLSAgICByZXR1cm4gKEVsZW1lbnQpbm9kZTsKLSAgfQotCi0gIHByaXZhdGUgRWxlbWVudCBnZXRGaXJzdENoaWxkRWxlbWVudChFbGVtZW50IGFuRWxlbWVudCkKLSAgewotICAgIE5vZGUgbm9kZSA9IGFuRWxlbWVudC5nZXRGaXJzdENoaWxkKCk7Ci0gICAgd2hpbGUgKG5vZGUgIT0gbnVsbCAmJiBub2RlLmdldE5vZGVUeXBlKCkgIT0gTm9kZS5FTEVNRU5UX05PREUpCi0gICAgewotICAgICAgbm9kZSA9IG5vZGUuZ2V0TmV4dFNpYmxpbmcoKTsKLSAgICB9Ci0gICAgcmV0dXJuIChFbGVtZW50KW5vZGU7Ci0gIH0KLQotICBwcml2YXRlIEVsZW1lbnQgZ2V0TGFzdENoaWxkRWxlbWVudChFbGVtZW50IGFuRWxlbWVudCkKLSAgewotICAgIE5vZGUgbm9kZSA9IGFuRWxlbWVudC5nZXRMYXN0Q2hpbGQoKTsKLSAgICB3aGlsZSAobm9kZSAhPSBudWxsICYmIG5vZGUuZ2V0Tm9kZVR5cGUoKSAhPSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICB7Ci0gICAgICBub2RlID0gbm9kZS5nZXRQcmV2aW91c1NpYmxpbmcoKTsKLSAgICB9Ci0gICAgcmV0dXJuIChFbGVtZW50KW5vZGU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9JbmxpbmVTY2hlbWFUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvSW5saW5lU2NoZW1hVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTdmNDFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9JbmxpbmVTY2hlbWFUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzOwotCi0KLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBqYXZheC53c2RsLnhtbC5XU0RMUmVhZGVyOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlR5cGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwud3NkbDRqLldTRExGYWN0b3J5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsLkRlZmluaXRpb25Mb2FkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNETW9kZWxHcm91cDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEUGFydGljbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFBhcnRpY2xlQ29udGVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTaW1wbGVUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEVHlwZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLnhtbC5zYXguSW5wdXRTb3VyY2U7Ci0KLQotLyoqCi0gKiBAYXV0aG9yIEtpaHVwIEJvbwotICovCi1wdWJsaWMgY2xhc3MgSW5saW5lU2NoZW1hVGVzdCBleHRlbmRzIFRlc3RDYXNlCi17Ci0gIHByaXZhdGUgU3RyaW5nIFBMVUdJTl9BQlNPTFVURV9QQVRIID0gV1NETFRlc3RzUGx1Z2luLmdldEluc3RhbGxVUkwoKTsKLQotICBwdWJsaWMgSW5saW5lU2NoZW1hVGVzdChTdHJpbmcgbmFtZSkKLSAgewotICAgIHN1cGVyKG5hbWUpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKLSAgewotICAgIGp1bml0LnRleHR1aS5UZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICBUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKCk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBJbmxpbmVTY2hlbWFUZXN0KCJJbmxpbmVTY2hlbWEiKQotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RJbmxpbmVTY2hlbWEoKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBJbmxpbmVTY2hlbWFUZXN0KCJJbmxpbmVTY2hlbWFXaXRoV1NETDRKIikKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0SW5saW5lU2NoZW1hV2l0aFdTREw0SigpOwotICAgICAgICB9Ci0gICAgICB9KTsKLQotICAgIHJldHVybiBzdWl0ZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbmxpbmVTY2hlbWEoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvTG9hZFN0b3JlQ29tcGFyZS9Mb2FkQW5kUHJpbnRUZXN0LndzZGwiKTsKLSAgICAgIHRyYXZlcnNlRGVmaW5pdGlvbihkZWZpbml0aW9uKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIEFzc2VydC5mYWlsKCJUZXN0IGZhaWxlZCBkdWUgdG8gYW4gZXhjZXB0aW9uOiAiICsgZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbmxpbmVTY2hlbWFXaXRoV1NETDRKKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IGxvYWREZWZpbml0aW9uRm9yV1NETDRKKCJzYW1wbGVzL0xvYWRTdG9yZUNvbXBhcmUvTG9hZEFuZFByaW50VGVzdC53c2RsIik7Ci0gICAgICB0cmF2ZXJzZURlZmluaXRpb24oZGVmaW5pdGlvbik7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBBc3NlcnQuZmFpbCgiVGVzdCBmYWlsZWQgZHVlIHRvIGFuIGV4Y2VwdGlvbjogIiArIGUuZ2V0TG9jYWxpemVkTWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0cmF2ZXJzZURlZmluaXRpb24oRGVmaW5pdGlvbiBkZWZpbml0aW9uKSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbChkZWZpbml0aW9uKTsKLQotICAgIEl0ZXJhdG9yIGl0ZXIgPSBkZWZpbml0aW9uLmdldEVJbXBvcnRzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgSW1wb3J0IG15SW1wb3J0ID0gKEltcG9ydClpdGVyLm5leHQoKTsKLSAgICAgIHRyYXZlcnNlSW1wb3J0KG15SW1wb3J0KTsKLSAgICB9Ci0KLSAgICAvLyBHZXQgSW5saW5lIFNjaGVtYQotICAgIFR5cGVzIHR5cGVzID0gKG9yZy5lY2xpcHNlLndzdC53c2RsLlR5cGVzKWRlZmluaXRpb24uZ2V0VHlwZXMoKTsKLSAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbCgiPHR5cGVzPiBpcyBudWxsIiwgdHlwZXMpOwotICAgIGlmICh0eXBlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gdHlwZXMuZ2V0U2NoZW1hcygpLml0ZXJhdG9yKCk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgiPHR5cGVzPiBkb2VzIG5vdCBoYXZlIGlubGluZSA8c2NoZW1hPnMiLCBpdGVyYXRvci5oYXNOZXh0KCkpOwotICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgWFNEU2NoZW1hIHNjaGVtYSA9IChYU0RTY2hlbWEpaXRlcmF0b3IubmV4dCgpOwotICAgICAgICB0cmF2ZXJzZVNjaGVtYShzY2hlbWEpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCB0cmF2ZXJzZUltcG9ydChJbXBvcnQgbXlJbXBvcnQpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIC8vICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG15SW1wb3J0LmdldEVEZWZpbml0aW9uKCk7Ci0gICAgLy8gICAgdHJhdmVyc2VEZWZpbml0aW9uKGRlZmluaXRpb24pOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlU2NoZW1hKFhTRFNjaGVtYSBzY2hlbWEpCi0gIHsKLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IHNjaGVtYS5nZXRFbGVtZW50RGVjbGFyYXRpb25zKCkuaXRlcmF0b3IoKTsKLSAgICBYU0RFbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudERlY2wgPSBudWxsOwotICAgIEFzc2VydC5hc3NlcnRUcnVlKCJObyA8ZWxlbWVudD5zIGFyZSBmb3VuZCIsIGl0ZXJhdG9yLmhhc05leHQoKSk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBlbGVtZW50RGVjbCA9IChYU0RFbGVtZW50RGVjbGFyYXRpb24paXRlcmF0b3IubmV4dCgpOwotCi0gICAgICBpZiAoZWxlbWVudERlY2wuZ2V0TmFtZSgpLmVxdWFscygiTmV3T3BlcmF0aW9uUmVzcG9uc2UiKSkKLSAgICAgICAgdHJhdmVyc2VFbGVtZW50RGVjbChlbGVtZW50RGVjbCk7Ci0gICAgICBlbHNlIGlmIChlbGVtZW50RGVjbC5nZXROYW1lKCkuZXF1YWxzKCJOZXdPcGVyYXRpb25SZXF1ZXN0IikpCi0gICAgICAgIHRyYXZlcnNlRWxlbWVudERlY2woZWxlbWVudERlY2wpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCB0cmF2ZXJzZUVsZW1lbnREZWNsKFhTREVsZW1lbnREZWNsYXJhdGlvbiBlbGVtZW50RGVjbCkKLSAgewotICAgIFhTRFR5cGVEZWZpbml0aW9uIHR5cGUgPSBlbGVtZW50RGVjbC5nZXRUeXBlRGVmaW5pdGlvbigpOwotICAgIEFzc2VydC5hc3NlcnRUcnVlKCI8ZWxlbWVudD4gZG9lcyBub3QgaGF2ZSA8c2ltcGxlVHlwZT4iLCB0eXBlIGluc3RhbmNlb2YgWFNEU2ltcGxlVHlwZURlZmluaXRpb24pOwotICAgIGlmICh0eXBlLmdldENvbXBsZXhUeXBlKCkgPT0gbnVsbCkgLy8gc2ltcGxlIHR5cGUKLSAgICAgIHJldHVybjsgLy8gVEJEIC0gQ3VycmVudGx5IHRoaXMgYWx3YXlzIHJldHVybnMgYXQgdGhpcyBwb2ludC4KLSAgICBYU0RQYXJ0aWNsZUNvbnRlbnQgY29udGVudCA9IHR5cGUuZ2V0Q29tcGxleFR5cGUoKS5nZXRDb250ZW50KCk7Ci0gICAgdHJhdmVyc2VNb2RlbEdyb3VwKChYU0RNb2RlbEdyb3VwKWNvbnRlbnQpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHRyYXZlcnNlTW9kZWxHcm91cChYU0RNb2RlbEdyb3VwIG1vZGVsR3JvdXApCi0gIHsKLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IG1vZGVsR3JvdXAuZ2V0Q29udGVudHMoKS5pdGVyYXRvcigpOwotICAgIFhTRFBhcnRpY2xlQ29udGVudCBwYXJ0aWNsZUNvbnRlbnQgPSBudWxsOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgcGFydGljbGVDb250ZW50ID0gKChYU0RQYXJ0aWNsZSlpdGVyYXRvci5uZXh0KCkpLmdldENvbnRlbnQoKTsKLSAgICAgIGlmIChwYXJ0aWNsZUNvbnRlbnQgaW5zdGFuY2VvZiBYU0RFbGVtZW50RGVjbGFyYXRpb24pCi0gICAgICB7Ci0gICAgICAgIGlmICgoKFhTREVsZW1lbnREZWNsYXJhdGlvbilwYXJ0aWNsZUNvbnRlbnQpLmlzRWxlbWVudERlY2xhcmF0aW9uUmVmZXJlbmNlKCkpCi0gICAgICAgICAgdHJhdmVyc2VFbGVtZW50RGVjbCgoKFhTREVsZW1lbnREZWNsYXJhdGlvbilwYXJ0aWNsZUNvbnRlbnQpLmdldFJlc29sdmVkRWxlbWVudERlY2xhcmF0aW9uKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgdHJhdmVyc2VFbGVtZW50RGVjbCgoWFNERWxlbWVudERlY2xhcmF0aW9uKXBhcnRpY2xlQ29udGVudCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBEZWZpbml0aW9uIGxvYWREZWZpbml0aW9uRm9yV1NETDRKKFN0cmluZyB3c2RsRmlsZSkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgV1NETFJlYWRlciByZWFkZXIgPSAobmV3IFdTRExGYWN0b3J5SW1wbCgpKS5uZXdXU0RMUmVhZGVyKCk7Ci0gICAgU3RyaW5nIHMgPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIHdzZGxGaWxlOwotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IChvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uKXJlYWRlci5yZWFkV1NETChzLCBuZXcgSW5wdXRTb3VyY2UobmV3IEZpbGVJbnB1dFN0cmVhbShzKSkpOwotICAgIHJldHVybiBkZWZpbml0aW9uOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvTG9hZEFuZFNlcmlhbGl6YXRpb25UZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvTG9hZEFuZFNlcmlhbGl6YXRpb25UZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxMjdkZWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL0xvYWRBbmRTZXJpYWxpemF0aW9uVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHM7Ci0KLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVGaWx0ZXI7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRGVmaW5pdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudXRpbC5EZWZpbml0aW9uTG9hZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWwuWE1MRGlmZjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExSZXNvdXJjZUltcGw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIEBhdXRob3IgS2lodXAgQm9vCi0gKi8KLXB1YmxpYyBjbGFzcyBMb2FkQW5kU2VyaWFsaXphdGlvblRlc3QgZXh0ZW5kcyBUZXN0Q2FzZQotewotICBwcml2YXRlIFN0cmluZyBQTFVHSU5fQUJTT0xVVEVfUEFUSCA9IFdTRExUZXN0c1BsdWdpbi5nZXRJbnN0YWxsVVJMKCk7Ci0KLSAgcHJpdmF0ZSBWZWN0b3Igd3NkbEZpbGVzID0gbmV3IFZlY3RvcigpOwotCi0gIHN0YXRpYyBwcml2YXRlIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIEV4ZWN1dGVzIGEgc3RhbmQtYWxvbmUgdGVzdC4KLSAgICogQHBhcmFtIG9iamVjdHMgYW4gYXJyYXkgb2YgU3RyaW5ncyBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCi0gICAqIEBzZWUgI3J1bgotICAgKi8KLSAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkKLSAgewotICAgIGp1bml0LnRleHR1aS5UZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKLSAgfQotCi0gIHB1YmxpYyBMb2FkQW5kU2VyaWFsaXphdGlvblRlc3QoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihuYW1lKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICBUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKCk7Ci0gICAgc3VpdGUuYWRkVGVzdChuZXcgTG9hZEFuZFNlcmlhbGl6YXRpb25UZXN0KCJMb2FkQW5kU3RvcmUiKQotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RMb2FkQW5kU3RvcmUoKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgc3VpdGUuYWRkVGVzdCAvLyB3dHAgYnVnIDc5MzI2Ci0gICAgKG5ldyBMb2FkQW5kU2VyaWFsaXphdGlvblRlc3QoIkNvbXBhcmUiKQotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RDb21wYXJlKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgIHJldHVybiBzdWl0ZTsKLSAgfQotCi0gIC8qKgotICAgKiBMb2FkIGZyb20gdGhlIFdTREwgZGVmaW5pdGlvbnMgZmlsZSBhbmQgc3RvcmUgYmFjayB0byBhIGRpZmZlcmVudCBmaWxlLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdExvYWRBbmRTdG9yZSgpCi0gIHsKLSAgICBTdHJpbmcgVEVTVF9EQVRBX0RJUiA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgidGVzdERhdGFEaXIiKTsKLSAgICAvL0Fzc2VydC5hc3NlcnROb3ROdWxsKHRlc3REYXRhRGlyKTsKLSAgICBGaWxlIGRpciA9IG51bGw7Ci0gICAgaWYgKFRFU1RfREFUQV9ESVIgIT0gbnVsbCkKLSAgICAgIGRpciA9IG5ldyBGaWxlKFRFU1RfREFUQV9ESVIpOwotICAgIGVsc2UKLSAgICAgIC8vIEtCOiBpZiB5b3UgYXJlIGhlcmUsIGZpeCB0ZXh0LnhtbAotICAgICAgZGlyID0gbmV3IEZpbGUoUExVR0lOX0FCU09MVVRFX1BBVEggKyAic2FtcGxlcy9Mb2FkU3RvcmVDb21wYXJlIik7IC8vIGZhbGxiYWNrCi0KLSAgICBpZiAoZGlyLmV4aXN0cygpICYmIGRpci5pc0RpcmVjdG9yeSgpKQotICAgIHsKLSAgICAgIGxpc3REYXRhRmlsZXMoZGlyKTsKLQotICAgICAgdHJ5Ci0gICAgICB7Ci0gICAgICAgIEZpbGUgbXlGaWxlID0gbnVsbDsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3c2RsRmlsZXMuc2l6ZSgpOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBteUZpbGUgPSAoRmlsZSl3c2RsRmlsZXMuZWxlbWVudEF0KGkpOwotICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihteUZpbGUudG9VUkwoKS50b1N0cmluZygpKTsKLSAgICAgICAgICBsb2FkKG15RmlsZS50b1N0cmluZygpKTsKLSAgICAgICAgICBwcmludChteUZpbGUudG9TdHJpbmcoKSArICIub3V0Iik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgQXNzZXJ0LmZhaWwoIlRlc3QgZmFpbGVkIGR1ZSB0byBhbiBleGNlcHRpb246ICIgKyBlLmdldExvY2FsaXplZE1lc3NhZ2UoKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIGZhaWwoZGlyLnRvU3RyaW5nKCkpOwotCi0gIH0KLQotICBwcml2YXRlIHZvaWQgbGlzdERhdGFGaWxlcyhGaWxlIHNyYykKLSAgewotICAgIGlmICghc3JjLmlzRGlyZWN0b3J5KCkpCi0gICAgICByZXR1cm47IC8vIEFzc2VydGlvbiBmYWlsZWQKLQotICAgIGZpbHRlcldTRExGaWxlcyhzcmMpOyAvLyBBZGQgV1NETCBmaWxlcyBpbiB0aGUgc3JjIGRpcmVjdG9yeQotCi0gICAgRmlsZVtdIGNoaWxkcmVuID0gc3JjLmxpc3RGaWxlcygpOwotICAgIEZpbGUgbXlGaWxlOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgbXlGaWxlID0gY2hpbGRyZW5baV07Ci0gICAgICBpZiAobXlGaWxlLmlzRGlyZWN0b3J5KCkpCi0gICAgICB7Ci0gICAgICAgIGlmICgiQ1ZTIi5lcXVhbHMobXlGaWxlLmdldE5hbWUoKSkpCi0gICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgbGlzdERhdGFGaWxlcyhteUZpbGUpOyAvLyBWaXNpdCBzdWItZGlyZWN0b3JpZXMgcmVjdXJzaXZlbHkKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgZmlsdGVyV1NETEZpbGVzKEZpbGUgZGlyKQotICB7Ci0gICAgRmlsZVtdIHdzZGxzID0gZGlyLmxpc3RGaWxlcyhuZXcgRmlsZUZpbHRlcigpCi0gICAgICB7Ci0gICAgICAgIHB1YmxpYyBib29sZWFuIGFjY2VwdChGaWxlIHBhdGhuYW1lKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIHBhdGhuYW1lLmdldE5hbWUoKS5lbmRzV2l0aCgiLndzZGwiKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICBmb3IgKGludCBqID0gMDsgaiA8IHdzZGxzLmxlbmd0aDsgaisrKQotICAgIHsKLSAgICAgIHdzZGxGaWxlcy5hZGQod3NkbHNbal0pOwotICAgIH0KLSAgfQotCi0gIC8qCi0gICAqIExvYWQgZnJvbSB0aGUgV1NETCBkZWZpbml0aW9ucyBmaWxlLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGxvYWQoU3RyaW5nIGZpbGVuYW1lKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChmaWxlbmFtZSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbChkZWZpbml0aW9uKTsKLSAgICAgIEFzc2VydC5hc3NlcnRUcnVlKGRlZmluaXRpb24uZVJlc291cmNlKCkgaW5zdGFuY2VvZiBXU0RMUmVzb3VyY2VJbXBsKTsKLQotICAgICAgV1NETFJlc291cmNlSW1wbCB3c2RsUmVzb3VyY2UgPSAoV1NETFJlc291cmNlSW1wbClkZWZpbml0aW9uLmVSZXNvdXJjZSgpOwotICAgICAgQXNzZXJ0LmFzc2VydE5vdE51bGwod3NkbFJlc291cmNlKTsKLQotICAgICAgRWxlbWVudCBlbGVtZW50ID0gZGVmaW5pdGlvbi5nZXRFbGVtZW50KCk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbChkZWZpbml0aW9uLmdldEVsZW1lbnQoKSk7Ci0KLSAgICAgIFdTRExSZXNvdXJjZUltcGwuc2VyaWFsaXplKFN5c3RlbS5vdXQsIGVsZW1lbnQpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgQXNzZXJ0LmZhaWwoIlRlc3QgZmFpbGVkIGR1ZSB0byBhbiBleGNlcHRpb246ICIgKyBlLmdldExvY2FsaXplZE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci0KLSAgLyoKLSAgICogU3RvcmUgdGhlIFdTREwgZGVmaW5pdGlvbnMgdG8gYSBmaWxlLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHByaW50KFN0cmluZyBmaWxlbmFtZSkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIC8vIFRoaXMgcmVtb3ZlcyB0aGUgYXNzb2NpYXRlZCBET00gZWxlbWVudCwgY3JlYXRlcyBhIG5ldyBhc3NvY2lhdGVkIERPTSBlbGVtZW50LCBhbmQgdGhlbiBwcmludHMgaXQuCi0gICAgICAvLyBUaGlzIGlzIGEgZ29vZCB0ZXN0IGZvciBob3cgd2VsbCBzZXJpYWxpemF0aW9uIHdvcmtzIGZvciBhIG1vZGVsIGNyZWF0ZWQgImJvdHRvbSB1cCIuCi0gICAgICAvLwotICAgICAgZGVmaW5pdGlvbi5zZXREb2N1bWVudChudWxsKTsKLSAgICAgIGRlZmluaXRpb24uc2V0RWxlbWVudChudWxsKTsKLSAgICAgICgoRGVmaW5pdGlvbkltcGwpZGVmaW5pdGlvbikudXBkYXRlRWxlbWVudCgpOwotCi0gICAgICBEZWZpbml0aW9uTG9hZGVyLnN0b3JlKGRlZmluaXRpb24sIGZpbGVuYW1lKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIEFzc2VydC5mYWlsKCJUZXN0IGZhaWxlZCBkdWUgdG8gYW4gZXhjZXB0aW9uOiAiICsgZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBDb21wYXJlIHRoZSBvdXRwdXQgV1NETCBmaWxlIHRvIHRoZSBvcmlnaW5hbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RDb21wYXJlKCkKLSAgewotICAgIFhNTERpZmYgeG1sZGlmZiA9IG5ldyBYTUxEaWZmKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRmlsZSBteUZpbGUgPSBudWxsOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3c2RsRmlsZXMuc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgIG15RmlsZSA9IChGaWxlKXdzZGxGaWxlcy5lbGVtZW50QXQoaSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKHhtbGRpZmYuZGlmZihteUZpbGUudG9TdHJpbmcoKSwgbXlGaWxlLnRvU3RyaW5nKCkgKyAiLm91dCIpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIEFzc2VydC5mYWlsKCJUZXN0IGZhaWxlZCBkdWUgdG8gYW4gZXhjZXB0aW9uOiAiICsgZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL0xvY2F0aW9uVHJhY2tpbmdUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvTG9jYXRpb25UcmFja2luZ1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2UyNDBiYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvTG9jYXRpb25UcmFja2luZ1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudXRpbC5EZWZpbml0aW9uTG9hZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETFBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExSZXNvdXJjZUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC51dGlsLlhTRFBhcnNlcjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogVGVzdCBjbGFzcyB1c2VkIHRvIHZhbGlkYXRlIHRoZSBXU0RMIG1vZGVsIHNvdXJjZSBsb2NhdGlvbiB0cmFja2luZwotICogbWVjaGFuaXNtLgotICovCi1wdWJsaWMgY2xhc3MgTG9jYXRpb25UcmFja2luZ1Rlc3QgZXh0ZW5kcyBUZXN0Q2FzZQotewotCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICBUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKCk7Ci0gICAgc3VpdGUuYWRkVGVzdChuZXcgTG9jYXRpb25UcmFja2luZ1Rlc3QoKQotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RUcmFja3NMb2NhdGlvbigpOwotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICByZXR1cm4gc3VpdGU7Ci0gIH0KLQotICAvKioKLSAgICogVGVzdHMgdGhlIGxvY2F0aW9uIHRyYWNraW5nIG1lY2hhbmlzbSBwcm92aWRlZCBieSB0aGUgV1NETCBtb2RlbCByZXNvdXJjZQotICAgKiBsb2FkZXIuCi0gICAqIAotICAgKiBAc2VlIFdTRExSZXNvdXJjZUltcGwKLSAgICogQHNlZSBXU0RMUGFyc2VyCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VHJhY2tzTG9jYXRpb24oKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgU3RyaW5nIGZpbGVOYW1lID0gV1NETFRlc3RzUGx1Z2luLmdldEluc3RhbGxVUkwoKSArICIvc2FtcGxlcy9Mb2FkU3RvcmVDb21wYXJlL0xvYWRBbmRQcmludFRlc3Qud3NkbCI7IC8vJE5PTi1OTFMtMSQKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChmaWxlTmFtZSwgdHJ1ZSwgdHJ1ZSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbChkZWZpbml0aW9uKTsKLSAgICAgIEFzc2VydC5hc3NlcnRUcnVlKGRlZmluaXRpb24uZVJlc291cmNlKCkgaW5zdGFuY2VvZiBXU0RMUmVzb3VyY2VJbXBsKTsKLQotICAgICAgRWxlbWVudCBkZWZpbml0aW9uRWxlbWVudCA9IGRlZmluaXRpb24uZ2V0RWxlbWVudCgpOwotICAgICAgYXNzZXJ0RXF1YWxzKDEsIFdTRExQYXJzZXIuZ2V0U3RhcnRMaW5lKGRlZmluaXRpb25FbGVtZW50KSk7Ci0KLSAgICAgIFR5cGVzIHR5cGVzID0gZGVmaW5pdGlvbi5nZXRFVHlwZXMoKTsKLSAgICAgIEVsZW1lbnQgdHlwZXNFbGVtZW50ID0gdHlwZXMuZ2V0RWxlbWVudCgpOwotICAgICAgYXNzZXJ0RXF1YWxzKDQsIFdTRExQYXJzZXIuZ2V0U3RhcnRMaW5lKHR5cGVzRWxlbWVudCkpOwotCi0gICAgICBMaXN0IHR5cGVzRXh0ZW5zaWJpbGl0eUVsZW1lbnRzID0gdHlwZXMuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotCi0gICAgICBhc3NlcnRFcXVhbHMoMSwgdHlwZXNFeHRlbnNpYmlsaXR5RWxlbWVudHMuc2l6ZSgpKTsKLQotICAgICAgWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQgc2NoZW1hRXh0ZW5zaW9uID0gKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KXR5cGVzRXh0ZW5zaWJpbGl0eUVsZW1lbnRzLmdldCgwKTsKLQotICAgICAgWFNEU2NoZW1hIHNjaGVtYSA9IHNjaGVtYUV4dGVuc2lvbi5nZXRTY2hlbWEoKTsKLQotICAgICAgRWxlbWVudCBzY2hlbWFFbGVtZW50ID0gc2NoZW1hLmdldEVsZW1lbnQoKTsKLQotICAgICAgYXNzZXJ0RXF1YWxzKDUsIFhTRFBhcnNlci5nZXRTdGFydExpbmUoc2NoZW1hRWxlbWVudCkpOwotCi0gICAgICBYU0RFbGVtZW50RGVjbGFyYXRpb24gcmVxdWVzdEVsZW1lbnREZWNsYXJhdGlvbiA9IHNjaGVtYS5yZXNvbHZlRWxlbWVudERlY2xhcmF0aW9uKCJOZXdPcGVyYXRpb25SZXF1ZXN0Iik7IC8vJE5PTi1OTFMtMSQKLQotICAgICAgRWxlbWVudCByZXF1ZXN0RWxlbWVudCA9IHJlcXVlc3RFbGVtZW50RGVjbGFyYXRpb24uZ2V0RWxlbWVudCgpOwotCi0gICAgICBhc3NlcnRFcXVhbHMoNywgWFNEUGFyc2VyLmdldFN0YXJ0TGluZShyZXF1ZXN0RWxlbWVudCkpOwotCi0gICAgICBMaXN0IHNlcnZpY2VzID0gZGVmaW5pdGlvbi5nZXRFU2VydmljZXMoKTsKLSAgICAgIGFzc2VydEVxdWFscygxLCBzZXJ2aWNlcy5zaXplKCkpOwotICAgICAgU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2Upc2VydmljZXMuZ2V0KDApOwotCi0gICAgICBFbGVtZW50IHNlcnZpY2VFbGVtZW50ID0gc2VydmljZS5nZXRFbGVtZW50KCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoNDIsIFdTRExQYXJzZXIuZ2V0U3RhcnRMaW5lKHNlcnZpY2VFbGVtZW50KSk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBBc3NlcnQuZmFpbCgiVGVzdCBmYWlsZWQgZHVlIHRvIGFuIGV4Y2VwdGlvbjogIiArIGUuZ2V0TG9jYWxpemVkTWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9NeVJlc29sdmVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvTXlSZXNvbHZlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTk3NGQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9NeVJlc29sdmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzOwotCi0KLWltcG9ydCBvcmcueG1sLnNheC5FbnRpdHlSZXNvbHZlcjsKLWltcG9ydCBvcmcueG1sLnNheC5JbnB1dFNvdXJjZTsKLQotCi1wdWJsaWMgY2xhc3MgTXlSZXNvbHZlciBpbXBsZW1lbnRzIEVudGl0eVJlc29sdmVyCi17Ci0gIHB1YmxpYyBJbnB1dFNvdXJjZSByZXNvbHZlRW50aXR5KFN0cmluZyBwdWJsaWNJZCwgU3RyaW5nIHN5c3RlbUlkKQotICB7Ci0gICAgaWYgKHN5c3RlbUlkLmVxdWFscygiaHR0cDovL3d3dy5teWhvc3QuY29tL3RvZGF5IikpCi0gICAgewotICAgICAgLy8gcmV0dXJuIGEgc3BlY2lhbCBpbnB1dCBzb3VyY2UKLSAgICAgIC8vTXlSZWFkZXIgcmVhZGVyID0gbmV3IE15UmVhZGVyKCk7Ci0gICAgICAvL3JldHVybiBuZXcgSW5wdXRTb3VyY2UocmVhZGVyKTsKLSAgICAgIHJldHVybiBuZXcgSW5wdXRTb3VyY2Uoc3lzdGVtSWQpOyAvLyBUQkQKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8vIHVzZSB0aGUgZGVmYXVsdCBiZWhhdmlvdXIKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL1BhcnNlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9QYXJzZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2N2Y4NGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL1BhcnNlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHM7Ci0KLQotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXI7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcueG1sLnNheC5FbnRpdHlSZXNvbHZlcjsKLQotCi1wdWJsaWMgY2xhc3MgUGFyc2VyVGVzdCBleHRlbmRzIFRlc3RDYXNlCi17Ci0KLSAgcHVibGljIFBhcnNlclRlc3QoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihuYW1lKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICBUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKCk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBQYXJzZXJUZXN0KCJQYXJzZXIiKQotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RQYXJzZXIoKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICByZXR1cm4gc3VpdGU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0UGFyc2VyKCkKLSAgewotICAgIEVudGl0eVJlc29sdmVyIG15UmVzb2x2ZXIgPSBuZXcgTXlSZXNvbHZlcigpOwotICAgIHRyeQotICAgIHsKLSAgICAgIElucHV0U3RyZWFtIGlzID0gbmV3IEZpbGVJbnB1dFN0cmVhbSgiLi9zYW1wbGVzL0xvYWRBbmRQcmludFRlc3Qud3NkbCIpOwotICAgICAgRG9jdW1lbnRCdWlsZGVyIG15QnVpbGRlciA9IERvY3VtZW50QnVpbGRlckZhY3RvcnkubmV3SW5zdGFuY2UoKS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKLSAgICAgIG15QnVpbGRlci5zZXRFbnRpdHlSZXNvbHZlcihteVJlc29sdmVyKTsKLSAgICAgIERvY3VtZW50IGRvYyA9IG15QnVpbGRlci5wYXJzZShpcyk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbCgiRG9jdW1lbnQgaXMgbnVsbCIsIGRvYyk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBBc3NlcnQuZmFpbCgiVGVzdCBmYWlsZWQgZHVlIHRvIGFuIGV4Y2VwdGlvbjogIiArIGUuZ2V0TG9jYWxpemVkTWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQotICB7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL1JlZmFjdG9yaW5nVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL1JlZmFjdG9yaW5nVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTc5NDFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9SZWZhY3RvcmluZ1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzOwotCi0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwudXRpbC5TT0FQQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50czsKLQotCi1wdWJsaWMgY2xhc3MgUmVmYWN0b3JpbmdUZXN0IGV4dGVuZHMgVGVzdENhc2UKLXsKLSAgcHVibGljIFJlZmFjdG9yaW5nVGVzdCgpCi0gIHsKLSAgfQotCi0gIHB1YmxpYyBSZWZhY3RvcmluZ1Rlc3QoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihuYW1lKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICBUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKCk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBSZWZhY3RvcmluZ1Rlc3QoIlJlZmFjdG9yaW5nIikKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0UmVmYWN0b3JpbmcoKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICByZXR1cm4gc3VpdGU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0UmVmYWN0b3JpbmcoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgLy8gQmVmb3JlIHJ1bm5pbmcgdGhpcyB0ZXN0LCBtb2RpZnkgdGhlIGxvY2F0aW9uIG9mIHRoZSBnZW5lcmF0ZWQgV1NETCBmaWxlCi0gICAgICBnZW5lcmF0ZVdTREwoV1NETFRlc3RzUGx1Z2luLmdldEluc3RhbGxVUkwoKSArInNhbXBsZXMvZ2VuZXJhdGVkL1JlZmFjdG9yaW5nVGVzdC53c2RsIik7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBBc3NlcnQuZmFpbCgiVGVzdCBmYWlsZWQgZHVlIHRvIGFuIGV4Y2VwdGlvbjogIiArIGUuZ2V0TG9jYWxpemVkTWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLQotICAvLyBkZWZlY3QgNjU5NAotICBwdWJsaWMgdm9pZCByZW5hbWVPcGVyYXRpb24oT3BlcmF0aW9uIG9wKQotICB7Ci0gICAgSW5wdXQgaW5wdXQgPSBvcC5nZXRFSW5wdXQoKTsKLSAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbChpbnB1dCk7Ci0gICAgTWVzc2FnZSBtZXNzYWdlID0gaW5wdXQuZ2V0RU1lc3NhZ2UoKTsKLSAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbChtZXNzYWdlKTsKLQotICAgIG9wLnNldE5hbWUoIlJlbmFtZWQiICsgb3AuZ2V0TmFtZSgpKTsKLSAgICBRTmFtZSBuZXdRTmFtZSA9IG5ldyBRTmFtZShtZXNzYWdlLmdldFFOYW1lKCkuZ2V0TmFtZXNwYWNlVVJJKCksICJSZW5hbWVkIiArIG1lc3NhZ2UuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKSk7Ci0gICAgbWVzc2FnZS5zZXRRTmFtZShuZXdRTmFtZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBnZW5lcmF0ZVdTREwoU3RyaW5nIG91dHB1dEZpbGUpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIFJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOwotICAgIFJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuY3JlYXRlUmVzb3VyY2UoVVJJLmNyZWF0ZUZpbGVVUkkob3V0cHV0RmlsZSkpOwotICAgIHJlc291cmNlU2V0LmdldFJlc291cmNlcygpLmFkZChyZXNvdXJjZSk7Ci0KLSAgICAvLyBDcmVhdGUgYSBEZWZpbml0aW9uIC0gVGVtcGVyYXR1cmUKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRGVmaW5pdGlvbigpOwotICAgIGRlZmluaXRpb24uc2V0UU5hbWUobmV3IFFOYW1lKFdTRExDb25zdGFudHMuV1NETF9OQU1FU1BBQ0VfVVJJLCAiVGVtcGVyYXR1cmUiKSk7Ci0gICAgcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5hZGQoZGVmaW5pdGlvbik7Ci0KLSAgICAvLyBUYXJnZXQgbmFtZXNwYWNlIC0gaHR0cDovL3d3dy50ZW1wZXJhdHVyZS5jb20KLSAgICBkZWZpbml0aW9uLnNldFRhcmdldE5hbWVzcGFjZSgiaHR0cDovL3d3dy50ZW1wZXJhdHVyZS5jb20iKTsKLSAgICBkZWZpbml0aW9uLmFkZE5hbWVzcGFjZSgidG5zIiwgImh0dHA6Ly93d3cudGVtcGVyYXR1cmUuY29tIik7Ci0KLSAgICAvLyBPdGhlciBuYW1lc3BhY2VzIC0gd3NkbCwgc29hcCwgeHNkCi0gICAgZGVmaW5pdGlvbi5hZGROYW1lc3BhY2UoIndzZGwiLCBXU0RMQ29uc3RhbnRzLldTRExfTkFNRVNQQUNFX1VSSSk7Ci0gICAgZGVmaW5pdGlvbi5hZGROYW1lc3BhY2UoInhzZCIsIFdTRExDb25zdGFudHMuU0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzIwMDEpOwotICAgIGRlZmluaXRpb24uYWRkTmFtZXNwYWNlKCJzb2FwIiwgU09BUENvbnN0YW50cy5TT0FQX05BTUVTUEFDRV9VUkkpOwotCi0gICAgLy8KLSAgICAvLyBMZXQncyBzdGFydCBidWlsZGluZyB0d28gbWVzc2FnZXMKLSAgICAvLwotCi0gICAgLy8gQ3JlYXRlIGEgUGFydCAtIFppcENvZGUKLSAgICBQYXJ0IHBhcnQgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUGFydCgpOwotICAgIHBhcnQuc2V0TmFtZSgiWmlwQ29kZSIpOwotICAgIHBhcnQuc2V0VHlwZU5hbWUobmV3IFFOYW1lKFdTRExDb25zdGFudHMuU0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzIwMDEsICJzdHJpbmciKSk7Ci0KLSAgICAvLyBDcmVhdGUgYSBNZXNzYWdlIC0gR2V0VGVtcGVyYXR1cmVJbnB1dAotICAgIE1lc3NhZ2UgaW5wdXRNZXNzYWdlID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU1lc3NhZ2UoKTsKLSAgICBpbnB1dE1lc3NhZ2Uuc2V0UU5hbWUobmV3IFFOYW1lKGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCksICJHZXRUZW1wZXJhdHVyZUlucHV0IikpOwotICAgIGlucHV0TWVzc2FnZS5hZGRQYXJ0KHBhcnQpOwotICAgIGRlZmluaXRpb24uYWRkTWVzc2FnZShpbnB1dE1lc3NhZ2UpOwotCi0gICAgLy8gQ3JlYXRlIGEgUGFydCAtIFRlbXBlcmF0dXJlCi0gICAgcGFydCA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVQYXJ0KCk7Ci0gICAgcGFydC5zZXROYW1lKCJUZW1wZXJhdHVyZSIpOwotICAgIHBhcnQuc2V0VHlwZU5hbWUobmV3IFFOYW1lKFdTRExDb25zdGFudHMuU0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzIwMDEsICJmbG9hdCIpKTsKLQotICAgIC8vIENyZWF0ZSBhIE1lc3NhZ2UgLSBHZXRUZW1wZXJhdHVyZU91dHB1dAotICAgIE1lc3NhZ2Ugb3V0cHV0TWVzc2FnZSA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVNZXNzYWdlKCk7Ci0gICAgb3V0cHV0TWVzc2FnZS5zZXRRTmFtZShuZXcgUU5hbWUoZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKSwgIkdldFRlbXBlcmF0dXJlT3V0cHV0IikpOwotICAgIG91dHB1dE1lc3NhZ2UuYWRkUGFydChwYXJ0KTsKLSAgICBkZWZpbml0aW9uLmFkZE1lc3NhZ2Uob3V0cHV0TWVzc2FnZSk7Ci0KLSAgICAvLwotICAgIC8vIE5leHQsIGJ1aWxkIGEgUG9ydFR5cGUKLSAgICAvLwotCi0gICAgLy8gQ3JlYXRlIGFuIElucHV0IC0gR2V0VGVtcGVyYXR1cmVJbnB1dAotICAgIElucHV0IGlucHV0ID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUlucHV0KCk7Ci0gICAgaW5wdXQuc2V0TWVzc2FnZShpbnB1dE1lc3NhZ2UpOwotCi0gICAgLy8gQ3JlYXRlIGFuIE91dHB1dCAtIEdldFRlbXBlcmF0dXJlT3V0cHV0Ci0gICAgT3V0cHV0IG91dHB1dCA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVPdXRwdXQoKTsKLSAgICBvdXRwdXQuc2V0TWVzc2FnZShvdXRwdXRNZXNzYWdlKTsKLQotICAgIC8vIENyZWF0ZSBhbiBPcGVyYXRpb24gLSBHZXRUZW1wZXJhdHVyZUZvclppcENvZGUKLSAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU9wZXJhdGlvbigpOwotICAgIG9wZXJhdGlvbi5zZXROYW1lKCJHZXRUZW1wZXJhdHVyZUZvclppcENvZGUiKTsKLSAgICBvcGVyYXRpb24uc2V0SW5wdXQoaW5wdXQpOwotICAgIG9wZXJhdGlvbi5zZXRPdXRwdXQob3V0cHV0KTsKLQotICAgIC8vIENyZWF0ZSBhIFBvcnRUeXBlCi0gICAgUG9ydFR5cGUgcG9ydFR5cGUgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUG9ydFR5cGUoKTsKLSAgICBwb3J0VHlwZS5zZXRRTmFtZShuZXcgUU5hbWUoZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKSwgIkdldFRlbXBlcmF0dXJlSW5mb1NPQVAiKSk7Ci0gICAgcG9ydFR5cGUuYWRkT3BlcmF0aW9uKG9wZXJhdGlvbik7Ci0gICAgZGVmaW5pdGlvbi5hZGRQb3J0VHlwZShwb3J0VHlwZSk7Ci0KLSAgICAvLwotICAgIC8vIENyZWF0ZSB0aGUgc2Vjb25kIHNldCBvcCBPcGVyYXRpb25zCi0gICAgLy8KLQotICAgIC8vIENyZWF0ZSBhIFBhcnQKLSAgICBwYXJ0ID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVBhcnQoKTsKLSAgICBwYXJ0LnNldE5hbWUoIlBhcnQyIik7Ci0gICAgcGFydC5zZXRUeXBlTmFtZShuZXcgUU5hbWUoV1NETENvbnN0YW50cy5TQ0hFTUFfRk9SX1NDSEVNQV9VUklfMjAwMSwgInN0cmluZyIpKTsKLQotICAgIC8vIENyZWF0ZSBhIE1lc3NhZ2UKLSAgICBNZXNzYWdlIGlucHV0TWVzc2FnZTIgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTWVzc2FnZSgpOwotICAgIGlucHV0TWVzc2FnZTIuc2V0UU5hbWUobmV3IFFOYW1lKGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCksICJJbnB1dE1lc3NhZ2UyIikpOwotICAgIGlucHV0TWVzc2FnZTIuYWRkUGFydChwYXJ0KTsKLSAgICBkZWZpbml0aW9uLmFkZE1lc3NhZ2UoaW5wdXRNZXNzYWdlMik7Ci0KLSAgICAvLyBDcmVhdGUgYSBQYXJ0Ci0gICAgcGFydCA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVQYXJ0KCk7Ci0gICAgcGFydC5zZXROYW1lKCJQYXJ0MyIpOwotICAgIHBhcnQuc2V0VHlwZU5hbWUobmV3IFFOYW1lKFdTRExDb25zdGFudHMuU0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzIwMDEsICJmbG9hdCIpKTsKLQotICAgIC8vIENyZWF0ZSBhIE1lc3NhZ2UgLSBHZXRUZW1wZXJhdHVyZU91dHB1dAotICAgIE1lc3NhZ2Ugb3V0cHV0TWVzc2FnZTIgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTWVzc2FnZSgpOwotICAgIG91dHB1dE1lc3NhZ2UyLnNldFFOYW1lKG5ldyBRTmFtZShkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpLCAiT3V0cHV0TWVzc2FnZTIiKSk7Ci0gICAgb3V0cHV0TWVzc2FnZTIuYWRkUGFydChwYXJ0KTsKLSAgICBkZWZpbml0aW9uLmFkZE1lc3NhZ2Uob3V0cHV0TWVzc2FnZTIpOwotCi0gICAgLy8gQ3JlYXRlIGFuIElucHV0Ci0gICAgSW5wdXQgaW5wdXQyID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUlucHV0KCk7Ci0gICAgaW5wdXQyLnNldE1lc3NhZ2UoaW5wdXRNZXNzYWdlMik7Ci0KLSAgICAvLyBDcmVhdGUgYW4gT3V0cHV0IC0gR2V0VGVtcGVyYXR1cmVPdXRwdXQKLSAgICBPdXRwdXQgb3V0cHV0MiA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVPdXRwdXQoKTsKLSAgICBvdXRwdXQyLnNldE1lc3NhZ2Uob3V0cHV0TWVzc2FnZTIpOwotCi0gICAgLy8gQ3JlYXRlIGFuIE9wZXJhdGlvbiAtIEdldFRlbXBlcmF0dXJlRm9yWmlwQ29kZQotICAgIE9wZXJhdGlvbiBvcGVyYXRpb24yID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU9wZXJhdGlvbigpOwotICAgIG9wZXJhdGlvbjIuc2V0TmFtZSgiT3BlcmF0aW9uMiIpOwotICAgIG9wZXJhdGlvbjIuc2V0SW5wdXQoaW5wdXQyKTsKLSAgICBvcGVyYXRpb24yLnNldE91dHB1dChvdXRwdXQyKTsKLQotICAgIHBvcnRUeXBlLmFkZE9wZXJhdGlvbihvcGVyYXRpb24yKTsKLQotICAgIHJlbmFtZU9wZXJhdGlvbihvcGVyYXRpb24pOwotICAgIHJlbmFtZU9wZXJhdGlvbihvcGVyYXRpb24yKTsKLQotICAgIHJlc291cmNlLnNhdmUobnVsbCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9TZW1hbnRpY1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9TZW1hbnRpY1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYzNWM3Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvU2VtYW50aWNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0ODYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0czsKLQotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb25UeXBlOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdGYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJsZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk91dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5UeXBlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEFkZHJlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBCaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQm9keTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUE9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsLkRlZmluaXRpb25Mb2FkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudXRpbC5EZWZpbml0aW9uVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiBAYXV0aG9yIEtpaHVwIEJvbwotICovCi1wdWJsaWMgY2xhc3MgU2VtYW50aWNUZXN0IGV4dGVuZHMgRGVmaW5pdGlvblZpc2l0b3IKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgUExVR0lOX0FCU09MVVRFX1BBVEggPSBXU0RMVGVzdHNQbHVnaW4uZ2V0SW5zdGFsbFVSTCgpOwotCi0gIC8vIEFkZGVkIGZvciBKVW5pdAotICBwdWJsaWMgU2VtYW50aWNUZXN0KFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIobmFtZSk7Ci0gIH0KLQotICAvKioKLSAgICogQHBhcmFtIGRlZmluaXRpb24KLSAgICovCi0gIHB1YmxpYyBTZW1hbnRpY1Rlc3QoRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICB7Ci0gICAgc3VwZXIoZGVmaW5pdGlvbik7Ci0gIH0KLQotICAvKiAgCi0gICBwcml2YXRlIHZvaWQgc2VyaWFsaXplKFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIEV4Y2VwdGlvbgotICAgewotICAgU291cmNlIGRvbVNvdXJjZSA9IG5ldyBET01Tb3VyY2UoZG9jKTsKLSAgIFRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyID0gVHJhbnNmb3JtZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3VHJhbnNmb3JtZXIoKTsKLSAgIHRyYW5zZm9ybWVyLnNldE91dHB1dFByb3BlcnR5KE91dHB1dEtleXMuSU5ERU5ULCJ5ZXMiKTsKLSAgIHRyYW5zZm9ybWVyLnNldE91dHB1dFByb3BlcnR5KE91dHB1dEtleXMuRU5DT0RJTkcsIlVURi04Iik7Ci0gICB0cmFuc2Zvcm1lci5zZXRPdXRwdXRQcm9wZXJ0eSgie2h0dHA6Ly94bWwuYXBhY2hlLm9yZy94c2x0fWluZGVudC1hbW91bnQiLCI0Iik7Ci0gICB0cmFuc2Zvcm1lci50cmFuc2Zvcm0oZG9tU291cmNlLG5ldyBTdHJlYW1SZXN1bHQobmV3IEZpbGVPdXRwdXRTdHJlYW0oZmlsZW5hbWUpKSk7Ci0gICB9Ci0gICAKLSAgIHByaXZhdGUgdm9pZCBjcmVhdGVEb2N1bWVudCgpIHRocm93cyBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uCi0gICB7Ci0gICBkb2MgPSBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3RG9jdW1lbnRCdWlsZGVyKCkubmV3RG9jdW1lbnQoKTsKLSAgIH0KLSAgIAotICAgcHJpdmF0ZSBFbGVtZW50IGNyZWF0ZVdTRExFbGVtZW50KFN0cmluZyBuYW1lKQotICAgewotICAgRWxlbWVudCBlbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwNC8wOC93c2RsIixuYW1lKTsKLSAgIGlmICh3c2RsTmFtZXNwYWNlUHJlZml4ICE9IG51bGwpCi0gICBlbGVtZW50LnNldFByZWZpeCh3c2RsTmFtZXNwYWNlUHJlZml4KTsKLSAgIAotICAgcmV0dXJuIGVsZW1lbnQ7Ci0gICB9Ci0gICAqLwotICBwcml2YXRlIHZvaWQgdmlzaXREb2N1bWVudGF0aW9uKEVsZW1lbnQgZG9jRWxlbWVudCkKLSAgewotICAgIGlmIChkb2NFbGVtZW50ID09IG51bGwpCi0gICAgICByZXR1cm47Ci0gICAgcHJpbnRsbigiZG9jdW1lbnRhdGlvbjogIiArIGRvY0VsZW1lbnQpOyAvLyBUQkQgLSBzZXJpYWxpemUgZG9jRWxlbWVudAotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHByaW50bG4oU3RyaW5nIHMpCi0gIHsKLSAgICBTeXN0ZW0ub3V0LnByaW50bG4ocyk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdERlZmluaXRpb24oRGVmaW5pdGlvbiBkZWYpCi0gIHsKLSAgICBwcmludGxuKCJWaXNpdGluZyBkZWZpbml0aW9ucy4uLiIpOwotICAgIHZpc2l0RG9jdW1lbnRhdGlvbihkZWYuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0KLSAgICBRTmFtZSBxbmFtZSA9IGRlZi5nZXRRTmFtZSgpOwotICAgIGlmIChxbmFtZSAhPSBudWxsKQotICAgICAgcHJpbnRsbigibmFtZTogIiArIHFuYW1lLmdldExvY2FsUGFydCgpKTsKLQotICAgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSBkZWYuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgaWYgKHRhcmdldE5hbWVzcGFjZSAhPSBudWxsKQotICAgICAgcHJpbnRsbigidGFyZ2V0TmFtZXNwYWNlOiAiICsgdGFyZ2V0TmFtZXNwYWNlKTsKLQotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gZGVmLmdldE5hbWVzcGFjZXMoKS5rZXlTZXQoKS5pdGVyYXRvcigpOwotICAgIFN0cmluZyBwcmVmaXggPSBudWxsOwotICAgIFN0cmluZyBuYW1lc3BhY2UgPSBudWxsOwotCi0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBwcmVmaXggPSAoU3RyaW5nKWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIG5hbWVzcGFjZSA9IGRlZi5nZXROYW1lc3BhY2UocHJlZml4KTsKLSAgICAgIHByaW50bG4oIm5hbWVzcGFjZSBwcmVmaXg6ICIgKyBwcmVmaXggKyAiLCBuYW1lc3BhY2UgVVJJOiAiICsgbmFtZXNwYWNlKTsKLSAgICB9Ci0gICAgc3VwZXIudmlzaXREZWZpbml0aW9uKGRlZik7Ci0gICAgcHJpbnRsbigiTGVhdmluZyBkZWZpbml0aW9ucy4uLiIpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWwuRGVmaW5pdGlvblZpc2l0b3IjdmlzaXRJbXBvcnQob3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0KQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRJbXBvcnQoSW1wb3J0IHdzZGxJbXBvcnQpCi0gIHsKLSAgICBwcmludGxuKCJWaXNpdGluZyBpbXBvcnQuLi4iKTsKLSAgICAvLyBEZXRlcm1pbmUgaWYgd2UgPGltcG9ydD4gYSBzY2hlbWEuCi0gICAgaWYgKGltcG9ydGluZ1NjaGVtYSh3c2RsSW1wb3J0KSkKLSAgICB7Ci0gICAgICBwcmludGxuKCI8aW1wb3J0PmluZyBYTUwgU2NoZW1hIik7Ci0KLSAgICAgIC8vICA8eHM6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL2Zvby5jb20iIHNjaGVtYUxvY2F0aW9uPSAiYmFyLnhzZCIvPgotICAgICAgcHJpbnRsbigibmFtZXNwYWNlOiAiICsgd3NkbEltcG9ydC5nZXROYW1lc3BhY2VVUkkoKSk7Ci0gICAgICBwcmludGxuKCJzY2hlbWFMb2NhdGlvbjogIiArIHdzZGxJbXBvcnQuZ2V0TG9jYXRpb25VUkkoKSk7Ci0gICAgICB2aXNpdERvY3VtZW50YXRpb24od3NkbEltcG9ydC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHByaW50bG4oIjxpbXBvcnQ+aW5nIFdTREwiKTsKLSAgICAgIHZpc2l0RG9jdW1lbnRhdGlvbih3c2RsSW1wb3J0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotICAgIH0KLSAgICBwcmludGxuKCJMZWF2aW5nIGltcG9ydC4uLiIpOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGltcG9ydGluZ1NjaGVtYShJbXBvcnQgbXlJbXBvcnQpCi0gIHsKLSAgICBpZiAobXlJbXBvcnQuZ2V0RGVmaW5pdGlvbigpICE9IG51bGwpIC8vIGl0IGlzIFdTREwgaW1wb3J0Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudXRpbC5EZWZpbml0aW9uVmlzaXRvciN2aXNpdFR5cGVzKG9yZy5lY2xpcHNlLndzdC53c2RsLlR5cGVzKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRUeXBlcyhUeXBlcyB0eXBlcykKLSAgewotICAgIHByaW50bG4oIlZpc2l0aW5nIHR5cGVzLi4uIik7Ci0KLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IHR5cGVzLmdldFNjaGVtYXMoKS5pdGVyYXRvcigpOwotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBudWxsOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgc2NoZW1hID0gKFhTRFNjaGVtYSlpdGVyYXRvci5uZXh0KCk7Ci0gICAgICBwcmludGxuKCJpbi1saW5lIHNjaGVtYTogIiArIHNjaGVtYSk7Ci0gICAgfQotICAgIHByaW50bG4oIkxlYXZpbmcgdHlwZXMuLi4iKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsLkRlZmluaXRpb25WaXNpdG9yI3Zpc2l0UGFydChvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0KQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRQYXJ0KFBhcnQgcGFydCkKLSAgewotICAgIHByaW50bG4oIlZpc2l0aW5nIHBhcnQuLi4iKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0UG9ydFR5cGUoUG9ydFR5cGUgcG9ydFR5cGUpCi0gIHsKLSAgICBwcmludGxuKCJWaXNpdGluZyBwb3J0VHlwZS4uLiIpOwotICAgIHZpc2l0RG9jdW1lbnRhdGlvbihwb3J0VHlwZS5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLQotICAgIFFOYW1lIHFuYW1lID0gcG9ydFR5cGUuZ2V0UU5hbWUoKTsKLSAgICBpZiAocW5hbWUgIT0gbnVsbCkKLSAgICAgIHByaW50bG4oIm5hbWU6ICIgKyBxbmFtZS5nZXRMb2NhbFBhcnQoKSk7Ci0KLSAgICBzdXBlci52aXNpdFBvcnRUeXBlKHBvcnRUeXBlKTsKLSAgICBwcmludGxuKCJMZWF2aW5nIHBvcnRUeXBlLi4uIik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdE9wZXJhdGlvbihPcGVyYXRpb24gb3BlcmF0aW9uKQotICB7Ci0gICAgcHJpbnRsbigiVmlzaXRpbmcgb3BlcmF0aW9uLi4uIik7Ci0gICAgdmlzaXREb2N1bWVudGF0aW9uKG9wZXJhdGlvbi5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLQotICAgIFN0cmluZyBuYW1lID0gb3BlcmF0aW9uLmdldE5hbWUoKTsKLSAgICBpZiAobmFtZSAhPSBudWxsKQotICAgICAgcHJpbnRsbigibmFtZTogIiArIG5hbWUpOwotCi0gICAgT3BlcmF0aW9uVHlwZSBvcFR5cGUgPSBvcGVyYXRpb24uZ2V0U3R5bGUoKTsKLSAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbCgiRmFpbGVkIGRldGVybWluaW5nIE9wZXJhdGlvbiBUeXBlIiwgb3BUeXBlKTsKLQotICAgIGlmIChPcGVyYXRpb25UeXBlLlJFUVVFU1RfUkVTUE9OU0UgPT0gb3BUeXBlKQotICAgICAgcHJpbnRsbigib3AgdHlwZTogIiArICJpbi1vdXQiKTsKLSAgICBlbHNlIGlmIChPcGVyYXRpb25UeXBlLlNPTElDSVRfUkVTUE9OU0UgPT0gb3BUeXBlKQotICAgICAgcHJpbnRsbigib3AgdHlwZSIgKyAib3V0LWluIik7Ci0gICAgZWxzZSBpZiAoT3BlcmF0aW9uVHlwZS5OT1RJRklDQVRJT04gPT0gb3BUeXBlKQotICAgICAgcHJpbnRsbigib3AgdHlwZSIgKyAib3V0LW9ubHkiKTsKLSAgICBlbHNlIGlmIChPcGVyYXRpb25UeXBlLk9ORV9XQVkgPT0gb3BUeXBlKQotICAgICAgcHJpbnRsbigib3AgdHlwZSIgKyAiaW4tb25seSIpOwotCi0gICAgc3VwZXIudmlzaXRPcGVyYXRpb24ob3BlcmF0aW9uKTsKLSAgICBwcmludGxuKCJMZWF2aW5nIG9wZXJhdGlvbi4uLiIpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWwuRGVmaW5pdGlvblZpc2l0b3IjdmlzaXRJbnB1dChvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0SW5wdXQoSW5wdXQgaW5wdXQpCi0gIHsKLSAgICBwcmludGxuKCJWaXNpdGluZyBpbnB1dC4uLiIpOwotICAgIHZpc2l0RG9jdW1lbnRhdGlvbihpbnB1dC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLQotICAgIFN0cmluZyBuYW1lID0gaW5wdXQuZ2V0TmFtZSgpOwotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgICBwcmludGxuKCJuYW1lOiAiICsgbmFtZSk7Ci0KLSAgICBNZXNzYWdlIG1lc3NhZ2UgPSBpbnB1dC5nZXRFTWVzc2FnZSgpOwotICAgIEFzc2VydC5hc3NlcnROb3ROdWxsKCJGYWlsZWQgdG8gcmVzb2x2ZSB0aGUgbWVzc2FnZSIsIG1lc3NhZ2UpOwotCi0gICAgcHJpbnRsbigiTGVhdmluZyBpbnB1dC4uLiIpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWwuRGVmaW5pdGlvblZpc2l0b3IjdmlzaXRPdXRwdXQob3JnLmVjbGlwc2Uud3N0LndzZGwuT3V0cHV0KQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRPdXRwdXQoT3V0cHV0IG91dHB1dCkKLSAgewotICAgIHByaW50bG4oIlZpc2l0aW5nIG91dHB1dC4uLiIpOwotICAgIHZpc2l0RG9jdW1lbnRhdGlvbihvdXRwdXQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0KLSAgICBTdHJpbmcgbmFtZSA9IG91dHB1dC5nZXROYW1lKCk7Ci0gICAgaWYgKG5hbWUgIT0gbnVsbCkKLSAgICAgIHByaW50bG4oIm5hbWU6ICIgKyBuYW1lKTsKLQotICAgIE1lc3NhZ2UgbWVzc2FnZSA9IG91dHB1dC5nZXRFTWVzc2FnZSgpOwotICAgIEFzc2VydC5hc3NlcnROb3ROdWxsKCJGYWlsZWQgdG8gcmVzb2x2ZSB0aGUgbWVzc2FnZSIsIG1lc3NhZ2UpOwotCi0gICAgcHJpbnRsbigiTGVhdmluZyBvdXRwdXQuLi4iKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsLkRlZmluaXRpb25WaXNpdG9yI3Zpc2l0RmF1bHQob3JnLmVjbGlwc2Uud3N0LndzZGwuRmF1bHQpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEZhdWx0KEZhdWx0IGZhdWx0KQotICB7Ci0gICAgcHJpbnRsbigiVmlzaXRpbmcgZmF1bHQuLi4iKTsKLSAgICBwcmludGxuKCJMZWF2aW5nIGZhdWx0Li4uIik7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudXRpbC5EZWZpbml0aW9uVmlzaXRvciN2aXNpdEJpbmRpbmcob3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZykKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0QmluZGluZyhCaW5kaW5nIGJpbmRpbmcpCi0gIHsKLSAgICBwcmludGxuKCJWaXNpdGluZyBiaW5kaW5nLi4uIik7Ci0gICAgdmlzaXREb2N1bWVudGF0aW9uKGJpbmRpbmcuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0KLSAgICBRTmFtZSBxbmFtZSA9IGJpbmRpbmcuZ2V0UU5hbWUoKTsKLSAgICBpZiAocW5hbWUgIT0gbnVsbCkKLSAgICAgIHByaW50bG4oIm5hbWU6ICIgKyBxbmFtZS5nZXRMb2NhbFBhcnQoKSk7Ci0KLSAgICBQb3J0VHlwZSBwb3J0VHlwZSA9IGJpbmRpbmcuZ2V0RVBvcnRUeXBlKCk7Ci0gICAgQXNzZXJ0LmFzc2VydE5vdE51bGwoIkZhaWxlZCB0byByZXNvbHZlIHRoZSBwb3J0VHlwZSIsIHBvcnRUeXBlKTsKLQotICAgIHN1cGVyLnZpc2l0QmluZGluZyhiaW5kaW5nKTsKLSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgiPHNvYXBCb2R5PiBpcyBtaXNzaW5nIiwgc29hcEJvZHlWaXNpdGVkKTsKLSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgiPHNvYXBCaW5kaW5nPiBpcyBtaXNzaW5nIiwgc29hcEJpbmRpbmdWaXNpdGVkKTsKLSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgiPHNvYXBPcGVyYXRpb24+IGlzIG1pc3NpbmciLCBzb2FwT3BlcmF0aW9uVmlzaXRlZCk7Ci0gICAgcHJpbnRsbigiTGVhdmluZyBiaW5kaW5nLi4uIik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEJpbmRpbmdPcGVyYXRpb24oQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uKQotICB7Ci0gICAgcHJpbnRsbigiVmlzaXRpbmcgYmluZGluZyBvcGVyYXRpb24uLi4iKTsKLSAgICB2aXNpdERvY3VtZW50YXRpb24oYmluZGluZ09wZXJhdGlvbi5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLQotICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSBiaW5kaW5nT3BlcmF0aW9uLmdldEVPcGVyYXRpb24oKTsKLSAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbCgiRmFpbGVkIHRvIHJlc29sdmUgdGhlIG9wZXJhdGlvbiIsIG9wZXJhdGlvbik7Ci0KLSAgICBpZiAob3BlcmF0aW9uICE9IG51bGwpCi0gICAgewotICAgICAgU3RyaW5nIG9wZXJhdGlvbk5hbWUgPSBvcGVyYXRpb24uZ2V0TmFtZSgpOwotICAgICAgcHJpbnRsbigibmFtZTogIiArIG9wZXJhdGlvbk5hbWUpOwotICAgIH0KLQotICAgIHN1cGVyLnZpc2l0QmluZGluZ09wZXJhdGlvbihiaW5kaW5nT3BlcmF0aW9uKTsKLSAgICBwcmludGxuKCJMZWF2aW5nIGJpbmRpbmcgb3BlcmF0aW9uLi4uIik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEJpbmRpbmdJbnB1dChCaW5kaW5nSW5wdXQgaW5wdXQpCi0gIHsKLSAgICBwcmludGxuKCJWaXNpdGluZyBiaW5kaW5nIGlucHV0Li4uIik7Ci0gICAgdmlzaXREb2N1bWVudGF0aW9uKGlucHV0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotCi0gICAgU3RyaW5nIGlucHV0TmFtZSA9IGlucHV0LmdldE5hbWUoKTsKLSAgICBpZiAoaW5wdXROYW1lICE9IG51bGwpCi0gICAgICBwcmludGxuKCJuYW1lOiAiICsgaW5wdXROYW1lKTsKLQotICAgIHN1cGVyLnZpc2l0QmluZGluZ0lucHV0KGlucHV0KTsKLSAgICBwcmludGxuKCJMZWF2aW5nIGJpbmRpbmcgaW5wdXQuLi4iKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0QmluZGluZ091dHB1dChCaW5kaW5nT3V0cHV0IG91dHB1dCkKLSAgewotICAgIHByaW50bG4oIlZpc2l0aW5nIGJpbmRpbmcgb3V0cHV0Li4uIik7Ci0gICAgdmlzaXREb2N1bWVudGF0aW9uKG91dHB1dC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLQotICAgIFN0cmluZyBvdXRwdXROYW1lID0gb3V0cHV0LmdldE5hbWUoKTsKLSAgICBpZiAob3V0cHV0TmFtZSAhPSBudWxsKQotICAgICAgcHJpbnRsbigibmFtZTogIiArIG91dHB1dE5hbWUpOwotCi0gICAgc3VwZXIudmlzaXRCaW5kaW5nT3V0cHV0KG91dHB1dCk7Ci0gICAgcHJpbnRsbigiTGVhdmluZyBiaW5kaW5nIG91dHB1dC4uLiIpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRCaW5kaW5nRmF1bHQoQmluZGluZ0ZhdWx0IGZhdWx0KQotICB7Ci0gICAgcHJpbnRsbigiVmlzaXRpbmcgYmluZGluZyBmYXVsdC4uLiIpOwotICAgIHZpc2l0RG9jdW1lbnRhdGlvbihmYXVsdC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLQotICAgIEVsZW1lbnQgZmF1bHRFbGVtZW50ID0gZmF1bHQuZ2V0RWxlbWVudCgpOwotICAgIFN0cmluZyBmYXVsdE5hbWUgPSBmYXVsdC5nZXROYW1lKCk7Ci0gICAgaWYgKGZhdWx0TmFtZSAhPSBudWxsKQotICAgICAgZmF1bHRFbGVtZW50LnNldEF0dHJpYnV0ZSgibmFtZSIsIGZhdWx0TmFtZSk7Ci0KLSAgICBzdXBlci52aXNpdEJpbmRpbmdGYXVsdChmYXVsdCk7Ci0gICAgcHJpbnRsbigiTGVhdmluZyBiaW5kaW5nIGZhdWx0Li4uIik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdFNlcnZpY2UoU2VydmljZSBzZXJ2aWNlKQotICB7Ci0gICAgcHJpbnRsbigiVmlzaXRpbmcgc2VydmljZS4uLiIpOwotICAgIHZpc2l0RG9jdW1lbnRhdGlvbihzZXJ2aWNlLmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotCi0gICAgUU5hbWUgcW5hbWUgPSBzZXJ2aWNlLmdldFFOYW1lKCk7Ci0gICAgQXNzZXJ0LmFzc2VydE5vdE51bGwoIlZhbGlkYXRpb24gRXJyb3I6IHNlcnZpY2UgaXMgbWlzc2luZyB0aGUgbmFtZSBhdHRyaWJ1dGUiLCBxbmFtZSk7Ci0gICAgaWYgKHFuYW1lICE9IG51bGwpCi0gICAgICBwcmludGxuKCJuYW1lOiAiICsgcW5hbWUuZ2V0TG9jYWxQYXJ0KCkpOwotCi0gICAgc3VwZXIudmlzaXRTZXJ2aWNlKHNlcnZpY2UpOwotICAgIHByaW50bG4oIkxlYXZpbmcgc2VydmljZS4uLiIpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWwuRGVmaW5pdGlvblZpc2l0b3IjdmlzaXRQb3J0KG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdFBvcnQoUG9ydCBwb3J0KQotICB7Ci0gICAgcHJpbnRsbigiVmlzaXRpbmcgcG9ydC4uLiIpOwotICAgIHZpc2l0RG9jdW1lbnRhdGlvbihwb3J0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotCi0gICAgU3RyaW5nIG5hbWUgPSBwb3J0LmdldE5hbWUoKTsKLSAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbCgiVmFsaWRhdGlvbiBFcnJvcjogcG9ydCBpcyBtaXNzaW5nIHRoZSBuYW1lIGF0dHJpYnV0ZSIsIHBvcnQpOwotICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgICBwcmludGxuKCJuYW1lOiAiICsgcG9ydC5nZXROYW1lKCkpOwotCi0gICAgQmluZGluZyBiaW5kaW5nID0gcG9ydC5nZXRFQmluZGluZygpOwotICAgIEFzc2VydC5hc3NlcnROb3ROdWxsKCJGYWlsZWQgdG8gcmVzb2x2ZSB0aGUgYmluZGluZyIsIGJpbmRpbmcpOwotCi0gICAgc3VwZXIudmlzaXRQb3J0KHBvcnQpOwotICAgIEFzc2VydC5hc3NlcnRUcnVlKCI8c29hcEFkZHJlc3M+IGlzIG1pc3NpbmciLCBzb2FwQWRkcmVzc1Zpc2l0ZWQpOwotICAgIHByaW50bG4oIkxlYXZpbmcgcG9ydC4uLiIpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWwuRGVmaW5pdGlvblZpc2l0b3IjdmlzaXRFeHRlbnNpYmlsaXR5RWxlbWVudChvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmxlRWxlbWVudCwgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEV4dGVuc2liaWxpdHlFbGVtZW50KEV4dGVuc2libGVFbGVtZW50IG93bmVyLCBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXR5RWxlbWVudCkKLSAgewotICAgIHByaW50bG4oIlZpc2l0aW5nIGV4dGVuc2liaWxpdHkgZWxlbWVudC4uLiIpOwotICAgIGlmIChleHRlbnNpYmlsaXR5RWxlbWVudCBpbnN0YW5jZW9mIFNPQVBCb2R5KQotICAgICAgdmlzaXRTT0FQQm9keSgoU09BUEJvZHkpZXh0ZW5zaWJpbGl0eUVsZW1lbnQpOwotICAgIGVsc2UgaWYgKGV4dGVuc2liaWxpdHlFbGVtZW50IGluc3RhbmNlb2YgU09BUEJpbmRpbmcpCi0gICAgICB2aXNpdFNPQVBCaW5kaW5nKChTT0FQQmluZGluZylleHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gICAgZWxzZSBpZiAoZXh0ZW5zaWJpbGl0eUVsZW1lbnQgaW5zdGFuY2VvZiBTT0FQQWRkcmVzcykKLSAgICAgIHZpc2l0U09BUEFkZHJlc3MoKFNPQVBBZGRyZXNzKWV4dGVuc2liaWxpdHlFbGVtZW50KTsKLSAgICBlbHNlIGlmIChleHRlbnNpYmlsaXR5RWxlbWVudCBpbnN0YW5jZW9mIFNPQVBPcGVyYXRpb24pCi0gICAgICB2aXNpdFNPQVBPcGVyYXRpb24oKFNPQVBPcGVyYXRpb24pZXh0ZW5zaWJpbGl0eUVsZW1lbnQpOwotICAgIHByaW50bG4oIkxlYXZpbmcgZXh0ZW5zaWJpbGl0eSBlbGVtZW50Li4uIik7Ci0gIH0KLQotICAvL05lZWRzIHRvIGltcHJvdmUgdGhpcyBwYXJ0Ci0gIHByaXZhdGUgYm9vbGVhbiBzb2FwT3BlcmF0aW9uVmlzaXRlZCA9IGZhbHNlOwotCi0gIHByaXZhdGUgdm9pZCB2aXNpdFNPQVBPcGVyYXRpb24oU09BUE9wZXJhdGlvbiBzb2FwT3BlcmF0aW9uKQotICB7Ci0gICAgc29hcE9wZXJhdGlvblZpc2l0ZWQgPSB0cnVlOwotICAgIHByaW50bG4oIlZpc2l0aW5nIFNPQVBPcGVyYXRpb24uLi4iKTsKLSAgICBwcmludGxuKCJzb2FwQWN0aW9uOiAiICsgc29hcE9wZXJhdGlvbi5nZXRTb2FwQWN0aW9uVVJJKCkpOwotICAgIHByaW50bG4oIkxlYXZpbmcgU09BUE9wZXJhdGlvbi4uLiIpOwotICB9Ci0KLSAgLy9OZWVkcyB0byBpbXByb3ZlIHRoaXMgcGFydAotICBwcml2YXRlIGJvb2xlYW4gc29hcEJvZHlWaXNpdGVkID0gZmFsc2U7Ci0KLSAgcHJpdmF0ZSB2b2lkIHZpc2l0U09BUEJvZHkoU09BUEJvZHkgc29hcEJvZHkpCi0gIHsKLSAgICBzb2FwQm9keVZpc2l0ZWQgPSB0cnVlOwotICAgIHByaW50bG4oIlZpc2l0aW5nIFNPQVBCb2R5Li4uIik7Ci0gICAgcHJpbnRsbigidXNlOiAiICsgc29hcEJvZHkuZ2V0VXNlKCkpOwotICAgIHByaW50bG4oIkxlYXZpbmcgU09BUEJvZHkuLi4iKTsKLSAgfQotCi0gIC8vTmVlZHMgdG8gaW1wcm92ZSB0aGlzIHBhcnQKLSAgcHJpdmF0ZSBib29sZWFuIHNvYXBCaW5kaW5nVmlzaXRlZCA9IGZhbHNlOwotCi0gIHByaXZhdGUgdm9pZCB2aXNpdFNPQVBCaW5kaW5nKFNPQVBCaW5kaW5nIHNvYXBCaW5kaW5nKQotICB7Ci0gICAgc29hcEJpbmRpbmdWaXNpdGVkID0gdHJ1ZTsKLSAgICBwcmludGxuKCJWaXNpdGluZyBTT0FQQmluZGluZy4uLiIpOwotICAgIHByaW50bG4oInN0eWxlOiAiICsgc29hcEJpbmRpbmcuZ2V0U3R5bGUoKSk7Ci0gICAgcHJpbnRsbigidHJhbnNwb3J0OiAiICsgc29hcEJpbmRpbmcuZ2V0VHJhbnNwb3J0VVJJKCkpOwotICAgIHByaW50bG4oIkxlYXZpbmcgU09BUEJpbmRpbmcuLi4iKTsKLSAgfQotCi0gIC8vIE5lZWRzIHRvIGltcHJvdmUgdGhpcyBwYXJ0Ci0gIHByaXZhdGUgYm9vbGVhbiBzb2FwQWRkcmVzc1Zpc2l0ZWQgPSBmYWxzZTsKLQotICBwcml2YXRlIHZvaWQgdmlzaXRTT0FQQWRkcmVzcyhTT0FQQWRkcmVzcyBzb2FwQWRkcmVzcykKLSAgewotICAgIHNvYXBBZGRyZXNzVmlzaXRlZCA9IHRydWU7Ci0gICAgcHJpbnRsbigiVmlzaXRpbmcgU09BUEFkZHJlc3MuLi4iKTsKLSAgICBwcmludGxuKCJsb2NhdGlvbjogIiArIHNvYXBBZGRyZXNzLmdldExvY2F0aW9uVVJJKCkpOwotICAgIHByaW50bG4oIkxlYXZpbmcgU09BUEFkZHJlc3MuLi4iKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICBUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKCk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBTZW1hbnRpY1Rlc3QoIk1vZGVsU2VtYW50aWNUZXN0IikKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0TW9kZWxTZW1hbnRpYygpOwotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICByZXR1cm4gc3VpdGU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0TW9kZWxTZW1hbnRpYygpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uIGRlZiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL0xvYWRTdG9yZUNvbXBhcmUvTG9hZEFuZFByaW50VGVzdC53c2RsIiwgdHJ1ZSk7Ci0gICAgICBTZW1hbnRpY1Rlc3QgdGVzdCA9IG5ldyBTZW1hbnRpY1Rlc3QoZGVmKTsKLSAgICAgIHRlc3QudmlzaXQoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIEFzc2VydC5mYWlsKGUudG9TdHJpbmcoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKLSAgewotICAgIGp1bml0LnRleHR1aS5UZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL1V0aWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvVXRpbFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODc3ODQ1NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvVXRpbFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzOwotCi0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETFBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEhlYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwudXRpbC5TT0FQQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLnV0aWwuV1NETFJlc291cmNlRmFjdG9yeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudXRpbC5EZWZpbml0aW9uTG9hZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5UmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudXRpbC5XU0RMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETFJlc291cmNlSW1wbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLXB1YmxpYyBjbGFzcyBVdGlsVGVzdCBleHRlbmRzIFRlc3RDYXNlCi17Ci0gIHByaXZhdGUgU3RyaW5nIFBMVUdJTl9BQlNPTFVURV9QQVRIID0gV1NETFRlc3RzUGx1Z2luLmdldEluc3RhbGxVUkwoKTsKLQotICBwdWJsaWMgVXRpbFRlc3QoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihuYW1lKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pCi0gIHsKLSAgICBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgVGVzdFN1aXRlIHN1aXRlID0gbmV3IFRlc3RTdWl0ZSgpOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgVXRpbFRlc3QoIldTRExDb25zdGFudHMiKQotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RDb25zdGFudHMoKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBVdGlsVGVzdCgiV1NETFJlc291cmNlRmFjdG9yeUltcGwiKQotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RXU0RMUmVzb3VyY2VGYWN0b3J5SW1wbCgpOwotICAgICAgICB9Ci0gICAgICB9KTsKLQotICAgIHN1aXRlLmFkZFRlc3QobmV3IFV0aWxUZXN0KCJXU0RMUmVzb3VyY2VJbXBsIikKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0V1NETFJlc291cmNlSW1wbCgpOwotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBVdGlsVGVzdCgiRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5IikKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0RXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5KCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgIHN1aXRlLmFkZFRlc3QobmV3IFV0aWxUZXN0KCJFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeSIpCi0gICAgICB7Ci0gICAgICAgIHByb3RlY3RlZCB2b2lkIHJ1blRlc3QoKQotICAgICAgICB7Ci0gICAgICAgICAgdGVzdEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5KCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgcmV0dXJuIHN1aXRlOwotICB9Ci0KLSAgc3RhdGljIHByaXZhdGUgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gbnVsbDsKLQotICBwdWJsaWMgdm9pZCB0ZXN0Q29uc3RhbnRzKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIGludCB0eXBlID0gV1NETENvbnN0YW50cy5ub2RlVHlwZShXU0RMQ29uc3RhbnRzLlBPUlRfRUxFTUVOVF9UQUcpOwotICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIk5vZGUgdHlwZSBpcyBub3QgdGhhdCBvZiBwb3J0IiwgdHlwZSA9PSAxMCk7Ci0KLSAgICAgIGRlZmluaXRpb24gPSBEZWZpbml0aW9uTG9hZGVyLmxvYWQoUExVR0lOX0FCU09MVVRFX1BBVEggKyAic2FtcGxlcy9Mb2FkU3RvcmVDb21wYXJlL0xvYWRBbmRQcmludFRlc3Qud3NkbCIpOwotICAgICAgQXNzZXJ0LmFzc2VydFRydWUoZGVmaW5pdGlvbi5lUmVzb3VyY2UoKSBpbnN0YW5jZW9mIFdTRExSZXNvdXJjZUltcGwpOwotCi0gICAgICBpbnQgZGVmaW5pdGlvbk5vZGVUeXBlID0gV1NETENvbnN0YW50cy5ub2RlVHlwZShkZWZpbml0aW9uLmdldEVsZW1lbnQoKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgiTm9kZSB0eXBlIGlzIG5vdCB0aGF0IG9mIGRlZmluaXRpb24iLCBkZWZpbml0aW9uTm9kZVR5cGUgPT0gMSk7Ci0KLSAgICAgIGJvb2xlYW4gaXNXU0RMTmFtZXNwYWNlID0gV1NETENvbnN0YW50cy5pc1dTRExOYW1lc3BhY2UoZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RmFsc2UoIlRoaXMgc2hvdWxkIG5vdCBiZSB0aGUgV1NETCBOYW1lc3BhY2UiLCBpc1dTRExOYW1lc3BhY2UpOwotCi0gICAgICBib29sZWFuIGlzTWF0Y2hpbmcgPSBXU0RMQ29uc3RhbnRzLmlzTWF0Y2hpbmdOYW1lc3BhY2UoImh0dHA6Ly93d3cuZXhhbXBsZS5vcmciLCAiaHR0cDovL3d3dy5leGFtcGxlLm9yZyIpOwotICAgICAgQXNzZXJ0LmFzc2VydFRydWUoImlzTWF0Y2hpbmdOYW1lc3BhY2UgaXMgaW5jb3JyZWN0IiwgaXNNYXRjaGluZyk7Ci0KLSAgICAgIFN0cmluZyBhdHRyID0gV1NETENvbnN0YW50cy5nZXRBdHRyaWJ1dGUoZGVmaW5pdGlvbi5nZXRFbGVtZW50KCksICJuYW1lIik7Ci0gICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgiZ2V0QXR0cmlidXRlIGlzIGluY29ycmVjdCIsIGF0dHIuZXF1YWxzKCJMb2FkQW5kUHJpbnRUZXN0IikpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgQXNzZXJ0LmZhaWwoIlRlc3QgZmFpbGVkIGR1ZSB0byBhbiBleGNlcHRpb246ICIgKyBlLmdldExvY2FsaXplZE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFdTRExSZXNvdXJjZUZhY3RvcnlJbXBsKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIFdTRExSZXNvdXJjZUZhY3RvcnlJbXBsIGZhY3RvcnlJbXBsID0gbmV3IFdTRExSZXNvdXJjZUZhY3RvcnlJbXBsKCk7Ci0gICAgICBSZXNvdXJjZSByZXNvdXJjZSA9IGZhY3RvcnlJbXBsLmNyZWF0ZVJlc291cmNlKFVSSS5jcmVhdGVGaWxlVVJJKCIuL3NhbXBsZXMvY3JlYXRlUmVzb3VyY2VUZXN0LndzZGwiKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgiUmVzb3VyY2UgaXMgbm90IG9mIHR5cGUgV1NETFJlc291cmNlSW1wbCIsIHJlc291cmNlIGluc3RhbmNlb2YgV1NETFJlc291cmNlSW1wbCk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBBc3NlcnQuZmFpbCgiVGVzdCBmYWlsZWQgZHVlIHRvIGFuIGV4Y2VwdGlvbjogIiArIGUuZ2V0TG9jYWxpemVkTWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0V1NETFJlc291cmNlSW1wbCgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBXU0RMUmVzb3VyY2VJbXBsIHJlc291cmNlSW1wbCA9IG5ldyBXU0RMUmVzb3VyY2VJbXBsKFVSSS5jcmVhdGVGaWxlVVJJKCIuL3NhbXBsZXMvY3JlYXRlUmVzb3VyY2VUZXN0LndzZGwiKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgiUmVzb3VyY2UgaXMgbm90IG9mIHR5cGUgV1NETFJlc291cmNlSW1wbCIsIHJlc291cmNlSW1wbCBpbnN0YW5jZW9mIFdTRExSZXNvdXJjZUltcGwpOwotCi0gICAgICBkZWZpbml0aW9uID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvTG9hZFN0b3JlQ29tcGFyZS9Mb2FkQW5kUHJpbnRUZXN0LndzZGwiKTsKLSAgICAgIEFzc2VydC5hc3NlcnRUcnVlKGRlZmluaXRpb24uZVJlc291cmNlKCkgaW5zdGFuY2VvZiBXU0RMUmVzb3VyY2VJbXBsKTsKLSAgICAgIEVsZW1lbnQgZWxlbWVudCA9IGRlZmluaXRpb24uZ2V0RWxlbWVudCgpOwotICAgICAgRG9jdW1lbnQgZG9jdW1lbnQgPSBkZWZpbml0aW9uLmdldERvY3VtZW50KCk7Ci0KLSAgICAgIGlmIChlbGVtZW50ICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIFdTRExSZXNvdXJjZUltcGwuc2VyaWFsaXplKFN5c3RlbS5vdXQsIGVsZW1lbnQsIG51bGwpOwotICAgICAgfQotCi0gICAgICBpZiAoZG9jdW1lbnQgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgV1NETFJlc291cmNlSW1wbC5zZXJpYWxpemUoU3lzdGVtLm91dCwgZG9jdW1lbnQsIG51bGwpOwotICAgICAgfQotCi0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgcmVzb3VyY2VJbXBsLmF0dGFjaGVkKGRlZmluaXRpb24pOwotICAgICAgfQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgewotCi0gICAgICB9Ci0KLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIEFzc2VydC5mYWlsKCJUZXN0IGZhaWxlZCBkdWUgdG8gYW4gZXhjZXB0aW9uOiAiICsgZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5IGZhY3RvcnkgPSBXU0RMUGx1Z2luLklOU1RBTkNFLmdldEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeShTT0FQQ29uc3RhbnRzLlNPQVBfTkFNRVNQQUNFX1VSSSk7Ci0gICAgICBpZiAoZmFjdG9yeSAhPSBudWxsKQotICAgICAgewotICAgICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBlZSA9IGZhY3RvcnkuY3JlYXRlRXh0ZW5zaWJpbGl0eUVsZW1lbnQoU09BUENvbnN0YW50cy5TT0FQX05BTUVTUEFDRV9VUkksIFNPQVBDb25zdGFudHMuSEVBREVSX0VMRU1FTlRfVEFHKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIlByb2JsZW0gY3JlYXRpbmcgU09BUCBleHRlbnNpYmlsaXR5IGVsZW1lbnQiLCBlZSBpbnN0YW5jZW9mIFNPQVBIZWFkZXIpOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgQXNzZXJ0LmZhaWwoIlRlc3QgZmFpbGVkIGR1ZSB0byBhbiBleGNlcHRpb246ICIgKyBlLmdldExvY2FsaXplZE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci0KLSAgY2xhc3MgVGVzdEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuZHMgRXh0ZW5zaWJpbGl0eUVsZW1lbnRJbXBsIGltcGxlbWVudHMgRXh0ZW5zaWJpbGl0eUVsZW1lbnQKLSAgewotICAgIFN0cmluZyBucywgbmFtZTsKLQotICAgIHB1YmxpYyBUZXN0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoU3RyaW5nIG5zLCBTdHJpbmcgbmFtZSkKLSAgICB7Ci0gICAgICBzdXBlcigpOwotICAgICAgdGhpcy5ucyA9IG5zOwotICAgICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgUU5hbWUgZ2V0RWxlbWVudFR5cGUoKQotICAgIHsKLSAgICAgIGlmIChlbGVtZW50VHlwZSA9PSBudWxsKQotICAgICAgewotICAgICAgICBlbGVtZW50VHlwZSA9IG5ldyBRTmFtZShucywgbmFtZSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gZWxlbWVudFR5cGU7Ci0gICAgfQotICB9Ci0KLSAgY2xhc3MgV1NETFRlc3RGYWN0b3J5IGltcGxlbWVudHMgRXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5Ci0gIHsKLSAgICBwdWJsaWMgV1NETFRlc3RGYWN0b3J5KCkKLSAgICB7Ci0gICAgfQotCi0gICAgcHVibGljIEV4dGVuc2liaWxpdHlFbGVtZW50IGNyZWF0ZUV4dGVuc2liaWxpdHlFbGVtZW50KFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBsb2NhbE5hbWUpCi0gICAgewotICAgICAgcmV0dXJuIG5ldyBUZXN0RXh0ZW5zaWJpbGl0eUVsZW1lbnQobmFtZXNwYWNlLCBsb2NhbE5hbWUpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeSgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnlSZWdpc3RyeSBmYWN0b3J5UmVnaXN0cnkgPSBXU0RMUGx1Z2luLklOU1RBTkNFLmdldEV4dGVuc2liaWxpdHlFbGVtZW50RmFjdG9yeVJlZ2lzdHJ5KCk7Ci0gICAgICBmYWN0b3J5UmVnaXN0cnkucmVnaXN0ZXJGYWN0b3J5KCJodHRwOi8vb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMiLCBuZXcgV1NETFRlc3RGYWN0b3J5KCkpOwotCi0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudEZhY3RvcnkgZmFjdG9yeSA9IFdTRExQbHVnaW4uSU5TVEFOQ0UuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRGYWN0b3J5KCJodHRwOi8vb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMiKTsKLSAgICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGVlID0gZmFjdG9yeS5jcmVhdGVFeHRlbnNpYmlsaXR5RWxlbWVudCgiaHR0cDovL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzIiwgIlRlc3RFbGVtZW50Iik7Ci0gICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgiMS4gUHJvYmxlbSBjcmVhdGluZyBjdXN0b20gVGVzdCBleHRlbnNpYmlsaXR5IGVsZW1lbnQiLCBlZSBpbnN0YW5jZW9mIFRlc3RFeHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgiMi4gUHJvYmxlbSBjcmVhdGluZyBjdXN0b20gVGVzdCBleHRlbnNpYmlsaXR5IGVsZW1lbnQiLCBlZS5nZXRFbGVtZW50VHlwZSgpLmdldExvY2FsUGFydCgpLmVxdWFscygiVGVzdEVsZW1lbnQiKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgiMy4gUHJvYmxlbSBjcmVhdGluZyBjdXN0b20gVGVzdCBleHRlbnNpYmlsaXR5IGVsZW1lbnQiLCBlZS5nZXRFbGVtZW50VHlwZSgpLmdldE5hbWVzcGFjZVVSSSgpLmVxdWFscygKLSAgICAgICAgImh0dHA6Ly9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cyIpKTsKLQotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgQXNzZXJ0LmZhaWwoIlRlc3QgZmFpbGVkIGR1ZSB0byBhbiBleGNlcHRpb246ICIgKyBlLmdldExvY2FsaXplZE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9XU0RMNEpBUElUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvV1NETDRKQVBJVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYWRhYzc1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9XU0RMNEpBUElUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzODcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0czsKLQotCi1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nOwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0ZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuRmF1bHQ7Ci1pbXBvcnQgamF2YXgud3NkbC5JbXBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5JbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgamF2YXgud3NkbC5PcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5QYXJ0OwotaW1wb3J0IGphdmF4LndzZGwuUG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBqYXZheC53c2RsLlR5cGVzOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQWRkcmVzczsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQm9keTsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuZmFjdG9yeS5XU0RMRmFjdG9yeTsKLWltcG9ydCBqYXZheC53c2RsLnhtbC5XU0RMUmVhZGVyOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5XU0RMUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWwuV1NETDRKRGVmaW5pdGlvblZpc2l0b3I7Ci1pbXBvcnQgb3JnLnhtbC5zYXguSW5wdXRTb3VyY2U7Ci0KLQotLyoqCi0gKiBAYXV0aG9yIEtpaHVwIEJvbwotICovCi1wdWJsaWMgY2xhc3MgV1NETDRKQVBJVGVzdCBleHRlbmRzIFdTREw0SkRlZmluaXRpb25WaXNpdG9yCi17Ci0gIHByaXZhdGUgc3RhdGljIFN0cmluZyBQTFVHSU5fQUJTT0xVVEVfUEFUSCA9IFdTRExUZXN0c1BsdWdpbi5nZXRJbnN0YWxsVVJMKCk7Ci0KLSAgcHJpdmF0ZSBXU0RMRmFjdG9yeSBmYWN0b3J5ID0gV1NETFBsdWdpbi5JTlNUQU5DRS5jcmVhdGVXU0RMNEpGYWN0b3J5KCk7Ci0KLSAgcHJpdmF0ZSBEZWZpbml0aW9uIG5ld0RlZmluaXRpb247Ci0KLSAgcHJpdmF0ZSBNZXNzYWdlIGN1cnJlbnRNZXNzYWdlOwotCi0gIHByaXZhdGUgU2VydmljZSBjdXJyZW50U2VydmljZTsKLQotICBwcml2YXRlIFBvcnRUeXBlIGN1cnJlbnRQb3J0VHlwZTsKLQotICBwcml2YXRlIE9wZXJhdGlvbiBjdXJyZW50T3BlcmF0aW9uOwotCi0gIHByaXZhdGUgQmluZGluZyBjdXJyZW50QmluZGluZzsKLQotICBwcml2YXRlIEJpbmRpbmdPcGVyYXRpb24gY3VycmVudEJpbmRpbmdPcGVyYXRpb247Ci0KLSAgLy8gQWRkZWQgZm9yIEpVbml0Ci0gIHB1YmxpYyBXU0RMNEpBUElUZXN0KFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIobmFtZSk7Ci0gIH0KLQotICAvKioKLSAgICogQHBhcmFtIGRlZmluaXRpb24KLSAgICovCi0gIHB1YmxpYyBXU0RMNEpBUElUZXN0KERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgIHN1cGVyKGRlZmluaXRpb24pOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHByaW50bG4oU3RyaW5nIHMpCi0gIHsKLSAgICBTeXN0ZW0ub3V0LnByaW50bG4ocyk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdERlZmluaXRpb24oRGVmaW5pdGlvbiBkZWYpCi0gIHsKLSAgICBuZXdEZWZpbml0aW9uID0gZmFjdG9yeS5uZXdEZWZpbml0aW9uKCk7Ci0gICAgbmV3RGVmaW5pdGlvbi5zZXREb2N1bWVudGF0aW9uRWxlbWVudChkZWYuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgbmV3RGVmaW5pdGlvbi5zZXRRTmFtZShkZWYuZ2V0UU5hbWUoKSk7Ci0gICAgbmV3RGVmaW5pdGlvbi5zZXRUYXJnZXROYW1lc3BhY2UoZGVmLmdldFRhcmdldE5hbWVzcGFjZSgpKTsKLSAgICBuZXdEZWZpbml0aW9uLnNldERvY3VtZW50QmFzZVVSSShkZWYuZ2V0RG9jdW1lbnRCYXNlVVJJKCkpOwotCi0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBkZWYuZ2V0TmFtZXNwYWNlcygpLmtleVNldCgpLml0ZXJhdG9yKCk7Ci0gICAgU3RyaW5nIHByZWZpeCA9IG51bGw7Ci0gICAgU3RyaW5nIG5hbWVzcGFjZSA9IG51bGw7Ci0KLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIHByZWZpeCA9IChTdHJpbmcpaXRlcmF0b3IubmV4dCgpOwotICAgICAgbmFtZXNwYWNlID0gZGVmLmdldE5hbWVzcGFjZShwcmVmaXgpOwotICAgICAgbmV3RGVmaW5pdGlvbi5hZGROYW1lc3BhY2UocHJlZml4LCBuYW1lc3BhY2UpOwotICAgIH0KLQotICAgIHN1cGVyLnZpc2l0RGVmaW5pdGlvbihkZWYpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRJbXBvcnQoSW1wb3J0IHdzZGxJbXBvcnQpCi0gIHsKLSAgICBJbXBvcnQgbXlJbXBvcnQgPSBuZXdEZWZpbml0aW9uLmNyZWF0ZUltcG9ydCgpOwotICAgIG5ld0RlZmluaXRpb24uYWRkSW1wb3J0KG15SW1wb3J0KTsKLQotICAgIC8vIGUuZy4gPHhzOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly9mb28uY29tIiBzY2hlbWFMb2NhdGlvbj0gImJhci54c2QiLz4KLSAgICBteUltcG9ydC5zZXROYW1lc3BhY2VVUkkod3NkbEltcG9ydC5nZXROYW1lc3BhY2VVUkkoKSk7Ci0gICAgbXlJbXBvcnQuc2V0TG9jYXRpb25VUkkod3NkbEltcG9ydC5nZXRMb2NhdGlvblVSSSgpKTsKLSAgICBteUltcG9ydC5zZXREb2N1bWVudGF0aW9uRWxlbWVudCh3c2RsSW1wb3J0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotCi0gICAgbXlJbXBvcnQuc2V0RGVmaW5pdGlvbihuZXdEZWZpbml0aW9uKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0VHlwZXMoVHlwZXMgdHlwZXMpCi0gIHsKLSAgICBUeXBlcyBteVR5cGVzID0gbmV3RGVmaW5pdGlvbi5jcmVhdGVUeXBlcygpOwotICAgIG15VHlwZXMuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQodHlwZXMuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0KLSAgICAvKgotICAgICBJdGVyYXRvciBpdGVyYXRvciA9IHR5cGVzLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuc2liaWxpdEVsZW1lbnQgPSBudWxsOwotICAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICB7Ci0gICAgIGV4dGVuc2liaWxpdEVsZW1lbnQgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpaXRlcmF0b3IubmV4dCgpOwotICAgICBteVR5cGVzLmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KGV4dGVuc2liaWxpdEVsZW1lbnQpOwotICAgICB9Ki8KLSAgICBuZXdEZWZpbml0aW9uLnNldFR5cGVzKG15VHlwZXMpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRQYXJ0KFBhcnQgcGFydCkKLSAgewotICAgIFBhcnQgbXlQYXJ0ID0gbmV3RGVmaW5pdGlvbi5jcmVhdGVQYXJ0KCk7Ci0gICAgbXlQYXJ0LnNldERvY3VtZW50YXRpb25FbGVtZW50KHBhcnQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgbXlQYXJ0LnNldE5hbWUocGFydC5nZXROYW1lKCkpOwotICAgIG15UGFydC5zZXRFbGVtZW50TmFtZShwYXJ0LmdldEVsZW1lbnROYW1lKCkpOwotICAgIG15UGFydC5zZXRUeXBlTmFtZShwYXJ0LmdldFR5cGVOYW1lKCkpOwotCi0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBwYXJ0LmdldEV4dGVuc2lvbkF0dHJpYnV0ZXMoKS5rZXlTZXQoKS5pdGVyYXRvcigpOwotICAgIFFOYW1lIGtleSA9IG51bGw7Ci0gICAgUU5hbWUgdmFsdWUgPSBudWxsOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAga2V5ID0gKFFOYW1lKWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIHZhbHVlID0gKFFOYW1lKXBhcnQuZ2V0RXh0ZW5zaW9uQXR0cmlidXRlKGtleSk7Ci0gICAgICBteVBhcnQuc2V0RXh0ZW5zaW9uQXR0cmlidXRlKGtleSwgdmFsdWUpOwotICAgIH0KLSAgICBjdXJyZW50TWVzc2FnZS5hZGRQYXJ0KG15UGFydCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdE1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKQotICB7Ci0gICAgY3VycmVudE1lc3NhZ2UgPSBuZXdEZWZpbml0aW9uLmNyZWF0ZU1lc3NhZ2UoKTsKLSAgICBzdXBlci52aXNpdE1lc3NhZ2UobWVzc2FnZSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdFBvcnRUeXBlKFBvcnRUeXBlIHBvcnRUeXBlKQotICB7Ci0gICAgY3VycmVudFBvcnRUeXBlID0gbmV3RGVmaW5pdGlvbi5jcmVhdGVQb3J0VHlwZSgpOwotICAgIGN1cnJlbnRQb3J0VHlwZS5zZXREb2N1bWVudGF0aW9uRWxlbWVudChwb3J0VHlwZS5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLSAgICBjdXJyZW50UG9ydFR5cGUuc2V0UU5hbWUocG9ydFR5cGUuZ2V0UU5hbWUoKSk7Ci0gICAgY3VycmVudFBvcnRUeXBlLnNldFVuZGVmaW5lZChwb3J0VHlwZS5pc1VuZGVmaW5lZCgpKTsKLSAgICBuZXdEZWZpbml0aW9uLmFkZFBvcnRUeXBlKGN1cnJlbnRQb3J0VHlwZSk7Ci0KLSAgICBzdXBlci52aXNpdFBvcnRUeXBlKHBvcnRUeXBlKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0T3BlcmF0aW9uKE9wZXJhdGlvbiBvcGVyYXRpb24pCi0gIHsKLSAgICBjdXJyZW50T3BlcmF0aW9uID0gbmV3RGVmaW5pdGlvbi5jcmVhdGVPcGVyYXRpb24oKTsKLSAgICBjdXJyZW50T3BlcmF0aW9uLnNldERvY3VtZW50YXRpb25FbGVtZW50KG9wZXJhdGlvbi5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLSAgICBjdXJyZW50T3BlcmF0aW9uLnNldE5hbWUob3BlcmF0aW9uLmdldE5hbWUoKSk7Ci0gICAgY3VycmVudE9wZXJhdGlvbi5zZXRTdHlsZShvcGVyYXRpb24uZ2V0U3R5bGUoKSk7Ci0gICAgY3VycmVudE9wZXJhdGlvbi5zZXRVbmRlZmluZWQob3BlcmF0aW9uLmlzVW5kZWZpbmVkKCkpOwotICAgIGN1cnJlbnRPcGVyYXRpb24uc2V0UGFyYW1ldGVyT3JkZXJpbmcob3BlcmF0aW9uLmdldFBhcmFtZXRlck9yZGVyaW5nKCkpOwotICAgIGN1cnJlbnRQb3J0VHlwZS5hZGRPcGVyYXRpb24oY3VycmVudE9wZXJhdGlvbik7Ci0KLSAgICBzdXBlci52aXNpdE9wZXJhdGlvbihvcGVyYXRpb24pOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRJbnB1dChJbnB1dCBpbnB1dCkKLSAgewotICAgIElucHV0IG15SW5wdXQgPSBuZXdEZWZpbml0aW9uLmNyZWF0ZUlucHV0KCk7Ci0gICAgbXlJbnB1dC5zZXREb2N1bWVudGF0aW9uRWxlbWVudChpbnB1dC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLSAgICBteUlucHV0LnNldE5hbWUoaW5wdXQuZ2V0TmFtZSgpKTsKLSAgICBteUlucHV0LnNldE1lc3NhZ2UoaW5wdXQuZ2V0TWVzc2FnZSgpKTsKLSAgICBjdXJyZW50T3BlcmF0aW9uLnNldElucHV0KG15SW5wdXQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRPdXRwdXQoT3V0cHV0IG91dHB1dCkKLSAgewotICAgIE91dHB1dCBteU91dHB1dCA9IG5ld0RlZmluaXRpb24uY3JlYXRlT3V0cHV0KCk7Ci0gICAgbXlPdXRwdXQuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQob3V0cHV0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotICAgIG15T3V0cHV0LnNldE5hbWUob3V0cHV0LmdldE5hbWUoKSk7Ci0gICAgbXlPdXRwdXQuc2V0TWVzc2FnZShvdXRwdXQuZ2V0TWVzc2FnZSgpKTsKLSAgICBjdXJyZW50T3BlcmF0aW9uLnNldE91dHB1dChteU91dHB1dCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEZhdWx0KEZhdWx0IGZhdWx0KQotICB7Ci0gICAgRmF1bHQgbXlGYXVsdCA9IG5ld0RlZmluaXRpb24uY3JlYXRlRmF1bHQoKTsKLSAgICBteUZhdWx0LnNldERvY3VtZW50YXRpb25FbGVtZW50KGZhdWx0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotICAgIG15RmF1bHQuc2V0TmFtZShmYXVsdC5nZXROYW1lKCkpOwotICAgIG15RmF1bHQuc2V0TWVzc2FnZShmYXVsdC5nZXRNZXNzYWdlKCkpOwotICAgIGN1cnJlbnRPcGVyYXRpb24uYWRkRmF1bHQobXlGYXVsdCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEJpbmRpbmcoQmluZGluZyBiaW5kaW5nKQotICB7Ci0gICAgY3VycmVudEJpbmRpbmcgPSBuZXdEZWZpbml0aW9uLmNyZWF0ZUJpbmRpbmcoKTsKLSAgICBuZXdEZWZpbml0aW9uLmFkZEJpbmRpbmcoY3VycmVudEJpbmRpbmcpOwotCi0gICAgY3VycmVudEJpbmRpbmcuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoYmluZGluZy5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLSAgICBjdXJyZW50QmluZGluZy5zZXRRTmFtZShiaW5kaW5nLmdldFFOYW1lKCkpOwotICAgIGN1cnJlbnRCaW5kaW5nLnNldFBvcnRUeXBlKGJpbmRpbmcuZ2V0UG9ydFR5cGUoKSk7Ci0gICAgY3VycmVudEJpbmRpbmcuc2V0VW5kZWZpbmVkKGJpbmRpbmcuaXNVbmRlZmluZWQoKSk7Ci0KLSAgICBzdXBlci52aXNpdEJpbmRpbmcoYmluZGluZyk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEJpbmRpbmdPcGVyYXRpb24oQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uKQotICB7Ci0gICAgY3VycmVudEJpbmRpbmdPcGVyYXRpb24gPSBuZXdEZWZpbml0aW9uLmNyZWF0ZUJpbmRpbmdPcGVyYXRpb24oKTsKLSAgICBjdXJyZW50QmluZGluZ09wZXJhdGlvbi5zZXREb2N1bWVudGF0aW9uRWxlbWVudChiaW5kaW5nT3BlcmF0aW9uLmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotICAgIGN1cnJlbnRCaW5kaW5nT3BlcmF0aW9uLnNldE9wZXJhdGlvbihiaW5kaW5nT3BlcmF0aW9uLmdldE9wZXJhdGlvbigpKTsKLSAgICBjdXJyZW50QmluZGluZ09wZXJhdGlvbi5zZXROYW1lKGJpbmRpbmdPcGVyYXRpb24uZ2V0TmFtZSgpKTsKLSAgICBjdXJyZW50QmluZGluZy5hZGRCaW5kaW5nT3BlcmF0aW9uKGN1cnJlbnRCaW5kaW5nT3BlcmF0aW9uKTsKLQotICAgIHN1cGVyLnZpc2l0QmluZGluZ09wZXJhdGlvbihiaW5kaW5nT3BlcmF0aW9uKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0QmluZGluZ0lucHV0KEJpbmRpbmdJbnB1dCBpbnB1dCkKLSAgewotICAgIEJpbmRpbmdJbnB1dCBteUlucHV0ID0gbmV3RGVmaW5pdGlvbi5jcmVhdGVCaW5kaW5nSW5wdXQoKTsKLSAgICBteUlucHV0LnNldERvY3VtZW50YXRpb25FbGVtZW50KGlucHV0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotICAgIG15SW5wdXQuc2V0TmFtZShpbnB1dC5nZXROYW1lKCkpOwotICAgIGN1cnJlbnRCaW5kaW5nT3BlcmF0aW9uLnNldEJpbmRpbmdJbnB1dChteUlucHV0KTsKLQotICAgIHN1cGVyLnZpc2l0QmluZGluZ0lucHV0KGlucHV0KTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0QmluZGluZ091dHB1dChCaW5kaW5nT3V0cHV0IG91dHB1dCkKLSAgewotICAgIEJpbmRpbmdPdXRwdXQgbXlPdXRwdXQgPSBuZXdEZWZpbml0aW9uLmNyZWF0ZUJpbmRpbmdPdXRwdXQoKTsKLSAgICBteU91dHB1dC5zZXREb2N1bWVudGF0aW9uRWxlbWVudChvdXRwdXQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgbXlPdXRwdXQuc2V0TmFtZShvdXRwdXQuZ2V0TmFtZSgpKTsKLSAgICBjdXJyZW50QmluZGluZ09wZXJhdGlvbi5zZXRCaW5kaW5nT3V0cHV0KG15T3V0cHV0KTsKLQotICAgIHN1cGVyLnZpc2l0QmluZGluZ091dHB1dChvdXRwdXQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRCaW5kaW5nRmF1bHQoQmluZGluZ0ZhdWx0IGZhdWx0KQotICB7Ci0gICAgQmluZGluZ0ZhdWx0IG15RmF1bHQgPSBuZXdEZWZpbml0aW9uLmNyZWF0ZUJpbmRpbmdGYXVsdCgpOwotICAgIG15RmF1bHQuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoZmF1bHQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgbXlGYXVsdC5zZXROYW1lKGZhdWx0LmdldE5hbWUoKSk7Ci0gICAgY3VycmVudEJpbmRpbmdPcGVyYXRpb24uYWRkQmluZGluZ0ZhdWx0KG15RmF1bHQpOwotCi0gICAgc3VwZXIudmlzaXRCaW5kaW5nRmF1bHQoZmF1bHQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRTZXJ2aWNlKFNlcnZpY2Ugc2VydmljZSkKLSAgewotICAgIGN1cnJlbnRTZXJ2aWNlID0gbmV3RGVmaW5pdGlvbi5jcmVhdGVTZXJ2aWNlKCk7Ci0gICAgY3VycmVudFNlcnZpY2Uuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoc2VydmljZS5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLSAgICBjdXJyZW50U2VydmljZS5zZXRRTmFtZShzZXJ2aWNlLmdldFFOYW1lKCkpOwotICAgIG5ld0RlZmluaXRpb24uYWRkU2VydmljZShjdXJyZW50U2VydmljZSk7Ci0KLSAgICBzdXBlci52aXNpdFNlcnZpY2Uoc2VydmljZSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdFBvcnQoUG9ydCBwb3J0KQotICB7Ci0gICAgUG9ydCBteVBvcnQgPSBuZXdEZWZpbml0aW9uLmNyZWF0ZVBvcnQoKTsKLSAgICBteVBvcnQuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQocG9ydC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLSAgICBteVBvcnQuc2V0TmFtZShwb3J0LmdldE5hbWUoKSk7Ci0gICAgbXlQb3J0LnNldEJpbmRpbmcocG9ydC5nZXRCaW5kaW5nKCkpOwotICAgIGN1cnJlbnRTZXJ2aWNlLmFkZFBvcnQobXlQb3J0KTsKLQotICAgIHN1cGVyLnZpc2l0UG9ydChwb3J0KTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi0gIHsKLSAgICBpZiAoZXh0ZW5zaWJpbGl0eUVsZW1lbnQgaW5zdGFuY2VvZiBTT0FQQm9keSkKLSAgICAgIHZpc2l0U09BUEJvZHkoKFNPQVBCb2R5KWV4dGVuc2liaWxpdHlFbGVtZW50KTsKLSAgICBlbHNlIGlmIChleHRlbnNpYmlsaXR5RWxlbWVudCBpbnN0YW5jZW9mIFNPQVBCaW5kaW5nKQotICAgICAgdmlzaXRTT0FQQmluZGluZygoU09BUEJpbmRpbmcpZXh0ZW5zaWJpbGl0eUVsZW1lbnQpOwotICAgIGVsc2UgaWYgKGV4dGVuc2liaWxpdHlFbGVtZW50IGluc3RhbmNlb2YgU09BUEFkZHJlc3MpCi0gICAgICB2aXNpdFNPQVBBZGRyZXNzKChTT0FQQWRkcmVzcylleHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gICAgZWxzZSBpZiAoZXh0ZW5zaWJpbGl0eUVsZW1lbnQgaW5zdGFuY2VvZiBTT0FQT3BlcmF0aW9uKQotICAgICAgdmlzaXRTT0FQT3BlcmF0aW9uKChTT0FQT3BlcmF0aW9uKWV4dGVuc2liaWxpdHlFbGVtZW50KTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCB2aXNpdFNPQVBPcGVyYXRpb24oU09BUE9wZXJhdGlvbiBzb2FwT3BlcmF0aW9uKQotICB7Ci0gICAgcHJpbnRsbigiVmlzaXRpbmcgU09BUE9wZXJhdGlvbi4uLiIpOwotICAgIHByaW50bG4oInNvYXBBY3Rpb246ICIgKyBzb2FwT3BlcmF0aW9uLmdldFNvYXBBY3Rpb25VUkkoKSk7Ci0gICAgcHJpbnRsbigiTGVhdmluZyBTT0FQT3BlcmF0aW9uLi4uIik7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgdmlzaXRTT0FQQm9keShTT0FQQm9keSBzb2FwQm9keSkKLSAgewotICAgIHByaW50bG4oIlZpc2l0aW5nIFNPQVBCb2R5Li4uIik7Ci0gICAgcHJpbnRsbigidXNlOiAiICsgc29hcEJvZHkuZ2V0VXNlKCkpOwotICAgIHByaW50bG4oIkxlYXZpbmcgU09BUEJvZHkuLi4iKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCB2aXNpdFNPQVBCaW5kaW5nKFNPQVBCaW5kaW5nIHNvYXBCaW5kaW5nKQotICB7Ci0gICAgcHJpbnRsbigiVmlzaXRpbmcgU09BUEJpbmRpbmcuLi4iKTsKLSAgICBwcmludGxuKCJzdHlsZTogIiArIHNvYXBCaW5kaW5nLmdldFN0eWxlKCkpOwotICAgIHByaW50bG4oInRyYW5zcG9ydDogIiArIHNvYXBCaW5kaW5nLmdldFRyYW5zcG9ydFVSSSgpKTsKLSAgICBwcmludGxuKCJMZWF2aW5nIFNPQVBCaW5kaW5nLi4uIik7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgdmlzaXRTT0FQQWRkcmVzcyhTT0FQQWRkcmVzcyBzb2FwQWRkcmVzcykKLSAgewotICAgIHByaW50bG4oIlZpc2l0aW5nIFNPQVBBZGRyZXNzLi4uIik7Ci0gICAgcHJpbnRsbigibG9jYXRpb246ICIgKyBzb2FwQWRkcmVzcy5nZXRMb2NhdGlvblVSSSgpKTsKLSAgICBwcmludGxuKCJMZWF2aW5nIFNPQVBBZGRyZXNzLi4uIik7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgVGVzdFN1aXRlIHN1aXRlID0gbmV3IFRlc3RTdWl0ZSgpOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgV1NETDRKQVBJVGVzdCgiTW9kZWxTZW1hbnRpY1Rlc3QiKQotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RNb2RlbFNlbWFudGljKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgIHJldHVybiBzdWl0ZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RNb2RlbFNlbWFudGljKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmID0gbG9hZERlZmluaXRpb25Gb3JXU0RMNEooIi4vc2FtcGxlcy9Mb2FkU3RvcmVDb21wYXJlL0xvYWRBbmRQcmludFRlc3Qud3NkbCIpOwotICAgICAgV1NETDRKQVBJVGVzdCB0ZXN0ID0gbmV3IFdTREw0SkFQSVRlc3QoZGVmKTsKLSAgICAgIHRlc3QudmlzaXQoKTsKLSAgICAgIHNlcmlhbGl6ZSh0ZXN0Lm5ld0RlZmluaXRpb24sICIuL3NhbXBsZXMvQ2xvbmVkTG9hZEFuZFByaW50VGVzdC53c2RsIik7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgQXNzZXJ0LmZhaWwoZS50b1N0cmluZygpKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc2VyaWFsaXplKERlZmluaXRpb24gZGVmaW5pdGlvbiwgU3RyaW5nIGNsb25lZEZpbGUpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIC8vIFdTRExXcml0ZXIgd3JpdGVyID0gZmFjdG9yeS5uZXdXU0RMV3JpdGVyKCk7Ci0gICAgLy8gU3RyaW5nIHMgPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIGNsb25lZEZpbGU7Ci0gICAgLy8gd3JpdGVyLndyaXRlV1NETChkZWZpbml0aW9uLCBuZXcgRmlsZU91dHB1dFN0cmVhbShzKSk7Ci0gIH0KLQotICBwcml2YXRlIERlZmluaXRpb24gbG9hZERlZmluaXRpb25Gb3JXU0RMNEooU3RyaW5nIHdzZGxGaWxlKSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICBXU0RMUmVhZGVyIHJlYWRlciA9IGZhY3RvcnkubmV3V1NETFJlYWRlcigpOwotICAgIFN0cmluZyBzID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyB3c2RsRmlsZTsKLSAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSByZWFkZXIucmVhZFdTREwocywgbmV3IElucHV0U291cmNlKG5ldyBGaWxlSW5wdXRTdHJlYW0ocykpKTsKLSAgICByZXR1cm4gZGVmaW5pdGlvbjsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCi0gIHsKLSAgICBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9XU0RMRU1GQVBJVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL1dTRExFTUZBUElUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2YWM1YzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL1dTRExFTUZBUElUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0czsKLQotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2libGVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2VSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuTmFtZXNwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuVW5rbm93bkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLldTRExQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuWFNEU2NoZW1hRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBBZGRyZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJvZHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBIZWFkZXJCYXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwudXRpbC5XU0RMUmVzb3VyY2VGYWN0b3J5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsLkRlZmluaXRpb25Mb2FkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudXRpbC5EZWZpbml0aW9uVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExSZXNvdXJjZUltcGw7Ci0KLQotLyoqCi0gKiBAYXV0aG9yIEtpaHVwIEJvbwotICovCi1wdWJsaWMgY2xhc3MgV1NETEVNRkFQSVRlc3QgZXh0ZW5kcyBEZWZpbml0aW9uVmlzaXRvcgotewotICBwcml2YXRlIFN0cmluZyBQTFVHSU5fQUJTT0xVVEVfUEFUSCA9IFdTRExUZXN0c1BsdWdpbi5nZXRJbnN0YWxsVVJMKCk7Ci0KLSAgcHJpdmF0ZSBXU0RMRmFjdG9yeSBmYWN0b3J5ID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFOwotCi0gIERlZmluaXRpb24gbmV3RGVmaW5pdGlvbjsKLQotICBwcml2YXRlIE1lc3NhZ2UgY3VycmVudE1lc3NhZ2U7Ci0KLSAgcHJpdmF0ZSBTZXJ2aWNlIGN1cnJlbnRTZXJ2aWNlOwotCi0gIHByaXZhdGUgUG9ydFR5cGUgY3VycmVudFBvcnRUeXBlOwotCi0gIHByaXZhdGUgT3BlcmF0aW9uIGN1cnJlbnRPcGVyYXRpb247Ci0KLSAgcHJpdmF0ZSBCaW5kaW5nIGN1cnJlbnRCaW5kaW5nOwotCi0gIHByaXZhdGUgQmluZGluZ09wZXJhdGlvbiBjdXJyZW50QmluZGluZ09wZXJhdGlvbjsKLQotICBwcml2YXRlIEV4dGVuc2libGVFbGVtZW50IGN1cnJlbnRFeHRlbnNpYmxlRWxlbWVudDsKLQotICAvLyBBZGRlZCBmb3IgSlVuaXQKLSAgcHVibGljIFdTRExFTUZBUElUZXN0KFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIobmFtZSk7Ci0gIH0KLQotICAvKioKLSAgICogQHBhcmFtIGRlZmluaXRpb24KLSAgICovCi0gIHB1YmxpYyBXU0RMRU1GQVBJVGVzdChEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICBzdXBlcihkZWZpbml0aW9uKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0RGVmaW5pdGlvbihEZWZpbml0aW9uIGRlZikKLSAgewotICAgIC8vIFVzZSBXU0RMRWxlbWVudCB0byBpbmNyZWFzZSB0aGUgQVBJIGNvdmVyYWdlIGluIHRoZSByZXBvcnRzCi0gICAgV1NETEVsZW1lbnQgcm9vdCA9IGZhY3RvcnkuY3JlYXRlRGVmaW5pdGlvbigpOwotICAgIG5ld0RlZmluaXRpb24gPSAoRGVmaW5pdGlvbilyb290OwotCi0gICAgcm9vdC5zZXREb2N1bWVudGF0aW9uRWxlbWVudChkZWYuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgcm9vdC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpOwotICAgIHJvb3Quc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihuZXdEZWZpbml0aW9uKTsKLSAgICByb290LmdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLSAgICByb290LmdldENvbnRhaW5lcigpOwotCi0gICAgbmV3RGVmaW5pdGlvbi5zZXRRTmFtZShkZWYuZ2V0UU5hbWUoKSk7Ci0gICAgbmV3RGVmaW5pdGlvbi5zZXRUYXJnZXROYW1lc3BhY2UoZGVmLmdldFRhcmdldE5hbWVzcGFjZSgpKTsKLSAgICBuZXdEZWZpbml0aW9uLnNldERvY3VtZW50QmFzZVVSSShkZWYuZ2V0RG9jdW1lbnRCYXNlVVJJKCkpOwotICAgIG5ld0RlZmluaXRpb24uc2V0TG9jYXRpb24oZGVmLmdldExvY2F0aW9uKCkpOwotICAgIG5ld0RlZmluaXRpb24uc2V0RW5jb2RpbmcoZGVmLmdldEVuY29kaW5nKCkpOwotCi0gICAgLy8gZ2V0RU5hbWVzcGFjZXMgZG9lcyBub3Qgd29yay4KLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IGRlZi5nZXRFTmFtZXNwYWNlcygpLml0ZXJhdG9yKCk7Ci0gICAgTmFtZXNwYWNlIG5zID0gbnVsbDsKLSAgICBTdHJpbmcgcHJlZml4ID0gbnVsbDsKLSAgICBTdHJpbmcgdXJpID0gbnVsbDsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIG5zID0gZmFjdG9yeS5jcmVhdGVOYW1lc3BhY2UoKTsKLSAgICAgIHByZWZpeCA9ICgoTmFtZXNwYWNlKWl0ZXJhdG9yLm5leHQoKSkuZ2V0UHJlZml4KCk7Ci0gICAgICB1cmkgPSAoKE5hbWVzcGFjZSlpdGVyYXRvci5uZXh0KCkpLmdldFVSSSgpOwotICAgICAgbnMuc2V0VVJJKHVyaSk7Ci0gICAgICBucy5zZXRQcmVmaXgocHJlZml4KTsKLSAgICAgIG5ld0RlZmluaXRpb24uZ2V0RU5hbWVzcGFjZXMoKS5hZGQobnMpOwotICAgIH0KLQotICAgIGl0ZXJhdG9yID0gZGVmLmdldE5hbWVzcGFjZXMoKS5rZXlTZXQoKS5pdGVyYXRvcigpOwotICAgIHByZWZpeCA9IG51bGw7Ci0gICAgU3RyaW5nIG5hbWVzcGFjZSA9IG51bGw7Ci0KLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIHByZWZpeCA9IChTdHJpbmcpaXRlcmF0b3IubmV4dCgpOwotICAgICAgbmFtZXNwYWNlID0gZGVmLmdldE5hbWVzcGFjZShwcmVmaXgpOwotICAgICAgbmV3RGVmaW5pdGlvbi5hZGROYW1lc3BhY2UocHJlZml4LCBuYW1lc3BhY2UpOwotICAgIH0KLSAgICAvL25ld0RlZmluaXRpb24udXBkYXRlRWxlbWVudCgpOwotCi0gICAgY3VycmVudEV4dGVuc2libGVFbGVtZW50ID0gZGVmOwotICAgIHN1cGVyLnZpc2l0RGVmaW5pdGlvbihkZWYpOwotCi0gICAgcm9vdC5zZXRFbGVtZW50KG51bGwpOwotICAgIHJvb3QudXBkYXRlRWxlbWVudCh0cnVlKTsKLSAgICByb290LmdldEVsZW1lbnQoKTsKLSAgICByb290LnNldEVsZW1lbnQobnVsbCk7Ci0gICAgcm9vdC51cGRhdGVFbGVtZW50KCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEltcG9ydChJbXBvcnQgd3NkbEltcG9ydCkKLSAgewotICAgIEltcG9ydCBteUltcG9ydCA9IGZhY3RvcnkuY3JlYXRlSW1wb3J0KCk7Ci0gICAgbmV3RGVmaW5pdGlvbi5nZXRFSW1wb3J0cygpLmFkZChteUltcG9ydCk7Ci0KLSAgICAvLyBlLmcuIDx4czppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vZm9vLmNvbSIgc2NoZW1hTG9jYXRpb249ICJiYXIueHNkIi8+Ci0gICAgbXlJbXBvcnQuc2V0TmFtZXNwYWNlVVJJKHdzZGxJbXBvcnQuZ2V0TmFtZXNwYWNlVVJJKCkpOwotICAgIG15SW1wb3J0LnNldExvY2F0aW9uVVJJKHdzZGxJbXBvcnQuZ2V0TG9jYXRpb25VUkkoKSk7Ci0gICAgbXlJbXBvcnQuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQod3NkbEltcG9ydC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLSAgICBteUltcG9ydC5zZXRFRGVmaW5pdGlvbih3c2RsSW1wb3J0LmdldEVEZWZpbml0aW9uKCkpOwotICAgIG15SW1wb3J0LnNldEVTY2hlbWEod3NkbEltcG9ydC5nZXRFU2NoZW1hKCkpOwotICAgIG15SW1wb3J0LnNldFNjaGVtYSh3c2RsSW1wb3J0LmdldFNjaGVtYSgpKTsKLSAgICBteUltcG9ydC5zZXRFbmNsb3NpbmdEZWZpbml0aW9uKG5ld0RlZmluaXRpb24pOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRUeXBlcyhUeXBlcyB0eXBlcykKLSAgewotICAgIFR5cGVzIG15VHlwZXMgPSBmYWN0b3J5LmNyZWF0ZVR5cGVzKCk7Ci0gICAgbXlUeXBlcy5zZXREb2N1bWVudGF0aW9uRWxlbWVudCh0eXBlcy5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLQotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gdHlwZXMuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZWUgPSBudWxsOwotICAgIHR5cGVzLmdldFNjaGVtYXMoImh0dHA6Ly90ZW1wdXJpLm9yZy9Mb2FkQW5kUHJpbnRUZXN0LyIpOwotCi0gICAgY3VycmVudEV4dGVuc2libGVFbGVtZW50ID0gbXlUeXBlczsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIGVlID0gKEV4dGVuc2liaWxpdHlFbGVtZW50KWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIHZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoZWUpOwotICAgIH0KLQotICAgIG15VHlwZXMuc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihuZXdEZWZpbml0aW9uKTsKLSAgICBuZXdEZWZpbml0aW9uLmdldEVUeXBlcygpOwotICAgIG5ld0RlZmluaXRpb24uc2V0RVR5cGVzKG15VHlwZXMpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRQYXJ0KFBhcnQgcGFydCkKLSAgewotICAgIFBhcnQgbXlQYXJ0ID0gZmFjdG9yeS5jcmVhdGVQYXJ0KCk7Ci0gICAgbXlQYXJ0LnNldERvY3VtZW50YXRpb25FbGVtZW50KHBhcnQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgbXlQYXJ0LnNldE5hbWUocGFydC5nZXROYW1lKCkpOwotICAgIG15UGFydC5zZXRFbGVtZW50TmFtZShwYXJ0LmdldEVsZW1lbnROYW1lKCkpOwotICAgIG15UGFydC5zZXRUeXBlTmFtZShwYXJ0LmdldFR5cGVOYW1lKCkpOwotICAgIG15UGFydC5zZXRFTWVzc2FnZShwYXJ0LmdldEVNZXNzYWdlKCkpOwotICAgIG15UGFydC5zZXRFbGVtZW50RGVjbGFyYXRpb24ocGFydC5nZXRFbGVtZW50RGVjbGFyYXRpb24oKSk7Ci0gICAgbXlQYXJ0LnNldFR5cGVEZWZpbml0aW9uKHBhcnQuZ2V0VHlwZURlZmluaXRpb24oKSk7Ci0KLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IHBhcnQuZ2V0RXh0ZW5zaW9uQXR0cmlidXRlcygpLmtleVNldCgpLml0ZXJhdG9yKCk7Ci0gICAgUU5hbWUga2V5ID0gbnVsbDsKLSAgICBRTmFtZSB2YWx1ZSA9IG51bGw7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBrZXkgPSAoUU5hbWUpaXRlcmF0b3IubmV4dCgpOwotICAgICAgdmFsdWUgPSAoUU5hbWUpcGFydC5nZXRFeHRlbnNpb25BdHRyaWJ1dGUoa2V5KTsKLSAgICAgIG15UGFydC5zZXRFeHRlbnNpb25BdHRyaWJ1dGUoa2V5LCB2YWx1ZSk7Ci0gICAgfQotICAgIGN1cnJlbnRNZXNzYWdlLnNldEVuY2xvc2luZ0RlZmluaXRpb24obmV3RGVmaW5pdGlvbik7Ci0gICAgY3VycmVudE1lc3NhZ2UuYWRkUGFydChteVBhcnQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRQb3J0VHlwZShQb3J0VHlwZSBwb3J0VHlwZSkKLSAgewotICAgIGN1cnJlbnRQb3J0VHlwZSA9IGZhY3RvcnkuY3JlYXRlUG9ydFR5cGUoKTsKLSAgICBjdXJyZW50UG9ydFR5cGUuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQocG9ydFR5cGUuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgY3VycmVudFBvcnRUeXBlLnNldFFOYW1lKHBvcnRUeXBlLmdldFFOYW1lKCkpOwotICAgIGN1cnJlbnRQb3J0VHlwZS5zZXRVbmRlZmluZWQocG9ydFR5cGUuaXNVbmRlZmluZWQoKSk7Ci0KLSAgICBjdXJyZW50UG9ydFR5cGUuc2V0RW5jbG9zaW5nRGVmaW5pdGlvbihuZXdEZWZpbml0aW9uKTsKLSAgICBuZXdEZWZpbml0aW9uLmdldEVQb3J0VHlwZXMoKS5hZGQoY3VycmVudFBvcnRUeXBlKTsKLQotICAgIHN1cGVyLnZpc2l0UG9ydFR5cGUocG9ydFR5cGUpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRPcGVyYXRpb24oT3BlcmF0aW9uIG9wZXJhdGlvbikKLSAgewotICAgIGN1cnJlbnRPcGVyYXRpb24gPSBmYWN0b3J5LmNyZWF0ZU9wZXJhdGlvbigpOwotICAgIGN1cnJlbnRPcGVyYXRpb24uc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQob3BlcmF0aW9uLmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotICAgIGN1cnJlbnRPcGVyYXRpb24uc2V0TmFtZShvcGVyYXRpb24uZ2V0TmFtZSgpKTsKLSAgICBjdXJyZW50T3BlcmF0aW9uLnNldFN0eWxlKG9wZXJhdGlvbi5nZXRTdHlsZSgpKTsKLSAgICBjdXJyZW50T3BlcmF0aW9uLnNldFVuZGVmaW5lZChvcGVyYXRpb24uaXNVbmRlZmluZWQoKSk7Ci0gICAgb3BlcmF0aW9uLmdldEVQYXJhbWV0ZXJPcmRlcmluZygpOyAvLyBUQkQKLSAgICBjdXJyZW50T3BlcmF0aW9uLnNldEVuY2xvc2luZ0RlZmluaXRpb24obmV3RGVmaW5pdGlvbik7Ci0gICAgY3VycmVudFBvcnRUeXBlLmdldEVPcGVyYXRpb25zKCkuYWRkKGN1cnJlbnRPcGVyYXRpb24pOwotCi0gICAgc3VwZXIudmlzaXRPcGVyYXRpb24ob3BlcmF0aW9uKTsKLSAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiT3BlcmF0aW9uIFR5cGUgaXM6ICIgKyBvcGVyYXRpb24uZ2V0U3R5bGUoKSk7Ci0gICAgLy9vcGVyYXRpb24uc2V0U3R5bGUoT3BlcmF0aW9uVHlwZS5SRVFVRVNUX1JFU1BPTlNFKTsKLSAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiT3BlcmF0aW9uIFR5cGUgaXM6ICIgKyBvcGVyYXRpb24uZ2V0U3R5bGUoKSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdE1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKQotICB7Ci0gICAgY3VycmVudE1lc3NhZ2UgPSBmYWN0b3J5LmNyZWF0ZU1lc3NhZ2UoKTsKLSAgICBjdXJyZW50TWVzc2FnZS5zZXRRTmFtZShtZXNzYWdlLmdldFFOYW1lKCkpOwotICAgIGN1cnJlbnRNZXNzYWdlLnNldFVuZGVmaW5lZChtZXNzYWdlLmlzVW5kZWZpbmVkKCkpOwotICAgIG5ld0RlZmluaXRpb24uYWRkTWVzc2FnZShjdXJyZW50TWVzc2FnZSk7Ci0KLSAgICBzdXBlci52aXNpdE1lc3NhZ2UobWVzc2FnZSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdElucHV0KElucHV0IGlucHV0KQotICB7Ci0gICAgTWVzc2FnZVJlZmVyZW5jZSBteUlucHV0ID0gZmFjdG9yeS5jcmVhdGVJbnB1dCgpOwotICAgIG15SW5wdXQuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoaW5wdXQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgbXlJbnB1dC5zZXROYW1lKGlucHV0LmdldE5hbWUoKSk7Ci0gICAgbXlJbnB1dC5nZXROYW1lKCk7Ci0gICAgbXlJbnB1dC5zZXRFTWVzc2FnZShpbnB1dC5nZXRFTWVzc2FnZSgpKTsKLSAgICBteUlucHV0LnNldEVuY2xvc2luZ0RlZmluaXRpb24obmV3RGVmaW5pdGlvbik7Ci0gICAgY3VycmVudE9wZXJhdGlvbi5zZXRFSW5wdXQoKElucHV0KW15SW5wdXQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRPdXRwdXQoT3V0cHV0IG91dHB1dCkKLSAgewotICAgIE91dHB1dCBteU91dHB1dCA9IGZhY3RvcnkuY3JlYXRlT3V0cHV0KCk7Ci0gICAgbXlPdXRwdXQuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQob3V0cHV0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCkpOwotICAgIG15T3V0cHV0LnNldE5hbWUob3V0cHV0LmdldE5hbWUoKSk7Ci0gICAgbXlPdXRwdXQuc2V0RU1lc3NhZ2Uob3V0cHV0LmdldEVNZXNzYWdlKCkpOwotICAgIG15T3V0cHV0LnNldEVuY2xvc2luZ0RlZmluaXRpb24obmV3RGVmaW5pdGlvbik7Ci0gICAgY3VycmVudE9wZXJhdGlvbi5zZXRFT3V0cHV0KG15T3V0cHV0KTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0RmF1bHQoRmF1bHQgZmF1bHQpCi0gIHsKLSAgICBGYXVsdCBteUZhdWx0ID0gZmFjdG9yeS5jcmVhdGVGYXVsdCgpOwotICAgIG15RmF1bHQuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoZmF1bHQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgbXlGYXVsdC5zZXROYW1lKGZhdWx0LmdldE5hbWUoKSk7Ci0gICAgbXlGYXVsdC5zZXRFTWVzc2FnZShmYXVsdC5nZXRFTWVzc2FnZSgpKTsKLSAgICBteUZhdWx0LnNldEVuY2xvc2luZ0RlZmluaXRpb24obmV3RGVmaW5pdGlvbik7Ci0gICAgY3VycmVudE9wZXJhdGlvbi5nZXRFRmF1bHRzKCkuYWRkKG15RmF1bHQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRCaW5kaW5nKEJpbmRpbmcgYmluZGluZykKLSAgewotICAgIGN1cnJlbnRCaW5kaW5nID0gZmFjdG9yeS5jcmVhdGVCaW5kaW5nKCk7Ci0gICAgbmV3RGVmaW5pdGlvbi5nZXRFQmluZGluZ3MoKS5hZGQoY3VycmVudEJpbmRpbmcpOwotCi0gICAgY3VycmVudEJpbmRpbmcuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoYmluZGluZy5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLSAgICBjdXJyZW50QmluZGluZy5zZXRRTmFtZShiaW5kaW5nLmdldFFOYW1lKCkpOwotICAgIGN1cnJlbnRCaW5kaW5nLnNldEVQb3J0VHlwZShiaW5kaW5nLmdldEVQb3J0VHlwZSgpKTsKLSAgICBjdXJyZW50QmluZGluZy5zZXRVbmRlZmluZWQoYmluZGluZy5pc1VuZGVmaW5lZCgpKTsKLQotICAgIGN1cnJlbnRFeHRlbnNpYmxlRWxlbWVudCA9IGN1cnJlbnRCaW5kaW5nOwotICAgIHN1cGVyLnZpc2l0QmluZGluZyhiaW5kaW5nKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0QmluZGluZ09wZXJhdGlvbihCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24pCi0gIHsKLSAgICBjdXJyZW50QmluZGluZ09wZXJhdGlvbiA9IGZhY3RvcnkuY3JlYXRlQmluZGluZ09wZXJhdGlvbigpOwotICAgIGN1cnJlbnRCaW5kaW5nT3BlcmF0aW9uLnNldERvY3VtZW50YXRpb25FbGVtZW50KGJpbmRpbmdPcGVyYXRpb24uZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgY3VycmVudEJpbmRpbmdPcGVyYXRpb24uc2V0RU9wZXJhdGlvbihiaW5kaW5nT3BlcmF0aW9uLmdldEVPcGVyYXRpb24oKSk7Ci0gICAgY3VycmVudEJpbmRpbmdPcGVyYXRpb24uc2V0TmFtZShiaW5kaW5nT3BlcmF0aW9uLmdldE5hbWUoKSk7Ci0gICAgY3VycmVudEJpbmRpbmcuZ2V0QmluZGluZ09wZXJhdGlvbnMoKS5hZGQoY3VycmVudEJpbmRpbmdPcGVyYXRpb24pOwotCi0gICAgY3VycmVudEV4dGVuc2libGVFbGVtZW50ID0gY3VycmVudEJpbmRpbmdPcGVyYXRpb247Ci0gICAgc3VwZXIudmlzaXRCaW5kaW5nT3BlcmF0aW9uKGJpbmRpbmdPcGVyYXRpb24pOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRCaW5kaW5nSW5wdXQoQmluZGluZ0lucHV0IGlucHV0KQotICB7Ci0gICAgQmluZGluZ0lucHV0IG15SW5wdXQgPSBmYWN0b3J5LmNyZWF0ZUJpbmRpbmdJbnB1dCgpOwotICAgIG15SW5wdXQuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoaW5wdXQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgbXlJbnB1dC5zZXROYW1lKGlucHV0LmdldE5hbWUoKSk7Ci0gICAgbXlJbnB1dC5zZXRJbnB1dChpbnB1dC5nZXRJbnB1dCgpKTsKLSAgICBteUlucHV0LnNldEVJbnB1dChpbnB1dC5nZXRFSW5wdXQoKSk7Ci0gICAgY3VycmVudEJpbmRpbmdPcGVyYXRpb24uc2V0RUJpbmRpbmdJbnB1dChteUlucHV0KTsKLQotICAgIGN1cnJlbnRFeHRlbnNpYmxlRWxlbWVudCA9IG15SW5wdXQ7Ci0gICAgc3VwZXIudmlzaXRCaW5kaW5nSW5wdXQoaW5wdXQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRCaW5kaW5nT3V0cHV0KEJpbmRpbmdPdXRwdXQgb3V0cHV0KQotICB7Ci0gICAgQmluZGluZ091dHB1dCBteU91dHB1dCA9IGZhY3RvcnkuY3JlYXRlQmluZGluZ091dHB1dCgpOwotICAgIG15T3V0cHV0LnNldERvY3VtZW50YXRpb25FbGVtZW50KG91dHB1dC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLSAgICBteU91dHB1dC5zZXROYW1lKG91dHB1dC5nZXROYW1lKCkpOwotICAgIG15T3V0cHV0LnNldE91dHB1dChvdXRwdXQuZ2V0T3V0cHV0KCkpOwotICAgIG15T3V0cHV0LnNldEVPdXRwdXQob3V0cHV0LmdldEVPdXRwdXQoKSk7Ci0gICAgY3VycmVudEJpbmRpbmdPcGVyYXRpb24uc2V0RUJpbmRpbmdPdXRwdXQobXlPdXRwdXQpOwotCi0gICAgY3VycmVudEV4dGVuc2libGVFbGVtZW50ID0gbXlPdXRwdXQ7Ci0gICAgc3VwZXIudmlzaXRCaW5kaW5nT3V0cHV0KG91dHB1dCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEJpbmRpbmdGYXVsdChCaW5kaW5nRmF1bHQgZmF1bHQpCi0gIHsKLSAgICBCaW5kaW5nRmF1bHQgbXlGYXVsdCA9IGZhY3RvcnkuY3JlYXRlQmluZGluZ0ZhdWx0KCk7Ci0gICAgbXlGYXVsdC5zZXREb2N1bWVudGF0aW9uRWxlbWVudChmYXVsdC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLSAgICBteUZhdWx0LnNldE5hbWUoZmF1bHQuZ2V0TmFtZSgpKTsKLSAgICBteUZhdWx0LnNldEVGYXVsdChmYXVsdC5nZXRFRmF1bHQoKSk7Ci0gICAgbXlGYXVsdC5zZXRGYXVsdChmYXVsdC5nZXRGYXVsdCgpKTsKLSAgICBjdXJyZW50QmluZGluZ09wZXJhdGlvbi5nZXRFQmluZGluZ0ZhdWx0cygpLmFkZChteUZhdWx0KTsKLQotICAgIGN1cnJlbnRFeHRlbnNpYmxlRWxlbWVudCA9IG15RmF1bHQ7Ci0gICAgc3VwZXIudmlzaXRCaW5kaW5nRmF1bHQoZmF1bHQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRTZXJ2aWNlKFNlcnZpY2Ugc2VydmljZSkKLSAgewotICAgIGN1cnJlbnRTZXJ2aWNlID0gZmFjdG9yeS5jcmVhdGVTZXJ2aWNlKCk7Ci0gICAgY3VycmVudFNlcnZpY2Uuc2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoc2VydmljZS5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpKTsKLSAgICBjdXJyZW50U2VydmljZS5zZXRRTmFtZShzZXJ2aWNlLmdldFFOYW1lKCkpOwotICAgIGN1cnJlbnRTZXJ2aWNlLnNldFVuZGVmaW5lZChzZXJ2aWNlLmlzVW5kZWZpbmVkKCkpOwotCi0gICAgbmV3RGVmaW5pdGlvbi5nZXRFU2VydmljZXMoKS5hZGQoY3VycmVudFNlcnZpY2UpOwotCi0gICAgc3VwZXIudmlzaXRTZXJ2aWNlKHNlcnZpY2UpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRQb3J0KFBvcnQgcG9ydCkKLSAgewotICAgIFBvcnQgbXlQb3J0ID0gZmFjdG9yeS5jcmVhdGVQb3J0KCk7Ci0gICAgbXlQb3J0LnNldERvY3VtZW50YXRpb25FbGVtZW50KHBvcnQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSk7Ci0gICAgbXlQb3J0LnNldE5hbWUocG9ydC5nZXROYW1lKCkpOwotICAgIG15UG9ydC5zZXRFQmluZGluZyhwb3J0LmdldEVCaW5kaW5nKCkpOwotCi0gICAgY3VycmVudFNlcnZpY2UuZ2V0RVBvcnRzKCkuYWRkKG15UG9ydCk7Ci0KLSAgICBjdXJyZW50RXh0ZW5zaWJsZUVsZW1lbnQgPSBteVBvcnQ7Ci0gICAgc3VwZXIudmlzaXRQb3J0KHBvcnQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRFeHRlbnNpYmlsaXR5RWxlbWVudChFeHRlbnNpYmxlRWxlbWVudCBvd25lciwgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0ZW5zaWJpbGl0eUVsZW1lbnQpCi0gIHsKLSAgICAvLyBUbyBtb3ZlIHVwIHRoZSBBUEkgdGVzdCBjb3ZlcmFnZQotICAgIG93bmVyLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICBvd25lci5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICBmYWN0b3J5LmNyZWF0ZUV4dGVuc2liaWxpdHlFbGVtZW50KCk7Ci0gICAgV1NETFBsdWdpbi5nZXRQbHVnaW4oKTsKLSAgICBXU0RMUGx1Z2luLklOU1RBTkNFLmdldFBsdWdpblJlc291cmNlTG9jYXRvcigpOwotCi0gICAgdmlzaXRFeHRlbnNpYmlsaXR5RWxlbWVudChleHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgdmlzaXRFeHRlbnNpYmlsaXR5RWxlbWVudChFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXR5RWxlbWVudCkKLSAgewotICAgIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50IHhzZWUgPSBudWxsOwotICAgIFVua25vd25FeHRlbnNpYmlsaXR5RWxlbWVudCB1ZWUgPSBudWxsOwotICAgIEV4dGVuc2liaWxpdHlFbGVtZW50IG15RUUgPSBudWxsOwotICAgIGlmIChleHRlbnNpYmlsaXR5RWxlbWVudCBpbnN0YW5jZW9mIFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KQotICAgIHsKLSAgICAgIG15RUUgPSBmYWN0b3J5LmNyZWF0ZVhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KCk7Ci0gICAgICB4c2VlID0gKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KW15RUU7Ci0gICAgICB4c2VlLnNldFNjaGVtYSgoKFhTRFNjaGVtYUV4dGVuc2liaWxpdHlFbGVtZW50KWV4dGVuc2liaWxpdHlFbGVtZW50KS5nZXRTY2hlbWEoKSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBteUVFID0gZmFjdG9yeS5jcmVhdGVVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQoKTsKLSAgICAgIHVlZSA9IChVbmtub3duRXh0ZW5zaWJpbGl0eUVsZW1lbnQpbXlFRTsKLSAgICAgIHVlZS5nZXRDaGlsZHJlbigpOyAvLyBUQkQKLSAgICB9Ci0gICAgbXlFRS5zZXRFbGVtZW50VHlwZShleHRlbnNpYmlsaXR5RWxlbWVudC5nZXRFbGVtZW50VHlwZSgpKTsKLSAgICBteUVFLnNldFJlcXVpcmVkKGV4dGVuc2liaWxpdHlFbGVtZW50LmdldFJlcXVpcmVkKCkpOwotICAgIG15RUUuc2V0UmVxdWlyZWQoZXh0ZW5zaWJpbGl0eUVsZW1lbnQuaXNSZXF1aXJlZCgpKTsKLSAgICBpZiAoY3VycmVudEV4dGVuc2libGVFbGVtZW50ICE9IG51bGwpCi0gICAgICBjdXJyZW50RXh0ZW5zaWJsZUVsZW1lbnQuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQobXlFRSk7Ci0KLSAgICBpZiAoZXh0ZW5zaWJpbGl0eUVsZW1lbnQgaW5zdGFuY2VvZiBTT0FQQm9keSkKLSAgICAgIHZpc2l0U09BUEJvZHkoKFNPQVBCb2R5KWV4dGVuc2liaWxpdHlFbGVtZW50KTsKLSAgICBlbHNlIGlmIChleHRlbnNpYmlsaXR5RWxlbWVudCBpbnN0YW5jZW9mIFNPQVBCaW5kaW5nKQotICAgICAgdmlzaXRTT0FQQmluZGluZygoU09BUEJpbmRpbmcpZXh0ZW5zaWJpbGl0eUVsZW1lbnQpOwotICAgIGVsc2UgaWYgKGV4dGVuc2liaWxpdHlFbGVtZW50IGluc3RhbmNlb2YgU09BUEFkZHJlc3MpCi0gICAgICB2aXNpdFNPQVBBZGRyZXNzKChTT0FQQWRkcmVzcylleHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gICAgZWxzZSBpZiAoZXh0ZW5zaWJpbGl0eUVsZW1lbnQgaW5zdGFuY2VvZiBTT0FQT3BlcmF0aW9uKQotICAgICAgdmlzaXRTT0FQT3BlcmF0aW9uKChTT0FQT3BlcmF0aW9uKWV4dGVuc2liaWxpdHlFbGVtZW50KTsKLSAgICBlbHNlIGlmIChleHRlbnNpYmlsaXR5RWxlbWVudCBpbnN0YW5jZW9mIFNPQVBGYXVsdCkKLSAgICAgIHZpc2l0U09BUEZhdWx0KChTT0FQRmF1bHQpZXh0ZW5zaWJpbGl0eUVsZW1lbnQpOwotICAgIGVsc2UgaWYgKGV4dGVuc2liaWxpdHlFbGVtZW50IGluc3RhbmNlb2YgU09BUEhlYWRlcikKLSAgICAgIHZpc2l0U09BUEhlYWRlcigoU09BUEhlYWRlcilleHRlbnNpYmlsaXR5RWxlbWVudCk7Ci0gICAgZWxzZSBpZiAoZXh0ZW5zaWJpbGl0eUVsZW1lbnQgaW5zdGFuY2VvZiBTT0FQSGVhZGVyRmF1bHQpCi0gICAgICB2aXNpdFNPQVBIZWFkZXJGYXVsdCgoU09BUEhlYWRlckZhdWx0KWV4dGVuc2liaWxpdHlFbGVtZW50KTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCB2aXNpdFNPQVBGYXVsdChTT0FQRmF1bHQgc29hcEZhdWx0KQotICB7Ci0gICAgU09BUEZhdWx0IG15U29hcEZhdWx0ID0gU09BUEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNPQVBGYXVsdCgpOwotICAgIG15U29hcEZhdWx0LnNldEVuY29kaW5nU3R5bGVzKHNvYXBGYXVsdC5nZXRFbmNvZGluZ1N0eWxlcygpKTsKLSAgICBteVNvYXBGYXVsdC5zZXROYW1lKHNvYXBGYXVsdC5nZXROYW1lKCkpOwotICAgIG15U29hcEZhdWx0LnNldE5hbWVzcGFjZVVSSShzb2FwRmF1bHQuZ2V0TmFtZXNwYWNlVVJJKCkpOwotICAgIG15U29hcEZhdWx0LnNldFVzZShzb2FwRmF1bHQuZ2V0VXNlKCkpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHZpc2l0U09BUEhlYWRlcihTT0FQSGVhZGVyIHNvYXBIZWFkZXIpCi0gIHsKLSAgICAvLyBVc2UgU09BUEhlYWRlckJhc2UgdG8gaW5jcmVhc2UgdGhlIEFQSSBjb3ZlcmFnZSB2YWx1ZXMgaW4gdGhlIHJlcG9ydHMKLQotICAgIFNPQVBIZWFkZXJCYXNlIHlvdXJTb2FwSGVhZGVyID0gU09BUEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNPQVBIZWFkZXJCYXNlKCk7Ci0gICAgeW91clNvYXBIZWFkZXIuZ2V0RW5jb2RpbmdTdHlsZXMoKTsKLQotICAgIFNPQVBIZWFkZXJCYXNlIG15U29hcEhlYWRlciA9IFNPQVBGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTT0FQSGVhZGVyKCk7Ci0gICAgbXlTb2FwSGVhZGVyLnNldE1lc3NhZ2Uoc29hcEhlYWRlci5nZXRNZXNzYWdlKCkpOwotICAgIG15U29hcEhlYWRlci5nZXRNZXNzYWdlKCk7Ci0gICAgbXlTb2FwSGVhZGVyLnNldFBhcnQoc29hcEhlYWRlci5nZXRQYXJ0KCkpOwotICAgIG15U29hcEhlYWRlci5nZXRQYXJ0KCk7Ci0gICAgbXlTb2FwSGVhZGVyLnNldE5hbWVzcGFjZVVSSShzb2FwSGVhZGVyLmdldE5hbWVzcGFjZVVSSSgpKTsKLSAgICBteVNvYXBIZWFkZXIuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgbXlTb2FwSGVhZGVyLnNldFVzZShzb2FwSGVhZGVyLmdldFVzZSgpKTsKLSAgICBteVNvYXBIZWFkZXIuZ2V0VXNlKCk7Ci0gICAgKChTT0FQSGVhZGVyKXNvYXBIZWFkZXIpLmdldEhlYWRlckZhdWx0cygpOyAvLyBUQkQKLSAgfQotCi0gIHByaXZhdGUgdm9pZCB2aXNpdFNPQVBIZWFkZXJGYXVsdChTT0FQSGVhZGVyRmF1bHQgc29hcEhlYWRlckZhdWx0KQotICB7Ci0gICAgU09BUEhlYWRlckZhdWx0IG15U29hcEhlYWRlckZhdWx0ID0gU09BUEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNPQVBIZWFkZXJGYXVsdCgpOwotICAgIG15U29hcEhlYWRlckZhdWx0LnNldE1lc3NhZ2Uoc29hcEhlYWRlckZhdWx0LmdldE1lc3NhZ2UoKSk7Ci0gICAgbXlTb2FwSGVhZGVyRmF1bHQuc2V0UGFydChzb2FwSGVhZGVyRmF1bHQuZ2V0UGFydCgpKTsKLSAgICBteVNvYXBIZWFkZXJGYXVsdC5zZXROYW1lc3BhY2VVUkkoc29hcEhlYWRlckZhdWx0LmdldE5hbWVzcGFjZVVSSSgpKTsKLSAgICBteVNvYXBIZWFkZXJGYXVsdC5zZXRVc2Uoc29hcEhlYWRlckZhdWx0LmdldFVzZSgpKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCB2aXNpdFNPQVBPcGVyYXRpb24oU09BUE9wZXJhdGlvbiBzb2FwT3BlcmF0aW9uKQotICB7Ci0gICAgU09BUE9wZXJhdGlvbiBteVNvYXBPcGVyYXRpb24gPSBTT0FQRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU09BUE9wZXJhdGlvbigpOwotICAgIG15U29hcE9wZXJhdGlvbi5zZXRTb2FwQWN0aW9uVVJJKHNvYXBPcGVyYXRpb24uZ2V0U29hcEFjdGlvblVSSSgpKTsKLSAgICBteVNvYXBPcGVyYXRpb24uc2V0U3R5bGUoc29hcE9wZXJhdGlvbi5nZXRTdHlsZSgpKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCB2aXNpdFNPQVBCb2R5KFNPQVBCb2R5IHNvYXBCb2R5KQotICB7Ci0gICAgU09BUEJvZHkgbXlTb2FwQm9keSA9IFNPQVBGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTT0FQQm9keSgpOwotICAgIG15U29hcEJvZHkuc2V0RW5jb2RpbmdTdHlsZXMoc29hcEJvZHkuZ2V0RW5jb2RpbmdTdHlsZXMoKSk7Ci0gICAgbXlTb2FwQm9keS5zZXROYW1lc3BhY2VVUkkoc29hcEJvZHkuZ2V0TmFtZXNwYWNlVVJJKCkpOwotICAgIG15U29hcEJvZHkuc2V0UGFydHMoc29hcEJvZHkuZ2V0UGFydHMoKSk7Ci0gICAgbXlTb2FwQm9keS5zZXRVc2Uoc29hcEJvZHkuZ2V0VXNlKCkpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHZpc2l0U09BUEJpbmRpbmcoU09BUEJpbmRpbmcgc29hcEJpbmRpbmcpCi0gIHsKLSAgICBTT0FQQmluZGluZyBteVNvYXBCaW5kaW5nID0gU09BUEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNPQVBCaW5kaW5nKCk7Ci0gICAgbXlTb2FwQmluZGluZy5zZXRTdHlsZShzb2FwQmluZGluZy5nZXRTdHlsZSgpKTsKLSAgICBteVNvYXBCaW5kaW5nLnNldFRyYW5zcG9ydFVSSShzb2FwQmluZGluZy5nZXRUcmFuc3BvcnRVUkkoKSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgdmlzaXRTT0FQQWRkcmVzcyhTT0FQQWRkcmVzcyBzb2FwQWRkcmVzcykKLSAgewotICAgIFNPQVBBZGRyZXNzIG15U29hcEFkZHJlc3MgPSBTT0FQRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU09BUEFkZHJlc3MoKTsKLSAgICBteVNvYXBBZGRyZXNzLnNldExvY2F0aW9uVVJJKHNvYXBBZGRyZXNzLmdldExvY2F0aW9uVVJJKCkpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIFRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBUZXN0U3VpdGUoKTsKLQotICAgIHN1aXRlLmFkZFRlc3QobmV3IFdTRExFTUZBUElUZXN0KCJNb2RlbFNlbWFudGljVGVzdCIpCi0gICAgICB7Ci0gICAgICAgIHByb3RlY3RlZCB2b2lkIHJ1blRlc3QoKQotICAgICAgICB7Ci0gICAgICAgICAgdGVzdE1vZGVsU2VtYW50aWMoKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgcmV0dXJuIHN1aXRlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE1vZGVsU2VtYW50aWMoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWYgPSBEZWZpbml0aW9uTG9hZGVyLmxvYWQoUExVR0lOX0FCU09MVVRFX1BBVEggKyAic2FtcGxlcy9Mb2FkU3RvcmVDb21wYXJlL0xvYWRBbmRQcmludFRlc3Qud3NkbCIsIHRydWUpOwotICAgICAgV1NETEVNRkFQSVRlc3QgdGVzdCA9IG5ldyBXU0RMRU1GQVBJVGVzdChkZWYpOwotICAgICAgdGVzdC52aXNpdCgpOwotICAgICAgc2VyaWFsaXplKHRlc3QubmV3RGVmaW5pdGlvbik7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgQXNzZXJ0LmZhaWwoZS50b1N0cmluZygpKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc2VyaWFsaXplKERlZmluaXRpb24gZGVmKSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICBSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IG5ldyBSZXNvdXJjZVNldEltcGwoKTsKLSAgICByZXNvdXJjZVNldC5nZXRSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeSgpLmdldEV4dGVuc2lvblRvRmFjdG9yeU1hcCgpLnB1dCgid3NkbCIsIG5ldyBXU0RMUmVzb3VyY2VGYWN0b3J5SW1wbCgpKTsKLSAgICBXU0RMUmVzb3VyY2VJbXBsIHdzZGxNYWluUmVzb3VyY2UgPSAoV1NETFJlc291cmNlSW1wbClyZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShVUkkuY3JlYXRlVVJJKCIqLndzZGwiKSk7Ci0gICAgd3NkbE1haW5SZXNvdXJjZS5nZXRDb250ZW50cygpLmFkZChkZWYpOwotCi0gICAgSVdvcmtzcGFjZVJvb3QgbXlXb3Jrc3BhY2VSb290ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLSAgICBJUHJvamVjdCBteVdlYlByb2plY3QgPSBteVdvcmtzcGFjZVJvb3QuZ2V0UHJvamVjdCgib3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMiKTsKLSAgICBpZiAoIW15V2ViUHJvamVjdC5leGlzdHMoKSkKLSAgICAgIG15V2ViUHJvamVjdC5jcmVhdGUobnVsbCk7Ci0KLSAgICBTdHJpbmcgYmFzZURpciA9IG15V2ViUHJvamVjdC5nZXRMb2NhdGlvbigpLnRvU3RyaW5nKCk7Ci0KLSAgICBEZWZpbml0aW9uTG9hZGVyLnN0b3JlKGRlZiwgYmFzZURpciArICIvQ2xvbmVkTG9hZEFuZFByaW50VGVzdC53c2RsIik7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQotICB7Ci0gICAganVuaXQudGV4dHVpLlRlc3RSdW5uZXIucnVuKHN1aXRlKCkpOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvV1NETEdlbmVyYXRpb25UZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvV1NETEdlbmVyYXRpb25UZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3YTliNWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL1dTRExHZW5lcmF0aW9uVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjM4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHM7Ci0KLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLlJlc291cmNlU2V0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBBZGRyZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJvZHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5pbXBsLlNPQVBCb2R5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuaW50ZXJuYWwudXRpbC5TT0FQQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnV0aWwuV1NETENvbnN0YW50czsKLQotCi1wdWJsaWMgY2xhc3MgV1NETEdlbmVyYXRpb25UZXN0IGV4dGVuZHMgVGVzdENhc2UKLXsKLSAgcHVibGljIFdTRExHZW5lcmF0aW9uVGVzdCgpCi0gIHsKLSAgfQotCi0gIHB1YmxpYyBXU0RMR2VuZXJhdGlvblRlc3QoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihuYW1lKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICBUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKCk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBXU0RMR2VuZXJhdGlvblRlc3QoIlNhbXBsZVdTRExHZW5lcmF0aW9uIikKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0U2FtcGxlV1NETEdlbmVyYXRpb24oKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICByZXR1cm4gc3VpdGU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0U2FtcGxlV1NETEdlbmVyYXRpb24oKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgZ2VuZXJhdGVUZW1wZXJhdHVyZVNlcnZpY2UoV1NETFRlc3RzUGx1Z2luLmdldEluc3RhbGxVUkwoKSArInNhbXBsZXMvZ2VuZXJhdGVkL1RlbXBlcmF0dXJlU2VydmljZS53c2RsIik7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBBc3NlcnQuZmFpbCgiVGVzdCBmYWlsZWQgZHVlIHRvIGFuIGV4Y2VwdGlvbjogIiArIGUuZ2V0TG9jYWxpemVkTWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBnZW5lcmF0ZVRlbXBlcmF0dXJlU2VydmljZShTdHJpbmcgb3V0cHV0RmlsZSkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7Ci0gICAgUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShVUkkuY3JlYXRlRmlsZVVSSShvdXRwdXRGaWxlKSk7Ci0gICAgcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2VzKCkuYWRkKHJlc291cmNlKTsKLQotICAgIC8vIENyZWF0ZSBhIERlZmluaXRpb24gLSBUZW1wZXJhdHVyZQotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVEZWZpbml0aW9uKCk7Ci0gICAgZGVmaW5pdGlvbi5zZXRRTmFtZShuZXcgUU5hbWUoV1NETENvbnN0YW50cy5XU0RMX05BTUVTUEFDRV9VUkksICJUZW1wZXJhdHVyZSIpKTsKLSAgICByZXNvdXJjZS5nZXRDb250ZW50cygpLmFkZChkZWZpbml0aW9uKTsKLQotICAgIC8vIFRhcmdldCBuYW1lc3BhY2UgLSBodHRwOi8vd3d3LnRlbXBlcmF0dXJlLmNvbQotICAgIGRlZmluaXRpb24uc2V0VGFyZ2V0TmFtZXNwYWNlKCJodHRwOi8vd3d3LnRlbXBlcmF0dXJlLmNvbSIpOwotICAgIGRlZmluaXRpb24uYWRkTmFtZXNwYWNlKCJ0bnMiLCAiaHR0cDovL3d3dy50ZW1wZXJhdHVyZS5jb20iKTsKLQotICAgIC8vIE90aGVyIG5hbWVzcGFjZXMgLSB3c2RsLCBzb2FwLCB4c2QKLSAgICBkZWZpbml0aW9uLmFkZE5hbWVzcGFjZSgid3NkbCIsIFdTRExDb25zdGFudHMuV1NETF9OQU1FU1BBQ0VfVVJJKTsKLSAgICBkZWZpbml0aW9uLmFkZE5hbWVzcGFjZSgieHNkIiwgV1NETENvbnN0YW50cy5TQ0hFTUFfRk9SX1NDSEVNQV9VUklfMjAwMSk7Ci0gICAgZGVmaW5pdGlvbi5nZXROYW1lc3BhY2VzKCkucHV0KCJzb2FwIiwgU09BUENvbnN0YW50cy5TT0FQX05BTUVTUEFDRV9VUkkpOwotCi0gICAgLy8KLSAgICAvLyBMZXQncyBzdGFydCBidWlsZGluZyB0d28gbWVzc2FnZXMKLSAgICAvLwotCi0gICAgLy8gQ3JlYXRlIGEgUGFydCAtIFppcENvZGUKLSAgICBQYXJ0IHBhcnQgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUGFydCgpOwotICAgIHBhcnQuc2V0TmFtZSgiWmlwQ29kZSIpOwotICAgIHBhcnQuc2V0VHlwZU5hbWUobmV3IFFOYW1lKFdTRExDb25zdGFudHMuU0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzIwMDEsICJzdHJpbmciKSk7Ci0KLSAgICAvLyBDcmVhdGUgYSBNZXNzYWdlIC0gR2V0VGVtcGVyYXR1cmVJbnB1dAotICAgIE1lc3NhZ2UgaW5wdXRNZXNzYWdlID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU1lc3NhZ2UoKTsKLSAgICBpbnB1dE1lc3NhZ2Uuc2V0UU5hbWUobmV3IFFOYW1lKGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCksICJHZXRUZW1wZXJhdHVyZUlucHV0IikpOwotICAgIGlucHV0TWVzc2FnZS5hZGRQYXJ0KHBhcnQpOwotICAgIGRlZmluaXRpb24uYWRkTWVzc2FnZShpbnB1dE1lc3NhZ2UpOwotCi0gICAgLy8gQ3JlYXRlIGEgUGFydCAtIFRlbXBlcmF0dXJlCi0gICAgcGFydCA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVQYXJ0KCk7Ci0gICAgcGFydC5zZXROYW1lKCJUZW1wZXJhdHVyZSIpOwotICAgIHBhcnQuc2V0VHlwZU5hbWUobmV3IFFOYW1lKFdTRExDb25zdGFudHMuU0NIRU1BX0ZPUl9TQ0hFTUFfVVJJXzIwMDEsICJmbG9hdCIpKTsKLQotICAgIC8vIENyZWF0ZSBhIE1lc3NhZ2UgLSBHZXRUZW1wZXJhdHVyZU91dHB1dAotICAgIE1lc3NhZ2Ugb3V0cHV0TWVzc2FnZSA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVNZXNzYWdlKCk7Ci0gICAgb3V0cHV0TWVzc2FnZS5zZXRRTmFtZShuZXcgUU5hbWUoZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKSwgIkdldFRlbXBlcmF0dXJlT3V0cHV0IikpOwotICAgIG91dHB1dE1lc3NhZ2UuYWRkUGFydChwYXJ0KTsKLSAgICBkZWZpbml0aW9uLmFkZE1lc3NhZ2Uob3V0cHV0TWVzc2FnZSk7Ci0KLSAgICAvLwotICAgIC8vIE5leHQsIGJ1aWxkIGEgUG9ydFR5cGUKLSAgICAvLwotCi0gICAgLy8gQ3JlYXRlIGFuIElucHV0IC0gR2V0VGVtcGVyYXR1cmVJbnB1dAotICAgIElucHV0IGlucHV0ID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUlucHV0KCk7Ci0gICAgaW5wdXQuc2V0TWVzc2FnZShpbnB1dE1lc3NhZ2UpOwotCi0gICAgLy8gQ3JlYXRlIGFuIE91dHB1dCAtIEdldFRlbXBlcmF0dXJlT3V0cHV0Ci0gICAgT3V0cHV0IG91dHB1dCA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVPdXRwdXQoKTsKLSAgICBvdXRwdXQuc2V0TWVzc2FnZShvdXRwdXRNZXNzYWdlKTsKLQotICAgIC8vIENyZWF0ZSBhbiBPcGVyYXRpb24gLSBHZXRUZW1wZXJhdHVyZUZvclppcENvZGUKLSAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU9wZXJhdGlvbigpOwotICAgIG9wZXJhdGlvbi5zZXROYW1lKCJHZXRUZW1wZXJhdHVyZUZvclppcENvZGUiKTsKLSAgICBvcGVyYXRpb24uc2V0SW5wdXQoaW5wdXQpOwotICAgIG9wZXJhdGlvbi5zZXRPdXRwdXQob3V0cHV0KTsKLQotICAgIC8vIENyZWF0ZSBhIFBvcnRUeXBlCi0gICAgUG9ydFR5cGUgcG9ydFR5cGUgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUG9ydFR5cGUoKTsKLSAgICBwb3J0VHlwZS5zZXRRTmFtZShuZXcgUU5hbWUoZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKSwgIkdldFRlbXBlcmF0dXJlSW5mb1NPQVAiKSk7Ci0gICAgcG9ydFR5cGUuYWRkT3BlcmF0aW9uKG9wZXJhdGlvbik7Ci0gICAgZGVmaW5pdGlvbi5hZGRQb3J0VHlwZShwb3J0VHlwZSk7Ci0KLSAgICAvLwotICAgIC8vIE5vdywgbGV0J3Mgd29yayBvbiBCaW5kaW5nCi0gICAgLy8KLQotICAgIC8vIENyZWF0ZSBhIEJpbmRpbmcgLSBHZXRUZW1wZXJhdHVyZUluZm9TT0FQCi0gICAgQmluZGluZyBiaW5kaW5nID0gV1NETEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUJpbmRpbmcoKTsKLSAgICBiaW5kaW5nLnNldFFOYW1lKG5ldyBRTmFtZShkZWZpbml0aW9uLmdldFRhcmdldE5hbWVzcGFjZSgpLCAiR2V0VGVtcGVyYXR1cmVJbmZvU09BUCIpKTsKLSAgICBiaW5kaW5nLnNldFBvcnRUeXBlKHBvcnRUeXBlKTsKLSAgICBkZWZpbml0aW9uLmFkZEJpbmRpbmcoYmluZGluZyk7Ci0KLSAgICAvLyBDcmVhdGUgYSBTT0FQIEJpbmRpbmcKLSAgICBTT0FQQmluZGluZyBzb2FwQmluZGluZyA9IFNPQVBGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTT0FQQmluZGluZygpOwotICAgIHNvYXBCaW5kaW5nLnNldFN0eWxlKCJycGMiKTsKLSAgICBzb2FwQmluZGluZy5zZXRUcmFuc3BvcnRVUkkoImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIpOwotICAgIGJpbmRpbmcuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoc29hcEJpbmRpbmcpOwotCi0gICAgLy8gQ3JlYXRlIGEgQmluZGluZyBPcGVyYXRpb24KLSAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQmluZGluZ09wZXJhdGlvbigpOwotICAgIGJpbmRpbmdPcGVyYXRpb24uc2V0TmFtZSgiR2V0VGVtcGVyYXR1cmVGb3JaaXBDb2RlIik7Ci0gICAgYmluZGluZy5hZGRCaW5kaW5nT3BlcmF0aW9uKGJpbmRpbmdPcGVyYXRpb24pOwotCi0gICAgLy8gQ3JlYXRlIGEgU09BUCBPcGVyYXRpb24KLSAgICBTT0FQT3BlcmF0aW9uIHNvYXBPcGVyYXRpb24gPSBTT0FQRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU09BUE9wZXJhdGlvbigpOwotICAgIHNvYXBPcGVyYXRpb24uc2V0U29hcEFjdGlvblVSSSgiaHR0cDovL3d3dy50ZW1wZXJhdHVyZS5jb20vR2V0VGVtcGVyYXR1cmVGb3JaaXBDb2RlIik7Ci0gICAgYmluZGluZ09wZXJhdGlvbi5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChzb2FwT3BlcmF0aW9uKTsKLQotICAgIC8vIENyZWF0ZSBhIFNPQVAgQm9keQotICAgIFNPQVBCb2R5IHNvYXBCb2R5ID0gU09BUEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNPQVBCb2R5KCk7Ci0gICAgc29hcEJvZHkuc2V0VXNlKCJlbmNvZGVkIik7Ci0gICAgc29hcEJvZHkuZ2V0RW5jb2RpbmdTdHlsZXMoKS5hZGQoImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIik7Ci0gICAgc29hcEJvZHkuc2V0TmFtZXNwYWNlVVJJKCJodHRwOi8vd3d3LnRlbXBlcmF0dXJlLmNvbS8iKTsKLQotICAgIC8vIEFkZCBhIHBhcnQgKFRlbXBlcmF0dXJlKSB0byB0aGUgU09BUCBib2R5IChCdWd6aWxsYSAxMDgxNzYpCi0gICAgamF2YS51dGlsLlZlY3RvciB2ID0gbmV3IGphdmEudXRpbC5WZWN0b3IoKTsKLSAgICB2LmFkZChwYXJ0KTsKLSAgICBzb2FwQm9keS5zZXRQYXJ0cyh2KTsKLSAgICAoKFNPQVBCb2R5SW1wbClzb2FwQm9keSkudXBkYXRlRWxlbWVudCgpOwotCi0gICAgLy8gQ3JlYXRlIGEgQmluZGluZyBJbnB1dAotICAgIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQgPSBXU0RMRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQmluZGluZ0lucHV0KCk7Ci0gICAgYmluZGluZ0lucHV0LmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KHNvYXBCb2R5KTsKLSAgICBiaW5kaW5nT3BlcmF0aW9uLnNldEJpbmRpbmdJbnB1dChiaW5kaW5nSW5wdXQpOwotCi0gICAgLy8gQ3JlYXRlIGEgU09BUCBCb2R5Ci0gICAgc29hcEJvZHkgPSBTT0FQRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU09BUEJvZHkoKTsKLSAgICBzb2FwQm9keS5zZXRVc2UoImVuY29kZWQiKTsKLSAgICBzb2FwQm9keS5nZXRFbmNvZGluZ1N0eWxlcygpLmFkZCgiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iKTsKLSAgICBzb2FwQm9keS5zZXROYW1lc3BhY2VVUkkoImh0dHA6Ly93d3cudGVtcGVyYXR1cmUuY29tLyIpOwotCi0gICAgLy8gQ3JlYXRlIGEgQmluZGluZyBPdXRwdXQKLSAgICBCaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXB1dCA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVCaW5kaW5nT3V0cHV0KCk7Ci0gICAgYmluZGluZ091cHV0LmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KHNvYXBCb2R5KTsKLSAgICBiaW5kaW5nT3BlcmF0aW9uLnNldEJpbmRpbmdPdXRwdXQoYmluZGluZ091cHV0KTsKLQotICAgIC8vCi0gICAgLy8gRmluYWxseSwgd2UgYXJlIGJ1aWxkaW5nIGEgU2VydmljZQotICAgIC8vCi0KLSAgICAvLyBDcmVhdGUgYSBTT0FQIEFkZHJlc3MKLSAgICBTT0FQQWRkcmVzcyBzb2FwQWRkcmVzcyA9IFNPQVBGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTT0FQQWRkcmVzcygpOwotICAgIHNvYXBBZGRyZXNzLnNldExvY2F0aW9uVVJJKCJodHRwOi8vdG9kby1zb21lLWFkZHJlc3MvIik7Ci0KLSAgICAvLyBDcmVhdGUgYSBQb3J0IC0gR2V0VGVtcGVyYXR1cmVJbmZvU09BUAotICAgIFBvcnQgcG9ydCA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVQb3J0KCk7Ci0gICAgcG9ydC5zZXROYW1lKCJHZXRUZW1wZXJhdHVyZUluZm9TT0FQIik7Ci0gICAgcG9ydC5zZXRCaW5kaW5nKGJpbmRpbmcpOwotICAgIHBvcnQuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoc29hcEFkZHJlc3MpOwotCi0gICAgLy8gQ3JlYXRlIGEgU2VydmljZSAtIFRlbXBlcmF0dXJlU2VydmljZQotICAgIFNlcnZpY2Ugc2VydmljZSA9IFdTRExGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTZXJ2aWNlKCk7Ci0gICAgc2VydmljZS5zZXRRTmFtZShuZXcgUU5hbWUoZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKSwgIlRlbXBlcmF0dXJlU2VydmljZSIpKTsKLSAgICBzZXJ2aWNlLmFkZFBvcnQocG9ydCk7Ci0gICAgZGVmaW5pdGlvbi5hZGRTZXJ2aWNlKHNlcnZpY2UpOwotCi0gICAgLy8KLSAgICAvLyBQaGV3LCB3ZSBhcmUgZG9uZS4gTGV0J3Mgc2VyaWFsaXplIGl0LgotICAgIC8vCi0KLSAgICByZXNvdXJjZS5zYXZlKG51bGwpOwotCi0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9XU0RMVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9XU0RMVGVzdHNQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjJkNDYwMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvV1NETFRlc3RzUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIKAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ29tbW9uIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbAotIKAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzOwotCi0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotCi0vKioKLSAqIFRoZSBtYWluIHBsdWctaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIFdTRExUZXN0c1BsdWdpbiBleHRlbmRzIFBsdWdpbgotewotICAvL1RoZSBzaGFyZWQgaW5zdGFuY2UuCi0gIHByaXZhdGUgc3RhdGljIFdTRExUZXN0c1BsdWdpbiBwbHVnaW47Ci0KLSAgLy9SZXNvdXJjZSBidW5kbGUuCi0gIHByaXZhdGUgUmVzb3VyY2VCdW5kbGUgcmVzb3VyY2VCdW5kbGU7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgQnVuZGxlIHBsdWdpbkJ1bmRsZTsKLQotICAvKioKLSAgICogVGhlIGNvbnN0cnVjdG9yLgotICAgKi8KLSAgcHVibGljIFdTRExUZXN0c1BsdWdpbigpCi0gIHsKLSAgICBzdXBlcigpOwotICAgIHBsdWdpbiA9IHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHVwb24gcGx1Zy1pbiBhY3RpdmF0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIHN1cGVyLnN0YXJ0KGNvbnRleHQpOwotICAgIHBsdWdpbkJ1bmRsZSA9IGNvbnRleHQuZ2V0QnVuZGxlKCk7Ci0gIH0KLQotICAvKioKLSAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIHBsdWctaW4gaXMgc3RvcHBlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIHN1cGVyLnN0b3AoY29udGV4dCk7Ci0gICAgcGx1Z2luID0gbnVsbDsKLSAgICByZXNvdXJjZUJ1bmRsZSA9IG51bGw7Ci0gICAgcGx1Z2luQnVuZGxlID0gY29udGV4dC5nZXRCdW5kbGUoKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFdTRExUZXN0c1BsdWdpbiBnZXREZWZhdWx0KCkKLSAgewotICAgIHJldHVybiBwbHVnaW47Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgc3RyaW5nIGZyb20gdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLSAgICogb3IgJ2tleScgaWYgbm90IGZvdW5kLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UmVzb3VyY2VTdHJpbmcoU3RyaW5nIGtleSkKLSAgewotICAgIFJlc291cmNlQnVuZGxlIGJ1bmRsZSA9IFdTRExUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UmVzb3VyY2VCdW5kbGUoKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICByZXR1cm4gKGJ1bmRsZSAhPSBudWxsKSA/IGJ1bmRsZS5nZXRTdHJpbmcoa2V5KSA6IGtleTsKLSAgICB9Ci0gICAgY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJldHVybiBrZXk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLSAgICovCi0gIHB1YmxpYyBSZXNvdXJjZUJ1bmRsZSBnZXRSZXNvdXJjZUJ1bmRsZSgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBpZiAocmVzb3VyY2VCdW5kbGUgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcmVzb3VyY2VCdW5kbGUgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLldTRExUZXN0c1BsdWdpblJlc291cmNlcyIpOwotICAgICAgfQotICAgIH0KLSAgICBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIHgpCi0gICAgewotICAgICAgcmVzb3VyY2VCdW5kbGUgPSBudWxsOwotICAgIH0KLSAgICByZXR1cm4gcmVzb3VyY2VCdW5kbGU7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBpbnN0YWxsIFVSTCBvZiB0aGlzIHBsdWctaW4uCi0gICAqIAotICAgKiBAcmV0dXJuIHRoZSBpbnN0YWxsIFVSTCBvZiB0aGlzIHBsdWctaW4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEluc3RhbGxVUkwoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgcmV0dXJuIEZpbGVMb2NhdG9yLnJlc29sdmUocGx1Z2luQnVuZGxlLmdldEVudHJ5KCIvIikpLmdldEZpbGUoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvZXh0ZW5zaW9ucy9IVFRQRXh0ZW5zaW9uc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9leHRlbnNpb25zL0hUVFBFeHRlbnNpb25zVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzhiOThkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9leHRlbnNpb25zL0hUVFBFeHRlbnNpb25zVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzE0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5leHRlbnNpb25zOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VTZXRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBBZGRyZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLkhUVFBQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5IVFRQVXJsRW5jb2RlZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLmh0dHAuSFRUUFVybFJlcGxhY2VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuaHR0cC5pbnRlcm5hbC5nZW5lcmF0b3IuSFRUUENvbnRlbnRHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5odHRwLmludGVybmFsLnV0aWwuSFRUUENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuZXh0ZW5zaW9uLkNvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25GYWN0b3J5UmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMuV1NETFRlc3RzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWwuRGVmaW5pdGlvbkxvYWRlcjsKLQotCi0vKioKLSAqIFRlc3RzIHRoZSBIVFRQIGJpbmRpbmcgZXh0ZW5zaW9ucy4gCi0gKi8KLXB1YmxpYyBjbGFzcyBIVFRQRXh0ZW5zaW9uc1Rlc3QgZXh0ZW5kcyBXU0RMRXh0ZW5zaW9uc1Rlc3QKLXsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFERFJFU1NfTE9DQVRJT05fVVJJID0gImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIjsgLy8kTk9OLU5MUy0xJAotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIEhUVFBGYWN0b3J5IEhUVFBfRkFDVE9SWSA9IEhUVFBGYWN0b3J5LmVJTlNUQU5DRTsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSFRUUF9MT0NBVElPTl9VUkkgPSAiaHR0cDovL3d3dy5leGFtcGxlLm9yZy9IVFRQVGVzdC9OZXdPcGVyYXRpb24iOwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fQUJTT0xVVEVfUEFUSCA9IFdTRExUZXN0c1BsdWdpbi5nZXRJbnN0YWxsVVJMKCk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBUkdFVF9OQU1FU1BBQ0UgPSAiaHR0cDovL3d3dy5leGFtcGxlLm9yZy9IVFRQVGVzdC8iOyAvLyROT04tTkxTLTEkCi0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFZFUkJfR0VUID0gIkdFVCI7IC8vJE5PTi1OTFMtMSQKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVkVSQl9QVVQgPSAiUFVUIjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCi0gIHsKLSAgICBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgVGVzdFN1aXRlIHN1aXRlID0gbmV3IFRlc3RTdWl0ZSgpOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgSFRUUEV4dGVuc2lvbnNUZXN0KCJIVFRQRXh0ZW5zaW9uc0NyZWF0aW9uIikgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RIVFRQRXh0ZW5zaW9uc0NyZWF0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgSFRUUEV4dGVuc2lvbnNUZXN0KCJFTUZTZXJpYWxpemF0aW9uIikgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RFTUZTZXJpYWxpemF0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgSFRUUEV4dGVuc2lvbnNUZXN0KCJIVFRQRXh0ZW5zaW9uc1JlY29uY2lsaWF0aW9uIikgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RIVFRQRXh0ZW5zaW9uc1JlY29uY2lsaWF0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgSFRUUEV4dGVuc2lvbnNUZXN0KCJIVFRQQ29udGVudEdlbmVyYXRvciIpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0SFRUUENvbnRlbnRHZW5lcmF0b3IoKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICByZXR1cm4gc3VpdGU7Ci0gIH0KLQotICBwdWJsaWMgSFRUUEV4dGVuc2lvbnNUZXN0KFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIobmFtZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SFRUUEV4dGVuc2lvbnNDcmVhdGlvbigpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBEZWZpbml0aW9uTG9hZGVyLmxvYWQoUExVR0lOX0FCU09MVVRFX1BBVEggKyAic2FtcGxlcy9FeHRlbnNpb25zL0hUVFAvSFRUUFRlc3Qud3NkbCIpOyAvLyROT04tTkxTLTEkCi0KLSAgICAgIFN0cmluZyBiaW5kaW5nTmFtZSA9ICJIVFRQVGVzdEhUVFAiOyAvLyROT04tTkxTLTEkCi0gICAgICBRTmFtZSBiaW5kaW5nUU5hbWUgPSBuZXcgUU5hbWUoVEFSR0VUX05BTUVTUEFDRSwgYmluZGluZ05hbWUpOwotICAgICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpZGVmaW5pdGlvbi5nZXRCaW5kaW5nKGJpbmRpbmdRTmFtZSk7Ci0KLSAgICAgIGFkZEhUVFBCaW5kaW5nKGJpbmRpbmcpOwotCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbiliaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb24oIk5ld09wZXJhdGlvbiIsIG51bGwsIG51bGwpOyAvLyROT04tTkxTLTEkCi0KLSAgICAgIGFkZEhUVFBPcGVyYXRpb24oYmluZGluZ09wZXJhdGlvbik7Ci0KLSAgICAgIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEVCaW5kaW5nSW5wdXQoKTsKLQotICAgICAgYWRkSFRUUEJpbmRpbmdJbnB1dChiaW5kaW5nSW5wdXQpOwotCi0gICAgICBhZGRIVFRQQWRkcmVzcyhkZWZpbml0aW9uKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIEFzc2VydC5mYWlsKCJUZXN0IGZhaWxlZCBkdWUgdG8gYW4gZXhjZXB0aW9uOiAiICsgZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCkpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEhUVFBFeHRlbnNpb25zUmVjb25jaWxpYXRpb24oKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvRXh0ZW5zaW9ucy9IVFRQL0hUVFBFeGFtcGxlLndzZGwiLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgICBTdHJpbmcgc2VydmljZU5hbWUgPSAiSFRUUEV4YW1wbGUiOyAvLyROT04tTkxTLTEkCi0gICAgICBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSFRUUEV4YW1wbGUvIjsgLy8kTk9OLU5MUy0xJAotICAgICAgUU5hbWUgc2VydmljZVFOYW1lID0gbmV3IFFOYW1lKHRhcmdldE5hbWVzcGFjZSwgc2VydmljZU5hbWUpOwotICAgICAgU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2UpZGVmaW5pdGlvbi5nZXRTZXJ2aWNlKHNlcnZpY2VRTmFtZSk7Ci0gICAgICBzZXJ2aWNlLnRvU3RyaW5nKCk7Ci0KLSAgICAgIFBvcnQgcG9ydCA9IChQb3J0KXNlcnZpY2UuZ2V0UG9ydCgiSFRUUEV4YW1wbGVIVFRQIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIExpc3QgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzID0gcG9ydC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIGFzc2VydEVxdWFscygxLCBleHRlbnNpYmlsaXR5RWxlbWVudHMuc2l6ZSgpKTsKLSAgICAgIEhUVFBBZGRyZXNzIGh0dHBBZGRyZXNzID0gKEhUVFBBZGRyZXNzKWV4dGVuc2liaWxpdHlFbGVtZW50cy5nZXQoMCk7Ci0KLSAgICAgIFN0cmluZyBsb2NhdGlvblVSSSA9IGh0dHBBZGRyZXNzLmdldExvY2F0aW9uVVJJKCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIiwgbG9jYXRpb25VUkkpOwotCi0gICAgICBjaGVja1N0cmluZ0F0dHJpYnV0ZVJlY29uY2lsaWF0aW9uKAotICAgICAgICBodHRwQWRkcmVzcywKLSAgICAgICAgSFRUUENvbnN0YW50cy5MT0NBVElPTl9VUklfQVRUUklCVVRFLAotICAgICAgICAidGVzdCIsCi0gICAgICAgIEhUVFBQYWNrYWdlLkxpdGVyYWxzLkhUVFBfQUREUkVTU19fTE9DQVRJT05fVVJJKTsKLQotICAgICAgU3RyaW5nIGJpbmRpbmdOYW1lID0gIkhUVFBFeGFtcGxlSFRUUCI7IC8vJE5PTi1OTFMtMSQKLSAgICAgIFFOYW1lIGJpbmRpbmdRTmFtZSA9IG5ldyBRTmFtZSh0YXJnZXROYW1lc3BhY2UsIGJpbmRpbmdOYW1lKTsKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKWRlZmluaXRpb24uZ2V0QmluZGluZyhiaW5kaW5nUU5hbWUpOwotCi0gICAgICBleHRlbnNpYmlsaXR5RWxlbWVudHMgPSBiaW5kaW5nLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgYXNzZXJ0RXF1YWxzKDEsIGV4dGVuc2liaWxpdHlFbGVtZW50cy5zaXplKCkpOwotICAgICAgSFRUUEJpbmRpbmcgaHR0cEJpbmRpbmcgPSAoSFRUUEJpbmRpbmcpZXh0ZW5zaWJpbGl0eUVsZW1lbnRzLmdldCgwKTsKLQotICAgICAgU3RyaW5nIHZlcmIgPSBodHRwQmluZGluZy5nZXRWZXJiKCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoVkVSQl9HRVQsIHZlcmIpOwotCi0gICAgICBjaGVja1N0cmluZ0F0dHJpYnV0ZVJlY29uY2lsaWF0aW9uKGh0dHBCaW5kaW5nLCBIVFRQQ29uc3RhbnRzLlZFUkJfQVRUUklCVVRFLCBWRVJCX1BVVCwgSFRUUFBhY2thZ2UuTGl0ZXJhbHMuSFRUUF9CSU5ESU5HX19WRVJCKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIEFzc2VydC5mYWlsKCJUZXN0IGZhaWxlZCBkdWUgdG8gYW4gZXhjZXB0aW9uOiAiICsgZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCkpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFRoaXMgbWV0aG9kIGxvYWRzIGEgV1NETCBtb2RlbCB0aGVuIHNhdmVzIGl0IHVzaW5nIHRoZSBkZWZhdWx0IEVNRiBzZXJpYWxpemF0aW9uCi0gICAqIGluc3RlYWQgb2YgdGhlIFdTREwgWE1MIGZvcm1hdCwgdGhlbiBsb2FkcyBpdCBhZ2Fpbi4gVGhlIGludGVudCBpcyB0byBleGVyY2lzZQotICAgKiB0aGUgRU1GIGUqIG1ldGhvZHMgdG8gYWlkIGluIGlkZW50aWZ5aW5nIHJlYWwgY29kZSBjb3ZlcmFnZSBpc3N1ZXMuICAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RFTUZTZXJpYWxpemF0aW9uKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL0V4dGVuc2lvbnMvSFRUUC9IVFRQRXhhbXBsZS53c2RsIiwgdHJ1ZSk7IC8vJE5PTi1OTFMtMSQKLQotICAgICAgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7Ci0gICAgICBVUkkgZmlsZVVSSSA9IFVSSS5jcmVhdGVGaWxlVVJJKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvZ2VuZXJhdGVkL0hUVFBFeGFtcGxlLnhtbCIpOwotICAgICAgUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShmaWxlVVJJKTsKLSAgICAgIHJlc291cmNlLmdldENvbnRlbnRzKCkuYWRkKGRlZmluaXRpb24pOwotICAgICAgcmVzb3VyY2Uuc2F2ZShudWxsKTsKLSAgICAgIHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOwotICAgICAgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZShmaWxlVVJJLCB0cnVlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIEFzc2VydC5mYWlsKCJUZXN0IGZhaWxlZCBkdWUgdG8gYW4gZXhjZXB0aW9uOiAiICsgZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCkpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEhUVFBDb250ZW50R2VuZXJhdG9yKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL0V4dGVuc2lvbnMvSFRUUC9IVFRQVGVzdC53c2RsIik7IC8vJE5PTi1OTFMtMSQKLQotICAgICAgSFRUUENvbnRlbnRHZW5lcmF0b3IgY29udGVudEdlbmVyYXRvciA9IChIVFRQQ29udGVudEdlbmVyYXRvcilDb250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uRmFjdG9yeVJlZ2lzdHJ5LmdldEluc3RhbmNlKCkuZ2V0R2VuZXJhdG9yQ2xhc3NGcm9tTmFtZSgKLSAgICAgICAgIkhUVFAiKTsKLSAgICAgIFN0cmluZyBsb2NhdGlvblVSSSA9ICJodHRwOi8vdGVzdC5vcmcvZXhhbXBsZSI7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGNvbnRlbnRHZW5lcmF0b3Iuc2V0QWRkcmVzc0xvY2F0aW9uKGxvY2F0aW9uVVJJKTsKLSAgICAgIGNvbnRlbnRHZW5lcmF0b3Iuc2V0VmVyYihIVFRQQ29udGVudEdlbmVyYXRvci5WRVJCX0dFVCk7Ci0KLSAgICAgIFN0cmluZyBzZXJ2aWNlTmFtZSA9ICJIVFRQVGVzdCI7IC8vJE5PTi1OTFMtMSQKLSAgICAgIFFOYW1lIHNlcnZpY2VRTmFtZSA9IG5ldyBRTmFtZShUQVJHRVRfTkFNRVNQQUNFLCBzZXJ2aWNlTmFtZSk7Ci0gICAgICBTZXJ2aWNlIHNlcnZpY2UgPSAoU2VydmljZSlkZWZpbml0aW9uLmdldFNlcnZpY2Uoc2VydmljZVFOYW1lKTsKLQotICAgICAgUG9ydCBwb3J0ID0gKFBvcnQpc2VydmljZS5nZXRQb3J0KCJIVFRQVGVzdEhUVFAiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgTGlzdCBleHRlbnNpYmlsaXR5RWxlbWVudHMgPSBwb3J0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgYXNzZXJ0RXF1YWxzKDAsIGV4dGVuc2liaWxpdHlFbGVtZW50cy5zaXplKCkpOwotICAgICAgY29udGVudEdlbmVyYXRvci5nZW5lcmF0ZVBvcnRDb250ZW50KHBvcnQpOwotCi0gICAgICBleHRlbnNpYmlsaXR5RWxlbWVudHMgPSBwb3J0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgYXNzZXJ0RXF1YWxzKDEsIGV4dGVuc2liaWxpdHlFbGVtZW50cy5zaXplKCkpOwotICAgICAgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgZXh0ZW5zaWJpbGl0eUVsZW1lbnQgPSAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpZXh0ZW5zaWJpbGl0eUVsZW1lbnRzLmdldCgwKTsKLSAgICAgIGFzc2VydFRydWUoZXh0ZW5zaWJpbGl0eUVsZW1lbnQgaW5zdGFuY2VvZiBIVFRQQWRkcmVzcyk7Ci0gICAgICBIVFRQQWRkcmVzcyBodHRwQWRkcmVzcyA9IChIVFRQQWRkcmVzcylleHRlbnNpYmlsaXR5RWxlbWVudDsKLSAgICAgIGFzc2VydEVxdWFscyhsb2NhdGlvblVSSSwgaHR0cEFkZHJlc3MuZ2V0TG9jYXRpb25VUkkoKSk7Ci0KLSAgICAgIFFOYW1lIGJpbmRpbmdRTmFtZSA9IG5ldyBRTmFtZShUQVJHRVRfTkFNRVNQQUNFLCAiSFRUUFRlc3RIVFRQIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKWRlZmluaXRpb24uZ2V0QmluZGluZyhiaW5kaW5nUU5hbWUpOwotCi0gICAgICBRTmFtZSBwb3J0VHlwZVFOYW1lID0gbmV3IFFOYW1lKFRBUkdFVF9OQU1FU1BBQ0UsICJIVFRQVGVzdCIpOyAvLyROT04tTkxTLTEkCi0gICAgICBQb3J0VHlwZSBwb3J0VHlwZSA9IChQb3J0VHlwZSlkZWZpbml0aW9uLmdldFBvcnRUeXBlKHBvcnRUeXBlUU5hbWUpOwotCi0gICAgICBjb250ZW50R2VuZXJhdG9yLmdlbmVyYXRlQmluZGluZ0NvbnRlbnQoYmluZGluZywgcG9ydFR5cGUpOwotCi0gICAgICAvLyBUT0RPIENvbXBsZXRlIHRoaXMgdGVzdC4KLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIEFzc2VydC5mYWlsKCJUZXN0IGZhaWxlZCBkdWUgdG8gYW4gZXhjZXB0aW9uOiAiICsgZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCkpOyAvLyROT04tTkxTLTEkCi0gICAgfQotCi0gIH0KLQotICBwcml2YXRlIHZvaWQgYWRkSFRUUEFkZHJlc3MoRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICB7Ci0gICAgSFRUUEFkZHJlc3MgaHR0cEFkZHJlc3MgPSBIVFRQX0ZBQ1RPUlkuY3JlYXRlSFRUUEFkZHJlc3MoKTsKLSAgICBodHRwQWRkcmVzcy5zZXRMb2NhdGlvblVSSShBRERSRVNTX0xPQ0FUSU9OX1VSSSk7Ci0KLSAgICBodHRwQWRkcmVzcy50b1N0cmluZygpOwotCi0gICAgU3RyaW5nIHNlcnZpY2VOYW1lID0gIkhUVFBUZXN0IjsgLy8kTk9OLU5MUy0xJAotICAgIFFOYW1lIHNlcnZpY2VRTmFtZSA9IG5ldyBRTmFtZShUQVJHRVRfTkFNRVNQQUNFLCBzZXJ2aWNlTmFtZSk7Ci0gICAgU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2UpZGVmaW5pdGlvbi5nZXRTZXJ2aWNlKHNlcnZpY2VRTmFtZSk7Ci0gICAgc2VydmljZS50b1N0cmluZygpOwotCi0gICAgUG9ydCBwb3J0ID0gKFBvcnQpc2VydmljZS5nZXRQb3J0KCJIVFRQVGVzdEhUVFAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHBvcnQuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoaHR0cEFkZHJlc3MpOwotICAgIHBvcnQudG9TdHJpbmcoKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBhZGRIVFRQQmluZGluZyhCaW5kaW5nIGJpbmRpbmcpCi0gIHsKLSAgICBiaW5kaW5nLnRvU3RyaW5nKCk7Ci0KLSAgICBIVFRQQmluZGluZyBodHRwQmluZGluZyA9IEhUVFBfRkFDVE9SWS5jcmVhdGVIVFRQQmluZGluZygpOwotICAgIGJpbmRpbmcuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoaHR0cEJpbmRpbmcpOwotCi0gICAgaHR0cEJpbmRpbmcuc2V0VmVyYihWRVJCX0dFVCk7Ci0KLSAgICBodHRwQmluZGluZy50b1N0cmluZygpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGFkZEhUVFBCaW5kaW5nSW5wdXQoQmluZGluZ0lucHV0IGJpbmRpbmdJbnB1dCkKLSAgewotICAgIGJpbmRpbmdJbnB1dC50b1N0cmluZygpOwotCi0gICAgSFRUUFVybEVuY29kZWQgaHR0cFVSTEVuY29kZWQgPSBIVFRQX0ZBQ1RPUlkuY3JlYXRlSFRUUFVybEVuY29kZWQoKTsKLSAgICBiaW5kaW5nSW5wdXQuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoaHR0cFVSTEVuY29kZWQpOwotCi0gICAgYmluZGluZ0lucHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLmNsZWFyKCk7Ci0KLSAgICBIVFRQVXJsUmVwbGFjZW1lbnQgaHR0cFVSTFJlcGxhY2VtZW50ID0gSFRUUF9GQUNUT1JZLmNyZWF0ZUhUVFBVcmxSZXBsYWNlbWVudCgpOwotICAgIGJpbmRpbmdJbnB1dC5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChodHRwVVJMUmVwbGFjZW1lbnQpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGFkZEhUVFBPcGVyYXRpb24oQmluZGluZ09wZXJhdGlvbiBiaW5kaW5nT3BlcmF0aW9uKQotICB7Ci0gICAgYmluZGluZ09wZXJhdGlvbi50b1N0cmluZygpOwotCi0gICAgSFRUUE9wZXJhdGlvbiBodHRwT3BlcmF0aW9uID0gSFRUUF9GQUNUT1JZLmNyZWF0ZUhUVFBPcGVyYXRpb24oKTsKLQotICAgIGh0dHBPcGVyYXRpb24uc2V0TG9jYXRpb25VUkkoSFRUUF9MT0NBVElPTl9VUkkpOwotCi0gICAgaHR0cE9wZXJhdGlvbi50b1N0cmluZygpOwotCi0gICAgYmluZGluZ09wZXJhdGlvbi5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChodHRwT3BlcmF0aW9uKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9leHRlbnNpb25zL01JTUVFeHRlbnNpb25zVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL2V4dGVuc2lvbnMvTUlNRUV4dGVuc2lvbnNUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlZDgyNWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL2V4dGVuc2lvbnMvTUlNRUV4dGVuc2lvbnNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLmV4dGVuc2lvbnM7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VTZXRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVDb250ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLm1pbWUuTUlNRU1pbWVYbWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5taW1lLk1JTUVNdWx0aXBhcnRSZWxhdGVkOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcubWltZS5NSU1FUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJvZHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLldTRExUZXN0c1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsLkRlZmluaXRpb25Mb2FkZXI7Ci0KLQotLyoqCi0gKiBUZXN0cyB0aGUgTUlNRSBiaW5kaW5nIGV4dGVuc2lvbnMuIAotICovCi1wdWJsaWMgY2xhc3MgTUlNRUV4dGVuc2lvbnNUZXN0IGV4dGVuZHMgVGVzdENhc2UKLXsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTUlNRUZhY3RvcnkgTUlNRV9GQUNUT1JZID0gTUlNRUZhY3RvcnkuZUlOU1RBTkNFOwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFNPQVBGYWN0b3J5IFNPQVBfRkFDVE9SWSA9IFNPQVBGYWN0b3J5LmVJTlNUQU5DRTsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0FCU09MVVRFX1BBVEggPSBXU0RMVGVzdHNQbHVnaW4uZ2V0SW5zdGFsbFVSTCgpOwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQVJHRVRfTkFNRVNQQUNFID0gImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTUlNRVRlc3QiOyAvLyROT04tTkxTLTEkCi0KLSAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKLSAgewotICAgIGp1bml0LnRleHR1aS5UZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICBUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKCk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBNSU1FRXh0ZW5zaW9uc1Rlc3QoIk1JTUVFeHRlbnNpb25zQ3JlYXRpb24iKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIHByb3RlY3RlZCB2b2lkIHJ1blRlc3QoKQotICAgICAgICB7Ci0gICAgICAgICAgdGVzdE1JTUVFeHRlbnNpb25zQ3JlYXRpb24oKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICBzdWl0ZS5hZGRUZXN0KG5ldyBNSU1FRXh0ZW5zaW9uc1Rlc3QoIkVNRlNlcmlhbGl6YXRpb24iKSAvLyROT04tTkxTLTEkCi0gICAgICB7Ci0gICAgICAgIHByb3RlY3RlZCB2b2lkIHJ1blRlc3QoKQotICAgICAgICB7Ci0gICAgICAgICAgdGVzdE1JTUVFTUZTZXJpYWxpemF0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgTUlNRUV4dGVuc2lvbnNUZXN0KCJNSU1FRXh0ZW5zaW9uc1JlY29uY2lsaWF0aW9uIikgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RNSU1FRXh0ZW5zaW9uc1JlY29uY2lsaWF0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgcmV0dXJuIHN1aXRlOwotICB9Ci0KLSAgcHVibGljIE1JTUVFeHRlbnNpb25zVGVzdChTdHJpbmcgbmFtZSkKLSAgewotICAgIHN1cGVyKG5hbWUpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE1JTUVFeHRlbnNpb25zQ3JlYXRpb24oKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvRXh0ZW5zaW9ucy9NSU1FL01JTUVUZXN0LndzZGwiKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgICBTdHJpbmcgYmluZGluZ05hbWUgPSAiTUlNRVRlc3RCaW5kaW5nIjsgLy8kTk9OLU5MUy0xJAotICAgICAgUU5hbWUgYmluZGluZ1FOYW1lID0gbmV3IFFOYW1lKFRBUkdFVF9OQU1FU1BBQ0UsIGJpbmRpbmdOYW1lKTsKLSAgICAgIEJpbmRpbmcgYmluZGluZyA9IChCaW5kaW5nKWRlZmluaXRpb24uZ2V0QmluZGluZyhiaW5kaW5nUU5hbWUpOwotCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbiliaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb24oInRlc3RPcGVyYXRpb24iLCBudWxsLCBudWxsKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgICBCaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXRwdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEVCaW5kaW5nT3V0cHV0KCk7Ci0KLSAgICAgIE1JTUVNdWx0aXBhcnRSZWxhdGVkIG11bHRpcGFydCA9IE1JTUVfRkFDVE9SWS5jcmVhdGVNSU1FTXVsdGlwYXJ0UmVsYXRlZCgpOwotICAgICAgYmluZGluZ091dHB1dC5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChtdWx0aXBhcnQpOwotICAgICAgbXVsdGlwYXJ0LnRvU3RyaW5nKCk7Ci0KLSAgICAgIE1JTUVQYXJ0IG1pbWVQYXJ0ID0gTUlNRV9GQUNUT1JZLmNyZWF0ZU1JTUVQYXJ0KCk7Ci0gICAgICBtdWx0aXBhcnQuYWRkTUlNRVBhcnQobWltZVBhcnQpOwotCi0gICAgICBTT0FQQm9keSBzb2FwQm9keSA9IFNPQVBfRkFDVE9SWS5jcmVhdGVTT0FQQm9keSgpOwotICAgICAgc29hcEJvZHkuc2V0VXNlKCJsaXRlcmFsIik7Ci0gICAgICBtaW1lUGFydC5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChzb2FwQm9keSk7Ci0gICAgICBtaW1lUGFydC50b1N0cmluZygpOwotCi0gICAgICBtaW1lUGFydCA9IE1JTUVfRkFDVE9SWS5jcmVhdGVNSU1FUGFydCgpOwotICAgICAgbXVsdGlwYXJ0LmFkZE1JTUVQYXJ0KG1pbWVQYXJ0KTsKLQotICAgICAgTUlNRUNvbnRlbnQgbWltZUNvbnRlbnQgPSBNSU1FX0ZBQ1RPUlkuY3JlYXRlTUlNRUNvbnRlbnQoKTsKLSAgICAgIG1pbWVDb250ZW50LnNldFBhcnQoInJlc3BvbnNlRGF0YSIpOwotICAgICAgbWltZUNvbnRlbnQuc2V0VHlwZSgidGV4dC9iaW5hcnkiKTsKLSAgICAgIG1pbWVDb250ZW50LnRvU3RyaW5nKCk7Ci0gICAgICAKLSAgICAgIG1pbWVQYXJ0LmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KG1pbWVDb250ZW50KTsKLQotICAgICAgTGlzdCBtaW1lUGFydHMgPSBtdWx0aXBhcnQuZ2V0TUlNRVBhcnRzKCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoMiwgbWltZVBhcnRzLnNpemUoKSk7Ci0gICAgICAKLSAgICAgIE1JTUVNaW1lWG1sIG1pbWVYTUwgPSBNSU1FX0ZBQ1RPUlkuY3JlYXRlTUlNRU1pbWVYbWwoKTsKLSAgICAgIGJpbmRpbmdPdXRwdXQuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQobWltZVhNTCk7Ci0gICAgICBtaW1lWE1MLnNldFBhcnQoInhtbERhdGEiKTsKLSAgICAgIG1pbWVYTUwudG9TdHJpbmcoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIEFzc2VydC5mYWlsKCJUZXN0IGZhaWxlZCBkdWUgdG8gYW4gZXhjZXB0aW9uOiAiICsgZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCkpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE1JTUVFeHRlbnNpb25zUmVjb25jaWxpYXRpb24oKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvRXh0ZW5zaW9ucy9NSU1FL01JTUVFeGFtcGxlLndzZGwiLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAotICAgICAgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSA9ICJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01JTUVFeGFtcGxlIjsgLy8kTk9OLU5MUy0xJAotICAgICAgU3RyaW5nIGJpbmRpbmdOYW1lID0gIk1JTUVFeGFtcGxlQmluZGluZyI7IC8vJE5PTi1OTFMtMSQKLSAgICAgIFFOYW1lIGJpbmRpbmdRTmFtZSA9IG5ldyBRTmFtZSh0YXJnZXROYW1lc3BhY2UsIGJpbmRpbmdOYW1lKTsKLSAgICAgIGRlZmluaXRpb24uZ2V0QmluZGluZyhiaW5kaW5nUU5hbWUpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgQXNzZXJ0LmZhaWwoIlRlc3QgZmFpbGVkIGR1ZSB0byBhbiBleGNlcHRpb246ICIgKyBlLmdldExvY2FsaXplZE1lc3NhZ2UoKSk7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogVGhpcyBtZXRob2QgbG9hZHMgYSBXU0RMIG1vZGVsIHRoZW4gc2F2ZXMgaXQgdXNpbmcgdGhlIGRlZmF1bHQgRU1GIHNlcmlhbGl6YXRpb24KLSAgICogaW5zdGVhZCBvZiB0aGUgV1NETCBYTUwgZm9ybWF0LCB0aGVuIGxvYWRzIGl0IGFnYWluLiBUaGUgaW50ZW50IGlzIHRvIGV4ZXJjaXNlCi0gICAqIHRoZSBFTUYgZSogbWV0aG9kcyB0byBhaWQgaW4gaWRlbnRpZnlpbmcgcmVhbCBjb2RlIGNvdmVyYWdlIGlzc3Vlcy4gIAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE1JTUVFTUZTZXJpYWxpemF0aW9uKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL0V4dGVuc2lvbnMvTUlNRS9NSU1FRXhhbXBsZS53c2RsIiwgdHJ1ZSk7IC8vJE5PTi1OTFMtMSQKLQotICAgICAgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7Ci0gICAgICBVUkkgZmlsZVVSSSA9IFVSSS5jcmVhdGVGaWxlVVJJKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvZ2VuZXJhdGVkL01JTUVFeGFtcGxlLnhtbCIpOwotICAgICAgUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShmaWxlVVJJKTsKLSAgICAgIHJlc291cmNlLmdldENvbnRlbnRzKCkuYWRkKGRlZmluaXRpb24pOwotICAgICAgcmVzb3VyY2Uuc2F2ZShudWxsKTsKLSAgICAgIHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOwotICAgICAgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZShmaWxlVVJJLCBmYWxzZSk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBBc3NlcnQuZmFpbCgiVGVzdCBmYWlsZWQgZHVlIHRvIGFuIGV4Y2VwdGlvbjogIiArIGUuZ2V0TG9jYWxpemVkTWVzc2FnZSgpKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9leHRlbnNpb25zL1NPQVBFeHRlbnNpb25zVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL2V4dGVuc2lvbnMvU09BUEV4dGVuc2lvbnNUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwNGMyZDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL2V4dGVuc2lvbnMvU09BUEV4dGVuc2lvbnNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLmV4dGVuc2lvbnM7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0VMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VTZXRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0ZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5TZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQQWRkcmVzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEJpbmRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBCb2R5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5iaW5kaW5nLnNvYXAuU09BUEZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5TT0FQSGVhZGVyRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLlNPQVBQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmJpbmRpbmcuc29hcC5pbnRlcm5hbC5nZW5lcmF0b3IuU09BUENvbnRlbnRHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuYmluZGluZy5zb2FwLmludGVybmFsLnV0aWwuU09BUENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5nZW5lcmF0b3IuZXh0ZW5zaW9uLkNvbnRlbnRHZW5lcmF0b3JFeHRlbnNpb25GYWN0b3J5UmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMuV1NETFRlc3RzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWwuRGVmaW5pdGlvbkxvYWRlcjsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotLyoqCi0gKiBUZXN0cyB0aGUgU09BUCBiaW5kaW5nIGV4dGVuc2lvbnMuIAotICovCi1wdWJsaWMgY2xhc3MgU09BUEV4dGVuc2lvbnNUZXN0IGV4dGVuZHMgV1NETEV4dGVuc2lvbnNUZXN0Ci17Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIVFRQX1RSQU5TUE9SVF9VUkkgPSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIjsgLy8kTk9OLU5MUy0xJAotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBMT0NBVElPTl9VUkkgPSAiaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iOyAvLyROT04tTkxTLTEkCi0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9BQlNPTFVURV9QQVRIID0gV1NETFRlc3RzUGx1Z2luLmdldEluc3RhbGxVUkwoKTsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU09BUF9BQ1RJT05fVVJJID0gImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvU09BUFRlc3QvTmV3T3BlcmF0aW9uIjsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTT0FQRmFjdG9yeSBTT0FQX0ZBQ1RPUlkgPSBTT0FQRmFjdG9yeS5lSU5TVEFOQ0U7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNUWUxFX0RPQ1VNRU5UID0gImRvY3VtZW50IjsgLy8kTk9OLU5MUy0xJAotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTVFlMRV9SUEMgPSAicnBjIjsgLy8kTk9OLU5MUy0xJAotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBVU0VfTElURVJBTCA9ICJsaXRlcmFsIjsgLy8kTk9OLU5MUy0xJAotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBVU0VfRU5DT0RFRCA9ICJlbmNvZGVkIjsgLy8kTk9OLU5MUy0xJAotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCi0gIHsKLSAgICBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgVGVzdFN1aXRlIHN1aXRlID0gbmV3IFRlc3RTdWl0ZSgpOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgU09BUEV4dGVuc2lvbnNUZXN0KCJTT0FQRXh0ZW5zaW9uc0NyZWF0aW9uIikgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RTT0FQRXh0ZW5zaW9uc0NyZWF0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgU09BUEV4dGVuc2lvbnNUZXN0KCJFTUZTZXJpYWxpemF0aW9uIikgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RFTUZTZXJpYWxpemF0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgU09BUEV4dGVuc2lvbnNUZXN0KCJTT0FQRXh0ZW5zaW9uc1JlY29uY2lsaWF0aW9uIikgLy8kTk9OLU5MUy0xJAotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RTT0FQRXh0ZW5zaW9uc1JlY29uY2lsaWF0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgc3VpdGUuYWRkVGVzdChuZXcgU09BUEV4dGVuc2lvbnNUZXN0KCJTT0FQQ29udGVudEdlbmVyYXRvciIpIC8vJE5PTi1OTFMtMSQKLSAgICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICB0ZXN0U09BUENvbnRlbnRHZW5lcmF0b3IoKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICByZXR1cm4gc3VpdGU7Ci0gIH0KLQotICBwdWJsaWMgU09BUEV4dGVuc2lvbnNUZXN0KFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIobmFtZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0U09BUEV4dGVuc2lvbnNDcmVhdGlvbigpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSBEZWZpbml0aW9uTG9hZGVyLmxvYWQoUExVR0lOX0FCU09MVVRFX1BBVEggKyAic2FtcGxlcy9FeHRlbnNpb25zL1NPQVAvU09BUFRlc3Qud3NkbCIpOyAvLyROT04tTkxTLTEkCi0KLSAgICAgIFN0cmluZyBiaW5kaW5nTmFtZSA9ICJTT0FQVGVzdFNPQVAiOyAvLyROT04tTkxTLTEkCi0gICAgICBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvU09BUFRlc3QvIjsgLy8kTk9OLU5MUy0xJAotICAgICAgUU5hbWUgYmluZGluZ1FOYW1lID0gbmV3IFFOYW1lKHRhcmdldE5hbWVzcGFjZSwgYmluZGluZ05hbWUpOwotICAgICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpZGVmaW5pdGlvbi5nZXRCaW5kaW5nKGJpbmRpbmdRTmFtZSk7Ci0KLSAgICAgIGFkZFNPQVBCaW5kaW5nKGJpbmRpbmcpOwotCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbiliaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb24oIk5ld09wZXJhdGlvbiIsIG51bGwsIG51bGwpOyAvLyROT04tTkxTLTEkCi0KLSAgICAgIGFkZFNPQVBPcGVyYXRpb24oYmluZGluZ09wZXJhdGlvbik7Ci0KLSAgICAgIEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEVCaW5kaW5nSW5wdXQoKTsKLQotICAgICAgYWRkU09BUEJpbmRpbmdJbnB1dChiaW5kaW5nSW5wdXQpOwotCi0gICAgICBCaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXRwdXQgPSBiaW5kaW5nT3BlcmF0aW9uLmdldEVCaW5kaW5nT3V0cHV0KCk7Ci0KLSAgICAgIGFkZFNPQVBCaW5kaW5nT3V0cHV0KGJpbmRpbmdPdXRwdXQpOwotCi0gICAgICBTdHJpbmcgZmF1bHROYW1lID0gImZhdWx0IjsgLy8kTk9OLU5MUy0xJAotICAgICAgQmluZGluZ0ZhdWx0IGJpbmRpbmdGYXVsdCA9IChCaW5kaW5nRmF1bHQpYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nRmF1bHQoZmF1bHROYW1lKTsKLQotICAgICAgYWRkU09BUEJpbmRpbmdGYXVsdChiaW5kaW5nRmF1bHQpOwotCi0gICAgICBhZGRTT0FQQWRkcmVzcyhkZWZpbml0aW9uKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIEFzc2VydC5mYWlsKCJUZXN0IGZhaWxlZCBkdWUgdG8gYW4gZXhjZXB0aW9uOiAiICsgZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCkpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFNPQVBDb250ZW50R2VuZXJhdG9yKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL0V4dGVuc2lvbnMvU09BUC9TT0FQVGVzdC53c2RsIik7IC8vJE5PTi1OTFMtMSQKLQotICAgICAgU09BUENvbnRlbnRHZW5lcmF0b3IgY29udGVudEdlbmVyYXRvciA9IChTT0FQQ29udGVudEdlbmVyYXRvcilDb250ZW50R2VuZXJhdG9yRXh0ZW5zaW9uRmFjdG9yeVJlZ2lzdHJ5LmdldEluc3RhbmNlKCkuZ2V0R2VuZXJhdG9yQ2xhc3NGcm9tTmFtZSgKLSAgICAgICAgIlNPQVAiKTsKLSAgICAgIFN0cmluZyBsb2NhdGlvblVSSSA9ICJodHRwOi8vdGVzdC5vcmcvZXhhbXBsZSI7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGNvbnRlbnRHZW5lcmF0b3Iuc2V0QWRkcmVzc0xvY2F0aW9uKGxvY2F0aW9uVVJJKTsKLSAgICAgIGNvbnRlbnRHZW5lcmF0b3Iuc2V0U3R5bGUoU09BUENvbnRlbnRHZW5lcmF0b3IuU1RZTEVfRE9DVU1FTlQpOwotCi0gICAgICBTdHJpbmcgc2VydmljZU5hbWUgPSAiU09BUFRlc3QiOyAvLyROT04tTkxTLTEkCi0gICAgICBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvU09BUFRlc3QvIjsgLy8kTk9OLU5MUy0xJCAKLSAgICAgIFFOYW1lIHNlcnZpY2VRTmFtZSA9IG5ldyBRTmFtZSh0YXJnZXROYW1lc3BhY2UsIHNlcnZpY2VOYW1lKTsKLSAgICAgIFNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKWRlZmluaXRpb24uZ2V0U2VydmljZShzZXJ2aWNlUU5hbWUpOwotCi0gICAgICBQb3J0IHBvcnQgPSAoUG9ydClzZXJ2aWNlLmdldFBvcnQoIlNPQVBUZXN0U09BUCIpOyAvLyROT04tTkxTLTEkCi0gICAgICBMaXN0IGV4dGVuc2liaWxpdHlFbGVtZW50cyA9IHBvcnQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoMCwgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzLnNpemUoKSk7Ci0gICAgICBjb250ZW50R2VuZXJhdG9yLmdlbmVyYXRlUG9ydENvbnRlbnQocG9ydCk7Ci0KLSAgICAgIGV4dGVuc2liaWxpdHlFbGVtZW50cyA9IHBvcnQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoMSwgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzLnNpemUoKSk7Ci0gICAgICBFeHRlbnNpYmlsaXR5RWxlbWVudCBleHRlbnNpYmlsaXR5RWxlbWVudCA9IChFeHRlbnNpYmlsaXR5RWxlbWVudClleHRlbnNpYmlsaXR5RWxlbWVudHMuZ2V0KDApOwotICAgICAgYXNzZXJ0VHJ1ZShleHRlbnNpYmlsaXR5RWxlbWVudCBpbnN0YW5jZW9mIFNPQVBBZGRyZXNzKTsKLSAgICAgIFNPQVBBZGRyZXNzIHNvYXBBZGRyZXNzID0gKFNPQVBBZGRyZXNzKWV4dGVuc2liaWxpdHlFbGVtZW50OwotICAgICAgYXNzZXJ0RXF1YWxzKGxvY2F0aW9uVVJJLCBzb2FwQWRkcmVzcy5nZXRMb2NhdGlvblVSSSgpKTsKLQotICAgICAgUU5hbWUgYmluZGluZ1FOYW1lID0gbmV3IFFOYW1lKHRhcmdldE5hbWVzcGFjZSwgIlNPQVBUZXN0U09BUCIpOyAvLyROT04tTkxTLTEkCi0gICAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZylkZWZpbml0aW9uLmdldEJpbmRpbmcoYmluZGluZ1FOYW1lKTsKLQotICAgICAgUU5hbWUgcG9ydFR5cGVRTmFtZSA9IG5ldyBRTmFtZSh0YXJnZXROYW1lc3BhY2UsICJTT0FQVGVzdCIpOyAvLyROT04tTkxTLTEkCi0gICAgICBQb3J0VHlwZSBwb3J0VHlwZSA9IChQb3J0VHlwZSlkZWZpbml0aW9uLmdldFBvcnRUeXBlKHBvcnRUeXBlUU5hbWUpOwotCi0gICAgICBjb250ZW50R2VuZXJhdG9yLmdlbmVyYXRlQmluZGluZ0NvbnRlbnQoYmluZGluZywgcG9ydFR5cGUpOwotCi0gICAgICAvLyBUT0RPIENvbXBsZXRlIHRoaXMgdGVzdC4KLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIEFzc2VydC5mYWlsKCJUZXN0IGZhaWxlZCBkdWUgdG8gYW4gZXhjZXB0aW9uOiAiICsgZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCkpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFRoaXMgbWV0aG9kIGxvYWRzIGEgV1NETCBtb2RlbCB0aGVuIHNhdmVzIGl0IHVzaW5nIHRoZSBkZWZhdWx0IEVNRiBzZXJpYWxpemF0aW9uCi0gICAqIGluc3RlYWQgb2YgdGhlIFdTREwgWE1MIGZvcm1hdCwgdGhlbiBsb2FkcyBpdCBhZ2Fpbi4gVGhlIGludGVudCBpcyB0byBleGVyY2lzZQotICAgKiB0aGUgRU1GIGUqIG1ldGhvZHMgdG8gYWlkIGluIGlkZW50aWZ5aW5nIHJlYWwgY29kZSBjb3ZlcmFnZSBpc3N1ZXMuICAKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RFTUZTZXJpYWxpemF0aW9uKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL0V4dGVuc2lvbnMvU09BUC9Eb2N1bWVudExpdGVyYWxTT0FQRXhhbXBsZS53c2RsIiwgdHJ1ZSk7IC8vJE5PTi1OTFMtMSQKLQotICAgICAgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7Ci0gICAgICBVUkkgZmlsZVVSSSA9IFVSSS5jcmVhdGVGaWxlVVJJKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvZ2VuZXJhdGVkL0RvY3VtZW50TGl0ZXJhbFNPQVBFeGFtcGxlLnhtbCIpOwotICAgICAgUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShmaWxlVVJJKTsKLSAgICAgIHJlc291cmNlLmdldENvbnRlbnRzKCkuYWRkKGRlZmluaXRpb24pOwotICAgICAgcmVzb3VyY2Uuc2F2ZShudWxsKTsKLSAgICAgIHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOwotICAgICAgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZShmaWxlVVJJLCBmYWxzZSk7Ci0KLSAgICAgIGRlZmluaXRpb24gPSBEZWZpbml0aW9uTG9hZGVyLmxvYWQoUExVR0lOX0FCU09MVVRFX1BBVEggKyAic2FtcGxlcy9FeHRlbnNpb25zL1NPQVAvUlBDTGl0ZXJhbFNPQVBFeGFtcGxlLndzZGwiLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAotICAgICAgZmlsZVVSSSA9IFVSSS5jcmVhdGVGaWxlVVJJKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvZ2VuZXJhdGVkL1JQQ0xpdGVyYWxTT0FQRXhhbXBsZS54bWwiKTsKLSAgICAgIHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOwotICAgICAgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShmaWxlVVJJKTsKLSAgICAgIHJlc291cmNlLmdldENvbnRlbnRzKCkuYWRkKGRlZmluaXRpb24pOwotICAgICAgcmVzb3VyY2Uuc2F2ZShudWxsKTsKLSAgICAgIHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOwotICAgICAgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZShmaWxlVVJJLCB0cnVlKTsKLQotICAgICAgZGVmaW5pdGlvbiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJzYW1wbGVzL0V4dGVuc2lvbnMvU09BUC9SUENFbmNvZGVkU09BUEV4YW1wbGUud3NkbCIsIHRydWUpOyAvLyROT04tTkxTLTEkCi0gICAgICBmaWxlVVJJID0gVVJJLmNyZWF0ZUZpbGVVUkkoUExVR0lOX0FCU09MVVRFX1BBVEggKyAic2FtcGxlcy9nZW5lcmF0ZWQvUlBDRW5jb2RlZFNPQVBFeGFtcGxlLnhtbCIpOwotICAgICAgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7Ci0gICAgICByZXNvdXJjZSA9IHJlc291cmNlU2V0LmNyZWF0ZVJlc291cmNlKGZpbGVVUkkpOwotICAgICAgcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5hZGQoZGVmaW5pdGlvbik7Ci0gICAgICByZXNvdXJjZS5zYXZlKG51bGwpOwotICAgICAgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7Ci0gICAgICByZXNvdXJjZSA9IHJlc291cmNlU2V0LmdldFJlc291cmNlKGZpbGVVUkksIHRydWUpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIEFzc2VydC5mYWlsKCJUZXN0IGZhaWxlZCBkdWUgdG8gYW4gZXhjZXB0aW9uOiAiICsgZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCkpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFNPQVBFeHRlbnNpb25zUmVjb25jaWxpYXRpb24oKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInNhbXBsZXMvRXh0ZW5zaW9ucy9TT0FQL0RvY3VtZW50TGl0ZXJhbFNPQVBFeGFtcGxlLndzZGwiLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgICBTdHJpbmcgc2VydmljZU5hbWUgPSAiRG9jdW1lbnRMaXRlcmFsU09BUEV4YW1wbGUiOyAvLyROT04tTkxTLTEkCi0gICAgICBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvRG9jdW1lbnRMaXRlcmFsU09BUEV4YW1wbGUvIjsgLy8kTk9OLU5MUy0xJAotICAgICAgUU5hbWUgc2VydmljZVFOYW1lID0gbmV3IFFOYW1lKHRhcmdldE5hbWVzcGFjZSwgc2VydmljZU5hbWUpOwotICAgICAgU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2UpZGVmaW5pdGlvbi5nZXRTZXJ2aWNlKHNlcnZpY2VRTmFtZSk7Ci0gICAgICBzZXJ2aWNlLnRvU3RyaW5nKCk7Ci0KLSAgICAgIFBvcnQgcG9ydCA9IChQb3J0KXNlcnZpY2UuZ2V0UG9ydCgiRG9jdW1lbnRMaXRlcmFsU09BUEV4YW1wbGVTT0FQIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIExpc3QgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzID0gcG9ydC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIGFzc2VydEVxdWFscygxLCBleHRlbnNpYmlsaXR5RWxlbWVudHMuc2l6ZSgpKTsKLSAgICAgIFNPQVBBZGRyZXNzIHNvYXBBZGRyZXNzID0gKFNPQVBBZGRyZXNzKWV4dGVuc2liaWxpdHlFbGVtZW50cy5nZXQoMCk7Ci0KLSAgICAgIGNoZWNrU3RyaW5nQXR0cmlidXRlUmVjb25jaWxpYXRpb24oc29hcEFkZHJlc3MsIFNPQVBDb25zdGFudHMuTE9DQVRJT05fQVRUUklCVVRFLCAiaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLCBTT0FQUGFja2FnZS5MaXRlcmFscy5TT0FQX0FERFJFU1NfX0xPQ0FUSU9OX1VSSSk7Ci0KLSAgICAgIFN0cmluZyBiaW5kaW5nTmFtZSA9ICJEb2N1bWVudExpdGVyYWxTT0FQRXhhbXBsZVNPQVAiOyAvLyROT04tTkxTLTEkCi0gICAgICBRTmFtZSBiaW5kaW5nUU5hbWUgPSBuZXcgUU5hbWUodGFyZ2V0TmFtZXNwYWNlLCBiaW5kaW5nTmFtZSk7Ci0gICAgICBCaW5kaW5nIGJpbmRpbmcgPSAoQmluZGluZylkZWZpbml0aW9uLmdldEJpbmRpbmcoYmluZGluZ1FOYW1lKTsKLQotICAgICAgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzID0gYmluZGluZy5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIGFzc2VydEVxdWFscygxLCBleHRlbnNpYmlsaXR5RWxlbWVudHMuc2l6ZSgpKTsKLSAgICAgIFNPQVBCaW5kaW5nIHNvYXBCaW5kaW5nID0gKFNPQVBCaW5kaW5nKWV4dGVuc2liaWxpdHlFbGVtZW50cy5nZXQoMCk7Ci0KLSAgICAgIFN0cmluZyBzdHlsZSA9IHNvYXBCaW5kaW5nLmdldFN0eWxlKCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoU1RZTEVfRE9DVU1FTlQsIHN0eWxlKTsKLQotICAgICAgY2hlY2tTdHJpbmdBdHRyaWJ1dGVSZWNvbmNpbGlhdGlvbihzb2FwQmluZGluZywgU09BUENvbnN0YW50cy5TVFlMRV9BVFRSSUJVVEUsIFNUWUxFX1JQQywgU09BUFBhY2thZ2UuTGl0ZXJhbHMuU09BUF9CSU5ESU5HX19TVFlMRSk7Ci0KLSAgICAgIGNoZWNrU3RyaW5nQXR0cmlidXRlUmVjb25jaWxpYXRpb24oc29hcEJpbmRpbmcsIFNPQVBDb25zdGFudHMuVFJBTlNQT1JUX0FUVFJJQlVURSwgSFRUUF9UUkFOU1BPUlRfVVJJLCBTT0FQUGFja2FnZS5MaXRlcmFscy5TT0FQX0JJTkRJTkdfX1RSQU5TUE9SVF9VUkkpOwotCi0gICAgICBCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24gPSAoQmluZGluZ09wZXJhdGlvbiliaW5kaW5nLmdldEJpbmRpbmdPcGVyYXRpb24oIk5ld09wZXJhdGlvbiIsIG51bGwsIG51bGwpOwotICAgICAgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzID0gYmluZGluZ09wZXJhdGlvbi5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIGFzc2VydEVxdWFscygxLCBleHRlbnNpYmlsaXR5RWxlbWVudHMuc2l6ZSgpKTsKLSAgICAgIFNPQVBPcGVyYXRpb24gc29hcE9wZXJhdGlvbiA9IChTT0FQT3BlcmF0aW9uKWV4dGVuc2liaWxpdHlFbGVtZW50cy5nZXQoMCk7Ci0KLSAgICAgIHN0eWxlID0gc29hcE9wZXJhdGlvbi5nZXRTdHlsZSgpOwotICAgICAgYXNzZXJ0RXF1YWxzKFNUWUxFX0RPQ1VNRU5ULCBzdHlsZSk7Ci0KLSAgICAgIGNoZWNrU3RyaW5nQXR0cmlidXRlUmVjb25jaWxpYXRpb24oc29hcE9wZXJhdGlvbiwgU09BUENvbnN0YW50cy5TVFlMRV9BVFRSSUJVVEUsIFNUWUxFX1JQQywgU09BUFBhY2thZ2UuTGl0ZXJhbHMuU09BUF9PUEVSQVRJT05fX1NUWUxFKTsKLQotICAgICAgQmluZGluZ0lucHV0IGJpbmRpbmdJbnB1dCA9IChCaW5kaW5nSW5wdXQpYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nSW5wdXQoKTsKLSAgICAgIGV4dGVuc2liaWxpdHlFbGVtZW50cyA9IGJpbmRpbmdJbnB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgIGFzc2VydEVxdWFscygyLCBleHRlbnNpYmlsaXR5RWxlbWVudHMuc2l6ZSgpKTsKLQotICAgICAgU09BUEJvZHkgc29hcEJvZHkgPSAoU09BUEJvZHkpZXh0ZW5zaWJpbGl0eUVsZW1lbnRzLmdldCgwKTsKLQotICAgICAgU3RyaW5nIHVzZSA9IHNvYXBCb2R5LmdldFVzZSgpOwotICAgICAgYXNzZXJ0RXF1YWxzKFVTRV9MSVRFUkFMLCB1c2UpOwotCi0gICAgICBjaGVja1N0cmluZ0F0dHJpYnV0ZVJlY29uY2lsaWF0aW9uKHNvYXBCb2R5LCBTT0FQQ29uc3RhbnRzLlVTRV9BVFRSSUJVVEUsIFVTRV9FTkNPREVELCBTT0FQUGFja2FnZS5MaXRlcmFscy5TT0FQX0JPRFlfX1VTRSk7Ci0KLSAgICAgIFNPQVBIZWFkZXIgc29hcEhlYWRlciA9IChTT0FQSGVhZGVyKWV4dGVuc2liaWxpdHlFbGVtZW50cy5nZXQoMSk7Ci0KLSAgICAgIFN0cmluZyBwYXJ0ID0gc29hcEhlYWRlci5nZXRQYXJ0KCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoImhlYWRlciIsIHBhcnQpOwotCi0gICAgICBjaGVja1N0cmluZ0F0dHJpYnV0ZVJlY29uY2lsaWF0aW9uKHNvYXBIZWFkZXIsIFNPQVBDb25zdGFudHMuUEFSVF9BVFRSSUJVVEUsICJ0ZXN0IiwgU09BUFBhY2thZ2UuTGl0ZXJhbHMuU09BUF9IRUFERVJfQkFTRV9fUEFSVCk7Ci0KLSAgICAgIFFOYW1lIGlucHV0TWVzc2FnZVFOYW1lID0gbmV3IFFOYW1lKHRhcmdldE5hbWVzcGFjZSwgIk5ld09wZXJhdGlvblJlcXVlc3RNc2ciKTsKLSAgICAgIE1lc3NhZ2UgaW5wdXRNZXNzYWdlID0gKE1lc3NhZ2UpZGVmaW5pdGlvbi5nZXRNZXNzYWdlKGlucHV0TWVzc2FnZVFOYW1lKTsKLSAgICAgIGFzc2VydE5vdE51bGwoaW5wdXRNZXNzYWdlKTsKLQotICAgICAgUU5hbWUgc29hcEhlYWRlck1lc3NhZ2VRTmFtZSA9IHNvYXBIZWFkZXIuZ2V0TWVzc2FnZSgpOwotICAgICAgYXNzZXJ0RXF1YWxzKGlucHV0TWVzc2FnZVFOYW1lLCBzb2FwSGVhZGVyTWVzc2FnZVFOYW1lKTsKLQotICAgICAgRWxlbWVudCBzb2FwSGVhZGVyRWxlbWVudCA9IHNvYXBIZWFkZXIuZ2V0RWxlbWVudCgpOwotICAgICAgQXR0ciBtZXNzYWdlQXR0cmlidXRlID0gc29hcEhlYWRlckVsZW1lbnQuZ2V0QXR0cmlidXRlTm9kZShTT0FQQ29uc3RhbnRzLk1FU1NBR0VfQVRUUklCVVRFKTsKLQotICAgICAgUU5hbWUgdGVzdE1lc3NhZ2VRTmFtZSA9IG5ldyBRTmFtZSh0YXJnZXROYW1lc3BhY2UsICJUZXN0TXNnIik7Ci0gICAgICBNZXNzYWdlIHRlc3RNZXNzYWdlID0gKE1lc3NhZ2UpZGVmaW5pdGlvbi5nZXRNZXNzYWdlKHRlc3RNZXNzYWdlUU5hbWUpOwotICAgICAgbWVzc2FnZUF0dHJpYnV0ZS5zZXRWYWx1ZSgidG5zOlRlc3RNc2ciKTsKLSAgICAgIGFzc2VydEVxdWFscyh0ZXN0TWVzc2FnZSwgc29hcEhlYWRlci5nZXRFTWVzc2FnZSgpKTsKLQotICAgICAgUU5hbWUgbWVzc2FnZSA9IHNvYXBIZWFkZXIuZ2V0TWVzc2FnZSgpOwotICAgICAgYXNzZXJ0RXF1YWxzKHRlc3RNZXNzYWdlUU5hbWUsIG1lc3NhZ2UpOwotCi0gICAgICBzb2FwSGVhZGVyLnNldE1lc3NhZ2UobnVsbCk7Ci0gICAgICBtZXNzYWdlQXR0cmlidXRlID0gc29hcEhlYWRlckVsZW1lbnQuZ2V0QXR0cmlidXRlTm9kZShTT0FQQ29uc3RhbnRzLk1FU1NBR0VfQVRUUklCVVRFKTsKLSAgICAgIGFzc2VydE51bGwobWVzc2FnZUF0dHJpYnV0ZSk7Ci0KLSAgICAgIExpc3Qgc29hcEhlYWRlckZhdWx0cyA9IHNvYXBIZWFkZXIuZ2V0U09BUEhlYWRlckZhdWx0cygpOwotICAgICAgYXNzZXJ0RXF1YWxzKDEsIHNvYXBIZWFkZXJGYXVsdHMuc2l6ZSgpKTsKLSAgICAgIHNvYXBIZWFkZXJGYXVsdHMuY2xlYXIoKTsKLSAgICAgIE5vZGVMaXN0IGhlYWRlckZhdWx0Tm9kZXMgPSBzb2FwSGVhZGVyRWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShTT0FQQ29uc3RhbnRzLkhFQURFUl9GQVVMVF9FTEVNRU5UX1RBRyk7Ci0gICAgICBhc3NlcnRFcXVhbHMoMCwgaGVhZGVyRmF1bHROb2Rlcy5nZXRMZW5ndGgoKSk7Ci0KLSAgICAgIERvY3VtZW50IGRvY3VtZW50ID0gc29hcEhlYWRlckVsZW1lbnQuZ2V0T3duZXJEb2N1bWVudCgpOwotICAgICAgRWxlbWVudCBzb2FwSGVhZGVyRmF1bHRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFNPQVBDb25zdGFudHMuU09BUF9OQU1FU1BBQ0VfVVJJLCBTT0FQQ29uc3RhbnRzLkhFQURFUl9GQVVMVF9FTEVNRU5UX1RBRyk7Ci0gICAgICBzb2FwSGVhZGVyRWxlbWVudC5hcHBlbmRDaGlsZChzb2FwSGVhZGVyRmF1bHRFbGVtZW50KTsKLSAgICAgIGFzc2VydEVxdWFscygxLCBzb2FwSGVhZGVyLmdldFNPQVBIZWFkZXJGYXVsdHMoKS5zaXplKCkpOwotICAgICAgc29hcEhlYWRlckZhdWx0RWxlbWVudC5zZXRBdHRyaWJ1dGUoU09BUENvbnN0YW50cy5NRVNTQUdFX0FUVFJJQlVURSwgInRuczpUZXN0TXNnIik7Ci0gICAgICBTT0FQSGVhZGVyRmF1bHQgc29hcEhlYWRlckZhdWx0ID0gKFNPQVBIZWFkZXJGYXVsdClzb2FwSGVhZGVyLmdldFNPQVBIZWFkZXJGYXVsdHMoKS5nZXQoMCk7Ci0gICAgICBhc3NlcnRFcXVhbHModGVzdE1lc3NhZ2VRTmFtZSwgc29hcEhlYWRlckZhdWx0LmdldE1lc3NhZ2UoKSk7Ci0gICAgICBhc3NlcnRFcXVhbHModGVzdE1lc3NhZ2UsIHNvYXBIZWFkZXJGYXVsdC5nZXRFTWVzc2FnZSgpKTsKLQotICAgICAgQmluZGluZ0ZhdWx0IGJpbmRpbmdGYXVsdCA9IChCaW5kaW5nRmF1bHQpYmluZGluZ09wZXJhdGlvbi5nZXRCaW5kaW5nRmF1bHQoImZhdWx0Iik7Ci0gICAgICBleHRlbnNpYmlsaXR5RWxlbWVudHMgPSBiaW5kaW5nRmF1bHQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoMSwgZXh0ZW5zaWJpbGl0eUVsZW1lbnRzLnNpemUoKSk7Ci0gICAgICBTT0FQRmF1bHQgc29hcEZhdWx0ID0gKFNPQVBGYXVsdClleHRlbnNpYmlsaXR5RWxlbWVudHMuZ2V0KDApOwotCi0gICAgICBTdHJpbmcgbmFtZSA9IHNvYXBGYXVsdC5nZXROYW1lKCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoImZhdWx0IiwgbmFtZSk7Ci0KLSAgICAgIGNoZWNrU3RyaW5nQXR0cmlidXRlUmVjb25jaWxpYXRpb24oc29hcEZhdWx0LCBTT0FQQ29uc3RhbnRzLk5BTUVfQVRUUklCVVRFLCAidGVzdCIsIFNPQVBQYWNrYWdlLkxpdGVyYWxzLlNPQVBfRkFVTFRfX05BTUUpOwotCi0gICAgICBzb2FwRmF1bHQuc2V0TmFtZXNwYWNlVVJJKCJodHRwOi8vd3d3LmV4YW1wbGUuY29tL3Rlc3QiKTsKLSAgICAgIGNoZWNrU3RyaW5nQXR0cmlidXRlUmVjb25jaWxpYXRpb24oc29hcEZhdWx0LCBTT0FQQ29uc3RhbnRzLk5BTUVTUEFDRV9BVFRSSUJVVEUsICJ0ZXN0IiwgU09BUFBhY2thZ2UuTGl0ZXJhbHMuU09BUF9GQVVMVF9fTkFNRVNQQUNFX1VSSSk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBBc3NlcnQuZmFpbCgiVGVzdCBmYWlsZWQgZHVlIHRvIGFuIGV4Y2VwdGlvbjogIiArIGUuZ2V0TG9jYWxpemVkTWVzc2FnZSgpKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGFkZFNPQVBBZGRyZXNzKERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgIFNPQVBBZGRyZXNzIHNvYXBBZGRyZXNzID0gU09BUF9GQUNUT1JZLmNyZWF0ZVNPQVBBZGRyZXNzKCk7Ci0gICAgc29hcEFkZHJlc3Muc2V0TG9jYXRpb25VUkkoTE9DQVRJT05fVVJJKTsKLQotICAgIHNvYXBBZGRyZXNzLnRvU3RyaW5nKCk7Ci0KLSAgICBTdHJpbmcgc2VydmljZU5hbWUgPSAiU09BUFRlc3QiOyAvLyROT04tTkxTLTEkCi0gICAgUU5hbWUgc2VydmljZVFOYW1lID0gbmV3IFFOYW1lKGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCksIHNlcnZpY2VOYW1lKTsKLSAgICBTZXJ2aWNlIHNlcnZpY2UgPSAoU2VydmljZSlkZWZpbml0aW9uLmdldFNlcnZpY2Uoc2VydmljZVFOYW1lKTsKLSAgICBzZXJ2aWNlLnRvU3RyaW5nKCk7Ci0KLSAgICBQb3J0IHBvcnQgPSAoUG9ydClzZXJ2aWNlLmdldFBvcnQoIlNPQVBUZXN0U09BUCIpOyAvLyROT04tTkxTLTEkCi0gICAgcG9ydC5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChzb2FwQWRkcmVzcyk7Ci0gICAgcG9ydC50b1N0cmluZygpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGFkZFNPQVBCaW5kaW5nKEJpbmRpbmcgYmluZGluZykKLSAgewotICAgIFNPQVBCaW5kaW5nIHNvYXBCaW5kaW5nID0gU09BUF9GQUNUT1JZLmNyZWF0ZVNPQVBCaW5kaW5nKCk7Ci0KLSAgICBzb2FwQmluZGluZy5zZXRTdHlsZShTVFlMRV9ET0NVTUVOVCk7Ci0gICAgc29hcEJpbmRpbmcuc2V0VHJhbnNwb3J0VVJJKEhUVFBfVFJBTlNQT1JUX1VSSSk7Ci0KLSAgICBzb2FwQmluZGluZy50b1N0cmluZygpOwotCi0gICAgYmluZGluZy5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChzb2FwQmluZGluZyk7Ci0gICAgYmluZGluZy50b1N0cmluZygpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGFkZFNPQVBCaW5kaW5nRmF1bHQoQmluZGluZ0ZhdWx0IGJpbmRpbmdGYXVsdCkKLSAgewotICAgIFN0cmluZyBmYXVsdE5hbWUgPSBiaW5kaW5nRmF1bHQuZ2V0TmFtZSgpOwotCi0gICAgU09BUEZhdWx0IHNvYXBGYXVsdCA9IFNPQVBfRkFDVE9SWS5jcmVhdGVTT0FQRmF1bHQoKTsKLSAgICBzb2FwRmF1bHQuc2V0TmFtZShmYXVsdE5hbWUpOwotICAgIHNvYXBGYXVsdC50b1N0cmluZygpOwotCi0gICAgc29hcEZhdWx0LnNldFVzZShVU0VfTElURVJBTCk7Ci0KLSAgICBiaW5kaW5nRmF1bHQuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoc29hcEZhdWx0KTsKLSAgICBiaW5kaW5nRmF1bHQudG9TdHJpbmcoKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBhZGRTT0FQQmluZGluZ0lucHV0KEJpbmRpbmdJbnB1dCBiaW5kaW5nSW5wdXQpCi0gIHsKLSAgICBiaW5kaW5nSW5wdXQudG9TdHJpbmcoKTsKLQotICAgIFNPQVBCb2R5IGlucHV0U09BUEJvZHkgPSBTT0FQX0ZBQ1RPUlkuY3JlYXRlU09BUEJvZHkoKTsKLSAgICBiaW5kaW5nSW5wdXQuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoaW5wdXRTT0FQQm9keSk7Ci0KLSAgICBpbnB1dFNPQVBCb2R5LnNldFVzZShVU0VfTElURVJBTCk7Ci0KLSAgICBMaXN0IHBhcnRzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIFN0cmluZyBtZXNzYWdlTmFtZSA9ICJOZXdPcGVyYXRpb25SZXF1ZXN0IjsgLy8kTk9OLU5MUy0xJAotICAgIERlZmluaXRpb24gZW5jbG9zaW5nRGVmaW5pdGlvbiA9IGJpbmRpbmdJbnB1dC5nZXRFbmNsb3NpbmdEZWZpbml0aW9uKCk7Ci0gICAgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSA9IGVuY2xvc2luZ0RlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgUU5hbWUgbWVzc2FnZVFOYW1lID0gbmV3IFFOYW1lKHRhcmdldE5hbWVzcGFjZSwgbWVzc2FnZU5hbWUpOwotICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IGVuY2xvc2luZ0RlZmluaXRpb247Ci0gICAgTWVzc2FnZSBtZXNzYWdlID0gKE1lc3NhZ2UpZGVmaW5pdGlvbi5nZXRNZXNzYWdlKG1lc3NhZ2VRTmFtZSk7Ci0gICAgUGFydCBwYXJ0ID0gKFBhcnQpbWVzc2FnZS5nZXRQYXJ0KCJwYXJhbWV0ZXJzIik7IC8vJE5PTi1OTFMtMSQKLSAgICBwYXJ0cy5hZGQocGFydCk7Ci0gICAgaW5wdXRTT0FQQm9keS5zZXRQYXJ0cyhwYXJ0cyk7Ci0gICAgaW5wdXRTT0FQQm9keS50b1N0cmluZygpOwotCi0gICAgU09BUEhlYWRlciBzb2FwSGVhZGVyID0gU09BUF9GQUNUT1JZLmNyZWF0ZVNPQVBIZWFkZXIoKTsKLSAgICBiaW5kaW5nSW5wdXQuYWRkRXh0ZW5zaWJpbGl0eUVsZW1lbnQoc29hcEhlYWRlcik7Ci0KLSAgICBzb2FwSGVhZGVyLnNldE1lc3NhZ2UobWVzc2FnZVFOYW1lKTsKLQotICAgIFN0cmluZyBoZWFkZXJQYXJ0ID0gImhlYWRlciI7IC8vJE5PTi1OTFMtMSQKLSAgICBzb2FwSGVhZGVyLnNldFBhcnQoaGVhZGVyUGFydCk7Ci0KLSAgICBzb2FwSGVhZGVyLnNldFVzZShVU0VfTElURVJBTCk7Ci0KLSAgICBzb2FwSGVhZGVyLnRvU3RyaW5nKCk7Ci0KLSAgICBhZGRTT0FQSGVhZGVyRmF1bHQobWVzc2FnZVFOYW1lLCBzb2FwSGVhZGVyKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBhZGRTT0FQQmluZGluZ091dHB1dChCaW5kaW5nT3V0cHV0IGJpbmRpbmdPdXRwdXQpCi0gIHsKLSAgICAvLyBFeGVyY2lzZSBzb21lIG9mIHRoZSBSUEMgLyBlbmNvZGVkIHN0dWZmLgotCi0gICAgU09BUEJvZHkgc29hcEJvZHkgPSBTT0FQX0ZBQ1RPUlkuY3JlYXRlU09BUEJvZHkoKTsKLSAgICBzb2FwQm9keS5zZXRVc2UoVVNFX0VOQ09ERUQpOwotCi0gICAgRUxpc3QgZW5jb2RpbmdTdHlsZXMgPSBuZXcgQmFzaWNFTGlzdCgpOwotICAgIGVuY29kaW5nU3R5bGVzLmFkZCgiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iKTsKLSAgICBlbmNvZGluZ1N0eWxlcy5hZGQoInRlc3QiKTsKLSAgICAKLSAgICBzb2FwQm9keS5zZXRFbmNvZGluZ1N0eWxlcyhlbmNvZGluZ1N0eWxlcyk7Ci0gICAgCi0gICAgTGlzdCBlRW5jb2RpbmdTdHlsZXMgPSBzb2FwQm9keS5nZXRFRW5jb2RpbmdTdHlsZXMoKTsKLSAgICBhc3NlcnRFcXVhbHMoMiwgZUVuY29kaW5nU3R5bGVzLnNpemUoKSk7Ci0gICAgCi0gICAgc29hcEJvZHkudG9TdHJpbmcoKTsKLQotICAgIGJpbmRpbmdPdXRwdXQudG9TdHJpbmcoKTsKLSAgICBiaW5kaW5nT3V0cHV0LmFkZEV4dGVuc2liaWxpdHlFbGVtZW50KHNvYXBCb2R5KTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBhZGRTT0FQSGVhZGVyRmF1bHQoUU5hbWUgbWVzc2FnZVFOYW1lLCBTT0FQSGVhZGVyIHNvYXBIZWFkZXIpCi0gIHsKLSAgICBTT0FQSGVhZGVyRmF1bHQgc29hcEhlYWRlckZhdWx0ID0gU09BUF9GQUNUT1JZLmNyZWF0ZVNPQVBIZWFkZXJGYXVsdCgpOwotICAgIHNvYXBIZWFkZXIuYWRkU09BUEhlYWRlckZhdWx0KHNvYXBIZWFkZXJGYXVsdCk7Ci0KLSAgICBMaXN0IHNvYXBIZWFkZXJGYXVsdHMgPSBzb2FwSGVhZGVyLmdldFNPQVBIZWFkZXJGYXVsdHMoKTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgc29hcEhlYWRlckZhdWx0cy5zaXplKCkpOwotICAgIFNPQVBIZWFkZXJGYXVsdCBleHBlY3RlZFNvYXBIZWFkZXJGYXVsdCA9IChTT0FQSGVhZGVyRmF1bHQpc29hcEhlYWRlckZhdWx0cy5nZXQoMCk7Ci0gICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkU29hcEhlYWRlckZhdWx0LCBzb2FwSGVhZGVyRmF1bHQpOwotCi0gICAgc29hcEhlYWRlckZhdWx0LnNldE1lc3NhZ2UobWVzc2FnZVFOYW1lKTsKLQotICAgIFN0cmluZyBoZWFkZXJGYXVsdFBhcnQgPSAiaGVhZGVyRmF1bHQxIjsgLy8kTk9OLU5MUy0xJAotICAgIHNvYXBIZWFkZXJGYXVsdC5zZXRQYXJ0KGhlYWRlckZhdWx0UGFydCk7Ci0KLSAgICAvLyBUZXN0IHRoZSByZW1vdmUgcGFydC4KLQotICAgIHNvYXBIZWFkZXIuZ2V0U09BUEhlYWRlckZhdWx0cygpLmNsZWFyKCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgYWRkU09BUE9wZXJhdGlvbihCaW5kaW5nT3BlcmF0aW9uIGJpbmRpbmdPcGVyYXRpb24pCi0gIHsKLSAgICBTT0FQT3BlcmF0aW9uIHNvYXBPcGVyYXRpb24gPSBTT0FQX0ZBQ1RPUlkuY3JlYXRlU09BUE9wZXJhdGlvbigpOwotICAgIHNvYXBPcGVyYXRpb24uc2V0U3R5bGUoU1RZTEVfRE9DVU1FTlQpOwotICAgIHNvYXBPcGVyYXRpb24uc2V0U29hcEFjdGlvblVSSShTT0FQX0FDVElPTl9VUkkpOwotCi0gICAgc29hcE9wZXJhdGlvbi50b1N0cmluZygpOwotCi0gICAgYmluZGluZ09wZXJhdGlvbi5hZGRFeHRlbnNpYmlsaXR5RWxlbWVudChzb2FwT3BlcmF0aW9uKTsKLSAgICBiaW5kaW5nT3BlcmF0aW9uLnRvU3RyaW5nKCk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvZXh0ZW5zaW9ucy9XU0RMRXh0ZW5zaW9uc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9leHRlbnNpb25zL1dTRExFeHRlbnNpb25zVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Mjc3OWFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy9leHRlbnNpb25zL1dTRExFeHRlbnNpb25zVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLmV4dGVuc2lvbnM7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuV1NETEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi0KLS8qKgotICogQmFzZSBjbGFzcyBmb3IgV1NETCBleHRlbnNpb24gdGVzdHMuCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBXU0RMRXh0ZW5zaW9uc1Rlc3QgZXh0ZW5kcyBUZXN0Q2FzZQotewotICAvKioKLSAgICogQ29uc3RydWN0cyBhIHRlc3Qgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4gCi0gICAqIEBwYXJhbSBuYW1lIHRoZSB0ZXN0IG5hbWUuCi0gICAqLwotICBwdWJsaWMgV1NETEV4dGVuc2lvbnNUZXN0KFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIobmFtZSk7Ci0gIH0KLQotICAvKioKLSAgICogVGVzdHMgYSBTdHJpbmcgYXR0cmlidXRlIHJlY29uY2lsaWF0aW9uLiBUaGUgY29kZSBjaGFuZ2VzIHRoZSBhdHRyaWJ1dGUgdmFsdWUgdGhyb3VnaCB0aGUgRE9NIGFuZCBjb21wYXJlcyBpdCB3aXRoIHRoZSB2YWx1ZSBvYnRhaW5lZCBieSBjYWxsaW5nIGVHZXQuCi0gICAqIEBwYXJhbSB3c2RsRWxlbWVudCB0aGUgV1NETCBlbGVtZW50IHRvIHRlc3QKLSAgICogQHBhcmFtIGF0dHJpYnV0ZU5hbWUgdGhlIGF0dHJpYnV0ZSBuYW1lCi0gICAqIEBwYXJhbSBleHBlY3RlZFZhbHVlIHRoZSBleHBlY3RlZCB2YWx1ZQotICAgKiBAcGFyYW0gZmVhdHVyZSB0aGUgRU1GIGZlYXR1cmUgb2YgdGhlIGF0dHJpYnV0ZSB0byB0ZXN0LiAKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGNoZWNrU3RyaW5nQXR0cmlidXRlUmVjb25jaWxpYXRpb24oCi0gICAgV1NETEVsZW1lbnQgd3NkbEVsZW1lbnQsCi0gICAgU3RyaW5nIGF0dHJpYnV0ZU5hbWUsCi0gICAgU3RyaW5nIGV4cGVjdGVkVmFsdWUsCi0gICAgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUpCi0gIHsKLSAgICBFT2JqZWN0IGVPYmplY3QgPSAoRU9iamVjdCl3c2RsRWxlbWVudDsKLQotICAgIFN0cmluZyBpbml0aWFsVmFsdWUgPSAoU3RyaW5nKWVPYmplY3QuZUdldChmZWF0dXJlKTsKLSAgICAKLSAgICBFbGVtZW50IGVsZW1lbnQgPSB3c2RsRWxlbWVudC5nZXRFbGVtZW50KCk7Ci0gICAgZU9iamVjdC5lVW5zZXQoZmVhdHVyZSk7Ci0gICAgQXR0ciBhdHRyaWJ1dGUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZU5vZGUoYXR0cmlidXRlTmFtZSk7Ci0gICAgYXNzZXJ0TnVsbChhdHRyaWJ1dGUpOwotCi0gICAgZU9iamVjdC5lU2V0KGZlYXR1cmUsIGluaXRpYWxWYWx1ZSk7Ci0gICAgCi0gICAgYXR0cmlidXRlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGVOb2RlKGF0dHJpYnV0ZU5hbWUpOwotICAgIGF0dHJpYnV0ZS5zZXRWYWx1ZShleHBlY3RlZFZhbHVlKTsKLQotICAgIFN0cmluZyBhY3R1YWxWYWx1ZSA9IChTdHJpbmcpZU9iamVjdC5lR2V0KGZlYXR1cmUpOwotICAgIGFzc2VydEVxdWFscyhleHBlY3RlZFZhbHVlLCBhY3R1YWxWYWx1ZSk7Ci0gICAgCi0gICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7Ci0gICAgYWN0dWFsVmFsdWUgPSAoU3RyaW5nKWVPYmplY3QuZUdldChmZWF0dXJlKTsKLSAgICBhc3NlcnROdWxsKGFjdHVhbFZhbHVlKTsKLQotICAgIGVPYmplY3QuZVNldChmZWF0dXJlLCBpbml0aWFsVmFsdWUpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3V0aWwvRGVmaW5pdGlvbkxvYWRlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3V0aWwvRGVmaW5pdGlvbkxvYWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjkwYjZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy91dGlsL0RlZmluaXRpb25Mb2FkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudXRpbDsKLQotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC51dGlsLldTRExSZXNvdXJjZUltcGw7Ci0KLQotLyoqCi0gKiBAYXV0aG9yIEtpaHVwIEJvbwotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgRGVmaW5pdGlvbkxvYWRlcgotewotICAvKioKLSAgICogVGhpcyBjbGFzcyBwcm92aWRlcyBzdGF0aWMgbWV0aG9kcyBvbmx5LgotICAgKi8KLSAgcHJpdmF0ZSBEZWZpbml0aW9uTG9hZGVyKCkKLSAgewotICB9Ci0KLSAgc3RhdGljIHB1YmxpYyBEZWZpbml0aW9uIGxvYWQoU3RyaW5nIGZpbGVuYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotICAgIHJldHVybiBsb2FkKGZpbGVuYW1lLCBmYWxzZSk7Ci0gIH0KLQotICBzdGF0aWMgcHVibGljIERlZmluaXRpb24gbG9hZChTdHJpbmcgZmlsZW5hbWUsIGJvb2xlYW4gdXNlRXh0ZW5zaW9uRmFjdG9yaWVzKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgewotICAgIHJldHVybiBsb2FkKGZpbGVuYW1lLCB1c2VFeHRlbnNpb25GYWN0b3JpZXMsIGZhbHNlKTsKLSAgfQotCi0gIHN0YXRpYyBwdWJsaWMgRGVmaW5pdGlvbiBsb2FkKFN0cmluZyBmaWxlbmFtZSwgYm9vbGVhbiB1c2VFeHRlbnNpb25GYWN0b3JpZXMsIGJvb2xlYW4gdHJhY2tMb2NhdGlvbikgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBmaWxlbmFtZSBpcyBhbiBhYnNvbHV0ZSBwYXRoCi0KLSAgICBVUkkgdXJpID0gbnVsbDsKLSAgICB1cmkgPSBVUkkuY3JlYXRlRmlsZVVSSShmaWxlbmFtZSk7Ci0KLSAgICBSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IG5ldyBSZXNvdXJjZVNldEltcGwoKTsKLSAgICByZXNvdXJjZVNldC5nZXRBZGFwdGVyRmFjdG9yaWVzKCkuYWRkKG5ldyBXU0RMTW9kZWxMb2NhdG9yQWRhcHRlckZhY3RvcnkoKSk7Ci0gICAgcmVzb3VyY2VTZXQuZ2V0QWRhcHRlckZhY3RvcmllcygpLmFkZChuZXcgWFNEU2NoZW1hTG9jYXRpb25SZXNvbHZlckFkYXB0ZXJGYWN0b3J5KCkpOwotCi0gICAgV1NETFJlc291cmNlSW1wbCB3c2RsTWFpblJlc291cmNlID0gKFdTRExSZXNvdXJjZUltcGwpcmVzb3VyY2VTZXQuY3JlYXRlUmVzb3VyY2UoVVJJLmNyZWF0ZVVSSSgiKi53c2RsIikpOwotICAgIHdzZGxNYWluUmVzb3VyY2Uuc2V0VVJJKHVyaSk7Ci0gICAgamF2YS51dGlsLk1hcCBtYXAgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgbWFwLnB1dChXU0RMUmVzb3VyY2VJbXBsLkNPTlRJTlVFX09OX0xPQURfRVJST1IsIEJvb2xlYW4udmFsdWVPZih0cnVlKSk7Ci0gICAgbWFwLnB1dChXU0RMUmVzb3VyY2VJbXBsLlVTRV9FWFRFTlNJT05fRkFDVE9SSUVTLCBCb29sZWFuLnZhbHVlT2YodXNlRXh0ZW5zaW9uRmFjdG9yaWVzKSk7Ci0gICAgbWFwLnB1dChXU0RMUmVzb3VyY2VJbXBsLlRSQUNLX0xPQ0FUSU9OLCBCb29sZWFuLnZhbHVlT2YodHJhY2tMb2NhdGlvbikpOwotICAgIHdzZGxNYWluUmVzb3VyY2UubG9hZChtYXApOwotCi0gICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gbnVsbDsKLSAgICBmb3IgKEl0ZXJhdG9yIHJlc291cmNlcyA9IHJlc291cmNlU2V0LmdldFJlc291cmNlcygpLml0ZXJhdG9yKCk7IHJlc291cmNlcy5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIE9iamVjdCByZXNvdXJjZSA9IHJlc291cmNlcy5uZXh0KCk7Ci0gICAgICBpZiAocmVzb3VyY2UgaW5zdGFuY2VvZiBXU0RMUmVzb3VyY2VJbXBsKQotICAgICAgewotICAgICAgICBXU0RMUmVzb3VyY2VJbXBsIHdzZGxSZXNvdXJjZSA9IChXU0RMUmVzb3VyY2VJbXBsKXJlc291cmNlOwotICAgICAgICBkZWZpbml0aW9uID0gd3NkbFJlc291cmNlLmdldERlZmluaXRpb24oKTsKLSAgICAgICAgcmV0dXJuIGRlZmluaXRpb247Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBzdGF0aWMgcHVibGljIHZvaWQgc3RvcmUoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBTdHJpbmcgZmlsZW5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgLy8gZmlsZW5hbWUgaXMgYW4gYWJzb2x1dGUgcGF0aAotCi0gICAgUmVzb3VyY2UgcmVzb3VyY2UgPSBkZWZpbml0aW9uLmVSZXNvdXJjZSgpOwotICAgIHJlc291cmNlLnNldFVSSShVUkkuY3JlYXRlRmlsZVVSSShmaWxlbmFtZSkpOwotICAgIHJlc291cmNlLnNhdmUobnVsbCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy91dGlsL0RlZmluaXRpb25WaXNpdG9yLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvdXRpbC9EZWZpbml0aW9uVmlzaXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZGZhNjIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy91dGlsL0RlZmluaXRpb25WaXNpdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdGYXVsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nSW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ09wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRXh0ZW5zaWJsZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk91dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5QYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUG9ydFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5UeXBlczsKLQotCi0vKioKLSAqIEBhdXRob3IgS2lodXAgQm9vCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBEZWZpbml0aW9uVmlzaXRvciBleHRlbmRzIFRlc3RDYXNlCi17Ci0gIHByb3RlY3RlZCBEZWZpbml0aW9uIGRlZmluaXRpb247Ci0KLSAgLy8gQWRkZWQgZm9yIEpVbml0Ci0gIHB1YmxpYyBEZWZpbml0aW9uVmlzaXRvcihTdHJpbmcgbmFtZSkKLSAgewotICAgIHN1cGVyKG5hbWUpOwotICB9Ci0KLSAgcHJvdGVjdGVkIERlZmluaXRpb25WaXNpdG9yKERlZmluaXRpb24gZGVmaW5pdGlvbikKLSAgewotICAgIHRoaXMuZGVmaW5pdGlvbiA9IGRlZmluaXRpb247Ci0gIH0KLQotICAvLyBtYWluIGVudHJ5Ci0gIHB1YmxpYyB2b2lkIHZpc2l0KCkKLSAgewotICAgIHZpc2l0RGVmaW5pdGlvbihkZWZpbml0aW9uKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0RGVmaW5pdGlvbihEZWZpbml0aW9uIGRlZikKLSAgewotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gZGVmLmdldEVJbXBvcnRzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgdmlzaXRJbXBvcnQoKEltcG9ydClpdGVyYXRvci5uZXh0KCkpOwotCi0gICAgVHlwZXMgdHlwZXMgPSBkZWYuZ2V0RVR5cGVzKCk7Ci0gICAgaWYgKHR5cGVzICE9IG51bGwpCi0gICAgICB2aXNpdFR5cGVzKHR5cGVzKTsKLQotICAgIGl0ZXJhdG9yID0gZGVmLmdldEVNZXNzYWdlcygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0TWVzc2FnZSgoTWVzc2FnZSlpdGVyYXRvci5uZXh0KCkpOwotCi0gICAgaXRlcmF0b3IgPSBkZWYuZ2V0RVBvcnRUeXBlcygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0UG9ydFR5cGUoKFBvcnRUeXBlKWl0ZXJhdG9yLm5leHQoKSk7Ci0KLSAgICBpdGVyYXRvciA9IGRlZi5nZXRFQmluZGluZ3MoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB2aXNpdEJpbmRpbmcoKEJpbmRpbmcpaXRlcmF0b3IubmV4dCgpKTsKLQotICAgIGl0ZXJhdG9yID0gZGVmLmdldEVTZXJ2aWNlcygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0U2VydmljZSgoU2VydmljZSlpdGVyYXRvci5uZXh0KCkpOwotCi0gICAgaXRlcmF0b3IgPSBkZWYuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoZGVmLCAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpaXRlcmF0b3IubmV4dCgpKTsKLQotICB9Ci0KLSAgYWJzdHJhY3QgcHJvdGVjdGVkIHZvaWQgdmlzaXRJbXBvcnQoSW1wb3J0IHdzZGxJbXBvcnQpOwotCi0gIGFic3RyYWN0IHByb3RlY3RlZCB2b2lkIHZpc2l0VHlwZXMoVHlwZXMgdHlwZXMpOwotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0TWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpCi0gIHsKLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IG1lc3NhZ2UuZ2V0RVBhcnRzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgdmlzaXRQYXJ0KChQYXJ0KWl0ZXJhdG9yLm5leHQoKSk7Ci0gIH0KLQotICBhYnN0cmFjdCBwcm90ZWN0ZWQgdm9pZCB2aXNpdFBhcnQoUGFydCBwYXJ0KTsKLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdFBvcnRUeXBlKFBvcnRUeXBlIHBvcnRUeXBlKQotICB7Ci0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBwb3J0VHlwZS5nZXRFT3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0T3BlcmF0aW9uKChPcGVyYXRpb24paXRlcmF0b3IubmV4dCgpKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0T3BlcmF0aW9uKE9wZXJhdGlvbiBvcGVyYXRpb24pCi0gIHsKLSAgICBJbnB1dCBpbnB1dCA9IG9wZXJhdGlvbi5nZXRFSW5wdXQoKTsKLSAgICB2aXNpdElucHV0KChJbnB1dClpbnB1dCk7Ci0KLSAgICBPdXRwdXQgb3V0cHV0ID0gb3BlcmF0aW9uLmdldEVPdXRwdXQoKTsKLSAgICB2aXNpdE91dHB1dCgoT3V0cHV0KW91dHB1dCk7Ci0KLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IG9wZXJhdGlvbi5nZXRFRmF1bHRzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgdmlzaXRGYXVsdCgoRmF1bHQpaXRlcmF0b3IubmV4dCgpKTsKLSAgfQotCi0gIHByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIHZpc2l0SW5wdXQoSW5wdXQgaW5wdXQpOwotCi0gIHByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIHZpc2l0T3V0cHV0KE91dHB1dCBvdXRwdXQpOwotCi0gIHByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIHZpc2l0RmF1bHQoRmF1bHQgZmF1bHQpOwotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0QmluZGluZyhCaW5kaW5nIGJpbmRpbmcpCi0gIHsKLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IGJpbmRpbmcuZ2V0RUJpbmRpbmdPcGVyYXRpb25zKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgdmlzaXRCaW5kaW5nT3BlcmF0aW9uKChCaW5kaW5nT3BlcmF0aW9uKWl0ZXJhdG9yLm5leHQoKSk7Ci0KLSAgICBpdGVyYXRvciA9IGJpbmRpbmcuZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoYmluZGluZywgKEV4dGVuc2liaWxpdHlFbGVtZW50KWl0ZXJhdG9yLm5leHQoKSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEJpbmRpbmdPcGVyYXRpb24oQmluZGluZ09wZXJhdGlvbiBvcGVyYXRpb24pCi0gIHsKLSAgICBCaW5kaW5nSW5wdXQgaW5wdXQgPSBvcGVyYXRpb24uZ2V0RUJpbmRpbmdJbnB1dCgpOwotICAgIHZpc2l0QmluZGluZ0lucHV0KChCaW5kaW5nSW5wdXQpaW5wdXQpOwotCi0gICAgQmluZGluZ091dHB1dCBvdXRwdXQgPSBvcGVyYXRpb24uZ2V0RUJpbmRpbmdPdXRwdXQoKTsKLSAgICB2aXNpdEJpbmRpbmdPdXRwdXQoKEJpbmRpbmdPdXRwdXQpb3V0cHV0KTsKLQotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gb3BlcmF0aW9uLmdldEVCaW5kaW5nRmF1bHRzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgdmlzaXRCaW5kaW5nRmF1bHQoKEJpbmRpbmdGYXVsdClpdGVyYXRvci5uZXh0KCkpOwotCi0gICAgaXRlcmF0b3IgPSBvcGVyYXRpb24uZ2V0RUV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQob3BlcmF0aW9uLCAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpaXRlcmF0b3IubmV4dCgpKTsKLQotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRCaW5kaW5nSW5wdXQoQmluZGluZ0lucHV0IGlucHV0KQotICB7Ci0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBpbnB1dC5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgdmlzaXRFeHRlbnNpYmlsaXR5RWxlbWVudChpbnB1dCwgKEV4dGVuc2liaWxpdHlFbGVtZW50KWl0ZXJhdG9yLm5leHQoKSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEJpbmRpbmdPdXRwdXQoQmluZGluZ091dHB1dCBvdXRwdXQpCi0gIHsKLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IG91dHB1dC5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgdmlzaXRFeHRlbnNpYmlsaXR5RWxlbWVudChvdXRwdXQsIChFeHRlbnNpYmlsaXR5RWxlbWVudClpdGVyYXRvci5uZXh0KCkpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRCaW5kaW5nRmF1bHQoQmluZGluZ0ZhdWx0IGZhdWx0KQotICB7Ci0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBmYXVsdC5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgdmlzaXRFeHRlbnNpYmlsaXR5RWxlbWVudChmYXVsdCwgKEV4dGVuc2liaWxpdHlFbGVtZW50KWl0ZXJhdG9yLm5leHQoKSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdFNlcnZpY2UoU2VydmljZSBzZXJ2aWNlKQotICB7Ci0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBzZXJ2aWNlLmdldEVQb3J0cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0UG9ydCgoUG9ydClpdGVyYXRvci5uZXh0KCkpOwotCi0gICAgaXRlcmF0b3IgPSBzZXJ2aWNlLmdldEVFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB2aXNpdEV4dGVuc2liaWxpdHlFbGVtZW50KHNlcnZpY2UsIChFeHRlbnNpYmlsaXR5RWxlbWVudClpdGVyYXRvci5uZXh0KCkpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRQb3J0KFBvcnQgcG9ydCkKLSAgewotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gcG9ydC5nZXRFRXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgdmlzaXRFeHRlbnNpYmlsaXR5RWxlbWVudChwb3J0LCAoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpaXRlcmF0b3IubmV4dCgpKTsKLSAgfQotCi0gIGFic3RyYWN0IHByb3RlY3RlZCB2b2lkIHZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoRXh0ZW5zaWJsZUVsZW1lbnQgb3duZXIsIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuc2liaWxpdHlFbGVtZW50KTsKLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3V0aWwvV1NETDRKRGVmaW5pdGlvblZpc2l0b3IuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy91dGlsL1dTREw0SkRlZmluaXRpb25WaXNpdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3MGJmN2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3V0aWwvV1NETDRKRGVmaW5pdGlvblZpc2l0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdGYXVsdDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdJbnB1dDsKLWltcG9ydCBqYXZheC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5CaW5kaW5nT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLkZhdWx0OwotaW1wb3J0IGphdmF4LndzZGwuSW1wb3J0OwotaW1wb3J0IGphdmF4LndzZGwuSW5wdXQ7Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuT3BlcmF0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuT3V0cHV0OwotaW1wb3J0IGphdmF4LndzZGwuUGFydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0VHlwZTsKLWltcG9ydCBqYXZheC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgamF2YXgud3NkbC5UeXBlczsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLQotLyoqCi0gKiBAYXV0aG9yIEtpaHVwIEJvbwotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgV1NETDRKRGVmaW5pdGlvblZpc2l0b3IgZXh0ZW5kcyBUZXN0Q2FzZQotewotICBwcm90ZWN0ZWQgRGVmaW5pdGlvbiBkZWZpbml0aW9uOwotCi0gIC8vIEFkZGVkIGZvciBKVW5pdAotICBwdWJsaWMgV1NETDRKRGVmaW5pdGlvblZpc2l0b3IoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihuYW1lKTsKLSAgfQotCi0gIHByb3RlY3RlZCBXU0RMNEpEZWZpbml0aW9uVmlzaXRvcihEZWZpbml0aW9uIGRlZmluaXRpb24pCi0gIHsKLSAgICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uOwotICB9Ci0KLSAgLy8gbWFpbiBlbnRyeQotICBwdWJsaWMgdm9pZCB2aXNpdCgpCi0gIHsKLSAgICB2aXNpdERlZmluaXRpb24oZGVmaW5pdGlvbik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdERlZmluaXRpb24oRGVmaW5pdGlvbiBkZWYpCi0gIHsKLSAgICBqYXZhLnV0aWwuTWFwIGltcG9ydHMgPSBkZWYuZ2V0SW1wb3J0cygpOwotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gaW1wb3J0cy5rZXlTZXQoKS5pdGVyYXRvcigpOwotICAgIEltcG9ydCBteUltcG9ydCA9IG51bGw7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBteUltcG9ydCA9IChJbXBvcnQpKChqYXZhLnV0aWwuQXJyYXlMaXN0KWltcG9ydHMuZ2V0KGl0ZXJhdG9yLm5leHQoKSkpLmdldCgwKTsKLSAgICAgIHZpc2l0SW1wb3J0KG15SW1wb3J0KTsKLSAgICB9Ci0KLSAgICBUeXBlcyB0eXBlcyA9IGRlZi5nZXRUeXBlcygpOwotICAgIGlmICh0eXBlcyAhPSBudWxsKQotICAgICAgdmlzaXRUeXBlcyh0eXBlcyk7Ci0KLSAgICBpdGVyYXRvciA9IGRlZi5nZXRNZXNzYWdlcygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0TWVzc2FnZSgoTWVzc2FnZSlpdGVyYXRvci5uZXh0KCkpOwotCi0gICAgaXRlcmF0b3IgPSBkZWYuZ2V0UG9ydFR5cGVzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgdmlzaXRQb3J0VHlwZSgoUG9ydFR5cGUpaXRlcmF0b3IubmV4dCgpKTsKLQotICAgIGl0ZXJhdG9yID0gZGVmLmdldEJpbmRpbmdzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgdmlzaXRCaW5kaW5nKChCaW5kaW5nKWl0ZXJhdG9yLm5leHQoKSk7Ci0KLSAgICBpdGVyYXRvciA9IGRlZi5nZXRTZXJ2aWNlcygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0U2VydmljZSgoU2VydmljZSlpdGVyYXRvci5uZXh0KCkpOwotCi0gICAgaXRlcmF0b3IgPSBkZWYuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgdmlzaXRFeHRlbnNpYmlsaXR5RWxlbWVudCgoRXh0ZW5zaWJpbGl0eUVsZW1lbnQpaXRlcmF0b3IubmV4dCgpKTsKLQotICB9Ci0KLSAgYWJzdHJhY3QgcHJvdGVjdGVkIHZvaWQgdmlzaXRJbXBvcnQoSW1wb3J0IHdzZGxJbXBvcnQpOwotCi0gIGFic3RyYWN0IHByb3RlY3RlZCB2b2lkIHZpc2l0VHlwZXMoVHlwZXMgdHlwZXMpOwotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0TWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpCi0gIHsKLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IG1lc3NhZ2UuZ2V0UGFydHMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB2aXNpdFBhcnQoKFBhcnQpaXRlcmF0b3IubmV4dCgpKTsKLSAgfQotCi0gIGFic3RyYWN0IHByb3RlY3RlZCB2b2lkIHZpc2l0UGFydChQYXJ0IHBhcnQpOwotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0UG9ydFR5cGUoUG9ydFR5cGUgcG9ydFR5cGUpCi0gIHsKLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IHBvcnRUeXBlLmdldE9wZXJhdGlvbnMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB2aXNpdE9wZXJhdGlvbigoT3BlcmF0aW9uKWl0ZXJhdG9yLm5leHQoKSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdE9wZXJhdGlvbihPcGVyYXRpb24gb3BlcmF0aW9uKQotICB7Ci0gICAgSW5wdXQgaW5wdXQgPSBvcGVyYXRpb24uZ2V0SW5wdXQoKTsKLSAgICB2aXNpdElucHV0KChJbnB1dClpbnB1dCk7Ci0KLSAgICBPdXRwdXQgb3V0cHV0ID0gb3BlcmF0aW9uLmdldE91dHB1dCgpOwotICAgIHZpc2l0T3V0cHV0KChPdXRwdXQpb3V0cHV0KTsKLQotICAgIGphdmEudXRpbC5NYXAgZmF1bHRzID0gb3BlcmF0aW9uLmdldEZhdWx0cygpOwotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gZmF1bHRzLmtleVNldCgpLml0ZXJhdG9yKCk7Ci0gICAgRmF1bHQgZmF1bHQgPSBudWxsOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgZmF1bHQgPSAoRmF1bHQpZmF1bHRzLmdldChpdGVyYXRvci5uZXh0KCkpOwotICAgICAgdmlzaXRGYXVsdChmYXVsdCk7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgdmlzaXRJbnB1dChJbnB1dCBpbnB1dCk7Ci0KLSAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgdmlzaXRPdXRwdXQoT3V0cHV0IG91dHB1dCk7Ci0KLSAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgdmlzaXRGYXVsdChGYXVsdCBmYXVsdCk7Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRCaW5kaW5nKEJpbmRpbmcgYmluZGluZykKLSAgewotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gYmluZGluZy5nZXRCaW5kaW5nT3BlcmF0aW9ucygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0QmluZGluZ09wZXJhdGlvbigoQmluZGluZ09wZXJhdGlvbilpdGVyYXRvci5uZXh0KCkpOwotCi0gICAgaXRlcmF0b3IgPSBiaW5kaW5nLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKEV4dGVuc2liaWxpdHlFbGVtZW50KWl0ZXJhdG9yLm5leHQoKSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEJpbmRpbmdPcGVyYXRpb24oQmluZGluZ09wZXJhdGlvbiBvcGVyYXRpb24pCi0gIHsKLSAgICBCaW5kaW5nSW5wdXQgaW5wdXQgPSBvcGVyYXRpb24uZ2V0QmluZGluZ0lucHV0KCk7Ci0gICAgdmlzaXRCaW5kaW5nSW5wdXQoKEJpbmRpbmdJbnB1dClpbnB1dCk7Ci0KLSAgICBCaW5kaW5nT3V0cHV0IG91dHB1dCA9IG9wZXJhdGlvbi5nZXRCaW5kaW5nT3V0cHV0KCk7Ci0gICAgdmlzaXRCaW5kaW5nT3V0cHV0KChCaW5kaW5nT3V0cHV0KW91dHB1dCk7Ci0KLSAgICBqYXZhLnV0aWwuTWFwIGJpbmRpbmdGYXVsdHMgPSBvcGVyYXRpb24uZ2V0QmluZGluZ0ZhdWx0cygpOwotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gYmluZGluZ0ZhdWx0cy5rZXlTZXQoKS5pdGVyYXRvcigpOwotICAgIEJpbmRpbmdGYXVsdCBiaW5kaW5nRmF1bHQgPSBudWxsOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgewotICAgICAgYmluZGluZ0ZhdWx0ID0gKEJpbmRpbmdGYXVsdCliaW5kaW5nRmF1bHRzLmdldChpdGVyYXRvci5uZXh0KCkpOwotICAgICAgdmlzaXRCaW5kaW5nRmF1bHQoYmluZGluZ0ZhdWx0KTsKLSAgICB9Ci0KLSAgICBpdGVyYXRvciA9IG9wZXJhdGlvbi5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB2aXNpdEV4dGVuc2liaWxpdHlFbGVtZW50KChFeHRlbnNpYmlsaXR5RWxlbWVudClpdGVyYXRvci5uZXh0KCkpOwotCi0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEJpbmRpbmdJbnB1dChCaW5kaW5nSW5wdXQgaW5wdXQpCi0gIHsKLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IGlucHV0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKEV4dGVuc2liaWxpdHlFbGVtZW50KWl0ZXJhdG9yLm5leHQoKSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEJpbmRpbmdPdXRwdXQoQmluZGluZ091dHB1dCBvdXRwdXQpCi0gIHsKLSAgICBJdGVyYXRvciBpdGVyYXRvciA9IG91dHB1dC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB2aXNpdEV4dGVuc2liaWxpdHlFbGVtZW50KChFeHRlbnNpYmlsaXR5RWxlbWVudClpdGVyYXRvci5uZXh0KCkpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRCaW5kaW5nRmF1bHQoQmluZGluZ0ZhdWx0IGZhdWx0KQotICB7Ci0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBmYXVsdC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKS5pdGVyYXRvcigpOwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICB2aXNpdEV4dGVuc2liaWxpdHlFbGVtZW50KChFeHRlbnNpYmlsaXR5RWxlbWVudClpdGVyYXRvci5uZXh0KCkpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRTZXJ2aWNlKFNlcnZpY2Ugc2VydmljZSkKLSAgewotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gc2VydmljZS5nZXRQb3J0cygpLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0UG9ydCgoUG9ydClpdGVyYXRvci5uZXh0KCkpOwotCi0gICAgaXRlcmF0b3IgPSBzZXJ2aWNlLmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKEV4dGVuc2liaWxpdHlFbGVtZW50KWl0ZXJhdG9yLm5leHQoKSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdFBvcnQoUG9ydCBwb3J0KQotICB7Ci0gICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBwb3J0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpLml0ZXJhdG9yKCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgIHZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoKEV4dGVuc2liaWxpdHlFbGVtZW50KWl0ZXJhdG9yLm5leHQoKSk7Ci0gIH0KLQotICBhYnN0cmFjdCBwcm90ZWN0ZWQgdm9pZCB2aXNpdEV4dGVuc2liaWxpdHlFbGVtZW50KEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuc2liaWxpdHlFbGVtZW50KTsKLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3V0aWwvV1NETENvbnZlcnRlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3V0aWwvV1NETENvbnZlcnRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTliMDI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy91dGlsL1dTRExDb252ZXJ0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU5OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWw7Ci0KLQotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBqYXZheC53c2RsLk9wZXJhdGlvblR5cGU7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeTsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uT3V0cHV0S2V5czsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlNvdXJjZTsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uZG9tLkRPTVNvdXJjZTsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLnN0cmVhbS5TdHJlYW1SZXN1bHQ7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5CaW5kaW5nRmF1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ0lucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmdPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuQmluZGluZ091dHB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2liaWxpdHlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2libGVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkZhdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLkltcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5JbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5NZXNzYWdlUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5PdXRwdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwuVHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogQGF1dGhvciBLaWh1cCBCb28KLSAqLwotcHVibGljIGNsYXNzIFdTRExDb252ZXJ0ZXIgZXh0ZW5kcyBEZWZpbml0aW9uVmlzaXRvcgotewotICBwcml2YXRlIERvY3VtZW50IGRvYzsKLQotICBwcml2YXRlIEVsZW1lbnQgZGVzY3JpcHRpb247Ci0KLSAgcHJpdmF0ZSBFbGVtZW50IGN1cnJlbnRUeXBlczsKLQotICBwcml2YXRlIEVsZW1lbnQgY3VycmVudFNlcnZpY2U7Ci0KLSAgcHJpdmF0ZSBFbGVtZW50IGN1cnJlbnRFbmRwb2ludDsKLQotICBwcml2YXRlIEVsZW1lbnQgY3VycmVudEludGVyZmFjZTsKLQotICBwcml2YXRlIEVsZW1lbnQgY3VycmVudE9wZXJhdGlvbjsKLQotICBwcml2YXRlIEVsZW1lbnQgY3VycmVudEJpbmRpbmc7Ci0KLSAgcHJpdmF0ZSBFbGVtZW50IGN1cnJlbnRCaW5kaW5nT3BlcmF0aW9uOwotCi0gIHByaXZhdGUgRWxlbWVudCBjdXJyZW50QmluZGluZ0lucHV0OwotCi0gIHByaXZhdGUgRWxlbWVudCBjdXJyZW50QmluZGluZ091dHB1dDsKLQotICBwcml2YXRlIEVsZW1lbnQgY3VycmVudEJpbmRpbmdGYXVsdDsKLQotICBwcml2YXRlIFN0cmluZyB3c2RsTmFtZXNwYWNlUHJlZml4OwotCi0gIHByaXZhdGUgU3RyaW5nIHhzZE5hbWVzcGFjZVByZWZpeDsKLQotICAvLyBBZGRlZCBmb3IgSlVuaXQKLSAgcHVibGljIFdTRExDb252ZXJ0ZXIoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihuYW1lKTsKLSAgfQotCi0gIC8qKgotICAgKiBAcGFyYW0gZGVmaW5pdGlvbgotICAgKi8KLSAgcHVibGljIFdTRExDb252ZXJ0ZXIoRGVmaW5pdGlvbiBkZWZpbml0aW9uKQotICB7Ci0gICAgc3VwZXIoZGVmaW5pdGlvbik7Ci0gICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjb25zdHJ1Y3RvciBzdHViCi0gIH0KLQotICBwdWJsaWMgdm9pZCBnZW5lcmF0ZTIwKFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgY3JlYXRlRG9jdW1lbnQoKTsKLSAgICB2aXNpdCgpOwotICAgIHNlcmlhbGl6ZShmaWxlbmFtZSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc2VyaWFsaXplKFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgU291cmNlIGRvbVNvdXJjZSA9IG5ldyBET01Tb3VyY2UoZG9jKTsKLSAgICBUcmFuc2Zvcm1lciB0cmFuc2Zvcm1lciA9IFRyYW5zZm9ybWVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld1RyYW5zZm9ybWVyKCk7Ci0gICAgdHJhbnNmb3JtZXIuc2V0T3V0cHV0UHJvcGVydHkoT3V0cHV0S2V5cy5JTkRFTlQsICJ5ZXMiKTsKLSAgICB0cmFuc2Zvcm1lci5zZXRPdXRwdXRQcm9wZXJ0eShPdXRwdXRLZXlzLkVOQ09ESU5HLCAiVVRGLTgiKTsKLSAgICB0cmFuc2Zvcm1lci5zZXRPdXRwdXRQcm9wZXJ0eSgie2h0dHA6Ly94bWwuYXBhY2hlLm9yZy94c2x0fWluZGVudC1hbW91bnQiLCAiNCIpOwotICAgIHRyYW5zZm9ybWVyLnRyYW5zZm9ybShkb21Tb3VyY2UsIG5ldyBTdHJlYW1SZXN1bHQobmV3IEZpbGVPdXRwdXRTdHJlYW0oZmlsZW5hbWUpKSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgY3JlYXRlRG9jdW1lbnQoKSB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbgotICB7Ci0gICAgZG9jID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld0RvY3VtZW50QnVpbGRlcigpLm5ld0RvY3VtZW50KCk7Ci0gIH0KLQotICBwcml2YXRlIEVsZW1lbnQgY3JlYXRlV1NETEVsZW1lbnQoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBFbGVtZW50IGVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDA0LzA4L3dzZGwiLCBuYW1lKTsKLSAgICBpZiAod3NkbE5hbWVzcGFjZVByZWZpeCAhPSBudWxsKQotICAgICAgZWxlbWVudC5zZXRQcmVmaXgod3NkbE5hbWVzcGFjZVByZWZpeCk7Ci0KLSAgICByZXR1cm4gZWxlbWVudDsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBwcm9jZXNzRG9jdW1lbnRhdGlvbihFbGVtZW50IGRvY0VsZW1lbnQsIEVsZW1lbnQgcGFyZW50KQotICB7Ci0gICAgaWYgKGRvY0VsZW1lbnQgPT0gbnVsbCkKLSAgICAgIHJldHVybjsKLQotICAgIEVsZW1lbnQgYWRvcHRlZERvY0VsZW1lbnQgPSAoRWxlbWVudClkb2MuaW1wb3J0Tm9kZShkb2NFbGVtZW50LCB0cnVlKTsKLSAgICBwYXJlbnQuYXBwZW5kQ2hpbGQoYWRvcHRlZERvY0VsZW1lbnQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXREZWZpbml0aW9uKERlZmluaXRpb24gZGVmKQotICB7Ci0gICAgZGVzY3JpcHRpb24gPSBjcmVhdGVXU0RMRWxlbWVudCgiZGVzY3JpcHRpb24iKTsKLSAgICBwcm9jZXNzRG9jdW1lbnRhdGlvbihkZWYuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSwgZGVzY3JpcHRpb24pOwotCi0gICAgLy8gVEJEIC0gRGV0ZXJtaW5lIGxhdGVyIGlmIHdlIHdhbnQgdG8gY29udmVydCB0aGUgZG9jdW1lbnQgdG8gdXNlIFNPQVAgMS4yLgotICAgIC8vIEhvd2V2ZXIgYWRkaW5nIHRoZXNlIHR3byBuYW1lc3BhY2VzIG1heSBub3QgYmUgaGFybWZ1bC4KLSAgICBkZXNjcmlwdGlvbi5zZXRBdHRyaWJ1dGUoInhtbG5zOnNvYXBlbnYiLCAiaHR0cDovL3d3dy53My5vcmcvMjAwMy8wNS9zb2FwLWVudmVsb3AiKTsKLSAgICBkZXNjcmlwdGlvbi5zZXRBdHRyaWJ1dGUoInhtbG5zOndzb2FwIiwgImh0dHA6Ly93d3cudzMub3JnLzIwMDQvMDgvc29hcDEyIik7Ci0KLSAgICBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlID0gZGVmLmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgIGlmICh0YXJnZXROYW1lc3BhY2UgIT0gbnVsbCkKLSAgICAgIGRlc2NyaXB0aW9uLnNldEF0dHJpYnV0ZSgidGFyZ2V0TmFtZXNwYWNlIiwgdGFyZ2V0TmFtZXNwYWNlKTsKLQotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gZGVmLmdldE5hbWVzcGFjZXMoKS5rZXlTZXQoKS5pdGVyYXRvcigpOwotICAgIFN0cmluZyBwcmVmaXggPSBudWxsOwotICAgIFN0cmluZyBuYW1lc3BhY2UgPSBudWxsOwotICAgIC8qCi0gICAgIHhtbG5zOnNvYXBlbmM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIgotICAgICB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiovCi0gICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICB7Ci0gICAgICBwcmVmaXggPSAoU3RyaW5nKWl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIG5hbWVzcGFjZSA9IGRlZi5nZXROYW1lc3BhY2UocHJlZml4KTsKLQotICAgICAgaWYgKCJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIuZXF1YWxzKG5hbWVzcGFjZSkpCi0gICAgICB7Ci0gICAgICAgIGlmIChwcmVmaXgubGVuZ3RoKCkgPT0gMCkgLy8gbWVhbnQgdG8gYmUgZGVmYXVsdCBuYW1lc3BhY2UKLSAgICAgICAgICBkZXNjcmlwdGlvbi5zZXRBdHRyaWJ1dGUoInhtbG5zIiwgImh0dHA6Ly93d3cudzMub3JnLzIwMDQvMDgvd3NkbCIpOwotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBkZXNjcmlwdGlvbi5zZXRBdHRyaWJ1dGUoInhtbG5zOiIgKyBwcmVmaXgsICJodHRwOi8vd3d3LnczLm9yZy8yMDA0LzA4L3dzZGwiKTsKLSAgICAgICAgICB3c2RsTmFtZXNwYWNlUHJlZml4ID0gcHJlZml4OwotICAgICAgICAgIGRlc2NyaXB0aW9uLnNldFByZWZpeCh3c2RsTmFtZXNwYWNlUHJlZml4KTsKLSAgICAgICAgfQotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLQotICAgICAgLy8gU09BUCAxLjIKLSAgICAgIGlmICgiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIuZXF1YWxzKG5hbWVzcGFjZSkpCi0gICAgICB7Ci0gICAgICAgIC8vIFNPQVAgMS4yCi0gICAgICAgIGRlc2NyaXB0aW9uLnNldEF0dHJpYnV0ZSgieG1sbnM6IiArIHByZWZpeCwgImh0dHA6Ly93d3cudzMub3JnLzIwMDMvMDUvc29hcC1lbnZlbG9wIik7Ci0KLSAgICAgICAgLy8gV1NETCAyLjAgYmluZGluZyBmb3IgU09BUCAxLjIKLSAgICAgICAgZGVzY3JpcHRpb24uc2V0QXR0cmlidXRlKCJ4bWxuczp3c29hcCIsICJodHRwOi8vd3d3LnczLm9yZy8yMDA0LzA4L3NvYXAxMiIpOwotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLQotICAgICAgLy9pZiAoImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIi5lcXVhbHMobmFtZXNwYWNlKSkKLSAgICAgIC8vICBjb250aW51ZTsKLQotICAgICAgaWYgKCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIuZXF1YWxzKG5hbWVzcGFjZSkpCi0gICAgICAgIHhzZE5hbWVzcGFjZVByZWZpeCA9IHByZWZpeDsgLy8gV2Ugd2lsbCB1c2UgdGhpcyBpbiB2aXNpdEltcG9ydCgpLgotCi0gICAgICBpZiAocHJlZml4Lmxlbmd0aCgpID09IDApIC8vIG1lYW50IHRvIGJlIGRlZmF1bHQgbmFtZXNwYWNlCi0gICAgICAgIGRlc2NyaXB0aW9uLnNldEF0dHJpYnV0ZSgieG1sbnMiICsgcHJlZml4LCBuYW1lc3BhY2UpOwotICAgICAgZWxzZQotICAgICAgICBkZXNjcmlwdGlvbi5zZXRBdHRyaWJ1dGUoInhtbG5zOiIgKyBwcmVmaXgsIG5hbWVzcGFjZSk7Ci0gICAgfQotCi0gICAgZG9jLmFwcGVuZENoaWxkKGRlc2NyaXB0aW9uKTsKLSAgICBzdXBlci52aXNpdERlZmluaXRpb24oZGVmKTsKLQotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWwuRGVmaW5pdGlvblZpc2l0b3IjdmlzaXRJbXBvcnQob3JnLmVjbGlwc2Uud3N0LndzZGwuSW1wb3J0KQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRJbXBvcnQoSW1wb3J0IHdzZGxJbXBvcnQpCi0gIHsKLSAgICAvLyBEZXRlcm1pbmUgaWYgd2UgPGltcG9ydD4gYSBzY2hlbWEuCi0gICAgaWYgKGltcG9ydGluZ1NjaGVtYSh3c2RsSW1wb3J0KSkKLSAgICB7Ci0gICAgICBjdXJyZW50VHlwZXMgPSBjcmVhdGVXU0RMRWxlbWVudCgidHlwZXMiKTsKLSAgICAgIGRlc2NyaXB0aW9uLmFwcGVuZENoaWxkKGN1cnJlbnRUeXBlcyk7Ci0KLSAgICAgIC8vICA8eHM6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL2Zvby5jb20iIHNjaGVtYUxvY2F0aW9uPSAiYmFyLnhzZCIvPgotICAgICAgRWxlbWVudCBzY2hlbWFJbXBvcnQgPSBkb2MuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIsICJpbXBvcnQiKTsKLSAgICAgIGlmICh4c2ROYW1lc3BhY2VQcmVmaXggPT0gbnVsbCkgLy8gbmVlZCB0byBhZGQgb25lCi0gICAgICB7Ci0gICAgICAgIGRlc2NyaXB0aW9uLnNldEF0dHJpYnV0ZSgieG1sbnM6eHMiLCAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiKTsKLSAgICAgICAgeHNkTmFtZXNwYWNlUHJlZml4ID0gInhzIjsKLSAgICAgICAgc2NoZW1hSW1wb3J0LnNldFByZWZpeCh4c2ROYW1lc3BhY2VQcmVmaXgpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoISIiLmVxdWFscyh4c2ROYW1lc3BhY2VQcmVmaXgpKSAvLyBpdCBpcyBub3QgZGVmYXVsdCBuYW1lc3BhY2UKLSAgICAgICAgc2NoZW1hSW1wb3J0LnNldFByZWZpeCh4c2ROYW1lc3BhY2VQcmVmaXgpOwotCi0gICAgICBzY2hlbWFJbXBvcnQuc2V0QXR0cmlidXRlKCJuYW1lc3BhY2UiLCB3c2RsSW1wb3J0LmdldE5hbWVzcGFjZVVSSSgpKTsKLSAgICAgIHNjaGVtYUltcG9ydC5zZXRBdHRyaWJ1dGUoInNjaGVtYUxvY2F0aW9uIiwgd3NkbEltcG9ydC5nZXRMb2NhdGlvblVSSSgpKTsKLSAgICAgIHByb2Nlc3NEb2N1bWVudGF0aW9uKHdzZGxJbXBvcnQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSwgc2NoZW1hSW1wb3J0KTsKLSAgICAgIGN1cnJlbnRUeXBlcy5hcHBlbmRDaGlsZChzY2hlbWFJbXBvcnQpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgRWxlbWVudCBpbXBvcnRFbGVtZW50ID0gd3NkbEltcG9ydC5nZXRFbGVtZW50KCk7Ci0gICAgICBFbGVtZW50IGFkb3B0ZWRJbXBvcnRFbGVtZW50ID0gKEVsZW1lbnQpZG9jLmltcG9ydE5vZGUoaW1wb3J0RWxlbWVudCwgdHJ1ZSk7Ci0gICAgICBwcm9jZXNzRG9jdW1lbnRhdGlvbih3c2RsSW1wb3J0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCksIGFkb3B0ZWRJbXBvcnRFbGVtZW50KTsKLSAgICAgIGRlc2NyaXB0aW9uLmFwcGVuZENoaWxkKGFkb3B0ZWRJbXBvcnRFbGVtZW50KTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gaW1wb3J0aW5nU2NoZW1hKEltcG9ydCBteUltcG9ydCkKLSAgewotICAgIGlmIChteUltcG9ydC5nZXREZWZpbml0aW9uKCkgIT0gbnVsbCkgLy8gaXQgaXMgV1NETCBpbXBvcnQKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsLkRlZmluaXRpb25WaXNpdG9yI3Zpc2l0VHlwZXMob3JnLmVjbGlwc2Uud3N0LndzZGwuVHlwZXMpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdFR5cGVzKFR5cGVzIHR5cGVzKQotICB7Ci0gICAgLy8gY3VycmVudFR5cGVzIG1heSBoYXZlIGJlZW4gY3JlYXRlZCBpbiB2aXNpdEltcG9ydCgpLgotICAgIGlmIChjdXJyZW50VHlwZXMgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBjdXJyZW50VHlwZXMgPSBjcmVhdGVXU0RMRWxlbWVudCgidHlwZXMiKTsKLSAgICAgIHByb2Nlc3NEb2N1bWVudGF0aW9uKHR5cGVzLmdldERvY3VtZW50YXRpb25FbGVtZW50KCksIGN1cnJlbnRUeXBlcyk7Ci0gICAgICBkZXNjcmlwdGlvbi5hcHBlbmRDaGlsZChjdXJyZW50VHlwZXMpOwotICAgIH0KLQotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gdHlwZXMuZ2V0U2NoZW1hcygpLml0ZXJhdG9yKCk7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IG51bGw7Ci0gICAgRWxlbWVudCBzY2hlbWFFbGVtZW50ID0gbnVsbDsKLSAgICBFbGVtZW50IGFkb3B0ZWRTY2hlbWFFbGVtZW50ID0gbnVsbDsKLSAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgIHsKLSAgICAgIHNjaGVtYSA9IChYU0RTY2hlbWEpaXRlcmF0b3IubmV4dCgpOwotICAgICAgc2NoZW1hLnVwZGF0ZUVsZW1lbnQoKTsKLSAgICAgIHNjaGVtYUVsZW1lbnQgPSBzY2hlbWEuZ2V0RWxlbWVudCgpOwotICAgICAgYWRvcHRlZFNjaGVtYUVsZW1lbnQgPSAoRWxlbWVudClkb2MuaW1wb3J0Tm9kZShzY2hlbWFFbGVtZW50LCB0cnVlKTsKLSAgICAgIGN1cnJlbnRUeXBlcy5hcHBlbmRDaGlsZChhZG9wdGVkU2NoZW1hRWxlbWVudCk7Ci0gICAgfQotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWwuRGVmaW5pdGlvblZpc2l0b3IjdmlzaXRQYXJ0KG9yZy5lY2xpcHNlLndzdC53c2RsLlBhcnQpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdFBhcnQoUGFydCBwYXJ0KQotICB7Ci0gICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRQb3J0VHlwZShQb3J0VHlwZSBwb3J0VHlwZSkKLSAgewotICAgIGN1cnJlbnRJbnRlcmZhY2UgPSBjcmVhdGVXU0RMRWxlbWVudCgiaW50ZXJmYWNlIik7Ci0gICAgcHJvY2Vzc0RvY3VtZW50YXRpb24ocG9ydFR5cGUuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSwgY3VycmVudEludGVyZmFjZSk7Ci0KLSAgICBFbGVtZW50IHBvcnRUeXBlRWxlbWVudCA9IHBvcnRUeXBlLmdldEVsZW1lbnQoKTsKLSAgICBpZiAocG9ydFR5cGVFbGVtZW50Lmhhc0F0dHJpYnV0ZSgibmFtZSIpKQotICAgICAgY3VycmVudEludGVyZmFjZS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCBwb3J0VHlwZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJuYW1lIikpOwotCi0gICAgZGVzY3JpcHRpb24uYXBwZW5kQ2hpbGQoY3VycmVudEludGVyZmFjZSk7Ci0gICAgc3VwZXIudmlzaXRQb3J0VHlwZShwb3J0VHlwZSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdE9wZXJhdGlvbihPcGVyYXRpb24gb3BlcmF0aW9uKQotICB7Ci0gICAgY3VycmVudE9wZXJhdGlvbiA9IGNyZWF0ZVdTRExFbGVtZW50KCJvcGVyYXRpb24iKTsKLSAgICBwcm9jZXNzRG9jdW1lbnRhdGlvbihvcGVyYXRpb24uZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSwgY3VycmVudE9wZXJhdGlvbik7Ci0KLSAgICBFbGVtZW50IG9wZXJhdGlvbkVsZW1lbnQgPSBvcGVyYXRpb24uZ2V0RWxlbWVudCgpOwotICAgIGlmIChvcGVyYXRpb25FbGVtZW50Lmhhc0F0dHJpYnV0ZSgibmFtZSIpKQotICAgICAgY3VycmVudE9wZXJhdGlvbi5zZXRBdHRyaWJ1dGUoIm5hbWUiLCBvcGVyYXRpb25FbGVtZW50LmdldEF0dHJpYnV0ZSgibmFtZSIpKTsKLQotICAgIE9wZXJhdGlvblR5cGUgb3BUeXBlID0gb3BlcmF0aW9uLmdldFN0eWxlKCk7Ci0gICAgaWYgKE9wZXJhdGlvblR5cGUuUkVRVUVTVF9SRVNQT05TRSA9PSBvcFR5cGUpCi0gICAgICBjdXJyZW50T3BlcmF0aW9uLnNldEF0dHJpYnV0ZSgicGF0dGVybiIsICJodHRwOi8vd3d3LnczLm9yZy8yMDA0LzAzL3dzZGwvaW4tb3V0Iik7Ci0gICAgZWxzZSBpZiAoT3BlcmF0aW9uVHlwZS5TT0xJQ0lUX1JFU1BPTlNFID09IG9wVHlwZSkKLSAgICAgIGN1cnJlbnRPcGVyYXRpb24uc2V0QXR0cmlidXRlKCJwYXR0ZXJuIiwgImh0dHA6Ly93d3cudzMub3JnLzIwMDQvMDMvd3NkbC9vdXQtaW4iKTsKLSAgICBlbHNlIGlmIChPcGVyYXRpb25UeXBlLk5PVElGSUNBVElPTiA9PSBvcFR5cGUpCi0gICAgICBjdXJyZW50T3BlcmF0aW9uLnNldEF0dHJpYnV0ZSgicGF0dGVybiIsICJodHRwOi8vd3d3LnczLm9yZy8yMDA0LzAzL3dzZGwvb3V0LW9ubHkiKTsKLSAgICBlbHNlIGlmIChPcGVyYXRpb25UeXBlLk9ORV9XQVkgPT0gb3BUeXBlKQotICAgICAgY3VycmVudE9wZXJhdGlvbi5zZXRBdHRyaWJ1dGUoInBhdHRlcm4iLCAiaHR0cDovL3d3dy53My5vcmcvMjAwNC8wMy93c2RsL2luLW9ubHkiKTsKLQotICAgIGN1cnJlbnRJbnRlcmZhY2UuYXBwZW5kQ2hpbGQoY3VycmVudE9wZXJhdGlvbik7Ci0gICAgc3VwZXIudmlzaXRPcGVyYXRpb24ob3BlcmF0aW9uKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsLkRlZmluaXRpb25WaXNpdG9yI3Zpc2l0SW5wdXQob3JnLmVjbGlwc2Uud3N0LndzZGwuSW5wdXQpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdElucHV0KElucHV0IGlucHV0KQotICB7Ci0gICAgRWxlbWVudCBjdXJyZW50SW5wdXQgPSBjcmVhdGVXU0RMRWxlbWVudCgiaW5wdXQiKTsKLSAgICBwcm9jZXNzRG9jdW1lbnRhdGlvbihpbnB1dC5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpLCBjdXJyZW50SW5wdXQpOwotCi0gICAgRWxlbWVudCBpbnB1dEVsZW1lbnQgPSBpbnB1dC5nZXRFbGVtZW50KCk7Ci0KLSAgICBpZiAoaW5wdXRFbGVtZW50Lmhhc0F0dHJpYnV0ZSgibmFtZSIpKQotICAgICAgY3VycmVudElucHV0LnNldEF0dHJpYnV0ZSgibWVzc2FnZUxhYmVsIiwgaW5wdXRFbGVtZW50LmdldEF0dHJpYnV0ZSgibmFtZSIpKTsKLQotICAgIEVsZW1lbnQgcGFydEVsZW1lbnQgPSBnZXRQYXJ0RWxlbWVudChpbnB1dCk7Ci0gICAgaWYgKHBhcnRFbGVtZW50Lmhhc0F0dHJpYnV0ZSgiZWxlbWVudCIpKQotICAgICAgY3VycmVudElucHV0LnNldEF0dHJpYnV0ZSgiZWxlbWVudCIsIHBhcnRFbGVtZW50LmdldEF0dHJpYnV0ZSgiZWxlbWVudCIpKTsKLSAgICAvLyBUQkQgLSB3aGF0IGlmIHRoZSBwYXJ0IHVzZXMgInR5cGUiPwotCi0gICAgY3VycmVudE9wZXJhdGlvbi5hcHBlbmRDaGlsZChjdXJyZW50SW5wdXQpOwotICB9Ci0KLSAgcHJpdmF0ZSBFbGVtZW50IGdldFBhcnRFbGVtZW50KE1lc3NhZ2VSZWZlcmVuY2UgbWVzc2FnZVJlZikKLSAgewotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gbWVzc2FnZVJlZi5nZXRFTWVzc2FnZSgpLmdldEVQYXJ0cygpLml0ZXJhdG9yKCk7Ci0gICAgLy8gVEJEIC0gZm9yIG5vdywgdGFrZSB0aGUgZmlyc3QgcGFydC4KLSAgICBQYXJ0IHBhcnQgPSAoUGFydClpdGVyYXRvci5uZXh0KCk7Ci0gICAgRWxlbWVudCBwYXJ0RWxlbWVudCA9IHBhcnQuZ2V0RWxlbWVudCgpOwotICAgIHJldHVybiBwYXJ0RWxlbWVudDsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsLkRlZmluaXRpb25WaXNpdG9yI3Zpc2l0T3V0cHV0KG9yZy5lY2xpcHNlLndzdC53c2RsLk91dHB1dCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0T3V0cHV0KE91dHB1dCBvdXRwdXQpCi0gIHsKLSAgICBFbGVtZW50IGN1cnJlbnRPdXRwdXQgPSBjcmVhdGVXU0RMRWxlbWVudCgib3V0cHV0Iik7Ci0gICAgcHJvY2Vzc0RvY3VtZW50YXRpb24ob3V0cHV0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCksIGN1cnJlbnRPdXRwdXQpOwotCi0gICAgRWxlbWVudCBvdXRwdXRFbGVtZW50ID0gb3V0cHV0LmdldEVsZW1lbnQoKTsKLQotICAgIGlmIChvdXRwdXRFbGVtZW50Lmhhc0F0dHJpYnV0ZSgibmFtZSIpKQotICAgICAgY3VycmVudE91dHB1dC5zZXRBdHRyaWJ1dGUoIm1lc3NhZ2VMYWJlbCIsIG91dHB1dEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJuYW1lIikpOwotCi0gICAgRWxlbWVudCBwYXJ0RWxlbWVudCA9IGdldFBhcnRFbGVtZW50KG91dHB1dCk7Ci0gICAgaWYgKHBhcnRFbGVtZW50Lmhhc0F0dHJpYnV0ZSgiZWxlbWVudCIpKQotICAgICAgY3VycmVudE91dHB1dC5zZXRBdHRyaWJ1dGUoImVsZW1lbnQiLCBwYXJ0RWxlbWVudC5nZXRBdHRyaWJ1dGUoImVsZW1lbnQiKSk7Ci0gICAgLy8gVEJEIC0gd2hhdCBpZiB0aGUgcGFydCB1c2VzICJ0eXBlIj8KLQotICAgIGN1cnJlbnRPcGVyYXRpb24uYXBwZW5kQ2hpbGQoY3VycmVudE91dHB1dCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudXRpbC5EZWZpbml0aW9uVmlzaXRvciN2aXNpdEZhdWx0KG9yZy5lY2xpcHNlLndzdC53c2RsLkZhdWx0KQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRGYXVsdChGYXVsdCBmYXVsdCkKLSAgewotICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWwuRGVmaW5pdGlvblZpc2l0b3IjdmlzaXRCaW5kaW5nKG9yZy5lY2xpcHNlLndzdC53c2RsLkJpbmRpbmcpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEJpbmRpbmcoQmluZGluZyBiaW5kaW5nKQotICB7Ci0gICAgY3VycmVudEJpbmRpbmcgPSBjcmVhdGVXU0RMRWxlbWVudCgiYmluZGluZyIpOwotICAgIHByb2Nlc3NEb2N1bWVudGF0aW9uKGJpbmRpbmcuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSwgY3VycmVudEJpbmRpbmcpOwotCi0gICAgRWxlbWVudCBiaW5kaW5nRWxlbWVudCA9IGJpbmRpbmcuZ2V0RWxlbWVudCgpOwotICAgIGlmIChiaW5kaW5nRWxlbWVudC5oYXNBdHRyaWJ1dGUoIm5hbWUiKSkKLSAgICAgIGN1cnJlbnRCaW5kaW5nLnNldEF0dHJpYnV0ZSgibmFtZSIsIGJpbmRpbmdFbGVtZW50LmdldEF0dHJpYnV0ZSgibmFtZSIpKTsKLSAgICBpZiAoYmluZGluZ0VsZW1lbnQuaGFzQXR0cmlidXRlKCJ0eXBlIikpCi0gICAgICBjdXJyZW50QmluZGluZy5zZXRBdHRyaWJ1dGUoImludGVyZmFjZSIsIGJpbmRpbmdFbGVtZW50LmdldEF0dHJpYnV0ZSgidHlwZSIpKTsKLQotICAgIC8vIFRCRCAtIGlzIHRoZSBuZXh0IGxpbmUgZml4ZWQgZm9yIFNPQVA/Ci0gICAgY3VycmVudEJpbmRpbmcuc2V0QXR0cmlidXRlKCJ0eXBlIiwgImh0dHA6Ly93d3cudzMub3JnLzIwMDQvMDgvd3NkbC9zb2FwMTIiKTsKLSAgICBjdXJyZW50QmluZGluZy5zZXRBdHRyaWJ1dGUoIndzb2FwOnByb3RvY29sIiwgImh0dHA6Ly93d3cudzMub3JnLzIwMDMvMDUvc29hcC9iaW5kaW5ncy9IVFRQIik7Ci0gICAgY3VycmVudEJpbmRpbmcuc2V0QXR0cmlidXRlKCJ3c29hcDptZXBEZWZhdWx0IiwgImh0dHA6Ly93d3cudzMub3JnLjIwMDMvMDUvc29hcC9tZXAvcmVxdWVzdC1yZXNwb25zZSIpOwotCi0gICAgZGVzY3JpcHRpb24uYXBwZW5kQ2hpbGQoY3VycmVudEJpbmRpbmcpOwotICAgIHN1cGVyLnZpc2l0QmluZGluZyhiaW5kaW5nKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0QmluZGluZ09wZXJhdGlvbihCaW5kaW5nT3BlcmF0aW9uIG9wZXJhdGlvbikKLSAgewotICAgIGN1cnJlbnRCaW5kaW5nT3BlcmF0aW9uID0gY3JlYXRlV1NETEVsZW1lbnQoIm9wZXJhdGlvbiIpOwotICAgIHByb2Nlc3NEb2N1bWVudGF0aW9uKG9wZXJhdGlvbi5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpLCBjdXJyZW50QmluZGluZ09wZXJhdGlvbik7Ci0KLSAgICBTdHJpbmcgb3BlcmF0aW9uTmFtZSA9IG9wZXJhdGlvbi5nZXRFT3BlcmF0aW9uKCkuZ2V0TmFtZSgpOwotCi0gICAgLy8gRGV0ZXJtaW5lIHByZWZpeAotICAgIFN0cmluZyBwcmVmaXggPSBudWxsOwotICAgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSBudWxsOwotICAgIERlZmluaXRpb24gZGVmID0gb3BlcmF0aW9uLmdldEVuY2xvc2luZ0RlZmluaXRpb24oKTsKLSAgICBpZiAoZGVmICE9IG51bGwpCi0gICAgICB0YXJnZXROYW1lc3BhY2UgPSBkZWYuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgaWYgKHRhcmdldE5hbWVzcGFjZSAhPSBudWxsKQotICAgICAgcHJlZml4ID0gZGVmLmdldFByZWZpeCh0YXJnZXROYW1lc3BhY2UpOwotCi0gICAgaWYgKHByZWZpeCA9PSBudWxsKQotICAgICAgcHJlZml4ID0gIiI7Ci0gICAgZWxzZQotICAgICAgcHJlZml4ICs9ICI6IjsKLQotICAgIGN1cnJlbnRCaW5kaW5nT3BlcmF0aW9uLnNldEF0dHJpYnV0ZSgicmVmIiwgcHJlZml4ICsgb3BlcmF0aW9uTmFtZSk7Ci0KLSAgICBjdXJyZW50QmluZGluZy5hcHBlbmRDaGlsZChjdXJyZW50QmluZGluZ09wZXJhdGlvbik7Ci0gICAgc3VwZXIudmlzaXRCaW5kaW5nT3BlcmF0aW9uKG9wZXJhdGlvbik7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCB2aXNpdEJpbmRpbmdJbnB1dChCaW5kaW5nSW5wdXQgaW5wdXQpCi0gIHsKLSAgICBjdXJyZW50QmluZGluZ0lucHV0ID0gY3JlYXRlV1NETEVsZW1lbnQoImlucHV0Iik7Ci0gICAgcHJvY2Vzc0RvY3VtZW50YXRpb24oaW5wdXQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSwgY3VycmVudEJpbmRpbmdJbnB1dCk7Ci0KLSAgICBFbGVtZW50IGlucHV0RWxlbWVudCA9IGlucHV0LmdldEVsZW1lbnQoKTsKLSAgICBTdHJpbmcgaW5wdXROYW1lID0gaW5wdXQuZ2V0TmFtZSgpOwotICAgIGlmIChpbnB1dE5hbWUgIT0gbnVsbCkKLSAgICAgIGlucHV0RWxlbWVudC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCBpbnB1dE5hbWUpOwotCi0gICAgY3VycmVudEJpbmRpbmdPcGVyYXRpb24uYXBwZW5kQ2hpbGQoY3VycmVudEJpbmRpbmdJbnB1dCk7Ci0gICAgc3VwZXIudmlzaXRCaW5kaW5nSW5wdXQoaW5wdXQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRCaW5kaW5nT3V0cHV0KEJpbmRpbmdPdXRwdXQgb3V0cHV0KQotICB7Ci0gICAgY3VycmVudEJpbmRpbmdPdXRwdXQgPSBjcmVhdGVXU0RMRWxlbWVudCgib3V0cHV0Iik7Ci0gICAgcHJvY2Vzc0RvY3VtZW50YXRpb24ob3V0cHV0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCksIGN1cnJlbnRCaW5kaW5nT3V0cHV0KTsKLQotICAgIEVsZW1lbnQgb3V0cHV0RWxlbWVudCA9IG91dHB1dC5nZXRFbGVtZW50KCk7Ci0gICAgU3RyaW5nIG91dHB1dE5hbWUgPSBvdXRwdXQuZ2V0TmFtZSgpOwotICAgIGlmIChvdXRwdXROYW1lICE9IG51bGwpCi0gICAgICBvdXRwdXRFbGVtZW50LnNldEF0dHJpYnV0ZSgibmFtZSIsIG91dHB1dE5hbWUpOwotCi0gICAgY3VycmVudEJpbmRpbmdPcGVyYXRpb24uYXBwZW5kQ2hpbGQoY3VycmVudEJpbmRpbmdPdXRwdXQpOwotICAgIHN1cGVyLnZpc2l0QmluZGluZ091dHB1dChvdXRwdXQpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRCaW5kaW5nRmF1bHQoQmluZGluZ0ZhdWx0IGZhdWx0KQotICB7Ci0gICAgY3VycmVudEJpbmRpbmdGYXVsdCA9IGNyZWF0ZVdTRExFbGVtZW50KCJmYXVsdCIpOwotICAgIHByb2Nlc3NEb2N1bWVudGF0aW9uKGZhdWx0LmdldERvY3VtZW50YXRpb25FbGVtZW50KCksIGN1cnJlbnRCaW5kaW5nRmF1bHQpOwotCi0gICAgRWxlbWVudCBmYXVsdEVsZW1lbnQgPSBmYXVsdC5nZXRFbGVtZW50KCk7Ci0gICAgU3RyaW5nIGZhdWx0TmFtZSA9IGZhdWx0LmdldE5hbWUoKTsKLSAgICBpZiAoZmF1bHROYW1lICE9IG51bGwpCi0gICAgICBmYXVsdEVsZW1lbnQuc2V0QXR0cmlidXRlKCJuYW1lIiwgZmF1bHROYW1lKTsKLQotICAgIGN1cnJlbnRCaW5kaW5nT3BlcmF0aW9uLmFwcGVuZENoaWxkKGN1cnJlbnRCaW5kaW5nRmF1bHQpOwotICAgIHN1cGVyLnZpc2l0QmluZGluZ0ZhdWx0KGZhdWx0KTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0U2VydmljZShTZXJ2aWNlIHNlcnZpY2UpCi0gIHsKLSAgICBjdXJyZW50U2VydmljZSA9IGNyZWF0ZVdTRExFbGVtZW50KCJzZXJ2aWNlIik7Ci0gICAgcHJvY2Vzc0RvY3VtZW50YXRpb24oc2VydmljZS5nZXREb2N1bWVudGF0aW9uRWxlbWVudCgpLCBjdXJyZW50U2VydmljZSk7Ci0KLSAgICBFbGVtZW50IHNlcnZpY2VFbGVtZW50ID0gc2VydmljZS5nZXRFbGVtZW50KCk7Ci0gICAgaWYgKHNlcnZpY2VFbGVtZW50Lmhhc0F0dHJpYnV0ZSgibmFtZSIpKQotICAgICAgY3VycmVudFNlcnZpY2Uuc2V0QXR0cmlidXRlKCJuYW1lIiwgc2VydmljZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJuYW1lIikpOwotCi0gICAgZGVzY3JpcHRpb24uYXBwZW5kQ2hpbGQoY3VycmVudFNlcnZpY2UpOwotICAgIHN1cGVyLnZpc2l0U2VydmljZShzZXJ2aWNlKTsKLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsLkRlZmluaXRpb25WaXNpdG9yI3Zpc2l0UG9ydChvcmcuZWNsaXBzZS53c3Qud3NkbC5Qb3J0KQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgdmlzaXRQb3J0KFBvcnQgcG9ydCkKLSAgewotICAgIGN1cnJlbnRFbmRwb2ludCA9IGNyZWF0ZVdTRExFbGVtZW50KCJlbmRwb2ludCIpOwotICAgIHByb2Nlc3NEb2N1bWVudGF0aW9uKHBvcnQuZ2V0RG9jdW1lbnRhdGlvbkVsZW1lbnQoKSwgY3VycmVudEVuZHBvaW50KTsKLQotICAgIEVsZW1lbnQgcG9ydEVsZW1lbnQgPSBwb3J0LmdldEVsZW1lbnQoKTsKLSAgICBpZiAocG9ydEVsZW1lbnQuaGFzQXR0cmlidXRlKCJuYW1lIikpCi0gICAgICBjdXJyZW50RW5kcG9pbnQuc2V0QXR0cmlidXRlKCJuYW1lIiwgcG9ydEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJuYW1lIikpOwotICAgIGlmIChwb3J0RWxlbWVudC5oYXNBdHRyaWJ1dGUoImJpbmRpbmciKSkKLSAgICAgIGN1cnJlbnRFbmRwb2ludC5zZXRBdHRyaWJ1dGUoImJpbmRpbmciLCBwb3J0RWxlbWVudC5nZXRBdHRyaWJ1dGUoImJpbmRpbmciKSk7Ci0KLSAgICAvLyBBZGQgaW50ZXJmYWNlIHRvIGN1cnJlbnQgc2VydmljZQotICAgIEJpbmRpbmcgYmluZGluZyA9IHBvcnQuZ2V0RUJpbmRpbmcoKTsKLSAgICBpZiAoYmluZGluZyAhPSBudWxsKSAvLyBiaW5kaW5nIGNvdWxkIG5vdCBiZSByZXNvbHZlZAotICAgIHsKLSAgICAgIEVsZW1lbnQgYmluZGluZ0VsZW1lbnQgPSBiaW5kaW5nLmdldEVsZW1lbnQoKTsKLSAgICAgIGlmIChiaW5kaW5nRWxlbWVudC5oYXNBdHRyaWJ1dGUoInR5cGUiKSkKLSAgICAgICAgY3VycmVudFNlcnZpY2Uuc2V0QXR0cmlidXRlKCJpbnRlcmZhY2UiLCBiaW5kaW5nRWxlbWVudC5nZXRBdHRyaWJ1dGUoInR5cGUiKSk7Ci0gICAgfQotCi0gICAgY3VycmVudFNlcnZpY2UuYXBwZW5kQ2hpbGQoY3VycmVudEVuZHBvaW50KTsKLSAgICBzdXBlci52aXNpdFBvcnQocG9ydCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMudXRpbC5EZWZpbml0aW9uVmlzaXRvciN2aXNpdEV4dGVuc2liaWxpdHlFbGVtZW50KG9yZy5lY2xpcHNlLndzdC53c2RsLkV4dGVuc2libGVFbGVtZW50LCBvcmcuZWNsaXBzZS53c3Qud3NkbC5FeHRlbnNpYmlsaXR5RWxlbWVudCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHZpc2l0RXh0ZW5zaWJpbGl0eUVsZW1lbnQoRXh0ZW5zaWJsZUVsZW1lbnQgb3duZXIsIEV4dGVuc2liaWxpdHlFbGVtZW50IGV4dGVuc2liaWxpdHlFbGVtZW50KQotICB7Ci0gICAgLy8gVEJEIC0gSXQgaXMgbm90IGp1c3QgU09BUCBiaW5kaW5nCi0gICAgaWYgKG93bmVyIGluc3RhbmNlb2Ygb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5Qb3J0SW1wbCkKLSAgICB7Ci0gICAgICBFbGVtZW50IHNvYXBFbGVtZW50ID0gZXh0ZW5zaWJpbGl0eUVsZW1lbnQuZ2V0RWxlbWVudCgpOwotICAgICAgaWYgKHNvYXBFbGVtZW50Lmhhc0F0dHJpYnV0ZSgibG9jYXRpb24iKSkKLSAgICAgICAgY3VycmVudEVuZHBvaW50LnNldEF0dHJpYnV0ZSgiYWRkcmVzcyIsIHNvYXBFbGVtZW50LmdldEF0dHJpYnV0ZSgibG9jYXRpb24iKSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBFbGVtZW50IGRvbUVsZW1lbnQgPSBleHRlbnNpYmlsaXR5RWxlbWVudC5nZXRFbGVtZW50KCk7Ci0gICAgICBFbGVtZW50IGFkb3B0ZWRET01FbGVtZW50ID0gKEVsZW1lbnQpZG9jLmltcG9ydE5vZGUoZG9tRWxlbWVudCwgdHJ1ZSk7Ci0KLSAgICAgIGlmIChvd25lciBpbnN0YW5jZW9mIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuRGVmaW5pdGlvbkltcGwpCi0gICAgICAgIGRlc2NyaXB0aW9uLmluc2VydEJlZm9yZShhZG9wdGVkRE9NRWxlbWVudCwgZGVzY3JpcHRpb24uZ2V0Rmlyc3RDaGlsZCgpKTsKLSAgICAgIGVsc2UgaWYgKG93bmVyIGluc3RhbmNlb2Ygb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5TZXJ2aWNlSW1wbCkKLSAgICAgICAgY3VycmVudFNlcnZpY2UuaW5zZXJ0QmVmb3JlKGFkb3B0ZWRET01FbGVtZW50LCBjdXJyZW50U2VydmljZS5nZXRGaXJzdENoaWxkKCkpOwotICAgICAgZWxzZSBpZiAob3duZXIgaW5zdGFuY2VvZiBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLlBvcnRUeXBlSW1wbCkKLSAgICAgICAgY3VycmVudEludGVyZmFjZS5pbnNlcnRCZWZvcmUoYWRvcHRlZERPTUVsZW1lbnQsIGN1cnJlbnRJbnRlcmZhY2UuZ2V0Rmlyc3RDaGlsZCgpKTsKLSAgICAgIGVsc2UgaWYgKG93bmVyIGluc3RhbmNlb2Ygb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5PcGVyYXRpb25JbXBsKQotICAgICAgICBjdXJyZW50T3BlcmF0aW9uLmluc2VydEJlZm9yZShhZG9wdGVkRE9NRWxlbWVudCwgY3VycmVudE9wZXJhdGlvbi5nZXRGaXJzdENoaWxkKCkpOwotICAgICAgZWxzZSBpZiAob3duZXIgaW5zdGFuY2VvZiBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkJpbmRpbmdJbXBsKQotICAgICAgICBjdXJyZW50QmluZGluZy5pbnNlcnRCZWZvcmUoYWRvcHRlZERPTUVsZW1lbnQsIGN1cnJlbnRCaW5kaW5nLmdldEZpcnN0Q2hpbGQoKSk7Ci0gICAgICBlbHNlIGlmIChvd25lciBpbnN0YW5jZW9mIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuQmluZGluZ09wZXJhdGlvbkltcGwpCi0gICAgICAgIGN1cnJlbnRCaW5kaW5nT3BlcmF0aW9uLmluc2VydEJlZm9yZShhZG9wdGVkRE9NRWxlbWVudCwgY3VycmVudEJpbmRpbmdPcGVyYXRpb24uZ2V0Rmlyc3RDaGlsZCgpKTsKLSAgICAgIGVsc2UgaWYgKG93bmVyIGluc3RhbmNlb2Ygb3JnLmVjbGlwc2Uud3N0LndzZGwuaW50ZXJuYWwuaW1wbC5CaW5kaW5nSW5wdXRJbXBsKQotICAgICAgICBjdXJyZW50QmluZGluZ0lucHV0Lmluc2VydEJlZm9yZShhZG9wdGVkRE9NRWxlbWVudCwgY3VycmVudEJpbmRpbmdJbnB1dC5nZXRGaXJzdENoaWxkKCkpOwotICAgICAgZWxzZSBpZiAob3duZXIgaW5zdGFuY2VvZiBvcmcuZWNsaXBzZS53c3Qud3NkbC5pbnRlcm5hbC5pbXBsLkJpbmRpbmdPdXRwdXRJbXBsKQotICAgICAgICBjdXJyZW50QmluZGluZ091dHB1dC5pbnNlcnRCZWZvcmUoYWRvcHRlZERPTUVsZW1lbnQsIGN1cnJlbnRCaW5kaW5nT3V0cHV0LmdldEZpcnN0Q2hpbGQoKSk7Ci0gICAgICBlbHNlIGlmIChvd25lciBpbnN0YW5jZW9mIG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLmltcGwuQmluZGluZ0ZhdWx0SW1wbCkKLSAgICAgICAgY3VycmVudEJpbmRpbmdGYXVsdC5pbnNlcnRCZWZvcmUoYWRvcHRlZERPTUVsZW1lbnQsIGN1cnJlbnRCaW5kaW5nRmF1bHQuZ2V0Rmlyc3RDaGlsZCgpKTsKLQotICAgIH0KLQotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIFRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBUZXN0U3VpdGUoKTsKLQotICAgIHN1aXRlLmFkZFRlc3QobmV3IFdTRExDb252ZXJ0ZXIoIkNvbnZlcnQiKQotICAgICAgewotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KCkKLSAgICAgICAgewotICAgICAgICAgIHRlc3RDb252ZXJ0KCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgIHJldHVybiBzdWl0ZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDb252ZXJ0KCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIERlZmluaXRpb24gZGVmID0gRGVmaW5pdGlvbkxvYWRlci5sb2FkKCJkOi9lY2xpcHNlMzAxL2VjbGlwc2Uvd29ya3NwYWNlL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL1BUQVRpbWVEaXN0cmlidXRpb24ud3NkbCIpOwotICAgICAgV1NETENvbnZlcnRlciBjb252ZXJ0ZXIgPSBuZXcgV1NETENvbnZlcnRlcihkZWYpOwotICAgICAgY29udmVydGVyLmdlbmVyYXRlMjAoImQ6L2VjbGlwc2UzMDEvZWNsaXBzZS93b3Jrc3BhY2Uvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvUFRBVGltZURpc3RyaWJ1dGlvbjIwLndzZGwiKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKLSAgewotICAgIGp1bml0LnRleHR1aS5UZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKLSAgICAvKgotICAgICB0cnkKLSAgICAgewotICAgICBEZWZpbml0aW9uIGRlZiA9IERlZmluaXRpb25Mb2FkZXIubG9hZChhcmdzWzBdKTsKLSAgICAgV1NETENvbnZlcnRlciBjb252ZXJ0ZXIgPSBuZXcgV1NETENvbnZlcnRlcihkZWYpOwotICAgICBjb252ZXJ0ZXIuZ2VuZXJhdGUyMCgidGVzdDIwLndzZGwiKTsKLSAgICAgfQotICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgIHsKLSAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgfSovCi0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy91dGlsL1dTRExNb2RlbExvY2F0b3JBZGFwdGVyRmFjdG9yeS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3V0aWwvV1NETE1vZGVsTG9jYXRvckFkYXB0ZXJGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3NTdhODIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3V0aWwvV1NETE1vZGVsTG9jYXRvckFkYXB0ZXJGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWw7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVySW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyLmludGVybmFsLnByb3Zpc2lvbmFsLlVSSVJlc29sdmVyUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLmludGVybmFsLnV0aWwuV1NETE1vZGVsTG9jYXRvcjsKLQotCi1wdWJsaWMgY2xhc3MgV1NETE1vZGVsTG9jYXRvckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgQWRhcHRlckZhY3RvcnlJbXBsCi17Ci0gIHByb3RlY3RlZCBDdXN0b21XU0RMTW9kZWxMb2NhdG9yIGN1c3RvbVdTRExNb2RlbExvY2F0b3IgPSBuZXcgQ3VzdG9tV1NETE1vZGVsTG9jYXRvcigpOwotCi0gIGNsYXNzIEN1c3RvbVdTRExNb2RlbExvY2F0b3IgZXh0ZW5kcyBBZGFwdGVySW1wbCBpbXBsZW1lbnRzIFdTRExNb2RlbExvY2F0b3IKLSAgewotICAgIHB1YmxpYyBTdHJpbmcgcmVzb2x2ZVVSSShTdHJpbmcgYmFzZUxvY2F0aW9uLCBTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgbG9jYXRpb24pCi0gICAgewotICAgICAgcmV0dXJuIFVSSVJlc29sdmVyUGx1Z2luLmNyZWF0ZVJlc29sdmVyKCkucmVzb2x2ZShiYXNlTG9jYXRpb24sIG5hbWVzcGFjZSwgbG9jYXRpb24pOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGlzQWRhdHBlckZvclR5cGUoT2JqZWN0IHR5cGUpCi0gICAgewotICAgICAgcmV0dXJuIHR5cGUgPT0gV1NETE1vZGVsTG9jYXRvci5jbGFzczsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKQotICB7Ci0gICAgcmV0dXJuIHR5cGUgPT0gV1NETE1vZGVsTG9jYXRvci5jbGFzczsKLSAgfQotCi0gIHB1YmxpYyBBZGFwdGVyIGFkYXB0TmV3KE5vdGlmaWVyIHRhcmdldCwgT2JqZWN0IHR5cGUpCi0gIHsKLSAgICByZXR1cm4gY3VzdG9tV1NETE1vZGVsTG9jYXRvcjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3V0aWwvWE1MRGlmZi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3V0aWwvWE1MRGlmZi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NWNlOTM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy91dGlsL1hNTERpZmYuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLnV0aWw7Ci0KLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5QcmludFN0cmVhbTsKLQotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlcjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKLQotCi0vKioKLSAqIEBhdXRob3IgS2lodXAgQm9vCi0gKi8KLXB1YmxpYyBjbGFzcyBYTUxEaWZmCi17Ci0gIHByaXZhdGUgUHJpbnRTdHJlYW0gb3V0ID0gU3lzdGVtLm91dDsKLQotICBwcml2YXRlIGJvb2xlYW4gRElGRl9FTEVNRU5UX05PREVfT05MWSA9IGZhbHNlOwotCi0gIHB1YmxpYyBib29sZWFuIGRpZmYoU3RyaW5nIGZpbGUxLCBTdHJpbmcgZmlsZTIpIHRocm93cyBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uLCBTQVhFeGNlcHRpb24sIElPRXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4gZGlmZihmaWxlMSwgZmlsZTIsIGZhbHNlKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGRpZmYoU3RyaW5nIGZpbGUxLCBTdHJpbmcgZmlsZTIsIGJvb2xlYW4gZWxlbWVudE9ubHkpIHRocm93cyBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uLCBTQVhFeGNlcHRpb24sIElPRXhjZXB0aW9uCi0gIHsKLSAgICBEb2N1bWVudCBkb2MxID0gZ2V0RG9jdW1lbnQoZmlsZTEpOwotICAgIERvY3VtZW50IGRvYzIgPSBnZXREb2N1bWVudChmaWxlMik7Ci0gICAgRElGRl9FTEVNRU5UX05PREVfT05MWSA9IGVsZW1lbnRPbmx5OwotICAgIHJldHVybiBkaWZmKGRvYzEsIGRvYzIpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZGlmZihEb2N1bWVudCBkb2MxLCBEb2N1bWVudCBkb2MyKQotICB7Ci0gICAgRWxlbWVudCByb290MSA9IGRvYzEuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgRWxlbWVudCByb290MiA9IGRvYzIuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgcmV0dXJuIGNvbXBhcmVOb2Rlcyhyb290MSwgcm9vdDIpOwotICB9Ci0KLSAgcHJpdmF0ZSBEb2N1bWVudCBnZXREb2N1bWVudChTdHJpbmcgdXJpKSB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiwgU0FYRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbgotICB7Ci0gICAgRG9jdW1lbnRCdWlsZGVyIGJ1aWxkZXIgPSBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3RG9jdW1lbnRCdWlsZGVyKCk7Ci0gICAgRG9jdW1lbnQgZG9jID0gYnVpbGRlci5wYXJzZSh1cmkpOwotICAgIHJldHVybiBkb2M7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gY29tcGFyZU5vZGVzKE5vZGUgbm9kZTEsIE5vZGUgbm9kZTIpCi0gIHsKLSAgICBpZiAoRElGRl9FTEVNRU5UX05PREVfT05MWSkKLSAgICB7Ci0gICAgICAvLyBDb21wYXJlIG9ubHkgZWxlbWVudCBub2RlcyBpbiB0aGUgY2hpbGRyZW4uCi0gICAgICBmaWx0ZXJOb25FbGVtZW50Tm9kZXMobm9kZTEpOwotICAgICAgZmlsdGVyTm9uRWxlbWVudE5vZGVzKG5vZGUyKTsKLSAgICB9Ci0KLSAgICBpZiAobm9kZTEuZ2V0Tm9kZVR5cGUoKSAhPSBub2RlMi5nZXROb2RlVHlwZSgpIHx8IG5vZGUxLmdldE5vZGVOYW1lKCkgIT0gbm9kZTIuZ2V0Tm9kZU5hbWUoKSkKLSAgICB7Ci0gICAgICBwcmludGxuKCJOb2RlIHR5cGUgb3Igbm9kZSBuYW1lIGlzIGRpZmZlcmVudDoiKTsKLSAgICAgIHByaW50bG4oIk5vZGUgMTogIiArIG5vZGUxLmdldE5vZGVOYW1lKCkpOwotICAgICAgcHJpbnRsbigiTm9kZSAyOiAiICsgbm9kZTIuZ2V0Tm9kZU5hbWUoKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCFjb21wYXJlQXR0cmlidXRlcyhub2RlMSwgbm9kZTIpKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgTm9kZUxpc3Qgbm9kZUxpc3QxID0gbm9kZTEuZ2V0Q2hpbGROb2RlcygpOwotICAgIE5vZGVMaXN0IG5vZGVMaXN0MiA9IG5vZGUyLmdldENoaWxkTm9kZXMoKTsKLSAgICBpZiAobm9kZUxpc3QxLmdldExlbmd0aCgpICE9IG5vZGVMaXN0Mi5nZXRMZW5ndGgoKSkKLSAgICB7Ci0gICAgICBwcmludGxuKCJUaGUgbnVtYmVyIG9mIGNoaWxkcmVuIGlzIGRpZmZlcmVudDoiKTsKLSAgICAgIC8vcHJpbnRsbigiTm9kZSAxOiAiICsgbm9kZUxpc3QxLmdldExlbmd0aCgpKTsKLSAgICAgIC8vcHJpbnRsbigiTm9kZSAyOiAiICsgbm9kZUxpc3QyLmdldExlbmd0aCgpKTsKLSAgICAgIHByaW50bG4oIk5vZGUgMTogIiArIG5vZGUxLmdldE5vZGVOYW1lKCkpOwotICAgICAgcHJpbnRsbigiTm9kZSAyOiAiICsgbm9kZTIuZ2V0Tm9kZU5hbWUoKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgYm9vbGVhbiByZXN1bHQgPSB0cnVlOwotICAgIGludCBsZW5ndGggPSBub2RlTGlzdDEuZ2V0TGVuZ3RoKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICByZXN1bHQgPSBjb21wYXJlTm9kZXMobm9kZUxpc3QxLml0ZW0oaSksIG5vZGVMaXN0Mi5pdGVtKGkpKTsKLSAgICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGZpbHRlck5vbkVsZW1lbnROb2RlcyhOb2RlIG5vZGUpCi0gIHsKLSAgICBOb2RlIGZpcnN0Q2hpbGQgPSBub2RlLmdldEZpcnN0Q2hpbGQoKTsKLSAgICB3aGlsZSAoZmlyc3RDaGlsZC5nZXROb2RlVHlwZSgpICE9IE5vZGUuRUxFTUVOVF9OT0RFKQotICAgIHsKLSAgICAgIG5vZGUucmVtb3ZlQ2hpbGQoZmlyc3RDaGlsZCk7Ci0gICAgICBmaXJzdENoaWxkID0gbm9kZS5nZXRGaXJzdENoaWxkKCk7Ci0gICAgfQotCi0gICAgTm9kZSBzaWJsaW5nID0gZmlyc3RDaGlsZC5nZXROZXh0U2libGluZygpOwotICAgIE5vZGUgZGVsZXRlTWUgPSBudWxsOwotICAgIHdoaWxlIChzaWJsaW5nICE9IG51bGwpCi0gICAgewotICAgICAgaWYgKHNpYmxpbmcuZ2V0Tm9kZVR5cGUoKSAhPSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICAgIHsKLSAgICAgICAgZGVsZXRlTWUgPSBzaWJsaW5nOwotICAgICAgICBzaWJsaW5nID0gc2libGluZy5nZXROZXh0U2libGluZygpOwotICAgICAgICBub2RlLnJlbW92ZUNoaWxkKGRlbGV0ZU1lKTsKLSAgICAgIH0KLQotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBjb21wYXJlQXR0cmlidXRlcyhOb2RlIG5vZGUxLCBOb2RlIG5vZGUyKQotICB7Ci0gICAgTmFtZWROb2RlTWFwIG5vZGVNYXAxID0gbm9kZTEuZ2V0QXR0cmlidXRlcygpOwotICAgIE5hbWVkTm9kZU1hcCBub2RlTWFwMiA9IG5vZGUyLmdldEF0dHJpYnV0ZXMoKTsKLQotICAgIGlmIChub2RlTWFwMSA9PSBudWxsIHx8IG5vZGVNYXAyID09IG51bGwpCi0gICAgewotICAgICAgaWYgKG5vZGVNYXAxID09IG51bGwgJiYgbm9kZU1hcDIgPT0gbnVsbCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBlbHNlCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAobm9kZU1hcDEuZ2V0TGVuZ3RoKCkgIT0gbm9kZU1hcDIuZ2V0TGVuZ3RoKCkpCi0gICAgewotICAgICAgcHJpbnRsbigiVGhlIG51bWJlciBvZiBhdHRyaWJ1dGVzIGlzIGRpZmZlcmVudDoiKTsKLSAgICAgIHByaW50bG4oIk5vZGUgMTogIiArIG5vZGUxLmdldE5vZGVOYW1lKCkpOwotICAgICAgcHJpbnRsbigiTm9kZSAyOiAiICsgbm9kZTIuZ2V0Tm9kZU5hbWUoKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgTm9kZSBhdHRyTm9kZTEgPSBudWxsOwotICAgIE5vZGUgYXR0ck5vZGUyID0gbnVsbDsKLSAgICBpbnQgbGVuZ3RoID0gbm9kZU1hcDEuZ2V0TGVuZ3RoKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBhdHRyTm9kZTEgPSBub2RlTWFwMS5pdGVtKGkpOwotICAgICAgYXR0ck5vZGUyID0gbm9kZU1hcDIuZ2V0TmFtZWRJdGVtKGF0dHJOb2RlMS5nZXROb2RlTmFtZSgpKTsKLSAgICAgIGlmIChhdHRyTm9kZTIgPT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgcHJpbnRsbigiVGhlIGF0dHJpYnV0ZSBpcyBub3QgZm91bmQgaW4gTm9kZSAyOiAiICsgYXR0ck5vZGUxLmdldE5vZGVOYW1lKCkpOwotICAgICAgICBwcmludGxuKCJOb2RlIDE6ICIgKyBub2RlMS5nZXROb2RlTmFtZSgpKTsKLSAgICAgICAgcHJpbnRsbigiTm9kZSAyOiAiICsgbm9kZTIuZ2V0Tm9kZU5hbWUoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKCFhdHRyTm9kZTEuZ2V0Tm9kZVZhbHVlKCkuZXF1YWxzKGF0dHJOb2RlMi5nZXROb2RlVmFsdWUoKSkpCi0gICAgICB7Ci0gICAgICAgIHByaW50bG4oIlRoZSBhdHRyaWJ1dGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQ6Iik7Ci0gICAgICAgIHByaW50bG4oIk5vZGUgMTogIiArIG5vZGUxLmdldE5vZGVOYW1lKCkgKyAiLCIgKyBhdHRyTm9kZTEuZ2V0Tm9kZVZhbHVlKCkpOwotICAgICAgICBwcmludGxuKCJOb2RlIDI6ICIgKyBub2RlMi5nZXROb2RlTmFtZSgpICsgIiwiICsgYXR0ck5vZGUyLmdldE5vZGVWYWx1ZSgpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBwcmludGxuKFN0cmluZyBzKQotICB7Ci0gICAgb3V0LnByaW50bG4ocyk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvdXRpbC9YU0RTY2hlbWFMb2NhdGlvblJlc29sdmVyQWRhcHRlckZhY3RvcnkuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy91dGlsL1hTRFNjaGVtYUxvY2F0aW9uUmVzb2x2ZXJBZGFwdGVyRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTlmYjI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC90ZXN0cy91dGlsL1hTRFNjaGVtYUxvY2F0aW9uUmVzb2x2ZXJBZGFwdGVyRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC51dGlsLlhTRFNjaGVtYUxvY2F0aW9uUmVzb2x2ZXI7Ci0KLQotcHVibGljIGNsYXNzIFhTRFNjaGVtYUxvY2F0aW9uUmVzb2x2ZXJBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5SW1wbAotewotICBwcm90ZWN0ZWQgWFNEU2NoZW1hTG9jYXRpb25SZXNvbHZlckltcGwgc2NoZW1hTG9jYXRvciA9IG5ldyBYU0RTY2hlbWFMb2NhdGlvblJlc29sdmVySW1wbCgpOwotCi0gIHB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpCi0gIHsKLSAgICByZXR1cm4gdHlwZSA9PSBYU0RTY2hlbWFMb2NhdGlvblJlc29sdmVyLmNsYXNzOwotICB9Ci0KLSAgcHVibGljIEFkYXB0ZXIgYWRhcHROZXcoTm90aWZpZXIgdGFyZ2V0LCBPYmplY3QgdHlwZSkKLSAgewotICAgIHJldHVybiBzY2hlbWFMb2NhdG9yOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvdXRpbC9YU0RTY2hlbWFMb2NhdGlvblJlc29sdmVySW1wbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3Rlc3RzL3V0aWwvWFNEU2NoZW1hTG9jYXRpb25SZXNvbHZlckltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjAyZmVlNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdGVzdHMvdXRpbC9YU0RTY2hlbWFMb2NhdGlvblJlc29sdmVySW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy51dGlsOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIuaW50ZXJuYWwucHJvdmlzaW9uYWwuVVJJUmVzb2x2ZXJQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QudXRpbC5YU0RTY2hlbWFMb2NhdGlvblJlc29sdmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC51dGlsLlhTRFNjaGVtYUxvY2F0b3I7Ci0KLQotcHVibGljIGNsYXNzIFhTRFNjaGVtYUxvY2F0aW9uUmVzb2x2ZXJJbXBsIGV4dGVuZHMgQWRhcHRlckltcGwgaW1wbGVtZW50cyBYU0RTY2hlbWFMb2NhdGlvblJlc29sdmVyCi17Ci0gIHB1YmxpYyBTdHJpbmcgcmVzb2x2ZVNjaGVtYUxvY2F0aW9uKFhTRFNjaGVtYSB4c2RTY2hlbWEsIFN0cmluZyBuYW1lc3BhY2VVUkksIFN0cmluZyBzY2hlbWFMb2NhdGlvblVSSSkKLSAgewotICAgIFN0cmluZyBiYXNlTG9jYXRpb24gPSB4c2RTY2hlbWEuZ2V0U2NoZW1hTG9jYXRpb24oKTsKLSAgICByZXR1cm4gVVJJUmVzb2x2ZXJQbHVnaW4uY3JlYXRlUmVzb2x2ZXIoKS5yZXNvbHZlKGJhc2VMb2NhdGlvbiwgbmFtZXNwYWNlVVJJLCBzY2hlbWFMb2NhdGlvblVSSSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc0FkYXRwZXJGb3JUeXBlKE9iamVjdCB0eXBlKQotICB7Ci0gICAgcmV0dXJuIHR5cGUgPT0gWFNEU2NoZW1hTG9jYXRvci5jbGFzczsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudGVzdHMvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy90ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2FlN2VkOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotCi08cHJvamVjdCBuYW1lPSJ0ZXN0c3VpdGUiIGRlZmF1bHQ9InJ1biIgYmFzZWRpcj0iLiI+Ci0JPCEtLSBUaGUgcHJvcGVydHkgJHtlY2xpcHNlLWhvbWV9IHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KLQk8IS0tIFNldCBhIG1lYW5pbmdmdWwgZGVmYXVsdCB2YWx1ZSBmb3Igd2hlbiBpdCBpcyBub3QuIC0tPgotCTwhLS0gPHByb3BlcnR5IG5hbWU9ImVjbGlwc2UtaG9tZSIgdmFsdWU9IiR7YmFzZWRpcn1cLi5cLi4iIC8+IC0tPgotCQkKLQk8ZWNobyBtZXNzYWdlPSJiYXNlZGlyICR7YmFzZWRpcn0iIC8+Ci0JPGVjaG8gbWVzc2FnZT0iZWNsaXBzZSBwbGFjZSAke2VjbGlwc2UtaG9tZX0iIC8+Ci0JCi0JPCEtLSBzZXRzIHRoZSBwcm9wZXJ0aWVzIHBsdWdpbi1uYW1lLCBhbmQgbGlicmFyeS1maWxlIC0tPgotCTxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzIiAvPgotCTxwcm9wZXJ0eSBuYW1lPSJsaWJyYXJ5LWZpbGUiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIiAvPgotCi0JPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotCTwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0JPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0JPHRhcmdldCBuYW1lPSJpbml0Ij4KLQkJPHRzdGFtcC8+Ci0JCTxkZWxldGU+Ci0JCQk8ZmlsZXNldCBkaXI9IiR7ZWNsaXBzZS1ob21lfSIgaW5jbHVkZXM9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLip4bWwiIC8+Ci0JCTwvZGVsZXRlPgotCTwvdGFyZ2V0PgotCi0JPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLQk8dGFyZ2V0IG5hbWU9InN1aXRlIj4KLQkJPHByb3BlcnR5IG5hbWU9IndzdC1mb2xkZXIiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vd3N0X2ZvbGRlciIvPgotCQk8ZGVsZXRlIGRpcj0iJHt3c3QtZm9sZGVyfSIgcXVpZXQ9InRydWUiLz4KLSAgICAJPGFudCB0YXJnZXQ9ImNvcmUtdGVzdCIgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICAJCTxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d3N0LWZvbGRlcn0iLz4KLSAgICAgIAkJPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIAkJPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnRlc3RzLkFsbFRlc3RDYXNlcyIgLz4KLSAgIAkJCTxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tcGF0aCIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgCTwvYW50PgotCTwvdGFyZ2V0PgotCi0JPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+Ci0JPCEtLSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPgotCTwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KLQk8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgotCQk8IS0tPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiIC8+LS0+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0JPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgotCTx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgotCQk8YW50IHRhcmdldD0iY29sbGVjdCIgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCQk8cHJvcGVydHkgbmFtZT0iaW5jbHVkZXMiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy4qeG1sIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9Im91dHB1dC1maWxlIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIiAvPgotCQk8L2FudD4KLQk8L3RhcmdldD4KLQotPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDk5OTA4ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40Ij4KLQkJPGFjY2Vzc3J1bGVzPgotCQkJPGFjY2Vzc3J1bGUga2luZD0iYWNjZXNzaWJsZSIgcGF0dGVybj0ib3JnL2FwYWNoZS94ZXJjZXMvKioiLz4KLQkJPC9hY2Nlc3NydWxlcz4KLQk8L2NsYXNzcGF0aGVudHJ5PgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyI+Ci0JCTxhY2Nlc3NydWxlcz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uLyoqIi8+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvZWNsaXBzZS93c3QvdmFsaWRhdGlvbi9pbnRlcm5hbC9wcm92aXNpb25hbC9jb3JlL0lNZXNzYWdlIi8+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcGx1Z2luL1dTUGx1Z2luIi8+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvZWNsaXBzZS93c3Qvd3MvaW50ZXJuYWwvcHJlZmVyZW5jZXMvUGVyc2lzdGVudFdTSUNvbnRleHQiLz4KLQkJPC9hY2Nlc3NydWxlcz4KLQk8L2NsYXNzcGF0aGVudHJ5PgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExNzJjN2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1iaW4KLWJ1aWxkLnhtbAotdGVtcC5mb2xkZXIKLXdzZGx2YWxpZGF0ZXRlc3RzLmphcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyYTZkYjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHM8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQyMGU1Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1N1biBBcHIgMTYgMTc6NTY6MDUgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy88cHJvamVjdD49SVNPLTg4NTktMQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTU0ZmEyZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLSNUdWUgQXByIDE4IDEyOjQ3OjI3IEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZhbGx0aHJvdWdoQ2FzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm51bGxSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBhcmFtZXRlckFzc2lnbm1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yYXdUeXBlUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExhYmVsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhNTZmNWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jRnJpIEZlYiAxNyAxNDoyMzo1OSBFU1QgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWludGVybmFsLmRlZmF1bHQuY29tcGxpYW5jZT1kZWZhdWx0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhNjZkNWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotI1N1biBBcHIgMTYgMTc6NTU6MDIgRURUIDIwMDYKLWNvbXBpbGVycy5wLmJ1aWxkPTAKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MAotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTAKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTAKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmNjODc1My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJV9QTFVHSU5fTkFNRQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cwotQnVuZGxlLVZlcnNpb246IDEuMC4yMDMKLUJ1bmRsZS1DbGFzc1BhdGg6IHdzZGx2YWxpZGF0ZXRlc3RzLmphcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbC5XU0RMVmFsaWRhdG9yVGVzdHNQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVfUFJPVklERVJfTkFNRQotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UudWksCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5qdW5pdDtidW5kbGUtdmVyc2lvbj0iWzMuOC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbiwKLSBvcmcuZWNsaXBzZS53c3Qud3MsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1hbmQuZW52LAotIG9yZy5hcGFjaGUuYW50LAotIGphdmF4LndzZGw7YnVuZGxlLXZlcnNpb249IlsxLjQuMCwxLjUuMCkiLAotIG9yZy5hcGFjaGUueGVyY2VzLAotIG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyCi1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXI7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnVpLmFudDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLnhzZDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbDt4LWludGVybmFsOj10cnVlCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkYjM2ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lIDA2LCAyMDA3PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWM5YTY4OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotc291cmNlLndzZGx2YWxpZGF0ZXRlc3RzLmphciA9IHNyYy8KLW91dHB1dC53c2RsdmFsaWRhdGV0ZXN0cy5qYXIgPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSB3c2RsdmFsaWRhdGV0ZXN0cy5qYXIsXAotICAgICAgICAgICAgICAgdGVzdHJlc291cmNlcy8sXAotICAgICAgICAgICAgICAgdGVzdC54bWwsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKLXNyYy5pbmNsdWRlcyA9IGJ1aWxkLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjc4ZTA1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIS0tIHByb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0Ci1fUExVR0lOX05BTUUgICAgICAgPSBXU0RMIFZhbGlkYXRvciBUZXN0cyBQbHVnLWluCi1fUFJPVklERVJfTkFNRSAgICAgPSBFY2xpcHNlLm9yZwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9WYWxpZGF0b3JUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvVmFsaWRhdG9yVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Nzg0ODZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9WYWxpZGF0b3JUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2U7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMudXRpbC5YTUxHcmFtbWFyUG9vbEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5JVmFsaWRhdGlvbk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5WYWxpZGF0aW9uSW5mb0ltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5WYWxpZGF0aW9uTWVzc2FnZUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51dGlsLk1lc3NhZ2VHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbC5XU0RMVmFsaWRhdG9yVGVzdHNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5OZXN0ZWRWYWxpZGF0b3JDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuVmFsaWRhdGlvbkluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25SZXBvcnQ7Ci0KLS8qKgotICogVGVzdCB0aGUgV1NETCB2YWxpZGF0aW9uIGZyYW1ld29yayBWYWxpZGF0b3IuCi0gKi8KLXB1YmxpYyBjbGFzcyBWYWxpZGF0b3JUZXN0IGV4dGVuZHMgVGVzdENhc2UgCi17Ci0gIFZhbGlkYXRvcldyYXBwZXIgdmFsaWRhdG9yID0gbmV3IFZhbGlkYXRvcldyYXBwZXIoKTsKLSAgCi0gIC8qKgotICAgKiBDcmVhdGUgYSB0ZXN0cyBzdWl0ZSBmcm9tIHRoaXMgdGVzdCBjbGFzcy4KLSAgICogCi0gICAqIEByZXR1cm4gQSB0ZXN0IHN1aXRlIGNvbnRhaW5pbmcgdGhpcyB0ZXN0IGNsYXNzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKFZhbGlkYXRvclRlc3QuY2xhc3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCB0aGUgdmFsaWRhdGUgbWV0aG9kLiBUZXN0cyB0byBiZSBwZXJmb3JtZWQ6PGJyLz4KLSAgICogMS4gVGVzdCB0aGF0IHZhbGlkYXRpbmcgYSB2YWxpZCBmaWxlIGZyb20gYSBVUkkgb3IgYW4gaW5wdXQgc3RyZWFtIHByb2R1Y2VzIHRoZSBzYW1lIHJlc3VsdC48YnIvPgotICAgKiAyLiBUZXN0IHRoYXQgdmFsaWRhdGluZyBhbiBpbnZhbGlkIGZpbGUgZnJvbSBhIFVSSSBvciBhbiBpbnB1dCBzdHJlYW0gcHJvZHVjZXMgdGhlIHNhbWUgcmVzdWx0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFZhbGlkYXRlKCkKLSAgewotCXRyeQotCXsKLQkgIC8vIFRlc3QgdGhhdCB2YWxpZGF0aW5nIGEgdmFsaWQgZmlsZSBmcm9tIGEgVVJJIGFuZCBhbiBpbnB1dCBzdHJlYW0gcHJvZHVjZXMgdGhlIHNhbWUgcmVzdWx0LgotCSAgTmVzdGVkVmFsaWRhdG9yQ29udGV4dCBjb250ZXh0ID0gbmV3IE5lc3RlZFZhbGlkYXRvckNvbnRleHQoKTsKLQkgIHZhbGlkYXRvci5zZXR1cFZhbGlkYXRpb24oY29udGV4dCk7Ci0JICBTdHJpbmcgUExVR0lOX0FCU09MVVRFX1BBVEggPSBXU0RMVmFsaWRhdG9yVGVzdHNQbHVnaW4uZ2V0SW5zdGFsbFVSTCgpOwotCSAgU3RyaW5nIHVyaSA9ICJmaWxlOi8vLyIgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJ0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aFZhbGlkLndzZGwiOwotCSAgVmFsaWRhdGlvblJlcG9ydCByZXBvcnQxID0gdmFsaWRhdG9yLnZhbGlkYXRlKHVyaSwgbnVsbCwgY29udGV4dCk7Ci0JICB2YWxpZGF0b3IudGVhcmRvd25WYWxpZGF0aW9uKGNvbnRleHQpOwotCSAgdmFsaWRhdG9yLnNldHVwVmFsaWRhdGlvbihjb250ZXh0KTsKLQkgIFZhbGlkYXRpb25SZXBvcnQgcmVwb3J0MiA9IG51bGw7Ci0JICBJbnB1dFN0cmVhbSBpcyA9IG51bGw7Ci0JICB0cnkKLQkgIHsKLQkgICAgaXMgPSBuZXcgVVJMKHVyaSkub3BlblN0cmVhbSgpOwotCSAgICByZXBvcnQyID0gdmFsaWRhdG9yLnZhbGlkYXRlKHVyaSwgaXMsIGNvbnRleHQpOwotCSAgfQotCSAgY2F0Y2goRXhjZXB0aW9uIGUpCi0JICB7Ci0JCWZhaWwoIkEgcHJvYmxlbSBvY2N1cnJlZCB3aGlsZSB2YWxpZGF0aW5nIGEgdmFsaWQgZmlsZSB3aXRoIGFuIGlucHV0c3RyZWFtOiAiICsgZSk7Ci0JICB9Ci0JICBmaW5hbGx5Ci0JICB7Ci0JCWlmKGlzICE9IG51bGwpCi0JCXsKLQkJICB0cnkKLQkJICB7Ci0JCSAgICBpcy5jbG9zZSgpOwotCQkgIH0KLQkJICBjYXRjaChJT0V4Y2VwdGlvbiBlKQotCQkgIHsKLQkJCS8vIERvIG5vdGhpbmcuCi0JCSAgfQotCQl9Ci0JICB9Ci0JICB2YWxpZGF0b3IudGVhcmRvd25WYWxpZGF0aW9uKGNvbnRleHQpOwotCSAgYXNzZXJ0VHJ1ZSgiVmFsaWRhdGlvbiB1c2luZyBhIFVSSSBkaWQgbm90IHByb2R1Y3QgYSB2YWxpZCB2YWxpZGF0aW9uIHJlc3VsdC4iLCByZXBvcnQxLmlzVmFsaWQoKSk7Ci0JICBhc3NlcnRFcXVhbHMoIlZhbGlkYXRpb24gdXNpbmcgVVJJIGFuZCB1c2luZyBpbnB1dHN0cmVhbSBvZiB0aGUgc2FtZSBmaWxlIHByb2R1Y2VzIGRpZmZlcmVudCBudW1iZXJzIG9mIGVycm9ycy4iLCByZXBvcnQxLmdldFZhbGlkYXRpb25NZXNzYWdlcygpLmxlbmd0aCwgcmVwb3J0Mi5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKS5sZW5ndGgpOwotCSAgCi0gICAgICAvLyBUZXN0IHRoYXQgdmFsaWRhdGluZyBhbiBpbnZhbGlkIGZpbGUgZnJvbSBhIFVSSSBhbmQgYW4gaW5wdXQgc3RyZWFtIHByb2R1Y2VzIHRoZSBzYW1lIHJlc3VsdC4KLQkgIE5lc3RlZFZhbGlkYXRvckNvbnRleHQgY29udGV4dDIgPSBuZXcgTmVzdGVkVmFsaWRhdG9yQ29udGV4dCgpOwotCSAgdmFsaWRhdG9yLnNldHVwVmFsaWRhdGlvbihjb250ZXh0Mik7Ci0JICB1cmkgPSAiZmlsZTovLy8iICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyAidGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhJbnZhbGlkLndzZGwiOwotCSAgcmVwb3J0MSA9IHZhbGlkYXRvci52YWxpZGF0ZSh1cmksIG51bGwsIGNvbnRleHQyKTsKLQkgIHZhbGlkYXRvci50ZWFyZG93blZhbGlkYXRpb24oY29udGV4dDIpOwotCSAgdmFsaWRhdG9yLnNldHVwVmFsaWRhdGlvbihjb250ZXh0Mik7Ci0JICByZXBvcnQyID0gbnVsbDsKLQkgIGlzID0gbnVsbDsKLQkgIHRyeQotCSAgewotCSAgICBpcyA9IG5ldyBVUkwodXJpKS5vcGVuU3RyZWFtKCk7Ci0JICAgIHJlcG9ydDIgPSB2YWxpZGF0b3IudmFsaWRhdGUodXJpLCBpcywgY29udGV4dDIpOwotCSAgfQotCSAgY2F0Y2goRXhjZXB0aW9uIGUpCi0JICB7Ci0JCWZhaWwoIkEgcHJvYmxlbSBvY2N1cnJlZCB3aGlsZSB2YWxpZGF0aW5nIGFuIGludmFsaWQgZmlsZSB3aXRoIGFuIGlucHV0c3RyZWFtOiAiICsgZSk7Ci0JICB9Ci0JICBmaW5hbGx5Ci0JICB7Ci0JCWlmKGlzICE9IG51bGwpCi0JCXsKLQkJICB0cnkKLQkJICB7Ci0JCSAgICBpcy5jbG9zZSgpOwotCQkgIH0KLQkJICBjYXRjaChJT0V4Y2VwdGlvbiBlKQotCQkgIHsKLQkJCS8vIERvIG5vdGhpbmcuCi0JCSAgfQotCQl9Ci0JICB9Ci0JICB2YWxpZGF0b3IudGVhcmRvd25WYWxpZGF0aW9uKGNvbnRleHQyKTsKLQkgIGFzc2VydEZhbHNlKCJWYWxpZGF0aW9uIHVzaW5nIGEgVVJJIGRpZCBub3QgcHJvZHVjdCBhbiBpbnZhbGlkIHZhbGlkYXRpb24gcmVzdWx0LiIsIHJlcG9ydDEuaXNWYWxpZCgpKTsKLQkgIGFzc2VydEVxdWFscygiVmFsaWRhdGlvbiB1c2luZyBVUkkgYW5kIHVzaW5nIGlucHV0c3RyZWFtIG9mIHRoZSBzYW1lIGZpbGUgcHJvZHVjZXMgZGlmZmVyZW50IG51bWJlcnMgb2YgZXJyb3JzLiIsIHJlcG9ydDEuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKCkubGVuZ3RoLCByZXBvcnQyLmdldFZhbGlkYXRpb25NZXNzYWdlcygpLmxlbmd0aCk7Ci0JfQotCWNhdGNoKEV4Y2VwdGlvbiBlKQotCXsKLQkgIGZhaWwoIlVuYWJsZSB0byBsb2NhdGUgcGx1Zy1pbiBsb2NhdGlvbjogIiArIGUpOwotCX0KLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgdGhlIHNldHVwVmFsaWRhdGlvbiBtZXRob2QuCi0gICAqIDEuIFRlc3QgdGhhdCBhZnRlciBydW4gZm9yIGEgY29udGV4dCBYTUwgYW5kIFhTRCBncmFtbWFyIHBvb2xzIGV4aXN0IGZvciB0aGUgY29udGV4dC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RTZXR1cFZhbGlkYXRpb24oKQotICB7Ci0JdmFsaWRhdG9yLmdldFhNTEdyYW1tYXJQb29sc01hcCgpLmNsZWFyKCk7Ci0JdmFsaWRhdG9yLmdldFhTREdyYW1tYXJQb29sc01hcCgpLmNsZWFyKCk7Ci0JCi0JTmVzdGVkVmFsaWRhdG9yQ29udGV4dCBjb250ZXh0ID0gbmV3IE5lc3RlZFZhbGlkYXRvckNvbnRleHQoKTsKLQlhc3NlcnROdWxsKCJBbiBYTUwgZ3JhbW1hciBwb29sIGFscmVhZHkgZXhpc3RzIGZvciB0aGUgY29udGV4dC4iLCB2YWxpZGF0b3IuZ2V0WE1MR3JhbW1hclBvb2xGb3JDb250ZXh0KGNvbnRleHQpKTsKLQlhc3NlcnROdWxsKCJBbiBYU0QgZ3JhbW1hciBwb29sIGFscmVhZHkgZXhpc3RzIGZvciB0aGUgY29udGV4dC4iLCB2YWxpZGF0b3IuZ2V0WFNER3JhbW1hclBvb2xGb3JDb250ZXh0KGNvbnRleHQpKTsKLQkKLQl2YWxpZGF0b3Iuc2V0dXBWYWxpZGF0aW9uKGNvbnRleHQpOwotCQotCWFzc2VydE5vdE51bGwoIkFuIFhNTCBncmFtbWFyIHBvb2wgZG9lcyBub3QgZXhpc3QgYWZ0ZXIgdGhlIHNldHVwVmFsaWRhdGlvbiBtZXRob2QgaXMgcnVuLiIsIHZhbGlkYXRvci5nZXRYTUxHcmFtbWFyUG9vbEZvckNvbnRleHQoY29udGV4dCkpOwotCWFzc2VydE5vdE51bGwoIkFuIFhTRCBncmFtbWFyIHBvb2wgZG9lcyBub3QgZXhpc3QgYWZ0ZXIgdGhlIHNldHVwVmFsaWRhdGlvbiBtZXRob2QgaXMgcnVuLiIsIHZhbGlkYXRvci5nZXRYU0RHcmFtbWFyUG9vbEZvckNvbnRleHQoY29udGV4dCkpOwotCQotCXZhbGlkYXRvci5nZXRYTUxHcmFtbWFyUG9vbHNNYXAoKS5jbGVhcigpOwotCXZhbGlkYXRvci5nZXRYU0RHcmFtbWFyUG9vbHNNYXAoKS5jbGVhcigpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCB0aGUgdGVhcmRvd25WYWxpZGF0aW9uIG1ldGhvZC4KLSAgICogMS4gVGVzdCB0aGF0IGFmdGVyIHJ1biBmb3IgYSBjb250ZXh0IFhNTCBhbmQgWFNEIGdyYW1tYXIgcG9vbHMgZG8gbm90IGV4aXN0IGZvciB0aGUgY29udGV4dC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RUZWFyZG93blZhbGlkYXRpb24oKQotICB7Ci0JdmFsaWRhdG9yLmdldFhNTEdyYW1tYXJQb29sc01hcCgpLmNsZWFyKCk7Ci0JdmFsaWRhdG9yLmdldFhTREdyYW1tYXJQb29sc01hcCgpLmNsZWFyKCk7Ci0JCi0JTmVzdGVkVmFsaWRhdG9yQ29udGV4dCBjb250ZXh0ID0gbmV3IE5lc3RlZFZhbGlkYXRvckNvbnRleHQoKTsKLQl2YWxpZGF0b3IuZ2V0WE1MR3JhbW1hclBvb2xzTWFwKCkucHV0KGNvbnRleHQsIG5ldyBYTUxHcmFtbWFyUG9vbEltcGwoKSk7Ci0JdmFsaWRhdG9yLmdldFhTREdyYW1tYXJQb29sc01hcCgpLnB1dChjb250ZXh0LCBuZXcgSW5saW5lU2NoZW1hTW9kZWxHcmFtbWFyUG9vbEltcGwoKSk7Ci0JCi0JdmFsaWRhdG9yLnRlYXJkb3duVmFsaWRhdGlvbihjb250ZXh0KTsKLQkKLQlhc3NlcnROdWxsKCJBbiBYTUwgZ3JhbW1hciBwb29sIGV4aXN0cyBhZnRlciB0aGUgdGVhcmRvd25WYWxpZGF0aW9uIG1ldGhvZCBpcyBydW4uIiwgdmFsaWRhdG9yLmdldFhNTEdyYW1tYXJQb29sRm9yQ29udGV4dChjb250ZXh0KSk7Ci0JYXNzZXJ0TnVsbCgiQW4gWFNEIGdyYW1tYXIgcG9vbCBleGlzdHMgYWZ0ZXIgdGhlIHRlYXJkb3duVmFsaWRhdGlvbiBtZXRob2QgaXMgcnVuLiIsIHZhbGlkYXRvci5nZXRYU0RHcmFtbWFyUG9vbEZvckNvbnRleHQoY29udGV4dCkpOwotCQotCXZhbGlkYXRvci5nZXRYTUxHcmFtbWFyUG9vbHNNYXAoKS5jbGVhcigpOwotCXZhbGlkYXRvci5nZXRYU0RHcmFtbWFyUG9vbHNNYXAoKS5jbGVhcigpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCBjb252ZXJ0aW5nIGEgbWVzc2FnZS4gVGhlIGNvbnRlbnRzIG9mIHRoZSBtZXNzYWdlIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgCi0gICAqIG5ldyByZXBvcnQuCi0gICAqIDEuIFRlc3QgdGhhdCBhIHJlZ3VsYXIgbWVzc2FnZSBpcyBhZGRlZCBhcyBpcy4KLSAgICogMi4gVGVzdCB0aGF0IGEgbmVzdGVkIG1lc3NhZ2UgaXMgYWRkZWQgYXMgYSBuZXN0ZWQgbWVzc2FnZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RDb252ZXJ0TWVzc2FnZSgpCi0gIHsKLQkvLyAxLiBUZXN0IHRoYXQgYSByZWd1bGFyIG1lc3NhZ2UgaXMgYWRkZWQgYXMgaXMuCi0JVmFsaWRhdGlvbk1lc3NhZ2VJbXBsIG1lc3NhZ2UgPSBuZXcgVmFsaWRhdGlvbk1lc3NhZ2VJbXBsKCJtZXNzYWdlIiwgMSwgMiwgSVZhbGlkYXRpb25NZXNzYWdlLlNFVl9FUlJPUiwgImZpbGU6L3NvbWV1cmkiKTsKLQlWYWxpZGF0aW9uSW5mbyByZXBvcnQgPSBuZXcgVmFsaWRhdGlvbkluZm8oImZpbGU6L3NvbWV1cmkiKTsKLQl2YWxpZGF0b3IuY29udmVydE1lc3NhZ2UobWVzc2FnZSwgcmVwb3J0KTsKLQlhc3NlcnRFcXVhbHMoIlRoZSByZXBvcnQgZG9lcyBub3QgaGF2ZSAxIG1lc3NhZ2UuIiwgMSwgcmVwb3J0LmdldFZhbGlkYXRpb25NZXNzYWdlcygpLmxlbmd0aCk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbWVzc2FnZSBzdHJpbmcgaXMgaW5jb3JyZWN0LiIsICJtZXNzYWdlIiwgcmVwb3J0LmdldFZhbGlkYXRpb25NZXNzYWdlcygpWzBdLmdldE1lc3NhZ2UoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbWVzc2FnZSBsaW5lIG51bWJlciBpcyBpbmNvcnJlY3QuIiwgMSwgcmVwb3J0LmdldFZhbGlkYXRpb25NZXNzYWdlcygpWzBdLmdldExpbmVOdW1iZXIoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbWVzc2FnZSBjb2x1bW4gbnVtYmVyIGlzIGluY29ycmVjdC4iLCAyLCByZXBvcnQuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKClbMF0uZ2V0Q29sdW1uTnVtYmVyKCkpOwotCWFzc2VydEVxdWFscygiVGhlIG1lc3NhZ2Ugc2V2ZXJpdHkgaXMgaW5jb3JyZWN0LiIsIFZhbGlkYXRpb25NZXNzYWdlLlNFVl9OT1JNQUwsIHJlcG9ydC5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKVswXS5nZXRTZXZlcml0eSgpKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSBtZXNzYWdlIFVSSSBpcyBpbmNvcnJlY3QuIiwgImZpbGU6L3NvbWV1cmkiLCByZXBvcnQuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKClbMF0uZ2V0VXJpKCkpOwotCWFzc2VydEVxdWFscygiVGhlIG1lc3NhZ2UgaGFzIGFuIGluY29ycmVjdGx5IHJlZ2lzdHJlZCBuZXN0ZWQgbWVzc2FnZS4iLCAwLCByZXBvcnQuZ2V0TmVzdGVkTWVzc2FnZXMoKS5zaXplKCkpOwotCQotCS8vIDIuIFRlc3QgdGhhdCBhIG5lc3RlZCBtZXNzYWdlIGlzIGFkZGVkIGFzIGEgbmVzdGVkIG1lc3NhZ2UuCi0JVmFsaWRhdGlvbk1lc3NhZ2VJbXBsIG1lc3NhZ2UyID0gbmV3IFZhbGlkYXRpb25NZXNzYWdlSW1wbCgibWVzc2FnZSIsIDEsIDIsIElWYWxpZGF0aW9uTWVzc2FnZS5TRVZfRVJST1IsICJmaWxlOi9zb21ldXJpMiIpOwotCVZhbGlkYXRpb25JbmZvIHJlcG9ydDIgPSBuZXcgVmFsaWRhdGlvbkluZm8oImZpbGU6L3NvbWV1cmkiKTsKLQl2YWxpZGF0b3IuY29udmVydE1lc3NhZ2UobWVzc2FnZTIsIHJlcG9ydDIpOwotCWFzc2VydEVxdWFscygiVGhlIHJlcG9ydCB3aXRoIHRoZSBuZXN0ZWQgbWVzc2FnZSBkb2VzIG5vdCBoYXZlIDEgbWVzc2FnZS4iLCAxLCByZXBvcnQyLmdldFZhbGlkYXRpb25NZXNzYWdlcygpLmxlbmd0aCk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgY29udGFpbmVyIG1lc3NhZ2UgVVJJIGlzIGluY29ycmVjdC4iLCAiZmlsZTovc29tZXVyaTIiLCByZXBvcnQyLmdldFZhbGlkYXRpb25NZXNzYWdlcygpWzBdLmdldFVyaSgpKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSBjb250YWluZXIgbWVzc2FnZSBkb2VzIG5vdCBoYXZlIDEgbmVzdGVkIG1lc3NhZ2UuIiwgMSwgcmVwb3J0Mi5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKVswXS5nZXROZXN0ZWRNZXNzYWdlcygpLnNpemUoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbmVzdGVkIG1lc3NhZ2UgVVJJIGlzIGluY29ycmVjdC4iLCAiZmlsZTovc29tZXVyaTIiLCAoKFZhbGlkYXRpb25NZXNzYWdlKXJlcG9ydDIuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKClbMF0uZ2V0TmVzdGVkTWVzc2FnZXMoKS5nZXQoMCkpLmdldFVyaSgpKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSBuZXN0ZWQgbWVzc2FnZSBzdHJpbmcgaXMgaW5jb3JyZWN0LiIsICJtZXNzYWdlIiwgKChWYWxpZGF0aW9uTWVzc2FnZSlyZXBvcnQyLmdldFZhbGlkYXRpb25NZXNzYWdlcygpWzBdLmdldE5lc3RlZE1lc3NhZ2VzKCkuZ2V0KDApKS5nZXRNZXNzYWdlKCkpOwotCWFzc2VydEVxdWFscygiVGhlIG5lc3RlZCBtZXNzYWdlIGxpbmUgbnVtYmVyIGlzIGluY29ycmVjdC4iLCAxLCAoKFZhbGlkYXRpb25NZXNzYWdlKXJlcG9ydDIuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKClbMF0uZ2V0TmVzdGVkTWVzc2FnZXMoKS5nZXQoMCkpLmdldExpbmVOdW1iZXIoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbmVzdGVkIG1lc3NhZ2UgY29sdW1uIG51bWJlciBpcyBpbmNvcnJlY3QuIiwgMiwgKChWYWxpZGF0aW9uTWVzc2FnZSlyZXBvcnQyLmdldFZhbGlkYXRpb25NZXNzYWdlcygpWzBdLmdldE5lc3RlZE1lc3NhZ2VzKCkuZ2V0KDApKS5nZXRDb2x1bW5OdW1iZXIoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbmVzdGVkIG1lc3NhZ2Ugc2V2ZXJpdHkgaXMgaW5jb3JyZWN0LiIsIFZhbGlkYXRpb25NZXNzYWdlLlNFVl9OT1JNQUwsICgoVmFsaWRhdGlvbk1lc3NhZ2UpcmVwb3J0Mi5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKVswXS5nZXROZXN0ZWRNZXNzYWdlcygpLmdldCgwKSkuZ2V0U2V2ZXJpdHkoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbWVzc2FnZSBkb2VzIG5vdCBoYXZlIGEgbmVzdGVkIG1lc3NhZ2UuIiwgMSwgcmVwb3J0Mi5nZXROZXN0ZWRNZXNzYWdlcygpLnNpemUoKSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IGNvbnZlcnRpbmcgYSBXU0RMIHZhbGlkYXRpb24gcmVwb3J0IHRvIGEgWE1MIHZhbGlkYXRpb24gcmVwb3J0LgotICAgKiBUaGUgY29udGVudHMgb2YgdGhlIG1lc3NhZ2VzIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgbmV3IHJlcG9ydC4KLSAgICogMS4gVGVzdCB0aGF0IGEgcmVndWxhciBtZXNzYWdlIGlzIGFkZGVkIGFzIGlzLgotICAgKiAyLiBUZXN0IHRoYXQgYSBuZXN0ZWQgbWVzc2FnZSBpcyBhZGRlZCBhcyBhIG5lc3RlZCBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdENvbnZlcnRSZXBvcnRUb1hNTFJlcG9ydCgpCi0gIHsKLQkvLyAxLiBUZXN0IHRoYXQgYSByZWd1bGFyIG1lc3NhZ2UgaXMgYWRkZWQgYXMgaXMuCi0JVmFsaWRhdGlvbkluZm9JbXBsIHdzZGxyZXBvcnQgPSBuZXcgVmFsaWRhdGlvbkluZm9JbXBsKCJmaWxlOi9zb21ldXJpIiwgbmV3IE1lc3NhZ2VHZW5lcmF0b3IoUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKCJvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2UudmFsaWRhdGV3c2RsIikpKTsKLQl3c2RscmVwb3J0LmFkZEVycm9yKCJtZXNzYWdlIiwgMSwgMiwgImZpbGU6L3NvbWV1cmkiKTsKLQlWYWxpZGF0aW9uUmVwb3J0IHJlcG9ydCA9IHZhbGlkYXRvci5jb252ZXJ0UmVwb3J0VG9YTUxSZXBvcnQod3NkbHJlcG9ydCk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgcmVwb3J0IGRvZXMgbm90IGhhdmUgMSBtZXNzYWdlLiIsIDEsIHJlcG9ydC5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKS5sZW5ndGgpOwotCWFzc2VydEVxdWFscygiVGhlIG1lc3NhZ2Ugc3RyaW5nIGlzIGluY29ycmVjdC4iLCAibWVzc2FnZSIsIHJlcG9ydC5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKVswXS5nZXRNZXNzYWdlKCkpOwotCWFzc2VydEVxdWFscygiVGhlIG1lc3NhZ2UgbGluZSBudW1iZXIgaXMgaW5jb3JyZWN0LiIsIDEsIHJlcG9ydC5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKVswXS5nZXRMaW5lTnVtYmVyKCkpOwotCWFzc2VydEVxdWFscygiVGhlIG1lc3NhZ2UgY29sdW1uIG51bWJlciBpcyBpbmNvcnJlY3QuIiwgMiwgcmVwb3J0LmdldFZhbGlkYXRpb25NZXNzYWdlcygpWzBdLmdldENvbHVtbk51bWJlcigpKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSBtZXNzYWdlIHNldmVyaXR5IGlzIGluY29ycmVjdC4iLCBWYWxpZGF0aW9uTWVzc2FnZS5TRVZfTk9STUFMLCByZXBvcnQuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKClbMF0uZ2V0U2V2ZXJpdHkoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbWVzc2FnZSBVUkkgaXMgaW5jb3JyZWN0LiIsICJmaWxlOi9zb21ldXJpIiwgcmVwb3J0LmdldFZhbGlkYXRpb25NZXNzYWdlcygpWzBdLmdldFVyaSgpKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSBtZXNzYWdlIGhhcyBhbiBpbmNvcnJlY3RseSByZWdpc3RyZWQgbmVzdGVkIG1lc3NhZ2UuIiwgMCwgcmVwb3J0LmdldE5lc3RlZE1lc3NhZ2VzKCkuc2l6ZSgpKTsKLQkKLQkvLyAyLiBUZXN0IHRoYXQgYSBuZXN0ZWQgbWVzc2FnZSBpcyBhZGRlZCBhcyBhIG5lc3RlZCBtZXNzYWdlLgotCVZhbGlkYXRpb25JbmZvSW1wbCB3c2RscmVwb3J0MiA9IG5ldyBWYWxpZGF0aW9uSW5mb0ltcGwoImZpbGU6L3NvbWV1cmkiLCBuZXcgTWVzc2FnZUdlbmVyYXRvcihSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuZWNsaXBzZS52YWxpZGF0ZXdzZGwiKSkpOwotCXdzZGxyZXBvcnQyLmFkZEVycm9yKCJtZXNzYWdlIiwgMSwgMiwgImZpbGU6L3NvbWV1cmkyIik7Ci0JVmFsaWRhdGlvblJlcG9ydCByZXBvcnQyID0gdmFsaWRhdG9yLmNvbnZlcnRSZXBvcnRUb1hNTFJlcG9ydCh3c2RscmVwb3J0Mik7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgcmVwb3J0IGRvZXMgbm90IGhhdmUgMSBtZXNzYWdlLiIsIDEsIHJlcG9ydDIuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKCkubGVuZ3RoKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSBtZXNzYWdlIFVSSSBpcyBpbmNvcnJlY3QuIiwgImZpbGU6L3NvbWV1cmkyIiwgcmVwb3J0Mi5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKVswXS5nZXRVcmkoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbWVzc2FnZSBkb2VzIG5vdCBoYXZlIDEgbmVzdGVkIG1lc3NhZ2UuIiwgMSwgcmVwb3J0Mi5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKVswXS5nZXROZXN0ZWRNZXNzYWdlcygpLnNpemUoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbWVzc2FnZSBVUkkgaXMgaW5jb3JyZWN0LiIsICJmaWxlOi9zb21ldXJpMiIsICgoVmFsaWRhdGlvbk1lc3NhZ2UpcmVwb3J0Mi5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKVswXS5nZXROZXN0ZWRNZXNzYWdlcygpLmdldCgwKSkuZ2V0VXJpKCkpOwotCWFzc2VydEVxdWFscygiVGhlIG1lc3NhZ2Ugc3RyaW5nIGlzIGluY29ycmVjdC4iLCAibWVzc2FnZSIsICgoVmFsaWRhdGlvbk1lc3NhZ2UpcmVwb3J0Mi5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKVswXS5nZXROZXN0ZWRNZXNzYWdlcygpLmdldCgwKSkuZ2V0TWVzc2FnZSgpKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSBtZXNzYWdlIGxpbmUgbnVtYmVyIGlzIGluY29ycmVjdC4iLCAxLCAoKFZhbGlkYXRpb25NZXNzYWdlKXJlcG9ydDIuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKClbMF0uZ2V0TmVzdGVkTWVzc2FnZXMoKS5nZXQoMCkpLmdldExpbmVOdW1iZXIoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbWVzc2FnZSBjb2x1bW4gbnVtYmVyIGlzIGluY29ycmVjdC4iLCAyLCAoKFZhbGlkYXRpb25NZXNzYWdlKXJlcG9ydDIuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKClbMF0uZ2V0TmVzdGVkTWVzc2FnZXMoKS5nZXQoMCkpLmdldENvbHVtbk51bWJlcigpKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSBtZXNzYWdlIHNldmVyaXR5IGlzIGluY29ycmVjdC4iLCBWYWxpZGF0aW9uTWVzc2FnZS5TRVZfTk9STUFMLCAoKFZhbGlkYXRpb25NZXNzYWdlKXJlcG9ydDIuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKClbMF0uZ2V0TmVzdGVkTWVzc2FnZXMoKS5nZXQoMCkpLmdldFNldmVyaXR5KCkpOwotCWFzc2VydEVxdWFscygiVGhlIG1lc3NhZ2UgZG9lcyBub3QgaGF2ZSBhIG5lc3RlZCBtZXNzYWdlLiIsIDEsIHJlcG9ydDIuZ2V0TmVzdGVkTWVzc2FnZXMoKS5zaXplKCkpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9WYWxpZGF0b3JXcmFwcGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvVmFsaWRhdG9yV3JhcHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyY2FkMzgyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9WYWxpZGF0b3JXcmFwcGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2U7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5ncmFtbWFycy5YTUxHcmFtbWFyUG9vbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklNZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25SZXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5OZXN0ZWRWYWxpZGF0b3JDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuVmFsaWRhdGlvbkluZm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25SZXBvcnQ7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBleHRlbmRzIHZhbGlkYXRvciB0byBleHBvc2UgdGhlIHByb3RlY3RlZCBtZXRob2RzCi0gKiBmb3IgdGVzdGluZy4KLSAqLwotcHVibGljIGNsYXNzIFZhbGlkYXRvcldyYXBwZXIgZXh0ZW5kcyBWYWxpZGF0b3IgCi17Ci0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlLlZhbGlkYXRvciNhZGRJbmZvVG9NZXNzYWdlKG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuVmFsaWRhdGlvbk1lc3NhZ2UsIG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSU1lc3NhZ2UpCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRJbmZvVG9NZXNzYWdlKFZhbGlkYXRpb25NZXNzYWdlIHZhbGlkYXRpb25NZXNzYWdlLCBJTWVzc2FnZSBtZXNzYWdlKSAKLSAgewotCXN1cGVyLmFkZEluZm9Ub01lc3NhZ2UodmFsaWRhdGlvbk1lc3NhZ2UsIG1lc3NhZ2UpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZS5WYWxpZGF0b3Ijc2V0dXBWYWxpZGF0aW9uKG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuTmVzdGVkVmFsaWRhdG9yQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldHVwVmFsaWRhdGlvbihOZXN0ZWRWYWxpZGF0b3JDb250ZXh0IGNvbnRleHQpIAotICB7Ci0Jc3VwZXIuc2V0dXBWYWxpZGF0aW9uKGNvbnRleHQpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuZWNsaXBzZS5WYWxpZGF0b3IjdGVhcmRvd25WYWxpZGF0aW9uKG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuTmVzdGVkVmFsaWRhdG9yQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlYXJkb3duVmFsaWRhdGlvbihOZXN0ZWRWYWxpZGF0b3JDb250ZXh0IGNvbnRleHQpIAotICB7Ci0Jc3VwZXIudGVhcmRvd25WYWxpZGF0aW9uKGNvbnRleHQpOwotICB9Ci0KLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuZWNsaXBzZS5WYWxpZGF0b3IjY29udmVydE1lc3NhZ2Uob3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5JVmFsaWRhdGlvbk1lc3NhZ2UsIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuVmFsaWRhdGlvbkluZm8pCi0gICAqLwotICBwdWJsaWMgdm9pZCBjb252ZXJ0TWVzc2FnZShJVmFsaWRhdGlvbk1lc3NhZ2UgbWVzc2FnZSwgVmFsaWRhdGlvbkluZm8gY29udmVydGVkUmVwb3J0KSAKLSAgewotCXN1cGVyLmNvbnZlcnRNZXNzYWdlKG1lc3NhZ2UsIGNvbnZlcnRlZFJlcG9ydCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5lY2xpcHNlLlZhbGlkYXRvciNjb252ZXJ0UmVwb3J0VG9YTUxSZXBvcnQob3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5JVmFsaWRhdGlvblJlcG9ydCkKLSAgICovCi0gIHB1YmxpYyBWYWxpZGF0aW9uUmVwb3J0IGNvbnZlcnRSZXBvcnRUb1hNTFJlcG9ydChJVmFsaWRhdGlvblJlcG9ydCByZXBvcnQpIAotICB7Ci0JcmV0dXJuIHN1cGVyLmNvbnZlcnRSZXBvcnRUb1hNTFJlcG9ydChyZXBvcnQpOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBYTUwgZ3JhbW1hciBwb29sIGRlZmluZWQgZm9yIHRoZSBnaXZlbiBjb250ZXh0LgotICAgKiAKLSAgICogQHBhcmFtIGNvbnRleHQKLSAgICogCQlUaGUgY29udGV4dCB0byB1c2UgdG8gcmV0cmlldmUgdGhlIFhNTCBncmFtbWFyIHBvb2wuCi0gICAqIEByZXR1cm4KLSAgICogCQlUaGUgWE1MIGdyYW1tYXIgcG9vbCBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbnRleHQgb3IgbnVsbCBpZiBub25lIGlzIGFzc29jaWF0ZWQuCi0gICAqLwotICBwdWJsaWMgWE1MR3JhbW1hclBvb2wgZ2V0WE1MR3JhbW1hclBvb2xGb3JDb250ZXh0KE5lc3RlZFZhbGlkYXRvckNvbnRleHQgY29udGV4dCkKLSAgewotCXJldHVybiAoWE1MR3JhbW1hclBvb2wpeG1sR3JhbW1hclBvb2xzLmdldChjb250ZXh0KTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgWFNEIGdyYW1tYXIgcG9vbCBkZWZpbmVkIGZvciB0aGUgZ2l2ZW4gY29udGV4dC4KLSAgICogCi0gICAqIEBwYXJhbSBjb250ZXh0Ci0gICAqIAkJVGhlIGNvbnRleHQgdG8gdXNlIHRvIHJldHJpZXZlIHRoZSBYU0QgZ3JhbW1hciBwb29sLgotICAgKiBAcmV0dXJuCi0gICAqIAkJVGhlIFhTRCBncmFtbWFyIHBvb2wgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb250ZXh0IG9yIG51bGwgaWYgbm9uZSBpcyBhc3NvY2lhdGVkLgotICAgKi8KLSAgcHVibGljIFhNTEdyYW1tYXJQb29sIGdldFhTREdyYW1tYXJQb29sRm9yQ29udGV4dChOZXN0ZWRWYWxpZGF0b3JDb250ZXh0IGNvbnRleHQpCi0gIHsKLQlyZXR1cm4gKFhNTEdyYW1tYXJQb29sKXhzZEdyYW1tYXJQb29scy5nZXQoY29udGV4dCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBFeHBvc2UgdGhlIFhNTCBncmFtbWFyIHBvb2xzIEhhc2hNYXAgZm9yIHRlc3RpbmcuCi0gICAqIAotICAgKiBAcmV0dXJuCi0gICAqIAkJVGhlIFhNTCBncmFtbWFyIHBvb2xzIEhhc2hNYXAuCi0gICAqLwotICBwdWJsaWMgSGFzaE1hcCBnZXRYTUxHcmFtbWFyUG9vbHNNYXAoKQotICB7Ci0JcmV0dXJuIHhtbEdyYW1tYXJQb29sczsKLSAgfQotICAKLSAgLyoqCi0gICAqIEV4cG9zZSB0aGUgWFNEIGdyYW1tYXIgcG9vbHMgSGFzaE1hcCBmb3IgdGVzdGluZy4KLSAgICogCi0gICAqIEByZXR1cm4KLSAgICogCQlUaGUgWFNEIGdyYW1tYXIgcG9vbHMgSGFzaE1hcC4KLSAgICovCi0gIHB1YmxpYyBIYXNoTWFwIGdldFhTREdyYW1tYXJQb29sc01hcCgpCi0gIHsKLQlyZXR1cm4geHNkR3JhbW1hclBvb2xzOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvV1NETFZhbGlkYXRvclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9XU0RMVmFsaWRhdG9yVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDdiODNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS9XU0RMVmFsaWRhdG9yVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2U7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotLyoqCi0gKiBUZXN0IHRoZSBFY2xpcHNlIHNwZWNpZmljIFdTREwgdmFsaWRhdG9yLgotICovCi1wdWJsaWMgY2xhc3MgV1NETFZhbGlkYXRvclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSAKLXsKLSAgLyoqCi0gICAqIENyZWF0ZSBhIHRlc3RzIHN1aXRlIGZyb20gdGhpcyB0ZXN0IGNsYXNzLgotICAgKiAKLSAgICogQHJldHVybiBBIHRlc3Qgc3VpdGUgY29udGFpbmluZyB0aGlzIHRlc3QgY2xhc3MuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoV1NETFZhbGlkYXRvclRlc3QuY2xhc3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCB0byBlbnN1cmUgdGhlIFVSSSByZXNvbHZlciBpcyBub3QgbnVsbCBpbiB0aGUgRWNsaXBzZQotICAgKiBzcGVjaWZpYyBYTUwgdmFsaWRhdG9yLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFVSSVJlc29sdmVySXNSZWdpc3RlcmVkKCkKLSAgewotCVdTRExWYWxpZGF0b3JXcmFwcGVyIHZhbGlkYXRvciA9IG5ldyBXU0RMVmFsaWRhdG9yV3JhcHBlcigpOwotCWFzc2VydE5vdE51bGwoIlRoZSBVUkkgcmVzb2x2ZXIgaXMgbnVsbC4iLCB2YWxpZGF0b3IuZ2V0VVJJUmVzb2x2ZXIoKSk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9lY2xpcHNlL1dTRExWYWxpZGF0b3JXcmFwcGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvV1NETFZhbGlkYXRvcldyYXBwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI0MjM0MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvV1NETFZhbGlkYXRvcldyYXBwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5lY2xpcHNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5yZXNvbHZlci5VUklSZXNvbHZlcjsKLQotLyoqCi0gKiBXcmFwcGVyIGZvciB0aGUgRWNsaXBzZSBXU0RMIHZhbGlkYXRvciBjbGFzcyB0byBhbGxvdyBmb3IgdGVzdGluZy4KLSAqLwotcHVibGljIGNsYXNzIFdTRExWYWxpZGF0b3JXcmFwcGVyIGV4dGVuZHMgV1NETFZhbGlkYXRvciAKLXsKLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKi8KLSAgcHVibGljIFdTRExWYWxpZGF0b3JXcmFwcGVyKCkKLSAgewotCXN1cGVyKCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIFVSSSByZXNvbHZlciByZWdpc3RlcmVkIG9uIHRoZSBXU0RMIHZhbGlkYXRvci4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIFVSSSByZXNvbHZlciByZWdpc3RlcmVkIG9uIHRoZSBXU0RMIHZhbGlkYXRvci4KLSAgICovCi0gIHB1YmxpYyBVUklSZXNvbHZlciBnZXRVUklSZXNvbHZlcigpCi0gIHsKLQlyZXR1cm4gdXJpUmVzb2x2ZXI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS92YWxpZGF0ZXdzZGwucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvZWNsaXBzZS92YWxpZGF0ZXdzZGwucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmE3ZmNlMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL2VjbGlwc2UvdmFsaWRhdGV3c2RsLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBEdXBsaWNhdGUgZXJyb3IgbWVzc2FnZSBmb3IgdGVzdGluZwotX1JFRl9GSUxFX0VSUk9SX01FU1NBR0UgICAgICAgICAgPSBSZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh7MH0pLiAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3Jlc29sdmVyL1VSSVJlc29sdmVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC9yZXNvbHZlci9VUklSZXNvbHZlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZjNjA1Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3Jlc29sdmVyL1VSSVJlc29sdmVyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5yZXNvbHZlcjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi0vKioKLSAqIFVSSVJlc29sdmVyIHRlc3RzLgotICovCi1wdWJsaWMgY2xhc3MgVVJJUmVzb2x2ZXJUZXN0IGV4dGVuZHMgVGVzdENhc2UKLXsKLSAgcHJpdmF0ZSBVUklSZXNvbHZlciB1cmlSZXNvbHZlciA9IG51bGw7Ci0gLyoqCi0gICogQ3JlYXRlIGEgdGVzdHMgc3VpdGUgZnJvbSB0aGlzIHRlc3QgY2xhc3MuCi0gICogCi0gICogQHJldHVybiBBIHRlc3Qgc3VpdGUgY29udGFpbmluZyB0aGlzIHRlc3QgY2xhc3MuCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShVUklSZXNvbHZlclRlc3QuY2xhc3MpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiAKLSAgewotCXVyaVJlc29sdmVyID0gbmV3IFVSSVJlc29sdmVyKCk7CQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsaXplQWJzb2x1dGVGaWxlKCkKLSAgewotICAJLy8gU3lzdGVtIGlkIGlzIGFic29sdXRlIGFuZCBzaG91bGQgbm90IGJlIG1vZGlmaWVkLgotICAJU3RyaW5nIGJhc2VMb2NhdGlvbiA9ICJmaWxlOi9jOi9zb21lcGF0aC9zb21lcGF0aC9maWxlLnR4dCI7Ci0gIAlTdHJpbmcgc3lzdGVtSWQgPSAiZmlsZTovYzovc29tZXBhdGgvbXlmaWxlLnR4dCI7Ci0gIAlhc3NlcnRFcXVhbHMoInN5c3RlbUlkIGlzIGFic29sdXRlIGFuZCBzaG91bGQgbm90IGJlIG1vZGlmaWVkLiIsIHN5c3RlbUlkLCB1cmlSZXNvbHZlci5yZXNvbHZlKGJhc2VMb2NhdGlvbiwgbnVsbCwgc3lzdGVtSWQpLmdldExvZ2ljYWxMb2NhdGlvbigpKTsKLSAgCQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsaXplUmVsYXRpdmVGaWxlKCkKLSAgewotICAJLy8gU3lzdGVtIGlkIGlzIHJlbGF0aXZlIAotICAJU3RyaW5nIGJhc2VMb2NhdGlvbiA9ICJmaWxlOi9jOi9zb21lcGF0aC9zb21lcGF0aC9maWxlLnR4dCI7Ci0gIAlTdHJpbmcgc3lzdGVtSWQgPSAibXlmaWxlLnR4dCI7Ci0gIAlhc3NlcnRFcXVhbHMoInN5c3RlbUlkIGlzIHNpbXBsZSByZWxhdGl2ZSBhbmQgaXMgbm90IG1vZGlmaWVkIGNvcnJlY3RseS4iLCAiZmlsZTovYzovc29tZXBhdGgvc29tZXBhdGgvbXlmaWxlLnR4dCIsIHVyaVJlc29sdmVyLnJlc29sdmUoYmFzZUxvY2F0aW9uLCBudWxsLCBzeXN0ZW1JZCkuZ2V0TG9naWNhbExvY2F0aW9uKCkpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsaXplUmVsYXRpdmVGaWxlU3RhcnRzV2l0aERvdERvdCgpCi0gIHsKLSAgICAvLyBTeXN0ZW0gaWQgaXMgcmVsYXRpdmUgd2l0aCAuLi8KLSAgCVN0cmluZyBiYXNlTG9jYXRpb24gPSAiZmlsZTovYzovc29tZXBhdGgvc29tZXBhdGgvZmlsZS50eHQiOwotICAJU3RyaW5nIHN5c3RlbUlkID0gIi4uL215ZmlsZS50eHQiOwotICAJYXNzZXJ0RXF1YWxzKCJzeXN0ZW1JZCBpcyByZWxhdGl2ZSB3aXRoIC4uLyBhbmQgaXMgbm90IG1vZGlmaWVkIGNvcnJlY3RseS4iLCAiZmlsZTovYzovc29tZXBhdGgvbXlmaWxlLnR4dCIsIHVyaVJlc29sdmVyLnJlc29sdmUoYmFzZUxvY2F0aW9uLCBudWxsLCBzeXN0ZW1JZCkuZ2V0TG9naWNhbExvY2F0aW9uKCkpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsaXplUmVsYXRpdmVGaWxlU3RhcnRzV2l0aERvdERvdFR3aWNlKCkKLSAgewotICAgIC8vIFN5c3RlbSBpZCBpcyByZWxhdGl2ZSB3aXRoIC4uLy4uLwotICAJU3RyaW5nIGJhc2VMb2NhdGlvbiA9ICJmaWxlOi9jOi9zb21lcGF0aC9zb21lcGF0aC9maWxlLnR4dCI7Ci0gIAlTdHJpbmcgc3lzdGVtSWQgPSAiLi4vLi4vbXlmaWxlLnR4dCI7Ci0gIAlhc3NlcnRFcXVhbHMoInN5c3RlbUlkIGlzIHJlbGF0aXZlIHdpdGggLi4vLi4vIGFuZCBpcyBub3QgbW9kaWZpZWQgY29ycmVjdGx5LiIsICJmaWxlOi9jOi9teWZpbGUudHh0IiwgdXJpUmVzb2x2ZXIucmVzb2x2ZShiYXNlTG9jYXRpb24sIG51bGwsIHN5c3RlbUlkKS5nZXRMb2dpY2FsTG9jYXRpb24oKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3ROb3JtYWxpemVSZWxhdGl2ZUZpbGVTdGFydHNXaXRoRG90KCkKLSAgewotICAgIC8vIFN5c3RlbSBpZCBpcyByZWxhdGl2ZSB3aXRoIC4vCi0gIAlTdHJpbmcgYmFzZUxvY2F0aW9uID0gImZpbGU6L2M6L3NvbWVwYXRoL3NvbWVwYXRoL2ZpbGUudHh0IjsKLSAgCVN0cmluZyBzeXN0ZW1JZCA9ICIuL215ZmlsZS50eHQiOwotICAJYXNzZXJ0RXF1YWxzKCJzeXN0ZW1JZCBpcyByZWxhdGl2ZSB3aXRoIC4vIGFuZCBpcyBub3QgbW9kaWZpZWQgY29ycmVjdGx5LiIsICJmaWxlOi9jOi9zb21lcGF0aC9zb21lcGF0aC9teWZpbGUudHh0IiwgdXJpUmVzb2x2ZXIucmVzb2x2ZShiYXNlTG9jYXRpb24sIG51bGwsIHN5c3RlbUlkKS5nZXRMb2dpY2FsTG9jYXRpb24oKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3ROb3JtYWxpemVSZWxhdGl2ZUZpbGVTdGFydHNXaXRoRG90VHdpY2UoKQotICB7Ci0gICAgLy8gU3lzdGVtIGlkIGlzIHJlbGF0aXZlIHdpdGggLi8uLwotICAJU3RyaW5nIGJhc2VMb2NhdGlvbiA9ICJmaWxlOi9jOi9zb21lcGF0aC9zb21lcGF0aC9maWxlLnR4dCI7Ci0gIAlTdHJpbmcgc3lzdGVtSWQgPSAiLi8uL215ZmlsZS50eHQiOwotICAJYXNzZXJ0RXF1YWxzKCJzeXN0ZW1JZCBpcyByZWxhdGl2ZSB3aXRoIC4vLi8gYW5kIGlzIG5vdCBtb2RpZmllZCBjb3JyZWN0bHkuIiwgImZpbGU6L2M6L3NvbWVwYXRoL3NvbWVwYXRoL215ZmlsZS50eHQiLCB1cmlSZXNvbHZlci5yZXNvbHZlKGJhc2VMb2NhdGlvbiwgbnVsbCwgc3lzdGVtSWQpLmdldExvZ2ljYWxMb2NhdGlvbigpKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVzdE5vcm1hbGl6ZVJlbGF0aXZlRmlsZVN0YXJ0c1dpdGhTbGFzaCgpCi0gIHsKLSAgICAvLyBTeXN0ZW0gaWQgaXMgcmVsYXRpdmUgYmVnaW5uaW5nIHdpdGggLwotICAJU3RyaW5nIGJhc2VMb2NhdGlvbiA9ICJmaWxlOi9jOi9zb21lcGF0aC9zb21lcGF0aC9maWxlLnR4dCI7Ci0gIAlTdHJpbmcgc3lzdGVtSWQgPSAiL215ZmlsZS50eHQiOwotICAJYXNzZXJ0RXF1YWxzKCJzeXN0ZW1JZCBpcyByZWxhdGl2ZSBiZWdpbm5pbmcgd2l0aCAvIGFuZCBpcyBub3QgbW9kaWZpZWQgY29ycmVjdGx5LiIsICJmaWxlOi9jOi9zb21lcGF0aC9zb21lcGF0aC9teWZpbGUudHh0IiwgdXJpUmVzb2x2ZXIucmVzb2x2ZShiYXNlTG9jYXRpb24sIG51bGwsIHN5c3RlbUlkKS5nZXRMb2dpY2FsTG9jYXRpb24oKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3ROb3JtYWxpemVSZWxhdGl2ZUZpbGVEb3REb3RJbk1pZGRsZSgpCi0gIHsKLSAgICAvLyBTeXN0ZW0gaWQgY29udGFpbnMgLi4vIGluIHRoZSBtaWRkbGUKLSAgCVN0cmluZyBiYXNlTG9jYXRpb24gPSAiZmlsZTovYzovc29tZXBhdGgvc29tZXBhdGgvZmlsZS50eHQiOwotICAJU3RyaW5nIHN5c3RlbUlkID0gInNvbWVwYXRoLy4uL215ZmlsZS50eHQiOwotICAJYXNzZXJ0RXF1YWxzKCJzeXN0ZW1JZCBpcyByZWxhdGl2ZSBhbmQgY29udGFpbnMgLi4vIGluIHRoZSBtaWRkbGUgYW5kIGlzIG5vdCBtb2RpZmllZCBjb3JyZWN0bHkuIiwgImZpbGU6L2M6L3NvbWVwYXRoL3NvbWVwYXRoL215ZmlsZS50eHQiLCB1cmlSZXNvbHZlci5yZXNvbHZlKGJhc2VMb2NhdGlvbiwgbnVsbCwgc3lzdGVtSWQpLmdldExvZ2ljYWxMb2NhdGlvbigpKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVzdE5vcm1hbGl6ZVJlbGF0aXZlRmlsZUZvdEluTWlkZGxlKCkKLSAgewotICAgIC8vIFN5c3RlbSBpZCBjb250YWlucyAuLyBpbiB0aGUgbWlkZGxlCi0gIAlTdHJpbmcgYmFzZUxvY2F0aW9uID0gImZpbGU6L2M6L3NvbWVwYXRoL3NvbWVwYXRoL2ZpbGUudHh0IjsKLSAgCVN0cmluZyBzeXN0ZW1JZCA9ICJzb21lcGF0aC8uL215ZmlsZS50eHQiOwotICAJYXNzZXJ0RXF1YWxzKCJzeXN0ZW1JZCBpcyByZWxhdGl2ZSBhbmQgY29udGFpbnMgLi8gaW4gdGhlIG1pZGRsZSBhbmQgaXMgbm90IG1vZGlmaWVkIGNvcnJlY3RseS4iLCAiZmlsZTovYzovc29tZXBhdGgvc29tZXBhdGgvc29tZXBhdGgvbXlmaWxlLnR4dCIsIHVyaVJlc29sdmVyLnJlc29sdmUoYmFzZUxvY2F0aW9uLCBudWxsLCBzeXN0ZW1JZCkuZ2V0TG9naWNhbExvY2F0aW9uKCkpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0Tm9ybWxpemVSZWxhdGl2ZUZpbGVEb3REb3RJbk1pZGRsZU9mQmFzZSgpCi0gIHsKLSAgICAvLyBCYXNlIGxvY2F0aW9uIGNvbnRhaW5zIC4uLyBpbiB0aGUgbWlkZGxlCi0gIAlTdHJpbmcgYmFzZUxvY2F0aW9uID0gImZpbGU6L2M6L3NvbWVwYXRoLy4uL3NvbWVwYXRoL2ZpbGUudHh0IjsKLSAgCVN0cmluZyBzeXN0ZW1JZCA9ICJteWZpbGUudHh0IjsKLSAgCWFzc2VydEVxdWFscygiYmFzZUxvY2F0aW9uIGNvbnRhaW5zIC4uLyBpbiB0aGUgbWlkZGxlIGFuZCBpcyBub3QgbW9kaWZpZWQgY29ycmVjdGx5LiIsICJmaWxlOi9jOi9zb21lcGF0aC9teWZpbGUudHh0IiwgdXJpUmVzb2x2ZXIucmVzb2x2ZShiYXNlTG9jYXRpb24sIG51bGwsIHN5c3RlbUlkKS5nZXRMb2dpY2FsTG9jYXRpb24oKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3ROb3JtYWxpemVSZWxhdGl2ZUZpbGVEb3RJbk1pZGRsZU9mQmFzZSgpCi0gIHsKLSAgICAvLyBCYXNlIGxvY2F0aW9uIGNvbnRhaW5zIC4vIGluIHRoZSBtaWRkbGUKLSAgCVN0cmluZyBiYXNlTG9jYXRpb24gPSAiZmlsZTovYzovc29tZXBhdGgvLi9zb21lcGF0aC9maWxlLnR4dCI7Ci0gIAlTdHJpbmcgc3lzdGVtSWQgPSAibXlmaWxlLnR4dCI7Ci0gIAlhc3NlcnRFcXVhbHMoImJhc2VMb2NhdGlvbiBjb250YWlucyAuLyBpbiB0aGUgbWlkZGxlIGFuZCBpcyBub3QgbW9kaWZpZWQgY29ycmVjdGx5LiIsICJmaWxlOi9jOi9zb21lcGF0aC9zb21lcGF0aC9teWZpbGUudHh0IiwgdXJpUmVzb2x2ZXIucmVzb2x2ZShiYXNlTG9jYXRpb24sIG51bGwsIHN5c3RlbUlkKS5nZXRMb2dpY2FsTG9jYXRpb24oKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3ROb3JtYWxpemVSZWxhdGl2ZUZpbGVCYXNlU3RhcnRzV2l0aFNsYXNoRG90RG90KCkKLSAgewotICAgIC8vIEJhc2UgbG9jYXRpb24gc3RhcnRzIHdpdGggLy4uLyAKLSAgCVN0cmluZyBiYXNlTG9jYXRpb24gPSAiZmlsZTovLi4vc29tZXBhdGgvZmlsZS50eHQiOwotICAJU3RyaW5nIHN5c3RlbUlkID0gIm15ZmlsZS50eHQiOwotICAJYXNzZXJ0RXF1YWxzKCJiYXNlTG9jYXRpb24gc3RhcnRzIHdpdGggLi4vIGFuZCBpcyBub3QgbW9kaWZpZWQgY29ycmVjdGx5LiIsICJmaWxlOi8uLi9zb21lcGF0aC9teWZpbGUudHh0IiwgdXJpUmVzb2x2ZXIucmVzb2x2ZShiYXNlTG9jYXRpb24sIG51bGwsIHN5c3RlbUlkKS5nZXRMb2dpY2FsTG9jYXRpb24oKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3ROb3JtYWxpemVSZWxhdGl2ZUZpbGVCYXNlU3RhcnRzV2l0aFNsYXNoRG90KCkKLSAgewotICAgIC8vIEJhc2UgbG9jYXRpb24gc3RhcnRzIHdpdGggLy4vCi0gIAlTdHJpbmcgYmFzZUxvY2F0aW9uID0gImZpbGU6Ly4vc29tZXBhdGgvZmlsZS50eHQiOwotICAJU3RyaW5nIHN5c3RlbUlkID0gIm15ZmlsZS50eHQiOwotICAJYXNzZXJ0RXF1YWxzKCJiYXNlTG9jYXRpb24gc3RhcnRzIHdpdGggLi8gYW5kIGlzIG5vdCBtb2RpZmllZCBjb3JyZWN0bHkuIiwgImZpbGU6L3NvbWVwYXRoL215ZmlsZS50eHQiLCB1cmlSZXNvbHZlci5yZXNvbHZlKGJhc2VMb2NhdGlvbiwgbnVsbCwgc3lzdGVtSWQpLmdldExvZ2ljYWxMb2NhdGlvbigpKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVzdE5vcm1hbGl6ZVJlbGF0aXZlRmlsZUJhc2VTdGFydHNXaXRoRG90RG90KCkKLSAgewotICAgIC8vIEJhc2UgbG9jYXRpb24gc3RhcnRzIHdpdGggLi4vIAotICAJU3RyaW5nIGJhc2VMb2NhdGlvbiA9ICJmaWxlOi4uL3NvbWVwYXRoL2ZpbGUudHh0IjsKLSAgCVN0cmluZyBzeXN0ZW1JZCA9ICJteWZpbGUudHh0IjsKLSAgCWFzc2VydEVxdWFscygiYmFzZUxvY2F0aW9uIHN0YXJ0cyB3aXRoIC4uLyBhbmQgaXMgbm90IG1vZGlmaWVkIGNvcnJlY3RseS4iLCAiZmlsZTouLi9zb21lcGF0aC9teWZpbGUudHh0IiwgdXJpUmVzb2x2ZXIucmVzb2x2ZShiYXNlTG9jYXRpb24sIG51bGwsIHN5c3RlbUlkKS5nZXRMb2dpY2FsTG9jYXRpb24oKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3ROb3JtYWxpemVSZWxhdGl2ZUZpbGVCYXNlU3RhcnRzV2l0aERvdCgpCi0gIHsKLSAgICAvLyBCYXNlIGxvY2F0aW9uIHN0YXJ0cyB3aXRoIC4vIAotICAJU3RyaW5nIGJhc2VMb2NhdGlvbiA9ICJmaWxlOi4vc29tZXBhdGgvZmlsZS50eHQiOwotICAJU3RyaW5nIHN5c3RlbUlkID0gIm15ZmlsZS50eHQiOwotICAJYXNzZXJ0RXF1YWxzKCJiYXNlTG9jYXRpb24gc3RhcnRzIHdpdGggLi8gYW5kIGlzIG5vdCBtb2RpZmllZCBjb3JyZWN0bHkuIiwgImZpbGU6c29tZXBhdGgvbXlmaWxlLnR4dCIsIHVyaVJlc29sdmVyLnJlc29sdmUoYmFzZUxvY2F0aW9uLCBudWxsLCBzeXN0ZW1JZCkuZ2V0TG9naWNhbExvY2F0aW9uKCkpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsaXplUmVsYXRpdmVGaWxlU29tZWRpckRvdERvdCgpCi0gIHsKLSAgICAvLyBTeXN0ZW0gaWQgY29udGFpbnMgc29tZWRpci4uLyBpbiB0aGUgbWlkZGxlCi0gIAlTdHJpbmcgYmFzZUxvY2F0aW9uID0gImZpbGU6L3NvbWVwYXRoL2ZpbGUudHh0IjsKLSAgCVN0cmluZyBzeXN0ZW1JZCA9ICJzb21lZGlyLi4vbXlmaWxlLnR4dCI7Ci0gIAlhc3NlcnRFcXVhbHMoInN5c3RlbUlkIGhhcyBzb21lZGlyLi4vIGFuZCBpcyBub3QgbW9kaWZpZWQgY29ycmVjdGx5LiIsICJmaWxlOi9zb21lcGF0aC9zb21lZGlyLi4vbXlmaWxlLnR4dCIsIHVyaVJlc29sdmVyLnJlc29sdmUoYmFzZUxvY2F0aW9uLCBudWxsLCBzeXN0ZW1JZCkuZ2V0TG9naWNhbExvY2F0aW9uKCkpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsaXplUmVsYXRpdmVGaWxlU29tZWRpckRvdCgpCi0gIHsKLSAgICAvLyBTeXN0ZW0gaWQgY29udGFpbnMgc29tZWRpci4vIGluIHRoZSBtaWRkbGUKLSAgCVN0cmluZyBiYXNlTG9jYXRpb24gPSAiZmlsZTovc29tZXBhdGgvZmlsZS50eHQiOwotICAJU3RyaW5nIHN5c3RlbUlkID0gInNvbWVkaXIuL215ZmlsZS50eHQiOwotICAJYXNzZXJ0RXF1YWxzKCJzeXN0ZW1JZCBoYXMgc29tZWRpci4vIGFuZCBpcyBub3QgbW9kaWZpZWQgY29ycmVjdGx5LiIsICJmaWxlOi9zb21lcGF0aC9zb21lZGlyLi9teWZpbGUudHh0IiwgdXJpUmVzb2x2ZXIucmVzb2x2ZShiYXNlTG9jYXRpb24sIG51bGwsIHN5c3RlbUlkKS5nZXRMb2dpY2FsTG9jYXRpb24oKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3ROb3JtYWxpemVOdWxsU3lzdGVtSWQoKQotICB7Ci0gICAgLy8gU3lzdGVtIGlkIGlzIG51bGwKLSAgCVN0cmluZyBiYXNlTG9jYXRpb24gPSAiZmlsZTovc29tZXBhdGgvZmlsZS50eHQiOwotICAJU3RyaW5nIHN5c3RlbUlkID0gbnVsbDsKLSAgCWFzc2VydEVxdWFscygic3lzdGVtSWQgaXMgbnVsbC4iLCBudWxsLCB1cmlSZXNvbHZlci5yZXNvbHZlKGJhc2VMb2NhdGlvbiwgbnVsbCwgc3lzdGVtSWQpLmdldExvZ2ljYWxMb2NhdGlvbigpKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVzdE5vcm1hbGl6ZU51bGxCYXNlTG9jYXRpb24oKQotICB7Ci0gICAgLy8gQmFzZSBsb2NhdGlvbiBpcyBudWxsCi0gIAlTdHJpbmcgYmFzZUxvY2F0aW9uID0gbnVsbDsKLSAgCVN0cmluZyBzeXN0ZW1JZCA9ICJzb21lZGlyLi9teWZpbGUudHh0IjsKLSAgCWFzc2VydEVxdWFscygic3lzdGVtSWQgaXMgbnVsbC4iLCBudWxsLCB1cmlSZXNvbHZlci5yZXNvbHZlKGJhc2VMb2NhdGlvbiwgbnVsbCwgc3lzdGVtSWQpLmdldExvZ2ljYWxMb2NhdGlvbigpKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVzdE5vcm1hbGl6ZVN5c3RlbUlkQWJzb2x1dGVOdWxsQmFzZUxvY2F0aW9uKCkKLSAgewotICAgIC8vIEJhc2UgbG9jYXRpb24gaXMgbnVsbAotICAJU3RyaW5nIGJhc2VMb2NhdGlvbiA9ICJudWxsIjsKLSAgCVN0cmluZyBzeXN0ZW1JZCA9ICJmaWxlOi9zb21lZGlyLi9teWZpbGUudHh0IjsKLSAgCWFzc2VydEVxdWFscygic3lzdGVtSWQgaXMgbnVsbC4iLCAiZmlsZTovc29tZWRpci4vbXlmaWxlLnR4dCIsIHVyaVJlc29sdmVyLnJlc29sdmUoYmFzZUxvY2F0aW9uLCBudWxsLCBzeXN0ZW1JZCkuZ2V0TG9naWNhbExvY2F0aW9uKCkpOwotICB9Ci0KLQkKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvYW50L0FudExvZ2dlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvYW50L0FudExvZ2dlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJiYzc1My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL2FudC9BbnRMb2dnZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnVpLmFudDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwubG9nZ2luZy5JTG9nZ2VyOwotCi0vKioKLSAqIFRlc3RzIGZvciB0aGUgQW50TG9nZ2VyLgotICovCi1wdWJsaWMgY2xhc3MgQW50TG9nZ2VyVGVzdCBleHRlbmRzIFRlc3RDYXNlIAotewotICBBbnRMb2dnZXJUZXN0VGFzayB0YXNrID0gbnVsbDsKLQkKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gCi0gIHsKLQl0YXNrID0gbmV3IEFudExvZ2dlclRlc3RUYXNrKCk7Ci0gIH0KLQotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiAKLSAgewotCXRhc2sgPSBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFRlc3QgdGhhdCB0aGUgbG9nIG1ldGhvZDoKLSAgICogMS4gbG9ncyBlcnJvcnMgY29ycmVjdGx5LgotICAgKiAyLiByZWNvcmRzIHRoZSBtZXNzYWdlIGNvcnJlY3RseS4KLSAgICogMy4gcmVjb3JkcyB0aGUgdGhyb3dhYmxlIGNvcnJlY3RseS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RMb2dFcnJvcldpdGhUaHJvd2FibGUoKQotICB7Ci0JQW50TG9nZ2VyIGxvZ2dlciA9IG5ldyBBbnRMb2dnZXIodGFzayk7Ci0JbG9nZ2VyLmxvZygiTUVTU0FHRSIsIElMb2dnZXIuU0VWX0VSUk9SLCBuZXcgVGhyb3dhYmxlKCJUSFJPV0FCTEUiKSk7Ci0JCi0JYXNzZXJ0VHJ1ZSgiV2FybmluZ3Mgd2VyZSByZXBvcnRlZCB3aGVuIG9ubHkgZXJyb3JzIHNob3VsZCBoYXZlIGJlZW4gcmVwb3J0ZWQuIiwgdGFzay5nZXRXYXJuaW5ncygpLmlzRW1wdHkoKSk7Ci0JYXNzZXJ0VHJ1ZSgiSW5mb3Mgd2VyZSByZXBvcnRlZCB3aGVuIG9ubHkgZXJyb3JzIHNob3VsZCBoYXZlIGJlZW4gcmVwb3J0ZWQuIiwgdGFzay5nZXRJbmZvcygpLmlzRW1wdHkoKSk7Ci0JYXNzZXJ0VHJ1ZSgiVmVyYm9zZXMgd2VyZSByZXBvcnRlZCB3aGVuIG9ubHkgZXJyb3JzIHNob3VsZCBoYXZlIGJlZW4gcmVwb3J0ZWQuIiwgdGFzay5nZXRWZXJib3NlcygpLmlzRW1wdHkoKSk7Ci0JYXNzZXJ0RXF1YWxzKCIyIGVycm9ycyB3ZXJlIG5vdCByZXBvcnRlZC4iLCAyLCB0YXNrLmdldEVycm9ycygpLnNpemUoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbWVzc2FnZSB3YXMgbm90IE1FU1NBR0UuIiwgIk1FU1NBR0UiLCB0YXNrLmdldEVycm9ycygpLmdldCgwKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgdGhyb3dhYmxlIHdhcyBub3QgVEhST1dBQkxFLiIsICJqYXZhLmxhbmcuVGhyb3dhYmxlOiBUSFJPV0FCTEUiLCB0YXNrLmdldEVycm9ycygpLmdldCgxKSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHRoYXQgdGhlIGxvZyBtZXRob2Q6Ci0gICAqIDEuIGxvZ3Mgd2FybmluZ3MgY29ycmVjdGx5LgotICAgKiAyLiByZWNvcmRzIHRoZSBtZXNzYWdlIGNvcnJlY3RseS4KLSAgICogMy4gcmVjb3JkcyB0aGUgdGhyb3dhYmxlIGNvcnJlY3RseS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RMb2dXYXJuaW5nV2l0aFRocm93YWJsZSgpCi0gIHsKLQlBbnRMb2dnZXIgbG9nZ2VyID0gbmV3IEFudExvZ2dlcih0YXNrKTsKLQlsb2dnZXIubG9nKCJNRVNTQUdFIiwgSUxvZ2dlci5TRVZfV0FSTklORywgbmV3IFRocm93YWJsZSgiVEhST1dBQkxFIikpOwotCQotCWFzc2VydFRydWUoIkVycm9ycyB3ZXJlIHJlcG9ydGVkIHdoZW4gb25seSB3YXJuaW5ncyBzaG91bGQgaGF2ZSBiZWVuIHJlcG9ydGVkLiIsIHRhc2suZ2V0RXJyb3JzKCkuaXNFbXB0eSgpKTsKLQlhc3NlcnRUcnVlKCJJbmZvcyB3ZXJlIHJlcG9ydGVkIHdoZW4gb25seSB3YXJuaW5ncyBzaG91bGQgaGF2ZSBiZWVuIHJlcG9ydGVkLiIsIHRhc2suZ2V0SW5mb3MoKS5pc0VtcHR5KCkpOwotCWFzc2VydFRydWUoIlZlcmJvc2VzIHdlcmUgcmVwb3J0ZWQgd2hlbiBvbmx5IGVycm9ycyBzaG91bGQgaGF2ZSBiZWVuIHJlcG9ydGVkLiIsIHRhc2suZ2V0VmVyYm9zZXMoKS5pc0VtcHR5KCkpOwotCWFzc2VydEVxdWFscygiMiB3YXJuaW5ncyB3ZXJlIG5vdCByZXBvcnRlZC4iLCAyLCB0YXNrLmdldFdhcm5pbmdzKCkuc2l6ZSgpKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSBtZXNzYWdlIHdhcyBub3QgTUVTU0FHRS4iLCAiTUVTU0FHRSIsIHRhc2suZ2V0V2FybmluZ3MoKS5nZXQoMCkpOwotCWFzc2VydEVxdWFscygiVGhlIHRocm93YWJsZSB3YXMgbm90IFRIUk9XQUJMRS4iLCAiamF2YS5sYW5nLlRocm93YWJsZTogVEhST1dBQkxFIiwgdGFzay5nZXRXYXJuaW5ncygpLmdldCgxKSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHRoYXQgdGhlIGxvZyBtZXRob2Q6Ci0gICAqIDEuIGxvZ3MgaW5mb3MgY29ycmVjdGx5LgotICAgKiAyLiByZWNvcmRzIHRoZSBtZXNzYWdlIGNvcnJlY3RseS4KLSAgICogMy4gcmVjb3JkcyB0aGUgdGhyb3dhYmxlIGNvcnJlY3RseS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RMb2dJbmZvV2l0aFRocm93YWJsZSgpCi0gIHsKLQlBbnRMb2dnZXIgbG9nZ2VyID0gbmV3IEFudExvZ2dlcih0YXNrKTsKLQlsb2dnZXIubG9nKCJNRVNTQUdFIiwgSUxvZ2dlci5TRVZfSU5GTywgbmV3IFRocm93YWJsZSgiVEhST1dBQkxFIikpOwotCQotCWFzc2VydFRydWUoIldhcm5pbmdzIHdlcmUgcmVwb3J0ZWQgd2hlbiBvbmx5IGluZm9zIHNob3VsZCBoYXZlIGJlZW4gcmVwb3J0ZWQuIiwgdGFzay5nZXRXYXJuaW5ncygpLmlzRW1wdHkoKSk7Ci0JYXNzZXJ0VHJ1ZSgiRXJyb3JzIHdlcmUgcmVwb3J0ZWQgd2hlbiBvbmx5IGluZm9zIHNob3VsZCBoYXZlIGJlZW4gcmVwb3J0ZWQuIiwgdGFzay5nZXRFcnJvcnMoKS5pc0VtcHR5KCkpOwotCWFzc2VydFRydWUoIlZlcmJvc2VzIHdlcmUgcmVwb3J0ZWQgd2hlbiBvbmx5IGVycm9ycyBzaG91bGQgaGF2ZSBiZWVuIHJlcG9ydGVkLiIsIHRhc2suZ2V0VmVyYm9zZXMoKS5pc0VtcHR5KCkpOwotCWFzc2VydEVxdWFscygiMiBpbmZvcyB3ZXJlIG5vdCByZXBvcnRlZC4iLCAyLCB0YXNrLmdldEluZm9zKCkuc2l6ZSgpKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSBtZXNzYWdlIHdhcyBub3QgTUVTU0FHRS4iLCAiTUVTU0FHRSIsIHRhc2suZ2V0SW5mb3MoKS5nZXQoMCkpOwotCWFzc2VydEVxdWFscygiVGhlIHRocm93YWJsZSB3YXMgbm90IFRIUk9XQUJMRS4iLCAiamF2YS5sYW5nLlRocm93YWJsZTogVEhST1dBQkxFIiwgdGFzay5nZXRJbmZvcygpLmdldCgxKSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHRoYXQgdGhlIGxvZyBtZXRob2Q6Ci0gICAqIDEuIGxvZ3MgdmVyYm9zZXMgY29ycmVjdGx5LgotICAgKiAyLiByZWNvcmRzIHRoZSBtZXNzYWdlIGNvcnJlY3RseS4KLSAgICogMy4gcmVjb3JkcyB0aGUgdGhyb3dhYmxlIGNvcnJlY3RseS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RMb2dWZXJib3NlV2l0aFRocm93YWJsZSgpCi0gIHsKLQlBbnRMb2dnZXIgbG9nZ2VyID0gbmV3IEFudExvZ2dlcih0YXNrKTsKLQlsb2dnZXIubG9nKCJNRVNTQUdFIiwgSUxvZ2dlci5TRVZfVkVSQk9TRSwgbmV3IFRocm93YWJsZSgiVEhST1dBQkxFIikpOwotCQotCWFzc2VydFRydWUoIldhcm5pbmdzIHdlcmUgcmVwb3J0ZWQgd2hlbiBvbmx5IHZlcmJvc2VzIHNob3VsZCBoYXZlIGJlZW4gcmVwb3J0ZWQuIiwgdGFzay5nZXRXYXJuaW5ncygpLmlzRW1wdHkoKSk7Ci0JYXNzZXJ0VHJ1ZSgiRXJyb3JzIHdlcmUgcmVwb3J0ZWQgd2hlbiBvbmx5IHZlcmJvc2VzIHNob3VsZCBoYXZlIGJlZW4gcmVwb3J0ZWQuIiwgdGFzay5nZXRFcnJvcnMoKS5pc0VtcHR5KCkpOwotCWFzc2VydFRydWUoIkluZm9zIHdlcmUgcmVwb3J0ZWQgd2hlbiBvbmx5IHZlcmJvc2VzIHNob3VsZCBoYXZlIGJlZW4gcmVwb3J0ZWQuIiwgdGFzay5nZXRJbmZvcygpLmlzRW1wdHkoKSk7Ci0JYXNzZXJ0RXF1YWxzKCIyIHZlcmJvc2VzIHdlcmUgbm90IHJlcG9ydGVkLiIsIDIsIHRhc2suZ2V0VmVyYm9zZXMoKS5zaXplKCkpOwotCWFzc2VydEVxdWFscygiVGhlIG1lc3NhZ2Ugd2FzIG5vdCBNRVNTQUdFLiIsICJNRVNTQUdFIiwgdGFzay5nZXRWZXJib3NlcygpLmdldCgwKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgdGhyb3dhYmxlIHdhcyBub3QgVEhST1dBQkxFLiIsICJqYXZhLmxhbmcuVGhyb3dhYmxlOiBUSFJPV0FCTEUiLCB0YXNrLmdldFZlcmJvc2VzKCkuZ2V0KDEpKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgdGhhdCB0aGUgbG9nIG1ldGhvZDoKLSAgICogMS4gbG9ncyBlcnJvcnMgY29ycmVjdGx5LgotICAgKiAyLiByZWNvcmRzIHRoZSBtZXNzYWdlIGNvcnJlY3RseS4KLSAgICogMy4gcmVjb3JkcyB0aGUgdGhyb3dhYmxlIGNvcnJlY3RseS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RMb2dFcnJvcldpdGhvdXRUaHJvd2FibGUoKQotICB7Ci0JQW50TG9nZ2VyIGxvZ2dlciA9IG5ldyBBbnRMb2dnZXIodGFzayk7Ci0JbG9nZ2VyLmxvZygiTUVTU0FHRSIsIElMb2dnZXIuU0VWX0VSUk9SKTsKLQkKLQlhc3NlcnRUcnVlKCJXYXJuaW5ncyB3ZXJlIHJlcG9ydGVkIHdoZW4gb25seSBlcnJvcnMgc2hvdWxkIGhhdmUgYmVlbiByZXBvcnRlZC4iLCB0YXNrLmdldFdhcm5pbmdzKCkuaXNFbXB0eSgpKTsKLQlhc3NlcnRUcnVlKCJJbmZvcyB3ZXJlIHJlcG9ydGVkIHdoZW4gb25seSBlcnJvcnMgc2hvdWxkIGhhdmUgYmVlbiByZXBvcnRlZC4iLCB0YXNrLmdldEluZm9zKCkuaXNFbXB0eSgpKTsKLQlhc3NlcnRUcnVlKCJWZXJib3NlcyB3ZXJlIHJlcG9ydGVkIHdoZW4gb25seSBlcnJvcnMgc2hvdWxkIGhhdmUgYmVlbiByZXBvcnRlZC4iLCB0YXNrLmdldFZlcmJvc2VzKCkuaXNFbXB0eSgpKTsKLQlhc3NlcnRFcXVhbHMoIjEgZXJyb3Igd2FzIG5vdCByZXBvcnRlZC4iLCAxLCB0YXNrLmdldEVycm9ycygpLnNpemUoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbWVzc2FnZSB3YXMgbm90IE1FU1NBR0UuIiwgIk1FU1NBR0UiLCB0YXNrLmdldEVycm9ycygpLmdldCgwKSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHRoYXQgdGhlIGxvZyBtZXRob2Q6Ci0gICAqIDEuIGxvZ3Mgd2FybmluZ3MgY29ycmVjdGx5LgotICAgKiAyLiByZWNvcmRzIHRoZSBtZXNzYWdlIGNvcnJlY3RseS4KLSAgICogMy4gcmVjb3JkcyB0aGUgdGhyb3dhYmxlIGNvcnJlY3RseS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RMb2dXYXJuaW5nV2l0aG91dFRocm93YWJsZSgpCi0gIHsKLQlBbnRMb2dnZXIgbG9nZ2VyID0gbmV3IEFudExvZ2dlcih0YXNrKTsKLQlsb2dnZXIubG9nKCJNRVNTQUdFIiwgSUxvZ2dlci5TRVZfV0FSTklORyk7Ci0JCi0JYXNzZXJ0VHJ1ZSgiRXJyb3JzIHdlcmUgcmVwb3J0ZWQgd2hlbiBvbmx5IHdhcm5pbmdzIHNob3VsZCBoYXZlIGJlZW4gcmVwb3J0ZWQuIiwgdGFzay5nZXRFcnJvcnMoKS5pc0VtcHR5KCkpOwotCWFzc2VydFRydWUoIkluZm9zIHdlcmUgcmVwb3J0ZWQgd2hlbiBvbmx5IHdhcm5pbmdzIHNob3VsZCBoYXZlIGJlZW4gcmVwb3J0ZWQuIiwgdGFzay5nZXRJbmZvcygpLmlzRW1wdHkoKSk7Ci0JYXNzZXJ0VHJ1ZSgiVmVyYm9zZXMgd2VyZSByZXBvcnRlZCB3aGVuIG9ubHkgZXJyb3JzIHNob3VsZCBoYXZlIGJlZW4gcmVwb3J0ZWQuIiwgdGFzay5nZXRWZXJib3NlcygpLmlzRW1wdHkoKSk7Ci0JYXNzZXJ0RXF1YWxzKCIxIGVycm9yIHdhcyBub3QgcmVwb3J0ZWQuIiwgMSwgdGFzay5nZXRXYXJuaW5ncygpLnNpemUoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbWVzc2FnZSB3YXMgbm90IE1FU1NBR0UuIiwgIk1FU1NBR0UiLCB0YXNrLmdldFdhcm5pbmdzKCkuZ2V0KDApKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgdGhhdCB0aGUgbG9nIG1ldGhvZDoKLSAgICogMS4gbG9ncyBpbmZvcyBjb3JyZWN0bHkuCi0gICAqIDIuIHJlY29yZHMgdGhlIG1lc3NhZ2UgY29ycmVjdGx5LgotICAgKiAzLiByZWNvcmRzIHRoZSB0aHJvd2FibGUgY29ycmVjdGx5LgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdExvZ0luZm9XaXRob3V0VGhyb3dhYmxlKCkKLSAgewotCUFudExvZ2dlciBsb2dnZXIgPSBuZXcgQW50TG9nZ2VyKHRhc2spOwotCWxvZ2dlci5sb2coIk1FU1NBR0UiLCBJTG9nZ2VyLlNFVl9JTkZPKTsKLQkKLQlhc3NlcnRUcnVlKCJXYXJuaW5ncyB3ZXJlIHJlcG9ydGVkIHdoZW4gb25seSBpbmZvcyBzaG91bGQgaGF2ZSBiZWVuIHJlcG9ydGVkLiIsIHRhc2suZ2V0V2FybmluZ3MoKS5pc0VtcHR5KCkpOwotCWFzc2VydFRydWUoIkVycm9ycyB3ZXJlIHJlcG9ydGVkIHdoZW4gb25seSBpbmZvcyBzaG91bGQgaGF2ZSBiZWVuIHJlcG9ydGVkLiIsIHRhc2suZ2V0RXJyb3JzKCkuaXNFbXB0eSgpKTsKLQlhc3NlcnRUcnVlKCJWZXJib3NlcyB3ZXJlIHJlcG9ydGVkIHdoZW4gb25seSBlcnJvcnMgc2hvdWxkIGhhdmUgYmVlbiByZXBvcnRlZC4iLCB0YXNrLmdldFZlcmJvc2VzKCkuaXNFbXB0eSgpKTsKLQlhc3NlcnRFcXVhbHMoIjEgaW5mbyB3YXMgbm90IHJlcG9ydGVkLiIsIDEsIHRhc2suZ2V0SW5mb3MoKS5zaXplKCkpOwotCWFzc2VydEVxdWFscygiVGhlIG1lc3NhZ2Ugd2FzIG5vdCBNRVNTQUdFLiIsICJNRVNTQUdFIiwgdGFzay5nZXRJbmZvcygpLmdldCgwKSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHRoYXQgdGhlIGxvZyBtZXRob2Q6Ci0gICAqIDEuIGxvZ3MgdmVyYm9zZXMgY29ycmVjdGx5LgotICAgKiAyLiByZWNvcmRzIHRoZSBtZXNzYWdlIGNvcnJlY3RseS4KLSAgICogMy4gcmVjb3JkcyB0aGUgdGhyb3dhYmxlIGNvcnJlY3RseS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RMb2dWZXJib3NlV2l0aG91dFRocm93YWJsZSgpCi0gIHsKLQlBbnRMb2dnZXIgbG9nZ2VyID0gbmV3IEFudExvZ2dlcih0YXNrKTsKLQlsb2dnZXIubG9nKCJNRVNTQUdFIiwgSUxvZ2dlci5TRVZfVkVSQk9TRSk7Ci0JCi0JYXNzZXJ0VHJ1ZSgiV2FybmluZ3Mgd2VyZSByZXBvcnRlZCB3aGVuIG9ubHkgdmVyYm9zZXMgc2hvdWxkIGhhdmUgYmVlbiByZXBvcnRlZC4iLCB0YXNrLmdldFdhcm5pbmdzKCkuaXNFbXB0eSgpKTsKLQlhc3NlcnRUcnVlKCJFcnJvcnMgd2VyZSByZXBvcnRlZCB3aGVuIG9ubHkgdmVyYm9zZXMgc2hvdWxkIGhhdmUgYmVlbiByZXBvcnRlZC4iLCB0YXNrLmdldEVycm9ycygpLmlzRW1wdHkoKSk7Ci0JYXNzZXJ0VHJ1ZSgiSW5mb3Mgd2VyZSByZXBvcnRlZCB3aGVuIG9ubHkgdmVyYm9zZXMgc2hvdWxkIGhhdmUgYmVlbiByZXBvcnRlZC4iLCB0YXNrLmdldEluZm9zKCkuaXNFbXB0eSgpKTsKLQlhc3NlcnRFcXVhbHMoIjEgdmVyYm9zZSB3YXMgbm90IHJlcG9ydGVkLiIsIDEsIHRhc2suZ2V0VmVyYm9zZXMoKS5zaXplKCkpOwotCWFzc2VydEVxdWFscygiVGhlIG1lc3NhZ2Ugd2FzIG5vdCBNRVNTQUdFLiIsICJNRVNTQUdFIiwgdGFzay5nZXRWZXJib3NlcygpLmdldCgwKSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvYW50L0FudExvZ2dlclRlc3RUYXNrLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL2FudC9BbnRMb2dnZXJUZXN0VGFzay5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzIyNDdhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvYW50L0FudExvZ2dlclRlc3RUYXNrLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnVpLmFudDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFudC5Qcm9qZWN0OwotaW1wb3J0IG9yZy5hcGFjaGUudG9vbHMuYW50LlRhc2s7Ci0KLS8qKgotICogQSBkdW1teSB0YXNrIHRoYXQgd2lsbCBhbGxvdyB0ZXN0aW5nIG9mIHRoZSBhbmQgbG9nZ2VyLgotICovCi1wdWJsaWMgY2xhc3MgQW50TG9nZ2VyVGVzdFRhc2sgZXh0ZW5kcyBUYXNrIAotewotICBwcm90ZWN0ZWQgTGlzdCBlcnJvcnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIHByb3RlY3RlZCBMaXN0IHdhcm5pbmdzID0gbmV3IEFycmF5TGlzdCgpOwotICBwcm90ZWN0ZWQgTGlzdCBpbmZvcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgcHJvdGVjdGVkIExpc3QgdmVyYm9zZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmFwYWNoZS50b29scy5hbnQuVGFzayNsb2coamF2YS5sYW5nLlN0cmluZywgaW50KQotICAgKi8KLSAgcHVibGljIHZvaWQgbG9nKFN0cmluZyBtc2csIGludCBtc2dMZXZlbCkgCi0gIHsKLQlpZihtc2dMZXZlbCA9PSBQcm9qZWN0Lk1TR19FUlIpCi0JewotCSAgZXJyb3JzLmFkZChtc2cpOwotCX0KLQllbHNlIGlmKG1zZ0xldmVsID09IFByb2plY3QuTVNHX1dBUk4pCi0JewotCSAgd2FybmluZ3MuYWRkKG1zZyk7Ci0JfQotCWVsc2UgaWYobXNnTGV2ZWwgPT0gUHJvamVjdC5NU0dfSU5GTykKLQl7Ci0JICBpbmZvcy5hZGQobXNnKTsKLQl9Ci0JZWxzZSBpZihtc2dMZXZlbCA9PSBQcm9qZWN0Lk1TR19WRVJCT1NFKQotCXsKLQkgIHZlcmJvc2VzLmFkZChtc2cpOwotCX0KLSAgfQotCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuYXBhY2hlLnRvb2xzLmFudC5UYXNrI2xvZyhqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSAgcHVibGljIHZvaWQgbG9nKFN0cmluZyBtc2cpIAotICB7Ci0JbG9nKG1zZywgUHJvamVjdC5NU0dfSU5GTyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIGVycm9ycyB0aGF0IHdlcmUgbG9nZ2VkLgotICAgKiAKLSAgICogQHJldHVybgotICAgKiAJCVRoZSBlcnJvcnMgdGhhdCB3ZXJlIGxvZ2dlZC4KLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldEVycm9ycygpCi0gIHsKLQlyZXR1cm4gZXJyb3JzOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSB3YXJuaW5ncyB0aGF0IHdlcmUgbG9nZ2VkLgotICAgKiAKLSAgICogQHJldHVybgotICAgKiAJCVRoZSB3YXJuaW5ncyB0aGF0IHdlcmUgbG9nZ2VkLgotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0V2FybmluZ3MoKQotICB7Ci0JcmV0dXJuIHdhcm5pbmdzOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBpbmZvcyB0aGF0IHdlcmUgbG9nZ2VkLgotICAgKiAKLSAgICogQHJldHVybgotICAgKiAJCVRoZSBpbmZvcyB0aGF0IHdlcmUgbG9nZ2VkLgotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0SW5mb3MoKQotICB7Ci0JcmV0dXJuIGluZm9zOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSB2ZXJib3NlcyB0aGF0IHdlcmUgbG9nZ2VkLgotICAgKiAKLSAgICogQHJldHVybgotICAgKiAJCVRoZSB2ZXJib3NlcyB0aGF0IHdlcmUgbG9nZ2VkLgotICAgKi8KLSAgcHVibGljIExpc3QgZ2V0VmVyYm9zZXMoKQotICB7Ci0JcmV0dXJuIHZlcmJvc2VzOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL2FudC9XU0RMVmFsaWRhdGVUYXNrLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL2FudC9XU0RMVmFsaWRhdGVUYXNrLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxZTEzMWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS9hbnQvV1NETFZhbGlkYXRlVGFzay5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnVpLmFudDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi0vKioKLSAqIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBleHBvc2UgZnVuY3Rpb25hbGl0eSBmcm9tIHRoZSBXU0RMVmFsaWRhdGUgY2xhc3MgZm9yIHRlc3RpbmcuCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMVmFsaWRhdGVUYXNrIGV4dGVuZHMgV1NETFZhbGlkYXRlCi17Ci0KLSAgLyoqCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51aS5hbnQuV1NETFZhbGlkYXRlI2dldEZpbGVMaXN0KCkKLSAgICovCi0gIHB1YmxpYyBMaXN0IGdldEZpbGVMaXN0KCkKLSAgewotICAgIHJldHVybiBzdXBlci5nZXRGaWxlTGlzdCgpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvYW50L1dTRExWYWxpZGF0ZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvYW50L1dTRExWYWxpZGF0ZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY5Nzc2NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL2FudC9XU0RMVmFsaWRhdGVUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnVpLmFudDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFudC5Qcm9qZWN0OwotaW1wb3J0IG9yZy5hcGFjaGUudG9vbHMuYW50LnR5cGVzLkZpbGVTZXQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQudHlwZXMuc2VsZWN0b3JzLkZpbGVuYW1lU2VsZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbC5CYXNlVGVzdENhc2U7Ci0KLS8qKgotICogV1NETFZhbGlkYXRlIGFudCB0YXNrIHRlc3RzLgotICovCi1wdWJsaWMgY2xhc3MgV1NETFZhbGlkYXRlVGVzdCBleHRlbmRzIEJhc2VUZXN0Q2FzZQotewotICBwcml2YXRlIFN0cmluZyBCQVNFX0RJUjs7Ci0gIHByaXZhdGUgUHJvamVjdCBwcm9qZWN0OwotCi0gLyoqCi0gICogQ3JlYXRlIGEgdGVzdHMgc3VpdGUgZnJvbSB0aGlzIHRlc3QgY2xhc3MuCi0gICogCi0gICogQHJldHVybiBBIHRlc3Qgc3VpdGUgY29udGFpbmluZyB0aGlzIHRlc3QgY2xhc3MuCi0gICovCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShXU0RMVmFsaWRhdGVUZXN0LmNsYXNzKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIHN1cGVyLnNldFVwKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgQkFTRV9ESVIgPSBQTFVHSU5fQUJTT0xVVEVfUEFUSDsKLSAgICAgIEJBU0VfRElSID0gQkFTRV9ESVIucmVwbGFjZSgnLycsIEZpbGUuc2VwYXJhdG9yQ2hhcik7Ci0gICAgICBpZihCQVNFX0RJUi5zdGFydHNXaXRoKCJcXCIpKQotICAgICAgewotICAgICAgICBCQVNFX0RJUiA9IEJBU0VfRElSLnN1YnN0cmluZygxKTsgIAotICAgICAgfQotICAgIH0KLSAgICBjYXRjaChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAKLSAgICB9Ci0gICAgcHJvamVjdCA9IG5ldyBQcm9qZWN0KCk7Ci0gICAgcHJvamVjdC5zZXRCYXNlRGlyKG5ldyBGaWxlKEJBU0VfRElSKSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHRoYXQgYSBzaW5nbGUgZmlsZSB3aXRoIGEgcmVsYXRpdmUgbG9jYXRpb24gaXMgcmVzb2x2ZWQgcHJvcGVybHkuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UmVsYXRpdmVTaW5nbGVGaWxlTG9jYXRpb24oKQotICB7Ci0gICAgU3RyaW5nIGZpbGVMb2MgPSAiZmlsZS53c2RsIjsKLSAgICBTdHJpbmcgcmVzb2x2ZWRMb2NhdGlvbiA9ICgiZmlsZTovLy8iICsgQkFTRV9ESVIgKyBmaWxlTG9jKS5yZXBsYWNlKCdcXCcsJy8nKTsKLSAgICBXU0RMVmFsaWRhdGVUYXNrIHdzZGxWYWxpZGF0ZVRhc2sgPSBuZXcgV1NETFZhbGlkYXRlVGFzaygpOwotICAgIHdzZGxWYWxpZGF0ZVRhc2suc2V0UHJvamVjdChwcm9qZWN0KTsKLSAgICB3c2RsVmFsaWRhdGVUYXNrLnNldEZpbGUoZmlsZUxvYyk7Ci0gICAgTGlzdCBmaWxlTGlzdCA9IHdzZGxWYWxpZGF0ZVRhc2suZ2V0RmlsZUxpc3QoKTsKLSAgICBhc3NlcnRFcXVhbHMoIlRoZSBmaWxlIGxpc3QgZG9lcyBub3QgY29udGFpbiBvbmx5IG9uZSBmaWxlLiIsIDEsIGZpbGVMaXN0LnNpemUoKSk7Ci0gICAgLy8gVGhlIGZpbGUgbG9jYXRpb25zIGFyZSBjb252ZXJ0ZWQgdG8gbG93ZXIgY2FzZSB0byBhdm9pZCBkcml2ZSBsZXR0ZXIgY2FzZSBkaWZmZXJlbmNlcyBvbiB3aW5kb3dzLiBpZS4gQyB2cyBjLgotICAgIGFzc2VydEVxdWFscygiVGhlIGZpbGUgbG9jYXRpb24gJyIgKyBmaWxlTGlzdC5nZXQoMCkgKyAiJyBpcyBub3QgY29ycmVjdGx5IHJlc29sdmVkIHRvIHRoZSBiYXNlIGxvY2F0aW9uLiIsIHJlc29sdmVkTG9jYXRpb24udG9Mb3dlckNhc2UoKSwgKChTdHJpbmcpZmlsZUxpc3QuZ2V0KDApKS50b0xvd2VyQ2FzZSgpKTsKLSAgICAKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgdGhhdCBhIHNpbmdsZSBmaWxlIHdpdGggYW4gYWJzb2x1dGUgbG9jYXRpb24gaXMgcmVzb2x2ZWQgcHJvcGVybHkuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0QWJzb2x1dGVTaW5nbGVGaWxlTG9jYXRpb24oKQotICB7Ci0gICAgU3RyaW5nIGZpbGVMb2MgPSBCQVNFX0RJUiArICJmaWxlLndzZGwiOwotICAgIFN0cmluZyByZXNvbHZlZExvY2F0aW9uID0gKEZJTEVfUFJPVE9DT0wgKyBmaWxlTG9jKS5yZXBsYWNlKCdcXCcsJy8nKTsKLSAgICBXU0RMVmFsaWRhdGVUYXNrIHdzZGxWYWxpZGF0ZVRhc2sgPSBuZXcgV1NETFZhbGlkYXRlVGFzaygpOwotICAgIHdzZGxWYWxpZGF0ZVRhc2suc2V0UHJvamVjdChwcm9qZWN0KTsKLSAgICB3c2RsVmFsaWRhdGVUYXNrLnNldEZpbGUoZmlsZUxvYyk7Ci0gICAgTGlzdCBmaWxlTGlzdCA9IHdzZGxWYWxpZGF0ZVRhc2suZ2V0RmlsZUxpc3QoKTsKLSAgICBhc3NlcnRFcXVhbHMoIlRoZSBmaWxlIGxpc3QgZG9lcyBub3QgY29udGFpbiBvbmx5IG9uZSBmaWxlLiIsIDEsIGZpbGVMaXN0LnNpemUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJUaGUgZmlsZSBsb2NhdGlvbiAnIiArIGZpbGVMb2MgKyAiJyBpcyBtb2RpZmllZC4iLCByZXNvbHZlZExvY2F0aW9uLnRvTG93ZXJDYXNlKCksICgoU3RyaW5nKWZpbGVMaXN0LmdldCgwKSkudG9Mb3dlckNhc2UoKSk7Ci0gICAgCi0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHRoYXQgYSBzaW5nbGUgZmlsZSB3aXRoIGFuIGFic29sdXRlLCByZW1vdGUgbG9jYXRpb24gaXMgcmVzb2x2ZWQgcHJvcGVybHkuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0QWJzb2x1dGVTaW5nbGVGaWxlUmVtb3RlTG9jYXRpb24oKQotICB7Ci0gICAgU3RyaW5nIHJlc29sdmVkTG9jYXRpb24gPSAiaHR0cDovL3d3dy53cy1pLm9yZy9TYW1wbGVBcHBsaWNhdGlvbnMvU3VwcGx5Q2hhaW5NYW5hZ2VtZW50LzIwMDMtMDcvQ2F0YWxvZy53c2RsIjsKLSAgICBTdHJpbmcgZmlsZUxvYyA9ICJodHRwOi8vd3d3LndzLWkub3JnL1NhbXBsZUFwcGxpY2F0aW9ucy9TdXBwbHlDaGFpbk1hbmFnZW1lbnQvMjAwMy0wNy9DYXRhbG9nLndzZGwiOwotICAgIFdTRExWYWxpZGF0ZVRhc2sgd3NkbFZhbGlkYXRlVGFzayA9IG5ldyBXU0RMVmFsaWRhdGVUYXNrKCk7Ci0gICAgd3NkbFZhbGlkYXRlVGFzay5zZXRQcm9qZWN0KHByb2plY3QpOwotICAgIHdzZGxWYWxpZGF0ZVRhc2suc2V0RmlsZShmaWxlTG9jKTsKLSAgICBMaXN0IGZpbGVMaXN0ID0gd3NkbFZhbGlkYXRlVGFzay5nZXRGaWxlTGlzdCgpOwotICAgIGFzc2VydEVxdWFscygiVGhlIGZpbGUgbGlzdCBkb2VzIG5vdCBjb250YWluIG9ubHkgb25lIGZpbGUuIiwgMSwgZmlsZUxpc3Quc2l6ZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoIlRoZSBmaWxlIGxvY2F0aW9uICciICsgZmlsZUxvYyArICInIGlzIG1vZGlmaWVkLiIsIHJlc29sdmVkTG9jYXRpb24udG9Mb3dlckNhc2UoKSwgKChTdHJpbmcpZmlsZUxpc3QuZ2V0KDApKS50b0xvd2VyQ2FzZSgpKTsKLSAgICAKLSAgfQotICAKLS8qKgotICAgKiBUZXN0IHRoYXQgYSBzaW5nbGUgZmlsZSBpbiBhIGZpbGVzZXQgd2l0aCBhIHJlbGF0aXZlIGxvY2F0aW9uIGlzIHJlc29sdmVkIHByb3Blcmx5Ci0gICAqIHdoZW4gbm8gZGlyZWN0b3J5IGlzIHNwZWNpZmllZC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RSZWxhdGl2ZVNpbmdsZUZpbGVJbkZpbGVzZXROb0RpclNwZWNpZmllZCgpCi0gIHsKLSAgICBTdHJpbmcgZmlsZUxvYyA9ICJFbXB0eS53c2RsIjsKLSAgICBTdHJpbmcgYmFzZV9kaXIgPSBCQVNFX0RJUiArIFNBTVBMRVNfRElSICsgIldTREwiICsgRmlsZS5zZXBhcmF0b3IgKyAiU2VsZkNvbnRhaW5lZCI7Ci0gICAgU3RyaW5nIHJlc29sdmVkTG9jYXRpb24gPSAoImZpbGU6Ly8vIiArIGJhc2VfZGlyICsgIi8iICsgZmlsZUxvYykucmVwbGFjZSgnXFwnLCcvJyk7Ci0gICAgYmFzZV9kaXIgPSBiYXNlX2Rpci5yZXBsYWNlKCcvJywgRmlsZS5zZXBhcmF0b3JDaGFyKTsKLSAgICAKLSAgICBXU0RMVmFsaWRhdGVUYXNrIHdzZGxWYWxpZGF0ZVRhc2sgPSBuZXcgV1NETFZhbGlkYXRlVGFzaygpOwotICAgIHdzZGxWYWxpZGF0ZVRhc2suc2V0UHJvamVjdChwcm9qZWN0KTsKLSAgICAKLSAgICBGaWxlU2V0IGZpbGVzZXQgPSB3c2RsVmFsaWRhdGVUYXNrLmNyZWF0ZUZpbGVzZXQoKTsKLSAgICBmaWxlc2V0LnNldFByb2plY3QocHJvamVjdCk7Ci0gICAgZmlsZXNldC5zZXREaXIobmV3IEZpbGUoYmFzZV9kaXIpKTsKLSAgIAotICAgIEZpbGVuYW1lU2VsZWN0b3IgZmlsZW5hbWVTZWxlY3RvciA9IG5ldyBGaWxlbmFtZVNlbGVjdG9yKCk7Ci0gICAgZmlsZW5hbWVTZWxlY3Rvci5zZXROYW1lKGZpbGVMb2MpOwotICAgIGZpbGVzZXQuYWRkRmlsZW5hbWUoZmlsZW5hbWVTZWxlY3Rvcik7Ci0gICAgLy9maWxlc2V0LnNldEZpbGUobmV3IEZpbGUoZmlsZUxvYykpOwotICAgIAotICAgIExpc3QgZmlsZUxpc3QgPSB3c2RsVmFsaWRhdGVUYXNrLmdldEZpbGVMaXN0KCk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJUaGUgZmlsZSBsaXN0IGRvZXMgbm90IGNvbnRhaW4gb25seSBvbmUgZmlsZS4iLCAxLCBmaWxlTGlzdC5zaXplKCkpOwotICAgIC8vIFRoZSBmaWxlIGxvY2F0aW9ucyBhcmUgY29udmVydGVkIHRvIGxvd2VyIGNhc2UgdG8gYXZvaWQgZHJpdmUgbGV0dGVyIGNhc2UgZGlmZmVyZW5jZXMgb24gd2luZG93cy4gaWUuIEMgdnMgYy4KLSAgICBhc3NlcnRFcXVhbHMoIlRoZSBmaWxlIGxvY2F0aW9uICciICsgZmlsZUxpc3QuZ2V0KDApICsgIicgaXMgbm90IGNvcnJlY3RseSByZXNvbHZlZCB0byB0aGUgYmFzZSBsb2NhdGlvbi4iLCByZXNvbHZlZExvY2F0aW9uLnRvTG93ZXJDYXNlKCksICgoU3RyaW5nKWZpbGVMaXN0LmdldCgwKSkudG9Mb3dlckNhc2UoKSk7Ci0gICAgCi0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvdGV4dC9XU0RMVmFsaWRhdGVUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3VpL3RleHQvV1NETFZhbGlkYXRlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjQ1OGYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvdGV4dC9XU0RMVmFsaWRhdGVUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnVpLnRleHQ7Ci0KLWltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuSVZhbGlkYXRpb25SZXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5WYWxpZGF0aW9uTWVzc2FnZUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5WYWxpZGF0b3JSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuSUxvZ2dlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuTG9nZ2VyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuU3RhbmRhcmRMb2dnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbC5CYXNlVGVzdENhc2U7Ci0KLXB1YmxpYyBjbGFzcyBXU0RMVmFsaWRhdGVUZXN0IGV4dGVuZHMgQmFzZVRlc3RDYXNlCi17CQotCVdTRExWYWxpZGF0ZVdyYXBwZXIgdmFsaWRhdGUgPSBudWxsOwotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIAotCXsKLQkJc3VwZXIuc2V0VXAoKTsKLQkJdmFsaWRhdGUgPSBuZXcgV1NETFZhbGlkYXRlV3JhcHBlcigpOwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIAotCXsKLQkJdmFsaWRhdGUgPSBudWxsOwotCQlzdXBlci50ZWFyRG93bigpOwotCX0KLQkKLQkvKioKLQkgKiBUZXN0IHRoZSB2YWxpZGF0ZUZpbGUgbWV0aG9kLgotCSAqIDEuIEEgdmFsaWQgZmlsZSBzaG91bGQgcmVwb3J0IGJhY2sgdGhhdCBpdCdzIHZhbGlkLgotCSAqIDIuIEFuIGludmFsaWQgZmlsZSBzaG91bGQgcmVwb3J0IGJhY2sgdGhhdCBpdCdzIGludmFsaWQuCi0JICogMy4gQSBmaWxlIHRoYXQgY2FuJ3QgYmUgZm91bmQgc2hvdWxkIHN1Y2NlZWQgYW5kIHJlcG9ydCB0aGF0IGl0J3MgaW52YWxpZC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0VmFsaWRhdGVGaWxlKCkKLQl7Ci0JCVN0cmluZyB2YWxpZEZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArICJQYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhWYWxpZC53c2RsIjsKLQkJaWYoUExVR0lOX0FCU09MVVRFX1BBVEguc3RhcnRzV2l0aCgiLyIpKQotCQl7Ci0JCQl2YWxpZEZpbGUgPSAiZmlsZTovLyIgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgIlBhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aFZhbGlkLndzZGwiOwotCQl9Ci0JCVN0cmluZyBpbnZhbGlkRmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgIlBhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aEludmFsaWQud3NkbCI7Ci0JCWlmKFBMVUdJTl9BQlNPTFVURV9QQVRILnN0YXJ0c1dpdGgoIi8iKSkKLQkJewotCQkJaW52YWxpZEZpbGUgPSAiZmlsZTovLyIgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgIlBhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aEludmFsaWQud3NkbCI7Ci0JCX0KLQkJU3RyaW5nIG5vbmV4aXN0YW50RmlsZSA9ICJub25leGlzdGFudGZpbGUud3NkbCI7Ci0JCS8vIDEuIEEgdmFsaWQgZmlsZSBzaG91bGQgcmVwb3J0IGJhY2sgdGhhdCBpdCdzIHZhbGlkLgotCQlJVmFsaWRhdGlvblJlcG9ydCByZXBvcnQgPSB2YWxpZGF0ZS52YWxpZGF0ZUZpbGUodmFsaWRGaWxlKTsKLQkJYXNzZXJ0RmFsc2UoIkVycm9ycyB3ZXJlIHJlcG9ydGVkIGZvciBhIHZhbGlkIGZpbGUuIiwgcmVwb3J0Lmhhc0Vycm9ycygpKTsKLQkJCi0JCS8vIDIuIEFuIGludmFsaWQgZmlsZSBzaG91bGQgcmVwb3J0IGJhY2sgdGhhdCBpdCdzIGludmFsaWQuCi0JCUlWYWxpZGF0aW9uUmVwb3J0IHJlcG9ydDIgPSB2YWxpZGF0ZS52YWxpZGF0ZUZpbGUoaW52YWxpZEZpbGUpOwotCQlhc3NlcnRUcnVlKCJFcnJvcnMgd2VyZSBub3QgcmVwb3J0ZWQgZm9yIGFuIGludmFsaWQgZmlsZS4iLCByZXBvcnQyLmhhc0Vycm9ycygpKTsKLQkJCi0JCS8vIDMuIEEgZmlsZSB0aGF0IGNhbid0IGJlIGZvdW5kIHNob3VsZCBzdWNjZWVkIGFuZCByZXBvcnQgdGhhdCBpdCdzIGludmFsaWQuCi0JCUlWYWxpZGF0aW9uUmVwb3J0IHJlcG9ydDMgPSB2YWxpZGF0ZS52YWxpZGF0ZUZpbGUobm9uZXhpc3RhbnRGaWxlKTsKLQkJYXNzZXJ0VHJ1ZSgiRXJyb3JzIHdlcmUgbm90IHJlcG9ydGVkIGZvciBhIG5vbmV4aXN0YW50IGZpbGUuIiwgcmVwb3J0My5oYXNFcnJvcnMoKSk7Ci0JfQotCQotCS8qKgotCSAqIFRlc3QgdGhlIHZhbGlkYXRlIG1ldGhvZC4KLQkgKiAxLiBUaGUgbWV0aG9kIHNob3VsZCBzdWNjZWVkIHdpdGggb25lIGZpbGUgc3BlY2lmaWVkLgotCSAqIDIuIFRoZSBtZXRob2Qgc2hvdWxkIHN1Y2NlZWQgYW5kIHZhbGlkYXRlIDIgZmlsZXMgd2hlbiAyIGFyZSBzcGVjaWZpZWQuCi0JICogMy4gVGhlIG1ldGhvZCBzaG91bGQgb3V0cHV0IHZlcmJvc2UgaW5mb3JtYXRpb24gZm9yIHZhbGlkIGZpbGVzIHdoZW4gdmVyYm9zZSBpcyBlbmFibGVkLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RWYWxpZGF0ZSgpCi0JewotCQlTdHJpbmcgdmFsaWRGaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyAiUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoVmFsaWQud3NkbCI7Ci0JCWlmKFBMVUdJTl9BQlNPTFVURV9QQVRILnN0YXJ0c1dpdGgoIi8iKSkKLQkJewotCQkJdmFsaWRGaWxlID0gImZpbGU6Ly8iICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArICJQYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhWYWxpZC53c2RsIjsKLQkJfQotCQlTdHJpbmcgdmFsaWRGaWxlMiA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgIlBhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lVmFsaWQud3NkbCI7Ci0JCWlmKFBMVUdJTl9BQlNPTFVURV9QQVRILnN0YXJ0c1dpdGgoIi8iKSkKLQkJewotCQkJdmFsaWRGaWxlMiA9ICJmaWxlOi8vIiArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyAiUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC53c2RsIjsKLQkJfQotCQlJTG9nZ2VyIGN1cnJlbnRMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldEluc3RhbmNlKCkuZ2V0TG9nZ2VyKCk7Ci0JCVdTRExWYWxpZGF0ZVRlc3RMb2dnZXIgbG9nZ2VyID0gbmV3IFdTRExWYWxpZGF0ZVRlc3RMb2dnZXIoKTsKLQkJTG9nZ2VyRmFjdG9yeS5nZXRJbnN0YW5jZSgpLnNldExvZ2dlcihsb2dnZXIpOwotCSAgCi0JCS8vIDEuIFRoZSBtZXRob2Qgc2hvdWxkIHN1Y2NlZWQgd2l0aCBvbmUgZmlsZSBzcGVjaWZpZWQuCi0JCXZhbGlkYXRlLmdldFdTRExGaWxlcygpLmFkZCh2YWxpZEZpbGUpOwotCQl2YWxpZGF0ZS52YWxpZGF0ZSgpOwotCQlhc3NlcnRFcXVhbHMoIlZhbGlkYXRpbmcgYSBzaW5nbGUgdmFsaWQgZmlsZSBmYWlsZWQuIiwgTWVzc2FnZUZvcm1hdC5mb3JtYXQoV1NETFZhbGlkYXRlVGV4dFVJTWVzc2FnZXMuX1VJX1ZBTElEQVRJT05fU1VNTUFSWSwgbmV3IE9iamVjdFtde25ldyBJbnRlZ2VyKDEpLCBuZXcgSW50ZWdlcigwKX0pLCBsb2dnZXIuZ2V0SW5mb3MoKS5nZXQoMCkpOwotCQl2YWxpZGF0ZS5nZXRXU0RMRmlsZXMoKS5jbGVhcigpOwotCQlsb2dnZXIuZ2V0SW5mb3MoKS5jbGVhcigpOwotCSAgCi0JICAJLy8gMi4gVGhlIG1ldGhvZCBzaG91bGQgc3VjY2VlZCBhbmQgdmFsaWRhdGUgMiBmaWxlcyB3aGVuIDIgYXJlIHNwZWNpZmllZC4KLQkgIAl2YWxpZGF0ZS5nZXRXU0RMRmlsZXMoKS5hZGQodmFsaWRGaWxlKTsKLQkgIAl2YWxpZGF0ZS5nZXRXU0RMRmlsZXMoKS5hZGQodmFsaWRGaWxlMik7Ci0JICAJdmFsaWRhdGUudmFsaWRhdGUoKTsKLQkgIAlhc3NlcnRFcXVhbHMoIlZhbGlkYXRpbmcgdHdvIHZhbGlkIGZpbGVzIGZhaWxlZC4iLCBNZXNzYWdlRm9ybWF0LmZvcm1hdChXU0RMVmFsaWRhdGVUZXh0VUlNZXNzYWdlcy5fVUlfVkFMSURBVElPTl9TVU1NQVJZLCBuZXcgT2JqZWN0W117bmV3IEludGVnZXIoMiksIG5ldyBJbnRlZ2VyKDApfSksIGxvZ2dlci5nZXRJbmZvcygpLmdldCgwKSk7Ci0JICAJdmFsaWRhdGUuZ2V0V1NETEZpbGVzKCkuY2xlYXIoKTsKLQkgIAlsb2dnZXIuZ2V0SW5mb3MoKS5jbGVhcigpOwotCSAgCi0JICAJLy8gMy4gVGhlIG1ldGhvZCBzaG91bGQgb3V0cHV0IHZlcmJvc2UgaW5mb3JtYXRpb24gZm9yIHZhbGlkIGZpbGVzIHdoZW4gdmVyYm9zZSBpcyBlbmFibGVkLgotCSAgCXZhbGlkYXRlLnNldFZlcmJvc2UodHJ1ZSk7Ci0JICAJdmFsaWRhdGUuZ2V0V1NETEZpbGVzKCkuYWRkKHZhbGlkRmlsZSk7Ci0JICAJdmFsaWRhdGUudmFsaWRhdGUoKTsKLQkgIAlhc3NlcnRFcXVhbHMoIlZhbGlkYXRpbmcgYSBzaW5nbGUgdmFsaWQgZmlsZSBmYWlsZWQuIiwgTWVzc2FnZUZvcm1hdC5mb3JtYXQoV1NETFZhbGlkYXRlVGV4dFVJTWVzc2FnZXMuX1VJX0ZJTEVfVkFMSUQsIG5ldyBPYmplY3RbXXt2YWxpZEZpbGV9KSwgbG9nZ2VyLmdldFZlcmJvc2VzKCkuZ2V0KDApKTsKLQkgIAlhc3NlcnRFcXVhbHMoIlZhbGlkYXRpbmcgYSBzaW5nbGUgdmFsaWQgZmlsZSBmYWlsZWQuIiwgTWVzc2FnZUZvcm1hdC5mb3JtYXQoV1NETFZhbGlkYXRlVGV4dFVJTWVzc2FnZXMuX1VJX1ZBTElEQVRJT05fU1VNTUFSWSwgbmV3IE9iamVjdFtde25ldyBJbnRlZ2VyKDEpLCBuZXcgSW50ZWdlcigwKX0pLCBsb2dnZXIuZ2V0SW5mb3MoKS5nZXQoMCkpOwotCSAgCXZhbGlkYXRlLmdldFdTRExGaWxlcygpLmNsZWFyKCk7Ci0JICAJdmFsaWRhdGUuc2V0VmVyYm9zZShmYWxzZSk7Ci0JICAJbG9nZ2VyLmdldEluZm9zKCkuY2xlYXIoKTsKLQkgIAlsb2dnZXIuZ2V0VmVyYm9zZXMoKS5jbGVhcigpOwotCSAgCi0JICAJTG9nZ2VyRmFjdG9yeS5nZXRJbnN0YW5jZSgpLnNldExvZ2dlcihjdXJyZW50TG9nZ2VyKTsKLQl9Ci0JCi0JLyoqCi0JICogVGVzdCB0aGUgZ2V0TWVzc2FnZXMgbWV0aG9kLgotCSAqIDEuIFRoZSBtZXRob2Qgc2hvdWxkIHJldHVybiBhIHByb3Blcmx5IGZvcm1hdHRlZCBzdHJpbmcgZm9yIGEgc2luZ2xlIGVycm9yLgotCSAqIDIuIFRoZSBtZXRob2Qgc2hvdWxkIHJldHVybiBhIHByb3Blcmx5IGZvcm1hdHRlZCBzdHJpbmcgZm9yIGEgc2luZ2xlIHdhcm5pbmcuCi0JICogMy4gVGhlIG1ldGhvZCBzaG91bGQgcmV0dXJuIGEgcHJvcGVybHkgZm9tYXR0ZWQgc3RyaW5nIGZvciAyIG1lc3NhZ2VzLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RHZXRNZXNzYWdlcygpCi0JewkKLQkJSVZhbGlkYXRpb25NZXNzYWdlIGVycm9yTWVzc2FnZSA9IG5ldyBWYWxpZGF0aW9uTWVzc2FnZUltcGwoIk1FU1NBR0UiLCAxLCAyLCBJVmFsaWRhdGlvbk1lc3NhZ2UuU0VWX0VSUk9SLCAiVVJJIik7Ci0JCUlWYWxpZGF0aW9uTWVzc2FnZSB3YXJuaW5nTWVzc2FnZSA9IG5ldyBWYWxpZGF0aW9uTWVzc2FnZUltcGwoIk1FU1NBR0UiLCAxLCAyLCBJVmFsaWRhdGlvbk1lc3NhZ2UuU0VWX1dBUk5JTkcsICJVUkkiKTsKLQkJLy8gMS4gVGhlIG1ldGhvZCBzaG91bGQgcmV0dXJuIGEgcHJvcGVybHkgZm9ybWF0dGVkIHN0cmluZyBmb3IgYSBzaW5nbGUgZXJyb3IuCi0JCUlWYWxpZGF0aW9uTWVzc2FnZVtdIGVycm9yTWVzc2FnZXMgPSBuZXcgSVZhbGlkYXRpb25NZXNzYWdlW117ZXJyb3JNZXNzYWdlfTsKLQkJU3RyaW5nIG1lc3NhZ2UgPSB2YWxpZGF0ZS5nZXRNZXNzYWdlcyhlcnJvck1lc3NhZ2VzKTsKLQkJYXNzZXJ0RXF1YWxzKCJUaGUgZXJyb3IgbWVzc2FnZSB3YXMgbm90IGNvcnJlY3QuIiwgV1NETFZhbGlkYXRlVGV4dFVJTWVzc2FnZXMuX1VJX0VSUk9SX01BUktFUiArICIgMToyIE1FU1NBR0UiLCBtZXNzYWdlKTsKLQkJCi0JCS8vIDIuIFRoZSBtZXRob2Qgc2hvdWxkIHJldHVybiBhIHByb3Blcmx5IGZvcm1hdHRlZCBzdHJpbmcgZm9yIGEgc2luZ2xlIHdhcm5pbmcuCi0JCUlWYWxpZGF0aW9uTWVzc2FnZVtdIHdhcm5pbmdNZXNzYWdlcyA9IG5ldyBJVmFsaWRhdGlvbk1lc3NhZ2VbXXt3YXJuaW5nTWVzc2FnZX07Ci0JCVN0cmluZyBtZXNzYWdlMiA9IHZhbGlkYXRlLmdldE1lc3NhZ2VzKHdhcm5pbmdNZXNzYWdlcyk7Ci0JCWFzc2VydEVxdWFscygiVGhlIHdhcm5pbmcgbWVzc2FnZSB3YXMgbm90IGNvcnJlY3QuIiwgV1NETFZhbGlkYXRlVGV4dFVJTWVzc2FnZXMuX1VJX1dBUk5JTkdfTUFSS0VSICsgIiAxOjIgTUVTU0FHRSIsIG1lc3NhZ2UyKTsKLQkJCi0JCS8vIDMuIFRoZSBtZXRob2Qgc2hvdWxkIHJldHVybiBhIHByb3Blcmx5IGZvbWF0dGVkIHN0cmluZyBmb3IgMiBtZXNzYWdlcy4KLQkJSVZhbGlkYXRpb25NZXNzYWdlW10gdHdvTWVzc2FnZXMgPSBuZXcgSVZhbGlkYXRpb25NZXNzYWdlW117ZXJyb3JNZXNzYWdlLCB3YXJuaW5nTWVzc2FnZX07Ci0JCVN0cmluZyBtZXNzYWdlMyA9IHZhbGlkYXRlLmdldE1lc3NhZ2VzKHR3b01lc3NhZ2VzKTsKLQkJYXNzZXJ0RXF1YWxzKCJUd28gbWVzc2FnZXMgd2FzIG5vdCBjb3JyZWN0LiIsIFdTRExWYWxpZGF0ZVRleHRVSU1lc3NhZ2VzLl9VSV9FUlJPUl9NQVJLRVIgKyAiIDE6MiBNRVNTQUdFXG4iICsgV1NETFZhbGlkYXRlVGV4dFVJTWVzc2FnZXMuX1VJX1dBUk5JTkdfTUFSS0VSICsgIiAxOjIgTUVTU0FHRSIsIG1lc3NhZ2UzKTsKLQl9Ci0JCi0JLyoqCi0JICogVGVzdCB0aGUgcGFyc2VBcmd1bWVudHMgbWV0aG9kLgotCSAqIDEuIC13c2RsMTF2IHBhcnNpbmcgc3VjY2VlZHMgYW5kIHJlZ2lzdGVycyB0aGUgdmFsaWRhdG9yIHdpdGggdGhlIFdTREwgdmFsaWRhdG9yLgotCSAqIDIuIC1leHR2IHBhcnNpbmcgc3VjY2VlZHMgYW5kIHJlZ2lzdGVycyB0aGUgdmFsaWRhdG9yIHdpdGggdGhlIFdTREwgdmFsaWRhdG9yLgotCSAqIDMuIEV4dGVuc2lvbiB2YWxpZGF0b3IgcGFyc2luZyB3aGVyZSBhIHBhcmFtIGlzIG9taXR0ZWQgc3VjY2VlZHMuCi0JICogNC4gLWxvZ2dlciBwYXJzaW5nIHN1Y2NlZWRzIGFuZCBzZXRzIHRoZSBjb3JyZWN0IGxvZ2dlci4KLQkgKiA1LiAtRCAocHJvcGVydHkpIHBhcnNpbmcgc3VjY2VlZHMgc2V0cyB0aGUgcHJvcGVydHkgb24gdGhlIGNvbmZpZ3VyYXRpb24uCi0JICogNi4gLXYsIC12ZXJib3NlIHBhcnNpbmcgc3VjY2VlZHMgYW5kIHNldHMgdmVyYm9zZSBjb3JyZWN0bHkuCi0JICogNy4gVGhlIHNwZWNpZmllZCBXU0RMIGZpbGVzIGFyZSByZWFkIHByb3Blcmx5LgotCSAqIAotCSAqIE5vdCBjdXJyZW50bHkgdGVzdGVkOgotCSAqIAkJLXNjaGVtYQotCSAqIAkJLXNjaGVtYURpcgotCSAqIAkJLXVyaXJlc29sdmVyCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFBhcnNlQXJndW1lbnRzKCkKLQl7Ci0JCS8vIDEuIC13c2RsMTF2IHBhcnNpbmcgc3VjY2VlZHMgYW5kIHJlZ2lzdGVycyB0aGUgdmFsaWRhdG9yIHdpdGggdGhlIFdTREwgdmFsaWRhdG9yLgotCQlTdHJpbmdbXSBhcmdzMSA9IG5ldyBTdHJpbmdbXXtXU0RMVmFsaWRhdGVXcmFwcGVyLlBBUkFNX1dTREwxMVZBTCwgImh0dHA6Ly93c2RsMTF2YWxpZGF0b3IiLCAib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuaHR0cC5IVFRQVmFsaWRhdG9yIn07Ci0JCXZhbGlkYXRlLnBhcnNlQXJndW1lbnRzKGFyZ3MxKTsKLQkJYXNzZXJ0VHJ1ZSgiVGhlIFdTREwgMS4xIHZhbGlkYXRvciB3YXMgbm90IHJlZ2lzdGVyZWQuIiwgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEuVmFsaWRhdG9yUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKS5oYXNSZWdpc3RlcmVkVmFsaWRhdG9yKCJodHRwOi8vd3NkbDExdmFsaWRhdG9yIikpOwotCQkKLQkJLy8gMi4gLWV4dHYgcGFyc2luZyBzdWNjZWVkcyBhbmQgcmVnaXN0ZXJzIHRoZSB2YWxpZGF0b3Igd2l0aCB0aGUgV1NETCB2YWxpZGF0b3IuCi0JCVN0cmluZ1tdIGFyZ3MyID0gbmV3IFN0cmluZ1tde1dTRExWYWxpZGF0ZVdyYXBwZXIuUEFSQU1fRVhUVkFMLCAiaHR0cDovL2V4dHZhbGlkYXRvciIsICJ2YWxpZGF0b3JjbGFzcyJ9OwotCQl2YWxpZGF0ZS5wYXJzZUFyZ3VtZW50cyhhcmdzMik7Ci0JCWFzc2VydFRydWUoIlRoZSBXU0RMIGV4dGVuc2lvbiB2YWxpZGF0b3Igd2FzIG5vdCByZWdpc3RlcmVkLiIsIFZhbGlkYXRvclJlZ2lzdHJ5LmdldEluc3RhbmNlKCkuaGFzUmVnaXN0ZXJlZFZhbGlkYXRvcigiaHR0cDovL2V4dHZhbGlkYXRvciIsIFZhbGlkYXRvclJlZ2lzdHJ5LkVYVF9WQUxJREFUT1IpKTsKLQkJCi0JCS8vIDMuIEV4dGVuc2lvbiB2YWxpZGF0b3IgcGFyc2luZyB3aGVyZSBhIHBhcmFtIGlzIG9taXR0ZWQgc3VjY2VlZHMuCi0JCVN0cmluZ1tdIGFyZ3MzID0gbmV3IFN0cmluZ1tde1dTRExWYWxpZGF0ZVdyYXBwZXIuUEFSQU1fRVhUVkFMLCAiaHR0cDovL2V4dHZhbGlkYXRvcjIiLCAiLWR1bW15cGFyYW0ifTsKLQkJdmFsaWRhdGUucGFyc2VBcmd1bWVudHMoYXJnczMpOwotCQlhc3NlcnRGYWxzZSgiVGhlIFdTREwgZXh0ZW5zaW9uIHZhbGlkYXRvciB3YXMgcmVnaXN0ZXJlZCB3aXRob3V0IGVub3VnaCBpbmZvcm1hdGlvbi4iLCBWYWxpZGF0b3JSZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmhhc1JlZ2lzdGVyZWRWYWxpZGF0b3IoImh0dHA6Ly9leHR2YWxpZGF0b3IyIiwgVmFsaWRhdG9yUmVnaXN0cnkuRVhUX1ZBTElEQVRPUikpOwotCQkKLQkJLy8gNC4gLWxvZ2dlciBwYXJzaW5nIHN1Y2NlZWRzIGFuZCBzZXRzIHRoZSBjb3JyZWN0IGxvZ2dlci4KLQkJSUxvZ2dlciBjdXJyZW50TG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRJbnN0YW5jZSgpLmdldExvZ2dlcigpOwotCQlTdHJpbmdbXSBhcmdzNCA9IG5ldyBTdHJpbmdbXXtXU0RMVmFsaWRhdGVXcmFwcGVyLlBBUkFNX0xPR0dFUiwgIm9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwubG9nZ2luZy5TdGFuZGFyZExvZ2dlciJ9OwotCQl2YWxpZGF0ZS5wYXJzZUFyZ3VtZW50cyhhcmdzNCk7Ci0JCWFzc2VydFRydWUoIlRoZSByZWdpc3RlcmVkIGxvZ2dlciBpcyBub3QgYSBTdGFuZGFyZExvZ2dlciIsIExvZ2dlckZhY3RvcnkuZ2V0SW5zdGFuY2UoKS5nZXRMb2dnZXIoKSBpbnN0YW5jZW9mIFN0YW5kYXJkTG9nZ2VyKTsKLQkJYXNzZXJ0RmFsc2UoIlRoZSByZWdpc3RlcmVkIGxvZ2dlciBpcyB0aGUgc2FtZSBhcyBvcmlnaW5hbGx5IHJlZ2lzdGVyZWQuIiwgY3VycmVudExvZ2dlci5lcXVhbHMoTG9nZ2VyRmFjdG9yeS5nZXRJbnN0YW5jZSgpLmdldExvZ2dlcigpKSk7Ci0JCUxvZ2dlckZhY3RvcnkuZ2V0SW5zdGFuY2UoKS5zZXRMb2dnZXIoY3VycmVudExvZ2dlcik7Ci0JCQotCQkvLyA1LiAtRCAocHJvcGVydHkpIHBhcnNpbmcgc3VjY2VlZHMgc2V0cyB0aGUgcHJvcGVydHkgb24gdGhlIGNvbmZpZ3VyYXRpb24uCi0JCVN0cmluZ1tdIGFyZ3M1ID0gbmV3IFN0cmluZ1tde1dTRExWYWxpZGF0ZVdyYXBwZXIuUEFSQU1fUFJPUEVSVFkgKyAiU0FNUExFTkFNRT1TQU1QTEVWQUxVRSJ9OwotCQl2YWxpZGF0ZS5wYXJzZUFyZ3VtZW50cyhhcmdzNSk7Ci0JCWFzc2VydEVxdWFscygiVGhlIHBhcmFtZXRlciB3YXMgbm90IHNldCBjb3JyZWN0bHkuIiwgIlNBTVBMRVZBTFVFIiwgdmFsaWRhdGUuZ2V0Q29uZmlndXJhdGlvbigpLmdldFByb3BlcnR5KCJTQU1QTEVOQU1FIikpOwotCQkKLQkJLy8gNi4gLXYsIC12ZXJib3NlIHBhcnNpbmcgc3VjY2VlZHMgYW5kIHNldHMgdmVyYm9zZSBjb3JyZWN0bHkuCi0JCVN0cmluZ1tdIGFyZ3M2ID0gbmV3IFN0cmluZ1tde1dTRExWYWxpZGF0ZVdyYXBwZXIuUEFSQU1fVkVSQk9TRX07Ci0JCXZhbGlkYXRlLnNldFZlcmJvc2UoZmFsc2UpOwotCQl2YWxpZGF0ZS5wYXJzZUFyZ3VtZW50cyhhcmdzNik7Ci0JCWFzc2VydFRydWUoIlZlcmJvc2UgaXMgbm90IHNldCB0byB0cnVlLiIsIHZhbGlkYXRlLmlzVmVyYm9zZSgpKTsKLQkJCi0JCVN0cmluZ1tdIGFyZ3M2YSA9IG5ldyBTdHJpbmdbXXtXU0RMVmFsaWRhdGVXcmFwcGVyLlBBUkFNX1ZFUkJPU0VfU0hPUlR9OwotCQl2YWxpZGF0ZS5zZXRWZXJib3NlKGZhbHNlKTsKLQkJdmFsaWRhdGUucGFyc2VBcmd1bWVudHMoYXJnczZhKTsKLQkJYXNzZXJ0VHJ1ZSgiVmVyYm9zZSBpcyBub3Qgc2V0IHRvIHRydWUuIiwgdmFsaWRhdGUuaXNWZXJib3NlKCkpOwotCQkKLQkJLy8gNy4gVGhlIHNwZWNpZmllZCBXU0RMIGZpbGVzIGFyZSByZWFkIHByb3Blcmx5LgotCQlTdHJpbmdbXSBhcmdzNyA9IG5ldyBTdHJpbmdbXXsiZmlsZW5hbWUxLndzZGwiLCAiZm9sZGVyL2ZpbGVuYW1lMi53c2RsIiwgImZvbGRlclxmaWxlbmFtZTMud3NkbCJ9OwotCQl2YWxpZGF0ZS5wYXJzZUFyZ3VtZW50cyhhcmdzNyk7Ci0JCUxpc3Qgd3NkbEZpbGVzID0gdmFsaWRhdGUuZ2V0V1NETEZpbGVzKCk7Ci0JCWFzc2VydEVxdWFscygiVGhlcmUgd2VyZSBub3QgMyBXU0RMIGZpbGVzIGxpc3RlZCB0byB2YWxpZGF0ZS4iLCAzLCB3c2RsRmlsZXMuc2l6ZSgpKTsKLQkJYXNzZXJ0VHJ1ZSgiVGhlIFdTREwgZmlsZSBsaXN0IGRpZCBub3QgaW5jbHVkZSBmaWxlbmFtZTEud3NkbCIsIHdzZGxGaWxlcy5jb250YWlucygiZmlsZW5hbWUxLndzZGwiKSk7Ci0JCWFzc2VydFRydWUoIlRoZSBXU0RMIGZpbGUgbGlzdCBkaWQgbm90IGluY2x1ZGUgZm9sZGVyL2ZpbGVuYW1lMi53c2RsIiwgd3NkbEZpbGVzLmNvbnRhaW5zKCJmb2xkZXIvZmlsZW5hbWUyLndzZGwiKSk7Ci0JCWFzc2VydFRydWUoIlRoZSBXU0RMIGZpbGUgbGlzdCBkaWQgbm90IGluY2x1ZGUgZm9sZGVyXGZpbGVuYW1lMy53c2RsIiwgd3NkbEZpbGVzLmNvbnRhaW5zKCJmb2xkZXJcZmlsZW5hbWUzLndzZGwiKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS90ZXh0L1dTRExWYWxpZGF0ZVRlc3RMb2dnZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvdGV4dC9XU0RMVmFsaWRhdGVUZXN0TG9nZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzNTJhNGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS90ZXh0L1dTRExWYWxpZGF0ZVRlc3RMb2dnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudWkudGV4dDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuSUxvZ2dlcjsKLQotLyoqCi0gKiBBIGhlbHBlciBjbGFzcyBmb3IgdGVzdGluZyB0aGF0IGFsbG93cyBhY2Nlc3MgdG8gdGhlIG1lc3NhZ2VzIGxvZ2dlZC4KLSAqLwotcHVibGljIGNsYXNzIFdTRExWYWxpZGF0ZVRlc3RMb2dnZXIgaW1wbGVtZW50cyBJTG9nZ2VyIHsKLQotCXByb3RlY3RlZCBMaXN0IGVycm9ycyA9IG5ldyBBcnJheUxpc3QoKTsKLQlwcm90ZWN0ZWQgTGlzdCB3YXJuaW5ncyA9IG5ldyBBcnJheUxpc3QoKTsKLQlwcm90ZWN0ZWQgTGlzdCBpbmZvcyA9IG5ldyBBcnJheUxpc3QoKTsKLQlwcm90ZWN0ZWQgTGlzdCB2ZXJib3NlcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkKLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmxvZ2dpbmcuSUxvZ2dlciNsb2coamF2YS5sYW5nLlN0cmluZywgaW50KQotCSAqLwotCXB1YmxpYyB2b2lkIGxvZyhTdHJpbmcgbWVzc2FnZSwgaW50IHNldmVyaXR5KSAKLQl7Ci0JCWlmKHNldmVyaXR5ID09IElMb2dnZXIuU0VWX0VSUk9SKQotCQl7Ci0JCQllcnJvcnMuYWRkKG1lc3NhZ2UpOwotCQl9Ci0JCWVsc2UgaWYoc2V2ZXJpdHkgPT0gSUxvZ2dlci5TRVZfV0FSTklORykKLQkJewotCQkJd2FybmluZ3MuYWRkKG1lc3NhZ2UpOwotCQl9Ci0JCWVsc2UgaWYoc2V2ZXJpdHkgPT0gSUxvZ2dlci5TRVZfSU5GTykKLQkJewotCQkJaW5mb3MuYWRkKG1lc3NhZ2UpOwotCQl9Ci0JCWVsc2UgaWYoc2V2ZXJpdHkgPT0gSUxvZ2dlci5TRVZfVkVSQk9TRSkKLQkJewotCQkJdmVyYm9zZXMuYWRkKG1lc3NhZ2UpOwotCQl9Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5sb2dnaW5nLklMb2dnZXIjbG9nKGphdmEubGFuZy5TdHJpbmcsIGludCwgamF2YS5sYW5nLlRocm93YWJsZSkKLQkgKi8KLQlwdWJsaWMgdm9pZCBsb2coU3RyaW5nIG1lc3NhZ2UsIGludCBzZXZlcml0eSwgVGhyb3dhYmxlIHRocm93YWJsZSkgCi0JewotCQlsb2cobWVzc2FnZSwgc2V2ZXJpdHkpOwotCQlsb2codGhyb3dhYmxlLnRvU3RyaW5nKCksIHNldmVyaXR5KTsKLQl9Ci0JCi0JLyoqCi0JICogR2V0IHRoZSBlcnJvciBsaXN0LgotCSAqIAotCSAqIEByZXR1cm4KLQkgKiAJCVRoZSBlcnJvciBsaXN0LgotCSAqLwotCXB1YmxpYyBMaXN0IGdldEVycm9ycygpCi0JewotCQlyZXR1cm4gZXJyb3JzOwotCX0KLQkKLQkvKioKLQkgKiBHZXQgdGhlIHdhcm5pbmcgbGlzdC4KLQkgKiAKLQkgKiBAcmV0dXJuCi0JICogCQlUaGUgd2FybmluZyBsaXN0LgotCSAqLwotCXB1YmxpYyBMaXN0IGdldFdhcm5pbmdzKCkKLQl7Ci0JCXJldHVybiB3YXJuaW5nczsKLQl9Ci0JCi0JLyoqCi0JICogR2V0IHRoZSBpbmZvIGxpc3QuCi0JICogCi0JICogQHJldHVybgotCSAqIAkJVGhlIGluZm8gbGlzdC4KLQkgKi8KLQlwdWJsaWMgTGlzdCBnZXRJbmZvcygpCi0JewotCQlyZXR1cm4gaW5mb3M7Ci0JfQotCi0JLyoqCi0JICogR2V0IHRoZSB2ZXJib3NlIGxpc3QuCi0JICogCi0JICogQHJldHVybgotCSAqIAkJVGhlIHZlcmJvc2UgbGlzdC4KLQkgKi8KLQlwdWJsaWMgTGlzdCBnZXRWZXJib3NlcygpCi0JewotCQlyZXR1cm4gdmVyYm9zZXM7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS90ZXh0L1dTRExWYWxpZGF0ZVdyYXBwZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvdWkvdGV4dC9XU0RMVmFsaWRhdGVXcmFwcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwNDA3YmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC91aS90ZXh0L1dTRExWYWxpZGF0ZVdyYXBwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudWkudGV4dDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5JVmFsaWRhdGlvbk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5JVmFsaWRhdGlvblJlcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLldTRExWYWxpZGF0aW9uQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLldTRExWYWxpZGF0b3I7Ci0KLS8qKgotICogQSB3cmFwcGVyIGNsYXNzIG9mIFdTRExWYWxpZGF0ZSB0aGF0IGV4cG9zZXMgaW50ZXJuYWxzIGZvciB0ZXN0aW5nLgotICovCi1wdWJsaWMgY2xhc3MgV1NETFZhbGlkYXRlV3JhcHBlciBleHRlbmRzIFdTRExWYWxpZGF0ZSAKLXsKLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudWkudGV4dC5XU0RMVmFsaWRhdGUjZ2V0TWVzc2FnZXMob3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5JVmFsaWRhdGlvbk1lc3NhZ2VbXSkKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2VzKElWYWxpZGF0aW9uTWVzc2FnZVtdIG1lc3NhZ2VzKSAKLQl7Ci0JCXJldHVybiBzdXBlci5nZXRNZXNzYWdlcyhtZXNzYWdlcyk7Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51aS50ZXh0LldTRExWYWxpZGF0ZSNwYXJzZUFyZ3VtZW50cyhqYXZhLmxhbmcuU3RyaW5nW10pCi0JICovCi0JcHVibGljIHZvaWQgcGFyc2VBcmd1bWVudHMoU3RyaW5nW10gYXJncykgCi0JewotCQlzdXBlci5wYXJzZUFyZ3VtZW50cyhhcmdzKTsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnVpLnRleHQuV1NETFZhbGlkYXRlI3ZhbGlkYXRlKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCB2YWxpZGF0ZSgpIAotCXsKLQkJc3VwZXIudmFsaWRhdGUoKTsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnVpLnRleHQuV1NETFZhbGlkYXRlI3ZhbGlkYXRlRmlsZShqYXZhLmxhbmcuU3RyaW5nKQotCSAqLwotCXB1YmxpYyBJVmFsaWRhdGlvblJlcG9ydCB2YWxpZGF0ZUZpbGUoU3RyaW5nIGZpbGVuYW1lKSAKLQl7Ci0JCXJldHVybiBzdXBlci52YWxpZGF0ZUZpbGUoZmlsZW5hbWUpOwotCX0KLQkKLQkvKioKLQkgKiBHZXQgdGhlIGludGVybmFsIFdTREwgdmFsaWRhdG9yLgotCSAqIAotCSAqIEByZXR1cm4KLQkgKiAJCVRoZSBpbnRlcm5hbCBXU0RMIHZhbGlkYXRvci4KLQkgKi8KLQlwdWJsaWMgV1NETFZhbGlkYXRvciBnZXRXU0RMVmFsaWRhdG9yKCkKLQl7Ci0JCXJldHVybiB3c2RsVmFsaWRhdG9yOwotCX0KLQkKLQkvKioKLQkgKiBHZXQgdGhlIFdTREwgdmFsaWRhdGlvbiBjb25maWd1cmF0aW9uLgotCSAqIAotCSAqIEByZXR1cm4KLQkgKiAJCVRoZSBXU0RMIHZhbGlkYXRpb24gY29uZmlndXJhdGlvbi4KLQkgKi8KLQlwdWJsaWMgV1NETFZhbGlkYXRpb25Db25maWd1cmF0aW9uIGdldENvbmZpZ3VyYXRpb24oKQotCXsKLQkJcmV0dXJuIGNvbmZpZ3VyYXRpb247Ci0JfQotCQotCS8qKgotCSAqIEdldCB0aGUgbGlzdCBvZiBXU0RMIGZpbGVzIHRvIHZhbGlkYXRlLgotCSAqIAotCSAqIEByZXR1cm4KLQkgKiAJCVRoZSBsaXN0IG9mIFdTREwgZmlsZXMgdG8gdmFsaWRhdGUuCi0JICovCi0JcHVibGljIExpc3QgZ2V0V1NETEZpbGVzKCkKLQl7Ci0JCXJldHVybiB3c2RsRmlsZXM7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdHJ1ZSBpZiB2ZXJib3NlIGlzIG9uLCBmYWxzZSBvdGhlcndpc2UuCi0JICogCi0JICogQHJldHVybgotCSAqIAkJVHJ1ZSBpZiB2ZXJib3NlIGlzIG9uLCBmYWxzZSBvdGhlcndpc2UuCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNWZXJib3NlKCkKLQl7Ci0JCXJldHVybiB2ZXJib3NlOwotCX0KLQkKLQkvKioKLQkgKiBTZXQgd2hldGhlciByZXBvcnRpbmcgc2hvdWxkIGJlIGRvbmUgaW4gYSB2ZXJib3NlIHdheS4KLQkgKiAKLQkgKiBAcGFyYW0gdmVyYm9zZQotCSAqIAkJSWYgdHJ1ZSByZXBvcnRpbmcgd2lsbCBiZSBkb25lIGluIGEgdmVyYm9zZSB3YXksIG90aGVyd2lzZSBpdCB3aWxsIG5vdC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRWZXJib3NlKGJvb2xlYW4gdmVyYm9zZSkKLQl7Ci0JCXRoaXMudmVyYm9zZSA9IHZlcmJvc2U7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS94c2QvSW5saW5lU2NoZW1hR2VuZXJhdG9yVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEveHNkL0lubGluZVNjaGVtYUdlbmVyYXRvclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzBlM2VmOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3dzZGwxMS94c2QvSW5saW5lU2NoZW1hR2VuZXJhdG9yVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEueHNkOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5kb20uRG9jdW1lbnRJbXBsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLWltcG9ydCBjb20uaWJtLndzZGwuQ29uc3RhbnRzOwotCi0vKioKLSAqIFRlc3RzIGZvciBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS54c2QuSW5saW5lU2NoZW1hR2VuZXJhdG9yLgotICoKLSAqLwotcHVibGljIGNsYXNzIElubGluZVNjaGVtYUdlbmVyYXRvclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSAKLXsKLSAgcHJpdmF0ZSBJbmxpbmVTY2hlbWFHZW5lcmF0b3JXcmFwcGVyIGdlbmVyYXRvcjsKLSAgCi0gIC8qKgotICAgKiBDcmVhdGUgYSB0ZXN0cyBzdWl0ZSBmcm9tIHRoaXMgdGVzdCBjbGFzcy4KLSAgICogCi0gICAqIEByZXR1cm4gQSB0ZXN0IHN1aXRlIGNvbnRhaW5pbmcgdGhpcyB0ZXN0IGNsYXNzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotCXJldHVybiBuZXcgVGVzdFN1aXRlKElubGluZVNjaGVtYUdlbmVyYXRvclRlc3QuY2xhc3MpOwotICB9Ci0gIAotICAvKioKLSAgICogSlVuaXQgc2V0dXAgbWV0aG9kLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VXAoKQotICB7Ci0JZ2VuZXJhdG9yID0gbmV3IElubGluZVNjaGVtYUdlbmVyYXRvcldyYXBwZXIoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgdGhhdCBjaGVja1NPQVBFbmNvZGluZ1JlcXVpcmVkIG1ldGhvZC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RDaGVja1NPQVBFbmNvZGluZ1JlcXVpcmVkKCkKLSAgewotCS8vIFRlc3QgZW1wdHkgbGlzdC4KLQlhc3NlcnRGYWxzZSgiVGhlIG1ldGhvZCBkb2VzIG5vdCByZXR1cm4gZmFsc2Ugd2hlbiBnaXZlbiBhbiBlbXB0eSBsaXN0LiIsIGdlbmVyYXRvci5jaGVja1NPQVBFbmNvZGluZ1JlcXVpcmVkKG5ldyBBcnJheUxpc3QoKSkpOwotCQotCS8vIFRlc3QgdGhhdCBjaGVja1NPQVBFbmNvZGluZ1JlcXVpcmVkIHJldHVybnMgZmFsc2UKLQkvLyB3aGVuIGdpdmVuIGEgbGlzdCB3aXRob3V0IHRoZSBTT0FQIGVuY29kaW5nIG5hbWVzcGFjZS4KLQlMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JbGlzdC5hZGQoImh0dHA6Ly9ub3Rzb2FwZW5jb2RpbmduYW1lc3BhY2UiKTsKLQlhc3NlcnRGYWxzZSgiVGhlIG1ldGhvZCBkb2VzIG5vdCByZXR1cm4gZmFsc2Ugd2hlbiBnaXZlbiBhIGxpc3Qgd2l0aG91dCB0aGUgU09BUCBlbnZlbG9wZSBuYW1lc3BhY2UuIiwgZ2VuZXJhdG9yLmNoZWNrU09BUEVuY29kaW5nUmVxdWlyZWQobGlzdCkpOwotCQotCS8vIFRlc3QgdGhhdCBjaGVja1NPQVBFbmNvZGluZ1JlcXVpcmVkIHJldHVybnMgdHJ1ZQotCS8vIHdoZW4gZ2l2ZW4gYSBsaXN0IHdpdGggdGhlIFNPQVAgZW5jb2RpbmcgbmFtZXNwYWNlLgotCUxpc3QgbGlzdDIgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JbGlzdDIuYWRkKElubGluZVNjaGVtYUdlbmVyYXRvcldyYXBwZXIuU09BUF9FTkNPRElOR19VUkkpOwotCWFzc2VydFRydWUoIlRoZSBtZXRob2QgZG9lcyBub3QgcmV0dXJuIHRydWUgd2hlbiBnaXZlbiBhIGxpc3Qgd2l0aCB0aGUgU09BUCBlbmNvZGluZyBuYW1lc3BhY2UuIiwgZ2VuZXJhdG9yLmNoZWNrU09BUEVuY29kaW5nUmVxdWlyZWQobGlzdDIpKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRPRE86IEltcGxlbWVudCB0ZXN0cyBmb3IgdGhlIENyZWF0ZVhTRFN0cmluZ1JlY3Vyc2l2ZWx5IG1ldGhvZC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRvZG9DcmVhdGVYU0RTdHJpbmdSZWN1cnNpdmVseSgpIAotICB7Ci0gIH0KLQotICAvKioKLSAgICogVE9ETzogSW1wbGVtZW50IHRlc3RzIGZvciB0aGUgR2V0SW1wb3J0TmFtZXNwYWNlIG1ldGhvZC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRvZG9HZXRJbXBvcnROYW1lc3BhY2VzKCkgCi0gIHsKLSAgfQotCi0gIC8qKgotICAgCSogVGVzdCB0aGF0IHRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGNvcnJlY3QgbmFtZXNwYWNlCi0gICAJKiByZXNvbHZlci4KLSAgIAkqLwotICBwdWJsaWMgdm9pZCB0ZXN0R2V0TlNSZXNvbHZlcigpIAotICB7Ci0gICAgRG9jdW1lbnQgZG9jID0gbmV3IERvY3VtZW50SW1wbCgpOwotCUVsZW1lbnQgcm9vdEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudE5TKENvbnN0YW50cy5OU19VUklfWFNEXzIwMDEsICJzY2hlbWEiKTsKLQotCS8vIENoZWNrIHRoYXQgdGhlIHJlc29sdmVyIGlzIGVtcHR5LgotCUhhc2h0YWJsZSByZXNvbHZlciA9IGdlbmVyYXRvci5nZXROU1Jlc29sdmVyKHJvb3RFbGVtKTsKLQlhc3NlcnRUcnVlKCJUaGUgcmVzb2x2ZXIgaXMgbm90IGVtcHR5LiIsIHJlc29sdmVyLmlzRW1wdHkoKSk7Ci0JCi0JLy8gQ2hlY2sgdGhlIHJlc29sdmVyIGNvbnRhaW5zIG9uZSB2YWx1ZS4KLQlyb290RWxlbS5zZXRBdHRyaWJ1dGUoInhtbG5zIiwgQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMSk7Ci0JcmVzb2x2ZXIgPSBnZW5lcmF0b3IuZ2V0TlNSZXNvbHZlcihyb290RWxlbSk7Ci0JYXNzZXJ0VHJ1ZSgiVGhlIHJlc29sdmVyIGRvZXMgbm90IGNvbnRhaW4gdGhlIGVtcHR5IG5hbWVzcGFjZS4iLCByZXNvbHZlci5jb250YWluc0tleSgiIikpOwotCWFzc2VydEVxdWFscygiVGhlIHJlc29sdmVyIGRvZXMgbm90IGNvbnRhaW4gdGhlIGNvcnJlY3QgdmFsdWUgZm9yIHRoZSBlbXB0eSBuYW1lc3BhY2UuIiwgQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMSwgcmVzb2x2ZXIuZ2V0KCIiKSk7Ci0JCi0JLy8gQ2hlY2sgdGhlIHJlc29sdmVyIGNvbnRhaW5zIHR3byB2YWx1ZXMuCi0Jcm9vdEVsZW0uc2V0QXR0cmlidXRlKCJ4bWxuczpvdGhlciIsICJodHRwOi8vb3RoZXJuYW1lc3BhY2UiKTsKLQlyZXNvbHZlciA9IGdlbmVyYXRvci5nZXROU1Jlc29sdmVyKHJvb3RFbGVtKTsKLQlhc3NlcnRUcnVlKCJUaGUgcmVzb2x2ZXIgZG9lcyBub3QgY29udGFpbiB0aGUgb3RoZXIgbmFtZXNwYWNlLiIsIHJlc29sdmVyLmNvbnRhaW5zS2V5KCJvdGhlciIpKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSByZXNvbHZlciBkb2VzIG5vdCBjb250YWluIHRoZSBjb3JyZWN0IHZhbHVlIGZvciB0aGUgb3RoZXIgbmFtZXNwYWNlLiIsICJodHRwOi8vb3RoZXJuYW1lc3BhY2UiLCByZXNvbHZlci5nZXQoIm90aGVyIikpOwotCQotCS8vIENoZWNrIHRoZSByZXNvbHZlciBzdGlsbCBjb250YWlucyB0aGUgZW1wdHkgbmFtZXNwYWNlLgotCWFzc2VydFRydWUoIlRoZSByZXNvbHZlciBkb2VzIG5vdCBjb250YWluIHRoZSBlbXB0eSBuYW1lc3BhY2UgYWZ0ZXIgYWRkaW5nIGEgc2Vjb25kIG5hbWVzcGFjZS4iLCByZXNvbHZlci5jb250YWluc0tleSgiIikpOwotCWFzc2VydEVxdWFscygiVGhlIHJlc29sdmVyIGRvZXMgbm90IGNvbnRhaW4gdGhlIGNvcnJlY3QgdmFsdWUgZm9yIHRoZSBlbXB0eSBuYW1lc3BhY2UgYWZ0ZXIgYWRkaW5nIGEgc2Vjb25kIG5hbWVzcGFjZS4iLCBDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxLCByZXNvbHZlci5nZXQoIiIpKTsKLQkKLQkvLyBDaGVjayB0aGUgcmVzb2x2ZXIgZG9lc24ndCBjb250YWluIG5vbi14bWxucyBhdHRyaWJ1dGUgdmFsdWUuCi0Jcm9vdEVsZW0uc2V0QXR0cmlidXRlKCJ0eXBlOm90aGVyMiIsICJvdGhlcjI6dHlwZSIpOwotCXJlc29sdmVyID0gZ2VuZXJhdG9yLmdldE5TUmVzb2x2ZXIocm9vdEVsZW0pOwotCWFzc2VydEZhbHNlKCJUaGUgcmVzb2x2ZXIgY29udGFpbnMgdGhlIG90aGVyMiBuYW1lc3BhY2UuIiwgcmVzb2x2ZXIuY29udGFpbnNLZXkoIm90aGVyMiIpKTsKLSAgfQotCi0gIC8qKgotICAgKiBUZXN0IHRoYXQgdGhpcyBtZXRob2QgcmV0dXJucyB0aGUgcmVxdWlyZWQgcHJlZml4ZXMuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0R2V0UHJlZml4ZXMoKSAKLSAgewotCS8vIENoZWNrIGRvY3VtZW50IHRoYXQgY29udGFpbnMgbm8gcmVxdWlyZWQgbmFtZXNwYWNlcyBhbmQgbm8gcHJlZml4LgotCURvY3VtZW50IGRvYyA9IG5ldyBEb2N1bWVudEltcGwoKTsKLQlFbGVtZW50IHJvb3RFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxLCAic2NoZW1hIik7Ci0Jcm9vdEVsZW0uc2V0QXR0cmlidXRlKCJ4bWxucyIsQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMSk7Ci0JLy9kb2MuYXBwZW5kQ2hpbGQocm9vdEVsZW0pOwotCQotCUxpc3QgcmVxTlNzID0gZ2VuZXJhdG9yLmdldE5hbWVzcGFjZVByZWZpeGVzKHJvb3RFbGVtKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSByZXF1aXJlZCBuYW1lc3BhY2UgbGlzdCBkb2VzIG5vdCBjb250YWluIG9uZSBlbXB0eSBzdHJpbmcuIiwgMSwgcmVxTlNzLnNpemUoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgcmVxdWlyZWQgbmFtZXNwYWNlIGxpc3QgZG9lcyBub3QgY29udGFpbiBvbmUgZW1wdHkgc3RyaW5nLiIsICIiLCByZXFOU3MuZ2V0KDApKTsKLQkKLQkvLyBDaGVjayBkb2N1bWVudCB0aGF0IGNvbnRhaW5zIG5vIHJlcXVpcmVkIG5hbWVzcGFjZXMgYW5kIHRoZSB4c2QgcHJlZml4LgotCUVsZW1lbnQgcm9vdEVsZW0yID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxLCAieHNkOnNjaGVtYSIpOwotCXJvb3RFbGVtMi5zZXRBdHRyaWJ1dGUoInhtbG5zOnhzZCIsQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMSk7Ci0JTGlzdCByZXFOU3MyID0gZ2VuZXJhdG9yLmdldE5hbWVzcGFjZVByZWZpeGVzKHJvb3RFbGVtMik7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgcmVxdWlyZWQgbmFtZXNwYWNlIGxpc3QgZG9lcyBub3QgY29udGFpbiB0aGUgb25lIHN0cmluZyAneHNkJy4iLCAxLCByZXFOU3MyLnNpemUoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgcmVxdWlyZWQgbmFtZXNwYWNlIGxpc3QgZG9lcyBub3QgY29udGFpbiB0aGUgb25lIHN0cmluZyAneHNkJy4iLCAieHNkIiwgcmVxTlNzMi5nZXQoMCkpOwotCQotCS8vIENoZWNrIGRvY3VtZW50IHRoYXQgY29udGFpbnMgYW4gZWxlbWVudCB3aXRoIGEgcmVxdWlyZWQgbmFtZXNwYWNlLgotCUVsZW1lbnQgcm9vdEVsZW00ID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxLCAieHNkOnNjaGVtYSIpOwotCXJvb3RFbGVtMi5zZXRBdHRyaWJ1dGUoInhtbG5zOnhzZCIsQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMSk7Ci0JRWxlbWVudCBkaWZmTlNFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL290aGVybmFtZXNwYWNlIiwgIm90aGVyOmVsZW1lbnQiKTsKLQlyb290RWxlbTQuYXBwZW5kQ2hpbGQoZGlmZk5TRWxlbSk7Ci0JTGlzdCByZXFOU3M0ID0gZ2VuZXJhdG9yLmdldE5hbWVzcGFjZVByZWZpeGVzKHJvb3RFbGVtNCk7Ci0JYXNzZXJ0VHJ1ZSgiVGhlIHJlcXVpcmVkIG5hbWVzcGFjZSBsaXN0IGRvZXMgbm90IGNvbnRhaW4gdGhlIHByZWZpeCAnb3RoZXInIHdoZW4gdGhlIG5hbWVzcGFjZSBpcyBzcGVjaWZpZWQgZm9yIGFuIGVsZW1lbnQuIiwgcmVxTlNzNC5jb250YWlucygib3RoZXIiKSk7Ci0JCi0JLy8gQ2hlY2sgZG9jdW1lbnQgdGhhdCBjb250YWlucyBhIHR5cGUgd2l0aCBhIHJlcXVpcmVkIG5hbWVzcGFjZS4KLQlFbGVtZW50IHJvb3RFbGVtNSA9IGRvYy5jcmVhdGVFbGVtZW50TlMoQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMSwgInhzZDpzY2hlbWEiKTsKLQlyb290RWxlbTUuc2V0QXR0cmlidXRlKCJ4bWxuczp4c2QiLENvbnN0YW50cy5OU19VUklfWFNEXzIwMDEpOwotCUVsZW1lbnQgb3RoZXJFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxLCAieHNkOmVsZW1lbnQiKTsKLQlvdGhlckVsZW0uc2V0QXR0cmlidXRlKCJ0eXBlIiwgIm90aGVyOnR5cGUiKTsKLQlyb290RWxlbTUuYXBwZW5kQ2hpbGQob3RoZXJFbGVtKTsKLQlMaXN0IHJlcU5TczUgPSBnZW5lcmF0b3IuZ2V0TmFtZXNwYWNlUHJlZml4ZXMocm9vdEVsZW01KTsKLQlhc3NlcnRUcnVlKCJUaGUgcmVxdWlyZWQgbmFtZXNwYWNlIGxpc3QgZG9lcyBub3QgY29udGFpbiAnb3RoZXInIHdoZW4gdGhlIG5hbWVzcGFjZSBpcyBzcGVjaWZpZWQgZm9yIGEgdHlwZS4iLCByZXFOU3M1LmNvbnRhaW5zKCJvdGhlciIpKTsKLQkKLQkvLyBDaGVjayBkb2N1bWVudCB0aGF0IGNvbnRhaW5zIGFuIGltcG9ydC4gSW1wb3J0IGVsZW1lbnRzIHNob3VsZCBiZSBpZ25vcmVkLgotCS8vIFRoaXMgaXMgYSBjb250cml2ZWQgZXhhbXBsZSBhcyBpdCBjb250YWlucyBhIHR5cGUgYXR0cmlidXRlIGZvciB0aGUgaW1wb3J0IGVsZW1lbnQuCi0JRWxlbWVudCByb290RWxlbTYgPSBkb2MuY3JlYXRlRWxlbWVudE5TKENvbnN0YW50cy5OU19VUklfWFNEXzIwMDEsICJ4c2Q6c2NoZW1hIik7Ci0Jcm9vdEVsZW02LnNldEF0dHJpYnV0ZSgieG1sbnM6eHNkIixDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxKTsKLQlFbGVtZW50IGltcG9ydEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudE5TKENvbnN0YW50cy5OU19VUklfWFNEXzIwMDEsICJ4c2Q6aW1wb3J0Iik7Ci0JaW1wb3J0RWxlbS5zZXRBdHRyaWJ1dGUoInR5cGUiLCAib3RoZXI6dHlwZSIpOwotCXJvb3RFbGVtNi5hcHBlbmRDaGlsZChpbXBvcnRFbGVtKTsKLQlMaXN0IHJlcU5TczYgPSBnZW5lcmF0b3IuZ2V0TmFtZXNwYWNlUHJlZml4ZXMocm9vdEVsZW02KTsKLQlhc3NlcnRFcXVhbHMoIlRoZSByZXF1aXJlZCBuYW1lc3BhY2UgbGlzdCBkb2VzIG5vdCBjb250YWluIHRoZSBvbmUgc3RyaW5nICd4c2QnIHdoZW4gYW4gaW1wb3J0IGVsZW1lbnQgaXMgdXNlZC4iLCAxLCByZXFOU3M2LnNpemUoKSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgcmVxdWlyZWQgbmFtZXNwYWNlIGxpc3QgZG9lcyBub3QgY29udGFpbiB0aGUgb25lIHN0cmluZyAneHNkJyB3aGVuIGFuIGltcG9ydCBlbGVtZW50IGlzIHVzZWQuIiwgInhzZCIsIHJlcU5TczYuZ2V0KDApKTsKLQkKLSAgICAvLyBDaGVjayBkb2N1bWVudCB0aGF0IGNvbnRhaW5zIGFuIGluY2x1ZGUuIEluY2x1ZGUgZWxlbWVudHMgc2hvdWxkIGJlIGlnbm9yZWQuCi0gICAgLy8gVGhpcyBpcyBhIGNvbnRyaXZlZCBleGFtcGxlIGFzIGl0IGNvbnRhaW5zIGEgdHlwZSBhdHRyaWJ1dGUgZm9yIHRoZSBpbmNsdWRlIGVsZW1lbnQuCi0JRWxlbWVudCByb290RWxlbTcgPSBkb2MuY3JlYXRlRWxlbWVudE5TKENvbnN0YW50cy5OU19VUklfWFNEXzIwMDEsICJ4c2Q6c2NoZW1hIik7Ci0Jcm9vdEVsZW03LnNldEF0dHJpYnV0ZSgieG1sbnM6eHNkIixDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxKTsKLQlFbGVtZW50IGluY2x1ZGVFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhDb25zdGFudHMuTlNfVVJJX1hTRF8yMDAxLCAieHNkOmluY2x1ZGUiKTsKLQlpbmNsdWRlRWxlbS5zZXRBdHRyaWJ1dGUoInR5cGUiLCAib3RoZXI6dHlwZSIpOwotCXJvb3RFbGVtNy5hcHBlbmRDaGlsZChpbmNsdWRlRWxlbSk7Ci0JTGlzdCByZXFOU3M3ID0gZ2VuZXJhdG9yLmdldE5hbWVzcGFjZVByZWZpeGVzKHJvb3RFbGVtNik7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgcmVxdWlyZWQgbmFtZXNwYWNlIGxpc3QgZG9lcyBub3QgY29udGFpbiB0aGUgb25lIHN0cmluZyAneHNkJyB3aGVuIGFuIGltcG9ydCBlbGVtZW50IGlzIHVzZWQuIiwgMSwgcmVxTlNzNy5zaXplKCkpOwotCWFzc2VydEVxdWFscygiVGhlIHJlcXVpcmVkIG5hbWVzcGFjZSBsaXN0IGRvZXMgbm90IGNvbnRhaW4gdGhlIG9uZSBzdHJpbmcgJ3hzZCcgd2hlbiBhbiBpbXBvcnQgZWxlbWVudCBpcyB1c2VkLiIsICJ4c2QiLCByZXFOU3M3LmdldCgwKSk7Ci0JCi0JLy8gQ2hlY2sgZG9jdW1lbnQgdGhhdCBjb250YWlucyBhdHRyaWJ1dGUgd2l0aCBhIHJlcXVpcmVkIG5hbWVzcGFjZS4KLQlFbGVtZW50IHJvb3RFbGVtMyA9IGRvYy5jcmVhdGVFbGVtZW50TlMoQ29uc3RhbnRzLk5TX1VSSV9YU0RfMjAwMSwgInhzZDpzY2hlbWEiKTsKLQlyb290RWxlbTMuc2V0QXR0cmlidXRlKCJ4bWxuczp4c2QiLENvbnN0YW50cy5OU19VUklfWFNEXzIwMDEpOwotCUVsZW1lbnQgd3NkbEF0dEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudE5TKENvbnN0YW50cy5OU19VUklfWFNEXzIwMDEsICJ4c2Q6ZWxlbWVudCIpOwotCXdzZGxBdHRFbGVtLnNldEF0dHJpYnV0ZU5TKENvbnN0YW50cy5OU19VUklfV1NETCwgIndzZGw6YXJyYXlUeXBlIiwgInNvbWV0eXBlW10iKTsKLQlyb290RWxlbTMuYXBwZW5kQ2hpbGQod3NkbEF0dEVsZW0pOwotCUxpc3QgcmVxTlNzMyA9IGdlbmVyYXRvci5nZXROYW1lc3BhY2VQcmVmaXhlcyhyb290RWxlbTMpOwotCWFzc2VydFRydWUoIlRoZSByZXF1aXJlZCBuYW1lc3BhY2UgbGlzdCBkb2VzIG5vdCBjb250YWluICd3c2RsJyB3aGVuIHRoZSBuYW1lc3BhY2UgaXMgc3BlY2lmaWVkIGZvciBhbiBhdHRyaWJ1dGUuIiwgcmVxTlNzMy5jb250YWlucygid3NkbCIpKTsKLQkKLSAgfQotCi0gIC8qKgotICAgKiBUT0RPOiBJbXBsZW1lbnQgdGVzdHMgZm9yIHRoZSBSZW1vdmVJbXBvcnRzIG1ldGhvZC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRvZG9SZW1vdmVJbXBvcnRzKCkgCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBUT0RPOiBJbXBsZW1lbnQgdGVzdHMgZm9yIHRoZSBSZW1vdmVMb2NhbE5hbWVzcGFjZSBtZXRob2QuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0b2RvUmVtb3ZlTG9jYWxOYW1lc3BhY2VzKCkgCi0gIHsKLSAgfQotCi0gIC8qKgotICAgKiBUT0RPOiBJbXBsZW1lbnQgdGVzdHMgZm9yIHRoZSBSZXNvbHZlTmFtZXNwYWNlIG1ldGhvZC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRvZG9SZXNvbHZlTmFtZXNwYWNlcygpIAotICB7Ci0gIH0KLQotICAvKioKLSAgICogCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UmVzdHJpY3RJbXBvcnRzKCkgCi0gIHsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEveHNkL0lubGluZVNjaGVtYUdlbmVyYXRvcldyYXBwZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwvd3NkbDExL3hzZC9JbmxpbmVTY2hlbWFHZW5lcmF0b3JXcmFwcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhMzlkMjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi9pbnRlcm5hbC93c2RsMTEveHNkL0lubGluZVNjaGVtYUdlbmVyYXRvcldyYXBwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEueHNkOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotLyoqCi0gKiBXcmFwcGVyIGZvciBJbmxpbmVTY2hlbWFHZW5lcmF0b3IgdG8gYWxsb3cgdGVzdGluZyBwcm90ZWN0ZWQgbWV0aG9kcy4KLSAqLwotcHVibGljIGNsYXNzIElubGluZVNjaGVtYUdlbmVyYXRvcldyYXBwZXIgZXh0ZW5kcyBJbmxpbmVTY2hlbWFHZW5lcmF0b3IgCi17Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS54c2QuSW5saW5lU2NoZW1hR2VuZXJhdG9yI2NoZWNrU09BUEVuY29kaW5nUmVxdWlyZWQoamF2YS51dGlsLkxpc3QpCi0JICovCi0JcHJvdGVjdGVkIGJvb2xlYW4gY2hlY2tTT0FQRW5jb2RpbmdSZXF1aXJlZChMaXN0IHJlcW5zKSAKLQl7Ci0JCXJldHVybiBzdXBlci5jaGVja1NPQVBFbmNvZGluZ1JlcXVpcmVkKHJlcW5zKTsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS54c2QuSW5saW5lU2NoZW1hR2VuZXJhdG9yI2NyZWF0ZVhTRFN0cmluZ1JlY3Vyc2l2ZWx5KG9yZy53M2MuZG9tLkVsZW1lbnQsIGphdmEudXRpbC5MaXN0LCBqYXZhLnV0aWwuTGlzdCwgamF2YS51dGlsLkhhc2h0YWJsZSwgamF2YS5sYW5nLlN0cmluZykKLQkgKi8KLQlwcm90ZWN0ZWQgU3RyaW5nIGNyZWF0ZVhTRFN0cmluZ1JlY3Vyc2l2ZWx5KEVsZW1lbnQgZWxlbSwgTGlzdCBlbGVtZW50cywgTGlzdCByZXF1aXJlZE5hbWVzcGFjZXMsIEhhc2h0YWJsZSByZXFOU0RlY2wsIFN0cmluZyBmaWxlbG9jYXRpb24pIAotCXsKLQkJcmV0dXJuIHN1cGVyLmNyZWF0ZVhTRFN0cmluZ1JlY3Vyc2l2ZWx5KGVsZW0sIGVsZW1lbnRzLCByZXF1aXJlZE5hbWVzcGFjZXMsCi0JCQkJcmVxTlNEZWNsLCBmaWxlbG9jYXRpb24pOwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLnhzZC5JbmxpbmVTY2hlbWFHZW5lcmF0b3IjZ2V0SW1wb3J0TmFtZXNwYWNlcyhvcmcudzNjLmRvbS5FbGVtZW50KQotCSAqLwotCXByb3RlY3RlZCBMaXN0IGdldEltcG9ydE5hbWVzcGFjZXMoRWxlbWVudCBlbGVtKSAKLQl7Ci0JCXJldHVybiBzdXBlci5nZXRJbXBvcnROYW1lc3BhY2VzKGVsZW0pOwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLnhzZC5JbmxpbmVTY2hlbWFHZW5lcmF0b3IjZ2V0TlNSZXNvbHZlcihvcmcudzNjLmRvbS5FbGVtZW50KQotCSAqLwotCXByb3RlY3RlZCBIYXNodGFibGUgZ2V0TlNSZXNvbHZlcihFbGVtZW50IGVsZW0pIAotCXsKLQkJcmV0dXJuIHN1cGVyLmdldE5TUmVzb2x2ZXIoZWxlbSk7Ci0JfQotCi0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEueHNkLklubGluZVNjaGVtYUdlbmVyYXRvciNnZXROYW1lc3BhY2VQcmVmaXhlcyhvcmcudzNjLmRvbS5FbGVtZW50KQotICAgICAqLwotICAgIHByb3RlY3RlZCBMaXN0IGdldE5hbWVzcGFjZVByZWZpeGVzKEVsZW1lbnQgZWxlbSkgCi0gICAgewotCSAgICByZXR1cm4gc3VwZXIuZ2V0TmFtZXNwYWNlUHJlZml4ZXMoZWxlbSk7Ci0gICAgfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC53c2RsMTEueHNkLklubGluZVNjaGVtYUdlbmVyYXRvciNyZW1vdmVJbXBvcnRzKGphdmEudXRpbC5MaXN0LCBqYXZhLnV0aWwuTGlzdCkKLQkgKi8KLQlwcm90ZWN0ZWQgTGlzdCByZW1vdmVJbXBvcnRzKExpc3QgbmFtZXNwYWNlcywgTGlzdCBpbXBvcnRlZE5hbWVzcGFjZXMpIAotCXsKLQkJcmV0dXJuIHN1cGVyLnJlbW92ZUltcG9ydHMobmFtZXNwYWNlcywgaW1wb3J0ZWROYW1lc3BhY2VzKTsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS54c2QuSW5saW5lU2NoZW1hR2VuZXJhdG9yI3JlbW92ZUxvY2FsTmFtZXNwYWNlcyhqYXZhLnV0aWwuTGlzdCwgb3JnLnczYy5kb20uRWxlbWVudCkKLQkgKi8KLQlwcm90ZWN0ZWQgTGlzdCByZW1vdmVMb2NhbE5hbWVzcGFjZXMoTGlzdCBuYW1lc3BhY2VzLCBFbGVtZW50IGVsZW0pIAotCXsKLQkJcmV0dXJuIHN1cGVyLnJlbW92ZUxvY2FsTmFtZXNwYWNlcyhuYW1lc3BhY2VzLCBlbGVtKTsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS54c2QuSW5saW5lU2NoZW1hR2VuZXJhdG9yI3Jlc29sdmVOYW1lc3BhY2VzKGphdmEudXRpbC5MaXN0LCBqYXZhLnV0aWwuSGFzaHRhYmxlLCBqYXZhLnV0aWwuSGFzaHRhYmxlKQotCSAqLwotCXByb3RlY3RlZCBIYXNodGFibGUgcmVzb2x2ZU5hbWVzcGFjZXMoTGlzdCBuYW1lc3BhY2VzLCBIYXNodGFibGUgbnNSZXNvbHZlciwgSGFzaHRhYmxlIHBhcmVudE5TUmVzb2x2ZXIpIAotCXsKLQkJcmV0dXJuIHN1cGVyLnJlc29sdmVOYW1lc3BhY2VzKG5hbWVzcGFjZXMsIG5zUmVzb2x2ZXIsIHBhcmVudE5TUmVzb2x2ZXIpOwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwud3NkbDExLnhzZC5JbmxpbmVTY2hlbWFHZW5lcmF0b3IjcmVzdHJpY3RJbXBvcnRzKGphdmEudXRpbC5MaXN0LCBqYXZhLnV0aWwuU2V0KQotCSAqLwotCXByb3RlY3RlZCBMaXN0IHJlc3RyaWN0SW1wb3J0cyhMaXN0IG5hbWVzcGFjZXMsIFNldCB2YWxpZEltcG9ydE5TcykgCi0JewotCQlyZXR1cm4gc3VwZXIucmVzdHJpY3RJbXBvcnRzKG5hbWVzcGFjZXMsIHZhbGlkSW1wb3J0TlNzKTsKLQl9Ci0gICAKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL1hNTENhdGFsb2dUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL2ludGVybmFsL3htbC9YTUxDYXRhbG9nVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjFjZDZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vaW50ZXJuYWwveG1sL1hNTENhdGFsb2dUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwueG1sOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWwuQmFzZVRlc3RDYXNlOwotCi0vKioKLSAqIFRlc3RzIGZvciB0aGUgV1NETCB2YWxpZGF0b3IncyBpbnRlcm5hbCBYTUwgY2F0YWxvZy4KLSAqLwotcHVibGljIGNsYXNzIFhNTENhdGFsb2dUZXN0IGV4dGVuZHMgQmFzZVRlc3RDYXNlCi17Ci0gIHByaXZhdGUgU3RyaW5nIENBVEFMT0dfRElSID0gInRlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvQ2F0YWxvZ1NjaGVtYXMvIjsKLSAgCi0gIC8qKgotICAgKiBDcmVhdGUgYSB0ZXN0cyBzdWl0ZSBmcm9tIHRoaXMgdGVzdCBjbGFzcy4KLSAgICogCi0gICAqIEByZXR1cm4gQSB0ZXN0IHN1aXRlIGNvbnRhaW5pbmcgdGhpcyB0ZXN0IGNsYXNzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotCXJldHVybiBuZXcgVGVzdFN1aXRlKFhNTENhdGFsb2dUZXN0LmNsYXNzKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24KLSAgewotCXN1cGVyLnNldFVwKCk7Ci0JWE1MQ2F0YWxvZy5yZXNldCgpOwotICB9Ci0KLQotCi1wdWJsaWMgdm9pZCB0ZXN0U2NoZW1hRGlyKCkKLSAgewotCVhNTENhdGFsb2cuYWRkU2NoZW1hRGlyKFBMVUdJTl9BQlNPTFVURV9QQVRIICsgQ0FUQUxPR19ESVIpOwotCVN0cmluZyBjYXRhbG9nTG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIENBVEFMT0dfRElSOwotCWNhdGFsb2dMb2NhdGlvbiA9IGNhdGFsb2dMb2NhdGlvbi5yZXBsYWNlKCdcXCcsJy8nKTsKLSAgICB3aGlsZShjYXRhbG9nTG9jYXRpb24uc3RhcnRzV2l0aCgiLyIpKQotICAgIHsKLSAgICAJY2F0YWxvZ0xvY2F0aW9uID0gY2F0YWxvZ0xvY2F0aW9uLnN1YnN0cmluZygxKTsKLSAgICB9Ci0gICAgY2F0YWxvZ0xvY2F0aW9uID0gRklMRV9QUk9UT0NPTCArIGNhdGFsb2dMb2NhdGlvbjsKLQlJWE1MQ2F0YWxvZyBjYXRhbG9nID0gWE1MQ2F0YWxvZy5nZXRJbnN0YW5jZSgpOwotCVN0cmluZyByZXNvbHZlZExvY2F0aW9uID0gY2F0YWxvZy5yZXNvbHZlRW50aXR5TG9jYXRpb24oImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2NoZW1hMSIsICIiKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSByZXNvbHZlZCBsb2NhdGlvbiBpcyBub3QgZXF1YWwgdG8gdGhlIGV4cGVjdGVkIGxvY2F0aW9uLiIsIGNhdGFsb2dMb2NhdGlvbiArICJzY2hlbWExLnhzZCIsIHJlc29sdmVkTG9jYXRpb24pOwotCXJlc29sdmVkTG9jYXRpb24gPSBjYXRhbG9nLnJlc29sdmVFbnRpdHlMb2NhdGlvbigiaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zY2hlbWEyIiwgIiIpOwotCWFzc2VydEVxdWFscygiVGhlIHNlY29uZCByZXNvbHZlZCBsb2NhdGlvbiBpcyBub3QgZXF1YWwgdG8gdGhlIHJlc29sdmVkIGxvY2F0aW9uLiIsIGNhdGFsb2dMb2NhdGlvbiArICJzY2hlbWEyLnhzZCIsIHJlc29sdmVkTG9jYXRpb24pOwotICAKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9BbGxXU0RMVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvQWxsV1NETFRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1MzUwZjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9BbGxXU0RMVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuZWNsaXBzZS5WYWxpZGF0b3JUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwucmVzb2x2ZXIuVVJJUmVzb2x2ZXJUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudWkuYW50LkFudExvZ2dlclRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC51aS5hbnQuV1NETFZhbGlkYXRlVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLndzZGwxMS54c2QuSW5saW5lU2NoZW1hR2VuZXJhdG9yVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLnhtbC5YTUxDYXRhbG9nVGVzdDsKLS8qKgotICogVGhlIHJvb3QgdGVzdCBzdWl0ZSB0aGF0IGNvbnRhaW5zIGFsbCBvdGhlciBXU0RMIHZhbGlkYXRvciB0ZXN0IHN1aXRlcy4KLSAqLwotcHVibGljIGNsYXNzIEFsbFdTRExUZXN0cyBleHRlbmRzIGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGUKLXsKLSAgLyoqCi0gICAqIENyZWF0ZSB0aGlzIHRlc3Qgc3VpdGUuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoaXMgdGVzdCBzdWl0ZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IEFsbFdTRExUZXN0cygpOwotICB9Ci0gIAotICAvKioKLSAgICogQ29uc3RydWN0b3IKLSAgICovCi0gIHB1YmxpYyBBbGxXU0RMVGVzdHMoKQotICB7Ci0gICAgc3VwZXIoIkFsbFdTRExUZXN0cyIpOwotICAgIGFkZFRlc3QoVmFsaWRhdG9yVGVzdC5zdWl0ZSgpKTsKLSAgICAvL2FkZFRlc3QoV1NETFZhbGlkYXRvclRlc3Quc3VpdGUoKSk7Ci0gICAgYWRkVGVzdChYU0RUZXN0LnN1aXRlKCkpOwotICAgIGFkZFRlc3QoV1NETFRlc3Quc3VpdGUoKSk7Ci0gICAgYWRkVGVzdChQYXRoc1Rlc3Quc3VpdGUoKSk7Ci0gICAgYWRkVGVzdChVUklSZXNvbHZlclRlc3Quc3VpdGUoKSk7Ci0gICAgYWRkVGVzdChXU0RMVmFsaWRhdGVUZXN0LnN1aXRlKCkpOwotICAgIGFkZFRlc3QoWE1MQ2F0YWxvZ1Rlc3Quc3VpdGUoKSk7Ci0gICAgYWRkVGVzdChJbmxpbmVTY2hlbWFHZW5lcmF0b3JUZXN0LnN1aXRlKCkpOwotICAgIGFkZFRlc3RTdWl0ZShMaW5lTnVtYmVyQWRqdXN0bWVudHNUZXN0LmNsYXNzKTsKLSAgICBhZGRUZXN0U3VpdGUoQW50TG9nZ2VyVGVzdC5jbGFzcyk7Ci0gICAgYWRkVGVzdFN1aXRlKG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwudWkudGV4dC5XU0RMVmFsaWRhdGVUZXN0LmNsYXNzKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvQmFzZVRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL0Jhc2VUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzBhN2UyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvQmFzZVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLkRhdGFPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy51dGlsLlhNTEdyYW1tYXJQb29sSW1wbDsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuZ3JhbW1hcnMuWE1MR3JhbW1hclBvb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3REZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3MuaW50ZXJuYWwucGx1Z2luLldTUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53cy5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QZXJzaXN0ZW50V1NJQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLklWYWxpZGF0aW9uTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLklWYWxpZGF0aW9uUmVwb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuV1NETFZhbGlkYXRpb25Db25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuZWNsaXBzZS5JbmxpbmVTY2hlbWFNb2RlbEdyYW1tYXJQb29sSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2UuV1NETFZhbGlkYXRvcjsKLQotLyoqCi0gKiBCYXNlIHRlc3QgY2FzZSBjbGFzcyB3aGljaCBwcm92aWRlcyBtZXRob2RzIHRvIAotICogLSBjcmVhdGUgbG9ncwotICogLSByZWFkIGZyb20gbG9ncwotICogLSBydW4gbG9nIGNvbXBhcmlzb24gdGVzdHMKLSAqLwotcHVibGljIGNsYXNzIEJhc2VUZXN0Q2FzZSBleHRlbmRzIFRlc3RDYXNlCi17Ci0gIHByb3RlY3RlZCBTdHJpbmcgRklMRV9QUk9UT0NPTCA9ICJmaWxlOi8vLyI7IAotICBwcm90ZWN0ZWQgU3RyaW5nIFBMVUdJTl9BQlNPTFVURV9QQVRIOwotICBwcm90ZWN0ZWQgU3RyaW5nIFNBTVBMRVNfRElSID0gInRlc3RyZXNvdXJjZXMvc2FtcGxlcy8iOwotICBwcm90ZWN0ZWQgU3RyaW5nIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiA9ICJ0ZXN0cmVzb3VyY2VzL2dlbmVyYXRlZFJlc3VsdHMvIjsKLSAgcHJvdGVjdGVkIFN0cmluZyBJREVBTF9SRVNVTFRTX0RJUiA9ICJ0ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy8iOwotICBwcm90ZWN0ZWQgU3RyaW5nIExPR19GSUxFX0xPQ0FUSU9OID0gInJlc3VsdHMubG9nIjsKLSAgCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9OQU1FID0gIm9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMiOwotICBwcml2YXRlIFdTRExWYWxpZGF0b3IgdmFsaWRhdG9yID0gV1NETFZhbGlkYXRvci5nZXRJbnN0YW5jZSgpOwotICAKLSAgV1NETFZhbGlkYXRpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBudWxsOwotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24KLSAgewotCXN1cGVyLnNldFVwKCk7Ci0JCi0gICAgUExVR0lOX0FCU09MVVRFX1BBVEggPSBXU0RMVmFsaWRhdG9yVGVzdHNQbHVnaW4uZ2V0SW5zdGFsbFVSTCgpOy8vZ2V0UGx1Z2luTG9jYXRpb24oKTsKLSAgICAKLSAgICAvLyBTZXQgdGhlIFdTLUkgcHJlZmVyZW5jZSB0byBpZ25vcmUgc28gb25seSBXU0RMIGVycm9ycyB3aWxsIGJlIHRlc3RlZC4KLSAgICBXU1BsdWdpbiB3c3VpID0gV1NQbHVnaW4uZ2V0SW5zdGFuY2UoKTsKLSAgICBQZXJzaXN0ZW50V1NJQ29udGV4dCB3c2ljb250ZXh0ID0gd3N1aS5nZXRXU0lTU0JQQ29udGV4dCgpOwotICAgIHdzaWNvbnRleHQudXBkYXRlV1NJQ29tcGxpYW5jZXMoUGVyc2lzdGVudFdTSUNvbnRleHQuSUdOT1JFX05PTl9XU0kpOwotICAgIHdzaWNvbnRleHQgPSB3c3VpLmdldFdTSUFQQ29udGV4dCgpOwotICAgIHdzaWNvbnRleHQudXBkYXRlV1NJQ29tcGxpYW5jZXMoUGVyc2lzdGVudFdTSUNvbnRleHQuSUdOT1JFX05PTl9XU0kpOwotICAgIAotICAgIGNvbmZpZ3VyYXRpb24gPSBuZXcgV1NETFZhbGlkYXRpb25Db25maWd1cmF0aW9uKCk7Ci0JWE1MR3JhbW1hclBvb2wgeHNkR3JhbW1hclBvb2wgPSBuZXcgSW5saW5lU2NoZW1hTW9kZWxHcmFtbWFyUG9vbEltcGwoKTsKLQlYTUxHcmFtbWFyUG9vbCB4bWxHcmFtbWFyUG9vbCA9IG5ldyBYTUxHcmFtbWFyUG9vbEltcGwoKTsKLQljb25maWd1cmF0aW9uLnNldFByb3BlcnR5KENvbnN0YW50cy5YTUxTQ0hFTUFfQ0FDSEVfQVRUUklCVVRFLCB4c2RHcmFtbWFyUG9vbCk7Ci0gICAgY29uZmlndXJhdGlvbi5zZXRQcm9wZXJ0eShDb25zdGFudHMuWE1MX0NBQ0hFX0FUVFJJQlVURSwgeG1sR3JhbW1hclBvb2wpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiAKLSAgewotCWNvbmZpZ3VyYXRpb24gPSBudWxsOwotCQotCXN1cGVyLnRlYXJEb3duKCk7Ci0gIH0KLQotLyoqCi0gICAqIFJ1biBhIHZhbGlkYXRvciB0ZXN0LiBUaGUgdGVzdCB3aWxsIHJ1biB0aGUgdmFsaWRhdG9yLCBsb2cgdGhlIHJlc3VsdHMgYW5kIGNvbXBhcmUgdGhlIHJlc3VsdHMKLSAgICogd2l0aCB0aGUgaWRlYWwgcmVzdWx0cy4gVGhlIHRlc3Qgd2lsbCBvbmx5IHBhc3MgaWYgdGhlIHR3byBsb2cgZmlsZXMgYXJlIHRoZSBzYW1lLgotICAgKiAKLSAgICogQHBhcmFtIHRlc3RmaWxlIFRoZSBmaWxlIHRvIHJ1biB0aGUgdmFsaWRhdG9yIHRlc3Qgb24uCi0gICAqIEBwYXJhbSBsb2dsb2NhdGlvbiBUaGUgbG9jYXRpb24gdG8gY3JlYXRlIHRoZSBsb2cgZmlsZS4KLSAgICogQHBhcmFtIGlkZWFsbG9nbG9jYXRpb24gVGhlIGxvY2F0aW9uIG9mIHRoZSBpZGVhbCBsb2cgZmlsZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJ1blRlc3QoU3RyaW5nIHRlc3RmaWxlLCBTdHJpbmcgbG9nbG9jYXRpb24sIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uKQotICB7Ci0gICAgSVZhbGlkYXRpb25SZXBvcnQgdmFscmVwb3J0ID0gdmFsaWRhdG9yLnZhbGlkYXRlKHRlc3RmaWxlLCBudWxsLCBjb25maWd1cmF0aW9uKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBjcmVhdGVMb2cobG9nbG9jYXRpb24sIHZhbHJlcG9ydCk7Ci0gICAgICBTdHJpbmcgZ2VuZXJhdGVkTG9nID0gZ2V0U3RyaW5nRnJvbUZpbGUobG9nbG9jYXRpb24pOwotICAgICAgU3RyaW5nIGlkZWFsTG9nID0gZ2V0U3RyaW5nRnJvbUZpbGUoaWRlYWxsb2dsb2NhdGlvbik7Ci0gICAgICBhc3NlcnRFcXVhbHMoaWRlYWxMb2csIGdlbmVyYXRlZExvZyk7Ci0gICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZmFpbCgiQ291bGQgbm90IGNvbXBhcmUgbG9nIGZpbGVzIik7Ci0gICAgfQotICB9Ci0gIAotICAvKioKLSAgICogR2V0IGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgZmlsZS4KLSAgICogCi0gICAqIEBwYXJhbSBmaWxlbmFtZSB0aGUgZmlsZSBuYW1lIG9mIHRoZSBmaWxlIHRvIGdldCB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uLgotICAgKiBAcmV0dXJuIFRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gaWYgc3VjY2Vzc2Z1bC4KLSAgICogQHRocm93cyBFeGNlcHRpb24gVGhyb3duIGlmIHVuYWJsZSB0byBjcmVhdGUgYSBzdHJpbmcgcmVwcmVzZW50YWlvbiBvZiB0aGUgZmlsZS4KLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGdldFN0cmluZ0Zyb21GaWxlKFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgaWYoZmlsZW5hbWUuc3RhcnRzV2l0aCgiZmlsZToiKSkKLSAgCXsKLSAgCSAgZmlsZW5hbWUgPSBmaWxlbmFtZS5zdWJzdHJpbmcoNik7Ci0gIAkgIHdoaWxlKGZpbGVuYW1lLnN0YXJ0c1dpdGgoIlxcIikgfHwgZmlsZW5hbWUuc3RhcnRzV2l0aCgiLyIpKQotICAJICB7Ci0gIAkgIAlmaWxlbmFtZSA9IGZpbGVuYW1lLnN1YnN0cmluZygxKTsKLSAgCSAgfQotICAJfQotICAgIFN0cmluZ0J1ZmZlciBmaWxlc3RyaW5nID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIFJlYWRlciByZWFkZXIgPSBudWxsOwotICAgIEJ1ZmZlcmVkUmVhZGVyIGJ1ZnJlYWRlciA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRmlsZSBmaWxlID0gbmV3IEZpbGUoZmlsZW5hbWUpOwotICAgICAgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoZmlsZSk7Ci0gICAgICBidWZyZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIocmVhZGVyKTsKLSAgICAgIHdoaWxlIChidWZyZWFkZXIucmVhZHkoKSkKLSAgICAgIHsKLSAgICAgICAgZmlsZXN0cmluZy5hcHBlbmQoYnVmcmVhZGVyLnJlYWRMaW5lKCkgKyAiXG4iKTsKLSAgICAgIH0KLSAgICB9IGNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCk7Ci0gICAgfSBmaW5hbGx5Ci0gICAgewotICAgICAgYnVmcmVhZGVyLmNsb3NlKCk7Ci0gICAgICByZWFkZXIuY2xvc2UoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZpbGVzdHJpbmcudG9TdHJpbmcoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIENyZWF0ZSBhIGxvZyBmaWxlIGZvciBhbiBYU0QgdGVzdC4KLSAgICogCi0gICAqIEBwYXJhbSBmaWxlbmFtZSBUaGUgbmFtZSBvZiB0aGUgbG9nIGZpbGUgdG8gY3JlYXRlLgotICAgKiBAcGFyYW0gdmFscmVwb3J0IFRoZSB2YWxpZGF0aW9uIHJlcG9ydCBmb3IgdGhpcyBmaWxlLgotICAgKiBAcmV0dXJuIFRoZSBmaWxlIGNvbnRlbnRzIGFzIGEgc3RyaW5nIGlmIHN1Y2Nlc3NmdWwgb3IgbnVsbCBpZiBub3Qgc3VjY2Vzc2Z1bC4KLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGNyZWF0ZUxvZyhTdHJpbmcgZmlsZW5hbWUsIElWYWxpZGF0aW9uUmVwb3J0IHZhbHJlcG9ydCkKLSAgewotICAgIGlmKGZpbGVuYW1lLnN0YXJ0c1dpdGgoImZpbGU6IikpCi0gIAl7Ci0gIAkgIGZpbGVuYW1lID0gZmlsZW5hbWUuc3Vic3RyaW5nKDYpOwotICAJICB3aGlsZShmaWxlbmFtZS5zdGFydHNXaXRoKCJcXCIpIHx8IGZpbGVuYW1lLnN0YXJ0c1dpdGgoIi8iKSkKLSAgCSAgewotICAJICAJZmlsZW5hbWUgPSBmaWxlbmFtZS5zdWJzdHJpbmcoMSk7Ci0gIAkgIH0KLSAgCX0KLSAgICAgSVZhbGlkYXRpb25NZXNzYWdlW10gdmFsbWVzc2FnZXMgPSB2YWxyZXBvcnQuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKCk7Ci0gICAgIGludCBudW1tZXNzYWdlcyA9IHZhbG1lc3NhZ2VzLmxlbmd0aDsvL3ZhbGlkYXRvci5nZXRFcnJvcnMoKS5zaXplKCkgKyB2YWxpZGF0b3IuZ2V0V2FybmluZ3MoKS5zaXplKCk7Ci0gICAgIFN0cmluZ0J1ZmZlciBlcnJvcnNTdHJpbmcgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgIFN0cmluZ0J1ZmZlciB3YXJuaW5nc1N0cmluZyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgaW50IG51bWVycm9ycyA9IDA7Ci0gICAgIGludCBudW13YXJuaW5ncyA9IDA7Ci0gICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1tZXNzYWdlczsgaSsrKQotICAgICB7Ci0gICAgICAgSVZhbGlkYXRpb25NZXNzYWdlIHZhbG1lcyA9IHZhbG1lc3NhZ2VzW2ldOwotICAgICAgIGlmKHZhbG1lcy5nZXRTZXZlcml0eSgpID09IElWYWxpZGF0aW9uTWVzc2FnZS5TRVZfV0FSTklORykKLSAgICAgICB7Ci0gICAgICAgICBudW13YXJuaW5ncysrOwotICAgICAgICAgLy8gSWYgdGhlIG1lc3NhZ2UgY29udGFpbnMgYW55IGZpbGUgcmVmZXJlbmNlcyBtYWtlIHRoZW0gcmVsYXRpdmUuCi0gICAgICAgICBTdHJpbmcgbWVzc2FnZSA9IHZhbG1lcy5nZXRNZXNzYWdlKCk7Ci0gICAgICAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlQWxsKCInW14nXSoiICsgZ2V0UGx1Z2luTmFtZSgpICsgIlteJy9dKi8iLCAiJyIpOwotICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZUFsbCgiWyhdW14oXSoiICsgZ2V0UGx1Z2luTmFtZSgpICsgIlteJy9dKi8iLCAiWyhdIik7Ci0gICAgICAgICB3YXJuaW5nc1N0cmluZy5hcHBlbmQobWVzc2FnZSArICIgWyIgKyB2YWxtZXMuZ2V0TGluZSgpICsiLCAiICsgdmFsbWVzLmdldENvbHVtbigpICsiXVxuIik7Ci0gICAgICAgICB3YXJuaW5nc1N0cmluZy5hcHBlbmQoY3JlYXRlTmVzdGVkTWVzc2FnZVN0cmluZyh2YWxtZXMuZ2V0TmVzdGVkTWVzc2FnZXMoKSkpOwotICAgICAgIH0KLSAgICAgICBlbHNlCi0gICAgICAgewotICAgICAgICAgbnVtZXJyb3JzKys7Ci0gICAgICAgICAvLyBJZiB0aGUgbWVzc2FnZSBjb250YWlucyBhbnkgZmlsZSByZWZlcmVuY2VzIG1ha2UgdGhlbSByZWxhdGl2ZS4KLSAgICAgICAgIFN0cmluZyBtZXNzYWdlID0gdmFsbWVzLmdldE1lc3NhZ2UoKTsKLSAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2VBbGwoIidbXiddKiIgKyBnZXRQbHVnaW5OYW1lKCkgKyAiW14nL10qLyIsICInIik7Ci0gICAgICAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlQWxsKCJbKF1bXihdKiIgKyBnZXRQbHVnaW5OYW1lKCkgKyAiW14nL10qLyIsICIoIik7Ci0gICAgICAgICBlcnJvcnNTdHJpbmcuYXBwZW5kKG1lc3NhZ2UgKyAiIFsiICsgdmFsbWVzLmdldExpbmUoKSArIiwgIiArIHZhbG1lcy5nZXRDb2x1bW4oKSArIl1cbiIpOwotICAgICAgICAgZXJyb3JzU3RyaW5nLmFwcGVuZChjcmVhdGVOZXN0ZWRNZXNzYWdlU3RyaW5nKHZhbG1lcy5nZXROZXN0ZWRNZXNzYWdlcygpKSk7Ci0gICAgICAgfQotICAgICB9Ci0gICAgIFN0cmluZ0J1ZmZlciBsb2cgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgIGxvZy5hcHBlbmQoIm51bWJlciBvZiBlcnJvcnMgICAgICA6ICIgKyBudW1lcnJvcnMgKyAiXG4iKTsKLSAgICAgbG9nLmFwcGVuZCgibnVtYmVyIG9mIHdhcm5pbmdzICAgIDogIiArIG51bXdhcm5pbmdzICsgIlxuXG4iKTsKLSAgICAgbG9nLmFwcGVuZCgiLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotICAgICBpZihudW1lcnJvcnMgPT0gMCkKLSAgICAgewotICAgICAgIGxvZy5hcHBlbmQoIihub25lKVxuIik7Ci0gICAgIH0KLSAgICAgZWxzZQotICAgICB7Ci0gICAgICAgbG9nLmFwcGVuZChlcnJvcnNTdHJpbmcudG9TdHJpbmcoKSk7Ci0gICAgIH0KLSAgICAgbG9nLmFwcGVuZCgiLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotICAgICBpZihudW13YXJuaW5ncyA9PSAwKQotICAgICB7Ci0gICAgICAgbG9nLmFwcGVuZCgiKG5vbmUpXG4iKTsKLSAgICAgfQotICAgICBlbHNlCi0gICAgIHsKLSAgICAgICBsb2cuYXBwZW5kKHdhcm5pbmdzU3RyaW5nLnRvU3RyaW5nKCkpOwotICAgICB9Ci0gICAgIGxvZy5hcHBlbmQoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKLSAgIAotICAgICBEYXRhT3V0cHV0U3RyZWFtIG91dFN0cmVhbSA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRmlsZSBsb2dmaWxlID0gbmV3IEZpbGUoZmlsZW5hbWUpOwotICAgICAgRmlsZSBwYXJlbnQgPSBsb2dmaWxlLmdldFBhcmVudEZpbGUoKTsKLSAgCWlmICghcGFyZW50LmV4aXN0cygpKSAKLSAgCXsKLSAgCSAgcGFyZW50Lm1rZGlycygpOwotICAJfQotICAgICAgaWYobG9nZmlsZS5leGlzdHMoKSkKLSAgICAgIHsKLSAgICAgICAgbG9nZmlsZS5kZWxldGUoKTsKLSAgICAgIH0KLSAgICAgIGxvZ2ZpbGUuY3JlYXRlTmV3RmlsZSgpOwotICAgICAgCi0gICAgICBvdXRTdHJlYW0gPSBuZXcgRGF0YU91dHB1dFN0cmVhbShuZXcgRmlsZU91dHB1dFN0cmVhbShmaWxlbmFtZSwgdHJ1ZSkpOwotICAgICAgb3V0U3RyZWFtLndyaXRlQnl0ZXMobG9nLnRvU3RyaW5nKCkpOwotICAgICAgb3V0U3RyZWFtLmNsb3NlKCk7Ci0KLSAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vIElmIHdlIGNhbid0IHdyaXRlIHRoZSBsb2cgdGhlbiBjbGVhciB0aGUgbG9nLgotICAgICAgbG9nLmRlbGV0ZSgwLCBsb2cubGVuZ3RoKCkpOwotICAgIH0KLSAgICByZXR1cm4gbG9nLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgU3RyaW5nIGdldFBsdWdpbk5hbWUoKQotICB7Ci0gICAgcmV0dXJuIFBMVUdJTl9OQU1FOwotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBjcmVhdGVOZXN0ZWRNZXNzYWdlU3RyaW5nKExpc3QgbmVzdGVkTWVzc2FnZXMpCi0gIHsKLSAgICByZXR1cm4gY3JlYXRlTmVzdGVkTWVzc2FnZVN0cmluZyhuZXN0ZWRNZXNzYWdlcywgMCk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGNyZWF0ZU5lc3RlZE1lc3NhZ2VTdHJpbmcoTGlzdCBuZXN0ZWRNZXNzYWdlcywgaW50IGRlcHRoKQotICB7Ci0gICAgaWYobmVzdGVkTWVzc2FnZXMgIT0gbnVsbCAmJiBuZXN0ZWRNZXNzYWdlcy5zaXplKCkgPiAwKQotICAgIHsKLSAgICAgIFN0cmluZyBtZXNzYWdlU3RyaW5nID0gIiI7Ci0gICAgICBJdGVyYXRvciBuZXN0ZWRNZXNJdGVyID0gbmVzdGVkTWVzc2FnZXMuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlKG5lc3RlZE1lc0l0ZXIuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBJVmFsaWRhdGlvbk1lc3NhZ2UgbmVzdmFsbWVzID0gKElWYWxpZGF0aW9uTWVzc2FnZSluZXN0ZWRNZXNJdGVyLm5leHQoKTsKLSAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IGRlcHRoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBtZXNzYWdlU3RyaW5nICs9ICIgIjsKLSAgICAgICAgfQotICAgICAgICAvLyBJZiB0aGUgbWVzc2FnZSBjb250YWlucyBhbnkgZmlsZSByZWZlcmVuY2VzIG1ha2UgdGhlbSByZWxhdGl2ZS4KLSAgICAgICAgU3RyaW5nIG1lc3NhZ2UgPSBuZXN2YWxtZXMuZ2V0TWVzc2FnZSgpOwotICAgICAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlQWxsKCInW14nXSoiICsgZ2V0UGx1Z2luTmFtZSgpICsgIlteJy9dKi8iLCAiJyIpOwotICAgICAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlQWxsKCJbKF1bXihdKiIgKyBnZXRQbHVnaW5OYW1lKCkgKyAiW14nL10qLyIsICJbKF0iKTsKLSAgICAgICAgbWVzc2FnZVN0cmluZyArPSAoIi0+ICIgKyBtZXNzYWdlICsgIiBbIiArIG5lc3ZhbG1lcy5nZXRMaW5lKCkgKyIsICIgKyBuZXN2YWxtZXMuZ2V0Q29sdW1uKCkgKyJdXG4iKTsKLSAgICAgICAgbWVzc2FnZVN0cmluZyArPSBjcmVhdGVOZXN0ZWRNZXNzYWdlU3RyaW5nKG5lc3ZhbG1lcy5nZXROZXN0ZWRNZXNzYWdlcygpLCBkZXB0aCArIDEpOwotICAgICAgfQotICAgICAgcmV0dXJuIG1lc3NhZ2VTdHJpbmc7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXR1cm4gIiI7Ci0gICAgfQotICB9Ci0gIAotICAvKioKLSAgICogQ3JlYXRlIGEgcHJvamVjdCBpbiB0aGUgd29ya3NwYWNlIHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kCi0gICAqIGFkZCB0aGUgc3BlY2lmaWVkIGZpbGVzIHRvIHRoZSBwcm9qZWN0LgotICAgKiAKLSAgICogQHBhcmFtIHByb2plY3ROYW1lIFRoZSBuYW1lIGZvciB0aGUgcHJvamVjdC4KLSAgICogQHBhcmFtIGZpbGVzIEFuIGFycmF5IG9mIGZpbGUgbmFtZXMgaW4gdGhlIGZpbGUgc3lzdGVtIHRoYXQKLSAgICogICAgICAgICAgICAgIHdpbGwgYmUgY29waWVkIGludG8gdGhlIHByb2plY3QuCi0gICAqIEByZXR1cm4gVGhlIGNyZWF0ZWQgcHJvamVjdC4KLSAgICovCi0gIHByb3RlY3RlZCBJUHJvamVjdCBjcmVhdGVTaW1wbGVQcm9qZWN0KFN0cmluZyBwcm9qZWN0TmFtZSwgU3RyaW5nW10gZmlsZXMpCi0gIHsKLSAgICBmaW5hbCBJV29ya3NwYWNlIHdvcmtzcGFjZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKTsKLSAgICBmaW5hbCBJUHJvamVjdCBwcm9qZWN0ID0gd29ya3NwYWNlLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLSAgICBpZighcHJvamVjdC5leGlzdHMoKSkKLSAgICB7Ci0gICAgICB0cnkKLQkgIHsKLSAgICAgICAgcHJvamVjdC5jcmVhdGUobnVsbCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaChDb3JlRXhjZXB0aW9uIGUpCi0JICB7Ci0gICAgICAgIGZhaWwoIkNvdWxkIG5vdCBjcmVhdGUgcHJvamVjdCAiICsgcHJvamVjdE5hbWUgKyBlKTsKLSAgICAgIH0gCi0gICAgfQotICAgIGlmKCFwcm9qZWN0LmlzT3BlbigpKQotICAgIHsKLSAgICAgIHRyeQotCSAgewotICAgICAgICBwcm9qZWN0Lm9wZW4obnVsbCk7Ci0JICB9Ci0gICAgICBjYXRjaChDb3JlRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIGZhaWwoIkNvdWxkIG5vdCBvcGVuIHByb2plY3QgIiArIHByb2plY3ROYW1lICsgZSk7Ci0JICB9Ci0gICAgfQotICAgIHRyeQotICAgIHsKLSAgICAgIElQcm9qZWN0RGVzY3JpcHRpb24gcHJvamVjdERlc2NyaXB0aW9uID0gcHJvamVjdC5nZXREZXNjcmlwdGlvbigpOyAKLSAgICAgIHByb2plY3REZXNjcmlwdGlvbi5zZXROYW1lKHByb2plY3ROYW1lKTsKLSAgICAgIHByb2plY3Quc2V0RGVzY3JpcHRpb24ocHJvamVjdERlc2NyaXB0aW9uLCBudWxsKTsKLSAgICB9Ci0gICAgY2F0Y2goRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZmFpbCgiVW5hYmxlIHRvIHNldCBwcm9qZWN0IHByb3BlcnRpZXMgZm9yIHByb2plY3QgIiArIHByb2plY3ROYW1lICsgIi4gIiArIGUpOwotICAgIH0KLQotICAgIGlmKGZpbGVzICE9IG51bGwpCi0gICAgewotICAgICAgaW50IG51bWZpbGVzID0gZmlsZXMubGVuZ3RoOwotICAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bWZpbGVzOyBpKyspCi0gICAgICB7Ci0gICAgICAgIHRyeQotCQl7Ci0gICAgICAgICAgU3RyaW5nIGZpbGVuYW1lID0gZmlsZXNbaV07Ci0gICAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5yZXBsYWNlKCdcXCcsJy8nKTsKLSAgICAgICAgICAKLSAgICAgICAgICBGaWxlIGZpbGUgPSBuZXcgRmlsZShmaWxlbmFtZSk7Ci0gICAgICAgICAgRmlsZUlucHV0U3RyZWFtIGluID0gbmV3IEZpbGVJbnB1dFN0cmVhbShmaWxlKTsKLSAgICAgICAgICBJRmlsZSBpRmlsZSA9IHByb2plY3QuZ2V0RmlsZShmaWxlLmdldE5hbWUoKSk7Ci0gICAgICAgICAgaWYoIWlGaWxlLmV4aXN0cygpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlGaWxlLmNyZWF0ZShpbiwgdHJ1ZSwgbnVsbCk7Ci0gICAgICAgICAgICBpbi5jbG9zZSgpOwotICAgICAgICAgIH0KLQkJfQotICAgICAgICBjYXRjaChFeGNlcHRpb24gZSkKLQkJewotCQkgIGZhaWwoIlVuYWJsZSB0byBsb2NhdGUgZmlsZSAiICsgZmlsZXNbaV0pOwotCQl9IAotICAgICAgfQotICAgIH0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBwcm9qZWN0LnJlZnJlc2hMb2NhbCgtMSwgbnVsbCk7Ci0gICAgfQotICAgIGNhdGNoKEV4Y2VwdGlvbiBlKQotICAgIHt9Ci0gICAgcmV0dXJuIHByb2plY3Q7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvTGluZU51bWJlckFkanVzdG1lbnRzVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9MaW5lTnVtYmVyQWRqdXN0bWVudHNUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjMjk1MzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9MaW5lTnVtYmVyQWRqdXN0bWVudHNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWw7Ci0KLS8qKgotICogVGVzdHMgZm9yIGxpbmUgbnVtYmVyIGFkanVzdG1lbnRzIGluIHRoZSBXU0RMIHZhbGlkYXRvcidzCi0gKiBYTUwgdmFsaWRhdG9yLgotICovCi1wdWJsaWMgY2xhc3MgTGluZU51bWJlckFkanVzdG1lbnRzVGVzdCBleHRlbmRzIEJhc2VUZXN0Q2FzZSAKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgTElORV9OVU1CRVJfQURKVVNUTUVOVFNfRElSID0gIkxpbmVOdW1iZXJBZGp1c3RtZW50cy8iOwotCi0gIC8qKgotICAgKiBUZXN0IC9MaW5lTnVtYmVyQWRqdXN0bWVudHMvY3ZjLWNvbXBsZXgtdHlwZS4yLjMvY3ZjLWNvbXBsZXgtdHlwZS4yLjMud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdGN2Y2NvbXBsZXh0eXBlMjMoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gImN2Yy1jb21wbGV4LXR5cGUuMi4zIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIExJTkVfTlVNQkVSX0FESlVTVE1FTlRTX0RJUiArICJjdmMtY29tcGxleC10eXBlLjIuMy8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgTElORV9OVU1CRVJfQURKVVNUTUVOVFNfRElSICsgImN2Yy1jb21wbGV4LXR5cGUuMi4zLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIExJTkVfTlVNQkVSX0FESlVTVE1FTlRTX0RJUiArICJjdmMtY29tcGxleC10eXBlLjIuMy8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9MaW5lTnVtYmVyQWRqdXN0bWVudHMvY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYi9jdmMtY29tcGxleC10eXBlLjIuNC5iLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RjdmNjb21wbGV4dHlwZTI0YigpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYiI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBMSU5FX05VTUJFUl9BREpVU1RNRU5UU19ESVIgKyAiY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYi8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgTElORV9OVU1CRVJfQURKVVNUTUVOVFNfRElSICsgImN2Yy1jb21wbGV4LXR5cGUuMi40LmIvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgTElORV9OVU1CRVJfQURKVVNUTUVOVFNfRElSICsgImN2Yy1jb21wbGV4LXR5cGUuMi40LmIvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL1BhdGhzVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9QYXRoc1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGFkMWUzMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NkbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL1BhdGhzVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTg1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLS8qKgotICogVGVzdHMgZm9yIGZpbGUgcGF0aHMuCi0gKi8KLXB1YmxpYyBjbGFzcyBQYXRoc1Rlc3QgZXh0ZW5kcyBCYXNlVGVzdENhc2UKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgUEFUSFNfRElSID0gIlBhdGhzLyI7Ci0gIAotICAvKioKLSAgICogQ3JlYXRlIGEgdGVzdHMgc3VpdGUgZnJvbSB0aGlzIHRlc3QgY2xhc3MuCi0gICAqIAotICAgKiBAcmV0dXJuIEEgdGVzdCBzdWl0ZSBjb250YWluaW5nIHRoaXMgdGVzdCBjbGFzcy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShQYXRoc1Rlc3QuY2xhc3MpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgc3VwZXIuc2V0VXAoKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIC8vIERlbGV0ZSB0aGUgc2ltcGxlIHByb2plY3QgZm9yIEltcG9ydGVkU2NoZW1hV2l0aFNjaGVtYUltcG9ydCB0ZXN0Ci0gICAgc3VwZXIudGVhckRvd24oKTsKLSAgfQotCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhWYWxpZC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U3BhY2VJblBhdGhWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiU3BhY2VJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2UgSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2UgSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZSBJblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoSW52YWxpZC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U3BhY2VJblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJTcGFjZUluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlIEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlIEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2UgSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aFZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RBbmdsZUhhdEluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJBbmdsZUhhdEluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdF5JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdF5JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0XkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhJbnZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RBbmdsZUhhdEluUGF0aEludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkFuZ2xlSGF0SW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXReSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXReSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdF5JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0QW5nbGVIYXRJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkFuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RBbmdsZUhhdEluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJBbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvQ2xvc2VCcmFja2V0KUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhWYWxpZC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Q2xvc2VCcmFja2V0SW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkNsb3NlQnJhY2tldEluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXQpSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0KUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0KUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9DbG9zZUJyYWNrZXQpSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aEludmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdENsb3NlQnJhY2tldEluUGF0aEludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkNsb3NlQnJhY2tldEluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldClJblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXQpSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXQpSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0KUluRmlsZW5hbWVWYWxpZC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Q2xvc2VCcmFja2V0SW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJDbG9zZUJyYWNrZXQpSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0Nsb3NlQnJhY2tldClJbkZpbGVuYW1lSW52YWxpZC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Q2xvc2VCcmFja2V0SW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkNsb3NlQnJhY2tldClJbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aFZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3REYXNoSW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkRhc2hJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaC1JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoLUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaC1JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aEludmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdERhc2hJblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJEYXNoSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaC1JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoLUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaC1JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lVmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdERhc2hJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkRhc2gtSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkRhc2hJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVJbnZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3REYXNoSW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkRhc2gtSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkRhc2hJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkRhc2hJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0V4Y2xhbWF0aW9uIUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aFZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RFeGNsYW1hdGlvbkluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJFeGNsYW1hdGlvbkluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbiFJblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbiFJblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uIUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9FeGNsYW1hdGlvbiFJblBhdGgvRXhjbGFtYXRpb25JblBhdGhJbnZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RFeGNsYW1hdGlvbkluUGF0aEludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkV4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb24hSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb24hSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbiFJblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uIUluRmlsZW5hbWVWYWxpZC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0RXhjbGFtYXRpb25JbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkV4Y2xhbWF0aW9uIUluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb25JbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb25JbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbkluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uIUluRmlsZW5hbWVJbnZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RFeGNsYW1hdGlvbkluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJFeGNsYW1hdGlvbiFJbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb25JbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb25JbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbkluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvT3BlbkJyYWNrZXQoSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoVmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE9wZW5CcmFja2V0SW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIk9wZW5CcmFja2V0SW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0KEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0KEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXQoSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL09wZW5CcmFja2V0KEluUGF0aC9PcGVuQnJhY2tldEluUGF0aEludmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE9wZW5CcmFja2V0SW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiT3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldChJblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldChJblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0KEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXQoSW5GaWxlbmFtZVZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RPcGVuQnJhY2tldEluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiT3BlbkJyYWNrZXQoSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXQoSW5GaWxlbmFtZUludmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE9wZW5CcmFja2V0SW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIk9wZW5CcmFja2V0KEluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aFZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RQZXJpb2RJblBhdGhWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiUGVyaW9kSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZC5JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2QuSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2QuSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoSW52YWxpZC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UGVyaW9kSW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiUGVyaW9kSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kLkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZC5JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZC5JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZVZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RQZXJpb2RJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlBlcmlvZC5JbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2RJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2RJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RQZXJpb2RJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiUGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2RJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9RdW90ZSdJblBhdGgvUXVvdGVJblBhdGhWYWxpZC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UXVvdGVJblBhdGhWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiUXVvdGVJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGUnSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGUnSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZSdJblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUXVvdGUnSW5QYXRoL1F1b3RlSW5QYXRoSW52YWxpZC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UXVvdGVJblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJRdW90ZUluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlJ0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlJ0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGUnSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZSdJbkZpbGVuYW1lVmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFF1b3RlSW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJRdW90ZSdJbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZSdJbkZpbGVuYW1lSW52YWxpZC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UXVvdGVJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiUXVvdGUnSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lVmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFNwYWNlSW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJTcGFjZSBJbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2VJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lSW52YWxpZC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U3BhY2VJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiU3BhY2UgSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2VJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aFZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RUaWxkZUluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJUaWxkZUluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZX5JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZX5JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlfkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhJbnZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RUaWxkZUluUGF0aEludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlRpbGRlSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGV+SW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGV+SW5QYXRoLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZX5JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVWYWxpZC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VGlsZGVJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlRpbGRlfkluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVJbnZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RUaWxkZUluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJUaWxkZX5JbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aFZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RVbmRlcnNjb3JlSW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlVuZGVyc2NvcmVJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZV9JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlX0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZV9JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aEludmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFVuZGVyc2NvcmVJblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJVbmRlcnNjb3JlSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZV9JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlX0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZV9JblBhdGgvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFVuZGVyc2NvcmVJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlVuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RVbmRlcnNjb3JlSW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlVuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1BsYXRmb3JtVVJML29uZS53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UGxhdGZvcm1VUkwoKQotICB7Ci0JU3RyaW5nIHRlc3RuYW1lID0gIm9uZSI7Ci0JU3RyaW5nIHRlc3RmaWxlID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJQbGF0Zm9ybVVSTC8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotCVN0cmluZyB0ZXN0ZmlsZTIgPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlBsYXRmb3JtVVJML3R3by53c2RsIjsKLQlTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQbGF0Zm9ybVVSTC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLQlTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUGxhdGZvcm1VUkwvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0JIAotCWNyZWF0ZVNpbXBsZVByb2plY3QoInRlc3QiLCBuZXcgU3RyaW5nW117dGVzdGZpbGUsdGVzdGZpbGUyfSk7Ci0JCi0JcnVuVGVzdChGSUxFX1BST1RPQ09MICsgdGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9XU0RMVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9XU0RMVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxM2FjODc2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvV1NETFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi0vKioKLSAqIFdTREwgdmFsaWRhdGlvbiB0ZXN0cyBmb3IgdGhlIFdTREwgdmFsaWRhdG9yLgotICovCi1wdWJsaWMgY2xhc3MgV1NETFRlc3QgZXh0ZW5kcyBCYXNlVGVzdENhc2UKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgV1NETF9ESVIgPSAiV1NETC8iOwotICAKLSAgLyoqCi0gICAqIENyZWF0ZSBhIHRlc3RzIHN1aXRlIGZyb20gdGhpcyB0ZXN0IGNsYXNzLgotICAgKiAKLSAgICogQHJldHVybiBBIHRlc3Qgc3VpdGUgY29udGFpbmluZyB0aGlzIHRlc3QgY2xhc3MuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoV1NETFRlc3QuY2xhc3MpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgc3VwZXIuc2V0VXAoKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIC8vIERlbGV0ZSB0aGUgc2ltcGxlIHByb2plY3QgZm9yIEltcG9ydGVkU2NoZW1hV2l0aFNjaGVtYUltcG9ydCB0ZXN0Ci0gICAgc3VwZXIudGVhckRvd24oKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIElNUE9SVCBURVNUUwotICAgKi8KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9XU0RML0ltcG9ydC9JbXBvcnRTY2hlbWFXaXRoV1NETEltcG9ydC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0U2NoZW1hV2l0aFdTRExJbXBvcnQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydFNjaGVtYVdpdGhXU0RMSW1wb3J0IjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9XU0RML0ltcG9ydC9JbXBvcnRTY2hlbWFXaXRoV1NETEltcG9ydEludmFsaWROUy53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0U2NoZW1hV2l0aFdTRExJbXBvcnRJbnZhbGlkTlMoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydFNjaGVtYVdpdGhXU0RMSW1wb3J0SW52YWxpZE5TIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9XU0RML0ltcG9ydC9JbXBvcnRXU0RMV2l0aFdTREwud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFdTRExXaXRoV1NETCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0V1NETFdpdGhXU0RMIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvSW1wb3J0L0ltcG9ydFdTRExXaXRoV1NETEludmFsaWROUy53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0V1NETFdpdGhXU0RMSW52YWxpZE5TKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRXU0RMV2l0aFdTRExJbnZhbGlkTlMiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvSW1wb3J0L0ltcG9ydFdTRExXaXRoV1NETEludmFsaWRGaWxlbmFtZS53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0V1NETFdpdGhXU0RMSW52YWxpZEZpbGVuYW1lKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRXU0RMV2l0aFdTRExJbnZhbGlkRmlsZW5hbWUiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvSW1wb3J0L1dTRExJbXBvcnRpbmdUeXBlcy53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0V1NETEltcG9ydGluZ1R5cGVzKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJXU0RMSW1wb3J0aW5nVHlwZXMiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvSW1wb3J0L0ltcG9ydE5vbkV4aXN0YW50RmlsZS53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0Tm9uRXhpc3RhbnRGaWxlKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnROb25FeGlzdGFudEZpbGUiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvSW1wb3J0L1dTRExOYW1lc3BhY2VBQUEud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFdTRExOYW1lc3BhY2VBQUEoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIldTRExOYW1lc3BhY2VBQUEiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvSW1wb3J0L0ltcG9ydGluZ1dTRExXaXRoSW1wb3J0ZWRTY2hlbWEud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydGluZ1dTRExXaXRoSW1wb3J0ZWRTY2hlbWEoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydGluZ1dTRExXaXRoSW1wb3J0ZWRTY2hlbWEiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvSW1wb3J0L1dTRExJbXBvcnRpbmdTY2hlbWFJbm1wb3J0aW5nU2NoZW1hLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RXU0RMSW1wb3J0aW5nU2NoZW1hSW5tcG9ydGluZ1NjaGVtYSgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiV1NETEltcG9ydGluZ1NjaGVtYUltcG9ydGluZ1NjaGVtYSI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9JbXBvcnQvSW1wb3J0WE1MSW52YWxpZFdTREwvSW1wb3J0WE1MSW52YWxpZFdTREwud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFhNTEludmFsaWRXU0RMKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRYTUxJbnZhbGlkV1NETCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvSW1wb3J0WE1MSW52YWxpZFdTREwvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC9JbXBvcnRYTUxJbnZhbGlkV1NETC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvSW1wb3J0WE1MSW52YWxpZFdTREwvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9JbXBvcnQvQWxwaGFiZXRpY2FsT3JkZXJPZkltcG9ydHMvSW1wb3J0T25lQW5kVHdvLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRPbmVBbmRUd28oKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydE9uZUFuZFR3byI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvQWxwaGFiZXRpY2FsT3JkZXJPZkltcG9ydHMvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC9BbHBoYWJldGljYWxPcmRlck9mSW1wb3J0cy8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvQWxwaGFiZXRpY2FsT3JkZXJPZkltcG9ydHMvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9JbXBvcnQvQWxwaGFiZXRpY2FsT3JkZXJPZkltcG9ydHMvb25lLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRPbmVBbmRUd29fT25lKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJvbmUiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvQWxwaGFiZXRpY2FsT3JkZXJPZkltcG9ydHMvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzL3R3by53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0T25lQW5kVHdvX1R3bygpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAidHdvIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC9BbHBoYWJldGljYWxPcmRlck9mSW1wb3J0cy8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC9BbHBoYWJldGljYWxPcmRlck9mSW1wb3J0cy8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9XU0RML0ltcG9ydC9JbXBvcnRFbXB0eUxvY2F0aW9uL0ltcG9ydEVtcHR5TG9jYXRpb24ud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydEVtcHR5TG9jYXRpb24oKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydEVtcHR5TG9jYXRpb24iOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0L0ltcG9ydEVtcHR5TG9jYXRpb24vIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC9JbXBvcnRFbXB0eUxvY2F0aW9uLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC9JbXBvcnRFbXB0eUxvY2F0aW9uLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvSW1wb3J0L0ltcG9ydEVtcHR5TmFtZXNwYWNlL0ltcG9ydEVtcHR5TmFtZXNwYWNlLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRFbXB0eU5hbWVzcGFjZSgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0RW1wdHlOYW1lc3BhY2UiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0L0ltcG9ydEVtcHR5TmFtZXNwYWNlLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvSW1wb3J0RW1wdHlOYW1lc3BhY2UvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0L0ltcG9ydEVtcHR5TmFtZXNwYWNlLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvSW1wb3J0L0ltcG9ydEVtcHR5TmFtZXNwYWNlQW5kTG9jYXRpb24vSW1wb3J0RW1wdHlOYW1lc3BhY2VBbmRMb2NhdGlvbi53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0RW1wdHlOYW1lc3BhY2VBbmRMb2NhdGlvbigpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0RW1wdHlOYW1lc3BhY2VBbmRMb2NhdGlvbiI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvSW1wb3J0RW1wdHlOYW1lc3BhY2VBbmRMb2NhdGlvbi8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0L0ltcG9ydEVtcHR5TmFtZXNwYWNlQW5kTG9jYXRpb24vIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0L0ltcG9ydEVtcHR5TmFtZXNwYWNlQW5kTG9jYXRpb24vIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9JbXBvcnQvSW1wb3J0Tm9Mb2NhdGlvbkF0dHJpYnV0ZS9JbXBvcnROb0xvY2F0aW9uQXR0cmlidXRlLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnROb0xvY2F0aW9uQXR0cmlidXRlKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnROb0xvY2F0aW9uQXR0cmlidXRlIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC9JbXBvcnROb0xvY2F0aW9uQXR0cmlidXRlLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvSW1wb3J0Tm9Mb2NhdGlvbkF0dHJpYnV0ZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvSW1wb3J0Tm9Mb2NhdGlvbkF0dHJpYnV0ZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9XU0RML0ltcG9ydC9TaW1wbGVJbXBvcnQvdGVzdC0xLjAud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFNpbXBsZUltcG9ydCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAidGVzdC0xLjAiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0L1NpbXBsZUltcG9ydC8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0L1NpbXBsZUltcG9ydC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbXBvcnQvU2ltcGxlSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvSW1wb3J0L0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC9JbXBvcnRXaXRoSW5jb3JyZWN0U2xhc2gud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC9JbXBvcnRXaXRoSW5jb3JyZWN0U2xhc2gvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC9JbXBvcnRXaXRoSW5jb3JyZWN0U2xhc2gvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0L0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9XU0RML0ltcG9ydC9Ob1NjaGVtZVNjaGVtYU5hbWVzcGFjZUltcG9ydC9Ob1NjaGVtZVNjaGVtYU5hbWVzcGFjZUltcG9ydC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Tm9TY2hlbWVTY2hlbWFOYW1lc3BhY2VJbXBvcnQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIk5vU2NoZW1lU2NoZW1hTmFtZXNwYWNlSW1wb3J0IjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC9Ob1NjaGVtZVNjaGVtYU5hbWVzcGFjZUltcG9ydC8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW1wb3J0L05vU2NoZW1lU2NoZW1hTmFtZXNwYWNlSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkltcG9ydC9Ob1NjaGVtZVNjaGVtYU5hbWVzcGFjZUltcG9ydC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBDWUNMSUMgVEVTVFMKLSAgICovCi0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9DeWNsaWMvUG9ydHR5cGVSZWZNZXNzYWdlMS53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UG9ydHR5cGVSZWZNZXNzYWdlMSgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiUG9ydHR5cGVSZWZNZXNzYWdlMSI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJDeWNsaWMvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkN5Y2xpYy8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJDeWNsaWMvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9DeWNsaWMvUG9ydHR5cGVSZWZNZXNzYWdlMi53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UG9ydHR5cGVSZWZNZXNzYWdlMigpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiUG9ydHR5cGVSZWZNZXNzYWdlMiI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJDeWNsaWMvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkN5Y2xpYy8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJDeWNsaWMvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9TZWxmQ29udGFpbmVkL1JlZmVyZW5jZUlubGluZVR5cGVzLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RSZWZlcmVuY2VJbmxpbmVUeXBlcygpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiUmVmZXJlbmNlSW5saW5lVHlwZXMiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiU2VsZkNvbnRhaW5lZC8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiU2VsZkNvbnRhaW5lZC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJTZWxmQ29udGFpbmVkLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvU2VsZkNvbnRhaW5lZC9FbXB0eS53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0RW1wdHkoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkVtcHR5IjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFdTRExfRElSICsgIlNlbGZDb250YWluZWQvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIlNlbGZDb250YWluZWQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiU2VsZkNvbnRhaW5lZC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9XU0RML1NlbGZDb250YWluZWQvU09BUEJvZHlFbmNvZGVkTm9OYW1lc3BhY2Uud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFNPQVBCb2R5RW5jb2RlZE5vTmFtZXNwYWNlKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJTT0FQQm9keUVuY29kZWROb05hbWVzcGFjZSI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJTZWxmQ29udGFpbmVkLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJTZWxmQ29udGFpbmVkLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIlNlbGZDb250YWluZWQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9TZWxmQ29udGFpbmVkL1NPQVBCb2R5RW5jb2RlZFdpdGhOYW1lc3BhY2Uud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFNPQVBCb2R5RW5jb2RlZFdpdGhOYW1lc3BhY2UoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlNPQVBCb2R5RW5jb2RlZFdpdGhOYW1lc3BhY2UiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiU2VsZkNvbnRhaW5lZC8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiU2VsZkNvbnRhaW5lZC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJTZWxmQ29udGFpbmVkLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvU2VsZkNvbnRhaW5lZC9Ob0RlZmF1bHROYW1lc3BhY2UvTm9EZWZhdWx0TmFtZXNwYWNlLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3ROb0RlZmF1bHROYW1lc3BhY2UoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIk5vRGVmYXVsdE5hbWVzcGFjZSI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJTZWxmQ29udGFpbmVkL05vRGVmYXVsdE5hbWVzcGFjZS8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiU2VsZkNvbnRhaW5lZC9Ob0RlZmF1bHROYW1lc3BhY2UvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiU2VsZkNvbnRhaW5lZC9Ob0RlZmF1bHROYW1lc3BhY2UvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9CaW5kaW5nRWxlbWVudC9JbnZhbGlkU3R5bGUvQmluZGluZ0ludmFsaWRTdHlsZS53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0QmluZGluZ0ludmFsaWRTdHlsZSgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiQmluZGluZ0ludmFsaWRTdHlsZSI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJCaW5kaW5nRWxlbWVudC9JbnZhbGlkU3R5bGUvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIkJpbmRpbmdFbGVtZW50L0ludmFsaWRTdHlsZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJCaW5kaW5nRWxlbWVudC9JbnZhbGlkU3R5bGUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9CaW5kaW5nRWxlbWVudC9JbnZhbGlkVXNlL0JpbmRpbmdJbnZhbGlkVXNlLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RCaW5kaW5nSW52YWxpZFVzZSgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiQmluZGluZ0ludmFsaWRVc2UiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiQmluZGluZ0VsZW1lbnQvSW52YWxpZFVzZS8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiQmluZGluZ0VsZW1lbnQvSW52YWxpZFVzZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJCaW5kaW5nRWxlbWVudC9JbnZhbGlkVXNlLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvTWVzc2FnZUVsZW1lbnQvSW52YWxpZEVsZW1lbnQvTWVzc2FnZUludmFsaWRFbGVtZW50LndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RNZXNzYWdlSW52YWxpZEVsZW1lbnQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIk1lc3NhZ2VJbnZhbGlkRWxlbWVudCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJNZXNzYWdlRWxlbWVudC9JbnZhbGlkRWxlbWVudC8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiTWVzc2FnZUVsZW1lbnQvSW52YWxpZEVsZW1lbnQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiTWVzc2FnZUVsZW1lbnQvSW52YWxpZEVsZW1lbnQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9NZXNzYWdlRWxlbWVudC9JbnZhbGlkVHlwZS9NZXNzYWdlSW52YWxpZFR5cGUud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE1lc3NhZ2VJbnZhbGlkVHlwZSgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiTWVzc2FnZUludmFsaWRUeXBlIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFdTRExfRElSICsgIk1lc3NhZ2VFbGVtZW50L0ludmFsaWRUeXBlLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJNZXNzYWdlRWxlbWVudC9JbnZhbGlkVHlwZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJNZXNzYWdlRWxlbWVudC9JbnZhbGlkVHlwZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9XU0RML1BvcnRUeXBlRWxlbWVudC9JbnZhbGlkSW5wdXQvUG9ydFR5cGVJbnZhbGlkSW5wdXQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFBvcnRUeXBlSW52YWxpZElucHV0KCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJQb3J0VHlwZUludmFsaWRJbnB1dCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJQb3J0VHlwZUVsZW1lbnQvSW52YWxpZElucHV0LyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJQb3J0VHlwZUVsZW1lbnQvSW52YWxpZElucHV0LyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIlBvcnRUeXBlRWxlbWVudC9JbnZhbGlkSW5wdXQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9Qb3J0VHlwZUVsZW1lbnQvSW52YWxpZE91dHB1dC9Qb3J0VHlwZUludmFsaWRPdXRwdXQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFBvcnRUeXBlSW52YWxpZE91dHB1dCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiUG9ydFR5cGVJbnZhbGlkT3V0cHV0IjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFdTRExfRElSICsgIlBvcnRUeXBlRWxlbWVudC9JbnZhbGlkT3V0cHV0LyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJQb3J0VHlwZUVsZW1lbnQvSW52YWxpZE91dHB1dC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJQb3J0VHlwZUVsZW1lbnQvSW52YWxpZE91dHB1dC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9XU0RML1NlcnZpY2VFbGVtZW50L0ludmFsaWRCaW5kaW5nL1NlcnZpY2VJbnZhbGlkQmluZGluZy53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U2VydmljZUludmFsaWRCaW5kaW5nKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJTZXJ2aWNlSW52YWxpZEJpbmRpbmciOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiU2VydmljZUVsZW1lbnQvSW52YWxpZEJpbmRpbmcvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIlNlcnZpY2VFbGVtZW50L0ludmFsaWRCaW5kaW5nLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIlNlcnZpY2VFbGVtZW50L0ludmFsaWRCaW5kaW5nLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvU2VydmljZUVsZW1lbnQvTm9BZGRyZXNzL1NlcnZpY2VOb0FkZHJlc3Mud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFNlcnZpY2VOb0FkZHJlc3MoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlNlcnZpY2VOb0FkZHJlc3MiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiU2VydmljZUVsZW1lbnQvTm9BZGRyZXNzLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJTZXJ2aWNlRWxlbWVudC9Ob0FkZHJlc3MvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiU2VydmljZUVsZW1lbnQvTm9BZGRyZXNzLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvQ2FzZUluc2Vuc2l0aXZlT3BlcmF0aW9uTmFtZXMvQ2FzZUluc2Vuc2l0aXZlT3BlcmF0aW9uTmFtZXMud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdENhc2VJbnNlbnNpdGl2ZU9wZXJhdGlvbk5hbWVzKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJDYXNlSW5zZW5zaXRpdmVPcGVyYXRpb25OYW1lcyI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJDYXNlSW5zZW5zaXRpdmVPcGVyYXRpb25OYW1lcy8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiQ2FzZUluc2Vuc2l0aXZlT3BlcmF0aW9uTmFtZXMvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiQ2FzZUluc2Vuc2l0aXZlT3BlcmF0aW9uTmFtZXMvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9OYW1lc3BhY2VEb2VzbnRSZXNvbHZlL05hbWVzcGFjZURvZXNudFJlc29sdmUud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE5hbWVzcGFjZURvZXNudFJlc29sdmUoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIk5hbWVzcGFjZURvZXNudFJlc29sdmUiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiTmFtZXNwYWNlRG9lc250UmVzb2x2ZS8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiTmFtZXNwYWNlRG9lc250UmVzb2x2ZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJOYW1lc3BhY2VEb2VzbnRSZXNvbHZlLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvTmFtZXNwYWNlUmVzb2x2ZXNIVE1ML05hbWVzcGFjZVJlc29sdmVzSFRNTC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0TmFtZXNwYWNlUmVzb2x2ZXNIVE1MKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJOYW1lc3BhY2VSZXNvbHZlc0hUTUwiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiTmFtZXNwYWNlUmVzb2x2ZXNIVE1MLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJOYW1lc3BhY2VSZXNvbHZlc0hUTUwvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiTmFtZXNwYWNlUmVzb2x2ZXNIVE1MLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1dTREwvU2VsZkltcG9ydC9TaW1wbGVGaWxlL1NlbGZJbXBvcnQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFNpbXBsZWZpbGVTZWxmSW1wb3J0KCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJTZWxmSW1wb3J0IjsKLSAgICBTdHJpbmcgZmlsZXByZWZpeCA9IEZJTEVfUFJPVE9DT0w7Ci0gICAgLy8gTmVlZCB0byBlbnN1cmUgdGhlIFVSTCBvZiB0aGUgdGVzdCBmaWxlIGlzIGFzIGV4cGVjdGVkLgotICAgIGlmKFBMVUdJTl9BQlNPTFVURV9QQVRILnN0YXJ0c1dpdGgoIi8iKSkKLSAgICB7Ci0gICAgICBmaWxlcHJlZml4ID0gZmlsZXByZWZpeC5zdWJzdHJpbmcoMCwgZmlsZXByZWZpeC5sZW5ndGgoKS0xKTsKLSAgICB9Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gZmlsZXByZWZpeCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJTZWxmSW1wb3J0L1NpbXBsZUZpbGUvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIlNlbGZJbXBvcnQvU2ltcGxlRmlsZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJTZWxmSW1wb3J0L1NpbXBsZUZpbGUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9TZWxmSW1wb3J0L0ltcG9ydEZpbGVXaXRoU2VsZkltcG9ydC9JbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydEZpbGVXaXRoU2VsZkltcG9ydCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0RmlsZVdpdGhTZWxmSW1wb3J0IjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFdTRExfRElSICsgIlNlbGZJbXBvcnQvSW1wb3J0RmlsZVdpdGhTZWxmSW1wb3J0LyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJTZWxmSW1wb3J0L0ltcG9ydEZpbGVXaXRoU2VsZkltcG9ydC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJTZWxmSW1wb3J0L0ltcG9ydEZpbGVXaXRoU2VsZkltcG9ydC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9XU0RML1NlbGZJbXBvcnQvU2ltcGxlRmlsZUludmFsaWQvU2VsZkltcG9ydC53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlRmlsZUludmFsaWRTZWxmSW1wb3J0KCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJTZWxmSW1wb3J0IjsKLSAgICBTdHJpbmcgZmlsZXByZWZpeCA9IEZJTEVfUFJPVE9DT0w7Ci0gICAgLy8gTmVlZCB0byBlbnN1cmUgdGhlIFVSTCBvZiB0aGUgdGVzdCBmaWxlIGlzIGFzIGV4cGVjdGVkLgotICAgIGlmKFBMVUdJTl9BQlNPTFVURV9QQVRILnN0YXJ0c1dpdGgoIi8iKSkKLSAgICB7Ci0gICAgICBmaWxlcHJlZml4ID0gZmlsZXByZWZpeC5zdWJzdHJpbmcoMCwgZmlsZXByZWZpeC5sZW5ndGgoKS0xKTsKLSAgICB9Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gZmlsZXByZWZpeCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBXU0RMX0RJUiArICJTZWxmSW1wb3J0L1NpbXBsZUZpbGVJbnZhbGlkLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJTZWxmSW1wb3J0L1NpbXBsZUZpbGVJbnZhbGlkLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFdTRExfRElSICsgIlNlbGZJbXBvcnQvU2ltcGxlRmlsZUludmFsaWQvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvV1NETC9JbnZhbGlkU2NoZW1hV2l0aFBhcnRSZWZlcmVuY2VzL0ludmFsaWRTY2hlbWFXaXRoUGFydFJlZmVyZW5jZXMud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEludmFsaWRTY2hlbWFXaXRoUGFydFJlZmVyZW5jZXMoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkludmFsaWRTY2hlbWFXaXRoUGFydFJlZmVyZW5jZXMiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgV1NETF9ESVIgKyAiSW52YWxpZFNjaGVtYVdpdGhQYXJ0UmVmZXJlbmNlcy8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgV1NETF9ESVIgKyAiSW52YWxpZFNjaGVtYVdpdGhQYXJ0UmVmZXJlbmNlcy8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBXU0RMX0RJUiArICJJbnZhbGlkU2NoZW1hV2l0aFBhcnRSZWZlcmVuY2VzLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9XU0RMVmFsaWRhdG9yVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvV1NETFZhbGlkYXRvclRlc3RzUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1MWVhZWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9XU0RMVmFsaWRhdG9yVGVzdHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW47Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIFdTRExWYWxpZGF0b3JUZXN0c1BsdWdpbiBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4KLXsKLSAgLy9UaGUgc2hhcmVkIGluc3RhbmNlLgotICBwcml2YXRlIHN0YXRpYyBXU0RMVmFsaWRhdG9yVGVzdHNQbHVnaW4gcGx1Z2luOwotICBwcml2YXRlIHN0YXRpYyBCdW5kbGUgcGx1Z2luQnVuZGxlID0gbnVsbDsKLQotICAvKioKLSAgICogVGhlIGNvbnN0cnVjdG9yLgotICAgKi8KLSAgcHVibGljIFdTRExWYWxpZGF0b3JUZXN0c1BsdWdpbigpCi0gIHsKLSAgICBzdXBlcigpOwotICAgIHBsdWdpbiA9IHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHVwb24gcGx1Zy1pbiBhY3RpdmF0aW9uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIHN1cGVyLnN0YXJ0KGNvbnRleHQpOwotCXBsdWdpbkJ1bmRsZSA9IGNvbnRleHQuZ2V0QnVuZGxlKCk7Ci0gIH0KLQotICAvKioKLSAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIHBsdWctaW4gaXMgc3RvcHBlZAotICAgKi8KLSAgcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIHN1cGVyLnN0b3AoY29udGV4dCk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBXU0RMVmFsaWRhdG9yVGVzdHNQbHVnaW4gZ2V0RGVmYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gcGx1Z2luOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBpbnN0YWxsIFVSTCBvZiB0aGlzIHBsdWdpbi4KLSAgICogCi0gICAqIEByZXR1cm4gdGhlIGluc3RhbGwgdXJsIG9mIHRoaXMgcGx1Z2luCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRJbnN0YWxsVVJMKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHJldHVybiBGaWxlTG9jYXRvci5yZXNvbHZlKHBsdWdpbkJ1bmRsZS5nZXRFbnRyeSgiLyIpKS5nZXRGaWxlKCk7Ci0gICAgfQotICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2RsL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvWFNEVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9YU0RUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4ZWNjYjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzZGwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9YU0RUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotLyoqCi0gKiBYU0QgdmFsaWRhdGlvbiB0ZXN0cyBmb3IgdGhlIFdTREwgdmFsaWRhdG9yLgotICovCi1wdWJsaWMgY2xhc3MgWFNEVGVzdCBleHRlbmRzIEJhc2VUZXN0Q2FzZQotewotICBwcml2YXRlIFN0cmluZyBYU0RfRElSID0gIlhTRC8iOwotICAKLSAgLyoqCi0gICAqIENyZWF0ZSBhIHRlc3RzIHN1aXRlIGZyb20gdGhpcyB0ZXN0IGNsYXNzLgotICAgKiAKLSAgICogQHJldHVybiBBIHRlc3Qgc3VpdGUgY29udGFpbmluZyB0aGlzIHRlc3QgY2xhc3MuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoWFNEVGVzdC5jbGFzcyk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICBzdXBlci5zZXRVcCgpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvWFNEL0VudGl0aWVzL25vcm1hbGl6ZUVudGl0aWVzVmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE5vcm1hbGl6ZUVudGl0aWVzVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIm5vcm1hbGl6ZUVudGl0aWVzVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgWFNEX0RJUiArICJFbnRpdGllcy8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgWFNEX0RJUiArICJFbnRpdGllcy8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBYU0RfRElSICsgIkVudGl0aWVzLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1hTRC9FbnRpdGllcy9ub3JtYWxpemVFbnRpdGllc0ludmFsaWQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE5vcm1hbGl6ZUVudGl0aWVzSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAibm9ybWFsaXplRW50aXRpZXNJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFhTRF9ESVIgKyAiRW50aXRpZXMvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFhTRF9ESVIgKyAiRW50aXRpZXMvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgWFNEX0RJUiArICJFbnRpdGllcy8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9YU0QvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZS53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJSZWZlclRvQW5vdGhlcklubGluZVR5cGUiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgWFNEX0RJUiArICJSZWZlclRvQW5vdGhlcklubGluZVR5cGUvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFhTRF9ESVIgKyAiUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFhTRF9ESVIgKyAiUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1hTRC9SZWZlclRvQW5vdGhlcklubGluZVR5cGUvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlTm9JbXBvcnQud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFJlZmVyVG9Bbm90aGVySW5saW5lVHlwZU5vSW1wb3J0KCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJSZWZlclRvQW5vdGhlcklubGluZVR5cGVOb0ltcG9ydCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBYU0RfRElSICsgIlJlZmVyVG9Bbm90aGVySW5saW5lVHlwZS8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgWFNEX0RJUiArICJSZWZlclRvQW5vdGhlcklubGluZVR5cGUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgWFNEX0RJUiArICJSZWZlclRvQW5vdGhlcklubGluZVR5cGUvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvWFNEL0lubGluZVNjaGVtYUdlbmVyYXRlZEltcG9ydHMvTm9JbXBvcnRGb3JVbnByZWZpeGVkQXR0cmlidXRlLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3ROb0ltcG9ydEZvclVucHJlZml4ZWRBdHRyaWJ1dGUoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIk5vSW1wb3J0Rm9yVW5wcmVmaXhlZEF0dHJpYnV0ZSI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBYU0RfRElSICsgIklubGluZVNjaGVtYUdlbmVyYXRlZEltcG9ydHMvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFhTRF9ESVIgKyAiSW5saW5lU2NoZW1hR2VuZXJhdGVkSW1wb3J0cy8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBYU0RfRElSICsgIklubGluZVNjaGVtYUdlbmVyYXRlZEltcG9ydHMvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvWFNEL09uZUVycm9yRm9ySW5saW5lWFNEUmVmSW52YWxpZElubGluZVhTRC9PbmVFcnJvckZvcklubGluZVhTRFJlZkludmFsaWRJbmxpbmVYU0Qud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE9uZUVycm9yRm9ySW5saW5lWFNEUmVmSW52YWxpZElubGluZVhTRCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiT25lRXJyb3JGb3JJbmxpbmVYU0RSZWZJbnZhbGlkSW5saW5lWFNEIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFhTRF9ESVIgKyAiT25lRXJyb3JGb3JJbmxpbmVYU0RSZWZJbnZhbGlkSW5saW5lWFNELyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBYU0RfRElSICsgIk9uZUVycm9yRm9ySW5saW5lWFNEUmVmSW52YWxpZElubGluZVhTRC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBYU0RfRElSICsgIk9uZUVycm9yRm9ySW5saW5lWFNEUmVmSW52YWxpZElubGluZVhTRC8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9YU0QvU2NoZW1hRG9jRWxlbVdpdGhTb3VyY2VBbmRTdWJFbGVtL1NjaGVtYURvY0VsZW1XaXRoU291cmNlQW5kU3ViRWxlbS53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U2NoZW1hRG9jRWxlbVdpdGhTb3VyY2VBbmRTdWJFbGVtKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJTY2hlbWFEb2NFbGVtV2l0aFNvdXJjZUFuZFN1YkVsZW0iOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgWFNEX0RJUiArICJTY2hlbWFEb2NFbGVtV2l0aFNvdXJjZUFuZFN1YkVsZW0vIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFhTRF9ESVIgKyAiU2NoZW1hRG9jRWxlbVdpdGhTb3VyY2VBbmRTdWJFbGVtLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFhTRF9ESVIgKyAiU2NoZW1hRG9jRWxlbVdpdGhTb3VyY2VBbmRTdWJFbGVtLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1hTRC9SZXN0cmljdGlvblBhdHRlcm5XaXRoQ29sb24vUmVzdHJpY3Rpb25QYXR0ZXJuV2l0aENvbG9uLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RSZXN0cmljdGlvblBhdHRlcm5XaXRoQ29sb24oKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlJlc3RyaWN0aW9uUGF0dGVybldpdGhDb2xvbiI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBYU0RfRElSICsgIlJlc3RyaWN0aW9uUGF0dGVybldpdGhDb2xvbi8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgWFNEX0RJUiArICJSZXN0cmljdGlvblBhdHRlcm5XaXRoQ29sb24vIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgWFNEX0RJUiArICJSZXN0cmljdGlvblBhdHRlcm5XaXRoQ29sb24vIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvWFNEL0ltcG9ydElubGluZVNjaGVtYVdpdGhJbmNsdWRlL0ltcG9ydElubGluZVNjaGVtYVdpdGhJbmNsdWRlLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZSgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0SW5saW5lU2NoZW1hV2l0aEluY2x1ZGUiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgWFNEX0RJUiArICJJbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZS8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgWFNEX0RJUiArICJJbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBYU0RfRElSICsgIkltcG9ydElubGluZVNjaGVtYVdpdGhJbmNsdWRlLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1hTRC9WYWx1ZUNvbG9uL1ZhbHVlQ29sb24ud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFZhbHVlQ29sb24oKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlZhbHVlQ29sb24iOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgWFNEX0RJUiArICJWYWx1ZUNvbG9uLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBYU0RfRElSICsgIlZhbHVlQ29sb24vIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgWFNEX0RJUiArICJWYWx1ZUNvbG9uLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1hTRC9JbXBvcnROb05TU2NoZW1hL0ltcG9ydE5vTlNTY2hlbWEud3NkbAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydE5vTlNTY2hlbWEoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydE5vTlNTY2hlbWEiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgWFNEX0RJUiArICJJbXBvcnROb05TU2NoZW1hLyIgKyB0ZXN0bmFtZSArICIud3NkbCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBYU0RfRElSICsgIkltcG9ydE5vTlNTY2hlbWEvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgWFNEX0RJUiArICJJbXBvcnROb05TU2NoZW1hLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1hTRC9JbXBvcnROb05TU2NoZW1BbmRTZWNvbmRTY2hlbWFXaXRoTlMvSW1wb3J0Tm9OU1NjaGVtYUFuZFNlY29uZFNjaGVtYVdpdGhOUy53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0Tm9OU1NjaGVtYUFuZFNlY29uZFNjaGVtYVdpdGhOUygpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0Tm9OU1NjaGVtYUFuZFNlY29uZFNjaGVtYVdpdGhOUyI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBYU0RfRElSICsgIkltcG9ydE5vTlNTY2hlbWFBbmRTZWNvbmRTY2hlbWFXaXRoTlMvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFhTRF9ESVIgKyAiSW1wb3J0Tm9OU1NjaGVtYUFuZFNlY29uZFNjaGVtYVdpdGhOUy8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBYU0RfRElSICsgIkltcG9ydE5vTlNTY2hlbWFBbmRTZWNvbmRTY2hlbWFXaXRoTlMvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvWFNEL05vTlNFbGVtZW50UmVmZXJlbmNlL05vTlNFbGVtZW50UmVmZXJlbmNlLndzZGwKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3ROb05TRWxlbWVudFJlZmVyZW5jZSgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiTm9OU0VsZW1lbnRSZWZlcmVuY2UiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgWFNEX0RJUiArICJOb05TRWxlbWVudFJlZmVyZW5jZS8iICsgdGVzdG5hbWUgKyAiLndzZGwiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgWFNEX0RJUiArICJOb05TRWxlbWVudFJlZmVyZW5jZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBYU0RfRElSICsgIk5vTlNFbGVtZW50UmVmZXJlbmNlLyIgKyB0ZXN0bmFtZSArICIud3NkbC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1hTRC9JbmxpbmVTY2hlbWFOb05hbWVzcGFjZS9JbmxpbmVTY2hlbWFOb05hbWVzcGFjZS53c2RsCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW5saW5lU2NoZW1hTm9OYW1lc3BhY2UoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIklubGluZVNjaGVtYU5vTmFtZXNwYWNlIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFhTRF9ESVIgKyAiSW5saW5lU2NoZW1hTm9OYW1lc3BhY2UvIiArIHRlc3RuYW1lICsgIi53c2RsIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFhTRF9ESVIgKyAiSW5saW5lU2NoZW1hTm9OYW1lc3BhY2UvIiArIHRlc3RuYW1lICsgIi53c2RsLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgWFNEX0RJUiArICJJbmxpbmVTY2hlbWFOb05hbWVzcGFjZS8iICsgdGVzdG5hbWUgKyAiLndzZGwtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDU5ZWUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLQotPHByb2plY3QgbmFtZT0idGVzdHN1aXRlIiBkZWZhdWx0PSJydW4iIGJhc2VkaXI9Ii4iPgotCi0gIDwhLS0gQ29uZmlndXJhYmxlIFByb3BlcnRpZXMgLS0+Ci0KLSAgPCEtLSBzZXRzIHRoZSBwcm9wZXJ0aWVzIGVjbGlwc2UtaG9tZSwgYW5kIGxpYnJhcnktZmlsZSAtLT4KLSAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cyIvPgotCi0gIDwhLS0gRW5kIENvbmZpZ3VyYWJsZSBQcm9wZXJ0aWVzIC0tPgotCi0gIDwhLS0gVGhlIHByb3BlcnR5ICR7ZWNsaXBzZS1ob21lfSBzaG91bGQgYmUgcGFzc2VkIGludG8gdGhpcyBzY3JpcHQgLS0+Ci0gIDwhLS0gU2V0IGEgbWVhbmluZ2Z1bCBkZWZhdWx0IHZhbHVlIGZvciB3aGVuIGl0IGlzIG5vdC4gLS0+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJlY2xpcHNlLWhvbWUiIHZhbHVlPSIke2Jhc2VkaXJ9XC4uXC4uIi8+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJidnR3b3Jrc3BhY2UiIHZhbHVlPSIke2Jhc2VkaXJ9Ii8+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJsaWJyYXJ5LWZpbGUiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIi8+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJ3b3Jrc3BhY2UtZm9sZGVyIiB2YWx1ZT0iJHtidnR3b3Jrc3BhY2V9LyR7cGx1Z2luLW5hbWV9Ii8+Ci0KLSAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotICA8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgotICA8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KLSAgPHRhcmdldCBuYW1lPSJpbml0Ij4KLSAgICA8dHN0YW1wLz4KLSAgICAgPGRlbGV0ZT4KLSAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZWNsaXBzZS1ob21lfSIgaW5jbHVkZXM9Im9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMuKi54bWwiLz4KLSAgICA8L2RlbGV0ZT4KLSAgPC90YXJnZXQ+Ci0KLSAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLSAgPHRhcmdldCBuYW1lPSJzdWl0ZSI+Ci0KLSAgICA8IS0tIFN0YXJ0IHdpdGggY2xlYW4gZGF0YSB3b3Jrc3BhY2UgLS0+ICAKLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2UtZm9sZGVyfSIgcXVpZXQ9InRydWUiLz4KLQotICAgIDxhbnQgdGFyZ2V0PSJjb3JlLXRlc3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2UtZm9sZGVyfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsLkFsbFdTRExUZXN0cyIvPgotICAgIDwvYW50PgotCi0gIDwvdGFyZ2V0PgotCi0gIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0gIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KLSAgPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2UtZm9sZGVyfSIgcXVpZXQ9InRydWUiLz4KLSAgPC90YXJnZXQ+Ci0KLSAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgotICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0gIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgotICAgIDxhbnQgdGFyZ2V0PSJjb2xsZWN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJpbmNsdWRlcyIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMqLnhtbCIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9Im91dHB1dC1maWxlIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIi8+Ci0gICAgPC9hbnQ+Ci0gIDwvdGFyZ2V0PgotCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjUzNTc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotZ2VuZXJhdGVkUmVzdWx0cwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9MaW5lTnVtYmVyQWRqdXN0bWVudHMvY3ZjLWNvbXBsZXgtdHlwZS4yLjMvY3ZjLWNvbXBsZXgtdHlwZS4yLjMud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9jdmMtY29tcGxleC10eXBlLjIuMy9jdmMtY29tcGxleC10eXBlLjIuMy53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTI5ODNjZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9jdmMtY29tcGxleC10eXBlLjIuMy9jdmMtY29tcGxleC10eXBlLjIuMy53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY3ZjLWNvbXBsZXgtdHlwZS4yLjM6IEVsZW1lbnQgJ3dzZGw6b3BlcmF0aW9uJyBjYW5ub3QgaGF2ZSBjaGFyYWN0ZXIgW2NoaWxkcmVuXSwgYmVjYXVzZSB0aGUgdHlwZSdzIGNvbnRlbnQgdHlwZSBpcyBlbGVtZW50LW9ubHkuIFsxNiwgMzddCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9MaW5lTnVtYmVyQWRqdXN0bWVudHMvY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYi9jdmMtY29tcGxleC10eXBlLjIuNC5iLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9MaW5lTnVtYmVyQWRqdXN0bWVudHMvY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYi9jdmMtY29tcGxleC10eXBlLjIuNC5iLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzM5MDY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvTGluZU51bWJlckFkanVzdG1lbnRzL2N2Yy1jb21wbGV4LXR5cGUuMi40LmIvY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYi53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYjogVGhlIGNvbnRlbnQgb2YgZWxlbWVudCAnd3NkbDpvcGVyYXRpb24nIGlzIG5vdCBjb21wbGV0ZS4gT25lIG9mICd7Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIjpkb2N1bWVudGF0aW9uLCBXQ1sjI290aGVyOiJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyJdLCAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iOmlucHV0LCAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iOm91dHB1dH0nIGlzIGV4cGVjdGVkLiBbMTYsIDM3XQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZUludmFsaWQud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5NDY1ZTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZUludmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lVmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoSW52YWxpZC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoSW52YWxpZC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk0NjVlNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aEludmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoVmFsaWQud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aFZhbGlkLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoVmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZC53c2RsLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aEludmFsaWQud3NkbC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTQ2NWU0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZC53c2RsLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoVmFsaWQud3NkbC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhWYWxpZC53c2RsLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhWYWxpZC53c2RsLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVJbnZhbGlkLndzZGwtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVJbnZhbGlkLndzZGwtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk0NjVlNC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0Nsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lSW52YWxpZC53c2RsLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVWYWxpZC53c2RsLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0Nsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lVmFsaWQud3NkbC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVWYWxpZC53c2RsLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aEludmFsaWQud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhJbnZhbGlkLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTQ2NWU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aEludmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aFZhbGlkLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoVmFsaWQud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoVmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lSW52YWxpZC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lSW52YWxpZC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk0NjVlNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0Rhc2gtSW5GaWxlbmFtZUludmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lVmFsaWQud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0Rhc2gtSW5GaWxlbmFtZVZhbGlkLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lVmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aEludmFsaWQud3NkbC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZC53c2RsLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5NDY1ZTQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZC53c2RsLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aFZhbGlkLndzZGwtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aFZhbGlkLndzZGwtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvRXhjbGFtYXRpb25JblBhdGhWYWxpZC53c2RsLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lSW52YWxpZC53c2RsLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZUludmFsaWQud3NkbC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTQ2NWU0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lSW52YWxpZC53c2RsLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lVmFsaWQud3NkbC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVWYWxpZC53c2RsLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVWYWxpZC53c2RsLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9PcGVuQnJhY2tldEluUGF0aEludmFsaWQud3NkbC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoSW52YWxpZC53c2RsLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5NDY1ZTQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoSW52YWxpZC53c2RsLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9PcGVuQnJhY2tldEluUGF0aFZhbGlkLndzZGwtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9PcGVuQnJhY2tldEluUGF0aFZhbGlkLndzZGwtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhWYWxpZC53c2RsLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lSW52YWxpZC53c2RsLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZUludmFsaWQud3NkbC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTQ2NWU0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lSW52YWxpZC53c2RsLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lVmFsaWQud3NkbC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVWYWxpZC53c2RsLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVWYWxpZC53c2RsLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhJbnZhbGlkLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aEludmFsaWQud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5NDY1ZTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aEludmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhWYWxpZC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhWYWxpZC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoVmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZUludmFsaWQud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTQ2NWU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZUludmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZVZhbGlkLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lVmFsaWQud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lVmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGxhdGZvcm1VUkwvb25lLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QbGF0Zm9ybVVSTC9vbmUud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QbGF0Zm9ybVVSTC9vbmUud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9RdW90ZUluUGF0aEludmFsaWQud3NkbC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL1F1b3RlSW5QYXRoSW52YWxpZC53c2RsLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5NDY1ZTQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL1F1b3RlSW5QYXRoSW52YWxpZC53c2RsLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9RdW90ZUluUGF0aFZhbGlkLndzZGwtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9RdW90ZUluUGF0aFZhbGlkLndzZGwtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZVwwNDdJblBhdGgvUXVvdGVJblBhdGhWYWxpZC53c2RsLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZVwwNDdJbkZpbGVuYW1lSW52YWxpZC53c2RsLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGVcMDQ3SW5GaWxlbmFtZUludmFsaWQud3NkbC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTQ2NWU0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZVwwNDdJbkZpbGVuYW1lSW52YWxpZC53c2RsLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZVwwNDdJbkZpbGVuYW1lVmFsaWQud3NkbC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlXDA0N0luRmlsZW5hbWVWYWxpZC53c2RsLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlXDA0N0luRmlsZW5hbWVWYWxpZC53c2RsLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoSW52YWxpZC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoSW52YWxpZC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk0NjVlNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aEludmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoVmFsaWQud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aFZhbGlkLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoVmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVJbnZhbGlkLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZUludmFsaWQud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5NDY1ZTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZUludmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVWYWxpZC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVWYWxpZC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lVmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVJbnZhbGlkLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZUludmFsaWQud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5NDY1ZTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZUludmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVWYWxpZC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVWYWxpZC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lVmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoSW52YWxpZC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoSW52YWxpZC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk0NjVlNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aEludmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoVmFsaWQud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aFZhbGlkLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoVmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lSW52YWxpZC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lSW52YWxpZC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk0NjVlNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aEludmFsaWQud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhJbnZhbGlkLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTQ2NWU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aEludmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTkyXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aFZhbGlkLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoVmFsaWQud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoVmFsaWQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9CaW5kaW5nRWxlbWVudC9JbnZhbGlkU3R5bGUvQmluZGluZ0ludmFsaWRTdHlsZS53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9CaW5kaW5nRWxlbWVudC9JbnZhbGlkU3R5bGUvQmluZGluZ0ludmFsaWRTdHlsZS53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWU4YWQ1NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvQmluZGluZ0VsZW1lbnQvSW52YWxpZFN0eWxlL0JpbmRpbmdJbnZhbGlkU3R5bGUud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDIKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWN2Yy1lbnVtZXJhdGlvbi12YWxpZDogVmFsdWUgJ0ludmFsaWRTdHlsZScgaXMgbm90IGZhY2V0LXZhbGlkIHdpdGggcmVzcGVjdCB0byBlbnVtZXJhdGlvbiAnW3JwYywgZG9jdW1lbnRdJy4gSXQgbXVzdCBiZSBhIHZhbHVlIGZyb20gdGhlIGVudW1lcmF0aW9uLiBbMjIsIDkwXQotY3ZjLWF0dHJpYnV0ZS4zOiBUaGUgdmFsdWUgJ0ludmFsaWRTdHlsZScgb2YgYXR0cmlidXRlICdzdHlsZScgb24gZWxlbWVudCAnc29hcDpiaW5kaW5nJyBpcyBub3QgdmFsaWQgd2l0aCByZXNwZWN0IHRvIGl0cyB0eXBlLCAndFN0eWxlQ2hvaWNlJy4gWzIyLCA5MF0KLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvQmluZGluZ0VsZW1lbnQvSW52YWxpZFVzZS9CaW5kaW5nSW52YWxpZFVzZS53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9CaW5kaW5nRWxlbWVudC9JbnZhbGlkVXNlL0JpbmRpbmdJbnZhbGlkVXNlLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjU4MmFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9CaW5kaW5nRWxlbWVudC9JbnZhbGlkVXNlL0JpbmRpbmdJbnZhbGlkVXNlLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAyCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1jdmMtZW51bWVyYXRpb24tdmFsaWQ6IFZhbHVlICdJbnZhbGlkVXNlJyBpcyBub3QgZmFjZXQtdmFsaWQgd2l0aCByZXNwZWN0IHRvIGVudW1lcmF0aW9uICdbbGl0ZXJhbCwgZW5jb2RlZF0nLiBJdCBtdXN0IGJlIGEgdmFsdWUgZnJvbSB0aGUgZW51bWVyYXRpb24uIFsyOSwgNDZdCi1jdmMtYXR0cmlidXRlLjM6IFRoZSB2YWx1ZSAnSW52YWxpZFVzZScgb2YgYXR0cmlidXRlICd1c2UnIG9uIGVsZW1lbnQgJ3NvYXA6Ym9keScgaXMgbm90IHZhbGlkIHdpdGggcmVzcGVjdCB0byBpdHMgdHlwZSwgJ3VzZUNob2ljZScuIFsyOSwgNDZdCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0Nhc2VJbnNlbnNpdGl2ZU9wZXJhdGlvbk5hbWVzL0Nhc2VJbnNlbnNpdGl2ZU9wZXJhdGlvbk5hbWVzLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0Nhc2VJbnNlbnNpdGl2ZU9wZXJhdGlvbk5hbWVzL0Nhc2VJbnNlbnNpdGl2ZU9wZXJhdGlvbk5hbWVzLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9DYXNlSW5zZW5zaXRpdmVPcGVyYXRpb25OYW1lcy9DYXNlSW5zZW5zaXRpdmVPcGVyYXRpb25OYW1lcy53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0N5Y2xpYy9Qb3J0dHlwZVJlZk1lc3NhZ2UxLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0N5Y2xpYy9Qb3J0dHlwZVJlZk1lc3NhZ2UxLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9DeWNsaWMvUG9ydHR5cGVSZWZNZXNzYWdlMS53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0N5Y2xpYy9Qb3J0dHlwZVJlZk1lc3NhZ2UyLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0N5Y2xpYy9Qb3J0dHlwZVJlZk1lc3NhZ2UyLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9DeWNsaWMvUG9ydHR5cGVSZWZNZXNzYWdlMi53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9BbHBoYWJldGljYWxPcmRlck9mSW1wb3J0cy9JbXBvcnRPbmVBbmRUd28ud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzL0ltcG9ydE9uZUFuZFR3by53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzL0ltcG9ydE9uZUFuZFR3by53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9BbHBoYWJldGljYWxPcmRlck9mSW1wb3J0cy9vbmUud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzL29uZS53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzL29uZS53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9BbHBoYWJldGljYWxPcmRlck9mSW1wb3J0cy90d28ud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzL3R3by53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzL3R3by53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnRFbXB0eUxvY2F0aW9uL0ltcG9ydEVtcHR5TG9jYXRpb24ud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydEVtcHR5TG9jYXRpb24vSW1wb3J0RW1wdHlMb2NhdGlvbi53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZhYjYzOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydEVtcHR5TG9jYXRpb24vSW1wb3J0RW1wdHlMb2NhdGlvbi53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVGhlIGxvY2F0aW9uIGF0dHJpYnV0ZSBpcyBlbXB0eS4gQSBsb2NhdGlvbiBtdXN0IGJlIHNwZWNpZmllZCBmb3IgdGhlIGxvY2F0aW9uIGF0dHJpYnV0ZS4gWzcsIDU2XQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbXBvcnQvSW1wb3J0RW1wdHlOYW1lc3BhY2UvSW1wb3J0RW1wdHlOYW1lc3BhY2Uud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydEVtcHR5TmFtZXNwYWNlL0ltcG9ydEVtcHR5TmFtZXNwYWNlLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjA2MGI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbXBvcnQvSW1wb3J0RW1wdHlOYW1lc3BhY2UvSW1wb3J0RW1wdHlOYW1lc3BhY2Uud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRoZSBmaWxlIGNhbm5vdCBiZSBpbXBvcnRlZCBiZWNhdXNlIHRoZSBuYW1lc3BhY2UgJycgZG9lcyBub3QgbWF0Y2ggdGhlIHRhcmdldCBuYW1lc3BhY2UgJ2h0dHA6Ly9leGFtcGxlLmNvbS9zaW1wbGUvJyBvZiB0aGUgaW1wb3J0ZWQgZG9jdW1lbnQuIFs3LCA1M10KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydEVtcHR5TmFtZXNwYWNlQW5kTG9jYXRpb24vSW1wb3J0RW1wdHlOYW1lc3BhY2VBbmRMb2NhdGlvbi53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbXBvcnQvSW1wb3J0RW1wdHlOYW1lc3BhY2VBbmRMb2NhdGlvbi9JbXBvcnRFbXB0eU5hbWVzcGFjZUFuZExvY2F0aW9uLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTZlYTA1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbXBvcnQvSW1wb3J0RW1wdHlOYW1lc3BhY2VBbmRMb2NhdGlvbi9JbXBvcnRFbXB0eU5hbWVzcGFjZUFuZExvY2F0aW9uLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGUgbG9jYXRpb24gYXR0cmlidXRlIGlzIGVtcHR5LiBBIGxvY2F0aW9uIG11c3QgYmUgc3BlY2lmaWVkIGZvciB0aGUgbG9jYXRpb24gYXR0cmlidXRlLiBbNywgNDJdCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnROb0xvY2F0aW9uQXR0cmlidXRlL0ltcG9ydE5vTG9jYXRpb25BdHRyaWJ1dGUud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydE5vTG9jYXRpb25BdHRyaWJ1dGUvSW1wb3J0Tm9Mb2NhdGlvbkF0dHJpYnV0ZS53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWNlNDY3OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydE5vTG9jYXRpb25BdHRyaWJ1dGUvSW1wb3J0Tm9Mb2NhdGlvbkF0dHJpYnV0ZS53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY3ZjLWNvbXBsZXgtdHlwZS40OiBBdHRyaWJ1dGUgJ2xvY2F0aW9uJyBtdXN0IGFwcGVhciBvbiBlbGVtZW50ICd3c2RsOmltcG9ydCcuIFs3LCA0NF0KLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydE5vbkV4aXN0YW50RmlsZS53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbXBvcnQvSW1wb3J0Tm9uRXhpc3RhbnRGaWxlLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDMwOGY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbXBvcnQvSW1wb3J0Tm9uRXhpc3RhbnRGaWxlLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGUgJ1RoaXNGaWxlRG9lc250RXhpc3Qud3NkbCcgZG9jdW1lbnQgY291bGQgbm90IGJlIGltcG9ydGVkLiBDaGVjayB0aGF0IHRoZSBkb2N1bWVudCBleGlzdHMgYW5kIHRoYXQgdGhlIGxvY2F0aW9uIGlzIGNvcnJlY3QuIFszLCA4Nl0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydFNjaGVtYVdpdGhXU0RMSW1wb3J0LndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnRTY2hlbWFXaXRoV1NETEltcG9ydC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydFNjaGVtYVdpdGhXU0RMSW1wb3J0LndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydFNjaGVtYVdpdGhXU0RMSW1wb3J0SW52YWxpZE5TLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnRTY2hlbWFXaXRoV1NETEltcG9ydEludmFsaWROUy53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWMxNWU0My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydFNjaGVtYVdpdGhXU0RMSW1wb3J0SW52YWxpZE5TLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGUgZmlsZSBjYW5ub3QgYmUgaW1wb3J0ZWQgYmVjYXVzZSB0aGUgbmFtZXNwYWNlICdodHRwOi8vaW52YWxpZG5hbWVzcGFjZScgZG9lcyBub3QgbWF0Y2ggdGhlIHRhcmdldCBuYW1lc3BhY2UgJ2h0dHA6Ly93d3cuZXhhbXBsZS5jb20nIG9mIHRoZSBpbXBvcnRlZCBkb2N1bWVudC4gWzMsIDczXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbXBvcnQvSW1wb3J0V1NETFdpdGhXU0RMLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnRXU0RMV2l0aFdTREwud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnRXU0RMV2l0aFdTREwud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbXBvcnQvSW1wb3J0V1NETFdpdGhXU0RMSW52YWxpZEZpbGVuYW1lLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnRXU0RMV2l0aFdTRExJbnZhbGlkRmlsZW5hbWUud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmYmNhNzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnRXU0RMV2l0aFdTRExJbnZhbGlkRmlsZW5hbWUud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRoZSAnU0lNUExFV1NETC53c2RsJyBkb2N1bWVudCBjb3VsZCBub3QgYmUgaW1wb3J0ZWQuIENoZWNrIHRoYXQgdGhlIGRvY3VtZW50IGV4aXN0cyBhbmQgdGhhdCB0aGUgbG9jYXRpb24gaXMgY29ycmVjdC4gWzMsIDc4XQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbXBvcnQvSW1wb3J0V1NETFdpdGhXU0RMSW52YWxpZE5TLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnRXU0RMV2l0aFdTRExJbnZhbGlkTlMud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiNjJjNDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnRXU0RMV2l0aFdTRExJbnZhbGlkTlMud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRoZSBmaWxlIGNhbm5vdCBiZSBpbXBvcnRlZCBiZWNhdXNlIHRoZSBuYW1lc3BhY2UgJ2h0dHA6Ly9pbnZhbGlkbmFtZXNwYWNlJyBkb2VzIG5vdCBtYXRjaCB0aGUgdGFyZ2V0IG5hbWVzcGFjZSAnaHR0cDovL3RlbXB1cmkub3JnL3NpbXBsZXdzZGwvJyBvZiB0aGUgaW1wb3J0ZWQgZG9jdW1lbnQuIFszLCA3OF0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC9JbXBvcnRXaXRoSW5jb3JyZWN0U2xhc2gud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC9JbXBvcnRXaXRoSW5jb3JyZWN0U2xhc2gud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnRXaXRoSW5jb3JyZWN0U2xhc2gvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydFhNTEludmFsaWRXU0RML0ltcG9ydFhNTEludmFsaWRXU0RMLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnRYTUxJbnZhbGlkV1NETC9JbXBvcnRYTUxJbnZhbGlkV1NETC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M4NjgyZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L0ltcG9ydFhNTEludmFsaWRXU0RML0ltcG9ydFhNTEludmFsaWRXU0RMLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0WE1MSW52YWxpZFdTREwvWE1MSW52YWxpZFdTREwud3NkbCkuICBbMSwgMF0KLS0+IEVsZW1lbnQgdHlwZSAid3NkbDpkZWZpbml0aW9ucyIgbXVzdCBiZSBmb2xsb3dlZCBieSBlaXRoZXIgYXR0cmlidXRlIHNwZWNpZmljYXRpb25zLCAiPiIgb3IgIi8+Ii4gWzQsIDNdCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnRpbmdXU0RMV2l0aEltcG9ydGVkU2NoZW1hLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9JbXBvcnRpbmdXU0RMV2l0aEltcG9ydGVkU2NoZW1hLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbXBvcnQvSW1wb3J0aW5nV1NETFdpdGhJbXBvcnRlZFNjaGVtYS53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9Ob1NjaGVtZVNjaGVtYU5hbWVzcGFjZUltcG9ydC9Ob1NjaGVtZVNjaGVtYU5hbWVzcGFjZUltcG9ydC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbXBvcnQvTm9TY2hlbWVTY2hlbWFOYW1lc3BhY2VJbXBvcnQvTm9TY2hlbWVTY2hlbWFOYW1lc3BhY2VJbXBvcnQud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9Ob1NjaGVtZVNjaGVtYU5hbWVzcGFjZUltcG9ydC9Ob1NjaGVtZVNjaGVtYU5hbWVzcGFjZUltcG9ydC53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9TaW1wbGVJbXBvcnQvdGVzdC0xLjAud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L1NpbXBsZUltcG9ydC90ZXN0LTEuMC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L1NpbXBsZUltcG9ydC90ZXN0LTEuMC53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9XU0RMSW1wb3J0aW5nU2NoZW1hSW1wb3J0aW5nU2NoZW1hLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9XU0RMSW1wb3J0aW5nU2NoZW1hSW1wb3J0aW5nU2NoZW1hLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbXBvcnQvV1NETEltcG9ydGluZ1NjaGVtYUltcG9ydGluZ1NjaGVtYS53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9XU0RMSW1wb3J0aW5nVHlwZXMud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L1dTRExJbXBvcnRpbmdUeXBlcy53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvSW1wb3J0L1dTRExJbXBvcnRpbmdUeXBlcy53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9XU0RMTmFtZXNwYWNlQUFBLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ltcG9ydC9XU0RMTmFtZXNwYWNlQUFBLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbXBvcnQvV1NETE5hbWVzcGFjZUFBQS53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ludmFsaWRTY2hlbWFXaXRoUGFydFJlZmVyZW5jZXMvSW52YWxpZFNjaGVtYVdpdGhQYXJ0UmVmZXJlbmNlcy53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9JbnZhbGlkU2NoZW1hV2l0aFBhcnRSZWZlcmVuY2VzL0ludmFsaWRTY2hlbWFXaXRoUGFydFJlZmVyZW5jZXMud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlZjk5MDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML0ludmFsaWRTY2hlbWFXaXRoUGFydFJlZmVyZW5jZXMvSW52YWxpZFNjaGVtYVdpdGhQYXJ0UmVmZXJlbmNlcy53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotc3JjLXJlc29sdmUuNC4yOiBFcnJvciByZXNvbHZpbmcgY29tcG9uZW50ICd4c2Q6c3RyaW4nLiBJdCB3YXMgZGV0ZWN0ZWQgdGhhdCAneHNkOnN0cmluJyBpcyBpbiBuYW1lc3BhY2UgJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJywgYnV0IGNvbXBvbmVudHMgZnJvbSB0aGlzIG5hbWVzcGFjZSBhcmUgbm90IHJlZmVyZW5jZWFibGUgZnJvbSBzY2hlbWEgZG9jdW1lbnQgJ3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ludmFsaWRTY2hlbWFXaXRoUGFydFJlZmVyZW5jZXMvSW52YWxpZFNjaGVtYVdpdGhQYXJ0UmVmZXJlbmNlcy53c2RsJy4gSWYgdGhpcyBpcyB0aGUgaW5jb3JyZWN0IG5hbWVzcGFjZSwgcGVyaGFwcyB0aGUgcHJlZml4IG9mICd4c2Q6c3RyaW4nIG5lZWRzIHRvIGJlIGNoYW5nZWQuIElmIHRoaXMgaXMgdGhlIGNvcnJlY3QgbmFtZXNwYWNlLCB0aGVuIGFuIGFwcHJvcHJpYXRlICdpbXBvcnQnIHRhZyBzaG91bGQgYmUgYWRkZWQgdG8gJ3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ludmFsaWRTY2hlbWFXaXRoUGFydFJlZmVyZW5jZXMvSW52YWxpZFNjaGVtYVdpdGhQYXJ0UmVmZXJlbmNlcy53c2RsJy4gWzE2LCA0N10KLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvTWVzc2FnZUVsZW1lbnQvSW52YWxpZEVsZW1lbnQvTWVzc2FnZUludmFsaWRFbGVtZW50LndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML01lc3NhZ2VFbGVtZW50L0ludmFsaWRFbGVtZW50L01lc3NhZ2VJbnZhbGlkRWxlbWVudC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODVlMzM1Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvTWVzc2FnZUVsZW1lbnQvSW52YWxpZEVsZW1lbnQvTWVzc2FnZUludmFsaWRFbGVtZW50LndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGUgcGFydCAnTmV3T3BlcmF0aW9uUmVzcG9uc2UnIGhhcyBhbiBpbnZhbGlkIHZhbHVlICdJbnZhbGlkRWxlbWVudCcgZGVmaW5lZCBmb3IgaXRzIGVsZW1lbnQuIEVsZW1lbnQgZGVjbGFyYXRpb25zIG11c3QgcmVmZXIgdG8gdmFsaWQgdmFsdWVzIGRlZmluZWQgaW4gYSBzY2hlbWEuIFsxMCwgNzRdCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML01lc3NhZ2VFbGVtZW50L0ludmFsaWRUeXBlL01lc3NhZ2VJbnZhbGlkVHlwZS53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9NZXNzYWdlRWxlbWVudC9JbnZhbGlkVHlwZS9NZXNzYWdlSW52YWxpZFR5cGUud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4OWZlNmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML01lc3NhZ2VFbGVtZW50L0ludmFsaWRUeXBlL01lc3NhZ2VJbnZhbGlkVHlwZS53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVGhlIHBhcnQgJ05ld09wZXJhdGlvblJlcXVlc3QnIGhhcyBhbiBpbnZhbGlkIHZhbHVlICdOZXdPcGVyYXRpb25SZXF1ZXN0JyBkZWZpbmVkIGZvciBpdHMgdHlwZS4gVHlwZSBkZWNsYXJhdGlvbnMgbXVzdCByZWZlciB0byB2YWxpZCB2YWx1ZXMgZGVmaW5lZCBpbiBhIHNjaGVtYS4gWzEzLCA3NV0KLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvTmFtZXNwYWNlRG9lc250UmVzb2x2ZS9OYW1lc3BhY2VEb2VzbnRSZXNvbHZlLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML05hbWVzcGFjZURvZXNudFJlc29sdmUvTmFtZXNwYWNlRG9lc250UmVzb2x2ZS53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvTmFtZXNwYWNlRG9lc250UmVzb2x2ZS9OYW1lc3BhY2VEb2VzbnRSZXNvbHZlLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvTmFtZXNwYWNlUmVzb2x2ZXNIVE1ML05hbWVzcGFjZVJlc29sdmVzSFRNTC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9OYW1lc3BhY2VSZXNvbHZlc0hUTUwvTmFtZXNwYWNlUmVzb2x2ZXNIVE1MLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9OYW1lc3BhY2VSZXNvbHZlc0hUTUwvTmFtZXNwYWNlUmVzb2x2ZXNIVE1MLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvUG9ydFR5cGVFbGVtZW50L0ludmFsaWRJbnB1dC9Qb3J0VHlwZUludmFsaWRJbnB1dC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9Qb3J0VHlwZUVsZW1lbnQvSW52YWxpZElucHV0L1BvcnRUeXBlSW52YWxpZElucHV0LndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjA1OGQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9Qb3J0VHlwZUVsZW1lbnQvSW52YWxpZElucHV0L1BvcnRUeXBlSW52YWxpZElucHV0LndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGUgaW5wdXQgZWxlbWVudCBpcyByZWZlcmVuY2luZyBhbiB1bmRlZmluZWQgbWVzc2FnZSAnSW52YWxpZElucHV0Jy4gQ2hlY2sgdGhhdCB0aGUgbWVzc2FnZSBuYW1lIGFuZCBuYW1lc3BhY2UgYXJlIGNvcnJlY3QgYW5kIHRoYXQgdGhlIG1lc3NhZ2UgaGFzIGJlZW4gZGVmaW5lZC4gWzE3LCA0N10KLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvUG9ydFR5cGVFbGVtZW50L0ludmFsaWRPdXRwdXQvUG9ydFR5cGVJbnZhbGlkT3V0cHV0LndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML1BvcnRUeXBlRWxlbWVudC9JbnZhbGlkT3V0cHV0L1BvcnRUeXBlSW52YWxpZE91dHB1dC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTkxNTkxYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvUG9ydFR5cGVFbGVtZW50L0ludmFsaWRPdXRwdXQvUG9ydFR5cGVJbnZhbGlkT3V0cHV0LndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGUgb3V0cHV0IGVsZW1lbnQgaXMgcmVmZXJlbmNpbmcgYW4gdW5kZWZpbmVkIG1lc3NhZ2UgJ0ludmFsaWRPdXRwdXQnLiBDaGVjayB0aGF0IHRoZSBtZXNzYWdlIG5hbWUgYW5kIG5hbWVzcGFjZSBhcmUgY29ycmVjdCBhbmQgdGhhdCB0aGUgbWVzc2FnZSBoYXMgYmVlbiBkZWZpbmVkLiBbMTgsIDQ5XQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9TZWxmQ29udGFpbmVkL0VtcHR5LndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML1NlbGZDb250YWluZWQvRW1wdHkud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML1NlbGZDb250YWluZWQvRW1wdHkud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9TZWxmQ29udGFpbmVkL05vRGVmYXVsdE5hbWVzcGFjZS9Ob0RlZmF1bHROYW1lc3BhY2Uud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvU2VsZkNvbnRhaW5lZC9Ob0RlZmF1bHROYW1lc3BhY2UvTm9EZWZhdWx0TmFtZXNwYWNlLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9TZWxmQ29udGFpbmVkL05vRGVmYXVsdE5hbWVzcGFjZS9Ob0RlZmF1bHROYW1lc3BhY2Uud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9TZWxmQ29udGFpbmVkL1JlZmVyZW5jZUlubGluZVR5cGVzLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML1NlbGZDb250YWluZWQvUmVmZXJlbmNlSW5saW5lVHlwZXMud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML1NlbGZDb250YWluZWQvUmVmZXJlbmNlSW5saW5lVHlwZXMud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9TZWxmQ29udGFpbmVkL1NPQVBCb2R5RW5jb2RlZE5vTmFtZXNwYWNlLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML1NlbGZDb250YWluZWQvU09BUEJvZHlFbmNvZGVkTm9OYW1lc3BhY2Uud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML1NlbGZDb250YWluZWQvU09BUEJvZHlFbmNvZGVkTm9OYW1lc3BhY2Uud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9TZWxmQ29udGFpbmVkL1NPQVBCb2R5RW5jb2RlZFdpdGhOYW1lc3BhY2Uud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvU2VsZkNvbnRhaW5lZC9TT0FQQm9keUVuY29kZWRXaXRoTmFtZXNwYWNlLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9TZWxmQ29udGFpbmVkL1NPQVBCb2R5RW5jb2RlZFdpdGhOYW1lc3BhY2Uud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9TZWxmSW1wb3J0L0ltcG9ydEZpbGVXaXRoU2VsZkltcG9ydC9JbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnQud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvU2VsZkltcG9ydC9JbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnQvSW1wb3J0RmlsZVdpdGhTZWxmSW1wb3J0LndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9TZWxmSW1wb3J0L0ltcG9ydEZpbGVXaXRoU2VsZkltcG9ydC9JbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9TZWxmSW1wb3J0L1NpbXBsZUZpbGUvU2VsZkltcG9ydC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9TZWxmSW1wb3J0L1NpbXBsZUZpbGUvU2VsZkltcG9ydC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvU2VsZkltcG9ydC9TaW1wbGVGaWxlL1NlbGZJbXBvcnQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9TZWxmSW1wb3J0L1NpbXBsZUZpbGVJbnZhbGlkL1NlbGZJbXBvcnQud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvU2VsZkltcG9ydC9TaW1wbGVGaWxlSW52YWxpZC9TZWxmSW1wb3J0LndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTUzNDkwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvV1NETC9TZWxmSW1wb3J0L1NpbXBsZUZpbGVJbnZhbGlkL1NlbGZJbXBvcnQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRoZSBwYXJ0ICdOZXdPcGVyYXRpb25SZXNwb25zZScgaGFzIGFuIGludmFsaWQgdmFsdWUgJ0ludmFsaWRFbGVtZW50JyBkZWZpbmVkIGZvciBpdHMgZWxlbWVudC4gRWxlbWVudCBkZWNsYXJhdGlvbnMgbXVzdCByZWZlciB0byB2YWxpZCB2YWx1ZXMgZGVmaW5lZCBpbiBhIHNjaGVtYS4gWzE0LCA3MF0KLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvU2VydmljZUVsZW1lbnQvSW52YWxpZEJpbmRpbmcvU2VydmljZUludmFsaWRCaW5kaW5nLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML1NlcnZpY2VFbGVtZW50L0ludmFsaWRCaW5kaW5nL1NlcnZpY2VJbnZhbGlkQmluZGluZy53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDY0MGU2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvU2VydmljZUVsZW1lbnQvSW52YWxpZEJpbmRpbmcvU2VydmljZUludmFsaWRCaW5kaW5nLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGUgJ1NlcnZpY2VJbnZhbGlkQmluZGluZ1NPQVAnIHBvcnQgaGFzIGFuIGludmFsaWQgYmluZGluZyAtICdJbmNvcnJlY3RCaW5kaW5nUmVmJy4gQ2hlY2sgdGhhdCB0aGUgJ0luY29ycmVjdEJpbmRpbmdSZWYnIGJpbmRpbmcgaXMgZGVmaW5lZC4gWzM0LCA4M10KLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvU2VydmljZUVsZW1lbnQvTm9BZGRyZXNzL1NlcnZpY2VOb0FkZHJlc3Mud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1dTREwvU2VydmljZUVsZW1lbnQvTm9BZGRyZXNzL1NlcnZpY2VOb0FkZHJlc3Mud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4ZWFhOWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9XU0RML1NlcnZpY2VFbGVtZW50L05vQWRkcmVzcy9TZXJ2aWNlTm9BZGRyZXNzLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGUgcG9ydCAnU2VydmljZU5vQWRkcmVzc1NPQVAnIGhhcyBubyBhZGRyZXNzIGRlZmluZWQuIEVhY2ggcG9ydCBtdXN0IGRlZmluZSBvbmUgYWRkcmVzcy4gWzM0LCA3OV0KLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9FbnRpdGllcy9ub3JtYWxpemVFbnRpdGllc0ludmFsaWQud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9FbnRpdGllcy9ub3JtYWxpemVFbnRpdGllc0ludmFsaWQud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmZGFmNDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvRW50aXRpZXMvbm9ybWFsaXplRW50aXRpZXNJbnZhbGlkLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGUgdmFsdWUgb2YgYXR0cmlidXRlICJ2YWx1ZSIgYXNzb2NpYXRlZCB3aXRoIGFuIGVsZW1lbnQgdHlwZSAieHNkOnBhdHRlcm4iIG11c3Qgbm90IGNvbnRhaW4gdGhlICc8JyBjaGFyYWN0ZXIuIFsxMSwgNTVdCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvRW50aXRpZXMvbm9ybWFsaXplRW50aXRpZXNWYWxpZC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvWFNEL0VudGl0aWVzL25vcm1hbGl6ZUVudGl0aWVzVmFsaWQud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvRW50aXRpZXMvbm9ybWFsaXplRW50aXRpZXNWYWxpZC53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvSW1wb3J0SW5saW5lU2NoZW1hV2l0aEluY2x1ZGUvSW1wb3J0SW5saW5lU2NoZW1hV2l0aEluY2x1ZGUud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9JbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZS9JbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZS53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9JbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZS9JbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZS53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvSW1wb3J0Tm9OU1NjaGVtYS9JbXBvcnROb05TU2NoZW1hLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvSW1wb3J0Tm9OU1NjaGVtYS9JbXBvcnROb05TU2NoZW1hLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvWFNEL0ltcG9ydE5vTlNTY2hlbWEvSW1wb3J0Tm9OU1NjaGVtYS53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvSW1wb3J0Tm9OU1NjaGVtYUFuZFNlY29uZFNjaGVtYVdpdGhOUy9JbXBvcnROb05TU2NoZW1hQW5kU2Vjb25kU2NoZW1hV2l0aE5TLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvSW1wb3J0Tm9OU1NjaGVtYUFuZFNlY29uZFNjaGVtYVdpdGhOUy9JbXBvcnROb05TU2NoZW1hQW5kU2Vjb25kU2NoZW1hV2l0aE5TLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvWFNEL0ltcG9ydE5vTlNTY2hlbWFBbmRTZWNvbmRTY2hlbWFXaXRoTlMvSW1wb3J0Tm9OU1NjaGVtYUFuZFNlY29uZFNjaGVtYVdpdGhOUy53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvSW5saW5lU2NoZW1hR2VuZXJhdGVkSW1wb3J0cy9Ob0ltcG9ydEZvclVucHJlZml4ZWRBdHRyaWJ1dGUud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9JbmxpbmVTY2hlbWFHZW5lcmF0ZWRJbXBvcnRzL05vSW1wb3J0Rm9yVW5wcmVmaXhlZEF0dHJpYnV0ZS53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9JbmxpbmVTY2hlbWFHZW5lcmF0ZWRJbXBvcnRzL05vSW1wb3J0Rm9yVW5wcmVmaXhlZEF0dHJpYnV0ZS53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvSW5saW5lU2NoZW1hTm9OYW1lc3BhY2UvSW5saW5lU2NoZW1hTm9OYW1lc3BhY2Uud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9JbmxpbmVTY2hlbWFOb05hbWVzcGFjZS9JbmxpbmVTY2hlbWFOb05hbWVzcGFjZS53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9JbmxpbmVTY2hlbWFOb05hbWVzcGFjZS9JbmxpbmVTY2hlbWFOb05hbWVzcGFjZS53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvTm9OU0VsZW1lbnRSZWZlcmVuY2UvTm9OU0VsZW1lbnRSZWZlcmVuY2Uud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9Ob05TRWxlbWVudFJlZmVyZW5jZS9Ob05TRWxlbWVudFJlZmVyZW5jZS53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9Ob05TRWxlbWVudFJlZmVyZW5jZS9Ob05TRWxlbWVudFJlZmVyZW5jZS53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvT25lRXJyb3JGb3JJbmxpbmVYU0RSZWZJbnZhbGlkSW5saW5lWFNEL09uZUVycm9yRm9ySW5saW5lWFNEUmVmSW52YWxpZElubGluZVhTRC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvWFNEL09uZUVycm9yRm9ySW5saW5lWFNEUmVmSW52YWxpZElubGluZVhTRC9PbmVFcnJvckZvcklubGluZVhTRFJlZkludmFsaWRJbmxpbmVYU0Qud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0MWFkMTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvT25lRXJyb3JGb3JJbmxpbmVYU0RSZWZJbnZhbGlkSW5saW5lWFNEL09uZUVycm9yRm9ySW5saW5lWFNEUmVmSW52YWxpZElubGluZVhTRC53c2RsLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotc3JjLXJlc29sdmUuNC4yOiBFcnJvciByZXNvbHZpbmcgY29tcG9uZW50ICd4c2Q6c3RyaW5nYScuIEl0IHdhcyBkZXRlY3RlZCB0aGF0ICd4c2Q6c3RyaW5nYScgaXMgaW4gbmFtZXNwYWNlICdodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYScsIGJ1dCBjb21wb25lbnRzIGZyb20gdGhpcyBuYW1lc3BhY2UgYXJlIG5vdCByZWZlcmVuY2VhYmxlIGZyb20gc2NoZW1hIGRvY3VtZW50ICd0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL09uZUVycm9yRm9ySW5saW5lWFNEUmVmSW52YWxpZElubGluZVhTRC9PbmVFcnJvckZvcklubGluZVhTRFJlZkludmFsaWRJbmxpbmVYU0Qud3NkbCcuIElmIHRoaXMgaXMgdGhlIGluY29ycmVjdCBuYW1lc3BhY2UsIHBlcmhhcHMgdGhlIHByZWZpeCBvZiAneHNkOnN0cmluZ2EnIG5lZWRzIHRvIGJlIGNoYW5nZWQuIElmIHRoaXMgaXMgdGhlIGNvcnJlY3QgbmFtZXNwYWNlLCB0aGVuIGFuIGFwcHJvcHJpYXRlICdpbXBvcnQnIHRhZyBzaG91bGQgYmUgYWRkZWQgdG8gJ3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvT25lRXJyb3JGb3JJbmxpbmVYU0RSZWZJbnZhbGlkSW5saW5lWFNEL09uZUVycm9yRm9ySW5saW5lWFNEUmVmSW52YWxpZElubGluZVhTRC53c2RsJy4gWzcsIDYxXQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvWFNEL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZS9SZWZlclRvQW5vdGhlcklubGluZVR5cGUud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9SZWZlclRvQW5vdGhlcklubGluZVR5cGUvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlLndzZGwtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTJiMzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvWFNEL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZS9SZWZlclRvQW5vdGhlcklubGluZVR5cGUud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvWFNEL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZS9SZWZlclRvQW5vdGhlcklubGluZVR5cGVOb0ltcG9ydC53c2RsLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvWFNEL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZS9SZWZlclRvQW5vdGhlcklubGluZVR5cGVOb0ltcG9ydC53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWE4ODE4OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9SZWZlclRvQW5vdGhlcklubGluZVR5cGUvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlTm9JbXBvcnQud3NkbC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDIKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXNyYy1yZXNvbHZlLjQuMjogRXJyb3IgcmVzb2x2aW5nIGNvbXBvbmVudCAndHdvOk5ld1NpbXBsZVR5cGUnLiBJdCB3YXMgZGV0ZWN0ZWQgdGhhdCAndHdvOk5ld1NpbXBsZVR5cGUnIGlzIGluIG5hbWVzcGFjZSAnaHR0cDovL3RlbXB1cmkub3JnL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZTIvJywgYnV0IGNvbXBvbmVudHMgZnJvbSB0aGlzIG5hbWVzcGFjZSBhcmUgbm90IHJlZmVyZW5jZWFibGUgZnJvbSBzY2hlbWEgZG9jdW1lbnQgJ3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZU5vSW1wb3J0LndzZGwnLiBJZiB0aGlzIGlzIHRoZSBpbmNvcnJlY3QgbmFtZXNwYWNlLCBwZXJoYXBzIHRoZSBwcmVmaXggb2YgJ3R3bzpOZXdTaW1wbGVUeXBlJyBuZWVkcyB0byBiZSBjaGFuZ2VkLiBJZiB0aGlzIGlzIHRoZSBjb3JyZWN0IG5hbWVzcGFjZSwgdGhlbiBhbiBhcHByb3ByaWF0ZSAnaW1wb3J0JyB0YWcgc2hvdWxkIGJlIGFkZGVkIHRvICd0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZS9SZWZlclRvQW5vdGhlcklubGluZVR5cGVOb0ltcG9ydC53c2RsJy4gWzEzLCA2N10KLXNyYy1yZXNvbHZlLjQuMjogRXJyb3IgcmVzb2x2aW5nIGNvbXBvbmVudCAnb25lOk5ld1NpbXBsZVR5cGUnLiBJdCB3YXMgZGV0ZWN0ZWQgdGhhdCAnb25lOk5ld1NpbXBsZVR5cGUnIGlzIGluIG5hbWVzcGFjZSAnaHR0cDovL3RlbXB1cmkub3JnL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZTEvJywgYnV0IGNvbXBvbmVudHMgZnJvbSB0aGlzIG5hbWVzcGFjZSBhcmUgbm90IHJlZmVyZW5jZWFibGUgZnJvbSBzY2hlbWEgZG9jdW1lbnQgJ3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZU5vSW1wb3J0LndzZGwnLiBJZiB0aGlzIGlzIHRoZSBpbmNvcnJlY3QgbmFtZXNwYWNlLCBwZXJoYXBzIHRoZSBwcmVmaXggb2YgJ29uZTpOZXdTaW1wbGVUeXBlJyBuZWVkcyB0byBiZSBjaGFuZ2VkLiBJZiB0aGlzIGlzIHRoZSBjb3JyZWN0IG5hbWVzcGFjZSwgdGhlbiBhbiBhcHByb3ByaWF0ZSAnaW1wb3J0JyB0YWcgc2hvdWxkIGJlIGFkZGVkIHRvICd0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZS9SZWZlclRvQW5vdGhlcklubGluZVR5cGVOb0ltcG9ydC53c2RsJy4gWzI0LCA2N10KLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9SZXN0cmljdGlvblBhdHRlcm5XaXRoQ29sb24vUmVzdHJpY3Rpb25QYXR0ZXJuV2l0aENvbG9uLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvUmVzdHJpY3Rpb25QYXR0ZXJuV2l0aENvbG9uL1Jlc3RyaWN0aW9uUGF0dGVybldpdGhDb2xvbi53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9SZXN0cmljdGlvblBhdHRlcm5XaXRoQ29sb24vUmVzdHJpY3Rpb25QYXR0ZXJuV2l0aENvbG9uLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9TY2hlbWFEb2NFbGVtV2l0aFNvdXJjZUFuZFN1YkVsZW0vU2NoZW1hRG9jRWxlbVdpdGhTb3VyY2VBbmRTdWJFbGVtLndzZGwtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvU2NoZW1hRG9jRWxlbVdpdGhTb3VyY2VBbmRTdWJFbGVtL1NjaGVtYURvY0VsZW1XaXRoU291cmNlQW5kU3ViRWxlbS53c2RsLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYjM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9TY2hlbWFEb2NFbGVtV2l0aFNvdXJjZUFuZFN1YkVsZW0vU2NoZW1hRG9jRWxlbVdpdGhTb3VyY2VBbmRTdWJFbGVtLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9WYWx1ZUNvbG9uL1ZhbHVlQ29sb24ud3NkbC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1hTRC9WYWx1ZUNvbG9uL1ZhbHVlQ29sb24ud3NkbC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmIzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9YU0QvVmFsdWVDb2xvbi9WYWx1ZUNvbG9uLndzZGwtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9MaW5lTnVtYmVyQWRqdXN0bWVudHMvY3ZjLWNvbXBsZXgtdHlwZS4yLjMvY3ZjLWNvbXBsZXgtdHlwZS4yLjMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9jdmMtY29tcGxleC10eXBlLjIuMy9jdmMtY29tcGxleC10eXBlLjIuMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OWJlMzIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9jdmMtY29tcGxleC10eXBlLjIuMy9jdmMtY29tcGxleC10eXBlLjIuMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9jdmMtY29tcGxleC10eXBlLjIuMy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJjdmMtY29tcGxleC10eXBlLjIuMyIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL2N2Yy1jb21wbGV4LXR5cGUuMi4zLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9jdmMtY29tcGxleC10eXBlLjIuMy8iPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0iTmV3V1NETEZpbGUxIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0iTmV3TWVzc2FnZSI+PC93c2RsOmlucHV0PgotYWFhYQotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpwb3J0VHlwZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9jdmMtY29tcGxleC10eXBlLjIuNC5iL2N2Yy1jb21wbGV4LXR5cGUuMi40LmIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9jdmMtY29tcGxleC10eXBlLjIuNC5iL2N2Yy1jb21wbGV4LXR5cGUuMi40LmIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTE5YzUxNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9MaW5lTnVtYmVyQWRqdXN0bWVudHMvY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYi9jdmMtY29tcGxleC10eXBlLjIuNC5iLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL2N2Yy1jb21wbGV4LXR5cGUuMi40LmIvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYiIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL2N2Yy1jb21wbGV4LXR5cGUuMi40LmIvIj4KLTx3c2RsOnR5cGVzPgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL2N2Yy1jb21wbGV4LXR5cGUuMi40LmIvIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0IiBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9Ik5ld1dTRExGaWxlMSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZUludmFsaWQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmJlMzY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZVZhbGlkLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZVZhbGlkLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhMjdkNzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhJbnZhbGlkLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhJbnZhbGlkLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2YmUzNjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoSW52YWxpZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhWYWxpZC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoVmFsaWQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGEyN2Q3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhWYWxpZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkLndzZGwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZC53c2RsIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZiZTM2OC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkLndzZGwiCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhWYWxpZC53c2RsIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aFZhbGlkLndzZGwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTI3ZDcwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aFZhbGlkLndzZGwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZUludmFsaWQud3NkbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZUludmFsaWQud3NkbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2YmUzNjguLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVJbnZhbGlkLndzZGwiCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZVZhbGlkLndzZGwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVWYWxpZC53c2RsIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGEyN2Q3MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZVZhbGlkLndzZGwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoSW52YWxpZC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aEludmFsaWQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZiZTM2OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoSW52YWxpZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoVmFsaWQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhWYWxpZC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTI3ZDcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhWYWxpZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVJbnZhbGlkLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVJbnZhbGlkLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2YmUzNjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lSW52YWxpZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVWYWxpZC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lVmFsaWQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGEyN2Q3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVWYWxpZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZC53c2RsIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvRXhjbGFtYXRpb25JblBhdGhJbnZhbGlkLndzZGwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmJlMzY4Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvRXhjbGFtYXRpb25JblBhdGhJbnZhbGlkLndzZGwiCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoVmFsaWQud3NkbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoVmFsaWQud3NkbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhMjdkNzAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aFZhbGlkLndzZGwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVJbnZhbGlkLndzZGwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lSW52YWxpZC53c2RsIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZiZTM2OC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVJbnZhbGlkLndzZGwiCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVWYWxpZC53c2RsIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZVZhbGlkLndzZGwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTI3ZDcwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZVZhbGlkLndzZGwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoSW52YWxpZC53c2RsIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkLndzZGwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmJlMzY4Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkLndzZGwiCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoVmFsaWQud3NkbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoVmFsaWQud3NkbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhMjdkNzAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9PcGVuQnJhY2tldEluUGF0aFZhbGlkLndzZGwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVJbnZhbGlkLndzZGwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lSW52YWxpZC53c2RsIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZiZTM2OC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVJbnZhbGlkLndzZGwiCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVWYWxpZC53c2RsIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZVZhbGlkLndzZGwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTI3ZDcwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZVZhbGlkLndzZGwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aEludmFsaWQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoSW52YWxpZC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmJlMzY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoSW52YWxpZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aFZhbGlkLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aFZhbGlkLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhMjdkNzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhWYWxpZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lSW52YWxpZC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZUludmFsaWQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZiZTM2OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lSW52YWxpZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lVmFsaWQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVWYWxpZC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTI3ZDcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVWYWxpZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QbGF0Zm9ybVVSTC9vbmUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BsYXRmb3JtVVJML29uZS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDI3NWE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BsYXRmb3JtVVJML29uZS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL29uZS8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJvbmUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9vbmUvIj4KLTx3c2RsOmltcG9ydAotICBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvdHdvLyIKLSAgbG9jYXRpb249InBsYXRmb3JtOi9yZXNvdXJjZS90ZXN0L3R3by53c2RsIi8+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QbGF0Zm9ybVVSTC90d28ud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BsYXRmb3JtVVJML3R3by53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTMwZGIwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BsYXRmb3JtVVJML3R3by53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3R3by8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJ0d28iIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy90d28vIj4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZVwwNDdJblBhdGgvUXVvdGVJblBhdGhJbnZhbGlkLndzZGwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9RdW90ZUluUGF0aEludmFsaWQud3NkbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2YmUzNjguLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9RdW90ZUluUGF0aEludmFsaWQud3NkbCIKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJuYW1lIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZVwwNDdJblBhdGgvUXVvdGVJblBhdGhWYWxpZC53c2RsIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZVwwNDdJblBhdGgvUXVvdGVJblBhdGhWYWxpZC53c2RsIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGEyN2Q3MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL1F1b3RlSW5QYXRoVmFsaWQud3NkbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJuYW1lIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGVcMDQ3SW5GaWxlbmFtZUludmFsaWQud3NkbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlXDA0N0luRmlsZW5hbWVJbnZhbGlkLndzZGwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmJlMzY4Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGVcMDQ3SW5GaWxlbmFtZUludmFsaWQud3NkbCIKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJuYW1lIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGVcMDQ3SW5GaWxlbmFtZVZhbGlkLndzZGwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZVwwNDdJbkZpbGVuYW1lVmFsaWQud3NkbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhMjdkNzAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZVwwNDdJbkZpbGVuYW1lVmFsaWQud3NkbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJuYW1lIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aEludmFsaWQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aEludmFsaWQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZiZTM2OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhJbnZhbGlkLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJuYW1lIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aFZhbGlkLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhWYWxpZC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTI3ZDcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aFZhbGlkLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJuYW1lIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lSW52YWxpZC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVJbnZhbGlkLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2YmUzNjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVJbnZhbGlkLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJuYW1lIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lVmFsaWQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lVmFsaWQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGEyN2Q3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZVZhbGlkLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJuYW1lIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lSW52YWxpZC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVJbnZhbGlkLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2YmUzNjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVJbnZhbGlkLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJuYW1lIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lVmFsaWQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lVmFsaWQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGEyN2Q3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZVZhbGlkLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJuYW1lIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aEludmFsaWQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aEludmFsaWQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZiZTM2OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhJbnZhbGlkLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJuYW1lIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aFZhbGlkLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhWYWxpZC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTI3ZDcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aFZhbGlkLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJuYW1lIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZiZTM2OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJuYW1lIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVWYWxpZC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTI3ZDcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJuYW1lIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhJbnZhbGlkLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoSW52YWxpZC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmJlMzY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhJbnZhbGlkLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJuYW1lIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhWYWxpZC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aFZhbGlkLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhMjdkNzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aFZhbGlkLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJuYW1lIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvQmluZGluZ0VsZW1lbnQvSW52YWxpZFN0eWxlL0JpbmRpbmdJbnZhbGlkU3R5bGUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvQmluZGluZ0VsZW1lbnQvSW52YWxpZFN0eWxlL0JpbmRpbmdJbnZhbGlkU3R5bGUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTE0NWQzOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0JpbmRpbmdFbGVtZW50L0ludmFsaWRTdHlsZS9CaW5kaW5nSW52YWxpZFN0eWxlLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0iQmluZGluZ0ludmFsaWRTdHlsZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0JpbmRpbmdJbnZhbGlkU3R5bGUvIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvQmluZGluZ0ludmFsaWRTdHlsZS8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0JpbmRpbmdJbnZhbGlkU3R5bGUvIj4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICA8L3hzZDpzY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkJpbmRpbmdJbnZhbGlkU3R5bGUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQmluZGluZ0ludmFsaWRTdHlsZVNPQVAiIHR5cGU9InRuczpCaW5kaW5nSW52YWxpZFN0eWxlIj4KLSAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJJbnZhbGlkU3R5bGUiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9CaW5kaW5nSW52YWxpZFN0eWxlL05ld09wZXJhdGlvbiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkJpbmRpbmdJbnZhbGlkU3R5bGUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iQmluZGluZ0ludmFsaWRTdHlsZVNPQVAiIGJpbmRpbmc9InRuczpCaW5kaW5nSW52YWxpZFN0eWxlU09BUCI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvQmluZGluZ0VsZW1lbnQvSW52YWxpZFVzZS9CaW5kaW5nSW52YWxpZFVzZS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9CaW5kaW5nRWxlbWVudC9JbnZhbGlkVXNlL0JpbmRpbmdJbnZhbGlkVXNlLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlNGMyNjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9CaW5kaW5nRWxlbWVudC9JbnZhbGlkVXNlL0JpbmRpbmdJbnZhbGlkVXNlLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0iQmluZGluZ0ludmFsaWRVc2UiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9CaW5kaW5nSW52YWxpZFVzZS8iIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9CaW5kaW5nSW52YWxpZFVzZS8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0JpbmRpbmdJbnZhbGlkVXNlLyI+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgPC94c2Q6c2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJCaW5kaW5nSW52YWxpZFVzZSI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJCaW5kaW5nSW52YWxpZFVzZVNPQVAiIHR5cGU9InRuczpCaW5kaW5nSW52YWxpZFVzZSI+Ci0gICAgICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgICAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLSAgICAgICAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0JpbmRpbmdJbnZhbGlkVXNlL05ld09wZXJhdGlvbiIvPgotICAgICAgICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgICAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgICAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0iSW52YWxpZFVzZSIvPgotICAgICAgICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJCaW5kaW5nSW52YWxpZFVzZSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJCaW5kaW5nSW52YWxpZFVzZVNPQVAiIGJpbmRpbmc9InRuczpCaW5kaW5nSW52YWxpZFVzZVNPQVAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0Nhc2VJbnNlbnNpdGl2ZU9wZXJhdGlvbk5hbWVzL0Nhc2VJbnNlbnNpdGl2ZU9wZXJhdGlvbk5hbWVzLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0Nhc2VJbnNlbnNpdGl2ZU9wZXJhdGlvbk5hbWVzL0Nhc2VJbnNlbnNpdGl2ZU9wZXJhdGlvbk5hbWVzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4ZTFjOGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9DYXNlSW5zZW5zaXRpdmVPcGVyYXRpb25OYW1lcy9DYXNlSW5zZW5zaXRpdmVPcGVyYXRpb25OYW1lcy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9IkNhc2VJbnNlbnNpdGl2ZU9wZXJhdGlvbnMiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9DYXNlSW5zZW5zaXRpdmVPcGVyYXRpb25zLyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0Nhc2VJbnNlbnNpdGl2ZU9wZXJhdGlvbnMvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9DYXNlSW5zZW5zaXRpdmVPcGVyYXRpb25zLyI+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgPC94c2Q6c2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJDYXNlSW5zZW5zaXRpdmVPcGVyYXRpb25zIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ib3BlcmF0aW9uIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9DeWNsaWMvUG9ydHR5cGVSZWZNZXNzYWdlMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9DeWNsaWMvUG9ydHR5cGVSZWZNZXNzYWdlMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2U0YzU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvQ3ljbGljL1BvcnR0eXBlUmVmTWVzc2FnZTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9jeWNsaWMxLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImN5Y2xpYzEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL2N5Y2xpYzEvIiB4bWxuczpjeWNsaWMyPSJodHRwOi8vdGVtcHVyaS5vcmcvY3ljbGljMi8iPgotICA8d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvY3ljbGljMi8iIGxvY2F0aW9uPSJQb3J0dHlwZVJlZk1lc3NhZ2UyLndzZGwiPjwvd3NkbDppbXBvcnQ+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL2N5Y2xpYzEvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICA8L3hzZDpzY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9ImN5Y2xpYzEiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0iY3ljbGljMjpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0iY3ljbGljMjpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvQ3ljbGljL1BvcnR0eXBlUmVmTWVzc2FnZTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvQ3ljbGljL1BvcnR0eXBlUmVmTWVzc2FnZTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzEzNTI5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0N5Y2xpYy9Qb3J0dHlwZVJlZk1lc3NhZ2UyLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvY3ljbGljMi8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJjeWNsaWMyIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9jeWNsaWMyLyIgeG1sbnM6Y3ljbGljMT0iaHR0cDovL3RlbXB1cmkub3JnL2N5Y2xpYzEvIj4KLSAgPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL2N5Y2xpYzEvIiBsb2NhdGlvbj0iUG9ydHR5cGVSZWZNZXNzYWdlMS53c2RsIj48L3dzZGw6aW1wb3J0PgotICA8d3NkbDp0eXBlcz4KLSAgICA8eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9jeWNsaWMyLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgPC94c2Q6c2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIiBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0IiBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJjeWNsaWMyIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9ImN5Y2xpYzE6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9ImN5Y2xpYzE6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9BbHBoYWJldGljYWxPcmRlck9mSW1wb3J0cy9JbXBvcnRPbmVBbmRUd28ud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzL0ltcG9ydE9uZUFuZFR3by53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NzYzYWYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzL0ltcG9ydE9uZUFuZFR3by53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotCW5hbWU9IkltcG9ydE9uZUFuZFR3byIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9JbXBvcnRPbmVBbmRUd28iIAotCXhtbG5zOndzZGwxPSJodHRwOi8vdGVtcHVyaS5vcmcvb25lLndzZGwiCi0JeG1sbnM6d3NkbDI9Imh0dHA6Ly9hdGVtcHVyaS5vcmcvdHdvLndzZGwiPgotCi0JCi08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvb25lLndzZGwiIGxvY2F0aW9uPSJvbmUud3NkbCIvPgotPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL2F0ZW1wdXJpLm9yZy90d28ud3NkbCIgbG9jYXRpb249InR3by53c2RsIi8+Ci0JCi08L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvQWxwaGFiZXRpY2FsT3JkZXJPZkltcG9ydHMvb25lLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9BbHBoYWJldGljYWxPcmRlck9mSW1wb3J0cy9vbmUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzIwZmYxMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9BbHBoYWJldGljYWxPcmRlck9mSW1wb3J0cy9vbmUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9vbmUud3NkbCIKLQl4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJvbmUiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvb25lLndzZGwiPgotCQotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iTWVzc2FnZSI+Ci0JCTx3c2RsOnBhcnQgbmFtZT0iTWVzc2FnZSIgdHlwZT0ieHNkOnN0cmluZyI+PC93c2RsOnBhcnQ+Ci0JPC93c2RsOm1lc3NhZ2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9BbHBoYWJldGljYWxPcmRlck9mSW1wb3J0cy90d28ud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzL3R3by53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNGYxNjBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0FscGhhYmV0aWNhbE9yZGVyT2ZJbXBvcnRzL3R3by53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gSXQncyBpbXBvcnRhbnQgdGhhdCB0aGUgbmFtZXNwYWNlIG9mIHRoaXMgZG9jdW1lbnQgc3RhcnQgd2l0aCBhbiBhIGFzIGl0IHNob3VsZAotICAgICBiZSBpbXBvcnRlZCBmaXJzdCBieSBJbXBvcnRPbmVBbmRUd28ud3NkbC4gVGhlIG9yZGVyIG9mIHRoZSBpbXBvcnRzIGlzIGRldGVybWluZWQKLSAgICAgYnkgYWxwaGFiZXRpY2FsIG9yZGVyIG9mIHRoZSBuYW1lc3BhY2VzIGluIHRoaXMgZGVmZWN0LiAtLT4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL2F0ZW1wdXJpLm9yZy90d28ud3NkbCIKLQl4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgbmFtZT0idHdvIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2F0ZW1wdXJpLm9yZy90d28ud3NkbCIKLQl4bWxuczp3c2RsMT0iaHR0cDovL3RlbXB1cmkub3JnL29uZS53c2RsIiB4bWxuczp3c2RsMj0iaHR0cDovL2F0ZW1wdXJpLm9yZy90d28ud3NkbCI+Ci0JPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL29uZS53c2RsIgotCQlsb2NhdGlvbj0ib25lLndzZGwiPgotCTwvd3NkbDppbXBvcnQ+Ci0JPHdzZGw6cG9ydFR5cGUgbmFtZT0iUG9ydFR5cGUiPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iT3BlcmF0aW9uIj4KLQkJCTx3c2RsOmlucHV0IG1lc3NhZ2U9IndzZGwxOk1lc3NhZ2UiIG5hbWU9IklucHV0Ii8+Ci0JCQk8d3NkbDpvdXRwdXQgbWVzc2FnZT0id3NkbDE6TWVzc2FnZSIgbmFtZT0iT3V0cHV0Ii8+Ci0JCTwvd3NkbDpvcGVyYXRpb24+Ci0JPC93c2RsOnBvcnRUeXBlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0RW1wdHlMb2NhdGlvbi9JbXBvcnRFbXB0eUxvY2F0aW9uLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRFbXB0eUxvY2F0aW9uL0ltcG9ydEVtcHR5TG9jYXRpb24ud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWFiODk2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRFbXB0eUxvY2F0aW9uL0ltcG9ydEVtcHR5TG9jYXRpb24ud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly9leGFtcGxlLmNvbS9JbXBvcnRFbXB0eUxvY2F0aW9uLyIgCi0gICAgICAgICAgICAgICAgICB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLSAgICAgICAgICAgICAgICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgICAgICAgICAgICAgICAgbmFtZT0iSW1wb3J0RW1wdHlMb2NhdGlvbiIgCi0gICAgICAgICAgICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9leGFtcGxlLmNvbS9JbXBvcnRFbXB0eUxvY2F0aW9uLyI+Ci0gIDx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly9zb21ldXJpIiBsb2NhdGlvbj0iIi8+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ibWVzc2FnZSI+Ci0JCTx3c2RsOnBhcnQgbmFtZT0ibWVzc2FnZSIgdHlwZT0ieHNkOnN0cmluZyI+PC93c2RsOnBhcnQ+Ci0JPC93c2RsOm1lc3NhZ2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRFbXB0eU5hbWVzcGFjZS9JbXBvcnRFbXB0eU5hbWVzcGFjZS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0RW1wdHlOYW1lc3BhY2UvSW1wb3J0RW1wdHlOYW1lc3BhY2Uud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzllYWY3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRFbXB0eU5hbWVzcGFjZS9JbXBvcnRFbXB0eU5hbWVzcGFjZS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL2V4YW1wbGUuY29tL0ltcG9ydEVtcHR5TmFtZXNwYWNlLyIgCi0gICAgICAgICAgICAgICAgICB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgCi0gICAgICAgICAgICAgICAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotICAgICAgICAgICAgICAgICAgbmFtZT0iSW1wb3J0RW1wdHlOYW1lc3BhY2UiIAotICAgICAgICAgICAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZXhhbXBsZS5jb20vSW1wb3J0RW1wdHlOYW1lc3BhY2UvIj4KLSAgPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iIiBsb2NhdGlvbj0ic2ltcGxlLndzZGwiLz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJtZXNzYWdlIj4KLQkJPHdzZGw6cGFydCBuYW1lPSJtZXNzYWdlIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3dzZGw6cGFydD4KLQk8L3dzZGw6bWVzc2FnZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0ltcG9ydEVtcHR5TmFtZXNwYWNlL3NpbXBsZS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0RW1wdHlOYW1lc3BhY2Uvc2ltcGxlLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwMGYwOTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0RW1wdHlOYW1lc3BhY2Uvc2ltcGxlLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly9leGFtcGxlLmNvbS9zaW1wbGUvIiAKLSAgICAgICAgICAgICAgICAgIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiAKLSAgICAgICAgICAgICAgICAgIG5hbWU9InNpbXBsZSIgCi0gICAgICAgICAgICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9leGFtcGxlLmNvbS9zaW1wbGUvIj4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0ltcG9ydEVtcHR5TmFtZXNwYWNlQW5kTG9jYXRpb24vSW1wb3J0RW1wdHlOYW1lc3BhY2VBbmRMb2NhdGlvbi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0RW1wdHlOYW1lc3BhY2VBbmRMb2NhdGlvbi9JbXBvcnRFbXB0eU5hbWVzcGFjZUFuZExvY2F0aW9uLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxMzUyMTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0RW1wdHlOYW1lc3BhY2VBbmRMb2NhdGlvbi9JbXBvcnRFbXB0eU5hbWVzcGFjZUFuZExvY2F0aW9uLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vZXhhbXBsZS5jb20vSW1wb3J0RW1wdHlOYW1lc3BhY2VBbmRMb2NhdGlvbi8iIAotICAgICAgICAgICAgICAgICAgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIAotICAgICAgICAgICAgICAgICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLSAgICAgICAgICAgICAgICAgIG5hbWU9IkltcG9ydEVtcHR5TmFtZXNwYWNlQW5kTG9jYXRpb24iIAotICAgICAgICAgICAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZXhhbXBsZS5jb20vSW1wb3J0RW1wdHlOYW1lc3BhY2VBbmRMb2NhdGlvbi8iPgotICA8d3NkbDppbXBvcnQgbmFtZXNwYWNlPSIiIGxvY2F0aW9uPSIiLz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJtZXNzYWdlIj4KLQkJPHdzZGw6cGFydCBuYW1lPSJtZXNzYWdlIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3dzZGw6cGFydD4KLQk8L3dzZGw6bWVzc2FnZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0ltcG9ydE5vTG9jYXRpb25BdHRyaWJ1dGUvSW1wb3J0Tm9Mb2NhdGlvbkF0dHJpYnV0ZS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0Tm9Mb2NhdGlvbkF0dHJpYnV0ZS9JbXBvcnROb0xvY2F0aW9uQXR0cmlidXRlLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwMDIyNzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0Tm9Mb2NhdGlvbkF0dHJpYnV0ZS9JbXBvcnROb0xvY2F0aW9uQXR0cmlidXRlLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vZXhhbXBsZS5jb20vSW1wb3J0Tm9Mb2NhdGlvbkF0dHJpYnV0ZS8iIAotICAgICAgICAgICAgICAgICAgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi0gICAgICAgICAgICAgICAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICAgICAgICAgICAgICAgIG5hbWU9IkltcG9ydE5vTG9jYXRpb25BdHRyaWJ1dGUiIAotICAgICAgICAgICAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZXhhbXBsZS5jb20vSW1wb3J0Tm9Mb2NhdGlvbkF0dHJpYnV0ZS8iPgotICA8d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vc29tZXVyaSIvPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Im1lc3NhZ2UiPgotCQk8d3NkbDpwYXJ0IG5hbWU9Im1lc3NhZ2UiIHR5cGU9InhzZDpzdHJpbmciPjwvd3NkbDpwYXJ0PgotCTwvd3NkbDptZXNzYWdlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0Tm9uRXhpc3RhbnRGaWxlLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnROb25FeGlzdGFudEZpbGUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDc3Njc1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnROb25FeGlzdGFudEZpbGUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnL0ltcG9ydE5vbkV4aXN0YW50RmlsZS8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJJbXBvcnROb25FeGlzdGFudEZpbGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL0ltcG9ydE5vbkV4aXN0YW50RmlsZS8iPgotCTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly9ub25leGlzdGluZ2ZpbGUiIGxvY2F0aW9uPSJUaGlzRmlsZURvZXNudEV4aXN0LndzZGwiPjwvd3NkbDppbXBvcnQ+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRTY2hlbWFXaXRoV1NETEltcG9ydC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0U2NoZW1hV2l0aFdTRExJbXBvcnQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWZhZWViMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRTY2hlbWFXaXRoV1NETEltcG9ydC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvSW1wb3J0U2NoZW1hV2l0aFdTRExJbXBvcnQvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iSW1wb3J0U2NoZW1hV2l0aFdTRExJbXBvcnQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL0ltcG9ydFNjaGVtYVdpdGhXU0RMSW1wb3J0LyIgeG1sbnM6c2NoZW1hPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLSAgPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgbG9jYXRpb249InNjaGVtYS54c2QiPjwvd3NkbDppbXBvcnQ+ICAgIAotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld01lc3NhZ2UiPgotICAgIAk8d3NkbDpwYXJ0IG5hbWU9Ik5ld01lc3NhZ2UiIGVsZW1lbnQ9InNjaGVtYTpOZXdHbG9iYWxFbGVtZW50Ij48L3dzZGw6cGFydD4KLSAgICA8L3dzZGw6bWVzc2FnZT4gICAKLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0ltcG9ydFNjaGVtYVdpdGhXU0RMSW1wb3J0SW52YWxpZE5TLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRTY2hlbWFXaXRoV1NETEltcG9ydEludmFsaWROUy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDFhMDI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0ltcG9ydFNjaGVtYVdpdGhXU0RMSW1wb3J0SW52YWxpZE5TLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9JbXBvcnRTY2hlbWFXaXRoV1NETEltcG9ydEludmFsaWROUy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJJbXBvcnRTY2hlbWFXaXRoV1NETEltcG9ydEludmFsaWROUyIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvSW1wb3J0U2NoZW1hV2l0aFdTRExJbXBvcnRJbnZhbGlkTlMvIj4KLQk8d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vaW52YWxpZG5hbWVzcGFjZSIgbG9jYXRpb249InNjaGVtYS54c2QiPjwvd3NkbDppbXBvcnQ+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRXU0RMV2l0aFdTREwud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0ltcG9ydFdTRExXaXRoV1NETC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzhlMmYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0ltcG9ydFdTRExXaXRoV1NETC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvSW1wb3J0V1NETFdpdGhXU0RMLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IkltcG9ydFdTRExXaXRoV1NETCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvSW1wb3J0V1NETFdpdGhXU0RMLyI+Ci0JPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL3NpbXBsZXdzZGwvIiBsb2NhdGlvbj0ic2ltcGxld3NkbC53c2RsIj48L3dzZGw6aW1wb3J0PgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0V1NETFdpdGhXU0RMSW52YWxpZEZpbGVuYW1lLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRXU0RMV2l0aFdTRExJbnZhbGlkRmlsZW5hbWUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGViYjkzYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRXU0RMV2l0aFdTRExJbnZhbGlkRmlsZW5hbWUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnL0ltcG9ydFdTRExXaXRoV1NETEludmFsaWRGaWxlbmFtZS8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJJbXBvcnRXU0RMV2l0aFdTRExJbnZhbGlkRmlsZW5hbWUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL0ltcG9ydFdTRExXaXRoV1NETEludmFsaWRGaWxlbmFtZS8iPgotCTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly9pbnZhbGlkbmFtZXNwYWNlIiBsb2NhdGlvbj0iU0lNUExFV1NETC53c2RsIj48L3dzZGw6aW1wb3J0PgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0V1NETFdpdGhXU0RMSW52YWxpZE5TLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRXU0RMV2l0aFdTRExJbnZhbGlkTlMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWY4MmVhNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRXU0RMV2l0aFdTRExJbnZhbGlkTlMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnL0ltcG9ydFdTRExXaXRoV1NETEludmFsaWROUy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJJbXBvcnRXU0RMV2l0aFdTRExJbnZhbGlkTlMiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL0ltcG9ydFdTRExXaXRoV1NETEludmFsaWROUy8iPgotCTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly9pbnZhbGlkbmFtZXNwYWNlIiBsb2NhdGlvbj0ic2ltcGxld3NkbC53c2RsIj48L3dzZGw6aW1wb3J0PgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0IueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0IueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDUwMDdlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC9CLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9CIj4KLSAgPHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vQUMiIHNjaGVtYUxvY2F0aW9uPSIuXEMueHNkIi8+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0MueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0MueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNmRmNjc1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC9DLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9BQyI+Ci0gICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IlNhbXBsZVR5cGUiPgotICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJTYW1wbGVFbGVtZW50IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDwveHNkOnNlcXVlbmNlPgotICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTdjMTA3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC9JbXBvcnRXaXRoSW5jb3JyZWN0U2xhc2gud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnL05ld1dTRExGaWxlLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9Ik5ld1dTRExGaWxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9OZXdXU0RMRmlsZS8iPgotICA8d3NkbDp0eXBlcz4KLSAgICA8eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vQUMiPgotICAJCTx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iQy54c2QiLz4KLSAgCQk8eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly9CIiBzY2hlbWFMb2NhdGlvbj0iQi54c2QiLz4KLQkJPC94c2Q6c2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRYTUxJbnZhbGlkV1NETC9JbXBvcnRYTUxJbnZhbGlkV1NETC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0WE1MSW52YWxpZFdTREwvSW1wb3J0WE1MSW52YWxpZFdTREwud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVhNzg4OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRYTUxJbnZhbGlkV1NETC9JbXBvcnRYTUxJbnZhbGlkV1NETC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvSW1wb3J0WE1MSW52YWxpZFdTREwvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iSW1wb3J0WE1MSW52YWxpZFdTREwiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL0ltcG9ydFhNTEludmFsaWRXU0RMLyI+Ci0JPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1hNTEludmFsaWRXU0RMLyIgbG9jYXRpb249IlhNTEludmFsaWRXU0RMLndzZGwiPjwvd3NkbDppbXBvcnQ+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRYTUxJbnZhbGlkV1NETC9YTUxJbnZhbGlkV1NETC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0WE1MSW52YWxpZFdTREwvWE1MSW52YWxpZFdTREwud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE5MmQ4MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRYTUxJbnZhbGlkV1NETC9YTUxJbnZhbGlkV1NETC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gIFRoZSBkZWZpbml0aW9ucyBlbGVtZW50IGlzbid0IGNsb3NlZC4gLS0+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9YTUxJbnZhbGlkV1NETC8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJYTUxJbnZhbGlkV1NETCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvWE1MSW52YWxpZFdTREwvIgotICA8d3NkbDp0eXBlcz4KLSAgICA8eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9YTUxJbnZhbGlkV1NETC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDwveHNkOnNjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iWE1MSW52YWxpZFdTREwiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iWE1MSW52YWxpZFdTRExTT0FQIiB0eXBlPSJ0bnM6WE1MSW52YWxpZFdTREwiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9YTUxJbnZhbGlkV1NETC9OZXdPcGVyYXRpb24iLz4KLSAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJYTUxJbnZhbGlkV1NETCI+Ci0gICAgPHdzZGw6cG9ydCBiaW5kaW5nPSJ0bnM6WE1MSW52YWxpZFdTRExTT0FQIiBuYW1lPSJYTUxJbnZhbGlkV1NETFNPQVAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0ltcG9ydGluZ1NjaGVtYU5vdEluRGlyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0ltcG9ydGluZ1NjaGVtYU5vdEluRGlyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzZmZmRjYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9JbXBvcnRpbmdTY2hlbWFOb3RJbkRpci54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpJbXBvcnRpbmdTY2hlbWFOb3RJbkRpcj0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6cGxhaW5zY2hlbWE9Imh0dHA6Ly9wbGFpbnNjaGVtYSI+Ci0JPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly9wbGFpbnNjaGVtYSIgc2NoZW1hTG9jYXRpb249InN1YmZvbGRlci9QbGFpblNjaGVtYS54c2QiPjwvaW1wb3J0PgotCTxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InBsYWluc2NoZW1hOk5ld1NpbXBsZVR5cGUiPjwvZWxlbWVudD4KLQotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0aW5nV1NETFdpdGhJbXBvcnRlZFNjaGVtYS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvSW1wb3J0aW5nV1NETFdpdGhJbXBvcnRlZFNjaGVtYS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjljN2MwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L0ltcG9ydGluZ1dTRExXaXRoSW1wb3J0ZWRTY2hlbWEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnL0ltcG9ydGluZ1dTRExXaXRoSW1wb3J0ZWRTY2hlbWEvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iSW1wb3J0aW5nV1NETFdpdGhJbXBvcnRlZFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvSW1wb3J0aW5nV1NETFdpdGhJbXBvcnRlZFNjaGVtYS8iIHhtbG5zOndzZGwxPSJodHRwOi8vdGVtcHVyaS5vcmcvSW1wb3J0ZWRJbXBvcnRpbmdTY2hlbWEvIj4KLQk8d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvSW1wb3J0ZWRJbXBvcnRpbmdTY2hlbWEvIiBsb2NhdGlvbj0ic3ViZm9sZGVyL0ltcG9ydGVkSW1wb3J0aW5nU2NoZW1hLndzZGwiPjwvd3NkbDppbXBvcnQ+Ci0JPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdNZXNzYWdlIj4KLQkJPHdzZGw6cGFydCBuYW1lPSJOZXdNZXNzYWdlIiBlbGVtZW50PSJ3c2RsMTpOZXdHbG9iYWxFbGVtZW50Ij48L3dzZGw6cGFydD4KLQk8L3dzZGw6bWVzc2FnZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L05vU2NoZW1lU2NoZW1hTmFtZXNwYWNlSW1wb3J0L05vU2NoZW1lU2NoZW1hTmFtZXNwYWNlSW1wb3J0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9Ob1NjaGVtZVNjaGVtYU5hbWVzcGFjZUltcG9ydC9Ob1NjaGVtZVNjaGVtYU5hbWVzcGFjZUltcG9ydC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OGIxNjVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L05vU2NoZW1lU2NoZW1hTmFtZXNwYWNlSW1wb3J0L05vU2NoZW1lU2NoZW1hTmFtZXNwYWNlSW1wb3J0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIKLQl4bWxuczp0bnM9Ind3dy5leGFtcGxlLm9yZy9Ob1NjaGVtYVNjaGVtYU5hbWVzcGFjZUltcG9ydC8iCi0JeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQluYW1lPSJOb1NjaGVtYVNjaGVtYU5hbWVzcGFjZUltcG9ydCIKLQl0YXJnZXROYW1lc3BhY2U9Ind3dy5leGFtcGxlLm9yZy9Ob1NjaGVtYVNjaGVtYU5hbWVzcGFjZUltcG9ydC8iCi0JeG1sbnM6ZWxtcz0iY29tbW9uLmVsZW1lbnRzIj4KLQk8d3NkbDp0eXBlcz4KLQkJPHNjaGVtYQotCQkJdGFyZ2V0TmFtZXNwYWNlPSJjb21tb24uZWxlbWVudHMiCi0JCQl4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotCQkJPGNvbXBsZXhUeXBlIG5hbWU9Ik15VHlwZSI+Ci0JCQkJPHNlcXVlbmNlPgotCQkJCQk8ZWxlbWVudCBuYW1lPSJNeUVsZW1lbnQiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQkJPC9zZXF1ZW5jZT4KLQkJCTwvY29tcGxleFR5cGU+Ci0JCTwvc2NoZW1hPgotCQk8c2NoZW1hCi0JCQl0YXJnZXROYW1lc3BhY2U9Ind3dy5leGFtcGxlLm9yZy9Ob1NjaGVtYVNjaGVtYU5hbWVzcGFjZUltcG9ydC8iCi0JCQl4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotCQkJPHhzZDppbXBvcnQgbmFtZXNwYWNlPSJjb21tb24uZWxlbWVudHMiLz4KLQkJCTxlbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJlbG1zOk15VHlwZSIgLz4KLQkJCTxlbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCTwvc2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLQkJPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiCi0JCQluYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgLz4KLQk8L3dzZGw6bWVzc2FnZT4KLQk8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotCQk8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0IgotCQkJbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgLz4KLQk8L3dzZGw6bWVzc2FnZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L1NjaGVtYU5hbWVzcGFjZUFBQS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9TY2hlbWFOYW1lc3BhY2VBQUEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NzUwZDQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L1NjaGVtYU5hbWVzcGFjZUFBQS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vQUFBIiB4bWxuczpTY2hlbWFOYW1lc3BhY2VBQUE9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvU2ltcGxlSW1wb3J0L2ltcG9ydC0xLjAud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L1NpbXBsZUltcG9ydC9pbXBvcnQtMS4wLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2NzNiYWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvU2ltcGxlSW1wb3J0L2ltcG9ydC0xLjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL3dzZGwvaW1wb3J0LTEuMC53c2RsIgotCXhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9ImltcG9ydC0xLjAiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL3dzZGwvaW1wb3J0LTEuMC53c2RsIiAvPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvU2ltcGxlSW1wb3J0L3Rlc3QtMS4wLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9TaW1wbGVJbXBvcnQvdGVzdC0xLjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjllMzliNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9TaW1wbGVJbXBvcnQvdGVzdC0xLjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS93c2RsL3Rlc3QtMS4wLndzZGwiCi0JeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0idGVzdC0xLjAiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL3dzZGwvdGVzdC0xLjAud3NkbCIKLQl4bWxuczp3c2RsMT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS93c2RsL2ltcG9ydC0xLjAud3NkbCI+Ci0JPHdzZGw6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS93c2RsL2ltcG9ydC0xLjAud3NkbCIKLQkJbG9jYXRpb249ImltcG9ydC0xLjAud3NkbCIgLz4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L1dTRExJbXBvcnRpbmdTY2hlbWFJbXBvcnRpbmdTY2hlbWEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L1dTRExJbXBvcnRpbmdTY2hlbWFJbXBvcnRpbmdTY2hlbWEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzdiZTc4Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9XU0RMSW1wb3J0aW5nU2NoZW1hSW1wb3J0aW5nU2NoZW1hLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9XU0RMSW1wb3J0aW5nU2NoZW1hSW1wb3J0aW5nU2NoZW1hLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IldTRExJbXBvcnRpbmdTY2hlbWFJbXBvcnRpbmdTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1dTRExJbXBvcnRpbmdTY2hlbWFJbXBvcnRpbmdTY2hlbWEvIj4KLQk8d3NkbDp0eXBlcz4KLQkJPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0gICAgICAgICAgICA8eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJJbXBvcnRpbmdTY2hlbWFOb3RJbkRpci54c2QiLz4KLQkJPC94c2Q6c2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L1dTRExJbXBvcnRpbmdUeXBlcy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvV1NETEltcG9ydGluZ1R5cGVzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0NDM3ZmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvV1NETEltcG9ydGluZ1R5cGVzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9XU0RMSW1wb3J0aW5nVHlwZXMvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iV1NETEltcG9ydGluZ1R5cGVzIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9XU0RMSW1wb3J0aW5nVHlwZXMvIiB4bWxuczp3c2RsMT0iaHR0cDovL3RlbXB1cmkub3JnL1dTRExPbmx5VHlwZXMvIj4KLSAgICA8d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvV1NETE9ubHlUeXBlcy8iIGxvY2F0aW9uPSJXU0RMT25seVR5cGVzLndzZGwiPjwvd3NkbDppbXBvcnQ+ICAgIAotICAgIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3TWVzc2FnZSI+Ci0gICAgCTx3c2RsOnBhcnQgbmFtZT0iTmV3TWVzc2FnZSIgZWxlbWVudD0id3NkbDE6TmV3R2xvYmFsRWxlbWVudCI+PC93c2RsOnBhcnQ+Ci0gICAgPC93c2RsOm1lc3NhZ2U+Ci0gICAgCi08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9XU0RMTmFtZXNwYWNlQUFBLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9XU0RMTmFtZXNwYWNlQUFBLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2YzE4ZGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvV1NETE5hbWVzcGFjZUFBQS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vQUFBIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iV1NETE5hbWVzcGFjZUFBQSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vQUFBIj4KLQk8d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vQUFBIiBsb2NhdGlvbj0iU2NoZW1hTmFtZXNwYWNlQUFBLnhzZCI+PC93c2RsOmltcG9ydD4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L1dTRExPbmx5VHlwZXMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L1dTRExPbmx5VHlwZXMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmFmNGY2NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9XU0RMT25seVR5cGVzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9XU0RMT25seVR5cGVzLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IldTRExPbmx5VHlwZXMiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1dTRExPbmx5VHlwZXMvIj4KLQk8d3NkbDp0eXBlcz4KLQkJPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQkJCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCQkJdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvV1NETE9ubHlUeXBlcy8iPgotCQk8eHNkOmVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD48L3hzZDpzY2hlbWE+Ci0JPC93c2RsOnR5cGVzPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvc2NoZW1hLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L3NjaGVtYS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzZWU1MGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvc2NoZW1hLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOnNjaGVtYT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci0JPGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+Ci0KLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L3NpbXBsZXdzZGwud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L3NpbXBsZXdzZGwud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTlmMzdhZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9zaW1wbGV3c2RsLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9zaW1wbGV3c2RsLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9InNpbXBsZXdzZGwiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL3NpbXBsZXdzZGwvIi8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9zdWJmb2xkZXIvSW1wb3J0ZWRJbXBvcnRpbmdTY2hlbWEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L3N1YmZvbGRlci9JbXBvcnRlZEltcG9ydGluZ1NjaGVtYS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzJmZDJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L3N1YmZvbGRlci9JbXBvcnRlZEltcG9ydGluZ1NjaGVtYS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnL0ltcG9ydGVkSW1wb3J0aW5nU2NoZW1hLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IkltcG9ydGVkSW1wb3J0aW5nU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9JbXBvcnRlZEltcG9ydGluZ1NjaGVtYS8iPgotCTx3c2RsOnR5cGVzPgotCQk8eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCQkJZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JCQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9JbXBvcnRlZEltcG9ydGluZ1NjaGVtYS8iCi0gICAgICAgICAgICB4bWxuczpJbXBvcnRlZFdTRExJbXBvcnRlZFNjaGVtYT0iaHR0cDovL0ltcG9ydGVkV1NETEltcG9ydGVkU2NoZW1hIj4KLQkJPHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vSW1wb3J0ZWRXU0RMSW1wb3J0ZWRTY2hlbWEiIHNjaGVtYUxvY2F0aW9uPSJJbXBvcnRlZFdTRExJbXBvcnRlZFNjaGVtYS54c2QiPjwveHNkOmltcG9ydD4KLQkJPHhzZDplbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9IkltcG9ydGVkV1NETEltcG9ydGVkU2NoZW1hOk5ld1NpbXBsZVR5cGUiPjwveHNkOmVsZW1lbnQ+PC94c2Q6c2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L3N1YmZvbGRlci9JbXBvcnRlZFdTRExJbXBvcnRlZFNjaGVtYS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9zdWJmb2xkZXIvSW1wb3J0ZWRXU0RMSW1wb3J0ZWRTY2hlbWEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTAyYzAwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW1wb3J0L3N1YmZvbGRlci9JbXBvcnRlZFdTRExJbXBvcnRlZFNjaGVtYS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vSW1wb3J0ZWRXU0RMSW1wb3J0ZWRTY2hlbWEiIHhtbG5zOkltcG9ydGVkV1NETEltcG9ydGVkU2NoZW1hPSJodHRwOi8vSW1wb3J0ZWRXU0RMSW1wb3J0ZWRTY2hlbWEiPgotICA8c2ltcGxlVHlwZSBuYW1lPSJOZXdTaW1wbGVUeXBlIj4KLSAgICA8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj4KLSAgICAgIDxtaW5MZW5ndGggdmFsdWU9IjEiLz4KLSAgICA8L3Jlc3RyaWN0aW9uPgotICA8L3NpbXBsZVR5cGU+Ci08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9zdWJmb2xkZXIvUGxhaW5TY2hlbWEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbXBvcnQvc3ViZm9sZGVyL1BsYWluU2NoZW1hLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2VkZTc1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML0ltcG9ydC9zdWJmb2xkZXIvUGxhaW5TY2hlbWEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3BsYWluc2NoZW1hIiB4bWxuczpQbGFpblNjaGVtYT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci0JPHNpbXBsZVR5cGUgbmFtZT0iTmV3U2ltcGxlVHlwZSI+Ci0gICAgPHJlc3RyaWN0aW9uIGJhc2U9InN0cmluZyI+Ci0gICAgICA8bWluTGVuZ3RoIHZhbHVlPSIxIi8+Ci0gICAgPC9yZXN0cmljdGlvbj4KLSAgPC9zaW1wbGVUeXBlPgotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbnZhbGlkU2NoZW1hV2l0aFBhcnRSZWZlcmVuY2VzL0ludmFsaWRTY2hlbWFXaXRoUGFydFJlZmVyZW5jZXMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvSW52YWxpZFNjaGVtYVdpdGhQYXJ0UmVmZXJlbmNlcy9JbnZhbGlkU2NoZW1hV2l0aFBhcnRSZWZlcmVuY2VzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhZGMxNTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9JbnZhbGlkU2NoZW1hV2l0aFBhcnRSZWZlcmVuY2VzL0ludmFsaWRTY2hlbWFXaXRoUGFydFJlZmVyZW5jZXMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJGb28iCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0Zvby8iCi0JeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvRm9vLyIKLQl4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLQk8d3NkbDp0eXBlcz4KLQkJPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0Zvby8iCi0JCQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJhIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImIiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0ianVuayI+Ci0JCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJ5IiB0eXBlPSJ4c2Q6c3RyaW4iLz4KLQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQk8L3hzZDplbGVtZW50PgotCQk8L3hzZDpzY2hlbWE+Ci0JPC93c2RsOnR5cGVzPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iZm9vIj4KLQkJPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6YSIgbmFtZT0iZm9vIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iYmFyIj4KLQkJPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6YiIgbmFtZT0iYmFyIiAvPgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOnBvcnRUeXBlIG5hbWU9IkZvbyI+Ci0JCTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJnZXRGb28iPgotCQkJPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOmJhciIgLz4KLQkJCTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6Zm9vIiAvPgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpwb3J0VHlwZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvTWVzc2FnZUVsZW1lbnQvSW52YWxpZEVsZW1lbnQvTWVzc2FnZUludmFsaWRFbGVtZW50LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML01lc3NhZ2VFbGVtZW50L0ludmFsaWRFbGVtZW50L01lc3NhZ2VJbnZhbGlkRWxlbWVudC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MGJlMjNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvTWVzc2FnZUVsZW1lbnQvSW52YWxpZEVsZW1lbnQvTWVzc2FnZUludmFsaWRFbGVtZW50LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0iTWVzc2FnZUludmFsaWRFbGVtZW50IiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWVzc2FnZUludmFsaWRFbGVtZW50LyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01lc3NhZ2VJbnZhbGlkRWxlbWVudC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01lc3NhZ2VJbnZhbGlkRWxlbWVudC8iPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDwveHNkOnNjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6SW52YWxpZEVsZW1lbnQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iTWVzc2FnZUludmFsaWRFbGVtZW50Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9Ik1lc3NhZ2VJbnZhbGlkRWxlbWVudFNPQVAiIHR5cGU9InRuczpNZXNzYWdlSW52YWxpZEVsZW1lbnQiPg0KLSAgICAgICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPg0KLSAgICAgICAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01lc3NhZ2VJbnZhbGlkRWxlbWVudC9OZXdPcGVyYXRpb24iLz4KLSAgICAgICAgICAgIDx3c2RsOmlucHV0Pg0KLSAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0Pg0KLSAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJNZXNzYWdlSW52YWxpZEVsZW1lbnQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iTWVzc2FnZUludmFsaWRFbGVtZW50U09BUCIgYmluZGluZz0idG5zOk1lc3NhZ2VJbnZhbGlkRWxlbWVudFNPQVAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML01lc3NhZ2VFbGVtZW50L0ludmFsaWRUeXBlL01lc3NhZ2VJbnZhbGlkVHlwZS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9NZXNzYWdlRWxlbWVudC9JbnZhbGlkVHlwZS9NZXNzYWdlSW52YWxpZFR5cGUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmM0ZWRlZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML01lc3NhZ2VFbGVtZW50L0ludmFsaWRUeXBlL01lc3NhZ2VJbnZhbGlkVHlwZS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9Ik5ld1dTRExGaWxlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTmV3V1NETEZpbGUvIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTmV3V1NETEZpbGUvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9OZXdXU0RMRmlsZS8iPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDwveHNkOnNjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iTmV3V1NETEZpbGUiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iTmV3V1NETEZpbGVTT0FQIiB0eXBlPSJ0bnM6TmV3V1NETEZpbGUiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTmV3V1NETEZpbGUvTmV3T3BlcmF0aW9uIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iTmV3V1NETEZpbGUiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iTmV3V1NETEZpbGVTT0FQIiBiaW5kaW5nPSJ0bnM6TmV3V1NETEZpbGVTT0FQIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9OYW1lc3BhY2VEb2VzbnRSZXNvbHZlL05hbWVzcGFjZURvZXNudFJlc29sdmUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvTmFtZXNwYWNlRG9lc250UmVzb2x2ZS9OYW1lc3BhY2VEb2VzbnRSZXNvbHZlLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5ZTc0YzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9OYW1lc3BhY2VEb2VzbnRSZXNvbHZlL05hbWVzcGFjZURvZXNudFJlc29sdmUud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTmFtZXNwYWNlRG9lc250UmVzb2x2ZS8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJOYW1lc3BhY2VEb2VzbnRSZXNvbHZlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTmFtZXNwYWNlRG9lc250UmVzb2x2ZS8iPgotPHdzZGw6ZG9jdW1lbnRhdGlvbj4KLQlUaGlzIFdTREwgZG9jdW1lbnQgdGVzdHMgdGhhdCBhbiBlbGVtZW50IHNwZWNpZmllZCBmb3IgYSBkaWZmZXJlbnQgbmFtZXNwYWNlCi0JdGhhdCBkb2VzIG5vdCByZXNvbHZlIHRvIGFueSByZXNvdXJjZSB2YWxpZGF0ZXMgY29ycmVjdGx5LgotPC93c2RsOmRvY3VtZW50YXRpb24+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9OYW1lc3BhY2VEb2VzbnRSZXNvbHZlLyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIiBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJOYW1lc3BhY2VEb2VzbnRSZXNvbHZlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08d3NkbDpiaW5kaW5nIG5hbWU9Ik5hbWVzcGFjZURvZXNudFJlc29sdmVTT0FQIiB0eXBlPSJ0bnM6TmFtZXNwYWNlRG9lc250UmVzb2x2ZSI+Ci08ZXh0OmVsZW1lbnQgeG1sbnM6ZXh0PSJodHRwOi8vc2NoZW1hcy5ub25leGlzdGFudGRvbWFpbi5uZWQvZWxlbWVudCIvPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL05hbWVzcGFjZURvZXNudFJlc29sdmUvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0IiB1c2U9ImxpdGVyYWwiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIgdXNlPSJsaXRlcmFsIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJOYW1lc3BhY2VEb2VzbnRSZXNvbHZlIj4KLTx3c2RsOnBvcnQgYmluZGluZz0idG5zOk5hbWVzcGFjZURvZXNudFJlc29sdmVTT0FQIiBuYW1lPSJOYW1lc3BhY2VEb2VzbnRSZXNvbHZlU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvTmFtZXNwYWNlUmVzb2x2ZXNIVE1ML05hbWVzcGFjZVJlc29sdmVzSFRNTC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9OYW1lc3BhY2VSZXNvbHZlc0hUTUwvTmFtZXNwYWNlUmVzb2x2ZXNIVE1MLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwMmYzYTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9OYW1lc3BhY2VSZXNvbHZlc0hUTUwvTmFtZXNwYWNlUmVzb2x2ZXNIVE1MLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL05hbWVzcGFjZVJlc29sdmVzSFRNTC8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJOYW1lc3BhY2VSZXNvbHZlc0hUTUwiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9OYW1lc3BhY2VSZXNvbHZlc0hUTUwvIj4KLTx3c2RsOmRvY3VtZW50YXRpb24+Ci0JVGhpcyBXU0RMIHRlc3RzIHRoYXQgYW4gZXh0ZW5zaW9uIGVsZW1lbnQgaW4gYSBkaWZmZXJlbnQgbmFtZXNwYWNlIHRoYXQKLQlyZXNvbHZlcyB0byBhbiBIVE1MIGRvY3VtZW50IChub24tc2NoZW1hIGRvY3VtZW50KSBkb2VzIG5vdCBjYXVzZQotCXZhbGlkYXRpb24gZXJyb3JzLgotPC93c2RsOmRvY3VtZW50YXRpb24+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9OYW1lc3BhY2VSZXNvbHZlc0hUTUwvIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0IiBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9Ik5hbWVzcGFjZVJlc29sdmVzSFRNTCI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJOYW1lc3BhY2VSZXNvbHZlc0hUTUxTT0FQIiB0eXBlPSJ0bnM6TmFtZXNwYWNlUmVzb2x2ZXNIVE1MIj4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPGV4dDplbGVtZW50IHhtbG5zOmV4dD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scyIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9OYW1lc3BhY2VSZXNvbHZlc0hUTUwvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0IiB1c2U9ImxpdGVyYWwiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIgdXNlPSJsaXRlcmFsIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJOYW1lc3BhY2VSZXNvbHZlc0hUTUwiPgotPHdzZGw6cG9ydCBiaW5kaW5nPSJ0bnM6TmFtZXNwYWNlUmVzb2x2ZXNIVE1MU09BUCIgbmFtZT0iTmFtZXNwYWNlUmVzb2x2ZXNIVE1MU09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvUG9ydFR5cGVFbGVtZW50L0ludmFsaWRJbnB1dC9Qb3J0VHlwZUludmFsaWRJbnB1dC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9Qb3J0VHlwZUVsZW1lbnQvSW52YWxpZElucHV0L1BvcnRUeXBlSW52YWxpZElucHV0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmMDJiMjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9Qb3J0VHlwZUVsZW1lbnQvSW52YWxpZElucHV0L1BvcnRUeXBlSW52YWxpZElucHV0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0iUG9ydFR5cGVJbnZhbGlkSW5wdXQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Qb3J0VHlwZUludmFsaWRJbnB1dC8iIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Qb3J0VHlwZUludmFsaWRJbnB1dC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1BvcnRUeXBlSW52YWxpZElucHV0LyI+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgPC94c2Q6c2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQb3J0VHlwZUludmFsaWRJbnB1dCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6SW52YWxpZElucHV0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IlBvcnRUeXBlSW52YWxpZElucHV0U09BUCIgdHlwZT0idG5zOlBvcnRUeXBlSW52YWxpZElucHV0Ij4NCi0gICAgICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgICAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4NCi0gICAgICAgICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Qb3J0VHlwZUludmFsaWRJbnB1dC9OZXdPcGVyYXRpb24iLz4KLSAgICAgICAgICAgIDx3c2RsOmlucHV0Pg0KLSAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0Pg0KLSAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJQb3J0VHlwZUludmFsaWRJbnB1dCI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJQb3J0VHlwZUludmFsaWRJbnB1dFNPQVAiIGJpbmRpbmc9InRuczpQb3J0VHlwZUludmFsaWRJbnB1dFNPQVAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML1BvcnRUeXBlRWxlbWVudC9JbnZhbGlkT3V0cHV0L1BvcnRUeXBlSW52YWxpZE91dHB1dC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9Qb3J0VHlwZUVsZW1lbnQvSW52YWxpZE91dHB1dC9Qb3J0VHlwZUludmFsaWRPdXRwdXQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRkMWI2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML1BvcnRUeXBlRWxlbWVudC9JbnZhbGlkT3V0cHV0L1BvcnRUeXBlSW52YWxpZE91dHB1dC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIG5hbWU9IlBvcnRUeXBlSW52YWxpZE91dHB1dCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1BvcnRUeXBlSW52YWxpZE91dHB1dC8iIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Qb3J0VHlwZUludmFsaWRPdXRwdXQvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Qb3J0VHlwZUludmFsaWRPdXRwdXQvIj4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICA8L3hzZDpzY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBvcnRUeXBlSW52YWxpZE91dHB1dCI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpJbnZhbGlkT3V0cHV0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IlBvcnRUeXBlSW52YWxpZE91dHB1dFNPQVAiIHR5cGU9InRuczpQb3J0VHlwZUludmFsaWRPdXRwdXQiPg0KLSAgICAgICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPg0KLSAgICAgICAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1BvcnRUeXBlSW52YWxpZE91dHB1dC9OZXdPcGVyYXRpb24iLz4KLSAgICAgICAgICAgIDx3c2RsOmlucHV0Pg0KLSAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0Pg0KLSAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJQb3J0VHlwZUludmFsaWRPdXRwdXQiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iUG9ydFR5cGVJbnZhbGlkT3V0cHV0U09BUCIgYmluZGluZz0idG5zOlBvcnRUeXBlSW52YWxpZE91dHB1dFNPQVAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML1NlbGZDb250YWluZWQvRW1wdHkud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkNvbnRhaW5lZC9FbXB0eS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkNvbnRhaW5lZC9FbXB0eS53c2RsCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkNvbnRhaW5lZC9Ob0RlZmF1bHROYW1lc3BhY2UvTm9EZWZhdWx0TmFtZXNwYWNlLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML1NlbGZDb250YWluZWQvTm9EZWZhdWx0TmFtZXNwYWNlL05vRGVmYXVsdE5hbWVzcGFjZS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzMzZTg3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkNvbnRhaW5lZC9Ob0RlZmF1bHROYW1lc3BhY2UvTm9EZWZhdWx0TmFtZXNwYWNlLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9Ob0RlZmF1bHROYW1lc3BhY2UvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iTm9EZWZhdWx0TmFtZXNwYWNlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9Ob0RlZmF1bHROYW1lc3BhY2UvIj4KLSAgPHdzZGw6ZG9jdW1lbnRhdGlvbj4KLSAgICA8ZWxlbWVudE5vTmFtZXNwYWNlLz4KLSAgPC93c2RsOmRvY3VtZW50YXRpb24+ICAgIAotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkNvbnRhaW5lZC9SZWZlcmVuY2VJbmxpbmVUeXBlcy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9TZWxmQ29udGFpbmVkL1JlZmVyZW5jZUlubGluZVR5cGVzLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiYzEzMzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9TZWxmQ29udGFpbmVkL1JlZmVyZW5jZUlubGluZVR5cGVzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvUmVmZXJlbmNlSW5saW5lVHlwZXMvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iUmVmZXJlbmNlSW5saW5lVHlwZXMiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1JlZmVyZW5jZUlubGluZVR5cGVzLyI+Ci0gICAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdNZXNzYWdlIj4KLSAgICAJPHdzZGw6cGFydCBuYW1lPSJOZXdNZXNzYWdlIiBlbGVtZW50PSJ0bnM6TmV3R2xvYmFsRWxlbWVudCI+PC93c2RsOnBhcnQ+Ci0gICAgPC93c2RsOm1lc3NhZ2U+Ci0gICAgPHdzZGw6dHlwZXM+Ci0JCTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JCQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQkJCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1JlZmVyZW5jZUlubGluZVR5cGVzLyI+Ci0JCTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PjwveHNkOnNjaGVtYT4KLQk8L3dzZGw6dHlwZXM+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML1NlbGZDb250YWluZWQvU09BUEJvZHlFbmNvZGVkTm9OYW1lc3BhY2Uud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkNvbnRhaW5lZC9TT0FQQm9keUVuY29kZWROb05hbWVzcGFjZS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGViY2Q4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkNvbnRhaW5lZC9TT0FQQm9keUVuY29kZWROb05hbWVzcGFjZS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnL1NPQVBCb2R5RW5jb2RlZE5vTmFtZXNwYWNlLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IlNPQVBCb2R5RW5jb2RlZE5vTmFtZXNwYWNlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9TT0FQQm9keUVuY29kZWROb05hbWVzcGFjZS8iPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iU09BUEJvZHlFbmNvZGVkTm9OYW1lc3BhY2UiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iU09BUEJvZHlFbmNvZGVkTm9OYW1lc3BhY2VTT0FQIiB0eXBlPSJ0bnM6U09BUEJvZHlFbmNvZGVkTm9OYW1lc3BhY2UiPgotICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9InJwYyIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvU09BUEJvZHlFbmNvZGVkTm9OYW1lc3BhY2UvTmV3T3BlcmF0aW9uIi8+Ci0gICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSBlbmNvZGluZ1N0eWxlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgdXNlPSJlbmNvZGVkIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgZW5jb2RpbmdTdHlsZT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iIHVzZT0iZW5jb2RlZCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTT0FQQm9keUVuY29kZWROb05hbWVzcGFjZSI+Ci0gICAgPHdzZGw6cG9ydCBiaW5kaW5nPSJ0bnM6U09BUEJvZHlFbmNvZGVkTm9OYW1lc3BhY2VTT0FQIiBuYW1lPSJTT0FQQm9keUVuY29kZWROb05hbWVzcGFjZVNPQVAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkNvbnRhaW5lZC9TT0FQQm9keUVuY29kZWRXaXRoTmFtZXNwYWNlLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML1NlbGZDb250YWluZWQvU09BUEJvZHlFbmNvZGVkV2l0aE5hbWVzcGFjZS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTQxM2ZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkNvbnRhaW5lZC9TT0FQQm9keUVuY29kZWRXaXRoTmFtZXNwYWNlLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvU09BUEJvZHlFbmNvZGVkV2l0aE5hbWVzcGFjZS8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJTT0FQQm9keUVuY29kZWRXaXRoTmFtZXNwYWNlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9TT0FQQm9keUVuY29kZWRXaXRoTmFtZXNwYWNlLyI+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJTT0FQQm9keUVuY29kZWRXaXRoTmFtZXNwYWNlIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IlNPQVBCb2R5RW5jb2RlZFdpdGhOYW1lc3BhY2VTT0FQIiB0eXBlPSJ0bnM6U09BUEJvZHlFbmNvZGVkV2l0aE5hbWVzcGFjZSI+Ci0gICAgPHNvYXA6YmluZGluZyBzdHlsZT0icnBjIiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9TT0FQQm9keUVuY29kZWRXaXRoTmFtZXNwYWNlL05ld09wZXJhdGlvbiIvPgotICAgICAgPHdzZGw6aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgZW5jb2RpbmdTdHlsZT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1NPQVBCb2R5RW5jb2RlZFdpdGhOYW1lc3BhY2UvIiB1c2U9ImVuY29kZWQiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSBlbmNvZGluZ1N0eWxlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvU09BUEJvZHlFbmNvZGVkV2l0aE5hbWVzcGFjZS8iIHVzZT0iZW5jb2RlZCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJTT0FQQm9keUVuY29kZWRXaXRoTmFtZXNwYWNlIj4KLSAgICA8d3NkbDpwb3J0IGJpbmRpbmc9InRuczpTT0FQQm9keUVuY29kZWRXaXRoTmFtZXNwYWNlU09BUCIgbmFtZT0iU09BUEJvZHlFbmNvZGVkV2l0aE5hbWVzcGFjZVNPQVAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkltcG9ydC9JbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnQvSW1wb3J0RmlsZVdpdGhTZWxmSW1wb3J0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML1NlbGZJbXBvcnQvSW1wb3J0RmlsZVdpdGhTZWxmSW1wb3J0L0ltcG9ydEZpbGVXaXRoU2VsZkltcG9ydC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTk3OWYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkltcG9ydC9JbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnQvSW1wb3J0RmlsZVdpdGhTZWxmSW1wb3J0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLQotCUltcG9ydHMgYSBmaWxlIHRoYXQgY29udGFpbnMgYSBzZWxmIGltcG9ydC4KLS0tPgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydEZpbGVXaXRoU2VsZkltcG9ydC8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJJbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnQvIj4KLTx3c2RsOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvU2VsZkltcG9ydC8iIGxvY2F0aW9uPSJTZWxmSW1wb3J0LndzZGwiPjwvd3NkbDppbXBvcnQ+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnQvIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0IiBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9IkltcG9ydEZpbGVXaXRoU2VsZkltcG9ydCI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJJbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnRTT0FQIiB0eXBlPSJ0bnM6SW1wb3J0RmlsZVdpdGhTZWxmSW1wb3J0Ij4KLTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci08c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnQvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0IiB1c2U9ImxpdGVyYWwiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIgdXNlPSJsaXRlcmFsIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJJbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnQiPgotPHdzZGw6cG9ydCBiaW5kaW5nPSJ0bnM6SW1wb3J0RmlsZVdpdGhTZWxmSW1wb3J0U09BUCIgbmFtZT0iSW1wb3J0RmlsZVdpdGhTZWxmSW1wb3J0U09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkltcG9ydC9JbXBvcnRGaWxlV2l0aFNlbGZJbXBvcnQvU2VsZkltcG9ydC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9TZWxmSW1wb3J0L0ltcG9ydEZpbGVXaXRoU2VsZkltcG9ydC9TZWxmSW1wb3J0LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4OTFkMzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvV1NETC9TZWxmSW1wb3J0L0ltcG9ydEZpbGVXaXRoU2VsZkltcG9ydC9TZWxmSW1wb3J0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLQotCUEgV1NETCBkb2N1bWVudCB3aXRoIGEgc2VsZiBpbXBvcnQuCi0tLT4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9TZWxmSW1wb3J0LyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IlNlbGZJbXBvcnQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9TZWxmSW1wb3J0LyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1NlbGZJbXBvcnQvIiBsb2NhdGlvbj0iU2VsZkltcG9ydC53c2RsIj48L3dzZGw6aW1wb3J0PgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvU2VsZkltcG9ydC8iPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0iU2VsZkltcG9ydCI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJTZWxmSW1wb3J0U09BUCIgdHlwZT0idG5zOlNlbGZJbXBvcnQiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1NlbGZJbXBvcnQvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0IiB1c2U9ImxpdGVyYWwiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIgdXNlPSJsaXRlcmFsIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJTZWxmSW1wb3J0Ij4KLTx3c2RsOnBvcnQgYmluZGluZz0idG5zOlNlbGZJbXBvcnRTT0FQIiBuYW1lPSJTZWxmSW1wb3J0U09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkltcG9ydC9TaW1wbGVGaWxlL1NlbGZJbXBvcnQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkltcG9ydC9TaW1wbGVGaWxlL1NlbGZJbXBvcnQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzg5MWQzNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML1NlbGZJbXBvcnQvU2ltcGxlRmlsZS9TZWxmSW1wb3J0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLQotCUEgV1NETCBkb2N1bWVudCB3aXRoIGEgc2VsZiBpbXBvcnQuCi0tLT4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9TZWxmSW1wb3J0LyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IlNlbGZJbXBvcnQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9TZWxmSW1wb3J0LyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1NlbGZJbXBvcnQvIiBsb2NhdGlvbj0iU2VsZkltcG9ydC53c2RsIj48L3dzZGw6aW1wb3J0PgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvU2VsZkltcG9ydC8iPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXNwb25zZSIgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0iU2VsZkltcG9ydCI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJTZWxmSW1wb3J0U09BUCIgdHlwZT0idG5zOlNlbGZJbXBvcnQiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1NlbGZJbXBvcnQvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0IiB1c2U9ImxpdGVyYWwiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIgdXNlPSJsaXRlcmFsIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJTZWxmSW1wb3J0Ij4KLTx3c2RsOnBvcnQgYmluZGluZz0idG5zOlNlbGZJbXBvcnRTT0FQIiBuYW1lPSJTZWxmSW1wb3J0U09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkltcG9ydC9TaW1wbGVGaWxlSW52YWxpZC9TZWxmSW1wb3J0LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML1NlbGZJbXBvcnQvU2ltcGxlRmlsZUludmFsaWQvU2VsZkltcG9ydC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZWM4YzQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VsZkltcG9ydC9TaW1wbGVGaWxlSW52YWxpZC9TZWxmSW1wb3J0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLQotCUFuIGludmFsaWQgV1NETCBkb2N1bWVudCB3aXRoIGEgc2VsZiBpbXBvcnQuCi0tLT4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9TZWxmSW1wb3J0LyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IlNlbGZJbXBvcnQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9TZWxmSW1wb3J0LyI+Ci08d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1NlbGZJbXBvcnQvIiBsb2NhdGlvbj0iU2VsZkltcG9ydC53c2RsIj48L3dzZGw6aW1wb3J0PgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvU2VsZkltcG9ydC8iPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPgotPC94c2Q6c2NoZW1hPgotPC93c2RsOnR5cGVzPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci08d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpJbnZhbGlkRWxlbWVudCIgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ij4KLTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTwvd3NkbDptZXNzYWdlPgotPHdzZGw6cG9ydFR5cGUgbmFtZT0iU2VsZkltcG9ydCI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPHdzZGw6YmluZGluZyBuYW1lPSJTZWxmSW1wb3J0U09BUCIgdHlwZT0idG5zOlNlbGZJbXBvcnQiPgotPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1NlbGZJbXBvcnQvTmV3T3BlcmF0aW9uIi8+Ci08d3NkbDppbnB1dD4KLTxzb2FwOmJvZHkgcGFydHM9IiBOZXdPcGVyYXRpb25SZXF1ZXN0IiB1c2U9ImxpdGVyYWwiLz4KLTwvd3NkbDppbnB1dD4KLTx3c2RsOm91dHB1dD4KLTxzb2FwOmJvZHkgcGFydHM9IiBOZXdPcGVyYXRpb25SZXNwb25zZSIgdXNlPSJsaXRlcmFsIi8+Ci08L3dzZGw6b3V0cHV0PgotPC93c2RsOm9wZXJhdGlvbj4KLTwvd3NkbDpiaW5kaW5nPgotPHdzZGw6c2VydmljZSBuYW1lPSJTZWxmSW1wb3J0Ij4KLTx3c2RsOnBvcnQgYmluZGluZz0idG5zOlNlbGZJbXBvcnRTT0FQIiBuYW1lPSJTZWxmSW1wb3J0U09BUCI+Ci08c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotPC93c2RsOnBvcnQ+Ci08L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VydmljZUVsZW1lbnQvSW52YWxpZEJpbmRpbmcvU2VydmljZUludmFsaWRCaW5kaW5nLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML1NlcnZpY2VFbGVtZW50L0ludmFsaWRCaW5kaW5nL1NlcnZpY2VJbnZhbGlkQmluZGluZy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTM3NmE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VydmljZUVsZW1lbnQvSW52YWxpZEJpbmRpbmcvU2VydmljZUludmFsaWRCaW5kaW5nLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0iU2VydmljZUludmFsaWRCaW5kaW5nIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvU2VydmljZUludmFsaWRCaW5kaW5nLyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1NlcnZpY2VJbnZhbGlkQmluZGluZy8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1NlcnZpY2VJbnZhbGlkQmluZGluZy8iPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDwveHNkOnNjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iU2VydmljZUludmFsaWRCaW5kaW5nIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLSAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IlNlcnZpY2VJbnZhbGlkQmluZGluZ1NPQVAiIHR5cGU9InRuczpTZXJ2aWNlSW52YWxpZEJpbmRpbmciPgotICAgICAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICAgICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9Ik5ld09wZXJhdGlvbiI+Ci0gICAgICAgICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9TZXJ2aWNlSW52YWxpZEJpbmRpbmcvTmV3T3BlcmF0aW9uIi8+Ci0gICAgICAgICAgICA8d3NkbDppbnB1dD4KLSAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0PgotICAgICAgICAgICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICAgICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNlcnZpY2VJbnZhbGlkQmluZGluZyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJTZXJ2aWNlSW52YWxpZEJpbmRpbmdTT0FQIiBiaW5kaW5nPSJ0bnM6SW5jb3JyZWN0QmluZGluZ1JlZiI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VydmljZUVsZW1lbnQvTm9BZGRyZXNzL1NlcnZpY2VOb0FkZHJlc3Mud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1dTREwvU2VydmljZUVsZW1lbnQvTm9BZGRyZXNzL1NlcnZpY2VOb0FkZHJlc3Mud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzdhMDdmZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9XU0RML1NlcnZpY2VFbGVtZW50L05vQWRkcmVzcy9TZXJ2aWNlTm9BZGRyZXNzLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0iU2VydmljZU5vQWRkcmVzcyIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1NlcnZpY2VOb0FkZHJlc3MvIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvU2VydmljZU5vQWRkcmVzcy8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1NlcnZpY2VOb0FkZHJlc3MvIj4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICA8L3hzZDpzY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlNlcnZpY2VOb0FkZHJlc3MiPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iU2VydmljZU5vQWRkcmVzc1NPQVAiIHR5cGU9InRuczpTZXJ2aWNlTm9BZGRyZXNzIj4KLSAgICAgICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotICAgICAgICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvU2VydmljZU5vQWRkcmVzcy9OZXdPcGVyYXRpb24iLz4KLSAgICAgICAgICAgIDx3c2RsOmlucHV0PgotICAgICAgICAgICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICAgICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQ+Ci0gICAgICAgICAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgICAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iU2VydmljZU5vQWRkcmVzcyI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJTZXJ2aWNlTm9BZGRyZXNzU09BUCIgYmluZGluZz0idG5zOlNlcnZpY2VOb0FkZHJlc3NTT0FQIj4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvQ2F0YWxvZ1NjaGVtYXMvc2NoZW1hMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvQ2F0YWxvZ1NjaGVtYXMvc2NoZW1hMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmNzE5NWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL0NhdGFsb2dTY2hlbWFzL3NjaGVtYTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zY2hlbWExIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2NoZW1hMSI+Ci08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvQ2F0YWxvZ1NjaGVtYXMvc2NoZW1hMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvQ2F0YWxvZ1NjaGVtYXMvc2NoZW1hMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1NGRmZDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL0NhdGFsb2dTY2hlbWFzL3NjaGVtYTIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zY2hlbWEyIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2NoZW1hMiI+Ci08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvRW50aXRpZXMvbm9ybWFsaXplRW50aXRpZXNJbnZhbGlkLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvRW50aXRpZXMvbm9ybWFsaXplRW50aXRpZXNJbnZhbGlkLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmNzIyOWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL0VudGl0aWVzL25vcm1hbGl6ZUVudGl0aWVzSW52YWxpZC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gSW52YWxpZCB0ZXN0IGZvciBFY2xpcHNlIGRlZmVjdCA3MDY3MC4gLS0+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9ub3JtYWxpemVFbnRpdGllc0ludmFsaWQvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibm9ybWFsaXplRW50aXRpZXNJbnZhbGlkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9ub3JtYWxpemVFbnRpdGllc0ludmFsaWQvIj4KLQk8d3NkbDp0eXBlcz4KLQkJPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQkJCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCQkJdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvbm9ybWFsaXplRW50aXRpZXNJbnZhbGlkLyI+Ci0gICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImFTdHJpbmciPiAKLSAgICAgICAgICAgICAgICA8eHNkOnNpbXBsZVR5cGU+IAotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4gCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6cGF0dGVybiB2YWx1ZT0iRnw8fD58fnxIfEp8eCIvPiAKLSAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPiAKLSAgICAgICAgICAgICAgICA8L3hzZDpzaW1wbGVUeXBlPiAKLSAgICAgICAgICA8L3hzZDplbGVtZW50PiAKLQkJPC94c2Q6c2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9FbnRpdGllcy9ub3JtYWxpemVFbnRpdGllc1ZhbGlkLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvRW50aXRpZXMvbm9ybWFsaXplRW50aXRpZXNWYWxpZC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzVlYTRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9FbnRpdGllcy9ub3JtYWxpemVFbnRpdGllc1ZhbGlkLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSBWYWxpZCB0ZXN0IGZvciBFY2xpcHNlIGRlZmVjdCA3MDY3MC4gLS0+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9ub3JtYWxpemVFbnRpdGVzVmFsaWQvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0ibm9ybWFsaXplRW50aXRlc1ZhbGlkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9ub3JtYWxpemVFbnRpdGVzVmFsaWQvIj4KLQk8d3NkbDp0eXBlcz4KLQkJPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQkJCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCQkJdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvbm9ybWFsaXplRW50aXRlc1ZhbGlkLyI+Ci0gICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImFTdHJpbmciPiAKLSAgICAgICAgICAgICAgICA8eHNkOnNpbXBsZVR5cGU+IAotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4gCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6cGF0dGVybiB2YWx1ZT0iRnwmbHQ7fCZndDt8fnxIfEp8eCIvPiAKLSAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPiAKLSAgICAgICAgICAgICAgICA8L3hzZDpzaW1wbGVUeXBlPiAKLSAgICAgICAgICA8L3hzZDplbGVtZW50PiAKLQkJPC94c2Q6c2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9JbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZS9JbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL0ltcG9ydElubGluZVNjaGVtYVdpdGhJbmNsdWRlL0ltcG9ydElubGluZVNjaGVtYVdpdGhJbmNsdWRlLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzODc4MzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL0ltcG9ydElubGluZVNjaGVtYVdpdGhJbmNsdWRlL0ltcG9ydElubGluZVNjaGVtYVdpdGhJbmNsdWRlLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGRlZmluaXRpb25zIG5hbWU9IkltcG9ydElubGluZVNjaGVtYVdpdGhJbmNsdWRlIgotCXhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZXN0LmNvbS9JbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZSIKLQl4bWxuczp0bnM9Imh0dHA6Ly90ZXN0LmNvbS9JbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZSIKLQl4bWxuczpzY2g9Imh0dHA6Ly90ZXN0LmNvbS9zY2hlbWEiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0JCi0JPHR5cGVzPgotCQk8eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZXN0LmNvbS9zY2hlbWEiPgkJCQotCQkJPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJzY2hlbWEueHNkIi8+Ci0JCTwveHNkOnNjaGVtYT4KLQkJCQotCQk8eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZXN0LmNvbS9JbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZSIgeG1sbnM6c2NoPSJodHRwOi8vdGVzdC5jb20vc2NoZW1hIj4KLQkJCTx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3Rlc3QuY29tL3NjaGVtYSIvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9IkVsZW1lbnQiIHR5cGU9InNjaDpNeVR5cGUiLz4KLQkJPC94c2Q6c2NoZW1hPgotCTwvdHlwZXM+CQotCQotCTxtZXNzYWdlIG5hbWU9InJlcXVlc3QiPgotCQk8cGFydCBuYW1lPSJwYXJ0IiBlbGVtZW50PSJ0bnM6RWxlbWVudCIvPgotCTwvbWVzc2FnZT4JCQotCQotPC9kZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvSW1wb3J0SW5saW5lU2NoZW1hV2l0aEluY2x1ZGUvc2NoZW1hLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9JbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZS9zY2hlbWEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTA2ZTdiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9JbXBvcnRJbmxpbmVTY2hlbWFXaXRoSW5jbHVkZS9zY2hlbWEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZXN0LmNvbS9zY2hlbWEiIAotCXhtbG5zOnRucz0iaHR0cDovL3Rlc3QuY29tL3NjaGVtYSI+Ci0JCi0JPGNvbXBsZXhUeXBlIG5hbWU9Ik15VHlwZSI+Ci0JCTxhdHRyaWJ1dGUgbmFtZT0iYXR0b25lIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiLz4KLQkJPGF0dHJpYnV0ZSBuYW1lPSJhdHR0d28iIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCIvPgotCTwvY29tcGxleFR5cGU+Ci0JCi08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvSW1wb3J0Tm9OU1NjaGVtYS9JbXBvcnROb05TU2NoZW1hLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvSW1wb3J0Tm9OU1NjaGVtYS9JbXBvcnROb05TU2NoZW1hLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3ZmViYjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL0ltcG9ydE5vTlNTY2hlbWEvSW1wb3J0Tm9OU1NjaGVtYS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL1NpbXBsZS9UZXN0IgoteG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi14bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJUZXN0IgotdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vU2ltcGxlL1Rlc3QiPgotICA8d3NkbDp0eXBlcz4KLSAgICA8eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9TaW1wbGUvVGVzdCIKLXhtbG5zOnRucz0iaHR0cDovL1NpbXBsZS9UZXN0IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLSAgICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSJOb1Rucy54c2QiLz4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJvcGVyYXRpb24xIj4KLSAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImlucHV0MSIgbmlsbGFibGU9InRydWUiIHR5cGU9Ik5vVG5zIi8+Ci0gICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICA8L3hzZDpzY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgICA8d3NkbDptZXNzYWdlIG5hbWU9Im9wZXJhdGlvbjFSZXF1ZXN0TXNnIj4KLSAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpvcGVyYXRpb24xIiBuYW1lPSJvcGVyYXRpb24xUGFyYW1ldGVycyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJUZXN0Ij4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ib3BlcmF0aW9uMSI+Ci0gICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6b3BlcmF0aW9uMVJlcXVlc3RNc2ciIG5hbWU9Im9wZXJhdGlvbjFSZXF1ZXN0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9JbXBvcnROb05TU2NoZW1hL05vVG5zLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9JbXBvcnROb05TU2NoZW1hL05vVG5zLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWY5YzJiYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvSW1wb3J0Tm9OU1NjaGVtYS9Ob1Rucy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLSAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJOb1RucyI+Ci0gICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9ImF0dHJpYnV0ZTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL0ltcG9ydE5vTlNTY2hlbWFBbmRTZWNvbmRTY2hlbWFXaXRoTlMvSW1wb3J0Tm9OU1NjaGVtYUFuZFNlY29uZFNjaGVtYVdpdGhOUy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL0ltcG9ydE5vTlNTY2hlbWFBbmRTZWNvbmRTY2hlbWFXaXRoTlMvSW1wb3J0Tm9OU1NjaGVtYUFuZFNlY29uZFNjaGVtYVdpdGhOUy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWQ3OTQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9JbXBvcnROb05TU2NoZW1hQW5kU2Vjb25kU2NoZW1hV2l0aE5TL0ltcG9ydE5vTlNTY2hlbWFBbmRTZWNvbmRTY2hlbWFXaXRoTlMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0U2NoZW1hTm9OYW1lc3BhY2UvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iSW1wb3J0U2NoZW1hTm9OYW1lc3BhY2UiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnRTY2hlbWFOb05hbWVzcGFjZS8iPgotPHdzZGw6dHlwZXM+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0U2NoZW1hTm9OYW1lc3BhY2UvIj4KLQk8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0ibm9UTlMueHNkIi8+Ci08L3hzZDpzY2hlbWE+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0U2NoZW1hTm9OYW1lc3BhY2UvIj4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotPHhzZDplbGVtZW50IG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiIHR5cGU9InhzZDpzdHJpbmciLz4KLTwveHNkOnNjaGVtYT4KLTwvd3NkbDp0eXBlcz4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiPgotPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci08d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0IiBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08L3dzZGw6bWVzc2FnZT4KLTx3c2RsOnBvcnRUeXBlIG5hbWU9IkltcG9ydFNjaGVtYU5vTmFtZXNwYWNlIj4KLTx3c2RsOm9wZXJhdGlvbiBuYW1lPSJOZXdPcGVyYXRpb24iPgotPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlcXVlc3QiLz4KLTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6TmV3T3BlcmF0aW9uUmVzcG9uc2UiLz4KLTwvd3NkbDpvcGVyYXRpb24+Ci08L3dzZGw6cG9ydFR5cGU+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvSW1wb3J0Tm9OU1NjaGVtYUFuZFNlY29uZFNjaGVtYVdpdGhOUy9ub1ROUy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvSW1wb3J0Tm9OU1NjaGVtYUFuZFNlY29uZFNjaGVtYVdpdGhOUy9ub1ROUy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3MDgwYmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL0ltcG9ydE5vTlNTY2hlbWFBbmRTZWNvbmRTY2hlbWFXaXRoTlMvbm9UTlMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci08L3hzZDpzY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvSW5saW5lU2NoZW1hR2VuZXJhdGVkSW1wb3J0cy9Ob0ltcG9ydEZvclVucHJlZml4ZWRBdHRyaWJ1dGUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9JbmxpbmVTY2hlbWFHZW5lcmF0ZWRJbXBvcnRzL05vSW1wb3J0Rm9yVW5wcmVmaXhlZEF0dHJpYnV0ZS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDA3OWNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9JbmxpbmVTY2hlbWFHZW5lcmF0ZWRJbXBvcnRzL05vSW1wb3J0Rm9yVW5wcmVmaXhlZEF0dHJpYnV0ZS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9Ob0ltcG9ydEZvclVucHJlZml4ZWRBdHRyaWJ1dGUvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJOb0ltcG9ydEZvclVucHJlZml4ZWRBdHRyaWJ1dGUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9Ob0ltcG9ydEZvclVucHJlZml4ZWRBdHRyaWJ1dGUvIj4KLQk8d3NkbDp0eXBlcz4KLQkJPHhzOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vTm9JbXBvcnRGb3JVbnByZWZpeGVkQXR0cmlidXRlLyIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIGF0dHJpYnV0ZUZvcm1EZWZhdWx0PSJ1bnF1YWxpZmllZCI+Ci0JCQk8eHM6Y29tcGxleFR5cGUgbmFtZT0idHlwZVdpdGhNaW5NYXhPY2N1cnMiPgotCQkJCTx4czpzZXF1ZW5jZT4KLQkJCQkJPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9IjEiIG5hbWU9ImVsZW0xIiB0eXBlPSJ4czpzdHJpbmciLz4KLQkJCQkJPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9IjEiIG5hbWU9ImVsZW0yIiB0eXBlPSJ4czpzdHJpbmciLz4KLQkJCQk8L3hzOnNlcXVlbmNlPgotCQkJPC94czpjb21wbGV4VHlwZT4KLQkJCTx4czpjb21wbGV4VHlwZSBuYW1lPSJ0eXBlV2l0aFJlc3RyaWN0aW9uIj4KLQkJCQk8eHM6c2VxdWVuY2U+Ci0JCQkJCTx4czplbGVtZW50IG5hbWU9ImVsZW0zIj4KLQkJCQkJCTx4czpzaW1wbGVUeXBlPgotCQkJCQkJCTx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpOTVRPS0VOIj4KLQkJCQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzb21ldGhpbmciLz4KLQkJCQkJCQk8L3hzOnJlc3RyaWN0aW9uPgotCQkJCQkJPC94czpzaW1wbGVUeXBlPgotCQkJCQk8L3hzOmVsZW1lbnQ+Ci0JCQkJPC94czpzZXF1ZW5jZT4KLQkJCTwveHM6Y29tcGxleFR5cGU+Ci0JCTwveHM6c2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvSW5saW5lU2NoZW1hTm9OYW1lc3BhY2UvSW5saW5lU2NoZW1hTm9OYW1lc3BhY2Uud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9JbmxpbmVTY2hlbWFOb05hbWVzcGFjZS9JbmxpbmVTY2hlbWFOb05hbWVzcGFjZS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDEzNzYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9JbmxpbmVTY2hlbWFOb05hbWVzcGFjZS9JbmxpbmVTY2hlbWFOb05hbWVzcGFjZS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbmxpbmVTY2hlbWFOb05hbWVzcGFjZS8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJJbmxpbmVTY2hlbWFOb05hbWVzcGFjZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0lubGluZVNjaGVtYU5vTmFtZXNwYWNlLyI+Ci08d3NkbDp0eXBlcz4KLTx4c2Q6c2NoZW1hPgotCQotPC94c2Q6c2NoZW1hPgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0lubGluZVNjaGVtYU5vTmFtZXNwYWNlLyI+Ci08eHNkOmVsZW1lbnQgbmFtZT0iTmV3T3BlcmF0aW9uUmVzcG9uc2UiIHR5cGU9InhzZDpzdHJpbmciLz4KLTx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci08L3hzZDpzY2hlbWE+Ci08L3dzZGw6dHlwZXM+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlc3BvbnNlIj4KLTx3c2RsOnBhcnQgZWxlbWVudD0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIiBuYW1lPSJOZXdPcGVyYXRpb25SZXNwb25zZSIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDptZXNzYWdlIG5hbWU9Ik5ld09wZXJhdGlvblJlcXVlc3QiPgotPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6TmV3T3BlcmF0aW9uUmVxdWVzdCIgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCIvPgotPC93c2RsOm1lc3NhZ2U+Ci08d3NkbDpwb3J0VHlwZSBuYW1lPSJJbmxpbmVTY2hlbWFOb05hbWVzcGFjZSI+Ci08d3NkbDpvcGVyYXRpb24gbmFtZT0iTmV3T3BlcmF0aW9uIj4KLTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci08d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOk5ld09wZXJhdGlvblJlc3BvbnNlIi8+Ci08L3dzZGw6b3BlcmF0aW9uPgotPC93c2RsOnBvcnRUeXBlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL05vTlNFbGVtZW50UmVmZXJlbmNlL05vTlNFbGVtZW50UmVmZXJlbmNlLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvTm9OU0VsZW1lbnRSZWZlcmVuY2UvTm9OU0VsZW1lbnRSZWZlcmVuY2Uud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWIzMDJkNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvTm9OU0VsZW1lbnRSZWZlcmVuY2UvTm9OU0VsZW1lbnRSZWZlcmVuY2Uud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJOb05TRWxlbWVudFJlZmVyZW5jZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL05vTlNFbGVtZW50UmVmZXJlbmNlLyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL05vTlNFbGVtZW50UmVmZXJlbmNlLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICA8d3NkbDpkb2N1bWVudGF0aW9uPgotCVRoaXMgV1NETCBmaWxlIGRlbW9uc3RyYXRlcyBhIG1lc3NhZ2UgcmVmZXJyaW5nIHRvIGFuIGVsZW1lbnQgdGhhdCBpcyBkZWZpbmVkCi0JYnkgYW4gaW5saW5lIHNjaGVtYSB3aXRoIG5vIHRhcmdldCBuYW1lc3BhY2UuCi0gIDwvd3NkbDpkb2N1bWVudGF0aW9uPgotICA8d3NkbDp0eXBlcz4KLSAgICA8eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgPC94c2Q6c2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTmV3T3BlcmF0aW9uUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJOZXdPcGVyYXRpb25SZXF1ZXN0IiBlbGVtZW50PSJOZXdPcGVyYXRpb25SZXF1ZXN0Ii8+Ci0gIDwvd3NkbDptZXNzYWdlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL09uZUVycm9yRm9ySW5saW5lWFNEUmVmSW52YWxpZElubGluZVhTRC9PbmVFcnJvckZvcklubGluZVhTRFJlZkludmFsaWRJbmxpbmVYU0Qud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9PbmVFcnJvckZvcklubGluZVhTRFJlZkludmFsaWRJbmxpbmVYU0QvT25lRXJyb3JGb3JJbmxpbmVYU0RSZWZJbnZhbGlkSW5saW5lWFNELndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4MzNkNzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL09uZUVycm9yRm9ySW5saW5lWFNEUmVmSW52YWxpZElubGluZVhTRC9PbmVFcnJvckZvcklubGluZVhTRFJlZkludmFsaWRJbmxpbmVYU0Qud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy9PbmVFcnJvckZvcklubGluZVhTRFJlZkludmFsaWRJbmxpbmVYU0QvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iT25lRXJyb3JGb3JJbmxpbmVYU0RSZWZJbnZhbGlkSW5saW5lWFNEIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9PbmVFcnJvckZvcklubGluZVhTRFJlZkludmFsaWRJbmxpbmVYU0QvIiB4bWxuczp4c2QxPSJodHRwOi8vdGVtcHVyaS5vcmcvT25lRXJyb3JGb3JJbmxpbmVYU0RSZWZJbnZhbGlkSW5saW5lWFNELzEiIHhtbG5zOnhzZDI9Imh0dHA6Ly90ZW1wdXJpLm9yZy9PbmVFcnJvckZvcklubGluZVhTRFJlZkludmFsaWRJbmxpbmVYU0QvMSI+Ci0JPHdzZGw6dHlwZXM+Ci0JCTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JCQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQkJCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL09uZUVycm9yRm9ySW5saW5lWFNEUmVmSW52YWxpZElubGluZVhTRC8xIj4KLQkJICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0ieHNkOnN0cmluZ2EiPjwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDwveHNkOnNjaGVtYT4KLQkJPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQkJCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCQkJdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvT25lRXJyb3JGb3JJbmxpbmVYU0RSZWZJbnZhbGlkSW5saW5lWFNELzIiPgotCQkgIDx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL09uZUVycm9yRm9ySW5saW5lWFNEUmVmSW52YWxpZElubGluZVhTRC8xIi8+Ci0JCSAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJOZXdDb21wbGV4VHlwZSI+Ci0gICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJ4c2QxOk5ld0dsb2JhbEVsZW1lbnQiPjwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQkJPC94c2Q6c2NoZW1hPgotCTwvd3NkbDp0eXBlcz4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9SZWZlclRvQW5vdGhlcklubGluZVR5cGUvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjJkOTE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9SZWZlclRvQW5vdGhlcklubGluZVR5cGUvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IlJlZmVyVG9Bbm90aGVySW5saW5lVHlwZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlLyI+Ci0JPHdzZGw6dHlwZXM+Ci0JCTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JCQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQkJCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZTEvIgotICAgICAgICAgICAgeG1sbnM6dHdvPSJodHRwOi8vdGVtcHVyaS5vcmcvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlMi8iPgotICAgICAgICAgIDx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZTIvIi8+Ci0gICAgICAgICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik5ld1NpbXBsZVR5cGUiPgotICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgPHhzZDptaW5MZW5ndGggdmFsdWU9IjEiLz4KLSAgICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgICAgICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0JCSAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InR3bzpOZXdTaW1wbGVUeXBlIj48L3hzZDplbGVtZW50PgotCQk8L3hzZDpzY2hlbWE+Ci0JCTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JCQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQkJCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZTIvIgotICAgICAgICAgICAgeG1sbnM6b25lPSJodHRwOi8vdGVtcHVyaS5vcmcvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlMS8iPgotCQkgIDx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZTEvIi8+Ci0JCSAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik5ld1NpbXBsZVR5cGUiPgotICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgPHhzZDptaW5MZW5ndGggdmFsdWU9IjEiLz4KLSAgICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgICAgICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0JCSAgPHhzZDplbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9Im9uZTpOZXdTaW1wbGVUeXBlIj48L3hzZDplbGVtZW50PgotCQk8L3hzZDpzY2hlbWE+Ci0JPC93c2RsOnR5cGVzPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9SZWZlclRvQW5vdGhlcklubGluZVR5cGUvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlTm9JbXBvcnQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9SZWZlclRvQW5vdGhlcklubGluZVR5cGUvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlTm9JbXBvcnQud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTU5OGZkYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZU5vSW1wb3J0LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIG5hbWU9IlJlZmVyVG9Bbm90aGVySW5saW5lVHlwZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlLyI+Ci0JPHdzZGw6dHlwZXM+Ci0JCTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JCQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQkJCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZTEvIgotICAgICAgICAgICAgeG1sbnM6dHdvPSJodHRwOi8vdGVtcHVyaS5vcmcvUmVmZXJUb0Fub3RoZXJJbmxpbmVUeXBlMi8iPgotICAgICAgICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJOZXdTaW1wbGVUeXBlIj4KLSAgICAgICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgIDx4c2Q6bWluTGVuZ3RoIHZhbHVlPSIxIi8+Ci0gICAgICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAgICAgICA8L3hzZDpzaW1wbGVUeXBlPgotCQkgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJ0d286TmV3U2ltcGxlVHlwZSI+PC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2NoZW1hPgotCQk8eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCQkJZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JCQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9SZWZlclRvQW5vdGhlcklubGluZVR5cGUyLyIKLSAgICAgICAgICAgIHhtbG5zOm9uZT0iaHR0cDovL3RlbXB1cmkub3JnL1JlZmVyVG9Bbm90aGVySW5saW5lVHlwZTEvIj4KLQkJICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTmV3U2ltcGxlVHlwZSI+Ci0gICAgICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgICA8eHNkOm1pbkxlbmd0aCB2YWx1ZT0iMSIvPgotICAgICAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgICAgICAgPC94c2Q6c2ltcGxlVHlwZT4KLQkJICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0ib25lOk5ld1NpbXBsZVR5cGUiPjwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNjaGVtYT4KLQk8L3dzZGw6dHlwZXM+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvUmVzdHJpY3Rpb25QYXR0ZXJuV2l0aENvbG9uL1Jlc3RyaWN0aW9uUGF0dGVybldpdGhDb2xvbi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL1Jlc3RyaWN0aW9uUGF0dGVybldpdGhDb2xvbi9SZXN0cmljdGlvblBhdHRlcm5XaXRoQ29sb24ud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmIxNDM3Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvUmVzdHJpY3Rpb25QYXR0ZXJuV2l0aENvbG9uL1Jlc3RyaWN0aW9uUGF0dGVybldpdGhDb2xvbi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnL1Jlc3RyaWN0aW9uUGF0dGVybldpdGhDb2xvbi8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBuYW1lPSJSZXN0cmljdGlvblBhdHRlcm5XaXRoQ29sb24iIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1Jlc3RyaWN0aW9uUGF0dGVybldpdGhDb2xvbi8iPgotCTx3c2RsOnR5cGVzPgotCQk8eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCQkJZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JCQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9SZXN0cmljdGlvblBhdHRlcm5XaXRoQ29sb24vIj4KLSAgICAgICAgICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJ0aW1lIj4gICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICA8eHNkOnBhdHRlcm4gdmFsdWU9IihbMC05XXsyfTpbMC05XXsyfTpbMC05XXsyfSl8KCNlbXB0eSB2YWx1ZSkiLz4gICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgPC94c2Q6c2ltcGxlVHlwZT4gICAgICAgICAgCi0JCTwveHNkOnNjaGVtYT4KLQk8L3dzZGw6dHlwZXM+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvU2NoZW1hRG9jRWxlbVdpdGhTb3VyY2VBbmRTdWJFbGVtL1NjaGVtYURvY0VsZW1XaXRoU291cmNlQW5kU3ViRWxlbS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEL1NjaGVtYURvY0VsZW1XaXRoU291cmNlQW5kU3ViRWxlbS9TY2hlbWFEb2NFbGVtV2l0aFNvdXJjZUFuZFN1YkVsZW0ud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGNjZjYxNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvU2NoZW1hRG9jRWxlbVdpdGhTb3VyY2VBbmRTdWJFbGVtL1NjaGVtYURvY0VsZW1XaXRoU291cmNlQW5kU3ViRWxlbS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAot77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxkZWZpbml0aW9ucyB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9zYW1wbGUvIiAKLSAgICAgICAgICAgICB4bWxuczp0bnM9Imh0dHA6Ly9zYW1wbGUvIiAKLSAgICAgICAgICAgICB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgCi0gICAgICAgICAgICAgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLQk8dHlwZXM+Ci0JCTx4czpzY2hlbWEgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgYXR0cmlidXRlRm9ybURlZmF1bHQ9InVucXVhbGlmaWVkIj4KLQkJCTx4czpjb21wbGV4VHlwZSBuYW1lPSJOYW1lIj4KLQkJCQk8eHM6YW5ub3RhdGlvbj4KLQkJCQkJPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLQkJCQkJCTxjaG9pY2UgLz4KLQkJCQkJPC94czpkb2N1bWVudGF0aW9uPgotCQkJCTwveHM6YW5ub3RhdGlvbj4KLQkJCTwveHM6Y29tcGxleFR5cGU+Ci0JCTwveHM6c2NoZW1hPgotCTwvdHlwZXM+Ci08L2RlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9WYWx1ZUNvbG9uL1ZhbHVlQ29sb24ud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRC9WYWx1ZUNvbG9uL1ZhbHVlQ29sb24ud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjk0MzM5YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0QvVmFsdWVDb2xvbi9WYWx1ZUNvbG9uLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM6dG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvVmFsdWVDb2xvbi8iCi0JeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iVmFsdWVDb2xvbiIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9WYWx1ZUNvbG9uLyI+Ci0JPHdzZGw6dHlwZXM+Ci0JCTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JCQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQkJCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL1ZhbHVlQ29sb24vIj4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJNeUVsZW1lbnQiPgotCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJPHhzZDphcHBpbmZvIHNvdXJjZT0iaHR0cDovL3NhbXBsZS5jb20iPgotCQkJCQkJPHhzZDppbml0aWFsVmFsdWUga2luZD0ic3RyaW5nX3ZhbHVlIiB2YWx1ZT0iOiIvPgotCQkJCQk8L3hzZDphcHBpbmZvPgotCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQk8L3hzZDplbGVtZW50PgotCQk8L3hzZDpzY2hlbWE+Ci0JPC93c2RsOnR5cGVzPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDRlODYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmODMwMGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1iaW4KLXRlbXAuZm9sZGVyCi13c2kudGVzdHMuamFyCi1idWlsZC54bWwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTVkMTg3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0Yjc5M2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNTdW4gQXByIDE2IDE3OjU5OjM5IEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1MzYwM2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jV2VkIE1heSAzMCAyMzoyNDozNCBFRFQgMjAwNwotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljYWE3NmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jV2VkIE1hciAyOSAwNDowODo0OCBFU1QgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWludGVybmFsLmRlZmF1bHQuY29tcGxpYW5jZT1kZWZhdWx0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWYxYzA4MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lLjAKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC53c2kudGVzdHMKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMAotQnVuZGxlLUNsYXNzUGF0aDogd3NpLnRlc3RzLmphcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy5pbnRlcm5hbC5XU0lUZXN0c1BsdWdpbgotQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IuMAotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2Uud3N0LndzaSwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcywKLSBvcmcuanVuaXQ7YnVuZGxlLXZlcnNpb249IlszLjguMCw0LjAuMCkiLAotIGphdmF4LndzZGw7YnVuZGxlLXZlcnNpb249IlsxLjQuMCwxLjUuMCkiLAotIG9yZy5lY2xpcHNlLm9zZ2ksCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5lY2xpcHNlLndzdC5jb21tYW5kLmVudiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbWFuZC5lbnYuY29yZQotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzLmludGVybmFsCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkYjM2ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lIDA2LCAyMDA3PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjllYzllMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLXNvdXJjZS53c2kudGVzdHMuamFyID0gc3JjLwotb3V0cHV0LndzaS50ZXN0cy5qYXIgPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIHdzaS50ZXN0cy5qYXIsXAotICAgICAgICAgICAgICAgdGVzdFJlc291cmNlcy8sXAotICAgICAgICAgICAgICAgdGVzdC54bWwsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTEyOTE2ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jIHByb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cwotQnVuZGxlLU5hbWUuMCA9IFdTSSBKVW5pdCBUZXN0Ci1CdW5kbGUtVmVuZG9yLjAgPSBFY2xpcHNlLm9yZwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvcGx1Z2luLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2JmNjVmYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci08cGx1Z2luPgotCi0gICAgCi08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdGVzdHMvaW50ZXJuYWwvQ29yZUNvbmZvcm1hbmNlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS90ZXN0cy9pbnRlcm5hbC9Db3JlQ29uZm9ybWFuY2VUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlZDliYWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS90ZXN0cy9pbnRlcm5hbC9Db3JlQ29uZm9ybWFuY2VUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXI7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuV1NJVGVzdFRvb2xzUHJvcGVydGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLnJlcG9ydC5Bc3NlcnRpb25FcnJvcjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1wdWJsaWMgY2xhc3MgQ29yZUNvbmZvcm1hbmNlVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfQ0FTRV9GSUxFID0gInRlc3RjYXNlLnhtbCI7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFEX0lEX0FQID0gIkFQMTAiOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRF9JRF9TU0JQID0gIlNTQlAxMCI7Ci0KLSAgICBwcm90ZWN0ZWQgU3RyaW5nIHBsdWdpblVSSSA9IG51bGw7Ci0gICAgcHJvdGVjdGVkIFN0cmluZyB0YWRJRCA9IFRBRF9JRF9BUDsKLQotICAgIHB1YmxpYyBDb3JlQ29uZm9ybWFuY2VUZXN0KFN0cmluZyBuYW1lKSB7Ci0gICAgICAgIHN1cGVyKG5hbWUpOwotICAgICAgICBwbHVnaW5VUkkgPSBXU0lUZXN0c1BsdWdpbi5nZXRJbnN0YWxsVVJMKCk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgc2V0dXAoKQotICAgIHsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXRyaWV2ZSB0aGUgZXhwZWN0ZWQgYXNzZXJ0aW9uIGZhaWx1cmVzLgotICAgICAqIEBwYXJhbSBmaWxlbmFtZSAtIHRoZSBsb2NhdGlvbiBvZiB0aGUgdGVzdGNhc2UueG1sIGZpbGUuCi0gICAgICogQHJldHVybiB0aGUgZXhwZWN0ZWQgYXNzZXJ0aW9uIGZhaWx1cmVzLgotICAgICAqLwotICAgIHByb3RlY3RlZCBMaXN0IGdldEV4cGVjdGVkQXNzZXJ0aW9uRmFpbHVyZXMoU3RyaW5nIGZpbGVuYW1lKSB7Ci0gICAgICAgIExpc3QgYXNzZXJ0aW9uRmFpbHVyZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBEb2N1bWVudEJ1aWxkZXIgYnVpbGRlciA9IERvY3VtZW50QnVpbGRlckZhY3RvcnkubmV3SW5zdGFuY2UoKS4KLSAgICAgICAgICAgICAgICAgICAgbmV3RG9jdW1lbnRCdWlsZGVyKCk7Ci0gICAgICAgICAgICBEb2N1bWVudCBkb2MgPSBidWlsZGVyLnBhcnNlKGZpbGVuYW1lKTsKLSAgICAgICAgICAgIE5vZGVMaXN0IGxpc3QgPSBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImFzc2VydGlvbiIpOwotICAgICAgICAgICAgaWYgKGxpc3QgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpPTA7IGk8bGlzdC5nZXRMZW5ndGgoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIEVsZW1lbnQgZWxlbWVudCA9IChFbGVtZW50KWxpc3QuaXRlbShpKTsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHRhZCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCJ0YWRJRCIpOwotICAgICAgICAgICAgICAgICAgICBpZiAoKHRhZCAhPSBudWxsKSAmJiB0YWQuZXF1YWxzKHRoaXMudGFkSUQpKQotICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0aW9uRmFpbHVyZXMuYWRkKGVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBhc3NlcnRpb25GYWlsdXJlcyA9IG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGFzc2VydGlvbkZhaWx1cmVzOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvbXBhcmUgdGhlIGFjdHVhbCBlcnJvcnMgd2l0aCB0aGUgZXhwZWN0ZWQgZXJyb3JzLgotICAgICAqIEBwYXJhbSBlcnJvcnMgdGhlIGFjdHVhbCBhc3NlcnRpb24gZmFpbHVyZXMKLSAgICAgKiBAcGFyYW0gZXhwZWN0ZWRFcnJvcnMgdGhlIGV4cGVjdGVkIGFzc2VydGlvbiBmYWlsdXJlcwotICAgICAqLwotICAgIHByb3RlY3RlZCB2b2lkIGFuYWx5emVSZXN1bHRzKExpc3QgZXJyb3JzLCBMaXN0IGV4cGVjdGVkRXJyb3JzKSB7Ci0gICAgICAgIExpc3QgYWN0dWFsRXJyb3JzID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICBpZiAoKGVycm9ycyAhPSBudWxsKSAmJiAoZXhwZWN0ZWRFcnJvcnMgIT0gbnVsbCkpIHsKLSAgICAgICAgICAgIEl0ZXJhdG9yIGkgPSBlcnJvcnMuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgIHdoaWxlIChpLmhhc05leHQoKSkgewotICAgICAgICAgICAgICAgIEFzc2VydGlvbkVycm9yIGUgPSAoQXNzZXJ0aW9uRXJyb3IpaS5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGFzc2VydGlvbklkID0gZS5nZXRBc3NlcnRpb25JRCgpOwotICAgICAgICAgICAgICAgIGFjdHVhbEVycm9ycy5hZGQoYXNzZXJ0aW9uSWQpOwotCi0gICAgICAgICAgICAgICAgaWYgKCFleHBlY3RlZEVycm9ycy5jb250YWlucyhhc3NlcnRpb25JZCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZmFpbCgiVW5leHBlY3RlZCBhc3NlcnRpb24gZmFpbHVyZTogIiArIGFzc2VydGlvbklkKTsgCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpID0gZXhwZWN0ZWRFcnJvcnMuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgIHdoaWxlIChpLmhhc05leHQoKSkgewotICAgICAgICAgICAgICAgIFN0cmluZyBhc3NlcnRpb25JZCA9IChTdHJpbmcpaS5uZXh0KCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIWFjdHVhbEVycm9ycy5jb250YWlucyhhc3NlcnRpb25JZCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZmFpbCgiRXhwZWN0ZWQgYXNzZXJ0aW9uIGZhaWx1cmU6ICIgKyBhc3NlcnRpb25JZCk7IAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZEVycm9ycy5zaXplKCksIGVycm9ycy5zaXplKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJuIHRoZSBsb2NhdGlvbiBvZiB0aGUgZ2l2ZW4gdGFkLgotICAgICAqIEBwYXJhbSB0aWQgdGhlIHRhZCBpZC4KLSAgICAgKiBAcmV0dXJuIHRoZSBsb2NhdGlvbiBvZiB0aGUgdGFkLgotICAgICAqLwotICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VEFEVVJJKFN0cmluZyB0aWQpCi0gICAgewotICAgICAgICBpZiAodGlkLmVxdWFscyhUQURfSURfQVApKQotICAgICAgICAgICAgcmV0dXJuIFdTSVRlc3RUb29sc1Byb3BlcnRpZXMuQVBfQVNTRVJUSU9OX0ZJTEU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBXU0lUZXN0VG9vbHNQcm9wZXJ0aWVzLlNTQlBfQVNTRVJUSU9OX0ZJTEU7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS90ZXN0cy9pbnRlcm5hbC9Db3JlTWVzc2FnZUxvZ0NvbmZvcm1hbmNlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS90ZXN0cy9pbnRlcm5hbC9Db3JlTWVzc2FnZUxvZ0NvbmZvcm1hbmNlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNWQ1ZjczLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdGVzdHMvaW50ZXJuYWwvQ29yZU1lc3NhZ2VMb2dDb25mb3JtYW5jZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLldTSVByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuV1NJVGVzdFRvb2xzUHJvcGVydGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLmFuYWx5emVyLk1lc3NhZ2VBbmFseXplcjsKLQotcHVibGljIGNsYXNzIENvcmVNZXNzYWdlTG9nQ29uZm9ybWFuY2VUZXN0IGV4dGVuZHMgQ29yZUNvbmZvcm1hbmNlVGVzdCAKLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUVTU0FHRV9MT0dfQkFTRV9ESVJFQ1RPUlkgPQotICAgICAgInRlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1FU1NBR0VfTE9HX0VYVEVOU0lPTiA9ICIud3NpbXNnIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgV1NETF9CQVNFX0RJUkVDVE9SWSA9ICJ0ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFdTRExfRVhURU5TSU9OID0gIi53c2RsIjsKLQotICBwdWJsaWMgQ29yZU1lc3NhZ2VMb2dDb25mb3JtYW5jZVRlc3QoU3RyaW5nIG5hbWUpIAotICB7Ci0gICAgICBzdXBlcihuYW1lKTsKLSAgfQotCi0gIC8qKgotICAgKiBKVW5pdCB0ZXN0OiB2YWxpZGF0ZSB0aGUgbWVzc2FnZSBsb2cgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIFdTLUkgUHJvZmlsZS4KLSAgICogQHBhcmFtIHRhZCBoZSBXUy1JIFRlc3QgQXNzZXJ0aW9uIERvY3VtZW50Ci0gICAqIEBwYXJhbSB0ZXN0TmFtZSB0aGUgbmFtZSBvZiB0aGUgdGVzdCBjb250YWluaW5nIHRoZSB3c2RsIGRvY3VtZW50Ci0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0KFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIHRlc3ROYW1lLCBTdHJpbmcgdGFkSUQpIHsJCi0gICAgICB0aGlzLnRhZElEID0gdGFkSUQ7Ci0KLSAgICAgIGFzc2VydE5vdE51bGwoIlByb2JsZW1zIGRldGVybWluaW5nIGJhc2UgdXJsIiwgcGx1Z2luVVJJKTsKLSAgICAgIFN0cmluZyB0ZXN0RGlyZWN0b3J5ICA9IHBsdWdpblVSSSArIE1FU1NBR0VfTE9HX0JBU0VfRElSRUNUT1JZICsgIi8iICsKLSAgICAgICAgICAgICAgY2F0ZWdvcnkgKyAiLyIgKyB0ZXN0TmFtZTsKLSAgICAgIFN0cmluZyBtZXNzYWdlTG9nRmlsZSA9ICJmaWxlOi8vIiArIHRlc3REaXJlY3RvcnkgKyAiLyIgKyB0ZXN0TmFtZSArCi0gICAgICAgICAgICAgIE1FU1NBR0VfTE9HX0VYVEVOU0lPTjsKLSAgICAgIFN0cmluZyB0ZXN0Y2FzZUZpbGUgPSB0ZXN0RGlyZWN0b3J5ICsgICIvIiArIFRFU1RfQ0FTRV9GSUxFOwotCi0gICAgICAvLyB2YWxpZGF0ZSB0aGUgbWVzc2FnZSBsb2cgZG9jdW1lbnQKLSAgICAgIE1lc3NhZ2VBbmFseXplciBhbmFseXplciA9IHZhbGlkYXRlQ29uZm9ybWFuY2UobWVzc2FnZUxvZ0ZpbGUsIHRhZElEKTsKLSAgICAgIGFzc2VydE5vdE51bGwoIlVua25vd24gcHJvYmxlbXMgZHVyaW5nIHZhbGlkYXRpb24iLCBhbmFseXplcik7Ci0KLSAgICAgIC8vIHJldHJpZXZlIHRoZSBleHBlY3RlZCBhc3NlcnRpb24gZmFpbHVyZXMKLSAgICAgIExpc3QgZXhwZWN0ZWRFcnJvcnMgPSBnZXRFeHBlY3RlZEFzc2VydGlvbkZhaWx1cmVzKHRlc3RjYXNlRmlsZSk7Ci0gICAgICBhc3NlcnROb3ROdWxsKCJQcm9ibGVtcyByZXRyaWV2aW5nIGV4cGVjdGVkIGZhaWx1cmVzIiwgZXhwZWN0ZWRFcnJvcnMpOwotCi0gICAgICAvLyBjb21wYXJlIHRoZSBhY3R1YWwgZXJyb3JzIHdpdGggdGhlIGV4cGVjdGVkIGVycm9ycwotICAgICAgYW5hbHl6ZVJlc3VsdHMoYW5hbHl6ZXIuZ2V0QXNzZXJ0aW9uRXJyb3JzKCksIGV4cGVjdGVkRXJyb3JzKTsKLSAgfQotCi0gIC8qKgotICAgKiBWYWxpZGF0ZSB0aGUgd3NkbCBkb2N1bWVudCBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgV1MtSSBQcm9maWxlLgotICAgKiBAcGFyYW0gdGFkICB0aGUgV1MtSSBUZXN0IEFzc2VydGlvbiBEb2N1bWVudAotICAgKiBAcGFyYW0gZmlsZW5hbWUgdGhlIHdzZGwgZG9jdW1lbnQKLSAgICogQHJldHVybiB0aGUgV1NETEFuYWx5emVyIG9iamVjdCBjb250YWluaW5nIHRoZSB2YWxpZGF0aW9uIHJlc3VsdHMKLSAgICovICAKLSAgcHJvdGVjdGVkIE1lc3NhZ2VBbmFseXplciB2YWxpZGF0ZUNvbmZvcm1hbmNlKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIHRhZElEKSB7Ci0gICAgICBNZXNzYWdlQW5hbHl6ZXIgYW5hbHl6ZXIgPSBudWxsOwotICAgICAgdHJ5IHsKLSAgICAgICAgICBXU0lQcmVmZXJlbmNlcyBwcmVmZXJlbmNlcyA9IG5ldyBXU0lQcmVmZXJlbmNlcygpOwotICAgICAgICAgIHByZWZlcmVuY2VzLnNldENvbXBsaWFuY2VMZXZlbCggV1NJVGVzdFRvb2xzUHJvcGVydGllcy5TVE9QX05PTl9XU0kpOwotICAgICAgICAgIHByZWZlcmVuY2VzLnNldFRBREZpbGUoZ2V0VEFEVVJJKHRhZElEKSk7Ci0KLSAgICAgICAgICBhbmFseXplciA9IG5ldyBNZXNzYWdlQW5hbHl6ZXIoZmlsZW5hbWUsIHByZWZlcmVuY2VzKTsKLQotICAgICAgICAgIC8vIHJ1biB0aGUgY29uZm9ybWFuY2UgY2hlY2sgYW5kIGFkZCBlcnJvcnMgYW5kIHdhcm5pbmdzIGFzIG5lZWRlZAotICAgICAgICAgIGFuYWx5emVyLnZhbGlkYXRlQ29uZm9ybWFuY2UoKTsKLSAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9CQotICAgICAgcmV0dXJuIGFuYWx5emVyOwotICB9Ci0KLSAgCi0gIAotICAvKioKLSAgICogSlVuaXQgdGVzdDogdmFsaWRhdGUgdGhlIG1lc3NhZ2UgbG9nIHdpdGggYSBXU0RMIGZpbGUKLSAgICogQHBhcmFtIHdzZGxGaWxlIFVSSSBvZiB0aGUgV1NETCBmaWxlCi0gICAqIEBwYXJhbSBXU0RhdGEgU3RyaW5nIGFycmF5IGNvbnRhaW5pbmc6IGVsZW1lbnRuYW1lLCBuYW1lc3BhY2UsIHBhcmVudG5hbWUsIHR5cGUKLSAgICogQHBhcmFtIGZpbGVuYW1lIHRoZSBuYW1lIG9mIHRoZSBsb2cgYW5kIHdzZGwgZmlsZSAodGhleSBzaG91bGQgYmUgbG9jYXRlZCBpbiB0aGUgbG9nIGFuZCB3c2RsIHBhdGhzIHJlc3BlY3RpdmVseSkKLSAgICovCi0gIAotICBwcm90ZWN0ZWQgdm9pZCBydW5UZXN0V2l0aFdTREwoU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgdGVzdE5hbWUsIFN0cmluZ1tdIFdTRGF0YSkgewkKLQotICAgICAgYXNzZXJ0Tm90TnVsbCgiUHJvYmxlbXMgZGV0ZXJtaW5pbmcgYmFzZSB1cmwiLCBwbHVnaW5VUkkpOwotICAgICAgU3RyaW5nIHRlc3REaXJlY3RvcnkgID0gcGx1Z2luVVJJICsgTUVTU0FHRV9MT0dfQkFTRV9ESVJFQ1RPUlkgKyAiLyIgKwotICAgICAgICAgICAgICBjYXRlZ29yeSArICIvIiArIHRlc3ROYW1lOwotICAgICAgU3RyaW5nIG1lc3NhZ2VMb2dGaWxlID0gImZpbGU6Ly8iICsgdGVzdERpcmVjdG9yeSArICIvIiArIHRlc3ROYW1lICsKLSAgICAgICAgICAgICAgTUVTU0FHRV9MT0dfRVhURU5TSU9OOwotICAgICAgU3RyaW5nIHRlc3RjYXNlRmlsZSA9IHRlc3REaXJlY3RvcnkgKyAgIi8iICsgVEVTVF9DQVNFX0ZJTEU7Ci0gICAgICBTdHJpbmcgd3NkbEZpbGUgPSAiZmlsZTovLyIgKyBwbHVnaW5VUkkgKyBXU0RMX0JBU0VfRElSRUNUT1JZICsgIi8iICsgY2F0ZWdvcnkgKyAiLyIgKyB0ZXN0TmFtZSArIFdTRExfRVhURU5TSU9OOwotICAgICAgCi0gICAgICAvLyB2YWxpZGF0ZSB0aGUgbWVzc2FnZSBsb2cgZG9jdW1lbnQKLSAgICAgIE1lc3NhZ2VBbmFseXplciBhbmFseXplciA9IHZhbGlkYXRlQ29uZm9ybWFuY2VXaXRoV1NETChtZXNzYWdlTG9nRmlsZSwgd3NkbEZpbGUsIFdTRGF0YSk7Ci0gICAgICBhc3NlcnROb3ROdWxsKCJVbmtub3duIHByb2JsZW1zIGR1cmluZyB2YWxpZGF0aW9uIiwgYW5hbHl6ZXIpOwotCi0gICAgICAvLyByZXRyaWV2ZSB0aGUgZXhwZWN0ZWQgYXNzZXJ0aW9uIGZhaWx1cmVzCi0gICAgICBMaXN0IGV4cGVjdGVkRXJyb3JzID0gZ2V0RXhwZWN0ZWRBc3NlcnRpb25GYWlsdXJlcyh0ZXN0Y2FzZUZpbGUpOwotICAgICAgYXNzZXJ0Tm90TnVsbCgiUHJvYmxlbXMgcmV0cmlldmluZyBleHBlY3RlZCBmYWlsdXJlcyIsIGV4cGVjdGVkRXJyb3JzKTsKLQotICAgICAgLy8gY29tcGFyZSB0aGUgYWN0dWFsIGVycm9ycyB3aXRoIHRoZSBleHBlY3RlZCBlcnJvcnMKLSAgICAgIGFuYWx5emVSZXN1bHRzKGFuYWx5emVyLmdldEFzc2VydGlvbkVycm9ycygpLCBleHBlY3RlZEVycm9ycyk7Ci0gIH0KLQotCi0gIC8qKgotICAgKiBWYWxpZGF0ZSBsb2cgd2l0aCBhIFdTREwgZmlsZQotICAgKiBAcGFyYW0gd3NkbEZpbGUgVVJJIG9mIHRoZSBXU0RMIGZpbGUKLSAgICogQHBhcmFtIFdTRGF0YSBTdHJpbmcgYXJyYXkgY29udGFpbmluZzogZWxlbWVudG5hbWUsIG5hbWVzcGFjZSwgcGFyZW50bmFtZSwgdHlwZQotICAgKiBAcGFyYW0gZmlsZW5hbWUgdGhlIG5hbWUgb2YgdGhlIGxvZyBhbmQgd3NkbCBmaWxlICh0aGV5IHNob3VsZCBiZSBsb2NhdGVkIGluIHRoZSBsb2cgYW5kIHdzZGwgcGF0aHMgcmVzcGVjdGl2ZWx5KQotICAgKiBAcmV0dXJuIHRoZSBXU0RMQW5hbHl6ZXIgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHZhbGlkYXRpb24gcmVzdWx0cwotICAgKi8gIAotCi0JcHJvdGVjdGVkIE1lc3NhZ2VBbmFseXplciB2YWxpZGF0ZUNvbmZvcm1hbmNlV2l0aFdTREwoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgd3NkbEZpbGUsIFN0cmluZ1tdIFdTRGF0YSkgewotCSAgICBNZXNzYWdlQW5hbHl6ZXIgYW5hbHl6ZXIgPSBudWxsOwotCSAgICB0cnkgewotCSAgICAgICAgV1NJUHJlZmVyZW5jZXMgcHJlZmVyZW5jZXMgPSBuZXcgV1NJUHJlZmVyZW5jZXMoKTsKLQkgICAgICAgIHByZWZlcmVuY2VzLnNldENvbXBsaWFuY2VMZXZlbCggV1NJVGVzdFRvb2xzUHJvcGVydGllcy5TVE9QX05PTl9XU0kpOwotCSAgICAgICAgcHJlZmVyZW5jZXMuc2V0VEFERmlsZShnZXRUQURVUkkodGFkSUQpKTsKLQkKLQkgICAgICAgIGFuYWx5emVyID0gbmV3IE1lc3NhZ2VBbmFseXplcihmaWxlbmFtZSwgd3NkbEZpbGUsIFdTRGF0YVswXSwgIFdTRGF0YVsxXSwgV1NEYXRhWzJdLCBXU0RhdGFbM10sIHByZWZlcmVuY2VzKTsKLQkKLQkgICAgICAgIC8vIHJ1biB0aGUgY29uZm9ybWFuY2UgY2hlY2sgYW5kIGFkZCBlcnJvcnMgYW5kIHdhcm5pbmdzIGFzIG5lZWRlZAotCSAgICAgICAgYW5hbHl6ZXIudmFsaWRhdGVDb25mb3JtYW5jZSgpOwotCSAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICAgICAgcmV0dXJuIG51bGw7Ci0JICAgIH0JCi0JICAgIHJldHVybiBhbmFseXplcjsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdGVzdHMvaW50ZXJuYWwvQ29yZVdTRExDb25mb3JtYW5jZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdGVzdHMvaW50ZXJuYWwvQ29yZVdTRExDb25mb3JtYW5jZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzgzMzg0Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL0NvcmVXU0RMQ29uZm9ybWFuY2VUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuQmluZGluZzsKLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5NZXNzYWdlOwotaW1wb3J0IGphdmF4LndzZGwuUG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlBvcnRUeXBlOwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBqYXZheC53c2RsLnhtbC5XU0RMUmVhZGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5XU0lQcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Qud3NpLmludGVybmFsLldTSVRlc3RUb29sc1Byb3BlcnRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5hbmFseXplci5XU0RMQW5hbHl6ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLndzZGwuV1NETFJlYWRlckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5jb3JlLnhtbC5YTUxVdGlsczsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLQotcHVibGljIGNsYXNzIENvcmVXU0RMQ29uZm9ybWFuY2VUZXN0IGV4dGVuZHMgQ29yZUNvbmZvcm1hbmNlVGVzdCAKLXsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgV1NETF9CQVNFX0RJUkVDVE9SWSA9ICJ0ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFdTRExfRVhURU5TSU9OID0gIi53c2RsIjsKLQotICBwdWJsaWMgQ29yZVdTRExDb25mb3JtYW5jZVRlc3QoU3RyaW5nIG5hbWUpIAotICB7Ci0gICAgICBzdXBlcihuYW1lKTsKLSAgfQotCi0gIC8qKgotICAgKiBKVW5pdCB0ZXN0OiB2YWxpZGF0ZSB0aGUgd3NkbCBkb2N1bWVudCBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgV1MtSSBQcm9maWxlLgotICAgKiBAcGFyYW0gdGFkIGhlIFdTLUkgVGVzdCBBc3NlcnRpb24gRG9jdW1lbnQKLSAgICogQHBhcmFtIHRlc3ROYW1lIHRoZSBuYW1lIG9mIHRoZSB0ZXN0IGNvbnRhaW5pbmcgdGhlIHdzZGwgZG9jdW1lbnQKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHJ1blRlc3QoU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgdGVzdE5hbWUsIFN0cmluZyB0YWRJRCkKLSAgewkKLQl0aGlzLnRhZElEID0gdGFkSUQ7Ci0KLSAgICBhc3NlcnROb3ROdWxsKCJQcm9ibGVtcyBkZXRlcm1pbmluZyBiYXNlIHVybCIsIHBsdWdpblVSSSk7Ci0gICAgU3RyaW5nIHRlc3REaXJlY3RvcnkgID0gcGx1Z2luVVJJICsgV1NETF9CQVNFX0RJUkVDVE9SWSArICIvIiArIGNhdGVnb3J5ICsgIi8iICsgdGVzdE5hbWU7Ci0gICAgU3RyaW5nIHdzZGxGaWxlID0gImZpbGU6Ly8iICsgdGVzdERpcmVjdG9yeSArICIvIiArIHRlc3ROYW1lICsgV1NETF9FWFRFTlNJT047Ci0gICAgU3RyaW5nIHRlc3RjYXNlRmlsZSA9IHRlc3REaXJlY3RvcnkgKyAgIi8iICsgVEVTVF9DQVNFX0ZJTEU7Ci0gICAgCi0JLy8gdmFsaWRhdGUgdGhlIFdTREwgZG9jdW1lbnQKLSAgICBXU0RMQW5hbHl6ZXIgYW5hbHl6ZXIgPSB2YWxpZGF0ZUNvbmZvcm1hbmNlKHdzZGxGaWxlLCB0YWRJRCk7Ci0gICAgYXNzZXJ0Tm90TnVsbCgiVW5rbm93biBwcm9ibGVtcyBkdXJpbmcgdmFsaWRhdGlvbiIsIGFuYWx5emVyKTsKLSAgICAKLQkvLyByZXRyaWV2ZSB0aGUgZXhwZWN0ZWQgYXNzZXJ0aW9uIGZhaWx1cmVzCi0JTGlzdCBleHBlY3RlZEVycm9ycyA9IGdldEV4cGVjdGVkQXNzZXJ0aW9uRmFpbHVyZXModGVzdGNhc2VGaWxlKTsKLQlhc3NlcnROb3ROdWxsKCJQcm9ibGVtcyByZXRyaWV2aW5nIGV4cGVjdGVkIGZhaWx1cmVzIiwgZXhwZWN0ZWRFcnJvcnMpOwotCQotCS8vIGNvbXBhcmUgdGhlIGFjdHVhbCBlcnJvcnMgd2l0aCB0aGUgZXhwZWN0ZWQgZXJyb3JzCi0gICAgYW5hbHl6ZVJlc3VsdHMoYW5hbHl6ZXIuZ2V0QXNzZXJ0aW9uRXJyb3JzKCksIGV4cGVjdGVkRXJyb3JzKTsKLSAgfSAgICAKLQotICAvKioKLSAgICogVmFsaWRhdGUgdGhlIHdzZGwgZG9jdW1lbnQgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIFdTLUkgUHJvZmlsZS4KLSAgICogQHBhcmFtIHRhZCAgdGhlIFdTLUkgVGVzdCBBc3NlcnRpb24gRG9jdW1lbnQKLSAgICogQHBhcmFtIGZpbGVuYW1lIHRoZSB3c2RsIGRvY3VtZW50Ci0gICAqIEByZXR1cm4gdGhlIFdTRExBbmFseXplciBvYmplY3QgY29udGFpbmluZyB0aGUgdmFsaWRhdGlvbiByZXN1bHRzCi0gICAqLyAgCi0gIHByb3RlY3RlZCBXU0RMQW5hbHl6ZXIgdmFsaWRhdGVDb25mb3JtYW5jZShTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyB0YWRJRCkKLSAgewotCVdTRExBbmFseXplciBhbmFseXplciA9IG51bGw7Ci0gICAgdHJ5IAotICAgIHsKLSAgIAkgIFdTSVByZWZlcmVuY2VzIHByZWZlcmVuY2VzID0gbmV3IFdTSVByZWZlcmVuY2VzKCk7Ci0gICAJICBwcmVmZXJlbmNlcy5zZXRDb21wbGlhbmNlTGV2ZWwoIFdTSVRlc3RUb29sc1Byb3BlcnRpZXMuU1RPUF9OT05fV1NJKTsKLQkgIHByZWZlcmVuY2VzLnNldFRBREZpbGUoZ2V0VEFEVVJJKHRhZElEKSk7Ci0JCQotCSAgYW5hbHl6ZXIgPSBuZXcgV1NETEFuYWx5emVyKGZpbGVuYW1lLCBwcmVmZXJlbmNlcyk7Ci0JICBzZXRDb25maWd1cmF0aW9ucyhmaWxlbmFtZSwgYW5hbHl6ZXIpOwotCQkKLQkgIC8vIHJ1biB0aGUgY29uZm9ybWFuY2UgY2hlY2sgYW5kIGFkZCBlcnJvcnMgYW5kIHdhcm5pbmdzIGFzIG5lZWRlZAotCSAgYW5hbHl6ZXIudmFsaWRhdGVDb25mb3JtYW5jZSgpOwotICAgIH0gICAgCi0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0JCi0JcmV0dXJuIGFuYWx5emVyOwotICB9Ci0gIAotICAvKioKLSAgICogR2F0aGVyIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZnJvbSB0aGUgV1NETCBmaWxlLgotICAgKiBAcGFyYW0gZmlsZU5hbWUgdGhlIHdzZGwgbG9jYXRpb24uCi0gICAqIEBwYXJhbSBhIFdTRExBbmFseXplciBvYmplY3QgY29udGFpbmcgY29uZmlndXJhdGlvbiBpbmZvLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc2V0Q29uZmlndXJhdGlvbnMoU3RyaW5nIGZpbGVuYW1lLCBXU0RMQW5hbHl6ZXIgYW5hbHl6ZXIpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBXU0RMUmVhZGVyIHdzZGxSZWFkZXIgPSBuZXcgV1NETFJlYWRlckltcGwoKTsKLQotICAgICAgLy8gU2V0IGZlYXR1cmVzCi0gICAgICB3c2RsUmVhZGVyLnNldEZlYXR1cmUoY29tLmlibS53c2RsLkNvbnN0YW50cy5GRUFUVVJFX1ZFUkJPU0UsIGZhbHNlKTsKLSAgICAgIHdzZGxSZWFkZXIuc2V0RmVhdHVyZShjb20uaWJtLndzZGwuQ29uc3RhbnRzLkZFQVRVUkVfSU1QT1JUX0RPQ1VNRU5UUywgdHJ1ZSk7Ci0KLSAgICAgIC8vIFBhcnNlIHRoZSBXU0RMIGRvY3VtZW50Ci0gICAgICBEb2N1bWVudCBkb2N1bWVudCA9IFhNTFV0aWxzLnBhcnNlWE1MRG9jdW1lbnQoZmlsZW5hbWUpOwotCSAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gd3NkbFJlYWRlci5yZWFkV1NETChmaWxlbmFtZSwgZG9jdW1lbnQpOwotICAgICAgLy9EZWZpbml0aW9uIGRlZmluaXRpb24gPSByZWFkZXIucmVhZFdTREwoZmlsZW5hbWUpOwotCi0JICBTdHJpbmcgbmFtZXNwYWNlID0gZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLQotCSAgLy8gZ2V0IGFsbCB0aGUgY29sbGVjdGlvbnMgd2UgbWF5IG5lZWQgdG8gdmFsaWRhdGUKLQkgIENvbGxlY3Rpb24gc2VydmljZXMgPSBkZWZpbml0aW9uLmdldFNlcnZpY2VzKCkudmFsdWVzKCk7Ci0JICBDb2xsZWN0aW9uIGJpbmRpbmdzID0gZGVmaW5pdGlvbi5nZXRCaW5kaW5ncygpLnZhbHVlcygpOwotCSAgQ29sbGVjdGlvbiBwb3J0VHlwZXMgPSBkZWZpbml0aW9uLmdldFBvcnRUeXBlcygpLnZhbHVlcygpOwotCSAgQ29sbGVjdGlvbiBtZXNzYWdlcyA9IGRlZmluaXRpb24uZ2V0TWVzc2FnZXMoKS52YWx1ZXMoKTsKLQotCSAgLy8gVGhlIFdTLUkgY29uZm9ybWFuY2UgdG9vbHMgcmVxdWlyZSB0aGF0IGVhY2ggc2VydmljZSBiZSBhbmFseXplZCBzZXBhcmF0ZWx5LgotCSAgLy8gR2V0IGFsbCB0aGUgc2VydmljZXMgYW5kIGFuYWx5emUgdGhlbS4KLQkgIGlmIChzZXJ2aWNlcyAhPSBudWxsICYmICFzZXJ2aWNlcy5pc0VtcHR5KCkpCi0JICB7Ci0JICAgIEl0ZXJhdG9yIHNlcnZpY2VJdGVyYXRvciA9IHNlcnZpY2VzLml0ZXJhdG9yKCk7Ci0KLQkgICAgd2hpbGUgKHNlcnZpY2VJdGVyYXRvci5oYXNOZXh0KCkpCi0JICAgIHsKLQkgICAgICBTZXJ2aWNlIHNlcnZpY2UgPSAoU2VydmljZSkgc2VydmljZUl0ZXJhdG9yLm5leHQoKTsKLQotCSAgICAgIFN0cmluZyBzZXJ2aWNlbmFtZSA9IHNlcnZpY2UuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLQotCSAgICAgIENvbGxlY3Rpb24gcG9ydHMgPSBzZXJ2aWNlLmdldFBvcnRzKCkudmFsdWVzKCk7Ci0JICAgICAgaWYgKHBvcnRzICE9IG51bGwgJiYgIXBvcnRzLmlzRW1wdHkoKSkKLQkgICAgICB7Ci0JICAgICAgICAvLyBUaGUgV1MtSSB0b29scyBtdXN0IGJlIGNhbGxlZCBvbmNlIGZvciBlYWNoIHBvcnQgd2l0aGluIGVhY2ggc2VydmljZS4KLQkgICAgICAgIEl0ZXJhdG9yIHBvcnRJdGVyYXRvciA9IHBvcnRzLml0ZXJhdG9yKCk7Ci0JICAgICAgICB3aGlsZSAocG9ydEl0ZXJhdG9yLmhhc05leHQoKSkKLQkgICAgICAgIHsKLQkgICAgICAgICAgUG9ydCBwb3J0ID0gKFBvcnQpIHBvcnRJdGVyYXRvci5uZXh0KCk7Ci0JCQkgIGFuYWx5emVyLmFkZENvbmZpZ3VyYXRpb25Ub1Rlc3Qoc2VydmljZW5hbWUsIG5hbWVzcGFjZSwgcG9ydC5nZXROYW1lKCksIFdTRExBbmFseXplci5QT1JUKTsKLQkgICAgICAgIH0KLQkgICAgICB9Ci0JICAgICAgLy8gdmFsaWRhdGUgYXQgdGhlIGJpbmRpbmcgbGV2ZWwgLSBjaGVjayBmb3IgZXZlcnkgYmluZGluZwotCSAgICAgIGVsc2UgaWYgKGJpbmRpbmdzICE9IG51bGwgJiYgIWJpbmRpbmdzLmlzRW1wdHkoKSkKLQkgICAgICB7Ci0JICAgICAgICBJdGVyYXRvciBiaW5kaW5nSXRlcmF0b3IgPSBiaW5kaW5ncy5pdGVyYXRvcigpOwotCi0JICAgICAgICB3aGlsZSAoYmluZGluZ0l0ZXJhdG9yLmhhc05leHQoKSkKLQkgICAgICAgIHsKLQkgICAgICAgICAgQmluZGluZyBiaW5kaW5nID0gKEJpbmRpbmcpIGJpbmRpbmdJdGVyYXRvci5uZXh0KCk7Ci0JICAgICAgICAgIFN0cmluZyBiaW5kaW5nbmFtZSA9IGJpbmRpbmcuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLSAgICAgICAgICAgICAgYW5hbHl6ZXIuYWRkQ29uZmlndXJhdGlvblRvVGVzdChudWxsLCBuYW1lc3BhY2UsIGJpbmRpbmduYW1lLCBXU0RMQW5hbHl6ZXIuQklORElORyk7Ci0JICAgICAgICB9Ci0JICAgICAgfQotCSAgICAgIC8vIHZhbGlkYXRlIGF0IHRoZSBwb3J0VHlwZSBsZXZlbCAtIGNoZWNrIGZvciBldmVyeSBwb3J0VHlwZQotCSAgICAgIGVsc2UgaWYgKHBvcnRUeXBlcyAhPSBudWxsICYmICFwb3J0VHlwZXMuaXNFbXB0eSgpKQotCSAgICAgIHsKLQkgICAgICAgIEl0ZXJhdG9yIHBvcnRUeXBlSXRlcmF0b3IgPSBwb3J0VHlwZXMuaXRlcmF0b3IoKTsKLQkgICAgICAgIHdoaWxlIChwb3J0VHlwZUl0ZXJhdG9yLmhhc05leHQoKSkKLQkgICAgICAgIHsKLQkgICAgICAgICAgUG9ydFR5cGUgcG9ydFR5cGUgPSAoUG9ydFR5cGUpIHBvcnRUeXBlSXRlcmF0b3IubmV4dCgpOwotCSAgICAgICAgICBTdHJpbmcgcG9ydFR5cGVuYW1lID0gcG9ydFR5cGUuZ2V0UU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLSAgICAgICAgICAgICAgYW5hbHl6ZXIuYWRkQ29uZmlndXJhdGlvblRvVGVzdChudWxsLCBuYW1lc3BhY2UsIHBvcnRUeXBlbmFtZSwgV1NETEFuYWx5emVyLlBPUlRUWVBFKTsKLQkgICAgICAgIH0KLQkgICAgICB9Ci0JICAgICAgLy8gdmFsaWRhdGUgYXQgdGhlIG1lc3NhZ2UgbGV2ZWwgLSBjaGVjayBmb3IgZXZlcnkgbWVzc2FnZQotCSAgICAgIGVsc2UgaWYgKG1lc3NhZ2VzICE9IG51bGwgJiYgIW1lc3NhZ2VzLmlzRW1wdHkoKSkKLQkgICAgICB7Ci0JICAgICAgICBJdGVyYXRvciBtZXNzYWdlSXRlcmF0b3IgPSBtZXNzYWdlcy5pdGVyYXRvcigpOwotCSAgICAgICAgd2hpbGUgKG1lc3NhZ2VJdGVyYXRvci5oYXNOZXh0KCkpCi0JICAgICAgICB7Ci0JICAgICAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IChNZXNzYWdlKSBtZXNzYWdlSXRlcmF0b3IubmV4dCgpOwotCSAgICAgICAgICBTdHJpbmcgbWVzc2FnZW5hbWUgPSBtZXNzYWdlLmdldFFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgICAgICAgICAgIGFuYWx5emVyLmFkZENvbmZpZ3VyYXRpb25Ub1Rlc3QobnVsbCwgbmFtZXNwYWNlLCBtZXNzYWdlbmFtZSwgV1NETEFuYWx5emVyLk1FU1NBR0UpOwotCSAgICAgICAgfQotCSAgICAgIH0KLQkgICAgfQotCSAgfQotICAgIH0KLQljYXRjaCAoRXhjZXB0aW9uIGUpCi0JewotICAgICAgZmFpbCgiVW5leHBlY3RlZCBwcm9ibGVtcyBzZXR0aW5nIGNvbmZpZ3VyYXRpb25zIik7Ci0JfQotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL01lc3NhZ2VMb2dDb25mb3JtYW5jZUFQVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS90ZXN0cy9pbnRlcm5hbC9NZXNzYWdlTG9nQ29uZm9ybWFuY2VBUFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTE4ZDM4YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL01lc3NhZ2VMb2dDb25mb3JtYW5jZUFQVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzLmludGVybmFsOwotCi0vKioKLSAqIEpVbml0IHRlc3RzIHRoYXQgdGVzdCBtZXNzYWdlIGxvZ3MgYWdhaW5zdCB0aGUgV1MtSSBBdHRhY2htZW50cyBwcm9maWxlLgotICovCi1wdWJsaWMgY2xhc3MgTWVzc2FnZUxvZ0NvbmZvcm1hbmNlQVBUZXN0IGV4dGVuZHMgQ29yZU1lc3NhZ2VMb2dDb25mb3JtYW5jZVRlc3QgewotCi0gICAgcHVibGljIE1lc3NhZ2VMb2dDb25mb3JtYW5jZUFQVGVzdChTdHJpbmcgbmFtZSkgewotICAgICAgICBzdXBlcihuYW1lKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCB0ZXN0XzEzMDlfMSgpIHsgcnVuVGVzdCgiYnAiLCAiMTMwOS0xIiwgVEFEX0lEX0FQKTsgfSAKLSAgICBwdWJsaWMgdm9pZCB0ZXN0XzEzMDlfMigpIHsgcnVuVGVzdCgiYnAiLCAiMTMwOS0yIiwgVEFEX0lEX0FQKTsgfSAKLSAgICBwdWJsaWMgdm9pZCB0ZXN0XzE2MDBfMSgpIHsgcnVuVGVzdCgiYnAiLCAiMTYwMC0xIiwgVEFEX0lEX0FQKTsgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS90ZXN0cy9pbnRlcm5hbC9NZXNzYWdlTG9nQ29uZm9ybWFuY2VTT0FQMTJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL01lc3NhZ2VMb2dDb25mb3JtYW5jZVNPQVAxMlRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY3NDBlMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL01lc3NhZ2VMb2dDb25mb3JtYW5jZVNPQVAxMlRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuYW5hbHl6ZXIuTWVzc2FnZUFuYWx5emVyOwotCi0KLQotLyoqCi0gKiBKVW5pdCB0ZXN0cyB0aGF0IHRlc3QgbWVzc2FnZSBsb2dzIGFnYWluc3QgdGhlIFdTLUkgQXR0YWNobWVudHMgcHJvZmlsZS4KLSAqLwotcHVibGljIGNsYXNzIE1lc3NhZ2VMb2dDb25mb3JtYW5jZVNPQVAxMlRlc3QgZXh0ZW5kcyBDb3JlTWVzc2FnZUxvZ0NvbmZvcm1hbmNlVGVzdCB7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX0xPR19GSUxFTkFNRSA9ICJsb2cud3NpbXNnIjsKLQkKLSAgICBwdWJsaWMgTWVzc2FnZUxvZ0NvbmZvcm1hbmNlU09BUDEyVGVzdChTdHJpbmcgbmFtZSkgewotICAgICAgICBzdXBlcihuYW1lKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCB0ZXN0X1NPQVAoKSB7IHJ1blRlc3RXaXRoV1NETCgiU09BUDEyIiwgIlNpbXBsZUxvZyIsIG5ldyBTdHJpbmdbXSB7IkhlbGxvIiwgImh0dHA6Ly90ZXN0LyIsICJIZWxsb1NlcnZpY2UiLCAicG9ydCJ9KTsgfSAKLQotICAgCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL01lc3NhZ2VMb2dDb25mb3JtYW5jZVNTQlBUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL01lc3NhZ2VMb2dDb25mb3JtYW5jZVNTQlBUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlMzkyN2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS90ZXN0cy9pbnRlcm5hbC9NZXNzYWdlTG9nQ29uZm9ybWFuY2VTU0JQVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzLmludGVybmFsOwotCi0vKioKLSAqIEpVbml0IHRlc3RzIHRoYXQgdGVzdCBtZXNzYWdlIGxvZ3MgYWdhaW5zdCB0aGUgV1MtSSBTaW1wbGUgU29hcCBCaW5kaW5nCi0gKiBwcm9maWxlLgotICovCi1wdWJsaWMgY2xhc3MgTWVzc2FnZUxvZ0NvbmZvcm1hbmNlU1NCUFRlc3QgZXh0ZW5kcwotICAgICAgICBDb3JlTWVzc2FnZUxvZ0NvbmZvcm1hbmNlVGVzdCB7Ci0KLSAgICBwdWJsaWMgTWVzc2FnZUxvZ0NvbmZvcm1hbmNlU1NCUFRlc3QoU3RyaW5nIG5hbWUpIHsKLSAgICAgICAgc3VwZXIobmFtZSk7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIHRlc3RfMTMwOV8xKCkgeyBydW5UZXN0KCJicCIsICIxMzA5LTEiLCBUQURfSURfU1NCUCk7IH0gCi0gICAgcHVibGljIHZvaWQgdGVzdF8xMzA5XzIoKSB7IHJ1blRlc3QoImJwIiwgIjEzMDktMiIsIFRBRF9JRF9TU0JQKTsgfSAKLSAgICBwdWJsaWMgdm9pZCB0ZXN0XzE2MDBfMSgpIHsgcnVuVGVzdCgiYnAiLCAiMTYwMC0xIiwgVEFEX0lEX1NTQlApOyB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL01lc3NhZ2VMb2dDb25mb3JtYW5jZVNlY3VyZVdTVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS90ZXN0cy9pbnRlcm5hbC9NZXNzYWdlTG9nQ29uZm9ybWFuY2VTZWN1cmVXU1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzUyM2VjYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL01lc3NhZ2VMb2dDb25mb3JtYW5jZVNlY3VyZVdTVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LndzaS5pbnRlcm5hbC5hbmFseXplci5NZXNzYWdlQW5hbHl6ZXI7Ci0KLQotCi0vKioKLSAqIEpVbml0IHRlc3RzIHRoYXQgdGVzdCBtZXNzYWdlIGxvZ3MgYWdhaW5zdCB0aGUgV1MtSSBBdHRhY2htZW50cyBwcm9maWxlLgotICovCi1wdWJsaWMgY2xhc3MgTWVzc2FnZUxvZ0NvbmZvcm1hbmNlU2VjdXJlV1NUZXN0IGV4dGVuZHMgQ29yZU1lc3NhZ2VMb2dDb25mb3JtYW5jZVRlc3QgewotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9MT0dfRklMRU5BTUUgPSAibG9nLndzaW1zZyI7Ci0JCi0gICAgcHVibGljIE1lc3NhZ2VMb2dDb25mb3JtYW5jZVNlY3VyZVdTVGVzdChTdHJpbmcgbmFtZSkgewotICAgICAgICBzdXBlcihuYW1lKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCB0ZXN0X1NlY3VyZVdTX05vU2VjdXJpeSgpIHsgcnVuVGVzdFdpdGhXU0RMKCJTZWN1cmVXUyIsICJOb1NlY3VyaXR5IiwgbmV3IFN0cmluZ1tdIHsiV2ViU2VydmljZSIsICJodHRwOi8vbWFpbiIsICJXZWJTZXJ2aWNlU2VydmljZSIsICJwb3J0In0pOyB9IAotCi0gICAgcHVibGljIHZvaWQgdGVzdF9TZWN1cmVXU19TaWduYXR1cmUoKSB7IHJ1blRlc3RXaXRoV1NETCgiU2VjdXJlV1MiLCAiU2lnbmF0dXJlIiwgbmV3IFN0cmluZ1tdIHsiV2ViU2VydmljZSIsICJodHRwOi8vbWFpbiIsICJXZWJTZXJ2aWNlU2VydmljZSIsICJwb3J0In0pOyB9IAotICAgIAotICAgIHB1YmxpYyB2b2lkIHRlc3RfU2VjdXJlV1NfRW5jcnlwdGlvbigpIHsgcnVuVGVzdFdpdGhXU0RMKCJTZWN1cmVXUyIsICJFbmNyeXB0aW9uIiwgbmV3IFN0cmluZ1tdIHsiV2ViU2VydmljZSIsICJodHRwOi8vbWFpbiIsICJXZWJTZXJ2aWNlU2VydmljZSIsICJwb3J0In0pOyB9Ci0gICAgICAgCi0gICAgcHVibGljIHZvaWQgdGVzdF9TZWN1cmVXU19TaWduYXR1cmVBbmRFbmNyeXB0aW9uKCkgeyBydW5UZXN0V2l0aFdTREwoIlNlY3VyZVdTIiwgIlNpZ25hdHVyZUFuZEVuY3J5cHRpb24iLCBuZXcgU3RyaW5nW10geyJXZWJTZXJ2aWNlIiwgImh0dHA6Ly9tYWluIiwgIldlYlNlcnZpY2VTZXJ2aWNlIiwgInBvcnQifSk7IH0gCi0gICAgCi0KLQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL1JlZ3Jlc3Npb25CdWNrZXQuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdGVzdHMvaW50ZXJuYWwvUmVncmVzc2lvbkJ1Y2tldC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkM2ZmOGM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdGVzdHMvaW50ZXJuYWwvUmVncmVzc2lvbkJ1Y2tldC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0qIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotKiAKLSogQ29udHJpYnV0b3JzOgotKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC53c2kuaW50ZXJuYWwuV1NJVGVzdFRvb2xzUHJvcGVydGllczsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0vKioKLSAqIEpVbml0IHRlc3RzIHRoYXQgcnVucyBhbGwgb2YgdGhlIHRlc3RzIGltcGxlbWVudGVkIAotICogaW4gdGhpcyBwbHVnaW4uCi0gKiAKLSAqIEBhdXRob3IgbGF1em9uZAotICovCi1wdWJsaWMgY2xhc3MgUmVncmVzc2lvbkJ1Y2tldCBleHRlbmRzIFRlc3RTdWl0ZSB7Ci0KLQkgIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIAotCSAgewotCSAgICBUZXN0U3VpdGUgc3VpdGU9IG5ldyBUZXN0U3VpdGUoIlJlZ3Jlc3Npb24gQnVja2V0Iik7Ci0JICAgIGlmICh0YWRJc0F2YWlsYWJsZShXU0lUZXN0VG9vbHNQcm9wZXJ0aWVzLlNTQlBfQVNTRVJUSU9OX0ZJTEUpKSB7Ci0gICAgICAgICAgICAgIHN1aXRlLmFkZFRlc3QobmV3IFRlc3RTdWl0ZShXU0RMQ29uZm9ybWFuY2VTU0JQVGVzdC5jbGFzcykpOwotICAgICAgICAgICAgICBzdWl0ZS5hZGRUZXN0KG5ldyBUZXN0U3VpdGUoTWVzc2FnZUxvZ0NvbmZvcm1hbmNlU1NCUFRlc3QuY2xhc3MpKTsKLSAgICAgICAgICAgICAgc3VpdGUuYWRkVGVzdChuZXcgVGVzdFN1aXRlKE1lc3NhZ2VMb2dDb25mb3JtYW5jZVNlY3VyZVdTVGVzdC5jbGFzcykpOwotICAgICAgICAgICAgICBzdWl0ZS5hZGRUZXN0KG5ldyBUZXN0U3VpdGUoTWVzc2FnZUxvZ0NvbmZvcm1hbmNlU09BUDEyVGVzdC5jbGFzcykpOwotICAgICAgICB9Ci0JICAgIGlmICh0YWRJc0F2YWlsYWJsZShXU0lUZXN0VG9vbHNQcm9wZXJ0aWVzLkFQX0FTU0VSVElPTl9GSUxFKSkgewotICAgICAgICAgICAgICBzdWl0ZS5hZGRUZXN0KG5ldyBUZXN0U3VpdGUoV1NETENvbmZvcm1hbmNlQVBUZXN0LmNsYXNzKSk7Ci0gICAgICAgICAgICAgIHN1aXRlLmFkZFRlc3QobmV3IFRlc3RTdWl0ZShNZXNzYWdlTG9nQ29uZm9ybWFuY2VBUFRlc3QuY2xhc3MpKTsKLSAgICAgICAgfQotCSAgICAKLQkgICAgcmV0dXJuIHN1aXRlOwotCSAgfQotCSAgCi0JICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gdGFkSXNBdmFpbGFibGUoU3RyaW5nIHRhZFVSSSkKLQkgIHsKLQkJYm9vbGVhbiByZXN1bHQgPSB0cnVlOwotCQlJbnB1dFN0cmVhbSBpcyA9IG51bGw7Ci0JCXRyeQotCQl7Ci0JCSAgVVJMIHVybCA9IG5ldyBVUkwodGFkVVJJKTsKLQkJICBpcyA9IHVybC5vcGVuU3RyZWFtKCk7Ci0JCSAgaXMuY2xvc2UoKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkKLQkJewotCQkgIHJlc3VsdCA9IGZhbHNlOwotCQl9Ci0JICAgIHJldHVybiByZXN1bHQ7Ci0JICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdGVzdHMvaW50ZXJuYWwvV1NETENvbmZvcm1hbmNlQVBUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL1dTRExDb25mb3JtYW5jZUFQVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MWY0NzBhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdGVzdHMvaW50ZXJuYWwvV1NETENvbmZvcm1hbmNlQVBUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0qIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0qIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0qIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0qIAotKiBDb250cmlidXRvcnM6Ci0qICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC53c2kudGVzdHMuaW50ZXJuYWw7Ci0vKioKLSAqIEpVbml0IHRlc3RzIHRoYXQgdGVzdCB3c2RsIGRvY3VtZW50cyBhZ2FpbnN0IAotICogdGhlIFdTLUkgQXR0YWNobWVudHMgcHJvZmlsZS4KLSAqIAotICogQGF1dGhvciBsYXV6b25kCi0gKi8KLXB1YmxpYyBjbGFzcyBXU0RMQ29uZm9ybWFuY2VBUFRlc3QgZXh0ZW5kcyBDb3JlV1NETENvbmZvcm1hbmNlVGVzdCAKLXsKLSAgcHVibGljIFdTRExDb25mb3JtYW5jZUFQVGVzdChTdHJpbmcgbmFtZSkKLSAgewotICAgIHN1cGVyKG5hbWUpOwotICB9Ci0vL3dzLWkgd3NkbHMKLSAgcHVibGljIHZvaWQgdGVzdF9hZGRyZXNzQm9vaygpIHsgcnVuVGVzdCgid3NpIiwgImFkZHJlc3NCb29rIiwgVEFEX0lEX0FQKTsgfQotICBwdWJsaWMgdm9pZCB0ZXN0X2FkZHJlc3NCb29rX3JwYygpIHsgcnVuVGVzdCgid3NpIiwgImFkZHJlc3NCb29rLXJwYyIsIFRBRF9JRF9BUCk7IH0KLSAvLyBwdWJsaWMgdm9pZCB0ZXN0X3NhbXBsZUFwcENhdGFsb2coKSB7IHJ1blRlc3QoIndzaSIsICJzYW1wbGVBcHBDYXRhbG9nIiwgVEFEX0lEX0FQKTsgfSAgCi0gIHB1YmxpYyB2b2lkIHRlc3Rfc2FtcGxlQXBwTWFudWZhY3R1cmVyKCkgeyBydW5UZXN0KCJ3c2kiLCAic2FtcGxlQXBwTWFudWZhY3R1cmVyIiwgVEFEX0lEX0FQKTsgfSAgCi0gIHB1YmxpYyB2b2lkIHRlc3Rfc2FtcGxlQXBwV2FyZWhvdXNlKCkgeyBydW5UZXN0KCJ3c2kiLCAic2FtcGxlQXBwV2FyZWhvdXNlIiwgVEFEX0lEX0FQKTsgfSAKLQotICAvLyBicCB0ZXN0cwotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMTJfMSgpIHsgcnVuVGVzdCgiYnAiLCAiMjAxMi0xIiwgVEFEX0lEX0FQKTsgfSAKLSAgcHVibGljIHZvaWQgdGVzdF8yMDEzXzEoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTMtMSIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE0XzEoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTQtMSIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE0XzIoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTQtMiIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE0XzMoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTQtMyIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE3XzEoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTctMSIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE3XzIoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTctMiIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE4XzEoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTgtMSIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE4XzIoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTgtMiIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE4XzMoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTgtMyIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE4XzQoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTgtNCIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE5XzEoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTktMSIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE5XzIoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTktMiIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE5XzMoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTktMyIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE5XzQoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTktNCIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDIwXzEoKSB7IHJ1blRlc3QoImJwIiwgIjIwMjAtMSIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDIwXzIoKSB7IHJ1blRlc3QoImJwIiwgIjIwMjAtMiIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMTA1XzEoKSB7IHJ1blRlc3QoImJwIiwgIjIxMDUtMSIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMTA1XzIoKSB7IHJ1blRlc3QoImJwIiwgIjIxMDUtMiIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMTE3XzEoKSB7IHJ1blRlc3QoImJwIiwgIjIxMTctMSIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMTE3XzIoKSB7IHJ1blRlc3QoImJwIiwgIjIxMTctMiIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMTE3XzMoKSB7IHJ1blRlc3QoImJwIiwgIjIxMTctMyIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yNDA2XzEoKSB7IHJ1blRlc3QoImJwIiwgIjI0MDYtMSIsIFRBRF9JRF9BUCk7IH0KLQotICAvLyBhcCB0ZXN0cwotICBwdWJsaWMgdm9pZCB0ZXN0XzI5NDFfMSgpIHsgcnVuVGVzdCgiYXAiLCAiMjk0MS0xIiwgVEFEX0lEX0FQKTsgfSAKLQotICAvLyByZWR1bmRhbnQgdGVzdHMgLS0gYXNzZXJ0aW9ucyBmYWlsdXJlcyBjYXVnaHQgYnkgYmFzZSB3c2RsIHZhbGlkYXRvci4KLSAgcHVibGljIHZvaWQgdGVzdF8yMDEwXzEoKSB7IHJ1blRlc3QoInJlZHVuZGFudCIsICIyMDEwLTEiLCBUQURfSURfQVApOyB9Ci0gIHB1YmxpYyB2b2lkIHRlc3RfMjAxMV8xKCkgeyBydW5UZXN0KCJyZWR1bmRhbnQiLCAiMjAxMS0xIiwgVEFEX0lEX0FQKTsgfSAKLSAgcHVibGljIHZvaWQgdGVzdF8yMDExXzIoKSB7IHJ1blRlc3QoInJlZHVuZGFudCIsICIyMDExLTIiLCBUQURfSURfQVApOyB9IAotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMTFfMygpIHsgcnVuVGVzdCgicmVkdW5kYW50IiwgIjIwMTEtMyIsIFRBRF9JRF9BUCk7IH0gCi0gIHB1YmxpYyB2b2lkIHRlc3RfMjAxMV80KCkgeyBydW5UZXN0KCJyZWR1bmRhbnQiLCAiMjAxMS00IiwgVEFEX0lEX0FQKTsgfSAKLSAgLy9wdWJsaWMgdm9pZCB0ZXN0XzIwMTFfNSgpIHsgcnVuVGVzdCgicmVkdW5kYW50IiwgIjIwMTEtNSIsIFRBRF9JRF9BUCk7IH0gCi0gIHB1YmxpYyB2b2lkIHRlc3RfMjAyMV8xKCkgeyBydW5UZXN0KCJyZWR1bmRhbnQiLCAiMjAyMS0xIiwgVEFEX0lEX0FQKTsgfSAKLSAgcHVibGljIHZvaWQgdGVzdF8yMDIxXzIoKSB7IHJ1blRlc3QoInJlZHVuZGFudCIsICIyMDIxLTIiLCBUQURfSURfQVApOyB9IAotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMjFfMygpIHsgcnVuVGVzdCgicmVkdW5kYW50IiwgIjIwMjEtMyIsIFRBRF9JRF9BUCk7IH0gCi0gIHB1YmxpYyB2b2lkIHRlc3RfMjAyMV80KCkgeyBydW5UZXN0KCJyZWR1bmRhbnQiLCAiMjAyMS00IiwgVEFEX0lEX0FQKTsgfSAKLSAgcHVibGljIHZvaWQgdGVzdF8yMDIxXzUoKSB7IHJ1blRlc3QoInJlZHVuZGFudCIsICIyMDIxLTUiLCBUQURfSURfQVApOyB9IAotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMjFfNigpIHsgcnVuVGVzdCgicmVkdW5kYW50IiwgIjIwMjEtNiIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDIyXzEoKSB7IHJ1blRlc3QoInJlZHVuZGFudCIsICIyMDIyLTEiLCBUQURfSURfQVApOyB9IAotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMjJfMigpIHsgcnVuVGVzdCgicmVkdW5kYW50IiwgIjIwMjItMiIsIFRBRF9JRF9BUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDMyXzEoKSB7IHJ1blRlc3QoInJlZHVuZGFudCIsICIyMDMyLTEiLCBUQURfSURfQVApOyB9IAotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMzJfMigpIHsgcnVuVGVzdCgicmVkdW5kYW50IiwgIjIwMzItMiIsIFRBRF9JRF9BUCk7IH0gCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS90ZXN0cy9pbnRlcm5hbC9XU0RMQ29uZm9ybWFuY2VTU0JQVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS90ZXN0cy9pbnRlcm5hbC9XU0RMQ29uZm9ybWFuY2VTU0JQVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjBkNTQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC93c2kvdGVzdHMvaW50ZXJuYWwvV1NETENvbmZvcm1hbmNlU1NCUFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSogCi0qIENvbnRyaWJ1dG9yczoKLSogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy5pbnRlcm5hbDsKLS8qKgotICogSlVuaXQgdGVzdHMgdGhhdCB0ZXN0IHdzZGwgZG9jdW1lbnRzIGFnYWluc3QgCi0gKiB0aGUgV1MtSSBTaW1wbGUgU29hcCBCaW5kaW5nIHByb2ZpbGUuCi0gKiAKLSAqIEBhdXRob3IgbGF1em9uZAotICovCi1wdWJsaWMgY2xhc3MgV1NETENvbmZvcm1hbmNlU1NCUFRlc3QgZXh0ZW5kcyBDb3JlV1NETENvbmZvcm1hbmNlVGVzdCAKLXsKLSAgcHVibGljIFdTRExDb25mb3JtYW5jZVNTQlBUZXN0KFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIobmFtZSk7Ci0gIH0KLSAgLy8gd3MtaSB3c2RscwotICBwdWJsaWMgdm9pZCB0ZXN0X2FkZHJlc3NCb29rKCkgeyBydW5UZXN0KCJ3c2kiLCAiYWRkcmVzc0Jvb2siLCBUQURfSURfU1NCUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF9hZGRyZXNzQm9va19ycGMoKSB7IHJ1blRlc3QoIndzaSIsICJhZGRyZXNzQm9vay1ycGMiLCBUQURfSURfU1NCUCk7IH0KLSAgLy9wdWJsaWMgdm9pZCB0ZXN0X3NhbXBsZUFwcENhdGFsb2coKSB7IHJ1blRlc3QoIndzaSIsICJzYW1wbGVBcHBDYXRhbG9nIiwgVEFEX0lEX1NTQlApOyB9ICAKLSAgcHVibGljIHZvaWQgdGVzdF9zYW1wbGVBcHBNYW51ZmFjdHVyZXIoKSB7IHJ1blRlc3QoIndzaSIsICJzYW1wbGVBcHBNYW51ZmFjdHVyZXIiLCBUQURfSURfU1NCUCk7IH0gIAotICBwdWJsaWMgdm9pZCB0ZXN0X3NhbXBsZUFwcFdhcmVob3VzZSgpIHsgcnVuVGVzdCgid3NpIiwgInNhbXBsZUFwcFdhcmVob3VzZSIsIFRBRF9JRF9TU0JQKTsgfSAKLQotICAvLyBicCB0ZXN0cwotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMTJfMSgpIHsgcnVuVGVzdCgiYnAiLCAiMjAxMi0xIiwgVEFEX0lEX1NTQlApOyB9IAotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMTNfMSgpIHsgcnVuVGVzdCgiYnAiLCAiMjAxMy0xIiwgVEFEX0lEX1NTQlApOyB9Ci0gIHB1YmxpYyB2b2lkIHRlc3RfMjAxNF8xKCkgeyBydW5UZXN0KCJicCIsICIyMDE0LTEiLCBUQURfSURfU1NCUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE0XzIoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTQtMiIsIFRBRF9JRF9TU0JQKTsgfQotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMTRfMygpIHsgcnVuVGVzdCgiYnAiLCAiMjAxNC0zIiwgVEFEX0lEX1NTQlApOyB9Ci0gIHB1YmxpYyB2b2lkIHRlc3RfMjAxN18xKCkgeyBydW5UZXN0KCJicCIsICIyMDE3LTEiLCBUQURfSURfU1NCUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE3XzIoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTctMiIsIFRBRF9JRF9TU0JQKTsgfQotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMThfMSgpIHsgcnVuVGVzdCgiYnAiLCAiMjAxOC0xIiwgVEFEX0lEX1NTQlApOyB9Ci0gIHB1YmxpYyB2b2lkIHRlc3RfMjAxOF8yKCkgeyBydW5UZXN0KCJicCIsICIyMDE4LTIiLCBUQURfSURfU1NCUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE4XzMoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTgtMyIsIFRBRF9JRF9TU0JQKTsgfQotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMThfNCgpIHsgcnVuVGVzdCgiYnAiLCAiMjAxOC00IiwgVEFEX0lEX1NTQlApOyB9Ci0gIHB1YmxpYyB2b2lkIHRlc3RfMjAxOV8xKCkgeyBydW5UZXN0KCJicCIsICIyMDE5LTEiLCBUQURfSURfU1NCUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDE5XzIoKSB7IHJ1blRlc3QoImJwIiwgIjIwMTktMiIsIFRBRF9JRF9TU0JQKTsgfQotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMTlfMygpIHsgcnVuVGVzdCgiYnAiLCAiMjAxOS0zIiwgVEFEX0lEX1NTQlApOyB9Ci0gIHB1YmxpYyB2b2lkIHRlc3RfMjAxOV80KCkgeyBydW5UZXN0KCJicCIsICIyMDE5LTQiLCBUQURfSURfU1NCUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMDIwXzEoKSB7IHJ1blRlc3QoImJwIiwgIjIwMjAtMSIsIFRBRF9JRF9TU0JQKTsgfQotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMjBfMigpIHsgcnVuVGVzdCgiYnAiLCAiMjAyMC0yIiwgVEFEX0lEX1NTQlApOyB9Ci0gIHB1YmxpYyB2b2lkIHRlc3RfMjEwNV8xKCkgeyBydW5UZXN0KCJicCIsICIyMTA1LTEiLCBUQURfSURfU1NCUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMTA1XzIoKSB7IHJ1blRlc3QoImJwIiwgIjIxMDUtMiIsIFRBRF9JRF9TU0JQKTsgfQotICBwdWJsaWMgdm9pZCB0ZXN0XzIxMTdfMSgpIHsgcnVuVGVzdCgiYnAiLCAiMjExNy0xIiwgVEFEX0lEX1NTQlApOyB9Ci0gIHB1YmxpYyB2b2lkIHRlc3RfMjExN18yKCkgeyBydW5UZXN0KCJicCIsICIyMTE3LTIiLCBUQURfSURfU1NCUCk7IH0KLSAgcHVibGljIHZvaWQgdGVzdF8yMTE3XzMoKSB7IHJ1blRlc3QoImJwIiwgIjIxMTctMyIsIFRBRF9JRF9TU0JQKTsgfQotICBwdWJsaWMgdm9pZCB0ZXN0XzI0MDZfMSgpIHsgcnVuVGVzdCgiYnAiLCAiMjQwNi0xIiwgVEFEX0lEX1NTQlApOyB9Ci0KLSAgLy8gcmVkdW5kYW50IHRlc3RzIC0tIGFzc2VydGlvbnMgZmFpbHVyZXMgY2F1Z2h0IGJ5IGJhc2Ugd3NkbCB2YWxpZGF0b3IuCi0gIHB1YmxpYyB2b2lkIHRlc3RfMjAxMF8xKCkgeyBydW5UZXN0KCJyZWR1bmRhbnQiLCAiMjAxMC0xIiwgVEFEX0lEX1NTQlApOyB9Ci0gIHB1YmxpYyB2b2lkIHRlc3RfMjAxMV8xKCkgeyBydW5UZXN0KCJyZWR1bmRhbnQiLCAiMjAxMS0xIiwgVEFEX0lEX1NTQlApOyB9IAotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMTFfMigpIHsgcnVuVGVzdCgicmVkdW5kYW50IiwgIjIwMTEtMiIsIFRBRF9JRF9TU0JQKTsgfSAKLSAgcHVibGljIHZvaWQgdGVzdF8yMDExXzMoKSB7IHJ1blRlc3QoInJlZHVuZGFudCIsICIyMDExLTMiLCBUQURfSURfU1NCUCk7IH0gCi0gIHB1YmxpYyB2b2lkIHRlc3RfMjAxMV80KCkgeyBydW5UZXN0KCJyZWR1bmRhbnQiLCAiMjAxMS00IiwgVEFEX0lEX1NTQlApOyB9IAotICAvL3B1YmxpYyB2b2lkIHRlc3RfMjAxMV81KCkgeyBydW5UZXN0KCJyZWR1bmRhbnQiLCAiMjAxMS01IiwgVEFEX0lEX1NTQlApOyB9IAotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMjFfMSgpIHsgcnVuVGVzdCgicmVkdW5kYW50IiwgIjIwMjEtMSIsIFRBRF9JRF9TU0JQKTsgfSAKLSAgcHVibGljIHZvaWQgdGVzdF8yMDIxXzIoKSB7IHJ1blRlc3QoInJlZHVuZGFudCIsICIyMDIxLTIiLCBUQURfSURfU1NCUCk7IH0gCi0gIHB1YmxpYyB2b2lkIHRlc3RfMjAyMV8zKCkgeyBydW5UZXN0KCJyZWR1bmRhbnQiLCAiMjAyMS0zIiwgVEFEX0lEX1NTQlApOyB9IAotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMjFfNCgpIHsgcnVuVGVzdCgicmVkdW5kYW50IiwgIjIwMjEtNCIsIFRBRF9JRF9TU0JQKTsgfSAKLSAgcHVibGljIHZvaWQgdGVzdF8yMDIxXzUoKSB7IHJ1blRlc3QoInJlZHVuZGFudCIsICIyMDIxLTUiLCBUQURfSURfU1NCUCk7IH0gCi0gIHB1YmxpYyB2b2lkIHRlc3RfMjAyMV82KCkgeyBydW5UZXN0KCJyZWR1bmRhbnQiLCAiMjAyMS02IiwgVEFEX0lEX1NTQlApOyB9Ci0gIHB1YmxpYyB2b2lkIHRlc3RfMjAyMl8xKCkgeyBydW5UZXN0KCJyZWR1bmRhbnQiLCAiMjAyMi0xIiwgVEFEX0lEX1NTQlApOyB9IAotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMjJfMigpIHsgcnVuVGVzdCgicmVkdW5kYW50IiwgIjIwMjItMiIsIFRBRF9JRF9TU0JQKTsgfQotICBwdWJsaWMgdm9pZCB0ZXN0XzIwMzJfMSgpIHsgcnVuVGVzdCgicmVkdW5kYW50IiwgIjIwMzItMSIsIFRBRF9JRF9TU0JQKTsgfSAKLSAgcHVibGljIHZvaWQgdGVzdF8yMDMyXzIoKSB7IHJ1blRlc3QoInJlZHVuZGFudCIsICIyMDMyLTIiLCBUQURfSURfU1NCUCk7IH0gCi0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL1dTSVRlc3RzUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvd3NpL3Rlc3RzL2ludGVybmFsL1dTSVRlc3RzUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwYjk3NWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3dzaS90ZXN0cy9pbnRlcm5hbC9XU0lUZXN0c1BsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0qIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotKiAKLSogQ29udHJpYnV0b3JzOgotKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7Ci0KLS8qKgotKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSovCi1wdWJsaWMgY2xhc3MgV1NJVGVzdHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4KLXsKLSAvL1RoZSBzaGFyZWQgaW5zdGFuY2UuCi0gcHJpdmF0ZSBzdGF0aWMgV1NJVGVzdHNQbHVnaW4gcGx1Z2luOwotIHByaXZhdGUgc3RhdGljIEJ1bmRsZSBwbHVnaW5CdW5kbGUgPSBudWxsOwotCi0gLyoqCi0gICogVGhlIGNvbnN0cnVjdG9yLgotICAqLwotIHB1YmxpYyBXU0lUZXN0c1BsdWdpbigpCi0gewotICAgc3VwZXIoKTsKLSAgIHBsdWdpbiA9IHRoaXM7Ci0gfQotCi0gLyoqCi0gICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHVwb24gcGx1Zy1pbiBhY3RpdmF0aW9uCi0gICovCi0gcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uCi0gewotICAgc3VwZXIuc3RhcnQoY29udGV4dCk7Ci0JcGx1Z2luQnVuZGxlID0gY29udGV4dC5nZXRCdW5kbGUoKTsKLSB9Ci0KLSAvKioKLSAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgcGx1Zy1pbiBpcyBzdG9wcGVkCi0gICovCi0gcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24KLSB7Ci0gICBzdXBlci5zdG9wKGNvbnRleHQpOwotIH0KLQotIC8qKgotICAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS4KLSAgKi8KLSBwdWJsaWMgc3RhdGljIFdTSVRlc3RzUGx1Z2luIGdldERlZmF1bHQoKQotIHsKLSAgIHJldHVybiBwbHVnaW47Ci0gfQotIAotIC8qKgotICAqIEdldCB0aGUgaW5zdGFsbCBVUkwgb2YgdGhpcyBwbHVnaW4uCi0gICogCi0gICogQHJldHVybiB0aGUgaW5zdGFsbCB1cmwgb2YgdGhpcyBwbHVnaW4KLSAgKi8KLSBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRJbnN0YWxsVVJMKCkKLSB7Ci0gICB0cnkKLSAgIHsKLSAgICAgcmV0dXJuIFBsYXRmb3JtLnJlc29sdmUocGx1Z2luQnVuZGxlLmdldEVudHJ5KCIvIikpLmdldEZpbGUoKTsKLSAgIH0KLSAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgewotICAgICByZXR1cm4gbnVsbDsKLSAgIH0KLSB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWJlOGFkOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci0KLTxwcm9qZWN0IG5hbWU9InRlc3RzdWl0ZSIgZGVmYXVsdD0icnVuIiBiYXNlZGlyPSIuIj4KLQk8IS0tIFRoZSBwcm9wZXJ0eSAke2VjbGlwc2UtaG9tZX0gc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotCTwhLS0gU2V0IGEgbWVhbmluZ2Z1bCBkZWZhdWx0IHZhbHVlIGZvciB3aGVuIGl0IGlzIG5vdC4gLS0+Ci0JPCEtLSA8cHJvcGVydHkgbmFtZT0iZWNsaXBzZS1ob21lIiB2YWx1ZT0iJHtiYXNlZGlyfVwuLlwuLiIgLz4gLS0+Ci0JCQotCQk8ZWNobyBtZXNzYWdlPSJiYXNlZGlyICR7YmFzZWRpcn0iIC8+Ci0JCTxlY2hvIG1lc3NhZ2U9ImVjbGlwc2UgcGxhY2UgJHtlY2xpcHNlLWhvbWV9IiAvPgotCQotCTwhLS0gc2V0cyB0aGUgcHJvcGVydGllcyBwbHVnaW4tbmFtZSwgYW5kIGxpYnJhcnktZmlsZSAtLT4KLQk8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzIiAvPgotCTxwcm9wZXJ0eSBuYW1lPSJsaWJyYXJ5LWZpbGUiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIiAvPgotCi0JPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotCTwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0JPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0JPHRhcmdldCBuYW1lPSJpbml0Ij4KLQkJPHRzdGFtcC8+Ci0JCTxkZWxldGU+Ci0JCQk8ZmlsZXNldCBkaXI9IiR7ZWNsaXBzZS1ob21lfSIgaW5jbHVkZXM9Im9yZy5lY2xpcHNlLndzdC53c2kudGVzdHMuKnhtbCIgLz4KLQkJPC9kZWxldGU+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgotCTx0YXJnZXQgbmFtZT0ic3VpdGUiPgotCQk8cHJvcGVydHkgbmFtZT0id3N0LWZvbGRlciIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS93c3RfZm9sZGVyIi8+Ci0JCTxkZWxldGUgZGlyPSIke3dzdC1mb2xkZXJ9IiBxdWlldD0idHJ1ZSIvPgotICAgIAk8YW50IHRhcmdldD0iY29yZS10ZXN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIAkJPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3c3QtZm9sZGVyfSIvPgotICAgICAgCQk8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotICAgICAgCQk8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy5pbnRlcm5hbC5SZWdyZXNzaW9uQnVja2V0IiAvPgotICAgCQkJPHByb3BlcnR5IG5hbWU9InBsdWdpbi1wYXRoIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAJPC9hbnQ+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KLQk8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0JPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotCTx0YXJnZXQgbmFtZT0iY2xlYW51cCI+Ci0JCTwhLS08ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIgLz4tLT4KLQk8L3RhcmdldD4KLQotCTwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLQk8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0JPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0JCTxhbnQgdGFyZ2V0PSJjb2xsZWN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJpbmNsdWRlcyIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC53c2kudGVzdHMuKnhtbCIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJvdXRwdXQtZmlsZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4KLQkJPC9hbnQ+Ci0JPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9TT0FQMTIvU2ltcGxlTG9nL1NpbXBsZUxvZy53c2ltc2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9TT0FQMTIvU2ltcGxlTG9nL1NpbXBsZUxvZy53c2ltc2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3OWYxMGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvU09BUDEyL1NpbXBsZUxvZy9TaW1wbGVMb2cud3NpbXNnCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxsb2cgdGltZXN0YW1wPSIyMDA3LTAxLTI0VDEzOjAzOjQwLjUzMiIKLSAgICB4bWxucz0iaHR0cDovL3d3dy53cy1pLm9yZy90ZXN0aW5nLzIwMDQvMDcvbG9nLyIKLSAgICB4bWxuczp3c2ktbW9uQ29uZmlnPSJodHRwOi8vd3d3LndzLWkub3JnL3Rlc3RpbmcvMjAwNC8wNy9tb25pdG9yQ29uZmlnLyIKLSAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIj4KLSAgPG1vbml0b3IgdmVyc2lvbj0iMS4wIiByZWxlYXNlRGF0ZT0iMjAwMy0wMy0yMCI+Ci0gICAgPGltcGxlbWVudGVyIG5hbWU9IklCTSIgbG9jYXRpb249IiIvPgotICAgIDxlbnZpcm9ubWVudD4KLSAgICAgIDxydW50aW1lIG5hbWU9IkphdmEoVE0pIDIgUnVudGltZSBFbnZpcm9ubWVudCwgU3RhbmRhcmQgRWRpdGlvbiIgdmVyc2lvbj0icHdpMzJkZXYtMjAwNjEwMDJhIChTUjMpIi8+Ci0gICAgICA8b3BlcmF0aW5nU3lzdGVtIG5hbWU9IldpbmRvd3MgWFAiIHZlcnNpb249IjUuMSBidWlsZCAyNjAwIFNlcnZpY2UgUGFjayAyIi8+Ci0gICAgICA8eG1sUGFyc2VyIG5hbWU9IkFwYWNoZSBYZXJjZXMiIHZlcnNpb249IlhNTDRKIDQuNC42Ii8+Ci0gICAgPC9lbnZpcm9ubWVudD4KLSAgICA8d3NpLW1vbkNvbmZpZzpjb25maWd1cmF0aW9uPgotICAgIDx3c2ktbW9uQ29uZmlnOmNvbW1lbnQ+Q29tbWVudDwvd3NpLW1vbkNvbmZpZzpjb21tZW50PgotICAgICAgPHdzaS1tb25Db25maWc6bG9nRmlsZSByZXBsYWNlPSJ0cnVlIiBsb2NhdGlvbj0iVVJMIj4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOmFkZFN0eWxlU2hlZXQgaHJlZj0ibnVsbCIgdHlwZT0ibnVsbCIgLz4KLSAgICA8L3dzaS1tb25Db25maWc6bG9nRmlsZT4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOmxvZ0R1cmF0aW9uPjYwMDwvd3NpLW1vbkNvbmZpZzpsb2dEdXJhdGlvbj4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOmNsZWFudXBUaW1lb3V0U2Vjb25kcz4zPC93c2ktbW9uQ29uZmlnOmNsZWFudXBUaW1lb3V0U2Vjb25kcz4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOm1hbkluVGhlTWlkZGxlPgotICAgICAgPC93c2ktbW9uQ29uZmlnOm1hbkluVGhlTWlkZGxlPgotICAgIDwvd3NpLW1vbkNvbmZpZzpjb25maWd1cmF0aW9uPgotICA8L21vbml0b3I+Ci0KLTxtZXNzYWdlRW50cnkgeHNpOnR5cGU9Imh0dHBNZXNzYWdlRW50cnkiIElEPSIxIiBjb252ZXJzYXRpb25JRD0iMSIgdHlwZT0icmVxdWVzdCIgdGltZXN0YW1wPSIyMDA3LTAxLTI0VDEzOjAyOjU4LjM0MloiPgotPG1lc3NhZ2VDb250ZW50PiZsdDs/eG1sIHZlcnNpb249JnF1b3Q7MS4wJnF1b3Q7IGVuY29kaW5nPSZxdW90O1VURi04JnF1b3Q7PyZndDsmbHQ7c29hcGVudjpFbnZlbG9wZSB4bWxuczpzb2FwZW52PSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDMvMDUvc29hcC1lbnZlbG9wZSZxdW90OyZndDsmbHQ7c29hcGVudjpIZWFkZXImZ3Q7Jmx0Oy9zb2FwZW52OkhlYWRlciZndDsmbHQ7c29hcGVudjpCb2R5Jmd0OyZsdDtuczI6aGVsbG8geG1sbnM6bnMyPSZxdW90O2h0dHA6Ly90ZXN0LyZxdW90OyZndDsmbHQ7YXJnMCZndDtnYWJlJmx0Oy9hcmcwJmd0OyZsdDsvbnMyOmhlbGxvJmd0OyZsdDsvc29hcGVudjpCb2R5Jmd0OyZsdDsvc29hcGVudjpFbnZlbG9wZSZndDs8L21lc3NhZ2VDb250ZW50PgotPHNlbmRlckhvc3RBbmRQb3J0PmxvY2FsaG9zdDo5MDgyPC9zZW5kZXJIb3N0QW5kUG9ydD4KLTxyZWNlaXZlckhvc3RBbmRQb3J0PmxvY2FsaG9zdDo5MDgxPC9yZWNlaXZlckhvc3RBbmRQb3J0PgotPGh0dHBIZWFkZXJzPlBPU1QgL3RkMTIvSGVsbG9TZXJ2aWNlIEhUVFAvMS4xJiN4ZDsKLUhvc3Q6IGxvY2FsaG9zdDo5MDgxJiN4ZDsKLUFjY2VwdDogYXBwbGljYXRpb24vc29hcCt4bWwsbXVsdGlwYXJ0L3JlbGF0ZWQsdGV4dC8qJiN4ZDsKLVVzZXItQWdlbnQ6IElCTSBXZWJTZXJ2aWNlcy8xLjAmI3hkOwotQ2FjaGUtQ29udHJvbDogbm8tY2FjaGUmI3hkOwotUHJhZ21hOiBuby1jYWNoZSYjeGQ7Ci1TT0FQQWN0aW9uOiAmcXVvdDsmcXVvdDsmI3hkOwotQ29ubmVjdGlvbjogS2VlcC1BbGl2ZSYjeGQ7Ci1Db250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3NvYXAreG1sOyBjaGFyc2V0PVVURi04JiN4ZDsKLUNvbnRlbnQtTGVuZ3RoOiAyNTgmI3hkOwotRGF0ZTogV2VkLCAyNCBKYW4gMjAwNyAxODowMjo1NyBHTVQmI3hkOwotJiN4ZDsKLTwvaHR0cEhlYWRlcnM+Ci08L21lc3NhZ2VFbnRyeT4KLTxtZXNzYWdlRW50cnkgeHNpOnR5cGU9Imh0dHBNZXNzYWdlRW50cnkiIElEPSIyIiBjb252ZXJzYXRpb25JRD0iMSIgdHlwZT0icmVzcG9uc2UiIHRpbWVzdGFtcD0iMjAwNy0wMS0yNFQxMzowMjo1OC40NzJaIj4KLTxtZXNzYWdlQ29udGVudD4mbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8mZ3Q7Jmx0O3NvYXBlbnY6RW52ZWxvcGUgeG1sbnM6c29hcGVudj0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAzLzA1L3NvYXAtZW52ZWxvcGUmcXVvdDsmZ3Q7Jmx0O3NvYXBlbnY6SGVhZGVyJmd0OyZsdDsvc29hcGVudjpIZWFkZXImZ3Q7Jmx0O3NvYXBlbnY6Qm9keSZndDsmbHQ7bnMyOmhlbGxvUmVzcG9uc2UgeG1sbnM6bnMyPSZxdW90O2h0dHA6Ly90ZXN0LyZxdW90OyZndDsmbHQ7cmV0dXJuJmd0O0hlbGxvLCBnYWJlISZsdDsvcmV0dXJuJmd0OyZsdDsvbnMyOmhlbGxvUmVzcG9uc2UmZ3Q7Jmx0Oy9zb2FwZW52OkJvZHkmZ3Q7Jmx0Oy9zb2FwZW52OkVudmVsb3BlJmd0OzwvbWVzc2FnZUNvbnRlbnQ+Ci08c2VuZGVySG9zdEFuZFBvcnQ+bG9jYWxob3N0OjkwODE8L3NlbmRlckhvc3RBbmRQb3J0PgotPHJlY2VpdmVySG9zdEFuZFBvcnQ+bG9jYWxob3N0OjkwODI8L3JlY2VpdmVySG9zdEFuZFBvcnQ+Ci08aHR0cEhlYWRlcnM+SFRUUC8xLjEgMjAwIE9LJiN4ZDsKLUNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vc29hcCt4bWw7IGNoYXJzZXQ9VVRGLTgmI3hkOwotQ29udGVudC1MYW5ndWFnZTogZW4tVVMmI3hkOwotU2V0LUNvb2tpZTogSlNFU1NJT05JRD0wMDAwNXpGTVdZVXdHbHRMYS1qTnVOYXh3cTM6LTE7IFBhdGg9LyYjeGQ7Ci1UcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZCYjeGQ7Ci1EYXRlOiBXZWQsIDI0IEphbiAyMDA3IDE4OjAyOjU3IEdNVCYjeGQ7Ci1TZXJ2ZXI6IFdlYlNwaGVyZSBBcHBsaWNhdGlvbiBTZXJ2ZXIvNi4xJiN4ZDsKLUV4cGlyZXM6IFRodSwgMDEgRGVjIDE5OTQgMTY6MDA6MDAgR01UJiN4ZDsKLUNhY2hlLUNvbnRyb2w6IG5vLWNhY2hlPSZxdW90O3NldC1jb29raWUsIHNldC1jb29raWUyJnF1b3Q7JiN4ZDsKLSYjeGQ7Ci08L2h0dHBIZWFkZXJzPgotPC9tZXNzYWdlRW50cnk+Ci08L2xvZz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL1NPQVAxMi9TaW1wbGVMb2cvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvU09BUDEyL1NpbXBsZUxvZy90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzZjEyZTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvU09BUDEyL1NpbXBsZUxvZy90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IkVuY3J5cHRpb24iPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgbWVzc2FnZSBsb2cgZmlsZSB0aGF0IGNvbnRhaW5zIGEgbWVzc2FnZSB3aXRoIG5vIHNlY3VyaXR5LgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcz4KLSAgCTxhc3NlcnRpb24gaWQ9IkJQMTIwMSIgdGFkSUQ9IkFQMTAiLz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDE2MDAiIHRhZElEPSJBUDEwIi8+Ci0JCi0JPGFzc2VydGlvbiBpZD0iQlAxMjAxIiB0YWRJRD0iQVAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMTYwMCIgdGFkSUQ9IkFQMTAiLz4KLQkKLQk8YXNzZXJ0aW9uIGlkPSJBUDE5NDUiIHRhZElEPSJBUDEwIi8+Ci0JPGFzc2VydGlvbiBpZD0iU1NCUDUxMDEiIHRhZElEPSJBUDEwIi8+Ci0KLQk8YXNzZXJ0aW9uIGlkPSJBUDE5NDUiIHRhZElEPSJBUDEwIi8+Ci0JPGFzc2VydGlvbiBpZD0iU1NCUDUxMDEiIHRhZElEPSJBUDEwIi8+Ci0JCi0KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL1NlY3VyZVdTL0VuY3J5cHRpb24vRW5jcnlwdGlvbi53c2ltc2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9TZWN1cmVXUy9FbmNyeXB0aW9uL0VuY3J5cHRpb24ud3NpbXNnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTg2MDU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL1NlY3VyZVdTL0VuY3J5cHRpb24vRW5jcnlwdGlvbi53c2ltc2cKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGxvZyB0aW1lc3RhbXA9IjIwMDctMDEtMTZUMTI6MTU6NTguMzI1IgotICAgIHhtbG5zPSJodHRwOi8vd3d3LndzLWkub3JnL3Rlc3RpbmcvMjAwNC8wNy9sb2cvIgotICAgIHhtbG5zOndzaS1tb25Db25maWc9Imh0dHA6Ly93d3cud3MtaS5vcmcvdGVzdGluZy8yMDA0LzA3L21vbml0b3JDb25maWcvIgotICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiPgotICA8bW9uaXRvciB2ZXJzaW9uPSIxLjAiIHJlbGVhc2VEYXRlPSIyMDAzLTAzLTIwIj4KLSAgICA8aW1wbGVtZW50ZXIgbmFtZT0iSUJNIiBsb2NhdGlvbj0iIi8+Ci0gICAgPGVudmlyb25tZW50PgotICAgICAgPHJ1bnRpbWUgbmFtZT0iSmF2YShUTSkgMiBSdW50aW1lIEVudmlyb25tZW50LCBTdGFuZGFyZCBFZGl0aW9uIiB2ZXJzaW9uPSJwd2kzMmRldi0yMDA2MTAwMmEgKFNSMykiLz4KLSAgICAgIDxvcGVyYXRpbmdTeXN0ZW0gbmFtZT0iV2luZG93cyBYUCIgdmVyc2lvbj0iNS4xIGJ1aWxkIDI2MDAgU2VydmljZSBQYWNrIDIiLz4KLSAgICAgIDx4bWxQYXJzZXIgbmFtZT0iQXBhY2hlIFhlcmNlcyIgdmVyc2lvbj0iWE1MNEogNC40LjYiLz4KLSAgICA8L2Vudmlyb25tZW50PgotICAgIDx3c2ktbW9uQ29uZmlnOmNvbmZpZ3VyYXRpb24+Ci0gICAgPHdzaS1tb25Db25maWc6Y29tbWVudD5Db21tZW50PC93c2ktbW9uQ29uZmlnOmNvbW1lbnQ+Ci0gICAgICA8d3NpLW1vbkNvbmZpZzpsb2dGaWxlIHJlcGxhY2U9InRydWUiIGxvY2F0aW9uPSJVUkwiPgotICAgICAgPHdzaS1tb25Db25maWc6YWRkU3R5bGVTaGVldCBocmVmPSJudWxsIiB0eXBlPSJudWxsIiAvPgotICAgIDwvd3NpLW1vbkNvbmZpZzpsb2dGaWxlPgotICAgICAgPHdzaS1tb25Db25maWc6bG9nRHVyYXRpb24+NjAwPC93c2ktbW9uQ29uZmlnOmxvZ0R1cmF0aW9uPgotICAgICAgPHdzaS1tb25Db25maWc6Y2xlYW51cFRpbWVvdXRTZWNvbmRzPjM8L3dzaS1tb25Db25maWc6Y2xlYW51cFRpbWVvdXRTZWNvbmRzPgotICAgICAgPHdzaS1tb25Db25maWc6bWFuSW5UaGVNaWRkbGU+Ci0gICAgICA8L3dzaS1tb25Db25maWc6bWFuSW5UaGVNaWRkbGU+Ci0gICAgPC93c2ktbW9uQ29uZmlnOmNvbmZpZ3VyYXRpb24+Ci0gIDwvbW9uaXRvcj4KLQotPG1lc3NhZ2VFbnRyeSB4c2k6dHlwZT0iaHR0cE1lc3NhZ2VFbnRyeSIgSUQ9IjEiIGNvbnZlcnNhdGlvbklEPSIxIiB0eXBlPSJyZXF1ZXN0IiB0aW1lc3RhbXA9IjIwMDctMDEtMTZUMTA6NDc6MzAuNjUzWiI+Ci08bWVzc2FnZUNvbnRlbnQ+Jmx0O3NvYXBlbnY6RW52ZWxvcGUgeG1sbnM6c29hcGVudj0mcXVvdDtodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyZxdW90OyB4bWxuczpzb2FwZW5jPSZxdW90O2h0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvJnF1b3Q7IHhtbG5zOnhzZD0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSZxdW90OyB4bWxuczp4c2k9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UmcXVvdDsgeG1sbnM6d3NhPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDUvMDgvYWRkcmVzc2luZyZxdW90OyZndDsmbHQ7c29hcGVudjpIZWFkZXImZ3Q7Jmx0O3dzc2U6U2VjdXJpdHkgc29hcGVudjptdXN0VW5kZXJzdGFuZD0mcXVvdDsxJnF1b3Q7IHhtbG5zOndzc2U9JnF1b3Q7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy13c3NlY3VyaXR5LXNlY2V4dC0xLjAueHNkJnF1b3Q7Jmd0OyZsdDtFbmNyeXB0ZWRLZXkgeG1sbnM9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjJnF1b3Q7Jmd0OyZsdDtFbmNyeXB0aW9uTWV0aG9kIEFsZ29yaXRobT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyNyc2EtMV81JnF1b3Q7LyZndDsmbHQ7ZHM6S2V5SW5mbyB4bWxuczpkcz0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjJnF1b3Q7Jmd0OyZsdDt3c3NlOlNlY3VyaXR5VG9rZW5SZWZlcmVuY2UmZ3Q7Jmx0O3dzc2U6S2V5SWRlbnRpZmllciBWYWx1ZVR5cGU9JnF1b3Q7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy14NTA5LXRva2VuLXByb2ZpbGUtMS4wI1g1MDlTdWJqZWN0S2V5SWRlbnRpZmllciZxdW90OyZndDsvNjJ3WE9iRUQ3ejZjMXlYN1Frdk4xdGhRZFk9Jmx0Oy93c3NlOktleUlkZW50aWZpZXImZ3Q7Jmx0Oy93c3NlOlNlY3VyaXR5VG9rZW5SZWZlcmVuY2UmZ3Q7Jmx0Oy9kczpLZXlJbmZvJmd0OyZsdDtDaXBoZXJEYXRhJmd0OyZsdDtDaXBoZXJWYWx1ZSZndDtqcWRvZUtFS0txWGdRbnZXekRPL1d5SFBiMzVVWVdSenp3eVhBdlNIRllUaGczTzhZTTdIYmZZRjVKVUF2ODliaWk4SHVULzUyb0VYUnZMT2RBRklQVWxZRTBuUlNIK0pDYi90aW4rM1hEbHFtMEhTYi9wanp4S0cwNzRsbGNIZnR2Unpoc0oyUitDU3pYaTlwQ294R1ZUYkxSOU1oY3NXeDFpL1Z2RFBMWkU9Jmx0Oy9DaXBoZXJWYWx1ZSZndDsmbHQ7L0NpcGhlckRhdGEmZ3Q7Jmx0O1JlZmVyZW5jZUxpc3QmZ3Q7Jmx0O0RhdGFSZWZlcmVuY2UgVVJJPSZxdW90OyN3c3NlY3VyaXR5X2VuY3J5cHRpb25faWRfMCZxdW90Oy8mZ3Q7Jmx0Oy9SZWZlcmVuY2VMaXN0Jmd0OyZsdDsvRW5jcnlwdGVkS2V5Jmd0OyZsdDsvd3NzZTpTZWN1cml0eSZndDsmbHQ7d3NhOlRvJmd0O2h0dHA6Ly9sb2NhbGhvc3Q6OTA4Mi9XZWJQcm9qZWN0V2l0aEVuY3JpcHRpb24vc2VydmljZXMvV2ViU2VydmljZSZsdDsvd3NhOlRvJmd0OyZsdDt3c2E6QWN0aW9uJmd0O2luY3JlbWVudCZsdDsvd3NhOkFjdGlvbiZndDsmbHQ7d3NhOk1lc3NhZ2VJRCZndDt1dWlkOjJCOTc1N0NDLTAxMTAtNDAwMC1FMDAwLTAzNUMwOTFBOUREOSZsdDsvd3NhOk1lc3NhZ2VJRCZndDsmbHQ7L3NvYXBlbnY6SGVhZGVyJmd0OyZsdDtzb2FwZW52OkJvZHkmZ3Q7Jmx0O0VuY3J5cHRlZERhdGEgSWQ9JnF1b3Q7d3NzZWN1cml0eV9lbmNyeXB0aW9uX2lkXzAmcXVvdDsgVHlwZT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyNDb250ZW50JnF1b3Q7IHhtbG5zPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jIyZxdW90OyZndDsmbHQ7RW5jcnlwdGlvbk1ldGhvZCBBbGdvcml0aG09JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjdHJpcGxlZGVzLWNiYyZxdW90Oy8mZ3Q7Jmx0O0NpcGhlckRhdGEmZ3Q7Jmx0O0NpcGhlclZhbHVlJmd0O3ZkVTQyc09vNi9XdjFWM3JvTUlWcGJKdXZnc0lFeDZtT3dsTldEcnI4amdrS3Y2NVZCQ3YyV0lNQVN3SFpWTFpaQXFKNHpnaUVWOXJwQ1hzN1FqKzhHTWZtVlI5VlpZdktLNWo1SEV2MXhiekIwSFBPc2E1QkE9PSZsdDsvQ2lwaGVyVmFsdWUmZ3Q7Jmx0Oy9DaXBoZXJEYXRhJmd0OyZsdDsvRW5jcnlwdGVkRGF0YSZndDsmbHQ7L3NvYXBlbnY6Qm9keSZndDsmbHQ7L3NvYXBlbnY6RW52ZWxvcGUmZ3Q7PC9tZXNzYWdlQ29udGVudD4KLTxzZW5kZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6OTA4Mjwvc2VuZGVySG9zdEFuZFBvcnQ+Ci08cmVjZWl2ZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6OTA4MDwvcmVjZWl2ZXJIb3N0QW5kUG9ydD4KLTxodHRwSGVhZGVycz5QT1NUIC9XZWJQcm9qZWN0V2l0aEVuY3JpcHRpb24vc2VydmljZXMvV2ViU2VydmljZSBIVFRQLzEuMSYjeGQ7Ci1Ib3N0OiBsb2NhbGhvc3Q6OTA4MCYjeGQ7Ci1BY2NlcHQ6IGFwcGxpY2F0aW9uL3NvYXAreG1sLG11bHRpcGFydC9yZWxhdGVkLHRleHQvKiYjeGQ7Ci1Vc2VyLUFnZW50OiBJQk0gV2ViU2VydmljZXMvMS4wJiN4ZDsKLUNhY2hlLUNvbnRyb2w6IG5vLWNhY2hlJiN4ZDsKLVByYWdtYTogbm8tY2FjaGUmI3hkOwotU09BUEFjdGlvbjogJnF1b3Q7aW5jcmVtZW50JnF1b3Q7JiN4ZDsKLUNvbm5lY3Rpb246IEtlZXAtQWxpdmUmI3hkOwotQ29udGVudC1UeXBlOiB0ZXh0L3htbDsgY2hhcnNldD11dGYtOCYjeGQ7Ci1Db250ZW50LUxlbmd0aDogMTg3MSYjeGQ7Ci1EYXRlOiBUdWUsIDE2IEphbiAyMDA3IDE1OjQ3OjMwIEdNVCYjeGQ7Ci0mI3hkOwotPC9odHRwSGVhZGVycz4KLTwvbWVzc2FnZUVudHJ5PgotPG1lc3NhZ2VFbnRyeSB4c2k6dHlwZT0iaHR0cE1lc3NhZ2VFbnRyeSIgSUQ9IjIiIGNvbnZlcnNhdGlvbklEPSIxIiB0eXBlPSJyZXNwb25zZSIgdGltZXN0YW1wPSIyMDA3LTAxLTE2VDEwOjQ3OjMxLjA3NFoiPgotPG1lc3NhZ2VDb250ZW50PiZsdDtzb2FwZW52OkVudmVsb3BlIHhtbG5zOnNvYXBlbnY9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8mcXVvdDsgeG1sbnM6c29hcGVuYz0mcXVvdDtodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyZxdW90OyB4bWxuczp4c2Q9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEmcXVvdDsgeG1sbnM6eHNpPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlJnF1b3Q7IHhtbG5zOndzYT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDA1LzA4L2FkZHJlc3NpbmcmcXVvdDsmZ3Q7Jmx0O3NvYXBlbnY6SGVhZGVyJmd0OyZsdDt3c3NlOlNlY3VyaXR5IHNvYXBlbnY6bXVzdFVuZGVyc3RhbmQ9JnF1b3Q7MSZxdW90OyB4bWxuczp3c3NlPSZxdW90O2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3Mtd3NzZWN1cml0eS1zZWNleHQtMS4wLnhzZCZxdW90OyZndDsmbHQ7RW5jcnlwdGVkS2V5IHhtbG5zPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jIyZxdW90OyZndDsmbHQ7RW5jcnlwdGlvbk1ldGhvZCBBbGdvcml0aG09JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjcnNhLTFfNSZxdW90Oy8mZ3Q7Jmx0O2RzOktleUluZm8geG1sbnM6ZHM9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyZxdW90OyZndDsmbHQ7d3NzZTpTZWN1cml0eVRva2VuUmVmZXJlbmNlJmd0OyZsdDt3c3NlOktleUlkZW50aWZpZXIgVmFsdWVUeXBlPSZxdW90O2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3MteDUwOS10b2tlbi1wcm9maWxlLTEuMCNYNTA5U3ViamVjdEtleUlkZW50aWZpZXImcXVvdDsmZ3Q7dHlCVTNxUXVmWVo3MXRKQVU3Z1ZJcWdST3VRPSZsdDsvd3NzZTpLZXlJZGVudGlmaWVyJmd0OyZsdDsvd3NzZTpTZWN1cml0eVRva2VuUmVmZXJlbmNlJmd0OyZsdDsvZHM6S2V5SW5mbyZndDsmbHQ7Q2lwaGVyRGF0YSZndDsmbHQ7Q2lwaGVyVmFsdWUmZ3Q7UFZVTzBhZmRBdU9ZRlAxbk12ZXpQNlVxWTRySW84M3hQR0o0clcrczdOa1BPSGRFckQvdG1idGJHOHVYQXllVDRpTFhNL0syK2ZTeWxuaThHRmlKWmt4b3owOGtNRWQxOS82YWVhZmJBMGl6VTlEVkFVS1JNL2VoQ2cyS0NZaTJ3WGhRYWpZZmtRdUZNR3VtQTlWS1Znclk3TmR1N2YvWWMvcG1JV3RRL3NvPSZsdDsvQ2lwaGVyVmFsdWUmZ3Q7Jmx0Oy9DaXBoZXJEYXRhJmd0OyZsdDtSZWZlcmVuY2VMaXN0Jmd0OyZsdDtEYXRhUmVmZXJlbmNlIFVSST0mcXVvdDsjd3NzZWN1cml0eV9lbmNyeXB0aW9uX2lkXzEmcXVvdDsvJmd0OyZsdDsvUmVmZXJlbmNlTGlzdCZndDsmbHQ7L0VuY3J5cHRlZEtleSZndDsmbHQ7L3dzc2U6U2VjdXJpdHkmZ3Q7Jmx0O3dzYTpUbyZndDtodHRwOi8vd3d3LnczLm9yZy8yMDA1LzA4L2FkZHJlc3NpbmcvYW5vbnltb3VzJmx0Oy93c2E6VG8mZ3Q7Jmx0O3dzYTpBY3Rpb24mZ3Q7aHR0cDovL21haW4vV2ViU2VydmljZS9pbmNyZW1lbnRSZXNwb25zZSZsdDsvd3NhOkFjdGlvbiZndDsmbHQ7d3NhOk1lc3NhZ2VJRCZndDt1dWlkOjJCOTc3Njc4LTAxMTAtNDAwMC1FMDAwLTAzNUMwOTFBOUREOSZsdDsvd3NhOk1lc3NhZ2VJRCZndDsmbHQ7d3NhOlJlbGF0ZXNUbyZndDt1dWlkOjJCOTc1N0NDLTAxMTAtNDAwMC1FMDAwLTAzNUMwOTFBOUREOSZsdDsvd3NhOlJlbGF0ZXNUbyZndDsmbHQ7L3NvYXBlbnY6SGVhZGVyJmd0OyZsdDtzb2FwZW52OkJvZHkmZ3Q7Jmx0O0VuY3J5cHRlZERhdGEgSWQ9JnF1b3Q7d3NzZWN1cml0eV9lbmNyeXB0aW9uX2lkXzEmcXVvdDsgVHlwZT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyNDb250ZW50JnF1b3Q7IHhtbG5zPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jIyZxdW90OyZndDsmbHQ7RW5jcnlwdGlvbk1ldGhvZCBBbGdvcml0aG09JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjdHJpcGxlZGVzLWNiYyZxdW90Oy8mZ3Q7Jmx0O0NpcGhlckRhdGEmZ3Q7Jmx0O0NpcGhlclZhbHVlJmd0O1JEU1M5THBrcEl1NWxXT1pyK2hmc0V6Tm91bGpENi9OUklmc1lQSDBYQ3R3cG9tNGFuL2daUzF2bDV1OXI1RFpVdXErV3BTSk9wZThOczltcVpsakNGSnZWbU1MR2Ira0MzaWc3akVKQ3ZicWM3OHFESVFDbWdMUE9yY2wxUTBaU2xoMjVBeDczZGU0SFdXT1BKUWpLUEhaWW9wY1U4TUsmbHQ7L0NpcGhlclZhbHVlJmd0OyZsdDsvQ2lwaGVyRGF0YSZndDsmbHQ7L0VuY3J5cHRlZERhdGEmZ3Q7Jmx0Oy9zb2FwZW52OkJvZHkmZ3Q7Jmx0Oy9zb2FwZW52OkVudmVsb3BlJmd0OzwvbWVzc2FnZUNvbnRlbnQ+Ci08c2VuZGVySG9zdEFuZFBvcnQ+bG9jYWxob3N0OjkwODA8L3NlbmRlckhvc3RBbmRQb3J0PgotPHJlY2VpdmVySG9zdEFuZFBvcnQ+bG9jYWxob3N0OjkwODI8L3JlY2VpdmVySG9zdEFuZFBvcnQ+Ci08aHR0cEhlYWRlcnM+SFRUUC8xLjEgMjAwIE9LJiN4ZDsKLUNvbnRlbnQtVHlwZTogdGV4dC94bWw7IGNoYXJzZXQ9dXRmLTgmI3hkOwotQ29udGVudC1MYW5ndWFnZTogZW4tVVMmI3hkOwotQ29udGVudC1MZW5ndGg6IDE5OTQmI3hkOwotRGF0ZTogVHVlLCAxNiBKYW4gMjAwNyAxNTo0NzozMCBHTVQmI3hkOwotU2VydmVyOiBXZWJTcGhlcmUgQXBwbGljYXRpb24gU2VydmVyLzYuMSYjeGQ7Ci0mI3hkOwotPC9odHRwSGVhZGVycz4KLTwvbWVzc2FnZUVudHJ5PgotPC9sb2c+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9TZWN1cmVXUy9FbmNyeXB0aW9uL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL1NlY3VyZVdTL0VuY3J5cHRpb24vdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTk1ODA4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL1NlY3VyZVdTL0VuY3J5cHRpb24vdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IkVuY3J5cHRpb24iPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgbWVzc2FnZSBsb2cgZmlsZSB0aGF0IGNvbnRhaW5zIGEgbWVzc2FnZSB3aXRoIGVuY3J5cHRpb24uCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzLz4KLTwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9TZWN1cmVXUy9Ob1NlY3VyaXR5L05vU2VjdXJpdHkud3NpbXNnIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvU2VjdXJlV1MvTm9TZWN1cml0eS9Ob1NlY3VyaXR5LndzaW1zZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBjOTJhOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9TZWN1cmVXUy9Ob1NlY3VyaXR5L05vU2VjdXJpdHkud3NpbXNnCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxsb2cgdGltZXN0YW1wPSIyMDA3LTAxLTE2VDE4OjE0OjA2LjAwNSIKLSAgICB4bWxucz0iaHR0cDovL3d3dy53cy1pLm9yZy90ZXN0aW5nLzIwMDQvMDcvbG9nLyIKLSAgICB4bWxuczp3c2ktbW9uQ29uZmlnPSJodHRwOi8vd3d3LndzLWkub3JnL3Rlc3RpbmcvMjAwNC8wNy9tb25pdG9yQ29uZmlnLyIKLSAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIj4KLSAgPG1vbml0b3IgdmVyc2lvbj0iMS4wIiByZWxlYXNlRGF0ZT0iMjAwMy0wMy0yMCI+Ci0gICAgPGltcGxlbWVudGVyIG5hbWU9IklCTSIgbG9jYXRpb249IiIvPgotICAgIDxlbnZpcm9ubWVudD4KLSAgICAgIDxydW50aW1lIG5hbWU9IkphdmEoVE0pIDIgUnVudGltZSBFbnZpcm9ubWVudCwgU3RhbmRhcmQgRWRpdGlvbiIgdmVyc2lvbj0icHdpMzJkZXYtMjAwNjEwMDJhIChTUjMpIi8+Ci0gICAgICA8b3BlcmF0aW5nU3lzdGVtIG5hbWU9IldpbmRvd3MgWFAiIHZlcnNpb249IjUuMSBidWlsZCAyNjAwIFNlcnZpY2UgUGFjayAyIi8+Ci0gICAgICA8eG1sUGFyc2VyIG5hbWU9IkFwYWNoZSBYZXJjZXMiIHZlcnNpb249IlhNTDRKIDQuNC42Ii8+Ci0gICAgPC9lbnZpcm9ubWVudD4KLSAgICA8d3NpLW1vbkNvbmZpZzpjb25maWd1cmF0aW9uPgotICAgIDx3c2ktbW9uQ29uZmlnOmNvbW1lbnQ+Q29tbWVudDwvd3NpLW1vbkNvbmZpZzpjb21tZW50PgotICAgICAgPHdzaS1tb25Db25maWc6bG9nRmlsZSByZXBsYWNlPSJ0cnVlIiBsb2NhdGlvbj0iVVJMIj4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOmFkZFN0eWxlU2hlZXQgaHJlZj0ibnVsbCIgdHlwZT0ibnVsbCIgLz4KLSAgICA8L3dzaS1tb25Db25maWc6bG9nRmlsZT4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOmxvZ0R1cmF0aW9uPjYwMDwvd3NpLW1vbkNvbmZpZzpsb2dEdXJhdGlvbj4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOmNsZWFudXBUaW1lb3V0U2Vjb25kcz4zPC93c2ktbW9uQ29uZmlnOmNsZWFudXBUaW1lb3V0U2Vjb25kcz4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOm1hbkluVGhlTWlkZGxlPgotICAgICAgPC93c2ktbW9uQ29uZmlnOm1hbkluVGhlTWlkZGxlPgotICAgIDwvd3NpLW1vbkNvbmZpZzpjb25maWd1cmF0aW9uPgotICA8L21vbml0b3I+Ci0KLTxtZXNzYWdlRW50cnkgeHNpOnR5cGU9Imh0dHBNZXNzYWdlRW50cnkiIElEPSIxIiBjb252ZXJzYXRpb25JRD0iMSIgdHlwZT0icmVxdWVzdCIgdGltZXN0YW1wPSIyMDA3LTAxLTE2VDE4OjEzOjUyLjgzNloiPgotPG1lc3NhZ2VDb250ZW50PiZsdDtzb2FwZW52OkVudmVsb3BlIHhtbG5zOnNvYXBlbnY9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8mcXVvdDsgeG1sbnM6c29hcGVuYz0mcXVvdDtodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyZxdW90OyB4bWxuczp4c2Q9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEmcXVvdDsgeG1sbnM6eHNpPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlJnF1b3Q7IHhtbG5zOndzYT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDA1LzA4L2FkZHJlc3NpbmcmcXVvdDsmZ3Q7Jmx0O3NvYXBlbnY6SGVhZGVyJmd0OyZsdDt3c2E6VG8mZ3Q7aHR0cDovL2xvY2FsaG9zdDo5MDgyL1dlYlByb2plY3ROb1NlY3VyaXR5L3NlcnZpY2VzL1dlYlNlcnZpY2UmbHQ7L3dzYTpUbyZndDsmbHQ7d3NhOkFjdGlvbiZndDtpbmNyZW1lbnQmbHQ7L3dzYTpBY3Rpb24mZ3Q7Jmx0O3dzYTpNZXNzYWdlSUQmZ3Q7dXVpZDoyRDMwMUVBNi0wMTEwLTQwMDAtRTAwMC0wMzVDMDkxQTlERDkmbHQ7L3dzYTpNZXNzYWdlSUQmZ3Q7Jmx0Oy9zb2FwZW52OkhlYWRlciZndDsmbHQ7c29hcGVudjpCb2R5Jmd0OyZsdDtwNjE5OmluY3JlbWVudCB4bWxuczpwNjE5PSZxdW90O2h0dHA6Ly9tYWluJnF1b3Q7Jmd0OyZsdDt2YWx1ZSZndDsxJmx0Oy92YWx1ZSZndDsmbHQ7L3A2MTk6aW5jcmVtZW50Jmd0OyZsdDsvc29hcGVudjpCb2R5Jmd0OyZsdDsvc29hcGVudjpFbnZlbG9wZSZndDs8L21lc3NhZ2VDb250ZW50PgotPHNlbmRlckhvc3RBbmRQb3J0PmxvY2FsaG9zdDo5MDgyPC9zZW5kZXJIb3N0QW5kUG9ydD4KLTxyZWNlaXZlckhvc3RBbmRQb3J0PmxvY2FsaG9zdDo5MDgwPC9yZWNlaXZlckhvc3RBbmRQb3J0PgotPGh0dHBIZWFkZXJzPlBPU1QgL1dlYlByb2plY3ROb1NlY3VyaXR5L3NlcnZpY2VzL1dlYlNlcnZpY2UgSFRUUC8xLjEmI3hkOwotSG9zdDogbG9jYWxob3N0OjkwODAmI3hkOwotQWNjZXB0OiBhcHBsaWNhdGlvbi9zb2FwK3htbCxtdWx0aXBhcnQvcmVsYXRlZCx0ZXh0LyomI3hkOwotVXNlci1BZ2VudDogSUJNIFdlYlNlcnZpY2VzLzEuMCYjeGQ7Ci1DYWNoZS1Db250cm9sOiBuby1jYWNoZSYjeGQ7Ci1QcmFnbWE6IG5vLWNhY2hlJiN4ZDsKLVNPQVBBY3Rpb246ICZxdW90O2luY3JlbWVudCZxdW90OyYjeGQ7Ci1Db25uZWN0aW9uOiBLZWVwLUFsaXZlJiN4ZDsKLUNvbnRlbnQtVHlwZTogdGV4dC94bWw7IGNoYXJzZXQ9dXRmLTgmI3hkOwotQ29udGVudC1MZW5ndGg6IDYyMiYjeGQ7Ci1EYXRlOiBUdWUsIDE2IEphbiAyMDA3IDIzOjEzOjUyIEdNVCYjeGQ7Ci0mI3hkOwotPC9odHRwSGVhZGVycz4KLTwvbWVzc2FnZUVudHJ5PgotPG1lc3NhZ2VFbnRyeSB4c2k6dHlwZT0iaHR0cE1lc3NhZ2VFbnRyeSIgSUQ9IjIiIGNvbnZlcnNhdGlvbklEPSIxIiB0eXBlPSJyZXNwb25zZSIgdGltZXN0YW1wPSIyMDA3LTAxLTE2VDE4OjEzOjUyLjk3NloiPgotPG1lc3NhZ2VDb250ZW50PiZsdDtzb2FwZW52OkVudmVsb3BlIHhtbG5zOnNvYXBlbnY9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8mcXVvdDsgeG1sbnM6c29hcGVuYz0mcXVvdDtodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyZxdW90OyB4bWxuczp4c2Q9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEmcXVvdDsgeG1sbnM6eHNpPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlJnF1b3Q7IHhtbG5zOndzYT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDA1LzA4L2FkZHJlc3NpbmcmcXVvdDsmZ3Q7Jmx0O3NvYXBlbnY6SGVhZGVyJmd0OyZsdDt3c2E6VG8mZ3Q7aHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC9hZGRyZXNzaW5nL2Fub255bW91cyZsdDsvd3NhOlRvJmd0OyZsdDt3c2E6QWN0aW9uJmd0O2h0dHA6Ly9tYWluL1dlYlNlcnZpY2UvaW5jcmVtZW50UmVzcG9uc2UmbHQ7L3dzYTpBY3Rpb24mZ3Q7Jmx0O3dzYTpNZXNzYWdlSUQmZ3Q7dXVpZDoyRDMwMUY1MC0wMTEwLTQwMDAtRTAwMC0wMzVDMDkxQTlERDkmbHQ7L3dzYTpNZXNzYWdlSUQmZ3Q7Jmx0O3dzYTpSZWxhdGVzVG8mZ3Q7dXVpZDoyRDMwMUVBNi0wMTEwLTQwMDAtRTAwMC0wMzVDMDkxQTlERDkmbHQ7L3dzYTpSZWxhdGVzVG8mZ3Q7Jmx0Oy9zb2FwZW52OkhlYWRlciZndDsmbHQ7c29hcGVudjpCb2R5Jmd0OyZsdDtwNjE5OmluY3JlbWVudFJlc3BvbnNlIHhtbG5zOnA2MTk9JnF1b3Q7aHR0cDovL21haW4mcXVvdDsmZ3Q7Jmx0O2luY3JlbWVudFJldHVybiZndDsyJmx0Oy9pbmNyZW1lbnRSZXR1cm4mZ3Q7Jmx0Oy9wNjE5OmluY3JlbWVudFJlc3BvbnNlJmd0OyZsdDsvc29hcGVudjpCb2R5Jmd0OyZsdDsvc29hcGVudjpFbnZlbG9wZSZndDs8L21lc3NhZ2VDb250ZW50PgotPHNlbmRlckhvc3RBbmRQb3J0PmxvY2FsaG9zdDo5MDgwPC9zZW5kZXJIb3N0QW5kUG9ydD4KLTxyZWNlaXZlckhvc3RBbmRQb3J0PmxvY2FsaG9zdDo5MDgyPC9yZWNlaXZlckhvc3RBbmRQb3J0PgotPGh0dHBIZWFkZXJzPkhUVFAvMS4xIDIwMCBPSyYjeGQ7Ci1Db250ZW50LVR5cGU6IHRleHQveG1sOyBjaGFyc2V0PXV0Zi04JiN4ZDsKLUNvbnRlbnQtTGFuZ3VhZ2U6IGVuLVVTJiN4ZDsKLUNvbnRlbnQtTGVuZ3RoOiA3NDUmI3hkOwotRGF0ZTogVHVlLCAxNiBKYW4gMjAwNyAyMzoxMzo1MiBHTVQmI3hkOwotU2VydmVyOiBXZWJTcGhlcmUgQXBwbGljYXRpb24gU2VydmVyLzYuMSYjeGQ7Ci0mI3hkOwotPC9odHRwSGVhZGVycz4KLTwvbWVzc2FnZUVudHJ5PgotPC9sb2c+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9TZWN1cmVXUy9Ob1NlY3VyaXR5L3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL1NlY3VyZVdTL05vU2VjdXJpdHkvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YmVmZGE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL1NlY3VyZVdTL05vU2VjdXJpdHkvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IkVuY3J5cHRpb24iPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgbWVzc2FnZSBsb2cgZmlsZSB0aGF0IGNvbnRhaW5zIGEgbWVzc2FnZSB3aXRoIG5vIHNlY3VyaXR5LgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcy8+Ci08L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvU2VjdXJlV1MvU2lnbmF0dXJlL1NpZ25hdHVyZS53c2ltc2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9TZWN1cmVXUy9TaWduYXR1cmUvU2lnbmF0dXJlLndzaW1zZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmNkMDVlZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9TZWN1cmVXUy9TaWduYXR1cmUvU2lnbmF0dXJlLndzaW1zZworKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08bG9nIHRpbWVzdGFtcD0iMjAwNy0wMS0xNlQxODowODozOC41MjQiCi0gICAgeG1sbnM9Imh0dHA6Ly93d3cud3MtaS5vcmcvdGVzdGluZy8yMDA0LzA3L2xvZy8iCi0gICAgeG1sbnM6d3NpLW1vbkNvbmZpZz0iaHR0cDovL3d3dy53cy1pLm9yZy90ZXN0aW5nLzIwMDQvMDcvbW9uaXRvckNvbmZpZy8iCi0gICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSI+Ci0gIDxtb25pdG9yIHZlcnNpb249IjEuMCIgcmVsZWFzZURhdGU9IjIwMDMtMDMtMjAiPgotICAgIDxpbXBsZW1lbnRlciBuYW1lPSJJQk0iIGxvY2F0aW9uPSIiLz4KLSAgICA8ZW52aXJvbm1lbnQ+Ci0gICAgICA8cnVudGltZSBuYW1lPSJKYXZhKFRNKSAyIFJ1bnRpbWUgRW52aXJvbm1lbnQsIFN0YW5kYXJkIEVkaXRpb24iIHZlcnNpb249InB3aTMyZGV2LTIwMDYxMDAyYSAoU1IzKSIvPgotICAgICAgPG9wZXJhdGluZ1N5c3RlbSBuYW1lPSJXaW5kb3dzIFhQIiB2ZXJzaW9uPSI1LjEgYnVpbGQgMjYwMCBTZXJ2aWNlIFBhY2sgMiIvPgotICAgICAgPHhtbFBhcnNlciBuYW1lPSJBcGFjaGUgWGVyY2VzIiB2ZXJzaW9uPSJYTUw0SiA0LjQuNiIvPgotICAgIDwvZW52aXJvbm1lbnQ+Ci0gICAgPHdzaS1tb25Db25maWc6Y29uZmlndXJhdGlvbj4KLSAgICA8d3NpLW1vbkNvbmZpZzpjb21tZW50PkNvbW1lbnQ8L3dzaS1tb25Db25maWc6Y29tbWVudD4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOmxvZ0ZpbGUgcmVwbGFjZT0idHJ1ZSIgbG9jYXRpb249IlVSTCI+Ci0gICAgICA8d3NpLW1vbkNvbmZpZzphZGRTdHlsZVNoZWV0IGhyZWY9Im51bGwiIHR5cGU9Im51bGwiIC8+Ci0gICAgPC93c2ktbW9uQ29uZmlnOmxvZ0ZpbGU+Ci0gICAgICA8d3NpLW1vbkNvbmZpZzpsb2dEdXJhdGlvbj42MDA8L3dzaS1tb25Db25maWc6bG9nRHVyYXRpb24+Ci0gICAgICA8d3NpLW1vbkNvbmZpZzpjbGVhbnVwVGltZW91dFNlY29uZHM+Mzwvd3NpLW1vbkNvbmZpZzpjbGVhbnVwVGltZW91dFNlY29uZHM+Ci0gICAgICA8d3NpLW1vbkNvbmZpZzptYW5JblRoZU1pZGRsZT4KLSAgICAgIDwvd3NpLW1vbkNvbmZpZzptYW5JblRoZU1pZGRsZT4KLSAgICA8L3dzaS1tb25Db25maWc6Y29uZmlndXJhdGlvbj4KLSAgPC9tb25pdG9yPgotCi08bWVzc2FnZUVudHJ5IHhzaTp0eXBlPSJodHRwTWVzc2FnZUVudHJ5IiBJRD0iMSIgY29udmVyc2F0aW9uSUQ9IjEiIHR5cGU9InJlcXVlc3QiIHRpbWVzdGFtcD0iMjAwNy0wMS0xNlQxODowODoyNi4wMDZaIj4KLTxtZXNzYWdlQ29udGVudD4mbHQ7c29hcGVudjpFbnZlbG9wZSB4bWxuczpzb2FwZW52PSZxdW90O2h0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvJnF1b3Q7IHhtbG5zOnNvYXBlbmM9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8mcXVvdDsgeG1sbnM6eHNkPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJnF1b3Q7IHhtbG5zOnhzaT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSZxdW90OyB4bWxuczp3c2E9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC9hZGRyZXNzaW5nJnF1b3Q7Jmd0OyZsdDtzb2FwZW52OkhlYWRlciZndDsmbHQ7d3NzZTpTZWN1cml0eSBzb2FwZW52Om11c3RVbmRlcnN0YW5kPSZxdW90OzEmcXVvdDsgeG1sbnM6d3NzZT0mcXVvdDtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXdzc2VjdXJpdHktc2VjZXh0LTEuMC54c2QmcXVvdDsmZ3Q7Jmx0O3dzc2U6QmluYXJ5U2VjdXJpdHlUb2tlbiBFbmNvZGluZ1R5cGU9JnF1b3Q7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy1zb2FwLW1lc3NhZ2Utc2VjdXJpdHktMS4wI0Jhc2U2NEJpbmFyeSZxdW90OyBWYWx1ZVR5cGU9JnF1b3Q7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy14NTA5LXRva2VuLXByb2ZpbGUtMS4wI1g1MDkmcXVvdDsgd3N1OklkPSZxdW90O3g1MDlic3RfMTYmcXVvdDsgeG1sbnM6d3N1PSZxdW90O2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3Mtd3NzZWN1cml0eS11dGlsaXR5LTEuMC54c2QmcXVvdDsmZ3Q7TUlJRFFUQ0NBcXFnQXdJQkFnSUNBUVF3RFFZSktvWklodmNOQVFFRkJRQXdUakVMTUFrR0ExVUVCaE1DU2xBeEVUQVBCZ05WQkFnVENFdGhibUZuWVhkaE1Rd3dDZ1lEVlFRS0V3TkpRazB4RERBS0JnTlZCQXNUQTFSU1RERVFNQTRHQTFVRUF4TUhTVzUwSUVOQk1qQWVGdzB3TVRFd01ERXdPVFUwTURaYUZ3MHhNVEV3TURFd09UVTBNRFphTUZReEN6QUpCZ05WQkFZVEFrcFFNUkV3RHdZRFZRUUlFd2hMWVc1aFoyRjNZVEVNTUFvR0ExVUVDaE1EU1VKTk1Rd3dDZ1lEVlFRTEV3TlVVa3d4RmpBVUJnTlZCQU1URFZOUFFWQlNaWEYxWlhOMFpYSXdnWjh3RFFZSktvWklodmNOQVFFQkJRQURnWTBBTUlHSkFvR0JBTXkzUGZaMW1QaHJFc0J2WWlPdUlsUFYzVWlzNVl5NmhteG8yWXdZQzJuTkRCUHpLc2xXVWkvUStmSytETmRZNktFSG11RHJjVmNFbWE0OEo5WDFhNWF2Umxrc1FmS3B0S29WbjRlQnlzMmkvd2t3eXpRaERhRmppNzkvTXZuVFJXOEVWeTk5Rk5LdzRQRm5oT29lMXRsRGNOQnVJSC9mSXVHT3o5RWxUVitmQWdNQkFBR2pnZ0VtTUlJQklqQUpCZ05WSFJNRUFqQUFNQXNHQTFVZER3UUVBd0lGNERBc0JnbGdoa2dCaHZoQ0FRMEVIeFlkVDNCbGJsTlRUQ0JIWlc1bGNtRjBaV1FnUTJWeWRHbG1hV05oZEdVd0hRWURWUjBPQkJZRUZJVzNGRDFjWGllNGo0encxZ0FwNGN1T0FaNGxNSUc2QmdOVkhTTUVnYkl3Z2ErQUZMMzVJTlU0K1dSeTA5dmFmOXpPc1A3UXZPOXZvWUdTcElHUE1JR01NUXN3Q1FZRFZRUUdFd0pLVURFUk1BOEdBMVVFQ0JNSVMyRnVZV2RoZDJFeER6QU5CZ05WQkFjVEJsbGhiV0YwYnpFTU1Bb0dBMVVFQ2hNRFNVSk5NUXd3Q2dZRFZRUUxFd05VVWt3eEdUQVhCZ05WQkFNVEVGTlBRVkFnTWk0eElGUmxjM1FnUTBFeElqQWdCZ2txaGtpRzl3MEJDUUVXRTIxaGNuVjVZVzFoUUdwd0xtbGliUzVqYjIyQ0FnRUJNQTBHQ1NxR1NJYjNEUUVCQlFVQUE0R0JBSGt0aGRHRGdDdmRJTDkvdlhVbzc0eHBmT1FkL3JyMW93Qm1NZGIxVFdkT3l6d2JPSEM3bGtVbG5LcmtJN1NvZndTTFNEVVA1NzFpaU1YVXgzdFJkbUFWQ29ETU1GdURYaDlWNzIxMmx1WGNjeDBzMVM1S04wRDN4Vzk3TExOZWdRQzAvYithRkQ4WEt3MlU1WnR3Ym5GVFJnczA5N2RtejA5Um9zREtrTGxNJmx0Oy93c3NlOkJpbmFyeVNlY3VyaXR5VG9rZW4mZ3Q7Jmx0O2RzOlNpZ25hdHVyZSB4bWxuczpkcz0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjJnF1b3Q7Jmd0OyZsdDtkczpTaWduZWRJbmZvJmd0OyZsdDtkczpDYW5vbmljYWxpemF0aW9uTWV0aG9kIEFsZ29yaXRobT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMmcXVvdDsmZ3Q7Jmx0O2VjOkluY2x1c2l2ZU5hbWVzcGFjZXMgUHJlZml4TGlzdD0mcXVvdDt4c2kgeHNkIHdzYSBzb2FwZW52IHNvYXBlbmMgd3NzZSBkcyAmcXVvdDsgeG1sbnM6ZWM9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jJnF1b3Q7LyZndDsmbHQ7L2RzOkNhbm9uaWNhbGl6YXRpb25NZXRob2QmZ3Q7Jmx0O2RzOlNpZ25hdHVyZU1ldGhvZCBBbGdvcml0aG09JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI3JzYS1zaGExJnF1b3Q7LyZndDsmbHQ7ZHM6UmVmZXJlbmNlIFVSST0mcXVvdDsjd3NzZWN1cml0eV9zaWduYXR1cmVfaWRfMTUmcXVvdDsmZ3Q7Jmx0O2RzOlRyYW5zZm9ybXMmZ3Q7Jmx0O2RzOlRyYW5zZm9ybSBBbGdvcml0aG09JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jJnF1b3Q7Jmd0OyZsdDtlYzpJbmNsdXNpdmVOYW1lc3BhY2VzIFByZWZpeExpc3Q9JnF1b3Q7eHNpIHhzZCB3c2Egc29hcGVudiBzb2FwZW5jIHdzdSBwNjE5ICZxdW90OyB4bWxuczplYz0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMmcXVvdDsvJmd0OyZsdDsvZHM6VHJhbnNmb3JtJmd0OyZsdDsvZHM6VHJhbnNmb3JtcyZndDsmbHQ7ZHM6RGlnZXN0TWV0aG9kIEFsZ29yaXRobT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjc2hhMSZxdW90Oy8mZ3Q7Jmx0O2RzOkRpZ2VzdFZhbHVlJmd0O2RITkNpRWNxeFhZU0RyYkJrM2FoQ2F0endLZz0mbHQ7L2RzOkRpZ2VzdFZhbHVlJmd0OyZsdDsvZHM6UmVmZXJlbmNlJmd0OyZsdDsvZHM6U2lnbmVkSW5mbyZndDsmbHQ7ZHM6U2lnbmF0dXJlVmFsdWUmZ3Q7TzZtaVE5bDZhbVduYVdpNVZXeG9nd3k2R0pLTVN1ZG1oczQxNy9xR085eVp2QXRjR3hwQUhJckVPV3pFL010L3BGTUgzbFVLbFJXMTNLdkdsbVJVdU1xTXJka3BFaEQ1dGdDUVpBclQwWFdFYVVaZWsrTW1tZk1oQ25COGFBbEVwVElhUmNXcC8wUm5OZEpYb3preWpib1Q3b3VVU0lKTi9LdG1CaE1XbGtnPSZsdDsvZHM6U2lnbmF0dXJlVmFsdWUmZ3Q7Jmx0O2RzOktleUluZm8mZ3Q7Jmx0O3dzc2U6U2VjdXJpdHlUb2tlblJlZmVyZW5jZSZndDsmbHQ7d3NzZTpSZWZlcmVuY2UgVVJJPSZxdW90OyN4NTA5YnN0XzE2JnF1b3Q7IFZhbHVlVHlwZT0mcXVvdDtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXg1MDktdG9rZW4tcHJvZmlsZS0xLjAjWDUwOSZxdW90Oy8mZ3Q7Jmx0Oy93c3NlOlNlY3VyaXR5VG9rZW5SZWZlcmVuY2UmZ3Q7Jmx0Oy9kczpLZXlJbmZvJmd0OyZsdDsvZHM6U2lnbmF0dXJlJmd0OyZsdDsvd3NzZTpTZWN1cml0eSZndDsmbHQ7d3NhOlRvJmd0O2h0dHA6Ly9sb2NhbGhvc3Q6OTA4Mi9XZWJQcm9qZWN0V2l0aFNpZ25hdHVyZS9zZXJ2aWNlcy9XZWJTZXJ2aWNlJmx0Oy93c2E6VG8mZ3Q7Jmx0O3dzYTpBY3Rpb24mZ3Q7aW5jcmVtZW50Jmx0Oy93c2E6QWN0aW9uJmd0OyZsdDt3c2E6TWVzc2FnZUlEJmd0O3V1aWQ6MkQyQjIxQkMtMDExMC00MDAwLUUwMDAtMDM1QzA5MUE5REQ5Jmx0Oy93c2E6TWVzc2FnZUlEJmd0OyZsdDsvc29hcGVudjpIZWFkZXImZ3Q7Jmx0O3NvYXBlbnY6Qm9keSB3c3U6SWQ9JnF1b3Q7d3NzZWN1cml0eV9zaWduYXR1cmVfaWRfMTUmcXVvdDsgeG1sbnM6d3N1PSZxdW90O2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3Mtd3NzZWN1cml0eS11dGlsaXR5LTEuMC54c2QmcXVvdDsmZ3Q7Jmx0O3A2MTk6aW5jcmVtZW50IHhtbG5zOnA2MTk9JnF1b3Q7aHR0cDovL21haW4mcXVvdDsmZ3Q7Jmx0O3ZhbHVlJmd0OzEmbHQ7L3ZhbHVlJmd0OyZsdDsvcDYxOTppbmNyZW1lbnQmZ3Q7Jmx0Oy9zb2FwZW52OkJvZHkmZ3Q7Jmx0Oy9zb2FwZW52OkVudmVsb3BlJmd0OzwvbWVzc2FnZUNvbnRlbnQ+Ci08c2VuZGVySG9zdEFuZFBvcnQ+bG9jYWxob3N0OjkwODI8L3NlbmRlckhvc3RBbmRQb3J0PgotPHJlY2VpdmVySG9zdEFuZFBvcnQ+bG9jYWxob3N0OjkwODA8L3JlY2VpdmVySG9zdEFuZFBvcnQ+Ci08aHR0cEhlYWRlcnM+UE9TVCAvV2ViUHJvamVjdFdpdGhTaWduYXR1cmUvc2VydmljZXMvV2ViU2VydmljZSBIVFRQLzEuMSYjeGQ7Ci1Ib3N0OiBsb2NhbGhvc3Q6OTA4MCYjeGQ7Ci1BY2NlcHQ6IGFwcGxpY2F0aW9uL3NvYXAreG1sLG11bHRpcGFydC9yZWxhdGVkLHRleHQvKiYjeGQ7Ci1Vc2VyLUFnZW50OiBJQk0gV2ViU2VydmljZXMvMS4wJiN4ZDsKLUNhY2hlLUNvbnRyb2w6IG5vLWNhY2hlJiN4ZDsKLVByYWdtYTogbm8tY2FjaGUmI3hkOwotU09BUEFjdGlvbjogJnF1b3Q7aW5jcmVtZW50JnF1b3Q7JiN4ZDsKLUNvbm5lY3Rpb246IEtlZXAtQWxpdmUmI3hkOwotQ29udGVudC1UeXBlOiB0ZXh0L3htbDsgY2hhcnNldD11dGYtOCYjeGQ7Ci1Db250ZW50LUxlbmd0aDogMzY3MiYjeGQ7Ci1EYXRlOiBUdWUsIDE2IEphbiAyMDA3IDIzOjA4OjI1IEdNVCYjeGQ7Ci0mI3hkOwotPC9odHRwSGVhZGVycz4KLTwvbWVzc2FnZUVudHJ5PgotPG1lc3NhZ2VFbnRyeSB4c2k6dHlwZT0iaHR0cE1lc3NhZ2VFbnRyeSIgSUQ9IjIiIGNvbnZlcnNhdGlvbklEPSIxIiB0eXBlPSJyZXNwb25zZSIgdGltZXN0YW1wPSIyMDA3LTAxLTE2VDE4OjA4OjI2LjEyNloiPgotPG1lc3NhZ2VDb250ZW50PiZsdDtzb2FwZW52OkVudmVsb3BlIHhtbG5zOnNvYXBlbnY9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8mcXVvdDsgeG1sbnM6c29hcGVuYz0mcXVvdDtodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyZxdW90OyB4bWxuczp4c2Q9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEmcXVvdDsgeG1sbnM6eHNpPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlJnF1b3Q7IHhtbG5zOndzYT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDA1LzA4L2FkZHJlc3NpbmcmcXVvdDsmZ3Q7Jmx0O3NvYXBlbnY6SGVhZGVyJmd0OyZsdDt3c3NlOlNlY3VyaXR5IHNvYXBlbnY6bXVzdFVuZGVyc3RhbmQ9JnF1b3Q7MSZxdW90OyB4bWxuczp3c3NlPSZxdW90O2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3Mtd3NzZWN1cml0eS1zZWNleHQtMS4wLnhzZCZxdW90OyZndDsmbHQ7d3NzZTpCaW5hcnlTZWN1cml0eVRva2VuIEVuY29kaW5nVHlwZT0mcXVvdDtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXNvYXAtbWVzc2FnZS1zZWN1cml0eS0xLjAjQmFzZTY0QmluYXJ5JnF1b3Q7IFZhbHVlVHlwZT0mcXVvdDtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXg1MDktdG9rZW4tcHJvZmlsZS0xLjAjWDUwOSZxdW90OyB3c3U6SWQ9JnF1b3Q7eDUwOWJzdF8xOCZxdW90OyB4bWxuczp3c3U9JnF1b3Q7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy13c3NlY3VyaXR5LXV0aWxpdHktMS4wLnhzZCZxdW90OyZndDtNSUlEUURDQ0FxbWdBd0lCQWdJQ0FRVXdEUVlKS29aSWh2Y05BUUVGQlFBd1RqRUxNQWtHQTFVRUJoTUNTbEF4RVRBUEJnTlZCQWdUQ0V0aGJtRm5ZWGRoTVF3d0NnWURWUVFLRXdOSlFrMHhEREFLQmdOVkJBc1RBMVJTVERFUU1BNEdBMVVFQXhNSFNXNTBJRU5CTWpBZUZ3MHdNVEV3TURFeE1EQXdNemxhRncweE1URXdNREV4TURBd016bGFNRk14Q3pBSkJnTlZCQVlUQWtwUU1SRXdEd1lEVlFRSUV3aExZVzVoWjJGM1lURU1NQW9HQTFVRUNoTURTVUpOTVF3d0NnWURWUVFMRXdOVVVrd3hGVEFUQmdOVkJBTVRERk5QUVZCUWNtOTJhV1JsY2pDQm56QU5CZ2txaGtpRzl3MEJBUUVGQUFPQmpRQXdnWWtDZ1lFQXJhYWtOSjFKemtQVXV2UGRYUnZQT09DbDEybkJ3bXF2dDY1ZGsveCtRenh4YXJETndIK2VXUmJMeXlLY3JBeWQwWEdWK1pidmo2VjNPOURTVkNaVUNKdHR3NmJicXFlWWh3QVAzVjhzMjRzSUQ3N3RrM2dPaFVURUdZeHNsalgyb3JMMjZTTHFGSk1ydm52azJGUlMybXJka1pFQlVHOTdtRDRRV2NsbjRkMENBd0VBQWFPQ0FTWXdnZ0VpTUFrR0ExVWRFd1FDTUFBd0N3WURWUjBQQkFRREFnWGdNQ3dHQ1dDR1NBR0crRUlCRFFRZkZoMVBjR1Z1VTFOTUlFZGxibVZ5WVhSbFpDQkRaWEowYVdacFkyRjBaVEFkQmdOVkhRNEVGZ1FVbFhTc3JWUmZaT0xHZEpkakVJd1RidVNUZTRVd2dib0dBMVVkSXdTQnNqQ0JyNEFVdmZrZzFUajVaSExUMjlwLzNNNncvdEM4NzIraGdaS2tnWTh3Z1l3eEN6QUpCZ05WQkFZVEFrcFFNUkV3RHdZRFZRUUlFd2hMWVc1aFoyRjNZVEVQTUEwR0ExVUVCeE1HV1dGdFlYUnZNUXd3Q2dZRFZRUUtFd05KUWsweEREQUtCZ05WQkFzVEExUlNUREVaTUJjR0ExVUVBeE1RVTA5QlVDQXlMakVnVkdWemRDQkRRVEVpTUNBR0NTcUdTSWIzRFFFSkFSWVRiV0Z5ZFhsaGJXRkFhbkF1YVdKdExtTnZiWUlDQVFFd0RRWUpLb1pJaHZjTkFRRUZCUUFEZ1lFQVhFN21FMVJQYjNsWUFZSkZ6QmIzVkFIdmtDV2EvSFF0Q09aZHluaUNIcDNNSjlFYk5UcStRcE9IVjYwWUU4dTArNVNlakN6RlNPSE9weUJnTFBqV296OEpYUW5qVjdWY0FiVGdsdytab09TWXk2NHJmaFJkcjlnaVNzNDdGNEQ2d29Qc0FkMnViZy9ZaE1hWExUU3lHeFBkVjNWcVFzdXR1U2dEVURvcVdDQT0mbHQ7L3dzc2U6QmluYXJ5U2VjdXJpdHlUb2tlbiZndDsmbHQ7ZHM6U2lnbmF0dXJlIHhtbG5zOmRzPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMmcXVvdDsmZ3Q7Jmx0O2RzOlNpZ25lZEluZm8mZ3Q7Jmx0O2RzOkNhbm9uaWNhbGl6YXRpb25NZXRob2QgQWxnb3JpdGhtPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyZxdW90OyZndDsmbHQ7ZWM6SW5jbHVzaXZlTmFtZXNwYWNlcyBQcmVmaXhMaXN0PSZxdW90O3hzaSB4c2Qgd3NhIHNvYXBlbnYgc29hcGVuYyB3c3NlIGRzICZxdW90OyB4bWxuczplYz0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMmcXVvdDsvJmd0OyZsdDsvZHM6Q2Fub25pY2FsaXphdGlvbk1ldGhvZCZndDsmbHQ7ZHM6U2lnbmF0dXJlTWV0aG9kIEFsZ29yaXRobT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjcnNhLXNoYTEmcXVvdDsvJmd0OyZsdDtkczpSZWZlcmVuY2UgVVJJPSZxdW90OyN3c3NlY3VyaXR5X3NpZ25hdHVyZV9pZF8xNyZxdW90OyZndDsmbHQ7ZHM6VHJhbnNmb3JtcyZndDsmbHQ7ZHM6VHJhbnNmb3JtIEFsZ29yaXRobT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMmcXVvdDsmZ3Q7Jmx0O2VjOkluY2x1c2l2ZU5hbWVzcGFjZXMgUHJlZml4TGlzdD0mcXVvdDt4c2kgeHNkIHdzYSBzb2FwZW52IHNvYXBlbmMgd3N1IHA2MTkgJnF1b3Q7IHhtbG5zOmVjPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyZxdW90Oy8mZ3Q7Jmx0Oy9kczpUcmFuc2Zvcm0mZ3Q7Jmx0Oy9kczpUcmFuc2Zvcm1zJmd0OyZsdDtkczpEaWdlc3RNZXRob2QgQWxnb3JpdGhtPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNzaGExJnF1b3Q7LyZndDsmbHQ7ZHM6RGlnZXN0VmFsdWUmZ3Q7dG9IRDI1bmcrTFU0L1RKVm5YU3c0cXFZZk9nPSZsdDsvZHM6RGlnZXN0VmFsdWUmZ3Q7Jmx0Oy9kczpSZWZlcmVuY2UmZ3Q7Jmx0Oy9kczpTaWduZWRJbmZvJmd0OyZsdDtkczpTaWduYXR1cmVWYWx1ZSZndDtrNlYwSjNyVmFJTjV6a3JrbE5ObHpBc2xMZGJJNHBJSWJCWGg0TDhvaDQ3N1VScElXOWsxUXAzY2NhYUdFb0phemVvZ3lxOFlxV0dsaUpEMGY1cWZaejdvQnE2QlJpMkp4QjYzRXoxSXhmWG0wdUJaUk5SR3g5SVZwZEEweTRpVnlGaUFnVVI1ZTdjSlR5L1h1bjd0THFtTjNYckdIMGR2ZHFGVE9LemkvV3M9Jmx0Oy9kczpTaWduYXR1cmVWYWx1ZSZndDsmbHQ7ZHM6S2V5SW5mbyZndDsmbHQ7d3NzZTpTZWN1cml0eVRva2VuUmVmZXJlbmNlJmd0OyZsdDt3c3NlOlJlZmVyZW5jZSBVUkk9JnF1b3Q7I3g1MDlic3RfMTgmcXVvdDsgVmFsdWVUeXBlPSZxdW90O2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3MteDUwOS10b2tlbi1wcm9maWxlLTEuMCNYNTA5JnF1b3Q7LyZndDsmbHQ7L3dzc2U6U2VjdXJpdHlUb2tlblJlZmVyZW5jZSZndDsmbHQ7L2RzOktleUluZm8mZ3Q7Jmx0Oy9kczpTaWduYXR1cmUmZ3Q7Jmx0Oy93c3NlOlNlY3VyaXR5Jmd0OyZsdDt3c2E6VG8mZ3Q7aHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC9hZGRyZXNzaW5nL2Fub255bW91cyZsdDsvd3NhOlRvJmd0OyZsdDt3c2E6QWN0aW9uJmd0O2h0dHA6Ly9tYWluL1dlYlNlcnZpY2UvaW5jcmVtZW50UmVzcG9uc2UmbHQ7L3dzYTpBY3Rpb24mZ3Q7Jmx0O3dzYTpNZXNzYWdlSUQmZ3Q7dXVpZDoyRDJCMjI3QS0wMTEwLTQwMDAtRTAwMC0wMzVDMDkxQTlERDkmbHQ7L3dzYTpNZXNzYWdlSUQmZ3Q7Jmx0O3dzYTpSZWxhdGVzVG8mZ3Q7dXVpZDoyRDJCMjFCQy0wMTEwLTQwMDAtRTAwMC0wMzVDMDkxQTlERDkmbHQ7L3dzYTpSZWxhdGVzVG8mZ3Q7Jmx0Oy9zb2FwZW52OkhlYWRlciZndDsmbHQ7c29hcGVudjpCb2R5IHdzdTpJZD0mcXVvdDt3c3NlY3VyaXR5X3NpZ25hdHVyZV9pZF8xNyZxdW90OyB4bWxuczp3c3U9JnF1b3Q7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy13c3NlY3VyaXR5LXV0aWxpdHktMS4wLnhzZCZxdW90OyZndDsmbHQ7cDYxOTppbmNyZW1lbnRSZXNwb25zZSB4bWxuczpwNjE5PSZxdW90O2h0dHA6Ly9tYWluJnF1b3Q7Jmd0OyZsdDtpbmNyZW1lbnRSZXR1cm4mZ3Q7MiZsdDsvaW5jcmVtZW50UmV0dXJuJmd0OyZsdDsvcDYxOTppbmNyZW1lbnRSZXNwb25zZSZndDsmbHQ7L3NvYXBlbnY6Qm9keSZndDsmbHQ7L3NvYXBlbnY6RW52ZWxvcGUmZ3Q7PC9tZXNzYWdlQ29udGVudD4KLTxzZW5kZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6OTA4MDwvc2VuZGVySG9zdEFuZFBvcnQ+Ci08cmVjZWl2ZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6OTA4MjwvcmVjZWl2ZXJIb3N0QW5kUG9ydD4KLTxodHRwSGVhZGVycz5IVFRQLzEuMSAyMDAgT0smI3hkOwotQ29udGVudC1UeXBlOiB0ZXh0L3htbDsgY2hhcnNldD11dGYtOCYjeGQ7Ci1Db250ZW50LUxhbmd1YWdlOiBlbi1VUyYjeGQ7Ci1Db250ZW50LUxlbmd0aDogMzc5MiYjeGQ7Ci1EYXRlOiBUdWUsIDE2IEphbiAyMDA3IDIzOjA4OjI1IEdNVCYjeGQ7Ci1TZXJ2ZXI6IFdlYlNwaGVyZSBBcHBsaWNhdGlvbiBTZXJ2ZXIvNi4xJiN4ZDsKLSYjeGQ7Ci08L2h0dHBIZWFkZXJzPgotPC9tZXNzYWdlRW50cnk+Ci08L2xvZz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL1NlY3VyZVdTL1NpZ25hdHVyZS90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9TZWN1cmVXUy9TaWduYXR1cmUvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDhiODhhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL1NlY3VyZVdTL1NpZ25hdHVyZS90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iRW5jcnlwdGlvbiI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBtZXNzYWdlIGxvZyBmaWxlIHRoYXQgY29udGFpbnMgYSBtZXNzYWdlIHdpdGggc2lnbmF0dXJlLgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcy8+Ci08L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvU2VjdXJlV1MvU2lnbmF0dXJlQW5kRW5jcnlwdGlvbi9TaWduYXR1cmVBbmRFbmNyeXB0aW9uLndzaW1zZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL1NlY3VyZVdTL1NpZ25hdHVyZUFuZEVuY3J5cHRpb24vU2lnbmF0dXJlQW5kRW5jcnlwdGlvbi53c2ltc2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4ZTYzMTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvU2VjdXJlV1MvU2lnbmF0dXJlQW5kRW5jcnlwdGlvbi9TaWduYXR1cmVBbmRFbmNyeXB0aW9uLndzaW1zZworKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08bG9nIHRpbWVzdGFtcD0iMjAwNy0wMS0xNlQxODoyMDowOS44NzgiCi0gICAgeG1sbnM9Imh0dHA6Ly93d3cud3MtaS5vcmcvdGVzdGluZy8yMDA0LzA3L2xvZy8iCi0gICAgeG1sbnM6d3NpLW1vbkNvbmZpZz0iaHR0cDovL3d3dy53cy1pLm9yZy90ZXN0aW5nLzIwMDQvMDcvbW9uaXRvckNvbmZpZy8iCi0gICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSI+Ci0gIDxtb25pdG9yIHZlcnNpb249IjEuMCIgcmVsZWFzZURhdGU9IjIwMDMtMDMtMjAiPgotICAgIDxpbXBsZW1lbnRlciBuYW1lPSJJQk0iIGxvY2F0aW9uPSIiLz4KLSAgICA8ZW52aXJvbm1lbnQ+Ci0gICAgICA8cnVudGltZSBuYW1lPSJKYXZhKFRNKSAyIFJ1bnRpbWUgRW52aXJvbm1lbnQsIFN0YW5kYXJkIEVkaXRpb24iIHZlcnNpb249InB3aTMyZGV2LTIwMDYxMDAyYSAoU1IzKSIvPgotICAgICAgPG9wZXJhdGluZ1N5c3RlbSBuYW1lPSJXaW5kb3dzIFhQIiB2ZXJzaW9uPSI1LjEgYnVpbGQgMjYwMCBTZXJ2aWNlIFBhY2sgMiIvPgotICAgICAgPHhtbFBhcnNlciBuYW1lPSJBcGFjaGUgWGVyY2VzIiB2ZXJzaW9uPSJYTUw0SiA0LjQuNiIvPgotICAgIDwvZW52aXJvbm1lbnQ+Ci0gICAgPHdzaS1tb25Db25maWc6Y29uZmlndXJhdGlvbj4KLSAgICA8d3NpLW1vbkNvbmZpZzpjb21tZW50PkNvbW1lbnQ8L3dzaS1tb25Db25maWc6Y29tbWVudD4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOmxvZ0ZpbGUgcmVwbGFjZT0idHJ1ZSIgbG9jYXRpb249IlVSTCI+Ci0gICAgICA8d3NpLW1vbkNvbmZpZzphZGRTdHlsZVNoZWV0IGhyZWY9Im51bGwiIHR5cGU9Im51bGwiIC8+Ci0gICAgPC93c2ktbW9uQ29uZmlnOmxvZ0ZpbGU+Ci0gICAgICA8d3NpLW1vbkNvbmZpZzpsb2dEdXJhdGlvbj42MDA8L3dzaS1tb25Db25maWc6bG9nRHVyYXRpb24+Ci0gICAgICA8d3NpLW1vbkNvbmZpZzpjbGVhbnVwVGltZW91dFNlY29uZHM+Mzwvd3NpLW1vbkNvbmZpZzpjbGVhbnVwVGltZW91dFNlY29uZHM+Ci0gICAgICA8d3NpLW1vbkNvbmZpZzptYW5JblRoZU1pZGRsZT4KLSAgICAgIDwvd3NpLW1vbkNvbmZpZzptYW5JblRoZU1pZGRsZT4KLSAgICA8L3dzaS1tb25Db25maWc6Y29uZmlndXJhdGlvbj4KLSAgPC9tb25pdG9yPgotCi08bWVzc2FnZUVudHJ5IHhzaTp0eXBlPSJodHRwTWVzc2FnZUVudHJ5IiBJRD0iMSIgY29udmVyc2F0aW9uSUQ9IjEiIHR5cGU9InJlcXVlc3QiIHRpbWVzdGFtcD0iMjAwNy0wMS0xNlQxODoxOTo1OC4wNjFaIj4KLTxtZXNzYWdlQ29udGVudD4mbHQ7c29hcGVudjpFbnZlbG9wZSB4bWxuczpzb2FwZW52PSZxdW90O2h0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvJnF1b3Q7IHhtbG5zOnNvYXBlbmM9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8mcXVvdDsgeG1sbnM6eHNkPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJnF1b3Q7IHhtbG5zOnhzaT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSZxdW90OyB4bWxuczp3c2E9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC9hZGRyZXNzaW5nJnF1b3Q7Jmd0OyZsdDtzb2FwZW52OkhlYWRlciZndDsmbHQ7d3NzZTpTZWN1cml0eSBzb2FwZW52Om11c3RVbmRlcnN0YW5kPSZxdW90OzEmcXVvdDsgeG1sbnM6d3NzZT0mcXVvdDtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXdzc2VjdXJpdHktc2VjZXh0LTEuMC54c2QmcXVvdDsmZ3Q7Jmx0O3dzc2U6QmluYXJ5U2VjdXJpdHlUb2tlbiBFbmNvZGluZ1R5cGU9JnF1b3Q7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy1zb2FwLW1lc3NhZ2Utc2VjdXJpdHktMS4wI0Jhc2U2NEJpbmFyeSZxdW90OyBWYWx1ZVR5cGU9JnF1b3Q7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy14NTA5LXRva2VuLXByb2ZpbGUtMS4wI1g1MDkmcXVvdDsgd3N1OklkPSZxdW90O3g1MDlic3RfMjAmcXVvdDsgeG1sbnM6d3N1PSZxdW90O2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3Mtd3NzZWN1cml0eS11dGlsaXR5LTEuMC54c2QmcXVvdDsmZ3Q7TUlJRFFUQ0NBcXFnQXdJQkFnSUNBUVF3RFFZSktvWklodmNOQVFFRkJRQXdUakVMTUFrR0ExVUVCaE1DU2xBeEVUQVBCZ05WQkFnVENFdGhibUZuWVhkaE1Rd3dDZ1lEVlFRS0V3TkpRazB4RERBS0JnTlZCQXNUQTFSU1RERVFNQTRHQTFVRUF4TUhTVzUwSUVOQk1qQWVGdzB3TVRFd01ERXdPVFUwTURaYUZ3MHhNVEV3TURFd09UVTBNRFphTUZReEN6QUpCZ05WQkFZVEFrcFFNUkV3RHdZRFZRUUlFd2hMWVc1aFoyRjNZVEVNTUFvR0ExVUVDaE1EU1VKTk1Rd3dDZ1lEVlFRTEV3TlVVa3d4RmpBVUJnTlZCQU1URFZOUFFWQlNaWEYxWlhOMFpYSXdnWjh3RFFZSktvWklodmNOQVFFQkJRQURnWTBBTUlHSkFvR0JBTXkzUGZaMW1QaHJFc0J2WWlPdUlsUFYzVWlzNVl5NmhteG8yWXdZQzJuTkRCUHpLc2xXVWkvUStmSytETmRZNktFSG11RHJjVmNFbWE0OEo5WDFhNWF2Umxrc1FmS3B0S29WbjRlQnlzMmkvd2t3eXpRaERhRmppNzkvTXZuVFJXOEVWeTk5Rk5LdzRQRm5oT29lMXRsRGNOQnVJSC9mSXVHT3o5RWxUVitmQWdNQkFBR2pnZ0VtTUlJQklqQUpCZ05WSFJNRUFqQUFNQXNHQTFVZER3UUVBd0lGNERBc0JnbGdoa2dCaHZoQ0FRMEVIeFlkVDNCbGJsTlRUQ0JIWlc1bGNtRjBaV1FnUTJWeWRHbG1hV05oZEdVd0hRWURWUjBPQkJZRUZJVzNGRDFjWGllNGo0encxZ0FwNGN1T0FaNGxNSUc2QmdOVkhTTUVnYkl3Z2ErQUZMMzVJTlU0K1dSeTA5dmFmOXpPc1A3UXZPOXZvWUdTcElHUE1JR01NUXN3Q1FZRFZRUUdFd0pLVURFUk1BOEdBMVVFQ0JNSVMyRnVZV2RoZDJFeER6QU5CZ05WQkFjVEJsbGhiV0YwYnpFTU1Bb0dBMVVFQ2hNRFNVSk5NUXd3Q2dZRFZRUUxFd05VVWt3eEdUQVhCZ05WQkFNVEVGTlBRVkFnTWk0eElGUmxjM1FnUTBFeElqQWdCZ2txaGtpRzl3MEJDUUVXRTIxaGNuVjVZVzFoUUdwd0xtbGliUzVqYjIyQ0FnRUJNQTBHQ1NxR1NJYjNEUUVCQlFVQUE0R0JBSGt0aGRHRGdDdmRJTDkvdlhVbzc0eHBmT1FkL3JyMW93Qm1NZGIxVFdkT3l6d2JPSEM3bGtVbG5LcmtJN1NvZndTTFNEVVA1NzFpaU1YVXgzdFJkbUFWQ29ETU1GdURYaDlWNzIxMmx1WGNjeDBzMVM1S04wRDN4Vzk3TExOZWdRQzAvYithRkQ4WEt3MlU1WnR3Ym5GVFJnczA5N2RtejA5Um9zREtrTGxNJmx0Oy93c3NlOkJpbmFyeVNlY3VyaXR5VG9rZW4mZ3Q7Jmx0O0VuY3J5cHRlZEtleSB4bWxucz0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyMmcXVvdDsmZ3Q7Jmx0O0VuY3J5cHRpb25NZXRob2QgQWxnb3JpdGhtPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI3JzYS0xXzUmcXVvdDsvJmd0OyZsdDtkczpLZXlJbmZvIHhtbG5zOmRzPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMmcXVvdDsmZ3Q7Jmx0O3dzc2U6U2VjdXJpdHlUb2tlblJlZmVyZW5jZSZndDsmbHQ7d3NzZTpLZXlJZGVudGlmaWVyIFZhbHVlVHlwZT0mcXVvdDtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXg1MDktdG9rZW4tcHJvZmlsZS0xLjAjWDUwOVN1YmplY3RLZXlJZGVudGlmaWVyJnF1b3Q7Jmd0Oy82MndYT2JFRDd6NmMxeVg3UWt2TjF0aFFkWT0mbHQ7L3dzc2U6S2V5SWRlbnRpZmllciZndDsmbHQ7L3dzc2U6U2VjdXJpdHlUb2tlblJlZmVyZW5jZSZndDsmbHQ7L2RzOktleUluZm8mZ3Q7Jmx0O0NpcGhlckRhdGEmZ3Q7Jmx0O0NpcGhlclZhbHVlJmd0O2d1dUFySWdLMjBaUWtsc05rY2oxWHphQ21TdGcrMHJ4NTl0ZXVEMnBFQVhlUnZLYkNUemtmZ2xSdlg4Q24vRGlUQllOZXhiTmh2T2xqWC9zdWU1VUtKQTVKc21oU0Nqc3NHZnN3SmpZWFpuUmNuY0F3Q1R4Zm90dElxYXdXUUYxNjVCYXo4N3VPUjB5WTdhR2ltT0hpcEU3U05rUjVsbC84QWhtd1Y1Z0dXaz0mbHQ7L0NpcGhlclZhbHVlJmd0OyZsdDsvQ2lwaGVyRGF0YSZndDsmbHQ7UmVmZXJlbmNlTGlzdCZndDsmbHQ7RGF0YVJlZmVyZW5jZSBVUkk9JnF1b3Q7I3dzc2VjdXJpdHlfZW5jcnlwdGlvbl9pZF8yMSZxdW90Oy8mZ3Q7Jmx0Oy9SZWZlcmVuY2VMaXN0Jmd0OyZsdDsvRW5jcnlwdGVkS2V5Jmd0OyZsdDtkczpTaWduYXR1cmUgeG1sbnM6ZHM9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyZxdW90OyZndDsmbHQ7ZHM6U2lnbmVkSW5mbyZndDsmbHQ7ZHM6Q2Fub25pY2FsaXphdGlvbk1ldGhvZCBBbGdvcml0aG09JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jJnF1b3Q7Jmd0OyZsdDtlYzpJbmNsdXNpdmVOYW1lc3BhY2VzIFByZWZpeExpc3Q9JnF1b3Q7eHNpIHhzZCB3c2Egc29hcGVudiBzb2FwZW5jIHdzc2UgZHMgJnF1b3Q7IHhtbG5zOmVjPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyZxdW90Oy8mZ3Q7Jmx0Oy9kczpDYW5vbmljYWxpemF0aW9uTWV0aG9kJmd0OyZsdDtkczpTaWduYXR1cmVNZXRob2QgQWxnb3JpdGhtPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNyc2Etc2hhMSZxdW90Oy8mZ3Q7Jmx0O2RzOlJlZmVyZW5jZSBVUkk9JnF1b3Q7I3dzc2VjdXJpdHlfc2lnbmF0dXJlX2lkXzE5JnF1b3Q7Jmd0OyZsdDtkczpUcmFuc2Zvcm1zJmd0OyZsdDtkczpUcmFuc2Zvcm0gQWxnb3JpdGhtPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyZxdW90OyZndDsmbHQ7ZWM6SW5jbHVzaXZlTmFtZXNwYWNlcyBQcmVmaXhMaXN0PSZxdW90O3hzaSB4c2Qgd3NhIHNvYXBlbnYgc29hcGVuYyB3c3UgcDYxOSAmcXVvdDsgeG1sbnM6ZWM9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jJnF1b3Q7LyZndDsmbHQ7L2RzOlRyYW5zZm9ybSZndDsmbHQ7L2RzOlRyYW5zZm9ybXMmZ3Q7Jmx0O2RzOkRpZ2VzdE1ldGhvZCBBbGdvcml0aG09JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI3NoYTEmcXVvdDsvJmd0OyZsdDtkczpEaWdlc3RWYWx1ZSZndDtPejR6ZzFBUzlkeXBMUmt5bGxZOUlYTnRPQVU9Jmx0Oy9kczpEaWdlc3RWYWx1ZSZndDsmbHQ7L2RzOlJlZmVyZW5jZSZndDsmbHQ7L2RzOlNpZ25lZEluZm8mZ3Q7Jmx0O2RzOlNpZ25hdHVyZVZhbHVlJmd0O0dvUkIyZUNsSGo3a240VnN5QlFZV3ZlTUZseFFGazVhb1hFL1BXRnNCQ1ZtVEd6eVJ3K0lzWm1EeHlNUFAxRXZ0NW16SUlWc2FwdDVmakZYenE1bGtLSkVRcCt0OFR2ZFJXU0lLK1VCL2pYeHVVdGttdCtaU2VLV2pjZWNSdFRadGRHb0x5MEEvMDZ4aitiQVdWNGlHNmZmTHVQMjZZaEc4WXMrcUpCNFpHVT0mbHQ7L2RzOlNpZ25hdHVyZVZhbHVlJmd0OyZsdDtkczpLZXlJbmZvJmd0OyZsdDt3c3NlOlNlY3VyaXR5VG9rZW5SZWZlcmVuY2UmZ3Q7Jmx0O3dzc2U6UmVmZXJlbmNlIFVSST0mcXVvdDsjeDUwOWJzdF8yMCZxdW90OyBWYWx1ZVR5cGU9JnF1b3Q7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy14NTA5LXRva2VuLXByb2ZpbGUtMS4wI1g1MDkmcXVvdDsvJmd0OyZsdDsvd3NzZTpTZWN1cml0eVRva2VuUmVmZXJlbmNlJmd0OyZsdDsvZHM6S2V5SW5mbyZndDsmbHQ7L2RzOlNpZ25hdHVyZSZndDsmbHQ7L3dzc2U6U2VjdXJpdHkmZ3Q7Jmx0O3dzYTpUbyZndDtodHRwOi8vbG9jYWxob3N0OjkwODIvV2ViUHJvamVjdFdpdGhTaWduYXR1cmVBbmRFbmNyeXB0aW9uL3NlcnZpY2VzL1dlYlNlcnZpY2UmbHQ7L3dzYTpUbyZndDsmbHQ7d3NhOkFjdGlvbiZndDtpbmNyZW1lbnQmbHQ7L3dzYTpBY3Rpb24mZ3Q7Jmx0O3dzYTpNZXNzYWdlSUQmZ3Q7dXVpZDoyRDM1QjEwOS0wMTEwLTQwMDAtRTAwMC0wMzVDMDkxQTlERDkmbHQ7L3dzYTpNZXNzYWdlSUQmZ3Q7Jmx0Oy9zb2FwZW52OkhlYWRlciZndDsmbHQ7c29hcGVudjpCb2R5IHdzdTpJZD0mcXVvdDt3c3NlY3VyaXR5X3NpZ25hdHVyZV9pZF8xOSZxdW90OyB4bWxuczp3c3U9JnF1b3Q7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy13c3NlY3VyaXR5LXV0aWxpdHktMS4wLnhzZCZxdW90OyZndDsmbHQ7RW5jcnlwdGVkRGF0YSBJZD0mcXVvdDt3c3NlY3VyaXR5X2VuY3J5cHRpb25faWRfMjEmcXVvdDsgVHlwZT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyNDb250ZW50JnF1b3Q7IHhtbG5zPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jIyZxdW90OyZndDsmbHQ7RW5jcnlwdGlvbk1ldGhvZCBBbGdvcml0aG09JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjdHJpcGxlZGVzLWNiYyZxdW90Oy8mZ3Q7Jmx0O0NpcGhlckRhdGEmZ3Q7Jmx0O0NpcGhlclZhbHVlJmd0O2RkQWt4dHlhdWZMTGMxM2VQZTF0RFNpQ1F6K2g1SEwyUU4wZ1Y2aGM2UjNpM1dxS281Z1FCendVOEpzWldicDl2UTFWTXJRWW1lMlRZSGpzektuY0NaenhJdlNiakxaN25NT3VXRkY3QWQ4cDY3Y1dtL21QSnc9PSZsdDsvQ2lwaGVyVmFsdWUmZ3Q7Jmx0Oy9DaXBoZXJEYXRhJmd0OyZsdDsvRW5jcnlwdGVkRGF0YSZndDsmbHQ7L3NvYXBlbnY6Qm9keSZndDsmbHQ7L3NvYXBlbnY6RW52ZWxvcGUmZ3Q7PC9tZXNzYWdlQ29udGVudD4KLTxzZW5kZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6OTA4Mjwvc2VuZGVySG9zdEFuZFBvcnQ+Ci08cmVjZWl2ZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6OTA4MDwvcmVjZWl2ZXJIb3N0QW5kUG9ydD4KLTxodHRwSGVhZGVycz5QT1NUIC9XZWJQcm9qZWN0V2l0aFNpZ25hdHVyZUFuZEVuY3J5cHRpb24vc2VydmljZXMvV2ViU2VydmljZSBIVFRQLzEuMSYjeGQ7Ci1Ib3N0OiBsb2NhbGhvc3Q6OTA4MCYjeGQ7Ci1BY2NlcHQ6IGFwcGxpY2F0aW9uL3NvYXAreG1sLG11bHRpcGFydC9yZWxhdGVkLHRleHQvKiYjeGQ7Ci1Vc2VyLUFnZW50OiBJQk0gV2ViU2VydmljZXMvMS4wJiN4ZDsKLUNhY2hlLUNvbnRyb2w6IG5vLWNhY2hlJiN4ZDsKLVByYWdtYTogbm8tY2FjaGUmI3hkOwotU09BUEFjdGlvbjogJnF1b3Q7aW5jcmVtZW50JnF1b3Q7JiN4ZDsKLUNvbm5lY3Rpb246IEtlZXAtQWxpdmUmI3hkOwotQ29udGVudC1UeXBlOiB0ZXh0L3htbDsgY2hhcnNldD11dGYtOCYjeGQ7Ci1Db250ZW50LUxlbmd0aDogNDc3OSYjeGQ7Ci1EYXRlOiBUdWUsIDE2IEphbiAyMDA3IDIzOjE5OjU3IEdNVCYjeGQ7Ci0mI3hkOwotPC9odHRwSGVhZGVycz4KLTwvbWVzc2FnZUVudHJ5PgotPG1lc3NhZ2VFbnRyeSB4c2k6dHlwZT0iaHR0cE1lc3NhZ2VFbnRyeSIgSUQ9IjIiIGNvbnZlcnNhdGlvbklEPSIxIiB0eXBlPSJyZXNwb25zZSIgdGltZXN0YW1wPSIyMDA3LTAxLTE2VDE4OjE5OjU4LjI5MVoiPgotPG1lc3NhZ2VDb250ZW50PiZsdDtzb2FwZW52OkVudmVsb3BlIHhtbG5zOnNvYXBlbnY9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8mcXVvdDsgeG1sbnM6c29hcGVuYz0mcXVvdDtodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyZxdW90OyB4bWxuczp4c2Q9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEmcXVvdDsgeG1sbnM6eHNpPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlJnF1b3Q7IHhtbG5zOndzYT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDA1LzA4L2FkZHJlc3NpbmcmcXVvdDsmZ3Q7Jmx0O3NvYXBlbnY6SGVhZGVyJmd0OyZsdDt3c3NlOlNlY3VyaXR5IHNvYXBlbnY6bXVzdFVuZGVyc3RhbmQ9JnF1b3Q7MSZxdW90OyB4bWxuczp3c3NlPSZxdW90O2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3Mtd3NzZWN1cml0eS1zZWNleHQtMS4wLnhzZCZxdW90OyZndDsmbHQ7d3NzZTpCaW5hcnlTZWN1cml0eVRva2VuIEVuY29kaW5nVHlwZT0mcXVvdDtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXNvYXAtbWVzc2FnZS1zZWN1cml0eS0xLjAjQmFzZTY0QmluYXJ5JnF1b3Q7IFZhbHVlVHlwZT0mcXVvdDtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXg1MDktdG9rZW4tcHJvZmlsZS0xLjAjWDUwOSZxdW90OyB3c3U6SWQ9JnF1b3Q7eDUwOWJzdF8yMyZxdW90OyB4bWxuczp3c3U9JnF1b3Q7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy13c3NlY3VyaXR5LXV0aWxpdHktMS4wLnhzZCZxdW90OyZndDtNSUlEUURDQ0FxbWdBd0lCQWdJQ0FRVXdEUVlKS29aSWh2Y05BUUVGQlFBd1RqRUxNQWtHQTFVRUJoTUNTbEF4RVRBUEJnTlZCQWdUQ0V0aGJtRm5ZWGRoTVF3d0NnWURWUVFLRXdOSlFrMHhEREFLQmdOVkJBc1RBMVJTVERFUU1BNEdBMVVFQXhNSFNXNTBJRU5CTWpBZUZ3MHdNVEV3TURFeE1EQXdNemxhRncweE1URXdNREV4TURBd016bGFNRk14Q3pBSkJnTlZCQVlUQWtwUU1SRXdEd1lEVlFRSUV3aExZVzVoWjJGM1lURU1NQW9HQTFVRUNoTURTVUpOTVF3d0NnWURWUVFMRXdOVVVrd3hGVEFUQmdOVkJBTVRERk5QUVZCUWNtOTJhV1JsY2pDQm56QU5CZ2txaGtpRzl3MEJBUUVGQUFPQmpRQXdnWWtDZ1lFQXJhYWtOSjFKemtQVXV2UGRYUnZQT09DbDEybkJ3bXF2dDY1ZGsveCtRenh4YXJETndIK2VXUmJMeXlLY3JBeWQwWEdWK1pidmo2VjNPOURTVkNaVUNKdHR3NmJicXFlWWh3QVAzVjhzMjRzSUQ3N3RrM2dPaFVURUdZeHNsalgyb3JMMjZTTHFGSk1ydm52azJGUlMybXJka1pFQlVHOTdtRDRRV2NsbjRkMENBd0VBQWFPQ0FTWXdnZ0VpTUFrR0ExVWRFd1FDTUFBd0N3WURWUjBQQkFRREFnWGdNQ3dHQ1dDR1NBR0crRUlCRFFRZkZoMVBjR1Z1VTFOTUlFZGxibVZ5WVhSbFpDQkRaWEowYVdacFkyRjBaVEFkQmdOVkhRNEVGZ1FVbFhTc3JWUmZaT0xHZEpkakVJd1RidVNUZTRVd2dib0dBMVVkSXdTQnNqQ0JyNEFVdmZrZzFUajVaSExUMjlwLzNNNncvdEM4NzIraGdaS2tnWTh3Z1l3eEN6QUpCZ05WQkFZVEFrcFFNUkV3RHdZRFZRUUlFd2hMWVc1aFoyRjNZVEVQTUEwR0ExVUVCeE1HV1dGdFlYUnZNUXd3Q2dZRFZRUUtFd05KUWsweEREQUtCZ05WQkFzVEExUlNUREVaTUJjR0ExVUVBeE1RVTA5QlVDQXlMakVnVkdWemRDQkRRVEVpTUNBR0NTcUdTSWIzRFFFSkFSWVRiV0Z5ZFhsaGJXRkFhbkF1YVdKdExtTnZiWUlDQVFFd0RRWUpLb1pJaHZjTkFRRUZCUUFEZ1lFQVhFN21FMVJQYjNsWUFZSkZ6QmIzVkFIdmtDV2EvSFF0Q09aZHluaUNIcDNNSjlFYk5UcStRcE9IVjYwWUU4dTArNVNlakN6RlNPSE9weUJnTFBqV296OEpYUW5qVjdWY0FiVGdsdytab09TWXk2NHJmaFJkcjlnaVNzNDdGNEQ2d29Qc0FkMnViZy9ZaE1hWExUU3lHeFBkVjNWcVFzdXR1U2dEVURvcVdDQT0mbHQ7L3dzc2U6QmluYXJ5U2VjdXJpdHlUb2tlbiZndDsmbHQ7RW5jcnlwdGVkS2V5IHhtbG5zPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jIyZxdW90OyZndDsmbHQ7RW5jcnlwdGlvbk1ldGhvZCBBbGdvcml0aG09JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjcnNhLTFfNSZxdW90Oy8mZ3Q7Jmx0O2RzOktleUluZm8geG1sbnM6ZHM9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyZxdW90OyZndDsmbHQ7d3NzZTpTZWN1cml0eVRva2VuUmVmZXJlbmNlJmd0OyZsdDt3c3NlOktleUlkZW50aWZpZXIgVmFsdWVUeXBlPSZxdW90O2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3MteDUwOS10b2tlbi1wcm9maWxlLTEuMCNYNTA5U3ViamVjdEtleUlkZW50aWZpZXImcXVvdDsmZ3Q7dHlCVTNxUXVmWVo3MXRKQVU3Z1ZJcWdST3VRPSZsdDsvd3NzZTpLZXlJZGVudGlmaWVyJmd0OyZsdDsvd3NzZTpTZWN1cml0eVRva2VuUmVmZXJlbmNlJmd0OyZsdDsvZHM6S2V5SW5mbyZndDsmbHQ7Q2lwaGVyRGF0YSZndDsmbHQ7Q2lwaGVyVmFsdWUmZ3Q7WTFuSi9jU0h6b1FSbkZROHh5MG9Zd01BWmUrVzJqYmttV0ZNcnFHUy85OEZReHBvbnVLOVRLVlFSYjdOVTFiTXdTb05ZTW1wTmpibjNPRm13UWdWWHhzeGdGdUpIU3c3VVlYZjJjU1djZHE5QUxYTVI3TzRNT0szMktPVjM4R2dtUTRGUkdod2pwWFRwUGptUkovT0s1ZktvTmJSdHdIMmo5ZWlhcmtZd01VPSZsdDsvQ2lwaGVyVmFsdWUmZ3Q7Jmx0Oy9DaXBoZXJEYXRhJmd0OyZsdDtSZWZlcmVuY2VMaXN0Jmd0OyZsdDtEYXRhUmVmZXJlbmNlIFVSST0mcXVvdDsjd3NzZWN1cml0eV9lbmNyeXB0aW9uX2lkXzI0JnF1b3Q7LyZndDsmbHQ7L1JlZmVyZW5jZUxpc3QmZ3Q7Jmx0Oy9FbmNyeXB0ZWRLZXkmZ3Q7Jmx0O2RzOlNpZ25hdHVyZSB4bWxuczpkcz0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjJnF1b3Q7Jmd0OyZsdDtkczpTaWduZWRJbmZvJmd0OyZsdDtkczpDYW5vbmljYWxpemF0aW9uTWV0aG9kIEFsZ29yaXRobT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMmcXVvdDsmZ3Q7Jmx0O2VjOkluY2x1c2l2ZU5hbWVzcGFjZXMgUHJlZml4TGlzdD0mcXVvdDt4c2kgeHNkIHdzYSBzb2FwZW52IHNvYXBlbmMgd3NzZSBkcyAmcXVvdDsgeG1sbnM6ZWM9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jJnF1b3Q7LyZndDsmbHQ7L2RzOkNhbm9uaWNhbGl6YXRpb25NZXRob2QmZ3Q7Jmx0O2RzOlNpZ25hdHVyZU1ldGhvZCBBbGdvcml0aG09JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI3JzYS1zaGExJnF1b3Q7LyZndDsmbHQ7ZHM6UmVmZXJlbmNlIFVSST0mcXVvdDsjd3NzZWN1cml0eV9zaWduYXR1cmVfaWRfMjImcXVvdDsmZ3Q7Jmx0O2RzOlRyYW5zZm9ybXMmZ3Q7Jmx0O2RzOlRyYW5zZm9ybSBBbGdvcml0aG09JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jJnF1b3Q7Jmd0OyZsdDtlYzpJbmNsdXNpdmVOYW1lc3BhY2VzIFByZWZpeExpc3Q9JnF1b3Q7eHNpIHhzZCB3c2Egc29hcGVudiBzb2FwZW5jIHdzdSBwNjE5ICZxdW90OyB4bWxuczplYz0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMmcXVvdDsvJmd0OyZsdDsvZHM6VHJhbnNmb3JtJmd0OyZsdDsvZHM6VHJhbnNmb3JtcyZndDsmbHQ7ZHM6RGlnZXN0TWV0aG9kIEFsZ29yaXRobT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjc2hhMSZxdW90Oy8mZ3Q7Jmx0O2RzOkRpZ2VzdFZhbHVlJmd0O1NydlZ3bEtVdzdoOWd3UVZnWnR3ekhCZGUzWT0mbHQ7L2RzOkRpZ2VzdFZhbHVlJmd0OyZsdDsvZHM6UmVmZXJlbmNlJmd0OyZsdDsvZHM6U2lnbmVkSW5mbyZndDsmbHQ7ZHM6U2lnbmF0dXJlVmFsdWUmZ3Q7clJ6V3NLRGgrRkR5Rzd4b3llZDdnVUJYYWlyV0cvbk5kdkxFUjR3NS9ZZllRQWNMRlZHTU5jMjRmbDFJc1Z6RXBaZkVyWmx1NGt3WnlIanB0R0VEVlI0Tmg0Y3IrWk9KWFZtcFZPdHhPdmJKTmw0cGpMVTEvTjN3bFF5WUlHMHFCckVtRklMczNSTFdrMStYZUUyTmxLVldBbEpDREdZbU5kRXJyclpoMGtFPSZsdDsvZHM6U2lnbmF0dXJlVmFsdWUmZ3Q7Jmx0O2RzOktleUluZm8mZ3Q7Jmx0O3dzc2U6U2VjdXJpdHlUb2tlblJlZmVyZW5jZSZndDsmbHQ7d3NzZTpSZWZlcmVuY2UgVVJJPSZxdW90OyN4NTA5YnN0XzIzJnF1b3Q7IFZhbHVlVHlwZT0mcXVvdDtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXg1MDktdG9rZW4tcHJvZmlsZS0xLjAjWDUwOSZxdW90Oy8mZ3Q7Jmx0Oy93c3NlOlNlY3VyaXR5VG9rZW5SZWZlcmVuY2UmZ3Q7Jmx0Oy9kczpLZXlJbmZvJmd0OyZsdDsvZHM6U2lnbmF0dXJlJmd0OyZsdDsvd3NzZTpTZWN1cml0eSZndDsmbHQ7d3NhOlRvJmd0O2h0dHA6Ly93d3cudzMub3JnLzIwMDUvMDgvYWRkcmVzc2luZy9hbm9ueW1vdXMmbHQ7L3dzYTpUbyZndDsmbHQ7d3NhOkFjdGlvbiZndDtodHRwOi8vbWFpbi9XZWJTZXJ2aWNlL2luY3JlbWVudFJlc3BvbnNlJmx0Oy93c2E6QWN0aW9uJmd0OyZsdDt3c2E6TWVzc2FnZUlEJmd0O3V1aWQ6MkQzNUIyM0YtMDExMC00MDAwLUUwMDAtMDM1QzA5MUE5REQ5Jmx0Oy93c2E6TWVzc2FnZUlEJmd0OyZsdDt3c2E6UmVsYXRlc1RvJmd0O3V1aWQ6MkQzNUIxMDktMDExMC00MDAwLUUwMDAtMDM1QzA5MUE5REQ5Jmx0Oy93c2E6UmVsYXRlc1RvJmd0OyZsdDsvc29hcGVudjpIZWFkZXImZ3Q7Jmx0O3NvYXBlbnY6Qm9keSB3c3U6SWQ9JnF1b3Q7d3NzZWN1cml0eV9zaWduYXR1cmVfaWRfMjImcXVvdDsgeG1sbnM6d3N1PSZxdW90O2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3Mtd3NzZWN1cml0eS11dGlsaXR5LTEuMC54c2QmcXVvdDsmZ3Q7Jmx0O0VuY3J5cHRlZERhdGEgSWQ9JnF1b3Q7d3NzZWN1cml0eV9lbmNyeXB0aW9uX2lkXzI0JnF1b3Q7IFR5cGU9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjQ29udGVudCZxdW90OyB4bWxucz0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyMmcXVvdDsmZ3Q7Jmx0O0VuY3J5cHRpb25NZXRob2QgQWxnb3JpdGhtPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI3RyaXBsZWRlcy1jYmMmcXVvdDsvJmd0OyZsdDtDaXBoZXJEYXRhJmd0OyZsdDtDaXBoZXJWYWx1ZSZndDs3WWVFSTlDTXRqMERqcEZMeXBqQk1weFJBZ2Rtbm5xM2Q4MzIwa0J2TWhyUXViL0FIeVB3NmsxV2FqYjhJUTVuR0JmTklyQzRtMEZlaHRaWFVFU1h5alBmYlNHRjdzY09qcjF3eHpONFZBUnovdFdudVhTeVpReDZMbUo3S29wTWVxdnltZFAwM2hpaHNpRVpGSzhTTEJJYUdjbWxtQUhpJmx0Oy9DaXBoZXJWYWx1ZSZndDsmbHQ7L0NpcGhlckRhdGEmZ3Q7Jmx0Oy9FbmNyeXB0ZWREYXRhJmd0OyZsdDsvc29hcGVudjpCb2R5Jmd0OyZsdDsvc29hcGVudjpFbnZlbG9wZSZndDs8L21lc3NhZ2VDb250ZW50PgotPHNlbmRlckhvc3RBbmRQb3J0PmxvY2FsaG9zdDo5MDgwPC9zZW5kZXJIb3N0QW5kUG9ydD4KLTxyZWNlaXZlckhvc3RBbmRQb3J0PmxvY2FsaG9zdDo5MDgyPC9yZWNlaXZlckhvc3RBbmRQb3J0PgotPGh0dHBIZWFkZXJzPkhUVFAvMS4xIDIwMCBPSyYjeGQ7Ci1Db250ZW50LVR5cGU6IHRleHQveG1sOyBjaGFyc2V0PXV0Zi04JiN4ZDsKLUNvbnRlbnQtTGFuZ3VhZ2U6IGVuLVVTJiN4ZDsKLUNvbnRlbnQtTGVuZ3RoOiA0ODkwJiN4ZDsKLURhdGU6IFR1ZSwgMTYgSmFuIDIwMDcgMjM6MTk6NTcgR01UJiN4ZDsKLVNlcnZlcjogV2ViU3BoZXJlIEFwcGxpY2F0aW9uIFNlcnZlci82LjEmI3hkOwotJiN4ZDsKLTwvaHR0cEhlYWRlcnM+Ci08L21lc3NhZ2VFbnRyeT4KLTwvbG9nPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvU2VjdXJlV1MvU2lnbmF0dXJlQW5kRW5jcnlwdGlvbi90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9TZWN1cmVXUy9TaWduYXR1cmVBbmRFbmNyeXB0aW9uL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQ1MGNlZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9TZWN1cmVXUy9TaWduYXR1cmVBbmRFbmNyeXB0aW9uL3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSJFbmNyeXB0aW9uIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG1lc3NhZ2UgbG9nIGZpbGUgdGhhdCBjb250YWlucyBhIG1lc3NhZ2Ugd2l0aCBzaWduYXR1cmUgYW5kIGVuY3J5cHRpb24uCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzLz4KLTwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9icC8xMzA5LTEvMTMwOS0xLndzaW1zZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL2JwLzEzMDktMS8xMzA5LTEud3NpbXNnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTkzNjAzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL2JwLzEzMDktMS8xMzA5LTEud3NpbXNnCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxsb2cgdGltZXN0YW1wPSIyMDA2LTA0LTEzVDE4OjUyOjMyLjQ4OCIKLSAgICB4bWxucz0iaHR0cDovL3d3dy53cy1pLm9yZy90ZXN0aW5nLzIwMDQvMDcvbG9nLyIKLSAgICB4bWxuczp3c2ktbW9uQ29uZmlnPSJodHRwOi8vd3d3LndzLWkub3JnL3Rlc3RpbmcvMjAwNC8wNy9tb25pdG9yQ29uZmlnLyIKLSAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIj4KLSAgPG1vbml0b3IgdmVyc2lvbj0iMS4wIiByZWxlYXNlRGF0ZT0iMjAwMy0wMy0yMCI+Ci0gICAgPGltcGxlbWVudGVyIG5hbWU9IklCTSIgbG9jYXRpb249IiIvPgotICAgIDxlbnZpcm9ubWVudD4KLSAgICAgIDxydW50aW1lIG5hbWU9IkphdmEoVE0pIDIgUnVudGltZSBFbnZpcm9ubWVudCwgU3RhbmRhcmQgRWRpdGlvbiIgdmVyc2lvbj0iMS40LjIiLz4KLSAgICAgIDxvcGVyYXRpbmdTeXN0ZW0gbmFtZT0iTGludXgiIHZlcnNpb249IjIuNi4xNS4xIi8+Ci0gICAgICA8eG1sUGFyc2VyIG5hbWU9IkFwYWNoZSBYZXJjZXMiIHZlcnNpb249IlhNTDRKIDQuMy42Ii8+Ci0gICAgPC9lbnZpcm9ubWVudD4KLSAgICA8d3NpLW1vbkNvbmZpZzpjb25maWd1cmF0aW9uPgotICAgIDx3c2ktbW9uQ29uZmlnOmNvbW1lbnQ+Q29tbWVudDwvd3NpLW1vbkNvbmZpZzpjb21tZW50PgotICAgICAgPHdzaS1tb25Db25maWc6bG9nRmlsZSByZXBsYWNlPSJ0cnVlIiBsb2NhdGlvbj0iVVJMIj4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOmFkZFN0eWxlU2hlZXQgaHJlZj0ibnVsbCIgdHlwZT0ibnVsbCIgLz4KLSAgICA8L3dzaS1tb25Db25maWc6bG9nRmlsZT4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOmxvZ0R1cmF0aW9uPjYwMDwvd3NpLW1vbkNvbmZpZzpsb2dEdXJhdGlvbj4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOmNsZWFudXBUaW1lb3V0U2Vjb25kcz4zPC93c2ktbW9uQ29uZmlnOmNsZWFudXBUaW1lb3V0U2Vjb25kcz4KLSAgICAgIDx3c2ktbW9uQ29uZmlnOm1hbkluVGhlTWlkZGxlPgotICAgICAgPC93c2ktbW9uQ29uZmlnOm1hbkluVGhlTWlkZGxlPgotICAgIDwvd3NpLW1vbkNvbmZpZzpjb25maWd1cmF0aW9uPgotICA8L21vbml0b3I+Ci0KLTxtZXNzYWdlRW50cnkgeHNpOnR5cGU9Imh0dHBNZXNzYWdlRW50cnkiIElEPSIxIiBjb252ZXJzYXRpb25JRD0iMSIgdHlwZT0icmVxdWVzdCIgdGltZXN0YW1wPSIyMDA2LTA0LTEzVDE4OjUxOjMwLjE5M1oiPgotPG1lc3NhZ2VDb250ZW50PiZsdDs/eG1sIHZlcnNpb249JnF1b3Q7MS4wJnF1b3Q7IGVuY29kaW5nPSZxdW90O1VURi04JnF1b3Q7PyZndDsmbHQ7c29hcGVudjpFbnZlbG9wZSB4bWxuczpzb2FwZW52PSZxdW90O2h0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvJnF1b3Q7IHhtbG5zOnhzZD0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSZxdW90OyB4bWxuczp4c2k9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UmcXVvdDsmZ3Q7Jmx0O3NvYXBlbnY6Qm9keSZndDsmbHQ7Y2Vsc2l1c1RvRmFyZW5oZWl0IHhtbG5zPSZxdW90O2h0dHA6Ly93dHAmcXVvdDsmZ3Q7Jmx0O2NlbHNpdXMmZ3Q7MzcuMCZsdDsvY2Vsc2l1cyZndDsmbHQ7L2NlbHNpdXNUb0ZhcmVuaGVpdCZndDsmbHQ7L3NvYXBlbnY6Qm9keSZndDsmbHQ7L3NvYXBlbnY6RW52ZWxvcGUmZ3Q7PC9tZXNzYWdlQ29udGVudD4KLTxzZW5kZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6ODE4NTwvc2VuZGVySG9zdEFuZFBvcnQ+Ci08cmVjZWl2ZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6ODA4MDwvcmVjZWl2ZXJIb3N0QW5kUG9ydD4KLTxodHRwSGVhZGVycz5QT1NUIC9Db252ZXJ0ZXJQcm9qL3NlcnZpY2VzL0NvbnZlcnRlciBIVFRQLzEuMCYjeGQ7Ci1Db250ZW50LVR5cGU6IHRleHQveG1sOyBjaGFyc2V0PXV0Zi04JiN4ZDsKLUFjY2VwdDogYXBwbGljYXRpb24vc29hcCt4bWwsIGFwcGxpY2F0aW9uL2RpbWUsIG11bHRpcGFydC9yZWxhdGVkLCB0ZXh0LyomI3hkOwotVXNlci1BZ2VudDogQXhpcy8xLjIuMSYjeGQ7Ci1Ib3N0OiBsb2NhbGhvc3Q6ODA4MCYjeGQ7Ci1DYWNoZS1Db250cm9sOiBuby1jYWNoZSYjeGQ7Ci1QcmFnbWE6IG5vLWNhY2hlJiN4ZDsKLVNPQVBBY3Rpb246ICZxdW90OyZxdW90OyYjeGQ7Ci1Db250ZW50LUxlbmd0aDogMzQ0JiN4ZDsKLSYjeGQ7Ci08L2h0dHBIZWFkZXJzPgotPC9tZXNzYWdlRW50cnk+Ci08bWVzc2FnZUVudHJ5IHhzaTp0eXBlPSJodHRwTWVzc2FnZUVudHJ5IiBJRD0iMiIgY29udmVyc2F0aW9uSUQ9IjEiIHR5cGU9InJlc3BvbnNlIiB0aW1lc3RhbXA9IjIwMDYtMDQtMTNUMTg6NTE6MzAuOTYwWiI+Ci08bWVzc2FnZUNvbnRlbnQ+Jmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7dXRmLTgmcXVvdDs/Jmd0OyZsdDtzb2FwZW52OkVudmVsb3BlIHhtbG5zOnNvYXBlbnY9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8mcXVvdDsgeG1sbnM6eHNkPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJnF1b3Q7IHhtbG5zOnhzaT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSZxdW90OyZndDsmbHQ7c29hcGVudjpCb2R5Jmd0OyZsdDtjZWxzaXVzVG9GYXJlbmhlaXRSZXNwb25zZSB4bWxucz0mcXVvdDtodHRwOi8vd3RwJnF1b3Q7Jmd0OyZsdDtjZWxzaXVzVG9GYXJlbmhlaXRSZXR1cm4mZ3Q7OTguNiZsdDsvY2Vsc2l1c1RvRmFyZW5oZWl0UmV0dXJuJmd0OyZsdDsvY2Vsc2l1c1RvRmFyZW5oZWl0UmVzcG9uc2UmZ3Q7Jmx0Oy9zb2FwZW52OkJvZHkmZ3Q7Jmx0Oy9zb2FwZW52OkVudmVsb3BlJmd0OzwvbWVzc2FnZUNvbnRlbnQ+Ci08c2VuZGVySG9zdEFuZFBvcnQ+bG9jYWxob3N0OjgwODA8L3NlbmRlckhvc3RBbmRQb3J0PgotPHJlY2VpdmVySG9zdEFuZFBvcnQ+bG9jYWxob3N0OjgxODU8L3JlY2VpdmVySG9zdEFuZFBvcnQ+Ci08aHR0cEhlYWRlcnM+SFRUUC8xLjEgMjAwIE9LJiN4ZDsKLUNvbnRlbnQtVHlwZTogdGV4dC94bWw7Y2hhcnNldD11dGYtOCYjeGQ7Ci1EYXRlOiBUaHUsIDEzIEFwciAyMDA2IDE4OjUxOjMwIEdNVCYjeGQ7Ci1TZXJ2ZXI6IEFwYWNoZS1Db3lvdGUvMS4xJiN4ZDsKLUNvbm5lY3Rpb246IGNsb3NlJiN4ZDsKLSYjeGQ7Ci08L2h0dHBIZWFkZXJzPgotPC9tZXNzYWdlRW50cnk+Ci08L2xvZz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL2JwLzEzMDktMS90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9icC8xMzA5LTEvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZWY2MTVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL2JwLzEzMDktMS90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMTMwOS0xIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG1lc3NhZ2UgbG9nIGZpbGUgdGhhdCBpcyBjb25mb3JtYW50IHRvIHJlcXVpcmVtZW50Ci0gICAgMTAxMS4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXMvPgotPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL2JwLzEzMDktMi8xMzA5LTIud3NpbXNnIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvYnAvMTMwOS0yLzEzMDktMi53c2ltc2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmODIwYmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvYnAvMTMwOS0yLzEzMDktMi53c2ltc2cKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGxvZyB0aW1lc3RhbXA9IjIwMDYtMDQtMTNUMTg6NTI6MzIuNDg4IgotICAgIHhtbG5zPSJodHRwOi8vd3d3LndzLWkub3JnL3Rlc3RpbmcvMjAwNC8wNy9sb2cvIgotICAgIHhtbG5zOndzaS1tb25Db25maWc9Imh0dHA6Ly93d3cud3MtaS5vcmcvdGVzdGluZy8yMDA0LzA3L21vbml0b3JDb25maWcvIgotICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiPgotICA8bW9uaXRvciB2ZXJzaW9uPSIxLjAiIHJlbGVhc2VEYXRlPSIyMDAzLTAzLTIwIj4KLSAgICA8aW1wbGVtZW50ZXIgbmFtZT0iSUJNIiBsb2NhdGlvbj0iIi8+Ci0gICAgPGVudmlyb25tZW50PgotICAgICAgPHJ1bnRpbWUgbmFtZT0iSmF2YShUTSkgMiBSdW50aW1lIEVudmlyb25tZW50LCBTdGFuZGFyZCBFZGl0aW9uIiB2ZXJzaW9uPSIxLjQuMiIvPgotICAgICAgPG9wZXJhdGluZ1N5c3RlbSBuYW1lPSJMaW51eCIgdmVyc2lvbj0iMi42LjE1LjEiLz4KLSAgICAgIDx4bWxQYXJzZXIgbmFtZT0iQXBhY2hlIFhlcmNlcyIgdmVyc2lvbj0iWE1MNEogNC4zLjYiLz4KLSAgICA8L2Vudmlyb25tZW50PgotICAgIDx3c2ktbW9uQ29uZmlnOmNvbmZpZ3VyYXRpb24+Ci0gICAgPHdzaS1tb25Db25maWc6Y29tbWVudD5Db21tZW50PC93c2ktbW9uQ29uZmlnOmNvbW1lbnQ+Ci0gICAgICA8d3NpLW1vbkNvbmZpZzpsb2dGaWxlIHJlcGxhY2U9InRydWUiIGxvY2F0aW9uPSJVUkwiPgotICAgICAgPHdzaS1tb25Db25maWc6YWRkU3R5bGVTaGVldCBocmVmPSJudWxsIiB0eXBlPSJudWxsIiAvPgotICAgIDwvd3NpLW1vbkNvbmZpZzpsb2dGaWxlPgotICAgICAgPHdzaS1tb25Db25maWc6bG9nRHVyYXRpb24+NjAwPC93c2ktbW9uQ29uZmlnOmxvZ0R1cmF0aW9uPgotICAgICAgPHdzaS1tb25Db25maWc6Y2xlYW51cFRpbWVvdXRTZWNvbmRzPjM8L3dzaS1tb25Db25maWc6Y2xlYW51cFRpbWVvdXRTZWNvbmRzPgotICAgICAgPHdzaS1tb25Db25maWc6bWFuSW5UaGVNaWRkbGU+Ci0gICAgICA8L3dzaS1tb25Db25maWc6bWFuSW5UaGVNaWRkbGU+Ci0gICAgPC93c2ktbW9uQ29uZmlnOmNvbmZpZ3VyYXRpb24+Ci0gIDwvbW9uaXRvcj4KLQotPG1lc3NhZ2VFbnRyeSB4c2k6dHlwZT0iaHR0cE1lc3NhZ2VFbnRyeSIgSUQ9IjEiIGNvbnZlcnNhdGlvbklEPSIxIiB0eXBlPSJyZXF1ZXN0IiB0aW1lc3RhbXA9IjIwMDYtMDQtMTNUMTg6NTE6MzAuMTkzWiI+Ci08bWVzc2FnZUNvbnRlbnQ+Jmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/Jmd0OyZsdDtzb2FwZW52OkVudmVsb3BlIHhtbG5zOnNvYXBlbnY9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8mcXVvdDsgeG1sbnM6eHNkPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJnF1b3Q7IHhtbG5zOnhzaT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSZxdW90OyZndDsmbHQ7c29hcGVudjpCb2R5Jmd0OyZsdDtjZWxzaXVzVG9GYXJlbmhlaXQgeG1sbnM9JnF1b3Q7aHR0cDovL3d0cCZxdW90OyZndDsmbHQ7Y2Vsc2l1cyZndDszNy4wJmx0Oy9jZWxzaXVzJmd0OyZsdDsvY2Vsc2l1c1RvRmFyZW5oZWl0Jmd0OyZsdDsvc29hcGVudjpCb2R5Jmd0OyZsdDtzb2FwZW52OmJhZENoaWxkLyZndDsmbHQ7L3NvYXBlbnY6RW52ZWxvcGUmZ3Q7PC9tZXNzYWdlQ29udGVudD4KLTxzZW5kZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6ODE4NTwvc2VuZGVySG9zdEFuZFBvcnQ+Ci08cmVjZWl2ZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6ODA4MDwvcmVjZWl2ZXJIb3N0QW5kUG9ydD4KLTxodHRwSGVhZGVycz5QT1NUIC9Db252ZXJ0ZXJQcm9qL3NlcnZpY2VzL0NvbnZlcnRlciBIVFRQLzEuMCYjeGQ7Ci1Db250ZW50LVR5cGU6IHRleHQveG1sOyBjaGFyc2V0PXV0Zi04JiN4ZDsKLUFjY2VwdDogYXBwbGljYXRpb24vc29hcCt4bWwsIGFwcGxpY2F0aW9uL2RpbWUsIG11bHRpcGFydC9yZWxhdGVkLCB0ZXh0LyomI3hkOwotVXNlci1BZ2VudDogQXhpcy8xLjIuMSYjeGQ7Ci1Ib3N0OiBsb2NhbGhvc3Q6ODA4MCYjeGQ7Ci1DYWNoZS1Db250cm9sOiBuby1jYWNoZSYjeGQ7Ci1QcmFnbWE6IG5vLWNhY2hlJiN4ZDsKLVNPQVBBY3Rpb246ICZxdW90OyZxdW90OyYjeGQ7Ci1Db250ZW50LUxlbmd0aDogMzQ0JiN4ZDsKLSYjeGQ7Ci08L2h0dHBIZWFkZXJzPgotPC9tZXNzYWdlRW50cnk+Ci08bWVzc2FnZUVudHJ5IHhzaTp0eXBlPSJodHRwTWVzc2FnZUVudHJ5IiBJRD0iMiIgY29udmVyc2F0aW9uSUQ9IjEiIHR5cGU9InJlc3BvbnNlIiB0aW1lc3RhbXA9IjIwMDYtMDQtMTNUMTg6NTE6MzAuOTYwWiI+Ci08bWVzc2FnZUNvbnRlbnQ+Jmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7dXRmLTgmcXVvdDs/Jmd0OyZsdDtzb2FwZW52OkVudmVsb3BlIHhtbG5zOnNvYXBlbnY9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8mcXVvdDsgeG1sbnM6eHNkPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJnF1b3Q7IHhtbG5zOnhzaT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSZxdW90OyZndDsmbHQ7c29hcGVudjpCb2R5Jmd0OyZsdDtjZWxzaXVzVG9GYXJlbmhlaXRSZXNwb25zZSB4bWxucz0mcXVvdDtodHRwOi8vd3RwJnF1b3Q7Jmd0OyZsdDtjZWxzaXVzVG9GYXJlbmhlaXRSZXR1cm4mZ3Q7OTguNiZsdDsvY2Vsc2l1c1RvRmFyZW5oZWl0UmV0dXJuJmd0OyZsdDsvY2Vsc2l1c1RvRmFyZW5oZWl0UmVzcG9uc2UmZ3Q7Jmx0Oy9zb2FwZW52OkJvZHkmZ3Q7Jmx0Oy9zb2FwZW52OkVudmVsb3BlJmd0OzwvbWVzc2FnZUNvbnRlbnQ+Ci08c2VuZGVySG9zdEFuZFBvcnQ+bG9jYWxob3N0OjgwODA8L3NlbmRlckhvc3RBbmRQb3J0PgotPHJlY2VpdmVySG9zdEFuZFBvcnQ+bG9jYWxob3N0OjgxODU8L3JlY2VpdmVySG9zdEFuZFBvcnQ+Ci08aHR0cEhlYWRlcnM+SFRUUC8xLjEgMjAwIE9LJiN4ZDsKLUNvbnRlbnQtVHlwZTogdGV4dC94bWw7Y2hhcnNldD11dGYtOCYjeGQ7Ci1EYXRlOiBUaHUsIDEzIEFwciAyMDA2IDE4OjUxOjMwIEdNVCYjeGQ7Ci1TZXJ2ZXI6IEFwYWNoZS1Db3lvdGUvMS4xJiN4ZDsKLUNvbm5lY3Rpb246IGNsb3NlJiN4ZDsKLSYjeGQ7Ci08L2h0dHBIZWFkZXJzPgotPC9tZXNzYWdlRW50cnk+Ci08L2xvZz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL2JwLzEzMDktMi90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9icC8xMzA5LTIvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmY5Yzc3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL2JwLzEzMDktMi90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjEzMDktMiI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBtZXNzYWdlIGxvZyBmaWxlIHdpdGggY2hpbGRyZW4gZm9sbG93aW5nIHRoZQotICAgIHNvYXA6Qm9keSBlbGVtZW50LCB0aHVzIGJyZWFraW5nIHJlcXVpcmVtZW50IDEwMTEuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotCTxhc3NlcnRpb24gaWQ9IkJQMTMwOSIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMTMwOSIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL2JwLzE2MDAtMS8xNjAwLTEud3NpbXNnIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvYnAvMTYwMC0xLzE2MDAtMS53c2ltc2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3YWY2OGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvYnAvMTYwMC0xLzE2MDAtMS53c2ltc2cKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGxvZyB0aW1lc3RhbXA9IjIwMDYtMDQtMTNUMTg6NTI6MzIuNDg4IgotICAgIHhtbG5zPSJodHRwOi8vd3d3LndzLWkub3JnL3Rlc3RpbmcvMjAwNC8wNy9sb2cvIgotICAgIHhtbG5zOndzaS1tb25Db25maWc9Imh0dHA6Ly93d3cud3MtaS5vcmcvdGVzdGluZy8yMDA0LzA3L21vbml0b3JDb25maWcvIgotICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiPgotICA8bW9uaXRvciB2ZXJzaW9uPSIxLjAiIHJlbGVhc2VEYXRlPSIyMDAzLTAzLTIwIj4KLSAgICA8aW1wbGVtZW50ZXIgbmFtZT0iSUJNIiBsb2NhdGlvbj0iIi8+Ci0gICAgPGVudmlyb25tZW50PgotICAgICAgPHJ1bnRpbWUgbmFtZT0iSmF2YShUTSkgMiBSdW50aW1lIEVudmlyb25tZW50LCBTdGFuZGFyZCBFZGl0aW9uIiB2ZXJzaW9uPSIxLjQuMiIvPgotICAgICAgPG9wZXJhdGluZ1N5c3RlbSBuYW1lPSJMaW51eCIgdmVyc2lvbj0iMi42LjE1LjEiLz4KLSAgICAgIDx4bWxQYXJzZXIgbmFtZT0iQXBhY2hlIFhlcmNlcyIgdmVyc2lvbj0iWE1MNEogNC4zLjYiLz4KLSAgICA8L2Vudmlyb25tZW50PgotICAgIDx3c2ktbW9uQ29uZmlnOmNvbmZpZ3VyYXRpb24+Ci0gICAgPHdzaS1tb25Db25maWc6Y29tbWVudD5Db21tZW50PC93c2ktbW9uQ29uZmlnOmNvbW1lbnQ+Ci0gICAgICA8d3NpLW1vbkNvbmZpZzpsb2dGaWxlIHJlcGxhY2U9InRydWUiIGxvY2F0aW9uPSJVUkwiPgotICAgICAgPHdzaS1tb25Db25maWc6YWRkU3R5bGVTaGVldCBocmVmPSJudWxsIiB0eXBlPSJudWxsIiAvPgotICAgIDwvd3NpLW1vbkNvbmZpZzpsb2dGaWxlPgotICAgICAgPHdzaS1tb25Db25maWc6bG9nRHVyYXRpb24+NjAwPC93c2ktbW9uQ29uZmlnOmxvZ0R1cmF0aW9uPgotICAgICAgPHdzaS1tb25Db25maWc6Y2xlYW51cFRpbWVvdXRTZWNvbmRzPjM8L3dzaS1tb25Db25maWc6Y2xlYW51cFRpbWVvdXRTZWNvbmRzPgotICAgICAgPHdzaS1tb25Db25maWc6bWFuSW5UaGVNaWRkbGU+Ci0gICAgICA8L3dzaS1tb25Db25maWc6bWFuSW5UaGVNaWRkbGU+Ci0gICAgPC93c2ktbW9uQ29uZmlnOmNvbmZpZ3VyYXRpb24+Ci0gIDwvbW9uaXRvcj4KLQotPG1lc3NhZ2VFbnRyeSB4c2k6dHlwZT0iaHR0cE1lc3NhZ2VFbnRyeSIgSUQ9IjEiIGNvbnZlcnNhdGlvbklEPSIxIiB0eXBlPSJyZXF1ZXN0IiB0aW1lc3RhbXA9IjIwMDYtMDQtMTNUMTg6NTE6MzAuMTkzWiI+Ci08bWVzc2FnZUNvbnRlbnQ+Jmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/Jmd0OyZsdDtzb2FwZW52OkVudmVsb3BlIHhtbG5zOnNvYXBlbnY9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8mcXVvdDsgeG1sbnM6eHNkPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJnF1b3Q7IHhtbG5zOnhzaT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSZxdW90OyZndDsmbHQ7c29hcGVudjpIZWFkZXIgeG1sbnM6dGVzdD0mcXVvdDtodHRwOi8vd3RwL3Rlc3QxNjAwLTEmcXVvdDsmZ3Q7Jmx0O3Rlc3Q6dGVzdEVsZW1lbnQvJmd0OyZsdDsvc29hcGVudjpIZWFkZXImZ3Q7Jmx0O3NvYXBlbnY6Qm9keSZndDsmbHQ7Y2Vsc2l1c1RvRmFyZW5oZWl0IHhtbG5zPSZxdW90O2h0dHA6Ly93dHAmcXVvdDsmZ3Q7Jmx0O2NlbHNpdXMmZ3Q7MzcuMCZsdDsvY2Vsc2l1cyZndDsmbHQ7L2NlbHNpdXNUb0ZhcmVuaGVpdCZndDsmbHQ7L3NvYXBlbnY6Qm9keSZndDsmbHQ7L3NvYXBlbnY6RW52ZWxvcGUmZ3Q7PC9tZXNzYWdlQ29udGVudD4KLTxzZW5kZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6ODE4NTwvc2VuZGVySG9zdEFuZFBvcnQ+Ci08cmVjZWl2ZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6ODA4MDwvcmVjZWl2ZXJIb3N0QW5kUG9ydD4KLTxodHRwSGVhZGVycz5QT1NUIC9Db252ZXJ0ZXJQcm9qL3NlcnZpY2VzL0NvbnZlcnRlciBIVFRQLzEuMCYjeGQ7Ci1Db250ZW50LVR5cGU6IHRleHQveG1sOyBjaGFyc2V0PXV0Zi04JiN4ZDsKLUFjY2VwdDogYXBwbGljYXRpb24vc29hcCt4bWwsIGFwcGxpY2F0aW9uL2RpbWUsIG11bHRpcGFydC9yZWxhdGVkLCB0ZXh0LyomI3hkOwotVXNlci1BZ2VudDogQXhpcy8xLjIuMSYjeGQ7Ci1Ib3N0OiBsb2NhbGhvc3Q6ODA4MCYjeGQ7Ci1DYWNoZS1Db250cm9sOiBuby1jYWNoZSYjeGQ7Ci1QcmFnbWE6IG5vLWNhY2hlJiN4ZDsKLVNPQVBBY3Rpb246ICZxdW90OyZxdW90OyYjeGQ7Ci1Db250ZW50LUxlbmd0aDogMzQ0JiN4ZDsKLSYjeGQ7Ci08L2h0dHBIZWFkZXJzPgotPC9tZXNzYWdlRW50cnk+Ci08bWVzc2FnZUVudHJ5IHhzaTp0eXBlPSJodHRwTWVzc2FnZUVudHJ5IiBJRD0iMiIgY29udmVyc2F0aW9uSUQ9IjEiIHR5cGU9InJlc3BvbnNlIiB0aW1lc3RhbXA9IjIwMDYtMDQtMTNUMTg6NTE6MzAuOTYwWiI+Ci08bWVzc2FnZUNvbnRlbnQ+Jmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7dXRmLTgmcXVvdDs/Jmd0OyZsdDtzb2FwZW52OkVudmVsb3BlIHhtbG5zOnNvYXBlbnY9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8mcXVvdDsgeG1sbnM6eHNkPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJnF1b3Q7IHhtbG5zOnhzaT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSZxdW90OyZndDsmbHQ7c29hcGVudjpCb2R5Jmd0OyZsdDtjZWxzaXVzVG9GYXJlbmhlaXRSZXNwb25zZSB4bWxucz0mcXVvdDtodHRwOi8vd3RwJnF1b3Q7Jmd0OyZsdDtjZWxzaXVzVG9GYXJlbmhlaXRSZXR1cm4mZ3Q7OTguNiZsdDsvY2Vsc2l1c1RvRmFyZW5oZWl0UmV0dXJuJmd0OyZsdDsvY2Vsc2l1c1RvRmFyZW5oZWl0UmVzcG9uc2UmZ3Q7Jmx0Oy9zb2FwZW52OkJvZHkmZ3Q7Jmx0Oy9zb2FwZW52OkVudmVsb3BlJmd0OzwvbWVzc2FnZUNvbnRlbnQ+Ci08c2VuZGVySG9zdEFuZFBvcnQ+bG9jYWxob3N0OjgwODA8L3NlbmRlckhvc3RBbmRQb3J0PgotPHJlY2VpdmVySG9zdEFuZFBvcnQ+bG9jYWxob3N0OjgxODU8L3JlY2VpdmVySG9zdEFuZFBvcnQ+Ci08aHR0cEhlYWRlcnM+SFRUUC8xLjEgMjAwIE9LJiN4ZDsKLUNvbnRlbnQtVHlwZTogdGV4dC94bWw7Y2hhcnNldD11dGYtOCYjeGQ7Ci1EYXRlOiBUaHUsIDEzIEFwciAyMDA2IDE4OjUxOjMwIEdNVCYjeGQ7Ci1TZXJ2ZXI6IEFwYWNoZS1Db3lvdGUvMS4xJiN4ZDsKLUNvbm5lY3Rpb246IGNsb3NlJiN4ZDsKLSYjeGQ7Ci08L2h0dHBIZWFkZXJzPgotPC9tZXNzYWdlRW50cnk+Ci08L2xvZz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL2JwLzE2MDAtMS90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9icC8xNjAwLTEvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTM2ZDgwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL2JwLzE2MDAtMS90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjE2MDAtMSI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBtZXNzYWdlIGxvZyBmaWxlIHRoYXQgY29udGFpbnMgYSBtZXNzYWdlIHdpdGggYQotICAgIGhlYWRlciBlbnRyeSB3aG9zZSBuYW1lc3BhY2UgaXMgZGVmaW5lZCBpbiB0aGUgc29hcDpoZWFkZXIgZWxlbWVudC4gIFRoaXMKLSAgICBpcyBjb25maXJtYW50IHRvIHJlcXVpcmVtZW50IDk5ODAgaW4gdGhlIEJhc2ljIFByb2ZpbGUgYnV0IGlzIGN1cnJlbnRseQotICAgIGZsYWdnZWQgYXMgYSBjb25mb3JtYW5jZSBlcnJvci4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXMvPgotPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL2J1Z3ppbGxhLzE0MTk2Ni8xNDE5NjYud3NpbXNnIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvYnVnemlsbGEvMTQxOTY2LzE0MTk2Ni53c2ltc2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyNDVmYTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvbWVzc2FnZUxvZ3MvYnVnemlsbGEvMTQxOTY2LzE0MTk2Ni53c2ltc2cKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGxvZyB0aW1lc3RhbXA9IjIwMDYtMDQtMTNUMTg6NTI6MzIuNDg4IgotICAgIHhtbG5zPSJodHRwOi8vd3d3LndzLWkub3JnL3Rlc3RpbmcvMjAwNC8wNy9sb2cvIgotICAgIHhtbG5zOndzaS1tb25Db25maWc9Imh0dHA6Ly93d3cud3MtaS5vcmcvdGVzdGluZy8yMDA0LzA3L21vbml0b3JDb25maWcvIgotICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiPgotICA8bW9uaXRvciB2ZXJzaW9uPSIxLjAiIHJlbGVhc2VEYXRlPSIyMDAzLTAzLTIwIj4KLSAgICA8aW1wbGVtZW50ZXIgbmFtZT0iSUJNIiBsb2NhdGlvbj0iIi8+Ci0gICAgPGVudmlyb25tZW50PgotICAgICAgPHJ1bnRpbWUgbmFtZT0iSmF2YShUTSkgMiBSdW50aW1lIEVudmlyb25tZW50LCBTdGFuZGFyZCBFZGl0aW9uIiB2ZXJzaW9uPSIxLjQuMiIvPgotICAgICAgPG9wZXJhdGluZ1N5c3RlbSBuYW1lPSJMaW51eCIgdmVyc2lvbj0iMi42LjE1LjEiLz4KLSAgICAgIDx4bWxQYXJzZXIgbmFtZT0iQXBhY2hlIFhlcmNlcyIgdmVyc2lvbj0iWE1MNEogNC4zLjYiLz4KLSAgICA8L2Vudmlyb25tZW50PgotICAgIDx3c2ktbW9uQ29uZmlnOmNvbmZpZ3VyYXRpb24+Ci0gICAgPHdzaS1tb25Db25maWc6Y29tbWVudD5Db21tZW50PC93c2ktbW9uQ29uZmlnOmNvbW1lbnQ+Ci0gICAgICA8d3NpLW1vbkNvbmZpZzpsb2dGaWxlIHJlcGxhY2U9InRydWUiIGxvY2F0aW9uPSJVUkwiPgotICAgICAgPHdzaS1tb25Db25maWc6YWRkU3R5bGVTaGVldCBocmVmPSJudWxsIiB0eXBlPSJudWxsIiAvPgotICAgIDwvd3NpLW1vbkNvbmZpZzpsb2dGaWxlPgotICAgICAgPHdzaS1tb25Db25maWc6bG9nRHVyYXRpb24+NjAwPC93c2ktbW9uQ29uZmlnOmxvZ0R1cmF0aW9uPgotICAgICAgPHdzaS1tb25Db25maWc6Y2xlYW51cFRpbWVvdXRTZWNvbmRzPjM8L3dzaS1tb25Db25maWc6Y2xlYW51cFRpbWVvdXRTZWNvbmRzPgotICAgICAgPHdzaS1tb25Db25maWc6bWFuSW5UaGVNaWRkbGU+Ci0gICAgICA8L3dzaS1tb25Db25maWc6bWFuSW5UaGVNaWRkbGU+Ci0gICAgPC93c2ktbW9uQ29uZmlnOmNvbmZpZ3VyYXRpb24+Ci0gIDwvbW9uaXRvcj4KLQotPG1lc3NhZ2VFbnRyeSB4c2k6dHlwZT0iaHR0cE1lc3NhZ2VFbnRyeSIgSUQ9IjEiIGNvbnZlcnNhdGlvbklEPSIxIiB0eXBlPSJyZXF1ZXN0IiB0aW1lc3RhbXA9IjIwMDYtMDQtMTNUMTg6NTE6MzAuMTkzWiI+Ci08bWVzc2FnZUNvbnRlbnQ+Jmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/Jmd0OyZsdDtzb2FwZW52OkVudmVsb3BlIHhtbG5zOnNvYXBlbnY9JnF1b3Q7aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8mcXVvdDsgeG1sbnM6eHNkPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJnF1b3Q7IHhtbG5zOnhzaT0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSZxdW90OyZndDsmbHQ7c29hcGVudjpCb2R5Jmd0OyZsdDtjZWxzaXVzVG9GYXJlbmhlaXQgeG1sbnM9JnF1b3Q7aHR0cDovL3d0cCZxdW90OyZndDsmbHQ7Y2Vsc2l1cyZndDszNy4wJmx0Oy9jZWxzaXVzJmd0OyZsdDsvY2Vsc2l1c1RvRmFyZW5oZWl0Jmd0OyZsdDsvc29hcGVudjpCb2R5Jmd0OyZsdDtzb2FwZW52OmJhZENoaWxkLyZndDsmbHQ7L3NvYXBlbnY6RW52ZWxvcGUmZ3Q7PC9tZXNzYWdlQ29udGVudD4KLTxzZW5kZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6ODE4NTwvc2VuZGVySG9zdEFuZFBvcnQ+Ci08cmVjZWl2ZXJIb3N0QW5kUG9ydD5sb2NhbGhvc3Q6ODA4MDwvcmVjZWl2ZXJIb3N0QW5kUG9ydD4KLTxodHRwSGVhZGVycz5QT1NUIC9Db252ZXJ0ZXJQcm9qL3NlcnZpY2VzL0NvbnZlcnRlciBIVFRQLzEuMSYjeGQ7Ci1Db250ZW50LVR5cGU6IHRleHQveG1sOyBjaGFyc2V0PXV0Zi04JiN4ZDsKLUFjY2VwdDogYXBwbGljYXRpb24vc29hcCt4bWwsIGFwcGxpY2F0aW9uL2RpbWUsIG11bHRpcGFydC9yZWxhdGVkLCB0ZXh0LyomI3hkOwotVXNlci1BZ2VudDogQXhpcy8xLjIuMSYjeGQ7Ci1Ib3N0OiBsb2NhbGhvc3Q6ODA4MCYjeGQ7Ci1DYWNoZS1Db250cm9sOiBuby1jYWNoZSYjeGQ7Ci1QcmFnbWE6IG5vLWNhY2hlJiN4ZDsKLVNPQVBBY3Rpb246ICZxdW90OyZxdW90OyYjeGQ7Ci1Db250ZW50LUxlbmd0aDogMzQ0JiN4ZDsKLSYjeGQ7Ci08L2h0dHBIZWFkZXJzPgotPC9tZXNzYWdlRW50cnk+Ci08L2xvZz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL2J1Z3ppbGxhLzE0MTk2Ni90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy9tZXNzYWdlTG9ncy9idWd6aWxsYS8xNDE5NjYvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTI4MWIwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL21lc3NhZ2VMb2dzL2J1Z3ppbGxhLzE0MTk2Ni90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjE0MTk2NiI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBtZXNzYWdlIGxvZyBmaWxlIHRoYXQgY29udGFpbnMgb25seSBhIHJlcXVlc3QgYW5kCi0gICAgYnJlYWtzIHJlcXVpcmVtZW50IDEwMTEuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotCTxhc3NlcnRpb24gaWQ9IkJQMTMwOSIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMTMwOSIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvU09BUDEyL0hlbGxvU2VydmljZV9zY2hlbWExLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvU09BUDEyL0hlbGxvU2VydmljZV9zY2hlbWExLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGU0YzllYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL1NPQVAxMi9IZWxsb1NlcnZpY2Vfc2NoZW1hMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3Rlc3QvIiB2ZXJzaW9uPSIxLjAiPgotCi0gIDx4czplbGVtZW50IHhtbG5zOm5zMT0iaHR0cDovL3Rlc3QvIiBuYW1lPSJoZWxsbyIgdHlwZT0ibnMxOmhlbGxvIi8+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImhlbGxvIj4KLSAgICA8eHM6c2VxdWVuY2U+Ci0gICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9ImFyZzAiIHR5cGU9InhzOnN0cmluZyIvPgotICAgIDwveHM6c2VxdWVuY2U+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0KLSAgPHhzOmVsZW1lbnQgeG1sbnM6bnMyPSJodHRwOi8vdGVzdC8iIG5hbWU9ImhlbGxvUmVzcG9uc2UiIHR5cGU9Im5zMjpoZWxsb1Jlc3BvbnNlIi8+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImhlbGxvUmVzcG9uc2UiPgotICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0icmV0dXJuIiB0eXBlPSJ4czpzdHJpbmciLz4KLSAgICA8L3hzOnNlcXVlbmNlPgotICA8L3hzOmNvbXBsZXhUeXBlPgotPC94czpzY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL1NPQVAxMi9TaW1wbGVMb2cud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvU09BUDEyL1NpbXBsZUxvZy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNWU4MzMxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvU09BUDEyL1NpbXBsZUxvZy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxkZWZpbml0aW9ucyB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnNvYXAxMj0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwMTIvIiB4bWxuczp0bnM9Imh0dHA6Ly90ZXN0LyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgbmFtZT0iSGVsbG9TZXJ2aWNlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZXN0LyI+Ci0gIDx0eXBlcz4KLSAgICA8eHNkOnNjaGVtYT4KLSAgICAgIDx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3Rlc3QvIiBzY2hlbWFMb2NhdGlvbj0iSGVsbG9TZXJ2aWNlX3NjaGVtYTEueHNkIi8+Ci0gICAgPC94c2Q6c2NoZW1hPgotICA8L3R5cGVzPgotICA8bWVzc2FnZSBuYW1lPSJoZWxsbyI+Ci0gICAgPHBhcnQgZWxlbWVudD0idG5zOmhlbGxvIiBuYW1lPSJwYXJhbWV0ZXJzIi8+Ci0gIDwvbWVzc2FnZT4KLSAgPG1lc3NhZ2UgbmFtZT0iaGVsbG9SZXNwb25zZSI+Ci0gICAgPHBhcnQgZWxlbWVudD0idG5zOmhlbGxvUmVzcG9uc2UiIG5hbWU9InBhcmFtZXRlcnMiLz4KLSAgPC9tZXNzYWdlPgotICA8cG9ydFR5cGUgbmFtZT0iSGVsbG8iPgotICAgIDxvcGVyYXRpb24gbmFtZT0iaGVsbG8iPgotICAgICAgPGlucHV0IG1lc3NhZ2U9InRuczpoZWxsbyIvPgotICAgICAgPG91dHB1dCBtZXNzYWdlPSJ0bnM6aGVsbG9SZXNwb25zZSIvPgotICAgIDwvb3BlcmF0aW9uPgotICA8L3BvcnRUeXBlPgotICA8YmluZGluZyBuYW1lPSJIZWxsb1BvcnRCaW5kaW5nIiB0eXBlPSJ0bnM6SGVsbG8iPgotICAgIDxzb2FwMTI6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3d3dy53My5vcmcvMjAwMy8wNS9zb2FwL2JpbmRpbmdzL0hUVFAvIi8+Ci0gICAgPG9wZXJhdGlvbiBuYW1lPSJoZWxsbyI+Ci0gICAgICA8c29hcDEyOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDxpbnB1dD4KLSAgICAgICAgPHNvYXAxMjpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC9pbnB1dD4KLSAgICAgIDxvdXRwdXQ+Ci0gICAgICAgIDxzb2FwMTI6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvb3V0cHV0PgotICAgIDwvb3BlcmF0aW9uPgotICA8L2JpbmRpbmc+Ci0gIDxzZXJ2aWNlIG5hbWU9IkhlbGxvU2VydmljZSI+Ci0gICAgPHBvcnQgYmluZGluZz0idG5zOkhlbGxvUG9ydEJpbmRpbmciIG5hbWU9IkhlbGxvUG9ydCI+Ci0gICAgICA8c29hcDEyOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly9sb2NhbGhvc3Q6OTA4MS90ZDEyL0hlbGxvU2VydmljZSIvPgotICAgIDwvcG9ydD4KLSAgPC9zZXJ2aWNlPgotPC9kZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvU2VjdXJlV1MvRW5jcnlwdGlvbi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9TZWN1cmVXUy9FbmNyeXB0aW9uLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiOTYzNjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9TZWN1cmVXUy9FbmNyeXB0aW9uLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vbWFpbiIgeG1sbnM6aW1wbD0iaHR0cDovL21haW4iIHhtbG5zOmludGY9Imh0dHA6Ly9tYWluIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6d3NkbHNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOndzaT0iaHR0cDovL3dzLWkub3JnL3Byb2ZpbGVzL2Jhc2ljLzEuMS94c2QiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotIDx3c2RsOnR5cGVzPgotICA8c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL21haW4iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotICAgPGVsZW1lbnQgbmFtZT0iaW5jcmVtZW50UmVzcG9uc2UiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iaW5jcmVtZW50UmV0dXJuIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxlbGVtZW50IG5hbWU9ImluY3JlbWVudCI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJ2YWx1ZSIgdHlwZT0ieHNkOmludCIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gIDwvc2NoZW1hPgotIDwvd3NkbDp0eXBlcz4KLQotICAgPHdzZGw6bWVzc2FnZSBuYW1lPSJpbmNyZW1lbnRSZXNwb25zZSI+Ci0gICAgIDx3c2RsOnBhcnQgZWxlbWVudD0iaW50ZjppbmNyZW1lbnRSZXNwb25zZSIgbmFtZT0icGFyYW1ldGVycyIvPgotCi0gIDwvd3NkbDptZXNzYWdlPgotCi0gICA8d3NkbDptZXNzYWdlIG5hbWU9ImluY3JlbWVudFJlcXVlc3QiPgotICAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9ImludGY6aW5jcmVtZW50IiBuYW1lPSJwYXJhbWV0ZXJzIi8+Ci0KLSAgPC93c2RsOm1lc3NhZ2U+Ci0KLSAgIDx3c2RsOnBvcnRUeXBlIG5hbWU9IldlYlNlcnZpY2UiPgotICAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iaW5jcmVtZW50Ij4KLSAgICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJpbnRmOmluY3JlbWVudFJlcXVlc3QiIG5hbWU9ImluY3JlbWVudFJlcXVlc3QiLz4KLQotICAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJpbnRmOmluY3JlbWVudFJlc3BvbnNlIiBuYW1lPSJpbmNyZW1lbnRSZXNwb25zZSIvPgotCi0gICAgPC93c2RsOm9wZXJhdGlvbj4KLQotICA8L3dzZGw6cG9ydFR5cGU+Ci0KLSAgIDx3c2RsOmJpbmRpbmcgbmFtZT0iV2ViU2VydmljZVNvYXBCaW5kaW5nIiB0eXBlPSJpbnRmOldlYlNlcnZpY2UiPgotIDx3c2F3OlVzaW5nQWRkcmVzc2luZyB3c2RsOnJlcXVpcmVkPSJmYWxzZSIgeG1sbnM6d3Nhdz0iaHR0cDovL3d3dy53My5vcmcvMjAwNi8wNS9hZGRyZXNzaW5nL3dzZGwiLz4KLQotICAgICA8d3NkbHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0KLSAgICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImluY3JlbWVudCI+Ci0gICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJpbmNyZW1lbnQiLz4KLQotICAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImluY3JlbWVudFJlcXVlc3QiPgotICAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0KLSAgICAgIDwvd3NkbDppbnB1dD4KLQotICAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJpbmNyZW1lbnRSZXNwb25zZSI+Ci0gICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLQotICAgICAgPC93c2RsOm91dHB1dD4KLQotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0KLSAgPC93c2RsOmJpbmRpbmc+Ci0KLSAgIDx3c2RsOnNlcnZpY2UgbmFtZT0iV2ViU2VydmljZVNlcnZpY2UiPgotICAgICA8d3NkbDpwb3J0IGJpbmRpbmc9ImludGY6V2ViU2VydmljZVNvYXBCaW5kaW5nIiBuYW1lPSJXZWJTZXJ2aWNlIj4KLSAgICAgICA8d3NkbHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL2xvY2FsaG9zdDo5MDgwL1dlYlByb2plY3RXaXRoRW5jcmlwdGlvbi9zZXJ2aWNlcy9XZWJTZXJ2aWNlIi8+Ci0KLSAgICA8L3dzZGw6cG9ydD4KLQotICA8L3dzZGw6c2VydmljZT4KLQotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9TZWN1cmVXUy9Ob1NlY3VyaXR5LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL1NlY3VyZVdTL05vU2VjdXJpdHkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmI5NjM2NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL1NlY3VyZVdTL05vU2VjdXJpdHkud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9tYWluIiB4bWxuczppbXBsPSJodHRwOi8vbWFpbiIgeG1sbnM6aW50Zj0iaHR0cDovL21haW4iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp3c2Rsc29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6d3NpPSJodHRwOi8vd3MtaS5vcmcvcHJvZmlsZXMvYmFzaWMvMS4xL3hzZCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0gPHdzZGw6dHlwZXM+Ci0gIDxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vbWFpbiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0gICA8ZWxlbWVudCBuYW1lPSJpbmNyZW1lbnRSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJpbmNyZW1lbnRSZXR1cm4iIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGVsZW1lbnQgbmFtZT0iaW5jcmVtZW50Ij4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9InZhbHVlIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgPC9zY2hlbWE+Ci0gPC93c2RsOnR5cGVzPgotCi0gICA8d3NkbDptZXNzYWdlIG5hbWU9ImluY3JlbWVudFJlc3BvbnNlIj4KLSAgICAgPHdzZGw6cGFydCBlbGVtZW50PSJpbnRmOmluY3JlbWVudFJlc3BvbnNlIiBuYW1lPSJwYXJhbWV0ZXJzIi8+Ci0KLSAgPC93c2RsOm1lc3NhZ2U+Ci0KLSAgIDx3c2RsOm1lc3NhZ2UgbmFtZT0iaW5jcmVtZW50UmVxdWVzdCI+Ci0gICAgIDx3c2RsOnBhcnQgZWxlbWVudD0iaW50ZjppbmNyZW1lbnQiIG5hbWU9InBhcmFtZXRlcnMiLz4KLQotICA8L3dzZGw6bWVzc2FnZT4KLQotICAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iV2ViU2VydmljZSI+Ci0gICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJpbmNyZW1lbnQiPgotICAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9ImludGY6aW5jcmVtZW50UmVxdWVzdCIgbmFtZT0iaW5jcmVtZW50UmVxdWVzdCIvPgotCi0gICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9ImludGY6aW5jcmVtZW50UmVzcG9uc2UiIG5hbWU9ImluY3JlbWVudFJlc3BvbnNlIi8+Ci0KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotCi0gIDwvd3NkbDpwb3J0VHlwZT4KLQotICAgPHdzZGw6YmluZGluZyBuYW1lPSJXZWJTZXJ2aWNlU29hcEJpbmRpbmciIHR5cGU9ImludGY6V2ViU2VydmljZSI+Ci0gPHdzYXc6VXNpbmdBZGRyZXNzaW5nIHdzZGw6cmVxdWlyZWQ9ImZhbHNlIiB4bWxuczp3c2F3PSJodHRwOi8vd3d3LnczLm9yZy8yMDA2LzA1L2FkZHJlc3Npbmcvd3NkbCIvPgotCi0gICAgIDx3c2Rsc29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLQotICAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iaW5jcmVtZW50Ij4KLSAgICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249ImluY3JlbWVudCIvPgotCi0gICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iaW5jcmVtZW50UmVxdWVzdCI+Ci0gICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLQotICAgICAgPC93c2RsOmlucHV0PgotCi0gICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImluY3JlbWVudFJlc3BvbnNlIj4KLSAgICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotCi0gICAgICA8L3dzZGw6b3V0cHV0PgotCi0gICAgPC93c2RsOm9wZXJhdGlvbj4KLQotICA8L3dzZGw6YmluZGluZz4KLQotICAgPHdzZGw6c2VydmljZSBuYW1lPSJXZWJTZXJ2aWNlU2VydmljZSI+Ci0gICAgIDx3c2RsOnBvcnQgYmluZGluZz0iaW50ZjpXZWJTZXJ2aWNlU29hcEJpbmRpbmciIG5hbWU9IldlYlNlcnZpY2UiPgotICAgICAgIDx3c2Rsc29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vbG9jYWxob3N0OjkwODAvV2ViUHJvamVjdFdpdGhFbmNyaXB0aW9uL3NlcnZpY2VzL1dlYlNlcnZpY2UiLz4KLQotICAgIDwvd3NkbDpwb3J0PgotCi0gIDwvd3NkbDpzZXJ2aWNlPgotCi08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL1NlY3VyZVdTL1NpZ25hdHVyZS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9TZWN1cmVXUy9TaWduYXR1cmUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmI5NjM2NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL1NlY3VyZVdTL1NpZ25hdHVyZS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL21haW4iIHhtbG5zOmltcGw9Imh0dHA6Ly9tYWluIiB4bWxuczppbnRmPSJodHRwOi8vbWFpbiIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczp3c2k9Imh0dHA6Ly93cy1pLm9yZy9wcm9maWxlcy9iYXNpYy8xLjEveHNkIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLSA8d3NkbDp0eXBlcz4KLSAgPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9tYWluIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLSAgIDxlbGVtZW50IG5hbWU9ImluY3JlbWVudFJlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImluY3JlbWVudFJldHVybiIgdHlwZT0ieHNkOmludCIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJpbmNyZW1lbnQiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0idmFsdWUiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICA8L3NjaGVtYT4KLSA8L3dzZGw6dHlwZXM+Ci0KLSAgIDx3c2RsOm1lc3NhZ2UgbmFtZT0iaW5jcmVtZW50UmVzcG9uc2UiPgotICAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9ImludGY6aW5jcmVtZW50UmVzcG9uc2UiIG5hbWU9InBhcmFtZXRlcnMiLz4KLQotICA8L3dzZGw6bWVzc2FnZT4KLQotICAgPHdzZGw6bWVzc2FnZSBuYW1lPSJpbmNyZW1lbnRSZXF1ZXN0Ij4KLSAgICAgPHdzZGw6cGFydCBlbGVtZW50PSJpbnRmOmluY3JlbWVudCIgbmFtZT0icGFyYW1ldGVycyIvPgotCi0gIDwvd3NkbDptZXNzYWdlPgotCi0gICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJXZWJTZXJ2aWNlIj4KLSAgICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImluY3JlbWVudCI+Ci0gICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0iaW50ZjppbmNyZW1lbnRSZXF1ZXN0IiBuYW1lPSJpbmNyZW1lbnRSZXF1ZXN0Ii8+Ci0KLSAgICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0iaW50ZjppbmNyZW1lbnRSZXNwb25zZSIgbmFtZT0iaW5jcmVtZW50UmVzcG9uc2UiLz4KLQotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0KLSAgPC93c2RsOnBvcnRUeXBlPgotCi0gICA8d3NkbDpiaW5kaW5nIG5hbWU9IldlYlNlcnZpY2VTb2FwQmluZGluZyIgdHlwZT0iaW50ZjpXZWJTZXJ2aWNlIj4KLSA8d3NhdzpVc2luZ0FkZHJlc3Npbmcgd3NkbDpyZXF1aXJlZD0iZmFsc2UiIHhtbG5zOndzYXc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDYvMDUvYWRkcmVzc2luZy93c2RsIi8+Ci0KLSAgICAgPHdzZGxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotCi0gICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJpbmNyZW1lbnQiPgotICAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaW5jcmVtZW50Ii8+Ci0KLSAgICAgICA8d3NkbDppbnB1dCBuYW1lPSJpbmNyZW1lbnRSZXF1ZXN0Ij4KLSAgICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotCi0gICAgICA8L3dzZGw6aW5wdXQ+Ci0KLSAgICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iaW5jcmVtZW50UmVzcG9uc2UiPgotICAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotCi0gIDwvd3NkbDpiaW5kaW5nPgotCi0gICA8d3NkbDpzZXJ2aWNlIG5hbWU9IldlYlNlcnZpY2VTZXJ2aWNlIj4KLSAgICAgPHdzZGw6cG9ydCBiaW5kaW5nPSJpbnRmOldlYlNlcnZpY2VTb2FwQmluZGluZyIgbmFtZT0iV2ViU2VydmljZSI+Ci0gICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly9sb2NhbGhvc3Q6OTA4MC9XZWJQcm9qZWN0V2l0aEVuY3JpcHRpb24vc2VydmljZXMvV2ViU2VydmljZSIvPgotCi0gICAgPC93c2RsOnBvcnQ+Ci0KLSAgPC93c2RsOnNlcnZpY2U+Ci0KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvU2VjdXJlV1MvU2lnbmF0dXJlQW5kRW5jcnlwdGlvbi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9TZWN1cmVXUy9TaWduYXR1cmVBbmRFbmNyeXB0aW9uLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiOTYzNjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9TZWN1cmVXUy9TaWduYXR1cmVBbmRFbmNyeXB0aW9uLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vbWFpbiIgeG1sbnM6aW1wbD0iaHR0cDovL21haW4iIHhtbG5zOmludGY9Imh0dHA6Ly9tYWluIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6d3NkbHNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOndzaT0iaHR0cDovL3dzLWkub3JnL3Byb2ZpbGVzL2Jhc2ljLzEuMS94c2QiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotIDx3c2RsOnR5cGVzPgotICA8c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL21haW4iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotICAgPGVsZW1lbnQgbmFtZT0iaW5jcmVtZW50UmVzcG9uc2UiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iaW5jcmVtZW50UmV0dXJuIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxlbGVtZW50IG5hbWU9ImluY3JlbWVudCI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJ2YWx1ZSIgdHlwZT0ieHNkOmludCIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gIDwvc2NoZW1hPgotIDwvd3NkbDp0eXBlcz4KLQotICAgPHdzZGw6bWVzc2FnZSBuYW1lPSJpbmNyZW1lbnRSZXNwb25zZSI+Ci0gICAgIDx3c2RsOnBhcnQgZWxlbWVudD0iaW50ZjppbmNyZW1lbnRSZXNwb25zZSIgbmFtZT0icGFyYW1ldGVycyIvPgotCi0gIDwvd3NkbDptZXNzYWdlPgotCi0gICA8d3NkbDptZXNzYWdlIG5hbWU9ImluY3JlbWVudFJlcXVlc3QiPgotICAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9ImludGY6aW5jcmVtZW50IiBuYW1lPSJwYXJhbWV0ZXJzIi8+Ci0KLSAgPC93c2RsOm1lc3NhZ2U+Ci0KLSAgIDx3c2RsOnBvcnRUeXBlIG5hbWU9IldlYlNlcnZpY2UiPgotICAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iaW5jcmVtZW50Ij4KLSAgICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJpbnRmOmluY3JlbWVudFJlcXVlc3QiIG5hbWU9ImluY3JlbWVudFJlcXVlc3QiLz4KLQotICAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJpbnRmOmluY3JlbWVudFJlc3BvbnNlIiBuYW1lPSJpbmNyZW1lbnRSZXNwb25zZSIvPgotCi0gICAgPC93c2RsOm9wZXJhdGlvbj4KLQotICA8L3dzZGw6cG9ydFR5cGU+Ci0KLSAgIDx3c2RsOmJpbmRpbmcgbmFtZT0iV2ViU2VydmljZVNvYXBCaW5kaW5nIiB0eXBlPSJpbnRmOldlYlNlcnZpY2UiPgotIDx3c2F3OlVzaW5nQWRkcmVzc2luZyB3c2RsOnJlcXVpcmVkPSJmYWxzZSIgeG1sbnM6d3Nhdz0iaHR0cDovL3d3dy53My5vcmcvMjAwNi8wNS9hZGRyZXNzaW5nL3dzZGwiLz4KLQotICAgICA8d3NkbHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0KLSAgICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImluY3JlbWVudCI+Ci0gICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJpbmNyZW1lbnQiLz4KLQotICAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImluY3JlbWVudFJlcXVlc3QiPgotICAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0KLSAgICAgIDwvd3NkbDppbnB1dD4KLQotICAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJpbmNyZW1lbnRSZXNwb25zZSI+Ci0gICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLQotICAgICAgPC93c2RsOm91dHB1dD4KLQotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0KLSAgPC93c2RsOmJpbmRpbmc+Ci0KLSAgIDx3c2RsOnNlcnZpY2UgbmFtZT0iV2ViU2VydmljZVNlcnZpY2UiPgotICAgICA8d3NkbDpwb3J0IGJpbmRpbmc9ImludGY6V2ViU2VydmljZVNvYXBCaW5kaW5nIiBuYW1lPSJXZWJTZXJ2aWNlIj4KLSAgICAgICA8d3NkbHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL2xvY2FsaG9zdDo5MDgwL1dlYlByb2plY3RXaXRoRW5jcmlwdGlvbi9zZXJ2aWNlcy9XZWJTZXJ2aWNlIi8+Ci0KLSAgICA8L3dzZGw6cG9ydD4KLQotICA8L3dzZGw6c2VydmljZT4KLQotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9hcC8yOTQxLTEvMjk0MS0xLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2FwLzI5NDEtMS8yOTQxLTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI0ZTAwZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2FwLzI5NDEtMS8yOTQxLTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbHNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmltcGw9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3MiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3MiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJvdmluY2UiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImNpdHkiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InN0cmVldCIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icG9zdGFsQ29kZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icGhvbmVOdW1iZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOlBob25lTnVtYmVyIi8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iUGhvbmVOdW1iZXIiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0iYXJlYSIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcmVmaXgiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ibnVtYmVyIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmV0dXJuIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJhZGRyZXNzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICA8c2VxdWVuY2UvPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3NIZWFkZXJUeXBlIi8+Ci0gICA8ZWxlbWVudCBuYW1lPSJmYXVsdCIgdHlwZT0ic3RyaW5nIi8+Ci0gIDwvc2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3MiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3MiLz4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IkFkZHJlc3NIZWFkZXIiIGVsZW1lbnQ9ImludGY6QWRkcmVzc0hlYWRlciIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmYXVsdE1lc3NhZ2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iZmF1bHQiIGVsZW1lbnQ9ImludGY6ZmF1bHQiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iZmF1bHQiIG1lc3NhZ2U9ImludGY6ZmF1bHRNZXNzYWdlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJBZGRyZXNzQm9va1NvYXBCaW5kaW5nIiB0eXBlPSJpbnRmOkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbHNvYXA6YmluZGluZyB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHN0eWxlPSJkb2N1bWVudCIgc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6aGVhZGVyIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0IiBwYXJ0PSJBZGRyZXNzSGVhZGVyIiB1c2U9ImxpdGVyYWwiPgotICAgICAgICAgIDx3c2Rsc29hcDpoZWFkZXJmYXVsdCBtZXNzYWdlPSJpbnRmOmZhdWx0IiBwYXJ0PSJmYXVsdCIgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICAgIDwvd3NkbHNvYXA6aGVhZGVyPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSBwYXJ0cz0icGFyYW1ldGVycyIgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHN0eWxlPSJkb2N1bWVudCIgc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkFkZHJlc3NCb29rU2VydmljZSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJBZGRyZXNzQm9vayIgYmluZGluZz0iaW50ZjpBZGRyZXNzQm9va1NvYXBCaW5kaW5nIj4KLSAgICAgIDx3c2Rsc29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvQWRkcmVzc0Jvb2siLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2FwLzI5NDEtMS90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2FwLzI5NDEtMS90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0ODM5NDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9hcC8yOTQxLTEvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjI5NDEtMSI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBjb25mb3JtYW50IHdzZGwgd2l0aCBhIHNvYXA6aGVhZGVyZmF1bHQgZWxlbWVudCB0aGF0Ci0gICAgc2hvdWxkIHBhc3MgdGVzdCBhc3NlcnRpb24gQlAyOTQxLgotICA8L2Rlc2NyaXB0aW9uPgotPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxMi0xLzIwMTItMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDEyLTEvMjAxMi0xLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkYjkyYmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDEyLTEvMjAxMi0xLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0iTmFtZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KLQk8d3NkbDp0eXBlcz4KLQkJPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyI+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iUmVwb3J0Ij4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IHJlZj0idG5zOk5hbWUiIC8+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJ0bnM6U3BlY2ltZW4iIC8+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJ0bnM6TG90IiAvPgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iU2FtcGxlTGlzdCI+Ci0JCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgbWluT2NjdXJzPSIxIiByZWY9InRuczpSZXBvcnQiIC8+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJDb3VudCIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJMYXN0TW9kaWZpZWQiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iTG90IiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9Ik5hbWUiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iTnVtYmVyIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9IlNwZWNpbWVuIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9IlNhbXBsZSI+Ci0JCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCByZWY9InRuczpTYW1wbGVOYW1lIiAvPgotCQkJCQkJPHhzZDplbGVtZW50IHJlZj0idG5zOkNvdW50IiAvPgotCQkJCQkJPHhzZDplbGVtZW50IHJlZj0idG5zOkxhc3RNb2RpZmllZCIgLz4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgbWluT2NjdXJzPSIwIiByZWY9InRuczpTYW1wbGVQcm92aWRlciIgLz4KLQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJ4c2Q6c3RyaW5nIiB1c2U9Im9wdGlvbmFsIiAvPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJTYW1wbGVOYW1lIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9IlNhbXBsZVByb3ZpZGVyIj4KLQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IHJlZj0idG5zOk5hbWUiIC8+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJ0bnM6TnVtYmVyIiAvPgotCQkJCQkJPHhzZDplbGVtZW50IHJlZj0idG5zOlNhbXBsZUxpc3QiIC8+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJvcHRpb25hbCIgLz4KLQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0KLQotCQk8L3hzZDpzY2hlbWE+Ci0JPC93c2RsOnR5cGVzPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iZ2V0U2FtcGxlUmVxdWVzdCI+Ci0JCTx3c2RsOnBhcnQgbmFtZT0ic2FtcGxlSWQiIHR5cGU9InhzZDpzdHJpbmciPjwvd3NkbDpwYXJ0PgotCTwvd3NkbDptZXNzYWdlPgotCTx3c2RsOm1lc3NhZ2UgbmFtZT0iZ2V0U2FtcGxlUmVzcG9uc2UiPgotCQk8d3NkbDpwYXJ0IG5hbWU9InJlcG9ydCIgZWxlbWVudD0idG5zOlNhbXBsZSI+PC93c2RsOnBhcnQ+Ci0JPC93c2RsOm1lc3NhZ2U+Ci0JPHdzZGw6cG9ydFR5cGUgbmFtZT0iU2FtcGxlUG9ydFR5cGUiPgotCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iZ2V0U2FtcGxlIj4KLQkJCTx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpnZXRTYW1wbGVSZXF1ZXN0Ij48L3dzZGw6aW5wdXQ+Ci0JCQk8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOmdldFNhbXBsZVJlc3BvbnNlIj48L3dzZGw6b3V0cHV0PgotCQk8L3dzZGw6b3BlcmF0aW9uPgotCTwvd3NkbDpwb3J0VHlwZT4KLQk8d3NkbDpiaW5kaW5nIG5hbWU9IlNhbXBsZUJpbmRpbmciIHR5cGU9InRuczpTYW1wbGVQb3J0VHlwZSI+Ci0JCTxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIgLz4KLQkJPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImdldFNhbXBsZSI+Ci0JCQk8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL2dldFNhbXBsZSIgLz4KLQkJCTx3c2RsOmlucHV0PgotCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgotCQkJPC93c2RsOmlucHV0PgotCQkJPHdzZGw6b3V0cHV0PgotCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgotCQkJPC93c2RsOm91dHB1dD4KLQkJPC93c2RsOm9wZXJhdGlvbj4KLQk8L3dzZGw6YmluZGluZz4KLQk8d3NkbDpzZXJ2aWNlIG5hbWU9IlNhbXBsZVNlcnZpY2UiPgotCQk8d3NkbDpwb3J0IG5hbWU9IlNhbXBsZVBvcnQiIGJpbmRpbmc9InRuczpTYW1wbGVCaW5kaW5nIj4KLQkJCTxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIC8+Ci0JCTwvd3NkbDpwb3J0PgotCTwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxMi0xL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxMi0xL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE5YjdiMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTItMS90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMTItMSI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24tY29uZm9ybWFudCB3c2RsIHRoYXQgZmFpbHMgdGVzdCBhc3NlcnRpb24gQlAyMDEyLgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIwMTIiIHRhZElEPSJTU0JQMTAiLz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIwMTIiIHRhZElEPSJBUDEwIi8+Ci0gIDwvZXhwZWN0ZWRGYWlsdXJlcz4KLTwvdGVzdGNhc2U+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDEyLTIvMjAxMi0yLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTItMi8yMDEyLTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTE2MTA4MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTItMi8yMDEyLTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbHNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmltcGw9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3MiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3MiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJvdmluY2UiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImNpdHkiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InN0cmVldCIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icG9zdGFsQ29kZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icGhvbmVOdW1iZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOlBob25lTnVtYmVyIi8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iUGhvbmVOdW1iZXIiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0iYXJlYSIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcmVmaXgiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ibnVtYmVyIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmV0dXJuIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxlbGVtZW50IG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJhZGRyZXNzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxlbGVtZW50IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlLz4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3NIZWFkZXJUeXBlIj4KLQk8YWxsPgotCSA8ZWxlbWVudCBuYW1lPSJhIiB0eXBlPSJpbnQiLz4KLQkgPGVsZW1lbnQgbmFtZT0iYiIgdHlwZT0iYm9vbGVhbiIvPgotCSA8ZWxlbWVudCBuYW1lPSJzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ic3RyaW5nIi8+Ci0JPC9hbGw+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzc0hlYWRlclR5cGUiLz4KLSAgPC9zY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpzYXZlQWRkcmVzcyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpQaG9uZU51bWJlciIvPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgZWxlbWVudD0iaW50ZjpBZGRyZXNzSGVhZGVyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkFkZHJlc3NCb29rU29hcEJpbmRpbmciIHR5cGU9ImludGY6QWRkcmVzc0Jvb2siPgotICAgIDx3c2Rsc29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpoZWFkZXIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiIHBhcnQ9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCI+Ci0gICAgICAgIDwvd3NkbHNvYXA6aGVhZGVyPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSBwYXJ0cz0icGFyYW1ldGVycyIgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJBZGRyZXNzQm9va1NlcnZpY2UiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iQWRkcmVzc0Jvb2siIGJpbmRpbmc9ImludGY6QWRkcmVzc0Jvb2tTb2FwQmluZGluZyI+Ci0gICAgICA8d3NkbHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL0FkZHJlc3NCb29rIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDEyLTIvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDEyLTIvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZThhZDVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxMi0yL3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjAxMi0yIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG5vbi1jb25mb3JtYW50IHdzZGwgdGhhdCBmYWlscyB0ZXN0IGFzc2VydGlvbiBCUDIwMTIuCi0gICAgCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAxMiIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAxMiIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTMtMS8yMDEzLTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxMy0xLzIwMTMtMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTkxMjRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxMy0xLzIwMTMtMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAKLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJhZGRyZXNzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgPHNlcXVlbmNlLz4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzc0hlYWRlclR5cGUiPgotCTxhbGw+Ci0JIDxlbGVtZW50IG5hbWU9ImEiIHR5cGU9ImludCIvPgotCSA8ZWxlbWVudCBuYW1lPSJiIiB0eXBlPSJib29sZWFuIi8+Ci0JIDxlbGVtZW50IG5hbWU9InMiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJzdHJpbmciLz4KLQk8L2FsbD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzSGVhZGVyIiB0eXBlPSJpbXBsOkFkZHJlc3NIZWFkZXJUeXBlIi8+Ci0gIDwvc2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3MiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IkFkZHJlc3NIZWFkZXIiIGVsZW1lbnQ9ImludGY6QWRkcmVzc0hlYWRlciIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iQWRkcmVzc0Jvb2siPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJBZGRyZXNzQm9va1NvYXBCaW5kaW5nIiB0eXBlPSJpbnRmOkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbHNvYXA6YmluZGluZyBzdHlsZT0icnBjIiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmhlYWRlciBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIgcGFydD0iQWRkcmVzc0hlYWRlciIgdXNlPSJsaXRlcmFsIj4KLSAgICAgICAgPC93c2Rsc29hcDpoZWFkZXI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHBhcnRzPSJwYXJhbWV0ZXJzIiB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQWRkcmVzc0Jvb2tTZXJ2aWNlIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IkFkZHJlc3NCb29rIiBiaW5kaW5nPSJpbnRmOkFkZHJlc3NCb29rU29hcEJpbmRpbmciPgotICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9BZGRyZXNzQm9vayIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxMy0xL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxMy0xL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWMzODhkNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTMtMS90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMTMtMSI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBjb25mb3JtYW50IHdzZGwgdXNlZCBpbiB0aGUgV1MtSSAKLSAgICBpbnRlcm9wZXJhYmlsaXR5IGRlbW8uCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAxMyIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAxMyIgdGFkSUQ9IkFQMTAiLz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIxMTIiIHRhZElEPSJTU0JQMTAiLz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIxMTIiIHRhZElEPSJBUDEwIi8+Ci0gICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxNC0xLzIwMTQtMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE0LTEvMjAxNC0xLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2MDAyNTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE0LTEvMjAxNC0xLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi08ZGVmaW5pdGlvbnMgCi0gICAgICAgIHhtbG5zOmh0dHA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvaHR0cC8iIAotICAgICAgICB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiAKLSAgICAgICAgeG1sbnM6cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgICAgICB4bWxuczpzMD0iaHR0cDovL3RlbXB1cmkub3JnLyIgCi0gICAgICAgIHhtbG5zOnNvYXBlbmM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIiAKLSAgICAgICAgeG1sbnM6dG09Imh0dHA6Ly9taWNyb3NvZnQuY29tL3dzZGwvbWltZS90ZXh0TWF0Y2hpbmcvIiAKLSAgICAgICAgeG1sbnM6bWltZT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9taW1lLyIgCi0gICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLQotICA8bWVzc2FnZSBuYW1lPSJlY2hvU3RyaW5nSW4iPgotICAgIDxwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9InM6c3RyaW5nIi8+Ci0gIDwvbWVzc2FnZT4KLSAgPG1lc3NhZ2UgbmFtZT0iZWNob1N0cmluZ091dCI+Ci0gICAgPHBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iczpzdHJpbmciIC8+Ci0gICAgPHBhcnQgbmFtZT0icGFyYW1ldGVyczEiIHR5cGU9InM6c3RyaW5nIi8+Ci0gICAgPHBhcnQgbmFtZT0icGFyYW1ldGVyczIiIHR5cGU9InM6c3RyaW5nIi8+Ci0gIDwvbWVzc2FnZT4KLSAgPHBvcnRUeXBlIG5hbWU9IkVjaG9Qb3J0VHlwZSI+Ci0gICAgPG9wZXJhdGlvbiBuYW1lPSJlY2hvU3RyaW5nIiBwYXJhbWV0ZXJPcmRlcj0icGFyYW1ldGVycyBwYXJhbWV0ZXJzMSBwYXJhbWV0ZXJzMiI+Ci0gICAgICA8aW5wdXQgbWVzc2FnZT0iczA6ZWNob1N0cmluZ0luIiAvPgotICAgICAgPG91dHB1dCBtZXNzYWdlPSJzMDplY2hvU3RyaW5nT3V0IiAvPgotICAgIDwvb3BlcmF0aW9uPgotICAgPC9wb3J0VHlwZT4KLSAgPGJpbmRpbmcgbmFtZT0iRWNob0JpbmRpbmciIHR5cGU9InMwOkVjaG9Qb3J0VHlwZSI+Ci0gICAgPHNvYXA6YmluZGluZyB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIgc3R5bGU9InJwYyIgLz4KLSAgICA8b3BlcmF0aW9uIG5hbWU9ImVjaG9TdHJpbmciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9lY2hvU3RyaW5nIiBzdHlsZT0icnBjIiAvPgotICAgICAgPGlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHA6Ly9vcmcub3JnIi8+Ci0gICAgICA8L2lucHV0PgotICAgICAgPG91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHRwOi8vb3JnLm9yZyIgLz4KLSAgICAgIDwvb3V0cHV0PgotICAgIDwvb3BlcmF0aW9uPgotIDwvYmluZGluZz4KLSAgPHNlcnZpY2UgbmFtZT0iRWNob1NlcnZpY2UiPgotICAgIDxwb3J0IG5hbWU9IkVjaG9Qb3J0IiBiaW5kaW5nPSJzMDpFY2hvQmluZGluZyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgPC9wb3J0PgotICA8L3NlcnZpY2U+Ci08L2RlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxNC0xL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxNC0xL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDY2NzVmOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTQtMS90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjAxNC0xIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIGNvbmZvcm1hbnQgd3NkbCBjb250YWluaW5nIGEgd3NkbDpvcGVyYXRpb24gCi0gICAgd2l0aCBhIHBhcmFtZXRlck9yZGVyIGF0dHJpYnV0ZS4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXMvPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTQtMi8yMDE0LTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxNC0yLzIwMTQtMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjUzMDY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxNC0yLzIwMTQtMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotPGRlZmluaXRpb25zIAotICAgICAgICB4bWxuczpodHRwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvIiAKLSAgICAgICAgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgCi0gICAgICAgIHhtbG5zOnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICAgICAgeG1sbnM6czA9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIAotICAgICAgICB4bWxuczpzb2FwZW5jPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgCi0gICAgICAgIHhtbG5zOnRtPSJodHRwOi8vbWljcm9zb2Z0LmNvbS93c2RsL21pbWUvdGV4dE1hdGNoaW5nLyIgCi0gICAgICAgIHhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iIAotICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0KLSAgPG1lc3NhZ2UgbmFtZT0iZWNob1N0cmluZ0luIj4KLSAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJzOnN0cmluZyIvPgotICA8L21lc3NhZ2U+Ci0gIDxtZXNzYWdlIG5hbWU9ImVjaG9TdHJpbmdPdXQiPgotICAgIDxwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9InM6c3RyaW5nIiAvPgotICAgIDxwYXJ0IG5hbWU9InBhcmFtZXRlcnMxIiB0eXBlPSJzOnN0cmluZyIvPgotICAgIDxwYXJ0IG5hbWU9InBhcmFtZXRlcnMyIiB0eXBlPSJzOnN0cmluZyIvPgotICA8L21lc3NhZ2U+Ci0gIDxwb3J0VHlwZSBuYW1lPSJFY2hvUG9ydFR5cGUiPgotICAgIDxvcGVyYXRpb24gbmFtZT0iZWNob1N0cmluZyIgcGFyYW1ldGVyT3JkZXI9InBhcmFtZXRlcnMgcGFyYW1ldGVyczEiPgotICAgICAgPGlucHV0IG1lc3NhZ2U9InMwOmVjaG9TdHJpbmdJbiIgLz4KLSAgICAgIDxvdXRwdXQgbWVzc2FnZT0iczA6ZWNob1N0cmluZ091dCIgLz4KLSAgICA8L29wZXJhdGlvbj4KLSAgIDwvcG9ydFR5cGU+Ci0gIDxiaW5kaW5nIG5hbWU9IkVjaG9CaW5kaW5nIiB0eXBlPSJzMDpFY2hvUG9ydFR5cGUiPgotICAgIDxzb2FwOmJpbmRpbmcgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiIHN0eWxlPSJycGMiIC8+Ci0gICAgPG9wZXJhdGlvbiBuYW1lPSJlY2hvU3RyaW5nIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvZWNob1N0cmluZyIgc3R5bGU9InJwYyIgLz4KLSAgICAgIDxpbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHRwOi8vb3JnLm9yZyIvPgotICAgICAgPC9pbnB1dD4KLSAgICAgIDxvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0cDovL29yZy5vcmciIC8+Ci0gICAgICA8L291dHB1dD4KLSAgICA8L29wZXJhdGlvbj4KLSA8L2JpbmRpbmc+Ci0gIDxzZXJ2aWNlIG5hbWU9IkVjaG9TZXJ2aWNlIj4KLSAgICA8cG9ydCBuYW1lPSJFY2hvUG9ydCIgYmluZGluZz0iczA6RWNob0JpbmRpbmciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgIDwvcG9ydD4KLSAgPC9zZXJ2aWNlPgotPC9kZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTQtMi90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTQtMi90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1NWI0MDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE0LTIvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMTQtMiI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBjb25mb3JtYW50IHdzZGwgY29udGFpbmluZyBhIHdzZGw6b3BlcmF0aW9uIAotICAgIHdpdGggYSBwYXJhbWV0ZXJPcmRlciBhdHRyaWJ1dGUuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzLz4KLTwvdGVzdGNhc2U+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE0LTMvMjAxNC0zLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTQtMy8yMDE0LTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWJlNzkyYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTQtMy8yMDE0LTMud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLTxkZWZpbml0aW9ucyAKLSAgICAgICAgeG1sbnM6aHR0cD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9odHRwLyIgCi0gICAgICAgIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIAotICAgICAgICB4bWxuczpzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgICAgIHhtbG5zOnMwPSJodHRwOi8vdGVtcHVyaS5vcmcvIiAKLSAgICAgICAgeG1sbnM6c29hcGVuYz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iIAotICAgICAgICB4bWxuczp0bT0iaHR0cDovL21pY3Jvc29mdC5jb20vd3NkbC9taW1lL3RleHRNYXRjaGluZy8iIAotICAgICAgICB4bWxuczptaW1lPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL21pbWUvIiAKLSAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotCi0gIDxtZXNzYWdlIG5hbWU9ImVjaG9TdHJpbmdJbiI+Ci0gICAgPHBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iczpzdHJpbmciLz4KLSAgPC9tZXNzYWdlPgotICA8bWVzc2FnZSBuYW1lPSJlY2hvU3RyaW5nT3V0Ij4KLSAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJzOnN0cmluZyIgLz4KLSAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzMSIgdHlwZT0iczpzdHJpbmciLz4KLSAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzMiIgdHlwZT0iczpzdHJpbmciLz4KLSAgPC9tZXNzYWdlPgotICA8cG9ydFR5cGUgbmFtZT0iRWNob1BvcnRUeXBlIj4KLSAgICA8b3BlcmF0aW9uIG5hbWU9ImVjaG9TdHJpbmciIHBhcmFtZXRlck9yZGVyPSJwYXJhbWV0ZXJzIj4KLSAgICAgIDxpbnB1dCBtZXNzYWdlPSJzMDplY2hvU3RyaW5nSW4iIC8+Ci0gICAgICA8b3V0cHV0IG1lc3NhZ2U9InMwOmVjaG9TdHJpbmdPdXQiIC8+Ci0gICAgPC9vcGVyYXRpb24+Ci0gICA8L3BvcnRUeXBlPgotICA8YmluZGluZyBuYW1lPSJFY2hvQmluZGluZyIgdHlwZT0iczA6RWNob1BvcnRUeXBlIj4KLSAgICA8c29hcDpiaW5kaW5nIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIiBzdHlsZT0icnBjIiAvPgotICAgIDxvcGVyYXRpb24gbmFtZT0iZWNob1N0cmluZyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL2VjaG9TdHJpbmciIHN0eWxlPSJycGMiIC8+Ci0gICAgICA8aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0cDovL29yZy5vcmciLz4KLSAgICAgIDwvaW5wdXQ+Ci0gICAgICA8b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHA6Ly9vcmcub3JnIiAvPgotICAgICAgPC9vdXRwdXQ+Ci0gICAgPC9vcGVyYXRpb24+Ci0gPC9iaW5kaW5nPgotICA8c2VydmljZSBuYW1lPSJFY2hvU2VydmljZSI+Ci0gICAgPHBvcnQgbmFtZT0iRWNob1BvcnQiIGJpbmRpbmc9InMwOkVjaG9CaW5kaW5nIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICA8L3BvcnQ+Ci0gIDwvc2VydmljZT4KLTwvZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE0LTMvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE0LTMvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzcyYzczLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxNC0zL3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjAxNC0xIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIGNvbmZvcm1hbnQgd3NkbCBjb250YWluaW5nIGEgd3NkbDpvcGVyYXRpb24gCi0gICAgd2l0aCBhIHBhcmFtZXRlck9yZGVyIGF0dHJpYnV0ZS4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXM+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMDE0IiB0YWRJRD0iU1NCUDEwIi8+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMDE0IiB0YWRJRD0iQVAxMCIvPgotICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxNy0xLzIwMTctMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE3LTEvMjAxNy0xLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2YzVkNzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE3LTEvMjAxNy0xLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkcmVzcyIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgPHNlcXVlbmNlLz4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzc0hlYWRlclR5cGUiPgotCTxhbGw+Ci0JIDxlbGVtZW50IG5hbWU9ImEiIHR5cGU9ImludCIvPgotCSA8ZWxlbWVudCBuYW1lPSJiIiB0eXBlPSJib29sZWFuIi8+Ci0JIDxlbGVtZW50IG5hbWU9InMiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJzdHJpbmciLz4KLQk8L2FsbD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzSGVhZGVyVHlwZSIvPgotICA8L3NjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJpbnRmOnNhdmVBZGRyZXNzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzIi8+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBlbGVtZW50PSJpbnRmOkFkZHJlc3NIZWFkZXIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQWRkcmVzc0Jvb2tTb2FwQmluZGluZyIgdHlwZT0iaW50ZjpBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGxzb2FwOmJpbmRpbmcgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzdHlsZT0iZG9jdW1lbnQiIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmhlYWRlciBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIgcGFydD0iQWRkcmVzc0hlYWRlciIgdXNlPSJsaXRlcmFsIj4KLSAgICAgICAgPC93c2Rsc29hcDpoZWFkZXI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHBhcnRzPSJwYXJhbWV0ZXJzIiB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc3R5bGU9InJwYyIgc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkFkZHJlc3NCb29rU2VydmljZSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJBZGRyZXNzQm9vayIgYmluZGluZz0iaW50ZjpBZGRyZXNzQm9va1NvYXBCaW5kaW5nIj4KLSAgICAgIDx3c2Rsc29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvQWRkcmVzc0Jvb2siLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTctMS90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTctMS90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1ZGE5NDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE3LTEvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSIyMDE3LTEiPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgbm9uLWNvbmZvcm1hbnQgd3NkbCBjb250YWluaW5nIAotICAgIG11bHRpcGxlIHN0eWxlIHZhbHVlcyB3aXRoaW4gdGhlIHNhbWUgYmluZGluZy4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXM+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMDE3IiB0YWRJRD0iU1NCUDEwIi8+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMDE3IiB0YWRJRD0iQVAxMCIvPgotICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxNy0yLzIwMTctMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE3LTIvMjAxNy0yLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiOTBlZDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE3LTIvMjAxNy0yLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkcmVzcyIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgPHNlcXVlbmNlLz4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzc0hlYWRlclR5cGUiPgotCTxhbGw+Ci0JIDxlbGVtZW50IG5hbWU9ImEiIHR5cGU9ImludCIvPgotCSA8ZWxlbWVudCBuYW1lPSJiIiB0eXBlPSJib29sZWFuIi8+Ci0JIDxlbGVtZW50IG5hbWU9InMiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJzdHJpbmciLz4KLQk8L2FsbD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzSGVhZGVyVHlwZSIvPgotICA8L3NjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJpbnRmOnNhdmVBZGRyZXNzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzIi8+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBlbGVtZW50PSJpbnRmOkFkZHJlc3NIZWFkZXIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iQWRkcmVzc0Jvb2syIj4KLSAgICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkFkZHJlc3NCb29rU29hcEJpbmRpbmciIHR5cGU9ImludGY6QWRkcmVzc0Jvb2siPgotICAgIDx3c2Rsc29hcDpiaW5kaW5nIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc3R5bGU9ImRvY3VtZW50IiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpoZWFkZXIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiIHBhcnQ9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCI+Ci0gICAgICAgIDwvd3NkbHNvYXA6aGVhZGVyPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSBwYXJ0cz0icGFyYW1ldGVycyIgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJBZGRyZXNzQm9va1NvYXBCaW5kaW5nMiIgdHlwZT0iaW50ZjpBZGRyZXNzQm9vazIiPgotICAgIDx3c2Rsc29hcDpiaW5kaW5nIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc3R5bGU9InJwYyIgc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkFkZHJlc3NCb29rU2VydmljZSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJBZGRyZXNzQm9vayIgYmluZGluZz0iaW50ZjpBZGRyZXNzQm9va1NvYXBCaW5kaW5nIj4KLSAgICAgIDx3c2Rsc29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvQWRkcmVzc0Jvb2siLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTctMi90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTctMi90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyNmUzMGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE3LTIvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMTctMiI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBjb25mb3JtYW50IHdzZGwgY29udGFpbmluZyAKLSAgICBtdWx0aXBsZSBzdHlsZSB2YWx1ZXMgYnV0IGluIGRpZmZlcmVudCBiaW5kaW5ncy4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXMvPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTgtMS8yMDE4LTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC0xLzIwMTgtMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjJhZjliLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC0xLzIwMTgtMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotPGRlZmluaXRpb25zIAotICAgICAgICB4bWxuczpodHRwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvIiAKLSAgICAgICAgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgCi0gICAgICAgIHhtbG5zOnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICAgICAgeG1sbnM6czA9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIAotICAgICAgICB4bWxuczpzb2FwZW5jPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgCi0gICAgICAgIHhtbG5zOnRtPSJodHRwOi8vbWljcm9zb2Z0LmNvbS93c2RsL21pbWUvdGV4dE1hdGNoaW5nLyIgCi0gICAgICAgIHhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iIAotICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDxkb2N1bWVudGF0aW9uPgotICA8L2RvY3VtZW50YXRpb24+Ci0gIDx0eXBlcy8+Ci0gIDxtZXNzYWdlIG5hbWU9ImVjaG9TdHJpbmdJbiI+Ci0gICAgPHBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iczpzdHJpbmciLz4KLSAgPC9tZXNzYWdlPgotICA8bWVzc2FnZSBuYW1lPSJlY2hvU3RyaW5nT3V0Ij4KLSAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJzOnN0cmluZyIgLz4KLSAgPC9tZXNzYWdlPgotICA8cG9ydFR5cGUgbmFtZT0iRWNob1BvcnRUeXBlIj4KLSAgICA8b3BlcmF0aW9uIG5hbWU9ImVjaG9TdHJpbmciIHBhcmFtZXRlck9yZGVyPSJwYXJhbWV0ZXJzIj4KLSAgICAgIDxpbnB1dCBtZXNzYWdlPSJzMDplY2hvU3RyaW5nSW4iIC8+Ci0gICAgICA8b3V0cHV0IG1lc3NhZ2U9InMwOmVjaG9TdHJpbmdPdXQiIC8+Ci0gICAgPC9vcGVyYXRpb24+Ci0gICA8L3BvcnRUeXBlPgotICA8YmluZGluZyBuYW1lPSJFY2hvQmluZGluZyIgdHlwZT0iczA6RWNob1BvcnRUeXBlIj4KLSAgICA8c29hcDpiaW5kaW5nIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIiBzdHlsZT0icnBjIiAvPgotICAgIDxvcGVyYXRpb24gbmFtZT0iZWNob1N0cmluZyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL2VjaG9TdHJpbmciIHN0eWxlPSJycGMiIC8+Ci0gICAgICA8aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0cDovL29yZy5vcmciLz4KLSAgICAgIDwvaW5wdXQ+Ci0gICAgICA8b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHA6Ly9vcmcub3JnIiAvPgotICAgICAgPC9vdXRwdXQ+Ci0gICAgPC9vcGVyYXRpb24+Ci0gPC9iaW5kaW5nPgotICA8c2VydmljZSBuYW1lPSJFY2hvU2VydmljZSI+Ci0gICAgPHBvcnQgbmFtZT0iRWNob1BvcnQiIGJpbmRpbmc9InMwOkVjaG9CaW5kaW5nIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICA8L3BvcnQ+Ci0gIDwvc2VydmljZT4KLTwvZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTEvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTEvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNGY2NTM2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC0xL3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSIyMDE4LTEiPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgY29uZm9ybWFudCB3c2RsIGNvbnRhaW5pbmcgYSBkb2N1bWVudGF0aW9uCi0gICAgZWxlbWVudCBwcmVjZWRpbmcgdGhlIHR5cGVzIGVsZW1lbnQuIAotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcy8+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC0yLzIwMTgtMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTIvMjAxOC0yLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0N2I5NjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTIvMjAxOC0yLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi08ZGVmaW5pdGlvbnMgCi0gICAgICAgIHhtbG5zOmh0dHA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvaHR0cC8iIAotICAgICAgICB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiAKLSAgICAgICAgeG1sbnM6cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgICAgICB4bWxuczpzMD0iaHR0cDovL3RlbXB1cmkub3JnLyIgCi0gICAgICAgIHhtbG5zOnNvYXBlbmM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIiAKLSAgICAgICAgeG1sbnM6dG09Imh0dHA6Ly9taWNyb3NvZnQuY29tL3dzZGwvbWltZS90ZXh0TWF0Y2hpbmcvIiAKLSAgICAgICAgeG1sbnM6bWltZT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9taW1lLyIgCi0gICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgPGRvY3VtZW50YXRpb24+Ci0gIDwvZG9jdW1lbnRhdGlvbj4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8yMDE4YSIgbG9jYXRpb249IjIwMThhLndzZGwiLz4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8yMDE4YiIgbG9jYXRpb249IjIwMThiLndzZGwiLz4KLSAgPHR5cGVzLz4KLSAgCi0gIDxtZXNzYWdlIG5hbWU9ImVjaG9TdHJpbmdJbiI+Ci0gICAgPHBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iczpzdHJpbmciLz4KLSAgPC9tZXNzYWdlPgotICA8bWVzc2FnZSBuYW1lPSJlY2hvU3RyaW5nT3V0Ij4KLSAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJzOnN0cmluZyIgLz4KLSAgPC9tZXNzYWdlPgotICA8cG9ydFR5cGUgbmFtZT0iRWNob1BvcnRUeXBlIj4KLSAgICA8b3BlcmF0aW9uIG5hbWU9ImVjaG9TdHJpbmciIHBhcmFtZXRlck9yZGVyPSJwYXJhbWV0ZXJzIj4KLSAgICAgIDxpbnB1dCBtZXNzYWdlPSJzMDplY2hvU3RyaW5nSW4iIC8+Ci0gICAgICA8b3V0cHV0IG1lc3NhZ2U9InMwOmVjaG9TdHJpbmdPdXQiIC8+Ci0gICAgPC9vcGVyYXRpb24+Ci0gICA8L3BvcnRUeXBlPgotICA8YmluZGluZyBuYW1lPSJFY2hvQmluZGluZyIgdHlwZT0iczA6RWNob1BvcnRUeXBlIj4KLSAgICA8c29hcDpiaW5kaW5nIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIiBzdHlsZT0icnBjIiAvPgotICAgIDxvcGVyYXRpb24gbmFtZT0iZWNob1N0cmluZyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL2VjaG9TdHJpbmciIHN0eWxlPSJycGMiIC8+Ci0gICAgICA8aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0cDovL29yZy5vcmciLz4KLSAgICAgIDwvaW5wdXQ+Ci0gICAgICA8b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHA6Ly9vcmcub3JnIiAvPgotICAgICAgPC9vdXRwdXQ+Ci0gICAgPC9vcGVyYXRpb24+Ci0gPC9iaW5kaW5nPgotICA8c2VydmljZSBuYW1lPSJFY2hvU2VydmljZSI+Ci0gICAgPHBvcnQgbmFtZT0iRWNob1BvcnQiIGJpbmRpbmc9InMwOkVjaG9CaW5kaW5nIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICA8L3BvcnQ+Ci0gIDwvc2VydmljZT4KLTwvZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTIvMjAxOGEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC0yLzIwMThhLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1OGQ5NmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTIvMjAxOGEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTxkZWZpbml0aW9ucyAKLSAgICAgICAgeG1sbnM6aHR0cD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9odHRwLyIgCi0gICAgICAgIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIAotICAgICAgICB4bWxuczpzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgICAgIHhtbG5zOnMwPSJodHRwOi8vdGVtcHVyaS5vcmcvMjAxOGEiIAotICAgICAgICB4bWxuczpzb2FwZW5jPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgCi0gICAgICAgIHhtbG5zOnRtPSJodHRwOi8vbWljcm9zb2Z0LmNvbS93c2RsL21pbWUvdGV4dE1hdGNoaW5nLyIgCi0gICAgICAgIHhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iIAotICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8yMDE4YSIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLTwvZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTIvMjAxOGIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC0yLzIwMThiLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0MzJlYzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTIvMjAxOGIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTxkZWZpbml0aW9ucyAKLSAgICAgICAgeG1sbnM6aHR0cD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9odHRwLyIgCi0gICAgICAgIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIAotICAgICAgICB4bWxuczpzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgICAgIHhtbG5zOnMwPSJodHRwOi8vdGVtcHVyaS5vcmcvMjAxOGIiIAotICAgICAgICB4bWxuczpzb2FwZW5jPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgCi0gICAgICAgIHhtbG5zOnRtPSJodHRwOi8vbWljcm9zb2Z0LmNvbS93c2RsL21pbWUvdGV4dE1hdGNoaW5nLyIgCi0gICAgICAgIHhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iIAotICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8yMDE4YiIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLTwvZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTIvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTIvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjZjNTQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC0yL3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSIyMDE4LTEiPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgY29uZm9ybWFudCB3c2RsIGNvbnRhaW5pbmcgYSBkb2N1bWVudGF0aW9uCi0gICAgZWxlbWVudCBhbmQgMiBpbXBvcnQgZWxlbWVudHMgcHJlY2VkaW5nIHRoZSB0eXBlcyBlbGVtZW50LiAKLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXMvPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTgtMy8yMDE4LTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC0zLzIwMTgtMy53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDBkODViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC0zLzIwMTgtMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotPGRlZmluaXRpb25zIAotICAgICAgICB4bWxuczpodHRwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvIiAKLSAgICAgICAgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgCi0gICAgICAgIHhtbG5zOnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICAgICAgeG1sbnM6czA9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIAotICAgICAgICB4bWxuczpzb2FwZW5jPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgCi0gICAgICAgIHhtbG5zOnRtPSJodHRwOi8vbWljcm9zb2Z0LmNvbS93c2RsL21pbWUvdGV4dE1hdGNoaW5nLyIgCi0gICAgICAgIHhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iIAotICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDxkb2N1bWVudGF0aW9uPgotICA8L2RvY3VtZW50YXRpb24+Ci0gIDxtZXNzYWdlIG5hbWU9ImVjaG9TdHJpbmdJbiI+Ci0gICAgPHBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iczpzdHJpbmciLz4KLSAgPC9tZXNzYWdlPgotICA8dHlwZXMvPgotICA8bWVzc2FnZSBuYW1lPSJlY2hvU3RyaW5nT3V0Ij4KLSAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJzOnN0cmluZyIgLz4KLSAgPC9tZXNzYWdlPgotICA8cG9ydFR5cGUgbmFtZT0iRWNob1BvcnRUeXBlIj4KLSAgICA8b3BlcmF0aW9uIG5hbWU9ImVjaG9TdHJpbmciIHBhcmFtZXRlck9yZGVyPSJwYXJhbWV0ZXJzIj4KLSAgICAgIDxpbnB1dCBtZXNzYWdlPSJzMDplY2hvU3RyaW5nSW4iIC8+Ci0gICAgICA8b3V0cHV0IG1lc3NhZ2U9InMwOmVjaG9TdHJpbmdPdXQiIC8+Ci0gICAgPC9vcGVyYXRpb24+Ci0gICA8L3BvcnRUeXBlPgotICA8YmluZGluZyBuYW1lPSJFY2hvQmluZGluZyIgdHlwZT0iczA6RWNob1BvcnRUeXBlIj4KLSAgICA8c29hcDpiaW5kaW5nIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIiBzdHlsZT0icnBjIiAvPgotICAgIDxvcGVyYXRpb24gbmFtZT0iZWNob1N0cmluZyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL2VjaG9TdHJpbmciIHN0eWxlPSJycGMiIC8+Ci0gICAgICA8aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0cDovL29yZy5vcmciLz4KLSAgICAgIDwvaW5wdXQ+Ci0gICAgICA8b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHA6Ly9vcmcub3JnIiAvPgotICAgICAgPC9vdXRwdXQ+Ci0gICAgPC9vcGVyYXRpb24+Ci0gPC9iaW5kaW5nPgotICA8c2VydmljZSBuYW1lPSJFY2hvU2VydmljZSI+Ci0gICAgPHBvcnQgbmFtZT0iRWNob1BvcnQiIGJpbmRpbmc9InMwOkVjaG9CaW5kaW5nIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICA8L3BvcnQ+Ci0gIDwvc2VydmljZT4KLTwvZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTMvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTMvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTM0NjRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC0zL3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjAxOC0zIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG5vbiBjb25mb3JtYW50IHdzZGwgY29udGFpbmluZyBhIG1lc3NhZ2UKLSAgICBlbGVtZW50IHByZWNlZGluZyB0aGUgdHlwZXMgZWxlbWVudC4gCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjAxOCIgdGFkSUQ9IlNTQlAxMCIvPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjAxOCIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTgtNC8yMDE4LTQud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC00LzIwMTgtNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDA1ODkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC00LzIwMTgtNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotPGRlZmluaXRpb25zIAotICAgICAgICB4bWxuczpodHRwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvIiAKLSAgICAgICAgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgCi0gICAgICAgIHhtbG5zOnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICAgICAgeG1sbnM6czA9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIAotICAgICAgICB4bWxuczpzb2FwZW5jPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgCi0gICAgICAgIHhtbG5zOnRtPSJodHRwOi8vbWljcm9zb2Z0LmNvbS93c2RsL21pbWUvdGV4dE1hdGNoaW5nLyIgCi0gICAgICAgIHhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iIAotICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDxkb2N1bWVudGF0aW9uPgotICA8L2RvY3VtZW50YXRpb24+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvMjAxOGEiIGxvY2F0aW9uPSIyMDE4YS53c2RsIi8+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvMjAxOGIiIGxvY2F0aW9uPSIyMDE4Yi53c2RsIi8+Ci0gIDxtZXNzYWdlIG5hbWU9ImVjaG9TdHJpbmdJbiI+Ci0gICAgPHBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iczpzdHJpbmciLz4KLSAgPC9tZXNzYWdlPgotICA8dHlwZXMvPgotICA8bWVzc2FnZSBuYW1lPSJlY2hvU3RyaW5nT3V0Ij4KLSAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJzOnN0cmluZyIgLz4KLSAgPC9tZXNzYWdlPgotICA8cG9ydFR5cGUgbmFtZT0iRWNob1BvcnRUeXBlIj4KLSAgICA8b3BlcmF0aW9uIG5hbWU9ImVjaG9TdHJpbmciIHBhcmFtZXRlck9yZGVyPSJwYXJhbWV0ZXJzIj4KLSAgICAgIDxpbnB1dCBtZXNzYWdlPSJzMDplY2hvU3RyaW5nSW4iIC8+Ci0gICAgICA8b3V0cHV0IG1lc3NhZ2U9InMwOmVjaG9TdHJpbmdPdXQiIC8+Ci0gICAgPC9vcGVyYXRpb24+Ci0gICA8L3BvcnRUeXBlPgotICA8YmluZGluZyBuYW1lPSJFY2hvQmluZGluZyIgdHlwZT0iczA6RWNob1BvcnRUeXBlIj4KLSAgICA8c29hcDpiaW5kaW5nIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIiBzdHlsZT0icnBjIiAvPgotICAgIDxvcGVyYXRpb24gbmFtZT0iZWNob1N0cmluZyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL2VjaG9TdHJpbmciIHN0eWxlPSJycGMiIC8+Ci0gICAgICA8aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0cDovL29yZy5vcmciLz4KLSAgICAgIDwvaW5wdXQ+Ci0gICAgICA8b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHA6Ly9vcmcub3JnIiAvPgotICAgICAgPC9vdXRwdXQ+Ci0gICAgPC9vcGVyYXRpb24+Ci0gPC9iaW5kaW5nPgotICA8c2VydmljZSBuYW1lPSJFY2hvU2VydmljZSI+Ci0gICAgPHBvcnQgbmFtZT0iRWNob1BvcnQiIGJpbmRpbmc9InMwOkVjaG9CaW5kaW5nIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICA8L3BvcnQ+Ci0gIDwvc2VydmljZT4KLTwvZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTQvMjAxOGEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC00LzIwMThhLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1OGQ5NmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTQvMjAxOGEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTxkZWZpbml0aW9ucyAKLSAgICAgICAgeG1sbnM6aHR0cD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9odHRwLyIgCi0gICAgICAgIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIAotICAgICAgICB4bWxuczpzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgICAgIHhtbG5zOnMwPSJodHRwOi8vdGVtcHVyaS5vcmcvMjAxOGEiIAotICAgICAgICB4bWxuczpzb2FwZW5jPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgCi0gICAgICAgIHhtbG5zOnRtPSJodHRwOi8vbWljcm9zb2Z0LmNvbS93c2RsL21pbWUvdGV4dE1hdGNoaW5nLyIgCi0gICAgICAgIHhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iIAotICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8yMDE4YSIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLTwvZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTQvMjAxOGIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC00LzIwMThiLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0MzJlYzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTQvMjAxOGIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTxkZWZpbml0aW9ucyAKLSAgICAgICAgeG1sbnM6aHR0cD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9odHRwLyIgCi0gICAgICAgIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIAotICAgICAgICB4bWxuczpzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgICAgIHhtbG5zOnMwPSJodHRwOi8vdGVtcHVyaS5vcmcvMjAxOGIiIAotICAgICAgICB4bWxuczpzb2FwZW5jPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgCi0gICAgICAgIHhtbG5zOnRtPSJodHRwOi8vbWljcm9zb2Z0LmNvbS93c2RsL21pbWUvdGV4dE1hdGNoaW5nLyIgCi0gICAgICAgIHhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iIAotICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8yMDE4YiIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLTwvZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTQvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTQvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTM1OTFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC00L3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjAxOC00Ij4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG5vbiBjb25mb3JtYW50IHdzZGwgY29udGFpbmluZyBhIG1lc3NhZ2UKLSAgICBlbGVtZW50IHByZWNlZGluZyB0aGUgdHlwZXMgZWxlbWVudC4gCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjAxOCIgdGFkSUQ9IlNTQlAxMCIvPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjAxOCIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTgtNS8yMDE4LTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC01LzIwMTgtNS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MWI5YTYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC01LzIwMTgtNS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPGRlZmluaXRpb25zIAotICAgICAgICB4bWxuczpodHRwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvIiAKLSAgICAgICAgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgCi0gICAgICAgIHhtbG5zOnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICAgICAgeG1sbnM6czA9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIAotICAgICAgICB4bWxuczpzb2FwZW5jPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgCi0gICAgICAgIHhtbG5zOnRtPSJodHRwOi8vbWljcm9zb2Z0LmNvbS93c2RsL21pbWUvdGV4dE1hdGNoaW5nLyIgCi0gICAgICAgIHhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iIAotICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDxkb2N1bWVudGF0aW9uPgotICA8L2RvY3VtZW50YXRpb24+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvMjAxOGEiIGxvY2F0aW9uPSIyMDE4YS53c2RsIi8+Ci08L2RlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC01LzIwMThhLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTgtNS8yMDE4YS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZGFmNTVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC01LzIwMThhLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi08ZGVmaW5pdGlvbnMgCi0gICAgICAgIHhtbG5zOmh0dHA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvaHR0cC8iIAotICAgICAgICB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiAKLSAgICAgICAgeG1sbnM6cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgICAgICB4bWxuczpzMD0iaHR0cDovL3RlbXB1cmkub3JnLzIwMThhIiAKLSAgICAgICAgeG1sbnM6c29hcGVuYz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iIAotICAgICAgICB4bWxuczp0bT0iaHR0cDovL21pY3Jvc29mdC5jb20vd3NkbC9taW1lL3RleHRNYXRjaGluZy8iIAotICAgICAgICB4bWxuczptaW1lPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL21pbWUvIiAKLSAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvMjAxOGEiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDxkb2N1bWVudGF0aW9uPgotICA8L2RvY3VtZW50YXRpb24+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvMjAxOGIiIGxvY2F0aW9uPSIyMDE4Yi53c2RsIi8+Ci0gIDxtZXNzYWdlIG5hbWU9ImVjaG9TdHJpbmdJbiI+Ci0gICAgPHBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iczpzdHJpbmciLz4KLSAgPC9tZXNzYWdlPgotICA8dHlwZXMvPgotICA8bWVzc2FnZSBuYW1lPSJlY2hvU3RyaW5nT3V0Ij4KLSAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJzOnN0cmluZyIgLz4KLSAgPC9tZXNzYWdlPgotICA8cG9ydFR5cGUgbmFtZT0iRWNob1BvcnRUeXBlIj4KLSAgICA8b3BlcmF0aW9uIG5hbWU9ImVjaG9TdHJpbmciIHBhcmFtZXRlck9yZGVyPSJwYXJhbWV0ZXJzIj4KLSAgICAgIDxpbnB1dCBtZXNzYWdlPSJzMDplY2hvU3RyaW5nSW4iIC8+Ci0gICAgICA8b3V0cHV0IG1lc3NhZ2U9InMwOmVjaG9TdHJpbmdPdXQiIC8+Ci0gICAgPC9vcGVyYXRpb24+Ci0gICA8L3BvcnRUeXBlPgotICA8YmluZGluZyBuYW1lPSJFY2hvQmluZGluZyIgdHlwZT0iczA6RWNob1BvcnRUeXBlIj4KLSAgICA8c29hcDpiaW5kaW5nIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIiBzdHlsZT0icnBjIiAvPgotICAgIDxvcGVyYXRpb24gbmFtZT0iZWNob1N0cmluZyI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL2VjaG9TdHJpbmciIHN0eWxlPSJycGMiIC8+Ci0gICAgICA8aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0cDovL29yZy5vcmciLz4KLSAgICAgIDwvaW5wdXQ+Ci0gICAgICA8b3V0cHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHA6Ly9vcmcub3JnIiAvPgotICAgICAgPC9vdXRwdXQ+Ci0gICAgPC9vcGVyYXRpb24+Ci0gPC9iaW5kaW5nPgotICA8c2VydmljZSBuYW1lPSJFY2hvU2VydmljZSI+Ci0gICAgPHBvcnQgbmFtZT0iRWNob1BvcnQiIGJpbmRpbmc9InMwOkVjaG9CaW5kaW5nIj4KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICA8L3BvcnQ+Ci0gIDwvc2VydmljZT4KLTwvZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTUvMjAxOGIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC01LzIwMThiLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0MzJlYzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTUvMjAxOGIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTxkZWZpbml0aW9ucyAKLSAgICAgICAgeG1sbnM6aHR0cD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9odHRwLyIgCi0gICAgICAgIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIAotICAgICAgICB4bWxuczpzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgICAgIHhtbG5zOnMwPSJodHRwOi8vdGVtcHVyaS5vcmcvMjAxOGIiIAotICAgICAgICB4bWxuczpzb2FwZW5jPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgCi0gICAgICAgIHhtbG5zOnRtPSJodHRwOi8vbWljcm9zb2Z0LmNvbS93c2RsL21pbWUvdGV4dE1hdGNoaW5nLyIgCi0gICAgICAgIHhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iIAotICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8yMDE4YiIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLTwvZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTUvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE4LTUvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTM1OTFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOC01L3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjAxOC00Ij4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG5vbiBjb25mb3JtYW50IHdzZGwgY29udGFpbmluZyBhIG1lc3NhZ2UKLSAgICBlbGVtZW50IHByZWNlZGluZyB0aGUgdHlwZXMgZWxlbWVudC4gCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjAxOCIgdGFkSUQ9IlNTQlAxMCIvPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjAxOCIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTktMS8yMDE5LTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOS0xLzIwMTktMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDc1MmRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOS0xLzIwMTktMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2Rsc29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6aW1wbD0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICA8d3NkbDp0eXBlcz4KLSAgICA8c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzcyI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcm92aW5jZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0iY2l0eSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ic3RyZWV0IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwb3N0YWxDb2RlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwaG9uZU51bWJlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6UGhvbmVOdW1iZXIiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJQaG9uZU51bWJlciI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJhcmVhIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByZWZpeCIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJudW1iZXIiIHR5cGU9InhzZDppbnQiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXR1cm4iIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGVsZW1lbnQgbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImFkZHJlc3MiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGVsZW1lbnQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2UvPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzc0hlYWRlclR5cGUiPgotCTxhbGw+Ci0JIDxlbGVtZW50IG5hbWU9ImEiIHR5cGU9ImludCIvPgotCSA8ZWxlbWVudCBuYW1lPSJiIiB0eXBlPSJib29sZWFuIi8+Ci0JIDxlbGVtZW50IG5hbWU9InMiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJzdHJpbmciLz4KLQk8L2FsbD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzSGVhZGVyVHlwZSIvPgotICA8L3NjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOnNhdmVBZGRyZXNzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzIi8+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBlbGVtZW50PSJpbnRmOkFkZHJlc3NIZWFkZXIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQWRkcmVzc0Jvb2tTb2FwQmluZGluZyIgdHlwZT0iaW50ZjpBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmhlYWRlciBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIgcGFydD0iQWRkcmVzc0hlYWRlciIgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9ub3doZXJlIj4KLSAgICAgICAgPC93c2Rsc29hcDpoZWFkZXI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHBhcnRzPSJwYXJhbWV0ZXJzIiB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkFkZHJlc3NCb29rU2VydmljZSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJBZGRyZXNzQm9vayIgYmluZGluZz0iaW50ZjpBZGRyZXNzQm9va1NvYXBCaW5kaW5nIj4KLSAgICAgIDx3c2Rsc29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvQWRkcmVzc0Jvb2siLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTktMS90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTktMS90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiYWQ2MDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE5LTEvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSIyMDE5LTEiPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgbm9uIGNvbmZvcm1hbnQgd3NkbCBjb250YWluaW5nIGEgZG9jdW1lbnQgbGl0ZXJhbCBiaW5kaW5nCi0gICAgd2loIGEgbmFtcGFjZSBhdHRyaWJ1dGUgc3BlY2lmaWVkIHRoZSBzb2FwYmluZDpoZWFkZXIgZWxlbWVudC4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXM+Ci0gICAgPGFzc2VydGlvbiBpZD0iQlAyMDE5IiB0YWRJRD0iU1NCUDEwIi8+Ci0gICAgPGFzc2VydGlvbiBpZD0iQlAyMDE5IiB0YWRJRD0iQVAxMCIvPgotICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOS0yLzIwMTktMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE5LTIvMjAxOS0yLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmMjAwZTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE5LTIvMjAxOS0yLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkcmVzcyIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZS8+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3NIZWFkZXJUeXBlIi8+Ci0gIDwvc2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3MiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3MiLz4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IkFkZHJlc3NIZWFkZXIiIGVsZW1lbnQ9ImludGY6QWRkcmVzc0hlYWRlciIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iQWRkcmVzc0Jvb2siPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJBZGRyZXNzQm9va1NvYXBCaW5kaW5nIiB0eXBlPSJpbnRmOkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6aGVhZGVyIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0IiBwYXJ0PSJBZGRyZXNzSGVhZGVyIiB1c2U9ImxpdGVyYWwiPgotICAgICAgICA8L3dzZGxzb2FwOmhlYWRlcj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgcGFydHM9InBhcmFtZXRlcnMiIHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvbm93aGVyZSIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQWRkcmVzc0Jvb2tTZXJ2aWNlIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IkFkZHJlc3NCb29rIiBiaW5kaW5nPSJpbnRmOkFkZHJlc3NCb29rU29hcEJpbmRpbmciPgotICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9BZGRyZXNzQm9vayIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOS0yL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOS0yL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWU5YWUwMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTktMi90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMTktMiI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24gY29uZm9ybWFudCB3c2RsIGNvbnRhaW5pbmcgYSBkb2N1bWVudCBsaXRlcmFsIGJpbmRpbmcKLSAgICB3aWggYSBuYW1wYWNlIGF0dHJpYnV0ZSBzcGVjaWZpZWQgdGhlIHNvYXBiaW5kOmJvZHkgZWxlbWVudC4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXM+Ci0gICAgPGFzc2VydGlvbiBpZD0iQlAyMDE5IiB0YWRJRD0iU1NCUDEwIi8+Ci0gICAgPGFzc2VydGlvbiBpZD0iQlAyMDE5IiB0YWRJRD0iQVAxMCIvPgotICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOS0zLzIwMTktMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE5LTMvMjAxOS0zLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhNjM5OTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE5LTMvMjAxOS0zLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkcmVzcyIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZS8+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3NIZWFkZXJUeXBlIi8+Ci0gIDwvc2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3MiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3MiLz4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IkFkZHJlc3NIZWFkZXIiIGVsZW1lbnQ9ImludGY6QWRkcmVzc0hlYWRlciIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJwYXJhbWV0ZXJmYXVsdCI+Ci0gICAgPHBhcnQgbmFtZT0icGFydDMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3MiIC8+Ci0gICA8L3dzZGw6bWVzc2FnZT4gCi0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iZjEiIG1lc3NhZ2U9ImludGY6cGFyYW1ldGVyZmF1bHQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkFkZHJlc3NCb29rU29hcEJpbmRpbmciIHR5cGU9ImludGY6QWRkcmVzc0Jvb2siPgotICAgIDx3c2Rsc29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpoZWFkZXIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiIHBhcnQ9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCI+Ci0gICAgICAgIDwvd3NkbHNvYXA6aGVhZGVyPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSBwYXJ0cz0icGFyYW1ldGVycyIgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICAgIDx3c2RsOmZhdWx0IG5hbWU9ImYxIj4KLSAgICAgICAgPHdzZGxzb2FwOmZhdWx0IHVzZT0ibGl0ZXJhbCIgbmFtZT0iZjEiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL25vd2hlcmUiLz4KLSAgICAgIDwvd3NkbDpmYXVsdD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJBZGRyZXNzQm9va1NlcnZpY2UiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iQWRkcmVzc0Jvb2siIGJpbmRpbmc9ImludGY6QWRkcmVzc0Jvb2tTb2FwQmluZGluZyI+Ci0gICAgICA8d3NkbHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL0FkZHJlc3NCb29rIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE5LTMvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE5LTMvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2VjMDNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOS0zL3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjAxOS0zIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG5vbiBjb25mb3JtYW50IHdzZGwgY29udGFpbmluZyBhIGRvY3VtZW50IGxpdGVyYWwgYmluZGluZwotICAgIHdpaCBhIG5hbXBhY2UgYXR0cmlidXRlIHNwZWNpZmllZCB0aGUgc29hcGJpbmQ6ZmF1bHQgZWxlbWVudC4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXM+Ci0gICAgPGFzc2VydGlvbiBpZD0iQlAyMDE5IiB0YWRJRD0iU1NCUDEwIi8+Ci0gICAgPGFzc2VydGlvbiBpZD0iQlAyMDE5IiB0YWRJRD0iQVAxMCIvPgotICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOS00LzIwMTktNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE5LTQvMjAxOS00LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4MjgxZTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMDE5LTQvMjAxOS00LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkcmVzcyIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZS8+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3NIZWFkZXJUeXBlIi8+Ci0gIDwvc2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3MiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3MiLz4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IkFkZHJlc3NIZWFkZXIiIGVsZW1lbnQ9ImludGY6QWRkcmVzc0hlYWRlciIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJwYXJhbWV0ZXJmYXVsdCI+Ci0gICAgPHBhcnQgbmFtZT0icGFydDMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3MiIC8+Ci0gICA8L3dzZGw6bWVzc2FnZT4gCi0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iZjEiIG1lc3NhZ2U9ImludGY6cGFyYW1ldGVyZmF1bHQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkFkZHJlc3NCb29rU29hcEJpbmRpbmciIHR5cGU9ImludGY6QWRkcmVzc0Jvb2siPgotICAgIDx3c2Rsc29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpoZWFkZXIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiIHBhcnQ9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCI+Ci0gICAgICAgICAgIDx3c2Rsc29hcDpoZWFkZXJmYXVsdCBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIgIHBhcnQ9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICAgICA8L3dzZGxzb2FwOmhlYWRlcj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgcGFydHM9InBhcmFtZXRlcnMiIHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgICA8d3NkbDpmYXVsdCBuYW1lPSJmMSI+Ci0gICAgICAgIDx3c2Rsc29hcDpmYXVsdCB1c2U9ImxpdGVyYWwiIG5hbWU9ImYxIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy9ub3doZXJlIi8+Ci0gICAgICA8L3dzZGw6ZmF1bHQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQWRkcmVzc0Jvb2tTZXJ2aWNlIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IkFkZHJlc3NCb29rIiBiaW5kaW5nPSJpbnRmOkFkZHJlc3NCb29rU29hcEJpbmRpbmciPgotICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9BZGRyZXNzQm9vayIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOS00L3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAxOS00L3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTk0OWE1My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMTktNC90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMTktNCI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24gY29uZm9ybWFudCB3c2RsIGNvbnRhaW5pbmcgYSBkb2N1bWVudCBsaXRlcmFsIGJpbmRpbmcKLSAgICB3aWggYSBuYW1wYWNlIGF0dHJpYnV0ZSBzcGVjaWZpZWQgdGhlIHNvYXBiaW5kOmhlYWRlcmZhdWx0IGVsZW1lbnQuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjAxOSIgdGFkSUQ9IlNTQlAxMCIvPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjAxOSIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMjAtMS8yMDIwLTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAyMC0xLzIwMjAtMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjkwNDU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAyMC0xLzIwMjAtMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAKLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJhZGRyZXNzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICA8c2VxdWVuY2UvPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIHR5cGU9ImltcGw6QWRkcmVzc0hlYWRlclR5cGUiLz4KLSAgPC9zY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpzYXZlQWRkcmVzcyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgZWxlbWVudD0iaW50ZjpBZGRyZXNzSGVhZGVyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkFkZHJlc3NCb29rU29hcEJpbmRpbmciIHR5cGU9ImludGY6QWRkcmVzc0Jvb2siPgotICAgIDx3c2Rsc29hcDpiaW5kaW5nIHN0eWxlPSJycGMiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6aGVhZGVyIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0IiBwYXJ0PSJBZGRyZXNzSGVhZGVyIiB1c2U9ImxpdGVyYWwiPgotICAgICAgICA8L3dzZGxzb2FwOmhlYWRlcj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgcGFydHM9InBhcmFtZXRlcnMiIHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQWRkcmVzc0Jvb2tTZXJ2aWNlIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IkFkZHJlc3NCb29rIiBiaW5kaW5nPSJpbnRmOkFkZHJlc3NCb29rU29hcEJpbmRpbmciPgotICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9BZGRyZXNzQm9vayIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAyMC0xL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAyMC0xL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmJjY2NiMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMjAtMS90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMjAtMSI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24gY29uZm9ybWFudCB3c2RsIGNvbnRhaW5pbmcgYSBycGMgbGl0ZXJhbCBiaW5kaW5nCi0gICAgd2loIGEgbmFtcGFjZSBhdHRyaWJ1dGUgbWlzc2luZyBmcm9tIGEgc29hcGJpbmQ6Ym9keSBlbGVtZW50LgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcz4KLSAgICA8YXNzZXJ0aW9uIGlkPSJCUDIwMjAiIHRhZElEPSJTU0JQMTAiLz4KLSAgICA8YXNzZXJ0aW9uIGlkPSJCUDIwMjAiIHRhZElEPSJBUDEwIi8+Ci0gIDwvZXhwZWN0ZWRGYWlsdXJlcz4KLQotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMjAtMi8yMDIwLTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAyMC0yLzIwMjAtMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5M2ZmNjM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAyMC0yLzIwMjAtMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAKLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJhZGRyZXNzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICA8c2VxdWVuY2UvPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIHR5cGU9ImltcGw6QWRkcmVzc0hlYWRlclR5cGUiLz4KLSAgPC9zY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpzYXZlQWRkcmVzcyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgZWxlbWVudD0iaW50ZjpBZGRyZXNzSGVhZGVyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkFkZHJlc3NCb29rU29hcEJpbmRpbmciIHR5cGU9ImludGY6QWRkcmVzc0Jvb2siPgotICAgIDx3c2Rsc29hcDpiaW5kaW5nIHN0eWxlPSJycGMiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6aGVhZGVyIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0IiBwYXJ0PSJBZGRyZXNzSGVhZGVyIiB1c2U9ImxpdGVyYWwiPgotICAgICAgICA8L3dzZGxzb2FwOmhlYWRlcj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgcGFydHM9InBhcmFtZXRlcnMiIHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSIyMDIwLnhzZCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQWRkcmVzc0Jvb2tTZXJ2aWNlIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IkFkZHJlc3NCb29rIiBiaW5kaW5nPSJpbnRmOkFkZHJlc3NCb29rU29hcEJpbmRpbmciPgotICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9BZGRyZXNzQm9vayIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAyMC0yL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjAyMC0yL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDk3NDE4MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIwMjAtMi90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMjAtMiI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24gY29uZm9ybWFudCB3c2RsIGNvbnRhaW5pbmcgYSBycGMgbGl0ZXJhbCBiaW5kaW5nCi0gICAgd2loIGEgbmFtcGFjZSBhdHRyaWJ1dGUgc3BlY2lmaWVkIGluIHRoZSBzb2FwYmluZDpib2R5IGVsZW1lbnQgdGhhdCBoYXMgYSAKLSAgICB2YWx1ZSB0aGF0IGlzIG5vdCBhbiBhYnNvbHV0ZSBVUkkuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjAyMCIgdGFkSUQ9IlNTQlAxMCIvPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjAyMCIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotCi08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjEwNS0xLzIxMDUtMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMTA1LTEvMjEwNS0xLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0NDE1Y2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMTA1LTEvMjEwNS0xLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi08ZGVmaW5pdGlvbnMgCi0gICAgICAgIHhtbG5zOmh0dHA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvaHR0cC8iIAotICAgICAgICB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiAKLSAgICAgICAgeG1sbnM6cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgICAgICB4bWxuczpzMD0iaHR0cDovL3RlbXB1cmkub3JnLyIgCi0gICAgICAgIHhtbG5zOnNvYXBlbmM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIiAKLSAgICAgICAgeG1sbnM6dG09Imh0dHA6Ly9taWNyb3NvZnQuY29tL3dzZGwvbWltZS90ZXh0TWF0Y2hpbmcvIiAKLSAgICAgICAgeG1sbnM6bWltZT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9taW1lLyIgCi0gICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgPGRvY3VtZW50YXRpb24+Ci0gIDwvZG9jdW1lbnRhdGlvbj4KLSAgPHR5cGVzLz4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8yMTA1YSIgbG9jYXRpb249IjIxMDVhLndzZGwiLz4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8yMTA1YiIgbG9jYXRpb249IjIxMDViLndzZGwiLz4KLQotICA8bWVzc2FnZSBuYW1lPSJlY2hvU3RyaW5nSW4iPgotICAgIDxwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9InM6c3RyaW5nIi8+Ci0gIDwvbWVzc2FnZT4KLSAgPG1lc3NhZ2UgbmFtZT0iZWNob1N0cmluZ091dCI+Ci0gICAgPHBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iczpzdHJpbmciIC8+Ci0gIDwvbWVzc2FnZT4KLSAgPHBvcnRUeXBlIG5hbWU9IkVjaG9Qb3J0VHlwZSI+Ci0gICAgPG9wZXJhdGlvbiBuYW1lPSJlY2hvU3RyaW5nIiBwYXJhbWV0ZXJPcmRlcj0icGFyYW1ldGVycyI+Ci0gICAgICA8aW5wdXQgbWVzc2FnZT0iczA6ZWNob1N0cmluZ0luIiAvPgotICAgICAgPG91dHB1dCBtZXNzYWdlPSJzMDplY2hvU3RyaW5nT3V0IiAvPgotICAgIDwvb3BlcmF0aW9uPgotICAgPC9wb3J0VHlwZT4KLSAgPGJpbmRpbmcgbmFtZT0iRWNob0JpbmRpbmciIHR5cGU9InMwOkVjaG9Qb3J0VHlwZSI+Ci0gICAgPHNvYXA6YmluZGluZyB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIgc3R5bGU9InJwYyIgLz4KLSAgICA8b3BlcmF0aW9uIG5hbWU9ImVjaG9TdHJpbmciPgotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9lY2hvU3RyaW5nIiBzdHlsZT0icnBjIiAvPgotICAgICAgPGlucHV0PgotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHA6Ly9vcmcub3JnIi8+Ci0gICAgICA8L2lucHV0PgotICAgICAgPG91dHB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHRwOi8vb3JnLm9yZyIgLz4KLSAgICAgIDwvb3V0cHV0PgotICAgIDwvb3BlcmF0aW9uPgotIDwvYmluZGluZz4KLSAgPHNlcnZpY2UgbmFtZT0iRWNob1NlcnZpY2UiPgotICAgIDxwb3J0IG5hbWU9IkVjaG9Qb3J0IiBiaW5kaW5nPSJzMDpFY2hvQmluZGluZyI+Ci0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgPC9wb3J0PgotICA8L3NlcnZpY2U+Ci08L2RlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjEwNS0xLzIxMDVhLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMDUtMS8yMTA1YS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzFlNzlhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjEwNS0xLzIxMDVhLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08ZGVmaW5pdGlvbnMgCi0gICAgICAgIHhtbG5zOmh0dHA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvaHR0cC8iIAotICAgICAgICB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiAKLSAgICAgICAgeG1sbnM6cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgICAgICB4bWxuczpzMD0iaHR0cDovL3RlbXB1cmkub3JnLzIxMDVhIiAKLSAgICAgICAgeG1sbnM6c29hcGVuYz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iIAotICAgICAgICB4bWxuczp0bT0iaHR0cDovL21pY3Jvc29mdC5jb20vd3NkbC9taW1lL3RleHRNYXRjaGluZy8iIAotICAgICAgICB4bWxuczptaW1lPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL21pbWUvIiAKLSAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvMjEwNWEiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci08L2RlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjEwNS0xLzIxMDViLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMDUtMS8yMTA1Yi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzA3OWIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjEwNS0xLzIxMDViLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08ZGVmaW5pdGlvbnMgCi0gICAgICAgIHhtbG5zOmh0dHA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvaHR0cC8iIAotICAgICAgICB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiAKLSAgICAgICAgeG1sbnM6cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgICAgICB4bWxuczpzMD0iaHR0cDovL3RlbXB1cmkub3JnLzIxMDViIiAKLSAgICAgICAgeG1sbnM6c29hcGVuYz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iIAotICAgICAgICB4bWxuczp0bT0iaHR0cDovL21pY3Jvc29mdC5jb20vd3NkbC9taW1lL3RleHRNYXRjaGluZy8iIAotICAgICAgICB4bWxuczptaW1lPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL21pbWUvIiAKLSAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvMjEwNWIiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci08L2RlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjEwNS0xL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjEwNS0xL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjY3ZmMwYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMDUtMS90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIxMDUtMSI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24gY29uZm9ybWFudCB3c2RsIGNvbnRhaW5pbmcgYSB0eXBlcwotICAgIGVsZW1lbnQgcHJlY2VkaW5nIHRoZSAyIGltcG9ydCBlbGVtZW50cy4gCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjEwNSIgdGFkSUQ9IlNTQlAxMCIvPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjEwNSIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMDUtMi8yMTA1LTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjEwNS0yLzIxMDUtMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDExNDdmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjEwNS0yLzIxMDUtMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotPGRlZmluaXRpb25zIAotICAgICAgICB4bWxuczpodHRwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvIiAKLSAgICAgICAgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgCi0gICAgICAgIHhtbG5zOnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICAgICAgeG1sbnM6czA9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIAotICAgICAgICB4bWxuczpzb2FwZW5jPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgCi0gICAgICAgIHhtbG5zOnRtPSJodHRwOi8vbWljcm9zb2Z0LmNvbS93c2RsL21pbWUvdGV4dE1hdGNoaW5nLyIgCi0gICAgICAgIHhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iIAotICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDxkb2N1bWVudGF0aW9uPgotICA8L2RvY3VtZW50YXRpb24+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvMjEwNWEiIGxvY2F0aW9uPSIyMTA1YS53c2RsIi8+Ci0gIDx0eXBlcy8+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvMjEwNWIiIGxvY2F0aW9uPSIyMTA1Yi53c2RsIi8+Ci0KLSAgPG1lc3NhZ2UgbmFtZT0iZWNob1N0cmluZ0luIj4KLSAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJzOnN0cmluZyIvPgotICA8L21lc3NhZ2U+Ci0gIDxtZXNzYWdlIG5hbWU9ImVjaG9TdHJpbmdPdXQiPgotICAgIDxwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9InM6c3RyaW5nIiAvPgotICA8L21lc3NhZ2U+Ci0gIDxwb3J0VHlwZSBuYW1lPSJFY2hvUG9ydFR5cGUiPgotICAgIDxvcGVyYXRpb24gbmFtZT0iZWNob1N0cmluZyIgcGFyYW1ldGVyT3JkZXI9InBhcmFtZXRlcnMiPgotICAgICAgPGlucHV0IG1lc3NhZ2U9InMwOmVjaG9TdHJpbmdJbiIgLz4KLSAgICAgIDxvdXRwdXQgbWVzc2FnZT0iczA6ZWNob1N0cmluZ091dCIgLz4KLSAgICA8L29wZXJhdGlvbj4KLSAgIDwvcG9ydFR5cGU+Ci0gIDxiaW5kaW5nIG5hbWU9IkVjaG9CaW5kaW5nIiB0eXBlPSJzMDpFY2hvUG9ydFR5cGUiPgotICAgIDxzb2FwOmJpbmRpbmcgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiIHN0eWxlPSJycGMiIC8+Ci0gICAgPG9wZXJhdGlvbiBuYW1lPSJlY2hvU3RyaW5nIj4KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvZWNob1N0cmluZyIgc3R5bGU9InJwYyIgLz4KLSAgICAgIDxpbnB1dD4KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHRwOi8vb3JnLm9yZyIvPgotICAgICAgPC9pbnB1dD4KLSAgICAgIDxvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0cDovL29yZy5vcmciIC8+Ci0gICAgICA8L291dHB1dD4KLSAgICA8L29wZXJhdGlvbj4KLSA8L2JpbmRpbmc+Ci0gIDxzZXJ2aWNlIG5hbWU9IkVjaG9TZXJ2aWNlIj4KLSAgICA8cG9ydCBuYW1lPSJFY2hvUG9ydCIgYmluZGluZz0iczA6RWNob0JpbmRpbmciPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgIDwvcG9ydD4KLSAgPC9zZXJ2aWNlPgotPC9kZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMDUtMi8yMTA1YS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMTA1LTIvMjEwNWEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODMxZTc5YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMDUtMi8yMTA1YS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotPGRlZmluaXRpb25zIAotICAgICAgICB4bWxuczpodHRwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvIiAKLSAgICAgICAgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgCi0gICAgICAgIHhtbG5zOnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICAgICAgeG1sbnM6czA9Imh0dHA6Ly90ZW1wdXJpLm9yZy8yMTA1YSIgCi0gICAgICAgIHhtbG5zOnNvYXBlbmM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIiAKLSAgICAgICAgeG1sbnM6dG09Imh0dHA6Ly9taWNyb3NvZnQuY29tL3dzZGwvbWltZS90ZXh0TWF0Y2hpbmcvIiAKLSAgICAgICAgeG1sbnM6bWltZT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9taW1lLyIgCi0gICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLzIxMDVhIiB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotPC9kZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMDUtMi8yMTA1Yi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMTA1LTIvMjEwNWIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjcwNzliMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMDUtMi8yMTA1Yi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotPGRlZmluaXRpb25zIAotICAgICAgICB4bWxuczpodHRwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvIiAKLSAgICAgICAgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgCi0gICAgICAgIHhtbG5zOnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICAgICAgeG1sbnM6czA9Imh0dHA6Ly90ZW1wdXJpLm9yZy8yMTA1YiIgCi0gICAgICAgIHhtbG5zOnNvYXBlbmM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIiAKLSAgICAgICAgeG1sbnM6dG09Imh0dHA6Ly9taWNyb3NvZnQuY29tL3dzZGwvbWltZS90ZXh0TWF0Y2hpbmcvIiAKLSAgICAgICAgeG1sbnM6bWltZT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9taW1lLyIgCi0gICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLzIxMDViIiB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotPC9kZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMDUtMi90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMDUtMi90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhNTk5ZjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMTA1LTIvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSIyMTA1LTIiPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgbm9uIGNvbmZvcm1hbnQgd3NkbCBjb250YWluaW5nIGEgdHlwZXMKLSAgICBlbGVtZW50IGJldHdlZW4gdGhlIDIgaW1wb3J0IGVsZW1lbnRzLiAKLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXM+Ci0gICAgPGFzc2VydGlvbiBpZD0iQlAyMTA1IiB0YWRJRD0iU1NCUDEwIi8+Ci0gICAgPGFzc2VydGlvbiBpZD0iQlAyMTA1IiB0YWRJRD0iQVAxMCIvPgotICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjExNy0xLzIxMTctMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMTE3LTEvMjExNy0xLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjYjhmZWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMTE3LTEvMjExNy0xLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbHNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmltcGw9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotIAotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3MiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJvdmluY2UiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImNpdHkiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InN0cmVldCIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icG9zdGFsQ29kZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icGhvbmVOdW1iZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOlBob25lTnVtYmVyIi8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iUGhvbmVOdW1iZXIiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0iYXJlYSIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcmVmaXgiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ibnVtYmVyIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmV0dXJuIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImFkZHJlc3MiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgIDxzZXF1ZW5jZS8+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3NIZWFkZXJUeXBlIj4KLQk8YWxsPgotCSA8ZWxlbWVudCBuYW1lPSJhIiB0eXBlPSJpbnQiLz4KLQkgPGVsZW1lbnQgbmFtZT0iYiIgdHlwZT0iYm9vbGVhbiIvPgotCSA8ZWxlbWVudCBuYW1lPSJzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ic3RyaW5nIi8+Ci0JPC9hbGw+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgdHlwZT0iaW1wbDpBZGRyZXNzSGVhZGVyVHlwZSIvPgotICA8L3NjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJpbnRmOnNhdmVBZGRyZXNzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBlbGVtZW50PSJpbnRmOkFkZHJlc3NIZWFkZXIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQWRkcmVzc0Jvb2tTb2FwQmluZGluZyIgdHlwZT0iaW50ZjpBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGxzb2FwOmJpbmRpbmcgc3R5bGU9InJwYyIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpoZWFkZXIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiIHBhcnQ9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLSAgICAgICAgPC93c2Rsc29hcDpoZWFkZXI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHBhcnRzPSJwYXJhbWV0ZXJzIiB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQWRkcmVzc0Jvb2tTZXJ2aWNlIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IkFkZHJlc3NCb29rIiBiaW5kaW5nPSJpbnRmOkFkZHJlc3NCb29rU29hcEJpbmRpbmciPgotICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9BZGRyZXNzQm9vayIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjExNy0xL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjExNy0xL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjEzN2FjMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMTctMS90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIxMTctMSI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24gY29uZm9ybWFudCB3c2RsIGNvbnRhaW5pbmcgYSBycGMgbGl0ZXJhbCBiaW5kaW5nCi0gICAgd2loIGEgbmFtcGFjZSBhdHRyaWJ1dGUgc3BlY2lmaWVkIHRoZSBzb2FwYmluZDpmYXVsdCBlbGVtZW50LgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcz4KLSAgICA8YXNzZXJ0aW9uIGlkPSJCUDIxMTciIHRhZElEPSJTU0JQMTAiLz4KLSAgICA8YXNzZXJ0aW9uIGlkPSJCUDIxMTciIHRhZElEPSJBUDEwIi8+Ci0gIDwvZXhwZWN0ZWRGYWlsdXJlcz4KLQotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMTctMi8yMTE3LTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjExNy0yLzIxMTctMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjgyMmE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjExNy0yLzIxMTctMi53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2Rsc29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6aW1wbD0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICA8d3NkbDp0eXBlcz4KLSAgICA8c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gCi0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzcyI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcm92aW5jZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0iY2l0eSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ic3RyZWV0IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwb3N0YWxDb2RlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwaG9uZU51bWJlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6UGhvbmVOdW1iZXIiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJQaG9uZU51bWJlciI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJhcmVhIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByZWZpeCIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJudW1iZXIiIHR5cGU9InhzZDppbnQiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXR1cm4iIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkcmVzcyIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgPHNlcXVlbmNlLz4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzc0hlYWRlclR5cGUiPgotCTxhbGw+Ci0JIDxlbGVtZW50IG5hbWU9ImEiIHR5cGU9ImludCIvPgotCSA8ZWxlbWVudCBuYW1lPSJiIiB0eXBlPSJib29sZWFuIi8+Ci0JIDxlbGVtZW50IG5hbWU9InMiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJzdHJpbmciLz4KLQk8L2FsbD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzSGVhZGVyIiB0eXBlPSJpbXBsOkFkZHJlc3NIZWFkZXJUeXBlIi8+Ci0gIDwvc2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9ImludGY6c2F2ZUFkZHJlc3MiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IkFkZHJlc3NIZWFkZXIiIGVsZW1lbnQ9ImludGY6QWRkcmVzc0hlYWRlciIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJwYXJhbWV0ZXJmYXVsdCI+Ci0gICAgPHBhcnQgbmFtZT0icGFydDMiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0gIDwvd3NkbDptZXNzYWdlPiAgCi0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iZjEiIG1lc3NhZ2U9ImludGY6cGFyYW1ldGVyZmF1bHQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkFkZHJlc3NCb29rU29hcEJpbmRpbmciIHR5cGU9ImludGY6QWRkcmVzc0Jvb2siPgotICAgIDx3c2Rsc29hcDpiaW5kaW5nIHN0eWxlPSJycGMiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6aGVhZGVyIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0IiBwYXJ0PSJBZGRyZXNzSGVhZGVyIiB1c2U9ImxpdGVyYWwiPgotICAgICAgICA8L3dzZGxzb2FwOmhlYWRlcj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgcGFydHM9InBhcmFtZXRlcnMiIHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iZjEiPgotICAgICAgICA8d3NkbHNvYXA6ZmF1bHQgdXNlPSJsaXRlcmFsIiBuYW1lPSJmMSIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6ZmF1bHQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkFkZHJlc3NCb29rU2VydmljZSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJBZGRyZXNzQm9vayIgYmluZGluZz0iaW50ZjpBZGRyZXNzQm9va1NvYXBCaW5kaW5nIj4KLSAgICAgIDx3c2Rsc29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvQWRkcmVzc0Jvb2siLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMTctMi90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMTctMi90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExNDAxZTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMTE3LTIvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSIyMTE3LTIiPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgbm9uIGNvbmZvcm1hbnQgd3NkbCBjb250YWluaW5nIGEgcnBjIGxpdGVyYWwgYmluZGluZwotICAgIHdpaCBhIG5hbXBhY2UgYXR0cmlidXRlIHNwZWNpZmllZCB0aGUgc29hcGJpbmQ6ZmF1bHQgZWxlbWVudC4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXM+Ci0gICAgPGFzc2VydGlvbiBpZD0iQlAyMTE3IiB0YWRJRD0iU1NCUDEwIi8+Ci0gICAgPGFzc2VydGlvbiBpZD0iQlAyMTE3IiB0YWRJRD0iQVAxMCIvPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjExMyIgdGFkSUQ9IlNTQlAxMCIvPgotICAgIDxhc3NlcnRpb24gaWQ9IkJQMjExMyIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotCi08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjExNy0zLzIxMTctMy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMTE3LTMvMjExNy0zLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyODhmNjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yMTE3LTMvMjExNy0zLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAKLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJhZGRyZXNzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICA8c2VxdWVuY2UvPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIHR5cGU9ImltcGw6QWRkcmVzc0hlYWRlclR5cGUiLz4KLSAgPC9zY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpzYXZlQWRkcmVzcyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgZWxlbWVudD0iaW50ZjpBZGRyZXNzSGVhZGVyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InBhcmFtZXRlcmZhdWx0Ij4KLSAgICA8cGFydCBuYW1lPSJwYXJ0MyIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLSAgPC93c2RsOm1lc3NhZ2U+ICAKLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iQWRkcmVzc0Jvb2siPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgICA8d3NkbDpmYXVsdCBuYW1lPSJmMSIgbWVzc2FnZT0iaW50ZjpwYXJhbWV0ZXJmYXVsdCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQWRkcmVzc0Jvb2tTb2FwQmluZGluZyIgdHlwZT0iaW50ZjpBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGxzb2FwOmJpbmRpbmcgc3R5bGU9InJwYyIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpoZWFkZXIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiIHBhcnQ9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCI+Ci0gICAgICAgICAgPHdzZGxzb2FwOmhlYWRlcmZhdWx0IG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0IiAgcGFydD0iQWRkcmVzc0hlYWRlciIgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgICAgPC93c2Rsc29hcDpoZWFkZXI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHBhcnRzPSJwYXJhbWV0ZXJzIiB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICAgIDx3c2RsOmZhdWx0IG5hbWU9ImYxIj4KLSAgICAgICAgPHdzZGxzb2FwOmZhdWx0IHVzZT0ibGl0ZXJhbCIgbmFtZT0iZjEiLz4KLSAgICAgIDwvd3NkbDpmYXVsdD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQWRkcmVzc0Jvb2tTZXJ2aWNlIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IkFkZHJlc3NCb29rIiBiaW5kaW5nPSJpbnRmOkFkZHJlc3NCb29rU29hcEJpbmRpbmciPgotICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9BZGRyZXNzQm9vayIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjExNy0zL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjExNy0zL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjdkMDcyZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzIxMTctMy90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIxMTctMyI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24gY29uZm9ybWFudCB3c2RsIGNvbnRhaW5pbmcgYSBycGMgbGl0ZXJhbCBiaW5kaW5nCi0gICAgd2loIGEgbmFtcGFjZSBhdHRyaWJ1dGUgc3BlY2lmaWVkIHRoZSBzb2FwYmluZDpoZWFkZXJmYXVsdCBlbGVtZW50LgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcz4KLSAgICA8YXNzZXJ0aW9uIGlkPSJCUDIxMTciIHRhZElEPSJTU0JQMTAiLz4KLSAgICA8YXNzZXJ0aW9uIGlkPSJCUDIxMTciIHRhZElEPSJBUDEwIi8+Ci0gICAgPGFzc2VydGlvbiBpZD0iQlAyMTEzIiB0YWRJRD0iU1NCUDEwIi8+Ci0gICAgPGFzc2VydGlvbiBpZD0iQlAyMTEzIiB0YWRJRD0iQVAxMCIvPgotICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci0KLTwvdGVzdGNhc2U+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yNDA2LTEvMjQwNi0xLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzI0MDYtMS8yNDA2LTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWUyNDg2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2JwLzI0MDYtMS8yNDA2LTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPGRlZmluaXRpb25zIG5hbWU9IlNhbXBsZVNlcnZpY2UiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgIHhtbG5zOnRucz0iaHR0cDovL3RlbXB1cmkub3JnLyIgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotCTxtZXNzYWdlIG5hbWU9ImdldFNhbXBsZVJlcXVlc3QiPgotCQk8cGFydCBuYW1lPSJ6aXBjb2RlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0JPC9tZXNzYWdlPgotCTxtZXNzYWdlIG5hbWU9ImdldFNhbXBsZVJlc3BvbnNlIj4KLQkJPHBhcnQgbmFtZT0icmV0dXJuIiB0eXBlPSJ4c2Q6ZmxvYXQiLz4KLQk8L21lc3NhZ2U+Ci0JPHBvcnRUeXBlIG5hbWU9IlNhbXBsZVBvcnRUeXBlIj4KLQkJPG9wZXJhdGlvbiBuYW1lPSJnZXRTYW1wbGUiPgotCQkJPGlucHV0IG1lc3NhZ2U9InRuczpnZXRTYW1wbGVSZXF1ZXN0Ii8+Ci0JCQk8b3V0cHV0IG1lc3NhZ2U9InRuczpnZXRTYW1wbGVSZXNwb25zZSIvPgotCQk8L29wZXJhdGlvbj4KLQk8L3BvcnRUeXBlPgotCTxiaW5kaW5nIG5hbWU9IlNhbXBsZUJpbmRpbmciIHR5cGU9InRuczpTYW1wbGVQb3J0VHlwZSI+Ci0JCTxzb2FwOmJpbmRpbmcgc3R5bGU9InJwYyIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLQkJPG9wZXJhdGlvbiBuYW1lPSJnZXRTYW1wbGUiPgotCQkJPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotCQkJPGlucHV0PgotCQkJCTxzb2FwOmJvZHkgdXNlPSJlbmNvZGVkIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIGVuY29kaW5nU3R5bGU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIi8+Ci0JCQk8L2lucHV0PgotCQkJPG91dHB1dD4KLQkJCQk8c29hcDpib2R5IHVzZT0iZW5jb2RlZCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiBlbmNvZGluZ1N0eWxlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIvPgotCQkJPC9vdXRwdXQ+Ci0JCTwvb3BlcmF0aW9uPgotCTwvYmluZGluZz4KLQk8c2VydmljZSBuYW1lPSJTYW1wbGVTZXJ2aWNlIj4KLQkJPGRvY3VtZW50YXRpb24+PC9kb2N1bWVudGF0aW9uPgotCQk8cG9ydCBuYW1lPSJTYW1wbGVQb3J0IiBiaW5kaW5nPSJ0bnM6U2FtcGxlQmluZGluZyI+Ci0JCQk8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0JCTwvcG9ydD4KLQk8L3NlcnZpY2U+Ci08L2RlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yNDA2LTEvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9icC8yNDA2LTEvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2EyODdkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvYnAvMjQwNi0xL3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjQwNi0xIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG5vbi1jb25mb3JtYW50IHdzZGwgdGhhdCBmYWlscyB0ZXN0IGFzc2VydGlvbiBCUDI0MDYuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotCTxhc3NlcnRpb24gaWQ9IkJQMjQwNiIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjQwNiIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2J1Z3ppbGxhL2VtcHR5U29hcEJvZHkvZW1wdHlTb2FwQm9keS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9idWd6aWxsYS9lbXB0eVNvYXBCb2R5L2VtcHR5U29hcEJvZHkud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDAyMDI5Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL2J1Z3ppbGxhL2VtcHR5U29hcEJvZHkvZW1wdHlTb2FwQm9keS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxkZWZpbml0aW9ucyB4bWxuczpodHRwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczpzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6czA9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOnNvYXBlbmM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIiB4bWxuczp0bT0iaHR0cDovL21pY3Jvc29mdC5jb20vd3NkbC9taW1lL3RleHRNYXRjaGluZy8iIHhtbG5zOm1pbWU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvbWltZS8iIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgPHR5cGVzPgotICAgIDxzOnNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLSAgICAgIDxzOmVsZW1lbnQgbmFtZT0iZWNob1N0cmluZyI+Ci0gICAgICAgIDxzOmNvbXBsZXhUeXBlPgotICAgICAgICAgIDxzOnNlcXVlbmNlPgotICAgICAgICAgICAgPHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSIgbmFtZT0iYXJnIiB0eXBlPSJzOnN0cmluZyIgLz4KLSAgICAgICAgICA8L3M6c2VxdWVuY2U+Ci0gICAgICAgIDwvczpjb21wbGV4VHlwZT4KLSAgICAgIDwvczplbGVtZW50PgotICAgIDwvczpzY2hlbWE+Ci0gIDwvdHlwZXM+Ci0gIDxtZXNzYWdlIG5hbWU9InNldE1lc3NhZ2VSZXF1ZXN0Ij4KLSAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJzMDplY2hvU3RyaW5nIiAvPgotICA8L21lc3NhZ2U+Ci0gIDxtZXNzYWdlIG5hbWU9InNldE1lc3NhZ2VSZXNwb25zZSIvPgotCi0gIDxwb3J0VHlwZSBuYW1lPSJTZXJ2aWNlMVNvYXAiPgotICAgIDxvcGVyYXRpb24gbmFtZT0ic2V0TWVzc2FnZSI+Ci0gICAgICA8aW5wdXQgbWVzc2FnZT0iczA6c2V0TWVzc2FnZVJlcXVlc3QiIC8+Ci0gICAgICA8b3V0cHV0IG1lc3NhZ2U9InMwOnNldE1lc3NhZ2VSZXNwb25zZSIgLz4KLSAgICA8L29wZXJhdGlvbj4KLSAgPC9wb3J0VHlwZT4KLQotICA8YmluZGluZyBuYW1lPSJTZXJ2aWNlMVNvYXAiIHR5cGU9InMwOlNlcnZpY2UxU29hcCI+Ci0gICAgPHNvYXA6YmluZGluZyB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIgc3R5bGU9ImRvY3VtZW50IiAvPgotICAgIDxvcGVyYXRpb24gbmFtZT0ic2V0TWVzc2FnZSI+Ci0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIiBzdHlsZT0iZG9jdW1lbnQiIC8+Ci0gICAgICA8aW5wdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgotICAgICAgPC9pbnB1dD4KLSAgICAgIDxvdXRwdXQ+Ci0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgotICAgICAgPC9vdXRwdXQ+Ci0gICAgPC9vcGVyYXRpb24+Ci0gIDwvYmluZGluZz4KLQotICA8c2VydmljZSBuYW1lPSJTZXJ2aWNlMSI+Ci0gICAgPHBvcnQgbmFtZT0iU2VydmljZTFTb2FwIiBiaW5kaW5nPSJzMDpTZXJ2aWNlMVNvYXAiPgotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL2xvY2FsaG9zdC9XU0lTZXJ2aWNlL1NlcnZpY2UxLmFzbXgiIC8+Ci0gICAgPC9wb3J0PgotICA8L3NlcnZpY2U+Ci08L2RlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTAtMS8yMDEwLTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTAtMS8yMDEwLTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGIxM2RhMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDEwLTEvMjAxMC0xLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbHNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmltcGw9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3MiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3MiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJvdmluY2UiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImNpdHkiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InN0cmVldCIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icG9zdGFsQ29kZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icGhvbmVOdW1iZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOlBob25lTnVtYmVyIi8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iUGhvbmVOdW1iZXIiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0iYXJlYSIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcmVmaXgiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ibnVtYmVyIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmV0dXJuIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxlbGVtZW50IG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJhZGRyZXNzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxlbGVtZW50IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlLz4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3NIZWFkZXJUeXBlIj4KLQk8YWxsPgotCSA8ZWxlbWVudCBuYW1lPSJhIiB0eXBlPSJpbnQiLz4KLQkgPGVsZW1lbnQgbmFtZT0iYiIgdHlwZT0iYm9vbGVhbiIvPgotCSA8ZWxlbWVudCBuYW1lPSJzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ic3RyaW5nIi8+Ci0JPC9hbGw+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzc0hlYWRlclR5cGUiLz4KLSAgPC9zY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpzYXZlQWRkcmVzcyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpmaW5kQWRkcmVzcyIvPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgZWxlbWVudD0iaW50ZjpBZGRyZXNzSGVhZGVyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkFkZHJlc3NCb29rU2VydmljZSI+Ci0gPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDEwLTEvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMC0xL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzU5YmFmYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDEwLTEvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSIyMDEwLTEiPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgbm9uLWNvbmZvcm1hbnQgd3NkbCB0aGF0IGZhaWxzIHRlc3QgYXNzZXJ0aW9uIEJQMjAxMC4KLSAgICBOb3RlIHRoaXMgYXNzZXJ0aW9uIGlzIGNhdWdodCBieSB0aGUgYmFzZSBXU0RMIHZhbGlkYXRvci4KLSAgICBTbyB0aGlzIGFzc2VydGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgd2hlbiBydW5uaW5nIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlCi0gICAgYmFzZSB2YWxpZGF0b3IuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAxMCIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAxMCIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTEvMjAxMS0xLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTEvMjAxMS0xLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0MzA4Y2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMS0xLzIwMTEtMS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgPHNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICAgICA8aW1wb3J0IG5hbWVzcGFjZT0iMjAxMS54c2QiIHNjaGVtYUxvY2F0aW9uPSIyMDExLnhzZCIvPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3MiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3MiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJvdmluY2UiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImNpdHkiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InN0cmVldCIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icG9zdGFsQ29kZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icGhvbmVOdW1iZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOlBob25lTnVtYmVyIi8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iUGhvbmVOdW1iZXIiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0iYXJlYSIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcmVmaXgiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ibnVtYmVyIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmV0dXJuIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxlbGVtZW50IG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJhZGRyZXNzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxlbGVtZW50IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlLz4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3NIZWFkZXJUeXBlIj4KLQk8YWxsPgotCSA8ZWxlbWVudCBuYW1lPSJhIiB0eXBlPSJpbnQiLz4KLQkgPGVsZW1lbnQgbmFtZT0iYiIgdHlwZT0iYm9vbGVhbiIvPgotCSA8ZWxlbWVudCBuYW1lPSJzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ic3RyaW5nIi8+Ci0JPC9hbGw+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzc0hlYWRlclR5cGUiLz4KLSAgPC9zY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpzYXZlQWRkcmVzcyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpmaW5kQWRkcmVzcyIvPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgZWxlbWVudD0iaW50ZjpBZGRyZXNzSGVhZGVyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkFkZHJlc3NCb29rU2VydmljZSI+Ci0gPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTEvMjAxMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTEvMjAxMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4NTdmN2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMS0xLzIwMTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIAotICAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSIyMDExLnhzZCIgCi0gICAgICAgICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgICAgICAgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiAKLSAgICAgICAgIHhtbG5zOmludGY9IjIwMTEtMS54c2QiIAotICAgICAgICAgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICAgIDxpbXBvcnQgbmFtZXNwYWNlPSJuZXh0LnhzZCIgc2NoZW1hTG9jYXRpb249Im5leHQueHNkIi8+Ci0gIDwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtMS9uZXh0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtMS9uZXh0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWE2ODQyMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTEvbmV4dC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHhzOnNjaGVtYSAKLSAgdGFyZ2V0TmFtZXNwYWNlPSJuZXh0LnhzZCIKLSAgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgeG1sbnM6cz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8iIAotICBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+Ci0JPHhzOmFubm90YXRpb24+Ci0JICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgIAkgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLQk8L3hzOmFubm90YXRpb24+Ci08L3hzOnNjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtMS90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTEvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmI2NzBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtMS90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjAxMS0xIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG9uZm9ybWFudCB3c2RsLgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcy8+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtMi8yMDExLTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtMi8yMDExLTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQzMDhjZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTIvMjAxMS0yLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbHNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmltcGw9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICA8c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gICAgIDxpbXBvcnQgbmFtZXNwYWNlPSIyMDExLnhzZCIgc2NoZW1hTG9jYXRpb249IjIwMTEueHNkIi8+Ci0gICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzcyI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcm92aW5jZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0iY2l0eSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ic3RyZWV0IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwb3N0YWxDb2RlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwaG9uZU51bWJlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6UGhvbmVOdW1iZXIiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJQaG9uZU51bWJlciI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJhcmVhIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByZWZpeCIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJudW1iZXIiIHR5cGU9InhzZDppbnQiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXR1cm4iIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGVsZW1lbnQgbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImFkZHJlc3MiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGVsZW1lbnQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2UvPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzc0hlYWRlclR5cGUiPgotCTxhbGw+Ci0JIDxlbGVtZW50IG5hbWU9ImEiIHR5cGU9ImludCIvPgotCSA8ZWxlbWVudCBuYW1lPSJiIiB0eXBlPSJib29sZWFuIi8+Ci0JIDxlbGVtZW50IG5hbWU9InMiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJzdHJpbmciLz4KLQk8L2FsbD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzSGVhZGVyVHlwZSIvPgotICA8L3NjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOnNhdmVBZGRyZXNzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzIi8+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBlbGVtZW50PSJpbnRmOkFkZHJlc3NIZWFkZXIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQWRkcmVzc0Jvb2tTZXJ2aWNlIj4KLSA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtMi8yMDExLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtMi8yMDExLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzMyMTZkNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTIvMjAxMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMSIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0gPHNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgCi0gICAgICAgICB0YXJnZXROYW1lc3BhY2U9IjIwMTEueHNkIiAKLSAgICAgICAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgICAgICB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIAotICAgICAgICAgeG1sbnM6aW50Zj0iMjAxMS0xLnhzZCIgCi0gICAgICAgICB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtMi90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTIvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmI3MGQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtMi90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMTEtMiI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24tY29uZm9ybWFudCB3c2RsIHRoYXQgc2hvdWxkIGZhaWwgdGVzdCBhc3NlcnRpb24gQlAyMDExLgotICAgIEhvd2V2ZXIgdGhlIHByZXJlcXVpc2l0ZSBCUDIxMDIgZmFpbHMgYmVmb3JlIHdlIGFjdHVhbGx5IGNhbiBleGVjdXRlIHRoZSB0ZXN0IGFzc2VydGlvbi4KLSAgICBOb3RlIHRoaXMgYXNzZXJ0aW9uIGlzIGNhdWdodCBieSB0aGUgYmFzZSBXU0RMIHZhbGlkYXRvci4KLSAgICBTbyB0aGlzIGFzc2VydGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgd2hlbiBydW5uaW5nIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlCi0gICAgYmFzZSB2YWxpZGF0b3IuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotCTxhc3NlcnRpb24gaWQ9IkJQMjEwMiIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjEyMiIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjIwMiIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjEwMiIgdGFkSUQ9IkFQMTAiLz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIxMjIiIHRhZElEPSJBUDEwIi8+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMjAyIiB0YWRJRD0iQVAxMCIvPgotICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtMy8yMDExLTMud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtMy8yMDExLTMud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQzMDhjZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTMvMjAxMS0zLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbHNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmltcGw9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICA8c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gICAgIDxpbXBvcnQgbmFtZXNwYWNlPSIyMDExLnhzZCIgc2NoZW1hTG9jYXRpb249IjIwMTEueHNkIi8+Ci0gICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzcyI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcm92aW5jZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0iY2l0eSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ic3RyZWV0IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwb3N0YWxDb2RlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwaG9uZU51bWJlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6UGhvbmVOdW1iZXIiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJQaG9uZU51bWJlciI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJhcmVhIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByZWZpeCIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJudW1iZXIiIHR5cGU9InhzZDppbnQiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXR1cm4iIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGVsZW1lbnQgbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImFkZHJlc3MiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGVsZW1lbnQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2UvPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzc0hlYWRlclR5cGUiPgotCTxhbGw+Ci0JIDxlbGVtZW50IG5hbWU9ImEiIHR5cGU9ImludCIvPgotCSA8ZWxlbWVudCBuYW1lPSJiIiB0eXBlPSJib29sZWFuIi8+Ci0JIDxlbGVtZW50IG5hbWU9InMiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJzdHJpbmciLz4KLQk8L2FsbD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzSGVhZGVyVHlwZSIvPgotICA8L3NjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOnNhdmVBZGRyZXNzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzIi8+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBlbGVtZW50PSJpbnRmOkFkZHJlc3NIZWFkZXIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQWRkcmVzc0Jvb2tTZXJ2aWNlIj4KLSA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtMy8yMDExLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtMy8yMDExLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODg1N2Y3Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTMvMjAxMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0gPHNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgCi0gICAgICAgICB0YXJnZXROYW1lc3BhY2U9IjIwMTEueHNkIiAKLSAgICAgICAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgICAgICB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIAotICAgICAgICAgeG1sbnM6aW50Zj0iMjAxMS0xLnhzZCIgCi0gICAgICAgICB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gICAgPGltcG9ydCBuYW1lc3BhY2U9Im5leHQueHNkIiBzY2hlbWFMb2NhdGlvbj0ibmV4dC54c2QiLz4KLSAgPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMS0zL25leHQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMS0zL25leHQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjBhNzdmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtMy9uZXh0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMSIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08eHM6c2NoZW1hIAotICB0YXJnZXROYW1lc3BhY2U9Im5leHQueHNkIgotICB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICB4bWxuczpzPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyIgCi0gIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KLQk8eHM6YW5ub3RhdGlvbj4KLQkgIDx4czpkb2N1bWVudGF0aW9uPgotICAgCSAgPC94czpkb2N1bWVudGF0aW9uPgotCTwveHM6YW5ub3RhdGlvbj4KLTwveHM6c2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMS0zL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtMy90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmY2ExZTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMS0zL3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjAxMS0zIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG5vbi1jb25mb3JtYW50IHdzZGwgdGhhdCBzaG91bGQgZmFpbCB0ZXN0IGFzc2VydGlvbiBCUDIwMTEuCi0gICAgSG93ZXZlciB0aGUgcHJlcmVxdWlzaXRlIEJQMjEwMiBmYWlscyBiZWZvcmUgd2UgYWN0dWFsbHkgY2FuIGV4ZWN1dGUgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAgIE5vdGUgdGhpcyBhc3NlcnRpb24gaXMgY2F1Z2h0IGJ5IHRoZSBiYXNlIFdTREwgdmFsaWRhdG9yLgotICAgIFNvIHRoaXMgYXNzZXJ0aW9uIHNob3VsZCBiZSBkaXNhYmxlZCB3aGVuIHJ1bm5pbmcgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUKLSAgICBiYXNlIHZhbGlkYXRvci4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXM+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMTAyIiB0YWRJRD0iU1NCUDEwIi8+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMTIyIiB0YWRJRD0iU1NCUDEwIi8+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMjAyIiB0YWRJRD0iU1NCUDEwIi8+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMTAyIiB0YWRJRD0iQVAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjEyMiIgdGFkSUQ9IkFQMTAiLz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIyMDIiIHRhZElEPSJBUDEwIi8+Ci0gIDwvZXhwZWN0ZWRGYWlsdXJlcz4KLTwvdGVzdGNhc2U+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMS00LzIwMTEtNC53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMS00LzIwMTEtNC53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDMwOGNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtNC8yMDExLTQud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2Rsc29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6aW1wbD0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICA8d3NkbDp0eXBlcz4KLSAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgICAgPGltcG9ydCBuYW1lc3BhY2U9IjIwMTEueHNkIiBzY2hlbWFMb2NhdGlvbj0iMjAxMS54c2QiLz4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkcmVzcyIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZS8+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3NIZWFkZXJUeXBlIi8+Ci0gIDwvc2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3MiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3MiLz4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IkFkZHJlc3NIZWFkZXIiIGVsZW1lbnQ9ImludGY6QWRkcmVzc0hlYWRlciIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iQWRkcmVzc0Jvb2siPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJBZGRyZXNzQm9va1NlcnZpY2UiPgotIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMS00LzIwMTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMS00LzIwMTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMmM4N2JmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtNC8yMDExLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLSA8c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiAKLSAgICAgICAgIHRhcmdldE5hbWVzcGFjZT0iMjAxMS54c2QiIAotICAgICAgICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICAgICAgIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgCi0gICAgICAgICB4bWxuczppbnRmPSIyMDExLTEueHNkIiAKLSAgICAgICAgIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMS00L3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtNC90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyNmIyYTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMS00L3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjAxMS00Ij4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG5vbi1jb25mb3JtYW50IHdzZGwgdGhhdCBzaG91bGQgZmFpbCB0ZXN0IGFzc2VydGlvbiBCUDIwMTEuCi0gICAgSG93ZXZlciB0aGUgcHJlcmVxdWlzaXRlIEJQMjEwMiBmYWlscyBiZWZvcmUgd2UgYWN0dWFsbHkgY2FuIGV4ZWN1dGUgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAgIE5vdGUgdGhpcyBhc3NlcnRpb24gaXMgY2F1Z2h0IGJ5IHRoZSBiYXNlIFdTREwgdmFsaWRhdG9yLgotICAgIFNvIHRoaXMgYXNzZXJ0aW9uIHNob3VsZCBiZSBkaXNhYmxlZCB3aGVuIHJ1bm5pbmcgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUKLSAgICBiYXNlIHZhbGlkYXRvci4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXM+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMTAyIiB0YWRJRD0iU1NCUDEwIi8+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMTIyIiB0YWRJRD0iU1NCUDEwIi8+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMTAyIiB0YWRJRD0iQVAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjEyMiIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotCi08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtNS8yMDExLTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtNS8yMDExLTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2I0NTgzNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTUvMjAxMS01LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbHNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmltcGw9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICA8c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gICAgIDxpbXBvcnQgbmFtZXNwYWNlPSIyMDExLTEueHNkIiBzY2hlbWFMb2NhdGlvbj0iMjAxMS0xLnhzZCIvPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3MiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3MiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJvdmluY2UiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImNpdHkiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InN0cmVldCIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icG9zdGFsQ29kZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icGhvbmVOdW1iZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOlBob25lTnVtYmVyIi8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iUGhvbmVOdW1iZXIiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0iYXJlYSIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcmVmaXgiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ibnVtYmVyIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmV0dXJuIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxlbGVtZW50IG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJhZGRyZXNzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxlbGVtZW50IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlLz4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3NIZWFkZXJUeXBlIj4KLQk8YWxsPgotCSA8ZWxlbWVudCBuYW1lPSJhIiB0eXBlPSJpbnQiLz4KLQkgPGVsZW1lbnQgbmFtZT0iYiIgdHlwZT0iYm9vbGVhbiIvPgotCSA8ZWxlbWVudCBuYW1lPSJzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ic3RyaW5nIi8+Ci0JPC9hbGw+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzc0hlYWRlclR5cGUiLz4KLSAgPC9zY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpzYXZlQWRkcmVzcyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpmaW5kQWRkcmVzcyIvPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgZWxlbWVudD0iaW50ZjpBZGRyZXNzSGVhZGVyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkFkZHJlc3NCb29rU2VydmljZSI+Ci0gPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTUvMjAxMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTUvMjAxMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4NTdmN2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMS01LzIwMTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIAotICAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSIyMDExLnhzZCIgCi0gICAgICAgICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgICAgICAgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiAKLSAgICAgICAgIHhtbG5zOmludGY9IjIwMTEtMS54c2QiIAotICAgICAgICAgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICAgIDxpbXBvcnQgbmFtZXNwYWNlPSJuZXh0LnhzZCIgc2NoZW1hTG9jYXRpb249Im5leHQueHNkIi8+Ci0gIDwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtNS9uZXh0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtNS9uZXh0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQzYzQ1NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDExLTUvbmV4dC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08eHM6c2NoZW1hIAotICB0YXJnZXROYW1lc3BhY2U9Im5leHQueHNkIgotICB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICB4bWxuczpzPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyIgCi0gIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KLQk8eHM6YW5ub3RhdGlvbj4KLTwveHM6c2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMS01L3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMTEtNS90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0OWNiMjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAxMS01L3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjAxMS01Ij4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG5vbi1jb25mb3JtYW50IHdzZGwgdGhhdCBzaG91bGQgZmFpbCB0ZXN0IGFzc2VydGlvbiBCUDIwMTEuCi0gICAgSG93ZXZlciB0aGUgcHJlcmVxdWlzaXRlIEJQMjEwMiBmYWlscyBiZWZvcmUgd2UgYWN0dWFsbHkgY2FuIGV4ZWN1dGUgdGhlIHRlc3QgYXNzZXJ0aW9uLgotICAgIE5vdGUgdGhpcyBhc3NlcnRpb24gaXMgY2F1Z2h0IGJ5IHRoZSBiYXNlIFdTREwgdmFsaWRhdG9yLgotICAgIFNvIHRoaXMgYXNzZXJ0aW9uIHNob3VsZCBiZSBkaXNhYmxlZCB3aGVuIHJ1bm5pbmcgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUKLSAgICBiYXNlIHZhbGlkYXRvci4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXM+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMTAyIiB0YWRJRD0iU1NCUDEwIi8+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMTIyIiB0YWRJRD0iU1NCUDEwIi8+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMjAyIiB0YWRJRD0iU1NCUDEwIi8+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMTAyIiB0YWRJRD0iQVAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjEyMiIgdGFkSUQ9IkFQMTAiLz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIyMDIiIHRhZElEPSJBUDEwIi8+Ci0gIDwvZXhwZWN0ZWRGYWlsdXJlcz4KLTwvdGVzdGNhc2U+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMS0xLzIwMjEtMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMS0xLzIwMjEtMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDM2ODRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjEtMS8yMDIxLTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbHNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmltcGw9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotIAotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3MiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJvdmluY2UiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImNpdHkiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InN0cmVldCIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icG9zdGFsQ29kZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icGhvbmVOdW1iZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOlBob25lTnVtYmVyIi8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iUGhvbmVOdW1iZXIiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0iYXJlYSIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcmVmaXgiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ibnVtYmVyIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmV0dXJuIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImFkZHJlc3MiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgIDxzZXF1ZW5jZS8+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3NIZWFkZXJUeXBlIj4KLQk8YWxsPgotCSA8ZWxlbWVudCBuYW1lPSJhIiB0eXBlPSJpbnQiLz4KLQkgPGVsZW1lbnQgbmFtZT0iYiIgdHlwZT0iYm9vbGVhbiIvPgotCSA8ZWxlbWVudCBuYW1lPSJzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ic3RyaW5nIi8+Ci0JPC9hbGw+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgdHlwZT0iaW1wbDpBZGRyZXNzSGVhZGVyVHlwZSIvPgotICAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3MiIHR5cGU9InN0cmluZyIvPgotICA8L3NjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJpbnRmOnNhdmVBZGRyZXNzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBlbGVtZW50PSJpbnRmOkFkZHJlc3NIZWFkZXIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0icGFyYW1ldGVyZmF1bHQiPgotICAgIDxwYXJ0IG5hbWU9InBhcnQzIiBlbGVtZW50PSJpbnRmOkFkZHJlc3MiIC8+Ci0gIDwvd3NkbDptZXNzYWdlPiAgCi0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iZjEiIG1lc3NhZ2U9ImludGY6cGFyYW1ldGVyZmF1bHQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkFkZHJlc3NCb29rU29hcEJpbmRpbmciIHR5cGU9ImludGY6QWRkcmVzc0Jvb2siPgotICAgIDx3c2Rsc29hcDpiaW5kaW5nIHN0eWxlPSJycGMiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6aGVhZGVyIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0IiBwYXJ0cz0iQWRkcmVzc0hlYWRlciIgdXNlPSJsaXRlcmFsIj4KLSAgICAgICAgICA8d3NkbHNvYXA6aGVhZGVyZmF1bHQgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiICBwYXJ0PSJBZGRyZXNzSGVhZGVyIiB1c2U9ImxpdGVyYWwiLz4KLSAgICAgICAgPC93c2Rsc29hcDpoZWFkZXI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHBhcnRzPSJwYXJhbWV0ZXJzIiB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICAgIDx3c2RsOmZhdWx0IG5hbWU9ImYxIj4KLSAgICAgICAgPHdzZGxzb2FwOmZhdWx0IHVzZT0ibGl0ZXJhbCIgbmFtZT0iZjEiLz4KLSAgICAgIDwvd3NkbDpmYXVsdD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQWRkcmVzc0Jvb2tTZXJ2aWNlIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IkFkZHJlc3NCb29rIiBiaW5kaW5nPSJpbnRmOkFkZHJlc3NCb29rU29hcEJpbmRpbmciPgotICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9BZGRyZXNzQm9vayIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjEtMS90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIxLTEvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDY2N2I0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjEtMS90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMjEtMSI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24tY29uZm9ybWFudCB3c2RsIHRoYXQgc2hvdWxkIGZhaWwgdGVzdCBhc3NlcnRpb24gQlAyMDIxLgotICAgIFNvYXBiaW5kOmhlYWRlciBlbGVtZW50IHVzZXMgcGFydHMgYXR0cmlidXRlLgotICAgIE5vdGUgdGhpcyBhc3NlcnRpb24gaXMgY2F1Z2h0IGJ5IHRoZSBiYXNlIFdTREwgdmFsaWRhdG9yLgotICAgIFNvIHRoaXMgYXNzZXJ0aW9uIHNob3VsZCBiZSBkaXNhYmxlZCB3aGVuIHJ1bm5pbmcgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUKLSAgICBiYXNlIHZhbGlkYXRvci4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXM+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMDIxIiB0YWRJRD0iU1NCUDEwIi8+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMDIxIiB0YWRJRD0iQVAxMCIvPgotICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjEtMi8yMDIxLTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjEtMi8yMDIxLTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjY0ZjUyMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIxLTIvMjAyMS0yLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAKLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJhZGRyZXNzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICA8c2VxdWVuY2UvPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIHR5cGU9ImltcGw6QWRkcmVzc0hlYWRlclR5cGUiLz4KLSAgICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzIiB0eXBlPSJzdHJpbmciLz4KLSAgPC9zY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpzYXZlQWRkcmVzcyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgZWxlbWVudD0iaW50ZjpBZGRyZXNzSGVhZGVyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InBhcmFtZXRlcmZhdWx0Ij4KLSAgICA8cGFydCBuYW1lPSJwYXJ0MyIgZWxlbWVudD0iaW50ZjpBZGRyZXNzIiAvPgotICA8L3dzZGw6bWVzc2FnZT4gIAotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICAgIDx3c2RsOmZhdWx0IG5hbWU9ImYxIiBtZXNzYWdlPSJpbnRmOnBhcmFtZXRlcmZhdWx0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJBZGRyZXNzQm9va1NvYXBCaW5kaW5nIiB0eXBlPSJpbnRmOkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbHNvYXA6YmluZGluZyBzdHlsZT0icnBjIiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmhlYWRlciBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIgdXNlPSJsaXRlcmFsIj4KLSAgICAgICAgICA8d3NkbHNvYXA6aGVhZGVyZmF1bHQgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiICBwYXJ0PSJBZGRyZXNzSGVhZGVyIiB1c2U9ImxpdGVyYWwiLz4KLSAgICAgICAgPC93c2Rsc29hcDpoZWFkZXI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHBhcnRzPSJwYXJhbWV0ZXJzIiB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICAgIDx3c2RsOmZhdWx0IG5hbWU9ImYxIj4KLSAgICAgICAgPHdzZGxzb2FwOmZhdWx0IHVzZT0ibGl0ZXJhbCIgbmFtZT0iZjEiLz4KLSAgICAgIDwvd3NkbDpmYXVsdD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQWRkcmVzc0Jvb2tTZXJ2aWNlIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IkFkZHJlc3NCb29rIiBiaW5kaW5nPSJpbnRmOkFkZHJlc3NCb29rU29hcEJpbmRpbmciPgotICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9BZGRyZXNzQm9vayIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjEtMi90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIxLTIvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NjdiNmFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjEtMi90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMjEtMiI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24tY29uZm9ybWFudCB3c2RsIHRoYXQgc2hvdWxkIGZhaWwgdGVzdCBhc3NlcnRpb24gQlAyMDIxLgotICAgIFNvYXBiaW5kOmhlYWRlciBlbGVtZW50IGRvZXMgbm90IGhhdmUgYSBwYXJ0IGF0dHJpYnV0ZS4KLSAgICBOb3RlIHRoaXMgYXNzZXJ0aW9uIGlzIGNhdWdodCBieSB0aGUgYmFzZSBXU0RMIHZhbGlkYXRvci4KLSAgICBTbyB0aGlzIGFzc2VydGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgd2hlbiBydW5uaW5nIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlCi0gICAgYmFzZSB2YWxpZGF0b3IuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAyMSIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAyMSIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIxLTMvMjAyMS0zLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIxLTMvMjAyMS0zLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmN2NlZGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMS0zLzIwMjEtMy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2Rsc29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6aW1wbD0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICA8d3NkbDp0eXBlcz4KLSAgICA8c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gCi0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzcyI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcm92aW5jZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0iY2l0eSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ic3RyZWV0IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwb3N0YWxDb2RlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwaG9uZU51bWJlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6UGhvbmVOdW1iZXIiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJQaG9uZU51bWJlciI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJhcmVhIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByZWZpeCIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJudW1iZXIiIHR5cGU9InhzZDppbnQiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXR1cm4iIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkcmVzcyIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgPHNlcXVlbmNlLz4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzc0hlYWRlclR5cGUiPgotCTxhbGw+Ci0JIDxlbGVtZW50IG5hbWU9ImEiIHR5cGU9ImludCIvPgotCSA8ZWxlbWVudCBuYW1lPSJiIiB0eXBlPSJib29sZWFuIi8+Ci0JIDxlbGVtZW50IG5hbWU9InMiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJzdHJpbmciLz4KLQk8L2FsbD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzSGVhZGVyIiB0eXBlPSJpbXBsOkFkZHJlc3NIZWFkZXJUeXBlIi8+Ci0gICAgPGVsZW1lbnQgbmFtZT0iQWRkcmVzcyIgdHlwZT0ic3RyaW5nIi8+Ci0gIDwvc2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9ImludGY6c2F2ZUFkZHJlc3MiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IkFkZHJlc3NIZWFkZXIiIGVsZW1lbnQ9ImludGY6QWRkcmVzc0hlYWRlciIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIHR5cGU9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJwYXJhbWV0ZXJmYXVsdCI+Ci0gICAgPHBhcnQgbmFtZT0icGFydDMiIGVsZW1lbnQ9ImludGY6QWRkcmVzcyIgLz4KLSAgPC93c2RsOm1lc3NhZ2U+ICAKLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iQWRkcmVzc0Jvb2siPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgICA8d3NkbDpmYXVsdCBuYW1lPSJmMSIgbWVzc2FnZT0iaW50ZjpwYXJhbWV0ZXJmYXVsdCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQWRkcmVzc0Jvb2tTb2FwQmluZGluZyIgdHlwZT0iaW50ZjpBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGxzb2FwOmJpbmRpbmcgc3R5bGU9InJwYyIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpoZWFkZXIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiIHBhcnQ9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCI+Ci0gICAgICAgICAgPHdzZGxzb2FwOmhlYWRlcmZhdWx0IG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0IiAgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICAgIDwvd3NkbHNvYXA6aGVhZGVyPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSBwYXJ0cz0icGFyYW1ldGVycyIgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiBuYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgICA8d3NkbDpmYXVsdCBuYW1lPSJmMSI+Ci0gICAgICAgIDx3c2Rsc29hcDpmYXVsdCB1c2U9ImxpdGVyYWwiIG5hbWU9ImYxIi8+Ci0gICAgICA8L3dzZGw6ZmF1bHQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkFkZHJlc3NCb29rU2VydmljZSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJBZGRyZXNzQm9vayIgYmluZGluZz0iaW50ZjpBZGRyZXNzQm9va1NvYXBCaW5kaW5nIj4KLSAgICAgIDx3c2Rsc29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvQWRkcmVzc0Jvb2siLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIxLTMvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMS0zL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjliMDE1Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIxLTMvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSIyMDIxLTMiPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgbm9uLWNvbmZvcm1hbnQgd3NkbCB0aGF0IHNob3VsZCBmYWlsIHRlc3QgYXNzZXJ0aW9uIEJQMjAyMS4KLSAgICBTb2FwYmluZDpoZWFkZXJmYXVsdCBlbGVtZW50IGRvZXMgbm90IGhhdmUgYSBwYXJ0IGF0dHJpYnV0ZS4KLSAgICBOb3RlIHRoaXMgYXNzZXJ0aW9uIGlzIGNhdWdodCBieSB0aGUgYmFzZSBXU0RMIHZhbGlkYXRvci4KLSAgICBTbyB0aGlzIGFzc2VydGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgd2hlbiBydW5uaW5nIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlCi0gICAgYmFzZSB2YWxpZGF0b3IuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAyMSIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAyMSIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIxLTQvMjAyMS00LndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIxLTQvMjAyMS00LndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0NGFiN2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMS00LzIwMjEtNC53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d3NkbDpkZWZpbml0aW9ucyB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp3c2Rsc29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6aW1wbD0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICA8d3NkbDp0eXBlcz4KLSAgICA8c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6YXBhY2hlc29hcD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbC1zb2FwIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzcyI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcm92aW5jZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0iY2l0eSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ic3RyZWV0IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwb3N0YWxDb2RlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwaG9uZU51bWJlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6UGhvbmVOdW1iZXIiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJQaG9uZU51bWJlciI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJhcmVhIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByZWZpeCIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJudW1iZXIiIHR5cGU9InhzZDppbnQiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXR1cm4iIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGVsZW1lbnQgbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImFkZHJlc3MiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGVsZW1lbnQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2UvPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzc0hlYWRlclR5cGUiPgotCTxhbGw+Ci0JIDxlbGVtZW50IG5hbWU9ImEiIHR5cGU9ImludCIvPgotCSA8ZWxlbWVudCBuYW1lPSJiIiB0eXBlPSJib29sZWFuIi8+Ci0JIDxlbGVtZW50IG5hbWU9InMiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJzdHJpbmciLz4KLQk8L2FsbD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzSGVhZGVyVHlwZSIvPgotICA8L3NjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOnNhdmVBZGRyZXNzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzIi8+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBlbGVtZW50PSJpbnRmOkFkZHJlc3NIZWFkZXIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0icGFyYW1ldGVyZmF1bHQiPgotICAgIDxwYXJ0IG5hbWU9InBhcnQzIiBlbGVtZW50PSJpbnRmOmZpbmRBZGRyZXNzIiAvPgotICAgPC93c2RsOm1lc3NhZ2U+IAotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICAgIDx3c2RsOmZhdWx0IG5hbWU9ImYxIiBtZXNzYWdlPSJpbnRmOnBhcmFtZXRlcmZhdWx0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJBZGRyZXNzQm9va1NvYXBCaW5kaW5nIiB0eXBlPSJpbnRmOkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6aGVhZGVyIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0IiBwYXJ0cz0iQWRkcmVzc0hlYWRlciIgdXNlPSJsaXRlcmFsIj4KLSAgICAgICAgICAgPHdzZGxzb2FwOmhlYWRlcmZhdWx0IG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0IiAgcGFydD0iQWRkcmVzc0hlYWRlciIgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICAgICA8L3dzZGxzb2FwOmhlYWRlcj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgcGFydHM9InBhcmFtZXRlcnMiIHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgICA8d3NkbDpmYXVsdCBuYW1lPSJmMSI+Ci0gICAgICAgIDx3c2Rsc29hcDpmYXVsdCB1c2U9ImxpdGVyYWwiIG5hbWU9ImYxIi8+Ci0gICAgICA8L3dzZGw6ZmF1bHQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQWRkcmVzc0Jvb2tTZXJ2aWNlIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IkFkZHJlc3NCb29rIiBiaW5kaW5nPSJpbnRmOkFkZHJlc3NCb29rU29hcEJpbmRpbmciPgotICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9BZGRyZXNzQm9vayIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjEtNC90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIxLTQvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDVjYzQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjEtNC90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9IjIwMjEtNCI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBub24tY29uZm9ybWFudCB3c2RsIHRoYXQgc2hvdWxkIGZhaWwgdGVzdCBhc3NlcnRpb24gQlAyMDIxLgotICAgIFNvYXBiaW5kOmhlYWRlciBlbGVtZW50IHVzZXMgcGFydHMgYXR0cmlidXRlLgotICAgIE5vdGUgdGhpcyBhc3NlcnRpb24gaXMgY2F1Z2h0IGJ5IHRoZSBiYXNlIFdTREwgdmFsaWRhdG9yLgotICAgIFNvIHRoaXMgYXNzZXJ0aW9uIHNob3VsZCBiZSBkaXNhYmxlZCB3aGVuIHJ1bm5pbmcgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUKLSAgICBiYXNlIHZhbGlkYXRvci4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXM+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMDIxIiB0YWRJRD0iU1NCUDEwIi8+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMDIxIiB0YWRJRD0iQVAxMCIvPgotICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjEtNS8yMDIxLTUud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjEtNS8yMDIxLTUud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2I1ZDdmMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIxLTUvMjAyMS01LndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkcmVzcyIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZS8+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3NIZWFkZXJUeXBlIi8+Ci0gIDwvc2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3MiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3MiLz4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IkFkZHJlc3NIZWFkZXIiIGVsZW1lbnQ9ImludGY6QWRkcmVzc0hlYWRlciIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJwYXJhbWV0ZXJmYXVsdCI+Ci0gICAgPHBhcnQgbmFtZT0icGFydDMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3MiIC8+Ci0gICA8L3dzZGw6bWVzc2FnZT4gCi0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iZjEiIG1lc3NhZ2U9ImludGY6cGFyYW1ldGVyZmF1bHQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkFkZHJlc3NCb29rU29hcEJpbmRpbmciIHR5cGU9ImludGY6QWRkcmVzc0Jvb2siPgotICAgIDx3c2Rsc29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpoZWFkZXIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiIHVzZT0ibGl0ZXJhbCI+Ci0gICAgICAgICAgIDx3c2Rsc29hcDpoZWFkZXJmYXVsdCBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIgIHBhcnQ9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCIvPgotICAgICAgICAgPC93c2Rsc29hcDpoZWFkZXI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHBhcnRzPSJwYXJhbWV0ZXJzIiB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iZjEiPgotICAgICAgICA8d3NkbHNvYXA6ZmF1bHQgdXNlPSJsaXRlcmFsIiBuYW1lPSJmMSIvPgotICAgICAgPC93c2RsOmZhdWx0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkFkZHJlc3NCb29rU2VydmljZSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJBZGRyZXNzQm9vayIgYmluZGluZz0iaW50ZjpBZGRyZXNzQm9va1NvYXBCaW5kaW5nIj4KLSAgICAgIDx3c2Rsc29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvQWRkcmVzc0Jvb2siLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIxLTUvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMS01L3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjdjOTI4Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIxLTUvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSIyMDIxLTUiPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgbm9uLWNvbmZvcm1hbnQgd3NkbCB0aGF0IHNob3VsZCBmYWlsIHRlc3QgYXNzZXJ0aW9uIEJQMjAyMS4KLSAgICBTb2FwYmluZDpoZWFkZXIgZWxlbWVudCBkb2VzIG5vdCBoYXZlIGEgcGFydCBhdHRyaWJ1dGUuCi0gICAgTm90ZSB0aGlzIGFzc2VydGlvbiBpcyBjYXVnaHQgYnkgdGhlIGJhc2UgV1NETCB2YWxpZGF0b3IuCi0gICAgU28gdGhpcyBhc3NlcnRpb24gc2hvdWxkIGJlIGRpc2FibGVkIHdoZW4gcnVubmluZyBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZQotICAgIGJhc2UgdmFsaWRhdG9yLgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIwMjEiIHRhZElEPSJTU0JQMTAiLz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIwMjEiIHRhZElEPSJBUDEwIi8+Ci0gIDwvZXhwZWN0ZWRGYWlsdXJlcz4KLTwvdGVzdGNhc2U+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMS02LzIwMjEtNi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMS02LzIwMjEtNi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4N2E4NTUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjEtNi8yMDIxLTYud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbHNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmltcGw9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3MiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3MiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJvdmluY2UiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImNpdHkiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InN0cmVldCIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icG9zdGFsQ29kZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icGhvbmVOdW1iZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOlBob25lTnVtYmVyIi8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iUGhvbmVOdW1iZXIiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0iYXJlYSIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcmVmaXgiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ibnVtYmVyIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmV0dXJuIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxlbGVtZW50IG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJhZGRyZXNzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxlbGVtZW50IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlLz4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3NIZWFkZXJUeXBlIj4KLQk8YWxsPgotCSA8ZWxlbWVudCBuYW1lPSJhIiB0eXBlPSJpbnQiLz4KLQkgPGVsZW1lbnQgbmFtZT0iYiIgdHlwZT0iYm9vbGVhbiIvPgotCSA8ZWxlbWVudCBuYW1lPSJzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ic3RyaW5nIi8+Ci0JPC9hbGw+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzc0hlYWRlclR5cGUiLz4KLSAgPC9zY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpzYXZlQWRkcmVzcyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpmaW5kQWRkcmVzcyIvPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgZWxlbWVudD0iaW50ZjpBZGRyZXNzSGVhZGVyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InBhcmFtZXRlcmZhdWx0Ij4KLSAgICA8cGFydCBuYW1lPSJwYXJ0MyIgZWxlbWVudD0iaW50ZjpmaW5kQWRkcmVzcyIgLz4KLSAgIDwvd3NkbDptZXNzYWdlPiAKLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iQWRkcmVzc0Jvb2siPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgICA8d3NkbDpmYXVsdCBuYW1lPSJmMSIgbWVzc2FnZT0iaW50ZjpwYXJhbWV0ZXJmYXVsdCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQWRkcmVzc0Jvb2tTb2FwQmluZGluZyIgdHlwZT0iaW50ZjpBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmhlYWRlciBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIgcGFydD0iQWRkcmVzc0hlYWRlciIgdXNlPSJsaXRlcmFsIj4KLSAgICAgICAgICAgPHdzZGxzb2FwOmhlYWRlcmZhdWx0IG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0IiB1c2U9ImxpdGVyYWwiLz4KLSAgICAgICAgIDwvd3NkbHNvYXA6aGVhZGVyPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSBwYXJ0cz0icGFyYW1ldGVycyIgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICAgIDx3c2RsOmZhdWx0IG5hbWU9ImYxIj4KLSAgICAgICAgPHdzZGxzb2FwOmZhdWx0IHVzZT0ibGl0ZXJhbCIgbmFtZT0iZjEiLz4KLSAgICAgIDwvd3NkbDpmYXVsdD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJBZGRyZXNzQm9va1NlcnZpY2UiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iQWRkcmVzc0Jvb2siIGJpbmRpbmc9ImludGY6QWRkcmVzc0Jvb2tTb2FwQmluZGluZyI+Ci0gICAgICA8d3NkbHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL0FkZHJlc3NCb29rIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMS02L3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjEtNi90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3ZjE1MDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMS02L3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjAyMS02Ij4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG5vbi1jb25mb3JtYW50IHdzZGwgdGhhdCBzaG91bGQgZmFpbCB0ZXN0IGFzc2VydGlvbiBCUDIwMjEuCi0gICAgU29hcGJpbmQ6aGVhZGVyZmF1bHQgZWxlbWVudCBkb2VzIG5vdCBoYXZlIGEgcGFydCBhdHRyaWJ1dGUuCi0gICAgTm90ZSB0aGlzIGFzc2VydGlvbiBpcyBjYXVnaHQgYnkgdGhlIGJhc2UgV1NETCB2YWxpZGF0b3IuCi0gICAgU28gdGhpcyBhc3NlcnRpb24gc2hvdWxkIGJlIGRpc2FibGVkIHdoZW4gcnVubmluZyBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZQotICAgIGJhc2UgdmFsaWRhdG9yLgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIwMjEiIHRhZElEPSJTU0JQMTAiLz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIwMjEiIHRhZElEPSJBUDEwIi8+Ci0gIDwvZXhwZWN0ZWRGYWlsdXJlcz4KLTwvdGVzdGNhc2U+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMi0xLzIwMjItMS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMi0xLzIwMjItMS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTM4MGMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjItMS8yMDIyLTEud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbHNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmltcGw9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotIAotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3MiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJvdmluY2UiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImNpdHkiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InN0cmVldCIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icG9zdGFsQ29kZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icGhvbmVOdW1iZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOlBob25lTnVtYmVyIi8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iUGhvbmVOdW1iZXIiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0iYXJlYSIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcmVmaXgiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ibnVtYmVyIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmV0dXJuIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImFkZHJlc3MiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3MiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgIDxzZXF1ZW5jZS8+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3NIZWFkZXJUeXBlIj4KLQk8YWxsPgotCSA8ZWxlbWVudCBuYW1lPSJhIiB0eXBlPSJpbnQiLz4KLQkgPGVsZW1lbnQgbmFtZT0iYiIgdHlwZT0iYm9vbGVhbiIvPgotCSA8ZWxlbWVudCBuYW1lPSJzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ic3RyaW5nIi8+Ci0JPC9hbGw+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgdHlwZT0iaW1wbDpBZGRyZXNzSGVhZGVyVHlwZSIvPgotICAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3MiIHR5cGU9InN0cmluZyIvPgotICA8L3NjaGVtYT4KLSAgPC93c2RsOnR5cGVzPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJpbnRmOnNhdmVBZGRyZXNzIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJBZGRyZXNzSGVhZGVyIiBlbGVtZW50PSJpbnRmOkFkZHJlc3NIZWFkZXIiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiB0eXBlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0icGFyYW1ldGVyZmF1bHQiPgotICAgIDxwYXJ0IG5hbWU9InBhcnQzIiBlbGVtZW50PSJpbnRmOkFkZHJlc3MiIC8+Ci0gIDwvd3NkbDptZXNzYWdlPiAgCi0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iZjEiIG1lc3NhZ2U9ImludGY6cGFyYW1ldGVyZmF1bHQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkFkZHJlc3NCb29rU29hcEJpbmRpbmciIHR5cGU9ImludGY6QWRkcmVzc0Jvb2siPgotICAgIDx3c2Rsc29hcDpiaW5kaW5nIHN0eWxlPSJycGMiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6aGVhZGVyIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0IiBwYXJ0PSJBZGRyZXNzSGVhZGVyIiB1c2U9ImxpdGVyYWwiPgotICAgICAgICAgIDx3c2Rsc29hcDpoZWFkZXJmYXVsdCBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIgIHBhcnQ9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCIvPgotICAgICAgICA8L3dzZGxzb2FwOmhlYWRlcj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgcGFydHM9InBhcmFtZXRlcnMiIHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iZjEiPgotICAgICAgICA8d3NkbHNvYXA6ZmF1bHQgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6ZmF1bHQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkFkZHJlc3NCb29rU2VydmljZSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJBZGRyZXNzQm9vayIgYmluZGluZz0iaW50ZjpBZGRyZXNzQm9va1NvYXBCaW5kaW5nIj4KLSAgICAgIDx3c2Rsc29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvQWRkcmVzc0Jvb2siLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIyLTEvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMi0xL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmFjYzAyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDIyLTEvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSIyMDIyLTEiPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgbm9uLWNvbmZvcm1hbnQgd3NkbCB0aGF0IHNob3VsZCBmYWlsIHRlc3QgYXNzZXJ0aW9uIEJQMjAyMi4KLSAgICBTb2FwYmluZDpmYXVsdCBlbGVtZW50IGRvZXMgbm90IGhhdmUgYSBuYW1lIGF0dHJpYnV0ZS4KLSAgICBOb3RlIHRoaXMgYXNzZXJ0aW9uIGlzIGNhdWdodCBieSB0aGUgYmFzZSBXU0RMIHZhbGlkYXRvci4KLSAgICBTbyB0aGlzIGFzc2VydGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgd2hlbiBydW5uaW5nIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlCi0gICAgYmFzZSB2YWxpZGF0b3IuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAyMiIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAyMiIgdGFkSUQ9IkFQMTAiLz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIwMzIiIHRhZElEPSJTU0JQMTAiLz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIwMzIiIHRhZElEPSJBUDEwIi8+Ci0gIDwvZXhwZWN0ZWRGYWlsdXJlcz4KLTwvdGVzdGNhc2U+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMi0yLzIwMjItMi53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMi0yLzIwMjItMi53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMmRlMWRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjItMi8yMDIyLTIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6d3NkbHNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmltcGw9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgPHdzZGw6dHlwZXM+Ci0gICAgPHNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOmFwYWNoZXNvYXA9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCIgeG1sbnM6aW50Zj0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3MiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3MiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJvdmluY2UiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImNpdHkiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InN0cmVldCIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icG9zdGFsQ29kZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icGhvbmVOdW1iZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOlBob25lTnVtYmVyIi8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iUGhvbmVOdW1iZXIiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0iYXJlYSIgdHlwZT0ieHNkOmludCIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJwcmVmaXgiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0ibnVtYmVyIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzUmV0dXJuIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxlbGVtZW50IG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJhZGRyZXNzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxlbGVtZW50IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlLz4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3NIZWFkZXJUeXBlIj4KLQk8YWxsPgotCSA8ZWxlbWVudCBuYW1lPSJhIiB0eXBlPSJpbnQiLz4KLQkgPGVsZW1lbnQgbmFtZT0iYiIgdHlwZT0iYm9vbGVhbiIvPgotCSA8ZWxlbWVudCBuYW1lPSJzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ic3RyaW5nIi8+Ci0JPC9hbGw+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzc0hlYWRlclR5cGUiLz4KLSAgPC9zY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpzYXZlQWRkcmVzcyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpmaW5kQWRkcmVzcyIvPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgZWxlbWVudD0iaW50ZjpBZGRyZXNzSGVhZGVyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InBhcmFtZXRlcmZhdWx0Ij4KLSAgICA8cGFydCBuYW1lPSJwYXJ0MyIgZWxlbWVudD0iaW50ZjpmaW5kQWRkcmVzcyIgLz4KLSAgIDwvd3NkbDptZXNzYWdlPiAKLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iQWRkcmVzc0Jvb2siPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgICA8d3NkbDpmYXVsdCBuYW1lPSJmMSIgbWVzc2FnZT0iaW50ZjpwYXJhbWV0ZXJmYXVsdCIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6cG9ydFR5cGU+Ci0gIDx3c2RsOmJpbmRpbmcgbmFtZT0iQWRkcmVzc0Jvb2tTb2FwQmluZGluZyIgdHlwZT0iaW50ZjpBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmhlYWRlciBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIgcGFydD0iQWRkcmVzc0hlYWRlciIgdXNlPSJsaXRlcmFsIj4KLSAgICAgICAgICAgPHdzZGxzb2FwOmhlYWRlcmZhdWx0IG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0IiAgcGFydD0iQWRkcmVzc0hlYWRlciIgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICAgICA8L3dzZGxzb2FwOmhlYWRlcj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgcGFydHM9InBhcmFtZXRlcnMiIHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgICA8d3NkbDpmYXVsdCBuYW1lPSJmMSI+Ci0gICAgICAgIDx3c2Rsc29hcDpmYXVsdCB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpmYXVsdD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJBZGRyZXNzQm9va1NlcnZpY2UiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iQWRkcmVzc0Jvb2siIGJpbmRpbmc9ImludGY6QWRkcmVzc0Jvb2tTb2FwQmluZGluZyI+Ci0gICAgICA8d3NkbHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL0FkZHJlc3NCb29rIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMi0yL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMjItMi90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiYTg5MmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAyMi0yL3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjAyMi0yIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG5vbi1jb25mb3JtYW50IHdzZGwgdGhhdCBzaG91bGQgZmFpbCB0ZXN0IGFzc2VydGlvbiBCUDIwMjIuCi0gICAgU29hcGJpbmQ6ZmF1bHQgZWxlbWVudCBkb2VzIG5vdCBoYXZlIGEgbmFtZSBhdHRyaWJ1dGUuCi0gICAgTm90ZSB0aGlzIGFzc2VydGlvbiBpcyBjYXVnaHQgYnkgdGhlIGJhc2UgV1NETCB2YWxpZGF0b3IuCi0gICAgU28gdGhpcyBhc3NlcnRpb24gc2hvdWxkIGJlIGRpc2FibGVkIHdoZW4gcnVubmluZyBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZQotICAgIGJhc2UgdmFsaWRhdG9yLgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIwMjIiIHRhZElEPSJTU0JQMTAiLz4KLQk8YXNzZXJ0aW9uIGlkPSJCUDIwMjIiIHRhZElEPSJBUDEwIi8+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMDMyIiB0YWRJRD0iU1NCUDEwIi8+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMDMyIiB0YWRJRD0iQVAxMCIvPgotICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMzItMS8yMDMyLTEud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMzItMS8yMDMyLTEud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyMjM1ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDMyLTEvMjAzMi0xLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAKLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJhZGRyZXNzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICA8c2VxdWVuY2UvPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIHR5cGU9ImltcGw6QWRkcmVzc0hlYWRlclR5cGUiLz4KLSAgICA8ZWxlbWVudCBuYW1lPSJBZGRyZXNzIiB0eXBlPSJzdHJpbmciLz4KLSAgPC9zY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpzYXZlQWRkcmVzcyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgZWxlbWVudD0iaW50ZjpBZGRyZXNzSGVhZGVyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InBhcmFtZXRlcmZhdWx0Ij4KLSAgICA8cGFydCBuYW1lPSJwYXJ0MyIgZWxlbWVudD0iaW50ZjpBZGRyZXNzIiAvPgotICA8L3dzZGw6bWVzc2FnZT4gIAotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICAgIDx3c2RsOmZhdWx0IG5hbWU9ImYxIiBtZXNzYWdlPSJpbnRmOnBhcmFtZXRlcmZhdWx0Ii8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJBZGRyZXNzQm9va1NvYXBCaW5kaW5nIiB0eXBlPSJpbnRmOkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbHNvYXA6YmluZGluZyBzdHlsZT0icnBjIiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmhlYWRlciBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIgcGFydD0iQWRkcmVzc0hlYWRlciIgdXNlPSJsaXRlcmFsIj4KLSAgICAgICAgICA8d3NkbHNvYXA6aGVhZGVyZmF1bHQgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiICBwYXJ0PSJBZGRyZXNzSGVhZGVyIiB1c2U9ImxpdGVyYWwiLz4KLSAgICAgICAgPC93c2Rsc29hcDpoZWFkZXI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHBhcnRzPSJwYXJhbWV0ZXJzIiB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICAgIDx3c2RsOmZhdWx0IG5hbWU9ImYxIj4KLSAgICAgICAgPHdzZGxzb2FwOmZhdWx0IG5hbWU9ImZhdWx0MSIgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6ZmF1bHQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpiaW5kaW5nPgotICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkFkZHJlc3NCb29rU2VydmljZSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJBZGRyZXNzQm9vayIgYmluZGluZz0iaW50ZjpBZGRyZXNzQm9va1NvYXBCaW5kaW5nIj4KLSAgICAgIDx3c2Rsc29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvQWRkcmVzc0Jvb2siLz4KLSAgICA8L3dzZGw6cG9ydD4KLSAgPC93c2RsOnNlcnZpY2U+Ci08L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDMyLTEvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAzMi0xL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE4YjMyNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDMyLTEvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSIyMDMyLTEiPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgbm9uLWNvbmZvcm1hbnQgd3NkbCB0aGF0IHNob3VsZCBmYWlsIHRlc3QgYXNzZXJ0aW9uIEJQMjAyMi4KLSAgICBUaGUgbmFtZSBhdHRyaWJ1dGUgdmFsdWUgb24gdGhlIFNvYXBiaW5kOmZhdWx0IGVsZW1lbnQgZG9lcyBub3QgbWF0Y2ggdGhlIG5hbWUgCi0gICAgYXR0cmlidXRlIHZhbHVlIHNwZWNpZmllZCBvbiB0aGUgcGFyZW50IGVsZW1lbnQgd3NkbDpmYXVsdCBlbGVtZW50LgotICAgIE5vdGUgdGhpcyBhc3NlcnRpb24gaXMgY2F1Z2h0IGJ5IHRoZSBiYXNlIFdTREwgdmFsaWRhdG9yLgotICAgIFNvIHRoaXMgYXNzZXJ0aW9uIHNob3VsZCBiZSBkaXNhYmxlZCB3aGVuIHJ1bm5pbmcgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUKLSAgICBiYXNlIHZhbGlkYXRvci4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXM+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMDMyIiB0YWRJRD0iU1NCUDEwIi8+Ci0JPGFzc2VydGlvbiBpZD0iQlAyMDMyIiB0YWRJRD0iQVAxMCIvPgotICA8L2V4cGVjdGVkRmFpbHVyZXM+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMzItMi8yMDMyLTIud3NkbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMzItMi8yMDMyLTIud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODUyZmFkZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3JlZHVuZGFudC8yMDMyLTIvMjAzMi0yLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkcmVzcyIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZS8+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3NIZWFkZXJUeXBlIi8+Ci0gIDwvc2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3MiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3MiLz4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IkFkZHJlc3NIZWFkZXIiIGVsZW1lbnQ9ImludGY6QWRkcmVzc0hlYWRlciIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJwYXJhbWV0ZXJmYXVsdCI+Ci0gICAgPHBhcnQgbmFtZT0icGFydDMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3MiIC8+Ci0gICA8L3dzZGw6bWVzc2FnZT4gCi0gIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iZjEiIG1lc3NhZ2U9ImludGY6cGFyYW1ldGVyZmF1bHQiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkFkZHJlc3NCb29rU29hcEJpbmRpbmciIHR5cGU9ImludGY6QWRkcmVzc0Jvb2siPgotICAgIDx3c2Rsc29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZmluZEFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpoZWFkZXIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiIHBhcnQ9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCI+Ci0gICAgICAgICAgIDx3c2Rsc29hcDpoZWFkZXJmYXVsdCBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVxdWVzdCIgIHBhcnQ9IkFkZHJlc3NIZWFkZXIiIHVzZT0ibGl0ZXJhbCIvPgotICAgICAgICAgPC93c2Rsc29hcDpoZWFkZXI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHBhcnRzPSJwYXJhbWV0ZXJzIiB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDppbnB1dD4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iZjEiPgotICAgICAgICA8d3NkbHNvYXA6ZmF1bHQgbmFtZT0iZmF1bHQxIiB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpmYXVsdD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJBZGRyZXNzQm9va1NlcnZpY2UiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iQWRkcmVzc0Jvb2siIGJpbmRpbmc9ImludGY6QWRkcmVzc0Jvb2tTb2FwQmluZGluZyI+Ci0gICAgICA8d3NkbHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL0FkZHJlc3NCb29rIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAzMi0yL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvcmVkdW5kYW50LzIwMzItMi90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjMzQ1OTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC9yZWR1bmRhbnQvMjAzMi0yL3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iMjAzMi0yIj4KLSAgPGRlc2NyaXB0aW9uPgotICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIG5vbi1jb25mb3JtYW50IHdzZGwgdGhhdCBzaG91bGQgZmFpbCB0ZXN0IGFzc2VydGlvbiBCUDIwMjIuCi0gICAgVGhlIG5hbWUgYXR0cmlidXRlIHZhbHVlIG9uIHRoZSBTb2FwYmluZDpmYXVsdCBlbGVtZW50IGRvZXMgbm90IG1hdGNoIHRoZSBuYW1lIAotICAgIGF0dHJpYnV0ZSB2YWx1ZSBzcGVjaWZpZWQgb24gdGhlIHBhcmVudCBlbGVtZW50IHdzZGw6ZmF1bHQgZWxlbWVudC4KLSAgICBOb3RlIHRoaXMgYXNzZXJ0aW9uIGlzIGNhdWdodCBieSB0aGUgYmFzZSBXU0RMIHZhbGlkYXRvci4KLSAgICBTbyB0aGlzIGFzc2VydGlvbiBzaG91bGQgYmUgZGlzYWJsZWQgd2hlbiBydW5uaW5nIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlCi0gICAgYmFzZSB2YWxpZGF0b3IuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAzMiIgdGFkSUQ9IlNTQlAxMCIvPgotCTxhc3NlcnRpb24gaWQ9IkJQMjAzMiIgdGFkSUQ9IkFQMTAiLz4KLSAgPC9leHBlY3RlZEZhaWx1cmVzPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3dzaS9hZGRyZXNzQm9vay1ycGMvYWRkcmVzc0Jvb2stcnBjLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3dzaS9hZGRyZXNzQm9vay1ycGMvYWRkcmVzc0Jvb2stcnBjLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3NzdjMTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC93c2kvYWRkcmVzc0Jvb2stcnBjL2FkZHJlc3NCb29rLXJwYy53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAKLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJhZGRyZXNzIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpBZGRyZXNzIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICA8c2VxdWVuY2UvPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIHR5cGU9ImltcGw6QWRkcmVzc0hlYWRlclR5cGUiLz4KLSAgPC9zY2hlbWE+Ci0gIDwvd3NkbDp0eXBlcz4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpzYXZlQWRkcmVzcyIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDx3c2RsOnBhcnQgbmFtZT0iQWRkcmVzc0hlYWRlciIgZWxlbWVudD0iaW50ZjpBZGRyZXNzSGVhZGVyIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDptZXNzYWdlIG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgdHlwZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gIDwvd3NkbDptZXNzYWdlPgotICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJBZGRyZXNzQm9vayI+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVxdWVzdCIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1JlcXVlc3QiLz4KLSAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIiBtZXNzYWdlPSJpbnRmOmZpbmRBZGRyZXNzUmVzcG9uc2UiLz4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpzYXZlQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOnBvcnRUeXBlPgotICA8d3NkbDpiaW5kaW5nIG5hbWU9IkFkZHJlc3NCb29rU29hcEJpbmRpbmciIHR5cGU9ImludGY6QWRkcmVzc0Jvb2siPgotICAgIDx3c2Rsc29hcDpiaW5kaW5nIHN0eWxlPSJycGMiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6aGVhZGVyIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0IiBwYXJ0PSJBZGRyZXNzSGVhZGVyIiB1c2U9ImxpdGVyYWwiPgotICAgICAgICA8L3dzZGxzb2FwOmhlYWRlcj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgcGFydHM9InBhcmFtZXRlcnMiIHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6aW5wdXQ+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgbmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIi8+Ci0gICAgICA8L3dzZGw6b3V0cHV0PgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNhdmVBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXZlQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIG5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIvPgotICAgICAgPC93c2RsOm91dHB1dD4KLSAgICA8L3dzZGw6b3BlcmF0aW9uPgotICA8L3dzZGw6YmluZGluZz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJBZGRyZXNzQm9va1NlcnZpY2UiPgotICAgIDx3c2RsOnBvcnQgbmFtZT0iQWRkcmVzc0Jvb2siIGJpbmRpbmc9ImludGY6QWRkcmVzc0Jvb2tTb2FwQmluZGluZyI+Ci0gICAgICA8d3NkbHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL0FkZHJlc3NCb29rIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC93c2kvYWRkcmVzc0Jvb2stcnBjL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvd3NpL2FkZHJlc3NCb29rLXJwYy90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1YTJmOGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC93c2kvYWRkcmVzc0Jvb2stcnBjL3Rlc3RjYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSJhZGRyZXNzQm9vay1ycGMiPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgY29uZm9ybWFudCB3c2RsIHVzZWQgaW4gdGhlIFdTLUkgCi0gICAgaW50ZXJvcGVyYWJpbGl0eSBkZW1vLgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcy8+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvd3NpL2FkZHJlc3NCb29rL2FkZHJlc3NCb29rLndzZGwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3dzaS9hZGRyZXNzQm9vay9hZGRyZXNzQm9vay53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTQ4MmQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvd3NpL2FkZHJlc3NCb29rL2FkZHJlc3NCb29rLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczppbnRmPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczppbXBsPSJodHRwOi8vdGVtcHVyaS5vcmcvIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+Ci0gIDx3c2RsOnR5cGVzPgotICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczphcGFjaGVzb2FwPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveG1sLXNvYXAiIHhtbG5zOmludGY9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KLSAgIDxlbGVtZW50IG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Im5hbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InByb3ZpbmNlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3RhbENvZGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBob25lTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wbDpQaG9uZU51bWJlciIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlBob25lTnVtYmVyIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9ImFyZWEiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgPGVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgIDxlbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHNkOmludCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGVsZW1lbnQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJmaW5kQWRkcmVzc1JldHVybiIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzcyI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkcmVzcyIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcGw6QWRkcmVzcyIvPgotICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gICA8ZWxlbWVudCBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZS8+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzSGVhZGVyVHlwZSI+Ci0JPGFsbD4KLQkgPGVsZW1lbnQgbmFtZT0iYSIgdHlwZT0iaW50Ii8+Ci0JIDxlbGVtZW50IG5hbWU9ImIiIHR5cGU9ImJvb2xlYW4iLz4KLQkgPGVsZW1lbnQgbmFtZT0icyIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgotCTwvYWxsPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxlbGVtZW50IG5hbWU9IkFkZHJlc3NIZWFkZXIiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXBsOkFkZHJlc3NIZWFkZXJUeXBlIi8+Ci0gIDwvc2NoZW1hPgotICA8L3dzZGw6dHlwZXM+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3MiLz4KLSAgPC93c2RsOm1lc3NhZ2U+Ci0gIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZmluZEFkZHJlc3NSZXF1ZXN0Ij4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3MiLz4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9IkFkZHJlc3NIZWFkZXIiIGVsZW1lbnQ9ImludGY6QWRkcmVzc0hlYWRlciIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJmaW5kQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6ZmluZEFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXZlQWRkcmVzc1Jlc3BvbnNlIj4KLSAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICA8L3dzZGw6bWVzc2FnZT4KLSAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iQWRkcmVzc0Jvb2siPgotICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJmaW5kQWRkcmVzcyI+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0Ii8+Ci0gICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZmluZEFkZHJlc3NSZXNwb25zZSIgbWVzc2FnZT0iaW50ZjpmaW5kQWRkcmVzc1Jlc3BvbnNlIi8+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F2ZUFkZHJlc3NSZXF1ZXN0IiBtZXNzYWdlPSJpbnRmOnNhdmVBZGRyZXNzUmVxdWVzdCIvPgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiIG1lc3NhZ2U9ImludGY6c2F2ZUFkZHJlc3NSZXNwb25zZSIvPgotICAgIDwvd3NkbDpvcGVyYXRpb24+Ci0gIDwvd3NkbDpwb3J0VHlwZT4KLSAgPHdzZGw6YmluZGluZyBuYW1lPSJBZGRyZXNzQm9va1NvYXBCaW5kaW5nIiB0eXBlPSJpbnRmOkFkZHJlc3NCb29rIj4KLSAgICA8d3NkbHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+Ci0gICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImZpbmRBZGRyZXNzIj4KLSAgICAgIDx3c2Rsc29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+Ci0gICAgICA8d3NkbDppbnB1dCBuYW1lPSJmaW5kQWRkcmVzc1JlcXVlc3QiPgotICAgICAgICA8d3NkbHNvYXA6aGVhZGVyIG1lc3NhZ2U9ImludGY6ZmluZEFkZHJlc3NSZXF1ZXN0IiBwYXJ0PSJBZGRyZXNzSGVhZGVyIiB1c2U9ImxpdGVyYWwiPgotICAgICAgICA8L3dzZGxzb2FwOmhlYWRlcj4KLSAgICAgICAgPHdzZGxzb2FwOmJvZHkgcGFydHM9InBhcmFtZXRlcnMiIHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImZpbmRBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F2ZUFkZHJlc3MiPgotICAgICAgPHdzZGxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4KLSAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNhdmVBZGRyZXNzUmVxdWVzdCI+Ci0gICAgICAgIDx3c2Rsc29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgotICAgICAgPC93c2RsOmlucHV0PgotICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNhdmVBZGRyZXNzUmVzcG9uc2UiPgotICAgICAgICA8d3NkbHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KLSAgICAgIDwvd3NkbDpvdXRwdXQ+Ci0gICAgPC93c2RsOm9wZXJhdGlvbj4KLSAgPC93c2RsOmJpbmRpbmc+Ci0gIDx3c2RsOnNlcnZpY2UgbmFtZT0iQWRkcmVzc0Jvb2tTZXJ2aWNlIj4KLSAgICA8d3NkbDpwb3J0IG5hbWU9IkFkZHJlc3NCb29rIiBiaW5kaW5nPSJpbnRmOkFkZHJlc3NCb29rU29hcEJpbmRpbmciPgotICAgICAgPHdzZGxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly90ZW1wdXJpLm9yZy9BZGRyZXNzQm9vayIvPgotICAgIDwvd3NkbDpwb3J0PgotICA8L3dzZGw6c2VydmljZT4KLTwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvd3NpL2FkZHJlc3NCb29rL3Rlc3RjYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvd3NpL2FkZHJlc3NCb29rL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTRjNjhhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3dzaS9hZGRyZXNzQm9vay90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08dGVzdGNhc2UgbmFtZT0iYWRkcmVzc0Jvb2siPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgY29uZm9ybWFudCB3c2RsIHVzZWQgaW4gdGhlIFdTLUkgCi0gICAgaW50ZXJvcGVyYWJpbGl0eSBkZW1vLgotICA8L2Rlc2NyaXB0aW9uPgotICA8ZXhwZWN0ZWRGYWlsdXJlcy8+Ci08L3Rlc3RjYXNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvd3NpL3NhbXBsZUFwcENhdGFsb2cvc2FtcGxlQXBwQ2F0YWxvZy53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC93c2kvc2FtcGxlQXBwQ2F0YWxvZy9zYW1wbGVBcHBDYXRhbG9nLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkYzI5NzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC93c2kvc2FtcGxlQXBwQ2F0YWxvZy9zYW1wbGVBcHBDYXRhbG9nLndzZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdzZGw6ZGVmaW5pdGlvbnMgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIgotIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgotIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0geG1sbnM6d3NkbHNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iCi0geG1sbnM6aW50Zj0iaHR0cDovL3d3dy53cy1pLm9yZy9TYW1wbGVBcHBsaWNhdGlvbnMvU3VwcGx5Q2hhaW5NYW5hZ2VtZW50LzIwMDMtMDcvQ2F0YWxvZy53c2RsIgotIHhtbG5zOmltcGw9Imh0dHA6Ly93d3cud3MtaS5vcmcvU2FtcGxlQXBwbGljYXRpb25zL1N1cHBseUNoYWluTWFuYWdlbWVudC8yMDAzLTA3L0NhdGFsb2dfSW1wbC53c2RsIgotIHhtbG5zOlNPQVAtRU5DPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIKLSB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgotICA8d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LndzLWkub3JnL1NhbXBsZUFwcGxpY2F0aW9ucy9TdXBwbHlDaGFpbk1hbmFnZW1lbnQvMjAwMy0wNy9DYXRhbG9nLndzZGwiIAotCWxvY2F0aW9uPSJodHRwOi8vd3d3LndzLWkub3JnL1NhbXBsZUFwcGxpY2F0aW9ucy9TdXBwbHlDaGFpbk1hbmFnZW1lbnQvMjAwMy0wNy9DYXRhbG9nLndzZGwiLz4KLSAgPHdzZGw6c2VydmljZSBuYW1lPSJDYXRhbG9nU2VydmljZSI+Ci0gICAgPHdzZGw6cG9ydCBuYW1lPSJDYXRhbG9nIiBiaW5kaW5nPSJpbnRmOkNhdGFsb2dTb2FwQmluZGluZyI+Ci0gICAgICA8d3NkbHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL0NhdGFsb2dTZXJ2aWNlIi8+Ci0gICAgPC93c2RsOnBvcnQ+Ci0gIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvd3NpL3NhbXBsZUFwcENhdGFsb2cvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC93c2kvc2FtcGxlQXBwQ2F0YWxvZy90ZXN0Y2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjMDUzYTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC93c2kvc2FtcGxlQXBwQ2F0YWxvZy90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9InNhbXBsZUFwcENhdGFsb2ciPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyB0aGUgV1MtSSBTYW1wbGUgQXBwbGljYXRpb24gZGVtb25zdHJhdGluZyBhdHRhY2htZW50IHN1cHBvcnQuCi0gICAgVGhpcyBzaG91bGQgdmFsaWRhdGUgYWdhaW5zdCB0aGUgV1MtSSBBdHRhY2htZW50cyBQcm9maWxlLgotICAgIEhvd2V2ZXIsIHRoaXMgc2hvdWxkIGZhaWwgdG8gY29uZm9ybSB0byB0aGUgV1MtSSBTaW1wbGUgU29hcCBCaW5kaW5nIFByb2ZpbGUuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzPgotCTxhc3NlcnRpb24gaWQ9IlNTQlAyNDAzIiB0YWRJRD0iU1NCUDEwIi8+Ci0gIDwvZXhwZWN0ZWRGYWlsdXJlcz4KLTwvdGVzdGNhc2U+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC93c2kvc2FtcGxlQXBwTWFudWZhY3R1cmVyL3NhbXBsZUFwcE1hbnVmYWN0dXJlci53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC93c2kvc2FtcGxlQXBwTWFudWZhY3R1cmVyL3NhbXBsZUFwcE1hbnVmYWN0dXJlci53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZWQwNjc5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvd3NpL3NhbXBsZUFwcE1hbnVmYWN0dXJlci9zYW1wbGVBcHBNYW51ZmFjdHVyZXIud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLTx3c2RsOmRlZmluaXRpb25zIAotCXhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiAKLQl4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi0JeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIKLQl4bWxuczpTT0FQLUVOQz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iIAotCXhtbG5zOmltcGw9Imh0dHA6Ly93d3cud3MtaS5vcmcvU2FtcGxlQXBwbGljYXRpb25zL1N1cHBseUNoYWluTWFuYWdlbWVudC8yMDAyLTEwL01hbnVmYWN0dXJlcl9JbXBsLndzZGwiIAotCXhtbG5zOmludGY9Imh0dHA6Ly93d3cud3MtaS5vcmcvU2FtcGxlQXBwbGljYXRpb25zL1N1cHBseUNoYWluTWFuYWdlbWVudC8yMDAyLTEwL01hbnVmYWN0dXJlci53c2RsIiAKLQl4bWxuczpjdD0iaHR0cDovL3d3dy53cy1pLm9yZy9TYW1wbGVBcHBsaWNhdGlvbnMvU3VwcGx5Q2hhaW5NYW5hZ2VtZW50LzIwMDItMDgvQ29uZmlndXJhdGlvbi54c2QiIAotCXhtbG5zOmNmZz0iaHR0cDovL3d3dy53cy1pLm9yZy9TYW1wbGVBcHBsaWNhdGlvbnMvU3VwcGx5Q2hhaW5NYW5hZ2VtZW50LzIwMDItMDgvQ29uZmlndXJhdGlvbi53c2RsIgotCXhtbG5zOndzZGxzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiAKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cud3MtaS5vcmcvU2FtcGxlQXBwbGljYXRpb25zL1N1cHBseUNoYWluTWFuYWdlbWVudC8yMDAyLTEwL01hbnVmYWN0dXJlci53c2RsIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnLyI+Ci0KLSAgIDx3c2RsOmltcG9ydCBsb2NhdGlvbj0iaHR0cDovL3d3dy53cy1pLm9yZy9TYW1wbGVBcHBsaWNhdGlvbnMvU3VwcGx5Q2hhaW5NYW5hZ2VtZW50LzIwMDItMTAvTWFudWZhY3R1cmVyLndzZGwiIAotICAgCQluYW1lc3BhY2U9Imh0dHA6Ly93d3cud3MtaS5vcmcvU2FtcGxlQXBwbGljYXRpb25zL1N1cHBseUNoYWluTWFuYWdlbWVudC8yMDAyLTEwL01hbnVmYWN0dXJlci53c2RsIi8+Ci0gICA8d3NkbDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LndzLWkub3JnL1NhbXBsZUFwcGxpY2F0aW9ucy9TdXBwbHlDaGFpbk1hbmFnZW1lbnQvMjAwMi0wOC9Db25maWd1cmF0aW9uLndzZGwiCi0JCWxvY2F0aW9uPSJodHRwOi8vd3d3LndzLWkub3JnL1NhbXBsZUFwcGxpY2F0aW9ucy9TdXBwbHlDaGFpbk1hbmFnZW1lbnQvMjAwMi0wOC9Db25maWd1cmF0aW9uLndzZGwiLz4KLQotICAgPHdzZGw6c2VydmljZSBuYW1lPSJUZXN0U2VydmljZSI+Ci0gICAgICA8d3NkbDpwb3J0IGJpbmRpbmc9ImludGY6TWFudWZhY3R1cmVyU29hcEJpbmRpbmciIG5hbWU9IlRlc3RQb3J0Ij4KLSAgICAgICAgIDx3c2Rsc29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vdGVtcHVyaS5vcmcvVGVzdFNlcnZpY2UiLz4KLSAgICAgIDwvd3NkbDpwb3J0PgotICAgPC93c2RsOnNlcnZpY2U+Ci0KLTwvd3NkbDpkZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3dzaS9zYW1wbGVBcHBNYW51ZmFjdHVyZXIvdGVzdGNhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC93c2kvc2FtcGxlQXBwTWFudWZhY3R1cmVyL3Rlc3RjYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjVjOWYwNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3dzaS9zYW1wbGVBcHBNYW51ZmFjdHVyZXIvdGVzdGNhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx0ZXN0Y2FzZSBuYW1lPSJzYW1wbGVBcHBNYW51ZmFjdHVyZXIiPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgVGhpcyBpcyB0aGUgV1MtSSBTYW1wbGUgQXBwbGljYXRpb24gZXhlcmNpc2luZyB0aGUgIE1hbnVmYWN0dXJlciB3c2RsIAotICAgIGluIHRoZSBXUy1JIEJhc2ljIFByb2ZpbGUuCi0gICAgVGhpcyBzaG91bGQgdmFsaWRhdGUgYWdhaW5zdCB0aGUgV1MtSSBTaW1wbGUgU29hcCBCaW5kaW5nIFByb2ZpbGUuCi0gICAgVGhpcyBzaG91bGQgYWxzbyB2YWxpZGF0ZSBhZ2FpbnN0IHRoZSBXUy1JIEF0dGFjaG1lbnRzIFByb2ZpbGUuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxleHBlY3RlZEZhaWx1cmVzLz4KLTwvdGVzdGNhc2U+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC93c2kvc2FtcGxlQXBwV2FyZWhvdXNlL3NhbXBsZUFwcFdhcmVob3VzZS53c2RsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LndzaS50ZXN0cy90ZXN0UmVzb3VyY2VzL3NhbXBsZXMvd3NkbC93c2kvc2FtcGxlQXBwV2FyZWhvdXNlL3NhbXBsZUFwcFdhcmVob3VzZS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYmUwZDIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvd3NpL3NhbXBsZUFwcFdhcmVob3VzZS9zYW1wbGVBcHBXYXJlaG91c2Uud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLTx3c2RsOmRlZmluaXRpb25zIAotCXhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiAKLQl4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCi0JeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIKLQl4bWxuczppbnRmPSJodHRwOi8vd3d3LndzLWkub3JnL1NhbXBsZUFwcGxpY2F0aW9ucy9TdXBwbHlDaGFpbk1hbmFnZW1lbnQvMjAwMi0wOC9XYXJlaG91c2Uud3NkbCIgCi0JeG1sbnM6bWFuPSJodHRwOi8vd3d3LndzLWkub3JnL1NhbXBsZUFwcGxpY2F0aW9ucy9TdXBwbHlDaGFpbk1hbmFnZW1lbnQvMjAwMi0xMC9NYW51ZmFjdHVyZXIud3NkbCIKLQl4bWxuczp3c2Rsc29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGVtcHVyaS5vcmcvIj4KLQotICAgPHdzZGw6aW1wb3J0IGxvY2F0aW9uPSJodHRwOi8vd3d3LndzLWkub3JnL1NhbXBsZUFwcGxpY2F0aW9ucy9TdXBwbHlDaGFpbk1hbmFnZW1lbnQvMjAwMi0xMC9NYW51ZmFjdHVyZXIud3NkbCIgCi0gICAJCW5hbWVzcGFjZT0iaHR0cDovL3d3dy53cy1pLm9yZy9TYW1wbGVBcHBsaWNhdGlvbnMvU3VwcGx5Q2hhaW5NYW5hZ2VtZW50LzIwMDItMTAvTWFudWZhY3R1cmVyLndzZGwiLz4KLSAgIDx3c2RsOmltcG9ydCBsb2NhdGlvbj0iaHR0cDovL3d3dy53cy1pLm9yZy9TYW1wbGVBcHBsaWNhdGlvbnMvU3VwcGx5Q2hhaW5NYW5hZ2VtZW50LzIwMDItMDgvV2FyZWhvdXNlLndzZGwiIAotICAgCQluYW1lc3BhY2U9Imh0dHA6Ly93d3cud3MtaS5vcmcvU2FtcGxlQXBwbGljYXRpb25zL1N1cHBseUNoYWluTWFuYWdlbWVudC8yMDAyLTA4L1dhcmVob3VzZS53c2RsIi8+Ci0KLSAgIDx3c2RsOnNlcnZpY2UgbmFtZT0iVGVzdFNlcnZpY2UiPgotICAgICAgPHdzZGw6cG9ydCBiaW5kaW5nPSJpbnRmOldhcmVob3VzZVNvYXBCaW5kaW5nIiBuYW1lPSJUZXN0UG9ydCI+Ci0gICAgICAgICA8d3NkbHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL1Rlc3RTZXJ2aWNlIi8+Ci0gICAgICA8L3dzZGw6cG9ydD4KLSAgIDwvd3NkbDpzZXJ2aWNlPgotPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvd3NpL3NhbXBsZUFwcFdhcmVob3VzZS90ZXN0Y2FzZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Qud3NpLnRlc3RzL3Rlc3RSZXNvdXJjZXMvc2FtcGxlcy93c2RsL3dzaS9zYW1wbGVBcHBXYXJlaG91c2UvdGVzdGNhc2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzBkYzUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC53c2kudGVzdHMvdGVzdFJlc291cmNlcy9zYW1wbGVzL3dzZGwvd3NpL3NhbXBsZUFwcFdhcmVob3VzZS90ZXN0Y2FzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHRlc3RjYXNlIG5hbWU9InNhbXBsZUFwcFdhcmVob3VzZSI+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBUaGlzIGlzIHRoZSBXUy1JIFNhbXBsZSBBcHBsaWNhdGlvbiBleGVyY2lzaW5nIHRoZSAgV2FyZWhvdXNlIHdzZGwgCi0gICAgaW4gdGhlIFdTLUkgQmFzaWMgUHJvZmlsZS4KLSAgICBUaGlzIHNob3VsZCB2YWxpZGF0ZSBhZ2FpbnN0IHRoZSBXUy1JIFNpbXBsZSBTb2FwIEJpbmRpbmcgUHJvZmlsZS4KLSAgICBUaGlzIHNob3VsZCBhbHNvIHZhbGlkYXRlIGFnYWluc3QgdGhlIFdTLUkgQXR0YWNobWVudHMgUHJvZmlsZS4KLSAgPC9kZXNjcmlwdGlvbj4KLSAgPGV4cGVjdGVkRmFpbHVyZXMvPgotPC90ZXN0Y2FzZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCg==